ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiMTNiMgotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTcxIEBACisjCisjICAgIENvcHlyaWdodCAoYykgMjAxMC0yMDEyIE5lc3QsIEluYy4KKyMgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgICAgVGhpcyBkb2N1bWVudCBpcyB0aGUgcHJvcGVydHkgb2YgTmVzdC4gSXQgaXMgY29uc2lkZXJlZAorIyAgICBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgorIworIyAgICBUaGlzIGRvY3VtZW50IG1heSBub3QgYmUgcmVwcm9kdWNlZCBvciB0cmFuc21pdHRlZCBpbiBhbnkgZm9ybSwKKyMgICAgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YKKyMgICAgTmVzdC4KKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBtYWtlZmlsZSBmb3IgdGhlIGxpYnJhcnkgYW5kIGNvbW1hbmQgbGluZQorIyAgICAgIHV0aWxpdHkgZm9yIHRyYW5zZmVycmluZyBmaWxlcyB3aXRoIFVSTCBzeW50YXgsIGxpYmN1cmwgYW5kCisjICAgICAgY3VybCwgcmVzcGVjdGl2ZWx5LgorIworCitpbmNsdWRlIHByZS5tYWsKKworUGFja2FnZU5hbWUJCTo9IGN1cmwKKworUGFja2FnZUV4dGVuc2lvbgk6PSB0YXIuZ3oKK1BhY2thZ2VTZXBhcmF0b3IJOj0gLQorCitQYWNrYWdlUGF0Y2hBcmdzICAgIDo9IC1wMQorCitQYWNrYWdlQXJjaGl2ZQkJOj0gJChQYWNrYWdlTmFtZSkuJChQYWNrYWdlRXh0ZW5zaW9uKQorUGFja2FnZVNvdXJjZURpcgk6PSAkKFBhY2thZ2VOYW1lKSQoUGFja2FnZVNlcGFyYXRvcikkKFBhY2thZ2VWZXJzaW9uKQorCitQYWNrYWdlQnVpbGRNYWtlZmlsZQk9ICQoY2FsbCBHZW5lcmF0ZUJ1aWxkUGF0aHMsTWFrZWZpbGUpCisKK0NsZWFuUGF0aHMJCSs9ICQoUGFja2FnZUxpY2Vuc2VGaWxlKQorCitUcHNEaXIgICAgICAgICAgICAgICAgICA9IHN3L3RwcworCitPcGVuU1NMRGlyICAgICAgICAgICAgICA9ICQoVHBzRGlyKS9vcGVuc3NsCitPcGVuU1NMUHJlZml4RGlyICAgICAgICA9IHVzcgorT3BlblNTTEluY2x1ZGVEaXIgICAgICAgPSAkKE9wZW5TU0xQcmVmaXhEaXIpL2luY2x1ZGUKK09wZW5TU0xMaWJyYXJ5RGlyICAgICAgID0gJChPcGVuU1NMUHJlZml4RGlyKS9saWIKK09wZW5TU0xOYW1lcyAgICAgICAgICAgID0gY3J5cHRvIHNzbAorT3BlblNTTFNlYXJjaFBhdGggICAgICAgPSAkKGNhbGwgR2VuZXJhdGVSZXN1bHRQYXRocywkKE9wZW5TU0xEaXIpLCQoT3BlblNTTFByZWZpeERpcikpCitPcGVuU1NMSW5jbHVkZVBhdGggICAgICA9ICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCQoT3BlblNTTERpciksJChPcGVuU1NMSW5jbHVkZURpcikpCitPcGVuU1NMTGlicmFyeVBhdGggICAgICA9ICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCQoT3BlblNTTERpciksJChPcGVuU1NMTGlicmFyeURpcikpCitPcGVuU1NMTGlicmFyeVBhdGhzICAgICA9ICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCQoT3BlblNTTFJlc3VsdHNEaXIpLCQoYWRkcHJlZml4ICQoT3BlblNTTExpYnJhcnlEaXIpLywkKE9wZW5TU0xOYW1lcykpKQorT3BlblNTTERlcGVuZFBhdGhzICAgICAgPSAkKGNhbGwgR2VuZXJhdGVTaGFyZWRMaWJyYXJ5UmVzdWx0UGF0aHMsJChPcGVuU1NMRGlyKS8kKE9wZW5TU0xMaWJyYXJ5RGlyKSwkKE9wZW5TU0xOYW1lcykpCisKK1psaWJEaXIgICAgICAgICAgICAgICAgID0gJChUcHNEaXIpL3psaWIKK1psaWJQcmVmaXhEaXIgICAgICAgICAgID0gdXNyCitabGliSW5jbHVkZURpciAgICAgICAgICA9ICQoWmxpYlByZWZpeERpcikvaW5jbHVkZQorWmxpYkxpYnJhcnlEaXIgICAgICAgICAgPSAkKFpsaWJQcmVmaXhEaXIpL2xpYgorWmxpYk5hbWUgICAgICAgICAgICAgICAgPSB6CitabGliU2VhcmNoUGF0aCAgICAgICAgICA9ICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCQoWmxpYkRpciksJChabGliUHJlZml4RGlyKSkKK1psaWJJbmNsdWRlUGF0aCAgICAgICAgID0gJChjYWxsIEdlbmVyYXRlUmVzdWx0UGF0aHMsJChabGliRGlyKSwkKFpsaWJJbmNsdWRlRGlyKSkKK1psaWJMaWJyYXJ5UGF0aCAgICAgICAgID0gJChjYWxsIEdlbmVyYXRlUmVzdWx0UGF0aHMsJChabGliRGlyKSwkKFpsaWJMaWJyYXJ5RGlyKSkKK1psaWJEZXBlbmRQYXRoICAgICAgICAgID0gJChjYWxsIEdlbmVyYXRlU2hhcmVkTGlicmFyeVJlc3VsdFBhdGhzLCQoWmxpYkRpcikvJChabGliTGlicmFyeURpciksJChabGliTmFtZSkpCisKK2FsbDogJChQYWNrYWdlRGVmYXVsdEdvYWwpCisKKyMgR2VuZXJhdGUgdGhlIHBhY2thZ2UgbGljZW5zZSBjb250ZW50cy4KKworJChQYWNrYWdlU291cmNlRGlyKS9DT1BZSU5HOiBzb3VyY2UKKworJChQYWNrYWdlTGljZW5zZUZpbGUpOiAkKFBhY2thZ2VTb3VyY2VEaXIpL0NPUFlJTkcKKwkkKGNvcHktcmVzdWx0KQorCisjIEV4dHJhY3QgdGhlIHNvdXJjZSBmcm9tIHRoZSBhcmNoaXZlIGFuZCBhcHBseSBwYXRjaGVzLCBpZiBhbnkuCisKKyQoUGFja2FnZVNvdXJjZURpcik6ICQoUGFja2FnZUFyY2hpdmUpICQoUGFja2FnZVBhdGNoUGF0aHMpCisJJChleHBhbmQtYW5kLXBhdGNoLXBhY2thZ2UpCisKKyMgUHJlcGFyZSB0aGUgc291cmNlcy4KKworLlBIT05ZOiBzb3VyY2UKK3NvdXJjZTogfCAkKFBhY2thZ2VTb3VyY2VEaXIpCisKKyMgUGF0Y2ggdGhlIHNvdXJjZXMsIGlmIG5lY2Vzc2FyeS4KKworLlBIT05ZOiBwYXRjaAorcGF0Y2g6IHNvdXJjZQorCisjIEdlbmVyYXRlIHRoZSBwYWNrYWdlIGJ1aWxkIG1ha2VmaWxlLgorIworIyBGb3Igbm9uLWNyb3NzLWNvbXBpbGVkIHRhcmdldHMgKGUuZy4gc2ltdWxhdG9ycyksIHRoZSBjdXJsIGNvbmZpZ3VyZQorIyBhdHRlbXB0cyB0byBwZXJmb3JtIHJ1bi10aW1lIHRlc3RzLgorIworIyBUbyBlbnN1cmUgdGhpcyB3b3JrcyBhZ2FpbnN0IHRoZSBpbi1wcm9qZWN0IHZlcnNpb25zIG9mIG9wZW5zc2wgYW5kCisjIHpsaWIsIHRoZSBwYXRocyB0byB0aGVzZSBzaGFyZWQgb2JqZWN0cyBNVVNUIGJlIGZvdW5kIGJ5IHRoZSBkeW5hbWljCisjIGxvYWRlci4KKworJChQYWNrYWdlQnVpbGRNYWtlZmlsZSk6IGV4cG9ydCAkKExvYWRlclNlYXJjaFBhdGgpIDo9ICQoT3BlblNTTExpYnJhcnlQYXRoKTokKFpsaWJMaWJyYXJ5UGF0aCk6JCgkKExvYWRlclNlYXJjaFBhdGgpKQorCiskKFBhY2thZ2VCdWlsZE1ha2VmaWxlKTogfCAkKFBhY2thZ2VTb3VyY2VEaXIpICQoQnVpbGREaXJlY3RvcnkpCisJJChWZXJib3NlKWNkICQoQnVpbGREaXJlY3RvcnkpICYmIFwKKwkkKENVUkRJUikvJChQYWNrYWdlU291cmNlRGlyKS9jb25maWd1cmUgXAorCUlOU1RBTEw9IiQoSU5TVEFMTCkgJChJTlNUQUxMRkxBR1MpIiBcCisJQ0M9IiQoQ0MpIiBDWFg9IiQoQ1hYKSIgQVI9JChBUikgUkFOTElCPSQoUkFOTElCKSBTVFJJUD0kKFNUUklQKSBcCisJQ1BQRkxBR1M9IiQoY2FsbCBUb29sR2VuZXJhdGVJbmNsdWRlQXJndW1lbnQsJChPcGVuU1NMSW5jbHVkZVBhdGgpKSIgXAorCUxERkxBR1M9IiQoY2FsbCBHZW5lcmF0ZVJlc29sdmVBcmd1bWVudHMsJChabGliRGVwZW5kUGF0aCkpIFwKKwkkKGNhbGwgR2VuZXJhdGVSZXNvbHZlQXJndW1lbnRzLCQoT3BlblNTTERlcGVuZFBhdGhzKSkgXAorCSQoY2FsbCBUb29sR2VuZXJhdGVMaWJyYXJ5UGF0aEFyZ3VtZW50LCQoT3BlblNTTExpYnJhcnlQYXRoKSkiIFwKKwktLWJ1aWxkPSQoSG9zdFR1cGxlKSBcCisJLS1ob3N0PSQoVGFyZ2V0VHVwbGUpIFwKKwkkKEN1cmxQYWNrYWdlT3B0aW9ucykgXAorCS0tZGlzYWJsZS1hcmVzIFwKKwktLWRpc2FibGUtZGljdCBcCisJLS1kaXNhYmxlLWdvcGhlciBcCisJLS1kaXNhYmxlLWltYXAgXAorCS0tZGlzYWJsZS1sZGFwIFwKKwktLWRpc2FibGUtbGRhcHMgXAorCS0tZGlzYWJsZS1tYW51YWwgXAorCS0tZGlzYWJsZS1udGxtLXdiIFwKKwktLWRpc2FibGUtcG9wMyBcCisJLS1kaXNhYmxlLXJ0c3AgXAorCS0tZGlzYWJsZS1zbXRwIFwKKwktLWRpc2FibGUtdGVsbmV0IFwKKwktLWVuYWJsZS1pcHY2IFwKKwktLXdpdGgtc3NsPSQoT3BlblNTTFNlYXJjaFBhdGgpIFwKKwktLXdpdGgtemxpYj0kKFpsaWJTZWFyY2hQYXRoKSBcCisJLS13aXRoLWNhLWJ1bmRsZT0vdXNyL2xpYi9zc2wvY2VydHMvY2EtYnVuZGxlLnBlbSBcCisJLS13aXRob3V0LWxpYmlkbiBcCisJLS1wcmVmaXg9L3VzciBcCisJLS1zeXNjb25mZGlyPS9ldGMgXAorCS0tbG9jYWxzdGF0ZWRpcj0vdmFyIFwKKwktLWRpc2FibGUtc3RhdGljCisKKyMgQ29uZmlndXJlIHRoZSBzb3VyY2UgZm9yIGJ1aWxkaW5nLgorCisuUEhPTlk6IGNvbmZpZ3VyZQorY29uZmlndXJlOiBzb3VyY2UgJChQYWNrYWdlQnVpbGRNYWtlZmlsZSkKKworIyBCdWlsZCB0aGUgc291cmNlLgorIworIyBXZSBoYXZlIHRvIHVuc2V0IE1BS0VGTEFHUyBzaW5jZSB0aGV5IGNvbmZ1c2UgdGhlIHBhY2thZ2UgYnVpbGQgb3RoZXJ3aXNlLgorCisuUEhPTlk6IGJ1aWxkCitidWlsZDogY29uZmlndXJlCisJJChWZXJib3NlKXVuc2V0IE1BS0VGTEFHUyAmJiBcCisJJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkRGlyZWN0b3J5KSBhbGwKKworIyBTdGFnZSB0aGUgYnVpbGQgdG8gYSB0ZW1wb3JhcnkgaW5zdGFsbGF0aW9uIGFyZWEuCisjCisjIFdlIGhhdmUgdG8gdW5zZXQgTUFLRUZMQUdTIHNpbmNlIHRoZXkgY29uZnVzZSB0aGUgcGFja2FnZSBidWlsZCBvdGhlcndpc2UuCisjCisjIFdlIGV4cGxpY3RseSByZW1vdmUgJ2xpYmN1cmwubGEnIGJlY2F1c2Ugc29tZSBwYWNrYWdlcyB0aGF0IGRlcGVuZAorIyBvbiBsaWJjdXJsIHVzZSBsaWJ0b29sLiBJZiBsaWJ0b29sIGZpbmRzIGEgJyoubGEnIGZpbGUgZm9yIGEKKyMgbGlicmFyeSwgaXQgdXNlcyB0aGUgdmFsdWUgb2YgJ2xpYmRpcj08ZGlyPicgaXQgZmluZHMuIEluIG91ciBjYXNlLAorIyBzaW5jZSAnLS1wcmVmaXg9L3VzcicgdGhpcyB2YWx1ZSBpcyAnL3Vzci9saWInLiBJdCB0aGVuIHJlc29sdmVzCisjICctbGN1cmwnIHRvICcvdXNyL2xpYi9saWJjdXJsLnNvJy4gSW4gYSBjcm9zcy1jb21waWxhdGlvbgorIyBlbnZpcm9ubWVudCwgdGhpcyBpcyBsaWtlbHkgdG8gYmUgbmVpdGhlciB0aGUgcmlnaHQgYXJjaGl0ZWN0dXJlIG5vcgorIyB0aGUgcmlnaHQgdmVyc2lvbiB0byBsaW5rIGFnYWluc3QuIEluIHNob3J0LCB3ZSBsb3NlLgorIworIyBXZSBjb3VsZCBhbHNvIGhhbmRsZSB0aGlzIGJ5IHJlbW92aW5nIERFU1RESVIgYW5kIHNldHRpbmcgdGhlIHByZWZpeAorIyB0byAkKFJlc3VsdERpcmVjdG9yeSk7IGhvd2V2ZXIsIHRoYXQgcmVzdWx0cyBpbiBsaWJ0b29sIGhhcmQtY29kaW5nCisjICQoUmVzdWx0RGlyZWN0b3J5KSBhcyB0aGUgUlBBVEggaW4gdGhlIGxpbmtlZCBleGVjdXRhYmxlcyB3aGljaCBpcworIyBOT1Qgd2hhdCB3ZSB3YW50IGVpdGhlci4gV2UgbG9zZSBhZ2Fpbi4KKyMKKyMgQnkgcmVtb3ZpbmcgdGhlICcqLmxhJyBmaWxlLCB3ZSB3aW4gYnkgZW5zdXJpbmcgbmVpdGhlciBhIG1pc2RpcmVjdGVkCisjIGxpbmsgbm9yIGFuIFJQQVRILgorCisuUEhPTlk6IHN0YWdlCitzdGFnZTogYnVpbGQgfCAkKFJlc3VsdERpcmVjdG9yeSkKKwkkKFZlcmJvc2UpdW5zZXQgTUFLRUZMQUdTICYmIFwKKwkkKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGREaXJlY3RvcnkpIERFU1RESVI9JChSZXN1bHREaXJlY3RvcnkpIGluc3RhbGwKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAkKGNhbGwgR2VuZXJhdGVSZXN1bHRQYXRocywsdXNyL2xpYi9saWJjdXJsLmxhKSAKKworY2xlYW46CisJJChWZXJib3NlKSQoUk0pICQoUk1GTEFHUykgLXIgJChQYWNrYWdlU291cmNlRGlyKQorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpIC1yICQoQnVpbGREaXJlY3RvcnkpCisJJChWZXJib3NlKSQoUk0pICQoUk1GTEFHUykgLXIgJChSZXN1bHREaXJlY3RvcnkpCisKK2luY2x1ZGUgcG9zdC5tYWsKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL0FuZHJvaWQubWsgYi9jdXJsLTcuMjUuMC9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOTIzZTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMTA3IEBACisjIEdvb2dsZSBBbmRyb2lkIG1ha2VmaWxlIGZvciBjdXJsIGFuZCBsaWJjdXJsCisjCisjIFBsYWNlIHRoZSBjdXJsIHNvdXJjZSAoaW5jbHVkaW5nIHRoaXMgbWFrZWZpbGUpIGludG8gZXh0ZXJuYWwvY3VybC8gaW4gdGhlCisjIEFuZHJvaWQgc291cmNlIHRyZWUuICBUaGVuIGJ1aWxkIHRoZW0gd2l0aCAnbWFrZSBjdXJsJyBvciBqdXN0ICdtYWtlIGxpYmN1cmwnCisjIGZyb20gdGhlIEFuZHJvaWQgcm9vdC4gVGVzdGVkIHdpdGggQW5kcm9pZCB2ZXJzaW9ucyAxLjUsIDIuMS0yLjMKKyMKKyMgTm90ZTogeW91IG11c3QgZmlyc3QgY3JlYXRlIGEgY3VybF9jb25maWcuaCBmaWxlIGJ5IHJ1bm5pbmcgY29uZmlndXJlIGluIHRoZQorIyBBbmRyb2lkIGVudmlyb25tZW50LiBUaGUgb25seSB3YXkgSSd2ZSBmb3VuZCB0byBkbyB0aGlzIGlzIHRyaWNreS4gUGVyZm9ybSBhCisjIG5vcm1hbCBBbmRyb2lkIGJ1aWxkIHdpdGggbGliY3VybCBpbiB0aGUgc291cmNlIHRyZWUsIHByb3ZpZGluZyB0aGUgdGFyZ2V0CisjICJzaG93Y29tbWFuZHMiIHRvIG1ha2UuIFRoZSBidWlsZCB3aWxsIGV2ZW50dWFsbHkgZmFpbCAoYmVjYXVzZSBjdXJsX2NvbmZpZy5oCisjIGRvZXNuJ3QgZXhpc3QgeWV0KSwgYnV0IHRoZSBjb21waWxlciBjb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGN1cmwgd2lsbCBiZQorIyBzaG93bi4gTm93LCBmcm9tIHRoZSBleHRlcm5hbC9jdXJsLyBkaXJlY3RvcnksIHJ1biBjdXJsJ3Mgbm9ybWFsIGNvbmZpZ3VyZQorIyBjb21tYW5kIHdpdGggZmxhZ3MgdGhhdCBtYXRjaCB3aGF0IEFuZHJvaWQgaXRzZWxmIHVzZXMuIFRoaXMgd2lsbCBtZWFuCisjIHB1dHRpbmcgdGhlIGNvbXBpbGVyIGRpcmVjdG9yeSBpbnRvIHRoZSBQQVRILCBwdXR0aW5nIHRoZSAtSSwgLWlzeXN0ZW0gYW5kCisjIC1EIG9wdGlvbnMgaW50byBDUFBGTEFHUywgcHV0dGluZyB0aGUgLVcsIC1tLCAtZiwgLU8gYW5kIC1ub3N0ZGxpYiBvcHRpb25zCisjIGludG8gQ0ZMQUdTLCBhbmQgcHV0dGluZyB0aGUgLVdsLCAtTCBhbmQgLWwgb3B0aW9ucyBpbnRvIExJQlMsIGFsb25nIHdpdGggdGhlCisjIHBhdGggdG8gdGhlIGZpbGVzIGxpYmdjYy5hLCBjcnRiZWdpbl9keW5hbWljLm8sIGFuZCBjY3J0ZW5kX2FuZHJvaWQuby4KKyMgUmVtZW1iZXIgdGhhdCB0aGUgcGF0aHMgbXVzdCBiZSBhYnNvbHV0ZSBzaW5jZSB5b3Ugd2lsbCBub3QgYmUgcnVubmluZworIyBjb25maWd1cmUgZnJvbSB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIEFuZHJvaWQgbWFrZS4gIFRoZSBub3JtYWwKKyMgY3Jvc3MtY29tcGlsZXIgb3B0aW9ucyBtdXN0IGFsc28gYmUgc2V0LiBOb3RlIHRoYXQgdGhlIC1jLCAtbywgLU1EIGFuZAorIyBzaW1pbGFyIGZsYWdzIG11c3Qgbm90IGJlIHNldC4KKyMKKyMgVG8gc2VlIGFsbCB0aGUgTElCUyBvcHRpb25zLCB5b3UnbGwgbmVlZCB0byBkbyB0aGUgInNob3djb21tYW5kcyIgdHJpY2sgb24gYW4KKyMgZXhlY3V0YWJsZSB0aGF0J3MgYWxyZWFkeSBidWlsZGFibGUgYW5kIHdhdGNoIHdoYXQgZmxhZ3MgQW5kcm9pZCB1c2VzIHRvIGxpbmsKKyMgaXQgKGRoY3BjZCBpcyBhIGdvb2QgY2hvaWNlIHRvIHdhdGNoKS4gWW91J2xsIGFsc28gd2FudCB0byBhZGQgLUwgb3B0aW9ucyB0bworIyBMSUJTIHRoYXQgcG9pbnQgdG8gdGhlIG91dC8uLi4vb2JqL2xpYi8gYW5kIG91dC8uLi4vb2JqL3N5c3RlbS9saWIvCisjIGRpcmVjdG9yaWVzIHNvIHRoYXQgYWRkaXRpb25hbCBsaWJyYXJpZXMgY2FuIGJlIGZvdW5kIGFuZCB1c2VkIGJ5IGN1cmwuCisjCisjIFRoZSBlbmQgcmVzdWx0IHdpbGwgYmUgYSBjb25maWd1cmUgY29tbWFuZCB0aGF0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXMKKyMgKHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBBIGlzIHNldCB0byB0aGUgQW5kcm9pZCByb290IHBhdGggd2hpY2ggbWFrZXMgdGhlCisjIGNvbW1hbmQgc2hvcnRlcik6CisjCisjICBBPWByZWFscGF0aCAuLi8uLmAgJiYgXAorIyAgUEFUSD0iJEEvcHJlYnVpbHQvbGludXgteDg2L3Rvb2xjaGFpbi9hcm0tZWFiaS1YL2JpbjokUEFUSCIgXAorIyAgLi9jb25maWd1cmUgLS1ob3N0PWFybS1saW51eCBDQz1hcm0tZWFiaS1nY2MgXAorIyAgQ1BQRkxBR1M9Ii1JICRBL3N5c3RlbS9jb3JlL2luY2x1ZGUgLi4uIiBcCisjICBDRkxBR1M9Ii1ub3N0ZGxpYiAtZm5vLWV4Y2VwdGlvbnMgLVduby1tdWx0aWNoYXIgLi4uIiBcCisjICBMSUJTPSIkQS9wcmVidWlsdC9saW51eC14ODYvdG9vbGNoYWluL2FybS1lYWJpLVgvbGliL2djYy9hcm0tZWFiaS9YXAorIyAgL2ludGVyd29yay9saWJnY2MuYSAuLi4iCisjCisjIEZpbmFsbHksIGNvcHkgdGhlIGZpbGUgQ09QWUlORyB0byBOT1RJQ0Ugc28gdGhhdCB0aGUgY3VybCBsaWNlbnNlIGdldHMgcHV0CisjIGludG8gdGhlIHJpZ2h0IHBsYWNlIChidXQgc2VlIHRoZSBub3RlIGFib3V0IHRoaXMgYmVsb3cpLgorIworIyBEYW4gRmFuZHJpY2gKKyMgTm92ZW1iZXIgMjAxMQorCitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKKworY29tbW9uX0NGTEFHUyA6PSAtV3BvaW50ZXItYXJpdGggLVd3cml0ZS1zdHJpbmdzIC1XdW51c2VkIC1XaW5saW5lIC1XbmVzdGVkLWV4dGVybnMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV2Zsb2F0LWVxdWFsIC1Xbm8tbXVsdGljaGFyIC1Xc2lnbi1jb21wYXJlIC1Xbm8tZm9ybWF0LW5vbmxpdGVyYWwgLVdlbmRpZi1sYWJlbHMgLVdzdHJpY3QtcHJvdG90eXBlcyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAtV25vLXN5c3RlbS1oZWFkZXJzIC1ESEFWRV9DT05GSUdfSAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJ1aWxkIHRoZSBsaWJjdXJsIGxpYnJhcnkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvbGliL01ha2VmaWxlLmluYworQ1VSTF9IRUFERVJTIDo9IFwKKwljdXJsYnVpbGQuaCBcCisJY3VybC5oIFwKKwljdXJscnVsZXMuaCBcCisJY3VybHZlci5oIFwKKwllYXN5LmggXAorCW1wcmludGYuaCBcCisJbXVsdGkuaCBcCisJc3RkY2hlYWRlcnMuaCBcCisJdHlwZWNoZWNrLWdjYy5oCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGFkZHByZWZpeCBsaWIvLCQoQ1NPVVJDRVMpKQorTE9DQUxfQ19JTkNMVURFUyArPSAkKExPQ0FMX1BBVEgpL2luY2x1ZGUvCitMT0NBTF9DRkxBR1MgKz0gJChjb21tb25fQ0ZMQUdTKQorCitMT0NBTF9DT1BZX0hFQURFUlNfVE8gOj0gbGliY3VybC9jdXJsCitMT0NBTF9DT1BZX0hFQURFUlMgOj0gJChhZGRwcmVmaXggaW5jbHVkZS9jdXJsLywkKENVUkxfSEVBREVSUykpCisKK0xPQ0FMX01PRFVMRTo9IGxpYmN1cmwKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKKyMgQ29weSB0aGUgbGljZW5jZSB0byBhIHBsYWNlIHdoZXJlIEFuZHJvaWQgd2lsbCBmaW5kIGl0LgorIyBBY3R1YWxseSwgdGhpcyBkb2Vzbid0IHF1aXRlIHdvcmsgYmVjYXVzZSB0aGUgYnVpbGQgc3lzdGVtIHNlYXJjaGVzCisjIGZvciBOT1RJQ0UgZmlsZXMgYmVmb3JlIGl0IGdldHMgdG8gdGhpcyBwb2ludCwgc28gaXQgd2lsbCBvbmx5IGJlIHNlZW4KKyMgb24gc3Vic2VxdWVudCBidWlsZHMuCitBTExfUFJFQlVJTFQgKz0gJChMT0NBTF9QQVRIKS9OT1RJQ0UKKyQoTE9DQUxfUEFUSCkvTk9USUNFOiAkKExPQ0FMX1BBVEgpL0NPUFlJTkcgfCAkKEFDUCkKKwkkKGNvcHktZmlsZS10by10YXJnZXQpCisKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJ1aWxkIHRoZSBjdXJsIGJpbmFyeQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9zcmMvTWFrZWZpbGUuaW5jCitMT0NBTF9TUkNfRklMRVMgOj0gJChhZGRwcmVmaXggc3JjLywkKENVUkxfQ0ZJTEVTKSkKKworTE9DQUxfTU9EVUxFIDo9IGN1cmwKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCitMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmN1cmwKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmMKKworTE9DQUxfQ19JTkNMVURFUyArPSAkKExPQ0FMX1BBVEgpL2luY2x1ZGUgJChMT0NBTF9QQVRIKS9saWIKKworIyBUaGlzIG1heSBhbHNvIG5lZWQgdG8gaW5jbHVkZSAkKENVUkxYX09ORVMpIGluIG9yZGVyIHRvIGNvcnJlY3RseSBsaW5rCisjIGlmIGxpYmN1cmwgaXMgY2hhbmdlZCB0byBiZSBidWlsdCBhcyBhIGR5bmFtaWMgbGlicmFyeQorTE9DQUxfQ0ZMQUdTICs9ICQoY29tbW9uX0NGTEFHUykKKworaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL0NIQU5HRVMgYi9jdXJsLTcuMjUuMC9DSEFOR0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNmZkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9DSEFOR0VTCkBAIC0wLDAgKzEsNTI4OSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWxvZworCitWZXJzaW9uIDcuMjUuMCAoMjIgTWFyIDIwMTIpCisKK0RhbmllbCBTdGVuYmVyZyAoMjIgTWFyIDIwMTIpCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGI4YjJjZjYxMmIyCisKK1lhbmcgVHNlICgyMiBNYXIgMjAxMikKKy0gdGVzdHMgIzE0MDAgIzE0MDE6IGFkZCBtaXNzaW5nIGtleXdvcmRzCisKKy0gaHR0cF9wcm94eS5oOiBmaXggYnVpbGRzIHdpdGggcHJveHkgb3IgaHR0cCBkaXNhYmxlZAorCistIHBhcnNlZGF0ZS5jOiBmaXggYSBudW1lcmljIG92ZXJmbG93CisKK0RhbmllbCBTdGVuYmVyZyAoMjIgTWFyIDIwMTIpCistIFtBbmRyZWkgQ2lwdSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGNvb2tpZXM6IHN0cmlwIHRoZSBudW1lcmljYWwgaXB2NiBob3N0IHByb3Blcmx5CisgIAorICBUaGUgY29tbWl0IGU2NTBkYmRlODZkNCB0aGF0IHN0cmlwcGVkIG9mZiBbYnJhY2tldHNdIGZyb20gaXB2Ni1vbmx5IGhvc3QKKyAgaGVhZGVycyBmb3IgdGhlIHNha2Ugb2YgY29va2llIHBhcnNpbmcgd3JvbmdseSBpbmNyZW1lbnRlZCB0aGUgaG9zdAorICBwb2ludGVyIHdoaWNoIHdvdWxkIGNhdXNlIGEgYmFkIGZyZWUoKSBjYWxsIGxhdGVyIG9uLgorCitZYW5nIFRzZSAoMjIgTWFyIDIwMTIpCistIHRlc3QgIzU5ODogYWRkIHRvIE1ha2VmaWxlLmFtCisKKy0gdGVzdCAjNTk4OiBPT00gaGFuZGxpbmcgZml4ZXMKKworLSBmaXggc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncworCitEYW5pZWwgU3RlbmJlcmcgKDIyIE1hciAyMDEyKQorLSBDT05ORUNUOiBmaXggbXVsdGkgaW50ZXJmYWNlIHJlZ3Jlc3Npb24KKyAgCisgIFRoZSByZWZhY3RvcmluZyBvZiBIVFRQIENPTk5FQ1QgaGFuZGxpbmcgaW4gY29tbWl0IDQxYjAyMzc4MzQyMzIgdGhhdAorICBtYWRlIGl0IHByb3RvY29sIGluZGVwZW5kZW50IGJyb2tlIGl0IGZvciB0aGUgbXVsdGkgaW50ZXJmYWNlLiBUaGlzIGZpeAorICBub3cgaW50cm9kdWNlIGEgYmV0dGVyIHN0YXRlIGhhbmRsaW5nIGFuZCBtb3ZlZCBzb21lIGxvZ2ljIHRvIHRoZQorICBodHRwX3Byb3h5LmMgc291cmNlIGZpbGUuCisgIAorICBSZXBvcnRlZCBieTogWWFuZyBUc2UKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTItMDMvMDE2Mi5odG1sCisKKy0gU1dTOiByZWZ1c2UgdG8gc2VydmUgQ09OTkVDVCB1bmxlc3MgcnVubmluZyBhcyBwcm94eQorCitZYW5nIFRzZSAoMjEgTWFyIDIwMTIpCistIGN1cmwtZnVuY3Rpb25zLm00OiB1cGRhdGUgZGV0ZWN0aW9uIGxvZ2ljIG9mIGdldGFkZHJpbmZvKCkgdGhyZWFkLXNhZmVuZXNzCisgIAorICBUYWtlIGluIGFjY291bnQgdGhhdCBQT1NJWCBzdGFuZGFyZCBJc3N1ZSA3IGRyb3BzIGhfZXJybm8gc3VwcG9ydC4gTm93LCB3ZSBhbHNvCisgIGNvbnNpZGVyIGdldGFkZHJpbmZvKCkgdG8gYmUgdGhyZWFkLXNhZmUgd2hlbiAoX1BPU0lYX0NfU09VUkNFID49IDIwMDgwOUwpIG9yCisgIChfWE9QRU5fU09VUkNFID49IDcwMCkgaW5kZXBlbmRlbnRseSBvZiB3aGV0aGVyIGhfZXJybm8gZXhpc3RzIG9yIG5vdC4KKworLSBmaXggc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncworCistIHRlc3RzIDE0MFg6IGZpeCAtLWxpYmN1cmwgZ2VuZXJhdGVkIHNvdXJjZSBmaWxlIHJlYWRpbmcgbW9kZSBmb3IgTVNZUyBidWlsZHMKKworLSB0b29sX2Vhc3lzcmMuYzogZml4IC0tbGliY3VybCBvcHRpb24gb3V0cHV0IGZpbGUgdGV4dCB0cmFuc2xhdGlvbiBtb2RlCisgIAorICBVc2UgZm9wZW4oKSB3aXRoICJ3IiBtb2RlIGluc3RlYWQgb2YgInd0IiB0byBmaXggY3lnd2luIGJ1aWxkcy4KKworLSBidWlsZDogcmVtb3ZlIHRvb2xfY2Jfc2t0LltjaF0gcmVmZXJlbmNlcworCitEYW5pZWwgU3RlbmJlcmcgKDE4IE1hciAyMDEyKQorLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCBhZDc3NDIwYWM3NjFiCisgIAorICAzIG1vcmUgYnVncywgMSBtb3JlIGNvbnRyaWJ1dG9yCisKKy0gbHdpcDogYmFzaWMgY2hlY2tzIGFuZCBtYWNyb3MgZm9yIGNvbXBhdGlibGl0eQorCitZYW5nIFRzZSAoMTcgTWFyIDIwMTIpCistIHRvb2xfc2V0b3B0LmM6IG1vcmUgT09NIGhhbmRsaW5nIGZpeGVzCisKK0RhbmllbCBTdGVuYmVyZyAoMTYgTWFyIDIwMTIpCistIGNtYWtlOiBsaXN0X3NwYWNlc19hcHBlbmRfb25jZSBmYWlscyB3aXRoIHNwYWNlcyBpbiBmaWxlbmFtZQorICAKKyAgV2luZG93cyBzdGFuZGFyZCBsaWJyYXJpZXMgYXJlIGxvY2F0ZWQgaW4gQzovUHJvZ3JhbSBGaWxlcy9NaWNyb3NvZnQKKyAgU0RLcy9bLi4uXS4gVGhleSBhcmUgYWxyZWFkeSBpbmNsdWRlZCBpbiB0aGUgZGVmYXVsdCBNU1ZDCisgIExJQlBBVEguIEhlbmNlLCBmaW5kX2xpYnJhcnkoV1NPQ0szMl9MSUJSQVJZIHdzb2NrMzIpIGFuZAorICBmaW5kX2xpYnJhcnkoV1MyXzMyX0xJQlJBUlkgd3MyXzMyKSBhcmUgbm90IG5lZWRlZC4gVGhleSByZXR1cm4gdGhlIGZ1bGwKKyAgcGF0aCB0byB0aGUgbGlicmFyaWVzIGluY2x1ZGluZyBzcGFjZXMuIE9mIGNvdXJzZSwKKyAgbGlzdF9zcGFjZXNfYXBwZW5kX29uY2Ugd2lsbCBtYW5nbGUgdGhlIHJlc3VsdCBhbmQgdGhlIGJ1aWxkIGZhaWxzLgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDk0OTY4CisKK1lhbmcgVHNlICgxNiBNYXIgMjAxMikKKy0gaHR0cF9wcm94eS5jOiBmaXggT09NIGhhbmRsaW5nCisKKy0gdG9vbF9zZXRvcHQuYzogZml4IE9PTSBoYW5kbGluZworCistIGZpeCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzCisKKy0gZml4IHNvbWUgY29tcGlsZXIgd2FybmluZ3MKKworRGFuaWVsIFN0ZW5iZXJnICgxMyBNYXIgMjAxMikKKy0gW01heGltIFByb2hvcm92IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgcmVzb2x2ZSB3aXRoIGMtYXJlczogZG9uJ3QgcmVzb2x2ZSBJUHY2IHdoZW4gbm90IHdvcmtpbmcKKyAgCisgIElmIHRoZSBDdXJsX2lwdjZ3b3JrcygpIGZ1bmN0aW9uIHNheXMgbm8sIHRoZXJlIGlzIG5vIHJlYXNvbiB0byB0cnkgQUFBQQorICBuYW1lcyBldmVuIGlmIGxpYmN1cmwgd2FzIGJ1aWx0IHdpdGggSVB2NiBzdXBwb3J0IGVuYWJsZWQuCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMy8wMDQ1Lmh0bWwKKwordW5rbm93biAoMTAgTWFyIDIwMTIpCistIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIHNtdHAuYzogQ2hhbmdlZCB0aGUgY3VybCBlcnJvciBjb2RlIGZvciBFSExPIGFuZCBIRUxPIHJlc3BvbnNlcworICAKKyAgQ2hhbmdlZCB0aGUgcmV0dXJuZWQgY3VybCBlcnJvciBjb2RlcyBmb3IgRUhMTyBhbmQgSEVMTyByZXNwb25zZXMgZnJvbQorICBDVVJMRV9MT0dJTl9ERU5JRUQgdG8gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQgYXMgYSBuZWdhdGl2ZSByZXNwb25zZQorICBmcm9tIHRoZXNlIGNvbW1hbmRzIHJlcHJlc2VudHMgbm8gc2VydmljZSBhcyBvcHBvc2VkIHRvIGEgbG9naW4gZXJyb3IuCisKK0RhbmllbCBTdGVuYmVyZyAoMTAgTWFyIDIwMTIpCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGU2NTBkYmRlODYKKyAgCisgIE5ldzogMTIgYnVncywgMyBjaGFuZ2VzLCA2IGNvbnRyaWJ1dG9ycyBhbmQgdXBkYXRlZCBjb3VudGVycyBhdCB0aGUgdG9wCisKKy0gW0FuZHJlaSBDaXB1IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgQ3VybF9odHRwOiBzdHJpcCBvZmYgW2JyYWNrZXRzXSBmcm9tIGlwdjYtb25seSBob3N0IGhlYWRlcnMKKyAgCisgIFNpbmNlIHRoZSBob3N0IG5hbWUgaXMgcGFzc2VkIGluIHRvIHRoZSBjb29raWUgZW5naW5lIGl0IHdpbGwgbm90IHdvcmsKKyAgY29ycmVjdGx5IGlmIHRoZSBicmFja2V0cyBhcmUgbGVmdCBpbiB0aGUgbmFtZS4KKyAgCisgIEJ1ZzpodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTItMDMvMDAzNi5odG1sCisKKy0gW0FybWVsIEFzc2VsaW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBDVVJMU1NIX09QVF9BVVRIOiBkb2N1bWVudGVkIGl0IGhhcyBubyBlZmZlY3QKKworLSBbSm9obiBKb3NlcGggQmFjaGlyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgbWstY2EtYnVuZGxlLnBsOiB1c2UgTFdQOjpVc2VyQWdlbnQgd2l0aCBwcm9wZXIgaHR0cHMgdmVyaWZ5IGJlaGF2aW9yLgorICAKKyAgQW4gYWx0ZXJuYXRpdmUgd291bGQgYmU6CisgIAorICAxLiBzcGVjaWZ5IEhUVFBTX0NBX0RJUiBhbmQvb3IgSFRUUFNfQ0FfRklMRQorICAyLiBlbnN1cmUgdGhhdCBOZXQ6OlNTTCBpcyBiZWluZyB1c2VkLCBhbmQgSU86OlNvY2tldDo6U1NMIGlzIE5PVCBiZWluZworICAgICB1c2VkCisgIAorICBUaGlzIHF1ZXN0aW9uIGFuZCBhbnN3ZXIgZXhwbGFpbjoKKyAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83NDM1OC8KKworLSBbSm9obiBKb3NlcGggQmFjaGlyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgYWNjZXNzIHRoZSBDQSBzb3VyY2UgZmlsZSB1c2luZyBIVFRQUworCistIGluY2x1ZGVzOiByZW1vdmUgaW5jbHVzaW9uIG9mIHVudXNlZCBmaWxlIGh0dHBfcHJveHkuaAorCistIENPTk5FQ1Q6IG1hZGUgZ2VuZXJpY2FsbHkgbm90IHBlci1wcm90b2NvbAorICAKKyAgQ3VybF9wcm90b2NvbF9jb25uZWN0KCkgbm93IGRvZXMgdGhlIHR1bm5lbGluZyB0aHJvdWdoIHRoZSBIVFRQIHByb3h5IGlmCisgIHJlcXVlc3RlZCBpbnN0ZWFkIG9mIGxldHRpbmcgZWFjaCBwcm90b2NvbCBzcGVjaWZpYyBjb25uZWN0aW9uIGZ1bmN0aW9uCisgIGRvIGl0LgorCistIHNzaF9jb25uZWN0OiB0dW5uZWwgdGhyb3VnaCBIVFRQIHByb3h5IGlmIHJlcXVlc3RlZAorCistIExXSVA6IGRvbid0IGNvbnNpZGVyIEhBVkVfRVJSTk9fSCB0byBiZSB3aW5zb2NrCisgIAorICBUaGUgY2hlY2sgZm9yIFdpbnNvY2sgZGVmaW5pdGlvbiB3YXMgYSBiaXQgdG9vIGJyb2FkCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMy8wMDQ2Lmh0bWwKKworLSBbRGF2ZSBSZWlzbmVyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgY3VybC1jb25maWc6IG9ubHkgcHJvdmlkZSBsaWJyYXJpZXMgd2l0aCAtLWxpYnMKKyAgCisgIEluIGxpbmUgd2l0aCB0aGUgbWFucGFnZSwgY3VybC1jb25maWcgLS1saWJzIHNob3VsZCBvbmx5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeQorICBsaWJyYXJ5IGZsYWdzIGZvciB0aGUgbGlua2VyIGluIG9yZGVyIHRvIGNvbXBpbGUgc29mdHdhcmUgd2l0aCBsaWJjdXJsLiBBbHNvCisgIHdpdGggdGhpcyBjaGFuZ2UsIHdlIG1hdGNoIHdoYXQgdGhlIHBrZy1jb25maWcgZmlsZSBwcm92aWRlcy4KKworLSBDT05UUklCOiBQbGVhc2UgZG9uJ3Qgc2VuZCBwdWxsIHJlcXVlc3RzCisKKy0gbGliY3VybCBkb2NzOiB2ZXJzaW9uIGNvcnJlY3Rpb25zCisgIAorICBDb3JyZWN0IHNvbWUgaW5jb25zaXN0ZW5jaWVzIGluIHdoaWNoIHZlcnNpb24gc29tZSB0aGluZ3Mgd2VyZSBhZGRlZC4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQ5NDA5MQorICBSZXBvcnRlZCBieTogImN1cmx5YnVncyIKKworLSBDT05ORUNUOiBmaXggaXB2NiBhZGRyZXNzIGluIHRoZSBSZXF1ZXN0LUxpbmUKKyAgCisgIENvbW1pdCA0NjYxNTBiYzY0ZCBmaXhlZCB0aGUgSG9zdDogaGVhZGVyIHdpdGggQ09OTkVDVCwgYnV0IEkgdGhlbgorICBmb3Jnb3QgdGhlIHByZWNlZWRpbmcgcmVxdWVzdC1saW5lLiBOb3cgdGhpcyB0b28gdXNlcyBbYnJhY2tldHNdCisgIHByb3Blcmx5IGlmIGEgaXB2NiBudW1lcmljYWwgYWRkcmVzcyB3YXMgZ2l2ZW4uCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0OTMxMjkKKyAgUmVwb3J0ZWQgYnk6ICJCbGFjYXQiCisKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgU01UUDogQWRkZWQgc3VwcG9ydCBmb3IgcmV0dXJuaW5nIFNNVFAgcmVzcG9uc2UgY29kZXMKKyAgCisgIFNldCB0aGUgY29ubi0+ZGF0YS0+aW5mby5odHRwY29kZSB2YXJpYWJsZSBpbiBzbXRwX3N0YXRlbWFjaF9hY3QoKSB0bworICBhbGxvdyBDdXJsX2dldGluZm8oKSB0byByZXR1cm4gdGhlIFNNVFAgcmVzcG9uc2UgY29kZSB2aWEgdGhlCisgIENVUkxJTkZPX1JFU1BPTlNFX0NPREUgYWN0aW9uLgorCistIGN1cmwuMTogdXBkYXRlZCAtLWxpYmN1cmwKKyAgCisgIFdpdGggQ29saW4gSG9nYmVuJ3MgcmVjZW50IHdvcmssIC0tbGliY3VybCBub3cgYWxzbyB3b3JrcyB3aXRoIC1GIGFuZAorICBtb3JlLiBSZW1vdmUgdGhlIHByZXZpb3VzIGNhdmVhdC4KKworLSB0ZXN0OiAtLWxpYmN1cmwgZml4ZXMKKyAgCisgIFRoZSBsaW5lIGVuZGluZ3MgYnJva2Ugd2hlbiBJIHNhdmVkIHRoZSB0aHJlZSByZWNlbnQgcGF0Y2hlcyAobXkgZmF1bHQsCisgIG5vdCBDb2xpbidzKSB0byAnZ2l0IGFtJyB0aGVtLgorICAKKyAgQWRqdXN0ZWQgdGhlIHN0cmlwcGluZyBvZiB0aGUgdGVzdCBwcm9ncmFtIGZvciBjb21wYXJpbmcgdG8gYWxzbyBleGNsdWRlCisgIHRoZSBTU0gga2V5IGZpbGUgbmFtZSBhcyB0aGF0IHdpbGwgZGlmZmVyIGFuZCB1c2UgYSBsb2NhbCBwYXRoIG5hbWUuCisKKy0gW0NvbGluIEhvZ2JlbiBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIEFkZCBoZWxwZXIgc2NyaXB0IGNvbnZzcmN0ZXN0LnBsIHRvIG1hbmlwdWxhdGUgLS1saWJjdXJsIHRlc3RzLgorICAKKyAgVGhlIGludGVudGlvbiBpcyB0byB0YWtlIHRoZSBvdXRwdXQgb2YgY3VybCdzIC0tbGliY3VybCBvcHRpb24sCisgIGFzIGV4ZXJjaXNlZCBpbiB0ZXN0IDE0eHgsIGFuZCBnZW5lcmF0ZSBhIGNvcnJlc3BvbmRpbmcgdGVzdDE1eHgKKyAgaW4gd2hpY2ggdGhlIGdlbmVyYXRlZCBjb2RlIGlzIGNvbXBpbGVkIGFuZCBydW4uICBUaGlzIHdpbGwgdmVyaWZ5CisgIHRoYXQgdGhlIGdlbmVyYXRlZCBjb2RlIGJlaGF2ZXMgZXF1aXZhbGVudGx5IHRvIHRoZSBvcmlnaW5hbAorICBpbnZvY2F0aW9uIG9mIHRoZSBjdXJsIGNvbW1hbmQuCisgIAorICBUaGUgc2NyaXB0IGlzIG5vdCB5ZXQgaW50ZWdyYXRlZCBpbnRvIHRoZSBjb25maWd1cmUgLyBtYWtlZmlsZQorICBtYWNoaW5lcnkuCisKKy0gW0NvbGluIEhvZ2JlbiBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIEFkZCB0ZXN0cyBmb3IgY3VybCdzIC0tbGliY3VybCBvdXRwdXQuCisgIAorICBUaGVzZSB0ZXN0cyBjaGVjayB0aGUgb3V0cHV0IG9mIHRoZSAtLWxpYmN1cmwgb3B0aW9uIG9mIGN1cmwsCisgIGluY2x1ZGluZyB0aGUgaW1wcm92ZWQgb3B0aW9uIGhhbmRsaW5nIGFkZGVkIGluIGEgcmVsYXRlZCBwYXRjaC4KKworLSBbQ29saW4gSG9nYmVuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgR2VuZXJhdGUgbGlzdHMgYW5kIHVzZSBzeW1ib2xzIGluIC0tbGliY3VybCBjb2RlIG91dHB1dC4KKyAgCisgIFRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhlIG91dHB1dCBvZiBjdXJsJ3MgLS1saWJjdXJsIG9wdGlvbiBieQorICBnZW5lcmF0aW5nIGNvZGUgd2hpY2ggYnVpbGRzIGN1cmxfaHR0cHBvc3QgYW5kIGN1cmxfc2xpc3QgbGlzdHMsIGFuZAorICB1c2VzIHN5bWJvbGljIG5hbWVzIGZvciBlbnVtIGFuZCBmbGFnIHZhbHVlcy4gIFZhcmlhbnRzIG9mIHRoZQorICBteV9zZXRvcHQgbWFjcm8gaW4gdG9vbF9zZXRvcHQuaCBhcmUgYWRkZWQgaW4gb3JkZXIgdG8gcGFzcyBleHRyYSB0eXBlCisgIGluZm9ybWF0aW9uIHRvIHRoZSBjb2RlLWdlbmVyYXRpb24gc3RlcCBpbiB0b29sX3NldG9wdC5jLgorICAKKyAgSWYgY3VybCBpcyBjb25maWd1cmVkIHdpdGggLS1kaXNhYmxlLWxpYmN1cmwtb3B0aW9uIHRoZW4gdGhlIG1hY3JvcworICBjYWxsIGN1cmxfZWFzeV9zZXRvcHQgZGlyZWN0bHkuCisKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgc210cC5jOiBGaXhlZCBhbiBpc3N1ZSB3aXRoIHdyaXRpbmcgcG9zdGRhdGEKKyAgCisgIEZpeGVkIGEgcHJvYmxlbSBpbiBzbXRwX2RvbmUoKSB3aGVuIHdyaXRpbmcgb3V0IHRoZSBwb3N0ZGF0YSBhcworICBDdXJsX3dyaXRlKCkgd291bGQgcGVyaW9kaWNhbGx5IHJldHVybiB6ZXJvIGJ5dGVzIHdyaXR0ZW4uCisKKy0gQ1VSTE9QVF9NQUlMX0FVVEg6IGFkZGVkIGluIDcuMjUuMAorICAKKyAgQnJvdWdodCBpbiBjb21taXQgMGNmMGFiNmYzMDAKKworLSBwb3AzIHRlc3Qgc2VydmVyOiBzZW5kIHRlcm1pbmF0aW5nICIuQ1JMRiIgb25seQorICAKKyAgV2l0aCBjb21taXQgMDM1ZWYwNmJkYTcgYXBwbGllZCwgdGhlIHRlc3QgcG9wMyBzZXJ2ZXIgbmVlZHMgdG8gc2VuZAorICAiLlxyXG4iIGFzIHRoZSBib2R5IHRlcm1pbmF0aW5nIHNlcXVlbmNlIGFuZCB0aGVyZSBuZWVkcyB0byBiZSBhIGZpbmFsCisgIENSTEYgaW4gdGhlIGFjdHVhbCBib2R5IGluIHRoZSB0ZXN0IGRhdGEgZmlsZS4KKworLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBwb3AzLmM6IEZpeGVkIGRyb3Agb2YgZmluYWwgQ1JMRiBpbiBFT0IgY2hlY2tpbmcKKyAgCisgIEN1cmxfcG9wM193cml0ZSgpIHdvdWxkIGRyb3AgdGhlIGZpbmFsIENSTEYgb2YgYSBtZXNzYWdlIGFzIGl0IHdhcworICBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIEVPQiBhcyBvcHBvc2VkIHRvIHBhcnQgb2YgdGhlIG1lc3NhZ2UuIFdoaWxzdAorICB0aGUgRU9CIHNlcXVlbmNlIG5lZWRzIHRvIGJlIHNlYXJjaGVkIGZvciBieSB0aGUgZnVuY3Rpb24gb25seSB0aGUKKyAgZmluYWwgMyBjaGFyYWN0ZXJzIHNob3VsZCBiZSByZW1vdmVkIGFzIHBlciBSRkMtMTkzOSBzZWN0aW9uIDMuCisgIAorICBSZXBvcnRlZCBieTogUmljaCBHcmF5CisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDEyLTAyLzAwNTEuaHRtbAorCistIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIHNtdHAuYzogRml4ZWQgYW4gaXNzdWUgd2l0aCB0aGUgRU9CIGNoZWNraW5nCisgIAorICBDdXJsX3NtdHBfZXNjYXBlX2VvYigpIHdvdWxkIGxlYXZlIG9mZiBmaW5hbCBDUkxGcyBmcm9tIGVtYWlscyBlbmRpbmcKKyAgaW4gbXVsdGlwbGUgYmxhbmsgbGluZXMgYWRkaXRpb25hbGx5IGxlYXZpbmcgdGhlIHNtdHBjLT5lb2IgdmFyaWFibGUKKyAgd2l0aCB0aGUgY2hhcmFjdGVyIGNvdW50IGluLCB3aGljaCB3b3VsZCBjYXVzZSBwcm9ibGVtcyBmb3IgYWRkaXRpb25hbAorICBlbWFpbHMgd2hlbiBzZW50IHRocm91Z2ggbXVsdGlwbGUgY2FsbHMgdG8gY3VybF9lYXN5X3BlcmZvcm0oKSBhZnRlciBhCisgIENVUkxPUFRfQ09OTkVDVF9PTkxZLgorCistIENVUkxFX0ZUUF9QUkVUX0ZBSUxFRDogbGlzdGVkIHR3aWNlCisgIAorICBNYWtlIHN1cmUgaXQgaXMgbWVudGlvbmVkIG9uY2UgYW5kIHdpdGggdGhlIGNvcnJlY3QgZGVzY3JpcHRpb24KKworLSAtLW1haWwtYXV0aCBkb2N1bWVudGVkCisKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgU01UUDogQ29kZSBwb2xpY2luZyBhbmQgdGlkeSB1cAorCistIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGN1cmw6IEFkZGVkIHN1cHBvcnQgZm9yIC0tbWFpbC1hdXRoCisgIAorICBBZGRlZCBhbiBleHRyYSBjb21tYW5kLWxpbmUgYXJndW1lbnQgdG8gc3VwcG9ydCB0aGUgb3B0aW9uYWwgQVVUSAorICBwYXJhbWV0ZXIgaW4gU01UUHMgTUFJTCBGUk9NIGNvbW1hbmQuCisKK0thbWlsIER1ZGthICgxNiBGZWIgMjAxMikKKy0gZG9jczogbWVudGlvbiB0aGF0IE5UTE0gd29ya3Mgd2l0aCBOU1MsIHRvbworCitEYW5pZWwgU3RlbmJlcmcgKDE1IEZlYiAyMDEyKQorLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBET0NTOiBBZGRlZCBpbmZvcm1hdGlvbiBmb3IgQ1VSTE9QVF9NQUlMX0FVVEguCisgIAorICBBZGRlZCBpbmZvcm1hdGlvbiByZWxhdGluZyB0byB0aGUgbmV3IENVUkxPUFRfTUFJTF9BVVRIIHBhcmFtZXRlciBhbmQKKyAgcmV3b3JrZWQgQ1VSTE9QVF9NQUlMX0ZST00gYW5kIENVUkxPUFRfTUFJTF9SQ1BUIHRvIGJlIGEgY2xlYXJlci4KKyAgCisgIEZpeGVkIGluY29uc2lzdGVuY2llcyBvZiAidm9jYWxpc2F0aW9uIG9mIHRoZSBhYmJyZXZpYXRpb24iIHZlcnN1cworICAidm9jYWxpc2F0aW9uIG9mIHRoZSBmaXJzdCB3b3JkIiBmb3IgYWxsIGFiYnJldmlhdGlvbnMuCisgIAorICBDb3JyZWN0ZWQgYSB0eXBvIGluIENVUkxPUFRfTk9QUk9YWS4KKworLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBzbXRwLmM6IEZpeGVkIHVzZSBvZiBhbmdsZWQgYnJhY2tldHMgaW4gQVVUSCBwYXJhbWV0ZXIuCisgIAorICBGaXhlZCB0aGUgdXNlIG9mIGFuZ2xlZCBicmFja2V0cyAiPD4iIGluIHRoZSBvcHRpb25hbCBBVVRIIHBhcmFtZXRlciBhcworICBwZXIgUkZDLTI1NTQgc2VjdGlvbiA1LiBUaGUgYWRkcmVzcyBzaG91bGQgbm90IGluY2x1ZGUgdGhlbSBidXQgYW4KKyAgZW1wdHkgYWRkcmVzcyBzaG91bGQgYmUgcmVwbGFjZWQgYnkgdGhlbS4KKworLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBzbXRwX21haWw6IEFkZGVkIHN1cHBvcnQgdG8gTUFJTCBGUk9NIGZvciB0aGUgb3B0aW9uYWwgQVVUSCBwYXJhbWV0ZXIKKyAgCisgIEFkZGVkIGEgbmV3IENVUkxPUFRfTUFJTF9BVVRIIG9wdGlvbiB0aGF0IGFsbG93cyB0aGUgY2FsbGluZyBwcm9ncmFtIHRvCisgIHNldCB0aGUgb3B0aW9uYWwgQVVUSCBwYXJhbWV0ZXIgaW4gdGhlIE1BSUwgRlJPTSBjb21tYW5kLgorICAKKyAgV2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgYW5kIGFuIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBpcyB1c2VkCisgIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIG1haWwgc2VydmVyIHRoZW4gdGhlIEFVVEggcGFyYW1ldGVyIHdpbGwgYmUKKyAgaW5jbHVkZWQgaW4gdGhlIE1BSUwgRlJPTSBjb21tYW5kLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiB0aGUKKyAgY2FsbGluZyBwcm9ncmFtIGlzIGFjdGluZyBhcyBhIHJlbGF5IGluIGEgdHJ1c3RlZCBlbnZpcm9ubWVudCBhbmQKKyAgcGVyZm9ybWluZyBzZXJ2ZXIgdG8gc2VydmVyIGNvbW11bmljYXRpb24sIGFzIGl0IGFsbG93cyB0aGUgcmVsYXlpbmcKKyAgc2VydmVyIHRvIHNwZWNpZnkgdGhlIGFkZHJlc3Mgb2YgdGhlIG1haWxib3ggdGhhdCB3YXMgdXNlZCB0bworICBhdXRoZW50aWNhdGUgYW5kIHNlbmQgdGhlIG9yaWdpbmFsIGVtYWlsLgorCistIFt0b2Rkb3Vza2EgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBjeWFzc2w6IHVwZGF0ZSB0byBDeWFTU0wgMi4wLnggQVBJCisgIAorICBNb2RpZnkgY29uZmlndXJlLmFjIHRvIHRlc3QgZm9yIG5ldyBDeWFTU0wgSW5pdCBmdW5jdGlvbiBhbmQgcmVtb3ZlCisgIGRlZmF1bHQgaW5zdGFsbCBwYXRoIHRvIHN5c3RlbS4gIENoYW5nZSB0byBDeWFTU0wgT3BlblNTTCBoZWFkZXIgYW5kCisgIHByb3BlciBJbml0IGluIGNvZGUgYXMgd2VsbC4KKyAgCisgIE5vdGUgdGhhdCB0aGlzIG5vIGxvbmdlciBkZXRlY3RzIG9yIHdvcmtzIHdpdGggQ3lhU1NMIGJlZm9yZSB2MgorCistIExJQkNVUkxfVkVSU0lPTl9OVU06IDB4MDcxOTAwCisgIAorICBJIGFjY2lkZW50YWxseSBsZWZ0IHRoZSBsb3dlc3QgYml0cyAwMSBiZWZvcmUKKworLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBTTVRQOiBGaXhlZCBlcnJvciB3aGVuIHVzaW5nIENVUkxPUFRfQ09OTkVDVF9PTkxZCisgIAorICBGaXhlZCBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gc210cF9kb25lKCkgd2hpY2ggd291bGQgY2F1c2UgdGhlIGVuZCBvZgorICBibG9jayBkYXRhIHRvIGJlIHNlbnQgdG8gdGhlIFNNVFAgc2VydmVyIGlmIGxpYmN1cmwgd2FzIG9wZXJhdGluZyBpbgorICBjb25uZWN0IG9ubHkgbW9kZS4gVGhpcyB3b3VsZCBjYXVzZSB0aGUgc2VydmVyIHRvIHJldHVybiBhbiBlcnJvciBhcworICBkYXRhIHdvdWxkIG5vdCBiZSBleHBlY3RlZCB3aGljaCBpbiB0dXJuIGNhdXNlZCBsaWJjdXJsIHRvIHJldHVybgorICBDVVJMRV9SRUNWX0VSUk9SLgorCistIHMvNy4yNC4xLzcuMjUuMAorICAKKyAgV2Ugd2lsbCBnbyBzdHJhaWdodCB0byA3LjI1LjAgZHVlIHRvIHRoZSBuZXcgYWRkaXRpb25zCisKKy0gY3VybHZlci5oOiBidW1wZWQgdG8gNy4yNS4wCisgIAorICBhbmQgdXBkYXRlZCB0aGUgZW5kIHllYXIgaW4gdGhlIGdlbmVyaWMgY29weXJpZ2h0IHN0cmluZworCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDJiMjZlYjk4NQorICAKKyAgOSBidWcgZml4ZXMsIDQgY2hhbmdlcyBhbmQgbnVtZXJvdXMgY29udHJpYnV0b3JzCisgIAorICBCdW1wZWQgcmVsZWFzZSB2ZXJzaW9uIGFuZCBvcHRpb24gY291bnRlcnMKKworLSBbQ29saW4gSG9nYmVuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgY29uZmlndXJlOiBhZGQgb3B0aW9uIGRpc2FibGUgLS1saWJjdXJsIG91dHB1dAorCistIFtBbGVzc2FuZHJvIEdoZWRpbmkgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBjdXJsIHRvb2w6IGFsbG93IG5lZ2F0aXZlIG51bWJlcnMgYXMgb3B0aW9uIHZhbHVlcworICAKKyAgRml4IHRoZSBzdHIybnVtKCkgZnVuY3Rpb24gdG8gbm90IGNoZWNrIGlmIHRoZSBpbnB1dCBzdHJpbmcgc3RhcnRzIHdpdGggYQorICBkaWdpdCwgc2luY2Ugc3RydG9sKCkgc3VwcG9ydHMgbnVtYmVycyBwcmVwZW5kZWQgd2l0aCAnLScgKGFuZCAnKycpIHRvby4KKyAgVGhpcyBtYWtlcyB0aGUgLS1tYXgtcmVkaXJzIG9wdGlvbiB3b3JrIGFzIGRvY3VtZW50ZWQuCisKKy0gcGFyc2VfcHJveHk6IHNpbXBseSBtZW1vcnkgaGFuZGxpbmcKKyAgCisgIC4uLiBieSBtYWtpbmcgc3VyZSB0aGF0IHRoZSBzdHJpbmcgaXMgYWx3YXlzIGZyZWVkIGFmdGVyIHRoZSBpbnZva2UgYXMKKyAgcGFyc2VfcHJveHkgd2lsbCBhbHdheXMgY29weSB0aGUgZGF0YSBhbmQgdGhpcyB3YXkgdGhlcmUncyBhIHNpbmdsZQorICBmcmVlKCkgaW5zdGVhZCBvZiBtdWx0aXBsZSBvbmVzLgorCistIHBhcnNlX3Byb3h5OiBiYWlsIG91dCBvbiB6ZXJvLWxlbmd0aCBwcm94eSBuYW1lcyEKKyAgCisgIFRoZSBwcm94eSBwYXJzZXIgZnVuY3Rpb24gc3RyaXBzIG9mZiB0cmFpbGluZyBzbGFzaGVzIG9mZiB0aGUgcHJveHkgbmFtZQorICB3aGljaCBjb3VsZCBsZWFkIHRvIGEgbWlzdGFrZW4gemVybyBsZW5ndGggcHJveHkgbmFtZSB3aGljaCB3b3VsZCBiZQorICB0cmVhdGVkIGFzIG5vIHByb3h5IGF0IGFsbCBieSBzdWJzZXF1ZW50IGZ1bmN0aW9ucyEKKyAgCisgIFRoaXMgaXMgbm93IGRldGVjdGVkIGFuZCBhbiBlcnJvciBpcyByZXR1cm5lZC4gVmVyaWZpZWQgYnkgdGhlIG5ldyB0ZXN0CisgIDEzMjkuCisgIAorICBSZXBvcnRlZCBieTogQ2hhbmRyYWthbnQgQmFndWwKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTItMDIvMDAwMC5odG1sCisKK0thbWlsIER1ZGthICg5IEZlYiAyMDEyKQorLSBuc3M6IGFkZCBzdXBwb3J0IGZvciB0aGUgQ1VSTFNTTE9QVF9BTExPV19CRUFTVCBvcHRpb24KKyAgCisgIC4uLiBhbmQgZml4IHNvbWUgdHlwb3MgZnJvbSB0aGUgNjJkMTVmMSBjb21taXQuCisKK0RhbmllbCBTdGVuYmVyZyAoOSBGZWIgMjAxMikKKy0gW1JvYiBXYXJkIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgY29uZmlndXJlOiBkb24ndCBtb2RpZnkgTERfTElCUkFSWV9QQVRIIGZvciBjcm9zcyBjb21waWxlcworCistIC0tc3NsLWFsbG93LWJlYXN0IGFkZGVkCisgIAorICBUaGlzIG5ldyBvcHRpb24gdGVsbHMgY3VybCB0byBub3Qgd29yayBhcm91bmQgYSBzZWN1cml0eSBmbGF3IGluIHRoZQorICBTU0wzIGFuZCBUTFMxLjAgcHJvdG9jb2xzLiBJdCB1c2VzIHRoZSBuZXcgbGliY3VybCBvcHRpb24KKyAgQ1VSTE9QVF9TU0xfT1BUSU9OUyB3aXRoIHRoZSBDVVJMU1NMT1BUX0FMTE9XX0JFQVNUIGJpdCBzZXQuCisKKy0gQ1VSTE9QVF9TU0xfT1BUSU9OUzogYWRkZWQKKyAgCisgIEFsbG93IGFuIGFwcGxpY3Rpb24gdG8gc2V0IGxpYmN1cmwgc3BlY2lmaWMgU1NMIG9wdGlvbnMuIFRoZSBmaXJzdCBhbmQKKyAgb25seSBvcHRpb25zIHN1cHBvcnRlZCByaWdodCBub3cgaXMgQ1VSTFNTTE9QVF9BTExPV19CRUFTVC4KKyAgCisgIEl0IHdpbGwgbWFrZSBsaWJjdXJsIHRvIGRpc2FibGUgYW55IHdvcmstYXJvdW5kcyB0aGUgdW5kZXJseWluZyBTU0wKKyAgbGlicmFyeSBtYXkgaGF2ZSB0byBhZGRyZXNzIGEga25vd24gc2VjdXJpdHkgZmxhdyBpbiB0aGUgU1NMMyBhbmQgVExTMS4wCisgIHByb3RvY29sIHZlcnNpb25zLgorICAKKyAgVGhpcyBpcyBhIHJlYWN0aW9uIHRvIHVzIHVuY29uZGl0aW9uYWxseSByZW1vdmluZyB0aGF0IGJlaGF2aW9yIGFmdGVyCisgIHRoaXMgc2VjdXJpdHkgYWR2aXNvcnk6CisgIAorICBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvYWR2XzIwMTIwMTI0Qi5odG1sCisgIAorICAuLi4gaXQgZGlkIGhvd2V2ZXIgY2F1c2UgYSBsb3Qgb2YgcHJvZ3JhbXMgdG8gZmFpbCBiZWNhdXNlIG9mIG9sZAorICBzZXJ2ZXJzIG5vdCBsaWtpbmcgdGhpcyB3b3JrLWFyb3VuZC4gTm93IHByb2dyYW1zIGNhbiBvcHQgdG8gZGVjcmVhc2UKKyAgdGhlIHNlY3VyaXR5IGluIG9yZGVyIHRvIGludGVyb3BlcmF0ZSB3aXRoIG9sZCBzZXJ2ZXJzIGJldHRlci4KKworLSBbRGF2ZSBSZWlzbmVyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgY3VybDogdXNlIG5ldyBsaWJyYXJ5LXNpZGUgVENQX0tFRVBBTElWRSBvcHRpb25zCisgIAorICBVc2UgdGhlIG5ldyBsaWJyYXJ5IENVUkxPUFRfVENQX0tFRVBBTElWRSByYXRoZXIgdGhhbiBkaXNhYmxpbmcgdGhpcyB2aWEKKyAgdGhlIHNvY2tvcHQgY2FsbGJhY2suIElmIC0ta2VlcGFsaXZlLXRpbWUgaXMgdXNlZCwgYXBwbHkgdGhlIHZhbHVlIHRvCisgIENVUkxPUFRfVENQX0tFRVBJRExFIGFuZCBDVVJMT1BUX1RDUF9LRUVQSU5UVkwuCisKKy0gW0RhdmUgUmVpc25lciBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGFkZCBsaWJyYXJ5IHN1cHBvcnQgZm9yIHR1bmluZyBUQ1BfS0VFUEFMSVZFCisgIAorICBUaGlzIGFkZHMgdGhyZWUgbmV3IG9wdGlvbnMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgVENQIGtlZXBhbGl2ZXM6CisgIAorICAtIENVUkxPUFRfVENQX0tFRVBBTElWRTogZW5hYmxlL2Rpc2FibGUgcHJvYmVzCisgIC0gQ1VSTE9QVF9UQ1BfS0VFUElETEU6IGlkbGUgdGltZSBiZWZvcmUgc2VuZGluZyBmaXJzdCBwcm9iZQorICAtIENVUkxPUFRfVENQX0tFRVBJTlRWTDogZGVsYXkgYmV0d2VlbiBzdWNjZXNzaXZlIHByb2JlcworICAKKyAgV2hpbGUgbm90IGFsbCBvcGVyYXRpbmcgc3lzdGVtcyBzdXBwb3J0IHRoZSBUQ1BfS0VFUElETEUgYW5kCisgIFRDUF9LRUVQSU5UVkwga25vYnMsIHRoZSBsaWJyYXJ5IHdpbGwgc3RpbGwgYWxsb3cgdGhlc2Ugb3B0aW9ucyB0byBiZQorICBzZXQgYnkgY2xpZW50cywgc2lsZW50bHkgaWdub3JpbmcgdGhlIHZhbHVlcy4KKworLSBjdXJsX2Vhc3lfcmVzZXQ6IHJlc2V0IHRoZSByZWZlcmVyIHN0cmluZworICAKKyAgV2hlbiBDVVJMT1BUX1JFRkVSRVIgaGFzIGJlZW4gdXNlZCwgY3VybF9lYXN5X3Jlc2V0KCkgZGlkIG5vdCBwcm9wZXJseQorICBjbGVhciBpdC4KKyAgCisgIFZlcmlmaWVkIHdpdGggdGhlIG5ldyB0ZXN0IDU5OAorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDgxNTUxCisgIFJlcG9ydGVkIGJ5OiBNaWNoYWVsIERheQorCitZYW5nIFRzZSAoNyBGZWIgMjAxMikKKy0gY3VybCB0b29sOiBhbGxvdyBnbG9iLWxvb3BzIHRvIGFib3J0IGFnYWluIHVwb24gY3JpdGljYWwgZXJyb3JzCisgIAorICBUaGlzIHByZXZlbnRzIGNsb2JiZXJpbmcgb2Ygbm9uIHJlY292ZXJhYmxlIGVycm9yIHJldHVybiBjb2RlcyB3aGlsZQorICByZXRhaW5pbmcgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBvZiBjb21taXQgNjUxMDNlZmUKKworRGFuaWVsIFN0ZW5iZXJnICg2IEZlYiAyMDEyKQorLSBjdXJsIHRvb2w6IGRvbid0IGFib3J0IGdsb2ItbG9vcCBkdWUgdG8gZmFpbHVyZXMKKyAgCisgIFdlIHdhbnQgdG8gY29udGludWUgdG8gdGhlIG5leHQgVVJMIHRvIHRyeSBldmVuIG9uIGZhaWx1cmVzIHJldHVybmVkCisgIGZyb20gbGliY3VybC4gVGhpcyBtYWtlcyAtZiB3aXRoIHJhbmdlcyBzdGlsbCBnZXQgc3Vic2VxdWVudCBVUkxzIGV2ZW4KKyAgaWYgb2NjYXNpb25hbCBvbmVzIHJldHVybiBlcnJvci4gVGhpcyB3YXMgYSByZWdyZXNzaW9uIGFzIGl0IHVzZWQgdG8KKyAgd29yayBhbmQgYnJva2UgaW4gdGhlIDcuMjMuMCByZWxlYXNlLgorICAKKyAgQWRkZWQgdGVzdCBjYXNlIDEzMjggdG8gdmVyaWZ5IHRoZSBmaXguCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0ODEyMjMKKyAgUmVwb3J0ZWQgYnk6IEp1YW4gQmFycmV0bworCistIENPTk5FQ1Q6IHNlbmQgY29ycmVjdCBIb3N0OiB3aXRoIElQdjYgbnVtZXJpY2FsIGFkZHJlc3MKKyAgCisgIFdoZW4gdGhlIHRhcmdldCBob3N0IHdhcyBnaXZlbiBhcyBhIElQdjYgbnVtZXJpY2FsIGFkZHJlc3MsIGl0IHdhcyBub3QKKyAgcHJvcGVybHkgcHV0IHdpdGhpbiBzcXVhcmUgYnJhY2tldHMgZm9yIHRoZSBIb3N0OiBoZWFkZXIgaW4gdGhlIENPTk5FQ1QKKyAgcmVxdWVzdC4gVGhlICJub3JtYWwiIHJlcXVlc3QgZGlkIGZpbmUuCisgIAorICBSZXBvcnRlZCBieTogInpvb2xvbyIKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDgyMDkzCisKKy0gW01hcnRpbiBTdG9yc2pvIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgRXhwbGljaXRseSBsaW5rIHRvIHRoZSBuZXR0bGUvZ2NyeXB0IGxpYnJhcmllcworICAKKyAgV2hlbiBzdXBwb3J0IGZvciBuZXR0bGUgd2FzIGFkZGVkIGluIDY0ZjMyOGM3ODdhYiwgSSBvdmVybG9va2VkCisgIHRoZSBmYWN0IHRoYXQgQUNfQ0hFQ0tfTElCIGRvZXNuJ3QgYWRkIHRoZSB0ZXN0ZWQgbGliIHRvIExJQlMKKyAgaWYgdGhlIGNoZWNrIHN1Y2NlZWRlZCwgaWYgYSBjdXN0b20gc3VjY2VzcyBjb2RlIGJsb2NrIHdhcyBwcmVzZW50LgorICAoVGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGNoZWNrIGhhZCBhbiBlbXB0eSBibG9jayBmb3IKKyAgc3VjY2Vzc2Z1bCBjaGVja3MsIGFkZGluZyB0aGUgbGliIHRvIExJQlMgaW1wbGljaXRseS4pCisgIAorICBUaGVyZWZvcmUsIGV4cGxpY2l0bHkgYWRkIGVpdGhlciBuZXR0bGUgb3IgZ2NyeXB0IHRvIExJQlMsIGFmdGVyCisgIGRlY2lkaW5nIHdoaWNoIG9uZSB0byB1c2UuIEV2ZW4gaWYgdGhleSBjYW4gYmUgbGlua2VkIGluCisgIHRyYW5zaXRpdmVseSwgaXQgaXMgc2FmZXIgdG8gYWN0dWFsbHkgbGluayBleHBsaWNpdGx5IHRvIHRoZW0uCisgIAorICBUaGlzIGZpeGVzIGJ1aWxkaW5nIHdpdGggZ251dGxzIHdpdGggbGlua2VycyB0aGF0IGRvbid0IGFsbG93CisgIGxpbmtpbmcgdHJhbnNpdGl2ZWx5LCBzdWNoIGFzIGZvciB3aW5kb3dzLgorCistIFtQaWVycmUgWW5hcmQgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBtb3JlIHJlc2lsaWVudCBjb25uZWN0aW9uIHRpbWVzIGFtb25nIElQIGFkZHJlc3NlcworICAKKyAgV2hlbiBjb25uZWN0aW5nIHRvIGEgZG9tYWluIHdpdGggbXVsdGlwbGUgSVAgYWRkcmVzc2VzLCBhbGxvdyBkaWZmZXJlbnQsCisgIGRlY3JlYXNpbmcgY29ubmVjdGlvbiB0aW1lb3V0IHZhbHVlcy4gVGhpcyBzaG91bGQgZ3VhcmFudGVlIHNvbWUKKyAgY29ubmVjdGlvbnMgYXR0ZW1wdHMgd2l0aCBzdWZmaWNpZW50bHkgbG9uZyB0aW1lb3V0cywgd2hpbGUgc3RpbGwKKyAgcHJvdmlkaW5nIGZhbGxiYWNrLgorCistIFtQaWVycmUgWW5hcmQgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICByZW1vdmUgd3JpdGUtb25seSB2YXJpYWJsZQorCitQaWVycmUgSm95ZSAoMjYgSmFuIDIwMTIpCistIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOmJhZ2Rlci9jdXJsCisKKy0gLSBmaXggSVBWNiBhbmQgSUROIG9wdGlvbnMKKworWWFuZyBUc2UgKDI1IEphbiAyMDEyKQorLSBUT0RPLVJFTEVBU0U6IGFkZGVkIGl0ZW0gIzMwOAorCitEYW5pZWwgU3RlbmJlcmcgKDI1IEphbiAyMDEyKQorLSBUSEFOS1M6IGltcG9ydGVkIGNvbnRyaWJ1dG9ycyBmcm9tIDcuMjQuMCBSRUxFQVNFLU5PVEVTCisKK1lhbmcgVHNlICgyNSBKYW4gMjAxMikKKy0gdGVzdCBoYXJuZXNzOiB1cGRhdGUgc3R1bm5lbC5wZW0gRGlmZmllLUhlbGxtYW4gcGFyYW1ldGVycyBmcm9tIDUxMiB0byAxMDI0IGJpdAorCistIHZlcnNpb246IHN0YXJ0IHdvcmtpbmcgb24gNy4yNC4xLURFVgorCitEYW4gRmFuZHJpY2ggKDI0IEphbiAyMDEyKQorLSBjdXJsX2Vhc3lfc2V0b3B0LjM6IEZpeGVkIFNFRUtEQVRBICYgQ0xPU0VTT0NLRVREQVRBIGRlc2NyaXB0aW9ucworCitWZXJzaW9uIDcuMjQuMCAoMjQgSmFuIDIwMTIpCisKK0RhbmllbCBTdGVuYmVyZyAoMjQgSmFuIDIwMTIpCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDcwZjcxYmI5OWY3ZWQ5CisKK1ZlcnNpb24gNy4yNC4wICgyNCBKYW4gMjAxMikKKyAgCisKK1ZlcnNpb24gNy4yNC4wICgyNCBKYW4gMjAxMikKKyAgU3luY2VkIGFuZCBwcmVwYXJlZCBmb3IgNy4yNC4wIHJlbGVhc2UuIFR3byBzZWN1cml0eSBwcm9ibGVtcywgb25lIGJ1ZyBmaXgsCisKK1ZlcnNpb24gNy4yNC4wICgyNCBKYW4gMjAxMikKKyAgdHdvIG1vcmUgY29udHJpYnV0b3JzLgorCistIGdudXRsczogZW5mb3JjZWQgdXNlIG9mIFNTTHYzCisgIAorICBXaXRoIGFkdmljZSBmcm9tIE5pa29zIE1hdnJvZ2lhbm5vcG91bG9zLCBjaGFuZ2VkIHRoZSBwcmlvcml0eSBzdHJpbmcgdG8KKyAgYWRkICJhY3R1YWwgcHJpb3JpdGllcyIgYW5kIGZhdm91ciBBUkNGT1VSLiBUaGlzIG1ha2VzIGxpYmN1cmwgd29yaworICBiZXR0ZXIgd2hlbiBlbmZvcmNpbmcgU1NMdjMgd2l0aCBHbnVUTFMuIEJvdGggaW4gdGhlIHNlbnNlIHRoYXQgdGhlCisgIGxpYm1pY3JvaHR0cGQgdGVzdCBpcyBub3cgd29ya2luZyBhZ2FpbiBidXQgYWxzbyB0aGF0IGl0IG1pdGlnYXRlcyBhCisgIHdlYWtuZXNzIGluIHRoZSBvbGRlciBTU0wvVExTIHByb3RvY29scy4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDEyLTAxLzAyMjUuaHRtbAorICBSZXBvcnRlZCBieTogQ2hyaXN0aWFuIEdyb3Rob2ZmCisKKy0gdGVzdHM6IHRlc3QgQ1JMRiBpbiBVUkxzCisgIAorICBSZWxhdGVkIHRvIHRoZSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5OiBDVkUtMjAxMi0wMDM2CisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9hZHZfMjAxMjAxMjQuaHRtbAorCistIFVSTCBzYW5pdGl6ZTogcmVqZWN0IFVSTHMgY29udGFpbmluZyBiYWQgZGF0YQorICAKKyAgUHJvdG9jb2xzIChJTUFQLCBQT1AzIGFuZCBTTVRQKSB0aGF0IHVzZSB0aGUgcGF0aCBwYXJ0IG9mIGEgVVJMIGluIGEKKyAgZGVjb2RlZCBtYW5uZXIgbm93IHVzZSB0aGUgbmV3IEN1cmxfdXJsZGVjb2RlKCkgZnVuY3Rpb24gdG8gcmVqZWN0IFVSTHMKKyAgd2l0aCBlbWJlZGRlZCBjb250cm9sIGNvZGVzIChhbnl0aGluZyB0aGF0IGlzIG9yIGRlY29kZXMgdG8gYSBieXRlIHZhbHVlCisgIGxlc3MgdGhhbiAzMikuCisgIAorICBVUkxzIGNvbnRhaW5pbmcgc3VjaCBjb2RlcyBjb3VsZCBlYXNpbHkgb3RoZXJ3aXNlIGJlIHVzZWQgdG8gZG8gaGFybSBhbmQKKyAgYWxsb3cgdXNlcnMgdG8gZG8gdW5pbnRlbmRlZCBhY3Rpb25zIHdpdGggb3RoZXJ3aXNlIGlubm9jZW50IHRvb2xzIGFuZAorICBhcHBsaWNhdGlvbnMuIExpa2UgZm9yIGV4YW1wbGUgdXNpbmcgYSBVUkwgbGlrZQorICBwb3AzOi8vcG9wMy5leGFtcGxlLmNvbS8xJTBkJTBhREVMRSUyMDEgd2hlbiB0aGUgYXBwIHdhbnRzIGEgVVJMIHRvIGdldAorICBhIG1haWwgYW5kIGluc3RlYWQgdGhpcyB3b3VsZCBkZWxldGUgb25lLgorICAKKyAgVGhpcyBmbGF3IGlzIGNvbnNpZGVyZWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5OiBDVkUtMjAxMi0wMDM2CisgIAorICBTZWN1cml0eSBhZHZpc29yeSBhdDogaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2Fkdl8yMDEyMDEyNC5odG1sCisgIAorICBSZXBvcnRlZCBieTogRGFuIEZhbmRyaWNoCisKKy0gT3BlblNTTDogZG9uJ3QgZGlzYWJsZSBzZWN1cml0eSB3b3JrLWFyb3VuZAorICAKKyAgT3BlblNTTCBhZGRlZCBhIHdvcmstYXJvdW5kIGZvciBhIFNTTCAzLjAvVExTIDEuMCBDQkMgdnVsbmVyYWJpbGl0eQorICAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+Ym9kby90bHMtY2JjLnR4dCkuIEluIDAuOS42ZSB0aGV5IGFkZGVkIGEgYml0CisgIHRvIFNTTF9PUF9BTEwgdGhhdCBfZGlzYWJsZXNfIHRoYXQgd29yay1hcm91bmQgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0CisgIFNTTF9PUF9BTEwgaXMgZG9jdW1lbnRlZCB0byBkbyAicmF0aGVyIGhhcm1sZXNzIiB3b3JrYXJvdW5kcy4KKyAgCisgIFRoZSBsaWJjdXJsIGNvZGUgdXNlcyB0aGUgU1NMX09QX0FMTCBkZWZpbmUgYW5kIHRodXMgbG9naWNhbGx5IGFsd2F5cworICBkaXNhYmxlcyB0aGUgT3BlblNTTCBmaXguCisgIAorICBJbiBvcmRlciB0byBrZWVwIHRoZSBzZWN1cmUgd29yay1hcm91bmQgd29ya2RpbmcsIHRoZQorICBTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIGJpdCBtdXN0IG5vdCBiZSBzZXQgYW5kIHRoaXMgY2hhbmdlCisgIG1ha2VzIHN1cmUgb2YgdGhpcy4KKyAgCisgIFJlcG9ydGVkIGJ5OiBwcm9kdWN0LXNlY3VyaXR5IGF0IEFwcGxlCisKKy0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggNmUyZmQyYzllYQorICAKKyAgMyBtb3JlIGJ1Z2ZpeGVzLCAzIG1vcmUgY29udHJpYnV0b3JzCisKKy0gQ1VSTE9QVF9BQ0NFUFRUSU1FT1VUX01TOiBzcGVsbGZpeAorCitEYW4gRmFuZHJpY2ggKDIwIEphbiAyMDEyKQorLSBleGFtcGxlczogdXBkYXRlZCBSRUFETUUgd2l0aCB0d28gbmV3IGV4YW1wbGUgcHJvZ3JhbXMKKworRGFuaWVsIFN0ZW5iZXJnICgyMCBKYW4gMjAxMikKKy0gVVJMIHBhcnNlOiB1c2VyIG5hbWUgd2l0aCBpcHY2IG51bWVyaWNhbCBhZGRyZXNzCisgIAorICBVc2luZyBhIFVSTCB3aXRoIGVtYmVkZGVkIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgZGlkbid0IHdvcmsgaWYgdGhlIGhvc3QKKyAgd2FzIGdpdmVuIGFzIGEgbnVtZXJpY2FsIElQdjYgc3RyaW5nLCBsaWtlIGZ0cDovL3VzZXI6cGFzc3dvcmRAWzo6MV0vCisgIAorICBSZXBvcnRlZCBieTogQnJhbmRvbiBXYW5nCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2FyY2hpdmUtMjAxMi0wMS8wMDQ3Lmh0bWwKKworWWFuZyBUc2UgKDIwIEphbiAyMDEyKQorLSB0ZWxuZXQuYzogZml4IE9PTSB0cmlnZ2VyZWQgc2VnZmF1bHQKKworLSB0ZXN0dHJhY2UuYzogZml4IGNvbXBpbGVyIHdhcm5pbmcKKworLSBPcGVuU1NMOiBmb2xsb3ctdXAgZm9yIGNvbW1pdCBhMjBkYWY5MGUzCisgIAorICBhdm9pZCBjaGVja2luZyBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbiBvZmZpY2lhbCB2YWx1ZQorCitQaWVycmUgSm95ZSAoMTkgSmFuIDIwMTIpCistIC0gcywgdXNlLCBlbmFibGUsIGZvciBvcHRpb25zIG5hbWUsIGF2b2lkaW5nIGNvbmZsaWN0cyB3aXRoIHRoZSBuYW1lcyB1c2VkIGluIHRoZSBtYWtlZmlsZQorCitEYW5pZWwgU3RlbmJlcmcgKDE5IEphbiAyMDEyKQorLSBjdXJsLjE6IGltcHJvdmUgLS1zdGRlcnIgd29yZGluZworICAKKyAgQXMgaXMgcG9pbnRlZCBvdXQgaW4gdGhpcyBidWcgcmVwb3J0LCB0aGVyZSBjYW4gaW5kZWVkIGJlIHNpdHVhdGlvbgorICB3aGVyZSAtLXN0ZGVyciBoYXMgYSBwb2ludCBldmVuIHdoZW4gdGhlICJyZWFsIiBzdGRlcnIgY2FuIGJlCisgIHJlZGlyZWN0ZWQuIFJlbW92ZSB0aGUgc3VwZXJmbHVvdXMgYW5kIHdyb25nIGNvbW1lbnQuCisgIAorICBidWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0NzYwMjAKKworLSBLTk9XTl9CVUdTOiBjYW4ndCByZWNlaXZlIHplcm8gYnl0ZXMgZmlsZSBwcm9wZXJseQorICAKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQzODM2MgorCitZYW5nIFRzZSAoMTggSmFuIDIwMTIpCistIHNzbCBzZXNzaW9uIGNhY2hpbmc6IGZpeCBjb21waWxlciB3YXJuaW5ncworCitEYW5pZWwgU3RlbmJlcmcgKDE4IEphbiAyMDEyKQorLSBwb2xhcnNzbDogc2hvdyBjaXBoZXIgc3VpdGUgbmFtZSBjb3JyZWN0bHkgd2l0aCAxLjEuMAorICAKKyAgQXBwYXJlbnRseSBzc2xfZ2V0X2NpcGhlcnN1aXRlKCkgaXMgbmVlZGVkIHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgdXNlZAorICBjaXBoZXIgc3VpdGUuCisKKy0gcG9sYXJzc2w6IHNob3cgZXJyb3IgY29kZSBjb3JyZWN0bHkKKyAgCisgIFRoZSB2YWx1ZSB3YXMgdHVybmVkIG5lZ2F0aXZlIHdoZW4gaXQgc2hvdWxkbid0IGhhdmUgYmVlbgorCistIHBvbGFyc3NsOiBoYXZlZ2VfcmFuZCBpcyBub3QgcHJlc2VudCBpbiB2ZXJzaW9uIDEuMS4wCisgIAorICAuLi4gaXQgaXMgbm93IG5hbWVkIGhhdmVnZV9yYW5kb20hCisgIAorICBSZXBvcnRlZCBieTogUm9iZXJ0IFNjaHVtYW5uCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDEyLTAxLzAxNzguaHRtbAorCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDVkNzBhNjFiOTQ2MDQKKyAgCisgIDUgbW9yZSBidWcgZml4ZXMsIDEgbW9yZSBjb250cmlidXRvcgorCistIFtDb2xpbiBIb2diZW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBBZGQgdHdvIHRlc3RzIGZvciB0ZWxuZXQ6IFVSTHMKKyAgCisgIEFkZCBzaW1wbGUgdGVsbmV0IHRlc3RzIHdoaWNoIChhYil1c2UgdGhlIGh0dHAgc2VydmVyLgorICBUaGUgc2Vjb25kIHRlc3QgY2hlY2tzIGZvciBhbiBpbnB1dCBmaWxlIGhhbmRsaW5nIGJ1Zy4KKworLSBbQ29saW4gSG9nYmVuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgUmVtb3ZlIGJvZ3VzIG9wdGltaXNhdGlvbiBvZiB0ZWxuZXQgdXBsb2FkLgorICAKKyAgUmVtb3ZlIHdyb25nbHkgaW1wbGVtZW50ZWQgb3B0aW1pc2F0aW9uIG9mIHRlbG5ldCB1cGxvYWQsIGFwcGFyZW50bHkKKyAgaW50ZW5kZWQgdG8gYWxsb3cgdGhlIGxpYnJhcnkgdG8gYXZvaWQgbWFudWFsbHkgcG9sbGluZyBmb3IgaW5wdXQuCisKKy0gW0NvbGluIEhvZ2JlbiBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIFVzZSBjb3JyZWN0IGZpbGUgZGVzY3JpcHRvciBmb3IgdGVsbmV0IHVwbG9hZC4KKyAgCisgIEZpeCBhIGJ1ZyB3aGVyZSBpbnB1dCB3YXMgcmVhZCBmcm9tIHN0ZGluIGV2ZW4gd2hlbiBhIGRpZmZlcmVudCBGSUxFICoKKyAgaGFkIGJlZW4gY29uZmlndXJlZCB2aWEgQ1VSTE9QVF9SRUFEREFUQQorCitZYW5nIFRzZSAoMTggSmFuIDIwMTIpCistIE9wZW5MREFQOiBmaXggTERBUCBjb25uZWN0aW9uIHBoYXNlIG1lbW9yeSBsZWFrCisgIAorICBidWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0NzQzMDgKKworLSBbSm9oYW5uZXMgQmF1ZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBPcGVuU1NMOiBmaXggUEtDUyMxMiBjZXJ0aWZpY2F0ZSBwYXJzaW5nIHJlbGF0ZWQgbWVtb3J5IGxlYWsKKyAgCisgIExlYWsgdHJpZ2dlcmVkIHdoZW4gQ1VSTE9QVF9TU0xDRVJUVFlQRSBhbmQgQ1VSTE9QVF9TU0xLRVlUWVBFIHNldCB0byBQMTIKKyAgYW5kIGJvdGggQ1VSTE9QVF9TU0xDRVJUIGFuZCBDVVJMT1BUX1NTTEtFWSBwb2ludCB0byB0aGUgc2FtZSBQS0NTIzEyIGZpbGUuCisKKy0gT3BlblNTTDogU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHIG9wdGlvbiBpcyBubyBsb25nZXIgZW5hYmxlZAorICAKKyAgU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHIG9wdGlvbiBlbmFibGluZyBhbGxvd2VkIHN1Y2Nlc3NmdWxsCisgIGludGVyb3BlcmFiaWxpdHkgd2l0aCB3ZWIgc2VydmVyIE5ldHNjYXBlIEVudGVycHJpc2UgU2VydmVyIDIuMC4xIHJlbGVhc2VkCisgIGJhY2sgaW4gMTk5NiBtb3JlIHRoYW4gMTUgeWVhcnMgYWdvLgorICAKKyAgRHVlIHRvIENWRS0yMDEwLTQxODAsIG9wdGlvbiBTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUcgaGFzCisgIGJlY29tZSBpbmVmZmVjdGl2ZSBhcyBvZiBPcGVuU1NMIDAuOS44cSBhbmQgMS4wLjBjLiBJbiBvcmRlciB0byBtaXRpZ2F0ZQorICBDVkUtMjAxMC00MTgwIHdoZW4gdXNpbmcgcHJldmlvdXMgT3BlblNTTCB2ZXJzaW9ucyB3ZSBubyBsb25nZXIgZW5hYmxlCisgIHRoaXMgb3B0aW9uIHJlZ2FyZGxlc3Mgb2YgT3BlblNTTCB2ZXJzaW9uIGFuZCBTU0xfT1BfQUxMIGRlZmluaXRpb24uCisKKy0gdGVzdHM6IGVuYWJsZSB0aW1lIHRyYWNpbmcgb24gdGVzdHMgNTAwLCA1NzMgYW5kIDU4NQorCistIHRlc3RzOiB0ZXN0dHJhY2UuW2NoXSBwcm92aWRlcyBkZWJ1ZyBjYWxsYmFjayBmb3IgbGlidGVzdCB1c2FnZQorICAKKyAgQWxsb3dzIHRlc3RzIGZyb20gdGhlIGxpYnRlc3Qgc3ViZGlyIHRvIGdlbmVyYXRlIGxvZyB0cmFjZXMKKyAgc2ltaWxhciB0byB0aG9zZSBvZiBjdXJsIHdpdGggLS10cmFjZXRpbWUgYW5kIC0tdHJhY2UtYXNjaWkKKyAgb3B0aW9ucyBidXQgd2l0aCBvdXRwdXQgZ29pbmcgdG8gc3RkZXJyLgorCistIHN3cy5jOiBmaXggcHJveHkgbW9kZSBzZWNvbmRhcnkgY29ubmVjdGlvbiBtb25pdG9yaW5nIGNvbmRpdGlvbgorCistIGFkZCBMRiB0ZXJtaW5hdGlvbiB0byBpbmZvZigpIHRyYWNlIHN0cmluZworCistIHN3cy5jOiBpbXByb3ZlIHByb3h5IG1vZGUgdG9ydHVyZSB0ZXN0aW5nIHN1cHBvcnQgLSBmb2xsb3d1cCB0byAxOGM2YzhhNQorCitEYW5pZWwgU3RlbmJlcmcgKDE2IEphbiAyMDEyKQorLSB1cmwyZmlsZTogbmV3IHNpbXBsZSBleGFtcGxlCisgIAorICBKdXN0IHNob3dpbmcgaG93IHRvIGRvd25sb2FkIHRoZSBjb250ZW50cyBvZiBhIGdpdmVuIFVSTCBpbnRvIGEgbG9jYWwKKyAgZmlsZS4KKyAgCisgIEJhc2VkIG9uIGEgc3VnZ2VzdGlvbiBhbmQgZXhhbXBsZSBjb2RlIGJ5IEdlb3JnIFBvdHRoYXN0CisKKy0gaW1hcC5jOiBhIGRlYWQgc2ltcGxlIGltYXAgZXhhbXBsZQorICAKKyAgSnVzdCB0byBzaG93IHRoYXQgSU1BUCBpcyB1c2VkIGp1c3QgbGlrZSBvdGhlciBwcm90b2NvbHMKKworWWFuZyBUc2UgKDE2IEphbiAyMDEyKQorLSBzd3MuYzogaW1wcm92ZSBwcm94eSBtb2RlIHRvcnR1cmUgdGVzdGluZyBzdXBwb3J0IC0gZm9sbG93dXAgdG8gYzczMWZjNTgKKworLSBzd3MuYzogaW1wcm92ZSBwcm94eSBtb2RlIHRvcnR1cmUgdGVzdGluZyBzdXBwb3J0IC0gZm9sbG93dXAgdG8gZDRiZjg3ZGMKKworLSBDdXJsX3Byb3h5Q09OTkVDVCgpIHRyYWNlIGtub3duIGJ1ZyAjMzkKKworRGFuaWVsIFN0ZW5iZXJnICgxNCBKYW4gMjAxMikKKy0gdGVzdDogdmVyaWZ5IEhUVFAgcmVzcG9uc2UgY29kZSAzMDgKKyAgCisgIFRoaXMgbmV3bHkgc3BlY2VkIEhUVFAgc3RhdHVzIGNvZGUgYWxyZWFkeSB3b3JrcyBhcyBpbnRlbmRlZCBpbiB0aGUgbmV3CisgIHNwZWM6CisgIGh0dHA6Ly9ncmVlbmJ5dGVzLmRlL3RlY2gvd2ViZGF2L2RyYWZ0LXJlc2Noa2UtaHR0cC1zdGF0dXMtMzA4LTAyLmh0bWwKKyAgCisgIFRlc3QgMTMyNSBpcyBhZGRlZCB0byB2ZXJpZnkgdGhhdCB0aGUgbWV0aG9kIGlzIGtlcHQgYWZ0ZXIgdGhlIHJlZGlyZWN0CisKK1lhbmcgVHNlICgxMyBKYW4gMjAxMikKKy0gaHR0cF9uZWdvdGlhdGVfc3NwaS5jOiBmaXggY29tcGlsZXIgd2FybmluZworCistIHNzaC5jOiBmaXggY29tcGlsZXIgd2FybmluZworCistIHN3cy5jOiBpbXByb3ZlIHByb3h5IG1vZGUgdG9ydHVyZSB0ZXN0aW5nIHN1cHBvcnQKKworRGFuaWVsIFN0ZW5iZXJnICgxMiBKYW4gMjAxMikKKy0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggOWYyMDM3OWZlNAorICAKKyAgNSBidWcgZml4ZXMsIDMgbW9yZSBjb250cmlidXRvcnMKKworLSBob3N0aXA6IGF2b2lkIGdldGFkZHJpbmZvIHdoZW4gYy1hcmVzIGlzIHVzZWQKKyAgCisgIFNvbWUgZnVuY3Rpb25zIHVzaW5nIGdldGFkZHJpbmZvIGFuZCBnZXRob3N0YnluYW1lIHdlcmUgc3RpbGwKKyAgbWlzdGFraW5nbHkgYmVpbmcgdXNlZC9saW5rZWQgZXZlbiBpZiBjLWFyZXMgd2FzIHNlbGVjdGVkIGFzIHJlc29sdmVyCisgIGJhY2tlbmQuCisgIAorICBSZXBvcnRlZCBieTogQXJ0aHVyIE11cnJheQorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMS8wMTYwLmh0bWwKKworWWFuZyBUc2UgKDkgSmFuIDIwMTIpCistIHN3cy5jOiByZXBsYWNlIHNsZWVwKCkgdXNhZ2Ugd2l0aCB3YWl0X21zKCkKKworRGFuaWVsIFN0ZW5iZXJnICg5IEphbiAyMDEyKQorLSBbZ3Nlbmd1biBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIEZUUDogQ1VSTEVfUEFSVElBTF9GSUxFIHNob3VsZCBub3QgY2F1c2UgY29udHJvbCBjb25uZWN0aW9uIHRvIGJlIGNsb3NlZAorICAKKyAgVGVzdCAxNjEgdXBkYXRlZCBhY2NvcmRpbmdseQorCitZYW5nIFRzZSAoOCBKYW4gMjAxMikKKy0gc3dzLmM6IHNvbWUgY29tcGlsZXIgd2FybmluZyBmaXhlcworCistIGxpYi9zZXR1cC5oOiBwb3J0YWJsZSBzeW1ib2xpYyBuYW1lcyBmb3IgV2luc29jayBzaHV0ZG93bigpIG1vZGUgZmxhZ3MKKworLSBzd3MuYzogODEyZmE3MzA1NyBmb2xsb3ctdXAKKworLSBzd3MuYzogc29tZSBJUHY2IHByb3h5IG1vZGUgcGVwYXJhdG9yeSBhZGp1c3RtZW50cworCitEYW5pZWwgU3RlbmJlcmcgKDUgSmFuIDIwMTIpCistIGN1cmwuaDogcHJvdmlkZSBiYWNrd2FyZHMgY29tcGF0aWJsZSBzeW1ib2xzCisgIAorICBJbiBjb21taXQgYzgzNDIxM2FkNTIgd2UgcmUtdXNlZCBzb21lIG9ic29sZXRlIGVycm9yIGNvZGVzLCBhbmQgaGVyZSBhcmUKKyAgdHdvIGRlZmluZXMgdGhhdCBtYWtlcyBzdXJlIGV4aXN0aW5nIHNvdXJjZSBjb2RlcyB0aGF0IGhhcHBlbiB0byB1c2UgYW55CisgIG9mIHRoZXNlIGRlcHJlY2F0ZWQgb25lcyB3aWxsIHN0aWxsIGNvbXBpbGUuCisgIAorICBBcyB1c3VhbCwgZGVmaW5lIENVUkxfTk9fT0xESUVTIHRvIGF2b2lkIGdldHRpbmcgdGhlc2UgInByZWNhdXRpb24KKyAgZGVmaW5lcyIuCisKKy0gd2luMzItdGhyZWFkZWQtcmVzb2x2ZXI6IHN0b3AgdXNpbmcgYSBkdW1teSBzb2NrZXQKKyAgCisgIFByZXZpb3VzbHkgdGhlIGNvZGUgd291bGQgY3JlYXRlIGEgZHVtbXkgc29ja2V0IHdoaWxlIHJlc29sdmluZyBqdXN0IHRvCisgIGhhdmUgY3VybF9tdWx0aV9mZHNldCgpIHJldHVybiBzb21ldGhpbmcgYnV0IHRoZSBub24td2luMzIgdmVyc2lvbgorICBkb2Vzbid0IGRvIGl0IHRoaXMgd2F5IGFuZCB0aGUgY3JlYXRpb24gYW5kIHVzZSBvZiBhIHNvY2tldCB0aGF0IGlzbid0CisgIG1hZGUgd2l0aCB0aGUgY29tbW9uIGNyZWF0ZS1zb2NrZXQgY2FsbGJhY2sgY2FuIGJlIGNvbmZ1c2luZyB0byBhcHBzCisgIHVzaW5nIHRoZSBtdWx0aV9zb2NrZXQgQVBJIGV0Yy4KKyAgCisgIFRoaXMgY2hhbmdlIHJlbW92ZXMgdGhlIGR1bW15IHNvY2tldCBhbmQgdGh1cyB3aWxsIGNhdXNlCisgIGN1cmxfbXVsdGlfZmRzZXQoKSB0byByZXR1cm4gd2l0aCBtYXhmZCA9PSAtMSBtb3JlIG9mdGVuLgorCistIFtQZXRlciBTeWx2ZXN0ZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBPcGVuU1NMOiByZW1vdmUgcmVmZXJlbmNlIHRvIG9wZW5zc2wgaW50ZXJuYWwgc3RydWN0CisgIAorICBXaXRoIHRoaXMgY2hhbmdlLCBjdXJsIGNvbXBpbGVzIHdpdGggdGhlIG5ldyBPUEVOU1NMX05PX1NTTF9JTlRFUk4KKyAgY2ZsYWcuIFRoaXMgZmxhZyBtaWdodCBiZWNvbWUgdGhlIGRlZmF1bHQgaW4gc29tZSBkaXN0YW50IGZ1dHVyZS4KKworWWFuZyBUc2UgKDQgSmFuIDIwMTIpCistIHRlc3QxMzIwIHRlc3QxMzIxOiBhdm9pZCBVc2VyLUFnZW50IGNvbXBhcmlzb24KKworLSBodHRwc2VydmVyLnBsOiByZW9yZGVyIHN3cyBjb21tYW5kIGxpbmUgb3B0aW9ucworICAKKyAgbWFrZSAncGlkZmlsZScgYW5kICdsb2dmaWxlJyBvcHRpb25zIGFwcGVhciBmaXJzdCBvbiBjb21tYW5kIGxpbmUgaW4gb3JkZXIKKyAgdG8gZW5zdXJlIHRoYXQgcHJvY2Vzc2luZyBvZiBvdGhlciBvcHRpb25zIHdoaWNoIHdyaXRlIHRvIGxvZ2ZpbGUgZG8gdGhpcworICB0byBpbnRlbmRlZCBmaWxlIGFuZCBub3QgdGhlIGRlZmF1bHQgb25lLgorCistIHN3cy5jOiBmaXggcHJveHkgbW9kZSBzZWdmYXVsdAorCistIHRvb2xfZm9ybXBhcnNlLmM6IGZpeCBjb21waWxlciB3YXJuaW5nOiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUKKworLSBrcmI1LmM6IGZpeCBjb21waWxlciB3YXJuaW5nOiB2YXJpYWJsZSBzZXQgYnV0IG5vdCB1c2VkCisKK0RhbmllbCBTdGVuYmVyZyAoNCBKYW4gMjAxMikKKy0gS05PV05fQlVHUzogIzc3IENVUkxPUFRfRk9SQklEX1JFVVNFIGtpbGxzIE5UTE0KKworLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBGaXhlZCB1c2Ugb2YgQ1VSTFVTRVNTTF9UUlkgZm9yIFBPUDMgYW5kIElNQVAgYmFzZWQgY29ubmVjdGlvbnMuCisgIAorICBGaXhlZCBhIHByb2JsZW0gaW4gUE9QMyBhbmQgSU1BUCB3aGVyZSBhIGNvbm5lY3Rpb24gd291bGQgZmFpbCB3aGVuCisgIENVUkxVU0VTU0xfVFJZIHdhcyBzcGVjaWZpZWQgZm9yIGEgc2VydmVyIHRoYXQgZGlkbid0IHN1cHBvcnQKKyAgU1NML1RMUyBjb25uZWN0aW9ucyByYXRoZXIgdGhhbiBjb250aW51aW5nLgorCistIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIEZpeGVkIGluY29ycmVjdCBlcnJvciBjb2RlIGJlaW5nIHJldHVybmVkIGluIFNUQVJUVExTCisgIAorICBUaGUgU1RBUlRUTFMgcmVzcG9uc2UgY29kZSBpbiBTTVRQLCBQT1AzIGFuZCBJTUFQIHdvdWxkIHJldHVybgorICBDVVJMRV9MT0dJTl9ERU5JRUQgcmF0aGVyIHRoYW4gQ1VSTEVfVVNFX1NTTF9GQUlMRUQgd2hlbiBTU0wvVExTCisgIHdhcyBub3QgYXZhaWxhYmxlIG9uIHRoZSBzZXJ2ZXIuCisgIAorICBSZXBvcnRlZCBieTogR29raGFuIFNlbmd1bgorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMS8wMDE4Lmh0bWwKKworLSBjdXJsX2Vhc3lfc2V0b3B0OiByZWZlciB0byB0aGUgbW9zdCByZWNlbnQgVVJJIFJGQworCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDJmNGE0ODdhNjgKKyAgCisgIFR3byBidWdmaXhlcywgdHdvIG1vcmUgY29udHJpYnV0b3JzCisKKy0gdGVzdHM6IHRlc3QgSU1BUCwgUE9QMyBhbmQgU01UUCBvdmVyIEhUVFAgcHJveHkgdHVubmVsCisKKy0gdGVzdCBwcm94eSBzdXBwb3J0cyBDT05ORUNUCisgIAorICBUaGVyZSdzIGEgbmV3ICdodHRwLXByb3h5JyBzZXJ2ZXIgZm9yIHRlc3RzIHRoYXQgcnVucyBvbiBhIHNlcGFyYXRlIHBvcnQKKyAgYW5kIGxldHMgY2xpZW50cyBkbyBIVFRQIENPTk5FQ1QgdG8gb3RoZXIgcG9ydHMgb24gdGhlIHNhbWUgaG9zdCB0bworICBhbGxvdyB1cyB0byB0ZXN0IEhUVFAgInR1bm5lbGluZyIgcHJvcGVybHkuCisgIAorICBUZXN0IGNhc2VzIG5vdyBoYXZlIGEgPHByb3h5PiBzZWN0aW9uIGluIDx2ZXJpZnk+IHRvIGNoZWNrIHRoYXQgdGhlCisgIHByb3h5IHByb3RvY29sIHBhcnQgbWF0Y2hlcyBjb3JyZWN0bHkuCisgIAorICBUZXN0IGNhc2UgODAsIDgzLCA5NSwgMjc1LCA1MDMgYW5kIDEwNzggaGF2ZSBiZWVuIGNvbnZlcnRlZC4gVGVzdCAxMzE2CisgIHdhcyBhZGRlZC4KKworLSBjdXJsX2Vhc3lfc3RyZXJyb3IuMzogbWlub3Igc3lub3BzaXMgZWRpdCBvZiB0aGUgbG9vaworCitZYW5nIFRzZSAoMiBKYW4gMjAxMikKKy0gaG9zdGlwLmM6IGZpeCBwb3RlbnRpYWwgd3JpdGUgcGFzdCB0aGUgZW5kIG9mIHN0cmluZyBidWZmZXIKKworLSBob3N0aXAuYzogZml4IEN1cmxfbG9hZGhvc3RwYWlycygpIE9PTSBoYW5kbGluZworCistIHJ1bnRlc3RzLnBsOiBvbiB0ZXN0IGZhaWx1cmUsIGRvbid0IHNob3cgdHJhY2UgbG9nIGZpbGVzIG9mIG90aGVyIHRlc3RzCisKK0RhbmllbCBTdGVuYmVyZyAoMSBKYW4gMjAxMikKKy0gQ3VybF9pbnB1dF9uZWdvdGlhdGU6IHVzZSB0aGUgY29ycmVjdCBidWZmZXIgZm9yIGlucHV0CisgIAorICBVbmZvcnR1bmF0ZWx5IHdlIGhhdmUgbm8gdGVzdCBjYXNlcyBmb3IgdGhpcyBhbmQgSSBoYXZlIG5vIFNTUEkgYnVpbGQgb3IKKyAgc2VydmVyIHRvIHZlcmlmeSB0aGlzIHdpdGguIFRoZSBjaGFuZ2Ugc2VlbXMgc2ltcGxlIGVub3VnaCB0aG91Z2guCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0NjY0OTcKKyAgUmVwb3J0ZWQgYnk6IFBhdHJpY2UgR3VlcmluCisKKy0gcnVudGVzdHM6IHB1dCB0cmFjZSBvdXRwdXRzIGluIGxvZy90cmFjZVtudW1dIGZvciBhbGwgdGVzdHMKKworLSBqdXN0IGEgc3R1cGlkIHR5cG8KKworLSBTRlRQIGRpcjogaW5jcmVhc2UgYnVmZmVyIHNpemUgY291bnRlcgorICAKKyAgV2hlbiB0aGUgYnVmZmVyIGdldHMgcmVhbGxvY2VkIHRvIGhvbGQgdGhlIGZpbGUgbmFtZSBpbiB0aGUKKyAgU1NIX1NGVFBfUkVBRERJUl9MSU5LIHN0YXRlLCB0aGUgY291bnRlciB3YXMgbm90IGJ1bXBlZCBhY2NvcmRpbmdseS4KKyAgCisgIFJlcG9ydGVkIGJ5OiBBcm1lbCBBc3NlbGluCisgIFBhdGNoIGJ5OiBBcm1lbCBBc3NlbGluCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEyLzAyNDkuaHRtbAorCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDgxZWJkZDllMjg3CisgIAorICA2IG1vcmUgYnVnZml4ZXMsIDMgbW9yZSBjb250cmlidXRvcnMKKworLSBjcmVhdGVfaG9zdGNhY2hlX2lkOiB1c2UgdGhlIGtleSBsb3dlciBjYXNlZAorICAKKyAgLi4uIHRvIG1ha2Ugc3VyZSB0aGUgRE5TIGNhY2hlIGlzIHByb3Blcmx5IGNhc2UgaW5zZW5zaXRpdmUKKworLSBjaGFuZ2VkIGNhc2U6IHVzZSBuZXcgaG9zdCBuYW1lIGZvciBzdWJzZXF1ZW50IEhUVFAgcmVxdWVzdHMKKyAgCisgIFdoZW4gYSBIVFRQIGNvbm5lY3Rpb24gaXMgcmUtdXNlZCBmb3IgYSBzdWJzZXF1ZW50IHJlcXVlc3Qgd2l0aG91dAorICBwcm94eSwgaXQgd291bGQgYWx3YXlzIHJlLXVzZSB0aGUgSG9zdDogaGVhZGVyIG9mIHRoZSBmaXJzdCByZXF1ZXN0LiBBcworICBob3N0IG5hbWVzIGFyZSBjYXNlIGluc2Vuc2l0aXZlIGl0IHdvdWxkIG1ha2UgY3VybCBzZW5kIGFub3RoZXIgaG9zdAorICBuYW1lIGNhc2UgdGhhdCB3aGF0IHRoZSBwYXJ0aWN1bGFyIHJlcXVlc3QgdXNlZC4KKyAgCisgIE5vdyBpdCB3aWxsIGluc3RlYWQgYWx3YXlzIHVzZSB0aGUgbW9zdCByZWNlbnQgaG9zdCBuYW1lIHRvIGFsd2F5cyB1c2UKKyAgdGhlIGRlc2lyZWQgY2FzaW5nLgorICAKKyAgQWRkZWQgdGVzdCBjYXNlIDEzMTggdG8gdmVyaWZ5LgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMTIvMDMxNC5odG1sCisgIFJlcG9ydGVkIGJ5OiBBbGV4IFZpbm5paworCistIENVUkxPUFRfUkVTT0xWRTogYXZvaWQgYWRkaW5nIGFscmVhZHkgcHJlc2VudCBob3N0IG5hbWVzCisgIAorICBUaGUgbG9hZCBob3N0IG5hbWVzIHRvIEROUyBjYWNoZSBmdW5jdGlvbiB3YXMgbW92ZWQgdG8gaG9zdGlwLmMgYW5kIGl0CisgIG5vdyBtYWtlcyBzdXJlIHRvIG5vdCBhZGQgaG9zdCBuYW1lcyB0aGF0IGFscmVhZHkgYXJlIHByZXNlbnQgaW4gdGhlCisgIGNhY2hlLiBJdCB3b3VsZCBwcmV2aW91c2x5IGxlYWQgdG8gbWVtb3J5IGxlYWtzIHdoZW4gZm9yIGV4YW1wbGUgdXNpbmcKKyAgdGhlIC0tcmVzb2x2ZSBhbmQgbXVsdGlwbGUgVVJMcyBvbiB0aGUgY29tbWFuZCBsaW5lLgorCitEYW4gRmFuZHJpY2ggKDMxIERlYyAyMDExKQorLSBydW50ZXN0cy5wbDogVXNlIGxvZ21zZyBtb3JlIGNvbnNpc3RlbnRseQorCitEYW5pZWwgU3RlbmJlcmcgKDMwIERlYyAyMDExKQorLSBbQWxlc3NhbmRybyBHaGVkaW5pIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgZXhhbXBsZXM6IHVwZGF0ZSBSRUFETUUsIE1ha2VmaWxlLmluYyBhbmQgZ2l0aWdub3JlIHdpdGggcG9wM3MgZXhhbXBsZXMKKworLSBbQWxlc3NhbmRybyBHaGVkaW5pIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgZXhhbXBsZXM6IGFkZCBhIGNvdXBsZSBvZiBzaW1wbGUgcG9wM3MgZXhhbXBsZXMKKyAgCisgIFRoZXNlIGV4YW1wbGVzIHNob3cgaG93IHRvIGZldGNoIGEgc2luZ2xlIG1lc3NhZ2UgKFJFVFIgY29tbWFuZCkgYW5kIGhvdyB0bworICBsaXN0IGFsbCB0aGUgbWVzc2FnZXMgaW4gYSBnaXZlbiBtYWlsYm94IChMSVNUIGNvbW1hbmQpLCB3aXRoIGF1dGhlbnRpY2F0aW9uCisgIHZpYSBTU0wuCisgIAorICBUaGV5IHdlcmUgYm90aCBiYXNlZCBvbiB0aGUgaHR0cHMuYyBleGFtcGxlLgorCitZYW5nIFRzZSAoMzAgRGVjIDIwMTEpCistIHJlbW92ZWQgZXhlY3V0ZSBmaWxlIHBlcm1pc3Npb24KKworLSByZW1vdmVkIHRyYWlsaW5nIHdoaXRlc3BhY2UKKworLSBmdHBzZXJ2ZXIucGw6IGFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHNwbGl0dGluZyBhbW9uZyBUQ1AgcGFja2V0cyBbSUldCisgIAorICBUYWtlIGluIGFjY291bnQgdGhhdCAncGluZ3BvbmcnIHNlcnZlciBjb21tYW5kcyBtYXkgYXJyaXZlIHNwbGl0dGVkIGFtb25nCisgIHNldmVyYWwgc29ja2ZpbHQgJ0RBVEEnIFBEVSdzLgorCistIGZ0cHNlcnZlci5wbDogYXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgc3BsaXR0aW5nIGFtb25nIFRDUCBwYWNrZXRzIFtJXQorICAKKyAgSW5pdGlhbCBzdGVwIGluIG9yZGVyIHRvIGFsbG93IG91ciBwaW5ncG9uZyBzZXJ2ZXIgdG8gYmV0dGVyIHN1cHBvcnQgYXJiaXRyYXJ5CisgIGFwcGxpY2F0aW9uIGRhdGEgc3BsaXR0aW5nIGFtb25nIFRDUCBwYWNrZXRzLiBUaGlzIGZpcnN0IGNvbW1pdCBvbmx5IGFkZHJlc3NlcworICByZWFzZW1ibHkgb2YgZGF0YSB0aGF0IHNvY2tmaWx0ZXIgcHJvY2Vzc2VzIHJlYWRzIGZyb20gc29vY2tldHMgYW5kIHBpbmdwb25nCisgIHNlcnZlciBsYXRlciByZWFkcyBmcm9tIHNvY2tmaWx0ZXJzIHN0ZG91dC4KKworLSB0ZXN0Y3VybC5wbDogODJjMzQ0YTMgZm9sbG93LXVwCisKKy0gdGVzdGN1cmwucGw6IGxvZyBBQ0xPQ0FMX0ZMQUdTCisKKy0gdGVzdGN1cmwucGw6IHRoaXJkIHBhcnR5IG00IHdhcm5pbmdzIGZpbHRlcmluZyBhZGp1c3RtZW50CisgIAorICBNYWtlIHRlc3RjdXJsLnBsIGlnbm9yZSBtZXNzYWdlcyBwZXJ0YWluaW5nIHRvIHRoaXJkIHBhcnR5IG00IGZpbGVzIHdlIGRvbid0CisgIGNhcmUgbm9yIHVzZSBvbiBhIGZpbGUgYmFzaXMgcG9saWN5IHdoaWxlIHJldGFpbmluZyBhbGwgb3RoZXIgd2FybmluZ3MuCisgIAorICBUaGlzIGNsb3NlcyB0ZW1wb3JhcnkgY29tbWl0IGU3MWUyMjZmCisKK0thbWlsIER1ZGthICgyNSBEZWMgMjAxMSkKKy0gdHJhbnNmZXI6IGF2b2lkIHVubmVjZXNzYXJ5IHRpbWVvdXQgZXZlbnQgd2hlbiB3YWl0aW5nIGZvciAxMDAtY29udGludWUKKyAgCisgIFRoZSBjb21taXQgOWRkODViYyB1bmludGVudGlvbmFsbHkgY2hhbmdlZCB0aGUgd2F5IHdlIGNvbXB1dGUgdGhlIHRpbWUKKyAgc3BlbnQgd2FpdGluZyBmb3IgMTAwLWNvbnRpbnVlLiAgSW4gcGFydGljdWxhciwgd2hlbiB1c2luZyBhIFNTTCBjbGllbnQKKyAgY2VydGlmaWNhdGUsIHRoZSB0aW1lIHNwZW50IGJ5IFNTTCBoYW5kc2hha2Ugd2FzIGluY2x1ZGVkIGFuZCBjb3VsZAorICBjYXVzZSB0aGUgQ1VSTF9USU1FT1VUX0VYUEVDVF8xMDAgdGltZW91dCB0byBiZSBtaXN0YWtlbmx5IGZpcmVkIHVwLgorICAKKyAgQnVnOiBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vNzY3NDkwCisgIFJlcG9ydGVkIGJ5OiBNYW1vcnUgVGFzYWthCisKK1lhbmcgVHNlICgyNSBEZWMgMjAxMSkKKy0gdHJhbnNmZXIuYzogbW92ZSBhIGxvZ2dpbmcgc3RhdGVtZW50IHBsYWNlbWVudAorCistIGhhc2guYzogZml4IE9PTSB0cmlnZ2VyZWQgc2VnZmF1bHQKKworRGFuaWVsIFN0ZW5iZXJnICgyNCBEZWMgMjAxMSkKKy0gZnRwX2RvX21vcmU6IGRvbid0IHJldHVybiBzdWNjZXNzIHVudGlsIGFsbCBpcyBkb25lCisgIAorICBmdHBfZG9fbW9yZSgpIHJldHVybnMgYWZ0ZXIgYWNjZXB0aW5nIHRoZSBzZXJ2ZXIgY29ubmVjdCBob3dldmVyIGl0CisgIG5lZWRzIHRvIGZhbGwgdGhyb3VnaCBhbmQgc2V0ICIqY29tcGxldGUiIHRvIFRSVUUgYmVmb3JlIGV4aXQgZnJvbSB0aGUKKyAgZnVuY3Rpb24uCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMi8wMjUwLmh0bWwKKyAgUmVwb3J0ZWQgYnk6IEdva2hhbiBTZW5ndW4KKworLSBDdXJsX2RvX21vcmU6IGZpeCB0eXBvIGxvZ2ljCisgIAorICBJbiB0aGUgcmVjZW50IGRvX21vcmUgZml4IHRoZSBuZXcgbG9naWMgd2FzIG1pc3Rha2VubHkgY2hlY2tpbmcgdGhlCisgIHBvaW50ZXIgaW5zdGVhZCBvZiB3aGF0IGl0IHBvaW50cyB0by4KKyAgCisgIFJlcG9ydGVkIGJ5OiBHb2toYW4gU2VuZ3VuCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEyLzAyNTAuaHRtbAorCistIFNGVFAgbWtkaXI6IHVzZSBjb3JyZWN0IHBlcm1pc3Npb24KKyAgCisgIFdoZW4gc2VuZGluZyBxdW90ZSBjb21tYW5kIHRvIGEgU0ZUUCBzZXJ2ZXIgYW5kICdta2Rpcicgd2FzIHVzZWQsIGl0CisgIHdvdWxkIHNlbmQgZml4ZWQgcGVybWlzc2lvbnMgYW5kIG5vdCB1c2UgdGhlIENVUkxPUFRfTkVXX0RJUkVDVE9SWV9QRVJNUworICBhcyBpdCBzaG91bGQuCisgIAorICBSZXBvcnRlZCBieTogQXJtZWwKKyAgUGF0Y2ggYnk6IEFybWVsCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEyLzAyNDkuaHRtbAorCitZYW5nIFRzZSAoMjMgRGVjIDIwMTEpCistIGJ1aWxkY29uZjogbWlub3IgdHdlYWtzIGNvbW1pdCA0MzA1MjdhMSBmb2xsb3ctdXAKKworRGFuaWVsIFN0ZW5iZXJnICgyMyBEZWMgMjAxMSkKKy0gW0NvbGluIEhvZ2JlbiBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIFJlcXVpcmUgYSBsZXNzIGFuY2llbnQgdmVyc2lvbiBvZiBwZXJsCisgIAorICBUaGUgSU5URVJOQUxTIGRvY3VtZW50IHN1Z2dlc3RlZCB0aGF0IGNvbXBhdGliaWxpdHkgc2hvdWxkIGJlCisgIG1haW50YWluZWQgd2l0aCBwZXJsIHZlcnNpb24gNCwgYnV0IHRoaXMgd2FzIHVudHJ1ZSAtIHNjcmlwdHMgc3VjaCBhcworICBjaGtzb3VyY2UucGwgYW5kIHJ1bnRlc3RzLnBsIHVzZSBwZXJsNS1pc21zLgorCistIHJlc29sdmU6IGRvbid0IGxlYWsgcHJlLXBvcHVsYXRlZCBkbnMgZW50cmllcworICAKKyAgQ1VSTE9QVF9SRVNPTFZFIHBvcHVsYXRlcyB0aGUgRE5TIGNhY2hlIHdpdGggZW50cmllcyB0aGF0IGFyZSBtYXJrZWQgYXMKKyAgZXRlcm5hbGx5IGluIHVzZS4gVGhvc2UgZW50cmllcyBuZWVkIHRvIGJlIHRha2VuIGNhcmUgb2Ygd2hlbiB0aGUgY2FjaGUKKyAgaXMga2lsbGVkIG9mZi4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQ2MzEyMQorICBSZXBvcnRlZCBieTogInR3ODQ0NTI4NTIiCisKKy0gbmV3IHRlc3Q6IHZlcmlmeSAtLXJlc29sdmUKKyAgCisgIFRlc3QgMTMxNyB2ZXJpZmllcyAtLXJlc29sdmUgKGxlYWtlZCBtZW1vcnkpCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0NjMxMjEKKyAgUmVwb3J0ZWQgYnk6ICJ0dzg0NDUyODUyIgorCitZYW5nIFRzZSAoMjMgRGVjIDIwMTEpCistIHRlc3RjdXJsLnBsOiB0ZW1wb3JhcnkgY2hhbmdlCisgIAorICBBbGxvdyBhdXRvYnVpbGRzIHRvIHJ1biBhIGNvdXBsZSBvZiBkYXlzIHdpdGhvdXQgZmlsdGVyaW5nIG91dCBhY2xvY2FsCisgIHVuZGVycXVvdGVkIGRlZmluaXRpb24gd2FybmluZ3MuCisKK0RhbmllbCBTdGVuYmVyZyAoMjEgRGVjIDIwMTEpCistIG9wZXJhdGU6IHJlbW92ZWQgYSBzaW5nbGUgdHJhaWxpbmcgc3BhY2UKKworRGFuIEZhbmRyaWNoICgyMSBEZWMgMjAxMSkKKy0gLS1yZXRyeTogUmV0cnkgdHJhbnNmZXJzIG9uIHRpbWVvdXQgYW5kIEROUyBlcnJvcnMKKworWWFuZyBUc2UgKDIxIERlYyAyMDExKQorLSBidWlsZGNvbmY6IG1pbm9yIHR3ZWFrcworCistIGZvcm1kYXRhLmM6IE9PTSBoYW5kbGluZyBmaXhlcworCitEYW5pZWwgU3RlbmJlcmcgKDIxIERlYyAyMDExKQorLSBUT0RPOiAxLjcgSGFwcHkgRXllYmFsbCBkdWFsIHN0YWNrIGNvbm5lY3QKKworRGFuIEZhbmRyaWNoICgyMCBEZWMgMjAxMSkKKy0gcnVudGVzdHMucGw6IEZpeGVkIHBlcmwgd2FybmluZyB3aGVuIHVzaW5nIHRoZSAtbCBvcHRpb24KKworRGFuaWVsIFN0ZW5iZXJnICgyMCBEZWMgMjAxMSkKKy0gUkVMRUFTRS1OT1RFUzogYWRkZWQgdHdvIHJlZmVyZW5jZXMKKworLSBDdXJsX3NvY2tldF9jaGVjazogZW5sYXJnZSBwb2xsIHN0cnVjdCBhcnJheSB0byAzCisgIAorICBUaGlzIGZ1bmN0aW9uIHdhcyBpbnRyb2R1Y2VkIGluIGNvbW1pdCA1NTI3NDE3YWZhZTAgYW5kIGFzIHBvaW50ZWQgb3V0CisgIGJ5IEdva2hhbiBTZW5ndW4sIHRoZSBhcnJheSB3aXRoIHBvbGwgc3RydWN0cyBtdXN0IGxhcmdlIGVub3VnaCB0byBob2xkCisgIDMgc29ja2V0cyBzaW5jZSB0aGF0IGlzIHdoYXQgdGhlIGZ1bmN0aW9uIGNhbiBhY2NlcHQuIEl0IGNvdWxkIGJlIG5vdGVkCisgIHRoYXQgaGUgaGFkIHRoaXMgZml4ZWQgaW4gaGlzIHBhdGNoIGFzIHBvc3RlZCBpbgorICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMTIvMDE3OS5odG1sCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMi8wMjI4Lmh0bWwKKyAgUmVwb3J0ZWQgYnk6IEdva2hhbiBTZW5ndW4KKworLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCAzODBiYWRlNzc3CisgIAorICA1IG5ldyBidWdmaXhlcywgMiBuZXcgY2hhbmdlcyBhbmQgNCBuZXcgY29udHJpYnV0b3JzCisKKy0gVE9ETzogcmVtb3ZlIGFjdGl2ZSBGVFAgZnJvbSBzZWN0aW9uIDIuMQorICAKKyAgSXQgaXMgbm8gbG9uZ2VyIGRvbmUgYmxvY2tpbmcgaW4gdGhlIG11bHRpIGludGVyZmFjZQorCistIGxpYmN1cmwgZG9jczogYWRkIHRoZSBuZXcgRlRQIGFjY2VwdCBvcHRpb24gKyBlcnJvcnMKKworLSB0aW1lbGVmdF9hY2NlcHQ6IGFjayBnbG9iYWwgdGltZW91dCwgbW92ZWQgdG8gZnRwLmMKKyAgCisgIEZpcnN0IG9mZiB0aGUgdGltZW91dCBmb3IgYWNjZXB0aW5nIGEgc2VydmVyIGNvbm5lY3QgYmFjayBtdXN0IG9mIGNvdXJzZQorICByZXNwZWN0IGEgZ2xvYmFsIHRpbWVvdXQuIFRoZW4gdGhlIHRpbWVsZWZ0IGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBieSBmdHAKKyAgY29kZSBzbyBpdCB3YXMgbW92ZWQgdG8gZnRwLmMgYW5kIG1hZGUgc3RhdGljLgorCistIGxpYmN1cmwtdHV0b3JpYWwuMzogY3VybCBkb2Vzbid0IHNlbnQgcHJhZ21hIG5vLWNhY2hlCisgIAorICBJdCBkaWQgYSBsb25nIHRpbWUgYWdvCisKKy0gbGliY3VybC1tdWx0aS4zOiBhY3RpdmUgRlRQIGlzIG5vIGxvbmdlciBibG9ja2luZyEKKworLSBGVFA6IG1vdmUgRlRQLXNwZWNpZmljIHN0cnVjdCBmaWVsZCB0byBmdHBjX2Nvbm4KKyAgCisgICJ3YWl0X2RhdGFfY29ubiIgd2FzIGFkZGVkIHRvIHRoZSBjb25uZWN0aW9uYml0cyBpbiBjb21taXQgYzgzNDIxM2FkNSBmb3IKKyAgaGFuZGxpbmcgYWN0aXZlIEZUUCBjb25uZWN0aW9ucyBidXQgYXMgaXQgaXMgcHVyZWx5IEZUUCBzcGVjaWZpYyBhbmQgbm93CisgIG9ubHkgZXZlciBhY2Nlc3NlZCBieSBmdHAuYyBJIG1vdmVkIGl0IGludG8gdGhlIEZUUCBjb25uZWN0aW9uIHN0cnVjdC4KKworLSBub24tYmxvY2tpbmcgYWN0aXZlIEZUUDogY2xlYW51cCBtdWx0aSBzdGF0ZSB1c2FnZQorICAKKyAgQmFja3BlZGFsZWQgb3V0IHRoZSBmdW5ueSBkb3VibGUtY2hhbmdlIG9mIHN0YXRlIGluIHRoZSBtdWx0aSBzdGF0ZQorICBtYWNoaW5lIGJ5IGFkZGluZyBhIG5ldyBhcmd1bWVudCB0byB0aGUgZG9fbW9yZSgpIGZ1bmN0aW9uIHRvIHNpZ25hbAorICBjb21wbGV0aW9uLiBUaGlzIHdheSBpdCBjYW4gcmVtYWluIGluIHRoZSBET19NT1JFIHN0YXRlIHByb3Blcmx5IHVudGlsCisgIGRvbmUuIExvbmcgdGVybSwgdGhlIGVudGlyZSBET19NT1JFIGxvZ2ljIHNob3VsZCBiZSBtb3ZlZCBpbnRvIHRoZSBGVFAKKyAgY29kZSBhbmQgYmUgaGlkZGVuIGZyb20gdGhlIG11bHRpIGNvZGUgYXMgdGhlIGxvZ2ljIGlzIG9ubHkgdXNlZCBmb3IKKyAgRlRQLgorCistIFtHb2toYW4gU2VuZ3VuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgRlRQOiBwZXJmb3JtIGFjdGl2ZSBjb25uZWN0aW9ucyBub24tYmxvY2tpbmcKKyAgCisgIDEtIFR3byBuZXcgZXJyb3IgY29kZXMgYXJlIGludHJvZHVjZWQuCisgIAorICBDVVJMRV9GVFBfQUNDRVBUX0ZBSUxFRCB0byBiZSBzZXQgd2hlbmV2ZXIgQUNDRVBUaW5nIGZhaWxzIGJlY2F1c2Ugb2YKKyAgRlRQIHNlcnZlciBjb25uZWN0ZWQuCisgIAorICBDVVJMRV9GVFBfQUNDRVBUX1RJTUVPVVQgdG8gYmUgc2V0IHdoZW5ldmVyIEFDQ0VQVGluZyB0aW1lb3V0cy4KKyAgCisgIE5laXRoZXIgb2YgdGhlc2UgZXJyb3JzIGFyZSBjb25zaWRlcmVkIGZhdGFsIGFuZCBjb250cm9sIGNvbm5lY3Rpb24KKyAgcmVtYWlucyBPSyBiZWNhdXNlIGl0IGNvdWxkIGp1c3QgYmUgYSBmaXJld2FsbCBibG9ja2luZyBzZXJ2ZXIgdG8KKyAgY29ubmVjdCB0byB0aGUgY2xpZW50LgorICAKKyAgMi0gT25lIG5ldyBzZXRvcHQgb3B0aW9uIHdhcyBpbnRyb2R1Y2VkLgorICAKKyAgQ1VSTE9QVF9BQ0NFUFRUSU1FT1VUX01TCisgIAorICBJdCBzZXRzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIEZUUCBjbGllbnQgaXMgZ29pbmcgdG8gd2FpdCBmb3IgYQorICBzZXJ2ZXIgdG8gY29ubmVjdC4gSW50ZXJuYWwgZGVmYXVsdCBhY2NlcHQgdGltZW91dCBpcyA2MCBzZWNvbmRzLgorCistIHNvY2tldHM6IG5ldyBDdXJsX3NvY2tldF9jaGVjaygpIGNhbiB3YWl0IGZvciAzIHNvY2tldHMKKyAgCisgIFRoaXMgb2ZmZXJzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBleGlzdGluZyBDdXJsX3NvY2tldF9yZWFkeSgpIEFQSSB3aGljaAorICBvbmx5IGNoZWNrcyBvbmUgc29ja2V0IGZvciByZWFkIGFuZCBvbmUgZm9yIHdyaXRlLgorCistIFtDZcyBZHJpYyBEZWx0aGVpbCBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGN1cmwuaDogYWRkIF9fQU5EUk9JRF9fIG1hY3JvIGNoZWNrCisgIAorICBXaGVuIHdvcmtpbmcgd2l0aCB0aGUgQW5kcm9pZCBTdGFuZGFsb25lIFRvb2xjaGFpbiB0aGUgY29tcGlsZXIgZGVmaW5lcworICB0aGlzIG1hY3JvOgorICAKKyAgICAvcGF0aC90by9hcm0tbGludXgtYW5kcm9pZGVhYmktZ2NjIC1FIC1kTSAtIDwgL2Rldi9udWxsIFwKKyAgICB8IGdyZXAgLWkgYW5kcm9pZAorICAgICNkZWZpbmUgX19BTkRST0lEX18gMQorICAKKyAgV2UgcmVhbGx5IG5lZWQgdG8gY2hlY2sgYm90aCBBTkRST0lEIGFuZCBfX0FORFJPSURfXyBzaW5jZSBJJ3ZlIG9ic2VydmVkCisgIHRoYXQ6CisgIAorICAqIGlmIHlvdSB1c2UgQW5kcm9pZC5tayBmaWxlKHMpIGFuZCB0aGUgJ25kay1idWlsZCcgc2NyaXB0IChha2EgdmFuaWxsYQorICB3YXkpLCBBTkRST0lEIGlzIHByZWRlZmluZWQgKHNlZSAtREFORFJPSUQgZXh0cmEgQyBmbGFnKSwKKyAgCisgICogaWYgeW91IHVzZSB0aGUgQW5kcm9pZCBTdGFuZGFsb25lIFRvb2xjaGFpbiwgdGhlbiBfX0FORFJPSURfXyBpcworICBwcmVkZWZpbmVkIGFzIHN0YXRlZCBieSB0aGUgY29tcGlsZXIKKworLSBsaWI1MDA6IHZlcmlmeSB0aW1lcnMgcmVsYXRpdmUgZWFjaCBvdGhlcgorICAKKyAgQXMgY29tbWl0IGNlODk2ODc1ZjggZml4ZWQgYSB0aW1lciB0aGF0IGFjY2lkZW50YWxseSBoYWQgYmVlbiBtb3ZlZCBpbgorICBjb2RlIGFuZCB0aGVuIHJldHVybmVkIGEgYmFkIHRpbWVyLCB0aGUgbGliNTAwLmMgY29kZSAodXNlZCBpbiB0ZXN0IDUwMAorICBhbmQgc29tZSBvdGhlcnMpIG5vdyB2ZXJpZmllcyA1IHRpbWVycyBhZ2FpbnN0IGVhY2ggb3RoZXIgdG8gdmVyaWZ5IHRoYXQKKyAgdGhleSBoYXZlIHRoZSBjb3JyZWN0IHJlbGF0aXZlIHZhbHVlcy4gV2UgY2Fubm90IGNvbXBhcmUgYWdhaW5zdAorICBhYnNvbHV0ZSB2YWx1ZXMgYXMgdGhlIHRpbWluZ3Mgd2lsbCB2YXJ5IGEgbG90LgorCistIEN1cmxfcGdyc1RpbWU6IHN0b3JlIG5vdyBpbiBhbiBhdXRvIHZhcmlhYmxlCisgIAorICBJdCBtYWtlcyBpdCBlYXNpZXIgdG8gaW50cm9kdWNlIGRlYnVnIG91dHB1dHMgaW4gdGhpcyBmdW5jdGlvbiwgYW5kCisgIGV2ZXJ5dGhpbmcgaW4gdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSB2YWx1ZSBhbnl3YXkgc28gaXQgbWlnaHQgZXZlbiBiZQorICBtb3JlIGVmZmljaWVudC4KKworLSB0aW1lcjogcmVzdG9yZSBQUkVUUkFOU0ZFUiB0aW1pbmcKKyAgCisgIFJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiA3LjIzLjAgd2l0aCBjb21taXQgOWRkODViY2UuIFRoZSBmdW5jdGlvbiBpbgorICB3aGljaCB0aGUgUFJFVFJBTlNGRVIgdGltZSBzdGFtcCB3YXMgcmVjb3JkZWQgd2FzIG1vdmVkIGluIHRpbWUgY2F1c2luZworICBpdCBiZSBzdG9yZWQgdmVyeSBxdWlja2x5IGFmdGVyIHRoZSBzdGFydCB0aW1lc3RhbXAuIE9uIG1vc3Qgc3lzdGVtcworICBzaG9ydGVyIHRoYW4gMSBtaWxsaXNlY29uZCBhbmQgdGh1cyBpdCB3b3VsZG4ndCBldmVuIHNob3cgd2l0aCAtdworICAiJXt0aW1lX3ByZXRyYW5zZmVyfSIgdXNpbmcgdGhlIGNvbW1hbmQgbGluZSB0b29sLgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvYXJjaGl2ZS0yMDExLTEyLzAwMjIuaHRtbAorICBSZXBvcnRlZCBieTogVG9uaSBNb3Jlbm8KKworLSBbQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgbGliY3VybC5tNDogRml4IHF1b3RpbmcgYXJndW1lbnRzIG9mIEFDX0xBTkdfUFJPR1JBTQorICAKKyAgUGFyYW1ldGVycyB3ZXJlIHVuZGVycXVvdGVkLCByZXN1bHRpbmcgaW4KKyAgd2FybmluZzogQUNfTEFOR19DT05GVEVTVDogbm8gQUNfTEFOR19TT1VSQ0UgY2FsbCBkZXRlY3RlZCBpbiBib2R5CisgIAorICBTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgPHJlcC5kb3Qubm9wQGdtYWlsLmNvbT4KKworLSBnaXRpZ25vcmU6IGlnbm9yZSB0aGUgc3ltYm9sIHZlcnNpb25pbmcgZmlsZQorCistIHR1dG9yaWFsOiByZW1vdmUgQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNIGFkZCBzaGFyaW5nCisgIAorICBUaGUgQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNIHJlZmVyZW5jZSBpcyBhbiBvbGQgbGVmdG92ZXIgSSBoYWQgdG8KKyAgcmVtb3ZlLgorICAKKyAgSSBhbHNvIGFkZGVkIHNvbWUgYmx1cmIgdG8gdGhlIHByZXZpb3VzbHkgYmxhbmsgInNoYXJpbmciIHNlY3Rpb24uCisKKy0gW0FsZXNzYW5kcm8gR2hlZGluaSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGNvbmZpZ3VyZTogYWRkIHN5bWJvbHMgdmVyc2lvbmluZyBvcHRpb24KKyAgCisgIEFsbG93LCBhdCBjb25maWd1cmUgdGltZSwgdGhlIHByb2R1Y3Rpb24gb2YgdmVyc2lvbmVkIHN5bWJvbHMuIFRoZQorICBzeW1ib2xzIHdpbGwgbG9vayBsaWtlICJDVVJMXzxGTEFWT1VSPl88VkVSU0lPTj4gPFNZTUJPTD4iLCB3aGVyZQorICA8RkxBVk9VUj4gcmVwcmVzZW50cyB0aGUgU1NMIGZsYXZvdXIgKGUuZy4gT1BFTlNTTCwgR05VVExTLCBOU1MsIC4uLiksCisgIDxWRVJTSU9OPiBpcyB0aGUgbWFqb3IgU09OQU1FIHZlcnNpb24gYW5kIDxTWU1CT0w+IGlzIHRoZSBhY3R1YWwgc3ltYm9sCisgIG5hbWUuIElmIG5vIFNTTCBsaWJyYXJ5IGlzIGVuYWJsZWQgdGhlIHN5bWJvbHMgd2lsbCBiZSBqdXN0CisgICJDVVJMXzxWRVJTSU9OPiA8U1lNQk9MPiIuCisKKy0gW1N2ZW4gV2VnZW5lciBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIFVzZSBDdXJsX3NzbF9jb25uZWN0IGZvciBub24tYmxvY2tpbmcgY29ubmVjdCBmYWxsYmFjaworICAKKyAgVGhpcyBnZXRzIHRoZSBhcHBjb25uZWN0IHRpbWUgcmlnaHQgZm9yIHNzbCBiYWNrZW5kcywgd2hpY2ggZG9uJ3QKKyAgc3VwcG9ydCBub24tYmxvY2tpbmcgY29ubmVjdHMuCisgIAorICBTaWduZWQtb2ZmLWJ5OiBTdmVuIFdlZ2VuZXIgPHN2ZW4ud2VnZW5lckBzdGVhbGVyLm5ldD4KKworLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCBhZjliYzE2MDRjMQorICAKKyAgT25lIG5ldyBmZWF0dXJlLCBvbmUgYnVnIGZpeC4gSW50cm9kdWNlZCByZWZlcmVuY2VzIGluIHRoaXMgZmlsZSBmb3IKKyAgbWVudGlvbmVkIGlzc3VlcyBhZnRlciB0aGlzIGRpc2N1c3Npb246CisgIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMi8wMTg3Lmh0bWwKKyAgCisgIFRoZSBwbGFuIGlzIHRvIGxldCB0aGUgcmVmZXJlbmNlcyBnZXQgbW92ZWQgb3ZlciB0byB0aGUgY2hhbmdlcy5odG1sCisgIGZpbGUgYXQgcmVsZWFzZS10aW1lCisKKy0gY3VybC4xOiBtaW5vciB3aGl0ZSBzcGFjZSBjbGVhbnVwCisKKy0gW0FsZXNzYW5kcm8gR2hlZGluaSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGRvY3M6IGltcHJvdmUgZGVzY3JpcHRpb24gb2YgdGhlIC0tY2FwYXRoIG9wdGlvbgorICAKKyAgRG9jdW1lbnQgdGhlIHBvc3NpYmlsaXR5IG9mIHByb3ZpZGluZyBtdWx0aXBsZSB2YWx1ZXMgdXNpbmcgdGhlICI6IgorICBzZXBhcmF0b3IsIGFuZCB0aGUgZmFjdCB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgaWdub3JlZCBpZiB0aGUKKyAgb3B0aW9uIGlzIHVzZWQuCisKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgRE9DUzogQWRkZWQgU01UUCBpbmZvcm1hdGlvbiB0byBDVVJMT1BUX0lORklMRVNJWkUKKworLSBDdXJsX3Byb3h5Q09OTkVDVDogdXNlIG5ld2xpbmVzIGluIGRlYnVnIG91dHB1dAorCistIGN1cmwgLUY6IGZpeCBtdWx0aXBsZSBmaWxlIHVwbG9hZCB3aXRoIGN1c3RvbSB0eXBlCisgIAorICBUZXN0IGNhc2UgMTMxNSB3YXMgYWRkZWQgdG8gdmVyaWZ5IHRoaXMgZnVuY3Rpb25hbGl0eS4gV2hlbiBwYXNzaW5nIGluCisgIG11bHRpcGxlIGZpbGVzIHRvIGEgc2luZ2xlIC1GLCB0aGUgcGFyc2VyIHdvdWxkIGdldCBhbGwgY29uZnVzZWQgaWYgb25lCisgIG9mIHRoZSBzcGVjaWZpZWQgZmlsZXMgaGFkIGEgY3VzdG9tIHR5cGU9IGFzc2lnbmVkLgorICAKKyAgUmVwb3J0ZWQgYnk6IENvbGluIEhvZ2JlbgorCistIFtDb2xpbiBIb2diZW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBOZXcgdGVzdCBmb3IgbXVsdGlwbGUgZmlsZSB1cGxvYWQKKyAgCisgIHRlc3QgMTMxNSBjaGVja3MgY29ycmVjdCBiZWhhdmlvdXIgd2hlbiB1cGxvYWRpbmcgbXVsdGlwbGUgZmlsZXMuCisgIEJ1Z2d5IGJlaGF2aW91ciBoYXMgYmVlbiBzZWVuIHdoZXJlIG9ubHkgdHdvIGF0dGFjaG1lbnRzIGFyZSBzZW50LgorCitZYW5nIFRzZSAoMTUgRGVjIDIwMTEpCistIGNvbmZpZ3VyZTogbGlidG9vbCAxLjUgdHdlYWtzCisKK0RhbmllbCBTdGVuYmVyZyAoMTUgRGVjIDIwMTEpCistIFtDb2xpbiBIb2diZW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBDb3JyZWN0IHN1YnN0aXR1dGlvbiB2YXIgbmFtZXMKKyAgCisgIFR3byB2YXJpYWJsZSBuYW1lcyB3ZXJlIHdyb25nIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCistIFtDb2xpbiBIb2diZW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBDb3JyZWN0IGRlZmF1bHQgdXBsb2FkIG1pbWV0eXBlIGluIG1hbnVhbAorICAKKyAgVGhlIGRlZmF1bHQgY29udGVudC10eXBlIGZvciBmaWxlIHVwbG9hZHMgaXMgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtLAorICBub3QgdGV4dC9wbGFpbiBhcyBzdGF0ZWQgaW4gdGhlIE1BTlVBTC4KKworLSBbQWxlc3NhbmRybyBHaGVkaW5pIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgZG9jczogZml4IHR5cG8gaW4gY3VybF9lYXN5X3NldG9wdCBtYW5wYWdlCisKK1lhbmcgVHNlICgxMyBEZWMgMjAxMSkKKy0gaWYyaXAuW2NoXTogZml4IGNvbXBpbGF0aW9uIHdpdGggTWluR1cKKyAgCisgIEF2b2lkICdpbnRlcmZhY2UnIGxpdGVyYWwgdGhhdCBzb21lIE1pbkdXIHZlcnNpb25zIGRlZmluZSBhcyBhIG1hY3JvCisKKy0gY29ubmVjdC5jOiBmaXggY29tcGlsZXIgd2FybmluZyAnZW51bWVyYXRlZCB0eXBlIGlzIG1peGVkIHdpdGggYW5vdGhlciB0eXBlJworCistIGlmMmlwLmM6IGZpeCBjb21waWxlciB3YXJuaW5nICd1bnVzZWQgcGFyYW1ldGVyJworCistIHBvcDMuYzogZml4IGNvbXBpbGVyIHdhcm5pbmcgdmFyaWFibGUgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZAorCistIGlmMmlwLmM6IGZpeCBjb21waWxlciB3YXJuaW5nICdlbnVtZXJhdGVkIHR5cGUgaXMgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUnCisKK0RhbmllbCBTdGVuYmVyZyAoMTIgRGVjIDIwMTEpCistIFtKYXNvbiBHbGFzZ293IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgQ1VSTE9QVF9JTlRFUkZBQ0U6IGF2b2lkIHJlc29sdmluZyBpbnRlcmZhY2VzIG5hbWVzCisgIAorICBEbyBub3QgdHJ5IHRvIHJlc29sdmUgaW50ZXJmYWNlcyBuYW1lcyB2aWEgRE5TIGJ5IHJlY29nbml6aW5nIGludGVyZmFjZQorICBuYW1lcyBpbiBhIGZldyB3YXlzLiAgSWYgdGhlIGludGVyZmFjZSBvcHRpb24gYXJndW1lbnQgaGFzIGEgcHJlZml4IG9mCisgICJpZiEiIHRoZW4gdHJlYXQgdGhlIGFyZ3VtZW50IGFzIG9ubHkgYW4gaW50ZXJmYWNlLiAgU2ltaWxhcmx5LCBpZiB0aGUKKyAgaW50ZXJmYWNlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIGFuIGludGVyZmFjZSAoZXZlbiBpZiBpdCBkb2VzIG5vdCBoYXZlCisgIGFuIElQIGFkZHJlc3MgYXNzaWduZWQpLCB0cmVhdCBpdCBhcyBhbiBpbnRlcmZhY2UgbmFtZS4gIEZpbmFsbHksIGlmIHRoZQorICBpbnRlcmZhY2UgYXJndW1lbnQgaXMgcHJlZml4ZWQgYnkgImhvc3QhIiB0cmVhdCBpdCBhcyBhIGhvc3RuYW1lIHRoYXQKKyAgbXVzdCBiZSByZXNvbHZlZCBieSAvZXRjL2hvc3RzIG9yIEROUy4KKyAgCisgIFRoZXNlIGNoYW5nZXMgYWxsb3cgYSBjbGllbnQgdXNpbmcgdGhlIG11bHRpIGludGVyZmFjZXMgdG8gYXZvaWQKKyAgYmxvY2tpbmcgb24gbmFtZSByZXNvbHV0aW9uIGlmIHRoZSBpbnRlcmZhY2UgbG9zZXMgaXRzIElQIGFkZHJlc3Mgb3IKKyAgZGlzYXBwZWFycy4KKworLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCAxMjU5Y2NmNzQ3NAorICAKKyAgNSBtb3JlIGJ1Z2ZpeGVzLCA1IG1vcmUgY29udHJpYnV0b3JzCisKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgQ29ubmVjdGlvbkV4aXN0czogRml4IHJldXNlIGZvciBUTFMgdXBncmFkZWQgY29ubmVjdGlvbnMKKyAgCisgIEZpeGVkIHRoZSBjb25uZWN0aW9uIHJldXNlIGRldGVjdGlvbiBpbiBDb25uZWN0aW9uRXhpc3RzKCkgd2hlbgorICBjb21wYXJpbmcgYSBuZXcgY29ubmVjdGlvbiB0aGF0IGlzIG5vbi1TU0wgYmFzZWQgYWdhaW5zdCB0aGF0IG9mIGEgU1NMCisgIGJhc2VkIGNvbm5lY3Rpb24gdGhhdCBoYXMgYmVjb21lIHNvIGJ5IGJlaW5nIHVwZ3JhZGVkIHZpYSBUTFMuCisKKy0gY3JlYXRlX2Nvbm46IGRvbid0IHN3aXRjaCB0byBIVFRQIHByb3RvY29sIGlmIHR1bm5lbGluZyBpcyBlbmFibGVkCisgIAorICBUaGlzIGlzIGEgcmVncmVzc2lvbiBzaW5jZSB3aG8ga25vd3Mgd2hlbi4gV2hlbiBzcG90dGluZyB0aGF0IGEgSFRUUAorICBwcm94eSBpcyB1c2VkIHdlIG11c3Qgbm90IHVuY29uZGl0aXRpb25hbGx5IGVuYWJsZSB0aGUgSFRUUCBwcm90b2NvbAorICBzaW5jZSBpZiB3ZSBkbyB0dW5uZWxpbmcgdGhyb3VnaCB0aGUgcHJveHkgd2UncmUgc3RpbGwgdXNpbmcgdGhlIHRhcmdldAorICBwcm90b2NvbC4KKyAgCisgIFJlcG9ydGVkIGJ5OiBOYXZlZW4gQ2hhbmRyYW4KKworLSBGQVE6IGFkZCAtLXJlc29sdmUgZGV0YWlscyB0byBxdWVzdGlvbiAzLjE5CisKKy0gW0dva2hhbiBTZW5ndW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBDdXJsX2Nsb3Nlc29ja2V0OiBjbGVhciBzb2NrX2FjY2VwdGVkIG9uIGNsb3NlCisgIAorICBBcyBhIGZvbGxvdy11cCBmcm9tIGNvbW1pdCBkNWI1ZjY0YmNlM2E4LCBjbGVhciB0aGUgc29ja19hY2NlcHRlZCBzdGF0dXMKKyAgd2hlbiBzdWNoIGEgc29ja2V0IGlzIGNsb3NlZCB0byBhdm9pZCBhIHJlLXVzZWQgY29ubmVjdGlvbiB0byByZXRhaW4gdGhlCisgIHN0YXRlIHdyb25nbHkuCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMi8wMDc5Lmh0bWwKKworLSBzdGF0aWMgU1NMIHdpbmRvd3MgYnVpbGRzOiBhZGQgbW9yZSBsaWJzIHRvIHRoZSBsaW5rCisgIAorICBTdGFydGluZyB3aXRoIHNvbWUgcmVjZW50IE9wZW5TU0wgdmVyc2lvbnMgKDEuMC4wZSB3YXMgbWVudGlvbmVkKQorICBsaW5raW5nIHdpdGggYSBzdGF0aWMgb3BlbnNzbCByZXF1aXJlcyBhIHNldCBvZiBtb3JlIGxpYnMgdG8gYmUgbGlua2VkCisgIG9uIFdpbmRvd3MuCisgIAorICBUaGFua3MgYWxzbyB0byBTdGV2ZSBIb2xtZSBhbmQgTWFydGluIFN0b3JzavYgZm9yIGFkZGl0aW9uYWwgZmVlZGJhY2suCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMi8wMDYzLmh0bWwKKyAgUmVwb3J0ZWQgYnk6IFdhcmQgV2lsbGF0cworCistIFtHb2toYW4gU2VuZ3VuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgbXVsdGkgaW50ZXJmYWNlOiBmaXggYmxvY2sgd2hlbiBDT05ORUNUX09OTFkgb3B0aW9uIGlzIHVzZWQKKworRGFuIEZhbmRyaWNoICg2IERlYyAyMDExKQorLSBBZGRlZCBzb21lIGluY2x1ZGUgZmlsZXMgaW4gYSBjb3VwbGUgb2YgZXhhbXBsZSBwcm9ncmFtcworICAKKyAgVGhpcyBpbXByb3ZlcyBwb3J0YWJpbGl0eSBvZiB0aGUgZXhhbXBsZXMuICBUaGlzIHBhdGNoIHdhcworICBzdWJtaXR0ZWQgdG8gdGhlIE9wZW5CU0QgcG9ydHMgY29sbGVjdGlvbiBieSBuYWRkeS4KKworRGFuaWVsIFN0ZW5iZXJnICg2IERlYyAyMDExKQorLSBNYWtlZmlsZUJ1aWxkOiBmaXggdGhlIHN0YXRpYyBidWlsZAorICAKKyAgVGhpcyBpcyBhIGxlZnQtb3ZlciBmaXggZnJvbSBjb21taXQgYjdlMjQyZGUwZSB0aGF0IFRvbSBXcmlnaHQKKyAgc3VnZ2VzdGVkLgorICAKKyAgUmVwb3J0ZWQgYnk6IFdhcmQgV2lsbGF0cworCistIE9wZW5TU0w6IGNoZWNrIGZvciB0aGUgU1NMdjIgZnVuY3Rpb24gaW4gY29uZmlndXJlCisgIAorICBJZiBubyBTU0x2MiB3YXMgZGV0ZWN0ZWQgaW4gT3BlblNTTCBieSBjb25maWd1cmUsIHRoZW4gd2UgZW5mb3JjZSB0aGUKKyAgT1BFTlNTTF9OT19TU0wyIGRlZmluZSBhcyBpdCBzZWVtcyBzb21lIHBlb3BsZSByZXBvcnQgaXQgbm90IGJlaW5nCisgIGRlZmluZWQgcHJvcGVybHkgaW4gdGhlIE9wZW5TU0wgaGVhZGVycy4KKworLSBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VUOiBkZWZhdWx0IGlzIDMwMCBzZWNvbmRzCisgIAorICBJZiB0aGUgb3B0aW9uIGlzIHNldCB0byAwLCB0aGUgZGVmYXVsdCB0aW1lb3V0IHdpbGwgYmUgdXNlZCAtIHdoaWNoIGluCisgIG1vZGVybiBsaWJjdXJsIHZlcnNpb25zIGVxdWFscyAzMDAgc2Vjb25kcyAoPT0gNSBtaW51dGVzKS4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEyLzAwNTEuaHRtbAorICBSZXBvcnRlZCBieTogVmxhZGltaXIgR3Jpc2hjaGVua28KKworLSBbUm9iIFdhcmQgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBwcm9ncmVzcyBmdW5jdGlvbiBleGFtcGxlOiBpbmNsdWRlIHRpbWVkIGludGVydmFsCisgIAorICBBZGRzIGEgdGltZXIgYmFzZWQgb2ZmIG9mIENVUkxJTkZPX1RPVEFMX1RJTUUgdGhhdCBpcyB1c2VkIHRvIHBlcmZvcm0KKyAgY2VydGFpbiBhY3Rpb25zIGFmdGVyIGEgbWluaW11bSBhbW91bnQgb2YgdGltZSBoYXMgcGFzc2VkIHVzaW5nIHRoZQorICBwcm9ncmVzcyBmdW5jdGlvbi4gQXMgYSBjb25zZXF1ZW5jZSB0aGUgY3VybCBoYW5kbGUgaXMgbm93IGFsc28gcGFzc2VkCisgIGludG8gdGhlIHByb2dyZXNzIGZ1bmN0aW9uLiBQcm9ncmVzcyBleGFtcGxlIG5vdyBhbHNvIGluY2x1ZGVzIGFuCisgIGV4YW1wbGUgb2YgaG93IHRvIHJldHJlaXZlIHRoZSBUT1RBTF9USU1FIGFuZCBwcmludCBpdCBvdXQuCisKKy0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggMzQ3Zjk1MWMzOTAKKyAgCisgIDggbW9yZSBidWdzLCA1IG1vcmUgY29udHJpYnV0b3JzCisKKy0gU1NIOiBmaXggQ1VSTE9QVF9TU0hfSE9TVF9QVUJMSUNfS0VZX01ENQorICAKKyAgV2hlbiBhIDMyIGRpZ2l0IGhleCBrZXkgaXMgZ2l2ZW4gYXMgYSBob3N0a2V5IG1kNSBjaGVja3N1bSwgdGhlIGNvZGUKKyAgd291bGQgc3RpbGwgcnVuIGl0IGFnYWluc3QgdGhlIGtub3duaG9zdCBjaGVjayBhbmQgbm90IHByb3Blcmx5CisgIGFja25vd2xlZGdlIHRoYXQgdGhlIG1kNSBzaG91bGQgdGhlbiBiZSB0aGUgc29sZSBndWlkZSBmb3IuCisgIAorICBUaGUgdmVyYm9zZSBvdXRwdXQgbm93IGluY2x1ZGVzIHRoZSBldmFsdWF0ZWQgTUQ1IGhvc3RrZXkgY2hlY2tzdW0uCisgIAorICBTb21lIHJlbGF0ZWQgc291cmNlIGNvZGUgY29tbWVudHMgd2VyZSBhbHNvIHVwZGF0ZWQuCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0NTE1OTIKKyAgUmVwb3J0ZWQgYnk6IFJlemEgQXJiYWIKKworLSBDdXJsX3Jlc29sdmVyX2lzX3Jlc29sdmVkOiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaG9zdC9wcm94eSBlcnJvcnMKKyAgCisgIEFzIHRoZXJlIGFyZSBkaWZmZXJlbnQgcmV0dXJuIGNvZGVzIGZvciBob3N0IHZzIHByb3h5IGVycm9ycywgdGhpcyBmdW5jdGlvbgorICBub3cgcHJvcGVybHkgcmV0dXJucyB0aGUgY29kZSBwcm9wZXJseSBkZXBlbmRpbmcgb24gd2hhdCB3YXMgYXR0ZW1wdGVkIHRvIGdldAorICByZXNvbHZlZC4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2FyY2hpdmUtMjAxMS0xMi8wMDEwLmh0bWwKKyAgUmVwb3J0ZWQgYnk6IEphc29uIExpdQorCistIGMtYXJlczogcmV0dXJuIHByb3h5IGZhaWx1cmUgZm9yIGFsbCBwcm94eSB0eXBlcworICAKKyAgV2hlbiBtYWtpbmcgYSBkaXN0aW5jdGlvbiB3aGljaCByZXR1cm4gY29kZSB0byByZXR1cm4sIHRoZSBjb2RlIHByZXZpb3VzbHkKKyAgb25seSByZWdhcmRlZCBIVFRQIHByb3hpZXMgdG8gYmUgcHJveGllcyBhbmQgdGh1cyByZXR1cm4gaG9zdC1yZWxhdGVkIGVycm9ycworICBmb3IgZmFpbHVyZXMgb24gb3RoZXIgcHJveHkgdHlwZXMgdGhhbiBIVFRQLiBOb3cgYWxsIHByb3h5IHR5cGVzIHdpbGwgYmUKKyAgY29uc2lkZXJlZCBwcm94aWVzLi4uCisKKy0gRlRQOiBjbG9zZSBjYWxsYmFjayBmaXgKKyAgCisgIEtlZXAgdHJhY2sgb2Ygd2hpY2ggc29ja2V0cyB0aGF0IGFyZSB0aGUgcmVzdWx0IG9mIGFjY2VwdCgpIGNhbGxzIGFuZAorICByZWZ1c2UgdG8gY2FsbCB0aGUgY2xvc2Vzb2NrZXQgY2FsbGJhY2sgZm9yIHRob3NlIHNvY2tldHMuIFRlc3QgY2FzZSA1OTYKKyAgbm93IHZlcmlmaWVzIHRoYXQgdGhlIG9wZW4gc29ja2V0IGNhbGxiYWNrIGlzIGNhbGxlZCB0aGUgc2FtZSBudW1iZXIgb2YKKyAgdGltZXMgYXMgdGhlIGNsb3NlZCBzb2NrZXQgY2FsbGJhY2sgZm9yIGFjdGl2ZSBGVFAgY29ubmVjdGlvbnMuCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMi8wMDE4Lmh0bWwKKyAgUmVwb3J0ZWQgYnk6IEdva2hhbiBTZW5ndW4KKworLSBGVFA6IGNhbGwgb3BlbnNvY2tldCBjYWxsYmFjayBwcm9wZXJseQorICAKKyAgV2hlbiB0aGUgbmV3IHNvY2tldCBpcyBjcmVhdGVkIGZvciBhbiBhY3RpdmUgY29ubmVjdGlvbiwgaXQgaXMgbm93IGRvbmUKKyAgdXNpbmcgdGhlIG9wZW4gc29ja2V0IGNhbGxiYWNrLgorICAKKyAgVGVzdCBjYXNlIDU5NiB3YXMgbW9kaWZpZWQgdG8gcnVuIGZpbmUsIGFsdGhvdWdoIGl0IGhpZGVzIHRoZSBmYWN0IHRoYXQKKyAgdGhlIGNsb3NlIGNhbGxiYWNrIGlzIHN0aWxsIGNhbGxlZCB0b28gbWFueSB0aW1lcywgYXMgaXQgYWxzbyBnZXRzCisgIGNhbGxlZCBmb3IgY2xvc2luZyBzb2NrZXRzIHRoYXQgd2VyZSBjcmVhdGVkIHdpdGggYWNjZXB0KCkuCisKKy0gQ3VybF9zb2NrZXQ6IGludGVybmFsIHJlcGxhY2VtZW50IGZvciBzb2NrZXQoKQorICAKKyAgTW92ZWQgb3V0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byB3b3JrIGFzIGEgImdlbmVyaWMiIHNvY2tldCgpCisgIHJlcGxhY2VtZW50LgorCistIHRlc3Q6IHZlcmlmeSB0aGUgb3BlbnNvY2tldCBjYWxsYmFjayBmb3IgRlRQCisgIAorICB0ZXN0IDU5NTogZm9yIHBhc3NpdmUgRlRQCisgIHRlc3QgNTk2OiBmb3IgYWN0aXZlIEZUUAorCistIFtKYXNvbiBHbGFzZ293IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgQ1VSTE9QVF9ETlNfU0VSVkVSUzogc2V0IG5hbWUgc2VydmVycyBpZiBwb3NzaWJsZSAoZml4KQorICAKKyAgRW5zdXJlIHRoYXQgQ1VSTEVfT0sgaXMgcmV0dXJuZWQgaWYgc2V0dGluZyB0aGUgbmFtZSBzZXJ2ZXJzIGlzIHN1Y2Nlc3NmdWxsLgorCistIG11bHRpIGludGVyZmFjZTogb25seSB1c2Ugbm9uLU5VTEwgZnVuY3Rpb24gcG9pbnRlciEKKyAgCisgIElmIHRoZSBzb2NrZXQgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciBoYXNuJ3QgYmVlbiBzZXQsIHdlIG11c3Qgbm90CisgIGF0dGVtcHQgdG8gdXNlIGl0LiBDb21taXQgYWRjODhjYTIwIG1hZGUgaXQgbW9yZSBsaWtlbHkgdG8gb2NjdXIuCisKKy0gW0phc29uIEdsYXNnb3cgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBtdWx0aTogaGFuZGxlIHRpbWVvdXRzIG9uIEROUyBzZXJ2ZXJzIGJ5IGNoZWNraW5nIGZvciBuZXcgc29ja2V0cworICAKKyAgSWYgdGhlIGZpcnN0IG5hbWUgc2VydmVyIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBtdWx0aSBpbnRlcmZhY2UgZG9lcworICBub3QgaW52b2tlIHRoZSBzb2NrZXRfY2Igd2hlbiB0aGUgRE5TIHJlcXVlc3QgdG8gdGhlIGZpcnN0IG5hbWUgc2VydmVyCisgIHRpbWVzb3V0LiAgRW5zdXJlIHRoYXQgdGhlIGxpc3Qgb2Ygc29ja2V0cyBhcmUgYWx3YXlzIHVwZGF0ZWQgYWZ0ZXIKKyAgY2FsbGluZyBDdXJsX3Jlc29sdmVyX2lzX3Jlc29sdmVkLgorICAKKyAgVGhpcyBidWcgY2FuIGJlIHJlcHJvZHVjZWQgaWYgQ3VybCBpcyBjb21wbGllZCB3aXRoIC0tZW5hYmxlX2FyZXMgYW5kCisgIHlvdXIgY29kZSB1c2VzIHRoZSBtdWx0aSBzb2NrZXQgaW50ZXJmYWNlcyBhbmQgdGhlCisgIENVUkxNT1BUX1NPQ0tFVEZVTkNUSU9OIG9wdGlvbi4gIFRvIHRlc3QgdHJ5OgorICAgIGlwdGFibGVzIC1JIElOUFVUIFwKKyAgICAgICAgICAgICAtcyAkKHNlZCAtbiAtZSAnL25hbWUve3MvLiogLy9wO3F9JyAvZXRjL3Jlc29sdi5jb25mKS8zMiBcCisgICAgICAgICAgICAgLWogUkVKRUNUCisgIGFuZCB0aGVuIHJ1biBhIHByb2dyYW0gd2hpY2ggdXNlcyB0aGUgbXVsdGktaW50ZXJmYWNlLgorCistIHRlc3QgODE1OiB2ZXJpZnkgUE9QMyBkb3QtZmlyc3Qtb24tbGluZSB1bmVzY2FwaW5nCisKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgUE9QMzogZml4ZWQgZXNjYXBlZCBkb3Qgbm90IGJlaW5nIHN0cmlwZWQgb3V0CisgIAorICBDaGFuZ2VkIHRoZSBlb2IgZGV0ZWN0aW9uIHRvIHdvcmsgYWNyb3NzIHRoZSB3aG9sZSBvZiB0aGUgYnVmZmVyIHNvIHRoYXQKKyAgbGluZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90ICh3aGljaCB0aGUgc2VydmVyIHdpbGwgaGF2ZSBlc2NhcGVkKSBhcmUKKyAgcGFzc2VkIHRvIHRoZSBjbGllbnQgYXBwbGljYXRpb24gY29ycmVjdGx5LgorCitZYW5nIFRzZSAoMzAgTm92IDIwMTEpCistIGJ1aWxkY29uZjogZm9sbG93LXVwIGZvciBjb21taXQgN2UwMmY3ZmQKKworLSBidWlsZGNvbmY6IGZpeCBsaWJ0b29sIDEuNS54IHdhcm5pbmdzIHRyaWdnZXJlZCB3aXRoIGF1dG9jb25mIDIuNnggb3IgbGF0ZXIKKyAgCisgIFVzaW5nIGxpYnRvb2wgMS41LnggKHggPCAyNikgd2l0aCBhdXRvY29uZiAyLjZ4IG9yIGxhdGVyIGdlbmVyYXRlcyB3YXJuaW5ncworICBkdWUgdG8gc29tZSBsaWJ0b29sIHZhcmlhYmxlcyBub3QgZm9sbG93aW5nIG5hbWluZyBjb252ZW50aW9uIGZvciB2YXJpYWJsZXMKKyAgdGhhdCB3aWxsIGJlIGNhY2hlZC4KKyAgCisgIFRoaXMgaXMgYWRkcmVzc2VkIHJlbmFtaW5nIGEgY291cGxlIG9mIHZhcmlhYmxlcyB0byBtYWtlIHRoZXNlIGZvbGxvdyBleHBlY3RlZAorICBuYW1pbmcgY29udmVudGlvbi4KKworRGFuaWVsIFN0ZW5iZXJnICgzMCBOb3YgMjAxMSkKKy0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggMTAzOGQwYWExCisgIAorICA1IGJ1Z2ZpeGVzIGFuZCAxIG5ldyBjb250cmlidXRvcgorCitZYW5nIFRzZSAoMjkgTm92IDIwMTEpCistIHBvcDMuYzogZml4IGNvbXBpbGVyIHdhcm5pbmcKKworLSBjb25maWd1cmU6IGF2b2lkIHVzYWdlIG9mIG1hY3JvIFBLR19DSEVDS19NT0RVTEVTCisgIAorICBsaWJpZG4gb3B0aW9uIGFkanVzdGVkIGluIG9yZGVyIHRvIHVzZSBwa2ctY29uZmlnIGluZm8gd2hlbiBhdmFpbGFibGUKKyAgaW4gYSBzaW1pbGFyIHdheSBhcyB3ZSBhbHJlYWR5IGRvIGZvciBvdGhlciBsaWJyYXJpZXMuCisKK0RhbmllbCBTdGVuYmVyZyAoMjkgTm92IDIwMTEpCistIFBPUDM6IGRldGVjdCB3aGVuIExJU1QgcmV0dXJucyBubyBtYWlscworICAKKyAgQnkgbWFraW5nIHN1cmUgdGhlIGZ1bmN0aW9uIGNhbiBkZXRlY3QgYW4gImVuZCBvZiBib2R5IiBzZXF1ZW5jZQorICBpbW1lZGlhdGVseSBvbiB0aGUgZmlyc3QgbGluZSwgdGVzdCA4MTEgaXMgbm93IGVuYWJsZWQuCisKKy0gZnRwc2VydmVyOiBvdXRwdXQgQ1JMRiBpbiBsb2dzCisgIAorICBQcmV2aW91c2x5IHRoZSBsb2cgZnVuY3Rpb24gd291bGQganVzdCBmaWx0ZXIgb3V0IGFsbCBDUiBhbmQgTEYKKyAgb2NjdXJhbmNlcyBmcm9tIHRoZSBsb2cgdG8gbWFrZSBpdCBtb3JlIHJlYWRhYmxlLiBUaGlzIGhhZCB0aGUgZG93bnNpZGUKKyAgdGhhdCBpdCBtYWRlIGl0IHZlcnkgaGFyZCB0byBzZWUgQ1IgTEZzIHdoZW4gdGhleSBhY3R1YWxseSBtYXR0ZXJzLgorICAKKyAgTm93LCB0aGV5J3JlIGluc3RlYWQgY29udmVydGVkIHRvICJbQ1JdIiBhbmQgIltMUl0iIGluIHRoZSBsb2cgdG8gYmVjb21lCisgIGFwcGFyZW50IHRvIHJlYWRlcnMuCisKKy0gUE9QMzogZml4IGVuZCBvZiBib2R5IGRldGVjdGlvbgorICAKKyAgQ3VybF9wb3AzX3dyaXRlKCkgbm93IGhhcyBhIHN0YXRlIG1hY2hpbmUgdGhhdCBzY2FucyBmb3IgdGhlIGVuZCBvZiBhCisgIFBPUDMgYm9keSBzbyB0aGF0IHRoZSBDUiBMRiAnLicgQ1IgTEYgc2VxdWVuY2UgY2FuIGNvbWUgaW4gZXZlcnl0aGluZworICBmcm9tIG9uZSB1cCB0byBmaXZlIHN1YnNlcXVlbnQgcGFja2V0cy4KKyAgCisgIFRlc3QgY2FzZSA4MTAgaXMgbW9kaWZpZWQgdG8gdXNlIFNMT1dET1dOIHdoaWNoIG1ha2VzIHRoZSBzZXJ2ZXIgcGF1c2UKKyAgYmV0d2VlbiBlYWNoIHNpbmdsZSBieXRlIGFuZCB0aHVzIG1ha2VzIHRoZSBQT1AzIGJvZHkgZ2V0IHNlbnQgdG8gY3VybAorICBiYXNpY2FsbHkgb25lIGJ5dGUgYXQgYSB0aW1lLgorCistIHRlc3Q6IGFkZGVkIFBPUDMgdGVzdCB3aXRoIGRvdC1wcmVmaXhlZCBsaW5lCisgIAorICBUZXN0IDgxNSBpcyBkaXNhYmxlZCBmb3Igbm93IHNpbmNlIGxpYmN1cmwgY3VycmVudGx5IGRvZXNuJ3QgdW5lc2NhcGUKKyAgc3VjaCBsaW5lcyB0aGUgd2F5IGl0IHNob3VsZC4gU2VlIG1haWw6CisgIAorICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMTEvMDMyNC5odG1sCisKKy0gY29uZmlndXJlOiBmaXggdG8gbWFrZSBvbGRlciBwa2ctY29uZmlnIHBsYXkgd2VsbAorICAKKyAgY29uZmlndXJlLmFjOjEzNDk6IGVycm9yOiBwb3NzaWJseSB1bmRlZmluZWQgbWFjcm86IFBLR19DT05GSUdfTElCRElSCisgIAorICBPYnZpb3VzbHkgdGhpcyBpcyBub3QgYSBwcm9ibGVtIHdpdGggcGtnLWNvbmZpZyAwLjI2IGJ1dCBvbGRlciB2ZXJzaW9ucworICBzZWVtIHRvIHNob3cgdGhpcy4KKyAgCisgIEZpeCBzdWdnZXN0ZWQgYnk6IEthbWlsIER1ZGthCisgIFJlcG9ydGVkIGJ5OiBHdWVudGVyCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTExLzAyOTguaHRtbAorCistIHRlc3QgMTIxMTogRlRQIHRlc3QgdG8gcmVwZWF0IGJ1ZyAjMzQyOTI5OQorICAKKyAgIkFjdGl2ZSBGVFAgaGFuZ3MgaWYgc2VydmVyIGRvZXMgbm90IG9wZW4gZGF0YSBjb25uZWN0aW9uIgorICAKKyAgVGhlIHNlcnZlciBmaXJzdCBzZW5kcyBhIDE1MCBhbmQgdGhlbiB3aGVuIGxpYmN1cmwgd2FpdHMgZm9yIHRoZSBkYXRhCisgIHRyYW5zZmVyLCB0aGUgc2VydmVyIHNlbmRzIGEgNDI1LgorCistIFtNYXJrIEJyYW5kIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgY29uZmlndXJlOiBhZGQgc3VwcG9ydCBmb3IgcGtnLWNvbmZpZyBkZXRlY3Rpb24gb2YgbGliaWRuCisKKy0gRlRQIHRlc3RzIDEyMDYgLSAxMjA5OiBkb24ndCBleHBlY3QgUVVJVAorICAKKyAgVGhlIHByb3RvY29sIHBhcnRzIGZvciB0aGVzZSB0ZXN0cyBkbyBub3QgaW5jbHVkZSBRVUlUIHNpbXBseSBiZWNhdXNlCisgIHRoZSBlcnJvciBpcyBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQgKDI4KSB3aGljaCBpcyBhIGdlbmVyaWMgdGltZW91dAorICBlcnJvciB3aXRob3V0IHNwZWNpZmljbHkgc2F5aW5nIGZvciB3aGljaCBjb25uZWN0aW9uIGl0IGNvbmNlcm5zLCBhbmQKKyAgZm9yIHRpbWVvdXRzIGxpYmN1cmwgbWFya3MgdGhlIGNvbnRyb2wgY2hhbm5lbCBhcyAiaW52YWxpZCIuIEFzIHRoaXMKKyAgdGVzdCBjYXNlIHRpbWVzIG91dCBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbiBpdCBjb3VsZCBzdGlsbCB1c2UgdGhlCisgIGNvbnRyb2wgY2hhbm5lbC4KKworWWFuZyBUc2UgKDI1IE5vdiAyMDExKQorLSBDeWFTU0wgMi4wKyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uIGFkanVzdG1lbnQKKworRGFuaWVsIFN0ZW5iZXJnICgyNSBOb3YgMjAxMSkKKy0gW0pvbmFzIFNjaG5lbGxpIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgcmVjdGlmeSBjb21tZW50CisKKy0gU1NMU0VTU0lPTl9TSEFSRUQ6IG5ldyBtYWNybyB0byBjaGVjayBpZiBzZXNzaW9uIGlzIHNoYXJlZAorICAKKyAgQWRkZWQgY29udmVuaWVuY2UgbWFjcm8gdG8gdXNlIHRvIGNoZWNrIGlmIGEgaGFuZGxlIGlzIHVzaW5nIGEgc2hhcmVkCisgIFNTTCBzZXNzaW9uLCBhbmQgZml4ZWQgc28gdGhhdCBDdXJsX3NzbF9jbG9zZV9hbGwoKSBkb2Vzbid0IGxvY2sgd2hlbgorICB0aGUgc2Vzc2lvbiBpc24ndCBzaGFyZWQuCisKK1lhbmcgVHNlICgyNSBOb3YgMjAxMSkKKy0gdGVsbmV0LmM6IGZpeCBNU1ZDIGNvbXBpbGVyIHdhcm5pbmcKKworLSB0dmRpZmZfc2VjcygpOiBzdWItemVybyB0aW1lIGRpZmZlcmVuY2UgYWRqdXN0bWVudAorICAKKyAgU2tpcCBhIGZsb2F0aW5nIHBvaW50IGFkZGl0aW9uIG9wZXJhdGlvbiB3aGVuIGludGVncmFsIHBhcnQgb2YgdGltZSBkaWZmZXJlbmNlCisgIGlzIHplcm8uIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBmbG9hdGluZyBwb2ludCBhZGRpdGlvbiByb3VuZGluZyBwcm9ibGVtcyB3aGlsZQorICBwcmVzZXJ2aW5nIGRlY2ltYWwgcGFydCB2YWx1ZS4KKworRGFuaWVsIFN0ZW5iZXJnICgyNSBOb3YgMjAxMSkKKy0gdGVsbmV0OiBmaXggbWFjcm9zIHRvIGFsbG93IHByb3BlciBzZW1pY29sb24gdXNlCisgIAorICBNYWNyb3MgdGhhdCBsb29rIGxpa2UgZnVuY3Rpb24gY2FsbHMgbmVlZCB0byBiZSBtYWRlIHNvIHRoYXQgd2UgY2FuIHVzZQorICBzZW1pY29sb25zIHByb3Blcmx5IGZvciBpbmRlbnRhdGlvbiBhbmQgZm9yIHJlZHVjaW5nIHRoZSByaXNrIGZvcgorICBtaXN0YWtlcyB3aGVuIHVzaW5nIHRoZW0uCisKKy0gW0xhdXJlbnQgUmFicmV0IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgVEVMTkVUOiBpbXByb3ZlZCB0cmVhdG1lbnQgb2Ygb3B0aW9ucworICAKKyAgMSkgZW5hYmxlcyB0aGUgV2luZG93IFNpemUgb3B0aW9uCisgIDIpIGFsbG93cyB0aGUgc2VydmVyIHRvIGVuYWJsZSB0aGUgZWNobyBtb2RlCisgIDMpIGFsbG93cyBhbiBhcHAgdXNpbmcgbGliY3VybCB0byBkaXNhYmxlIHRoZSBkZWZhdWx0IGJpbmFyeSBtb2RlCisgIAorICBTaWduZWQtb2ZmLWJ5OiBMYXVyZW50IFJhYnJldAorCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDJjOTA1ZmQxZjgyCisKKy0gW0pvbmFzIFNjaG5lbGxpIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgcXVlcnktcGFydDogaWdub3JlIHRoZSBVUkkgcGFydCBmb3IgZ2l2ZW4gcHJvdG9jb2xzCisgIAorICBCeSBzZXR0aW5nIFBST1RPUFRfTk9VUkxRVUVSWSBpbiB0aGUgcHJvdG9jb2wgaGFuZGxlciBzdHJ1Y3QsIHRoZQorICBwcm90b2NvbCB3aWxsIGdldCB0aGUgInF1ZXJ5IHBhcnQiIG9mIHRoZSBVUkwgY3V0IG9mZiBiZWZvcmUgdGhlIGRhdGEgaXMKKyAgaGFuZGxlZCBieSB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgY29kZS4gVGhpcyBtYWtlcyBsaWJjdXJsIGFkaGVyZSB0bworICBSRkMzOTg2IHNlY3Rpb24gMi4yLgorICAKKyAgVGVzdCAxMjIwIGlzIGFkZGVkIHRvIHZlcmlmeSBhIGZpbGU6Ly8gVVJMIHdpdGggcXVlcnktcGFydC4KKworLSBzeW1ib2xzLnBsOiBwcm92aWRlIExJQkNVUkxfSEFTIG1hY3JvIGZvciBhcHBzCisgIAorICBFeHBlcmllbmNlIGhhcyBzaG93biB0aGF0IHRoZSBzeW1ib2xzLWluLXZlcnNpb25zIGZpbGUgaXMgdmVyeSB1c2VmdWwgdG8KKyAgYXBwbGljYXRpb25zIHRoYXQgd2FudCB0byBidWlsZCB3aXRoIGEgd2lkZSByYW5nZSBvZiBsaWJjdXJsIHZlcnNpb25zLgorICBJdCBpcyBob3dldmVyIGVhc3kgdG8gZ2V0IGl0IHdyb25nIGFuZCB0aGUgc291cmNlIGdldHMgYSBiaXQgbWVzc3kgd2l0aAorICBhbGwgdGhlIGZpeGVkIG51bWVyaWNhbCBjb21wYXJpc2lvbnMuCisgIAorICBUaGUgcG9pbnQgb2YgdGhpcyBzY3JpcHQgaXMgdG8gcHJvdmlkZSBhbiBlYXN5LXRvLXVzZSBtYWNybyBmb3IgbGliY3VybC0KKyAgdXNpbmcgYXBwbGljYXRpb25zIHRvIGRvIHByZXByb2Nlc3NvciBjaGVja3MgZm9yIHNwZWNpZmljIGxpYmN1cmwKKyAgZGVmaW5lcywgYW5kIHlldCBtYWtlIHRoZSBjb2RlIGNsZWFybHkgc2hvdyB3aGF0IHRoZSBtYWNybyBpcyB1c2VkIGZvci4KKworWWFuZyBUc2UgKDI0IE5vdiAyMDExKQorLSBsaWI1NzMuYzogZml4IGRvdWJsZSBkYXRhIHR5cGUgdmFyaWFibGUgY29tcGFyaXNvbiB3aXRoIHplcm8KKworLSBnZXRpbmZvLmM6IHJlc2V0IGFwcCBjb25uZWN0IHRpbWUgd2hlbiBjbGVhcmluZyBzZXNzaW9uLWluZm8gdGltZSB2YXJpYWJsZXMKKworLSBGaXggdW5yZWxlYXNlZCByZWdyZXNzaW9uIHdoZW4gdXNpbmcgd2luZG93cyBnbnV0bHMgdmVyc2lvbnMgb2xkZXIgdGhhbiAyLjgKKworRGFuaWVsIFN0ZW5iZXJnICgyMyBOb3YgMjAxMSkKKy0gW01hcmsgQnJhbmQgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBnbnV0bHM6IG9ubHkgdHJhbnNsYXRlIHdpbnNvY2sgZXJyb3JzIGZvciBvbGQgdmVyc2lvbnMKKyAgCisgIEJ1Z2ZpeDogaHR0cHMgaGFuZHNoYWtlIGZhaWxzIHVzaW5nIGdudXRscyAzIG9uIHdpbmRvd3MKKyAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyL2luZGV4LnBocD9mdW5jPWRldGFpbCZhaWQ9MzQ0MTA4NCZncm91cF9pZD05NzYmYXRpZD0xMDA5NzYKKyAgCisgIE5ldyBnbnV0bHMgdmVyc2lvbnMgaGF2ZSBhbiBlcnJvciBoYW5kbGVyIHRoYXQga25vd3MgYWJvdXQgV2luc29jaworICBlcnJvcnMsIHdoaWNoIGlzIHdoeSBnbnV0bHNfdHJhbnNwb3J0X3NldF9nbG9iYWxfZXJybm8oKSB3YXMgZGVwcmVjYXRlZAorICBhbmQgdGhlbiByZW1vdmVkLgorICAKKyAgVGhpcyBpcyBhIGNvcnJlY3Rpb24gb2YgY29tbWl0IGY1YmIzNzAgKGJsYW1lIG1lKSB3aGljaCBtZWFudCB0bworICByZWltcGxlbWVudCBnbnV0bHNfdHJhbnNwb3J0X3NldF9nbG9iYWxfZXJybm8oKSwgd2hpY2ggaXMgbm90IG5lY2Vzc2FyeS4KKworLSBwcm90b2NvbF9jb25uZWN0OiBzaG93IHZlcmJvc2UgY29ubmVjdCBhbmQgc2V0IGNvbm5lY3QgdGltZQorICAKKyAgUmVncmVzc2lvbjogY29tbWl0IGI5OThkOTViIChzaGlwcGVkIGZpcnN0IGluIHJlbGVhc2UgNy4yMi4wKSBtYWRlIHRoZQorICBjb25kaXRpb24gYWx3YXlzIGVxdWFsIGZhbHNlIHRoYXQgc2hvdWxkIHJlc2V0IHRoZSBUSU1FUl9DT05ORUNUIHRpbWVyCisgIGFuZCBjYWxsIHRoZSBDdXJsX3ZlcmJvc2Vjb25uZWN0KCkgZnVuY3Rpb24uCisgIAorICBSZXBvcnRlZCBieTogIkNhcHRhaW4gQmFzaWwiCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2FyY2hpdmUtMjAxMS0xMS8wMDM1Lmh0bWwKKworLSAtSiAtTzogdXNlIC1PIG5hbWUgaWYgbm8gQ29udGVudC1EaXNwb3NpdGlvbiBoZWFkZXIgY29tZXMhCisgIAorICBBIHJlZ3Jlc3Npb24gYmV0d2VlbiA3LjIyLjAgYW5kIDcuMjMuMCAtLSBkb3dubG9hZGluZyBhIGZpbGUgd2l0aCB0aGUKKyAgZmxhZ3MgLU8gYW5kIC1KIHJlc3VsdHMgaW4gdGhlIGNvbnRlbnQgYmVpbmcgd3JpdHRlbiB0byBzdGRvdXQgaWYgYW5kCisgIG9ubHkgaWYgdGhlcmUgd2FzIG5vIENvbnRlbnQtRGlzcG9zaXRpb24gaGVhZGVyIGluIHRoZSBodHRwIHJlc3BvbnNlLiBJZgorICB0aGVyZSBpcyBhIEMtRCBoZWFkZXIgd2l0aCBhIGZpbGVuYW1lIGF0dHJpYnV0ZSwgdGhlIG91dHB1dCBpcyBjb3JyZWN0bHkKKyAgd3JpdHRlbi4KKyAgCisgIFJlcG9ydGVkIGJ5OiBEYXZlIFJlaXNuZXIKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvYXJjaGl2ZS0yMDExLTExLzAwMzAuaHRtbAorCistIFtNYXJ0aW4gU3RvcnNqbyBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIEFkZCBzdXBwb3J0IGZvciB1c2luZyBuZXR0bGUgaW5zdGVhZCBvZiBnY3J5cHQgYXMgZ251dGxzIGJhY2tlbmQKKworLSBbSm9uYXMgU2NobmVsbGkgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICB0ZXN0OiBTRlRQIHF1b3RlIGNvbW1hbmRzIHdpdGggKiBwcmVmaXgKKyAgCisgIFJlbGF0ZWQgdG8gdGhlIGY2NDgxMmNhNjMgY29tbWl0CisKKy0gQ1VSTE9QVF9RVU9URTogU0ZUUCBzdXBwb3J0cyB0aGUgJyonLXByZWZpeCBub3cKKworLSBbSm9uYXMgU2NobmVsbGkgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBTRlRQOiBzdXBwb3J0ICcqJyBwcmVmaXggZm9yIHF1b3RlIG9wZXJhdGlvbnMKKyAgCisgIHByZWZpeGluZyBhIGNvbW1hbmQgd2l0aCAnKicgbWVhbnMgaXQgaXMgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQKKyAgYWJvcnRpbmcgdGhlIGNoYWluIGFjdGlvbnMKKworLSBnZXRzZXNzaW9uaWQ6IGRvbid0IGV2ZXIgcmV0dXJuIHdoaWxlIGxvY2tlZAorICAKKyAgQWxzbywgY2hlY2sgZm9yIHRoZSBzZXNzaW9uIHNoYXJpbmcgYml0IGluc3RlYWQgb2YgY29tcGFyaW5nIHBvaW50ZXJzCisKKy0gQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkOiBpbmNyZWFzZSB0aGUgdmFsdWUsIG5vdCB0aGUgcG9pbnRlcgorCistIFRIQU5LUzogb25lIG5ldyBjb250cmlidXRvciBpbiA3LjIzLjEKKworLSBbQWxlamFuZHJvIEFsdmFyZXogQXlsbG9uIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgU1NMIHNlc3Npb24gc2hhcmU6IG1vdmUgdGhlIGFnZSBjb3VudGVyIHRvIHRoZSBzaGFyZSBvYmplY3QKKyAgCisgIFByZXZpb3VzbHkgdGhlIGFnZSBjb3VudGVyIHdvdWxkIGJlIGNvdW50ZWQgaW5kaXZpZHVhbGx5IGluIGVhY2ggZWFzeQorICBoYW5kbGUgdGhhdCBzaGFyZWQgU1NMIHNlc3Npb25zIQorCistIFtBbGVqYW5kcm8gQWx2YXJleiBBeWxsb24gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBsaWJ0ZXN0IGJ1aWxkOiBhZGQgdGhlIG1pc3NpbmcgbGliNTg2CisKKy0gW0phc29uIEdsYXNnb3cgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBDVVJMT1BUX0ROU19TRVJWRVJTOiBzZXQgbmFtZSBzZXJ2ZXJzIGlmIHBvc3NpYmxlCisKKy0gUkVMRUFTRS1OT1RFUzogY29ycmVjdCB0aGUgcmVsZWFzZSBhbmQgY29udHJpYnV0b3IgbnVtYmVycworCitWZXJzaW9uIDcuMjMuMSAoMTcgTm92IDIwMTEpCisKK0RhbmllbCBTdGVuYmVyZyAoMTcgTm92IDIwMTEpCistIEZpbmRXaW4zMkNBQ2VydDogcmV0dXJuIE9LIGV2ZW4gaWYgQ0EgY2VydCBpc24ndCBmb3VuZAorCitWZXJzaW9uIDcuMjMuMSAoMTcgTm92IDIwMTEpCisgIAorCitWZXJzaW9uIDcuMjMuMSAoMTcgTm92IDIwMTEpCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTExLzAxODAuaHRtbAorCitWZXJzaW9uIDcuMjMuMSAoMTcgTm92IDIwMTEpCisgIFJlcG9ydGVkIGJ5OiBNYXJrIEJyYW5kCisKK0RhbiBGYW5kcmljaCAoMTYgTm92IDIwMTEpCistIGN1cmwgaGFzIGJlZW4gYnVpbHQgb24gbWFueSBBbmRyb2lkIHZlcnNpb25zCisKK0RhbmllbCBTdGVuYmVyZyAoMTUgTm92IDIwMTEpCistIDcuMjQuMDogc3RhcnQgdGhlIHdvcmsKKworLSBUSEFOS1M6IGFkZGVkIDE4IG5ldyBjb250cmlidXRvcnMgZnJvbSA3LjIzLjAKKworVmVyc2lvbiA3LjIzLjAgKDE0IE5vdiAyMDExKQorCitEYW4gRmFuZHJpY2ggKDE0IE5vdiAyMDExKQorLSBjdXJsX2Vhc3lfc2V0b3B0IGFyZ3VtZW50cyBzaG91bGQgYmUgb2YgdHlwZSBsb25nIGluIHRoZSBleGFtcGxlcworCitEYW5pZWwgU3RlbmJlcmcgKDEyIE5vdiAyMDExKQorLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCAxMDEyMGU2YQorICAKKyAgb25lIG1vcmUgYnVnIGZpeCBhbmQgY29udHJpYnV0b3IKKworLSBwcm9ncmVzc19jYjogYXZvaWQgYnVmZmVyIG92ZXJmbG93CisgIAorICBUaGUgcHJvZ3Jlc3MgYmFyIG91dHB1dCBmdW5jdGlvbiB3b3VsZCBibGluZGx5IHVzZSB0aGUgdGVybWluYWwgd2lkdGgKKyAgd2l0aG91dCBib3VuZHMgY2hlY2tpbmcuIFdoZW4gdXNpbmcgYSB2ZXJ5IHdpZGUgdGVybWluYWwgdGhhdCBjYXVzZWQgYQorICBidWZmZXIgb3ZlcmZsb3cgYW5kIHNlZ2ZhdWx0LgorICAKKyAgV2Ugbm93IGxpbWl0IHRoZSBtYXggYmFyIHdpdGggdG8gMjU1IGNvbHVtbnMsIGFuZCBJIHNpbXBsaWZpZWQgdGhlIGNvZGUKKyAgdG8gYXZvaWQgYW4gZXh0cmEgc25wcmludGYgYW5kIGJ1ZmZlci4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQzNTcxMAorICBSZXBvcnRlZCBieTogQWxleGV5IFpha2hsZXN0aW4KKworWWFuZyBUc2UgKDExIE5vdiAyMDExKQorLSBBY3RpdmUgbW9kZSBGVFAgdGVzdCBjYXNlcyB3aXRoIHNlcnZlciBub3QgZXN0YWJsaXNoaW5nIGRhdGEgY29ubmVjdGlvbgorICAKKyAgNTkxIC0+IEZUUCBtdWx0aSBQT1JUIGFuZCA0MjUgb24gdXBsb2FkCisgIDU5MiAtPiBGVFAgbXVsdGkgUE9SVCBhbmQgNDIxIG9uIHVwbG9hZAorICA1OTMgLT4gRlRQIG11bHRpIFBPUlQgdXBsb2FkLCBubyBkYXRhIGNvbm4gYW5kIG5vIHRyYW5zaWVudCBuZWcuIHJlcGx5CisgIDU5NCAtPiBGVFAgbXVsdGkgUE9SVCB1cGxvYWQsIG5vIGRhdGEgY29ubiBhbmQgbm8gcG9zaXRpdmUgcHJlbGltLiByZXBseQorICAKKyAgMTIwNiAtPiBGVFAgUE9SVCBhbmQgNDI1IG9uIGRvd25sb2FkCisgIDEyMDcgLT4gRlRQIFBPUlQgYW5kIDQyMSBvbiBkb3dubG9hZAorICAxMjA4IC0+IEZUUCBQT1JUIGRvd25sb2FkLCBubyBkYXRhIGNvbm4gYW5kIG5vIHRyYW5zaWVudCBuZWdhdGl2ZSByZXBseQorICAxMjA5IC0+IEZUUCBQT1JUIGRvd25sb2FkLCBubyBkYXRhIGNvbm4gYW5kIG5vIHBvc2l0aXZlIHByZWxpbWluYXJ5IHJlcGx5CisKK0d1ZW50ZXIgS25hdWYgKDggTm92IDIwMTEpCistIEZpeCB0byBza2lwIHVudHJ1c3RlZCBjZXJ0cy4KKworRGFuaWVsIFN0ZW5iZXJnICg2IE5vdiAyMDExKQorLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCBlMzE2NmRmMWJiMworICAKKyAgNCBuZXcgYnVnZml4ZXMsIDIgbW9yZSBjb250cmlidXRvcnMKKworLSBmdHAgUE9SVDogZG9uJ3QgaGFuZyBpZiBiaW5kKCkgZmFpbHMKKyAgCisgIFdoZW4gdGhlIHVzZXIgcmVxdWVzdHMgUE9SVCB3aXRoIGEgc3BlY2lmaWMgcG9ydCBvciBwb3J0IHJhbmdlLCB0aGUgY29kZQorICBjb3VsZCBsb2NrIHVwIGluIGFuIGVuZGxlc3MgbG9vcC4gVGhlcmUncyBub3cgYW4gZXh0cmEgY29uZGl0aW9uYWwgdGhhdAorICBtYWtlcyBzdXJlIHRvIHNwZWNpYWwgdHJlYXQgdGhlIGVycm9yIGFuZCB0cnkgdGhlIGxvY2FsIGFkZHJlc3Mgb25seQorICBvbmNlIHNvIGEgc2Vjb25kIGZhaWx1cmUgd2lsbCBhYm9ydCB0aGUgbG9vcCBjb3JyZWN0bHkuCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0MzM5NjgKKyAgUmVwb3J0ZWQgYnk6IEdva2hhbiBTZW5ndW4KKworLSBwaW5ncG9uZzogY2hhbmdlIHR3byBjb21tZW50cyB3cm9uZ2x5IHJlZmVycmluZyAiRlRQIgorICAKKyAgSnVzdCBhIHNpZ24gb2Ygd2hlcmUgdGhlIGNvZGUgb3JpZ2luYWxseSB3YXMgcmlwcGVkIG91dCBmcm9tLiBOb3cgaXQgaXMKKyAgZ2VuZXJpYyAicGluZ3BvbmciLgorCistIHRlc3QgNTkwOiB2ZXJpZnkgdGhlIGJ1ZyBmaXggaW4gNDg1MWRhZmNmMQorICAKKyAgVGhpcyB0ZXN0IGlzIGNyZWF0ZWQgdG8gdmVyaWZ5IFJlbmUgQmVybmhhcmR0J3MgcGF0Y2ggd2hpY2ggbWFrZXMgc3VyZQorICBsaWJjdXJsIHByb3Blcmx5IF9ub3RfIGRlYWxzIHdpdGggTmVnb3RpYXRlIGlmIG5vdCBhc2tlZCB0byBldmVuIGlmIHRoZQorICBwcm94eSBzYXlzIGl0IGNhbiBzZXJ2ZSBpdC4KKworLSBbUmVuZSBCZXJuaGFyZHQgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBIVFRQIGF1dGg6IGZpeCBwcm94eSBOZWdvdGlhdGUgYnVnCisgIAorICBJZiBhIHByb3h5IG9mZmVycyBzZXZlcmFsIEF1dGhlbnRpY2F0aW9uIHNjaGVtZXMgd2hlcmUgTlRMTSBhbmQKKyAgTmVnb3RpYXRlIGFyZSBvZmZlcmVkIGJ5IHRoZSBwcm94eSBhbmQgeW91IHRlbGwgbGliY3VybCBub3QgdG8gdXNlIHRoZQorICBOZWdvdGlhdGUgc2NoZW1lIHRoZW4gdGhlIHJlcXVlc3QgbmV2ZXIgcmV0dXJucyB3aGVuIHRoZSBwcm94eSBhbnN3ZXJzCisgIHdpdGggaXRzIEhUVFAgNDA3IHJlcGx5LgorICAKKyAgSXQgaXMgcmVwcm9kdWNpYmxlIGJ5IHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgIAorICAtIFVzZSBhIHByb3h5IHRoYXQgb2ZmZXJzIE5UTE0gYW5kIE5lZ290aWF0ZSAoIENVUkxPUFRfUFJPWFkgYW5kCisgIENVUkxPUFRfUFJPWFlQT1JUICkKKyAgCisgIC0gVGVsbCBsaWJjdXJsIE5PVCB0byB1c2UgTmVnb3RpYXRlIENVUkxfRUFTWV9TRVRPUFQoQ1VSTE9QVF9QUk9YWUFVVEgsCisgIENVUkxBVVRIX0JBU0lDIHwgQ1VSTEFVVEhfRElHRVNUIHwgQ1VSTEFVVEhfTlRMTSApCisgIAorICAtIFN0YXJ0IHRoZSByZXF1ZXN0CisgIAorICBUaGUgY2FsbCB0byBDVVJMX0VBU1lfUEVSRk9STSBuZXZlciByZXR1cm5zLiBJZiB5b3Ugc3dpdGNoIG9uIGRlYnVnCisgIGxvZ2dpbmcgeW91IGNhbiBzZWUgdGhhdCBsaWJjdXJsIGlzc3VlcyBhIG5ldyByZXF1ZXN0IEFzIHNvb24gYXMgaXQKKyAgcmVjZWl2ZWQgdGhlIDQwNyByZXBseS4gSW5zdGVhZCBpdCBzaG91bGQgcmV0dXJuIGFuZCBzZXQgdGhlIHJlc3BvbnNlCisgIGNvZGUgdG8gNDA3LgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMTAvMDMyMy5odG1sCisKK1lhbmcgVHNlICg0IE5vdiAyMDExKQorLSBzc2x1c2UuYzogZml4IGNhbGxpbmcgb2YgT3BlblNTTCdzIEVSUl9yZW1vdmVfc3RhdGUoMCkKKyAgCisgIE1vdmUgY2FsbGluZyBvZiBFUlJfcmVtb3ZlX3N0YXRlKDApIGEuay5hIEVSUl9yZW1vdmVfdGhyZWFkX3N0YXRlKE5VTEwpCisgIGZyb20gQ3VybF9vc3NsX2Nsb3NlX2FsbCgpIHRvIEN1cmxfb3NzbF9jbGVhbnVwKCkuCisgIAorICBJbiB0aGlzIHdheSBFUlJfcmVtb3ZlX3N0YXRlKDApIGlzIG5vdyBvbmx5IGNhbGxlZCBpbiBsaWJjdXJsIGJ5CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKS4gUHJldmlvdXNseSBpdCB3b3VsZCBnZXQgY2FsbGVkIGJ5IGZ1bmN0aW9ucworICBjdXJsX2Vhc3lfY2xlYW51cCgpLCBjdXJsX211bHRpX2NsZWFudXAgYW5kIHBvdGVudGlhbGx5IGVhY2ggdGltZSBhCisgIGNvbm5lY3Rpb24gd2FzIHJlbW92ZWQgZnJvbSBhIGNvbm5lY3Rpb24gY2FjaGUgbGVhZGluZyB0byBwcmVtYXR1cmUKKyAgZGVzdHJ1Y3Rpb24gb2YgT3BlblNTTCdzIHRocmVhZCBsb2NhbCBzdGF0ZSBoYXNoLgorICAKKyAgTXVsdGktdGhyZWFkZWQgYXBwcyB1c2luZyBPcGVuU1NMIGVuYWJsZWQgbGliY3VybCBzaG91bGQgc3RpbGwgY2FsbAorICBmdW5jdGlvbiBFUlJfcmVtb3ZlX3N0YXRlKDApIG9yIEVSUl9yZW1vdmVfdGhyZWFkX3N0YXRlKE5VTEwpIGF0IHRoZQorICB2ZXJ5IGVuZCBlbmQgb2YgdGhyZWFkcyB0aGF0IGRvIG5vdCBjYWxsIGN1cmxfZ2xvYmFsX2NsZWFudXAoKS4KKworLSB0b29sX2NiX3dydC5jOiBkaXNhbWJpZ3VhdGUgd2FybmluZyBtZXNzYWdlCisKKy0gdG9vbF9jZmdhYmxlLmM6IHBlbmRpbmcgY2hlY2sgZG9uZQorCistIHVybC5jIGFuZCBmaWxlLmM6IGZpeCBPT00gdHJpZ2dlcmVkIHNlZ2ZhdWx0CisKK0RhbmllbCBTdGVuYmVyZyAoMyBOb3YgMjAxMSkKKy0gcmVuYW1lIGZ0cF9zc2w6IHRoZSBzdHJ1Y3QgZmllbGQgaXMgdXNlZCBmb3IgbWFueSBwcm90b2NvbHMKKyAgCisgIE5vdyBjYWxsZWQgJ3VzZV9zc2wnIGluc3RlYWQsIHdoaWNoIGJldHRlciBtYXRjaGVzIHRoZSBjdXJyZW50IENVUkxPUFQKKyAgbmFtZSBhbmQgc2luY2UgdGhlIG9wdGlvbiBpcyB1c2VkIGZvciBhbGwgcGluZ3BvbmcgcHJvdG9jb2xzIChhdCBsZWFzdCkKKyAgaXQgbWFrZXMgc2Vuc2UgdG8gbm90IHVzZSAnZnRwJyBpbiB0aGUgbmFtZS4KKworWWFuZyBUc2UgKDIgTm92IDIwMTEpCistIFtEYW5pZWwgU3RlbmJlcmcgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBndGxzX2Nvbm5lY3Rfc3RlcDE6IHJlbW92ZSB1c2Ugb2YgZGVwcmVjYXRlZCBmdW5jdGlvbnMKKyAgCisgIFVzZSBnbnV0bHNfcHJpb3JpdHlfc2V0X2RpcmVjdCgpIGluc3RlYWQgb2YgZ251dGxzX3Byb3RvY29sX3NldF9wcmlvcml0eSgpLgorICAKKyAgUmVtb3ZlIHRoZSBnbnV0bHNfY2VydGlmaWNhdGVfdHlwZV9zZXRfcHJpb3JpdHkoKSB1c2Ugc2luY2UgeDUwOSBpcyB0aGUKKyAgZGVmYXVsdCBjZXJ0aWZpY2F0ZSB0eXBlIGFueXdheS4KKyAgCisgIFJlcG9ydGVkIGJ5OiBWaW5jZW50IFRvcnJpCisKKy0gdXJsLmMgYW5kIHRyYW5zZmVyLmM6IG51bGxpZnkgY29ubmVjdGlvbiBwb2ludGVyIHdoZW4gZnJlZSgpJ2VkCisKKy0gRlRQIHRlc3Qgc2VydmVyOiBOT0RBVEFDT05OIGNvbW1hbmRzIGZvbGxvdy11cAorICAKKyAgTWFrZSBOT0RBVEFDT05ONDI1IGFuZCBOT0RBVEFDT05ONDIxIHJldHVybiBhIDE1MCBwb3NpdGl2ZSBwcmVsaW1pbmFyeSByZXBseQorICBiZWZvcmUgNDI1IG9yIDQyMS4KKyAgCisgIE5ldyBOT0RBVEFDT05OMTUwIHJldHVybnMgMTUwIHdpdGhvdXQgZnVydGhlciBwb3NpdGl2ZSBub3IgbmVnYXRpdmUgcmVwbHkKKyAgCisgIE5vdyBOT0RBVEFDT05OIGRvZXNuJ3QgcmVwbHkgYW55dGhpbmcgYXQgYWxsLgorCistIG11bHRpLmM6IE9PTSBoYW5kbGluZyBmaXgKKworLSBGVFAgdGVzdCBzZXJ2ZXI6IE5PREFUQUNPTk4gY29tbWFuZHMgZm9sbG93LXVwCisgIAorICBNYWtlIE5PREFUQUNPTk4gY3VzdG9tIGNvbW1hbmRzIGFwcGx5IHRvIGJvdGggYWN0aXZlIGFuZCBwYXNzaXZlIEZUUCwKKyAgYW5kIGVuc3VyZSA0MjUgYW5kIDQyMSBhcmUgbm90IHJldHVybmVkIHVubGVzcyBkYXRhIGNoYW5uZWwgdXNhZ2UgaXMKKyAgYXR0ZW1wdGVkLgorCistIHRvb2xfY2Jfc2VlLmg6IGZpeCBjb21waWxlciB3YXJuaW5nCisKKy0gc2V0dXAuaDogZml4IGNvbXBpbGVyIHdhcm5pbmcKKworLSBGVFAgdGVzdCBzZXJ2ZXI6IE5PREFUQUNPTk4gY29tbWFuZHMgY29tbWl0IGM3NjFmY2IwIGZvbGxvdy11cAorICAKKyAgQWRqdXN0bWVudHMgdGhhdCBtYWtlIE5PREFUQUNPTk4gY3VzdG9tIGNvbW1hbmRzIGZ1bGx5IHVzYWJsZS4KKworRGFuaWVsIFN0ZW5iZXJnICgzMCBPY3QgMjAxMSkKKy0gW0RhdmUgUmVpc25lciBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGRvYy9jdXJsLjE6IGZpeCBzZW50ZW5jZSB3aXRoIGVuZGluZyBmb3IgLSMgb3B0aW9uCisgIAorICBUcnkgdG8gYmUgYSBsaXR0bGUgbW9yZSBkZXNjcmlwdGl2ZSBhYm91dCB0aGUgZWZmZWN0IG9mIHRoaXMgZmxhZywKKyAgcmF0aGVyIHRoYW4gcGFycm90aW5nIHdoYXQgd2FzIHNhaWQgaW4gdGhlIHBhcmFncmFwaCBqdXN0IGFib3ZlLgorCitZYW5nIFRzZSAoMzAgT2N0IDIwMTEpCistIEZUUCB0ZXN0IHNlcnZlcjogZml4IHNlcnZlciB1bnJlc3BvbnNpdmVuZXNzCisgIAorICBTb21lIHRvcnR1cmUgdGVzdHMgbGVmdCBGVFAgdGVzdCBzZXJ2ZXIgaW4gYW4gdW5yZXNwb25zaXZlIHN0YXRlLCByZXN1bHRpbmcKKyAgaW4gdG9ydHVyZSB0ZXN0cyB0aGF0IGFjdHVhbGx5IGNvbXBsZXRlZCBmb2xsb3dpbmcgdW5leHBlY3RlZCBjb2RlIHBhdGhzLgorICAKKyAgQ2hhbmdlcyBpbiB0aGlzIGNvbW1pdCBzb2xlbHkgYWRkcmVzcyB0aGlzIGlzc3VlIGFuZCBzb21lIGFkanVzdG1lbnRzIGZvcgorICBmdHBzZXJ2ZXIucGwgbG9nZ2luZyByZWxhdGl2ZSB0byBkYXRhIGNoYW5uZWwgZXN0YWJsaXNobWVudCBhbmQgdGVhciBkb3duLgorICBQZW5kaW5nIE5PREFUQUNPTk4gcmVsYXRpdmUgYWRqdXN0bWVudHMgcmVzZXJ2ZWQgZm9yIGEgZnVydGhlciBjb21taXQuCisKKy0gcnVudGVzdHMucGw6IHJ1bm5pbmcgc2VydmVyIGNoZWNrcyAtIGNvbW1pdCA0NDY0NTgzYSBmb2xsb3ctdXAKKyAgCisgIEVuc3VyZSB2ZXJpZmljYXRpb24gdGFrZXMgcGxhY2Ugd2l0aCBubyBzZXJ2ZXIgY29tbWFuZHMgZmlsZS4KKyAgSWdub3JlIHZlcmJvc2Ugc2V0dGluZyBmb3IgcnVubmluZyBzZXJ2ZXIgcHJlY2hlY2suCisgIFR3ZWFrIHVucmVzcG9uc2l2ZSBzZXJ2ZXIgbWVzc2FnZSwgdG8gYWxsb3cgZGV0ZWN0aW9uIGJ5IGhheHguc2Ugc2NyaXB0cy4KKworLSBndGxzLmM6IGdudXRsc190cmFuc3BvcnRfc2V0X2dsb2JhbF9lcnJubygpIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAyLjEyLjMKKworLSBydW50ZXN0cy5wbDogcnVubmluZyBzZXJ2ZXIgY2hlY2tzIC0gY29tbWl0IDM2NzZlYzk2IGZvbGxvdy11cAorICAKKyAgRml4IGNhbGxlZCBzdWIgd2hlbiBjaGVja2luZyBURlRQIHNlcnZlciwgYW5kIGFkanVzdCBtZXNzYWdlLgorCistIHJ1bnRlc3RzLnBsOiBydW5uaW5nIHNlcnZlciBjaGVja3MgLSBjb21taXQgNDQ2NDU4M2EgZm9sbG93LXVwCisgIAorICBFeHRlbmRlZCBzZXJ2ZXIgY2hlY2tzIHRvIG90aGVycyBpbiBhZGRpdGlvbiB0byBwaW5ncG9uZyB3aGVuIHRvcnR1cmUgdGVzdGluZy4KKworLSBsaWI1ODkuYzogYWRkIENVUkxPUFRfUkVBRERBVEEgbWlzc2luZyBzdHVmZgorCistIGZ0cHNlcnZlci5wbDogdGhyZWUgbmV3IGN1c3RvbSBGVFAgc2VydmVyIGNvbW1hbmRzIHRvIGRpc2FibGUgZGF0YSBjaGFubmVsCisgIAorICBOT0RBVEFDT05ONDIxOiBhcHBsaWVzIG9ubHkgdG8gYWN0aXZlIEZUUCBtb2RlLCBpbnN0cnVjdHMgc2VydmVyIHRvIG5vdAorICBlc3RhYmxpc2ggZGF0YSBjb25uZWN0aW9uIGJhY2sgdG8gY2xpZW50IGFuZCByZXBseSB3aXRoIEZUUCA0MjEuCisgIAorICBOT0RBVEFDT05ONDI1OiBhcHBsaWVzIG9ubHkgdG8gYWN0aXZlIEZUUCBtb2RlLCBpbnN0cnVjdHMgc2VydmVyIHRvIG5vdAorICBlc3RhYmxpc2ggZGF0YSBjb25uZWN0aW9uIGJhY2sgdG8gY2xpZW50IGFuZCByZXBseSB3aXRoIEZUUCA0MjUuCisgIAorICBOT0RBVEFDT05OOiBhcHBsaWVzIHRvIGJvdGggYWN0aXZlIGFuZCBwYXNzaXZlIEZUUCBtb2RlcywgaW5zdHJ1Y3RzIHNlcnZlcgorICB0byBub3QgZXN0YWJsaXNoIG5vciBhY2NlcHQgYSBkYXRhIGNoYW5uZWwgYW5kIGZvb2wgY2xpZW50IGludG8gYmVsaWV2aW5nCisgIHRoYXQgdGhlIGRhdGEgY2hhbm5lbCBjb25uZWN0aW9uIGlzIHBvc3NpYmxlLgorICAKKyAgU29tZSBwb2xpc2hpbmcgcHJvYmFibHkgcmVxdWlyZWQuCisKKy0gbXVsdGkuYzogT09NIGhhbmRsaW5nIGZpeAorICAKKyAgRml4IGN1cmxfbXVsdGlfY2xlYW51cCgpIHNlZ2ZhdWx0IHdoZW4gdXNpbmcgd2VpcmQgY2xlYW51cCBzZXF1ZW5jZS4KKworRGFuaWVsIFN0ZW5iZXJnICgyNyBPY3QgMjAxMSkKKy0gbXVsdGk6IHN0YXJ0IGZ0cCBzdGF0ZSBtYWNoaW5lIHdoZW4gc3dpdGNoaW5nIHRvIERPX01PUkUKKyAgCisgIFRoaXMgZXh0ZW5kcyB0aGUgZml4IGZyb20gY29tbWl0IGQ3OTM0YjhiZDQ5MQorICAKKyAgV2hlbiB0aGUgbXVsdGkgc3RhdGUgaXMgY2hhbmdlZCB3aXRoaW4gdGhlIG11bHRpX3J1bnNpbmdsZSBmcm9tIERPSU5HIHRvCisgIERPX01PUkUsIHdlIGRpZG4ndCBpbW1lZGlhdGVseSBzdGFydCB0aGUgRlRQIHN0YXRlIG1hY2hpbmUgYWdhaW4uIFRoYXQKKyAgdGhlbiBsZWZ0IHRoZSBGVFAgc3RhdGUgaW4gRlRQX1NUT1AuIFdoZW4gY3VybF9tdWx0aV9mZHNldCgpIHdhcworICBzdWJzZXF1ZW50bHkgY2FsbGVkLCB0aGUgZnRwX2RvbW9yZV9nZXRzb2NrKCkgZnVuY3Rpb24gd291bGQgcmV0dXJuIHRoZQorICB3cm9uZyBmZCBpbmZvLgorICAKKyAgUmVwb3J0ZWQgYnk6IEdva2hhbiBTZW5ndW4KKworLSBsaWJjdXJsLW11bHRpLjM6IHVwZGF0ZSB0aGUgbGlzdCBvZiBhcmVhcyBzdGlsbCBibG9ja2luZworCitZYW5nIFRzZSAoMjYgT2N0IDIwMTEpCistIHRlc3QgNTg5OiBhY3RpdmUgRlRQIHVwbG9hZCB1c2luZyBtdWx0aSB0aW1lb3V0IGFuZCBFUFJUIGRpc2FibGVkIHNlcnZlcgorCistIG11bHRpIHRlc3RzOiBPT00gaGFuZGxpbmcgZml4ZXMgLSBjb21taXQgNjI5ZDJlMzQgZm9sbG93LXVwCisKK1BhdHJpY2sgTW9ubmVyYXQgKDI2IE9jdCAyMDExKQorLSAtIFByZXBhcmUgdGhlIElMRS9SUEcgYmluZGluZyBhbmQgT1M0MDAgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHVwY29taW5nIHJlbGVhc2UKKworRGFuaWVsIFN0ZW5iZXJnICgyNSBPY3QgMjAxMSkKKy0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggNDQ2NDU4M2E2ZWQKKyAgCisgIDUgbW9yZSBidWcgZml4ZXMsIDQgYWRkaXRpb25hbCBjb250cmlidXRvcnMKKworWWFuZyBUc2UgKDI1IE9jdCAyMDExKQorLSBydW50ZXN0cy5wbDogcnVubmluZyBzZXJ2ZXIgY2hlY2tzCisgIAorICBXaGVuIHJ1bm5pbmcgdG9ydHVyZSB0ZXN0cywgdmVyaWZ5IGJlZm9yZSBlYWNoIHRlc3QgY2FzZSB0aGF0IHJlcXVpcmVkCisgIHBpbmdwb25nIHNlcnZlcnMgd2hpY2ggYXJlIHN1cHBvc2VkIHRvIGJlIGFsaXZlIGFyZSBhY3R1YWxseSByZXNwb25zaXZlLgorICBJZiBmb3VuZCBub3QgcmVzcG9uc2l2ZSB0aGVuIHJlc3RhcnQgdGhlbS4KKworRGFuaWVsIFN0ZW5iZXJnICgyNCBPY3QgMjAxMSkKKy0gZGlzdDogYWRkIHRlc3QgNTg3CisgIAorICBJIGNyZWF0ZWQgdGVzdCA1ODcgaW4gY29tbWl0IDg0MGVmZjQ0ZjJiIGJ1dCBmb3Jnb3QgdG8gYWRkIHRoZSBmaWxlIHRvCisgIHRoZSB0YXJiYWxsLiBBZGRlZCBub3cuCisKKy0gdGVzdCA1ODg6IHZlcmlmeSBhY3RpdmUgRlRQIHdpdGggbXVsdGkgaW50ZXJmYWNlIHdpdGhvdXQgRVBSVAorICAKKyAgVGhpcyBpcyB1c2luZyB0aGUgdmVyYmF0aW0gNTI1IHRlc3QgY29kZSBidXQgaXQgZGlzYWJsZXMgRVBSVCBpbiB0aGUKKyAgc2VydmVyIGFuZCB0aGlzIHNob3VsZCB3b3JrIGp1c3QgYXMgd2VsbCBhbnl3YXkuCisKKy0gRlRQIHNlcnZlcjogYWxsb3cgRVBSVCBieSBkZWZhdWx0CisgIAorICBFUFJUIGlzIG5vdyBzdXBwb3J0ZWQgYnkgZGVmYXVsdCBieSB0aGUgc2VydmVyLiBUbyBkaXNhYmxlIGl0LCB1c2UgdGhlCisgIGdlbmVyaWMgUkVQTFkgaW5zdHJ1Y3Rpb24gaW4gdGhlIDxzZXJ2ZXJjbWQ+IHRhZy4gVGVzdCAxMTYgbm93IGhhcyBpdAorICBkaXNhYmxlZC4gQWxsIG90aGVyIGV4aXN0aW5nIGFjdGl2ZSBGVFAgcG9ydCB0ZXN0cyBzdHJpcCBvdXQgdGhlIHBvcnQKKyAgY29tbWFuZHMgZnJvbSB0aGUgbG9ncyBhbHJlYWR5IHNvIHRoZSBjaGFuZ2Ugb2YgdGhlIHNlcnZlciBpc24ndCB0aGF0CisgIG5vdGljYWJsZS4KKworWWFuZyBUc2UgKDI0IE9jdCAyMDExKQorLSBmdHAuYzogc29tZSBPT00gaGFuZGxpbmcgZml4ZXMKKworLSBmdHBzZXJ2ZXIucGw6IGVuc3VyZSBpbnRlZ3JhbCBudW1iZXIgdXNhZ2UgZm9yIHBhc3NpdmUgbW9kZSBzdHJpbmcKKworRGFuaWVsIFN0ZW5iZXJnICgyNCBPY3QgMjAxMSkKKy0gbGFyZ2UgaGVhZGVyczogaGF2ZSBjdXJsIGFjY2VwdCA+MTZLIGhlYWRlcnMKKyAgCisgIEFzIGNvbW1pdCA1ODUwY2M0ODA4YWIgY2xhcmlmaWVzLCBsaWJjdXJsIGNhbiBkZWxpdmVyIGhlYWRlciBsaW5lcyB0aGF0CisgIGFyZSBsb25nZXIgdGhhbiBDVVJMX01BWF9XUklURV9TSVpFLCBvbmx5IGJvZHkgZGF0YSBpcyBsaW1pdGVkIHRvIHRoYXQKKyAgc2l6ZS4gVGhlIGN1cmwgdG9vbCBoYXMgY2hlY2sgKHdoZW4gYnVpbHQgZGVidWctZW5hYmxlZCkgdGhhdCBtYWRlIHRoZQorICB3cm9uZyBjaGVja3MgYW5kIHRoaXMgbmV3IHRlc3QgMTIwNSB2ZXJpZmllcyB0aGF0IGxhcmdlciBoZWFkZXJzIHdvcmsuCisKKy0gY3VybF9lYXN5X3NldG9wdC4zOiBoZWFkZXJzIGNhbiBiZSBDVVJMX01BWF9IVFRQX0hFQURFUiBieXRlcworICAKKyAgTWVudGlvbiB0aGlzIG1heGltdW0gaGVhZGVyIHNpemUgZm9yIHRoZSBoZWFkZXIgY2FsbGJhY2sgY2FzZXMKKworLSBNZXJnZSBwdWxsIHJlcXVlc3QgIzI1IGZyb20gdHJ0b20vbWFzdGVyCisgIAorICBtYWtlIHN1cmUgdGhlIHN0YXRpYyBidWlsZCB1c2VzIHRoZSBzdGF0aWMgYnVpbGQgb3B0aW9uIQorCistIGN1cmxfZWFzeV9zZXRvcHQuMzogZml4IHR5cG8KKyAgCisgIHNob290LCBEYW4gRmFuZHJpY2ggYWxyZWFkeSBoYWQgdGhpcyBwb2ludGVkIG91dC4uLgorCistIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGN1cmxfZWFzeV9zZXRvcHQ6IEFkZGVkIHBvcDMgdG8gQ1VSTE9QVF9VUkwuCisgIAorICBBZGRlZCBwb3AzIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBleGFtcGxlIGFzIHdlbGwgYXMgYW4gZXhwbGFuYXRpb24gb2YKKyAgaG93IHBhdGggcGFydCBvZiB0aGUgVVJMIGlzIHVzZWQgdW5kZXIgcG9wMy4KKyAgCisgIEFkZGl0aW9uYWxseSBoYXZlIGNvcnJlY3RlZCBhIGNvdXBsZSBvZiB0eXBvcy4KKworWWFuZyBUc2UgKDIyIE9jdCAyMDExKQorLSB0b29sX29wZXJhdGUuYzogT09NIGhhbmRsaW5nIGZpeAorICAKKyAgTW92ZSBjdXJsX2Vhc3lfcGVyZm9ybSBzb3VyY2UgY29kZSBnZW5lYXJ0aW9uIG91dCBvZiBjdXJsX2Vhc3lfcGVyZm9ybSdzIGxvb3AKKyAgZm9yIHByb3BlciBPT00gaGFuZGxpbmcgYW5kIHNvdXJjZSBjb2RlIGdlbmVhcnRpb24uCisKK0RhbmllbCBTdGVuYmVyZyAoMjEgT2N0IDIwMTEpCistIGN1cmxfbXVsdGlfZmRzZXQ6IGNvcnJlY3QgZmRzZXQgd2l0aCBGVFAgUE9SVCB1c2UKKyAgCisgIEFmdGVyIGEgUE9SVCBoYXMgYmVlbiBpc3N1ZWQsIGFuZCB0aGUgbXVsdGkgaGFuZGxlIHdvdWxkIHN3aXRjaCB0byB0aGUKKyAgQ1VSTE1fU1RBVEVfRE9fTU9SRSBzdGF0ZSAod2hpY2ggaXMgdW5pcXVlIGZvciBGVFApLCBsaWJjdXJsIHdvdWxkCisgIHJldHVybiB0aGUgd3JvbmcgZmRzZXQgdG8gd2FpdCBmb3Igd2hlbiBjdXJsX211bHRpX2Zkc2V0KCkgaXMKKyAgY2FsbGVkLiBUaGUgY29kZSB3b3VsZCBibGluZGx5IGFzc3VtZSB0aGF0IGl0IHdhcyB3YWl0aW5nIGZvciBhIGNvbm5lY3QKKyAgb2YgdGhlIHNlY29uZCBjb25uZWN0aW9uLCB3aGlsZSB0aGF0IGlzbid0IHRydWUgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlCisgIFBPUlQgY29tbWFuZC4KKyAgCisgIEFsc28sIHRoZSBmdW5jdGlvbiBtdWx0aS5jOmRvbW9yZV9nZXRzb2NrKCkgd2FzIGhpZ2hseSBGVFAtY2VudHJpYyBhbmQKKyAgdGhlcmVmb3JlIHVnbHkgdG8ga2VlcCBpbiBwcm90b2NvbC1hZ25vc3RpYyBjb2RlLiBJIHNvbHZlZCB0aGlzIHByb2JsZW0KKyAgYnkgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUgQ3VybF9oYW5kbGVyIHN0cnVjdCBjYWxsZWQKKyAgZG9tb3JlX2dldHNvY2soKSB3aGljaCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgdGhlIERPTU9SRSBzdGF0ZSBmb3IKKyAgcHJvdG9jb2xzIHRoYXQgc2V0IHRoYXQgcG9pbnRlci4KKyAgCisgIFRoZSBuZXcgZnRwLmM6ZnRwX2RvbW9yZV9nZXRzb2NrKCkgZnVuY3Rpb24gbm93IHJldHVybnMgZmRzZXQgaW5mbyBhYm91dAorICB0aGUgY29udHJvbCBjb25uZWN0aW9uJ3MgY29tbWFuZC9yZXNwb25zZSBoYW5kbGluZyB3aGlsZSBzdWNoIGEgc3RhdGUgaXMKKyAgaW4gdXNlLCBhbmQgZ29lcyBvdmVyIHRvIHdhaXRpbmcgZm9yIGEgd3JpdGFibGUgc2Vjb25kIGNvbm5lY3Rpb24gZmlyc3QKKyAgb25jZSB0aGUgY29tbWFuZHMgYXJlIGRvbmUuCisgIAorICBUaGUgb3JpZ2luYWwgcHJvYmxlbSBjb3VsZCBiZSBzZWVuIGJ5IHJ1bm5pbmcgdGVzdCA1MjUgYW5kIGNoZWNraW5nIHRoZQorICB0aW1lIHN0YW1wcyBpbiB0aGUgRlRQIHNlcnZlciBsb2cuIEkgY2FuIHZlcmlmeSB0aGF0IHRoaXMgZml4IGF0IGxlYXN0CisgIGZpeGVzIHRoaXMgcHJvYmxlbS4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEwLzAyNTAuaHRtbAorICBSZXBvcnRlZCBieTogR29raGFuIFNlbmd1bgorCitEYW4gRmFuZHJpY2ggKDIxIE9jdCAyMDExKQorLSBBZGRlZCBzb21lIG1pc3NpbmcgdGVzdCBjYXNlIFhNTCB0YWdzIGFuZCBrZXl3b3JkcworCitZYW5nIFRzZSAoMjEgT2N0IDIwMTEpCistIGZpbGUuYzogT09NIGhhbmRsaW5nIGZpeAorICAKKyAgZmlsZV9kaXNjb25uZWN0KCkgZnJlZSdzIHJlc291cmNlcyBmb3IgbXVsdGkgQVBJCisKKy0gbXVsdGkuYzogZml4IHNlZ2ZhdWx0CisKKy0gcnVudGVzdHMucGw6IGZpeCBwcmludGluZyBvZiBtdWx0aXZhbHVlZCBlcnJvciBjb2RlcworCistIG11bHRpIHRlc3RzOiBPT00gaGFuZGxpbmcgZml4ZXMKKyAgCisgIEFkZGl0aW9uYWxseSwgaW1wcm92ZWQgZXJyb3IgY2hlY2tpbmcgYW5kIGxvZ2dpbmcuCisKK0RhbiBGYW5kcmljaCAoMjAgT2N0IDIwMTEpCistIEZpeGVkIGNvbXBpbGF0aW9uIHdoZW4gSFRUUCBvciBjb29raWVzIGFyZSBkaXNhYmxlZAorCitEYW5pZWwgU3RlbmJlcmcgKDIwIE9jdCAyMDExKQorLSBLTk9XTl9CVUdTOiAjNzQgZml4ZWQKKyAgCisgIE11bHRpcGxlIGF1dGhzIGluIHRoZSBzYW1lIFdXVy1BdXRoZW50aWNhdGUgaGVhZGVyCisgIAorICBGaXhlZCBpbiBjb21taXQgN2Q4MWUzZjcxOTNiOGMKKworLSBDdXJsX2h0dHBfaW5wdXRfYXV0aDogaGFuZGxlIG11bHRpcGxlIGF1dGhzIGluIFdXVy1BdXRoZW50aWNhdGUKKyAgCisgIFRoZSBmaXggaXMgcHJldHR5IG11Y2ggdGhlIG9uZSBOaWNrIFppdHptYW5uIHByb3ZpZGVkLCBqdXN0IGVkaXRlZCB0byBkbworICB0aGUgcmlnaHQgaW5kZW50IGxldmVscyBhbmQgd2l0aCB0ZXN0IGNhc2UgMTIwNCBhZGRlZCB0byB2ZXJpZnkgdGhlIGZpeC4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEwLzAxOTAuaHRtbAorICBSZXBvcnRlZCBieTogTmljayBaaXR6bWFubgorCistIEN1cmxfc210cF9lc2NhcGVfZW9iOiBmaXJzdCBieXRlIGlzIGluZGV4IDAuLi4KKyAgCisgIEZpeCBhIGJ1ZyB3aXRoIHdpdGggY29tbWl0IDI2MjFkZDQyYTRkIHRoYXQgaGFwcGVuZWQgZHVlIHRvIG15IGxhc3QKKyAgc2Vjb25kIHByZS1jb21taXQgY2xlYW51cCBvZiB0aGUgY2hhbmdlIHdpdGhvdXQgcHJvcGVyIHRlc3RpbmcKKyAgYWZ0ZXJ3YXJkcyEKKworLSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk06IHJlbW92ZSBtZW50aW9uCisgIAorICBUaGlzIHJldHVybiBjb2RlIGhhcyBub3QgYmVlbiB1c2VkIHNpbmNlIDcuMjAuMCBzbyB3ZSBjYW4gc3RvcAorICBtZW50aW9uaW5nIGl0IGZvciBjdXJyZW50IGxpYmN1cmwuCisKK0RhbiBGYW5kcmljaCAoMTkgT2N0IDIwMTEpCistIFNpbGVuY2VkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBhbiB1bnVzZWQgdmFyaWFibGUKKworRGFuaWVsIFN0ZW5iZXJnICgyMCBPY3QgMjAxMSkKKy0gW1RpbSBIYXJkZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBndGxzOiBvbmx5IGNhbGwgZ251dGxzX3RyYW5zcG9ydF9zZXRfbG93YXQgd2l0aCA8Z251dGxzLTIuMTIuMAorICAKKyAgVGhlIGRlZmF1bHQgbG93YXQgbGV2ZWwgZm9yIGdudXRscy0yLjEyKiBpcyBzZXQgdG8gemVybyB0byBhdm9pZAorICB1bm5lY2Vzc2FyeSBzeXN0ZW0gY2FsbHMgYW5kIHRoZSBnbnV0bHNfdHJhbnNwb3J0X3NldF9sb3dhdCBmdW5jdGlvbiBoYXMKKyAgYmVlbiB0b3RhbGx5IHJlbW92ZWQgaW4gPj1nbnV0bHMtMyB3aGljaCBjYXVzZXMgYnVpbGQgZmFpbHVyZXMuCisgIAorICBUaGVyZWZvcmUsIHRoZSBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgdXNlZCBleGNlcHQgZm9yIHZlcnNpb25zIHRoYXQKKyAgcmVxdWlyZSBpdCwgPGdudXRscy0yLjEyLjAuCisKKy0gQ3VybF9zbXRwX2VzY2FwZV9lb2I6IGZpeCBFT0IgZXNjYXBpbmcKKyAgCisgIEFzIHRoZSBFT0Igc3RyaW5nIGNhbiBjb21lIGJ5dGUgYnkgYnl0ZSBvdmVyIGEgc2VyaWVzIG9mIHdyaXRlcyB3ZSBtdXN0CisgIG1hdGNoIGJ5dGUtd2lzZS4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEwLzAxNzIuaHRtbAorCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGVjYmIwOGNlYTNjZDYKKworLSBzaW5nbGVpcGNvbm5lY3Q6IHVuc3RpY2sgdGhlIGlwdjYtY29ubmVjdGlvbiBib29sZWFuCisgIAorICBQcmV2aW91c2x5IHRoZSBiaXQgd2FzIHNldCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gd2FzIGZvdW5kIHdvcmtpbmcgc28gaWYKKyAgaXQgd291bGQgZmlyc3QgZmFpbCB0byBhbiBpcHY2IGFkZHJlc3MgYW5kIHRoZW4gY29ubmVjdCBmaW5lIHRvIGEgSVB2NAorICBhZGRyZXNzIHRoZSB2YXJpYWJsZSB3b3VsZCBzdGlsbCBiZSBUUlVFLgorICAKKyAgUmVwb3J0ZWQgYnk6IFRob21hcyBMLiBTaGlubmljaworICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0MjE5MTIKKworS2FtaWwgRHVka2EgKDE3IE9jdCAyMDExKQorLSBuc3M6IGF2b2lkIGEgU0lHU0VHViB3aXRoIGltbWF0dXJlIHZlcnNpb24gb2YgTlNTCisgIAorICBCdWc6IGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS83MzM2ODUKKworLSBuc3M6IGJpZyBjbGVhbnVwIGluIG5zc19sb2FkX2NlcnQoKSBhbmQgY2VydF9zdHVmZigpCisKKy0gbnNzOiByZWZhY3RvciBmbXRfbmlja25hbWUoKSAtPiBkdXBfbmlja25hbWUoKQorICAKKyAgRG8gbm90IHVzZSBhcnRpZmljaWFsIG5pY2tuYW1lcyBmb3IgY2VydGlmaWNhdGVzIGZyb20gZmlsZXMuCisKKy0gbnNzOiBzZWxlY3QgY2xpZW50IGNlcnRpZmljYXRlcyBieSBERVIKKyAgCisgIC4uLiBpbnN0ZWFkIG9mIG5pY2tuYW1lcywgd2hpY2ggYXJlIG5vdCB1bmlxdWUuCisKK0RhbmllbCBTdGVuYmVyZyAoMTcgT2N0IDIwMTEpCistIC0tZXBzdjogZml4IHR5cG8KKyAgCisgIFJlcG9ydGVkIGJ5OiBUaG9tYXMgTC4gU2hpbm5pY2sKKworLSAtLXNob3ctZXJyb3I6IHBvc2l0aW9uIGluZGVwZGVuZW50CisgIAorICBQcmV2aW91c2x5IHdlIHJlcXVpcmVkIHRoYXQgLVMvLS1zaG93LWVycm9yIHdhcyB1c2VkIF9hZnRlcl8KKyAgLXMvLS1zaWxlbnQuIFRoaXMgd2FzIHNsaWdodGx5IGNvbmZ1c2luZyBzaW5jZSB3ZSBzdHJpdmUgdG8gbWFrZQorICBhcmd1bWVudHMgYXMgcG9zaXRpb24gaW5kZXBlbmRlbnQgYXMgcG9zc2libGUuCisgIAorICBOb3csIHlvdSBjYW4gdXNlIHRoZW0gaW4gYW55IG9yZGVyIGFuZCB0aGUgcmVzdWx0IHNob3VsZCBzdGlsbCBiZSB0aGUKKyAgc2FtZS4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQyNDI4NgorICBSZXBvcnRlZCBieTogQW5kcmVhcyBPbHNzb24KKworLSBjdXJsX211bHRpX2Zkc2V0OiBjbGFyaWZ5IHRoZSBtYXhfZmQgPT0gLTEgY2FzZQorICAKKyAgRWxhYm9yYXRlIHdoYXQgbWF4X2ZkID09IC0xIG1lYW5zCisgIAorICBSZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0gYXMgbW9kZXJuIGxpYmN1cmwKKyAgdmVyc2lvbnMgZG9uJ3QgZXZlciByZXR1cm4gdGhhdC4KKworLSBmb3JtZGF0YTogYWNrIHJlYWQgY2FsbGJhY2sgYWJvcnQKKyAgCisgIFdoZW4gZG9pbmcgYSBtdWx0aXBhcnQgZm9ybXBvc3Qgd2l0aCBhIHJlYWQgY2FsbGJhY2ssIGFuZCB0aGF0IGNhbGxiYWNrCisgIHJldHVybnMgQ1VSTF9SRUFERlVOQ19BQk9SVCwgdGhhdCByZXR1cm4gY29kZSBtdXN0IGJlIHByb3Blcmx5CisgIHByb3BhZ2F0ZWQgYmFjayBhbmQgaGFuZGxlZCBhY2NvcmRpbmdseS4gUHJldmlvdXNseSBpdCB3b3VsZCBiZSBoYW5kbGVkCisgIGFzIGEgemVybyBieXRlIHJlYWQgd2hpY2ggd291bGQgY2F1c2UgYSBoYW5nIQorICAKKyAgQWRkZWQgdGVzdCBjYXNlIDU4NyB0byB2ZXJpZnkuIEl0IHVzZXMgdGhlIGxpYjU1NC5jIHNvdXJjZSBjb2RlIHdpdGggYQorICBzbWFsbCBpZmRlZi4KKyAgCisgIFJlcG9ydGVkIGJ5OiBBbnRvbiBCeWNoa292CisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEwLzAwOTcuaHRtbAorCistIFRPRE86IGhhdmUgZm9ybSBmdW5jdGlvbnMgdXNlIENVUkwgaGFuZGxlIGFyZ3VtZW50CisKKy0gW0RhdmUgUmVpc25lciBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIHR5cGVjaGVjazogYWxsb3cgTlVMTCB0byB1bnNldCBDVVJMT1BUX0VSUk9SQlVGRkVSCisgIAorICBUaGVyZSBtaWdodCBiZSBzaXR1YXRpb25zIHdoZXJlIGEgdXNlciB3b3VsZCB3YW50IHRvIHVuc2V0IHRoaXMgb3B0aW9uLgorICBBdm9pZCBmb3JjaW5nIGhpbS9oZXIgdG8gY2FzdCB0aGUgTlVMTCBhcmd1bWVudCB0byAoY2hhciAqKSBpbiBvcmRlciB0bworICBnZXQgcGFzdCB0aGUgY29tcGlsZSB0aW1lIHR5cGVjaGVjay4KKworLSBzaW5nbGVpcGNvbm5lY3Q6IGRvbid0IGNsb2JiZXIgZXJybm8KKyAgCisgIFNhdmUgdGhlIGVycm5vIHZhbHVlIGltbWVkaWF0ZWx5IGFmdGVyIGEgY29ubmVjdCgpIGZhaWx1cmUgc28gdGhhdCBpdAorICB3b24ndCBnZXQgcmVzZXQgdG8gc29tZXRoaW5nIGVsc2UgYmVmb3JlIHdlIHJlYWQgaXQuCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMC8wMDY2Lmh0bWwKKyAgUmVwb3J0ZWQgYnk6IEZyYW5rIFZhbiBVZmZlbGVuIGFuZCBGYWJpYW4gSGllcm5hdXgKKworLSBbTWljaGFsIE1hcmVrIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgZG9jczogLS14YXR0cgorCitZYW5nIFRzZSAoMTQgT2N0IDIwMTEpCistIGZpbGUuYzogZml4IGNvbXBpbGVyIHdhcm5pbmcKKworLSB1cmwuYzogZml4IGVuZGxlc3MgbG9vcCB1cG9uIHRyYW5zcG9ydCBjb25uZWN0aW9uIHRpbWVvdXQKKyAgCisgIEplcnJ5IFd1IGRldGVjdGVkIGFuZCBwcm92aWRlZCBkZXRhaWxlZCBpbmZvIGFib3V0IHRoaXMgaXNzdWUuCisKKy0gc3dzLmM6IEhUVFAgYW5kIEdPUEhFUiB0ZXN0IHNlcnZlci1zaWRlIGNvbm5lY3Rpb24gY2xvc2luZyBhZGp1c3RtZW50CisgIAorICBXaGVuLCBmb3IgYSBnaXZlbiB0ZXN0LCBzZXJ2ZXIgaXMgaW5zdHJ1Y3RlZCB0byBjbG9zZSBjb25uZWN0aW9uIGFmdGVyCisgIHNlcnZlciByZXBseSB3ZSBub3cgd2FpdCBhIHZlcnkgc21hbGwgYW1vdW50IG9mIHRpbWUgKDUwbXMpIGJlZm9yZSBkb2luZworICBzby4gVGhpcyBpcyBkb25lIHRvIGFsbG93IGNsaWVudCB0bywgYXQgbGVhc3QgcGFydGlhbGx5LCByZWFkIHNlcnZlcgorICByZXBseSBiZWZvcmUgZ2V0dGluZyBhbiBFQ09OTlJFU0VULgorICAKKyAgVGhlIGFib3ZlIGlzIHJlcXVpcmVkIHRvIG1ha2UgdGVzdCBjYXNlcyAxMDcwLCAxMjAwLCAxMjAxIGFuZCAxMjAyIHBhc3MKKyAgd2l0aCBDeWd3aW4gMS41Llggb24gVzJLLgorICAKKyAgR09QSEVSIHRlc3Qgc2VydmVyIGNsb3NlcyBjb25uZWN0aW9uIGFmdGVyIF9ldmVyeV8gc2VydmVyLXJlcGx5LCBhcyBzdWNoLAorICBhdCBzb21lIHBvaW50IGl0IGNvdWxkIHJlcXVpcmUgYSBiaWdnZXIgdGltZSBvciB1c2luZyBzaHV0ZG93bigpIGJlZm9yZQorICBhIHNlcnZlci1zaWRlIGluaXRpYXRlZCBkaXNjb25uZWN0aW9uLgorCistIGN1cmxfZ2V0aG9zdG5hbWUuYzogZml4IHNpZ25lZC91bnNpZ25lZCBjb21wYXJpc29uIGFuZCBhdm9pZCBhIGRvdWJsZSBjb3B5CisgIAorICBib3RoIGludHJvZHVjZWQgaW4gNDJiZTI0YWYKKworLSBjdXJsX250bG1fbXNncy5jOiBmaXggdmFyaWFibGUgc2hhZG93aW5nIGRlY2xhcmF0aW9uIGludHJvZHVjZWQgaW4gMTg1ZWQzNDAKKworLSBbTWFyY2luIEFkYW1za2kgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICB0ZnRwLmM6IFRGVFAgdGltZW91dCBhbmQgdW5leHBlY3RlZCBibG9jayBhZGp1c3RtZW50cworICAKKyAgU2V0IEFDSyB0aW1lb3V0IHRvIDUgc2Vjb25kcy4KKyAgCisgIElmIHdlIGFyZSB3YWl0aW5nIGZvciBibG9jayBYIGFuZCByZWNlaXZlIGJsb2NrIFkgdGhhdCBpcyB0aGUgZXhwZWN0ZWQgb25lLCB3ZQorICBzaG91bGQgc2VuZCBBQ0sgYW5kIGluY3JlYXNlIFggKHdoaWNoIGlzIGFscmVhZHkgaW1wbGVtZW50ZWQpLiBPdGhlcndpc2UgZHJvcAorICB0aGUgcGFja2V0IGFuZCBkb24ndCBpbmNyZWFzZSByZXRyeSBjb3VudGVyLgorCistIG11bHRpLmM6IE9PTSBoYW5kbGluZyBmaXhlcworICAKKyAgUHJldmVudCBtb2RpZmljYXRpb24gb2YgZWFzeSBoYW5kbGUgYmVpbmcgYWRkZWQgd2l0aCBjdXJsX211bHRpX2FkZF9oYW5kbGUoKQorICB1bmxlc3MgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBzdWNlZWRzLgorICAKKyAgUnVuIEN1cmxfcG9zdHRyYW5zZmVyKCkgdG8gYWxsb3cgcmVzdG9yaW5nIG9mIFNJR1BJUEUgaGFuZGxlciB3aGVuCisgIEN1cmxfY29ubmVjdCgpIGZhaWxzIGVhcmx5IGluIG11bHRpX3J1bnNpbmdsZSgpLgorCistIHVybC5jOiBtYWtlIGxpbmUgc2hvcnRlciB0aGFuIDgwIGNoYXJzCisKKy0gT09NIGhhbmRsaW5nL2NsZWFudXAgc2xpZ2h0IGFkanVzdG1lbnRzCisKKy0gT09NIGhhbmRsaW5nL2NsZWFudXAgc2xpZ2h0IGFkanVzdG1lbnRzCisKKy0gbGliNTQwLmM6IE9PTSBoYW5kbGluZyBmaXhlcyBtYWtpbmcgdGVzdCA1NDAgcGFzcyB0b3J0dXJlIHRlc3RpbmcKKworRGFuIEZhbmRyaWNoICg4IE9jdCAyMDExKQorLSBSRUxFQVNFLU5PVEVTOiBGaXhlZCBhIGNvdXBsZSBvZiB0eXBvcworCitZYW5nIFRzZSAoOCBPY3QgMjAxMSkKKy0gdGVsbmV0LmM6IGZpeCBjb21waWxlciB3YXJuaW5nCisKKy0gbGliY3VybDogc29tZSBPT00gaGFuZGxpbmcgZml4ZXMKKworLSBtdWx0aS5jOiBPT00gaGFuZGxpbmcgZml4ZXMgbWFraW5nIHRvcnR1cmUgdGVzdHMgNTYwIDU4MCA1ODEgcGFzcworCistIHRlc3QgaGFybmVzczogbm9uLXN0dW5uZWwgaHR0cHMgc2VydmVyIGludGVncmF0aW9uIG92ZXJoYXVsCisKKy0gY3VybCB0b29sOiByZXZpZXdlZCBjb2RlIG1vdmVkIHRvIHRvb2xfKi5bY2hdIGZpbGVzCisKKy0gYnVpbGRjb25mOiB3YXJuIGFib3V0IGF1dG9jb25mIDIuNjcgYW5kIDIuNjggZ2VuZXJhdGluZyBiYWQvdW51c2FibGUgc2NyaXB0cworCistIGN1cmwgdG9vbDogZml4IGNvbXBpbGVyIHdhcm5pbmcKKworLSBjdXJsIHRvb2w6IE9PTSBoYW5kbGluZyBmaXhlcworCistIGN1cmwgdG9vbDogcmV2aWV3ZWQgY29kZSBtb3ZlZCB0byB0b29sXyouW2NoXSBmaWxlcworCistIGN1cmwgdG9vbDogT09NIGhhbmRsaW5nIGZpeGVzCisKKy0gY3VybCB0b29sOiBPT00gaGFuZGxpbmcgZml4ZXMKKworLSBjdXJsIHRvb2w6IE9PTSBoYW5kbGluZyBmaXhlcworCistIGN1cmwgdG9vbDogaGVhZGVyIGluY2x1c2lvbiBhZGp1c3RtZW50CisKKy0gY3VybCB0b29sOiBzeW1ib2wgY2hlY2sgYWRqdXN0bWVudAorCistIGN1cmwgdG9vbDogaGVhZGVyIGluY2x1c2lvbiBhZGp1c3RtZW50CisKKy0gY3VybCB0b29sOiBjb2RlIG1vdmVkIHRvIHRvb2xfKi5bY2hdIGZpbGVzCisKK0RhbmllbCBTdGVuYmVyZyAoNCBPY3QgMjAxMSkKKy0gY3VybF9zaGFyZV9jbGVhbnVwOiBhdm9pZCBjb21waWxlciB3YXJuaW5nCisgIAorICBNb3ZlIHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB0byB3aXRoaW4gdGhlICNpZmRlZgorCistIHN0cnVjdCBDdXJsX3NoYXJlOiBwcm92aWRlIHNzbHNlc3Npb24gdW5jb25kaXRpb25hbGx5CisgIAorICBJdCBtYWtlcyBtdWNoIG5pY2VyIGFuZCBsZXNzIGNvbnZ1bHV0ZWQgY29kZSBldmVyeXdoZXJlIGlmIHRoaXMgc3RydWN0CisgIG1lbWJlciBpcyBhbHdheXMgcHJlc2VudCBldmVuIHdoZW4gbGliY3VybCBpcyBidWlsdCB3aXRob3V0IFNTTCBzdXBwb3J0LgorICAKKyAgVGhpcyByZXZlcnRzIHBhcnRzIG9mIGNvbW1pdCAxNWUzZTQ1MTcwMjM5NmUKKworLSBmdHA6IGltcHJvdmVkIHRoZSBmYWlsZWQgUE9SVCBob3N0IG5hbWUgcmVzb2x2ZWQgZXJyb3IgbWVzc2FnZQorCistIGNvZGVwb2xpY2luZworCistIHNzcGkgYnVpbGQgZml4CisgIAorICBkZWZpbmUgYXdheSBDdXJsX250bG1fc3NwaV9jbGVhbnVwKCkgd2hlbiBubyB3aW5kb3dzIFNTUEkgYnVpbGQKKworLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBzbXRwOiBBZGRlZCBzdXBwb3J0IGZvciBOVExNIGF1dGhlbnRpY2F0aW9uCisgIAorICBNb2RpZmllZCBzbXRwX2VuZG9mcmVzcCgpIHRvIGRldGVjdCBOVExNIGZyb20gdGhlIHNlcnZlciBzcGVjaWZpZWQgbGlzdAorICBvZiBzdXBwb3J0ZWQgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcy4KKyAgCisgIE1vZGlmaWVkIHNtdHBfYXV0aGVudGljYXRlKCkgdG8gc3RhcnQgdGhlIHNlbmRpbmcgb2YgdGhlIE5UTE0gZGF0YS4KKyAgCisgIEFkZGVkIHNtdHBfYXV0aF9udGxtX3R5cGUxX21lc3NhZ2UoKSB3aGljaCBjcmVhdGVzIGEgTlRMTSB0eXBlLTEKKyAgbWVzc2FnZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IGF1dGhlbnRpY2F0ZSgpIHRvIHN0YXJ0IHRoZSBzZW5kaW5nCisgIG9mIGRhdGEgYW5kIGJ5IHNtdHBfc3RhdGVfYXV0aF9udGxtX3Jlc3AoKSB3aGVuIHRoZSBBVVRIIGNvbW1hbmQKKyAgZG9lc24ndCBjb250YWluIHRoZSB0eXBlLTEgbWVzc2FnZSBhcyBwYXJ0IG9mIHRoZSBpbml0aWFsIHJlc3BvbnNlLgorICBUaGlzIGxhY2sgb2YgaW5pdGlhbCByZXNwb25zZSBjYW4gaGFwcGVuIGlmIGFuIE9PTSBlcnJvciBvY2N1cnMgb3IgdGhlCisgIHR5cGUtMSBtZXNzYWdlIGlzIGxvbmdlciB0aGFuIDUwNCBjaGFyYWN0ZXJzLiBBcyB0aGUgbWFpbiBBVVRIIGNvbW1hbmQKKyAgaXMgbGltaXRlZCB0byA1MTIgY2hhcmFjdGVyIHRoZSBkYXRhIGhhcyB0byBiZSB0cmFuc21pdHRlZCBpbiB0d28KKyAgcGFydHM7IG9uZSBjb250YWluaW5nIHRoZSBBVVRIIE5UTE0gYW5kIHRoZSBzZWNvbmQgY29udGFpbmluZyB0aGUKKyAgdHlwZS0xIG1lc3NhZ2UuCisgIAorICBBZGRlZCBzbXRwX3N0YXRlX2F1dGhfbnRsbV90eXBlMm1zZ19yZXNwKCkgd2hpY2ggaGFuZGxlcyB0aGUgaW5jb21pbmcKKyAgdHlwZS0yIG1lc3NhZ2UgYW5kIHNlbmRzIGFuIG91dGdvaW5nIHR5cGUtMyBtZXNzYWdlLiBUaGlzIHR5cGUtMgorICBtZXNzYWdlIGlzIHNlbnQgYnkgdGhlIHNlcnZlciBpbiByZXNwb25zZSB0byBvdXIgdHlwZS0xIG1lc3NhZ2UuCisgIAorICBNb2RpZmllZCBzbXRwX3N0YXRlX2F1dGhfcmVzcCgpIHRvIGhhbmRsZSB0aGUgcmVzcG9uc2UgdG86IHRoZSBBVVRICisgIE5UTE0gd2l0aG91dCB0aGUgaW5pdGlhbCByZXNwb25zZSBhbmQgdGhlIHR5cGUtMiByZXNwb25zZS4KKyAgCisgIE1vZGlmaWVkIHNtdHBfZGlzY29ubmVjdCgpIHRvIGNsZWFudXAgdGhlIE5UTE0gU1NQSSBzdGFjay4KKworLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBDdXJsX250bG1fY3JlYXRlX3R5cGVYX21lc3NhZ2U6IEFkZGVkIHRoZSBvdXRsZW4gcGFyYW1ldGVyCisgIAorICBBZGRlZCB0aGUgb3V0cHV0IG1lc3NhZ2UgbGVuZ3RoIGFzIGEgcGFyYW1ldGVyIHRvIGJvdGgKKyAgQ3VybF9udGxtX2NyZWF0ZV90eXBlMV9tZXNzYWdlKCkgYW5kIEN1cmxfbnRsbV9jcmVhdGVfdHlwZTNfbWVzc2FnZSgpCisgIGZvciB1c2UgYnkgZnV0dXJlIGZ1bmN0aW9ucyB0aGF0IHJlcXVpcmUgaXQuCisgIAorICBVcGRhdGVkIGN1cmxfbnRsbS5jIHRvIGNhdGVyIGZvciB0aGUgZXh0cmEgcGFyYW1ldGVyIG9uIHRoZXNlIHR3bworICBmdW5jdGlvbnMuCisKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgc210cDogR2VuZXJhbCB0aWR5IHVwIHJlYWR5IGZvciBhZGRpbmcgTlRMTSBzdXBwb3J0CisgIAorICBDaGFuZ2VkIHRoZSBuYW1lIG9mIHZhcmlhYmxlIGwsIGluIHNldmVyYWwgZnVuY3Rpb25zLCB3aGljaCByZXByZXNlbnRzCisgIHRoZSBsZW5ndGggb2Ygc3RyaW5ncyBiZWluZyBzZW50IHRvIHRoZSBzZXJ2ZXIsIHRvIGxlbiB3aGljaCBpcyBtb3JlCisgIG1lYW5pbmdmdWwgYW5kIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBjb2RlIGluIHNtdHAuYyBhbmQgZWxzZXdoZXJlLgorICAKKyAgUmV3b3JrZWQgc210cF9hdXRoZW50aWNhdGUoKSB0byBiZSBzaW1wbGVyIGFuZCBlYXNpZXIgdG8gZm9sbG93LgorICBWYXJpYWJsZXMgYW5kIG5vdyBpbml0aWFsaXNlZCBpbiB0aGVpciBkZWZpbml0aW9ucyBhbmQgaWYgbm8gdXNlcm5hbWUKKyAgYW5kIHBhc3N3b3JkIGFyZSBzcGVjaWZpZWQgdGhlIGZ1bmN0aW9uIHNldHMgdGhlIHN0YXRlIHRvIFNNVFBfU1RPUCBhbmQKKyAgcmV0dXJucyBpbW1lZGlhdGVseSwgcmF0aGVyIHRoYW4gYmVpbmcgcGFydCBvZiBhIGh1Z2UgaWYgc3RhdGVtZW50LgorCitZYW5nIFRzZSAoMyBPY3QgMjAxMSkKKy0gY3VybCB0b29sOiByZXZpZXdlZCBjb2RlIG1vdmVkIHRvIHRvb2xfKi5bY2hdIGZpbGVzCisKK0RhbmllbCBTdGVuYmVyZyAoMyBPY3QgMjAxMSkKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgc210cF9tYWlsOiBmaXhlZCBhbm90aGVyIG1lbW9yeSBsZWFrCisgIAorICAuLi4gaW50cm9kdWNlZCBpbiA3ZjMwNGFiODRmNTYwYworCistIFtEb21pbmlxdWUgTGV1ZW5iZXJnZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBtNDogVXNlIHggaW4gb3JkZXIgdG8gYXZvaWQgdmFyaWFibGUgJ3gnIHNldCBidXQgbm90IHVzZWQgWy1XZXJyb3I9dW51c2VkLWJ1dC1zZXQtdmFyaWFibGVdCisgIAorICBUaGlzIGVycm9yIGNvdWxkIGJlIGNhdXNlZCBieSBjb25maWd1cmUgc2NyaXB0cyBiZWluZyBydW4gd2l0aCAtV2Vycm9yCisgIC1XYWxsLCB3aGljaCB3b3VsZCBsZWFkIHRvIGxpYmN1cmwgYmVpbmcgZGV0ZWN0ZWQgYXMgdW51c2FibGUuCisKKy0gc2hhcmU6IGRvbid0IHVzZSBTU0wgdW5sZXNzIGVuYWJsZWQKKyAgCisgIERvbid0IGV2ZW4gZGVjbGFyZSB0aGUgc3RydWN0IG1lbWJlcnMgZm9yIGRpc2FibGVkIGZlYXR1cmVzCisgIAorICBJbnRyb2R1Y2luZyB0aGUgQ1VSTFNIRV9OT1RfQlVJTFRfSU4gcmV0dXJuIGNvZGUgZm9yIHRoZSBzaGFyZSBpbnRlcmZhY2UKKyAgd2hlbiB0cnlpbmcgdG8gc2V0IGEgc2hhcmluZyBvcHRpb24gdGhhdCBoYXMgYmVlbiBkaXNhYmxlZCAob3Igbm90CisgIGVuYWJsZWQpIGluIHRoZSBsaWJyYXJ5LgorCistIG11bHRpOiBwcm9ncmVzcyBmdW5jdGlvbiBhYm9ydCBtdXN0IGNsb3NlIGNvbm5lY3Rpb24KKyAgCisgIFdoZW4gdGhlIHByb2dyZXNzIGZ1bmN0aW9uIHJldHVybnMgdG8gY2FuY2VsIHRoZSByZXF1ZXN0LCB3ZSBtdXN0IG1hcmsKKyAgdGhlIGNvbm5lY3Rpb24gdG8gZ2V0IGNsb3NlZCBhbmQgaXQgbXVzdCBkbyB0byB0aGUgRE9ORSBzdGF0ZS4KKyAgCisgIGRvX2luaXQoKSBtdXN0IGJlIGNhbGxlZCBhcyBlYXJseSBhcyBwb3NzaWJsZSBzbyB0aGF0IHN0YXRlIHZhcmlhYmxlcworICBmb3IgbmV3IGNvbm5lY3Rpb25zIGFyZSByZXNldCBlYXJseS4gV2UgY291bGQgb3RoZXJ3aXNlIHNlZSB0aGF0IHRoZSBvbGQKKyAgdmFsdWVzIHdlcmUgc3RpbGwgdGhlcmUgd2hlbiBhIGNvbm5lY3Rpb24gd2FzIHRvIGJlIGRpc2Nvbm5lY3RlZCB2ZXJ5CisgIGVhcmx5IGFuZCBpdCB3b3VsZCBtYWtlIGl0IGJlaGF2ZSB3cm9uZ2x5LgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMTAvMDAwNi5odG1sCisgIFJlcG9ydGVkIGJ5OiBWbGFkaW1pciBHcmlzaGNoZW5rbworCistIHR1dG9yaWFsOiBjbGFyaWZ5IHRoZSBoYW5kbGUgc2hhcmluZyB3aGVuIHRyZWFkZWQKKyAgCisgIFByZXZpb3VzbHkgdGhlcmUgd2FzIHdvcmRpbmcgdGhhdCBtYWRlIHBlb3BsZSB1bmNlcnRhaW4gb2YgdGhlIGV4YWN0CisgIHJ1bGVzLgorICAKKyAgRmVlZGJhY2sgYnk6IEp1bGllbiBSb3llciBhbmQgR2VvcmcgTGlwcGl0c2NoCisgIFVSTDogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA5LzAzNTcuaHRtbAorCistIG11bHRpX3J1bnNpbmdsZTogY2hhbmdlIHN0YXRlIG9uIGNhbGxiYWNrIGFib3J0CisgIAorICBSZXBvcnRlZCBieTogTWFyY2luIEFkYW1za2kKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDkvMDMyOS5odG1sCisKK1lhbmcgVHNlICgzMCBTZXAgMjAxMSkKKy0gY3VybCB0b29sOiBmaXggc29tZSBtb3JlIE9PTSBoYW5kbGluZworCistIEZpeCBTU0wgZGlzYWJsZWQgYnVpbGRzIGJyb2tlbiB3aXRoICdTU0wgc2Vzc2lvbiBzaGFyaW5nJyBjb21taXQgNTc5M2JjMzcKKworRGFuaWVsIFN0ZW5iZXJnICgyOSBTZXAgMjAxMSkKKy0gc210cF9tYWlsOiBmaXggbWVtb3J5IGxlYWsKKyAgCisgIC4uLiBpbnRyb2R1Y2VkIGluIDdmMzA0YWI4NGY1NjBjCisKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgc210cF9tYWlsOiBBZGRlZCBzdXBwb3J0IHRvIE1BSUwgRlJPTSBmb3IgdGhlIG9wdGlvbmFsIFNJWkUgcGFyYW1ldGVyCisgIAorICBUaGUgc2l6ZSBvZiB0aGUgZW1haWwgY2FuIG5vdyBiZSBzZXQgdmlhIENVUkxPUFRfSU5GSUxFU0laRS4gVGhpcworICBhbGxvd3MgdGhlIGVtYWlsIHRvIGJlIHJlamVjdGVkIGJ5IHRoZSBzZXJ2ZXIsIGlmIHN1cHBvcnRlZCwgYW5kIHRoZQorICBtYXhpbXVtIHNpemUgaGFzIGJlZW4gY29uZmlndXJlZCBvbiB0aGUgc2VydmVyLgorCistIGN1cmx2ZXJoLmg6IG5leHQgcmVsZWFzZSB3aWxsIGJlIDcuMjMuMAorCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDU4OThhNmEwOWIyMTFmYzdlMgorICAKKyAgQnVtcGVkIG5leHQgcmVsZWFzZSB2ZXJzaW9uIHRvIGJlY29tZSA3LjIzLjAgZm9yIHRoZSBjaGFuZ2VzCisKK0RhbiBGYW5kcmljaCAoMjggU2VwIDIwMTEpCistIGN1cmxfZWFzeV9zZXRvcHQ6IEFkZGVkIHNjcCBhbmQgc2Z0cCB0byB0aGUgVVJMIHNlY3Rpb24KKworRGFuaWVsIFN0ZW5iZXJnICgyOCBTZXAgMjAxMSkKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgY3VybF9lYXN5X3NldG9wdDogQSBicmllZiB0aWR5IHVwCisgIAorICBTbGlnaHQgcmV3b3JkaW5nIG9mIHRoZSBDVVJMT1BUX1VSTCBTTVRQIHN1Yi1zZWN0aW9uLgorICAKKyAgQ29ycmVjdGVkIHRoZSBpbmNvcnJlY3QgdXNlIG9mIGh5cGhlbnMgb24gdGhlIHRocmVlIHVzZXMgb2YKKyAgInplcm8tdGVybWluYXRlZCIgd2l0aCAiemVybyB0ZXJtaW5hdGVkIiB0byBtYXRjaCB0aGUgcmVzdCBvZiB0aGUKKyAgZG9jdW1lbnQuCisgIAorICBDb3JyZWN0ZWQgdGhlIHVzZSBvZiBhbiBvdXQgb2YgcGxhY2UgaHlwaGVuIGluIENVUkxPUFRfTk9QUk9YWSBzZWN0aW9uLgorCistIGNvbmZpZ3VyZSBvcGVuc3NsIHZlcnNpb24gY2hlY2s6IGhhbmRsZSBsYWNrIG9mIEwgc3VmZml4CisgIAorICBJdCBzZWVtcyBzb21lIHZlcnNpb25zIG9mIHRoZSBPcGVuU1NMIHZlcnNpb24gZGVmaW5lcyBkb24ndCBjb21lIHdpdGggTAorICBhcHBlbmRlZCB0byB0aGUgbnVtYmVyLCBzbyBsZXQncyBkZWFsIHdpdGggdGhhdCBuaWNlbHkuCisKKy0gW0FsZWphbmRybyBBbHZhcmV6IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgU1NMIHNlc3Npb24gc2hhcmluZyBzdXBwb3J0IGFkZGVkCisgIAorICBXaXRoIGxvY2tpbmcsIHBsdXMgdGVzdCwgcGx1cyBkb2N1bWVudGF0aW9uCisKK1lhbmcgVHNlICgyOCBTZXAgMjAxMSkKKy0gY3VybCB0b29sOiBhZGp1c3QgaGVhZGVyIGNhbGxiYWNrIHNpbmdsZSBjYWxsIHdyaXRlIGxpbWl0IHdhcm5pbmcKKyAgCisgIE1heGltdW0gYW1vdW50IG9mIGRhdGEgYSBoZWFkZXIgY2FsbGJhY2sgaXMgc3VwcG9zZWQgdG8gZ2V0IGluCisgIGEgc2luZ2xlIGNhbGwgZnJvbSBsaWJjdXJsIGlzIGxpbWl0ZWQgYnkgdGhlIGxvd2VzdCB2YWx1ZSBvZgorICBDVVJMX01BWF9XUklURV9TSVpFIGFuZCBDVVJMX01BWF9IVFRQX0hFQURFUi4KKworRGFuaWVsIFN0ZW5iZXJnICgyOCBTZXAgMjAxMSkKKy0gbXVsdGkgZG9jczogZXh0ZW5kZWQgdGhlIG11bHRpX3NvY2tldCBBUEkgZGVzY3JpcHRpb24KKworLSB0ZXN0cy9SRUFETUU6IGV4dGVuZGVkIGFuZCByZWZvcm1hdHRlZAorCitZYW5nIFRzZSAoMjcgU2VwIDIwMTEpCistIFtBbGJlcnQgQ2hpbiBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGNvbmZpZ3VyZSAtIG00OiBtYWtlIENVUkxfQ0hFQ0tfREVGIGlnbm9yZSBsZWFkaW5nIHdoaXRlc3BhY2Ugb24gc3ltYm9sIGRlZgorICAKKyAgV2hlbiB1c2luZyBTdW4gQyBjb21waWxlciB0aGUgcHJlcHJvY2Vzc29yIHNvbWVob3cgaW5zZXJ0cyBhbiBleHRyYSBzcGFjZQorICBpbiBmcm9udCBvZiByZXBsYWNlZCBzeW1ib2wsIGJyZWFraW5nIENVUkxfQ0hFQ0tfREVGIG1hY3JvLiBUbyB3b3JrYXJvdW5kCisgIHRoaXMsIG1hY3JvIENVUkxfQ0hFQ0tfREVGIG5vdyBpZ25vcmVzIGFsbCBsZWFkaW5nIHdoaXRlc3BhY2UgaW4gZnJvbnQgb2YKKyAgc3ltYm9sIHN1YnN0aXR1dGlvbiByZXN1bHQuCisKK0d1ZW50ZXIgS25hdWYgKDI3IFNlcCAyMDExKQorLSBBZGRlZCBTUE5FR08gdG8gTmV0V2FyZSBidWlsZC4KKworWWFuZyBUc2UgKDI2IFNlcCAyMDExKQorLSBjdXJsIHRvb2w6IGZpeCBhIGNvbXBpbGVyIHdhcm5pbmcKKworLSBjdXJsIHRvb2w6IGZpeCBzb21lIE9PTSBoYW5kbGluZyAtIGY0ODUzZGI1IGZvbGxvdy11cAorCistIGN1cmwgdG9vbDogZml4IHNvbWUgT09NIGhhbmRsaW5nCisKKy0gcmVtb3ZlIHNob3J0LWxpdmVkIENVUkxfV1JJVEVGVU5DX09VVF9PRl9NRU1PUlkKKworR3VlbnRlciBLbmF1ZiAoMjYgU2VwIDIwMTEpCistIEFkZGVkIHVuc2lnbmVkIGNoYXIqIHRvIF9jdXJsX2lzX2RlYnVnX2NiLgorCitEYW5pZWwgU3RlbmJlcmcgKDI2IFNlcCAyMDExKQorLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBzbXRwX2Nvbm5lY3Q6IHVzZSBkZWZpbmVkIGJ1ZmZlciBsZW5ndGggZm9yIGhvc3RuYW1lCisKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgQ3VybF9udGxtX2NyZWF0ZV90eXBlM19tZXNzYWdlOiBUaWRpZWQgdXAgdGhlIHVzZSBvZiBDdXJsX2dldGhvc3RuYW1lLgorICAKKyAgUmVtb3ZlZCB0aGUgY29kZSB0aGF0IHN0cmlwZWQgb2ZmIHRoZSBkb21haW4gbmFtZSB3aGVuIEN1cmxfZ2V0aG9zdG5hbWUKKyAgcmV0dXJuZWQgdGhlIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSBhcyB0aGUgZnVuY3Rpb24gaGFzIGJlZW4KKyAgdXBkYXRlZCB0byByZXR1cm4gdGhlIHVuLXF1YWxpZmllZCBob3N0IG5hbWUuCisgIAorICBSZXBsYWNlZCB0aGUgdXNlIG9mIEhPU1ROQU1FX01BWCBhcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGluIHRoZSBjYWxsCisgIHRvIEN1cmxfZ2V0aG9zdG5hbWUgd2l0aCBzaXplb2YoaG9zdCkgYXMgdGhpcyBpcyBzYWZlciBzaG91bGQgdGhlIGJ1ZmZlcgorICBzaXplIGV2ZXIgYmUgY2hhbmdlZC4KKworLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBIT1NUTkFNRV9NQVg6IE1vdmVkIHRvIGN1cmxfZ2V0aG9zdG5hbWUuaAorICAKKyAgTW92ZWQgSE9TVE5BTUVfTUFYICNkZWZpbmUgaW50byBjdXJsX2dldGhvc3RuYW1lLmggcmF0aGVyIHRoYW4gYmVpbmcKKyAgbG9jYWxseSBkZWZpbmVkIGluIGN1cmxfZ2V0aG9zdG5hbWUuYywgY3VybF9udGxtX21zZ3MuYyBhbmQgc210cC5jLgorCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGQyYTQ3MDIxYzBhNgorCitZYW5nIFRzZSAoMjUgU2VwIDIwMTEpCistIFEmRCBmaXggaGVhZGVyIGluY2x1c2lvbiBvcmRlcgorCistIGFsbG93IHdyaXRlIGNhbGxiYWNrcyB0byBpbmRpY2F0ZSBPT00gdG8gbGliY3VybAorICAKKyAgQWxsb3cgKCpjdXJsX3dyaXRlX2NhbGxiYWNrKSB3cml0ZSBjYWxsYmFja3MgdG8gcmV0dXJuCisgIENVUkxfV1JJVEVGVU5DX09VVF9PRl9NRU1PUlkgdG8gcHJvcGVybHkgaW5kaWNhdGUgbGliY3VybCBvZiBPT00gY29uZGl0aW9ucworICBpbnNpZGUgdGhlIGNhbGxiYWNrIGl0c2VsZi4KKworR3VlbnRlciBLbmF1ZiAoMjUgU2VwIDIwMTEpCistIENoYW5nZWQgc29tZSBtYWluIG1ha2VmaWxlIHRhcmdldHMuCisKK0RhbmllbCBTdGVuYmVyZyAoMjUgU2VwIDIwMTEpCistIGN1cmxfbXVsdGlfZmRzZXQ6IGF2b2lkIEZEX1NFVCBvdXQgb2YgYm91bmRzCisgIAorICBJZiBhIHNvY2tldCBpcyBsYXJnZXIgdGhhbiBGRF9TRVRTSVpFLCBhdm9pZCB1c2luZyBGRF9TRVQoKSBvbiB0aGUKKyAgcGxhdGZvcm1zIHdoZXJlIHRoaXMgaXMgcG9zc2libGUuCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0MTMyNzQKKyAgUmVwb3J0ZWQgYnk6IFRpbSBTdGFybGluZworCitHdWVudGVyIEtuYXVmICgyNSBTZXAgMjAxMSkKKy0gRml4ZWQgTWluR1cgZXhhbXBsZXMgbWFrZWZpbGUuCisKKy0gTmV0V2FyZSBtYWtlZmlsZSB0d2Vha3MgdG8gc2VsZWN0IGRpZmZlcmVudCBidWlsZHMuCisKK0RhbmllbCBTdGVuYmVyZyAoMjUgU2VwIDIwMTEpCistIFBPU1Q6IGFsd2F5cyBzZXQgcG9zdGZpZWxkc2l6ZQorICAKKyAgV2hlbiB3ZSB1c2UgYmluYXJ5IHBvc3RzIGFuZCByZWd1bGFyIG9uZXMgaW50ZXJtaXhlZCBvbiBhIHNpbmdsZSBjb21tYW5kCisgIGxpbmUsIHdlIGNhbm5vdCBkbyBzdHJsZW4oKSBldGMgb24gdGhlIGRhdGEgdG8gZmlndXJlIG91dCB0aGUgbGVuZ3RoCisgICh3aGVuIGluc2VydGluZyAnJicgYW5kIG1vcmUpLiBXZSBtdXN0IHRoZXJlZm9yZSBrZWVwIHRyYWNrIG9mIHRoZSBwb3N0CisgIGRhdGEgbGVuZ3RoLiBUaGVuIHdlIGFsc28gZW5kIHVwIHNldHRpbmcgdGhlIGxpYmN1cmwgb3B0aW9uIHdpdGggdGhlCisgIGtub3duIHNpemUsIHNvIHRoYXQgd2UgZG9uJ3QgcmlzayB0aGF0IGxpYmN1cmwgd2lsbCBkbyBzdHJsZW4oKSBvbiB0aGUKKyAgZGF0YS4KKyAgCisgIFRoaXMgaGFzIHRoZSBtaW5vciBzaWRlLWVmZmVjdCB0aGF0IC0tbGliY3VybCBzb3VyY2UgY29kZXMgbm93IGFsd2F5cworICB3aWxsIHVzZSBDVVJMT1BUX1BPU1RGSUVMRFNJWkUgYnV0IEkgZG9uJ3QgY29uc2lkZXIgdGhhdCB0ZXJyaWJseQorICBkYW1hZ2luZy4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQxMzE4MQorICBSZXBvcnRlZCBieTogVGFuZWxpIFbkaORrYW5nYXMKKworWWFuZyBUc2UgKDI0IFNlcCAyMDExKQorLSBjdXJsIHRvb2w6IGZpeCBhIGNvbXBpbGVyIHdhcm5pbmcKKworLSBjdXJsIHRvb2w6IHJldmlld2VkIGNvZGUgbW92ZWQgdG8gdG9vbF8qLltjaF0gZmlsZXMKKworR3VlbnRlciBLbmF1ZiAoMjQgU2VwIDIwMTEpCistIEFkZGVkIGhlYWRlciB0byBiZSBpbmNsdWRlZCBieSBkaXN0IHNjcmlwdC4KKyAgCisgIFByb2JhYmx5IHRoZSB3cm9uZyBwbGFjZSwgYnV0IEkgZG9udCBrbm93IGJldHRlci4KKworWWFuZyBUc2UgKDI0IFNlcCAyMDExKQorLSBjdXJsIHRvb2w6IGZpeCBzb21lIE9PTSBoYW5kbGluZyBpc3N1ZXMKKworRGFuaWVsIFN0ZW5iZXJnICgyNCBTZXAgMjAxMSkKKy0gaHR0cCBoZWFkZXI6IGFsbG93IENvbnRlbnQtTGVuZ3RoIHRvIGJlIHJlcGxhY2VkCisgIAorICBJbiBzb21lIGNhc2VzIENvbnRlbnQtTGVuZ3RoOiBjb3VsZG4ndCBiZSByZXBsYWNlZCBieSBhbiBhcHBsaWNhdGlvbgorICAKKyAgQWxzbywgaW5kZW50ZWQgc29tZSBjb2RlIHByb3Blcmx5CisKK0d1ZW50ZXIgS25hdWYgKDIzIFNlcCAyMDExKQorLSBNaW5HVzY0IGhhcyB0aGlzIHByb3RvdHlwZSBhbHJlYWR5LgorCistIEZpeGVkIHNjYW5mIGZvcm1hdCBmb3IgV09SRCA9IHVuc2lnbmVkIHNob3J0LgorCistIEFkZGVkIFdpbjMyLW9ubHkgc2FtcGxlcy4KKworLSBBZGRlZCBhIHdvcmthcm91bmQgZm9yIHByaW50aW5nIHNpemVfdC4KKworRGFuaWVsIFN0ZW5iZXJnICgyMiBTZXAgMjAxMSkKKy0gQ3VybF9wZ3JzU3RhcnROb3c6IGtlZXAgSEVBREVSU19PVVQgc2V0CisgIAorICBUbyBhdm9pZCB0aGF0IHRoZSBwcm9ncmVzcyBtZXRlciBoZWFkZXJzIGdldCBvdXRwdXQgYmV0d2VlbiBlYWNoCisgIHRyYW5zZmVyLCBtYWtlIHN1cmUgdGhlIGJpdHMgZ2V0cyBrZXB0IHdoZW4gKHJlLSlpbml0ZWQuCisgIAorICBSZXBvcnRlZCBieTogQ2hyaXN0b3BoZXIgU3RvbmUKKworWWFuZyBUc2UgKDIyIFNlcCAyMDExKQorLSBjdXJsIHRvb2w6IGZpeCBzb21lIE9PTSBoYW5kbGluZyBpc3N1ZXMKKworLSBjdXJsIHRvb2w6IHJldmlld2VkIGNvZGUgbW92ZWQgdG8gdG9vbF8qLltjaF0gZmlsZXMKKyAgCisgIG15X3NldG9wdCBhbmQgbXlfc2V0b3B0X3N0ciBubyBsb25nZXIgaWdub3JlcyBjdXJsX2Vhc3lfc2V0b3B0IHJlc3VsdC4KKyAgCisgIEZpeGVkIHNvbWUgT09NIGhhbmRsaW5nIGlzc3Vlcy4KKworR3VlbnRlciBLbmF1ZiAoMjIgU2VwIDIwMTEpCistIEFkZGVkIE5ldFdhcmUgZXhhbXBsZXMgbWFrZWZpbGUuCisKK1lhbmcgVHNlICgyMiBTZXAgMjAxMSkKKy0gTlRMTV9XQjogZml4IGRpc2FibGluZyBvZiBOVExNX1dCIHdoZW4gTlRMTSBpcyBkaXNhYmxlZAorCitEYW5pZWwgU3RlbmJlcmcgKDIxIFNlcCAyMDExKQorLSB0ZXN0IDgxNDogc210cCB3aXRob3V0IC0tbWFpbC1mcm9tCisgIAorICBWZXJpZmllcyB0aGUgZml4IGZyb20gY29tbWl0IDMyMmYzZDVhZjcwOTMKKworLSBbR2lzbGUgVmFuZW0gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBzbXRwOiB3aXRob3V0IGEgTUFJTF9GUk9NLCBzZW5kIGJsYW5rIE1BSUwgRlJPTQorICAKKyAgSSB0aGluayBjdXJsIHNob3VsZCBpZ25vcmUgdGhpcyBjYXNlIGFuZCBzbXRwLmMgc2hvdWxkIHRlc3QgZm9yIHRoaXMuCisgIFNpbmNlIFJGQy0yODIxIHNlZW1zIHRvIGFsbG93IGEgIm51bGwgcmV2ZXJzZS1wYXRoIi4gUmVmLiAgIk1BSUwKKyAgRlJPTTo8PiIgaW4gc2VjdGlvbiAzLjcsIHBhZ2UgMjUuCisKKy0gW0RhdmUgUmVpc25lciBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGxpYi9odHRwOiBhZGQgbWlzc2luZyB3aGl0ZXNwYWNlIGluIHZlcmJvc2Ugb3V0cHV0CisgIAorICBFeGFtcGxlOgorICAqIHVwbG9hZCBjb21wbGV0ZWx5IHNlbnQgb2ZmOiAzNW91dCBvZiAzNSBieXRlcworICAKKyAgU2hvdWxkIGJlOgorICAqIHVwbG9hZCBjb21wbGV0ZWx5IHNlbnQgb2ZmOiAzNSBvdXQgb2YgMzUgYnl0ZXMKKworR3VlbnRlciBLbmF1ZiAoMjEgU2VwIDIwMTEpCistIEFub3RoZXIgTWluR1cgZXhhbXBsZSBtYWtlZmlsZSB0d2Vhay4KKworLSBGaXhlZCBzYW1wbGUgdG8gY29tcGlsZSBmb3IgV2luZG93cyBwbGF0Zm9ybS4KKworWWFuZyBUc2UgKDIxIFNlcCAyMDExKQorLSBjdXJsIHRvb2w6IG1ha2UgbXlfc2V0b3B0IGlnbm9yZSBjdXJsX2Vhc3lfc2V0b3B0IHJlc3VsdCBhZ2Fpbi4KKyAgCisgIFJlbGF0ZWQgY29kZSBub3QgcmVhZHkgeWV0IGZvciB0aGlzIGtpbmQgb2YgY2hlY2tzLgorCitHdWVudGVyIEtuYXVmICgyMSBTZXAgMjAxMSkKKy0gQ2hhbmdlZCBzdWZmaXggcnVsZXMgdG8gcGF0dGVybiBydWxlcy4KKyAgCisgIFN1ZmZpeCBydWxlcyBjYW5ub3QgaGF2ZSBhbnkgcHJlcmVxdWlzaXRlcyBvZiB0aGVpciBvd24uCisKKy0gQWRkZWQgZGVwZW5kZW5jeSBzbyB0aGF0IGN1cmxidWlsZC5oIGlzIGNyZWF0ZWQuCisKKy0gU29tZSBtb3JlIE1pbkdXIGJ1aWxkIHR3ZWFrcy4KKyAgCisgIEFkZGVkIGVudnZhcnMgdG8gc3BlY2lmeSBPcGVuU1NMIGluY2x1ZGUsIGxpYnBhdGggYW5kIGxpYi4KKyAgQWRkZWQgcnVsZSB0byBjcmVhdGUgY3VybGJ1aWxkLmggZnJvbSBjdXJsYnVpbGQuaC5kaXN0LgorCitZYW5nIFRzZSAoMjEgU2VwIDIwMTEpCistIGN1cmwgdG9vbDogcmV2aWV3ZWQgY29kZSBtb3ZlZCB0byB0b29sXyouW2NoXSBmaWxlcworICAKKyAgbXlfc2V0b3B0IGFuZCBteV9zZXRvcHRfc3RyIG5vIGxvbmdlciBpZ25vcmVzIGN1cmxfZWFzeV9zZXRvcHQgcmVzdWx0LgorICAKKyAgRml4ZWQgc29tZSBPT00gaGFuZGxpbmcgaXNzdWVzLgorCistIGN1cmwgdG9vbDogcmV2aWV3ZWQgY29kZSBtb3ZlZCB0byB0b29sXyouW2NoXSBmaWxlcworICAKKyAgT3ZlcmhhdWxlZCBGaW5kV2luMzJDQUNlcnQoKQorCitHdWVudGVyIEtuYXVmICgyMCBTZXAgMjAxMSkKKy0gQSBidW5jaCBvZiBNaW5HVyBidWlsZCB0d2Vha3MuCisgIAorICBBbGwgcGF0aHMgdG8gZGVwZW5kZW5jaWVzIG5vdyBxdW90ZWQ7IHN5bmNlZCBleGFtcGxlcyBtYWtlZmlsZS4KKworLSBDaGFuZ2VkIFdpbmRvd3MgNjRiaXQgT1MgZGVmaW5lIHRvIHg4Nl82NC4KKyAgCisgIEFsc28gYWRkZWQgY2hlY2sgZm9yIF9feDg2XzY0X18gZGVmaW5lIHNpbmNlIE1pbkdXNjQgc2VlbXMgdG8gZGVmaW5lCisgIHRoZSBfTV9YNjQgbWFjcm8gdGhyb3VnaCBhIGhlYWRlciBub3QgYXZhaWxhYmxlIGZvciBjb25maWctd2luMzIuaC4KKworLSBBbHNvIHNraXAgY2VydHMgbWFza2VkIGFzIENLVF9OU1NfVFJVU1RfVU5LTk9XTi4KKyAgCisgIEZpeCBwb3N0ZWQgYnkgVG9tYXMgSG9nZXIgPHRob2dlciByZWRoYXQgY29tPi4KKworLSBBZGRlZCBfV0lOMzJfV0lOTlQgZGVmaW5lIGZvciBJUHY2IGJ1aWxkcy4KKworRGFuaWVsIFN0ZW5iZXJnICgyMCBTZXAgMjAxMSkKKy0gQ3VybF9mb2xsb3c6IGhhbmRsZSByZWRpcmVjdHMgdG8gIi8vaG9zdG5hbWUvcGF0aCIKKworWWFuZyBUc2UgKDE5IFNlcCAyMDExKQorLSBjdXJsIHRvb2w6IHRydWx5IGZpeCBjb21waWxlciB3YXJuaW5nCisKKy0gY3VybCB0b29sOiBmaXggY29tcGlsZXIgd2FybmluZworCistIGN1cmwgdG9vbDogcmV2aWV3ZWQgY29kZSBtb3ZlZCB0byB0b29sXyouW2NoXSBmaWxlcworCitEYW5pZWwgU3RlbmJlcmcgKDE4IFNlcCAyMDExKQorLSBDVVJMT1BUX1VSTCBkb2NzOiBubyBuZWVkIHRvIG1lbnRpb24gZnVuY3Rpb24gbmFtZXMKKworLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBDVVJMT1BUX1VSTDogRXhwYW5kZWQgVVJMIGRlc2NyaXB0aW9uCisgIAorICBFeHBhbmRlZCB0aGUgc2VjdGlvbiBhYm91dCBDVVJMT1BUX1VSTCB0byBpbmNsdWRlIHRoZSBmb3JtYXQgb2YgdGhlIFVSTAorICBhbmQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzIHJlbGF0aW5nIHRvIHNwZWNpZmljIHByb3RvY29scy4KKworLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBDdXJsX2dldGhvc3RuYW1lOiByZXR1cm4gdW4tcXVhbGlmaWVkIG1hY2hpbmUgbmFtZQorICAKKyAgRml4ZWQgQ3VybF9nZXRob3N0bmFtZSgpIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHVuLXF1YWxpZmllZAorICBtYWNoaW5lIG5hbWUgcmF0aGVyIHRoYW4gYmVpbmcgZGVwZW5kZW50IG9uIHRoZSBzb2NrZXQgcHJvdmlkZXIuCisgIAorICBOb3RlOiBUaGUgcmV0dXJuIG9mIGdldGVudigiQ1VSTF9HRVRIT1NUTkFNRSIpIGlzIGFsc28gcGFyc2VkIGluIGNhc2UKKyAgdGhlIGRldmVsb3BlciAvIHRlc3QgaGFybmVzcyBwcm92aWRlZCBhIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSBhcworICBpdCdzIHZhbHVlIGFzIHdlbGwuCisKK1lhbmcgVHNlICgxOCBTZXAgMjAxMSkKKy0gY3VybCB0b29sOiBjcmVhdGUgdG9vbF9teWZ1bmMuW2NoXSB3aGljaCBsYXRlciBvbiB3aWxsIGhvbGQgbXlfKiBmdW5jdGlvbnMKKyAgCisgIEFkZGl0aW9uYWxseSBmdW5jdGlvbiBteV91c2VyYWdlbnQoKSBub3cgcHJvdmlkZXMgZGVmYXVsdCBVc2VyLUFnZW50IHN0cmluZworCistIGN1cmwgdG9vbDogcmVvcmRlciBmcmVlX2NvbmZpZ19maWVsZHMoKSBmaWVsZCBoYW5kbGluZworICAKKyAgUmVvcmRlciBoYW5kbGluZyBvZiBmaWVsZHMgdG8gbWF0Y2ggc2FtZSBvcmRlciBhcyB0aGUgb25lIGdpdmVuIGJ5IGN1cnJlbnQKKyAgZGVmaW5pdGlvbiBvcmRlciBvZiAnQ29uZmlndXJhYmxlJyBzdHJ1Y3QgZmllbGRzLiBGaWVsZHMgY3VycmVudGx5IG5vdCBoYW5kbGVkCisgIG1hcmtlZCBmb3IgZnVydGhlciBpbnNwZWN0aW9uLgorCitHdWVudGVyIEtuYXVmICgxNyBTZXAgMjAxMSkKKy0gRml4ZWQgTWluR1cgV2luSUROIGxpYiBkZXBlbmRlbmN5LgorCitZYW5nIFRzZSAoMTcgU2VwIDIwMTEpCistIHRvb2xfY29udmVydC5jOiBmaXggbm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCistIGN1cmwgdG9vbDogYWRkIG5ldyBmaWxlcyB0byBTeW1iaWFuJ3MgLm1tcCBwcm9qZWN0IGZpbGUKKworLSBjdXJsIHRvb2w6IG1vdmUgJ0NvbmZpZ3VyYWJsZScgYW5kIGZyZWVfY29uZmlnX2ZpZWxkcygpIHRvIHRvb2xfY2ZnYWJsZS5bY2hdCisgIAorICBSZXZpZXdpbmcgZmllbGRzIGJlaW5nIGZyZWUnZCBpbiBmcmVlX2NvbmZpZ19maWVsZHMoKSBzdGlsbCBwZW5kaW5nCisKKy0gc3JjL3NldHVwLmg6IGFkZCBjb25kaXRpb25hbCBpbmNsdWRlIG9mIGFzc2VydC5oCisKKy0gY3VybCB0b29sOiBtb3ZlIHNvIGNhbGxlZCAnbXVsdGlfZmlsZXMnIHN0dWZmIGludG8gdG9vbF9tZmlsZXMuW2NoXQorICAKKyAgQWRkaXRpb25hbGx5IHNvbWUgY29kZSByZW9yZ2FuaXphdGlvbiBhbmQgZGlyZWN0IE9PTSBoYW5kbGluZyBmaXhlcywKKyAganVzdCBhbm90aGVyIHN0ZXAgdG93YXJkcyBmaXhpbmcgY3VybCB0b29sIGlzc3VlcyB1bmNvdmVyZWQgMjAxMS0wOS0xNQorCistIGN1cmwgdG9vbDogbW92ZSBjb252ZXJ0XyogZnVuY3Rpb25zIGludG8gdG9vbF9jb252ZXJ0LltjaF0KKyAgCisgIEFkZGl0aW9uYWxseSBmaXggZGF0YSB0eXBlIG9mIHJlc3VsdCB2YXJzIGZvciBpY29udigpIGNhbGxzCisKKy0gbWFpbi5jOiBjb252ZXJ0IEdldFN0cigpIGludG8gYSBtYWNybyB0byBlYXNlIGxlYWsgZGVidWdnaW5nCisKKy0gbWFpbi5jOiBkZS1vYmZ1c2NhdGUgYSBjb3VwbGUgZm9yLWxvb3AgZXhpdCBjb25kaXRpb25zCisKKy0gY3VybCB0b29sOiBmaXggYSBidW5jaCBvZiBkb3VibGUgZnJlZSdzIHVuY292ZXJlZCAyMDExLTA5LTE1CisgIAorICBSZS1lbmFibGluZyBNZW1vcnlUcmFja2luZyBjYXBhYmlsaXR5IG9uICdzcmMnIHN1YmRpcmVjdG9yeSBmaWxlcyBhbmQgdG9ydHVyZQorICB0ZXN0cyBoYXZlIHVuY292ZXJlZCBtYW55IGlzc3VlcyB3aGljaCB3ZXJlIGdvaW5nIHVubm90aWNlZCBpbiBjdXJsIHRvb2wuIFNvCisgIGhlcmUgd2UgZ28gZml4aW5nIHNvbWUgb2YgdGhlbS4gT3RoZXJzIHN0aWxsIHJlbWFpbiBhbmQgc2hvdWxkIGJlIGFkZHJlc3NlZAorICBBU0FQLCBnaXZlbiB0aGF0IGN1cmwgdG9vbCBpcyB1c2VkIGluIG91ciB0ZXN0IGhhcm5lc3MgYWxzbyBmb3IgdGVzdCBzZXJ2ZXIKKyAgc3RhcnQgdmVyaWZpY2F0aW9uIHB1cnBvc2VzLiBUaGVyZSBhcmUgZXZlbiBub24tc29ja2V0IGZpbGUgZGVzY3JpcHRvciBsZWFrcy4KKworLSBNYWtlIEN1cmxfc2FmZWZyZWUoKSBtYWNybyBhc3NpZ24gTlVMTCB0byBnaXZlbiBwb2ludGVyIHdoZW4gZnJlZSdkCisKKy0gY3VybCBNU1ZDIHByb2plY3QgZmlsZXM6IGFkanVzdCByZXNvdXJjZSBjb21waWxlciBpbmNsdWRlIHBhdGgKKworLSBzcmMvTWFrZWZpbGUudmM2OiBhZGp1c3QgcmVzb3VyY2UgY29tcGlsZXIgaW5jbHVkZSBwYXRoCisKKy0gY3VybCB0b29sOiByZS1lbmFibGUgTWVtb3J5VHJhY2tpbmcgY2FwYWJpbGl0eSBvbiAnc3JjJyBzdWJkaXJlY3RvcnkgZmlsZXMuCisgIAorICBVc2Ugc2FtZSBwcmVwcm9jZXNzb3IgbG9naWMgZm9yIGN1cmwgdG9vbCBNZW1vcnlUcmFja2luZyBhY3RpdmF0aW9uIGluIHNvdXJjZQorICBmaWxlcyBsb2NhdGVkIGluICdzcmMnIHN1YmRpcmVjdG9yeSBhcyB0aGUgb25lIHVzZWQgZm9yIGxpYmN1cmwgc291cmNlcy4KKworLSBmdHAuYzogYWRkIGEgY291cGxlIG9mIGZhaWx1cmUgbWVzc2FnZXMKKworRGFuIEZhbmRyaWNoICgxMyBTZXAgMjAxMSkKKy0gW3dhcnAga2F3YWRhIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgQ3VybF9hZGRfY3VzdG9tX2hlYWRlcnM6IHN1cHBvcnQgaGVhZGVycyB3aXRoIG5vIGRhdGEKKyAgCisgIEEgY3VzdG9tIEhUVFAgaGVhZGVyIGVuZGluZyBpbiBhIHNlbWljb2xvbiBpbnN0ZWFkIG9mIGEgY29sb24KKyAgd2lsbCBiZSB0cmVhdGVkIGFzIGEgaGVhZGVyIHRvIGJlIGFkZGVkIHdpdGhvdXQgYW55IGRhdGEKKyAgcG9ydGlvbi4KKworRGFuaWVsIFN0ZW5iZXJnICgxMyBTZXAgMjAxMSkKKy0gcHJvZ3Jlc3NmdW5jOiBhIHNpbXBsZSBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04gZXhhbXBsZQorCistIDcuMjIuMTogc3RhcnQgd29ya2luZworCistIFRIQU5LUzogMTYgbmV3IGNvbnRyaWJ1dG9ycyBmcm9tIDcuMjIuMAorCitWZXJzaW9uIDcuMjIuMCAoMTMgU2VwIDIwMTEpCisKK0RhbmllbCBTdGVuYmVyZyAoMTMgU2VwIDIwMTEpCistIFJFTEVBU0UtTk9URVM6IHJlYWR5IGZvciA3LjIyLjAKKworLSBjb2Rlc3R5bGU6IG1pbm9yIHdoaXRlc3BhY2UgZml4CisKKy0gW0plZmYgUG9obG1leWVyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgcG9sYXJzc2w6IGJ1aWxkIHdpdGggUG9sYXJTU0wtMS4wLjAKKyAgCisgIFdpdGggdGhpcyBmaXgsIGl0IHNob3VsZCB3b3JrIGZvciBQb2xhclNTTC0xLjAuMCAoYW5kIFNWTi0xMDkxIHRydW5rKQorICBhbmQgcmV0YWluIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIHZlcnNpb25zLiAoVGVzdGVkIHdpdGggMC4xNC4xKQorICAKKyAgUG9sYXJTU0wgc3RpbGwgZG9lc24ndCBwbGF5IG5pY2VseSB3aXRoIGN1cmwncyBDQSBidW5kbGUgKHdlIGRpc2N1c3NlZAorICB0aGlzIGJlZm9yZSkgYnV0IEkgd2FzIGF0IGxlYXN0IGFibGUgdG8gcmV0cmlldmUgdGhlCisgIGh0dHBzOi8vd3d3LmdtYWlsLmNvbS8gbG9naW4gcGFnZSB1c2luZyBhIG1vZGlmaWVkIGNhLWNlcnRpZmljYXRlcy5jcnQKKyAgZmlsZSB3aXRoIGFsbCAzIHZlcnNpb25zIG9mIFBvbGFyU1NMLgorCistIEJVR1M6IHNwZWxsZml4ZWQsIHNsaWdodGx5IHJlZm9ybWF0dGVkIGZvciB3ZWIgbG9va3MKKyAgCisgIFJlcG9ydGVkIGJ5OiBKZWZmIFBvaGxtZXllcgorCitEYW4gRmFuZHJpY2ggKDEyIFNlcCAyMDExKQorLSBEb2N1bWVudCBOVExNIHdpbmJpbmQgb3B0aW9ucyAoYW5kIGNhdmVhdHMpCisKK0RhbmllbCBTdGVuYmVyZyAoMTIgU2VwIDIwMTEpCistIEJVR1M6IHJlbnVtYmVyZWQgdG8gbG9vayBiZXR0ZXIgaW4gdGhlIHdlYiB2ZXJzaW9uCisKKy0gQlVHUzogcmV2YW1wZWQgYnVnIHJlcG9ydCBkb2N1bWVudGF0aW9uCisKK1lhbmcgVHNlICgxMiBTZXAgMjAxMSkKKy0gTWVudGlvbiB0aGF0IEJTRC1zdHlsZSBsd0lQIFRDUC9JUCBzdGFjayBzdXBwb3J0IG9uIFdpbmRvd3MgaXMgZXhwZXJpbWVudGFsLgorCistIGZ0cC5jOiBmaXggc29ja2V0IGxlYWsgdG9ydHVyZSB0ZXN0cyBkZXRlY3RlZCAyMDExLTA4LTMwCisgIAorICBBbHNvIGZpeCBpbmFwcHJvcHJpYXRlIGVycm9yIGhhbmRsaW5nIHdoZW4gc2VuZGluZyBmdHAgRVBSVCBvciBQT1JUIGNvbW1hbmRzLgorCitEYW5pZWwgU3RlbmJlcmcgKDExIFNlcCAyMDExKQorLSBUT0RPOiByZW1vdmUgNCBlbnRyaWVzLCBhZGQgb25lIG5ldworICAKKyAgWmVyby1jb3B5IGFuZCAiQXZvaWQgaGF2aW5nIHRvIHJlbW92ZS9yZWFkZCBoYW5kbGVzIiBhcmUgbm90IHJlYWxseQorICBmZWF0dXJlcyB3ZSB0aGluayBhcmUgd29ydGh3aGlsZSB0byBhZGQuIFJlbW92ZWQuCisgIAorICBTUlAgZmVhdHVyZXMgaGF2ZSBiZWVuIGFkZGVkIGFscmVhZHksIHJlbW92ZWQuCisgIAorICAxMS45IElQdjYgYWRkcmVzc2VzIHdpdGggZ2xvYmJpbmcgYWRkZWQKKworLSBzcGVsbC1jaGVja2VkIGNvbW1lbnRzCisKKy0gVE9ETy1SRUxFQVNFOiBwb3N0cG9uZSB0aGUgcmVtYWluZGVycworICAKKyAgVGhlcmUncyB0aHJlZSBwZW5kaW5nIGJ1ZyBmaXhlcyBidXQgdGhlcmUncyBubyB0aW1lIGxlZnQgc28gbGV0J3MKKyAgdHJ5IHRvIGdldCB0aGVtIGZpeGVkIGZvciBuZXh0IHJlbGVhc2UuLi4KKworR3VlbnRlciBLbmF1ZiAoMTEgU2VwIDIwMTEpCistIFVwZGF0ZWQgbWFrZWZpbGVzIHRvIGxhdGVzdCBsaWJzc2gyLgorCitZYW5nIFRzZSAoMTAgU2VwIDIwMTEpCistIHVybGdsb2IuYzogZml4IE9PTSBoYW5kbGluZworCistIGZ0cC5jOiBmaXggZnRwIGFjdGl2ZSBjb25uZWN0cyB3aGljaCBnb3QgYnJva2VuIHdpdGggY29tbWl0IGZkZjE1N2FiZGYKKworLSBydW50ZXN0cy5wbDogcmVwbGFjZSBUQUIgd2l0aCBzcGFjZXMKKworLSB0ZXN0IGhhcm5lc3M6IHJldmVydCBuZWVkbGVzcyBjb21taXQgMGE1YmJiMmFjMQorICAKKyAgaHR0cHMsIGZ0cHMgYW5kIHNzaCBzZXJ2ZXJzIGFsbG93ZWQgc3RhcnQgdXAgdGltZSBiYWNrIHRvIHByZXZpb3VzIHZhbHVlcworCistIHNzaC5jOiByZXZlcnQgbmVlZGxlc3MgY29tbWl0IDdiN2M0NTg3OWUKKworRGFuaWVsIFN0ZW5iZXJnICg5IFNlcCAyMDExKQorLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCAzMDNjOTAwNzRkNGMKKyAgCisgIEZpdmUgbW9yZSBidWdmaXhlcywgb25lIG1vcmUgY29udHJpYnV0b3IKKworLSB0Y3Bub2RlbGF5OiByZW5hbWUgdmFyaWFibGUKKyAgCisgIFJlbmFtZWQgdGhlIHZhcmlhYmxlIGZyb20gJ3Byb3RvJyB0byAnbGV2ZWwnIHNpbXBseSBiZWNhdXNlIGl0IGlzIG5vdAorICBwcm90b2NvbCB5b3Ugc2V0IGJ1dCBsZXZlbCBhbmQgdGhhdCBpcyB0aGUgbmFtZSBvZiB0aGUgYXJndW1lbnQgdXNlZCBpbgorICBtYW4gcGFnZXMgYW5kIHRoZSBQT1NJWCBkb2N1bWVudGF0aW9uIG9mIHRoZSBzZXRzb2Nrb3B0IGZ1bmN0aW9uLgorCitHdWVudGVyIEtuYXVmICg4IFNlcCAyMDExKQorLSBBdm9pZCBmdHJ1bmNhdGUoKSBzdGF0aWMgZGVmaW5lIHdpdGggTWluR1c2NC4KKworWWFuZyBUc2UgKDggU2VwIDIwMTEpCistIGxpYnNzaDI6IHVzZSBjYWxsb2MgYXMgYWxsb2MgZnVuY3Rpb24gZm9yIGxpYnNzaDIgdmVyc2lvbnMgb2xkZXIgdGhhbiAxLjMKKyAgCisgIFRoaXMgd29ya2Fyb3VuZHMgb2xkIGxpYnNzaDIgdmVyc2lvbnMgbm90IHByb3Blcmx5IGluaXRpYWxpemluZworICBzb21lIHNzaCBzZXNzaW9uIHZhcmlhYmxlcywgd2hpY2ggd291bGQgdHJpZ2dlciBtZW1vcnkgZGVidWdnZXJzCisgIHdhcm5pbmdzIG9uIG1lbW9yeSBiZWluZyB1c2VkIHdpdGhvdXQgaGF2aW5nIGJlZW4gaW5pdGlhbGl6ZWQuCisKK0RhbmllbCBTdGVuYmVyZyAoOCBTZXAgMjAxMSkKKy0gW0Fkcmlhbm8gTWVpcmVsbGVzIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgQ3VybF9zcGVlZGNoZWNrOiBkb24ndCBtaXN0YWtlbmx5IGNsZWFyIEN1cmxfZXhwaXJlKCkKKyAgCisgIFRoZSBjdXJyZW50IHZlcnNpb24gb2Ygc3BlZWRjaGVjay5jIG1heSBkaXNhYmxlIHRpbWVvdXQgYnkgc2V0dGluZyB6ZXJvCisgIHRvIEN1cmxfZXhwaXJlLiBXaGljaCBpcyBmaW5lIHVzaW5nIHRoZSBjdXJsX211bHRpX3BlcmZvcm0sIGJlY2F1c2UgaXQKKyAgcmVjaGVjayBhbGwgdGltZW91dCBpbnRlcm5hbHMsIGJ1dCB3aGVuIHVzaW5nIGN1c3RvbSBldmVudCBwb2xsZXIgKGxpa2UKKyAgaGlwZXJmaWZvLmMpIGl0IG1heSBrZWVwIHN0YWxsZSBjb25uZWN0aW9uIGZvcmV2ZXIuCisKK1lhbmcgVHNlICg4IFNlcCAyMDExKQorLSBsaWI1ODIuYzogZml4IHNlZ2ZhdWx0IHRyaWdnZXJlZCB3aGVuIHRvcnR1cmUgdGVzdGluZyB0ZXN0IGNhc2UgNTgyCisKK0RhbmllbCBTdGVuYmVyZyAoNyBTZXAgMjAxMSkKKy0gZnRwX3N0YXRlX3VzZV9wb3J0OiBtaW5vciBjb2RlIGluZGVudCBmaXgKKworLSBjaGVja3NyYzogZGV0ZWN0ICJ9ZWxzZSIgdXNlcyBhcyB3ZWxsCisKKy0gZ2V0aW5tZW1vcnkuYzogdXNlIGJldHRlciBhcmd1bWVudCBuYW1lcyBmb3Igd3JpdGUgY2FsbGJhY2sKKworWWFuZyBUc2UgKDcgU2VwIDIwMTEpCistIHNzaC5jOiBmaXggbWVtb3J5IGxlYWtzIHRyaWdnZXJlZCB1cG9uIE9PTSBvciBvdGhlciBmYWlsdXJlcworCistIHRlc3QgY2FzZSA1ODM6IGVuc3VyZSB0aGF0IHRlc3QgZmFpbHVyZXMgZG9uJ3QgZ28gdW5ub3RpY2VkIC0gZm9sbG93LXVwCisKKy0gdGVzdCBzdWl0ZTogbGlidGVzdCBoZWFkZXIgaW5jbHVzaW9uIGNsZWFudXAgLSBmb2xsb3ctdXAKKyAgCisgIEFkanVzdCB0ZXN0cy9saWJ0ZXN0L01ha2VmaWxlLmluYyBhbmQgcmVtb3ZlIGEgY291cGxlIG9mIHVudXNlZCBoZWFkZXJzIGZyb20KKyAgdGVzdHMvbGlidGVzdC9saWI1ODMuYworCistIHRlc3QgY2FzZSA1ODM6IGVuc3VyZSB0aGF0IHRlc3QgZmFpbHVyZXMgZG9uJ3QgZ28gdW5ub3RpY2VkCisKKy0gdGVzdCBzdWl0ZTogbGlidGVzdCBoZWFkZXIgaW5jbHVzaW9uIGNsZWFudXAKKyAgCisgIEFkZGVkIG1pc3NpbmcgbWVtb3J5VHJhY2tpbmcgdG8gdGVzdCBjYXNlcyA1NjAgYW5kIDU4My4gSWYgdGhpcyB0cmlnZ2VycworICBsZWFrIGRldGVjdGlvbiBvbiB0aGVzZSwgaXQgb25seSBtZWFucyB0aGF0IHByZXZpb3VzbHkgaXQgd2FzIGdvaW5nIHVubm90aWNlZC4KKworLSBmaXggYm9vbCB2YXJpYWJsZXMgY2hlY2tpbmcgYW5kIGFzc2lnbm1lbnQKKworLSBwaW5ncG9uZy5jOiBhdm9pZCBhIG1lbW1vdmUgY2FsbCBpbiBmdW5jdGlvbiBDdXJsX3BwX3ZzZW5kZgorCistIGZpeCBib29sIHZhcmlhYmxlcyBjaGVja2luZyBhbmQgYXNzaWdubWVudAorCistIHRlc3Qgc3VpdGU6IHVzZSB0ZXN0IGNhc2Ugc3BlY2lmaWMgbmV0cmMgZmlsZSBuYW1lcworCitHdWVudGVyIEtuYXVmICg0IFNlcCAyMDExKQorLSBGaXhlZCBmaW5hbCBtZXNzYWdlIG91dHB1dC4KKworRGFuaWVsIFN0ZW5iZXJnICg0IFNlcCAyMDExKQorLSBUT0RPLVJFTEVBU0U6IGRlbGV0ZWluZyBmaXZlIGlzc3VlcyBkdWUgdG8gbm8gcmVzcG9uc2UKKyAgCisgIE5vIGZlZWRiYWNrIGFuZCBubyB1cGRhdGVzLCByZW1vdmluZyB0aGVzZSBpc3N1ZXMKKworWWFuZyBUc2UgKDQgU2VwIDIwMTEpCistIHNldHVwX29uY2UuaCBjbGVhbnVwIGFuZCBzeW5jCisKK0d1ZW50ZXIgS25hdWYgKDQgU2VwIDIwMTEpCistIEZpeCB0byBza2lwIHVudHJ1c3RlZCBjZXJ0cy4KKworLSBBZGRlZCBTUE5FR08gdG8gTWluR1cgbWFrZWZpbGVzLgorCitZYW5nIFRzZSAoNCBTZXAgMjAxMSkKKy0gTlRMTSBXQjogZml4IGZpbGUgZGVzY3JpcHRvciBsZWFrIHVwb24gT09NIGNvbmRpdGlvbgorCistIHJldmVydCBjaGFuZ2VzIG5vdCBpbnRlbmRlZCB0byBiZSBwdXNoZWQgd2l0aCBjb21taXQgNmI3NWQyYzIKKworLSBmaXggYSBidW5jaCBvZiBNU1ZDIGNvbXBpbGVyIHdhcm5pbmdzCisKK0d1ZW50ZXIgS25hdWYgKDMgU2VwIDIwMTEpCistIFVwZGF0ZWQgZGVwZW5kZWNpZXMgdmVyc2lvbnMuCisKKy0gU29tZSBNaW5HVyBtYWtlZmlsZSB0d2Vha3MgZm9yIE1pbkdXNjQuCisKKy0gQ2hhbmdlZCBNaW5HVyB0byB1c2Ugb3duIHdpbmlkbiBwcm90b3R5cGVzLgorCitEYW4gRmFuZHJpY2ggKDIgU2VwIDIwMTEpCistIEZpeCBOVExNIHdpbmJpbmQgc3VwcG9ydCB0byBwYXNzIHRoZSB0b3J0dXJlIHRlc3RzCisgIAorICBDYWxsaW5nIHNjbG9zZSgpIGJvdGggaW4gdGhlIGNoaWxkIGFuZCB0aGUgcGFyZW50IGZvb2xzIHRoZQorICBzb2NrZXQgbGVhayBkZXRlY3RvciBpbnRvIHRoaW5raW5nIGl0J3MgYmVlbiBjbG9zZWQgdHdpY2UuCisgIENhbGxpbmcgY2xvc2UoKSBpbiB0aGUgY2hpbGQgaW5zdGVhZCBvdmVyY29tZXMgdGhpcyBwcm9ibGVtLiBJdCdzCisgIG5vdCBhcyBwb3J0YWJsZSBhcyB0aGUgc2Nsb3NlKCkgbWFjcm8sIGJ1dCB0aGlzIGNvZGUgaXMgaGlnaGx5CisgIFBPU0lYLXNwZWNpZmljLCBhbnl3YXkuCisKK1lhbmcgVHNlICgyIFNlcCAyMDExKQorLSBNZW1vcnlUcmFja2luZzogZml4IGxvZ2dpbmcgb2YgZnJlZSgpIGNhbGxzIGRvbmUgd2hlcmUgQ3VybF9zYWZlZnJlZSBpcyBjYWxsZWQKKyAgCisgIEp1c3QgaW50ZXJuYWwgc3R1ZmYuLi4KKyAgCisgIEN1cmxfc2FmZWZyZWUgaXMgbm93IGEgbWFjcm8gZGVmaW5lZCBpbiBtZW1kZWJ1Zy5oIGluc3RlYWQgb2YgYSBmdW5jdGlvbgorICBwcm90b3R5cGVkIGluIHVybC5oIGFuZCBpbXBsZW1lbnRlZCBpbiB1cmwuYywgc28gaW5jbHVzaW9uIG9mIHVybC5oIGlzIG5vCisgIGxvbmdlciByZXF1aXJlZCBpbiBvcmRlciB0byBzaW1wbHkgdXNlIEN1cmxfc2FmZWZyZWUuCisgIAorICBQcm92aWRlIGRlZmluaXRpb24gb2YgbWFjcm8gV0hJTEVfRkFMU0UgaW4gc2V0dXBfb25jZS5oIGluIG9yZGVyIHRvIGFsbG93CisgIG90aGVyIG1hY3JvcyBzdWNoIGFzIERFQlVHRiBhbmQgREVCVUdBU1NFUlQsIGFuZCBjb2RlIHVzaW5nIGl0LCB0byBjb21waWxlCisgIHdpdGhvdXQgJ2NvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQnIHdhcm5pbmdzLgorICAKKyAgVGhlIFdISUxFX0ZBTFNFIHN0dWZmIGZpeGVzIDE1MCsgTVNWQyBjb21waWxlciB3YXJuaW5ncy4KKworLSB0cmFuc2Zlci5jOiBmaXggcGFyZW50aGVzZXMvYnJhY2VzIHBsYWNlbWVudCBmb3IgdmkvZW1hY3MgZGVsaW1pdGVyIG1hdGNoaW5nCisKKy0gdHJhbnNmZXIuYzogZml4IGxvYWRob3N0cGFpcnMoKSBPT00gaGFuZGxpbmcKKworLSB0ZXN0IGhhcm5lc3M6IGh0dHBzLCBmdHBzIGFuZCBzc2ggc2VydmVycyBhbGxvd2VkIHN0YXJ0IHVwIHRpbWUgaW5jcmVhc2VkIDMzJQorCistIGhvc3RpcC5jOiByZXR1cm4gaW1tZWRpYXRlbHkgZnJvbSBDdXJsX3Jlc29sdl90aW1lb3V0KCkgdXBvbiBleHBpcmVkIHRpbWVvdXQuCisgIAorICBFbnN1cmUgZXhpc3RpbmcgbG9naWMgaW4gQ3VybF9yZXNvbHZfdGltZW91dCgpIGlzIG5vdCBzdWJ2ZXJ0ZWQgdXBvbiBnZXR0aW5nIGEKKyAgbmVnYXRpdmUgdGltZW91dCBmcm9tIHJlc29sdmVfc2VydmVyKCkuIFRoZSB0aW1lb3V0IGluIHJlc29sdmVfc2VydmVyKCkgY291bGQKKyAgYmUgY2hlY2tlZCB0byBhdm9pZCBjYWxsaW5nIEN1cmxfcmVzb2x2X3RpbWVvdXQoKSB3aXRoIGFuIGV4cGlyZWQgdGltZW91dCwgYnV0CisgIGZpeGluZyB0aGlzIGluIHRoaXMgd2F5IGFsbG93cyBleGlzdGluZyBsb2dpYyBpbiByZXNvbHZlX3NlcnZlcigpIHRvIGJlIGtlcHQKKyAgdW5jaGFuZ2VkLgorCistIGZ0cC5jOiBmaXggc29tZSBsZWFrcyB0b3J0dXJlIHRlc3RzIGRldGVjdGVkIDIwMTEtMDgtMzAgLSBmb2xsb3ctdXAKKyAgCisgIGZvbGxvdy11cCBmb3IgY29tbWl0IGQyMDQwOGU4CisKKy0gdGVzdCBoYXJuZXNzOiBmaXggZGV0ZWN0aW9uIG9mIHRlc3QgaGFybmVzcyBjbGllbnQga25vd25ob3N0cyBmaWxlCisgIAorICBSZWdlbmVyYXRlIGN1cmwncyB0ZXN0cyBjbGllbnQga25vd25ob3N0cyBmaWxlIGFsc28gd2hlbiwgc29tZWhvdywKKyAgdGhpcyBmaWxlIGlzIGVtcHR5LgorCistIHRlc3QgaGFybmVzczogZml4IGRldGVjdGlvbiBvZiB0ZXN0IGhhcm5lc3MgaG9zdCBhbmQgY2xpZW50IGtleSBmaWxlcworICAKKyAgUmVnZW5lcmF0ZSBjdXJsJ3MgdGVzdHMgaG9zdCBhbmQgY2xpZW50IGtleSBmaWxlcyBhbHNvIHdoZW4sIHNvbWVob3csCisgIGFueSBvZiB0aGVzZSBmaWxlcyBhcmUgZW1wdHkuCisKKy0gc3NoLmM6IGZpeCByZWFsbG9jKCkgT09NIGhhbmRsaW5nCisKKy0gZnRwLmM6IGZpeCBzb21lIGxlYWtzIHRvcnR1cmUgdGVzdHMgZGV0ZWN0ZWQgMjAxMS0wOC0zMCAtIGZvbGxvdy11cAorICAKKyAgZm9sbG93LXVwIGZvciBjb21taXQgYzA2ZGUyMDAKKworLSBmaXggc29tZSBsZWFrcyB0b3J0dXJlIHRlc3RzIGRldGVjdGVkIDIwMTEtMDgtMzAKKworLSBmaXggc29tZSBsZWFrcyB0b3J0dXJlIHRlc3RzIGRldGVjdGVkIDIwMTEtMDgtMzAKKworRGFuaWVsIFN0ZW5iZXJnICgyOSBBdWcgMjAxMSkKKy0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggMzQ0NWZhMmUzZgorCitLYW1pbCBEdWRrYSAoMjkgQXVnIDIwMTEpCistIHRlc3RzOiBicmVhayBidXN5IGxvb3BzIGluIHRlc3RzIDUwMiwgNTU1LCBhbmQgNTczCisKK1lhbmcgVHNlICgyOSBBdWcgMjAxMSkKKy0gcGluZ3BvbmcuYzogZml4IEN1cmxfcHBfdnNlbmRmKCkgYXJiaXRyYXJ5IHJlc3RyaWN0aW9ucyBvbiBjb21tYW5kIGxlbmd0aAorICAKKyAgVGhpcyByZW1vdmVzIGNvbW1hbmQgbGVuZ3RoIHJlc3RyaWN0aW9ucyBvbiBjYWxsaW5nIGZ1bmN0aW9ucy4KKworLSBOVExNOiBoZWFkZXIgaW5jbHVzaW9uIGNsZWFudXAgZm9sbG93LXVwCisKKy0gTlRMTTogaGVhZGVyIGluY2x1c2lvbiBjbGVhbnVwCisKKy0gTlRMTTogRU5EIG9mIHJlZmFjdG9yaW5nL3NwbGl0dGluZy9tb3ZpbmcKKyAgCisgIEZpcnN0OgorICAKKyAgRmlsZSBjdXJsX250bG0uaCByZW5hbWVkIGN1cmxfbnRsbV9tc2dzLmgKKyAgRmlsZSBjdXJsX250bG0uYyByZW5hbWVkIGN1cmxfbnRsbV9tc2dzLmMKKyAgCisgIEFmdGVyd2FyZHM6CisgIAorICBGaWxlIGh0dHBfbnRsbS5jIHJlbmFtZWQgY3VybF9udGxtLmMKKyAgRmlsZSBodHRwX250bG0uaCByZW5hbWVkIGN1cmxfbnRsbS5oCisKKy0gTlRMTTogbW92ZSBOVExNIGNvcmUgc3BlY2lmaWNzIGludG8gY3VybF9udGxtX2NvcmUuW2NoXQorCistIE5UTE1fV0I6IG1vdmUgTlRMTV9XQiBzcGVjaWZpY3MgaW50byBjdXJsX250bG1fd2IuW2NoXQorCistIE5UTE1fV0I6IGZpbmFsIGNvbmdydWVuY3kgbmFtaW5nIGFkanVzdG1lbnRzCisgIAorICBDb25maWd1cmUgc2NyaXB0IG9wdGlvbiAtLWVuYWJsZS13Yi1udGxtLWF1dGggcmVuYW1lZCB0byAtLWVuYWJsZS1udGxtLXdiCisgIENvbmZpZ3VyZSBzY3JpcHQgb3B0aW9uIC0tZGlzYWJsZS13Yi1udGxtLWF1dGggcmVuYW1lZCB0byAtLWRpc2FibGUtbnRsbS13YgorICAKKyAgUHJlcHJvY2Vzc29yIHN5bWJvbCBXSU5CSU5EX05UTE1fQVVUSF9FTkFCTEVEIHJlbmFtZWQgdG8gTlRMTV9XQl9FTkFCTEVECisgIFByZXByb2Nlc3NvciBzeW1ib2wgV0lOQklORF9OVExNX0FVVEhfRklMRSByZW5hbWVkIHRvIE5UTE1fV0JfRklMRQorICAKKyAgVGVzdCBoYXJuZXNzIGVudiB2YXIgQ1VSTF9OVExNX0FVVEggcmVuYW1lZCB0byBDVVJMX05UTE1fV0JfRklMRQorICAKKyAgU3RhdGljIGZ1bmN0aW9uIHdiX250bG1fY2xvc2UgcmVuYW1lZCB0byBudGxtX3diX2NsZWFudXAKKyAgU3RhdGljIGZ1bmN0aW9uIHdiX250bG1faW5pdGlhdGUgcmVuYW1lZCB0byBudGxtX3diX2luaXQKKyAgU3RhdGljIGZ1bmN0aW9uIHdiX250bG1fcmVzcG9uc2UgcmVuYW1lZCB0byBudGxtX3diX3Jlc3BvbnNlCisKKy0gTlRMTSBzaW5nbGUtc2lnbiBvbiBhZGp1c3RtZW50cyAoWEkpCisgIAorICBGZWF0dXJlIHN0cmluZyBsaXRlcmFsIE5UTE1fU1NPIHJlbmFtZWQgdG8gTlRMTV9XQi4KKyAgUHJlcHJvY2Vzc29yIHN5bWJvbCBVU0VfTlRMTV9TU08gcmVuYW1lZCB0byBXSU5CSU5EX05UTE1fQVVUSF9FTkFCTEVELgorICBjdXJsJ3MgJ2xvbmcnIG9wdGlvbiAnbnRsbS1zc28nIHJlbmFtZWQgdG8gJ250bG0td2InLgorICBGaXggc29tZSBjb21tZW50cyB0byBtYWtlIGNsZWFyIHRoYXQgdGhpcyBpcyBhY3R1YWxseSBhIE5UTE0gZGVsZWdhdGlvbi4KKworRGFuaWVsIFN0ZW5iZXJnICgyNiBBdWcgMjAxMSkKKy0gLS1jb29raWUtamFyOiBhY3RpdmF0ZXMgdGhlIGNvb2tpZSBlbmdpbmUKKworLSBDdXJsX3JlYWRfcGxhaW46IGluZGVudCBjb2RlCisKK1lhbmcgVHNlICgyNiBBdWcgMjAxMSkKKy0gTlRMTSBzaW5nbGUtc2lnbiBvbiBhZGp1c3RtZW50cyAoWCkKKyAgCisgIEZ1bmN0aW9ucyByZW5hbWVkOgorICAKKyAgQ3VybF9vdXRwdXRfbnRsbV9zc28gLT4gQ3VybF9vdXRwdXRfbnRsbV93YgorICBzc29fbnRsbV9jbG9zZSAtPiB3Yl9udGxtX2Nsb3NlCisgIHNzb19udGxtX3Jlc3BvbnNlIC0+IHdiX250bG1fcmVzcG9uc2UKKyAgc3NvX250bG1faW5pdGlhdGUgLT4gd2JfbnRsbV9pbml0aWF0ZQorICAKKyAgUHJlcHJvY2Vzc29yIHN5bWJvbHMgcmVuYW1lZDoKKyAgCisgIENVUkxBVVRIX05UTE1fU1NPIC0+IENVUkxBVVRIX05UTE1fV0IKKyAgQ1VSTF9WRVJTSU9OX05UTE1fU1NPIC0+IENVUkxfVkVSU0lPTl9OVExNX1dCCisKK0RhbmllbCBTdGVuYmVyZyAoMjUgQXVnIDIwMTEpCistIFRPRE86IHByb2dyZXNzIGNhbGxiYWNrIHdpdGhvdXQgZG91YmxlcworCitZYW5nIFRzZSAoMjUgQXVnIDIwMTEpCistIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGh0dHAgTlRMTTogcmVmYWN0b3JpbmcgZm9sbG93dXAKKyAgCisgIE91dHB1dCBvZiBDdXJsX250bG1fY3JlYXRlX3R5cGUxX21lc3NhZ2UoKSBhbmQgQ3VybF9udGxtX2NyZWF0ZV90eXBlM19tZXNzYWdlKCkKKyAgZnVuY3Rpb25zIGlzIG5vdyBhbHJlYWR5IGJhc2U2NCBlbmNvZGVkLgorCitLYW1pbCBEdWRrYSAoMjQgQXVnIDIwMTEpCistIGRvY3M6IHRoZSBuZXh0IHJlbGVhc2UgaXMgZ29pbmcgdG8gYmUgNy4yMi4wCisKK1lhbmcgVHNlICgyNCBBdWcgMjAxMSkKKy0gaW5jbHVkZSBsaW1pdHMuaCBmb3IgSU5UX01BWAorCistIGFkZCBtaXNzaW5nIHNlbWljb2xvbnMKKworRGFuaWVsIFN0ZW5iZXJnICgyNCBBdWcgMjAxMSkKKy0gYWRkIG1pc3Npbmcgc2VtaWNvbG9ucworCistIHNhZmVmcmVlIHVzZTogZml4IGNvbXBpbGVyIHdhcm5pbmcKKyAgCisgIGluY2x1ZGUgdGhlIHByb3RvdHlwZSBoZWFkZXIKKworWWFuZyBUc2UgKDI0IEF1ZyAyMDExKQorLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBTTVRQIGF1dGhlbnRpY2F0aW9uOiBmaXggb3JkZXJpbmcgb2YgcHJlZmVycmVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZAorICAKKyAgRml4ZWQgdGhlIG9yZGVyIG9mIHRoZSBwcmVmZXJyZWQgU01UUCBhdXRoZW50aWNhdGlvbiBtZXRob2QgdG86CisgIEFVVEggQ1JBTS1NRDUsIEFVVEggTE9HSU4gdGhlbiBBVVRIIFBMQUlOLgorICAKKyAgQVVUSCBQTEFJTiBzaG91bGQgYmUgdGhlIGxhc3QgYXMgaXQgc2xpZ2h0bHkgbW9yZSBpbnNlY3VyZSB0aGFuIEFVVEggTE9HSU4KKyAgYXMgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgc2VudCB0b2dldGhlciAtIHRoZXJlIGlzIG5vIGhhbmRzaGFraW5nCisgIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyIGxpa2UgdGhlcmUgaXMgd2l0aCBBVVRIIExPR0lOLgorCistIGJhc2U2NDogZml4IEN1cmxfYmFzZTY0X2VuY29kZSBhbmQgQ3VybF9iYXNlNjRfZGVjb2RlIGludGVyZmFjZXMKKyAgCisgIFByZXZpb3VzIGludGVyZmFjZXMgZm9yIHRoZXNlIGxpYmN1cmwgaW50ZXJuYWwgZnVuY3Rpb25zIGRpZCBub3QgYWxsb3cgdG8gdGVsbAorICBhcGFydCBhIGxlZ2l0aW1hdGUgemVybyBzaXplIHJlc3VsdCBmcm9tIGFuIGVycm9yIGNvbmRpdGlvbi4gVGhlc2UgZnVuY3Rpb25zCisgIG5vdyByZXR1cm4gYSBDVVJMY29kZSBpbmRpY2F0aW5nIGZ1bmN0aW9uIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIHNwZWNpZmljIGVycm9yLgorICBPdXRwdXQgc2l6ZSBpcyByZXR1cm5lZCB1c2luZyBhIHBvaW50ZXIgYXJndW1lbnQuCisgIAorICBBbGwgdXNhZ2Ugb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYW5kIG90aGVycyBjbG9zZWx5IHJlbGF0ZWQsIGhhcyBiZWVuIGFkYXB0ZWQKKyAgdG8gdGhlIG5ldyBpbnRlcmZhY2VzLiBSZWxhdGl2ZSBlcnJvciBhbmQgT09NIGhhbmRsaW5nIGFkYXB0ZWQgb3IgYWRkZWQgd2hlcmUKKyAgbWlzc2luZy4gVW5pdCB0ZXN0IDEzMDIgYWxzbyBhZGFwdGVkLgorCitEYW5pZWwgU3RlbmJlcmcgKDIzIEF1ZyAyMDExKQorLSByZXNvbHZlLmM6IG5ldyBleGFtcGxlIHNob3dpbmcgb2ZmIENVUkxPUFRfUkVTT0xWRQorCistIGV4dGVybmFsc29ja2V0LmM6IG5ldyBleGFtcGxlCisKK1lhbmcgVHNlICgyMiBBdWcgMjAxMSkKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgaHR0cCBOVExNOiByZW1haW5pbmcgYml0cyBmcm9tIDAwMDEtTW92ZWQtbnRsbS1bLi4uXS1jdXJsX250bG0tbW9kXzMucGF0Y2gKKyAgCisgICogQWRkZWQgZnVuY3Rpb24gY29tbWVudHM6CisgICAgICAtIEN1cmxfbnRsbV9kZWNvZGVfdHlwZTJfbWVzc2FnZQorICAgICAgLSBDdXJsX250bG1fY3JlYXRlX3R5cGUxX21lc3NhZ2UKKyAgICAgIC0gQ3VybF9udGxtX2NyZWF0ZV90eXBlM19tZXNzYWdlCisgIAorICAqIE1vZGlmaWNhdGlvbiBvZiBudGxtIHByb2Nlc3Npbmcgc3RhdGUgdG8gTlRMTVNUQVRFX1RZUEUyIGlzIG5vdyBkb25lCisgICAgb25seSB3aGVuIEN1cmxfbnRsbV9kZWNvZGVfdHlwZTJfbWVzc2FnZSgpIGhhcyBmdWxseSBzdWNjZWVkZWQuCisKKy0gcnVudGVzdHMucGw6IG9wdGlvbiAtZ3cgZm9yIHNpbmdsZSB0ZXN0IHdpbmRvd2VkIGRlYnVnZ2luZyAod2hlcmUgcG9zc2libGUpCisKKy0gemxpYjogZW5zdXJlIHVzZXIgcHJvdmlkZWQgbWVtb3J5IGZ1bmN0aW9ucyBhcmUgdXNlZCBieSB6bGliLCB3aGVuIGdpdmVuCisgIAorICBBcyBhIGJvbnVzLCB0aGlzIGxldHMgb3VyIE1lbW9yeVRyYWNraW5nIHN1YnN5c3RlbSB0cmFjayB6bGliIG9wZXJhdGlvbnMuCisgIEFuZCBhbHNvIGZpeGVzIGEgc2hvcnRjdXQgc29tZSB6bGliIDEuMi54IHZlcnNpb25zIHRvb2sgdXNpbmcgbWFsbG9jKCkKKyAgaW5zdGVhZCBvZiBjYWxsb2MoKSwgd2hpY2ggd291bGQgdHJpZ2dlciBtZW1vcnkgZGVidWdnZXJzIHdhcm5pbmdzIG9uCisgIG1lbW9yeSBiZWluZyB1c2VkIHdpdGhvdXQgaGF2aW5nIGJlZW4gaW5pdGlhbGl6ZWQuCisKK0RhbmllbCBTdGVuYmVyZyAoMjEgQXVnIDIwMTEpCistIG1haW46IGZpeCBzZWdmYXVsdAorICAKKyAgRm9sbG93LXVwIHRvIGNvbW1pdCA1ZWIyMzk2Y2QgYXMgdGhhdCB3YXNuJ3QgY29tcGxldGUuCisgIAorICBBdCB0aW1lcyBIRUFERVJGVU5DVElPTitIRUFERVJEQVRBIHdhcyBzZXQgb25seSB0byBoYXZlIG9ubHkgSEVBREVSREFUQQorICBzZXQgaW4gdGhlIHN1YnNlcXVlbnQgbG9vcCB3aGljaCBjb3VsZCBjYXVzZSBhIE5VTEwgdG8gZ2V0IHNlbnQgYXMKKyAgdXNlcmRhdGEgdG8gJ2hlYWRlcl9jYWxsYmFjaycgd2hpY2ggd2Fzbid0IG1hZGUgdG8gaGFuZGxlIHRoYXQuCisgIAorICBOb3cgSEVBREVSRlVOQ1RJT04gaXMgZXhwbGljaXRseSBzZXQgdG8gTlVMTCBpZiBpdCBpc24ndCBzZXQgdG8gdGhlCisgIGNhbGxiYWNrLgorCitZYW5nIFRzZSAoMjEgQXVnIDIwMTEpCistIE1lbW9yeVRyYWNraW5nOiBhZGp1c3QgaW5pdGlhbGl6YXRpb24gY2FsbGluZyAtIGZvbGxvd3VwCisgIAorICBGaXggbWFjcm8gZGVmaW5pdGlvbgorCistIE1lbW9yeVRyYWNraW5nOiBhZGp1c3QgaW5pdGlhbGl6YXRpb24gY2FsbGluZworICAKKyAgQ2FsbGluZyBvZiBjdXJsX21lbWRlYnVnKCkgd2FzIHN0aWxsIGRvbmUgd2l0aCBhIHBlbmRpbmcgZnJlZSgpCisKK0RhbmllbCBTdGVuYmVyZyAoMTkgQXVnIDIwMTEpCistIHRjcGNvbm5lY3Q6IGZvbGxvdy11cCBjb21taXQgYWZ0ZXIgYjk5OGQ5NWIKKyAgCisgIEFzIEkgbW9kaWZpZWQgY29ubi0+Yml0cy50Y3Bjb25uZWN0IHRvIGJlY29tZSBhbiBhcnJheSB0aGF0IGhvbGRzIG9uZQorICBib29sIGZvciBlYWNoIHBvdGVudGlhbCBjb25uZWN0aW9uIGFsbCB1c2VzIG9mIHRoYXQgc3RydWN0IGZpZWxkIG11c3QKKyAgaW5kZXggaXQgY29ycmVjdGx5LgorCitZYW5nIFRzZSAoMTkgQXVnIDIwMTEpCistIHNzaC5jOiBhZGQgUEFUSF9NQVggZGVmaW5pdGlvbiBmb3IgV0lOMzIKKworRGFuaWVsIFN0ZW5iZXJnICgxOSBBdWcgMjAxMSkKKy0gY29ubmVjdDogc2V0IFRJTUVSX0NPTk5FQ1QKKyAgCisgIFdoZW4gY29ubmVjdGluZywgbWFrZSBzdXJlIFRJTUVSX0NPTk5FQ1QgaXMgc2V0LgorCistIHRlc3Q1NzM6IGZpeCB0aGUga2V5d29yZHMKKworLSBGVFA6IGZpeCBwcm94eSBjb25uZWN0IHJhY2UgY29uZGl0aW9uCisgIAorICBXaGVuIHVzaW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UsIGEgU09DS1MgcHJveHksIGFuZCBhIGNvbm5lY3Rpb24gdGhhdAorICB3b3VsZG4ndCBpbW1lZGlhdGVseSBjb25zaWRlciBpdHNlbGYgY29ubmVjdGVkICh3aGljaCBteSBMaW51eCB0ZXN0cyBkbworICBieSBkZWZhdWx0KSwgbGliY3VybCB3b3VsZCBiZSB0cmlja2VkIGludG8gZG9pbmcgX3R3b18gY29ubmVjdHMgdG8gdGhlCisgIFNPQ0tTIHByb3h5IHdoZW4gaXQgc2V0dXAgdGhlIGRhdGEgY29ubmVjdGlvbiBhbmQgdGhlbiBvZiBjb3Vyc2UgdGhlCisgIHNlY29uZCBhdHRlbXB0IHdvdWxkIGZhaWwgbWlzZXJhYmx5IGFuZCBjYXVzZSBlcnJvci4KKyAgCisgIFRoaXMgcHJvYmxlbSBpcyBhIHJlZ3Jlc3Npb24gdGhhdCB3YXMgaW50cm9kdWNlZCBieSBjb21taXQKKyAgNGE0MmU1Y2RhYTM0NDc1NSB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHRoZSA3LjIxLjcgcmVsZWFzZS4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA4LzAxOTkuaHRtbAorICBSZXBvcnRlZCBieTogRmFiaWFuIEtlaWwKKworLSBDdXJsX1NPQ0tTNDogbWlub3IgY29kZSBjb21wcmVzc2lvbgorCitZYW5nIFRzZSAoMTggQXVnIDIwMTEpCistIHpsaWI6IGVuZm9yY2UgZnVsbCBpbml0aWFsaXphdGlvbiBvZiBvdXIgZGF0YSBzcGFjZSB6X3N0cmVhbSBzdHJ1Y3RzCisKK0RhbmllbCBTdGVuYmVyZyAoMTcgQXVnIDIwMTEpCistIFZDIG1ha2VmaWxlczogZml4ZWQgdmFyaWFibGUgbmFtZSBtaXN0YWtlCisKK1lhbmcgVHNlICgxNyBBdWcgMjAxMSkKKy0gTWVtb3J5VHJhY2tpbmc6IGFkanVzdCBjdXJsX2RvbWFsbG9jKCkgYW5kIGN1cmxfZG9mcmVlKCkgbWVtb3J5IGZpbGxpbmcKKyAgCisgIFVudGlsIDIwMTEtMDgtMTcgbGliY3VybCdzIE1lbW9yeSBUcmFja2luZyBmZWF0dXJlIGFsc28gcGVyZm9ybWVkCisgIGF1dG9tYXRpYyBtYWxsb2MgYW5kIGZyZWUgZmlsbGluZyBvcGVyYXRpb25zIHVzaW5nIDB4QTUgYW5kIDB4MTMKKyAgdmFsdWVzLiBPdXIgb3duIHByZWluaXRpYWxpemF0aW9uIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkKKyAgbWlnaHQgYmUgdXNlZnVsIHdoZW4gbm90IHVzaW5nIHRoaXJkIHBhcnR5IG1lbW9yeSBkZWJ1Z2dlcnMsIGJ1dAorICBvbiB0aGUgb3RoZXIgaGFuZCB0aGlzIHdvdWxkIGZvb2wgbWVtb3J5IGRlYnVnZ2VycyBpbnRvIHRoaW5raW5nCisgIHRoYXQgYWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCisgIAorICBBcyBhIGRlZmF1bHQgc2V0dGluZywgbGliY3VybCdzIE1lbW9yeSBUcmFja2luZyBmZWF0dXJlIG5vIGxvbmdlcgorICBwZXJmb3JtcyBwcmVpbml0aWFsaXphdGlvbiBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGl0cworICBvd24uIElmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgYW5kIHJlYWxseSB3YW50IHRvIHJldGFpbiBvbGQKKyAgYmVoYXZpb3IsIHlvdSBjYW4gYWNoaWV2ZSB0aGlzIGNvbXBpbGluZyB3aXRoIHByZXByb2Nlc3NvciBzeW1ib2xzCisgIENVUkxfTVRfTUFMTE9DX0ZJTEwgYW5kIENVUkxfTVRfRlJFRV9GSUxMIGRlZmluZWQgd2l0aCBhcHByb3ByaWF0ZQorICB2YWx1ZXMuCisKKy0gTWVtb3J5VHJhY2tpbmc6IG1ha2UgY3VybF9kb2NhbGxvYygpIGNhbGwgY2FsbG9jKCkgYXZvaWRpbmcgb3VyIHplcm8gZmlsbAorCitEYW5pZWwgU3RlbmJlcmcgKDE1IEF1ZyAyMDExKQorLSBNU1ZDIG1ha2VmaWxlczogcHJvdmlkZSBTU0ggYnVpbGQgdGFyZ2V0cworICAKKyAgInJlbGVhc2Utc3NsLXNzaDItemxpYiIgYW5kICJkZWJ1Zy1zc2wtc3NoMi16bGliIiBhcmUgdHdvIG5ldyBtYWtlZmlsZQorICB0YXJnZXRzIHRoYXQgYnVpbGQgbGliY3VybCB3aXRoIE1TVkMgYW5kIGxpbmsgd2l0aCBsaWJzc2gyCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMzODg5MjAKKyAgUmVwb3J0ZWQgYnk6ICJrZGVra2VyIgorCistIHRlc3Q1NzI6IGZpeGVkCisgIAorICBUd28gcHJvYmxlbXMgd2VyZSBmaXhlZDoKKyAgCisgIEdFVF9QQVJBTUVURVIgcmVzcG9uc2VzIHRoYXQgaGF2ZSBubyBib2R5IG11c3QgYmUgMjA0IHJlc3BvbnNlIG9yCisgIHByb3Blcmx5IHNldCBsZW5ndGggdG8gMC4KKyAgCisgIE9uZSBvZiB0aGUgPGRhdGE+IHNlY3Rpb25zIGhhZCB0aGUgd3JvbmcgY29udGVudC1sZW5ndGggZm9yIGl0cworICBHRVRfUEFSQU1FVEVSIHJlc3BvbnNlLgorICAKKyAgRW5hYmxlZCB0ZXN0IDU3MiBhZ2Fpbi4KKworLSBDdXJsX3BncnNTdGFydE5vdzogY2xlYXIgYWxsIGZsYWdzIGJ1dCBISURFCisgIAorICBBcyBidWcgMzM4NTI1OCBwb2ludGVkIG91dCBidXQgSSBtaXNzZWQgdXAgdGhlIGZpeCBmb3IuIFRoaXMgaXMgYW5vdGhlcgorICB0YWtlIGF0IGEgZml4LgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMzkyMTAxCisgIFJlcG9ydGVkIGJ5OiBXdSBZb25nemhlbmcKKworWWFuZyBUc2UgKDE1IEF1ZyAyMDExKQorLSB1bml0dGVzdHM6IGRpc2FibGUgdW5pdCB0ZXN0cyBmb3Igc29tZSBhdXRvYnVpbGQgY29uZmlndXJhdGlvbnMKKyAgCisgIElSSVggNi41LjI0IGdjYyAzLjMgYXV0b2J1aWxkcyBmYWlsIHVuaXR0ZXN0cyBsaWJyYXJ5IGNvbXBpbGF0aW9uIGR1ZSB0byBhCisgIHByb2JsZW0gcmVsYXRlZCB3aXRoIE9wZW5TU0wgaGVhZGVycyBhbmQgbGlicmFyeSB2ZXJzaW9ucyBub3QgbWF0Y2hpbmcuCisgIAorICBBbGwgQUlYIGF1dG9idWlsZHMgZmFpbHMgdW5pdCB0ZXN0cyBsaW5raW5nIGFnYWluc3QgdW5pdHRlc3RzIGxpYnJhcnkgZHVlIHRvCisgIHVuaXR0ZXN0cyBsaWJyYXJ5IGJlaW5nIGJ1aWx0IHdpdGggbm8gc3ltYm9scyBvciBtZW1iZXJzLiBMaWJ0b29sID8KKworS2FtaWwgRHVka2EgKDE1IEF1ZyAyMDExKQorLSBuc3M6IHN0YXJ0IHdpdGggbm8gZGF0YWJhc2UgaWYgdGhlIHNlbGVjdGVkIGRhdGFiYXNlIGlzIGJyb2tlbgorICAKKyAgQnVnOiBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vNzI4NTYyCisKK1lhbmcgVHNlICgxNSBBdWcgMjAxMSkKKy0gaHR0cCBOVExNOiByZWluc3RhdGUgIm5zc2cuaCIgImN1cmxfc3NwaS5oIiBoZWFkZXIgaW5jbHVzaW9ucworCistIHRlc3RzOiBkaXNhYmxlICM1NzIKKworRGFuaWVsIFN0ZW5iZXJnICgxNCBBdWcgMjAxMSkKKy0gVE9ETy1SRUxFQVNFOiBzeW5jZWQKKyAgCisgIEFkZGVkIGNvbW1lbnRzIHRvIHNvbWUgcmVtYWluaW5nIGlzc3VlcworCistIHRlbG5ldDogYWxsb3cgcHJvZ3JhbWF0aWMgdXNlIG9uIFdpbmRvd3MKKyAgCisgIFN1bW1hcnkgb2YgdGhlIGlzc3VlIGNhbiBiZSBmb3VuZCBhdDoKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDEwLTA0LzAzNjcuaHRtbAorICAKKyAgVGhhdCBwYXRjaCBvbmx5IHVwZGF0ZWQgdGhlIHVuaXggc29ja2V0cyBjb2RlIC0gdGhlIHdpbnNvY2sgY29kZSB3YXMgbm90CisgIHVwZGF0ZWQgYW5kIG5vIGxvbmdlciB3b3JrcyB0aGUgc2FtZSB3YXMgYXMgdGhlIHVuaXggY29kZS4gVGhpcyBjaGFuZ2UKKyAgdXBkYXRlcyB0aGUgd2luZG93cyBjb2RlIGFjY29yZGluZ2x5LgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMTYzMTE4CisKKy0gVE9ETy1SRUxFQVNFOiBmaXhlZCBpc3N1ZSAjMjkxCisgIAorICAyOTEgLSBidWcgMzM4MzY5MiAiR0VUIFBBUkFNRVRFUiByZXF1ZXN0IGFuZCBib2R5IGluIHJlc3BvbnNlIgorCitZYW5nIFRzZSAoMTQgQXVnIDIwMTEpCistIGh0dHAgTlRMTTogcmVpbnN0YXRlICJtZW1kZWJ1Zy5oIiBoZWFkZXIgaW5jbHVzaW9uCisgIAorICBJbmNsdXNpb24gb2YgaGVhZGVyICJtZW1kZWJ1Zy5oIiBpbiBodHRwX250bG0uYyBnb3QgbG9zdCBpbiBjb21taXQgOThmYjBlZjcuCisKK0RhbmllbCBTdGVuYmVyZyAoMTQgQXVnIDIwMTEpCistIFJUU1A6IEdFVF9QQVJBTUVURVIgcmVxdWVzdHMgaGF2ZSBhIGJvZHkKKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzM4MzY5MgorCistIEN1cmxfb3V0cHV0X250bG06IHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKworWWFuZyBUc2UgKDE0IEF1ZyAyMDExKQorLSBodHRwIE5UTE06IGFkZCBjdXJsX250bG0uYyB0byBTeW1iaWFuJ3MgbGliY3VybC5tbXAKKworLSBodHRwIE5UTE06IGZpeCA4IGNvbXBpbGVyIHdhcm5pbmdzCisgIAorICBTdHJpY3Qgc3BsaXR0aW5nIG9mIGh0dHBfbnRsbS5bY2hdIG1heSB0cmlnZ2VyIDggY29tcGlsZXIgd2FybmluZ3Mgd2hlbgorICBidWlsZGluZyB3aXRoIHNvbWUgY29tcGlsZXJzIGFuZCBzdHJpY3QgY29tcGlsZXIgd2FybmluZ3MgZW5hYmxlZCwgZGVwZW5kaW5nCisgIG9uIG90aGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzb21lIGNvdWxkIGdldCB0cmlnZ2VyZWQgb3Igbm90LgorICAKKyAgU2V2ZW4gYXJlIHJlbGF0ZWQgd2l0aCAndW51c2VkIGZ1bmN0aW9uIHBhcmFtZXRlcnMnIGFuZCBhbm90aGVyIG9uZSB3aXRoCisgICd2YXIgbWF5IGJlIHVzZWQgYmVmb3JlIGl0cyB2YWx1ZSBpcyBzZXQnLgorCistIGh0dHAgTlRMTTogc3BsaXQgaHR0cF9udGxtLltjaF0gYmV0d2VlbiBodHRwX250bG0uW2NoXSBhbmQgY3VybF9udGxtLltjaF0KKyAgCisgIEZvciBtb2R1bGFyaXR5IHB1cnBvc2VzLCBodWdlIGNodW5rcyBvZiBOVExNIGV4aXN0aW5nIGNvZGUgaXMgdHJhbnNmb3JtZWQgaW50bworICBmdW5jdGlvbnMgdG8gYWxsb3cgZnV0dXJlIGludGVybmFsIGNvZGUgcmV1c2UuCisgIAorICBSZXN1bHRpbmcgdGhyZWUgbmV3IGxpYmN1cmwgcHJpdmF0ZSBmdW5jdGlvbnM6CisgIAorICAgLSBDdXJsX250bG1fY3JlYXRlX3R5cGUxX21lc3NhZ2UoKQorICAgLSBDdXJsX250bG1fY3JlYXRlX3R5cGUzX21lc3NhZ2UoKQorICAgLSBDdXJsX250bG1fZGVjb2RlX3R5cGUyX21lc3NhZ2UoKQorICAKKyAgQ2hhbmdpbmcgc3RhdGljIG50bG1fc3NwaV9jbGVhbnVwKCkgaW50byBub24tc3RhdGljIEN1cmxfbnRsbV9zc3BpX2NsZWFudXAoKQorICAKKyAgVGhpcyAncmVmYWN0b3JpbmcnIGhhcyBiZWVuIHByZXBhcmVkIGJ5IHByZXZpb3VzIGNvbW1pdHMgdG8gYWxsb3cgdGhhdCB0aGlzCisgIHNwZWNpZmljIG9uZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNoYW5nZSB0byBleGlzdGluZyBjb2RlLiBBbGwgZXhpc3RpbmcKKyAgZ29vZG5lc3MgYW5kIGJhZG5lc3MgcHJldmlvdXMgdG8gdGhpcyBjb21taXQgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZSBvbmNlIGl0IGlzCisgIGFwcGxpZWQsIHRoZSBvbmx5IGRpZmZlcmVuY2Ugc2hvdWxkIGJlIHRoYXQgZXhpc3RpbmcgY29kZSBpcyBtb3ZlZCBpbnRvCisgIGZ1bmN0aW9ucy4KKyAgCisgIEdpdmVuIHRoZSBxdWl0ZSBiaWcgcG9ydGlvbnMgb2YgY29kZSBiZWluZyBtb3ZlZCBhcm91bmQsIGFuZCB0aGUgaW1wb3J0YW5jZSBvZgorICBjaGFuZ2UgdHJhY2VhYmlsaXR5LCB0aGlzIGNvbW1pdCBoYXMgYmVlbiBkb25lIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCBpcworICBwb3NzaWJsZSB0byBwZXJmb3JtIGEgdGhyZWUtd2F5IGRpZmYgZnJvbSBpbml0aWFsIGh0dHBfbnRsbS5bY2hdIHRvIHJlc3VsdGluZworICBodHRwX250bG0uW2NoXSBhbmQgY3VybF9udGxtLltjaF0gdG8gYWN0dWFsbHkgdmVyaWZ5IHRoYXQgbm8gZnVuY3Rpb25hbCBjaGFuZ2UKKyAgaXMgaW50cm9kdWNlZCBoZXJlLgorICAKKyAgTm90aWNlIHRoYXQgU3RldmUgSG9sbWUgaGFzIHByb3ZpZGVkIHNldmVyYWwgcGF0Y2hlcywgYnV0IHRoZXNlIGluY2x1ZGVkIHRoaXMKKyAgcmVmYWN0b3JpbmcgYWxvbmcgd2l0aCAnZXh0cmEnIGZpeGVzLiBJIHJlYWxseSB3YW50ZWQgdGhpcyAnY2xlYW4nIHJlZmFjdG9yaW5nCisgIGRvbmUgZmlyc3QsIGluIG9yZGVyIHRvIGFsbG93IGRpc2N1c3Npb24gb3IgY29tbWl0dGluZyBvZiAnZXh0cmEnIGZpeGVzIG9uIGEKKyAgY2FzZSBieSBjYXNlIGJhc2lzLCBzbywgSSBoYWQgdG8gYml0ZSB0aGUgYnVsbGV0IDstKQorICAKKyAgQ29tbWVudHMsIGxpbmUgYWRqdXN0bWVudHMsIGNvbXBpbGVyIHdhcm5pbmcgZml4ZXMsIHdoYXRldmVyLCBtYXkgZm9sbG93CisgIGFmdGVyd2FyZHMuCisKKy0gaHR0cF9uZWdvdGlhdGVfc3NwaS5jOiBmaXggY29tcGlsZXIgd2FybmluZworICAKKyAgd2FybmluZyBDNDcwNjogYXNzaWdubWVudCB3aXRoaW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbgorCistIGh0dHAgTlRMTTogY2hhbmdlIHJldHVybiB0eXBlIG9mIEN1cmxfaW5wdXRfbnRsbSgpIHRvIENVUkxjb2RlCisgIAorICBSZW1vdmUgQ1VSTG50bG0gZW51bSwgbm8gbG9uZ2VyIHJlcXVpcmVkLgorCitEYW5pZWwgU3RlbmJlcmcgKDEzIEF1ZyAyMDExKQorLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCBhMzBlZGU4NjhhYjY0CisgIAorICBUaHJlZSBtb3JlIGJ1Z3MgZml4ZWQsIHRocmVlIG1vcmUgY29udHJpYnV0b3JzIG1lbnRpb25lZAorCistIFZDNiBtYWtlZmlsZXM6IGFkZGVkIGVtYmVkZGVkIGRvY3VtZW50YXRpb24KKyAgCisgIEp1c3QgYSBub3RlIGFib3V0IHRoZSBmYWN0IHRoYXQgYWxsIFZDWzYvOC85LzEwXSBtYWtlZmlsZXMgYXJlIGdlbmVyYXRlZAorICBmcm9tIHRoZSBWQzYgb25lIGFzIHNvdXJjZS4KKworLSBjbWFrZTogZmluZCB3aW5zb2NrIHdoZW4gYnVpbGRpbmcgb24gd2luZG93cworICAKKyAgV2hlbiBidWlsZGluZyBvbiBXaW5kb3dzLCB3aXRoIENNYWtlIGFuZCBtaW5ndywgY3VybCBmYWlscyB0byBjb21waWxlCisgIGJlY2F1c2UgdGhlIENNYWtlIGJ1aWxkIHN5c3RlbSBpcyBub3QgcHJvcGVybHkgbG9va2luZyBmb3IgdGhlIFdpbnNvY2sKKyAgbGlicmFyaWVzCisgIAorICBQYXRjaCBieTogUGF1IEdhcmNpYSBpIFF1aWxlcworICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMzODkyMzEKKworLSBDdXJsX3JldHJ5X3JlcXVlc3Q6IGNoZWNrIHJldHVybiBjb2RlIQorICAKKyAgQ3VybF9yZWFkcmV3aW5kKCkgd2FzIGNhbGxlZCB3aXRob3V0IGNoZWNraW5nIGl0cyByZXR1cm4gY29kZSwgd2hpY2gKKyAgY291bGQgbGVhZCB0byBiYWRuZXNzLgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMzQ5MjI3CisKKy0gaWdub3JlIHJ0c3AKKworWWFuZyBUc2UgKDEzIEF1ZyAyMDExKQorLSBodHRwIE5UTE06IHVwZGF0ZSBOVExNIHR5cGUtKiBtZXNzYWdlIHN0cnVjdHVyZSBkZXNjcmlwdGlvbnMgLSBmb2xsb3d1cAorCitEYW5pZWwgU3RlbmJlcmcgKDEyIEF1ZyAyMDExKQorLSBkb2NzOiAtLWRlbGVnYXRpb24KKworLSBhZGRlZCAtLWRlbGVnYXRpb24KKyAgCisgIFVzaW5nIHRoaXMgb3B0aW9uIHdpdGggYW4gYXJndW1lbnQgYmVpbmcgc2V0IHRvIG9uZSBvZgorICBub25lL3BvbGljeS9hbHdheXMgaW5zdHJ1Y3RzIGxpYmN1cmwgaG93IHRvIGRlYWwgd2l0aCBHU1MKKyAgY3JlZGVudGlhbHMuIE9yIHJhdGhlciBob3cgaXQgdGVsbHMgdGhlIHNlcnZlciB0aGF0IGRlbGVnYXRpb24gaXMgZmluZQorICBvciBub3QuCisKK1lhbmcgVHNlICgxMiBBdWcgMjAxMSkKKy0gaHR0cCBOVExNOiBmaXggaW5jbHVzaW9uIG9mIGN1cmxfbnRsbS5oCisKKy0gaHR0cCBOVExNOiB1cGRhdGUgTlRMTSBtZXNzYWdlIHN0cnVjdHVyZSBub3RlcworCistIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGh0dHAgTlRMTTogbW92ZSBwb3J0aW9ucyBvZiBodHRwX250bG0uaCBpbnRvIG5ldyBjdXJsX250bG0uaAorCistIGh0dHAgTlRMTTogbW9yZSBhZGp1c3RtZW50cyBpbiBwcmVwYXJhdGlvbiBvZiBjb2RlIHJlZmFjdG9yaW5nCisgIAorICBVc2UgcHJlcHJvY2Vzc29yIHN5bWJvbCBOVExNX0JVRlNJWkUgdG8gZGVmaW5lIHByaXZhdGUgTlRMTSBidWZmZXIgZml4ZWQgc2l6ZS4KKyAgCisgIFVzZSBhIFNlc3Npb25IYW5kbGUgJ2RhdGEnIHBvaW50ZXIgdmFyaWFibGUgdG8gZWFzZSByZWZhY3RvcmluZy4KKyAgCisgIFVwZGF0ZSBOVExNIHR5cGUtKiBtZXNzYWdlIHN0cnVjdHVyZSBkZXNjcmlwdGlvbnMuCisgIAorICBGaXggc29tZSBtb3JlIHNwYWNpbmcgYW5kIHR5cG9zIChTdGV2ZSBIb2xtZSkuCisKK0RhbmllbCBTdGVuYmVyZyAoMTEgQXVnIDIwMTEpCistIGN1cmxfZWFzeV9jbGVhbnVwOiBjbGFyaWZ5IHRoZSBjYWxsYmFjayBzaXR1YXRpb24KKworWWFuZyBUc2UgKDExIEF1ZyAyMDExKQorLSBodHRwIE5UTE06IGZpeCBjb21waWxlciB3YXJuaW5nCisKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgaHR0cCBOVExNOiBUaWRpZWQgdXAgbW9yZSBpbmNvbnNpc3RlbnQgc3BhY2luZy4KKyAgCisgIE1vdmVkIE5UTE1TU1BfU0lHTkFUVVJFLCBIT1NUTkFNRV9NQVgsIFNIT1JUUEFJUiBhbmQgTE9OR1FVQVJURVQgZGVmaW5pdGlvbnMgaW4gcmVhZHkgZm9yIG1vdmUgdG8gY3VybF9udGxtLmMuCisgIAorICBVc2VkIHNlcGFyYXRlIHZhcmlhYmxlcyBmb3IgV2luZG93cyBTU1BJIGFuZCBuYXRpdmUgY29kZSB0byBlYXNlIG1vdmluZyBvZiBjb2RlIHRvIGN1cmxfbnRsbS5jLgorICAKKyAgRml4ZWQgdHlwb2dyYXBoaWNhbCBlcnJvcyB3aGVyZSBTUFBJIHNob3VsZCBiZSBTU1BJLgorICAKKyAgRml4ZWQgY29tcGlsYXRpb24gd2FybmluZ3Mgb24gNjQtYml0IGJ1aWxkcyB3aGVuIGNhbGxpbmcgV2luZG93cyBTU1BJIGZ1bmN0aW9ucy4KKworRGFuaWVsIFN0ZW5iZXJnICgxMCBBdWcgMjAxMSkKKy0gcnRzcC5jOiBjb252ZXJ0ZWQgdG8gQworICAKKyAgVHJpbW1lZCB0aGUgbmV3bGluZXMgdG8gYmUgTEYtb25seS4gQ29udmVydGVkIHRoZSBzb3VyY2UgdG8gcGxhaW4gQywgdG8KKyAgdXNlIGN1cmwgc3R5bGUgaW5kZW50cywgdG8gY29tcGlsZSB3YXJuaW5nLWZyZWUgd2l0aCBwaWNreSBvcHRpb25zIGFuZAorICBmaXhlZCB0aGUgbWlub3IgZnByaW50ZigpIGJ1ZyBvbiBsaW5lIDI0NS4gQWRkZWQgdG8gbWFrZWZpbGUuCisKKy0gW0ppbSBIb2xsaW5nZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBydHNwLmM6IG5ldyBleGFtcGxlCisgIAorICBDb2RlIGZyb20KKyAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3J0c3ByZXF1ZXN0L3NvdXJjZS9icm93c2UvdHJ1bmsvcnRzcHJlcXVlc3QuY3BwCisKKy0gVE9ETzogcmVtb3ZlIGN1cmxfZm9ybXBvc3QgaW4gYSBmdXR1cmUgdmVyc2lvbgorICAKKyAgMTUuOCByZW1vdmUgJ2N1cmxfaHR0cHBvc3QnIGZyb20gcHVibGljCisKK1lhbmcgVHNlICg5IEF1ZyAyMDExKQorLSBodHRwIE5UTE06IEZ1cnRoZXIgdGlkaW5nIHVwIHRvIGxpYmN1cmwgc3RhbmRhcmRzCisKKy0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgaHR0cCBOVExNOiBUaWRpZWQgdXAgaHR0cF9udGxtIHByaW9yIHRvIHNwbGl0dGluZyB0aGUgbnRsbSBzcGVjaWZpYyBjb2RlCisKK0RhbmllbCBTdGVuYmVyZyAoOSBBdWcgMjAxMSkKKy0gVE9ETy1SRUxFQVNFOiBpc3N1ZSAjMjg5IGlzIGZpeGVkCisgIAorICAyODkgLSBidWcgMzM0OTIyNyAic2VjdXJlIGF0dHJpYnV0ZSBpbiBjb29raWUgZG9lcyBub3Qgd29yayB3aXRoIGVxdWFscyBzaWduIgorCistIGNvb2tpZSBwYXJzZXI6IGhhbmRsZSAnc2VjdXJlPScKKyAgCisgIFRoZXJlIGFyZSB0d28ga2V5d29yZHMgaW4gY29va2llIGhlYWRlcnMgdGhhdCBkb24ndCBmb2xsb3cgdGhlIHJlZ3VsYXIKKyAgbmFtZT12YWx1ZSBzdHlsZTogc2VjdXJlIGFuZCBodHRwb25seS4gU3RpbGwgd2UgbXVzdCBzdXBwb3J0IHRoYXQgdGhleQorICBhcmUgd3JpdHRlbiBsaWtlICdzZWN1cmU9JyBhbmQgdGhlbiB0cmVhdCB0aGVtIGFzIGlmIHRoZXkgd2VyZSB3cml0dGVuCisgICdzZWN1cmUnLiBUZXN0IGNhc2UgMzEgd2FzIG11Y2ggZXh0ZW5kZWQgYnkgUm9iIFdhcmQgdG8gdGVzdCB0aGlzLgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMzQ5MjI3CisgIFJlcG9ydGVkIGJ5OiAiZ25vbWJhdCIKKworLSBjdXJsLmg6IG1hcmsgZGVwcmVjYXRlZCBDVVJMT1BUXyBvcHRpb25zIG9uIHNhbWUgbGluZQorICAKKyAgVGhpcyBpcyB0byBhaWQgZWFzaWVyIG1hY2hpbmUgcGFyc2luZyBhbmQgdG8gbWFrZSBzdXJlIG5vYm9keSB3aG8gcmVhZHMKKyAgdGhlc2UgaGVhZGVyIGxpbmVzIGNhbiBtaXNzIHRoZSBpbmZvLgorCistIFJFTEVBU0UtTk9URVM6IHJlY291bnRlZCBhbmQgdXBkYXRlZCBzb21lIG51bWJlcnMKKworLSBwcm94eSBwcm90b2NvbCBkb2NzOiByZXBocmFzZWQgYW5kIHVwZGF0ZWQKKworLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCA0NWQ4ODNkODhkZjcKKyAgCisgIE1lbnRpb24gNSBidWdpeGVzIGFuZCAxIGNoYW5nZSBtb3JlCisKKy0gQ1VSTEZPUk1fQlVGRkVSOiBpbnNlcnQgZmlsZW5hbWUgYXMgZG9jdW1lbnRlZAorICAKKyAgQSByZWdyZXNzaW9uIHdoZXJlIENVUkxGT1JNX0JVRkZFUiBzdG9wcGVkIHRvIHByb3Blcmx5IGluc2VydCB0aGUgZmlsZQorICBuYW1lIHBhcnQgaW4gdGhlIGZvcm1wYXJ0LiBCdWcgaW50cm9kdWNlZCBpbiBjb21taXQgZjg1MWY3Njg1NzhkYzA5Ni4KKyAgCisgIEFkZGVkIENVUkxGT1JNX0JVRkZFUiB1c2UgdG8gdGVzdCA1NTQgdG8gdmVyaWZ5IHRoaXMuCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wNy8wMTc2Lmh0bWwKKyAgUmVwb3J0ZWQgYnk6IEhlbnJ5IEx1ZGVtYW5uCisKK1lhbmcgVHNlICg4IEF1ZyAyMDExKQorLSBjdXJsLWNvbXBpbGVycy5tNDogc2VyaWFsIG51bWJlciBidW1wCisKKy0gY3VybC1jb21waWxlcnMubTQ6IENVUkxfQ09OVkVSVF9JTkNMVURFX1RPX0lTWVNURU0gYWRqdXN0bWVudHM6CisgIAorICBBZGQgQ1VSTF9DSEVDS19DT01QSUxFUiBhcyBhIHJlcXVpcmVtZW50LgorICAKKyAgRW5zdXJlIG1hY3JvIGRvZXMgbm90aGluZyB1bmxlc3MgR05VX0Mgb3IgQ0xBTkcgY29tcGlsZXIgaXMgdXNlZC4KKyAgCisgIFRoaXMgc2hvdWxkIGFsbG93IHVzYWdlIG9mIHRoaXMgbWFjcm8gaW4gdW5mb3Jlc2VlbiBwbGFjZW1lbnRzLgorCitEYW5pZWwgU3RlbmJlcmcgKDggQXVnIDIwMTEpCistIFNPQ0tTOiBmaXggdGhlIGNvbm5lY3QgdGltZW91dAorICAKKyAgVGhlIGNvbm5lY3QgdGltZW91dCBsb2dpYyB3aGVuIHVzaW5nIFNPQ0tTIHdhcyBkb25lIHdyb25nCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wNy8wMTc3Lmh0bWwKKyAgUmVwb3J0ZWQgYnk6ICJTcG9vbiBNYW4iCisKKy0gZnRwX2RvaW5nOiBiYWlsIG91dCBvbiBlcnJvciBwcm9wZXJseQorICAKKyAgV2hlbiBhIGZhaWx1cmUgaGFzIGJlZW4gZGV0ZWN0ZWQgd2UgbXVzdCBhYm9ydCBpbW1kaWF0ZWx5LgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDcvMDE3Ny5odG1sCisgIFJlcG9ydGVkIGJ5OiAiU3Bvb24gTWFuIgorCistIHMvNy4yMS44LzcuMjIuMAorCistIHZlcnNpb24gYnVtcDogbmV4dCByZWxlYXNlIGlzIDcuMjIuMAorCistIFZFUlNJT05TOiBjbGFyaWZ5IG91ciB2ZXJzaW9uaW5nIGNvbmNlcHQKKyAgCisgIERyb3AgdGhlIHByZS1yZWxlYXNlIHBhcnQgZnJvbSB0aGlzIHRleHQgYXMgd2UgZG9uJ3QgdXNlIHRoYXQgaW4KKyAgcHJhY3Rpc2Ugc2luY2UgbWFueSB5ZWFycy4KKyAgCisgIFVwZGF0ZSB0aGUgcGhyYXNpbmcgdG8gcmVmbGVjdCBvdXIgbW9yZSBzdHJpY3QgaW50ZXJwcmV0YXRpb246CisgIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wOC8wMDY0Lmh0bWwKKworLSBbQ3Jpc3RpYW4gUm9kcsOtZ3VleiBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIE9wZW5TU0w6IFVzZSBTU0xfTU9ERV9SRUxFQVNFX0JVRkZFUlMgaWYgYXZhaWxhYmxlLCByZWR1Y2VzIG1lbW9yeSB1c2UKKyAgCisgIFNlZSBhbHNvIDoKKyAgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL3NzbC9TU0xfQ1RYX3NldF9tb2RlLmh0bWwKKyAgaHR0cDovL3d3dy5pbXBlcmlhbHZpb2xldC5vcmcvMjAxMC8wNi8yNS9vdmVyY2xvY2tpbmctc3NsLmh0bWwKKyAgCisgIFNpZ25lZC1vZmYtYnk6IENyaXN0aWFuIFJvZHLDrWd1ZXogPGNycm9kcmlndWV6QG9wZW5zdXNlLm9yZz4KKworLSBUT0RPLVJFTEVBU0U6IGNsb3NlIGlzc3VlICMyOTIKKyAgCisgIEZpeGVkOgorICAyOTIgLSBidWcgMzM4NTI1OCAiQWRkZW5kdW0gdG8gMzM3MDg5NSIKKyAgCisgIEJhc2ljYWxseSBicnVzaGluZyB1cCBjb21taXQgMjdiODgxNDAxN2ExOQorCistIEN1cmxfcGdyc1N0YXJ0Tm93OiBjbGVhciBhbGwgYml0cyBleGNlcHQgSElERQorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMzg1MjU4CisgIFJlcG9ydGVkIGJ5OiBCZW4gV2luc2xvdworCistIHJlYWR3cml0ZV9kYXRhOiBpbXByb3ZlZCBDLUUgZGVjb2RpbmcgZXJyb3IgbWVzc2FnZQorCitZYW5nIFRzZSAoNyBBdWcgMjAxMSkKKy0gQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrIHN1cHBvcnQgLSBmb2xsb3d1cAorICAKKyAgbHdJUCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLgorCistIE5UTE0gc2luZ2xlLXNpZ24gb24gYWRqdXN0bWVudHMgKElYKQorICAKKyAgVXNlIHN3cml0ZS9zcmVhZCBpbnN0ZWFkIG9mIHdyaXRlL3JlYWQgdG8gYXZvaWQgU0lHUElQRQorCistIGNvbmZpZy13aW4zMi5oOiBjb21tZW50cyBhZGp1c3RtZW50cworCitEYW5pZWwgU3RlbmJlcmcgKDYgQXVnIDIwMTEpCistIFRPRE8tUkVMRUFTRTogY29tbWl0dGVkIGlzc3VlICMzMDQKKyAgCisgIDMwNCAtICJBc3luYy1ETlMtcmVzb2x2ZS10aHJlYWQgZ2V0cyBzdGFydGVkIGV2ZW4gd2hlbiBhIGRvdHRlZCBJUCBpcworICAgICAgICBwcm92aWRlZCIgYnkgQ2hyaXN0aWFuIEg8RTQ+Z2VsZQorICAgICAgICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDgvMDAwOS5odG1sCisKKy0gW0NocmlzdGlhbiBIw6RnZWxlIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgYXN5bi10aHJlYWQ6IGNoZWNrIGZvciBkb3R0ZWQgYWRkcmVzc2VzIGJlZm9yZSB0aHJlYWQgc3RhcnRzCisKKy0gVE9ETy1SRUxFQVNFOiBBZGQgIzMwNyB0d28gaXNzdWVzIGJ5ICJTcG9vbiBNYW4iCisKK1lhbmcgVHNlICg1IEF1ZyAyMDExKQorLSBjaGVja3NyYy5wbDogYWRkIHF1b3RlcyB0byB2YXIKKworLSBrZWVwIGEgc2luZ2xlIGNvcHkgb2YgY29uZmlnLXdpbjMyLmggaW4gdmVyc2lvbiBjb250cm9sIHJlcG9zaXRvcnkgLSBmb2xsb3d1cAorICAKKyAgQWxsb3cgY29uZmlndXJlIGJ1aWxkcyB0byBnZW5lcmF0ZSBzcmMvY29uZmlnLXdpbjMyLmgKKyAgCisgIFNraXAgY2hlY2tzcmMgb24gc3JjL2NvbmZpZy13aW4zMi5oIGNvbnRlbnRzIGFscmVhZHkgY2hlY2tlZCBhdCBsaWIvY29uZmlnLXdpbjMyLmgKKyAgCisgIEFsbG93IG11bHRpcGxlIC1XIGluIGNoZWNrc3JjLnBsCisKKy0gQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrIHN1cHBvcnQgLSBkb2NzL0lOU1RBTEwgYmx1cmIKKworLSBCU0Qtc3R5bGUgbHdJUCBUQ1AvSVAgc3RhY2sgc3VwcG9ydCAtIGZvbGxvd3VwCisKKy0gZ2l0IGlnbm9yZSBzcmMvY29uZmlnLXdpbjMyLmgKKworLSBrZWVwIGEgc2luZ2xlIGNvcHkgb2YgY29uZmlnLXdpbjMyLmggaW4gdmVyc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuCisgIAorICBtYWtldGd6IGFuZCBidWlsZGNvbmYuYmF0IHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGlzLgorCitEYW5pZWwgU3RlbmJlcmcgKDUgQXVnIDIwMTEpCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGFmZTg4ZDg1ZjQwZTEKKworLSB0ZXN0NzEwOiB2ZXJpZnkgdGhhdCAtLXByb3h5IHNvY2tzNTovL2hvc3RuYW1lIHdvcmtzCisKKy0gY3JlYXRlX2Nvbm46IG1hcmsgbm9uLUhUVFAgcHJveGllcyBhY2NvcmRpbmdseQorICAKKyAgQSBwcm94eSBjb3VsZCBiZSBtYXJrZWQgJ2h0dHBwcm94eScgd3JvbmdseSBiZWZvcmUgaWYgc2V0IHdpdGggYW4KKyAgZW52aXJvbm1lbnQgdmFyaWFibGUgb3Igd2l0aCB0aGUgQ1VSTE9QVF9QUk9YWSBvcHRpb24gd2l0aCBhIHNvY2tzKjovLworICBwcmVmaXggb3Igc2ltaWxhci4KKyAgCisgIEFkZGVkIHRlc3QgNzEwIHRvIHZlcmlmeQorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDcvMDE5NC5odG1sCisKKy0gdGVzdDcwOTogSFRUUCBHRVQgdmlhIFNPQ0tTNSBzZXQgaW4gZW52aXJvbm1lbnQKKworLSBUT0RPLVJFTEVBU0U6IGlzc3VlICMyOTMgaXMgZG9uZQorICAKKyAgRml4ZWQ6CisgIDI5MyAtIGZyb20gaHR0cDovL2J1Z3ppbGxhLnJlZGhhdC5jb20vNzIzMDc1ICJjdXJsIHNlZ2ZhdWx0cyIKKworLSBzZWdmYXVsdCBmaXhlZAorICAKKyAgV2hlbiB1c2luZyBib3RoIC1KIGFuZCBhIHNpbmdsZSAtTyB3aXRoIG11bHRpcGxlIFVSTHMsIGEgbWlzc2luZyBpbml0CisgIGNvdWxkIGNhdXNlIGJhZG5lc3MuCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wNy8wMTI2Lmh0bWwgYW5kCisgICAgICAgaHR0cDovL2J1Z3ppbGxhLnJlZGhhdC5jb20vNzIzMDc1CisgIFJlcG9ydGVkIGJ5OiBQYXVsIEhvd2FydGggYW5kIEdhcnJldHQgSG9sbXN0cm9tCisKKy0gdGVzdDEzMTM6IHRlc3QgY29udGVudC1kaXNwb3NpdGlvbiB3aXRoIHVuZXZlbiBxdW90ZXMKKworLSBwYXJzZV9maWxlbmFtZTogZGVhbCB3aXRoIGVzY2FwZWQgcXVvdGVzCisKK1lhbmcgVHNlICg0IEF1ZyAyMDExKQorLSBCU0Qtc3R5bGUgbHdJUCBUQ1AvSVAgc3RhY2sgc3VwcG9ydDoKKyAgCisgIEFsbG93IGNvbXBpbGF0aW9uIG9mIGxpYmN1cmwgYW5kIGN1cmwgdXNpbmcgQlNELXN0eWxlIGx3SVAgb24gV2luMzIuCisgIAorICBJbiBvcmRlciB0byBjb21waWxlIGxpYmN1cmwgYW5kIGN1cmwgd2l0aCB0aGlzIHN1cHBvcnQgaXQgaXMgbmVjZXNzYXJ5CisgIHRvIGVkaXQgZmlsZXMgbGliL2NvbmZpZy13aW4zMi5oIGFuZCBzcmMvY29uZmlnLXdpbjMyLmggYW5kIHVuY29tbWVudAorICBhIGxpbmUgdG8gbWFrZSBkZWZpbml0aW9uIG9mIHByZXByb2Nlc3NvciBzeW1ib2wgVVNFX0xXSVBTT0NLIHZpc2libGUuCisgIAorICBBZnRlcndhcmRzIHlvdSBjYW4gY29tcGlsZSBhcyB1c3VhbC4KKyAgCisgIEluIG9yZGVyIHRvIHVzZSBjb21waWxlZCBsaWJyYXJ5IHdpdGggQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrIGluCisgIHlvdXIgcHJvZ3JhbSBpdCBpcyBtYW5kYXRvcnkgdGhhdCB5b3UgaW5jbHVkZSBsd0lQIGhlYWRlciBmaWxlIDxsd2lwL29wdC5oPgorICBiZWZvcmUgaW5jbHVkaW5nIDxjdXJsL2N1cmwuaD4gb3IgPGN1cmwvbXVsdGkuaD4KKyAgCisgIENvbXBpbGF0aW9uIGhhcyBiZWVuIHZlcmlmaWVkIHdpdGggbHdJUCAxLjQuMCBhbmQgY29udHJpYi0xLjQuMCBmcm9tOgorICAKKyAgaHR0cDovL2Rvd25sb2FkLnNhdmFubmFoLmdudS5vcmcvcmVsZWFzZXMvbHdpcC9sd2lwLTEuNC4wLnppcAorICBodHRwOi8vZG93bmxvYWQuc2F2YW5uYWguZ251Lm9yZy9yZWxlYXNlcy9sd2lwL2NvbnRyaWItMS40LjAuemlwCisgIAorICBIYXZlIGZ1biEKKworLSBjdXJsLmg6IHVudGFuZ2xlIGEgcHJlcHJvY2Vzc29yIGJsb2NrLCByZW1vdmluZyBkdXBsaWNhdGUgc3lzL3R5cGVzLmggaW5jbHVzaW9uCisKK0RhbmllbCBTdGVuYmVyZyAoNCBBdWcgMjAxMSkKKy0gVE9ETy1SRUxFQVNFOiBpc3N1ZSAjMjkwIGZpeGVkCisgIAorICBDbG9zZWQgdGhpcyBlbnRyeToKKyAgMjkwIC0gYnVnIDMzNzU2MDMgImN1cmwgaGFzIHByb2JsZW0gd2l0aCByZW1vdGUgbmFtZXMgY29udGFpbmluZyAnOyciCisKKy0gLUo6IHN1cHBvcnQgJzsnIGluIHF1b3RlZCBmaWxlIG5hbWVzCisgIAorICBDb250ZW50LWRpc3Bvc2l0aW9uIGhlYWRlcnMgY2FuIHByb3ZpZGUgZmlsZSBuYW1lcyB3aXRoIHNlbWljb2xvbnMgd2hpY2gKKyAgcHJldmlvdXNseSB3b3VsZCBiZSBjdXQgb2ZmIGF0IHRoYXQgcG9pbnQuCisgIAorICBBZGRlZCB0ZXN0IGNhc2UgMTMxMSBhbmQgMTMxMiB0byB2ZXJpZnkgLUouCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMzNzU2MDMKKyAgUmVwb3J0ZWQgYnk6IFBldGVyIEhqYWxtYXJzc29uCisKKy0gZ2V0cGFydC5wbTogd2hlbiBubyBwYXJ0IG1hdGNoLCByZXR1cm4gYmxhbmsgd2hlbiBzZWN0aW9uIGVuZHMKKworLSBydW50ZXN0cy5wbDogc3VwcG9ydCBvcHRpb249bm8taW5jbHVkZQorCistIFRPRE8tUkVMRVNFOiAjMzA2IC0gU1NMIFNlc3Npb25zIHNoYXJlZAorCistIFRPRE8tUkVMRUFTRTogdXBkYXRlZCB3aXRoIGN1cnJlbnQgaXNzdWVzCisKK0thbWlsIER1ZGthICgzIEF1ZyAyMDExKQorLSBjdXJsX2dzc2FwaTogYWRkIGEgbWlzc2luZyBpbmNsdWRlIG9mIHNlbmRmLmgKKyAgCisgIC4uLiB0byBhdm9pZCBidWlsZCBmYWlsdXJlIHdoZW4gR1NTX0NfREVMRUdfUE9MSUNZX0ZMQUcgaXMgbm90IGRlZmluZWQuCisgIAorICBSZXBvcnRlZCBieTogUGF1bCBIb3dhcnRoCisKKy0gY3VybF9nc3NhcGk6IHJlZmluZSB0aGUgaGFuZGxpbmcgb2YgQ1VSTE9QVF9HU1NBUElfREVMRUdBVElPTgorICAKKyAgU3VnZ2VzdGVkIGJ5IFJpY2hhcmQgU2lsdmVybWFuLgorCistIFtBZGFtIFRrYWMgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBBZGQgbmV3IENVUkxPUFRfR1NTQVBJX0RFTEVHQVRJT04gb3B0aW9uLgorICAKKyAgQ3VybF9nc3NfaW5pdF9zZWNfY29udGV4dCBnb3QgbmV3IHBhcmFtZXRlciAtIFNlc3Npb25IYW5kbGUuCisgIAorICBTaWduZWQtb2ZmLWJ5OiBBZGFtIFRrYWMgPGF0a2FjQHJlZGhhdC5jb20+CisKK1lhbmcgVHNlICgzMSBKdWwgMjAxMSkKKy0gY29uZmlndXJlOiBhZGQgY2hlY2sgZm9yIDxzeXMvd2FpdC5oPgorCistIE5UTE0gc2luZ2xlLXNpZ24gb24gYWRqdXN0bWVudHMgKFZJSUkpCisgIAorICBVc2UgcHJlcHJvY2Vzc29yIHN5bWJvbHMgV0lOQklORF9OVExNX0FVVEhfRU5BQkxFRCBhbmQgV0lOQklORF9OVExNX0FVVEhfRklMRQorICBmb3IgU2FtYmEncyB3aW5iaW5kIGRhZW1vbiBudGxtX2F1dGggaGVscGVyIGNvZGUgaW1wbGVtZW50YXRpb24gYW5kIGZpbGVuYW1lLgorICAKKyAgUmV0YWluIHByZXByb2Nlc3NvciBzeW1ib2wgVVNFX05UTE1fU1NPIGZvciBOVExNIHNpbmdsZS1zaWduLW9uIGZlYXR1cmUKKyAgYXZhaWxhYmlsaXR5IGltcGxlbWVudGF0aW9uIGluZGVwZW5kZW50LgorICAKKyAgRm9yIHRlc3QgaGFybmVzcywgcHJlZml4IE5UTE1fQVVUSCBlbnZpcm9ubWVudCB2YXJzIHdpdGggQ1VSTF8KKyAgCisgIFJlZmFjdG9yIGFuZCByZW5hbWUgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtbnRsbS1hdXRoIHRvIC0tZW5hYmxlLXdiLW50bG0tYXV0aFs9RklMRV0KKworRGFuIEZhbmRyaWNoICgyOSBKdWwgMjAxMSkKKy0gUmVudW1iZXJlZCB0ZXN0MjAwNSB0byB0ZXN0MTMxMAorICAKKyAgVGhlIDIweHggcmFuZ2UgaXMgZm9yIG11bHRpcGxlIHNlcXVlbnRpYWwgdGVzdHMuCisKK1lhbmcgVHNlICgyOSBKdWwgMjAxMSkKKy0gY3VybC1mdW5jdGlvbnMubTQgc2VyaWFsICMgYnVtcAorCistIFJldmVydCAiY29uZmlndXJlOiBhZGRpdGlvbmFsIGZsYWcgY2hlY2tzIGZvciBmY250bCgpIHNvY2tldCgpIGFuZCBzb2NrZXRwYWlyKCkiCisgIAorICBUaGlzIHJldmVydHMgY29tbWl0IGJjNmU2YTQ2NWFkMGI5Zjk3NTdjNDM4NTY5OGZlNWYyNTVkZDEyNWIuCisKKy0gY29uZmlndXJlOiBhZGRpdGlvbmFsIGZsYWcgY2hlY2tzIGZvciBmY250bCgpIHNvY2tldCgpIGFuZCBzb2NrZXRwYWlyKCkKKworLSBOVExNIHNpbmdsZS1zaWduIG9uIGFkanVzdG1lbnRzIChWSUkpCisgIAorICBJbml0aWFsaXplIHZhcmlhYmxlcyB3aGVuIGNvbm5lY3RkYXRhIG9iamVjdCBpcyBjcmVhdGVkLgorCistIHNvY2tldHBhaXIoKSB1c2FnZSB0cmFja2luZyB0byBhbGxvdyBmZCBsZWFrIGRldGVjdGlvbgorCistIGZpeCBjb21waWxlciB3YXJuaW5nCisKK0RhbiBGYW5kcmljaCAoMjggSnVsIDIwMTEpCistIEF2b2lkIGEgInNoYWRvd3MgZ2xvYmFsIGRlY2xhcmF0aW9uIiB3YXJuaW5nIG9uIG9sZCBNSVQgS2VyYmVyb3MKKyAgCisgIERlZmluaW5nIE5DT01QQVQgZWxpbWluYXRlcyB0aGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgbWFjcm9zCisgIHRoYXQgYXJlIHRoZSBzb3VyY2Ugb2YgdGhlIHByb2JsZW0gYW5kIHdoaWNoIHdlIGRvbid0IG5lZWQsCisgIGFueXdheS4KKworWWFuZyBUc2UgKDI4IEp1bCAyMDExKQorLSBOVExNIHNpbmdsZS1zaWduIG9uIGFkanVzdG1lbnRzIChWSSkKKyAgCisgIEZpeCBjb21waWxlciB3YXJuaW5nCisKK0RhbiBGYW5kcmljaCAoMjggSnVsIDIwMTEpCistIEdpdmUgdGhlIE5UTE0gU1NPIGhlbHBlciBhIG1vbWVudCB0byBjbGVhbmx5IHNodXQgZG93biBpZiBuZWVkZWQKKworLSBSZW1vdmVkIGFuIGV4dHJhbmVvdXMgXG4gdGhhdCB2aW9sYXRlZCB0aGUgU1NPIGRhZW1vbiBwcm90b2NvbAorICAKKyAgVGhpcyBjYXVzZWQgZmFrZV9udGxtIHRvIGFib3J0IGR1ZSB0byBhbiBpbnZhbGlkIGNvbW1hbmQKKyAgY2F1c2luZyBzcG9yYWRpYyB0ZXN0IDIwMDUgZmFpbHVyZXMuCisKK1lhbmcgVHNlICgyOCBKdWwgMjAxMSkKKy0gTlRMTSBzaW5nbGUtc2lnbiBvbiBhZGp1c3RtZW50cyAoVikKKyAgCisgIEVuaGFuY2UgdGVzdCBoYXJuZXNzIGZha2VfbnRsbSBsb2dnaW5nIHVwb24gaW52YWxpZCBpbnB1dC4KKworRGFuIEZhbmRyaWNoICgyNyBKdWwgMjAxMSkKKy0gRml4ZWQgYSBjb3VwbGUgb2YgbWVtb3J5IGxlYWtzIGluIE5UTE0gU1NPIHN1cHBvcnQKKworWWFuZyBUc2UgKDI3IEp1bCAyMDExKQorLSBOVExNIHNpbmdsZS1zaWduIG9uIGFkanVzdG1lbnRzIChJVikKKyAgCisgIEZpeCBjb21waWxlciB3YXJuaW5nCisKKy0gTlRMTSBzaW5nbGUtc2lnbiBvbiBhZGp1c3RtZW50cyAoSUlJKQorICAKKyAgUHJvdmlkZSBzb21lIGVycm9yIHRyYWNpbmcgYW5kIGZpeCBleGVjbCgpIGNhbGxpbmcuCisKKy0gTlRMTSBzaW5nbGUtc2lnbiBvbiBhZGp1c3RtZW50cyAoSUkpCisgIAorICBFbnN1cmUgdGVzdCBoYXJuZXNzIGZha2VfbnRsbSBtYWluIGZ1bmN0aW9uIGNhbiBwcm9wZXJseSBoYW5kbGUgYXJndW1lbnRzLgorCistIE5UTE0gc2luZ2xlLXNpZ24gb24gYWRqdXN0bWVudHMgKEkpCisgIAorICBVc2UgZmFrZV9udGxtIGFic29sdXRlIGZpbGVuYW1lIGluIE5UTE1fQVVUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdGVzdAorICAyMDA1IGRlZmluaXRpb24uCisKK0RhbiBGYW5kcmljaCAoMjYgSnVsIDIwMTEpCistIEZpeGVkIHRlc3QgMjAwNSB0byB3b3JrIGluIG91dC1vZi10cmVlIGJ1aWxkcworICAKKyAgQWxzbywgc2V0IHRoZSB0ZXN0IG51bWJlciBpbiB0aGUgdGVzdCBkYXRhIGZpbGUgc28gZmFrZV9udGxtIGNhbgorICBiZSByZXVzZWQgaW4gZnV0dXJlIHRlc3RzLgorCitZYW5nIFRzZSAoMjYgSnVsIDIwMTEpCistIGZpeCBjb21waWxlciB3YXJuaW5nCisKKy0gZml4IGNvbXBpbGVyIHdhcm5pbmcKKworLSBzdGRpby5oLCBzdGRsaWIuaCwgc3RyaW5nLmgsIHN0ZGFyZy5oIGFuZCBjdHlwZS5oIGluY2x1c2lvbiBkb25lIGluIHNldHVwX29uY2UuaAorCistIFdJTjMyIGlvLmggYW5kIGZjbnRsLmggaW5jbHVzaW9uIGRvbmUgaW4gc2V0dXBfb25jZS5oCisKKy0gdGltZS5oIGFuZCBzeXMvdGltZS5oIGluY2x1c2lvbiBjb25kaXRpb25hbGx5IGRvbmUgaW4gc2V0dXBfb25jZS5oCisKKy0gZXJybm8uaCBpbmNsdXNpb24gY29uZGl0aW9uYWxseSBkb25lIGluIHNldHVwX29uY2UuaCAtIGZvbGxvd3VwCisKKy0gZXJybm8uaCBpbmNsdXNpb24gY29uZGl0aW9uYWxseSBkb25lIGluIHNldHVwX29uY2UuaAorCitEYW5pZWwgU3RlbmJlcmcgKDIyIEp1bCAyMDExKQorLSBbQmVuIFdpbnNsb3cgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBwcm9ncmVzczogcmVzZXQgZmxhZ3MgYXQgdHJhbnNmZXIgc3RhcnQKKyAgCisgIFdoZW4gYW4gZWFzeSBoYW5kbGUgaXMgdXNlZCB0byBkb3dubG9hZCBhbiBVUkkgd2hpY2ggaGFzIG5vCisgIENvbnRlbnQtTGVuZ3RoIGhlYWRlciAob3IgZXF1aXZhbGVudCkgYWZ0ZXIgZG93bmxvYWRpbmcgYW4gVVJJIHdoaWNoCisgIGRvZXMsIHRoZSB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyB0cmFuc2ZlciBpcyByZXVzZWQgYW5kIHJldHVybmVkIGJ5CisgIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FELiBUaGlzIGlzIGJlY2F1c2UgdGhlIHByb2dyZXNzIGZsYWdzCisgICh1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHN1Y2ggYSBoZWFkZXIgd2FzIHJlY2VpdmVkKSBhcmUgbm90IHJlc2V0CisgIGJldHdlZW4gdHJhbnNmZXJzLgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMzcwODk1CisKKy0gUkVMRUFTRS1OT1RFUzogSFRUUCBlcnJvciBoYW5kbGluZyBvbiByZXF1ZXN0IGJvZHkgc2VuZAorCistIGh0dHAgZXJyb3IgcmVzcG9uc2U6IHN0b3Agc2VuZGluZyB3aGVuIGVycm9yIGlzIHJlY2VpdmVkCisgIAorICBXaGVuIGxpYmN1cmwgaGFzIHNhaWQgdG8gdGhlIHNlcnZlciB0aGF0IHRoZXJlJ3MgYSBQT1NUIG9yIFBVVCBjb21pbmcKKyAgKHdpdGggYSBjb250ZW50LWxlbmd0aCBhbmQgYWxsKSBpdCBoYXMgdG8gZWl0aGVyIGRlbGl2ZXIgdGhhdCBhbW91bnQgb2YKKyAgZGF0YSBvciBpdCBuZWVkcyB0byBjbG9zZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgdHJ5aW5nIGEgc2Vjb25kIHJlcXVlc3QuCisgIAorICBBZGRzIHRlc3QgY2FzZSAxMTI5LCAxMTMwIGFuZCAxMTMxCisgIAorICBUaGUgYnVnIHJlcG9ydCBpcyBhYm91dCB3aGVuIHVzZWQgd2l0aCAxMDAtY29udGludWUsIGJ1dCB0aGUgY2hhbmdlIGlzCisgIG1vcmUgZ2VuZXJpYy4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA2LzAxOTEuaHRtbAorICBSZXBvcnRlZCBieTogU3RldmVuIFBhcmtlcworCistIFtNaWNoYWVsIE11ZWxsZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBzc29fbnRsbV9pbml0aWF0ZTogdW5hc3NpZ25lZCB2YXJpYWJsZQorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDcvMDEwOS5odG1sCisKKy0gdGVzdDIwMDU6IHJlcXVpcmUgYSBkZWJ1ZyBidWlsZAorCistIHJ1bnRlc3RzOiBhZGQgJ2RlYnVnJyBhcyBhIGZlYXR1cmUgYSB0ZXN0IGNhbiByZXF1aXJlCisKKy0gY29uZmlndXJlOiBhdm9pZCAidGVzdCAtZSIKKyAgCisgICJ0ZXN0IC1lIiBpcyBQT1NJWCBidXQgY2xlYXJseSB3YXMgbm90IHN1cHBvcnRlZCBieSB0aGUgU3VuT1Mgc2gKKyAgdmVyc2lvbiwgLWYgaXMgc3VwcG9ydGVkIGFuZCBzaG91bGQgYmUgYSBkZWNlbnQgZXF1aXZhbGVudAorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMzcxNTc0CisKKy0gc3ltYm9scy1pbi12ZXJzaW9uczogYWRkIE5UTE1fU1NPIHN5bWJvbHMKKworLSBnaXRpZ25vcmU6IGlnbm9yZSBmYWtlX250bG0KKworLSBbTWFuZHkgV3UgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICB0ZXN0MjAwNTogdmVyaWZ5IG50bG0gc2luZ2xlLXNpZ25vbgorCistIFtNYW5keSBXdSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIE5UTE0gc2luZ2xlLXNpZ24gb24gc3VwcG9ydGVkCisgIAorICBXaXRoIHRoZSB1c2Ugb2YgdGhlICdudGxtX2F1dGgnIHRvb2wgZnJvbSB0aGUgU2FtYmEgcHJvamVjdAorCistIHN3czogZG9uJ3QgZW5hYmxlIHBpcGVsaW5pbmcgZm9yIHJlcXVlc3RzIHdpdGggY29udGVudC1sZW5ndGgKKyAgCisgIExvZyB0ZXh0cyBhbHNvIG1vZGlmaWVkIGFuZCBzb21lIHdoaXRlIHNwYWNlIGVkaXRzCisKK1BhdHJpY2sgTW9ubmVyYXQgKDE0IEp1bCAyMDExKQorLSBGaXggT1M0MDAgc2NyaXB0cyB0byBtYWtlIGl0IGNvbXBpbGFibGUgYWdhaW4uCisgIFVwZ3JhZGUgSUxFL1JQRyBiaW5kaW5nIHRvIDcuMjEuNy4KKyAgVXBkYXRlIE9TNDAwIGRvY3VtZW50YXRpb24gYWNjb3JkaW5nbHkuCisKK0RhbmllbCBTdGVuYmVyZyAoMTQgSnVsIDIwMTEpCistIHJ1bnRlc3RzOiBpZ25vcmUgdGhlICdhbGxfcHJveHknIGVudmlyb25tZW50IHZhcmlhYmxlIGFzIHdlbGwKKyAgCisgIFdlIHNob3VsZCBwcm9iYWJseSBhbHNvIG1ha2Ugc3VyZSB0aGF0IFtwcm90b2NvbF1fcHJveHkgZm9yIGFsbCBwb3NzaWJsZQorICBwcm90b2NvbHMgbGliY3VybCBzdXBwb3J0cyBhcmUgdW5zZXQuCisKK0p1bGllbiBDaGFmZnJhaXggKDEzIEp1bCAyMDExKQorLSBjdXJsX2dzc2FwaTogR3VhcmQgZmlsZXMgd2l0aCBIQVZFX0dTU0FQSS4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA3LzAwNzQuaHRtbAorICBSZXBvcnRlZCBhbmQgZml4IHN1Z2dlc3RlZCBieTogQmVuIEdyZWVhcgorCitEYW5pZWwgU3RlbmJlcmcgKDEzIEp1bCAyMDExKQorLSBnc3NhcGk6IHJlbmFtZSBvdXIgZmlsZXMgdG8gYXZvaWQgY29uZmxpY3RzCisgIAorICBnc3NhcGkuaCBpcyB1c2VkIGFzIGEgaGVhZGVyIG5hbWUgYnkgSGVpbWRhbC1zdHlsZSBHU1NBUEkgc28gaXQgd291bGQKKyAgY29uZmxpY3Qgd2l0aCBhIHByaXZhdGUgaGVhZGVyIHVzaW5nIHRoYXQgbmFtZSwgYW5kIHdoaWxlIHJlbmFtaW5nIHRoZQorICBoZWFkZXIgSSBmaWd1cmVkIHdlIHNob3VsZCBuYW1lIHRoZSAuYyBmaWxlIGFjY29yZGluZ2x5IGFzIHdlbGwuCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wNy8wMDcxLmh0bWwKKyAgUmVwb3J0ZWQgYnk6IEJlbiBHcmVlYXIKKworLSBzaWxlbmNlIHBpY2t5IGNvbXBpbGVyczogbWFyayB1bnVzZWQgcGFyYW1ldGVycworICAKKyAgTW9kZXJuIGdjYyB2ZXJzaW9ucyAoNC42LlgpIGdldCBtb3JlIHBpY2t5IGJ5IGRlZmF1bHQgYW5kIGhhdmUgc3RhcnRlZAorICB0byB3YXJuIGZvciB1bnVzZWQgcGFyYW1ldGVycywgYnV0IGx1Y2tpbHkgZ2NjIGFsc28gYWxsb3dzIHVzIHRvIG1hcmsKKyAgdGhlbSBhcyB1bnVzZWQgc28gdGhhdCB3ZSBjYW4gYXZvaWQgdGhlIHdhcm5pbmdzLgorCitKdWxpZW4gQ2hhZmZyYWl4ICgxMiBKdWwgMjAxMSkKKy0gZ3NzYXBpLmM6IFNpbXBsaWZpZWQgdGhlIGZ1bmN0aW9uLgorICAKKyAgUmVtb3ZlZCB0aGUgcGFyYW1ldGVycyB0aGF0IHdlcmUgY29tbW9uIHRvIGFsbCBvdXIgaW52b2NhdGlvbi4KKworLSBBZGRlZCBDdXJsX2dzc19pbml0X3NlY19jb250ZXh0LgorICAKKyAgVGhpcyBmdW5jdGlvbiB3cmFwcyBvdXIgY2FsbHMgdG8gZ3NzX2luaXRfc2VjX2NvbnRleHQgc28gdGhhdCB3ZQorICBoYXZlIGEgdW5pZmllZCB3YXkgdG8gdGFsayB0byBHU1NBUEkuCisKKy0gaHR0cF9uZWdvY2lhdGU6IEJlIGNvbnNpc3RlbnQgaW4gZ3NzX2luaXRfc2VjX2NvbnRleHQgYXR0cmlidXRlcy4KKyAgCisgIFRoaXMgY2hhbmdlIG1ha2VzIHRoaXMgY2FsbHNpdGUgbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIGNvZGUuCisKK0RhbmllbCBTdGVuYmVyZyAoNCBKdWwgMjAxMSkKKy0gY29kZSBzdHlsZTogc3BhY2UgYmV0d2VlbiBjbG9zZSBwYXJlbiBhbmQgb3BlbiBicmFjZQorCistIGNoZWNrc3JjOiBkZXRlY3Qgb3BlbiBicmFjZSB3aXRob3V0IHNwYWNlCisgIAorICBXZSB1c2UgImlmKGNvbmRpdGlvbikgeyIgd2l0aCBhIHNwYWNlIGJldHdlZW4gdGhlIGNsb3NlIHBhcmVuIGFuZCB0aGUKKyAgb3BlbiBicmFjZS4KKworLSBwb2xhcnNzbC5oOiByZW1vdmUgQ1ZTIGxlZnRvdmVyCisKKy0gaGVscCBvdXRwdXQ6IG1vcmUgZ251IGxpa2Ugb3V0cHV0CisgIAorICBGaXJzdCwgdGhlIC1KLy0tcmVtb3RlLWhlYWRlci1uYW1lIHdhcyB3cm9uZ2x5IHNvcnRlZCBpbiB0aGUgLS1oZWxwCisgIG91dHB1dCBhcyBwb2ludGVkIG91dCBpbiBidWcgcmVwb3J0ICMzMzQ5MjcxLgorICAKKyAgVGhlbiwgSSBjaGFuZ2VkIHRoZSBmb3JtYXQgb2YgdGhlIHRleHRzIHRvIGZvbGxvdyB0aGUgbWFuIHBhZ2UgYmV0dGVyIGluCisgIHRoYXQgaXQgbm93IHVzZXMgIi1BLCAtLWxvbmciIGludGVhZCBvZiAiLUEvLS1sb25nIi4gSSBhbHNvIG1hZGUgYWxsCisgIGFkZGl0aW9uYWwgYXJndW1lbnRzIGdldCB3cml0dGVuIGFzIGluICItQSwgLS1sb25nIEZJTEVOQU1FIiBpbnN0ZWFkIG9mCisgIHRoZSBwcmV2aW91cyAiPGZpbGVuYW1lPiIgc3R5bGUuCisgIAorICBSZXBvcnRlZCBieTogSGVydmUgQW1ibGFyZAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMzNDkyNzEKKworLSBzd3M6IGFsbG93IG11bHRpcGxlIGNvbW1hbmRzIGluIDxzZXJ2ZXJjbWQ+CisKKy0gQ3VybF9odHRwX3JlYWR3cml0ZV9oZWFkZXJzOiBtaW5vciBpbmRlbnQgZml4CisKKy0gZ2l0aWdub3JlOiBjb25maWcuY2FjaGUKKworLSBkb2NzOiBGVFAgcXVvdGVzIHN1cHBvcnQgJyonIHByZWZpeCB0byBpZ25vcmUgZXJyb3JzCisgIAorICBCeSBkZWZhdWx0IGxpYmN1cmwgc3RvcHMgcHJvY2Vzc2luZyBxdW90ZSBjb21tYW5kcyBvbiBmYWlsdXJlcy4KKworLSBUSEFOS1M6IG5ldyBjb250cmlidXRvcnMgZnJvbSA3LjIxLjcKKworLSBnZXRfZ3NzX25hbWU6IHByb3h5IGF1dGggd2l0aG91dCBwcm94eSBzZXQgZXF1YWxzIGVycm9yCisgIAorICBQcmV2aW91c2x5IGl0IHdvdWxkIGFjY2VzcyBhIE5VTEwgcG9pbnRlciBhbmQgZGllLgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDYvMDE3MC5odG1sCisgIFJlcG9ydGVkIGJ5OiBDaHJpc3RpYW4gSGFnZWxlCisKKy0gZXhhbXBsZXM6IGNsZWFudXAgY3VybCBpbmNsdWRlcworICAKKyAgT25seSA8Y3VybC9jdXJsLmg+IGlzIG5lZWRlZCB0eXBpY2FsbHkgYW5kIGN1cmwvdHlwZXMuaCBoYXMgYmVlbiByZW1vdmVkCisKKy0gbGlidGVzdHM6IHN0b3AgY2hlY2tpbmcgZm9yIENVUkxNX0NBTExfTVVMVElfUEVSRk9STQorICAKKyAgQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNIHN0b3BwZWQgYmVpbmcgYSB2YWxpZCByZXR1cm4gY29kZSBmcm9tCisgIGN1cmxfbXVsdGlfcGVyZm9ybSBiYWNrIGluIDcuMjAuMC4gQWxsIHRoZSBsaWJjdXJsIHRlc3RzIGFyZSBhanVzdGVkIHRvCisgIHRoaXMgYW5kIG5vIGxvbmdlciBjaGVjayBmb3IgdGhpcyByZXR1cm4gY29kZS4gTWFrZXMgdGhlbSBzaW1wbGVyLgorCitEYW4gRmFuZHJpY2ggKDI0IEp1biAyMDExKQorLSBGaXhlZCB0ZXN0IDEzMDAgdG8gcGFzcyB0aGUgbWVtb3J5IHRvcnR1cmUgdGVzdAorCitUb20gV3JpZ2h0ICgyNCBKdW4gMjAxMSkKKy0gbG9va3MgbGlrZSB0aGlzIHNob3VsZCBiZSBzdGF0aWMsIG5vdCBkbGwKKworRGFuIEZhbmRyaWNoICgyMyBKdW4gMjAxMSkKKy0gRGlzcGxheSBub3RlcyBmcm9tIHNldHVwIGZpbGUgaW4gdGVzdGN1cmwucGwKKyAgCisgIEF1dG9idWlsZCBzdWJtaXR0ZXJzIGNhbiB1c2UgdGhpcyB0byBhZGQgc29tZSB0ZXh0IHRvIHRoZWlyCisgIHNldHVwIGZpbGVzIHRvIGRlc2NyaWJlIGlzc3VlcyB0aGV5J3ZlIGZvdW5kIHdpdGggdGhlIGJ1aWxkCisgIG9yIHRlc3RzLiBUaGlzIGNvdWxkIGluY2x1ZGUgbGF5aW5nIGJsYW1lIG9uIHRlc3QgZmFpbHVyZXMgb24KKyAgbmV0d29yayBpc3N1ZXMgb3IgZGVwZW5kZW50IGxpYnJhcmllcywgZXhwbGFpbmluZyBhd2F5IGNvbXBpbGVyCisgIHdhcm5pbmdzIG9yIHByb3ZpZGluZyBhbnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGJlCisgIHVzZWZ1bCB0byBwZW9wbGUgcmV2aWV3aW5nIGFuZCBpbnZlc3RpZ2F0aW5nIHByb2JsZW1zIHdpdGggdGhlCisgIHB1YmxpY2x5IGF2YWlsYWJsZSBhdXRvYnVpbGQgbG9ncy4gIE5vdGUgdGhhdCBwZXJzaXN0ZW50IHRlc3QKKyAgZmFpbHVyZXMgdGhhdCBhcmUgbm90IGlzc3VlcyB3aXRoIGN1cmwgaXRzZWxmIHNob3VsZCBub3JtYWxseSBiZQorICBmaXhlZCBieSBleGNsdWRpbmcgdGhlbSBmcm9tIHRoZSB0ZXN0IHJ1biBpbnN0ZWFkLgorICAKKyAgVGhpcyBpcyBhbiBlbnRpcmVseSBvcHRpb25hbCBmaWVsZCB0aGF0IGlzIG5vdCBlbnRlcmVkIGJ5IHRoZQorICB1c2VyIHRoZSBmaXJzdCB0aW1lIGEgbmV3IGJ1aWxkIGlzIGNyZWF0ZWQuCisKKy0gQWRkZWQgYSBsZWFwIHNlY29uZCB0ZXN0IHRvIHRlc3Q1MTcKKworRGFuaWVsIFN0ZW5iZXJnICgyMyBKdW4gMjAxMSkKKy0gcnVudGVzdHMucGw6IHdhcm4gaWYgYSB0ZXN0IGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQKKyAgCisgIEp1c3QgdG8gbWFrZSBzdXJlIGEgdXNlciBpcyBhd2FyZSBvZiBpdC4KKworLSBidW1wIHJlbGVhc2U6IHN0YXJ0IHdvcmtpbmcgdG93YXJkcyA3LjIxLjgKKworLSBwYXJzZWRhdGU6IGRldGVjdCBtb3JlIGludmFsaWQgZGF0ZXMgYmV0dGVyCisKK1ZlcnNpb24gNy4yMS43ICgyMyBKdW4gMjAxMSkKKworRGFuaWVsIFN0ZW5iZXJnICgyMyBKdW4gMjAxMSkKKy0gY3VybF9mb3JtZnJlZTogY2xhcmlmeSB3aGljaCBwb2ludGVyIHRvIGZyZWUKKworLSBSRUxFQVNFLU5PVEVTOiBtZW50aW9uIHNlY3VyaXR5IGlzc3VlIDIwMTEwNjIzCisgIAorICBsaWJjdXJsIGluYXBwcm9wcmlhdGUgR1NTQVBJIGRlbGVnYXRpb24uIEZ1bGwgZGV0YWlscyBhdAorICBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvYWR2XzIwMTEwNjIzLmh0bWwKKworLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCA5MDE2OTU4YWE4OTg5CisKKy0gQ3VybF9pbnB1dF9uZWdvdGlhdGU6IGRvIG5vdCBkZWxlZ2F0ZSBHU1NBUEkgY3JlZGVudGlhbHMKKyAgCisgIFRoaXMgaXMgYSBzZWN1cml0eSBmbGF3LiBTZWUgY3VybCBhZHZpc29yeSAyMDExMDYyMyBmb3IgZGV0YWlscy4KKyAgCisgIFJlcG9ydGVkIGJ5OiBSaWNoYXJkIFNpbHZlcm1hbgorCistIFtKb3N1ZSBBbmRyYWRlIEdvbWVzIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgd2luZG93cyBidWlsZDogdXNlIGNvcnJlY3QgTVMgQ1JUCisKKy0gTWVyZ2UgcHVsbCByZXF1ZXN0ICMyMyBmcm9tIHNhbHR5LWhvcnNlL3BvcDNfbGlzdF9zcGFjZQorICAKKyAgW3BvcDNdIHJlbW92ZSBleHRyYSBzcGFjZSBpbiBMSVNUIGNvbW1hbmQKKworT3JpIEF2dGFsaW9uICgyMSBKdW4gMjAxMSkKKy0gW3BvcDNdIHJlbW92ZSBleHRyYSBzcGFjZSBpbiBMSVNUIGNvbW1hbmQKKyAgCisgIFNvbWUgc2VydmVycywgZS5nLiBtYWlsLmJlemVxaW50Lm5ldDoxMTAsIGNvbnNpZGVyIGl0IGEgc3ludGF4IGVycm9yCisKK1lhbmcgVHNlICgyMSBKdW4gMjAxMSkKKy0gaHR0cDogZml4IGNvbXBpbGVyIHdhcm5pbmcKKyAgCisgIGNvbXBpbGVyIHdhcm5pbmc6IGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQKKworLSBhc3luLXRocmVhZDogZml4IGNvbXBpbGVyIHdhcm5pbmcKKyAgCisgIGNvbXBpbGVyIHdhcm5pbmc6IHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIGJ1dCBub3QgcmVmZXJlbmNlZAorCistIGNtYWtlOiByZW1vdmUgc3B1cmlvdXMgZGVmaW5pdGlvbgorCitEYW5pZWwgU3RlbmJlcmcgKDIxIEp1biAyMDExKQorLSBGQVE6IG1vcmUgYmx1cmIgb24gcGVyc2lzdGVudCBjb25uZWN0aW9ucworCitZYW5nIFRzZSAoMjEgSnVuIDIwMTEpCistIHhjLXRyYW5zbGl0Lm00IGZpeCBxdW90aW5nCisKK0RhbmllbCBTdGVuYmVyZyAoMjAgSnVuIDIwMTEpCistIElOU1RBTEw6IG1lbnRpb24gdGhlIEdJVC1JTkZPIGZpbGUKKworRGFuIEZhbmRyaWNoICgyMCBKdW4gMjAxMSkKKy0gQWRkZWQgTE9DQUxfTU9EVUxFX1RBR1MgdG8gc3VwcG9ydCBBbmRyb2lkIGdpbmdlcmJyZWFkCisKK0RhbmllbCBTdGVuYmVyZyAoMTkgSnVuIDIwMTEpCistIFtBbXIgU2hhaGluIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgdW5pdHRlc2V0OiBDdXJsX2xsaXN0X21vdmUKKyAgCisgIGFkZGluZyB1bml0IHRlc3QgZm9yIEN1cmxfbGxpc3RfbW92ZSwgZG9jdW1lbnRpbmcgdW5pdC10ZXN0ZWQgZnVuY3Rpb25zCisgIGluIGxsaXN0LmMsIGNoYW5naW5nIHVuaXQtdGVzdCB0byB1bml0dGVzdCwgcmVwbGFjaW5nIGFzc2VydCBjYWxscyB3aXRoCisgIGFib3J0X3VubGVzcyBjYWxscworCistIENVUkxGT1JNX1NUUkVBTTogYWNrbm93bGVkZ2UgQ1VSTEZPUk1fRklMRU5BTUUKKyAgCisgIFRoZSBDVVJMRk9STV9TVFJFQU0gaXMgZG9jdW1lbnRlZCB0byBvbmx5IGluc2VydCBhIGZpbGUgbmFtZSAoYW5kIHRodXMKKyAgbG9vayBsaWtlIGEgZmlsZSB1cGxvYWQpIGluIHRoZSBwYXJ0IGlmIENVUkxGT1JNX0ZJTEVOQU1FIGlzIHNldCwgYnV0IGluCisgIHJlYWxpdHkgaXQgYWx3YXlzIGluc2VydGVkIGEgZmlsZW5hbWU9IiIgYW5kIGlmIENVUkxGT1JNX0ZJTEVOQU1FIHdhc24ndAorICBzZXQsIGl0IHdvdWxkIGluc2VydCBpbnNlcnQgcnViYmlzaCAob3IgcG9zc2libHkgY3Jhc2gpLgorICAKKyAgVGhpcyBpcyBub3cgZml4ZWQgdG8gd29yayBhcyBkb2N1bWVudGVkLCBhbmQgdGVzdCA1NTQgaGFzIGJlZW4gZXh0ZW5kZWQKKyAgdG8gdmVyaWZ5IHRoaXMuCisgIAorICBSZXBvcnRlZCBieTogU2FzY2hhIFN3aWVyY3kKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDYvMDA3MC5odG1sCisKK1lhbmcgVHNlICgxNyBKdW4gMjAxMSkKKy0gY29uZmlndXJlOiBhdm9pZCBkaXJlY3QgdXNhZ2Ugb2YgQVNfVFJfKiBtYWNyb3MKKworLSB4Yy10cmFuc2xpdC5tNCBwcm92aWRlcyB0cmFuc2xpdGVyYXRpb24gbWFjcm9zIHdpdGggd2VsbCBkZWZpbmVkIGJlaGF2aW9yLgorCitEYW5pZWwgU3RlbmJlcmcgKDE0IEp1biAyMDExKQorLSBSRUxFQVNFLU5PVEVTOiBhZGQgbW9yZSBjb250cmlidXRvcnMgZm9yIHRoaXMgcmVsZWFzZQorCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDBhZWRjY2MxOGEzM2E3Nzg1MzUKKworLSBjdXJsX2Zvcm1nZXQ6IGZpeCBGSUxFICogbGVhaworICAKKyAgUHJvcGVybHkgZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQgdGhlIGxhc3QgZnJlYWQoKSBjYWxsIG1vc3QgcHJvYmFibHkgaXMKKyAgYSBzaG9ydCByZWFkLCBhbmQgd2hlbiB1c2luZyBjYWxsYmFja3MgaW4gZmFjdCBhbGwgY2FsbHMgY2FuIGJlIHNob3J0CisgIHJlYWRzLiBObyBsb25nZXIgY29uc2lkZXIgYSBmaWxlIHJlYWQgZG9uZSB1bnRpbCBpdCByZXR1cm5zIGEgMCBmcm9tIHRoZQorICByZWFkIGZ1bmN0aW9uLgorICAKKyAgUmVwb3J0ZWQgYnk6IEFhcm9uIE9yZW5zdGVpbgorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wNi8wMDQ4Lmh0bWwKKworLSBjdXJsX2Zvcm1nZXQ6IHRyZWF0IENVUkxGT1JNX1NUUkVBTSBiZXR0ZXIKKyAgCisgIElmIGEgcGllY2UgaXMgc2V0IHRvIHVzZSBhIGNhbGxiYWNrIHRvIGdldCB0aGUgZGF0YSwgaXQgc2hvdWxkIG5vdCBiZQorICB0cmVhdGVkIGFzIGRhdGEuIEl0IHVuZm9ydHVuYXRlbHkgYWxzbyByZXF1aXJlcyB0aGF0IGN1cmxfZWFzeV9wZXJmb3JtKCkKKyAgb3Igc2ltaWxhciBoYXMgYmVlbiB1c2VkIGFzIG90aGVyd2lzZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaGFzbid0IGJlZW4KKyAgZmlndXJlZCBvdXQgYW5kIGN1cmxfZm9ybWdldCB3b24ndCBrbm93IGhvdyB0byBnZXQgdGhlIGNvbnRlbnQuCisKKy0gY3VybF9mb3JtZ2V0LjM6IENVUkxGT1JNX1NUUkVBTSBoYXMgaXRzIGRyYXdiYWNrcworICAKKyAgRHVlIHRvIGEgZGVzaWduIGZsYXcsIHRoZSBDVVJMRk9STV9TVFJFQU0gb3B0aW9uIGRvZXNuJ3QgcmVhbGx5IHdvcmsKKyAgd2l0aCBjdXJsX2Zvcm1nZXQgdW50aWwgYWZ0ZXIgY3VybF9lYXN5X3BlcmZvcm0gKG9yIHNpbWlsYXIpLgorCistIEZBUTogYmluZGluZyBjbGFyaWZpY2F0aW9uCisgIAorICBXZSBkb24ndCBhdXRob3IgdGhlIGJpbmRpbmdzLCB0aGV5IGFyZSBjcmVhdGVkIG91dHNpZGUgdGhlIG1haW4gcHJvamVjdC4KKworRGFuIEZhbmRyaWNoICgxMSBKdW4gMjAxMSkKKy0gQWRkZWQgaHR0cCBhcyBhIGRlcGVuZGVuY3kgb2YgdGVzdCAxMzA4CisKK0RhbmllbCBTdGVuYmVyZyAoMTIgSnVuIDIwMTEpCistIHRlc3QxMzA5OiBhZGRlZCB0byB0aGUgZGlzdAorCistIHdyaXRlOiBhZGQgcmV0dXJuIGNvZGUgY2hlY2tzIHdoZW4gdXNlZAorICAKKyAgVGhlc2Ugd2VyZSBqdXN0IHdhcm5pbmdzIGluIHRlc3QgY29kZSBidXQgaXQgc3RpbGwgbWFrZXMgaXQgbmljZXIgdG8gbm90CisgIGdlbmVyYXRlIHRoZW0uCisKKy0gbG9uZy9pbnQgbWVzcworICAKKyAgVHlwZWNhc3Qgd2hlbiBjb252ZXJ0aW5nIHRvIGludCBmcm9tIGxvbmcgdG8gYXZvaWQgc29tZSBjb21waWxlciB3YXJuaW5ncworCitZYW5nIFRzZSAoMTEgSnVuIDIwMTEpCistIGNvbmZpZ3VyZTogT3BlblNTTCBBUEkgZGV0ZWN0aW9uIGNsZWFudXAKKworRGFuIEZhbmRyaWNoICgxMSBKdW4gMjAxMSkKKy0gRml4ZWQgdGVzdCAxMzA5IHRvIHBhc3MgdGhlIHRvcnR1cmUgdGVzdAorICAKKyAgUmVtb3ZpbmcgZHluYW1pYyBhbGxvY2F0aW9ucyBhbHNvIHNpbXBsaWZpZXMgdGhlIHRlc3QuCisKK0RhbmllbCBTdGVuYmVyZyAoMTAgSnVuIDIwMTEpCistIHNwbGF5OiBhZGQgdW5pdCB0ZXN0cworICAKKyAgVGhlIHRlc3QgY29kZSB0aGF0IHdhcyAjaWZkZWYnZWQgaW4gdGhlIGNvZGUgd2FzIGNvbnZlcnRlZCBpbnRvIHVuaXQKKyAgdGVzdHMgaW4gdGVzdCBjYXNlIDEzMDkuIEkgYWxzbyByZW1vdmVkIHRoZSAjaWYgMCdlZCBjb2RlIGZyb20gc3BsYXkuYworCistIHVuaXR0ZXN0OiBtYXJrIGFsbCB1bml0IHRlc3RlZCBmdW5jdGlvbnMKKyAgCisgIFdpdGggIkB1bml0dGVzdDogW251bV0iIGluIHRoZSBoZWFkZXIgY29tbWVudCBmb3IgZWFjaCB0ZXN0ZWQgZnVuY3Rpb24uCisgIFNob3dzIHdlIGhhdmUgYSBsb2cgd2F5IHRvIGdvIHN0aWxsLi4uCisKKy0gQ1VSTE9QVF9XUklURUhFQURFUjogY2xhcmlmeSB0aGUgZG9jcworCistIHVuaXQgdGVzdCBmb3JtcG9zdDogYWRkZWQgdGVzdCBjYXNlIDEzMDgKKyAgCisgIFRoaXMgaXMgYSBmZXcgZmlyc3QgcmF0aGVyIGJhc2ljIHRlc3RzIG9mIGN1cmxfZm9ybWFkZCgpIGFuZAorICBjdXJsX2Zvcm1nZXQoKS4gU2hvdWxkIHNlcnZlIGFzIGJ1aWxkaW5nIGJsb2NrcyB0byBhZGQgbW9yZSB2YXJpYXRpb25zCisgIHRvIHRoZSB0ZXN0LgorCitZYW5nIFRzZSAoOSBKdW4gMjAxMSkKKy0gY29uZmlndXJlOiB3YXJuIGlmIE9wZW5TU0wgaGVhZGVycyBhbmQgbGlicmFyeSB2ZXJzaW9ucyBkb24ndCBtYXRjaAorCistIGNvbmZpZ3VyZTogZ2V0IEFQSSBpbmZvIGZvciBhIGNvdXBsZSBvZiBPcGVuU1NMIGZ1bmN0aW9ucyAoZm9sbG93dXAgMikKKworLSBjb25maWd1cmU6IGdldCBBUEkgaW5mbyBmb3IgYSBjb3VwbGUgb2YgT3BlblNTTCBmdW5jdGlvbnMgKGZvbGxvd3VwIDEpCisKKy0gY29uZmlndXJlOiBmaXggcmVjdmZyb20gNXRoIGFyZyB0eXBlIHF1YWxpZmllciBkZXRlY3Rpb24gKGZvbGxvd3VwKQorCistIGNvbmZpZ3VyZTogZml4IHJlY3Zmcm9tIDV0aCBhcmcgdHlwZSBxdWFsaWZpZXIgZGV0ZWN0aW9uCisKK0thbWlsIER1ZGthICg4IEp1biAyMDExKQorLSBkaXNjb25uZWN0OiB3aXBlIG91dCB0aGUga2VlcHNfc3BlZWQgdGltZSBzdGFtcAorICAKKyAgV2hlbiBjbG9zaW5nIGEgY29ubmVjdGlvbiwgdGhlIHNwZWVkY2hlY2tlcidzIHRpbWVzdGFtcCBpcyBub3cgZGVsZXRlZAorICBzbyB0aGF0IGl0IGNhbm5vdCBhY2NpZGVudGFsbHkgYmUgdXNlZCBieSBhIGZyZXNoIGNvbm5lY3Rpb24gb24gdGhlIHNhbWUKKyAgaGFuZGxlIHdoZW4gZXhhbWluaW5nIHRoZSB0cmFuc2ZlciBzcGVlZC4KKyAgCisgIEJ1ZzogaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tLzY3OTcwOQorCitZYW5nIFRzZSAoNyBKdW4gMjAxMSkKKy0gdXJsZGF0YTogdXNlIHVuaWZvcm0gaW5jbHVzaW9uIHN0eWxlIGZvciBPcGVuU1NMIGhlYWRlcnMKKworRGFuaWVsIFN0ZW5iZXJnICg3IEp1biAyMDExKQorLSBIVFRQIHRpbWUgY29uZGl0aW9uOiBmb3JjZSBjbG9zdXJlIGZvciAyMDAgT0sKKyAgCisgIFdoZW4gYSB0aW1lIGNvbmRpdGlvbiBpc24ndCBtZXQsIHNvIHRoYXQgbm8gYm9keSBpcyBkZWxpdmVyZWQgdG8gdGhlCisgIGFwcGxpY2F0aW9uIGV2ZW4gdGhvdWdoIGEgMnh4IHJlc3BvbnNlIGlzIGJlaW5nIHJlYWQgZnJvbSB0aGUgc2VydmVyLCB3ZQorICBtdXN0IGNsb3NlIHRoZSBjb25uZWN0aW9uIHRvIGF2b2lkIGEgcmUtdXNlIG9mIHRoZSBjb25uZWN0aW9uIHRvIGJlCisgIGNvbXBsZXRlbHkgdHJpY2tlZC4KKyAgCisgIEFkZGVkIHRlc3QgMTEyOCB0byB2ZXJpZnkuCisKKy0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggYjc3MmYzYTMyMTQ2ZDdkCisKK1lhbmcgVHNlICg2IEp1biAyMDExKQorLSBjb25maWd1cmU6IGdldCBBUEkgaW5mbyBmb3IgYSBjb3VwbGUgb2YgT3BlblNTTCBmdW5jdGlvbnMKKworRGFuaWVsIFN0ZW5iZXJnICg1IEp1biAyMDExKQorLSB3YWl0X21zOiB0YWtlcyBhbiBpbnQgYXJndW1lbnQKKyAgCisgIFR5cGVjYXN0cyBhZGRlZCBzaW5jZSBJIGNoYW5nZWQgbW9yZSBjb2RlIHRvIHVzZSBsb25nIGZvciB0aW1lb3V0cworCistIEN1cmxfc29ja2V0X3JlYWR5OiBtYWtlIHRpbWVvdXQgYSAnbG9uZycKKyAgCisgIEl0IHdhcyBtb3N0bHkgdHlwZWNhc3RlZCB0byBpbnQgYWxsIG92ZXIgdGhlIGNvZGUgc28gc3dpdGNoaW5nIHRvIGxvbmcKKyAgaW5zdGVhZCBhbGwgb3ZlciBzaG91bGQgYmUgYSBuZXQgZ2Fpbi4KKworWWFuZyBUc2UgKDQgSnVuIDIwMTEpCistIHhsYzogYXZvaWQgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24gdXNhZ2Ugd2hlbiBsaW5raW5nCisKKy0gdW5pdCB0ZXN0czogZGlzYWJsZSB1bml0IHRlc3RzIGZvciBhIGdpdmVuIGNyb3NzLWNvbXBpbGF0aW9uIGNvbmZpZ3VyYXRpb24uCisgIAorICBjcm9zcy1jb21waWxhdGlvbiBvZiB1bml0IHRlc3RzIHN0YXRpYyBsaWJyYXJ5L3Byb2dyYW1zIGZhaWxzIHdoZW4KKyAgbGliY3VybCBzaGFyZWQgbGlicmFyeSBpcyBhbHNvIGJ1aWx0LiBUaGlzIG1pZ2h0IGJlIGR1ZSB0byBhIGxpYnRvb2wgb3IKKyAgYXV0b21ha2UgaXNzdWUuIEluIHRoaXMgY2FzZSB3ZSBkaXNhYmxlIHVuaXQgdGVzdHMuCisKK0RhbmllbCBTdGVuYmVyZyAoMyBKdW4gMjAxMSkKKy0gY29va2llX291dHB1dDogbWFkZSBwcml2YXRlCisKKy0gZGlnZXN0X2NsZWFudXBfb25lOiBtYWRlIHByaXZhdGUKKworLSBwcml2YXRpc2U6IG1ha2UgcHJpdmF0ZSBmdW5jdGlvbnMgc3RhdGljCisKKy0gQ3VybF9maWxlaW5mb19kdXA6IHJlbW92ZWQsIG5vdCB1c2VkCisKKy0gcGFyc2VkYXRlOiB0dXJuIHByaXZhdGUgYW5kIHN0YXRpYworICAKKyAgSSByZW1vdmVkIHRoZSBwcmVmaXggYXMgd2VsbCBhY2NvcmRpbmdseS4KKworRGFuIEZhbmRyaWNoICgyIEp1biAyMDExKQorLSBjdXJsIGhhc24ndCBzZW50IGEgUHJhZ21hOiBoZWFkZXIgYnkgZGVmYXVsdCBmb3IgYSB3aGlsZQorCitZYW5nIFRzZSAoMiBKdW4gMjAxMSkKKy0gdW5pdCB0ZXN0czogYXR0ZW1wdCB0byBmaXggbGlua2FnZSBpc3N1ZQorCistIHVybGdsb2I6IGZpeCB6ZXJvIHNpemUgbWFsbG9jCisKKy0gUmVtb3ZlIHVubmVjZXNzYXJ5IHR5cGVjYXN0CisKKy0gY29tcGlsZXIgd2FybmluZzogZml4CisgIAorICBGaXggY29tcGlsZXIgd2FybmluZzogY2FzdCBpbmNyZWFzZXMgcmVxdWlyZWQgYWxpZ25tZW50CisKKy0gdW5pdCB0ZXN0czogbWFrZSB1bml0IHRlc3RzIGJ1aWxkaW5nIGFjdHVhbGx5IGRlcGVuZCBvbiAtLWVuYWJsZS1kZWJ1ZyBvcHRpb24uCisKKy0gT3BlblNTTCBlbmFibGVkOiByZXF1aXJlIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgZGVmaW5pdGlvbiBiZWZvcmUgdXNhZ2UuCisKKy0gdW5pdCB0ZXN0czogbW9yZSBidWlsZCBhZGp1c3RtZW50cworCitEYW5pZWwgU3RlbmJlcmcgKDEgSnVuIDIwMTEpCistIENVUkxPUFRfV0lMRENBUkRNQVRDSDogbWlub3Igc3R5bGUgZWRpdAorICAKKyAgRHVlIHRvIHNvbWUgZmxhdyBpbiByb2ZmaXQgSSByZW1vdmVkIHNvbWUgc3R5bGUgY2hhbmdlcyB0byBtYWtlIHRoZSB3ZWIKKyAgcGFnZSBsb29rIGJldHRlci4KKworWWFuZyBUc2UgKDEgSnVuIDIwMTEpCistIG1ha2VmaWxlOiBhdm9pZCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbiB1c2FnZSB3aGVuIGxpbmtpbmcKKworLSB3YXJubGVzczogaWNjIDkuMSB3b3JrYXJvdW5kCisKK0RhbmllbCBTdGVuYmVyZyAoMzEgTWF5IDIwMTEpCistIHRlc3RjdXJsLnBsOiBhbGxvdyBjb25maWd1cmUgYXJncyB0byB1c2UgJz0nCisKK1lhbmcgVHNlICgzMCBNYXkgMjAxMSkKKy0gTWFrZWZpbGUuYW06IGZpeCBzcHVyaW91cyBDRkxBR1MgZHVwbGljYXRpb24KKworRGFuIEZhbmRyaWNoICgzMCBNYXkgMjAxMSkKKy0gUmVtb3ZlZCB0eXBlcy5oIGZyb20gQW5kcm9pZCBtYWtlZmlsZQorCitEYW5pZWwgU3RlbmJlcmcgKDMwIE1heSAyMDExKQorLSBjb25maWd1cmUuYWM6IHNraXAgL2Rldi91cmFuZG9tIGNoZWNrIHdoZW4gY3Jvc3MtY29tcGlsaW5nCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMzMDc4MzUKKworWWFuZyBUc2UgKDI5IE1heSAyMDExKQorLSBtYWluOiBmaXggaGVhZGVyIGluY2x1c2lvbiBvcmRlcgorICAKKyAgQ3VycmVudGx5LCBXaW5kb3dzIGNyb3NzLWNvbXBpbGVkIGF1dG9idWlsZHMgcmVxdWlyZSBpbmNsdXNpb24gb2Ygc2V0dXAuaAorICBiZWZvcmUgY3VybC5oIHRvIGdldCBkZWZpbml0aW9ucyBvZiBDVVJMX1NUQVRJQ0xJQiBhbmQgQlVJTERJTkdfTElCQ1VSTC4KKworLSBtYWluOiBmaXggaGVhZGVyIGluY2x1c2lvbiBvcmRlcgorCistIGRpc3RyaWJ1dGlvbjogRml4IEVYVFJBX0RJU1QgbGV0dGVyIGNhc2UKKworRGFuaWVsIFN0ZW5iZXJnICgyNyBNYXkgMjAxMSkKKy0gY3VybF9lYXN5X3NldG9wdC4zOiBOT1BST0dSRVNTIGFsc28gYWZmZWN0cyB0aGUgY2FsbGJhY2sKKworWWFuZyBUc2UgKDI3IE1heSAyMDExKQorLSB3YXJubGVzczogaGVhZGVyIGluY2x1c2lvbiBmaXgKKworLSBNYWtlIGNoZWNrc3JjLnBsIHdvcmsgb24gbW9yZSBvdXQtb2YtdHJlZSBidWlsZHMKKyAgCisgIFNvdXJjZSBmaWxlcyBnaXZlbiB3aXRoIHJlbGF0aXZlIHBhdGhzIGRvIG5vdCBoYXZlIHRoZQorICAtRCBkaXJlY3Rvcnkgc3BlY2lmaWVyIHByZXBlbmRlZC4KKworLSBjb21waWxlciB3YXJuaW5nOiBmaXgKKyAgCisgIEZpeCBjb21waWxlciB3YXJuaW5nOiBjb252ZXJzaW9uIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMKKworLSBzb2NrczogZml4IHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzCisKKy0gY29tcGlsZXIgd2FybmluZzogZml4CisgIAorICBGaXggY29tcGlsZXIgd2FybmluZzogdmFyaWFibGUgd2FzIHNldCBidXQgbmV2ZXIgdXNlZAorICAKKyAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGNsb2JiZXIgaWdub3JlZAorCistIHVuaXQgdGVzdHM6IGJ1aWxkIGFkanVzdG1lbnQKKyAgCisgIEFsc28gZGVmaW5lIFVOSVRURVNUUyBtYWNybyB3aGVuIGJ1aWxkaW5nIHVuaXQgdGVzdCBzb3VyY2VzLgorICAKKyAgRml4aW5nIGNvbXBpbGVyIHdhcm5pbmc6IGV4dGVybmFsIGRlZmluaXRpb24gd2l0aCBubyBwcmlvciBkZWNsYXJhdGlvbgorCitEYW5pZWwgU3RlbmJlcmcgKDI1IE1heSAyMDExKQorLSBjcmVhdGVfY29ubjogb25seSBzd2l0Y2ggcHJvdG9jb2wgaGFuZGxlciBpZiBuZWNlc3NhcnkKKyAgCisgIFdoZW4gc3dpdGNoaW5nIHRvIEhUVFAgYmVjYXVzZSBhIEhUVFAgcHJveHkgaXMgYmVpbmcgdXNlZCwgdGhlIGV4aXN0aW5nCisgIGhhbmRsZXIgaXMgbm93IGNoZWNrZWQgaWYgaXQgYWxyZWFkeSBpcyAiY29tcGF0aWJsZSIuIFRoaXMgYWxsb3dzIHRoZSBodHRwcworICBoYW5kbGVyIHJlbWFpbiB3aGlsZSBvdGhlciBub24taHR0cCBoYW5kbGVycyB3aWxsIGJlIHJlZGlyZWN0ZWQuCisgIAorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wNS8wMjE0Lmh0bWwKKyAgUmVwb3J0ZWQgYnk6IEplcm9tZSBSb2JlcnQKKworLSBzZXRvcHQuMzogcmVtb3ZlIGxlZnRvdmVyIHN0eWxlIGNoYW5nZQorCistIHNldG9wdC4zOiBDVVJMT1BUX1dSSVRFRlVOQ1RJT04gaGFkIHdyb25nIGZ1bmN0aW9uIHByb3RvCisKK1lhbmcgVHNlICgyNSBNYXkgMjAxMSkKKy0gY29tcGlsZXIgd2FybmluZzogZml4IGZvbGxvd3VwCisgIAorICBGaXggY29tcGlsZXIgd2FybmluZzogdmFyaWFibGUgd2FzIHNldCBidXQgbmV2ZXIgdXNlZAorICAKKyAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGNsb2JiZXIgaWdub3JlZAorCistIHVuaXQgdGVzdHM6IFJFQURNRSwgYWRqdXN0IGhlYWRlciBpbmNsdXNpb24gb3JkZXIKKworLSBjb21waWxlciB3YXJuaW5nOiBmaXgKKyAgCisgIEZpeCBjb21waWxlciB3YXJuaW5nOiB2YXJpYWJsZSB3YXMgc2V0IGJ1dCBuZXZlciB1c2VkCisgIAorICBGaXggY29tcGlsZXIgd2FybmluZzogY2xvYmJlciBpZ25vcmVkCisKKy0gY29tcGlsZXIgd2FybmluZzogZml4CisgIAorICBGaXggY29tcGlsZXIgd2FybmluZzogZXh0ZXJuYWwgZGVmaW5pdGlvbiB3aXRoIG5vIHByaW9yIGRlY2xhcmF0aW9uCisKKy0gY29tcGlsZXIgd2FybmluZzogZml4CisgIAorICBGaXggY29tcGlsZXIgd2FybmluZzogZXh0ZXJuYWwgZGVmaW5pdGlvbiB3aXRoIG5vIHByaW9yIGRlY2xhcmF0aW9uCisKKy0gY29tcGlsZXIgd2FybmluZzogZml4CisgIAorICBGaXggY29tcGlsZXIgd2FybmluZzogYXJndW1lbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggY29ycmVzcG9uZGluZyBmb3JtYXQKKyAgc3RyaW5nIGNvbnZlcnNpb24KKworLSBidWlsZDogaW5jbHVzaW9uIGd1YXJkCisgIAorICBFbmNsb3NlIGhlYWRlciBmaWxlIGluIGFuIGluY2x1c2lvbiBndWFyZAorCistIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAorICAKKyAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGV4cHJlc3Npb24gaGFzIG5vIGVmZmVjdAorCistIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAorICAKKyAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGBrZXljaGVjaycgbWlnaHQgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24uCisgIEZpeCBjb21waWxlciB3YXJuaW5nOiBga2V5Yml0JyBtaWdodCBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbi4KKworLSBjb21waWxlciB3YXJuaW5nOiBmaXgKKyAgCisgIEZpeCB2YXJpYWJsZSBkZWNsYXJhdGlvbiBwbGFjZW1lbnQKKworLSBjb21waWxlciB3YXJuaW5nOiBmaXgKKyAgCisgIEZpeCBtaXNzaW5nIHNlbWljb2xvbgorCistIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAorICAKKyAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGV4cHJlc3Npb24gaGFzIG5vIGVmZmVjdAorICAKKyAgRml4IE9PTSBoYW5kbGluZworCistIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAorICAKKyAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGV4cHJlc3Npb24gaGFzIG5vIGVmZmVjdAorCistIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAorICAKKyAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IHVudXNlZCB2YXJpYWJsZSAnZGF0YScKKworLSBjb21waWxlciB3YXJuaW5nOiBmaXgKKyAgCisgIEZpeCBjb21waWxlciB3YXJuaW5nOiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUKKworLSBjb21waWxlciB3YXJuaW5nOiBmaXgKKyAgCisgIEZpeCBjb21waWxlciB3YXJuaW5nOiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUKKworLSBjb21waWxlciB3YXJuaW5nOiBmaXgKKyAgCisgIEZpeCBjb21waWxlciB3YXJuaW5nOiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUKKworLSBjb21waWxlciB3YXJuaW5nOiBmaXgKKyAgCisgIEZpeCBjb21waWxlciB3YXJuaW5nOiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUKKworLSBjb21waWxlciB3YXJuaW5nOiBmaXgKKyAgCisgIEZpeCBjb21waWxlciB3YXJuaW5nOiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUKKworLSBjb21waWxlciB3YXJuaW5nOiBmaXgKKyAgCisgIEZpeCBjb21waWxlciB3YXJuaW5nOiBlbXB0eSBib2R5IGluIGFuIGlmLXN0YXRlbWVudAorCistIHVuaXQgdGVzdHM6IGFkanVzdCBoZWFkZXIgaW5jbHVzaW9uIG9yZGVyCisgIAorICBBZGRpdGlvbmFsbHksIHByZXZlbnQgbXVsdGlwbGUgaW5jbHVzaW9ucyBvZiBjdXJsX2NvbmZpZy5oCisKK0RhbmllbCBTdGVuYmVyZyAoMjAgTWF5IDIwMTEpCistIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTkgZnJvbSBwaWVycmVqb3llL21hc3RlcgorICAKKyAgd2luYnVpbGQ6IHR5cG8gaW4gZG9jcworCistIFtPbGEgTW9yayBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGN5YXNzbDogYnVpbGQgd2l0aG91dCBmaWxlc3lzdGVtCisgIAorICBHZXQgY3lhc3NsJ3MgTk9fRklMRVNZU1RFTSB0byB3b3JrIHdpdGggbGliY3VybC4gT3RoZXJ3aXNlIEknZCBnZXQgbGlua2VyCisgIGVycm9ycyBmb3IgdGhlIG1pc3NpbmcgIlNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zIiBmdW5jdGlvbnMuCisKK1BpZXJyZSBKb3llICgyMCBNYXkgMjAxMSkKKy0gLSB0eXBvCisKK0RhbmllbCBTdGVuYmVyZyAoMTkgTWF5IDIwMTEpCistIHR5cG86IGNsb3NlIGlzIGluIG1hbiBwYWdlIHNlY3Rpb24gMworCitZYW5nIFRzZSAoMTkgTWF5IDIwMTEpCistIHRlc3RzOiB2ZXJpZnkgT1BFTi9DTE9TRVNPQ0tFVEZVTkNUSU9OCisgIAorICBUZXN0IDU4NTogRml4IG9wZW5zb2NrZXQgcmV0dXJuIHR5cGUsIGFuZCBhdm9pZCBmdW5jdGlvbiBuYW1lIGNsYXNoLgorCistIHZlcnNpb246IGxpbmthZ2UgZml4CisgIAorICBGaXggbGlua2FnZSBvbiBjLWFyZXMgZW5hYmxlZCBXaW5kb3dzIHN0YXRpYyBidWlsZHMKKworRGFuaWVsIFN0ZW5iZXJnICgxOCBNYXkgMjAxMSkKKy0gY3VybF9lYXN5X3NldG9wdC4zOiBkb2N1bWVudCBDTE9TRVNPQ0tFVCogb3B0aW9ucworCistIHRlc3RzOiB2ZXJpZnkgT1BFTi9DTE9TRVNPQ0tFVEZVTkNUSU9OCisgIAorICBUZXN0IDU4NSBhbmQgNTg2IHdlcmUgYWRkZWQuIFVzaW5nIGEgbW9kaWZpZWQgbGliNTAwLmMKKworLSBzeW1ib2xzLWluLXZlcnNpb25zOiBhZGQgQ0xPU0VTT0NLRVQqCisKKy0gQ0xPU0VTT0NLRVRGVU5DVElPTjogdXNlIHRoZSBjYWxsYmFjaworICAKKyAgRml4IHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgY2FsbGJhY2sgdG8gbWF0Y2ggY2xvc2UoKSBhbmQgbWFrZSB1c2Ugb2YgaXQuCisKKy0gQ0xPU0VTT0NLRVRGVU5DVElPTjogYWRkZWQKKyAgCisgIEludHJvZHVjZWQgdGhlIGluaXRpYWwgc2V0dXAgdG8gYWxsb3cgY2xvc2Vzb2NrZXQgY2FsbGJhY2tzIGJ5IG1ha2luZworICBzdXJlIHNjbG9zZSgpIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBvbmUgcGxhY2UgaW4gdGhlIGxpYmN1cmwgc291cmNlCisgIGFuZCBzdGlsbCBydW4gYWxsIHRlc3QgY2FzZXMgZmluZS4KKworLSBHbnVUTFMgaGFuZHNoYWtlOiBmaXggdGltZW91dAorICAKKyAgQ29tbWl0IGNiZjQ5NjFiZjNlIGdhcmJsZWQgdGhlIHRpbWVvdXQgaGFuZGxpbmcgd2hpbGUgZG9pbmcgU1NMCisgIGhhbmRzaGFraW5nIChpbiBhbiBhdHRlbXB0IGF0IGZpeGluZyBhbm90aGVyIGJ1ZykuIFRoaXMgcHV0cyBzYW5pdHkKKyAgYmFjay4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA1LzAxNjcuaHRtbAorICBSZXBvcnRlZCBieTogRXRoYW4gR2xhc3NlciBDYW1wCisKKy0gY2hlY2tzcmM6IHRyYWlsaW5nIHdoaXRlc3BhY2UgZGV0ZWN0aW9uIGZpeAorCistIFtNYXJjZWwgUm9lbG9mcyBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIG5lZ290aWF0ZSBzc3BpOiBmaXggc2VxdWVudGlhbCByZXF1ZXN0cworCistIHRlc3RzOiBhZGRlZCBIVFRQIElmLU1vZGlmaWVkLVNpbmNlIHRlc3RzCisgIAorICBBZGRlZCB0ZXN0IDExMjYgYW5kIDExMjcgdG8gdmVyaWZ5IGN1cmwncyBiZWhhdmlvdXIgd2hlbiBJZi1Nb2RpZmllZC1TaW5jZQorICBpcyB1c2VkIGFuZCBhIDIwMCBpcyByZXR1cm5lZC4KKyAgCisgIFRoZSBsaXN0IG9mIHRlc3QgY2FzZXMgaW4gTWFrZWZpbGUuYW0gaXMgbm93IHNvcnRlZCBudW1lcmljYWxseS4KKworLSBpbmNsdWRlOiBjbGVhbnVwCisgIAorICBNYWRlIHRoZSBwdWJsaWMgaGVhZGVycyBjaGVja3NyYyBjb21wbGlhbnQKKyAgCisgIFJlbW92ZWQgdHlwZXMuaCAoaXQncyBiZWVuIHVudXNlZCBzaW5jZSBBcHJpbCAyMDA0KQorICAKKyAgTWFkZSB0aGUgcm9vdCBtYWtlZmlsZSBkbyBtYWtlIGluIGluY2x1ZGUgYnkgZGVmYXVsdCBhcyB3ZWxsLCBzbyB0aGF0CisgIFRBR1MgYW5kIHRoZSBjaGVja3NyYyB3aWxsIHdvcmsgYmV0dGVyLgorCitEYW4gRmFuZHJpY2ggKDYgTWF5IDIwMTEpCistIEZpeGVkIGNvbXBpbGF0aW9uIHdoZW4gUlRTUCBpcyBkaXNhYmxlZAorCistIEZpeGVkIExEQVAgYWZ0ZXIgUlRTUCByZWFkd3JpdGUgY2hhbmdlCisKK0RhbmllbCBTdGVuYmVyZyAoNiBNYXkgMjAxMSkKKy0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggMzIwMDFhYzQxNDliMjA2CisKKy0gc2V0X3VzZXJwYXNzOiBjb252ZXJ0IGZyb20gcHJvdG9jb2wtc3BlY2lmaWMgdG8gZ2VuZXJpYworICAKKyAgVGhlIHByb3RvY29sIGhhbmRsZXIncyBmbGFncyBmaWVsZCBub3cgY2FuIHNldCB0aGF0IHRoZSBwcm90b2NvbAorICByZXF1aXJlcyBhIHBhc3N3b3JkLCBzbyB0aGF0IHRoZSBzZXRfdXNlcnBhc3MgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRvCisgIGhhdmUgdGhlIHNwZWNpZmljIGtub3dsZWRnZSBvZiB3aGljaCBwcm90b2NvbHMgdGhhdCBkby4KKworLSBSVFNQOiBjbGVhbnVwcworICAKKyAgTWFkZSBzZXZlcmFsIGZ1bmN0aW9ucyBzdGF0aWMKKyAgCisgIE1hZGUgb25lIGZ1bmN0aW9uIGRlZmluZWQgdG8gbm90aGluZyB3aGVuIFJUU1AgaXMgZGlzYWJsZWQgdG8gYXZvaWQKKyAgdGhlICNpZmRlZnMgaW4gY29kZS4KKyAgCisgIFJlbW92ZWQgZXhwbGljaXQgcnRzcC5oIGluY2x1ZGVzCisKKy0gUlRTUDogY29udmVydCBwcm90b2NvbC1zcGVjaWZpYyBjaGVja3MgdG8gZ2VuZXJpYworICAKKyAgQWRkIGEgJ3JlYWR3cml0ZScgZnVuY3Rpb24gdG8gdGhlIHByb3RvY29sIGhhbmRsZXIgc3RydWN0IGFuZCB1c2UgdGhhdAorICBmb3IgdGhlIGV4dHJhIHJlYWR3cml0ZSBmdW5jdGlvbmFsaXR5IFJUU1AgbmVlZHMuCisKKy0gU1NMOiBjaGVjayBmb3IgU1NMLCBub3Qgc3BlY2lmaWMgcHJvdG9jb2xzCisgIAorICBDb2RlIGNsZWFudXAgdG8gY2hlY2sgbGVzcyBmb3IgcHJvdG9jb2xzIGFuZCBtb3JlIGZvciB0aGUgc3BlY2lmaWMKKyAgcmVsZXZhbnQgZmVhdHVyZS4gTGlrZSBpZiBTU0wgaXMgcmVxdWlyZWQuCisKKy0gaHR0cF9wZXJoYXBzcmV3aW5kOiByZW1vdmUgSFRUUCBjaGVjaworICAKKyAgTm8gbmVlZCB0byBjaGVjayBmb3IgSFRUUCBhcyB0aGlzIGlzIG5vdyBhIEhUVFAtc3BlY2lmaWMgZnVuY3Rpb24KKworLSBodHRwX3BlcmhhcHNyZXdpbmQ6CisgIAorICBtYWtlIGl0IHN0YXRpYywgcmVtb3ZlIEN1cmxfIHByZWZpeAorCistIHJlbW92ZSBGSUxFIHByb3RvY29sLXNwZWNpZmljIGNoZWNrcworICAKKyAgQWxzbywgY29udmVydCB0aGUgQkFOUFJPWFkgZmxhZyBpbnRvIE5PTkVUV09SSyBmb3IgdGhlIHByb3RvY29scworICAoZmlsZTovLyBvbmx5IGF0bSkgdGhhdCBkb24ndCB3b3JrIG92ZXIgbmV0d29ya3MuCisKKy0gY3VybC4xOiAtLXNvY2tzKiBvcHRpb25zIG5vIGxvbmdlciBuZWVkZWQKKyAgCisgIEFzIHdlIG5vdyBjYW4gc3BlY2lmeSBhbGwgdGhlIHNvY2tzIHByb3h5IHR5cGVzIHdpdGggdGhlIHJlZ3VsYXIgLS1wcm94eQorICBvcHRpb24gdXNpbmcgcHJvdG9jb2wgcHJlZml4LgorCistIHNvY2tzIHByb3h5OiBhbGxvdyBzb2NrczVoOi8vIHByZWZpeCB0b28KKyAgCisgIFVzaW5nICdzb2NrczVoJyBhcyBwcm94eSBwcm90b2NvbCB3aWxsIG1ha2UgaXQgYQorICBDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FIHByb3h5IHdoaWNoIGlzIFNPQ0tTNSBhbmQgYXNraW5nIHRoZSBwcm94eSB0bworICByZXNvbHZlIGhvc3QgbmFtZXMuIEkgZm91bmQgbm8gInN0YW5kYXJkIiBwcm90b2NvbCBuYW1lIGZvciB0aGlzLgorCistIGN1cmwuMTogbWlub3IgZWRpdCBvZiAtLWZ0cC1zc2wqCisKKy0gW0phcmkgQWFsdG8gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBjdXJsLjE6IHVzZSBHTlUgc3R5bGUgYW5kIHNvcnQgb3B0aW9ucworICAKKyAgRm9sbG93IHN0eWxlIG9mIEdOVSBsYXlvdXQgKGNwLCBtdiAuLi4pIHdoZXJlIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCB3aXRoCisgIGNvbW1hOiAtbywgLS1vcHRpb24KKyAgCisgIE9yZGVyIGl0ZW0gYWxwaGFiZXRpY2FsbHkgKGJ5IGxlbmd0aCBhbHNvKTogLW8sIC1PLCAtLW9wdGlvbgorICAKKyAgRm9sbG93IHN0eWxlIG9mIEdOVSBsYXlvdXQgYnkgbW92aW5nIGhlbHAgcmVsYXRlZCBvcHRpb25zIHRvIHRoZSBlbmQ6CisgIC0taGVscCwgLU0sIC0tdmVyc2lvbgorCistIENvcnJlY3RlZCBjb21tZW50cworICAKKyAgY2xvc2Vwb2xpY3kgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgdW51c2VkIGZvciB5ZWFycworCistIENvbm5lY3Rpb25TdG9yZTogcmVtb3ZlIHVudXNlZCByZXR1cm4gY29kZQorCistIGluZGVudCBjb3JyZWN0bHkKKworLSBjdXJsX2Vhc3lfZ2V0aW5mby4zOiBjbGFyaWZ5IHNvbWUgdGltaW5nIGluZm8KKworLSBjdXJsX2Vhc3lfc2V0b3B0LjM6IGNsYXJpZnkgdGhlIFNTSCBLRVlGSUxFIG9wdGlvbnMgdXNhZ2UKKyAgCisgIFRoZSBpbnRlcm5hbCBkZWZhdWx0cyBhcmUgaW1wb3J0YW50IGluZm8KKworLSBkb2NzOiBtZW50aW9uIHRoZSBwcm90b2NvbDovLyBzdXBwb3J0IGluIHByb3h5IHN0cmluZ3MKKworLSAtLWRhdGEtYXNjaWk6IGFkZCBtZW50aW9uCisgIAorICBBcyBpdCBpcyBhIHNlcGFyYXRlIG9wdGlvbiBpdCBzaG91bGQgaGF2ZSBhIC5JUCB0aXRsZQorCistIHVybCBlbmNvZGUgZG9jczogbWVudGlvbiAnLScsICcuJywgJ18nIGFuZCAnficKKyAgCisgIENsYXJpZnkgdGhhdCB0aGUgJy0nLCAnLicsICdfJyBvciAnficgbGV0dGVycyBhcmUgYWxzbyBub3QgZXNjYXBlZCBzaW5jZQorICB0aGV5IHNob3VsZG4ndCBhY2NvcmRpbmcgdG8gUkZDMzk4NiBzZWN0aW9uIDIuMy4KKyAgCisgIFRoaXMgaXMgaG93IHRoaXMgZnVuY3Rpb24gaGFzIGJlaGF2ZWQgc2luY2Ugc2VwIDIwMTAsIGNvbW1pdAorICA1ZGYxM2MzMTczNWZhMC4KKworLSBTU0g6IHNldCBub24tYmxvY2tpbmcgZWFybGllcgorICAKKyAgSW50cm9kdWNlIGFuIElOSVQgc3RhdGUgZm9yIHRoZSBTU0ggc3RhdGUgbWFjaGluZSBhbmQgc2V0IGxpYnNzaDIKKyAgbm9uLWJsb2NraW5nIGluIHRoYXQgc28gdGhhdCBpdCBpcyBzZXQgcHJvcGVybHkgYmVmb3JlCisgIGxpYnNzaDJfc2Vzc2lvbl9zdGFydHVwKCkgaXMgY2FsbGVkLgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvYXJjaGl2ZS0yMDExLTA1LzAwMDEuaHRtbAorCistIGN1cmxfZm9ybWZyZWUuMzogbWVudGlvbiBhcmd1bWVudCBtYXkgYmUgTlVMTAorICAKKyAgQXMgdGhlIGNvZGUgYWxyZWFkeSBjaGVja3MgZm9yIGl0IHdlIGNhbiBqdXN0IGFzIHdlbGwgbWFrZSBpdCBvZmZpY2lhbCEKKworLSBDb25uZWN0aW9uRXhpc3RzOiBhdm9pZCBOVUxMIGRlcmVmZXJlbmNlCisgIAorICBXaGVuIGNoZWNraW5nIGZvciBjb25uZWN0aW9ucyB0aGF0IGFyZSBib3VuZCB0byBhIHBhcnRpY3VsYXIgZGV2aWNlIHdlCisgIG11c3QgbWFrZSBzdXJlIHdlIGRvbid0IGNvbXBhcmUgd2l0aCBhIE5VTEwgcG9pbnRlci4KKworLSByZXNvbHZlcl9lcnJvcjogcmVtb3ZlIGJhZCBzZW1pY29sb24KKworLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCBjNGJjMWQ0NzNmMzI0CisKKy0gYW55YXV0aHB1dC5jOiBzdGRpbnQuaCBtdXN0IG5vdCBiZSBpbmNsdWRlZCB1bmNvbmRpdGlvbmFsbHkKKyAgCisgIEFzIGl0IGlzIGFscmVhZHkgaW5jbHVkZWQgYnkgY3VybGJ1aWxkLmggaWYgaXQgZXhpc3RzIG9uIHRoZSBwbGF0Zm9ybSBpdAorICB3YXMgaW5jbHVkZWQgaGVyZSBzdXBlcmZsdW91c2x5IGFueXdheS4KKyAgCisgIFJlcG9ydGVkIGJ5OiBEYWdvYmVydCBNaWNoZWxzZW4KKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMjk0NTA5CisKKy0gZ2FpX3N0cmVycm9yOiBwcm92aWRlIHByaXZhdGUgaW1wbGVtZW50YXRpb24KKyAgCisgIFRoZXJlIGFyZSBzeXN0ZW1zIChsaWtlIE5ldFdhcmUpIHdpdGhvdXQgaXRzIG93biBnYWlfc3RyZXJyb3IoKQorICBmdW5jdGlvbi4KKworLSB0cmVhZGVkLXJlc29sdmVyOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMKKyAgCisgIE5vdyB1c2UgZ2FpX3N0cmVycm9yKCkgdG8gZ2V0IHByb3BlciBlcnJvciBtZXNzYWdlcyB3aGVuIGdldGFkZHJpbmZvKCkKKyAgaGFzIGZhaWxlZC4gRGV0ZWN0IHRoZSBmdW5jdGlvbiBpbiBjb25maWd1cmUuCisgIAorICBDb2RlIGJhc2VkIG9uIHdvcmsgYW5kIHN1Z2dlc3Rpb25zIGJ5IEplZmYgUG9obG1leWVyIGFuZCBHdWVudGVyIEtuYXVmCisKKy0gcHJveHk6IGFsbG93IHNvY2tzOi8vIHByZWZpeCBpbiBwcm94eSBzdHJpbmcKKyAgCisgIEluc3BpcmVkIGJ5IGEgcGF0Y2ggZnJvbSBPQi5Db25zZWlsLiBBZGRlZCB0ZXN0IGNhc2UgNzA4IHRvIHZlcmlmeS4KKworLSBbWm1leSBQZXRyb2ZmIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgQ01ha2U6IGltcHJvdmUgbGlicmFyeSBzZWFyY2gsIGltcGxlbWVudCBpbnN0YWxsLgorICAKKyAgSW1wcm92ZWQgbGlicmFyeSBzZWFyY2ggYnkgY2hlY2tfZnVuY3Rpb25fZXhpc3RzX2NvbmNhdCgpIG1hY3JvOgorICBpdCBkb2VzIG5vdCByZXZlcnQgdGhlIGxpc3Qgb2YgbGlicmFyaWVzIGFueSBtb3JlLgorICAKKyAgSW1wcm92ZWQgT3BlblNTTCBsaWJyYXJ5IHNlYXJjaDogZmlyc3QgZmluZCB6bGliLCB0aGVuIHNlYXJjaCBmb3IKKyAgb3BlbnNzbCBsaWJyYXJpZXMgdGhhdCBtYXkgZGVwZW5kIG9uIHpsaWIuCisgIAorICBGb3IgVW5peDogb3BlbnNzbCBsaWJyYXJpZXMgY2FuIG5vdyBiZSBkZXRlY3RlZCBpbiBub25zdGFuZGFyZAorICBsb2NhdGlvbnMuIFN1cHBseSBDTUFLRV9MSUJSQVJZX1BBVEggdG8gQ01ha2Ugb24gY29tbWFuZCBsaW5lLgorICAKKyAgQWRkZWQgaW5zdGFsbGF0aW9uIGNhcGFiaWxpdHkgKHZlcnkgYmFzaWMgb25lIHlldCkuCisKKy0gbXVsdGktc29ja3M6IGZpeCBjb25uZWN0IHRvIHByb3h5CisgIAorICBXaGVuIGNvbm5lY3RpbmcgdG8gYSBzb2NrcyBvciBzaW1pbGFyIHByb3h5IHdlIGRvIHRoZSBwcm94eSBoYW5kc2hha2UgYXQKKyAgb25jZSB3aGVuIHdlIGtub3cgdGhlIFRDUCBjb25uZWN0IGlzIGNvbXBsZXRlZCBhbmQgd2Ugb25seSBjb25zaWRlciB0aGUKKyAgImNvbm5lY3Rpb24iIGNvbXBsZXRlIGFmdGVyIHRoZSBwcm94eSBoYW5kc2hha2UuIFRoaXMgZml4ZXMgdGVzdCA1NjQKKyAgd2hpY2ggaXMgbm93IG5vIGxvbmdlciBjb25zaWRlcmVkIGRpc2FibGVkLgorICAKKyAgUmVwb3J0ZWQgYnk6IERtaXRyaSBTaHViaW4KKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDQvMDEyNy5odG1sCisKKy0gY2xlYW51cDogcmVtb3ZlIG9sZCB1bnVzZWQgZGVidWcgY29kZQorCitEYW4gRmFuZHJpY2ggKDI3IEFwciAyMDExKQorLSBNYWtlIGNoZWNrc3JjLnBsIHdvcmsgb24gb3V0LW9mLXRyZWUgYnVpbGRzCisgIAorICBTb3VyY2UgZmlsZXMgZ2l2ZW4gd2l0aCBhYnNvbHV0ZSBwYXRocyBkbyBub3QgaGF2ZSB0aGUKKyAgLUQgZGlyZWN0b3J5IHNwZWNpZmllciBwcmVwZW5kZWQuCisKK0RhbmllbCBTdGVuYmVyZyAoMjcgQXByIDIwMTEpCistIG1ha2U6IGFkZCBjaGVja3NyYy5wbCB0byBkaXN0CisKKy0gbWFrZTogYWRkICdjaGVja3NyYycgYXMgdGFyZ2V0IHRvIGNoZWNrIGNvZGUgc3R5bGUKKyAgCisgIFRoZSBtYWtlIHRhcmdldCBjaGVja3NyYyBub3cgd29ya3MgaW4gdGhlIHJvb3QgbWFrZWZpbGUgYW5kIGluIGJvdGggdGhlCisgIHNyYyBhbmQgbGliIGRpcmVjdG9yaWVzLgorICAKKyAgSXQgaXMgYWxzbyBydW4gYXV0b21hdGljYWxseSBvbiAiYWxsIiBpZiBjb25maWd1cmUgLS1lbmFibGUtZGVidWcgd2FzCisgIHVzZWQuCisKKy0gY2hlY2tzcmM6IHdoaXRlc3BhY2UgYW5kIGNvZGUgc3R5bGUgY2xlYW51cAorICAKKyAgTWFrZSBldmVyeXRoaW5nIGFkaGVyZSB0byB0aGUgc3RhbmRhcmRzIHVwaGVsZCBieSBjaGVja3NyYy5wbCBhbmQgbm93CisgIHJ1biBjaGVja3NyYyBmcm9tIHRoZSBtYWtlZmlsZSBvbiBkZWJ1ZyBidWlsZHMuCisKKy0gY2hlY2tzcmM6IGFkZCAtVyB0byBhbGxvdyBhIGZpbGUgdG8gYmUgd2hpdGVsaXN0ZWQKKyAgCisgIFVzZWZ1bCB3aGVuIGEga25vd24gZmlsZSBqdXN0IGRvZXNuJ3QgY29tcGx5IGFuZCB0aGVyZSdzIG5vIGludGVudGlvbiB0bworICBtYWtlIGl0IGRvIHNvLgorCistIHdoaXRlc3BhY2UgY2xlYW51cDogbm8gc3BhY2UgZmlyc3QgaW4gY29uZGl0aW9uYWxzCisgIAorICAiaWYoYSkiIGlzIG91ciBzdHlsZSwgbm90ICJpZiggYSApIgorCistIGxpYi9tYWtlOiBydW4gY2hlY2tzcmMucGwgb25jZSBmb3IgYWxsIGZpbGVzCisgIAorICBTaW5jZSBpdCBub3cgc3VwcG9ydHMgbXVsdGlwbGUgZmlsZXMgdGhpcyB3aWxsIGJlIGZhc3RlciBhbmQgd2lsbCBzaG93CisgIHByb2JsZW1zIGZvciBtb3JlIGZpbGUgdGhhbiBvbmUgYXQgYSB0aW1lIC0gbW9yZSBjb252ZW5pZW50LgorCistIGNoZWNrc3JjOiBzY2FuIG1hbnkgZmlsZXMsIG1vcmUgY2hlY2tzCisgIAorICBJdCBub3cgc2NhbnMgbXVsdGlwbGUgZmlsZXMgYW5kIG91dHB1dHMgYW4gZXJyb3Ird2FybmluZyBjb3VudCBzdW1tYXJ5CisgIGF0IHRoZSBlbmQgaW4gY2FzZSBhdCBsZWFzdCBvbmUgd2FzIGRldGVjdGVkLgorICAKKyAgLUQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBpbiB3aGljaCBkaXIgdGhlIGZpbGVzIGFyZSBsb2NhdGVkCisgIAorICBUaGUgc2NyaXB0IG5vdyBzY2FucyBmb3IgY29uZGl0aW9ucyB0aGF0IHN0YXJ0cyB3aXRoIGEgc3BhY2UgZm9yCisgIGlmL3doaWxlL2ZvciBsaW5lcy4KKworLSBNYWtlZmlsZTogcnVuIGNoZWNrc3JjIGlmIGRlYnVnIGVuYWJsZWQKKyAgCisgIEFuZCBtYWtlIHRoZSBidWlsZCBmYWlsIGlmIGEgd2FybmluZyBvciBlcnJvciB3YXMgZGV0ZWN0ZWQKKworLSBjaGVja3NyYzogZXhpdCBlcnJvciBjb2RlIGlmIHdhcm5pbmdzIG9yIGVycm9ycworCistIFNTSDogbW92ZSBrbm93bmhvc3QgbG9naWMgdG8gc2VwYXJhdGUgZnVuY3Rpb24KKworLSBzb3VyY2UgY2xlYW51cDogdW5pZnkgbG9vaywgc3R5bGUgYW5kIGluZGVudCBsZXZlbHMKKyAgCisgIEJ5IHRoZSB1c2Ugb2YgYSB0aGUgbmV3IGxpYi9jaGVja3NyYy5wbCBzY3JpcHQgdGhhdCBjaGVja3MgdGhhdCBvdXIKKyAgYmFzaWMgc291cmNlIHN0eWxlIHJ1bGVzIGFyZSBmb2xsb3dlZC4KKworR3VlbnRlciBLbmF1ZiAoMjcgQXByIDIwMTEpCistIFdpbmRvd3MgbmF0aXZlIElETiBmaXhlcy4KKyAgCisgIEZvciBub3cgcHJvdmlkZSBwcm90b3R5cGVzIGluc3RlYWQgb2YgaW5jbHVkaW5nIHRoZQorICBub24tc3RhbmRhcmQgbm9ybWFsaXNhdGlvbi5oIHdoaWNoIGlzIG9ubHkgYXZhaWxhYmxlIGluIHRoZQorICAiSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIE1pdGlnYXRpb24gQVBJcyIgZG93bmxvYWQuCisKK0RhbiBGYW5kcmljaCAoMjUgQXByIDIwMTEpCistIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmcgaW4gV2luZG93cyBTU1BJIGNhc2UKKworLSBGaXhlZCBjb21waWxhdGlvbiB3aGVuIHRoZSBzeW5jaHJvbm91cyByZXNvbHZlciBpcyB1c2VkCisKKy0gQWRkZWQgbmV3IHJlc29sdmVyIHNvdXJjZXMgdG8gU3ltYmlhbiBhbmQgVkM2IGJ1aWxkIGZpbGVzCisKK0RhbmllbCBTdGVuYmVyZyAoMjUgQXByIDIwMTEpCistIGhvc3RpcDogY29tbWVudCBmaXhlZCB0byBzdGF0ZSBjdXJyZW50IHNpdHVhdGlvbgorCistIGFzeW5jIHJlc29sdmVyczogZnVydGhlciBjbGVhbnVwcworICAKKyAgYXN5bi1hcmVzLmMgYW5kIGFzeW4tdGhyZWFkLmMgYXJlIHR3byBzZXBhcmF0ZSBiYWNrZW5kcyB0aGF0IGltcGxlbWVudAorICB0aGUgc2FtZSAoaW50ZXJuYWwpIGFzeW5jIHJlc29sdmVyIEFQSSBmb3IgbGliY3VybCB0byB1c2UuIEJhY2tlbmQgaXMKKyAgc3BlY2lmaWVkIGF0IGJ1aWxkIHRpbWUuCisgIAorICBUaGUgaW50ZXJuYWwgcmVzb2x2ZXIgQVBJIGlzIGRlZmluZWQgaW4gYXN5bi5oIGZvciBhc3luY2ggcmVzb2x2ZXJzLgorCistIGFzeW5jaCByZXNvbHZlcnM6IGNsZWFudXAKKyAgCisgIEZpeGVkIGluZGVudHMsIGNvZGluZyBjb252ZW50aW9ucyBhbmQgd2hpdGUgc3BhY2UgZWRpdHMuCisgIAorICBNb2RpZmllZCB0aGUgYy1hcmVzIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYWdhaW4gTk9UIHJlYWQgdGhlCisgIGNvbm4gZGF0YSB3aGVuIHRoZSBhcmVzIGhhbmRsZSBpcyBiZWluZyB0YWtlbiBkb3duIGFzIHRoZW4gaXQgbWF5IGhhdmUKKyAgYmVlbiBmcmVlZCBhbHJlYWR5LgorCistIFtWc2V2b2xvZCBOb3Zpa292IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgYXN5bmNoIHJlc29sdmVyczogdW5pZmllZAorICAKKyAgSW50cm9kdWNpbmcgYW4gaW50ZXJuYWwgQVBJIGZvciBoYW5kbGluZyBvZiBkaWZmZXJlbnQgYXN5bmMgcmVzb2x2ZXIKKyAgYmFja2VuZHMuCisKK0d1ZW50ZXIgS25hdWYgKDI0IEFwciAyMDExKQorLSBFbmFibGVkIE9wZW5XYXRjb20gbmF0aXZlIFdpbmRvd3MgSUROIGJ1aWxkLgorICAKKyAgRm9yIG5vdyB3ZSBkaXJlY3RseSBpbXBvcnQgdGhlIElkbiogc3ltYm9scyB3aXRoIHRoZSBsaW5rZXI7CisgIGFuIHVwY29taW5nIHJlbGVhc2Ugb2YgT1dDIHdpbGwgaGF2ZSB0aGVzZSBhZGRlZCB0byB0aGUgaW1wb3J0CisgIGxpYiBub3JtYWxpei5saWIsIGFuZCBwcm90b3R5cGVzIGFyZSBhZGRlZCB0byB3aW5ubmxzLmguCisKK0RhbmllbCBTdGVuYmVyZyAoMjIgQXByIDIwMTEpCistIE5UTE06IHdvcmsgd2l0aCB1bmljb2RlCisgIAorICBSZXdyaXR0ZW4gY29kZSBmcm9tIGEgcGF0Y2ggYnJvdWdodCBieSBNYXR0ZW8gUm9jY28uCisKKy0gYnVtcCB2ZXJzaW9uOiB3b3JrIHRvd2FyZHMgNy4yMS43CisKKy0gVEhBTktTOiBjb250cmlidXRvcnMgZnJvbSA3LjIxLjYKKworVmVyc2lvbiA3LjIxLjYgKDIyIEFwciAyMDExKQorCitEYW5pZWwgU3RlbmJlcmcgKDIyIEFwciAyMDExKQorLSBSRUxFQVNFLU5PVEVTOiB0d28gbW9yZSBjb250cmlidXRvcnMKKworRGFuIEZhbmRyaWNoICgyMSBBcHIgMjAxMSkKKy0gRml4ZWQgdGVzdCAxMDIzIHdoZW4gdXNpbmcgZGFpbHkgc25hcHNob3RzCisKKy0gSW5jbHVkZSB1bmlzdGQuaCB0byBkZWNsYXJlIGNsb3NlKCkKKworSnVsaWVuIENoYWZmcmFpeCAoMjEgQXByIDIwMTEpCistIFtGYWJpYW4gS2VpbCBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIEluIGxpYi8sIGNoYW5nZSAnd2FubmEnIHRvICd3YW50IHRvJy4KKyAgCisgIEZvdW5kIHdpdGggY29kZXNwZWxsLgorCistIFtGYWJpYW4gS2VpbCBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIEZpeCBzcGVsbGluZyBlcnJvcnMgaW4gYnVpbGRjb25mCisgIAorICBGb3VuZCB3aXRoIGNvZGVzcGVsbC4KKworLSBbRmFiaWFuIEtlaWwgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBGaXggc3BlbGxpbmcgZXJyb3JzIGluIHNyYy8KKyAgCisgIEZvdW5kIHdpdGggY29kZXNwZWxsLgorCistIFtGYWJpYW4gS2VpbCBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIEZpeCBzcGVsbGluZyBlcnJvcnMgaW4gaW5jbHVkZS8KKworLSBbRmFiaWFuIEtlaWwgYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBGaXggYSBjb3VwbGUgb2Ygc3BlbGxpbmcgZXJyb3JzIGluIGxpYi8KKyAgCisgIEZvdW5kIHdpdGggY29kZXNwZWxsLgorCistIHRyYW5zZmVyLmM6IEZpeGVkIGluZGVudGF0aW9uIGluIHJlYWR3cml0ZV9kYXRhLgorCitEYW4gRmFuZHJpY2ggKDIwIEFwciAyMDExKQorLSBGaXhlZCBjbG9zaW5nIHRlc3QgdGFnCisKK0RhbmllbCBTdGVuYmVyZyAoMjAgQXByIDIwMTEpCistIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDMyNDJhYmQ4N2ExMjYyCisKKy0gU0ZUUDogY2xvc2UgZmlsZSBiZWZvcmUgcG9zdHF1b3RlCisgIAorICBNYWtlIHN1cmUgdGhhdCBmaWxlcyBhcmUgY2xvc2VkIGJlZm9yZSB0aGUgcG9zdCBxdW90ZSBjb21tYW5kcyBydW4gYXMgaWYKKyAgdGhleSBvcGVyYXRlIG9uIHRoZSBqdXN0IHRyYW5zZmVycmVkIGZpbGUgdGhleSBjb3VsZCBvdGhlcndpc2UgZWFzaWx5CisgIGZhaWwuCisgIAorICBQYXRjaCBieTogUmFqZXNoIE5hZ2FuYXRoYW4gKGVkaXRlZCkKKworRGFuIEZhbmRyaWNoICgyMCBBcHIgMjAxMSkKKy0gRml4ZWQgdGVzdCAxMDIyIHdoZW4gdXNpbmcgZGFpbHkgc25hcHNob3RzCisKK0RhbmllbCBTdGVuYmVyZyAoMjAgQXByIDIwMTEpCistIEN1cmxfaHR0cF9jb25uZWN0OiBkZXRlY3QgSFRUUFMgcHJvcGVybHkgYWZ0ZXIgQ09OTkVDVAorICAKKyAgbGliY3VybCBmYWlsZWQgdG8gY2hlY2sgdGhlIGNvcnJlY3Qgc3RydWN0IGZvciBIVFRQUyBhZnRlciBDT05ORUNUIHdhcworICBpc3N1ZWQgdG8gdGhlIHByb3h5LCBzbyBpdCBkaWRuJ3QgZG8gdGhlIFRMUyBoYW5kc2hha2UgYW5kIHN1YnNlcXVlbnRseQorICBmYWlsZWQgdGhlIGNvbm5lY3Rpb24uIEEgcmVncmVzc2lvbiByZWxlYXNlZCBpbiA3LjIxLjUgKGludHJvZHVjZWQKKyAgYXJvdW5kIGNvbW1pdCA4ODMxMDAwYmMwN2RlKS4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA0LzAxMzQuaHRtbAorICBSZXBvcnRlZCBieTogSm9zdWUgQW5kcmFkZSBHb21lcworCistIGN1cmxfZWFzeV9zZXRvcHQuMzogQ1VSTE9QVF9QUk9YWVRZUEUgY2xhcmlmaWNhdGlvbgorICAKKyAgV2hlbiBzZXQgdG8gYSBIVFRQIDEuMCBwcm94eSwgdGhhdCBvbmx5IGFmZmVjdHMgdGhlIENPTk5FQ1QgcmVxdWVzdCBhbmQKKyAgbm90IHRoZSByZWd1bGFyIEhUVFAgcmVxdWVzdC4KKworLSBbR2lzbGUgVmFuZW0gYnJvdWdodCB0aGlzIGNoYW5nZV0KKworICBDVVJMX0RPRVNfQ09OVkVSU0lPTlM6IGZpeGVzCisgIAorICBNYWRlIGl0IGNvbXBpbGUgYW5kIHdvcmsgYWdhaW4gYWZ0ZXIgdGhlIGNvZGUgbW92ZS4KKworLSBDVVJMX0RPRVNfQ09OVkVSU0lPTlM6IGNsZWFudXAKKyAgCisgIE1hc3NpdmVseSByZWR1Y2UgI2lmZGVmcyBhbGwgb3ZlciAoMjMgI2lmZGVmIGxpbmVzIGxlc3Mgc28gZmFyKQorICBNb3ZlZCBjb252ZXJzaW9uLXNwZWNpZmljIGNvZGUgdG8gbm9uLWFzY2lpLmMKKworR3VlbnRlciBLbmF1ZiAoMTkgQXByIDIwMTEpCistIEltcHJvdmUgTWluR1cgc3RhdGljIG1ha2VmaWxlIGJ1aWxkcy4KKyAgCisgIEl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgYW55IGNvbWJpbmF0aW9uIG9mIGZlYXR1cmVzIHdpdGhvdXQKKyAgaGF2aW5nIHRvIDFzdCBhZGQgbWFrZWZpbGUgdGFyZ2V0cyB0byB0aGUgbWFpbiBtYWtlZmlsZS4gVGhlCisgIG1haW4gbWFrZWZpbGUgbm93IHBhc3NlcyB0aGUgJ21pbmd3MzItZmVhdDEtZmVhdDInIGFzIHZhciBDRkcsCisgIGFuZCB0aGUgLi9bbGlifHNyY10vTWFrZWZpbGUubTMyIHBhcnNlcyB0aGUgQ0ZHIHZhciB0byBkZXRlcm1pbmUKKyAgdGhlIGZlYXR1cmVzIHRvIGJlIGVuYWJsZWQuCisKKy0gRW5hYmxlZCBNaW5HVyBuYXRpdmUgV2luZG93cyBJRE4gYnVpbGQuCisKKy0gV2luZG93cyBuYXRpdmUgSUROIGZpeGVzLgorICAKKyAgY2hhbmdlZCB3aW5kb3dzLmggaW5jbHVkZSB0byBzeXN0ZW0gaGVhZGVyOworICBjaGFuZ2VkIG9ic29sZXRlIDJuZCBjaGVjayBmb3Igc3RyX3cgdG8gc3RyX3V0ZjggaW4gb3JkZXIgdG8gY2F0Y2gKKyAgbWFsbG9jKCkgZmFpbHVyZSBhbmQgYXZvaWQgYSBmcmVlKE5VTEwpOworICBjaGFuZ2VkIGNhbGxzIHRvIEdldExhc3RFcnJvcigpIHRvIHZvaWQgdG8ga2lsbCB1bnN1c2VkIHZhciBjb21waWxlcgorICB3YXJuaW5nczsKKyAgbW92ZWQgb25lIGNhbGwgdG8gR2V0TGFzdEVycm9yKCkgaW50byBlbHNlIGNhc2Ugc28gdGhhdCBpdHMgb25seQorICBjYWxsZWQgd2hlbiBXaWRlQ2hhclRvTXVsdGlCeXRlKCkgcmVhbGx5IGZhaWxzLgorCistIFdpbmRvd3MgbmF0aXZlIElETiBmaXhlcy4KKyAgCisgIFByb3ZpZGUgcHJvdG90eXBlIGZvciBjdXJsX3dpbjMyX2lkbl90b19hc2NpaSgpOworICByZW1vdmUgd3JvbmcgM3JkIHBhcmFtZXRlciBmcm9tIGN1cmxfd2luMzJfaWRuX3RvX2FzY2lpKCkgY2FsbC4KKworRGFuaWVsIFN0ZW5iZXJnICgxOSBBcHIgMjAxMSkKKy0gY3VybC1jb25maWc6IGZpeCB2ZXJzaW9uIG91dHB1dAorICAKKyAgZG8gdGhlIHMvVkVSU0lPTi9DVVJMVkVSU0lPTiByZXBsYWNlbWVudCBmb3IgdGhlIGh1bWFuIHJlZGFibGUgb3V0cHV0CisgIGZvciAtLWNoZWNrZm9yCisgIAorICBSZXBvcnRlZCBieTogUnlhbiBTY2htaWR0CisKKy0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggNWFhZTNjMTNlMgorCitHdWVudGVyIEtuYXVmICgxOSBBcHIgMjAxMSkKKy0gVXBkYXRlZCBkZWZhdWx0IChyZWNvbW1lbmRlZCkgZGVwZW5kZW5jeSB2ZXJzaW9ucy4KKworLSBVcGRhdGVkIGRlZmF1bHQgKHJlY29tbWVuZGVkKSBkZXBlbmRlbmN5IHZlcnNpb25zLgorCitEYW5pZWwgU3RlbmJlcmcgKDE4IEFwciAyMDExKQorLSB0cmFuc2Zlci1lbmNvZGluZzogZG9jdW1lbnQgdGhlIG9wdGlvbnMKKyAgCisgIFRoZSBuZXcgbGliY3VybCBhbmQgY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJlIG5vdyBkZXNjcmliZWQuCisKKy0gdHJhbnNmZXItZW5jb2Rpbmc6IGFkZGVkIG5ldyBvcHRpb24gYW5kIGNtZGxpbmUKKyAgCisgIEFkZGVkIENVUkxPUFRfVFJBTlNGRVJfRU5DT0RJTkcgYXMgdGhlIG9wdGlvbiB0byBzZXQgdG8gcmVxdWVzdCBUcmFuc2ZlcgorICBFbmNvZGluZyBpbiBIVFRQIHJlcXVlc3RzIChpZiBidWlsdCB6bGliIGVuYWJsZWQpLiBJIGFsc28gcmVuYW1lZAorICBDVVJMT1BUX0VOQ09ESU5HIHRvIENVUkxPUFRfQUNDRVBUX0VOQ09ESU5HICh3aGlsZSBrZWVwaW5nIHRoZSBvbGQgbmFtZQorICBhcm91bmQpIHRvIHJlZHVjZSB0aGUgY29uZnVzaW9uIHdoZW4gd2UgaGF2ZSB0byBlbmNvZGluZyBvcHRpb25zIGZvcgorICBIVFRQLgorICAKKyAgLS10ci1lbmNvZGluZyBpcyBub3cgdGhlIG5ldyBjb21tYW5kIGxpbmUgb3B0aW9uIGZvciBjdXJsIHRvIHJlcXVlc3QKKyAgdGhpcywgYW5kIHRodXMgSSB1cGRhdGVkIHRoZSB0ZXN0IGNhc2VzIGFjY29yZGluZ2x5LgorCistIENVUkxFX0JBRF9DT05URU5UX0VOQ09ESU5HOiBub3cgdXNlZCBmb3IgdHJhbnNmZXIgZW5jb2RpbmcgdG9vCisKKy0gVEU6IGRvIHRoZSBDb25uZWN0aW9uOiBoZWFkZXIKKyAgCisgIFdoZW4gVEU6IGlzIGluc2VydGVkIGluIHRoZSByZXF1ZXN0LCB3ZSBtdXN0IGFkZCBhICJDb25uZWN0aW9uOiBURSIgYXMKKyAgd2VsbCB0byBiZSBIVFRQIDEuMSBjb21wbGlhbnQuIElmIGEgY3VzdG9tIENvbm5lY3Rpb246IGhlYWRlciBpcyBwYXNzZWQKKyAgaW4sIHdlIG11c3QgdXNlIHRoYXQgYW5kIG9ubHkgYXBwZW5kIFRFIHRvIGl0LiBUZXN0IGNhc2UgMTEyNSB2ZXJpZmllcworICBURTogKyBjdXN0b20gQ29ubmVjdGlvbjouCisKKy0gdGVzdDExMjQ6IHZlcmlmeSBnemlwIEFORCBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nCisKKy0gVEU6IHJlbmFtZSBzdHJ1Y3QgZmllbGQgY29udGVudF9lbmNvZGluZworICAKKyAgU2luY2UgdGhpcyBzdHJ1Y3QgbWVtYmVyIGlzIHVzZWQgaW4gdGhlIGNvZGUgdG8gZGV0ZXJtaW5lIHdoYXQgYW5kIGhvdworICB0byBkZWNvZGUgYXV0b21hdGljYWxseSBhbmQgc2luY2UgaXQgaXMgbm93IGFsc28gdXNlZCBmb3IgY29tcHJlc3NlZAorICBUcmFuc2Zlci1FbmNvZGluZ3MsIEkgcmVuYW1lZCBpdCB0byB0aGUgbW9yZSBzdWl0YWJsZSAnYXV0b19kZWNvZGluZycKKworLSBIVFRQOiBhZGQgc3VwcG9ydCBmb3IgZ3ppcCBhbmQgZGVmbGF0ZSBUcmFuc2Zlci1FbmNvZGluZworICAKKyAgVHJhbnNmZXItRW5jb2RpbmcgZGlmZmVycyBmcm9tIENvbnRlbnQtRW5jb2RpbmcgaW4gYSBmZXcgc3VidGxlIHdheXMsCisgIGJ1dCBwcmltYXJpbHkgaXQgY29uY2VybnMgdGhlIHRyYW5zZmVyIG9ubHkgYW5kIG5vdCB0aGUgY29udGVudCBzbyB3aGVuCisgIGRpc2NvdmVyZWQgdG8gYmUgY29tcHJlc3NlZCB3ZSBrbm93IHdlIGhhdmUgdG8gdW5jb21wcmVzcyBpdC4gVGhlcmUgd2lsbAorICBvbmx5IGFycml2ZSBjb21wcmVzc2VkIHRyYW5zZmVycyBpbiBhIHJlc3BvbnNlIGFmdGVyIHdlIGhhdmUgcmVxdWVzdGVkCisgIHRoZW0gd2l0aCB0aGUgYXBwcm9wcmlhdGUgVEU6IGhlYWRlci4KKyAgCisgIFRlc3QgY2FzZSAxMTIyIGFuZCAxMTIzIHZlcmlmeS4KKworUGF0cmljayBNb25uZXJhdCAoMTggQXByIDIwMTEpCistIE9TNDAwIHByYWdtYSBjb21tZW50OiByZXBsYWNlIChkYXRlKSBieSAodXNlciwgX19EQVRFX18pIHRvIGluY2x1ZGUgeWVhci4KKworLSBBdWdtZW50IFJQRyBiaW5kaW5nIHdpdGggIk9MRElFUyIgZGVmaW5pdGlvbnMuCisgIEZpeCBPUzQwMCBMREFQIHdyYXBwZXJzOiBzdHJpbmdzIHdlcmUgbm9uIG51bGwtdGVybWluYXRlZC4KKworRGFuaWVsIFN0ZW5iZXJnICgxOCBBcHIgMjAxMSkKKy0gY3VybC1jb25maWc6IGZpeCAtLXZlcnNpb24KKyAgCisgIGN1cmwtY29uZmlnIC0tdmVyc2lvbiBkaWRuJ3Qgb3V0cHV0IHRoZSBjb3JyZWN0IHZlcnNpb24gc3RyaW5nIChidWcKKyAgaW50cm9kdWNlZCBpbiBjb21taXQgMDM1NWUzM2I1ZjdiMjM0Y2YzKSwgYW5kIHVuZm9ydHVuYXRlbHkgdGhlIHRlc3QKKyAgY2FzZSAxMDIyIHRoYXQgd2FzIHN1cHBvc2VkIHRvIGNoZWNrIGZvciB0aGlzIHdhcyBicm9rZW4uCisgIAorICBUaGlzIGNoYW5nZSBmaXhlcyB0aGUgdGVzdCB0byBkZXRlY3QgdGhpcyBwcm9ibGVtIGFuZCBpdCBmaXhlcyB0aGUKKyAgb3V0cHV0LgorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMjg4NzI3CisKKy0gUkVMRUFTRS1OT1RFUzogdXBkYXRlZCBjb250cmlidXRvciBhbW91bnQKKworLSBUSEFOS1M6IDExIG5ldyBjb250cmlidXRvcnMgZnJvbSA3LjIxLjUKKworLSA3LjIxLjY6IG5leHQgcGxhbm5lZCByZWxlYXNlIG51bWJlcgorCitWZXJzaW9uIDcuMjEuNSAoMTcgQXByIDIwMTEpCisKK0RhbmllbCBTdGVuYmVyZyAoMTcgQXByIDIwMTEpCistIGJhc2U2NC5jOiByZW1vdmVkIHdyb25nIGNvbW1lbnQKKworLSBJTlRFUk5BTFM6IGNsZWFuIHVwCisgIAorICBDbGFyaWZpZWQgdGhlIHJlbGVhc2UgcHJvY2VkdXJlCisKKy0gVE9ETy1SRUxFQVNFOiBwdXNoIHRoZSByZW1haW5pbmcgb25lcyB0byBuZXh0IHJlbGVhc2UKKyAgCisgIEFzIHdlJ3JlIGNsb3NpbmcgaW4gb24gdGhlIHJlbGVhc2UsIEkgZ2l2ZSB1cCBvbiB0aGUgcmVtYWluaW5nIG9uZXMgYnV0CisgIEkgbGVhdmUgdGhlbSBpbiBoZXJlIGZvciBub3cgdG8gdHJ5IHRvIGZpeCBmb3IgbmV4dCByZWxlYXNlLgorICAKKyAgSSByZW1vdmVkIHRoZSAyODEgaXNzdWUgYWJvdXQgd2FybmluZ3MgZnJvbSB0aGUgc3RhdGljYWwgYW5hbHl6ZXIgc2NhbnMsCisgIGFzIHRoZXkgc2VlbSB0byBiZSBtb3N0bHkgZmFsc2UgcG9zaXRpdmVzIGF0IHRoaXMgcG9pbnQuCisKKy0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggYzI0NmY2M2E3MQorCistIEN1cmxfc3NsX3NodXRkb3duOiByZXN0b3JlIHNlbmQvcmVjdiBwb2ludGVycworICAKKyAgV2hlbiBnb2luZyBiYWNrIGZyb20gU1NMLCBwdXQgdGhlIHNlbmQvcmVjdiBmdW5jdGlvbiBwb2ludGVycyBiYWNrIHRvCisgIHRoZSBwbGFpbiB2ZXJzaW9ucy4KKyAgCisgIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA0LzAwNzAuaHRtbAorICBSZXBvcnRlZCBieTogTWVobWV0IEJvemt1cnQKKworR3VlbnRlciBLbmF1ZiAoMTYgQXByIDIwMTEpCistIENoYW5nZWQgZW1haWwgcGVyIEdpc2xlJ3MgcmVxdWVzdC4KKworRGFuaWVsIFN0ZW5iZXJnICgxNCBBcHIgMjAxMSkKKy0gY3VybC4xOiBlcnJvciBjb2RlIHVwZGF0ZQorICAKKyAgRXJyb3IgNCBoYXMgZ290IGEgbWVhbmluZworICAKKyAgRXJyb3IgNDggaGFzIGdvdCBhIHNsaWdodGx5IGRpZmZlcmVudCBtZWFuaW5nIG5vdworCistIEZBUTogYy1hcmVzIGRvZXMgaXB2NiBwcmV0dHkgd2VsbCBub3cKKworLSBbQW5kcmVpIEJlbmVhIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgRml4IGEgYnVmZmVyIG92ZXJmbG93IGluIHB1YmtleV9zaG93KCkuCisKK0d1ZW50ZXIgS25hdWYgKDE0IEFwciAyMDExKQorLSBSZXBsYWNlZCB2YXIgbWFuaXB1bGF0aW9ucyB3aXRoIHBlcmxpc2ggaGFja3MuCisKK0RhbiBGYW5kcmljaCAoMTIgQXByIDIwMTEpCistIFVwZGF0ZWQgbWluaW11bSBiaW5hcnkgc2l6ZXMKKworRGFuaWVsIFN0ZW5iZXJnICgxMiBBcHIgMjAxMSkKKy0gY29uZmlndXJlOiBsaWJzc2gyIGxpbmsgZml4IHdpdGhvdXQgcGtnLWNvbmZpZworICAKKyAgVGhlIHNjcmlwdCBkaWRuJ3QgcHJvcGVybHkgYWRkIHRoZSAtbHNzaDIgbGluayBvcHRpb24gd2hlbiBpdCBlbmFibGVkCisgIGxpYnNzaDIgbGlua2luZyB3aGVyZSBwa2ctY29uZmlnIGlzbid0IGZvdW5kLgorICAKKyAgUmVwb3J0ZWQgYnk6IFNhcWliIEFsaQorICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wNC8wMDU0Lmh0bWwKKworLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCBmMDFkZjE5Nzk4MQorCistIGNoZWNrY29ubmVjdGlvbjogZG9uJ3QgY2FsbCB3aXRoIE5VTEwgcG9pbnRlcgorICAKKyAgV2hlbiBjaGVja2luZyBpZiBhbiBleGlzdGluZyBSVFNQIGNvbm5lY3Rpb24gaXMgYWxpdmUgb3Igbm90LCB0aGUKKyAgY2hlY2tjb25uZWN0aW9uIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIGEgU2Vzc2lvbkhhbmRsZSBwb2ludGVyCisgIGJlaW5nIE5VTEwgYW5kIHRoZW4gcmVmZXJlbmNlZCBjYXVzaW5nIGEgY3Jhc2guIFRoaXMgaGFwcGVuZWQgb25seSB1c2luZworICB0aGUgbXVsdGkgaW50ZXJmYWNlLgorICAKKyAgUmVwb3J0ZWQgYnk6IFRpbnVzIHZhbiBkZW4gQmVyZworICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMjgwNzM5CisKKy0gY3VybC4xOiBzcGVsbCBvdXQgdGhlIC1PIHRhcmdldCBkaXJlY3RvcnkKKyAgCisgIFdoZW4gdXNpbmcgLU8gdGhlIGZpbGUgd2lsbCBiZSBzYXZlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGFuZCB0aGlzCisgIGlzIG5vdyBzcGVsbGVkIG91dCBjbGVhcmx5LgorCistIE9wZW5TU0w6IG5vLXNzbHYyIGF3YXJlCisgIAorICBBbGxvdyBvcGVuU1NMIHdpdGhvdXQgU1NMMiB0byBiZSB1c2VkLiBUaGlzIGZpeCBpcyBpbnNwaXJlZCBieSB0aGUgZml4CisgIHByb3ZpZGVkIGJ5IENyaXN0aWFuIFJvZHLtZ3Vlei4KKyAgCisgIFJlcG9ydGVkIGJ5OiBDcmlzdGlhbiBSb2Ry7Wd1ZXoKKworLSBjdXJsX2Vhc3lfc2V0b3B0LjM6IENVUkxPUFRfUkVTT0xWRSB0eXBvIHZlcnNpb24KKyAgCisgIFJlcG9ydGVkIGJ5OiBIb25nbGkgTGFpCisKK0thbWlsIER1ZGthICg4IEFwciAyMDExKQorLSBuc3M6IGFsbG93IHRvIHVzZSBtdWx0aXBsZSBjbGllbnQgY2VydGlmaWNhdGVzIGZvciBhIHNpbmdsZSBob3N0CisgIAorICBJbiBjYXNlIGEgY2xpZW50IGNlcnRpZmljYXRlIGlzIHVzZWQsIGludmFsaWRhdGUgU1NMIHNlc3Npb24gY2FjaGUKKyAgYXQgdGhlIGVuZCBvZiBhIHNlc3Npb24uICBUaGlzIGZvcmNlcyBOU1MgdG8gYXNrIGZvciBhIG5ldyBjbGllbnQKKyAgY2VydGlmaWNhdGUgd2hlbiBjb25uZWN0aW5nIHNlY29uZCB0aW1lIHRvIHRoZSBzYW1lIGhvc3QuCisgIAorICBCdWc6IGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS82ODkwMzEKKworRGFuaWVsIFN0ZW5iZXJnICg3IEFwciAyMDExKQorLSBtay1jYS1idW5kbGUucGw6IHNob3cgZnVsbCBVUkwgaW4gb3V0cHV0CisgIAorICBXaGVuIEkgZGVjaWRlZCB0byBzZWFyY2ggZm9yIGEgcG90ZW50aWFsIGVycm9yIHdpdGggdGhlIGNhY2VydCBidW5kbGUgaXQKKyAgc3RydWNrIG1lIEkgd2FudGVkIHRvIHNlZSB0aGUgZnVsbCBzb3VyY2UgVVJMIGluIHRoZSBvdXRwdXQuLi4KKworRGFuIEZhbmRyaWNoICg3IEFwciAyMDExKQorLSBBZGRlZCBtZW50aW9uIG9mIEZUUCBwcm94aWVzCisKK0RhbmllbCBTdGVuYmVyZyAoNyBBcHIgMjAxMSkKKy0gW0dpc2xlIFZhbmVtIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgc3JjL01ha2VmaWxlLmIzMjogdXBkYXRlcworICAKKyAgKiBSZW5hbWUgdGhlIG9iamVjdCBvYmplY3QgZGlyZWN0b3J5IGZyb20gJ29ianMnIHRvICdCQ0Nfb2JqJyB0byBiZSBpbgorICAgc3luYyB3aXRoIG15IHByZXZpb3VzIHBhdGNoIGZvciBsaWIvTWFrZWZpbGUuYjMyLgorICAKKyAgKiBUdXJuIG9mZiB0aGVzZSB3YXJuaW5ncyB0byBrZWVwIHRoZSBidWlsZCB0b3RhbGx5IHNpbGVudCAod2l0aCBDQnVpbGRlci02CisgICB0aGF0IGlzKS4KKyAgICAtdy1pbmwgICAgODAyNiBGdW5jdGlvbnMgWCBhcmUgbm90IGV4cGFuZGVkIGlubGluZS4KKyAgICAtdy1waWEgICA4MDYwIFBvc3NpYmx5IGluY29ycmVjdCBhc3NpZ25tZW50CisgICAgLXctcGluICA4MDYxIEluaXRpYWxpemF0aW9uIGlzIG9ubHkgcGFydGlhbGx5IGJyYWNrZXRlZAorICAgKHNhbWUgYWRkZWQgaW4gc3JjL01ha2VmaWxlLmIzMikKKyAgCisgICogJChNS0RJUikgYW5kICQoUk1ESVIpIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIHRoZSBzaGVsbC1jb21tYW5kcyAnbWQnCisgICBhbmQgJ3JkJy4gV2hlbiBoYXZpbmcgTWluZ1cvTXN5cyBwcm9ncmFtcyAnbWtkaXIuZXhlJyBhbmQgJ3JtZGlyLmV4ZScgaW4KKyAgJFBBVEgsIHRoaXMgY29uZnVzZXMgQm9ybGFuZCdzIG1ha2UgYW5kIHRoZSByZXN1bHQgKHRoZSBjbGVhbmluZyBldGMuKSB3b3VsZAorICAgbm90IGJlIGFzIGV4cGVjdGVkLgorICAKKyAgKiBSZW1vdmVkIHRoZSBwcmVwcm9jZXNzaW5nIHN0ZXA7IG5vIG5lZWQgZm9yIFBQX0NNRCBhbmQgdGhlIC5pbnQgZmlsZXMuCisgICBjdXJsLmV4ZSBidWlsZHMgZmluZSB3L28gYW5kIHRoZSBtYWtlZmlsZSBnZXRzIHNpbXBsZXIuCisgIAorICAqIEFkZGVkIGEgdGFyZ2V0IGZvciBjcmVhdGluZyBhIGNvbXByZXNzZWQgaHVnZWhlbHAuYyBpZiBXSVRIX1pMSUIgaXMgIGRlZmluZWQuCisgIEl0IGFzc3VtZXMgZ3JvZmYsIGd6aXAgYW5kIHBlcmwgaXMgYXZhaWxhYmxlIGlmIHN1Y2ggYW4gImFkdmFuY2VkIiAgdXNlcnMKKyAgcmVxdWVzdHMgaXQuIE9rYXk/IEJUVy4gTXkgZ3JvZmYgYW5kIFBlcmwgbmVlZHMgdW5peC1zbGFzaGVzICgnLycpLgorICAgT3RoZXIgcGVybHMgc2hvdWxkIGhhbmRsZSBib3RoIGZvcm1zICgnLycgYW5kICdcJykuCisKKy0gW0dpc2xlIFZhbmVtIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgbGliL01ha2VmaWxlLmIzMjogdXBkYXRlcworICAKKyAgKiBSZW5hbWUgdGhlIG9iamVjdCBvYmplY3QgZGlyZWN0b3J5IGZyb20gJ29ianMnIHRvICdCQ0Nfb2JqJy4gSSBmZWVsCisgICBpdCBzaG91bGQgYmUgbmFtZWQgcHJvcGVybHkuIFJlZi4gTWFrZWZpbGUuV2F0Y29tIHdoZXJlIGl0J3MgY2FsbGVkCisgICAnV0NfV2luMzIub2JqJy4KKyAgCisgICogVHVybiBvZmYgdGhlc2Ugd2FybmluZ3MgdG8ga2VlcCB0aGUgYnVpbGQgdG90YWxseSBzaWxlbnQgKHdpdGggQ0J1aWxkZXItNgorICAgdGhhdCBpcykuCisgICAgLXctaW5sICAgIDgwMjYgRnVuY3Rpb25zIFggYXJlIG5vdCBleHBhbmRlZCBpbmxpbmUuCisgICAgLXctcGlhICAgODA2MCBQb3NzaWJseSBpbmNvcnJlY3QgYXNzaWdubWVudAorICAgIC13LXBpbiAgODA2MSBJbml0aWFsaXphdGlvbiBpcyBvbmx5IHBhcnRpYWxseSBicmFja2V0ZWQKKyAgCisgIEknbSBzdXJlIHRoZSB3YXJuaW5ncyBjb3VsZCBiZSBmaXhlZCB0aGUgInByb3BlciIgd2F5IG9yIHdpdGggc29tZSBhZGRlZAorICAiI3ByYWdtYSIgc3RhdGVtZW50cy4gQnV0IHRoYXQganVzdCBjbHV0dGVycyB0aGUgc291cmNlcyBJTUhPLgorICAKKyAgKiAkKE1LRElSKSBhbmQgJChSTURJUikgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggdGhlIHNoZWxsLWNvbW1hbmRzICdtZCcKKyAgIGFuZCAncmQnLiBXaGVuIGhhdmluZyBNaW5nVy9Nc3lzIHByb2dyYW1zICdta2Rpci5leGUnIGFuZCAncm1kaXIuZXhlJyBpbgorICAkUEFUSCwgdGhpcyBjb25mdXNlcyBCb3JsYW5kJ3MgbWFrZSBhbmQgdGhlIHJlc3VsdCAodGhlIGNsZWFuaW5nIGV0Yy4pIHdvdWxkCisgICBub3QgYmUgYXMgZXhwZWN0ZWQuCisgIAorICAqIEFkZGVkIGEgIi5wYXRoLmludCA9ICQoT0JKRElSKSIgdG8gdGVsbCBtYWtlIHdoZXJlIHRoZSAkKFBSRVBST0NFU1NFRCkKKyAgIGZpbGVzIGFyZS4gV2h5IHdlIG5lZWQgdGhlIHByZXByb2Nlc3Mgc3RlcCBpbiB0aGUgZmlzdCBwbGFjZSBpcyBiZXlvbmQgbWUKKyAgKFlhbmc/KS4gQnV0IEknbGwgbGVhdmUgdGhhdCBmb3Igbm93LgorCistIFtHaXNsZSBWYW5lbSBicm91Z2h0IHRoaXMgY2hhbmdlXQorCisgIGV4YW1wbGVzL21ha2VmaWxlLmRqOiB1cGRhdGUgZW1haWwKKworLSBUT0RPLVJFTEVBU0U6IGRlbGV0ZWQgNCBpc3N1ZXMKKyAgCisgIFRoZXNlIHByb2JsZW1zIGhhdmUgZ290dGVuIG5vIGludGVyZXN0L2ZlZWRiYWNrIGZyb20gdXNlcnM6CisgIAorICAtMjc1IC0gSW50cm9kdWNlIGEgd2F5IHRvIGF2b2lkIHNlbmRpbmcgVVNFUiBmb3IgRlRQIGNvbm5lY3Rpb25zCisgIC0yODggLSBidWcgMzIxOTk5NyBjdXJsIHJ0bXAgcmVxdWVzdCBjdXJsOiAoNTUpIHNlbGVjdC9wb2xsIHJldHVybmVkIGVycm9yCisgIAorICBUaGlzIHByb2JsZW0gaXMgcmF0aGVyIGFuIGF1dG9jb25mIGJ1ZyB3aXRoIGxpdHRsZSB1c2VyIGludGVyZXN0IGFuZCBpdAorICBjYW4gYmUgd29ya2VkIGFyb3VuZCB3aXRoIGFuIG9sZGVyIGF1dG9jb25mOgorICAKKyAgLTI3OCAtICJDb25maWd1cmUgICRhc19lY2hvIGRvZXMgbm90IHdvcmsiCisgIAorICBUaGlzIHByb2JsZW0gaXMgbm90IGZpeGVkOgorICAKKyAgLTI4NiAtIGJ1ZyAzMjE0MjIzIFBpcGVsaW5lZCBIVFRQIHJlcXVlc3RzIHdpdGggYSB6ZXJvLWxlbmd0aCBib2R5IGJyb2tlbgorCistIFtDaHJpcyBTbW93dG9uIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCisKKyAgSFRUUCBwaXBlbGluaW5nOiBGaXggaGFuZGxpbmcgb2YgemVyby1sZW5ndGggcmVzcG9uc2VzCisgIAorICBBbHNvIGFkZCB0ZXN0IGNhc2UgNTg0IGZvciB0aGUgc2FtZQorICAKKyAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMjE0MjIzCisKKy0gbGliY3VybC5wYzogdmVyc2lvbiBudW1iZXIgZml4CisgIAorICBUaGlzIGhhc24ndCBzaG93IHRoZSB2ZXJzaW9uIG51bWJlciBjb3JyZWN0bHkgc2luY2UgdGhlICRWRVJTSU9OIGNoYW5nZQorICBpbiB0aGUgY29uZmlndXJlLCBhbmQgbm93IGl0IHdvcmtzIGFnYWluLgorCitEYW4gRmFuZHJpY2ggKDUgQXByIDIwMTEpCistIENoYW5nZWQgc29tZSBub25wb3J0YWJsZSB0eXBlcworCistIERvbid0IGxpc3QgTlRMTSBpbiBjdXJsLWNvbmZpZyB3aGVuIEhUVFAgaXMgZGlzYWJsZWQKKyAgCisgIEFsc28sIGZpeGVkIEN1cmxfcHJveHlDT05ORUNUKCkgc3R1YiB3aXRoIEhUVFAgZGlzYWJsZWQuCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9DTWFrZS9DTWFrZUNvbmZpZ3VyYWJsZUZpbGUuaW4gYi9jdXJsLTcuMjUuMC9DTWFrZS9DTWFrZUNvbmZpZ3VyYWJsZUZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmNzRhMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL0NNYWtlL0NNYWtlQ29uZmlndXJhYmxlRmlsZS5pbgpAQCAtMCwwICsxLDIgQEAKK0BDTUFLRV9DT05GSUdVUkFCTEVfRklMRV9DT05URU5UQAorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9DTWFrZS9DdXJsQ2hlY2tDU291cmNlQ29tcGlsZXMuY21ha2UgYi9jdXJsLTcuMjUuMC9DTWFrZS9DdXJsQ2hlY2tDU291cmNlQ29tcGlsZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzMjc2OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL0NNYWtlL0N1cmxDaGVja0NTb3VyY2VDb21waWxlcy5jbWFrZQpAQCAtMCwwICsxLDc1IEBACisjIC0gQ2hlY2sgaWYgdGhlIHNvdXJjZSBjb2RlIHByb3ZpZGVkIGluIHRoZSBTT1VSQ0UgYXJndW1lbnQgY29tcGlsZXMuCisjIENVUkxfQ0hFQ0tfQ19TT1VSQ0VfQ09NUElMRVMoU09VUkNFIFZBUikKKyMgLSBtYWNybyB3aGljaCBjaGVja3MgaWYgdGhlIHNvdXJjZSBjb2RlIGNvbXBpbGVzCisjICBTT1VSQ0UgICAtIHNvdXJjZSBjb2RlIHRvIHRyeSB0byBjb21waWxlCisjICBWQVIgICAgICAtIHZhcmlhYmxlIHRvIHN0b3JlIHdoZXRoZXIgdGhlIHNvdXJjZSBjb2RlIGNvbXBpbGVkCisjCisjIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIG1heSBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBtYWNybyB0bworIyBtb2RpZnkgdGhlIHdheSB0aGUgY2hlY2sgaXMgcnVuOgorIworIyAgQ01BS0VfUkVRVUlSRURfRkxBR1MgPSBzdHJpbmcgb2YgY29tcGlsZSBjb21tYW5kIGxpbmUgZmxhZ3MKKyMgIENNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TID0gbGlzdCBvZiBtYWNyb3MgdG8gZGVmaW5lICgtREZPTz1iYXIpCisjICBDTUFLRV9SRVFVSVJFRF9JTkNMVURFUyA9IGxpc3Qgb2YgaW5jbHVkZSBkaXJlY3RvcmllcworIyAgQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTID0gbGlzdCBvZiBsaWJyYXJpZXMgdG8gbGluaworCittYWNybyhDVVJMX0NIRUNLX0NfU09VUkNFX0NPTVBJTEVTIFNPVVJDRSBWQVIpCisgIGlmKCIke1ZBUn0iIE1BVENIRVMgIl4ke1ZBUn0kIiBPUiAiJHtWQVJ9IiBNQVRDSEVTICJVTktOT1dOIikKKyAgICBzZXQobWVzc2FnZSAiJHtWQVJ9IikKKyAgICAjIElmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGlzIGdyZWF0ZXIgdGhhbiAyIChTT1VSQ0UgVkFSKQorICAgIGlmKCR7QVJHQ30gR1JFQVRFUiAyKQorICAgICAgIyB0aGVuIGFkZCB0aGUgdGhpcmQgYXJndW1lbnQgYXMgYSBtZXNzYWdlCisgICAgICBzZXQobWVzc2FnZSAiJHtBUkdWMn0gKCR7VkFSfSkiKQorICAgIGVuZGlmKCR7QVJHQ30gR1JFQVRFUiAyKQorICAgIHNldChNQUNST19DSEVDS19GVU5DVElPTl9ERUZJTklUSU9OUworICAgICAgIi1EJHtWQVJ9ICR7Q01BS0VfUkVRVUlSRURfRkxBR1N9IikKKyAgICBpZihDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMpCisgICAgICBzZXQoQ1VSTF9DSEVDS19DX1NPVVJDRV9DT01QSUxFU19BRERfTElCUkFSSUVTCisgICAgICAgICItRExJTktfTElCUkFSSUVTOlNUUklORz0ke0NNQUtFX1JFUVVJUkVEX0xJQlJBUklFU30iKQorICAgIGVsc2UoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTKQorICAgICAgc2V0KENVUkxfQ0hFQ0tfQ19TT1VSQ0VfQ09NUElMRVNfQUREX0xJQlJBUklFUykKKyAgICBlbmRpZihDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMpCisgICAgaWYoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMpCisgICAgICBzZXQoQ1VSTF9DSEVDS19DX1NPVVJDRV9DT01QSUxFU19BRERfSU5DTFVERVMKKyAgICAgICAgIi1ESU5DTFVERV9ESVJFQ1RPUklFUzpTVFJJTkc9JHtDTUFLRV9SRVFVSVJFRF9JTkNMVURFU30iKQorICAgIGVsc2UoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMpCisgICAgICBzZXQoQ1VSTF9DSEVDS19DX1NPVVJDRV9DT01QSUxFU19BRERfSU5DTFVERVMpCisgICAgZW5kaWYoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMpCisgICAgc2V0KHNyYyAiIikKKyAgICBmb3JlYWNoKGRlZiAke0VYVFJBX0RFRklORVN9KQorICAgICAgc2V0KHNyYyAiJHtzcmN9I2RlZmluZSAke2RlZn0gMVxuIikKKyAgICBlbmRmb3JlYWNoKGRlZikKKyAgICBmb3JlYWNoKGluYyAke0hFQURFUl9JTkNMVURFU30pCisgICAgICBzZXQoc3JjICIke3NyY30jaW5jbHVkZSA8JHtpbmN9PlxuIikKKyAgICBlbmRmb3JlYWNoKGluYykKKworICAgIHNldChzcmMgIiR7c3JjfVxuaW50IG1haW4oKSB7ICR7U09VUkNFfSA7IHJldHVybiAwOyB9IikKKyAgICBzZXQoQ01BS0VfQ09ORklHVVJBQkxFX0ZJTEVfQ09OVEVOVCAiJHtzcmN9IikKKyAgICBjb25maWd1cmVfZmlsZSgke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ01ha2UvQ01ha2VDb25maWd1cmFibGVGaWxlLmluCisgICAgICAiJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC9zcmMuYyIKKyAgICAgIElNTUVESUFURSkKKyAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7bWVzc2FnZX0iKQorICAgIHRyeV9jb21waWxlKCR7VkFSfQorICAgICAgJHtDTUFLRV9CSU5BUllfRElSfQorICAgICAgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZVRtcC9zcmMuYworICAgICAgQ09NUElMRV9ERUZJTklUSU9OUyAke0NNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TfQorICAgICAgQ01BS0VfRkxBR1MgLURDT01QSUxFX0RFRklOSVRJT05TOlNUUklORz0ke01BQ1JPX0NIRUNLX0ZVTkNUSU9OX0RFRklOSVRJT05TfQorICAgICAgIiR7Q1VSTF9DSEVDS19DX1NPVVJDRV9DT01QSUxFU19BRERfTElCUkFSSUVTfSIKKyAgICAgICIke0NVUkxfQ0hFQ0tfQ19TT1VSQ0VfQ09NUElMRVNfQUREX0lOQ0xVREVTfSIKKyAgICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCisgICAgaWYoJHtWQVJ9KQorICAgICAgc2V0KCR7VkFSfSAxIENBQ0hFIElOVEVSTkFMICJUZXN0ICR7bWVzc2FnZX0iKQorICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke21lc3NhZ2V9IC0gU3VjY2VzcyIpCisgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZworICAgICAgICAiUGVyZm9ybWluZyBDIFNPVVJDRSBGSUxFIFRlc3QgJHttZXNzYWdlfSBzdWNjZWRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgorICAgICAgICAiJHtPVVRQVVR9XG4iCisgICAgICAgICJTb3VyY2UgZmlsZSB3YXM6XG4ke3NyY31cbiIpCisgICAgZWxzZSgke1ZBUn0pCisgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7bWVzc2FnZX0gLSBGYWlsZWQiKQorICAgICAgc2V0KCR7VkFSfSAiIiBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke21lc3NhZ2V9IikKKyAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKKyAgICAgICAgIlBlcmZvcm1pbmcgQyBTT1VSQ0UgRklMRSBUZXN0ICR7bWVzc2FnZX0gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCisgICAgICAgICIke09VVFBVVH1cbiIKKyAgICAgICAgIlNvdXJjZSBmaWxlIHdhczpcbiR7c3JjfVxuIikKKyAgICBlbmRpZigke1ZBUn0pCisgIGVuZGlmKCIke1ZBUn0iIE1BVENIRVMgIl4ke1ZBUn0kIiBPUiAiJHtWQVJ9IiBNQVRDSEVTICJVTktOT1dOIikKK2VuZG1hY3JvKENVUkxfQ0hFQ0tfQ19TT1VSQ0VfQ09NUElMRVMpCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9DTWFrZS9DdXJsQ2hlY2tDU291cmNlUnVucy5jbWFrZSBiL2N1cmwtNy4yNS4wL0NNYWtlL0N1cmxDaGVja0NTb3VyY2VSdW5zLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMTRhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9DTWFrZS9DdXJsQ2hlY2tDU291cmNlUnVucy5jbWFrZQpAQCAtMCwwICsxLDgzIEBACisjIC0gQ2hlY2sgaWYgdGhlIHNvdXJjZSBjb2RlIHByb3ZpZGVkIGluIHRoZSBTT1VSQ0UgYXJndW1lbnQgY29tcGlsZXMgYW5kIHJ1bnMuCisjIENVUkxfQ0hFQ0tfQ19TT1VSQ0VfUlVOUyhTT1VSQ0UgVkFSKQorIyAtIG1hY3JvIHdoaWNoIGNoZWNrcyBpZiB0aGUgc291cmNlIGNvZGUgcnVucworIyAgU09VUkNFICAgLSBzb3VyY2UgY29kZSB0byB0cnkgdG8gY29tcGlsZQorIyAgVkFSIC0gdmFyaWFibGUgdG8gc3RvcmUgc2l6ZSBpZiB0aGUgdHlwZSBleGlzdHMuCisjCisjIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIG1heSBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBtYWNybyB0bworIyBtb2RpZnkgdGhlIHdheSB0aGUgY2hlY2sgaXMgcnVuOgorIworIyAgQ01BS0VfUkVRVUlSRURfRkxBR1MgPSBzdHJpbmcgb2YgY29tcGlsZSBjb21tYW5kIGxpbmUgZmxhZ3MKKyMgIENNQUtFX1JFUVVJUkVEX0RFRklOSVRJT05TID0gbGlzdCBvZiBtYWNyb3MgdG8gZGVmaW5lICgtREZPTz1iYXIpCisjICBDTUFLRV9SRVFVSVJFRF9JTkNMVURFUyA9IGxpc3Qgb2YgaW5jbHVkZSBkaXJlY3RvcmllcworIyAgQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTID0gbGlzdCBvZiBsaWJyYXJpZXMgdG8gbGluaworCittYWNybyhDVVJMX0NIRUNLX0NfU09VUkNFX1JVTlMgU09VUkNFIFZBUikKKyAgaWYoIiR7VkFSfSIgTUFUQ0hFUyAiXiR7VkFSfSQiIE9SICIke1ZBUn0iIE1BVENIRVMgIlVOS05PV04iKQorICAgIHNldChtZXNzYWdlICIke1ZBUn0iKQorICAgICMgSWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaXMgZ3JlYXRlciB0aGFuIDIgKFNPVVJDRSBWQVIpCisgICAgaWYoJHtBUkdDfSBHUkVBVEVSIDIpCisgICAgICAjIHRoZW4gYWRkIHRoZSB0aGlyZCBhcmd1bWVudCBhcyBhIG1lc3NhZ2UKKyAgICAgIHNldChtZXNzYWdlICIke0FSR1YyfSAoJHtWQVJ9KSIpCisgICAgZW5kaWYoJHtBUkdDfSBHUkVBVEVSIDIpCisgICAgc2V0KE1BQ1JPX0NIRUNLX0ZVTkNUSU9OX0RFRklOSVRJT05TCisgICAgICAiLUQke1ZBUn0gJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30iKQorICAgIGlmKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUykKKyAgICAgIHNldChDVVJMX0NIRUNLX0NfU09VUkNFX0NPTVBJTEVTX0FERF9MSUJSQVJJRVMKKyAgICAgICAgIi1ETElOS19MSUJSQVJJRVM6U1RSSU5HPSR7Q01BS0VfUkVRVUlSRURfTElCUkFSSUVTfSIpCisgICAgZWxzZShDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMpCisgICAgICBzZXQoQ1VSTF9DSEVDS19DX1NPVVJDRV9DT01QSUxFU19BRERfTElCUkFSSUVTKQorICAgIGVuZGlmKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUykKKyAgICBpZihDTUFLRV9SRVFVSVJFRF9JTkNMVURFUykKKyAgICAgIHNldChDVVJMX0NIRUNLX0NfU09VUkNFX0NPTVBJTEVTX0FERF9JTkNMVURFUworICAgICAgICAiLURJTkNMVURFX0RJUkVDVE9SSUVTOlNUUklORz0ke0NNQUtFX1JFUVVJUkVEX0lOQ0xVREVTfSIpCisgICAgZWxzZShDTUFLRV9SRVFVSVJFRF9JTkNMVURFUykKKyAgICAgIHNldChDVVJMX0NIRUNLX0NfU09VUkNFX0NPTVBJTEVTX0FERF9JTkNMVURFUykKKyAgICBlbmRpZihDTUFLRV9SRVFVSVJFRF9JTkNMVURFUykKKyAgICBzZXQoc3JjICIiKQorICAgIGZvcmVhY2goZGVmICR7RVhUUkFfREVGSU5FU30pCisgICAgICBzZXQoc3JjICIke3NyY30jZGVmaW5lICR7ZGVmfSAxXG4iKQorICAgIGVuZGZvcmVhY2goZGVmKQorICAgIGZvcmVhY2goaW5jICR7SEVBREVSX0lOQ0xVREVTfSkKKyAgICAgIHNldChzcmMgIiR7c3JjfSNpbmNsdWRlIDwke2luY30+XG4iKQorICAgIGVuZGZvcmVhY2goaW5jKQorCisgICAgc2V0KHNyYyAiJHtzcmN9XG5pbnQgbWFpbigpIHsgJHtTT1VSQ0V9IDsgcmV0dXJuIDA7IH0iKQorICAgIHNldChDTUFLRV9DT05GSUdVUkFCTEVfRklMRV9DT05URU5UICIke3NyY30iKQorICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DTWFrZS9DTWFrZUNvbmZpZ3VyYWJsZUZpbGUuaW4KKyAgICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlVG1wL3NyYy5jIgorICAgICAgSU1NRURJQVRFKQorICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIFRlc3QgJHttZXNzYWdlfSIpCisgICAgdHJ5X3J1bigke1ZBUn0gJHtWQVJ9X0NPTVBJTEVECisgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CisgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlVG1wL3NyYy5jCisgICAgICBDT01QSUxFX0RFRklOSVRJT05TICR7Q01BS0VfUkVRVUlSRURfREVGSU5JVElPTlN9CisgICAgICBDTUFLRV9GTEFHUyAtRENPTVBJTEVfREVGSU5JVElPTlM6U1RSSU5HPSR7TUFDUk9fQ0hFQ0tfRlVOQ1RJT05fREVGSU5JVElPTlN9CisgICAgICAiJHtDVVJMX0NIRUNLX0NfU09VUkNFX0NPTVBJTEVTX0FERF9MSUJSQVJJRVN9IgorICAgICAgIiR7Q1VSTF9DSEVDS19DX1NPVVJDRV9DT01QSUxFU19BRERfSU5DTFVERVN9IgorICAgICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVCkKKyAgICAjIGlmIGl0IGRpZCBub3QgY29tcGlsZSBtYWtlIHRoZSByZXR1cm4gdmFsdWUgZmFpbCBjb2RlIG9mIDEKKyAgICBpZihOT1QgJHtWQVJ9X0NPTVBJTEVEKQorICAgICAgc2V0KCR7VkFSfSAxKQorICAgIGVuZGlmKE5PVCAke1ZBUn1fQ09NUElMRUQpCisgICAgIyBpZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyAwIHRoZW4gaXQgd29ya2VkCisgICAgc2V0KHJlc3VsdF92YXIgJHske1ZBUn19KQorICAgIGlmKCIke3Jlc3VsdF92YXJ9IiBFUVVBTCAwKQorICAgICAgc2V0KCR7VkFSfSAxIENBQ0hFIElOVEVSTkFMICJUZXN0ICR7bWVzc2FnZX0iKQorICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgVGVzdCAke21lc3NhZ2V9IC0gU3VjY2VzcyIpCisgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZworICAgICAgICAiUGVyZm9ybWluZyBDIFNPVVJDRSBGSUxFIFRlc3QgJHttZXNzYWdlfSBzdWNjZWRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgorICAgICAgICAiJHtPVVRQVVR9XG4iCisgICAgICAgICJSZXR1cm4gdmFsdWU6ICR7JHtWQVJ9fVxuIgorICAgICAgICAiU291cmNlIGZpbGUgd2FzOlxuJHtzcmN9XG4iKQorICAgIGVsc2UoIiR7cmVzdWx0X3Zhcn0iIEVRVUFMIDApCisgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBUZXN0ICR7bWVzc2FnZX0gLSBGYWlsZWQiKQorICAgICAgc2V0KCR7VkFSfSAiIiBDQUNIRSBJTlRFUk5BTCAiVGVzdCAke21lc3NhZ2V9IikKKyAgICAgIGZpbGUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2cKKyAgICAgICAgIlBlcmZvcm1pbmcgQyBTT1VSQ0UgRklMRSBUZXN0ICR7bWVzc2FnZX0gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCisgICAgICAgICIke09VVFBVVH1cbiIKKyAgICAgICAgIlJldHVybiB2YWx1ZTogJHtyZXN1bHRfdmFyfVxuIgorICAgICAgICAiU291cmNlIGZpbGUgd2FzOlxuJHtzcmN9XG4iKQorICAgIGVuZGlmKCIke3Jlc3VsdF92YXJ9IiBFUVVBTCAwKQorICBlbmRpZigiJHtWQVJ9IiBNQVRDSEVTICJeJHtWQVJ9JCIgT1IgIiR7VkFSfSIgTUFUQ0hFUyAiVU5LTk9XTiIpCitlbmRtYWNybyhDVVJMX0NIRUNLX0NfU09VUkNFX1JVTlMpCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9DTWFrZS9DdXJsVGVzdHMuYyBiL2N1cmwtNy4yNS4wL0NNYWtlL0N1cmxUZXN0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTg3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9DTWFrZS9DdXJsVGVzdHMuYwpAQCAtMCwwICsxLDcxMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisvKiBUaW1lIHdpdGggc3lzL3RpbWUgdGVzdCAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKK2ludAorbWFpbiAoKQoreworaWYgKChzdHJ1Y3QgdG0gKikgMCkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorCisjZW5kaWYKKworI2lmZGVmIEhBVkVfRkNOVExfT19OT05CTE9DSworCisvKiBoZWFkZXJzIGZvciBGQ05UTF9PX05PTkJMT0NLIHRlc3QgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorLyogKi8KKyNpZiBkZWZpbmVkKHN1bikgfHwgZGVmaW5lZChfX3N1bl9fKSB8fCBcCisgICAgZGVmaW5lZChfX1NVTlBST19DKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0NDKQorIyBpZiBkZWZpbmVkKF9fU1ZSNCkgfHwgZGVmaW5lZChfX3NydjRfXykKKyMgIGRlZmluZSBQTEFURk9STV9TT0xBUklTCisjIGVsc2UKKyMgIGRlZmluZSBQTEFURk9STV9TVU5PUzQKKyMgZW5kaWYKKyNlbmRpZgorI2lmIChkZWZpbmVkKF9BSVgpIHx8IGRlZmluZWQoX194bENfXykpICYmICFkZWZpbmVkKF9BSVg0MSkKKyMgZGVmaW5lIFBMQVRGT1JNX0FJWF9WMworI2VuZGlmCisvKiAqLworI2lmIGRlZmluZWQoUExBVEZPUk1fU1VOT1M0KSB8fCBkZWZpbmVkKFBMQVRGT1JNX0FJWF9WMykgfHwgZGVmaW5lZChfX0JFT1NfXykKKyNlcnJvciAiT19OT05CTE9DSyBkb2VzIG5vdCB3b3JrIG9uIHRoaXMgcGxhdGZvcm0iCisjZW5kaWYKKworaW50CittYWluICgpCit7CisgICAgICAvKiBPX05PTkJMT0NLIHNvdXJjZSB0ZXN0ICovCisgICAgICBpbnQgZmxhZ3MgPSAwOworICAgICAgaWYoMCAhPSBmY250bCgwLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfR0VUSE9TVEJZQUREUl9SXzUKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgoraW50CittYWluICgpCit7CisKK2NoYXIgKiBhZGRyZXNzOworaW50IGxlbmd0aDsKK2ludCB0eXBlOworc3RydWN0IGhvc3RlbnQgaDsKK3N0cnVjdCBob3N0ZW50X2RhdGEgaGRhdGE7CitpbnQgcmM7CisjaWZuZGVmIGdldGhvc3RieWFkZHJfcgorICAodm9pZClnZXRob3N0YnlhZGRyX3I7CisjZW5kaWYKK3JjID0gZ2V0aG9zdGJ5YWRkcl9yKGFkZHJlc3MsIGxlbmd0aCwgdHlwZSwgJmgsICZoZGF0YSk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUl81X1JFRU5UUkFOVAorI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KK2ludAorbWFpbiAoKQoreworCitjaGFyICogYWRkcmVzczsKK2ludCBsZW5ndGg7cQoraW50IHR5cGU7CitzdHJ1Y3QgaG9zdGVudCBoOworc3RydWN0IGhvc3RlbnRfZGF0YSBoZGF0YTsKK2ludCByYzsKKyNpZm5kZWYgZ2V0aG9zdGJ5YWRkcl9yCisgICh2b2lkKWdldGhvc3RieWFkZHJfcjsKKyNlbmRpZgorcmMgPSBnZXRob3N0YnlhZGRyX3IoYWRkcmVzcywgbGVuZ3RoLCB0eXBlLCAmaCwgJmhkYXRhKTsKKyAgOworICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2lmZGVmIEhBVkVfR0VUSE9TVEJZQUREUl9SXzcKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgoraW50CittYWluICgpCit7CisKK2NoYXIgKiBhZGRyZXNzOworaW50IGxlbmd0aDsKK2ludCB0eXBlOworc3RydWN0IGhvc3RlbnQgaDsKK2NoYXIgYnVmZmVyWzgxOTJdOworaW50IGhfZXJybm9wOworc3RydWN0IGhvc3RlbnQgKiBocDsKKworI2lmbmRlZiBnZXRob3N0YnlhZGRyX3IKKyAgKHZvaWQpZ2V0aG9zdGJ5YWRkcl9yOworI2VuZGlmCitocCA9IGdldGhvc3RieWFkZHJfcihhZGRyZXNzLCBsZW5ndGgsIHR5cGUsICZoLAorICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCA4MTkyLCAmaF9lcnJub3ApOworICA7CisgIHJldHVybiAwOworfQorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRIT1NUQllBRERSX1JfN19SRUVOVFJBTlQKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CitpbnQKK21haW4gKCkKK3sKKworY2hhciAqIGFkZHJlc3M7CitpbnQgbGVuZ3RoOworaW50IHR5cGU7CitzdHJ1Y3QgaG9zdGVudCBoOworY2hhciBidWZmZXJbODE5Ml07CitpbnQgaF9lcnJub3A7CitzdHJ1Y3QgaG9zdGVudCAqIGhwOworCisjaWZuZGVmIGdldGhvc3RieWFkZHJfcgorICAodm9pZClnZXRob3N0YnlhZGRyX3I7CisjZW5kaWYKK2hwID0gZ2V0aG9zdGJ5YWRkcl9yKGFkZHJlc3MsIGxlbmd0aCwgdHlwZSwgJmgsCisgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIDgxOTIsICZoX2Vycm5vcCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUl84CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KK2ludAorbWFpbiAoKQoreworCitjaGFyICogYWRkcmVzczsKK2ludCBsZW5ndGg7CitpbnQgdHlwZTsKK3N0cnVjdCBob3N0ZW50IGg7CitjaGFyIGJ1ZmZlcls4MTkyXTsKK2ludCBoX2Vycm5vcDsKK3N0cnVjdCBob3N0ZW50ICogaHA7CitpbnQgcmM7CisKKyNpZm5kZWYgZ2V0aG9zdGJ5YWRkcl9yCisgICh2b2lkKWdldGhvc3RieWFkZHJfcjsKKyNlbmRpZgorcmMgPSBnZXRob3N0YnlhZGRyX3IoYWRkcmVzcywgbGVuZ3RoLCB0eXBlLCAmaCwKKyAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgODE5MiwgJmhwLCAmaF9lcnJub3ApOworICA7CisgIHJldHVybiAwOworfQorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRIT1NUQllBRERSX1JfOF9SRUVOVFJBTlQKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CitpbnQKK21haW4gKCkKK3sKKworY2hhciAqIGFkZHJlc3M7CitpbnQgbGVuZ3RoOworaW50IHR5cGU7CitzdHJ1Y3QgaG9zdGVudCBoOworY2hhciBidWZmZXJbODE5Ml07CitpbnQgaF9lcnJub3A7CitzdHJ1Y3QgaG9zdGVudCAqIGhwOworaW50IHJjOworCisjaWZuZGVmIGdldGhvc3RieWFkZHJfcgorICAodm9pZClnZXRob3N0YnlhZGRyX3I7CisjZW5kaWYKK3JjID0gZ2V0aG9zdGJ5YWRkcl9yKGFkZHJlc3MsIGxlbmd0aCwgdHlwZSwgJmgsCisgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIDgxOTIsICZocCwgJmhfZXJybm9wKTsKKyAgOworICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2lmZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzMKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI3VuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAodm9pZCAqKTAKKworaW50CittYWluICgpCit7CisKK3N0cnVjdCBob3N0ZW50X2RhdGEgZGF0YTsKKyNpZm5kZWYgZ2V0aG9zdGJ5bmFtZV9yCisgICh2b2lkKWdldGhvc3RieW5hbWVfcjsKKyNlbmRpZgorZ2V0aG9zdGJ5bmFtZV9yKE5VTEwsIE5VTEwsIE5VTEwpOworICA7CisgIHJldHVybiAwOworfQorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfM19SRUVOVFJBTlQKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjdW5kZWYgTlVMTAorI2RlZmluZSBOVUxMICh2b2lkICopMAorCitpbnQKK21haW4gKCkKK3sKKworc3RydWN0IGhvc3RlbnRfZGF0YSBkYXRhOworI2lmbmRlZiBnZXRob3N0YnluYW1lX3IKKyAgKHZvaWQpZ2V0aG9zdGJ5bmFtZV9yOworI2VuZGlmCitnZXRob3N0YnluYW1lX3IoTlVMTCwgTlVMTCwgTlVMTCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl81CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjdW5kZWYgTlVMTAorI2RlZmluZSBOVUxMICh2b2lkICopMAorCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgZ2V0aG9zdGJ5bmFtZV9yCisgICh2b2lkKWdldGhvc3RieW5hbWVfcjsKKyNlbmRpZgorZ2V0aG9zdGJ5bmFtZV9yKE5VTEwsIE5VTEwsIE5VTEwsIDAsIE5VTEwpOworICA7CisgIHJldHVybiAwOworfQorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNV9SRUVOVFJBTlQKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjdW5kZWYgTlVMTAorI2RlZmluZSBOVUxMICh2b2lkICopMAorCitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBnZXRob3N0YnluYW1lX3IKKyAgKHZvaWQpZ2V0aG9zdGJ5bmFtZV9yOworI2VuZGlmCitnZXRob3N0YnluYW1lX3IoTlVMTCwgTlVMTCwgTlVMTCwgMCwgTlVMTCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl82CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyN1bmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgKHZvaWQgKikwCisKK2ludAorbWFpbiAoKQoreworCisjaWZuZGVmIGdldGhvc3RieW5hbWVfcgorICAodm9pZClnZXRob3N0YnluYW1lX3I7CisjZW5kaWYKK2dldGhvc3RieW5hbWVfcihOVUxMLCBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKyAgOworICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2lmZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzZfUkVFTlRSQU5UCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI3VuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAodm9pZCAqKTAKKworaW50CittYWluICgpCit7CisKKyNpZm5kZWYgZ2V0aG9zdGJ5bmFtZV9yCisgICh2b2lkKWdldGhvc3RieW5hbWVfcjsKKyNlbmRpZgorZ2V0aG9zdGJ5bmFtZV9yKE5VTEwsIE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworICA7CisgIHJldHVybiAwOworfQorI2VuZGlmCisjaWZkZWYgSEFWRV9TT0NLTEVOX1QKKyNpZmRlZiBfV0lOMzIKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKK2ludAorbWFpbiAoKQoreworaWYgKChzb2NrbGVuX3QgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChzb2NrbGVuX3QpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2lmZGVmIEhBVkVfSU5fQUREUl9UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCitpbnQKK21haW4gKCkKK3sKK2lmICgoaW5fYWRkcl90ICopIDApCisgIHJldHVybiAwOworaWYgKHNpemVvZiAoaW5fYWRkcl90KSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfQk9PTF9UCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERCT09MX0gKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjZW5kaWYKK2ludAorbWFpbiAoKQoreworaWYgKHNpemVvZiAoYm9vbCAqKSApCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorI2VuZGlmCisKKyNpZmRlZiBTVERDX0hFQURFUlMKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgoraW50IG1haW4oKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKyNpZmRlZiBSRVRTSUdUWVBFX1RFU1QKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpZmRlZiBzaWduYWwKKyMgdW5kZWYgc2lnbmFsCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB2b2lkICgqc2lnbmFsIChpbnQsIHZvaWQgKCopKGludCkpKShpbnQpOworI2Vsc2UKK3ZvaWQgKCpzaWduYWwgKCkpICgpOworI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2lmZGVmIEhBVkVfSU5FVF9OVE9BX1JfREVDTAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCit0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKCk7CisKK2ludCBtYWluKCkKK3sKKyNpZm5kZWYgaW5ldF9udG9hX3IKKyAgZnVuY190eXBlIGZ1bmM7CisgIGZ1bmMgPSAoZnVuY190eXBlKWluZXRfbnRvYV9yOworI2VuZGlmCisgIHJldHVybiAwOworfQorI2VuZGlmCisjaWZkZWYgSEFWRV9JTkVUX05UT0FfUl9ERUNMX1JFRU5UUkFOVAorI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKK3R5cGVkZWYgdm9pZCAoKmZ1bmNfdHlwZSkoKTsKKworaW50IG1haW4oKQoreworI2lmbmRlZiBpbmV0X250b2FfcgorICBmdW5jX3R5cGUgZnVuYzsKKyAgZnVuYyA9IChmdW5jX3R5cGUpJmluZXRfbnRvYV9yOworI2VuZGlmCisgIHJldHVybiAwOworfQorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRBRERSSU5GTworI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCitpbnQgbWFpbih2b2lkKSB7CisgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWk7CisgICAgaW50IGVycm9yOworCisgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOworICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisjaWZuZGVmIGdldGFkZHJpbmZvCisgICAgKHZvaWQpZ2V0YWRkcmluZm87CisjZW5kaWYKKyAgICBlcnJvciA9IGdldGFkZHJpbmZvKCIxMjcuMC4wLjEiLCAiODA4MCIsICZoaW50cywgJmFpKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorI2VuZGlmCisjaWZkZWYgSEFWRV9GSUxFX09GRlNFVF9CSVRTCisjaWZkZWYgX0ZJTEVfT0ZGU0VUX0JJVFMKKyN1bmRlZiBfRklMRV9PRkZTRVRfQklUUworI2VuZGlmCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisgICAgICAgICAgICAgICAgICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgID8gMSA6IC0xXTsKK2ludCBtYWluICgpIHsgOyByZXR1cm4gMDsgfQorI2VuZGlmCisjaWZkZWYgSEFWRV9JT0NUTFNPQ0tFVAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorIyAgaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgICAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgIGVuZGlmCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjICBpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyMgICAgaW5jbHVkZSA8d2luc29jazIuaD4KKyMgIGVsc2UKKyMgICAgaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyMgICAgICBpbmNsdWRlIDx3aW5zb2NrLmg+CisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisvKiBpb2N0bHNvY2tldCBzb3VyY2UgY29kZSAqLworIGludCBzb2NrZXQ7CisgdW5zaWduZWQgbG9uZyBmbGFncyA9IGlvY3Rsc29ja2V0KHNvY2tldCwgRklPTkJJTywgJmZsYWdzKTsKKworICA7CisgIHJldHVybiAwOworfQorCisjZW5kaWYKKyNpZmRlZiBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjICBpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGlmZGVmIEhBVkVfV0lOU09DSzJfSAorIyAgICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyAgZWxzZQorIyAgICBpZmRlZiBIQVZFX1dJTlNPQ0tfSAorIyAgICAgIGluY2x1ZGUgPHdpbnNvY2suaD4KKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKy8qIElvY3RsU29ja2V0IHNvdXJjZSBjb2RlICovCisgICAgaWYoMCAhPSBJb2N0bFNvY2tldCgwLCAwLCAwKSkKKyAgICAgIHJldHVybiAxOworICA7CisgIHJldHVybiAwOworfQorI2VuZGlmCisjaWZkZWYgSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTF9GSU9OQklPCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjICBpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGlmZGVmIEhBVkVfV0lOU09DSzJfSAorIyAgICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyAgZWxzZQorIyAgICBpZmRlZiBIQVZFX1dJTlNPQ0tfSAorIyAgICAgIGluY2x1ZGUgPHdpbnNvY2suaD4KKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKy8qIElvY3RsU29ja2V0IHNvdXJjZSBjb2RlICovCisgICAgICAgIGxvbmcgZmxhZ3MgPSAwOworICAgICAgICBpZigwICE9IGlvY3Rsc29ja2V0KDAsIEZJT05CSU8sICZmbGFncykpCisgICAgICAgICAgcmV0dXJuIDE7CisgIDsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU8KKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyMgIGlmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjICAgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjICBlbmRpZgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjICAgIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjICBlbHNlCisjICAgIGlmZGVmIEhBVkVfV0lOU09DS19ICisjICAgICAgaW5jbHVkZSA8d2luc29jay5oPgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKworICAgICAgICBpbnQgZmxhZ3MgPSAwOworICAgICAgICBpZigwICE9IGlvY3Rsc29ja2V0KDAsIEZJT05CSU8sICZmbGFncykpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyAgOworICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2lmZGVmIEhBVkVfSU9DVExfRklPTkJJTworLyogaGVhZGVycyBmb3IgRklPTkJJTyB0ZXN0ICovCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorIyAgaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUk9QVFNfSAorIyAgaW5jbHVkZSA8c3Ryb3B0cy5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisgICAgICAgIGludCBmbGFncyA9IDA7CisgICAgICAgIGlmKDAgIT0gaW9jdGwoMCwgRklPTkJJTywgJmZsYWdzKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworICA7CisgIHJldHVybiAwOworfQorI2VuZGlmCisjaWZkZWYgSEFWRV9JT0NUTF9TSU9DR0lGQUREUgorLyogaGVhZGVycyBmb3IgRklPTkJJTyB0ZXN0ICovCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorIyAgaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUk9QVFNfSAorIyAgaW5jbHVkZSA8c3Ryb3B0cy5oPgorI2VuZGlmCisjaW5jbHVkZSA8bmV0L2lmLmg+CisKK2ludAorbWFpbiAoKQoreworICAgICAgICBzdHJ1Y3QgaWZyZXEgaWZyOworICAgICAgICBpZigwICE9IGlvY3RsKDAsIFNJT0NHSUZBRERSLCAmaWZyKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworICA7CisgIHJldHVybiAwOworfQorI2VuZGlmCisjaWZkZWYgSEFWRV9TRVRTT0NLT1BUX1NPX05PTkJMT0NLCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjICBpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGlmZGVmIEhBVkVfV0lOU09DSzJfSAorIyAgICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyAgZWxzZQorIyAgICBpZmRlZiBIQVZFX1dJTlNPQ0tfSAorIyAgICAgIGluY2x1ZGUgPHdpbnNvY2suaD4KKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8KKworaW50CittYWluICgpCit7CisgICAgICAgIGlmKDAgIT0gc2V0c29ja29wdCgwLCBTT0xfU09DS0VULCBTT19OT05CTE9DSywgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgIDsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dMSUJDX1NUUkVSUk9SX1IKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgoraW50CittYWluICgpIHsKKyAgY2hhciBidWZmZXJbMTAyNF07IC8qIGJpZyBlbm91Z2ggdG8gcGxheSB3aXRoICovCisgIGNoYXIgKnN0cmluZyA9CisgICAgc3RyZXJyb3JfcihFQUNDRVMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgIC8qIHRoaXMgc2hvdWxkJ3ZlIHJldHVybmVkIGEgc3RyaW5nICovCisgICAgaWYoIXN0cmluZyB8fCAhc3RyaW5nWzBdKQorICAgICAgcmV0dXJuIDk5OworICAgIHJldHVybiAwOworfQorI2VuZGlmCisjaWZkZWYgSEFWRV9QT1NJWF9TVFJFUlJPUl9SCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KK2ludAorbWFpbiAoKSB7CisgIGNoYXIgYnVmZmVyWzEwMjRdOyAvKiBiaWcgZW5vdWdoIHRvIHBsYXkgd2l0aCAqLworICBpbnQgZXJyb3IgPQorICAgIHN0cmVycm9yX3IoRUFDQ0VTLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgICAvKiBUaGlzIHNob3VsZCd2ZSByZXR1cm5lZCB6ZXJvLCBhbmQgd3JpdHRlbiBhbiBlcnJvciBzdHJpbmcgaW4gdGhlCisgICAgICAgYnVmZmVyLiovCisgICAgaWYoIWJ1ZmZlclswXSB8fCBlcnJvcikKKyAgICAgIHJldHVybiA5OTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvQ01ha2UvRmluZE9wZW5TU0wuY21ha2UgYi9jdXJsLTcuMjUuMC9DTWFrZS9GaW5kT3BlblNTTC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2E5ZDYwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvQ01ha2UvRmluZE9wZW5TU0wuY21ha2UKQEAgLTAsMCArMSwxOSBAQAorIyBFeHRlbnNpb24gb2YgdGhlIHN0YW5kYXJkIEZpbmRPcGVuU1NMLmNtYWtlCisjIEFkZHMgT1BFTlNTTF9JTkNMVURFX0RJUlMgYW5kIGxpYmVheTMyCitpbmNsdWRlKCIke0NNQUtFX1JPT1R9L01vZHVsZXMvRmluZE9wZW5TU0wuY21ha2UiKQorCisjIEJpbGwgSG9mZm1hbiB0b2xkIHRoYXQgbGliZWF5MzIgaXMgbmVjZXNzYXJ5IGZvciBoaW06CitmaW5kX2xpYnJhcnkoU1NMX0xJQkVBWSBOQU1FUyBsaWJlYXkzMikKKworaWYoT1BFTlNTTF9GT1VORCkKKyAgaWYoU1NMX0xJQkVBWSkKKyAgICBsaXN0KEFQUEVORCBPUEVOU1NMX0xJQlJBUklFUyAke1NTTF9MSUJFQVl9KQorICBlbHNlKCkKKyAgICBzZXQoT1BFTlNTTF9GT1VORCBGQUxTRSkKKyAgZW5kaWYoKQorZW5kaWYoKQorCisKK2lmKE9QRU5TU0xfRk9VTkQpCisgIHNldChPUEVOU1NMX0lOQ0xVREVfRElSUyAke09QRU5TU0xfSU5DTFVERV9ESVJ9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvQ01ha2UvRmluZFpMSUIuY21ha2UgYi9jdXJsLTcuMjUuMC9DTWFrZS9GaW5kWkxJQi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2YxZDRmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvQ01ha2UvRmluZFpMSUIuY21ha2UKQEAgLTAsMCArMSw4IEBACisjIExvY2F0ZSB6bGliCitpbmNsdWRlKCIke0NNQUtFX1JPT1R9L01vZHVsZXMvRmluZFpMSUIuY21ha2UiKQorCitmaW5kX2xpYnJhcnkoWkxJQl9MSUJSQVJZX0RFQlVHIE5BTUVTIHpkIHpsaWJkIHpkbGxkIHpsaWIxZCApCisKK2lmKFpMSUJfRk9VTkQgQU5EIFpMSUJfTElCUkFSWV9ERUJVRykKKyAgc2V0KCBaTElCX0xJQlJBUklFUyBvcHRpbWl6ZWQgIiR7WkxJQl9MSUJSQVJZfSIgZGVidWcgJHtaTElCX0xJQlJBUllfREVCVUd9KQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvQ01ha2UvT3RoZXJUZXN0cy5jbWFrZSBiL2N1cmwtNy4yNS4wL0NNYWtlL090aGVyVGVzdHMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkMDA0OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL0NNYWtlL090aGVyVGVzdHMuY21ha2UKQEAgLTAsMCArMSwyNTAgQEAKK2luY2x1ZGUoQ3VybENoZWNrQ1NvdXJjZUNvbXBpbGVzKQorc2V0KEVYVFJBX0RFRklORVMgIl9fdW51c2VkMVxuI3VuZGVmIGlubGluZVxuI2RlZmluZSBfX3VudXNlZDIiKQorc2V0KEhFQURFUl9JTkNMVURFUykKK3NldChoZWFkZXJzX2hhY2spCisKK21hY3JvKGFkZF9oZWFkZXJfaW5jbHVkZSBjaGVjayBoZWFkZXIpCisgIGlmKCR7Y2hlY2t9KQorICAgIHNldChoZWFkZXJzX2hhY2sKKyAgICAgICIke2hlYWRlcnNfaGFja31cbiNpbmNsdWRlIDwke2hlYWRlcn0+IikKKyAgICAjU0VUKEhFQURFUl9JTkNMVURFUworICAgICMgICR7SEVBREVSX0lOQ0xVREVTfQorICAgICMgICIke2hlYWRlcn0iKQorICBlbmRpZigke2NoZWNrfSkKK2VuZG1hY3JvKGFkZF9oZWFkZXJfaW5jbHVkZSkKKworc2V0KHNpZ25hdHVyZV9jYWxsX2NvbnYpCitpZihIQVZFX1dJTkRPV1NfSCkKKyAgYWRkX2hlYWRlcl9pbmNsdWRlKEhBVkVfV0lORE9XU19IICJ3aW5kb3dzLmgiKQorICBhZGRfaGVhZGVyX2luY2x1ZGUoSEFWRV9XSU5TT0NLMl9IICJ3aW5zb2NrMi5oIikKKyAgYWRkX2hlYWRlcl9pbmNsdWRlKEhBVkVfV0lOU09DS19IICJ3aW5zb2NrLmgiKQorICBzZXQoRVhUUkFfREVGSU5FUyAke0VYVFJBX0RFRklORVN9CisgICAgIl9fdW51c2VkN1xuI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOXG4jZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU5cbiNlbmRpZlxuI2RlZmluZSBfX3VudXNlZDMiKQorICBzZXQoc2lnbmF0dXJlX2NhbGxfY29udiAiUEFTQ0FMIikKK2Vsc2UoSEFWRV9XSU5ET1dTX0gpCisgIGFkZF9oZWFkZXJfaW5jbHVkZShIQVZFX1NZU19UWVBFU19IICJzeXMvdHlwZXMuaCIpCisgIGFkZF9oZWFkZXJfaW5jbHVkZShIQVZFX1NZU19TT0NLRVRfSCAic3lzL3NvY2tldC5oIikKK2VuZGlmKEhBVkVfV0lORE9XU19IKQorCitzZXQoRVhUUkFfREVGSU5FU19CQUNLVVAgIiR7RVhUUkFfREVGSU5FU30iKQorc2V0KEVYVFJBX0RFRklORVMgIiR7RVhUUkFfREVGSU5FU19CQUNLVVB9XG4ke2hlYWRlcnNfaGFja31cbiR7ZXh0ZXJuX2xpbmV9XG4jZGVmaW5lIF9fdW51c2VkNSIpCitjdXJsX2NoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCJyZWN2KDAsIDAsIDAsIDApIiBjdXJsX2N2X3JlY3YpCitpZihjdXJsX2N2X3JlY3YpCisgICMgICAgQUNfQ0FDSEVfQ0hFQ0soW3R5cGVzIG9mIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHR5cGUgZm9yIHJlY3ZdLAorICAjW2N1cmxfY3ZfZnVuY19yZWN2X2FyZ3NdLCBbCisgICNTRVQoY3VybF9jdl9mdW5jX3JlY3ZfYXJncyAidW5rbm93biIpCisgICNmb3IgcmVjdl9yZXR2IGluICdpbnQnICdzc2l6ZV90JzsgZG8KKyAgaWYoTk9UIERFRklORUQgY3VybF9jdl9mdW5jX3JlY3ZfYXJncyBPUiAiJHtjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzfSIgU1RSRVFVQUwgInVua25vd24iKQorICAgIGZvcmVhY2gocmVjdl9yZXR2ICJpbnQiICJzc2l6ZV90IiApCisgICAgICBmb3JlYWNoKHJlY3ZfYXJnMSAiaW50IiAic3NpemVfdCIgIlNPQ0tFVCIpCisgICAgICAgIGZvcmVhY2gocmVjdl9hcmcyICJ2b2lkICoiICJjaGFyICoiKQorICAgICAgICAgIGZvcmVhY2gocmVjdl9hcmczICJzaXplX3QiICJpbnQiICJzb2NrbGVuX3QiICJ1bnNpZ25lZCBpbnQiKQorICAgICAgICAgICAgZm9yZWFjaChyZWN2X2FyZzQgImludCIgInVuc2lnbmVkIGludCIpCisgICAgICAgICAgICAgIGlmKE5PVCBjdXJsX2N2X2Z1bmNfcmVjdl9kb25lKQorICAgICAgICAgICAgICAgIHNldChjdXJsX2N2X2Z1bmNfcmVjdl90ZXN0ICJVTktOT1dOIikKKyAgICAgICAgICAgICAgICBzZXQoZXh0ZXJuX2xpbmUgImV4dGVybiAke3JlY3ZfcmV0dn0gJHtzaWduYXR1cmVfY2FsbF9jb252fSByZWN2KCR7cmVjdl9hcmcxfSwgJHtyZWN2X2FyZzJ9LCAke3JlY3ZfYXJnM30sICR7cmVjdl9hcmc0fSlcOyIpCisgICAgICAgICAgICAgICAgc2V0KEVYVFJBX0RFRklORVMgIiR7RVhUUkFfREVGSU5FU19CQUNLVVB9XG4ke2hlYWRlcnNfaGFja31cbiR7ZXh0ZXJuX2xpbmV9XG4jZGVmaW5lIF9fdW51c2VkNSIpCisgICAgICAgICAgICAgICAgY3VybF9jaGVja19jX3NvdXJjZV9jb21waWxlcygiCisgICAgICAgICAgICAgICAgICAgICR7cmVjdl9hcmcxfSBzPTA7CisgICAgICAgICAgICAgICAgICAgICR7cmVjdl9hcmcyfSBidWY9MDsKKyAgICAgICAgICAgICAgICAgICAgJHtyZWN2X2FyZzN9IGxlbj0wOworICAgICAgICAgICAgICAgICAgICAke3JlY3ZfYXJnNH0gZmxhZ3M9MDsKKyAgICAgICAgICAgICAgICAgICAgJHtyZWN2X3JldHZ9IHJlcyA9IHJlY3YocywgYnVmLCBsZW4sIGZsYWdzKSIKKyAgICAgICAgICAgICAgICAgIGN1cmxfY3ZfZnVuY19yZWN2X3Rlc3QKKyAgICAgICAgICAgICAgICAgICIke3JlY3ZfcmV0dn0gcmVjdigke3JlY3ZfYXJnMX0sICR7cmVjdl9hcmcyfSwgJHtyZWN2X2FyZzN9LCAke3JlY3ZfYXJnNH0pIikKKyAgICAgICAgICAgICAgICBpZihjdXJsX2N2X2Z1bmNfcmVjdl90ZXN0KQorICAgICAgICAgICAgICAgICAgc2V0KGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3MKKyAgICAgICAgICAgICAgICAgICAgIiR7cmVjdl9hcmcxfSwke3JlY3ZfYXJnMn0sJHtyZWN2X2FyZzN9LCR7cmVjdl9hcmc0fSwke3JlY3ZfcmV0dn0iKQorICAgICAgICAgICAgICAgICAgc2V0KFJFQ1ZfVFlQRV9BUkcxICIke3JlY3ZfYXJnMX0iKQorICAgICAgICAgICAgICAgICAgc2V0KFJFQ1ZfVFlQRV9BUkcyICIke3JlY3ZfYXJnMn0iKQorICAgICAgICAgICAgICAgICAgc2V0KFJFQ1ZfVFlQRV9BUkczICIke3JlY3ZfYXJnM30iKQorICAgICAgICAgICAgICAgICAgc2V0KFJFQ1ZfVFlQRV9BUkc0ICIke3JlY3ZfYXJnNH0iKQorICAgICAgICAgICAgICAgICAgc2V0KFJFQ1ZfVFlQRV9SRVRWICIke3JlY3ZfcmV0dn0iKQorICAgICAgICAgICAgICAgICAgc2V0KEhBVkVfUkVDViAxKQorICAgICAgICAgICAgICAgICAgc2V0KGN1cmxfY3ZfZnVuY19yZWN2X2RvbmUgMSkKKyAgICAgICAgICAgICAgICBlbmRpZihjdXJsX2N2X2Z1bmNfcmVjdl90ZXN0KQorICAgICAgICAgICAgICBlbmRpZihOT1QgY3VybF9jdl9mdW5jX3JlY3ZfZG9uZSkKKyAgICAgICAgICAgIGVuZGZvcmVhY2gocmVjdl9hcmc0KQorICAgICAgICAgIGVuZGZvcmVhY2gocmVjdl9hcmczKQorICAgICAgICBlbmRmb3JlYWNoKHJlY3ZfYXJnMikKKyAgICAgIGVuZGZvcmVhY2gocmVjdl9hcmcxKQorICAgIGVuZGZvcmVhY2gocmVjdl9yZXR2KQorICBlbHNlKE5PVCBERUZJTkVEIGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3MgT1IgIiR7Y3VybF9jdl9mdW5jX3JlY3ZfYXJnc30iIFNUUkVRVUFMICJ1bmtub3duIikKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXihbXixdKiksW14sXSosW14sXSosW14sXSosW14sXSokIiAiXFwxIiBSRUNWX1RZUEVfQVJHMSAiJHtjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzfSIpCisgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl5bXixdKiwoW14sXSopLFteLF0qLFteLF0qLFteLF0qJCIgIlxcMSIgUkVDVl9UWVBFX0FSRzIgIiR7Y3VybF9jdl9mdW5jX3JlY3ZfYXJnc30iKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeW14sXSosW14sXSosKFteLF0qKSxbXixdKixbXixdKiQiICJcXDEiIFJFQ1ZfVFlQRV9BUkczICIke2N1cmxfY3ZfZnVuY19yZWN2X2FyZ3N9IikKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXlteLF0qLFteLF0qLFteLF0qLChbXixdKiksW14sXSokIiAiXFwxIiBSRUNWX1RZUEVfQVJHNCAiJHtjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzfSIpCisgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl5bXixdKixbXixdKixbXixdKixbXixdKiwoW14sXSopJCIgIlxcMSIgUkVDVl9UWVBFX1JFVFYgIiR7Y3VybF9jdl9mdW5jX3JlY3ZfYXJnc30iKQorICAgICNNRVNTQUdFKCJSRUNWX1RZUEVfQVJHMSAke1JFQ1ZfVFlQRV9BUkcxfSIpCisgICAgI01FU1NBR0UoIlJFQ1ZfVFlQRV9BUkcyICR7UkVDVl9UWVBFX0FSRzJ9IikKKyAgICAjTUVTU0FHRSgiUkVDVl9UWVBFX0FSRzMgJHtSRUNWX1RZUEVfQVJHM30iKQorICAgICNNRVNTQUdFKCJSRUNWX1RZUEVfQVJHNCAke1JFQ1ZfVFlQRV9BUkc0fSIpCisgICAgI01FU1NBR0UoIlJFQ1ZfVFlQRV9SRVRWICR7UkVDVl9UWVBFX1JFVFZ9IikKKyAgZW5kaWYoTk9UIERFRklORUQgY3VybF9jdl9mdW5jX3JlY3ZfYXJncyBPUiAiJHtjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzfSIgU1RSRVFVQUwgInVua25vd24iKQorCisgIGlmKCIke2N1cmxfY3ZfZnVuY19yZWN2X2FyZ3N9IiBTVFJFUVVBTCAidW5rbm93biIpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQ2Fubm90IGZpbmQgcHJvcGVyIHR5cGVzIHRvIHVzZSBmb3IgcmVjdiBhcmdzIikKKyAgZW5kaWYoIiR7Y3VybF9jdl9mdW5jX3JlY3ZfYXJnc30iIFNUUkVRVUFMICJ1bmtub3duIikKK2Vsc2UoY3VybF9jdl9yZWN2KQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJVbmFibGUgdG8gbGluayBmdW5jdGlvbiByZWN2IikKK2VuZGlmKGN1cmxfY3ZfcmVjdikKK3NldChjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzICIke2N1cmxfY3ZfZnVuY19yZWN2X2FyZ3N9IiBDQUNIRSBJTlRFUk5BTCAiQXJndW1lbnRzIGZvciByZWN2IikKK3NldChIQVZFX1JFQ1YgMSkKKworY3VybF9jaGVja19jX3NvdXJjZV9jb21waWxlcygic2VuZCgwLCAwLCAwLCAwKSIgY3VybF9jdl9zZW5kKQoraWYoY3VybF9jdl9zZW5kKQorICAjICAgIEFDX0NBQ0hFX0NIRUNLKFt0eXBlcyBvZiBhcmd1bWVudHMgYW5kIHJldHVybiB0eXBlIGZvciBzZW5kXSwKKyAgI1tjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzXSwgWworICAjU0VUKGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3MgInVua25vd24iKQorICAjZm9yIHNlbmRfcmV0diBpbiAnaW50JyAnc3NpemVfdCc7IGRvCisgIGlmKE5PVCBERUZJTkVEIGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3MgT1IgIiR7Y3VybF9jdl9mdW5jX3NlbmRfYXJnc30iIFNUUkVRVUFMICJ1bmtub3duIikKKyAgICBmb3JlYWNoKHNlbmRfcmV0diAiaW50IiAic3NpemVfdCIgKQorICAgICAgZm9yZWFjaChzZW5kX2FyZzEgImludCIgInNzaXplX3QiICJTT0NLRVQiKQorICAgICAgICBmb3JlYWNoKHNlbmRfYXJnMiAiY29uc3Qgdm9pZCAqIiAidm9pZCAqIiAiY2hhciAqIiAiY29uc3QgY2hhciAqIikKKyAgICAgICAgICBmb3JlYWNoKHNlbmRfYXJnMyAic2l6ZV90IiAiaW50IiAic29ja2xlbl90IiAidW5zaWduZWQgaW50IikKKyAgICAgICAgICAgIGZvcmVhY2goc2VuZF9hcmc0ICJpbnQiICJ1bnNpZ25lZCBpbnQiKQorICAgICAgICAgICAgICBpZihOT1QgY3VybF9jdl9mdW5jX3NlbmRfZG9uZSkKKyAgICAgICAgICAgICAgICBzZXQoY3VybF9jdl9mdW5jX3NlbmRfdGVzdCAiVU5LTk9XTiIpCisgICAgICAgICAgICAgICAgc2V0KGV4dGVybl9saW5lICJleHRlcm4gJHtzZW5kX3JldHZ9ICR7c2lnbmF0dXJlX2NhbGxfY29udn0gc2VuZCgke3NlbmRfYXJnMX0sICR7c2VuZF9hcmcyfSwgJHtzZW5kX2FyZzN9LCAke3NlbmRfYXJnNH0pXDsiKQorICAgICAgICAgICAgICAgIHNldChFWFRSQV9ERUZJTkVTICIke0VYVFJBX0RFRklORVNfQkFDS1VQfVxuJHtoZWFkZXJzX2hhY2t9XG4ke2V4dGVybl9saW5lfVxuI2RlZmluZSBfX3VudXNlZDUiKQorICAgICAgICAgICAgICAgIGN1cmxfY2hlY2tfY19zb3VyY2VfY29tcGlsZXMoIgorICAgICAgICAgICAgICAgICAgICAke3NlbmRfYXJnMX0gcz0wOworICAgICAgICAgICAgICAgICAgICAke3NlbmRfYXJnMn0gYnVmPTA7CisgICAgICAgICAgICAgICAgICAgICR7c2VuZF9hcmczfSBsZW49MDsKKyAgICAgICAgICAgICAgICAgICAgJHtzZW5kX2FyZzR9IGZsYWdzPTA7CisgICAgICAgICAgICAgICAgICAgICR7c2VuZF9yZXR2fSByZXMgPSBzZW5kKHMsIGJ1ZiwgbGVuLCBmbGFncykiCisgICAgICAgICAgICAgICAgICBjdXJsX2N2X2Z1bmNfc2VuZF90ZXN0CisgICAgICAgICAgICAgICAgICAiJHtzZW5kX3JldHZ9IHNlbmQoJHtzZW5kX2FyZzF9LCAke3NlbmRfYXJnMn0sICR7c2VuZF9hcmczfSwgJHtzZW5kX2FyZzR9KSIpCisgICAgICAgICAgICAgICAgaWYoY3VybF9jdl9mdW5jX3NlbmRfdGVzdCkKKyAgICAgICAgICAgICAgICAgICNNRVNTQUdFKCJGb3VuZCBhcmd1bWVudHM6ICR7Y3VybF9jdl9mdW5jX3NlbmRfdGVzdH0iKQorICAgICAgICAgICAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIihjb25zdCkgLioiICJcXDEiIHNlbmRfcXVhbF9hcmcyICIke3NlbmRfYXJnMn0iKQorICAgICAgICAgICAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgImNvbnN0ICguKikiICJcXDEiIHNlbmRfYXJnMiAiJHtzZW5kX2FyZzJ9IikKKyAgICAgICAgICAgICAgICAgIHNldChjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzCisgICAgICAgICAgICAgICAgICAgICIke3NlbmRfYXJnMX0sJHtzZW5kX2FyZzJ9LCR7c2VuZF9hcmczfSwke3NlbmRfYXJnNH0sJHtzZW5kX3JldHZ9LCR7c2VuZF9xdWFsX2FyZzJ9IikKKyAgICAgICAgICAgICAgICAgIHNldChTRU5EX1RZUEVfQVJHMSAiJHtzZW5kX2FyZzF9IikKKyAgICAgICAgICAgICAgICAgIHNldChTRU5EX1RZUEVfQVJHMiAiJHtzZW5kX2FyZzJ9IikKKyAgICAgICAgICAgICAgICAgIHNldChTRU5EX1RZUEVfQVJHMyAiJHtzZW5kX2FyZzN9IikKKyAgICAgICAgICAgICAgICAgIHNldChTRU5EX1RZUEVfQVJHNCAiJHtzZW5kX2FyZzR9IikKKyAgICAgICAgICAgICAgICAgIHNldChTRU5EX1RZUEVfUkVUViAiJHtzZW5kX3JldHZ9IikKKyAgICAgICAgICAgICAgICAgIHNldChIQVZFX1NFTkQgMSkKKyAgICAgICAgICAgICAgICAgIHNldChjdXJsX2N2X2Z1bmNfc2VuZF9kb25lIDEpCisgICAgICAgICAgICAgICAgZW5kaWYoY3VybF9jdl9mdW5jX3NlbmRfdGVzdCkKKyAgICAgICAgICAgICAgZW5kaWYoTk9UIGN1cmxfY3ZfZnVuY19zZW5kX2RvbmUpCisgICAgICAgICAgICBlbmRmb3JlYWNoKHNlbmRfYXJnNCkKKyAgICAgICAgICBlbmRmb3JlYWNoKHNlbmRfYXJnMykKKyAgICAgICAgZW5kZm9yZWFjaChzZW5kX2FyZzIpCisgICAgICBlbmRmb3JlYWNoKHNlbmRfYXJnMSkKKyAgICBlbmRmb3JlYWNoKHNlbmRfcmV0dikKKyAgZWxzZShOT1QgREVGSU5FRCBjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzIE9SICIke2N1cmxfY3ZfZnVuY19zZW5kX2FyZ3N9IiBTVFJFUVVBTCAidW5rbm93biIpCisgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl4oW14sXSopLFteLF0qLFteLF0qLFteLF0qLFteLF0qLFteLF0qJCIgIlxcMSIgU0VORF9UWVBFX0FSRzEgIiR7Y3VybF9jdl9mdW5jX3NlbmRfYXJnc30iKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeW14sXSosKFteLF0qKSxbXixdKixbXixdKixbXixdKixbXixdKiQiICJcXDEiIFNFTkRfVFlQRV9BUkcyICIke2N1cmxfY3ZfZnVuY19zZW5kX2FyZ3N9IikKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXlteLF0qLFteLF0qLChbXixdKiksW14sXSosW14sXSosW14sXSokIiAiXFwxIiBTRU5EX1RZUEVfQVJHMyAiJHtjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzfSIpCisgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIl5bXixdKixbXixdKixbXixdKiwoW14sXSopLFteLF0qLFteLF0qJCIgIlxcMSIgU0VORF9UWVBFX0FSRzQgIiR7Y3VybF9jdl9mdW5jX3NlbmRfYXJnc30iKQorICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJeW14sXSosW14sXSosW14sXSosW14sXSosKFteLF0qKSxbXixdKiQiICJcXDEiIFNFTkRfVFlQRV9SRVRWICIke2N1cmxfY3ZfZnVuY19zZW5kX2FyZ3N9IikKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXlteLF0qLFteLF0qLFteLF0qLFteLF0qLFteLF0qLChbXixdKikkIiAiXFwxIiBTRU5EX1FVQUxfQVJHMiAiJHtjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzfSIpCisgICAgI01FU1NBR0UoIlNFTkRfVFlQRV9BUkcxICR7U0VORF9UWVBFX0FSRzF9IikKKyAgICAjTUVTU0FHRSgiU0VORF9UWVBFX0FSRzIgJHtTRU5EX1RZUEVfQVJHMn0iKQorICAgICNNRVNTQUdFKCJTRU5EX1RZUEVfQVJHMyAke1NFTkRfVFlQRV9BUkczfSIpCisgICAgI01FU1NBR0UoIlNFTkRfVFlQRV9BUkc0ICR7U0VORF9UWVBFX0FSRzR9IikKKyAgICAjTUVTU0FHRSgiU0VORF9UWVBFX1JFVFYgJHtTRU5EX1RZUEVfUkVUVn0iKQorICAgICNNRVNTQUdFKCJTRU5EX1FVQUxfQVJHMiAke1NFTkRfUVVBTF9BUkcyfSIpCisgIGVuZGlmKE5PVCBERUZJTkVEIGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3MgT1IgIiR7Y3VybF9jdl9mdW5jX3NlbmRfYXJnc30iIFNUUkVRVUFMICJ1bmtub3duIikKKworICBpZigiJHtjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzfSIgU1RSRVFVQUwgInVua25vd24iKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNhbm5vdCBmaW5kIHByb3BlciB0eXBlcyB0byB1c2UgZm9yIHNlbmQgYXJncyIpCisgIGVuZGlmKCIke2N1cmxfY3ZfZnVuY19zZW5kX2FyZ3N9IiBTVFJFUVVBTCAidW5rbm93biIpCisgIHNldChTRU5EX1FVQUxfQVJHMiAiY29uc3QiKQorZWxzZShjdXJsX2N2X3NlbmQpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlVuYWJsZSB0byBsaW5rIGZ1bmN0aW9uIHNlbmQiKQorZW5kaWYoY3VybF9jdl9zZW5kKQorc2V0KGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3MgIiR7Y3VybF9jdl9mdW5jX3NlbmRfYXJnc30iIENBQ0hFIElOVEVSTkFMICJBcmd1bWVudHMgZm9yIHNlbmQiKQorc2V0KEhBVkVfU0VORCAxKQorCitzZXQoRVhUUkFfREVGSU5FUyAiJHtFWFRSQV9ERUZJTkVTfVxuJHtoZWFkZXJzX2hhY2t9XG4jZGVmaW5lIF9fdW51c2VkNSIpCitjdXJsX2NoZWNrX2Nfc291cmNlX2NvbXBpbGVzKCJpbnQgZmxhZyA9IE1TR19OT1NJR05BTCIgSEFWRV9NU0dfTk9TSUdOQUwpCisKK3NldChFWFRSQV9ERUZJTkVTICJfX3VudXNlZDFcbiN1bmRlZiBpbmxpbmVcbiNkZWZpbmUgX191bnVzZWQyIikKK3NldChIRUFERVJfSU5DTFVERVMpCitzZXQoaGVhZGVyc19oYWNrKQorCittYWNybyhhZGRfaGVhZGVyX2luY2x1ZGUgY2hlY2sgaGVhZGVyKQorICBpZigke2NoZWNrfSkKKyAgICBzZXQoaGVhZGVyc19oYWNrCisgICAgICAiJHtoZWFkZXJzX2hhY2t9XG4jaW5jbHVkZSA8JHtoZWFkZXJ9PiIpCisgICAgI1NFVChIRUFERVJfSU5DTFVERVMKKyAgICAjICAke0hFQURFUl9JTkNMVURFU30KKyAgICAjICAiJHtoZWFkZXJ9IikKKyAgZW5kaWYoJHtjaGVja30pCitlbmRtYWNybyhhZGRfaGVhZGVyX2luY2x1ZGUgaGVhZGVyKQorCitpZihIQVZFX1dJTkRPV1NfSCkKKyAgc2V0KEVYVFJBX0RFRklORVMgJHtFWFRSQV9ERUZJTkVTfQorICAgICJfX3VudXNlZDdcbiNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTlxuI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOXG4jZW5kaWZcbiNkZWZpbmUgX191bnVzZWQzIikKKyAgYWRkX2hlYWRlcl9pbmNsdWRlKEhBVkVfV0lORE9XU19IICJ3aW5kb3dzLmgiKQorICBhZGRfaGVhZGVyX2luY2x1ZGUoSEFWRV9XSU5TT0NLMl9IICJ3aW5zb2NrMi5oIikKKyAgYWRkX2hlYWRlcl9pbmNsdWRlKEhBVkVfV0lOU09DS19IICJ3aW5zb2NrLmgiKQorZWxzZShIQVZFX1dJTkRPV1NfSCkKKyAgYWRkX2hlYWRlcl9pbmNsdWRlKEhBVkVfU1lTX1RZUEVTX0ggInN5cy90eXBlcy5oIikKKyAgYWRkX2hlYWRlcl9pbmNsdWRlKEhBVkVfU1lTX1RJTUVfSCAic3lzL3RpbWUuaCIpCisgIGFkZF9oZWFkZXJfaW5jbHVkZShUSU1FX1dJVEhfU1lTX1RJTUUgInRpbWUuaCIpCisgIGFkZF9oZWFkZXJfaW5jbHVkZShIQVZFX1RJTUVfSCAidGltZS5oIikKK2VuZGlmKEhBVkVfV0lORE9XU19IKQorc2V0KEVYVFJBX0RFRklORVMgIiR7RVhUUkFfREVGSU5FU31cbiR7aGVhZGVyc19oYWNrfVxuI2RlZmluZSBfX3VudXNlZDUiKQorY3VybF9jaGVja19jX3NvdXJjZV9jb21waWxlcygic3RydWN0IHRpbWV2YWwgdHM7XG50cy50dl9zZWMgID0gMDtcbnRzLnR2X3VzZWMgPSAwIiBIQVZFX1NUUlVDVF9USU1FVkFMKQorCisKK2luY2x1ZGUoQ3VybENoZWNrQ1NvdXJjZVJ1bnMpCitzZXQoRVhUUkFfREVGSU5FUykKK3NldChIRUFERVJfSU5DTFVERVMpCitpZihIQVZFX1NZU19QT0xMX0gpCisgIHNldChIRUFERVJfSU5DTFVERVMgInN5cy9wb2xsLmgiKQorZW5kaWYoSEFWRV9TWVNfUE9MTF9IKQorY3VybF9jaGVja19jX3NvdXJjZV9ydW5zKCJyZXR1cm4gcG9sbCgodm9pZCAqKTAsIDAsIDEwIC8qbXMqLykiIEhBVkVfUE9MTF9GSU5FKQorCitzZXQoSEFWRV9TSUdfQVRPTUlDX1QgMSkKK3NldChFWFRSQV9ERUZJTkVTKQorc2V0KEhFQURFUl9JTkNMVURFUykKK2lmKEhBVkVfU0lHTkFMX0gpCisgIHNldChIRUFERVJfSU5DTFVERVMgInNpZ25hbC5oIikKKyAgc2V0KENNQUtFX0VYVFJBX0lOQ0xVREVfRklMRVMgInNpZ25hbC5oIikKK2VuZGlmKEhBVkVfU0lHTkFMX0gpCitjaGVja190eXBlX3NpemUoInNpZ19hdG9taWNfdCIgU0laRU9GX1NJR19BVE9NSUNfVCkKK2lmKEhBVkVfU0laRU9GX1NJR19BVE9NSUNfVCkKKyAgY3VybF9jaGVja19jX3NvdXJjZV9jb21waWxlcygic3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBkdW1teSA9IDAiIEhBVkVfU0lHX0FUT01JQ19UX05PVF9WT0xBVElMRSkKKyAgaWYoTk9UIEhBVkVfU0lHX0FUT01JQ19UX05PVF9WT0xBVElMRSkKKyAgICBzZXQoSEFWRV9TSUdfQVRPTUlDX1RfVk9MQVRJTEUgMSkKKyAgZW5kaWYoTk9UIEhBVkVfU0lHX0FUT01JQ19UX05PVF9WT0xBVElMRSkKK2VuZGlmKEhBVkVfU0laRU9GX1NJR19BVE9NSUNfVCkKKworc2V0KENIRUNLX1RZUEVfU0laRV9QUkVJTkNMVURFCisgICIjdW5kZWYgaW5saW5lIikKKworaWYoSEFWRV9XSU5ET1dTX0gpCisgIHNldChDSEVDS19UWVBFX1NJWkVfUFJFSU5DTFVERSAiJHtDSEVDS19UWVBFX1NJWkVfUFJFSU5DTFVERX0KKyAgI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisgICNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorICAjZW5kaWYKKyAgI2luY2x1ZGUgPHdpbmRvd3MuaD4iKQorICBpZihIQVZFX1dJTlNPQ0syX0gpCisgICAgc2V0KENIRUNLX1RZUEVfU0laRV9QUkVJTkNMVURFICIke0NIRUNLX1RZUEVfU0laRV9QUkVJTkNMVURFfVxuI2luY2x1ZGUgPHdpbnNvY2syLmg+IikKKyAgZW5kaWYoSEFWRV9XSU5TT0NLMl9IKQorZWxzZShIQVZFX1dJTkRPV1NfSCkKKyAgaWYoSEFWRV9TWVNfU09DS0VUX0gpCisgICAgc2V0KENNQUtFX0VYVFJBX0lOQ0xVREVfRklMRVMgJHtDTUFLRV9FWFRSQV9JTkNMVURFX0ZJTEVTfQorICAgICAgInN5cy9zb2NrZXQuaCIpCisgIGVuZGlmKEhBVkVfU1lTX1NPQ0tFVF9IKQorICBpZihIQVZFX05FVElORVRfSU5fSCkKKyAgICBzZXQoQ01BS0VfRVhUUkFfSU5DTFVERV9GSUxFUyAke0NNQUtFX0VYVFJBX0lOQ0xVREVfRklMRVN9CisgICAgICAibmV0aW5ldC9pbi5oIikKKyAgZW5kaWYoSEFWRV9ORVRJTkVUX0lOX0gpCisgIGlmKEhBVkVfQVJQQV9JTkVUX0gpCisgICAgc2V0KENNQUtFX0VYVFJBX0lOQ0xVREVfRklMRVMgJHtDTUFLRV9FWFRSQV9JTkNMVURFX0ZJTEVTfQorICAgICAgImFycGEvaW5ldC5oIikKKyAgZW5kaWYoSEFWRV9BUlBBX0lORVRfSCkKK2VuZGlmKEhBVkVfV0lORE9XU19IKQorCitjaGVja190eXBlX3NpemUoInN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIiBTSVpFT0ZfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UpCitpZihIQVZFX1NJWkVPRl9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRSkKKyAgc2V0KEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgMSkKK2VuZGlmKEhBVkVfU0laRU9GX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFKQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9DTWFrZS9QbGF0Zm9ybXMvV2luZG93c0NhY2hlLmNtYWtlIGIvY3VybC03LjI1LjAvQ01ha2UvUGxhdGZvcm1zL1dpbmRvd3NDYWNoZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTE2MWY4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvQ01ha2UvUGxhdGZvcm1zL1dpbmRvd3NDYWNoZS5jbWFrZQpAQCAtMCwwICsxLDEyMSBAQAoraWYoTk9UIFVOSVgpCisgIGlmKFdJTjMyKQorICAgIHNldChIQVZFX0xJQkRMIDApCisgICAgc2V0KEhBVkVfTElCVUNCIDApCisgICAgc2V0KEhBVkVfTElCU09DS0VUIDApCisgICAgc2V0KE5PVF9ORUVEX0xJQk5TTCAwKQorICAgIHNldChIQVZFX0xJQk5TTCAwKQorICAgIHNldChIQVZFX0xJQlogMCkKKyAgICBzZXQoSEFWRV9MSUJDUllQVE8gMCkKKworICAgIHNldChIQVZFX0RMT1BFTiAwKQorCisgICAgc2V0KEhBVkVfQUxMT0NBX0ggMCkKKyAgICBzZXQoSEFWRV9BUlBBX0lORVRfSCAwKQorICAgIHNldChIQVZFX0RMRkNOX0ggMCkKKyAgICBzZXQoSEFWRV9GQ05UTF9IIDEpCisgICAgc2V0KEhBVkVfRkVBVFVSRVNfSCAwKQorICAgIHNldChIQVZFX0lOVFRZUEVTX0ggMCkKKyAgICBzZXQoSEFWRV9JT19IIDEpCisgICAgc2V0KEhBVkVfTUFMTE9DX0ggMSkKKyAgICBzZXQoSEFWRV9NRU1PUllfSCAxKQorICAgIHNldChIQVZFX05FVERCX0ggMCkKKyAgICBzZXQoSEFWRV9ORVRJTkVUX0lGX0VUSEVSX0ggMCkKKyAgICBzZXQoSEFWRV9ORVRJTkVUX0lOX0ggMCkKKyAgICBzZXQoSEFWRV9ORVRfSUZfSCAwKQorICAgIHNldChIQVZFX1BST0NFU1NfSCAxKQorICAgIHNldChIQVZFX1BXRF9IIDApCisgICAgc2V0KEhBVkVfU0VUSk1QX0ggMSkKKyAgICBzZXQoSEFWRV9TR1RUWV9IIDApCisgICAgc2V0KEhBVkVfU0lHTkFMX0ggMSkKKyAgICBzZXQoSEFWRV9TT0NLSU9fSCAwKQorICAgIHNldChIQVZFX1NURElOVF9IIDApCisgICAgc2V0KEhBVkVfU1RETElCX0ggMSkKKyAgICBzZXQoSEFWRV9TVFJJTkdTX0ggMCkKKyAgICBzZXQoSEFWRV9TVFJJTkdfSCAxKQorICAgIHNldChIQVZFX1NZU19QQVJBTV9IIDApCisgICAgc2V0KEhBVkVfU1lTX1BPTExfSCAwKQorICAgIHNldChIQVZFX1NZU19TRUxFQ1RfSCAwKQorICAgIHNldChIQVZFX1NZU19TT0NLRVRfSCAwKQorICAgIHNldChIQVZFX1NZU19TT0NLSU9fSCAwKQorICAgIHNldChIQVZFX1NZU19TVEFUX0ggMSkKKyAgICBzZXQoSEFWRV9TWVNfVElNRV9IIDApCisgICAgc2V0KEhBVkVfU1lTX1RZUEVTX0ggMSkKKyAgICBzZXQoSEFWRV9TWVNfVVRJTUVfSCAxKQorICAgIHNldChIQVZFX1RFUk1JT1NfSCAwKQorICAgIHNldChIQVZFX1RFUk1JT19IIDApCisgICAgc2V0KEhBVkVfVElNRV9IIDEpCisgICAgc2V0KEhBVkVfVU5JU1REX0ggMCkKKyAgICBzZXQoSEFWRV9VVElNRV9IIDApCisgICAgc2V0KEhBVkVfWDUwOV9IIDApCisgICAgc2V0KEhBVkVfWkxJQl9IIDApCisKKyAgICBzZXQoSEFWRV9TSVpFT0ZfTE9OR19ET1VCTEUgMSkKKyAgICBzZXQoU0laRU9GX0xPTkdfRE9VQkxFIDgpCisKKyAgICBzZXQoSEFWRV9TT0NLRVQgMSkKKyAgICBzZXQoSEFWRV9QT0xMIDApCisgICAgc2V0KEhBVkVfU0VMRUNUIDEpCisgICAgc2V0KEhBVkVfU1RSRFVQIDEpCisgICAgc2V0KEhBVkVfU1RSU1RSIDEpCisgICAgc2V0KEhBVkVfU1RSVE9LX1IgMCkKKyAgICBzZXQoSEFWRV9TVFJGVElNRSAxKQorICAgIHNldChIQVZFX1VOQU1FIDApCisgICAgc2V0KEhBVkVfU1RSQ0FTRUNNUCAwKQorICAgIHNldChIQVZFX1NUUklDTVAgMSkKKyAgICBzZXQoSEFWRV9TVFJDTVBJIDEpCisgICAgc2V0KEhBVkVfR0VUSE9TVEJZQUREUiAxKQorICAgIHNldChIQVZFX0dFVFRJTUVPRkRBWSAwKQorICAgIHNldChIQVZFX0lORVRfQUREUiAxKQorICAgIHNldChIQVZFX0lORVRfTlRPQSAxKQorICAgIHNldChIQVZFX0lORVRfTlRPQV9SIDApCisgICAgc2V0KEhBVkVfVENHRVRBVFRSIDApCisgICAgc2V0KEhBVkVfVENTRVRBVFRSIDApCisgICAgc2V0KEhBVkVfUEVSUk9SIDEpCisgICAgc2V0KEhBVkVfQ0xPU0VTT0NLRVQgMSkKKyAgICBzZXQoSEFWRV9TRVRWQlVGIDApCisgICAgc2V0KEhBVkVfU0lHU0VUSk1QIDApCisgICAgc2V0KEhBVkVfR0VUUEFTU19SIDApCisgICAgc2V0KEhBVkVfU1RSTENBVCAwKQorICAgIHNldChIQVZFX0dFVFBXVUlEIDApCisgICAgc2V0KEhBVkVfR0VURVVJRCAwKQorICAgIHNldChIQVZFX1VUSU1FIDEpCisgICAgc2V0KEhBVkVfUkFORF9FR0QgMCkKKyAgICBzZXQoSEFWRV9SQU5EX1NDUkVFTiAwKQorICAgIHNldChIQVZFX1JBTkRfU1RBVFVTIDApCisgICAgc2V0KEhBVkVfR01USU1FX1IgMCkKKyAgICBzZXQoSEFWRV9MT0NBTFRJTUVfUiAwKQorICAgIHNldChIQVZFX0dFVEhPU1RCWUFERFJfUiAwKQorICAgIHNldChIQVZFX0dFVEhPU1RCWU5BTUVfUiAwKQorICAgIHNldChIQVZFX1NJR05BTF9GVU5DIDEpCisgICAgc2V0KEhBVkVfU0lHTkFMX01BQ1JPIDApCisKKyAgICBzZXQoSEFWRV9HRVRIT1NUQllBRERSX1JfNSAwKQorICAgIHNldChIQVZFX0dFVEhPU1RCWUFERFJfUl81X1JFRU5UUkFOVCAwKQorICAgIHNldChIQVZFX0dFVEhPU1RCWUFERFJfUl83IDApCisgICAgc2V0KEhBVkVfR0VUSE9TVEJZQUREUl9SXzdfUkVFTlRSQU5UIDApCisgICAgc2V0KEhBVkVfR0VUSE9TVEJZQUREUl9SXzggMCkKKyAgICBzZXQoSEFWRV9HRVRIT1NUQllBRERSX1JfOF9SRUVOVFJBTlQgMCkKKyAgICBzZXQoSEFWRV9HRVRIT1NUQllOQU1FX1JfMyAwKQorICAgIHNldChIQVZFX0dFVEhPU1RCWU5BTUVfUl8zX1JFRU5UUkFOVCAwKQorICAgIHNldChIQVZFX0dFVEhPU1RCWU5BTUVfUl81IDApCisgICAgc2V0KEhBVkVfR0VUSE9TVEJZTkFNRV9SXzVfUkVFTlRSQU5UIDApCisgICAgc2V0KEhBVkVfR0VUSE9TVEJZTkFNRV9SXzYgMCkKKyAgICBzZXQoSEFWRV9HRVRIT1NUQllOQU1FX1JfNl9SRUVOVFJBTlQgMCkKKworICAgIHNldChUSU1FX1dJVEhfU1lTX1RJTUUgMCkKKyAgICBzZXQoSEFWRV9PX05PTkJMT0NLIDApCisgICAgc2V0KEhBVkVfSU5fQUREUl9UIDApCisgICAgc2V0KEhBVkVfSU5FVF9OVE9BX1JfREVDTCAwKQorICAgIHNldChIQVZFX0lORVRfTlRPQV9SX0RFQ0xfUkVFTlRSQU5UIDApCisgICAgc2V0KEhBVkVfR0VUQUREUklORk8gMCkKKyAgICBzZXQoU1REQ19IRUFERVJTIDEpCisgICAgc2V0KFJFVFNJR1RZUEVfVEVTVCAxKQorCisgICAgc2V0KEhBVkVfU0lHQUNUSU9OIDApCisgICAgc2V0KEhBVkVfTUFDUk9fU0lHU0VUSk1QIDApCisgIGVsc2UoV0lOMzIpCisgICAgbWVzc2FnZSgiVGhpcyBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCBvbiBXaW5kb3dzIHBsYXRmb3JtIG9ubHkiKQorICBlbmRpZihXSU4zMikKK2VuZGlmKE5PVCBVTklYKQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9DTWFrZS9VdGlsaXRpZXMuY21ha2UgYi9jdXJsLTcuMjUuMC9DTWFrZS9VdGlsaXRpZXMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjZGZlMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL0NNYWtlL1V0aWxpdGllcy5jbWFrZQpAQCAtMCwwICsxLDMxIEBACisjIEZpbGUgY29udGFpbmluZyB2YXJpb3VzIHV0aWxpdGllcworCisjIENvbnZlcnRzIGEgQ01ha2UgbGlzdCB0byBhIHN0cmluZyBjb250YWluaW5nIGVsZW1lbnRzIHNlcGFyYXRlZCBieSBzcGFjZXMKK2Z1bmN0aW9uKFRPX0xJU1RfU1BBQ0VTIF9MSVNUX05BTUUgT1VUUFVUX1ZBUikKKyAgc2V0KE5FV19MSVNUX1NQQUNFKQorICBmb3JlYWNoKElURU0gJHske19MSVNUX05BTUV9fSkKKyAgICBzZXQoTkVXX0xJU1RfU1BBQ0UgIiR7TkVXX0xJU1RfU1BBQ0V9ICR7SVRFTX0iKQorICBlbmRmb3JlYWNoKCkKKyAgc3RyaW5nKFNUUklQICR7TkVXX0xJU1RfU1BBQ0V9IE5FV19MSVNUX1NQQUNFKQorICBzZXQoJHtPVVRQVVRfVkFSfSAiJHtORVdfTElTVF9TUEFDRX0iIFBBUkVOVF9TQ09QRSkKK2VuZGZ1bmN0aW9uKCkKKworIyBBcHBlbmRzIGEgbGlzIG9mIGl0ZW0gdG8gYSBzdHJpbmcgd2hpY2ggaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCwgaWYgdGhleSBkb24ndCBhbHJlYWR5IGV4aXN0LgorZnVuY3Rpb24oTElTVF9TUEFDRVNfQVBQRU5EX09OQ0UgTElTVF9OQU1FKQorICBzdHJpbmcoUkVQTEFDRSAiICIgIjsiIF9MSVNUICR7JHtMSVNUX05BTUV9fSkKKyAgbGlzdChBUFBFTkQgX0xJU1QgJHtBUkdOfSkKKyAgbGlzdChSRU1PVkVfRFVQTElDQVRFUyBfTElTVCkKKyAgdG9fbGlzdF9zcGFjZXMoX0xJU1QgTkVXX0xJU1RfU1BBQ0UpCisgIHNldCgke0xJU1RfTkFNRX0gIiR7TkVXX0xJU1RfU1BBQ0V9IiBQQVJFTlRfU0NPUEUpCitlbmRmdW5jdGlvbigpCisKKyMgQ29udmluaWVuY2UgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBzYW1lIGFzIExJU1QoRklORCAuLi4pIGJ1dCB3aXRoIGEgVFJVRS9GQUxTRSByZXR1cm4gdmFsdWUuCisjIEV4OiBJTl9TVFJfTElTVChNWV9MSVNUICJTZWFyY2hlZCBpdGVtIiBXQVNfRk9VTkQpCitmdW5jdGlvbihJTl9TVFJfTElTVCBMSVNUX05BTUUgSVRFTV9TRUFSQ0hFRCBSRVRWQUwpCisgIGxpc3QoRklORCAke0xJU1RfTkFNRX0gJHtJVEVNX1NFQVJDSEVEfSBGSU5EX1BPUykKKyAgaWYoJHtGSU5EX1BPU30gRVFVQUwgLTEpCisgICAgc2V0KCR7UkVUVkFMfSBGQUxTRSBQQVJFTlRfU0NPUEUpCisgIGVsc2UoKQorICAgIHNldCgke1JFVFZBTH0gVFJVRSBQQVJFTlRfU0NPUEUpCisgIGVuZGlmKCkKK2VuZGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL0NNYWtlTGlzdHMudHh0IGIvY3VybC03LjI1LjAvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkZDFlZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsODY1IEBACisjIGNVUkwvbGliY3VybCBDTWFrZSBzY3JpcHQKKyMgYnkgVGV0ZXRlc3QgYW5kIFN1a2VuZGVyIChCZW5vaXQgTmVpbCkKKworIyBUT0RPOgorIyBUaGUgb3V0cHV0IC5zbyBmaWxlIGxhY2tzIHRoZSBzb25hbWUgbnVtYmVyIHdoaWNoIHdlIGN1cnJlbnRseSBoYXZlIHdpdGhpbiB0aGUgbGliL01ha2VmaWxlLmFtIGZpbGUKKyMgQWRkIGZ1bGwgKDQgb3IgNSBsaWJzKSBTU0wgc3VwcG9ydAorIyBBZGQgSU5TVEFMTCB0YXJnZXQgKEVYVFJBX0RJU1QgdmFyaWFibGVzIGluIE1ha2VmaWxlLmFtIG1heSBiZSBtb3ZlZCB0byBNYWtlZmlsZS5pbmMgc28gdGhhdCBDTWFrZS9DUGFjayBpcyBhd2FyZSBvZiB3aGF0J3MgdG8gaW5jbHVkZSkuCisjIEFkZCBDVGVzdHMoPykKKyMgQ2hlY2sgb24gYWxsIHBvc3NpYmxlIHBsYXRmb3JtcworIyBUZXN0IHdpdGggYXMgbWFueSBjb25maWd1cmF0aW9ucyBwb3NzaWJsZSAoV2l0aCBvciB3aXRob3V0IGFueSBvcHRpb24pCisjIENyZWF0ZSBzY3JpcHRzIHRoYXQgaGVscCBrZWVwaW5nIHRoZSBDTWFrZSBidWlsZCBzeXN0ZW0gdXAgdG8gZGF0ZSAodG8gcmVkdWNlIG1haW50ZW5hbmNlKS4gQWNjb3JkaW5nIHRvIFRldGV0ZXN0OgorIyAgLSBsaXN0cyBvZiBoZWFkZXJzIHRoYXQgJ2NvbmZpZ3VyZScgY2hlY2tzIGZvcjsKKyMgIC0gY3VybC1zcGVjaWZpYyB0ZXN0cyAodGhlIG9uZXMgdGhhdCBhcmUgaW4gbTQvY3VybC0qLm00IGZpbGVzKTsKKyMgIC0gKG1vc3Qgb2J2aW91cyB0aGluZzopIGN1cmwgdmVyc2lvbiBudW1iZXJzLgorIyBBZGQgZG9jdW1lbnRhdGlvbiBzdWJwcm9qZWN0CisjCisjIFRvIGNoZWNrOgorIyAoRnJvbSBEYW5pZWwgU3RlbmJlcmcpIFRoZSBjbWFrZSBidWlsZCBzZWxlY3RlZCB0byBydW4gZ2NjIHdpdGggLWZQSUMgb24gbXkgYm94IHdoaWxlIHRoZSBwbGFpbiBjb25maWd1cmUgc2NyaXB0IGRpZCBub3QuCisjIChGcm9tIERhbmllbCBTdGVuYmVyZykgVGhlIGdjYyBjb21tYW5kIGxpbmUgdXNlIG5laXRoZXIgLWcgbm9yIGFueSAtTyBvcHRpb25zLiBBcyBhIGRldmVsb3BlciwgSSBhbHNvIHRyZWFzdXJlIG91ciBjb25maWd1cmUgc2NyaXB0cydzIC0tZW5hYmxlLWRlYnVnIG9wdGlvbiB0aGF0IHNldHMgYSBsb25nIHJhbmdlIG9mICJwaWNreSIgY29tcGlsZXIgb3B0aW9ucy4KK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjYuMiBGQVRBTF9FUlJPUikKK3NldChDTUFLRV9NT0RVTEVfUEFUSCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NNYWtlOyR7Q01BS0VfTU9EVUxFX1BBVEh9IikKK2luY2x1ZGUoVXRpbGl0aWVzKQorCitwcm9qZWN0KCBDVVJMIEMgKQorCitmaWxlIChSRUFEICR7Q1VSTF9TT1VSQ0VfRElSfS9pbmNsdWRlL2N1cmwvY3VybHZlci5oIENVUkxfVkVSU0lPTl9IX0NPTlRFTlRTKQorc3RyaW5nIChSRUdFWCBNQVRDSCAiTElCQ1VSTF9WRVJTSU9OX01BSk9SWyBcdF0rKFswLTldKykiCisgIExJQkNVUkxfVkVSU0lPTl9NSiAke0NVUkxfVkVSU0lPTl9IX0NPTlRFTlRTfSkKK3N0cmluZyAoUkVHRVggTUFUQ0ggIihbMC05XSspIgorICBMSUJDVVJMX1ZFUlNJT05fTUogJHtMSUJDVVJMX1ZFUlNJT05fTUp9KQorc3RyaW5nIChSRUdFWCBNQVRDSAorICAiTElCQ1VSTF9WRVJTSU9OX01JTk9SWyBcdF0rKFswLTldKykiCisgIExJQkNVUkxfVkVSU0lPTl9NSSAke0NVUkxfVkVSU0lPTl9IX0NPTlRFTlRTfSkKK3N0cmluZyAoUkVHRVggTUFUQ0ggIihbMC05XSspIiBMSUJDVVJMX1ZFUlNJT05fTUkgJHtMSUJDVVJMX1ZFUlNJT05fTUl9KQorc3RyaW5nIChSRUdFWCBNQVRDSAorICAiTElCQ1VSTF9WRVJTSU9OX1BBVENIWyBcdF0rKFswLTldKykiCisgIExJQkNVUkxfVkVSU0lPTl9QVCAke0NVUkxfVkVSU0lPTl9IX0NPTlRFTlRTfSkKK3N0cmluZyAoUkVHRVggTUFUQ0ggIihbMC05XSspIiBMSUJDVVJMX1ZFUlNJT05fUFQgJHtMSUJDVVJMX1ZFUlNJT05fUFR9KQorc2V0IChDVVJMX01BSk9SX1ZFUlNJT04gJHtMSUJDVVJMX1ZFUlNJT05fTUp9KQorc2V0IChDVVJMX01JTk9SX1ZFUlNJT04gJHtMSUJDVVJMX1ZFUlNJT05fTUl9KQorc2V0IChDVVJMX1BBVENIX1ZFUlNJT04gJHtMSUJDVVJMX1ZFUlNJT05fUFR9KQorCitpbmNsdWRlX3JlZ3VsYXJfZXhwcmVzc2lvbigiXi4qJCIpICAgICMgU3VrZW5kZXI6IElzIGl0IG5lY2Vzc2FyeT8KKworIyBTZXR1cCBwYWNrYWdlIG1ldGEtZGF0YQorIyBTRVQoUEFDS0FHRSAiY3VybCIpCitzZXQoQ1VSTF9WRVJTSU9OICR7Q1VSTF9NQUpPUl9WRVJTSU9OfS4ke0NVUkxfTUlOT1JfVkVSU0lPTn0uJHtDVVJMX1BBVENIX1ZFUlNJT059KQorbWVzc2FnZShTVEFUVVMgImN1cmwgdmVyc2lvbj1bJHtDVVJMX1ZFUlNJT059XSIpCisjIFNFVChQQUNLQUdFX1RBUk5BTUUgImN1cmwiKQorIyBTRVQoUEFDS0FHRV9OQU1FICJjdXJsIikKKyMgU0VUKFBBQ0tBR0VfVkVSU0lPTiAiLSIpCisjIFNFVChQQUNLQUdFX1NUUklORyAiY3VybC0iKQorIyBTRVQoUEFDS0FHRV9CVUdSRVBPUlQgImEgc3VpdGFibGUgY3VybCBtYWlsaW5nIGxpc3QgPT4gaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsLyIpCitzZXQoT1BFUkFUSU5HX1NZU1RFTSAiJHtDTUFLRV9TWVNURU1fTkFNRX0iKQorc2V0KE9TICJcIiR7Q01BS0VfU1lTVEVNX05BTUV9XCIiKQorCitpbmNsdWRlX2RpcmVjdG9yaWVzKCR7UFJPSkVDVF9CSU5BUllfRElSfS9pbmNsdWRlL2N1cmwpCitpbmNsdWRlX2RpcmVjdG9yaWVzKCAke0NVUkxfU09VUkNFX0RJUn0vaW5jbHVkZSApCisKK2lmKFdJTjMyKQorICBzZXQoTkFUSVZFX1dJTkRPV1MgT04pCitlbmRpZigpCisKK29wdGlvbihCVUlMRF9DVVJMX0VYRSAiU2V0IHRvIE9OIHRvIGJ1aWxkIGNVUkwgZXhlY3V0YWJsZS4iIE9OKQorb3B0aW9uKEJVSUxEX0NVUkxfVEVTVFMgIlNldCB0byBPTiB0byBidWlsZCBjVVJMIHRlc3RzLiIgT04pCitvcHRpb24oQ1VSTF9TVEFUSUNMSUIgIlNldCB0byBPTiB0byBidWlsZCBsaWJjdXJsIHdpdGggc3RhdGljIGxpbmtpbmcuIiBPRkYpCitvcHRpb24oQ1VSTF9VU0VfQVJFUyAiU2V0IHRvIE9OIHRvIGVuYWJsZSBjLWFyZXMgc3VwcG9ydCIgT0ZGKQorIyBpbml0aWFsaXplIENVUkxfTElCUworc2V0KENVUkxfTElCUyAiIikKKworaWYoQ1VSTF9VU0VfQVJFUykKKyAgc2V0KFVTRV9BUkVTICR7Q1VSTF9VU0VfQVJFU30pCisgIGZpbmRfcGFja2FnZShDQVJFUyBSRVFVSVJFRCkKKyAgbGlzdChBUFBFTkQgQ1VSTF9MSUJTICR7Q0FSRVNfTElCUkFSWX0gKQorICBzZXQoQ1VSTF9MSUJTICR7Q1VSTF9MSUJTfSAke0NBUkVTX0xJQlJBUll9KQorZW5kaWYoKQorCitvcHRpb24oQlVJTERfREFTSEJPQVJEX1JFUE9SVFMgIlNldCB0byBPTiB0byBhY3RpdmF0ZSByZXBvcnRpbmcgb2YgY1VSTCBidWlsZHMgaGVyZSBodHRwOi8vd3d3LmNkYXNoLm9yZy9DRGFzaFB1YmxpYy9pbmRleC5waHA/cHJvamVjdD1DVVJMIiBPRkYpCitpZihCVUlMRF9EQVNIQk9BUkRfUkVQT1JUUykKKyAgI0lOQ0xVREUoRGFydCkKKyAgaW5jbHVkZShDVGVzdCkKK2VuZGlmKEJVSUxEX0RBU0hCT0FSRF9SRVBPUlRTKQorCitpZihNU1ZDKQorICBvcHRpb24oQlVJTERfUkVMRUFTRV9ERUJVR19ESVJTICJTZXQgT0ZGIHRvIGJ1aWxkIGVhY2ggY29uZmlndXJhdGlvbiB0byBhIHNlcGFyYXRlIGRpcmVjdG9yeSIgT0ZGKQorICBtYXJrX2FzX2FkdmFuY2VkKEJVSUxEX1JFTEVBU0VfREVCVUdfRElSUykKK2VuZGlmKCkKKworb3B0aW9uKENVUkxfSElEREVOX1NZTUJPTFMgIlNldCB0byBPTiB0byBoaWRlIGxpYmN1cmwgaW50ZXJuYWwgc3ltYm9scyAoPWhpZGUgYWxsIHN5bWJvbHMgdGhhdCBhcmVuJ3Qgb2ZmaWNpYWxseSBleHRlcm5hbCkuIiBPTikKK21hcmtfYXNfYWR2YW5jZWQoQ1VSTF9ISURERU5fU1lNQk9MUykKKworIyBJRihXSU4zMikKKyMgT1BUSU9OKENVUkxfV0lORE9XU19TU1BJICJVc2Ugd2luZG93cyBsaWJyYXJpZXMgdG8gYWxsb3cgTlRMTSBhdXRoZW50aWNhdGlvbiB3aXRob3V0IG9wZW5zc2wiIE9OKQorIyBNQVJLX0FTX0FEVkFOQ0VEKENVUkxfV0lORE9XU19TU1BJKQorIyBFTkRJRigpCisKK29wdGlvbihIVFRQX09OTFkgImRpc2FibGVzIGFsbCBwcm90b2NvbHMgZXhjZXB0IEhUVFAgKFRoaXMgb3ZlcnJpZGVzIGFsbCBDVVJMX0RJU0FCTEVfKiBvcHRpb25zKSIgT0ZGKQorbWFya19hc19hZHZhbmNlZChIVFRQX09OTFkpCitvcHRpb24oQ1VSTF9ESVNBQkxFX0ZUUCAiZGlzYWJsZXMgRlRQIiBPRkYpCittYXJrX2FzX2FkdmFuY2VkKENVUkxfRElTQUJMRV9GVFApCitvcHRpb24oQ1VSTF9ESVNBQkxFX0xEQVAgImRpc2FibGVzIExEQVAiIE9GRikKK21hcmtfYXNfYWR2YW5jZWQoQ1VSTF9ESVNBQkxFX0xEQVApCitvcHRpb24oQ1VSTF9ESVNBQkxFX1RFTE5FVCAiZGlzYWJsZXMgVGVsbmV0IiBPRkYpCittYXJrX2FzX2FkdmFuY2VkKENVUkxfRElTQUJMRV9URUxORVQpCitvcHRpb24oQ1VSTF9ESVNBQkxFX0RJQ1QgImRpc2FibGVzIERJQ1QiIE9GRikKK21hcmtfYXNfYWR2YW5jZWQoQ1VSTF9ESVNBQkxFX0RJQ1QpCitvcHRpb24oQ1VSTF9ESVNBQkxFX0ZJTEUgImRpc2FibGVzIEZJTEUiIE9GRikKK21hcmtfYXNfYWR2YW5jZWQoQ1VSTF9ESVNBQkxFX0ZJTEUpCitvcHRpb24oQ1VSTF9ESVNBQkxFX1RGVFAgImRpc2FibGVzIFRGVFAiIE9GRikKK21hcmtfYXNfYWR2YW5jZWQoQ1VSTF9ESVNBQkxFX1RGVFApCitvcHRpb24oQ1VSTF9ESVNBQkxFX0hUVFAgImRpc2FibGVzIEhUVFAiIE9GRikKK21hcmtfYXNfYWR2YW5jZWQoQ1VSTF9ESVNBQkxFX0hUVFApCisKK29wdGlvbihDVVJMX0RJU0FCTEVfTERBUFMgInRvIGRpc2FibGUgTERBUFMiIE9GRikKK21hcmtfYXNfYWR2YW5jZWQoQ1VSTF9ESVNBQkxFX0xEQVBTKQoraWYoV0lOMzIpCisgIHNldChDVVJMX0RFRkFVTFRfRElTQUJMRV9MREFQIE9GRikKKyAgIyBzb21lIHdpbmRvd3MgY29tcGlsZXJzIGRvIG5vdCBoYXZlIHdsZGFwMzIKKyAgaWYoIE5PVCBIQVZFX1dMREFQMzIpCisgICAgc2V0KENVUkxfRElTQUJMRV9MREFQIE9OIENBQ0hFIEJPT0wgIiIgRk9SQ0UpCisgICAgbWVzc2FnZShTVEFUVVMgIndsZGFwMzIgbm90IGZvdW5kIENVUkxfRElTQUJMRV9MREFQIHNldCBPTiIpCisgICAgb3B0aW9uKENVUkxfTERBUF9XSU4gIlVzZSBXaW5kb3dzIExEQVAgaW1wbGVtZW50YXRpb24iIE9GRikKKyAgZWxzZSgpCisgICAgb3B0aW9uKENVUkxfTERBUF9XSU4gIlVzZSBXaW5kb3dzIExEQVAgaW1wbGVtZW50YXRpb24iIE9OKQorICBlbmRpZigpCisgIG1hcmtfYXNfYWR2YW5jZWQoQ1VSTF9MREFQX1dJTikKK2VuZGlmKCkKKworaWYoSFRUUF9PTkxZKQorICBzZXQoQ1VSTF9ESVNBQkxFX0ZUUCBPTikKKyAgc2V0KENVUkxfRElTQUJMRV9MREFQIE9OKQorICBzZXQoQ1VSTF9ESVNBQkxFX1RFTE5FVCBPTikKKyAgc2V0KENVUkxfRElTQUJMRV9ESUNUIE9OKQorICBzZXQoQ1VSTF9ESVNBQkxFX0ZJTEUgT04pCisgIHNldChDVVJMX0RJU0FCTEVfVEZUUCBPTikKK2VuZGlmKCkKKworb3B0aW9uKENVUkxfRElTQUJMRV9DT09LSUVTICJ0byBkaXNhYmxlIGNvb2tpZXMgc3VwcG9ydCIgT0ZGKQorbWFya19hc19hZHZhbmNlZChDVVJMX0RJU0FCTEVfQ09PS0lFUykKKworb3B0aW9uKENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCAidG8gZGlzYWJsZSBjcnlwdG9ncmFwaGljIGF1dGhlbnRpY2F0aW9uIiBPRkYpCittYXJrX2FzX2FkdmFuY2VkKENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCkKK29wdGlvbihDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTICJ0byBkaXNhYmxlIHZlcmJvc2Ugc3RyaW5ncyIgT0ZGKQorbWFya19hc19hZHZhbmNlZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorb3B0aW9uKERJU0FCTEVEX1RIUkVBRFNBRkUgIlNldCB0byBleHBsaWNpdGx5IHNwZWNpZnkgd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhyZWFkLXNhZmUgZnVuY3Rpb25zIiBPRkYpCittYXJrX2FzX2FkdmFuY2VkKERJU0FCTEVEX1RIUkVBRFNBRkUpCitvcHRpb24oRU5BQkxFX0lQVjYgIkRlZmluZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgSVB2NiBzdXBwb3J0IiBPRkYpCittYXJrX2FzX2FkdmFuY2VkKEVOQUJMRV9JUFY2KQorCitpZihXSU4zMikKKyAgIyBXaW5kb3dzIHN0YW5kYXJkIGxpYnJhcmllcyBhcmUgbG9jYXRlZCBpbiBDOi9Qcm9ncmFtIEZpbGVzL01pY3Jvc29mdCBTREtzL1suLi5dCisgICMgVGhleSBhcmUgYWxyZWFkeSBpbmNsdWRlZCBpbiB0aGUgZGVmYXVsdCBNU1ZDIExJQlBBVEggPT4gbm8gZmluZF9saWJyYXJ5IGlzIG5lZWRlZCEKKyAgbGlzdF9zcGFjZXNfYXBwZW5kX29uY2UoQ01BS0VfQ19TVEFOREFSRF9MSUJSQVJJRVMgd3NvY2szMi5saWIgd3MyXzMyLmxpYikgICMgYnVmZmVyb3ZlcmZsb3d1LmxpYgorICBpZihDVVJMX0RJU0FCTEVfTERBUCkKKyAgICAjIFJlbW92ZSB3bGRhcDMyLmxpYiBmcm9tIHNwYWNlLXNlcGFyYXRlZCBsaXN0CisgICAgc3RyaW5nKFJFUExBQ0UgIiAiICI7IiBfTElTVCAke0NNQUtFX0NfU1RBTkRBUkRfTElCUkFSSUVTfSkKKyAgICBsaXN0KFJFTU9WRV9JVEVNIF9MSVNUICJ3bGRhcDMyLmxpYiIpCisgICAgdG9fbGlzdF9zcGFjZXMoX0xJU1QgQ01BS0VfQ19TVEFOREFSRF9MSUJSQVJJRVMpCisgIGVsc2UoKQorICAgICMgQXBwZW5kIHdsZGFwMzIubGliCisgICAgbGlzdF9zcGFjZXNfYXBwZW5kX29uY2UoQ01BS0VfQ19TVEFOREFSRF9MSUJSQVJJRVMgd2xkYXAzMi5saWIpCisgIGVuZGlmKCkKKyAgc2V0KENNQUtFX0NfU1RBTkRBUkRfTElCUkFSSUVTICIke0NNQUtFX0NfU1RBTkRBUkRfTElCUkFSSUVTfSIgICBDQUNIRSBTVFJJTkcgIiIgRk9SQ0UpCitlbmRpZigpCisKKworIyBXZSBuZWVkIGFuc2kgYy1mbGFncywgZXNwZWNpYWxseSBvbiBIUAorc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQU5TSV9DRkxBR1N9ICR7Q01BS0VfQ19GTEFHU30iKQorc2V0KENNQUtFX1JFUVVJUkVEX0ZMQUdTICR7Q01BS0VfQU5TSV9DRkxBR1N9KQorCisjIERpc2FibGUgd2FybmluZ3Mgb24gQm9ybGFuZCB0byBhdm9pZCBjaGFuZ2luZyAzcmQgcGFydHkgY29kZS4KK2lmKEJPUkxBTkQpCisgIHNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC13LSIpCitlbmRpZihCT1JMQU5EKQorCisjIElmIHdlIGFyZSBvbiBBSVgsIGRvIHRoZSBfQUxMX1NPVVJDRSBtYWdpYworaWYoJHtDTUFLRV9TWVNURU1fTkFNRX0gTUFUQ0hFUyBBSVgpCisgIHNldChfQUxMX1NPVVJDRSAxKQorZW5kaWYoJHtDTUFLRV9TWVNURU1fTkFNRX0gTUFUQ0hFUyBBSVgpCisKKyMgSW5jbHVkZSBhbGwgdGhlIG5lY2Vzc2FyeSBmaWxlcyBmb3IgbWFjcm9zCitpbmNsdWRlIChDaGVja0Z1bmN0aW9uRXhpc3RzKQoraW5jbHVkZSAoQ2hlY2tJbmNsdWRlRmlsZSkKK2luY2x1ZGUgKENoZWNrSW5jbHVkZUZpbGVzKQoraW5jbHVkZSAoQ2hlY2tMaWJyYXJ5RXhpc3RzKQoraW5jbHVkZSAoQ2hlY2tTeW1ib2xFeGlzdHMpCitpbmNsdWRlIChDaGVja1R5cGVTaXplKQorCisjIE9uIHdpbmRvd3MgcHJlbG9hZCBzZXR0aW5ncworaWYoV0lOMzIpCisgIGluY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NNYWtlL1BsYXRmb3Jtcy9XaW5kb3dzQ2FjaGUuY21ha2UpCitlbmRpZihXSU4zMikKKworIyBUaGlzIG1hY3JvIGNoZWNrcyBpZiB0aGUgc3ltYm9sIGV4aXN0cyBpbiB0aGUgbGlicmFyeSBhbmQgaWYgaXQKKyMgZG9lcywgaXQgcHJlcGVuZHMgbGlicmFyeSB0byB0aGUgbGlzdC4KK21hY3JvKENIRUNLX0xJQlJBUllfRVhJU1RTX0NPTkNBVCBMSUJSQVJZIFNZTUJPTCBWQVJJQUJMRSkKKyAgY2hlY2tfbGlicmFyeV9leGlzdHMoIiR7TElCUkFSWX07JHtDVVJMX0xJQlN9IiAke1NZTUJPTH0gIiR7Q01BS0VfTElCUkFSWV9QQVRIfSIKKyAgICAke1ZBUklBQkxFfSkKKyAgaWYoJHtWQVJJQUJMRX0pCisgICAgc2V0KENVUkxfTElCUyAke0xJQlJBUll9ICR7Q1VSTF9MSUJTfSkKKyAgZW5kaWYoJHtWQVJJQUJMRX0pCitlbmRtYWNybyhDSEVDS19MSUJSQVJZX0VYSVNUU19DT05DQVQpCisKKyMgQ2hlY2sgZm9yIGFsbCBuZWVkZWQgbGlicmFyaWVzCitjaGVja19saWJyYXJ5X2V4aXN0c19jb25jYXQoImRsIiAgICAgZGxvcGVuICAgICAgIEhBVkVfTElCREwpCitjaGVja19saWJyYXJ5X2V4aXN0c19jb25jYXQoInNvY2tldCIgY29ubmVjdCAgICAgIEhBVkVfTElCU09DS0VUKQorY2hlY2tfbGlicmFyeV9leGlzdHMoImMiIGdldGhvc3RieW5hbWUgIiIgTk9UX05FRURfTElCTlNMKQorCisjIFllbGxvd3RhYiBaZXRhIG5lZWRzIGRpZmZlcmVudCBsaWJyYXJpZXMgdGhhbiBCZU9TIDUuCitpZihCRU9TKQorICBzZXQoTk9UX05FRURfTElCTlNMIDEpCisgIGNoZWNrX2xpYnJhcnlfZXhpc3RzX2NvbmNhdCgiYmluZCIgZ2V0aG9zdGJ5bmFtZSBIQVZFX0xJQkJJTkQpCisgIGNoZWNrX2xpYnJhcnlfZXhpc3RzX2NvbmNhdCgiYm5ldGFwaSIgY2xvc2Vzb2NrZXQgSEFWRV9MSUJCTkVUQVBJKQorZW5kaWYoQkVPUykKKworaWYoTk9UIE5PVF9ORUVEX0xJQk5TTCkKKyAgY2hlY2tfbGlicmFyeV9leGlzdHNfY29uY2F0KCJuc2wiICAgIGdldGhvc3RieW5hbWUgIEhBVkVfTElCTlNMKQorZW5kaWYoTk9UIE5PVF9ORUVEX0xJQk5TTCkKKworY2hlY2tfbGlicmFyeV9leGlzdHNfY29uY2F0KCJ3czJfMzIiIGdldGNoICAgICAgICBIQVZFX0xJQldTMl8zMikKK2NoZWNrX2xpYnJhcnlfZXhpc3RzX2NvbmNhdCgid2lubW0iICBnZXRjaCAgICAgICAgSEFWRV9MSUJXSU5NTSkKK2NoZWNrX2xpYnJhcnlfZXhpc3RzKCJ3bGRhcDMyIiBjbGRhcF9vcGVuICIiIEhBVkVfV0xEQVAzMikKKworIyBJRihOT1QgQ1VSTF9TUEVDSUFMX0xJQlopCisjICBDSEVDS19MSUJSQVJZX0VYSVNUU19DT05DQVQoInoiICAgICAgaW5mbGF0ZUVuZCAgIEhBVkVfTElCWikKKyMgRU5ESUYoTk9UIENVUkxfU1BFQ0lBTF9MSUJaKQorCisjIENoZWNrIGZvciBpZG4KK2NoZWNrX2xpYnJhcnlfZXhpc3RzX2NvbmNhdCgiaWRuIiBpZG5hX3RvX2FzY2lpX2x6IEhBVkVfTElCSUROKQorCisjIENoZWNrIGZvciBMREFQCitjaGVja19saWJyYXJ5X2V4aXN0c19jb25jYXQoImxkYXAiIGxkYXBfaW5pdCBIQVZFX0xJQkxEQVApCisjIGlmKE5PVCBIQVZFX0xJQkxEQVApCisjIFNFVChDVVJMX0RJU0FCTEVfTERBUCBPTikKKyMgZW5kaWYoTk9UIEhBVkVfTElCTERBUCkKKworIyBDaGVjayBmb3Igc3ltYm9sIGRsb3BlbiAoc2FtZSBhcyBIQVZFX0xJQkRMKQorY2hlY2tfbGlicmFyeV9leGlzdHMoIiR7Q1VSTF9MSUJTfSIgZGxvcGVuICIiIEhBVkVfRExPUEVOKQorCisjIEZvciBvdGhlciB0ZXN0cyB0byB1c2UgdGhlIHNhbWUgbGlicmFyaWVzCitzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICR7Q1VSTF9MSUJTfSkKKworb3B0aW9uKENVUkxfWkxJQiAiU2V0IHRvIE9OIHRvIGVuYWJsZSBidWlsZGluZyBjVVJMIHdpdGggemxpYiBzdXBwb3J0LiIgT04pCitzZXQoSEFWRV9MSUJaIE9GRikKK3NldChIQVZFX1pMSUJfSCBPRkYpCitzZXQoSEFWRV9aTElCIE9GRikKK2lmKENVUkxfWkxJQikgICMgQU5EIENVUkxfQ09ORklHX0hBU19CRUVOX1JVTl9CRUZPUkUKKyAgZmluZF9wYWNrYWdlKFpMSUIgUVVJRVQpCisgIGlmKFpMSUJfRk9VTkQpCisgICAgc2V0KEhBVkVfWkxJQl9IIE9OKQorICAgIHNldChIQVZFX1pMSUIgT04pCisgICAgc2V0KEhBVkVfTElCWiBPTikKKyAgZW5kaWYoKQorZW5kaWYoKQorCitvcHRpb24oQ01BS0VfVVNFX09QRU5TU0wgIlVzZSBPcGVuU1NMIGNvZGUuIEV4cGVyaW1lbnRhbCIgT04pCittYXJrX2FzX2FkdmFuY2VkKENNQUtFX1VTRV9PUEVOU1NMKQoraWYoQ01BS0VfVVNFX09QRU5TU0wpCisgIGlmKFdJTjMyKQorICAgIGZpbmRfcGFja2FnZShPcGVuU1NMKQorICAgIGlmKE9QRU5TU0xfRk9VTkQpCisgICAgICBzZXQoVVNFX1NTTEVBWSBUUlVFKQorICAgICAgc2V0KFVTRV9PUEVOU1NMIFRSVUUpCisgICAgICBsaXN0KEFQUEVORCBDVVJMX0xJQlMgJHtPUEVOU1NMX0xJQlJBUklFU30gKQorICAgIGVsc2UoKQorICAgICAgc2V0KENNQUtFX1VTRV9PUEVOU1NMIEZBTFNFKQorICAgICAgbWVzc2FnZShTVEFUVVMgIk9wZW5TU0wgTk9UIEZvdW5kLCBkaXNhYmxpbmcgQ01BS0VfVVNFX09QRU5TU0wiKQorICAgIGVuZGlmKCkKKyAgZWxzZShXSU4zMikKKyAgICBjaGVja19saWJyYXJ5X2V4aXN0c19jb25jYXQoImNyeXB0byIgQ1JZUFRPX2xvY2sgIEhBVkVfTElCQ1JZUFRPKQorICAgIGNoZWNrX2xpYnJhcnlfZXhpc3RzX2NvbmNhdCgic3NsIiAgICBTU0xfY29ubmVjdCAgSEFWRV9MSUJTU0wpCisgIGVuZGlmKFdJTjMyKQorZW5kaWYoQ01BS0VfVVNFX09QRU5TU0wpCisKKyMgSWYgd2UgaGF2ZSBmZWF0dXJlcy5oLCB0aGVuIGRvIHRoZSBfQlNEX1NPVVJDRSBtYWdpYworY2hlY2tfaW5jbHVkZV9maWxlKCJmZWF0dXJlcy5oIiAgICAgICBIQVZFX0ZFQVRVUkVTX0gpCisKKyMgQ2hlY2sgaWYgaGVhZGVyIGZpbGUgZXhpc3RzIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3QuCittYWNybyhDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUIEZJTEUgVkFSSUFCTEUpCisgIGNoZWNrX2luY2x1ZGVfZmlsZXMoIiR7Q1VSTF9JTkNMVURFU307JHtGSUxFfSIgJHtWQVJJQUJMRX0pCisgIGlmKCR7VkFSSUFCTEV9KQorICAgIHNldChDVVJMX0lOQ0xVREVTICR7Q1VSTF9JTkNMVURFU30gJHtGSUxFfSkKKyAgICBzZXQoQ1VSTF9URVNUX0RFRklORVMgIiR7Q1VSTF9URVNUX0RFRklORVN9IC1EJHtWQVJJQUJMRX0iKQorICBlbmRpZigke1ZBUklBQkxFfSkKK2VuZG1hY3JvKENIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQpCisKKworIyBDaGVjayBmb3IgaGVhZGVyIGZpbGVzCitpZihOT1QgVU5JWCkKKyAgY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgid3MydGNwaXAuaCIgICAgIEhBVkVfV1MyVENQSVBfSCkKKyAgY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgid2luc29jazIuaCIgICAgIEhBVkVfV0lOU09DSzJfSCkKK2VuZGlmKE5PVCBVTklYKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgic3RkaW8uaCIgICAgICAgICAgSEFWRV9TVERJT19IKQoraWYoTk9UIFVOSVgpCisgIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIndpbmRvd3MuaCIgICAgICBIQVZFX1dJTkRPV1NfSCkKKyAgY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgid2luc29jay5oIiAgICAgIEhBVkVfV0lOU09DS19IKQorZW5kaWYoTk9UIFVOSVgpCisKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImludHR5cGVzLmgiICAgICAgIEhBVkVfSU5UVFlQRVNfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInN5cy9maWxpby5oIiAgICAgIEhBVkVfU1lTX0ZJTElPX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzeXMvaW9jdGwuaCIgICAgICBIQVZFX1NZU19JT0NUTF9IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgic3lzL3BhcmFtLmgiICAgICAgSEFWRV9TWVNfUEFSQU1fSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInN5cy9wb2xsLmgiICAgICAgIEhBVkVfU1lTX1BPTExfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInN5cy9yZXNvdXJjZS5oIiAgIEhBVkVfU1lTX1JFU09VUkNFX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzeXMvc2VsZWN0LmgiICAgICBIQVZFX1NZU19TRUxFQ1RfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInN5cy9zb2NrZXQuaCIgICAgIEhBVkVfU1lTX1NPQ0tFVF9IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgic3lzL3NvY2tpby5oIiAgICAgSEFWRV9TWVNfU09DS0lPX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzeXMvc3RhdC5oIiAgICAgICBIQVZFX1NZU19TVEFUX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzeXMvdGltZS5oIiAgICAgICBIQVZFX1NZU19USU1FX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzeXMvdHlwZXMuaCIgICAgICBIQVZFX1NZU19UWVBFU19IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgic3lzL3Vpby5oIiAgICAgICAgSEFWRV9TWVNfVUlPX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzeXMvdW4uaCIgICAgICAgICBIQVZFX1NZU19VTl9IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgic3lzL3V0aW1lLmgiICAgICAgSEFWRV9TWVNfVVRJTUVfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImFsbG9jYS5oIiAgICAgICAgIEhBVkVfQUxMT0NBX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJhcnBhL2luZXQuaCIgICAgICBIQVZFX0FSUEFfSU5FVF9IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgiYXJwYS90ZnRwLmgiICAgICAgSEFWRV9BUlBBX1RGVFBfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImFzc2VydC5oIiAgICAgICAgIEhBVkVfQVNTRVJUX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJjcnlwdG8uaCIgICAgICAgICBIQVZFX0NSWVBUT19IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgiZGVzLmgiICAgICAgICAgICAgSEFWRV9ERVNfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImVyci5oIiAgICAgICAgICAgIEhBVkVfRVJSX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJlcnJuby5oIiAgICAgICAgICBIQVZFX0VSUk5PX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJmY250bC5oIiAgICAgICAgICBIQVZFX0ZDTlRMX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJnc3NhcGkvZ3NzYXBpLmgiICBIQVZFX0dTU0FQSV9HU1NBUElfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oIiBIQVZFX0dTU0FQSV9HU1NBUElfR0VORVJJQ19IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgiZ3NzYXBpL2dzc2FwaV9rcmI1LmgiIEhBVkVfR1NTQVBJX0dTU0FQSV9LUkI1X0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJpZG4tZnJlZS5oIiAgICAgICBIQVZFX0lETl9GUkVFX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJpZmFkZHJzLmgiICAgICAgICBIQVZFX0lGQUREUlNfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImlvLmgiICAgICAgICAgICAgIEhBVkVfSU9fSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImtyYi5oIiAgICAgICAgICAgIEhBVkVfS1JCX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJsaWJnZW4uaCIgICAgICAgICBIQVZFX0xJQkdFTl9IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgibGlic3NoMi5oIiAgICAgICAgSEFWRV9MSUJTU0gyX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJsaW1pdHMuaCIgICAgICAgICBIQVZFX0xJTUlUU19IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgibG9jYWxlLmgiICAgICAgICAgSEFWRV9MT0NBTEVfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIm5ldC9pZi5oIiAgICAgICAgIEhBVkVfTkVUX0lGX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJuZXRkYi5oIiAgICAgICAgICBIQVZFX05FVERCX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJuZXRpbmV0L2luLmgiICAgICBIQVZFX05FVElORVRfSU5fSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIm5ldGluZXQvdGNwLmgiICAgIEhBVkVfTkVUSU5FVF9UQ1BfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIm9wZW5zc2wvY3J5cHRvLmgiIEhBVkVfT1BFTlNTTF9DUllQVE9fSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIm9wZW5zc2wvZW5naW5lLmgiIEhBVkVfT1BFTlNTTF9FTkdJTkVfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIm9wZW5zc2wvZXJyLmgiICAgIEhBVkVfT1BFTlNTTF9FUlJfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIm9wZW5zc2wvcGVtLmgiICAgIEhBVkVfT1BFTlNTTF9QRU1fSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIm9wZW5zc2wvcGtjczEyLmgiIEhBVkVfT1BFTlNTTF9QS0NTMTJfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIm9wZW5zc2wvcnNhLmgiICAgIEhBVkVfT1BFTlNTTF9SU0FfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIm9wZW5zc2wvc3NsLmgiICAgIEhBVkVfT1BFTlNTTF9TU0xfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIm9wZW5zc2wveDUwOS5oIiAgIEhBVkVfT1BFTlNTTF9YNTA5X0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJwZW0uaCIgICAgICAgICAgICBIQVZFX1BFTV9IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgicG9sbC5oIiAgICAgICAgICAgSEFWRV9QT0xMX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJwd2QuaCIgICAgICAgICAgICBIQVZFX1BXRF9IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgicnNhLmgiICAgICAgICAgICAgSEFWRV9SU0FfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInNldGptcC5oIiAgICAgICAgIEhBVkVfU0VUSk1QX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzZ3R0eS5oIiAgICAgICAgICBIQVZFX1NHVFRZX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzaWduYWwuaCIgICAgICAgICBIQVZFX1NJR05BTF9IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgic3NsLmgiICAgICAgICAgICAgSEFWRV9TU0xfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInN0ZGJvb2wuaCIgICAgICAgIEhBVkVfU1REQk9PTF9IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgic3RkaW50LmgiICAgICAgICAgSEFWRV9TVERJTlRfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInN0ZGlvLmgiICAgICAgICAgIEhBVkVfU1RESU9fSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInN0ZGxpYi5oIiAgICAgICAgIEhBVkVfU1RETElCX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzdHJpbmcuaCIgICAgICAgICBIQVZFX1NUUklOR19IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgic3RyaW5ncy5oIiAgICAgICAgSEFWRV9TVFJJTkdTX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzdHJvcHRzLmgiICAgICAgICBIQVZFX1NUUk9QVFNfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInRlcm1pby5oIiAgICAgICAgIEhBVkVfVEVSTUlPX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJ0ZXJtaW9zLmgiICAgICAgICBIQVZFX1RFUk1JT1NfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInRpbWUuaCIgICAgICAgICAgIEhBVkVfVElNRV9IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgidGxkLmgiICAgICAgICAgICAgSEFWRV9UTERfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInVuaXN0ZC5oIiAgICAgICAgIEhBVkVfVU5JU1REX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJ1dGltZS5oIiAgICAgICAgICBIQVZFX1VUSU1FX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJ4NTA5LmgiICAgICAgICAgICBIQVZFX1g1MDlfSCkKKworY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgicHJvY2Vzcy5oIiAgICAgICAgSEFWRV9QUk9DRVNTX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzdGRkZWYuaCIgICAgICAgICBIQVZFX1NURERFRl9IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgiZGxmY24uaCIgICAgICAgICAgSEFWRV9ETEZDTl9IKQorY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgibWFsbG9jLmgiICAgICAgICAgSEFWRV9NQUxMT0NfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIm1lbW9yeS5oIiAgICAgICAgIEhBVkVfTUVNT1JZX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJsZGFwLmgiICAgICAgICAgICBIQVZFX0xEQVBfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoIm5ldGluZXQvaWZfZXRoZXIuaCIgSEFWRV9ORVRJTkVUX0lGX0VUSEVSX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzdGRpbnQuaCIgICAgICAgIEhBVkVfU1RESU5UX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzb2NraW8uaCIgICAgICAgIEhBVkVfU09DS0lPX0gpCitjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJzeXMvdXRzbmFtZS5oIiAgIEhBVkVfU1lTX1VUU05BTUVfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImlkbmEuaCIgICAgICAgICAgSEFWRV9JRE5BX0gpCisKK2lmKENNQUtFX1VTRV9PUEVOU1NMKQorICBjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJvcGVuc3NsL3JhbmQuaCIgICBIQVZFX09QRU5TU0xfUkFORF9IKQorZW5kaWYoQ01BS0VfVVNFX09QRU5TU0wpCisKK2lmKE5PVCBIQVZFX0xEQVBfSCkKKyAgbWVzc2FnZShTVEFUVVMgIkxEQVBfSCBub3QgZm91bmQgQ1VSTF9ESVNBQkxFX0xEQVAgc2V0IE9OIikKKyAgc2V0KENVUkxfRElTQUJMRV9MREFQIE9OIENBQ0hFIEJPT0wgIiIgRk9SQ0UpCitlbmRpZigpCisKKworY2hlY2tfdHlwZV9zaXplKHNpemVfdCAgU0laRU9GX1NJWkVfVCkKK2NoZWNrX3R5cGVfc2l6ZShzc2l6ZV90ICBTSVpFT0ZfU1NJWkVfVCkKK2NoZWNrX3R5cGVfc2l6ZSgibG9uZyBsb25nIiAgU0laRU9GX0xPTkdfTE9ORykKK2NoZWNrX3R5cGVfc2l6ZSgibG9uZyIgIFNJWkVPRl9MT05HKQorY2hlY2tfdHlwZV9zaXplKCJzaG9ydCIgIFNJWkVPRl9TSE9SVCkKK2NoZWNrX3R5cGVfc2l6ZSgiaW50IiAgU0laRU9GX0lOVCkKK2NoZWNrX3R5cGVfc2l6ZSgiX19pbnQ2NCIgIFNJWkVPRl9fX0lOVDY0KQorY2hlY2tfdHlwZV9zaXplKCJsb25nIGRvdWJsZSIgIFNJWkVPRl9MT05HX0RPVUJMRSkKK2NoZWNrX3R5cGVfc2l6ZSgidGltZV90IiAgU0laRU9GX1RJTUVfVCkKK2lmKE5PVCBIQVZFX1NJWkVPRl9TU0laRV9UKQorICBpZihTSVpFT0ZfTE9ORyBFUVVBTCBTSVpFT0ZfU0laRV9UKQorICAgIHNldChzc2l6ZV90IGxvbmcpCisgIGVuZGlmKFNJWkVPRl9MT05HIEVRVUFMIFNJWkVPRl9TSVpFX1QpCisgIGlmKE5PVCBzc2l6ZV90IEFORCBTSVpFT0ZfX19JTlQ2NCBFUVVBTCBTSVpFT0ZfU0laRV9UKQorICAgIHNldChzc2l6ZV90IF9faW50NjQpCisgIGVuZGlmKE5PVCBzc2l6ZV90IEFORCBTSVpFT0ZfX19JTlQ2NCBFUVVBTCBTSVpFT0ZfU0laRV9UKQorZW5kaWYoTk9UIEhBVkVfU0laRU9GX1NTSVpFX1QpCisKKyMgRGlmZmVyZW50IHNpemVvZnMsIGV0Yy4KKworIyAgICBkZWZpbmUgQ1VSTF9TSVpFT0ZfTE9ORyAgICAgICAgNAorIyAgICBkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCAgbG9uZyBsb25nCisjICAgIGRlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICAibGxkIgorIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgImxsdSIKKyMgICAgZGVmaW5lIENVUkxfRk9STUFUX09GRl9UICAgICAgICIlbGxkIgorIyAgICBkZWZpbmUgQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCAgOAorIyAgICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCAgTEwKKyMgICAgZGVmaW5lIENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVIFVMTAorCitzZXQoQ1VSTF9TSVpFT0ZfTE9ORyAke1NJWkVPRl9MT05HfSkKKworaWYoU0laRU9GX0xPTkcgRVFVQUwgOCkKKyAgc2V0KENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QgbG9uZykKKyAgc2V0KENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgOCkKKyAgc2V0KENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgImxkIikKKyAgc2V0KENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVICJsdSIpCisgIHNldChDVVJMX0ZPUk1BVF9PRkZfVCAiJWxkIikKKyAgc2V0KENVUkxfU1VGRklYX0NVUkxfT0ZGX1QgTCkKKyAgc2V0KENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVIExVKQorZW5kaWYoU0laRU9GX0xPTkcgRVFVQUwgOCkKKworaWYoU0laRU9GX0xPTkdfTE9ORyBFUVVBTCA4KQorICBzZXQoQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCAibG9uZyBsb25nIikKKyAgc2V0KENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgOCkKKyAgc2V0KENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgImxsZCIpCisgIHNldChDVVJMX0ZPUk1BVF9DVVJMX09GRl9UVSAibGx1IikKKyAgc2V0KENVUkxfRk9STUFUX09GRl9UICIlbGxkIikKKyAgc2V0KENVUkxfU1VGRklYX0NVUkxfT0ZGX1QgTEwpCisgIHNldChDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSBMTFUpCitlbmRpZihTSVpFT0ZfTE9OR19MT05HIEVRVUFMIDgpCisKK2lmKE5PVCBDVVJMX1RZUEVPRl9DVVJMX09GRl9UKQorICBzZXQoQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCAke3NzaXplX3R9KQorICBzZXQoQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCAke1NJWkVPRl9TU0laRV9UfSkKKyAgIyBUT0RPOiBuZWVkIGFkanVzdG1lbnQgaGVyZS4KKyAgc2V0KENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgImxkIikKKyAgc2V0KENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVICJsdSIpCisgIHNldChDVVJMX0ZPUk1BVF9PRkZfVCAiJWxkIikKKyAgc2V0KENVUkxfU1VGRklYX0NVUkxfT0ZGX1QgTCkKKyAgc2V0KENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVIExVKQorZW5kaWYoTk9UIENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QpCisKK2lmKEhBVkVfU0laRU9GX0xPTkdfTE9ORykKKyAgc2V0KEhBVkVfTE9OR0xPTkcgMSkKKyAgc2V0KEhBVkVfTEwgMSkKK2VuZGlmKEhBVkVfU0laRU9GX0xPTkdfTE9ORykKKworZmluZF9maWxlKFJBTkRPTV9GSUxFIHVyYW5kb20gL2RldikKK21hcmtfYXNfYWR2YW5jZWQoUkFORE9NX0ZJTEUpCisKKyMgQ2hlY2sgZm9yIHNvbWUgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQKK2NoZWNrX3N5bWJvbF9leGlzdHMoYmFzZW5hbWUgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9CQVNFTkFNRSkKK2NoZWNrX3N5bWJvbF9leGlzdHMoc29ja2V0ICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TT0NLRVQpCitjaGVja19zeW1ib2xfZXhpc3RzKHBvbGwgICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfUE9MTCkKK2NoZWNrX3N5bWJvbF9leGlzdHMoc2VsZWN0ICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TRUxFQ1QpCitjaGVja19zeW1ib2xfZXhpc3RzKHN0cmR1cCAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU1RSRFVQKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhzdHJzdHIgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NUUlNUUikKK2NoZWNrX3N5bWJvbF9leGlzdHMoc3RydG9rX3IgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJUT0tfUikKK2NoZWNrX3N5bWJvbF9leGlzdHMoc3RyZnRpbWUgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJGVElNRSkKK2NoZWNrX3N5bWJvbF9leGlzdHModW5hbWUgICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9VTkFNRSkKK2NoZWNrX3N5bWJvbF9leGlzdHMoc3RyY2FzZWNtcCAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJDQVNFQ01QKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhzdHJpY21wICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NUUklDTVApCitjaGVja19zeW1ib2xfZXhpc3RzKHN0cmNtcGkgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU1RSQ01QSSkKK2NoZWNrX3N5bWJvbF9leGlzdHMoc3RybmNtcGkgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJOQ01QSSkKK2NoZWNrX3N5bWJvbF9leGlzdHMoYWxhcm0gICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9BTEFSTSkKK2lmKE5PVCBIQVZFX1NUUk5DTVBJKQorICBzZXQoSEFWRV9TVFJDTVBJKQorZW5kaWYoTk9UIEhBVkVfU1RSTkNNUEkpCitjaGVja19zeW1ib2xfZXhpc3RzKGdldGhvc3RieWFkZHIgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUSE9TVEJZQUREUikKK2NoZWNrX3N5bWJvbF9leGlzdHMoZ2V0aG9zdGJ5YWRkcl9yICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVEhPU1RCWUFERFJfUikKK2NoZWNrX3N5bWJvbF9leGlzdHMoZ2V0dGltZW9mZGF5ICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRUSU1FT0ZEQVkpCitjaGVja19zeW1ib2xfZXhpc3RzKGluZXRfYWRkciAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfSU5FVF9BRERSKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhpbmV0X250b2EgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0lORVRfTlRPQSkKK2NoZWNrX3N5bWJvbF9leGlzdHMoaW5ldF9udG9hX3IgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9JTkVUX05UT0FfUikKK2NoZWNrX3N5bWJvbF9leGlzdHModGNzZXRhdHRyICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9UQ1NFVEFUVFIpCitjaGVja19zeW1ib2xfZXhpc3RzKHRjZ2V0YXR0ciAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfVENHRVRBVFRSKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhwZXJyb3IgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1BFUlJPUikKK2NoZWNrX3N5bWJvbF9leGlzdHMoY2xvc2Vzb2NrZXQgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9DTE9TRVNPQ0tFVCkKK2NoZWNrX3N5bWJvbF9leGlzdHMoc2V0dmJ1ZiAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TRVRWQlVGKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhzaWdzZXRqbXAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NJR1NFVEpNUCkKK2NoZWNrX3N5bWJvbF9leGlzdHMoZ2V0cGFzc19yICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRQQVNTX1IpCitjaGVja19zeW1ib2xfZXhpc3RzKHN0cmxjYXQgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU1RSTENBVCkKK2NoZWNrX3N5bWJvbF9leGlzdHMoZ2V0cHd1aWQgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRQV1VJRCkKK2NoZWNrX3N5bWJvbF9leGlzdHMoZ2V0ZXVpZCAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRFVUlEKQorY2hlY2tfc3ltYm9sX2V4aXN0cyh1dGltZSAgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1VUSU1FKQoraWYoQ01BS0VfVVNFX09QRU5TU0wpCisgIGNoZWNrX3N5bWJvbF9leGlzdHMoUkFORF9zdGF0dXMgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9SQU5EX1NUQVRVUykKKyAgY2hlY2tfc3ltYm9sX2V4aXN0cyhSQU5EX3NjcmVlbiAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1JBTkRfU0NSRUVOKQorICBjaGVja19zeW1ib2xfZXhpc3RzKFJBTkRfZWdkICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfUkFORF9FR0QpCisgIGNoZWNrX3N5bWJvbF9leGlzdHMoQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEgIiR7Q1VSTF9JTkNMVURFU30iCisgICAgSEFWRV9DUllQVE9fQ0xFQU5VUF9BTExfRVhfREFUQSkKKyAgaWYoSEFWRV9MSUJDUllQVE8gQU5EIEhBVkVfTElCU1NMKQorICAgIHNldChVU0VfT1BFTlNTTCAxKQorICAgIHNldChVU0VfU1NMRUFZIDEpCisgIGVuZGlmKEhBVkVfTElCQ1JZUFRPIEFORCBIQVZFX0xJQlNTTCkKK2VuZGlmKENNQUtFX1VTRV9PUEVOU1NMKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhnbXRpbWVfciAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dNVElNRV9SKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhsb2NhbHRpbWVfciAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0xPQ0FMVElNRV9SKQorCitjaGVja19zeW1ib2xfZXhpc3RzKGdldGhvc3RieW5hbWUgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRIT1NUQllOQU1FKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhnZXRob3N0YnluYW1lX3IgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUSE9TVEJZTkFNRV9SKQorCitjaGVja19zeW1ib2xfZXhpc3RzKHNpZ25hbCAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU0lHTkFMX0ZVTkMpCitjaGVja19zeW1ib2xfZXhpc3RzKFNJR0FMUk0gICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU0lHTkFMX01BQ1JPKQoraWYoSEFWRV9TSUdOQUxfRlVOQyBBTkQgSEFWRV9TSUdOQUxfTUFDUk8pCisgIHNldChIQVZFX1NJR05BTCAxKQorZW5kaWYoSEFWRV9TSUdOQUxfRlVOQyBBTkQgSEFWRV9TSUdOQUxfTUFDUk8pCitjaGVja19zeW1ib2xfZXhpc3RzKHVuYW1lICAgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1VOQU1FKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhzdHJ0b2xsICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJUT0xMKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhfc3RydG9pNjQgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9fU1RSVE9JNjQpCitjaGVja19zeW1ib2xfZXhpc3RzKHN0cmVycm9yX3IgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NUUkVSUk9SX1IpCitjaGVja19zeW1ib2xfZXhpc3RzKHNpZ2ludGVycnVwdCAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NJR0lOVEVSUlVQVCkKK2NoZWNrX3N5bWJvbF9leGlzdHMocGVycm9yICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfUEVSUk9SKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhmb3JrICAgICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9GT1JLKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhmcmVlYWRkcmluZm8gICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9GUkVFQUREUklORk8pCitjaGVja19zeW1ib2xfZXhpc3RzKGZyZWVpZmFkZHJzICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0ZSRUVJRkFERFJTKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhwaXBlICAgICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9QSVBFKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhmdHJ1bmNhdGUgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9GVFJVTkNBVEUpCitjaGVja19zeW1ib2xfZXhpc3RzKGdldHByb3RvYnluYW1lICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVFBST1RPQllOQU1FKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhnZXRybGltaXQgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRSTElNSVQpCitjaGVja19zeW1ib2xfZXhpc3RzKGlkbl9mcmVlICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0lETl9GUkVFKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhpZG5hX3N0cmVycm9yICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9JRE5BX1NUUkVSUk9SKQorY2hlY2tfc3ltYm9sX2V4aXN0cyh0bGRfc3RyZXJyb3IgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9UTERfU1RSRVJST1IpCitjaGVja19zeW1ib2xfZXhpc3RzKHNldGxvY2FsZSAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NFVExPQ0FMRSkKK2NoZWNrX3N5bWJvbF9leGlzdHMoc2V0cmxpbWl0ICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU0VUUkxJTUlUKQorY2hlY2tfc3ltYm9sX2V4aXN0cyhmY250bCAgICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9GQ05UTCkKK2NoZWNrX3N5bWJvbF9leGlzdHMoaW9jdGwgICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfSU9DVEwpCitjaGVja19zeW1ib2xfZXhpc3RzKHNldHNvY2tvcHQgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NFVFNPQ0tPUFQpCisKKyMgc3ltYm9sIGV4aXN0cyBpbiB3aW4zMiwgYnV0IGZ1bmN0aW9uIGRvZXMgbm90LgorY2hlY2tfZnVuY3Rpb25fZXhpc3RzKGluZXRfcHRvbiBIQVZFX0lORVRfUFRPTikKKworIyBzaWdhY3Rpb24gYW5kIHNpZ3NldGptcCBhcmUgc3BlY2lhbC4gVXNlIHNwZWNpYWwgbWVjaGFuaXNtIGZvcgorIyBkZXRlY3RpbmcgdGhvc2UsIGJ1dCBvbmx5IGlmIHByZXZpb3VzIGF0dGVtcHQgZmFpbGVkLgoraWYoSEFWRV9TSUdOQUxfSCkKKyAgY2hlY2tfc3ltYm9sX2V4aXN0cyhzaWdhY3Rpb24gInNpZ25hbC5oIiBIQVZFX1NJR0FDVElPTikKK2VuZGlmKEhBVkVfU0lHTkFMX0gpCisKK2lmKE5PVCBIQVZFX1NJR1NFVEpNUCkKKyAgaWYoSEFWRV9TRVRKTVBfSCkKKyAgICBjaGVja19zeW1ib2xfZXhpc3RzKHNpZ3NldGptcCAic2V0am1wLmgiIEhBVkVfTUFDUk9fU0lHU0VUSk1QKQorICAgIGlmKEhBVkVfTUFDUk9fU0lHU0VUSk1QKQorICAgICAgc2V0KEhBVkVfU0lHU0VUSk1QIDEpCisgICAgZW5kaWYoSEFWRV9NQUNST19TSUdTRVRKTVApCisgIGVuZGlmKEhBVkVfU0VUSk1QX0gpCitlbmRpZihOT1QgSEFWRV9TSUdTRVRKTVApCisKKyMgSWYgdGhlcmUgaXMgbm8gc3RyaWNtcCgpLCBkbyBub3QgYWxsb3cgTERBUCB0byBwYXJzZSBVUkxzCitpZihOT1QgSEFWRV9TVFJJQ01QKQorICBzZXQoSEFWRV9MREFQX1VSTF9QQVJTRSAxKQorZW5kaWYoTk9UIEhBVkVfU1RSSUNNUCkKKworIyBGb3Igb3RoZXIgY3VybCBzcGVjaWZpYyB0ZXN0cywgdXNlIHRoaXMgbWFjcm8uCittYWNybyhDVVJMX0lOVEVSTkFMX1RFU1QgQ1VSTF9URVNUKQorICBpZigiJHtDVVJMX1RFU1R9IiBNQVRDSEVTICJeJHtDVVJMX1RFU1R9JCIpCisgICAgc2V0KE1BQ1JPX0NIRUNLX0ZVTkNUSU9OX0RFRklOSVRJT05TCisgICAgICAiLUQke0NVUkxfVEVTVH0gJHtDVVJMX1RFU1RfREVGSU5FU30gJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30iKQorICAgIGlmKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUykKKyAgICAgIHNldChDVVJMX1RFU1RfQUREX0xJQlJBUklFUworICAgICAgICAiLURMSU5LX0xJQlJBUklFUzpTVFJJTkc9JHtDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVN9IikKKyAgICBlbmRpZihDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMpCisKKyAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBDdXJsIFRlc3QgJHtDVVJMX1RFU1R9IikKKyAgICB0cnlfY29tcGlsZSgke0NVUkxfVEVTVH0KKyAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0KKyAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DTWFrZS9DdXJsVGVzdHMuYworICAgICAgQ01BS0VfRkxBR1MgLURDT01QSUxFX0RFRklOSVRJT05TOlNUUklORz0ke01BQ1JPX0NIRUNLX0ZVTkNUSU9OX0RFRklOSVRJT05TfQorICAgICAgIiR7Q1VSTF9URVNUX0FERF9MSUJSQVJJRVN9IgorICAgICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVCkKKyAgICBpZigke0NVUkxfVEVTVH0pCisgICAgICBzZXQoJHtDVVJMX1RFU1R9IDEgQ0FDSEUgSU5URVJOQUwgIkN1cmwgdGVzdCAke0ZVTkNUSU9OfSIpCisgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBDdXJsIFRlc3QgJHtDVVJMX1RFU1R9IC0gU3VjY2VzcyIpCisgICAgICBmaWxlKEFQUEVORCAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlT3V0cHV0LmxvZworICAgICAgICAiUGVyZm9ybWluZyBDdXJsIFRlc3QgJHtDVVJMX1RFU1R9IHBhc3NlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgorICAgICAgICAiJHtPVVRQVVR9XG4iKQorICAgIGVsc2UoJHtDVVJMX1RFU1R9KQorICAgICAgbWVzc2FnZShTVEFUVVMgIlBlcmZvcm1pbmcgQ3VybCBUZXN0ICR7Q1VSTF9URVNUfSAtIEZhaWxlZCIpCisgICAgICBzZXQoJHtDVVJMX1RFU1R9ICIiIENBQ0hFIElOVEVSTkFMICJDdXJsIHRlc3QgJHtGVU5DVElPTn0iKQorICAgICAgZmlsZShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZworICAgICAgICAiUGVyZm9ybWluZyBDdXJsIFRlc3QgJHtDVVJMX1RFU1R9IGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgorICAgICAgICAiJHtPVVRQVVR9XG4iKQorICAgIGVuZGlmKCR7Q1VSTF9URVNUfSkKKyAgZW5kaWYoIiR7Q1VSTF9URVNUfSIgTUFUQ0hFUyAiXiR7Q1VSTF9URVNUfSQiKQorZW5kbWFjcm8oQ1VSTF9JTlRFUk5BTF9URVNUKQorCittYWNybyhDVVJMX0lOVEVSTkFMX1RFU1RfUlVOIENVUkxfVEVTVCkKKyAgaWYoIiR7Q1VSTF9URVNUfV9DT01QSUxFIiBNQVRDSEVTICJeJHtDVVJMX1RFU1R9X0NPTVBJTEUkIikKKyAgICBzZXQoTUFDUk9fQ0hFQ0tfRlVOQ1RJT05fREVGSU5JVElPTlMKKyAgICAgICItRCR7Q1VSTF9URVNUfSAke0NNQUtFX1JFUVVJUkVEX0ZMQUdTfSIpCisgICAgaWYoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTKQorICAgICAgc2V0KENVUkxfVEVTVF9BRERfTElCUkFSSUVTCisgICAgICAgICItRExJTktfTElCUkFSSUVTOlNUUklORz0ke0NNQUtFX1JFUVVJUkVEX0xJQlJBUklFU30iKQorICAgIGVuZGlmKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUykKKworICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIEN1cmwgVGVzdCAke0NVUkxfVEVTVH0iKQorICAgIHRyeV9ydW4oJHtDVVJMX1RFU1R9ICR7Q1VSTF9URVNUfV9DT01QSUxFCisgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CisgICAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vQ01ha2UvQ3VybFRlc3RzLmMKKyAgICAgIENNQUtFX0ZMQUdTIC1EQ09NUElMRV9ERUZJTklUSU9OUzpTVFJJTkc9JHtNQUNST19DSEVDS19GVU5DVElPTl9ERUZJTklUSU9OU30KKyAgICAgICIke0NVUkxfVEVTVF9BRERfTElCUkFSSUVTfSIKKyAgICAgIE9VVFBVVF9WQVJJQUJMRSBPVVRQVVQpCisgICAgaWYoJHtDVVJMX1RFU1R9X0NPTVBJTEUgQU5EIE5PVCAke0NVUkxfVEVTVH0pCisgICAgICBzZXQoJHtDVVJMX1RFU1R9IDEgQ0FDSEUgSU5URVJOQUwgIkN1cmwgdGVzdCAke0ZVTkNUSU9OfSIpCisgICAgICBtZXNzYWdlKFNUQVRVUyAiUGVyZm9ybWluZyBDdXJsIFRlc3QgJHtDVVJMX1RFU1R9IC0gU3VjY2VzcyIpCisgICAgZWxzZSgke0NVUkxfVEVTVH1fQ09NUElMRSBBTkQgTk9UICR7Q1VSTF9URVNUfSkKKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJQZXJmb3JtaW5nIEN1cmwgVGVzdCAke0NVUkxfVEVTVH0gLSBGYWlsZWQiKQorICAgICAgc2V0KCR7Q1VSTF9URVNUfSAiIiBDQUNIRSBJTlRFUk5BTCAiQ3VybCB0ZXN0ICR7RlVOQ1RJT059IikKKyAgICAgIGZpbGUoQVBQRU5EICIke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nIgorICAgICAgICAiUGVyZm9ybWluZyBDdXJsIFRlc3QgJHtDVVJMX1RFU1R9IGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgorICAgICAgICAiJHtPVVRQVVR9IikKKyAgICAgIGlmKCR7Q1VSTF9URVNUfV9DT01QSUxFKQorICAgICAgICBmaWxlKEFQUEVORAorICAgICAgICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nIgorICAgICAgICAgICJUaGVyZSB3YXMgYSBwcm9ibGVtIHJ1bm5pbmcgdGhpcyB0ZXN0XG4iKQorICAgICAgZW5kaWYoJHtDVVJMX1RFU1R9X0NPTVBJTEUpCisgICAgICBmaWxlKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZyIKKyAgICAgICAgIlxuXG4iKQorICAgIGVuZGlmKCR7Q1VSTF9URVNUfV9DT01QSUxFIEFORCBOT1QgJHtDVVJMX1RFU1R9KQorICBlbmRpZigiJHtDVVJMX1RFU1R9X0NPTVBJTEUiIE1BVENIRVMgIl4ke0NVUkxfVEVTVH1fQ09NUElMRSQiKQorZW5kbWFjcm8oQ1VSTF9JTlRFUk5BTF9URVNUX1JVTikKKworIyBEbyBjdXJsIHNwZWNpZmljIHRlc3RzCitmb3JlYWNoKENVUkxfVEVTVAorICAgIEhBVkVfRkNOVExfT19OT05CTE9DSworICAgIEhBVkVfSU9DVExTT0NLRVQKKyAgICBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMCisgICAgSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTF9GSU9OQklPCisgICAgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPCisgICAgSEFWRV9JT0NUTF9GSU9OQklPCisgICAgSEFWRV9JT0NUTF9TSU9DR0lGQUREUgorICAgIEhBVkVfU0VUU09DS09QVF9TT19OT05CTE9DSworICAgIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQKKyAgICBUSU1FX1dJVEhfU1lTX1RJTUUKKyAgICBIQVZFX09fTk9OQkxPQ0sKKyAgICBIQVZFX0dFVEhPU1RCWUFERFJfUl81CisgICAgSEFWRV9HRVRIT1NUQllBRERSX1JfNworICAgIEhBVkVfR0VUSE9TVEJZQUREUl9SXzgKKyAgICBIQVZFX0dFVEhPU1RCWUFERFJfUl81X1JFRU5UUkFOVAorICAgIEhBVkVfR0VUSE9TVEJZQUREUl9SXzdfUkVFTlRSQU5UCisgICAgSEFWRV9HRVRIT1NUQllBRERSX1JfOF9SRUVOVFJBTlQKKyAgICBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zCisgICAgSEFWRV9HRVRIT1NUQllOQU1FX1JfNQorICAgIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzYKKyAgICBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zX1JFRU5UUkFOVAorICAgIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzVfUkVFTlRSQU5UCisgICAgSEFWRV9HRVRIT1NUQllOQU1FX1JfNl9SRUVOVFJBTlQKKyAgICBIQVZFX1NPQ0tMRU5fVAorICAgIEhBVkVfSU5fQUREUl9UCisgICAgSEFWRV9CT09MX1QKKyAgICBTVERDX0hFQURFUlMKKyAgICBSRVRTSUdUWVBFX1RFU1QKKyAgICBIQVZFX0lORVRfTlRPQV9SX0RFQ0wKKyAgICBIQVZFX0lORVRfTlRPQV9SX0RFQ0xfUkVFTlRSQU5UCisgICAgSEFWRV9HRVRBRERSSU5GTworICAgIEhBVkVfRklMRV9PRkZTRVRfQklUUworICAgICkKKyAgY3VybF9pbnRlcm5hbF90ZXN0KCR7Q1VSTF9URVNUfSkKK2VuZGZvcmVhY2goQ1VSTF9URVNUKQoraWYoSEFWRV9GSUxFX09GRlNFVF9CSVRTKQorICBzZXQoX0ZJTEVfT0ZGU0VUX0JJVFMgNjQpCitlbmRpZihIQVZFX0ZJTEVfT0ZGU0VUX0JJVFMpCitmb3JlYWNoKENVUkxfVEVTVAorICAgIEhBVkVfR0xJQkNfU1RSRVJST1JfUgorICAgIEhBVkVfUE9TSVhfU1RSRVJST1JfUgorICAgICkKKyAgY3VybF9pbnRlcm5hbF90ZXN0X3J1bigke0NVUkxfVEVTVH0pCitlbmRmb3JlYWNoKENVUkxfVEVTVCkKKworIyBDaGVjayBmb3IgcmVlbnRyYW50Citmb3JlYWNoKENVUkxfVEVTVAorICAgIEhBVkVfR0VUSE9TVEJZQUREUl9SXzUKKyAgICBIQVZFX0dFVEhPU1RCWUFERFJfUl83CisgICAgSEFWRV9HRVRIT1NUQllBRERSX1JfOAorICAgIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzMKKyAgICBIQVZFX0dFVEhPU1RCWU5BTUVfUl81CisgICAgSEFWRV9HRVRIT1NUQllOQU1FX1JfNgorICAgIEhBVkVfSU5FVF9OVE9BX1JfREVDTF9SRUVOVFJBTlQpCisgIGlmKE5PVCAke0NVUkxfVEVTVH0pCisgICAgaWYoJHtDVVJMX1RFU1R9X1JFRU5UUkFOVCkKKyAgICAgIHNldChORUVEX1JFRU5UUkFOVCAxKQorICAgIGVuZGlmKCR7Q1VSTF9URVNUfV9SRUVOVFJBTlQpCisgIGVuZGlmKE5PVCAke0NVUkxfVEVTVH0pCitlbmRmb3JlYWNoKENVUkxfVEVTVCkKKworaWYoTkVFRF9SRUVOVFJBTlQpCisgIGZvcmVhY2goQ1VSTF9URVNUCisgICAgICBIQVZFX0dFVEhPU1RCWUFERFJfUl81CisgICAgICBIQVZFX0dFVEhPU1RCWUFERFJfUl83CisgICAgICBIQVZFX0dFVEhPU1RCWUFERFJfUl84CisgICAgICBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zCisgICAgICBIQVZFX0dFVEhPU1RCWU5BTUVfUl81CisgICAgICBIQVZFX0dFVEhPU1RCWU5BTUVfUl82KQorICAgIHNldCgke0NVUkxfVEVTVH0gMCkKKyAgICBpZigke0NVUkxfVEVTVH1fUkVFTlRSQU5UKQorICAgICAgc2V0KCR7Q1VSTF9URVNUfSAxKQorICAgIGVuZGlmKCR7Q1VSTF9URVNUfV9SRUVOVFJBTlQpCisgIGVuZGZvcmVhY2goQ1VSTF9URVNUKQorZW5kaWYoTkVFRF9SRUVOVFJBTlQpCisKK2lmKEhBVkVfSU5FVF9OVE9BX1JfREVDTF9SRUVOVFJBTlQpCisgIHNldChIQVZFX0lORVRfTlRPQV9SX0RFQ0wgMSkKKyAgc2V0KE5FRURfUkVFTlRSQU5UIDEpCitlbmRpZihIQVZFX0lORVRfTlRPQV9SX0RFQ0xfUkVFTlRSQU5UKQorCisjIFNvbWUgb3RoZXIgbWlub3IgdGVzdHMKKworaWYoTk9UIEhBVkVfSU5fQUREUl9UKQorICBzZXQoaW5fYWRkcl90ICJ1bnNpZ25lZCBsb25nIikKK2VuZGlmKE5PVCBIQVZFX0lOX0FERFJfVCkKKworIyBGaXggbGlieiAvIHpsaWIuaAorCitpZihOT1QgQ1VSTF9TUEVDSUFMX0xJQlopCisgIGlmKE5PVCBIQVZFX0xJQlopCisgICAgc2V0KEhBVkVfWkxJQl9IIDApCisgIGVuZGlmKE5PVCBIQVZFX0xJQlopCisKKyAgaWYoTk9UIEhBVkVfWkxJQl9IKQorICAgIHNldChIQVZFX0xJQlogMCkKKyAgZW5kaWYoTk9UIEhBVkVfWkxJQl9IKQorZW5kaWYoTk9UIENVUkxfU1BFQ0lBTF9MSUJaKQorCitpZihfRklMRV9PRkZTRVRfQklUUykKKyAgc2V0KF9GSUxFX09GRlNFVF9CSVRTIDY0KQorZW5kaWYoX0ZJTEVfT0ZGU0VUX0JJVFMpCitzZXQoQ01BS0VfUkVRVUlSRURfRkxBR1MgIi1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiKQorc2V0KENNQUtFX0VYVFJBX0lOQ0xVREVfRklMRVMgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9jdXJsL2N1cmwuaCIpCitjaGVja190eXBlX3NpemUoImN1cmxfb2ZmX3QiIFNJWkVPRl9DVVJMX09GRl9UKQorc2V0KENNQUtFX0VYVFJBX0lOQ0xVREVfRklMRVMpCitzZXQoQ01BS0VfUkVRVUlSRURfRkxBR1MpCisKKworIyBDaGVjayBmb3Igbm9uYmxvY2tpbmcKK3NldChIQVZFX0RJU0FCTEVEX05PTkJMT0NLSU5HIDEpCitpZihIQVZFX0ZJT05CSU8gT1IKKyAgICBIQVZFX0lPQ1RMU09DS0VUIE9SCisgICAgSEFWRV9JT0NUTFNPQ0tFVF9DQVNFIE9SCisgICAgSEFWRV9PX05PTkJMT0NLKQorICBzZXQoSEFWRV9ESVNBQkxFRF9OT05CTE9DS0lORykKK2VuZGlmKEhBVkVfRklPTkJJTyBPUgorICBIQVZFX0lPQ1RMU09DS0VUIE9SCisgIEhBVkVfSU9DVExTT0NLRVRfQ0FTRSBPUgorICBIQVZFX09fTk9OQkxPQ0spCisKK2lmKFJFVFNJR1RZUEVfVEVTVCkKKyAgc2V0KFJFVFNJR1RZUEUgdm9pZCkKK2Vsc2UoUkVUU0lHVFlQRV9URVNUKQorICBzZXQoUkVUU0lHVFlQRSBpbnQpCitlbmRpZihSRVRTSUdUWVBFX1RFU1QpCisKK2lmKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDIEFORCBBUFBMRSkKKyAgaW5jbHVkZShDaGVja0NDb21waWxlckZsYWcpCisgIGNoZWNrX2NfY29tcGlsZXJfZmxhZygtV25vLWxvbmctZG91YmxlIEhBVkVfQ19GTEFHX1dub19sb25nX2RvdWJsZSkKKyAgaWYoSEFWRV9DX0ZMQUdfV25vX2xvbmdfZG91YmxlKQorICAgICMgVGhlIE1hYyB2ZXJzaW9uIG9mIEdDQyB3YXJucyBhYm91dCB1c2Ugb2YgbG9uZyBkb3VibGUuICBEaXNhYmxlIGl0LgorICAgIGdldF9zb3VyY2VfZmlsZV9wcm9wZXJ0eShNUFJJTlRGX0NPTVBJTEVfRkxBR1MgbXByaW50Zi5jIENPTVBJTEVfRkxBR1MpCisgICAgaWYoTVBSSU5URl9DT01QSUxFX0ZMQUdTKQorICAgICAgc2V0KE1QUklOVEZfQ09NUElMRV9GTEFHUyAiJHtNUFJJTlRGX0NPTVBJTEVfRkxBR1N9IC1Xbm8tbG9uZy1kb3VibGUiKQorICAgIGVsc2UoTVBSSU5URl9DT01QSUxFX0ZMQUdTKQorICAgICAgc2V0KE1QUklOVEZfQ09NUElMRV9GTEFHUyAiLVduby1sb25nLWRvdWJsZSIpCisgICAgZW5kaWYoTVBSSU5URl9DT01QSUxFX0ZMQUdTKQorICAgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcyhtcHJpbnRmLmMgUFJPUEVSVElFUworICAgICAgQ09NUElMRV9GTEFHUyAke01QUklOVEZfQ09NUElMRV9GTEFHU30pCisgIGVuZGlmKEhBVkVfQ19GTEFHX1dub19sb25nX2RvdWJsZSkKK2VuZGlmKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDIEFORCBBUFBMRSkKKworaWYoSEFWRV9TT0NLTEVOX1QpCisgIHNldChDVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVCAic29ja2xlbl90IikKKyAgaWYoV0lOMzIpCisgICAgc2V0KENNQUtFX0VYVFJBX0lOQ0xVREVfRklMRVMgIndpbnNvY2syLmg7d3MydGNwaXAuaCIpCisgIGVsc2VpZihIQVZFX1NZU19TT0NLRVRfSCkKKyAgICBzZXQoQ01BS0VfRVhUUkFfSU5DTFVERV9GSUxFUyAic3lzL3NvY2tldC5oIikKKyAgZW5kaWYoKQorICBjaGVja190eXBlX3NpemUoInNvY2tsZW5fdCIgQ1VSTF9TSVpFT0ZfQ1VSTF9TT0NLTEVOX1QpCisgIHNldChDTUFLRV9FWFRSQV9JTkNMVURFX0ZJTEVTKQorICBpZihOT1QgSEFWRV9DVVJMX1NJWkVPRl9DVVJMX1NPQ0tMRU5fVCkKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SCisgICAgICJDaGVjayBmb3Igc2l6ZW9mIHNvY2tsZW5fdCBmYWlsZWQsIHNlZSBDTWFrZUZpbGVzL0NNYWtlcnJvci5sb2ciKQorICBlbmRpZigpCitlbHNlKCkKKyAgc2V0KENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIGludCkKKyAgc2V0KENVUkxfU0laRU9GX0NVUkxfU09DS0xFTl9UICR7U0laRU9GX0lOVH0pCitlbmRpZigpCisKK2luY2x1ZGUoQ01ha2UvT3RoZXJUZXN0cy5jbWFrZSkKKworYWRkX2RlZmluaXRpb25zKC1ESEFWRV9DT05GSUdfSCkKKworIyBGb3Igd2luZG93cywgZG8gbm90IGFsbG93IHRoZSBjb21waWxlciB0byB1c2UgZGVmYXVsdCB0YXJnZXQgKFZpc3RhKS4KK2lmKFdJTjMyKQorICBhZGRfZGVmaW5pdGlvbnMoLURfV0lOMzJfV0lOTlQ9MHgwNTAxKQorZW5kaWYoV0lOMzIpCisKK2lmKE1TVkMpCisgIGFkZF9kZWZpbml0aW9ucygtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSAtRF9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUpCitlbmRpZihNU1ZDKQorCisjIFNldHMgdXAgdGhlIGRlcGVuZGVuY2llcyAoemxpYiwgT3BlblNTTCwgZXRjLikgb2YgYSBjVVJMIHN1YnByb2plY3QgYWNjb3JkaW5nIHRvIG9wdGlvbnMuCisjIFRPRE8gVGhpcyBpcyBmYXIgdG8gYmUgY29tcGxldGUhCitmdW5jdGlvbihTRVRVUF9DVVJMX0RFUEVOREVOQ0lFUyBUQVJHRVRfTkFNRSkKKyAgaWYoQ1VSTF9aTElCIEFORCBaTElCX0ZPVU5EKQorICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtaTElCX0lOQ0xVREVfRElSfSkKKyAgZW5kaWYoKQorICBpZihDVVJMX1pMSUIgQU5EIFpMSUJfRk9VTkQpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7VEFSR0VUX05BTUV9ICR7WkxJQl9MSUJSQVJJRVN9KQorICAgICNBRERfREVGSU5JVElPTlMoIC1ESEFWRV9aTElCX0ggLURIQVZFX1pMSUIgLURIQVZFX0xJQlogKQorICBlbmRpZigpCisKKyAgaWYoQ01BS0VfVVNFX09QRU5TU0wgQU5EIE9QRU5TU0xfRk9VTkQpCisgICAgaW5jbHVkZV9kaXJlY3Rvcmllcygke09QRU5TU0xfSU5DTFVERV9ESVJ9KQorICBlbmRpZigpCisgIGlmKENNQUtFX1VTRV9PUEVOU1NMIEFORCBDVVJMX0NPTkZJR19IQVNfQkVFTl9SVU5fQkVGT1JFKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke1RBUkdFVF9OQU1FfSAke09QRU5TU0xfTElCUkFSSUVTfSkKKyAgICAjQUREX0RFRklOSVRJT05TKCAtRFVTRV9TU0xFQVkgKQorICBlbmRpZigpCitlbmRmdW5jdGlvbigpCisKKyMgVWdseSAoYnV0IGZ1bmN0aW9uYWwpIHdheSB0byBpbmNsdWRlICJNYWtlZmlsZS5pbmMiIGJ5IHRyYW5zZm9ybWluZyBpdCAoPSByZWdlbmVyYXRlIGl0KS4KK2Z1bmN0aW9uKFRSQU5TRk9STV9NQUtFRklMRV9JTkMgSU5QVVRfRklMRSBPVVRQVVRfRklMRSkKKyAgZmlsZShSRUFEICR7SU5QVVRfRklMRX0gTUFLRUZJTEVfSU5DX1RFWFQpCisgIHN0cmluZyhSRVBMQUNFICIkKHRvcF9zcmNkaXIpIiAgICJcJHtDVVJMX1NPVVJDRV9ESVJ9IiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkKKyAgc3RyaW5nKFJFUExBQ0UgIiQodG9wX2J1aWxkZGlyKSIgIlwke0NVUkxfQklOQVJZX0RJUn0iIE1BS0VGSUxFX0lOQ19URVhUICR7TUFLRUZJTEVfSU5DX1RFWFR9KQorCisgIHN0cmluZyhSRUdFWCBSRVBMQUNFICJcXFxcXG4iICKnIaciIE1BS0VGSUxFX0lOQ19URVhUICR7TUFLRUZJTEVfSU5DX1RFWFR9KQorICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiKFthLXpBLVpfXVthLXpBLVowLTlfXSopW1x0IF0qPVtcdCBdKihbXlxuXSopIiAiU0VUKFxcMSBcXDIpIiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkKKyAgc3RyaW5nKFJFUExBQ0UgIqchpyIgIlxuIiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkKKworICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXFwkXFwoKFthLXpBLVpfXVthLXpBLVowLTlfXSopXFwpIiAiXCR7XFwxfSIgTUFLRUZJTEVfSU5DX1RFWFQgJHtNQUtFRklMRV9JTkNfVEVYVH0pICAgICMgUmVwbGFjZSAkKCkgd2l0aCAke30KKyAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIkAoW2EtekEtWl9dW2EtekEtWjAtOV9dKilAIiAiXCR7XFwxfSIgTUFLRUZJTEVfSU5DX1RFWFQgJHtNQUtFRklMRV9JTkNfVEVYVH0pICAgICMgUmVwbGFjZSBAQCB3aXRoICR7fSwgZXZlbiBpZiB0aGF0IG1heSBub3QgYmUgcmVhZCBieSBDTWFrZSBzY3JpcHRzLgorICBmaWxlKFdSSVRFICR7T1VUUFVUX0ZJTEV9ICR7TUFLRUZJTEVfSU5DX1RFWFR9KQorCitlbmRmdW5jdGlvbigpCisKK2FkZF9zdWJkaXJlY3RvcnkobGliKQoraWYoQlVJTERfQ1VSTF9FWEUpCisgIGFkZF9zdWJkaXJlY3Rvcnkoc3JjKQorZW5kaWYoKQoraWYoQlVJTERfQ1VSTF9URVNUUykKKyAgYWRkX3N1YmRpcmVjdG9yeSh0ZXN0cykKK2VuZGlmKCkKKworIyBUaGlzIG5lZWRzIHRvIGJlIHJ1biB2ZXJ5IGxhc3Qgc28gb3RoZXIgcGFydHMgb2YgdGhlIHNjcmlwdHMgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoaXMuCitpZihOT1QgQ1VSTF9DT05GSUdfSEFTX0JFRU5fUlVOX0JFRk9SRSkKKyAgc2V0KENVUkxfQ09ORklHX0hBU19CRUVOX1JVTl9CRUZPUkUgMSBDQUNIRSBJTlRFUk5BTCAiRmxhZyB0byB0cmFjayB3aGV0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgcnVubmluZyBDTWFrZSBvciBpZiBDTWFrZSBoYXMgYmVlbiBjb25maWd1cmVkIGJlZm9yZSIpCitlbmRpZigpCisKKyMgSW5zdGFsbGF0aW9uLgorIyBGaXJzdCwgaW5zdGFsbCBnZW5lcmF0ZWQgY3VybGJ1aWxkLmgKK2luc3RhbGwoRklMRVMgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgiCisgICAgREVTVElOQVRJT04gaW5jbHVkZS9jdXJsICkKKyMgTmV4dCwgaW5zdGFsbCBvdGhlciBoZWFkZXJzIGV4Y2x1ZGluZyBjdXJsYnVpbGQuaAoraW5zdGFsbChESVJFQ1RPUlkgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9pbmNsdWRlL2N1cmwiCisgICAgREVTVElOQVRJT04gaW5jbHVkZQorICAgIEZJTEVTX01BVENISU5HIFBBVFRFUk4gIiouaCIKKyAgICBQQVRURVJOICJjdXJsYnVpbGQuaCIgRVhDTFVERSkKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL0NPUFlJTkcgYi9jdXJsLTcuMjUuMC9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZDNlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9DT1BZSU5HCkBAIC0wLDAgKzEsMjEgQEAKK0NPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UKKworQ29weXJpZ2h0IChjKSAxOTk2IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZQord2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBJTgorTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCitEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKK09USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFCitPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlciBzaGFsbCBub3QKK2JlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncworaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL01hY09TWC1GcmFtZXdvcmsgYi9jdXJsLTcuMjUuMC9NYWNPU1gtRnJhbWV3b3JrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjOTdhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9NYWNPU1gtRnJhbWV3b3JrCkBAIC0wLDAgKzEsMTMyIEBACisjIS9iaW4vYmFzaAorIyBUaGlzIHNjcmlwdCBwZXJmb3JtcyBhbGwgb2YgdGhlIHN0ZXBzIG5lZWRlZCB0byBidWlsZCBhCisjIHVuaXZlcnNhbCBiaW5hcnkgbGliY3VybC5mcmFtZXdvcmsgZm9yIE1hYyBPUyBYIDEwLjQgb3IgZ3JlYXRlci4KKyMKKyMgSGVuZHJpayBWaXNhZ2U6CisjICBHZW5lcmFsaXphdGlvbnMgYWRkZWQgc2luY2UgIFNub3dsZW9wYXJkICgxMC42KSBkbyBub3QgaW5jbHVkZQorIyB0aGUgMTAuNHUgU0RLLgorIworIyBBbHNvIG5vdGU6CisjIDEwLjUgaXMgdGhlICpPTkxZKiBTREsgdGhhdCBzdXBwb3J0IFBQQzY0IDooIC0tIDEwLjYgZG8gbm90IGhhdmUgcHBjNjQgc3VwcG9ydAorI0lmIHlvdSBuZWVkIHRvIGhhdmUgUFBDNjQgc3VwcG9ydCB0aGVuIGNoYW5nZSBiZWxvdyB0byAxCitQUEM2NF9ORUVERUQ9MAorCisjIEZvciBtZSB0aGUgZGVmYXVsdCBpcyB0byBkZXZlbG9wIGZvciB0aGUgcGxhdGZvcm0gSSBhbSBvbiwgYW5kIGlmIHlvdQorI2Rlc2lyZSBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMgdGhlbiBjaGFuZ2UgVVNFX09MRCB0byAxIDopCitVU0VfT0xEPTAKKworVkVSU0lPTj1gL3Vzci9iaW4vc2VkIC1uZSAncy9eI2RlZmluZSBMSUJDVVJMX1ZFUlNJT04gIlwoLipcKSIvXDEvcCcgaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaGAKK0ZSQU1FV09SS19WRVJTSU9OPVZlcnNpb25zL1JlbGVhc2UtJFZFUlNJT04KKworI0kgYWxzbyB3YW50ZWQgdG8gImNvcHkgb3ZlciIgdGhlIHN5c3RlbSwgYW5kIHRodXMgdGhlIHJlYXNvbiBJIGFkZGVkIHRoZQorIyB2ZXJzaW9uIHRvIFZlcnNpb25zL1JlbGVhc2UtNy4yMC4xIGV0Yy4KKyMgbm93IGEgc2ltcGxlIHJzeW5jIC12YVAgbGliY3VybC5mcmFtZXdvcmsgL0xpYnJhcnkvRnJhbWV3b3JrcyB3aWxsIGluc3RhbGwgaXQKKyMgYW5kIHNldHVwIHRoZSByaWdodCBwYXRocyB0byB0aGlzIHZlcnNpb24sIGxlYXZpbmcgdGhlIHN5c3RlbSB2ZXJzaW9uCisjICJpbnRhY3QiLCBzbyB5b3UgY2FuICJmaXgiIGl0IGxhdGVyIHdpdGggdGhlIGxpbmtzIHRvIFZlcnNpb25zL0EvLi4uCisKKworT0xEX1NESz1gbHMgIC9EZXZlbG9wZXIvU0RLc3xoZWFkIC0xYAorTkVXX1NESz1gbHMgLXIgL0RldmVsb3Blci9TREtzfGhlYWQgLTFgCisKK2lmIHRlc3QgIjAiJFVTRV9PTEQgLWd0IDAKK3RoZW4KKyBTREszMj0kT0xEX1NESworZWxzZQorIFNESzMyPSRORVdfU0RLCitmaQorCitNQUNWRVI9YGVjaG8gJFNESzMyfHNlZCAtZSBzL1thLXpBLVpdLy9nIC1lIHMvLlwkLy9gCisKK1NESzMyX0RJUj0nL0RldmVsb3Blci9TREtzLyckU0RLMzIKK01JTlZFUjMyPSctbW1hY29zeC12ZXJzaW9uLW1pbj0nJE1BQ1ZFUgorQVJDSEVTMzI9Jy1hcmNoIGkzODYgLWFyY2ggcHBjJworCisKK2lmIHRlc3QgJFBQQzY0X05FRURFRCAtZ3QgMAordGhlbgorICBTREs2ND0xMC41CisgIEFSQ0hFUzY0PSctYXJjaCB4ODZfNjQgLWFyY2ggcHBjNjQnCisgIFNESzY0PWBscyAgL0RldmVsb3Blci9TREtzfGdyZXAgMTAuNXxoZWFkIC0xYAorZWxzZQorIEFSQ0hFUzY0PSctYXJjaCB4ODZfNjQnCisgI1dlICJrbm93IiB0aGF0IDEwLjQgYW5kIGVhcmxpZXIgZG8gbm90IHN1cHBvcnQgNjRiaXQKKyBPTERfU0RLNjQ9YGxzICAvRGV2ZWxvcGVyL1NES3N8ZWdyZXAgLXYgIjEwLlswLTRdInxoZWFkIC0xYAorIE5FV19TREs2ND1gbHMgLXIgL0RldmVsb3Blci9TREtzfGVncmVwIC12ICIxMC5bMC00XSJ8aGVhZCAtMWAKKyBpZiB0ZXN0ICRVU0VfT0xEIC1ndCAwCisgIHRoZW4KKyAgIFNESzY0PSRPTERfU0RLNjQKKyAgZWxzZQorICAgU0RLNjQ9JE5FV19TREs2NAorICBmaQorZmkKKworU0RLNjRfRElSPScvRGV2ZWxvcGVyL1NES3MvJyRTREs2NAorTUFDVkVSNjQ9YGVjaG8gJFNESzY0fHNlZCAtZSBzL1thLXpBLVpdLy9nIC1lIHMvLlwkLy9gCisKK01JTlZFUjY0PSctbW1hY29zeC12ZXJzaW9uLW1pbj0nJE1BQ1ZFUjY0CisKK2lmIHRlc3QgISAteiAkU0RLMzI7IHRoZW4KKyAgZWNobyAiLS0tLUNvbmZpZ3VyaW5nIGxpYmN1cmwgZm9yIDMyIGJpdCB1bml2ZXJzYWwgZnJhbWV3b3JrLi4uIgorICBtYWtlIGNsZWFuCisgIC4vY29uZmlndXJlIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIC0tZGlzYWJsZS1zdGF0aWMgLS13aXRoLWdzc2FwaSBcCisgICAgQ0ZMQUdTPSItT3MgLWlzeXNyb290ICRTREszMl9ESVIgJEFSQ0hFUzMyICRNSU5WRVIzMiIgXAorICAgIExERkxBR1M9Ii1XbCwtc3lzbGlicm9vdCwkU0RLMzJfRElSICRBUkNIRVMzMiAkTUlOVkVSMzIgLVdsLC1oZWFkZXJwYWRfbWF4X2luc3RhbGxfbmFtZXMiIFwKKyAgICBDQz0kQ0MKKworICBlY2hvICItLS0tQnVpbGRpbmcgMzIgYml0IGxpYmN1cmwuLi4iCisgIG1ha2UKKworICBlY2hvICItLS0tQ3JlYXRpbmcgMzIgYml0IGZyYW1ld29yay4uLiIKKyAgcm0gLXIgbGliY3VybC5mcmFtZXdvcmsKKyAgbWtkaXIgLXAgbGliY3VybC5mcmFtZXdvcmsvJHtGUkFNRVdPUktfVkVSU0lPTn0vUmVzb3VyY2VzCisgIGNwIGxpYi8ubGlicy9saWJjdXJsLmR5bGliIGxpYmN1cmwuZnJhbWV3b3JrLyR7RlJBTUVXT1JLX1ZFUlNJT059L2xpYmN1cmwKKyAgaW5zdGFsbF9uYW1lX3Rvb2wgLWlkIEBleGVjdXRhYmxlX3BhdGgvLi4vRnJhbWV3b3Jrcy9saWJjdXJsLmZyYW1ld29yay8ke0ZSQU1FV09SS19WRVJTSU9OfS9saWJjdXJsIGxpYmN1cmwuZnJhbWV3b3JrLyR7RlJBTUVXT1JLX1ZFUlNJT059L2xpYmN1cmwKKyAgL3Vzci9iaW4vc2VkIC1lICJzLzdcLjEyXC4zLyRWRVJTSU9OLyIgbGliL2xpYmN1cmwucGxpc3QgPmxpYmN1cmwuZnJhbWV3b3JrLyR7RlJBTUVXT1JLX1ZFUlNJT059L1Jlc291cmNlcy9JbmZvLnBsaXN0CisgIG1rZGlyIC1wIGxpYmN1cmwuZnJhbWV3b3JrLyR7RlJBTUVXT1JLX1ZFUlNJT059L0hlYWRlcnMvY3VybAorICBjcCBpbmNsdWRlL2N1cmwvKi5oIGxpYmN1cmwuZnJhbWV3b3JrLyR7RlJBTUVXT1JLX1ZFUlNJT059L0hlYWRlcnMvY3VybAorICBwdXNoZCBsaWJjdXJsLmZyYW1ld29yaworICBsbiAtZnMgJHtGUkFNRVdPUktfVkVSU0lPTn0vbGliY3VybCBsaWJjdXJsCisgIGxuIC1mcyAke0ZSQU1FV09SS19WRVJTSU9OfS9SZXNvdXJjZXMgUmVzb3VyY2VzCisgIGxuIC1mcyAke0ZSQU1FV09SS19WRVJTSU9OfS9IZWFkZXJzIEhlYWRlcnMKKyAgY2QgVmVyc2lvbnMKKyAgbG4gLWZzICR7RlJBTUVXT1JLX1ZFUlNJT059IEN1cnJlbnQKKworICBlY2hvIFRFc3RpbmcgZm9yIFNESzY0CisgIGlmIHRlc3QgLWQgJFNESzY0X0RJUjsgdGhlbgorICBlY2hvIGVudGVyaW5nLi4uCisgICAgcG9wZAorICAgIG1ha2UgY2xlYW4KKyAgICBlY2hvICItLS0tQ29uZmlndXJpbmcgbGliY3VybCBmb3IgNjQgYml0IHVuaXZlcnNhbCBmcmFtZXdvcmsuLi4iCisgICAgLi9jb25maWd1cmUgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgLS1kaXNhYmxlLXN0YXRpYyAtLXdpdGgtZ3NzYXBpIFwKKyAgICAgIENGTEFHUz0iLU9zIC1pc3lzcm9vdCAkU0RLNjRfRElSICRBUkNIRVM2NCAkTUlOVkVSNjQiIFwKKyAgICAgIExERkxBR1M9Ii1XbCwtc3lzbGlicm9vdCwkU0RLNjRfRElSICRBUkNIRVM2NCAkTUlOVkVSNjQgLVdsLC1oZWFkZXJwYWRfbWF4X2luc3RhbGxfbmFtZXMiIFwKKyAgICAgIENDPSRDQworCisgICAgZWNobyAiLS0tLUJ1aWxkaW5nIDY0IGJpdCBsaWJjdXJsLi4uIgorICAgIG1ha2UKKworICAgIGVjaG8gIi0tLS1BcHBlbmRpbmcgNjQgYml0IGZyYW1ld29yayB0byAzMiBiaXQgZnJhbWV3b3JrLi4uIgorICAgIGNwIGxpYi8ubGlicy9saWJjdXJsLmR5bGliIGxpYmN1cmwuZnJhbWV3b3JrLyR7RlJBTUVXT1JLX1ZFUlNJT059L2xpYmN1cmw2NAorICAgIGluc3RhbGxfbmFtZV90b29sIC1pZCBAZXhlY3V0YWJsZV9wYXRoLy4uL0ZyYW1ld29ya3MvbGliY3VybC5mcmFtZXdvcmsvJHtGUkFNRVdPUktfVkVSU0lPTn0vbGliY3VybCBsaWJjdXJsLmZyYW1ld29yay8ke0ZSQU1FV09SS19WRVJTSU9OfS9saWJjdXJsNjQKKyAgICBjcCBsaWJjdXJsLmZyYW1ld29yay8ke0ZSQU1FV09SS19WRVJTSU9OfS9saWJjdXJsIGxpYmN1cmwuZnJhbWV3b3JrLyR7RlJBTUVXT1JLX1ZFUlNJT059L2xpYmN1cmwzMgorICAgIHB3ZAorICAgIGxpcG8gbGliY3VybC5mcmFtZXdvcmsvJHtGUkFNRVdPUktfVkVSU0lPTn0vbGliY3VybDMyIGxpYmN1cmwuZnJhbWV3b3JrLyR7RlJBTUVXT1JLX1ZFUlNJT059L2xpYmN1cmw2NCAtY3JlYXRlIC1vdXRwdXQgbGliY3VybC5mcmFtZXdvcmsvJHtGUkFNRVdPUktfVkVSU0lPTn0vbGliY3VybAorICAgIHJtIGxpYmN1cmwuZnJhbWV3b3JrLyR7RlJBTUVXT1JLX1ZFUlNJT059L2xpYmN1cmwzMiBsaWJjdXJsLmZyYW1ld29yay8ke0ZSQU1FV09SS19WRVJTSU9OfS9saWJjdXJsNjQKKyAgICBjcCBsaWJjdXJsLmZyYW1ld29yay8ke0ZSQU1FV09SS19WRVJTSU9OfS9IZWFkZXJzL2N1cmwvY3VybGJ1aWxkLmggbGliY3VybC5mcmFtZXdvcmsvJHtGUkFNRVdPUktfVkVSU0lPTn0vSGVhZGVycy9jdXJsL2N1cmxidWlsZDMyLmgKKyAgICBjcCBpbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmggbGliY3VybC5mcmFtZXdvcmsvJHtGUkFNRVdPUktfVkVSU0lPTn0vSGVhZGVycy9jdXJsL2N1cmxidWlsZDY0LmgKKyAgICBjYXQgPmxpYmN1cmwuZnJhbWV3b3JrLyR7RlJBTUVXT1JLX1ZFUlNJT059L0hlYWRlcnMvY3VybC9jdXJsYnVpbGQuaCA8PEVPRgorI2lmZGVmIF9fTFA2NF9fCisjaW5jbHVkZSAiY3VybC9jdXJsYnVpbGQ2NC5oIgorI2Vsc2UKKyNpbmNsdWRlICJjdXJsL2N1cmxidWlsZDMyLmgiCisjZW5kaWYKK0VPRgorICBmaQorCisgIHB3ZAorICBsaXBvIC1pbmZvIGxpYmN1cmwuZnJhbWV3b3JrLyR7RlJBTUVXT1JLX1ZFUlNJT059L2xpYmN1cmwKKyAgZWNobyAibGliY3VybC5mcmFtZXdvcmsgaXMgYnVpbHQgYW5kIGNhbiBub3cgYmUgaW5jbHVkZWQgaW4gb3RoZXIgcHJvamVjdHMuIgorICBlY2hvICJDb3B5IGxpYmN1cmwuZnJhbWV3b3JrIHRvIHlvdXIgYnVuZGxlJ3MgQ29udGVudHMvRnJhbWV3b3JrcyBmb2xkZXIsIH4vTGlicmFyeS9GcmFtZXdvcmtzIG9yIC9MaWJyYXJ5L0ZyYW1ld29ya3MuIgorZWxzZQorICBlY2hvICJCdWlsZGluZyBsaWJjdXJsLmZyYW1ld29yayByZXF1aXJlcyBNYWMgT1MgWCAxMC40IG9yIGxhdGVyIHdpdGggdGhlIE1hY09TWDEwLjQvNS82IFNESyBpbnN0YWxsZWQuIgorZmkKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL01ha2VmaWxlIGIvY3VybC03LjI1LjAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmYmVmMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL01ha2VmaWxlCkBAIC0wLDAgKzEsMjk1IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVkM9dmM2CisKK2FsbDoKKwkuL2NvbmZpZ3VyZQorCW1ha2UKKworc3NsOgorCS4vY29uZmlndXJlIC0td2l0aC1zc2wKKwltYWtlCisKK2JvcmxhbmQ6CisJY2QgbGliCisJJChNQUtFKSAtZiBNYWtlZmlsZS5iMzIKKwljZCAuLlxzcmMKKwkkKE1BS0UpIC1mIE1ha2VmaWxlLmIzMgorCitib3JsYW5kLXNzbDoKKwljZCBsaWIKKwkkKE1BS0UpIC1mIE1ha2VmaWxlLmIzMiBXSVRIX1NTTD0xCisJY2QgLi5cc3JjCisJJChNQUtFKSAtZiBNYWtlZmlsZS5iMzIgV0lUSF9TU0w9MQorCitib3JsYW5kLXNzbC16bGliOgorCWNkIGxpYgorCSQoTUFLRSkgLWYgTWFrZWZpbGUuYjMyIFdJVEhfU1NMPTEgV0lUSF9aTElCPTEKKwljZCAuLlxzcmMKKwkkKE1BS0UpIC1mIE1ha2VmaWxlLmIzMiBXSVRIX1NTTD0xIFdJVEhfWkxJQj0xCisKK2JvcmxhbmQtY2xlYW46CisJY2QgbGliCisJJChNQUtFKSAtZiBNYWtlZmlsZS5iMzIgY2xlYW4KKwljZCAuLlxzcmMKKwkkKE1BS0UpIC1mIE1ha2VmaWxlLmIzMiBjbGVhbgorCit3YXRjb206IC5TWU1CT0xJQworCWNkIGxpYiAmJiAkKE1BS0UpIC11IC1mIE1ha2VmaWxlLldhdGNvbQorCWNkIHNyYyAmJiAkKE1BS0UpIC11IC1mIE1ha2VmaWxlLldhdGNvbQorCit3YXRjb20tY2xlYW46IC5TWU1CT0xJQworCWNkIGxpYiAmJiAkKE1BS0UpIC11IC1mIE1ha2VmaWxlLldhdGNvbSBjbGVhbgorCWNkIHNyYyAmJiAkKE1BS0UpIC11IC1mIE1ha2VmaWxlLldhdGNvbSBjbGVhbgorCit3YXRjb20tdmNsZWFuOiAuU1lNQk9MSUMKKwljZCBsaWIgJiYgJChNQUtFKSAtdSAtZiBNYWtlZmlsZS5XYXRjb20gdmNsZWFuCisJY2Qgc3JjICYmICQoTUFLRSkgLXUgLWYgTWFrZWZpbGUuV2F0Y29tIHZjbGVhbgorCittaW5ndzMyOgorCSQoTUFLRSkgLUMgbGliIC1mIE1ha2VmaWxlLm0zMgorCSQoTUFLRSkgLUMgc3JjIC1mIE1ha2VmaWxlLm0zMgorCittaW5ndzMyLWNsZWFuOgorCSQoTUFLRSkgLUMgbGliIC1mIE1ha2VmaWxlLm0zMiBjbGVhbgorCSQoTUFLRSkgLUMgc3JjIC1mIE1ha2VmaWxlLm0zMiBjbGVhbgorCSQoTUFLRSkgLUMgZG9jcy9leGFtcGxlcyAtZiBNYWtlZmlsZS5tMzIgY2xlYW4KKworbWluZ3czMi12Y2xlYW4gbWluZ3czMi1kaXN0Y2xlYW46CisJJChNQUtFKSAtQyBsaWIgLWYgTWFrZWZpbGUubTMyIHZjbGVhbgorCSQoTUFLRSkgLUMgc3JjIC1mIE1ha2VmaWxlLm0zMiB2Y2xlYW4KKwkkKE1BS0UpIC1DIGRvY3MvZXhhbXBsZXMgLWYgTWFrZWZpbGUubTMyIHZjbGVhbgorCittaW5ndzMyLWV4YW1wbGVzJToKKwkkKE1BS0UpIC1DIGRvY3MvZXhhbXBsZXMgLWYgTWFrZWZpbGUubTMyIENGRz0kQAorCittaW5ndzMyJToKKwkkKE1BS0UpIC1DIGxpYiAtZiBNYWtlZmlsZS5tMzIgQ0ZHPSRACisJJChNQUtFKSAtQyBzcmMgLWYgTWFrZWZpbGUubTMyIENGRz0kQAorCit2Yy1jbGVhbjogJChWQykKKwljZCBsaWIKKwlubWFrZSAtZiBNYWtlZmlsZS4kKFZDKSBjbGVhbgorCWNkIC4uXHNyYworCW5tYWtlIC1mIE1ha2VmaWxlLiQoVkMpIGNsZWFuCisKK3ZjLWFsbDogJChWQykKKwljZCBsaWIKKwlubWFrZSAtZiBNYWtlZmlsZS4kKFZDKSBjZmc9cmVsZWFzZQorCW5tYWtlIC1mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlLXNzbAorCW5tYWtlIC1mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlLXpsaWIKKwlubWFrZSAtZiBNYWtlZmlsZS4kKFZDKSBjZmc9cmVsZWFzZS1zc2wtemxpYgorCW5tYWtlIC1mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlLXNzbC1kbGwKKwlubWFrZSAtZiBNYWtlZmlsZS4kKFZDKSBjZmc9cmVsZWFzZS16bGliLWRsbAorCW5tYWtlIC1mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlLXNzbC1kbGwtemxpYi1kbGwKKwlubWFrZSAtZiBNYWtlZmlsZS4kKFZDKSBjZmc9cmVsZWFzZS1kbGwKKwlubWFrZSAtZiBNYWtlZmlsZS4kKFZDKSBjZmc9cmVsZWFzZS1kbGwtc3NsLWRsbAorCW5tYWtlIC1mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlLWRsbC16bGliLWRsbAorCW5tYWtlIC1mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsCisJbm1ha2UgLWYgTWFrZWZpbGUuJChWQykgY2ZnPWRlYnVnCisJbm1ha2UgLWYgTWFrZWZpbGUuJChWQykgY2ZnPWRlYnVnLXNzbAorCW5tYWtlIC1mIE1ha2VmaWxlLiQoVkMpIGNmZz1kZWJ1Zy16bGliCisJbm1ha2UgLWYgTWFrZWZpbGUuJChWQykgY2ZnPWRlYnVnLXNzbC16bGliCisJbm1ha2UgLWYgTWFrZWZpbGUuJChWQykgY2ZnPWRlYnVnLXNzbC1kbGwKKwlubWFrZSAtZiBNYWtlZmlsZS4kKFZDKSBjZmc9ZGVidWctemxpYi1kbGwKKwlubWFrZSAtZiBNYWtlZmlsZS4kKFZDKSBjZmc9ZGVidWctc3NsLWRsbC16bGliLWRsbAorCW5tYWtlIC1mIE1ha2VmaWxlLiQoVkMpIGNmZz1kZWJ1Zy1kbGwKKwlubWFrZSAtZiBNYWtlZmlsZS4kKFZDKSBjZmc9ZGVidWctZGxsLXNzbC1kbGwKKwlubWFrZSAtZiBNYWtlZmlsZS4kKFZDKSBjZmc9ZGVidWctZGxsLXpsaWItZGxsCisJbm1ha2UgLWYgTWFrZWZpbGUuJChWQykgY2ZnPWRlYnVnLWRsbC1zc2wtZGxsLXpsaWItZGxsCisKK3ZjOiAkKFZDKQorCWNkIGxpYgorCW5tYWtlIC9mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlCisJY2QgLi5cc3JjCisJbm1ha2UgL2YgTWFrZWZpbGUuJChWQykKKwordmMteDY0OiAkKFZDKQorCWNkIGxpYgorCW5tYWtlIC9mIE1ha2VmaWxlLiQoVkMpIE1BQ0hJTkU9eDY0IGNmZz1yZWxlYXNlCisJY2QgLi5cc3JjCisJbm1ha2UgL2YgTWFrZWZpbGUuJChWQykgTUFDSElORT14NjQgY2ZnPXJlbGVhc2UKKwordmMtemxpYjogJChWQykKKwljZCBsaWIKKwlubWFrZSAvZiBNYWtlZmlsZS4kKFZDKSBjZmc9cmVsZWFzZS16bGliCisJY2QgLi5cc3JjCisJbm1ha2UgL2YgTWFrZWZpbGUuJChWQykgY2ZnPXJlbGVhc2UtemxpYgorCit2Yy1zc2w6ICQoVkMpCisJY2QgbGliCisJbm1ha2UgL2YgTWFrZWZpbGUuJChWQykgY2ZnPXJlbGVhc2Utc3NsCisJY2QgLi5cc3JjCisJbm1ha2UgL2YgTWFrZWZpbGUuJChWQykgY2ZnPXJlbGVhc2Utc3NsCisKK3ZjLXNzbC16bGliOiAkKFZDKQorCWNkIGxpYgorCW5tYWtlIC9mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlLXNzbC16bGliCisJY2QgLi5cc3JjCisJbm1ha2UgL2YgTWFrZWZpbGUuJChWQykgY2ZnPXJlbGVhc2Utc3NsLXpsaWIKKwordmMteDY0LXNzbC16bGliOiAkKFZDKQorCWNkIGxpYgorCW5tYWtlIC9mIE1ha2VmaWxlLiQoVkMpIE1BQ0hJTkU9eDY0IGNmZz1yZWxlYXNlLXNzbC16bGliCisJY2QgLi5cc3JjCisJbm1ha2UgL2YgTWFrZWZpbGUuJChWQykgTUFDSElORT14NjQgY2ZnPXJlbGVhc2Utc3NsLXpsaWIKKwordmMtc3NsLWRsbDogJChWQykKKwljZCBsaWIKKwlubWFrZSAvZiBNYWtlZmlsZS4kKFZDKSBjZmc9cmVsZWFzZS1zc2wtZGxsCisJY2QgLi5cc3JjCisJbm1ha2UgL2YgTWFrZWZpbGUuJChWQykgY2ZnPXJlbGVhc2Utc3NsLWRsbAorCit2Yy1kbGwtc3NsLWRsbDogJChWQykKKwljZCBsaWIKKwlubWFrZSAvZiBNYWtlZmlsZS4kKFZDKSBjZmc9cmVsZWFzZS1kbGwtc3NsLWRsbAorCWNkIC4uXHNyYworCW5tYWtlIC9mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlLWRsbC1zc2wtZGxsCisKK3ZjLWRsbDogJChWQykKKwljZCBsaWIKKwlubWFrZSAvZiBNYWtlZmlsZS4kKFZDKSBjZmc9cmVsZWFzZS1kbGwKKwljZCAuLlxzcmMKKwlubWFrZSAvZiBNYWtlZmlsZS4kKFZDKSBjZmc9cmVsZWFzZS1kbGwKKwordmMtZGxsLXpsaWItZGxsOiAkKFZDKQorCWNkIGxpYgorCW5tYWtlIC9mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlLWRsbC16bGliLWRsbAorCWNkIC4uXHNyYworCW5tYWtlIC9mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlLWRsbC16bGliLWRsbAorCit2Yy1kbGwtc3NsLWRsbC16bGliLWRsbDogJChWQykKKwljZCBsaWIKKwlubWFrZSAvZiBNYWtlZmlsZS4kKFZDKSBjZmc9cmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbAorCWNkIC4uXHNyYworCW5tYWtlIC9mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsCisKK3ZjLXNzbC1kbGwtemxpYi1kbGw6ICQoVkMpCisJY2QgbGliCisJbm1ha2UgL2YgTWFrZWZpbGUuJChWQykgY2ZnPXJlbGVhc2Utc3NsLWRsbC16bGliLWRsbAorCWNkIC4uXHNyYworCW5tYWtlIC9mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlLXNzbC1kbGwtemxpYi1kbGwKKwordmMtemxpYi1kbGw6ICQoVkMpCisJY2QgbGliCisJbm1ha2UgL2YgTWFrZWZpbGUuJChWQykgY2ZnPXJlbGVhc2UtemxpYi1kbGwKKwljZCAuLlxzcmMKKwlubWFrZSAvZiBNYWtlZmlsZS4kKFZDKSBjZmc9cmVsZWFzZS16bGliLWRsbAorCit2Yy1zc3BpOiAkKFZDKQorCWNkIGxpYgorCW5tYWtlIC9mIE1ha2VmaWxlLiQoVkMpIGNmZz1yZWxlYXNlIFdJTkRPV1NfU1NQST0xCisJY2QgLi5cc3JjCisJbm1ha2UgL2YgTWFrZWZpbGUuJChWQykgY2ZnPXJlbGVhc2UgV0lORE9XU19TU1BJPTEKKworZGpncHA6CisJJChNQUtFKSAtQyBsaWIgLWYgTWFrZWZpbGUuZGoKKwkkKE1BS0UpIC1DIHNyYyAtZiBNYWtlZmlsZS5kagorCitjeWd3aW46CisJLi9jb25maWd1cmUKKwltYWtlCisKK2N5Z3dpbi1zc2w6CisJLi9jb25maWd1cmUgLS13aXRoLXNzbAorCW1ha2UKKworYW1pZ2E6CisJY2QgLi9saWIgJiYgbWFrZSAtZiBtYWtlZmlsZS5hbWlnYQorCWNkIC4vc3JjICYmIG1ha2UgLWYgbWFrZWZpbGUuYW1pZ2EKKworbmV0d2FyZToKKwkkKE1BS0UpIC1DIGxpYiAtZiBNYWtlZmlsZS5uZXR3YXJlCisJJChNQUtFKSAtQyBzcmMgLWYgTWFrZWZpbGUubmV0d2FyZQorCituZXR3YXJlLWNsZWFuOgorCSQoTUFLRSkgLUMgbGliIC1mIE1ha2VmaWxlLm5ldHdhcmUgY2xlYW4KKwkkKE1BS0UpIC1DIHNyYyAtZiBNYWtlZmlsZS5uZXR3YXJlIGNsZWFuCisJJChNQUtFKSAtQyBkb2NzL2V4YW1wbGVzIC1mIE1ha2VmaWxlLm5ldHdhcmUgY2xlYW4KKworbmV0d2FyZS12Y2xlYW4gbmV0d2FyZS1kaXN0Y2xlYW46CisJJChNQUtFKSAtQyBsaWIgLWYgTWFrZWZpbGUubmV0d2FyZSB2Y2xlYW4KKwkkKE1BS0UpIC1DIHNyYyAtZiBNYWtlZmlsZS5uZXR3YXJlIHZjbGVhbgorCSQoTUFLRSkgLUMgZG9jcy9leGFtcGxlcyAtZiBNYWtlZmlsZS5uZXR3YXJlIHZjbGVhbgorCituZXR3YXJlLWluc3RhbGw6CisJJChNQUtFKSAtQyBsaWIgLWYgTWFrZWZpbGUubmV0d2FyZSBpbnN0YWxsCisJJChNQUtFKSAtQyBzcmMgLWYgTWFrZWZpbGUubmV0d2FyZSBpbnN0YWxsCisKK25ldHdhcmUtZXhhbXBsZXMtJToKKwkkKE1BS0UpIC1DIGRvY3MvZXhhbXBsZXMgLWYgTWFrZWZpbGUubmV0d2FyZSBDRkc9JEAKKworbmV0d2FyZS0lOgorCSQoTUFLRSkgLUMgbGliIC1mIE1ha2VmaWxlLm5ldHdhcmUgQ0ZHPSRACisJJChNQUtFKSAtQyBzcmMgLWYgTWFrZWZpbGUubmV0d2FyZSBDRkc9JEAKKwordW5peDogYWxsCisKK3VuaXgtc3NsOiBzc2wKKworbGludXg6IGFsbAorCitsaW51eC1zc2w6IHNzbAorCisjIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIHZjNi4KK3ZjNjoKKwordmM4OiBsaWIvTWFrZWZpbGUudmM4IHNyYy9NYWtlZmlsZS52YzgKKworbGliL01ha2VmaWxlLnZjODogbGliL01ha2VmaWxlLnZjNgorCUBlY2hvICJnZW5lcmF0ZSAkQCIKKwlAc2VkIC1lICJzIy9HWCAvRFdJTjMyIC9ZWCMvRUhzYyAvRFdJTjMyIyIgLWUgInMjL0daIy9SVEMxIyIgLWUgInMvd3MyXzMyLmxpYi93czJfMzIubGliIGJ1ZmZlcm92ZXJmbG93dS5saWIvZyIgLWUgInMvVkM2L1ZDOC9nIiBsaWIvTWFrZWZpbGUudmM2ID4gbGliL01ha2VmaWxlLnZjOAorCitzcmMvTWFrZWZpbGUudmM4OiBzcmMvTWFrZWZpbGUudmM2CisJQGVjaG8gImdlbmVyYXRlICRAIgorCUBzZWQgLWUgInMjL0dYIC9EV0lOMzIgL1lYIy9FSHNjIC9EV0lOMzIjIiAtZSAicyMvR1ojL1JUQzEjIiAtZSAicy93czJfMzIubGliL3dzMl8zMi5saWIgYnVmZmVyb3ZlcmZsb3d1LmxpYi9nIiAtZSAicy9WQzYvVkM4L2ciIHNyYy9NYWtlZmlsZS52YzYgPiBzcmMvTWFrZWZpbGUudmM4CisKKyMgVkM5IG1ha2VmaWxlcyBhcmUgZm9yIHVzZSB3aXRoIFZTMjAwOAordmM5OiBsaWIvTWFrZWZpbGUudmM5IHNyYy9NYWtlZmlsZS52YzkKKworbGliL01ha2VmaWxlLnZjOTogbGliL01ha2VmaWxlLnZjNgorCUBlY2hvICJnZW5lcmF0ZSAkQCIKKwlAc2VkIC1lICJzIy9HWCAvRFdJTjMyIC9ZWCMvRUhzYyAvRFdJTjMyIyIgLWUgInMjL0daIy9SVEMxIyIgLWUgInMvd3MyXzMyLmxpYi93czJfMzIubGliL2ciIC1lICJzL3ZjNi92YzkvZyIgLWUgInMvVkM2L1ZDOS9nIiBsaWIvTWFrZWZpbGUudmM2ID4gbGliL01ha2VmaWxlLnZjOQorCitzcmMvTWFrZWZpbGUudmM5OiBzcmMvTWFrZWZpbGUudmM2CisJQGVjaG8gImdlbmVyYXRlICRAIgorCUBzZWQgLWUgInMjL0dYIC9EV0lOMzIgL1lYIy9FSHNjIC9EV0lOMzIjIiAtZSAicyMvR1ojL1JUQzEjIiAtZSAicy93czJfMzIubGliL3dzMl8zMi5saWIvZyIgLWUgInMvdmM2L3ZjOS9nIiAtZSAicy9WQzYvVkM5L2ciIHNyYy9NYWtlZmlsZS52YzYgPiBzcmMvTWFrZWZpbGUudmM5CisKKyMgVkMxMCBtYWtlZmlsZXMgYXJlIGZvciB1c2Ugd2l0aCBWUzIwMTAKK3ZjMTA6IGxpYi9NYWtlZmlsZS52YzEwIHNyYy9NYWtlZmlsZS52YzEwCisKK2xpYi9NYWtlZmlsZS52YzEwOiBsaWIvTWFrZWZpbGUudmM2CisJQGVjaG8gImdlbmVyYXRlICRAIgorCUBzZWQgLWUgInMjL0dYIC9EV0lOMzIgL1lYIy9FSHNjIC9EV0lOMzIjIiAtZSAicyMvR1ojL1JUQzEjIiAtZSAicy93czJfMzIubGliL3dzMl8zMi5saWIvZyIgLWUgInMvdmM2L3ZjMTAvZyIgLWUgInMvVkM2L1ZDMTAvZyIgbGliL01ha2VmaWxlLnZjNiA+IGxpYi9NYWtlZmlsZS52YzEwCisKK3NyYy9NYWtlZmlsZS52YzEwOiBzcmMvTWFrZWZpbGUudmM2CisJQGVjaG8gImdlbmVyYXRlICRAIgorCUBzZWQgLWUgInMjL0dYIC9EV0lOMzIgL1lYIy9FSHNjIC9EV0lOMzIjIiAtZSAicyMvR1ojL1JUQzEjIiAtZSAicy93czJfMzIubGliL3dzMl8zMi5saWIvZyIgLWUgInMvdmM2L3ZjMTAvZyIgLWUgInMvVkM2L1ZDMTAvZyIgc3JjL01ha2VmaWxlLnZjNiA+IHNyYy9NYWtlZmlsZS52YzEwCisKK2NhLWJ1bmRsZTogbGliL21rLWNhLWJ1bmRsZS5wbAorCUBlY2hvICJnZW5lcmF0ZSBhIGZyZXNoIGNhLWJ1bmRsZS5jcnQiCisJQHBlcmwgJDwgLWIgLWwgLXUgbGliL2NhLWJ1bmRsZS5jcnQKKworY2EtZmlyZWZveDogbGliL2ZpcmVmb3gtZGIycGVtLnNoCisJQGVjaG8gImdlbmVyYXRlIGEgZnJlc2ggY2EtYnVuZGxlLmNydCIKKwkuL2xpYi9maXJlZm94LWRiMnBlbS5zaCBsaWIvY2EtYnVuZGxlLmNydApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvTWFrZWZpbGUuYW0gYi9jdXJsLTcuMjUuMC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmE5Y2I0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNjEgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbgorCitBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorCitDTUFLRV9ESVNUID0gQ01ha2VMaXN0cy50eHQgQ01ha2UvQ01ha2VDb25maWd1cmFibGVGaWxlLmluCQlcCitDTWFrZS9DdXJsQ2hlY2tDU291cmNlQ29tcGlsZXMuY21ha2UgQ01ha2UvQ3VybENoZWNrQ1NvdXJjZVJ1bnMuY21ha2UJXAorQ01ha2UvQ3VybFRlc3RzLmMgQ01ha2UvRmluZE9wZW5TU0wuY21ha2UgQ01ha2UvRmluZFpMSUIuY21ha2UJCVwKK0NNYWtlL090aGVyVGVzdHMuY21ha2UgQ01ha2UvUGxhdGZvcm1zL1dpbmRvd3NDYWNoZS5jbWFrZQkJXAorQ01ha2UvVXRpbGl0aWVzLmNtYWtlIGluY2x1ZGUvY3VybC9jdXJsYnVpbGQuaC5jbWFrZQorCitXSU5CVUlMRF9ESVNUID0gd2luYnVpbGQvQlVJTEQuV0lORE9XUy50eHQgd2luYnVpbGQvZ2VuX3Jlc3BfZmlsZS5iYXQJXAord2luYnVpbGQvTWFrZWZpbGVCdWlsZC52YyB3aW5idWlsZC9NYWtlZmlsZS52YworCitFWFRSQV9ESVNUID0gQ0hBTkdFUyBDT1BZSU5HIG1ha2V0Z3ogTWFrZWZpbGUuZGlzdCBjdXJsLWNvbmZpZy5pbglcCisgY3VybC1zdHlsZS5lbCBzYW1wbGUuZW1hY3MgUkVMRUFTRS1OT1RFUyBidWlsZGNvbmYgCVwKKyBsaWJjdXJsLnBjLmluIHZjNmN1cmwuZHN3IE1hY09TWC1GcmFtZXdvcmsgQW5kcm9pZC5tayAkKENNQUtFX0RJU1QpCVwKKyBNYWtlZmlsZS5tc3ZjLm5hbWVzICQoV0lOQlVJTERfRElTVCkgbGliL2xpYmN1cmwudmVycy5pbgorCitiaW5fU0NSSVBUUyA9IGN1cmwtY29uZmlnCisKK1NVQkRJUlMgPSBsaWIgc3JjIGluY2x1ZGUKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykgdGVzdHMgcGFja2FnZXMgZG9jcworCitwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCitwa2djb25maWdfREFUQSA9IGxpYmN1cmwucGMKKworZGlzdC1ob29rOgorCXJtIC1yZiAkKHRvcF9idWlsZGRpcikvdGVzdHMvbG9nCisJZmluZCAkKGRpc3RkaXIpIC1uYW1lICIqLmRpc3QiIC1leGVjIHJtIHt9IFw7CisJKGRpc3RpdD1gZmluZCAkKHNyY2RpcikgLW5hbWUgIiouZGlzdCIgfCBncmVwIC12IC4vYXJlcy9gOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0aXQ7IGRvIFwKKwkgIHN0cmlwPWBlY2hvICQkZmlsZSB8IHNlZCAtZSBzL14kKHNyY2RpcikvLyAtZSBzL1wuZGlzdC8vYDsgXAorCSAgY3AgJCRmaWxlICQoZGlzdGRpcikkJHN0cmlwOyBcCisJZG9uZSkKKworaHRtbDoKKwljZCBkb2NzOyBtYWtlIGh0bWwKKworcGRmOgorCWNkIGRvY3M7IG1ha2UgcGRmCisKK2NoZWNrOiB0ZXN0IGV4YW1wbGVzCisKK2lmIENST1NTQ09NUElMSU5HCit0ZXN0LWZ1bGw6IHRlc3QKK3Rlc3QtdG9ydHVyZTogdGVzdAorCit0ZXN0OgorCUBlY2hvICJOT1RJQ0U6IHdlIGNhbid0IHJ1biB0aGUgdGVzdHMgd2hlbiBjcm9zcy1jb21waWxpbmchIgorCitlbHNlCisKK3Rlc3Q6CisJQChjZCB0ZXN0czsgJChNQUtFKSBhbGwgcXVpZXQtdGVzdCkKKwordGVzdC1mdWxsOgorCUAoY2QgdGVzdHM7ICQoTUFLRSkgYWxsIGZ1bGwtdGVzdCkKKwordGVzdC10b3J0dXJlOgorCUAoY2QgdGVzdHM7ICQoTUFLRSkgYWxsIHRvcnR1cmUtdGVzdCkKKworZW5kaWYKKworZXhhbXBsZXM6CisJQChjZCBkb2NzL2V4YW1wbGVzOyAkKE1BS0UpIGNoZWNrKQorCitjbGVhbi1sb2NhbDoKKwlAKGNkIHRlc3RzOyAkKE1BS0UpIGNsZWFuKQorCUAoY2QgZG9jczsgJChNQUtFKSBjbGVhbikKKworIworIyBCdWlsZCBzb3VyY2UgYW5kIGJpbmFyeSBycG1zLiBGb3IgcnBtLTMuMCBhbmQgYWJvdmUsIHRoZSB+Ly5ycG1tYWNyb3MKKyMgbXVzdCBjb250YWluIHRoZSBmb2xsb3dpbmcgbGluZToKKyMgJV90b3BkaXIgL2hvbWUvbG9pYy9sb2NhbC9ycG0KKyMgYW5kIHRoYXQgL2hvbWUvbG9pYy9sb2NhbC9ycG0gY29udGFpbnMgdGhlIGRpcmVjdG9yeSBTT1VSQ0VTLCBCVUlMRCBldGMuCisjCisjIGNkIC9ob21lL2xvaWMvbG9jYWwvcnBtIDsgbWtkaXIgLXAgU09VUkNFUyBCVUlMRCBSUE1TL2kzODYgU1BFQ1MgU1JQTVMKKyMKKyMgSWYgYWRkaXRpb25hbCBjb25maWd1cmUgZmxhZ3MgYXJlIG5lZWRlZCB0byBidWlsZCB0aGUgcGFja2FnZSwgYWRkIHRoZQorIyBmb2xsb3dpbmcgaW4gfi8ucnBtbWFjcm9zCisjICVjb25maWd1cmUgQ0ZMQUdTPSIle29wdGZsYWdzfSIgLi9jb25maWd1cmUgJXtfdGFyZ2V0X3BsYXRmb3JtfSAtLXByZWZpeD0le19wcmVmaXh9ICR7QU1fQ09ORklHRkxBR1N9CisjIGFuZCBydW4gbWFrZSBycG0gaW4gdGhlIGZvbGxvd2luZyB3YXk6CisjIEFNX0NPTkZJR0ZMQUdTPSctLXdpdGgtdXJpPS9ob21lL3VzZXJzL2xvaWMvbG9jYWwvUmVkSGF0LTYuMicgbWFrZSBycG0KKyMKKworcnBtczoKKwkkKE1BS0UpIFJQTURJU1Q9Y3VybCBycG0KKwkkKE1BS0UpIFJQTURJU1Q9Y3VybC1zc2wgcnBtCisKK3JwbToKKwlSUE1fVE9QRElSPWBycG0gLS1zaG93cmMgfCAkKFBFUkwpIC1uIC1lICdwcmludCBpZihzLy4qX3RvcGRpclxzKyguKikvJCQxLyknYCA7IFwKKwljcCAkKHNyY2RpcikvcGFja2FnZXMvTGludXgvUlBNLyQoUlBNRElTVCkuc3BlYyAkJFJQTV9UT1BESVIvU1BFQ1MgOyBcCisJY3AgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci5neiAkJFJQTV9UT1BESVIvU09VUkNFUyA7IFwKKwlycG0gLWJhIC0tY2xlYW4gLS1ybXNvdXJjZSAkJFJQTV9UT1BESVIvU1BFQ1MvJChSUE1ESVNUKS5zcGVjIDsgXAorCW12ICQkUlBNX1RPUERJUi9SUE1TL2kzODYvJChSUE1ESVNUKS0qLnJwbSAuIDsgXAorCW12ICQkUlBNX1RPUERJUi9TUlBNUy8kKFJQTURJU1QpLSouc3JjLnJwbSAuCisKKyMKKyMgQnVpbGQgYSBTb2xhcmlzIHBrZ2FkZCBmb3JtYXQgZmlsZQorIyBydW4gJ21ha2UgcGtnYWRkJyBvbmNlIHlvdSd2ZSBkb25lICcuL2NvbmZpZ3VyZScgYW5kICdtYWtlJyB0byBtYWtlIGEgU29sYXJpcyBwa2dhZGQgZm9ybWF0CisjIGZpbGUgKHdoaWNoIGVuZHMgdXAgYmFjayBpbiB0aGlzIGRpcmVjdG9yeSkuCisjIFRoZSBwa2dhZGQgZmlsZSBpcyBpbiAncGtndHJhbnMnIGZvcm1hdCwgc28gdG8gaW5zdGFsbCBvbiBTb2xhcmlzLCBkbworIyBwa2dhZGQgLWQgLi9IQVhYY3VybC0qCisjCisKKyMgZ2FrIC0gbGlidG9vbCByZXF1aXJlcyBhbiBhYnNvdWx0ZSBkaXJlY3RvcnksIGhlbmNlIHRoZSBwd2QgYmVsb3cuLi4KK3BrZ2FkZDoKKwl1bWFzayAwMjIgOyBcCisJbWFrZSBpbnN0YWxsIERFU1RESVI9YC9iaW4vcHdkYC9wYWNrYWdlcy9Tb2xhcmlzL3Jvb3QgOyBcCisJY2F0IENPUFlJTkcgPiAkKHNyY2RpcikvcGFja2FnZXMvU29sYXJpcy9jb3B5cmlnaHQgOyBcCisJY2QgJChzcmNkaXIpL3BhY2thZ2VzL1NvbGFyaXMgJiYgJChNQUtFKSBwYWNrYWdlCisKKyMKKyMgQnVpbGQgYSBjeWd3aW4gYmluYXJ5IHRhcmJhbGwgaW5zdGFsbGF0aW9uIGZpbGUKKyMgcmVzdWx0aW5nIC50YXIuYnoyIGZpbGUgd2lsbCBlbmQgdXAgYXQgcGFja2FnZXMvV2luMzIvY3lnd2luCitjeWd3aW5iaW46CisJJChNQUtFKSAtQyBwYWNrYWdlcy9XaW4zMi9jeWd3aW4gY3lnd2luYmluCisKKyMgV2UgZXh0ZW5kIHRoZSBzdGFuZGFyZCBpbnN0YWxsIHdpdGggYSBjdXN0b20gaG9vazoKK2luc3RhbGwtZGF0YS1ob29rOgorCWNkIGluY2x1ZGUgJiYgJChNQUtFKSBpbnN0YWxsCisJY2QgZG9jcyAmJiAkKE1BS0UpIGluc3RhbGwKKworIyBXZSBleHRlbmQgdGhlIHN0YW5kYXJkIHVuaW5zdGFsbCB3aXRoIGEgY3VzdG9tIGhvb2s6Cit1bmluc3RhbGwtaG9vazoKKwljZCBpbmNsdWRlICYmICQoTUFLRSkgdW5pbnN0YWxsCisJY2QgZG9jcyAmJiAkKE1BS0UpIHVuaW5zdGFsbAorCitjYS1idW5kbGU6IGxpYi9tay1jYS1idW5kbGUucGwKKwlAZWNobyAiZ2VuZXJhdGUgYSBmcmVzaCBjYS1idW5kbGUuY3J0IgorCUBwZXJsICQ8IC1iIC1sIC11IGxpYi9jYS1idW5kbGUuY3J0CisKK2NhLWZpcmVmb3g6IGxpYi9maXJlZm94LWRiMnBlbS5zaAorCUBlY2hvICJnZW5lcmF0ZSBhIGZyZXNoIGNhLWJ1bmRsZS5jcnQiCisJLi9saWIvZmlyZWZveC1kYjJwZW0uc2ggbGliL2NhLWJ1bmRsZS5jcnQKKworY2hlY2tzcmM6CisJY2QgbGliICYmICQoTUFLRSkgY2hlY2tzcmMKKwljZCBzcmMgJiYgJChNQUtFKSBjaGVja3NyYwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvTWFrZWZpbGUuaW4gYi9jdXJsLTcuMjUuMC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzBlZmYwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw5MTYgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitESVNUX0NPTU1PTiA9IFJFQURNRSAkKGFtX19jb25maWd1cmVfZGVwcykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL2N1cmwtY29uZmlnLmluIFwKKwkkKHNyY2RpcikvbGliY3VybC5wYy5pbiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSBDT1BZSU5HIFwKKwljb21waWxlIGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGRlcGNvbXAgaW5zdGFsbC1zaCBsdG1haW4uc2ggXAorCW1pc3NpbmcgbWtpbnN0YWxsZGlycworc3ViZGlyID0gLgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvY3VybC1jb21waWxlcnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1jb25mb3B0cy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWZ1bmN0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW9wZW5zc2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vdmVycmlkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXJlZW50cmFudC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXN5c3RlbS5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94Yy10cmFuc2xpdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC96ejUwLXhjLW92ci5tNCAkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMgPSBjb25maWcuc3RhdHVzIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIFwKKyBjb25maWd1cmUubGluZW5vIGNvbmZpZ3VyZS5zdGF0dXMubGluZW5vCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvc3JjL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9IGN1cmwtY29uZmlnIGxpYmN1cmwucGMKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIKK2JpblNDUklQVF9JTlNUQUxMID0gJChJTlNUQUxMX1NDUklQVCkKK1NDUklQVFMgPSAkKGJpbl9TQ1JJUFRTKQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKwlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIFwKKwlwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbC1yZWN1cnNpdmUKK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK3BrZ2NvbmZpZ0RBVEFfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKQorREFUQSA9ICQocGtnY29uZmlnX0RBVEEpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorZGlzdGRpciA9ICQoUEFDS0FHRSktJChWRVJTSU9OKQordG9wX2Rpc3RkaXIgPSAkKGRpc3RkaXIpCithbV9fcmVtb3ZlX2Rpc3RkaXIgPSBcCisgIHsgdGVzdCAhIC1kICQoZGlzdGRpcikgXAorICAgIHx8IHsgZmluZCAkKGRpc3RkaXIpIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjIGNobW9kIHUrdyB7fSAnOycgXAorICAgICAgICAgJiYgcm0gLWZyICQoZGlzdGRpcik7IH07IH0KK0RJU1RfQVJDSElWRVMgPSAkKGRpc3RkaXIpLnRhci5negorR1pJUF9FTlYgPSAtLWJlc3QKK2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK2Rpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACitBTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFID0gQEJVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFQAorQlVJTERfTElCSE9TVE5BTUVfVFJVRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9UUlVFQAorQlVJTERfVU5JVFRFU1RTX0ZBTFNFID0gQEJVSUxEX1VOSVRURVNUU19GQUxTRUAKK0JVSUxEX1VOSVRURVNUU19UUlVFID0gQEJVSUxEX1VOSVRURVNUU19UUlVFQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NPTkZJR1VSRV9PUFRJT05TID0gQENPTkZJR1VSRV9PUFRJT05TQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1JPU1NDT01QSUxJTkdfRkFMU0UgPSBAQ1JPU1NDT01QSUxJTkdfRkFMU0VACitDUk9TU0NPTVBJTElOR19UUlVFID0gQENST1NTQ09NUElMSU5HX1RSVUVACitDVVJMREVCVUdfRkFMU0UgPSBAQ1VSTERFQlVHX0ZBTFNFQAorQ1VSTERFQlVHX1RSVUUgPSBAQ1VSTERFQlVHX1RSVUVACitDVVJMVkVSU0lPTiA9IEBDVVJMVkVSU0lPTkAKK0NVUkxfQ0FfQlVORExFID0gQENVUkxfQ0FfQlVORExFQAorQ1VSTF9DRkxBR19FWFRSQVMgPSBAQ1VSTF9DRkxBR19FWFRSQVNACitDVVJMX0RJU0FCTEVfRElDVCA9IEBDVVJMX0RJU0FCTEVfRElDVEAKK0NVUkxfRElTQUJMRV9GSUxFID0gQENVUkxfRElTQUJMRV9GSUxFQAorQ1VSTF9ESVNBQkxFX0ZUUCA9IEBDVVJMX0RJU0FCTEVfRlRQQAorQ1VSTF9ESVNBQkxFX0dPUEhFUiA9IEBDVVJMX0RJU0FCTEVfR09QSEVSQAorQ1VSTF9ESVNBQkxFX0hUVFAgPSBAQ1VSTF9ESVNBQkxFX0hUVFBACitDVVJMX0RJU0FCTEVfSU1BUCA9IEBDVVJMX0RJU0FCTEVfSU1BUEAKK0NVUkxfRElTQUJMRV9MREFQID0gQENVUkxfRElTQUJMRV9MREFQQAorQ1VSTF9ESVNBQkxFX0xEQVBTID0gQENVUkxfRElTQUJMRV9MREFQU0AKK0NVUkxfRElTQUJMRV9QT1AzID0gQENVUkxfRElTQUJMRV9QT1AzQAorQ1VSTF9ESVNBQkxFX1BST1hZID0gQENVUkxfRElTQUJMRV9QUk9YWUAKK0NVUkxfRElTQUJMRV9SVFNQID0gQENVUkxfRElTQUJMRV9SVFNQQAorQ1VSTF9ESVNBQkxFX1NNVFAgPSBAQ1VSTF9ESVNBQkxFX1NNVFBACitDVVJMX0RJU0FCTEVfVEVMTkVUID0gQENVUkxfRElTQUJMRV9URUxORVRACitDVVJMX0RJU0FCTEVfVEZUUCA9IEBDVVJMX0RJU0FCTEVfVEZUUEAKK0NVUkxfTElCUyA9IEBDVVJMX0xJQlNACitDVVJMX05FVFdPUktfTElCUyA9IEBDVVJMX05FVFdPUktfTElCU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TSEFSRUQgPSBARU5BQkxFX1NIQVJFREAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfR05VVExTX1NSUCA9IEBIQVZFX0dOVVRMU19TUlBACitIQVZFX0xEQVBfU1NMID0gQEhBVkVfTERBUF9TU0xACitIQVZFX0xJQlogPSBASEFWRV9MSUJaQAorSEFWRV9MSUJaX0ZBTFNFID0gQEhBVkVfTElCWl9GQUxTRUAKK0hBVkVfTElCWl9UUlVFID0gQEhBVkVfTElCWl9UUlVFQAorSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QgPSBASEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1RACitIQVZFX1NTTEVBWV9TUlAgPSBASEFWRV9TU0xFQVlfU1JQQAorSUROX0VOQUJMRUQgPSBASUROX0VOQUJMRURACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lQVjZfRU5BQkxFRCA9IEBJUFY2X0VOQUJMRURACitLUkI0X0VOQUJMRUQgPSBAS1JCNF9FTkFCTEVEQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJDVVJMX0xJQlMgPSBATElCQ1VSTF9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQU5PUFQgPSBATUFOT1BUQAorTUlNUFVSRV9GQUxTRSA9IEBNSU1QVVJFX0ZBTFNFQAorTUlNUFVSRV9UUlVFID0gQE1JTVBVUkVfVFJVRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PX1VOREVGSU5FRF9GQUxTRSA9IEBOT19VTkRFRklORURfRkFMU0VACitOT19VTkRFRklORURfVFJVRSA9IEBOT19VTkRFRklORURfVFJVRUAKK05ST0ZGID0gQE5ST0ZGQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSCA9IEBQQVRIQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACitQS0dBRERfTkFNRSA9IEBQS0dBRERfTkFNRUAKK1BLR0FERF9QS0cgPSBAUEtHQUREX1BLR0AKK1BLR0FERF9WRU5ET1IgPSBAUEtHQUREX1ZFTkRPUkAKK1BLR0NPTkZJRyA9IEBQS0dDT05GSUdACitSQU5ET01fRklMRSA9IEBSQU5ET01fRklMRUAKK1JBTkxJQiA9IEBSQU5MSUJACitSRVFVSVJFX0xJQl9ERVBTID0gQFJFUVVJUkVfTElCX0RFUFNACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NPTkFNRV9CVU1QX0ZBTFNFID0gQFNPTkFNRV9CVU1QX0ZBTFNFQAorU09OQU1FX0JVTVBfVFJVRSA9IEBTT05BTUVfQlVNUF9UUlVFQAorU1NMX0VOQUJMRUQgPSBAU1NMX0VOQUJMRURACitTVEFUSUNMSUJfRkFMU0UgPSBAU1RBVElDTElCX0ZBTFNFQAorU1RBVElDTElCX1RSVUUgPSBAU1RBVElDTElCX1RSVUVACitTVFJJUCA9IEBTVFJJUEAKK1NVUFBPUlRfRkVBVFVSRVMgPSBAU1VQUE9SVF9GRUFUVVJFU0AKK1NVUFBPUlRfUFJPVE9DT0xTID0gQFNVUFBPUlRfUFJPVE9DT0xTQAorVEVTVF9TRVJWRVJfTElCUyA9IEBURVNUX1NFUlZFUl9MSUJTQAorVVNFX0FSRVMgPSBAVVNFX0FSRVNACitVU0VfQVhUTFMgPSBAVVNFX0FYVExTQAorVVNFX0NZQVNTTCA9IEBVU0VfQ1lBU1NMQAorVVNFX0VNQkVEREVEX0FSRVNfRkFMU0UgPSBAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VACitVU0VfRU1CRURERURfQVJFU19UUlVFID0gQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVACitVU0VfR05VVExTID0gQFVTRV9HTlVUTFNACitVU0VfR05VVExTX05FVFRMRSA9IEBVU0VfR05VVExTX05FVFRMRUAKK1VTRV9MSUJSVE1QID0gQFVTRV9MSUJSVE1QQAorVVNFX0xJQlNTSDIgPSBAVVNFX0xJQlNTSDJACitVU0VfTUFOVUFMX0ZBTFNFID0gQFVTRV9NQU5VQUxfRkFMU0VACitVU0VfTUFOVUFMX1RSVUUgPSBAVVNFX01BTlVBTF9UUlVFQAorVVNFX05TUyA9IEBVU0VfTlNTQAorVVNFX09QRU5MREFQID0gQFVTRV9PUEVOTERBUEAKK1VTRV9QT0xBUlNTTCA9IEBVU0VfUE9MQVJTU0xACitVU0VfU1NMRUFZID0gQFVTRV9TU0xFQVlACitVU0VfV0lORE9XU19TU1BJID0gQFVTRV9XSU5ET1dTX1NTUElACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9ORURfRkxBVk9VUiA9IEBWRVJTSU9ORURfRkxBVk9VUkAKK1ZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFID0gQFZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFQAorVkVSU0lPTkVEX1NZTUJPTFNfVFJVRSA9IEBWRVJTSU9ORURfU1lNQk9MU19UUlVFQAorVkVSU0lPTk5VTSA9IEBWRVJTSU9OTlVNQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbGliZXh0ID0gQGxpYmV4dEAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3ViZGlycyA9IEBzdWJkaXJzQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCitBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorQ01BS0VfRElTVCA9IENNYWtlTGlzdHMudHh0IENNYWtlL0NNYWtlQ29uZmlndXJhYmxlRmlsZS5pbgkJXAorQ01ha2UvQ3VybENoZWNrQ1NvdXJjZUNvbXBpbGVzLmNtYWtlIENNYWtlL0N1cmxDaGVja0NTb3VyY2VSdW5zLmNtYWtlCVwKK0NNYWtlL0N1cmxUZXN0cy5jIENNYWtlL0ZpbmRPcGVuU1NMLmNtYWtlIENNYWtlL0ZpbmRaTElCLmNtYWtlCQlcCitDTWFrZS9PdGhlclRlc3RzLmNtYWtlIENNYWtlL1BsYXRmb3Jtcy9XaW5kb3dzQ2FjaGUuY21ha2UJCVwKK0NNYWtlL1V0aWxpdGllcy5jbWFrZSBpbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmguY21ha2UKKworV0lOQlVJTERfRElTVCA9IHdpbmJ1aWxkL0JVSUxELldJTkRPV1MudHh0IHdpbmJ1aWxkL2dlbl9yZXNwX2ZpbGUuYmF0CVwKK3dpbmJ1aWxkL01ha2VmaWxlQnVpbGQudmMgd2luYnVpbGQvTWFrZWZpbGUudmMKKworRVhUUkFfRElTVCA9IENIQU5HRVMgQ09QWUlORyBtYWtldGd6IE1ha2VmaWxlLmRpc3QgY3VybC1jb25maWcuaW4JXAorIGN1cmwtc3R5bGUuZWwgc2FtcGxlLmVtYWNzIFJFTEVBU0UtTk9URVMgYnVpbGRjb25mIAlcCisgbGliY3VybC5wYy5pbiB2YzZjdXJsLmRzdyBNYWNPU1gtRnJhbWV3b3JrIEFuZHJvaWQubWsgJChDTUFLRV9ESVNUKQlcCisgTWFrZWZpbGUubXN2Yy5uYW1lcyAkKFdJTkJVSUxEX0RJU1QpIGxpYi9saWJjdXJsLnZlcnMuaW4KKworYmluX1NDUklQVFMgPSBjdXJsLWNvbmZpZworU1VCRElSUyA9IGxpYiBzcmMgaW5jbHVkZQorRElTVF9TVUJESVJTID0gJChTVUJESVJTKSB0ZXN0cyBwYWNrYWdlcyBkb2NzCitwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCitwa2djb25maWdfREFUQSA9IGxpYmN1cmwucGMKK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CithbS0tcmVmcmVzaDoKKwlAOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgZWNobyAnIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gJzsgXAorCSAgICAgIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIE1ha2VmaWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBNYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGVjaG8gJyAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMnOyBcCisJICAgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1czs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQoc3JjZGlyKSAmJiAkKEFVVE9DT05GKQorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgJChBQ0xPQ0FMX0FNRkxBR1MpCitjdXJsLWNvbmZpZzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2N1cmwtY29uZmlnLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAorbGliY3VybC5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2xpYmN1cmwucGMuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRACitpbnN0YWxsLWJpblNDUklQVFM6ICQoYmluX1NDUklQVFMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChiaW5kaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChiaW5kaXIpIgorCUBsaXN0PSckKGJpbl9TQ1JJUFRTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGlmIHRlc3QgLWYgJCRkJCRwOyB0aGVuIFwKKwkgICAgZj1gZWNobyAiJCRwIiB8IHNlZCAnc3xeLiovfHw7JCh0cmFuc2Zvcm0pJ2A7IFwKKwkgICAgZWNobyAiICQoYmluU0NSSVBUX0lOU1RBTEwpICckJGQkJHAnICckKERFU1RESVIpJChiaW5kaXIpLyQkZiciOyBcCisJICAgICQoYmluU0NSSVBUX0lOU1RBTEwpICIkJGQkJHAiICIkKERFU1RESVIpJChiaW5kaXIpLyQkZiI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lCisKK3VuaW5zdGFsbC1iaW5TQ1JJUFRTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoYmluX1NDUklQVFMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBmPWBlY2hvICIkJHAiIHwgc2VkICdzfF4uKi98fDskKHRyYW5zZm9ybSknYDsgXAorCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChiaW5kaXIpLyQkZiciOyBcCisJICBybSAtZiAiJChERVNURElSKSQoYmluZGlyKS8kJGYiOyBcCisJZG9uZQorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbAordW5pbnN0YWxsLWluZm8tYW06CitpbnN0YWxsLXBrZ2NvbmZpZ0RBVEE6ICQocGtnY29uZmlnX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChwa2djb25maWdkaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChwa2djb25maWdkaXIpIgorCUBsaXN0PSckKHBrZ2NvbmZpZ19EQVRBKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChwa2djb25maWdEQVRBX0lOU1RBTEwpICckJGQkJHAnICckKERFU1RESVIpJChwa2djb25maWdkaXIpLyQkZiciOyBcCisJICAkKHBrZ2NvbmZpZ0RBVEFfSU5TVEFMTCkgIiQkZCQkcCIgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvJCRmIjsgXAorCWRvbmUKKwordW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChwa2djb25maWdfREFUQSknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvJCRmJyI7IFwKKwkgIHJtIC1mICIkKERFU1RESVIpJChwa2djb25maWdkaXIpLyQkZiI7IFwKKwlkb25lCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCittb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi1yZWN1cnNpdmUgXAorbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmU6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKwlta2RpciAkKGRpc3RkaXIpCisJJChta2Rpcl9wKSAkKGRpc3RkaXIpLy4gJChkaXN0ZGlyKS9DTWFrZSAkKGRpc3RkaXIpL0NNYWtlL1BsYXRmb3JtcyAkKGRpc3RkaXIpL2luY2x1ZGUvY3VybCAkKGRpc3RkaXIpL2xpYiAkKGRpc3RkaXIpL200ICQoZGlzdGRpcikvcGFja2FnZXMvQUlYL1JQTSAkKGRpc3RkaXIpL3BhY2thZ2VzL0VQTSAkKGRpc3RkaXIpL3BhY2thZ2VzL0xpbnV4L1JQTSAkKGRpc3RkaXIpL3dpbmJ1aWxkCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQobWtkaXJfcCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKKwkgICAgdG9wX2Rpc3RkaXI9YCQoYW1fX2NkKSAkKHRvcF9kaXN0ZGlyKSAmJiBwd2RgOyBcCisJICAgIChjZCAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCisJICBkaXN0LWhvb2sKKwktZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC03NTUgXAorCQktZXhlYyBjaG1vZCB1K3J3eCxnbytyeCB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1saW5rcyAxIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDAwIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1leGVjICQoU0hFTEwpICQoaW5zdGFsbF9zaCkgLWMgLW0gYStyIHt9IHt9IFw7IFwKKwl8fCBjaG1vZCAtUiBhK3IgJChkaXN0ZGlyKQorZGlzdC1nemlwOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS50YXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC1iemlwMjogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBiemlwMiAtOSAtYyA+JChkaXN0ZGlyKS50YXIuYnoyCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtdGFyWjogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBjb21wcmVzcyAtYyA+JChkaXN0ZGlyKS50YXIuWgorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXNoYXI6IGRpc3RkaXIKKwlzaGFyICQoZGlzdGRpcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikuc2hhci5negorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXppcDogZGlzdGRpcgorCS1ybSAtZiAkKGRpc3RkaXIpLnppcAorCXppcCAtcnEgJChkaXN0ZGlyKS56aXAgJChkaXN0ZGlyKQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0IGRpc3QtYWxsOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS50YXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworIyBUaGlzIHRhcmdldCB1bnRhcnMgdGhlIGRpc3QgZmlsZSBhbmQgdHJpZXMgYSBWUEFUSCBjb25maWd1cmF0aW9uLiAgVGhlbgorIyBpdCBndWFyYW50ZWVzIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBpcyBzZWxmLWNvbnRhaW5lZCBieSBtYWtpbmcgYW5vdGhlcgorIyB0YXJmaWxlLgorZGlzdGNoZWNrOiBkaXN0CisJY2FzZSAnJChESVNUX0FSQ0hJVkVTKScgaW4gXAorCSoudGFyLmd6KikgXAorCSAgR1pJUD0kKEdaSVBfRU5WKSBndW56aXAgLWMgJChkaXN0ZGlyKS50YXIuZ3ogfCAkKGFtX191bnRhcikgOztcCisJKi50YXIuYnoyKikgXAorCSAgYnVuemlwMiAtYyAkKGRpc3RkaXIpLnRhci5iejIgfCAkKGFtX191bnRhcikgOztcCisJKi50YXIuWiopIFwKKwkgIHVuY29tcHJlc3MgLWMgJChkaXN0ZGlyKS50YXIuWiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnNoYXIuZ3oqKSBcCisJICBHWklQPSQoR1pJUF9FTlYpIGd1bnppcCAtYyAkKGRpc3RkaXIpLnNoYXIuZ3ogfCB1bnNoYXIgOztcCisJKi56aXAqKSBcCisJICB1bnppcCAkKGRpc3RkaXIpLnppcCA7O1wKKwllc2FjCisJY2htb2QgLVIgYS13ICQoZGlzdGRpcik7IGNobW9kIGErdyAkKGRpc3RkaXIpCisJbWtkaXIgJChkaXN0ZGlyKS9fYnVpbGQKKwlta2RpciAkKGRpc3RkaXIpL19pbnN0CisJY2htb2QgYS13ICQoZGlzdGRpcikKKwlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKKwkgICYmIGRjX2Rlc3RkaXI9IiQke1RNUERJUi0vdG1wfS9hbS1kYy0kJCQkLyIgXAorCSAgJiYgY2QgJChkaXN0ZGlyKS9fYnVpbGQgXAorCSAgJiYgLi4vY29uZmlndXJlIC0tc3JjZGlyPS4uIC0tcHJlZml4PSIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGR2aSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjayBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGxjaGVjayBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB1bmluc3RhbGwgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19pbnN0YWxsX2Jhc2UiIFwKKwkgICAgICAgIGRpc3R1bmluc3RhbGxjaGVjayBcCisJICAmJiBjaG1vZCAtUiBhLXcgIiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAmJiAoeyBcCisJICAgICAgIChjZCAuLi8uLiAmJiB1bWFzayAwNzcgJiYgbWtkaXIgIiQkZGNfZGVzdGRpciIpIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBpbnN0YWxsIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiB1bmluc3RhbGwgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIFwKKwkgICAgICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2tfZGlyPSIkJGRjX2Rlc3RkaXIiIGRpc3R1bmluc3RhbGxjaGVjazsgXAorCSAgICAgIH0gfHwgeyBybSAtcmYgIiQkZGNfZGVzdGRpciI7IGV4aXQgMTsgfSkgXAorCSAgJiYgcm0gLXJmICIkJGRjX2Rlc3RkaXIiIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3QgXAorCSAgJiYgcm0gLXJmICQoRElTVF9BUkNISVZFUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdGNsZWFuY2hlY2sKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKwlAKGVjaG8gIiQoZGlzdGRpcikgYXJjaGl2ZXMgcmVhZHkgZm9yIGRpc3RyaWJ1dGlvbjogIjsgXAorCSAgbGlzdD0nJChESVNUX0FSQ0hJVkVTKSc7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAkJGk7IGRvbmUpIHwgXAorCSAgc2VkIC1lICcxe2g7cy8uLz0vZztwO3g7fScgLWUgJyQke3A7eDt9JworZGlzdHVuaW5zdGFsbGNoZWNrOgorCUBjZCAkKGRpc3R1bmluc3RhbGxjaGVja19kaXIpIFwKKwkmJiB0ZXN0IGAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1sZSAxIFwKKwkgICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGFmdGVyIHVuaW5zdGFsbDoiIDsgXAorCSAgICAgICAgaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW4gXAorCSAgICAgICAgICBlY2hvICIgIChjaGVjayBERVNURElSIHN1cHBvcnQpIjsgXAorCSAgICAgICAgZmkgOyBcCisJICAgICAgICAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICAgZXhpdCAxOyB9ID4mMgorZGlzdGNsZWFuY2hlY2s6IGRpc3RjbGVhbgorCUBpZiB0ZXN0ICckKHNyY2RpciknID0gLiA7IHRoZW4gXAorCSAgZWNobyAiRVJST1I6IGRpc3RjbGVhbmNoZWNrIGNhbiBvbmx5IHJ1biBmcm9tIGEgVlBBVEggYnVpbGQiIDsgXAorCSAgZXhpdCAxIDsgXAorCWZpCisJQHRlc3QgYCQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtZXEgMCBcCisJICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGluIGJ1aWxkIGRpcmVjdG9yeSBhZnRlciBkaXN0Y2xlYW46IiA7IFwKKwkgICAgICAgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICBleGl0IDE7IH0gPiYyCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoU0NSSVBUUykgJChEQVRBKQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChta2Rpcl9wKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWRhdGEtaG9vaworCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluU0NSSVBUUworCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKKwktcm0gLXJmICQodG9wX3NyY2RpcikvYXV0b200dGUuY2FjaGUKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluU0NSSVBUUyB1bmluc3RhbGwtaW5mby1hbSBcCisJdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEEKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB1bmluc3RhbGwtaG9vaworCit1bmluc3RhbGwtaW5mbzogdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKKy5QSE9OWTogJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBhbS0tcmVmcmVzaCBjaGVjayBcCisJY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIFwKKwljbGVhbi1yZWN1cnNpdmUgY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3QgZGlzdC1hbGwgZGlzdC1iemlwMiBcCisJZGlzdC1nemlwIGRpc3QtaG9vayBkaXN0LXNoYXIgZGlzdC10YXJaIGRpc3QtemlwIGRpc3RjaGVjayBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgXAorCWRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWJpblNDUklQVFMgaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kYXRhLWhvb2sgaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWJpblNDUklQVFMgdW5pbnN0YWxsLWhvb2sgdW5pbnN0YWxsLWluZm8tYW0gXAorCXVuaW5zdGFsbC1wa2djb25maWdEQVRBCisKKworZGlzdC1ob29rOgorCXJtIC1yZiAkKHRvcF9idWlsZGRpcikvdGVzdHMvbG9nCisJZmluZCAkKGRpc3RkaXIpIC1uYW1lICIqLmRpc3QiIC1leGVjIHJtIHt9IFw7CisJKGRpc3RpdD1gZmluZCAkKHNyY2RpcikgLW5hbWUgIiouZGlzdCIgfCBncmVwIC12IC4vYXJlcy9gOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0aXQ7IGRvIFwKKwkgIHN0cmlwPWBlY2hvICQkZmlsZSB8IHNlZCAtZSBzL14kKHNyY2RpcikvLyAtZSBzL1wuZGlzdC8vYDsgXAorCSAgY3AgJCRmaWxlICQoZGlzdGRpcikkJHN0cmlwOyBcCisJZG9uZSkKKworaHRtbDoKKwljZCBkb2NzOyBtYWtlIGh0bWwKKworcGRmOgorCWNkIGRvY3M7IG1ha2UgcGRmCisKK2NoZWNrOiB0ZXN0IGV4YW1wbGVzCisKK0BDUk9TU0NPTVBJTElOR19UUlVFQHRlc3QtZnVsbDogdGVzdAorQENST1NTQ09NUElMSU5HX1RSVUVAdGVzdC10b3J0dXJlOiB0ZXN0CisKK0BDUk9TU0NPTVBJTElOR19UUlVFQHRlc3Q6CitAQ1JPU1NDT01QSUxJTkdfVFJVRUAJQGVjaG8gIk5PVElDRTogd2UgY2FuJ3QgcnVuIHRoZSB0ZXN0cyB3aGVuIGNyb3NzLWNvbXBpbGluZyEiCisKK0BDUk9TU0NPTVBJTElOR19GQUxTRUB0ZXN0OgorQENST1NTQ09NUElMSU5HX0ZBTFNFQAlAKGNkIHRlc3RzOyAkKE1BS0UpIGFsbCBxdWlldC10ZXN0KQorCitAQ1JPU1NDT01QSUxJTkdfRkFMU0VAdGVzdC1mdWxsOgorQENST1NTQ09NUElMSU5HX0ZBTFNFQAlAKGNkIHRlc3RzOyAkKE1BS0UpIGFsbCBmdWxsLXRlc3QpCisKK0BDUk9TU0NPTVBJTElOR19GQUxTRUB0ZXN0LXRvcnR1cmU6CitAQ1JPU1NDT01QSUxJTkdfRkFMU0VACUAoY2QgdGVzdHM7ICQoTUFLRSkgYWxsIHRvcnR1cmUtdGVzdCkKKworZXhhbXBsZXM6CisJQChjZCBkb2NzL2V4YW1wbGVzOyAkKE1BS0UpIGNoZWNrKQorCitjbGVhbi1sb2NhbDoKKwlAKGNkIHRlc3RzOyAkKE1BS0UpIGNsZWFuKQorCUAoY2QgZG9jczsgJChNQUtFKSBjbGVhbikKKworIworIyBCdWlsZCBzb3VyY2UgYW5kIGJpbmFyeSBycG1zLiBGb3IgcnBtLTMuMCBhbmQgYWJvdmUsIHRoZSB+Ly5ycG1tYWNyb3MKKyMgbXVzdCBjb250YWluIHRoZSBmb2xsb3dpbmcgbGluZToKKyMgJV90b3BkaXIgL2hvbWUvbG9pYy9sb2NhbC9ycG0KKyMgYW5kIHRoYXQgL2hvbWUvbG9pYy9sb2NhbC9ycG0gY29udGFpbnMgdGhlIGRpcmVjdG9yeSBTT1VSQ0VTLCBCVUlMRCBldGMuCisjCisjIGNkIC9ob21lL2xvaWMvbG9jYWwvcnBtIDsgbWtkaXIgLXAgU09VUkNFUyBCVUlMRCBSUE1TL2kzODYgU1BFQ1MgU1JQTVMKKyMKKyMgSWYgYWRkaXRpb25hbCBjb25maWd1cmUgZmxhZ3MgYXJlIG5lZWRlZCB0byBidWlsZCB0aGUgcGFja2FnZSwgYWRkIHRoZQorIyBmb2xsb3dpbmcgaW4gfi8ucnBtbWFjcm9zCisjICVjb25maWd1cmUgQ0ZMQUdTPSIle29wdGZsYWdzfSIgLi9jb25maWd1cmUgJXtfdGFyZ2V0X3BsYXRmb3JtfSAtLXByZWZpeD0le19wcmVmaXh9ICR7QU1fQ09ORklHRkxBR1N9CisjIGFuZCBydW4gbWFrZSBycG0gaW4gdGhlIGZvbGxvd2luZyB3YXk6CisjIEFNX0NPTkZJR0ZMQUdTPSctLXdpdGgtdXJpPS9ob21lL3VzZXJzL2xvaWMvbG9jYWwvUmVkSGF0LTYuMicgbWFrZSBycG0KKyMKKworcnBtczoKKwkkKE1BS0UpIFJQTURJU1Q9Y3VybCBycG0KKwkkKE1BS0UpIFJQTURJU1Q9Y3VybC1zc2wgcnBtCisKK3JwbToKKwlSUE1fVE9QRElSPWBycG0gLS1zaG93cmMgfCAkKFBFUkwpIC1uIC1lICdwcmludCBpZihzLy4qX3RvcGRpclxzKyguKikvJCQxLyknYCA7IFwKKwljcCAkKHNyY2RpcikvcGFja2FnZXMvTGludXgvUlBNLyQoUlBNRElTVCkuc3BlYyAkJFJQTV9UT1BESVIvU1BFQ1MgOyBcCisJY3AgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci5neiAkJFJQTV9UT1BESVIvU09VUkNFUyA7IFwKKwlycG0gLWJhIC0tY2xlYW4gLS1ybXNvdXJjZSAkJFJQTV9UT1BESVIvU1BFQ1MvJChSUE1ESVNUKS5zcGVjIDsgXAorCW12ICQkUlBNX1RPUERJUi9SUE1TL2kzODYvJChSUE1ESVNUKS0qLnJwbSAuIDsgXAorCW12ICQkUlBNX1RPUERJUi9TUlBNUy8kKFJQTURJU1QpLSouc3JjLnJwbSAuCisKKyMKKyMgQnVpbGQgYSBTb2xhcmlzIHBrZ2FkZCBmb3JtYXQgZmlsZQorIyBydW4gJ21ha2UgcGtnYWRkJyBvbmNlIHlvdSd2ZSBkb25lICcuL2NvbmZpZ3VyZScgYW5kICdtYWtlJyB0byBtYWtlIGEgU29sYXJpcyBwa2dhZGQgZm9ybWF0CisjIGZpbGUgKHdoaWNoIGVuZHMgdXAgYmFjayBpbiB0aGlzIGRpcmVjdG9yeSkuCisjIFRoZSBwa2dhZGQgZmlsZSBpcyBpbiAncGtndHJhbnMnIGZvcm1hdCwgc28gdG8gaW5zdGFsbCBvbiBTb2xhcmlzLCBkbworIyBwa2dhZGQgLWQgLi9IQVhYY3VybC0qCisjCisKKyMgZ2FrIC0gbGlidG9vbCByZXF1aXJlcyBhbiBhYnNvdWx0ZSBkaXJlY3RvcnksIGhlbmNlIHRoZSBwd2QgYmVsb3cuLi4KK3BrZ2FkZDoKKwl1bWFzayAwMjIgOyBcCisJbWFrZSBpbnN0YWxsIERFU1RESVI9YC9iaW4vcHdkYC9wYWNrYWdlcy9Tb2xhcmlzL3Jvb3QgOyBcCisJY2F0IENPUFlJTkcgPiAkKHNyY2RpcikvcGFja2FnZXMvU29sYXJpcy9jb3B5cmlnaHQgOyBcCisJY2QgJChzcmNkaXIpL3BhY2thZ2VzL1NvbGFyaXMgJiYgJChNQUtFKSBwYWNrYWdlCisKKyMKKyMgQnVpbGQgYSBjeWd3aW4gYmluYXJ5IHRhcmJhbGwgaW5zdGFsbGF0aW9uIGZpbGUKKyMgcmVzdWx0aW5nIC50YXIuYnoyIGZpbGUgd2lsbCBlbmQgdXAgYXQgcGFja2FnZXMvV2luMzIvY3lnd2luCitjeWd3aW5iaW46CisJJChNQUtFKSAtQyBwYWNrYWdlcy9XaW4zMi9jeWd3aW4gY3lnd2luYmluCisKKyMgV2UgZXh0ZW5kIHRoZSBzdGFuZGFyZCBpbnN0YWxsIHdpdGggYSBjdXN0b20gaG9vazoKK2luc3RhbGwtZGF0YS1ob29rOgorCWNkIGluY2x1ZGUgJiYgJChNQUtFKSBpbnN0YWxsCisJY2QgZG9jcyAmJiAkKE1BS0UpIGluc3RhbGwKKworIyBXZSBleHRlbmQgdGhlIHN0YW5kYXJkIHVuaW5zdGFsbCB3aXRoIGEgY3VzdG9tIGhvb2s6Cit1bmluc3RhbGwtaG9vazoKKwljZCBpbmNsdWRlICYmICQoTUFLRSkgdW5pbnN0YWxsCisJY2QgZG9jcyAmJiAkKE1BS0UpIHVuaW5zdGFsbAorCitjYS1idW5kbGU6IGxpYi9tay1jYS1idW5kbGUucGwKKwlAZWNobyAiZ2VuZXJhdGUgYSBmcmVzaCBjYS1idW5kbGUuY3J0IgorCUBwZXJsICQ8IC1iIC1sIC11IGxpYi9jYS1idW5kbGUuY3J0CisKK2NhLWZpcmVmb3g6IGxpYi9maXJlZm94LWRiMnBlbS5zaAorCUBlY2hvICJnZW5lcmF0ZSBhIGZyZXNoIGNhLWJ1bmRsZS5jcnQiCisJLi9saWIvZmlyZWZveC1kYjJwZW0uc2ggbGliL2NhLWJ1bmRsZS5jcnQKKworY2hlY2tzcmM6CisJY2QgbGliICYmICQoTUFLRSkgY2hlY2tzcmMKKwljZCBzcmMgJiYgJChNQUtFKSBjaGVja3NyYworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvTWFrZWZpbGUubXN2Yy5uYW1lcyBiL2N1cmwtNy4yNS4wL01ha2VmaWxlLm1zdmMubmFtZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjODFhZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL01ha2VmaWxlLm1zdmMubmFtZXMKQEAgLTAsMCArMSw4MSBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXw0KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8DQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXw0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198DQorIw0KKyMgQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4NCisjDQorIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaA0KKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcw0KKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4NCisjDQorIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwNCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4NCisjDQorIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyMNCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorIw0KKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGZyb20gTVNWQyBtYWtlZmlsZXMgbG9jYXRlZCBpbiBsaWIgYW5kIHNyYywNCisjIHByb3ZpZGluZyBsaWJjdXJsIGNvbW1vbiBmaWxlIG5hbWVzIHJlcXVpcmVkIGJ5IHRoZXNlIG1ha2VmaWxlcy4NCisjDQorDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0NCisjIGxpYmN1cmwgYmFzZSBuYW1lDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0NCisNCishSUYgIURFRklORUQoTElCX05BTUUpIHx8ICIkKExJQl9OQU1FKSIgPT0gIiINCitMSUJfTkFNRSA9IGxpYmN1cmwNCishRU5ESUYNCisNCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIGxpYmN1cmwgc3RhdGljIGFuZCBkeW5hbWljIGxpYnJhcmllcyBjb21tb24gYmFzZQ0KKyMgZmlsZSBuYW1lcyBmb3IgcmVsZWFzZSBhbmQgZGVidWcgY29uZmlndXJhdGlvbnMNCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCishSUYgIURFRklORUQoTElCX05BTUVfU1RBX1JFTCkgfHwgIiQoTElCX05BTUVfU1RBX1JFTCkiID09ICIiDQorTElCX05BTUVfU1RBX1JFTCA9ICQoTElCX05BTUUpDQorIUVORElGDQorDQorIUlGICFERUZJTkVEKExJQl9OQU1FX1NUQV9EQkcpIHx8ICIkKExJQl9OQU1FX1NUQV9EQkcpIiA9PSAiIg0KK0xJQl9OQU1FX1NUQV9EQkcgPSAkKExJQl9OQU1FX1NUQV9SRUwpZA0KKyFFTkRJRg0KKw0KKyFJRiAhREVGSU5FRChMSUJfTkFNRV9EWU5fUkVMKSB8fCAiJChMSUJfTkFNRV9EWU5fUkVMKSIgPT0gIiINCitMSUJfTkFNRV9EWU5fUkVMID0gJChMSUJfTkFNRSkNCishRU5ESUYNCisNCishSUYgIURFRklORUQoTElCX05BTUVfRFlOX0RCRykgfHwgIiQoTElCX05BTUVfRFlOX0RCRykiID09ICIiDQorTElCX05BTUVfRFlOX0RCRyA9ICQoTElCX05BTUVfRFlOX1JFTClkDQorIUVORElGDQorDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMgQmFzZSBuYW1lcyBmb3IgbGliY3VybCBETEwgaW1wb3J0IGxpYnJhcmllcw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCishSUYgIURFRklORUQoTElCX05BTUVfSU1QX1JFTCkgfHwgIiQoTElCX05BTUVfSU1QX1JFTCkiID09ICIiDQorTElCX05BTUVfSU1QX1JFTCA9ICQoTElCX05BTUVfRFlOX1JFTClfaW1wDQorIUVORElGDQorDQorIUlGICFERUZJTkVEKExJQl9OQU1FX0lNUF9EQkcpIHx8ICIkKExJQl9OQU1FX0lNUF9EQkcpIiA9PSAiIg0KK0xJQl9OQU1FX0lNUF9EQkcgPSAkKExJQl9OQU1FX0RZTl9EQkcpX2ltcA0KKyFFTkRJRg0KKw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIEZpbGUgbmFtZXMgd2l0aCBleHRlbnNpb24gYW5kIG5vIHBhdGgNCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorTElCQ1VSTF9TVEFfTElCX1JFTCA9ICQoTElCX05BTUVfU1RBX1JFTCkubGliDQorTElCQ1VSTF9TVEFfTElCX0RCRyA9ICQoTElCX05BTUVfU1RBX0RCRykubGliDQorTElCQ1VSTF9EWU5fTElCX1JFTCA9ICQoTElCX05BTUVfRFlOX1JFTCkuZGxsDQorTElCQ1VSTF9EWU5fTElCX0RCRyA9ICQoTElCX05BTUVfRFlOX0RCRykuZGxsDQorTElCQ1VSTF9JTVBfTElCX1JFTCA9ICQoTElCX05BTUVfSU1QX1JFTCkubGliDQorTElCQ1VSTF9JTVBfTElCX0RCRyA9ICQoTElCX05BTUVfSU1QX0RCRykubGliDQorTElCQ1VSTF9EWU5fTElCX1BEQiA9ICQoTElCX05BTUVfSU1QX0RCRykucGRiDQorDQorIyBFbmQgb2YgTWFrZWZpbGUubXN2Yy5uYW1lcw0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL1JFQURNRSBiL2N1cmwtNy4yNS4wL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmZhY2MzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvUkVBRE1FCkBAIC0wLDAgKzEsNDkgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisKK1JFQURNRQorCisgIEN1cmwgaXMgYSBjb21tYW5kIGxpbmUgdG9vbCBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgc3BlY2lmaWVkIHdpdGggVVJMCisgIHN5bnRheC4gRmluZCBvdXQgaG93IHRvIHVzZSBjdXJsIGJ5IHJlYWRpbmcgdGhlIGN1cmwuMSBtYW4gcGFnZSBvciB0aGUKKyAgTUFOVUFMIGRvY3VtZW50LiBGaW5kIG91dCBob3cgdG8gaW5zdGFsbCBDdXJsIGJ5IHJlYWRpbmcgdGhlIElOU1RBTEwKKyAgZG9jdW1lbnQuCisKKyAgbGliY3VybCBpcyB0aGUgbGlicmFyeSBjdXJsIGlzIHVzaW5nIHRvIGRvIGl0cyBqb2IuIEl0IGlzIHJlYWRpbHkKKyAgYXZhaWxhYmxlIHRvIGJlIHVzZWQgYnkgeW91ciBzb2Z0d2FyZS4gUmVhZCB0aGUgbGliY3VybC4zIG1hbiBwYWdlIHRvCisgIGxlYXJuIGhvdyEKKworICBZb3UgZmluZCBhbnN3ZXJzIHRvIHRoZSBtb3N0IGZyZXF1ZW50IHF1ZXN0aW9ucyB3ZSBnZXQgaW4gdGhlIEZBUSBkb2N1bWVudC4KKworICBTdHVkeSB0aGUgQ09QWUlORyBmaWxlIGZvciBkaXN0cmlidXRpb24gdGVybXMgYW5kIHNpbWlsYXIuIElmIHlvdSBkaXN0cmlidXRlCisgIGN1cmwgYmluYXJpZXMgb3Igb3RoZXIgYmluYXJpZXMgdGhhdCBpbnZvbHZlIGxpYmN1cmwsIHlvdSBtaWdodCBlbmpveSB0aGUKKyAgTElDRU5TRS1NSVhJTkcgZG9jdW1lbnQuCisKK0NPTlRBQ1QKKworICBJZiB5b3UgaGF2ZSBwcm9ibGVtcywgcXVlc3Rpb25zLCBpZGVhcyBvciBzdWdnZXN0aW9ucywgcGxlYXNlIGNvbnRhY3QgdXMKKyAgYnkgcG9zdGluZyB0byBhIHN1aXRhYmxlIG1haWxpbmcgbGlzdC4gU2VlIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC8KKworICBBbGwgY29udHJpYnV0b3JzIHRvIHRoZSBwcm9qZWN0IGFyZSBsaXN0ZWQgaW4gdGhlIFRIQU5LUyBkb2N1bWVudC4KKworV0VCIFNJVEUKKworICBWaXNpdCB0aGUgY3VybCB3ZWIgc2l0ZSBmb3IgdGhlIGxhdGVzdCBuZXdzIGFuZCBkb3dubG9hZHM6CisKKyAgICAgICAgaHR0cDovL2N1cmwuaGF4eC5zZS8KKworR0lUCisKKyAgVG8gZG93bmxvYWQgdGhlIHZlcnkgbGF0ZXN0IHNvdXJjZSBvZmYgdGhlIEdJVCBzZXJ2ZXIgZG8gdGhpczoKKworICAgIGdpdCBjbG9uZSBnaXQ6Ly9naXRodWIuY29tL2JhZ2Rlci9jdXJsLmdpdAorCisgICh5b3UnbGwgZ2V0IGEgZGlyZWN0b3J5IG5hbWVkIGN1cmwgY3JlYXRlZCwgZmlsbGVkIHdpdGggdGhlIHNvdXJjZSBjb2RlKQorCitOT1RJQ0UKKworICBDdXJsIGNvbnRhaW5zIHBpZWNlcyBvZiBzb3VyY2UgY29kZSB0aGF0IGlzIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OQorICBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4uIFRoaXMgbm90aWNlIGlzIGluY2x1ZGVkIGhlcmUgdG8gY29tcGx5IHdpdGggdGhlCisgIGRpc3RyaWJ1dGlvbiB0ZXJtcy4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL1JFTEVBU0UtTk9URVMgYi9jdXJsLTcuMjUuMC9SRUxFQVNFLU5PVEVTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjhlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9SRUxFQVNFLU5PVEVTCkBAIC0wLDAgKzEsODYgQEAKK0N1cmwgYW5kIGxpYmN1cmwgNy4yNS4wCisKKyBQdWJsaWMgY3VybCByZWxlYXNlczogICAgICAgICAxMjcKKyBDb21tYW5kIGxpbmUgb3B0aW9uczogICAgICAgICAxNTEKKyBjdXJsX2Vhc3lfc2V0b3B0KCkgb3B0aW9uczogICAxOTkKKyBQdWJsaWMgZnVuY3Rpb25zIGluIGxpYmN1cmw6ICA1OAorIEtub3duIGxpYmN1cmwgYmluZGluZ3M6ICAgICAgIDM5CisgQ29udHJpYnV0b3JzOiAgICAgICAgICAgICAgICAgOTI5CisKK1RoaXMgcmVsZWFzZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGNoYW5nZXM6CisKKyBvIGNvbmZpZ3VyZTogYWRkIG9wdGlvbiBkaXNhYmxlIC0tbGliY3VybCBvdXRwdXQgWzFdCisgbyAtLXNzbC1hbGxvdy1iZWFzdCBhbmQgQ1VSTE9QVF9TU0xfT1BUSU9OUyBhZGRlZCBbMl0KKyBvIEFkZGVkIENVUkxPUFRfVENQX0tFRVBBTElWRSwgQ1VSTE9QVF9UQ1BfS0VFUElETEUsIENVUkxPUFRfVENQX0tFRVBJTlRWTCBbNF0KKyBvIGN1cmw6IHVzZSBuZXcgbGlicmFyeS1zaWRlIFRDUF9LRUVQQUxJVkUgb3B0aW9ucyBbNV0KKyBvIEFkZGVkIGEgbmV3IENVUkxPUFRfTUFJTF9BVVRIIG9wdGlvbiBbMTNdCisgbyBBZGRlZCBzdXBwb3J0IGZvciAtLW1haWwtYXV0aCBbMTRdCisgbyAtLWxpYmN1cmwgbm93IGFsc28gd29ya3Mgd2l0aCAtRiBhbmQgbW9yZSEgWzE1XQorCitUaGlzIHJlbGVhc2UgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBidWdmaXhlczoKKworIG8gLS1tYXgtcmVkaXJzOiBhbGxvdyBuZWdhdGl2ZSBudW1iZXJzIGFzIG9wdGlvbiB2YWx1ZSBbM10KKyBvIHBhcnNlX3Byb3h5OiBiYWlsIG91dCBvbiB6ZXJvLWxlbmd0aCBwcm94eSBuYW1lcyBbNl0KKyBvIGNvbmZpZ3VyZTogZG9uJ3QgbW9kaWZ5IExEX0xJQlJBUllfUEFUSCBmb3IgY3Jvc3MgY29tcGlsZXMgWzddCisgbyBjdXJsX2Vhc3lfcmVzZXQ6IHJlc2V0IHRoZSByZWZlcmVyIHN0cmluZyBbOF0KKyBvIGN1cmwgdG9vbDogZG9uJ3QgYWJvcnQgZ2xvYi1sb29wIGR1ZSB0byBmYWlsdXJlcyBbOV0KKyBvIENPTk5FQ1Q6IHNlbmQgY29ycmVjdCBIb3N0OiB3aXRoIElQdjYgbnVtZXJpY2FsIGFkZHJlc3MgWzEwXQorIG8gRXhwbGljaXRseSBsaW5rIHRvIHRoZSBuZXR0bGUvZ2NyeXB0IGxpYnJhcmllcyBbMTFdCisgbyBtb3JlIHJlc2lsaWVudCBjb25uZWN0aW9uIHRpbWVzIGFtb25nIElQIGFkZHJlc3NlcyBbMTJdCisgbyB3aW5idWlsZDogZml4IElQVjYgYW5kIElETiBvcHRpb25zCisgbyBTTVRQOiBGaXhlZCBlcnJvciB3aGVuIHVzaW5nIENVUkxPUFRfQ09OTkVDVF9PTkxZCisgbyBjeWFzc2w6IHVwZGF0ZSB0byBDeWFTU0wgMi4wLnggQVBJCisgbyBzbXRwOiBGaXhlZCBhbiBpc3N1ZSB3aXRoIHRoZSBFT0IgY2hlY2tpbmcKKyBvIHBvcDM6IEZpeGVkIGRyb3Agb2YgZmluYWwgQ1JMRiBpbiBFT0IgY2hlY2tpbmcgWzE2XQorIG8gc210cDogRml4ZWQgYW4gaXNzdWUgd2l0aCB3cml0aW5nIHBvc3RkYXRhCisgbyBzbXRwOiBBZGRlZCBzdXBwb3J0IGZvciByZXR1cm5pbmcgU01UUCByZXNwb25zZSBjb2RlcworIG8gQ09OTkVDVDogZml4IGlwdjYgYWRkcmVzcyBpbiB0aGUgUmVxdWVzdC1MaW5lIFsxN10KKyBvIGN1cmwtY29uZmlnOiBvbmx5IHByb3ZpZGUgbGlicmFyaWVzIHdpdGggLS1saWJzCisgbyBMV0lQOiBkb24ndCBjb25zaWRlciBIQVZFX0VSUk5PX0ggdG8gYmUgd2luc29jayBbMTldCisgbyBzc2g6IHR1bm5lbCB0aHJvdWdoIEhUVFAgcHJveHkgaWYgcmVxdWVzdGVkCisgbyBjb29raWVzOiBzdHJpcCBvZmYgW2JyYWNrZXRzXSBmcm9tIG51bWVyaWNhbCBpcHY2IGhvc3QgbmFtZXMgWzIwXQorIG8gbGliY3VybCBkb2NzOiB2ZXJzaW9uIGNvcnJlY3Rpb25zIFsxOF0KKyBvIGNtYWtlOiBsaXN0X3NwYWNlc19hcHBlbmRfb25jZSBmYWlsdXJlIFsyMl0KKyBvIHJlc29sdmUgd2l0aCBjLWFyZXM6IGRvbid0IHJlc29sdmUgSVB2NiB3aGVuIG5vdCB3b3JraW5nIFsyMV0KKyBvIHNtdHA6IGNoYW5nZWQgZXJyb3IgY29kZSBmb3IgRUhMTyBhbmQgSEVMTyByZXNwb25zZXMKKyBvIHBhcnNlZGF0ZTogZml4IGEgbnVtZXJpYyBvdmVyZmxvdworCitUaGlzIHJlbGVhc2UgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBrbm93biBidWdzOgorCisgbyBzZWUgZG9jcy9LTk9XTl9CVUdTIChodHRwOi8vY3VybC5oYXh4LnNlL2RvY3Mva25vd25idWdzLmh0bWwpCisKK1RoaXMgcmVsZWFzZSB3b3VsZCBub3QgaGF2ZSBsb29rZWQgbGlrZSB0aGlzIHdpdGhvdXQgaGVscCwgY29kZSwgcmVwb3J0cyBhbmQKK2FkdmljZSBmcm9tIGZyaWVuZHMgbGlrZSB0aGVzZToKKworIENvbGluIEhvZ2JlbiwgQWxlc3NhbmRybyBHaGVkaW5pLCBLYW1pbCBEdWRrYSwgUm9iIFdhcmQsIERhdmUgUmVpc25lciwKKyBNYXJ0aW4gU3RvcnNqbywgUGllcnJlIFluYXJkLCBQaWVycmUgSm95ZSwgWWFuZyBUc2UsIERhbiBGYW5kcmljaCwKKyBNaWNoYWVsIERheSwgSnVhbiBCYXJyZXRvLCBDaGFuZHJha2FudCBCYWd1bCwgU3RldmUgSG9sbWUsIFRvZGQgT3Vza2EsCisgUmljaCBHcmF5LCBKb2huIEpvc2VwaCBCYWNoaXIsIEFybWVsIEFzc2VsaW4sIEFuZHJlaSBDaXB1LAorIE1heGltIFByb2hvcm92CisgCisgICAgICAgIFRoYW5rcyEgKGFuZCBzb3JyeSBpZiBJIGZvcmdvdCB0byBtZW50aW9uIHNvbWVvbmUpCisKK1JlZmVyZW5jZXMgdG8gYnVnIHJlcG9ydHMgYW5kIGRpc2N1c3Npb25zIG9uIGlzc3VlczoKKworIFsxXSA9IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMi8wMDA5Lmh0bWwKKyBbMl0gPSBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTItMDIvMDAwMS5odG1sCisgWzNdID0gaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDEyLTAyLzAwOTguaHRtbAorIFs0XSA9IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMS8wMjY0Lmh0bWwKKyBbNV0gPSBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTItMDEvMDI2My5odG1sCisgWzZdID0gaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDEyLTAyLzAwMDAuaHRtbAorIFs3XSA9IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMi8wMDUyLmh0bWwKKyBbOF0gPSBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDgxNTUxCisgWzldID0gaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQ4MTIyMworIFsxMF0gPSBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDgyMDkzCisgWzExXSA9IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMS8wMzAzLmh0bWwKKyBbMTJdID0gaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDEyLTAxLzAxOTAuaHRtbAorIFsxM10gPSBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwjQ1VSTE9QVE1BSUxBVVRICisgWzE0XSA9IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9tYW5wYWdlLmh0bWwjLS1tYWlsLWF1dGgKKyBbMTVdID0gaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL21hbnBhZ2UuaHRtbCMtLWxpYmN1cmwKKyBbMTZdID0gaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDEyLTAyLzAwNTEuaHRtbAorIFsxN10gPSBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDkzMTI5CisgWzE4XSA9IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0OTQwOTEKKyBbMTldID0gaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDEyLTAzLzAwNDYuaHRtbAorIFsyMF0gPSBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTItMDMvMDAzNi5odG1sCisgWzIxXSA9IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMy8wMDQ1Lmh0bWwKKyBbMjJdID0gaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQ5NDk2OApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvYWNpbmNsdWRlLm00IGIvY3VybC03LjI1LjAvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMzEyMmQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSwzMzAyIEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworZG5sIENVUkxfQ0hFQ0tfREVGIChTWU1CT0wsIFtJTkNMVURFU10sIFtTSUxFTlRdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBVc2UgdGhlIEMgcHJlcHJvY2Vzc29yIHRvIGZpbmQgb3V0IGlmIHRoZSBnaXZlbiBvYmplY3Qtc3R5bGUgc3ltYm9sCitkbmwgaXMgZGVmaW5lZCBhbmQgZ2V0IGl0cyBleHBhbnNpb24uIFRoaXMgbWFjcm8gd2lsbCBub3QgdXNlIGRlZmF1bHQKK2RubCBpbmNsdWRlcyBldmVuIGlmIG5vIElOQ0xVREVTIGFyZ3VtZW50IGlzIGdpdmVuLiBUaGlzIG1hY3JvIHdpbGwgcnVuCitkbmwgc2lsZW50bHkgd2hlbiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzLiBJZiB0aGUgZXhwYW5zaW9uIHdvdWxkCitkbmwgcmVzdWx0IGluIGEgc2V0IG9mIGRvdWJsZS1xdW90ZWQgc3RyaW5ncyB0aGUgcmV0dXJuZWQgZXhwYW5zaW9uIHdpbGwKK2RubCBhY3R1YWxseSBiZSBhIHNpbmdsZSBkb3VibGUtcXVvdGVkIHN0cmluZyBjb25jYXRlbmF0aW5nIGFsbCB0aGVtLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19ERUZdLCBbCisgIEFTX1ZBUl9QVVNIREVGKFthY19IYXZlRGVmXSwgW2N1cmxfY3ZfaGF2ZV9kZWZfJDFdKWRubAorICBBU19WQVJfUFVTSERFRihbYWNfRGVmXSwgW2N1cmxfY3ZfZGVmXyQxXSlkbmwKKyAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW1NFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0Ll0pCisgIGZpCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbR1JFUCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBHUkVQIGJlaW5nIHNldC5dKQorICBmaQorICBpZmVsc2UoJDMsLFtBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbiBvZiAkMV0pXSkKKyAgdG1wX2V4cD0iIgorICBBQ19QUkVQUk9DX0lGRUxTRShbCisgICAgQUNfTEFOR19TT1VSQ0UoCitpZmVsc2UoJDIsLCxbJDJdKVtbCisjaWZkZWYgJDEKK0NVUkxfREVGX1RPS0VOICQxCisjZW5kaWYKKyAgICBdXSkKKyAgXSxbCisgICAgdG1wX2V4cD1gZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkR1JFUCIgQ1VSTF9ERUZfVE9LRU4gMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvLipDVVJMX0RFRl9UT0tFTltbIF1dW1sgXV0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1tbIl1dW1sgXV0qW1siXV0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiJDEiOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKyAgXSkKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgQVNfVkFSX1NFVChhY19IYXZlRGVmLCBubykKKyAgICBpZmVsc2UoJDMsLFtBQ19NU0dfUkVTVUxUKFtub10pXSkKKyAgZWxzZQorICAgIEFTX1ZBUl9TRVQoYWNfSGF2ZURlZiwgeWVzKQorICAgIEFTX1ZBUl9TRVQoYWNfRGVmLCAkdG1wX2V4cCkKKyAgICBpZmVsc2UoJDMsLFtBQ19NU0dfUkVTVUxUKFskdG1wX2V4cF0pXSkKKyAgZmkKKyAgQVNfVkFSX1BPUERFRihbYWNfRGVmXSlkbmwKKyAgQVNfVkFSX1BPUERFRihbYWNfSGF2ZURlZl0pZG5sCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0RFRl9DQyAoU1lNQk9MLCBbSU5DTFVERVNdLCBbU0lMRU5UXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVXNlIHRoZSBDIGNvbXBpbGVyIHRvIGZpbmQgb3V0IG9ubHkgaWYgdGhlIGdpdmVuIHN5bWJvbCBpcyBkZWZpbmVkCitkbmwgb3Igbm90LCB0aGlzIGNhbiBub3QgZmluZCBvdXQgaXRzIGV4cGFuc2lvbi4gVGhpcyBtYWNybyB3aWxsIG5vdCB1c2UKK2RubCBkZWZhdWx0IGluY2x1ZGVzIGV2ZW4gaWYgbm8gSU5DTFVERVMgYXJndW1lbnQgaXMgZ2l2ZW4uIFRoaXMgbWFjcm8KK2RubCB3aWxsIHJ1biBzaWxlbnRseSB3aGVuIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHMuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0RFRl9DQ10sIFsKKyAgQVNfVkFSX1BVU0hERUYoW2FjX0hhdmVEZWZdLCBbY3VybF9jdl9oYXZlX2RlZl8kMV0pZG5sCisgIGlmZWxzZSgkMywsW0FDX01TR19DSEVDS0lORyhbZm9yIGNvbXBpbGVyIGRlZmluaXRpb24gb2YgJDFdKV0pCisgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1NPVVJDRSgKK2lmZWxzZSgkMiwsLFskMl0pW1sKK2ludCBtYWluICh2b2lkKQoreworI2lmZGVmICQxCisgIHJldHVybiAwOworI2Vsc2UKKyAgZm9yY2UgY29tcGlsYXRpb24gZXJyb3IKKyNlbmRpZgorfQorICAgIF1dKQorICBdLFsKKyAgICB0c3Rfc3ltYm9sX2RlZmluZWQ9InllcyIKKyAgXSxbCisgICAgdHN0X3N5bWJvbF9kZWZpbmVkPSJubyIKKyAgXSkKKyAgaWYgdGVzdCAiJHRzdF9zeW1ib2xfZGVmaW5lZCIgPSAieWVzIjsgdGhlbgorICAgIEFTX1ZBUl9TRVQoYWNfSGF2ZURlZiwgeWVzKQorICAgIGlmZWxzZSgkMywsW0FDX01TR19SRVNVTFQoW3llc10pXSkKKyAgZWxzZQorICAgIEFTX1ZBUl9TRVQoYWNfSGF2ZURlZiwgbm8pCisgICAgaWZlbHNlKCQzLCxbQUNfTVNHX1JFU1VMVChbbm9dKV0pCisgIGZpCisgIEFTX1ZBUl9QT1BERUYoW2FjX0hhdmVEZWZdKWRubAorXSkKKworCitkbmwgQ1VSTF9DSEVDS19MSUJfWE5FVAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgWC9PcGVuIG5ldHdvcmsgbGlicmFyeSBpcyByZXF1aXJlZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTElCX1hORVRdLCBbCisgIEFDX01TR19DSEVDS0lORyhbaWYgWC9PcGVuIG5ldHdvcmsgbGlicmFyeSBpcyByZXF1aXJlZF0pCisgIHRzdF9saWJfeG5ldF9yZXF1aXJlZD0ibm8iCisgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1NPVVJDRShbWworaW50IG1haW4gKHZvaWQpCit7CisjaWYgZGVmaW5lZChfX2hwdXgpICYmIGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgJiYgKF9YT1BFTl9TT1VSQ0UgPj0gNjAwKQorICByZXR1cm4gMDsKKyNlbGlmIGRlZmluZWQoX19ocHV4KSAmJiBkZWZpbmVkKF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQpCisgIHJldHVybiAwOworI2Vsc2UKKyAgZm9yY2UgY29tcGlsYXRpb24gZXJyb3IKKyNlbmRpZgorfQorICAgIF1dKQorICBdLFsKKyAgICB0c3RfbGliX3huZXRfcmVxdWlyZWQ9InllcyIKKyAgICBMSUJTPSIkTElCUyAtbHhuZXQiCisgIF0pCisgIEFDX01TR19SRVNVTFQoWyR0c3RfbGliX3huZXRfcmVxdWlyZWRdKQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19BSVhfQUxMX1NPVVJDRQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQcm92aWRlcyBhIHJlcGxhY2VtZW50IG9mIHRyYWRpdGlvbmFsIEFDX0FJWCB3aXRoCitkbmwgYW4gdW5pZm9ybSBiZWhhdmlvdXIgYWNyb3NzIGFsbCBhdXRvY29uZiB2ZXJzaW9ucywKK2RubCBhbmQgd2l0aCBvdXIgb3duIHBsYWNlbWVudCBydWxlcy4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfQUlYX0FMTF9TT1VSQ0VdLCBbCisgIEFIX1ZFUkJBVElNKFtfQUxMX1NPVVJDRV0sCisgICAgWy8qIERlZmluZSB0byAxIGlmIE9TIGlzIEFJWC4gKi8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UKKyMgIHVuZGVmIF9BTExfU09VUkNFCisjZW5kaWZdKQorICBBQ19CRUZPUkUoWyQwXSwgW0FDX1NZU19MQVJHRUZJTEVdKWRubAorICBBQ19CRUZPUkUoWyQwXSwgW0NVUkxfQ09ORklHVVJFX1JFRU5UUkFOVF0pZG5sCisgIEFDX01TR19DSEVDS0lORyhbaWYgT1MgaXMgQUlYICh0byBkZWZpbmUgX0FMTF9TT1VSQ0UpXSkKKyAgQUNfRUdSRVBfQ1BQKFt5ZXNfdGhpc19pc19haXhdLFsKKyNpZmRlZiBfQUlYCisgICB5ZXNfdGhpc19pc19haXgKKyNlbmRpZgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORShfQUxMX1NPVVJDRSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBdKQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19IRUFERVJfV0lORE9XUworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgY29tcGlsYWJsZSBhbmQgdmFsaWQgd2luZG93cy5oIGhlYWRlcgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19IRUFERVJfV0lORE9XU10sIFsKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3aW5kb3dzLmhdLCBbYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaF0sIFsKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisgICAgICBdXSxbWworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NFR0NDX18pCisgICAgICAgIEhBVkVfV0lORE9XU19IIHNoYWxsIG5vdCBiZSBkZWZpbmVkLgorI2Vsc2UKKyAgICAgICAgaW50IGR1bW15PTIqV0lOVkVSOworI2VuZGlmCisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5kb3dzX2g9InllcyIKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5kb3dzX2g9Im5vIgorICAgIF0pCisgIF0pCisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiBpbgorICAgIHllcykKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1dJTkRPV1NfSCwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5kb3dzLmggaGVhZGVyIGZpbGUuXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChXSU4zMl9MRUFOX0FORF9NRUFOLCAxLAorICAgICAgICBbRGVmaW5lIHRvIGF2b2lkIGF1dG9tYXRpYyBpbmNsdXNpb24gb2Ygd2luc29jay5oXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfTkFUSVZFX1dJTkRPV1MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgYnVpbGRpbmcgYSBuYXRpdmUgV2luZG93cyB0YXJnZXQKKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTkFUSVZFX1dJTkRPV1NdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTkRPV1NdKWRubAorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBidWlsZCB0YXJnZXQgaXMgYSBuYXRpdmUgV2luZG93cyBvbmVdLCBbYWNfY3ZfbmF0aXZlX3dpbmRvd3NdLCBbCisgICAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5kb3dzX2giID0gIm5vIjsgdGhlbgorICAgICAgYWNfY3ZfbmF0aXZlX3dpbmRvd3M9Im5vIgorICAgIGVsc2UKKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgIF1dLFtbCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX01JTkdXMzJDRV9fKSB8fCBcCisgICAoZGVmaW5lZChfTVNDX1ZFUikgJiYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkpKQorICAgICAgICAgIGludCBkdW1teT0xOworI2Vsc2UKKyAgICAgICAgICBOb3QgYSBuYXRpdmUgV2luZG93cyBidWlsZCB0YXJnZXQuCisjZW5kaWYKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgYWNfY3ZfbmF0aXZlX3dpbmRvd3M9InllcyIKKyAgICAgIF0sWworICAgICAgICBhY19jdl9uYXRpdmVfd2luZG93cz0ibm8iCisgICAgICBdKQorICAgIGZpCisgIF0pCisgIGNhc2UgIiRhY19jdl9uYXRpdmVfd2luZG93cyIgaW4KKyAgICB5ZXMpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoTkFUSVZFX1dJTkRPV1MsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgbmF0aXZlIFdpbmRvd3MgdGFyZ2V0Ll0pCisgICAgICA7OworICBlc2FjCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBjb21waWxhYmxlIGFuZCB2YWxpZCB3aW5zb2NrLmggaGVhZGVyCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5ET1dTXSlkbmwKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3aW5zb2NrLmhdLCBbYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaF0sIFsKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jay5oPgorICAgICAgXV0sW1sKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DRUdDQ19fKQorICAgICAgICBIQVZFX1dJTlNPQ0tfSCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyNlbHNlCisgICAgICAgIGludCBkdW1teT1XU0FDbGVhbnVwKCk7CisjZW5kaWYKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaD0ieWVzIgorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaD0ibm8iCisgICAgXSkKKyAgXSkKKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl93aW5zb2NrX2giIGluCisgICAgeWVzKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfV0lOU09DS19ILCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbnNvY2suaCBoZWFkZXIgZmlsZS5dKQorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgQ1VSTF9DSEVDS19IRUFERVJfV0lOU09DSzIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGNvbXBpbGFibGUgYW5kIHZhbGlkIHdpbnNvY2syLmggaGVhZGVyCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLMl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19IRUFERVJfV0lORE9XU10pZG5sCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2luc29jazIuaF0sIFthY19jdl9oZWFkZXJfd2luc29jazJfaF0sIFsKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyAgICAgIF1dLFtbCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fQ0VHQ0NfXykgfHwgZGVmaW5lZChfX01JTkdXMzJDRV9fKQorICAgICAgICBIQVZFX1dJTlNPQ0syX0ggc2hhbGwgbm90IGJlIGRlZmluZWQuCisjZWxzZQorICAgICAgICBpbnQgZHVtbXk9MipJUFBST1RPX0VTUDsKKyNlbmRpZgorICAgICAgXV0pCisgICAgXSxbCisgICAgICBhY19jdl9oZWFkZXJfd2luc29jazJfaD0ieWVzIgorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2g9Im5vIgorICAgIF0pCisgIF0pCisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgaW4KKyAgICB5ZXMpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9XSU5TT0NLMl9ILCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbnNvY2syLmggaGVhZGVyIGZpbGUuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfSEVBREVSX1dTMlRDUElQCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBjb21waWxhYmxlIGFuZCB2YWxpZCB3czJ0Y3BpcC5oIGhlYWRlcgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19IRUFERVJfV1MyVENQSVBdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTlNPQ0syXSlkbmwKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3czJ0Y3BpcC5oXSwgW2FjX2N2X2hlYWRlcl93czJ0Y3BpcF9oXSwgWworICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisgICAgICBdXSxbWworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NFR0NDX18pIHx8IGRlZmluZWQoX19NSU5HVzMyQ0VfXykKKyAgICAgICAgSEFWRV9XUzJUQ1BJUF9IIHNoYWxsIG5vdCBiZSBkZWZpbmVkLgorI2Vsc2UKKyAgICAgICAgaW50IGR1bW15PTIqSVBfUEtUSU5GTzsKKyNlbmRpZgorICAgICAgXV0pCisgICAgXSxbCisgICAgICBhY19jdl9oZWFkZXJfd3MydGNwaXBfaD0ieWVzIgorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2g9Im5vIgorICAgIF0pCisgIF0pCisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd3MydGNwaXBfaCIgaW4KKyAgICB5ZXMpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9XUzJUQ1BJUF9ILCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdzMnRjcGlwLmggaGVhZGVyIGZpbGUuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfSEVBREVSX1dJTkxEQVAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGNvbXBpbGFibGUgYW5kIHZhbGlkIHdpbmxkYXAuaCBoZWFkZXIKKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTkxEQVBdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTkRPV1NdKWRubAorICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdpbmxkYXAuaF0sIFthY19jdl9oZWFkZXJfd2lubGRhcF9oXSwgWworICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisjaW5jbHVkZSA8d2lubGRhcC5oPgorICAgICAgXV0sW1sKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DRUdDQ19fKQorICAgICAgICBIQVZFX1dJTkxEQVBfSCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyNlbHNlCisgICAgICAgIExEQVAgKmxkcCA9IGxkYXBfaW5pdCgiZHVtbXkiLCBMREFQX1BPUlQpOworICAgICAgICBVTE9ORyByZXMgPSBsZGFwX3VuYmluZChsZHApOworI2VuZGlmCisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5sZGFwX2g9InllcyIKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5sZGFwX2g9Im5vIgorICAgIF0pCisgIF0pCisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd2lubGRhcF9oIiBpbgorICAgIHllcykKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1dJTkxEQVBfSCwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5sZGFwLmggaGVhZGVyIGZpbGUuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfSEVBREVSX1dJTkJFUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgY29tcGlsYWJsZSBhbmQgdmFsaWQgd2luYmVyLmggaGVhZGVyCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5CRVJdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTkxEQVBdKWRubAorICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdpbmJlci5oXSwgW2FjX2N2X2hlYWRlcl93aW5iZXJfaF0sIFsKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmxkYXAuaD4KKyNpbmNsdWRlIDx3aW5iZXIuaD4KKyAgICAgIF1dLFtbCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fQ0VHQ0NfXykKKyAgICAgICAgSEFWRV9XSU5CRVJfSCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyNlbHNlCisgICAgICAgIEJFUlZBTCAqYnZwID0gTlVMTDsKKyAgICAgICAgQmVyRWxlbWVudCAqYmVwID0gYmVyX2luaXQoYnZwKTsKKyAgICAgICAgYmVyX2ZyZWUoYmVwLCAxKTsKKyNlbmRpZgorICAgICAgXV0pCisgICAgXSxbCisgICAgICBhY19jdl9oZWFkZXJfd2luYmVyX2g9InllcyIKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5iZXJfaD0ibm8iCisgICAgXSkKKyAgXSkKKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl93aW5iZXJfaCIgaW4KKyAgICB5ZXMpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9XSU5CRVJfSCwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5iZXIuaCBoZWFkZXIgZmlsZS5dKQorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgQ1VSTF9DSEVDS19IRUFERVJfTEJFUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgY29tcGlsYWJsZSBhbmQgdmFsaWQgbGJlci5oIGhlYWRlciwKK2RubCBhbmQgY2hlY2sgaWYgaXQgaXMgbmVlZGVkIGV2ZW4gd2l0aCBsZGFwLmgKKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfSEVBREVSX0xCRVJdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTkRPV1NdKWRubAorICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxiZXIuaF0sIFthY19jdl9oZWFkZXJfbGJlcl9oXSwgWworICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgKHZvaWQgKikwCisjZW5kaWYKKyNpbmNsdWRlIDxsYmVyLmg+CisgICAgICBdXSxbWworICAgICAgICBCZXJWYWx1ZSAqYnZwID0gTlVMTDsKKyAgICAgICAgQmVyRWxlbWVudCAqYmVwID0gYmVyX2luaXQoYnZwKTsKKyAgICAgICAgYmVyX2ZyZWUoYmVwLCAxKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX2xiZXJfaD0ieWVzIgorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX2xiZXJfaD0ibm8iCisgICAgXSkKKyAgXSkKKyAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9sYmVyX2giID0gInllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9MQkVSX0gsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGxiZXIuaCBoZWFkZXIgZmlsZS5dKQorICAgICMKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgTlVMTAorI2RlZmluZSBOVUxMICh2b2lkICopMAorI2VuZGlmCisjaWZuZGVmIExEQVBfREVQUkVDQVRFRAorI2RlZmluZSBMREFQX0RFUFJFQ0FURUQgMQorI2VuZGlmCisjaW5jbHVkZSA8bGRhcC5oPgorICAgICAgXV0sW1sKKyAgICAgICAgQmVyVmFsdWUgKmJ2cCA9IE5VTEw7CisgICAgICAgIEJlckVsZW1lbnQgKmJlcCA9IGJlcl9pbml0KGJ2cCk7CisgICAgICAgIGJlcl9mcmVlKGJlcCwgMSk7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIGN1cmxfY3ZfbmVlZF9oZWFkZXJfbGJlcl9oPSJubyIKKyAgICBdLFsKKyAgICAgIGN1cmxfY3ZfbmVlZF9oZWFkZXJfbGJlcl9oPSJ5ZXMiCisgICAgXSkKKyAgICAjCisgICAgY2FzZSAiJGN1cmxfY3ZfbmVlZF9oZWFkZXJfbGJlcl9oIiBpbgorICAgICAgeWVzKQorICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoTkVFRF9MQkVSX0gsIDEsCisgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRoZSBsYmVyLmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIGxkYXAuaF0pCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19IRUFERVJfTERBUAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgY29tcGlsYWJsZSBhbmQgdmFsaWQgbGRhcC5oIGhlYWRlcgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19IRUFERVJfTERBUF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19IRUFERVJfTEJFUl0pZG5sCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbGRhcC5oXSwgW2FjX2N2X2hlYWRlcl9sZGFwX2hdLCBbCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2VuZGlmCisjaWZuZGVmIExEQVBfREVQUkVDQVRFRAorI2RlZmluZSBMREFQX0RFUFJFQ0FURUQgMQorI2VuZGlmCisjaWZkZWYgTkVFRF9MQkVSX0gKKyNpbmNsdWRlIDxsYmVyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsZGFwLmg+CisgICAgICBdXSxbWworICAgICAgICBMREFQICpsZHAgPSBsZGFwX2luaXQoImR1bW15IiwgTERBUF9QT1JUKTsKKyAgICAgICAgaW50IHJlcyA9IGxkYXBfdW5iaW5kKGxkcCk7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl9sZGFwX2g9InllcyIKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl9sZGFwX2g9Im5vIgorICAgIF0pCisgIF0pCisgIGNhc2UgIiRhY19jdl9oZWFkZXJfbGRhcF9oIiBpbgorICAgIHllcykKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0xEQVBfSCwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBsZGFwLmggaGVhZGVyIGZpbGUuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfSEVBREVSX0xEQVBfU1NMCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBjb21waWxhYmxlIGFuZCB2YWxpZCBsZGFwX3NzbC5oIGhlYWRlcgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19IRUFERVJfTERBUF9TU0xdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX0xEQVBdKWRubAorICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxkYXBfc3NsLmhdLCBbYWNfY3ZfaGVhZGVyX2xkYXBfc3NsX2hdLCBbCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2VuZGlmCisjaWZuZGVmIExEQVBfREVQUkVDQVRFRAorI2RlZmluZSBMREFQX0RFUFJFQ0FURUQgMQorI2VuZGlmCisjaWZkZWYgTkVFRF9MQkVSX0gKKyNpbmNsdWRlIDxsYmVyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0xEQVBfSAorI2luY2x1ZGUgPGxkYXAuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxkYXBfc3NsLmg+CisgICAgICBdXSxbWworICAgICAgICBMREFQICpsZHAgPSBsZGFwc3NsX2luaXQoImR1bW15IiwgTERBUFNfUE9SVCwgMSk7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl9sZGFwX3NzbF9oPSJ5ZXMiCisgICAgXSxbCisgICAgICBhY19jdl9oZWFkZXJfbGRhcF9zc2xfaD0ibm8iCisgICAgXSkKKyAgXSkKKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl9sZGFwX3NzbF9oIiBpbgorICAgIHllcykKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0xEQVBfU1NMX0gsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbGRhcF9zc2wuaCBoZWFkZXIgZmlsZS5dKQorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgQ1VSTF9DSEVDS19IRUFERVJfTERBUFNTTAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgY29tcGlsYWJsZSBhbmQgdmFsaWQgbGRhcHNzbC5oIGhlYWRlcgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19IRUFERVJfTERBUFNTTF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19IRUFERVJfTERBUF0pZG5sCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbGRhcHNzbC5oXSwgW2FjX2N2X2hlYWRlcl9sZGFwc3NsX2hdLCBbCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2VuZGlmCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAodm9pZCAqKTAKKyNlbmRpZgorI2lmbmRlZiBMREFQX0RFUFJFQ0FURUQKKyNkZWZpbmUgTERBUF9ERVBSRUNBVEVEIDEKKyNlbmRpZgorI2lmZGVmIE5FRURfTEJFUl9ICisjaW5jbHVkZSA8bGJlci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9MREFQX0gKKyNpbmNsdWRlIDxsZGFwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsZGFwc3NsLmg+CisgICAgICBdXSxbWworICAgICAgICBjaGFyICpjZXJ0X2xhYmVsID0gTlVMTDsKKyAgICAgICAgTERBUCAqbGRwID0gbGRhcF9zc2xfaW5pdCgiZHVtbXkiLCBMREFQU19QT1JULCBjZXJ0X2xhYmVsKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX2xkYXBzc2xfaD0ieWVzIgorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX2xkYXBzc2xfaD0ibm8iCisgICAgXSkKKyAgXSkKKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl9sZGFwc3NsX2giIGluCisgICAgeWVzKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfTERBUFNTTF9ILCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGxkYXBzc2wuaCBoZWFkZXIgZmlsZS5dKQorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgQ1VSTF9DSEVDS19MSUJTX1dJTkxEQVAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGxpYnJhcmllcyBuZWVkZWQgZm9yIFdJTkxEQVAgc3VwcG9ydCwKK2RubCBhbmQgcHJlcGVuZGVkIHRvIExJQlMgYW55IG5lZWRlZCBsaWJyYXJpZXMuCitkbmwgVGhpcyBtYWNybyBjYW4gdGFrZSBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgd2l0aCBhCitkbmwgd2hpdGUgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgbGlicmFyaWVzIHRvIGNoZWNrCitkbmwgYmVmb3JlIHRoZSBXSU5MREFQIGRlZmF1bHQgb25lcy4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTElCU19XSU5MREFQXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5CRVJdKWRubAorICAjCisgIEFDX01TR19DSEVDS0lORyhbZm9yIFdJTkxEQVAgbGlicmFyaWVzXSkKKyAgIworICB1X2xpYnM9IiIKKyAgIworICBpZmVsc2UoJDEsLCxbCisgICAgZm9yIHhfbGliIGluICQxOyBkbworICAgICAgY2FzZSAiJHhfbGliIiBpbgorICAgICAgICAtbCopCisgICAgICAgICAgbF9saWI9IiR4X2xpYiIKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGxfbGliPSItbCR4X2xpYiIKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgaWYgdGVzdCAteiAiJHVfbGlicyI7IHRoZW4KKyAgICAgICAgdV9saWJzPSIkbF9saWIiCisgICAgICBlbHNlCisgICAgICAgIHVfbGlicz0iJHVfbGlicyAkbF9saWIiCisgICAgICBmaQorICAgIGRvbmUKKyAgXSkKKyAgIworICBjdXJsX2N2X3NhdmVfTElCUz0iJExJQlMiCisgIGN1cmxfY3ZfbGRhcF9MSUJTPSJ1bmtub3duIgorICAjCisgIGZvciB4X25saWJzIGluICcnICIkdV9saWJzIiBcCisgICAgJy1sd2xkYXAzMicgOyBkbworICAgIGlmIHRlc3QgIiRjdXJsX2N2X2xkYXBfTElCUyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiR4X25saWJzIjsgdGhlbgorICAgICAgICBMSUJTPSIkY3VybF9jdl9zYXZlX0xJQlMiCisgICAgICBlbHNlCisgICAgICAgIExJQlM9IiR4X25saWJzICRjdXJsX2N2X3NhdmVfTElCUyIKKyAgICAgIGZpCisgICAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOTERBUF9ICisjaW5jbHVkZSA8d2lubGRhcC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9XSU5CRVJfSAorI2luY2x1ZGUgPHdpbmJlci5oPgorI2VuZGlmCisjZW5kaWYKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBCRVJWQUwgKmJ2cCA9IE5VTEw7CisgICAgICAgICAgQmVyRWxlbWVudCAqYmVwID0gYmVyX2luaXQoYnZwKTsKKyAgICAgICAgICBMREFQICpsZHAgPSBsZGFwX2luaXQoImR1bW15IiwgTERBUF9QT1JUKTsKKyAgICAgICAgICBVTE9ORyByZXMgPSBsZGFwX3VuYmluZChsZHApOworICAgICAgICAgIGJlcl9mcmVlKGJlcCwgMSk7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIGN1cmxfY3ZfbGRhcF9MSUJTPSIkeF9ubGlicyIKKyAgICAgIF0pCisgICAgZmkKKyAgZG9uZQorICAjCisgIExJQlM9IiRjdXJsX2N2X3NhdmVfTElCUyIKKyAgIworICBjYXNlIFgtIiRjdXJsX2N2X2xkYXBfTElCUyIgaW4KKyAgICBYLXVua25vd24pCisgICAgICBBQ19NU0dfUkVTVUxUKFtjYW5ub3QgZmluZCBXSU5MREFQIGxpYnJhcmllc10pCisgICAgICA7OworICAgIFgtKQorICAgICAgQUNfTVNHX1JFU1VMVChbbm8gYWRkaXRpb25hbCBsaWIgcmVxdWlyZWRdKQorICAgICAgOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAteiAiJGN1cmxfY3Zfc2F2ZV9MSUJTIjsgdGhlbgorICAgICAgICBMSUJTPSIkY3VybF9jdl9sZGFwX0xJQlMiCisgICAgICBlbHNlCisgICAgICAgIExJQlM9IiRjdXJsX2N2X2xkYXBfTElCUyAkY3VybF9jdl9zYXZlX0xJQlMiCisgICAgICBmaQorICAgICAgQUNfTVNHX1JFU1VMVChbJGN1cmxfY3ZfbGRhcF9MSUJTXSkKKyAgICAgIDs7CisgIGVzYWMKKyAgIworXSkKKworCitkbmwgQ1VSTF9DSEVDS19MSUJTX0xEQVAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGxpYnJhcmllcyBuZWVkZWQgZm9yIExEQVAgc3VwcG9ydCwKK2RubCBhbmQgcHJlcGVuZGVkIHRvIExJQlMgYW55IG5lZWRlZCBsaWJyYXJpZXMuCitkbmwgVGhpcyBtYWNybyBjYW4gdGFrZSBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgd2l0aCBhCitkbmwgd2hpdGUgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgbGlicmFyaWVzIHRvIGNoZWNrCitkbmwgYmVmb3JlIHRoZSBkZWZhdWx0IG9uZXMuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0xJQlNfTERBUF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19IRUFERVJfTERBUF0pZG5sCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgTERBUCBsaWJyYXJpZXNdKQorICAjCisgIHVfbGlicz0iIgorICAjCisgIGlmZWxzZSgkMSwsLFsKKyAgICBmb3IgeF9saWIgaW4gJDE7IGRvCisgICAgICBjYXNlICIkeF9saWIiIGluCisgICAgICAgIC1sKikKKyAgICAgICAgICBsX2xpYj0iJHhfbGliIgorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgbF9saWI9Ii1sJHhfbGliIgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0IC16ICIkdV9saWJzIjsgdGhlbgorICAgICAgICB1X2xpYnM9IiRsX2xpYiIKKyAgICAgIGVsc2UKKyAgICAgICAgdV9saWJzPSIkdV9saWJzICRsX2xpYiIKKyAgICAgIGZpCisgICAgZG9uZQorICBdKQorICAjCisgIGN1cmxfY3Zfc2F2ZV9MSUJTPSIkTElCUyIKKyAgY3VybF9jdl9sZGFwX0xJQlM9InVua25vd24iCisgICMKKyAgZm9yIHhfbmxpYnMgaW4gJycgIiR1X2xpYnMiIFwKKyAgICAnLWxsZGFwJyBcCisgICAgJy1sbGJlciAtbGxkYXAnIFwKKyAgICAnLWxsZGFwIC1sbGJlcicgXAorICAgICctbGxkYXBzc2wgLWxsZGFweCAtbGxkYXBzZGsnIFwKKyAgICAnLWxsZGFwc2RrIC1sbGRhcHggLWxsZGFwc3NsJyA7IGRvCisgICAgaWYgdGVzdCAiJGN1cmxfY3ZfbGRhcF9MSUJTIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJHhfbmxpYnMiOyB0aGVuCisgICAgICAgIExJQlM9IiRjdXJsX2N2X3NhdmVfTElCUyIKKyAgICAgIGVsc2UKKyAgICAgICAgTElCUz0iJHhfbmxpYnMgJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICAgZmkKKyAgICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2VuZGlmCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAodm9pZCAqKTAKKyNlbmRpZgorI2lmbmRlZiBMREFQX0RFUFJFQ0FURUQKKyNkZWZpbmUgTERBUF9ERVBSRUNBVEVEIDEKKyNlbmRpZgorI2lmZGVmIE5FRURfTEJFUl9ICisjaW5jbHVkZSA8bGJlci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9MREFQX0gKKyNpbmNsdWRlIDxsZGFwLmg+CisjZW5kaWYKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBCZXJWYWx1ZSAqYnZwID0gTlVMTDsKKyAgICAgICAgICBCZXJFbGVtZW50ICpiZXAgPSBiZXJfaW5pdChidnApOworICAgICAgICAgIExEQVAgKmxkcCA9IGxkYXBfaW5pdCgiZHVtbXkiLCBMREFQX1BPUlQpOworICAgICAgICAgIGludCByZXMgPSBsZGFwX3VuYmluZChsZHApOworICAgICAgICAgIGJlcl9mcmVlKGJlcCwgMSk7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIGN1cmxfY3ZfbGRhcF9MSUJTPSIkeF9ubGlicyIKKyAgICAgIF0pCisgICAgZmkKKyAgZG9uZQorICAjCisgIExJQlM9IiRjdXJsX2N2X3NhdmVfTElCUyIKKyAgIworICBjYXNlIFgtIiRjdXJsX2N2X2xkYXBfTElCUyIgaW4KKyAgICBYLXVua25vd24pCisgICAgICBBQ19NU0dfUkVTVUxUKFtjYW5ub3QgZmluZCBMREFQIGxpYnJhcmllc10pCisgICAgICA7OworICAgIFgtKQorICAgICAgQUNfTVNHX1JFU1VMVChbbm8gYWRkaXRpb25hbCBsaWIgcmVxdWlyZWRdKQorICAgICAgOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAteiAiJGN1cmxfY3Zfc2F2ZV9MSUJTIjsgdGhlbgorICAgICAgICBMSUJTPSIkY3VybF9jdl9sZGFwX0xJQlMiCisgICAgICBlbHNlCisgICAgICAgIExJQlM9IiRjdXJsX2N2X2xkYXBfTElCUyAkY3VybF9jdl9zYXZlX0xJQlMiCisgICAgICBmaQorICAgICAgQUNfTVNHX1JFU1VMVChbJGN1cmxfY3ZfbGRhcF9MSUJTXSkKKyAgICAgIDs7CisgIGVzYWMKKyAgIworXSkKKworCitkbmwgQ1VSTF9DSEVDS19IRUFERVJfTUFMTE9DCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBjb21waWxhYmxlIGFuZCB2YWxpZCBtYWxsb2MuaCBoZWFkZXIsCitkbmwgYW5kIGNoZWNrIGlmIGl0IGlzIG5lZWRlZCBldmVuIHdpdGggc3RkbGliLmgKKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfSEVBREVSX01BTExPQ10sIFsKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtYWxsb2MuaF0sIFthY19jdl9oZWFkZXJfbWFsbG9jX2hdLCBbCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8bWFsbG9jLmg+CisgICAgICBdXSxbWworICAgICAgICB2b2lkICpwID0gbWFsbG9jKDEwKTsKKyAgICAgICAgdm9pZCAqcSA9IGNhbGxvYygxMCwxMCk7CisgICAgICAgIGZyZWUocCk7CisgICAgICAgIGZyZWUocSk7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl9tYWxsb2NfaD0ieWVzIgorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX21hbGxvY19oPSJubyIKKyAgICBdKQorICBdKQorICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX21hbGxvY19oIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfTUFMTE9DX0gsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIG1hbGxvYy5oIGhlYWRlciBmaWxlLl0pCisgICAgIworICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgXV0sW1sKKyAgICAgICAgdm9pZCAqcCA9IG1hbGxvYygxMCk7CisgICAgICAgIHZvaWQgKnEgPSBjYWxsb2MoMTAsMTApOworICAgICAgICBmcmVlKHApOworICAgICAgICBmcmVlKHEpOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX21hbGxvY19oPSJubyIKKyAgICBdLFsKKyAgICAgIGN1cmxfY3ZfbmVlZF9oZWFkZXJfbWFsbG9jX2g9InllcyIKKyAgICBdKQorICAgICMKKyAgICBjYXNlICIkY3VybF9jdl9uZWVkX2hlYWRlcl9tYWxsb2NfaCIgaW4KKyAgICAgIHllcykKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKE5FRURfTUFMTE9DX0gsIDEsCisgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRoZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmhdKQorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfSEVBREVSX01FTU9SWQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVjayBmb3IgY29tcGlsYWJsZSBhbmQgdmFsaWQgbWVtb3J5LmggaGVhZGVyLAorZG5sIGFuZCBjaGVjayBpZiBpdCBpcyBuZWVkZWQgZXZlbiB3aXRoIHN0ZGxpYi5oIGZvcgorZG5sIG1lbW9yeSByZWxhdGVkIGZ1bmN0aW9ucy4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfSEVBREVSX01FTU9SWV0sIFsKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtZW1vcnkuaF0sIFthY19jdl9oZWFkZXJfbWVtb3J5X2hdLCBbCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8bWVtb3J5Lmg+CisgICAgICBdXSxbWworICAgICAgICB2b2lkICpwID0gbWFsbG9jKDEwKTsKKyAgICAgICAgdm9pZCAqcSA9IGNhbGxvYygxMCwxMCk7CisgICAgICAgIGZyZWUocCk7CisgICAgICAgIGZyZWUocSk7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIGFjX2N2X2hlYWRlcl9tZW1vcnlfaD0ieWVzIgorICAgIF0sWworICAgICAgYWNfY3ZfaGVhZGVyX21lbW9yeV9oPSJubyIKKyAgICBdKQorICBdKQorICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX21lbW9yeV9oIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfTUVNT1JZX0gsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIG1lbW9yeS5oIGhlYWRlciBmaWxlLl0pCisgICAgIworICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgXV0sW1sKKyAgICAgICAgdm9pZCAqcCA9IG1hbGxvYygxMCk7CisgICAgICAgIHZvaWQgKnEgPSBjYWxsb2MoMTAsMTApOworICAgICAgICBmcmVlKHApOworICAgICAgICBmcmVlKHEpOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX21lbW9yeV9oPSJubyIKKyAgICBdLFsKKyAgICAgIGN1cmxfY3ZfbmVlZF9oZWFkZXJfbWVtb3J5X2g9InllcyIKKyAgICBdKQorICAgICMKKyAgICBjYXNlICIkY3VybF9jdl9uZWVkX2hlYWRlcl9tZW1vcnlfaCIgaW4KKyAgICAgIHllcykKKyAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKE5FRURfTUVNT1JZX0gsIDEsCisgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRoZSBtZW1vcnkuaCBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmhdKQorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19HRVROQU1FSU5GTworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUZXN0IGlmIHRoZSBnZXRuYW1laW5mbyBmdW5jdGlvbiBpcyBhdmFpbGFibGUsCitkbmwgYW5kIGNoZWNrIHRoZSB0eXBlcyBvZiBmaXZlIG9mIGl0cyBhcmd1bWVudHMuCitkbmwgSWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzIEhBVkVfR0VUTkFNRUlORk8gd2lsbCBiZQorZG5sIGRlZmluZWQsIGRlZmluaW5nIHRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIGluCitkbmwgR0VUTkFNRUlORk9fVFlQRV9BUkcxLCBHRVROQU1FSU5GT19UWVBFX0FSRzIsCitkbmwgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBhbmQgR0VUTkFNRUlORk9fVFlQRV9BUkc3LAorZG5sIGFuZCBhbHNvIGRlZmluaW5nIHRoZSB0eXBlIHF1YWxpZmllciBvZiBmaXJzdAorZG5sIGFyZ3VtZW50IGluIEdFVE5BTUVJTkZPX1FVQUxfQVJHMS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19HRVROQU1FSU5GT10sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19IRUFERVJfV1MyVENQSVBdKWRubAorICBBQ19DSEVDS19IRUFERVJTKHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaCBuZXRkYi5oKQorICAjCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGdldG5hbWVpbmZvXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZ2V0bmFtZWluZm9dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGN1cmxfY3ZfZ2V0bmFtZWluZm89InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGN1cmxfY3ZfZ2V0bmFtZWluZm89Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiRjdXJsX2N2X2dldG5hbWVpbmZvIiAhPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbZGVlcGVyIGZvciBnZXRuYW1laW5mb10pCisgICAgQUNfTElOS19JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICBdXSxbWworICAgICAgICBnZXRuYW1laW5mbygpOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgY3VybF9jdl9nZXRuYW1laW5mbz0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbYnV0IHN0aWxsIG5vXSkKKyAgICAgIGN1cmxfY3ZfZ2V0bmFtZWluZm89Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfZ2V0bmFtZWluZm8iICE9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtkZWVwZXIgYW5kIGRlZXBlciBmb3IgZ2V0bmFtZWluZm9dKQorICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2VuZGlmCisgICAgICBdXSxbWworICAgICAgICBnZXRuYW1laW5mbygwLCAwLCAwLCAwLCAwLCAwLCAwKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIGN1cmxfY3ZfZ2V0bmFtZWluZm89InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW2J1dCBzdGlsbCBub10pCisgICAgICBjdXJsX2N2X2dldG5hbWVpbmZvPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiRjdXJsX2N2X2dldG5hbWVpbmZvIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3R5cGVzIG9mIGFyZ3VtZW50cyBmb3IgZ2V0bmFtZWluZm9dLAorICAgICAgW2N1cmxfY3ZfZnVuY19nZXRuYW1laW5mb19hcmdzXSwgWworICAgICAgY3VybF9jdl9mdW5jX2dldG5hbWVpbmZvX2FyZ3M9InVua25vd24iCisgICAgICBmb3IgZ25pX2FyZzEgaW4gJ3N0cnVjdCBzb2NrYWRkciAqJyAnY29uc3Qgc3RydWN0IHNvY2thZGRyIConICd2b2lkIConOyBkbworICAgICAgICBmb3IgZ25pX2FyZzIgaW4gJ3NvY2tsZW5fdCcgJ3NpemVfdCcgJ2ludCc7IGRvCisgICAgICAgICAgZm9yIGduaV9hcmc0NiBpbiAnc2l6ZV90JyAnaW50JyAnc29ja2xlbl90JyAndW5zaWduZWQgaW50JyAnRFdPUkQnOyBkbworICAgICAgICAgICAgZm9yIGduaV9hcmc3IGluICdpbnQnICd1bnNpZ25lZCBpbnQnOyBkbworICAgICAgICAgICAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX2dldG5hbWVpbmZvX2FyZ3MiID0gInVua25vd24iOyB0aGVuCisgICAgICAgICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICAgICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpZiAoIWRlZmluZWQoX1dJTjMyX1dJTk5UKSkgfHwgKF9XSU4zMl9XSU5OVCA8IDB4MDUwMSkKKyN1bmRlZiBfV0lOMzJfV0lOTlQKKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDUwMQorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIEdOSUNBTExDT05WIFdTQUFQSQorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNkZWZpbmUgR05JQ0FMTENPTlYKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBleHRlcm4gaW50IEdOSUNBTExDT05WIGdldG5hbWVpbmZvKCRnbmlfYXJnMSwgJGduaV9hcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgJGduaV9hcmc0NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosICRnbmlfYXJnNDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGduaV9hcmc3KTsKKyAgICAgICAgICAgICAgICAgIF1dLFtbCisgICAgICAgICAgICAgICAgICAgICRnbmlfYXJnMiBzYWxlbj0wOworICAgICAgICAgICAgICAgICAgICAkZ25pX2FyZzQ2IGhvc3RsZW49MDsKKyAgICAgICAgICAgICAgICAgICAgJGduaV9hcmc0NiBzZXJ2bGVuPTA7CisgICAgICAgICAgICAgICAgICAgICRnbmlfYXJnNyBmbGFncz0wOworICAgICAgICAgICAgICAgICAgICBpbnQgcmVzID0gZ2V0bmFtZWluZm8oMCwgc2FsZW4sIDAsIGhvc3RsZW4sIDAsIHNlcnZsZW4sIGZsYWdzKTsKKyAgICAgICAgICAgICAgICAgIF1dKQorICAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICAgY3VybF9jdl9mdW5jX2dldG5hbWVpbmZvX2FyZ3M9IiRnbmlfYXJnMSwkZ25pX2FyZzIsJGduaV9hcmc0NiwkZ25pX2FyZzciCisgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBkb25lCisgICAgICAgIGRvbmUKKyAgICAgIGRvbmUKKyAgICBdKSAjIEFDLUNBQ0hFLUNIRUNLCisgICAgaWYgdGVzdCAiJGN1cmxfY3ZfZnVuY19nZXRuYW1laW5mb19hcmdzIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfTVNHX1dBUk4oW0Nhbm5vdCBmaW5kIHByb3BlciB0eXBlcyB0byB1c2UgZm9yIGdldG5hbWVpbmZvIGFyZ3NdKQorICAgICAgQUNfTVNHX1dBUk4oW0hBVkVfR0VUTkFNRUlORk8gd2lsbCBub3QgYmUgZGVmaW5lZF0pCisgICAgZWxzZQorICAgICAgZ25pX3ByZXZfSUZTPSRJRlM7IElGUz0nLCcKKyAgICAgIHNldCBkdW1teSBgZWNobyAiJGN1cmxfY3ZfZnVuY19nZXRuYW1laW5mb19hcmdzIiB8IHNlZCAncy9cKi9cKi9nJ2AKKyAgICAgIElGUz0kZ25pX3ByZXZfSUZTCisgICAgICBzaGlmdAorICAgICAgIworICAgICAgZ25pX3F1YWxfdHlwZV9hcmcxPSRbMV0KKyAgICAgICMKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChHRVROQU1FSU5GT19UWVBFX0FSRzIsICRbMl0sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIGdldG5hbWVpbmZvLl0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoR0VUTkFNRUlORk9fVFlQRV9BUkc0NiwgJFszXSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDQgYW5kIDYgZm9yIGdldG5hbWVpbmZvLl0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoR0VUTkFNRUlORk9fVFlQRV9BUkc3LCAkWzRdLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA3IGZvciBnZXRuYW1laW5mby5dKQorICAgICAgIworICAgICAgcHJldl9zaF9vcHRzPSQtCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0IC1mCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIGNhc2UgIiRnbmlfcXVhbF90eXBlX2FyZzEiIGluCisgICAgICAgIGNvbnN0KikKKyAgICAgICAgICBnbmlfcXVhbF9hcmcxPWNvbnN0CisgICAgICAgICAgZ25pX3R5cGVfYXJnMT1gZWNobyAkZ25pX3F1YWxfdHlwZV9hcmcxIHwgc2VkICdzL15jb25zdCAvLydgCisgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgZ25pX3F1YWxfYXJnMT0KKyAgICAgICAgICBnbmlfdHlwZV9hcmcxPSRnbmlfcXVhbF90eXBlX2FyZzEKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChHRVROQU1FSU5GT19RVUFMX0FSRzEsICRnbmlfcXVhbF9hcmcxLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChHRVROQU1FSU5GT19UWVBFX0FSRzEsICRnbmlfdHlwZV9hcmcxLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBnZXRuYW1laW5mby5dKQorICAgICAgIworICAgICAgY2FzZSAkcHJldl9zaF9vcHRzIGluCisgICAgICAgICpmKikKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHNldCArZgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAjCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9HRVROQU1FSU5GTywgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRuYW1laW5mbyBmdW5jdGlvbi5dKQorICAgICAgYWNfY3ZfZnVuY19nZXRuYW1laW5mbz0ieWVzIgorICAgIGZpCisgIGZpCitdKQorCisKK2RubCBUWVBFX1NPQ0tBRERSX1NUT1JBR0UKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLiBNb3N0IElQdjYtZW5hYmxlZAorZG5sIGhvc3RzIGhhdmUgaXQsIGJ1dCBBSVggNC4zIGlzIG9uZSBrbm93biBleGNlcHRpb24uCisKK0FDX0RFRlVOKFtUWVBFX1NPQ0tBRERSX1NUT1JBR0VdLAorWworICAgQUNfQ0hFQ0tfVFlQRShbc3RydWN0IHNvY2thZGRyX3N0b3JhZ2VdLAorICAgICAgICBBQ19ERUZJTkUoSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRSwgMSwKKyAgICAgICAgICAgICAgICAgIFtpZiBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBpcyBkZWZpbmVkXSksICwKKyAgIFsKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNlbmRpZgorICAgXSkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfTklfV0lUSFNDT1BFSUQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIHdvcmtpbmcgTklfV0lUSFNDT1BFSUQgaW4gZ2V0bmFtZWluZm8oKQorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19OSV9XSVRIU0NPUEVJRF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19GVU5DX0dFVE5BTUVJTkZPXSlkbmwKKyAgQUNfUkVRVUlSRShbVFlQRV9TT0NLQUREUl9TVE9SQUdFXSlkbmwKKyAgQUNfQ0hFQ0tfSEVBREVSUyhzdGRpby5oIHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaCBcCisgICAgICAgICAgICAgICAgICAgbmV0ZGIuaCBuZXRpbmV0L2luLmggYXJwYS9pbmV0LmgpCisgICMKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIE5JX1dJVEhTQ09QRUlEXSwKKyAgICBbYWNfY3Zfd29ya2luZ19uaV93aXRoc2NvcGVpZF0sIFsKKyAgICBBQ19SVU5fSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RESU9fSAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorICAgICAgXV0sW1sKKyNpZiBkZWZpbmVkKE5JX1dJVEhTQ09QRUlEKSAmJiBkZWZpbmVkKEhBVkVfR0VUTkFNRUlORk8pCisjaWZkZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRQorICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzYTsKKyNlbHNlCisgICAgICAgIHVuc2lnbmVkIGNoYXIgc2FbMjU2XTsKKyNlbmRpZgorICAgICAgICBjaGFyIGhvc3RidWZbTklfTUFYSE9TVF07CisgICAgICAgIGludCByYzsKKyAgICAgICAgR0VUTkFNRUlORk9fVFlQRV9BUkcyIHNhbGVuID0gKEdFVE5BTUVJTkZPX1RZUEVfQVJHMilzaXplb2Yoc2EpOworICAgICAgICBHRVROQU1FSU5GT19UWVBFX0FSRzQ2IGhvc3RsZW4gPSAoR0VUTkFNRUlORk9fVFlQRV9BUkc0NilzaXplb2YoaG9zdGJ1Zik7CisgICAgICAgIEdFVE5BTUVJTkZPX1RZUEVfQVJHNyBmbGFncyA9IE5JX05VTUVSSUNIT1NUIHwgTklfTlVNRVJJQ1NFUlYgfCBOSV9XSVRIU0NPUEVJRDsKKyAgICAgICAgaW50IGZkID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgMCk7CisgICAgICAgIGlmKGZkIDwgMCkgeworICAgICAgICAgIHBlcnJvcigic29ja2V0KCkiKTsKKyAgICAgICAgICByZXR1cm4gMTsgLyogRXJyb3IgY3JlYXRpbmcgc29ja2V0ICovCisgICAgICAgIH0KKyAgICAgICAgcmMgPSBnZXRzb2NrbmFtZShmZCwgKEdFVE5BTUVJTkZPX1RZUEVfQVJHMSkmc2EsICZzYWxlbik7CisgICAgICAgIGlmKHJjKSB7CisgICAgICAgICAgcGVycm9yKCJnZXRzb2NrbmFtZSgpIik7CisgICAgICAgICAgcmV0dXJuIDI7IC8qIEVycm9yIHJldHJpZXZpbmcgc29ja2V0IG5hbWUgKi8KKyAgICAgICAgfQorICAgICAgICByYyA9IGdldG5hbWVpbmZvKChHRVROQU1FSU5GT19UWVBFX0FSRzEpJnNhLCBzYWxlbiwgaG9zdGJ1ZiwgaG9zdGxlbiwgTlVMTCwgMCwgZmxhZ3MpOworICAgICAgICBpZihyYykgeworICAgICAgICAgIHByaW50ZigicmMgPSAlc1xuIiwgZ2FpX3N0cmVycm9yKHJjKSk7CisgICAgICAgICAgcmV0dXJuIDM7IC8qIEVycm9yIHRyYW5zbGF0aW5nIHNvY2tldCBhZGRyZXNzICovCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7IC8qIE9rLCBOSV9XSVRIU0NPUEVJRCB3b3JrcyAqLworI2Vsc2UKKyAgICAgICAgcmV0dXJuIDQ7IC8qIEVycm9yLCBOSV9XSVRIU0NPUEVJRCBub3QgZGVmaW5lZCBvciBubyBnZXRuYW1laW5mbygpICovCisjZW5kaWYKKyAgICAgIF1dKSAjIEFDLUxBTkctUFJPR1JBTQorICAgIF0sWworICAgICAgIyBFeGl0IGNvZGUgPT0gMC4gUHJvZ3JhbSB3b3JrZWQuCisgICAgICBhY19jdl93b3JraW5nX25pX3dpdGhzY29wZWlkPSJ5ZXMiCisgICAgXSxbCisgICAgICAjIEV4aXQgY29kZSAhPSAwLiBQcm9ncmFtIGZhaWxlZC4KKyAgICAgIGFjX2N2X3dvcmtpbmdfbmlfd2l0aHNjb3BlaWQ9Im5vIgorICAgIF0sWworICAgICAgIyBQcm9ncmFtIGlzIG5vdCBydW4gd2hlbiBjcm9zcy1jb21waWxpbmcuIFNvIHdlIGFzc3VtZQorICAgICAgIyBOSV9XSVRIU0NPUEVJRCB3aWxsIHdvcmsgaWYgd2UgYXJlIGFibGUgdG8gY29tcGlsZSBpdC4KKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgICAgIF1dLFtbCisgICAgICAgICAgdW5zaWduZWQgaW50IGR1bW15PSBOSV9OVU1FUklDSE9TVCB8IE5JX05VTUVSSUNTRVJWIHwgTklfV0lUSFNDT1BFSUQ7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIGFjX2N2X3dvcmtpbmdfbmlfd2l0aHNjb3BlaWQ9InllcyIKKyAgICAgIF0sWworICAgICAgICBhY19jdl93b3JraW5nX25pX3dpdGhzY29wZWlkPSJubyIKKyAgICAgIF0pICMgQUMtQ09NUElMRS1JRkVMU0UKKyAgICBdKSAjIEFDLVJVTi1JRkVMU0UKKyAgXSkgIyBBQy1DQUNIRS1DSEVDSworICBjYXNlICIkYWNfY3Zfd29ya2luZ19uaV93aXRoc2NvcGVpZCIgaW4KKyAgICB5ZXMpCisgICAgICBBQ19ERUZJTkUoSEFWRV9OSV9XSVRIU0NPUEVJRCwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIE5JX1dJVEhTQ09QRUlEIGV4aXN0cyBhbmQgd29ya3MuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19SRUNWCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRlc3QgaWYgdGhlIHNvY2tldCByZWN2KCkgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLAorZG5sIGFuZCBjaGVjayBpdHMgcmV0dXJuIHR5cGUgYW5kIHRoZSB0eXBlcyBvZiBpdHMKK2RubCBhcmd1bWVudHMuIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyBIQVZFX1JFQ1YKK2RubCB3aWxsIGJlIGRlZmluZWQsIGRlZmluaW5nIHRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzCitkbmwgaW4gUkVDVl9UWVBFX0FSRzEsIFJFQ1ZfVFlQRV9BUkcyLCBSRUNWX1RZUEVfQVJHMworZG5sIGFuZCBSRUNWX1RZUEVfQVJHNCwgZGVmaW5pbmcgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uCitkbmwgcmV0dXJuIHZhbHVlIGluIFJFQ1ZfVFlQRV9SRVRWLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX1JFQ1ZdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTlNPQ0tdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLMl0pZG5sCisgIEFDX0NIRUNLX0hFQURFUlMoc3lzL3R5cGVzLmggc3lzL3NvY2tldC5oKQorICAjCisgIEFDX01TR19DSEVDS0lORyhbZm9yIHJlY3ZdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2VuZGlmCisgICAgXV0sW1sKKyAgICAgIHJlY3YoMCwgMCwgMCwgMCk7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgY3VybF9jdl9yZWN2PSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBjdXJsX2N2X3JlY3Y9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiRjdXJsX2N2X3JlY3YiID0gInllcyI7IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyhbdHlwZXMgb2YgYXJncyBhbmQgcmV0dXJuIHR5cGUgZm9yIHJlY3ZdLAorICAgICAgW2N1cmxfY3ZfZnVuY19yZWN2X2FyZ3NdLCBbCisgICAgICBjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzPSJ1bmtub3duIgorICAgICAgZm9yIHJlY3ZfcmV0diBpbiAnaW50JyAnc3NpemVfdCc7IGRvCisgICAgICAgIGZvciByZWN2X2FyZzEgaW4gJ2ludCcgJ3NzaXplX3QnICdTT0NLRVQnOyBkbworICAgICAgICAgIGZvciByZWN2X2FyZzIgaW4gJ2NoYXIgKicgJ3ZvaWQgKic7IGRvCisgICAgICAgICAgICBmb3IgcmVjdl9hcmczIGluICdzaXplX3QnICdpbnQnICdzb2NrbGVuX3QnICd1bnNpZ25lZCBpbnQnOyBkbworICAgICAgICAgICAgICBmb3IgcmVjdl9hcmc0IGluICdpbnQnICd1bnNpZ25lZCBpbnQnOyBkbworICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICAgICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICAgICAgICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIFJFQ1ZDQUxMQ09OViBQQVNDQUwKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNkZWZpbmUgUkVDVkNBTExDT05WCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gJHJlY3ZfcmV0diBSRUNWQ0FMTENPTlYKKyAgICAgICAgICAgICAgICAgICAgICByZWN2KCRyZWN2X2FyZzEsICRyZWN2X2FyZzIsICRyZWN2X2FyZzMsICRyZWN2X2FyZzQpOworICAgICAgICAgICAgICAgICAgICBdXSxbWworICAgICAgICAgICAgICAgICAgICAgICRyZWN2X2FyZzEgcz0wOworICAgICAgICAgICAgICAgICAgICAgICRyZWN2X2FyZzIgYnVmPTA7CisgICAgICAgICAgICAgICAgICAgICAgJHJlY3ZfYXJnMyBsZW49MDsKKyAgICAgICAgICAgICAgICAgICAgICAkcmVjdl9hcmc0IGZsYWdzPTA7CisgICAgICAgICAgICAgICAgICAgICAgJHJlY3ZfcmV0diByZXMgPSByZWN2KHMsIGJ1ZiwgbGVuLCBmbGFncyk7CisgICAgICAgICAgICAgICAgICAgIF1dKQorICAgICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgICAgIGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3M9IiRyZWN2X2FyZzEsJHJlY3ZfYXJnMiwkcmVjdl9hcmczLCRyZWN2X2FyZzQsJHJlY3ZfcmV0diIKKyAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGRvbmUKKyAgICAgICAgZG9uZQorICAgICAgZG9uZQorICAgIF0pICMgQUMtQ0FDSEUtQ0hFQ0sKKyAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX3JlY3ZfYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19FUlJPUihbQ2Fubm90IGZpbmQgcHJvcGVyIHR5cGVzIHRvIHVzZSBmb3IgcmVjdiBhcmdzXSkKKyAgICBlbHNlCisgICAgICByZWN2X3ByZXZfSUZTPSRJRlM7IElGUz0nLCcKKyAgICAgIHNldCBkdW1teSBgZWNobyAiJGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3MiIHwgc2VkICdzL1wqL1wqL2cnYAorICAgICAgSUZTPSRyZWN2X3ByZXZfSUZTCisgICAgICBzaGlmdAorICAgICAgIworICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFJFQ1ZfVFlQRV9BUkcxLCAkWzFdLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2Ll0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoUkVDVl9UWVBFX0FSRzIsICRbMl0sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHJlY3YuXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWX1RZUEVfQVJHMywgJFszXSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdi5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFJFQ1ZfVFlQRV9BUkc0LCAkWzRdLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2Ll0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoUkVDVl9UWVBFX1JFVFYsICRbNV0sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2Ll0pCisgICAgICAjCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9SRUNWLCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHJlY3YgZnVuY3Rpb24uXSkKKyAgICAgIGFjX2N2X2Z1bmNfcmVjdj0ieWVzIgorICAgIGZpCisgIGVsc2UKKyAgICBBQ19NU0dfRVJST1IoW1VuYWJsZSB0byBsaW5rIGZ1bmN0aW9uIHJlY3ZdKQorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NFTkQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGVzdCBpZiB0aGUgc29ja2V0IHNlbmQoKSBmdW5jdGlvbiBpcyBhdmFpbGFibGUsCitkbmwgYW5kIGNoZWNrIGl0cyByZXR1cm4gdHlwZSBhbmQgdGhlIHR5cGVzIG9mIGl0cworZG5sIGFyZ3VtZW50cy4gSWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzIEhBVkVfU0VORAorZG5sIHdpbGwgYmUgZGVmaW5lZCwgZGVmaW5pbmcgdGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMKK2RubCBpbiBTRU5EX1RZUEVfQVJHMSwgU0VORF9UWVBFX0FSRzIsIFNFTkRfVFlQRV9BUkczCitkbmwgYW5kIFNFTkRfVFlQRV9BUkc0LCBkZWZpbmluZyB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24KK2RubCByZXR1cm4gdmFsdWUgaW4gU0VORF9UWVBFX1JFVFYsIGFuZCBhbHNvIGRlZmluaW5nIHRoZQorZG5sIHR5cGUgcXVhbGlmaWVyIG9mIHNlY29uZCBhcmd1bWVudCBpbiBTRU5EX1FVQUxfQVJHMi4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19TRU5EXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19IRUFERVJfV0lOU09DSzJdKWRubAorICBBQ19DSEVDS19IRUFERVJTKHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaCkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzZW5kXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNlbmRpZgorICAgIF1dLFtbCisgICAgICBzZW5kKDAsIDAsIDAsIDApOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGN1cmxfY3Zfc2VuZD0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgY3VybF9jdl9zZW5kPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkY3VybF9jdl9zZW5kIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3R5cGVzIG9mIGFyZ3MgYW5kIHJldHVybiB0eXBlIGZvciBzZW5kXSwKKyAgICAgIFtjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzXSwgWworICAgICAgY3VybF9jdl9mdW5jX3NlbmRfYXJncz0idW5rbm93biIKKyAgICAgIGZvciBzZW5kX3JldHYgaW4gJ2ludCcgJ3NzaXplX3QnOyBkbworICAgICAgICBmb3Igc2VuZF9hcmcxIGluICdpbnQnICdzc2l6ZV90JyAnU09DS0VUJzsgZG8KKyAgICAgICAgICBmb3Igc2VuZF9hcmcyIGluICdjaGFyIConICd2b2lkIConICdjb25zdCBjaGFyIConICdjb25zdCB2b2lkIConOyBkbworICAgICAgICAgICAgZm9yIHNlbmRfYXJnMyBpbiAnc2l6ZV90JyAnaW50JyAnc29ja2xlbl90JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgICAgICAgICAgZm9yIHNlbmRfYXJnNCBpbiAnaW50JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX3NlbmRfYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgICAgICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2RlZmluZSBTRU5EQ0FMTENPTlYgUEFTQ0FMCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjZGVmaW5lIFNFTkRDQUxMQ09OVgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuICRzZW5kX3JldHYgU0VORENBTExDT05WCisgICAgICAgICAgICAgICAgICAgICAgc2VuZCgkc2VuZF9hcmcxLCAkc2VuZF9hcmcyLCAkc2VuZF9hcmczLCAkc2VuZF9hcmc0KTsKKyAgICAgICAgICAgICAgICAgICAgXV0sW1sKKyAgICAgICAgICAgICAgICAgICAgICAkc2VuZF9hcmcxIHM9MDsKKyAgICAgICAgICAgICAgICAgICAgICAkc2VuZF9hcmczIGxlbj0wOworICAgICAgICAgICAgICAgICAgICAgICRzZW5kX2FyZzQgZmxhZ3M9MDsKKyAgICAgICAgICAgICAgICAgICAgICAkc2VuZF9yZXR2IHJlcyA9IHNlbmQocywgMCwgbGVuLCBmbGFncyk7CisgICAgICAgICAgICAgICAgICAgIF1dKQorICAgICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgICAgIGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3M9IiRzZW5kX2FyZzEsJHNlbmRfYXJnMiwkc2VuZF9hcmczLCRzZW5kX2FyZzQsJHNlbmRfcmV0diIKKyAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGRvbmUKKyAgICAgICAgZG9uZQorICAgICAgZG9uZQorICAgIF0pICMgQUMtQ0FDSEUtQ0hFQ0sKKyAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX3NlbmRfYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19FUlJPUihbQ2Fubm90IGZpbmQgcHJvcGVyIHR5cGVzIHRvIHVzZSBmb3Igc2VuZCBhcmdzXSkKKyAgICBlbHNlCisgICAgICBzZW5kX3ByZXZfSUZTPSRJRlM7IElGUz0nLCcKKyAgICAgIHNldCBkdW1teSBgZWNobyAiJGN1cmxfY3ZfZnVuY19zZW5kX2FyZ3MiIHwgc2VkICdzL1wqL1wqL2cnYAorICAgICAgSUZTPSRzZW5kX3ByZXZfSUZTCisgICAgICBzaGlmdAorICAgICAgIworICAgICAgc2VuZF9xdWFsX3R5cGVfYXJnMj0kWzJdCisgICAgICAjCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0VORF9UWVBFX0FSRzEsICRbMV0sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHNlbmQuXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRU5EX1RZUEVfQVJHMywgJFszXSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3Igc2VuZC5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNFTkRfVFlQRV9BUkc0LCAkWzRdLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciBzZW5kLl0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0VORF9UWVBFX1JFVFYsICRbNV0sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciBzZW5kLl0pCisgICAgICAjCisgICAgICBwcmV2X3NoX29wdHM9JC0KKyAgICAgICMKKyAgICAgIGNhc2UgJHByZXZfc2hfb3B0cyBpbgorICAgICAgICAqZiopCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBzZXQgLWYKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgIworICAgICAgY2FzZSAiJHNlbmRfcXVhbF90eXBlX2FyZzIiIGluCisgICAgICAgIGNvbnN0KikKKyAgICAgICAgICBzZW5kX3F1YWxfYXJnMj1jb25zdAorICAgICAgICAgIHNlbmRfdHlwZV9hcmcyPWBlY2hvICRzZW5kX3F1YWxfdHlwZV9hcmcyIHwgc2VkICdzL15jb25zdCAvLydgCisgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2VuZF9xdWFsX2FyZzI9CisgICAgICAgICAgc2VuZF90eXBlX2FyZzI9JHNlbmRfcXVhbF90eXBlX2FyZzIKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRU5EX1FVQUxfQVJHMiwgJHNlbmRfcXVhbF9hcmcyLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMiBmb3Igc2VuZC5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNFTkRfVFlQRV9BUkcyLCAkc2VuZF90eXBlX2FyZzIsCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHNlbmQuXSkKKyAgICAgICMKKyAgICAgIGNhc2UgJHByZXZfc2hfb3B0cyBpbgorICAgICAgICAqZiopCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBzZXQgK2YKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgIworICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU0VORCwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzZW5kIGZ1bmN0aW9uLl0pCisgICAgICBhY19jdl9mdW5jX3NlbmQ9InllcyIKKyAgICBmaQorICBlbHNlCisgICAgQUNfTVNHX0VSUk9SKFtVbmFibGUgdG8gbGluayBmdW5jdGlvbiBzZW5kXSkKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19SRUNWRlJPTQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUZXN0IGlmIHRoZSBzb2NrZXQgcmVjdmZyb20oKSBmdW5jdGlvbiBpcyBhdmFpbGFibGUsCitkbmwgYW5kIGNoZWNrIGl0cyByZXR1cm4gdHlwZSBhbmQgdGhlIHR5cGVzIG9mIGl0cworZG5sIGFyZ3VtZW50cy4gSWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzIEhBVkVfUkVDVkZST00KK2RubCB3aWxsIGJlIGRlZmluZWQsIGRlZmluaW5nIHRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzCitkbmwgaW4gUkVDVkZST01fVFlQRV9BUkcxLCBSRUNWRlJPTV9UWVBFX0FSRzIsIGFuZCBzbyBvbgorZG5sIHRvIFJFQ1ZGUk9NX1RZUEVfQVJHNiwgZGVmaW5pbmcgYWxzbyB0aGUgdHlwZSBvZiB0aGUKK2RubCBmdW5jdGlvbiByZXR1cm4gdmFsdWUgaW4gUkVDVkZST01fVFlQRV9SRVRWLgorZG5sIE5vdGljZSB0aGF0IHRoZSB0eXBlcyByZXR1cm5lZCBmb3IgcG9pbnRlciBhcmd1bWVudHMKK2RubCB3aWxsIGFjdHVhbGx5IGJlIHRoZSB0eXBlIHBvaW50ZWQgYnkgdGhlIHBvaW50ZXIuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfUkVDVkZST01dLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTlNPQ0tdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLMl0pZG5sCisgIEFDX0NIRUNLX0hFQURFUlMoc3lzL3R5cGVzLmggc3lzL3NvY2tldC5oKQorICAjCisgIEFDX01TR19DSEVDS0lORyhbZm9yIHJlY3Zmcm9tXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNlbmRpZgorICAgIF1dLFtbCisgICAgICByZWN2ZnJvbSgwLCAwLCAwLCAwLCAwLCAwKTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBjdXJsX2N2X3JlY3Zmcm9tPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBjdXJsX2N2X3JlY3Zmcm9tPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkY3VybF9jdl9yZWN2ZnJvbSIgPSAieWVzIjsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFt0eXBlcyBvZiBhcmdzIGFuZCByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb21dLAorICAgICAgW2N1cmxfY3ZfZnVuY19yZWN2ZnJvbV9hcmdzXSwgWworICAgICAgY3VybF9jdl9mdW5jX3JlY3Zmcm9tX2FyZ3M9InVua25vd24iCisgICAgICBmb3IgcmVjdmZyb21fcmV0diBpbiAnaW50JyAnc3NpemVfdCc7IGRvCisgICAgICAgIGZvciByZWN2ZnJvbV9hcmcxIGluICdpbnQnICdzc2l6ZV90JyAnU09DS0VUJzsgZG8KKyAgICAgICAgICBmb3IgcmVjdmZyb21fYXJnMiBpbiAnY2hhciAqJyAndm9pZCAqJzsgZG8KKyAgICAgICAgICAgIGZvciByZWN2ZnJvbV9hcmczIGluICdzaXplX3QnICdpbnQnICdzb2NrbGVuX3QnICd1bnNpZ25lZCBpbnQnOyBkbworICAgICAgICAgICAgICBmb3IgcmVjdmZyb21fYXJnNCBpbiAnaW50JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgICAgICAgICAgICBmb3IgcmVjdmZyb21fYXJnNSBpbiAnc3RydWN0IHNvY2thZGRyIConICd2b2lkIConICdjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKic7IGRvCisgICAgICAgICAgICAgICAgICBmb3IgcmVjdmZyb21fYXJnNiBpbiAnc29ja2xlbl90IConICdpbnQgKicgJ3Vuc2lnbmVkIGludCAqJyAnc2l6ZV90IConICd2b2lkIConOyBkbworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX3JlY3Zmcm9tX2FyZ3MiID0gInVua25vd24iOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICAgICAgICAgICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2RlZmluZSBSRUNWRlJPTUNBTExDT05WIFBBU0NBTAorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2RlZmluZSBSRUNWRlJPTUNBTExDT05WCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuICRyZWN2ZnJvbV9yZXR2IFJFQ1ZGUk9NQ0FMTENPTlYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdmZyb20oJHJlY3Zmcm9tX2FyZzEsICRyZWN2ZnJvbV9hcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fYXJnMywgJHJlY3Zmcm9tX2FyZzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWN2ZnJvbV9hcmc1LCAkcmVjdmZyb21fYXJnNik7CisgICAgICAgICAgICAgICAgICAgICAgICBdXSxbWworICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fYXJnMSBzPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWN2ZnJvbV9hcmcyIGJ1Zj0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fYXJnMyBsZW49MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzQgZmxhZ3M9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzUgYWRkcj0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fYXJnNiBhZGRybGVuPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWN2ZnJvbV9yZXR2IHJlcz0wOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSByZWN2ZnJvbShzLCBidWYsIGxlbiwgZmxhZ3MsIGFkZHIsIGFkZHJsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgXV0pCisgICAgICAgICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2N2X2Z1bmNfcmVjdmZyb21fYXJncz0iJHJlY3Zmcm9tX2FyZzEsJHJlY3Zmcm9tX2FyZzIsJHJlY3Zmcm9tX2FyZzMsJHJlY3Zmcm9tX2FyZzQsJHJlY3Zmcm9tX2FyZzUsJHJlY3Zmcm9tX2FyZzYsJHJlY3Zmcm9tX3JldHYiCisgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBkb25lCisgICAgICAgIGRvbmUKKyAgICAgIGRvbmUKKyAgICBdKSAjIEFDLUNBQ0hFLUNIRUNLCisgICAgIyBOZWFybHkgbGFzdCBtaW51dGUgY2hhbmdlIGZvciB0aGlzIHJlbGVhc2Ugc3RhcnRzIGhlcmUKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9SRUNWRlJPTSwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgcmVjdmZyb20gZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX3JlY3Zmcm9tPSJ5ZXMiCisgICAgIyBOZWFybHkgbGFzdCBtaW51dGUgY2hhbmdlIGZvciB0aGlzIHJlbGVhc2UgZW5kcyBoZXJlCisgICAgaWYgdGVzdCAiJGN1cmxfY3ZfZnVuY19yZWN2ZnJvbV9hcmdzIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfTVNHX1dBUk4oW0Nhbm5vdCBmaW5kIHByb3BlciB0eXBlcyB0byB1c2UgZm9yIHJlY3Zmcm9tIGFyZ3NdKQorICAgIGVsc2UKKyAgICAgIHJlY3Zmcm9tX3ByZXZfSUZTPSRJRlM7IElGUz0nLCcKKyAgICAgIHNldCBkdW1teSBgZWNobyAiJGN1cmxfY3ZfZnVuY19yZWN2ZnJvbV9hcmdzIiB8IHNlZCAncy9cKi9cKi9nJ2AKKyAgICAgIElGUz0kcmVjdmZyb21fcHJldl9JRlMKKyAgICAgIHNoaWZ0CisgICAgICAjCisgICAgICByZWN2ZnJvbV9wdHJ0X2FyZzI9JFsyXQorICAgICAgcmVjdmZyb21fcXVhbF9wdHJ0X2FyZzU9JFs1XQorICAgICAgcmVjdmZyb21fcHRydF9hcmc2PSRbNl0KKyAgICAgICMKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWRlJPTV9UWVBFX0FSRzEsICRbMV0sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3Zmcm9tLl0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoUkVDVkZST01fVFlQRV9BUkczLCAkWzNdLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2ZnJvbS5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFJFQ1ZGUk9NX1RZUEVfQVJHNCwgJFs0XSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3IgcmVjdmZyb20uXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWRlJPTV9UWVBFX1JFVFYsICRbN10sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2ZnJvbS5dKQorICAgICAgIworICAgICAgcHJldl9zaF9vcHRzPSQtCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0IC1mCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIGNhc2UgIiRyZWN2ZnJvbV9xdWFsX3B0cnRfYXJnNSIgaW4KKyAgICAgICAgY29uc3QqKQorICAgICAgICAgIHJlY3Zmcm9tX3F1YWxfYXJnNT1jb25zdAorICAgICAgICAgIHJlY3Zmcm9tX3B0cnRfYXJnNT1gZWNobyAkcmVjdmZyb21fcXVhbF9wdHJ0X2FyZzUgfCBzZWQgJ3MvXmNvbnN0IC8vJ2AKKyAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICByZWN2ZnJvbV9xdWFsX2FyZzU9CisgICAgICAgICAgcmVjdmZyb21fcHRydF9hcmc1PSRyZWN2ZnJvbV9xdWFsX3B0cnRfYXJnNQorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgIworICAgICAgcmVjdmZyb21fdHlwZV9hcmcyPWBlY2hvICRyZWN2ZnJvbV9wdHJ0X2FyZzIgfCBzZWQgJ3MvIFwqLy8nYAorICAgICAgcmVjdmZyb21fdHlwZV9hcmc1PWBlY2hvICRyZWN2ZnJvbV9wdHJ0X2FyZzUgfCBzZWQgJ3MvIFwqLy8nYAorICAgICAgcmVjdmZyb21fdHlwZV9hcmc2PWBlY2hvICRyZWN2ZnJvbV9wdHJ0X2FyZzYgfCBzZWQgJ3MvIFwqLy8nYAorICAgICAgIworICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFJFQ1ZGUk9NX1RZUEVfQVJHMiwgJHJlY3Zmcm9tX3R5cGVfYXJnMiwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbS5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFJFQ1ZGUk9NX1FVQUxfQVJHNSwgJHJlY3Zmcm9tX3F1YWxfYXJnNSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgcG9pbnRlZCBieSBhcmcgNSBmb3IgcmVjdmZyb20uXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWRlJPTV9UWVBFX0FSRzUsICRyZWN2ZnJvbV90eXBlX2FyZzUsCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNSBmb3IgcmVjdmZyb20uXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWRlJPTV9UWVBFX0FSRzYsICRyZWN2ZnJvbV90eXBlX2FyZzYsCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20uXSkKKyAgICAgICMKKyAgICAgIGlmIHRlc3QgIiRyZWN2ZnJvbV90eXBlX2FyZzIiID0gInZvaWQiOyB0aGVuCisgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWRlJPTV9UWVBFX0FSRzJfSVNfVk9JRCwgMSwKKyAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgMiBmb3IgcmVjdmZyb20gaXMgdm9pZC5dKQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRyZWN2ZnJvbV90eXBlX2FyZzUiID0gInZvaWQiOyB0aGVuCisgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWRlJPTV9UWVBFX0FSRzVfSVNfVk9JRCwgMSwKKyAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNSBmb3IgcmVjdmZyb20gaXMgdm9pZC5dKQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRyZWN2ZnJvbV90eXBlX2FyZzYiID0gInZvaWQiOyB0aGVuCisgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSRUNWRlJPTV9UWVBFX0FSRzZfSVNfVk9JRCwgMSwKKyAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20gaXMgdm9pZC5dKQorICAgICAgZmkKKyAgICAgICMKKyAgICAgIGNhc2UgJHByZXZfc2hfb3B0cyBpbgorICAgICAgICAqZiopCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBzZXQgK2YKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgIworICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfUkVDVkZST00sIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgcmVjdmZyb20gZnVuY3Rpb24uXSkKKyAgICAgIGFjX2N2X2Z1bmNfcmVjdmZyb209InllcyIKKyAgICBmaQorICBlbHNlCisgICAgQUNfTVNHX1dBUk4oW1VuYWJsZSB0byBsaW5rIGZ1bmN0aW9uIHJlY3Zmcm9tXSkKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfTVNHX05PU0lHTkFMCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBNU0dfTk9TSUdOQUwKKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTVNHX05PU0lHTkFMXSwgWworICBBQ19DSEVDS19IRUFERVJTKHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaCkKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBNU0dfTk9TSUdOQUxdLCBbYWNfY3ZfbXNnX25vc2lnbmFsXSwgWworICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNlbmRpZgorICAgICAgXV0sW1sKKyAgICAgICAgaW50IGZsYWc9TVNHX05PU0lHTkFMOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBhY19jdl9tc2dfbm9zaWduYWw9InllcyIKKyAgICBdLFsKKyAgICAgIGFjX2N2X21zZ19ub3NpZ25hbD0ibm8iCisgICAgXSkKKyAgXSkKKyAgY2FzZSAiJGFjX2N2X21zZ19ub3NpZ25hbCIgaW4KKyAgICB5ZXMpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9NU0dfTk9TSUdOQUwsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTVNHX05PU0lHTkFMIGZsYWcuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfU1RSVUNUX1RJTUVWQUwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIHRpbWV2YWwgc3RydWN0CisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX1NUUlVDVF9USU1FVkFMXSwgWworICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfVElNRV0pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfSEVBREVSX1dJTlNPQ0tdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLMl0pZG5sCisgIEFDX0NIRUNLX0hFQURFUlMoc3lzL3R5cGVzLmggc3lzL3RpbWUuaCB0aW1lLmggc3lzL3NvY2tldC5oKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0cnVjdCB0aW1ldmFsXSwgW2FjX2N2X3N0cnVjdF90aW1ldmFsXSwgWworICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfVElNRV9ICisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorICAgICAgXV0sW1sKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdHM7CisgICAgICAgIHRzLnR2X3NlYyAgPSAwOworICAgICAgICB0cy50dl91c2VjID0gMDsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgYWNfY3Zfc3RydWN0X3RpbWV2YWw9InllcyIKKyAgICBdLFsKKyAgICAgIGFjX2N2X3N0cnVjdF90aW1ldmFsPSJubyIKKyAgICBdKQorICBdKQorICBjYXNlICIkYWNfY3Zfc3RydWN0X3RpbWV2YWwiIGluCisgICAgeWVzKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RSVUNUX1RJTUVWQUwsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgdGltZXZhbCBzdHJ1Y3QuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIFRZUEVfU0lHX0FUT01JQ19UCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGlmIHRoZSBzaWdfYXRvbWljX3QgdHlwZSBpcyBhdmFpbGFibGUsIGFuZAorZG5sIHZlcmlmeSBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgdm9sYXRpbGUuCisKK0FDX0RFRlVOKFtUWVBFX1NJR19BVE9NSUNfVF0sIFsKKyAgQUNfQ0hFQ0tfSEVBREVSUyhzaWduYWwuaCkKKyAgQUNfQ0hFQ0tfVFlQRShbc2lnX2F0b21pY190XSxbCisgICAgQUNfREVGSU5FKEhBVkVfU0lHX0FUT01JQ19ULCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHNpZ19hdG9taWNfdCBpcyBhbiBhdmFpbGFibGUgdHlwZWRlZi5dKQorICBdLCAsWworI2lmZGVmIEhBVkVfU0lHTkFMX0gKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorICBdKQorICBjYXNlICIkYWNfY3ZfdHlwZV9zaWdfYXRvbWljX3QiIGluCisgICAgeWVzKQorICAgICAgIworICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzaWdfYXRvbWljX3QgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIHZvbGF0aWxlXSkKKyAgICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisgICAgICAgIF1dLFtbCisgICAgICAgICAgc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBkdW1teSA9IDA7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgYWNfY3Zfc2lnX2F0b21pY190X3ZvbGF0aWxlPSJubyIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICBhY19jdl9zaWdfYXRvbWljX3Rfdm9sYXRpbGU9InllcyIKKyAgICAgIF0pCisgICAgICAjCisgICAgICBpZiB0ZXN0ICIkYWNfY3Zfc2lnX2F0b21pY190X3ZvbGF0aWxlIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIEFDX0RFRklORShIQVZFX1NJR19BVE9NSUNfVF9WT0xBVElMRSwgMSwKKyAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgc2lnX2F0b21pY190IGlzIGFscmVhZHkgZGVmaW5lZCBhcyB2b2xhdGlsZS5dKQorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIFRZUEVfSU5fQUREUl9UCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGZvciBpbl9hZGRyX3Q6IGl0IGlzIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcmV0dXJuIGNvZGUgb2YgaW5ldF9hZGRyKCkKK2RubCBhbmQgYSBmZXcgb3RoZXIgdGhpbmdzLgorCitBQ19ERUZVTihbVFlQRV9JTl9BRERSX1RdLCBbCisgIEFDX0NIRUNLX1RZUEUoW2luX2FkZHJfdF0sICxbCisgICAgZG5sIGluX2FkZHJfdCBub3QgYXZhaWxhYmxlCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbl9hZGRyX3QgZXF1aXZhbGVudF0sCisgICAgICBbY3VybF9jdl9pbl9hZGRyX3RfZXF1aXZdLCBbCisgICAgICBjdXJsX2N2X2luX2FkZHJfdF9lcXVpdj0idW5rbm93biIKKyAgICAgIGZvciB0IGluICJ1bnNpZ25lZCBsb25nIiBpbnQgc2l6ZV90IHVuc2lnbmVkIGxvbmc7IGRvCisgICAgICAgIGlmIHRlc3QgIiRjdXJsX2N2X2luX2FkZHJfdF9lcXVpdiIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNlbmRpZgorICAgICAgICAgICAgXV0sW1sKKyAgICAgICAgICAgICAgJHQgZGF0YSA9IGluZXRfYWRkciAoIjEuMi4zLjQiKTsKKyAgICAgICAgICAgIF1dKQorICAgICAgICAgIF0sWworICAgICAgICAgICAgY3VybF9jdl9pbl9hZGRyX3RfZXF1aXY9IiR0IgorICAgICAgICAgIF0pCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgXSkKKyAgICBjYXNlICIkY3VybF9jdl9pbl9hZGRyX3RfZXF1aXYiIGluCisgICAgICB1bmtub3duKQorICAgICAgICBBQ19NU0dfRVJST1IoW0Nhbm5vdCBmaW5kIGEgdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2YgaW5fYWRkcl90XSkKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChpbl9hZGRyX3QsICRjdXJsX2N2X2luX2FkZHJfdF9lcXVpdiwKKyAgICAgICAgICBbVHlwZSB0byB1c2UgaW4gcGxhY2Ugb2YgaW5fYWRkcl90IHdoZW4gc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgaXQuXSkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIF0sWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2VuZGlmCisgIF0pCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgbW9ub3RvbmljIGNsb2NrX2dldHRpbWUgaXMgYXZhaWxhYmxlLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDXSwgWworICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfVElNRV0pZG5sCisgIEFDX0NIRUNLX0hFQURFUlMoc3lzL3R5cGVzLmggc3lzL3RpbWUuaCB0aW1lLmgpCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG1vbm90b25pYyBjbG9ja19nZXR0aW1lXSkKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfVElNRV9ICisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZW5kaWYKKyAgICBdXSxbWworICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOworICAgICAgKHZvaWQpY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cyk7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgYWNfY3ZfZnVuY19jbG9ja19nZXR0aW1lPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWU9Im5vIgorICBdKQorICBkbmwgRGVmaW5pdGlvbiBvZiBIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDIGlzIGludGVudGlvbmFsbHkgcG9zdHBvbmVkCisgIGRubCB1bnRpbCBsaWJyYXJ5IGxpbmtpbmcgYW5kIHJ1bi10aW1lIGNoZWNrcyBmb3IgY2xvY2tfZ2V0dGltZSBzdWNjZWVkLgorXSkKKworCitkbmwgQ1VSTF9DSEVDS19MSUJTX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIElmIG1vbm90b25pYyBjbG9ja19nZXR0aW1lIGlzIGF2YWlsYWJsZSB0aGVuLAorZG5sIGNoZWNrIGFuZCBwcmVwZW5kZWQgdG8gTElCUyBhbnkgbmVlZGVkIGxpYnJhcmllcy4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTElCU19DTE9DS19HRVRUSU1FX01PTk9UT05JQ10sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19GVU5DX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDXSlkbmwKKyAgIworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19jbG9ja19nZXR0aW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgIworICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGNsb2NrX2dldHRpbWUgaW4gbGlicmFyaWVzXSkKKyAgICAjCisgICAgY3VybF9jdl9zYXZlX0xJQlM9IiRMSUJTIgorICAgIGN1cmxfY3ZfZ2Nsa19MSUJTPSJ1bmtub3duIgorICAgICMKKyAgICBmb3IgeF94bGlicyBpbiAnJyAnLWxydCcgJy1scG9zaXg0JyA7IGRvCisgICAgICBpZiB0ZXN0ICIkY3VybF9jdl9nY2xrX0xJQlMiID0gInVua25vd24iOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLXogIiR4X3hsaWJzIjsgdGhlbgorICAgICAgICAgIExJQlM9IiRjdXJsX2N2X3NhdmVfTElCUyIKKyAgICAgICAgZWxzZQorICAgICAgICAgIExJQlM9IiR4X3hsaWJzICRjdXJsX2N2X3NhdmVfTElCUyIKKyAgICAgICAgZmkKKyAgICAgICAgQUNfTElOS19JRkVMU0UoWworICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfVElNRV9ICisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZW5kaWYKKyAgICAgICAgICBdXSxbWworICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOworICAgICAgICAgICAgKHZvaWQpY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cyk7CisgICAgICAgICAgXV0pCisgICAgICAgIF0sWworICAgICAgICAgIGN1cmxfY3ZfZ2Nsa19MSUJTPSIkeF94bGlicyIKKyAgICAgICAgXSkKKyAgICAgIGZpCisgICAgZG9uZQorICAgICMKKyAgICBMSUJTPSIkY3VybF9jdl9zYXZlX0xJQlMiCisgICAgIworICAgIGNhc2UgWC0iJGN1cmxfY3ZfZ2Nsa19MSUJTIiBpbgorICAgICAgWC11bmtub3duKQorICAgICAgICBBQ19NU0dfUkVTVUxUKFtjYW5ub3QgZmluZCBjbG9ja19nZXR0aW1lXSkKKyAgICAgICAgQUNfTVNHX1dBUk4oW0hBVkVfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMgd2lsbCBub3QgYmUgZGVmaW5lZF0pCisgICAgICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ibm8iCisgICAgICAgIDs7CisgICAgICBYLSkKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm8gYWRkaXRpb25hbCBsaWIgcmVxdWlyZWRdKQorICAgICAgICBhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWU9InllcyIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGlmIHRlc3QgLXogIiRjdXJsX2N2X3NhdmVfTElCUyI7IHRoZW4KKyAgICAgICAgICBMSUJTPSIkY3VybF9jdl9nY2xrX0xJQlMiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBMSUJTPSIkY3VybF9jdl9nY2xrX0xJQlMgJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICAgICBmaQorICAgICAgICBDVVJMX0xJQlM9IiRDVVJMX0xJQlMgJGN1cmxfY3ZfZ2Nsa19MSUJTIgorICAgICAgICBBQ19NU0dfUkVTVUxUKFskY3VybF9jdl9nY2xrX0xJQlNdKQorICAgICAgICBhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWU9InllcyIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgIworICAgIGRubCBvbmx5IGRvIHJ1bnRpbWUgdmVyaWZpY2F0aW9uIHdoZW4gbm90IGNyb3NzLWNvbXBpbGluZworICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICAgIHRlc3QgIiRhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWUiID0gInllcyI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgbW9ub3RvbmljIGNsb2NrX2dldHRpbWUgd29ya3NdKQorICAgICAgQUNfUlVOX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfVElNRV9ICisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZW5kaWYKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisgICAgICAgICAgaWYgKDAgPT0gY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cykpCisgICAgICAgICAgICBleGl0KDApOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICBBQ19NU0dfV0FSTihbSEFWRV9DTE9DS19HRVRUSU1FX01PTk9UT05JQyB3aWxsIG5vdCBiZSBkZWZpbmVkXSkKKyAgICAgICAgYWNfY3ZfZnVuY19jbG9ja19nZXR0aW1lPSJubyIKKyAgICAgICAgTElCUz0iJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICAgXSkKKyAgICBmaQorICAgICMKKyAgICBjYXNlICIkYWNfY3ZfZnVuY19jbG9ja19nZXR0aW1lIiBpbgorICAgICAgeWVzKQorICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9DTE9DS19HRVRUSU1FX01PTk9UT05JQywgMSwKKyAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGNsb2NrX2dldHRpbWUgZnVuY3Rpb24gYW5kIG1vbm90b25pYyB0aW1lci5dKQorICAgICAgICA7OworICAgIGVzYWMKKyAgICAjCisgIGZpCisgICMKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfTElCU19DT05ORUNUCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBuZXR3b3JrIGNvbm5lY3QgZnVuY3Rpb24gaXMgYWxyZWFkeSBhdmFpbGFibGUKK2RubCB1c2luZyBjdXJyZW50IGxpYnJhcmllcyBvciBpZiBhbm90aGVyIG9uZSBpcyByZXF1aXJlZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTElCU19DT05ORUNUXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1dJTlNPQ0syXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgY29ubmVjdCBpbiBsaWJyYXJpZXNdKQorICB0c3RfY29ubmVjdF9zYXZlX0xJQlM9IiRMSUJTIgorICB0c3RfY29ubmVjdF9uZWVkX0xJQlM9InVua25vd24iCisgIGZvciB0c3RfbGliIGluICcnICctbHNvY2tldCcgOyBkbworICAgIGlmIHRlc3QgIiR0c3RfY29ubmVjdF9uZWVkX0xJQlMiID0gInVua25vd24iOyB0aGVuCisgICAgICBMSUJTPSIkdHN0X2xpYiAkdHN0X2Nvbm5lY3Rfc2F2ZV9MSUJTIgorICAgICAgQUNfTElOS19JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAgICNpZm5kZWYgSEFWRV9XSU5ET1dTX0gKKyAgICAgICAgICAgIGludCBjb25uZWN0KGludCwgdm9pZCosIGludCk7CisgICAgICAgICAgI2VuZGlmCisgICAgICAgIF1dLFtbCisgICAgICAgICAgaWYoMCAhPSBjb25uZWN0KDAsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIHRzdF9jb25uZWN0X25lZWRfTElCUz0iJHRzdF9saWIiCisgICAgICBdKQorICAgIGZpCisgIGRvbmUKKyAgTElCUz0iJHRzdF9jb25uZWN0X3NhdmVfTElCUyIKKyAgIworICBjYXNlIFgtIiR0c3RfY29ubmVjdF9uZWVkX0xJQlMiIGluCisgICAgWC11bmtub3duKQorICAgICAgQUNfTVNHX1JFU1VMVChbY2Fubm90IGZpbmQgY29ubmVjdF0pCisgICAgICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBmaW5kIGNvbm5lY3QgZnVuY3Rpb24gaW4gbGlicmFyaWVzLl0pCisgICAgICA7OworICAgIFgtKQorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIEFDX01TR19SRVNVTFQoWyR0c3RfY29ubmVjdF9uZWVkX0xJQlNdKQorICAgICAgTElCUz0iJHRzdF9jb25uZWN0X25lZWRfTElCUyAkdHN0X2Nvbm5lY3Rfc2F2ZV9MSUJTIgorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgQ1VSTF9ERUZJTkVfVU5RVU9URUQgKFZBUklBQkxFLCBbVkFMVUVdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBMaWtlIEFDX0RFRklORV9VTlFVT1RFRCB0aGlzIG1hY3JvIHdpbGwgZGVmaW5lIGEgQyBwcmVwcm9jZXNzb3IKK2RubCBzeW1ib2wgdGhhdCBjYW4gYmUgZnVydGhlciB1c2VkIGluIGN1c3RvbSB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uCitkbmwgZmlsZXMuIFRoaXMgbWFjcm8sIHVubGlrZSBBQ19ERUZJTkVfVU5RVU9URUQsIGRvZXMgbm90IHVzZSBhIHRoaXJkCitkbmwgYXJndW1lbnQgZm9yIHRoZSBkZXNjcmlwdGlvbi4gU3ltYm9sIGRlZmluaXRpb25zIGRvbmUgd2l0aCB0aGlzCitkbmwgbWFjcm8gYXJlIGludGVuZGVkIHRvIGJlIGV4Y2x1c2l2ZWx5IHVzZWQgaW4gaGFuZGNyYWZ0ZWQgKi5oLmluCitkbmwgdGVtcGxhdGUgZmlsZXMuIENvbnRyYXJ5IHRvIHdoYXQgQUNfREVGSU5FX1VOUVVPVEVEIGRvZXMsIHRoaXMgb25lCitkbmwgcHJldmVudHMgYXV0b2hlYWRlciBnZW5lcmF0aW9uIGFuZCBpbnNlcnRpb24gb2Ygc3ltYm9sIHRlbXBsYXRlCitkbmwgc3R1YiBhbmQgZGVmaW5pdGlvbiBpbnRvIHRoZSBmaXJzdCBjb25maWd1cmF0aW9uIGhlYWRlciBmaWxlLiBEbworZG5sIG5vdCB1c2UgdGhpcyBtYWNybyBhcyBhIHJlcGxhY2VtZW50IGZvciBBQ19ERUZJTkVfVU5RVU9URUQsIGVhY2gKK2RubCBvbmUgc2VydmVzIGRpZmZlcmVudCBmdW5jdGlvbmFsIG5lZWRzLgorCitBQ19ERUZVTihbQ1VSTF9ERUZJTkVfVU5RVU9URURdLCBbCitjYXQgPj5jb25mZGVmcy5oIDw8X0VPRgorW0AlOkBkZWZpbmVdICQxIGlmZWxzZSgkIywgMiwgWyQyXSwgMSkKK19FT0YKK10pCisKKworZG5sIENVUkxfQ09ORklHVVJFX0xPTkcKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgRmluZCBvdXQgdGhlIHNpemUgb2YgbG9uZyBhcyByZXBvcnRlZCBieSBzaXplb2YoKSBhbmQgZGVmaW5lCitkbmwgQ1VSTF9TSVpFT0ZfTE9ORyBhcyBhcHByb3ByaWF0ZSB0byBiZSB1c2VkIGluIHRlbXBsYXRlIGZpbGUKK2RubCBpbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmguaW4gdG8gcHJvcGVybHkgY29uZmlndXJlIHRoZSBsaWJyYXJ5LgorZG5sIFRoZSBzaXplIG9mIGxvbmcgaXMgYSBidWlsZCB0aW1lIGNoYXJhY3RlcmlzdGljIGFuZCBhcyBzdWNoCitkbmwgbXVzdCBiZSByZWNvcmRlZCBpbiBjdXJsYnVpbGQuaAorCitBQ19ERUZVTihbQ1VSTF9DT05GSUdVUkVfTE9OR10sIFsKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3NpemVvZl9sb25nIiB8fAorICAgIHRlc3QgIiRhY19jdl9zaXplb2ZfbG9uZyIgLWVxICIwIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbY2Fubm90IGZpbmQgb3V0IHNpemUgb2YgbG9uZy5dKQorICBmaQorICBDVVJMX0RFRklORV9VTlFVT1RFRChbQ1VSTF9TSVpFT0ZfTE9OR10sIFskYWNfY3Zfc2l6ZW9mX2xvbmddKQorXSkKKworCitkbmwgQ1VSTF9DT05GSUdVUkVfQ1VSTF9TT0NLTEVOX1QKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgRmluZCBvdXQgc3VpdGFibGUgY3VybF9zb2NrbGVuX3QgZGF0YSB0eXBlIGRlZmluaXRpb24gYW5kIHNpemUsIG1ha2luZworZG5sIGFwcHJvcHJpYXRlIGRlZmluaXRpb25zIGZvciB0ZW1wbGF0ZSBmaWxlIGluY2x1ZGUvY3VybC9jdXJsYnVpbGQuaC5pbgorZG5sIHRvIHByb3Blcmx5IGNvbmZpZ3VyZSBhbmQgdXNlIHRoZSBsaWJyYXJ5LgorZG5sCitkbmwgVGhlIG5lZWQgZm9yIHRoZSBjdXJsX3NvY2tsZW5fdCBkZWZpbml0aW9uIGFyaXNlcyBtYWlubHkgdG8gcHJvcGVybHkKK2RubCBpbnRlcmZhY2UgSFAtVVggc3lzdGVtcyB3aGljaCBvbiBvbmUgaGFuZCBoYXZlIGEgdHlwZWRlZidlZCBzb2NrbGVuX3QKK2RubCBkYXRhIHR5cGUgd2hpY2ggaXMgMzIgb3IgNjQtQml0IHdpZGUgZGVwZW5kaW5nIG9uIHRoZSBkYXRhIG1vZGVsIGJlaW5nCitkbmwgdXNlZCwgYW5kIHRoYXQgb24gdGhlIG90aGVyIGhhbmQgaXMgb25seSBhY3R1YWxseSB1c2VkIHdoZW4gaW50ZXJmYWNpbmcKK2RubCB0aGUgWC9PcGVuIHNvY2tldHMgcHJvdmlkZWQgaW4gdGhlIHhuZXQgbGlicmFyeS4KKworQUNfREVGVU4oW0NVUkxfQ09ORklHVVJFX0NVUkxfU09DS0xFTl9UXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1dTMlRDUElQXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TWVNfU09DS0VUXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9QUkVQUk9DRVNTX0NBTExDT05WXSlkbmwKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBjdXJsX3NvY2tsZW5fdCBkYXRhIHR5cGVdKQorICBjdXJsX3R5cGVvZl9jdXJsX3NvY2tsZW5fdD0idW5rbm93biIKKyAgZm9yIGFyZzEgaW4gaW50IFNPQ0tFVDsgZG8KKyAgICBmb3IgYXJnMiBpbiAnc3RydWN0IHNvY2thZGRyJyB2b2lkOyBkbworICAgICAgZm9yIHQgaW4gc29ja2xlbl90IGludCBzaXplX3QgJ3Vuc2lnbmVkIGludCcgbG9uZyAndW5zaWduZWQgbG9uZycgdm9pZDsgZG8KKyAgICAgICAgaWYgdGVzdCAiJGN1cmxfdHlwZW9mX2N1cmxfc29ja2xlbl90IiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICAgICAkY3VybF9pbmNsdWRlc193czJ0Y3BpcAorICAgICAgICAgICAgICAkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAgICAgICAgICRjdXJsX3ByZXByb2Nlc3NfY2FsbGNvbnYKKyAgICAgICAgICAgICAgZXh0ZXJuIGludCBGVU5DQUxMQ09OViBnZXRwZWVybmFtZSgkYXJnMSwgJGFyZzIgKiwgJHQgKik7CisgICAgICAgICAgICBdXSxbWworICAgICAgICAgICAgICAkdCAqbGVucHRyID0gMDsKKyAgICAgICAgICAgICAgaWYoMCAhPSBnZXRwZWVybmFtZSgwLCAwLCBsZW5wdHIpKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgXV0pCisgICAgICAgICAgXSxbCisgICAgICAgICAgICBjdXJsX3R5cGVvZl9jdXJsX3NvY2tsZW5fdD0iJHQiCisgICAgICAgICAgXSkKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgIGRvbmUKKyAgZm9yIHQgaW4gc29ja2xlbl90IGludDsgZG8KKyAgICBpZiB0ZXN0ICIkY3VybF90eXBlb2ZfY3VybF9zb2NrbGVuX3QiID0gInZvaWQiOyB0aGVuCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICAgICB0eXBlZGVmICR0IGN1cmxfc29ja2xlbl90OworICAgICAgICBdXSxbWworICAgICAgICAgIGN1cmxfc29ja2xlbl90IGR1bW15OworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICBjdXJsX3R5cGVvZl9jdXJsX3NvY2tsZW5fdD0iJHQiCisgICAgICBdKQorICAgIGZpCisgIGRvbmUKKyAgQUNfTVNHX1JFU1VMVChbJGN1cmxfdHlwZW9mX2N1cmxfc29ja2xlbl90XSkKKyAgaWYgdGVzdCAiJGN1cmxfdHlwZW9mX2N1cmxfc29ja2xlbl90IiA9ICJ2b2lkIiB8fAorICAgIHRlc3QgIiRjdXJsX3R5cGVvZl9jdXJsX3NvY2tsZW5fdCIgPSAidW5rbm93biI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBmaW5kIGRhdGEgdHlwZSBmb3IgY3VybF9zb2NrbGVuX3QuXSkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW3NpemUgb2YgY3VybF9zb2NrbGVuX3RdKQorICBjdXJsX3NpemVvZl9jdXJsX3NvY2tsZW5fdD0idW5rbm93biIKKyAgY3VybF9wdWxsX2hlYWRlcnNfc29ja2xlbl90PSJ1bmtub3duIgorICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2giID0gInllcyI7IHRoZW4KKyAgICB0c3RfcHVsbF9oZWFkZXJfY2hlY2tzPSdub25lIHdzMnRjcGlwJworICAgIHRzdF9zaXplX2NoZWNrcz0nNCcKKyAgZWxzZQorICAgIHRzdF9wdWxsX2hlYWRlcl9jaGVja3M9J25vbmUgc3lzdHlwZXMgc3lzc29ja2V0JworICAgIHRzdF9zaXplX2NoZWNrcz0nNCA4IDInCisgIGZpCisgIGZvciB0c3Rfc2l6ZSBpbiAkdHN0X3NpemVfY2hlY2tzOyBkbworICAgIGZvciB0c3RfcHVsbF9oZWFkZXJzIGluICR0c3RfcHVsbF9oZWFkZXJfY2hlY2tzOyBkbworICAgICAgaWYgdGVzdCAiJGN1cmxfc2l6ZW9mX2N1cmxfc29ja2xlbl90IiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICBjYXNlICR0c3RfcHVsbF9oZWFkZXJzIGluCisgICAgICAgICAgd3MydGNwaXApCisgICAgICAgICAgICB0bXBfaW5jbHVkZXM9IiRjdXJsX2luY2x1ZGVzX3dzMnRjcGlwIgorICAgICAgICAgICAgOzsKKyAgICAgICAgICBzeXN0eXBlcykKKyAgICAgICAgICAgIHRtcF9pbmNsdWRlcz0iJGN1cmxfaW5jbHVkZXNfc3lzX3R5cGVzIgorICAgICAgICAgICAgOzsKKyAgICAgICAgICBzeXNzb2NrZXQpCisgICAgICAgICAgICB0bXBfaW5jbHVkZXM9IiRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQiCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICB0bXBfaW5jbHVkZXM9IiIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICAgJHRtcF9pbmNsdWRlcworICAgICAgICAgICAgdHlwZWRlZiAkY3VybF90eXBlb2ZfY3VybF9zb2NrbGVuX3QgY3VybF9zb2NrbGVuX3Q7CisgICAgICAgICAgICB0eXBlZGVmIGNoYXIgZHVtbXlfYXJyW3NpemVvZihjdXJsX3NvY2tsZW5fdCkgPT0gJHRzdF9zaXplID8gMSA6IC0xXTsKKyAgICAgICAgICBdXSxbWworICAgICAgICAgICAgY3VybF9zb2NrbGVuX3QgZHVtbXk7CisgICAgICAgICAgXV0pCisgICAgICAgIF0sWworICAgICAgICAgIGN1cmxfc2l6ZW9mX2N1cmxfc29ja2xlbl90PSIkdHN0X3NpemUiCisgICAgICAgICAgY3VybF9wdWxsX2hlYWRlcnNfc29ja2xlbl90PSIkdHN0X3B1bGxfaGVhZGVycyIKKyAgICAgICAgXSkKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCisgIEFDX01TR19SRVNVTFQoWyRjdXJsX3NpemVvZl9jdXJsX3NvY2tsZW5fdF0pCisgIGlmIHRlc3QgIiRjdXJsX3NpemVvZl9jdXJsX3NvY2tsZW5fdCIgPSAidW5rbm93biI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBmaW5kIG91dCBzaXplIG9mIGN1cmxfc29ja2xlbl90Ll0pCisgIGZpCisgICMKKyAgY2FzZSAkY3VybF9wdWxsX2hlYWRlcnNfc29ja2xlbl90IGluCisgICAgd3MydGNwaXApCisgICAgICBDVVJMX0RFRklORV9VTlFVT1RFRChbQ1VSTF9QVUxMX1dTMlRDUElQX0hdKQorICAgICAgOzsKKyAgICBzeXN0eXBlcykKKyAgICAgIENVUkxfREVGSU5FX1VOUVVPVEVEKFtDVVJMX1BVTExfU1lTX1RZUEVTX0hdKQorICAgICAgOzsKKyAgICBzeXNzb2NrZXQpCisgICAgICBDVVJMX0RFRklORV9VTlFVT1RFRChbQ1VSTF9QVUxMX1NZU19UWVBFU19IXSkKKyAgICAgIENVUkxfREVGSU5FX1VOUVVPVEVEKFtDVVJMX1BVTExfU1lTX1NPQ0tFVF9IXSkKKyAgICAgIDs7CisgIGVzYWMKKyAgQ1VSTF9ERUZJTkVfVU5RVU9URUQoW0NVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UXSwgWyRjdXJsX3R5cGVvZl9jdXJsX3NvY2tsZW5fdF0pCisgIENVUkxfREVGSU5FX1VOUVVPVEVEKFtDVVJMX1NJWkVPRl9DVVJMX1NPQ0tMRU5fVF0sIFskY3VybF9zaXplb2ZfY3VybF9zb2NrbGVuX3RdKQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NFTEVDVAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUZXN0IGlmIHRoZSBzb2NrZXQgc2VsZWN0KCkgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLAorZG5sIGFuZCBjaGVjayBpdHMgcmV0dXJuIHR5cGUgYW5kIHRoZSB0eXBlcyBvZiBpdHMKK2RubCBhcmd1bWVudHMuIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyBIQVZFX1NFTEVDVAorZG5sIHdpbGwgYmUgZGVmaW5lZCwgZGVmaW5pbmcgdGhlIHR5cGVzIG9mIHRoZQorZG5sIGFyZ3VtZW50cyBpbiBTRUxFQ1RfVFlQRV9BUkcxLCBTRUxFQ1RfVFlQRV9BUkcyMzQKK2RubCBhbmQgU0VMRUNUX1RZUEVfQVJHNSwgZGVmaW5pbmcgdGhlIHR5cGUgb2YgdGhlCitkbmwgZnVuY3Rpb24gcmV0dXJuIHZhbHVlIGluIFNFTEVDVF9UWVBFX1JFVFYsIGFuZAorZG5sIGFsc28gZGVmaW5pbmcgdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGZpZnRoIGFyZ3VtZW50CitkbmwgaW4gU0VMRUNUX1FVQUxfQVJHNS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19TRUxFQ1RdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfU1RSVUNUX1RJTUVWQUxdKWRubAorICBBQ19DSEVDS19IRUFERVJTKHN5cy9zZWxlY3QuaCBzeXMvc29ja2V0LmgpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc2VsZWN0XSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfVElNRV9ICisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgSEFWRV9XSU5ET1dTX0gKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjZW5kaWYKKyAgICBdXSxbWworICAgICAgc2VsZWN0KDAsIDAsIDAsIDAsIDApOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGN1cmxfY3Zfc2VsZWN0PSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBjdXJsX2N2X3NlbGVjdD0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJGN1cmxfY3Zfc2VsZWN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3R5cGVzIG9mIGFyZ3MgYW5kIHJldHVybiB0eXBlIGZvciBzZWxlY3RdLAorICAgICAgW2N1cmxfY3ZfZnVuY19zZWxlY3RfYXJnc10sIFsKKyAgICAgIGN1cmxfY3ZfZnVuY19zZWxlY3RfYXJncz0idW5rbm93biIKKyAgICAgIGZvciBzZWxfcmV0diBpbiAnaW50JyAnc3NpemVfdCc7IGRvCisgICAgICAgIGZvciBzZWxfYXJnMSBpbiAnaW50JyAnc3NpemVfdCcgJ3NpemVfdCcgJ3Vuc2lnbmVkIGxvbmcgaW50JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgICAgICBmb3Igc2VsX2FyZzIzNCBpbiAnZmRfc2V0IConICdpbnQgKicgJ3ZvaWQgKic7IGRvCisgICAgICAgICAgICBmb3Igc2VsX2FyZzUgaW4gJ3N0cnVjdCB0aW1ldmFsIConICdjb25zdCBzdHJ1Y3QgdGltZXZhbCAqJzsgZG8KKyAgICAgICAgICAgICAgaWYgdGVzdCAiJGN1cmxfY3ZfZnVuY19zZWxlY3RfYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgICAgICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIFNFTEVDVENBTExDT05WIFBBU0NBTAorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9USU1FX0gKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNkZWZpbmUgU0VMRUNUQ0FMTENPTlYKKyNlbmRpZgorI2lmbmRlZiBIQVZFX1NUUlVDVF9USU1FVkFMCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHsKKyAgICAgICAgICAgICAgICAgICAgICBsb25nIHR2X3NlYzsKKyAgICAgICAgICAgICAgICAgICAgICBsb25nIHR2X3VzZWM7CisgICAgICAgICAgICAgICAgICAgIH07CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZXh0ZXJuICRzZWxfcmV0diBTRUxFQ1RDQUxMQ09OViBzZWxlY3QoJHNlbF9hcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsX2FyZzIzNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbF9hcmcyMzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxfYXJnMjM0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsX2FyZzUpOworICAgICAgICAgICAgICAgICAgXV0sW1sKKyAgICAgICAgICAgICAgICAgICAgJHNlbF9hcmcxICAgbmZkcz0wOworICAgICAgICAgICAgICAgICAgICAkc2VsX2FyZzIzNCByZmRzPTA7CisgICAgICAgICAgICAgICAgICAgICRzZWxfYXJnMjM0IHdmZHM9MDsKKyAgICAgICAgICAgICAgICAgICAgJHNlbF9hcmcyMzQgZWZkcz0wOworICAgICAgICAgICAgICAgICAgICAkc2VsX3JldHYgcmVzID0gc2VsZWN0KG5mZHMsIHJmZHMsIHdmZHMsIGVmZHMsIDApOworICAgICAgICAgICAgICAgICAgXV0pCisgICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgICBjdXJsX2N2X2Z1bmNfc2VsZWN0X2FyZ3M9IiRzZWxfYXJnMSwkc2VsX2FyZzIzNCwkc2VsX2FyZzUsJHNlbF9yZXR2IgorICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZG9uZQorICAgICAgICBkb25lCisgICAgICBkb25lCisgICAgXSkgIyBBQy1DQUNIRS1DSEVDSworICAgIGlmIHRlc3QgIiRjdXJsX2N2X2Z1bmNfc2VsZWN0X2FyZ3MiID0gInVua25vd24iOyB0aGVuCisgICAgICBBQ19NU0dfV0FSTihbQ2Fubm90IGZpbmQgcHJvcGVyIHR5cGVzIHRvIHVzZSBmb3Igc2VsZWN0IGFyZ3NdKQorICAgICAgQUNfTVNHX1dBUk4oW0hBVkVfU0VMRUNUIHdpbGwgbm90IGJlIGRlZmluZWRdKQorICAgIGVsc2UKKyAgICAgIHNlbGVjdF9wcmV2X0lGUz0kSUZTOyBJRlM9JywnCisgICAgICBzZXQgZHVtbXkgYGVjaG8gIiRjdXJsX2N2X2Z1bmNfc2VsZWN0X2FyZ3MiIHwgc2VkICdzL1wqL1wqL2cnYAorICAgICAgSUZTPSRzZWxlY3RfcHJldl9JRlMKKyAgICAgIHNoaWZ0CisgICAgICAjCisgICAgICBzZWxfcXVhbF90eXBlX2FyZzU9JFszXQorICAgICAgIworICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNFTEVDVF9UWVBFX0FSRzEsICRbMV0sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHNlbGVjdC5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNFTEVDVF9UWVBFX0FSRzIzNCwgJFsyXSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDIsIDMgYW5kIDQgZm9yIHNlbGVjdC5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNFTEVDVF9UWVBFX1JFVFYsICRbNF0sCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciBzZWxlY3QuXSkKKyAgICAgICMKKyAgICAgIHByZXZfc2hfb3B0cz0kLQorICAgICAgIworICAgICAgY2FzZSAkcHJldl9zaF9vcHRzIGluCisgICAgICAgICpmKikKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHNldCAtZgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAjCisgICAgICBjYXNlICIkc2VsX3F1YWxfdHlwZV9hcmc1IiBpbgorICAgICAgICBjb25zdCopCisgICAgICAgICAgc2VsX3F1YWxfYXJnNT1jb25zdAorICAgICAgICAgIHNlbF90eXBlX2FyZzU9YGVjaG8gJHNlbF9xdWFsX3R5cGVfYXJnNSB8IHNlZCAncy9eY29uc3QgLy8nYAorICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHNlbF9xdWFsX2FyZzU9CisgICAgICAgICAgc2VsX3R5cGVfYXJnNT0kc2VsX3F1YWxfdHlwZV9hcmc1CisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAjCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0VMRUNUX1FVQUxfQVJHNSwgJHNlbF9xdWFsX2FyZzUsCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyA1IGZvciBzZWxlY3QuXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRUxFQ1RfVFlQRV9BUkc1LCAkc2VsX3R5cGVfYXJnNSwKKyAgICAgICAgW0RlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNSBmb3Igc2VsZWN0Ll0pCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0ICtmCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NFTEVDVCwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzZWxlY3QgZnVuY3Rpb24uXSkKKyAgICAgIGFjX2N2X2Z1bmNfc2VsZWN0PSJ5ZXMiCisgICAgZmkKKyAgZmkKK10pCisKKworIyBUaGlzIGlzIG9ubHkgYSB0ZW1wb3JhcnkgZml4LiBUaGlzIG1hY3JvIGlzIGhlcmUgdG8gcmVwbGFjZSB0aGUgYnJva2VuIG9uZQorIyBkZWxpdmVyZWQgYnkgdGhlIGF1dG9tYWtlIHByb2plY3QgKGluY2x1ZGluZyB0aGUgMS45LjYgcmVsZWFzZSkuIEFzIHNvb24gYXMKKyMgdGhleSBzaGlwIGEgd29ya2luZyB2ZXJzaW9uIHdlIFNIT1VMRCByZW1vdmUgdGhpcyB3b3JrLWFyb3VuZC4KKworQUNfREVGVU4oW0FNX01JU1NJTkdfSEFTX1JVTl0sCitbQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAordGVzdCB4IiR7TUlTU0lORytzZXR9IiA9IHhzZXQgfHwgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIgorIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCitpZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgorICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgorZWxzZQorICBhbV9taXNzaW5nX3J1bj0KKyAgQUNfTVNHX1dBUk4oW2BtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nXSkKK2ZpCitdKQorCisKK2RubCBDVVJMX1ZFUklGWV9SVU5USU1FTElCUworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgdGhhdCB0aGUgc2hhcmVkIGxpYnMgZm91bmQgc28gZmFyIGNhbiBiZSB1c2VkIHdoZW4gcnVubmluZworZG5sIHByb2dyYW1zLCBzaW5jZSBvdGhlcndpc2UgdGhlIHNpdHVhdGlvbiB3aWxsIGNyZWF0ZSBvZGQgY29uZmlndXJlIGVycm9ycworZG5sIHRoYXQgYXJlIG1pc2xlYWRpbmcgcGVvcGxlLgorZG5sCitkbmwgTWFrZSBzdXJlIHRoaXMgdGVzdCBpcyBydW4gQkVGT1JFIHRoZSBmaXJzdCB0ZXN0IGluIHRoZSBzY3JpcHQgdGhhdAorZG5sIHJ1bnMgYW55dGhpbmcsIHdoaWNoIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZyBpcyB0aGUgQUNfQ0hFQ0tfU0laRU9GCitkbmwgbWFjcm8uIEl0IG11c3QgYWxzbyBydW4gQUZURVIgYWxsIGxpYi1jaGVja2luZyBtYWNyb3MgYXJlIGNvbXBsZXRlLgorCitBQ19ERUZVTihbQ1VSTF9WRVJJRllfUlVOVElNRUxJQlNdLCBbCisKKyAgZG5sIHRoaXMgdGVzdCBpcyBvZiBjb3Vyc2Ugbm90IHNlbnNpYmxlIGlmIHdlIGFyZSBjcm9zcy1jb21waWxpbmchCisgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSB4eWVzOyB0aGVuCisKKyAgICBkbmwganVzdCBydW4gYSBwcm9ncmFtIHRvIHZlcmlmeSB0aGF0IHRoZSBsaWJzIGNoZWNrZWQgZm9yIHByZXZpb3VzIHRvIHRoaXMKKyAgICBkbmwgcG9pbnQgYWxzbyBpcyBhdmFpbGFibGUgcnVuLXRpbWUhCisgICAgQUNfTVNHX0NIRUNLSU5HKFtydW4tdGltZSBsaWJzIGF2YWlsYWJpbGl0eV0pCisgICAgQUNfVFJZX1JVTihbCittYWluKCkKK3sKKyAgcmV0dXJuIDA7Cit9CitdLAorICAgIEFDX01TR19SRVNVTFQoW2ZpbmVdKSwKKyAgICBBQ19NU0dfUkVTVUxUKFtmYWlsZWRdKQorICAgIEFDX01TR19FUlJPUihbb25lIG9yIG1vcmUgbGlicyBhdmFpbGFibGUgYXQgbGluay10aW1lIGFyZSBub3QgYXZhaWxhYmxlIHJ1bi10aW1lLiBMaWJzIHVzZWQgYXQgbGluay10aW1lOiAkTElCU10pCisgICAgKQorCisgICAgZG5sIGlmIHRoaXMgdGVzdCBmYWlscywgY29uZmlndXJlIGhhcyBhbHJlYWR5IHN0b3BwZWQKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfVkFSSUFESUNfTUFDUk9TCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGNvbXBpbGVyIHN1cHBvcnQgb2YgdmFyaWFkaWMgbWFjcm9zCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX1ZBUklBRElDX01BQ1JPU10sIFsKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBjb21waWxlciBzdXBwb3J0IG9mIEM5OSB2YXJpYWRpYyBtYWNybyBzdHlsZV0sCisgICAgW2N1cmxfY3ZfdmFyaWFkaWNfbWFjcm9zX2M5OV0sIFsKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyNkZWZpbmUgYzk5X3ZtYWNybzMoZmlyc3QsIC4uLikgZnVuMyhmaXJzdCwgX19WQV9BUkdTX18pCisjZGVmaW5lIGM5OV92bWFjcm8yKGZpcnN0LCAuLi4pIGZ1bjIoZmlyc3QsIF9fVkFfQVJHU19fKQorICAgICAgICBpbnQgZnVuMyhpbnQgYXJnMSwgaW50IGFyZzIsIGludCBhcmczKTsKKyAgICAgICAgaW50IGZ1bjIoaW50IGFyZzEsIGludCBhcmcyKTsKKyAgICAgICAgaW50IGZ1bjMoaW50IGFyZzEsIGludCBhcmcyLCBpbnQgYXJnMykKKyAgICAgICAgeyByZXR1cm4gYXJnMSArIGFyZzIgKyBhcmczOyB9CisgICAgICAgIGludCBmdW4yKGludCBhcmcxLCBpbnQgYXJnMikKKyAgICAgICAgeyByZXR1cm4gYXJnMSArIGFyZzI7IH0KKyAgICAgIF1dLFtbCisgICAgICAgIGludCByZXMzID0gYzk5X3ZtYWNybzMoMSwgMiwgMyk7CisgICAgICAgIGludCByZXMyID0gYzk5X3ZtYWNybzIoMSwgMik7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIGN1cmxfY3ZfdmFyaWFkaWNfbWFjcm9zX2M5OT0ieWVzIgorICAgIF0sWworICAgICAgY3VybF9jdl92YXJpYWRpY19tYWNyb3NfYzk5PSJubyIKKyAgICBdKQorICBdKQorICBjYXNlICIkY3VybF9jdl92YXJpYWRpY19tYWNyb3NfYzk5IiBpbgorICAgIHllcykKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1ZBUklBRElDX01BQ1JPU19DOTksIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiBjb21waWxlciBzdXBwb3J0cyBDOTkgdmFyaWFkaWMgbWFjcm8gc3R5bGUuXSkKKyAgICAgIDs7CisgIGVzYWMKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBjb21waWxlciBzdXBwb3J0IG9mIG9sZCBnY2MgdmFyaWFkaWMgbWFjcm8gc3R5bGVdLAorICAgIFtjdXJsX2N2X3ZhcmlhZGljX21hY3Jvc19nY2NdLCBbCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjZGVmaW5lIGdjY192bWFjcm8zKGZpcnN0LCBhcmdzLi4uKSBmdW4zKGZpcnN0LCBhcmdzKQorI2RlZmluZSBnY2Nfdm1hY3JvMihmaXJzdCwgYXJncy4uLikgZnVuMihmaXJzdCwgYXJncykKKyAgICAgICAgaW50IGZ1bjMoaW50IGFyZzEsIGludCBhcmcyLCBpbnQgYXJnMyk7CisgICAgICAgIGludCBmdW4yKGludCBhcmcxLCBpbnQgYXJnMik7CisgICAgICAgIGludCBmdW4zKGludCBhcmcxLCBpbnQgYXJnMiwgaW50IGFyZzMpCisgICAgICAgIHsgcmV0dXJuIGFyZzEgKyBhcmcyICsgYXJnMzsgfQorICAgICAgICBpbnQgZnVuMihpbnQgYXJnMSwgaW50IGFyZzIpCisgICAgICAgIHsgcmV0dXJuIGFyZzEgKyBhcmcyOyB9CisgICAgICBdXSxbWworICAgICAgICBpbnQgcmVzMyA9IGdjY192bWFjcm8zKDEsIDIsIDMpOworICAgICAgICBpbnQgcmVzMiA9IGdjY192bWFjcm8yKDEsIDIpOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBjdXJsX2N2X3ZhcmlhZGljX21hY3Jvc19nY2M9InllcyIKKyAgICBdLFsKKyAgICAgIGN1cmxfY3ZfdmFyaWFkaWNfbWFjcm9zX2djYz0ibm8iCisgICAgXSkKKyAgXSkKKyAgY2FzZSAiJGN1cmxfY3ZfdmFyaWFkaWNfbWFjcm9zX2djYyIgaW4KKyAgICB5ZXMpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9WQVJJQURJQ19NQUNST1NfR0NDLCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgY29tcGlsZXIgc3VwcG9ydHMgb2xkIGdjYyB2YXJpYWRpYyBtYWNybyBzdHlsZS5dKQorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgQ1VSTF9DSEVDS19DQV9CVU5ETEUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgYSBkZWZhdWx0IGNhLWJ1bmRsZSBzaG91bGQgYmUgdXNlZAorZG5sCitkbmwgcmVnYXJkaW5nIHRoZSBwYXRocyB0aGlzIHdpbGwgc2NhbjoKK2RubCAvZXRjL3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0IERlYmlhbiBzeXN0ZW1zCitkbmwgL2V0Yy9wa2kvdGxzL2NlcnRzL2NhLWJ1bmRsZS5jcnQgUmVkaGF0IGFuZCBNYW5kcml2YQorZG5sIC91c3Ivc2hhcmUvc3NsL2NlcnRzL2NhLWJ1bmRsZS5jcnQgb2xkKGVyKSBSZWRoYXQKK2RubCAvdXNyL2xvY2FsL3NoYXJlL2NlcnRzL2NhLXJvb3QuY3J0IEZyZWVCU0QKK2RubCAvZXRjL3NzbC9jZXJ0LnBlbSBPcGVuQlNECitkbmwgL2V0Yy9zc2wvY2VydHMvIChjYSBwYXRoKSBTVVNFCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0NBX0JVTkRMRV0sIFsKKworICBBQ19NU0dfQ0hFQ0tJTkcoW2RlZmF1bHQgQ0EgY2VydCBidW5kbGUvcGF0aF0pCisKKyAgQUNfQVJHX1dJVEgoY2EtYnVuZGxlLAorQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1jYS1idW5kbGU9RklMRV0sIFtGaWxlIG5hbWUgdG8gdXNlIGFzIENBIGJ1bmRsZV0pCitBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LWNhLWJ1bmRsZV0sIFtEb24ndCB1c2UgYSBkZWZhdWx0IENBIGJ1bmRsZV0pLAorICBbCisgICAgd2FudF9jYT0iJHdpdGh2YWwiCisgICAgaWYgdGVzdCAieCR3YW50X2NhIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX0VSUk9SKFstLXdpdGgtY2EtYnVuZGxlPUZJTEUgcmVxdWlyZXMgYSBwYXRoIHRvIHRoZSBDQSBidW5kbGVdKQorICAgIGZpCisgIF0sCisgIFsgd2FudF9jYT0idW5zZXQiIF0pCisgIEFDX0FSR19XSVRIKGNhLXBhdGgsCitBQ19IRUxQX1NUUklORyhbLS13aXRoLWNhLXBhdGg9RElSRUNUT1JZXSwgW0RpcmVjdG9yeSB0byB1c2UgYXMgQ0EgcGF0aF0pCitBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LWNhLXBhdGhdLCBbRG9uJ3QgdXNlIGEgZGVmYXVsdCBDQSBwYXRoXSksCisgIFsKKyAgICB3YW50X2NhcGF0aD0iJHdpdGh2YWwiCisgICAgaWYgdGVzdCAieCR3YW50X2NhcGF0aCIgPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19FUlJPUihbLS13aXRoLWNhLXBhdGg9RElSRUNUT1JZIHJlcXVpcmVzIGEgcGF0aCB0byB0aGUgQ0EgcGF0aCBkaXJlY3RvcnldKQorICAgIGZpCisgIF0sCisgIFsgd2FudF9jYXBhdGg9InVuc2V0Il0pCisKKyAgaWYgdGVzdCAieCR3YW50X2NhIiAhPSAieG5vIiAtYSAieCR3YW50X2NhIiAhPSAieHVuc2V0IiAtYSBcCisgICAgICAgICAgIngkd2FudF9jYXBhdGgiICE9ICJ4bm8iIC1hICJ4JHdhbnRfY2FwYXRoIiAhPSAieHVuc2V0IjsgdGhlbgorICAgIGRubCBib3RoIGdpdmVuCisgICAgQUNfTVNHX0VSUk9SKFtDYW4ndCBzcGVjaWZ5IGJvdGggLS13aXRoLWNhLWJ1bmRsZSBhbmQgLS13aXRoLWNhLXBhdGguXSkKKyAgZWxpZiB0ZXN0ICJ4JHdhbnRfY2EiICE9ICJ4bm8iIC1hICJ4JHdhbnRfY2EiICE9ICJ4dW5zZXQiOyB0aGVuCisgICAgZG5sIC0td2l0aC1jYS1idW5kbGUgZ2l2ZW4KKyAgICBjYT0iJHdhbnRfY2EiCisgICAgY2FwYXRoPSJubyIKKyAgZWxpZiB0ZXN0ICJ4JHdhbnRfY2FwYXRoIiAhPSAieG5vIiAtYSAieCR3YW50X2NhcGF0aCIgIT0gInh1bnNldCI7IHRoZW4KKyAgICBkbmwgLS13aXRoLWNhLXBhdGggZ2l2ZW4KKyAgICBpZiB0ZXN0ICJ4JE9QRU5TU0xfRU5BQkxFRCIgIT0gIngxIjsgdGhlbgorICAgICAgQUNfTVNHX0VSUk9SKFstLXdpdGgtY2EtcGF0aCBvbmx5IHdvcmtzIHdpdGggb3BlblNTTF0pCisgICAgZmkKKyAgICBjYXBhdGg9IiR3YW50X2NhcGF0aCIKKyAgICBjYT0ibm8iCisgIGVsc2UKKyAgICBkbmwgbmVpdGhlciBvZiAtLXdpdGgtY2EtKiBnaXZlbgorICAgIGRubCBmaXJzdCB0cnkgYXV0b2RldGVjdGluZyBhIENBIGJ1bmRsZSAsIHRoZW4gYSBDQSBwYXRoCisgICAgZG5sIGJvdGggYXV0b2RldGVjdGlvbnMgY2FuIGJlIHNraXBwZWQgYnkgLS13aXRob3V0LWNhLSoKKyAgICBjYT0ibm8iCisgICAgY2FwYXRoPSJubyIKKyAgICBpZiB0ZXN0ICJ4JHdhbnRfY2EiID0gInh1bnNldCI7IHRoZW4KKyAgICAgIGRubCB0aGUgcGF0aCB3ZSBwcmV2aW91c2x5IHdvdWxkIGhhdmUgaW5zdGFsbGVkIHRoZSBjdXJsIGNhIGJ1bmRsZQorICAgICAgZG5sIHRvLCBhbmQgdGh1cyB3ZSBub3cgY2hlY2sgZm9yIGFuIGFscmVhZHkgZXhpc3RpbmcgY2VydCBpbiB0aGF0IHBsYWNlCisgICAgICBkbmwgaW4gY2FzZSB3ZSBmaW5kIG5vIG90aGVyCisgICAgICBpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgICAgICAgY2FjPSIke3ByZWZpeH0vc2hhcmUvY3VybC9jdXJsLWNhLWJ1bmRsZS5jcnQiCisgICAgICBlbHNlCisgICAgICAgIGNhYz0iJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2N1cmwvY3VybC1jYS1idW5kbGUuY3J0IgorICAgICAgZmkKKworICAgICAgZm9yIGEgaW4gL2V0Yy9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCBcCisgICAgICAgICAgICAgICAvZXRjL3BraS90bHMvY2VydHMvY2EtYnVuZGxlLmNydCBcCisgICAgICAgICAgICAgICAvdXNyL3NoYXJlL3NzbC9jZXJ0cy9jYS1idW5kbGUuY3J0IFwKKyAgICAgICAgICAgICAgIC91c3IvbG9jYWwvc2hhcmUvY2VydHMvY2Etcm9vdC5jcnQgXAorICAgICAgICAgICAgICAgL2V0Yy9zc2wvY2VydC5wZW0gXAorICAgICAgICAgICAgICAgIiRjYWMiOyBkbworICAgICAgICBpZiB0ZXN0IC1mICIkYSI7IHRoZW4KKyAgICAgICAgICBjYT0iJGEiCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIGlmIHRlc3QgIngkd2FudF9jYXBhdGgiID0gInh1bnNldCIgLWEgIngkY2EiID0gInhubyIgLWEgXAorICAgICAgICAgICAgIngkT1BFTlNTTF9FTkFCTEVEIiA9ICJ4MSI7IHRoZW4KKyAgICAgIGZvciBhIGluIC9ldGMvc3NsL2NlcnRzLzsgZG8KKyAgICAgICAgaWYgdGVzdCAtZCAiJGEiICYmIGxzICIkYSIvW1swLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1dLjAgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgIGNhcGF0aD0iJGEiCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBmaQorICBmaQorCisKKworICBpZiB0ZXN0ICJ4JGNhIiAhPSAieG5vIjsgdGhlbgorICAgIENVUkxfQ0FfQlVORExFPSciJyRjYSciJworICAgIEFDX0RFRklORV9VTlFVT1RFRChDVVJMX0NBX0JVTkRMRSwgIiRjYSIsIFtMb2NhdGlvbiBvZiBkZWZhdWx0IGNhIGJ1bmRsZV0pCisgICAgQUNfU1VCU1QoQ1VSTF9DQV9CVU5ETEUpCisgICAgQUNfTVNHX1JFU1VMVChbJGNhXSkKKyAgZWxpZiB0ZXN0ICJ4JGNhcGF0aCIgIT0gInhubyI7IHRoZW4KKyAgICBDVVJMX0NBX1BBVEg9IlwiJGNhcGF0aFwiIgorICAgIEFDX0RFRklORV9VTlFVT1RFRChDVVJMX0NBX1BBVEgsICIkY2FwYXRoIiwgW0xvY2F0aW9uIG9mIGRlZmF1bHQgY2EgcGF0aF0pCisgICAgQUNfTVNHX1JFU1VMVChbJGNhcGF0aCAoY2FwYXRoKV0pCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIGZpCitdKQorCisKK2RubCBET19DVVJMX09GRl9UX0NIRUNLIChUWVBFLCBTSVpFKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBJbnRlcm5hbCBtYWNybyBmb3IgQ1VSTF9DT05GSUdVUkVfQ1VSTF9PRkZfVAorCitBQ19ERUZVTihbRE9fQ1VSTF9PRkZfVF9DSEVDS10sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19JTlRUWVBFU10pZG5sCisgIGlmIHRlc3QgIiRjdXJsX3R5cGVvZl9jdXJsX29mZl90IiA9ICJ1bmtub3duIiAmJiB0ZXN0ICEgLXogIiQxIjsgdGhlbgorICAgIHRtcF9pbmNsdWRlcz0iIgorICAgIHRtcF9zb3VyY2U9IiIKKyAgICB0bXBfZm10PSIiCisgICAgY2FzZSBYQ19TSF9UUl9TSChbJDFdKSBpbgorICAgICAgaW50NjRfdCkKKyAgICAgICAgdG1wX2luY2x1ZGVzPSIkY3VybF9pbmNsdWRlc19pbnR0eXBlcyIKKyAgICAgICAgdG1wX3NvdXJjZT0iY2hhciBmQDw6QEA6PkAgPSBQUklkNjQ7IgorICAgICAgICB0bXBfZm10PSJQUklkNjQiCisgICAgICAgIDs7CisgICAgICBpbnQzMl90KQorICAgICAgICB0bXBfaW5jbHVkZXM9IiRjdXJsX2luY2x1ZGVzX2ludHR5cGVzIgorICAgICAgICB0bXBfc291cmNlPSJjaGFyIGZAPDpAQDo+QCA9IFBSSWQzMjsiCisgICAgICAgIHRtcF9mbXQ9IlBSSWQzMiIKKyAgICAgICAgOzsKKyAgICAgIGludDE2X3QpCisgICAgICAgIHRtcF9pbmNsdWRlcz0iJGN1cmxfaW5jbHVkZXNfaW50dHlwZXMiCisgICAgICAgIHRtcF9zb3VyY2U9ImNoYXIgZkA8OkBAOj5AID0gUFJJZDE2OyIKKyAgICAgICAgdG1wX2ZtdD0iUFJJZDE2IgorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJHRtcF9pbmNsdWRlcworICAgICAgICB0eXBlZGVmICQxIGN1cmxfb2ZmX3Q7CisgICAgICAgIHR5cGVkZWYgY2hhciBkdW1teV9hcnJbc2l6ZW9mKGN1cmxfb2ZmX3QpID09ICQyID8gMSA6IC0xXTsKKyAgICAgIF1dLFtbCisgICAgICAgICR0bXBfc291cmNlCisgICAgICAgIGN1cmxfb2ZmX3QgZHVtbXk7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIGlmIHRlc3QgLXogIiR0bXBfZm10IjsgdGhlbgorICAgICAgICBjdXJsX3R5cGVvZl9jdXJsX29mZl90PSIkMSIKKyAgICAgICAgY3VybF9zaXplb2ZfY3VybF9vZmZfdD0iJDIiCisgICAgICBlbHNlCisgICAgICAgIENVUkxfQ0hFQ0tfREVGKFskdG1wX2ZtdF0sIFskY3VybF9pbmNsdWRlc19pbnR0eXBlc10sIFtzaWxlbnRdKQorICAgICAgICBBU19WQVJfUFVTSERFRihbdG1wX0hhdmVGbXREZWZdLCBbY3VybF9jdl9oYXZlX2RlZl8kdG1wX2ZtdF0pZG5sCisgICAgICAgIEFTX1ZBUl9QVVNIREVGKFt0bXBfRm10RGVmXSwgW2N1cmxfY3ZfZGVmXyR0bXBfZm10XSlkbmwKKyAgICAgICAgaWYgdGVzdCBBU19WQVJfR0VUKHRtcF9IYXZlRm10RGVmKSA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgY3VybF9mb3JtYXRfY3VybF9vZmZfdD1BU19WQVJfR0VUKHRtcF9GbXREZWYpCisgICAgICAgICAgY3VybF90eXBlb2ZfY3VybF9vZmZfdD0iJDEiCisgICAgICAgICAgY3VybF9zaXplb2ZfY3VybF9vZmZfdD0iJDIiCisgICAgICAgIGZpCisgICAgICAgIEFTX1ZBUl9QT1BERUYoW3RtcF9GbXREZWZdKWRubAorICAgICAgICBBU19WQVJfUE9QREVGKFt0bXBfSGF2ZUZtdERlZl0pZG5sCisgICAgICBmaQorICAgIF0pCisgIGZpCitdKQorCisKK2RubCBET19DVVJMX09GRl9UX1NVRkZJWF9DSEVDSyAoVFlQRSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgSW50ZXJuYWwgbWFjcm8gZm9yIENVUkxfQ09ORklHVVJFX0NVUkxfT0ZGX1QKKworQUNfREVGVU4oW0RPX0NVUkxfT0ZGX1RfU1VGRklYX0NIRUNLXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX0lOVFRZUEVTXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFtjb25zdGFudCBzdWZmaXggc3RyaW5nIGZvciBjdXJsX29mZl90XSkKKyAgIworICBjdXJsX3N1ZmZpeF9jdXJsX29mZl90PSJ1bmtub3duIgorICBjdXJsX3N1ZmZpeF9jdXJsX29mZl90dT0idW5rbm93biIKKyAgIworICBjYXNlIFhDX1NIX1RSX1NIKFskMV0pIGluCisgICAgbG9uZ19sb25nIHwgX19sb25nbG9uZyB8IF9fbG9uZ2xvbmdfdCkKKyAgICAgIHRzdF9zdWZmaXhlcz0iTEw6OiIKKyAgICAgIDs7CisgICAgbG9uZykKKyAgICAgIHRzdF9zdWZmaXhlcz0iTDo6IgorICAgICAgOzsKKyAgICBpbnQpCisgICAgICB0c3Rfc3VmZml4ZXM9Ijo6IgorICAgICAgOzsKKyAgICBfX2ludDY0IHwgaW50NjRfdCkKKyAgICAgIHRzdF9zdWZmaXhlcz0iTEw6aTY0OjoiCisgICAgICA7OworICAgIF9faW50MzIgfCBpbnQzMl90KQorICAgICAgdHN0X3N1ZmZpeGVzPSJMOmkzMjo6IgorICAgICAgOzsKKyAgICBfX2ludDE2IHwgaW50MTZfdCkKKyAgICAgIHRzdF9zdWZmaXhlcz0iTDppMTY6OiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIEFDX01TR19FUlJPUihbdW5leHBlY3RlZCBkYXRhIHR5cGUgJDFdKQorICAgICAgOzsKKyAgZXNhYworICAjCisgIG9sZF9JRlM9JElGUzsgSUZTPSc6JworICBmb3IgdG1wX3NzdWYgaW4gJHRzdF9zdWZmaXhlcyA7IGRvCisgICAgSUZTPSRvbGRfSUZTCisgICAgaWYgdGVzdCAieCRjdXJsX3N1ZmZpeF9jdXJsX29mZl90IiA9ICJ4dW5rbm93biI7IHRoZW4KKyAgICAgIGNhc2UgJHRtcF9zc3VmIGluCisgICAgICAgIGk2NCB8IGkzMiB8IGkxNikKKyAgICAgICAgICB0bXBfdXN1Zj0idSR0bXBfc3N1ZiIKKyAgICAgICAgICA7OworICAgICAgICBMTCB8IEwpCisgICAgICAgICAgdG1wX3VzdWY9IlUkdG1wX3NzdWYiCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICB0bXBfdXN1Zj0iIgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX2ludHR5cGVzCisgICAgICAgICAgdHlwZWRlZiAkMSBuZXdfdDsKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBuZXdfdCBzMTsKKyAgICAgICAgICBuZXdfdCBzMjsKKyAgICAgICAgICBzMSA9IC0xMCR0bXBfc3N1ZiA7CisgICAgICAgICAgczIgPSAgMjAkdG1wX3NzdWYgOworICAgICAgICAgIGlmKHMxID4gczIpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgY3VybF9zdWZmaXhfY3VybF9vZmZfdD0iJHRtcF9zc3VmIgorICAgICAgICBjdXJsX3N1ZmZpeF9jdXJsX29mZl90dT0iJHRtcF91c3VmIgorICAgICAgXSkKKyAgICBmaQorICBkb25lCisgIElGUz0kb2xkX0lGUworICAjCisgIGlmIHRlc3QgIngkY3VybF9zdWZmaXhfY3VybF9vZmZfdCIgPSAieHVua25vd24iOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtjYW5ub3QgZmluZCBjb25zdGFudCBzdWZmaXggc3RyaW5nIGZvciBjdXJsX29mZl90Ll0pCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFskY3VybF9zdWZmaXhfY3VybF9vZmZfdF0pCisgICAgQUNfTVNHX0NIRUNLSU5HKFtjb25zdGFudCBzdWZmaXggc3RyaW5nIGZvciB1bnNpZ25lZCBjdXJsX29mZl90XSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY3VybF9zdWZmaXhfY3VybF9vZmZfdHVdKQorICBmaQorICAjCitdKQorCisKK2RubCBDVVJMX0NPTkZJR1VSRV9DVVJMX09GRl9UCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIEZpbmQgb3V0IHN1aXRhYmxlIGN1cmxfb2ZmX3QgZGF0YSB0eXBlIGRlZmluaXRpb24gYW5kIGFzc29jaWF0ZWQKK2RubCBpdGVtcywgYW5kIG1ha2UgdGhlIGFwcHJvcHJpYXRlIGRlZmluaXRpb25zIHVzZWQgaW4gdGVtcGxhdGUgZmlsZQorZG5sIGluY2x1ZGUvY3VybC9jdXJsYnVpbGQuaC5pbiB0byBwcm9wZXJseSBjb25maWd1cmUgdGhlIGxpYnJhcnkuCisKK0FDX0RFRlVOKFtDVVJMX0NPTkZJR1VSRV9DVVJMX09GRl9UXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX0lOVFRZUEVTXSlkbmwKKyAgIworICBBQ19CRUZPUkUoWyQwXSxbQUNfU1lTX0xBUkdFRklMRV0pZG5sCisgIEFDX0JFRk9SRShbJDBdLFtDVVJMX0NPTkZJR1VSRV9SRUVOVFJBTlRdKWRubAorICBBQ19CRUZPUkUoWyQwXSxbQ1VSTF9DSEVDS19BSVhfQUxMX1NPVVJDRV0pZG5sCisgICMKKyAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW1NFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0Ll0pCisgIGZpCisgICMKKyAgQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCisgIEFDX0NIRUNLX1NJWkVPRih2b2lkKikKKyAgIworICBpZiB0ZXN0IC16ICIkYWNfY3Zfc2l6ZW9mX2xvbmciIHx8CisgICAgdGVzdCAiJGFjX2N2X3NpemVvZl9sb25nIiAtZXEgIjAiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtjYW5ub3QgZmluZCBvdXQgc2l6ZSBvZiBsb25nLl0pCisgIGZpCisgIGlmIHRlc3QgLXogIiRhY19jdl9zaXplb2Zfdm9pZHAiIHx8CisgICAgIHRlc3QgIiRhY19jdl9zaXplb2Zfdm9pZHAiIC1lcSAiMCI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBmaW5kIG91dCBzaXplIG9mIHZvaWQqLl0pCisgIGZpCisgICMKKyAgeF9MUDY0X2xvbmc9IiIKKyAgeF9MUDMyX2xvbmc9IiIKKyAgeF9MUDE2X2xvbmc9IiIKKyAgIworICBpZiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX2xvbmciIC1lcSAiOCIgJiYKKyAgICAgdGVzdCAiJGFjX2N2X3NpemVvZl92b2lkcCIgLWdlICI4IjsgdGhlbgorICAgIHhfTFA2NF9sb25nPSJsb25nIgorICBlbGlmIHRlc3QgIiRhY19jdl9zaXplb2ZfbG9uZyIgLWVxICI0IiAmJgorICAgICAgIHRlc3QgIiRhY19jdl9zaXplb2Zfdm9pZHAiIC1nZSAiNCI7IHRoZW4KKyAgICB4X0xQMzJfbG9uZz0ibG9uZyIKKyAgZWxpZiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX2xvbmciIC1lcSAiMiIgJiYKKyAgICAgICB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX3ZvaWRwIiAtZ2UgIjIiOyB0aGVuCisgICAgeF9MUDE2X2xvbmc9ImxvbmciCisgIGZpCisgICMKKyAgZG5sIERPX0NVUkxfT0ZGX1RfQ0hFQ0sgcmVzdWx0cyBhcmUgc3RvcmVkIGluIG5leHQgMyB2YXJzCisgICMKKyAgY3VybF90eXBlb2ZfY3VybF9vZmZfdD0idW5rbm93biIKKyAgY3VybF9zaXplb2ZfY3VybF9vZmZfdD0idW5rbm93biIKKyAgY3VybF9mb3JtYXRfY3VybF9vZmZfdD0idW5rbm93biIKKyAgY3VybF9mb3JtYXRfY3VybF9vZmZfdHU9InVua25vd24iCisgICMKKyAgaWYgdGVzdCAiJGN1cmxfdHlwZW9mX2N1cmxfb2ZmX3QiID0gInVua25vd24iOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgNjQtYml0IGN1cmxfb2ZmX3QgZGF0YSB0eXBlXSkKKyAgICBmb3IgdDggaW4gICAgICAgICAgXAorICAgICAgIiR4X0xQNjRfbG9uZyIgICBcCisgICAgICAnaW50NjRfdCcgICAgICAgIFwKKyAgICAgICdfX2ludDY0JyAgICAgICAgXAorICAgICAgJ2xvbmcgbG9uZycgICAgICBcCisgICAgICAnX19sb25nbG9uZycgICAgIFwKKyAgICAgICdfX2xvbmdsb25nX3QnICAgOyBkbworICAgICAgRE9fQ1VSTF9PRkZfVF9DSEVDSyhbJHQ4XSwgWzhdKQorICAgIGRvbmUKKyAgICBBQ19NU0dfUkVTVUxUKFskY3VybF90eXBlb2ZfY3VybF9vZmZfdF0pCisgIGZpCisgIGlmIHRlc3QgIiRjdXJsX3R5cGVvZl9jdXJsX29mZl90IiA9ICJ1bmtub3duIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbZm9yIDMyLWJpdCBjdXJsX29mZl90IGRhdGEgdHlwZV0pCisgICAgZm9yIHQ0IGluICAgICAgICAgIFwKKyAgICAgICIkeF9MUDMyX2xvbmciICAgXAorICAgICAgJ2ludDMyX3QnICAgICAgICBcCisgICAgICAnX19pbnQzMicgICAgICAgIFwKKyAgICAgICdpbnQnICAgICAgICAgICAgOyBkbworICAgICAgRE9fQ1VSTF9PRkZfVF9DSEVDSyhbJHQ0XSwgWzRdKQorICAgIGRvbmUKKyAgICBBQ19NU0dfUkVTVUxUKFskY3VybF90eXBlb2ZfY3VybF9vZmZfdF0pCisgIGZpCisgIGlmIHRlc3QgIiRjdXJsX3R5cGVvZl9jdXJsX29mZl90IiA9ICJ1bmtub3duIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbZm9yIDE2LWJpdCBjdXJsX29mZl90IGRhdGEgdHlwZV0pCisgICAgZm9yIHQyIGluICAgICAgICAgIFwKKyAgICAgICIkeF9MUDE2X2xvbmciICAgXAorICAgICAgJ2ludDE2X3QnICAgICAgICBcCisgICAgICAnX19pbnQxNicgICAgICAgIFwKKyAgICAgICdpbnQnICAgICAgICAgICAgOyBkbworICAgICAgRE9fQ1VSTF9PRkZfVF9DSEVDSyhbJHQyXSwgWzJdKQorICAgIGRvbmUKKyAgICBBQ19NU0dfUkVTVUxUKFskY3VybF90eXBlb2ZfY3VybF9vZmZfdF0pCisgIGZpCisgIGlmIHRlc3QgIiRjdXJsX3R5cGVvZl9jdXJsX29mZl90IiA9ICJ1bmtub3duIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbY2Fubm90IGZpbmQgZGF0YSB0eXBlIGZvciBjdXJsX29mZl90Ll0pCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtzaXplIG9mIGN1cmxfb2ZmX3RdKQorICBBQ19NU0dfUkVTVUxUKFskY3VybF9zaXplb2ZfY3VybF9vZmZfdF0pCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3JtYXR0aW5nIHN0cmluZyBkaXJlY3RpdmUgZm9yIGN1cmxfb2ZmX3RdKQorICBpZiB0ZXN0ICIkY3VybF9mb3JtYXRfY3VybF9vZmZfdCIgIT0gInVua25vd24iOyB0aGVuCisgICAgeF9wdWxsX2hlYWRlcnM9InllcyIKKyAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90PWBlY2hvICIkY3VybF9mb3JtYXRfY3VybF9vZmZfdCIgfCAiJFNFRCIgJ3MvW1siXV0vL2cnYAorICAgIGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3R1PWBlY2hvICIkY3VybF9mb3JtYXRfY3VybF9vZmZfdCIgfCAiJFNFRCIgJ3MvaSQvdS8nYAorICAgIGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3R1PWBlY2hvICIkY3VybF9mb3JtYXRfY3VybF9vZmZfdHUiIHwgIiRTRUQiICdzL2QkL3UvJ2AKKyAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90dT1gZWNobyAiJGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3R1IiB8ICIkU0VEIiAncy9EJC9VLydgCisgIGVsc2UKKyAgICB4X3B1bGxfaGVhZGVycz0ibm8iCisgICAgY2FzZSBYQ19TSF9UUl9TSChbJGN1cmxfdHlwZW9mX2N1cmxfb2ZmX3RdKSBpbgorICAgICAgbG9uZ19sb25nIHwgX19sb25nbG9uZyB8IF9fbG9uZ2xvbmdfdCkKKyAgICAgICAgY3VybF9mb3JtYXRfY3VybF9vZmZfdD0ibGxkIgorICAgICAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90dT0ibGx1IgorICAgICAgICA7OworICAgICAgbG9uZykKKyAgICAgICAgY3VybF9mb3JtYXRfY3VybF9vZmZfdD0ibGQiCisgICAgICAgIGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3R1PSJsdSIKKyAgICAgICAgOzsKKyAgICAgIGludCkKKyAgICAgICAgY3VybF9mb3JtYXRfY3VybF9vZmZfdD0iZCIKKyAgICAgICAgY3VybF9mb3JtYXRfY3VybF9vZmZfdHU9InUiCisgICAgICAgIDs7CisgICAgICBfX2ludDY0KQorICAgICAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90PSJJNjRkIgorICAgICAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90dT0iSTY0dSIKKyAgICAgICAgOzsKKyAgICAgIF9faW50MzIpCisgICAgICAgIGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3Q9IkkzMmQiCisgICAgICAgIGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3R1PSJJMzJ1IgorICAgICAgICA7OworICAgICAgX19pbnQxNikKKyAgICAgICAgY3VybF9mb3JtYXRfY3VybF9vZmZfdD0iSTE2ZCIKKyAgICAgICAgY3VybF9mb3JtYXRfY3VybF9vZmZfdHU9IkkxNnUiCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBBQ19NU0dfRVJST1IoW2Nhbm5vdCBmaW5kIHByaW50IGZvcm1hdCBzdHJpbmcgZm9yIGN1cmxfb2ZmX3QuXSkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIEFDX01TR19SRVNVTFQoWyIkY3VybF9mb3JtYXRfY3VybF9vZmZfdCJdKQorICAjCisgIEFDX01TR19DSEVDS0lORyhbZm9ybWF0dGluZyBzdHJpbmcgZGlyZWN0aXZlIGZvciB1bnNpZ25lZCBjdXJsX29mZl90XSkKKyAgQUNfTVNHX1JFU1VMVChbIiRjdXJsX2Zvcm1hdF9jdXJsX29mZl90dSJdKQorICAjCisgIERPX0NVUkxfT0ZGX1RfU1VGRklYX0NIRUNLKFskY3VybF90eXBlb2ZfY3VybF9vZmZfdF0pCisgICMKKyAgaWYgdGVzdCAiJHhfcHVsbF9oZWFkZXJzIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3R5cGVzX2giID0gInh5ZXMiOyB0aGVuCisgICAgICBDVVJMX0RFRklORV9VTlFVT1RFRChbQ1VSTF9QVUxMX1NZU19UWVBFU19IXSkKKyAgICBmaQorICAgIGlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N0ZGludF9oIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgQ1VSTF9ERUZJTkVfVU5RVU9URUQoW0NVUkxfUFVMTF9TVERJTlRfSF0pCisgICAgZmkKKyAgICBpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgQ1VSTF9ERUZJTkVfVU5RVU9URUQoW0NVUkxfUFVMTF9JTlRUWVBFU19IXSkKKyAgICBmaQorICBmaQorICAjCisgIENVUkxfREVGSU5FX1VOUVVPVEVEKFtDVVJMX1RZUEVPRl9DVVJMX09GRl9UXSwgWyRjdXJsX3R5cGVvZl9jdXJsX29mZl90XSkKKyAgQ1VSTF9ERUZJTkVfVU5RVU9URUQoW0NVUkxfRk9STUFUX0NVUkxfT0ZGX1RdLCBbIiRjdXJsX2Zvcm1hdF9jdXJsX29mZl90Il0pCisgIENVUkxfREVGSU5FX1VOUVVPVEVEKFtDVVJMX0ZPUk1BVF9DVVJMX09GRl9UVV0sIFsiJGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3R1Il0pCisgIENVUkxfREVGSU5FX1VOUVVPVEVEKFtDVVJMX0ZPUk1BVF9PRkZfVF0sIFsiJSRjdXJsX2Zvcm1hdF9jdXJsX29mZl90Il0pCisgIENVUkxfREVGSU5FX1VOUVVPVEVEKFtDVVJMX1NJWkVPRl9DVVJMX09GRl9UXSwgWyRjdXJsX3NpemVvZl9jdXJsX29mZl90XSkKKyAgQ1VSTF9ERUZJTkVfVU5RVU9URUQoW0NVUkxfU1VGRklYX0NVUkxfT0ZGX1RdLCBbJGN1cmxfc3VmZml4X2N1cmxfb2ZmX3RdKQorICBDVVJMX0RFRklORV9VTlFVT1RFRChbQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFVdLCBbJGN1cmxfc3VmZml4X2N1cmxfb2ZmX3R1XSkKKyAgIworXSkKKworCitkbmwgQ1VSTF9DSEVDS19XSU4zMl9MQVJHRUZJTEUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgY3VybCdzIFdJTjMyIGxhcmdlIGZpbGUgd2lsbCBiZSB1c2VkCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX1dJTjMyX0xBUkdFRklMRV0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19IRUFERVJfV0lORE9XU10pZG5sCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBidWlsZCB0YXJnZXQgc3VwcG9ydHMgV0lOMzIgZmlsZSBBUEldKQorICBjdXJsX3dpbjMyX2ZpbGVfYXBpPSJubyIKKyAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5kb3dzX2giID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0IHgiJGVuYWJsZV9sYXJnZWZpbGUiICE9ICJ4bm8iOyB0aGVuCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICBdXSxbWworI2lmICFkZWZpbmVkKF9XSU4zMl9XQ0UpICYmIFwKKyAgICAoZGVmaW5lZChfX01JTkdXMzJfXykgfHwgXAorICAgIChkZWZpbmVkKF9NU0NfVkVSKSAmJiAoZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KSkpKQorICAgICAgICAgIGludCBkdW1teT0xOworI2Vsc2UKKyAgICAgICAgICBXSU4zMiBsYXJnZSBmaWxlIEFQSSBub3Qgc3VwcG9ydGVkLgorI2VuZGlmCisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIGN1cmxfd2luMzJfZmlsZV9hcGk9IndpbjMyX2xhcmdlX2ZpbGVzIgorICAgICAgXSkKKyAgICBmaQorICAgIGlmIHRlc3QgIiRjdXJsX3dpbjMyX2ZpbGVfYXBpIiA9ICJubyI7IHRoZW4KKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgIF1dLFtbCisjaWYgZGVmaW5lZChfV0lOMzJfV0NFKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9NU0NfVkVSKQorICAgICAgICAgIGludCBkdW1teT0xOworI2Vsc2UKKyAgICAgICAgICBXSU4zMiBzbWFsbCBmaWxlIEFQSSBub3Qgc3VwcG9ydGVkLgorI2VuZGlmCisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIGN1cmxfd2luMzJfZmlsZV9hcGk9IndpbjMyX3NtYWxsX2ZpbGVzIgorICAgICAgXSkKKyAgICBmaQorICBmaQorICBjYXNlICIkY3VybF93aW4zMl9maWxlX2FwaSIgaW4KKyAgICB3aW4zMl9sYXJnZV9maWxlcykKKyAgICAgIEFDX01TR19SRVNVTFQoW3llcyAobGFyZ2UgZmlsZSBlbmFibGVkKV0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoVVNFX1dJTjMyX0xBUkdFX0ZJTEVTLCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGFyZSBidWlsZGluZyBhIFdpbmRvd3MgdGFyZ2V0IHdpdGggbGFyZ2UgZmlsZSBzdXBwb3J0Ll0pCisgICAgICA7OworICAgIHdpbjMyX3NtYWxsX2ZpbGVzKQorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzIChsYXJnZSBmaWxlIGRpc2FibGVkKV0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoVVNFX1dJTjMyX1NNQUxMX0ZJTEVTLCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGFyZSBidWlsZGluZyBhIFdpbmRvd3MgdGFyZ2V0IHdpdGhvdXQgbGFyZ2UgZmlsZSBzdXBwb3J0Ll0pCisgICAgICA7OworICAgICopCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICA7OworICBlc2FjCitdKQorCitkbmwgQ1VSTF9FWFBPUlRfUENESVIgKCRwY2RpcikKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBpZiAkcGNkaXIgaXMgbm90IGVtcHR5LCBzZXQgUEtHX0NPTkZJR19MSUJESVIgdG8gJHBjZGlyIGFuZCBleHBvcnQKK2RubAorZG5sIHdlIG5lZWQgdGhpcyBtYWNybyBzaW5jZSBwa2ctY29uZmlnIGRpc3Rpbmd1aXNoZXMgYW1vbmcgZW1wdHkgYW5kIHVuc2V0CitkbmwgdmFyaWFibGUgd2hpbGUgY2hlY2tpbmcgUEtHX0NPTkZJR19MSUJESVIKK2RubAorCitBQ19ERUZVTihbQ1VSTF9FWFBPUlRfUENESVJdLCBbCisgICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgICBQS0dfQ09ORklHX0xJQkRJUj0iJDEiCisgICAgICBleHBvcnQgUEtHX0NPTkZJR19MSUJESVIKKyAgICBmaQorXSkKKworZG5sIENVUkxfQ0hFQ0tfUEtHQ09ORklHICgkbW9kdWxlLCBbJHBjZGlyXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBzZWFyY2ggZm9yIHRoZSBwa2ctY29uZmlnIHRvb2wgKGlmIG5vdCBjcm9zcy1jb21waWxpbmcpLiBTZXQgdGhlIFBLR0NPTkZJRworZG5sIHZhcmlhYmxlIHRvIGhvbGQgdGhlIHBhdGggdG8gaXQsIG9yICdubycgaWYgbm90IGZvdW5kL3ByZXNlbnQuCitkbmwKK2RubCBJZiBwa2ctY29uZmlnIGlzIHByZXNlbnQsIGNoZWNrIHRoYXQgaXQgaGFzIGluZm8gYWJvdXQgdGhlICRtb2R1bGUgb3IKK2RubCByZXR1cm4gIm5vIiBhbnl3YXkhCitkbmwKK2RubCBPcHRpb25hbGx5IFBLR19DT05GSUdfTElCRElSIG1heSBiZSBnaXZlbiBhcyAkcGNkaXIuCitkbmwKKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfUEtHQ09ORklHXSwgWworCisgICAgUEtHQ09ORklHPSJubyIKKworICAgIGlmIHRlc3QgeCRjcm9zc19jb21waWxpbmcgPSB4eWVzOyB0aGVuCisgICAgICBkbmwgc2VlIGlmIHRoZXJlJ3MgYSBwa2ctc3BlY2lmaWMgZm9yIHRoaXMgaG9zdCBzZXR1cAorICAgICAgQUNfUEFUSF9QUk9HKCBQS0dDT05GSUcsICR7aG9zdH0tcGtnLWNvbmZpZywgbm8sCisgICAgICAgICAgICAgICAgICAgICRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluKQorICAgIGZpCisKKyAgICBpZiB0ZXN0IHgkUEtHQ09ORklHID0geG5vOyB0aGVuCisgICAgICBBQ19QQVRIX1BST0coIFBLR0NPTkZJRywgcGtnLWNvbmZpZywgbm8sICRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluKQorICAgIGZpCisKKyAgICBpZiB0ZXN0IHgkUEtHQ09ORklHICE9IHhubzsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDEgb3B0aW9ucyB3aXRoIHBrZy1jb25maWddKQorICAgICAgZG5sIGFzayBwa2ctY29uZmlnIGFib3V0ICQxCisgICAgICBpdGV4aXN0cz1gQ1VSTF9FWFBPUlRfUENESVIoWyQyXSkgZG5sCisgICAgICAgICRQS0dDT05GSUcgLS1leGlzdHMgJDEgPi9kZXYvbnVsbCAyPiYxICYmIGVjaG8gMWAKKworICAgICAgaWYgdGVzdCAteiAiJGl0ZXhpc3RzIjsgdGhlbgorICAgICAgICBkbmwgcGtnLWNvbmZpZyBkb2VzIG5vdCBoYXZlIGluZm8gYWJvdXQgdGhlIGdpdmVuIG1vZHVsZSEgc2V0IHRoZQorICAgICAgICBkbmwgdmFyaWFibGUgdG8gJ25vJworICAgICAgICBQS0dDT05GSUc9Im5vIgorICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICBlbHNlCisgICAgICAgIEFDX01TR19SRVNVTFQoW2ZvdW5kXSkKKyAgICAgIGZpCisgICAgZmkKK10pCisKKworZG5sIENVUkxfR0VORVJBVEVfQ09ORklHVVJFSEVMUF9QTQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBHZW5lcmF0ZSB0ZXN0IGhhcm5lc3MgY29uZmlndXJlaGVscC5wbSBtb2R1bGUsIGRlZmluaW5nIGFuZAorZG5sIGluaXRpYWxpemluZyBzb21lIHBlcmwgdmFyaWFibGVzIHdpdGggdmFsdWVzIHdoaWNoIGFyZSBrbm93bgorZG5sIHdoZW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgcnVucy4gRm9yIHBvcnRhYmlsaXR5IHJlYXNvbnMsIHRlc3QKK2RubCBoYXJuZXNzIG5lZWRzIGluZm9ybWF0aW9uIG9uIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLgorCitBQ19ERUZVTihbQ1VSTF9HRU5FUkFURV9DT05GSUdVUkVIRUxQX1BNXSwgWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NQUF0pZG5sCisgIHRtcF9jcHA9YGV2YWwgZWNobyAiJGFjX2NwcCIgMj4vZGV2L251bGxgCisgIGlmIHRlc3QgLXogIiR0bXBfY3BwIjsgdGhlbgorICAgIHRtcF9jcHA9J2NwcCcKKyAgZmkKKyAgY2F0ID4uL3Rlc3RzL2NvbmZpZ3VyZWhlbHAucG0gPDxfRU9GCitbQCU6QF0gVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlLiAgRG8gbm90IGVkaXQuCisKK3BhY2thZ2UgY29uZmlndXJlaGVscDsKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBFeHBvcnRlcjsKKwordXNlIHZhcnMgcXcoCisgICAgQElTQQorICAgIEBFWFBPUlRfT0sKKyAgICBcJENwcmVwcm9jZXNzb3IKKyAgICApOworCitASVNBID0gcXcoRXhwb3J0ZXIpOworCitARVhQT1JUX09LID0gcXcoCisgICAgXCRDcHJlcHJvY2Vzc29yCisgICAgKTsKKworXCRDcHJlcHJvY2Vzc29yID0gJyR0bXBfY3BwJzsKKworMTsKK19FT0YKK10pCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9hY2xvY2FsLm00IGIvY3VybC03LjI1LjAvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzA1ZWUyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvYWNsb2NhbC5tNApAQCAtMCwwICsxLDkwNiBAQAorIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuOS42IC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisjIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9BVVRPTUFLRV9WRVJTSU9OKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXV0b21ha2UgWC5ZIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGVuc3VyZSBhY2xvY2FsLm00IGhhcyBiZWVuCisjIGdlbmVyYXRlZCBmcm9tIHRoZSBtNCBmaWxlcyBhY2NvbXBhbnlpbmcgQXV0b21ha2UgWC5ZLgorQUNfREVGVU4oW0FNX0FVVE9NQUtFX1ZFUlNJT05dLCBbYW1fX2FwaV92ZXJzaW9uPSIxLjkiXSkKKworIyBBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2FsbCBBTV9BVVRPTUFLRV9WRVJTSU9OIHNvIGl0IGNhbiBiZSB0cmFjZWQuCisjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQUNfSU5JVF9BVVRPTUFLRS4KK0FDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKKwkgW0FNX0FVVE9NQUtFX1ZFUlNJT04oWzEuOS42XSldKQorCisjIEFNX0FVWF9ESVJfRVhQQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEZvciBwcm9qZWN0cyB1c2luZyBBQ19DT05GSUdfQVVYX0RJUihbZm9vXSksIEF1dG9jb25mIHNldHMKKyMgJGFjX2F1eF9kaXIgdG8gYCRzcmNkaXIvZm9vJy4gIEluIG90aGVyIHByb2plY3RzLCBpdCBpcyBzZXQgdG8KKyMgYCRzcmNkaXInLCBgJHNyY2Rpci8uLicsIG9yIGAkc3JjZGlyLy4uLy4uJy4KKyMKKyMgT2YgY291cnNlLCBBdXRvbWFrZSBtdXN0IGhvbm9yIHRoaXMgdmFyaWFibGUgd2hlbmV2ZXIgaXQgY2FsbHMgYQorIyB0b29sIGZyb20gdGhlIGF1eGlsaWFyeSBkaXJlY3RvcnkuICBUaGUgcHJvYmxlbSBpcyB0aGF0ICRzcmNkaXIgKGFuZAorIyB0aGVyZWZvcmUgJGFjX2F1eF9kaXIgYXMgd2VsbCkgY2FuIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSwKKyMgZGVwZW5kaW5nIG9uIGhvdyBjb25maWd1cmUgaXMgcnVuLiAgVGhpcyBpcyBwcmV0dHkgYW5ub3lpbmcsIHNpbmNlCisjIGl0IG1ha2VzICRhY19hdXhfZGlyIHF1aXRlIHVudXNhYmxlIGluIHN1YmRpcmVjdG9yaWVzOiBpbiB0aGUgdG9wCisjIHNvdXJjZSBkaXJlY3RvcnksIGFueSBmb3JtIHdpbGwgd29yayBmaW5lLCBidXQgaW4gc3ViZGlyZWN0b3JpZXMgYQorIyByZWxhdGl2ZSBwYXRoIG5lZWRzIHRvIGJlIGFkanVzdGVkIGZpcnN0LgorIworIyAkYWNfYXV4X2Rpci9taXNzaW5nCisjICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaWYgJGFjX2F1eF9kaXIgaXMgcmVsYXRpdmUKKyMgJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZworIyAgICBmYWlscyBpZiAkYWNfYXV4X2RpciBpcyBhYnNvbHV0ZSwKKyMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpbiBhIFZQQVRIIGJ1aWxkIHdpdGgKKyMgICAgICAgICAgYSByZWxhdGl2ZSAkYWNfYXV4X2RpcgorIworIyBUaGUgcmVhc29uIG9mIHRoZSBsYXR0ZXIgZmFpbHVyZSBpcyB0aGF0ICR0b3Bfc3JjZGlyIGFuZCAkYWNfYXV4X2RpcgorIyBhcmUgYm90aCBwcmVmaXhlZCBieSAkc3JjZGlyLiAgSW4gYW4gaW4tc291cmNlIGJ1aWxkIHRoaXMgaXMgdXN1YWxseQorIyBoYXJtbGVzcyBiZWNhdXNlICRzcmNkaXIgaXMgYC4nLCBidXQgdGhpbmdzIHdpbGwgYnJva2Ugd2hlbiB5b3UKKyMgc3RhcnQgYSBWUEFUSCBidWlsZCBvciB1c2UgYW4gYWJzb2x1dGUgJHNyY2Rpci4KKyMKKyMgU28gd2UgY291bGQgdXNlIHNvbWV0aGluZyBzaW1pbGFyIHRvICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcsCisjIGlmZiB3ZSBzdHJpcCB0aGUgbGVhZGluZyAkc3JjZGlyIGZyb20gJGFjX2F1eF9kaXIuICBUaGF0IHdvdWxkIGJlOgorIyAgIGFtX2F1eF9kaXI9J1wkKHRvcF9zcmNkaXIpLydgZXhwciAiJGFjX2F1eF9kaXIiIDogIiRzcmNkaXIvLypcKC4qXCkiYAorIyBhbmQgdGhlbiB3ZSB3b3VsZCBkZWZpbmUgJE1JU1NJTkcgYXMKKyMgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKyMgVGhpcyB3aWxsIHdvcmsgYXMgbG9uZyBhcyBNSVNTSU5HIGlzIG5vdCBjYWxsZWQgZnJvbSBjb25maWd1cmUsIGJlY2F1c2UKKyMgdW5mb3J0dW5hdGVseSAkKHRvcF9zcmNkaXIpIGhhcyBubyBtZWFuaW5nIGluIGNvbmZpZ3VyZS4KKyMgSG93ZXZlciB0aGVyZSBhcmUgb3RoZXIgdmFyaWFibGVzLCBsaWtlIENDLCB3aGljaCBhcmUgb2Z0ZW4gdXNlZCBpbgorIyBjb25maWd1cmUsIGFuZCBjb3VsZCB0aGVyZWZvcmUgbm90IHVzZSB0aGlzICJmaXhlZCIgJGFjX2F1eF9kaXIuCisjCisjIEFub3RoZXIgc29sdXRpb24sIHVzZWQgaGVyZSwgaXMgdG8gYWx3YXlzIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbgorIyBhYnNvbHV0ZSBQQVRILiAgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdXNpbmcgYWJzb2x1dGUgcGF0aHMgcHJldmVudCBhCisjIGNvbmZpZ3VyZWQgdHJlZSB0byBiZSBtb3ZlZCB3aXRob3V0IHJlY29uZmlndXJhdGlvbi4KKworQUNfREVGVU4oW0FNX0FVWF9ESVJfRVhQQU5EXSwKK1tkbmwgUmVseSBvbiBhdXRvY29uZiB0byBzZXQgdXAgQ0RQQVRIIHByb3Blcmx5LgorQUNfUFJFUkVRKFsyLjUwXSlkbmwKKyMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKK2FtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKK10pCisKKyMgQU1fQ09ORElUSU9OQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNworCisjIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KK0FDX0RFRlVOKFtBTV9DT05ESVRJT05BTF0sCitbQUNfUFJFUkVRKDIuNTIpZG5sCisgaWZlbHNlKFskMV0sIFtUUlVFXSwgIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSwKKwlbJDFdLCBbRkFMU0VdLCBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0pZG5sCitBQ19TVUJTVChbJDFfVFJVRV0pCitBQ19TVUJTVChbJDFfRkFMU0VdKQoraWYgJDI7IHRoZW4KKyAgJDFfVFJVRT0KKyAgJDFfRkFMU0U9JyMnCitlbHNlCisgICQxX1RSVUU9JyMnCisgICQxX0ZBTFNFPQorZmkKK0FDX0NPTkZJR19DT01NQU5EU19QUkUoCitbaWYgdGVzdCAteiAiJHskMV9UUlVFfSIgJiYgdGVzdCAteiAiJHskMV9GQUxTRX0iOyB0aGVuCisgIEFDX01TR19FUlJPUihbW2NvbmRpdGlvbmFsICIkMSIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS5dXSkKK2ZpXSldKQorCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDgKKworIyBUaGVyZSBhcmUgYSBmZXcgZGlydHkgaGFja3MgYmVsb3cgdG8gYXZvaWQgbGV0dGluZyBgQUNfUFJPR19DQycgYmUKKyMgd3JpdHRlbiBpbiBjbGVhciwgaW4gd2hpY2ggY2FzZSBhdXRvbWFrZSwgd2hlbiByZWFkaW5nIGFjbG9jYWwubTQsCisjIHdpbGwgdGhpbmsgaXQgc2VlcyBhICp1c2UqLCBhbmQgdGhlcmVmb3JlIHdpbGwgdHJpZ2dlciBhbGwgaXQncworIyBDIHN1cHBvcnQgbWFjaGluZXJ5LiAgQWxzbyBub3RlIHRoYXQgaXQgbWVhbnMgdGhhdCBhdXRvc2Nhbiwgc2VlaW5nCisjIENDIGV0Yy4gaW4gdGhlIE1ha2VmaWxlLCB3aWxsIGFzayBmb3IgYW4gQUNfUFJPR19DQyB1c2UuLi4KKworCisjIF9BTV9ERVBFTkRFTkNJRVMoTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWUgaG93IHRoZSBjb21waWxlciBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgY2hlY2tpbmcuCisjIE5BTUUgaXMgIkNDIiwgIkNYWCIsICJHQ0oiLCBvciAiT0JKQyIuCisjIFdlIHRyeSBhIGZldyB0ZWNobmlxdWVzIGFuZCB1c2UgdGhhdCB0byBzZXQgYSBzaW5nbGUgY2FjaGUgdmFyaWFibGUuCisjCisjIFdlIGRvbid0IEFDX1JFUVVJUkUgdGhlIGNvcnJlc3BvbmRpbmcgQUNfUFJPR19DQyBzaW5jZSB0aGUgbGF0dGVyIHdhcworIyBtb2RpZmllZCB0byBpbnZva2UgX0FNX0RFUEVOREVOQ0lFUyhDQyk7IHdlIHdvdWxkIGhhdmUgYSBjaXJjdWxhcgorIyBkZXBlbmRlbmN5LCBhbmQgZ2l2ZW4gdGhhdCB0aGUgdXNlciBpcyBub3QgZXhwZWN0ZWQgdG8gcnVuIHRoaXMgbWFjcm8sCisjIGp1c3QgcmVseSBvbiBBQ19QUk9HX0NDLgorQUNfREVGVU4oW19BTV9ERVBFTkRFTkNJRVNdLAorW0FDX1JFUVVJUkUoW0FNX1NFVF9ERVBESVJdKWRubAorQUNfUkVRVUlSRShbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdKWRubAorQUNfUkVRVUlSRShbQU1fTUFLRV9JTkNMVURFXSlkbmwKK0FDX1JFUVVJUkUoW0FNX0RFUF9UUkFDS10pZG5sCisKK2lmZWxzZShbJDFdLCBDQywgICBbZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICAgWyQxXSwgQ1hYLCAgW2RlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD1dLAorICAgICAgIFskMV0sIE9CSkMsIFtkZXBjYz0iJE9CSkMiIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCisgICAgICAgWyQxXSwgR0NKLCAgW2RlcGNjPSIkR0NKIiAgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgICAgICAgICAgICAgICBbZGVwY2M9IiQkMSIgICBhbV9jb21waWxlcl9saXN0PV0pCisKK0FDX0NBQ0hFX0NIRUNLKFtkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjY10sCisgICAgICAgICAgICAgICBbYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdLAorW2lmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uIFsncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCddIDwgLi9kZXBjb21wYAorICBmaQorICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLgorICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jIC1vIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCitdKQorQUNfU1VCU1QoWyQxREVQTU9ERV0sIFtkZXBtb2RlPSRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0pCitBTV9DT05ESVRJT05BTChbYW1fX2Zhc3RkZXAkMV0sIFsKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzNdKQorXSkKKworCisjIEFNX1NFVF9ERVBESVIKKyMgLS0tLS0tLS0tLS0tLQorIyBDaG9vc2UgYSBkaXJlY3RvcnkgbmFtZSBmb3IgZGVwZW5kZW5jeSBmaWxlcy4KKyMgVGhpcyBtYWNybyBpcyBBQ19SRVFVSVJFZCBpbiBfQU1fREVQRU5ERU5DSUVTCitBQ19ERUZVTihbQU1fU0VUX0RFUERJUl0sCitbQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK0FDX1NVQlNUKFtERVBESVJdLCBbIiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiXSlkbmwKK10pCisKKworIyBBTV9ERVBfVFJBQ0sKKyMgLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fREVQX1RSQUNLXSwKK1tBQ19BUkdfRU5BQkxFKGRlcGVuZGVuY3ktdHJhY2tpbmcsCitbICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCisgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzXSkKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgorICBBTURFUEJBQ0tTTEFTSD0nXCcKK2ZpCitBTV9DT05ESVRJT05BTChbQU1ERVBdLCBbdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vXSkKK0FDX1NVQlNUKFtBTURFUEJBQ0tTTEFTSF0pCitdKQorCisjIEdlbmVyYXRlIGNvZGUgdG8gc2V0IHVwIGRlcGVuZGVuY3kgdHJhY2tpbmcuICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyNzZXJpYWwgMworCisjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorW2ZvciBtZiBpbiAkQ09ORklHX0ZJTEVTOyBkbworICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0CisgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgorICAjIFNvIGxldCdzIGdyZXAgd2hvbGUgZmlsZS4KKyAgaWYgZ3JlcCAnXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZScgJG1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBkaXJwYXJ0PWBBU19ESVJOQU1FKCIkbWYiKWAKKyAgZWxzZQorICAgIGNvbnRpbnVlCisgIGZpCisgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCisgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KKyAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKKyAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKKyAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisgIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAorICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAorICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCisgICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKKyAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCisgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisgICMgZXhwYW5zaW9uLgorICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKKyAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKyAgICAgICBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KKyAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKyAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKKyAgICBmZGlyPWBBU19ESVJOQU1FKFsiJGZpbGUiXSlgCisgICAgQVNfTUtESVJfUChbJGRpcnBhcnQvJGZkaXJdKQorICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisgIGRvbmUKK2RvbmUKK10pIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKworCisjIEFNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBvbmNlIC0tIHVzZSB2aWEgQUNfUkVRVUlSRS4KKyMKKyMgVGhpcyBjb2RlIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZworIyBpcyBlbmFibGVkLiAgRklYTUUuICBUaGlzIGNyZWF0ZXMgZWFjaCBgLlAnIGZpbGUgdGhhdCB3ZSB3aWxsCisjIG5lZWQgaW4gb3JkZXIgdG8gYm9vdHN0cmFwIHRoZSBkZXBlbmRlbmN5IGhhbmRsaW5nIGNvZGUuCitBQ19ERUZVTihbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorW0FDX0NPTkZJR19DT01NQU5EUyhbZGVwZmlsZXNdLAorICAgICBbdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKKyAgICAgW0FNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciJdKQorXSkKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgOAorCisjIEFNX0NPTkZJR19IRUFERVIgaXMgb2Jzb2xldGUuICBJdCBoYXMgYmVlbiByZXBsYWNlZCBieSBBQ19DT05GSUdfSEVBREVSUy4KK0FVX0RFRlVOKFtBTV9DT05GSUdfSEVBREVSXSwgW0FDX0NPTkZJR19IRUFERVJTKCRAKV0pCisKKyMgRG8gYWxsIHRoZSB3b3JrIGZvciBBdXRvbWFrZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMTIKKworIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2guICBTb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYKKyMgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuICBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KKworIyBBTV9JTklUX0FVVE9NQUtFKFBBQ0tBR0UsIFZFUlNJT04sIFtOTy1ERUZJTkVdKQorIyBBTV9JTklUX0FVVE9NQUtFKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIGNhbGwgd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OIGFyZ3VtZW50cyBpcyB0aGUgb2xkIHN0eWxlCisjIGNhbGwgKHByZSBhdXRvY29uZi0yLjUwKSwgd2hpY2ggaXMgYmVpbmcgcGhhc2VkIG91dC4gIFBBQ0tBR0UKKyMgYW5kIFZFUlNJT04gc2hvdWxkIG5vdyBiZSBwYXNzZWQgdG8gQUNfSU5JVCBhbmQgcmVtb3ZlZCBmcm9tCisjIHRoZSBjYWxsIHRvIEFNX0lOSVRfQVVUT01BS0UuCisjIFdlIHN1cHBvcnQgYm90aCBjYWxsIHN0eWxlcyBmb3IgdGhlIHRyYW5zaXRpb24uICBBZnRlcgorIyB0aGUgbmV4dCBBdXRvbWFrZSByZWxlYXNlLCBBdXRvY29uZiBjYW4gbWFrZSB0aGUgQUNfSU5JVAorIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCisjIHJlbGVhc2UgYW5kIGRyb3AgdGhlIG9sZCBjYWxsIHN1cHBvcnQuCitBQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCitbQUNfUFJFUkVRKFsyLjU4XSlkbmwKK2RubCBBdXRvY29uZiB3YW50cyB0byBkaXNhbGxvdyBBTV8gbmFtZXMuICBXZSBleHBsaWNpdGx5IGFsbG93CitkbmwgdGhlIG9uZXMgd2UgY2FyZSBhYm91dC4KK200X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAorIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCitpZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiICYmCisgICB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorICBBQ19NU0dfRVJST1IoW3NvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gIm1ha2UgZGlzdGNsZWFuIiB0aGVyZSBmaXJzdF0pCitmaQorCisjIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKK2lmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCisgIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKKyAgZWxzZQorICAgIENZR1BBVEhfVz1lY2hvCisgIGZpCitmaQorQUNfU1VCU1QoW0NZR1BBVEhfV10pCisKKyMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KK2RubCBEaXN0aW5ndWlzaCBiZXR3ZWVuIG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGNhbGxzLgorbTRfaWZ2YWwoWyQyXSwKK1ttNF9pZnZhbChbJDNdLCBbX0FNX1NFVF9PUFRJT04oW25vLWRlZmluZV0pXSlkbmwKKyBBQ19TVUJTVChbUEFDS0FHRV0sIFskMV0pZG5sCisgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJDJdKV0sCitbX0FNX1NFVF9PUFRJT05TKFskMV0pZG5sCisgQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJ0FDX1BBQ0tBR0VfVEFSTkFNRSddKWRubAorIEFDX1NVQlNUKFtWRVJTSU9OXSwgWydBQ19QQUNLQUdFX1ZFUlNJT04nXSldKWRubAorCitfQU1fSUZfT1BUSU9OKFtuby1kZWZpbmVdLCwKK1tBQ19ERUZJTkVfVU5RVU9URUQoUEFDS0FHRSwgIiRQQUNLQUdFIiwgW05hbWUgb2YgcGFja2FnZV0pCisgQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIsIFtWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlXSldKWRubAorCisjIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCitBQ19SRVFVSVJFKFtBTV9TQU5JVFlfQ0hFQ0tdKWRubAorQUNfUkVRVUlSRShbQUNfQVJHX1BST0dSQU1dKWRubAorQU1fTUlTU0lOR19QUk9HKEFDTE9DQUwsIGFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259KQorQU1fTUlTU0lOR19QUk9HKEFVVE9DT05GLCBhdXRvY29uZikKK0FNX01JU1NJTkdfUFJPRyhBVVRPTUFLRSwgYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259KQorQU1fTUlTU0lOR19QUk9HKEFVVE9IRUFERVIsIGF1dG9oZWFkZXIpCitBTV9NSVNTSU5HX1BST0coTUFLRUlORk8sIG1ha2VpbmZvKQorQU1fUFJPR19JTlNUQUxMX1NICitBTV9QUk9HX0lOU1RBTExfU1RSSVAKK0FDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sCisjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorIyBzb21lIHBsYXRmb3Jtcy4KK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK19BTV9JRl9PUFRJT04oW3Rhci11c3Rhcl0sIFtfQU1fUFJPR19UQVIoW3VzdGFyXSldLAorICAgICAgICAgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKKwkgICAgICAJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKK19BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NDXSwKKyAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENDKV0sCisgICAgICAgICAgICAgICAgICBbZGVmaW5lKFtBQ19QUk9HX0NDXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbihbQUNfUFJPR19DQ10pW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSldKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKKyAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENYWCldLAorICAgICAgICAgICAgICAgICAgW2RlZmluZShbQUNfUFJPR19DWFhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0pXSlkbmwKK10pCitdKQorCisKKyMgV2hlbiBjb25maWcuc3RhdHVzIGdlbmVyYXRlcyBhIGhlYWRlciwgd2UgbXVzdCB1cGRhdGUgdGhlIHN0YW1wLWggZmlsZS4KKyMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCisjIHRoYXQgaXMgZ2VuZXJhdGVkLiAgVGhlIHN0YW1wIGZpbGVzIGFyZSBudW1iZXJlZCB0byBoYXZlIGRpZmZlcmVudCBuYW1lcy4KKworIyBBdXRvY29uZiBjYWxscyBfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LICh3aGVuIGRlZmluZWQpIGluIHRoZQorIyBsb29wIHdoZXJlIGNvbmZpZy5zdGF0dXMgY3JlYXRlcyB0aGUgaGVhZGVycywgc28gd2UgY2FuIGdlbmVyYXRlCisjIG91ciBzdGFtcCBmaWxlcyB0aGVyZS4KK0FDX0RFRlVOKFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LXSwKK1sjIENvbXB1dGUgJDEncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCitfYW1fc3RhbXBfY291bnQ9MQorZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCisgIGNhc2UgJF9hbV9oZWFkZXIgaW4KKyAgICAkMSB8ICQxOiogKQorICAgICAgYnJlYWsgOzsKKyAgICAqICkKKyAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKKyAgZXNhYworZG9uZQorZWNobyAidGltZXN0YW1wIGZvciAkMSIgPmBBU19ESVJOQU1FKFskMV0pYC9zdGFtcC1oW10kX2FtX3N0YW1wX2NvdW50XSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19JTlNUQUxMX1NICisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgJGluc3RhbGxfc2guCitBQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitpbnN0YWxsX3NoPSR7aW5zdGFsbF9zaC0iJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCJ9CitBQ19TVUJTVChpbnN0YWxsX3NoKV0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAyCisKKyMgQ2hlY2sgd2hldGhlciB0aGUgdW5kZXJseWluZyBmaWxlLXN5c3RlbSBzdXBwb3J0cyBmaWxlbmFtZXMKKyMgd2l0aCBhIGxlYWRpbmcgZG90LiAgRm9yIGluc3RhbmNlIE1TLURPUyBkb2Vzbid0LgorQUNfREVGVU4oW0FNX1NFVF9MRUFESU5HX0RPVF0sCitbcm0gLXJmIC50c3QgMj4vZGV2L251bGwKK21rZGlyIC50c3QgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLnRzdDsgdGhlbgorICBhbV9fbGVhZGluZ19kb3Q9LgorZWxzZQorICBhbV9fbGVhZGluZ19kb3Q9XworZmkKK3JtZGlyIC50c3QgMj4vZGV2L251bGwKK0FDX1NVQlNUKFthbV9fbGVhZGluZ19kb3RdKV0pCisKKyMgQWRkIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBvcHRpb24gdG8gY29uZmlndXJlLiAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgRnJvbSBKaW0gTWV5ZXJpbmcKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNAorCitBQ19ERUZVTihbQU1fTUFJTlRBSU5FUl9NT0RFXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzXSkKKyAgZG5sIG1haW50YWluZXItbW9kZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0CisgIEFDX0FSR19FTkFCTEUobWFpbnRhaW5lci1tb2RlLAorWyAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlICBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKKwkJCSAgKGFuZCBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcl0sCisgICAgICBVU0VfTUFJTlRBSU5FUl9NT0RFPSRlbmFibGV2YWwsCisgICAgICBVU0VfTUFJTlRBSU5FUl9NT0RFPW5vKQorICBBQ19NU0dfUkVTVUxUKFskVVNFX01BSU5UQUlORVJfTU9ERV0pCisgIEFNX0NPTkRJVElPTkFMKE1BSU5UQUlORVJfTU9ERSwgW3Rlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXNdKQorICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKKyAgQUNfU1VCU1QoTUFJTlQpZG5sCitdCispCisKK0FVX0RFRlVOKFtqbV9NQUlOVEFJTkVSX01PREVdLCBbQU1fTUFJTlRBSU5FUl9NT0RFXSkKKworIyBDaGVjayB0byBzZWUgaG93ICdtYWtlJyB0cmVhdHMgaW5jbHVkZXMuCSAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDMKKworIyBBTV9NQUtFX0lOQ0xVREUoKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaG93IG1ha2UgdHJlYXRzIGluY2x1ZGVzLgorQUNfREVGVU4oW0FNX01BS0VfSU5DTFVERV0sCitbYW1fbWFrZT0ke01BS0UtbWFrZX0KK2NhdCA+IGNvbmZpbmMgPDwgJ0VORCcKK2FtX19kb2l0OgorCUBlY2hvIGRvbmUKKy5QSE9OWTogYW1fX2RvaXQKK0VORAorIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgorQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlXSkKK2FtX19pbmNsdWRlPSIjIgorYW1fX3F1b3RlPQorX2FtX3Jlc3VsdD1ub25lCisjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgorZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorIyBXZSBncmVwIG91dCBgRW50ZXJpbmcgZGlyZWN0b3J5JyBhbmQgYExlYXZpbmcgZGlyZWN0b3J5JworIyBtZXNzYWdlcyB3aGljaCBjYW4gb2NjdXIgaWYgYHcnIGVuZHMgdXAgaW4gTUFLRUZMQUdTLgorIyBJbiBwYXJ0aWN1bGFyIHdlIGRvbid0IGxvb2sgYXQgYF5tYWtlOicgYmVjYXVzZSBHTlUgbWFrZSBtaWdodAorIyBiZSBpbnZva2VkIHVuZGVyIHNvbWUgb3RoZXIgbmFtZSAodXN1YWxseSAiZ21ha2UiKSwgaW4gd2hpY2gKKyMgY2FzZSBpdCBwcmludHMgaXRzIG5ldyBuYW1lIGluc3RlYWQgb2YgYG1ha2UnLgoraWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGwgfCBncmVwIC12ICdpbmcgZGlyZWN0b3J5J2AiID0gImRvbmUiOyB0aGVuCisgICBhbV9faW5jbHVkZT1pbmNsdWRlCisgICBhbV9fcXVvdGU9CisgICBfYW1fcmVzdWx0PUdOVQorZmkKKyMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgoraWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgorICAgaWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIiA9ICJkb25lIjsgdGhlbgorICAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgIGFtX19xdW90ZT0iXCIiCisgICAgICBfYW1fcmVzdWx0PUJTRAorICAgZmkKK2ZpCitBQ19TVUJTVChbYW1fX2luY2x1ZGVdKQorQUNfU1VCU1QoW2FtX19xdW90ZV0pCitBQ19NU0dfUkVTVUxUKFskX2FtX3Jlc3VsdF0pCitybSAtZiBjb25maW5jIGNvbmZtZgorXSkKKworIyBGYWtlIHRoZSBleGlzdGVuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBHTlUgbWFpbnRhaW5lcnMgdXNlLiAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA0CisKKyMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX01JU1NJTkdfUFJPR10sCitbQUNfUkVRVUlSRShbQU1fTUlTU0lOR19IQVNfUlVOXSkKKyQxPSR7JDEtIiR7YW1fbWlzc2luZ19ydW59JDIifQorQUNfU1VCU1QoJDEpXSkKKworCisjIEFNX01JU1NJTkdfSEFTX1JVTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IHN1cHBvcnRzIC0tcnVuLgorIyBJZiBpdCBkb2VzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCitBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCit0ZXN0IHgiJHtNSVNTSU5HK3NldH0iID0geHNldCB8fCBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIEFDX01TR19XQVJOKFtgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZ10pCitmaQorXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19NS0RJUl9QCisjIC0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIGBta2RpciAtcCcgaXMgc3VwcG9ydGVkLCBmYWxsYmFjayB0byBta2luc3RhbGxkaXJzIG90aGVyd2lzZS4KKyMKKyMgQXV0b21ha2UgMS44IHVzZWQgYG1rZGlyIC1tIDA3NTUgLXAgLS0nIHRvIGVuc3VyZSB0aGF0IGRpcmVjdG9yaWVzCisjIGNyZWF0ZWQgYnkgYG1ha2UgaW5zdGFsbCcgYXJlIGFsd2F5cyB3b3JsZCByZWFkYWJsZSwgZXZlbiBpZiB0aGUKKyMgaW5zdGFsbGVyIGhhcHBlbnMgdG8gaGF2ZSBhbiBvdmVybHkgcmVzdHJpY3RpdmUgdW1hc2sgKGUuZy4gMDc3KS4KKyMgVGhpcyB3YXMgYSBtaXN0YWtlLiAgVGhlcmUgYXJlIGF0IGxlYXN0IHR3byByZWFzb25zIHdoeSB3ZSBtdXN0IG5vdAorIyB1c2UgYC1tIDA3NTUnOgorIyAgIC0gaXQgY2F1c2VzIHNwZWNpYWwgYml0cyBsaWtlIFNHSUQgdG8gYmUgaWdub3JlZCwKKyMgICAtIGl0IG1heSBiZSB0b28gcmVzdHJpY3RpdmUgKHNvbWUgc2V0dXBzIGV4cGVjdCA3NzUgZGlyZWN0b3JpZXMpLgorIworIyBEbyBub3QgdXNlIC1tIDA3NTUgYW5kIGxldCBwZW9wbGUgY2hvb3NlIHdoYXRldmVyIHRoZXkgZXhwZWN0IGJ5CisjIHNldHRpbmcgdW1hc2suCisjCisjIFdlIGNhbm5vdCBhY2NlcHQgYW55IGltcGxlbWVudGF0aW9uIG9mIGBta2RpcicgdGhhdCByZWNvZ25pemVzIGAtcCcuCisjIFNvbWUgaW1wbGVtZW50YXRpb25zIChzdWNoIGFzIFNvbGFyaXMgOCdzKSBhcmUgbm90IHRocmVhZC1zYWZlOiBpZiBhCisjIHBhcmFsbGVsIG1ha2UgdHJpZXMgdG8gcnVuIGBta2RpciAtcCBhL2InIGFuZCBgbWtkaXIgLXAgYS9jJworIyBjb25jdXJyZW50bHksIGJvdGggdmVyc2lvbiBjYW4gZGV0ZWN0IHRoYXQgYS8gaXMgbWlzc2luZywgYnV0IG9ubHkKKyMgb25lIGNhbiBjcmVhdGUgaXQgYW5kIHRoZSBvdGhlciB3aWxsIGVycm9yIG91dC4gIENvbnNlcXVlbnRseSB3ZQorIyByZXN0cmljdCBvdXJzZWx2ZXMgdG8gR05VIG1ha2UgKHVzaW5nIHRoZSAtLXZlcnNpb24gb3B0aW9uIGVuc3VyZXMKKyMgdGhpcy4pCitBQ19ERUZVTihbQU1fUFJPR19NS0RJUl9QXSwKK1tpZiBta2RpciAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisgICMgV2UgdXNlZCB0byBrZWVwaW5nIHRoZSBgLicgYXMgZmlyc3QgYXJndW1lbnQsIGluIG9yZGVyIHRvCisgICMgYWxsb3cgJChta2Rpcl9wKSB0byBiZSB1c2VkIHdpdGhvdXQgYXJndW1lbnQuICBBcyBpbgorICAjICAgJChta2Rpcl9wKSAkKHNvbWVkaXIpCisgICMgd2hlcmUgJChzb21lZGlyKSBpcyBjb25kaXRpb25hbGx5IGRlZmluZWQuICBIb3dldmVyIHRoaXMgaXMgd3JvbmcKKyAgIyBmb3IgdHdvIHJlYXNvbnM6CisgICMgIDEuIGlmIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBieSBhIHVzZXIgd2hvIGNhbm5vdCB3cml0ZSBgLicKKyAgIyAgICAgbWFrZSBpbnN0YWxsIHdpbGwgZmFpbCwKKyAgIyAgMi4gdGhlIGFib3ZlIGNvbW1lbnQgc2hvdWxkIG1vc3QgY2VydGFpbmx5IHJlYWQKKyAgIyAgICAgJChta2Rpcl9wKSAkKERFU1RESVIpJChzb21lZGlyKQorICAjICAgICBzbyBpdCBkb2VzIG5vdCB3b3JrIHdoZW4gJChzb21lZGlyKSBpcyB1bmRlZmluZWQgYW5kCisgICMgICAgICQoREVTVERJUikgaXMgbm90LgorICAjICBUbyBzdXBwb3J0IHRoZSBsYXR0ZXIgY2FzZSwgd2UgaGF2ZSB0byB3cml0ZQorICAjICAgICB0ZXN0IC16ICIkKHNvbWVkaXIpIiB8fCAkKG1rZGlyX3ApICQoREVTVERJUikkKHNvbWVkaXIpLAorICAjICBzbyB0aGUgYC4nIHRyaWNrIGlzIHBvaW50bGVzcy4KKyAgbWtkaXJfcD0nbWtkaXIgLXAgLS0nCitlbHNlCisgICMgT24gTmV4dFN0ZXAgYW5kIE9wZW5TdGVwLCB0aGUgYG1rZGlyJyBjb21tYW5kIGRvZXMgbm90CisgICMgcmVjb2duaXplIGFueSBvcHRpb24uICBJdCB3aWxsIGludGVycHJldCBhbGwgb3B0aW9ucyBhcworICAjIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSwgYW5kIHRoZW4gYWJvcnQgYmVjYXVzZSBgLicgYWxyZWFkeQorICAjIGV4aXN0cy4KKyAgZm9yIGQgaW4gLi8tcCAuLy0tdmVyc2lvbjsKKyAgZG8KKyAgICB0ZXN0IC1kICRkICYmIHJtZGlyICRkCisgIGRvbmUKKyAgIyAkKG1raW5zdGFsbGRpcnMpIGlzIGRlZmluZWQgYnkgQXV0b21ha2UgaWYgbWtpbnN0YWxsZGlycyBleGlzdHMuCisgIGlmIHRlc3QgLWYgIiRhY19hdXhfZGlyL21raW5zdGFsbGRpcnMiOyB0aGVuCisgICAgbWtkaXJfcD0nJChta2luc3RhbGxkaXJzKScKKyAgZWxzZQorICAgIG1rZGlyX3A9JyQoaW5zdGFsbF9zaCkgLWQnCisgIGZpCitmaQorQUNfU1VCU1QoW21rZGlyX3BdKV0pCisKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDMKKworIyBfQU1fTUFOR0xFX09QVElPTihOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BTV9NQU5HTEVfT1BUSU9OXSwKK1tbX0FNX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQorCisjIF9BTV9TRVRfT1BUSU9OKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE5BTUUuICBQcmVzZW50bHkgdGhhdCBvbmx5IG1lYW5zIGRlZmluaW5nIGEgZmxhZyBmb3IgdGhpcyBvcHRpb24uCitBQ19ERUZVTihbX0FNX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfQU1fTUFOR0xFX09QVElPTihbJDFdKSwgMSldKQorCisjIF9BTV9TRVRfT1BUSU9OUyhPUFRJT05TKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9QVElPTlMgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBBdXRvbWFrZSBvcHRpb25zLgorQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OU10sCitbQUNfRk9SRUFDSChbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKKworIyBfQU1fSUZfT1BUSU9OKE9QVElPTiwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCitBQ19ERUZVTihbX0FNX0lGX09QVElPTl0sCitbbTRfaWZzZXQoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFskMl0sIFskM10pXSkKKworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA0CisKKyMgQU1fU0FOSVRZX0NIRUNLCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX1NBTklUWV9DSEVDS10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmVdKQorIyBKdXN0IGluIGNhc2UKK3NsZWVwIDEKK2VjaG8gdGltZXN0YW1wID4gY29uZnRlc3QuZmlsZQorIyBEbyBgc2V0JyBpbiBhIHN1YnNoZWxsIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIGN1cnJlbnQgc2hlbGwncworIyBhcmd1bWVudHMuICBNdXN0IHRyeSAtTCBmaXJzdCBpbiBjYXNlIGNvbmZpZ3VyZSBpcyBhY3R1YWxseSBhCisjIHN5bWxpbms7IHNvbWUgc3lzdGVtcyBwbGF5IHdlaXJkIGdhbWVzIHdpdGggdGhlIG1vZCB0aW1lIG9mIHN5bWxpbmtzCisjIChlZyBGcmVlQlNEIHJldHVybnMgdGhlIG1vZCB0aW1lIG9mIHRoZSBzeW1saW5rJ3MgY29udGFpbmluZworIyBkaXJlY3RvcnkpLgoraWYgKAorICAgc2V0IFggYGxzIC1MdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgIGlmIHRlc3QgIiRbKl0iID0gIlgiOyB0aGVuCisgICAgICAjIC1MIGRpZG4ndCB3b3JrLgorICAgICAgc2V0IFggYGxzIC10ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGVgCisgICBmaQorICAgcm0gLWYgY29uZnRlc3QuZmlsZQorICAgaWYgdGVzdCAiJFsqXSIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSIgXAorICAgICAgJiYgdGVzdCAiJFsqXSIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKworICAgICAgIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorICAgICAgIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorICAgICAgQUNfTVNHX0VSUk9SKFtscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCithbGlhcyBpbiB5b3VyIGVudmlyb25tZW50XSkKKyAgIGZpCisKKyAgIHRlc3QgIiRbMl0iID0gY29uZnRlc3QuZmlsZQorICAgKQordGhlbgorICAgIyBPay4KKyAgIDoKK2Vsc2UKKyAgIEFDX01TR19FUlJPUihbbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9ja10pCitmaQorQUNfTVNHX1JFU1VMVCh5ZXMpXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19JTlNUQUxMX1NUUklQCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPbmUgaXNzdWUgd2l0aCB2ZW5kb3IgYGluc3RhbGwnIChldmVuIEdOVSkgaXMgdGhhdCB5b3UgY2FuJ3QKKyMgc3BlY2lmeSB0aGUgcHJvZ3JhbSB1c2VkIHRvIHN0cmlwIGJpbmFyaWVzLiAgVGhpcyBpcyBlc3BlY2lhbGx5CisjIGFubm95aW5nIGluIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudHMsIHdoZXJlIHRoZSBidWlsZCdzIHN0cmlwCisjIGlzIHVubGlrZWx5IHRvIGhhbmRsZSB0aGUgaG9zdCdzIGJpbmFyaWVzLgorIyBGb3J0dW5hdGVseSBpbnN0YWxsLXNoIHdpbGwgaG9ub3IgYSBTVFJJUFBST0cgdmFyaWFibGUsIHNvIHdlCisjIGFsd2F5cyB1c2UgaW5zdGFsbC1zaCBpbiBgbWFrZSBpbnN0YWxsLXN0cmlwJywgYW5kIGluaXRpYWxpemUKKyMgU1RSSVBQUk9HIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBTVFJJUCB2YXJpYWJsZSAoc2V0IGJ5IHRoZSB1c2VyKS4KK0FDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdLAorW0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCisjIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKKyMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKKyMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKKyMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCitkbmwgRG9uJ3QgdGVzdCBmb3IgJGNyb3NzX2NvbXBpbGluZyA9IHllcywgYmVjYXVzZSBpdCBtaWdodCBiZSBgbWF5YmUnLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KKyAgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLCBbc3RyaXBdLCA6KQorZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCR7U0hFTEx9IFwkKGluc3RhbGxfc2gpIC1jIC1zIgorQUNfU1VCU1QoW0lOU1RBTExfU1RSSVBfUFJPR1JBTV0pXSkKKworIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIF9BTV9QUk9HX1RBUihGT1JNQVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsIGluIGZvcm1hdCBGT1JNQVQuCisjIEZPUk1BVCBzaG91bGQgYmUgb25lIG9mIGB2NycsIGB1c3RhcicsIG9yIGBwYXgnLgorIworIyBTdWJzdGl0dXRlIGEgdmFyaWFibGUgJChhbV9fdGFyKSB0aGF0IGlzIGEgY29tbWFuZAorIyB3cml0aW5nIHRvIHN0ZG91dCBhIEZPUk1BVC10YXJiYWxsIGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQorIyAkdGFyZGlyLgorIyAgICAgdGFyZGlyPWRpcmVjdG9yeSAmJiAkKGFtX190YXIpID4gcmVzdWx0LnRhcgorIworIyBTdWJzdGl0dXRlIGEgdmFyaWFibGUgJChhbV9fdW50YXIpIHRoYXQgZXh0cmFjdCBzdWNoCisjIGEgdGFyYmFsbCByZWFkIGZyb20gc3RkaW4uCisjICAgICAkKGFtX191bnRhcikgPCByZXN1bHQudGFyCitBQ19ERUZVTihbX0FNX1BST0dfVEFSXSwKK1sjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCitBTV9NSVNTSU5HX1BST0coW0FNVEFSXSwgW3Rhcl0pCittNF9pZihbJDFdLCBbdjddLAorICAgICBbYW1fX3Rhcj0nJHtBTVRBUn0gY2hvZiAtICIkJHRhcmRpciInOyBhbV9fdW50YXI9JyR7QU1UQVJ9IHhmIC0nXSwKKyAgICAgW200X2Nhc2UoWyQxXSwgW3VzdGFyXSwsIFtwYXhdLCwKKyAgICAgICAgICAgICAgW200X2ZhdGFsKFtVbmtub3duIHRhciBmb3JtYXRdKV0pCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjcmVhdGUgYSAkMSB0YXIgYXJjaGl2ZV0pCisjIExvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCitfYW1fdG9vbHM9J2dudXRhciBtNF9pZihbJDFdLCBbdXN0YXJdLCBbcGxhaW50YXJdKSBwYXggY3BpbyBub25lJworX2FtX3Rvb2xzPSR7YW1fY3ZfcHJvZ190YXJfJDEtJF9hbV90b29sc30KKyMgRG8gbm90IGZvbGQgdGhlIGFib3ZlIHR3byBsaW5lIGludG8gb25lLCBiZWNhdXNlIFRydTY0IHNoIGFuZAorIyBTb2xhcmlzIHNoIHdpbGwgbm90IGdyb2sgc3BhY2VzIGluIHRoZSByaHMgb2YgYC0nLgorZm9yIF9hbV90b29sIGluICRfYW1fdG9vbHMKK2RvCisgIGNhc2UgJF9hbV90b29sIGluCisgIGdudXRhcikKKyAgICBmb3IgX2FtX3RhciBpbiB0YXIgZ251dGFyIGd0YXI7CisgICAgZG8KKyAgICAgIEFNX1JVTl9MT0coWyRfYW1fdGFyIC0tdmVyc2lvbl0pICYmIGJyZWFrCisgICAgZG9uZQorICAgIGFtX190YXI9IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJCR0YXJkaXIiJworICAgIGFtX190YXJfPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiR0YXJkaXIiJworICAgIGFtX191bnRhcj0iJF9hbV90YXIgLXhmIC0iCisgICAgOzsKKyAgcGxhaW50YXIpCisgICAgIyBNdXN0IHNraXAgR05VIHRhcjogaWYgaXQgZG9lcyBub3Qgc3VwcG9ydCAtLWZvcm1hdD0gaXQgZG9lc24ndCBjcmVhdGUKKyAgICAjIHVzdGFyIHRhcmJhbGwgZWl0aGVyLgorICAgICh0YXIgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjEgJiYgY29udGludWUKKyAgICBhbV9fdGFyPSd0YXIgY2hmIC0gIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0ndGFyIGNoZiAtICIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9J3RhciB4ZiAtJworICAgIDs7CisgIHBheCkKKyAgICBhbV9fdGFyPSdwYXggLUwgLXggJDEgLXcgIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0ncGF4IC1MIC14ICQxIC13ICIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9J3BheCAtcicKKyAgICA7OworICBjcGlvKQorICAgIGFtX190YXI9J2ZpbmQgIiQkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgIGFtX190YXJfPSdmaW5kICIkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgIGFtX191bnRhcj0nY3BpbyAtaSAtSCAkMSAtZCcKKyAgICA7OworICBub25lKQorICAgIGFtX190YXI9ZmFsc2UKKyAgICBhbV9fdGFyXz1mYWxzZQorICAgIGFtX191bnRhcj1mYWxzZQorICAgIDs7CisgIGVzYWMKKworICAjIElmIHRoZSB2YWx1ZSB3YXMgY2FjaGVkLCBzdG9wIG5vdy4gIFdlIGp1c3Qgd2FudGVkIHRvIGhhdmUgYW1fX3RhcgorICAjIGFuZCBhbV9fdW50YXIgc2V0LgorICB0ZXN0IC1uICIke2FtX2N2X3Byb2dfdGFyXyQxfSIgJiYgYnJlYWsKKworICAjIHRhci91bnRhciBhIGR1bW15IGRpcmVjdG9yeSwgYW5kIHN0b3AgaWYgdGhlIGNvbW1hbmQgd29ya3MKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgZWNobyBHcmVwTWUgPiBjb25mdGVzdC5kaXIvZmlsZQorICBBTV9SVU5fTE9HKFt0YXJkaXI9Y29uZnRlc3QuZGlyICYmIGV2YWwgJGFtX190YXJfID5jb25mdGVzdC50YXJdKQorICBybSAtcmYgY29uZnRlc3QuZGlyCisgIGlmIHRlc3QgLXMgY29uZnRlc3QudGFyOyB0aGVuCisgICAgQU1fUlVOX0xPRyhbJGFtX191bnRhciA8Y29uZnRlc3QudGFyXSkKKyAgICBncmVwIEdyZXBNZSBjb25mdGVzdC5kaXIvZmlsZSA+L2Rldi9udWxsIDI+JjEgJiYgYnJlYWsKKyAgZmkKK2RvbmUKK3JtIC1yZiBjb25mdGVzdC5kaXIKKworQUNfQ0FDSEVfVkFMKFthbV9jdl9wcm9nX3Rhcl8kMV0sIFthbV9jdl9wcm9nX3Rhcl8kMT0kX2FtX3Rvb2xdKQorQUNfTVNHX1JFU1VMVChbJGFtX2N2X3Byb2dfdGFyXyQxXSldKQorQUNfU1VCU1QoW2FtX190YXJdKQorQUNfU1VCU1QoW2FtX191bnRhcl0pCitdKSAjIF9BTV9QUk9HX1RBUgorCittNF9pbmNsdWRlKFttNC9jdXJsLWNvbXBpbGVycy5tNF0pCittNF9pbmNsdWRlKFttNC9jdXJsLWNvbmZvcHRzLm00XSkKK200X2luY2x1ZGUoW200L2N1cmwtZnVuY3Rpb25zLm00XSkKK200X2luY2x1ZGUoW200L2N1cmwtb3BlbnNzbC5tNF0pCittNF9pbmNsdWRlKFttNC9jdXJsLW92ZXJyaWRlLm00XSkKK200X2luY2x1ZGUoW200L2N1cmwtcmVlbnRyYW50Lm00XSkKK200X2luY2x1ZGUoW200L2N1cmwtc3lzdGVtLm00XSkKK200X2luY2x1ZGUoW200L2xpYnRvb2wubTRdKQorbTRfaW5jbHVkZShbbTQvbHRvcHRpb25zLm00XSkKK200X2luY2x1ZGUoW200L2x0c3VnYXIubTRdKQorbTRfaW5jbHVkZShbbTQvbHR2ZXJzaW9uLm00XSkKK200X2luY2x1ZGUoW200L2x0fm9ic29sZXRlLm00XSkKK200X2luY2x1ZGUoW200L3hjLXRyYW5zbGl0Lm00XSkKK200X2luY2x1ZGUoW200L3p6NTAteGMtb3ZyLm00XSkKK200X2luY2x1ZGUoW2FjaW5jbHVkZS5tNF0pCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9idWlsZGNvbmYgYi9jdXJsLTcuMjUuMC9idWlsZGNvbmYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGE1OTZmYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2J1aWxkY29uZgpAQCAtMCwwICsxLDQ2NCBAQAorIyEvYmluL3NoCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGRpZSBwcmludHMgYXJndW1lbnQgc3RyaW5nIHRvIHN0ZG91dCBhbmQgZXhpdHMgdGhpcyBzaGVsbCBzY3JpcHQuCisjCitkaWUoKXsKKyAgZWNobyAiYnVpbGRjb25mOiAkQCIKKyAgZXhpdCAxCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaW5kdG9vbCB3b3JrcyBhcyAnd2hpY2gnIGJ1dCB3ZSB1c2UgYSBkaWZmZXJlbnQgbmFtZSB0byBtYWtlIGl0IG1vcmUKKyMgb2J2aW91cyB3ZSBhcmVuJ3QgdXNpbmcgJ3doaWNoJyEgOy0pCisjCitmaW5kdG9vbCgpeworICBmaWxlPSIkMSIKKworICBpZiB7IGVjaG8gIiRmaWxlIiB8IGdyZXAgIi8iID4vZGV2L251bGwgMj4mMTsgfSB0aGVuCisgICAgIyB3aGVuIGZpbGUgaXMgZ2l2ZW4gd2l0aCBhIHBhdGggY2hlY2sgaXQgZmlyc3QKKyAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKyAgICAgIGVjaG8gIiRmaWxlIgorICAgICAgcmV0dXJuCisgICAgZmkKKyAgZmkKKworICBvbGRfSUZTPSRJRlM7IElGUz0nOicKKyAgZm9yIHBhdGggaW4gJFBBVEgKKyAgZG8KKyAgICBJRlM9JG9sZF9JRlMKKyAgICAjIGVjaG8gImNoZWNrcyBmb3IgJGZpbGUgaW4gJHBhdGgiID4mMgorICAgIGlmIHRlc3QgLWYgIiRwYXRoLyRmaWxlIjsgdGhlbgorICAgICAgZWNobyAiJHBhdGgvJGZpbGUiCisgICAgICByZXR1cm4KKyAgICBmaQorICBkb25lCisgIElGUz0kb2xkX0lGUworfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcmVtb3ZldGhpcygpIHJlbW92ZXMgYWxsIGZpbGVzIGFuZCBzdWJkaXJlY3RvcmllcyB3aXRoIHRoZSBnaXZlbiBuYW1lLAorIyBpbnNpZGUgYW5kIGJlbG93IHRoZSBjdXJyZW50IHN1YmRpcmVjdG9yeSBhdCBpbnZvY2F0aW9uIHRpbWUuCisjCityZW1vdmV0aGlzKCl7CisgIGlmIHRlc3QgIiQjIiA9ICIxIjsgdGhlbgorICAgIGZpbmQgLiAtZGVwdGggLW5hbWUgJDEgLXByaW50ID4gYnVpbGRjb25mLnRtcC4kJAorICAgIHdoaWxlIHJlYWQgZmRuYW1lCisgICAgZG8KKyAgICAgIGlmIHRlc3QgLWYgIiRmZG5hbWUiOyB0aGVuCisgICAgICAgIHJtIC1mICIkZmRuYW1lIgorICAgICAgZWxpZiB0ZXN0IC1kICIkZmRuYW1lIjsgdGhlbgorICAgICAgICBybSAtZiAtciAiJGZkbmFtZSIKKyAgICAgIGZpCisgICAgZG9uZSA8IGJ1aWxkY29uZi50bXAuJCQKKyAgICBybSAtZiBidWlsZGNvbmYudG1wLiQkCisgIGZpCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCBidWlsZGNvbmYgcnVucyBmcm9tIHRoZSBzdWJkaXJlY3Rvcnkgd2hlcmUgY29uZmlndXJlLmFjIGxpdmVzCisjCitpZiB0ZXN0ICEgLWYgY29uZmlndXJlLmFjIHx8CisgIHRlc3QgISAtZiBzcmMvdG9vbF9tYWluLmMgfHwKKyAgdGVzdCAhIC1mIGxpYi91cmxkYXRhLmggfHwKKyAgdGVzdCAhIC1mIGluY2x1ZGUvY3VybC9jdXJsLmggfHwKKyAgdGVzdCAhIC1mIG00L2N1cmwtZnVuY3Rpb25zLm00OyB0aGVuCisgIGVjaG8gIkNhbiBub3QgcnVuIGJ1aWxkY29uZiBmcm9tIG91dHNpZGUgb2YgY3VybCdzIHNvdXJjZSBzdWJkaXJlY3RvcnkhIgorICBlY2hvICJDaGFuZ2UgdG8gdGhlIHN1YmRpcmVjdG9yeSB3aGVyZSBidWlsZGNvbmYgaXMgZm91bmQsIGFuZCB0cnkgYWdhaW4uIgorICBleGl0IDEKK2ZpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBhdXRvY29uZiAyLjU3IG9yIG5ld2VyLiBVbnBhdGNoZWQgdmVyc2lvbiAyLjY3IGRvZXMgbm90IGdlbmVyYXRlIHByb3BlcgorIyBjb25maWd1cmUgc2NyaXB0LiBVbnBhdGNoZWQgdmVyc2lvbiAyLjY4IGlzIHNpbXBseSB1bnVzYWJsZSwgd2Ugc2hvdWxkCisjIGRpc2FsbG93IDIuNjggdXNhZ2UuCisjCituZWVkX2F1dG9jb25mPSIyLjU3IgorYWNfdmVyc2lvbj1gJHtBVVRPQ09ORjotYXV0b2NvbmZ9IC0tdmVyc2lvbiAyPi9kZXYvbnVsbHxoZWFkIC1uIDF8IHNlZCAtZSAncy9eW14wLTldKi8vJyAtZSAncy9bYS16XSogKiQvLydgCitpZiB0ZXN0IC16ICIkYWNfdmVyc2lvbiI7IHRoZW4KKyAgZWNobyAiYnVpbGRjb25mOiBhdXRvY29uZiBub3QgZm91bmQuIgorICBlY2hvICIgICAgICAgICAgICBZb3UgbmVlZCBhdXRvY29uZiB2ZXJzaW9uICRuZWVkX2F1dG9jb25mIG9yIG5ld2VyIGluc3RhbGxlZC4iCisgIGV4aXQgMQorZmkKK29sZF9JRlM9JElGUzsgSUZTPScuJzsgc2V0ICRhY192ZXJzaW9uOyBJRlM9JG9sZF9JRlMKK2lmIHRlc3QgIiQxIiA9ICIyIiAtYSAiJDIiIC1sdCAiNTciIHx8IHRlc3QgIiQxIiAtbHQgIjIiOyB0aGVuCisgIGVjaG8gImJ1aWxkY29uZjogYXV0b2NvbmYgdmVyc2lvbiAkYWNfdmVyc2lvbiBmb3VuZC4iCisgIGVjaG8gIiAgICAgICAgICAgIFlvdSBuZWVkIGF1dG9jb25mIHZlcnNpb24gJG5lZWRfYXV0b2NvbmYgb3IgbmV3ZXIgaW5zdGFsbGVkLiIKKyAgZWNobyAiICAgICAgICAgICAgSWYgeW91IGhhdmUgYSBzdWZmaWNpZW50IGF1dG9jb25mIGluc3RhbGxlZCwgYnV0IGl0IgorICBlY2hvICIgICAgICAgICAgICBpcyBub3QgbmFtZWQgJ2F1dG9jb25mJywgdGhlbiB0cnkgc2V0dGluZyB0aGUiCisgIGVjaG8gIiAgICAgICAgICAgIEFVVE9DT05GIGVudmlyb25tZW50IHZhcmlhYmxlLiIKKyAgZXhpdCAxCitmaQorCitpZiB0ZXN0ICIkMSIgPSAiMiIgLWEgIiQyIiAtZXEgIjY3IjsgdGhlbgorICBlY2hvICJidWlsZGNvbmY6IGF1dG9jb25mIHZlcnNpb24gJGFjX3ZlcnNpb24gKEJBRCkiCisgIGVjaG8gIiAgICAgICAgICAgIFVucGF0Y2hlZCB2ZXJzaW9uIGdlbmVyYXRlcyBicm9rZW4gY29uZmlndXJlIHNjcmlwdC4iCitlbGlmIHRlc3QgIiQxIiA9ICIyIiAtYSAiJDIiIC1lcSAiNjgiOyB0aGVuCisgIGVjaG8gImJ1aWxkY29uZjogYXV0b2NvbmYgdmVyc2lvbiAkYWNfdmVyc2lvbiAoQkFEKSIKKyAgZWNobyAiICAgICAgICAgICAgVW5wYXRjaGVkIHZlcnNpb24gZ2VuZXJhdGVzIHVudXNhYmxlIGNvbmZpZ3VyZSBzY3JpcHQuIgorZWxzZQorICBlY2hvICJidWlsZGNvbmY6IGF1dG9jb25mIHZlcnNpb24gJGFjX3ZlcnNpb24gKG9rKSIKK2ZpCisKK2FtNHRlX3ZlcnNpb249YCR7QVVUT000VEU6LWF1dG9tNHRlfSAtLXZlcnNpb24gMj4vZGV2L251bGx8aGVhZCAtbiAxfCBzZWQgLWUgJ3MvYXV0b200dGVcKC4qXCkvXDEvJyAtZSAncy9eW14wLTldKi8vJyAtZSAncy9bYS16XSogKiQvLydgCitpZiB0ZXN0IC16ICIkYW00dGVfdmVyc2lvbiI7IHRoZW4KKyAgZWNobyAiYnVpbGRjb25mOiBhdXRvbTR0ZSBub3QgZm91bmQuIFdlaXJkIGF1dG9jb25mIGluc3RhbGxhdGlvbiEiCisgIGV4aXQgMQorZmkKK2lmIHRlc3QgIiRhbTR0ZV92ZXJzaW9uIiA9ICIkYWNfdmVyc2lvbiI7IHRoZW4KKyAgZWNobyAiYnVpbGRjb25mOiBhdXRvbTR0ZSB2ZXJzaW9uICRhbTR0ZV92ZXJzaW9uIChvaykiCitlbHNlCisgIGVjaG8gImJ1aWxkY29uZjogYXV0b200dGUgdmVyc2lvbiAkYW00dGVfdmVyc2lvbiAoRVJST1I6IGRvZXMgbm90IG1hdGNoIGF1dG9jb25mIHZlcnNpb24pIgorICBleGl0IDEKK2ZpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBhdXRvaGVhZGVyIDIuNTAgb3IgbmV3ZXIKKyMKK2FoX3ZlcnNpb249YCR7QVVUT0hFQURFUjotYXV0b2hlYWRlcn0gLS12ZXJzaW9uIDI+L2Rldi9udWxsfGhlYWQgLW4gMXwgc2VkIC1lICdzL15bXjAtOV0qLy8nIC1lICdzL1thLXpdKiAqJC8vJ2AKK2lmIHRlc3QgLXogIiRhaF92ZXJzaW9uIjsgdGhlbgorICBlY2hvICJidWlsZGNvbmY6IGF1dG9oZWFkZXIgbm90IGZvdW5kLiIKKyAgZWNobyAiICAgICAgICAgICAgWW91IG5lZWQgYXV0b2hlYWRlciB2ZXJzaW9uIDIuNTAgb3IgbmV3ZXIgaW5zdGFsbGVkLiIKKyAgZXhpdCAxCitmaQorb2xkX0lGUz0kSUZTOyBJRlM9Jy4nOyBzZXQgJGFoX3ZlcnNpb247IElGUz0kb2xkX0lGUworaWYgdGVzdCAiJDEiID0gIjIiIC1hICIkMiIgLWx0ICI1MCIgfHwgdGVzdCAiJDEiIC1sdCAiMiI7IHRoZW4KKyAgZWNobyAiYnVpbGRjb25mOiBhdXRvaGVhZGVyIHZlcnNpb24gJGFoX3ZlcnNpb24gZm91bmQuIgorICBlY2hvICIgICAgICAgICAgICBZb3UgbmVlZCBhdXRvaGVhZGVyIHZlcnNpb24gMi41MCBvciBuZXdlciBpbnN0YWxsZWQuIgorICBlY2hvICIgICAgICAgICAgICBJZiB5b3UgaGF2ZSBhIHN1ZmZpY2llbnQgYXV0b2hlYWRlciBpbnN0YWxsZWQsIGJ1dCBpdCIKKyAgZWNobyAiICAgICAgICAgICAgaXMgbm90IG5hbWVkICdhdXRvaGVhZGVyJywgdGhlbiB0cnkgc2V0dGluZyB0aGUiCisgIGVjaG8gIiAgICAgICAgICAgIEFVVE9IRUFERVIgZW52aXJvbm1lbnQgdmFyaWFibGUuIgorICBleGl0IDEKK2ZpCisKK2VjaG8gImJ1aWxkY29uZjogYXV0b2hlYWRlciB2ZXJzaW9uICRhaF92ZXJzaW9uIChvaykiCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBhdXRvbWFrZSAxLjcgb3IgbmV3ZXIKKyMKK25lZWRfYXV0b21ha2U9IjEuNyIKK2FtX3ZlcnNpb249YCR7QVVUT01BS0U6LWF1dG9tYWtlfSAtLXZlcnNpb24gMj4vZGV2L251bGx8aGVhZCAtbiAxfCBzZWQgLWUgJ3MvXi4qIFwoWzAtOV1cKS9cMS8nIC1lICdzL1thLXpdKiAqJC8vJyAtZSAncy9cKC4qXClcKC1wLipcKS9cMS8nYAoraWYgdGVzdCAteiAiJGFtX3ZlcnNpb24iOyB0aGVuCisgIGVjaG8gImJ1aWxkY29uZjogYXV0b21ha2Ugbm90IGZvdW5kLiIKKyAgZWNobyAiICAgICAgICAgICAgWW91IG5lZWQgYXV0b21ha2UgdmVyc2lvbiAkbmVlZF9hdXRvbWFrZSBvciBuZXdlciBpbnN0YWxsZWQuIgorICBleGl0IDEKK2ZpCitvbGRfSUZTPSRJRlM7IElGUz0nLic7IHNldCAkYW1fdmVyc2lvbjsgSUZTPSRvbGRfSUZTCitpZiB0ZXN0ICIkMSIgPSAiMSIgLWEgIiQyIiAtbHQgIjciIHx8IHRlc3QgIiQxIiAtbHQgIjEiOyB0aGVuCisgIGVjaG8gImJ1aWxkY29uZjogYXV0b21ha2UgdmVyc2lvbiAkYW1fdmVyc2lvbiBmb3VuZC4iCisgIGVjaG8gIiAgICAgICAgICAgIFlvdSBuZWVkIGF1dG9tYWtlIHZlcnNpb24gJG5lZWRfYXV0b21ha2Ugb3IgbmV3ZXIgaW5zdGFsbGVkLiIKKyAgZWNobyAiICAgICAgICAgICAgSWYgeW91IGhhdmUgYSBzdWZmaWNpZW50IGF1dG9tYWtlIGluc3RhbGxlZCwgYnV0IGl0IgorICBlY2hvICIgICAgICAgICAgICBpcyBub3QgbmFtZWQgJ2F1dG9tYWtlJywgdGhlbiB0cnkgc2V0dGluZyB0aGUiCisgIGVjaG8gIiAgICAgICAgICAgIEFVVE9NQUtFIGVudmlyb25tZW50IHZhcmlhYmxlLiIKKyAgZXhpdCAxCitmaQorCitlY2hvICJidWlsZGNvbmY6IGF1dG9tYWtlIHZlcnNpb24gJGFtX3ZlcnNpb24gKG9rKSIKKworYWNsb2NfdmVyc2lvbj1gJHtBQ0xPQ0FMOi1hY2xvY2FsfSAtLXZlcnNpb24gMj4vZGV2L251bGx8aGVhZCAtbiAxfCBzZWQgLWUgJ3MvXi4qIFwoWzAtOV1cKS9cMS8nIC1lICdzL1thLXpdKiAqJC8vJyAtZSAncy9cKC4qXClcKC1wLipcKS9cMS8nYAoraWYgdGVzdCAteiAiJGFjbG9jX3ZlcnNpb24iOyB0aGVuCisgIGVjaG8gImJ1aWxkY29uZjogYWNsb2NhbCBub3QgZm91bmQuIFdlaXJkIGF1dG9tYWtlIGluc3RhbGxhdGlvbiEiCisgIGV4aXQgMQorZmkKK2lmIHRlc3QgIiRhY2xvY192ZXJzaW9uIiA9ICIkYW1fdmVyc2lvbiI7IHRoZW4KKyAgZWNobyAiYnVpbGRjb25mOiBhY2xvY2FsIHZlcnNpb24gJGFjbG9jX3ZlcnNpb24gKG9rKSIKK2Vsc2UKKyAgZWNobyAiYnVpbGRjb25mOiBhY2xvY2FsIHZlcnNpb24gJGFjbG9jX3ZlcnNpb24gKEVSUk9SOiBkb2VzIG5vdCBtYXRjaCBhdXRvbWFrZSB2ZXJzaW9uKSIKKyAgZXhpdCAxCitmaQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR05VIGxpYnRvb2wgcHJlbGltaW5hcnkgY2hlY2sKKyMKK3dhbnRfbHRfbWFqb3I9MQord2FudF9sdF9taW5vcj00Cit3YW50X2x0X3BhdGNoPTIKK3dhbnRfbHRfdmVyc2lvbj0xLjQuMgorCisjIFRoaXMgYXBwcm9hY2ggdGhhdCB0cmllcyAnZ2xpYnRvb2wnIGZpcnN0IGlzIGludGVuZGVkIGZvciBzeXN0ZW1zIHRoYXQKKyMgaGF2ZSBHTlUgbGlidG9vbCBuYW1lZCBhcyAnZ2xpYnRvb2wnIGFuZCBsaWJ0b29sIG5vdCBiZWluZyBHTlUncy4KKworbGlidG9vbD1gZmluZHRvb2wgZ2xpYnRvb2wgMj4vZGV2L251bGxgCitpZiB0ZXN0ICEgLXggIiRsaWJ0b29sIjsgdGhlbgorICBsaWJ0b29sPWBmaW5kdG9vbCAke0xJQlRPT0w6LWxpYnRvb2x9YAorZmkKK2lmIHRlc3QgLXogIiRsaWJ0b29sIjsgdGhlbgorICBlY2hvICJidWlsZGNvbmY6IGxpYnRvb2wgbm90IGZvdW5kLiIKKyAgZWNobyAiICAgICAgICAgICAgWW91IG5lZWQgR05VIGxpYnRvb2wgJHdhbnRfbHRfdmVyc2lvbiBvciBuZXdlciBpbnN0YWxsZWQuIgorICBleGl0IDEKK2ZpCisKK2x0X3B2ZXI9YCRsaWJ0b29sIC0tdmVyc2lvbiAyPi9kZXYvbnVsbHxoZWFkIC1uIDFgCitsdF9xdmVyPWBlY2hvICRsdF9wdmVyfHNlZCAtZSAicy8oW14pXSopLy9nIiAtZSAicy9eW14wLTldKi8vZyJgCitsdF92ZXJzaW9uPWBlY2hvICRsdF9xdmVyfHNlZCAtZSAicy9bLSBdLiovLyIgLWUgInMvXChbYS16XSpcKSQvLyJgCitpZiB0ZXN0IC16ICIkbHRfdmVyc2lvbiI7IHRoZW4KKyAgZWNobyAiYnVpbGRjb25mOiBsaWJ0b29sIG5vdCBmb3VuZC4iCisgIGVjaG8gIiAgICAgICAgICAgIFlvdSBuZWVkIEdOVSBsaWJ0b29sICR3YW50X2x0X3ZlcnNpb24gb3IgbmV3ZXIgaW5zdGFsbGVkLiIKKyAgZXhpdCAxCitmaQorb2xkX0lGUz0kSUZTOyBJRlM9Jy4nOyBzZXQgJGx0X3ZlcnNpb247IElGUz0kb2xkX0lGUworbHRfbWFqb3I9JDEKK2x0X21pbm9yPSQyCitsdF9wYXRjaD0kMworCitpZiB0ZXN0IC16ICIkbHRfbWFqb3IiOyB0aGVuCisgIGx0X3N0YXR1cz0iYmFkIgorZWxpZiB0ZXN0ICIkbHRfbWFqb3IiIC1ndCAiJHdhbnRfbHRfbWFqb3IiOyB0aGVuCisgIGx0X3N0YXR1cz0iZ29vZCIKK2VsaWYgdGVzdCAiJGx0X21ham9yIiAtbHQgIiR3YW50X2x0X21ham9yIjsgdGhlbgorICBsdF9zdGF0dXM9ImJhZCIKK2VsaWYgdGVzdCAteiAiJGx0X21pbm9yIjsgdGhlbgorICBsdF9zdGF0dXM9ImJhZCIKK2VsaWYgdGVzdCAiJGx0X21pbm9yIiAtZ3QgIiR3YW50X2x0X21pbm9yIjsgdGhlbgorICBsdF9zdGF0dXM9Imdvb2QiCitlbGlmIHRlc3QgIiRsdF9taW5vciIgLWx0ICIkd2FudF9sdF9taW5vciI7IHRoZW4KKyAgbHRfc3RhdHVzPSJiYWQiCitlbGlmIHRlc3QgLXogIiRsdF9wYXRjaCI7IHRoZW4KKyAgbHRfc3RhdHVzPSJiYWQiCitlbGlmIHRlc3QgIiRsdF9wYXRjaCIgLWd0ICIkd2FudF9sdF9wYXRjaCI7IHRoZW4KKyAgbHRfc3RhdHVzPSJnb29kIgorZWxpZiB0ZXN0ICIkbHRfcGF0Y2giIC1sdCAiJHdhbnRfbHRfcGF0Y2giOyB0aGVuCisgIGx0X3N0YXR1cz0iYmFkIgorZWxzZQorICBsdF9zdGF0dXM9Imdvb2QiCitmaQoraWYgdGVzdCAiJGx0X3N0YXR1cyIgIT0gImdvb2QiOyB0aGVuCisgIGVjaG8gImJ1aWxkY29uZjogbGlidG9vbCB2ZXJzaW9uICRsdF92ZXJzaW9uIGZvdW5kLiIKKyAgZWNobyAiICAgICAgICAgICAgWW91IG5lZWQgR05VIGxpYnRvb2wgJHdhbnRfbHRfdmVyc2lvbiBvciBuZXdlciBpbnN0YWxsZWQuIgorICBleGl0IDEKK2ZpCisKK2VjaG8gImJ1aWxkY29uZjogbGlidG9vbCB2ZXJzaW9uICRsdF92ZXJzaW9uIChvaykiCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHTlUgbGlidG9vbGl6ZSBjaGVjaworIworaWYgdGVzdCAteiAiJExJQlRPT0xJWkUiOyB0aGVuCisgICMgdXNlIChnKWxpYnRvb2xpemUgZnJvbSBzYW1lIGxvY2F0aW9uIGFzIChnKWxpYnRvb2wKKyAgbGlidG9vbGl6ZT0iJHtsaWJ0b29sfWl6ZSIKK2Vsc2UKKyAgbGlidG9vbGl6ZT1gZmluZHRvb2wgJExJQlRPT0xJWkVgCitmaQoraWYgdGVzdCAhIC1mICIkbGlidG9vbGl6ZSI7IHRoZW4KKyAgZWNobyAiYnVpbGRjb25mOiBsaWJ0b29saXplIG5vdCBmb3VuZC4iCisgIGVjaG8gIiAgICAgICAgICAgIFlvdSBuZWVkIEdOVSBsaWJ0b29saXplICR3YW50X2x0X3ZlcnNpb24gb3IgbmV3ZXIgaW5zdGFsbGVkLiIKKyAgZXhpdCAxCitmaQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbTQgY2hlY2sKKyMKK200PWAoJHtNNDotbTR9IC0tdmVyc2lvbiB8fCAke000Oi1nbTR9IC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCBoZWFkIC1uIDFgOworbTRfdmVyc2lvbj1gZWNobyAkbTQgfCBzZWQgLWUgJ3MvXi4qIFwoWzAtOV1cKS9cMS8nIC1lICdzL1thLXpdKiAqJC8vJ2AKKworaWYgeyBlY2hvICRtNCB8IGdyZXAgIkdOVSIgPi9kZXYvbnVsbCAyPiYxOyB9IHRoZW4KKyAgZWNobyAiYnVpbGRjb25mOiBHTlUgbTQgdmVyc2lvbiAkbTRfdmVyc2lvbiAob2spIgorZWxzZQorICBpZiB0ZXN0IC16ICIkbTQiOyB0aGVuCisgICAgZWNobyAiYnVpbGRjb25mOiBtNCB2ZXJzaW9uIG5vdCByZWNvZ25pemVkLiBZb3UgbmVlZCBhIEdOVSBtNCBpbnN0YWxsZWQhIgorICBlbHNlCisgICAgZWNobyAiYnVpbGRjb25mOiBtNCB2ZXJzaW9uICRtNCBmb3VuZC4gWW91IG5lZWQgYSBHTlUgbTQgaW5zdGFsbGVkISIKKyAgZmkKKyAgZXhpdCAxCitmaQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcGVybCBjaGVjaworIworUEVSTD1gZmluZHRvb2wgJHtQRVJMOi1wZXJsfWAKK2lmIHRlc3QgLXogIiRQRVJMIjsgdGhlbgorICBlY2hvICJidWlsZGNvbmY6IHBlcmwgbm90IGZvdW5kIgorICBleGl0IDEKK2ZpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZW1vdmUgZmlsZXMgZ2VuZXJhdGVkIG9uIHByZXZpb3VzIGJ1aWxkY29uZi9jb25maWd1cmUgcnVuLgorIworZm9yIGZuYW1lIGluIC5kZXBzIFwKKyAgICAubGlicyBcCisgICAgKi5sYSBcCisgICAgKi5sbyBcCisgICAgKi5hIFwKKyAgICAqLm8gXAorICAgIE1ha2VmaWxlIFwKKyAgICBNYWtlZmlsZS5pbiBcCisgICAgYWNsb2NhbC5tNCBcCisgICAgYWNsb2NhbC5tNC5iYWsgXAorICAgIGFyZXNfYnVpbGQuaCBcCisgICAgYXJlc19jb25maWcuaCBcCisgICAgYXJlc19jb25maWcuaC5pbiBcCisgICAgYXV0b200dGUuY2FjaGUgXAorICAgIGNvbXBpbGUgXAorICAgIGNvbmZpZy5ndWVzcyBcCisgICAgY3VybF9jb25maWcuaCBcCisgICAgY3VybF9jb25maWcuaC5pbiBcCisgICAgY29uZmlnLmxvZyBcCisgICAgY29uZmlnLmx0IFwKKyAgICBjb25maWcuc3RhdHVzIFwKKyAgICBjb25maWcuc3ViIFwKKyAgICBjb25maWd1cmUgXAorICAgIGNvbmZpZ3VyZWhlbHAucG0gXAorICAgIGN1cmwtY29uZmlnIFwKKyAgICBjdXJsYnVpbGQuaCBcCisgICAgZGVwY29tcCBcCisgICAgbGliY2FyZXMucGMgXAorICAgIGxpYmN1cmwucGMgXAorICAgIGxpYnRvb2wgXAorICAgIGxpYnRvb2wubTQgXAorICAgIGxpYnRvb2wubTQudG1wIFwKKyAgICBsdG1haW4uc2ggXAorICAgIGx0b3B0aW9ucy5tNCBcCisgICAgbHRzdWdhci5tNCBcCisgICAgbHR2ZXJzaW9uLm00IFwKKyAgICBsdH5vYnNvbGV0ZS5tNCBcCisgICAgc3RhbXAtaDEgXAorICAgIHN0YW1wLWgyIFwKKyAgICBzdGFtcC1oMyA7IGRvCisgIHJlbW92ZXRoaXMgIiRmbmFtZSIKK2RvbmUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHJ1biB0aGUgY29ycmVjdCBzY3JpcHRzIG5vdworIworCitlY2hvICJidWlsZGNvbmY6IHJ1bm5pbmcgbGlidG9vbGl6ZSIKKyR7bGlidG9vbGl6ZX0gLS1jb3B5IC0tYXV0b21ha2UgLS1mb3JjZSB8fCBkaWUgImxpYnRvb2xpemUgY29tbWFuZCBmYWlsZWQiCisKKyMgV2hlbiB1c2luZyBsaWJ0b29sIDEuNS5YIChYIDwgMjYpIHdlIGNvcHkgbGlidG9vbC5tNCB0byBvdXIgbG9jYWwgbTQKKyMgc3ViZGlyZWN0b3J5IGFuZCB0aGlzIGxvY2FsIGNvcHkgaXMgcGF0Y2hlZCB0byBmaXggc29tZSB3YXJuaW5ncyB0aGF0CisjIGFyZSB0cmlnZ2VyZWQgd2hlbiBydW5uaW5nIGFjbG9jYWwgYW5kIHVzaW5nIGF1dG9jb25mIDIuNjIgb3IgbGF0ZXIuCisKK2lmIHRlc3QgIiRsdF9tYWpvciIgPSAiMSIgJiYgdGVzdCAiJGx0X21pbm9yIiA9ICI1IjsgdGhlbgorICBpZiB0ZXN0IC16ICIkbHRfcGF0Y2giIHx8IHRlc3QgIiRsdF9wYXRjaCIgLWx0ICIyNiI7IHRoZW4KKyAgICBlY2hvICJidWlsZGNvbmY6IGNvcHlpbmcgbGlidG9vbC5tNCB0byBsb2NhbCBtNCBzdWJkaXIiCisgICAgYWNfZGlyPWAke0FDTE9DQUw6LWFjbG9jYWx9IC0tcHJpbnQtYWMtZGlyYAorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci9saWJ0b29sLm00OyB0aGVuCisgICAgICBjcCAtZiAkYWNfZGlyL2xpYnRvb2wubTQgbTQvbGlidG9vbC5tNAorICAgIGVsc2UKKyAgICAgIGVjaG8gImJ1aWxkY29uZjogJGFjX2Rpci9saWJ0b29sLm00IG5vdCBmb3VuZCIKKyAgICBmaQorICAgIGlmIHRlc3QgLWYgbTQvbGlidG9vbC5tNDsgdGhlbgorICAgICAgZWNobyAiYnVpbGRjb25mOiByZW5hbWluZyBzb21lIHZhcmlhYmxlcyBpbiBsb2NhbCBtNC9saWJ0b29sLm00IgorICAgICAgJFBFUkwgLWkudG1wIC1wZSBcCisgICAgICAgICdzL2x0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzL2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzL2c7IFwKKyAgICAgICAgIHMvbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MvbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MvZzsnIFwKKyAgICAgICAgbTQvbGlidG9vbC5tNAorICAgICAgcm0gLWYgbTQvbGlidG9vbC5tNC50bXAKKyAgICBmaQorICBmaQorZmkKKworaWYgdGVzdCAtZiBtNC9saWJ0b29sLm00OyB0aGVuCisgIGVjaG8gImJ1aWxkY29uZjogY29udmVydGluZyBhbGwgbXYgdG8gbXYgLWYgaW4gbG9jYWwgbTQvbGlidG9vbC5tNCIKKyAgJFBFUkwgLWkudG1wIC1wZSAncy9cYm12ICsoW14tXHNdKS9tdiAtZiAkMS9nJyBtNC9saWJ0b29sLm00CisgIHJtIC1mIG00L2xpYnRvb2wubTQudG1wCitmaQorCitlY2hvICJidWlsZGNvbmY6IHJ1bm5pbmcgYWNsb2NhbCIKKyR7QUNMT0NBTDotYWNsb2NhbH0gLUkgbTQgJEFDTE9DQUxfRkxBR1MgfHwgZGllICJhY2xvY2FsIGNvbW1hbmQgZmFpbGVkIgorCitlY2hvICJidWlsZGNvbmY6IGNvbnZlcnRpbmcgYWxsIG12IHRvIG12IC1mIGluIGxvY2FsIGFjbG9jYWwubTQiCiskUEVSTCAtaS5iYWsgLXBlICdzL1xibXYgKyhbXi1cc10pL212IC1mICQxL2cnIGFjbG9jYWwubTQKKworZWNobyAiYnVpbGRjb25mOiBydW5uaW5nIGF1dG9oZWFkZXIiCiske0FVVE9IRUFERVI6LWF1dG9oZWFkZXJ9IHx8IGRpZSAiYXV0b2hlYWRlciBjb21tYW5kIGZhaWxlZCIKKworZWNobyAiYnVpbGRjb25mOiBjcCBsaWIvY3VybF9jb25maWcuaC5pbiBzcmMvY3VybF9jb25maWcuaC5pbiIKK2NwIGxpYi9jdXJsX2NvbmZpZy5oLmluIHNyYy9jdXJsX2NvbmZpZy5oLmluCisKK2VjaG8gImJ1aWxkY29uZjogcnVubmluZyBhdXRvY29uZiIKKyR7QVVUT0NPTkY6LWF1dG9jb25mfSB8fCBkaWUgImF1dG9jb25mIGNvbW1hbmQgZmFpbGVkIgorCitpZiB0ZXN0IC1kIGFyZXM7IHRoZW4KKyAgY2QgYXJlcworICBlY2hvICJidWlsZGNvbmY6IHJ1bm5pbmcgaW4gYXJlcyIKKyAgLi9idWlsZGNvbmYKKyAgY2QgLi4KK2ZpCisKK2VjaG8gImJ1aWxkY29uZjogcnVubmluZyBhdXRvbWFrZSIKKyR7QVVUT01BS0U6LWF1dG9tYWtlfSAtLWFkZC1taXNzaW5nIC0tY29weSB8fCBkaWUgImF1dG9tYWtlIGNvbW1hbmQgZmFpbGVkIgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgR05VIGxpYnRvb2wgY29tcGxlbWVudGFyeSBjaGVjaworIworIyBEZXBlbmRpbmcgb24gdGhlIGxpYnRvb2wgYW5kIGF1dG9tYWtlIHZlcnNpb25zIGJlaW5nIHVzZWQsIGNvbmZpZy5ndWVzcworIyBtaWdodCBub3QgYmUgaW5zdGFsbGVkIGluIHRoZSBzdWJkaXJlY3RvcnkgdW50aWwgYXV0b21ha2UgaGFzIGZpbmlzaGVkLgorIyBTbyB3ZSBjYW4gbm90IGF0dGVtcHQgdG8gdXNlIGl0IHVudGlsIHRoaXMgdmVyeSBsYXN0IGJ1aWxkY29uZiBzdGFnZS4KKyMKK2lmIHRlc3QgISAtZiAuL2NvbmZpZy5ndWVzczsgdGhlbgorICBlY2hvICJidWlsZGNvbmY6IGNvbmZpZy5ndWVzcyBub3QgZm91bmQiCitlbHNlCisgIGJ1aWxkaG9zdD1gLi9jb25maWcuZ3Vlc3MgMj4vZGV2L251bGx8aGVhZCAtbiAxYAorICBjYXNlICRidWlsZGhvc3QgaW4KKyAgICAqLSotZGFyd2luKikKKyAgICAgIG5lZWRfbHRfbWFqb3I9MQorICAgICAgbmVlZF9sdF9taW5vcj01CisgICAgICBuZWVkX2x0X3BhdGNoPTI2CisgICAgICBuZWVkX2x0X2NoZWNrPSJ5ZXMiCisgICAgICA7OworICAgICotKi1ocHV4KikKKyAgICAgIG5lZWRfbHRfbWFqb3I9MQorICAgICAgbmVlZF9sdF9taW5vcj01CisgICAgICBuZWVkX2x0X3BhdGNoPTI0CisgICAgICBuZWVkX2x0X2NoZWNrPSJ5ZXMiCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgISAteiAiJG5lZWRfbHRfY2hlY2siOyB0aGVuCisgICAgaWYgdGVzdCAteiAiJGx0X21ham9yIjsgdGhlbgorICAgICAgbHRfc3RhdHVzPSJiYWQiCisgICAgZWxpZiB0ZXN0ICIkbHRfbWFqb3IiIC1ndCAiJG5lZWRfbHRfbWFqb3IiOyB0aGVuCisgICAgICBsdF9zdGF0dXM9Imdvb2QiCisgICAgZWxpZiB0ZXN0ICIkbHRfbWFqb3IiIC1sdCAiJG5lZWRfbHRfbWFqb3IiOyB0aGVuCisgICAgICBsdF9zdGF0dXM9ImJhZCIKKyAgICBlbGlmIHRlc3QgLXogIiRsdF9taW5vciI7IHRoZW4KKyAgICAgIGx0X3N0YXR1cz0iYmFkIgorICAgIGVsaWYgdGVzdCAiJGx0X21pbm9yIiAtZ3QgIiRuZWVkX2x0X21pbm9yIjsgdGhlbgorICAgICAgbHRfc3RhdHVzPSJnb29kIgorICAgIGVsaWYgdGVzdCAiJGx0X21pbm9yIiAtbHQgIiRuZWVkX2x0X21pbm9yIjsgdGhlbgorICAgICAgbHRfc3RhdHVzPSJiYWQiCisgICAgZWxpZiB0ZXN0IC16ICIkbHRfcGF0Y2giOyB0aGVuCisgICAgICBsdF9zdGF0dXM9ImJhZCIKKyAgICBlbGlmIHRlc3QgIiRsdF9wYXRjaCIgLWd0ICIkbmVlZF9sdF9wYXRjaCI7IHRoZW4KKyAgICAgIGx0X3N0YXR1cz0iZ29vZCIKKyAgICBlbGlmIHRlc3QgIiRsdF9wYXRjaCIgLWx0ICIkbmVlZF9sdF9wYXRjaCI7IHRoZW4KKyAgICAgIGx0X3N0YXR1cz0iYmFkIgorICAgIGVsc2UKKyAgICAgIGx0X3N0YXR1cz0iZ29vZCIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsdF9zdGF0dXMiICE9ICJnb29kIjsgdGhlbgorICAgICAgbmVlZF9sdF92ZXJzaW9uPSIkbmVlZF9sdF9tYWpvci4kbmVlZF9sdF9taW5vci4kbmVlZF9sdF9wYXRjaCIKKyAgICAgIGVjaG8gImJ1aWxkY29uZjogbGlidG9vbCB2ZXJzaW9uICRsdF92ZXJzaW9uIGZvdW5kLiIKKyAgICAgIGVjaG8gIiAgICAgICAgICAgICRidWlsZGhvc3QgcmVxdWlyZXMgR05VIGxpYnRvb2wgJG5lZWRfbHRfdmVyc2lvbiBvciBuZXdlciBpbnN0YWxsZWQuIgorICAgICAgcm0gLWYgY29uZmlndXJlCisgICAgICBleGl0IDEKKyAgICBmaQorICBmaQorZmkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4KKyMKK2VjaG8gImJ1aWxkY29uZjogT0siCitleGl0IDAKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2NvbXBpbGUgYi9jdXJsLTcuMjUuMC9jb21waWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiMWQyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9jb21waWxlCkBAIC0wLDAgKzEsMTQyIEBACisjISAvYmluL3NoCisjIFdyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgorCitzY3JpcHR2ZXJzaW9uPTIwMDUtMDUtMTQuMjIKKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgVG9tIFRyb21leSA8dHJvbWV5QGN5Z251cy5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogY29tcGlsZSBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQorCitXcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgYC1jIC1vJy4KK1JlbW92ZSBgLW8gZGVzdC5vJyBmcm9tIEFSR1MsIHJ1biBQUk9HUkFNIHdpdGggdGhlIHJlbWFpbmluZworYXJndW1lbnRzLCBhbmQgcmVuYW1lIHRoZSBvdXRwdXQgYXMgZXhwZWN0ZWQuCisKK0lmIHlvdSBhcmUgdHJ5aW5nIHRvIGJ1aWxkIGEgd2hvbGUgcGFja2FnZSB0aGlzIGlzIG5vdCB0aGUKK3JpZ2h0IHNjcmlwdCB0byBydW46IHBsZWFzZSBzdGFydCBieSByZWFkaW5nIHRoZSBmaWxlIGBJTlNUQUxMJy4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiY29tcGlsZSAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworb2ZpbGU9CitjZmlsZT0KK2VhdD0KKworZm9yIGFyZworZG8KKyAgaWYgdGVzdCAtbiAiJGVhdCI7IHRoZW4KKyAgICBlYXQ9CisgIGVsc2UKKyAgICBjYXNlICQxIGluCisgICAgICAtbykKKwkjIGNvbmZpZ3VyZSBtaWdodCBjaG9vc2UgdG8gcnVuIGNvbXBpbGUgYXMgYGNvbXBpbGUgY2MgLW8gZm9vIGZvby5jJy4KKwkjIFNvIHdlIHN0cmlwIGAtbyBhcmcnIG9ubHkgaWYgYXJnIGlzIGFuIG9iamVjdC4KKwllYXQ9MQorCWNhc2UgJDIgaW4KKwkgICoubyB8ICoub2JqKQorCSAgICBvZmlsZT0kMgorCSAgICA7OworCSAgKikKKwkgICAgc2V0IHggIiRAIiAtbyAiJDIiCisJICAgIHNoaWZ0CisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqLmMpCisJY2ZpbGU9JDEKKwlzZXQgeCAiJEAiICIkMSIKKwlzaGlmdAorCTs7CisgICAgICAqKQorCXNldCB4ICIkQCIgIiQxIgorCXNoaWZ0CisJOzsKKyAgICBlc2FjCisgIGZpCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgLXogIiRvZmlsZSIgfHwgdGVzdCAteiAiJGNmaWxlIjsgdGhlbgorICAjIElmIG5vIGAtbycgb3B0aW9uIHdhcyBzZWVuIHRoZW4gd2UgbWlnaHQgaGF2ZSBiZWVuIGludm9rZWQgZnJvbSBhCisgICMgcGF0dGVybiBydWxlIHdoZXJlIHdlIGRvbid0IG5lZWQgb25lLiAgVGhhdCBpcyBvayAtLSB0aGlzIGlzIGEKKyAgIyBub3JtYWwgY29tcGlsYXRpb24gdGhhdCB0aGUgbG9zaW5nIGNvbXBpbGVyIGNhbiBoYW5kbGUuICBJZiBubworICAjIGAuYycgZmlsZSB3YXMgc2VlbiB0aGVuIHdlIGFyZSBwcm9iYWJseSBsaW5raW5nLiAgVGhhdCBpcyBhbHNvCisgICMgb2suCisgIGV4ZWMgIiRAIgorZmkKKworIyBOYW1lIG9mIGZpbGUgd2UgZXhwZWN0IGNvbXBpbGVyIHRvIGNyZWF0ZS4KK2NvZmlsZT1gZWNobyAiJGNmaWxlIiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wuYyQvLm8vJ2AKKworIyBDcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5LgorIyBOb3RlOiB1c2UgYFsvLi1dJyBoZXJlIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0aGUgc2FtZSBuYW1lCisjIHRoYXQgd2UgYXJlIHVzaW5nIGZvciB0aGUgLm8gZmlsZS4gIEFsc28sIGJhc2UgdGhlIG5hbWUgb24gdGhlIGV4cGVjdGVkCisjIG9iamVjdCBmaWxlIG5hbWUsIHNpbmNlIHRoYXQgaXMgd2hhdCBtYXR0ZXJzIHdpdGggYSBwYXJhbGxlbCBidWlsZC4KK2xvY2tkaXI9YGVjaG8gIiRjb2ZpbGUiIHwgc2VkIC1lICdzfFsvLi1dfF98ZydgLmQKK3doaWxlIHRydWU7IGRvCisgIGlmIG1rZGlyICIkbG9ja2RpciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYnJlYWsKKyAgZmkKKyAgc2xlZXAgMQorZG9uZQorIyBGSVhNRTogcmFjZSBjb25kaXRpb24gaGVyZSBpZiB1c2VyIGtpbGxzIGJldHdlZW4gbWtkaXIgYW5kIHRyYXAuCit0cmFwICJybWRpciAnJGxvY2tkaXInOyBleGl0IDEiIDEgMiAxNQorCisjIFJ1biB0aGUgY29tcGlsZS4KKyIkQCIKK3JldD0kPworCitpZiB0ZXN0IC1mICIkY29maWxlIjsgdGhlbgorICBtdiAiJGNvZmlsZSIgIiRvZmlsZSIKK2VsaWYgdGVzdCAtZiAiJHtjb2ZpbGV9YmoiOyB0aGVuCisgIG12ICIke2NvZmlsZX1iaiIgIiRvZmlsZSIKK2ZpCisKK3JtZGlyICIkbG9ja2RpciIKK2V4aXQgJHJldAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9jb25maWcuZ3Vlc3MgYi9jdXJsLTcuMjUuMC9jb25maWcuZ3Vlc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDYyMmE0NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2NvbmZpZy5ndWVzcwpAQCAtMCwwICsxLDE1MzAgQEAKKyMhIC9iaW4vc2gKKyMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwKKyMgICAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMTItMDItMTAnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLiAgUGxlYXNlIHNlbmQgcGF0Y2hlcyAoY29udGV4dAorIyBkaWZmIGZvcm1hdCkgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGFuZCBpbmNsdWRlIGEgQ2hhbmdlTG9nCisjIGVudHJ5LgorIworIyBUaGlzIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZSBzaW1pbGFyIHRvCisjIGNvbmZpZy5zdWIuICBJZiBpdCBzdWNjZWVkcywgaXQgcHJpbnRzIHRoZSBzeXN0ZW0gbmFtZSBvbiBzdGRvdXQsIGFuZAorIyBleGl0cyB3aXRoIDAuICBPdGhlcndpc2UsIGl0IGV4aXRzIHdpdGggMS4KKyMKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRAorCittZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXQorCitPdXRwdXQgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSBvZiB0aGUgc3lzdGVtIFxgJG1lJyBpcyBydW4gb24uCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5ndWVzcyAoJHRpbWVzdGFtcCkKKworT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgorQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMgorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCisgICAgICAgZXhpdCAxIDs7CisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgIGV4aXQgMQorZmkKKwordHJhcCAnZXhpdCAxJyAxIDIgMTUKKworIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQorIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcworIyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCBhbmQsIGFzIHlvdSBjYW4gc2VlIGJlbG93LCBpdCBpcyBhCisjIGhlYWRhY2hlIHRvIGRlYWwgd2l0aCBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCisKKyMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKKyMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KKworIyBQb3J0YWJsZSB0bXAgZGlyZWN0b3J5IGNyZWF0aW9uIGluc3BpcmVkIGJ5IHRoZSBBdXRvY29uZiB0ZWFtLgorCitzZXRfY2NfZm9yX2J1aWxkPScKK3RyYXAgImV4aXRjb2RlPVwkPzsgKHJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsKSAmJiBleGl0IFwkZXhpdGNvZGUiIDAgOwordHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgMSAyIDEzIDE1IDsKKzogJHtUTVBESVI9L3RtcH0gOworIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKKyB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fAorIHsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAorIHsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9IDsKK2R1bW15PSR0bXAvZHVtbXkgOwordG1wZmlsZXM9IiRkdW1teS5jICRkdW1teS5vICRkdW1teS5yZWwgJGR1bW15IiA7CitjYXNlICRDQ19GT1JfQlVJTEQsJEhPU1RfQ0MsJENDIGluCisgLCwpICAgIGVjaG8gImludCB4OyIgPiAkZHVtbXkuYyA7CisJZm9yIGMgaW4gY2MgZ2NjIGM4OSBjOTkgOyBkbworCSAgaWYgKCRjIC1jIC1vICRkdW1teS5vICRkdW1teS5jKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICAgICBDQ19GT1JfQlVJTEQ9IiRjIjsgYnJlYWsgOworCSAgZmkgOworCWRvbmUgOworCWlmIHRlc3QgeCIkQ0NfRk9SX0JVSUxEIiA9IHggOyB0aGVuCisJICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQgOworCWZpCisJOzsKKyAsLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OworICwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKK2VzYWMgOyBzZXRfY2NfZm9yX2J1aWxkPSA7JworCisjIFRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVuIHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNlLgorIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQtMDgtMjQpCitpZiAodGVzdCAtZiAvLmF0dGJpbi91bmFtZSkgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAorZmkKKworVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfTUFDSElORT11bmtub3duCitVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KK1VOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCitVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KKworIyBOb3RlOiBvcmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJyYW5jaGVzIGFyZSBub3QgZXhjbHVzaXZlLgorCitjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCisgICAgKjpOZXRCU0Q6KjoqKQorCSMgTmV0QlNEIChuYnNkKSB0YXJnZXRzIHNob3VsZCAod2hlcmUgYXBwbGljYWJsZSkgbWF0Y2ggb25lIG9yCisJIyBtb3JlIG9mIHRoZSB0dXBsZXM6ICotKi1uZXRic2RlbGYqLCAqLSotbmV0YnNkYW91dCosCisJIyAqLSotbmV0YnNkZWNvZmYqIGFuZCAqLSotbmV0YnNkKi4gIEZvciB0YXJnZXRzIHRoYXQgcmVjZW50bHkKKwkjIHN3aXRjaGVkIHRvIEVMRiwgKi0qLW5ldGJzZCogd291bGQgc2VsZWN0IHRoZSBvbGQKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4gIFRoaXMgcHJvdmlkZXMgYm90aCBmb3J3YXJkCisJIyBjb21wYXRpYmlsaXR5IGFuZCBhIGNvbnNpc3RlbnQgbWVjaGFuaXNtIGZvciBzZWxlY3RpbmcgdGhlCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuCisJIworCSMgTm90ZTogTmV0QlNEIGRvZXNuJ3QgcGFydGljdWxhcmx5IGNhcmUgYWJvdXQgdGhlIHZlbmRvcgorCSMgcG9ydGlvbiBvZiB0aGUgbmFtZS4gIFdlIGFsd2F5cyBzZXQgaXQgdG8gInVua25vd24iLgorCXN5c2N0bD0ic3lzY3RsIC1uIGh3Lm1hY2hpbmVfYXJjaCIKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YCgvc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgL3Vzci9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duKWAKKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGFybWViKSBtYWNoaW5lPWFybWViLXVua25vd24gOzsKKwkgICAgYXJtKikgbWFjaGluZT1hcm0tdW5rbm93biA7OworCSAgICBzaDNlbCkgbWFjaGluZT1zaGwtdW5rbm93biA7OworCSAgICBzaDNlYikgbWFjaGluZT1zaC11bmtub3duIDs7CisJICAgIHNoNWVsKSBtYWNoaW5lPXNoNWxlLXVua25vd24gOzsKKwkgICAgKikgbWFjaGluZT0ke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93biA7OworCWVzYWMKKwkjIFRoZSBPcGVyYXRpbmcgU3lzdGVtIGluY2x1ZGluZyBvYmplY3QgZm9ybWF0LCBpZiBpdCBoYXMgc3dpdGNoZWQKKwkjIHRvIEVMRiByZWNlbnRseSwgb3Igd2lsbCBpbiB0aGUgZnV0dXJlLgorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJCXwgZ3JlcCAtcSBfX0VMRl9fCisJCXRoZW4KKwkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KKwkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPworCQkgICAgb3M9bmV0YnNkCisJCWVsc2UKKwkJICAgIG9zPW5ldGJzZGVsZgorCQlmaQorCQk7OworCSAgICAqKQorCQlvcz1uZXRic2QKKwkJOzsKKwllc2FjCisJIyBUaGUgT1MgcmVsZWFzZQorCSMgRGViaWFuIEdOVS9OZXRCU0QgbWFjaGluZXMgaGF2ZSBhIGRpZmZlcmVudCB1c2VybGFuZCwgYW5kCisJIyB0aHVzLCBuZWVkIGEgZGlzdGluY3QgdHJpcGxldC4gSG93ZXZlciwgdGhleSBkbyBub3QgbmVlZAorCSMga2VybmVsIHZlcnNpb24gaW5mb3JtYXRpb24sIHNvIGl0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEKKwkjIHN1aXRhYmxlIHRhZywgaW4gdGhlIHN0eWxlIG9mIGxpbnV4LWdudS4KKwljYXNlICIke1VOQU1FX1ZFUlNJT059IiBpbgorCSAgICBEZWJpYW4qKQorCQlyZWxlYXNlPSctZ251JworCQk7OworCSAgICAqKQorCQlyZWxlYXNlPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stX10uKi9cLi8nYAorCQk7OworCWVzYWMKKwkjIFNpbmNlIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTToKKwkjIGNvbnRhaW5zIHJlZHVuZGFudCBpbmZvcm1hdGlvbiwgdGhlIHNob3J0ZXIgZm9ybToKKwkjIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNIGlzIHVzZWQuCisJZWNobyAiJHttYWNoaW5lfS0ke29zfSR7cmVsZWFzZX0iCisJZXhpdCA7OworICAgICo6T3BlbkJTRDoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpla2tvQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1la2tvYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlNvbGlkQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zb2xpZGJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWFjcHBjOk1pckJTRDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk1pckJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhbHBoYTpPU0YxOio6KikKKwljYXNlICRVTkFNRV9SRUxFQVNFIGluCisJKjQuMCkKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDN9J2AKKwkJOzsKKwkqNS4qKQorCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkNH0nYAorCQk7OworCWVzYWMKKwkjIEFjY29yZGluZyB0byBDb21wYXEsIC91c3Ivc2Jpbi9wc3JpbmZvIGhhcyBiZWVuIGF2YWlsYWJsZSBvbgorCSMgT1NGLzEgYW5kIFRydTY0IHN5c3RlbXMgcHJvZHVjZWQgc2luY2UgMTk5NS4gIEkgaG9wZSB0aGF0CisJIyBjb3ZlcnMgbW9zdCBzeXN0ZW1zIHJ1bm5pbmcgdG9kYXkuICBUaGlzIGNvZGUgcGlwZXMgdGhlIENQVQorCSMgdHlwZXMgdGhyb3VnaCBoZWFkIC1uIDEsIHNvIHdlIG9ubHkgZGV0ZWN0IHRoZSB0eXBlIG9mIENQVSAwLgorCUFMUEhBX0NQVV9UWVBFPWAvdXNyL3NiaW4vcHNyaW5mbyAtdiB8IHNlZCAtbiAtZSAncy9eICBUaGUgYWxwaGEgXCguKlwpIHByb2Nlc3Nvci4qJC9cMS9wJyB8IGhlYWQgLW4gMWAKKwljYXNlICIkQUxQSEFfQ1BVX1RZUEUiIGluCisJICAgICJFVjQgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY0LjUgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiTENBNCAoMjEwNjYvMjEwNjgpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjUgKDIxMTY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1IiA7OworCSAgICAiRVY1LjYgKDIxMTY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NTYiIDs7CisJICAgICJFVjUuNiAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU2IiA7OworCSAgICAiRVY1LjcgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NyIgOzsKKwkgICAgIkVWNiAoMjEyNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjYiIDs7CisJICAgICJFVjYuNyAoMjEyNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2NyIgOzsKKwkgICAgIkVWNi44Q0IgKDIxMjY0QykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOEFMICgyMTI2NEIpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhDWCAoMjEyNjREKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi45QSAoMjEyNjQvRVY2OUEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY5IiA7OworCSAgICAiRVY3ICgyMTM2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NyIgOzsKKwkgICAgIkVWNy45ICgyMTM2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjc5IiA7OworCWVzYWMKKwkjIEEgUG4ubiB2ZXJzaW9uIGlzIGEgcGF0Y2hlZCB2ZXJzaW9uLgorCSMgQSBWbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCB2ZXJzaW9uLgorCSMgQSBUbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCBmaWVsZCB0ZXN0IHZlcnNpb24uCisJIyBBIFhuLm4gdmVyc2lvbiBpcyBhbiB1bnJlbGVhc2VkIGV4cGVyaW1lbnRhbCBiYXNlbGV2ZWwuCisJIyAxLjIgdXNlcyAiMS4yIiBmb3IgdW5hbWUgLXIuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1vc2ZgZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL15bUFZUWF0vLycgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisJIyBSZXNldCBFWElUIHRyYXAgYmVmb3JlIGV4aXRpbmcgdG8gYXZvaWQgc3B1cmlvdXMgbm9uLXplcm8gZXhpdCBjb2RlLgorCWV4aXRjb2RlPSQ/CisJdHJhcCAnJyAwCisJZXhpdCAkZXhpdGNvZGUgOzsKKyAgICBBbHBoYVwgKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIFNob3VsZCB3ZSBjaGFuZ2UgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQKKwkjIG9mIHRoZSBzcGVjaWZpYyBBbHBoYSBtb2RlbD8KKwllY2hvIGFscGhhLXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgMjEwNjQ6V2luZG93c19OVDo1MDozKQorCWVjaG8gYWxwaGEtZGVjLXdpbm50My41CisJZXhpdCA7OworICAgIEFtaWdhKjpVTklYX1N5c3RlbV9WOjQuMDoqKQorCWVjaG8gbTY4ay11bmtub3duLXN5c3Y0CisJZXhpdCA7OworICAgICo6W0FhXW1pZ2FbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYW1pZ2FvcworCWV4aXQgOzsKKyAgICAqOltNbV1vcnBoW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1vcnBob3MKKwlleGl0IDs7CisgICAgKjpPUy8zOTA6KjoqKQorCWVjaG8gaTM3MC1pYm0tb3BlbmVkaXRpb24KKwlleGl0IDs7CisgICAgKjp6L1ZNOio6KikKKwllY2hvIHMzOTAtaWJtLXp2bW9lCisJZXhpdCA7OworICAgICo6T1M0MDA6KjoqKQorCWVjaG8gcG93ZXJwYy1pYm0tb3M0MDAKKwlleGl0IDs7CisgICAgYXJtOlJJU0MqOjEuWzAxMl0qOip8YXJtOnJpc2NpeDoxLlswMTJdKjoqKQorCWVjaG8gYXJtLWFjb3JuLXJpc2NpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXJtOnJpc2NvczoqOip8YXJtOlJJU0NPUzoqOiopCisJZWNobyBhcm0tdW5rbm93bi1yaXNjb3MKKwlleGl0IDs7CisgICAgU1IyPzAxOkhJLVVYL01QUDoqOiogfCBTUjgwMDA6SEktVVgvTVBQOio6KikKKwllY2hvIGhwcGExLjEtaGl0YWNoaS1oaXV4bXBwCisJZXhpdCA7OworICAgIFB5cmFtaWQqOk9TeCo6KjoqIHwgTUlTKjpPU3gqOio6KiB8IE1JUyo6U01QX0RDLU9TeCo6KjoqKQorCSMgYWtlZUB3cGRpczAzLndwYWZiLmFmLm1pbCAoRWFybGUgRi4gQWtlKSBjb250cmlidXRlZCBNSVMgYW5kIE5JTEUuCisJaWYgdGVzdCAiYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAiID0gYXR0IDsgdGhlbgorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1zeXN2MworCWVsc2UKKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtYnNkCisJZmkKKwlleGl0IDs7CisgICAgTklMRSo6KjoqOmRjb3N4KQorCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN2cjQKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6dW5peDo0LjA6NiopCisJZWNobyBzcGFyYy1pY2wtbng2CisJZXhpdCA7OworICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKKwljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OworCWVzYWMgOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40SDpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIGk4NnBjOkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVuOkF1cm9yYVVYOjUuKjoqKQorCWVjaG8gaTM4Ni1wYy1hdXJvcmF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCVNVTl9BUkNIPSJpMzg2IgorCSMgSWYgdGhlcmUgaXMgYSBjb21waWxlciwgc2VlIGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIDY0LWJpdCBvYmplY3RzLgorCSMgTm90ZSB0aGF0IHRoZSBTdW4gY2MgZG9lcyBub3QgdHVybiBfX0xQNjRfXyBpbnRvIDEgbGlrZSBnY2MgZG9lcy4KKwkjIFRoaXMgdGVzdCB3b3JrcyBmb3IgYm90aCBjb21waWxlcnMuCisJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCShDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCWdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJU1VOX0FSQ0g9Ing4Nl82NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtTVU5fQVJDSH0tcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6Nio6KikKKwkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQorCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CisJIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzM2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzoqOiopCisJY2FzZSAiYC91c3IvYmluL2FyY2ggLWtgIiBpbgorCSAgICBTZXJpZXMqfFM0KikKKwkJVU5BTUVfUkVMRUFTRT1gdW5hbWUgLXZgCisJCTs7CisJZXNhYworCSMgSmFwYW5lc2UgTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgYDQuMS4zLUpMJy4KKwllY2hvIHNwYXJjLXN1bi1zdW5vc2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy8nYAorCWV4aXQgOzsKKyAgICBzdW4zKjpTdW5PUzoqOiopCisJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3VuKjoqOjQuMkJTRDoqKQorCVVOQU1FX1JFTEVBU0U9YChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCisJdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0gIngiICYmIFVOQU1FX1JFTEVBU0U9MworCWNhc2UgImAvYmluL2FyY2hgIiBpbgorCSAgICBzdW4zKQorCQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCSAgICBzdW40KQorCQllY2hvIHNwYXJjLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwllc2FjCisJZXhpdCA7OworICAgIGF1c2hwOlN1bk9TOio6KikKKwllY2hvIHNwYXJjLWF1c3BleC1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgIyBUaGUgc2l0dWF0aW9uIGZvciBNaU5UIGlzIGEgbGl0dGxlIGNvbmZ1c2luZy4gIFRoZSBtYWNoaW5lIG5hbWUKKyAgICAjIGNhbiBiZSB2aXJ0dWFsbHkgZXZlcnl0aGluZyAoZXZlcnl0aGluZyB3aGljaCBpcyBub3QKKyAgICAjICJhdGFyaXN0IiBvciAiYXRhcmlzdGUiIGF0IGxlYXN0IHNob3VsZCBoYXZlIGEgcHJvY2Vzc29yCisgICAgIyA+IG02ODAwMCkuICBUaGUgc3lzdGVtIG5hbWUgcmFuZ2VzIGZyb20gIk1pTlQiIG92ZXIgIkZyZWVNaU5UIgorICAgICMgdG8gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uICJtaW50IiAob3IgImZyZWVtaW50IikuICBGaW5hbGx5CisgICAgIyB0aGUgc3lzdGVtIG5hbWUgIlRPUyIgZGVub3RlcyBhIHN5c3RlbSB3aGljaCBpcyBhY3R1YWxseSBub3QKKyAgICAjIE1pTlQuICBCdXQgTWlOVCBpcyBkb3dud2FyZCBjb21wYXRpYmxlIHRvIFRPUywgc28gdGhpcyBzaG91bGQKKyAgICAjIGJlIG5vIHByb2JsZW0uCisgICAgYXRhcmlzdFtlXToqTWlOVDoqOiogfCBhdGFyaXN0W2VdOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pbGFuKjoqTWlOVDoqOiogfCBtaWxhbio6Km1pbnQ6KjoqIHwgKm1pbGFuKjoqVE9TOio6KikKKwllY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorCWVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKKwllY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtNjhrOm1hY2h0ZW46KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBwb3dlcnBjOm1hY2h0ZW46KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSSVNDKjpNYWNoOio6KikKKwllY2hvIG1pcHMtZGVjLW1hY2hfYnNkNC4zCisJZXhpdCA7OworICAgIFJJU0MqOlVMVFJJWDoqOiopCisJZWNobyBtaXBzLWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFZBWCo6VUxUUklYKjoqOiopCisJZWNobyB2YXgtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCisJZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLworCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisjZWxzZQorCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7CisjZW5kaWYKKwkjaWYgZGVmaW5lZCAoaG9zdF9taXBzKSAmJiBkZWZpbmVkIChNSVBTRUIpCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1lTVikKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N5c3ZcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TVlI0KQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3ZyNFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX0JTRDQzKSB8fCBkZWZpbmVkKFNZU1RZUEVfQlNEKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzYnNkXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2VuZGlmCisJICBleGl0ICgtMSk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKKwkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCisJICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4CisJZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKKwlleGl0IDs7CisgICAgbTg4azpDWC9VWDo3KjoqKQorCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKKwlleGl0IDs7CisgICAgbTg4azoqOjQqOlI0KikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKKwlleGl0IDs7CisgICAgbTg4azoqOjMqOlIzKikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgQVZpaU9OOmRndXg6KjoqKQorCSMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCisJVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisJdGhlbgorCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKKwkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KKwkgICAgdGhlbgorCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZXhpdCA7OworICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCisJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKKwlleGl0IDs7CisgICAgTTg4KjoqOlIzKjoqKQorCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCisJZWNobyBtODhrLXRla3Ryb25peC1zeXN2MworCWV4aXQgOzsKKyAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQorCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCisJZXhpdCA7OworICAgICo6SVJJWCo6KjoqKQorCWVjaG8gbWlwcy1zZ2ktaXJpeGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy9nJ2AKKwlleGl0IDs7CisgICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgorCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInYHVuYW1lIC1zYCciIGdpdmVzICdBSVggJworICAgIGkqODY6QUlYOio6KikKKwllY2hvIGkzODYtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYTY0OkFJWDoqOiopCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOjI6MykKKwlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkJI2luY2x1ZGUgPHN5cy9zeXN0ZW1jZmcuaD4KKworCQltYWluKCkKKwkJCXsKKwkJCWlmICghX19wb3dlcl9wYygpKQorCQkJCWV4aXQoMSk7CisJCQlwdXRzKCJwb3dlcnBjLWlibS1haXgzLjIuNSIpOworCQkJZXhpdCgwKTsKKwkJCX0KK0VPRgorCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YAorCQl0aGVuCisJCQllY2hvICIkU1lTVEVNX05BTUUiCisJCWVsc2UKKwkJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQorCQlmaQorCWVsaWYgZ3JlcCBib3MzMjQgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNAorCWVsc2UKKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMgorCWZpCisJZXhpdCA7OworICAgICo6QUlYOio6WzQ1NjddKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1fQVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtJQk1fQVJDSH0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6KjoqKQorCWVjaG8gcnM2MDAwLWlibS1haXgKKwlleGl0IDs7CisgICAgaWJtcnQ6NC40QlNEOip8cm9tcC1pYm06QlNEOiopCisJZWNobyByb21wLWlibS1ic2Q0LjQKKwlleGl0IDs7CisgICAgaWJtcnQ6KkJTRDoqfHJvbXAtaWJtOkJTRDoqKSAgICAgICAgICAgICMgY292ZXJzIFJUL1BDIEJTRCBhbmQKKwllY2hvIHJvbXAtaWJtLWJzZCR7VU5BTUVfUkVMRUFTRX0gICAjIDQuMyB3aXRoIHVuYW1lIGFkZGVkIHRvCisJZXhpdCA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBvcnQ6IHJvbXAtaWJtIEJTRCA0LjMKKyAgICAqOkJPU1g6KjoqKQorCWVjaG8gcnM2MDAwLWJ1bGwtYm9zeAorCWV4aXQgOzsKKyAgICBEUFgvMj8wMDpCLk8uUy46KjoqKQorCWVjaG8gbTY4ay1idWxsLXN5c3YzCisJZXhpdCA7OworICAgIDkwMDAvWzM0XT8/OjQuM2JzZDoxLio6KikKKwllY2hvIG02OGstaHAtYnNkCisJZXhpdCA7OworICAgIGhwMzAwOjQuNEJTRDoqOiogfCA5MDAwL1szNF0/Pzo0LjNic2Q6Mi4qOiopCisJZWNobyBtNjhrLWhwLWJzZDQuNAorCWV4aXQgOzsKKyAgICA5MDAwL1szNDY3OF0/PzpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgOTAwMC8zMT8gKSAgICAgICAgICAgIEhQX0FSQ0g9bTY4MDAwIDs7CisJICAgIDkwMDAvWzM0XT8/ICkgICAgICAgICBIUF9BUkNIPW02OGsgOzsKKwkgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCisJCWlmIFsgLXggL3Vzci9iaW4vZ2V0Y29uZiBdOyB0aGVuCisJCSAgICBzY19jcHVfdmVyc2lvbj1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19DUFVfVkVSU0lPTiAyPi9kZXYvbnVsbGAKKwkJICAgIHNjX2tlcm5lbF9iaXRzPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0tFUk5FTF9CSVRTIDI+L2Rldi9udWxsYAorCQkgICAgY2FzZSAiJHtzY19jcHVfdmVyc2lvbn0iIGluCisJCSAgICAgIDUyMykgSFBfQVJDSD0iaHBwYTEuMCIgOzsgIyBDUFVfUEFfUklTQzFfMAorCQkgICAgICA1MjgpIEhQX0FSQ0g9ImhwcGExLjEiIDs7ICMgQ1BVX1BBX1JJU0MxXzEKKwkJICAgICAgNTMyKSAgICAgICAgICAgICAgICAgICAgICAjIENQVV9QQV9SSVNDMl8wCisJCQljYXNlICIke3NjX2tlcm5lbF9iaXRzfSIgaW4KKwkJCSAgMzIpIEhQX0FSQ0g9ImhwcGEyLjBuIiA7OworCQkJICA2NCkgSFBfQVJDSD0iaHBwYTIuMHciIDs7CisJCQkgICcnKSBIUF9BUkNIPSJocHBhMi4wIiA7OyAgICMgSFAtVVggMTAuMjAKKwkJCWVzYWMgOzsKKwkJICAgIGVzYWMKKwkJZmkKKwkJaWYgWyAiJHtIUF9BUkNIfSIgPSAiIiBdOyB0aGVuCisJCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCSAgICBzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKworCQkjZGVmaW5lIF9IUFVYX1NPVVJDRQorCQkjaW5jbHVkZSA8c3RkbGliLmg+CisJCSNpbmNsdWRlIDx1bmlzdGQuaD4KKworCQlpbnQgbWFpbiAoKQorCQl7CisJCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKwkJICAgIGxvbmcgYml0cyA9IHN5c2NvbmYoX1NDX0tFUk5FTF9CSVRTKTsKKwkJI2VuZGlmCisJCSAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCisJCSAgICBzd2l0Y2ggKGNwdSkKKwkJCXsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworCQkJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMl8wOgorCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisJCQkgICAgc3dpdGNoIChiaXRzKQorCQkJCXsKKwkJCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisJCQkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworCQkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworCQkJCX0gYnJlYWs7CisJCSNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisJCQkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCSNlbmRpZgorCQkJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQl9CisJCSAgICBleGl0ICgwKTsKKwkJfQorRU9GCisJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAorCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQorCQlmaSA7OworCWVzYWMKKwlpZiBbICR7SFBfQVJDSH0gPSAiaHBwYTIuMHciIF0KKwl0aGVuCisJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKworCSAgICAjIGhwcGEyLjB3LWhwLWhwdXgqIGhhcyBhIDY0LWJpdCBrZXJuZWwgYW5kIGEgY29tcGlsZXIgZ2VuZXJhdGluZworCSAgICAjIDMyLWJpdCBjb2RlLiAgaHBwYTY0LWhwLWhwdXgqIGhhcyB0aGUgc2FtZSBrZXJuZWwgYW5kIGEgY29tcGlsZXIKKwkgICAgIyBnZW5lcmF0aW5nIDY0LWJpdCBjb2RlLiAgR05VIGFuZCBIUCB1c2UgZGlmZmVyZW50IG5vbWVuY2xhdHVyZToKKwkgICAgIworCSAgICAjICQgQ0NfRk9SX0JVSUxEPWNjIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTIuMHctaHAtaHB1eDExLjIzCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9ImNjICtEQTIuMHciIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMworCisJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKwkJZ3JlcCAtcSBfX0xQNjRfXworCSAgICB0aGVuCisJCUhQX0FSQ0g9ImhwcGEyLjB3IgorCSAgICBlbHNlCisJCUhQX0FSQ0g9ImhwcGE2NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtIUF9BUkNIfS1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgaWE2NDpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJZWNobyBpYTY0LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICAzMDUwKjpISS1VWDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCWludAorCW1haW4gKCkKKwl7CisJICBsb25nIGNwdSA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisJICAvKiBUaGUgb3JkZXIgbWF0dGVycywgYmVjYXVzZSBDUFVfSVNfSFBfTUM2OEsgZXJyb25lb3VzbHkgcmV0dXJucworCSAgICAgdHJ1ZSBmb3IgQ1BVX1BBX1JJU0MxXzAuICBDUFVfSVNfUEFfUklTQyByZXR1cm5zIGNvcnJlY3QKKwkgICAgIHJlc3VsdHMsIGhvd2V2ZXIuICAqLworCSAgaWYgKENQVV9JU19QQV9SSVNDIChjcHUpKQorCSAgICB7CisJICAgICAgc3dpdGNoIChjcHUpCisJCXsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MyXzA6IHB1dHMgKCJocHBhMi4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBkZWZhdWx0OiBwdXRzICgiaHBwYS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoQ1BVX0lTX0hQX01DNjhLIChjcHUpKQorCSAgICBwdXRzICgibTY4ay1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGVsc2UgcHV0cyAoInVua25vd24taGl0YWNoaS1oaXV4d2UyIik7CisJICBleGl0ICgwKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCQl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIHVua25vd24taGl0YWNoaS1oaXV4d2UyCisJZXhpdCA7OworICAgIDkwMDAvNz8/OjQuM2JzZDoqOiogfCA5MDAwLzg/Wzc5XTo0LjNic2Q6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtYnNkCisJZXhpdCA7OworICAgIDkwMDAvOD8/OjQuM2JzZDoqOiopCisJZWNobyBocHBhMS4wLWhwLWJzZAorCWV4aXQgOzsKKyAgICAqOT8/KjpNUEUvaVg6KjoqIHwgKjMwMDAqOk1QRS9pWDoqOiopCisJZWNobyBocHBhMS4wLWhwLW1wZWl4CisJZXhpdCA7OworICAgIGhwNz8/Ok9TRjE6KjoqIHwgaHA4P1s3OV06T1NGMToqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1vc2YKKwlleGl0IDs7CisgICAgaHA4Pz86T1NGMToqOiopCisJZWNobyBocHBhMS4wLWhwLW9zZgorCWV4aXQgOzsKKyAgICBpKjg2Ok9TRjE6KjoqKQorCWlmIFsgLXggL3Vzci9zYmluL3N5c3ZlcnNpb24gXSA7IHRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMW1rCisJZWxzZQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxCisJZmkKKwlleGl0IDs7CisgICAgcGFyaXNjKjpMaXRlcyo6KjoqKQorCWVjaG8gaHBwYTEuMS1ocC1saXRlcworCWV4aXQgOzsKKyAgICBDMSo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMxKjoqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDMio6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMyKjoqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKwlleGl0IDs7CisgICAgQzM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM0KjoqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzM4KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM4KjoqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQ1JBWSpZLU1QOio6KjoqKQorCWVjaG8geW1wLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqW0EtWl05MDoqOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IFwKKwl8IHNlZCAtZSAncy9DUkFZLipcKFtBLVpdOTBcKS9cMS8nIFwKKwkgICAgICAtZSB5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LyBcCisJICAgICAgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlRTOio6KjoqKQorCWVjaG8gdDkwLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVDNFOio6KjoqKQorCWVjaG8gYWxwaGFldjUtY3JheS11bmljb3NtayR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlNWMToqOio6KikKKwllY2hvIHN2MS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICAqOlVOSUNPUy9tcDoqOiopCisJZWNobyBjcmF5bnYtY3JheS11bmljb3NtcCR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBGMzBbMDFdOlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5c3RlbV9WOio6KikKKwlGVUpJVFNVX1BST0M9YHVuYW1lIC1tIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKwlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzLyAvXy8nYAorCWVjaG8gIiR7RlVKSVRTVV9QUk9DfS1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIDUwMDA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKwlGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisJRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy8gL18vJ2AKKwllY2hvICJzcGFyYy1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIGkqODY6QlNELzM4NjoqOiogfCBpKjg2OkJTRC9PUzoqOiogfCAqOkFzY2VuZFwgRW1iZWRkZWQvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzcGFyYyo6QlNEL09TOio6KikKKwllY2hvIHNwYXJjLXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpCU0QvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RnJlZUJTRDoqOiopCisJVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwljYXNlICR7VU5BTUVfUFJPQ0VTU09SfSBpbgorCSAgICBhbWQ2NCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCSAgICAqKQorCQllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBpKjpDWUdXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWN5Z3dpbgorCWV4aXQgOzsKKyAgICAqOk1JTkdXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOk1TWVMqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zeXMKKwlleGl0IDs7CisgICAgaSo6d2luZG93czMyKjoqKQorCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6UFcqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXB3MzIKKwlleGl0IDs7CisgICAgKjpJbnRlcml4KjoqKQorCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICB4ODYpCisJCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQorCQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgSUE2NCkKKwkJZWNobyBpYTY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCWVzYWMgOzsKKyAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCisJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKKwlleGl0IDs7CisgICAgODY2NDpXaW5kb3dzX05UOiopCisJZWNobyB4ODZfNjQtcGMtbWtzCisJZXhpdCA7OworICAgIGkqOldpbmRvd3NfTlQqOiogfCBQZW50aXVtKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIEl0IGFsc28gY29uZmxpY3RzIHdpdGggcHJlLTIuMCB2ZXJzaW9ucyBvZiBBVCZUIFVXSU4uIFNob3VsZCB3ZQorCSMgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQgb2YgaTM4Nj8KKwllY2hvIGk1ODYtcGMtaW50ZXJpeAorCWV4aXQgOzsKKyAgICBpKjpVV0lOKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy11d2luCisJZXhpdCA7OworICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZR1dJTio6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHAqOkNZR1dJTio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwcmVwKjpTdW5PUzo1Lio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgICo6R05VOio6KikKKwkjIHRoZSBHTlUgc3lzdGVtCisJZWNobyBgZWNobyAke1VOQU1FX01BQ0hJTkV9fHNlZCAtZSAncyxbLS9dLiokLCwnYC11bmtub3duLWdudWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLC8uKiQsLCdgCisJZXhpdCA7OworICAgICo6R05VLyo6KjoqKQorCSMgb3RoZXIgc3lzdGVtcyB3aXRoIEdOVSBsaWJjIGFuZCB1c2VybGFuZAorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWBlY2hvICR7VU5BTUVfU1lTVEVNfSB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgJ1tBLVpdJyAnW2Etel0nYGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AtZ251CisJZXhpdCA7OworICAgIGkqODY6TWluaXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAorCWV4aXQgOzsKKyAgICBhYXJjaDY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgYWFyY2g2NF9iZTpMaW51eDoqOiopCisJVU5BTUVfTUFDSElORT1hYXJjaDY0X2JlCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGFscGhhOkxpbnV4Oio6KikKKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgorCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisJZXNhYworCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfQorCWV4aXQgOzsKKyAgICBhcm0qOkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJaWYgZWNobyBfX0FSTV9FQUJJX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCSAgICB8IGdyZXAgLXEgX19BUk1fRUFCSV9fCisJdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllbHNlCisJICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJCXwgZ3JlcCAtcSBfX0FSTV9QQ1NfVkZQCisJICAgIHRoZW4KKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251ZWFiaQorCSAgICBlbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudWVhYmloZgorCSAgICBmaQorCWZpCisJZXhpdCA7OworICAgIGF2cjMyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXM6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBjcmlzdjMyOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgZnJ2OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaGV4YWdvbjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGkqODY6TGludXg6KjoqKQorCUxJQkM9Z251CisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2lmZGVmIF9fZGlldGxpYmNfXworCUxJQkM9ZGlldGxpYmMKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeTElCQydgCisJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgorCWV4aXQgOzsKKyAgICBpYTY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbTMycio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtNjgqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9ZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT0ke1VOQU1FX01BQ0hJTkV9ZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPSR7VU5BTUVfTUFDSElORX0KKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtZ251IjsgZXhpdDsgfQorCTs7CisgICAgb3IzMjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBhZHJlOkxpbnV4Oio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQorCSMgTG9vayBmb3IgQ1BVIGxldmVsCisJY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KKwkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LWdudSA7OworCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtZ251IDs7CisJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKKwllc2FjCisJZXhpdCA7OworICAgIHBwYzY0OkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwcGM6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4CisJZXhpdCA7OworICAgIHNoNjQqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgc2gqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHRpbGUqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgdmF4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB4ODZfNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB4dGVuc2EqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKKwkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgorCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKKwkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgorCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCisJIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgorCSMgbnVtYmVyIHNlcmllcyBzdGFydGluZyB3aXRoIDIuLi4KKwkjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCisJIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgorCSMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2NC4ydXcke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6T1MvMjoqOiopCisJIyBJZiB3ZSB3ZXJlIGFibGUgdG8gZmluZCBgdW5hbWUnLCB0aGVuIEVNWCBVbml4IGNvbXBhdGliaWxpdHkKKwkjIGlzIHByb2JhYmx5IGluc3RhbGxlZC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtb3MyLWVteAorCWV4aXQgOzsKKyAgICBpKjg2OlhUUy0zMDA6KjpTVE9QKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN0b3AKKwlleGl0IDs7CisgICAgaSo4NjphdGhlb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWF0aGVvcworCWV4aXQgOzsKKyAgICBpKjg2OnN5bGxhYmxlOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lsbGFibGUKKwlleGl0IDs7CisgICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LlswMl0qOiopCisJZWNobyBpMzg2LXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpKjg2OipET1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIGkqODY6Kjo0Lio6KiB8IGkqODY6U1lTVEVNX1Y6NC4qOiopCisJVU5BTUVfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgJ3MvXC9NUCQvLydgCisJaWYgZ3JlcCBOb3ZlbGwgL3Vzci9pbmNsdWRlL2xpbmsuaCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bml2ZWwtc3lzdiR7VU5BTUVfUkVMfQorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Yke1VOQU1FX1JFTH0KKwlmaQorCWV4aXQgOzsKKyAgICBpKjg2Oio6NTpbNjc4XSopCisJIyBVbml4V2FyZSA3LngsIE9wZW5VTklYIGFuZCBPcGVuU2VydmVyIDYuCisJY2FzZSBgL2Jpbi91bmFtZSAtWCB8IGdyZXAgIl5NYWNoaW5lImAgaW4KKwkgICAgKjQ4NiopCSAgICAgVU5BTUVfTUFDSElORT1pNDg2IDs7CisJICAgICpQZW50aXVtKQkgICAgIFVOQU1FX01BQ0hJTkU9aTU4NiA7OworCSAgICAqUGVudCp8KkNlbGVyb24pIFVOQU1FX01BQ0hJTkU9aTY4NiA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSR7VU5BTUVfU1lTVEVNfSR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjoqOjMuMjoqKQorCWlmIHRlc3QgLWYgL3Vzci9vcHRpb25zL2NiLm5hbWU7IHRoZW4KKwkJVU5BTUVfUkVMPWBzZWQgLW4gJ3MvLipWZXJzaW9uIC8vcCcgPC91c3Ivb3B0aW9ucy9jYi5uYW1lYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtaXNjJFVOQU1FX1JFTAorCWVsaWYgL2Jpbi91bmFtZSAtWCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9SRUw9YCgvYmluL3VuYW1lIC1YfGdyZXAgUmVsZWFzZXxzZWQgLWUgJ3MvLio9IC8vJylgCisJCSgvYmluL3VuYW1lIC1YfGdyZXAgaTgwNDg2ID4vZGV2L251bGwpICYmIFVOQU1FX01BQ0hJTkU9aTQ4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNTg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50ICpJSScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtIFBybycgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zY28kVU5BTUVfUkVMCisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjMyCisJZmkKKwlleGl0IDs7CisgICAgcGM6KjoqOiopCisJIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6CisJIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKKwkjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpNTg2LgorCSMgTm90ZTogd2hhdGV2ZXIgdGhpcyBpcywgaXQgTVVTVCBiZSB0aGUgc2FtZSBhcyB3aGF0IGNvbmZpZy5zdWIKKwkjIHByaW50cyBmb3IgdGhlICJkamdwcCIgaG9zdCwgb3IgZWxzZSBHREIgY29uZmlndXJ5IHdpbGwgZGVjaWRlIHRoYXQKKwkjIHRoaXMgaXMgYSBjcm9zcy1idWlsZC4KKwllY2hvIGk1ODYtcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKKyAgICBJbnRlbDpNYWNoOjMqOiopCisJZWNobyBpMzg2LXBjLW1hY2gzCisJZXhpdCA7OworICAgIHBhcmFnb246KjoqOiopCisJZWNobyBpODYwLWludGVsLW9zZjEKKwlleGl0IDs7CisgICAgaTg2MDoqOjQuKjoqKSAjIGk4NjAtU1ZSNAorCWlmIGdyZXAgU3RhcmRlbnQgL3Vzci9pbmNsdWRlL3N5cy91YWRtaW4uaCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICBlY2hvIGk4NjAtc3RhcmRlbnQtc3lzdiR7VU5BTUVfUkVMRUFTRX0gIyBTdGFyZGVudCBWaXN0cmEgaTg2MC1TVlI0CisJZWxzZSAjIEFkZCBvdGhlciBpODYwLVNWUjQgdmVuZG9ycyBiZWxvdyBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkLgorCSAgZWNobyBpODYwLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0gICMgVW5rbm93biBpODYwLVNWUjQKKwlmaQorCWV4aXQgOzsKKyAgICBtaW5pKjpDVElYOlNZUyo1OiopCisJIyAibWluaWZyYW1lIgorCWVjaG8gbTY4MDEwLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBtYzY4azpVTklYOlNZU1RFTTU6My41MW0pCisJZWNobyBtNjhrLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBNNjgwPzA6RC1OSVg6NS4zOiopCisJZWNobyBtNjhrLWRpYWItZG5peAorCWV4aXQgOzsKKyAgICBNNjgqOio6UjNWWzU2NzhdKjoqKQorCXRlc3QgLXIgL3N5c1Y2OCAmJiB7IGVjaG8gJ202OGstbW90b3JvbGEtc3lzdic7IGV4aXQ7IH0gOzsKKyAgICAzWzM0NV0/PzoqOjQuMDozLjAgfCAzWzM0XT8/QToqOjQuMDozLjAgfCAzWzM0XT8/LCo6Kjo0LjA6My4wIHwgM1szNF0/Py8qOio6NC4wOjMuMCB8IDQ0MDA6Kjo0LjA6My4wIHwgNDg1MDoqOjQuMDozLjAgfCBTS0E0MDoqOjQuMDozLjAgfCBTRFMyOio6NC4wOjMuMCB8IFNIRzI6Kjo0LjA6My4wIHwgUzc1MDEqOio6NC4wOjMuMCkKKwlPU19SRUw9JycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgM1szNF0/PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBOQ1IqOio6NC4yOiogfCBNUFJBUyo6Kjo0LjI6KikKKwlPU19SRUw9Jy4zJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSAgICAmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgcHRlcm9uID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIG02OCo6THlueE9TOjIuKjoqIHwgbTY4KjpMeW54T1M6My4wKjoqKQorCWVjaG8gbTY4ay11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWM2ODAzMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCWVjaG8gbTY4ay1hdGFyaS1zeXN2NAorCWV4aXQgOzsKKyAgICBUU1VOQU1JOkx5bnhPUzoyLio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICByczYwMDA6THlueE9TOjIuKjoqKQorCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCisJZWNobyBtaXBzLWRkZS1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSTSo6UmVsaWFudFVOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICBSTSo6U0lOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlNJTklYLSo6KjoqKQorCWlmIHVuYW1lIC1wIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zbmktc3lzdjQKKwllbHNlCisJCWVjaG8gbnMzMmstc25pLXN5c3YKKwlmaQorCWV4aXQgOzsKKyAgICBQRU5USVVNOio6NC4wKjoqKQkjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAorCQkJIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgorCWVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKKwlleGl0IDs7CisgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCisJIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgorCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgICo6KjoqOkZUWCopCisJIyBGcm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5jb20uCisJZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICAqOlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyBocHBhMS4xLXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgIG1jNjgqOkEvVVg6KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1hdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG5ld3MqOk5FV1MtT1M6Nio6KikKKwllY2hvIG1pcHMtc29ueS1uZXdzb3M2CisJZXhpdCA7OworICAgIFJbMzRdMDAwOipTeXN0ZW1fVio6KjoqIHwgUjQwMDA6VU5JWF9TWVNWOio6KiB8IFIqMDAwOlVOSVhfU1Y6KjoqKQorCWlmIFsgLWQgL3Vzci9uZWMgXTsgdGhlbgorCQllY2hvIG1pcHMtbmVjLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZWxzZQorCQllY2hvIG1pcHMtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZXhpdCA7OworICAgIEJlQm94OkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBoYXJkd2FyZSBtYWRlIGJ5IEJlLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYmUtYmVvcworCWV4aXQgOzsKKyAgICBCZU1hYzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gTWFjIG9yIE1hYyBjbG9uZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWFwcGxlLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkhhaWt1Oio6KikJIyBIYWlrdSBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWhhaWt1CisJZXhpdCA7OworICAgIFNYLTQ6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC01OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDYtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTc6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g3LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04OlNVUEVSLVVYOio6KikKKwllY2hvIHN4OC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtOFI6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4ci1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXIqOlJoYXBzb2R5Oio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UmhhcHNvZHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEYXJ3aW46KjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCisJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJICAgIGkzODYpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCSAgaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCSAgICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCSAgICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCSAgdGhlbgorCQkgICAgICBVTkFNRV9QUk9DRVNTT1I9Ing4Nl82NCIKKwkJICBmaQorCQlmaSA7OworCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSAieDg2IjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgorCQlVTkFNRV9NQUNISU5FPXBjCisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS0ke1VOQU1FX01BQ0hJTkV9LW50by1xbngke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UU5YOio6NCopCisJZWNobyBpMzg2LXBjLXFueAorCWV4aXQgOzsKKyAgICBORU8tPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuZW8tdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNFLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNlLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE5TUi0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zci10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk5vblN0b3AtVVg6KjoqKQorCWVjaG8gbWlwcy1jb21wYXEtbm9uc3RvcHV4CisJZXhpdCA7OworICAgIEJTMjAwMDpQT1NJWCo6KjoqKQorCWVjaG8gYnMyMDAwLXNpZW1lbnMtc3lzdgorCWV4aXQgOzsKKyAgICBEUy8qOlVOSVhfU3lzdGVtX1Y6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS0ke1VOQU1FX1NZU1RFTX0tJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlBsYW45Oio6KikKKwkjICJ1bmFtZSAtbSIgaXMgbm90IGNvbnNpc3RlbnQsIHNvIHVzZSAkY3B1dHlwZSBpbnN0ZWFkLiAzODYKKwkjIGlzIGNvbnZlcnRlZCB0byBpMzg2IGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHg4NgorCSMgb3BlcmF0aW5nIHN5c3RlbXMuCisJaWYgdGVzdCAiJGNwdXR5cGUiID0gIjM4NiI7IHRoZW4KKwkgICAgVU5BTUVfTUFDSElORT1pMzg2CisJZWxzZQorCSAgICBVTkFNRV9NQUNISU5FPSIkY3B1dHlwZSIKKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXBsYW45CisJZXhpdCA7OworICAgICo6VE9QUy0xMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAorCWV4aXQgOzsKKyAgICAqOlRFTkVYOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKKwlleGl0IDs7CisgICAgS1MxMDpUT1BTLTIwOio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLWRlYy10b3BzMjAKKwlleGl0IDs7CisgICAgWEtMLTE6VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXhrbC10b3BzMjAKKwlleGl0IDs7CisgICAgKjpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczIwCisJZXhpdCA7OworICAgICo6SVRTOio6KikKKwllY2hvIHBkcDEwLXVua25vd24taXRzCisJZXhpdCA7OworICAgIFNFSToqOio6U0VJVVgpCisJZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWRyYWdvbmZseWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKwlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIEEqKSBlY2hvIGFscGhhLWRlYy12bXMgOyBleGl0IDs7CisJICAgIEkqKSBlY2hvIGlhNjQtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgViopIGVjaG8gdmF4LWRlYy12bXMgOyBleGl0IDs7CisJZXNhYyA7OworICAgICo6WEVOSVg6KjpTeXNWKQorCWVjaG8gaTM4Ni1wYy14ZW5peAorCWV4aXQgOzsKKyAgICBpKjg2OnNreW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2t5b3NgZWNobyAke1VOQU1FX1JFTEVBU0V9YCB8IHNlZCAtZSAncy8gLiokLy8nCisJZXhpdCA7OworICAgIGkqODY6cmRvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXJkb3MKKwlleGl0IDs7CisgICAgaSo4NjpBUk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYXJvcworCWV4aXQgOzsKKyAgICB4ODZfNjQ6Vk1rZXJuZWw6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVzeAorCWV4aXQgOzsKK2VzYWMKKworI2VjaG8gJyhObyB1bmFtZSBjb21tYW5kIG9yIHVuYW1lIG91dHB1dCBub3QgcmVjb2duaXplZC4pJyAxPiYyCisjZWNobyAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiAxPiYyCisKK2V2YWwgJHNldF9jY19mb3JfYnVpbGQKK2NhdCA+JGR1bW15LmMgPDxFT0YKKyNpZmRlZiBfU0VRVUVOVF8KKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKK21haW4gKCkKK3sKKyNpZiBkZWZpbmVkIChzb255KQorI2lmIGRlZmluZWQgKE1JUFNFQikKKyAgLyogQkZEIHdhbnRzICJic2QiIGluc3RlYWQgb2YgIm5ld3NvcyIuICBQZXJoYXBzIEJGRCBzaG91bGQgYmUgY2hhbmdlZCwKKyAgICAgSSBkb24ndCBrbm93Li4uLiAgKi8KKyAgcHJpbnRmICgibWlwcy1zb255LWJzZFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAgcHJpbnRmICgibTY4ay1zb255LW5ld3NvcyVzXG4iLAorI2lmZGVmIE5FV1NPUzQKKwkiNCIKKyNlbHNlCisJIiIKKyNlbmRpZgorCSk7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fYXJtKSAmJiBkZWZpbmVkIChfX2Fjb3JuKSAmJiBkZWZpbmVkIChfX3VuaXgpCisgIHByaW50ZiAoImFybS1hY29ybi1yaXNjaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoaHAzMDApICYmICFkZWZpbmVkIChocHV4KQorICBwcmludGYgKCJtNjhrLWhwLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChOZVhUKQorI2lmICFkZWZpbmVkIChfX0FSQ0hJVEVDVFVSRV9fKQorI2RlZmluZSBfX0FSQ0hJVEVDVFVSRV9fICJtNjhrIgorI2VuZGlmCisgIGludCB2ZXJzaW9uOworICB2ZXJzaW9uPWAoaG9zdGluZm8gfCBzZWQgLW4gJ3MvLipOZVhUIE1hY2ggXChbMC05XSpcKS4qL1wxL3AnKSAyPi9kZXYvbnVsbGA7CisgIGlmICh2ZXJzaW9uIDwgNCkKKyAgICBwcmludGYgKCIlcy1uZXh0LW5leHRzdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBlbHNlCisgICAgcHJpbnRmICgiJXMtbmV4dC1vcGVuc3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE1VTFRJTUFYKSB8fCBkZWZpbmVkIChuMTYpCisjaWYgZGVmaW5lZCAoVU1BWFYpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1zeXN2XG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2lmIGRlZmluZWQgKENNVSkKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLW1hY2hcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fMzg2QlNEX18pCisgIHByaW50ZiAoImkzODYtcGMtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKHNlcXVlbnQpCisjaWYgZGVmaW5lZCAoaTM4NikKKyAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkIChuczMyMDAwKQorICBwcmludGYgKCJuczMyay1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX1NFUVVFTlRfKQorICAgIHN0cnVjdCB1dHNuYW1lIHVuOworCisgICAgdW5hbWUoJnVuKTsKKworICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMiIsIDIpID09IDApIHsKKwlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MlxuIik7IGV4aXQgKDApOworICAgIH0KKyAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjEiLCAyKSA9PSAwKSB7IC8qIFhYWCBpcyBWMSBjb3JyZWN0PyAqLworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgxXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIHByaW50ZiAoImkzODYtc2VxdWVudC1wdHhcbiIpOyBleGl0ICgwKTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkICh2YXgpCisjIGlmICFkZWZpbmVkICh1bHRyaXgpCisjICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgIGlmIGRlZmluZWQgKEJTRCkKKyMgICBpZiBCU0QgPT0gNDMKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zXG4iKTsgZXhpdCAoMCk7CisjICAgZWxzZQorIyAgICBpZiBCU0QgPT0gMTk5MDA2CisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM3Jlbm9cbiIpOyBleGl0ICgwKTsKKyMgICAgZWxzZQorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICBlbmRpZgorIyBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoYWxsaWFudCkgJiYgZGVmaW5lZCAoaTg2MCkKKyAgcHJpbnRmICgiaTg2MC1hbGxpYW50LWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyAgZXhpdCAoMSk7Cit9CitFT0YKKworJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKworIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5cGUgaW4gdGhlIGVudmlyb25tZW50LgorCit0ZXN0IC1kIC91c3IvYXBvbGxvICYmIHsgZWNobyAke0lTUH0tYXBvbGxvLSR7U1lTVFlQRX07IGV4aXQ7IH0KKworIyBDb252ZXggdmVyc2lvbnMgdGhhdCBwcmVkYXRlIHVuYW1lIGNhbiB1c2UgZ2V0c3lzaW5mbygxKQorCitpZiBbIC14IC91c3IvY29udmV4L2dldHN5c2luZm8gXQordGhlbgorICAgIGNhc2UgYGdldHN5c2luZm8gLWYgY3B1X3R5cGVgIGluCisgICAgYzEqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBjMzQqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzM4KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGM0KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgZXNhYworZmkKKworY2F0ID4mMiA8PEVPRgorJDA6IHVuYWJsZSB0byBndWVzcyBzeXN0ZW0gdHlwZQorCitUaGlzIHNjcmlwdCwgbGFzdCBtb2RpZmllZCAkdGltZXN0YW1wLCBoYXMgZmFpbGVkIHRvIHJlY29nbml6ZQordGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCisKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECithbmQKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAorCitJZiB0aGUgdmVyc2lvbiB5b3UgcnVuICgkMCkgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBwbGVhc2UKK3NlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlCitwZXJ0aW5lbnQgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIG5lZWRlZAoraW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgorCitjb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAorCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbGAKKworaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbGAKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbGAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsYAorCitVTkFNRV9NQUNISU5FID0gJHtVTkFNRV9NQUNISU5FfQorVU5BTUVfUkVMRUFTRSA9ICR7VU5BTUVfUkVMRUFTRX0KK1VOQU1FX1NZU1RFTSAgPSAke1VOQU1FX1NZU1RFTX0KK1VOQU1FX1ZFUlNJT04gPSAke1VOQU1FX1ZFUlNJT059CitFT0YKKworZXhpdCAxCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2NvbmZpZy5zdWIgYi9jdXJsLTcuMjUuMC9jb25maWcuc3ViCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM4OTRkYTQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9jb25maWcuc3ViCkBAIC0wLDAgKzEsMTc3MyBAQAorIyEgL2Jpbi9zaAorIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCisjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsCisjICAgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDEyLTAyLTEwJworCisjIFRoaXMgZmlsZSBpcyAoaW4gcHJpbmNpcGxlKSBjb21tb24gdG8gQUxMIEdOVSBzb2Z0d2FyZS4KKyMgVGhlIHByZXNlbmNlIG9mIGEgbWFjaGluZSBpbiB0aGlzIGZpbGUgc3VnZ2VzdHMgdGhhdCBTT01FIEdOVSBzb2Z0d2FyZQorIyBjYW4gaGFuZGxlIHRoYXQgbWFjaGluZS4gIEl0IGRvZXMgbm90IGltcGx5IEFMTCBHTlUgc29mdHdhcmUgY2FuLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKKyMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgR05VIENoYW5nZUxvZyBlbnRyeS4KKyMKKyMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCisjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KKyMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCisjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCisKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKworIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKKyMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCisjIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCisjIEVhY2ggcGFja2FnZSBpcyByZXNwb25zaWJsZSBmb3IgcmVwb3J0aW5nIHdoaWNoIHZhbGlkIGNvbmZpZ3VyYXRpb25zCisjIGl0IGRvZXMgbm90IHN1cHBvcnQuICBUaGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXN0aW5ndWlzaAorIyBhIGZhaWx1cmUgdG8gc3VwcG9ydCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG1lYW5pbmdsZXNzCisjIGNvbmZpZ3VyYXRpb24uCisKKyMgVGhlIGdvYWwgb2YgdGhpcyBmaWxlIGlzIHRvIG1hcCBhbGwgdGhlIHZhcmlvdXMgdmFyaWF0aW9ucyBvZiBhIGdpdmVuCisjIG1hY2hpbmUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgc2luZ2xlIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yIGluIHNvbWUgY2FzZXMsIHRoZSBuZXdlciBmb3VyLXBhcnQgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIEl0IGlzIHdyb25nIHRvIGVjaG8gYW55IG90aGVyIHR5cGUgb2Ygc3BlY2lmaWNhdGlvbi4KKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0gQ1BVLU1GUi1PUFNZUworICAgICAgICQwIFtPUFRJT05dIEFMSUFTCisKK0Nhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gbmFtZS4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKKworQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMgorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgorIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KK21heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorY2FzZSAkbWF5YmVfb3MgaW4KKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtYW5kcm9pZCogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBcCisgIGxpbnV4LXVjbGliYyogfCB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IFwKKyAga25ldGJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IFwKKyAga29wZW5zb2xhcmlzKi1nbnUqIHwgXAorICBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCisgICAgb3M9LSRtYXliZV9vcworICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCisgICAgOzsKKyAgYW5kcm9pZC1saW51eCkKKyAgICBvcz0tbGludXgtYW5kcm9pZAorICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgLXVua25vd24KKyAgICA7OworICAqKQorICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvLVteLV0qJC8vJ2AKKyAgICBpZiBbICRiYXNpY19tYWNoaW5lICE9ICQxIF0KKyAgICB0aGVuIG9zPWBlY2hvICQxIHwgc2VkICdzLy4qLS8tLydgCisgICAgZWxzZSBvcz07IGZpCisgICAgOzsKK2VzYWMKKworIyMjIExldCdzIHJlY29nbml6ZSBjb21tb24gbWFjaGluZXMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zIHNvCisjIyMgdGhhdCB0aGluZ3MgbGlrZSBjb25maWcuc3ViIGRlY3N0YXRpb24tMzEwMCB3b3JrLiAgV2UgYWxzbworIyMjIHJlY29nbml6ZSBzb21lIG1hbnVmYWN0dXJlcnMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zLCBzbyB3ZQorIyMjIGNhbiBwcm92aWRlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgYmVsb3cuCitjYXNlICRvcyBpbgorCS1zdW4qb3MqKQorCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMgaW52YWxpZCBpbnB1dC4KKwkJOzsKKwktZGVjKiB8IC1taXBzKiB8IC1zZXF1ZW50KiB8IC1lbmNvcmUqIHwgLXBjNTMyKiB8IC1zZ2kqIHwgLXNvbnkqIHwgXAorCS1hdHQqIHwgLTczMDAqIHwgLTMzMDAqIHwgLWRlbHRhKiB8IC1tb3Rvcm9sYSogfCAtc3VuWzIzNF0qIHwgXAorCS11bmljb20qIHwgLWlibSogfCAtbmV4dCB8IC1ocCB8IC1pc2kqIHwgLWFwb2xsbyB8IC1hbHRvcyogfCBcCisJLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKKwktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAorCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAorCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkgfCAtbWljcm9ibGF6ZSkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktYmx1ZWdlbmUqKQorCQlvcz0tY25rCisJCTs7CisJLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCisJCW9zPQorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLXNjb3V0KQorCQk7OworCS13cnMpCisJCW9zPS12eHdvcmtzCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktY2hvcnVzb3MqKQorCQlvcz0tY2hvcnVzb3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNyZGIpCisJCW9zPS1jaG9ydXNyZGIKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1oaXV4KikKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwktc2NvNikKKwkJb3M9LXNjbzV2NgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzUpCisJCW9zPS1zY28zLjJ2NQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzQpCisJCW9zPS1zY28zLjJ2NAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMi5bNC05XSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy9zY28zLjIuL3NjbzMuMnYvJ2AKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjJ2WzQtOV0qKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzV2NiopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvKikKKwkJb3M9LXNjbzMuMnYyCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktdWRrKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1pc2MpCisJCW9zPS1pc2MyLjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1jbGl4KikKKwkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWludGVyZ3JhcGgKKwkJOzsKKwktaXNjKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1seW54KikKKwkJb3M9LWx5bnhvcworCQk7OworCS1wdHgqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXNlcXVlbnQvJ2AKKwkJOzsKKwktd2luZG93c250KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3dpbmRvd3NudC93aW5udC8nYAorCQk7OworCS1wc29zKikKKwkJb3M9LXBzb3MKKwkJOzsKKwktbWludCB8IC1taW50WzAtOV0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYXRhcmkKKwkJb3M9LW1pbnQKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgYWxpYXNlcyBmb3IgY2VydGFpbiBDUFUtQ09NUEFOWSBjb21iaW5hdGlvbnMuCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZS4KKwkjIFNvbWUgYXJlIG9taXR0ZWQgaGVyZSBiZWNhdXNlIHRoZXkgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzIGJlbG93LgorCTE3NTBhIHwgNTgwIFwKKwl8IGEyOWsgXAorCXwgYWFyY2g2NCB8IGFhcmNoNjRfYmUgXAorCXwgYWxwaGEgfCBhbHBoYWV2WzQtOF0gfCBhbHBoYWV2NTYgfCBhbHBoYWV2Nls3OF0gfCBhbHBoYXBjYTVbNjddIFwKKwl8IGFscGhhNjQgfCBhbHBoYTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gfCBhbHBoYTY0cGNhNVs2N10gXAorCXwgYW0zM18yLjAgXAorCXwgYXJjIHwgYXJtIHwgYXJtW2JsXWUgfCBhcm1lW2xiXSB8IGFybXZbMjM0NV0gfCBhcm12WzM0NV1bbGJdIHwgYXZyIHwgYXZyMzIgXAorICAgICAgICB8IGJlMzIgfCBiZTY0IFwKKwl8IGJmaW4gXAorCXwgYzR4IHwgY2xpcHBlciBcCisJfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggXAorCXwgZXBpcGhhbnkgXAorCXwgZmlkbyB8IGZyMzAgfCBmcnYgXAorCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKKwl8IGhleGFnb24gXAorCXwgaTM3MCB8IGk4NjAgfCBpOTYwIHwgaWE2NCBcCisJfCBpcDJrIHwgaXEyMDAwIFwKKwl8IGxlMzIgfCBsZTY0IFwKKwl8IGxtMzIgXAorCXwgbTMyYyB8IG0zMnIgfCBtMzJybGUgfCBtNjgwMDAgfCBtNjhrIHwgbTg4ayBcCisJfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWNvcmUgfCBtZXAgfCBtZXRhZyBcCisJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xlIFwKKwl8IG1pcHMxNiBcCisJfCBtaXBzNjQgfCBtaXBzNjRlbCBcCisJfCBtaXBzNjRvY3Rlb24gfCBtaXBzNjRvY3Rlb25lbCBcCisJfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAorCXwgbWlwczY0cjU5MDAgfCBtaXBzNjRyNTkwMGVsIFwKKwl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCisJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCisJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCisJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCisJfCBtaXBzNjR2cjU5MDAgfCBtaXBzNjR2cjU5MDBlbCBcCisJfCBtaXBzaXNhMzIgfCBtaXBzaXNhMzJlbCBcCisJfCBtaXBzaXNhMzJyMiB8IG1pcHNpc2EzMnIyZWwgXAorCXwgbWlwc2lzYTY0IHwgbWlwc2lzYTY0ZWwgXAorCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKKwl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKKwl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCisJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAorCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbW94aWUgXAorCXwgbXQgXAorCXwgbXNwNDMwIFwKKwl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAorCXwgbmlvcyB8IG5pb3MyIFwKKwl8IG5zMTZrIHwgbnMzMmsgXAorCXwgb3BlbjggXAorCXwgb3IzMiBcCisJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAorCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIFwKKwl8IHB5cmFtaWQgXAorCXwgcmw3OCB8IHJ4IFwKKwl8IHNjb3JlIFwKKwl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCisJfCBzaDY0IHwgc2g2NGxlIFwKKwl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKKwl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCisJfCBzcHUgXAorCXwgdGFob2UgfCB0aWM0eCB8IHRpYzU0eCB8IHRpYzU1eCB8IHRpYzZ4IHwgdGljODAgfCB0cm9uIFwKKwl8IHViaWNvbTMyIFwKKwl8IHY4NTAgfCB2ODUwZSB8IHY4NTBlMSB8IHY4NTBlMiB8IHY4NTBlcyB8IHY4NTBlMnYzIFwKKwl8IHdlMzJrIFwKKwl8IHg4NiB8IHhjMTZ4IHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKKwl8IHo4ayB8IHo4MCkKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJYzU0eCkKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQk7OworCWM1NXgpCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KKwkJOzsKKwljNngpCisJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IHBpY29jaGlwKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwltODgxMTAgfCBtNjgwWzEyMzQ2XTAgfCBtNjgzPzIgfCBtNjgzNjAgfCBtNTIwMCB8IHY3MCB8IHc2NSB8IHo4aykKKwkJOzsKKwltczEpCisJCWJhc2ljX21hY2hpbmU9bXQtdW5rbm93bgorCQk7OworCisJc3Ryb25nYXJtIHwgdGh1bWIgfCB4c2NhbGUpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJOzsKKwl4Z2F0ZSkKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCW9zPS1ub25lCisJCTs7CisJeHNjYWxlZWIpCisJCWJhc2ljX21hY2hpbmU9YXJtZWItdW5rbm93bgorCQk7OworCisJeHNjYWxlZWwpCisJCWJhc2ljX21hY2hpbmU9YXJtZWwtdW5rbm93bgorCQk7OworCisJIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKKwkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKKwkjICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMuCisJaSo4NiB8IHg4Nl82NCkKKwkgIGJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtcGMKKwkgIDs7CisJIyBPYmplY3QgaWYgbW9yZSB0aGFuIG9uZSBjb21wYW55IG5hbWUgd29yZC4KKwkqLSotKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aCBjb21wYW55IG5hbWUuCisJNTgwLSogXAorCXwgYTI5ay0qIFwKKwl8IGFhcmNoNjQtKiB8IGFhcmNoNjRfYmUtKiBcCisJfCBhbHBoYS0qIHwgYWxwaGFldls0LThdLSogfCBhbHBoYWV2NTYtKiB8IGFscGhhZXY2Wzc4XS0qIFwKKwl8IGFscGhhNjQtKiB8IGFscGhhNjRldls0LThdLSogfCBhbHBoYTY0ZXY1Ni0qIHwgYWxwaGE2NGV2Nls3OF0tKiBcCisJfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIFwKKwl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAorCXwgYXZyLSogfCBhdnIzMi0qIFwKKwl8IGJlMzItKiB8IGJlNjQtKiBcCisJfCBiZmluLSogfCBiczIwMDAtKiBcCisJfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiBcCisJfCBjbGlwcGVyLSogfCBjcmF5bnYtKiB8IGN5ZHJhLSogXAorCXwgZDEwdi0qIHwgZDMwdi0qIHwgZGx4LSogXAorCXwgZWx4c2ktKiBcCisJfCBmMzBbMDFdLSogfCBmNzAwLSogfCBmaWRvLSogfCBmcjMwLSogfCBmcnYtKiB8IGZ4ODAtKiBcCisJfCBoODMwMC0qIHwgaDg1MDAtKiBcCisJfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAorCXwgaGV4YWdvbi0qIFwKKwl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCisJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBsZTMyLSogfCBsZTY0LSogXAorCXwgbG0zMi0qIFwKKwl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKKwl8IG02ODAwMC0qIHwgbTY4MFswMTIzNDZdMC0qIHwgbTY4MzYwLSogfCBtNjgzPzItKiB8IG02OGstKiBcCisJfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogfCBtZXRhZy0qIHwgbWljcm9ibGF6ZS0qIFwKKwl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKKwl8IG1pcHMxNi0qIFwKKwl8IG1pcHM2NC0qIHwgbWlwczY0ZWwtKiBcCisJfCBtaXBzNjRvY3Rlb24tKiB8IG1pcHM2NG9jdGVvbmVsLSogXAorCXwgbWlwczY0b3Jpb24tKiB8IG1pcHM2NG9yaW9uZWwtKiBcCisJfCBtaXBzNjRyNTkwMC0qIHwgbWlwczY0cjU5MDBlbC0qIFwKKwl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAorCXwgbWlwczY0dnI0MTAwLSogfCBtaXBzNjR2cjQxMDBlbC0qIFwKKwl8IG1pcHM2NHZyNDMwMC0qIHwgbWlwczY0dnI0MzAwZWwtKiBcCisJfCBtaXBzNjR2cjUwMDAtKiB8IG1pcHM2NHZyNTAwMGVsLSogXAorCXwgbWlwczY0dnI1OTAwLSogfCBtaXBzNjR2cjU5MDBlbC0qIFwKKwl8IG1pcHNpc2EzMi0qIHwgbWlwc2lzYTMyZWwtKiBcCisJfCBtaXBzaXNhMzJyMi0qIHwgbWlwc2lzYTMycjJlbC0qIFwKKwl8IG1pcHNpc2E2NC0qIHwgbWlwc2lzYTY0ZWwtKiBcCisJfCBtaXBzaXNhNjRyMi0qIHwgbWlwc2lzYTY0cjJlbC0qIFwKKwl8IG1pcHNpc2E2NHNiMS0qIHwgbWlwc2lzYTY0c2IxZWwtKiBcCisJfCBtaXBzaXNhNjRzcjcxay0qIHwgbWlwc2lzYTY0c3I3MWtlbC0qIFwKKwl8IG1pcHN0eDM5LSogfCBtaXBzdHgzOWVsLSogXAorCXwgbW1peC0qIFwKKwl8IG10LSogXAorCXwgbXNwNDMwLSogXAorCXwgbmRzMzItKiB8IG5kczMybGUtKiB8IG5kczMyYmUtKiBcCisJfCBuaW9zLSogfCBuaW9zMi0qIFwKKwl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAorCXwgb3BlbjgtKiBcCisJfCBvcmlvbi0qIFwKKwl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAorCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogXAorCXwgcHlyYW1pZC0qIFwKKwl8IHJsNzgtKiB8IHJvbXAtKiB8IHJzNjAwMC0qIHwgcngtKiBcCisJfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzI0XWFlYi0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCisJfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKKwl8IHNwYXJjLSogfCBzcGFyYzY0LSogfCBzcGFyYzY0Yi0qIHwgc3BhcmM2NHYtKiB8IHNwYXJjODZ4LSogfCBzcGFyY2xldC0qIFwKKwl8IHNwYXJjbGl0ZS0qIFwKKwl8IHNwYXJjdjgtKiB8IHNwYXJjdjktKiB8IHNwYXJjdjliLSogfCBzcGFyY3Y5di0qIHwgc3YxLSogfCBzeD8tKiBcCisJfCB0YWhvZS0qIFwKKwl8IHRpYzMwLSogfCB0aWM0eC0qIHwgdGljNTR4LSogfCB0aWM1NXgtKiB8IHRpYzZ4LSogfCB0aWM4MC0qIFwKKwl8IHRpbGUqLSogXAorCXwgdHJvbi0qIFwKKwl8IHViaWNvbTMyLSogXAorCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHY4NTBlMS0qIHwgdjg1MGVzLSogfCB2ODUwZTItKiB8IHY4NTBlMnYzLSogXAorCXwgdmF4LSogXAorCXwgd2UzMmstKiBcCisJfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIFwKKwl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhKi0qIFwKKwl8IHltcC0qIFwKKwl8IHo4ay0qIHwgejgwLSopCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZSwgd2l0aCBnbG9iIG1hdGNoLgorCXh0ZW5zYSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKKwkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgorCTM4NmJzZCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LWJzZAorCQk7OworCTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5peHBjKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1hdHQKKwkJOzsKKwkzYiopCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJYTI5a2hpZikKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJYWJhY3VzKQorCQliYXNpY19tYWNoaW5lPWFiYWN1cy11bmtub3duCisJCTs7CisJYWRvYmU2OGspCisJCWJhc2ljX21hY2hpbmU9bTY4MDEwLWFkb2JlCisJCW9zPS1zY291dAorCQk7OworCWFsbGlhbnQgfCBmeDgwKQorCQliYXNpY19tYWNoaW5lPWZ4ODAtYWxsaWFudAorCQk7OworCWFsdG9zIHwgYWx0b3MzMDY4KQorCQliYXNpY19tYWNoaW5lPW02OGstYWx0b3MKKwkJOzsKKwlhbTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLW5vbmUKKwkJb3M9LWJzZAorCQk7OworCWFtZDY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQk7OworCWFtZDY0LSopCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYW1kYWhsKQorCQliYXNpY19tYWNoaW5lPTU4MC1hbWRhaGwKKwkJb3M9LXN5c3YKKwkJOzsKKwlhbWlnYSB8IGFtaWdhLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCTs7CisJYW1pZ2FvcyB8IGFtaWdhZG9zKQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tYW1pZ2FvcworCQk7OworCWFtaWdhdW5peCB8IGFtaXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1zeXN2NAorCQk7OworCWFwb2xsbzY4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCW9zPS1zeXN2CisJCTs7CisJYXBvbGxvNjhic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LWJzZAorCQk7OworCWFyb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tYXJvcworCQk7OworCWF1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCW9zPS1hdXgKKwkJOzsKKwliYWxhbmNlKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJYmxhY2tmaW4pCisJCWJhc2ljX21hY2hpbmU9YmZpbi11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCWJsYWNrZmluLSopCisJCWJhc2ljX21hY2hpbmU9YmZpbi1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlibHVlZ2VuZSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LWNuaworCQk7OworCWM1NHgtKikKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljNTV4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzZ4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNngtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljOTApCisJCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNlZ2NjKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1jZWdjYworCQk7OworCWNvbnZleC1jMSkKKwkJYmFzaWNfbWFjaGluZT1jMS1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMikKKwkJYmFzaWNfbWFjaGluZT1jMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzIpCisJCWJhc2ljX21hY2hpbmU9YzMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzNCkKKwkJYmFzaWNfbWFjaGluZT1jMzQtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM4KQorCQliYXNpY19tYWNoaW5lPWMzOC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNyYXkgfCBqOTApCisJCWJhc2ljX21hY2hpbmU9ajkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNyYXludikKKwkJYmFzaWNfbWFjaGluZT1jcmF5bnYtY3JheQorCQlvcz0tdW5pY29zbXAKKwkJOzsKKwljcjE2IHwgY3IxNi0qKQorCQliYXNpY19tYWNoaW5lPWNyMTYtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJY3JkcyB8IHVub3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1jcmRzCisJCTs7CisJY3Jpc3YzMiB8IGNyaXN2MzItKiB8IGV0cmF4ZnMqKQorCQliYXNpY19tYWNoaW5lPWNyaXN2MzItYXhpcworCQk7OworCWNyaXMgfCBjcmlzLSogfCBldHJheCopCisJCWJhc2ljX21hY2hpbmU9Y3Jpcy1heGlzCisJCTs7CisJY3J4KQorCQliYXNpY19tYWNoaW5lPWNyeC11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwlkYTMwIHwgZGEzMC0qKQorCQliYXNpY19tYWNoaW5lPW02OGstZGEzMAorCQk7OworCWRlY3N0YXRpb24gfCBkZWNzdGF0aW9uLTMxMDAgfCBwbWF4IHwgcG1heC0qIHwgcG1pbiB8IGRlYzMxMDAgfCBkZWNzdGF0bikKKwkJYmFzaWNfbWFjaGluZT1taXBzLWRlYworCQk7OworCWRlY3N5c3RlbTEwKiB8IGRlYzEwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMxMAorCQk7OworCWRlY3N5c3RlbTIwKiB8IGRlYzIwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMyMAorCQk7OworCWRlbHRhIHwgMzMwMCB8IG1vdG9yb2xhLTMzMDAgfCBtb3Rvcm9sYS1kZWx0YSBcCisJICAgICAgfCAzMzAwLW1vdG9yb2xhIHwgZGVsdGEtbW90b3JvbGEpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1tb3Rvcm9sYQorCQk7OworCWRlbHRhODgpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQorCQlvcz0tc3lzdjMKKwkJOzsKKwlkaWNvcykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1kaWNvcworCQk7OworCWRqZ3BwKQorCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKKwkJb3M9LW1zZG9zZGpncHAKKwkJOzsKKwlkcHgyMCB8IGRweDIwLSopCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWJ1bGwKKwkJb3M9LWJvc3gKKwkJOzsKKwlkcHgyKiB8IGRweDIqLWJ1bGwpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCisJCW9zPS1zeXN2MworCQk7OworCWVibW9uMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS1lYm1vbgorCQk7OworCWVseHNpKQorCQliYXNpY19tYWNoaW5lPWVseHNpLWVseHNpCisJCW9zPS1ic2QKKwkJOzsKKwllbmNvcmUgfCB1bWF4IHwgbW1heCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1lbmNvcmUKKwkJOzsKKwllczE4MDAgfCBPU0U2OGsgfCBvc2U2OGsgfCBvc2UgfCBPU0UpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CisJZngyODAwKQorCQliYXNpY19tYWNoaW5lPWk4NjAtYWxsaWFudAorCQk7OworCWdlbml4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLW5zCisJCTs7CisJZ21pY3JvKQorCQliYXNpY19tYWNoaW5lPXRyb24tZ21pY3JvCisJCW9zPS1zeXN2CisJCTs7CisJZ28zMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1nbzMyCisJCTs7CisJaDMwNTByKiB8IGhpdXgqKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCWg4MzAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWg4MzAweHJheSkKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS14cmF5CisJCTs7CisJaDg1MDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDg1MDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaGFycmlzKQorCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCW9zPS1zeXN2MworCQk7OworCWhwMzAwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwMzAwYnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWJzZAorCQk7OworCWhwMzAwaHB1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ocHV4CisJCTs7CisJaHAzazlbMC05XVswLTldIHwgaHA5WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azJbMC05XVswLTldIHwgaHA5azMxWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWhwCisJCTs7CisJaHA5azNbMi05XVswLTldKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDlrNlswLTldWzAtOV0gfCBocDZbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrN1swLTc5XVswLTldIHwgaHA3WzAtNzldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs3OFswLTldIHwgaHA3OFswLTldKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFs2N10xIHwgaHA4WzY3XTEgfCBocDlrODBbMjRdIHwgaHA4MFsyNF0gfCBocDlrOFs3OF05IHwgaHA4Wzc4XTkgfCBocDlrODkzIHwgaHA4OTMpCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMTM2NzldIHwgaHA4WzAtOV1bMTM2NzldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzAtOV0gfCBocDhbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocHBhLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwlocHBhb3NmKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LW9zZgorCQk7OworCWhwcHJvKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LXByb2VsZgorCQk7OworCWkzNzAtaWJtKiB8IGlibSopCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJOzsKKwlpKjg2djMyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3YzMgorCQk7OworCWkqODZ2NCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdjQKKwkJOzsKKwlpKjg2dikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2CisJCTs7CisJaSo4NnNvbDIpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc29sYXJpczIKKwkJOzsKKwlpMzg2bWFjaCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LW1hY2gKKwkJb3M9LW1hY2gKKwkJOzsKKwlpMzg2LXZzdGEgfCB2c3RhKQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tdnN0YQorCQk7OworCWlyaXMgfCBpcmlzNGQpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zZ2kKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1pcml4KikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LWlyaXg0CisJCQk7OworCQllc2FjCisJCTs7CisJaXNpNjggfCBpc2kpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1pc2kKKwkJb3M9LXN5c3YKKwkJOzsKKwltNjhrbm9tbXUpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCW02OGtub21tdS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJbTg4ay1vbXJvbiopCisJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgorCQk7OworCW1hZ251bSB8IG0zMjMwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQlvcz0tc3lzdgorCQk7OworCW1lcmxpbikKKwkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCisJCW9zPS1zeXN2CisJCTs7CisJbWljcm9ibGF6ZSkKKwkJYmFzaWNfbWFjaGluZT1taWNyb2JsYXplLXhpbGlueAorCQk7OworCW1pbmd3MzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCW1pbmd3MzJjZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tbWluZ3czMmNlCisJCTs7CisJbWluaWZyYW1lKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworCW1pcHMzKi0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAorCQk7OworCW1pcHMzKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgorCQk7OworCW1vbml0b3IpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1zZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1zZG9zCisJCTs7CisJbXMxLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbXMxLS9tdC0vJ2AKKwkJOzsKKwltc3lzKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1zeXMKKwkJOzsKKwltdnMpCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJb3M9LW12cworCQk7OworCW5hY2wpCisJCWJhc2ljX21hY2hpbmU9bGUzMi11bmtub3duCisJCW9zPS1uYWNsCisJCTs7CisJbmNyMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgorCQlvcz0tc3lzdjQKKwkJOzsKKwluZXRic2QzODYpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1uZXRic2QKKwkJOzsKKwluZXR3aW5kZXIpCisJCWJhc2ljX21hY2hpbmU9YXJtdjRsLXJlYmVsCisJCW9zPS1saW51eAorCQk7OworCW5ld3MgfCBuZXdzNzAwIHwgbmV3czgwMCB8IG5ld3M5MDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzMTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMzAtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmV3cy0zNjAwIHwgcmlzYy1uZXdzKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmVjdjcwKQorCQliYXNpY19tYWNoaW5lPXY3MC1uZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwluZXh0IHwgbSotbmV4dCApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uZXh0CisJCWNhc2UgJG9zIGluCisJCSAgICAtbmV4dHN0ZXAqICkKKwkJCTs7CisJCSAgICAtbnMyKikKKwkJICAgICAgb3M9LW5leHRzdGVwMgorCQkJOzsKKwkJICAgICopCisJCSAgICAgIG9zPS1uZXh0c3RlcDMKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwluaDMwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaFs0NV0wMDApCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaW5keTk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1uaW5keQorCQk7OworCW1vbjk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1tb245NjAKKwkJOzsKKwlub25zdG9wdXgpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1jb21wYXEKKwkJb3M9LW5vbnN0b3B1eAorCQk7OworCW5wMSkKKwkJYmFzaWNfbWFjaGluZT1ucDEtZ291bGQKKwkJOzsKKwluZW8tdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5lby10YW5kZW0KKwkJOzsKKwluc2UtdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zZS10YW5kZW0KKwkJOzsKKwluc3ItdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zci10YW5kZW0KKwkJOzsKKwlvcDUwbi0qIHwgb3A2MGMtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQlvcz0tcHJvZWxmCisJCTs7CisJb3BlbnJpc2MgfCBvcGVucmlzYy0qKQorCQliYXNpY19tYWNoaW5lPW9yMzItdW5rbm93bgorCQk7OworCW9zNDAwKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1vczQwMAorCQk7OworCU9TRTY4MDAwIHwgb3NlNjgwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlvczY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5vbmUKKwkJb3M9LW9zNjhrCisJCTs7CisJcGEtaGl0YWNoaSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwlwYXJhZ29uKQorCQliYXNpY19tYWNoaW5lPWk4NjAtaW50ZWwKKwkJb3M9LW9zZgorCQk7OworCXBhcmlzYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJcGFyaXNjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlwYmQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtdHRpCisJCTs7CisJcGJiKQorCQliYXNpY19tYWNoaW5lPW02OGstdHRpCisJCTs7CisJcGM1MzIgfCBwYzUzMi0qKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXBjNTMyCisJCTs7CisJcGM5OCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCTs7CisJcGM5OC0qKQorCQliYXNpY19tYWNoaW5lPWkzODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtIHwgcDUgfCBrNSB8IGs2IHwgbmV4Z2VuIHwgdmlhYzMpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQk7OworCXBlbnRpdW1wcm8gfCBwNiB8IDZ4ODYgfCBhdGhsb24gfCBhdGhsb25fKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bWlpIHwgcGVudGl1bTIgfCBwZW50aXVtaWlpIHwgcGVudGl1bTMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW00KQorCQliYXNpY19tYWNoaW5lPWk3ODYtcGMKKwkJOzsKKwlwZW50aXVtLSogfCBwNS0qIHwgazUtKiB8IGs2LSogfCBuZXhnZW4tKiB8IHZpYWMzLSopCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24tKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bWlpLSogfCBwZW50aXVtMi0qIHwgcGVudGl1bWlpaS0qIHwgcGVudGl1bTMtKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bTQtKikKKwkJYmFzaWNfbWFjaGluZT1pNzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcG4pCisJCWJhc2ljX21hY2hpbmU9cG4tZ291bGQKKwkJOzsKKwlwb3dlcikJYmFzaWNfbWFjaGluZT1wb3dlci1pYm0KKwkJOzsKKwlwcGMgfCBwcGNiZSkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJOzsKKwlwcGMtKiB8IHBwY2JlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCisJCTs7CisJcHBjbGUtKiB8IHBvd2VycGNsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgorCQk7OworCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjNjRsZSB8IHBvd2VycGM2NGxpdHRsZSB8IHBwYzY0LWxlIHwgcG93ZXJwYzY0LWxpdHRsZSkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS11bmtub3duCisJCTs7CisJcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwczIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1pYm0KKwkJOzsKKwlwdzMyKQorCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgorCQlvcz0tcHczMgorCQk7OworCXJkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tcmRvcworCQk7OworCXJvbTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCXJtWzQ2XTAwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwlzMzkwIHwgczM5MC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHggfCBzMzkweC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQk7OworCXNhMjkyMDApCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXNiMSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgorCQk7OworCXNiMWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KKwkJOzsKKwlzZGUpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQorCQlvcz0tZWxmCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OworCXNlcXVlbnQpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCTs7CisJc2gpCisJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdHJvbmdhcm0tKiB8IHRodW1iLSopCisJCWJhc2ljX21hY2hpbmU9YXJtLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJc3VuMikKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCTs7CisJc3VuMm9zMykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4yb3M0KQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjNvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjNvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRvczMpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW40b3M0KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNHNvbDIpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zb2xhcmlzMgorCQk7OworCXN1bjMgfCBzdW4zLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJOzsKKwlzdW40KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCXN1bjM4NiB8IHN1bjM4NmkgfCByb2FkcnVubmVyKQorCQliYXNpY19tYWNoaW5lPWkzODYtc3VuCisJCTs7CisJc3YxKQorCQliYXNpY19tYWNoaW5lPXN2MS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwlzeW1tZXRyeSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJdDNlKQorCQliYXNpY19tYWNoaW5lPWFscGhhZXY1LWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXQ5MCkKKwkJYmFzaWNfbWFjaGluZT10OTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdGlsZSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CisJdHgzOSkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCisJCTs7CisJdHgzOWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5ZWwtdW5rbm93bgorCQk7OworCXRvYWQxKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAorCQlvcz0tdG9wczIwCisJCTs7CisJdG93ZXIgfCB0b3dlci0zMikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5jcgorCQk7OworCXRwZikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJb3M9LXRwZgorCQk7OworCXVkaTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJdWx0cmEzKQorCQliYXNpY19tYWNoaW5lPWEyOWstbnl1CisJCW9zPS1zeW0xCisJCTs7CisJdjgxMCB8IG5lY3Y4MTApCisJCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKKwkJb3M9LW5vbmUKKwkJOzsKKwl2YXh2KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwl2bXMpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tdm1zCisJCTs7CisJdnBwKnx2eHx2eC0qKQorCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQorCQk7OworCXZ4d29ya3M5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdzY1KikKKwkJYmFzaWNfbWFjaGluZT13NjUtd2RjCisJCW9zPS1ub25lCisJCTs7CisJdzg5ay0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQlvcz0tcHJvZWxmCisJCTs7CisJeGJveCkKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJeHBzIHwgeHBzMTAwKQorCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKKwkJOzsKKwl4c2NhbGUtKiB8IHhzY2FsZWVbYmxdLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXnhzY2FsZS9hcm0vJ2AKKwkJOzsKKwl5bXApCisJCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXo4ay0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCXo4MC0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejgwLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCW5vbmUpCisJCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCisJCW9zPS1ub25lCisJCTs7CisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KKyMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KKwl3ODlrKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQk7OworCW9wNTBuKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJb3A2MGMpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlyb21wKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJbW1peCkKKwkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCisJCTs7CisJcnM2MDAwKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KKwkJOzsKKwl2YXgpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQk7OworCXBkcDEwKQorCQkjIHRoZXJlIGFyZSBtYW55IGNsb25lcywgc28gREVDIGlzIG5vdCBhIHNhZmUgYmV0CisJCWJhc2ljX21hY2hpbmU9cGRwMTAtdW5rbm93bgorCQk7OworCXBkcDExKQorCQliYXNpY19tYWNoaW5lPXBkcDExLWRlYworCQk7OworCXdlMzJrKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKwkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCisJCTs7CisJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJY3lkcmEpCisJCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQorCQk7OworCW9yaW9uKQorCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAorCQk7OworCW9yaW9uMTA1KQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCisJCTs7CisJbWFjIHwgbXB3IHwgbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCTs7CisJcG1hYyB8IHBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKKwkJOzsKKwkqLXVua25vd24pCisJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLWRpZ2l0YWwqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKKwkJOzsKKwkqLWNvbW1vZG9yZSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCisJCTs7CisJKikKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisKK2lmIFsgeCIkb3MiICE9IHgiIiBdCit0aGVuCitjYXNlICRvcyBpbgorCSMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCisJIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KKwkjIC1zb2xhcmlzKiBpcyBhIGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KKwktYXVyb3JhdXgpCisJCW9zPS1hdXJvcmF1eAorCQk7OworCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCisJCTs7CisJLXNvbGFyaXMpCisJCW9zPS1zb2xhcmlzMgorCQk7OworCS1zdnI0KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXVuaXh3YXJlKikKKwkJb3M9LXN5c3Y0LjJ1dworCQk7OworCS1nbnUvbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCSMgRmlyc3QgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMuCisJIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KKwkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KKwktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAorCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtYXVyb3JhdXgqIHwgLXNvbGFyaXMqIFwKKwkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogXAorCSAgICAgIHwgLWFtaWdhb3MqIHwgLWFtaWdhZG9zKiB8IC1tc2RvcyogfCAtbmV3c29zKiB8IC11bmljb3MqIHwgLWFvZiogXAorCSAgICAgIHwgLWFvcyogfCAtYXJvcyogXAorCSAgICAgIHwgLW5pbmR5KiB8IC12eHNpbSogfCAtdnh3b3JrcyogfCAtZWJtb24qIHwgLWhtcyogfCAtbXZzKiBcCisJICAgICAgfCAtY2xpeCogfCAtcmlzY29zKiB8IC11bmlwbHVzKiB8IC1pcmlzKiB8IC1ydHUqIHwgLXhlbml4KiBcCisJICAgICAgfCAtaGl1eCogfCAtMzg2YnNkKiB8IC1rbmV0YnNkKiB8IC1taXJic2QqIHwgLW5ldGJzZCogXAorCSAgICAgIHwgLW9wZW5ic2QqIHwgLXNvbGlkYnNkKiBcCisJICAgICAgfCAtZWtrb2JzZCogfCAta2ZyZWVic2QqIHwgLWZyZWVic2QqIHwgLXJpc2NpeCogfCAtbHlueG9zKiBcCisJICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAorCSAgICAgIHwgLXB0eCogfCAtY29mZiogfCAtZWNvZmYqIHwgLXdpbm50KiB8IC1kb21haW4qIHwgLXZzdGEqIFwKKwkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAorCSAgICAgIHwgLWN5Z3dpbiogfCAtbXN5cyogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKwkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LWFuZHJvaWQqIFwKKwkgICAgICB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LXVjbGliYyogXAorCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKwkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAorCSAgICAgIHwgLXN0b3JtLWNoYW9zKiB8IC10b3BzMTAqIHwgLXRlbmV4KiB8IC10b3BzMjAqIHwgLWl0cyogXAorCSAgICAgIHwgLW9zMiogfCAtdm9zKiB8IC1wYWxtb3MqIHwgLXVjbGludXgqIHwgLW51Y2xldXMqIFwKKwkgICAgICB8IC1tb3JwaG9zKiB8IC1zdXBlcnV4KiB8IC1ydG1rKiB8IC1ydG1rLW5vdmEqIHwgLXdpbmRpc3MqIFwKKwkgICAgICB8IC1wb3dlcm1heCogfCAtZG5peCogfCAtbng2IHwgLW54NyB8IC1zZWkqIHwgLWRyYWdvbmZseSogXAorCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqIHwgLWVzKikKKwkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJCTs7CisJLXFueCopCisJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkJICAgIHg4Ni0qIHwgaSo4Ni0qKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tbnRvJG9zCisJCQk7OworCQllc2FjCisJCTs7CisJLW50by1xbngqKQorCQk7OworCS1udG8qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKKwkJOzsKKwktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCisJICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAorCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCisJCTs7CisJLW1hYyopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwkJOzsKKwktbGludXgtZGlldGxpYmMpCisJCW9zPS1saW51eC1kaWV0bGliYworCQk7OworCS1saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwktc3Vub3M1KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAorCQk7OworCS1zdW5vczYqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCTs7CisJLW9wZW5lZCopCisJCW9zPS1vcGVuZWRpdGlvbgorCQk7OworCS1vczQwMCopCisJCW9zPS1vczQwMAorCQk7OworCS13aW5jZSopCisJCW9zPS13aW5jZQorCQk7OworCS1vc2Zyb3NlKikKKwkJb3M9LW9zZnJvc2UKKwkJOzsKKwktb3NmKikKKwkJb3M9LW9zZgorCQk7OworCS11dGVrKikKKwkJb3M9LWJzZAorCQk7OworCS1keW5peCopCisJCW9zPS1ic2QKKwkJOzsKKwktYWNpcyopCisJCW9zPS1hb3MKKwkJOzsKKwktYXRoZW9zKikKKwkJb3M9LWF0aGVvcworCQk7OworCS1zeWxsYWJsZSopCisJCW9zPS1zeWxsYWJsZQorCQk7OworCS0zODZic2QpCisJCW9zPS1ic2QKKwkJOzsKKwktY3RpeCogfCAtdXRzKikKKwkJb3M9LXN5c3YKKwkJOzsKKwktbm92YSopCisJCW9zPS1ydG1rLW5vdmEKKwkJOzsKKwktbnMyICkKKwkJb3M9LW5leHRzdGVwMgorCQk7OworCS1uc2sqKQorCQlvcz0tbnNrCisJCTs7CisJIyBQcmVzZXJ2ZSB0aGUgdmVyc2lvbiBudW1iZXIgb2Ygc2luaXg1LgorCS1zaW5peDUuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKKwkJOzsKKwktc2luaXgqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdHBmKikKKwkJb3M9LXRwZgorCQk7OworCS10cml0b24qKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktb3NzKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCS1zdnIzKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3lzdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGFmdGVyIC1zeXN2cjQuCisJLXN5c3YqKQorCQk7OworCS1vc2UqKQorCQlvcz0tb3NlCisJCTs7CisJLWVzMTgwMCopCisJCW9zPS1vc2UKKwkJOzsKKwkteGVuaXgpCisJCW9zPS14ZW5peAorCQk7OworCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCW9zPS1taW50CisJCTs7CisJLWFyb3MqKQorCQlvcz0tYXJvcworCQk7OworCS1rYW9zKikKKwkJb3M9LWthb3MKKwkJOzsKKwktenZtb2UpCisJCW9zPS16dm1vZQorCQk7OworCS1kaWNvcyopCisJCW9zPS1kaWNvcworCQk7OworCS1uYWNsKikKKwkJOzsKKwktbm9uZSkKKwkJOzsKKwkqKQorCQkjIEdldCByaWQgb2YgdGhlIGAtJyBhdCB0aGUgYmVnaW5uaW5nIG9mICRvcy4KKwkJb3M9YGVjaG8gJG9zIHwgc2VkICdzL1teLV0qLS8vJ2AKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBzeXN0ZW0gXGAkb3NcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworZWxzZQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgbWFjaGluZXMuCisjIFRoZSB2YWx1ZSBzaG91bGQgYmUgd2hhdCB0aGUgdmVuZG9yIGN1cnJlbnRseSBzaGlwcyBvdXQgdGhlIGRvb3Igd2l0aCB0aGVpcgorIyBtYWNoaW5lIG9yIHB1dCBhbm90aGVyIHdheSwgdGhlIG1vc3QgcG9wdWxhciBvcyBwcm92aWRlZCB3aXRoIHRoZSBtYWNoaW5lLgorCisjIE5vdGUgdGhhdCBpZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHRvIG1hdGNoICItTUFOVUZBQ1RVUkVSIiBoZXJlIChzYXksCisjICItc3VuIiksIHRoZW4geW91IGhhdmUgdG8gdGVsbCB0aGUgY2FzZSBzdGF0ZW1lbnQgdXAgdG93YXJkcyB0aGUgdG9wCisjIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZyBzeXN0ZW0uICBPdGhlcndpc2UsIGNvZGUgYWJvdmUKKyMgd2lsbCBzaWduYWwgYW4gZXJyb3Igc2F5aW5nIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZworIyBzeXN0ZW0sIGFuZCB3ZSdsbCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludC4KKworY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCXNjb3JlLSopCisJCW9zPS1lbGYKKwkJOzsKKwlzcHUtKikKKwkJb3M9LWVsZgorCQk7OworCSotYWNvcm4pCisJCW9zPS1yaXNjaXgxLjIKKwkJOzsKKwlhcm0qLXJlYmVsKQorCQlvcz0tbGludXgKKwkJOzsKKwlhcm0qLXNlbWkpCisJCW9zPS1hb3V0CisJCTs7CisJYzR4LSogfCB0aWM0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzZ4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgorCXBkcDEwLSopCisJCW9zPS10b3BzMjAKKwkJOzsKKwlwZHAxMS0qKQorCQlvcz0tbm9uZQorCQk7OworCSotZGVjIHwgdmF4LSopCisJCW9zPS11bHRyaXg0LjIKKwkJOzsKKwltNjgqLWFwb2xsbykKKwkJb3M9LWRvbWFpbgorCQk7OworCWkzODYtc3VuKQorCQlvcz0tc3Vub3M0LjAuMgorCQk7OworCW02ODAwMC1zdW4pCisJCW9zPS1zdW5vczMKKwkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz0tYW91dAorCQk7OworCW1lcC0qKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotY2lzY28pCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi0qKQorCQlvcz0tZWxmCisJCTs7CisJb3IzMi0qKQorCQlvcz0tY29mZgorCQk7OworCSotdHRpKQkjIG11c3QgYmUgYmVmb3JlIHNwYXJjIGVudHJ5IG9yIHdlIGdldCB0aGUgd3Jvbmcgb3MuCisJCW9zPS1zeXN2MworCQk7OworCXNwYXJjLSogfCAqLXN1bikKKwkJb3M9LXN1bm9zNC4xLjEKKwkJOzsKKwkqLWJlKQorCQlvcz0tYmVvcworCQk7OworCSotaGFpa3UpCisJCW9zPS1oYWlrdQorCQk7OworCSotaWJtKQorCQlvcz0tYWl4CisJCTs7CisJKi1rbnV0aCkKKwkJb3M9LW1taXh3YXJlCisJCTs7CisJKi13ZWMpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLXdpbmJvbmQpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLW9raSkKKwkJb3M9LXByb2VsZgorCQk7OworCSotaHApCisJCW9zPS1ocHV4CisJCTs7CisJKi1oaXRhY2hpKQorCQlvcz0taGl1eAorCQk7OworCWk4NjAtKiB8ICotYXR0IHwgKi1uY3IgfCAqLWFsdG9zIHwgKi1tb3Rvcm9sYSB8ICotY29udmVyZ2VudCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWNibSkKKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwkqLWRnKQorCQlvcz0tZGd1eAorCQk7OworCSotZG9scGhpbikKKwkJb3M9LXN5c3YzCisJCTs7CisJbTY4ay1jY3VyKQorCQlvcz0tcnR1CisJCTs7CisJbTg4ay1vbXJvbiopCisJCW9zPS1sdW5hCisJCTs7CisJKi1uZXh0ICkKKwkJb3M9LW5leHRzdGVwCisJCTs7CisJKi1zZXF1ZW50KQorCQlvcz0tcHR4CisJCTs7CisJKi1jcmRzKQorCQlvcz0tdW5vcworCQk7OworCSotbnMpCisJCW9zPS1nZW5peAorCQk7OworCWkzNzAtKikKKwkJb3M9LW12cworCQk7OworCSotbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCSotZ291bGQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1oaWdobGV2ZWwpCisJCW9zPS1ic2QKKwkJOzsKKwkqLWVuY29yZSkKKwkJb3M9LWJzZAorCQk7OworCSotc2dpKQorCQlvcz0taXJpeAorCQk7OworCSotc2llbWVucykKKwkJb3M9LXN5c3Y0CisJCTs7CisJKi1tYXNzY29tcCkKKwkJb3M9LXJ0dQorCQk7OworCWYzMFswMV0tZnVqaXRzdSB8IGY3MDAtZnVqaXRzdSkKKwkJb3M9LXV4cHYKKwkJOzsKKwkqLXJvbTY4aykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLSpidWcpCisJCW9zPS1jb2ZmCisJCTs7CisJKi1hcHBsZSkKKwkJb3M9LW1hY29zCisJCTs7CisJKi1hdGFyaSopCisJCW9zPS1taW50CisJCTs7CisJKikKKwkJb3M9LW5vbmUKKwkJOzsKK2VzYWMKK2ZpCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgb3MsIGFuZCB0aGUgQ1BVIHR5cGUsIGJ1dCBub3QgdGhlCisjIG1hbnVmYWN0dXJlci4gIFdlIHBpY2sgdGhlIGxvZ2ljYWwgbWFudWZhY3R1cmVyLgordmVuZG9yPXVua25vd24KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLXVua25vd24pCisJCWNhc2UgJG9zIGluCisJCQktcmlzY2l4KikKKwkJCQl2ZW5kb3I9YWNvcm4KKwkJCQk7OworCQkJLXN1bm9zKikKKwkJCQl2ZW5kb3I9c3VuCisJCQkJOzsKKwkJCS1jbmsqfC1haXgqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLWJlb3MqKQorCQkJCXZlbmRvcj1iZQorCQkJCTs7CisJCQktaHB1eCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1oaXV4KikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktdW5vcyopCisJCQkJdmVuZG9yPWNyZHMKKwkJCQk7OworCQkJLWRndXgqKQorCQkJCXZlbmRvcj1kZworCQkJCTs7CisJCQktbHVuYSopCisJCQkJdmVuZG9yPW9tcm9uCisJCQkJOzsKKwkJCS1nZW5peCopCisJCQkJdmVuZG9yPW5zCisJCQkJOzsKKwkJCS1tdnMqIHwgLW9wZW5lZCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktb3M0MDAqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXB0eCopCisJCQkJdmVuZG9yPXNlcXVlbnQKKwkJCQk7OworCQkJLXRwZiopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQorCQkJCXZlbmRvcj13cnMKKwkJCQk7OworCQkJLWF1eCopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS1tcHcqIHwgLW1hY29zKikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJLXZvcyopCisJCQkJdmVuZG9yPXN0cmF0dXMKKwkJCQk7OworCQllc2FjCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCisJCTs7Citlc2FjCisKK2VjaG8gJGJhc2ljX21hY2hpbmUkb3MKK2V4aXQKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvY29uZmlndXJlIGIvY3VybC03LjI1LjAvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhiMGIzMGEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9jb25maWd1cmUKQEAgLTAsMCArMSw0MDQ5NSBAQAorIyEgL2Jpbi9zaAorIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjQgZm9yIGN1cmwgLS4KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGEgc3VpdGFibGUgY3VybCBtYWlsaW5nIGxpc3Q6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC8+LgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisjIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyMKKyMgQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAxMSBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4KKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkIGFuZCBtb2RpZmllZCB1bmRlciB0aGUKKyMgdGVybXMgb2YgdGhlIGN1cmwgbGljZW5zZTsgc2VlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKworICBpZiB0ZXN0IC16ICIkY3VybF9jdl9QQVRIX1NFUEFSQVRPUiI7IHRoZW4KKyAgICBpZiB0ZXN0IC16ICIkUEFUSCI7IHRoZW4KKyAgICAgIGFzX2ZuX2Vycm9yICJQQVRIIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFBBVEggYmVpbmcgc2V0LiIKKyAgICBmaQorICAgICAgICB0c3RfZGlyc19jb2w9MAorICAgIHRzdF9zYXZlX0lGUz0kSUZTOyBJRlM9JzonCisgICAgZm9yIHRzdF9kaXIgaW4gJFBBVEg7IGRvCisgICAgICBJRlM9JHRzdF9zYXZlX0lGUworICAgICAgdGVzdCAtZCAiJHRzdF9kaXIiICYmIHRzdF9kaXJzX2NvbD1gZXhwciAkdHN0X2RpcnNfY29sICsgMWAKKyAgICBkb25lCisgICAgSUZTPSR0c3Rfc2F2ZV9JRlMKKyAgICAgICAgdHN0X2RpcnNfc2VtPTAKKyAgICB0c3Rfc2F2ZV9JRlM9JElGUzsgSUZTPSc7JworICAgIGZvciB0c3RfZGlyIGluICRQQVRIOyBkbworICAgICAgSUZTPSR0c3Rfc2F2ZV9JRlMKKyAgICAgIHRlc3QgLWQgIiR0c3RfZGlyIiAmJiB0c3RfZGlyc19zZW09YGV4cHIgJHRzdF9kaXJzX3NlbSArIDFgCisgICAgZG9uZQorICAgIElGUz0kdHN0X3NhdmVfSUZTCisgICAgaWYgdGVzdCAkdHN0X2RpcnNfc2VtIC1lcSAkdHN0X2RpcnNfY29sOyB0aGVuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkUEFUSF9TRVBBUkFUT1IiOyB0aGVuCisgICAgICAgICAgICAgICAgYXNfZm5fZXJyb3IgIlBBVEhfU0VQQVJBVE9SIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IGl0LiIKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgICAgICAgaWYgdGVzdCAkdHN0X2RpcnNfc2VtIC1ndCAkdHN0X2RpcnNfY29sOyB0aGVuCisgICAgICAgIHRzdF9hdXRvX3NlcGFyYXRvcj0nOycKKyAgICAgIGVsc2UKKyAgICAgICAgdHN0X2F1dG9fc2VwYXJhdG9yPSc6JworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLXogIiRQQVRIX1NFUEFSQVRPUiI7IHRoZW4KKyAgICAgICAgICAgICAgICBQQVRIX1NFUEFSQVRPUj0iJHRzdF9hdXRvX3NlcGFyYXRvciIKKyAgICAgIGZpCisgICAgZmkKKyAgICBjdXJsX2N2X1BBVEhfU0VQQVJBVE9SPSIkUEFUSF9TRVBBUkFUT1IiCisgIGZpCisKKworCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorY2FzZSAkMCBpbiAjKCgKKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgICAgIDs7Citlc2FjCisjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgYXNfbXlzZWxmPSQwCitmaQoraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKK2ZpCisKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKK2RvbmUKK1BTMT0nJCAnCitQUzI9Jz4gJworUFM0PScrICcKKworIyBOTFMgbnVpc2FuY2VzLgorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRQorCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorICBhc19ib3VybmVfY29tcGF0aWJsZT0iaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKyIKKyAgYXNfcmVxdWlyZWQ9ImFzX2ZuX3JldHVybiAoKSB7IChleGl0IFwkMSk7IH0KK2FzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQorYXNfZm5fZmFpbHVyZSAoKSB7IGFzX2ZuX3JldHVybiAxOyB9Cithc19mbl9yZXRfc3VjY2VzcyAoKSB7IHJldHVybiAwOyB9Cithc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9CisKK2V4aXRjb2RlPTAKK2FzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fZmFpbHVyZSBzdWNjZWVkZWQuOyB9Cithc19mbl9yZXRfc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2lmICggc2V0IHg7IGFzX2ZuX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuIDoKKworZWxzZQorICBleGl0Y29kZT0xOyBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCit0ZXN0IHhcJGV4aXRjb2RlID0geDAgfHwgZXhpdCAxIgorICBhc19zdWdnZXN0ZWQ9IiAgYXNfbGluZW5vXzE9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18xYT1cJExJTkVOTworICBhc19saW5lbm9fMj0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzJhPVwkTElORU5PCisgIGV2YWwgJ3Rlc3QgXCJ4XCRhc19saW5lbm9fMSdcJGFzX3J1bidcIiAhPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiICYmCisgIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEnXCRhc19ydW4nICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiJyB8fCBleGl0IDEKK3Rlc3QgXCQoKCAxICsgMSApKSA9IDIgfHwgZXhpdCAxCisKKyAgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cJHtCQVNIX1ZFUlNJT04rc2V0fVwiIHx8ICgKKyAgICBFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKKyAgICBFQ0hPPVwkRUNIT1wkRUNIT1wkRUNIT1wkRUNIT1wkRUNITworICAgIEVDSE89XCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPCisgICAgUEFUSD0vZW1wdHkgRlBBVEg9L2VtcHR5OyBleHBvcnQgUEFUSCBGUEFUSAorICAgIHRlc3QgXCJYXGBwcmludGYgJXMgXCRFQ0hPXGBcIiA9IFwiWFwkRUNIT1wiIFxcCisgICAgICB8fCB0ZXN0IFwiWFxgcHJpbnQgLXIgLS0gXCRFQ0hPXGBcIiA9IFwiWFwkRUNIT1wiICkgfHwgZXhpdCAxIgorICBpZiAoZXZhbCAiJGFzX3JlcXVpcmVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBhc19oYXZlX3JlcXVpcmVkPXllcworZWxzZQorICBhc19oYXZlX3JlcXVpcmVkPW5vCitmaQorICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHh5ZXMgJiYgKGV2YWwgIiRhc19zdWdnZXN0ZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZm91bmQ9ZmFsc2UKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgYXNfZm91bmQ9OgorICBjYXNlICRhc19kaXIgaW4gIygKKwkgLyopCisJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisJCSAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKwkJICAgaWYgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfc3VnZ2VzdGVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYnJlYWsgMgorZmkKK2ZpCisJICAgZG9uZTs7CisgICAgICAgZXNhYworICBhc19mb3VuZD1mYWxzZQorZG9uZQorJGFzX2ZvdW5kIHx8IHsgaWYgeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCisJICAgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRTSEVMTCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JFNIRUxMIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitmaTsgfQorSUZTPSRhc19zYXZlX0lGUworCisKKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuIDoKKyAgIyBXZSBjYW5ub3QgeWV0IGFzc3VtZSBhIGRlY2VudCBzaGVsbCwgc28gd2UgaGF2ZSB0byBwcm92aWRlIGEKKwkjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworCSMgd29ya3MgYXJvdW5kIHNoZWxscyB0aGF0IGNhbm5vdCB1bnNldCBub25leGlzdGVudCB2YXJpYWJsZXMuCisJQkFTSF9FTlY9L2Rldi9udWxsCisJRU5WPS9kZXYvbnVsbAorCSh1bnNldCBCQVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVgorCWV4cG9ydCBDT05GSUdfU0hFTEwKKwlleGVjICIkQ09ORklHX1NIRUxMIiAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CitmaQorCisgICAgaWYgdGVzdCB4JGFzX2hhdmVfcmVxdWlyZWQgPSB4bm87IHRoZW4gOgorICAkYXNfZWNobyAiJDA6IFRoaXMgc2NyaXB0IHJlcXVpcmVzIGEgc2hlbGwgbW9yZSBtb2Rlcm4gdGhhbiBhbGwiCisgICRhc19lY2hvICIkMDogdGhlIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uIgorICBpZiB0ZXN0IHgke1pTSF9WRVJTSU9OK3NldH0gPSB4c2V0IDsgdGhlbgorICAgICRhc19lY2hvICIkMDogSW4gcGFydGljdWxhciwgenNoICRaU0hfVkVSU0lPTiBoYXMgYnVncyBhbmQgc2hvdWxkIgorICAgICRhc19lY2hvICIkMDogYmUgdXBncmFkZWQgdG8genNoIDQuMy40IG9yIGxhdGVyLiIKKyAgZWxzZQorICAgICRhc19lY2hvICIkMDogUGxlYXNlIHRlbGwgYnVnLWF1dG9jb25mQGdudS5vcmcgYW5kIGEgc3VpdGFibGUgY3VybAorJDA6IG1haWxpbmcgbGlzdDogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsLyBhYm91dCB5b3VyCiskMDogc3lzdGVtLCBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcworJDA6IG1lc3NhZ2UuIFRoZW4gaW5zdGFsbCBhIG1vZGVybiBzaGVsbCwgb3IgbWFudWFsbHkgcnVuCiskMDogdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEgc2hlbGwgaWYgeW91IGRvIGhhdmUgb25lLiIKKyAgZmkKKyAgZXhpdCAxCitmaQorZmkKK2ZpCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorZXhwb3J0IFNIRUxMCisjIFVuc2V0IG1vcmUgdmFyaWFibGVzIGtub3duIHRvIGludGVyZmVyZSB3aXRoIGJlaGF2aW9yIG9mIGNvbW1vbiB0b29scy4KK0NMSUNPTE9SX0ZPUkNFPSBHUkVQX09QVElPTlM9Cit1bnNldCBDTElDT0xPUl9GT1JDRSBHUkVQX09QVElPTlMKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIFNoZWxsIEZ1bmN0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyBhc19mbl91bnNldCBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmx5IHVuc2V0IFZBUi4KK2FzX2ZuX3Vuc2V0ICgpCit7CisgIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KK30KK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX21rZGlyX3AKKyMgLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCithc19mbl9ta2Rpcl9wICgpCit7CisKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisKKworfSAjIGFzX2ZuX21rZGlyX3AKKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorIyBpbXBsZW1lbnRhdGlvbnMuCitpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMSs9XCQyCisgIH0nCitlbHNlCisgIGFzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMT1cJCQxXCQyCisgIH0KK2ZpICMgYXNfZm5fYXBwZW5kCisKKyMgYXNfZm5fYXJpdGggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCisjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCitpZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisgIH0KK2ZpICMgYXNfZm5fYXJpdGgKKworCisjIGFzX2ZuX2Vycm9yIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggc3RhdHVzICQ/LCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JD87IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkMyI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQyIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQxIiA+JiQzCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMSIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQorCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCisKKyAgYXNfbGluZW5vXzE9JExJTkVOTyBhc19saW5lbm9fMWE9JExJTkVOTworICBhc19saW5lbm9fMj0kTElORU5PIGFzX2xpbmVub18yYT0kTElORU5PCisgIGV2YWwgJ3Rlc3QgIngkYXNfbGluZW5vXzEnJGFzX3J1biciICE9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIiAmJgorICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xJyRhc19ydW4nICsgMWAiID0gIngkYXNfbGluZW5vXzInJGFzX3J1biciJyB8fCB7CisgICMgQmxhbWUgTGVlIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorICBzZWQgLW4gJworICAgIHAKKyAgICAvWyRdTElORU5PLz0KKyAgJyA8JGFzX215c2VsZiB8CisgICAgc2VkICcKKyAgICAgIHMvWyRdTElORU5PLiovJi0vCisgICAgICB0IGxpbmVubworICAgICAgYgorICAgICAgOmxpbmVubworICAgICAgTgorICAgICAgOmxvb3AKKyAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLworICAgICAgdCBsb29wCisgICAgICBzLy1cbi4qLy8KKyAgICAnID4kYXNfbWUubGluZW5vICYmCisgIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAorICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7IGFzX2ZuX2V4aXQgMTsgfQorCisgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCisgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorICAuICIuLyRhc19tZS5saW5lbm8iCisgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorICBleGl0Cit9CisKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAorLW4qKQorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OworZXNhYworCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCitmaQoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgICBhc19sbl9zPSdjcCAtcCcKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKKyAgICBhc19sbl9zPSdjcCAtcCcKKyAgZmkKK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXAnCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKK2Vsc2UKKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgYXNfbWtkaXJfcD1mYWxzZQorZmkKKworaWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc190ZXN0X3g9J3Rlc3QgLXgnCitlbHNlCisgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGFzX2xzX0xfb3B0aW9uPUwKKyAgZWxzZQorICAgIGFzX2xzX0xfb3B0aW9uPQorICBmaQorICBhc190ZXN0X3g9JworICAgIGV2YWwgc2ggLWMgJ1wnJworICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCisJdGVzdCAtZCAiJDEvLiI7CisgICAgICBlbHNlCisJY2FzZSAkMSBpbiAjKAorCS0qKXNldCAiLi8kMSI7OworCWVzYWM7CisJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4gIygoCisJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorICAgICdcJycgc2gKKyAgJworZmkKK2FzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKworCitleGVjIDc8JjAgPC9kZXYvbnVsbCA2PiYxCisKKyMgTmFtZSBvZiB0aGUgaG9zdC4KKyMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIExpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KK2FjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorCisjCisjIEluaXRpYWxpemF0aW9ucy4KKyMKK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKK2FjX2NsZWFuX2ZpbGVzPQorYWNfY29uZmlnX2xpYm9ial9kaXI9LgorTElCT0JKUz0KK2Nyb3NzX2NvbXBpbGluZz1ubworc3ViZGlycz0KK01GTEFHUz0KK01BS0VGTEFHUz0KKworIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCitQQUNLQUdFX05BTUU9J2N1cmwnCitQQUNLQUdFX1RBUk5BTUU9J2N1cmwnCitQQUNLQUdFX1ZFUlNJT049Jy0nCitQQUNLQUdFX1NUUklORz0nY3VybCAtJworUEFDS0FHRV9CVUdSRVBPUlQ9J2Egc3VpdGFibGUgY3VybCBtYWlsaW5nIGxpc3Q6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC8nCitQQUNLQUdFX1VSTD0nJworCithY191bmlxdWVfZmlsZT0ibGliL3VybGRhdGEuaCIKKyMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KK2FjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmZGVmIFNURENfSEVBREVSUworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZWxzZQorIyBpZmRlZiBIQVZFX1NURExJQl9ICisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmIGRlZmluZWQgSEFWRV9NRU1PUllfSAorIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CisjIGVuZGlmCisjIGluY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZiIKKworZW5hYmxlX29wdGlvbl9jaGVja2luZz1ubworYWNfc3Vic3RfdmFycz0nTFRMSUJPQkpTCitMSUJPQkpTCitTVVBQT1JUX1BST1RPQ09MUworU1VQUE9SVF9GRUFUVVJFUworRU5BQkxFX1NIQVJFRAorQ1JPU1NDT01QSUxJTkdfRkFMU0UKK0NST1NTQ09NUElMSU5HX1RSVUUKK0NVUkxfTkVUV09SS19MSUJTCitURVNUX1NFUlZFUl9MSUJTCitDVVJMX0xJQlMKK0xJQkNVUkxfTElCUworU09OQU1FX0JVTVBfRkFMU0UKK1NPTkFNRV9CVU1QX1RSVUUKK1VTRV9XSU5ET1dTX1NTUEkKK0JVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFCitCVUlMRF9MSUJIT1NUTkFNRV9UUlVFCitVU0VfRU1CRURERURfQVJFU19GQUxTRQorVVNFX0VNQkVEREVEX0FSRVNfVFJVRQorVVNFX0FSRVMKK3N1YmRpcnMKK1VTRV9NQU5VQUxfRkFMU0UKK1VTRV9NQU5VQUxfVFJVRQorTUFOT1BUCitOUk9GRgorUEVSTAorSVBWNl9FTkFCTEVECitJRE5fRU5BQkxFRAorVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0UKK1ZFUlNJT05FRF9TWU1CT0xTX1RSVUUKK1ZFUlNJT05FRF9GTEFWT1VSCitVU0VfTElCUlRNUAorVVNFX0xJQlNTSDIKK0NVUkxfQ0FfQlVORExFCitTU0xfRU5BQkxFRAorVVNFX0FYVExTCitVU0VfTlNTCitIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVAorVVNFX0NZQVNTTAorVVNFX1BPTEFSU1NMCitIQVZFX0dOVVRMU19TUlAKK1VTRV9HTlVUTFNfTkVUVExFCitVU0VfR05VVExTCitIQVZFX1NTTEVBWV9TUlAKK1JBTkRPTV9GSUxFCitIQVZFX0xJQlpfRkFMU0UKK0hBVkVfTElCWl9UUlVFCitIQVZFX0xJQloKK1VTRV9TU0xFQVkKK1BLR0NPTkZJRworS1JCNF9FTkFCTEVECitVU0VfT1BFTkxEQVAKK0NVUkxfRElTQUJMRV9HT1BIRVIKK0NVUkxfRElTQUJMRV9TTVRQCitDVVJMX0RJU0FCTEVfSU1BUAorQ1VSTF9ESVNBQkxFX1BPUDMKK0NVUkxfRElTQUJMRV9URlRQCitDVVJMX0RJU0FCTEVfVEVMTkVUCitDVVJMX0RJU0FCTEVfRElDVAorQ1VSTF9ESVNBQkxFX1BST1hZCitIQVZFX0xEQVBfU1NMCitDVVJMX0RJU0FCTEVfTERBUFMKK0NVUkxfRElTQUJMRV9MREFQCitDVVJMX0RJU0FCTEVfRklMRQorQ1VSTF9ESVNBQkxFX0ZUUAorQ1VSTF9ESVNBQkxFX1JUU1AKK0NVUkxfRElTQUJMRV9IVFRQCitCVUlMRF9VTklUVEVTVFNfRkFMU0UKK0JVSUxEX1VOSVRURVNUU19UUlVFCitDVVJMREVCVUdfRkFMU0UKK0NVUkxERUJVR19UUlVFCitOT19VTkRFRklORURfRkFMU0UKK05PX1VOREVGSU5FRF9UUlVFCitSRVFVSVJFX0xJQl9ERVBTCitTVEFUSUNMSUJfRkFMU0UKK1NUQVRJQ0xJQl9UUlVFCitNSU1QVVJFX0ZBTFNFCitNSU1QVVJFX1RSVUUKK09UT09MNjQKK09UT09MCitMSVBPCitOTUVESVQKK0RTWU1VVElMCitNQU5JRkVTVF9UT09MCitSQU5MSUIKK2FjX2N0X0FSCitMTl9TCitOTQorYWNfY3RfRFVNUEJJTgorRFVNUEJJTgorTEQKK0ZHUkVQCitMSUJUT09MCitPQkpEVU1QCitETExUT09MCitBUworQ1BQCithbV9fZmFzdGRlcENDX0ZBTFNFCithbV9fZmFzdGRlcENDX1RSVUUKK0NDREVQTU9ERQorQU1ERVBCQUNLU0xBU0gKK0FNREVQX0ZBTFNFCitBTURFUF9UUlVFCithbV9fcXVvdGUKK2FtX19pbmNsdWRlCitERVBESVIKK09CSkVYVAorRVhFRVhUCithY19jdF9DQworQ1BQRkxBR1MKK0xERkxBR1MKK0NGTEFHUworQ0MKK2hvc3Rfb3MKK2hvc3RfdmVuZG9yCitob3N0X2NwdQoraG9zdAorYnVpbGRfb3MKK2J1aWxkX3ZlbmRvcgorYnVpbGRfY3B1CitidWlsZAorUEtHQUREX1ZFTkRPUgorUEtHQUREX05BTUUKK1BLR0FERF9QS0cKK1ZFUlNJT05OVU0KK0NVUkxWRVJTSU9OCithbV9fdW50YXIKK2FtX190YXIKK0FNVEFSCithbV9fbGVhZGluZ19kb3QKK1NFVF9NQUtFCitBV0sKK21rZGlyX3AKK0lOU1RBTExfU1RSSVBfUFJPR1JBTQorU1RSSVAKK2luc3RhbGxfc2gKK01BS0VJTkZPCitBVVRPSEVBREVSCitBVVRPTUFLRQorQVVUT0NPTkYKK0FDTE9DQUwKK1ZFUlNJT04KK1BBQ0tBR0UKK0NZR1BBVEhfVworSU5TVEFMTF9EQVRBCitJTlNUQUxMX1NDUklQVAorSU5TVEFMTF9QUk9HUkFNCitsaWJleHQKK0FSCitFR1JFUAorR1JFUAorU0VECitDVVJMX0NGTEFHX0VYVFJBUworQ09ORklHVVJFX09QVElPTlMKK01BSU5UCitNQUlOVEFJTkVSX01PREVfRkFMU0UKK01BSU5UQUlORVJfTU9ERV9UUlVFCit0YXJnZXRfYWxpYXMKK2hvc3RfYWxpYXMKK2J1aWxkX2FsaWFzCitMSUJTCitFQ0hPX1QKK0VDSE9fTgorRUNIT19DCitERUZTCittYW5kaXIKK2xvY2FsZWRpcgorbGliZGlyCitwc2RpcgorcGRmZGlyCitkdmlkaXIKK2h0bWxkaXIKK2luZm9kaXIKK2RvY2Rpcgorb2xkaW5jbHVkZWRpcgoraW5jbHVkZWRpcgorbG9jYWxzdGF0ZWRpcgorc2hhcmVkc3RhdGVkaXIKK3N5c2NvbmZkaXIKK2RhdGFkaXIKK2RhdGFyb290ZGlyCitsaWJleGVjZGlyCitzYmluZGlyCitiaW5kaXIKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUKK3ByZWZpeAorZXhlY19wcmVmaXgKK1BBQ0tBR0VfVVJMCitQQUNLQUdFX0JVR1JFUE9SVAorUEFDS0FHRV9TVFJJTkcKK1BBQ0tBR0VfVkVSU0lPTgorUEFDS0FHRV9UQVJOQU1FCitQQUNLQUdFX05BTUUKK1NIRUxMCitQQVRICitQQVRIX1NFUEFSQVRPUicKK2FjX3N1YnN0X2ZpbGVzPScnCithY191c2VyX29wdHM9JworZW5hYmxlX29wdGlvbl9jaGVja2luZworZW5hYmxlX21haW50YWluZXJfbW9kZQorZW5hYmxlX2RlYnVnCitlbmFibGVfb3B0aW1pemUKK2VuYWJsZV93YXJuaW5ncworZW5hYmxlX3dlcnJvcgorZW5hYmxlX2N1cmxkZWJ1ZworZW5hYmxlX2FyZXMKK2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nCitlbmFibGVfbGFyZ2VmaWxlCitlbmFibGVfc2hhcmVkCitlbmFibGVfc3RhdGljCit3aXRoX3BpYworZW5hYmxlX2Zhc3RfaW5zdGFsbAord2l0aF9nbnVfbGQKK3dpdGhfc3lzcm9vdAorZW5hYmxlX2xpYnRvb2xfbG9jaworZW5hYmxlX2h0dHAKK2VuYWJsZV9mdHAKK2VuYWJsZV9maWxlCitlbmFibGVfbGRhcAorZW5hYmxlX2xkYXBzCitlbmFibGVfcnRzcAorZW5hYmxlX3Byb3h5CitlbmFibGVfZGljdAorZW5hYmxlX3RlbG5ldAorZW5hYmxlX3RmdHAKK2VuYWJsZV9wb3AzCitlbmFibGVfaW1hcAorZW5hYmxlX3NtdHAKK2VuYWJsZV9nb3BoZXIKK2VuYWJsZV9tYW51YWwKK2VuYWJsZV9saWJjdXJsX29wdGlvbgorZW5hYmxlX2xpYmdjYword2l0aF9sZGFwX2xpYgord2l0aF9sYmVyX2xpYgorZW5hYmxlX2lwdjYKK3dpdGhfa3JiNF9pbmNsdWRlcword2l0aF9rcmI0X2xpYnMKK3dpdGhfa3JiNAord2l0aF9zcG5lZ28KK3dpdGhfZ3NzYXBpX2luY2x1ZGVzCit3aXRoX2dzc2FwaV9saWJzCit3aXRoX2dzc2FwaQord2l0aF9zc2wKK3dpdGhfemxpYgord2l0aF9lZ2Rfc29ja2V0Cit3aXRoX3JhbmRvbQord2l0aF9nbnV0bHMKK3dpdGhfcG9sYXJzc2wKK3dpdGhfY3lhc3NsCit3aXRoX25zcword2l0aF9heHRscword2l0aF9jYV9idW5kbGUKK3dpdGhfY2FfcGF0aAord2l0aF9saWJzc2gyCit3aXRoX2xpYnJ0bXAKK2VuYWJsZV92ZXJzaW9uZWRfc3ltYm9scword2l0aF9saWJpZG4KK2VuYWJsZV9ub25ibG9ja2luZworZW5hYmxlX3RocmVhZGVkX3Jlc29sdmVyCitlbmFibGVfdmVyYm9zZQorZW5hYmxlX3NzcGkKK2VuYWJsZV9jcnlwdG9fYXV0aAorZW5hYmxlX250bG1fd2IKK2VuYWJsZV90bHNfc3JwCitlbmFibGVfY29va2llcworZW5hYmxlX2hpZGRlbl9zeW1ib2xzCitlbmFibGVfc29uYW1lX2J1bXAKKycKKyAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCitob3N0X2FsaWFzCit0YXJnZXRfYWxpYXMKK0NDCitDRkxBR1MKK0xERkxBR1MKK0xJQlMKK0NQUEZMQUdTCitDUFAnCithY19zdWJkaXJzX2FsbD0nYXJlcycKKworIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorYWNfaW5pdF9oZWxwPQorYWNfaW5pdF92ZXJzaW9uPWZhbHNlCithY191bnJlY29nbml6ZWRfb3B0cz0KK2FjX3VucmVjb2duaXplZF9zZXA9CisjIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3B0aW9ucywgd2l0aAorIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgorY2FjaGVfZmlsZT0vZGV2L251bGwKK2V4ZWNfcHJlZml4PU5PTkUKK25vX2NyZWF0ZT0KK25vX3JlY3Vyc2lvbj0KK3ByZWZpeD1OT05FCitwcm9ncmFtX3ByZWZpeD1OT05FCitwcm9ncmFtX3N1ZmZpeD1OT05FCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LAorc2lsZW50PQorc2l0ZT0KK3NyY2Rpcj0KK3ZlcmJvc2U9Cit4X2luY2x1ZGVzPU5PTkUKK3hfbGlicmFyaWVzPU5PTkUKKworIyBJbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9wdGlvbnMuCisjIFRoZXNlIGFyZSBsZWZ0IHVuZXhwYW5kZWQgc28gdXNlcnMgY2FuICJtYWtlIGluc3RhbGwgZXhlY19wcmVmaXg9L2ZvbyIKKyMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4CisjIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCisjIFVzZSBicmFjZXMgaW5zdGVhZCBvZiBwYXJlbnMgYmVjYXVzZSBzaCwgcGVybCwgZXRjLiBhbHNvIGFjY2VwdCB0aGVtLgorIyAoVGhlIGxpc3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQorYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCitzYmluZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKK2RhdGFyb290ZGlyPScke3ByZWZpeH0vc2hhcmUnCitkYXRhZGlyPScke2RhdGFyb290ZGlyfScKK3N5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCitzaGFyZWRzdGF0ZWRpcj0nJHtwcmVmaXh9L2NvbScKK2xvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCitpbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScKK29sZGluY2x1ZGVkaXI9Jy91c3IvaW5jbHVkZScKK2RvY2Rpcj0nJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FHRV9UQVJOQU1FfScKK2luZm9kaXI9JyR7ZGF0YXJvb3RkaXJ9L2luZm8nCitodG1sZGlyPScke2RvY2Rpcn0nCitkdmlkaXI9JyR7ZG9jZGlyfScKK3BkZmRpcj0nJHtkb2NkaXJ9JworcHNkaXI9JyR7ZG9jZGlyfScKK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworbG9jYWxlZGlyPScke2RhdGFyb290ZGlyfS9sb2NhbGUnCittYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKKworYWNfcHJldj0KK2FjX2Rhc2hkYXNoPQorZm9yIGFjX29wdGlvbgorZG8KKyAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICAgIGV2YWwgJGFjX3ByZXY9XCRhY19vcHRpb24KKyAgICBhY19wcmV2PQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICo9KikJYWNfb3B0YXJnPWBleHByICJYJGFjX29wdGlvbiIgOiAnW149XSo9XCguKlwpJ2AgOzsKKyAgKikJYWNfb3B0YXJnPXllcyA7OworICBlc2FjCisKKyAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKworICBjYXNlICRhY19kYXNoZGFzaCRhY19vcHRpb24gaW4KKyAgLS0pCisgICAgYWNfZGFzaGRhc2g9eWVzIDs7CisKKyAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0tYmluZCB8IC0tYmluIHwgLS1iaSkKKyAgICBhY19wcmV2PWJpbmRpciA7OworICAtYmluZGlyPSogfCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQorICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWJ1aWxkIHwgLS1idWlsZCB8IC0tYnVpbCB8IC0tYnVpIHwgLS1idSkKKyAgICBhY19wcmV2PWJ1aWxkX2FsaWFzIDs7CisgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorICAgIGJ1aWxkX2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKKyAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKworICAtLWNvbmZpZy1jYWNoZSB8IC1DKQorICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CisKKyAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQpCisgICAgYWNfcHJldj1kYXRhZGlyIDs7CisgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCisgICAgZGF0YWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCisgIHwgLS1kYXRhcm9vIHwgLS1kYXRhcm8gfCAtLWRhdGFyKQorICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKKyAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorICB8IC0tZGF0YXJvb3Q9KiB8IC0tZGF0YXJvbz0qIHwgLS1kYXRhcm89KiB8IC0tZGF0YXI9KikKKyAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisgIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQorICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKKyAgICBhY19wcmV2PWR2aWRpciA7OworICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWVuYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworCisgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKKyAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorICB8IC0tZXhlYyB8IC0tZXhlIHwgLS1leCkKKyAgICBhY19wcmV2PWV4ZWNfcHJlZml4IDs7CisgIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAorICB8IC0tZXhlYy1wcmVmPSogfCAtLWV4ZWMtcHJlPSogfCAtLWV4ZWMtcHI9KiB8IC0tZXhlYy1wPSogfCAtLWV4ZWMtPSogXAorICB8IC0tZXhlYz0qIHwgLS1leGU9KiB8IC0tZXg9KikKKyAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4KKyAgICB3aXRoX2dhcz15ZXMgOzsKKworICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQorICAgIGFjX2luaXRfaGVscD1sb25nIDs7CisgIC1oZWxwPXIqIHwgLS1oZWxwPXIqIHwgLS1oZWw9ciogfCAtLWhlPXIqIHwgLWhyKikKKyAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7CisgIC1oZWxwPXMqIHwgLS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikKKyAgICBhY19pbml0X2hlbHA9c2hvcnQgOzsKKworICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKKyAgICBhY19wcmV2PWhvc3RfYWxpYXMgOzsKKyAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKyAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKKyAgICBhY19wcmV2PWh0bWxkaXIgOzsKKyAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCisgIHwgLS1odD0qKQorICAgIGh0bWxkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKKyAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQorICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCisgICAgYWNfcHJldj1pbmZvZGlyIDs7CisgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisgICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICBhY19wcmV2PWxpYmRpciA7OworICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCisgICAgbGliZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCisgIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQorICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAorICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCisgICAgYWNfcHJldj1sb2NhbGVkaXIgOzsKKyAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKKyAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fsc3RhdGVkIFwKKyAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgfCAtLWxvY2FscykKKyAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKKyAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCisgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQorICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgYWNfcHJldj1tYW5kaXIgOzsKKyAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQorICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW5mcCB8IC0tbmZwIHwgLS1uZikKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgorICAgIHdpdGhfZnA9bm8gOzsKKworICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKKyAgICBub19jcmVhdGU9eWVzIDs7CisKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQorICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKKworICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCisgIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAorICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9sZCB8IC0tb2wgfCAtLW8pCisgICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7CisgIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAorICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5jbHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcCisgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCisgICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICBhY19wcmV2PXByZWZpeCA7OworICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCisgICAgcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAorICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKKyAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAorICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCisgICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisgIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsKKyAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisgIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKKyAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAorICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCisgICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7CisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zPSogfCAtLXByb2dyYW0tdHJhbj0qIFwKKyAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQorICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworCisgIC1wZGZkaXIgfCAtLXBkZmRpciB8IC0tcGRmZGkgfCAtLXBkZmQgfCAtLXBkZiB8IC0tcGQpCisgICAgYWNfcHJldj1wZGZkaXIgOzsKKyAgLXBkZmRpcj0qIHwgLS1wZGZkaXI9KiB8IC0tcGRmZGk9KiB8IC0tcGRmZD0qIHwgLS1wZGY9KiB8IC0tcGQ9KikKKyAgICBwZGZkaXI9JGFjX29wdGFyZyA7OworCisgIC1wc2RpciB8IC0tcHNkaXIgfCAtLXBzZGkgfCAtLXBzZCB8IC0tcHMpCisgICAgYWNfcHJldj1wc2RpciA7OworICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKKyAgICBwc2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgc2lsZW50PXllcyA7OworCisgIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmluIHwgLS1zYmkgfCAtLXNiKQorICAgIGFjX3ByZXY9c2JpbmRpciA7OworICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorICB8IC0tc2JpPSogfCAtLXNiPSopCisgICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcCisgIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAorICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAorICB8IC0tc2hhIHwgLS1zaCkKKyAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7CisgIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAorICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKKyAgfCAtLXNoYT0qIHwgLS1zaD0qKQorICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorICAgIGFjX3ByZXY9c2l0ZSA7OworICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0qKQorICAgIHNpdGU9JGFjX29wdGFyZyA7OworCisgIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCisgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgLXNyY2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0tc3I9KikKKyAgICBzcmNkaXI9JGFjX29wdGFyZyA7OworCisgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCisgICAgYWNfcHJldj1zeXNjb25mZGlyIDs7CisgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKKyAgICBzeXNjb25mZGlyPSRhY19vcHRhcmcgOzsKKworICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10YXIgfCAtLXRhIHwgLS10KQorICAgIGFjX3ByZXY9dGFyZ2V0X2FsaWFzIDs7CisgIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKKyAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC12IHwgLXZlcmJvc2UgfCAtLXZlcmJvc2UgfCAtLXZlcmJvcyB8IC0tdmVyYm8gfCAtLXZlcmIpCisgICAgdmVyYm9zZT15ZXMgOzsKKworICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC1WKQorICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CisKKyAgLXdpdGgtKiB8IC0td2l0aC0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRoLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworCisgIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aG91dC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtLXgpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14LgorICAgIHdpdGhfeD15ZXMgOzsKKworICAteC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlIHwgLS14LWluY2x1ZCB8IC0teC1pbmNsdSBcCisgIHwgLS14LWluY2wgfCAtLXgtaW5jIHwgLS14LWluIHwgLS14LWkpCisgICAgYWNfcHJldj14X2luY2x1ZGVzIDs7CisgIC14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcCisgIHwgLS14LWluY2w9KiB8IC0teC1pbmM9KiB8IC0teC1pbj0qIHwgLS14LWk9KikKKyAgICB4X2luY2x1ZGVzPSRhY19vcHRhcmcgOzsKKworICAteC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXAorICB8IC0teC1saWJyYXIgfCAtLXgtbGlicmEgfCAtLXgtbGliciB8IC0teC1saWIgfCAtLXgtbGkgfCAtLXgtbCkKKyAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7CisgIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllPSogfCAtLXgtbGlicmFyaT0qIFwKKyAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCisgICAgeF9saWJyYXJpZXM9JGFjX29wdGFyZyA7OworCisgIC0qKSBhc19mbl9lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkYWNfb3B0aW9uJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgOzsKKworICAqPSopCisgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBjYXNlICRhY19lbnZ2YXIgaW4gIygKKyAgICAgICcnIHwgWzAtOV0qIHwgKlshXyRhc19jcl9hbG51bV0qICkKKyAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFxgJGFjX2VudnZhciciIDs7CisgICAgZXNhYworICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZworICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CisKKyAgKikKKyAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCisgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCisgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCisgICAgOiAke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufQorICAgIDs7CisKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAorICBhc19mbl9lcnJvciAibWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIgorZmkKKworaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIjsgdGhlbgorICBjYXNlICRlbmFibGVfb3B0aW9uX2NoZWNraW5nIGluCisgICAgbm8pIDs7CisgICAgZmF0YWwpIGFzX2ZuX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA7OworICAgICopICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIgOzsKKyAgZXNhYworZmkKKworIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCitmb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKKwkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKwkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIKK2RvCisgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICAqLyApCisgICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKlteL11cKScgXHwgIlgkYWNfdmFsIiA6ICdYXCguKlwpJ2AKKyAgICAgIGV2YWwgJGFjX3Zhcj1cJGFjX3ZhbDs7CisgIGVzYWMKKyAgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSAgY29udGludWU7OworICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKKyAgZXNhYworICBhc19mbl9lcnJvciAiZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIKK2RvbmUKKworIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JworIyB1c2VkIHRvIGhvbGQgdGhlIGFyZ3VtZW50IG9mIC0taG9zdCBldGMuCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitidWlsZD0kYnVpbGRfYWxpYXMKK2hvc3Q9JGhvc3RfYWxpYXMKK3RhcmdldD0kdGFyZ2V0X2FsaWFzCisKKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KK2lmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgorICBpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiA9IHg7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkLiIgPiYyCisgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisgIGZpCitmaQorCithY190b29sX3ByZWZpeD0KK3Rlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKwordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAorCisKK2FjX3B3ZD1gcHdkYCAmJiB0ZXN0IC1uICIkYWNfcHdkIiAmJgorYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisgIGFzX2ZuX2Vycm9yICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIKK3Rlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAorICBhc19mbl9lcnJvciAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgorCisKKyMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KK2lmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCisgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKyAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19teXNlbGYiIHx8CiskYXNfZXhwciBYIiRhc19teXNlbGYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfbXlzZWxmIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgICAgc3JjZGlyPS4uCisgIGZpCitlbHNlCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KK2ZpCitpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKKyAgYXNfZm5fZXJyb3IgImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKK2ZpCithY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCithY19hYnNfY29uZmRpcj1gKAorCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgIiRhY19tc2ciCisJcHdkKWAKKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCitpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCisgIHNyY2Rpcj0uCitmaQorIyBSZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNyY2Rpci4KKyMgRG91YmxlIHNsYXNoZXMgaW4gZmlsZSBuYW1lcyBpbiBvYmplY3QgZmlsZSBkZWJ1Z2dpbmcgaW5mbworIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCitjYXNlICRzcmNkaXIgaW4KKyovKSBzcmNkaXI9YGV4cHIgIlgkc3JjZGlyIiA6ICdYXCguKlteL11cKScgXHwgIlgkc3JjZGlyIiA6ICdYXCguKlwpJ2A7OworZXNhYworZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KK2RvbmUKKworIworIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgorIworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKyAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKyAgY2F0IDw8X0FDRU9GCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBjdXJsIC0gdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKworVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKworRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisKK0NvbmZpZ3VyYXRpb246CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKyAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKyAgICAgIC0tY2FjaGUtZmlsZT1GSUxFICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUgW2Rpc2FibGVkXQorICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJworICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KKworSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKyAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW1BSRUZJWF0KKworQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCitcYCRhY19kZWZhdWx0X3ByZWZpeC9iaW4nLCBcYCRhY19kZWZhdWx0X3ByZWZpeC9saWInIGV0Yy4gIFlvdSBjYW4gc3BlY2lmeQorYW4gaW5zdGFsbGF0aW9uIHByZWZpeCBvdGhlciB0aGFuIFxgJGFjX2RlZmF1bHRfcHJlZml4JyB1c2luZyBcYC0tcHJlZml4JywKK2ZvciBpbnN0YW5jZSBcYC0tcHJlZml4PVwkSE9NRScuCisKK0ZvciBiZXR0ZXIgY29udHJvbCwgdXNlIHRoZSBvcHRpb25zIGJlbG93LgorCitGaW5lIHR1bmluZyBvZiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIFtFUFJFRklYL2Jpbl0KKyAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCisgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KKyAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KKyAgLS1saWJkaXI9RElSICAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorICAtLW9sZGluY2x1ZGVkaXI9RElSICAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQorICAtLWRhdGFyb290ZGlyPURJUiAgICAgICByZWFkLW9ubHkgYXJjaC4taW5kZXBlbmRlbnQgZGF0YSByb290IFtQUkVGSVgvc2hhcmVdCisgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCisgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvaW5mb10KKyAgLS1sb2NhbGVkaXI9RElSICAgICAgICAgbG9jYWxlLWRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUi9sb2NhbGVdCisgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCisgIC0tZG9jZGlyPURJUiAgICAgICAgICAgIGRvY3VtZW50YXRpb24gcm9vdCBbREFUQVJPT1RESVIvZG9jL2N1cmxdCisgIC0taHRtbGRpcj1ESVIgICAgICAgICAgIGh0bWwgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLWR2aWRpcj1ESVIgICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBkZmRpcj1ESVIgICAgICAgICAgICBwZGYgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBzZGlyPURJUiAgICAgICAgICAgICBwcyBkb2N1bWVudGF0aW9uIFtET0NESVJdCitfQUNFT0YKKworICBjYXQgPDxcX0FDRU9GCisKK1Byb2dyYW0gbmFtZXM6CisgIC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYICAgICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKyAgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVggICAgICAgICAgICBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT1QUk9HUkFNICAgcnVuIHNlZCBQUk9HUkFNIG9uIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisKK1N5c3RlbSB0eXBlczoKKyAgLS1idWlsZD1CVUlMRCAgICAgY29uZmlndXJlIGZvciBidWlsZGluZyBvbiBCVUlMRCBbZ3Vlc3NlZF0KKyAgLS1ob3N0PUhPU1QgICAgICAgY3Jvc3MtY29tcGlsZSB0byBidWlsZCBwcm9ncmFtcyB0byBydW4gb24gSE9TVCBbQlVJTERdCitfQUNFT0YKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCisgIGNhc2UgJGFjX2luaXRfaGVscCBpbgorICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgY3VybCAtOiI7OworICAgZXNhYworICBjYXQgPDxcX0FDRU9GCisKK09wdGlvbmFsIEZlYXR1cmVzOgorICAtLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nICBpZ25vcmUgdW5yZWNvZ25pemVkIC0tZW5hYmxlLy0td2l0aCBvcHRpb25zCisgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKyAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQorICAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgIGVuYWJsZSBtYWtlIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgbm90IHVzZWZ1bAorCQkJICAoYW5kIHNvbWV0aW1lcyBjb25mdXNpbmcpIHRvIHRoZSBjYXN1YWwgaW5zdGFsbGVyCisgIC0tZW5hYmxlLWRlYnVnICAgICAgICAgIEVuYWJsZSBkZWJ1ZyBidWlsZCBvcHRpb25zCisgIC0tZGlzYWJsZS1kZWJ1ZyAgICAgICAgIERpc2FibGUgZGVidWcgYnVpbGQgb3B0aW9ucworICAtLWVuYWJsZS1vcHRpbWl6ZSAgICAgICBFbmFibGUgY29tcGlsZXIgb3B0aW1pemF0aW9ucworICAtLWRpc2FibGUtb3B0aW1pemUgICAgICBEaXNhYmxlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMKKyAgLS1lbmFibGUtd2FybmluZ3MgICAgICAgRW5hYmxlIHN0cmljdCBjb21waWxlciB3YXJuaW5ncworICAtLWRpc2FibGUtd2FybmluZ3MgICAgICBEaXNhYmxlIHN0cmljdCBjb21waWxlciB3YXJuaW5ncworICAtLWVuYWJsZS13ZXJyb3IgICAgICAgICBFbmFibGUgY29tcGlsZXIgd2FybmluZ3MgYXMgZXJyb3JzCisgIC0tZGlzYWJsZS13ZXJyb3IgICAgICAgIERpc2FibGUgY29tcGlsZXIgd2FybmluZ3MgYXMgZXJyb3JzCisgIC0tZW5hYmxlLWN1cmxkZWJ1ZyAgICAgIEVuYWJsZSBjdXJsIGRlYnVnIG1lbW9yeSB0cmFja2luZworICAtLWRpc2FibGUtY3VybGRlYnVnICAgICBEaXNhYmxlIGN1cmwgZGVidWcgbWVtb3J5IHRyYWNraW5nCisgIC0tZW5hYmxlLWFyZXNbPVBBVEhdICAgIEVuYWJsZSBjLWFyZXMgZm9yIEROUyBsb29rdXBzCisgIC0tZGlzYWJsZS1hcmVzICAgICAgICAgIERpc2FibGUgYy1hcmVzIGZvciBETlMgbG9va3VwcworICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCisgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgIC0tZGlzYWJsZS1sYXJnZWZpbGUgICAgIG9taXQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXMKKyAgLS1lbmFibGUtc2hhcmVkWz1QS0dTXSAgYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCisgIC0tZW5hYmxlLXN0YXRpY1s9UEtHU10gIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorICAtLWVuYWJsZS1mYXN0LWluc3RhbGxbPVBLR1NdCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBbZGVmYXVsdD15ZXNdCisgIC0tZGlzYWJsZS1saWJ0b29sLWxvY2sgIGF2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcykKKyAgLS1lbmFibGUtaHR0cCAgICAgICAgICAgRW5hYmxlIEhUVFAgc3VwcG9ydAorICAtLWRpc2FibGUtaHR0cCAgICAgICAgICBEaXNhYmxlIEhUVFAgc3VwcG9ydAorICAtLWVuYWJsZS1mdHAgICAgICAgICAgICBFbmFibGUgRlRQIHN1cHBvcnQKKyAgLS1kaXNhYmxlLWZ0cCAgICAgICAgICAgRGlzYWJsZSBGVFAgc3VwcG9ydAorICAtLWVuYWJsZS1maWxlICAgICAgICAgICBFbmFibGUgRklMRSBzdXBwb3J0CisgIC0tZGlzYWJsZS1maWxlICAgICAgICAgIERpc2FibGUgRklMRSBzdXBwb3J0CisgIC0tZW5hYmxlLWxkYXAgICAgICAgICAgIEVuYWJsZSBMREFQIHN1cHBvcnQKKyAgLS1kaXNhYmxlLWxkYXAgICAgICAgICAgRGlzYWJsZSBMREFQIHN1cHBvcnQKKyAgLS1lbmFibGUtbGRhcHMgICAgICAgICAgRW5hYmxlIExEQVBTIHN1cHBvcnQKKyAgLS1kaXNhYmxlLWxkYXBzICAgICAgICAgRGlzYWJsZSBMREFQUyBzdXBwb3J0CisgIC0tZW5hYmxlLXJ0c3AgICAgICAgICAgIEVuYWJsZSBSVFNQIHN1cHBvcnQKKyAgLS1kaXNhYmxlLXJ0c3AgICAgICAgICAgRGlzYWJsZSBSVFNQIHN1cHBvcnQKKyAgLS1lbmFibGUtcHJveHkgICAgICAgICAgRW5hYmxlIHByb3h5IHN1cHBvcnQKKyAgLS1kaXNhYmxlLXByb3h5ICAgICAgICAgRGlzYWJsZSBwcm94eSBzdXBwb3J0CisgIC0tZW5hYmxlLWRpY3QgICAgICAgICAgIEVuYWJsZSBESUNUIHN1cHBvcnQKKyAgLS1kaXNhYmxlLWRpY3QgICAgICAgICAgRGlzYWJsZSBESUNUIHN1cHBvcnQKKyAgLS1lbmFibGUtdGVsbmV0ICAgICAgICAgRW5hYmxlIFRFTE5FVCBzdXBwb3J0CisgIC0tZGlzYWJsZS10ZWxuZXQgICAgICAgIERpc2FibGUgVEVMTkVUIHN1cHBvcnQKKyAgLS1lbmFibGUtdGZ0cCAgICAgICAgICAgRW5hYmxlIFRGVFAgc3VwcG9ydAorICAtLWRpc2FibGUtdGZ0cCAgICAgICAgICBEaXNhYmxlIFRGVFAgc3VwcG9ydAorICAtLWVuYWJsZS1wb3AzICAgICAgICAgICBFbmFibGUgUE9QMyBzdXBwb3J0CisgIC0tZGlzYWJsZS1wb3AzICAgICAgICAgIERpc2FibGUgUE9QMyBzdXBwb3J0CisgIC0tZW5hYmxlLWltYXAgICAgICAgICAgIEVuYWJsZSBJTUFQIHN1cHBvcnQKKyAgLS1kaXNhYmxlLWltYXAgICAgICAgICAgRGlzYWJsZSBJTUFQIHN1cHBvcnQKKyAgLS1lbmFibGUtc210cCAgICAgICAgICAgRW5hYmxlIFNNVFAgc3VwcG9ydAorICAtLWRpc2FibGUtc210cCAgICAgICAgICBEaXNhYmxlIFNNVFAgc3VwcG9ydAorICAtLWVuYWJsZS1nb3BoZXIgICAgICAgICBFbmFibGUgR29waGVyIHN1cHBvcnQKKyAgLS1kaXNhYmxlLWdvcGhlciAgICAgICAgRGlzYWJsZSBHb3BoZXIgc3VwcG9ydAorICAtLWVuYWJsZS1tYW51YWwgICAgICAgICBFbmFibGUgYnVpbHQtaW4gbWFudWFsCisgIC0tZGlzYWJsZS1tYW51YWwgICAgICAgIERpc2FibGUgYnVpbHQtaW4gbWFudWFsCisgIC0tZW5hYmxlLWxpYmN1cmwtb3B0aW9uIEVuYWJsZSAtLWxpYmN1cmwgQyBjb2RlIGdlbmVyYXRpb24gc3VwcG9ydAorICAtLWRpc2FibGUtbGliY3VybC1vcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSAtLWxpYmN1cmwgQyBjb2RlIGdlbmVyYXRpb24gc3VwcG9ydAorICAtLWVuYWJsZS1saWJnY2MgICAgICAgICB1c2UgbGliZ2NjIHdoZW4gbGlua2luZworICAtLWVuYWJsZS1pcHY2ICAgICAgICAgICBFbmFibGUgaXB2NiAod2l0aCBpcHY0KSBzdXBwb3J0CisgIC0tZGlzYWJsZS1pcHY2ICAgICAgICAgIERpc2FibGUgaXB2NiBzdXBwb3J0CisgIC0tZW5hYmxlLXZlcnNpb25lZC1zeW1ib2xzCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSB2ZXJzaW9uZWQgc3ltYm9scyBpbiBzaGFyZWQgbGlicmFyeQorICAtLWRpc2FibGUtdmVyc2lvbmVkLXN5bWJvbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSB2ZXJzaW9uZWQgc3ltYm9scyBpbiBzaGFyZWQgbGlicmFyeQorICAtLWVuYWJsZS1ub25ibG9ja2luZyAgICBFbmFibGUgbm9uLWJsb2NraW5nIGNvbW11bmljYXRpb25zCisgIC0tZGlzYWJsZS1ub25ibG9ja2luZyAgIERpc2FibGUgbm9uLWJsb2NraW5nIGNvbW11bmljYXRpb25zCisgIC0tZW5hYmxlLXRocmVhZGVkLXJlc29sdmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSB0aHJlYWRlZCByZXNvbHZlcgorICAtLWRpc2FibGUtdGhyZWFkZWQtcmVzb2x2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSB0aHJlYWRlZCByZXNvbHZlcgorICAtLWVuYWJsZS12ZXJib3NlICAgICAgICBFbmFibGUgdmVyYm9zZSBzdHJpbmdzCisgIC0tZGlzYWJsZS12ZXJib3NlICAgICAgIERpc2FibGUgdmVyYm9zZSBzdHJpbmdzCisgIC0tZW5hYmxlLXNzcGkgICAgICAgICAgIEVuYWJsZSBTU1BJCisgIC0tZGlzYWJsZS1zc3BpICAgICAgICAgIERpc2FibGUgU1NQSQorICAtLWVuYWJsZS1jcnlwdG8tYXV0aCAgICBFbmFibGUgY3J5cHRvZ3JhcGhpYyBhdXRoZW50aWNhdGlvbgorICAtLWRpc2FibGUtY3J5cHRvLWF1dGggICBEaXNhYmxlIGNyeXB0b2dyYXBoaWMgYXV0aGVudGljYXRpb24KKyAgLS1lbmFibGUtbnRsbS13Yls9RklMRV0gRW5hYmxlIE5UTE0gZGVsZWdhdGlvbiB0byB3aW5iaW5kJ3MgbnRsbV9hdXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlciwgd2hlcmUgRklMRSBpcyBudGxtX2F1dGgncyBhYnNvbHV0ZSBmaWxlbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdDogL3Vzci9iaW4vbnRsbV9hdXRoKQorICAtLWRpc2FibGUtbnRsbS13YiAgICAgICBEaXNhYmxlIE5UTE0gZGVsZWdhdGlvbiB0byB3aW5iaW5kJ3MgbnRsbV9hdXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlcgorICAtLWVuYWJsZS10bHMtc3JwICAgICAgICBFbmFibGUgVExTLVNSUCBhdXRoZW50aWNhdGlvbgorICAtLWRpc2FibGUtdGxzLXNycCAgICAgICBEaXNhYmxlIFRMUy1TUlAgYXV0aGVudGljYXRpb24KKyAgLS1lbmFibGUtY29va2llcyAgICAgICAgRW5hYmxlIGNvb2tpZXMgc3VwcG9ydAorICAtLWRpc2FibGUtY29va2llcyAgICAgICBEaXNhYmxlIGNvb2tpZXMgc3VwcG9ydAorICAtLWVuYWJsZS1oaWRkZW4tc3ltYm9scyBIaWRlIGludGVybmFsIHN5bWJvbHMgaW4gbGlicmFyeQorICAtLWRpc2FibGUtaGlkZGVuLXN5bWJvbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGVhdmUgYWxsIHN5bWJvbHMgd2l0aCBkZWZhdWx0IHZpc2liaWxpdHkgaW4gbGlicmFyeQorICAtLWVuYWJsZS1zb25hbWUtYnVtcCAgICBFbmFibGUgZW5mb3JjZWQgU09OQU1FIGJ1bXAKKyAgLS1kaXNhYmxlLXNvbmFtZS1idW1wICAgRGlzYWJsZSBlbmZvcmNlZCBTT05BTUUgYnVtcAorCitPcHRpb25hbCBQYWNrYWdlczoKKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKKyAgLS13aXRoLXBpY1s9UEtHU10gICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKyAgLS13aXRoLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgLS13aXRoLWxkYXAtbGliPWxpYm5hbWUgU3BlY2lmeSBuYW1lIG9mIGxkYXAgbGliIGZpbGUKKyAgLS13aXRoLWxiZXItbGliPWxpYm5hbWUgU3BlY2lmeSBuYW1lIG9mIGxiZXIgbGliIGZpbGUKKyAgLS13aXRoLWtyYjQtaW5jbHVkZXM9RElSCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgbG9jYXRpb24gb2Yga2VyYmVyb3M0IGhlYWRlcnMKKyAgLS13aXRoLWtyYjQtbGlicz1ESVIgICAgU3BlY2lmeSBsb2NhdGlvbiBvZiBrZXJiZXJvczQgbGlicworICAtLXdpdGgta3JiND1ESVIgICAgICAgICB3aGVyZSB0byBsb29rIGZvciBLZXJiZXJvczQKKyAgLS13aXRoLXNwbmVnbz1ESVIgICAgICAgU3BlY2lmeSBsb2NhdGlvbiBvZiBTUE5FR08gbGlicmFyeSBmYm9wZW5zc2wKKyAgLS13aXRoLWdzc2FwaS1pbmNsdWRlcz1ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeSBsb2NhdGlvbiBvZiBHU1NBUEkgaGVhZGVyCisgIC0td2l0aC1nc3NhcGktbGlicz1ESVIgIFNwZWNpZnkgbG9jYXRpb24gb2YgR1NTQVBJIGxpYnMKKyAgLS13aXRoLWdzc2FwaT1ESVIgICAgICAgV2hlcmUgdG8gbG9vayBmb3IgR1NTQVBJCisgIC0td2l0aC1zc2w9UEFUSCAgICAgICAgIFdoZXJlIHRvIGxvb2sgZm9yIE9wZW5TU0wsIFBBVEggcG9pbnRzIHRvIHRoZSBTU0wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIChkZWZhdWx0OiAvdXNyL2xvY2FsL3NzbCk7IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUsIHNldCB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluc3RlYWQgb2YgdXNpbmcgdGhpcyBvcHRpb24KKyAgLS13aXRob3V0LXNzbCAgICAgICAgICAgZGlzYWJsZSBPcGVuU1NMCisgIC0td2l0aC16bGliPVBBVEggICAgICAgIHNlYXJjaCBmb3IgemxpYiBpbiBQQVRICisgIC0td2l0aG91dC16bGliICAgICAgICAgIGRpc2FibGUgdXNlIG9mIHpsaWIKKyAgLS13aXRoLWVnZC1zb2NrZXQ9RklMRSAgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldCBwYXRobmFtZQorICAtLXdpdGgtcmFuZG9tPUZJTEUgICAgICByZWFkIHJhbmRvbW5lc3MgZnJvbSBGSUxFIChkZWZhdWx0PS9kZXYvdXJhbmRvbSkKKyAgLS13aXRoLWdudXRscz1QQVRIICAgICAgd2hlcmUgdG8gbG9vayBmb3IgR251VExTLCBQQVRIIHBvaW50cyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIHJvb3QKKyAgLS13aXRob3V0LWdudXRscyAgICAgICAgZGlzYWJsZSBHbnVUTFMgZGV0ZWN0aW9uCisgIC0td2l0aC1wb2xhcnNzbD1QQVRIICAgIHdoZXJlIHRvIGxvb2sgZm9yIFBvbGFyU1NMLCBQQVRIIHBvaW50cyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIHJvb3QKKyAgLS13aXRob3V0LXBvbGFyc3NsICAgICAgZGlzYWJsZSBQb2xhclNTTCBkZXRlY3Rpb24KKyAgLS13aXRoLWN5YXNzbD1QQVRIICAgICAgd2hlcmUgdG8gbG9vayBmb3IgQ3lhU1NMLCBQQVRIIHBvaW50cyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIHJvb3QgKGRlZmF1bHQ6IHN5c3RlbSBsaWIgZGVmYXVsdCkKKyAgLS13aXRob3V0LWN5YXNzbCAgICAgICAgZGlzYWJsZSBDeWFTU0wgZGV0ZWN0aW9uCisgIC0td2l0aC1uc3M9UEFUSCAgICAgICAgIHdoZXJlIHRvIGxvb2sgZm9yIE5TUywgUEFUSCBwb2ludHMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxhdGlvbiByb290CisgIC0td2l0aG91dC1uc3MgICAgICAgICAgIGRpc2FibGUgTlNTIGRldGVjdGlvbgorICAtLXdpdGgtYXh0bHM9UEFUSCAgICAgICBXaGVyZSB0byBsb29rIGZvciBheFRMUywgUEFUSCBwb2ludHMgdG8gdGhlIGF4VExTCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxhdGlvbiBwcmVmaXggKGRlZmF1bHQ6IC91c3IvbG9jYWwpLiBJZ25vcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFub3RoZXIgU1NMIGVuZ2luZSBpcyBzZWxlY3RlZC4KKyAgLS13aXRob3V0LWF4dGxzICAgICAgICAgZGlzYWJsZSBheFRMUworICAtLXdpdGgtY2EtYnVuZGxlPUZJTEUgICBGaWxlIG5hbWUgdG8gdXNlIGFzIENBIGJ1bmRsZQorICAtLXdpdGhvdXQtY2EtYnVuZGxlICAgICBEb24ndCB1c2UgYSBkZWZhdWx0IENBIGJ1bmRsZQorICAtLXdpdGgtY2EtcGF0aD1ESVJFQ1RPUlkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5IHRvIHVzZSBhcyBDQSBwYXRoCisgIC0td2l0aG91dC1jYS1wYXRoICAgICAgIERvbid0IHVzZSBhIGRlZmF1bHQgQ0EgcGF0aAorICAtLXdpdGgtbGlic3NoMj1QQVRIICAgICBXaGVyZSB0byBsb29rIGZvciBsaWJzc2gyLCBQQVRIIHBvaW50cyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMiBpbnN0YWxsYXRpb247IHdoZW4gcG9zc2libGUsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhpcyBvcHRpb24KKyAgLS13aXRob3V0LWxpYnNzaDIgICAgICAgZGlzYWJsZSBMSUJTU0gyCisgIC0td2l0aC1saWJydG1wPVBBVEggICAgIFdoZXJlIHRvIGxvb2sgZm9yIGxpYnJ0bXAsIFBBVEggcG9pbnRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJSVE1QIGluc3RhbGxhdGlvbjsgd2hlbiBwb3NzaWJsZSwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGlzIG9wdGlvbgorICAtLXdpdGhvdXQtbGlicnRtcCAgICAgICBkaXNhYmxlIExJQlJUTVAKKyAgLS13aXRoLWxpYmlkbj1QQVRIICAgICAgRW5hYmxlIGxpYmlkbiB1c2FnZQorICAtLXdpdGhvdXQtbGliaWRuICAgICAgICBEaXNhYmxlIGxpYmlkbiB1c2FnZQorCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICBDL0MrKy9PYmplY3RpdmUgQyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorCitVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAoraXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgorCitSZXBvcnQgYnVncyB0byA8YSBzdWl0YWJsZSBjdXJsIG1haWxpbmcgbGlzdDogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsLz4uCitfQUNFT0YKK2FjX3N0YXR1cz0kPworZmkKKworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgorICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQorICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8CisgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKyAgICAgIGNvbnRpbnVlCisgICAgYWNfYnVpbGRkaXI9LgorCitjYXNlICIkYWNfZGlyIiBpbgorLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisqKQorICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAorICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisgIGVzYWMgOzsKK2VzYWMKK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKK2VzYWMKK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKworICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlIiAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxzZQorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICBmaSB8fCBhY19zdGF0dXM9JD8KKyAgICBjZCAiJGFjX3B3ZCIgfHwgeyBhY19zdGF0dXM9JD87IGJyZWFrOyB9CisgIGRvbmUKK2ZpCisKK3Rlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgorICBjYXQgPDxcX0FDRU9GCitjdXJsIGNvbmZpZ3VyZSAtCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjQKKworQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKworQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAxMSBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4KK1RoaXMgY29uZmlndXJlIHNjcmlwdCBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhlCit0ZXJtcyBvZiB0aGUgY3VybCBsaWNlbnNlOyBzZWUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzCitfQUNFT0YKKyAgZXhpdAorZmkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBdXRvY29uZiBpbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIHJldHVybiAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jb21waWxlCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cyBhbmQgY2FuIGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBpbmNsdWRlIGZpbGVzIGluCisjIElOQ0xVREVTLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kMzsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKworfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUKKworIyBhY19mbl9jX3RyeV9ydW4gTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLiBBc3N1bWVzCisjIHRoYXQgZXhlY3V0YWJsZXMgKmNhbiogYmUgcnVuLgorYWNfZm5fY190cnlfcnVuICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKKyAgICAgICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgICAgIGFjX3JldHZhbD0kYWNfc3RhdHVzCitmaQorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIHJldHVybiAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9ydW4KKworIyBhY19mbl9jX2NvbXB1dGVfaW50IExJTkVOTyBFWFBSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmllcyB0byBmaW5kIHRoZSBjb21waWxlLXRpbWUgdmFsdWUgb2YgRVhQUiBpbiBhIHByb2dyYW0gdGhhdCBpbmNsdWRlcworIyBJTkNMVURFUywgc2V0dGluZyBWQVIgYWNjb3JkaW5nbHkuIFJldHVybnMgd2hldGhlciB0aGUgdmFsdWUgY291bGQgYmUKKyMgY29tcHV0ZWQKK2FjX2ZuX2NfY29tcHV0ZV9pbnQgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50IG1haW4gKHZvaWQpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50IG1haW4gKHZvaWQpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGFzX2ZuX2FyaXRoICRhY19taWQgKyAxICYmIGFjX2xvPSRhc192YWwKKwkJCWlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhc19mbl9hcml0aCAyICcqJyAkYWNfbWlkICsgMSAmJiBhY19taWQ9JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQgbWFpbiAodm9pZCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50IG1haW4gKHZvaWQpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfbWlkICcpJyAtIDEgJiYgYWNfaGk9JGFzX3ZhbAorCQkJaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSAgYWNfbG89IGFjX2hpPQorCQkJICBicmVhaworCQkJZmkKKwkJCWFzX2ZuX2FyaXRoIDIgJyonICRhY19taWQgJiYgYWNfbWlkPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBhY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhc19mbl9hcml0aCAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG8gJiYgYWNfbWlkPSRhc192YWwKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludCBtYWluICh2b2lkKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfbWlkICcpJyArIDEgJiYgYWNfbG89JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4gIygoCis/KikgZXZhbCAiJDM9XCRhY19sbyI7IGFjX3JldHZhbD0wIDs7CisnJykgYWNfcmV0dmFsPTEgOzsKK2VzYWMKKyAgZWxzZQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitzdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuICQyOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludCBtYWluICh2b2lkKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgcmV0dXJuIDE7CisgIGlmICgoJDIpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGludCBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgkMikpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWxkIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpbnQgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKCQyKSkKKwlyZXR1cm4gMTsKKyAgICAgIGZwcmludGYgKGYsICIlbHUiLCBpKTsKKyAgICB9CisgIC8qIERvIG5vdCBvdXRwdXQgYSB0cmFpbGluZyBuZXdsaW5lLCBhcyB0aGlzIGNhdXNlcyBcclxuIGNvbmZ1c2lvbgorICAgICBvbiBzb21lIHBsYXRmb3Jtcy4gICovCisgIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGVjaG8gPj5jb25mdGVzdC52YWw7IHJlYWQgJDMgPGNvbmZ0ZXN0LnZhbDsgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgYWNfcmV0dmFsPTEKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC52YWwKKworICBmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICByZXR1cm4gJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY19jb21wdXRlX2ludAorCisjIGFjX2ZuX2NfdHJ5X2NwcCBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9jcHAgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIHJldHVybiAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jcHAKKworIyBhY19mbl9jX3RyeV9saW5rIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9saW5rICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9PcHRpbWl6YXRpb24pIGluZm9ybWF0aW9uCisgICMgY3JlYXRlZCBieSB0aGUgUEdJIGNvbXBpbGVyIChjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vKSwgYXMgaXQgd291bGQKKyAgIyBpbnRlcmZlcmUgd2l0aCB0aGUgbmV4dCBsaW5rIGNvbW1hbmQ7IGFsc28gZGVsZXRlIGEgZGlyZWN0b3J5IHRoYXQgaXMKKyAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLgorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIHJldHVybiAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9saW5rCisKKyMgYWNfZm5fY19jaGVja19mdW5jIExJTkVOTyBGVU5DIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgRlVOQyBleGlzdHMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseQorYWNfZm5fY19jaGVja19mdW5jICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kMzsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2RlZmluZSAkMiBpbm5vY3VvdXNfJDIKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgJDIKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICQyICgpOworI2lmIGRlZmluZWQgX19zdHViXyQyIHx8IGRlZmluZWQgX19zdHViX19fJDIKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gJDIgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKworfSAjIGFjX2ZuX2NfY2hlY2tfZnVuYworCisjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMsIGdpdmluZyBhIHdhcm5pbmcgaWYgaXQgY2Fubm90IGJlIGNvbXBpbGVkIHVzaW5nCisjIHRoZSBpbmNsdWRlIGZpbGVzIGluIElOQ0xVREVTIGFuZCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHVzYWJpbGl0eSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkMiB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBhY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHByZXNlbmNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHByZXNlbmNlLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CiskYXNfZWNobyAiJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICMoKAorICB5ZXM6bm86ICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKCBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byBhIHN1aXRhYmxlIGN1cmwgbWFpbGluZyBsaXN0OiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciIKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsCisKKyMgYWNfZm5fY19jaGVja190eXBlIExJTkVOTyBUWVBFIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgVFlQRSBleGlzdHMgYWZ0ZXIgaGF2aW5nIGluY2x1ZGVkIElOQ0xVREVTLCBzZXR0aW5nIGNhY2hlCisjIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfdHlwZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1ubyIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludCBtYWluICh2b2lkKQoreworaWYgKHNpemVvZiAoJDIpKQorCSByZXR1cm4gMDsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludCBtYWluICh2b2lkKQoreworaWYgKHNpemVvZiAoKCQyKSkpCisJICAgIHJldHVybiAwOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGV2YWwgIiQzPXllcyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKworfSAjIGFjX2ZuX2NfY2hlY2tfdHlwZQorY2F0ID5jb25maWcubG9nIDw8X0FDRU9GCitUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKworSXQgd2FzIGNyZWF0ZWQgYnkgY3VybCAkYXNfbWUgLSwgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjQuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKworICAkICQwICRACisKK19BQ0VPRgorZXhlYyA1Pj5jb25maWcubG9nCit7CitjYXQgPDxfQVNVTkFNRQorIyMgLS0tLS0tLS0tICMjCisjIyBQbGF0Zm9ybS4gIyMKKyMjIC0tLS0tLS0tLSAjIworCitob3N0bmFtZSA9IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisKKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsICAgICB8fCBlY2hvIHVua25vd25gCisKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGwgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL2hvc3RpbmZvICAgICAgPSBgKC91c3IvYmluL2hvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKworX0FTVU5BTUUKKworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK30gPiY1CisKK2NhdCA+JjUgPDxfQUNFT0YKKworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgQ29yZSB0ZXN0cy4gIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKK19BQ0VPRgorCisKKyMgS2VlcCBhIHRyYWNlIG9mIHRoZSBjb21tYW5kIGxpbmUuCisjIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KKyMgU3RyaXAgb3V0IC0tc2lsZW50IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byByZWNvcmQgaXQgZm9yIGZ1dHVyZSBydW5zLgorIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzLgorIyBNYWtlIHR3byBwYXNzZXMgdG8gYWxsb3cgZm9yIHByb3BlciBkdXBsaWNhdGUtYXJndW1lbnQgc3VwcHJlc3Npb24uCithY19jb25maWd1cmVfYXJncz0KK2FjX2NvbmZpZ3VyZV9hcmdzMD0KK2FjX2NvbmZpZ3VyZV9hcmdzMT0KK2FjX211c3Rfa2VlcF9uZXh0PWZhbHNlCitmb3IgYWNfcGFzcyBpbiAxIDIKK2RvCisgIGZvciBhY19hcmcKKyAgZG8KKyAgICBjYXNlICRhY19hcmcgaW4KKyAgICAtbm8tY3JlYXRlIHwgLS1uby1jKiB8IC1uIHwgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tciopIGNvbnRpbnVlIDs7CisgICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICAgIGNvbnRpbnVlIDs7CisgICAgKlwnKikKKyAgICAgIGFjX2FyZz1gJGFzX2VjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIGNhc2UgJGFjX3Bhc3MgaW4KKyAgICAxKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MwICIgJyRhY19hcmcnIiA7OworICAgIDIpCisgICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MxICIgJyRhY19hcmcnIgorICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCisJYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgorICAgICAgZWxzZQorCWNhc2UgJGFjX2FyZyBpbgorCSAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCisJICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCisJICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCisJICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKKwkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCisJICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCitkb25lCit7IGFjX2NvbmZpZ3VyZV9hcmdzMD07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMDt9Cit7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMTt9CisKKyMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKKyMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCisjIHdvdWxkIGNhdXNlIHByb2JsZW1zIG9yIGxvb2sgdWdseS4KKyMgV0FSTklORzogVXNlICdcJycgdG8gcmVwcmVzZW50IGFuIGFwb3N0cm9waGUgd2l0aGluIHRoZSB0cmFwLgorIyBXQVJOSU5HOiBEbyBub3Qgc3RhcnQgdGhlIHRyYXAgY29kZSB3aXRoIGEgbmV3bGluZSwgZHVlIHRvIGEgRnJlZUJTRCA0LjAgYnVnLgordHJhcCAnZXhpdF9zdGF0dXM9JD8KKyAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCisgIHsKKyAgICBlY2hvCisKKyAgICBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDYWNoZSB2YXJpYWJsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICBlY2hvCisgICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAnXCcncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdcJydgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nXCcnICdcJyc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICBzZWQgLW4gXAorCSJzLydcJycvJ1wnJ1xcXFwnXCcnJ1wnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKQorICAgIGVjaG8KKworICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgIGVjaG8KKyAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCisgICAgZG8KKyAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgICAgY2FzZSAkYWNfdmFsIGluCisgICAgICAqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisgICAgICBlc2FjCisgICAgICAkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisgICAgZG9uZSB8IHNvcnQKKyAgICBlY2hvCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfc3Vic3RfZmlsZXMiOyB0aGVuCisgICAgICBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGaWxlIHN1YnN0aXR1dGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgIGVjaG8KKyAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCisgICAgICBkbworCWV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorCWNhc2UgJGFjX3ZhbCBpbgorCSpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKwllc2FjCisJJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorICAgICAgZG9uZSB8IHNvcnQKKyAgICAgIGVjaG8KKyAgICBmaQorCisgICAgaWYgdGVzdCAtcyBjb25mZGVmcy5oOyB0aGVuCisgICAgICBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLSAjIworIyMgY29uZmRlZnMuaC4gIyMKKyMjIC0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgIGVjaG8KKyAgICAgIGNhdCBjb25mZGVmcy5oCisgICAgICBlY2hvCisgICAgZmkKKyAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiCisgICAgJGFzX2VjaG8gIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiCisgIH0gPiY1CisgIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiAmJgorICAgIHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKKyAgICBleGl0ICRleGl0X3N0YXR1cworJyAwCitmb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KKyAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgYXNfZm5fZXhpdCAxJyAkYWNfc2lnbmFsCitkb25lCithY19zaWduYWw9MAorCisjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgorcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzLmgKKworJGFzX2VjaG8gIi8qIGNvbmZkZWZzLmggKi8iID4gY29uZmRlZnMuaAorCisjIFByZWRlZmluZWQgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX05BTUUgIiRQQUNLQUdFX05BTUUiCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1NUUklORyAiJFBBQ0tBR0VfU1RSSU5HIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVVJMICIkUEFDS0FHRV9VUkwiCitfQUNFT0YKKworCisjIExldCB0aGUgc2l0ZSBmaWxlIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2FjaGUgZmlsZSBpZiBpdCB3YW50cyB0by4KKyMgUHJlZmVyIGFuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCithY19zaXRlX2ZpbGUxPU5PTkUKK2FjX3NpdGVfZmlsZTI9Tk9ORQoraWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorICBhY19zaXRlX2ZpbGUxPSRDT05GSUdfU0lURQorZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2Vsc2UKKyAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCitmaQorZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKK2RvCisgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQorICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQorICAgIC4gIiRhY19zaXRlX2ZpbGUiCisgIGZpCitkb25lCisKK2lmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgorICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbAorICAjIGZpbGVzIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4KKyAgaWYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OworICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OworICAgIGVzYWMKKyAgZmkKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgPiRjYWNoZV9maWxlCitmaQorCisjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCisjIHZhbHVlLgorYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCisgIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorICAgIHNldCwpCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICxzZXQpCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLCk7OworICAgICopCisgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCisJIyBkaWZmZXJlbmNlcyBpbiB3aGl0ZXNwYWNlIGRvIG5vdCBsZWFkIHRvIGZhaWx1cmUuCisJYWNfb2xkX3ZhbF93PWBlY2hvIHggJGFjX29sZF92YWxgCisJYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCisJaWYgdGVzdCAiJGFjX29sZF92YWxfdyIgIT0gIiRhY19uZXdfdmFsX3ciOyB0aGVuCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKKwllbHNlCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAorCWZpCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mMjt9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9CisgICAgICBmaTs7CisgIGVzYWMKKyAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKyAgICBjYXNlICRhY19uZXdfdmFsIGluCisgICAgKlwnKikgYWNfYXJnPSRhY192YXI9YCRhc19lY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OworICAgIGVzYWMKKyAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KKyAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgorICAgICAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIiA7OworICAgIGVzYWMKKyAgZmkKK2RvbmUKK2lmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgYXNfZm5fZXJyb3IgInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1CitmaQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworCisKKworCisjIHVzaW5nIGN1cmwtb3ZlcnJpZGUubTQKKworCisKKworCithY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGxpYi9jdXJsX2NvbmZpZy5oIHNyYy9jdXJsX2NvbmZpZy5oIGluY2x1ZGUvY3VybC9jdXJsYnVpbGQuaCIKKworOgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4uLiAiID4mNjsgfQorICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWFpbnRhaW5lcl9tb2RlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWFpbnRhaW5lcl9tb2RlOyBVU0VfTUFJTlRBSU5FUl9NT0RFPSRlbmFibGV2YWwKK2Vsc2UKKyAgVVNFX01BSU5UQUlORVJfTU9ERT1ubworZmkKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVTRV9NQUlOVEFJTkVSX01PREUiID4mNQorJGFzX2VjaG8gIiRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjY7IH0KKworCitpZiB0ZXN0ICRVU0VfTUFJTlRBSU5FUl9NT0RFID0geWVzOyB0aGVuCisgIE1BSU5UQUlORVJfTU9ERV9UUlVFPQorICBNQUlOVEFJTkVSX01PREVfRkFMU0U9JyMnCitlbHNlCisgIE1BSU5UQUlORVJfTU9ERV9UUlVFPScjJworICBNQUlOVEFJTkVSX01PREVfRkFMU0U9CitmaQorCisgIE1BSU5UPSRNQUlOVEFJTkVSX01PREVfVFJVRQorCisKKworCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgZGVidWcgYnVpbGQgb3B0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBidWlsZCBvcHRpb25zLi4uICIgPiY2OyB9CisgIE9QVF9ERUJVR19CVUlMRD0iZGVmYXVsdCIKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVidWc7IE9QVF9ERUJVR19CVUlMRD0kZW5hYmxldmFsCitmaQorCisgIGNhc2UgIiRPUFRfREVCVUdfQlVJTEQiIGluCisgICAgbm8pCisgICAgICAgICAgICB3YW50X2RlYnVnPSJubyIKKyAgICAgIDs7CisgICAgZGVmYXVsdCkKKyAgICAgICAgICAgIHdhbnRfZGVidWc9Im5vIgorICAgICAgOzsKKyAgICAqKQorICAgICAgICAgICAgd2FudF9kZWJ1Zz0ieWVzIgorICAgICAgOzsKKyAgZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdhbnRfZGVidWciID4mNQorJGFzX2VjaG8gIiR3YW50X2RlYnVnIiA+JjY7IH0KKworCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGNvbXBpbGVyIG9wdGltaXplciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBjb21waWxlciBvcHRpbWl6ZXIuLi4gIiA+JjY7IH0KKyAgT1BUX0NPTVBJTEVSX09QVElNSVpFPSJkZWZhdWx0IgorICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3B0aW1pemUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfb3B0aW1pemUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9vcHRpbWl6ZTsgT1BUX0NPTVBJTEVSX09QVElNSVpFPSRlbmFibGV2YWwKK2ZpCisKKyAgY2FzZSAiJE9QVF9DT01QSUxFUl9PUFRJTUlaRSIgaW4KKyAgICBubykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRfb3B0aW1pemU9Im5vIgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkd2FudF9kZWJ1ZyIgPSAieWVzIjsgdGhlbgorICAgICAgICB3YW50X29wdGltaXplPSJhc3N1bWVfbm8iCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAoYXNzdW1lZCkgbm8iID4mNQorJGFzX2VjaG8gIihhc3N1bWVkKSBubyIgPiY2OyB9CisgICAgICBlbHNlCisgICAgICAgIHdhbnRfb3B0aW1pemU9ImFzc3VtZV95ZXMiCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAoYXNzdW1lZCkgeWVzIiA+JjUKKyRhc19lY2hvICIoYXNzdW1lZCkgeWVzIiA+JjY7IH0KKyAgICAgIGZpCisgICAgICA7OworICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50X29wdGltaXplPSJ5ZXMiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgOzsKKyAgZXNhYworCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBzdHJpY3QgY29tcGlsZXIgd2FybmluZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgc3RyaWN0IGNvbXBpbGVyIHdhcm5pbmdzLi4uICIgPiY2OyB9CisgIE9QVF9DT01QSUxFUl9XQVJOSU5HUz0iZGVmYXVsdCIKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXdhcm5pbmdzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3dhcm5pbmdzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfd2FybmluZ3M7IE9QVF9DT01QSUxFUl9XQVJOSU5HUz0kZW5hYmxldmFsCitmaQorCisgIGNhc2UgIiRPUFRfQ09NUElMRVJfV0FSTklOR1MiIGluCisgICAgbm8pCisgICAgICAgICAgICB3YW50X3dhcm5pbmdzPSJubyIKKyAgICAgIDs7CisgICAgZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgIHdhbnRfd2FybmluZ3M9IiR3YW50X2RlYnVnIgorICAgICAgOzsKKyAgICAqKQorICAgICAgICAgICAgd2FudF93YXJuaW5ncz0ieWVzIgorICAgICAgOzsKKyAgZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdhbnRfd2FybmluZ3MiID4mNQorJGFzX2VjaG8gIiR3YW50X3dhcm5pbmdzIiA+JjY7IH0KKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBjb21waWxlciB3YXJuaW5ncyBhcyBlcnJvcnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgY29tcGlsZXIgd2FybmluZ3MgYXMgZXJyb3JzLi4uICIgPiY2OyB9CisgIE9QVF9DT01QSUxFUl9XRVJST1I9ImRlZmF1bHQiCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS13ZXJyb3Igd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfd2Vycm9yK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfd2Vycm9yOyBPUFRfQ09NUElMRVJfV0VSUk9SPSRlbmFibGV2YWwKK2ZpCisKKyAgY2FzZSAiJE9QVF9DT01QSUxFUl9XRVJST1IiIGluCisgICAgbm8pCisgICAgICAgICAgICB3YW50X3dlcnJvcj0ibm8iCisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICAgICAgICB3YW50X3dlcnJvcj0ibm8iCisgICAgICA7OworICAgICopCisgICAgICAgICAgICB3YW50X3dlcnJvcj0ieWVzIgorICAgICAgOzsKKyAgZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdhbnRfd2Vycm9yIiA+JjUKKyRhc19lY2hvICIkd2FudF93ZXJyb3IiID4mNjsgfQorCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGN1cmwgZGVidWcgbWVtb3J5IHRyYWNraW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGN1cmwgZGVidWcgbWVtb3J5IHRyYWNraW5nLi4uICIgPiY2OyB9CisgIE9QVF9DVVJMREVCVUdfQlVJTEQ9ImRlZmF1bHQiCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jdXJsZGVidWcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY3VybGRlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfY3VybGRlYnVnOyBPUFRfQ1VSTERFQlVHX0JVSUxEPSRlbmFibGV2YWwKK2ZpCisKKyAgY2FzZSAiJE9QVF9DVVJMREVCVUdfQlVJTEQiIGluCisgICAgbm8pCisgICAgICAgICAgICB3YW50X2N1cmxkZWJ1Zz0ibm8iCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIDs7CisgICAgZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiR3YW50X2RlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAoYXNzdW1lZCkgeWVzIiA+JjUKKyRhc19lY2hvICIoYXNzdW1lZCkgeWVzIiA+JjY7IH0KKyAgICAgIGVsc2UKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICBmaQorICAgICAgd2FudF9jdXJsZGVidWdfYXNzdW1lZD0ieWVzIgorICAgICAgd2FudF9jdXJsZGVidWc9IiR3YW50X2RlYnVnIgorICAgICAgOzsKKyAgICAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudF9jdXJsZGVidWc9InllcyIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICA7OworICBlc2FjCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgYy1hcmVzIGZvciBETlMgbG9va3VwcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBjLWFyZXMgZm9yIEROUyBsb29rdXBzLi4uICIgPiY2OyB9CisgIE9QVF9BUkVTPSJkZWZhdWx0IgorICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXJlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hcmVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfYXJlczsgT1BUX0FSRVM9JGVuYWJsZXZhbAorZmkKKworICBjYXNlICIkT1BUX0FSRVMiIGluCisgICAgbm8pCisgICAgICAgICAgICB3YW50X2FyZXM9Im5vIgorICAgICAgOzsKKyAgICBkZWZhdWx0KQorICAgICAgICAgICAgd2FudF9hcmVzPSJubyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgICAgICAgIHdhbnRfYXJlcz0ieWVzIgorICAgICAgaWYgdGVzdCAtbiAiJGVuYWJsZXZhbCIgJiYgdGVzdCAiJGVuYWJsZXZhbCIgIT0gInllcyI7IHRoZW4KKyAgICAgICAgd2FudF9hcmVzX3BhdGg9IiRlbmFibGV2YWwiCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdhbnRfYXJlcyIgPiY1CiskYXNfZWNobyAiJHdhbnRfYXJlcyIgPiY2OyB9CisKKworCisKKworIworIyBzYXZlIHRoZSBjb25maWd1cmUgYXJndW1lbnRzCisjCitDT05GSUdVUkVfT1BUSU9OUz0iXCIkYWNfY29uZmlndXJlX2FyZ3NcIiIKKworCitDVVJMX0NGTEFHX0VYVFJBUz0iIgoraWYgdGVzdCBYIiR3YW50X3dlcnJvciIgPSBYeWVzOyB0aGVuCisgIENVUkxfQ0ZMQUdfRVhUUkFTPSItV2Vycm9yIgorZmkKKworCitpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic2VkIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzZWQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1NFRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFNFRCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9TRUQ9IiRTRUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iCitmb3IgYXNfZGlyIGluICRhc19kdW1teQorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIiAmJiBhY19jdl9wYXRoX1NFRD0ibm90X2ZvdW5kIgorICA7OworZXNhYworZmkKK1NFRD0kYWNfY3ZfcGF0aF9TRUQKK2lmIHRlc3QgLW4gIiRTRUQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU0VEIiA+JjUKKyRhc19lY2hvICIkU0VEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgaWYgdGVzdCAteiAiJFNFRCIgfHwgdGVzdCAiJFNFRCIgPSAibm90X2ZvdW5kIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJzZWQgbm90IGZvdW5kIGluIFBBVEguIENhbm5vdCBjb250aW51ZSB3aXRob3V0IHNlZC4iICIkTElORU5PIiA1CisgIGZpCitmaQorCisKK2lmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ3JlcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ3JlcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfR1JFUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJEdSRVAgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfR1JFUD0iJEdSRVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iCitmb3IgYXNfZGlyIGluICRhc19kdW1teQorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiICYmIGFjX2N2X3BhdGhfR1JFUD0ibm90X2ZvdW5kIgorICA7OworZXNhYworZmkKK0dSRVA9JGFjX2N2X3BhdGhfR1JFUAoraWYgdGVzdCAtbiAiJEdSRVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkR1JFUCIgPiY1CiskYXNfZWNobyAiJEdSRVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBpZiB0ZXN0IC16ICIkR1JFUCIgfHwgdGVzdCAiJEdSRVAiID0gIm5vdF9mb3VuZCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiZ3JlcCBub3QgZm91bmQgaW4gUEFUSC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgZ3JlcC4iICIkTElORU5PIiA1CisgIGZpCitmaQorCisKK2lmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKyAgICBpZiBlY2hvIGEgfCAoJEdSRVAgLUUgJyhhfGIpJykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICIgPiY2OyB9CisgICAgRUdSRVA9IiRHUkVQIC1FIgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRUdSRVAiID4mNQorJGFzX2VjaG8gIiRFR1JFUCIgPiY2OyB9CisgIGVsc2UKKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImVncmVwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBlZ3JlcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRFR1JFUCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9FR1JFUD0iJEVHUkVQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZHVtbXk9IiRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluIgorZm9yIGFzX2RpciBpbiAkYXNfZHVtbXkKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiICYmIGFjX2N2X3BhdGhfRUdSRVA9Im5vdF9mb3VuZCIKKyAgOzsKK2VzYWMKK2ZpCitFR1JFUD0kYWNfY3ZfcGF0aF9FR1JFUAoraWYgdGVzdCAtbiAiJEVHUkVQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEVHUkVQIiA+JjUKKyRhc19lY2hvICIkRUdSRVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBmaQorZmkKK2lmIHRlc3QgLXogIiRFR1JFUCIgfHwgdGVzdCAiJEVHUkVQIiA9ICJub3RfZm91bmQiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJlZ3JlcCBub3QgZm91bmQgaW4gUEFUSC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgZWdyZXAuIiAiJExJTkVOTyIgNQorZmkKKworCitpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkQVIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2FzX2R1bW15PSIkUEFUSDovdXNyL2JpbjovdXNyL2xvY2FsL2JpbiIKK2ZvciBhc19kaXIgaW4gJGFzX2R1bW15CitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0FSPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorQVI9JGFjX2N2X3BhdGhfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUiIgPiY1CiskYXNfZWNobyAiJEFSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9BUiI7IHRoZW4KKyAgYWNfcHRfQVI9JEFSCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9hY19wdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0FSIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X0FSPSIkYWNfcHRfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iCitmb3IgYXNfZGlyIGluICRhc19kdW1teQorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9BUj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X0FSPSRhY19jdl9wYXRoX2FjX3B0X0FSCitpZiB0ZXN0IC1uICIkYWNfcHRfQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfQVIiID4mNQorJGFzX2VjaG8gIiRhY19wdF9BUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX3B0X0FSIiA9IHg7IHRoZW4KKyAgICBBUj0ibm90X2ZvdW5kIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIEFSPSRhY19wdF9BUgorICBmaQorZWxzZQorICBBUj0iJGFjX2N2X3BhdGhfQVIiCitmaQorCisgIGlmIHRlc3QgLXogIiRBUiIgfHwgdGVzdCAiJEFSIiA9ICJub3RfZm91bmQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgImFyIG5vdCBmb3VuZCBpbiBQQVRILiBDYW5ub3QgY29udGludWUgd2l0aG91dCBhci4iICIkTElORU5PIiA1CisgIGZpCitmaQorCisKKworCitpZiB0ZXN0IC1mICR7c3JjZGlyfS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmg7IHRoZW4KKyAgcm0gLWYgJHtzcmNkaXJ9L2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaAorZmkKKworQ1VSTFZFUlNJT049YCRTRUQgLW5lICdzL14jZGVmaW5lIExJQkNVUkxfVkVSU0lPTiAiXCguKlwpIi9cMS9wJyAke3NyY2Rpcn0vaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaGAKK2FtX19hcGlfdmVyc2lvbj0iMS45IgorYWNfYXV4X2Rpcj0KK2ZvciBhY19kaXIgaW4gIiRzcmNkaXIiICIkc3JjZGlyLy4uIiAiJHNyY2Rpci8uLi8uLiI7IGRvCisgIGZvciBhY190IGluIGluc3RhbGwtc2ggaW5zdGFsbC5zaCBzaHRvb2w7IGRvCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfdCI7IHRoZW4KKyAgICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvJGFjX3QgLWMiCisgICAgICBicmVhayAyCisgICAgZmkKKyAgZG9uZQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZmluZCBpbnN0YWxsLXNoLCBpbnN0YWxsLnNoLCBvciBzaHRvb2wgaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiICIkTElORU5PIiA1CitmaQorCisjIFRoZXNlIHRocmVlIHZhcmlhYmxlcyBhcmUgdW5kb2N1bWVudGVkIGFuZCB1bnN1cHBvcnRlZCwKKyMgYW5kIGFyZSBpbnRlbmRlZCB0byBiZSB3aXRoZHJhd24gaW4gYSBmdXR1cmUgQXV0b2NvbmYgcmVsZWFzZS4KKyMgVGhleSBjYW4gY2F1c2Ugc2VyaW91cyBwcm9ibGVtcyBpZiBhIGJ1aWxkZXIncyBzb3VyY2UgdHJlZSBpcyBpbiBhIGRpcmVjdG9yeQorIyB3aG9zZSBmdWxsIG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzLgorYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisKKworIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorIyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgoraWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCitjYXNlICRhc19kaXIvIGluICMoKAorICAuLyB8IC4vLyB8IC9bY0NdLyogfCBcCisgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKKyAgL3Vzci91Y2IvKiApIDs7CisgICopCisgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKyAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKyAgICAjIGJ5IGRlZmF1bHQuCisgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisJICAgIDoKKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKwkgICAgOgorCSAgZWxzZQorCSAgICBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKwkgICAgZWNobyBvbmUgPiBjb25mdGVzdC5vbmUKKwkgICAgZWNobyB0d28gPiBjb25mdGVzdC50d28KKwkgICAgbWtkaXIgY29uZnRlc3QuZGlyCisJICAgIGlmICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtYyBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvICJgcHdkYC9jb25mdGVzdC5kaXIiICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5vbmUgJiYgdGVzdCAtcyBjb25mdGVzdC50d28gJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC5vbmUgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC50d28KKwkgICAgdGhlbgorCSAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKwkgICAgICBicmVhayAzCisJICAgIGZpCisJICBmaQorCWZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIDs7Citlc2FjCisKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKworZmkKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKyAgZWxzZQorICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKyAgICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CiskYXNfZWNobyAiJElOU1RBTEwiID4mNjsgfQorCisjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCisjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgordGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuLi4gIiA+JjY7IH0KKyMgSnVzdCBpbiBjYXNlCitzbGVlcCAxCitlY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKyMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyMgZGlyZWN0b3J5KS4KK2lmICgKKyAgIHNldCBYIGBscyAtTHQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBpZiB0ZXN0ICIkKiIgPSAiWCI7IHRoZW4KKyAgICAgICMgLUwgZGlkbid0IHdvcmsuCisgICAgICBzZXQgWCBgbHMgLXQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZWAKKyAgIGZpCisgICBybSAtZiBjb25mdGVzdC5maWxlCisgICBpZiB0ZXN0ICIkKiIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSIgXAorICAgICAgJiYgdGVzdCAiJCoiICE9ICJYIGNvbmZ0ZXN0LmZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuCisKKyAgICAgICMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKyAgICAgICMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKKyAgICAgICMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKKyAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKyAgICAgIGFzX2ZuX2Vycm9yICJscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCithbGlhcyBpbiB5b3VyIGVudmlyb25tZW50IiAiJExJTkVOTyIgNQorICAgZmkKKworICAgdGVzdCAiJDIiID0gY29uZnRlc3QuZmlsZQorICAgKQordGhlbgorICAgIyBPay4KKyAgIDoKK2Vsc2UKKyAgIGFzX2ZuX2Vycm9yICJuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKK0NoZWNrIHlvdXIgc3lzdGVtIGNsb2NrIiAiJExJTkVOTyIgNQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9Cit0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgiICE9IE5PTkUgJiYKKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZeJiRwcm9ncmFtX3ByZWZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisjIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4KK3Rlc3QgIiRwcm9ncmFtX3N1ZmZpeCIgIT0gTk9ORSAmJgorICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJlwkJiRwcm9ncmFtX3N1ZmZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisjIERvdWJsZSBhbnkgXCBvciAkLgorIyBCeSBkZWZhdWx0IHdhcyBgcyx4LHgnLCByZW1vdmUgaXQgaWYgdXNlbGVzcy4KK2FjX3NjcmlwdD0ncy9bXFwkXS8mJi9nO3MvO3MseCx4LCQvLycKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9YCRhc19lY2hvICIkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgfCBzZWQgIiRhY19zY3JpcHQiYAorCisjIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCithbV9hdXhfZGlyPWBjZCAkYWNfYXV4X2RpciAmJiBwd2RgCisKK3Rlc3QgeCIke01JU1NJTkcrc2V0fSIgPSB4c2V0IHx8IE1JU1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogXGBtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KK2ZpCisKK2lmIG1rZGlyIC1wIC0tdmVyc2lvbiAuID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KKyAgIyBXZSB1c2VkIHRvIGtlZXBpbmcgdGhlIGAuJyBhcyBmaXJzdCBhcmd1bWVudCwgaW4gb3JkZXIgdG8KKyAgIyBhbGxvdyAkKG1rZGlyX3ApIHRvIGJlIHVzZWQgd2l0aG91dCBhcmd1bWVudC4gIEFzIGluCisgICMgICAkKG1rZGlyX3ApICQoc29tZWRpcikKKyAgIyB3aGVyZSAkKHNvbWVkaXIpIGlzIGNvbmRpdGlvbmFsbHkgZGVmaW5lZC4gIEhvd2V2ZXIgdGhpcyBpcyB3cm9uZworICAjIGZvciB0d28gcmVhc29uczoKKyAgIyAgMS4gaWYgdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGJ5IGEgdXNlciB3aG8gY2Fubm90IHdyaXRlIGAuJworICAjICAgICBtYWtlIGluc3RhbGwgd2lsbCBmYWlsLAorICAjICAyLiB0aGUgYWJvdmUgY29tbWVudCBzaG91bGQgbW9zdCBjZXJ0YWlubHkgcmVhZAorICAjICAgICAkKG1rZGlyX3ApICQoREVTVERJUikkKHNvbWVkaXIpCisgICMgICAgIHNvIGl0IGRvZXMgbm90IHdvcmsgd2hlbiAkKHNvbWVkaXIpIGlzIHVuZGVmaW5lZCBhbmQKKyAgIyAgICAgJChERVNURElSKSBpcyBub3QuCisgICMgIFRvIHN1cHBvcnQgdGhlIGxhdHRlciBjYXNlLCB3ZSBoYXZlIHRvIHdyaXRlCisgICMgICAgIHRlc3QgLXogIiQoc29tZWRpcikiIHx8ICQobWtkaXJfcCkgJChERVNURElSKSQoc29tZWRpciksCisgICMgIHNvIHRoZSBgLicgdHJpY2sgaXMgcG9pbnRsZXNzLgorICBta2Rpcl9wPSdta2RpciAtcCAtLScKK2Vsc2UKKyAgIyBPbiBOZXh0U3RlcCBhbmQgT3BlblN0ZXAsIHRoZSBgbWtkaXInIGNvbW1hbmQgZG9lcyBub3QKKyAgIyByZWNvZ25pemUgYW55IG9wdGlvbi4gIEl0IHdpbGwgaW50ZXJwcmV0IGFsbCBvcHRpb25zIGFzCisgICMgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLCBhbmQgdGhlbiBhYm9ydCBiZWNhdXNlIGAuJyBhbHJlYWR5CisgICMgZXhpc3RzLgorICBmb3IgZCBpbiAuLy1wIC4vLS12ZXJzaW9uOworICBkbworICAgIHRlc3QgLWQgJGQgJiYgcm1kaXIgJGQKKyAgZG9uZQorICAjICQobWtpbnN0YWxsZGlycykgaXMgZGVmaW5lZCBieSBBdXRvbWFrZSBpZiBta2luc3RhbGxkaXJzIGV4aXN0cy4KKyAgaWYgdGVzdCAtZiAiJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyI7IHRoZW4KKyAgICBta2Rpcl9wPSckKG1raW5zdGFsbGRpcnMpJworICBlbHNlCisgICAgbWtkaXJfcD0nJChpbnN0YWxsX3NoKSAtZCcKKyAgZmkKK2ZpCisKK2ZvciBhY19wcm9nIGluIGdhd2sgbWF3ayBuYXdrIGF3aworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FXSytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVdLPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBV0s9JGFjX2N2X3Byb2dfQVdLCitpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFXSyIgPiY1CiskYXNfZWNobyAiJEFXSyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRBV0siICYmIGJyZWFrCitkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICIgPiY2OyB9CitzZXQgeCAke01BS0UtbWFrZX0KK2FjX21ha2U9YCRhc19lY2hvICIkMiIgfCBzZWQgJ3MvKy9wL2c7IHMvW15hLXpBLVowLTlfXS9fL2cnYAoraWYgeyBhc192YXI9YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0OyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCithbGw6CisJQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitjYXNlIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbGAgaW4KKyAgKkBAQCUlJT0/Kj1AQEAlJSUqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllczs7CisgICopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9bm87OworZXNhYworcm0gLWYgY29uZnRlc3QubWFrZQorZmkKK2lmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICBTRVRfTUFLRT0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKK2ZpCisKK3JtIC1yZiAudHN0IDI+L2Rldi9udWxsCitta2RpciAudHN0IDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC50c3Q7IHRoZW4KKyAgYW1fX2xlYWRpbmdfZG90PS4KK2Vsc2UKKyAgYW1fX2xlYWRpbmdfZG90PV8KK2ZpCitybWRpciAudHN0IDI+L2Rldi9udWxsCisKKyMgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAoraWYgdGVzdCAiYGNkICRzcmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIiAmJgorICAgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KKyAgYXNfZm5fZXJyb3IgInNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiAiJExJTkVOTyIgNQorZmkKKworIyB0ZXN0IHdoZXRoZXIgd2UgaGF2ZSBjeWdwYXRoCitpZiB0ZXN0IC16ICIkQ1lHUEFUSF9XIjsgdGhlbgorICBpZiAoY3lncGF0aCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKyAgICBDWUdQQVRIX1c9J2N5Z3BhdGggLXcnCisgIGVsc2UKKyAgICBDWUdQQVRIX1c9ZWNobworICBmaQorZmkKKworCisjIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCisgUEFDS0FHRT0nY3VybCcKKyBWRVJTSU9OPSctJworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRSAiJFBBQ0tBR0UiCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFZFUlNJT04gIiRWRVJTSU9OIgorX0FDRU9GCisKKyMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KKworQUNMT0NBTD0ke0FDTE9DQUwtIiR7YW1fbWlzc2luZ19ydW59YWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0ifQorCisKK0FVVE9DT05GPSR7QVVUT0NPTkYtIiR7YW1fbWlzc2luZ19ydW59YXV0b2NvbmYifQorCisKK0FVVE9NQUtFPSR7QVVUT01BS0UtIiR7YW1fbWlzc2luZ19ydW59YXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259In0KKworCitBVVRPSEVBREVSPSR7QVVUT0hFQURFUi0iJHthbV9taXNzaW5nX3J1bn1hdXRvaGVhZGVyIn0KKworCitNQUtFSU5GTz0ke01BS0VJTkZPLSIke2FtX21pc3NpbmdfcnVufW1ha2VpbmZvIn0KKworaW5zdGFsbF9zaD0ke2luc3RhbGxfc2gtIiRhbV9hdXhfZGlyL2luc3RhbGwtc2gifQorCisjIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKKyMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKKyMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKKyMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK2ZpCitJTlNUQUxMX1NUUklQX1BST0dSQU09Ilwke1NIRUxMfSBcJChpbnN0YWxsX3NoKSAtYyAtcyIKKworIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0LiAgVGhlIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24KKyMgc29tZSBwbGF0Zm9ybXMuCisjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKK0FNVEFSPSR7QU1UQVItIiR7YW1fbWlzc2luZ19ydW59dGFyIn0KKworYW1fX3Rhcj0nJHtBTVRBUn0gY2hvZiAtICIkJHRhcmRpciInOyBhbV9fdW50YXI9JyR7QU1UQVJ9IHhmIC0nCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBjdXJsIHZlcnNpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgY3VybCB2ZXJzaW9uLi4uICIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENVUkxWRVJTSU9OIiA+JjUKKyRhc19lY2hvICIkQ1VSTFZFUlNJT04iID4mNjsgfQorCisKKworVkVSU0lPTk5VTT1gJFNFRCAtbmUgJ3MvXiNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX05VTSAweFwoLipcKS9cMS9wJyAke3NyY2Rpcn0vaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaGAKKworCitQS0dBRERfUEtHPSJIQVhYY3VybCIKK1BLR0FERF9OQU1FPSJjVVJMIC0gYSBjbGllbnQgdGhhdCBncm9rcyBVUkxzIgorUEtHQUREX1ZFTkRPUj0iY3VybC5oYXh4LnNlIgorCisKKworCisgICAgY3VybF9zc2xfbXNnPSJubyAgICAgICgtLXdpdGgte3NzbCxnbnV0bHMsbnNzLHBvbGFyc3NsLGN5YXNzbCxheHRsc30gKSIKKyAgICBjdXJsX3NzaF9tc2c9Im5vICAgICAgKC0td2l0aC1saWJzc2gyKSIKKyAgIGN1cmxfemxpYl9tc2c9Im5vICAgICAgKC0td2l0aC16bGliKSIKKyAgIGN1cmxfa3JiNF9tc2c9Im5vICAgICAgKC0td2l0aC1rcmI0KikiCisgICAgY3VybF9nc3NfbXNnPSJubyAgICAgICgtLXdpdGgtZ3NzYXBpKSIKKyBjdXJsX3NwbmVnb19tc2c9Im5vICAgICAgKC0td2l0aC1zcG5lZ28pIgorY3VybF90bHNfc3JwX21zZz0ibm8gICAgICAoLS1lbmFibGUtdGxzLXNycCkiCisgICAgY3VybF9yZXNfbXNnPSJkZWZhdWx0ICgtLWVuYWJsZS1hcmVzIC8gLS1lbmFibGUtdGhyZWFkZWQtcmVzb2x2ZXIpIgorICAgY3VybF9pcHY2X21zZz0ibm8gICAgICAoLS1lbmFibGUtaXB2NikiCisgICAgY3VybF9pZG5fbXNnPSJubyAgICAgICgtLXdpdGgtbGliaWRuKSIKKyBjdXJsX21hbnVhbF9tc2c9Im5vICAgICAgKC0tZW5hYmxlLW1hbnVhbCkiCitjdXJsX2xpYmN1cmxfbXNnPSJlbmFibGVkICgtLWRpc2FibGUtbGliY3VybC1vcHRpb24pIgorY3VybF92ZXJib3NlX21zZz0iZW5hYmxlZCAoLS1kaXNhYmxlLXZlcmJvc2UpIgorICAgY3VybF9zc3BpX21zZz0ibm8gICAgICAoLS1lbmFibGUtc3NwaSkiCisgICBjdXJsX2xkYXBfbXNnPSJubyAgICAgICgtLWVuYWJsZS1sZGFwIC8gLS13aXRoLWxkYXAtbGliIC8gLS13aXRoLWxiZXItbGliKSIKKyAgY3VybF9sZGFwc19tc2c9Im5vICAgICAgKC0tZW5hYmxlLWxkYXBzKSIKKyAgIGN1cmxfcnRzcF9tc2c9Im5vICAgICAgKC0tZW5hYmxlLXJ0c3ApIgorICAgY3VybF9ydG1wX21zZz0ibm8gICAgICAoLS13aXRoLWxpYnJ0bXApIgorICAgIGluaXRfc3NsX21zZz0ke2N1cmxfc3NsX21zZ30KKworQUxMX0xJQlM9JExJQlMKKworCisjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCiskU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8CisgIGFzX2ZuX2Vycm9yICJjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAiJExJTkVOTyIgNQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2J1aWxkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICBhc19mbl9lcnJvciAiY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiAiJExJTkVOTyIgNQorYWNfY3ZfYnVpbGQ9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGFjX2J1aWxkX2FsaWFzYCB8fAorICBhc19mbl9lcnJvciAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9idWlsZCIgPiY2OyB9CitjYXNlICRhY19jdl9idWlsZCBpbgorKi0qLSopIDs7CisqKSBhc19mbl9lcnJvciAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiICIkTElORU5PIiA1OzsKK2VzYWMKK2J1aWxkPSRhY19jdl9idWlsZAorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworc2V0IHggJGFjX2N2X2J1aWxkCitzaGlmdAorYnVpbGRfY3B1PSQxCitidWlsZF92ZW5kb3I9JDIKK3NoaWZ0OyBzaGlmdAorIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6CitidWlsZF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkYnVpbGRfb3MgaW4gKlwgKikgYnVpbGRfb3M9YGVjaG8gIiRidWlsZF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9ob3N0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KKyAgYWNfY3ZfaG9zdD0kYWNfY3ZfYnVpbGQKK2Vsc2UKKyAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKKyAgICBhc19mbl9lcnJvciAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hvc3QiID4mNjsgfQorY2FzZSAkYWNfY3ZfaG9zdCBpbgorKi0qLSopIDs7CisqKSBhc19mbl9lcnJvciAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgIiRMSU5FTk8iIDU7OworZXNhYworaG9zdD0kYWNfY3ZfaG9zdAorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworc2V0IHggJGFjX2N2X2hvc3QKK3NoaWZ0Citob3N0X2NwdT0kMQoraG9zdF92ZW5kb3I9JDIKK3NoaWZ0OyBzaGlmdAorIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Citob3N0X29zPSQqCitJRlM9JGFjX3NhdmVfSUZTCitjYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBPUyAiJHtob3N0fSIKK19BQ0VPRgorCisKK0RFUERJUj0iJHthbV9fbGVhZGluZ19kb3R9ZGVwcyIKKworYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlcGZpbGVzIgorCisKK2FtX21ha2U9JHtNQUtFLW1ha2V9CitjYXQgPiBjb25maW5jIDw8ICdFTkQnCithbV9fZG9pdDoKKwlAZWNobyBkb25lCisuUEhPTlk6IGFtX19kb2l0CitFTkQKKyMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICIgPiY2OyB9CithbV9faW5jbHVkZT0iIyIKK2FtX19xdW90ZT0KK19hbV9yZXN1bHQ9bm9uZQorIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2VjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKKyMgV2UgZ3JlcCBvdXQgYEVudGVyaW5nIGRpcmVjdG9yeScgYW5kIGBMZWF2aW5nIGRpcmVjdG9yeScKKyMgbWVzc2FnZXMgd2hpY2ggY2FuIG9jY3VyIGlmIGB3JyBlbmRzIHVwIGluIE1BS0VGTEFHUy4KKyMgSW4gcGFydGljdWxhciB3ZSBkb24ndCBsb29rIGF0IGBebWFrZTonIGJlY2F1c2UgR05VIG1ha2UgbWlnaHQKKyMgYmUgaW52b2tlZCB1bmRlciBzb21lIG90aGVyIG5hbWUgKHVzdWFsbHkgImdtYWtlIiksIGluIHdoaWNoCisjIGNhc2UgaXQgcHJpbnRzIGl0cyBuZXcgbmFtZSBpbnN0ZWFkIG9mIGBtYWtlJy4KK2lmIHRlc3QgImAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsIHwgZ3JlcCAtdiAnaW5nIGRpcmVjdG9yeSdgIiA9ICJkb25lIjsgdGhlbgorICAgYW1fX2luY2x1ZGU9aW5jbHVkZQorICAgYW1fX3F1b3RlPQorICAgX2FtX3Jlc3VsdD1HTlUKK2ZpCisjIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2lmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KKyAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKKyAgIGlmIHRlc3QgImAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCIgPSAiZG9uZSI7IHRoZW4KKyAgICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCisgICAgICBhbV9fcXVvdGU9IlwiIgorICAgICAgX2FtX3Jlc3VsdD1CU0QKKyAgIGZpCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkX2FtX3Jlc3VsdCIgPiY1CiskYXNfZWNobyAiJF9hbV9yZXN1bHQiID4mNjsgfQorcm0gLWYgY29uZmluYyBjb25mbWYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmc7CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgQU1ERVBCQUNLU0xBU0g9J1wnCitmaQorCisKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBBTURFUF9UUlVFPQorICBBTURFUF9GQUxTRT0nIycKK2Vsc2UKKyAgQU1ERVBfVFJVRT0nIycKKyAgQU1ERVBfRkFMU0U9CitmaQorCisKKworCisgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBhY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIGZpCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgY29udGludWUKKyAgICAgZmkKKyAgICBhY19jdl9wcm9nX0NDPSJjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2ZpCisKK2ZpCisKKwordGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KKworIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CitzZXQgWCAkYWNfY29tcGlsZQorYWNfY29tcGlsZXI9JDIKK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBzZWQgJzEwYVwKKy4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KKyAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbiAodm9pZCkKK3sKK0ZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7CisgcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGIub3V0IGNvbmZ0ZXN0Lm91dCIKKyMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KKyMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBjb21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KKyMgb2YgZXhlZXh0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICIgPiY2OyB9CithY19saW5rX2RlZmF1bHQ9YCRhc19lY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAorCisjIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6CithY19maWxlcz0iYS5vdXQgY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGEuZXhlIGFfb3V0LmV4ZSBiLm91dCBjb25mdGVzdC4qIgorCithY19ybWZpbGVzPQorZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzCitkbworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OworICAgICogKSBhY19ybWZpbGVzPSIkYWNfcm1maWxlcyAkYWNfZmlsZSI7OworICBlc2FjCitkb25lCitybSAtZiAkYWNfcm1maWxlcworCitpZiB7IHsgYWNfdHJ5PSIkYWNfbGlua19kZWZhdWx0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICAjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KKyMgU28gaWdub3JlIGEgdmFsdWUgb2YgYG5vJywgb3RoZXJ3aXNlIHRoaXMgd291bGQgbGVhZCB0byBgRVhFRVhUID0gbm8nCisjIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAorIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KKyMgQXV0b2NvbmYuCitmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKK2RvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKQorCTs7CisgICAgW2FiXS5vdXQgKQorCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CisJIyBjZXJ0YWlubHkgcmlnaHQuCisJYnJlYWs7OworICAgICouKiApCisJaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisJdGhlbiA6OyBlbHNlCisJICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJZmkKKwkjIFdlIHNldCBhY19jdl9leGVleHQgaGVyZSBiZWNhdXNlIHRoZSBsYXRlciB0ZXN0IGZvciBpdCBpcyBub3QKKwkjIHNhZmU6IGNyb3NzIGNvbXBpbGVycyBtYXkgbm90IGFkZCB0aGUgc3VmZml4IGlmIGdpdmVuIGFuIGAtbycKKwkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KKwkjIEV2ZW4gaWYgdGhpcyBzZWN0aW9uIGxvb2tzIGNydWZ0eTogaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YKKwkjIGFjdHVhbGx5IHdvcmtpbmcuCisJYnJlYWs7OworICAgICogKQorCWJyZWFrOzsKKyAgZXNhYworZG9uZQordGVzdCAiJGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9CisKK2Vsc2UKKyAgYWNfZmlsZT0nJworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFjX2ZpbGUiID4mNjsgfQoraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoreyBhc19mbl9zZXRfc3RhdHVzIDc3Cithc19mbl9lcnJvciAiQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KK2ZpCithY19leGVleHQ9JGFjX2N2X2V4ZWV4dAorCisjIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KKyMgSWYgbm90IGNyb3NzIGNvbXBpbGluZywgY2hlY2sgdGhhdCB3ZSBjYW4gcnVuIGEgc2ltcGxlIHByb2dyYW0uCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAgaWYgeyBhY190cnk9Jy4vJGFjX2ZpbGUnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1ubworICBlbHNlCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorCWNyb3NzX2NvbXBpbGluZz15ZXMKKyAgICBlbHNlCisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAiY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KKyAgICBmaQorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK3JtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0IGNvbmZ0ZXN0Lm91dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKyMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvICIkY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gIiA+JjY7IH0KK2lmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcgKHdlbGwsIG9ic2VydmFibGUpCisjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKKyMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCisjIGBybScuCitmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJICBicmVhazs7CisgICAgKiApIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2ZpCitybSAtZiBjb25mdGVzdCRhY19jdl9leGVleHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorRVhFRVhUPSRhY19jdl9leGVleHQKK2FjX2V4ZWV4dD0kRVhFRVhUCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCitpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZTsKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7CisgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCisgICAgICAgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX2N2X29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9vYmpleHQiID4mNjsgfQorT0JKRVhUPSRhY19jdl9vYmpleHQKK2FjX29iamV4dD0kT0JKRVhUCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluICh2b2lkKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCithY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CithY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluICh2b2lkKQoreworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKK2Vsc2UKKyAgQ0ZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluICh2b2lkKQoreworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisJIENGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLworc3RydWN0IGJ1ZiB7IGludCB4OyB9OworRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKK3N0YXRpYyBjaGFyICplIChwLCBpKQorICAgICBjaGFyICoqcDsKKyAgICAgaW50IGk7Cit7CisgIHJldHVybiBwW2ldOworfQorc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQoreworICBjaGFyICpzOworICB2YV9saXN0IHY7CisgIHZhX3N0YXJ0ICh2LHApOworICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOworICB2YV9lbmQgKHYpOworICByZXR1cm4gczsKK30KKworLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisKK2ludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CitzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKK2ludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOworaW50IGFyZ2M7CitjaGFyICoqYXJndjsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCitkbworICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKKyAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhaworZG9uZQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorQ0M9JGFjX3NhdmVfQ0MKKworZmkKKyMgQUNfQ0FDSEVfVkFMCitjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorICB4KQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OworICB4bm8pCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7CisgICopCisgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKK2VzYWMKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6CisKK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEJy4KKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLgorICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jIC1vIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorQ0NERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKworCitpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgorICBhbV9fZmFzdGRlcENDX1RSVUU9CisgIGFtX19mYXN0ZGVwQ0NfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0nIycKKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0KK2ZpCisKKworICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKyAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorCisKKworCitjdXJsX2luY2x1ZGVzX2ludHR5cGVzPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGlyaXgqKQorICAgICAgYWNfY3ZfaGVhZGVyX3N0ZGludF9oPSJubyIKKyAgICAgIDs7CisgIGVzYWMKKyAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzdGRpbnQuaCBpbnR0eXBlcy5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRjdXJsX2luY2x1ZGVzX2ludHR5cGVzCisiCitldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CisjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgoraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgQ1BQPQorZmkKK2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCisgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKworZmkKKyAgQ1BQPSRhY19jdl9wcm9nX0NQUAorZWxzZQorICBhY19jdl9wcm9nX0NQUD0kQ1BQCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQorJGFzX2VjaG8gIiRDUFAiID4mNjsgfQorYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HUkVQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0dSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0dSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCitjYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKyAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0VHUkVQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRUdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0VHUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCitjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9FR1JFUCIgJ0VHUkVQJCcgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKKyAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIm5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAorZmkKKworICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0VHUkVQIiA+JjY7IH0KKyBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgOgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwKKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIE9uIElSSVggNS4zLCBzeXMvdHlwZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgorZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCisJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisgICAgIworICAgICAgICAjCisgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgIworICAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGxvbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9sb25nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAobG9uZykpIiAiYWNfY3Zfc2l6ZW9mX2xvbmciICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKKworZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nIiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK3sgYXNfZm5fc2V0X3N0YXR1cyA3NworYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZykKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfbG9uZz0wCisgICBmaQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2xvbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfbG9uZyIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9MT05HICRhY19jdl9zaXplb2ZfbG9uZworX0FDRU9GCisKKworICAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHZvaWQqIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygdm9pZCouLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3ZvaWRwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAodm9pZCopKSIgImFjX2N2X3NpemVvZl92b2lkcCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgorCitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX3ZvaWRwIiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK3sgYXNfZm5fc2V0X3N0YXR1cyA3NworYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAodm9pZCopCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3ZvaWRwPTAKKyAgIGZpCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2Zfdm9pZHAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2Zfdm9pZHAiID4mNjsgfQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfVk9JRFAgJGFjX2N2X3NpemVvZl92b2lkcAorX0FDRU9GCisKKworICAjCisgIGlmIHRlc3QgLXogIiRhY19jdl9zaXplb2ZfbG9uZyIgfHwKKyAgICB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX2xvbmciIC1lcSAiMCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiY2Fubm90IGZpbmQgb3V0IHNpemUgb2YgbG9uZy4iICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRhY19jdl9zaXplb2Zfdm9pZHAiIHx8CisgICAgIHRlc3QgIiRhY19jdl9zaXplb2Zfdm9pZHAiIC1lcSAiMCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiY2Fubm90IGZpbmQgb3V0IHNpemUgb2Ygdm9pZCouIiAiJExJTkVOTyIgNQorICBmaQorICAjCisgIHhfTFA2NF9sb25nPSIiCisgIHhfTFAzMl9sb25nPSIiCisgIHhfTFAxNl9sb25nPSIiCisgICMKKyAgaWYgdGVzdCAiJGFjX2N2X3NpemVvZl9sb25nIiAtZXEgIjgiICYmCisgICAgIHRlc3QgIiRhY19jdl9zaXplb2Zfdm9pZHAiIC1nZSAiOCI7IHRoZW4KKyAgICB4X0xQNjRfbG9uZz0ibG9uZyIKKyAgZWxpZiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX2xvbmciIC1lcSAiNCIgJiYKKyAgICAgICB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX3ZvaWRwIiAtZ2UgIjQiOyB0aGVuCisgICAgeF9MUDMyX2xvbmc9ImxvbmciCisgIGVsaWYgdGVzdCAiJGFjX2N2X3NpemVvZl9sb25nIiAtZXEgIjIiICYmCisgICAgICAgdGVzdCAiJGFjX2N2X3NpemVvZl92b2lkcCIgLWdlICIyIjsgdGhlbgorICAgIHhfTFAxNl9sb25nPSJsb25nIgorICBmaQorICAjCisgICAgIworICBjdXJsX3R5cGVvZl9jdXJsX29mZl90PSJ1bmtub3duIgorICBjdXJsX3NpemVvZl9jdXJsX29mZl90PSJ1bmtub3duIgorICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90PSJ1bmtub3duIgorICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90dT0idW5rbm93biIKKyAgIworICBpZiB0ZXN0ICIkY3VybF90eXBlb2ZfY3VybF9vZmZfdCIgPSAidW5rbm93biI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciA2NC1iaXQgY3VybF9vZmZfdCBkYXRhIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIDY0LWJpdCBjdXJsX29mZl90IGRhdGEgdHlwZS4uLiAiID4mNjsgfQorICAgIGZvciB0OCBpbiAgICAgICAgICBcCisgICAgICAiJHhfTFA2NF9sb25nIiAgIFwKKyAgICAgICdpbnQ2NF90JyAgICAgICAgXAorICAgICAgJ19faW50NjQnICAgICAgICBcCisgICAgICAnbG9uZyBsb25nJyAgICAgIFwKKyAgICAgICdfX2xvbmdsb25nJyAgICAgXAorICAgICAgJ19fbG9uZ2xvbmdfdCcgICA7IGRvCisKKyAgICBpZiB0ZXN0ICIkY3VybF90eXBlb2ZfY3VybF9vZmZfdCIgPSAidW5rbm93biIgJiYgdGVzdCAhIC16ICIkdDgiOyB0aGVuCisgICAgdG1wX2luY2x1ZGVzPSIiCisgICAgdG1wX3NvdXJjZT0iIgorICAgIHRtcF9mbXQ9IiIKKyAgICBjYXNlIGBlY2hvICIkdDgiIHwgc2VkICdzL1teYS16QS1aMC05X10vXy9nJ2AgaW4KKyAgICAgIGludDY0X3QpCisgICAgICAgIHRtcF9pbmNsdWRlcz0iJGN1cmxfaW5jbHVkZXNfaW50dHlwZXMiCisgICAgICAgIHRtcF9zb3VyY2U9ImNoYXIgZltdID0gUFJJZDY0OyIKKyAgICAgICAgdG1wX2ZtdD0iUFJJZDY0IgorICAgICAgICA7OworICAgICAgaW50MzJfdCkKKyAgICAgICAgdG1wX2luY2x1ZGVzPSIkY3VybF9pbmNsdWRlc19pbnR0eXBlcyIKKyAgICAgICAgdG1wX3NvdXJjZT0iY2hhciBmW10gPSBQUklkMzI7IgorICAgICAgICB0bXBfZm10PSJQUklkMzIiCisgICAgICAgIDs7CisgICAgICBpbnQxNl90KQorICAgICAgICB0bXBfaW5jbHVkZXM9IiRjdXJsX2luY2x1ZGVzX2ludHR5cGVzIgorICAgICAgICB0bXBfc291cmNlPSJjaGFyIGZbXSA9IFBSSWQxNjsiCisgICAgICAgIHRtcF9mbXQ9IlBSSWQxNiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJHRtcF9pbmNsdWRlcworICAgICAgICB0eXBlZGVmICR0OCBjdXJsX29mZl90OworICAgICAgICB0eXBlZGVmIGNoYXIgZHVtbXlfYXJyW3NpemVvZihjdXJsX29mZl90KSA9PSA4ID8gMSA6IC0xXTsKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgJHRtcF9zb3VyY2UKKyAgICAgICAgY3VybF9vZmZfdCBkdW1teTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGlmIHRlc3QgLXogIiR0bXBfZm10IjsgdGhlbgorICAgICAgICBjdXJsX3R5cGVvZl9jdXJsX29mZl90PSIkdDgiCisgICAgICAgIGN1cmxfc2l6ZW9mX2N1cmxfb2ZmX3Q9IjgiCisgICAgICBlbHNlCisKKyAgYXNfYWNfSGF2ZURlZj1gJGFzX2VjaG8gImN1cmxfY3ZfaGF2ZV9kZWZfJHRtcF9mbXQiIHwgJGFzX3RyX3NoYAorICBhc19hY19EZWY9YCRhc19lY2hvICJjdXJsX2N2X2RlZl8kdG1wX2ZtdCIgfCAkYXNfdHJfc2hgCisgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgJGN1cmxfaW5jbHVkZXNfaW50dHlwZXMKKyNpZmRlZiAkdG1wX2ZtdAorQ1VSTF9ERUZfVE9LRU4gJHRtcF9mbXQKKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIiR0bXBfZm10IjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBldmFsICIkYXNfYWNfSGF2ZURlZj1ubyIKKworICBlbHNlCisgICAgZXZhbCAiJGFzX2FjX0hhdmVEZWY9eWVzIgorICAgIGV2YWwgIiRhc19hY19EZWY9XCR0bXBfZXhwIgorCisgIGZpCisKKyAgICAgICAgYXNfdG1wX0hhdmVGbXREZWY9YCRhc19lY2hvICJjdXJsX2N2X2hhdmVfZGVmXyR0bXBfZm10IiB8ICRhc190cl9zaGAKKyAgICAgICAgYXNfdG1wX0ZtdERlZj1gJGFzX2VjaG8gImN1cmxfY3ZfZGVmXyR0bXBfZm10IiB8ICRhc190cl9zaGAKKyAgICAgICAgaWYgdGVzdCBgZXZhbCAnYXNfdmFsPSR7JyRhc190bXBfSGF2ZUZtdERlZid9OyRhc19lY2hvICIkYXNfdmFsIidgID0gInllcyI7IHRoZW4KKyAgICAgICAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90PWBldmFsICdhc192YWw9JHsnJGFzX3RtcF9GbXREZWYnfTskYXNfZWNobyAiJGFzX3ZhbCInYAorICAgICAgICAgIGN1cmxfdHlwZW9mX2N1cmxfb2ZmX3Q9IiR0OCIKKyAgICAgICAgICBjdXJsX3NpemVvZl9jdXJsX29mZl90PSI4IgorICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKworICAgIGRvbmUKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGN1cmxfdHlwZW9mX2N1cmxfb2ZmX3QiID4mNQorJGFzX2VjaG8gIiRjdXJsX3R5cGVvZl9jdXJsX29mZl90IiA+JjY7IH0KKyAgZmkKKyAgaWYgdGVzdCAiJGN1cmxfdHlwZW9mX2N1cmxfb2ZmX3QiID0gInVua25vd24iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgMzItYml0IGN1cmxfb2ZmX3QgZGF0YSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAzMi1iaXQgY3VybF9vZmZfdCBkYXRhIHR5cGUuLi4gIiA+JjY7IH0KKyAgICBmb3IgdDQgaW4gICAgICAgICAgXAorICAgICAgIiR4X0xQMzJfbG9uZyIgICBcCisgICAgICAnaW50MzJfdCcgICAgICAgIFwKKyAgICAgICdfX2ludDMyJyAgICAgICAgXAorICAgICAgJ2ludCcgICAgICAgICAgICA7IGRvCisKKyAgICBpZiB0ZXN0ICIkY3VybF90eXBlb2ZfY3VybF9vZmZfdCIgPSAidW5rbm93biIgJiYgdGVzdCAhIC16ICIkdDQiOyB0aGVuCisgICAgdG1wX2luY2x1ZGVzPSIiCisgICAgdG1wX3NvdXJjZT0iIgorICAgIHRtcF9mbXQ9IiIKKyAgICBjYXNlIGBlY2hvICIkdDQiIHwgc2VkICdzL1teYS16QS1aMC05X10vXy9nJ2AgaW4KKyAgICAgIGludDY0X3QpCisgICAgICAgIHRtcF9pbmNsdWRlcz0iJGN1cmxfaW5jbHVkZXNfaW50dHlwZXMiCisgICAgICAgIHRtcF9zb3VyY2U9ImNoYXIgZltdID0gUFJJZDY0OyIKKyAgICAgICAgdG1wX2ZtdD0iUFJJZDY0IgorICAgICAgICA7OworICAgICAgaW50MzJfdCkKKyAgICAgICAgdG1wX2luY2x1ZGVzPSIkY3VybF9pbmNsdWRlc19pbnR0eXBlcyIKKyAgICAgICAgdG1wX3NvdXJjZT0iY2hhciBmW10gPSBQUklkMzI7IgorICAgICAgICB0bXBfZm10PSJQUklkMzIiCisgICAgICAgIDs7CisgICAgICBpbnQxNl90KQorICAgICAgICB0bXBfaW5jbHVkZXM9IiRjdXJsX2luY2x1ZGVzX2ludHR5cGVzIgorICAgICAgICB0bXBfc291cmNlPSJjaGFyIGZbXSA9IFBSSWQxNjsiCisgICAgICAgIHRtcF9mbXQ9IlBSSWQxNiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJHRtcF9pbmNsdWRlcworICAgICAgICB0eXBlZGVmICR0NCBjdXJsX29mZl90OworICAgICAgICB0eXBlZGVmIGNoYXIgZHVtbXlfYXJyW3NpemVvZihjdXJsX29mZl90KSA9PSA0ID8gMSA6IC0xXTsKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgJHRtcF9zb3VyY2UKKyAgICAgICAgY3VybF9vZmZfdCBkdW1teTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGlmIHRlc3QgLXogIiR0bXBfZm10IjsgdGhlbgorICAgICAgICBjdXJsX3R5cGVvZl9jdXJsX29mZl90PSIkdDQiCisgICAgICAgIGN1cmxfc2l6ZW9mX2N1cmxfb2ZmX3Q9IjQiCisgICAgICBlbHNlCisKKyAgYXNfYWNfSGF2ZURlZj1gJGFzX2VjaG8gImN1cmxfY3ZfaGF2ZV9kZWZfJHRtcF9mbXQiIHwgJGFzX3RyX3NoYAorICBhc19hY19EZWY9YCRhc19lY2hvICJjdXJsX2N2X2RlZl8kdG1wX2ZtdCIgfCAkYXNfdHJfc2hgCisgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgJGN1cmxfaW5jbHVkZXNfaW50dHlwZXMKKyNpZmRlZiAkdG1wX2ZtdAorQ1VSTF9ERUZfVE9LRU4gJHRtcF9mbXQKKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIiR0bXBfZm10IjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBldmFsICIkYXNfYWNfSGF2ZURlZj1ubyIKKworICBlbHNlCisgICAgZXZhbCAiJGFzX2FjX0hhdmVEZWY9eWVzIgorICAgIGV2YWwgIiRhc19hY19EZWY9XCR0bXBfZXhwIgorCisgIGZpCisKKyAgICAgICAgYXNfdG1wX0hhdmVGbXREZWY9YCRhc19lY2hvICJjdXJsX2N2X2hhdmVfZGVmXyR0bXBfZm10IiB8ICRhc190cl9zaGAKKyAgICAgICAgYXNfdG1wX0ZtdERlZj1gJGFzX2VjaG8gImN1cmxfY3ZfZGVmXyR0bXBfZm10IiB8ICRhc190cl9zaGAKKyAgICAgICAgaWYgdGVzdCBgZXZhbCAnYXNfdmFsPSR7JyRhc190bXBfSGF2ZUZtdERlZid9OyRhc19lY2hvICIkYXNfdmFsIidgID0gInllcyI7IHRoZW4KKyAgICAgICAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90PWBldmFsICdhc192YWw9JHsnJGFzX3RtcF9GbXREZWYnfTskYXNfZWNobyAiJGFzX3ZhbCInYAorICAgICAgICAgIGN1cmxfdHlwZW9mX2N1cmxfb2ZmX3Q9IiR0NCIKKyAgICAgICAgICBjdXJsX3NpemVvZl9jdXJsX29mZl90PSI0IgorICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKworICAgIGRvbmUKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGN1cmxfdHlwZW9mX2N1cmxfb2ZmX3QiID4mNQorJGFzX2VjaG8gIiRjdXJsX3R5cGVvZl9jdXJsX29mZl90IiA+JjY7IH0KKyAgZmkKKyAgaWYgdGVzdCAiJGN1cmxfdHlwZW9mX2N1cmxfb2ZmX3QiID0gInVua25vd24iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgMTYtYml0IGN1cmxfb2ZmX3QgZGF0YSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAxNi1iaXQgY3VybF9vZmZfdCBkYXRhIHR5cGUuLi4gIiA+JjY7IH0KKyAgICBmb3IgdDIgaW4gICAgICAgICAgXAorICAgICAgIiR4X0xQMTZfbG9uZyIgICBcCisgICAgICAnaW50MTZfdCcgICAgICAgIFwKKyAgICAgICdfX2ludDE2JyAgICAgICAgXAorICAgICAgJ2ludCcgICAgICAgICAgICA7IGRvCisKKyAgICBpZiB0ZXN0ICIkY3VybF90eXBlb2ZfY3VybF9vZmZfdCIgPSAidW5rbm93biIgJiYgdGVzdCAhIC16ICIkdDIiOyB0aGVuCisgICAgdG1wX2luY2x1ZGVzPSIiCisgICAgdG1wX3NvdXJjZT0iIgorICAgIHRtcF9mbXQ9IiIKKyAgICBjYXNlIGBlY2hvICIkdDIiIHwgc2VkICdzL1teYS16QS1aMC05X10vXy9nJ2AgaW4KKyAgICAgIGludDY0X3QpCisgICAgICAgIHRtcF9pbmNsdWRlcz0iJGN1cmxfaW5jbHVkZXNfaW50dHlwZXMiCisgICAgICAgIHRtcF9zb3VyY2U9ImNoYXIgZltdID0gUFJJZDY0OyIKKyAgICAgICAgdG1wX2ZtdD0iUFJJZDY0IgorICAgICAgICA7OworICAgICAgaW50MzJfdCkKKyAgICAgICAgdG1wX2luY2x1ZGVzPSIkY3VybF9pbmNsdWRlc19pbnR0eXBlcyIKKyAgICAgICAgdG1wX3NvdXJjZT0iY2hhciBmW10gPSBQUklkMzI7IgorICAgICAgICB0bXBfZm10PSJQUklkMzIiCisgICAgICAgIDs7CisgICAgICBpbnQxNl90KQorICAgICAgICB0bXBfaW5jbHVkZXM9IiRjdXJsX2luY2x1ZGVzX2ludHR5cGVzIgorICAgICAgICB0bXBfc291cmNlPSJjaGFyIGZbXSA9IFBSSWQxNjsiCisgICAgICAgIHRtcF9mbXQ9IlBSSWQxNiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJHRtcF9pbmNsdWRlcworICAgICAgICB0eXBlZGVmICR0MiBjdXJsX29mZl90OworICAgICAgICB0eXBlZGVmIGNoYXIgZHVtbXlfYXJyW3NpemVvZihjdXJsX29mZl90KSA9PSAyID8gMSA6IC0xXTsKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgJHRtcF9zb3VyY2UKKyAgICAgICAgY3VybF9vZmZfdCBkdW1teTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGlmIHRlc3QgLXogIiR0bXBfZm10IjsgdGhlbgorICAgICAgICBjdXJsX3R5cGVvZl9jdXJsX29mZl90PSIkdDIiCisgICAgICAgIGN1cmxfc2l6ZW9mX2N1cmxfb2ZmX3Q9IjIiCisgICAgICBlbHNlCisKKyAgYXNfYWNfSGF2ZURlZj1gJGFzX2VjaG8gImN1cmxfY3ZfaGF2ZV9kZWZfJHRtcF9mbXQiIHwgJGFzX3RyX3NoYAorICBhc19hY19EZWY9YCRhc19lY2hvICJjdXJsX2N2X2RlZl8kdG1wX2ZtdCIgfCAkYXNfdHJfc2hgCisgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgJGN1cmxfaW5jbHVkZXNfaW50dHlwZXMKKyNpZmRlZiAkdG1wX2ZtdAorQ1VSTF9ERUZfVE9LRU4gJHRtcF9mbXQKKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIiR0bXBfZm10IjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBldmFsICIkYXNfYWNfSGF2ZURlZj1ubyIKKworICBlbHNlCisgICAgZXZhbCAiJGFzX2FjX0hhdmVEZWY9eWVzIgorICAgIGV2YWwgIiRhc19hY19EZWY9XCR0bXBfZXhwIgorCisgIGZpCisKKyAgICAgICAgYXNfdG1wX0hhdmVGbXREZWY9YCRhc19lY2hvICJjdXJsX2N2X2hhdmVfZGVmXyR0bXBfZm10IiB8ICRhc190cl9zaGAKKyAgICAgICAgYXNfdG1wX0ZtdERlZj1gJGFzX2VjaG8gImN1cmxfY3ZfZGVmXyR0bXBfZm10IiB8ICRhc190cl9zaGAKKyAgICAgICAgaWYgdGVzdCBgZXZhbCAnYXNfdmFsPSR7JyRhc190bXBfSGF2ZUZtdERlZid9OyRhc19lY2hvICIkYXNfdmFsIidgID0gInllcyI7IHRoZW4KKyAgICAgICAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90PWBldmFsICdhc192YWw9JHsnJGFzX3RtcF9GbXREZWYnfTskYXNfZWNobyAiJGFzX3ZhbCInYAorICAgICAgICAgIGN1cmxfdHlwZW9mX2N1cmxfb2ZmX3Q9IiR0MiIKKyAgICAgICAgICBjdXJsX3NpemVvZl9jdXJsX29mZl90PSIyIgorICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKworICAgIGRvbmUKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGN1cmxfdHlwZW9mX2N1cmxfb2ZmX3QiID4mNQorJGFzX2VjaG8gIiRjdXJsX3R5cGVvZl9jdXJsX29mZl90IiA+JjY7IH0KKyAgZmkKKyAgaWYgdGVzdCAiJGN1cmxfdHlwZW9mX2N1cmxfb2ZmX3QiID0gInVua25vd24iOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgImNhbm5vdCBmaW5kIGRhdGEgdHlwZSBmb3IgY3VybF9vZmZfdC4iICIkTElORU5PIiA1CisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGN1cmxfb2ZmX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBjdXJsX29mZl90Li4uICIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3VybF9zaXplb2ZfY3VybF9vZmZfdCIgPiY1CiskYXNfZWNobyAiJGN1cmxfc2l6ZW9mX2N1cmxfb2ZmX3QiID4mNjsgfQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9ybWF0dGluZyBzdHJpbmcgZGlyZWN0aXZlIGZvciBjdXJsX29mZl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvcm1hdHRpbmcgc3RyaW5nIGRpcmVjdGl2ZSBmb3IgY3VybF9vZmZfdC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkY3VybF9mb3JtYXRfY3VybF9vZmZfdCIgIT0gInVua25vd24iOyB0aGVuCisgICAgeF9wdWxsX2hlYWRlcnM9InllcyIKKyAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90PWBlY2hvICIkY3VybF9mb3JtYXRfY3VybF9vZmZfdCIgfCAiJFNFRCIgJ3MvWyJdLy9nJ2AKKyAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90dT1gZWNobyAiJGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3QiIHwgIiRTRUQiICdzL2kkL3UvJ2AKKyAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90dT1gZWNobyAiJGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3R1IiB8ICIkU0VEIiAncy9kJC91LydgCisgICAgY3VybF9mb3JtYXRfY3VybF9vZmZfdHU9YGVjaG8gIiRjdXJsX2Zvcm1hdF9jdXJsX29mZl90dSIgfCAiJFNFRCIgJ3MvRCQvVS8nYAorICBlbHNlCisgICAgeF9wdWxsX2hlYWRlcnM9Im5vIgorICAgIGNhc2UgYGVjaG8gIiRjdXJsX3R5cGVvZl9jdXJsX29mZl90IiB8IHNlZCAncy9bXmEtekEtWjAtOV9dL18vZydgIGluCisgICAgICBsb25nX2xvbmcgfCBfX2xvbmdsb25nIHwgX19sb25nbG9uZ190KQorICAgICAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90PSJsbGQiCisgICAgICAgIGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3R1PSJsbHUiCisgICAgICAgIDs7CisgICAgICBsb25nKQorICAgICAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90PSJsZCIKKyAgICAgICAgY3VybF9mb3JtYXRfY3VybF9vZmZfdHU9Imx1IgorICAgICAgICA7OworICAgICAgaW50KQorICAgICAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90PSJkIgorICAgICAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90dT0idSIKKyAgICAgICAgOzsKKyAgICAgIF9faW50NjQpCisgICAgICAgIGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3Q9Ikk2NGQiCisgICAgICAgIGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3R1PSJJNjR1IgorICAgICAgICA7OworICAgICAgX19pbnQzMikKKyAgICAgICAgY3VybF9mb3JtYXRfY3VybF9vZmZfdD0iSTMyZCIKKyAgICAgICAgY3VybF9mb3JtYXRfY3VybF9vZmZfdHU9IkkzMnUiCisgICAgICAgIDs7CisgICAgICBfX2ludDE2KQorICAgICAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90PSJJMTZkIgorICAgICAgICBjdXJsX2Zvcm1hdF9jdXJsX29mZl90dT0iSTE2dSIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZmluZCBwcmludCBmb3JtYXQgc3RyaW5nIGZvciBjdXJsX29mZl90LiIgIiRMSU5FTk8iIDUKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBcIiRjdXJsX2Zvcm1hdF9jdXJsX29mZl90XCIiID4mNQorJGFzX2VjaG8gIlwiJGN1cmxfZm9ybWF0X2N1cmxfb2ZmX3RcIiIgPiY2OyB9CisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3JtYXR0aW5nIHN0cmluZyBkaXJlY3RpdmUgZm9yIHVuc2lnbmVkIGN1cmxfb2ZmX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9ybWF0dGluZyBzdHJpbmcgZGlyZWN0aXZlIGZvciB1bnNpZ25lZCBjdXJsX29mZl90Li4uICIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBcIiRjdXJsX2Zvcm1hdF9jdXJsX29mZl90dVwiIiA+JjUKKyRhc19lY2hvICJcIiRjdXJsX2Zvcm1hdF9jdXJsX29mZl90dVwiIiA+JjY7IH0KKyAgIworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBjb25zdGFudCBzdWZmaXggc3RyaW5nIGZvciBjdXJsX29mZl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGNvbnN0YW50IHN1ZmZpeCBzdHJpbmcgZm9yIGN1cmxfb2ZmX3QuLi4gIiA+JjY7IH0KKyAgIworICBjdXJsX3N1ZmZpeF9jdXJsX29mZl90PSJ1bmtub3duIgorICBjdXJsX3N1ZmZpeF9jdXJsX29mZl90dT0idW5rbm93biIKKyAgIworICBjYXNlIGBlY2hvICIkY3VybF90eXBlb2ZfY3VybF9vZmZfdCIgfCBzZWQgJ3MvW15hLXpBLVowLTlfXS9fL2cnYCBpbgorICAgIGxvbmdfbG9uZyB8IF9fbG9uZ2xvbmcgfCBfX2xvbmdsb25nX3QpCisgICAgICB0c3Rfc3VmZml4ZXM9IkxMOjoiCisgICAgICA7OworICAgIGxvbmcpCisgICAgICB0c3Rfc3VmZml4ZXM9Ikw6OiIKKyAgICAgIDs7CisgICAgaW50KQorICAgICAgdHN0X3N1ZmZpeGVzPSI6OiIKKyAgICAgIDs7CisgICAgX19pbnQ2NCB8IGludDY0X3QpCisgICAgICB0c3Rfc3VmZml4ZXM9IkxMOmk2NDo6IgorICAgICAgOzsKKyAgICBfX2ludDMyIHwgaW50MzJfdCkKKyAgICAgIHRzdF9zdWZmaXhlcz0iTDppMzI6OiIKKyAgICAgIDs7CisgICAgX19pbnQxNiB8IGludDE2X3QpCisgICAgICB0c3Rfc3VmZml4ZXM9Ikw6aTE2OjoiCisgICAgICA7OworICAgICopCisgICAgICBhc19mbl9lcnJvciAidW5leHBlY3RlZCBkYXRhIHR5cGUgJGN1cmxfdHlwZW9mX2N1cmxfb2ZmX3QiICIkTElORU5PIiA1CisgICAgICA7OworICBlc2FjCisgICMKKyAgb2xkX0lGUz0kSUZTOyBJRlM9JzonCisgIGZvciB0bXBfc3N1ZiBpbiAkdHN0X3N1ZmZpeGVzIDsgZG8KKyAgICBJRlM9JG9sZF9JRlMKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfc3VmZml4X2N1cmxfb2ZmX3QiID0gInh1bmtub3duIjsgdGhlbgorICAgICAgY2FzZSAkdG1wX3NzdWYgaW4KKyAgICAgICAgaTY0IHwgaTMyIHwgaTE2KQorICAgICAgICAgIHRtcF91c3VmPSJ1JHRtcF9zc3VmIgorICAgICAgICAgIDs7CisgICAgICAgIExMIHwgTCkKKyAgICAgICAgICB0bXBfdXN1Zj0iVSR0bXBfc3N1ZiIKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHRtcF91c3VmPSIiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfaW50dHlwZXMKKyAgICAgICAgICB0eXBlZGVmICRjdXJsX3R5cGVvZl9jdXJsX29mZl90IG5ld190OworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgIG5ld190IHMxOworICAgICAgICAgIG5ld190IHMyOworICAgICAgICAgIHMxID0gLTEwJHRtcF9zc3VmIDsKKyAgICAgICAgICBzMiA9ICAyMCR0bXBfc3N1ZiA7CisgICAgICAgICAgaWYoczEgPiBzMikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICBjdXJsX3N1ZmZpeF9jdXJsX29mZl90PSIkdG1wX3NzdWYiCisgICAgICAgIGN1cmxfc3VmZml4X2N1cmxfb2ZmX3R1PSIkdG1wX3VzdWYiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICBkb25lCisgIElGUz0kb2xkX0lGUworICAjCisgIGlmIHRlc3QgIngkY3VybF9zdWZmaXhfY3VybF9vZmZfdCIgPSAieHVua25vd24iOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgImNhbm5vdCBmaW5kIGNvbnN0YW50IHN1ZmZpeCBzdHJpbmcgZm9yIGN1cmxfb2ZmX3QuIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjdXJsX3N1ZmZpeF9jdXJsX29mZl90IiA+JjUKKyRhc19lY2hvICIkY3VybF9zdWZmaXhfY3VybF9vZmZfdCIgPiY2OyB9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBjb25zdGFudCBzdWZmaXggc3RyaW5nIGZvciB1bnNpZ25lZCBjdXJsX29mZl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGNvbnN0YW50IHN1ZmZpeCBzdHJpbmcgZm9yIHVuc2lnbmVkIGN1cmxfb2ZmX3QuLi4gIiA+JjY7IH0KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGN1cmxfc3VmZml4X2N1cmxfb2ZmX3R1IiA+JjUKKyRhc19lY2hvICIkY3VybF9zdWZmaXhfY3VybF9vZmZfdHUiID4mNjsgfQorICBmaQorICAjCisKKyAgIworICBpZiB0ZXN0ICIkeF9wdWxsX2hlYWRlcnMiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaCIgPSAieHllcyI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9FT0YKKyNkZWZpbmUgQ1VSTF9QVUxMX1NZU19UWVBFU19IIDEKK19FT0YKKworICAgIGZpCisgICAgaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3RkaW50X2giID0gInh5ZXMiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjZGVmaW5lIENVUkxfUFVMTF9TVERJTlRfSCAxCitfRU9GCisKKyAgICBmaQorICAgIGlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2giID0gInh5ZXMiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjZGVmaW5lIENVUkxfUFVMTF9JTlRUWVBFU19IIDEKK19FT0YKKworICAgIGZpCisgIGZpCisgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9FT0YKKyNkZWZpbmUgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCAkY3VybF90eXBlb2ZfY3VybF9vZmZfdAorX0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIiRjdXJsX2Zvcm1hdF9jdXJsX29mZl90IgorX0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVICIkY3VybF9mb3JtYXRfY3VybF9vZmZfdHUiCitfRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9FT0YKKyNkZWZpbmUgQ1VSTF9GT1JNQVRfT0ZGX1QgIiUkY3VybF9mb3JtYXRfY3VybF9vZmZfdCIKK19FT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0VPRgorI2RlZmluZSBDVVJMX1NJWkVPRl9DVVJMX09GRl9UICRjdXJsX3NpemVvZl9jdXJsX29mZl90CitfRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9FT0YKKyNkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCAkY3VybF9zdWZmaXhfY3VybF9vZmZfdAorX0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjZGVmaW5lIENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVICRjdXJsX3N1ZmZpeF9jdXJsX29mZl90dQorX0VPRgorCisgICMKKworCisKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBPUyBpcyBBSVggKHRvIGRlZmluZSBfQUxMX1NPVVJDRSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgT1MgaXMgQUlYICh0byBkZWZpbmUgX0FMTF9TT1VSQ0UpLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmZGVmIF9BSVgKKyAgIHllc190aGlzX2lzX2FpeAorI2VuZGlmCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInllc190aGlzX2lzX2FpeCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgJGFzX2VjaG8gIiNkZWZpbmUgX0FMTF9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oCisKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCisKKworICAgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBfVEhSRUFEX1NBRkUgaXMgYWxyZWFkeSBkZWZpbmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIF9USFJFQURfU0FGRSBpcyBhbHJlYWR5IGRlZmluZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZmRlZiBfVEhSRUFEX1NBRkUKKyAgICAgIGludCBkdW1teT0xOworI2Vsc2UKKyAgICAgIGZvcmNlIGNvbXBpbGF0aW9uIGVycm9yCisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRtcF90aHJlYWRfc2FmZV9pbml0aWFsbHlfZGVmaW5lZD0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0bXBfdGhyZWFkX3NhZmVfaW5pdGlhbGx5X2RlZmluZWQ9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRtcF90aHJlYWRfc2FmZV9pbml0aWFsbHlfZGVmaW5lZCIgPSAibm8iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBfVEhSRUFEX1NBRkUgaXMgYWN0dWFsbHkgbmVlZGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIF9USFJFQURfU0FGRSBpcyBhY3R1YWxseSBuZWVkZWQuLi4gIiA+JjY7IH0KKworICBjYXNlICRob3N0X29zIGluCisgICAgYWl4WzEyM10uKiB8IGFpeDQuWzAxMl0uKikKKyAgICAgICAgICAgIHRtcF9uZWVkX3RocmVhZF9zYWZlPSJubyIKKyAgICAgIDs7CisgICAgYWl4KikKKyAgICAgICAgICAgIHRtcF9uZWVkX3RocmVhZF9zYWZlPSJ5ZXMiCisgICAgICA7OworICAgICopCisgICAgICB0bXBfbmVlZF90aHJlYWRfc2FmZT0ibm8iCisgICAgICA7OworICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkdG1wX25lZWRfdGhyZWFkX3NhZmUiID0gInllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIF9USFJFQURfU0FGRSBpcyBvbndhcmRzIGRlZmluZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgX1RIUkVBRF9TQUZFIGlzIG9ud2FyZHMgZGVmaW5lZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdG1wX3RocmVhZF9zYWZlX2luaXRpYWxseV9kZWZpbmVkIiA9ICJ5ZXMiIHx8CisgICAgdGVzdCAiJHRtcF9uZWVkX3RocmVhZF9zYWZlIiA9ICJ5ZXMiOyB0aGVuCisKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9USFJFQURfU0FGRSAxIiA+PmNvbmZkZWZzLmgKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9FT0YKKyNpZm5kZWYgX1RIUkVBRF9TQUZFCisjICBkZWZpbmUgX1RIUkVBRF9TQUZFCisjZW5kaWYKK19FT0YKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgZmkKKyAgIworCisKKyAgICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgX1JFRU5UUkFOVCBpcyBhbHJlYWR5IGRlZmluZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgX1JFRU5UUkFOVCBpcyBhbHJlYWR5IGRlZmluZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZmRlZiBfUkVFTlRSQU5UCisgICAgICBpbnQgZHVtbXk9MTsKKyNlbHNlCisgICAgICBmb3JjZSBjb21waWxhdGlvbiBlcnJvcgorI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0bXBfcmVlbnRyYW50X2luaXRpYWxseV9kZWZpbmVkPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRtcF9yZWVudHJhbnRfaW5pdGlhbGx5X2RlZmluZWQ9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRtcF9yZWVudHJhbnRfaW5pdGlhbGx5X2RlZmluZWQiID0gIm5vIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgX1JFRU5UUkFOVCBpcyBhY3R1YWxseSBuZWVkZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgX1JFRU5UUkFOVCBpcyBhY3R1YWxseSBuZWVkZWQuLi4gIiA+JjY7IH0KKworICBjYXNlICRob3N0X29zIGluCisgICAgc29sYXJpcyopCisgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ibm8iCisgICAgICA7OworICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2luY2x1ZGUgPGVycm5vLmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpZigwICE9IGVycm5vKQorICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXJybm89InllcyIKKworZWxzZQorCisgICAgdG1wX2Vycm5vPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0ICIkdG1wX2Vycm5vIiA9ICJ5ZXMiOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworI2lmZGVmIGVycm5vCisgICAgICAgIGludCBkdW1teT0xOworI2Vsc2UKKyAgICAgICAgZm9yY2UgY29tcGlsYXRpb24gZXJyb3IKKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgdG1wX2Vycm5vPSJlcnJub19tYWNyb19kZWZpbmVkIgorCitlbHNlCisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxlcnJuby5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworI2lmZGVmIGVycm5vCisgICAgICAgICAgaW50IGR1bW15PTE7CisjZWxzZQorICAgICAgICAgIGZvcmNlIGNvbXBpbGF0aW9uIGVycm9yCisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgdG1wX2Vycm5vPSJlcnJub19tYWNyb19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKworICAgIGZpCisgICAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisKKyAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgZ210aW1lX3IgaW5ub2N1b3VzX2dtdGltZV9yCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIGdtdGltZV9yCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnbXRpbWVfciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9nbXRpbWVfciB8fCBkZWZpbmVkIF9fc3R1Yl9fX2dtdGltZV9yCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdtdGltZV9yICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZ210aW1lX3I9InllcyIKKworZWxzZQorCisgICAgdG1wX2dtdGltZV9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiR0bXBfZ210aW1lX3IiID0gInllcyI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdtdGltZV9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB0bXBfZ210aW1lX3I9InByb3RvX2RlY2xhcmVkIgorCitlbHNlCisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJnbXRpbWVfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgICB0bXBfZ210aW1lX3I9InByb3RvX25lZWRzX3JlZW50cmFudCIKKyAgICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKworICBmaQorICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBsb2NhbHRpbWVfciBpbm5vY3VvdXNfbG9jYWx0aW1lX3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgbG9jYWx0aW1lX3IKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGxvY2FsdGltZV9yICgpOworI2lmIGRlZmluZWQgX19zdHViX2xvY2FsdGltZV9yIHx8IGRlZmluZWQgX19zdHViX19fbG9jYWx0aW1lX3IKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gbG9jYWx0aW1lX3IgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9sb2NhbHRpbWVfcj0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfbG9jYWx0aW1lX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAiJHRtcF9sb2NhbHRpbWVfciIgPSAieWVzIjsgdGhlbgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibG9jYWx0aW1lX3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHRtcF9sb2NhbHRpbWVfcj0icHJvdG9fZGVjbGFyZWQiCisKK2Vsc2UKKworICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImxvY2FsdGltZV9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICAgIHRtcF9sb2NhbHRpbWVfcj0icHJvdG9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorCisgIGZpCisgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIHN0cmVycm9yX3IgaW5ub2N1b3VzX3N0cmVycm9yX3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgc3RyZXJyb3JfcgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc3RyZXJyb3JfciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9zdHJlcnJvcl9yIHx8IGRlZmluZWQgX19zdHViX19fc3RyZXJyb3JfcgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzdHJlcnJvcl9yICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfc3RyZXJyb3Jfcj0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfc3RyZXJyb3Jfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0ICIkdG1wX3N0cmVycm9yX3IiID0gInllcyI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAic3RyZXJyb3JfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgdG1wX3N0cmVycm9yX3I9InByb3RvX2RlY2xhcmVkIgorCitlbHNlCisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInN0cmVycm9yX3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgICAgdG1wX3N0cmVycm9yX3I9InByb3RvX25lZWRzX3JlZW50cmFudCIKKyAgICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKworICBmaQorICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBzdHJ0b2tfciBpbm5vY3VvdXNfc3RydG9rX3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgc3RydG9rX3IKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cnRva19yICgpOworI2lmIGRlZmluZWQgX19zdHViX3N0cnRva19yIHx8IGRlZmluZWQgX19zdHViX19fc3RydG9rX3IKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gc3RydG9rX3IgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9zdHJ0b2tfcj0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfc3RydG9rX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAiJHRtcF9zdHJ0b2tfciIgPSAieWVzIjsgdGhlbgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzdHJ0b2tfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgdG1wX3N0cnRva19yPSJwcm90b19kZWNsYXJlZCIKKworZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzdHJ0b2tfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgICB0bXBfc3RydG9rX3I9InByb3RvX25lZWRzX3JlZW50cmFudCIKKyAgICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKworICBmaQorICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBpbmV0X250b2FfciBpbm5vY3VvdXNfaW5ldF9udG9hX3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgaW5ldF9udG9hX3IKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGluZXRfbnRvYV9yICgpOworI2lmIGRlZmluZWQgX19zdHViX2luZXRfbnRvYV9yIHx8IGRlZmluZWQgX19zdHViX19faW5ldF9udG9hX3IKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gaW5ldF9udG9hX3IgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9pbmV0X250b2Ffcj0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfaW5ldF9udG9hX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAiJHRtcF9pbmV0X250b2FfciIgPSAieWVzIjsgdGhlbgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImluZXRfbnRvYV9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB0bXBfaW5ldF9udG9hX3I9InByb3RvX2RlY2xhcmVkIgorCitlbHNlCisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiaW5ldF9udG9hX3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgICAgdG1wX2luZXRfbnRvYV9yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisKKyAgZmkKKyAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgZ2V0aG9zdGJ5YWRkcl9yIGlubm9jdW91c19nZXRob3N0YnlhZGRyX3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgZ2V0aG9zdGJ5YWRkcl9yCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRob3N0YnlhZGRyX3IgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfZ2V0aG9zdGJ5YWRkcl9yIHx8IGRlZmluZWQgX19zdHViX19fZ2V0aG9zdGJ5YWRkcl9yCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldGhvc3RieWFkZHJfciAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2dldGhvc3RieWFkZHJfcj0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfZ2V0aG9zdGJ5YWRkcl9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiR0bXBfZ2V0aG9zdGJ5YWRkcl9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZ2V0aG9zdGJ5YWRkcl9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB0bXBfZ2V0aG9zdGJ5YWRkcl9yPSJwcm90b19kZWNsYXJlZCIKKworZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldGhvc3RieWFkZHJfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgICB0bXBfZ2V0aG9zdGJ5YWRkcl9yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisKKyAgZmkKKyAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgZ2V0aG9zdGJ5bmFtZV9yIGlubm9jdW91c19nZXRob3N0YnluYW1lX3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgZ2V0aG9zdGJ5bmFtZV9yCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRob3N0YnluYW1lX3IgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfZ2V0aG9zdGJ5bmFtZV9yIHx8IGRlZmluZWQgX19zdHViX19fZ2V0aG9zdGJ5bmFtZV9yCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldGhvc3RieW5hbWVfciAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2dldGhvc3RieW5hbWVfcj0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfZ2V0aG9zdGJ5bmFtZV9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiR0bXBfZ2V0aG9zdGJ5bmFtZV9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZ2V0aG9zdGJ5bmFtZV9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB0bXBfZ2V0aG9zdGJ5bmFtZV9yPSJwcm90b19kZWNsYXJlZCIKKworZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldGhvc3RieW5hbWVfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgICB0bXBfZ2V0aG9zdGJ5bmFtZV9yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisKKyAgZmkKKyAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgZ2V0cHJvdG9ieW5hbWVfciBpbm5vY3VvdXNfZ2V0cHJvdG9ieW5hbWVfcgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBnZXRwcm90b2J5bmFtZV9yCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRwcm90b2J5bmFtZV9yICgpOworI2lmIGRlZmluZWQgX19zdHViX2dldHByb3RvYnluYW1lX3IgfHwgZGVmaW5lZCBfX3N0dWJfX19nZXRwcm90b2J5bmFtZV9yCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldHByb3RvYnluYW1lX3IgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9nZXRwcm90b2J5bmFtZV9yPSJ5ZXMiCisKK2Vsc2UKKworICAgIHRtcF9nZXRwcm90b2J5bmFtZV9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiR0bXBfZ2V0cHJvdG9ieW5hbWVfciIgPSAieWVzIjsgdGhlbgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldHByb3RvYnluYW1lX3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHRtcF9nZXRwcm90b2J5bmFtZV9yPSJwcm90b19kZWNsYXJlZCIKKworZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldHByb3RvYnluYW1lX3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgICAgdG1wX2dldHByb3RvYnluYW1lX3I9InByb3RvX25lZWRzX3JlZW50cmFudCIKKyAgICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKworICBmaQorICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBnZXRzZXJ2Ynlwb3J0X3IgaW5ub2N1b3VzX2dldHNlcnZieXBvcnRfcgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBnZXRzZXJ2Ynlwb3J0X3IKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldHNlcnZieXBvcnRfciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9nZXRzZXJ2Ynlwb3J0X3IgfHwgZGVmaW5lZCBfX3N0dWJfX19nZXRzZXJ2Ynlwb3J0X3IKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZ2V0c2VydmJ5cG9ydF9yICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisKK2Vsc2UKKworICAgIHRtcF9nZXRzZXJ2Ynlwb3J0X3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAiJHRtcF9nZXRzZXJ2Ynlwb3J0X3IiID0gInllcyI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJnZXRzZXJ2Ynlwb3J0X3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHRtcF9nZXRzZXJ2Ynlwb3J0X3I9InByb3RvX2RlY2xhcmVkIgorCitlbHNlCisKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZ2V0c2VydmJ5cG9ydF9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICAgIHRtcF9nZXRzZXJ2Ynlwb3J0X3I9InByb3RvX25lZWRzX3JlZW50cmFudCIKKyAgICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKworICBmaQorCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJ5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBfUkVFTlRSQU5UIGlzIG9ud2FyZHMgZGVmaW5lZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBfUkVFTlRSQU5UIGlzIG9ud2FyZHMgZGVmaW5lZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdG1wX3JlZW50cmFudF9pbml0aWFsbHlfZGVmaW5lZCIgPSAieWVzIiB8fAorICAgIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gInllcyI7IHRoZW4KKworCiskYXNfZWNobyAiI2RlZmluZSBORUVEX1JFRU5UUkFOVCAxIiA+PmNvbmZkZWZzLmgKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9FT0YKKyNpZm5kZWYgX1JFRU5UUkFOVAorIyAgZGVmaW5lIF9SRUVOVFJBTlQKKyNlbmRpZgorX0VPRgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBmaQorICAjCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxhcmdlZmlsZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9sYXJnZWZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9sYXJnZWZpbGU7CitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX2xhcmdlZmlsZSIgIT0gbm87IHRoZW4KKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9ucyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9ucyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3N5c19sYXJnZWZpbGVfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9zeXNfbGFyZ2VmaWxlX0NDPW5vCisgICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgIGFjX3NhdmVfQ0M9JENDCisgICAgICAgd2hpbGUgOjsgZG8KKwkgIyBJUklYIDYuMiBhbmQgbGF0ZXIgZG8gbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMgYnkgZGVmYXVsdCwKKwkgIyBzbyB1c2UgdGhlIEMgY29tcGlsZXIncyAtbjMyIG9wdGlvbiBpZiB0aGF0IGhlbHBzLgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKKwkgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgQ0M9IiRDQyAtbjMyIgorCSBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0M9JyAtbjMyJzsgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisJIGJyZWFrCisgICAgICAgZG9uZQorICAgICAgIENDPSRhY19zYXZlX0NDCisgICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgPiY2OyB9CisgIGlmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiAhPSBubzsgdGhlbgorICAgIENDPSRDQyRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDCisgIGZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHdoaWxlIDo7IGRvCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQgbWFpbiAodm9pZCkKK3sKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz1ubzsgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludCBtYWluICh2b2lkKQoreworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPTY0OyBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz11bmtub3duCisgIGJyZWFrCitkb25lCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIiA+JjY7IH0KK2Nhc2UgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIGluICMoCisgIG5vIHwgdW5rbm93bikgOzsKKyAgKikKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzCitfQUNFT0YKKzs7Citlc2FjCitybSAtcmYgY29uZnRlc3QqCisgIGlmIHRlc3QgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzID0gdW5rbm93bjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9MQVJHRV9GSUxFUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfTEFSR0VfRklMRVMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zeXNfbGFyZ2VfZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICB3aGlsZSA6OyBkbworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPW5vOyBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjZGVmaW5lIF9MQVJHRV9GSUxFUyAxCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPTE7IGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGFjX2N2X3N5c19sYXJnZV9maWxlcz11bmtub3duCisgIGJyZWFrCitkb25lCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNjsgfQorY2FzZSAkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIGluICMoCisgIG5vIHwgdW5rbm93bikgOzsKKyAgKikKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgX0xBUkdFX0ZJTEVTICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMKK19BQ0VPRgorOzsKK2VzYWMKK3JtIC1yZiBjb25mdGVzdCoKKyAgZmkKK2ZpCisKKworZW5hYmxlX3dpbjMyX2RsbD15ZXMKKworY2FzZSAkaG9zdCBpbgorKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWNlZ2NjKikKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FTK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorICBhY19jdl9wcm9nX0FTPSIkQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUz0iJHthY190b29sX3ByZWZpeH1hcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBUz0kYWNfY3ZfcHJvZ19BUworaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFTIiA+JjUKKyRhc19lY2hvICIkQVMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FTIjsgdGhlbgorICBhY19jdF9BUz0kQVMKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgYXM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FTK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FTPSIkYWNfY3RfQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iYXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVM9JGFjX2N2X3Byb2dfYWNfY3RfQVMKK2lmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0FTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVMiID0geDsgdGhlbgorICAgIEFTPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBBUz0kYWNfY3RfQVMKKyAgZmkKK2Vsc2UKKyAgQVM9IiRhY19jdl9wcm9nX0FTIgorZmkKKworICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorICBhY19jdF9ETExUT09MPSRETExUT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisgICAgRExMVE9PTD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorICBmaQorZWxzZQorICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorZmkKKworICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX09CSkRVTVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKK2lmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKK2lmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCisgICAgT0JKRFVNUD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorICBmaQorZWxzZQorICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgorZmkKKworICA7OworZXNhYworCit0ZXN0IC16ICIkQVMiICYmIEFTPWFzCisKKworCisKKwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorCisKKworCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGFyY2gtT1MgaG9zdCBpcyBBTUQ2NC1MaW51eC9GcmVlQlNEICh0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIHdpdGggUElDKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBhcmNoLU9TIGhvc3QgaXMgQU1ENjQtTGludXgvRnJlZUJTRCAodG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyB3aXRoIFBJQykuLi4gIiA+JjY7IH0KK2Nhc2UgJGhvc3QgaW4KKyAgeDg2XzY0KmxpbnV4KnxhbWQ2NCpmcmVlYnNkKnxpYTY0KmZyZWVic2QqKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgd2l0aF9waWM9eWVzCisgICAgOzsKKyAgKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICA7OworZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIGljYyAodG8gYnVpbGQgd2l0aCBQSUMpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIGljYyAodG8gYnVpbGQgd2l0aCBQSUMpLi4uICIgPiY2OyB9CitjYXNlICRDQyBpbgorICBpY2MgfCAqL2ljYykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHdpdGhfcGljPXllcworICAgIDs7CisgICopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgOzsKK2VzYWMKKworY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjI7fSA7OworZXNhYworCisKKworbWFjcm9fdmVyc2lvbj0nMi40LjInCittYWNyb19yZXZpc2lvbj0nMS4zMzM3JworCisKKworCisKKworCisKKworCisKKworCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKworIyBCYWNrc2xhc2hpZnkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbgorIyBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworCitFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnQgLXIgLS0nCitlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludGYgJXNcbicKK2Vsc2UKKyAgIyBVc2UgdGhpcyBmdW5jdGlvbiBhcyBhIGZhbGxiYWNrIHRoYXQgYWx3YXlzIHdvcmtzLgorICBmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyAgeworICAgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskMQorX0xURUNIT19FT0YnCisgIH0KKyAgRUNITz0nZnVuY19mYWxsYmFja19lY2hvJworZmkKKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIiCit9CisKK2Nhc2UgIiRFQ0hPIiBpbgorICBwcmludGYqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnRmIiA+JjUKKyRhc19lY2hvICJwcmludGYiID4mNjsgfSA7OworICBwcmludCopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludCAtciIgPiY1CiskYXNfZWNobyAicHJpbnQgLXIiID4mNjsgfSA7OworICAqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogY2F0IiA+JjUKKyRhc19lY2hvICJjYXQiID4mNjsgfSA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1NFRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAgICAgICBhY19zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisgICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisgICAgICAgYWNfc2NyaXB0PSIkYWNfc2NyaXB0JGFzX25sJGFjX3NjcmlwdCIKKyAgICAgZG9uZQorICAgICBlY2hvICIkYWNfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAorICAgICB7IGFjX3NjcmlwdD07IHVuc2V0IGFjX3NjcmlwdDt9CisgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgIGFjX3BhdGhfU0VEX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfU0VEPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9TRUQiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX1NFRCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX1NFRCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfU0VECitjYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NFRF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCisgICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfU0VEPSRTRUQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQorIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgorICBybSAtZiBjb25mdGVzdC5zZWQKKwordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmZ3JlcC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0ZHUkVQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyAnYWIqYycgfCAkR1JFUCAtRiAnYWIqYycgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRkdSRVA9IiRHUkVQIC1GIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRkdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRkdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBmZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRkdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0ZHUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9GR1JFUCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0ZHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9GR1JFUAorY2FzZSBgIiRhY19wYXRoX0ZHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIgYWNfcGF0aF9GR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnRkdSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfRkdSRVAiIEZHUkVQIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9GR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiCisgICAgICBhY19wYXRoX0ZHUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfRkdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0ZHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIGZncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9GR1JFUD0kRkdSRVAKK2ZpCisKKyAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0ZHUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9GR1JFUCIgPiY2OyB9CisgRkdSRVA9IiRhY19jdl9wYXRoX0ZHUkVQIgorCisKK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKK2Vsc2UKKyAgd2l0aF9nbnVfbGQ9bm8KK2ZpCisKK2FjX3Byb2c9bGQKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gIiA+JjY7IH0KKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbXFwvXSogfCA/OltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTEQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCitlbHNlCisgIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaQorZmkKKworTEQ9IiRsdF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9OTStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09IiROTSIKK2Vsc2UKKyAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgorICBmaQorICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KKyAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKKyAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KKwkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKKwkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKKwljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCisJICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgorCSAgYnJlYWsKKwkgIDs7CisJKikKKwkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSAgKi9kZXYvbnVsbCopCisJICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCisJICAgIGJyZWFrCisJICAgIDs7CisJICAqKQorCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgZG9uZQorICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9OTSIgPiY2OyB9CitpZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgorICBOTT0iJGx0X2N2X3BhdGhfTk0iCitlbHNlCisgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgorICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgorICAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBlbHNlCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19EVU1QQklOK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCisgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJERVTVBCSU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitEVU1QQklOPSRhY19jdl9wcm9nX0RVTVBCSU4KK2lmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERVTVBCSU4iID4mNQorJGFzX2VjaG8gIiREVU1QQklOIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkRFVNUEJJTiIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiREVU1QQklOIjsgdGhlbgorICBhY19jdF9EVU1QQklOPSREVU1QQklOCisgIGZvciBhY19wcm9nIGluIGR1bXBiaW4gImxpbmsgLWR1bXAiCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19jdF9EVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRFVNUEJJTj0kYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOCitpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EVU1QQklOIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfRFVNUEJJTiIgPSB4OyB0aGVuCisgICAgRFVNUEJJTj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEVU1QQklOPSRhY19jdF9EVU1QQklOCisgIGZpCitmaQorCisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICAqQ09GRiopCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIERVTVBCSU49OgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgorICAgIE5NPSIkRFVNUEJJTiIKKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9ubV9pbnRlcmZhY2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkYWNfY29tcGlsZVwiIiA+JjUpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mNSkKKyAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiY1KQorICBjYXQgY29uZnRlc3Qub3V0ID4mNQorICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNjsgfQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAiID4mNjsgfQorTE5fUz0kYXNfbG5fcworaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKKyRhc19lY2hvICJubywgdXNpbmcgJExOX1MiID4mNjsgfQorZmkKKworIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3N5c19tYXhfY21kX2xlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgaT0wCisgIHRlc3RzdHJpbmc9IkFCQ0QiCisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG1pbnQqKQorICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3MyKikKKyAgICAjIFRoZSB0ZXN0IHRha2VzIGEgbG9uZyB0aW1lIG9uIE9TLzIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTIKKyAgICA7OworCisgIG9zZiopCisgICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCisgICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKKyAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgorICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAorICAgICMKKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgorICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KKyAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIHNjbzMuMnY1KikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQorICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKlsJIF0vLydgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4CisgICAgZmkKKyAgICA7OworICAqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICBlbHNlCisgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbworICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CisgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICAgIHdoaWxlIHsgdGVzdCAiWCJgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKworZmkKKworaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIiA+JjUKKyRhc19lY2hvICJub25lIiA+JjY7IH0KK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKworCisKKworCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OyB9CisjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworeHNpX3NoZWxsPW5vCisoIF9sdF9kdW1teT0iYS9iL2MiCisgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisgICAgICA9IGMsYS9iLGIvYywgXAorICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiB4c2lfc2hlbGw9eWVzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHhzaV9zaGVsbCIgPiY1CiskYXNfZWNobyAiJHhzaV9zaGVsbCIgPiY2OyB9CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiLi4uICIgPiY2OyB9CitsdF9zaGVsbF9hcHBlbmQ9bm8KKyggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiQxKz1cJDIiICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAorICAgID4vZGV2L251bGwgMj4mMSBcCisgICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfc2hlbGxfYXBwZW5kIiA+JjUKKyRhc19lY2hvICIkbHRfc2hlbGxfYXBwZW5kIiA+JjY7IH0KKworCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHRfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgbHRfdW5zZXQ9ZmFsc2UKK2ZpCisKKworCisKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKi0qLWN5Z3dpbiogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgIDs7Citlc2FjCisKK2ZpCisKK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCitsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKK2Nhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworZXNhYworCitmaQorCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnPSctcicKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNjsgfQorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCitjYXNlICRyZWxvYWRfZmxhZyBpbgorIiIgfCAiICIqKSA7OworKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Citlc2FjCityZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisgICAgZmkKKyAgICA7OworICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX09CSkRVTVA9IiRPQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09CSkRVTVA9JGFjX2N2X3Byb2dfT0JKRFVNUAoraWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJE9CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCisgIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iJGFjX2N0X09CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09CSkRVTVA9JGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUAoraWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PQkpEVU1QIiA9IHg7IHRoZW4KKyAgICBPQkpEVU1QPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCisgIGZpCitlbHNlCisgIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCitmaQorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKK2x0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKKyMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorIyBgdW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCisjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCisjIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorCitjYXNlICRob3N0X29zIGluCithaXhbNC05XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpWzQ1XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisgIDs7CisKK2N5Z3dpbiopCisgICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICA7OworCittaW5ndyogfCBwdzMyKikKKyAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKKyAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGFzc3VtZXMgQlNEIG5tLCBzbyBkaXNhbGxvdyBpdCBpZiB1c2luZyBNUyBkdW1wYmluLgorICBpZiAoIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIkJTRCBubSIgJiYgZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgZWxzZQorICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICBmaQorICA7OworCitjZWdjYyopCisgICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVszLTldODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hhaWt1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaHB1eDEwLjIwKiB8IGhwdXgxMSopCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KKyAgICA7OworICBocHBhKjY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEZbIC1dWzAtOV1bMC05XSkoLWJpdCk/KCBbTE1dU0IpPyBzaGFyZWQgb2JqZWN0KCBmaWxlKT9bLCAtXSogUEEtUklTQyBbMC05XVwuWzAtOV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxQQS1SSVNDWzAtOV1cLlswLTldKSBzaGFyZWQgbGlicmFyeScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCisgICAgOzsKKyAgZXNhYworICA7OworCitpbnRlcml4WzMtOV0qKQorICAjIFBJQyBjb2RlIGlzIGJyb2tlbiBvbiBJbnRlcml4IDMueCwgdGhhdCdzIHdoeSB8XC5hIG5vdCB8X3BpY1wuYSBoZXJlCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfFwuYSkkJworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRMRCBpbgorICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7CisgICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OworICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7CisgICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgZXNhYworICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCisjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bMC05XVswLTldKiBWZXJzaW9uIFswLTldJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisKK2ZpbGVfbWFnaWNfZ2xvYj0KK3dhbnRfbm9jYXNlZ2xvYj1ubworaWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBtaW5ndyogfCBwdzMyKikKKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisgICAgZWxzZQorICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK2ZpCisKK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCit0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCitpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorICAgIERMTFRPT0w9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKyAgZmkKK2Vsc2UKKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKK2ZpCisKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKworY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisgICotLWlkZW50aWZ5LXN0cmljdCopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKyAgICA7OworICBlc2FjCisgIDs7CisqKQorICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorICA7OworZXNhYworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAordGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGFyCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUiIgPiY1CiskYXNfZWNobyAiJEFSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgIGFjX2N0X0FSPSRBUgorICBmb3IgYWNfcHJvZyBpbiBhcgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfY3RfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKK2lmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0FSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgIEFSPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBBUj0kYWNfY3RfQVIKKyAgZmkKK2ZpCisKKzogJHtBUj1hcn0KKzogJHtBUl9GTEFHUz1jcnV9CisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQgbWFpbiAodm9pZCkKK3sKKworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorCitpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KK2Vsc2UKKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCitmaQorCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1JBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUkFOTElCIiA+JjUKKyRhc19lY2hvICIkUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9SQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorICAgIFJBTkxJQj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorICBmaQorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CisKKworCisKKworCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgorZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj15ZXMgOzsKKyAgKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8gOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKKworCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW0JDREVHUlNUXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW19BLVphLXpdW19BLVphLXowLTldKlwpJworCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW0JDRFRdJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbQUJDREdJU1RXXScKKyAgOzsKK2hwdXgqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tBQkNERUdSU1RdJworICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbQkNERUdSU1RdJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW0JDREVHUVJTVF0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW0JEUlRdJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbRFRdJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tEVF0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbQUJEVF0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW0RGTlNUVV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJyA7OworZXNhYworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCisgICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKyAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9eQ09GRiBTWU1CT0wgVEFCTEUve2ZvcihpIGluIGhpZGUpIGRlbGV0ZSBoaWRlW2ldfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeCIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitfTFRfRU9GCisKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCisgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3RcIiI7IH0gPiY1CisgIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZChfX29zZl9fKQorLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2Vsc2UKKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitfTFRfRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCisJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKK30KK2x0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKwkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JjUKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCisKK2ZpCisKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KK2ZpCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGZhaWxlZCIgPiY1CiskYXNfZWNobyAiZmFpbGVkIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKKyRhc19lY2hvICJvayIgPiY2OyB9CitmaQorCisjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzcm9vdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc3lzcm9vdDsKK2Vsc2UKKyAgd2l0aF9zeXNyb290PW5vCitmaQorCisKK2x0X3N5c3Jvb3Q9CitjYXNlICR7d2l0aF9zeXNyb290fSBpbiAjKAorIHllcykKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisgICBmaQorICAgOzsgIygKKyAvKikKKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgIDs7ICMoCisgbm98JycpCisgICA7OyAjKAorICopCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX3N5c3Jvb3R9IiA+JjUKKyRhc19lY2hvICIke3dpdGhfc3lzcm9vdH0iID4mNjsgfQorICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisgICA7OworZXNhYworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitmaQorCit0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqRUxGLTMyKikKKwlIUFVYX0lBNjRfTU9ERT0iMzIiCisJOzsKKyAgICAgICpFTEYtNjQqKQorCUhQVVhfSUE2NF9NT0RFPSI2NCIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworKi0qLWlyaXg2KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICcjbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAorczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJICAgIDs7CisJICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKwkgICAgOzsKKwkgIHMzOTB4LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKjY0LWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorCSAgICA7OworCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKKwkgICAgOzsKKwkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgorCSAgICA7OworCSAgc3BhcmMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworKi0qLXNjbzMuMnY1KikKKyAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9jY19uZWVkc19iZWxmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXMKK2Vsc2UKKyAgbHRfY3ZfY2NfbmVlZHNfYmVsZj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNjsgfQorICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICBmaQorICA7OworKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKQorICAgICAgICBjYXNlICRob3N0IGluCisgICAgICAgIGk/ODYtKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKyAgICAgICAgICA7OworICAgICAgICBzcGFyYyotKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICAjIEdOVSBsZCAyLjIxIGludHJvZHVjZWQgX3NvbDIgZW11bGF0aW9ucy4gIFVzZSB0aGVtIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgJHtMRC1sZH0gLVYgfCBncmVwIF9zb2wyID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgIExEPSIke0xELWxkfV9zb2wyIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKK2VzYWMKKworbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAoraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CiskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKyAgICBNQU5JRkVTVF9UT09MPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKyAgZmkKK2Vsc2UKKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKK2ZpCisKK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworICBmaQorICBybSAtZiBjb25mdGVzdCoKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorICBNQU5JRkVTVF9UT09MPToKK2ZpCisKKworCisKKworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19EU1lNVVRJTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJERTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFNZTVVUSUw9JGFjX2N2X3Byb2dfRFNZTVVUSUwKK2lmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREU1lNVVRJTCIgPiY1CiskYXNfZWNobyAiJERTWU1VVElMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3RfRFNZTVVUSUw9JERTWU1VVElMCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iJGFjX2N0X0RTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9ImRzeW11dGlsIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RTWU1VVElMPSRhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMCitpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFNZTVVUSUwiID4mNQorJGFzX2VjaG8gIiRhY19jdF9EU1lNVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RTWU1VVElMIiA9IHg7IHRoZW4KKyAgICBEU1lNVVRJTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEU1lNVVRJTD0kYWNfY3RfRFNZTVVUSUwKKyAgZmkKK2Vsc2UKKyAgRFNZTVVUSUw9IiRhY19jdl9wcm9nX0RTWU1VVElMIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1ubWVkaXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX05NRURJVCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCisgIGFjX2N2X3Byb2dfTk1FRElUPSIkTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfTk1FRElUPSIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitOTUVESVQ9JGFjX2N2X3Byb2dfTk1FRElUCitpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE5NRURJVCIgPiY1CiskYXNfZWNobyAiJE5NRURJVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTk1FRElUIjsgdGhlbgorICBhY19jdF9OTUVESVQ9JE5NRURJVAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbm1lZGl0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9OTUVESVQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0iJGFjX2N0X05NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0ibm1lZGl0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X05NRURJVD0kYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQKK2lmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTk1FRElUIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTk1FRElUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTk1FRElUIiA9IHg7IHRoZW4KKyAgICBOTUVESVQ9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTk1FRElUPSRhY19jdF9OTUVESVQKKyAgZmkKK2Vsc2UKKyAgTk1FRElUPSIkYWNfY3ZfcHJvZ19OTUVESVQiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1saXBvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19MSVBPK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisgIGFjX2N2X3Byb2dfTElQTz0iJExJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19MSVBPPSIke2FjX3Rvb2xfcHJlZml4fWxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTElQTz0kYWNfY3ZfcHJvZ19MSVBPCitpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSVBPIiA+JjUKKyRhc19lY2hvICIkTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTElQTyI7IHRoZW4KKyAgYWNfY3RfTElQTz0kTElQTworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxpcG87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0xJUE8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSIkYWNfY3RfTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0xJUE89ImxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTElQTz0kYWNfY3ZfcHJvZ19hY19jdF9MSVBPCitpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9MSVBPIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0xJUE8iID0geDsgdGhlbgorICAgIExJUE89IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTElQTz0kYWNfY3RfTElQTworICBmaQorZWxzZQorICBMSVBPPSIkYWNfY3ZfcHJvZ19MSVBPIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PVE9PTD0iJE9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT1RPT0w9JGFjX2N2X3Byb2dfT1RPT0wKK2lmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTCIgPiY1CiskYXNfZWNobyAiJE9UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTCI7IHRoZW4KKyAgYWNfY3RfT1RPT0w9JE9UT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0iJGFjX2N0X09UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9Im90b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MPSRhY19jdl9wcm9nX2FjX2N0X09UT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MIiA9IHg7IHRoZW4KKyAgICBPVE9PTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPVE9PTD0kYWNfY3RfT1RPT0wKKyAgZmkKK2Vsc2UKKyAgT1RPT0w9IiRhY19jdl9wcm9nX09UT09MIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfT1RPT0w2NCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorICBhY19jdl9wcm9nX09UT09MNjQ9IiRPVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJHthY190b29sX3ByZWZpeH1vdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09UT09MNjQ9JGFjX2N2X3Byb2dfT1RPT0w2NAoraWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJE9UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MNjQiOyB0aGVuCisgIGFjX2N0X09UT09MNjQ9JE9UT09MNjQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvdG9vbDY0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0iJGFjX2N0X09UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSJvdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MNjQ9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NAoraWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTDY0IiA9IHg7IHRoZW4KKyAgICBPVE9PTDY0PSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9UT09MNjQ9JGFjX2N0X09UT09MNjQKKyAgZmkKK2Vsc2UKKyAgT1RPT0w2ND0iJGFjX2N2X3Byb2dfT1RPT0w2NCIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCisJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCisJIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCisJIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQorCSMgbGluayBmbGFncy4KKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKKwllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMiID4mNQorCSRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCisJICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgorICAgICAgICBfbHRfcmVzdWx0PSQ/CisJIyBJZiB0aGVyZSBpcyBhIG5vbi1lbXB0eSBlcnJvciBsb2csIGFuZCAic2luZ2xlX21vZHVsZSIKKwkjIGFwcGVhcnMgaW4gaXQsIGFzc3VtZSB0aGUgZmxhZyBjYXVzZWQgYSBsaW5rZXIgd2FybmluZworICAgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBzaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKwkjIE90aGVyd2lzZSwgaWYgdGhlIG91dHB1dCB3YXMgY3JlYXRlZCB3aXRoIGEgMCBleGl0IGNvZGUgZnJvbQorCSMgdGhlIGNvbXBpbGVyLCBpdCB3b3JrZWQuCisJZWxpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgJF9sdF9yZXN1bHQgLWVxIDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKwlmaQorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwlybSAtZiBjb25mdGVzdC4qCisgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNjsgfQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluICh2b2lkKQoreworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXMKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNjsgfQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2xkX2ZvcmNlX2xvYWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9sZF9mb3JjZV9sb2FkPW5vCisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBmb3JjZWRfbG9hZGVkKCkgeyByZXR1cm4gMjt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIiA+JjUKKyAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBtYWluKCkgeyByZXR1cm4gMDt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIiA+JjUKKyAgICAgICRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEgMj5jb25mdGVzdC5lcnIKKyAgICAgIF9sdF9yZXN1bHQ9JD8KKyAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIGZvcmNlX2xvYWQgY29uZnRlc3QuZXJyOyB0aGVuCisJY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgICAgIGVsaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0ID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwlsdF9jdl9sZF9mb3JjZV9sb2FkPXllcworICAgICAgZWxzZQorCWNhdCBjb25mdGVzdC5lcnIgPiY1CisgICAgICBmaQorICAgICAgICBybSAtZiBjb25mdGVzdC5lcnIgbGliY29uZnRlc3QuYSBjb25mdGVzdCBjb25mdGVzdC5jCisgICAgICAgIHJtIC1yZiBjb25mdGVzdC5kU1lNCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA+JjY7IH0KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4xLiopCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luKikgIyBkYXJ3aW4gNS54IG9uCisgICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCisgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAorICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/CisgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCisJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bOTFdKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkxMC5bMDEyXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJMTAuKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IiAmJiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAibm8iOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKworZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJkbGZjbi5oIiAiYWNfY3ZfaGVhZGVyX2RsZmNuX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRExGQ05fSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworCisKKyMgU2V0IG9wdGlvbnMKKworCisKKyAgICAgICAgZW5hYmxlX2Rsb3Blbj1ubworCisKKworICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaGFyZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zaGFyZWQ7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc2hhcmVkPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc2hhcmVkPXllcworZmkKKworCisKKworCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zdGF0aWM7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OworICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisgICAgKikKKyAgICAgZW5hYmxlX3N0YXRpYz1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9zdGF0aWM9eWVzCitmaQorCisKKworCisKKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9waWM7IGx0X3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkd2l0aHZhbCBpbgorICAgIHllc3xubykgcGljX21vZGU9JHdpdGh2YWwgOzsKKyAgICAqKQorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgbHRfcGtnIGluICR3aXRodmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkbHRfcGtnIiA9ICJYJGx0X3AiOyB0aGVuCisJICBwaWNfbW9kZT15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgcGljX21vZGU9ZGVmYXVsdAorZmkKKworCit0ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKKworCisKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmFzdC1pbnN0YWxsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2Zhc3RfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCitmaQorCisKKworCisKKworCisKKworCisKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKK0xJQlRPT0xfREVQUz0iJGx0bWFpbiIKKworIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorCisKKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBvYmpkaXIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfb2JqZGlyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC5saWJzOyB0aGVuCisgIGx0X2N2X29iamRpcj0ubGlicworZWxzZQorICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorICBsdF9jdl9vYmpkaXI9X2xpYnMKK2ZpCitybWRpciAubGlicyAyPi9kZXYvbnVsbAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfb2JqZGlyIiA+JjY7IH0KK29iamRpcj0kbHRfY3Zfb2JqZGlyCisKKworCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBMVF9PQkpESVIgIiRsdF9jdl9vYmpkaXIvIgorX0FDRU9GCisKKworCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisgICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KKyAgaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgICAgQ09MTEVDVF9OQU1FUz0KKyAgICBleHBvcnQgQ09MTEVDVF9OQU1FUworICBmaQorICA7OworZXNhYworCisjIEdsb2JhbCB2YXJpYWJsZXM6CitvZmlsZT1saWJ0b29sCitjYW5fYnVpbGRfc2hhcmVkPXllcworCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCisKK3dpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCisKK29sZF9DQz0iJENDIgorb2xkX0NGTEFHUz0iJENGTEFHUyIKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwordGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCitmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorCisKKyMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTUFHSUNfQ01EK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTUFHSUNfQ01EIGluCitbXFwvKl0gfCAgPzpbXFwvXSopCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZTsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvJHthY190b29sX3ByZWZpeH1maWxlIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWMKK2ZpCisKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCisKKworaWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmlsZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX01BR0lDX0NNRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorW1xcLypdIHwgID86W1xcL10qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci9maWxlOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci9maWxlIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWMKK2ZpCisKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCisKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKKworbHRfc2F2ZV9DQz0iJENDIgorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitvYmpleHQ9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JworCisKKworCisKKworCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQworCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gY29uZnRlc3QqCisKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSAtciBjb25mdGVzdCoKKworCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKworbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIG52Y2MqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLVhjb21waWxlciAtZm5vLWJ1aWx0aW4nIDs7CisgICopCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtZm5vLWJ1aWx0aW4nIDs7CisgIGVzYWMKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPSB4eWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorZWxzZQorICAgIDoKK2ZpCisKK2ZpCisKKworCisKKworCisgIGx0X3Byb2dfY29tcGlsZXJfd2w9CitsdF9wcm9nX2NvbXBpbGVyX3BpYz0KK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorCisKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLURETExfRVhQT1JUJworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgaW50ZXJpeFszLTldKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisKKyAgICBtc2Rvc2RqZ3BwKikKKyAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCisgICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgbnZjYyopICMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctWGxpbmtlciAnCisgICAgICBpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSItWGNvbXBpbGVyICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIKKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisgICAgICBmaQorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9JytaJworCTs7CisgICAgICBlc2FjCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICBlY2MqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisgICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKyAgICAgIGljYyogfCBpZm9ydCopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgorICAgICAgbGY5NSopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworCTs7CisgICAgICBuYWdmb3IqKQorCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCTs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZnBpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgIDs7CisgICAgICBjY2MqKQorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgICA7OworICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQorCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSwgMTEuMSBvbiBQUEMgYW5kIEJsdWVHZW5lCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXFwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1xc3RhdGljbGluaycKKwk7OworICAgICAgKikKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDZXJlc1wgRm9ydHJhbiogfCAqU3VuKkZvcnRyYW4qXCBbMS03XS4qIHwgKlN1bipGb3J0cmFuKlwgOC5bMC0zXSopCisJICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPScnCisJICA7OworCSpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICcKKwkgIDs7CisJKlN1blwgQyopCisJICAjIFN1biBDIDUuOQorCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwkgIDs7CisgICAgICAgICpJbnRlbCpcIFtDRl0qQ29tcGlsZXIqKQorCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworCSAgOzsKKwkqUG9ydGxhbmRcIEdyb3VwKikKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICA7OworCWVzYWMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgcmRvcyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS2NvbmZvcm1fcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgdW5pY29zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctcGljJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQorICAgIDs7CisgICopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICA7OworZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9bm8KKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpYyBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljIiA7OworICAgICBlc2FjCitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworZmkKKworZmkKKworCisKKworCisKKworCisKKworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID0geHllczsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KK2ZpCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKworCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQorICBoYXJkX2xpbmtzPXllcworICAkUk0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQorJGFzX2VjaG8gIiRoYXJkX2xpbmtzIiA+JjY7IH0KKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisKKyAgcnVucGF0aF92YXI9CisgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgYXJjaGl2ZV9jbWRzPQorICBhcmNoaXZlX2V4cHN5bV9jbWRzPQorICBjb21waWxlcl9uZWVkc19vYmplY3Q9bm8KKyAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz1ubworICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9CisgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgaGFyZGNvZGVfYXV0b21hdGljPW5vCisgIGhhcmRjb2RlX2RpcmVjdD1ubworICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKyAgaGFyZGNvZGVfbWludXNfTD1ubworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisgIGluaGVyaXRfcnBhdGg9bm8KKyAgbGlua19hbGxfZGVwbGlicz11bmtub3duCisgIG1vZHVsZV9jbWRzPQorICBtb2R1bGVfZXhwc3ltX2NtZHM9CisgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9CisgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPQorICB0aHJlYWRfc2FmZV9mbGFnX3NwZWM9CisgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CisgIGluY2x1ZGVfZXhwc3ltcz0KKyAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKyAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgorICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCisgICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgorICBleGNsdWRlX2V4cHN5bXM9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKKyAgbGludXgqIHwgaypic2QqLWdudSB8IGdudSopCisgICAgbGlua19hbGxfZGVwbGlicz1ubworICAgIDs7CisgIGVzYWMKKworICBsZF9zaGxpYnM9eWVzCisKKyAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCisgICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgorICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKwkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKKwkjIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIuICBIb3dldmVyLCBhcyB0aGUgd2FybmluZyBpbiB0aGUgR05VIGxkCisJIyBibG9jayBzYXlzLCB2ZXJzaW9ucyBiZWZvcmUgMi4xOS41KiBjb3VsZG4ndCByZWFsbHkgY3JlYXRlIHdvcmtpbmcKKwkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgorCWNhc2UgYCRMRCAtdiAyPiYxYCBpbgorCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuMTkuNSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bMi05XSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgWzMtOV0qKSA7OworCSAgKikKKwkgICAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCTs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgIiRsdF91c2VfZ251X2xkX2ludGVyZmFjZSIgPSB5ZXM7IHRoZW4KKyAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgIHdsYXJjPScke3dsfScKKworICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCisgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgIGVsc2UKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAgIGZpCisgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCisgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KKyAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCisgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeFszLTldKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCWxkX3NobGlicz1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi4xOSwgaXMgcmVwb3J0ZWQKKyoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgorKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91CisqKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBpbnN0YWxsIGJpbnV0aWxzCisqKiogMi4yMCBvciBhYm92ZSwgb3IgbW9kaWZ5IHlvdXIgUEFUSCBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQuCisqKiogWW91IHdpbGwgdGhlbiBuZWVkIHRvIHJlc3RhcnQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KKworX0xUX0VPRgorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwlhcmNoaXZlX2NtZHM9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwllbHNlCisJICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZml+CisJJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIGludGVyaXhbMy05XSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisgICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisgICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisgICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisgICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisgICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisgICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCSAgOzsKKwlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorCQkJCQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CisJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisJeGxbY0NdKiB8IGJneGxbY0NdKiB8IG1waXhsW2NDXSopICMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworCSAgdG1wX2FkZGZsYWc9IDs7CisJbnZjYyopCSMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCisJICA7OworCWVzYWMKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJYXJjaGl2ZV9jbWRzPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisgICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICBmaQorCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwl4bGYqIHwgYmdmKiB8IGJneGxmKiB8IG1waXhsZiopCisJICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgZmkKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisJd2xhcmM9CisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgJEdSRVAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorCWxkX3NobGlicz1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQorKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCisJbGRfc2hsaWJzPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CisqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKwk7OworCSopCisJICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisJICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKwkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIGxkX3NobGlicz1ubworCSAgZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFpeFs0LTldKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsCisJIyBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIGFyY2hpdmVfY21kcz0nJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICBmaWxlX2xpc3Rfc3BlYz0nJHt3bH0tZiwnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgOgorCSAgZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKwkgIGZpCisJICA7OworCWVzYWMKKwlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCWZpCisJbGlua19hbGxfZGVwbGlicz1ubworICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGVsc2UKKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgIGZpCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tYmV4cGFsbCcKKyAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICBsdF9haXhfbGlicGF0aF9zZWQ9JworICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCSAgL14wLyB7CisJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKwkgICAgICBwCisJICB9CisgICAgICB9JworICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisgIGZpCisKK2ZpCisKKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworZmkKKworICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIteiBub2RlZnMiCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKK2Vsc2UKKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluICh2b2lkKQoreworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorICBmaQorCitmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KK2ZpCisKKwkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBub191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm5vdG9rJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1iZXJvaycKKwkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgZWxzZQorCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyRjb252ZW5pZW5jZScKKwkgIGZpCisJICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBic2RpWzQ1XSopCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGNsKikKKwkjIE5hdGl2ZSBNU1ZDCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0iLmRsbCIKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZWxzZQorCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZml+CisJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisJICBsaW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworCWV4Y2x1ZGVfZXhwc3ltcz0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJworCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKwkjIERvbid0IHVzZSByYW5saWIKKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKwkgICAgKi5leGV8Ki5FWEUpIDs7CisJICAgICopCisJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisJICAgICAgOzsKKwkgIGVzYWN+CisJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKwkgIGZpJworCTs7CisgICAgICAqKQorCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0iLmRsbCIKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisKKworICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgaGFyZGNvZGVfYXV0b21hdGljPXllcworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisgIGlmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJ5ZXMiOyB0aGVuCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAke3dsfS1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworCisgIGVsc2UKKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJworICBmaQorICBsaW5rX2FsbF9kZXBsaWJzPXllcworICBhbGxvd191bmRlZmluZWRfZmxhZz0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorICAgIGFyY2hpdmVfY21kcz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfY21kcz0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHM9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKworICBlbHNlCisgIGxkX3NobGlicz1ubworICBmaQorCisgICAgICA7OworCisgICAgZGd1eCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIuKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIGhwdXg5KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12IC1mICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgLWYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKworCSAgIyBPbGRlciB2ZXJzaW9ucyBvZiB0aGUgMTEuMDAgY29tcGlsZXIgZG8gbm90IHVuZGVyc3RhbmQgLWIgeWV0CisJICAjIChIUDkyNDUzLTAxIEEuMTEuMDEuMjAgZG9lc24ndCwgSFA5MjQ1My0wMSBCLjExLlguMzUxNzUtMzUxNzYuR1AgZG9lcykKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJENDIHVuZGVyc3RhbmRzIC1iIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRDQyB1bmRlcnN0YW5kcyAtYi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX19iK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTIC1iIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA9IHh5ZXM7IHRoZW4KKyAgICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworZWxzZQorICAgIGFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKK2ZpCisKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIGhhcmRjb2RlX2RpcmVjdD1ubworCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworCSAgOzsKKwkqKQorCSAgaGFyZGNvZGVfZGlyZWN0PXllcworCSAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworCisJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKK2Vsc2UKKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJZmkKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaW5oZXJpdF9ycGF0aD15ZXMKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICA7OworCisgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKikKKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJaGFyZGNvZGVfZGlyZWN0PXllcworCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisJaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworCWVsc2UKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorCSAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworCSAgICAgOzsKKwkgICAqKQorCSAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICAgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBhcmNoaXZlX2NtZHM9JyRFQ0hPICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworCisgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworCisJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwl3bGFyYz0nJHt3bH0nCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICBlbHNlCisJY2FzZSBgJENDIC1WIDI+JjFgIGluCisJKiJDb21waWxlcnMgNS4wIiopCisJICB3bGFyYz0nJworCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJKikKKwkgIHdsYXJjPScke3dsfScKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworICAgICAgKikKKwkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKKwkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KKwkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCWVsc2UKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKwlzbmkpCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisJOzsKKwlzaWVtZW5zKQorCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCisJICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICByZWxvYWRfY21kcz0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgOzsKKwltb3Rvcm9sYSkKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgaGFyZGNvZGVfZGlyZWN0PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIHN5c3Y0LjMqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Jy1CZXhwb3J0JworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlsZF9zaGxpYnM9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCisgICAgICBub191bmRlZmluZWRfZmxhZz0nJHt3bH0teix0ZXh0JworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisgICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisgICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKyAgICAgICMgYXMgLXogZGVmcy4KKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScke3dsfS16LHRleHQnCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0teixub2RlZnMnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJleHBvcnQnCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICopCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnMiID4mNQorJGFzX2VjaG8gIiRsZF9zaGxpYnMiID4mNjsgfQordGVzdCAiJGxkX3NobGlicyIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorCisKKworCisKKworCisKKworCisKKworCisKKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgaW4KK3h8eHllcykKKyAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAorICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKworICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRhcmNoaXZlX2NtZHMgaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAkUk0gY29uZnRlc3QqCisJZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKwlpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCisJICBzb25hbWU9Y29uZnRlc3QKKwkgIGxpYj1jb25mdGVzdAorCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisJICBkZXBsaWJzPQorCSAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wKKwkgIHBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworCSAgY29tcGlsZXJfZmxhZ3M9LXYKKwkgIGxpbmtlcl9mbGFncz0tdgorCSAgdmVyc3RyaW5nPQorCSAgb3V0cHV0X29iamRpcj0uCisJICBsaWJuYW1lPWNvbmZ0ZXN0CisJICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9CisJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiOyB9ID4mNQorICAoZXZhbCAkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorCSAgdGhlbgorCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworCSAgZWxzZQorCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKwkgIGZpCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorCWZpCisJJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjIiA+JjY7IH0KKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKKyAgICAqKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovIiA7OworICBlc2FjCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0icyw9XChbQS1aYS16XTpcKSxcMSxnIiA7OworICAgICopIGx0X3NlZF9zdHJpcF9lcT0icyw9LywvLGciIDs7CisgIGVzYWMKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKKyAgY2FzZSAkbHRfc2VhcmNoX3BhdGhfc3BlYyBpbgorICAqXDsqKQorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAncy87LyAvZydgCisgICAgOzsKKyAgKikKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICA7OworICBlc2FjCisgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CisgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgorICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KKyAgbHRfbXVsdGlfb3NfZGlyPWAkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbworICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciIKKyAgICBlbHNlCisgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKKwlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKKyAgICBmaQorICBkb25lCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKK0JFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKKyAgbHRfZm9vPSIiOworICBsdF9jb3VudD0wOworICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgeworICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKKyAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CisgICAgICAgIGx0X2NvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgeworICAgICAgICAgIGx0X2Zvbz0iLyIgJGx0X2kgbHRfZm9vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGx0X2NvdW50LS07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW2x0X2Zvb10rKzsgfQorICBpZiAobHRfZnJlcVtsdF9mb29dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Cit9J2AKKyAgIyBBV0sgcHJvZ3JhbSBhYm92ZSBlcnJvbmVvdXNseSBwcmVwZW5kcyAnLycgdG8gQzovZG9zL3BhdGhzCisgICMgZm9yIHRoZXNlIGhvc3RzLgorICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHxcCisgICAgICAkU0VEICdzLC9cKFtBLVphLXpdOlwpLFwxLGcnYCA7OworICBlc2FjCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKK2Vsc2UKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorZmkKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgOzsKKworYWl4WzQtOV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQorICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKwkgICBlY2hvICcgeWVzICcKKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCToKKyAgICAgIGVsc2UKKwljYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKyAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgZWxzZQorICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGZpCisgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIGZpCisgIDs7CisKK2FtaWdhb3MqKQorICBjYXNlICRob3N0X2NwdSBpbgorICBwb3dlcnBjKQorICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgOzsKKyAgbTY4aykKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpWzQ1XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisgIHllcywqKQorICAgICMgZ2NjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87CisgICAgICBmaScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiopCisgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSIKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgZXNhYworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKworICAqLGNsKikKKyAgICAjIE5hdGl2ZSBNU1ZDCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisKKyAgICBjYXNlICRidWlsZF9vcyBpbgorICAgIG1pbmd3KikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKyAgICAgIElGUz0nOycKKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKyAgICAgIGRvCisgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisgICAgICA7OworICAgIGN5Z3dpbiopCisgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICA7OworCisgICopCisgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworICBlc2FjCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAorICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKKworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbMjNdLiopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyLiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCisgIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaGFpa3UqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIHNocmV4dF9jbWRzPScuc28nCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorICAgIGVsc2UKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKKyAgICBmaQorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIDs7CisgIGVzYWMKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgIyBvciBmYWlscyBvdXRyaWdodCwgc28gb3ZlcnJpZGUgYXRvbWljYWxseToKKyAgaW5zdGFsbF9vdmVycmlkZV9tb2RlPTU1NQorICA7OworCitpbnRlcml4WzMtOV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCisjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisKKyAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICisgIGlmIHRlc3QgIiR7bHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgc2F2ZV9saWJkaXI9JGxpYmRpcgorICAgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRsdF9wcm9nX2NvbXBpbGVyX3dsXCI7IFwKKwkgTERGTEFHUz1cIlwkTERGTEFHUyAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4gKHZvaWQpCit7CisKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6CisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBsaWJkaXI9JHNhdmVfbGliZGlyCisKK2ZpCisKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK25ldGJzZGVsZiotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OworICBlc2FjCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CiskYXNfZWNobyAiJGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorZmkKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAiID4mNjsgfQoraGFyZGNvZGVfYWN0aW9uPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8CisgICB0ZXN0IC1uICIkcnVucGF0aF92YXIiIHx8CisgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSAiWHllcyIgOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCApIiAhPSBubyAmJgorICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIGhhcmRjb2RlX2FjdGlvbj1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgaGFyZGNvZGVfYWN0aW9uPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBoYXJkY29kZV9hY3Rpb249dW5zdXBwb3J0ZWQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1CiskYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9CisKK2lmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rIHx8CisgICB0ZXN0ICIkaW5oZXJpdF9ycGF0aCIgPSB5ZXM7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKKworCisKKworCisgIGlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorICBlbmFibGVfZGxvcGVuPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCitlbHNlCisgIGx0X2N2X2Rsb3Blbj1ubworICBsdF9jdl9kbG9wZW5fbGlicz0KKworICBjYXNlICRob3N0X29zIGluCisgIGJlb3MqKQorICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgOzsKKworICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGRhcndpbiopCisgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHgiInllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKK2Vsc2UKKworICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKworZmkKKworICAgIDs7CisKKyAgKikKKyAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaGxfbG9hZCIgImFjX2N2X2Z1bmNfc2hsX2xvYWQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfc2hsX2xvYWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc2hsX2xvYWQgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzaGxfbG9hZCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgorZWxzZQorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJkbG9wZW4iICJhY19jdl9mdW5jX2Rsb3BlbiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19kbG9wZW4iID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZGxvcGVuICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzdmxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfZGxkX2xpbmsrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxkX2xpbmsgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBkbGRfbGluayAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgorZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgorICAgIGVuYWJsZV9kbG9wZW49eWVzCisgIGVsc2UKKyAgICBlbmFibGVfZGxvcGVuPW5vCisgIGZpCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCisgIGRsb3BlbikKKyAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCisKKyAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKworICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MKK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCitpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisjZW5kaWYKKworaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworCX0KKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmPXllcyA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZj15ZXMgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSBsdF9jdl9kbG9wZW5fc2VsZj1ubyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjY7IH0KKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfQorX0xUX0VPRgorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8gOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2OyB9CisgICAgZmkKKworICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKKyAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OworICBlc2FjCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlLi4uICIgPiY2OyB9CitpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAorICBjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgZmkKKyAgICA7OworICAqKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIDs7CisgIGVzYWMKK2ZpCisKKworCisKKworCisKKworCisKKworCisgICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgIGZpCisgICAgOzsKKworICBhaXhbNC05XSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3NoYXJlZCIgPiY2OyB9CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3N0YXRpYyIgPiY2OyB9CisKKworCisKK2ZpCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK0NDPSIkbHRfc2F2ZV9DQyIKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICAgICAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGxpYnRvb2wiCisKKworCisKKyMgT25seSBleHBhbmQgb25jZToKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgbmVlZCAtbWltcHVyZS10ZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIG5lZWQgLW1pbXB1cmUtdGV4dC4uLiAiID4mNjsgfQorbWltcHVyZT1ubworY2FzZSAkaG9zdCBpbgorICAqLSotc29sYXJpczIqKQorICAgIGlmIHRlc3QgIiRHQ0MiID0gInllcyI7IHRoZW4KKyAgICAgIG1pbXB1cmU9InllcyIKKyAgICBmaQorICAgIDs7CisgICopCisgICAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbWltcHVyZSIgPiY1CiskYXNfZWNobyAiJG1pbXB1cmUiID4mNjsgfQorCisKK2lmIHRlc3QgeCRtaW1wdXJlID0geHllczsgdGhlbgorICBNSU1QVVJFX1RSVUU9CisgIE1JTVBVUkVfRkFMU0U9JyMnCitlbHNlCisgIE1JTVBVUkVfVFJVRT0nIycKKyAgTUlNUFVSRV9GQUxTRT0KK2ZpCisKKworCisKK2lmIGZhbHNlOyB0aGVuCisgIFNUQVRJQ0xJQl9UUlVFPQorICBTVEFUSUNMSUJfRkFMU0U9JyMnCitlbHNlCisgIFNUQVRJQ0xJQl9UUlVFPScjJworICBTVEFUSUNMSUJfRkFMU0U9CitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgbmVlZCBCVUlMRElOR19MSUJDVVJMIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIG5lZWQgQlVJTERJTkdfTElCQ1VSTC4uLiAiID4mNjsgfQorY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorCiskYXNfZWNobyAiI2RlZmluZSBCVUlMRElOR19MSUJDVVJMIDEiID4+Y29uZmRlZnMuaAorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIG5lZWQgQ1VSTF9TVEFUSUNMSUIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgbmVlZCBDVVJMX1NUQVRJQ0xJQi4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIlgkZW5hYmxlX3NoYXJlZCIgPSAiWG5vIgorICAgIHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgQ1VSTF9TVEFUSUNMSUIgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKKworaWYgdHJ1ZTsgdGhlbgorICBTVEFUSUNMSUJfVFJVRT0KKyAgU1RBVElDTElCX0ZBTFNFPScjJworZWxzZQorICBTVEFUSUNMSUJfVFJVRT0nIycKKyAgU1RBVElDTElCX0ZBTFNFPQorZmkKKworICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICA7OworZXNhYworCisjIERldGVybWluZSB3aGV0aGVyIGFsbCBkZXBlbmRlbnQgbGlicmFyaWVzIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gbGlua2luZworaWYgdGVzdCAiWCRlbmFibGVfc2hhcmVkIiA9ICJYeWVzIiAtYSAiWCRsaW5rX2FsbF9kZXBsaWJzIiA9ICJYbm8iCit0aGVuCisgICAgUkVRVUlSRV9MSUJfREVQUz1ubworZWxzZQorICAgIFJFUVVJUkVfTElCX0RFUFM9eWVzCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICIgPiY2OyB9CitzZXQgeCAke01BS0UtbWFrZX0KK2FjX21ha2U9YCRhc19lY2hvICIkMiIgfCBzZWQgJ3MvKy9wL2c7IHMvW15hLXpBLVowLTlfXS9fL2cnYAoraWYgeyBhc192YXI9YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0OyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCithbGw6CisJQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitjYXNlIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbGAgaW4KKyAgKkBAQCUlJT0/Kj1AQEAlJSUqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllczs7CisgICopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9bm87OworZXNhYworcm0gLWYgY29uZnRlc3QubWFrZQorZmkKK2lmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICBTRVRfTUFLRT0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW5saW5lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbmxpbmUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19pbmxpbmUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9jX2lubGluZT1ubworZm9yIGFjX2t3IGluIGlubGluZSBfX2lubGluZV9fIF9faW5saW5lOyBkbworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCit0eXBlZGVmIGludCBmb29fdDsKK3N0YXRpYyAkYWNfa3cgZm9vX3Qgc3RhdGljX2ZvbyAoKSB7cmV0dXJuIDA7IH0KKyRhY19rdyBmb29fdCBmb28gKCkge3JldHVybiAwOyB9CisjZW5kaWYKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfaW5saW5lPSRhY19rdworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICB0ZXN0ICIkYWNfY3ZfY19pbmxpbmUiICE9IG5vICYmIGJyZWFrCitkb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfaW5saW5lIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19pbmxpbmUiID4mNjsgfQorCitjYXNlICRhY19jdl9jX2lubGluZSBpbgorICBpbmxpbmUgfCB5ZXMpIDs7CisgICopCisgICAgY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KKyAgICAgIG5vKSBhY192YWw9OzsKKyAgICAgICopIGFjX3ZhbD0kYWNfY3ZfY19pbmxpbmU7OworICAgIGVzYWMKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIGlubGluZSAkYWNfdmFsCisjZW5kaWYKK19BQ0VPRgorICAgIDs7Citlc2FjCisKKworCisKKyAgIworICBjb21waWxlcl9pZD0idW5rbm93biIKKyAgY29tcGlsZXJfbnVtPSIwIgorICAjCisgIGZsYWdzX2RiZ19hbGw9InVua25vd24iCisgIGZsYWdzX2RiZ195ZXM9InVua25vd24iCisgIGZsYWdzX2RiZ19vZmY9InVua25vd24iCisgIGZsYWdzX29wdF9hbGw9InVua25vd24iCisgIGZsYWdzX29wdF95ZXM9InVua25vd24iCisgIGZsYWdzX29wdF9vZmY9InVua25vd24iCisgICMKKyAgZmxhZ3NfcHJlZmVyX2NwcGZsYWdzPSJubyIKKyAgIworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgREVDL0NvbXBhcS9IUCBDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIERFQy9Db21wYXEvSFAgQy4uLiAiID4mNjsgfQorCisgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJTRUQgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgU0VEIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJHUkVQIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IEdSRVAgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKworICB0bXBfZXhwPSIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19ERUNDCitDVVJMX0RFRl9UT0tFTiBfX0RFQ0MKKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIl9fREVDQyI7IHRoZW4KKyAgICAgIHRtcF9leHA9IiIKKyAgICBmaQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0RFQ0M9bm8KKworICBlbHNlCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0RFQ0M9eWVzCisgICAgY3VybF9jdl9kZWZfX19ERUNDPSR0bXBfZXhwCisKKyAgZmkKKworCisgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJTRUQgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgU0VEIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJHUkVQIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IEdSRVAgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKworICB0bXBfZXhwPSIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19ERUNDX1ZFUgorQ1VSTF9ERUZfVE9LRU4gX19ERUNDX1ZFUgorI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX19ERUNDX1ZFUiI7IHRoZW4KKyAgICAgIHRtcF9leHA9IiIKKyAgICBmaQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0RFQ0NfVkVSPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19ERUNDX1ZFUj15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX0RFQ0NfVkVSPSR0bXBfZXhwCisKKyAgZmkKKworICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX0RFQ0MiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX0RFQ0NfVkVSIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBjb21waWxlcl9pZD0iREVDX0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIC1nMSAtZzIgLWczIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nMiIKKyAgICBmbGFnc19kYmdfb2ZmPSItZzAiCisgICAgZmxhZ3Nfb3B0X2FsbD0iLU8gLU8wIC1PMSAtTzIgLU8zIC1PNCIKKyAgICBmbGFnc19vcHRfeWVzPSItTzEiCisgICAgZmxhZ3Nfb3B0X29mZj0iLU8wIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIGZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIEhQLVVYIEMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgSFAtVVggQy4uLiAiID4mNjsgfQorCisgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJTRUQgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgU0VEIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJHUkVQIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IEdSRVAgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKworICB0bXBfZXhwPSIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19IUF9jYworQ1VSTF9ERUZfVE9LRU4gX19IUF9jYworI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX19IUF9jYyI7IHRoZW4KKyAgICAgIHRtcF9leHA9IiIKKyAgICBmaQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0hQX2NjPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19IUF9jYz15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX0hQX2NjPSR0bXBfZXhwCisKKyAgZmkKKworICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX0hQX2NjIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBjb21waWxlcl9pZD0iSFBfVVhfQyIKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtcyIKKyAgICBmbGFnc19kYmdfeWVzPSItZyIKKyAgICBmbGFnc19kYmdfb2ZmPSItcyIKKyAgICBmbGFnc19vcHRfYWxsPSItTyArTzAgK08xICtPMiArTzMgK080IgorICAgIGZsYWdzX29wdF95ZXM9IitPMiIKKyAgICBmbGFnc19vcHRfb2ZmPSIrTzAiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgSUJNIEMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgSUJNIEMuLi4gIiA+JjY7IH0KKworICAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiU0VEIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFNFRCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiR1JFUCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBHUkVQIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisKKyAgdG1wX2V4cD0iIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fSUJNQ19fCitDVVJMX0RFRl9UT0tFTiBfX0lCTUNfXworI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX19JQk1DX18iOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19JQk1DX189bm8KKworICBlbHNlCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0lCTUNfXz15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX0lCTUNfXz0kdG1wX2V4cAorCisgIGZpCisKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19JQk1DX18iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGNvbXBpbGVyX2lkPSJJQk1fQyIKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtZzAgLWcxIC1nMiAtZzMiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iIgorICAgIGZsYWdzX29wdF9hbGw9Ii1PIC1PMCAtTzEgLU8yIC1PMyAtTzQgLU81IgorICAgIGZsYWdzX29wdF9hbGw9IiRmbGFnc19vcHRfYWxsIC1xbm9vcHRpbWl6ZSIKKyAgICBmbGFnc19vcHRfYWxsPSIkZmxhZ3Nfb3B0X2FsbCAtcW9wdGltaXplPTAiCisgICAgZmxhZ3Nfb3B0X2FsbD0iJGZsYWdzX29wdF9hbGwgLXFvcHRpbWl6ZT0xIgorICAgIGZsYWdzX29wdF9hbGw9IiRmbGFnc19vcHRfYWxsIC1xb3B0aW1pemU9MiIKKyAgICBmbGFnc19vcHRfYWxsPSIkZmxhZ3Nfb3B0X2FsbCAtcW9wdGltaXplPTMiCisgICAgZmxhZ3Nfb3B0X2FsbD0iJGZsYWdzX29wdF9hbGwgLXFvcHRpbWl6ZT00IgorICAgIGZsYWdzX29wdF9hbGw9IiRmbGFnc19vcHRfYWxsIC1xb3B0aW1pemU9NSIKKyAgICBmbGFnc19vcHRfeWVzPSItTzIiCisgICAgZmxhZ3Nfb3B0X29mZj0iLXFub29wdGltaXplIgorICAgIGZsYWdzX3ByZWZlcl9jcHBmbGFncz0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIGZpCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgSW50ZWwgQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBpcyBJbnRlbCBDLi4uICIgPiY2OyB9CisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCitDVVJMX0RFRl9UT0tFTiBfX0lOVEVMX0NPTVBJTEVSCisjZW5kaWYKKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2V4cD1gZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkR1JFUCIgQ1VSTF9ERUZfVE9LRU4gMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvLipDVVJMX0RFRl9UT0tFTlsgXVsgXSovLycgMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvWyJdWyBdKlsiXS8vZycgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAteiAiJHRtcF9leHAiIHx8IHRlc3QgIiR0bXBfZXhwIiA9ICJfX0lOVEVMX0NPTVBJTEVSIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fSU5URUxfQ09NUElMRVI9bm8KKworICBlbHNlCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0lOVEVMX0NPTVBJTEVSPXllcworICAgIGN1cmxfY3ZfZGVmX19fSU5URUxfQ09NUElMRVI9JHRtcF9leHAKKworICBmaQorCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fSU5URUxfQ09NUElMRVIiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGNvbXBpbGVyX251bT0iJGN1cmxfY3ZfZGVmX19fSU5URUxfQ09NUElMRVIiCisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX3VuaXhfXworQ1VSTF9ERUZfVE9LRU4gX191bml4X18KKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIiI7IHRoZW4KKyAgICAgIHRtcF9leHA9IiIKKyAgICBmaQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX3VuaXhfXz1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fdW5peF9fPXllcworICAgIGN1cmxfY3ZfZGVmX19fdW5peF9fPSR0bXBfZXhwCisKKyAgZmkKKworICAgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fdW5peF9fIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBjb21waWxlcl9pZD0iSU5URUxfVU5JWF9DIgorICAgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIgorICAgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgICBmbGFnc19kYmdfb2ZmPSItZzAiCisgICAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtTzMgLU9zIgorICAgICAgZmxhZ3Nfb3B0X3llcz0iLU8yIgorICAgICAgZmxhZ3Nfb3B0X29mZj0iLU8wIgorICAgIGVsc2UKKyAgICAgIGNvbXBpbGVyX2lkPSJJTlRFTF9XSU5ET1dTX0MiCisgICAgICBmbGFnc19kYmdfYWxsPSIvWkkgL1ppIC96SSAvemkgL1pEIC9aZCAvekQgL3pkIC9aNyAvejcgL095IC9PeS0iCisgICAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAvZGVidWciCisgICAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAvZGVidWc6bm9uZSIKKyAgICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC9kZWJ1ZzptaW5pbWFsIgorICAgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgL2RlYnVnOnBhcnRpYWwiCisgICAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAvZGVidWc6ZnVsbCIKKyAgICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC9kZWJ1ZzpzZW1hbnRpY19zdGVwcGluZyIKKyAgICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC9kZWJ1ZzpleHRlbmRlZCIKKyAgICAgIGZsYWdzX2RiZ195ZXM9Ii9aaSAvT3ktIgorICAgICAgZmxhZ3NfZGJnX29mZj0iL2RlYnVnOm5vbmUgL095LSIKKyAgICAgIGZsYWdzX29wdF9hbGw9Ii9PIC9PMCAvTzEgL08yIC9PMyAvT2QgL09nIC9PZy0gL09pIC9PaS0iCisgICAgICBmbGFnc19vcHRfeWVzPSIvTzIiCisgICAgICBmbGFnc19vcHRfb2ZmPSIvT2QiCisgICAgZmkKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBmaQorCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIGNsYW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIGNsYW5nLi4uICIgPiY2OyB9CisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NsYW5nX18KK0NVUkxfREVGX1RPS0VOIF9fY2xhbmdfXworI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX19jbGFuZ19fIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fY2xhbmdfXz1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fY2xhbmdfXz15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX2NsYW5nX189JHRtcF9leHAKKworICBmaQorCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fY2xhbmdfXyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgY29tcGlsZXJfaWQ9IkNMQU5HIgorICAgIGNsYW5ndmVyPWAkQ0MgLWR1bXB2ZXJzaW9uYAorICAgIGNsYW5ndmhpPWBlY2hvICRjbGFuZ3ZlciB8IGN1dCAtZCAuIC1mMWAKKyAgICBjbGFuZ3Zsbz1gZWNobyAkY2xhbmd2ZXIgfCBjdXQgLWQgLiAtZjJgCisgICAgY29tcGlsZXJfbnVtPWAoZXhwciAkY2xhbmd2aGkgIioiIDEwMCArICRjbGFuZ3ZsbykgMj4vZGV2L251bGxgCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIC1nMSAtZzIgLWczIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1nZ2RiIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1nc3RhYnMiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdzdGFicysiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdjb2ZmIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1neGNvZmYiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdkd2FyZi0yIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1ndm1zIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgIGZsYWdzX2RiZ19vZmY9Ii1nMCIKKyAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtT3MgLU8zIC1PNCIKKyAgICBmbGFnc19vcHRfeWVzPSItT3MiCisgICAgZmxhZ3Nfb3B0X29mZj0iLU8wIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIGZpCisKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBpcyBHTlUgQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBpcyBHTlUgQy4uLiAiID4mNjsgfQorCisgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJTRUQgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgU0VEIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJHUkVQIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IEdSRVAgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKworICB0bXBfZXhwPSIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19HTlVDX18KK0NVUkxfREVGX1RPS0VOIF9fR05VQ19fCisjZW5kaWYKKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2V4cD1gZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkR1JFUCIgQ1VSTF9ERUZfVE9LRU4gMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvLipDVVJMX0RFRl9UT0tFTlsgXVsgXSovLycgMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvWyJdWyBdKlsiXS8vZycgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAteiAiJHRtcF9leHAiIHx8IHRlc3QgIiR0bXBfZXhwIiA9ICJfX0dOVUNfXyI7IHRoZW4KKyAgICAgIHRtcF9leHA9IiIKKyAgICBmaQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0dOVUNfXz1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fR05VQ19fPXllcworICAgIGN1cmxfY3ZfZGVmX19fR05VQ19fPSR0bXBfZXhwCisKKyAgZmkKKworICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX0dOVUNfXyIgPSAieWVzIiAmJgorICAgIHRlc3QgIiRjb21waWxlcl9pZCIgPSAidW5rbm93biI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGNvbXBpbGVyX2lkPSJHTlVfQyIKKyAgICBnY2N2ZXI9YCRDQyAtZHVtcHZlcnNpb25gCisgICAgZ2NjdmhpPWBlY2hvICRnY2N2ZXIgfCBjdXQgLWQgLiAtZjFgCisgICAgZ2NjdmxvPWBlY2hvICRnY2N2ZXIgfCBjdXQgLWQgLiAtZjJgCisgICAgY29tcGlsZXJfbnVtPWAoZXhwciAkZ2NjdmhpICIqIiAxMDAgKyAkZ2NjdmxvKSAyPi9kZXYvbnVsbGAKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtZzAgLWcxIC1nMiAtZzMiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdnZGIiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdzdGFicyIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ3N0YWJzKyIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ2NvZmYiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWd4Y29mZiIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ2R3YXJmLTIiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWd2bXMiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iLWcwIgorICAgIGZsYWdzX29wdF9hbGw9Ii1PIC1PMCAtTzEgLU8yIC1PMyAtT3MiCisgICAgZmxhZ3Nfb3B0X3llcz0iLU8yIgorICAgIGZsYWdzX29wdF9vZmY9Ii1PMCIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBpcyBMQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgTENDLi4uICIgPiY2OyB9CisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX0xDQ19fCitDVVJMX0RFRl9UT0tFTiBfX0xDQ19fCisjZW5kaWYKKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdG1wX2V4cD1gZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkR1JFUCIgQ1VSTF9ERUZfVE9LRU4gMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvLipDVVJMX0RFRl9UT0tFTlsgXVsgXSovLycgMj4vZGV2L251bGwgfCBcCisgICAgICAiJFNFRCIgJ3MvWyJdWyBdKlsiXS8vZycgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAteiAiJHRtcF9leHAiIHx8IHRlc3QgIiR0bXBfZXhwIiA9ICJfX0xDQ19fIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fTENDX189bm8KKworICBlbHNlCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0xDQ19fPXllcworICAgIGN1cmxfY3ZfZGVmX19fTENDX189JHRtcF9leHAKKworICBmaQorCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fTENDX18iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGNvbXBpbGVyX2lkPSJMQ0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWciCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iIgorICAgIGZsYWdzX29wdF9hbGw9IiIKKyAgICBmbGFnc19vcHRfeWVzPSIiCisgICAgZmxhZ3Nfb3B0X29mZj0iIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIGZpCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgU0dJIE1JUFNwcm8gQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBpcyBTR0kgTUlQU3BybyBDLi4uICIgPiY2OyB9CisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX0dOVUNfXworQ1VSTF9ERUZfVE9LRU4gX19HTlVDX18KKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIl9fR05VQ19fIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fR05VQ19fPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19HTlVDX189eWVzCisgICAgY3VybF9jdl9kZWZfX19HTlVDX189JHRtcF9leHAKKworICBmaQorCisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfQ09NUElMRVJfVkVSU0lPTgorQ1VSTF9ERUZfVE9LRU4gX0NPTVBJTEVSX1ZFUlNJT04KKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIl9DT01QSUxFUl9WRVJTSU9OIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBjdXJsX2N2X2hhdmVfZGVmX19DT01QSUxFUl9WRVJTSU9OPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX0NPTVBJTEVSX1ZFUlNJT049eWVzCisgICAgY3VybF9jdl9kZWZfX0NPTVBJTEVSX1ZFUlNJT049JHRtcF9leHAKKworICBmaQorCisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfU0dJX0NPTVBJTEVSX1ZFUlNJT04KK0NVUkxfREVGX1RPS0VOIF9TR0lfQ09NUElMRVJfVkVSU0lPTgorI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX1NHSV9DT01QSUxFUl9WRVJTSU9OIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBjdXJsX2N2X2hhdmVfZGVmX19TR0lfQ09NUElMRVJfVkVSU0lPTj1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX19TR0lfQ09NUElMRVJfVkVSU0lPTj15ZXMKKyAgICBjdXJsX2N2X2RlZl9fU0dJX0NPTVBJTEVSX1ZFUlNJT049JHRtcF9leHAKKworICBmaQorCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fR05VQ19fIiA9ICJubyIgJiYKKyAgICAodGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX1NHSV9DT01QSUxFUl9WRVJTSU9OIiA9ICJ5ZXMiIHx8CisgICAgIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19DT01QSUxFUl9WRVJTSU9OIiA9ICJ5ZXMiKTsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgY29tcGlsZXJfaWQ9IlNHSV9NSVBTUFJPX0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIC1nMSAtZzIgLWczIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgIGZsYWdzX2RiZ19vZmY9Ii1nMCIKKyAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtTzMgLU9mYXN0IgorICAgIGZsYWdzX29wdF95ZXM9Ii1PMiIKKyAgICBmbGFnc19vcHRfb2ZmPSItTzAiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgZmkKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBpcyBTR0kgTUlQUyBDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIFNHSSBNSVBTIEMuLi4gIiA+JjY7IH0KKworICAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiU0VEIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFNFRCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiR1JFUCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBHUkVQIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisKKyAgdG1wX2V4cD0iIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fR05VQ19fCitDVVJMX0RFRl9UT0tFTiBfX0dOVUNfXworI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX19HTlVDX18iOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19HTlVDX189bm8KKworICBlbHNlCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX0dOVUNfXz15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX0dOVUNfXz0kdG1wX2V4cAorCisgIGZpCisKKworICAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiU0VEIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFNFRCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiR1JFUCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBHUkVQIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisKKyAgdG1wX2V4cD0iIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fc2dpCitDVVJMX0RFRl9UT0tFTiBfX3NnaQorI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX19zZ2kiOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19zZ2k9bm8KKworICBlbHNlCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX3NnaT15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX3NnaT0kdG1wX2V4cAorCisgIGZpCisKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19HTlVDX18iID0gIm5vIiAmJgorICAgIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fc2dpIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJGNvbXBpbGVyX2lkIiA9ICJ1bmtub3duIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgY29tcGlsZXJfaWQ9IlNHSV9NSVBTX0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIC1nMSAtZzIgLWczIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgIGZsYWdzX2RiZ19vZmY9Ii1nMCIKKyAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtTzMgLU9mYXN0IgorICAgIGZsYWdzX29wdF95ZXM9Ii1PMiIKKyAgICBmbGFnc19vcHRfb2ZmPSItTzAiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgU3VuUHJvIEMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgU3VuUHJvIEMuLi4gIiA+JjY7IH0KKworICAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiU0VEIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFNFRCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiR1JFUCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBHUkVQIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisKKyAgdG1wX2V4cD0iIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fU1VOUFJPX0MKK0NVUkxfREVGX1RPS0VOIF9fU1VOUFJPX0MKKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIl9fU1VOUFJPX0MiOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19TVU5QUk9fQz1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fU1VOUFJPX0M9eWVzCisgICAgY3VybF9jdl9kZWZfX19TVU5QUk9fQz0kdG1wX2V4cAorCisgIGZpCisKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19TVU5QUk9fQyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgY29tcGlsZXJfaWQ9IlNVTlBST19DIgorICAgIGZsYWdzX2RiZ19hbGw9Ii1nIC1zIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgIGZsYWdzX2RiZ19vZmY9Ii1zIgorICAgIGZsYWdzX29wdF9hbGw9Ii1PIC14TyAteE8xIC14TzIgLXhPMyAteE80IC14TzUiCisgICAgZmxhZ3Nfb3B0X3llcz0iLXhPMiIKKyAgICBmbGFnc19vcHRfb2ZmPSIiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgaXMgVGlueSBDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIFRpbnkgQy4uLiAiID4mNjsgfQorCisgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJTRUQgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgU0VEIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJHUkVQIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IEdSRVAgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKworICB0bXBfZXhwPSIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19USU5ZQ19fCitDVVJMX0RFRl9UT0tFTiBfX1RJTllDX18KKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIl9fVElOWUNfXyI7IHRoZW4KKyAgICAgIHRtcF9leHA9IiIKKyAgICBmaQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJHRtcF9leHAiOyB0aGVuCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX1RJTllDX189bm8KKworICBlbHNlCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX1RJTllDX189eWVzCisgICAgY3VybF9jdl9kZWZfX19USU5ZQ19fPSR0bXBfZXhwCisKKyAgZmkKKworICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX1RJTllDX18iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGNvbXBpbGVyX2lkPSJUSU5ZX0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWIiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iIgorICAgIGZsYWdzX29wdF9hbGw9IiIKKyAgICBmbGFnc19vcHRfeWVzPSIiCisgICAgZmxhZ3Nfb3B0X29mZj0iIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIGZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIFdhdGNvbSBDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGlzIFdhdGNvbSBDLi4uICIgPiY2OyB9CisKKyAgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIlNFRCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBTRUQgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgIkdSRVAgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgR1JFUCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorCisgIHRtcF9leHA9IiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX1dBVENPTUNfXworQ1VSTF9ERUZfVE9LRU4gX19XQVRDT01DX18KKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIl9fV0FUQ09NQ19fIjsgdGhlbgorICAgICAgdG1wX2V4cD0iIgorICAgIGZpCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkdG1wX2V4cCI7IHRoZW4KKyAgICBjdXJsX2N2X2hhdmVfZGVmX19fV0FUQ09NQ19fPW5vCisKKyAgZWxzZQorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19XQVRDT01DX189eWVzCisgICAgY3VybF9jdl9kZWZfX19XQVRDT01DX189JHRtcF9leHAKKworICBmaQorCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fV0FUQ09NQ19fIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworICAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiU0VEIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFNFRCBiZWluZyBzZXQuIiAiJExJTkVOTyIgNQorICBmaQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiR1JFUCBub3Qgc2V0LiBDYW5ub3QgY29udGludWUgd2l0aG91dCBHUkVQIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisKKyAgdG1wX2V4cD0iIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fVU5JWF9fCitDVVJMX0RFRl9UT0tFTiBfX1VOSVhfXworI2VuZGlmCisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9leHA9YGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIgMj4vZGV2L251bGwgfCBcCisgICAgICAiJEdSRVAiIENVUkxfREVGX1RPS0VOIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzLy4qQ1VSTF9ERUZfVE9LRU5bIF1bIF0qLy8nIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRTRUQiICdzL1siXVsgXSpbIl0vL2cnIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLXogIiR0bXBfZXhwIiB8fCB0ZXN0ICIkdG1wX2V4cCIgPSAiX19VTklYX18iOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfX19VTklYX189bm8KKworICBlbHNlCisgICAgY3VybF9jdl9oYXZlX2RlZl9fX1VOSVhfXz15ZXMKKyAgICBjdXJsX2N2X2RlZl9fX1VOSVhfXz0kdG1wX2V4cAorCisgIGZpCisKKyAgICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX1VOSVhfXyIgPSAieWVzIjsgdGhlbgorICAgICAgY29tcGlsZXJfaWQ9IldBVENPTV9VTklYX0MiCisgICAgICBmbGFnc19kYmdfYWxsPSItZzEgLWcxKyAtZzIgLWczIgorICAgICAgZmxhZ3NfZGJnX3llcz0iLWcyIgorICAgICAgZmxhZ3NfZGJnX29mZj0iIgorICAgICAgZmxhZ3Nfb3B0X2FsbD0iLU8wIC1PMSAtTzIgLU8zIgorICAgICAgZmxhZ3Nfb3B0X3llcz0iLU8yIgorICAgICAgZmxhZ3Nfb3B0X29mZj0iLU8wIgorICAgIGVsc2UKKyAgICAgIGNvbXBpbGVyX2lkPSJXQVRDT01fV0lORE9XU19DIgorICAgICAgZmxhZ3NfZGJnX2FsbD0iIgorICAgICAgZmxhZ3NfZGJnX3llcz0iIgorICAgICAgZmxhZ3NfZGJnX29mZj0iIgorICAgICAgZmxhZ3Nfb3B0X2FsbD0iIgorICAgICAgZmxhZ3Nfb3B0X3llcz0iIgorICAgICAgZmxhZ3Nfb3B0X29mZj0iIgorICAgIGZpCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgZmkKKworICAjCisgIGlmIHRlc3QgIiRjb21waWxlcl9pZCIgPSAidW5rbm93biI7IHRoZW4KKyAgY2F0IDw8X0VPRiAxPiYyCisqKioKKyoqKiBXYXJuaW5nOiBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgZG9lcyBub3QgaGF2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyoqKiBjb21waWxlciB5b3UgYXJlIHVzaW5nLCByZWxhdGl2ZSB0byB0aGUgZmxhZ3MgcmVxdWlyZWQgdG8gZW5hYmxlIG9yCisqKiogZGlzYWJsZSBnZW5lcmF0aW9uIG9mIGRlYnVnIGluZm8sIG9wdGltaXphdGlvbiBvcHRpb25zIG9yIHdhcm5pbmdzLgorKioqCisqKiogV2hhdGV2ZXIgc2V0dGluZ3MgYXJlIHByZXNlbnQgaW4gQ0ZMQUdTIHdpbGwgYmUgdXNlZCBmb3IgdGhpcyBydW4uCisqKioKKyoqKiBJZiB5b3Ugd2lzaCB0byBoZWxwIHRoZSBjVVJMIHByb2plY3QgdG8gYmV0dGVyIHN1cHBvcnQgeW91ciBjb21waWxlcgorKioqIHlvdSBjYW4gcmVwb3J0IHRoaXMgYW5kIHRoZSByZXF1aXJlZCBpbmZvIG9uIHRoZSBsaWJjdXJsIGRldmVsb3BtZW50CisqKiogbWFpbGluZyBsaXN0OiBodHRwOi8vY29vbC5oYXh4LnNlL21haWxtYW4vbGlzdGluZm8vY3VybC1saWJyYXJ5LworKioqCitfRU9GCisgIGZpCisKKworc3F1ZWV6ZSgpIHsKKyAgX3Nxel9yZXN1bHQ9IiIKKyAgZXZhbCBfc3F6X2lucHV0PVwkJDEKKyAgZm9yIF9zcXpfdG9rZW4gaW4gJF9zcXpfaW5wdXQ7IGRvCisgICAgaWYgdGVzdCAteiAiJF9zcXpfcmVzdWx0IjsgdGhlbgorICAgICAgX3Nxel9yZXN1bHQ9IiRfc3F6X3Rva2VuIgorICAgIGVsc2UKKyAgICAgIF9zcXpfcmVzdWx0PSIkX3Nxel9yZXN1bHQgJF9zcXpfdG9rZW4iCisgICAgZmkKKyAgZG9uZQorICBldmFsICQxPVwkX3Nxel9yZXN1bHQKKyAgcmV0dXJuIDAKK30KKworCisgICAgICAjCisgIGlmIHRlc3QgIiRjb21waWxlcl9pZCIgIT0gInVua25vd24iOyB0aGVuCisgICAgIworICAgIGlmIHRlc3QgIiRjb21waWxlcl9pZCIgPSAiR05VX0MiIHx8CisgICAgICB0ZXN0ICIkY29tcGlsZXJfaWQiID0gIkNMQU5HIjsgdGhlbgorCisgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfaWQiID0gIkdOVV9DIiB8fAorICAgIHRlc3QgIiRjb21waWxlcl9pZCIgPSAiQ0xBTkciOyB0aGVuCisgICAgdG1wX2hhc19pbmNsdWRlPSJubyIKKyAgICB0bXBfY2hnX0ZMQUdTPSIkQ0ZMQUdTIgorICAgIGZvciB3b3JkMSBpbiAkdG1wX2NoZ19GTEFHUzsgZG8KKyAgICAgIGNhc2UgIiR3b3JkMSIgaW4KKyAgICAgICAgLUkqKQorICAgICAgICAgIHRtcF9oYXNfaW5jbHVkZT0ieWVzIgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIGlmIHRlc3QgIiR0bXBfaGFzX2luY2x1ZGUiID0gInllcyI7IHRoZW4KKyAgICAgIHRtcF9jaGdfRkxBR1M9YGVjaG8gIiR0bXBfY2hnX0ZMQUdTIiB8ICIkU0VEIiAncy9eLUkvIC1pc3lzdGVtIC9nJ2AKKyAgICAgIHRtcF9jaGdfRkxBR1M9YGVjaG8gIiR0bXBfY2hnX0ZMQUdTIiB8ICIkU0VEIiAncy8gLUkvIC1pc3lzdGVtIC9nJ2AKKyAgICAgIENGTEFHUz0iJHRtcF9jaGdfRkxBR1MiCisgICAgICBzcXVlZXplIENGTEFHUworICAgIGZpCisgICAgdG1wX2hhc19pbmNsdWRlPSJubyIKKyAgICB0bXBfY2hnX0ZMQUdTPSIkQ1BQRkxBR1MiCisgICAgZm9yIHdvcmQxIGluICR0bXBfY2hnX0ZMQUdTOyBkbworICAgICAgY2FzZSAiJHdvcmQxIiBpbgorICAgICAgICAtSSopCisgICAgICAgICAgdG1wX2hhc19pbmNsdWRlPSJ5ZXMiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgaWYgdGVzdCAiJHRtcF9oYXNfaW5jbHVkZSIgPSAieWVzIjsgdGhlbgorICAgICAgdG1wX2NoZ19GTEFHUz1gZWNobyAiJHRtcF9jaGdfRkxBR1MiIHwgIiRTRUQiICdzL14tSS8gLWlzeXN0ZW0gL2cnYAorICAgICAgdG1wX2NoZ19GTEFHUz1gZWNobyAiJHRtcF9jaGdfRkxBR1MiIHwgIiRTRUQiICdzLyAtSS8gLWlzeXN0ZW0gL2cnYAorICAgICAgQ1BQRkxBR1M9IiR0bXBfY2hnX0ZMQUdTIgorICAgICAgc3F1ZWV6ZSBDUFBGTEFHUworICAgIGZpCisgIGZpCisKKyAgICBmaQorICAgICMKKyAgICB0bXBfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIHRtcF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICB0bXBfQ1BQRkxBR1M9IiIKKyAgICB0bXBfQ0ZMQUdTPSIiCisgICAgIworICAgIGNhc2UgIiRjb21waWxlcl9pZCIgaW4KKyAgICAgICAgIworICAgICAgQ0xBTkcpCisgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVF1bnVzZWQtYXJndW1lbnRzIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBERUNfQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1zdGQxIgorICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1ub2Fuc2lfYWxpYXMiCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLXdhcm5wcm90b3MiCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLW1zZ19mYXRhbCB0b29mZXdhcmdzLHRvb21hbnlhcmdzIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBHTlVfQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBIUF9VWF9DKQorICAgICAgICAjCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLXoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTICtXIDQyMjcsNDI1NSIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgSUJNX0MpCisgICAgICAgICMKKyAgICAgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLXF0aHJlYWRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLXFub2Fuc2lhbGlhcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtcWhhbHQ9ZSIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgSU5URUxfVU5JWF9DKQorICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtc3RkPWdudTg5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC13ZSAxNDAsMTQ3LDE2NSwyNjYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC13ZCAyNzksOTgxLDE0NjkiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIElOVEVMX1dJTkRPV1NfQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBMQ0MpCisgICAgICAgICMKKyAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtbiIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgU0dJX01JUFNfQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBTR0lfTUlQU1BST19DKQorICAgICAgICAjCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFNVTlBST19DKQorICAgICAgICAjCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFRJTllfQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBXQVRDT01fVU5JWF9DKQorICAgICAgICAjCisgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFdBVENPTV9XSU5ET1dTX0MpCisgICAgICAgICMKKyAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgIGVzYWMKKyAgICAjCisgICAgc3F1ZWV6ZSB0bXBfQ1BQRkxBR1MKKyAgICBzcXVlZXplIHRtcF9DRkxBR1MKKyAgICAjCisgICAgaWYgdGVzdCAhIC16ICIkdG1wX0NGTEFHUyIgfHwgdGVzdCAhIC16ICIkdG1wX0NQUEZMQUdTIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb21waWxlciBhY2NlcHRzIHNvbWUgYmFzaWMgb3B0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBhY2NlcHRzIHNvbWUgYmFzaWMgb3B0aW9ucy4uLiAiID4mNjsgfQorICAgICAgQ1BQRkxBR1M9IiR0bXBfc2F2ZV9DUFBGTEFHUyAkdG1wX0NQUEZMQUdTIgorICAgICAgQ0ZMQUdTPSIkdG1wX3NhdmVfQ0ZMQUdTICR0bXBfQ0ZMQUdTIgorICAgICAgc3F1ZWV6ZSBDUFBGTEFHUworICAgICAgc3F1ZWV6ZSBDRkxBR1MKKworICAgIHRtcF9jb21waWxlcl93b3Jrcz0idW5rbm93biIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGludCBpID0gMTsKKyAgICAgIHJldHVybiBpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9jb21waWxlcl93b3Jrcz0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfY29tcGlsZXJfd29ya3M9Im5vIgorICAgIGVjaG8gIiAiID4mNgorICAgIHNlZCAncy9eL2NjLWZhaWw6IC8nIGNvbmZ0ZXN0LmVyciA+JjYKKyAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpbnQgaSA9IDE7CisgICAgICAgIHJldHVybiBpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJubyIKKyAgICAgIGVjaG8gIiAiID4mNgorICAgICAgc2VkICdzL14vbGluay1mYWlsOiAvJyBjb25mdGVzdC5lcnIgPiY2CisgICAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgImNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjICAgICAgIGlmZGVmIF9fU1REQ19fCisjICAgICAgICAgaW5jbHVkZSA8c3RkbGliLmg+CisjICAgICAgIGVuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgZXhpdChpKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJubyIKKyAgICAgIGVjaG8gIiAiID4mNgorICAgICAgZWNobyAicnVuLWZhaWw6IHRlc3QgcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY2CisgICAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgZmkKKyAgICBpZiB0ZXN0ICIkdG1wX2NvbXBpbGVyX3dvcmtzIiA9ICJ5ZXMiOyB0aGVuCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjb21waWxlciBvcHRpb25zIGFkZGVkOiAkdG1wX0NGTEFHUyAkdG1wX0NQUEZMQUdTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNvbXBpbGVyIG9wdGlvbnMgYWRkZWQ6ICR0bXBfQ0ZMQUdTICR0bXBfQ1BQRkxBR1MiID4mNjt9CisKKyAgZWxzZQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNvbXBpbGVyIG9wdGlvbnMgcmVqZWN0ZWQ6ICR0bXBfQ0ZMQUdTICR0bXBfQ1BQRkxBR1MiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY29tcGlsZXIgb3B0aW9ucyByZWplY3RlZDogJHRtcF9DRkxBR1MgJHRtcF9DUFBGTEFHUyIgPiYyO30KKyAgICAgICAgICAgICAgICBDUFBGTEFHUz0iJHRtcF9zYXZlX0NQUEZMQUdTIgorICAgICAgICBDRkxBR1M9IiR0bXBfc2F2ZV9DRkxBR1MiCisKKyAgZmkKKworICAgIGZpCisgICAgIworICBmaQorCisKKyAgICAgICAgIworICBpZiB0ZXN0ICIkY29tcGlsZXJfaWQiICE9ICJ1bmtub3duIjsgdGhlbgorICAgICMKKyAgICB0bXBfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgdG1wX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICAjCisgICAgdG1wX29wdGlvbnM9IiIKKyAgICB0bXBfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgIHRtcF9DUFBGTEFHUz0iJENQUEZMQUdTIgorCisgICAgYWNfdmFyX3N0cmlwcGVkPSIiCisgIGZvciB3b3JkMSBpbiAkdG1wX0NGTEFHUzsgZG8KKyAgICBhY192YXJfc3RyaXBfd29yZD0ibm8iCisgICAgZm9yIHdvcmQyIGluICRmbGFnc19kYmdfYWxsOyBkbworICAgICAgaWYgdGVzdCAiJHdvcmQxIiA9ICIkd29yZDIiOyB0aGVuCisgICAgICAgIGFjX3Zhcl9zdHJpcF93b3JkPSJ5ZXMiCisgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiB0ZXN0ICIkYWNfdmFyX3N0cmlwX3dvcmQiID0gIm5vIjsgdGhlbgorICAgICAgYWNfdmFyX3N0cmlwcGVkPSIkYWNfdmFyX3N0cmlwcGVkICR3b3JkMSIKKyAgICBmaQorICBkb25lCisgICAgdG1wX0NGTEFHUz0iJGFjX3Zhcl9zdHJpcHBlZCIKKyAgc3F1ZWV6ZSB0bXBfQ0ZMQUdTCisKKworICAgIGFjX3Zhcl9zdHJpcHBlZD0iIgorICBmb3Igd29yZDEgaW4gJHRtcF9DUFBGTEFHUzsgZG8KKyAgICBhY192YXJfc3RyaXBfd29yZD0ibm8iCisgICAgZm9yIHdvcmQyIGluICRmbGFnc19kYmdfYWxsOyBkbworICAgICAgaWYgdGVzdCAiJHdvcmQxIiA9ICIkd29yZDIiOyB0aGVuCisgICAgICAgIGFjX3Zhcl9zdHJpcF93b3JkPSJ5ZXMiCisgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiB0ZXN0ICIkYWNfdmFyX3N0cmlwX3dvcmQiID0gIm5vIjsgdGhlbgorICAgICAgYWNfdmFyX3N0cmlwcGVkPSIkYWNfdmFyX3N0cmlwcGVkICR3b3JkMSIKKyAgICBmaQorICBkb25lCisgICAgdG1wX0NQUEZMQUdTPSIkYWNfdmFyX3N0cmlwcGVkIgorICBzcXVlZXplIHRtcF9DUFBGTEFHUworCisgICAgIworICAgIGlmIHRlc3QgIiR3YW50X2RlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGFjY2VwdHMgZGVidWcgZW5hYmxpbmcgb3B0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBhY2NlcHRzIGRlYnVnIGVuYWJsaW5nIG9wdGlvbnMuLi4gIiA+JjY7IH0KKyAgICAgIHRtcF9vcHRpb25zPSIkZmxhZ3NfZGJnX3llcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiR3YW50X2RlYnVnIiA9ICJubyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgYWNjZXB0cyBkZWJ1ZyBkaXNhYmxpbmcgb3B0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBhY2NlcHRzIGRlYnVnIGRpc2FibGluZyBvcHRpb25zLi4uICIgPiY2OyB9CisgICAgICB0bXBfb3B0aW9ucz0iJGZsYWdzX2RiZ19vZmYiCisgICAgZmkKKyAgICAjCisgICAgaWYgdGVzdCAiJGZsYWdzX3ByZWZlcl9jcHBmbGFncyIgPSAieWVzIjsgdGhlbgorICAgICAgQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgJHRtcF9vcHRpb25zIgorICAgICAgQ0ZMQUdTPSIkdG1wX0NGTEFHUyIKKyAgICBlbHNlCisgICAgICBDUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyIKKyAgICAgIENGTEFHUz0iJHRtcF9DRkxBR1MgJHRtcF9vcHRpb25zIgorICAgIGZpCisgICAgc3F1ZWV6ZSBDUFBGTEFHUworICAgIHNxdWVlemUgQ0ZMQUdTCisKKyAgICB0bXBfY29tcGlsZXJfd29ya3M9InVua25vd24iCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpbnQgaSA9IDE7CisgICAgICByZXR1cm4gaTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfY29tcGlsZXJfd29ya3M9InllcyIKKworZWxzZQorCisgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJubyIKKyAgICBlY2hvICIgIiA+JjYKKyAgICBzZWQgJ3MvXi9jYy1mYWlsOiAvJyBjb25mdGVzdC5lcnIgPiY2CisgICAgZWNobyAiICIgPiY2CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICIkdG1wX2NvbXBpbGVyX3dvcmtzIiA9ICJ5ZXMiOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IGkgPSAxOworICAgICAgICByZXR1cm4gaTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHRtcF9jb21waWxlcl93b3Jrcz0ieWVzIgorCitlbHNlCisKKyAgICAgIHRtcF9jb21waWxlcl93b3Jrcz0ibm8iCisgICAgICBlY2hvICIgIiA+JjYKKyAgICAgIHNlZCAncy9eL2xpbmstZmFpbDogLycgY29uZnRlc3QuZXJyID4mNgorICAgICAgZWNobyAiICIgPiY2CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICB0ZXN0ICIkdG1wX2NvbXBpbGVyX3dvcmtzIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworIyAgICAgICBpZmRlZiBfX1NURENfXworIyAgICAgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyAgICAgICBlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGV4aXQoaSk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHRtcF9jb21waWxlcl93b3Jrcz0ieWVzIgorCitlbHNlCisKKyAgICAgIHRtcF9jb21waWxlcl93b3Jrcz0ibm8iCisgICAgICBlY2hvICIgIiA+JjYKKyAgICAgIGVjaG8gInJ1bi1mYWlsOiB0ZXN0IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNgorICAgICAgZWNobyAiICIgPiY2CisKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgIGZpCisgICAgaWYgdGVzdCAiJHRtcF9jb21waWxlcl93b3JrcyIgPSAieWVzIjsgdGhlbgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjb21waWxlciBvcHRpb25zIGFkZGVkOiAkdG1wX29wdGlvbnMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY29tcGlsZXIgb3B0aW9ucyBhZGRlZDogJHRtcF9vcHRpb25zIiA+JjY7fQorCisgIGVsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNvbXBpbGVyIG9wdGlvbnMgcmVqZWN0ZWQ6ICR0bXBfb3B0aW9ucyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjb21waWxlciBvcHRpb25zIHJlamVjdGVkOiAkdG1wX29wdGlvbnMiID4mMjt9CisgICAgICAgICAgICBDUFBGTEFHUz0iJHRtcF9zYXZlX0NQUEZMQUdTIgorICAgICAgQ0ZMQUdTPSIkdG1wX3NhdmVfQ0ZMQUdTIgorCisgIGZpCisKKyAgICAjCisgIGZpCisKKworICAgICAgICAjCisgIGlmIHRlc3QgIiRjb21waWxlcl9pZCIgIT0gInVua25vd24iOyB0aGVuCisgICAgIworICAgIHRtcF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICB0bXBfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgICMKKyAgICB0bXBfb3B0aW9ucz0iIgorICAgIHRtcF9DRkxBR1M9IiRDRkxBR1MiCisgICAgdG1wX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgaG9ub3Jfb3B0aW1pemVfb3B0aW9uPSJ5ZXMiCisgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgIworICAgIGlmIHRlc3QgIiR3YW50X29wdGltaXplIiA9ICJhc3N1bWVfbm8iIHx8CisgICAgICAgdGVzdCAiJHdhbnRfb3B0aW1pemUiID0gImFzc3VtZV95ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIG9wdGltaXplciBhc3N1bWVkIHNldHRpbmcgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBvcHRpbWl6ZXIgYXNzdW1lZCBzZXR0aW5nIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKworCisgIGFjX3Zhcl9tYXRjaF93b3JkPSJubyIKKyAgZm9yIHdvcmQxIGluICR0bXBfQ0ZMQUdTOyBkbworICAgIGZvciB3b3JkMiBpbiAkZmxhZ3Nfb3B0X2FsbDsgZG8KKyAgICAgIGlmIHRlc3QgIiR3b3JkMSIgPSAiJHdvcmQyIjsgdGhlbgorICAgICAgICBhY192YXJfbWF0Y2hfd29yZD0ieWVzIgorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKKworICBpZiB0ZXN0ICIkYWNfdmFyX21hdGNoX3dvcmQiID0gInllcyI7IHRoZW4KKworICAgICAgICBob25vcl9vcHRpbWl6ZV9vcHRpb249Im5vIgorCisKKyAgZmkKKworCisKKyAgYWNfdmFyX21hdGNoX3dvcmQ9Im5vIgorICBmb3Igd29yZDEgaW4gJHRtcF9DUFBGTEFHUzsgZG8KKyAgICBmb3Igd29yZDIgaW4gJGZsYWdzX29wdF9hbGw7IGRvCisgICAgICBpZiB0ZXN0ICIkd29yZDEiID0gIiR3b3JkMiI7IHRoZW4KKyAgICAgICAgYWNfdmFyX21hdGNoX3dvcmQ9InllcyIKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCisKKyAgaWYgdGVzdCAiJGFjX3Zhcl9tYXRjaF93b3JkIiA9ICJ5ZXMiOyB0aGVuCisKKyAgICAgICAgaG9ub3Jfb3B0aW1pemVfb3B0aW9uPSJubyIKKworCisgIGZpCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaG9ub3Jfb3B0aW1pemVfb3B0aW9uIiA+JjUKKyRhc19lY2hvICIkaG9ub3Jfb3B0aW1pemVfb3B0aW9uIiA+JjY7IH0KKyAgICAgIGlmIHRlc3QgIiRob25vcl9vcHRpbWl6ZV9vcHRpb24iID0gInllcyI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfb3B0aW1pemUiID0gImFzc3VtZV95ZXMiOyB0aGVuCisgICAgICAgICAgd2FudF9vcHRpbWl6ZT0ieWVzIgorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICIkd2FudF9vcHRpbWl6ZSIgPSAiYXNzdW1lX25vIjsgdGhlbgorICAgICAgICAgIHdhbnRfb3B0aW1pemU9Im5vIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgICMKKyAgICBpZiB0ZXN0ICIkaG9ub3Jfb3B0aW1pemVfb3B0aW9uIiA9ICJ5ZXMiOyB0aGVuCisKKyAgICBhY192YXJfc3RyaXBwZWQ9IiIKKyAgZm9yIHdvcmQxIGluICR0bXBfQ0ZMQUdTOyBkbworICAgIGFjX3Zhcl9zdHJpcF93b3JkPSJubyIKKyAgICBmb3Igd29yZDIgaW4gJGZsYWdzX29wdF9hbGw7IGRvCisgICAgICBpZiB0ZXN0ICIkd29yZDEiID0gIiR3b3JkMiI7IHRoZW4KKyAgICAgICAgYWNfdmFyX3N0cmlwX3dvcmQ9InllcyIKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIHRlc3QgIiRhY192YXJfc3RyaXBfd29yZCIgPSAibm8iOyB0aGVuCisgICAgICBhY192YXJfc3RyaXBwZWQ9IiRhY192YXJfc3RyaXBwZWQgJHdvcmQxIgorICAgIGZpCisgIGRvbmUKKyAgICB0bXBfQ0ZMQUdTPSIkYWNfdmFyX3N0cmlwcGVkIgorICBzcXVlZXplIHRtcF9DRkxBR1MKKworCisgICAgYWNfdmFyX3N0cmlwcGVkPSIiCisgIGZvciB3b3JkMSBpbiAkdG1wX0NQUEZMQUdTOyBkbworICAgIGFjX3Zhcl9zdHJpcF93b3JkPSJubyIKKyAgICBmb3Igd29yZDIgaW4gJGZsYWdzX29wdF9hbGw7IGRvCisgICAgICBpZiB0ZXN0ICIkd29yZDEiID0gIiR3b3JkMiI7IHRoZW4KKyAgICAgICAgYWNfdmFyX3N0cmlwX3dvcmQ9InllcyIKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIHRlc3QgIiRhY192YXJfc3RyaXBfd29yZCIgPSAibm8iOyB0aGVuCisgICAgICBhY192YXJfc3RyaXBwZWQ9IiRhY192YXJfc3RyaXBwZWQgJHdvcmQxIgorICAgIGZpCisgIGRvbmUKKyAgICB0bXBfQ1BQRkxBR1M9IiRhY192YXJfc3RyaXBwZWQiCisgIHNxdWVlemUgdG1wX0NQUEZMQUdTCisKKyAgICAgIGlmIHRlc3QgIiR3YW50X29wdGltaXplIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgYWNjZXB0cyBvcHRpbWl6ZXIgZW5hYmxpbmcgb3B0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBhY2NlcHRzIG9wdGltaXplciBlbmFibGluZyBvcHRpb25zLi4uICIgPiY2OyB9CisgICAgICAgIHRtcF9vcHRpb25zPSIkZmxhZ3Nfb3B0X3llcyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2FudF9vcHRpbWl6ZSIgPSAibm8iOyB0aGVuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgYWNjZXB0cyBvcHRpbWl6ZXIgZGlzYWJsaW5nIG9wdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29tcGlsZXIgYWNjZXB0cyBvcHRpbWl6ZXIgZGlzYWJsaW5nIG9wdGlvbnMuLi4gIiA+JjY7IH0KKyAgICAgICAgdG1wX29wdGlvbnM9IiRmbGFnc19vcHRfb2ZmIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRmbGFnc19wcmVmZXJfY3BwZmxhZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgJHRtcF9vcHRpb25zIgorICAgICAgICBDRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgZWxzZQorICAgICAgICBDUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSIkdG1wX0NGTEFHUyAkdG1wX29wdGlvbnMiCisgICAgICBmaQorICAgICAgc3F1ZWV6ZSBDUFBGTEFHUworICAgICAgc3F1ZWV6ZSBDRkxBR1MKKworICAgIHRtcF9jb21waWxlcl93b3Jrcz0idW5rbm93biIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGludCBpID0gMTsKKyAgICAgIHJldHVybiBpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRtcF9jb21waWxlcl93b3Jrcz0ieWVzIgorCitlbHNlCisKKyAgICB0bXBfY29tcGlsZXJfd29ya3M9Im5vIgorICAgIGVjaG8gIiAiID4mNgorICAgIHNlZCAncy9eL2NjLWZhaWw6IC8nIGNvbmZ0ZXN0LmVyciA+JjYKKyAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpbnQgaSA9IDE7CisgICAgICAgIHJldHVybiBpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJubyIKKyAgICAgIGVjaG8gIiAiID4mNgorICAgICAgc2VkICdzL14vbGluay1mYWlsOiAvJyBjb25mdGVzdC5lcnIgPiY2CisgICAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0bXBfY29tcGlsZXJfd29ya3MiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgImNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjICAgICAgIGlmZGVmIF9fU1REQ19fCisjICAgICAgICAgaW5jbHVkZSA8c3RkbGliLmg+CisjICAgICAgIGVuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgZXhpdChpKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJubyIKKyAgICAgIGVjaG8gIiAiID4mNgorICAgICAgZWNobyAicnVuLWZhaWw6IHRlc3QgcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY2CisgICAgICBlY2hvICIgIiA+JjYKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgZmkKKyAgICBpZiB0ZXN0ICIkdG1wX2NvbXBpbGVyX3dvcmtzIiA9ICJ5ZXMiOyB0aGVuCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjb21waWxlciBvcHRpb25zIGFkZGVkOiAkdG1wX29wdGlvbnMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY29tcGlsZXIgb3B0aW9ucyBhZGRlZDogJHRtcF9vcHRpb25zIiA+JjY7fQorCisgIGVsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjb21waWxlciBvcHRpb25zIHJlamVjdGVkOiAkdG1wX29wdGlvbnMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY29tcGlsZXIgb3B0aW9ucyByZWplY3RlZDogJHRtcF9vcHRpb25zIiA+JjI7fQorICAgICAgICAgICAgICAgIENQUEZMQUdTPSIkdG1wX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyIKKworICBmaQorCisgICAgZmkKKyAgICAjCisgIGZpCisKKworICAgICAgICAjCisgIGlmIHRlc3QgIiRjb21waWxlcl9pZCIgIT0gInVua25vd24iOyB0aGVuCisgICAgIworICAgIHRtcF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgdG1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgIHRtcF9DUFBGTEFHUz0iIgorICAgIHRtcF9DRkxBR1M9IiIKKyAgICAjCisgICAgY2FzZSAiJGNvbXBpbGVyX2lkIiBpbgorICAgICAgICAjCisgICAgICBDTEFORykKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkd2FudF93YXJuaW5ncyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLXBlZGFudGljIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XYWxsIC1XZXh0cmEiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdwb2ludGVyLWFyaXRoIC1Xd3JpdGUtc3RyaW5ncyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3NoYWRvdyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2lubGluZSAtV25lc3RlZC1leHRlcm5zIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdtaXNzaW5nLXByb3RvdHlwZXMiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1sb25nLWxvbmciCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdmbG9hdC1lcXVhbCIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLW11bHRpY2hhciAtV3NpZ24tY29tcGFyZSIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3VuZGVmIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xbm8tZm9ybWF0LW5vbmxpdGVyYWwiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdlbmRpZi1sYWJlbHMgLVdzdHJpY3QtcHJvdG90eXBlcyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2Nhc3QtYWxpZ24iCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1zeXN0ZW0taGVhZGVycyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3Nob3J0ZW4tNjQtdG8tMzIiCisgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjEwMSI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XdW51c2VkIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIERFQ19DKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1tc2dfZW5hYmxlIGxldmVsMyIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgR05VX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiIHx8CisgICAgICAgICAgICB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjMwMCI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1wZWRhbnRpYyIKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdhbGwgLVciCisgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjEwNCI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XcG9pbnRlci1hcml0aCAtV3dyaXRlLXN0cmluZ3MiCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiIHx8CisgICAgICAgICAgICAgIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzAwIjsgdGhlbgorICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3VudXNlZCAtV3NoYWRvdyIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMjA3IjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdpbmxpbmUgLVduZXN0ZWQtZXh0ZXJucyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgfHwKKyAgICAgICAgICAgICAgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIzMDAiOyB0aGVuCisgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMiCisgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XbWlzc2luZy1wcm90b3R5cGVzIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIyOTUiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLWxvbmctbG9uZyIKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIyOTYiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2Zsb2F0LWVxdWFsIgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1tdWx0aWNoYXIgLVdzaWduLWNvbXBhcmUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3VuZGVmIgorICAgICAgICAgIGZpCisgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjI5NyI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xbm8tZm9ybWF0LW5vbmxpdGVyYWwiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzAwIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzAzIjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdlbmRpZi1sYWJlbHMgLVdzdHJpY3QtcHJvdG90eXBlcyIKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIzMDQiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICI0MDIiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2Nhc3QtYWxpZ24iCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiNDAzIjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVd0eXBlLWxpbWl0cyAtV29sZC1zdHlsZS1kZWNsYXJhdGlvbiIKKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XbWlzc2luZy1wYXJhbWV0ZXItdHlwZSAtV2VtcHR5LWJvZHkiCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2Nsb2JiZXJlZCAtV2lnbm9yZWQtcXVhbGlmaWVycyIKKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XY29udmVyc2lvbiAtV25vLXNpZ24tY29udmVyc2lvbiAtV3ZsYSIKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgZmkKKyAgICAgICAgIworICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzAwIjsgdGhlbgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xbm8tc3lzdGVtLWhlYWRlcnMiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIxMDQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby11bnVzZWQgLVduby1zaGFkb3ciCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIyMDciOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1taXNzaW5nLWRlY2xhcmF0aW9ucyIKKyAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1taXNzaW5nLXByb3RvdHlwZXMiCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIEhQX1VYX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgK3cxIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgICAjCisgICAgICBJQk1fQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBJTlRFTF9VTklYX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ3QgIjYwMCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtV2FsbCAtdzIiCisgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdjaGVjayIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtV2NvbW1lbnQiCisgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdkZXByZWNhdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1XbWlzc2luZy1wcm90b3R5cGVzIgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1XcDY0IgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1XcG9pbnRlci1hcml0aCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtV3JldHVybi10eXBlIgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1Xc2hhZG93IgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1XdW5pbml0aWFsaXplZCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtV3VudXNlZC1mdW5jdGlvbiIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIgorICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1mbm8tc3RyaWN0LWFsaWFzaW5nIgorICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1mcC1tb2RlbCBwcmVjaXNlIgorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMTAwMCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLXZlYy1yZXBvcnQwIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgICAjCisgICAgICBJTlRFTF9XSU5ET1dTX0MpCisgICAgICAgICMKKyAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgTENDKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgICAjCisgICAgICBTR0lfTUlQU19DKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1mdWxsd2FybiIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgU0dJX01JUFNQUk9fQykKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkd2FudF93YXJuaW5ncyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtZnVsbHdhcm4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtd29mZiAxMjA5IgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgICAjCisgICAgICBTVU5QUk9fQykKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkd2FudF93YXJuaW5ncyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtdiIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgVElOWV9DKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XYWxsIgorICAgICAgICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3dyaXRlLXN0cmluZ3MiCisgICAgICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XdW5zdXBwb3J0ZWQiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFdBVENPTV9VTklYX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdhbGwgLVdleHRyYSIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgV0FUQ09NX1dJTkRPV1NfQykKKyAgICAgICAgIworICAgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgZXNhYworICAgICMKKyAgICBzcXVlZXplIHRtcF9DUFBGTEFHUworICAgIHNxdWVlemUgdG1wX0NGTEFHUworICAgICMKKyAgICBpZiB0ZXN0ICEgLXogIiR0bXBfQ0ZMQUdTIiB8fCB0ZXN0ICEgLXogIiR0bXBfQ1BQRkxBR1MiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbXBpbGVyIGFjY2VwdHMgc3RyaWN0IHdhcm5pbmcgb3B0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBhY2NlcHRzIHN0cmljdCB3YXJuaW5nIG9wdGlvbnMuLi4gIiA+JjY7IH0KKyAgICAgIENQUEZMQUdTPSIkdG1wX3NhdmVfQ1BQRkxBR1MgJHRtcF9DUFBGTEFHUyIKKyAgICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyAkdG1wX0NGTEFHUyIKKyAgICAgIHNxdWVlemUgQ1BQRkxBR1MKKyAgICAgIHNxdWVlemUgQ0ZMQUdTCisKKyAgICB0bXBfY29tcGlsZXJfd29ya3M9InVua25vd24iCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpbnQgaSA9IDE7CisgICAgICByZXR1cm4gaTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfY29tcGlsZXJfd29ya3M9InllcyIKKworZWxzZQorCisgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJubyIKKyAgICBlY2hvICIgIiA+JjYKKyAgICBzZWQgJ3MvXi9jYy1mYWlsOiAvJyBjb25mdGVzdC5lcnIgPiY2CisgICAgZWNobyAiICIgPiY2CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICIkdG1wX2NvbXBpbGVyX3dvcmtzIiA9ICJ5ZXMiOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IGkgPSAxOworICAgICAgICByZXR1cm4gaTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHRtcF9jb21waWxlcl93b3Jrcz0ieWVzIgorCitlbHNlCisKKyAgICAgIHRtcF9jb21waWxlcl93b3Jrcz0ibm8iCisgICAgICBlY2hvICIgIiA+JjYKKyAgICAgIHNlZCAncy9eL2xpbmstZmFpbDogLycgY29uZnRlc3QuZXJyID4mNgorICAgICAgZWNobyAiICIgPiY2CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICB0ZXN0ICIkdG1wX2NvbXBpbGVyX3dvcmtzIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworIyAgICAgICBpZmRlZiBfX1NURENfXworIyAgICAgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyAgICAgICBlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGV4aXQoaSk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHRtcF9jb21waWxlcl93b3Jrcz0ieWVzIgorCitlbHNlCisKKyAgICAgIHRtcF9jb21waWxlcl93b3Jrcz0ibm8iCisgICAgICBlY2hvICIgIiA+JjYKKyAgICAgIGVjaG8gInJ1bi1mYWlsOiB0ZXN0IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNgorICAgICAgZWNobyAiICIgPiY2CisKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgIGZpCisgICAgaWYgdGVzdCAiJHRtcF9jb21waWxlcl93b3JrcyIgPSAieWVzIjsgdGhlbgorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY29tcGlsZXIgb3B0aW9ucyBhZGRlZDogJHRtcF9DRkxBR1MgJHRtcF9DUFBGTEFHUyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjb21waWxlciBvcHRpb25zIGFkZGVkOiAkdG1wX0NGTEFHUyAkdG1wX0NQUEZMQUdTIiA+JjY7fQorCisgIGVsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjb21waWxlciBvcHRpb25zIHJlamVjdGVkOiAkdG1wX0NGTEFHUyAkdG1wX0NQUEZMQUdTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNvbXBpbGVyIG9wdGlvbnMgcmVqZWN0ZWQ6ICR0bXBfQ0ZMQUdTICR0bXBfQ1BQRkxBR1MiID4mMjt9CisgICAgICAgICAgICAgICAgQ1BQRkxBR1M9IiR0bXBfc2F2ZV9DUFBGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSIkdG1wX3NhdmVfQ0ZMQUdTIgorCisgIGZpCisKKyAgICBmaQorICAgICMKKyAgZmkKKworCitpZiB0ZXN0ICIkY29tcGlsZXJfaWQiID0gIklOVEVMX1VOSVhfQyI7IHRoZW4KKyAgIworICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjEwMDAiOyB0aGVuCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAtc2hhcmVkLWludGVsIgorICBlbGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiOTAwIjsgdGhlbgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLWktZHluYW1pYyIKKyAgZmkKKyAgIworZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgaGFsdHMgb24gY29tcGlsYXRpb24gZXJyb3JzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGhhbHRzIG9uIGNvbXBpbGF0aW9uIGVycm9ycy4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgZm9yY2UgY29tcGlsYXRpb24gZXJyb3IKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhc19mbl9lcnJvciAiY29tcGlsZXIgZG9lcyBub3QgaGFsdCBvbiBjb21waWxhdGlvbiBlcnJvcnMuIiAiJExJTkVOTyIgNQorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgaGFsdHMgb24gbmVnYXRpdmUgc2l6ZWQgYXJyYXlzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbXBpbGVyIGhhbHRzIG9uIG5lZ2F0aXZlIHNpemVkIGFycmF5cy4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgdHlwZWRlZiBjaGFyIGJhZF90W3NpemVvZihjaGFyKSA9PSBzaXplb2YoaW50KSA/IC0xIDogLTEgXTsKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGJhZF90IGR1bW15OworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFzX2ZuX2Vycm9yICJjb21waWxlciBkb2VzIG5vdCBoYWx0IG9uIG5lZ2F0aXZlIHNpemVkIGFycmF5cy4iICIkTElORU5PIiA1CisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNoYXJlZCBsaWJyYXJpZXMgbmVlZCAtbm8tdW5kZWZpbmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNoYXJlZCBsaWJyYXJpZXMgbmVlZCAtbm8tdW5kZWZpbmVkLi4uICIgPiY2OyB9CisgIG5lZWRfbm9fdW5kZWZpbmVkPSJubyIKKyAgY2FzZSAkaG9zdCBpbgorICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyogfCAqLSotYWl4KikKKyAgICAgIG5lZWRfbm9fdW5kZWZpbmVkPSJ5ZXMiCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgIngkYWxsb3dfdW5kZWZpbmVkIiA9ICJ4bm8iOyB0aGVuCisgICAgbmVlZF9ub191bmRlZmluZWQ9InllcyIKKyAgZWxpZiB0ZXN0ICJ4JGFsbG93X3VuZGVmaW5lZF9mbGFnIiA9ICJ4dW5zdXBwb3J0ZWQiOyB0aGVuCisgICAgbmVlZF9ub191bmRlZmluZWQ9InllcyIKKyAgZmkKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZWVkX25vX3VuZGVmaW5lZCIgPiY1CiskYXNfZWNobyAiJG5lZWRfbm9fdW5kZWZpbmVkIiA+JjY7IH0KKworCisKK2lmIHRlc3QgeCRuZWVkX25vX3VuZGVmaW5lZCA9IHh5ZXM7IHRoZW4KKyAgTk9fVU5ERUZJTkVEX1RSVUU9CisgIE5PX1VOREVGSU5FRF9GQUxTRT0nIycKK2Vsc2UKKyAgTk9fVU5ERUZJTkVEX1RSVUU9JyMnCisgIE5PX1VOREVGSU5FRF9GQUxTRT0KK2ZpCisKKworCisgICAgc3VwcG9ydHNfY3VybGRlYnVnPSJ1bmtub3duIgorICBpZiB0ZXN0ICIkd2FudF9jdXJsZGVidWciID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9zaGFyZWQiICE9ICJ4bm8iICYmCisgICAgICB0ZXN0ICJ4JGVuYWJsZV9zaGFyZWQiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1bmtub3duIGVuYWJsZV9zaGFyZWQgc2V0dGluZy4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5rbm93biBlbmFibGVfc2hhcmVkIHNldHRpbmcuIiA+JjI7fQorICAgICAgc3VwcG9ydHNfY3VybGRlYnVnPSJubyIKKyAgICBmaQorICAgIGlmIHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgIT0gInhubyIgJiYKKyAgICAgIHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVua25vd24gZW5hYmxlX3N0YXRpYyBzZXR0aW5nLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bmtub3duIGVuYWJsZV9zdGF0aWMgc2V0dGluZy4iID4mMjt9CisgICAgICBzdXBwb3J0c19jdXJsZGVidWc9Im5vIgorICAgIGZpCisgICAgaWYgdGVzdCAiJHN1cHBvcnRzX2N1cmxkZWJ1ZyIgIT0gIm5vIjsgdGhlbgorICAgICAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gInllcyIgJiYKKyAgICAgICAgdGVzdCAiJG5lZWRfbm9fdW5kZWZpbmVkIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIHN1cHBvcnRzX2N1cmxkZWJ1Zz0ibm8iCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogc2hhcmVkIGxpYnJhcnkgZG9lcyBub3Qgc3VwcG9ydCB1bmRlZmluZWQgc3ltYm9scy4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogc2hhcmVkIGxpYnJhcnkgZG9lcyBub3Qgc3VwcG9ydCB1bmRlZmluZWQgc3ltYm9scy4iID4mMjt9CisgICAgICBmaQorICAgIGZpCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHdhbnRfY3VybGRlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjdXJsIGRlYnVnIG1lbW9yeSB0cmFja2luZyBjYW4gYmUgZW5hYmxlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjdXJsIGRlYnVnIG1lbW9yeSB0cmFja2luZyBjYW4gYmUgZW5hYmxlZC4uLiAiID4mNjsgfQorICAgIHRlc3QgIiRzdXBwb3J0c19jdXJsZGVidWciID0gIm5vIiB8fCBzdXBwb3J0c19jdXJsZGVidWc9InllcyIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHN1cHBvcnRzX2N1cmxkZWJ1ZyIgPiY1CiskYXNfZWNobyAiJHN1cHBvcnRzX2N1cmxkZWJ1ZyIgPiY2OyB9CisgICAgaWYgdGVzdCAiJHN1cHBvcnRzX2N1cmxkZWJ1ZyIgPSAibm8iOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhbm5vdCBlbmFibGUgY3VybCBkZWJ1ZyBtZW1vcnkgdHJhY2tpbmcuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhbm5vdCBlbmFibGUgY3VybCBkZWJ1ZyBtZW1vcnkgdHJhY2tpbmcuIiA+JjI7fQorICAgICAgd2FudF9jdXJsZGVidWc9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHdhbnRfY3VybGRlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgICAgQ1BQRkxBR1M9Ii1EQ1VSTERFQlVHICRDUFBGTEFHUyIKKyAgICBzcXVlZXplIENQUEZMQUdTCisgIGZpCisgIGlmIHRlc3QgIiR3YW50X2RlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgICAgQ1BQRkxBR1M9Ii1EREVCVUdCVUlMRCAkQ1BQRkxBR1MiCisgICAgc3F1ZWV6ZSBDUFBGTEFHUworICBmaQorCisKKworaWYgdGVzdCB4JHdhbnRfY3VybGRlYnVnID0geHllczsgdGhlbgorICBDVVJMREVCVUdfVFJVRT0KKyAgQ1VSTERFQlVHX0ZBTFNFPScjJworZWxzZQorICBDVVJMREVCVUdfVFJVRT0nIycKKyAgQ1VSTERFQlVHX0ZBTFNFPQorZmkKKworCitzdXBwb3J0c191bml0dGVzdHM9eWVzCisjIGNyb3NzLWNvbXBpbGF0aW9uIG9mIHVuaXQgdGVzdHMgc3RhdGljIGxpYnJhcnkvcHJvZ3JhbXMgZmFpbHMgd2hlbgorIyBsaWJjdXJsIHNoYXJlZCBsaWJyYXJ5IGlzIGJ1aWx0LiBUaGlzIG1pZ2h0IGJlIGR1ZSB0byBhIGxpYnRvb2wgb3IKKyMgYXV0b21ha2UgaXNzdWUuIEluIHRoaXMgY2FzZSB3ZSBkaXNhYmxlIHVuaXQgdGVzdHMuCitpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInhubyIgJiYKKyAgIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0gInhubyI7IHRoZW4KKyAgc3VwcG9ydHNfdW5pdHRlc3RzPW5vCitmaQorCisjIElSSVggNi41LjI0IGdjYyAzLjMgYXV0b2J1aWxkcyBmYWlsIHVuaXR0ZXN0cyBsaWJyYXJ5IGNvbXBpbGF0aW9uIGR1ZSB0bworIyBhIHByb2JsZW0gcmVsYXRlZCB3aXRoIE9wZW5TU0wgaGVhZGVycyBhbmQgbGlicmFyeSB2ZXJzaW9ucyBub3QgbWF0Y2hpbmcuCisjIERpc2FibGUgdW5pdCB0ZXN0cyB3aGlsZSB0aW1lIHRvIGZ1cnRoZXIgaW52ZXN0aWdhdGUgdGhpcyBpcyBmb3VuZC4KK2Nhc2UgJGhvc3QgaW4KKyAgbWlwcy1zZ2ktaXJpeDYuNSkKKyAgICBpZiB0ZXN0ICIkY29tcGlsZXJfaWQiID0gIkdOVV9DIjsgdGhlbgorICAgICAgc3VwcG9ydHNfdW5pdHRlc3RzPW5vCisgICAgZmkKKyAgICA7OworZXNhYworCisjIEFsbCBBSVggYXV0b2J1aWxkcyBmYWlscyB1bml0IHRlc3RzIGxpbmtpbmcgYWdhaW5zdCB1bml0dGVzdHMgbGlicmFyeQorIyBkdWUgdG8gdW5pdHRlc3RzIGxpYnJhcnkgYmVpbmcgYnVpbHQgd2l0aCBubyBzeW1ib2xzIG9yIG1lbWJlcnMuIExpYnRvb2wgPworIyBEaXNhYmxlIHVuaXQgdGVzdHMgd2hpbGUgdGltZSB0byBmdXJ0aGVyIGludmVzdGlnYXRlIHRoaXMgaXMgZm91bmQuCitjYXNlICRob3N0X29zIGluCisgIGFpeCopCisgICAgc3VwcG9ydHNfdW5pdHRlc3RzPW5vCisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAieCR3YW50X2RlYnVnIiA9ICJ4eWVzIiAmJgorICAgdGVzdCAieCRzdXBwb3J0c191bml0dGVzdHMiID0gInh5ZXMiOyB0aGVuCisgIHdhbnRfdW5pdHRlc3RzPXllcworZWxzZQorICB3YW50X3VuaXR0ZXN0cz1ubworZmkKKworCitpZiB0ZXN0IHgkd2FudF91bml0dGVzdHMgPSB4eWVzOyB0aGVuCisgIEJVSUxEX1VOSVRURVNUU19UUlVFPQorICBCVUlMRF9VTklUVEVTVFNfRkFMU0U9JyMnCitlbHNlCisgIEJVSUxEX1VOSVRURVNUU19UUlVFPScjJworICBCVUlMRF9VTklUVEVTVFNfRkFMU0U9CitmaQorCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd2luZG93cy5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3aW5kb3dzLmguLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3dpbmRvd3NfaCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DRUdDQ19fKQorICAgICAgICBIQVZFX1dJTkRPV1NfSCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyNlbHNlCisgICAgICAgIGludCBkdW1teT0yKldJTlZFUjsKKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5kb3dzX2g9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl93aW5kb3dzX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl93aW5kb3dzX2giIGluCisgICAgeWVzKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV0lORE9XU19IIDEKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTiAxCitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgdGFyZ2V0IGlzIGEgbmF0aXZlIFdpbmRvd3Mgb25lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYnVpbGQgdGFyZ2V0IGlzIGEgbmF0aXZlIFdpbmRvd3Mgb25lLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X25hdGl2ZV93aW5kb3dzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiA9ICJubyI7IHRoZW4KKyAgICAgIGFjX2N2X25hdGl2ZV93aW5kb3dzPSJubyIKKyAgICBlbHNlCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCitpbnQgbWFpbiAodm9pZCkKK3sKKworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX19NSU5HVzMyQ0VfXykgfHwgXAorICAgKGRlZmluZWQoX01TQ19WRVIpICYmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lONjQpKSkKKyAgICAgICAgICBpbnQgZHVtbXk9MTsKKyNlbHNlCisgICAgICAgICAgTm90IGEgbmF0aXZlIFdpbmRvd3MgYnVpbGQgdGFyZ2V0LgorI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgIGFjX2N2X25hdGl2ZV93aW5kb3dzPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgICBhY19jdl9uYXRpdmVfd2luZG93cz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9uYXRpdmVfd2luZG93cyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X25hdGl2ZV93aW5kb3dzIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X25hdGl2ZV93aW5kb3dzIiBpbgorICAgIHllcykKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBOQVRJVkVfV0lORE9XUyAxCitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCitjYXNlIFgtIiRhY19jdl9uYXRpdmVfd2luZG93cyIgaW4KKyAgWC15ZXMpCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3aW5zb2NrLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdpbnNvY2suaC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfd2luc29ja19oK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbnNvY2suaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DRUdDQ19fKQorICAgICAgICBIQVZFX1dJTlNPQ0tfSCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyNlbHNlCisgICAgICAgIGludCBkdW1teT1XU0FDbGVhbnVwKCk7CisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5zb2NrX2g9InllcyIKKworZWxzZQorCisgICAgICBhY19jdl9oZWFkZXJfd2luc29ja19oPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfd2luc29ja19oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaCIgPiY2OyB9CisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd2luc29ja19oIiBpbgorICAgIHllcykKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1dJTlNPQ0tfSCAxCitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3aW5zb2NrMi5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3aW5zb2NrMi5oLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl93aW5zb2NrMl9oK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fQ0VHQ0NfXykgfHwgZGVmaW5lZChfX01JTkdXMzJDRV9fKQorICAgICAgICBIQVZFX1dJTlNPQ0syX0ggc2hhbGwgbm90IGJlIGRlZmluZWQuCisjZWxzZQorICAgICAgICBpbnQgZHVtbXk9MipJUFBST1RPX0VTUDsKKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2g9InllcyIKKworZWxzZQorCisgICAgICBhY19jdl9oZWFkZXJfd2luc29jazJfaD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPiY2OyB9CisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgaW4KKyAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9XSU5TT0NLMl9IIDEKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdzMnRjcGlwLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdzMnRjcGlwLmguLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NFR0NDX18pIHx8IGRlZmluZWQoX19NSU5HVzMyQ0VfXykKKyAgICAgICAgSEFWRV9XUzJUQ1BJUF9IIHNoYWxsIG5vdCBiZSBkZWZpbmVkLgorI2Vsc2UKKyAgICAgICAgaW50IGR1bW15PTIqSVBfUEtUSU5GTzsKKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2g9InllcyIKKworZWxzZQorCisgICAgICBhY19jdl9oZWFkZXJfd3MydGNwaXBfaD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfd3MydGNwaXBfaCIgPiY2OyB9CisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd3MydGNwaXBfaCIgaW4KKyAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9XUzJUQ1BJUF9IIDEKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdpbmxkYXAuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2lubGRhcC5oLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl93aW5sZGFwX2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmxkYXAuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DRUdDQ19fKQorICAgICAgICBIQVZFX1dJTkxEQVBfSCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyNlbHNlCisgICAgICAgIExEQVAgKmxkcCA9IGxkYXBfaW5pdCgiZHVtbXkiLCBMREFQX1BPUlQpOworICAgICAgICBVTE9ORyByZXMgPSBsZGFwX3VuYmluZChsZHApOworI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBhY19jdl9oZWFkZXJfd2lubGRhcF9oPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfaGVhZGVyX3dpbmxkYXBfaD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3dpbmxkYXBfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl93aW5sZGFwX2giID4mNjsgfQorICBjYXNlICIkYWNfY3ZfaGVhZGVyX3dpbmxkYXBfaCIgaW4KKyAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9XSU5MREFQX0ggMQorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd2luYmVyLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdpbmJlci5oLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl93aW5iZXJfaCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisjaW5jbHVkZSA8d2lubGRhcC5oPgorI2luY2x1ZGUgPHdpbmJlci5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NFR0NDX18pCisgICAgICAgIEhBVkVfV0lOQkVSX0ggc2hhbGwgbm90IGJlIGRlZmluZWQuCisjZWxzZQorICAgICAgICBCRVJWQUwgKmJ2cCA9IE5VTEw7CisgICAgICAgIEJlckVsZW1lbnQgKmJlcCA9IGJlcl9pbml0KGJ2cCk7CisgICAgICAgIGJlcl9mcmVlKGJlcCwgMSk7CisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5iZXJfaD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5iZXJfaD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3dpbmJlcl9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3dpbmJlcl9oIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl93aW5iZXJfaCIgaW4KKyAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9XSU5CRVJfSCAxCitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCisgICAgOzsKKyAgKikKKyAgICBhY19jdl9oZWFkZXJfd2luc29ja19oPSJubyIKKyAgICBhY19jdl9oZWFkZXJfd2luc29jazJfaD0ibm8iCisgICAgYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2g9Im5vIgorICAgIGFjX2N2X2hlYWRlcl93aW5sZGFwX2g9Im5vIgorICAgIGFjX2N2X2hlYWRlcl93aW5iZXJfaD0ibm8iCisgICAgOzsKK2VzYWMKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBidWlsZCB0YXJnZXQgc3VwcG9ydHMgV0lOMzIgZmlsZSBBUEkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCB0YXJnZXQgc3VwcG9ydHMgV0lOMzIgZmlsZSBBUEkuLi4gIiA+JjY7IH0KKyAgY3VybF93aW4zMl9maWxlX2FwaT0ibm8iCisgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCB4IiRlbmFibGVfbGFyZ2VmaWxlIiAhPSAieG5vIjsgdGhlbgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZiAhZGVmaW5lZChfV0lOMzJfV0NFKSAmJiBcCisgICAgKGRlZmluZWQoX19NSU5HVzMyX18pIHx8IFwKKyAgICAoZGVmaW5lZChfTVNDX1ZFUikgJiYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkpKSkKKyAgICAgICAgICBpbnQgZHVtbXk9MTsKKyNlbHNlCisgICAgICAgICAgV0lOMzIgbGFyZ2UgZmlsZSBBUEkgbm90IHN1cHBvcnRlZC4KKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICBjdXJsX3dpbjMyX2ZpbGVfYXBpPSJ3aW4zMl9sYXJnZV9maWxlcyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAiJGN1cmxfd2luMzJfZmlsZV9hcGkiID0gIm5vIjsgdGhlbgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX01TQ19WRVIpCisgICAgICAgICAgaW50IGR1bW15PTE7CisjZWxzZQorICAgICAgICAgIFdJTjMyIHNtYWxsIGZpbGUgQVBJIG5vdCBzdXBwb3J0ZWQuCisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgY3VybF93aW4zMl9maWxlX2FwaT0id2luMzJfc21hbGxfZmlsZXMiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICBmaQorICBjYXNlICIkY3VybF93aW4zMl9maWxlX2FwaSIgaW4KKyAgICB3aW4zMl9sYXJnZV9maWxlcykKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMgKGxhcmdlIGZpbGUgZW5hYmxlZCkiID4mNQorJGFzX2VjaG8gInllcyAobGFyZ2UgZmlsZSBlbmFibGVkKSIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgVVNFX1dJTjMyX0xBUkdFX0ZJTEVTIDEKK19BQ0VPRgorCisgICAgICA7OworICAgIHdpbjMyX3NtYWxsX2ZpbGVzKQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyAobGFyZ2UgZmlsZSBkaXNhYmxlZCkiID4mNQorJGFzX2VjaG8gInllcyAobGFyZ2UgZmlsZSBkaXNhYmxlZCkiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFVTRV9XSU4zMl9TTUFMTF9GSUxFUyAxCitfQUNFT0YKKworICAgICAgOzsKKyAgICAqKQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICA7OworICBlc2FjCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHN1cHBvcnQgaHR0cCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIHN1cHBvcnQgaHR0cC4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWh0dHAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfaHR0cCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2h0dHA7ICBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgQ1VSTF9ESVNBQkxFX0hUVFAgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGRpc2FibGUgSFRUUCBkaXNhYmxlcyBGVFAgb3ZlciBwcm94eSBhbmQgUlRTUCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBkaXNhYmxlIEhUVFAgZGlzYWJsZXMgRlRQIG92ZXIgcHJveHkgYW5kIFJUU1AiID4mMjt9CisgICAgICAgQ1VSTF9ESVNBQkxFX0hUVFA9MQorCisKKyRhc19lY2hvICIjZGVmaW5lIENVUkxfRElTQUJMRV9SVFNQIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgQ1VSTF9ESVNBQkxFX1JUU1A9MQorCisgICAgICAgOzsKKyAgKikgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgIDs7CisgIGVzYWMKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHN1cHBvcnQgZnRwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gc3VwcG9ydCBmdHAuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mdHAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZnRwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZnRwOyAgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIENVUkxfRElTQUJMRV9GVFAgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICBDVVJMX0RJU0FCTEVfRlRQPTEKKworICAgICAgIDs7CisgICopICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICA7OworICBlc2FjCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBzdXBwb3J0IGZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBzdXBwb3J0IGZpbGUuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1maWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9maWxlOyAgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIENVUkxfRElTQUJMRV9GSUxFIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgQ1VSTF9ESVNBQkxFX0ZJTEU9MQorCisgICAgICAgOzsKKyAgKikgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgIDs7CisgIGVzYWMKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHN1cHBvcnQgbGRhcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIHN1cHBvcnQgbGRhcC4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxkYXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGRhcCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xkYXA7ICBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVAgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICBDVVJMX0RJU0FCTEVfTERBUD0xCisKKyAgICAgICA7OworICAqKQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgOzsKKyAgZXNhYworZWxzZQorCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHN1cHBvcnQgbGRhcHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBzdXBwb3J0IGxkYXBzLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGRhcHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGRhcHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9sZGFwczsgIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBDVVJMX0RJU0FCTEVfTERBUFMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICBDVVJMX0RJU0FCTEVfTERBUFM9MQorCisgICAgICAgOzsKKyAgKikgICBpZiB0ZXN0ICJ4JENVUkxfRElTQUJMRV9MREFQIiA9ICJ4MSIgOyB0aGVuCisgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogTERBUCBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHN1cHBvcnQgTERBUFMiID4mNQorJGFzX2VjaG8gIkxEQVAgbmVlZHMgdG8gYmUgZW5hYmxlZCB0byBzdXBwb3J0IExEQVBTIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVBTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICBDVVJMX0RJU0FCTEVfTERBUFM9MQorCisgICAgICAgZWxzZQorICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MREFQX1NTTCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgSEFWRV9MREFQX1NTTD0xCisKKyAgICAgICBmaQorICAgICAgIDs7CisgIGVzYWMKK2Vsc2UKKworICAgICAgIGlmIHRlc3QgIngkQ1VSTF9ESVNBQkxFX0xEQVAiID0gIngxIiA7IHRoZW4KKyAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBDVVJMX0RJU0FCTEVfTERBUFMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgIENVUkxfRElTQUJMRV9MREFQUz0xCisKKyAgICAgICBlbHNlCisgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xEQVBfU1NMIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICBIQVZFX0xEQVBfU1NMPTEKKworICAgICAgIGZpCisKK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHN1cHBvcnQgcnRzcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIHN1cHBvcnQgcnRzcC4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJ0c3Agd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcnRzcCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3J0c3A7ICBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgQ1VSTF9ESVNBQkxFX1JUU1AgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICBDVVJMX0RJU0FCTEVfUlRTUD0xCisKKyAgICAgICA7OworICAqKSAgIGlmIHRlc3QgeCRDVVJMX0RJU0FCTEVfSFRUUCA9IHgxIDsgdGhlbgorICAgICAgICAgIGFzX2ZuX2Vycm9yICJIVFRQIHN1cHBvcnQgbmVlZHMgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBlbmFibGUgUlRTUCBzdXBwb3J0ISIgIiRMSU5FTk8iIDUKKyAgICAgICBlbHNlCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgICBjdXJsX3J0c3BfbXNnPSJlbmFibGVkIgorICAgICAgIGZpCisgICAgICAgOzsKKyAgZXNhYworZWxzZQorICBpZiB0ZXN0ICJ4JENVUkxfRElTQUJMRV9IVFRQIiAhPSAieDEiOyB0aGVuCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgICBjdXJsX3J0c3BfbXNnPSJlbmFibGVkIgorICAgICAgIGVsc2UKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICBmaQorCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBzdXBwb3J0IHByb3hpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBzdXBwb3J0IHByb3hpZXMuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wcm94eSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wcm94eStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3Byb3h5OyAgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIENVUkxfRElTQUJMRV9QUk9YWSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgIENVUkxfRElTQUJMRV9QUk9YWT0xCisKKyAgICAgICA7OworICAqKSAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgOzsKKyAgZXNhYworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBzdXBwb3J0IGRpY3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBzdXBwb3J0IGRpY3QuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kaWN0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RpY3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kaWN0OyAgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIENVUkxfRElTQUJMRV9ESUNUIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgQ1VSTF9ESVNBQkxFX0RJQ1Q9MQorCisgICAgICAgOzsKKyAgKikgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgIDs7CisgIGVzYWMKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHN1cHBvcnQgdGVsbmV0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gc3VwcG9ydCB0ZWxuZXQuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZWxuZXQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdGVsbmV0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdGVsbmV0OyAgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIENVUkxfRElTQUJMRV9URUxORVQgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICBDVVJMX0RJU0FCTEVfVEVMTkVUPTEKKworICAgICAgIDs7CisgICopICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICA7OworICBlc2FjCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBzdXBwb3J0IHRmdHAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBzdXBwb3J0IHRmdHAuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZnRwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3RmdHArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV90ZnRwOyAgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIENVUkxfRElTQUJMRV9URlRQIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgQ1VSTF9ESVNBQkxFX1RGVFA9MQorCisgICAgICAgOzsKKyAgKikgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgIDs7CisgIGVzYWMKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gc3VwcG9ydCBwb3AzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gc3VwcG9ydCBwb3AzLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9wMyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wb3AzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcG9wMzsgIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBDVVJMX0RJU0FCTEVfUE9QMyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgIENVUkxfRElTQUJMRV9QT1AzPTEKKworICAgICAgIDs7CisgICopICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICA7OworICBlc2FjCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gc3VwcG9ydCBpbWFwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gc3VwcG9ydCBpbWFwLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaW1hcCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9pbWFwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfaW1hcDsgIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBDVVJMX0RJU0FCTEVfSU1BUCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgIENVUkxfRElTQUJMRV9JTUFQPTEKKworICAgICAgIDs7CisgICopICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICA7OworICBlc2FjCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gc3VwcG9ydCBzbXRwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gc3VwcG9ydCBzbXRwLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc210cCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zbXRwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc210cDsgIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBDVVJMX0RJU0FCTEVfU01UUCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgIENVUkxfRElTQUJMRV9TTVRQPTEKKworICAgICAgIDs7CisgICopICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICA7OworICBlc2FjCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHN1cHBvcnQgZ29waGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gc3VwcG9ydCBnb3BoZXIuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1nb3BoZXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ29waGVyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZ29waGVyOyAgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIENVUkxfRElTQUJMRV9HT1BIRVIgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICBDVVJMX0RJU0FCTEVfR09QSEVSPTEKKworICAgICAgIDs7CisgICopICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICA7OworICBlc2FjCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBwcm92aWRlIGJ1aWx0LWluIG1hbnVhbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIHByb3ZpZGUgYnVpbHQtaW4gbWFudWFsLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFudWFsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21hbnVhbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21hbnVhbDsgIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgIDs7CisgICopICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICBVU0VfTUFOVUFMPSIxIgorICAgICAgIDs7CisgIGVzYWMKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICBVU0VfTUFOVUFMPSIxIgorCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgZ2VuZXJhdGlvbiBvZiBDIGNvZGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgZ2VuZXJhdGlvbiBvZiBDIGNvZGUuLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJjdXJsX29wdGlvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJjdXJsX29wdGlvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYmN1cmxfb3B0aW9uOyAgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIENVUkxfRElTQUJMRV9MSUJDVVJMX09QVElPTiAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgIGN1cmxfbGliY3VybF9tc2c9Im5vIgorICAgICAgIDs7CisgICopICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICA7OworICBlc2FjCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBYL09wZW4gbmV0d29yayBsaWJyYXJ5IGlzIHJlcXVpcmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIFgvT3BlbiBuZXR3b3JrIGxpYnJhcnkgaXMgcmVxdWlyZWQuLi4gIiA+JjY7IH0KKyAgdHN0X2xpYl94bmV0X3JlcXVpcmVkPSJubyIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludCBtYWluICh2b2lkKQoreworI2lmIGRlZmluZWQoX19ocHV4KSAmJiBkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpICYmIChfWE9QRU5fU09VUkNFID49IDYwMCkKKyAgcmV0dXJuIDA7CisjZWxpZiBkZWZpbmVkKF9faHB1eCkgJiYgZGVmaW5lZChfWE9QRU5fU09VUkNFX0VYVEVOREVEKQorICByZXR1cm4gMDsKKyNlbHNlCisgIGZvcmNlIGNvbXBpbGF0aW9uIGVycm9yCisjZW5kaWYKK30KKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHRzdF9saWJfeG5ldF9yZXF1aXJlZD0ieWVzIgorICAgIExJQlM9IiRMSUJTIC1seG5ldCIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHRzdF9saWJfeG5ldF9yZXF1aXJlZCIgPiY1CiskYXNfZWNobyAiJHRzdF9saWJfeG5ldF9yZXF1aXJlZCIgPiY2OyB9CisKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0aG9zdGJ5bmFtZSIgImFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lIiA9IHgiInllczsgdGhlbiA6CisgIEhBVkVfR0VUSE9TVEJZTkFNRT0iMSIKKworZWxzZQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5zbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5zbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbG5zbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0aG9zdGJ5bmFtZSAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldGhvc3RieW5hbWUgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSIgPSB4IiJ5ZXM7IHRoZW4gOgorICBIQVZFX0dFVEhPU1RCWU5BTUU9IjEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlM9IiRMSUJTIC1sbnNsIgorCitmaQorCisKK2ZpCisKKworaWYgdGVzdCAiJEhBVkVfR0VUSE9TVEJZTkFNRSIgIT0gIjEiCit0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbHNvY2tldCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbHNvY2tldC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfc29ja2V0X2dldGhvc3RieW5hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHNvY2tldCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0aG9zdGJ5bmFtZSAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldGhvc3RieW5hbWUgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zb2NrZXRfZ2V0aG9zdGJ5bmFtZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3NvY2tldF9nZXRob3N0YnluYW1lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zb2NrZXRfZ2V0aG9zdGJ5bmFtZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zb2NrZXRfZ2V0aG9zdGJ5bmFtZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zb2NrZXRfZ2V0aG9zdGJ5bmFtZSIgPSB4IiJ5ZXM7IHRoZW4gOgorICBIQVZFX0dFVEhPU1RCWU5BTUU9IjEiCisgICAgICAgICAgICAgICBMSUJTPSIkTElCUyAtbHNvY2tldCIKKworZmkKKworZmkKKworaWYgdGVzdCAiJEhBVkVfR0VUSE9TVEJZTkFNRSIgIT0gIjEiCit0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgd2l0aCBib3RoIG5zbCBhbmQgc29ja2V0IGxpYnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgd2l0aCBib3RoIG5zbCBhbmQgc29ja2V0IGxpYnMuLi4gIiA+JjY7IH0KKyAgbXlfYWNfc2F2ZV9MSUJTPSRMSUJTCisgIExJQlM9Ii1sbnNsIC1sc29ja2V0ICRMSUJTIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgZ2V0aG9zdGJ5bmFtZSgpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgSEFWRV9HRVRIT1NUQllOQU1FPSIxIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBMSUJTPSRteV9hY19zYXZlX0xJQlMKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitpZiB0ZXN0ICIkSEFWRV9HRVRIT1NUQllOQU1FIiAhPSAiMSIKK3RoZW4KKyAgICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaCIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luc29ja19oIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAgICotKi1taW5ndzMyY2UqKQorICAgICAgICAgIHdpbnNvY2tfTElCPSItbHdpbnNvY2siCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICB3aW5zb2NrX0xJQj0iLWx3c29jazMyIgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID0gInllcyI7IHRoZW4KKyAgICAgIHdpbnNvY2tfTElCPSItbHdzMl8zMiIKKyAgICBmaQorICAgIGlmIHRlc3QgISAteiAiJHdpbnNvY2tfTElCIjsgdGhlbgorICAgICAgbXlfYWNfc2F2ZV9MSUJTPSRMSUJTCisgICAgICBMSUJTPSIkd2luc29ja19MSUIgJExJQlMiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluICR3aW5zb2NrX0xJQiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAkd2luc29ja19MSUIuLi4gIiA+JjY7IH0KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgZ2V0aG9zdGJ5bmFtZSgid3d3LmR1bW15c2l0ZS5jb20iKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgSEFWRV9HRVRIT1NUQllOQU1FPSIxIgorCitlbHNlCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIHdpbnNvY2tfTElCPSIiCisgICAgICAgIExJQlM9JG15X2FjX3NhdmVfTElCUworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICBmaQorZmkKKworaWYgdGVzdCAiJEhBVkVfR0VUSE9TVEJZTkFNRSIgIT0gIjEiCit0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBmb3IgTWluaXggMyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBmb3IgTWluaXggMy4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworLyogT2xkZXIgTWluaXggdmVyc2lvbnMgbWF5IG5lZWQgPG5ldC9nZW4vbmV0ZGIuaD4gaGVyZSBpbnN0ZWFkICovCisjaW5jbHVkZSA8bmV0ZGIuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGdldGhvc3RieW5hbWUoInd3dy5kdW1teXNpdGUuY29tIik7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBIQVZFX0dFVEhPU1RCWU5BTUU9IjEiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2lmIHRlc3QgIiRIQVZFX0dFVEhPU1RCWU5BTUUiICE9ICIxIgordGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgZm9yIGVDb3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgZm9yIGVDb3MuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBnZXRob3N0YnluYW1lKCJ3d3cuZHVtbXlzaXRlLmNvbSIpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgSEFWRV9HRVRIT1NUQllOQU1FPSIxIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitpZiB0ZXN0ICIkSEFWRV9HRVRIT1NUQllOQU1FIiAhPSAiMSIKK3RoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIC1sbmV0d29yayIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5ldHdvcmsuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX25ldHdvcmtfZ2V0aG9zdGJ5bmFtZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sbmV0d29yayAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0aG9zdGJ5bmFtZSAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldGhvc3RieW5hbWUgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9uZXR3b3JrX2dldGhvc3RieW5hbWU9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9uZXR3b3JrX2dldGhvc3RieW5hbWU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX25ldHdvcmtfZ2V0aG9zdGJ5bmFtZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9uZXR3b3JrX2dldGhvc3RieW5hbWUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfbmV0d29ya19nZXRob3N0YnluYW1lIiA9IHgiInllczsgdGhlbiA6CisgIEhBVkVfR0VUSE9TVEJZTkFNRT0iMSIKKyAgICAgICAgICAgICAgIExJQlM9IiRMSUJTIC1sbmV0d29yayIKKworZmkKKworZmkKKworaWYgdGVzdCAiJEhBVkVfR0VUSE9TVEJZTkFNRSIgIT0gIjEiCit0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5ldCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5ldC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfbmV0X2dldGhvc3RieW5hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbG5ldCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0aG9zdGJ5bmFtZSAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldGhvc3RieW5hbWUgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9uZXRfZ2V0aG9zdGJ5bmFtZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX25ldF9nZXRob3N0YnluYW1lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9uZXRfZ2V0aG9zdGJ5bmFtZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9uZXRfZ2V0aG9zdGJ5bmFtZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9uZXRfZ2V0aG9zdGJ5bmFtZSIgPSB4IiJ5ZXM7IHRoZW4gOgorICBIQVZFX0dFVEhPU1RCWU5BTUU9IjEiCisgICAgICAgICAgICAgICBMSUJTPSIkTElCUyAtbG5ldCIKKworZmkKKworZmkKKworCitpZiB0ZXN0ICIkSEFWRV9HRVRIT1NUQllOQU1FIiAhPSAiMSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvdWxkbid0IGZpbmQgbGlicmFyaWVzIGZvciBnZXRob3N0YnluYW1lKCkiICIkTElORU5PIiA1CitmaQorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJjYXNlY21wIiAiYWNfY3ZfZnVuY19zdHJjYXNlY21wIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cmNhc2VjbXAiID0geCIieWVzOyB0aGVuIDoKKworZWxzZQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RyY2FzZWNtcCBpbiAtbHJlc29sdmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0cmNhc2VjbXAgaW4gLWxyZXNvbHZlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9yZXNvbHZlX3N0cmNhc2VjbXArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHJlc29sdmUgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cmNhc2VjbXAgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzdHJjYXNlY21wICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wPXllcworZWxzZQorICBhY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yZXNvbHZlX3N0cmNhc2VjbXAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3Jlc29sdmVfc3RyY2FzZWNtcCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCUkVTT0xWRSAxCitfQUNFT0YKKworICBMSUJTPSItbHJlc29sdmUgJExJQlMiCisKK2ZpCisKK2ZpCisKKworaWYgdGVzdCAiJGFjX2N2X2xpYl9yZXNvbHZlX3N0cmNhc2VjbXAiID0gIiRhY19jdl9mdW5jX3N0cmNhc2VjbXAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0cmNhc2VjbXAgaW4gLWxyZXNvbHZlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHJjYXNlY21wIGluIC1scmVzb2x2ZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxyZXNvbHZlIC1sbnNsICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cmNhc2VjbXAgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzdHJjYXNlY21wICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wPXllcworZWxzZQorICBhY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yZXNvbHZlX3N0cmNhc2VjbXAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcmVzb2x2ZV9zdHJjYXNlY21wIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3Jlc29sdmVfc3RyY2FzZWNtcCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBMSUJTPSItbHJlc29sdmUgJExJQlMiCitmaQorCitmaQorYWNfY3ZfZnVuY19zdHJjYXNlY21wPSJubyIKKworCitjdXJsX2luY2x1ZGVzX3dpbnNvY2syPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjICBpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGlmZGVmIEhBVkVfV0lOU09DSzJfSAorIyAgICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyAgZWxzZQorIyAgICBpZmRlZiBIQVZFX1dJTlNPQ0tfSAorIyAgICAgIGluY2x1ZGUgPHdpbnNvY2suaD4KKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3aW5kb3dzLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdpbmRvd3MuaC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfd2luZG93c19oK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NFR0NDX18pCisgICAgICAgIEhBVkVfV0lORE9XU19IIHNoYWxsIG5vdCBiZSBkZWZpbmVkLgorI2Vsc2UKKyAgICAgICAgaW50IGR1bW15PTIqV0lOVkVSOworI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBhY19jdl9oZWFkZXJfd2luZG93c19oPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl93aW5kb3dzX2giID4mNjsgfQorICBjYXNlICIkYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaCIgaW4KKyAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9XSU5ET1dTX0ggMQorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOIDEKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdpbnNvY2suaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2luc29jay5oLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl93aW5zb2NrX2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jay5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NFR0NDX18pCisgICAgICAgIEhBVkVfV0lOU09DS19IIHNoYWxsIG5vdCBiZSBkZWZpbmVkLgorI2Vsc2UKKyAgICAgICAgaW50IGR1bW15PVdTQUNsZWFudXAoKTsKKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5zb2NrX2g9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl93aW5zb2NrX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfd2luc29ja19oIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl93aW5zb2NrX2giIGluCisgICAgeWVzKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV0lOU09DS19IIDEKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdpbnNvY2syLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdpbnNvY2syLmguLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3dpbnNvY2syX2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DRUdDQ19fKSB8fCBkZWZpbmVkKF9fTUlOR1czMkNFX18pCisgICAgICAgIEhBVkVfV0lOU09DSzJfSCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyNlbHNlCisgICAgICAgIGludCBkdW1teT0yKklQUFJPVE9fRVNQOworI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBhY19jdl9oZWFkZXJfd2luc29jazJfaD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiBpbgorICAgIHllcykKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1dJTlNPQ0syX0ggMQorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjb25uZWN0IGluIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY29ubmVjdCBpbiBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgdHN0X2Nvbm5lY3Rfc2F2ZV9MSUJTPSIkTElCUyIKKyAgdHN0X2Nvbm5lY3RfbmVlZF9MSUJTPSJ1bmtub3duIgorICBmb3IgdHN0X2xpYiBpbiAnJyAnLWxzb2NrZXQnIDsgZG8KKyAgICBpZiB0ZXN0ICIkdHN0X2Nvbm5lY3RfbmVlZF9MSUJTIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgTElCUz0iJHRzdF9saWIgJHRzdF9jb25uZWN0X3NhdmVfTElCUyIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgICAjaWZuZGVmIEhBVkVfV0lORE9XU19ICisgICAgICAgICAgICBpbnQgY29ubmVjdChpbnQsIHZvaWQqLCBpbnQpOworICAgICAgICAgICNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgIGlmKDAgIT0gY29ubmVjdCgwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB0c3RfY29ubmVjdF9uZWVkX0xJQlM9IiR0c3RfbGliIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICBkb25lCisgIExJQlM9IiR0c3RfY29ubmVjdF9zYXZlX0xJQlMiCisgICMKKyAgY2FzZSBYLSIkdHN0X2Nvbm5lY3RfbmVlZF9MSUJTIiBpbgorICAgIFgtdW5rbm93bikKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBjYW5ub3QgZmluZCBjb25uZWN0IiA+JjUKKyRhc19lY2hvICJjYW5ub3QgZmluZCBjb25uZWN0IiA+JjY7IH0KKyAgICAgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZmluZCBjb25uZWN0IGZ1bmN0aW9uIGluIGxpYnJhcmllcy4iICIkTElORU5PIiA1CisgICAgICA7OworICAgIFgtKQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIDs7CisgICAgKikKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkdHN0X2Nvbm5lY3RfbmVlZF9MSUJTIiA+JjUKKyRhc19lY2hvICIkdHN0X2Nvbm5lY3RfbmVlZF9MSUJTIiA+JjY7IH0KKyAgICAgIExJQlM9IiR0c3RfY29ubmVjdF9uZWVkX0xJQlMgJHRzdF9jb25uZWN0X3NhdmVfTElCUyIKKyAgICAgIDs7CisgIGVzYWMKKworCitDVVJMX05FVFdPUktfTElCUz0kTElCUworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl90aW1lK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKK2lmICgoc3RydWN0IHRtICopIDApCityZXR1cm4gMDsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3RpbWU9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl90aW1lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfdGltZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl90aW1lIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisgICAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvdGltZS5oIHRpbWUuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2V2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgorICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1vbm90b25pYyBjbG9ja19nZXR0aW1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBtb25vdG9uaWMgY2xvY2tfZ2V0dGltZS4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfVElNRV9ICisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICAgICh2b2lkKWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19jbG9ja19nZXR0aW1lPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworCisgICAgIworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19jbG9ja19nZXR0aW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgIworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNsb2NrX2dldHRpbWUgaW4gbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBjbG9ja19nZXR0aW1lIGluIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAgICMKKyAgICBjdXJsX2N2X3NhdmVfTElCUz0iJExJQlMiCisgICAgY3VybF9jdl9nY2xrX0xJQlM9InVua25vd24iCisgICAgIworICAgIGZvciB4X3hsaWJzIGluICcnICctbHJ0JyAnLWxwb3NpeDQnIDsgZG8KKyAgICAgIGlmIHRlc3QgIiRjdXJsX2N2X2djbGtfTElCUyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAteiAiJHhfeGxpYnMiOyB0aGVuCisgICAgICAgICAgTElCUz0iJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICAgICBlbHNlCisgICAgICAgICAgTElCUz0iJHhfeGxpYnMgJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICAgICBmaQorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfVElNRV9ICisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICAgICAgICAgICh2b2lkKWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICAgIGN1cmxfY3ZfZ2Nsa19MSUJTPSIkeF94bGlicyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBmaQorICAgIGRvbmUKKyAgICAjCisgICAgTElCUz0iJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICMKKyAgICBjYXNlIFgtIiRjdXJsX2N2X2djbGtfTElCUyIgaW4KKyAgICAgIFgtdW5rbm93bikKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGNhbm5vdCBmaW5kIGNsb2NrX2dldHRpbWUiID4mNQorJGFzX2VjaG8gImNhbm5vdCBmaW5kIGNsb2NrX2dldHRpbWUiID4mNjsgfQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IEhBVkVfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMgd2lsbCBub3QgYmUgZGVmaW5lZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDIHdpbGwgbm90IGJlIGRlZmluZWQiID4mMjt9CisgICAgICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ibm8iCisgICAgICAgIDs7CisgICAgICBYLSkKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIGFkZGl0aW9uYWwgbGliIHJlcXVpcmVkIiA+JjUKKyRhc19lY2hvICJubyBhZGRpdGlvbmFsIGxpYiByZXF1aXJlZCIgPiY2OyB9CisgICAgICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ieWVzIgorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgaWYgdGVzdCAteiAiJGN1cmxfY3Zfc2F2ZV9MSUJTIjsgdGhlbgorICAgICAgICAgIExJQlM9IiRjdXJsX2N2X2djbGtfTElCUyIKKyAgICAgICAgZWxzZQorICAgICAgICAgIExJQlM9IiRjdXJsX2N2X2djbGtfTElCUyAkY3VybF9jdl9zYXZlX0xJQlMiCisgICAgICAgIGZpCisgICAgICAgIENVUkxfTElCUz0iJENVUkxfTElCUyAkY3VybF9jdl9nY2xrX0xJQlMiCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3VybF9jdl9nY2xrX0xJQlMiID4mNQorJGFzX2VjaG8gIiRjdXJsX2N2X2djbGtfTElCUyIgPiY2OyB9CisgICAgICAgIGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZT0ieWVzIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICAjCisgICAgICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICAgIHRlc3QgIiRhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWUiID0gInllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbW9ub3RvbmljIGNsb2NrX2dldHRpbWUgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbW9ub3RvbmljIGNsb2NrX2dldHRpbWUgd29ya3MuLi4gIiA+JjY7IH0KKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2lmZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1RJTUVfSAorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOworICAgICAgICAgIGlmICgwID09IGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpKQorICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0KDEpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDIHdpbGwgbm90IGJlIGRlZmluZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogSEFWRV9DTE9DS19HRVRUSU1FX01PTk9UT05JQyB3aWxsIG5vdCBiZSBkZWZpbmVkIiA+JjI7fQorICAgICAgICBhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWU9Im5vIgorICAgICAgICBMSUJTPSIkY3VybF9jdl9zYXZlX0xJQlMiCisKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgZmkKKyAgICAjCisgICAgY2FzZSAiJGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZSIgaW4KKyAgICAgIHllcykKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDIDEKK19BQ0VPRgorCisgICAgICAgIDs7CisgICAgZXNhYworICAgICMKKyAgZmkKKyAgIworCisKK1RFU1RfU0VSVkVSX0xJQlM9JExJQlMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBsaWJnY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byB1c2UgbGliZ2NjLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGliZ2NjIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYmdjYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYmdjYzsgIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIHllcykKKyAgICAgICAgQUxMX0xJQlM9IiRBTExfTElCUyAtbGdjYyIKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgIDs7CisgICopICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgOzsKKyAgZXNhYworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworZmkKKworCisKK0xEQVBMSUJOQU1FPSIiCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGRhcC1saWIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xkYXBfbGliK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9sZGFwX2xpYjsgTERBUExJQk5BTUU9IiR3aXRodmFsIgorZmkKKworCitMQkVSTElCTkFNRT0iIgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxiZXItbGliIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9sYmVyX2xpYitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGJlcl9saWI7IExCRVJMSUJOQU1FPSIkd2l0aHZhbCIKK2ZpCisKKworaWYgdGVzdCB4JENVUkxfRElTQUJMRV9MREFQICE9IHgxIDsgdGhlbgorCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsYmVyLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxiZXIuaC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfbGJlcl9oK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2VuZGlmCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAodm9pZCAqKTAKKyNlbmRpZgorI2luY2x1ZGUgPGxiZXIuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgQmVyVmFsdWUgKmJ2cCA9IE5VTEw7CisgICAgICAgIEJlckVsZW1lbnQgKmJlcCA9IGJlcl9pbml0KGJ2cCk7CisgICAgICAgIGJlcl9mcmVlKGJlcCwgMSk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBhY19jdl9oZWFkZXJfbGJlcl9oPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfaGVhZGVyX2xiZXJfaD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX2xiZXJfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9sYmVyX2giID4mNjsgfQorICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX2xiZXJfaCIgPSAieWVzIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTEJFUl9IIDEKK19BQ0VPRgorCisgICAgIworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2VuZGlmCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAodm9pZCAqKTAKKyNlbmRpZgorI2lmbmRlZiBMREFQX0RFUFJFQ0FURUQKKyNkZWZpbmUgTERBUF9ERVBSRUNBVEVEIDEKKyNlbmRpZgorI2luY2x1ZGUgPGxkYXAuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgQmVyVmFsdWUgKmJ2cCA9IE5VTEw7CisgICAgICAgIEJlckVsZW1lbnQgKmJlcCA9IGJlcl9pbml0KGJ2cCk7CisgICAgICAgIGJlcl9mcmVlKGJlcCwgMSk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX2xiZXJfaD0ibm8iCisKK2Vsc2UKKworICAgICAgY3VybF9jdl9uZWVkX2hlYWRlcl9sYmVyX2g9InllcyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICMKKyAgICBjYXNlICIkY3VybF9jdl9uZWVkX2hlYWRlcl9sYmVyX2giIGluCisgICAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVFRF9MQkVSX0ggMQorX0FDRU9GCisKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkYXAuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGRhcC5oLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9sZGFwX2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgTERBUF9ERVBSRUNBVEVECisjZGVmaW5lIExEQVBfREVQUkVDQVRFRCAxCisjZW5kaWYKKyNpZmRlZiBORUVEX0xCRVJfSAorI2luY2x1ZGUgPGxiZXIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxkYXAuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgTERBUCAqbGRwID0gbGRhcF9pbml0KCJkdW1teSIsIExEQVBfUE9SVCk7CisgICAgICAgIGludCByZXMgPSBsZGFwX3VuYmluZChsZHApOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX2xkYXBfaD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X2hlYWRlcl9sZGFwX2g9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9sZGFwX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfbGRhcF9oIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl9sZGFwX2giIGluCisgICAgeWVzKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTERBUF9IIDEKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkYXBzc2wuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGRhcHNzbC5oLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9sZGFwc3NsX2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgTlVMTAorI2RlZmluZSBOVUxMICh2b2lkICopMAorI2VuZGlmCisjaWZuZGVmIExEQVBfREVQUkVDQVRFRAorI2RlZmluZSBMREFQX0RFUFJFQ0FURUQgMQorI2VuZGlmCisjaWZkZWYgTkVFRF9MQkVSX0gKKyNpbmNsdWRlIDxsYmVyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0xEQVBfSAorI2luY2x1ZGUgPGxkYXAuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxkYXBzc2wuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgY2hhciAqY2VydF9sYWJlbCA9IE5VTEw7CisgICAgICAgIExEQVAgKmxkcCA9IGxkYXBfc3NsX2luaXQoImR1bW15IiwgTERBUFNfUE9SVCwgY2VydF9sYWJlbCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBhY19jdl9oZWFkZXJfbGRhcHNzbF9oPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfaGVhZGVyX2xkYXBzc2xfaD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX2xkYXBzc2xfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9sZGFwc3NsX2giID4mNjsgfQorICBjYXNlICIkYWNfY3ZfaGVhZGVyX2xkYXBzc2xfaCIgaW4KKyAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MREFQU1NMX0ggMQorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGRhcF9zc2wuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGRhcF9zc2wuaC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfbGRhcF9zc2xfaCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBMREFQX0RFUFJFQ0FURUQKKyNkZWZpbmUgTERBUF9ERVBSRUNBVEVEIDEKKyNlbmRpZgorI2lmZGVmIE5FRURfTEJFUl9ICisjaW5jbHVkZSA8bGJlci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9MREFQX0gKKyNpbmNsdWRlIDxsZGFwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsZGFwX3NzbC5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBMREFQICpsZHAgPSBsZGFwc3NsX2luaXQoImR1bW15IiwgTERBUFNfUE9SVCwgMSk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBhY19jdl9oZWFkZXJfbGRhcF9zc2xfaD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X2hlYWRlcl9sZGFwX3NzbF9oPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfbGRhcF9zc2xfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9sZGFwX3NzbF9oIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X2hlYWRlcl9sZGFwX3NzbF9oIiBpbgorICAgIHllcykKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xEQVBfU1NMX0ggMQorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworCisgIGlmIHRlc3QgLXogIiRMREFQTElCTkFNRSIgOyB0aGVuCisgICAgaWYgdGVzdCAiJGFjX2N2X25hdGl2ZV93aW5kb3dzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICBMREFQTElCTkFNRT0id2xkYXAzMiIKKyAgICAgIExCRVJMSUJOQU1FPSJubyIKKyAgICBmaQorICBmaQorCisgIGlmIHRlc3QgIiRMREFQTElCTkFNRSIgOyB0aGVuCisgICAgYXNfYWNfTGliPWAkYXNfZWNobyAiYWNfY3ZfbGliXyIkTERBUExJQk5BTUUiJydfbGRhcF9pbml0IiB8ICRhc190cl9zaGAKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkYXBfaW5pdCBpbiAtbFwiJExEQVBMSUJOQU1FXCIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkYXBfaW5pdCBpbiAtbFwiJExEQVBMSUJOQU1FXCIuLi4gIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY19MaWI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbCIkTERBUExJQk5BTUUiICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBsZGFwX2luaXQgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBsZGFwX2luaXQgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19hY19MaWI9eWVzIgorZWxzZQorICBldmFsICIkYXNfYWNfTGliPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQorZXZhbCBhY19yZXM9XCQkYXNfYWNfTGliCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2V2YWwgYXNfdmFsPVwkJGFzX2FjX0xpYgorICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfTElCIiRMREFQTElCTkFNRSIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKKyAgTElCUz0iLWwiJExEQVBMSUJOQU1FIiAkTElCUyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFwiJExEQVBMSUJOQU1FXCIgaXMgbm90IGFuIExEQVAgbGlicmFyeTogTERBUCBkaXNhYmxlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcIiRMREFQTElCTkFNRVwiIGlzIG5vdCBhbiBMREFQIGxpYnJhcnk6IExEQVAgZGlzYWJsZWQiID4mMjt9CisKKyRhc19lY2hvICIjZGVmaW5lIENVUkxfRElTQUJMRV9MREFQIDEiID4+Y29uZmRlZnMuaAorCisgICAgICBDVVJMX0RJU0FCTEVfTERBUD0xCisKK2ZpCisKKworJGFzX2VjaG8gIiNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVBTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICBDVVJMX0RJU0FCTEVfTERBUFM9MQorCisgIGVsc2UKKworICAgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgTERBUCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIExEQVAgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgICMKKyAgdV9saWJzPSIiCisgICMKKworICAjCisgIGN1cmxfY3Zfc2F2ZV9MSUJTPSIkTElCUyIKKyAgY3VybF9jdl9sZGFwX0xJQlM9InVua25vd24iCisgICMKKyAgZm9yIHhfbmxpYnMgaW4gJycgIiR1X2xpYnMiIFwKKyAgICAnLWxsZGFwJyBcCisgICAgJy1sbGJlciAtbGxkYXAnIFwKKyAgICAnLWxsZGFwIC1sbGJlcicgXAorICAgICctbGxkYXBzc2wgLWxsZGFweCAtbGxkYXBzZGsnIFwKKyAgICAnLWxsZGFwc2RrIC1sbGRhcHggLWxsZGFwc3NsJyA7IGRvCisgICAgaWYgdGVzdCAiJGN1cmxfY3ZfbGRhcF9MSUJTIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJHhfbmxpYnMiOyB0aGVuCisgICAgICAgIExJQlM9IiRjdXJsX2N2X3NhdmVfTElCUyIKKyAgICAgIGVsc2UKKyAgICAgICAgTElCUz0iJHhfbmxpYnMgJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICAgZmkKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2VuZGlmCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAodm9pZCAqKTAKKyNlbmRpZgorI2lmbmRlZiBMREFQX0RFUFJFQ0FURUQKKyNkZWZpbmUgTERBUF9ERVBSRUNBVEVEIDEKKyNlbmRpZgorI2lmZGVmIE5FRURfTEJFUl9ICisjaW5jbHVkZSA8bGJlci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9MREFQX0gKKyNpbmNsdWRlIDxsZGFwLmg+CisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBCZXJWYWx1ZSAqYnZwID0gTlVMTDsKKyAgICAgICAgICBCZXJFbGVtZW50ICpiZXAgPSBiZXJfaW5pdChidnApOworICAgICAgICAgIExEQVAgKmxkcCA9IGxkYXBfaW5pdCgiZHVtbXkiLCBMREFQX1BPUlQpOworICAgICAgICAgIGludCByZXMgPSBsZGFwX3VuYmluZChsZHApOworICAgICAgICAgIGJlcl9mcmVlKGJlcCwgMSk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgIGN1cmxfY3ZfbGRhcF9MSUJTPSIkeF9ubGlicyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgZG9uZQorICAjCisgIExJQlM9IiRjdXJsX2N2X3NhdmVfTElCUyIKKyAgIworICBjYXNlIFgtIiRjdXJsX2N2X2xkYXBfTElCUyIgaW4KKyAgICBYLXVua25vd24pCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogY2Fubm90IGZpbmQgTERBUCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG8gImNhbm5vdCBmaW5kIExEQVAgbGlicmFyaWVzIiA+JjY7IH0KKyAgICAgIDs7CisgICAgWC0pCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8gYWRkaXRpb25hbCBsaWIgcmVxdWlyZWQiID4mNQorJGFzX2VjaG8gIm5vIGFkZGl0aW9uYWwgbGliIHJlcXVpcmVkIiA+JjY7IH0KKyAgICAgIDs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgLXogIiRjdXJsX2N2X3NhdmVfTElCUyI7IHRoZW4KKyAgICAgICAgTElCUz0iJGN1cmxfY3ZfbGRhcF9MSUJTIgorICAgICAgZWxzZQorICAgICAgICBMSUJTPSIkY3VybF9jdl9sZGFwX0xJQlMgJGN1cmxfY3Zfc2F2ZV9MSUJTIgorICAgICAgZmkKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3VybF9jdl9sZGFwX0xJQlMiID4mNQorJGFzX2VjaG8gIiRjdXJsX2N2X2xkYXBfTElCUyIgPiY2OyB9CisgICAgICA7OworICBlc2FjCisgICMKKworICAgIGNhc2UgWC0iJGN1cmxfY3ZfbGRhcF9MSUJTIiBpbgorICAgICAgWC11bmtub3duKQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IENhbm5vdCBmaW5kIGxpYnJhcmllcyBmb3IgTERBUCBzdXBwb3J0OiBMREFQIGRpc2FibGVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IENhbm5vdCBmaW5kIGxpYnJhcmllcyBmb3IgTERBUCBzdXBwb3J0OiBMREFQIGRpc2FibGVkIiA+JjI7fQorCiskYXNfZWNobyAiI2RlZmluZSBDVVJMX0RJU0FCTEVfTERBUCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICBDVVJMX0RJU0FCTEVfTERBUD0xCisKKworJGFzX2VjaG8gIiNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVBTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgIENVUkxfRElTQUJMRV9MREFQUz0xCisKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitmaQorCitpZiB0ZXN0IHgkQ1VSTF9ESVNBQkxFX0xEQVAgIT0geDEgOyB0aGVuCisKKyAgaWYgdGVzdCAiJExCRVJMSUJOQU1FIiA7IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgIiRMQkVSTElCTkFNRSIgIT0gIm5vIiA7IHRoZW4KKyAgICAgIGFzX2FjX0xpYj1gJGFzX2VjaG8gImFjX2N2X2xpYl8iJExCRVJMSUJOQU1FIicnX2Jlcl9mcmVlIiB8ICRhc190cl9zaGAKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGJlcl9mcmVlIGluIC1sXCIkTEJFUkxJQk5BTUVcIiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYmVyX2ZyZWUgaW4gLWxcIiRMQkVSTElCTkFNRVwiLi4uICIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfTGliOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWwiJExCRVJMSUJOQU1FIiAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgYmVyX2ZyZWUgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBiZXJfZnJlZSAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGFzX2FjX0xpYj15ZXMiCitlbHNlCisgIGV2YWwgIiRhc19hY19MaWI9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitldmFsIGFjX3Jlcz1cJCRhc19hY19MaWIKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorZXZhbCBhc192YWw9XCQkYXNfYWNfTGliCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9MSUIiJExCRVJMSUJOQU1FIiIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworICBMSUJTPSItbCIkTEJFUkxJQk5BTUUiICRMSUJTIgorCitlbHNlCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcIiRMQkVSTElCTkFNRVwiIGlzIG5vdCBhbiBMQkVSIGxpYnJhcnk6IExEQVAgZGlzYWJsZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXCIkTEJFUkxJQk5BTUVcIiBpcyBub3QgYW4gTEJFUiBsaWJyYXJ5OiBMREFQIGRpc2FibGVkIiA+JjI7fQorCiskYXNfZWNobyAiI2RlZmluZSBDVVJMX0RJU0FCTEVfTERBUCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICBDVVJMX0RJU0FCTEVfTERBUD0xCisKK2ZpCisKKworJGFzX2VjaG8gIiNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVBTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgIENVUkxfRElTQUJMRV9MREFQUz0xCisKKyAgICBmaQorICBmaQorZmkKKworaWYgdGVzdCB4JENVUkxfRElTQUJMRV9MREFQICE9IHgxIDsgdGhlbgorICBmb3IgYWNfZnVuYyBpbiBsZGFwX3VybF9wYXJzZSBsZGFwX2luaXRfZmQKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitldmFsIGFzX3ZhbD1cJCRhc19hY192YXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKyAgaWYgdGVzdCAiJExEQVBMSUJOQU1FIiA9ICJ3bGRhcDMyIjsgdGhlbgorICAgIGN1cmxfbGRhcF9tc2c9ImVuYWJsZWQgKHdpbmxkYXApIgorCiskYXNfZWNobyAiI2RlZmluZSBDVVJMX0xEQVBfV0lOIDEiID4+Y29uZmRlZnMuaAorCisgIGVsc2UKKyAgICBjdXJsX2xkYXBfbXNnPSJlbmFibGVkIChPcGVuTERBUCkiCisgICAgaWYgdGVzdCAieCRhY19jdl9mdW5jX2xkYXBfaW5pdF9mZCIgPSAieHllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX09QRU5MREFQIDEiID4+Y29uZmRlZnMuaAorCisgICAgICBVU0VfT1BFTkxEQVA9MQorCisgICAgZmkKKyAgZmkKK2ZpCisKK2lmIHRlc3QgeCRDVVJMX0RJU0FCTEVfTERBUFMgIT0geDEgOyB0aGVuCisgICAgY3VybF9sZGFwc19tc2c9ImVuYWJsZWQiCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgaXB2NiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBpcHY2Li4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaXB2NiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9pcHY2K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfaXB2NjsgIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgIGlwdjY9bm8KKyAgICAgICA7OworICAqKSAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgaXB2Nj15ZXMKKyAgICAgICA7OworICBlc2FjCitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIGlwdjY9bm8KKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisgLyogaXMgQUZfSU5FVDYgYXZhaWxhYmxlPyAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KK21haW4oKQoreworIGlmIChzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKSA8IDApCisgICBleGl0KDEpOworIGVsc2UKKyAgIGV4aXQoMCk7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIGlwdjY9eWVzCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBpcHY2PW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKKworCitpZiB0ZXN0ICIkaXB2NiIgPSAieWVzIjsgdGhlbgorICBjdXJsX2lwdjZfbXNnPSJlbmFibGVkIgorZmkKKworIyBDaGVjayBpZiBzdHJ1Y3Qgc29ja2FkZHJfaW42IGhhdmUgc2luNl9zY29wZV9pZCBtZW1iZXIKK2lmIHRlc3QgIiRpcHY2IiA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cnVjdCBzb2NrYWRkcl9pbjYgaGFzIHNpbjZfc2NvcGVfaWQgbWVtYmVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cnVjdCBzb2NrYWRkcl9pbjYgaGFzIHNpbjZfc2NvcGVfaWQgbWVtYmVyLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KK2ludCBtYWluICh2b2lkKQoreworc3RydWN0IHNvY2thZGRyX2luNiBzOyBzLnNpbjZfc2NvcGVfaWQgPSAwOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBoYXZlX3NpbjZfc2NvcGVfaWQ9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiRoYXZlX3NpbjZfc2NvcGVfaWQiID0geWVzOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxIiA+PmNvbmZkZWZzLmgKKworICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIGZpCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgYXJndiBjYW4gYmUgd3JpdHRlbiB0byIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBhcmd2IGNhbiBiZSB3cml0dGVuIHRvLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgY3VybF9jdl93cml0YWJsZV9hcmd2PWNyb3NzCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpIHsKKyAgICBhcmd2WzBdWzBdID0gJyAnOworICAgIHJldHVybiAoYXJndlswXVswXSA9PSAnICcpPzA6MTsKK30KKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCisgIGN1cmxfY3Zfd3JpdGFibGVfYXJndj15ZXMKKworZWxzZQorCisgIGN1cmxfY3Zfd3JpdGFibGVfYXJndj1ubworCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworY2FzZSAkY3VybF9jdl93cml0YWJsZV9hcmd2IGluCit5ZXMpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfV1JJVEFCTEVfQVJHViAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICA7Oworbm8pCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICA7OworKikKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdGhlIHByZXZpb3VzIGNoZWNrIGNvdWxkIG5vdCBiZSBtYWRlIGRlZmF1bHQgd2FzIHVzZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdGhlIHByZXZpb3VzIGNoZWNrIGNvdWxkIG5vdCBiZSBtYWRlIGRlZmF1bHQgd2FzIHVzZWQiID4mMjt9CisgICAgICAgIDs7Citlc2FjCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWtyYjQtaW5jbHVkZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2tyYjRfaW5jbHVkZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2tyYjRfaW5jbHVkZXM7CisgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSR3aXRodmFsIgorIEtSQjRJTkM9IiR3aXRodmFsIgorIHdhbnRfa3JiND15ZXMKKworZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgta3JiNC1saWJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9rcmI0X2xpYnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2tyYjRfbGliczsKKyBMREZMQUdTPSIkTERGTEFHUyAtTCR3aXRodmFsIgorIEtSQjRMSUI9IiR3aXRodmFsIgorIHdhbnRfa3JiND15ZXMKKworZmkKKworCisKK09QVF9LUkI0PW9mZgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWtyYjQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2tyYjQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2tyYjQ7CisgIE9QVF9LUkI0PSIkd2l0aHZhbCIKKyAgaWYgdGVzdCBYIiRPUFRfS1JCNCIgIT0gWG5vOyB0aGVuCisgICAgd2FudF9rcmI0PSJ5ZXMiCisgICAgaWYgdGVzdCBYIiRPUFRfS1JCNCIgIT0gWHllczsgdGhlbgorICAgICAgTERGTEFHUz0iJExERkxBR1MgLUwkT1BUX0tSQjQvbGliJGxpYnN1ZmYiCisgICAgICBLUkI0TElCPSIkT1BUX0tSQjQvbGliJGxpYnN1ZmYiCisgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJE9QVF9LUkI0L2luY2x1ZGUiCisgICAgICBLUkI0SU5DPSIkT1BUX0tSQjQvaW5jbHVkZSIKKyAgICBmaQorICBmaQorCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgS2VyYmVyb3M0IHN1cHBvcnQgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIEtlcmJlcm9zNCBzdXBwb3J0IGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQorCitpZiB0ZXN0ICIkd2FudF9rcmI0IiA9IHllcwordGhlbgorICBpZiB0ZXN0ICIkaXB2NiIgPSAieWVzIjsgdGhlbgorICAgIGVjaG8ga3JiNCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIElQdjYKKyAgICBleGl0IDEKKyAgZmkKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hlcmUgdG8gbG9vayBmb3IgS2VyYmVyb3M0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXJlIHRvIGxvb2sgZm9yIEtlcmJlcm9zNC4uLiAiID4mNjsgfQorICBpZiB0ZXN0IFgiJE9QVF9LUkI0IiA9IFh5ZXMKKyAgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBkZWZhdWx0cyIgPiY1CiskYXNfZWNobyAiZGVmYXVsdHMiID4mNjsgfQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGxpYnMgaW4gJEtSQjRMSUIsIGhlYWRlcnMgaW4gJEtSQjRJTkMiID4mNQorJGFzX2VjaG8gImxpYnMgaW4gJEtSQjRMSUIsIGhlYWRlcnMgaW4gJEtSQjRJTkMiID4mNjsgfQorICBmaQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGVzX3BjYmNfZW5jcnlwdCBpbiAtbGRlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGVzX3BjYmNfZW5jcnlwdCBpbiAtbGRlcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGVzX2Rlc19wY2JjX2VuY3J5cHQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRlcyAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGVzX3BjYmNfZW5jcnlwdCAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGRlc19wY2JjX2VuY3J5cHQgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kZXNfZGVzX3BjYmNfZW5jcnlwdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2Rlc19kZXNfcGNiY19lbmNyeXB0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kZXNfZGVzX3BjYmNfZW5jcnlwdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kZXNfZGVzX3BjYmNfZW5jcnlwdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kZXNfZGVzX3BjYmNfZW5jcnlwdCIgPSB4IiJ5ZXM7IHRoZW4gOgorCisgICAgZm9yIGFjX2hlYWRlciBpbiBkZXMuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZGVzLmgiICJhY19jdl9oZWFkZXJfZGVzX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2Rlc19oIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERVNfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyAgICAgICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicmVzX3NlYXJjaCIgImFjX2N2X2Z1bmNfcmVzX3NlYXJjaCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19yZXNfc2VhcmNoIiA9IHgiInllczsgdGhlbiA6CisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcmVzX3NlYXJjaCBpbiAtbHJlc29sdiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcmVzX3NlYXJjaCBpbiAtbHJlc29sdi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfcmVzb2x2X3Jlc19zZWFyY2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHJlc29sdiAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcmVzX3NlYXJjaCAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHJlc19zZWFyY2ggKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9yZXNvbHZfcmVzX3NlYXJjaD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3Jlc29sdl9yZXNfc2VhcmNoPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yZXNvbHZfcmVzX3NlYXJjaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9yZXNvbHZfcmVzX3NlYXJjaCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZXNvbHZfcmVzX3NlYXJjaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCUkVTT0xWIDEKK19BQ0VPRgorCisgIExJQlM9Ii1scmVzb2x2ICRMSUJTIgorCitmaQorCitmaQorCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Iga3JiX25ldF9yZWFkIGluIC1sa3JiIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBrcmJfbmV0X3JlYWQgaW4gLWxrcmIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2tyYl9rcmJfbmV0X3JlYWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGtyYiAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIga3JiX25ldF9yZWFkICgpOworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4ga3JiX25ldF9yZWFkICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfa3JiX2tyYl9uZXRfcmVhZD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2tyYl9rcmJfbmV0X3JlYWQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2tyYl9rcmJfbmV0X3JlYWQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfa3JiX2tyYl9uZXRfcmVhZCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9rcmJfa3JiX25ldF9yZWFkIiA9IHgiInllczsgdGhlbiA6CisKKyAgICAgICAgICAgIGZvciBhY19oZWFkZXIgaW4ga3JiLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImtyYi5oIiAiYWNfY3ZfaGVhZGVyX2tyYl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9rcmJfaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfS1JCX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisgICAgICAgICAgICBMSUJTPSItbGtyYiAtbGNvbV9lcnIgLWxkZXMgJExJQlMiCisKKyAgICAgICAgICAgICAgICAgIGZvciBhY19mdW5jIGluIGtyYl9nZXRfb3VyX2lwX2Zvcl9yZWFsbQorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJrcmJfZ2V0X291cl9pcF9mb3JfcmVhbG0iICJhY19jdl9mdW5jX2tyYl9nZXRfb3VyX2lwX2Zvcl9yZWFsbSIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19rcmJfZ2V0X291cl9pcF9mb3JfcmVhbG0iID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0tSQl9HRVRfT1VSX0lQX0ZPUl9SRUFMTSAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfS1JCNCAxIiA+PmNvbmZkZWZzLmgKKworCisgICAgICAgICAgICBLUkI0X0VOQUJMRUQ9MQorCisKKyAgICAgIGN1cmxfa3JiNF9tc2c9ImVuYWJsZWQiCisKKyAgICAgICAgICAgIGZvciBhY19mdW5jIGluIHN0cmxjcHkKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RybGNweSIgImFjX2N2X2Z1bmNfc3RybGNweSIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJsY3B5IiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJMQ1BZIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKworZmkKKworCitmaQorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3BuZWdvIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zcG5lZ28rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3NwbmVnbzsKKyAgU1BORUdPX1JPT1Q9IiR3aXRodmFsIgorICBpZiB0ZXN0IHgiJFNQTkVHT19ST09UIiAhPSB4bm87IHRoZW4KKyAgICB3YW50X3NwbmVnbz0ieWVzIgorICBmaQorCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgU1BORUdPIHN1cHBvcnQgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIFNQTkVHTyBzdXBwb3J0IGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQoraWYgdGVzdCB4IiR3YW50X3NwbmVnbyIgPSB4eWVzOyB0aGVuCisKKyAgaWYgdGVzdCBYIiRTUE5FR09fUk9PVCIgPSBYeWVzOyB0aGVuCisgICAgIGFzX2ZuX2Vycm9yICJGQk9wZW5TU0wgbGlicyBhbmQvb3IgZGlyZWN0b3JpZXMgd2VyZSBub3QgZm91bmQgd2hlcmUgc3BlY2lmaWVkISIgIiRMSU5FTk8iIDUKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIGVsc2UKKyAgICAgaWYgdGVzdCAteiAiJFNQTkVHT19MSUJfRElSIjsgdGhlbgorICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtTCRTUE5FR09fUk9PVCAtbGZib3BlbnNzbCIKKyAgICAgZWxzZQorICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAkU1BORUdPX0xJQl9ESVIiCisgICAgIGZpCisKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TUE5FR08gMSIgPj5jb25mZGVmcy5oCisKKyAgICAgY3VybF9zcG5lZ29fbXNnPSJlbmFibGVkIgorICBmaQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCitHU1NBUElfUk9PVD0iL3VzciIKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nc3NhcGktaW5jbHVkZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dzc2FwaV9pbmNsdWRlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZ3NzYXBpX2luY2x1ZGVzOyAgR1NTQVBJX0lOQ1M9Ii1JJHdpdGh2YWwiCisgICAgd2FudF9nc3M9InllcyIKKworZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ3NzYXBpLWxpYnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dzc2FwaV9saWJzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9nc3NhcGlfbGliczsgIEdTU0FQSV9MSUJfRElSPSItTCR3aXRodmFsIgorICAgIHdhbnRfZ3NzPSJ5ZXMiCisKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdzc2FwaSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ3NzYXBpK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9nc3NhcGk7CisgIEdTU0FQSV9ST09UPSIkd2l0aHZhbCIKKyAgaWYgdGVzdCB4IiRHU1NBUElfUk9PVCIgIT0geG5vOyB0aGVuCisgICAgd2FudF9nc3M9InllcyIKKyAgICBpZiB0ZXN0IHgiJEdTU0FQSV9ST09UIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgIEdTU0FQSV9ST09UPSIvdXNyIgorICAgIGZpCisgIGZpCisKK2ZpCisKKworc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBHU1NBUEkgc3VwcG9ydCBpcyByZXF1ZXN0ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgR1NTQVBJIHN1cHBvcnQgaXMgcmVxdWVzdGVkLi4uICIgPiY2OyB9CitpZiB0ZXN0IHgiJHdhbnRfZ3NzIiA9IHh5ZXM7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworICBpZiB0ZXN0IC16ICIkR1NTQVBJX0lOQ1MiOyB0aGVuCisgICAgIGlmIHRlc3QgLWYgIiRHU1NBUElfUk9PVC9iaW4va3JiNS1jb25maWciOyB0aGVuCisgICAgICAgIEdTU0FQSV9JTkNTPWAkR1NTQVBJX1JPT1QvYmluL2tyYjUtY29uZmlnIC0tY2ZsYWdzIGdzc2FwaWAKKyAgICAgZWxpZiB0ZXN0ICIkR1NTQVBJX1JPT1QiICE9ICJ5ZXMiOyB0aGVuCisgICAgICAgIEdTU0FQSV9JTkNTPSItSSRHU1NBUElfUk9PVC9pbmNsdWRlIgorICAgICBmaQorICBmaQorCisgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJEdTU0FQSV9JTkNTIgorCisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJnc3MuaCIgImFjX2N2X2hlYWRlcl9nc3NfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZ3NzX2giID0geCIieWVzOyB0aGVuIDoKKworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dTU0dOVSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgZ251X2dzcz15ZXMKKworZWxzZQorCisgICAgICAgICAgICBmb3IgYWNfaGVhZGVyIGluIGdzc2FwaS9nc3NhcGkuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZ3NzYXBpL2dzc2FwaS5oIiAiYWNfY3ZfaGVhZGVyX2dzc2FwaV9nc3NhcGlfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZ3NzYXBpX2dzc2FwaV9oIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HU1NBUElfR1NTQVBJX0ggMQorX0FDRU9GCisKK2Vsc2UKKyAgbm90X21pdD0xCitmaQorCitkb25lCisKKyAgICAgIGZvciBhY19oZWFkZXIgaW4gZ3NzYXBpL2dzc2FwaV9nZW5lcmljLmggZ3NzYXBpL2dzc2FwaV9rcmI1LmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2lmZGVmIEhBVkVfR1NTQVBJX0dTU0FQSV9ICisjaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaS5oPgorI2VuZGlmCisKKyIKK2V2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgorICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZWxzZQorICBub3RfbWl0PTEKK2ZpCisKK2RvbmUKKworICAgICAgaWYgdGVzdCAieCRub3RfbWl0IiA9ICJ4MSI7IHRoZW4KKyAgICAgICAgICAgICAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZ3NzYXBpLmgiICJhY19jdl9oZWFkZXJfZ3NzYXBpX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2dzc2FwaV9oIiA9IHgiInllczsgdGhlbiA6CisKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HU1NIRUlNREFMIDEiID4+Y29uZmRlZnMuaAorCisKK2Vsc2UKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRfZ3NzPW5vCisgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogZGlzYWJsaW5nIEdTU0FQSSBzaW5jZSBubyBoZWFkZXIgZmlsZXMgd2FzIGZvdW5kIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGRpc2FibGluZyBHU1NBUEkgc2luY2Ugbm8gaGVhZGVyIGZpbGVzIHdhcyBmb3VuZCIgPiYyO30KKworCitmaQorCisKKyAgICAgIGVsc2UKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HU1NNSVQgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdzc2FwaSBoZWFkZXJzIGRlY2xhcmUgR1NTX0NfTlRfSE9TVEJBU0VEX1NFUlZJQ0UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ3NzYXBpIGhlYWRlcnMgZGVjbGFyZSBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRS4uLiAiID4mNjsgfQorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGkuaD4KKyNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2tyYjUuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICAgIGdzc19pbXBvcnRfbmFtZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoT01fdWludDMyICopMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3NzX2J1ZmZlcl90KTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfTlRfSE9TVEJBU0VEX1NFUlZJQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdzc19uYW1lX3QgKikwKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitlbHNlCisKKyAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9PTERfR1NTTUlUIDEiID4+Y29uZmRlZnMuaAorCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIGZpCisKKworZmkKKworCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKK2lmIHRlc3QgeCIkd2FudF9nc3MiID0geHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dTU0FQSSAxIiA+PmNvbmZkZWZzLmgKKworCisgIGN1cmxfZ3NzX21zZz0iZW5hYmxlZCAoTUlUL0hlaW1kYWwpIgorCisgIGlmIHRlc3QgLW4gIiRnbnVfZ3NzIjsgdGhlbgorICAgIGN1cmxfZ3NzX21zZz0iZW5hYmxlZCAoR05VIEdTUykiCisgICAgTERGTEFHUz0iJExERkxBR1MgJEdTU0FQSV9MSUJfRElSIgorICAgIExJQlM9IiRMSUJTIC1sZ3NzIgorICBlbGlmIHRlc3QgLXogIiRHU1NBUElfTElCX0RJUiI7IHRoZW4KKyAgICAgY2FzZSAkaG9zdCBpbgorICAgICAqLSotZGFyd2luKikKKyAgICAgICAgTElCUz0iJExJQlMgLWxnc3NhcGlfa3JiNSAtbHJlc29sdiIKKyAgICAgICAgOzsKKyAgICAgKikKKyAgICAgICAgaWYgdGVzdCAtZiAiJEdTU0FQSV9ST09UL2Jpbi9rcmI1LWNvbmZpZyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19saWJzPWAkR1NTQVBJX1JPT1QvYmluL2tyYjUtY29uZmlnIC0tbGlicyBnc3NhcGlgCisgICAgICAgICAgIExJQlM9IiRMSUJTICRnc3NfbGlicyIKKyAgICAgICAgZWxpZiB0ZXN0ICIkR1NTQVBJX1JPT1QiICE9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1MJEdTU0FQSV9ST09UL2xpYiRsaWJzdWZmIgorICAgICAgICAgICBMSUJTPSIkTElCUyAtbGdzc2FwaSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICBMSUJTPSIkTElCUyAtbGdzc2FwaSIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgZXNhYworICBlbHNlCisgICAgIExERkxBR1M9IiRMREZMQUdTICRHU1NBUElfTElCX0RJUiIKKyAgICAgTElCUz0iJExJQlMgLWxnc3NhcGkiCisgIGZpCitlbHNlCisgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKK2ZpCisKKworT1BUX1NTTD1vZmYKK2NhPSJubyIKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zc2wgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3NzbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc3NsOyBPUFRfU1NMPSR3aXRodmFsCitmaQorCisKK2lmIHRlc3QgWCIkT1BUX1NTTCIgIT0gWG5vOyB0aGVuCisgICAgQ0xFQU5MREZMQUdTPSIkTERGTEFHUyIKKyAgQ0xFQU5DUFBGTEFHUz0iJENQUEZMQUdTIgorICBDTEVBTkxJQlM9IiRMSUJTIgorCisgIGNhc2UgIiRPUFRfU1NMIiBpbgorICB5ZXMpCisgICAgICAgIGlmIHRlc3QgeCRjcm9zc19jb21waWxpbmcgIT0geHllczsgdGhlbgorICAgICAgICAgICAgUEtHVEVTVD0ieWVzIgorICAgIGZpCisgICAgUFJFRklYX09QRU5TU0w9L3Vzci9sb2NhbC9zc2wKKyAgICBMSUJfT1BFTlNTTD0iJFBSRUZJWF9PUEVOU1NML2xpYiRsaWJzdWZmIgorICAgIDs7CisgIG9mZikKKyAgICAgICAgaWYgdGVzdCB4JGNyb3NzX2NvbXBpbGluZyAhPSB4eWVzOyB0aGVuCisgICAgICAgICAgICBQS0dURVNUPSJ5ZXMiCisgICAgZmkKKyAgICBQUkVGSVhfT1BFTlNTTD0KKyAgICA7OworICAqKQorICAgICAgICBQS0dURVNUPSJubyIKKyAgICBQUkVGSVhfT1BFTlNTTD0kT1BUX1NTTAorCisgICAgICAgICAgICAgICAgT1BFTlNTTF9QQ0RJUj0iJE9QVF9TU0wvbGliL3BrZ2NvbmZpZyIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFBLR19DT05GSUdfTElCRElSIHdpbGwgYmUgc2V0IHRvIFwiJE9QRU5TU0xfUENESVJcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBQS0dfQ09ORklHX0xJQkRJUiB3aWxsIGJlIHNldCB0byBcIiRPUEVOU1NMX1BDRElSXCIiID4mNjt9CisgICAgaWYgdGVzdCAtZiAiJE9QRU5TU0xfUENESVIvb3BlbnNzbC5wYyI7IHRoZW4KKyAgICAgIFBLR1RFU1Q9InllcyIKKyAgICBmaQorCisgICAgICAgICAgICBMSUJfT1BFTlNTTD0iJFBSRUZJWF9PUEVOU1NML2xpYiRsaWJzdWZmIgorICAgIGlmIHRlc3QgIiRQUkVGSVhfT1BFTlNTTCIgIT0gIi91c3IiIDsgdGhlbgorICAgICAgU1NMX0xERkxBR1M9Ii1MJExJQl9PUEVOU1NMIgorICAgICAgU1NMX0NQUEZMQUdTPSItSSRQUkVGSVhfT1BFTlNTTC9pbmNsdWRlIgorICAgIGZpCisgICAgU1NMX0NQUEZMQUdTPSIkU1NMX0NQUEZMQUdTIC1JJFBSRUZJWF9PUEVOU1NML2luY2x1ZGUvb3BlbnNzbCIKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCAiJFBLR1RFU1QiID0gInllcyI7IHRoZW4KKworCisKKyAgICBQS0dDT05GSUc9Im5vIgorCisgICAgaWYgdGVzdCB4JGNyb3NzX2NvbXBpbGluZyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHtob3N0fS1wa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2hvc3R9LXBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1BLR0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRQS0dDT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iCitmb3IgYXNfZGlyIGluICRhc19kdW1teQorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHQ09ORklHIiAmJiBhY19jdl9wYXRoX1BLR0NPTkZJRz0ibm8iCisgIDs7Citlc2FjCitmaQorUEtHQ09ORklHPSRhY19jdl9wYXRoX1BLR0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dDT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dDT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIGZpCisKKyAgICBpZiB0ZXN0IHgkUEtHQ09ORklHID0geG5vOyB0aGVuCisgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1BLR0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRQS0dDT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iCitmb3IgYXNfZGlyIGluICRhc19kdW1teQorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHQ09ORklHIiAmJiBhY19jdl9wYXRoX1BLR0NPTkZJRz0ibm8iCisgIDs7Citlc2FjCitmaQorUEtHQ09ORklHPSRhY19jdl9wYXRoX1BLR0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dDT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dDT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIGZpCisKKyAgICBpZiB0ZXN0IHgkUEtHQ09ORklHICE9IHhubzsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igb3BlbnNzbCBvcHRpb25zIHdpdGggcGtnLWNvbmZpZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igb3BlbnNzbCBvcHRpb25zIHdpdGggcGtnLWNvbmZpZy4uLiAiID4mNjsgfQorICAgICAgICAgICAgaXRleGlzdHM9YAorICAgIGlmIHRlc3QgLW4gIiRPUEVOU1NMX1BDRElSIjsgdGhlbgorICAgICAgUEtHX0NPTkZJR19MSUJESVI9IiRPUEVOU1NMX1BDRElSIgorICAgICAgZXhwb3J0IFBLR19DT05GSUdfTElCRElSCisgICAgZmkKKyAgICAgICAgICRQS0dDT05GSUcgLS1leGlzdHMgb3BlbnNzbCA+L2Rldi9udWxsIDI+JjEgJiYgZWNobyAxYAorCisgICAgICBpZiB0ZXN0IC16ICIkaXRleGlzdHMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBQS0dDT05GSUc9Im5vIgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIGVsc2UKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGZvdW5kIiA+JjUKKyRhc19lY2hvICJmb3VuZCIgPiY2OyB9CisgICAgICBmaQorICAgIGZpCisKKworICAgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyIgOyB0aGVuCisgICAgICBTU0xfTElCUz1gCisgICAgaWYgdGVzdCAtbiAiJE9QRU5TU0xfUENESVIiOyB0aGVuCisgICAgICBQS0dfQ09ORklHX0xJQkRJUj0iJE9QRU5TU0xfUENESVIiCisgICAgICBleHBvcnQgUEtHX0NPTkZJR19MSUJESVIKKyAgICBmaQorICAgICAgICAgJFBLR0NPTkZJRyAtLWxpYnMtb25seS1sIG9wZW5zc2wgMj4vZGV2L251bGxgCisKKyAgICAgIFNTTF9MREZMQUdTPWAKKyAgICBpZiB0ZXN0IC1uICIkT1BFTlNTTF9QQ0RJUiI7IHRoZW4KKyAgICAgIFBLR19DT05GSUdfTElCRElSPSIkT1BFTlNTTF9QQ0RJUiIKKyAgICAgIGV4cG9ydCBQS0dfQ09ORklHX0xJQkRJUgorICAgIGZpCisgICAgICAgICAkUEtHQ09ORklHIC0tbGlicy1vbmx5LUwgb3BlbnNzbCAyPi9kZXYvbnVsbGAKKworICAgICAgU1NMX0NQUEZMQUdTPWAKKyAgICBpZiB0ZXN0IC1uICIkT1BFTlNTTF9QQ0RJUiI7IHRoZW4KKyAgICAgIFBLR19DT05GSUdfTElCRElSPSIkT1BFTlNTTF9QQ0RJUiIKKyAgICAgIGV4cG9ydCBQS0dfQ09ORklHX0xJQkRJUgorICAgIGZpCisgICAgICAgICAkUEtHQ09ORklHIC0tY2ZsYWdzLW9ubHktSSBvcGVuc3NsIDI+L2Rldi9udWxsYAorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHBrZy1jb25maWc6IFNTTF9MSUJTOiBcIiRTU0xfTElCU1wiIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHBrZy1jb25maWc6IFNTTF9MSUJTOiBcIiRTU0xfTElCU1wiIiA+JjY7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBwa2ctY29uZmlnOiBTU0xfTERGTEFHUzogXCIkU1NMX0xERkxBR1NcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBwa2ctY29uZmlnOiBTU0xfTERGTEFHUzogXCIkU1NMX0xERkxBR1NcIiIgPiY2O30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcGtnLWNvbmZpZzogU1NMX0NQUEZMQUdTOiBcIiRTU0xfQ1BQRkxBR1NcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBwa2ctY29uZmlnOiBTU0xfQ1BQRkxBR1M6IFwiJFNTTF9DUFBGTEFHU1wiIiA+JjY7fQorCisgICAgICBMSUJfT1BFTlNTTD1gZWNobyAkU1NMX0xERkxBR1MgfCBzZWQgLWUgJ3MvLUwvL2cnYAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTPSIkTElCUyAkU1NMX0xJQlMiCisgICAgZmkKKyAgZmkKKworICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFNTTF9DUFBGTEFHUyIKKyAgTERGTEFHUz0iJExERkxBR1MgJFNTTF9MREZMQUdTIgorCisgICAgY2FzZSAkaG9zdCBpbgorICAgICotKi1tc3lzKiB8ICotKi1taW5ndyopCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnZGkzMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2RpMzIuLi4gIiA+JjY7IH0KKyAgICAgIG15X2FjX3NhdmVfTElCUz0kTElCUworICAgICAgTElCUz0iLWxnZGkzMiAkTElCUyIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx3aW5kZWYuaD4KKyAgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8d2luZ2RpLmg+CitpbnQgbWFpbiAodm9pZCkKK3sKK0dkaUZsdXNoKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgICAgICAgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICBMSUJTPSRteV9hY19zYXZlX0xJQlMKKyAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICA7OworICBlc2FjCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQ1JZUFRPX2xvY2sgaW4gLWxjcnlwdG8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIENSWVBUT19sb2NrIGluIC1sY3J5cHRvLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9jcnlwdG9fQ1JZUFRPX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGNyeXB0byAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgQ1JZUFRPX2xvY2sgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBDUllQVE9fbG9jayAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2NyeXB0b19DUllQVE9fbG9jaz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2NyeXB0b19DUllQVE9fbG9jaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfY3J5cHRvX0NSWVBUT19sb2NrIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2NyeXB0b19DUllQVE9fbG9jayIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jcnlwdG9fQ1JZUFRPX2xvY2siID0geCIieWVzOyB0aGVuIDoKKworICAgICBIQVZFQ1JZUFRPPSJ5ZXMiCisgICAgIExJQlM9Ii1sY3J5cHRvICRMSUJTIgorCitlbHNlCisKKyAgICAgTERGTEFHUz0iJENMRUFOTERGTEFHUyAtTCRMSUJfT1BFTlNTTCIKKyAgICAgQ1BQRkxBR1M9IiRDTEVBTkNQUEZMQUdTIC1JJFBSRUZJWF9PUEVOU1NML2luY2x1ZGUvb3BlbnNzbCAtSSRQUkVGSVhfT1BFTlNTTC9pbmNsdWRlIgorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDUllQVE9fYWRkX2xvY2sgaW4gLWxjcnlwdG8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIENSWVBUT19hZGRfbG9jayBpbiAtbGNyeXB0by4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfY3J5cHRvX0NSWVBUT19hZGRfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sY3J5cHRvICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBDUllQVE9fYWRkX2xvY2sgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBDUllQVE9fYWRkX2xvY2sgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9jcnlwdG9fQ1JZUFRPX2FkZF9sb2NrPXllcworZWxzZQorICBhY19jdl9saWJfY3J5cHRvX0NSWVBUT19hZGRfbG9jaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfY3J5cHRvX0NSWVBUT19hZGRfbG9jayIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9jcnlwdG9fQ1JZUFRPX2FkZF9sb2NrIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2NyeXB0b19DUllQVE9fYWRkX2xvY2siID0geCIieWVzOyB0aGVuIDoKKworICAgICAgIEhBVkVDUllQVE89InllcyIKKyAgICAgICBMSUJTPSItbGNyeXB0byAkTElCUyIKK2Vsc2UKKworICAgICAgIExERkxBR1M9IiRDTEVBTkxERkxBR1MiCisgICAgICAgQ1BQRkxBR1M9IiRDTEVBTkNQUEZMQUdTIgorICAgICAgIExJQlM9IiRDTEVBTkxJQlMiCisKK2ZpCisKKworZmkKKworCisKKyAgaWYgdGVzdCBYIiRIQVZFQ1JZUFRPIiA9IFgieWVzIjsgdGhlbgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgU1NMX2Nvbm5lY3QgaW4gLWxzc2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFNTTF9jb25uZWN0IGluIC1sc3NsLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9zc2xfU1NMX2Nvbm5lY3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHNzbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgU1NMX2Nvbm5lY3QgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBTU0xfY29ubmVjdCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3NzbF9TU0xfY29ubmVjdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3NzbF9TU0xfY29ubmVjdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3NsX1NTTF9jb25uZWN0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3NzbF9TU0xfY29ubmVjdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zc2xfU1NMX2Nvbm5lY3QiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQlNTTCAxCitfQUNFT0YKKworICBMSUJTPSItbHNzbCAkTElCUyIKKworZmkKKworCisgICAgaWYgdGVzdCAiJGFjX2N2X2xpYl9zc2xfU1NMX2Nvbm5lY3QiICE9IHllczsgdGhlbgorICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNzbCB3aXRoIFJTQWdsdWUvcnNhcmVmIGxpYnMgaW4gdXNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzc2wgd2l0aCBSU0FnbHVlL3JzYXJlZiBsaWJzIGluIHVzZS4uLiAiID4mNjsgfTsKKyAgICAgICAgT0xJQlM9JExJQlMKKyAgICAgICAgTElCUz0iJExJQlMgLWxSU0FnbHVlIC1scnNhcmVmIgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBTU0xfY29ubmVjdCBpbiAtbHNzbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgU1NMX2Nvbm5lY3QgaW4gLWxzc2wuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3NzbF9TU0xfY29ubmVjdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sc3NsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBTU0xfY29ubmVjdCAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIFNTTF9jb25uZWN0ICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc3NsX1NTTF9jb25uZWN0PXllcworZWxzZQorICBhY19jdl9saWJfc3NsX1NTTF9jb25uZWN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zc2xfU1NMX2Nvbm5lY3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc3NsX1NTTF9jb25uZWN0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3NzbF9TU0xfY29ubmVjdCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCU1NMIDEKK19BQ0VPRgorCisgIExJQlM9Ii1sc3NsICRMSUJTIgorCitmaQorCisgICAgICAgIGlmIHRlc3QgIiRhY19jdl9saWJfc3NsX1NTTF9jb25uZWN0IiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICAgICAgTElCUz0kT0xJQlMKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgZmkKKworICAgIGVsc2UKKworICAgICAgICAgICAgZm9yIGFjX2hlYWRlciBpbiBvcGVuc3NsL3g1MDkuaCBvcGVuc3NsL3JzYS5oIG9wZW5zc2wvY3J5cHRvLmggXAorICAgICAgICAgICAgICAgICAgICAgICBvcGVuc3NsL3BlbS5oIG9wZW5zc2wvc3NsLmggb3BlbnNzbC9lcnIuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2V2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgorICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKyBjdXJsX3NzbF9tc2c9ImVuYWJsZWQgKE9wZW5TU0wpIgorICAgICAgICBPUEVOU1NMX0VOQUJMRUQ9MQorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfT1BFTlNTTCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworZG9uZQorCisKKyAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9vcGVuc3NsX3g1MDlfaCA9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhY19oZWFkZXIgaW4geDUwOS5oIHJzYS5oIGNyeXB0by5oIHBlbS5oIHNzbC5oIGVyci5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfeDUwOV9oID0geWVzICYmCisgICAgICAgICAgIHRlc3QgJGFjX2N2X2hlYWRlcl9jcnlwdG9faCA9IHllcyAmJgorICAgICAgICAgICB0ZXN0ICRhY19jdl9oZWFkZXJfc3NsX2ggPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgY3VybF9zc2xfbXNnPSJlbmFibGVkIChPcGVuU1NMKSIKKyAgICAgICAgICBPUEVOU1NMX0VOQUJMRUQ9MQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCBYIiRPUEVOU1NMX0VOQUJMRUQiID0gWCIxIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfU1NMRUFZIDEiID4+Y29uZmRlZnMuaAorCisKKyAgICAgICAgICAgICAgZm9yIGFjX2hlYWRlciBpbiBvcGVuc3NsL3BrY3MxMi5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJvcGVuc3NsL3BrY3MxMi5oIiAiYWNfY3ZfaGVhZGVyX29wZW5zc2xfcGtjczEyX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfcGtjczEyX2giID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX09QRU5TU0xfUEtDUzEyX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICAgIGVsc2UKKyAgICAgICBMSUJTPSIkQ0xFQU5MSUJTIgorICAgIGZpCisgICAgICAgICAgICBVU0VfU1NMRUFZPSIkT1BFTlNTTF9FTkFCTEVEIgorCisKKyAgICBpZiB0ZXN0IFgiJE9QVF9TU0wiICE9IFhvZmYgJiYKKyAgICAgICB0ZXN0ICIkT1BFTlNTTF9FTkFCTEVEIiAhPSAiMSI7IHRoZW4KKyAgICAgIGFzX2ZuX2Vycm9yICJPcGVuU1NMIGxpYnMgYW5kL29yIGRpcmVjdG9yaWVzIHdlcmUgbm90IGZvdW5kIHdoZXJlIHNwZWNpZmllZCEiICIkTElORU5PIiA1CisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0IFgiJE9QRU5TU0xfRU5BQkxFRCIgPSBYIjEiOyB0aGVuCisgICAgICAgICAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJFTkdJTkVfaW5pdCIgImFjX2N2X2Z1bmNfRU5HSU5FX2luaXQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfRU5HSU5FX2luaXQiID0geCIieWVzOyB0aGVuIDoKKworICAgICAgICAgICAgICAgIGZvciBhY19oZWFkZXIgaW4gb3BlbnNzbC9lbmdpbmUuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAib3BlbnNzbC9lbmdpbmUuaCIgImFjX2N2X2hlYWRlcl9vcGVuc3NsX2VuZ2luZV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2VuZ2luZV9oIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9PUEVOU1NMX0VOR0lORV9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgICAgICAgICAgICAgICBmb3IgYWNfZnVuYyBpbiBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXMKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitldmFsIGFzX3ZhbD1cJCRhc19hY192YXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKK2ZpCisKKworCisgICAgZm9yIGFjX2Z1bmMgaW4gUkFORF9zdGF0dXMgXAorICAgICAgICAgICAgICAgICAgICBSQU5EX3NjcmVlbiBcCisgICAgICAgICAgICAgICAgICAgIFJBTkRfZWdkIFwKKyAgICAgICAgICAgICAgICAgICAgRU5HSU5FX2NsZWFudXAgXAorICAgICAgICAgICAgICAgICAgICBDUllQVE9fY2xlYW51cF9hbGxfZXhfZGF0YSBcCisgICAgICAgICAgICAgICAgICAgIFNTTF9nZXRfc2h1dGRvd24gXAorICAgICAgICAgICAgICAgICAgICBTU0x2Ml9jbGllbnRfbWV0aG9kCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgorZXZhbCBhc192YWw9XCQkYXNfYWNfdmFyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB5YVNTTCB1c2luZyBPcGVuU1NMIGNvbXBhdGliaWxpdHkgbW9kZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgeWFTU0wgdXNpbmcgT3BlblNTTCBjb21wYXRpYmlsaXR5IG1vZGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisjaWYgZGVmaW5lZChZQVNTTF9WRVJTSU9OKSAmJiBkZWZpbmVkKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIpCisgICAgICAgIGludCBkdW1teSA9IFNTTF9FUlJPUl9OT05FOworI2Vsc2UKKyAgICAgICAgTm90IHRoZSB5YVNTTCBPcGVuU1NMIGNvbXBhdGliaWxpdHkgaGVhZGVyLgorI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFVTRV9ZQVNTTEVNVUwgMQorX0FDRU9GCisKKyAgICAgIGN1cmxfc3NsX21zZz0iZW5hYmxlZCAoT3BlblNTTCBlbXVsYXRpb24gYnkgeWFTU0wpIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisKKyAgaWYgdGVzdCAiJE9QRU5TU0xfRU5BQkxFRCIgPSAiMSI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkTElCX09QRU5TU0wiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgTERfTElCUkFSWV9QQVRIPSIkTERfTElCUkFSWV9QQVRIOiRMSUJfT1BFTlNTTCIKKyAgICAgICAgIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEgKKyAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogQWRkZWQgJExJQl9PUEVOU1NMIHRvIExEX0xJQlJBUllfUEFUSCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBBZGRlZCAkTElCX09QRU5TU0wgdG8gTERfTElCUkFSWV9QQVRIIiA+JjY7fQorICAgICAgIGZpCisgICAgZmkKKworICAjCisKKyAgIworICB0c3RfYXBpPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIE9wZW5TU0wgaGVhZGVycyB2ZXJzaW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBPcGVuU1NMIGhlYWRlcnMgdmVyc2lvbi4uLiAiID4mNjsgfQorCisgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJTRUQgbm90IHNldC4gQ2Fubm90IGNvbnRpbnVlIHdpdGhvdXQgU0VEIGJlaW5nIHNldC4iICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJHUkVQIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IEdSRVAgYmVpbmcgc2V0LiIgIiRMSU5FTk8iIDUKKyAgZmkKKworICB0bXBfZXhwPSIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjICAgaWZkZWYgVVNFX09QRU5TU0wKKyMgICAgIGluY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisjICAgZWxzZQorIyAgICAgaW5jbHVkZSA8Y3J5cHRvLmg+CisjICAgZW5kaWYKKworI2lmZGVmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIKK0NVUkxfREVGX1RPS0VOIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIKKyNlbmRpZgorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB0bXBfZXhwPWBldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiIDI+L2Rldi9udWxsIHwgXAorICAgICAgIiRHUkVQIiBDVVJMX0RFRl9UT0tFTiAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy8uKkNVUkxfREVGX1RPS0VOWyBdWyBdKi8vJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICIkU0VEIiAncy9bIl1bIF0qWyJdLy9nJyAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC16ICIkdG1wX2V4cCIgfHwgdGVzdCAiJHRtcF9leHAiID0gIk9QRU5TU0xfVkVSU0lPTl9OVU1CRVIiOyB0aGVuCisgICAgICB0bXBfZXhwPSIiCisgICAgZmkKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiR0bXBfZXhwIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfT1BFTlNTTF9WRVJTSU9OX05VTUJFUj1ubworCisgIGVsc2UKKyAgICBjdXJsX2N2X2hhdmVfZGVmX09QRU5TU0xfVkVSU0lPTl9OVU1CRVI9eWVzCisgICAgY3VybF9jdl9kZWZfT1BFTlNTTF9WRVJTSU9OX05VTUJFUj0kdG1wX2V4cAorCisgIGZpCisKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfT1BFTlNTTF9WRVJTSU9OX05VTUJFUiIgPSAieWVzIjsgdGhlbgorICAgIHRzdF92ZXJsZW49YGV4cHIgIiRjdXJsX2N2X2RlZl9PUEVOU1NMX1ZFUlNJT05fTlVNQkVSIiA6ICcuKidgCisgICAgY2FzZSAieCR0c3RfdmVybGVuIiBpbgorICAgICAgeDYpCisgICAgICAgIHRzdF92ZXJtYWo9YGVjaG8gJGN1cmxfY3ZfZGVmX09QRU5TU0xfVkVSU0lPTl9OVU1CRVIgfCBjdXQgLWMgM2AKKyAgICAgICAgdHN0X3Zlcm1pbj1gZWNobyAkY3VybF9jdl9kZWZfT1BFTlNTTF9WRVJTSU9OX05VTUJFUiB8IGN1dCAtYyA0YAorICAgICAgICB0c3RfdmVyZml4PWBlY2hvICRjdXJsX2N2X2RlZl9PUEVOU1NMX1ZFUlNJT05fTlVNQkVSIHwgY3V0IC1jIDVgCisgICAgICAgIHRzdF9hcGk9MHgkdHN0X3Zlcm1haiR0c3RfdmVybWluJHRzdF92ZXJmaXgKKyAgICAgICAgOzsKKyAgICAgIHgxMXx4MTApCisgICAgICAgIHRzdF92ZXJtYWo9YGVjaG8gJGN1cmxfY3ZfZGVmX09QRU5TU0xfVkVSU0lPTl9OVU1CRVIgfCBjdXQgLWMgM2AKKyAgICAgICAgdHN0X3Zlcm1pbj1gZWNobyAkY3VybF9jdl9kZWZfT1BFTlNTTF9WRVJTSU9OX05VTUJFUiB8IGN1dCAtYyA1YAorICAgICAgICB0c3RfdmVyZml4PWBlY2hvICRjdXJsX2N2X2RlZl9PUEVOU1NMX1ZFUlNJT05fTlVNQkVSIHwgY3V0IC1jIDdgCisgICAgICAgIHRzdF9hcGk9MHgkdHN0X3Zlcm1haiR0c3RfdmVybWluJHRzdF92ZXJmaXgKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIHRzdF9hcGk9InVua25vd24iCisgICAgICAgIDs7CisgICAgZXNhYworICAgIGNhc2UgJHRzdF9hcGkgaW4KKyAgICAgIDB4MTEwKSB0c3Rfc2hvdz0iMS4xLjAiIDs7CisgICAgICAweDEwMSkgdHN0X3Nob3c9IjEuMC4xIiA7OworICAgICAgMHgxMDApIHRzdF9zaG93PSIxLjAuMCIgOzsKKyAgICAgIDB4MDk5KSB0c3Rfc2hvdz0iMC45LjkiIDs7CisgICAgICAweDA5OCkgdHN0X3Nob3c9IjAuOS44IiA7OworICAgICAgMHgwOTcpIHRzdF9zaG93PSIwLjkuNyIgOzsKKyAgICAgIDB4MDk2KSB0c3Rfc2hvdz0iMC45LjYiIDs7CisgICAgICAweDA5NSkgdHN0X3Nob3c9IjAuOS41IiA7OworICAgICAgMHgwOTQpIHRzdF9zaG93PSIwLjkuNCIgOzsKKyAgICAgIDB4MDkzKSB0c3Rfc2hvdz0iMC45LjMiIDs7CisgICAgICAweDA5MikgdHN0X3Nob3c9IjAuOS4yIiA7OworICAgICAgMHgwOTEpIHRzdF9zaG93PSIwLjkuMSIgOzsKKyAgICAgICopICAgICB0c3Rfc2hvdz0idW5rbm93biIgOzsKKyAgICBlc2FjCisgICAgdHN0X3Nob3c9IiR0c3Rfc2hvdyAtICRjdXJsX2N2X2RlZl9PUEVOU1NMX1ZFUlNJT05fTlVNQkVSIgorICBlbHNlCisgICAgdHN0X3Nob3c9InVua25vd24iCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkdHN0X3Nob3ciID4mNQorJGFzX2VjaG8gIiR0c3Rfc2hvdyIgPiY2OyB9CisgICMKKyAgY3VybF9vcGVuc3NsX2FwaV9oZWFkZXJzPSR0c3RfYXBpCisKKworICAjCisgIHRzdF9hcGk9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgT3BlblNTTCBsaWJyYXJ5IHZlcnNpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIE9wZW5TU0wgbGlicmFyeSB2ZXJzaW9uLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfYXBpIiA9ICJ1bmtub3duIjsgdGhlbgorICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi12bXMqKQorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBTU0xfQ1RYX3NldF9ub3RfcmVzdW1ibF9zZXNzX2NiIGlubm9jdW91c19TU0xfQ1RYX3NldF9ub3RfcmVzdW1ibF9zZXNzX2NiCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIFNTTF9DVFhfc2V0X25vdF9yZXN1bWJsX3Nlc3NfY2IKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIFNTTF9DVFhfc2V0X25vdF9yZXN1bWJsX3Nlc3NfY2IgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfU1NMX0NUWF9zZXRfbm90X3Jlc3VtYmxfc2Vzc19jYiB8fCBkZWZpbmVkIF9fc3R1Yl9fX1NTTF9DVFhfc2V0X25vdF9yZXN1bWJsX3Nlc3NfY2IKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gU1NMX0NUWF9zZXRfbm90X3Jlc3VtYmxfc2Vzc19jYiAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgdHN0X2FwaT0iMHgxMTAiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgU1NMX0NUWF9zZXRfbm90X3Jlc3VtYWJsZV9zZXNzaW9uX2NhbGxiYWNrIGlubm9jdW91c19TU0xfQ1RYX3NldF9ub3RfcmVzdW1hYmxlX3Nlc3Npb25fY2FsbGJhY2sKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgU1NMX0NUWF9zZXRfbm90X3Jlc3VtYWJsZV9zZXNzaW9uX2NhbGxiYWNrCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBTU0xfQ1RYX3NldF9ub3RfcmVzdW1hYmxlX3Nlc3Npb25fY2FsbGJhY2sgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfU1NMX0NUWF9zZXRfbm90X3Jlc3VtYWJsZV9zZXNzaW9uX2NhbGxiYWNrIHx8IGRlZmluZWQgX19zdHViX19fU1NMX0NUWF9zZXRfbm90X3Jlc3VtYWJsZV9zZXNzaW9uX2NhbGxiYWNrCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIFNTTF9DVFhfc2V0X25vdF9yZXN1bWFibGVfc2Vzc2lvbl9jYWxsYmFjayAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgdHN0X2FwaT0iMHgxMTAiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgaWYgdGVzdCAiJHRzdF9hcGkiID0gInVua25vd24iOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgU1NMX3JlbmVnb3RpYXRlX2FiYnJldmlhdGVkIGlubm9jdW91c19TU0xfcmVuZWdvdGlhdGVfYWJicmV2aWF0ZWQKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgU1NMX3JlbmVnb3RpYXRlX2FiYnJldmlhdGVkCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBTU0xfcmVuZWdvdGlhdGVfYWJicmV2aWF0ZWQgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfU1NMX3JlbmVnb3RpYXRlX2FiYnJldmlhdGVkIHx8IGRlZmluZWQgX19zdHViX19fU1NMX3JlbmVnb3RpYXRlX2FiYnJldmlhdGVkCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIFNTTF9yZW5lZ290aWF0ZV9hYmJyZXZpYXRlZCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB0c3RfYXBpPSIweDEwMSIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgIGlmIHRlc3QgIiR0c3RfYXBpIiA9ICJ1bmtub3duIjsgdGhlbgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIE9CSl9hZGRfc2lnaWQgaW5ub2N1b3VzX09CSl9hZGRfc2lnaWQKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgT0JKX2FkZF9zaWdpZAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgT0JKX2FkZF9zaWdpZCAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9PQkpfYWRkX3NpZ2lkIHx8IGRlZmluZWQgX19zdHViX19fT0JKX2FkZF9zaWdpZAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBPQkpfYWRkX3NpZ2lkICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHRzdF9hcGk9IjB4MTAwIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgaWYgdGVzdCAiJHRzdF9hcGkiID0gInVua25vd24iOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgRVJSX3NldF9tYXJrIGlubm9jdW91c19FUlJfc2V0X21hcmsKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgRVJSX3NldF9tYXJrCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBFUlJfc2V0X21hcmsgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfRVJSX3NldF9tYXJrIHx8IGRlZmluZWQgX19zdHViX19fRVJSX3NldF9tYXJrCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIEVSUl9zZXRfbWFyayAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB0c3RfYXBpPSIweDA5OCIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgIGlmIHRlc3QgIiR0c3RfYXBpIiA9ICJ1bmtub3duIjsgdGhlbgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIEVSUl9wZWVrX2xhc3RfZXJyb3IgaW5ub2N1b3VzX0VSUl9wZWVrX2xhc3RfZXJyb3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgRVJSX3BlZWtfbGFzdF9lcnJvcgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgRVJSX3BlZWtfbGFzdF9lcnJvciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9FUlJfcGVla19sYXN0X2Vycm9yIHx8IGRlZmluZWQgX19zdHViX19fRVJSX3BlZWtfbGFzdF9lcnJvcgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBFUlJfcGVla19sYXN0X2Vycm9yICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHRzdF9hcGk9IjB4MDk3IgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgaWYgdGVzdCAiJHRzdF9hcGkiID0gInVua25vd24iOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgYzJpX0FTTjFfT0JKRUNUIGlubm9jdW91c19jMmlfQVNOMV9PQkpFQ1QKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgYzJpX0FTTjFfT0JKRUNUCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBjMmlfQVNOMV9PQkpFQ1QgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfYzJpX0FTTjFfT0JKRUNUIHx8IGRlZmluZWQgX19zdHViX19fYzJpX0FTTjFfT0JKRUNUCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGMyaV9BU04xX09CSkVDVCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB0c3RfYXBpPSIweDA5NiIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgIGlmIHRlc3QgIiR0c3RfYXBpIiA9ICJ1bmtub3duIjsgdGhlbgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIFNTTF9DVFhfc2V0X3B1cnBvc2UgaW5ub2N1b3VzX1NTTF9DVFhfc2V0X3B1cnBvc2UKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgU1NMX0NUWF9zZXRfcHVycG9zZQorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgU1NMX0NUWF9zZXRfcHVycG9zZSAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9TU0xfQ1RYX3NldF9wdXJwb3NlIHx8IGRlZmluZWQgX19zdHViX19fU1NMX0NUWF9zZXRfcHVycG9zZQorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBTU0xfQ1RYX3NldF9wdXJwb3NlICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHRzdF9hcGk9IjB4MDk1IgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgaWYgdGVzdCAiJHRzdF9hcGkiID0gInVua25vd24iOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgT0JKX29iajJ0eHQgaW5ub2N1b3VzX09CSl9vYmoydHh0CisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIE9CSl9vYmoydHh0CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBPQkpfb2JqMnR4dCAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9PQkpfb2JqMnR4dCB8fCBkZWZpbmVkIF9fc3R1Yl9fX09CSl9vYmoydHh0CitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIE9CSl9vYmoydHh0ICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHRzdF9hcGk9IjB4MDk0IgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgaWYgdGVzdCAiJHRzdF9hcGkiID0gInVua25vd24iOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgU1NMX2dldF92ZXJpZnlfZGVwdGggaW5ub2N1b3VzX1NTTF9nZXRfdmVyaWZ5X2RlcHRoCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIFNTTF9nZXRfdmVyaWZ5X2RlcHRoCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBTU0xfZ2V0X3ZlcmlmeV9kZXB0aCAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9TU0xfZ2V0X3ZlcmlmeV9kZXB0aCB8fCBkZWZpbmVkIF9fc3R1Yl9fX1NTTF9nZXRfdmVyaWZ5X2RlcHRoCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIFNTTF9nZXRfdmVyaWZ5X2RlcHRoICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHRzdF9hcGk9IjB4MDkzIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgaWYgdGVzdCAiJHRzdF9hcGkiID0gInVua25vd24iOyB0aGVuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgU1NMX2xpYnJhcnlfaW5pdCBpbm5vY3VvdXNfU1NMX2xpYnJhcnlfaW5pdAorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBTU0xfbGlicmFyeV9pbml0CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBTU0xfbGlicmFyeV9pbml0ICgpOworI2lmIGRlZmluZWQgX19zdHViX1NTTF9saWJyYXJ5X2luaXQgfHwgZGVmaW5lZCBfX3N0dWJfX19TU0xfbGlicmFyeV9pbml0CitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIFNTTF9saWJyYXJ5X2luaXQgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgdHN0X2FwaT0iMHgwOTIiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICBpZiB0ZXN0ICIkdHN0X2FwaSIgPSAidW5rbm93biI7IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdCBpbm5vY3VvdXNfU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIFNTTF9DVFhfc2V0X2NpcGhlcl9saXN0ICgpOworI2lmIGRlZmluZWQgX19zdHViX1NTTF9DVFhfc2V0X2NpcGhlcl9saXN0IHx8IGRlZmluZWQgX19zdHViX19fU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgdHN0X2FwaT0iMHgwOTEiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICBjYXNlICR0c3RfYXBpIGluCisgICAgMHgxMTApIHRzdF9zaG93PSIxLjEuMCIgOzsKKyAgICAweDEwMSkgdHN0X3Nob3c9IjEuMC4xIiA7OworICAgIDB4MTAwKSB0c3Rfc2hvdz0iMS4wLjAiIDs7CisgICAgMHgwOTkpIHRzdF9zaG93PSIwLjkuOSIgOzsKKyAgICAweDA5OCkgdHN0X3Nob3c9IjAuOS44IiA7OworICAgIDB4MDk3KSB0c3Rfc2hvdz0iMC45LjciIDs7CisgICAgMHgwOTYpIHRzdF9zaG93PSIwLjkuNiIgOzsKKyAgICAweDA5NSkgdHN0X3Nob3c9IjAuOS41IiA7OworICAgIDB4MDk0KSB0c3Rfc2hvdz0iMC45LjQiIDs7CisgICAgMHgwOTMpIHRzdF9zaG93PSIwLjkuMyIgOzsKKyAgICAweDA5MikgdHN0X3Nob3c9IjAuOS4yIiA7OworICAgIDB4MDkxKSB0c3Rfc2hvdz0iMC45LjEiIDs7CisgICAgKikgICAgIHRzdF9zaG93PSJ1bmtub3duIiA7OworICBlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkdHN0X3Nob3ciID4mNQorJGFzX2VjaG8gIiR0c3Rfc2hvdyIgPiY2OyB9CisgICMKKyAgY3VybF9vcGVuc3NsX2FwaV9saWJyYXJ5PSR0c3RfYXBpCisKKyAgIworICB0c3RfbWF0Y2g9InllcyIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBPcGVuU1NMIGhlYWRlcnMgYW5kIGxpYnJhcnkgdmVyc2lvbnMgbWF0Y2hpbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIE9wZW5TU0wgaGVhZGVycyBhbmQgbGlicmFyeSB2ZXJzaW9ucyBtYXRjaGluZy4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkY3VybF9vcGVuc3NsX2FwaV9oZWFkZXJzIiA9ICJ1bmtub3duIiB8fAorICAgIHRlc3QgIiRjdXJsX29wZW5zc2xfYXBpX2xpYnJhcnkiID0gInVua25vd24iOyB0aGVuCisgICAgdHN0X21hdGNoPSJmYWlsIgorICAgIHRzdF93YXJucz0iQ2FuIG5vdCBjb21wYXJlIE9wZW5TU0wgaGVhZGVycyBhbmQgbGlicmFyeSB2ZXJzaW9ucy4iCisgIGVsaWYgdGVzdCAiJGN1cmxfb3BlbnNzbF9hcGlfaGVhZGVycyIgIT0gIiRjdXJsX29wZW5zc2xfYXBpX2xpYnJhcnkiOyB0aGVuCisgICAgdHN0X21hdGNoPSJubyIKKyAgICB0c3Rfd2FybnM9Ik9wZW5TU0wgaGVhZGVycyBhbmQgbGlicmFyeSB2ZXJzaW9ucyBkbyBub3QgbWF0Y2guIgorICBmaQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHRzdF9tYXRjaCIgPiY1CiskYXNfZWNobyAiJHRzdF9tYXRjaCIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbWF0Y2giICE9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkdHN0X3dhcm5zIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICR0c3Rfd2FybnMiID4mMjt9CisgIGZpCisKKyAgZmkKKworZmkKKworCisKK19jcHBmbGFncz0kQ1BQRkxBR1MKK19sZGZsYWdzPSRMREZMQUdTCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtemxpYiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfemxpYitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfemxpYjsgT1BUX1pMSUI9IiR3aXRodmFsIgorZmkKKworCitpZiB0ZXN0ICIkT1BUX1pMSUIiID0gIm5vIiA7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHpsaWIgZGlzYWJsZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogemxpYiBkaXNhYmxlZCIgPiYyO30KK2Vsc2UKKyAgaWYgdGVzdCAiJE9QVF9aTElCIiA9ICJ5ZXMiIDsgdGhlbgorICAgICBPUFRfWkxJQj0iIgorICBmaQorCisgIGlmIHRlc3QgLXogIiRPUFRfWkxJQiIgOyB0aGVuCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbmZsYXRlRW5kIGluIC1seiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW5mbGF0ZUVuZCBpbiAtbHouLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3pfaW5mbGF0ZUVuZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1seiAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgaW5mbGF0ZUVuZCAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGluZmxhdGVFbmQgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl96X2luZmxhdGVFbmQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl96X2luZmxhdGVFbmQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3pfaW5mbGF0ZUVuZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl96X2luZmxhdGVFbmQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfel9pbmZsYXRlRW5kIiA9IHgiInllczsgdGhlbiA6CisgICAgICAgICAgICAgICAgICAgICBIQVZFX0xJQlo9IjEiCitlbHNlCisgICAgICAgICAgICAgICAgICAgICBPUFRfWkxJQj0iL3Vzci9sb2NhbCIKK2ZpCisKKworICBmaQorCisgICAgaWYgdGVzdCAtbiAiJE9QVF9aTElCIjsgdGhlbgorICAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJE9QVF9aTElCL2luY2x1ZGUiCisgICAgIExERkxBR1M9IiRMREZMQUdTIC1MJE9QVF9aTElCL2xpYiRsaWJzdWZmIgorICBmaQorCisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ6bGliLmgiICJhY19jdl9oZWFkZXJfemxpYl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl96bGliX2giID0geCIieWVzOyB0aGVuIDoKKworICAgICAgICBIQVZFX1pMSUJfSD0iMSIKKyAgICAgICAgaWYgdGVzdCAiJEhBVkVfTElCWiIgIT0gIjEiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnenJlYWQgaW4gLWx6IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBnenJlYWQgaW4gLWx6Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl96X2d6cmVhZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1seiAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ3pyZWFkICgpOworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZ3pyZWFkICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfel9nenJlYWQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl96X2d6cmVhZD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfel9nenJlYWQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfel9nenJlYWQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfel9nenJlYWQiID0geCIieWVzOyB0aGVuIDoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQVZFX0xJQlo9IjEiCisKK2Vsc2UKKyAgIENQUEZMQUdTPSRfY3BwZmxhZ3MKKyAgICAgICAgICAgICAgICAgICBMREZMQUdTPSRfbGRmbGFncworZmkKKworICAgIGZpCisKK2Vsc2UKKworICAgICAgICAgICAgQ1BQRkxBR1M9JF9jcHBmbGFncworICAgICAgTERGTEFHUz0kX2xkZmxhZ3MKKworZmkKKworCisKKyAgaWYgdGVzdCAiJEhBVkVfTElCWiIgPSAiMSIgJiYgdGVzdCAiJEhBVkVfWkxJQl9IIiAhPSAiMSIKKyAgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY29uZmlndXJlIGZvdW5kIG9ubHkgdGhlIGxpYnogbGliLCBub3QgdGhlIGhlYWRlciBmaWxlISIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjb25maWd1cmUgZm91bmQgb25seSB0aGUgbGlieiBsaWIsIG5vdCB0aGUgaGVhZGVyIGZpbGUhIiA+JjI7fQorICAgIEhBVkVfTElCWj0iIgorICBlbGlmIHRlc3QgIiRIQVZFX0xJQloiICE9ICIxIiAmJiB0ZXN0ICIkSEFWRV9aTElCX0giID0gIjEiCisgIHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNvbmZpZ3VyZSBmb3VuZCBvbmx5IHRoZSBsaWJ6IGhlYWRlciBmaWxlLCBub3QgdGhlIGxpYiEiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY29uZmlndXJlIGZvdW5kIG9ubHkgdGhlIGxpYnogaGVhZGVyIGZpbGUsIG5vdCB0aGUgbGliISIgPiYyO30KKyAgZWxpZiB0ZXN0ICIkSEFWRV9MSUJaIiA9ICIxIiAmJiB0ZXN0ICIkSEFWRV9aTElCX0giID0gIjEiCisgIHRoZW4KKworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1pMSUJfSCAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQlogMSIgPj5jb25mZGVmcy5oCisKKworICAgIENVUkxfTElCUz0iJENVUkxfTElCUyAtbHoiCisgICAgTElCUz0iJExJQlMgLWx6IgorCisgICAgICAgIEFNRklYTElCPSIxIgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgYm90aCBsaWJ6IGFuZCBsaWJ6LmggaGVhZGVyIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGZvdW5kIGJvdGggbGlieiBhbmQgbGliei5oIGhlYWRlciIgPiY2O30KKyAgICBjdXJsX3psaWJfbXNnPSJlbmFibGVkIgorICBmaQorZmkKKworCisKK2lmIHRlc3QgeCIkQU1GSVhMSUIiID0geDE7IHRoZW4KKyAgSEFWRV9MSUJaX1RSVUU9CisgIEhBVkVfTElCWl9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9MSUJaX1RSVUU9JyMnCisgIEhBVkVfTElCWl9GQUxTRT0KK2ZpCisKKworCitpZiB0ZXN0IFgiJE9QRU5TU0xfRU5BQkxFRCIgPSBYIjEiOyB0aGVuCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZWdkLXNvY2tldCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZWdkX3NvY2tldCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZWdkX3NvY2tldDsgIEVHRF9TT0NLRVQ9IiR3aXRodmFsIgorCitmaQorCisgIGlmIHRlc3QgLW4gIiRFR0RfU09DS0VUIiA7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBFR0RfU09DS0VUICIkRUdEX1NPQ0tFVCIKK19BQ0VPRgorCisgIGZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1yYW5kb20gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3JhbmRvbStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcmFuZG9tOyAgUkFORE9NX0ZJTEU9IiR3aXRodmFsIgorZWxzZQorCisgICAgICAgICAgaWYgdGVzdCB4JGNyb3NzX2NvbXBpbGluZyAhPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBcIi9kZXYvdXJhbmRvbVwiIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBcIi9kZXYvdXJhbmRvbVwiLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2ZpbGVfX19kZXZfdXJhbmRvbV8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAmJgorICBhc19mbl9lcnJvciAiY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZyIgIiRMSU5FTk8iIDUKK2lmIHRlc3QgLXIgIiIvZGV2L3VyYW5kb20iIjsgdGhlbgorICBhY19jdl9maWxlX19fZGV2X3VyYW5kb21fPXllcworZWxzZQorICBhY19jdl9maWxlX19fZGV2X3VyYW5kb21fPW5vCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZmlsZV9fX2Rldl91cmFuZG9tXyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2ZpbGVfX19kZXZfdXJhbmRvbV8iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9maWxlX19fZGV2X3VyYW5kb21fIiA9IHgiInllczsgdGhlbiA6CisgICBSQU5ET01fRklMRT0iL2Rldi91cmFuZG9tIgorZmkKKworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogc2tpcHBlZCB0aGUgL2Rldi91cmFuZG9tIGRldGVjdGlvbiB3aGVuIGNyb3NzLWNvbXBpbGluZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBza2lwcGVkIHRoZSAvZGV2L3VyYW5kb20gZGV0ZWN0aW9uIHdoZW4gY3Jvc3MtY29tcGlsaW5nIiA+JjI7fQorICAgICAgICAgIGZpCisKKworZmkKKworICBpZiB0ZXN0IC1uICIkUkFORE9NX0ZJTEUiICYmIHRlc3QgWCIkUkFORE9NX0ZJTEUiICE9IFhubyA7IHRoZW4KKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJBTkRPTV9GSUxFICIkUkFORE9NX0ZJTEUiCitfQUNFT0YKKworICBmaQorZmkKKworaWYgdGVzdCAiJE9QRU5TU0xfRU5BQkxFRCIgPSAiMSI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgU1JQX0NhbGNfY2xpZW50X2tleSBpbiAtbGNyeXB0byIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgU1JQX0NhbGNfY2xpZW50X2tleSBpbiAtbGNyeXB0by4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfY3J5cHRvX1NSUF9DYWxjX2NsaWVudF9rZXkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGNyeXB0byAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgU1JQX0NhbGNfY2xpZW50X2tleSAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIFNSUF9DYWxjX2NsaWVudF9rZXkgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9jcnlwdG9fU1JQX0NhbGNfY2xpZW50X2tleT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2NyeXB0b19TUlBfQ2FsY19jbGllbnRfa2V5PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9jcnlwdG9fU1JQX0NhbGNfY2xpZW50X2tleSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9jcnlwdG9fU1JQX0NhbGNfY2xpZW50X2tleSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jcnlwdG9fU1JQX0NhbGNfY2xpZW50X2tleSIgPSB4IiJ5ZXM7IHRoZW4gOgorCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1NMRUFZX1NSUCAxIiA+PmNvbmZkZWZzLmgKKworICAgICBIQVZFX1NTTEVBWV9TUlA9MQorCisKK2ZpCisKK2ZpCisKKworT1BUX0dOVVRMUz1ubworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251dGxzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnV0bHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2dudXRsczsgT1BUX0dOVVRMUz0kd2l0aHZhbAorZmkKKworCitpZiB0ZXN0ICIkT1BFTlNTTF9FTkFCTEVEIiAhPSAiMSI7IHRoZW4KKworICBpZiB0ZXN0IFgiJE9QVF9HTlVUTFMiICE9IFhubzsgdGhlbgorCisgICAgYWRkbGQ9IiIKKyAgICBpZiB0ZXN0ICJ4JE9QVF9HTlVUTFMiID0gInh5ZXMiOyB0aGVuCisKKworICAgIFBLR0NPTkZJRz0ibm8iCisKKyAgICBpZiB0ZXN0IHgkY3Jvc3NfY29tcGlsaW5nID0geHllczsgdGhlbgorICAgICAgICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2hvc3R9LXBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7aG9zdH0tcGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfUEtHQ09ORklHK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEtHQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BLR0NPTkZJRz0iJFBLR0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2FzX2R1bW15PSIkUEFUSDovdXNyL2JpbjovdXNyL2xvY2FsL2JpbiIKK2ZvciBhc19kaXIgaW4gJGFzX2R1bW15CitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1BLR0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QS0dDT05GSUciICYmIGFjX2N2X3BhdGhfUEtHQ09ORklHPSJubyIKKyAgOzsKK2VzYWMKK2ZpCitQS0dDT05GSUc9JGFjX2N2X3BhdGhfUEtHQ09ORklHCitpZiB0ZXN0IC1uICIkUEtHQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBLR0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgZmkKKworICAgIGlmIHRlc3QgeCRQS0dDT05GSUcgPSB4bm87IHRoZW4KKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfUEtHQ09ORklHK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEtHQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BLR0NPTkZJRz0iJFBLR0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2FzX2R1bW15PSIkUEFUSDovdXNyL2JpbjovdXNyL2xvY2FsL2JpbiIKK2ZvciBhc19kaXIgaW4gJGFzX2R1bW15CitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1BLR0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QS0dDT05GSUciICYmIGFjX2N2X3BhdGhfUEtHQ09ORklHPSJubyIKKyAgOzsKK2VzYWMKK2ZpCitQS0dDT05GSUc9JGFjX2N2X3BhdGhfUEtHQ09ORklHCitpZiB0ZXN0IC1uICIkUEtHQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBLR0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgZmkKKworICAgIGlmIHRlc3QgeCRQS0dDT05GSUcgIT0geG5vOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnbnV0bHMgb3B0aW9ucyB3aXRoIHBrZy1jb25maWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdudXRscyBvcHRpb25zIHdpdGggcGtnLWNvbmZpZy4uLiAiID4mNjsgfQorICAgICAgICAgICAgaXRleGlzdHM9YAorICAgIGlmIHRlc3QgLW4gIiI7IHRoZW4KKyAgICAgIFBLR19DT05GSUdfTElCRElSPSIiCisgICAgICBleHBvcnQgUEtHX0NPTkZJR19MSUJESVIKKyAgICBmaQorICAgICAgICAgJFBLR0NPTkZJRyAtLWV4aXN0cyBnbnV0bHMgPi9kZXYvbnVsbCAyPiYxICYmIGVjaG8gMWAKKworICAgICAgaWYgdGVzdCAteiAiJGl0ZXhpc3RzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgUEtHQ09ORklHPSJubyIKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICBlbHNlCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmb3VuZCIgPiY1CiskYXNfZWNobyAiZm91bmQiID4mNjsgfQorICAgICAgZmkKKyAgICBmaQorCisKKyAgICAgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyIgOyB0aGVuCisgICAgICAgIGFkZGxpYj1gJFBLR0NPTkZJRyAtLWxpYnMtb25seS1sIGdudXRsc2AKKyAgICAgICAgYWRkbGQ9YCRQS0dDT05GSUcgLS1saWJzLW9ubHktTCBnbnV0bHNgCisgICAgICAgIGFkZGNmbGFncz1gJFBLR0NPTkZJRyAtLWNmbGFncy1vbmx5LUkgZ251dGxzYAorICAgICAgICB2ZXJzaW9uPWAkUEtHQ09ORklHIC0tbW9kdmVyc2lvbiBnbnV0bHNgCisgICAgICAgIGd0bHNsaWI9YGVjaG8gJGFkZGxkIHwgJFNFRCAtZSAncy8tTC8vJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrPWBsaWJnbnV0bHMtY29uZmlnIC0tdmVyc2lvbiAyPi9kZXYvbnVsbGAKKyAgICAgICAgaWYgdGVzdCAtbiAiJGNoZWNrIjsgdGhlbgorICAgICAgICAgIGFkZGxpYj1gbGliZ251dGxzLWNvbmZpZyAtLWxpYnNgCisgICAgICAgICAgYWRkY2ZsYWdzPWBsaWJnbnV0bHMtY29uZmlnIC0tY2ZsYWdzYAorICAgICAgICAgIHZlcnNpb249YGxpYmdudXRscy1jb25maWcgLS12ZXJzaW9uYAorICAgICAgICAgIGd0bHNsaWI9YGxpYmdudXRscy1jb25maWcgLS1wcmVmaXhgL2xpYiRsaWJzdWZmCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGNmZz0kT1BUX0dOVVRMUy9iaW4vbGliZ251dGxzLWNvbmZpZworICAgICAgY2hlY2s9YCRjZmcgLS12ZXJzaW9uIDI+L2Rldi9udWxsYAorICAgICAgaWYgdGVzdCAtbiAiJGNoZWNrIjsgdGhlbgorICAgICAgICBhZGRsaWI9YCRjZmcgLS1saWJzYAorICAgICAgICBhZGRjZmxhZ3M9YCRjZmcgLS1jZmxhZ3NgCisgICAgICAgIHZlcnNpb249YCRjZmcgLS12ZXJzaW9uYAorICAgICAgICBndGxzbGliPWAkY2ZnIC0tcHJlZml4YC9saWIkbGlic3VmZgorICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZGxpYj0tbGdudXRscworICAgICAgICBhZGRsZD0tTCRPUFRfR05VVExTL2xpYiRsaWJzdWZmCisgICAgICAgIGFkZGNmbGFncz0tSSRPUFRfR05VVExTL2luY2x1ZGUKKyAgICAgICAgdmVyc2lvbj0iIiAjIHdlIGp1c3QgZG9uJ3Qga25vdworICAgICAgICBndGxzbGliPSRPUFRfR05VVExTL2xpYiRsaWJzdWZmCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkdmVyc2lvbiI7IHRoZW4KKyAgICAgICAgICAgIHZlcnNpb249InVua25vd24iCisgICAgZmkKKworICAgIGlmIHRlc3QgLW4gIiRhZGRsaWIiOyB0aGVuCisKKyAgICAgIENMRUFOTElCUz0iJExJQlMiCisgICAgICBDTEVBTkNQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgICBDTEVBRExERkxBR1M9IiRMREZMQUdTIgorCisgICAgICBMSUJTPSIkTElCUyAkYWRkbGliIgorICAgICAgTERGTEFHUz0iJExERkxBR1MgJGFkZGxkIgorICAgICAgaWYgdGVzdCAiJGFkZGNmbGFncyIgIT0gIi1JL3Vzci9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkYWRkY2ZsYWdzIgorICAgICAgZmkKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ251dGxzX2NoZWNrX3ZlcnNpb24gaW4gLWxnbnV0bHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdudXRsc19jaGVja192ZXJzaW9uIGluIC1sZ251dGxzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9nbnV0bHNfZ251dGxzX2NoZWNrX3ZlcnNpb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGdudXRscyAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ251dGxzX2NoZWNrX3ZlcnNpb24gKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBnbnV0bHNfY2hlY2tfdmVyc2lvbiAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2dudXRsc19nbnV0bHNfY2hlY2tfdmVyc2lvbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2dudXRsc19nbnV0bHNfY2hlY2tfdmVyc2lvbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZ251dGxzX2dudXRsc19jaGVja192ZXJzaW9uIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2dudXRsc19nbnV0bHNfY2hlY2tfdmVyc2lvbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9nbnV0bHNfZ251dGxzX2NoZWNrX3ZlcnNpb24iID0geCIieWVzOyB0aGVuIDoKKworCiskYXNfZWNobyAiI2RlZmluZSBVU0VfR05VVExTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgVVNFX0dOVVRMUz0xCisKKyAgICAgICBHTlVUTFNfRU5BQkxFRD0xCisgICAgICAgVVNFX0dOVVRMUz0ieWVzIgorICAgICAgIGN1cmxfc3NsX21zZz0iZW5hYmxlZCAoR251VExTKSIKKworZWxzZQorCisgICAgICAgICBMSUJTPSIkQ0xFQU5MSUJTIgorICAgICAgICAgQ1BQRkxBR1M9IiRDTEVBTkNQUEZMQUdTIgorCitmaQorCisKKyAgICAgIGlmIHRlc3QgIngkVVNFX0dOVVRMUyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkZXRlY3RlZCBHbnVUTFMgdmVyc2lvbiAkdmVyc2lvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBkZXRlY3RlZCBHbnVUTFMgdmVyc2lvbiAkdmVyc2lvbiIgPiY2O30KKworICAgICAgICBpZiB0ZXN0IC1uICIkZ3Rsc2xpYiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgICAgTERfTElCUkFSWV9QQVRIPSIkTERfTElCUkFSWV9QQVRIOiRndGxzbGliIgorICAgICAgICAgICAgZXhwb3J0IExEX0xJQlJBUllfUEFUSAorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBBZGRlZCAkZ3Rsc2xpYiB0byBMRF9MSUJSQVJZX1BBVEgiID4mNQorJGFzX2VjaG8gIiRhc19tZTogQWRkZWQgJGd0bHNsaWIgdG8gTERfTElCUkFSWV9QQVRIIiA+JjY7fQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorCisgICAgZmkKKworICBmaQorZmkKKworaWYgdGVzdCAiJEdOVVRMU19FTkFCTEVEIiA9ICIxIjsgdGhlbgorICBVU0VfR05VVExTX05FVFRMRT0KKyAgIyBGaXJzdCBjaGVjayBpZiB3ZSBjYW4gZGV0ZWN0IGVpdGhlciBjcnlwdG8gbGlicmFyeSB2aWEgdHJhbnNpdGl2ZSBsaW5raW5nCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5ldHRsZV9NRDVJbml0IGluIC1sZ251dGxzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBuZXR0bGVfTUQ1SW5pdCBpbiAtbGdudXRscy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZ251dGxzX25ldHRsZV9NRDVJbml0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxnbnV0bHMgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIG5ldHRsZV9NRDVJbml0ICgpOworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gbmV0dGxlX01ENUluaXQgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9nbnV0bHNfbmV0dGxlX01ENUluaXQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9nbnV0bHNfbmV0dGxlX01ENUluaXQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2dudXRsc19uZXR0bGVfTUQ1SW5pdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9nbnV0bHNfbmV0dGxlX01ENUluaXQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZ251dGxzX25ldHRsZV9NRDVJbml0IiA9IHgiInllczsgdGhlbiA6CisgICBVU0VfR05VVExTX05FVFRMRT0xCitmaQorCisgIGlmIHRlc3QgIiRVU0VfR05VVExTX05FVFRMRSIgPSAiIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdjcnlfY29udHJvbCBpbiAtbGdudXRscyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2NyeV9jb250cm9sIGluIC1sZ251dGxzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9nbnV0bHNfZ2NyeV9jb250cm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxnbnV0bHMgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdjcnlfY29udHJvbCAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdjcnlfY29udHJvbCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2dudXRsc19nY3J5X2NvbnRyb2w9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9nbnV0bHNfZ2NyeV9jb250cm9sPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9nbnV0bHNfZ2NyeV9jb250cm9sIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2dudXRsc19nY3J5X2NvbnRyb2wiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZ251dGxzX2djcnlfY29udHJvbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICAgVVNFX0dOVVRMU19ORVRUTEU9MAorZmkKKworICBmaQorICAjIElmIG5vdCwgdHJ5IGxpbmtpbmcgZGlyZWN0bHkgdG8gYm90aCBvZiB0aGVtIHRvIHNlZSBpZiB0aGV5IGFyZSBhdmFpbGFibGUKKyAgaWYgdGVzdCAiJFVTRV9HTlVUTFNfTkVUVExFIiA9ICIiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbmV0dGxlX01ENUluaXQgaW4gLWxuZXR0bGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5ldHRsZV9NRDVJbml0IGluIC1sbmV0dGxlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9uZXR0bGVfbmV0dGxlX01ENUluaXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbG5ldHRsZSAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgbmV0dGxlX01ENUluaXQgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBuZXR0bGVfTUQ1SW5pdCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX25ldHRsZV9uZXR0bGVfTUQ1SW5pdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX25ldHRsZV9uZXR0bGVfTUQ1SW5pdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbmV0dGxlX25ldHRsZV9NRDVJbml0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX25ldHRsZV9uZXR0bGVfTUQ1SW5pdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9uZXR0bGVfbmV0dGxlX01ENUluaXQiID0geCIieWVzOyB0aGVuIDoKKyAgIFVTRV9HTlVUTFNfTkVUVExFPTEKK2ZpCisKKyAgZmkKKyAgaWYgdGVzdCAiJFVTRV9HTlVUTFNfTkVUVExFIiA9ICIiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2NyeV9jb250cm9sIGluIC1sZ2NyeXB0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBnY3J5X2NvbnRyb2wgaW4gLWxnY3J5cHQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2djcnlwdF9nY3J5X2NvbnRyb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGdjcnlwdCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2NyeV9jb250cm9sICgpOworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZ2NyeV9jb250cm9sICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZ2NyeXB0X2djcnlfY29udHJvbD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2djcnlwdF9nY3J5X2NvbnRyb2w9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2djcnlwdF9nY3J5X2NvbnRyb2wiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZ2NyeXB0X2djcnlfY29udHJvbCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9nY3J5cHRfZ2NyeV9jb250cm9sIiA9IHgiInllczsgdGhlbiA6CisgICBVU0VfR05VVExTX05FVFRMRT0wCitmaQorCisgIGZpCisgIGlmIHRlc3QgIiRVU0VfR05VVExTX05FVFRMRSIgPSAiIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJHbnVUTFMgZm91bmQsIGJ1dCBuZWl0aGVyIGdjcnlwdCBub3IgbmV0dGxlIGZvdW5kIiAiJExJTkVOTyIgNQorICBmaQorICBpZiB0ZXN0ICIkVVNFX0dOVVRMU19ORVRUTEUiID0gIjEiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9HTlVUTFNfTkVUVExFIDEiID4+Y29uZmRlZnMuaAorCisgICAgVVNFX0dOVVRMU19ORVRUTEU9MQorCisgICAgTElCUz0iJExJQlMgLWxuZXR0bGUiCisgIGVsc2UKKyAgICBMSUJTPSIkTElCUyAtbGdjcnlwdCIKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIiRHTlVUTFNfRU5BQkxFRCIgPSAiMSI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ251dGxzX3NycF92ZXJpZmllciBpbiAtbGdudXRscyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ251dGxzX3NycF92ZXJpZmllciBpbiAtbGdudXRscy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZ251dGxzX2dudXRsc19zcnBfdmVyaWZpZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGdudXRscyAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ251dGxzX3NycF92ZXJpZmllciAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdudXRsc19zcnBfdmVyaWZpZXIgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9nbnV0bHNfZ251dGxzX3NycF92ZXJpZmllcj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2dudXRsc19nbnV0bHNfc3JwX3ZlcmlmaWVyPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9nbnV0bHNfZ251dGxzX3NycF92ZXJpZmllciIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9nbnV0bHNfZ251dGxzX3NycF92ZXJpZmllciIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9nbnV0bHNfZ251dGxzX3NycF92ZXJpZmllciIgPSB4IiJ5ZXM7IHRoZW4gOgorCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR05VVExTX1NSUCAxIiA+PmNvbmZkZWZzLmgKKworICAgICBIQVZFX0dOVVRMU19TUlA9MQorCisKK2ZpCisKK2ZpCisKKworT1BUX1BPTEFSU1NMPW5vCisKK19jcHBmbGFncz0kQ1BQRkxBR1MKK19sZGZsYWdzPSRMREZMQUdTCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcG9sYXJzc2wgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BvbGFyc3NsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9wb2xhcnNzbDsgT1BUX1BPTEFSU1NMPSR3aXRodmFsCitmaQorCisKK2lmIHRlc3QgIiRPUEVOU1NMX0VOQUJMRUQiICE9ICIxIjsgdGhlbgorCisgIGlmIHRlc3QgWCIkT1BUX1BPTEFSU1NMIiAhPSBYbm87IHRoZW4KKworICAgIGlmIHRlc3QgIiRPUFRfUE9MQVJTU0wiID0gInllcyI7IHRoZW4KKyAgICAgIE9QVF9QT0xBUlNTTD0iIgorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkT1BUX1BPTEFSU1NMIiA7IHRoZW4KKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaGF2ZWdlX2luaXQgaW4gLWxwb2xhcnNzbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgaGF2ZWdlX2luaXQgaW4gLWxwb2xhcnNzbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfcG9sYXJzc2xfaGF2ZWdlX2luaXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHBvbGFyc3NsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBoYXZlZ2VfaW5pdCAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGhhdmVnZV9pbml0ICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfcG9sYXJzc2xfaGF2ZWdlX2luaXQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9wb2xhcnNzbF9oYXZlZ2VfaW5pdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcG9sYXJzc2xfaGF2ZWdlX2luaXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcG9sYXJzc2xfaGF2ZWdlX2luaXQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfcG9sYXJzc2xfaGF2ZWdlX2luaXQiID0geCIieWVzOyB0aGVuIDoKKworCiskYXNfZWNobyAiI2RlZmluZSBVU0VfUE9MQVJTU0wgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgIFVTRV9QT0xBUlNTTD0xCisKKyAgICAgICAgIFBPTEFSU1NMX0VOQUJMRUQ9MQorICAgICAgICAgVVNFX1BPTEFSU1NMPSJ5ZXMiCisgICAgICAgICBjdXJsX3NzbF9tc2c9ImVuYWJsZWQgKFBvbGFyU1NMKSIKKworZmkKKworICAgIGZpCisKKyAgICBpZiB0ZXN0ICJ4JFVTRV9QT0xBUlNTTCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgICBhZGRsZD0tTCRPUFRfUE9MQVJTU0wvbGliJGxpYnN1ZmYKKyAgICAgIGFkZGNmbGFncz0tSSRPUFRfUE9MQVJTU0wvaW5jbHVkZQorICAgICAgcG9sYXJzc2xsaWI9JE9QVF9QT0xBUlNTTC9saWIkbGlic3VmZgorCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAkYWRkbGQiCisgICAgICBpZiB0ZXN0ICIkYWRkY2ZsYWdzIiAhPSAiLUkvdXNyL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRhZGRjZmxhZ3MiCisgICAgICBmaQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzc2xfaW5pdCBpbiAtbHBvbGFyc3NsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzc2xfaW5pdCBpbiAtbHBvbGFyc3NsLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9wb2xhcnNzbF9zc2xfaW5pdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scG9sYXJzc2wgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHNzbF9pbml0ICgpOworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gc3NsX2luaXQgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9wb2xhcnNzbF9zc2xfaW5pdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3BvbGFyc3NsX3NzbF9pbml0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9wb2xhcnNzbF9zc2xfaW5pdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9wb2xhcnNzbF9zc2xfaW5pdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wb2xhcnNzbF9zc2xfaW5pdCIgPSB4IiJ5ZXM7IHRoZW4gOgorCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9QT0xBUlNTTCAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgIFVTRV9QT0xBUlNTTD0xCisKKyAgICAgICBQT0xBUlNTTF9FTkFCTEVEPTEKKyAgICAgICBVU0VfUE9MQVJTU0w9InllcyIKKyAgICAgICBjdXJsX3NzbF9tc2c9ImVuYWJsZWQgKFBvbGFyU1NMKSIKKworZWxzZQorCisgICAgICAgICBDUFBGTEFHUz0kX2NwcGZsYWdzCisgICAgICAgICBMREZMQUdTPSRfbGRmbGFncworCitmaQorCisgICAgZmkKKworICAgIGlmIHRlc3QgIngkVVNFX1BPTEFSU1NMIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkZXRlY3RlZCBQb2xhclNTTCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBkZXRlY3RlZCBQb2xhclNTTCIgPiY2O30KKworICAgICAgQ1VSTF9MSUJTPSIkQ1VSTF9MSUJTIC1scG9sYXJzc2wiCisgICAgICBMSUJTPSIkTElCUyAtbHBvbGFyc3NsIgorCisgICAgICBpZiB0ZXN0IC1uICIkcG9sYXJzc2xsaWIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgIExEX0xJQlJBUllfUEFUSD0iJExEX0xJQlJBUllfUEFUSDokcG9sYXJzc2xsaWIiCisgICAgICAgICAgZXhwb3J0IExEX0xJQlJBUllfUEFUSAorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogQWRkZWQgJHBvbGFyc3NsbGliIHRvIExEX0xJQlJBUllfUEFUSCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBBZGRlZCAkcG9sYXJzc2xsaWIgdG8gTERfTElCUkFSWV9QQVRIIiA+JjY7fQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorCisgIGZpCitmaQorCitPUFRfQ1lBU1NMPW5vCisKK19jcHBmbGFncz0kQ1BQRkxBR1MKK19sZGZsYWdzPSRMREZMQUdTCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY3lhc3NsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9jeWFzc2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2N5YXNzbDsgT1BUX0NZQVNTTD0kd2l0aHZhbAorZmkKKworCitpZiB0ZXN0ICIkT1BFTlNTTF9FTkFCTEVEIiAhPSAiMSI7IHRoZW4KKworICBpZiB0ZXN0IFgiJE9QVF9DWUFTU0wiICE9IFhubzsgdGhlbgorCisgICAgaWYgdGVzdCAiJE9QVF9DWUFTU0wiID0gInllcyI7IHRoZW4KKyAgICAgIE9QVF9DWUFTU0w9IiIKKyAgICBmaQorCisgICAgaWYgdGVzdCAteiAiJE9QVF9DWUFTU0wiIDsgdGhlbgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDeWFTU0xfSW5pdCBpbiAtbGN5YXNzbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQ3lhU1NMX0luaXQgaW4gLWxjeWFzc2wuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2N5YXNzbF9DeWFTU0xfSW5pdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sY3lhc3NsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBDeWFTU0xfSW5pdCAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIEN5YVNTTF9Jbml0ICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfY3lhc3NsX0N5YVNTTF9Jbml0PXllcworZWxzZQorICBhY19jdl9saWJfY3lhc3NsX0N5YVNTTF9Jbml0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9jeWFzc2xfQ3lhU1NMX0luaXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfY3lhc3NsX0N5YVNTTF9Jbml0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2N5YXNzbF9DeWFTU0xfSW5pdCIgPSB4IiJ5ZXM7IHRoZW4gOgorCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9DWUFTU0wgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgIFVTRV9DWUFTU0w9MQorCisgICAgICAgICBDWUFTU0xfRU5BQkxFRD0xCisgICAgICAgICBVU0VfQ1lBU1NMPSJ5ZXMiCisgICAgICAgICBjdXJsX3NzbF9tc2c9ImVuYWJsZWQgKEN5YVNTTCkiCisKK2ZpCisKKyAgICBmaQorCisgICAgaWYgdGVzdCAieCRVU0VfQ1lBU1NMIiAhPSAieHllcyI7IHRoZW4KKyAgICAgICAgICAgIGFkZGxkPS1MJE9QVF9DWUFTU0wvbGliJGxpYnN1ZmYKKyAgICAgIGFkZGNmbGFncz0tSSRPUFRfQ1lBU1NML2luY2x1ZGUKKyAgICAgIGN5YXNzbGxpYj0kT1BUX0NZQVNTTC9saWIkbGlic3VmZgorCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAkYWRkbGQiCisgICAgICBpZiB0ZXN0ICIkYWRkY2ZsYWdzIiAhPSAiLUkvdXNyL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRhZGRjZmxhZ3MiCisgICAgICBmaQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDeWFTU0xfSW5pdCBpbiAtbGN5YXNzbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQ3lhU1NMX0luaXQgaW4gLWxjeWFzc2wuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2N5YXNzbF9DeWFTU0xfSW5pdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sY3lhc3NsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBDeWFTU0xfSW5pdCAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIEN5YVNTTF9Jbml0ICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfY3lhc3NsX0N5YVNTTF9Jbml0PXllcworZWxzZQorICBhY19jdl9saWJfY3lhc3NsX0N5YVNTTF9Jbml0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9jeWFzc2xfQ3lhU1NMX0luaXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfY3lhc3NsX0N5YVNTTF9Jbml0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2N5YXNzbF9DeWFTU0xfSW5pdCIgPSB4IiJ5ZXM7IHRoZW4gOgorCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9DWUFTU0wgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICBVU0VfQ1lBU1NMPTEKKworICAgICAgIENZQVNTTF9FTkFCTEVEPTEKKyAgICAgICBVU0VfQ1lBU1NMPSJ5ZXMiCisgICAgICAgY3VybF9zc2xfbXNnPSJlbmFibGVkIChDeWFTU0wpIgorCitlbHNlCisKKyAgICAgICAgIENQUEZMQUdTPSRfY3BwZmxhZ3MKKyAgICAgICAgIExERkxBR1M9JF9sZGZsYWdzCisKK2ZpCisKKyAgICBmaQorCisgICAgaWYgdGVzdCAieCRVU0VfQ1lBU1NMIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkZXRlY3RlZCBDeWFTU0wiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZGV0ZWN0ZWQgQ3lhU1NMIiA+JjY7fQorCisgICAgICBDVVJMX0xJQlM9IiRDVVJMX0xJQlMgLWxjeWFzc2wgLWxtIgorICAgICAgTElCUz0iJExJQlMgLWxjeWFzc2wgLWxtIgorCisgICAgICBpZiB0ZXN0IC1uICIkY3lhc3NsbGliIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyI7IHRoZW4KKyAgICAgICAgICBMRF9MSUJSQVJZX1BBVEg9IiRMRF9MSUJSQVJZX1BBVEg6JGN5YXNzbGxpYiIKKyAgICAgICAgICBleHBvcnQgTERfTElCUkFSWV9QQVRICisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBBZGRlZCAkY3lhc3NsbGliIHRvIExEX0xJQlJBUllfUEFUSCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBBZGRlZCAkY3lhc3NsbGliIHRvIExEX0xJQlJBUllfUEFUSCIgPiY2O30KKyAgICAgICAgZmkKKyAgICAgIGZpCisKKyAgICBmaQorCisgIGZpCitmaQorCitPUFRfTlNTPW5vCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1uc3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX25zcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbnNzOyBPUFRfTlNTPSR3aXRodmFsCitmaQorCisKK2lmIHRlc3QgIiRPUEVOU1NMX0VOQUJMRUQiICE9ICIxIiAtYSAiJEdOVVRMU19FTkFCTEVEIiAhPSAiMSI7IHRoZW4KKworICBpZiB0ZXN0IFgiJE9QVF9OU1MiICE9IFhubzsgdGhlbgorICAgIGlmIHRlc3QgIngkT1BUX05TUyIgPSAieHllcyI7IHRoZW4KKworCisKKyAgICBQS0dDT05GSUc9Im5vIgorCisgICAgaWYgdGVzdCB4JGNyb3NzX2NvbXBpbGluZyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHtob3N0fS1wa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2hvc3R9LXBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1BLR0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRQS0dDT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iCitmb3IgYXNfZGlyIGluICRhc19kdW1teQorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHQ09ORklHIiAmJiBhY19jdl9wYXRoX1BLR0NPTkZJRz0ibm8iCisgIDs7Citlc2FjCitmaQorUEtHQ09ORklHPSRhY19jdl9wYXRoX1BLR0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dDT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dDT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIGZpCisKKyAgICBpZiB0ZXN0IHgkUEtHQ09ORklHID0geG5vOyB0aGVuCisgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1BLR0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRQS0dDT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iCitmb3IgYXNfZGlyIGluICRhc19kdW1teQorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHQ09ORklHIiAmJiBhY19jdl9wYXRoX1BLR0NPTkZJRz0ibm8iCisgIDs7Citlc2FjCitmaQorUEtHQ09ORklHPSRhY19jdl9wYXRoX1BLR0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dDT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dDT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIGZpCisKKyAgICBpZiB0ZXN0IHgkUEtHQ09ORklHICE9IHhubzsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbnNzIG9wdGlvbnMgd2l0aCBwa2ctY29uZmlnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBuc3Mgb3B0aW9ucyB3aXRoIHBrZy1jb25maWcuLi4gIiA+JjY7IH0KKyAgICAgICAgICAgIGl0ZXhpc3RzPWAKKyAgICBpZiB0ZXN0IC1uICIiOyB0aGVuCisgICAgICBQS0dfQ09ORklHX0xJQkRJUj0iIgorICAgICAgZXhwb3J0IFBLR19DT05GSUdfTElCRElSCisgICAgZmkKKyAgICAgICAgICRQS0dDT05GSUcgLS1leGlzdHMgbnNzID4vZGV2L251bGwgMj4mMSAmJiBlY2hvIDFgCisKKyAgICAgIGlmIHRlc3QgLXogIiRpdGV4aXN0cyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBLR0NPTkZJRz0ibm8iCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgZWxzZQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZm91bmQiID4mNQorJGFzX2VjaG8gImZvdW5kIiA+JjY7IH0KKyAgICAgIGZpCisgICAgZmkKKworCisgICAgICBpZiB0ZXN0ICIkUEtHQ09ORklHIiAhPSAibm8iIDsgdGhlbgorICAgICAgICBhZGRsaWI9YCRQS0dDT05GSUcgLS1saWJzIG5zc2AKKyAgICAgICAgYWRkY2ZsYWdzPWAkUEtHQ09ORklHIC0tY2ZsYWdzIG5zc2AKKyAgICAgICAgdmVyc2lvbj1gJFBLR0NPTkZJRyAtLW1vZHZlcnNpb24gbnNzYAorICAgICAgICBuc3NwcmVmaXg9YCRQS0dDT05GSUcgLS12YXJpYWJsZT1wcmVmaXggbnNzYAorICAgICAgZWxzZQorCisgICAgICAgIGNoZWNrPWBuc3MtY29uZmlnIC0tdmVyc2lvbiAyPi9kZXYvbnVsbGAKKyAgICAgICAgaWYgdGVzdCAtbiAiJGNoZWNrIjsgdGhlbgorICAgICAgICAgIGFkZGxpYj1gbnNzLWNvbmZpZyAtLWxpYnNgCisgICAgICAgICAgYWRkY2ZsYWdzPWBuc3MtY29uZmlnIC0tY2ZsYWdzYAorICAgICAgICAgIHZlcnNpb249YG5zcy1jb25maWcgLS12ZXJzaW9uYAorICAgICAgICAgIG5zc3ByZWZpeD1gbnNzLWNvbmZpZyAtLXByZWZpeGAKKyAgICAgICAgZWxzZQorICAgICAgICAgIGFkZGxpYj0iLWxuc3MzIgorICAgICAgICAgIGFkZGNmbGFncz0iIgorICAgICAgICAgIHZlcnNpb249InVua25vd24iCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgIyBXaXRob3V0IHBrZy1jb25maWcsIHdlJ2xsIGtsdWRnZSBpbiBzb21lIGRlZmF1bHRzCisgICAgICAgIGFkZGxpYj0iLUwkT1BUX05TUy9saWIgLWxzc2wzIC1sc21pbWUzIC1sbnNzMyAtbHBsZHM0IC1scGxjNCAtbG5zcHI0IC1scHRocmVhZCAtbGRsIgorICAgICAgICBhZGRjZmxhZ3M9Ii1JJE9QVF9OU1MvaW5jbHVkZSIKKyAgICAgICAgdmVyc2lvbj0idW5rbm93biIKKyAgICAgICAgbnNzcHJlZml4PSRPUFRfTlNTCisgICAgZmkKKworICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUEsxMV9DcmVhdGVHZW5lcmljT2JqZWN0IGluIC1sbnNzMyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgUEsxMV9DcmVhdGVHZW5lcmljT2JqZWN0IGluIC1sbnNzMy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfbnNzM19QSzExX0NyZWF0ZUdlbmVyaWNPYmplY3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbG5zczMgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIFBLMTFfQ3JlYXRlR2VuZXJpY09iamVjdCAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIFBLMTFfQ3JlYXRlR2VuZXJpY09iamVjdCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX25zczNfUEsxMV9DcmVhdGVHZW5lcmljT2JqZWN0PXllcworZWxzZQorICBhY19jdl9saWJfbnNzM19QSzExX0NyZWF0ZUdlbmVyaWNPYmplY3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX25zczNfUEsxMV9DcmVhdGVHZW5lcmljT2JqZWN0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX25zczNfUEsxMV9DcmVhdGVHZW5lcmljT2JqZWN0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX25zczNfUEsxMV9DcmVhdGVHZW5lcmljT2JqZWN0IiA9IHgiInllczsgdGhlbiA6CisKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1Q9MQorCisKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWRkbGliIjsgdGhlbgorCisgICAgICBDTEVBTkxJQlM9IiRMSUJTIgorICAgICAgQ0xFQU5DUFBGTEFHUz0iJENQUEZMQUdTIgorCisgICAgICBMSUJTPSIkTElCUyAkYWRkbGliIgorICAgICAgaWYgdGVzdCAiJGFkZGNmbGFncyIgIT0gIi1JL3Vzci9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkYWRkY2ZsYWdzIgorICAgICAgZmkKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgTlNTX0luaXRpYWxpemUgaW4gLWxuc3MzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBOU1NfSW5pdGlhbGl6ZSBpbiAtbG5zczMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX25zczNfTlNTX0luaXRpYWxpemUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbG5zczMgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIE5TU19Jbml0aWFsaXplICgpOworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gTlNTX0luaXRpYWxpemUgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9uc3MzX05TU19Jbml0aWFsaXplPXllcworZWxzZQorICBhY19jdl9saWJfbnNzM19OU1NfSW5pdGlhbGl6ZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbnNzM19OU1NfSW5pdGlhbGl6ZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9uc3MzX05TU19Jbml0aWFsaXplIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX25zczNfTlNTX0luaXRpYWxpemUiID0geCIieWVzOyB0aGVuIDoKKworCiskYXNfZWNobyAiI2RlZmluZSBVU0VfTlNTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgVVNFX05TUz0xCisKKyAgICAgICBVU0VfTlNTPSJ5ZXMiCisgICAgICAgTlNTX0VOQUJMRUQ9MQorICAgICAgIGN1cmxfc3NsX21zZz0iZW5hYmxlZCAoTlNTKSIKKworZWxzZQorCisgICAgICAgICBMSUJTPSIkQ0xFQU5MSUJTIgorICAgICAgICAgQ1BQRkxBR1M9IiRDTEVBTkNQUEZMQUdTIgorCitmaQorCisKKyAgICAgIGlmIHRlc3QgIngkVVNFX05TUyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkZXRlY3RlZCBOU1MgdmVyc2lvbiAkdmVyc2lvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBkZXRlY3RlZCBOU1MgdmVyc2lvbiAkdmVyc2lvbiIgPiY2O30KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyI7IHRoZW4KKyAgICAgICAgICBMRF9MSUJSQVJZX1BBVEg9IiRMRF9MSUJSQVJZX1BBVEg6JG5zc3ByZWZpeC9saWIkbGlic3VmZiIKKyAgICAgICAgICBleHBvcnQgTERfTElCUkFSWV9QQVRICisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBBZGRlZCAkbnNzcHJlZml4L2xpYiRsaWJzdWZmIHRvIExEX0xJQlJBUllfUEFUSCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBBZGRlZCAkbnNzcHJlZml4L2xpYiRsaWJzdWZmIHRvIExEX0xJQlJBUllfUEFUSCIgPiY2O30KKyAgICAgICAgZmkKKyAgICAgIGZpCisKKyAgICBmaQorCisgIGZpCitmaQorT1BUX0FYVExTPW9mZgorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYXh0bHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2F4dGxzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9heHRsczsgT1BUX0FYVExTPSR3aXRodmFsCitmaQorCisKK2lmIHRlc3QgIiRjdXJsX3NzbF9tc2ciID0gIiRpbml0X3NzbF9tc2ciOyB0aGVuCisgIGlmIHRlc3QgWCIkT1BUX0FYVExTIiAhPSBYbm87IHRoZW4KKyAgICAgICAgQ0xFQU5MREZMQUdTPSIkTERGTEFHUyIKKyAgICBDTEVBTkNQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgQ0xFQU5MSUJTPSIkTElCUyIKKworICAgIGNhc2UgIiRPUFRfQVhUTFMiIGluCisgICAgeWVzKQorICAgICAgICAgICAgUFJFRklYX0FYVExTPS91c3IvbG9jYWwKKyAgICAgIExJQl9BWFRMUz0iJFBSRUZJWF9BWFRMUy9saWIiCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtTCRMSUJfQVhUTFMiCisgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJFBSRUZJWF9BWFRMUy9pbmNsdWRlIgorICAgICAgOzsKKyAgICBvZmYpCisgICAgICAgICAgICBQUkVGSVhfQVhUTFM9CisgICAgICA7OworICAgICopCisgICAgICAgICAgICBQUkVGSVhfQVhUTFM9JE9QVF9BWFRMUworICAgICAgTElCX0FYVExTPSIkUFJFRklYX0FYVExTL2xpYiIKKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1MJExJQl9BWFRMUyIKKyAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkUFJFRklYX0FYVExTL2luY2x1ZGUiCisgICAgICA7OworICAgIGVzYWMKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNzbF92ZXJzaW9uIGluIC1sYXh0bHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNzbF92ZXJzaW9uIGluIC1sYXh0bHMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2F4dGxzX3NzbF92ZXJzaW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxheHRscyAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc3NsX3ZlcnNpb24gKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzc2xfdmVyc2lvbiAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2F4dGxzX3NzbF92ZXJzaW9uPXllcworZWxzZQorICBhY19jdl9saWJfYXh0bHNfc3NsX3ZlcnNpb249bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2F4dGxzX3NzbF92ZXJzaW9uIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2F4dGxzX3NzbF92ZXJzaW9uIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2F4dGxzX3NzbF92ZXJzaW9uIiA9IHgiInllczsgdGhlbiA6CisKKyAgICAgIExJQlM9Ii1sYXh0bHMgJExJQlMiCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9BWFRMUyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgVVNFX0FYVExTPTEKKworICAgICAgQVhUTFNfRU5BQkxFRD0xCisgICAgICBVU0VfQVhUTFM9InllcyIKKyAgICAgIGN1cmxfc3NsX21zZz0iZW5hYmxlZCAoYXhUTFMpIgorCisKKyAgICAgIExEX0xJQlJBUllfUEFUSD0iJExEX0xJQlJBUllfUEFUSDokTElCX0FYVExTIgorICAgICAgZXhwb3J0IExEX0xJQlJBUllfUEFUSAorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBBZGRlZCAkTElCX0FYVExTIHRvIExEX0xJQlJBUllfUEFUSCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBBZGRlZCAkTElCX0FYVExTIHRvIExEX0xJQlJBUllfUEFUSCIgPiY2O30KKworZWxzZQorCisgICAgICBMREZMQUdTPSIkQ0xFQU5MREZMQUdTIgorICAgICAgQ1BQRkxBR1M9IiRDTEVBTkNQUEZMQUdTIgorICAgICAgTElCUz0iJENMRUFOTElCUyIKKworZmkKKworICBmaQorZmkKKworaWYgdGVzdCAieCRPUEVOU1NMX0VOQUJMRUQkR05VVExTX0VOQUJMRUQkTlNTX0VOQUJMRUQkUE9MQVJTU0xfRU5BQkxFRCRBWFRMU19FTkFCTEVEJENZQVNTTF9FTkFCTEVEIiA9ICJ4IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFNTTCBkaXNhYmxlZCwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIEhUVFBTLCBGVFBTLCBOVExNIGFuZCBtb3JlLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBTU0wgZGlzYWJsZWQsIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHVzZSBIVFRQUywgRlRQUywgTlRMTSBhbmQgbW9yZS4iID4mMjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVXNlIC0td2l0aC1zc2wsIC0td2l0aC1nbnV0bHMsIC0td2l0aC1wb2xhcnNzbCwgLS13aXRoLWN5YXNzbCwgLS13aXRoLW5zcyBvciAtLXdpdGgtYXh0bHMgdG8gYWRkcmVzcyB0aGlzLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVc2UgLS13aXRoLXNzbCwgLS13aXRoLWdudXRscywgLS13aXRoLXBvbGFyc3NsLCAtLXdpdGgtY3lhc3NsLCAtLXdpdGgtbnNzIG9yIC0td2l0aC1heHRscyB0byBhZGRyZXNzIHRoaXMuIiA+JjI7fQorZWxzZQorICAjIFNTTCBpcyBlbmFibGVkLCBnZW5lcmljbHkKKworICBTU0xfRU5BQkxFRD0iMSIKK2ZpCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZWZhdWx0IENBIGNlcnQgYnVuZGxlL3BhdGgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVmYXVsdCBDQSBjZXJ0IGJ1bmRsZS9wYXRoLi4uICIgPiY2OyB9CisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jYS1idW5kbGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2NhX2J1bmRsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfY2FfYnVuZGxlOworICAgIHdhbnRfY2E9IiR3aXRodmFsIgorICAgIGlmIHRlc3QgIngkd2FudF9jYSIgPSAieHllcyI7IHRoZW4KKyAgICAgIGFzX2ZuX2Vycm9yICItLXdpdGgtY2EtYnVuZGxlPUZJTEUgcmVxdWlyZXMgYSBwYXRoIHRvIHRoZSBDQSBidW5kbGUiICIkTElORU5PIiA1CisgICAgZmkKKworZWxzZQorICAgd2FudF9jYT0idW5zZXQiCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2EtcGF0aCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfY2FfcGF0aCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfY2FfcGF0aDsKKyAgICB3YW50X2NhcGF0aD0iJHdpdGh2YWwiCisgICAgaWYgdGVzdCAieCR3YW50X2NhcGF0aCIgPSAieHllcyI7IHRoZW4KKyAgICAgIGFzX2ZuX2Vycm9yICItLXdpdGgtY2EtcGF0aD1ESVJFQ1RPUlkgcmVxdWlyZXMgYSBwYXRoIHRvIHRoZSBDQSBwYXRoIGRpcmVjdG9yeSIgIiRMSU5FTk8iIDUKKyAgICBmaQorCitlbHNlCisgICB3YW50X2NhcGF0aD0idW5zZXQiCitmaQorCisKKyAgaWYgdGVzdCAieCR3YW50X2NhIiAhPSAieG5vIiAtYSAieCR3YW50X2NhIiAhPSAieHVuc2V0IiAtYSBcCisgICAgICAgICAgIngkd2FudF9jYXBhdGgiICE9ICJ4bm8iIC1hICJ4JHdhbnRfY2FwYXRoIiAhPSAieHVuc2V0IjsgdGhlbgorICAgICAgICBhc19mbl9lcnJvciAiQ2FuJ3Qgc3BlY2lmeSBib3RoIC0td2l0aC1jYS1idW5kbGUgYW5kIC0td2l0aC1jYS1wYXRoLiIgIiRMSU5FTk8iIDUKKyAgZWxpZiB0ZXN0ICJ4JHdhbnRfY2EiICE9ICJ4bm8iIC1hICJ4JHdhbnRfY2EiICE9ICJ4dW5zZXQiOyB0aGVuCisgICAgICAgIGNhPSIkd2FudF9jYSIKKyAgICBjYXBhdGg9Im5vIgorICBlbGlmIHRlc3QgIngkd2FudF9jYXBhdGgiICE9ICJ4bm8iIC1hICJ4JHdhbnRfY2FwYXRoIiAhPSAieHVuc2V0IjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJ4JE9QRU5TU0xfRU5BQkxFRCIgIT0gIngxIjsgdGhlbgorICAgICAgYXNfZm5fZXJyb3IgIi0td2l0aC1jYS1wYXRoIG9ubHkgd29ya3Mgd2l0aCBvcGVuU1NMIiAiJExJTkVOTyIgNQorICAgIGZpCisgICAgY2FwYXRoPSIkd2FudF9jYXBhdGgiCisgICAgY2E9Im5vIgorICBlbHNlCisgICAgICAgICAgICAgICAgY2E9Im5vIgorICAgIGNhcGF0aD0ibm8iCisgICAgaWYgdGVzdCAieCR3YW50X2NhIiA9ICJ4dW5zZXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgICAgICAgY2FjPSIke3ByZWZpeH0vc2hhcmUvY3VybC9jdXJsLWNhLWJ1bmRsZS5jcnQiCisgICAgICBlbHNlCisgICAgICAgIGNhYz0iJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2N1cmwvY3VybC1jYS1idW5kbGUuY3J0IgorICAgICAgZmkKKworICAgICAgZm9yIGEgaW4gL2V0Yy9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCBcCisgICAgICAgICAgICAgICAvZXRjL3BraS90bHMvY2VydHMvY2EtYnVuZGxlLmNydCBcCisgICAgICAgICAgICAgICAvdXNyL3NoYXJlL3NzbC9jZXJ0cy9jYS1idW5kbGUuY3J0IFwKKyAgICAgICAgICAgICAgIC91c3IvbG9jYWwvc2hhcmUvY2VydHMvY2Etcm9vdC5jcnQgXAorICAgICAgICAgICAgICAgL2V0Yy9zc2wvY2VydC5wZW0gXAorICAgICAgICAgICAgICAgIiRjYWMiOyBkbworICAgICAgICBpZiB0ZXN0IC1mICIkYSI7IHRoZW4KKyAgICAgICAgICBjYT0iJGEiCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIGlmIHRlc3QgIngkd2FudF9jYXBhdGgiID0gInh1bnNldCIgLWEgIngkY2EiID0gInhubyIgLWEgXAorICAgICAgICAgICAgIngkT1BFTlNTTF9FTkFCTEVEIiA9ICJ4MSI7IHRoZW4KKyAgICAgIGZvciBhIGluIC9ldGMvc3NsL2NlcnRzLzsgZG8KKyAgICAgICAgaWYgdGVzdCAtZCAiJGEiICYmIGxzICIkYSIvWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXS4wID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICBjYXBhdGg9IiRhIgorICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgZmkKKyAgZmkKKworCisKKyAgaWYgdGVzdCAieCRjYSIgIT0gInhubyI7IHRoZW4KKyAgICBDVVJMX0NBX0JVTkRMRT0nIickY2EnIicKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBDVVJMX0NBX0JVTkRMRSAiJGNhIgorX0FDRU9GCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2EiID4mNQorJGFzX2VjaG8gIiRjYSIgPiY2OyB9CisgIGVsaWYgdGVzdCAieCRjYXBhdGgiICE9ICJ4bm8iOyB0aGVuCisgICAgQ1VSTF9DQV9QQVRIPSJcIiRjYXBhdGhcIiIKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBDVVJMX0NBX1BBVEggIiRjYXBhdGgiCitfQUNFT0YKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2FwYXRoIChjYXBhdGgpIiA+JjUKKyRhc19lY2hvICIkY2FwYXRoIChjYXBhdGgpIiA+JjY7IH0KKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBmaQorCisKKworT1BUX0xJQlNTSDI9b2ZmCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlic3NoMiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbGlic3NoMitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGlic3NoMjsgT1BUX0xJQlNTSDI9JHdpdGh2YWwKK2ZpCisKKworaWYgdGVzdCBYIiRPUFRfTElCU1NIMiIgIT0gWG5vOyB0aGVuCisgICAgQ0xFQU5MREZMQUdTPSIkTERGTEFHUyIKKyAgQ0xFQU5DUFBGTEFHUz0iJENQUEZMQUdTIgorICBDTEVBTkxJQlM9IiRMSUJTIgorCisgIGNhc2UgIiRPUFRfTElCU1NIMiIgaW4KKyAgeWVzKQorCisKKyAgICBQS0dDT05GSUc9Im5vIgorCisgICAgaWYgdGVzdCB4JGNyb3NzX2NvbXBpbGluZyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHtob3N0fS1wa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2hvc3R9LXBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1BLR0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRQS0dDT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iCitmb3IgYXNfZGlyIGluICRhc19kdW1teQorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHQ09ORklHIiAmJiBhY19jdl9wYXRoX1BLR0NPTkZJRz0ibm8iCisgIDs7Citlc2FjCitmaQorUEtHQ09ORklHPSRhY19jdl9wYXRoX1BLR0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dDT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dDT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIGZpCisKKyAgICBpZiB0ZXN0IHgkUEtHQ09ORklHID0geG5vOyB0aGVuCisgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1BLR0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRQS0dDT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iCitmb3IgYXNfZGlyIGluICRhc19kdW1teQorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHQ09ORklHIiAmJiBhY19jdl9wYXRoX1BLR0NPTkZJRz0ibm8iCisgIDs7Citlc2FjCitmaQorUEtHQ09ORklHPSRhY19jdl9wYXRoX1BLR0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dDT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dDT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIGZpCisKKyAgICBpZiB0ZXN0IHgkUEtHQ09ORklHICE9IHhubzsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlic3NoMiBvcHRpb25zIHdpdGggcGtnLWNvbmZpZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlic3NoMiBvcHRpb25zIHdpdGggcGtnLWNvbmZpZy4uLiAiID4mNjsgfQorICAgICAgICAgICAgaXRleGlzdHM9YAorICAgIGlmIHRlc3QgLW4gIiI7IHRoZW4KKyAgICAgIFBLR19DT05GSUdfTElCRElSPSIiCisgICAgICBleHBvcnQgUEtHX0NPTkZJR19MSUJESVIKKyAgICBmaQorICAgICAgICAgJFBLR0NPTkZJRyAtLWV4aXN0cyBsaWJzc2gyID4vZGV2L251bGwgMj4mMSAmJiBlY2hvIDFgCisKKyAgICAgIGlmIHRlc3QgLXogIiRpdGV4aXN0cyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBLR0NPTkZJRz0ibm8iCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgZWxzZQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZm91bmQiID4mNQorJGFzX2VjaG8gImZvdW5kIiA+JjY7IH0KKyAgICAgIGZpCisgICAgZmkKKworCisgICAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKyAgICAgIExJQl9TU0gyPWAkUEtHQ09ORklHIC0tbGlicy1vbmx5LWwgbGlic3NoMmAKKyAgICAgIExEX1NTSDI9YCRQS0dDT05GSUcgLS1saWJzLW9ubHktTCBsaWJzc2gyYAorICAgICAgQ1BQX1NTSDI9YCRQS0dDT05GSUcgLS1jZmxhZ3Mtb25seS1JIGxpYnNzaDJgCisgICAgICB2ZXJzaW9uPWAkUEtHQ09ORklHIC0tbW9kdmVyc2lvbiBsaWJzc2gyYAorICAgICAgRElSX1NTSDI9YGVjaG8gJExEX1NTSDIgfCAkU0VEIC1lICdzLy1MLy8nYAorICAgIGZpCisKKyAgICA7OworICBvZmYpCisgICAgICAgIDs7CisgICopCisgICAgICAgIFBSRUZJWF9TU0gyPSRPUFRfTElCU1NIMgorICAgIDs7CisgIGVzYWMKKworICAgIGlmIHRlc3QgLW4gIiRQUkVGSVhfU1NIMiI7IHRoZW4KKyAgICBMSUJfU1NIMj0iLWxzc2gyIgorICAgIExEX1NTSDI9LUwke1BSRUZJWF9TU0gyfS9saWIkbGlic3VmZgorICAgIENQUF9TU0gyPS1JJHtQUkVGSVhfU1NIMn0vaW5jbHVkZQorICAgIERJUl9TU0gyPSR7UFJFRklYX1NTSDJ9L2xpYiRsaWJzdWZmCisgIGZpCisKKyAgTERGTEFHUz0iJExERkxBR1MgJExEX1NTSDIiCisgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJENQUF9TU0gyIgorICBMSUJTPSIkTElCUyAkTElCX1NTSDIiCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlic3NoMl9jaGFubmVsX29wZW5fZXggaW4gLWxzc2gyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJzc2gyX2NoYW5uZWxfb3Blbl9leCBpbiAtbHNzaDIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3NzaDJfbGlic3NoMl9jaGFubmVsX29wZW5fZXgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHNzaDIgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGxpYnNzaDJfY2hhbm5lbF9vcGVuX2V4ICgpOworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gbGlic3NoMl9jaGFubmVsX29wZW5fZXggKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zc2gyX2xpYnNzaDJfY2hhbm5lbF9vcGVuX2V4PXllcworZWxzZQorICBhY19jdl9saWJfc3NoMl9saWJzc2gyX2NoYW5uZWxfb3Blbl9leD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3NoMl9saWJzc2gyX2NoYW5uZWxfb3Blbl9leCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zc2gyX2xpYnNzaDJfY2hhbm5lbF9vcGVuX2V4IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3NzaDJfbGlic3NoMl9jaGFubmVsX29wZW5fZXgiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQlNTSDIgMQorX0FDRU9GCisKKyAgTElCUz0iLWxzc2gyICRMSUJTIgorCitmaQorCisKKyAgZm9yIGFjX2hlYWRlciBpbiBsaWJzc2gyLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImxpYnNzaDIuaCIgImFjX2N2X2hlYWRlcl9saWJzc2gyX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpYnNzaDJfaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCU1NIMl9IIDEKK19BQ0VPRgorIGN1cmxfc3NoX21zZz0iZW5hYmxlZCAobGliU1NIMikiCisgICAgTElCU1NIMl9FTkFCTEVEPTEKKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX0xJQlNTSDIgMSIgPj5jb25mZGVmcy5oCisKKyAgICBVU0VfTElCU1NIMj0xCisKKworZmkKKworZG9uZQorCisKKyAgaWYgdGVzdCBYIiRPUFRfTElCU1NIMiIgIT0gWG9mZiAmJgorICAgICB0ZXN0ICIkTElCU1NIMl9FTkFCTEVEIiAhPSAiMSI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAibGliU1NIMiBsaWJzIGFuZC9vciBkaXJlY3RvcmllcyB3ZXJlIG5vdCBmb3VuZCB3aGVyZSBzcGVjaWZpZWQhIiAiJExJTkVOTyIgNQorICBmaQorCisgIGlmIHRlc3QgIiRMSUJTU0gyX0VOQUJMRUQiID0gIjEiOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJERJUl9TU0gyIjsgdGhlbgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhY19mdW5jIGluIGxpYnNzaDJfdmVyc2lvbiBsaWJzc2gyX2luaXQgbGlic3NoMl9leGl0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgbGlic3NoMl9zY3Bfc2VuZDY0IGxpYnNzaDJfc2Vzc2lvbl9oYW5kc2hha2UKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitldmFsIGFzX3ZhbD1cJCRhc19hY192YXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisgICAgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgTERfTElCUkFSWV9QQVRIPSIkTERfTElCUkFSWV9QQVRIOiRESVJfU1NIMiIKKyAgICAgICAgIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEgKKyAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogQWRkZWQgJERJUl9TU0gyIHRvIExEX0xJQlJBUllfUEFUSCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBBZGRlZCAkRElSX1NTSDIgdG8gTERfTElCUkFSWV9QQVRIIiA+JjY7fQorICAgICAgIGZpCisgICAgZmkKKyAgZWxzZQorICAgICAgICBMREZMQUdTPSRDTEVBTkxERkxBR1MKKyAgICBDUFBGTEFHUz0kQ0xFQU5DUFBGTEFHUworICAgIExJQlM9JENMRUFOTElCUworICBmaQorZmkKKworCitPUFRfTElCUlRNUD1vZmYKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJydG1wIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9saWJydG1wK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9saWJydG1wOyBPUFRfTElCUlRNUD0kd2l0aHZhbAorZmkKKworCitpZiB0ZXN0IFgiJE9QVF9MSUJSVE1QIiAhPSBYbm87IHRoZW4KKyAgICBDTEVBTkxERkxBR1M9IiRMREZMQUdTIgorICBDTEVBTkNQUEZMQUdTPSIkQ1BQRkxBR1MiCisgIENMRUFOTElCUz0iJExJQlMiCisKKyAgY2FzZSAiJE9QVF9MSUJSVE1QIiBpbgorICB5ZXMpCisKKworICAgIFBLR0NPTkZJRz0ibm8iCisKKyAgICBpZiB0ZXN0IHgkY3Jvc3NfY29tcGlsaW5nID0geHllczsgdGhlbgorICAgICAgICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2hvc3R9LXBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7aG9zdH0tcGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfUEtHQ09ORklHK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEtHQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BLR0NPTkZJRz0iJFBLR0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2FzX2R1bW15PSIkUEFUSDovdXNyL2JpbjovdXNyL2xvY2FsL2JpbiIKK2ZvciBhc19kaXIgaW4gJGFzX2R1bW15CitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1BLR0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QS0dDT05GSUciICYmIGFjX2N2X3BhdGhfUEtHQ09ORklHPSJubyIKKyAgOzsKK2VzYWMKK2ZpCitQS0dDT05GSUc9JGFjX2N2X3BhdGhfUEtHQ09ORklHCitpZiB0ZXN0IC1uICIkUEtHQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBLR0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgZmkKKworICAgIGlmIHRlc3QgeCRQS0dDT05GSUcgPSB4bm87IHRoZW4KKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfUEtHQ09ORklHK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEtHQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BLR0NPTkZJRz0iJFBLR0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2FzX2R1bW15PSIkUEFUSDovdXNyL2JpbjovdXNyL2xvY2FsL2JpbiIKK2ZvciBhc19kaXIgaW4gJGFzX2R1bW15CitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1BLR0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QS0dDT05GSUciICYmIGFjX2N2X3BhdGhfUEtHQ09ORklHPSJubyIKKyAgOzsKK2VzYWMKK2ZpCitQS0dDT05GSUc9JGFjX2N2X3BhdGhfUEtHQ09ORklHCitpZiB0ZXN0IC1uICIkUEtHQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBLR0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgZmkKKworICAgIGlmIHRlc3QgeCRQS0dDT05GSUcgIT0geG5vOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJydG1wIG9wdGlvbnMgd2l0aCBwa2ctY29uZmlnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJydG1wIG9wdGlvbnMgd2l0aCBwa2ctY29uZmlnLi4uICIgPiY2OyB9CisgICAgICAgICAgICBpdGV4aXN0cz1gCisgICAgaWYgdGVzdCAtbiAiIjsgdGhlbgorICAgICAgUEtHX0NPTkZJR19MSUJESVI9IiIKKyAgICAgIGV4cG9ydCBQS0dfQ09ORklHX0xJQkRJUgorICAgIGZpCisgICAgICAgICAkUEtHQ09ORklHIC0tZXhpc3RzIGxpYnJ0bXAgPi9kZXYvbnVsbCAyPiYxICYmIGVjaG8gMWAKKworICAgICAgaWYgdGVzdCAteiAiJGl0ZXhpc3RzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgUEtHQ09ORklHPSJubyIKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICBlbHNlCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmb3VuZCIgPiY1CiskYXNfZWNobyAiZm91bmQiID4mNjsgfQorICAgICAgZmkKKyAgICBmaQorCisKKyAgICBpZiB0ZXN0ICIkUEtHQ09ORklHIiAhPSAibm8iIDsgdGhlbgorICAgICAgTElCX1JUTVA9YCRQS0dDT05GSUcgLS1saWJzLW9ubHktbCBsaWJydG1wYAorICAgICAgTERfUlRNUD1gJFBLR0NPTkZJRyAtLWxpYnMtb25seS1MIGxpYnJ0bXBgCisgICAgICBDUFBfUlRNUD1gJFBLR0NPTkZJRyAtLWNmbGFncy1vbmx5LUkgbGlicnRtcGAKKyAgICAgIHZlcnNpb249YCRQS0dDT05GSUcgLS1tb2R2ZXJzaW9uIGxpYnJ0bXBgCisgICAgICBESVJfUlRNUD1gZWNobyAkTERfUlRNUCB8ICRTRUQgLWUgJ3MvLUwvLydgCisgICAgZWxzZQorICAgICAgICAgICAgICAgICAgYXNfZm5fZXJyb3IgIi0tbGlicnRtcCB3YXMgc3BlY2lmaWVkIGJ1dCBjb3VsZCBub3QgZmluZCBsaWJydG1wIHBrZ2NvbmZpZyBmaWxlLiIgIiRMSU5FTk8iIDUKKyAgICBmaQorCisgICAgOzsKKyAgb2ZmKQorICAgICAgICBMSUJfUlRNUD0iLWxydG1wIgorICAgIDs7CisgICopCisgICAgICAgIFBSRUZJWF9SVE1QPSRPUFRfTElCUlRNUAorICAgIDs7CisgIGVzYWMKKworICAgIGlmIHRlc3QgLW4gIiRQUkVGSVhfUlRNUCI7IHRoZW4KKyAgICBMRF9SVE1QPS1MJHtQUkVGSVhfUlRNUH0vbGliJGxpYnN1ZmYKKyAgICBDUFBfUlRNUD0tSSR7UFJFRklYX1JUTVB9L2luY2x1ZGUKKyAgICBESVJfUlRNUD0ke1BSRUZJWF9SVE1QfS9saWIkbGlic3VmZgorICBmaQorCisgIExERkxBR1M9IiRMREZMQUdTICRMRF9SVE1QIgorICBDUFBGTEFHUz0iJENQUEZMQUdTICRDUFBfUlRNUCIKKyAgTElCUz0iJExJQlMgJExJQl9SVE1QIgorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFJUTVBfSW5pdCBpbiAtbHJ0bXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFJUTVBfSW5pdCBpbiAtbHJ0bXAuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3J0bXBfUlRNUF9Jbml0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxydG1wICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBSVE1QX0luaXQgKCk7CitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBSVE1QX0luaXQgKCk7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9ydG1wX1JUTVBfSW5pdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3J0bXBfUlRNUF9Jbml0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9ydG1wX1JUTVBfSW5pdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9ydG1wX1JUTVBfSW5pdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ydG1wX1JUTVBfSW5pdCIgPSB4IiJ5ZXM7IHRoZW4gOgorCisgICAgIGZvciBhY19oZWFkZXIgaW4gbGlicnRtcC9ydG1wLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImxpYnJ0bXAvcnRtcC5oIiAiYWNfY3ZfaGVhZGVyX2xpYnJ0bXBfcnRtcF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9saWJydG1wX3J0bXBfaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCUlRNUF9SVE1QX0ggMQorX0FDRU9GCisgY3VybF9ydG1wX21zZz0iZW5hYmxlZCAobGlicnRtcCkiCisgICAgICAgIExJQlJUTVBfRU5BQkxFRD0xCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9MSUJSVE1QIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgIFVTRV9MSUJSVE1QPTEKKworCitmaQorCitkb25lCisKKworZWxzZQorICAgICAgICBMREZMQUdTPSRDTEVBTkxERkxBR1MKKyAgICAgIENQUEZMQUdTPSRDTEVBTkNQUEZMQUdTCisgICAgICBMSUJTPSRDTEVBTkxJQlMKKworZmkKKworCisgIGlmIHRlc3QgWCIkT1BUX0xJQlJUTVAiICE9IFhvZmYgJiYKKyAgICAgdGVzdCAiJExJQlJUTVBfRU5BQkxFRCIgIT0gIjEiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgImxpYnJ0bXAgbGlicyBhbmQvb3IgZGlyZWN0b3JpZXMgd2VyZSBub3QgZm91bmQgd2hlcmUgc3BlY2lmaWVkISIgIiRMSU5FTk8iIDUKKyAgZmkKKworZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxpYnJhcmllcyBjYW4gYmUgdmVyc2lvbmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGxpYnJhcmllcyBjYW4gYmUgdmVyc2lvbmVkLi4uICIgPiY2OyB9CitHTEQ9YCRMRCAtLWhlbHAgPCAvZGV2L251bGwgMj4vZGV2L251bGwgfCBncmVwIHZlcnNpb24tc2NyaXB0YAoraWYgdGVzdCAteiAiJEdMRCI7IHRoZW4KKyAgICB2ZXJzaW9uZWRfc3ltYm9sc19mbGF2b3VyPQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqCisqKiogWW91IG5lZWQgYW4gbGQgdmVyc2lvbiBzdXBwb3J0aW5nIHRoZSAtLXZlcnNpb24tc2NyaXB0IG9wdGlvbi4KKyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKioKKyoqKiBZb3UgbmVlZCBhbiBsZCB2ZXJzaW9uIHN1cHBvcnRpbmcgdGhlIC0tdmVyc2lvbi1zY3JpcHQgb3B0aW9uLgorIiA+JjI7fQorZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB2ZXJzaW9uZWQgc3ltYm9scyBhcmUgd2FudGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdmVyc2lvbmVkIHN5bWJvbHMgYXJlIHdhbnRlZC4uLiAiID4mNjsgfQordmVyc2lvbmVkX3N5bWJvbHNfZmxhdm91cj0KKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXZlcnNpb25lZC1zeW1ib2xzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3ZlcnNpb25lZF9zeW1ib2xzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdmVyc2lvbmVkX3N5bWJvbHM7ICBjYXNlICIkZW5hYmxldmFsIiBpbgorICB5ZXMpIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRPUEVOU1NMX0VOQUJMRUQiID0gIngxIjsgdGhlbgorICAgICAgdmVyc2lvbmVkX3N5bWJvbHNfZmxhdm91cj0iT1BFTlNTTF8iCisgICAgZWxpZiB0ZXN0ICJ4JEdOVVRMU19FTkFCTEVEIiA9PSAieDEiOyB0aGVuCisgICAgICB2ZXJzaW9uZWRfc3ltYm9sc19mbGF2b3VyPSJHTlVUTFNfIgorICAgIGVsaWYgdGVzdCAieCROU1NfRU5BQkxFRCIgPT0gIngxIjsgdGhlbgorICAgICAgdmVyc2lvbmVkX3N5bWJvbHNfZmxhdm91cj0iTlNTXyIKKyAgICBlbGlmIHRlc3QgIngkUE9MQVJTU0xfRU5BQkxFRCIgPT0gIngxIjsgdGhlbgorICAgICAgdmVyc2lvbmVkX3N5bWJvbHNfZmxhdm91cj0iUE9MQVJTU0xfIgorICAgIGVsaWYgdGVzdCAieCRDWUFTU0xfRU5BQkxFRCIgPT0gIngxIjsgdGhlbgorICAgICAgdmVyc2lvbmVkX3N5bWJvbHNfZmxhdm91cj0iQ1lBU1NMXyIKKyAgICBlbGlmIHRlc3QgIngkQVhUTFNfRU5BQkxFRCIgPT0gIngxIjsgdGhlbgorICAgICAgdmVyc2lvbmVkX3N5bWJvbHNfZmxhdm91cj0iQVhUTFNfIgorICAgIGVsc2UKKyAgICAgIHZlcnNpb25lZF9zeW1ib2xzX2ZsYXZvdXI9IiIKKyAgICBmaQorICAgIHZlcnNpb25lZF9zeW1ib2xzPSJ5ZXMiCisgICAgOzsKKworICAqKSAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIDs7CisgIGVzYWMKKworZWxzZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworCitmaQorCitmaQorCitWRVJTSU9ORURfRkxBVk9VUj0iJHZlcnNpb25lZF9zeW1ib2xzX2ZsYXZvdXIiCisKKworCitpZiB0ZXN0ICJ4JHZlcnNpb25lZF9zeW1ib2xzIiA9ICJ4eWVzIjsgdGhlbgorICBWRVJTSU9ORURfU1lNQk9MU19UUlVFPQorICBWRVJTSU9ORURfU1lNQk9MU19GQUxTRT0nIycKK2Vsc2UKKyAgVkVSU0lPTkVEX1NZTUJPTFNfVFJVRT0nIycKKyAgVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0U9CitmaQorCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgd2l0aCBsaWJpZG4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCB3aXRoIGxpYmlkbi4uLiAiID4mNjsgfQorT1BUX0lETj0iZGVmYXVsdCIKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJpZG4gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xpYmlkbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGliaWRuOyBPUFRfSUROPSR3aXRodmFsCitmaQorCitjYXNlICIkT1BUX0lETiIgaW4KKyAgbm8pCisgICAgICAgIHdhbnRfaWRuPSJubyIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICA7OworICBkZWZhdWx0KQorICAgICAgICB3YW50X2lkbj0ieWVzIgorICAgIHdhbnRfaWRuX3BhdGg9ImRlZmF1bHQiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IChhc3N1bWVkKSB5ZXMiID4mNQorJGFzX2VjaG8gIihhc3N1bWVkKSB5ZXMiID4mNjsgfQorICAgIDs7CisgIHllcykKKyAgICAgICAgd2FudF9pZG49InllcyIKKyAgICB3YW50X2lkbl9wYXRoPSJkZWZhdWx0IgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgOzsKKyAgKikKKyAgICAgICAgd2FudF9pZG49InllcyIKKyAgICB3YW50X2lkbl9wYXRoPSIkd2l0aHZhbCIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzICgkd2l0aHZhbCkiID4mNQorJGFzX2VjaG8gInllcyAoJHdpdGh2YWwpIiA+JjY7IH0KKyAgICA7OworZXNhYworCitpZiB0ZXN0ICIkd2FudF9pZG4iID0gInllcyI7IHRoZW4KKyAgICBjbGVhbl9DUFBGTEFHUz0iJENQUEZMQUdTIgorICBjbGVhbl9MREZMQUdTPSIkTERGTEFHUyIKKyAgY2xlYW5fTElCUz0iJExJQlMiCisgIFBLR0NPTkZJRz0ibm8iCisgICMKKyAgaWYgdGVzdCAiJHdhbnRfaWRuX3BhdGgiICE9ICJkZWZhdWx0IjsgdGhlbgorICAgICAgICBJRE5fUENESVI9IiR3YW50X2lkbl9wYXRoL2xpYiRsaWJzdWZmL3BrZ2NvbmZpZyIKKworCisgICAgUEtHQ09ORklHPSJubyIKKworICAgIGlmIHRlc3QgeCRjcm9zc19jb21waWxpbmcgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7aG9zdH0tcGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHtob3N0fS1wa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9QS0dDT05GSUcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRQS0dDT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUEtHQ09ORklHPSIkUEtHQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZHVtbXk9IiRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluIgorZm9yIGFzX2RpciBpbiAkYXNfZHVtbXkKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEtHQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX1BLR0NPTkZJRyIgJiYgYWNfY3ZfcGF0aF9QS0dDT05GSUc9Im5vIgorICA7OworZXNhYworZmkKK1BLR0NPTkZJRz0kYWNfY3ZfcGF0aF9QS0dDT05GSUcKK2lmIHRlc3QgLW4gIiRQS0dDT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEtHQ09ORklHIiA+JjUKKyRhc19lY2hvICIkUEtHQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICBmaQorCisgICAgaWYgdGVzdCB4JFBLR0NPTkZJRyA9IHhubzsgdGhlbgorICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9QS0dDT05GSUcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRQS0dDT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUEtHQ09ORklHPSIkUEtHQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZHVtbXk9IiRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluIgorZm9yIGFzX2RpciBpbiAkYXNfZHVtbXkKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEtHQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX1BLR0NPTkZJRyIgJiYgYWNfY3ZfcGF0aF9QS0dDT05GSUc9Im5vIgorICA7OworZXNhYworZmkKK1BLR0NPTkZJRz0kYWNfY3ZfcGF0aF9QS0dDT05GSUcKK2lmIHRlc3QgLW4gIiRQS0dDT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEtHQ09ORklHIiA+JjUKKyRhc19lY2hvICIkUEtHQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICBmaQorCisgICAgaWYgdGVzdCB4JFBLR0NPTkZJRyAhPSB4bm87IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYmlkbiBvcHRpb25zIHdpdGggcGtnLWNvbmZpZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGliaWRuIG9wdGlvbnMgd2l0aCBwa2ctY29uZmlnLi4uICIgPiY2OyB9CisgICAgICAgICAgICBpdGV4aXN0cz1gCisgICAgaWYgdGVzdCAtbiAiJElETl9QQ0RJUiI7IHRoZW4KKyAgICAgIFBLR19DT05GSUdfTElCRElSPSIkSUROX1BDRElSIgorICAgICAgZXhwb3J0IFBLR19DT05GSUdfTElCRElSCisgICAgZmkKKyAgICAgICAgICRQS0dDT05GSUcgLS1leGlzdHMgbGliaWRuID4vZGV2L251bGwgMj4mMSAmJiBlY2hvIDFgCisKKyAgICAgIGlmIHRlc3QgLXogIiRpdGV4aXN0cyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBLR0NPTkZJRz0ibm8iCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgZWxzZQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZm91bmQiID4mNQorJGFzX2VjaG8gImZvdW5kIiA+JjY7IH0KKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyI7IHRoZW4KKyAgICAgIElETl9MSUJTPWAKKyAgICBpZiB0ZXN0IC1uICIkSUROX1BDRElSIjsgdGhlbgorICAgICAgUEtHX0NPTkZJR19MSUJESVI9IiRJRE5fUENESVIiCisgICAgICBleHBvcnQgUEtHX0NPTkZJR19MSUJESVIKKyAgICBmaQorICAgICAgICAgJFBLR0NPTkZJRyAtLWxpYnMtb25seS1sIGxpYmlkbiAyPi9kZXYvbnVsbGAKKyAgICAgIElETl9MREZMQUdTPWAKKyAgICBpZiB0ZXN0IC1uICIkSUROX1BDRElSIjsgdGhlbgorICAgICAgUEtHX0NPTkZJR19MSUJESVI9IiRJRE5fUENESVIiCisgICAgICBleHBvcnQgUEtHX0NPTkZJR19MSUJESVIKKyAgICBmaQorICAgICAgICAgJFBLR0NPTkZJRyAtLWxpYnMtb25seS1MIGxpYmlkbiAyPi9kZXYvbnVsbGAKKyAgICAgIElETl9DUFBGTEFHUz1gCisgICAgaWYgdGVzdCAtbiAiJElETl9QQ0RJUiI7IHRoZW4KKyAgICAgIFBLR19DT05GSUdfTElCRElSPSIkSUROX1BDRElSIgorICAgICAgZXhwb3J0IFBLR19DT05GSUdfTElCRElSCisgICAgZmkKKyAgICAgICAgICRQS0dDT05GSUcgLS1jZmxhZ3Mtb25seS1JIGxpYmlkbiAyPi9kZXYvbnVsbGAKKyAgICAgIElETl9ESVI9YGVjaG8gJElETl9MREZMQUdTIHwgJFNFRCAtZSAncy8tTC8vJ2AKKyAgICBlbHNlCisgICAgICAgICAgICBJRE5fTElCUz0iLWxpZG4iCisgICAgICBJRE5fTERGTEFHUz0iLUwkd2FudF9pZG5fcGF0aC9saWIkbGlic3VmZiIKKyAgICAgIElETl9DUFBGTEFHUz0iLUkkd2FudF9pZG5fcGF0aC9pbmNsdWRlIgorICAgICAgSUROX0RJUj0iJHdhbnRfaWRuX3BhdGgvbGliJGxpYnN1ZmYiCisgICAgZmkKKyAgZWxzZQorCisKKyAgICBQS0dDT05GSUc9Im5vIgorCisgICAgaWYgdGVzdCB4JGNyb3NzX2NvbXBpbGluZyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHtob3N0fS1wa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2hvc3R9LXBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1BLR0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRQS0dDT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iCitmb3IgYXNfZGlyIGluICRhc19kdW1teQorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHQ09ORklHIiAmJiBhY19jdl9wYXRoX1BLR0NPTkZJRz0ibm8iCisgIDs7Citlc2FjCitmaQorUEtHQ09ORklHPSRhY19jdl9wYXRoX1BLR0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dDT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dDT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIGZpCisKKyAgICBpZiB0ZXN0IHgkUEtHQ09ORklHID0geG5vOyB0aGVuCisgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1BLR0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRQS0dDT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L3Vzci9sb2NhbC9iaW4iCitmb3IgYXNfZGlyIGluICRhc19kdW1teQorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dDT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHQ09ORklHIiAmJiBhY19jdl9wYXRoX1BLR0NPTkZJRz0ibm8iCisgIDs7Citlc2FjCitmaQorUEtHQ09ORklHPSRhY19jdl9wYXRoX1BLR0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dDT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dDT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIGZpCisKKyAgICBpZiB0ZXN0IHgkUEtHQ09ORklHICE9IHhubzsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGliaWRuIG9wdGlvbnMgd2l0aCBwa2ctY29uZmlnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJpZG4gb3B0aW9ucyB3aXRoIHBrZy1jb25maWcuLi4gIiA+JjY7IH0KKyAgICAgICAgICAgIGl0ZXhpc3RzPWAKKyAgICBpZiB0ZXN0IC1uICIiOyB0aGVuCisgICAgICBQS0dfQ09ORklHX0xJQkRJUj0iIgorICAgICAgZXhwb3J0IFBLR19DT05GSUdfTElCRElSCisgICAgZmkKKyAgICAgICAgICRQS0dDT05GSUcgLS1leGlzdHMgbGliaWRuID4vZGV2L251bGwgMj4mMSAmJiBlY2hvIDFgCisKKyAgICAgIGlmIHRlc3QgLXogIiRpdGV4aXN0cyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBLR0NPTkZJRz0ibm8iCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgZWxzZQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZm91bmQiID4mNQorJGFzX2VjaG8gImZvdW5kIiA+JjY7IH0KKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyI7IHRoZW4KKyAgICAgIElETl9MSUJTPWAkUEtHQ09ORklHIC0tbGlicy1vbmx5LWwgbGliaWRuIDI+L2Rldi9udWxsYAorICAgICAgSUROX0xERkxBR1M9YCRQS0dDT05GSUcgLS1saWJzLW9ubHktTCBsaWJpZG4gMj4vZGV2L251bGxgCisgICAgICBJRE5fQ1BQRkxBR1M9YCRQS0dDT05GSUcgLS1jZmxhZ3Mtb25seS1JIGxpYmlkbiAyPi9kZXYvbnVsbGAKKyAgICAgIElETl9ESVI9YGVjaG8gJElETl9MREZMQUdTIHwgJFNFRCAtZSAncy8tTC8vJ2AKKyAgICBlbHNlCisgICAgICAgICAgICBJRE5fTElCUz0iLWxpZG4iCisgICAgZmkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkUEtHQ09ORklHIiAhPSAibm8iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBwa2ctY29uZmlnOiBJRE5fTElCUzogXCIkSUROX0xJQlNcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBwa2ctY29uZmlnOiBJRE5fTElCUzogXCIkSUROX0xJQlNcIiIgPiY2O30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHBrZy1jb25maWc6IElETl9MREZMQUdTOiBcIiRJRE5fTERGTEFHU1wiIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHBrZy1jb25maWc6IElETl9MREZMQUdTOiBcIiRJRE5fTERGTEFHU1wiIiA+JjY7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcGtnLWNvbmZpZzogSUROX0NQUEZMQUdTOiBcIiRJRE5fQ1BQRkxBR1NcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBwa2ctY29uZmlnOiBJRE5fQ1BQRkxBR1M6IFwiJElETl9DUFBGTEFHU1wiIiA+JjY7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcGtnLWNvbmZpZzogSUROX0RJUjogXCIkSUROX0RJUlwiIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHBrZy1jb25maWc6IElETl9ESVI6IFwiJElETl9ESVJcIiIgPiY2O30KKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogSUROX0xJQlM6IFwiJElETl9MSUJTXCIiID4mNQorJGFzX2VjaG8gIiRhc19tZTogSUROX0xJQlM6IFwiJElETl9MSUJTXCIiID4mNjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBJRE5fTERGTEFHUzogXCIkSUROX0xERkxBR1NcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBJRE5fTERGTEFHUzogXCIkSUROX0xERkxBR1NcIiIgPiY2O30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IElETl9DUFBGTEFHUzogXCIkSUROX0NQUEZMQUdTXCIiID4mNQorJGFzX2VjaG8gIiRhc19tZTogSUROX0NQUEZMQUdTOiBcIiRJRE5fQ1BQRkxBR1NcIiIgPiY2O30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IElETl9ESVI6IFwiJElETl9ESVJcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBJRE5fRElSOiBcIiRJRE5fRElSXCIiID4mNjt9CisgIGZpCisgICMKKyAgQ1BQRkxBR1M9IiRJRE5fQ1BQRkxBR1MgJENQUEZMQUdTIgorICBMREZMQUdTPSIkSUROX0xERkxBR1MgJExERkxBR1MiCisgIExJQlM9IiRJRE5fTElCUyAkTElCUyIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlkbmFfdG9fYXNjaWlfNGkgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpZG5hX3RvX2FzY2lpXzRpIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgaWRuYV90b19hc2NpaV80aSBpbm5vY3VvdXNfaWRuYV90b19hc2NpaV80aQorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBpZG5hX3RvX2FzY2lpXzRpCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBpZG5hX3RvX2FzY2lpXzRpICgpOworI2lmIGRlZmluZWQgX19zdHViX2lkbmFfdG9fYXNjaWlfNGkgfHwgZGVmaW5lZCBfX3N0dWJfX19pZG5hX3RvX2FzY2lpXzRpCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGlkbmFfdG9fYXNjaWlfNGkgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2xpYmlkbj0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfbGliaWRuPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfbGliaWRuIiA9ICJubyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlkbmFfdG9fYXNjaWlfbHogY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpZG5hX3RvX2FzY2lpX2x6IGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBpZG5hX3RvX2FzY2lpX2x6IGlubm9jdW91c19pZG5hX3RvX2FzY2lpX2x6CisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIGlkbmFfdG9fYXNjaWlfbHoKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGlkbmFfdG9fYXNjaWlfbHogKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfaWRuYV90b19hc2NpaV9seiB8fCBkZWZpbmVkIF9fc3R1Yl9fX2lkbmFfdG9fYXNjaWlfbHoKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gaWRuYV90b19hc2NpaV9seiAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2xpbmtzX2xpYmlkbj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2xpbmtzX2xpYmlkbj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfbGliaWRuIiA9ICJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCSUROIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgIGZvciBhY19mdW5jIGluIGlkbl9mcmVlIGlkbmFfc3RyZXJyb3IgdGxkX3N0cmVycm9yCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgorZXZhbCBhc192YWw9XCQkYXNfYWNfdmFyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICAgIGZvciBhY19oZWFkZXIgaW4gaWRuLWZyZWUuaCB0bGQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2V2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgorICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisgICAgaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdGxkX2giID0gInh5ZXMiOyB0aGVuCisgICAgICBJRE5fRU5BQkxFRD0xCisKKyAgICAgIGN1cmxfaWRuX21zZz0iZW5hYmxlZCIKKyAgICAgIGlmIHRlc3QgLW4gIiRJRE5fRElSIjsgdGhlbgorICAgICAgICBMRF9MSUJSQVJZX1BBVEg9IiRMRF9MSUJSQVJZX1BBVEg6JElETl9ESVIiCisgICAgICAgIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEgKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBBZGRlZCAkSUROX0RJUiB0byBMRF9MSUJSQVJZX1BBVEgiID4mNQorJGFzX2VjaG8gIiRhc19tZTogQWRkZWQgJElETl9ESVIgdG8gTERfTElCUkFSWV9QQVRIIiA+JjY7fQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IExpYnJhcmllcyBmb3IgSUROIHN1cHBvcnQgdG9vIG9sZDogSUROIGRpc2FibGVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IExpYnJhcmllcyBmb3IgSUROIHN1cHBvcnQgdG9vIG9sZDogSUROIGRpc2FibGVkIiA+JjI7fQorICAgICAgQ1BQRkxBR1M9IiRjbGVhbl9DUFBGTEFHUyIKKyAgICAgIExERkxBR1M9IiRjbGVhbl9MREZMQUdTIgorICAgICAgTElCUz0iJGNsZWFuX0xJQlMiCisgICAgZmkKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogQ2Fubm90IGZpbmQgbGlicmFyaWVzIGZvciBJRE4gc3VwcG9ydDogSUROIGRpc2FibGVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IENhbm5vdCBmaW5kIGxpYnJhcmllcyBmb3IgSUROIHN1cHBvcnQ6IElETiBkaXNhYmxlZCIgPiYyO30KKyAgICBDUFBGTEFHUz0iJGNsZWFuX0NQUEZMQUdTIgorICAgIExERkxBR1M9IiRjbGVhbl9MREZMQUdTIgorICAgIExJQlM9IiRjbGVhbl9MSUJTIgorICBmaQorZmkKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9XRVIoYykgXAorCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisjZW5kaWYKKworI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1hbGxvYy5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBtYWxsb2MuaC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfbWFsbG9jX2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgdm9pZCAqcCA9IG1hbGxvYygxMCk7CisgICAgICAgIHZvaWQgKnEgPSBjYWxsb2MoMTAsMTApOworICAgICAgICBmcmVlKHApOworICAgICAgICBmcmVlKHEpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX21hbGxvY19oPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfaGVhZGVyX21hbGxvY19oPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfbWFsbG9jX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfbWFsbG9jX2giID4mNjsgfQorICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX21hbGxvY19oIiA9ICJ5ZXMiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCitfQUNFT0YKKworICAgICMKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICB2b2lkICpwID0gbWFsbG9jKDEwKTsKKyAgICAgICAgdm9pZCAqcSA9IGNhbGxvYygxMCwxMCk7CisgICAgICAgIGZyZWUocCk7CisgICAgICAgIGZyZWUocSk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX21hbGxvY19oPSJubyIKKworZWxzZQorCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX21hbGxvY19oPSJ5ZXMiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAjCisgICAgY2FzZSAiJGN1cmxfY3ZfbmVlZF9oZWFkZXJfbWFsbG9jX2giIGluCisgICAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVFRF9NQUxMT0NfSCAxCitfQUNFT0YKKworICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1lbW9yeS5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBtZW1vcnkuaC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfbWVtb3J5X2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpbmNsdWRlIDxtZW1vcnkuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgdm9pZCAqcCA9IG1hbGxvYygxMCk7CisgICAgICAgIHZvaWQgKnEgPSBjYWxsb2MoMTAsMTApOworICAgICAgICBmcmVlKHApOworICAgICAgICBmcmVlKHEpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgYWNfY3ZfaGVhZGVyX21lbW9yeV9oPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfaGVhZGVyX21lbW9yeV9oPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfbWVtb3J5X2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfbWVtb3J5X2giID4mNjsgfQorICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX21lbW9yeV9oIiA9ICJ5ZXMiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCitfQUNFT0YKKworICAgICMKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICB2b2lkICpwID0gbWFsbG9jKDEwKTsKKyAgICAgICAgdm9pZCAqcSA9IGNhbGxvYygxMCwxMCk7CisgICAgICAgIGZyZWUocCk7CisgICAgICAgIGZyZWUocSk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX21lbW9yeV9oPSJubyIKKworZWxzZQorCisgICAgICBjdXJsX2N2X25lZWRfaGVhZGVyX21lbW9yeV9oPSJ5ZXMiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAjCisgICAgY2FzZSAiJGN1cmxfY3ZfbmVlZF9oZWFkZXJfbWVtb3J5X2giIGluCisgICAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVFRF9NRU1PUllfSCAxCitfQUNFT0YKKworICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworCitmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIFwKKyAgICAgICAgc3lzL3RpbWUuaCBcCisgICAgICAgIHN5cy9zZWxlY3QuaCBcCisgICAgICAgIHN5cy9zb2NrZXQuaCBcCisgICAgICAgIHN5cy9pb2N0bC5oIFwKKyAgICAgICAgc3lzL3Vpby5oIFwKKyAgICAgICAgYXNzZXJ0LmggXAorICAgICAgICB1bmlzdGQuaCBcCisgICAgICAgIHN0ZGxpYi5oIFwKKyAgICAgICAgbGltaXRzLmggXAorICAgICAgICBhcnBhL2luZXQuaCBcCisgICAgICAgIG5ldC9pZi5oIFwKKyAgICAgICAgbmV0aW5ldC9pbi5oIFwKKyAgICAgICAgc3lzL3VuLmggXAorICAgICAgICBuZXRpbmV0L3RjcC5oIFwKKyAgICAgICAgbmV0ZGIuaCBcCisgICAgICAgIHN5cy9zb2NraW8uaCBcCisgICAgICAgIHN5cy9zdGF0LmggXAorICAgICAgICBzeXMvcGFyYW0uaCBcCisgICAgICAgIHRlcm1pb3MuaCBcCisgICAgICAgIHRlcm1pby5oIFwKKyAgICAgICAgc2d0dHkuaCBcCisgICAgICAgIGZjbnRsLmggXAorICAgICAgICBhbGxvY2EuaCBcCisgICAgICAgIHRpbWUuaCBcCisgICAgICAgIGlvLmggXAorICAgICAgICBwd2QuaCBcCisgICAgICAgIHV0aW1lLmggXAorICAgICAgICBzeXMvdXRpbWUuaCBcCisgICAgICAgIHN5cy9wb2xsLmggXAorICAgICAgICBwb2xsLmggXAorICAgICAgICBzb2NrZXQuaCBcCisgICAgICAgIHN5cy9yZXNvdXJjZS5oIFwKKyAgICAgICAgbGliZ2VuLmggXAorICAgICAgICBsb2NhbGUuaCBcCisgICAgICAgIGVycm5vLmggXAorICAgICAgICBzdGRib29sLmggXAorICAgICAgICBhcnBhL3RmdHAuaCBcCisgICAgICAgIHN5cy9maWxpby5oIFwKKyAgICAgICAgc3lzL3dhaXQuaCBcCisgICAgICAgIHNldGptcC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19VTl9ICisjaW5jbHVkZSA8c3lzL3VuLmg+CisjZW5kaWYKKworCisiCitldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19jb25zdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4gKHZvaWQpCit7CisvKiBGSVhNRTogSW5jbHVkZSB0aGUgY29tbWVudHMgc3VnZ2VzdGVkIGJ5IFBhdWwuICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisgIC8qIFVsdHJpeCBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCisgIHR5cGVkZWYgaW50IGNoYXJzZXRbMl07CisgIGNvbnN0IGNoYXJzZXQgY3M7CisgIC8qIFN1bk9TIDQuMS4xIGNjIHJlamVjdHMgdGhpcy4gICovCisgIGNoYXIgY29uc3QgKmNvbnN0ICpwY3BjYzsKKyAgY2hhciAqKnBwYzsKKyAgLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgc3RydWN0IHBvaW50IHtpbnQgeCwgeTt9OworICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKyAgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgorICAgICBJdCBkb2VzIG5vdCBsZXQgeW91IHN1YnRyYWN0IG9uZSBjb25zdCBYKiBwb2ludGVyIGZyb20gYW5vdGhlciBpbgorICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CisgICAgIGV4cHJlc3Npb24gKi8KKyAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOworICBwY3BjYyA9ICZnICsgKGcgPyBnLWcgOiAwKTsKKyAgLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KKyAgKytwY3BjYzsKKyAgcHBjID0gKGNoYXIqKikgcGNwY2M7CisgIHBjcGNjID0gKGNoYXIgY29uc3QgKmNvbnN0ICopIHBwYzsKKyAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgICBjaGFyICp0OworICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CisKKyAgICAqdCsrID0gMDsKKyAgICBpZiAocykgcmV0dXJuIDA7CisgIH0KKyAgeyAvKiBTb21lb25lIHRoaW5rcyB0aGUgU3VuIHN1cHBvc2VkbHktQU5TSSBjb21waWxlciB3aWxsIHJlamVjdCB0aGlzLiAgKi8KKyAgICBpbnQgeFtdID0gezI1LCAxN307CisgICAgY29uc3QgaW50ICpmb28gPSAmeFswXTsKKyAgICArK2ZvbzsKKyAgfQorICB7IC8qIFN1biBTQzEuMCBBTlNJIGNvbXBpbGVyIHJlamVjdHMgdGhpcyAtLSBidXQgbm90IHRoZSBhYm92ZS4gKi8KKyAgICB0eXBlZGVmIGNvbnN0IGludCAqaXB0cjsKKyAgICBpcHRyIHAgPSAwOworICAgICsrcDsKKyAgfQorICB7IC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcyBzYXlpbmcKKyAgICAgICAiay5jIiwgbGluZSAyLjI3OiAxNTA2LTAyNSAoUykgT3BlcmFuZCBtdXN0IGJlIGEgbW9kaWZpYWJsZSBsdmFsdWUuICovCisgICAgc3RydWN0IHMgeyBpbnQgajsgY29uc3QgaW50ICphcFszXTsgfTsKKyAgICBzdHJ1Y3QgcyAqYjsgYi0+aiA9IDU7CisgIH0KKyAgeyAvKiBVTFRSSVgtMzIgVjMuMSAoUmV2IDkpIHZjYyByZWplY3RzIHRoaXMgKi8KKyAgICBjb25zdCBpbnQgZm9vID0gMTA7CisgICAgaWYgKCFmb28pIHJldHVybiAwOworICB9CisgIHJldHVybiAhY3NbMF0gJiYgIXplcm8ueDsKKyNlbmRpZgorCisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfY29uc3Q9eWVzCitlbHNlCisgIGFjX2N2X2NfY29uc3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29uc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2NvbnN0IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBjb25zdCAvKiovIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNvbXBpbGVyIHN1cHBvcnQgb2YgQzk5IHZhcmlhZGljIG1hY3JvIHN0eWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBjb21waWxlciBzdXBwb3J0IG9mIEM5OSB2YXJpYWRpYyBtYWNybyBzdHlsZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtjdXJsX2N2X3ZhcmlhZGljX21hY3Jvc19jOTkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgYzk5X3ZtYWNybzMoZmlyc3QsIC4uLikgZnVuMyhmaXJzdCwgX19WQV9BUkdTX18pCisjZGVmaW5lIGM5OV92bWFjcm8yKGZpcnN0LCAuLi4pIGZ1bjIoZmlyc3QsIF9fVkFfQVJHU19fKQorICAgICAgICBpbnQgZnVuMyhpbnQgYXJnMSwgaW50IGFyZzIsIGludCBhcmczKTsKKyAgICAgICAgaW50IGZ1bjIoaW50IGFyZzEsIGludCBhcmcyKTsKKyAgICAgICAgaW50IGZ1bjMoaW50IGFyZzEsIGludCBhcmcyLCBpbnQgYXJnMykKKyAgICAgICAgeyByZXR1cm4gYXJnMSArIGFyZzIgKyBhcmczOyB9CisgICAgICAgIGludCBmdW4yKGludCBhcmcxLCBpbnQgYXJnMikKKyAgICAgICAgeyByZXR1cm4gYXJnMSArIGFyZzI7IH0KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IHJlczMgPSBjOTlfdm1hY3JvMygxLCAyLCAzKTsKKyAgICAgICAgaW50IHJlczIgPSBjOTlfdm1hY3JvMigxLCAyKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGN1cmxfY3ZfdmFyaWFkaWNfbWFjcm9zX2M5OT0ieWVzIgorCitlbHNlCisKKyAgICAgIGN1cmxfY3ZfdmFyaWFkaWNfbWFjcm9zX2M5OT0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3VybF9jdl92YXJpYWRpY19tYWNyb3NfYzk5IiA+JjUKKyRhc19lY2hvICIkY3VybF9jdl92YXJpYWRpY19tYWNyb3NfYzk5IiA+JjY7IH0KKyAgY2FzZSAiJGN1cmxfY3ZfdmFyaWFkaWNfbWFjcm9zX2M5OSIgaW4KKyAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfQzk5IDEKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNvbXBpbGVyIHN1cHBvcnQgb2Ygb2xkIGdjYyB2YXJpYWRpYyBtYWNybyBzdHlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY29tcGlsZXIgc3VwcG9ydCBvZiBvbGQgZ2NjIHZhcmlhZGljIG1hY3JvIHN0eWxlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2N1cmxfY3ZfdmFyaWFkaWNfbWFjcm9zX2djYytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBnY2Nfdm1hY3JvMyhmaXJzdCwgYXJncy4uLikgZnVuMyhmaXJzdCwgYXJncykKKyNkZWZpbmUgZ2NjX3ZtYWNybzIoZmlyc3QsIGFyZ3MuLi4pIGZ1bjIoZmlyc3QsIGFyZ3MpCisgICAgICAgIGludCBmdW4zKGludCBhcmcxLCBpbnQgYXJnMiwgaW50IGFyZzMpOworICAgICAgICBpbnQgZnVuMihpbnQgYXJnMSwgaW50IGFyZzIpOworICAgICAgICBpbnQgZnVuMyhpbnQgYXJnMSwgaW50IGFyZzIsIGludCBhcmczKQorICAgICAgICB7IHJldHVybiBhcmcxICsgYXJnMiArIGFyZzM7IH0KKyAgICAgICAgaW50IGZ1bjIoaW50IGFyZzEsIGludCBhcmcyKQorICAgICAgICB7IHJldHVybiBhcmcxICsgYXJnMjsgfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpbnQgcmVzMyA9IGdjY192bWFjcm8zKDEsIDIsIDMpOworICAgICAgICBpbnQgcmVzMiA9IGdjY192bWFjcm8yKDEsIDIpOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgY3VybF9jdl92YXJpYWRpY19tYWNyb3NfZ2NjPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgY3VybF9jdl92YXJpYWRpY19tYWNyb3NfZ2NjPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjdXJsX2N2X3ZhcmlhZGljX21hY3Jvc19nY2MiID4mNQorJGFzX2VjaG8gIiRjdXJsX2N2X3ZhcmlhZGljX21hY3Jvc19nY2MiID4mNjsgfQorICBjYXNlICIkY3VybF9jdl92YXJpYWRpY19tYWNyb3NfZ2NjIiBpbgorICAgIHllcykKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1ZBUklBRElDX01BQ1JPU19HQ0MgMQorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic2l6ZV90IiAiYWNfY3ZfdHlwZV9zaXplX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9zaXplX3QiID0geCIieWVzOyB0aGVuIDoKKworZWxzZQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIHNpemVfdCB1bnNpZ25lZCBpbnQKK19BQ0VPRgorCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl90aW1lK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKK2lmICgoc3RydWN0IHRtICopIDApCityZXR1cm4gMDsKKyA7CisgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3RpbWU9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl90aW1lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfdGltZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl90aW1lIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisgICAgICAgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3RpbWUuaCB0aW1lLmggc3lzL3NvY2tldC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RydWN0IHRpbWV2YWwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0cnVjdCB0aW1ldmFsLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3N0cnVjdF90aW1ldmFsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9USU1FX0gKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIHN0cnVjdCB0aW1ldmFsIHRzOworICAgICAgICB0cy50dl9zZWMgID0gMDsKKyAgICAgICAgdHMudHZfdXNlYyA9IDA7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBhY19jdl9zdHJ1Y3RfdGltZXZhbD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X3N0cnVjdF90aW1ldmFsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zdHJ1Y3RfdGltZXZhbCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3N0cnVjdF90aW1ldmFsIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X3N0cnVjdF90aW1ldmFsIiBpbgorICAgIHllcykKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9USU1FVkFMIDEKK19BQ0VPRgorCisgICAgICA7OworICBlc2FjCisKKworCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9IHh5ZXM7IHRoZW4KKworICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBydW4tdGltZSBsaWJzIGF2YWlsYWJpbGl0eSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBydW4tdGltZSBsaWJzIGF2YWlsYWJpbGl0eS4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCittYWluKCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmaW5lIiA+JjUKKyRhc19lY2hvICJmaW5lIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGZhaWxlZCIgPiY1CiskYXNfZWNobyAiZmFpbGVkIiA+JjY7IH0KKyAgICBhc19mbl9lcnJvciAib25lIG9yIG1vcmUgbGlicyBhdmFpbGFibGUgYXQgbGluay10aW1lIGFyZSBub3QgYXZhaWxhYmxlIHJ1bi10aW1lLiBMaWJzIHVzZWQgYXQgbGluay10aW1lOiAkTElCUyIgIiRMSU5FTk8iIDUKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworICAgICAgZmkKKworCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHNpemVfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHNpemVfdC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zaXplb2Zfc2l6ZV90K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoc2l6ZV90KSkiICJhY19jdl9zaXplb2Zfc2l6ZV90IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CisKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfc2l6ZV90IiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK3sgYXNfZm5fc2V0X3N0YXR1cyA3NworYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2l6ZV90KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9zaXplX3Q9MAorICAgZmkKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9zaXplX3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2Zfc2l6ZV90IiA+JjY7IH0KKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX1NJWkVfVCAkYWNfY3Zfc2l6ZW9mX3NpemVfdAorX0FDRU9GCisKKworIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgbG9uZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zaXplb2ZfbG9uZytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGxvbmcpKSIgImFjX2N2X3NpemVvZl9sb25nIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CisKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfbG9uZyIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cit7IGFzX2ZuX3NldF9zdGF0dXMgNzcKK2FzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX2xvbmc9MAorICAgZmkKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9sb25nIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX2xvbmciID4mNjsgfQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfTE9ORyAkYWNfY3Zfc2l6ZW9mX2xvbmcKK19BQ0VPRgorCisKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgaW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgaW50Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9pbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChpbnQpKSIgImFjX2N2X3NpemVvZl9pbnQiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKKworZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9pbnQiID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoreyBhc19mbl9zZXRfc3RhdHVzIDc3Cithc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX2ludD0wCisgICBmaQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2ludCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9pbnQiID4mNjsgfQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfSU5UICRhY19jdl9zaXplb2ZfaW50CitfQUNFT0YKKworCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHNob3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygc2hvcnQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3Nob3J0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoc2hvcnQpKSIgImFjX2N2X3NpemVvZl9zaG9ydCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgorCitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX3Nob3J0IiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK3sgYXNfZm5fc2V0X3N0YXR1cyA3NworYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2hvcnQpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3Nob3J0PTAKKyAgIGZpCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2Zfc2hvcnQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2Zfc2hvcnQiID4mNjsgfQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfU0hPUlQgJGFjX2N2X3NpemVvZl9zaG9ydAorX0FDRU9GCisKKworCisgIGlmIHRlc3QgLXogIiRhY19jdl9zaXplb2ZfbG9uZyIgfHwKKyAgICB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX2xvbmciIC1lcSAiMCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiY2Fubm90IGZpbmQgb3V0IHNpemUgb2YgbG9uZy4iICIkTElORU5PIiA1CisgIGZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjZGVmaW5lIENVUkxfU0laRU9GX0xPTkcgJGFjX2N2X3NpemVvZl9sb25nCitfRU9GCisKKworIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiB0aW1lX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiB0aW1lX3QuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3RpbWVfdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHRpbWVfdCkpIiAiYWNfY3Zfc2l6ZW9mX3RpbWVfdCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgorCitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX3RpbWVfdCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cit7IGFzX2ZuX3NldF9zdGF0dXMgNzcKK2FzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHRpbWVfdCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfdGltZV90PTAKKyAgIGZpCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfdGltZV90IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX3RpbWVfdCIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9USU1FX1QgJGFjX2N2X3NpemVvZl90aW1lX3QKK19BQ0VPRgorCisKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2Ygb2ZmX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBvZmZfdC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zaXplb2Zfb2ZmX3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChvZmZfdCkpIiAiYWNfY3Zfc2l6ZW9mX29mZl90IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CisKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfb2ZmX3QiID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoreyBhc19mbl9zZXRfc3RhdHVzIDc3Cithc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChvZmZfdCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2Zfb2ZmX3Q9MAorICAgZmkKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9vZmZfdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9vZmZfdCIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9PRkZfVCAkYWNfY3Zfc2l6ZW9mX29mZl90CitfQUNFT0YKKworCisKK3NvbmFtZV9idW1wPW5vCitpZiB0ZXN0IHgiJGFjX2N2X25hdGl2ZV93aW5kb3dzIiAhPSAieHllcyIgJiYKKyAgIHRlc3QgJGFjX2N2X3NpemVvZl9vZmZfdCAtbmUgJGN1cmxfc2l6ZW9mX2N1cmxfb2ZmX3Q7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBUaGlzIGxpYmN1cmwgYnVpbHQgaXMgcHJvYmFibHkgbm90IEFCSSBjb21wYXRpYmxlIHdpdGggcHJldmlvdXMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVGhpcyBsaWJjdXJsIGJ1aWx0IGlzIHByb2JhYmx5IG5vdCBBQkkgY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGJ1aWxkcyEgWW91IE1VU1QgcmVhZCBsaWIvUkVBRE1FLmN1cmxfb2ZmX3QgdG8gZmlndXJlIGl0IG91dC4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogYnVpbGRzISBZb3UgTVVTVCByZWFkIGxpYi9SRUFETUUuY3VybF9vZmZfdCB0byBmaWd1cmUgaXQgb3V0LiIgPiYyO30KKyAgc29uYW1lX2J1bXA9eWVzCitmaQorCisKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgImxvbmcgbG9uZyIgImFjX2N2X3R5cGVfbG9uZ19sb25nIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfbG9uZ19sb25nIiA9IHgiInllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTE9OR0xPTkcgMSIgPj5jb25mZGVmcy5oCisKKyAgIGxvbmdsb25nPSJ5ZXMiCisKK2ZpCisKKworaWYgdGVzdCAieHllcyIgPSAieCRsb25nbG9uZyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBudW1iZXJMTCB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBudW1iZXJMTCB3b3Jrcy4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgbG9uZyBsb25nIHZhbCA9IDEwMDBMTDsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xMIDEiID4+Y29uZmRlZnMuaAorCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKKyMgY2hlY2sgZm9yIHNzaXplX3QKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNzaXplX3QiICJhY19jdl90eXBlX3NzaXplX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9zc2l6ZV90IiA9IHgiInllczsgdGhlbiA6CisKK2Vsc2UKKworJGFzX2VjaG8gIiNkZWZpbmUgc3NpemVfdCBpbnQiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMgY2hlY2sgZm9yIGJvb2wgdHlwZQorYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiYm9vbCIgImFjX2N2X3R5cGVfYm9vbCIgIgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1REQk9PTF9ICisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9ib29sIiA9IHgiInllczsgdGhlbiA6CisKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9CT09MX1QgMSIgPj5jb25mZGVmcy5oCisKKworZmkKKworCisKK2N1cmxfaW5jbHVkZXNfd3MydGNwaXA9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyMgIGlmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjICAgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjICBlbmRpZgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjICAgIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjICAgIGlmZGVmIEhBVkVfV1MyVENQSVBfSAorIyAgICAgICBpbmNsdWRlIDx3czJ0Y3BpcC5oPgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdpbmRvd3MuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2luZG93cy5oLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl93aW5kb3dzX2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fQ0VHQ0NfXykKKyAgICAgICAgSEFWRV9XSU5ET1dTX0ggc2hhbGwgbm90IGJlIGRlZmluZWQuCisjZWxzZQorICAgICAgICBpbnQgZHVtbXk9MipXSU5WRVI7CisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5kb3dzX2g9InllcyIKKworZWxzZQorCisgICAgICBhY19jdl9oZWFkZXJfd2luZG93c19oPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfd2luZG93c19oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaCIgPiY2OyB9CisgIGNhc2UgIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiBpbgorICAgIHllcykKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1dJTkRPV1NfSCAxCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gMQorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd2luc29jazIuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2luc29jazIuaC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfd2luc29jazJfaCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NFR0NDX18pIHx8IGRlZmluZWQoX19NSU5HVzMyQ0VfXykKKyAgICAgICAgSEFWRV9XSU5TT0NLMl9IIHNoYWxsIG5vdCBiZSBkZWZpbmVkLgorI2Vsc2UKKyAgICAgICAgaW50IGR1bW15PTIqSVBQUk9UT19FU1A7CisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2g9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID4mNjsgfQorICBjYXNlICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giIGluCisgICAgeWVzKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxCitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3czJ0Y3BpcC5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3czJ0Y3BpcC5oLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl93czJ0Y3BpcF9oK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DRUdDQ19fKSB8fCBkZWZpbmVkKF9fTUlOR1czMkNFX18pCisgICAgICAgIEhBVkVfV1MyVENQSVBfSCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyNlbHNlCisgICAgICAgIGludCBkdW1teT0yKklQX1BLVElORk87CisjZW5kaWYKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGFjX2N2X2hlYWRlcl93czJ0Y3BpcF9oPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2g9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl93czJ0Y3BpcF9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2giID4mNjsgfQorICBjYXNlICIkYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2giIGluCisgICAgeWVzKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV1MyVENQSVBfSCAxCitfQUNFT0YKKworICAgICAgOzsKKyAgZXNhYworCisKKworY3VybF9pbmNsdWRlc19zeXNfc29ja2V0PSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyMgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0CisiCitldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKK2N1cmxfcHJlcHJvY2Vzc19jYWxsY29udj0iXAorLyogcHJlcHJvY2VzcyBzdGFydCAqLworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjICBkZWZpbmUgRlVOQ0FMTENPTlYgX19zdGRjYWxsCisjZWxzZQorIyAgZGVmaW5lIEZVTkNBTExDT05WCisjZW5kaWYKKy8qIHByZXByb2Nlc3MgZW5kICovIgorCisKKyAgICAgICAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjdXJsX3NvY2tsZW5fdCBkYXRhIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGN1cmxfc29ja2xlbl90IGRhdGEgdHlwZS4uLiAiID4mNjsgfQorICBjdXJsX3R5cGVvZl9jdXJsX3NvY2tsZW5fdD0idW5rbm93biIKKyAgZm9yIGFyZzEgaW4gaW50IFNPQ0tFVDsgZG8KKyAgICBmb3IgYXJnMiBpbiAnc3RydWN0IHNvY2thZGRyJyB2b2lkOyBkbworICAgICAgZm9yIHQgaW4gc29ja2xlbl90IGludCBzaXplX3QgJ3Vuc2lnbmVkIGludCcgbG9uZyAndW5zaWduZWQgbG9uZycgdm9pZDsgZG8KKyAgICAgICAgaWYgdGVzdCAiJGN1cmxfdHlwZW9mX2N1cmxfc29ja2xlbl90IiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICAgICAgICAgJGN1cmxfcHJlcHJvY2Vzc19jYWxsY29udgorICAgICAgICAgICAgICBleHRlcm4gaW50IEZVTkNBTExDT05WIGdldHBlZXJuYW1lKCRhcmcxLCAkYXJnMiAqLCAkdCAqKTsKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICAgICAgJHQgKmxlbnB0ciA9IDA7CisgICAgICAgICAgICAgIGlmKDAgIT0gZ2V0cGVlcm5hbWUoMCwgMCwgbGVucHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgIGN1cmxfdHlwZW9mX2N1cmxfc29ja2xlbl90PSIkdCIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgZG9uZQorICBmb3IgdCBpbiBzb2NrbGVuX3QgaW50OyBkbworICAgIGlmIHRlc3QgIiRjdXJsX3R5cGVvZl9jdXJsX3NvY2tsZW5fdCIgPSAidm9pZCI7IHRoZW4KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAgIHR5cGVkZWYgJHQgY3VybF9zb2NrbGVuX3Q7CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgY3VybF9zb2NrbGVuX3QgZHVtbXk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgIGN1cmxfdHlwZW9mX2N1cmxfc29ja2xlbl90PSIkdCIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgIGRvbmUKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjdXJsX3R5cGVvZl9jdXJsX3NvY2tsZW5fdCIgPiY1CiskYXNfZWNobyAiJGN1cmxfdHlwZW9mX2N1cmxfc29ja2xlbl90IiA+JjY7IH0KKyAgaWYgdGVzdCAiJGN1cmxfdHlwZW9mX2N1cmxfc29ja2xlbl90IiA9ICJ2b2lkIiB8fAorICAgIHRlc3QgIiRjdXJsX3R5cGVvZl9jdXJsX3NvY2tsZW5fdCIgPSAidW5rbm93biI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiY2Fubm90IGZpbmQgZGF0YSB0eXBlIGZvciBjdXJsX3NvY2tsZW5fdC4iICIkTElORU5PIiA1CisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGN1cmxfc29ja2xlbl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgY3VybF9zb2NrbGVuX3QuLi4gIiA+JjY7IH0KKyAgY3VybF9zaXplb2ZfY3VybF9zb2NrbGVuX3Q9InVua25vd24iCisgIGN1cmxfcHVsbF9oZWFkZXJzX3NvY2tsZW5fdD0idW5rbm93biIKKyAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93czJ0Y3BpcF9oIiA9ICJ5ZXMiOyB0aGVuCisgICAgdHN0X3B1bGxfaGVhZGVyX2NoZWNrcz0nbm9uZSB3czJ0Y3BpcCcKKyAgICB0c3Rfc2l6ZV9jaGVja3M9JzQnCisgIGVsc2UKKyAgICB0c3RfcHVsbF9oZWFkZXJfY2hlY2tzPSdub25lIHN5c3R5cGVzIHN5c3NvY2tldCcKKyAgICB0c3Rfc2l6ZV9jaGVja3M9JzQgOCAyJworICBmaQorICBmb3IgdHN0X3NpemUgaW4gJHRzdF9zaXplX2NoZWNrczsgZG8KKyAgICBmb3IgdHN0X3B1bGxfaGVhZGVycyBpbiAkdHN0X3B1bGxfaGVhZGVyX2NoZWNrczsgZG8KKyAgICAgIGlmIHRlc3QgIiRjdXJsX3NpemVvZl9jdXJsX3NvY2tsZW5fdCIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgY2FzZSAkdHN0X3B1bGxfaGVhZGVycyBpbgorICAgICAgICAgIHdzMnRjcGlwKQorICAgICAgICAgICAgdG1wX2luY2x1ZGVzPSIkY3VybF9pbmNsdWRlc193czJ0Y3BpcCIKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgc3lzdHlwZXMpCisgICAgICAgICAgICB0bXBfaW5jbHVkZXM9IiRjdXJsX2luY2x1ZGVzX3N5c190eXBlcyIKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgc3lzc29ja2V0KQorICAgICAgICAgICAgdG1wX2luY2x1ZGVzPSIkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0IgorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgdG1wX2luY2x1ZGVzPSIiCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICAgICAkdG1wX2luY2x1ZGVzCisgICAgICAgICAgICB0eXBlZGVmICRjdXJsX3R5cGVvZl9jdXJsX3NvY2tsZW5fdCBjdXJsX3NvY2tsZW5fdDsKKyAgICAgICAgICAgIHR5cGVkZWYgY2hhciBkdW1teV9hcnJbc2l6ZW9mKGN1cmxfc29ja2xlbl90KSA9PSAkdHN0X3NpemUgPyAxIDogLTFdOworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgICAgY3VybF9zb2NrbGVuX3QgZHVtbXk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgY3VybF9zaXplb2ZfY3VybF9zb2NrbGVuX3Q9IiR0c3Rfc2l6ZSIKKyAgICAgICAgICBjdXJsX3B1bGxfaGVhZGVyc19zb2NrbGVuX3Q9IiR0c3RfcHVsbF9oZWFkZXJzIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGN1cmxfc2l6ZW9mX2N1cmxfc29ja2xlbl90IiA+JjUKKyRhc19lY2hvICIkY3VybF9zaXplb2ZfY3VybF9zb2NrbGVuX3QiID4mNjsgfQorICBpZiB0ZXN0ICIkY3VybF9zaXplb2ZfY3VybF9zb2NrbGVuX3QiID0gInVua25vd24iOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgImNhbm5vdCBmaW5kIG91dCBzaXplIG9mIGN1cmxfc29ja2xlbl90LiIgIiRMSU5FTk8iIDUKKyAgZmkKKyAgIworICBjYXNlICRjdXJsX3B1bGxfaGVhZGVyc19zb2NrbGVuX3QgaW4KKyAgICB3czJ0Y3BpcCkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9FT0YKKyNkZWZpbmUgQ1VSTF9QVUxMX1dTMlRDUElQX0ggMQorX0VPRgorCisgICAgICA7OworICAgIHN5c3R5cGVzKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0VPRgorI2RlZmluZSBDVVJMX1BVTExfU1lTX1RZUEVTX0ggMQorX0VPRgorCisgICAgICA7OworICAgIHN5c3NvY2tldCkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9FT0YKKyNkZWZpbmUgQ1VSTF9QVUxMX1NZU19UWVBFU19IIDEKK19FT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0VPRgorI2RlZmluZSBDVVJMX1BVTExfU1lTX1NPQ0tFVF9IIDEKK19FT0YKKworICAgICAgOzsKKyAgZXNhYworCitjYXQgPj5jb25mZGVmcy5oIDw8X0VPRgorI2RlZmluZSBDVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVCAkY3VybF90eXBlb2ZfY3VybF9zb2NrbGVuX3QKK19FT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0VPRgorI2RlZmluZSBDVVJMX1NJWkVPRl9DVVJMX1NPQ0tMRU5fVCAkY3VybF9zaXplb2ZfY3VybF9zb2NrbGVuX3QKK19FT0YKKworCisKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJpbl9hZGRyX3QiICJhY19jdl90eXBlX2luX2FkZHJfdCIgIgorI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbl9hZGRyX3QiID0geCIieWVzOyB0aGVuIDoKKworZWxzZQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGluX2FkZHJfdCBlcXVpdmFsZW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbl9hZGRyX3QgZXF1aXZhbGVudC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtjdXJsX2N2X2luX2FkZHJfdF9lcXVpditzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGN1cmxfY3ZfaW5fYWRkcl90X2VxdWl2PSJ1bmtub3duIgorICAgICAgZm9yIHQgaW4gInVuc2lnbmVkIGxvbmciIGludCBzaXplX3QgdW5zaWduZWQgbG9uZzsgZG8KKyAgICAgICAgaWYgdGVzdCAiJGN1cmxfY3ZfaW5fYWRkcl90X2VxdWl2IiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICAgICAgJHQgZGF0YSA9IGluZXRfYWRkciAoIjEuMi4zLjQiKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgIGN1cmxfY3ZfaW5fYWRkcl90X2VxdWl2PSIkdCIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIGZpCisgICAgICBkb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGN1cmxfY3ZfaW5fYWRkcl90X2VxdWl2IiA+JjUKKyRhc19lY2hvICIkY3VybF9jdl9pbl9hZGRyX3RfZXF1aXYiID4mNjsgfQorICAgIGNhc2UgIiRjdXJsX2N2X2luX2FkZHJfdF9lcXVpdiIgaW4KKyAgICAgIHVua25vd24pCisgICAgICAgIGFzX2ZuX2Vycm9yICJDYW5ub3QgZmluZCBhIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIGluX2FkZHJfdCIgIiRMSU5FTk8iIDUKKyAgICAgICAgOzsKKyAgICAgICopCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgaW5fYWRkcl90ICRjdXJsX2N2X2luX2FkZHJfdF9lcXVpdgorX0FDRU9GCisKKyAgICAgICAgOzsKKyAgICBlc2FjCisKK2ZpCisKKworCisKKyAgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIiAiYWNfY3ZfdHlwZV9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSIgIgorI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSIgPSB4IiJ5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKworCisgIGZvciBhY19oZWFkZXIgaW4gc2lnbmFsLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInNpZ25hbC5oIiAiYWNfY3ZfaGVhZGVyX3NpZ25hbF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zaWduYWxfaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU0lHTkFMX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzaWdfYXRvbWljX3QiICJhY19jdl90eXBlX3NpZ19hdG9taWNfdCIgIgorI2lmZGVmIEhBVkVfU0lHTkFMX0gKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc2lnX2F0b21pY190IiA9IHgiInllczsgdGhlbiA6CisKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1QgMSIgPj5jb25mZGVmcy5oCisKKworZmkKKworICBjYXNlICIkYWNfY3ZfdHlwZV9zaWdfYXRvbWljX3QiIGluCisgICAgeWVzKQorICAgICAgIworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzaWdfYXRvbWljX3QgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIHZvbGF0aWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNpZ19hdG9taWNfdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgdm9sYXRpbGUuLi4gIiA+JjY7IH0KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBkdW1teSA9IDA7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICBhY19jdl9zaWdfYXRvbWljX3Rfdm9sYXRpbGU9Im5vIgorCitlbHNlCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgYWNfY3Zfc2lnX2F0b21pY190X3ZvbGF0aWxlPSJ5ZXMiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIworICAgICAgaWYgdGVzdCAiJGFjX2N2X3NpZ19hdG9taWNfdF92b2xhdGlsZSIgPSAieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1NJR19BVE9NSUNfVF9WT0xBVElMRSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9zaWduYWwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuICooc2lnbmFsICgwLCAwKSkgKDApID09IDE7CisgOworIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3R5cGVfc2lnbmFsPWludAorZWxzZQorICBhY19jdl90eXBlX3NpZ25hbD12b2lkCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90eXBlX3NpZ25hbCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3R5cGVfc2lnbmFsIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRVRTSUdUWVBFICRhY19jdl90eXBlX3NpZ25hbAorX0FDRU9GCisKKworCisKKyAgICBmb3IgYWNfaGVhZGVyIGluIHN5cy9zZWxlY3QuaCBzeXMvc29ja2V0LmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNlbGVjdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2VsZWN0Li4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9USU1FX0gKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgc2VsZWN0KDAsIDAsIDAsIDAsIDApOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgY3VybF9jdl9zZWxlY3Q9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgY3VybF9jdl9zZWxlY3Q9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkY3VybF9jdl9zZWxlY3QiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHR5cGVzIG9mIGFyZ3MgYW5kIHJldHVybiB0eXBlIGZvciBzZWxlY3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdHlwZXMgb2YgYXJncyBhbmQgcmV0dXJuIHR5cGUgZm9yIHNlbGVjdC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtjdXJsX2N2X2Z1bmNfc2VsZWN0X2FyZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjdXJsX2N2X2Z1bmNfc2VsZWN0X2FyZ3M9InVua25vd24iCisgICAgICBmb3Igc2VsX3JldHYgaW4gJ2ludCcgJ3NzaXplX3QnOyBkbworICAgICAgICBmb3Igc2VsX2FyZzEgaW4gJ2ludCcgJ3NzaXplX3QnICdzaXplX3QnICd1bnNpZ25lZCBsb25nIGludCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgICAgICAgICAgZm9yIHNlbF9hcmcyMzQgaW4gJ2ZkX3NldCAqJyAnaW50IConICd2b2lkIConOyBkbworICAgICAgICAgICAgZm9yIHNlbF9hcmc1IGluICdzdHJ1Y3QgdGltZXZhbCAqJyAnY29uc3Qgc3RydWN0IHRpbWV2YWwgKic7IGRvCisgICAgICAgICAgICAgIGlmIHRlc3QgIiRjdXJsX2N2X2Z1bmNfc2VsZWN0X2FyZ3MiID0gInVua25vd24iOyB0aGVuCisgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIFNFTEVDVENBTExDT05WIFBBU0NBTAorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbHNlCisjaWZkZWYgSEFWRV9USU1FX0gKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNkZWZpbmUgU0VMRUNUQ0FMTENPTlYKKyNlbmRpZgorI2lmbmRlZiBIQVZFX1NUUlVDVF9USU1FVkFMCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHsKKyAgICAgICAgICAgICAgICAgICAgICBsb25nIHR2X3NlYzsKKyAgICAgICAgICAgICAgICAgICAgICBsb25nIHR2X3VzZWM7CisgICAgICAgICAgICAgICAgICAgIH07CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZXh0ZXJuICRzZWxfcmV0diBTRUxFQ1RDQUxMQ09OViBzZWxlY3QoJHNlbF9hcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsX2FyZzIzNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbF9hcmcyMzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxfYXJnMjM0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsX2FyZzUpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgICAgICAgICAgICAkc2VsX2FyZzEgICBuZmRzPTA7CisgICAgICAgICAgICAgICAgICAgICRzZWxfYXJnMjM0IHJmZHM9MDsKKyAgICAgICAgICAgICAgICAgICAgJHNlbF9hcmcyMzQgd2Zkcz0wOworICAgICAgICAgICAgICAgICAgICAkc2VsX2FyZzIzNCBlZmRzPTA7CisgICAgICAgICAgICAgICAgICAgICRzZWxfcmV0diByZXMgPSBzZWxlY3QobmZkcywgcmZkcywgd2ZkcywgZWZkcywgMCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgICAgICAgICBjdXJsX2N2X2Z1bmNfc2VsZWN0X2FyZ3M9IiRzZWxfYXJnMSwkc2VsX2FyZzIzNCwkc2VsX2FyZzUsJHNlbF9yZXR2IgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZG9uZQorICAgICAgICBkb25lCisgICAgICBkb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGN1cmxfY3ZfZnVuY19zZWxlY3RfYXJncyIgPiY1CiskYXNfZWNobyAiJGN1cmxfY3ZfZnVuY19zZWxlY3RfYXJncyIgPiY2OyB9ICMgQUMtQ0FDSEUtQ0hFQ0sKKyAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX3NlbGVjdF9hcmdzIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBDYW5ub3QgZmluZCBwcm9wZXIgdHlwZXMgdG8gdXNlIGZvciBzZWxlY3QgYXJncyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYW5ub3QgZmluZCBwcm9wZXIgdHlwZXMgdG8gdXNlIGZvciBzZWxlY3QgYXJncyIgPiYyO30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogSEFWRV9TRUxFQ1Qgd2lsbCBub3QgYmUgZGVmaW5lZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBIQVZFX1NFTEVDVCB3aWxsIG5vdCBiZSBkZWZpbmVkIiA+JjI7fQorICAgIGVsc2UKKyAgICAgIHNlbGVjdF9wcmV2X0lGUz0kSUZTOyBJRlM9JywnCisgICAgICBzZXQgZHVtbXkgYGVjaG8gIiRjdXJsX2N2X2Z1bmNfc2VsZWN0X2FyZ3MiIHwgc2VkICdzL1wqL1wqL2cnYAorICAgICAgSUZTPSRzZWxlY3RfcHJldl9JRlMKKyAgICAgIHNoaWZ0CisgICAgICAjCisgICAgICBzZWxfcXVhbF90eXBlX2FyZzU9JDMKKyAgICAgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcxICQxCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzIzNCAkMgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRUxFQ1RfVFlQRV9SRVRWICQ0CitfQUNFT0YKKworICAgICAgIworICAgICAgcHJldl9zaF9vcHRzPSQtCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0IC1mCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIGNhc2UgIiRzZWxfcXVhbF90eXBlX2FyZzUiIGluCisgICAgICAgIGNvbnN0KikKKyAgICAgICAgICBzZWxfcXVhbF9hcmc1PWNvbnN0CisgICAgICAgICAgc2VsX3R5cGVfYXJnNT1gZWNobyAkc2VsX3F1YWxfdHlwZV9hcmc1IHwgc2VkICdzL15jb25zdCAvLydgCisgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2VsX3F1YWxfYXJnNT0KKyAgICAgICAgICBzZWxfdHlwZV9hcmc1PSRzZWxfcXVhbF90eXBlX2FyZzUKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRUxFQ1RfUVVBTF9BUkc1ICRzZWxfcXVhbF9hcmc1CitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzUgJHNlbF90eXBlX2FyZzUKK19BQ0VPRgorCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0ICtmCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NFTEVDVCAxCitfQUNFT0YKKworICAgICAgYWNfY3ZfZnVuY19zZWxlY3Q9InllcyIKKyAgICBmaQorICBmaQorCisKKworICAgICAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc29ja2V0LmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHJlY3YiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHJlY3YuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIHJlY3YoMCwgMCwgMCwgMCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBjdXJsX2N2X3JlY3Y9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgY3VybF9jdl9yZWN2PSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfcmVjdiIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdHlwZXMgb2YgYXJncyBhbmQgcmV0dXJuIHR5cGUgZm9yIHJlY3YiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdHlwZXMgb2YgYXJncyBhbmQgcmV0dXJuIHR5cGUgZm9yIHJlY3YuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7Y3VybF9jdl9mdW5jX3JlY3ZfYXJncytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3M9InVua25vd24iCisgICAgICBmb3IgcmVjdl9yZXR2IGluICdpbnQnICdzc2l6ZV90JzsgZG8KKyAgICAgICAgZm9yIHJlY3ZfYXJnMSBpbiAnaW50JyAnc3NpemVfdCcgJ1NPQ0tFVCc7IGRvCisgICAgICAgICAgZm9yIHJlY3ZfYXJnMiBpbiAnY2hhciAqJyAndm9pZCAqJzsgZG8KKyAgICAgICAgICAgIGZvciByZWN2X2FyZzMgaW4gJ3NpemVfdCcgJ2ludCcgJ3NvY2tsZW5fdCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgICAgICAgICAgICAgIGZvciByZWN2X2FyZzQgaW4gJ2ludCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGN1cmxfY3ZfZnVuY19yZWN2X2FyZ3MiID0gInVua25vd24iOyB0aGVuCisgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSA8d2luc29jay5oPgorI2VuZGlmCisjZW5kaWYKKyNkZWZpbmUgUkVDVkNBTExDT05WIFBBU0NBTAorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2RlZmluZSBSRUNWQ0FMTENPTlYKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiAkcmVjdl9yZXR2IFJFQ1ZDQUxMQ09OVgorICAgICAgICAgICAgICAgICAgICAgIHJlY3YoJHJlY3ZfYXJnMSwgJHJlY3ZfYXJnMiwgJHJlY3ZfYXJnMywgJHJlY3ZfYXJnNCk7CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgICAgICAgICAgICAgJHJlY3ZfYXJnMSBzPTA7CisgICAgICAgICAgICAgICAgICAgICAgJHJlY3ZfYXJnMiBidWY9MDsKKyAgICAgICAgICAgICAgICAgICAgICAkcmVjdl9hcmczIGxlbj0wOworICAgICAgICAgICAgICAgICAgICAgICRyZWN2X2FyZzQgZmxhZ3M9MDsKKyAgICAgICAgICAgICAgICAgICAgICAkcmVjdl9yZXR2IHJlcyA9IHJlY3YocywgYnVmLCBsZW4sIGZsYWdzKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgICAgICAgICAgY3VybF9jdl9mdW5jX3JlY3ZfYXJncz0iJHJlY3ZfYXJnMSwkcmVjdl9hcmcyLCRyZWN2X2FyZzMsJHJlY3ZfYXJnNCwkcmVjdl9yZXR2IgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGRvbmUKKyAgICAgICAgZG9uZQorICAgICAgZG9uZQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzIiA+JjUKKyRhc19lY2hvICIkY3VybF9jdl9mdW5jX3JlY3ZfYXJncyIgPiY2OyB9ICMgQUMtQ0FDSEUtQ0hFQ0sKKyAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX3JlY3ZfYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIGFzX2ZuX2Vycm9yICJDYW5ub3QgZmluZCBwcm9wZXIgdHlwZXMgdG8gdXNlIGZvciByZWN2IGFyZ3MiICIkTElORU5PIiA1CisgICAgZWxzZQorICAgICAgcmVjdl9wcmV2X0lGUz0kSUZTOyBJRlM9JywnCisgICAgICBzZXQgZHVtbXkgYGVjaG8gIiRjdXJsX2N2X2Z1bmNfcmVjdl9hcmdzIiB8IHNlZCAncy9cKi9cKi9nJ2AKKyAgICAgIElGUz0kcmVjdl9wcmV2X0lGUworICAgICAgc2hpZnQKKyAgICAgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRUNWX1RZUEVfQVJHMSAkMQorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRUNWX1RZUEVfQVJHMiAkMgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRUNWX1RZUEVfQVJHMyAkMworX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRUNWX1RZUEVfQVJHNCAkNAorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRUNWX1RZUEVfUkVUViAkNQorX0FDRU9GCisKKyAgICAgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1JFQ1YgMQorX0FDRU9GCisKKyAgICAgIGFjX2N2X2Z1bmNfcmVjdj0ieWVzIgorICAgIGZpCisgIGVsc2UKKyAgICBhc19mbl9lcnJvciAiVW5hYmxlIHRvIGxpbmsgZnVuY3Rpb24gcmVjdiIgIiRMSU5FTk8iIDUKKyAgZmkKKworCisgICAgICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2V2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgorICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcmVjdmZyb20iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHJlY3Zmcm9tLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICByZWN2ZnJvbSgwLCAwLCAwLCAwLCAwLCAwKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGN1cmxfY3ZfcmVjdmZyb209InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgY3VybF9jdl9yZWN2ZnJvbT0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiRjdXJsX2N2X3JlY3Zmcm9tIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0eXBlcyBvZiBhcmdzIGFuZCByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdHlwZXMgb2YgYXJncyBhbmQgcmV0dXJuIHR5cGUgZm9yIHJlY3Zmcm9tLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2N1cmxfY3ZfZnVuY19yZWN2ZnJvbV9hcmdzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgY3VybF9jdl9mdW5jX3JlY3Zmcm9tX2FyZ3M9InVua25vd24iCisgICAgICBmb3IgcmVjdmZyb21fcmV0diBpbiAnaW50JyAnc3NpemVfdCc7IGRvCisgICAgICAgIGZvciByZWN2ZnJvbV9hcmcxIGluICdpbnQnICdzc2l6ZV90JyAnU09DS0VUJzsgZG8KKyAgICAgICAgICBmb3IgcmVjdmZyb21fYXJnMiBpbiAnY2hhciAqJyAndm9pZCAqJzsgZG8KKyAgICAgICAgICAgIGZvciByZWN2ZnJvbV9hcmczIGluICdzaXplX3QnICdpbnQnICdzb2NrbGVuX3QnICd1bnNpZ25lZCBpbnQnOyBkbworICAgICAgICAgICAgICBmb3IgcmVjdmZyb21fYXJnNCBpbiAnaW50JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgICAgICAgICAgICBmb3IgcmVjdmZyb21fYXJnNSBpbiAnc3RydWN0IHNvY2thZGRyIConICd2b2lkIConICdjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKic7IGRvCisgICAgICAgICAgICAgICAgICBmb3IgcmVjdmZyb21fYXJnNiBpbiAnc29ja2xlbl90IConICdpbnQgKicgJ3Vuc2lnbmVkIGludCAqJyAnc2l6ZV90IConICd2b2lkIConOyBkbworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX3JlY3Zmcm9tX2FyZ3MiID0gInVua25vd24iOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIFJFQ1ZGUk9NQ0FMTENPTlYgUEFTQ0FMCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjZGVmaW5lIFJFQ1ZGUk9NQ0FMTENPTlYKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gJHJlY3Zmcm9tX3JldHYgUkVDVkZST01DQUxMQ09OVgorICAgICAgICAgICAgICAgICAgICAgICAgICByZWN2ZnJvbSgkcmVjdmZyb21fYXJnMSwgJHJlY3Zmcm9tX2FyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWN2ZnJvbV9hcmczLCAkcmVjdmZyb21fYXJnNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzUsICRyZWN2ZnJvbV9hcmc2KTsKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzEgcz0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fYXJnMiBidWY9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzMgbGVuPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWN2ZnJvbV9hcmc0IGZsYWdzPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWN2ZnJvbV9hcmc1IGFkZHI9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY3Zmcm9tX2FyZzYgYWRkcmxlbj0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVjdmZyb21fcmV0diByZXM9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVjdmZyb20ocywgYnVmLCBsZW4sIGZsYWdzLCBhZGRyLCBhZGRybGVuKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfY3ZfZnVuY19yZWN2ZnJvbV9hcmdzPSIkcmVjdmZyb21fYXJnMSwkcmVjdmZyb21fYXJnMiwkcmVjdmZyb21fYXJnMywkcmVjdmZyb21fYXJnNCwkcmVjdmZyb21fYXJnNSwkcmVjdmZyb21fYXJnNiwkcmVjdmZyb21fcmV0diIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGRvbmUKKyAgICAgICAgZG9uZQorICAgICAgZG9uZQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjdXJsX2N2X2Z1bmNfcmVjdmZyb21fYXJncyIgPiY1CiskYXNfZWNobyAiJGN1cmxfY3ZfZnVuY19yZWN2ZnJvbV9hcmdzIiA+JjY7IH0gIyBBQy1DQUNIRS1DSEVDSworICAgICMgTmVhcmx5IGxhc3QgbWludXRlIGNoYW5nZSBmb3IgdGhpcyByZWxlYXNlIHN0YXJ0cyBoZXJlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9SRUNWRlJPTSAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfcmVjdmZyb209InllcyIKKyAgICAjIE5lYXJseSBsYXN0IG1pbnV0ZSBjaGFuZ2UgZm9yIHRoaXMgcmVsZWFzZSBlbmRzIGhlcmUKKyAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX3JlY3Zmcm9tX2FyZ3MiID0gInVua25vd24iOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IENhbm5vdCBmaW5kIHByb3BlciB0eXBlcyB0byB1c2UgZm9yIHJlY3Zmcm9tIGFyZ3MiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogQ2Fubm90IGZpbmQgcHJvcGVyIHR5cGVzIHRvIHVzZSBmb3IgcmVjdmZyb20gYXJncyIgPiYyO30KKyAgICBlbHNlCisgICAgICByZWN2ZnJvbV9wcmV2X0lGUz0kSUZTOyBJRlM9JywnCisgICAgICBzZXQgZHVtbXkgYGVjaG8gIiRjdXJsX2N2X2Z1bmNfcmVjdmZyb21fYXJncyIgfCBzZWQgJ3MvXCovXCovZydgCisgICAgICBJRlM9JHJlY3Zmcm9tX3ByZXZfSUZTCisgICAgICBzaGlmdAorICAgICAgIworICAgICAgcmVjdmZyb21fcHRydF9hcmcyPSQyCisgICAgICByZWN2ZnJvbV9xdWFsX3B0cnRfYXJnNT0kNQorICAgICAgcmVjdmZyb21fcHRydF9hcmc2PSQ2CisgICAgICAjCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcxICQxCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyAkMworX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgJDQKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9SRVRWICQ3CitfQUNFT0YKKworICAgICAgIworICAgICAgcHJldl9zaF9vcHRzPSQtCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0IC1mCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIGNhc2UgIiRyZWN2ZnJvbV9xdWFsX3B0cnRfYXJnNSIgaW4KKyAgICAgICAgY29uc3QqKQorICAgICAgICAgIHJlY3Zmcm9tX3F1YWxfYXJnNT1jb25zdAorICAgICAgICAgIHJlY3Zmcm9tX3B0cnRfYXJnNT1gZWNobyAkcmVjdmZyb21fcXVhbF9wdHJ0X2FyZzUgfCBzZWQgJ3MvXmNvbnN0IC8vJ2AKKyAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICByZWN2ZnJvbV9xdWFsX2FyZzU9CisgICAgICAgICAgcmVjdmZyb21fcHRydF9hcmc1PSRyZWN2ZnJvbV9xdWFsX3B0cnRfYXJnNQorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgIworICAgICAgcmVjdmZyb21fdHlwZV9hcmcyPWBlY2hvICRyZWN2ZnJvbV9wdHJ0X2FyZzIgfCBzZWQgJ3MvIFwqLy8nYAorICAgICAgcmVjdmZyb21fdHlwZV9hcmc1PWBlY2hvICRyZWN2ZnJvbV9wdHJ0X2FyZzUgfCBzZWQgJ3MvIFwqLy8nYAorICAgICAgcmVjdmZyb21fdHlwZV9hcmc2PWBlY2hvICRyZWN2ZnJvbV9wdHJ0X2FyZzYgfCBzZWQgJ3MvIFwqLy8nYAorICAgICAgIworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMiAkcmVjdmZyb21fdHlwZV9hcmcyCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZGUk9NX1FVQUxfQVJHNSAkcmVjdmZyb21fcXVhbF9hcmc1CitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSAkcmVjdmZyb21fdHlwZV9hcmc1CitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiAkcmVjdmZyb21fdHlwZV9hcmc2CitfQUNFT0YKKworICAgICAgIworICAgICAgaWYgdGVzdCAiJHJlY3Zmcm9tX3R5cGVfYXJnMiIgPSAidm9pZCI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzJfSVNfVk9JRCAxCitfQUNFT0YKKworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRyZWN2ZnJvbV90eXBlX2FyZzUiID0gInZvaWQiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1X0lTX1ZPSUQgMQorX0FDRU9GCisKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcmVjdmZyb21fdHlwZV9hcmc2IiA9ICJ2b2lkIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNl9JU19WT0lEIDEKK19BQ0VPRgorCisgICAgICBmaQorICAgICAgIworICAgICAgY2FzZSAkcHJldl9zaF9vcHRzIGluCisgICAgICAgICpmKikKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHNldCArZgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAjCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9SRUNWRlJPTSAxCitfQUNFT0YKKworICAgICAgYWNfY3ZfZnVuY19yZWN2ZnJvbT0ieWVzIgorICAgIGZpCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBsaW5rIGZ1bmN0aW9uIHJlY3Zmcm9tIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBsaW5rIGZ1bmN0aW9uIHJlY3Zmcm9tIiA+JjI7fQorICBmaQorCisKKyAgICAgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3NvY2tldC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzZW5kIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzZW5kLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBzZW5kKDAsIDAsIDAsIDApOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgY3VybF9jdl9zZW5kPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGN1cmxfY3Zfc2VuZD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiRjdXJsX2N2X3NlbmQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHR5cGVzIG9mIGFyZ3MgYW5kIHJldHVybiB0eXBlIGZvciBzZW5kIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHR5cGVzIG9mIGFyZ3MgYW5kIHJldHVybiB0eXBlIGZvciBzZW5kLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2N1cmxfY3ZfZnVuY19zZW5kX2FyZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzPSJ1bmtub3duIgorICAgICAgZm9yIHNlbmRfcmV0diBpbiAnaW50JyAnc3NpemVfdCc7IGRvCisgICAgICAgIGZvciBzZW5kX2FyZzEgaW4gJ2ludCcgJ3NzaXplX3QnICdTT0NLRVQnOyBkbworICAgICAgICAgIGZvciBzZW5kX2FyZzIgaW4gJ2NoYXIgKicgJ3ZvaWQgKicgJ2NvbnN0IGNoYXIgKicgJ2NvbnN0IHZvaWQgKic7IGRvCisgICAgICAgICAgICBmb3Igc2VuZF9hcmczIGluICdzaXplX3QnICdpbnQnICdzb2NrbGVuX3QnICd1bnNpZ25lZCBpbnQnOyBkbworICAgICAgICAgICAgICBmb3Igc2VuZF9hcmc0IGluICdpbnQnICd1bnNpZ25lZCBpbnQnOyBkbworICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyN1bmRlZiBpbmxpbmUKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpZmRlZiBIQVZFX1dJTlNPQ0tfSAorI2luY2x1ZGUgPHdpbnNvY2suaD4KKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIFNFTkRDQUxMQ09OViBQQVNDQUwKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNkZWZpbmUgU0VORENBTExDT05WCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gJHNlbmRfcmV0diBTRU5EQ0FMTENPTlYKKyAgICAgICAgICAgICAgICAgICAgICBzZW5kKCRzZW5kX2FyZzEsICRzZW5kX2FyZzIsICRzZW5kX2FyZzMsICRzZW5kX2FyZzQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgICAgICAgICAgICAgICRzZW5kX2FyZzEgcz0wOworICAgICAgICAgICAgICAgICAgICAgICRzZW5kX2FyZzMgbGVuPTA7CisgICAgICAgICAgICAgICAgICAgICAgJHNlbmRfYXJnNCBmbGFncz0wOworICAgICAgICAgICAgICAgICAgICAgICRzZW5kX3JldHYgcmVzID0gc2VuZChzLCAwLCBsZW4sIGZsYWdzKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgICAgICAgICAgY3VybF9jdl9mdW5jX3NlbmRfYXJncz0iJHNlbmRfYXJnMSwkc2VuZF9hcmcyLCRzZW5kX2FyZzMsJHNlbmRfYXJnNCwkc2VuZF9yZXR2IgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGRvbmUKKyAgICAgICAgZG9uZQorICAgICAgZG9uZQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzIiA+JjUKKyRhc19lY2hvICIkY3VybF9jdl9mdW5jX3NlbmRfYXJncyIgPiY2OyB9ICMgQUMtQ0FDSEUtQ0hFQ0sKKyAgICBpZiB0ZXN0ICIkY3VybF9jdl9mdW5jX3NlbmRfYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIGFzX2ZuX2Vycm9yICJDYW5ub3QgZmluZCBwcm9wZXIgdHlwZXMgdG8gdXNlIGZvciBzZW5kIGFyZ3MiICIkTElORU5PIiA1CisgICAgZWxzZQorICAgICAgc2VuZF9wcmV2X0lGUz0kSUZTOyBJRlM9JywnCisgICAgICBzZXQgZHVtbXkgYGVjaG8gIiRjdXJsX2N2X2Z1bmNfc2VuZF9hcmdzIiB8IHNlZCAncy9cKi9cKi9nJ2AKKyAgICAgIElGUz0kc2VuZF9wcmV2X0lGUworICAgICAgc2hpZnQKKyAgICAgICMKKyAgICAgIHNlbmRfcXVhbF90eXBlX2FyZzI9JDIKKyAgICAgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRU5EX1RZUEVfQVJHMSAkMQorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRU5EX1RZUEVfQVJHMyAkMworX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRU5EX1RZUEVfQVJHNCAkNAorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRU5EX1RZUEVfUkVUViAkNQorX0FDRU9GCisKKyAgICAgICMKKyAgICAgIHByZXZfc2hfb3B0cz0kLQorICAgICAgIworICAgICAgY2FzZSAkcHJldl9zaF9vcHRzIGluCisgICAgICAgICpmKikKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHNldCAtZgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAjCisgICAgICBjYXNlICIkc2VuZF9xdWFsX3R5cGVfYXJnMiIgaW4KKyAgICAgICAgY29uc3QqKQorICAgICAgICAgIHNlbmRfcXVhbF9hcmcyPWNvbnN0CisgICAgICAgICAgc2VuZF90eXBlX2FyZzI9YGVjaG8gJHNlbmRfcXVhbF90eXBlX2FyZzIgfCBzZWQgJ3MvXmNvbnN0IC8vJ2AKKyAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBzZW5kX3F1YWxfYXJnMj0KKyAgICAgICAgICBzZW5kX3R5cGVfYXJnMj0kc2VuZF9xdWFsX3R5cGVfYXJnMgorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgIworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNFTkRfUVVBTF9BUkcyICRzZW5kX3F1YWxfYXJnMgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRU5EX1RZUEVfQVJHMiAkc2VuZF90eXBlX2FyZzIKK19BQ0VPRgorCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0ICtmCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NFTkQgMQorX0FDRU9GCisKKyAgICAgIGFjX2N2X2Z1bmNfc2VuZD0ieWVzIgorICAgIGZpCisgIGVsc2UKKyAgICBhc19mbl9lcnJvciAiVW5hYmxlIHRvIGxpbmsgZnVuY3Rpb24gc2VuZCIgIiRMSU5FTk8iIDUKKyAgZmkKKworCisgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3NvY2tldC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgTVNHX05PU0lHTkFMIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBNU0dfTk9TSUdOQUwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbXNnX25vc2lnbmFsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjdW5kZWYgaW5saW5lCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGludCBmbGFnPU1TR19OT1NJR05BTDsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGFjX2N2X21zZ19ub3NpZ25hbD0ieWVzIgorCitlbHNlCisKKyAgICAgIGFjX2N2X21zZ19ub3NpZ25hbD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbXNnX25vc2lnbmFsIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbXNnX25vc2lnbmFsIiA+JjY7IH0KKyAgY2FzZSAiJGFjX2N2X21zZ19ub3NpZ25hbCIgaW4KKyAgICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9NU0dfTk9TSUdOQUwgMQorX0FDRU9GCisKKyAgICAgIDs7CisgIGVzYWMKKworCisKK2N1cmxfaW5jbHVkZXNfdW5pc3RkPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCB1bmlzdGQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkY3VybF9pbmNsdWRlc191bmlzdGQKKyIKK2V2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgorICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworICAgICMKKyAgdHN0X2xpbmtzX2FsYXJtPSJ1bmtub3duIgorICB0c3RfcHJvdG9fYWxhcm09InVua25vd24iCisgIHRzdF9jb21waV9hbGFybT0idW5rbm93biIKKyAgdHN0X2FsbG93X2FsYXJtPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgYWxhcm0gY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBhbGFybSBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIGFsYXJtIGlubm9jdW91c19hbGFybQorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBhbGFybQorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgYWxhcm0gKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfYWxhcm0gfHwgZGVmaW5lZCBfX3N0dWJfX19hbGFybQorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBhbGFybSAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfYWxhcm09InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2FsYXJtPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19hbGFybSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgYWxhcm0gaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBhbGFybSBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY3VybF9pbmNsdWRlc191bmlzdGQKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiYWxhcm0iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fYWxhcm09InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19hbGFybT0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fYWxhcm0iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGFsYXJtIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgYWxhcm0gaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3VuaXN0ZAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IGFsYXJtKDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9hbGFybT0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2FsYXJtPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfYWxhcm0iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGFsYXJtIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgYWxhcm0gdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19hbGFybSIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2FsYXJtPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfYWxhcm09Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBhbGFybSBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGFsYXJtIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19hbGFybSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2FsYXJtIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfYWxhcm0iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19hbGFybSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9BTEFSTSAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfYWxhcm09InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfYWxhcm09Im5vIgorICBmaQorCisKK2N1cmxfaW5jbHVkZXNfc3RyaW5nPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorIyAgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorIyAgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3RyaW5nLmggc3RyaW5ncy5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRjdXJsX2luY2x1ZGVzX3N0cmluZworIgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCitjdXJsX2luY2x1ZGVzX2xpYmdlbj0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTElCR0VOX0gKKyMgIGluY2x1ZGUgPGxpYmdlbi5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggbGliZ2VuLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGN1cmxfaW5jbHVkZXNfbGliZ2VuCisiCitldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyAgICAgICAgIworICB0c3RfbGlua3NfYmFzZW5hbWU9InVua25vd24iCisgIHRzdF9wcm90b19iYXNlbmFtZT0idW5rbm93biIKKyAgdHN0X2NvbXBpX2Jhc2VuYW1lPSJ1bmtub3duIgorICB0c3RfYWxsb3dfYmFzZW5hbWU9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBiYXNlbmFtZSBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGJhc2VuYW1lIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgYmFzZW5hbWUgaW5ub2N1b3VzX2Jhc2VuYW1lCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIGJhc2VuYW1lCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBiYXNlbmFtZSAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9iYXNlbmFtZSB8fCBkZWZpbmVkIF9fc3R1Yl9fX2Jhc2VuYW1lCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGJhc2VuYW1lICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19iYXNlbmFtZT0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfYmFzZW5hbWU9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2Jhc2VuYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBiYXNlbmFtZSBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGJhc2VuYW1lIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgICAgJGN1cmxfaW5jbHVkZXNfbGliZ2VuCisgICAgICAkY3VybF9pbmNsdWRlc191bmlzdGQKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiYmFzZW5hbWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fYmFzZW5hbWU9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19iYXNlbmFtZT0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fYmFzZW5hbWUiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGJhc2VuYW1lIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgYmFzZW5hbWUgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgICAgICAkY3VybF9pbmNsdWRlc19saWJnZW4KKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfdW5pc3RkCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gYmFzZW5hbWUoMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2Jhc2VuYW1lPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfYmFzZW5hbWU9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9iYXNlbmFtZSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgYmFzZW5hbWUgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBiYXNlbmFtZSB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2Jhc2VuYW1lIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfYmFzZW5hbWU9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19iYXNlbmFtZT0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGJhc2VuYW1lIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgYmFzZW5hbWUgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2Jhc2VuYW1lIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fYmFzZW5hbWUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9iYXNlbmFtZSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2Jhc2VuYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0JBU0VOQU1FIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19iYXNlbmFtZT0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19iYXNlbmFtZT0ibm8iCisgIGZpCisKKworY3VybF9pbmNsdWRlc19zb2NrZXQ9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NPQ0tFVF9ICisjICBpbmNsdWRlIDxzb2NrZXQuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHNvY2tldC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRjdXJsX2luY2x1ZGVzX3NvY2tldAorIgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisgICAgICAjCisgIHRzdF9saW5rc19jbG9zZXNvY2tldD0idW5rbm93biIKKyAgdHN0X3Byb3RvX2Nsb3Nlc29ja2V0PSJ1bmtub3duIgorICB0c3RfY29tcGlfY2xvc2Vzb2NrZXQ9InVua25vd24iCisgIHRzdF9hbGxvd19jbG9zZXNvY2tldD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNsb3Nlc29ja2V0IGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY2xvc2Vzb2NrZXQgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjdXJsX2luY2x1ZGVzX3NvY2tldAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgaWYoMCAhPSBjbG9zZXNvY2tldCgwKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfY2xvc2Vzb2NrZXQ9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2Nsb3Nlc29ja2V0PSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19jbG9zZXNvY2tldCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY2xvc2Vzb2NrZXQgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjbG9zZXNvY2tldCBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGN1cmxfaW5jbHVkZXNfc29ja2V0CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImNsb3Nlc29ja2V0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2Nsb3Nlc29ja2V0PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fY2xvc2Vzb2NrZXQ9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2Nsb3Nlc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjbG9zZXNvY2tldCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNsb3Nlc29ja2V0IGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY3VybF9pbmNsdWRlc19zb2NrZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBjbG9zZXNvY2tldCgwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfY2xvc2Vzb2NrZXQ9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9jbG9zZXNvY2tldD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2Nsb3Nlc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjbG9zZXNvY2tldCB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNsb3Nlc29ja2V0IHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfY2xvc2Vzb2NrZXQiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19jbG9zZXNvY2tldD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2Nsb3Nlc29ja2V0PSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY2xvc2Vzb2NrZXQgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjbG9zZXNvY2tldCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfY2xvc2Vzb2NrZXQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19jbG9zZXNvY2tldCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2Nsb3Nlc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfY2xvc2Vzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfQ0xPU0VTT0NLRVQgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2Nsb3Nlc29ja2V0PSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2Nsb3Nlc29ja2V0PSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3NfY2xvc2Vzb2NrZXRfY2FtZWw9InVua25vd24iCisgIHRzdF9wcm90b19jbG9zZXNvY2tldF9jYW1lbD0idW5rbm93biIKKyAgdHN0X2NvbXBpX2Nsb3Nlc29ja2V0X2NhbWVsPSJ1bmtub3duIgorICB0c3RfYWxsb3dfY2xvc2Vzb2NrZXRfY2FtZWw9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBDbG9zZVNvY2tldCBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIENsb3NlU29ja2V0IGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGlmKDAgIT0gQ2xvc2VTb2NrZXQoMCkpCisgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2Nsb3Nlc29ja2V0X2NhbWVsPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19jbG9zZXNvY2tldF9jYW1lbD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfY2xvc2Vzb2NrZXRfY2FtZWwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIENsb3NlU29ja2V0IGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgQ2xvc2VTb2NrZXQgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJDbG9zZVNvY2tldCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19jbG9zZXNvY2tldF9jYW1lbD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2Nsb3Nlc29ja2V0X2NhbWVsPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19jbG9zZXNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgQ2xvc2VTb2NrZXQgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBDbG9zZVNvY2tldCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IENsb3NlU29ja2V0KDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9jbG9zZXNvY2tldF9jYW1lbD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2Nsb3Nlc29ja2V0X2NhbWVsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfY2xvc2Vzb2NrZXRfY2FtZWwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIENsb3NlU29ja2V0IHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgQ2xvc2VTb2NrZXQgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19jbG9zZXNvY2tldF9jYW1lbCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2Nsb3Nlc29ja2V0X2NhbWVsPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfY2xvc2Vzb2NrZXRfY2FtZWw9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBDbG9zZVNvY2tldCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIENsb3NlU29ja2V0IG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19jbG9zZXNvY2tldF9jYW1lbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2Nsb3Nlc29ja2V0X2NhbWVsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfY2xvc2Vzb2NrZXRfY2FtZWwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19jbG9zZXNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9DTE9TRVNPQ0tFVF9DQU1FTCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfY2xvc2Vzb2NrZXRfY2FtZWw9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfY2xvc2Vzb2NrZXRfY2FtZWw9Im5vIgorICBmaQorCisKKyAgICAgICAgIworICB0c3RfbGlua3NfY29ubmVjdD0idW5rbm93biIKKyAgdHN0X3Byb3RvX2Nvbm5lY3Q9InVua25vd24iCisgIHRzdF9jb21waV9jb25uZWN0PSJ1bmtub3duIgorICB0c3RfYWxsb3dfY29ubmVjdD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbm5lY3QgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb25uZWN0IGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAkY3VybF9pbmNsdWRlc19zb2NrZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGlmKDAgIT0gY29ubmVjdCgwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfY29ubmVjdD0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfY29ubmVjdD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfY29ubmVjdCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29ubmVjdCBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbm5lY3QgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjdXJsX2luY2x1ZGVzX3NvY2tldAorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJjb25uZWN0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2Nvbm5lY3Q9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19jb25uZWN0PSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19jb25uZWN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBjb25uZWN0IGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgY29ubmVjdCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY3VybF9pbmNsdWRlc19zb2NrZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBjb25uZWN0KDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9jb25uZWN0PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfY29ubmVjdD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2Nvbm5lY3QiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGNvbm5lY3QgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBjb25uZWN0IHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfY29ubmVjdCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2Nvbm5lY3Q9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19jb25uZWN0PSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29ubmVjdCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGNvbm5lY3QgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2Nvbm5lY3QiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19jb25uZWN0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfY29ubmVjdCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2Nvbm5lY3QiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfQ09OTkVDVCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfY29ubmVjdD0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19jb25uZWN0PSJubyIKKyAgZmkKKworCitjdXJsX2luY2x1ZGVzX2ZjbnRsPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgIGluY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCB1bmlzdGQuaCBmY250bC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRjdXJsX2luY2x1ZGVzX2ZjbnRsCisiCitldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyAgICAjCisgIHRzdF9saW5rc19mY250bD0idW5rbm93biIKKyAgdHN0X3Byb3RvX2ZjbnRsPSJ1bmtub3duIgorICB0c3RfY29tcGlfZmNudGw9InVua25vd24iCisgIHRzdF9hbGxvd19mY250bD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZjbnRsIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZmNudGwgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBmY250bCBpbm5vY3VvdXNfZmNudGwKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgZmNudGwKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGZjbnRsICgpOworI2lmIGRlZmluZWQgX19zdHViX2ZjbnRsIHx8IGRlZmluZWQgX19zdHViX19fZmNudGwKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZmNudGwgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2ZjbnRsPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19mY250bD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZmNudGwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZjbnRsIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZmNudGwgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfZmNudGwKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZmNudGwiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZmNudGw9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19mY250bD0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZmNudGwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZjbnRsIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZmNudGwgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX2ZjbnRsCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gZmNudGwoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2ZjbnRsPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZmNudGw9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9mY250bCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZmNudGwgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmY250bCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2ZjbnRsIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZmNudGw9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19mY250bD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZjbnRsIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZmNudGwgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2ZjbnRsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fZmNudGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9mY250bCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2ZjbnRsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0ZDTlRMIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19mY250bD0ieWVzIgorCisgICMKKyAgdHN0X2NvbXBpX2ZjbnRsX29fbm9uYmxvY2s9InVua25vd24iCisgIHRzdF9hbGxvd19mY250bF9vX25vbmJsb2NrPSJ1bmtub3duIgorICAjCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBzdW5vczQqIHwgYWl4MyogfCBiZW9zKikKKyAgICAgICAgICAgIGN1cmxfZGlzYWxsb3dfZmNudGxfb19ub25ibG9jaz0ieWVzIgorICAgICAgOzsKKyAgZXNhYworICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2ZjbnRsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmY250bCBPX05PTkJMT0NLIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZmNudGwgT19OT05CTE9DSyBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfZmNudGwKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgICAgaWYoMCAhPSBmY250bCgwLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9mY250bF9vX25vbmJsb2NrPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZmNudGxfb19ub25ibG9jaz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2ZjbnRsX29fbm9uYmxvY2siID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZjbnRsIE9fTk9OQkxPQ0sgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmY250bCBPX05PTkJMT0NLIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZmNudGxfb19ub25ibG9jayIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2ZjbnRsX29fbm9uYmxvY2s9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19mY250bF9vX25vbmJsb2NrPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZmNudGwgT19OT05CTE9DSyBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZjbnRsIE9fTk9OQkxPQ0sgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2ZjbnRsX29fbm9uYmxvY2siID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19mY250bF9vX25vbmJsb2NrIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0ZDTlRMX09fTk9OQkxPQ0sgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2ZjbnRsX29fbm9uYmxvY2s9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfZmNudGxfb19ub25ibG9jaz0ibm8iCisgIGZpCisKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfZmNudGw9Im5vIgorICBmaQorCisKK2N1cmxfaW5jbHVkZXNfc3RkaW89IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURElPX0gKKyMgIGluY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzdGRpby5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRjdXJsX2luY2x1ZGVzX3N0ZGlvCisiCitldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyAgICAjCisgIHRzdF9saW5rc19mZG9wZW49InVua25vd24iCisgIHRzdF9wcm90b19mZG9wZW49InVua25vd24iCisgIHRzdF9jb21waV9mZG9wZW49InVua25vd24iCisgIHRzdF9hbGxvd19mZG9wZW49InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmZG9wZW4gY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmZG9wZW4gY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBmZG9wZW4gaW5ub2N1b3VzX2Zkb3BlbgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBmZG9wZW4KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGZkb3BlbiAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9mZG9wZW4gfHwgZGVmaW5lZCBfX3N0dWJfX19mZG9wZW4KK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZmRvcGVuICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19mZG9wZW49InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2Zkb3Blbj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZmRvcGVuIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmZG9wZW4gaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmZG9wZW4gaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfc3RkaW8KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZmRvcGVuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2Zkb3Blbj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2Zkb3Blbj0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZmRvcGVuIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmZG9wZW4gaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmZG9wZW4gaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0ZGlvCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gZmRvcGVuKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9mZG9wZW49InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9mZG9wZW49Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9mZG9wZW4iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZkb3BlbiB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZkb3BlbiB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2Zkb3BlbiIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2Zkb3Blbj0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2Zkb3Blbj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZkb3BlbiBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZkb3BlbiBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZmRvcGVuIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fZmRvcGVuIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZmRvcGVuIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfZmRvcGVuIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0ZET1BFTiAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfZmRvcGVuPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2Zkb3Blbj0ibm8iCisgIGZpCisKKworY3VybF9pbmNsdWRlc19uZXRkYj0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIG5ldGRiLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKyIKK2V2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgorICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworICAgICAgICAjCisgIHRzdF9saW5rc19mcmVlYWRkcmluZm89InVua25vd24iCisgIHRzdF9wcm90b19mcmVlYWRkcmluZm89InVua25vd24iCisgIHRzdF9jb21waV9mcmVlYWRkcmluZm89InVua25vd24iCisgIHRzdF9hbGxvd19mcmVlYWRkcmluZm89InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmcmVlYWRkcmluZm8gY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmcmVlYWRkcmluZm8gY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgJGN1cmxfaW5jbHVkZXNfd3MydGNwaXAKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBmcmVlYWRkcmluZm8oMCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZnJlZWFkZHJpbmZvPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19mcmVlYWRkcmluZm89Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2ZyZWVhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZnJlZWFkZHJpbmZvIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZnJlZWFkZHJpbmZvIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlYWRkcmluZm8iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZnJlZWFkZHJpbmZvPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZnJlZWFkZHJpbmZvPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19mcmVlYWRkcmluZm8iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZyZWVhZGRyaW5mbyBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZyZWVhZGRyaW5mbyBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfd3MydGNwaXAKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBmcmVlYWRkcmluZm8oMCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2ZyZWVhZGRyaW5mbz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2ZyZWVhZGRyaW5mbz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2ZyZWVhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZnJlZWFkZHJpbmZvIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZnJlZWFkZHJpbmZvIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZnJlZWFkZHJpbmZvIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZnJlZWFkZHJpbmZvPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZnJlZWFkZHJpbmZvPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZnJlZWFkZHJpbmZvIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZnJlZWFkZHJpbmZvIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19mcmVlYWRkcmluZm8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19mcmVlYWRkcmluZm8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9mcmVlYWRkcmluZm8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19mcmVlYWRkcmluZm8iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRlJFRUFERFJJTkZPIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19mcmVlYWRkcmluZm89InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfZnJlZWFkZHJpbmZvPSJubyIKKyAgZmkKKworCitjdXJsX2luY2x1ZGVzX2lmYWRkcnM9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfSUZBRERSU19ICisjICBpbmNsdWRlIDxpZmFkZHJzLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc29ja2V0LmggbmV0aW5ldC9pbi5oIGlmYWRkcnMuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkY3VybF9pbmNsdWRlc19pZmFkZHJzCisiCitldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyAgICAjCisgIHRzdF9saW5rc19mcmVlaWZhZGRycz0idW5rbm93biIKKyAgdHN0X3Byb3RvX2ZyZWVpZmFkZHJzPSJ1bmtub3duIgorICB0c3RfY29tcGlfZnJlZWlmYWRkcnM9InVua25vd24iCisgIHRzdF9hbGxvd19mcmVlaWZhZGRycz0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZyZWVpZmFkZHJzIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZnJlZWlmYWRkcnMgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBmcmVlaWZhZGRycyBpbm5vY3VvdXNfZnJlZWlmYWRkcnMKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgZnJlZWlmYWRkcnMKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGZyZWVpZmFkZHJzICgpOworI2lmIGRlZmluZWQgX19zdHViX2ZyZWVpZmFkZHJzIHx8IGRlZmluZWQgX19zdHViX19fZnJlZWlmYWRkcnMKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZnJlZWlmYWRkcnMgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2ZyZWVpZmFkZHJzPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19mcmVlaWZhZGRycz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZnJlZWlmYWRkcnMiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZyZWVpZmFkZHJzIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZnJlZWlmYWRkcnMgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfaWZhZGRycworCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlaWZhZGRycyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19mcmVlaWZhZGRycz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2ZyZWVpZmFkZHJzPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19mcmVlaWZhZGRycyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZnJlZWlmYWRkcnMgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmcmVlaWZhZGRycyBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfaWZhZGRycworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBmcmVlaWZhZGRycygwKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZnJlZWlmYWRkcnM9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9mcmVlaWZhZGRycz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2ZyZWVpZmFkZHJzIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmcmVlaWZhZGRycyB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZyZWVpZmFkZHJzIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZnJlZWlmYWRkcnMiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19mcmVlaWZhZGRycz0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2ZyZWVpZmFkZHJzPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZnJlZWlmYWRkcnMgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmcmVlaWZhZGRycyBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZnJlZWlmYWRkcnMiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19mcmVlaWZhZGRycyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2ZyZWVpZmFkZHJzIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfZnJlZWlmYWRkcnMiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRlJFRUlGQUREUlMgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2ZyZWVpZmFkZHJzPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2ZyZWVpZmFkZHJzPSJubyIKKyAgZmkKKworCitjdXJsX2luY2x1ZGVzX3N5c194YXR0cj0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1hBVFRSX0gKKyMgIGluY2x1ZGUgPHN5cy94YXR0ci5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3hhdHRyLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGN1cmxfaW5jbHVkZXNfc3lzX3hhdHRyCisiCitldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyAgICAjCisgIHRzdF9saW5rc19mc2V0eGF0dHI9InVua25vd24iCisgIHRzdF9wcm90b19mc2V0eGF0dHI9InVua25vd24iCisgIHRzdF9jb21waV9mc2V0eGF0dHI9InVua25vd24iCisgIHRzdF9hbGxvd19mc2V0eGF0dHI9InVua25vd24iCisgIHRzdF9uYXJnc19mc2V0eGF0dHI9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmc2V0eGF0dHIgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmc2V0eGF0dHIgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBmc2V0eGF0dHIgaW5ub2N1b3VzX2ZzZXR4YXR0cgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBmc2V0eGF0dHIKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGZzZXR4YXR0ciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9mc2V0eGF0dHIgfHwgZGVmaW5lZCBfX3N0dWJfX19mc2V0eGF0dHIKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gZnNldHhhdHRyICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19mc2V0eGF0dHI9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2ZzZXR4YXR0cj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZnNldHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmc2V0eGF0dHIgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmc2V0eGF0dHIgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3hhdHRyCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImZzZXR4YXR0ciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19mc2V0eGF0dHI9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19mc2V0eGF0dHI9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2ZzZXR4YXR0ciIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZnNldHhhdHRyIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmc2V0eGF0dHIgdGFrZXMgNSBhcmdzLiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmc2V0eGF0dHIgdGFrZXMgNSBhcmdzLi4uLiAiID4mNjsgfQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19zeXNfeGF0dHIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBpZigwICE9IGZzZXR4YXR0cigwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfZnNldHhhdHRyPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19mc2V0eGF0dHI9IjUiCisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgdHN0X2NvbXBpX2ZzZXR4YXR0cj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZnNldHhhdHRyIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmc2V0eGF0dHIgdGFrZXMgNiBhcmdzLiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmc2V0eGF0dHIgdGFrZXMgNiBhcmdzLi4uLiAiID4mNjsgfQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19zeXNfeGF0dHIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBpZigwICE9IGZzZXR4YXR0cigwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfZnNldHhhdHRyPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19mc2V0eGF0dHI9IjYiCisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgdHN0X2NvbXBpX2ZzZXR4YXR0cj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZnNldHhhdHRyIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZnNldHhhdHRyIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2ZzZXR4YXR0ciIgPSAieWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZnNldHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmc2V0eGF0dHIgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmc2V0eGF0dHIgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19mc2V0eGF0dHIiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19mc2V0eGF0dHI9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19mc2V0eGF0dHI9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBmc2V0eGF0dHIgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBmc2V0eGF0dHIgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2ZzZXR4YXR0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2ZzZXR4YXR0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2ZzZXR4YXR0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2ZzZXR4YXR0ciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9GU0VUWEFUVFIgMQorX0FDRU9GCisKKyAgICAgICAgICAgICMKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2ZzZXR4YXR0ciIgLWVxICI1IjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZTRVRYQVRUUl81IDEiID4+Y29uZmRlZnMuaAorCisgICAgZWxpZiB0ZXN0ICIkdHN0X25hcmdzX2ZzZXR4YXR0ciIgLWVxICI2IjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZTRVRYQVRUUl82IDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKKyAgICAjCisgICAgYWNfY3ZfZnVuY19mc2V0eGF0dHI9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfZnNldHhhdHRyPSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3NfZnRydW5jYXRlPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZnRydW5jYXRlPSJ1bmtub3duIgorICB0c3RfY29tcGlfZnRydW5jYXRlPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZnRydW5jYXRlPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZnRydW5jYXRlIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZnRydW5jYXRlIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgZnRydW5jYXRlIGlubm9jdW91c19mdHJ1bmNhdGUKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgZnRydW5jYXRlCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBmdHJ1bmNhdGUgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfZnRydW5jYXRlIHx8IGRlZmluZWQgX19zdHViX19fZnRydW5jYXRlCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGZ0cnVuY2F0ZSAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZnRydW5jYXRlPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19mdHJ1bmNhdGU9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2Z0cnVuY2F0ZSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZnRydW5jYXRlIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZnRydW5jYXRlIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3VuaXN0ZAorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmdHJ1bmNhdGUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZnRydW5jYXRlPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZnRydW5jYXRlPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19mdHJ1bmNhdGUiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZ0cnVuY2F0ZSBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZ0cnVuY2F0ZSBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfdW5pc3RkCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gZnRydW5jYXRlKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9mdHJ1bmNhdGU9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9mdHJ1bmNhdGU9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9mdHJ1bmNhdGUiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZ0cnVuY2F0ZSB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZ0cnVuY2F0ZSB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2Z0cnVuY2F0ZSIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2Z0cnVuY2F0ZT0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2Z0cnVuY2F0ZT0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGZ0cnVuY2F0ZSBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGZ0cnVuY2F0ZSBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZnRydW5jYXRlIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fZnRydW5jYXRlIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZnRydW5jYXRlIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfZnRydW5jYXRlIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfZnRydW5jYXRlPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2Z0cnVuY2F0ZT0ibm8iCisgIGZpCisKKworY3VybF9pbmNsdWRlc19zdGRsaWI9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN0ZGxpYi5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRjdXJsX2luY2x1ZGVzX3N0ZGxpYgorIgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisgICAgICAgICAgICAjCisgIHRzdF9saW5rc19nZXRhZGRyaW5mbz0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dldGFkZHJpbmZvPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ2V0YWRkcmluZm89InVua25vd24iCisgIHRzdF93b3Jrc19nZXRhZGRyaW5mbz0idW5rbm93biIKKyAgdHN0X2FsbG93X2dldGFkZHJpbmZvPSJ1bmtub3duIgorICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRhZGRyaW5mbyBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGFkZHJpbmZvIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgaWYoMCAhPSBnZXRhZGRyaW5mbygwLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZ2V0YWRkcmluZm89InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldGFkZHJpbmZvPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0YWRkcmluZm8gaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRhZGRyaW5mbyBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY3VybF9pbmNsdWRlc193czJ0Y3BpcAorICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZ2V0YWRkcmluZm8iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZ2V0YWRkcmluZm89InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRhZGRyaW5mbz0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZ2V0YWRkcmluZm8iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGFkZHJpbmZvIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0YWRkcmluZm8gaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBnZXRhZGRyaW5mbygwLCAwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZ2V0YWRkcmluZm89InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9nZXRhZGRyaW5mbz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldGFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRhZGRyaW5mbyBzZWVtcyB0byB3b3JrIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGFkZHJpbmZvIHNlZW1zIHRvIHdvcmsuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgImNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0ZGxpYgorICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7CisgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqYWkgPSAwOworICAgICAgICBpbnQgZXJyb3I7CisKKyAgICAgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgICAgICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfTlVNRVJJQ0hPU1Q7CisgICAgICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgICAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKyAgICAgICAgZXJyb3IgPSBnZXRhZGRyaW5mbygiMTI3LjAuMC4xIiwgMCwgJmhpbnRzLCAmYWkpOworICAgICAgICBpZihlcnJvciB8fCAhYWkpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICBlbHNlCisgICAgICAgICAgZXhpdCgwKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF93b3Jrc19nZXRhZGRyaW5mbz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3dvcmtzX2dldGFkZHJpbmZvPSJubyIKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGFkZHJpbmZvIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJHRzdF93b3Jrc19nZXRhZGRyaW5mbyIgIT0gIm5vIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0YWRkcmluZm8gdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRhZGRyaW5mbyB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2dldGFkZHJpbmZvIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ2V0YWRkcmluZm89InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19nZXRhZGRyaW5mbz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGFkZHJpbmZvIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0YWRkcmluZm8gbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGFkZHJpbmZvIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fZ2V0YWRkcmluZm8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9nZXRhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dldGFkZHJpbmZvIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3Rfd29ya3NfZ2V0YWRkcmluZm8iICE9ICJubyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2dldGFkZHJpbmZvPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2dldGFkZHJpbmZvPSJubyIKKyAgICBhY19jdl9mdW5jX2dldGFkZHJpbmZvX3RocmVhZHNhZmU9Im5vIgorICBmaQorICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2dldGFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRhZGRyaW5mbyBpcyB0aHJlYWRzYWZlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGFkZHJpbmZvIGlzIHRocmVhZHNhZmUuLi4gIiA+JjY7IH0KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbMTIzNF0uKiB8IGFpeDUuWzAxXS4qKQorICAgICAgICAgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICAgIDs7CisgICAgICBhaXgqKQorICAgICAgICAgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgICAgICA7OworICAgICAgZGFyd2luWzEyMzQ1XS4qKQorICAgICAgICAgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICAgIDs7CisgICAgICBkYXJ3aW4qKQorICAgICAgICAgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgICAgICA7OworICAgICAgZnJlZWJzZFsxMjM0XS4qIHwgZnJlZWJzZDUuWzEyMzRdKikKKyAgICAgICAgICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89Im5vIgorICAgICAgICA7OworICAgICAgZnJlZWJzZCopCisgICAgICAgICAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJ5ZXMiCisgICAgICAgIDs7CisgICAgICBocHV4WzEyMzQ1Njc4OV0uKiB8IGhwdXgxMC4qIHwgaHB1eDExLjAqIHwgaHB1eDExLjEwKikKKyAgICAgICAgICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89Im5vIgorICAgICAgICA7OworICAgICAgaHB1eCopCisgICAgICAgICAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJ5ZXMiCisgICAgICAgIDs7CisgICAgICBuZXRic2RbMTIzXS4qKQorICAgICAgICAgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICAgIDs7CisgICAgICBuZXRic2QqKQorICAgICAgICAgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgICAgICA7OworICAgICAgKmJzZCopCisgICAgICAgICAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJubyIKKyAgICAgICAgOzsKKyAgICAgIHNvbGFyaXMyKikKKyAgICAgICAgICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InllcyIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgaWYgdGVzdCAiJHRzdF90c2FmZV9nZXRhZGRyaW5mbyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisKK2ludCBtYWluICh2b2lkKQoreworCisjaWYgZGVmaW5lZChfUE9TSVhfQ19TT1VSQ0UpICYmIChfUE9TSVhfQ19TT1VSQ0UgPj0gMjAwODA5TCkKKyAgICAgICAgICByZXR1cm4gMDsKKyNlbGlmIGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgJiYgKF9YT1BFTl9TT1VSQ0UgPj0gNzAwKQorICAgICAgICAgIHJldHVybiAwOworI2Vsc2UKKyAgICAgICAgICBmb3JjZSBjb21waWxhdGlvbiBlcnJvcgorI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdHN0X3RzYWZlX2dldGFkZHJpbmZvIiA9ICJ1bmtub3duIjsgdGhlbgorCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfd3MydGNwaXAKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorCitpbnQgbWFpbiAodm9pZCkKK3sKKyNpZmRlZiBoX2Vycm5vCisgIHJldHVybiAwOworI2Vsc2UKKyAgZm9yY2UgY29tcGlsYXRpb24gZXJyb3IKKyNlbmRpZgorfQorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgdHN0X3N5bWJvbF9kZWZpbmVkPSJ5ZXMiCisKK2Vsc2UKKworICAgIHRzdF9zeW1ib2xfZGVmaW5lZD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAiJHRzdF9zeW1ib2xfZGVmaW5lZCIgPSAieWVzIjsgdGhlbgorICAgIGN1cmxfY3ZfaGF2ZV9kZWZfaF9lcnJubz15ZXMKKworICBlbHNlCisgICAgY3VybF9jdl9oYXZlX2RlZl9oX2Vycm5vPW5vCisKKyAgZmkKKworICAgICAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfaF9lcnJubyIgPSAibm8iOyB0aGVuCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF90c2FmZV9nZXRhZGRyaW5mbyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgIGZpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR0c3RfdHNhZmVfZ2V0YWRkcmluZm8iID4mNQorJGFzX2VjaG8gIiR0c3RfdHNhZmVfZ2V0YWRkcmluZm8iID4mNjsgfQorICAgIGlmIHRlc3QgIiR0c3RfdHNhZmVfZ2V0YWRkcmluZm8iID0gInllcyI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUgMQorX0FDRU9GCisKKyAgICAgIGFjX2N2X2Z1bmNfZ2V0YWRkcmluZm9fdGhyZWFkc2FmZT0ieWVzIgorICAgIGVsc2UKKyAgICAgIGFjX2N2X2Z1bmNfZ2V0YWRkcmluZm9fdGhyZWFkc2FmZT0ibm8iCisgICAgZmkKKyAgZmkKKworCisgICAgICAjCisgIHRzdF9saW5rc19nYWlfc3RyZXJyb3I9InVua25vd24iCisgIHRzdF9wcm90b19nYWlfc3RyZXJyb3I9InVua25vd24iCisgIHRzdF9jb21waV9nYWlfc3RyZXJyb3I9InVua25vd24iCisgIHRzdF9hbGxvd19nYWlfc3RyZXJyb3I9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnYWlfc3RyZXJyb3IgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnYWlfc3RyZXJyb3IgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpZigwICE9IGdhaV9zdHJlcnJvcigwKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZ2FpX3N0cmVycm9yPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19nYWlfc3RyZXJyb3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dhaV9zdHJlcnJvciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2FpX3N0cmVycm9yIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2FpX3N0cmVycm9yIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJnYWlfc3RyZXJyb3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZ2FpX3N0cmVycm9yPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZ2FpX3N0cmVycm9yPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19nYWlfc3RyZXJyb3IiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdhaV9zdHJlcnJvciBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdhaV9zdHJlcnJvciBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBnYWlfc3RyZXJyb3IoMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2dhaV9zdHJlcnJvcj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2dhaV9zdHJlcnJvcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dhaV9zdHJlcnJvciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2FpX3N0cmVycm9yIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2FpX3N0cmVycm9yIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZ2FpX3N0cmVycm9yIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ2FpX3N0cmVycm9yPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ2FpX3N0cmVycm9yPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2FpX3N0cmVycm9yIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2FpX3N0cmVycm9yIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nYWlfc3RyZXJyb3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nYWlfc3RyZXJyb3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9nYWlfc3RyZXJyb3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19nYWlfc3RyZXJyb3IiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0FJX1NUUkVSUk9SIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19nYWlfc3RyZXJyb3I9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfZ2FpX3N0cmVycm9yPSJubyIKKyAgZmkKKworCisgICAgICAjCisgIHRzdF9saW5rc19nZXRob3N0YnlhZGRyPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0aG9zdGJ5YWRkcj0idW5rbm93biIKKyAgdHN0X2NvbXBpX2dldGhvc3RieWFkZHI9InVua25vd24iCisgIHRzdF9hbGxvd19nZXRob3N0YnlhZGRyPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkciBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RieWFkZHIgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpZigwICE9IGdldGhvc3RieWFkZHIoMCwgMCwgMCkpCisgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldGhvc3RieWFkZHI9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldGhvc3RieWFkZHI9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieWFkZHIiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RieWFkZHIgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnlhZGRyIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJnZXRob3N0YnlhZGRyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2dldGhvc3RieWFkZHI9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnlhZGRyPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0YnlhZGRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0YnlhZGRyIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkciBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBnZXRob3N0YnlhZGRyKDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9nZXRob3N0YnlhZGRyPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieWFkZHIiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RieWFkZHIgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnlhZGRyIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZ2V0aG9zdGJ5YWRkciIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2dldGhvc3RieWFkZHI9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19nZXRob3N0YnlhZGRyPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkciBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RieWFkZHIgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieWFkZHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0YnlhZGRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dldGhvc3RieWFkZHIiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5YWRkcj0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19nZXRob3N0YnlhZGRyPSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3NfZ2V0aG9zdGJ5YWRkcl9yPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0aG9zdGJ5YWRkcl9yPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkcl9yPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZ2V0aG9zdGJ5YWRkcl9yPSJ1bmtub3duIgorICB0c3RfbmFyZ3NfZ2V0aG9zdGJ5YWRkcl9yPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkcl9yIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkcl9yIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgZ2V0aG9zdGJ5YWRkcl9yIGlubm9jdW91c19nZXRob3N0YnlhZGRyX3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgZ2V0aG9zdGJ5YWRkcl9yCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRob3N0YnlhZGRyX3IgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfZ2V0aG9zdGJ5YWRkcl9yIHx8IGRlZmluZWQgX19zdHViX19fZ2V0aG9zdGJ5YWRkcl9yCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldGhvc3RieWFkZHJfciAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZ2V0aG9zdGJ5YWRkcl9yPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19nZXRob3N0YnlhZGRyX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieWFkZHJfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkcl9yIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkcl9yIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldGhvc3RieWFkZHJfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnlhZGRyX3I9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnlhZGRyX3I9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2dldGhvc3RieWFkZHJfciIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0aG9zdGJ5YWRkcl9yIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0YnlhZGRyX3IgdGFrZXMgNSBhcmdzLiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnlhZGRyX3IgdGFrZXMgNSBhcmdzLi4uLiAiID4mNjsgfQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgIGlmKDAgIT0gZ2V0aG9zdGJ5YWRkcl9yKDAsIDAsIDAsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgIHRzdF9jb21waV9nZXRob3N0YnlhZGRyX3I9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2dldGhvc3RieWFkZHJfcj0iNSIKKworZWxzZQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkcl9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19nZXRob3N0YnlhZGRyX3IiID0gInVua25vd24iOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RieWFkZHJfciB0YWtlcyA3IGFyZ3MuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RieWFkZHJfciB0YWtlcyA3IGFyZ3MuLi4uICIgPiY2OyB9CisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgaWYoMCAhPSBnZXRob3N0YnlhZGRyX3IoMCwgMCwgMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgdHN0X2NvbXBpX2dldGhvc3RieWFkZHJfcj0ieWVzIgorICAgICAgICB0c3RfbmFyZ3NfZ2V0aG9zdGJ5YWRkcl9yPSI3IgorCitlbHNlCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIHRzdF9jb21waV9nZXRob3N0YnlhZGRyX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldGhvc3RieWFkZHJfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkcl9yIHRha2VzIDggYXJncy4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkcl9yIHRha2VzIDggYXJncy4uLi4gIiA+JjY7IH0KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBpZigwICE9IGdldGhvc3RieWFkZHJfcigwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkcl9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXRob3N0YnlhZGRyX3I9IjgiCisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgdHN0X2NvbXBpX2dldGhvc3RieWFkZHJfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkcl9yIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5YWRkcl9yIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieWFkZHJfciIgPSAieWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkcl9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0YnlhZGRyX3IgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnlhZGRyX3IgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19nZXRob3N0YnlhZGRyX3IiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19nZXRob3N0YnlhZGRyX3I9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19nZXRob3N0YnlhZGRyX3I9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0YnlhZGRyX3IgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnlhZGRyX3IgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieWFkZHJfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dldGhvc3RieWFkZHJfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieWFkZHJfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dldGhvc3RieWFkZHJfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSX1IgMQorX0FDRU9GCisKKyAgICAgICAgICAgICMKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldGhvc3RieWFkZHJfciIgLWVxICI1IjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFJfUl81IDEiID4+Y29uZmRlZnMuaAorCisgICAgZWxpZiB0ZXN0ICIkdHN0X25hcmdzX2dldGhvc3RieWFkZHJfciIgLWVxICI3IjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFJfUl83IDEiID4+Y29uZmRlZnMuaAorCisgICAgZWxpZiB0ZXN0ICIkdHN0X25hcmdzX2dldGhvc3RieWFkZHJfciIgLWVxICI4IjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFJfUl84IDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKKyAgICAjCisgICAgYWNfY3ZfZnVuY19nZXRob3N0YnlhZGRyX3I9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5YWRkcl9yPSJubyIKKyAgZmkKKworCisgICAgICAjCisgIHRzdF9saW5rc19nZXRob3N0YnluYW1lPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0aG9zdGJ5bmFtZT0idW5rbm93biIKKyAgdHN0X2NvbXBpX2dldGhvc3RieW5hbWU9InVua25vd24iCisgIHRzdF9hbGxvd19nZXRob3N0YnluYW1lPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZSBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RieW5hbWUgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpZigwICE9IGdldGhvc3RieW5hbWUoMCkpCisgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldGhvc3RieW5hbWU9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldGhvc3RieW5hbWU9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieW5hbWUiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RieW5hbWUgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnluYW1lIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJnZXRob3N0YnluYW1lIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2dldGhvc3RieW5hbWU9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnluYW1lPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0YnluYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0YnluYW1lIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZSBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBnZXRob3N0YnluYW1lKDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9nZXRob3N0YnluYW1lPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5bmFtZT0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieW5hbWUiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RieW5hbWUgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnluYW1lIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZ2V0aG9zdGJ5bmFtZSIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2dldGhvc3RieW5hbWU9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19nZXRob3N0YnluYW1lPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZSBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RieW5hbWUgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieW5hbWUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0YnluYW1lIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZ2V0aG9zdGJ5bmFtZSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dldGhvc3RieW5hbWUiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZT0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lPSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3NfZ2V0aG9zdGJ5bmFtZV9yPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0aG9zdGJ5bmFtZV9yPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ2V0aG9zdGJ5bmFtZV9yPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZ2V0aG9zdGJ5bmFtZV9yPSJ1bmtub3duIgorICB0c3RfbmFyZ3NfZ2V0aG9zdGJ5bmFtZV9yPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZV9yIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZV9yIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgZ2V0aG9zdGJ5bmFtZV9yIGlubm9jdW91c19nZXRob3N0YnluYW1lX3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgZ2V0aG9zdGJ5bmFtZV9yCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRob3N0YnluYW1lX3IgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfZ2V0aG9zdGJ5bmFtZV9yIHx8IGRlZmluZWQgX19zdHViX19fZ2V0aG9zdGJ5bmFtZV9yCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldGhvc3RieW5hbWVfciAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZ2V0aG9zdGJ5bmFtZV9yPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19nZXRob3N0YnluYW1lX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieW5hbWVfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZV9yIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZV9yIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldGhvc3RieW5hbWVfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnluYW1lX3I9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnluYW1lX3I9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2dldGhvc3RieW5hbWVfciIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0aG9zdGJ5bmFtZV9yIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0YnluYW1lX3IgdGFrZXMgMyBhcmdzLiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnluYW1lX3IgdGFrZXMgMyBhcmdzLi4uLiAiID4mNjsgfQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgIGlmKDAgIT0gZ2V0aG9zdGJ5bmFtZV9yKDAsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgIHRzdF9jb21waV9nZXRob3N0YnluYW1lX3I9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2dldGhvc3RieW5hbWVfcj0iMyIKKworZWxzZQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5bmFtZV9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19nZXRob3N0YnluYW1lX3IiID0gInVua25vd24iOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RieW5hbWVfciB0YWtlcyA1IGFyZ3MuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RieW5hbWVfciB0YWtlcyA1IGFyZ3MuLi4uICIgPiY2OyB9CisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgaWYoMCAhPSBnZXRob3N0YnluYW1lX3IoMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgdHN0X2NvbXBpX2dldGhvc3RieW5hbWVfcj0ieWVzIgorICAgICAgICB0c3RfbmFyZ3NfZ2V0aG9zdGJ5bmFtZV9yPSI1IgorCitlbHNlCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIHRzdF9jb21waV9nZXRob3N0YnluYW1lX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldGhvc3RieW5hbWVfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZV9yIHRha2VzIDYgYXJncy4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZV9yIHRha2VzIDYgYXJncy4uLi4gIiA+JjY7IH0KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBpZigwICE9IGdldGhvc3RieW5hbWVfcigwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5bmFtZV9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXRob3N0YnluYW1lX3I9IjYiCisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgdHN0X2NvbXBpX2dldGhvc3RieW5hbWVfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZV9yIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdGJ5bmFtZV9yIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieW5hbWVfciIgPSAieWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZ2V0aG9zdGJ5bmFtZV9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0YnluYW1lX3IgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnluYW1lX3IgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19nZXRob3N0YnluYW1lX3IiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19nZXRob3N0YnluYW1lX3I9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19nZXRob3N0YnluYW1lX3I9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0YnluYW1lX3IgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0YnluYW1lX3IgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieW5hbWVfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dldGhvc3RieW5hbWVfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieW5hbWVfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dldGhvc3RieW5hbWVfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1IgMQorX0FDRU9GCisKKyAgICAgICAgICAgICMKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldGhvc3RieW5hbWVfciIgLWVxICIzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zIDEiID4+Y29uZmRlZnMuaAorCisgICAgZWxpZiB0ZXN0ICIkdHN0X25hcmdzX2dldGhvc3RieW5hbWVfciIgLWVxICI1IjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUl81IDEiID4+Y29uZmRlZnMuaAorCisgICAgZWxpZiB0ZXN0ICIkdHN0X25hcmdzX2dldGhvc3RieW5hbWVfciIgLWVxICI2IjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUl82IDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKKyAgICAjCisgICAgYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lX3I9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZV9yPSJubyIKKyAgZmkKKworCisgICAgICAjCisgIHRzdF9saW5rc19nZXRob3N0bmFtZT0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dldGhvc3RuYW1lPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ2V0aG9zdG5hbWU9InVua25vd24iCisgIHRzdF9hbGxvd19nZXRob3N0bmFtZT0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGhvc3RuYW1lIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aG9zdG5hbWUgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjdXJsX2luY2x1ZGVzX3VuaXN0ZAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgaWYoMCAhPSBnZXRob3N0bmFtZSgwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZ2V0aG9zdG5hbWU9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldGhvc3RuYW1lPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRob3N0bmFtZSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdG5hbWUgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0bmFtZSBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGN1cmxfaW5jbHVkZXNfdW5pc3RkCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldGhvc3RuYW1lIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2dldGhvc3RuYW1lPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZ2V0aG9zdG5hbWU9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2dldGhvc3RuYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0bmFtZSBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RuYW1lIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY3VybF9pbmNsdWRlc191bmlzdGQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBnZXRob3N0bmFtZSgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZ2V0aG9zdG5hbWU9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9nZXRob3N0bmFtZT0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RuYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRob3N0bmFtZSB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGhvc3RuYW1lIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZ2V0aG9zdG5hbWUiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19nZXRob3N0bmFtZT0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2dldGhvc3RuYW1lPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aG9zdG5hbWUgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRob3N0bmFtZSBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0aG9zdG5hbWUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0bmFtZSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RuYW1lIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfZ2V0aG9zdG5hbWUiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0VUSE9TVE5BTUUgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2dldGhvc3RuYW1lPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2dldGhvc3RuYW1lPSJubyIKKyAgZmkKKworCisgICAgICAjCisgIHRzdF9saW5rc19nZXRpZmFkZHJzPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0aWZhZGRycz0idW5rbm93biIKKyAgdHN0X2NvbXBpX2dldGlmYWRkcnM9InVua25vd24iCisgIHRzdF93b3Jrc19nZXRpZmFkZHJzPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZ2V0aWZhZGRycz0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGlmYWRkcnMgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRpZmFkZHJzIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgZ2V0aWZhZGRycyBpbm5vY3VvdXNfZ2V0aWZhZGRycworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBnZXRpZmFkZHJzCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRpZmFkZHJzICgpOworI2lmIGRlZmluZWQgX19zdHViX2dldGlmYWRkcnMgfHwgZGVmaW5lZCBfX3N0dWJfX19nZXRpZmFkZHJzCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldGlmYWRkcnMgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldGlmYWRkcnM9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dldGlmYWRkcnM9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGlmYWRkcnMiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGlmYWRkcnMgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRpZmFkZHJzIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX2lmYWRkcnMKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZ2V0aWZhZGRycyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRpZmFkZHJzPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZ2V0aWZhZGRycz0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZ2V0aWZhZGRycyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aWZhZGRycyBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGlmYWRkcnMgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX2lmYWRkcnMKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBnZXRpZmFkZHJzKDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9nZXRpZmFkZHJzPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZ2V0aWZhZGRycz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldGlmYWRkcnMiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldGlmYWRkcnMgc2VlbXMgdG8gd29yayIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRpZmFkZHJzIHNlZW1zIHRvIHdvcmsuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgImNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0ZGxpYgorICAgICAgICAkY3VybF9pbmNsdWRlc19pZmFkZHJzCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIHN0cnVjdCBpZmFkZHJzICppZmEgPSAwOworICAgICAgICBpbnQgZXJyb3I7CisKKyAgICAgICAgZXJyb3IgPSBnZXRpZmFkZHJzKCZpZmEpOworICAgICAgICBpZihlcnJvciB8fCAhaWZhKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgIGV4aXQoMCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3Rfd29ya3NfZ2V0aWZhZGRycz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3dvcmtzX2dldGlmYWRkcnM9Im5vIgorCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZ2V0aWZhZGRycyIgPSAieWVzIiAmJgorICAgIHRlc3QgIiR0c3Rfd29ya3NfZ2V0aWZhZGRycyIgIT0gIm5vIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0aWZhZGRycyB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldGlmYWRkcnMgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19nZXRpZmFkZHJzIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ2V0aWZhZGRycz0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2dldGlmYWRkcnM9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRpZmFkZHJzIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0aWZhZGRycyBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0aWZhZGRycyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dldGlmYWRkcnMiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9nZXRpZmFkZHJzIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfZ2V0aWZhZGRycyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3dvcmtzX2dldGlmYWRkcnMiICE9ICJubyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0VUSUZBRERSUyAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfZ2V0aWZhZGRycz0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19nZXRpZmFkZHJzPSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3NfZ2V0c2VydmJ5cG9ydF9yPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0c2VydmJ5cG9ydF9yPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZ2V0c2VydmJ5cG9ydF9yPSJ1bmtub3duIgorICB0c3RfbmFyZ3NfZ2V0c2VydmJ5cG9ydF9yPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0c2VydmJ5cG9ydF9yIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0c2VydmJ5cG9ydF9yIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgZ2V0c2VydmJ5cG9ydF9yIGlubm9jdW91c19nZXRzZXJ2Ynlwb3J0X3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgZ2V0c2VydmJ5cG9ydF9yCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRzZXJ2Ynlwb3J0X3IgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfZ2V0c2VydmJ5cG9ydF9yIHx8IGRlZmluZWQgX19zdHViX19fZ2V0c2VydmJ5cG9ydF9yCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldHNlcnZieXBvcnRfciAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19nZXRzZXJ2Ynlwb3J0X3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldHNlcnZieXBvcnRfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0c2VydmJ5cG9ydF9yIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0c2VydmJ5cG9ydF9yIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdldHNlcnZieXBvcnRfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3I9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2dldHNlcnZieXBvcnRfciIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0c2VydmJ5cG9ydF9yIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgdGFrZXMgNCBhcmdzLiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgdGFrZXMgNCBhcmdzLi4uLiAiID4mNjsgfQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgIGlmKDAgIT0gZ2V0c2VydmJ5cG9ydF9yKDAsIDAsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgIHRzdF9jb21waV9nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2dldHNlcnZieXBvcnRfcj0iNCIKKworZWxzZQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3IiID0gInVua25vd24iOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdldHNlcnZieXBvcnRfciB0YWtlcyA1IGFyZ3MuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdldHNlcnZieXBvcnRfciB0YWtlcyA1IGFyZ3MuLi4uICIgPiY2OyB9CisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgaWYoMCAhPSBnZXRzZXJ2Ynlwb3J0X3IoMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfcj0ieWVzIgorICAgICAgICB0c3RfbmFyZ3NfZ2V0c2VydmJ5cG9ydF9yPSI1IgorCitlbHNlCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIHRzdF9jb21waV9nZXRzZXJ2Ynlwb3J0X3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldHNlcnZieXBvcnRfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0c2VydmJ5cG9ydF9yIHRha2VzIDYgYXJncy4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0c2VydmJ5cG9ydF9yIHRha2VzIDYgYXJncy4uLi4gIiA+JjY7IH0KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBpZigwICE9IGdldHNlcnZieXBvcnRfcigwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3I9IjYiCisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ2V0c2VydmJ5cG9ydF9yIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ2V0c2VydmJ5cG9ydF9yIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfciIgPSAieWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19nZXRzZXJ2Ynlwb3J0X3IiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19nZXRzZXJ2Ynlwb3J0X3I9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnZXRzZXJ2Ynlwb3J0X3IgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldHNlcnZieXBvcnRfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dldHNlcnZieXBvcnRfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dldHNlcnZieXBvcnRfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRTRVJWQllQT1JUX1IgMQorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBHRVRTRVJWQllQT1JUX1JfQVJHUyAkdHN0X25hcmdzX2dldHNlcnZieXBvcnRfcgorX0FDRU9GCisKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldHNlcnZieXBvcnRfciIgLWVxICI0IjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBHRVRTRVJWQllQT1JUX1JfQlVGU0laRSBzaXplb2Yoc3RydWN0IHNlcnZlbnRfZGF0YSkiID4+Y29uZmRlZnMuaAorCisgICAgZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBHRVRTRVJWQllQT1JUX1JfQlVGU0laRSA0MDk2IiA+PmNvbmZkZWZzLmgKKworICAgIGZpCisgICAgYWNfY3ZfZnVuY19nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfZ2V0c2VydmJ5cG9ydF9yPSJubyIKKyAgZmkKKworCitjdXJsX2luY2x1ZGVzX3RpbWU9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjICBpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgICAgaW5jbHVkZSA8dGltZS5oPgorIyAgZW5kaWYKKyNlbHNlCisjICBpZmRlZiBIQVZFX1RJTUVfSAorIyAgICBpbmNsdWRlIDx0aW1lLmg+CisjICBlbmRpZgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3RpbWUuaCB0aW1lLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGN1cmxfaW5jbHVkZXNfdGltZQorIgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisgICAgICAjCisgIHRzdF9saW5rc19nbXRpbWVfcj0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dtdGltZV9yPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ210aW1lX3I9InVua25vd24iCisgIHRzdF93b3Jrc19nbXRpbWVfcj0idW5rbm93biIKKyAgdHN0X2FsbG93X2dtdGltZV9yPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ210aW1lX3IgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnbXRpbWVfciBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIGdtdGltZV9yIGlubm9jdW91c19nbXRpbWVfcgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBnbXRpbWVfcgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ210aW1lX3IgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfZ210aW1lX3IgfHwgZGVmaW5lZCBfX3N0dWJfX19nbXRpbWVfcgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBnbXRpbWVfciAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfZ210aW1lX3I9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2dtdGltZV9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nbXRpbWVfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ210aW1lX3IgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnbXRpbWVfciBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY3VybF9pbmNsdWRlc190aW1lCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImdtdGltZV9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2dtdGltZV9yPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fZ210aW1lX3I9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2dtdGltZV9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBnbXRpbWVfciBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGdtdGltZV9yIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc190aW1lCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gZ210aW1lX3IoMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2dtdGltZV9yPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfZ210aW1lX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiICYmCisgICAgdGVzdCAiJHRzdF9jb21waV9nbXRpbWVfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ210aW1lX3Igc2VlbXMgdG8gd29yayIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnbXRpbWVfciBzZWVtcyB0byB3b3JrLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc19zdGRsaWIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfdGltZQorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICB0aW1lX3QgbG9jYWwgPSAxMTcwMzUyNTg3OworICAgICAgICBzdHJ1Y3QgdG0gKmdtdCA9IDA7CisgICAgICAgIHN0cnVjdCB0bSByZXN1bHQ7CisgICAgICAgIGdtdCA9IGdtdGltZV9yKCZsb2NhbCwgJnJlc3VsdCk7CisgICAgICAgIGlmKGdtdCkKKyAgICAgICAgICBleGl0KDApOworICAgICAgICBlbHNlCisgICAgICAgICAgZXhpdCgxKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF93b3Jrc19nbXRpbWVfcj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3dvcmtzX2dtdGltZV9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dtdGltZV9yIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJHRzdF93b3Jrc19nbXRpbWVfciIgIT0gIm5vIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZ210aW1lX3IgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBnbXRpbWVfciB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2dtdGltZV9yIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfZ210aW1lX3I9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19nbXRpbWVfcj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGdtdGltZV9yIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZ210aW1lX3IgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dtdGltZV9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fZ210aW1lX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9nbXRpbWVfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dtdGltZV9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3Rfd29ya3NfZ210aW1lX3IiICE9ICJubyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR01USU1FX1IgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2dtdGltZV9yPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2dtdGltZV9yPSJubyIKKyAgZmkKKworCitjdXJsX2luY2x1ZGVzX2FycGFfaW5ldD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorIyAgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorIyAgaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc29ja2V0LmggbmV0aW5ldC9pbi5oIGFycGEvaW5ldC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRjdXJsX2luY2x1ZGVzX2FycGFfaW5ldAorIgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisgICAgIworICB0c3RfbGlua3NfaW5ldF9udG9hX3I9InVua25vd24iCisgIHRzdF9wcm90b19pbmV0X250b2Ffcj0idW5rbm93biIKKyAgdHN0X2NvbXBpX2luZXRfbnRvYV9yPSJ1bmtub3duIgorICB0c3RfYWxsb3dfaW5ldF9udG9hX3I9InVua25vd24iCisgIHRzdF9uYXJnc19pbmV0X250b2Ffcj0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGluZXRfbnRvYV9yIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW5ldF9udG9hX3IgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBpbmV0X250b2FfciBpbm5vY3VvdXNfaW5ldF9udG9hX3IKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgaW5ldF9udG9hX3IKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGluZXRfbnRvYV9yICgpOworI2lmIGRlZmluZWQgX19zdHViX2luZXRfbnRvYV9yIHx8IGRlZmluZWQgX19zdHViX19faW5ldF9udG9hX3IKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gaW5ldF9udG9hX3IgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2luZXRfbnRvYV9yPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19pbmV0X250b2Ffcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW5ldF9udG9hX3IiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGluZXRfbnRvYV9yIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW5ldF9udG9hX3IgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfYXJwYV9pbmV0CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImluZXRfbnRvYV9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2luZXRfbnRvYV9yPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9faW5ldF9udG9hX3I9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2luZXRfbnRvYV9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19pbmV0X250b2FfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW5ldF9udG9hX3IgdGFrZXMgMiBhcmdzLiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X250b2FfciB0YWtlcyAyIGFyZ3MuLi4uICIgPiY2OyB9CisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX2FycGFfaW5ldAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisgICAgICAgICAgaWYoMCAhPSBpbmV0X250b2FfcihhZGRyLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfaW5ldF9udG9hX3I9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2luZXRfbnRvYV9yPSIyIgorCitlbHNlCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIHRzdF9jb21waV9pbmV0X250b2Ffcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfaW5ldF9udG9hX3IiID0gInVua25vd24iOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGluZXRfbnRvYV9yIHRha2VzIDMgYXJncy4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW5ldF9udG9hX3IgdGFrZXMgMyBhcmdzLi4uLiAiID4mNjsgfQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19hcnBhX2luZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworICAgICAgICAgIGlmKDAgIT0gaW5ldF9udG9hX3IoYWRkciwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgdHN0X2NvbXBpX2luZXRfbnRvYV9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19pbmV0X250b2Ffcj0iMyIKKworZWxzZQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICB0c3RfY29tcGlfaW5ldF9udG9hX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGluZXRfbnRvYV9yIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW5ldF9udG9hX3IgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9udG9hX3IiID0gInllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgZmkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2luZXRfbnRvYV9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X250b2FfciB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfbnRvYV9yIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfaW5ldF9udG9hX3IiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pbmV0X250b2Ffcj0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2luZXRfbnRvYV9yPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW5ldF9udG9hX3IgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X250b2FfciBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW5ldF9udG9hX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19pbmV0X250b2FfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2luZXRfbnRvYV9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW5ldF9udG9hX3IiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfSU5FVF9OVE9BX1IgMQorX0FDRU9GCisKKyAgICAgICAgICAgICMKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2luZXRfbnRvYV9yIiAtZXEgIjIiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfSU5FVF9OVE9BX1JfMiAxIiA+PmNvbmZkZWZzLmgKKworICAgIGVsaWYgdGVzdCAiJHRzdF9uYXJnc19pbmV0X250b2FfciIgLWVxICIzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0lORVRfTlRPQV9SXzMgMSIgPj5jb25mZGVmcy5oCisKKyAgICBmaQorICAgICMKKyAgICBhY19jdl9mdW5jX2luZXRfbnRvYV9yPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2luZXRfbnRvYV9yPSJubyIKKyAgZmkKKworCisgICAgICAgICMKKyAgdHN0X2xpbmtzX2luZXRfbnRvcD0idW5rbm93biIKKyAgdHN0X3Byb3RvX2luZXRfbnRvcD0idW5rbm93biIKKyAgdHN0X2NvbXBpX2luZXRfbnRvcD0idW5rbm93biIKKyAgdHN0X3dvcmtzX2luZXRfbnRvcD0idW5rbm93biIKKyAgdHN0X2FsbG93X2luZXRfbnRvcD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGluZXRfbnRvcCBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfbnRvcCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIGluZXRfbnRvcCBpbm5vY3VvdXNfaW5ldF9udG9wCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIGluZXRfbnRvcAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgaW5ldF9udG9wICgpOworI2lmIGRlZmluZWQgX19zdHViX2luZXRfbnRvcCB8fCBkZWZpbmVkIF9fc3R1Yl9fX2luZXRfbnRvcAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBpbmV0X250b3AgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2luZXRfbnRvcD0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfaW5ldF9udG9wPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pbmV0X250b3AiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGluZXRfbnRvcCBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfbnRvcCBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY3VybF9pbmNsdWRlc19hcnBhX2luZXQKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiaW5ldF9udG9wIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2luZXRfbnRvcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2luZXRfbnRvcD0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9faW5ldF9udG9wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X250b3AgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X250b3AgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX2FycGFfaW5ldAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IGluZXRfbnRvcCgwLCAwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW5ldF9udG9wPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW5ldF9udG9wPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9udG9wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X250b3Agc2VlbXMgdG8gd29yayIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X250b3Agc2VlbXMgdG8gd29yay4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RkbGliCisgICAgICAgICRjdXJsX2luY2x1ZGVzX2FycGFfaW5ldAorICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgY2hhciBpcHY2cmVzW3NpemVvZigiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6MjU1LjI1NS4yNTUuMjU1IildOworICAgICAgICBjaGFyIGlwdjRyZXNbc2l6ZW9mICIyNTUuMjU1LjI1NS4yNTUiXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpcHY2YVsyNl07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaXB2NGFbNV07CisgICAgICAgIGNoYXIgKmlwdjZwdHIgPSAwOworICAgICAgICBjaGFyICppcHY0cHRyID0gMDsKKyAgICAgICAgLyogLSAqLworICAgICAgICBpcHY0cmVzWzBdID0gJ1wwJzsKKyAgICAgICAgaXB2NGFbMF0gPSAweGMwOworICAgICAgICBpcHY0YVsxXSA9IDB4YTg7CisgICAgICAgIGlwdjRhWzJdID0gMHg2NDsKKyAgICAgICAgaXB2NGFbM10gPSAweDAxOworICAgICAgICBpcHY0YVs0XSA9IDB4MDE7CisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgaXB2NHB0ciA9IGluZXRfbnRvcChBRl9JTkVULCBpcHY0YSwgaXB2NHJlcywgc2l6ZW9mKGlwdjRyZXMpKTsKKyAgICAgICAgaWYoIWlwdjRwdHIpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICBpZihpcHY0cHRyICE9IGlwdjRyZXMpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICBpZighaXB2NHB0clswXSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKG1lbWNtcChpcHY0cmVzLCAiMTkyLjE2OC4xMDAuMSIsIDEzKSAhPSAwKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpcHY2cmVzWzBdID0gJ1wwJzsKKyAgICAgICAgbWVtc2V0KGlwdjZhLCAwLCBzaXplb2YoaXB2NmEpKTsKKyAgICAgICAgaXB2NmFbMF0gPSAweGZlOworICAgICAgICBpcHY2YVsxXSA9IDB4ODA7CisgICAgICAgIGlwdjZhWzhdID0gMHgwMjsKKyAgICAgICAgaXB2NmFbOV0gPSAweDE0OworICAgICAgICBpcHY2YVsxMF0gPSAweDRmOworICAgICAgICBpcHY2YVsxMV0gPSAweGZmOworICAgICAgICBpcHY2YVsxMl0gPSAweGZlOworICAgICAgICBpcHY2YVsxM10gPSAweDBiOworICAgICAgICBpcHY2YVsxNF0gPSAweDc2OworICAgICAgICBpcHY2YVsxNV0gPSAweGM4OworICAgICAgICBpcHY2YVsyNV0gPSAweDAxOworICAgICAgICAvKiAtICovCisgICAgICAgIGlwdjZwdHIgPSBpbmV0X250b3AoQUZfSU5FVDYsIGlwdjZhLCBpcHY2cmVzLCBzaXplb2YoaXB2NnJlcykpOworICAgICAgICBpZighaXB2NnB0cikKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKGlwdjZwdHIgIT0gaXB2NnJlcykKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKCFpcHY2cHRyWzBdKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgaWYobWVtY21wKGlwdjZyZXMsICJmZTgwOjoyMTQ6NGZmZjpmZTBiOjc2YzgiLCAyNCkgIT0gMCkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgZXhpdCgwKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF93b3Jrc19pbmV0X250b3A9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF93b3Jrc19pbmV0X250b3A9Im5vIgorCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9udG9wIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJHRzdF93b3Jrc19pbmV0X250b3AiICE9ICJubyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGluZXRfbnRvcCB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfbnRvcCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2luZXRfbnRvcCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2luZXRfbnRvcD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2luZXRfbnRvcD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGluZXRfbnRvcCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGluZXRfbnRvcCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW5ldF9udG9wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9faW5ldF9udG9wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9udG9wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW5ldF9udG9wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3Rfd29ya3NfaW5ldF9udG9wIiAhPSAibm8iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lORVRfTlRPUCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfaW5ldF9udG9wPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2luZXRfbnRvcD0ibm8iCisgIGZpCisKKworICAgICAgICAjCisgIHRzdF9saW5rc19pbmV0X3B0b249InVua25vd24iCisgIHRzdF9wcm90b19pbmV0X3B0b249InVua25vd24iCisgIHRzdF9jb21waV9pbmV0X3B0b249InVua25vd24iCisgIHRzdF93b3Jrc19pbmV0X3B0b249InVua25vd24iCisgIHRzdF9hbGxvd19pbmV0X3B0b249InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X3B0b24gY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X3B0b24gY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBpbmV0X3B0b24gaW5ub2N1b3VzX2luZXRfcHRvbgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBpbmV0X3B0b24KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGluZXRfcHRvbiAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9pbmV0X3B0b24gfHwgZGVmaW5lZCBfX3N0dWJfX19pbmV0X3B0b24KK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gaW5ldF9wdG9uICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19pbmV0X3B0b249InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2luZXRfcHRvbj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW5ldF9wdG9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X3B0b24gaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X3B0b24gaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfYXJwYV9pbmV0CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImluZXRfcHRvbiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19pbmV0X3B0b249InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19pbmV0X3B0b249Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2luZXRfcHRvbiIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW5ldF9wdG9uIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW5ldF9wdG9uIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc19hcnBhX2luZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBpbmV0X3B0b24oMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2luZXRfcHRvbj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2luZXRfcHRvbj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X2NvbXBpX2luZXRfcHRvbiIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW5ldF9wdG9uIHNlZW1zIHRvIHdvcmsiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW5ldF9wdG9uIHNlZW1zIHRvIHdvcmsuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgImNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0ZGxpYgorICAgICAgICAkY3VybF9pbmNsdWRlc19hcnBhX2luZXQKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIHVuc2lnbmVkIGNoYXIgaXB2NmFbMTYrMV07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaXB2NGFbNCsxXTsKKyAgICAgICAgY29uc3QgY2hhciAqaXB2NnNyYyA9ICJmZTgwOjoyMTQ6NGZmZjpmZTBiOjc2YzgiOworICAgICAgICBjb25zdCBjaGFyICppcHY0c3JjID0gIjE5Mi4xNjguMTAwLjEiOworICAgICAgICAvKiAtICovCisgICAgICAgIG1lbXNldChpcHY0YSwgMSwgc2l6ZW9mKGlwdjRhKSk7CisgICAgICAgIGlmKDEgIT0gaW5ldF9wdG9uKEFGX0lORVQsIGlwdjRzcmMsIGlwdjRhKSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgaWYoIChpcHY0YVswXSAhPSAweGMwKSB8fAorICAgICAgICAgICAgKGlwdjRhWzFdICE9IDB4YTgpIHx8CisgICAgICAgICAgICAoaXB2NGFbMl0gIT0gMHg2NCkgfHwKKyAgICAgICAgICAgIChpcHY0YVszXSAhPSAweDAxKSB8fAorICAgICAgICAgICAgKGlwdjRhWzRdICE9IDB4MDEpICkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgbWVtc2V0KGlwdjZhLCAxLCBzaXplb2YoaXB2NmEpKTsKKyAgICAgICAgaWYoMSAhPSBpbmV0X3B0b24oQUZfSU5FVDYsIGlwdjZzcmMsIGlwdjZhKSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgaWYoIChpcHY2YVswXSAgIT0gMHhmZSkgfHwKKyAgICAgICAgICAgIChpcHY2YVsxXSAgIT0gMHg4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVs4XSAgIT0gMHgwMikgfHwKKyAgICAgICAgICAgIChpcHY2YVs5XSAgIT0gMHgxNCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsxMF0gIT0gMHg0ZikgfHwKKyAgICAgICAgICAgIChpcHY2YVsxMV0gIT0gMHhmZikgfHwKKyAgICAgICAgICAgIChpcHY2YVsxMl0gIT0gMHhmZSkgfHwKKyAgICAgICAgICAgIChpcHY2YVsxM10gIT0gMHgwYikgfHwKKyAgICAgICAgICAgIChpcHY2YVsxNF0gIT0gMHg3NikgfHwKKyAgICAgICAgICAgIChpcHY2YVsxNV0gIT0gMHhjOCkgfHwKKyAgICAgICAgICAgIChpcHY2YVsxNl0gIT0gMHgwMSkgKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpZiggKGlwdjZhWzJdICAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbM10gICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVs0XSAgIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzVdICAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbNl0gICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVs3XSAgIT0gMHgwKSApCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIGV4aXQoMCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3Rfd29ya3NfaW5ldF9wdG9uPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3Rfd29ya3NfaW5ldF9wdG9uPSJubyIKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2luZXRfcHRvbiIgPSAieWVzIiAmJgorICAgIHRlc3QgIiR0c3Rfd29ya3NfaW5ldF9wdG9uIiAhPSAibm8iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X3B0b24gdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X3B0b24gdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19pbmV0X3B0b24iICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pbmV0X3B0b249InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pbmV0X3B0b249Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpbmV0X3B0b24gbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpbmV0X3B0b24gbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2luZXRfcHRvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2luZXRfcHRvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2luZXRfcHRvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2luZXRfcHRvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3dvcmtzX2luZXRfcHRvbiIgIT0gIm5vIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JTkVUX1BUT04gMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2luZXRfcHRvbj0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19pbmV0X3B0b249Im5vIgorICBmaQorCisKK2N1cmxfaW5jbHVkZXNfc3Ryb3B0cz0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyMgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyMgIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJPUFRTX0gKKyMgIGluY2x1ZGUgPHN0cm9wdHMuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHVuaXN0ZC5oIHN5cy9zb2NrZXQuaCBzeXMvaW9jdGwuaCBzdHJvcHRzLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGN1cmxfaW5jbHVkZXNfc3Ryb3B0cworIgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisgICAgIworICB0c3RfbGlua3NfaW9jdGw9InVua25vd24iCisgIHRzdF9wcm90b19pb2N0bD0idW5rbm93biIKKyAgdHN0X2NvbXBpX2lvY3RsPSJ1bmtub3duIgorICB0c3RfYWxsb3dfaW9jdGw9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bCBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGlvY3RsIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgaW9jdGwgaW5ub2N1b3VzX2lvY3RsCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIGlvY3RsCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBpb2N0bCAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9pb2N0bCB8fCBkZWZpbmVkIF9fc3R1Yl9fX2lvY3RsCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGlvY3RsICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19pb2N0bD0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfaW9jdGw9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2lvY3RsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bCBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGlvY3RsIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N0cm9wdHMKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiaW9jdGwiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9faW9jdGw9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19pb2N0bD0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9faW9jdGwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3RsIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGwgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cm9wdHMKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBpb2N0bCgwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW9jdGw9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9pb2N0bD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3RsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bCB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGlvY3RsIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfaW9jdGwiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pb2N0bD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X2lvY3RsPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW9jdGwgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW9jdGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19pb2N0bCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2lvY3RsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW9jdGwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfSU9DVEwgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2lvY3RsPSJ5ZXMiCisKKyAgIworICB0c3RfY29tcGlfaW9jdGxfZmlvbmJpbz0idW5rbm93biIKKyAgdHN0X2FsbG93X2lvY3RsX2Zpb25iaW89InVua25vd24iCisgICMKKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfaW9jdGwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3RsIEZJT05CSU8gaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bCBGSU9OQklPIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJvcHRzCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGludCBmbGFncyA9IDA7CisgICAgICAgIGlmKDAgIT0gaW9jdGwoMCwgRklPTkJJTywgJmZsYWdzKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW9jdGxfZmlvbmJpbz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2lvY3RsX2Zpb25iaW89Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bF9maW9uYmlvIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bCBGSU9OQklPIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGwgRklPTkJJTyB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2lvY3RsX2Zpb25iaW8iICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pb2N0bF9maW9uYmlvPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfaW9jdGxfZmlvbmJpbz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3RsIEZJT05CSU8gbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bCBGSU9OQklPIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bF9maW9uYmlvIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW9jdGxfZmlvbmJpbyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JT0NUTF9GSU9OQklPIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19pb2N0bF9maW9uYmlvPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2lvY3RsX2Zpb25iaW89Im5vIgorICBmaQorCisKKyAgIworICB0c3RfY29tcGlfaW9jdGxfc2lvY2dpZmFkZHI9InVua25vd24iCisgIHRzdF9hbGxvd19pb2N0bF9zaW9jZ2lmYWRkcj0idW5rbm93biIKKyAgIworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19pb2N0bCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW9jdGwgU0lPQ0dJRkFERFIgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bCBTSU9DR0lGQUREUiBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3Ryb3B0cworICAgICAgICAjaW5jbHVkZSA8bmV0L2lmLmg+CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIHN0cnVjdCBpZnJlcSBpZnI7CisgICAgICAgIGlmKDAgIT0gaW9jdGwoMCwgU0lPQ0dJRkFERFIsICZpZnIpKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9pb2N0bF9zaW9jZ2lmYWRkcj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2lvY3RsX3Npb2NnaWZhZGRyPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxfc2lvY2dpZmFkZHIiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3RsIFNJT0NHSUZBRERSIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGwgU0lPQ0dJRkFERFIgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19pb2N0bF9zaW9jZ2lmYWRkciIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2lvY3RsX3Npb2NnaWZhZGRyPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfaW9jdGxfc2lvY2dpZmFkZHI9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bCBTSU9DR0lGQUREUiBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGlvY3RsIFNJT0NHSUZBRERSIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bF9zaW9jZ2lmYWRkciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3RsX3Npb2NnaWZhZGRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lPQ1RMX1NJT0NHSUZBRERSIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19pb2N0bF9zaW9jZ2lmYWRkcj0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19pb2N0bF9zaW9jZ2lmYWRkcj0ibm8iCisgIGZpCisKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfaW9jdGw9Im5vIgorICBmaQorCisKKyAgICAjCisgIHRzdF9saW5rc19pb2N0bHNvY2tldD0idW5rbm93biIKKyAgdHN0X3Byb3RvX2lvY3Rsc29ja2V0PSJ1bmtub3duIgorICB0c3RfY29tcGlfaW9jdGxzb2NrZXQ9InVua25vd24iCisgIHRzdF9hbGxvd19pb2N0bHNvY2tldD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3Rsc29ja2V0IGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGlmKDAgIT0gaW9jdGxzb2NrZXQoMCwgMCwgMCkpCisgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2lvY3Rsc29ja2V0PSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19pb2N0bHNvY2tldD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW9jdGxzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3Rsc29ja2V0IGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiaW9jdGxzb2NrZXQiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9faW9jdGxzb2NrZXQ9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19pb2N0bHNvY2tldD0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9faW9jdGxzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3Rsc29ja2V0IGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gaW9jdGxzb2NrZXQoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW9jdGxzb2NrZXQ9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bHNvY2tldCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bHNvY2tldCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2lvY3Rsc29ja2V0IiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXQ9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pb2N0bHNvY2tldD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3Rsc29ja2V0IG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2lvY3Rsc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9faW9jdGxzb2NrZXQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9pb2N0bHNvY2tldCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3Rsc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lPQ1RMU09DS0VUIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldD0ieWVzIgorCisgICMKKyAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2Zpb25iaW89InVua25vd24iCisgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9maW9uYmlvPSJ1bmtub3duIgorICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2lvY3Rsc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBpb2N0bHNvY2tldCBGSU9OQklPIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgRklPTkJJTyBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgICAgaWYoMCAhPSBpb2N0bHNvY2tldCgwLCBGSU9OQklPLCAmZmxhZ3MpKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9pb2N0bHNvY2tldF9maW9uYmlvPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW9jdGxzb2NrZXRfZmlvbmJpbz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2Zpb25iaW8iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGlvY3Rsc29ja2V0IEZJT05CSU8gdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBpb2N0bHNvY2tldCBGSU9OQklPIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfaW9jdGxzb2NrZXRfZmlvbmJpbyIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2lvY3Rsc29ja2V0X2Zpb25iaW89InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9maW9uYmlvPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgaW9jdGxzb2NrZXQgRklPTkJJTyBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGlvY3Rsc29ja2V0IEZJT05CSU8gbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2Zpb25iaW8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19pb2N0bHNvY2tldF9maW9uYmlvIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU8gMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2Zpb25iaW89InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfaW9jdGxzb2NrZXRfZmlvbmJpbz0ibm8iCisgIGZpCisKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfaW9jdGxzb2NrZXQ9Im5vIgorICBmaQorCisKKyAgICAjCisgIHRzdF9saW5rc19pb2N0bHNvY2tldF9jYW1lbD0idW5rbm93biIKKyAgdHN0X3Byb3RvX2lvY3Rsc29ja2V0X2NhbWVsPSJ1bmtub3duIgorICB0c3RfY29tcGlfaW9jdGxzb2NrZXRfY2FtZWw9InVua25vd24iCisgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9jYW1lbD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIElvY3RsU29ja2V0IGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBJb2N0bFNvY2tldCBpbm5vY3VvdXNfSW9jdGxTb2NrZXQKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgSW9jdGxTb2NrZXQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIElvY3RsU29ja2V0ICgpOworI2lmIGRlZmluZWQgX19zdHViX0lvY3RsU29ja2V0IHx8IGRlZmluZWQgX19zdHViX19fSW9jdGxTb2NrZXQKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gSW9jdGxTb2NrZXQgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2lvY3Rsc29ja2V0X2NhbWVsPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19pb2N0bHNvY2tldF9jYW1lbD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW9jdGxzb2NrZXRfY2FtZWwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIElvY3RsU29ja2V0IGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfc3Ryb3B0cworCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJJb2N0bFNvY2tldCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19pb2N0bHNvY2tldF9jYW1lbD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2lvY3Rsc29ja2V0X2NhbWVsPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBJb2N0bFNvY2tldCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3Ryb3B0cworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IElvY3RsU29ja2V0KDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2NhbWVsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxzb2NrZXRfY2FtZWwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIElvY3RsU29ja2V0IHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19pb2N0bHNvY2tldF9jYW1lbCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWw9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBJb2N0bFNvY2tldCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIElvY3RsU29ja2V0IG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2lvY3Rsc29ja2V0X2NhbWVsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxzb2NrZXRfY2FtZWwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfaW9jdGxzb2NrZXRfY2FtZWw9InllcyIKKworICAjCisgIHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJ1bmtub3duIgorICB0c3RfYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbz0idW5rbm93biIKKyAgIworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgRklPTkJJTyBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIElvY3RsU29ja2V0IEZJT05CSU8gaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cm9wdHMKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgbG9uZyBmbGFncyA9IDA7CisgICAgICAgIGlmKDAgIT0gaW9jdGxzb2NrZXQoMCwgRklPTkJJTywgJmZsYWdzKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbz0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW89Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBJb2N0bFNvY2tldCBGSU9OQklPIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgSW9jdGxTb2NrZXQgRklPTkJJTyB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW8iICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIElvY3RsU29ja2V0IEZJT05CSU8gbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBJb2N0bFNvY2tldCBGSU9OQklPIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTF9GSU9OQklPIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW89Im5vIgorICBmaQorCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2NhbWVsPSJubyIKKyAgZmkKKworCisgICAgICAjCisgIHRzdF9saW5rc19sb2NhbHRpbWVfcj0idW5rbm93biIKKyAgdHN0X3Byb3RvX2xvY2FsdGltZV9yPSJ1bmtub3duIgorICB0c3RfY29tcGlfbG9jYWx0aW1lX3I9InVua25vd24iCisgIHRzdF93b3Jrc19sb2NhbHRpbWVfcj0idW5rbm93biIKKyAgdHN0X2FsbG93X2xvY2FsdGltZV9yPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbG9jYWx0aW1lX3IgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBsb2NhbHRpbWVfciBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIGxvY2FsdGltZV9yIGlubm9jdW91c19sb2NhbHRpbWVfcgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBsb2NhbHRpbWVfcgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgbG9jYWx0aW1lX3IgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfbG9jYWx0aW1lX3IgfHwgZGVmaW5lZCBfX3N0dWJfX19sb2NhbHRpbWVfcgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBsb2NhbHRpbWVfciAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfbG9jYWx0aW1lX3I9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX2xvY2FsdGltZV9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19sb2NhbHRpbWVfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbG9jYWx0aW1lX3IgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBsb2NhbHRpbWVfciBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY3VybF9pbmNsdWRlc190aW1lCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImxvY2FsdGltZV9yIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX2xvY2FsdGltZV9yPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fbG9jYWx0aW1lX3I9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2xvY2FsdGltZV9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBsb2NhbHRpbWVfciBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGxvY2FsdGltZV9yIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc190aW1lCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gbG9jYWx0aW1lX3IoMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX2xvY2FsdGltZV9yPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfbG9jYWx0aW1lX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiICYmCisgICAgdGVzdCAiJHRzdF9jb21waV9sb2NhbHRpbWVfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbG9jYWx0aW1lX3Igc2VlbXMgdG8gd29yayIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBsb2NhbHRpbWVfciBzZWVtcyB0byB3b3JrLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc19zdGRsaWIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfdGltZQorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICB0aW1lX3QgY2xvY2sgPSAxMTcwMzUyNTg3OworICAgICAgICBzdHJ1Y3QgdG0gKnRtcCA9IDA7CisgICAgICAgIHN0cnVjdCB0bSByZXN1bHQ7CisgICAgICAgIHRtcCA9IGxvY2FsdGltZV9yKCZjbG9jaywgJnJlc3VsdCk7CisgICAgICAgIGlmKHRtcCkKKyAgICAgICAgICBleGl0KDApOworICAgICAgICBlbHNlCisgICAgICAgICAgZXhpdCgxKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF93b3Jrc19sb2NhbHRpbWVfcj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3dvcmtzX2xvY2FsdGltZV9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2xvY2FsdGltZV9yIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJHRzdF93b3Jrc19sb2NhbHRpbWVfciIgIT0gIm5vIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbG9jYWx0aW1lX3IgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBsb2NhbHRpbWVfciB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2xvY2FsdGltZV9yIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfbG9jYWx0aW1lX3I9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19sb2NhbHRpbWVfcj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxvY2FsdGltZV9yIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbG9jYWx0aW1lX3IgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2xvY2FsdGltZV9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fbG9jYWx0aW1lX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9sb2NhbHRpbWVfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2xvY2FsdGltZV9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3Rfd29ya3NfbG9jYWx0aW1lX3IiICE9ICJubyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTE9DQUxUSU1FX1IgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX2xvY2FsdGltZV9yPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX2xvY2FsdGltZV9yPSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3NfbWVtcmNocj0idW5rbm93biIKKyAgdHN0X21hY3JvX21lbXJjaHI9InVua25vd24iCisgIHRzdF9wcm90b19tZW1yY2hyPSJ1bmtub3duIgorICB0c3RfY29tcGlfbWVtcmNocj0idW5rbm93biIKKyAgdHN0X2FsbG93X21lbXJjaHI9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBtZW1yY2hyIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbWVtcmNociBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIG1lbXJjaHIgaW5ub2N1b3VzX21lbXJjaHIKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgbWVtcmNocgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgbWVtcmNociAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9tZW1yY2hyIHx8IGRlZmluZWQgX19zdHViX19fbWVtcmNocgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBtZW1yY2hyICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19tZW1yY2hyPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19tZW1yY2hyPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19tZW1yY2hyIiA9ICJubyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIG1lbXJjaHIgc2VlbXMgYSBtYWNybyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBtZW1yY2hyIHNlZW1zIGEgbWFjcm8uLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBtZW1yY2hyKDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9tYWNyb19tZW1yY2hyPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfbWFjcm9fbWVtcmNocj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfbWVtcmNociIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbWVtcmNociBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIG1lbXJjaHIgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm1lbXJjaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fbWVtcmNocj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX21lbXJjaHI9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX21lbXJjaHIiID0gInllcyIgfHwKKyAgICAgdGVzdCAiJHRzdF9tYWNyb19tZW1yY2hyIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBtZW1yY2hyIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbWVtcmNociBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gbWVtcmNocigwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfbWVtcmNocj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX21lbXJjaHI9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9tZW1yY2hyIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBtZW1yY2hyIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbWVtcmNociB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X21lbXJjaHIiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19tZW1yY2hyPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfbWVtcmNocj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIG1lbXJjaHIgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBtZW1yY2hyIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgKHRlc3QgIiR0c3RfcHJvdG9fbWVtcmNociIgPSAieWVzIiB8fAorICAgICAgdGVzdCAiJHRzdF9tYWNyb19tZW1yY2hyIiA9ICJ5ZXMiKSAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX21lbXJjaHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19tZW1yY2hyIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX01FTVJDSFIgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX21lbXJjaHI9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfbWVtcmNocj0ibm8iCisgIGZpCisKKworY3VybF9pbmNsdWRlc19wb2xsPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9QT0xMX0gKKyMgIGluY2x1ZGUgPHBvbGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BPTExfSAorIyAgaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHBvbGwuaCBzeXMvcG9sbC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRjdXJsX2luY2x1ZGVzX3BvbGwKKyIKK2V2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgorICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworICAgICAgIworICB0c3RfbGlua3NfcG9sbD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3BvbGw9InVua25vd24iCisgIHRzdF9jb21waV9wb2xsPSJ1bmtub3duIgorICB0c3Rfd29ya3NfcG9sbD0idW5rbm93biIKKyAgdHN0X2FsbG93X3BvbGw9InVua25vd24iCisgICMKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbip8aW50ZXJpeCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2Rpc2FsbG93X3BvbGw9InllcyIKKyAgICAgIDs7CisgIGVzYWMKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHBvbGwgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBwb2xsIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3BvbGwKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGlmKDAgIT0gcG9sbCgwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfcG9sbD0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3NfcG9sbD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfcG9sbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgcG9sbCBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHBvbGwgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfcG9sbAorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJwb2xsIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3BvbGw9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19wb2xsPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19wb2xsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBwb2xsIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgcG9sbCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfcG9sbAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IHBvbGwoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3BvbGw9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9wb2xsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0c3RfY29tcGlfcG9sbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgcG9sbCBzZWVtcyB0byB3b3JrIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHBvbGwgc2VlbXMgdG8gd29yay4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RkbGliCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3BvbGwKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBwb2xsKDAsIDAsIDEwKSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICBleGl0KDApOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3dvcmtzX3BvbGw9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF93b3Jrc19wb2xsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3BvbGwiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX3BvbGwiICE9ICJubyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHBvbGwgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBwb2xsIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfcG9sbCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X3BvbGw9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19wb2xsPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgcG9sbCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHBvbGwgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3BvbGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19wb2xsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfcG9sbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3BvbGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF93b3Jrc19wb2xsIiAhPSAibm8iOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1BPTEwgMQorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1BPTExfRklORSAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfcG9sbD0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19wb2xsPSJubyIKKyAgZmkKKworCisgICAgICAjCisgIHRzdF9saW5rc19zZXRzb2Nrb3B0PSJ1bmtub3duIgorICB0c3RfcHJvdG9fc2V0c29ja29wdD0idW5rbm93biIKKyAgdHN0X2NvbXBpX3NldHNvY2tvcHQ9InVua25vd24iCisgIHRzdF9hbGxvd19zZXRzb2Nrb3B0PSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2V0c29ja29wdCBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNldHNvY2tvcHQgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgIGlmKDAgIT0gc2V0c29ja29wdCgwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc2V0c29ja29wdD0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc2V0c29ja29wdD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc2V0c29ja29wdCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2V0c29ja29wdCBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNldHNvY2tvcHQgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAic2V0c29ja29wdCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zZXRzb2Nrb3B0PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc2V0c29ja29wdD0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc2V0c29ja29wdCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2V0c29ja29wdCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNldHNvY2tvcHQgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBzZXRzb2Nrb3B0KDAsIDAsIDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zZXRzb2Nrb3B0PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc2V0c29ja29wdD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NldHNvY2tvcHQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNldHNvY2tvcHQgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzZXRzb2Nrb3B0IHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfc2V0c29ja29wdCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X3NldHNvY2tvcHQ9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zZXRzb2Nrb3B0PSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2V0c29ja29wdCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNldHNvY2tvcHQgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NldHNvY2tvcHQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zZXRzb2Nrb3B0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc2V0c29ja29wdCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3NldHNvY2tvcHQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU0VUU09DS09QVCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfc2V0c29ja29wdD0ieWVzIgorCisgICMKKyAgdHN0X2NvbXBpX3NldHNvY2tvcHRfc29fbm9uYmxvY2s9InVua25vd24iCisgIHRzdF9hbGxvd19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJ1bmtub3duIgorICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX3NldHNvY2tvcHQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNldHNvY2tvcHQgU09fTk9OQkxPQ0sgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzZXRzb2Nrb3B0IFNPX05PTkJMT0NLIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gc2V0c29ja29wdCgwLCBTT0xfU09DS0VULCBTT19OT05CTE9DSywgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3NldHNvY2tvcHRfc29fbm9uYmxvY2s9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc2V0c29ja29wdF9zb19ub25ibG9jayIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2V0c29ja29wdCBTT19OT05CTE9DSyB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNldHNvY2tvcHQgU09fTk9OQkxPQ0sgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc2V0c29ja29wdF9zb19ub25ibG9jaz0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3NldHNvY2tvcHRfc29fbm9uYmxvY2s9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzZXRzb2Nrb3B0IFNPX05PTkJMT0NLIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2V0c29ja29wdCBTT19OT05CTE9DSyBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc2V0c29ja29wdF9zb19ub25ibG9jayIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3NldHNvY2tvcHRfc29fbm9uYmxvY2siID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU0VUU09DS09QVF9TT19OT05CTE9DSyAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfc2V0c29ja29wdF9zb19ub25ibG9jaz0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJubyIKKyAgZmkKKworICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19zZXRzb2Nrb3B0PSJubyIKKyAgZmkKKworCitjdXJsX2luY2x1ZGVzX3NpZ25hbD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU0lHTkFMX0gKKyMgIGluY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc2lnbmFsLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGN1cmxfaW5jbHVkZXNfc2lnbmFsCisiCitldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyAgICAjCisgIHRzdF9saW5rc19zaWdhY3Rpb249InVua25vd24iCisgIHRzdF9wcm90b19zaWdhY3Rpb249InVua25vd24iCisgIHRzdF9jb21waV9zaWdhY3Rpb249InVua25vd24iCisgIHRzdF9hbGxvd19zaWdhY3Rpb249InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzaWdhY3Rpb24gY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzaWdhY3Rpb24gY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBzaWdhY3Rpb24gaW5ub2N1b3VzX3NpZ2FjdGlvbgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBzaWdhY3Rpb24KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHNpZ2FjdGlvbiAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9zaWdhY3Rpb24gfHwgZGVmaW5lZCBfX3N0dWJfX19zaWdhY3Rpb24KK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gc2lnYWN0aW9uICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19zaWdhY3Rpb249InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3NpZ2FjdGlvbj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc2lnYWN0aW9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzaWdhY3Rpb24gaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzaWdhY3Rpb24gaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfc2lnbmFsCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInNpZ2FjdGlvbiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zaWdhY3Rpb249InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zaWdhY3Rpb249Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3NpZ2FjdGlvbiIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2lnYWN0aW9uIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2lnYWN0aW9uIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc19zaWduYWwKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBzaWdhY3Rpb24oMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3NpZ2FjdGlvbj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3NpZ2FjdGlvbj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NpZ2FjdGlvbiIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2lnYWN0aW9uIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2lnYWN0aW9uIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfc2lnYWN0aW9uIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc2lnYWN0aW9uPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc2lnYWN0aW9uPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2lnYWN0aW9uIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2lnYWN0aW9uIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zaWdhY3Rpb24iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zaWdhY3Rpb24iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zaWdhY3Rpb24iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zaWdhY3Rpb24iID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU0lHQUNUSU9OIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zaWdhY3Rpb249InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfc2lnYWN0aW9uPSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3Nfc2lnaW50ZXJydXB0PSJ1bmtub3duIgorICB0c3RfcHJvdG9fc2lnaW50ZXJydXB0PSJ1bmtub3duIgorICB0c3RfY29tcGlfc2lnaW50ZXJydXB0PSJ1bmtub3duIgorICB0c3RfYWxsb3dfc2lnaW50ZXJydXB0PSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2lnaW50ZXJydXB0IGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2lnaW50ZXJydXB0IGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgc2lnaW50ZXJydXB0IGlubm9jdW91c19zaWdpbnRlcnJ1cHQKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgc2lnaW50ZXJydXB0CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzaWdpbnRlcnJ1cHQgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfc2lnaW50ZXJydXB0IHx8IGRlZmluZWQgX19zdHViX19fc2lnaW50ZXJydXB0CitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHNpZ2ludGVycnVwdCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc2lnaW50ZXJydXB0PSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19zaWdpbnRlcnJ1cHQ9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NpZ2ludGVycnVwdCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2lnaW50ZXJydXB0IGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2lnaW50ZXJydXB0IGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3NpZ25hbAorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzaWdpbnRlcnJ1cHQiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc2lnaW50ZXJydXB0PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc2lnaW50ZXJydXB0PSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zaWdpbnRlcnJ1cHQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNpZ2ludGVycnVwdCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNpZ2ludGVycnVwdCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc2lnbmFsCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gc2lnaW50ZXJydXB0KDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zaWdpbnRlcnJ1cHQ9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zaWdpbnRlcnJ1cHQ9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zaWdpbnRlcnJ1cHQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNpZ2ludGVycnVwdCB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNpZ2ludGVycnVwdCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3NpZ2ludGVycnVwdCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X3NpZ2ludGVycnVwdD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3NpZ2ludGVycnVwdD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNpZ2ludGVycnVwdCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNpZ2ludGVycnVwdCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc2lnaW50ZXJydXB0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc2lnaW50ZXJydXB0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc2lnaW50ZXJydXB0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc2lnaW50ZXJydXB0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NJR0lOVEVSUlVQVCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfc2lnaW50ZXJydXB0PSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3NpZ2ludGVycnVwdD0ibm8iCisgIGZpCisKKworICAgICMKKyAgdHN0X2xpbmtzX3NpZ25hbD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3NpZ25hbD0idW5rbm93biIKKyAgdHN0X2NvbXBpX3NpZ25hbD0idW5rbm93biIKKyAgdHN0X2FsbG93X3NpZ25hbD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNpZ25hbCBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNpZ25hbCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIHNpZ25hbCBpbm5vY3VvdXNfc2lnbmFsCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIHNpZ25hbAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc2lnbmFsICgpOworI2lmIGRlZmluZWQgX19zdHViX3NpZ25hbCB8fCBkZWZpbmVkIF9fc3R1Yl9fX3NpZ25hbAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzaWduYWwgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3NpZ25hbD0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc2lnbmFsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zaWduYWwiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNpZ25hbCBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNpZ25hbCBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY3VybF9pbmNsdWRlc19zaWduYWwKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAic2lnbmFsIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3NpZ25hbD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3NpZ25hbD0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc2lnbmFsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzaWduYWwgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzaWduYWwgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3NpZ25hbAorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IHNpZ25hbCgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc2lnbmFsPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc2lnbmFsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc2lnbmFsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzaWduYWwgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzaWduYWwgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zaWduYWwiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zaWduYWw9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zaWduYWw9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzaWduYWwgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzaWduYWwgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NpZ25hbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3NpZ25hbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3NpZ25hbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3NpZ25hbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TSUdOQUwgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX3NpZ25hbD0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19zaWduYWw9Im5vIgorICBmaQorCisKK2N1cmxfaW5jbHVkZXNfc2V0am1wPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TRVRKTVBfSAorIyAgaW5jbHVkZSA8c2V0am1wLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzZXRqbXAuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkY3VybF9pbmNsdWRlc19zZXRqbXAKKyIKK2V2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgorICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworICAgICMKKyAgdHN0X2xpbmtzX3NpZ3NldGptcD0idW5rbm93biIKKyAgdHN0X21hY3JvX3NpZ3NldGptcD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3NpZ3NldGptcD0idW5rbm93biIKKyAgdHN0X2NvbXBpX3NpZ3NldGptcD0idW5rbm93biIKKyAgdHN0X2FsbG93X3NpZ3NldGptcD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNpZ3NldGptcCBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNpZ3NldGptcCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIHNpZ3NldGptcCBpbm5vY3VvdXNfc2lnc2V0am1wCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIHNpZ3NldGptcAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc2lnc2V0am1wICgpOworI2lmIGRlZmluZWQgX19zdHViX3NpZ3NldGptcCB8fCBkZWZpbmVkIF9fc3R1Yl9fX3NpZ3NldGptcAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzaWdzZXRqbXAgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3NpZ3NldGptcD0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc2lnc2V0am1wPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zaWdzZXRqbXAiID0gIm5vIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2lnc2V0am1wIHNlZW1zIGEgbWFjcm8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2lnc2V0am1wIHNlZW1zIGEgbWFjcm8uLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc19zZXRqbXAKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgc2lnam1wX2J1ZiBlbnY7CisgICAgICAgIGlmKDAgIT0gc2lnc2V0am1wKGVudiwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X21hY3JvX3NpZ3NldGptcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X21hY3JvX3NpZ3NldGptcD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc2lnc2V0am1wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzaWdzZXRqbXAgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzaWdzZXRqbXAgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfc2V0am1wCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInNpZ3NldGptcCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zaWdzZXRqbXA9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zaWdzZXRqbXA9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3NpZ3NldGptcCIgPSAieWVzIiB8fAorICAgICB0ZXN0ICIkdHN0X21hY3JvX3NpZ3NldGptcCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2lnc2V0am1wIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2lnc2V0am1wIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc19zZXRqbXAKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgc2lnam1wX2J1ZiBlbnY7CisgICAgICAgIGlmKDAgIT0gc2lnc2V0am1wKGVudiwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3NpZ3NldGptcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3NpZ3NldGptcD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NpZ3NldGptcCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2lnc2V0am1wIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2lnc2V0am1wIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfc2lnc2V0am1wIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc2lnc2V0am1wPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc2lnc2V0am1wPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc2lnc2V0am1wIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc2lnc2V0am1wIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgKHRlc3QgIiR0c3RfcHJvdG9fc2lnc2V0am1wIiA9ICJ5ZXMiIHx8CisgICAgICB0ZXN0ICIkdHN0X21hY3JvX3NpZ3NldGptcCIgPSAieWVzIikgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zaWdzZXRqbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zaWdzZXRqbXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU0lHU0VUSk1QIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zaWdzZXRqbXA9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfc2lnc2V0am1wPSJubyIKKyAgZmkKKworCisgICAgICAgICMKKyAgdHN0X2xpbmtzX3NvY2tldD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3NvY2tldD0idW5rbm93biIKKyAgdHN0X2NvbXBpX3NvY2tldD0idW5rbm93biIKKyAgdHN0X2FsbG93X3NvY2tldD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNvY2tldCBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNvY2tldCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGN1cmxfaW5jbHVkZXNfc29ja2V0CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICBpZigwICE9IHNvY2tldCgwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc29ja2V0PSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19zb2NrZXQ9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NvY2tldCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc29ja2V0IGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc29ja2V0IGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAkY3VybF9pbmNsdWRlc19zb2NrZXQKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAic29ja2V0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3NvY2tldD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3NvY2tldD0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzb2NrZXQgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzb2NrZXQgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc29ja2V0CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gc29ja2V0KDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zb2NrZXQ9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zb2NrZXQ9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNvY2tldCB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNvY2tldCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3NvY2tldCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X3NvY2tldD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3NvY2tldD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNvY2tldCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNvY2tldCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NPQ0tFVCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfc29ja2V0PSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3NvY2tldD0ibm8iCisgIGZpCisKKworICAgICAgIworICB0c3RfbGlua3Nfc29ja2V0cGFpcj0idW5rbm93biIKKyAgdHN0X3Byb3RvX3NvY2tldHBhaXI9InVua25vd24iCisgIHRzdF9jb21waV9zb2NrZXRwYWlyPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc29ja2V0cGFpcj0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNvY2tldHBhaXIgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzb2NrZXRwYWlyIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgc29ja2V0cGFpciBpbm5vY3VvdXNfc29ja2V0cGFpcgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBzb2NrZXRwYWlyCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzb2NrZXRwYWlyICgpOworI2lmIGRlZmluZWQgX19zdHViX3NvY2tldHBhaXIgfHwgZGVmaW5lZCBfX3N0dWJfX19zb2NrZXRwYWlyCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHNvY2tldHBhaXIgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3NvY2tldHBhaXI9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3NvY2tldHBhaXI9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NvY2tldHBhaXIiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNvY2tldHBhaXIgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzb2NrZXRwYWlyIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjdXJsX2luY2x1ZGVzX3NvY2tldAorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzb2NrZXRwYWlyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3NvY2tldHBhaXI9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zb2NrZXRwYWlyPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zb2NrZXRwYWlyIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzb2NrZXRwYWlyIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc29ja2V0cGFpciBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY3VybF9pbmNsdWRlc19zb2NrZXQKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaW50IHN2WzJdOworICAgICAgICBpZigwICE9IHNvY2tldHBhaXIoMCwgMCwgMCwgc3YpKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zb2NrZXRwYWlyPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc29ja2V0cGFpcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NvY2tldHBhaXIiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHNvY2tldHBhaXIgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzb2NrZXRwYWlyIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfc29ja2V0cGFpciIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X3NvY2tldHBhaXI9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zb2NrZXRwYWlyPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc29ja2V0cGFpciBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHNvY2tldHBhaXIgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NvY2tldHBhaXIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zb2NrZXRwYWlyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc29ja2V0cGFpciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3NvY2tldHBhaXIiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU09DS0VUUEFJUiAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfc29ja2V0cGFpcj0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19zb2NrZXRwYWlyPSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3Nfc3RyY2FzZWNtcD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3N0cmNhc2VjbXA9InVua25vd24iCisgIHRzdF9jb21waV9zdHJjYXNlY21wPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RyY2FzZWNtcD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmNhc2VjbXAgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJjYXNlY21wIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgc3RyY2FzZWNtcCBpbm5vY3VvdXNfc3RyY2FzZWNtcAorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBzdHJjYXNlY21wCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzdHJjYXNlY21wICgpOworI2lmIGRlZmluZWQgX19zdHViX3N0cmNhc2VjbXAgfHwgZGVmaW5lZCBfX3N0dWJfX19zdHJjYXNlY21wCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHN0cmNhc2VjbXAgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3N0cmNhc2VjbXA9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3N0cmNhc2VjbXA9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmNhc2VjbXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmNhc2VjbXAgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJjYXNlY21wIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzdHJjYXNlY21wIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cmNhc2VjbXA9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJjYXNlY21wPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJjYXNlY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJjYXNlY21wIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyY2FzZWNtcCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gc3RyY2FzZWNtcCgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc3RyY2FzZWNtcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cmNhc2VjbXA9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJjYXNlY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJjYXNlY21wIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyY2FzZWNtcCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3N0cmNhc2VjbXAiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zdHJjYXNlY21wPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RyY2FzZWNtcD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmNhc2VjbXAgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJjYXNlY21wIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJjYXNlY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc3RyY2FzZWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3N0cmNhc2VjbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zdHJjYXNlY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX3N0cmNhc2VjbXA9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfc3RyY2FzZWNtcD0ibm8iCisgIGZpCisKKworICAgICMKKyAgdHN0X2xpbmtzX3N0cmNhc2VzdHI9InVua25vd24iCisgIHRzdF9wcm90b19zdHJjYXNlc3RyPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RyY2FzZXN0cj0idW5rbm93biIKKyAgdHN0X2FsbG93X3N0cmNhc2VzdHI9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJjYXNlc3RyIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyY2FzZXN0ciBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIHN0cmNhc2VzdHIgaW5ub2N1b3VzX3N0cmNhc2VzdHIKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgc3RyY2FzZXN0cgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc3RyY2FzZXN0ciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9zdHJjYXNlc3RyIHx8IGRlZmluZWQgX19zdHViX19fc3RyY2FzZXN0cgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzdHJjYXNlc3RyICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJjYXNlc3RyPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJjYXNlc3RyPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJjYXNlc3RyIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJjYXNlc3RyIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyY2FzZXN0ciBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAic3RyY2FzZXN0ciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJjYXNlc3RyPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RyY2FzZXN0cj0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc3RyY2FzZXN0ciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyY2FzZXN0ciBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmNhc2VzdHIgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IHN0cmNhc2VzdHIoMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cmNhc2VzdHI9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zdHJjYXNlc3RyPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RyY2FzZXN0ciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyY2FzZXN0ciB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmNhc2VzdHIgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zdHJjYXNlc3RyIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RyY2FzZXN0cj0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cmNhc2VzdHI9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJjYXNlc3RyIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyY2FzZXN0ciBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyY2FzZXN0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cmNhc2VzdHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJjYXNlc3RyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RyY2FzZXN0ciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJDQVNFU1RSIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zdHJjYXNlc3RyPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3N0cmNhc2VzdHI9Im5vIgorICBmaQorCisKKyAgICAjCisgIHRzdF9saW5rc19zdHJjbXBpPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RyY21waT0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cmNtcGk9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJjbXBpPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyY21waSBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmNtcGkgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBzdHJjbXBpIGlubm9jdW91c19zdHJjbXBpCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIHN0cmNtcGkKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cmNtcGkgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfc3RyY21waSB8fCBkZWZpbmVkIF9fc3R1Yl9fX3N0cmNtcGkKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gc3RyY21waSAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RyY21waT0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RyY21waT0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyY21waSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyY21waSBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmNtcGkgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInN0cmNtcGkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RyY21waT0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cmNtcGk9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cmNtcGkiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmNtcGkgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJjbXBpIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBzdHJjbXBpKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zdHJjbXBpPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc3RyY21waT0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cmNtcGkiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmNtcGkgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJjbXBpIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfc3RyY21waSIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cmNtcGk9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zdHJjbXBpPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyY21waSBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmNtcGkgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmNtcGkiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJjbXBpIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RyY21waSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3N0cmNtcGkiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSQ01QSSAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfc3RyY21waT0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19zdHJjbXBpPSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3Nfc3RyZHVwPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RyZHVwPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RyZHVwPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RyZHVwPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyZHVwIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyZHVwIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgc3RyZHVwIGlubm9jdW91c19zdHJkdXAKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgc3RyZHVwCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzdHJkdXAgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfc3RyZHVwIHx8IGRlZmluZWQgX19zdHViX19fc3RyZHVwCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHN0cmR1cCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RyZHVwPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJkdXA9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmR1cCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyZHVwIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyZHVwIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzdHJkdXAiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RyZHVwPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RyZHVwPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJkdXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmR1cCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmR1cCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gc3RyZHVwKDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zdHJkdXA9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zdHJkdXA9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJkdXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmR1cCB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmR1cCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3N0cmR1cCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cmR1cD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cmR1cD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmR1cCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmR1cCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyZHVwIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc3RyZHVwIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RyZHVwIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RyZHVwIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUkRVUCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfc3RyZHVwPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3N0cmR1cD0ibm8iCisgIGZpCisKKworICAgICAgIworICB0c3RfbGlua3Nfc3RyZXJyb3Jfcj0idW5rbm93biIKKyAgdHN0X3Byb3RvX3N0cmVycm9yX3I9InVua25vd24iCisgIHRzdF9jb21waV9zdHJlcnJvcl9yPSJ1bmtub3duIgorICB0c3RfZ2xpYmNfc3RyZXJyb3Jfcj0idW5rbm93biIKKyAgdHN0X3Bvc2l4X3N0cmVycm9yX3I9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJlcnJvcl9yPSJ1bmtub3duIgorICB0c3Rfd29ya3NfZ2xpYmNfc3RyZXJyb3Jfcj0idW5rbm93biIKKyAgdHN0X3dvcmtzX3Bvc2l4X3N0cmVycm9yX3I9InVua25vd24iCisgIHRzdF9nbGliY19zdHJlcnJvcl9yX3R5cGVfYXJnMz0idW5rbm93biIKKyAgdHN0X3Bvc2l4X3N0cmVycm9yX3JfdHlwZV9hcmczPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyZXJyb3JfciBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmVycm9yX3IgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBzdHJlcnJvcl9yIGlubm9jdW91c19zdHJlcnJvcl9yCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIHN0cmVycm9yX3IKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cmVycm9yX3IgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfc3RyZXJyb3JfciB8fCBkZWZpbmVkIF9fc3R1Yl9fX3N0cmVycm9yX3IKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gc3RyZXJyb3JfciAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RyZXJyb3Jfcj0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RyZXJyb3Jfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyZXJyb3JfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyZXJyb3JfciBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmVycm9yX3IgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInN0cmVycm9yX3IiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RyZXJyb3Jfcj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cmVycm9yX3I9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cmVycm9yX3IiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmVycm9yX3IgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJlcnJvcl9yIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBzdHJlcnJvcl9yKDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zdHJlcnJvcl9yPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc3RyZXJyb3Jfcj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cmVycm9yX3IiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmVycm9yX3IgaXMgZ2xpYmMgbGlrZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJlcnJvcl9yIGlzIGdsaWJjIGxpa2UuLi4gIiA+JjY7IH0KKyAgICB0c3RfZ2xpYmNfc3RyZXJyb3Jfcl90eXBlX2FyZzM9InVua25vd24iCisgICAgZm9yIGFyZzMgaW4gJ3NpemVfdCcgJ2ludCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgICAgICBpZiB0ZXN0ICIkdHN0X2dsaWJjX3N0cmVycm9yX3JfdHlwZV9hcmczIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgICBjaGFyICpzdHJlcnJvcl9yKGludCBlcnJudW0sIGNoYXIgKndvcmtidWYsICRhcmczIGJ1ZnNpemUpOworICAgICAgICAgICAgaWYoMCAhPSBzdHJlcnJvcl9yKDAsIDAsIDApKQorICAgICAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICB0c3RfZ2xpYmNfc3RyZXJyb3Jfcl90eXBlX2FyZzM9IiRhcmczIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBmaQorICAgIGRvbmUKKyAgICBjYXNlICIkdHN0X2dsaWJjX3N0cmVycm9yX3JfdHlwZV9hcmczIiBpbgorICAgICAgdW5rbm93bikKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIHRzdF9nbGliY19zdHJlcnJvcl9yPSJubyIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgIHRzdF9nbGliY19zdHJlcnJvcl9yPSJ5ZXMiCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorICAjCisgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0c3RfZ2xpYmNfc3RyZXJyb3JfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyZXJyb3JfciBzZWVtcyB0byB3b3JrIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmVycm9yX3Igc2VlbXMgdG8gd29yay4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RkbGliCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworIyAgICAgICBpbmNsdWRlIDxlcnJuby5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBjaGFyIGJ1ZmZlclsxMDI0XTsKKyAgICAgICAgY2hhciAqc3RyaW5nID0gMDsKKyAgICAgICAgYnVmZmVyWzBdID0gJ1wwJzsKKyAgICAgICAgc3RyaW5nID0gc3RyZXJyb3JfcihFQUNDRVMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgICAgICBpZighc3RyaW5nKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgaWYoIXN0cmluZ1swXSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICBleGl0KDApOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3dvcmtzX2dsaWJjX3N0cmVycm9yX3I9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF93b3Jrc19nbGliY19zdHJlcnJvcl9yPSJubyIKKworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cmVycm9yX3IiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX2dsaWJjX3N0cmVycm9yX3IiICE9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJlcnJvcl9yIGlzIFBPU0lYIGxpa2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyZXJyb3JfciBpcyBQT1NJWCBsaWtlLi4uICIgPiY2OyB9CisgICAgdHN0X3Bvc2l4X3N0cmVycm9yX3JfdHlwZV9hcmczPSJ1bmtub3duIgorICAgIGZvciBhcmczIGluICdzaXplX3QnICdpbnQnICd1bnNpZ25lZCBpbnQnOyBkbworICAgICAgaWYgdGVzdCAiJHRzdF9wb3NpeF9zdHJlcnJvcl9yX3R5cGVfYXJnMyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgICAgaW50IHN0cmVycm9yX3IoaW50IGVycm51bSwgY2hhciAqcmVzdWx0YnVmLCAkYXJnMyBidWZzaXplKTsKKyAgICAgICAgICAgIGlmKDAgIT0gc3RyZXJyb3JfcigwLCAwLCAwKSkKKyAgICAgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgdHN0X3Bvc2l4X3N0cmVycm9yX3JfdHlwZV9hcmczPSIkYXJnMyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgZmkKKyAgICBkb25lCisgICAgY2FzZSAiJHRzdF9wb3NpeF9zdHJlcnJvcl9yX3R5cGVfYXJnMyIgaW4KKyAgICAgIHVua25vd24pCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICB0c3RfcG9zaXhfc3RyZXJyb3Jfcj0ibm8iCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB0c3RfcG9zaXhfc3RyZXJyb3Jfcj0ieWVzIgorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgIworICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3Bvc2l4X3N0cmVycm9yX3IiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmVycm9yX3Igc2VlbXMgdG8gd29yayIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJlcnJvcl9yIHNlZW1zIHRvIHdvcmsuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgImNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0ZGxpYgorICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyMgICAgICAgaW5jbHVkZSA8ZXJybm8uaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgY2hhciBidWZmZXJbMTAyNF07CisgICAgICAgIGludCBlcnJvciA9IDE7CisgICAgICAgIGJ1ZmZlclswXSA9ICdcMCc7CisgICAgICAgIGVycm9yID0gc3RyZXJyb3JfcihFQUNDRVMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgICAgICBpZihlcnJvcikKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKGJ1ZmZlclswXSA9PSAnXDAnKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgIGV4aXQoMCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3Rfd29ya3NfcG9zaXhfc3RyZXJyb3Jfcj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3dvcmtzX3Bvc2l4X3N0cmVycm9yX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3Rfd29ya3NfZ2xpYmNfc3RyZXJyb3JfciIgPSAieWVzIjsgdGhlbgorICAgIHRzdF9wb3NpeF9zdHJlcnJvcl9yPSJubyIKKyAgZmkKKyAgaWYgdGVzdCAiJHRzdF93b3Jrc19wb3NpeF9zdHJlcnJvcl9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgdHN0X2dsaWJjX3N0cmVycm9yX3I9Im5vIgorICBmaQorICBpZiB0ZXN0ICIkdHN0X2dsaWJjX3N0cmVycm9yX3IiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX2dsaWJjX3N0cmVycm9yX3IiICE9ICJubyIgJiYKKyAgICB0ZXN0ICIkdHN0X3Bvc2l4X3N0cmVycm9yX3IiICE9ICJ5ZXMiOyB0aGVuCisgICAgdHN0X2FsbG93X3N0cmVycm9yX3I9ImNoZWNrIgorICBmaQorICBpZiB0ZXN0ICIkdHN0X3Bvc2l4X3N0cmVycm9yX3IiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX3Bvc2l4X3N0cmVycm9yX3IiICE9ICJubyIgJiYKKyAgICB0ZXN0ICIkdHN0X2dsaWJjX3N0cmVycm9yX3IiICE9ICJ5ZXMiOyB0aGVuCisgICAgdHN0X2FsbG93X3N0cmVycm9yX3I9ImNoZWNrIgorICBmaQorICBpZiB0ZXN0ICIkdHN0X2FsbG93X3N0cmVycm9yX3IiID0gImNoZWNrIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RyZXJyb3JfciB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmVycm9yX3IgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zdHJlcnJvcl9yIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RyZXJyb3Jfcj0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cmVycm9yX3I9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJlcnJvcl9yIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyZXJyb3JfciBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyZXJyb3JfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cmVycm9yX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJlcnJvcl9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RyZXJyb3JfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgaWYgdGVzdCAiJHRzdF9nbGliY19zdHJlcnJvcl9yIiA9ICJ5ZXMiOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJFUlJPUl9SIDEKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HTElCQ19TVFJFUlJPUl9SIDEKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU1RSRVJST1JfUl9UWVBFX0FSRzMgJHRzdF9nbGliY19zdHJlcnJvcl9yX3R5cGVfYXJnMworX0FDRU9GCisKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0c3RfcG9zaXhfc3RyZXJyb3JfciIgPSAieWVzIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSRVJST1JfUiAxCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUE9TSVhfU1RSRVJST1JfUiAxCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNUUkVSUk9SX1JfVFlQRV9BUkczICR0c3RfcG9zaXhfc3RyZXJyb3Jfcl90eXBlX2FyZzMKK19BQ0VPRgorCisgICAgZmkKKyAgICBhY19jdl9mdW5jX3N0cmVycm9yX3I9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfc3RyZXJyb3Jfcj0ibm8iCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJlcnJvcl9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RyZXJyb3JfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhbm5vdCBkZXRlcm1pbmUgc3RyZXJyb3JfcigpIHN0eWxlOiBlZGl0IGxpYi9jdXJsX2NvbmZpZy5oIG1hbnVhbGx5LiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYW5ub3QgZGV0ZXJtaW5lIHN0cmVycm9yX3IoKSBzdHlsZTogZWRpdCBsaWIvY3VybF9jb25maWcuaCBtYW51YWxseS4iID4mMjt9CisgIGZpCisgICMKKworCisgICAgIworICB0c3RfbGlua3Nfc3RyaWNtcD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3N0cmljbXA9InVua25vd24iCisgIHRzdF9jb21waV9zdHJpY21wPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RyaWNtcD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmljbXAgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJpY21wIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgc3RyaWNtcCBpbm5vY3VvdXNfc3RyaWNtcAorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBzdHJpY21wCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzdHJpY21wICgpOworI2lmIGRlZmluZWQgX19zdHViX3N0cmljbXAgfHwgZGVmaW5lZCBfX3N0dWJfX19zdHJpY21wCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHN0cmljbXAgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3N0cmljbXA9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3N0cmljbXA9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmljbXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmljbXAgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJpY21wIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzdHJpY21wIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cmljbXA9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJpY21wPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJpY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJpY21wIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyaWNtcCBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gc3RyaWNtcCgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc3RyaWNtcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cmljbXA9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJpY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJpY21wIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RyaWNtcCB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3N0cmljbXAiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zdHJpY21wPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RyaWNtcD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cmljbXAgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJpY21wIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJpY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc3RyaWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3N0cmljbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zdHJpY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUklDTVAgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX3N0cmljbXA9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfc3RyaWNtcD0ibm8iCisgIGZpCisKKworICAgICMKKyAgdHN0X2xpbmtzX3N0cmxjYXQ9InVua25vd24iCisgIHRzdF9wcm90b19zdHJsY2F0PSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RybGNhdD0idW5rbm93biIKKyAgdHN0X2FsbG93X3N0cmxjYXQ9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJsY2F0IGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybGNhdCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIHN0cmxjYXQgaW5ub2N1b3VzX3N0cmxjYXQKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgc3RybGNhdAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc3RybGNhdCAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9zdHJsY2F0IHx8IGRlZmluZWQgX19zdHViX19fc3RybGNhdAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzdHJsY2F0ICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJsY2F0PSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJsY2F0PSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJsY2F0IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJsY2F0IGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybGNhdCBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAic3RybGNhdCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJsY2F0PSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RybGNhdD0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc3RybGNhdCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RybGNhdCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmxjYXQgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IHN0cmxjYXQoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cmxjYXQ9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zdHJsY2F0PSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RybGNhdCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RybGNhdCB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cmxjYXQgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zdHJsY2F0IiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RybGNhdD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cmxjYXQ9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJsY2F0IG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybGNhdCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RybGNhdCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cmxjYXQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJsY2F0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RybGNhdCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJMQ0FUIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zdHJsY2F0PSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3N0cmxjYXQ9Im5vIgorICBmaQorCisKKyAgICAjCisgIHRzdF9saW5rc19zdHJuY2FzZWNtcD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3N0cm5jYXNlY21wPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RybmNhc2VjbXA9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJuY2FzZWNtcD0idW5rbm93biIKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cm5jYXNlY21wIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybmNhc2VjbXAgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBzdHJuY2FzZWNtcCBpbm5vY3VvdXNfc3RybmNhc2VjbXAKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgc3RybmNhc2VjbXAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cm5jYXNlY21wICgpOworI2lmIGRlZmluZWQgX19zdHViX3N0cm5jYXNlY21wIHx8IGRlZmluZWQgX19zdHViX19fc3RybmNhc2VjbXAKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gc3RybmNhc2VjbXAgKCk7CisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3N0cm5jYXNlY21wPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJuY2FzZWNtcD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RybmNhc2VjbXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cm5jYXNlY21wIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybmNhc2VjbXAgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInN0cm5jYXNlY21wIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cm5jYXNlY21wPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RybmNhc2VjbXA9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cm5jYXNlY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJuY2FzZWNtcCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cm5jYXNlY21wIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBzdHJuY2FzZWNtcCgwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc3RybmNhc2VjbXA9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zdHJuY2FzZWNtcD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cm5jYXNlY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJuY2FzZWNtcCB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cm5jYXNlY21wIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfc3RybmNhc2VjbXAiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zdHJuY2FzZWNtcD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cm5jYXNlY21wPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RybmNhc2VjbXAgbWlnaHQgYmUgdXNlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJuY2FzZWNtcCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RybmNhc2VjbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJuY2FzZWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3N0cm5jYXNlY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RybmNhc2VjbXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSTkNBU0VDTVAgMQorX0FDRU9GCisKKyAgICBhY19jdl9mdW5jX3N0cm5jYXNlY21wPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3N0cm5jYXNlY21wPSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3Nfc3RybmNtcGk9InVua25vd24iCisgIHRzdF9wcm90b19zdHJuY21waT0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cm5jbXBpPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RybmNtcGk9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJuY21waSBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cm5jbXBpIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgc3RybmNtcGkgaW5ub2N1b3VzX3N0cm5jbXBpCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIHN0cm5jbXBpCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzdHJuY21waSAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9zdHJuY21waSB8fCBkZWZpbmVkIF9fc3R1Yl9fX3N0cm5jbXBpCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHN0cm5jbXBpICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJuY21waT0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RybmNtcGk9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cm5jbXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJuY21waSBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cm5jbXBpIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzdHJuY21waSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJuY21waT0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cm5jbXBpPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJuY21waSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RybmNtcGkgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJuY21waSBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gc3RybmNtcGkoMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cm5jbXBpPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc3RybmNtcGk9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJuY21waSIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RybmNtcGkgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJuY21waSB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3N0cm5jbXBpIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RybmNtcGk9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zdHJuY21waT0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cm5jbXBpIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybmNtcGkgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cm5jbXBpIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc3RybmNtcGkiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJuY21waSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3N0cm5jbXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUk5DTVBJIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zdHJuY21waT0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19zdHJuY21waT0ibm8iCisgIGZpCisKKworICAgICMKKyAgdHN0X2xpbmtzX3N0cm5pY21wPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RybmljbXA9InVua25vd24iCisgIHRzdF9jb21waV9zdHJuaWNtcD0idW5rbm93biIKKyAgdHN0X2FsbG93X3N0cm5pY21wPSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RybmljbXAgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJuaWNtcCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIHN0cm5pY21wIGlubm9jdW91c19zdHJuaWNtcAorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBzdHJuaWNtcAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc3RybmljbXAgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfc3RybmljbXAgfHwgZGVmaW5lZCBfX3N0dWJfX19zdHJuaWNtcAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzdHJuaWNtcCAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RybmljbXA9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3N0cm5pY21wPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJuaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RybmljbXAgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJuaWNtcCBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAic3RybmljbXAiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RybmljbXA9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJuaWNtcD0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc3RybmljbXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cm5pY21wIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybmljbXAgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IHN0cm5pY21wKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zdHJuaWNtcD0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cm5pY21wPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RybmljbXAiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cm5pY21wIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RybmljbXAgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zdHJuaWNtcCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cm5pY21wPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RybmljbXA9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJuaWNtcCBtaWdodCBiZSB1c2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cm5pY21wIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJuaWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cm5pY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RybmljbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zdHJuaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJOSUNNUCAxCitfQUNFT0YKKworICAgIGFjX2N2X2Z1bmNfc3RybmljbXA9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfc3RybmljbXA9Im5vIgorICBmaQorCisKKyAgICAjCisgIHRzdF9saW5rc19zdHJzdHI9InVua25vd24iCisgIHRzdF9wcm90b19zdHJzdHI9InVua25vd24iCisgIHRzdF9jb21waV9zdHJzdHI9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJzdHI9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJzdHIgY2FuIGJlIGxpbmtlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJzdHIgY2FuIGJlIGxpbmtlZC4uLiAiID4mNjsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI2RlZmluZSBzdHJzdHIgaW5ub2N1b3VzX3N0cnN0cgorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiBzdHJzdHIKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cnN0ciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9zdHJzdHIgfHwgZGVmaW5lZCBfX3N0dWJfX19zdHJzdHIKK2Nob2tlIG1lCisjZW5kaWYKKworaW50IG1haW4gKHZvaWQpCit7CityZXR1cm4gc3Ryc3RyICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJzdHI9InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgdHN0X2xpbmtzX3N0cnN0cj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3Ryc3RyIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJzdHIgaXMgcHJvdG90eXBlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJzdHIgaXMgcHJvdG90eXBlZC4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInN0cnN0ciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJzdHI9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJzdHI9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QqCisKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cnN0ciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3Ryc3RyIGlzIGNvbXBpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3Ryc3RyIGlzIGNvbXBpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSBzdHJzdHIoMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cnN0cj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cnN0cj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cnN0ciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3Ryc3RyIHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3Ryc3RyIHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfc3Ryc3RyIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3Ryc3RyPSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3Ryc3RyPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3Ryc3RyIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3Ryc3RyIG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJzdHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJzdHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJzdHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zdHJzdHIiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSU1RSIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zdHJzdHI9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfc3Ryc3RyPSJubyIKKyAgZmkKKworCisgICAgIworICB0c3RfbGlua3Nfc3RydG9rX3I9InVua25vd24iCisgIHRzdF9wcm90b19zdHJ0b2tfcj0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cnRva19yPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RydG9rX3I9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJ0b2tfciBjYW4gYmUgbGlua2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cnRva19yIGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgc3RydG9rX3IgaW5ub2N1b3VzX3N0cnRva19yCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIHN0cnRva19yCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzdHJ0b2tfciAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9zdHJ0b2tfciB8fCBkZWZpbmVkIF9fc3R1Yl9fX3N0cnRva19yCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHN0cnRva19yICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJ0b2tfcj0ieWVzIgorCitlbHNlCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfc3RydG9rX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cnRva19yIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJ0b2tfciBpcyBwcm90b3R5cGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cnRva19yIGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJzdHJ0b2tfciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJ0b2tfcj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3N0cnRva19yPSJubyIKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJ0b2tfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RydG9rX3IgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJ0b2tfciBpcyBjb21waWxhYmxlLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGlmKDAgIT0gc3RydG9rX3IoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cnRva19yPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfY29tcGlfc3RydG9rX3I9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJ0b2tfciIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RydG9rX3IgdXNhZ2UgYWxsb3dlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBzdHJ0b2tfciB1c2FnZSBhbGxvd2VkLi4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3N0cnRva19yIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RydG9rX3I9InllcyIKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9hbGxvd19zdHJ0b2tfcj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN0cnRva19yIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RydG9rX3IgbWlnaHQgYmUgdXNlZC4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cnRva19yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc3RydG9rX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJ0b2tfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3N0cnRva19yIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlRPS19SIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zdHJ0b2tfcj0ieWVzIgorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgYWNfY3ZfZnVuY19zdHJ0b2tfcj0ibm8iCisgIGZpCisKKworICAgICMKKyAgdHN0X2xpbmtzX3N0cnRvbGw9InVua25vd24iCisgIHRzdF9wcm90b19zdHJ0b2xsPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RydG9sbD0idW5rbm93biIKKyAgdHN0X2FsbG93X3N0cnRvbGw9InVua25vd24iCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJ0b2xsIGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RydG9sbCBjYW4gYmUgbGlua2VkLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjZGVmaW5lIHN0cnRvbGwgaW5ub2N1b3VzX3N0cnRvbGwKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgc3RydG9sbAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc3RydG9sbCAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9zdHJ0b2xsIHx8IGRlZmluZWQgX19zdHViX19fc3RydG9sbAorY2hva2UgbWUKKyNlbmRpZgorCitpbnQgbWFpbiAodm9pZCkKK3sKK3JldHVybiBzdHJ0b2xsICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJ0b2xsPSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc19zdHJ0b2xsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJ0b2xsIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJ0b2xsIGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RydG9sbCBpcyBwcm90b3R5cGVkLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICAkY3VybF9pbmNsdWRlc19zdGRsaWIKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAic3RydG9sbCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIHRzdF9wcm90b19zdHJ0b2xsPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfcHJvdG9fc3RydG9sbD0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc3RydG9sbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RydG9sbCBpcyBjb21waWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cnRvbGwgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0ZGxpYgorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICBpZigwICE9IHN0cnRvbGwoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3N0cnRvbGw9InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIHRzdF9jb21waV9zdHJ0b2xsPSJubyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RydG9sbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgc3RydG9sbCB1c2FnZSBhbGxvd2VkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHN0cnRvbGwgdXNhZ2UgYWxsb3dlZC4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zdHJ0b2xsIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfc3RydG9sbD0ieWVzIgorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2FsbG93X3N0cnRvbGw9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzdHJ0b2xsIG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3RydG9sbCBtaWdodCBiZSB1c2VkLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RydG9sbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cnRvbGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJ0b2xsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RydG9sbCIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJUT0xMIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY19zdHJ0b2xsPSJ5ZXMiCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhY19jdl9mdW5jX3N0cnRvbGw9Im5vIgorICBmaQorCisKK2N1cmxfaW5jbHVkZXNfc3lzX3Vpbz0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1VJT19ICisjICBpbmNsdWRlIDxzeXMvdWlvLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvdWlvLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGN1cmxfaW5jbHVkZXNfc3lzX3VpbworIgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisgICAgIworICB0c3RfbGlua3Nfd3JpdGV2PSJ1bmtub3duIgorICB0c3RfcHJvdG9fd3JpdGV2PSJ1bmtub3duIgorICB0c3RfY29tcGlfd3JpdGV2PSJ1bmtub3duIgorICB0c3RfYWxsb3dfd3JpdGV2PSJ1bmtub3duIgorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd3JpdGV2IGNhbiBiZSBsaW5rZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd3JpdGV2IGNhbiBiZSBsaW5rZWQuLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgd3JpdGV2IGlubm9jdW91c193cml0ZXYKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisjdW5kZWYgd3JpdGV2CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciB3cml0ZXYgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfd3JpdGV2IHx8IGRlZmluZWQgX19zdHViX19fd3JpdGV2CitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHdyaXRldiAoKTsKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICB0c3RfbGlua3Nfd3JpdGV2PSJ5ZXMiCisKK2Vsc2UKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIHRzdF9saW5rc193cml0ZXY9Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3dyaXRldiIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd3JpdGV2IGlzIHByb3RvdHlwZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd3JpdGV2IGlzIHByb3RvdHlwZWQuLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N5c191aW8KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAid3JpdGV2IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3dyaXRldj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X3Byb3RvX3dyaXRldj0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fd3JpdGV2IiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3cml0ZXYgaXMgY29tcGlsYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3cml0ZXYgaXMgY29tcGlsYWJsZS4uLiAiID4mNjsgfQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c191aW8KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgaWYoMCAhPSB3cml0ZXYoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3dyaXRldj0ieWVzIgorCitlbHNlCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgdHN0X2NvbXBpX3dyaXRldj0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3dyaXRldiIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd3JpdGV2IHVzYWdlIGFsbG93ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd3JpdGV2IHVzYWdlIGFsbG93ZWQuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfd3JpdGV2IiAhPSAieHllcyI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfd3JpdGV2PSJ5ZXMiCisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICB0c3RfYWxsb3dfd3JpdGV2PSJubyIKKyAgICBmaQorICBmaQorICAjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd3JpdGV2IG1pZ2h0IGJlIHVzZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd3JpdGV2IG1pZ2h0IGJlIHVzZWQuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHRzdF9saW5rc193cml0ZXYiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b193cml0ZXYiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV93cml0ZXYiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd193cml0ZXYiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfV1JJVEVWIDEKK19BQ0VPRgorCisgICAgYWNfY3ZfZnVuY193cml0ZXY9InllcyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGFjX2N2X2Z1bmNfd3JpdGV2PSJubyIKKyAgZmkKKworCitjYXNlICRob3N0IGluCisgICptc2Rvc2RqZ3BwKQorICAgICBhY19jdl9mdW5jX3BpcGU9bm8KKyAgICAgc2tpcGNoZWNrX3BpcGU9eWVzCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogc2tpcCBjaGVjayBmb3IgcGlwZSBvbiBtc2Rvc2RqZ3BwIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHNraXAgY2hlY2sgZm9yIHBpcGUgb24gbXNkb3NkamdwcCIgPiY2O30KKyAgICA7OworZXNhYworCitmb3IgYWNfZnVuYyBpbiBmb3JrIFwKKyAgZ2V0ZXVpZCBcCisgIGdldHBhc3NfciBcCisgIGdldHBwaWQgXAorICBnZXRwcm90b2J5bmFtZSBcCisgIGdldHB3dWlkIFwKKyAgZ2V0cmxpbWl0IFwKKyAgZ2V0dGltZW9mZGF5IFwKKyAgaW5ldF9hZGRyIFwKKyAgcGVycm9yIFwKKyAgcGlwZSBcCisgIHNldGxvY2FsZSBcCisgIHNldG1vZGUgXAorICBzZXRybGltaXQgXAorICB1bmFtZSBcCisgIHV0aW1lCisKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitldmFsIGFzX3ZhbD1cJCRhc19hY192YXIKKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCisKK2Vsc2UKKworICBmdW5jPSIkYWNfZnVuYyIKKyAgZXZhbCBza2lwY2hlY2s9XCRza2lwY2hlY2tfJGZ1bmMKKyAgaWYgdGVzdCAieCRza2lwY2hlY2siICE9ICJ4eWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVlcGVyIGZvciAkZnVuYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZWVwZXIgZm9yICRmdW5jLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgJGZ1bmMgKCk7CisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgZXZhbCAiYWNfY3ZfZnVuY18kZnVuYz15ZXMiCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGZ1bmMiIHwgc2VkICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLycgfCBzZWQgJ3MvXkEtWjAtOV8vXy9nJ2AgMQorX0FDRU9GCisKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogYnV0IHN0aWxsIG5vIiA+JjUKKyRhc19lY2hvICJidXQgc3RpbGwgbm8iID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKworZmkKK2RvbmUKKworCisKKyAgICBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zb2NrZXQuaCBuZXRkYi5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnZXRuYW1laW5mbyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0bmFtZWluZm8uLi4gIiA+JjY7IH0KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNkZWZpbmUgZ2V0bmFtZWluZm8gaW5ub2N1b3VzX2dldG5hbWVpbmZvCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorI3VuZGVmIGdldG5hbWVpbmZvCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRuYW1laW5mbyAoKTsKKyNpZiBkZWZpbmVkIF9fc3R1Yl9nZXRuYW1laW5mbyB8fCBkZWZpbmVkIF9fc3R1Yl9fX2dldG5hbWVpbmZvCitjaG9rZSBtZQorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIGdldG5hbWVpbmZvICgpOworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGN1cmxfY3ZfZ2V0bmFtZWluZm89InllcyIKKworZWxzZQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgY3VybF9jdl9nZXRuYW1laW5mbz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAjCisgIGlmIHRlc3QgIiRjdXJsX2N2X2dldG5hbWVpbmZvIiAhPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVlcGVyIGZvciBnZXRuYW1laW5mbyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZWVwZXIgZm9yIGdldG5hbWVpbmZvLi4uICIgPiY2OyB9CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgZ2V0bmFtZWluZm8oKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICBjdXJsX2N2X2dldG5hbWVpbmZvPSJ5ZXMiCisKK2Vsc2UKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGJ1dCBzdGlsbCBubyIgPiY1CiskYXNfZWNobyAiYnV0IHN0aWxsIG5vIiA+JjY7IH0KKyAgICAgIGN1cmxfY3ZfZ2V0bmFtZWluZm89Im5vIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkY3VybF9jdl9nZXRuYW1laW5mbyIgIT0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlZXBlciBhbmQgZGVlcGVyIGZvciBnZXRuYW1laW5mbyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZWVwZXIgYW5kIGRlZXBlciBmb3IgZ2V0bmFtZWluZm8uLi4gIiA+JjY7IH0KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgIGdldG5hbWVpbmZvKDAsIDAsIDAsIDAsIDAsIDAsIDApOworCisgOworIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIGN1cmxfY3ZfZ2V0bmFtZWluZm89InllcyIKKworZWxzZQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogYnV0IHN0aWxsIG5vIiA+JjUKKyRhc19lY2hvICJidXQgc3RpbGwgbm8iID4mNjsgfQorICAgICAgY3VybF9jdl9nZXRuYW1laW5mbz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBmaQorICAjCisgIGlmIHRlc3QgIiRjdXJsX2N2X2dldG5hbWVpbmZvIiA9ICJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0eXBlcyBvZiBhcmd1bWVudHMgZm9yIGdldG5hbWVpbmZvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHR5cGVzIG9mIGFyZ3VtZW50cyBmb3IgZ2V0bmFtZWluZm8uLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7Y3VybF9jdl9mdW5jX2dldG5hbWVpbmZvX2FyZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjdXJsX2N2X2Z1bmNfZ2V0bmFtZWluZm9fYXJncz0idW5rbm93biIKKyAgICAgIGZvciBnbmlfYXJnMSBpbiAnc3RydWN0IHNvY2thZGRyIConICdjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKicgJ3ZvaWQgKic7IGRvCisgICAgICAgIGZvciBnbmlfYXJnMiBpbiAnc29ja2xlbl90JyAnc2l6ZV90JyAnaW50JzsgZG8KKyAgICAgICAgICBmb3IgZ25pX2FyZzQ2IGluICdzaXplX3QnICdpbnQnICdzb2NrbGVuX3QnICd1bnNpZ25lZCBpbnQnICdEV09SRCc7IGRvCisgICAgICAgICAgICBmb3IgZ25pX2FyZzcgaW4gJ2ludCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgICAgICAgICAgICAgIGlmIHRlc3QgIiRjdXJsX2N2X2Z1bmNfZ2V0bmFtZWluZm9fYXJncyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworI3VuZGVmIGlubGluZQorI2lmZGVmIEhBVkVfV0lORE9XU19ICisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisjaWYgKCFkZWZpbmVkKF9XSU4zMl9XSU5OVCkpIHx8IChfV0lOMzJfV0lOTlQgPCAweDA1MDEpCisjdW5kZWYgX1dJTjMyX1dJTk5UCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA1MDEKKyNlbmRpZgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKyNlbmRpZgorI2RlZmluZSBHTklDQUxMQ09OViBXU0FBUEkKKyNlbHNlCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjZGVmaW5lIEdOSUNBTExDT05WCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBHTklDQUxMQ09OViBnZXRuYW1laW5mbygkZ25pX2FyZzEsICRnbmlfYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosICRnbmlfYXJnNDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCAkZ25pX2FyZzQ2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRnbmlfYXJnNyk7CisKK2ludCBtYWluICh2b2lkKQoreworCisgICAgICAgICAgICAgICAgICAgICRnbmlfYXJnMiBzYWxlbj0wOworICAgICAgICAgICAgICAgICAgICAkZ25pX2FyZzQ2IGhvc3RsZW49MDsKKyAgICAgICAgICAgICAgICAgICAgJGduaV9hcmc0NiBzZXJ2bGVuPTA7CisgICAgICAgICAgICAgICAgICAgICRnbmlfYXJnNyBmbGFncz0wOworICAgICAgICAgICAgICAgICAgICBpbnQgcmVzID0gZ2V0bmFtZWluZm8oMCwgc2FsZW4sIDAsIGhvc3RsZW4sIDAsIHNlcnZsZW4sIGZsYWdzKTsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgICAgICAgIGN1cmxfY3ZfZnVuY19nZXRuYW1laW5mb19hcmdzPSIkZ25pX2FyZzEsJGduaV9hcmcyLCRnbmlfYXJnNDYsJGduaV9hcmc3IgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZG9uZQorICAgICAgICBkb25lCisgICAgICBkb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGN1cmxfY3ZfZnVuY19nZXRuYW1laW5mb19hcmdzIiA+JjUKKyRhc19lY2hvICIkY3VybF9jdl9mdW5jX2dldG5hbWVpbmZvX2FyZ3MiID4mNjsgfSAjIEFDLUNBQ0hFLUNIRUNLCisgICAgaWYgdGVzdCAiJGN1cmxfY3ZfZnVuY19nZXRuYW1laW5mb19hcmdzIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBDYW5ub3QgZmluZCBwcm9wZXIgdHlwZXMgdG8gdXNlIGZvciBnZXRuYW1laW5mbyBhcmdzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IENhbm5vdCBmaW5kIHByb3BlciB0eXBlcyB0byB1c2UgZm9yIGdldG5hbWVpbmZvIGFyZ3MiID4mMjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IEhBVkVfR0VUTkFNRUlORk8gd2lsbCBub3QgYmUgZGVmaW5lZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBIQVZFX0dFVE5BTUVJTkZPIHdpbGwgbm90IGJlIGRlZmluZWQiID4mMjt9CisgICAgZWxzZQorICAgICAgZ25pX3ByZXZfSUZTPSRJRlM7IElGUz0nLCcKKyAgICAgIHNldCBkdW1teSBgZWNobyAiJGN1cmxfY3ZfZnVuY19nZXRuYW1laW5mb19hcmdzIiB8IHNlZCAncy9cKi9cKi9nJ2AKKyAgICAgIElGUz0kZ25pX3ByZXZfSUZTCisgICAgICBzaGlmdAorICAgICAgIworICAgICAgZ25pX3F1YWxfdHlwZV9hcmcxPSQxCisgICAgICAjCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcyICQyCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYgJDMKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc3ICQ0CitfQUNFT0YKKworICAgICAgIworICAgICAgcHJldl9zaF9vcHRzPSQtCisgICAgICAjCisgICAgICBjYXNlICRwcmV2X3NoX29wdHMgaW4KKyAgICAgICAgKmYqKQorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgc2V0IC1mCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKyAgICAgIGNhc2UgIiRnbmlfcXVhbF90eXBlX2FyZzEiIGluCisgICAgICAgIGNvbnN0KikKKyAgICAgICAgICBnbmlfcXVhbF9hcmcxPWNvbnN0CisgICAgICAgICAgZ25pX3R5cGVfYXJnMT1gZWNobyAkZ25pX3F1YWxfdHlwZV9hcmcxIHwgc2VkICdzL15jb25zdCAvLydgCisgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgZ25pX3F1YWxfYXJnMT0KKyAgICAgICAgICBnbmlfdHlwZV9hcmcxPSRnbmlfcXVhbF90eXBlX2FyZzEKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgICMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBHRVROQU1FSU5GT19RVUFMX0FSRzEgJGduaV9xdWFsX2FyZzEKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcxICRnbmlfdHlwZV9hcmcxCitfQUNFT0YKKworICAgICAgIworICAgICAgY2FzZSAkcHJldl9zaF9vcHRzIGluCisgICAgICAgICpmKikKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHNldCArZgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICAjCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVROQU1FSU5GTyAxCitfQUNFT0YKKworICAgICAgYWNfY3ZfZnVuY19nZXRuYW1laW5mbz0ieWVzIgorICAgIGZpCisgIGZpCisKKworaWYgdGVzdCAiJGlwdjYiID0gInllcyI7IHRoZW4KKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfZ2V0YWRkcmluZm8iID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX0lQVjYgMSIgPj5jb25mZGVmcy5oCisKKyAgICBJUFY2X0VOQUJMRUQ9MQorCisgIGZpCisKKyAgICAgIGZvciBhY19oZWFkZXIgaW4gc3RkaW8uaCBzeXMvdHlwZXMuaCBzeXMvc29ja2V0LmggXAorICAgICAgICAgICAgICAgICAgIG5ldGRiLmggbmV0aW5ldC9pbi5oIGFycGEvaW5ldC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgIworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIE5JX1dJVEhTQ09QRUlEIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIE5JX1dJVEhTQ09QRUlELi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3dvcmtpbmdfbmlfd2l0aHNjb3BlaWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorCisgICAgICAjIFByb2dyYW0gaXMgbm90IHJ1biB3aGVuIGNyb3NzLWNvbXBpbGluZy4gU28gd2UgYXNzdW1lCisgICAgICAjIE5JX1dJVEhTQ09QRUlEIHdpbGwgd29yayBpZiB3ZSBhcmUgYWJsZSB0byBjb21waWxlIGl0LgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgZHVtbXk9IE5JX05VTUVSSUNIT1NUIHwgTklfTlVNRVJJQ1NFUlYgfCBOSV9XSVRIU0NPUEVJRDsKKworIDsKKyByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgYWNfY3Zfd29ya2luZ19uaV93aXRoc2NvcGVpZD0ieWVzIgorCitlbHNlCisKKyAgICAgICAgYWNfY3Zfd29ya2luZ19uaV93aXRoc2NvcGVpZD0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQgIyBBQy1DT01QSUxFLUlGRUxTRQorCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERJT19ICisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisKK2ludCBtYWluICh2b2lkKQoreworCisjaWYgZGVmaW5lZChOSV9XSVRIU0NPUEVJRCkgJiYgZGVmaW5lZChIQVZFX0dFVE5BTUVJTkZPKQorI2lmZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7CisjZWxzZQorICAgICAgICB1bnNpZ25lZCBjaGFyIHNhWzI1Nl07CisjZW5kaWYKKyAgICAgICAgY2hhciBob3N0YnVmW05JX01BWEhPU1RdOworICAgICAgICBpbnQgcmM7CisgICAgICAgIEdFVE5BTUVJTkZPX1RZUEVfQVJHMiBzYWxlbiA9IChHRVROQU1FSU5GT19UWVBFX0FSRzIpc2l6ZW9mKHNhKTsKKyAgICAgICAgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBob3N0bGVuID0gKEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYpc2l6ZW9mKGhvc3RidWYpOworICAgICAgICBHRVROQU1FSU5GT19UWVBFX0FSRzcgZmxhZ3MgPSBOSV9OVU1FUklDSE9TVCB8IE5JX05VTUVSSUNTRVJWIHwgTklfV0lUSFNDT1BFSUQ7CisgICAgICAgIGludCBmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19TVFJFQU0sIDApOworICAgICAgICBpZihmZCA8IDApIHsKKyAgICAgICAgICBwZXJyb3IoInNvY2tldCgpIik7CisgICAgICAgICAgcmV0dXJuIDE7IC8qIEVycm9yIGNyZWF0aW5nIHNvY2tldCAqLworICAgICAgICB9CisgICAgICAgIHJjID0gZ2V0c29ja25hbWUoZmQsIChHRVROQU1FSU5GT19UWVBFX0FSRzEpJnNhLCAmc2FsZW4pOworICAgICAgICBpZihyYykgeworICAgICAgICAgIHBlcnJvcigiZ2V0c29ja25hbWUoKSIpOworICAgICAgICAgIHJldHVybiAyOyAvKiBFcnJvciByZXRyaWV2aW5nIHNvY2tldCBuYW1lICovCisgICAgICAgIH0KKyAgICAgICAgcmMgPSBnZXRuYW1laW5mbygoR0VUTkFNRUlORk9fVFlQRV9BUkcxKSZzYSwgc2FsZW4sIGhvc3RidWYsIGhvc3RsZW4sIE5VTEwsIDAsIGZsYWdzKTsKKyAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICBwcmludGYoInJjID0gJXNcbiIsIGdhaV9zdHJlcnJvcihyYykpOworICAgICAgICAgIHJldHVybiAzOyAvKiBFcnJvciB0cmFuc2xhdGluZyBzb2NrZXQgYWRkcmVzcyAqLworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOyAvKiBPaywgTklfV0lUSFNDT1BFSUQgd29ya3MgKi8KKyNlbHNlCisgICAgICAgIHJldHVybiA0OyAvKiBFcnJvciwgTklfV0lUSFNDT1BFSUQgbm90IGRlZmluZWQgb3Igbm8gZ2V0bmFtZWluZm8oKSAqLworI2VuZGlmCisKKyA7CisgcmV0dXJuIDA7Cit9ICMgQUMtTEFORy1QUk9HUkFNCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICMgRXhpdCBjb2RlID09IDAuIFByb2dyYW0gd29ya2VkLgorICAgICAgYWNfY3Zfd29ya2luZ19uaV93aXRoc2NvcGVpZD0ieWVzIgorCitlbHNlCisKKyAgICAgICMgRXhpdCBjb2RlICE9IDAuIFByb2dyYW0gZmFpbGVkLgorICAgICAgYWNfY3Zfd29ya2luZ19uaV93aXRoc2NvcGVpZD0ibm8iCisKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorICMgQUMtUlVOLUlGRUxTRQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl93b3JraW5nX25pX3dpdGhzY29wZWlkIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfd29ya2luZ19uaV93aXRoc2NvcGVpZCIgPiY2OyB9ICMgQUMtQ0FDSEUtQ0hFQ0sKKyAgY2FzZSAiJGFjX2N2X3dvcmtpbmdfbmlfd2l0aHNjb3BlaWQiIGluCisgICAgeWVzKQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX05JX1dJVEhTQ09QRUlEIDEiID4+Y29uZmRlZnMuaAorCisgICAgICA7OworICBlc2FjCisKK2ZpCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbm9uLWJsb2NraW5nIGNvbW11bmljYXRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG5vbi1ibG9ja2luZyBjb21tdW5pY2F0aW9ucy4uLiAiID4mNjsgfQorICBPUFRfTk9OQkxPQ0tJTkc9ImRlZmF1bHQiCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ub25ibG9ja2luZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ub25ibG9ja2luZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX25vbmJsb2NraW5nOyBPUFRfTk9OQkxPQ0tJTkc9JGVuYWJsZXZhbAorZmkKKworICBjYXNlICIkT1BUX05PTkJMT0NLSU5HIiBpbgorICAgIG5vKQorICAgICAgICAgICAgd2FudF9ub25ibG9ja2luZz0ibm8iCisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICAgICAgICB3YW50X25vbmJsb2NraW5nPSJ5ZXMiCisgICAgICA7OworICAgICopCisgICAgICAgICAgICB3YW50X25vbmJsb2NraW5nPSJ5ZXMiCisgICAgICA7OworICBlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2FudF9ub25ibG9ja2luZyIgPiY1CiskYXNfZWNobyAiJHdhbnRfbm9uYmxvY2tpbmciID4mNjsgfQorCisKKyAgICAgICAgICAgICAgIworICB0c3RfbWV0aG9kPSJ1bmtub3duIgorICBpZiB0ZXN0ICIkd2FudF9ub25ibG9ja2luZyIgPSAieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHNldCBhIHNvY2tldCBpbnRvIG5vbi1ibG9ja2luZyBtb2RlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBzZXQgYSBzb2NrZXQgaW50byBub24tYmxvY2tpbmcgbW9kZS4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19mY250bF9vX25vbmJsb2NrIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0iZmNudGwgT19OT05CTE9DSyIKKyAgICBlbGlmIHRlc3QgIngkYWNfY3ZfZnVuY19pb2N0bF9maW9uYmlvIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0iaW9jdGwgRklPTkJJTyIKKyAgICBlbGlmIHRlc3QgIngkYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9maW9uYmlvIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0iaW9jdGxzb2NrZXQgRklPTkJJTyIKKyAgICBlbGlmIHRlc3QgIngkYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0iSW9jdGxTb2NrZXQgRklPTkJJTyIKKyAgICBlbGlmIHRlc3QgIngkYWNfY3ZfZnVuY19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgdHN0X21ldGhvZD0ic2V0c29ja29wdCBTT19OT05CTE9DSyIKKyAgICBmaQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkdHN0X21ldGhvZCIgPiY1CiskYXNfZWNobyAiJHRzdF9tZXRob2QiID4mNjsgfQorICAgIGlmIHRlc3QgIiR0c3RfbWV0aG9kIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYW5ub3QgZGV0ZXJtaW5lIG5vbi1ibG9ja2luZyBzb2NrZXQgbWV0aG9kLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYW5ub3QgZGV0ZXJtaW5lIG5vbi1ibG9ja2luZyBzb2NrZXQgbWV0aG9kLiIgPiYyO30KKyAgICBmaQorICBmaQorICBpZiB0ZXN0ICIkdHN0X21ldGhvZCIgPSAidW5rbm93biI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBVU0VfQkxPQ0tJTkdfU09DS0VUUyAxCitfQUNFT0YKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbm9uLWJsb2NraW5nIHNvY2tldHMgZGlzYWJsZWQuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vbi1ibG9ja2luZyBzb2NrZXRzIGRpc2FibGVkLiIgPiYyO30KKyAgZmkKKworCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGVybCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGVybDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfUEVSTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBFUkwgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUEVSTD0iJFBFUkwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19kdW1teT0iJFBBVEg6L3Vzci9sb2NhbC9iaW4vcGVybDovdXNyL2Jpbi86L3Vzci9sb2NhbC9iaW4gIgorZm9yIGFzX2RpciBpbiAkYXNfZHVtbXkKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEVSTD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1BFUkw9JGFjX2N2X3BhdGhfUEVSTAoraWYgdGVzdCAtbiAiJFBFUkwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEVSTCIgPiY1CiskYXNfZWNobyAiJFBFUkwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCisKK2ZvciBhY19wcm9nIGluIGducm9mZiBucm9mZgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX05ST0ZGK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTlJPRkYgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTlJPRkY9IiROUk9GRiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2FzX2R1bW15PSIkUEFUSDovdXNyL2Jpbi86L3Vzci9sb2NhbC9iaW4gIgorZm9yIGFzX2RpciBpbiAkYXNfZHVtbXkKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfTlJPRkY9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitOUk9GRj0kYWNfY3ZfcGF0aF9OUk9GRgoraWYgdGVzdCAtbiAiJE5ST0ZGIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE5ST0ZGIiA+JjUKKyRhc19lY2hvICIkTlJPRkYiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkTlJPRkYiICYmIGJyZWFrCitkb25lCisKKworCitpZiB0ZXN0IC1uICIkTlJPRkYiOyB0aGVuCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gdXNlICpucm9mZiB0byBnZXQgcGxhaW4gdGV4dCBmcm9tIG1hbiBwYWdlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gdXNlICpucm9mZiB0byBnZXQgcGxhaW4gdGV4dCBmcm9tIG1hbiBwYWdlcy4uLiAiID4mNjsgfQorICBNQU5PUFQ9Ii1tYW4iCisgIG1hbmNoZWNrPWBlY2hvIGZvbyB8ICROUk9GRiAkTUFOT1BUIDI+L2Rldi9udWxsYAorICBpZiB0ZXN0IC16ICIkbWFuY2hlY2siOyB0aGVuCisgICAgTUFOT1BUPSItbWFuZG9jIgorICAgbWFuY2hlY2s9YGVjaG8gZm9vIHwgJE5ST0ZGICRNQU5PUFQgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAteiAiJG1hbmNoZWNrIjsgdGhlbgorICAgICAgTUFOT1BUPSIiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZmFpbGVkIiA+JjUKKyRhc19lY2hvICJmYWlsZWQiID4mNjsgfQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBmb3VuZCBubyAqbnJvZmYgb3B0aW9uIHRvIGdldCBwbGFpbnRleHQgZnJvbSBtYW4gcGFnZXMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogZm91bmQgbm8gKm5yb2ZmIG9wdGlvbiB0byBnZXQgcGxhaW50ZXh0IGZyb20gbWFuIHBhZ2VzIiA+JjI7fQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOT1BUIiA+JjUKKyRhc19lY2hvICIkTUFOT1BUIiA+JjY7IH0KKyAgICBmaQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5PUFQiID4mNQorJGFzX2VjaG8gIiRNQU5PUFQiID4mNjsgfQorICBmaQorCitmaQorCitpZiB0ZXN0IC16ICIkTUFOT1BUIgordGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBkaXNhYmxpbmcgYnVpbHQtaW4gbWFudWFsIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGRpc2FibGluZyBidWlsdC1pbiBtYW51YWwiID4mMjt9CisgIFVTRV9NQU5VQUw9Im5vIjsKK2ZpCisKKworaWYgdGVzdCAiJFVTRV9NQU5VQUwiID0gIjEiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9NQU5VQUwgMSIgPj5jb25mZGVmcy5oCisKKyAgY3VybF9tYW51YWxfbXNnPSJlbmFibGVkIgorZmkKKworCisKK2lmIHRlc3QgeCIkVVNFX01BTlVBTCIgPSB4MTsgdGhlbgorICBVU0VfTUFOVUFMX1RSVUU9CisgIFVTRV9NQU5VQUxfRkFMU0U9JyMnCitlbHNlCisgIFVTRV9NQU5VQUxfVFJVRT0nIycKKyAgVVNFX01BTlVBTF9GQUxTRT0KK2ZpCisKKworCisKKworICAjCisgIGlmIHRlc3QgIiR3YW50X2FyZXMiID0gInllcyI7IHRoZW4KKyAgICAgICAgY2xlYW5fQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICBjbGVhbl9MREZMQUdTPSIkTERGTEFHUyIKKyAgICBjbGVhbl9MSUJTPSIkTElCUyIKKyAgICBlbWJlZGRlZF9hcmVzPSJ1bmtub3duIgorICAgIGNvbmZpZ3VyZV9ydW5wYXRoPWBwd2RgCisgICAgZW1iZWRkZWRfYXJlc19idWlsZGRpcj0iJGNvbmZpZ3VyZV9ydW5wYXRoL2FyZXMiCisgICAgaWYgdGVzdCAtbiAiJHdhbnRfYXJlc19wYXRoIjsgdGhlbgorICAgICAgICAgICAgYXJlc19DUFBGTEFHUz0iLUkkd2FudF9hcmVzX3BhdGgvaW5jbHVkZSIKKyAgICAgIGFyZXNfTERGTEFHUz0iLUwkd2FudF9hcmVzX3BhdGgvbGliIgorICAgICAgYXJlc19MSUJTPSItbGNhcmVzIgorICAgIGVsc2UKKyAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRzcmNkaXIvYXJlcyI7IHRoZW4KKyAgICAgICAgICAgICAgICBlbWJlZGRlZF9hcmVzPSJ5ZXMiCisgICAgICAgIHN1YmRpcnM9IiRzdWJkaXJzIGFyZXMiCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZXNfQ1BQRkxBR1M9IiIKKyAgICAgICAgYXJlc19MREZMQUdTPSItTCRlbWJlZGRlZF9hcmVzX2J1aWxkZGlyIgorICAgICAgICBhcmVzX0xJQlM9Ii1sY2FyZXMiCisgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJlc19DUFBGTEFHUz0iIgorICAgICAgICBhcmVzX0xERkxBR1M9IiIKKyAgICAgICAgYXJlc19MSUJTPSItbGNhcmVzIgorICAgICAgZmkKKyAgICBmaQorICAgICMKKyAgICBDUFBGTEFHUz0iJGFyZXNfQ1BQRkxBR1MgJGNsZWFuX0NQUEZMQUdTIgorICAgIExERkxBR1M9IiRhcmVzX0xERkxBR1MgJGNsZWFuX0xERkxBR1MiCisgICAgTElCUz0iJGFyZXNfTElCUyAkY2xlYW5fTElCUyIKKyAgICAjCisgICAgaWYgdGVzdCAiJGVtYmVkZGVkX2FyZXMiICE9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoYXQgYy1hcmVzIGlzIGdvb2QgYW5kIHJlY2VudCBlbm91Z2giID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhhdCBjLWFyZXMgaXMgZ29vZCBhbmQgcmVjZW50IGVub3VnaC4uLiAiID4mNjsgfQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyNpbmNsdWRlIDxhcmVzLmg+CisgICAgICAgICAgLyogc2V0IG9mIGR1bW15IGZ1bmN0aW9ucyBpbiBjYXNlIGMtYXJlcyB3YXMgYnVpbHQgd2l0aCBkZWJ1ZyAqLworICAgICAgICAgIHZvaWQgY3VybF9kb2ZyZWUoKSB7IH0KKyAgICAgICAgICB2b2lkIGN1cmxfc2Nsb3NlKCkgeyB9CisgICAgICAgICAgdm9pZCBjdXJsX2RvbWFsbG9jKCkgeyB9CisgICAgICAgICAgdm9pZCBjdXJsX2RvY2FsbG9jKCkgeyB9CisgICAgICAgICAgdm9pZCBjdXJsX3NvY2tldCgpIHsgfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKworICAgICAgICAgIGFyZXNfY2hhbm5lbCBjaGFubmVsOworICAgICAgICAgIGFyZXNfY2FuY2VsKGNoYW5uZWwpOyAvKiBhZGRlZCBpbiAxLjIuMCAqLworICAgICAgICAgIGFyZXNfcHJvY2Vzc19mZChjaGFubmVsLCAwLCAwKTsgLyogYWRkZWQgaW4gMS40LjAgKi8KKyAgICAgICAgICBhcmVzX2R1cCgmY2hhbm5lbCwgY2hhbm5lbCk7IC8qIGFkZGVkIGluIDEuNi4wICovCisKKyA7CisgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgYXNfZm5fZXJyb3IgImMtYXJlcyBsaWJyYXJ5IGRlZmVjdGl2ZSBvciB0b28gb2xkIiAiJExJTkVOTyIgNQorICAgICAgICAgICAgICAgIENQUEZMQUdTPSIkY2xlYW5fQ1BQRkxBR1MiCisgICAgICAgIExERkxBR1M9IiRjbGVhbl9MREZMQUdTIgorICAgICAgICBMSUJTPSIkY2xlYW5fTElCUyIKKyAgICAgICAgIyBwcmV2ZW50IHVzYWdlCisgICAgICAgIHdhbnRfYXJlcz0ibm8iCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAiJHdhbnRfYXJlcyIgPSAieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfQVJFUyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgVVNFX0FSRVM9MQorCisgICAgICBjdXJsX3Jlc19tc2c9ImMtYXJlcyIKKyAgICBmaQorICBmaQorCisKKworaWYgdGVzdCB4JGVtYmVkZGVkX2FyZXMgPSB4eWVzOyB0aGVuCisgIFVTRV9FTUJFRERFRF9BUkVTX1RSVUU9CisgIFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFPScjJworZWxzZQorICBVU0VfRU1CRURERURfQVJFU19UUlVFPScjJworICBVU0VfRU1CRURERURfQVJFU19GQUxTRT0KK2ZpCisKKworaWYgdGVzdCAieCRhY19jdl9uYXRpdmVfd2luZG93cyIgIT0gInh5ZXMiICYmCisgICB0ZXN0ICJ4JGVuYWJsZV9zaGFyZWQiID0gInh5ZXMiOyB0aGVuCisgIGJ1aWxkX2xpYmhvc3RuYW1lPXllcworZWxzZQorICBidWlsZF9saWJob3N0bmFtZT1ubworZmkKKworCitpZiB0ZXN0IHgkYnVpbGRfbGliaG9zdG5hbWUgPSB4eWVzOyB0aGVuCisgIEJVSUxEX0xJQkhPU1ROQU1FX1RSVUU9CisgIEJVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFPScjJworZWxzZQorICBCVUlMRF9MSUJIT1NUTkFNRV9UUlVFPScjJworICBCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRT0KK2ZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgdGhlIHRocmVhZGVkIHJlc29sdmVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSB0aHJlYWRlZCByZXNvbHZlci4uLiAiID4mNjsgfQorICBPUFRfVEhSRVM9ImRlZmF1bHQiCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10aHJlYWRlZF9yZXNvbHZlciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV90aHJlYWRlZF9yZXNvbHZlcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3RocmVhZGVkX3Jlc29sdmVyOyBPUFRfVEhSRVM9JGVuYWJsZXZhbAorZmkKKworICBjYXNlICIkT1BUX1RIUkVTIiBpbgorICAgIHllcykKKyAgICAgICAgICAgIHdhbnRfdGhyZXM9InllcyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgICAgICAgIHdhbnRfdGhyZXM9Im5vIgorICAgICAgOzsKKyAgZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdhbnRfdGhyZXMiID4mNQorJGFzX2VjaG8gIiR3YW50X3RocmVzIiA+JjY7IH0KKworCitpZiB0ZXN0ICJ4JHdhbnRfdGhyZXMiID0geHllcyAmJiB0ZXN0ICJ4JHdhbnRfYXJlcyIgPSB4eWVzOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJPcHRpb25zIC0tZW5hYmxlLXRocmVhZGVkLXJlc29sdmVyIGFuZCAtLWVuYWJsZS1hcmVzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICIkd2FudF90aHJlcyIgPSAieWVzIjsgdGhlbgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicHRocmVhZC5oIiAiYWNfY3ZfaGVhZGVyX3B0aHJlYWRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcHRocmVhZF9oIiA9IHgiInllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFRIUkVBRF9IIDEiID4+Y29uZmRlZnMuaAorCisgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgIENGTEFHUz0iJENGTEFHUyAtcHRocmVhZCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfY3JlYXRlIGluIC1scHRocmVhZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF9jcmVhdGUgaW4gLWxwdGhyZWFkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfY3JlYXRlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxwdGhyZWFkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwdGhyZWFkX2NyZWF0ZSAoKTsKK2ludCBtYWluICh2b2lkKQoreworcmV0dXJuIHB0aHJlYWRfY3JlYXRlICgpOworIDsKKyByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2NyZWF0ZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9jcmVhdGU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9jcmVhdGUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2NyZWF0ZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfY3JlYXRlIiA9IHgiInllczsgdGhlbiA6CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVzaW5nIFBPU0lYIHRocmVhZGVkIEROUyBsb29rdXAiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXNpbmcgUE9TSVggdGhyZWFkZWQgRE5TIGxvb2t1cCIgPiY2O30KKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1RIUkVBRFNfUE9TSVggMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICBVU0VfVEhSRUFEU19QT1NJWD0xCisgICAgICAgICAgY3VybF9yZXNfbXNnPSJ0aHJlYWRlZCIKKworZWxzZQorICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCitmaQorCisKK2ZpCisKKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSB2ZXJib3NlIHN0cmluZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgdmVyYm9zZSBzdHJpbmdzLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdmVyYm9zZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV92ZXJib3NlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdmVyYm9zZTsgIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgY3VybF92ZXJib3NlX21zZz0ibm8iCisgICAgICAgOzsKKyAgKikgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgIDs7CisgIGVzYWMKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIFNTUEkgc3VwcG9ydCAoV2luZG93cyBuYXRpdmUgYnVpbGRzIG9ubHkpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIFNTUEkgc3VwcG9ydCAoV2luZG93cyBuYXRpdmUgYnVpbGRzIG9ubHkpLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3NwaSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zc3BpK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3NwaTsgIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIHllcykKKyAgICAgICBpZiB0ZXN0ICIkYWNfY3ZfbmF0aXZlX3dpbmRvd3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9XSU5ET1dTX1NTUEkgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgIFVTRV9XSU5ET1dTX1NTUEk9MQorCisgICAgICAgICBjdXJsX3NzcGlfbXNnPSJlbmFibGVkIgorICAgICAgIGVsc2UKKyAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAtLWVuYWJsZS1zc3BpIElnbm9yZWQuIE9ubHkgc3VwcG9ydGVkIG9uIG5hdGl2ZSBXaW5kb3dzIGJ1aWxkcy4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogLS1lbmFibGUtc3NwaSBJZ25vcmVkLiBPbmx5IHN1cHBvcnRlZCBvbiBuYXRpdmUgV2luZG93cyBidWlsZHMuIiA+JjI7fQorICAgICAgIGZpCisgICAgICAgOzsKKyAgKikKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICA7OworICBlc2FjCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgY3J5cHRvZ3JhcGhpYyBhdXRoZW50aWNhdGlvbiBtZXRob2RzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGNyeXB0b2dyYXBoaWMgYXV0aGVudGljYXRpb24gbWV0aG9kcy4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNyeXB0by1hdXRoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2NyeXB0b19hdXRoK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfY3J5cHRvX2F1dGg7ICBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgOzsKKyAgKikgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgIDs7CisgIGVzYWMKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworCisKKyAgICBPUFRfTlRMTV9XQj0iZGVmYXVsdCIKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW50bG0td2Igd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbnRsbV93YitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX250bG1fd2I7IE9QVF9OVExNX1dCPSRlbmFibGV2YWwKK2ZpCisKKyAgd2FudF9udGxtX3diX2ZpbGU9Ii91c3IvYmluL250bG1fYXV0aCIKKyAgY2FzZSAiJE9QVF9OVExNX1dCIiBpbgorICAgIG5vKQorICAgICAgICAgICAgd2FudF9udGxtX3diPSJubyIKKyAgICAgIDs7CisgICAgZGVmYXVsdCkKKyAgICAgICAgICAgIHdhbnRfbnRsbV93Yj0ieWVzIgorICAgICAgOzsKKyAgICAqKQorICAgICAgICAgICAgd2FudF9udGxtX3diPSJ5ZXMiCisgICAgICBpZiB0ZXN0IC1uICIkZW5hYmxldmFsIiAmJiB0ZXN0ICIkZW5hYmxldmFsIiAhPSAieWVzIjsgdGhlbgorICAgICAgICB3YW50X250bG1fd2JfZmlsZT0iJGVuYWJsZXZhbCIKKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCisKKworCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIE5UTE0gZGVsZWdhdGlvbiB0byB3aW5iaW5kJ3MgaGVscGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIE5UTE0gZGVsZWdhdGlvbiB0byB3aW5iaW5kJ3MgaGVscGVyLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiRhY19jdl9uYXRpdmVfd2luZG93cyIgPSAieWVzIiB8fAorICAgIHRlc3QgIngkU1NMX0VOQUJMRUQiID0gIngiOyB0aGVuCisgICAgd2FudF9udGxtX3diX2ZpbGU9IiIKKyAgICB3YW50X250bG1fd2I9Im5vIgorICBmaQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdhbnRfbnRsbV93YiIgPiY1CiskYXNfZWNobyAiJHdhbnRfbnRsbV93YiIgPiY2OyB9CisgIGlmIHRlc3QgIiR3YW50X250bG1fd2IiID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTlRMTV9XQl9FTkFCTEVEIDEiID4+Y29uZmRlZnMuaAorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTlRMTV9XQl9GSUxFICIkd2FudF9udGxtX3diX2ZpbGUiCitfQUNFT0YKKworICAgIE5UTE1fV0JfRU5BQkxFRD0xCisgIGZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBUTFMtU1JQIGF1dGhlbnRpY2F0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIFRMUy1TUlAgYXV0aGVudGljYXRpb24uLi4gIiA+JjY7IH0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10bHMtc3JwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3Rsc19zcnArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV90bHNfc3JwOyAgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIENVUkxfRElTQUJMRV9UTFNfU1JQIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgd2FudF90bHNfc3JwPW5vCisgICAgICAgOzsKKyAgKikgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgIHdhbnRfdGxzX3NycD15ZXMKKyAgICAgICA7OworICBlc2FjCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgd2FudF90bHNfc3JwPXllcworCitmaQorCisKK2lmIHRlc3QgIiR3YW50X3Rsc19zcnAiID0gInllcyIgJiYgKCB0ZXN0ICJ4JEhBVkVfR05VVExTX1NSUCIgPSAieDEiIHx8IHRlc3QgIngkSEFWRV9TU0xFQVlfU1JQIiA9ICJ4MSIpIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBVU0VfVExTX1NSUCAxIiA+PmNvbmZkZWZzLmgKKworICAgVVNFX1RMU19TUlA9MQorICAgY3VybF90bHNfc3JwX21zZz0iZW5hYmxlZCIKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgY29va2llcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBjb29raWVzLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY29va2llcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9jb29raWVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfY29va2llczsgIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBDVVJMX0RJU0FCTEVfQ09PS0lFUyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgIDs7CisgICopICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICA7OworICBlc2FjCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBoaWRkZW4gc3ltYm9scyBpbiB0aGUgbGlicmFyeSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBoaWRkZW4gc3ltYm9scyBpbiB0aGUgbGlicmFyeS4uLiAiID4mNjsgfQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWhpZGRlbi1zeW1ib2xzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2hpZGRlbl9zeW1ib2xzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfaGlkZGVuX3N5bWJvbHM7ICBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICA7OworICAqKQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0Mgc3VwcG9ydHMgaXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0Mgc3VwcG9ydHMgaXQuLi4gIiA+JjY7IH0KKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAgICAgICAgIGlmICRDQyAtLWhlbHAgLS12ZXJib3NlIDI+JjEgfCBncmVwIGZ2aXNpYmlsaXR5PSA+IC9kZXYvbnVsbCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCAiJGNvbXBpbGVyX2lkIiA9ICJDTEFORyI7IHRoZW4KKyAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgQ1VSTF9ISURERU5fU1lNQk9MUyAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBDVVJMX0VYVEVSTl9TWU1CT0wgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKFwiZGVmYXVsdFwiKSkpIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLWZ2aXNpYmlsaXR5PWhpZGRlbiIKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICAgIGZpCisKKyAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBpZiAkQ0MgMj4mMSB8IGdyZXAgZmxhZ3MgPi9kZXYvbnVsbCAmJiAkQ0MgLWZsYWdzIHwgZ3JlcCB4bGRzY29wZT0gPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgQ1VSTF9ISURERU5fU1lNQk9MUyAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBDVVJMX0VYVEVSTl9TWU1CT0wgX19nbG9iYWwiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAteGxkc2NvcGU9aGlkZGVuIgorICAgICAgICAgZWxzZQorICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgIGZpCisgICAgICAgZmkKKyAgICAgICA7OworICBlc2FjCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuZm9yY2UgU09OQU1FIGJ1bXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmZvcmNlIFNPTkFNRSBidW1wLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc29uYW1lLWJ1bXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc29uYW1lX2J1bXArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zb25hbWVfYnVtcDsgIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIHllcykgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICAgc29uYW1lX2J1bXA9eWVzCisgICAgICAgICA7OworICAqKQorICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgICA7OworICBlc2FjCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkc29uYW1lX2J1bXAiID4mNQorJGFzX2VjaG8gIiRzb25hbWVfYnVtcCIgPiY2OyB9CisKK2ZpCisKKworCitpZiB0ZXN0IHgkc29uYW1lX2J1bXAgPSB4eWVzOyB0aGVuCisgIFNPTkFNRV9CVU1QX1RSVUU9CisgIFNPTkFNRV9CVU1QX0ZBTFNFPScjJworZWxzZQorICBTT05BTUVfQlVNUF9UUlVFPScjJworICBTT05BTUVfQlVNUF9GQUxTRT0KK2ZpCisKKworCitpZiB0ZXN0ICEgLXogIiR3aW5zb2NrX0xJQiI7IHRoZW4KKworCisgIExJQlM9IiRMSUJTICR3aW5zb2NrX0xJQiIKKyAgVEVTVF9TRVJWRVJfTElCUz0iJFRFU1RfU0VSVkVSX0xJQlMgJHdpbnNvY2tfTElCIgorCitmaQorCitMSUJDVVJMX0xJQlM9JExJQlMKKworCisKKworCitMSUJTPSRBTExfTElCUworCisKK2lmIHRlc3QgeCRjcm9zc19jb21waWxpbmcgPSB4eWVzOyB0aGVuCisgIENST1NTQ09NUElMSU5HX1RSVUU9CisgIENST1NTQ09NUElMSU5HX0ZBTFNFPScjJworZWxzZQorICBDUk9TU0NPTVBJTElOR19UUlVFPScjJworICBDUk9TU0NPTVBJTElOR19GQUxTRT0KK2ZpCisKKworRU5BQkxFX1NIQVJFRD0iJGVuYWJsZV9zaGFyZWQiCisKKworCitpZiB0ZXN0ICJ4JFVTRV9TU0xFQVkiID0gIngxIjsgdGhlbgorICBTVVBQT1JUX0ZFQVRVUkVTPSIkU1VQUE9SVF9GRUFUVVJFUyBTU0wiCitlbGlmIHRlc3QgLW4gIiRTU0xfRU5BQkxFRCI7IHRoZW4KKyAgU1VQUE9SVF9GRUFUVVJFUz0iJFNVUFBPUlRfRkVBVFVSRVMgU1NMIgorZmkKK2lmIHRlc3QgIkBLUkI0X0VOQUJMRURAIiA9ICJ4MSI7IHRoZW4KKyAgU1VQUE9SVF9GRUFUVVJFUz0iJFNVUFBPUlRfRkVBVFVSRVMgS1JCNCIKK2ZpCitpZiB0ZXN0ICJ4JElQVjZfRU5BQkxFRCIgPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfRkVBVFVSRVM9IiRTVVBQT1JUX0ZFQVRVUkVTIElQdjYiCitmaQoraWYgdGVzdCAieCRIQVZFX0xJQloiID0gIngxIjsgdGhlbgorICBTVVBQT1JUX0ZFQVRVUkVTPSIkU1VQUE9SVF9GRUFUVVJFUyBsaWJ6IgorZmkKK2lmIHRlc3QgIngkVVNFX0FSRVMiID0gIngxIiAtbyAieCRVU0VfVEhSRUFEU19QT1NJWCIgPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfRkVBVFVSRVM9IiRTVVBQT1JUX0ZFQVRVUkVTIEFzeW5jaEROUyIKK2ZpCitpZiB0ZXN0ICJ4JElETl9FTkFCTEVEIiA9ICJ4MSI7IHRoZW4KKyAgU1VQUE9SVF9GRUFUVVJFUz0iJFNVUFBPUlRfRkVBVFVSRVMgSUROIgorZmkKK2lmIHRlc3QgIngkVVNFX1dJTkRPV1NfU1NQSSIgPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfRkVBVFVSRVM9IiRTVVBQT1JUX0ZFQVRVUkVTIFNTUEkiCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfSFRUUCIgIT0gIngxIjsgdGhlbgorICBpZiB0ZXN0ICJ4JFVTRV9TU0xFQVkiID0gIngxIiAtbyAieCRVU0VfV0lORE9XU19TU1BJIiA9ICJ4MSIgXAorICAgICAgLW8gIngkR05VVExTX0VOQUJMRUQiID0gIngxIiAtbyAieCROU1NfRU5BQkxFRCIgPSAieDEiOyB0aGVuCisgICAgU1VQUE9SVF9GRUFUVVJFUz0iJFNVUFBPUlRfRkVBVFVSRVMgTlRMTSIKKyAgICBpZiB0ZXN0ICJ4JE5UTE1fV0JfRU5BQkxFRCIgPSAieDEiOyB0aGVuCisgICAgICBTVVBQT1JUX0ZFQVRVUkVTPSIkU1VQUE9SVF9GRUFUVVJFUyBOVExNX1dCIgorICAgIGZpCisgIGZpCitmaQoraWYgdGVzdCAieCRVU0VfVExTX1NSUCIgPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfRkVBVFVSRVM9IiRTVVBQT1JUX0ZFQVRVUkVTIFRMUy1TUlAiCitmaQorCisKKworaWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfSFRUUCIgIT0gIngxIjsgdGhlbgorICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIEhUVFAiCisgIGlmIHRlc3QgIngkU1NMX0VOQUJMRUQiID0gIngxIjsgdGhlbgorICAgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgSFRUUFMiCisgIGZpCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfRlRQIiAhPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgRlRQIgorICBpZiB0ZXN0ICJ4JFNTTF9FTkFCTEVEIiA9ICJ4MSI7IHRoZW4KKyAgICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIEZUUFMiCisgIGZpCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfRklMRSIgIT0gIngxIjsgdGhlbgorICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIEZJTEUiCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfVEVMTkVUIiAhPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgVEVMTkVUIgorZmkKK2lmIHRlc3QgIngkQ1VSTF9ESVNBQkxFX0xEQVAiICE9ICJ4MSI7IHRoZW4KKyAgU1VQUE9SVF9QUk9UT0NPTFM9IiRTVVBQT1JUX1BST1RPQ09MUyBMREFQIgorICBpZiB0ZXN0ICJ4JENVUkxfRElTQUJMRV9MREFQUyIgIT0gIngxIjsgdGhlbgorICAgIGlmICh0ZXN0ICJ4JFVTRV9PUEVOTERBUCIgPSAieDEiICYmIHRlc3QgIngkU1NMX0VOQUJMRUQiID0gIngxIikgfHwKKyAgICAgICh0ZXN0ICJ4JFVTRV9PUEVOTERBUCIgIT0gIngxIiAgJiYgdGVzdCAieCRIQVZFX0xEQVBfU1NMIiA9ICJ4MSIpOyB0aGVuCisgICAgICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIExEQVBTIgorICAgIGZpCisgIGZpCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfRElDVCIgIT0gIngxIjsgdGhlbgorICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIERJQ1QiCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfVEZUUCIgIT0gIngxIjsgdGhlbgorICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIFRGVFAiCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfR09QSEVSIiAhPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgR09QSEVSIgorZmkKK2lmIHRlc3QgIngkQ1VSTF9ESVNBQkxFX1BPUDMiICE9ICJ4MSI7IHRoZW4KKyAgU1VQUE9SVF9QUk9UT0NPTFM9IiRTVVBQT1JUX1BST1RPQ09MUyBQT1AzIgorICBpZiB0ZXN0ICJ4JFNTTF9FTkFCTEVEIiA9ICJ4MSI7IHRoZW4KKyAgICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIFBPUDNTIgorICBmaQorZmkKK2lmIHRlc3QgIngkQ1VSTF9ESVNBQkxFX0lNQVAiICE9ICJ4MSI7IHRoZW4KKyAgU1VQUE9SVF9QUk9UT0NPTFM9IiRTVVBQT1JUX1BST1RPQ09MUyBJTUFQIgorICBpZiB0ZXN0ICJ4JFNTTF9FTkFCTEVEIiA9ICJ4MSI7IHRoZW4KKyAgICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIElNQVBTIgorICBmaQorZmkKK2lmIHRlc3QgIngkQ1VSTF9ESVNBQkxFX1NNVFAiICE9ICJ4MSI7IHRoZW4KKyAgU1VQUE9SVF9QUk9UT0NPTFM9IiRTVVBQT1JUX1BST1RPQ09MUyBTTVRQIgorICBpZiB0ZXN0ICJ4JFNTTF9FTkFCTEVEIiA9ICJ4MSI7IHRoZW4KKyAgICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIFNNVFBTIgorICBmaQorZmkKK2lmIHRlc3QgIngkVVNFX0xJQlNTSDIiID0gIngxIjsgdGhlbgorICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIFNDUCIKKyAgU1VQUE9SVF9QUk9UT0NPTFM9IiRTVVBQT1JUX1BST1RPQ09MUyBTRlRQIgorZmkKK2lmIHRlc3QgIngkQ1VSTF9ESVNBQkxFX1JUU1AiICE9ICJ4MSI7IHRoZW4KKyAgU1VQUE9SVF9QUk9UT0NPTFM9IiRTVVBQT1JUX1BST1RPQ09MUyBSVFNQIgorZmkKK2lmIHRlc3QgIngkVVNFX0xJQlJUTVAiID0gIngxIjsgdGhlbgorICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIFJUTVAiCitmaQorCitTVVBQT1JUX1BST1RPQ09MUz1gZWNobyAkU1VQUE9SVF9QUk9UT0NPTFMgfCB0ciAnICcgJ1wwMTInIHwgc29ydCB8IHRyICdcMDEyJyAnICdgCisKKworCisKK3NxdWVlemUgQ0ZMQUdTCitzcXVlZXplIENQUEZMQUdTCitzcXVlZXplIERFRlMKK3NxdWVlemUgTERGTEFHUworc3F1ZWV6ZSBMSUJTCisKK3NxdWVlemUgQ1VSTF9MSUJTCitzcXVlZXplIExJQkNVUkxfTElCUworc3F1ZWV6ZSBURVNUX1NFUlZFUl9MSUJTCitzcXVlZXplIENVUkxfTkVUV09SS19MSUJTCisKK3NxdWVlemUgU1VQUE9SVF9GRUFUVVJFUworc3F1ZWV6ZSBTVVBQT1JUX1BST1RPQ09MUworCitpZiB0ZXN0ICJ4JHdhbnRfY3VybGRlYnVnX2Fzc3VtZWQiID0gInh5ZXMiICYmCisgIHRlc3QgIngkd2FudF9jdXJsZGVidWciID0gInh5ZXMiICYmIHRlc3QgIngkVVNFX0FSRVMiID0gIngxIjsgdGhlbgorICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZW5hYmxlLWN1cmxkZWJ1ZyIKK2ZpCisKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZSBkb2NzL01ha2VmaWxlIGRvY3MvZXhhbXBsZXMvTWFrZWZpbGUgZG9jcy9saWJjdXJsL01ha2VmaWxlIGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9jdXJsL01ha2VmaWxlIHNyYy9NYWtlZmlsZSBsaWIvTWFrZWZpbGUgbGliL2xpYmN1cmwudmVycyB0ZXN0cy9NYWtlZmlsZSB0ZXN0cy9kYXRhL01ha2VmaWxlIHRlc3RzL3NlcnZlci9NYWtlZmlsZSB0ZXN0cy9saWJ0ZXN0L01ha2VmaWxlIHRlc3RzL3VuaXQvTWFrZWZpbGUgcGFja2FnZXMvTWFrZWZpbGUgcGFja2FnZXMvV2luMzIvTWFrZWZpbGUgcGFja2FnZXMvV2luMzIvY3lnd2luL01ha2VmaWxlIHBhY2thZ2VzL0xpbnV4L01ha2VmaWxlIHBhY2thZ2VzL0xpbnV4L1JQTS9NYWtlZmlsZSBwYWNrYWdlcy9MaW51eC9SUE0vY3VybC5zcGVjIHBhY2thZ2VzL0xpbnV4L1JQTS9jdXJsLXNzbC5zcGVjIHBhY2thZ2VzL1NvbGFyaXMvTWFrZWZpbGUgcGFja2FnZXMvRVBNL2N1cmwubGlzdCBwYWNrYWdlcy9FUE0vTWFrZWZpbGUgcGFja2FnZXMvdm1zL01ha2VmaWxlIHBhY2thZ2VzL0FJWC9NYWtlZmlsZSBwYWNrYWdlcy9BSVgvUlBNL01ha2VmaWxlIHBhY2thZ2VzL0FJWC9SUE0vY3VybC5zcGVjIGN1cmwtY29uZmlnIGxpYmN1cmwucGMiCisKK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCitfQUNFT0YKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CisgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKwordGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCit0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCisKK0RFRlM9LURIQVZFX0NPTkZJR19ICisKK2FjX2xpYm9ianM9CithY19sdGxpYm9ianM9Citmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgorICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKyAgYWNfaT1gJGFzX2VjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKyAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCisgIGFzX2ZuX2FwcGVuZCBhY19saWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisgIGFzX2ZuX2FwcGVuZCBhY19sdGxpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJworZG9uZQorTElCT0JKUz0kYWNfbGlib2JqcworCitMVExJQk9CSlM9JGFjX2x0bGlib2JqcworCisKK2lmIHRlc3QgLXogIiR7TUFJTlRBSU5FUl9NT0RFX1RSVUV9IiAmJiB0ZXN0IC16ICIke01BSU5UQUlORVJfTU9ERV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIk1BSU5UQUlORVJfTU9ERVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7QU1ERVBfVFJVRX0iICYmIHRlc3QgLXogIiR7QU1ERVBfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJBTURFUFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7TUlNUFVSRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtNSU1QVVJFX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiTUlNUFVSRVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7U1RBVElDTElCX1RSVUV9IiAmJiB0ZXN0IC16ICIke1NUQVRJQ0xJQl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlNUQVRJQ0xJQlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7U1RBVElDTElCX1RSVUV9IiAmJiB0ZXN0IC16ICIke1NUQVRJQ0xJQl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlNUQVRJQ0xJQlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7Tk9fVU5ERUZJTkVEX1RSVUV9IiAmJiB0ZXN0IC16ICIke05PX1VOREVGSU5FRF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIk5PX1VOREVGSU5FRFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7Q1VSTERFQlVHX1RSVUV9IiAmJiB0ZXN0IC16ICIke0NVUkxERUJVR19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIkNVUkxERUJVR1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7QlVJTERfVU5JVFRFU1RTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0JVSUxEX1VOSVRURVNUU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIkJVSUxEX1VOSVRURVNUU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9MSUJaX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfTElCWl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIkhBVkVfTElCWlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VkVSU0lPTkVEX1NZTUJPTFNfVFJVRX0iICYmIHRlc3QgLXogIiR7VkVSU0lPTkVEX1NZTUJPTFNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJWRVJTSU9ORURfU1lNQk9MU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VVNFX01BTlVBTF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfTUFOVUFMX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiVVNFX01BTlVBTFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VVNFX0VNQkVEREVEX0FSRVNfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0VNQkVEREVEX0FSRVNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJVU0VfRU1CRURERURfQVJFU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7QlVJTERfTElCSE9TVE5BTUVfVFJVRX0iICYmIHRlc3QgLXogIiR7QlVJTERfTElCSE9TVE5BTUVfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJCVUlMRF9MSUJIT1NUTkFNRVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7U09OQU1FX0JVTVBfVFJVRX0iICYmIHRlc3QgLXogIiR7U09OQU1FX0JVTVBfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJTT05BTUVfQlVNUFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7Q1JPU1NDT01QSUxJTkdfVFJVRX0iICYmIHRlc3QgLXogIiR7Q1JPU1NDT01QSUxJTkdfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJDUk9TU0NPTVBJTElOR1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKKworOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorYWNfd3JpdGVfZmFpbD0wCithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9Cithc193cml0ZV9mYWlsPTAKK2NhdCA+JENPTkZJR19TVEFUVVMgPDxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorIyBDb21waWxlciBvdXRwdXQgcHJvZHVjZWQgYnkgY29uZmlndXJlLCB1c2VmdWwgZm9yIGRlYnVnZ2luZworIyBjb25maWd1cmUsIGlzIGluIGNvbmZpZy5sb2cgaWYgaXQgZXhpc3RzLgorCitkZWJ1Zz1mYWxzZQorYWNfY3NfcmVjaGVjaz1mYWxzZQorYWNfY3Nfc2lsZW50PWZhbHNlCisKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitleHBvcnQgU0hFTEwKK19BU0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCitjYXNlICQwIGluICMoKAorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQorZmkKKworIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgorZG9uZQorUFMxPSckICcKK1BTMj0nPiAnCitQUzQ9JysgJworCisjIE5MUyBudWlzYW5jZXMuCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCisKKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisKKyMgYXNfZm5fZXJyb3IgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUKKyMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsIHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQorIyBzY3JpcHQgd2l0aCBzdGF0dXMgJD8sIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KK2FzX2ZuX2Vycm9yICgpCit7CisgIGFzX3N0YXR1cz0kPzsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCisgIGlmIHRlc3QgIiQzIjsgdGhlbgorICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDIifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDEiID4mJDMKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQxIiA+JjIKKyAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzCit9ICMgYXNfZm5fZXJyb3IKKworCisjIGFzX2ZuX3NldF9zdGF0dXMgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCAkPyB0byBTVEFUVVMsIHdpdGhvdXQgZm9ya2luZy4KK2FzX2ZuX3NldF9zdGF0dXMgKCkKK3sKKyAgcmV0dXJuICQxCit9ICMgYXNfZm5fc2V0X3N0YXR1cworCisjIGFzX2ZuX2V4aXQgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KK2FzX2ZuX2V4aXQgKCkKK3sKKyAgc2V0ICtlCisgIGFzX2ZuX3NldF9zdGF0dXMgJDEKKyAgZXhpdCAkMQorfSAjIGFzX2ZuX2V4aXQKKworIyBhc19mbl91bnNldCBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmx5IHVuc2V0IFZBUi4KK2FzX2ZuX3Vuc2V0ICgpCit7CisgIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KK30KK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCisKK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAorJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYLyIkMCIgfAorICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKworIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAorLW4qKQorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OworZXNhYworCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCitmaQoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgICBhc19sbl9zPSdjcCAtcCcKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKKyAgICBhc19sbl9zPSdjcCAtcCcKKyAgZmkKK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXAnCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorCisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAoraWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdGVzdF94PSd0ZXN0IC14JworZWxzZQorICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBhc19sc19MX29wdGlvbj1MCisgIGVsc2UKKyAgICBhc19sc19MX29wdGlvbj0KKyAgZmkKKyAgYXNfdGVzdF94PScKKyAgICBldmFsIHNoIC1jICdcJycKKyAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgorCXRlc3QgLWQgIiQxLy4iOworICAgICAgZWxzZQorCWNhc2UgJDEgaW4gIygKKwktKilzZXQgIi4vJDEiOzsKKwllc2FjOworCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluICMoKAorCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKyAgICAnXCcnIHNoCisgICcKK2ZpCithc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKworZXhlYyA2PiYxCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFpbiBib2R5IG9mICRDT05GSUdfU1RBVFVTIHNjcmlwdC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNFT0YKK3Rlc3QgJGFzX3dyaXRlX2ZhaWwgPSAwICYmIGNobW9kICt4ICRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFNhdmUgdGhlIGxvZyBtZXNzYWdlLCB0byBrZWVwICQwIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KKyMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgorIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KK2FjX2xvZz0iCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IGN1cmwgJGFzX21lIC0sIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY0LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUworICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKKyAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUworICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCisgICQgJDAgJEAKKworb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisiCisKK19BQ0VPRgorCitjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKK2VzYWMKKworY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Citlc2FjCisKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCitjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfdXNhZ2U9IlwKK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucworZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCithbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCisKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgorCisgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKworQ29uZmlndXJhdGlvbiBmaWxlczoKKyRjb25maWdfZmlsZXMKKworQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK0NvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiskY29uZmlnX2NvbW1hbmRzCisKK1JlcG9ydCBidWdzIHRvIDxhIHN1aXRhYmxlIGN1cmwgbWFpbGluZyBsaXN0OiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvPi4iCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19jc192ZXJzaW9uPSJcXAorY3VybCBjb25maWcuc3RhdHVzIC0KK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NCwKKyAgd2l0aCBvcHRpb25zIFxcImAkYXNfZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgXFwiCisKK0NvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKworYWNfcHdkPSckYWNfcHdkJworc3JjZGlyPSckc3JjZGlyJworSU5TVEFMTD0nJElOU1RBTEwnCitBV0s9JyRBV0snCit0ZXN0IC1uICJcJEFXSyIgfHwgQVdLPWF3aworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgVGhlIGRlZmF1bHQgbGlzdHMgYXBwbHkgaWYgdGhlIHVzZXIgZG9lcyBub3Qgc3BlY2lmeSBhbnkgZmlsZS4KK2FjX25lZWRfZGVmYXVsdHM9Ogord2hpbGUgdGVzdCAkIyAhPSAwCitkbworICBjYXNlICQxIGluCisgIC0tKj0qKQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAqKQorICAgIGFjX29wdGlvbj0kMQorICAgIGFjX29wdGFyZz0kMgorICAgIGFjX3NoaWZ0PXNoaWZ0CisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgorICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKyAgICBhY19jc19yZWNoZWNrPTogOzsKKyAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQorICAgICRhc19lY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgOzsKKyAgLS1kZWJ1ZyB8IC0tZGVidSB8IC0tZGViIHwgLS1kZSB8IC0tZCB8IC1kICkKKyAgICBkZWJ1Zz06IDs7CisgIC0tZmlsZSB8IC0tZmlsIHwgLS1maSB8IC0tZiApCisgICAgJGFjX3NoaWZ0CisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19GSUxFUyAiICckYWNfb3B0YXJnJyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQorICAgICRhY19zaGlmdAorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfSEVBREVSUyAiICckYWNfb3B0YXJnJyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZSB8IC0taCkKKyAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgorICAgIGFzX2ZuX2Vycm9yICJhbWJpZ3VvdXMgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iOzsKKyAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCisgICAgJGFzX2VjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwgfCAtLXNpIHwgLS1zKQorICAgIGFjX2NzX3NpbGVudD06IDs7CisKKyAgIyBUaGlzIGlzIGFuIGVycm9yLgorICAtKikgYXNfZm5fZXJyb3IgInVucmVjb2duaXplZCBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgOzsKKworICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlnX3RhcmdldHMgIiAkMSIKKyAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OworCisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9CisKK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKyAgZXhlYyA2Pi9kZXYvbnVsbAorICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2lmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgorICBzZXQgWCAnJFNIRUxMJyAnJDAnICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCisgIHNoaWZ0CisgIFwkYXNfZWNobyAicnVubmluZyBDT05GSUdfU0hFTEw9JFNIRUxMIFwkKiIgPiY2CisgIENPTkZJR19TSEVMTD0nJFNIRUxMJworICBleHBvcnQgQ09ORklHX1NIRUxMCisgIGV4ZWMgIlwkQCIKK2ZpCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorZXhlYyA1Pj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKKyMjIFJ1bm5pbmcgJGFzX21lLiAjIworX0FTQk9YCisgICRhc19lY2hvICIkYWNfbG9nIgorfSA+JjUKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMKKyMgSU5JVC1DT01NQU5EUworIworQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIgorCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKK2RvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSckZGVsYXlfdmFyaWFibGVfc3Vic3QnCitBUz0nYCRFQ0hPICIkQVMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21hY3JvX3ZlcnNpb249J2AkRUNITyAiJG1hY3JvX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbWFjcm9fcmV2aXNpb249J2AkRUNITyAiJG1hY3JvX3JldmlzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWQ9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3N0YXRpYz0nYCRFQ0hPICIkZW5hYmxlX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwaWNfbW9kZT0nYCRFQ0hPICIkcGljX21vZGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Zhc3RfaW5zdGFsbD0nYCRFQ0hPICIkZW5hYmxlX2Zhc3RfaW5zdGFsbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTSEVMTD0nYCRFQ0hPICIkU0hFTEwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRUNITz0nYCRFQ0hPICIkRUNITyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitQQVRIX1NFUEFSQVRPUj0nYCRFQ0hPICIkUEFUSF9TRVBBUkFUT1IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdF9hbGlhcz0nYCRFQ0hPICIkaG9zdF9hbGlhcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0PSdgJEVDSE8gIiRob3N0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3Rfb3M9J2AkRUNITyAiJGhvc3Rfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfYWxpYXM9J2AkRUNITyAiJGJ1aWxkX2FsaWFzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkPSdgJEVDSE8gIiRidWlsZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZF9vcz0nYCRFQ0hPICIkYnVpbGRfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0VEPSdgJEVDSE8gIiRTRUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworWHNlZD0nYCRFQ0hPICIkWHNlZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHUkVQPSdgJEVDSE8gIiRHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0VHUkVQPSdgJEVDSE8gIiRFR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitGR1JFUD0nYCRFQ0hPICIkRkdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTEQ9J2AkRUNITyAiJExEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK05NPSdgJEVDSE8gIiROTSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMTl9TPSdgJEVDSE8gIiRMTl9TIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21heF9jbWRfbGVuPSdgJEVDSE8gIiRtYXhfY21kX2xlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithY19vYmpleHQ9J2AkRUNITyAiJGFjX29iamV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj0nYCRFQ0hPICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0NDPSdgJEVDSE8gIiRDQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitDRkxBR1M9J2AkRUNITyAiJENGTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcj0nYCRFQ0hPICIkY29tcGlsZXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR0NDPSdgJEVDSE8gIiRHQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0RTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09UT09MPSdgJEVDSE8gIiRPVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTDY0PSdgJEVDSE8gIiRPVE9PTDY0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYmV4dD0nYCRFQ0hPICIkbGliZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NocmV4dF9jbWRzPSdgJEVDSE8gIiRzaHJleHRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHRyYWN0X2V4cHN5bXNfY21kcz0nYCRFQ0hPICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX25lZWRfbGM9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSdgJEVDSE8gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2AkRUNITyAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX25lZWRzX29iamVjdD0nYCRFQ0hPICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kcz0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9leHBzeW1fY21kcz0nYCRFQ0hPICIkbW9kdWxlX2V4cHN5bV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dpdGhfZ251X2xkPSdgJEVDSE8gIiR3aXRoX2dudV9sZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbGxvd191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbm9fdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiJG5vX3VuZGVmaW5lZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9kaXJlY3Q9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9taW51c19MPSdgJEVDSE8gIiRoYXJkY29kZV9taW51c19MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2Fsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfdmVyc2lvbj0nYCRFQ0hPICIkbmVlZF92ZXJzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ZlcnNpb25fdHlwZT0nYCRFQ0hPICIkdmVyc2lvbl90eXBlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3J1bnBhdGhfdmFyPSdgJEVDSE8gIiRydW5wYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRzaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0nYCRFQ0hPICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYm5hbWVfc3BlYz0nYCRFQ0hPICIkbGlibmFtZV9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYnJhcnlfbmFtZXNfc3BlYz0nYCRFQ0hPICIkbGlicmFyeV9uYW1lc19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NvbmFtZV9zcGVjPSdgJEVDSE8gIiRzb25hbWVfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbnN0YWxsX292ZXJyaWRlX21vZGU9J2AkRUNITyAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRwb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICIkcG9zdHVuaW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbmlzaF9jbWRzPSdgJEVDSE8gIiRmaW5pc2hfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaW5pc2hfZXZhbD0nYCRFQ0hPICIkZmluaXNoX2V2YWwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfaW50b19saWJzPSdgJEVDSE8gIiRoYXJkY29kZV9pbnRvX2xpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSdgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2FjdGlvbj0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW49J2AkRUNITyAiJGVuYWJsZV9kbG9wZW4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbl9zZWxmPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuX3NlbGYiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0nYCRFQ0hPICIkZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfc3RyaXBsaWI9J2AkRUNITyAiJG9sZF9zdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzdHJpcGxpYj0nYCRFQ0hPICIkc3RyaXBsaWIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworCitMVENDPSckTFRDQycKK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCitjb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorXCQxCitfTFRFQ0hPX0VPRicKK30KKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gQVMgXAorRExMVE9PTCBcCitPQkpEVU1QIFwKK1NIRUxMIFwKK0VDSE8gXAorUEFUSF9TRVBBUkFUT1IgXAorU0VEIFwKK0dSRVAgXAorRUdSRVAgXAorRkdSRVAgXAorTEQgXAorTk0gXAorTE5fUyBcCitsdF9TUDJOTCBcCitsdF9OTDJTUCBcCityZWxvYWRfZmxhZyBcCitkZXBsaWJzX2NoZWNrX21ldGhvZCBcCitmaWxlX21hZ2ljX2NtZCBcCitmaWxlX21hZ2ljX2dsb2IgXAord2FudF9ub2Nhc2VnbG9iIFwKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKK0FSIFwKK0FSX0ZMQUdTIFwKK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCitTVFJJUCBcCitSQU5MSUIgXAorQ0MgXAorQ0ZMQUdTIFwKK2NvbXBpbGVyIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCitubV9maWxlX2xpc3Rfc3BlYyBcCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCitsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCitsdF9wcm9nX2NvbXBpbGVyX3dsIFwKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKK25lZWRfbG9ja3MgXAorTUFOSUZFU1RfVE9PTCBcCitEU1lNVVRJTCBcCitOTUVESVQgXAorTElQTyBcCitPVE9PTCBcCitPVE9PTDY0IFwKK3NocmV4dF9jbWRzIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBcCitjb21waWxlcl9uZWVkc19vYmplY3QgXAord2l0aF9nbnVfbGQgXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWcgXAorbm9fdW5kZWZpbmVkX2ZsYWcgXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKK2V4Y2x1ZGVfZXhwc3ltcyBcCitpbmNsdWRlX2V4cHN5bXMgXAorZmlsZV9saXN0X3NwZWMgXAordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgXAorbGlibmFtZV9zcGVjIFwKK2xpYnJhcnlfbmFtZXNfc3BlYyBcCitzb25hbWVfc3BlYyBcCitpbnN0YWxsX292ZXJyaWRlX21vZGUgXAorZmluaXNoX2V2YWwgXAorb2xkX3N0cmlwbGliIFwKK3N0cmlwbGliOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiByZWxvYWRfY21kcyBcCitvbGRfcG9zdGluc3RhbGxfY21kcyBcCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKK29sZF9hcmNoaXZlX2NtZHMgXAorZXh0cmFjdF9leHBzeW1zX2NtZHMgXAorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyBcCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyBcCithcmNoaXZlX2NtZHMgXAorYXJjaGl2ZV9leHBzeW1fY21kcyBcCittb2R1bGVfY21kcyBcCittb2R1bGVfZXhwc3ltX2NtZHMgXAorZXhwb3J0X3N5bWJvbHNfY21kcyBcCitwcmVsaW5rX2NtZHMgXAorcG9zdGxpbmtfY21kcyBcCitwb3N0aW5zdGFsbF9jbWRzIFwKK3Bvc3R1bmluc3RhbGxfY21kcyBcCitmaW5pc2hfY21kcyBcCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgXAorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCithY19hdXhfZGlyPSckYWNfYXV4X2RpcicKK3hzaV9zaGVsbD0nJHhzaV9zaGVsbCcKK2x0X3NoZWxsX2FwcGVuZD0nJGx0X3NoZWxsX2FwcGVuZCcKKworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKKworICAgIFBBQ0tBR0U9JyRQQUNLQUdFJworICAgIFZFUlNJT049JyRWRVJTSU9OJworICAgIFRJTUVTVEFNUD0nJFRJTUVTVEFNUCcKKyAgICBSTT0nJFJNJworICAgIG9maWxlPSckb2ZpbGUnCisKKworCisKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisKKyMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCitkbworICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCisgICAgImxpYi9jdXJsX2NvbmZpZy5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBsaWIvY3VybF9jb25maWcuaCIgOzsKKyAgICAic3JjL2N1cmxfY29uZmlnLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIHNyYy9jdXJsX2NvbmZpZy5oIiA7OworICAgICJpbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGluY2x1ZGUvY3VybC9jdXJsYnVpbGQuaCIgOzsKKyAgICAiZGVwZmlsZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVwZmlsZXMiIDs7CisgICAgImxpYnRvb2wiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgbGlidG9vbCIgOzsKKyAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisgICAgImRvY3MvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jcy9NYWtlZmlsZSIgOzsKKyAgICAiZG9jcy9leGFtcGxlcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2NzL2V4YW1wbGVzL01ha2VmaWxlIiA7OworICAgICJkb2NzL2xpYmN1cmwvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jcy9saWJjdXJsL01ha2VmaWxlIiA7OworICAgICJpbmNsdWRlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluY2x1ZGUvTWFrZWZpbGUiIDs7CisgICAgImluY2x1ZGUvY3VybC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbmNsdWRlL2N1cmwvTWFrZWZpbGUiIDs7CisgICAgInNyYy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzcmMvTWFrZWZpbGUiIDs7CisgICAgImxpYi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWIvTWFrZWZpbGUiIDs7CisgICAgImxpYi9saWJjdXJsLnZlcnMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGliL2xpYmN1cmwudmVycyIgOzsKKyAgICAidGVzdHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvTWFrZWZpbGUiIDs7CisgICAgInRlc3RzL2RhdGEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZGF0YS9NYWtlZmlsZSIgOzsKKyAgICAidGVzdHMvc2VydmVyL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL3NlcnZlci9NYWtlZmlsZSIgOzsKKyAgICAidGVzdHMvbGlidGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9saWJ0ZXN0L01ha2VmaWxlIiA7OworICAgICJ0ZXN0cy91bml0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL3VuaXQvTWFrZWZpbGUiIDs7CisgICAgInBhY2thZ2VzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBhY2thZ2VzL01ha2VmaWxlIiA7OworICAgICJwYWNrYWdlcy9XaW4zMi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwYWNrYWdlcy9XaW4zMi9NYWtlZmlsZSIgOzsKKyAgICAicGFja2FnZXMvV2luMzIvY3lnd2luL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBhY2thZ2VzL1dpbjMyL2N5Z3dpbi9NYWtlZmlsZSIgOzsKKyAgICAicGFja2FnZXMvTGludXgvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGFja2FnZXMvTGludXgvTWFrZWZpbGUiIDs7CisgICAgInBhY2thZ2VzL0xpbnV4L1JQTS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwYWNrYWdlcy9MaW51eC9SUE0vTWFrZWZpbGUiIDs7CisgICAgInBhY2thZ2VzL0xpbnV4L1JQTS9jdXJsLnNwZWMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGFja2FnZXMvTGludXgvUlBNL2N1cmwuc3BlYyIgOzsKKyAgICAicGFja2FnZXMvTGludXgvUlBNL2N1cmwtc3NsLnNwZWMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGFja2FnZXMvTGludXgvUlBNL2N1cmwtc3NsLnNwZWMiIDs7CisgICAgInBhY2thZ2VzL1NvbGFyaXMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGFja2FnZXMvU29sYXJpcy9NYWtlZmlsZSIgOzsKKyAgICAicGFja2FnZXMvRVBNL2N1cmwubGlzdCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwYWNrYWdlcy9FUE0vY3VybC5saXN0IiA7OworICAgICJwYWNrYWdlcy9FUE0vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGFja2FnZXMvRVBNL01ha2VmaWxlIiA7OworICAgICJwYWNrYWdlcy92bXMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGFja2FnZXMvdm1zL01ha2VmaWxlIiA7OworICAgICJwYWNrYWdlcy9BSVgvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGFja2FnZXMvQUlYL01ha2VmaWxlIiA7OworICAgICJwYWNrYWdlcy9BSVgvUlBNL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBhY2thZ2VzL0FJWC9SUE0vTWFrZWZpbGUiIDs7CisgICAgInBhY2thZ2VzL0FJWC9SUE0vY3VybC5zcGVjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBhY2thZ2VzL0FJWC9SUE0vY3VybC5zcGVjIiA7OworICAgICJjdXJsLWNvbmZpZyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBjdXJsLWNvbmZpZyIgOzsKKyAgICAibGliY3VybC5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJjdXJsLnBjIiA7OworCisgICopIGFzX2ZuX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OworICBlc2FjCitkb25lCisKKworIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAorIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCisjIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJlY2F1c2Ugb2YgYW4gZXh0cmVtZWx5CisjIGJpemFycmUgYnVnIG9uIFN1bk9TIDQuMS4zLgoraWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KKyAgdGVzdCAiJHtDT05GSUdfRklMRVMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0ZJTEVTPSRjb25maWdfZmlsZXMKKyAgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiA9IHNldCB8fCBDT05GSUdfSEVBREVSUz0kY29uZmlnX2hlYWRlcnMKKyAgdGVzdCAiJHtDT05GSUdfQ09NTUFORFMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0NPTU1BTkRTPSRjb25maWdfY29tbWFuZHMKK2ZpCisKKyMgSGF2ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIGNvbnZlbmllbmNlLiAgTWFrZSBpdCBpbiB0aGUgYnVpbGQgdHJlZQorIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAorIyBjcmVhdGluZyBhbmQgbW92aW5nIGZpbGVzIGZyb20gL3RtcCBjYW4gc29tZXRpbWVzIGNhdXNlIHByb2JsZW1zLgorIyBIb29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorIyBhZnRlciBpdHMgY3JlYXRpb24gYnV0IGJlZm9yZSBpdHMgbmFtZSBoYXMgYmVlbiBhc3NpZ25lZCB0byBgJHRtcCcuCiskZGVidWcgfHwKK3sKKyAgdG1wPQorICB0cmFwICdleGl0X3N0YXR1cz0kPworICB7IHRlc3QgLXogIiR0bXAiIHx8IHRlc3QgISAtZCAiJHRtcCIgfHwgcm0gLWZyICIkdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cworJyAwCisgIHRyYXAgJ2FzX2ZuX2V4aXQgMScgMSAyIDEzIDE1Cit9CisjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KKworeworICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIuL2NvbmZYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYKKyAgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIKK30gIHx8Cit7CisgIHRtcD0uL2NvbmYkJC0kUkFORE9NCisgICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQorfSB8fCBhc19mbl9lcnJvciAiY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgIiRMSU5FTk8iIDUKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgoraWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KKworCithY19jcj1gZWNobyBYIHwgdHIgWCAnXDAxNSdgCisjIE9uIGN5Z3dpbiwgYmFzaCBjYW4gZWF0IFxyIGluc2lkZSBgYCBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgaWduY3IuCisjIEJ1dCB3ZSBrbm93IG9mIG5vIG90aGVyIHNoZWxsIHdoZXJlIGFjX2NyIHdvdWxkIGJlIGVtcHR5IGF0IHRoaXMKKyMgcG9pbnQsIHNvIHdlIGNhbiB1c2UgYSBiYXNoaXNtIGFzIGEgZmFsbGJhY2suCitpZiB0ZXN0ICJ4JGFjX2NyIiA9IHg7IHRoZW4KKyAgZXZhbCBhY19jcj1cJFwnXFxyXCcKK2ZpCithY19jc19hd2tfY3I9YCRBV0sgJ0JFR0lOIHsgcHJpbnQgImFccmIiIH0nIDwvZGV2L251bGwgMj4vZGV2L251bGxgCitpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorICBhY19jc19hd2tfY3I9J1xyJworZWxzZQorICBhY19jc19hd2tfY3I9JGFjX2NyCitmaQorCitlY2hvICdCRUdJTiB7JyA+IiR0bXAvc3ViczEuYXdrIiAmJgorX0FDRU9GCisKKworeworICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgorICBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBzZWQgJ3MvLiovJiEkJiRhY19kZWxpbS8nICYmCisgIGVjaG8gIl9BQ0VPRiIKK30gPmNvbmYkJHN1YnMuc2ggfHwKKyAgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorYWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICckJ2AKK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKyAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKKyAgICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisKKyAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKKyAgaWYgdGVzdCAkYWNfZGVsaW1fbiA9ICRhY19kZWxpbV9udW07IHRoZW4KKyAgICBicmVhaworICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCitybSAtZiBjb25mJCRzdWJzLnNoCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorY2F0ID4+IlwkdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgorX0FDRU9GCitzZWQgLW4gJworaAorcy9eL1NbIi87IHMvIS4qLyJdPS8KK3AKK2cKK3MvXlteIV0qIS8vCis6cmVwbAordCByZXBsCitzLyciJGFjX2RlbGltIickLy8KK3QgZGVsaW0KKzpubAoraAorcy9cKC5cezE0OFx9XCkuKi9cMS8KK3QgbW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcbiJcXC8KK3AKK24KK2IgcmVwbAorOm1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgbmwKKzpkZWxpbQoraAorcy9cKC5cezE0OFx9XCkuKi9cMS8KK3QgbW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvCitwCitiCis6bW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBkZWxpbQorJyA8Y29uZiQkc3Vicy5hd2sgfCBzZWQgJworL15bXiIiXS97CisgIE4KKyAgcy9cbi8vCit9CisnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCitybSAtZiBjb25mJCRzdWJzLmF3aworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitfQUNBV0sKK2NhdCA+PiJcJHRtcC9zdWJzMS5hd2siIDw8X0FDQVdLICYmCisgIGZvciAoa2V5IGluIFMpIFNfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCisKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CisKKyAgcHJpbnQgbGluZQorfQorCitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgc2VkICJzLyRhY19jci8vIiA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHNlZCAicy8kYWNfY3JcJC8vOyBzLyRhY19jci8kYWNfY3NfYXdrX2NyL2ciCitlbHNlCisgIGNhdAorZmkgPCAiJHRtcC9zdWJzMS5hd2siID4gIiR0bXAvc3Vicy5hd2siIFwKKyAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorX0FDRU9GCisKKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAorIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9L3sKK3MvOipcJChzcmNkaXIpOiovOi8KK3MvOipcJHtzcmNkaXJ9OiovOi8KK3MvOipAc3JjZGlyQDoqLzovCitzL15cKFtePV0qPVsJIF0qXCk6Ki9cMS8KK3MvOiokLy8KK3MvXltePV0qPVsJIF0qJC8vCit9JworZmkKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgorCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0hFQURFUlMgc2VjdGlvbi4KKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfSEVBREVSUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgTWFrZWZpbGUnLgoraWYgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIjsgdGhlbgorY2F0ID4iJHRtcC9kZWZpbmVzLmF3ayIgPDxcX0FDQVdLIHx8CitCRUdJTiB7CitfQUNFT0YKKworIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGFuIGF3ayBzY3JpcHQgYGRlZmluZXMuYXdrJywgZW1iZWRkZWQgYXMKKyMgaGVyZS1kb2N1bWVudCBpbiBjb25maWcuc3RhdHVzLCB0aGF0IHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8KKyMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4KKworIyBDcmVhdGUgYSBkZWxpbWl0ZXIgc3RyaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gY29uZmRlZnMuaCwgdG8gZWFzZQorIyBoYW5kbGluZyBvZiBsb25nIGxpbmVzLgorYWNfZGVsaW09JyUhXyEjICcKK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSA6OyBkbworICBhY190PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKKyAgaWYgdGVzdCAteiAiJGFjX3QiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCisjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisKK2FjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCitzZWQgLW4gJworcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IHJzZXQKKzpyc2V0CitzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwordCBkZWYKK2QKKzpkZWYKK3MvXFwkLy8KK3QgYnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDMiL3AKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCitkCis6YnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKK3QgY29udAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKK3QgY29udAorZAorOmNvbnQKK24KK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCBjbGVhcgorOmNsZWFyCitzL1xcJC8vCit0IGJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKK2QKKzpic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCitiIGNvbnQKKycgPGNvbmZkZWZzLmggfCBzZWQgJworcy8nIiRhY19kZWxpbSInLyJcXFwKKyIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCit9CisvXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKKyAgbGluZSA9IFwkIDAKKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisgIGlmIChhcmdbMV0gPT0gIiMiKSB7CisgICAgZGVmdW5kZWYgPSBhcmdbMl0KKyAgICBtYWMxID0gYXJnWzNdCisgIH0gZWxzZSB7CisgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorICAgIG1hYzEgPSBhcmdbMl0KKyAgfQorICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCisgIG1hY3JvID0gbWFjMlsxXQorICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKKyAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisgICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQorICAgIG5leHQKKyAgfSBlbHNlIHsKKyAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCisgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7CisgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCisgICAgICBuZXh0CisgICAgfQorICB9Cit9Cit7IHByaW50IH0KK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFzX2ZuX2Vycm9yICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCisKKworZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgICAgOkMgJENPTkZJR19DT01NQU5EUyIKK3NoaWZ0Citmb3IgYWNfdGFnCitkbworICBjYXNlICRhY190YWcgaW4KKyAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7CisgIGVzYWMKKyAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KKyAgOltGSExdKjoqKTs7CisgIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OworICA6W0ZIXS0pIGFjX3RhZz0tOi07OworICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworICBlc2FjCisgIGFjX3NhdmVfSUZTPSRJRlMKKyAgSUZTPToKKyAgc2V0IHggJGFjX3RhZworICBJRlM9JGFjX3NhdmVfSUZTCisgIHNoaWZ0CisgIGFjX2ZpbGU9JDEKKyAgc2hpZnQKKworICBjYXNlICRhY19tb2RlIGluCisgIDpMKSBhY19zb3VyY2U9JDE7OworICA6W0ZIXSkKKyAgICBhY19maWxlX2lucHV0cz0KKyAgICBmb3IgYWNfZgorICAgIGRvCisgICAgICBjYXNlICRhY19mIGluCisgICAgICAtKSBhY19mPSIkdG1wL3N0ZGluIjs7CisgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorCSAjIChpZiB0aGUgcGF0aCBpcyBub3QgYWJzb2x1dGUpLiAgVGhlIGFic29sdXRlIHBhdGggY2Fubm90IGJlIERPUy1zdHlsZSwKKwkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisJICAgY2FzZSAkYWNfZiBpbgorCSAgIFtcXC8kXSopIGZhbHNlOzsKKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisJICAgZXNhYyB8fAorCSAgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRMSU5FTk8iIDU7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWAkYXNfZWNobyAiJGFjX2YiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgZXNhYworICAgICAgYXNfZm5fYXBwZW5kIGFjX2ZpbGVfaW5wdXRzICIgJyRhY19mJyIKKyAgICBkb25lCisKKyAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKwkgICRhc19lY2hvICIkKiIgfCBzZWQgJ3N8XlteOl0qL3x8O3N8OlteOl0qL3wsIHxnJworCWAnIGJ5IGNvbmZpZ3VyZS4nCisgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICRjb25maWd1cmVfaW5wdXQiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorICAgIGZpCisgICAgIyBOZXV0cmFsaXplIHNwZWNpYWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4KKyAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKKyAgICAqXCYqIHwgKlx8KiB8ICpcXCogKQorICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIgfAorICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAorICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworICAgIGVzYWMKKworICAgIGNhc2UgJGFjX3RhZyBpbgorICAgICo6LToqIHwgKjotKSBjYXQgPiIkdG1wL3N0ZGluIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworCisgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAorICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorCisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6RikKKyAgIworICAjIENPTkZJR19GSUxFCisgICMKKworICBjYXNlICRJTlNUQUxMIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKyAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRJTlNUQUxMIDs7CisgIGVzYWMKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorYWNfc2VkX2RhdGFyb290PScKKy9kYXRhcm9vdGRpci8geworICBwCisgIHEKK30KKy9AZGF0YWRpckAvcAorL0Bkb2NkaXJAL3AKKy9AaW5mb2RpckAvcAorL0Bsb2NhbGVkaXJAL3AKKy9AbWFuZGlyQC9wJworY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisgIHMmQGRvY2RpckAmJGRvY2RpciZnCisgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorCisjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCisjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfc2VkX2V4dHJhPSIkYWNfdnBzdWIKKyRleHRyYXN1YgorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis6dAorL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorc3xAY29uZmlndXJlX2lucHV0QHwkYWNfc2VkX2NvbmZfaW5wdXR8O3QgdAorcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CitzJkB0b3BfYnVpbGRfcHJlZml4QCYkYWNfdG9wX2J1aWxkX3ByZWZpeCY7dCB0CitzJkBzcmNkaXJAJiRhY19zcmNkaXImO3QgdAorcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorcyZAdG9wX3NyY2RpckAmJGFjX3RvcF9zcmNkaXImO3QgdAorcyZAYWJzX3RvcF9zcmNkaXJAJiRhY19hYnNfdG9wX3NyY2RpciY7dCB0CitzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKK3MmQGFic19idWlsZGRpckAmJGFjX2Fic19idWlsZGRpciY7dCB0CitzJkBhYnNfdG9wX2J1aWxkZGlyQCYkYWNfYWJzX3RvcF9idWlsZGRpciY7dCB0CitzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CiskYWNfZGF0YXJvb3RkaXJfaGFjaworIgorZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJHRtcC9zdWJzLmF3ayIgPiR0bXAvb3V0IFwKKyAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisKK3Rlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnICIkdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mMjt9CisKKyAgcm0gLWYgIiR0bXAvc3RkaW4iCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgLSkgY2F0ICIkdG1wL291dCIgJiYgcm0gLWYgIiR0bXAvb3V0Ijs7CisgICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiR0bXAvb3V0IiAiJGFjX2ZpbGUiOzsKKyAgZXNhYyBcCisgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorIDs7CisgIDpIKQorICAjCisgICMgQ09ORklHX0hFQURFUgorICAjCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICB7CisgICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiR0bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgorICAgIH0gPiIkdG1wL2NvbmZpZy5oIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiR0bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQorICAgIGVsc2UKKyAgICAgIHJtIC1mICIkYWNfZmlsZSIKKyAgICAgIG12ICIkdG1wL2NvbmZpZy5oIiAiJGFjX2ZpbGUiIFwKKwl8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBmaQorICBlbHNlCisgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgLSIgIiRMSU5FTk8iIDUKKyAgZmkKKyMgQ29tcHV0ZSAiJGFjX2ZpbGUiJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgorX2FtX3N0YW1wX2NvdW50PTEKK2ZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbworICBjYXNlICRfYW1faGVhZGVyIGluCisgICAgIiRhY19maWxlIiB8ICIkYWNfZmlsZSI6KiApCisgICAgICBicmVhayA7OworICAgICogKQorICAgICAgX2FtX3N0YW1wX2NvdW50PWBleHByICRfYW1fc3RhbXBfY291bnQgKyAxYCA7OworICBlc2FjCitkb25lCitlY2hvICJ0aW1lc3RhbXAgZm9yICIkYWNfZmlsZSIiID5gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2Avc3RhbXAtaCRfYW1fc3RhbXBfY291bnQKKyA7OworCisgIDpDKSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjY7fQorIDs7CisgIGVzYWMKKworCisgIGNhc2UgJGFjX2ZpbGUkYWNfbW9kZSBpbgorICAgICJkZXBmaWxlcyI6QykgdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgZm9yIG1mIGluICRDT05GSUdfRklMRVM7IGRvCisgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCisgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCBgTWFrZWZpbGUuaW4nLCBidXQKKyAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCisgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICMgU28gbGV0J3MgZ3JlcCB3aG9sZSBmaWxlLgorICBpZiBncmVwICdeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlJyAkbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGRpcnBhcnQ9YCRhc19kaXJuYW1lIC0tICIkbWYiIHx8CiskYXNfZXhwciBYIiRtZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRtZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRtZiIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgIGVsc2UKKyAgICBjb250aW51ZQorICBmaQorICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCisgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCisgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKKyAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKKyAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAorICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCisgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQorICAjIGV4cGFuc2lvbi4KKyAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCisgICAgICAgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCisgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRmaWxlIiB8fAorJGFzX2V4cHIgWCIkZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRmaWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICBhc19kaXI9JGRpcnBhcnQvJGZkaXI7IGFzX2ZuX21rZGlyX3AKKyAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgorICBkb25lCitkb25lCisgOzsKKyAgICAibGlidG9vbCI6QykKKworICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisKKyMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjICAgICAgICAgICAgICAgICBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorIworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgorIyBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisKKyMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgorYXZhaWxhYmxlX3RhZ3M9IiIKKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKKworIyBBc3NlbWJsZXIgcHJvZ3JhbS4KK0FTPSRsdF9BUworCisjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorRExMVE9PTD0kbHRfRExMVE9PTAorCisjIE9iamVjdCBkdW1wZXIgcHJvZ3JhbS4KK09CSkRVTVA9JGx0X09CSkRVTVAKKworIyBXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/CittYWNyb192ZXJzaW9uPSRtYWNyb192ZXJzaW9uCittYWNyb19yZXZpc2lvbj0kbWFjcm9fcmV2aXNpb24KKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KK2J1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCisKKyMgV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGQuCitwaWNfbW9kZT0kcGljX21vZGUKKworIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCitmYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKKworIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgorU0hFTEw9JGx0X1NIRUxMCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXMuCitFQ0hPPSRsdF9FQ0hPCisKKyMgVGhlIFBBVEggc2VwYXJhdG9yIGZvciB0aGUgYnVpbGQgc3lzdGVtLgorUEFUSF9TRVBBUkFUT1I9JGx0X1BBVEhfU0VQQVJBVE9SCisKKyMgVGhlIGhvc3Qgc3lzdGVtLgoraG9zdF9hbGlhcz0kaG9zdF9hbGlhcworaG9zdD0kaG9zdAoraG9zdF9vcz0kaG9zdF9vcworCisjIFRoZSBidWlsZCBzeXN0ZW0uCitidWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK2J1aWxkPSRidWlsZAorYnVpbGRfb3M9JGJ1aWxkX29zCisKKyMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4KK1NFRD0kbHRfU0VECisKKyMgU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW4uCitYc2VkPSJcJFNFRCAtZSAxcy9eWC8vIgorCisjIEEgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzLgorR1JFUD0kbHRfR1JFUAorCisjIEFuIEVSRSBtYXRjaGVyLgorRUdSRVA9JGx0X0VHUkVQCisKKyMgQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyLgorRkdSRVA9JGx0X0ZHUkVQCisKKyMgQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIuCitOTT0kbHRfTk0KKworIyBXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzLgorTE5fUz0kbHRfTE5fUworCisjIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KK21heF9jbWRfbGVuPSRtYXhfY21kX2xlbgorCisjIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KK29iamV4dD0kYWNfb2JqZXh0CisKKyMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgorZXhlZXh0PSRleGVleHQKKworIyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiLgorbHRfdW5zZXQ9JGx0X3Vuc2V0CisKKyMgdHVybiBzcGFjZXMgaW50byBuZXdsaW5lcy4KK1NQMk5MPSRsdF9sdF9TUDJOTAorCisjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCitOTDJTUD0kbHRfbHRfTkwyU1AKKworIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgordG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorCisjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgordG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorCisjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisKKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KK2ZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorCisjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKworIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCit3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorCisjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKworIyBUaGUgYXJjaGl2ZXIuCitBUj0kbHRfQVIKKworIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KK0FSX0ZMQUdTPSRsdF9BUl9GTEFHUworCisjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisKKyMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCitTVFJJUD0kbHRfU1RSSVAKKworIyBDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgV2hldGhlciB0byB1c2UgYSBsb2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uLgorbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPSRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24KKworIyBBIEMgY29tcGlsZXIuCitMVENDPSRsdF9DQworCisjIExUQ0MgY29tcGlsZXIgZmxhZ3MuCitMVENGTEFHUz0kbHRfQ0ZMQUdTCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCitnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCitubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKworIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKworIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCitvYmpkaXI9JG9iamRpcgorCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIE1hbmlmZXN0IHRvb2wuCitNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KK0RTWU1VVElMPSRsdF9EU1lNVVRJTAorCisjIFRvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYLgorTk1FRElUPSRsdF9OTUVESVQKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYLgorTElQTz0kbHRfTElQTworCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYLgorT1RPT0w9JGx0X09UT09MCisKKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjQuCitPVE9PTDY0PSRsdF9PVE9PTDY0CisKKyMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSRsaWJleHQKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KK3NocmV4dF9jbWRzPSRsdF9zaHJleHRfY21kcworCisjIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitleHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgbGluayB0aW1lLgordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9JGx0X3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rCisKKyMgRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KK3ZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCisKKyMgU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgorcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCisKKyMgU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KK3NobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKKworIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FCitsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisKKyMgUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllcy4KK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0kbHRfaW5zdGFsbF9vdmVycmlkZV9tb2RlCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgorZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCisKKyMgQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisjIG5vdCBzaG93bi4KK2ZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAorCisjIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCitoYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicworCisjIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisKKyMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKKworIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKKworIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKKworIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCitvbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgorc3RyaXBsaWI9JGx0X3N0cmlwbGliCisKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9JGx0X0xECisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHMKKworIyBBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgorQ0M9JGx0X2NvbXBpbGVyCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDCisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKworIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Citjb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgorYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzCisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjCisKKyMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCitjb21waWxlcl9uZWVkc19vYmplY3Q9JGx0X2NvbXBpbGVyX25lZWRzX29iamVjdAorCisjIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgorYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHMKK2FyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisjIGEgc2hhcmVkIGFyY2hpdmUuCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHMKK21vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzCisKKyMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90Lgord2l0aF9nbnVfbGQ9JGx0X3dpdGhfZ251X2xkCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKworIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWcKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0CisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwke3NobGlicGF0aF92YXJ9IGlmIHRoZQorIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0kaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0wKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3ZhcgorCisjIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorIyBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWMKKworIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworIyB0byBydW50aW1lIHBhdGggbGlzdC4KK2luaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKworIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCitsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltcworCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCitwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbgorCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK19MVF9FT0YKKyAgICA7OworICBlc2FjCisKKworbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorZnVuY19kaXJuYW1lICgpXAore1wKK1wgICAgY2FzZSAkezF9IGluXAorXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCitcICAgIGVzYWNcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCitmdW5jX2Jhc2VuYW1lICgpXAore1wKK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAore1wKK1wgICAgY2FzZSAkezF9IGluXAorXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCitcICAgIGVzYWNcCitcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCitmdW5jX3N0cmlwbmFtZSAoKVwKK3tcCitcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCitcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCitcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCit7XAorXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCitcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCitmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKK3tcCitcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorZnVuY19sbzJvICgpXAore1wKK1wgICAgY2FzZSAkezF9IGluXAorXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKK1wgICAgZXNhY1wKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKK2Z1bmNfeGZvcm0gKClcCit7XAorICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorZnVuY19hcml0aCAoKVwKK3tcCisgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorZnVuY19sZW4gKClcCit7XAorICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCitmaQorCitpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorZnVuY19hcHBlbmQgKClcCit7XAorICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCitmdW5jX2FwcGVuZF9xdW90ZWQgKClcCit7XAorXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK2Vsc2UKKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CitmaQorCitpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KK2ZpCisKKworICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCisKKyA7OworCisgIGVzYWMKK2RvbmUgIyBmb3IgYWNfdGFnCisKKworYXNfZm5fZXhpdCAwCitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisKK3Rlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8CisgIGFzX2ZuX2Vycm9yICJ3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KKyMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLgorIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KKyMgYnkgY29uZmlndXJlLCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cworIyBvdXRwdXQgaXMgc2ltcGx5IGRpc2NhcmRlZC4gIFNvIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwKKyMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKKyMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4gY29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQorIyBuZWVkIHRvIG1ha2UgdGhlIEZEIGF2YWlsYWJsZSBhZ2Fpbi4KK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorICBhY19jc19zdWNjZXNzPToKKyAgYWNfY29uZmlnX3N0YXR1c19hcmdzPQorICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0IgorICBleGVjIDU+L2Rldi9udWxsCisgICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKyAgZXhlYyA1Pj5jb25maWcubG9nCisgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCisgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorICAkYWNfY3Nfc3VjY2VzcyB8fCBhc19mbl9leGl0ICQ/CitmaQorCisjCisjIENPTkZJR19TVUJESVJTIHNlY3Rpb24uCisjCitpZiB0ZXN0ICIkbm9fcmVjdXJzaW9uIiAhPSB5ZXM7IHRoZW4KKworICAjIFJlbW92ZSAtLWNhY2hlLWZpbGUsIC0tc3JjZGlyLCBhbmQgLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyBhcmd1bWVudHMKKyAgIyBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorICBhY19zdWJfY29uZmlndXJlX2FyZ3M9CisgIGFjX3ByZXY9CisgIGV2YWwgInNldCB4ICRhY19jb25maWd1cmVfYXJncyIKKyAgc2hpZnQKKyAgZm9yIGFjX2FyZworICBkbworICAgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICAgICAgYWNfcHJldj0KKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICBjYXNlICRhY19hcmcgaW4KKyAgICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgICAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgICBhY19wcmV2PWNhY2hlX2ZpbGUgOzsKKyAgICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiBcCisgICAgfCAtLWM9KikKKyAgICAgIDs7CisgICAgLS1jb25maWctY2FjaGUgfCAtQykKKyAgICAgIDs7CisgICAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKKyAgICAgIGFjX3ByZXY9c3JjZGlyIDs7CisgICAgLXNyY2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0tc3I9KikKKyAgICAgIDs7CisgICAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICAgIGFjX3ByZXY9cHJlZml4IDs7CisgICAgLXByZWZpeD0qIHwgLS1wcmVmaXg9KiB8IC0tcHJlZmk9KiB8IC0tcHJlZj0qIHwgLS1wcmU9KiB8IC0tcHI9KiB8IC0tcD0qKQorICAgICAgOzsKKyAgICAtLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nKQorICAgICAgOzsKKyAgICAqKQorICAgICAgY2FzZSAkYWNfYXJnIGluCisgICAgICAqXCcqKSBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICAgZXNhYworICAgICAgYXNfZm5fYXBwZW5kIGFjX3N1Yl9jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAjIEFsd2F5cyBwcmVwZW5kIC0tcHJlZml4IHRvIGVuc3VyZSB1c2luZyB0aGUgc2FtZSBwcmVmaXgKKyAgIyBpbiBzdWJkaXIgY29uZmlndXJhdGlvbnMuCisgIGFjX2FyZz0iLS1wcmVmaXg9JHByZWZpeCIKKyAgY2FzZSAkYWNfYXJnIGluCisgICpcJyopIGFjX2FyZz1gJGFzX2VjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgIGVzYWMKKyAgYWNfc3ViX2NvbmZpZ3VyZV9hcmdzPSInJGFjX2FyZycgJGFjX3N1Yl9jb25maWd1cmVfYXJncyIKKworICAjIFBhc3MgLS1zaWxlbnQKKyAgaWYgdGVzdCAiJHNpbGVudCIgPSB5ZXM7IHRoZW4KKyAgICBhY19zdWJfY29uZmlndXJlX2FyZ3M9Ii0tc2lsZW50ICRhY19zdWJfY29uZmlndXJlX2FyZ3MiCisgIGZpCisKKyAgIyBBbHdheXMgcHJlcGVuZCAtLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nIHRvIHNpbGVuY2Ugd2FybmluZ3MsIHNpbmNlCisgICMgZGlmZmVyZW50IHN1YmRpcnMgY2FuIGhhdmUgZGlmZmVyZW50IC0tZW5hYmxlIGFuZCAtLXdpdGggb3B0aW9ucy4KKyAgYWNfc3ViX2NvbmZpZ3VyZV9hcmdzPSItLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nICRhY19zdWJfY29uZmlndXJlX2FyZ3MiCisKKyAgYWNfcG9wZGlyPWBwd2RgCisgIGZvciBhY19kaXIgaW4gOiAkc3ViZGlyczsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKKworICAgICMgRG8gbm90IGNvbXBsYWluLCBzbyBhIGNvbmZpZ3VyZSBzY3JpcHQgY2FuIGNvbmZpZ3VyZSB3aGljaGV2ZXIKKyAgICAjIHBhcnRzIG9mIGEgbGFyZ2Ugc291cmNlIHRyZWUgYXJlIHByZXNlbnQuCisgICAgdGVzdCAtZCAiJHNyY2Rpci8kYWNfZGlyIiB8fCBjb250aW51ZQorCisgICAgYWNfbXNnPSI9PT0gY29uZmlndXJpbmcgaW4gJGFjX2RpciAoYHB3ZGAvJGFjX2RpcikiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX21zZyIgPiY1CisgICAgJGFzX2VjaG8gIiRhY19tc2ciID4mNgorICAgIGFzX2Rpcj0iJGFjX2RpciI7IGFzX2ZuX21rZGlyX3AKKyAgICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorCisKKyAgICBjZCAiJGFjX2RpciIKKworICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlOyBvdGhlcndpc2UgZ2V0IEN5Z251cyBzdHlsZSBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorICAgICAgYWNfc3ViX2NvbmZpZ3VyZT0kYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUKKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorICAgICAgYWNfc3ViX2NvbmZpZ3VyZT0kYWNfc3JjZGlyL2NvbmZpZ3VyZQorICAgIGVsaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuaW4iOyB0aGVuCisgICAgICAjIFRoaXMgc2hvdWxkIGJlIEN5Z251cyBjb25maWd1cmUuCisgICAgICBhY19zdWJfY29uZmlndXJlPSRhY19hdXhfZGlyL2NvbmZpZ3VyZQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyO30KKyAgICAgIGFjX3N1Yl9jb25maWd1cmU9CisgICAgZmkKKworICAgICMgVGhlIHJlY3Vyc2lvbiBpcyBoZXJlLgorICAgIGlmIHRlc3QgLW4gIiRhY19zdWJfY29uZmlndXJlIjsgdGhlbgorICAgICAgIyBNYWtlIHRoZSBjYWNoZSBmaWxlIG5hbWUgY29ycmVjdCByZWxhdGl2ZSB0byB0aGUgc3ViZGlyZWN0b3J5LgorICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19zdWJfY2FjaGVfZmlsZT0kY2FjaGVfZmlsZSA7OworICAgICAgKikgIyBSZWxhdGl2ZSBuYW1lLgorCWFjX3N1Yl9jYWNoZV9maWxlPSRhY190b3BfYnVpbGRfcHJlZml4JGNhY2hlX2ZpbGUgOzsKKyAgICAgIGVzYWMKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBydW5uaW5nICRTSEVMTCAkYWNfc3ViX2NvbmZpZ3VyZSAkYWNfc3ViX2NvbmZpZ3VyZV9hcmdzIC0tY2FjaGUtZmlsZT0kYWNfc3ViX2NhY2hlX2ZpbGUgLS1zcmNkaXI9JGFjX3NyY2RpciIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBydW5uaW5nICRTSEVMTCAkYWNfc3ViX2NvbmZpZ3VyZSAkYWNfc3ViX2NvbmZpZ3VyZV9hcmdzIC0tY2FjaGUtZmlsZT0kYWNfc3ViX2NhY2hlX2ZpbGUgLS1zcmNkaXI9JGFjX3NyY2RpciIgPiY2O30KKyAgICAgICMgVGhlIGV2YWwgbWFrZXMgcXVvdGluZyBhcmd1bWVudHMgd29yay4KKyAgICAgIGV2YWwgIlwkU0hFTEwgXCJcJGFjX3N1Yl9jb25maWd1cmVcIiAkYWNfc3ViX2NvbmZpZ3VyZV9hcmdzIFwKKwkgICAtLWNhY2hlLWZpbGU9XCJcJGFjX3N1Yl9jYWNoZV9maWxlXCIgLS1zcmNkaXI9XCJcJGFjX3NyY2RpclwiIiB8fAorCWFzX2ZuX2Vycm9yICIkYWNfc3ViX2NvbmZpZ3VyZSBmYWlsZWQgZm9yICRhY19kaXIiICIkTElORU5PIiA1CisgICAgZmkKKworICAgIGNkICIkYWNfcG9wZGlyIgorICBkb25lCitmaQoraWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIiAmJiB0ZXN0ICIkZW5hYmxlX29wdGlvbl9jaGVja2luZyIgIT0gbm87IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMjt9CitmaQorCisKKworICAgIHRtcF9jcHA9YGV2YWwgZWNobyAiJGFjX2NwcCIgMj4vZGV2L251bGxgCisgIGlmIHRlc3QgLXogIiR0bXBfY3BwIjsgdGhlbgorICAgIHRtcF9jcHA9J2NwcCcKKyAgZmkKKyAgY2F0ID4uL3Rlc3RzL2NvbmZpZ3VyZWhlbHAucG0gPDxfRU9GCisjIFRoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZS4gIERvIG5vdCBlZGl0LgorCitwYWNrYWdlIGNvbmZpZ3VyZWhlbHA7CisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRXhwb3J0ZXI7CisKK3VzZSB2YXJzIHF3KAorICAgIEBJU0EKKyAgICBARVhQT1JUX09LCisgICAgXCRDcHJlcHJvY2Vzc29yCisgICAgKTsKKworQElTQSA9IHF3KEV4cG9ydGVyKTsKKworQEVYUE9SVF9PSyA9IHF3KAorICAgIFwkQ3ByZXByb2Nlc3NvcgorICAgICk7CisKK1wkQ3ByZXByb2Nlc3NvciA9ICckdG1wX2NwcCc7CisKKzE7CitfRU9GCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBDb25maWd1cmVkIHRvIGJ1aWxkIGN1cmwvbGliY3VybDoKKworICBjdXJsIHZlcnNpb246ICAgICAke0NVUkxWRVJTSU9OfQorICBIb3N0IHNldHVwOiAgICAgICAke2hvc3R9CisgIEluc3RhbGwgcHJlZml4OiAgICR7cHJlZml4fQorICBDb21waWxlcjogICAgICAgICAke0NDfQorICBTU0wgc3VwcG9ydDogICAgICAke2N1cmxfc3NsX21zZ30KKyAgU1NIIHN1cHBvcnQ6ICAgICAgJHtjdXJsX3NzaF9tc2d9CisgIHpsaWIgc3VwcG9ydDogICAgICR7Y3VybF96bGliX21zZ30KKyAga3JiNCBzdXBwb3J0OiAgICAgJHtjdXJsX2tyYjRfbXNnfQorICBHU1NBUEkgc3VwcG9ydDogICAke2N1cmxfZ3NzX21zZ30KKyAgU1BORUdPIHN1cHBvcnQ6ICAgJHtjdXJsX3NwbmVnb19tc2d9CisgIFRMUy1TUlAgc3VwcG9ydDogICR7Y3VybF90bHNfc3JwX21zZ30KKyAgcmVzb2x2ZXI6ICAgICAgICAgJHtjdXJsX3Jlc19tc2d9CisgIGlwdjYgc3VwcG9ydDogICAgICR7Y3VybF9pcHY2X21zZ30KKyAgSUROIHN1cHBvcnQ6ICAgICAgJHtjdXJsX2lkbl9tc2d9CisgIEJ1aWxkIGxpYmN1cmw6ICAgIFNoYXJlZD0ke2VuYWJsZV9zaGFyZWR9LCBTdGF0aWM9JHtlbmFibGVfc3RhdGljfQorICBCdWlsdC1pbiBtYW51YWw6ICAke2N1cmxfbWFudWFsX21zZ30KKyAgLS1saWJjdXJsIG9wdGlvbjogJHtjdXJsX2xpYmN1cmxfbXNnfQorICBWZXJib3NlIGVycm9yczogICAke2N1cmxfdmVyYm9zZV9tc2d9CisgIFNTUEkgc3VwcG9ydDogICAgICR7Y3VybF9zc3BpX21zZ30KKyAgY2EgY2VydCBidW5kbGU6ICAgJHtjYX0KKyAgY2EgY2VydCBwYXRoOiAgICAgJHtjYXBhdGh9CisgIExEQVAgc3VwcG9ydDogICAgICR7Y3VybF9sZGFwX21zZ30KKyAgTERBUFMgc3VwcG9ydDogICAgJHtjdXJsX2xkYXBzX21zZ30KKyAgUlRTUCBzdXBwb3J0OiAgICAgJHtjdXJsX3J0c3BfbXNnfQorICBSVE1QIHN1cHBvcnQ6ICAgICAke2N1cmxfcnRtcF9tc2d9CisgIFByb3RvY29sczogICAgICAgICR7U1VQUE9SVF9QUk9UT0NPTFN9CisiID4mNQorJGFzX2VjaG8gIiRhc19tZTogQ29uZmlndXJlZCB0byBidWlsZCBjdXJsL2xpYmN1cmw6CisKKyAgY3VybCB2ZXJzaW9uOiAgICAgJHtDVVJMVkVSU0lPTn0KKyAgSG9zdCBzZXR1cDogICAgICAgJHtob3N0fQorICBJbnN0YWxsIHByZWZpeDogICAke3ByZWZpeH0KKyAgQ29tcGlsZXI6ICAgICAgICAgJHtDQ30KKyAgU1NMIHN1cHBvcnQ6ICAgICAgJHtjdXJsX3NzbF9tc2d9CisgIFNTSCBzdXBwb3J0OiAgICAgICR7Y3VybF9zc2hfbXNnfQorICB6bGliIHN1cHBvcnQ6ICAgICAke2N1cmxfemxpYl9tc2d9CisgIGtyYjQgc3VwcG9ydDogICAgICR7Y3VybF9rcmI0X21zZ30KKyAgR1NTQVBJIHN1cHBvcnQ6ICAgJHtjdXJsX2dzc19tc2d9CisgIFNQTkVHTyBzdXBwb3J0OiAgICR7Y3VybF9zcG5lZ29fbXNnfQorICBUTFMtU1JQIHN1cHBvcnQ6ICAke2N1cmxfdGxzX3NycF9tc2d9CisgIHJlc29sdmVyOiAgICAgICAgICR7Y3VybF9yZXNfbXNnfQorICBpcHY2IHN1cHBvcnQ6ICAgICAke2N1cmxfaXB2Nl9tc2d9CisgIElETiBzdXBwb3J0OiAgICAgICR7Y3VybF9pZG5fbXNnfQorICBCdWlsZCBsaWJjdXJsOiAgICBTaGFyZWQ9JHtlbmFibGVfc2hhcmVkfSwgU3RhdGljPSR7ZW5hYmxlX3N0YXRpY30KKyAgQnVpbHQtaW4gbWFudWFsOiAgJHtjdXJsX21hbnVhbF9tc2d9CisgIC0tbGliY3VybCBvcHRpb246ICR7Y3VybF9saWJjdXJsX21zZ30KKyAgVmVyYm9zZSBlcnJvcnM6ICAgJHtjdXJsX3ZlcmJvc2VfbXNnfQorICBTU1BJIHN1cHBvcnQ6ICAgICAke2N1cmxfc3NwaV9tc2d9CisgIGNhIGNlcnQgYnVuZGxlOiAgICR7Y2F9CisgIGNhIGNlcnQgcGF0aDogICAgICR7Y2FwYXRofQorICBMREFQIHN1cHBvcnQ6ICAgICAke2N1cmxfbGRhcF9tc2d9CisgIExEQVBTIHN1cHBvcnQ6ICAgICR7Y3VybF9sZGFwc19tc2d9CisgIFJUU1Agc3VwcG9ydDogICAgICR7Y3VybF9ydHNwX21zZ30KKyAgUlRNUCBzdXBwb3J0OiAgICAgJHtjdXJsX3J0bXBfbXNnfQorICBQcm90b2NvbHM6ICAgICAgICAke1NVUFBPUlRfUFJPVE9DT0xTfQorIiA+JjY7fQorCitpZiB0ZXN0ICJ4JHNvbmFtZV9idW1wIiA9ICJ4eWVzIjsgdGhlbgorCitjYXQgPDxFT00KKyAgU09OQU1FIGJ1bXA6ICAgICB5ZXMgLSBXQVJOSU5HOiB0aGlzIGxpYnJhcnkgd2lsbCBiZSBidWlsdCB3aXRoIHRoZSBTT05BTUUKKyAgICAgICAgICAgICAgICAgICBudW1iZXIgYnVtcGVkIGR1ZSB0byAoYSBkZXRlY3RlZCkgQUJJIGJyZWFrYWdlLgorICAgICAgICAgICAgICAgICAgIFNlZSBsaWIvUkVBRE1FLmN1cmxfb2ZmX3QgZm9yIGRldGFpbHMgb24gdGhpcy4KK0VPTQorCitmaQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9jb25maWd1cmUuYWMgYi9jdXJsLTcuMjUuMC9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1NWVjZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2NvbmZpZ3VyZS5hYwpAQCAtMCwwICsxLDMzNjAgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorCitBQ19QUkVSRVEoMi41NykKKworZG5sIFdlIGRvbid0IGtub3cgdGhlIHZlcnNpb24gbnVtYmVyICJzdGF0aWNhbGx5IiBzbyB3ZSB1c2UgYSBkYXNoIGhlcmUKK0FDX0lOSVQoW2N1cmxdLCBbLV0sIFthIHN1aXRhYmxlIGN1cmwgbWFpbGluZyBsaXN0OiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvXSkKKworWENfT1ZSX1paNTAKK0NVUkxfT1ZFUlJJREVfQVVUT0NPTkYKKworZG5sIGNvbmZpZ3VyZSBzY3JpcHQgY29weXJpZ2h0CitBQ19DT1BZUklHSFQoW0NvcHlyaWdodCAoYykgMTk5OCAtIDIwMTEgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+CitUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQgYW5kIG1vZGlmaWVkIHVuZGVyIHRoZQordGVybXMgb2YgdGhlIGN1cmwgbGljZW5zZTsgc2VlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlsc10pCisKK0FDX0NPTkZJR19TUkNESVIoW2xpYi91cmxkYXRhLmhdKQorQU1fQ09ORklHX0hFQURFUihsaWIvY3VybF9jb25maWcuaCBzcmMvY3VybF9jb25maWcuaCBpbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgpCitBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCitBTV9NQUlOVEFJTkVSX01PREUKKworQ1VSTF9DSEVDS19PUFRJT05fREVCVUcKK0NVUkxfQ0hFQ0tfT1BUSU9OX09QVElNSVpFCitDVVJMX0NIRUNLX09QVElPTl9XQVJOSU5HUworQ1VSTF9DSEVDS19PUFRJT05fV0VSUk9SCitDVVJMX0NIRUNLX09QVElPTl9DVVJMREVCVUcKK0NVUkxfQ0hFQ0tfT1BUSU9OX0FSRVMKKworQ1VSTF9DSEVDS19QQVRIX1NFUEFSQVRPUl9SRVFVSVJFRAorCisjCisjIHNhdmUgdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMKKyMKK0NPTkZJR1VSRV9PUFRJT05TPSJcIiRhY19jb25maWd1cmVfYXJnc1wiIgorQUNfU1VCU1QoQ09ORklHVVJFX09QVElPTlMpCisKK0NVUkxfQ0ZMQUdfRVhUUkFTPSIiCitpZiB0ZXN0IFgiJHdhbnRfd2Vycm9yIiA9IFh5ZXM7IHRoZW4KKyAgQ1VSTF9DRkxBR19FWFRSQVM9Ii1XZXJyb3IiCitmaQorQUNfU1VCU1QoQ1VSTF9DRkxBR19FWFRSQVMpCisKK2RubCBTRUQgaXMgbWFuZGF0b3J5IGZvciBjb25maWd1cmUgcHJvY2VzcyBhbmQgbGlidG9vbC4KK2RubCBTZXQgaXQgbm93LCBhbGxvd2luZyBpdCB0byBiZSBjaGFuZ2VkIGxhdGVyLgoraWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgZG5sIGFsbG93IGl0IHRvIGJlIG92ZXJyaWRkZW4KKyAgQUNfUEFUSF9QUk9HKFtTRURdLCBbc2VkXSwgW25vdF9mb3VuZF0sCisgICAgWyRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluXSkKKyAgaWYgdGVzdCAteiAiJFNFRCIgfHwgdGVzdCAiJFNFRCIgPSAibm90X2ZvdW5kIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbc2VkIG5vdCBmb3VuZCBpbiBQQVRILiBDYW5ub3QgY29udGludWUgd2l0aG91dCBzZWQuXSkKKyAgZmkKK2ZpCitBQ19TVUJTVChbU0VEXSkKKworZG5sIEdSRVAgaXMgbWFuZGF0b3J5IGZvciBjb25maWd1cmUgcHJvY2VzcyBhbmQgbGlidG9vbC4KK2RubCBTZXQgaXQgbm93LCBhbGxvd2luZyBpdCB0byBiZSBjaGFuZ2VkIGxhdGVyLgoraWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgIGRubCBhbGxvdyBpdCB0byBiZSBvdmVycmlkZGVuCisgIEFDX1BBVEhfUFJPRyhbR1JFUF0sIFtncmVwXSwgW25vdF9mb3VuZF0sCisgICAgWyRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluXSkKKyAgaWYgdGVzdCAteiAiJEdSRVAiIHx8IHRlc3QgIiRHUkVQIiA9ICJub3RfZm91bmQiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtncmVwIG5vdCBmb3VuZCBpbiBQQVRILiBDYW5ub3QgY29udGludWUgd2l0aG91dCBncmVwLl0pCisgIGZpCitmaQorQUNfU1VCU1QoW0dSRVBdKQorCitkbmwgRUdSRVAgaXMgbWFuZGF0b3J5IGZvciBjb25maWd1cmUgcHJvY2VzcyBhbmQgbGlidG9vbC4KK2RubCBTZXQgaXQgbm93LCBhbGxvd2luZyBpdCB0byBiZSBjaGFuZ2VkIGxhdGVyLgoraWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorICBkbmwgYWxsb3cgaXQgdG8gYmUgb3ZlcnJpZGRlbgorICBpZiBlY2hvIGEgfCAoJEdSRVAgLUUgJyhhfGIpJykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgZWdyZXBdKQorICAgIEVHUkVQPSIkR1JFUCAtRSIKKyAgICBBQ19NU0dfUkVTVUxUKFskRUdSRVBdKQorICBlbHNlCisgICAgQUNfUEFUSF9QUk9HKFtFR1JFUF0sIFtlZ3JlcF0sIFtub3RfZm91bmRdLAorICAgICAgWyRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluXSkKKyAgZmkKK2ZpCitpZiB0ZXN0IC16ICIkRUdSRVAiIHx8IHRlc3QgIiRFR1JFUCIgPSAibm90X2ZvdW5kIjsgdGhlbgorICBBQ19NU0dfRVJST1IoW2VncmVwIG5vdCBmb3VuZCBpbiBQQVRILiBDYW5ub3QgY29udGludWUgd2l0aG91dCBlZ3JlcC5dKQorZmkKK0FDX1NVQlNUKFtFR1JFUF0pCisKK2RubCBBUiBpcyBtYW5kYXRvcnkgZm9yIGNvbmZpZ3VyZSBwcm9jZXNzIGFuZCBsaWJ0b29sLgorZG5sIFRoaXMgaXMgdGFyZ2V0IGRlcGVuZGVudCwgc28gY2hlY2sgaXQgYXMgYSB0b29sLgoraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICBkbmwgYWxsb3cgaXQgdG8gYmUgb3ZlcnJpZGRlbgorICBBQ19QQVRIX1RPT0woW0FSXSwgW2FyXSwgW25vdF9mb3VuZF0sCisgICAgWyRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluXSkKKyAgaWYgdGVzdCAteiAiJEFSIiB8fCB0ZXN0ICIkQVIiID0gIm5vdF9mb3VuZCI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW2FyIG5vdCBmb3VuZCBpbiBQQVRILiBDYW5ub3QgY29udGludWUgd2l0aG91dCBhci5dKQorICBmaQorZmkKK0FDX1NVQlNUKFtBUl0pCisKK0FDX1NVQlNUKGxpYmV4dCkKKworZG5sIFJlbW92ZSBub24tY29uZmlndXJlIGRpc3RyaWJ1dGVkIGN1cmxidWlsZC5oCitpZiB0ZXN0IC1mICR7c3JjZGlyfS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmg7IHRoZW4KKyAgcm0gLWYgJHtzcmNkaXJ9L2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaAorZmkKKworZG5sIGZpZ3VyZSBvdXQgdGhlIGxpYmN1cmwgdmVyc2lvbgorQ1VSTFZFUlNJT049YCRTRUQgLW5lICdzL14jZGVmaW5lIExJQkNVUkxfVkVSU0lPTiAiXCguKlwpIi9cMS9wJyAke3NyY2Rpcn0vaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaGAKK0FNX0lOSVRfQVVUT01BS0UKK0FDX01TR19DSEVDS0lORyhbY3VybCB2ZXJzaW9uXSkKK0FDX01TR19SRVNVTFQoJENVUkxWRVJTSU9OKQorCitBQ19TVUJTVChDVVJMVkVSU0lPTikKKworZG5sCitkbmwgd2UgZXh0cmFjdCB0aGUgbnVtZXJpY2FsIHZlcnNpb24gZm9yIGN1cmwtY29uZmlnIG9ubHkKK1ZFUlNJT05OVU09YCRTRUQgLW5lICdzL14jZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9OVU0gMHhcKC4qXCkvXDEvcCcgJHtzcmNkaXJ9L2luY2x1ZGUvY3VybC9jdXJsdmVyLmhgCitBQ19TVUJTVChWRVJTSU9OTlVNKQorCitkbmwgU29sYXJpcyBwa2dhZGQgc3VwcG9ydCBkZWZpbml0aW9ucworUEtHQUREX1BLRz0iSEFYWGN1cmwiCitQS0dBRERfTkFNRT0iY1VSTCAtIGEgY2xpZW50IHRoYXQgZ3Jva3MgVVJMcyIKK1BLR0FERF9WRU5ET1I9ImN1cmwuaGF4eC5zZSIKK0FDX1NVQlNUKFBLR0FERF9QS0cpCitBQ19TVUJTVChQS0dBRERfTkFNRSkKK0FDX1NVQlNUKFBLR0FERF9WRU5ET1IpCisKK2RubAorZG5sIGluaXRpYWxpemUgYWxsIHRoZSBpbmZvIHZhcmlhYmxlcworICAgIGN1cmxfc3NsX21zZz0ibm8gICAgICAoLS13aXRoLXtzc2wsZ251dGxzLG5zcyxwb2xhcnNzbCxjeWFzc2wsYXh0bHN9ICkiCisgICAgY3VybF9zc2hfbXNnPSJubyAgICAgICgtLXdpdGgtbGlic3NoMikiCisgICBjdXJsX3psaWJfbXNnPSJubyAgICAgICgtLXdpdGgtemxpYikiCisgICBjdXJsX2tyYjRfbXNnPSJubyAgICAgICgtLXdpdGgta3JiNCopIgorICAgIGN1cmxfZ3NzX21zZz0ibm8gICAgICAoLS13aXRoLWdzc2FwaSkiCisgY3VybF9zcG5lZ29fbXNnPSJubyAgICAgICgtLXdpdGgtc3BuZWdvKSIKK2N1cmxfdGxzX3NycF9tc2c9Im5vICAgICAgKC0tZW5hYmxlLXRscy1zcnApIgorICAgIGN1cmxfcmVzX21zZz0iZGVmYXVsdCAoLS1lbmFibGUtYXJlcyAvIC0tZW5hYmxlLXRocmVhZGVkLXJlc29sdmVyKSIKKyAgIGN1cmxfaXB2Nl9tc2c9Im5vICAgICAgKC0tZW5hYmxlLWlwdjYpIgorICAgIGN1cmxfaWRuX21zZz0ibm8gICAgICAoLS13aXRoLWxpYmlkbikiCisgY3VybF9tYW51YWxfbXNnPSJubyAgICAgICgtLWVuYWJsZS1tYW51YWwpIgorY3VybF9saWJjdXJsX21zZz0iZW5hYmxlZCAoLS1kaXNhYmxlLWxpYmN1cmwtb3B0aW9uKSIKK2N1cmxfdmVyYm9zZV9tc2c9ImVuYWJsZWQgKC0tZGlzYWJsZS12ZXJib3NlKSIKKyAgIGN1cmxfc3NwaV9tc2c9Im5vICAgICAgKC0tZW5hYmxlLXNzcGkpIgorICAgY3VybF9sZGFwX21zZz0ibm8gICAgICAoLS1lbmFibGUtbGRhcCAvIC0td2l0aC1sZGFwLWxpYiAvIC0td2l0aC1sYmVyLWxpYikiCisgIGN1cmxfbGRhcHNfbXNnPSJubyAgICAgICgtLWVuYWJsZS1sZGFwcykiCisgICBjdXJsX3J0c3BfbXNnPSJubyAgICAgICgtLWVuYWJsZS1ydHNwKSIKKyAgIGN1cmxfcnRtcF9tc2c9Im5vICAgICAgKC0td2l0aC1saWJydG1wKSIKKyAgICBpbml0X3NzbF9tc2c9JHtjdXJsX3NzbF9tc2d9CisKK2RubAorZG5sIFNhdmUgYW55dGhpbmcgaW4gJExJQlMgZm9yIGxhdGVyCitkbmwKK0FMTF9MSUJTPSRMSUJTCisKK2RubAorZG5sIERldGVjdCB0aGUgY2Fub25pY2FsIGhvc3QgYW5kIHRhcmdldCBidWlsZCBlbnZpcm9ubWVudAorZG5sCisKK0FDX0NBTk9OSUNBTF9IT1NUCitkbmwgR2V0IHN5c3RlbSBjYW5vbmljYWwgbmFtZQorQUNfREVGSU5FX1VOUVVPVEVEKE9TLCAiJHtob3N0fSIsIFtjcHUtbWFjaGluZS1PU10pCisKK2RubCBDaGVja3MgZm9yIHByb2dyYW1zLgorQ1VSTF9DSEVDS19QUk9HX0NDCisKK2RubCBPdXIgY3VybF9vZmZfdCBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgY29uZmlndXJlIHNldHRpbmdzCitDVVJMX0NPTkZJR1VSRV9DVVJMX09GRl9UCisKK2RubCBUaGlzIGRlZmluZXMgX0FMTF9TT1VSQ0UgZm9yIEFJWAorQ1VSTF9DSEVDS19BSVhfQUxMX1NPVVJDRQorCitkbmwgT3VyIGNvbmZpZ3VyZSBhbmQgYnVpbGQgcmVlbnRyYW50IHNldHRpbmdzCitDVVJMX0NPTkZJR1VSRV9USFJFQURfU0FGRQorQ1VSTF9DT05GSUdVUkVfUkVFTlRSQU5UCisKK2RubCBjaGVjayBmb3IgaG93IHRvIGRvIGxhcmdlIGZpbGVzCitBQ19TWVNfTEFSR0VGSUxFCisKK2RubCBzdXBwb3J0IGJ1aWxkaW5nIG9mIFdpbmRvd3MgRExMcworQUNfTElCVE9PTF9XSU4zMl9ETEwKKworZG5sIGZvcmNlIGxpYnRvb2wgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyB3aXRoIFBJQyBvbiBBTUQ2NC1MaW51eCAmIEZyZWVCU0QKK0FDX01TR19DSEVDS0lORyhbaWYgYXJjaC1PUyBob3N0IGlzIEFNRDY0LUxpbnV4L0ZyZWVCU0QgKHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgd2l0aCBQSUMpXSkKK2Nhc2UgJGhvc3QgaW4KKyAgeDg2XzY0KmxpbnV4KnxhbWQ2NCpmcmVlYnNkKnxpYTY0KmZyZWVic2QqKQorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgd2l0aF9waWM9eWVzCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgOzsKK2VzYWMKKworQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBpcyBpY2MgKHRvIGJ1aWxkIHdpdGggUElDKV0pCitjYXNlICRDQyBpbgorICBpY2MgfCAqL2ljYykKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHdpdGhfcGljPXllcworICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIDs7Citlc2FjCisKK2RubCBsaWJ0b29sIHNldHVwCitBQ19QUk9HX0xJQlRPT0wKKworQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBuZWVkIC1taW1wdXJlLXRleHRdKQorbWltcHVyZT1ubworY2FzZSAkaG9zdCBpbgorICAqLSotc29sYXJpczIqKQorICAgIGlmIHRlc3QgIiRHQ0MiID0gInllcyI7IHRoZW4KKyAgICAgIG1pbXB1cmU9InllcyIKKyAgICBmaQorICAgIDs7CisgICopCisgICAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoJG1pbXB1cmUpCitBTV9DT05ESVRJT05BTChNSU1QVVJFLCB0ZXN0IHgkbWltcHVyZSA9IHh5ZXMpCisKK2RubCAnU1RBVElDTElCJyBpcywgaW4gc3BpdGUgb2YgaXRzIG5hbWUsIG5vdCBnZW5lcmljIGJ1dCBvbmx5IGZvciBzdGF0aWMtb25seQorZG5sIGJ1aWxkcyBvbiBXaW5kb3dzCitBTV9DT05ESVRJT05BTChTVEFUSUNMSUIsIGZhbHNlKQorCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIG5lZWQgQlVJTERJTkdfTElCQ1VSTF0pCitjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgQUNfREVGSU5FKEJVSUxESU5HX0xJQkNVUkwsIDEsIFt3aGVuIGJ1aWxkaW5nIGxpYmN1cmwgaXRzZWxmXSkKKyAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIG5lZWQgQ1VSTF9TVEFUSUNMSUJdKQorICAgIGlmIHRlc3QgIlgkZW5hYmxlX3NoYXJlZCIgPSAiWG5vIgorICAgIHRoZW4KKyAgICAgIEFDX0RFRklORShDVVJMX1NUQVRJQ0xJQiwgMSwgW3doZW4gbm90IGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnldKQorICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICBBTV9DT05ESVRJT05BTChTVEFUSUNMSUIsIHRydWUpCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICBmaQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICA7OworZXNhYworCisjIERldGVybWluZSB3aGV0aGVyIGFsbCBkZXBlbmRlbnQgbGlicmFyaWVzIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gbGlua2luZworaWYgdGVzdCAiWCRlbmFibGVfc2hhcmVkIiA9ICJYeWVzIiAtYSAiWCRsaW5rX2FsbF9kZXBsaWJzIiA9ICJYbm8iCit0aGVuCisgICAgUkVRVUlSRV9MSUJfREVQUz1ubworZWxzZQorICAgIFJFUVVJUkVfTElCX0RFUFM9eWVzCitmaQorQUNfU1VCU1QoUkVRVUlSRV9MSUJfREVQUykKKworZG5sIFRoZSBpbnN0YWxsIHN0dWZmIGhhcyBhbHJlYWR5IGJlZW4gdGFrZW4gY2FyZSBvZiBieSB0aGUgYXV0b21ha2Ugc3R1ZmYKK2RubCBBQ19QUk9HX0lOU1RBTEwKK0FDX1BST0dfTUFLRV9TRVQKKworZG5sIGNoZWNrIGlmIHRoZXJlJ3MgYSB3YXkgdG8gZm9yY2UgY29kZSBpbmxpbmUKK0FDX0NfSU5MSU5FCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgcGxhdGZvcm0vY29tcGlsZXIvYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNoZWNrcy9mbGFncworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQ1VSTF9DSEVDS19DT01QSUxFUgorQ1VSTF9TRVRfQ09NUElMRVJfQkFTSUNfT1BUUworQ1VSTF9TRVRfQ09NUElMRVJfREVCVUdfT1BUUworQ1VSTF9TRVRfQ09NUElMRVJfT1BUSU1JWkVfT1BUUworQ1VSTF9TRVRfQ09NUElMRVJfV0FSTklOR19PUFRTCisKK2lmIHRlc3QgIiRjb21waWxlcl9pZCIgPSAiSU5URUxfVU5JWF9DIjsgdGhlbgorICAjCisgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMTAwMCI7IHRoZW4KKyAgICBkbmwgaWNjIDEwLlggb3IgbGF0ZXIKKyAgICBDRkxBR1M9IiRDRkxBR1MgLXNoYXJlZC1pbnRlbCIKKyAgZWxpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjkwMCI7IHRoZW4KKyAgICBkbmwgaWNjIDkuWCBzcGVjaWZpYworICAgIENGTEFHUz0iJENGTEFHUyAtaS1keW5hbWljIgorICBmaQorICAjCitmaQorCitDVVJMX0NIRUNLX0NPTVBJTEVSX0hBTFRfT05fRVJST1IKK0NVUkxfQ0hFQ0tfQ09NUElMRVJfQVJSQVlfU0laRV9ORUdBVElWRQorCitDVVJMX0NIRUNLX05PX1VOREVGSU5FRAorQU1fQ09ORElUSU9OQUwoTk9fVU5ERUZJTkVELCB0ZXN0IHgkbmVlZF9ub191bmRlZmluZWQgPSB4eWVzKQorCitDVVJMX0NIRUNLX0NVUkxERUJVRworQU1fQ09ORElUSU9OQUwoQ1VSTERFQlVHLCB0ZXN0IHgkd2FudF9jdXJsZGVidWcgPSB4eWVzKQorCitzdXBwb3J0c191bml0dGVzdHM9eWVzCisjIGNyb3NzLWNvbXBpbGF0aW9uIG9mIHVuaXQgdGVzdHMgc3RhdGljIGxpYnJhcnkvcHJvZ3JhbXMgZmFpbHMgd2hlbgorIyBsaWJjdXJsIHNoYXJlZCBsaWJyYXJ5IGlzIGJ1aWx0LiBUaGlzIG1pZ2h0IGJlIGR1ZSB0byBhIGxpYnRvb2wgb3IKKyMgYXV0b21ha2UgaXNzdWUuIEluIHRoaXMgY2FzZSB3ZSBkaXNhYmxlIHVuaXQgdGVzdHMuCitpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInhubyIgJiYKKyAgIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgIT0gInhubyI7IHRoZW4KKyAgc3VwcG9ydHNfdW5pdHRlc3RzPW5vCitmaQorCisjIElSSVggNi41LjI0IGdjYyAzLjMgYXV0b2J1aWxkcyBmYWlsIHVuaXR0ZXN0cyBsaWJyYXJ5IGNvbXBpbGF0aW9uIGR1ZSB0bworIyBhIHByb2JsZW0gcmVsYXRlZCB3aXRoIE9wZW5TU0wgaGVhZGVycyBhbmQgbGlicmFyeSB2ZXJzaW9ucyBub3QgbWF0Y2hpbmcuCisjIERpc2FibGUgdW5pdCB0ZXN0cyB3aGlsZSB0aW1lIHRvIGZ1cnRoZXIgaW52ZXN0aWdhdGUgdGhpcyBpcyBmb3VuZC4KK2Nhc2UgJGhvc3QgaW4KKyAgbWlwcy1zZ2ktaXJpeDYuNSkKKyAgICBpZiB0ZXN0ICIkY29tcGlsZXJfaWQiID0gIkdOVV9DIjsgdGhlbgorICAgICAgc3VwcG9ydHNfdW5pdHRlc3RzPW5vCisgICAgZmkKKyAgICA7OworZXNhYworCisjIEFsbCBBSVggYXV0b2J1aWxkcyBmYWlscyB1bml0IHRlc3RzIGxpbmtpbmcgYWdhaW5zdCB1bml0dGVzdHMgbGlicmFyeQorIyBkdWUgdG8gdW5pdHRlc3RzIGxpYnJhcnkgYmVpbmcgYnVpbHQgd2l0aCBubyBzeW1ib2xzIG9yIG1lbWJlcnMuIExpYnRvb2wgPworIyBEaXNhYmxlIHVuaXQgdGVzdHMgd2hpbGUgdGltZSB0byBmdXJ0aGVyIGludmVzdGlnYXRlIHRoaXMgaXMgZm91bmQuCitjYXNlICRob3N0X29zIGluCisgIGFpeCopCisgICAgc3VwcG9ydHNfdW5pdHRlc3RzPW5vCisgICAgOzsKK2VzYWMKKworZG5sIEJ1aWxkIHVuaXQgdGVzdHMgd2hlbiBvcHRpb24gLS1lbmFibGUtZGVidWcgaXMgZ2l2ZW4uCitpZiB0ZXN0ICJ4JHdhbnRfZGVidWciID0gInh5ZXMiICYmCisgICB0ZXN0ICJ4JHN1cHBvcnRzX3VuaXR0ZXN0cyIgPSAieHllcyI7IHRoZW4KKyAgd2FudF91bml0dGVzdHM9eWVzCitlbHNlCisgIHdhbnRfdW5pdHRlc3RzPW5vCitmaQorQU1fQ09ORElUSU9OQUwoQlVJTERfVU5JVFRFU1RTLCB0ZXN0IHgkd2FudF91bml0dGVzdHMgPSB4eWVzKQorCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIENvbXBpbGF0aW9uIGJhc2VkIGNoZWNrcyBzaG91bGQgbm90IGJlIGRvbmUgYmVmb3JlIHRoaXMgcG9pbnQuCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIE1ha2Ugc3VyZSB0aGF0IG91ciBjaGVja3MgZm9yIGhlYWRlcnMgd2luZG93cy5oIHdpbnNvY2suaCB3aW5zb2NrMi5oCitkbmwgYW5kIHdzMnRjcGlwLmggdGFrZSBwcmVjZWRlbmNlIG92ZXIgYW55IG90aGVyIGZ1cnRoZXIgY2hlY2tzIHdoaWNoCitkbmwgY291bGQgYmUgZG9uZSBsYXRlciB1c2luZyBBQ19DSEVDS19IRUFERVIgb3IgQUNfQ0hFQ0tfSEVBREVSUyBmb3IKK2RubCB0aGlzIHNwZWNpZmljIGhlYWRlciBmaWxlcy4gQW5kIGRvIHRoZW0gYmVmb3JlIGl0cyByZXN1bHRzIGFyZSB1c2VkLgorZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQ1VSTF9DSEVDS19IRUFERVJfV0lORE9XUworQ1VSTF9DSEVDS19OQVRJVkVfV0lORE9XUworY2FzZSBYLSIkYWNfY3ZfbmF0aXZlX3dpbmRvd3MiIGluCisgIFgteWVzKQorICAgIENVUkxfQ0hFQ0tfSEVBREVSX1dJTlNPQ0sKKyAgICBDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLMgorICAgIENVUkxfQ0hFQ0tfSEVBREVSX1dTMlRDUElQCisgICAgQ1VSTF9DSEVDS19IRUFERVJfV0lOTERBUAorICAgIENVUkxfQ0hFQ0tfSEVBREVSX1dJTkJFUgorICAgIDs7CisgICopCisgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2tfaD0ibm8iCisgICAgYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2g9Im5vIgorICAgIGFjX2N2X2hlYWRlcl93czJ0Y3BpcF9oPSJubyIKKyAgICBhY19jdl9oZWFkZXJfd2lubGRhcF9oPSJubyIKKyAgICBhY19jdl9oZWFkZXJfd2luYmVyX2g9Im5vIgorICAgIDs7Citlc2FjCitDVVJMX0NIRUNLX1dJTjMyX0xBUkdFRklMRQorCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgc3dpdGNoIG9mZiBwYXJ0aWN1bGFyIHByb3RvY29scworZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gc3VwcG9ydCBodHRwXSkKK0FDX0FSR19FTkFCTEUoaHR0cCwKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1odHRwXSxbRW5hYmxlIEhUVFAgc3VwcG9ydF0pCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWh0dHBdLFtEaXNhYmxlIEhUVFAgc3VwcG9ydF0pLAorWyBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgIEFDX0RFRklORShDVVJMX0RJU0FCTEVfSFRUUCwgMSwgW3RvIGRpc2FibGUgSFRUUF0pCisgICAgICAgQUNfTVNHX1dBUk4oW2Rpc2FibGUgSFRUUCBkaXNhYmxlcyBGVFAgb3ZlciBwcm94eSBhbmQgUlRTUF0pCisgICAgICAgQUNfU1VCU1QoQ1VSTF9ESVNBQkxFX0hUVFAsIFsxXSkKKyAgICAgICBBQ19ERUZJTkUoQ1VSTF9ESVNBQkxFX1JUU1AsIDEsIFt0byBkaXNhYmxlIFJUU1BdKQorICAgICAgIEFDX1NVQlNUKENVUkxfRElTQUJMRV9SVFNQLCBbMV0pCisgICAgICAgOzsKKyAgKikgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgICA7OworICBlc2FjIF0sCisgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCispCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gc3VwcG9ydCBmdHBdKQorQUNfQVJHX0VOQUJMRShmdHAsCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZnRwXSxbRW5hYmxlIEZUUCBzdXBwb3J0XSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZnRwXSxbRGlzYWJsZSBGVFAgc3VwcG9ydF0pLAorWyBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgIEFDX0RFRklORShDVVJMX0RJU0FCTEVfRlRQLCAxLCBbdG8gZGlzYWJsZSBGVFBdKQorICAgICAgIEFDX1NVQlNUKENVUkxfRElTQUJMRV9GVFAsIFsxXSkKKyAgICAgICA7OworICAqKSAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgIDs7CisgIGVzYWMgXSwKKyAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKykKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBzdXBwb3J0IGZpbGVdKQorQUNfQVJHX0VOQUJMRShmaWxlLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZpbGVdLFtFbmFibGUgRklMRSBzdXBwb3J0XSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZmlsZV0sW0Rpc2FibGUgRklMRSBzdXBwb3J0XSksCitbIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgQUNfREVGSU5FKENVUkxfRElTQUJMRV9GSUxFLCAxLCBbdG8gZGlzYWJsZSBGSUxFXSkKKyAgICAgICBBQ19TVUJTVChDVVJMX0RJU0FCTEVfRklMRSwgWzFdKQorICAgICAgIDs7CisgICopICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgOzsKKyAgZXNhYyBdLAorICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHN1cHBvcnQgbGRhcF0pCitBQ19BUkdfRU5BQkxFKGxkYXAsCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbGRhcF0sW0VuYWJsZSBMREFQIHN1cHBvcnRdKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1sZGFwXSxbRGlzYWJsZSBMREFQIHN1cHBvcnRdKSwKK1sgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgICBBQ19ERUZJTkUoQ1VSTF9ESVNBQkxFX0xEQVAsIDEsIFt0byBkaXNhYmxlIExEQVBdKQorICAgICAgIEFDX1NVQlNUKENVUkxfRElTQUJMRV9MREFQLCBbMV0pCisgICAgICAgOzsKKyAgKikKKyAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgICA7OworICBlc2FjIF0sWworICAgICAgIEFDX01TR19SRVNVTFQoeWVzKSBdCispCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gc3VwcG9ydCBsZGFwc10pCitBQ19BUkdfRU5BQkxFKGxkYXBzLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxkYXBzXSxbRW5hYmxlIExEQVBTIHN1cHBvcnRdKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1sZGFwc10sW0Rpc2FibGUgTERBUFMgc3VwcG9ydF0pLAorWyBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgIEFDX0RFRklORShDVVJMX0RJU0FCTEVfTERBUFMsIDEsIFt0byBkaXNhYmxlIExEQVBTXSkKKyAgICAgICBBQ19TVUJTVChDVVJMX0RJU0FCTEVfTERBUFMsIFsxXSkKKyAgICAgICA7OworICAqKSAgIGlmIHRlc3QgIngkQ1VSTF9ESVNBQkxFX0xEQVAiID0gIngxIiA7IHRoZW4KKyAgICAgICAgIEFDX01TR19SRVNVTFQoTERBUCBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHN1cHBvcnQgTERBUFMpCisgICAgICAgICBBQ19ERUZJTkUoQ1VSTF9ESVNBQkxFX0xEQVBTLCAxLCBbdG8gZGlzYWJsZSBMREFQU10pCisgICAgICAgICBBQ19TVUJTVChDVVJMX0RJU0FCTEVfTERBUFMsIFsxXSkKKyAgICAgICBlbHNlCisgICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgICAgIEFDX0RFRklORShIQVZFX0xEQVBfU1NMLCAxLCBbVXNlIExEQVBTIGltcGxlbWVudGF0aW9uXSkKKyAgICAgICAgIEFDX1NVQlNUKEhBVkVfTERBUF9TU0wsIFsxXSkKKyAgICAgICBmaQorICAgICAgIDs7CisgIGVzYWMgXSxbCisgICAgICAgaWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfTERBUCIgPSAieDEiIDsgdGhlbgorICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgICAgIEFDX0RFRklORShDVVJMX0RJU0FCTEVfTERBUFMsIDEsIFt0byBkaXNhYmxlIExEQVBTXSkKKyAgICAgICAgIEFDX1NVQlNUKENVUkxfRElTQUJMRV9MREFQUywgWzFdKQorICAgICAgIGVsc2UKKyAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICAgQUNfREVGSU5FKEhBVkVfTERBUF9TU0wsIDEsIFtVc2UgTERBUFMgaW1wbGVtZW50YXRpb25dKQorICAgICAgICAgQUNfU1VCU1QoSEFWRV9MREFQX1NTTCwgWzFdKQorICAgICAgIGZpIF0KKykKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHN1cHBvcnQgcnRzcF0pCitBQ19BUkdfRU5BQkxFKHJ0c3AsCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcnRzcF0sW0VuYWJsZSBSVFNQIHN1cHBvcnRdKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1ydHNwXSxbRGlzYWJsZSBSVFNQIHN1cHBvcnRdKSwKK1sgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgICBBQ19ERUZJTkUoQ1VSTF9ESVNBQkxFX1JUU1AsIDEsIFt0byBkaXNhYmxlIFJUU1BdKQorICAgICAgIEFDX1NVQlNUKENVUkxfRElTQUJMRV9SVFNQLCBbMV0pCisgICAgICAgOzsKKyAgKikgICBpZiB0ZXN0IHgkQ1VSTF9ESVNBQkxFX0hUVFAgPSB4MSA7IHRoZW4KKyAgICAgICAgICBBQ19NU0dfRVJST1IoSFRUUCBzdXBwb3J0IG5lZWRzIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gZW5hYmxlIFJUU1Agc3VwcG9ydCEpCisgICAgICAgZWxzZQorICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICAgIGN1cmxfcnRzcF9tc2c9ImVuYWJsZWQiCisgICAgICAgZmkKKyAgICAgICA7OworICBlc2FjIF0sCisgICAgICAgaWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfSFRUUCIgIT0gIngxIjsgdGhlbgorICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICAgIGN1cmxfcnRzcF9tc2c9ImVuYWJsZWQiCisgICAgICAgZWxzZQorICAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgZmkKKykKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHN1cHBvcnQgcHJveGllc10pCitBQ19BUkdfRU5BQkxFKHByb3h5LAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXByb3h5XSxbRW5hYmxlIHByb3h5IHN1cHBvcnRdKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1wcm94eV0sW0Rpc2FibGUgcHJveHkgc3VwcG9ydF0pLAorWyBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgIEFDX0RFRklORShDVVJMX0RJU0FCTEVfUFJPWFksIDEsIFt0byBkaXNhYmxlIHByb3hpZXNdKQorICAgICAgIEFDX1NVQlNUKENVUkxfRElTQUJMRV9QUk9YWSwgWzFdKQorICAgICAgIDs7CisgICopICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgOzsKKyAgZXNhYyBdLAorICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gc3VwcG9ydCBkaWN0XSkKK0FDX0FSR19FTkFCTEUoZGljdCwKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kaWN0XSxbRW5hYmxlIERJQ1Qgc3VwcG9ydF0pCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWRpY3RdLFtEaXNhYmxlIERJQ1Qgc3VwcG9ydF0pLAorWyBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgIEFDX0RFRklORShDVVJMX0RJU0FCTEVfRElDVCwgMSwgW3RvIGRpc2FibGUgRElDVF0pCisgICAgICAgQUNfU1VCU1QoQ1VSTF9ESVNBQkxFX0RJQ1QsIFsxXSkKKyAgICAgICA7OworICAqKSAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgIDs7CisgIGVzYWMgXSwKKyAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKykKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBzdXBwb3J0IHRlbG5ldF0pCitBQ19BUkdfRU5BQkxFKHRlbG5ldCwKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS10ZWxuZXRdLFtFbmFibGUgVEVMTkVUIHN1cHBvcnRdKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS10ZWxuZXRdLFtEaXNhYmxlIFRFTE5FVCBzdXBwb3J0XSksCitbIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgQUNfREVGSU5FKENVUkxfRElTQUJMRV9URUxORVQsIDEsIFt0byBkaXNhYmxlIFRFTE5FVF0pCisgICAgICAgQUNfU1VCU1QoQ1VSTF9ESVNBQkxFX1RFTE5FVCwgWzFdKQorICAgICAgIDs7CisgICopICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgOzsKKyAgZXNhYyBdLAorICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHN1cHBvcnQgdGZ0cF0pCitBQ19BUkdfRU5BQkxFKHRmdHAsCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdGZ0cF0sW0VuYWJsZSBURlRQIHN1cHBvcnRdKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS10ZnRwXSxbRGlzYWJsZSBURlRQIHN1cHBvcnRdKSwKK1sgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgICBBQ19ERUZJTkUoQ1VSTF9ESVNBQkxFX1RGVFAsIDEsIFt0byBkaXNhYmxlIFRGVFBdKQorICAgICAgIEFDX1NVQlNUKENVUkxfRElTQUJMRV9URlRQLCBbMV0pCisgICAgICAgOzsKKyAgKikgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgICA7OworICBlc2FjIF0sCisgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCispCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBzdXBwb3J0IHBvcDNdKQorQUNfQVJHX0VOQUJMRShwb3AzLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXBvcDNdLFtFbmFibGUgUE9QMyBzdXBwb3J0XSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtcG9wM10sW0Rpc2FibGUgUE9QMyBzdXBwb3J0XSksCitbIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgQUNfREVGSU5FKENVUkxfRElTQUJMRV9QT1AzLCAxLCBbdG8gZGlzYWJsZSBQT1AzXSkKKyAgICAgICBBQ19TVUJTVChDVVJMX0RJU0FCTEVfUE9QMywgWzFdKQorICAgICAgIDs7CisgICopICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgOzsKKyAgZXNhYyBdLAorICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKQorCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBzdXBwb3J0IGltYXBdKQorQUNfQVJHX0VOQUJMRShpbWFwLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWltYXBdLFtFbmFibGUgSU1BUCBzdXBwb3J0XSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtaW1hcF0sW0Rpc2FibGUgSU1BUCBzdXBwb3J0XSksCitbIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgQUNfREVGSU5FKENVUkxfRElTQUJMRV9JTUFQLCAxLCBbdG8gZGlzYWJsZSBJTUFQXSkKKyAgICAgICBBQ19TVUJTVChDVVJMX0RJU0FCTEVfSU1BUCwgWzFdKQorICAgICAgIDs7CisgICopICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgOzsKKyAgZXNhYyBdLAorICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKQorCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBzdXBwb3J0IHNtdHBdKQorQUNfQVJHX0VOQUJMRShzbXRwLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNtdHBdLFtFbmFibGUgU01UUCBzdXBwb3J0XSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtc210cF0sW0Rpc2FibGUgU01UUCBzdXBwb3J0XSksCitbIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgQUNfREVGSU5FKENVUkxfRElTQUJMRV9TTVRQLCAxLCBbdG8gZGlzYWJsZSBTTVRQXSkKKyAgICAgICBBQ19TVUJTVChDVVJMX0RJU0FCTEVfU01UUCwgWzFdKQorICAgICAgIDs7CisgICopICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgOzsKKyAgZXNhYyBdLAorICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gc3VwcG9ydCBnb3BoZXJdKQorQUNfQVJHX0VOQUJMRShnb3BoZXIsCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZ29waGVyXSxbRW5hYmxlIEdvcGhlciBzdXBwb3J0XSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZ29waGVyXSxbRGlzYWJsZSBHb3BoZXIgc3VwcG9ydF0pLAorWyBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgIEFDX0RFRklORShDVVJMX0RJU0FCTEVfR09QSEVSLCAxLCBbdG8gZGlzYWJsZSBHb3BoZXJdKQorICAgICAgIEFDX1NVQlNUKENVUkxfRElTQUJMRV9HT1BIRVIsIFsxXSkKKyAgICAgICA7OworICAqKSAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgIDs7CisgIGVzYWMgXSwKKyAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKykKKworCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIENoZWNrIGZvciBidWlsdC1pbiBtYW51YWwKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBwcm92aWRlIGJ1aWx0LWluIG1hbnVhbF0pCitBQ19BUkdfRU5BQkxFKG1hbnVhbCwKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1tYW51YWxdLFtFbmFibGUgYnVpbHQtaW4gbWFudWFsXSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbWFudWFsXSxbRGlzYWJsZSBidWlsdC1pbiBtYW51YWxdKSwKK1sgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgICA7OworICAqKSAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgIFVTRV9NQU5VQUw9IjEiCisgICAgICAgOzsKKyAgZXNhYyBdLAorICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgIFVTRV9NQU5VQUw9IjEiCispCitkbmwgVGhlIGFjdHVhbCB1c2Ugb2YgdGhlIFVTRV9NQU5VQUwgdmFyaWFibGUgaXMgZG9uZSBtdWNoIGxhdGVyIGluIHRoaXMKK2RubCBzY3JpcHQgdG8gYWxsb3cgb3RoZXIgYWN0aW9ucyB0byBkaXNhYmxlIGl0IGFzIHdlbGwuCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBkaXNhYmxlIEMgY29kZSBnZW5lcmF0aW9uIHN1cHBvcnQKK2RubAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBnZW5lcmF0aW9uIG9mIEMgY29kZV0pCitBQ19BUkdfRU5BQkxFKGxpYmN1cmxfb3B0aW9uLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmN1cmwtb3B0aW9uXSxbRW5hYmxlIC0tbGliY3VybCBDIGNvZGUgZ2VuZXJhdGlvbiBzdXBwb3J0XSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGliY3VybC1vcHRpb25dLFtEaXNhYmxlIC0tbGliY3VybCBDIGNvZGUgZ2VuZXJhdGlvbiBzdXBwb3J0XSksCitbIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgQUNfREVGSU5FKENVUkxfRElTQUJMRV9MSUJDVVJMX09QVElPTiwgMSwgW3RvIGRpc2FibGUgLS1saWJjdXJsIEMgY29kZSBnZW5lcmF0aW9uIG9wdGlvbl0pCisgICAgICAgY3VybF9saWJjdXJsX21zZz0ibm8iCisgICAgICAgOzsKKyAgKikgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgICA7OworICBlc2FjIF0sCisgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCispCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDVVJMX0NIRUNLX0xJQl9YTkVUCisKK2RubCBnZXRob3N0YnluYW1lIHdpdGhvdXQgbGliIG9yIGluIHRoZSBuc2wgbGliPworQUNfQ0hFQ0tfRlVOQyhnZXRob3N0YnluYW1lLAorICAgICAgICAgICAgICBbSEFWRV9HRVRIT1NUQllOQU1FPSIxIgorICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICBbIEFDX0NIRUNLX0xJQihuc2wsIGdldGhvc3RieW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIQVZFX0dFVEhPU1RCWU5BTUU9IjEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlM9IiRMSUJTIC1sbnNsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgICBdKQorCitpZiB0ZXN0ICIkSEFWRV9HRVRIT1NUQllOQU1FIiAhPSAiMSIKK3RoZW4KKyAgZG5sIGdldGhvc3RieW5hbWUgaW4gdGhlIHNvY2tldCBsaWI/CisgIEFDX0NIRUNLX0xJQihzb2NrZXQsIGdldGhvc3RieW5hbWUsCisgICAgICAgICAgICAgICBbSEFWRV9HRVRIT1NUQllOQU1FPSIxIgorICAgICAgICAgICAgICAgTElCUz0iJExJQlMgLWxzb2NrZXQiCisgICAgICAgICAgICAgICBdKQorZmkKKworZG5sIEF0IGxlYXN0IG9uZSBzeXN0ZW0gaGFzIGJlZW4gaWRlbnRpZmllZCB0byByZXF1aXJlIEJPVEggbnNsIGFuZCBzb2NrZXQKK2RubCBsaWJzIGF0IHRoZSBzYW1lIHRpbWUgdG8gbGluayBwcm9wZXJseS4KK2lmIHRlc3QgIiRIQVZFX0dFVEhPU1RCWU5BTUUiICE9ICIxIgordGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBnZXRob3N0YnluYW1lIHdpdGggYm90aCBuc2wgYW5kIHNvY2tldCBsaWJzXSkKKyAgbXlfYWNfc2F2ZV9MSUJTPSRMSUJTCisgIExJQlM9Ii1sbnNsIC1sc29ja2V0ICRMSUJTIgorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgXV0sW1sKKyAgICAgIGdldGhvc3RieW5hbWUoKTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBIQVZFX0dFVEhPU1RCWU5BTUU9IjEiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBMSUJTPSRteV9hY19zYXZlX0xJQlMKKyAgXSkKK2ZpCisKK2lmIHRlc3QgIiRIQVZFX0dFVEhPU1RCWU5BTUUiICE9ICIxIgordGhlbgorICBkbmwgVGhpcyBpcyBmb3Igd2luc29jayBzeXN0ZW1zCisgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrX2giID0gInllcyI7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAgKi0qLW1pbmd3MzJjZSopCisgICAgICAgICAgd2luc29ja19MSUI9Ii1sd2luc29jayIKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHdpbnNvY2tfTElCPSItbHdzb2NrMzIiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPSAieWVzIjsgdGhlbgorICAgICAgd2luc29ja19MSUI9Ii1sd3MyXzMyIgorICAgIGZpCisgICAgaWYgdGVzdCAhIC16ICIkd2luc29ja19MSUIiOyB0aGVuCisgICAgICBteV9hY19zYXZlX0xJQlM9JExJQlMKKyAgICAgIExJQlM9IiR3aW5zb2NrX0xJQiAkTElCUyIKKyAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGdldGhvc3RieW5hbWUgaW4gJHdpbnNvY2tfTElCXSkKKyAgICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyNpbmNsdWRlIDx3aW5zb2NrLmg+CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisgICAgICAgIF1dLFtbCisgICAgICAgICAgZ2V0aG9zdGJ5bmFtZSgid3d3LmR1bW15c2l0ZS5jb20iKTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgSEFWRV9HRVRIT1NUQllOQU1FPSIxIgorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgd2luc29ja19MSUI9IiIKKyAgICAgICAgTElCUz0kbXlfYWNfc2F2ZV9MSUJTCisgICAgICBdKQorICAgIGZpCisgIGZpCitmaQorCitpZiB0ZXN0ICIkSEFWRV9HRVRIT1NUQllOQU1FIiAhPSAiMSIKK3RoZW4KKyAgZG5sIFRoaXMgaXMgZm9yIE1pbml4IDMuMQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBnZXRob3N0YnluYW1lIGZvciBNaW5peCAzXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworLyogT2xkZXIgTWluaXggdmVyc2lvbnMgbWF5IG5lZWQgPG5ldC9nZW4vbmV0ZGIuaD4gaGVyZSBpbnN0ZWFkICovCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyAgICBdXSxbWworICAgICAgZ2V0aG9zdGJ5bmFtZSgid3d3LmR1bW15c2l0ZS5jb20iKTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBIQVZFX0dFVEhPU1RCWU5BTUU9IjEiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgXSkKK2ZpCisKK2lmIHRlc3QgIiRIQVZFX0dFVEhPU1RCWU5BTUUiICE9ICIxIgordGhlbgorICBkbmwgVGhpcyBpcyBmb3IgZUNvcyB3aXRoIGEgc3R1YmJlZCBETlMgaW1wbGVtZW50YXRpb24KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgZ2V0aG9zdGJ5bmFtZSBmb3IgZUNvc10pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgXV0sW1sKKyAgICAgIGdldGhvc3RieW5hbWUoInd3dy5kdW1teXNpdGUuY29tIik7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgSEFWRV9HRVRIT1NUQllOQU1FPSIxIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIF0pCitmaQorCitpZiB0ZXN0ICIkSEFWRV9HRVRIT1NUQllOQU1FIiAhPSAiMSIKK3RoZW4KKyAgZG5sIGdldGhvc3RieW5hbWUgaW4gdGhlIG5ldHdvcmsgbGliIC0gZm9yIEhhaWt1IE9TCisgIEFDX0NIRUNLX0xJQihuZXR3b3JrLCBnZXRob3N0YnluYW1lLAorICAgICAgICAgICAgICAgW0hBVkVfR0VUSE9TVEJZTkFNRT0iMSIKKyAgICAgICAgICAgICAgIExJQlM9IiRMSUJTIC1sbmV0d29yayIKKyAgICAgICAgICAgICAgIF0pCitmaQorCitpZiB0ZXN0ICIkSEFWRV9HRVRIT1NUQllOQU1FIiAhPSAiMSIKK3RoZW4KKyAgZG5sIGdldGhvc3RieW5hbWUgaW4gdGhlIG5ldCBsaWIgLSBmb3IgQmVPUworICBBQ19DSEVDS19MSUIobmV0LCBnZXRob3N0YnluYW1lLAorICAgICAgICAgICAgICAgW0hBVkVfR0VUSE9TVEJZTkFNRT0iMSIKKyAgICAgICAgICAgICAgIExJQlM9IiRMSUJTIC1sbmV0IgorICAgICAgICAgICAgICAgXSkKK2ZpCisKKworaWYgdGVzdCAiJEhBVkVfR0VUSE9TVEJZTkFNRSIgIT0gIjEiOyB0aGVuCisgIEFDX01TR19FUlJPUihbY291bGRuJ3QgZmluZCBsaWJyYXJpZXMgZm9yIGdldGhvc3RieW5hbWUoKV0pCitmaQorCitkbmwgcmVzb2x2ZSBsaWI/CitBQ19DSEVDS19GVU5DKHN0cmNhc2VjbXAsICwgWyBBQ19DSEVDS19MSUIocmVzb2x2ZSwgc3RyY2FzZWNtcCkgXSkKKworaWYgdGVzdCAiJGFjX2N2X2xpYl9yZXNvbHZlX3N0cmNhc2VjbXAiID0gIiRhY19jdl9mdW5jX3N0cmNhc2VjbXAiOyB0aGVuCisgIEFDX0NIRUNLX0xJQihyZXNvbHZlLCBzdHJjYXNlY21wLAorICAgICAgICAgICAgICBbTElCUz0iLWxyZXNvbHZlICRMSUJTIl0sCisgICAgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAtbG5zbCkKK2ZpCithY19jdl9mdW5jX3N0cmNhc2VjbXA9Im5vIgorCitDVVJMX0NIRUNLX0xJQlNfQ09OTkVDVAorCitDVVJMX05FVFdPUktfTElCUz0kTElCUworCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIEluIGNhc2UgdGhhdCBmdW5jdGlvbiBjbG9ja19nZXR0aW1lIHdpdGggbW9ub3RvbmljIHRpbWVyIGlzIGF2YWlsYWJsZSwKK2RubCBjaGVjayBmb3IgYWRkaXRpb25hbCByZXF1aXJlZCBsaWJyYXJpZXMuCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQ1VSTF9DSEVDS19MSUJTX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgVGhlIHByZWNlZGluZyBsaWJyYXJ5IGNoZWNrcyBhcmUgYWxsIHBvdGVudGlhbGx5IHVzZWZ1bCBmb3IgdGVzdAorZG5sIHNlcnZlcnMgKGZvciBwcm92aWRpbmcgbmV0d29ya2luZyBzdXBwb3J0KS4gIFNhdmUgdGhlIGxpc3Qgb2YgcmVxdWlyZWQKK2RubCBsaWJyYXJpZXMgYXQgdGhpcyBwb2ludCBmb3IgdXNlIHdoaWxlIGxpbmtpbmcgdGhvc2UgdGVzdCBzZXJ2ZXJzLgorZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1RFU1RfU0VSVkVSX0xJQlM9JExJQlMKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgbGliZ2NjXSkKK0FDX0FSR19FTkFCTEUobGliZ2NjLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmdjY10sW3VzZSBsaWJnY2Mgd2hlbiBsaW5raW5nXSksCitbIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIHllcykKKyAgICAgICAgQUxMX0xJQlM9IiRBTExfTElCUyAtbGdjYyIKKyAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgICA7OworICAqKSAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgOzsKKyAgZXNhYyBdLAorICAgICAgIEFDX01TR19SRVNVTFQobm8pCispCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ2hlY2sgZm9yIExEQVAKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0xEQVBMSUJOQU1FPSIiCitBQ19BUkdfV0lUSChsZGFwLWxpYiwKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtbGRhcC1saWI9bGlibmFtZV0sW1NwZWNpZnkgbmFtZSBvZiBsZGFwIGxpYiBmaWxlXSksCisgW0xEQVBMSUJOQU1FPSIkd2l0aHZhbCJdKQorCitMQkVSTElCTkFNRT0iIgorQUNfQVJHX1dJVEgobGJlci1saWIsCitBQ19IRUxQX1NUUklORyhbLS13aXRoLWxiZXItbGliPWxpYm5hbWVdLFtTcGVjaWZ5IG5hbWUgb2YgbGJlciBsaWIgZmlsZV0pLAorIFtMQkVSTElCTkFNRT0iJHdpdGh2YWwiXSkKKworaWYgdGVzdCB4JENVUkxfRElTQUJMRV9MREFQICE9IHgxIDsgdGhlbgorCisgIENVUkxfQ0hFQ0tfSEVBREVSX0xCRVIKKyAgQ1VSTF9DSEVDS19IRUFERVJfTERBUAorICBDVVJMX0NIRUNLX0hFQURFUl9MREFQU1NMCisgIENVUkxfQ0hFQ0tfSEVBREVSX0xEQVBfU1NMCisKKyAgaWYgdGVzdCAteiAiJExEQVBMSUJOQU1FIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIkYWNfY3ZfbmF0aXZlX3dpbmRvd3MiID0gInllcyI7IHRoZW4KKyAgICAgIGRubCBXaW5kb3dzIHVzZXMgYSBzaW5nbGUgYW5kIHVuaXF1ZSBMREFQIGxpYnJhcnkgbmFtZQorICAgICAgTERBUExJQk5BTUU9IndsZGFwMzIiCisgICAgICBMQkVSTElCTkFNRT0ibm8iCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0ICIkTERBUExJQk5BTUUiIDsgdGhlbgorICAgIEFDX0NIRUNLX0xJQigiJExEQVBMSUJOQU1FIiwgbGRhcF9pbml0LCwgWworICAgICAgQUNfTVNHX1dBUk4oWyIkTERBUExJQk5BTUUiIGlzIG5vdCBhbiBMREFQIGxpYnJhcnk6IExEQVAgZGlzYWJsZWRdKQorICAgICAgQUNfREVGSU5FKENVUkxfRElTQUJMRV9MREFQLCAxLCBbdG8gZGlzYWJsZSBMREFQXSkKKyAgICAgIEFDX1NVQlNUKENVUkxfRElTQUJMRV9MREFQLCBbMV0pXSkKKyAgICAgIEFDX0RFRklORShDVVJMX0RJU0FCTEVfTERBUFMsIDEsIFt0byBkaXNhYmxlIExEQVBTXSkKKyAgICAgIEFDX1NVQlNUKENVUkxfRElTQUJMRV9MREFQUywgWzFdKQorICBlbHNlCisgICAgZG5sIFRyeSB0byBmaW5kIHRoZSByaWdodCBsZGFwIGxpYnJhcmllcyBmb3IgdGhpcyBzeXN0ZW0KKyAgICBDVVJMX0NIRUNLX0xJQlNfTERBUAorICAgIGNhc2UgWC0iJGN1cmxfY3ZfbGRhcF9MSUJTIiBpbgorICAgICAgWC11bmtub3duKQorICAgICAgICBBQ19NU0dfV0FSTihbQ2Fubm90IGZpbmQgbGlicmFyaWVzIGZvciBMREFQIHN1cHBvcnQ6IExEQVAgZGlzYWJsZWRdKQorICAgICAgICBBQ19ERUZJTkUoQ1VSTF9ESVNBQkxFX0xEQVAsIDEsIFt0byBkaXNhYmxlIExEQVBdKQorICAgICAgICBBQ19TVUJTVChDVVJMX0RJU0FCTEVfTERBUCwgWzFdKQorICAgICAgICBBQ19ERUZJTkUoQ1VSTF9ESVNBQkxFX0xEQVBTLCAxLCBbdG8gZGlzYWJsZSBMREFQU10pCisgICAgICAgIEFDX1NVQlNUKENVUkxfRElTQUJMRV9MREFQUywgWzFdKQorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK2ZpCisKK2lmIHRlc3QgeCRDVVJMX0RJU0FCTEVfTERBUCAhPSB4MSA7IHRoZW4KKworICBpZiB0ZXN0ICIkTEJFUkxJQk5BTUUiIDsgdGhlbgorICAgIGRubCBJZiBuYW1lIGlzICJubyIgdGhlbiBkb24ndCBkZWZpbmUgdGhpcyBsaWJyYXJ5IGF0IGFsbAorICAgIGRubCAoaXQncyBvbmx5IG5lZWRlZCBpZiBsaWJsZGFwLnNvJ3MgZGVwZW5kZW5jaWVzIGFyZSBicm9rZW4pLgorICAgIGlmIHRlc3QgIiRMQkVSTElCTkFNRSIgIT0gIm5vIiA7IHRoZW4KKyAgICAgIEFDX0NIRUNLX0xJQigiJExCRVJMSUJOQU1FIiwgYmVyX2ZyZWUsLCBbCisgICAgICAgIEFDX01TR19XQVJOKFsiJExCRVJMSUJOQU1FIiBpcyBub3QgYW4gTEJFUiBsaWJyYXJ5OiBMREFQIGRpc2FibGVkXSkKKyAgICAgICAgQUNfREVGSU5FKENVUkxfRElTQUJMRV9MREFQLCAxLCBbdG8gZGlzYWJsZSBMREFQXSkKKyAgICAgICAgQUNfU1VCU1QoQ1VSTF9ESVNBQkxFX0xEQVAsIFsxXSldKQorICAgICAgICBBQ19ERUZJTkUoQ1VSTF9ESVNBQkxFX0xEQVBTLCAxLCBbdG8gZGlzYWJsZSBMREFQU10pCisgICAgICAgIEFDX1NVQlNUKENVUkxfRElTQUJMRV9MREFQUywgWzFdKQorICAgIGZpCisgIGZpCitmaQorCitpZiB0ZXN0IHgkQ1VSTF9ESVNBQkxFX0xEQVAgIT0geDEgOyB0aGVuCisgIEFDX0NIRUNLX0ZVTkNTKFtsZGFwX3VybF9wYXJzZSBsZGFwX2luaXRfZmRdKQorCisgIGlmIHRlc3QgIiRMREFQTElCTkFNRSIgPSAid2xkYXAzMiI7IHRoZW4KKyAgICBjdXJsX2xkYXBfbXNnPSJlbmFibGVkICh3aW5sZGFwKSIKKyAgICBBQ19ERUZJTkUoQ1VSTF9MREFQX1dJTiwgMSwgW1VzZSBXaW5kb3dzIExEQVAgaW1wbGVtZW50YXRpb25dKQorICBlbHNlCisgICAgY3VybF9sZGFwX21zZz0iZW5hYmxlZCAoT3BlbkxEQVApIgorICAgIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19sZGFwX2luaXRfZmQiID0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoVVNFX09QRU5MREFQLCAxLCBbVXNlIE9wZW5MREFQLXNwZWNpZmljIGNvZGVdKQorICAgICAgQUNfU1VCU1QoVVNFX09QRU5MREFQLCBbMV0pCisgICAgZmkKKyAgZmkKK2ZpCisKK2lmIHRlc3QgeCRDVVJMX0RJU0FCTEVfTERBUFMgIT0geDEgOyB0aGVuCisgICAgY3VybF9sZGFwc19tc2c9ImVuYWJsZWQiCitmaQorCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIENoZWNrcyBmb3IgSVB2NgorZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBpcHY2XSkKK0FDX0FSR19FTkFCTEUoaXB2NiwKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pcHY2XSxbRW5hYmxlIGlwdjYgKHdpdGggaXB2NCkgc3VwcG9ydF0pCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWlwdjZdLFtEaXNhYmxlIGlwdjYgc3VwcG9ydF0pLAorWyBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgIGlwdjY9bm8KKyAgICAgICA7OworICAqKSAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgIGlwdjY9eWVzCisgICAgICAgOzsKKyAgZXNhYyBdLAorCisgIEFDX1RSWV9SVU4oWyAvKiBpcyBBRl9JTkVUNiBhdmFpbGFibGU/ICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorbWFpbigpCit7CisgaWYgKHNvY2tldChBRl9JTkVUNiwgU09DS19TVFJFQU0sIDApIDwgMCkKKyAgIGV4aXQoMSk7CisgZWxzZQorICAgZXhpdCgwKTsKK30KK10sCisgIEFDX01TR19SRVNVTFQoeWVzKQorICBpcHY2PXllcywKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgaXB2Nj1ubywKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgaXB2Nj1ubworKSkKKworaWYgdGVzdCAiJGlwdjYiID0gInllcyI7IHRoZW4KKyAgY3VybF9pcHY2X21zZz0iZW5hYmxlZCIKK2ZpCisKKyMgQ2hlY2sgaWYgc3RydWN0IHNvY2thZGRyX2luNiBoYXZlIHNpbjZfc2NvcGVfaWQgbWVtYmVyCitpZiB0ZXN0ICIkaXB2NiIgPSB5ZXM7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJ1Y3Qgc29ja2FkZHJfaW42IGhhcyBzaW42X3Njb3BlX2lkIG1lbWJlcl0pCisgIEFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XSAsCisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgczsgcy5zaW42X3Njb3BlX2lkID0gMDsgLCBoYXZlX3NpbjZfc2NvcGVfaWQ9eWVzKQorICBpZiB0ZXN0ICIkaGF2ZV9zaW42X3Njb3BlX2lkIiA9IHllczsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FKEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQsIDEsIFtEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc29ja2FkZHJfaW42IGhhcyB0aGUgc2luNl9zY29wZV9pZCBtZW1iZXJdKQorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorZmkKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBDaGVjayBpZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbGxvd3MgcHJvZ3JhbXMgdG8gd3JpdGUgdG8gdGhlaXIgb3duIGFyZ3ZbXQorZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQUNfTVNHX0NIRUNLSU5HKFtpZiBhcmd2IGNhbiBiZSB3cml0dGVuIHRvXSkKK0FDX1JVTl9JRkVMU0UoWworICBBQ19MQU5HX1NPVVJDRShbWworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiogYXJndikgeworICAgIGFyZ3ZbMF1bMF0gPSAnICc7CisgICAgcmV0dXJuIChhcmd2WzBdWzBdID09ICcgJyk/MDoxOworfQorICBdXSkKK10sWworICBjdXJsX2N2X3dyaXRhYmxlX2FyZ3Y9eWVzCitdLFsKKyAgY3VybF9jdl93cml0YWJsZV9hcmd2PW5vCitdLFsKKyAgY3VybF9jdl93cml0YWJsZV9hcmd2PWNyb3NzCitdKQorY2FzZSAkY3VybF9jdl93cml0YWJsZV9hcmd2IGluCit5ZXMpCisgICAgICAgIEFDX0RFRklORShIQVZFX1dSSVRBQkxFX0FSR1YsIDEsIFtEZWZpbmUgdGhpcyBzeW1ib2wgaWYgeW91ciBPUyBzdXBwb3J0cyBjaGFuZ2luZyB0aGUgY29udGVudHMgb2YgYXJndl0pCisgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICA7Oworbm8pCisgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgIDs7CisqKQorICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgICBBQ19NU0dfV0FSTihbdGhlIHByZXZpb3VzIGNoZWNrIGNvdWxkIG5vdCBiZSBtYWRlIGRlZmF1bHQgd2FzIHVzZWRdKQorICAgICAgICA7OworZXNhYworCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIENoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgS2VyYmVyb3M0IGxpYnJhcmllcyBhbmQgaGVhZGVycworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQUNfQVJHX1dJVEgoa3JiNC1pbmNsdWRlcywKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGgta3JiNC1pbmNsdWRlcz1ESVJdLAorICAgICAgICAgICAgICAgW1NwZWNpZnkgbG9jYXRpb24gb2Yga2VyYmVyb3M0IGhlYWRlcnNdKSxbCisgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSR3aXRodmFsIgorIEtSQjRJTkM9IiR3aXRodmFsIgorIHdhbnRfa3JiND15ZXMKKyBdKQorCitBQ19BUkdfV0lUSChrcmI0LWxpYnMsCitBQ19IRUxQX1NUUklORyhbLS13aXRoLWtyYjQtbGlicz1ESVJdLFtTcGVjaWZ5IGxvY2F0aW9uIG9mIGtlcmJlcm9zNCBsaWJzXSksWworIExERkxBR1M9IiRMREZMQUdTIC1MJHdpdGh2YWwiCisgS1JCNExJQj0iJHdpdGh2YWwiCisgd2FudF9rcmI0PXllcworIF0pCisKKworT1BUX0tSQjQ9b2ZmCitBQ19BUkdfV0lUSChrcmI0LGRubAorQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1rcmI0PURJUl0sW3doZXJlIHRvIGxvb2sgZm9yIEtlcmJlcm9zNF0pLFsKKyAgT1BUX0tSQjQ9IiR3aXRodmFsIgorICBpZiB0ZXN0IFgiJE9QVF9LUkI0IiAhPSBYbm87IHRoZW4KKyAgICB3YW50X2tyYjQ9InllcyIKKyAgICBpZiB0ZXN0IFgiJE9QVF9LUkI0IiAhPSBYeWVzOyB0aGVuCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtTCRPUFRfS1JCNC9saWIkbGlic3VmZiIKKyAgICAgIEtSQjRMSUI9IiRPUFRfS1JCNC9saWIkbGlic3VmZiIKKyAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkT1BUX0tSQjQvaW5jbHVkZSIKKyAgICAgIEtSQjRJTkM9IiRPUFRfS1JCNC9pbmNsdWRlIgorICAgIGZpCisgIGZpCisgXSkKKworQUNfTVNHX0NIRUNLSU5HKFtpZiBLZXJiZXJvczQgc3VwcG9ydCBpcyByZXF1ZXN0ZWRdKQorCitpZiB0ZXN0ICIkd2FudF9rcmI0IiA9IHllcwordGhlbgorICBpZiB0ZXN0ICIkaXB2NiIgPSAieWVzIjsgdGhlbgorICAgIGVjaG8ga3JiNCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIElQdjYKKyAgICBleGl0IDEKKyAgZmkKKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCisKKyAgZG5sIENoZWNrIGZvciAmIGhhbmRsZSBhcmd1bWVudCB0byAtLXdpdGgta3JiNAorCisgIEFDX01TR19DSEVDS0lORyh3aGVyZSB0byBsb29rIGZvciBLZXJiZXJvczQpCisgIGlmIHRlc3QgWCIkT1BUX0tSQjQiID0gWHllcworICB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbZGVmYXVsdHNdKQorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbGlicyBpbiAkS1JCNExJQiwgaGVhZGVycyBpbiAkS1JCNElOQ10pCisgIGZpCisKKyAgZG5sIENoZWNrIGZvciBERVMgbGlicmFyeQorICBBQ19DSEVDS19MSUIoZGVzLCBkZXNfcGNiY19lbmNyeXB0LAorICBbCisgICAgQUNfQ0hFQ0tfSEVBREVSUyhkZXMuaCkKKworICAgIGRubCByZXNvbHYgbGliPworICAgIEFDX0NIRUNLX0ZVTkMocmVzX3NlYXJjaCwgLCBbQUNfQ0hFQ0tfTElCKHJlc29sdiwgcmVzX3NlYXJjaCldKQorCisgICAgZG5sIENoZWNrIGZvciB0aGUgS2VyYmVyb3M0IGxpYnJhcnkKKyAgICBBQ19DSEVDS19MSUIoa3JiLCBrcmJfbmV0X3JlYWQsCisgICAgWworICAgICAgZG5sIENoZWNrIGZvciBoZWFkZXIgZmlsZXMKKyAgICAgIEFDX0NIRUNLX0hFQURFUlMoa3JiLmgpCisKKyAgICAgIGRubCB3ZSBmb3VuZCB0aGUgcmVxdWlyZWQgbGlicmFyaWVzLCBhZGQgdG8gTElCUworICAgICAgTElCUz0iLWxrcmIgLWxjb21fZXJyIC1sZGVzICRMSUJTIgorCisgICAgICBkbmwgQ2hlY2sgZm9yIGZ1bmN0aW9uIGtyYl9nZXRfb3VyX2lwX2Zvcl9yZWFsbQorICAgICAgZG5sIHRoaXMgaXMgbmVlZGVkIGZvciBOQVQgbmV0d29ya3MKKyAgICAgIEFDX0NIRUNLX0ZVTkNTKGtyYl9nZXRfb3VyX2lwX2Zvcl9yZWFsbSkKKworICAgICAgZG5sIGFkZCBkZWZpbmUgS1JCNAorICAgICAgQUNfREVGSU5FKEhBVkVfS1JCNCwgMSwKKyAgICAgIFtpZiB5b3UgaGF2ZSB0aGUgS2VyYmVyb3M0IGxpYnJhcmllcyAoaW5jbHVkaW5nIC1sZGVzKV0pCisKKyAgICAgIGRubCBzdWJzdGl0dXRlIGl0IHRvbyEKKyAgICAgIEtSQjRfRU5BQkxFRD0xCisgICAgICBBQ19TVUJTVChLUkI0X0VOQUJMRUQpCisKKyAgICAgIGN1cmxfa3JiNF9tc2c9ImVuYWJsZWQiCisKKyAgICAgIGRubCB0aGUga3JiNCBzdHVmZiBuZWVkcyBhIHN0cmxjcHkoKQorICAgICAgQUNfQ0hFQ0tfRlVOQ1Moc3RybGNweSkKKworICAgIF0pCisgIF0pCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIENoZWNrIGZvciBGQm9wZW5zc2woU1BORUdPKSBsaWJyYXJpZXMKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0FDX0FSR19XSVRIKHNwbmVnbywKKyAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1zcG5lZ289RElSXSwKKyAgICAgICAgICAgICAgICAgW1NwZWNpZnkgbG9jYXRpb24gb2YgU1BORUdPIGxpYnJhcnkgZmJvcGVuc3NsXSksIFsKKyAgU1BORUdPX1JPT1Q9IiR3aXRodmFsIgorICBpZiB0ZXN0IHgiJFNQTkVHT19ST09UIiAhPSB4bm87IHRoZW4KKyAgICB3YW50X3NwbmVnbz0ieWVzIgorICBmaQorXSkKKworQUNfTVNHX0NIRUNLSU5HKFtpZiBTUE5FR08gc3VwcG9ydCBpcyByZXF1ZXN0ZWRdKQoraWYgdGVzdCB4IiR3YW50X3NwbmVnbyIgPSB4eWVzOyB0aGVuCisKKyAgaWYgdGVzdCBYIiRTUE5FR09fUk9PVCIgPSBYeWVzOyB0aGVuCisgICAgIEFDX01TR19FUlJPUihbRkJPcGVuU1NMIGxpYnMgYW5kL29yIGRpcmVjdG9yaWVzIHdlcmUgbm90IGZvdW5kIHdoZXJlIHNwZWNpZmllZCFdKQorICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRTUE5FR09fTElCX0RJUiI7IHRoZW4KKyAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLUwkU1BORUdPX1JPT1QgLWxmYm9wZW5zc2wiCisgICAgIGVsc2UKKyAgICAgICAgTERGTEFHUz0iJExERkxBR1MgJFNQTkVHT19MSUJfRElSIgorICAgICBmaQorCisgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICBBQ19ERUZJTkUoSEFWRV9TUE5FR08sIDEsCisgICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIFNQTkVHTyBsaWJyYXJ5IGZib3BlbnNzbF0pCisgICAgIGN1cmxfc3BuZWdvX21zZz0iZW5hYmxlZCIKKyAgZmkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ2hlY2sgZm9yIEdTUy1BUEkgbGlicmFyaWVzCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitkbmwgY2hlY2sgZm9yIGdzcyBzdHVmZiBpbiB0aGUgL3VzciBhcyBkZWZhdWx0CisKK0dTU0FQSV9ST09UPSIvdXNyIgorQUNfQVJHX1dJVEgoZ3NzYXBpLWluY2x1ZGVzLAorICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWdzc2FwaS1pbmNsdWRlcz1ESVJdLAorICAgICAgICAgICAgICAgICBbU3BlY2lmeSBsb2NhdGlvbiBvZiBHU1NBUEkgaGVhZGVyXSksCisgIFsgR1NTQVBJX0lOQ1M9Ii1JJHdpdGh2YWwiCisgICAgd2FudF9nc3M9InllcyIgXQorKQorCitBQ19BUkdfV0lUSChnc3NhcGktbGlicywKKyAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1nc3NhcGktbGlicz1ESVJdLAorICAgICAgICAgICAgICAgICBbU3BlY2lmeSBsb2NhdGlvbiBvZiBHU1NBUEkgbGlic10pLAorICBbIEdTU0FQSV9MSUJfRElSPSItTCR3aXRodmFsIgorICAgIHdhbnRfZ3NzPSJ5ZXMiIF0KKykKKworQUNfQVJHX1dJVEgoZ3NzYXBpLAorICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWdzc2FwaT1ESVJdLAorICAgICAgICAgICAgICAgICBbV2hlcmUgdG8gbG9vayBmb3IgR1NTQVBJXSksIFsKKyAgR1NTQVBJX1JPT1Q9IiR3aXRodmFsIgorICBpZiB0ZXN0IHgiJEdTU0FQSV9ST09UIiAhPSB4bm87IHRoZW4KKyAgICB3YW50X2dzcz0ieWVzIgorICAgIGlmIHRlc3QgeCIkR1NTQVBJX1JPT1QiID0geHllczsgdGhlbgorICAgICAgZG5sIGlmIHllcywgdGhlbiB1c2UgZGVmYXVsdCByb290CisgICAgICBHU1NBUElfUk9PVD0iL3VzciIKKyAgICBmaQorICBmaQorXSkKKworc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorQUNfTVNHX0NIRUNLSU5HKFtpZiBHU1NBUEkgc3VwcG9ydCBpcyByZXF1ZXN0ZWRdKQoraWYgdGVzdCB4IiR3YW50X2dzcyIgPSB4eWVzOyB0aGVuCisgIEFDX01TR19SRVNVTFQoeWVzKQorCisgIGlmIHRlc3QgLXogIiRHU1NBUElfSU5DUyI7IHRoZW4KKyAgICAgaWYgdGVzdCAtZiAiJEdTU0FQSV9ST09UL2Jpbi9rcmI1LWNvbmZpZyI7IHRoZW4KKyAgICAgICAgR1NTQVBJX0lOQ1M9YCRHU1NBUElfUk9PVC9iaW4va3JiNS1jb25maWcgLS1jZmxhZ3MgZ3NzYXBpYAorICAgICBlbGlmIHRlc3QgIiRHU1NBUElfUk9PVCIgIT0gInllcyI7IHRoZW4KKyAgICAgICAgR1NTQVBJX0lOQ1M9Ii1JJEdTU0FQSV9ST09UL2luY2x1ZGUiCisgICAgIGZpCisgIGZpCisKKyAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkR1NTQVBJX0lOQ1MiCisKKyAgQUNfQ0hFQ0tfSEVBREVSKGdzcy5oLAorICAgIFsKKyAgICAgIGRubCBmb3VuZCBpbiB0aGUgZ2l2ZW4gZGlycworICAgICAgQUNfREVGSU5FKEhBVkVfR1NTR05VLCAxLCBbaWYgeW91IGhhdmUgdGhlIEdOVSBnc3NhcGkgbGlicmFyaWVzXSkKKyAgICAgIGdudV9nc3M9eWVzCisgICAgXSwKKyAgICBbCisgICAgICBkbmwgbm90IGZvdW5kLCBjaGVjayBIZWltZGFsIG9yIE1JVAorICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhbZ3NzYXBpL2dzc2FwaS5oXSwgW10sIFtub3RfbWl0PTFdKQorICAgICAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICAgICAgW2dzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oIGdzc2FwaS9nc3NhcGlfa3JiNS5oXSwKKyAgICAgICAgW10sCisgICAgICAgIFtub3RfbWl0PTFdLAorICAgICAgICBbCitBQ19JTkNMVURFU19ERUZBVUxUCisjaWZkZWYgSEFWRV9HU1NBUElfR1NTQVBJX0gKKyNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpLmg+CisjZW5kaWYKKyAgICAgICAgXSkKKyAgICAgIGlmIHRlc3QgIngkbm90X21pdCIgPSAieDEiOyB0aGVuCisgICAgICAgIGRubCBNSVQgbm90IGZvdW5kLCBjaGVjayBmb3IgSGVpbWRhbAorICAgICAgICBBQ19DSEVDS19IRUFERVIoZ3NzYXBpLmgsCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgIGRubCBmb3VuZAorICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9HU1NIRUlNREFMLCAxLCBbaWYgeW91IGhhdmUgdGhlIEhlaW1kYWwgZ3NzYXBpIGxpYnJhcmllc10pCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgWworICAgICAgICAgICAgICBkbmwgbm8gaGVhZGVyIGZvdW5kLCBkaXNhYmxpbmcgR1NTCisgICAgICAgICAgICAgIHdhbnRfZ3NzPW5vCisgICAgICAgICAgICAgIEFDX01TR19XQVJOKGRpc2FibGluZyBHU1NBUEkgc2luY2Ugbm8gaGVhZGVyIGZpbGVzIHdhcyBmb3VuZCkKKyAgICAgICAgICAgIF0KKyAgICAgICAgICApCisgICAgICBlbHNlCisgICAgICAgIGRubCBNSVQgZm91bmQKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfR1NTTUlULCAxLCBbaWYgeW91IGhhdmUgdGhlIE1JVCBnc3NhcGkgbGlicmFyaWVzXSkKKyAgICAgICAgZG5sIGNoZWNrIGlmIHdlIGhhdmUgYSByZWFsbHkgb2xkIE1JVCBrZXJiZXJvcyAoPD0gMS4yKQorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdzc2FwaSBoZWFkZXJzIGRlY2xhcmUgR1NTX0NfTlRfSE9TVEJBU0VEX1NFUlZJQ0VdKQorICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaS5oPgorI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oPgorI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGlfa3JiNS5oPgorICAgICAgICAgIF1dLFtbCisgICAgICAgICAgICBnc3NfaW1wb3J0X25hbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9NX3VpbnQzMiAqKTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdzc19idWZmZXJfdCkwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnc3NfbmFtZV90ICopMCk7CisgICAgICAgICAgXV0pCisgICAgICAgIF0sWworICAgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIF0sWworICAgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9PTERfR1NTTUlULCAxLAorICAgICAgICAgICAgW2lmIHlvdSBoYXZlIGFuIG9sZCBNSVQgZ3NzYXBpIGxpYnJhcnksIGxhY2tpbmcgR1NTX0NfTlRfSE9TVEJBU0VEX1NFUlZJQ0VdKQorICAgICAgICBdKQorICAgICAgZmkKKyAgICBdCisgICkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCitpZiB0ZXN0IHgiJHdhbnRfZ3NzIiA9IHh5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfR1NTQVBJLCAxLCBbaWYgeW91IGhhdmUgdGhlIGdzc2FwaSBsaWJyYXJpZXNdKQorCisgIGN1cmxfZ3NzX21zZz0iZW5hYmxlZCAoTUlUL0hlaW1kYWwpIgorCisgIGlmIHRlc3QgLW4gIiRnbnVfZ3NzIjsgdGhlbgorICAgIGN1cmxfZ3NzX21zZz0iZW5hYmxlZCAoR05VIEdTUykiCisgICAgTERGTEFHUz0iJExERkxBR1MgJEdTU0FQSV9MSUJfRElSIgorICAgIExJQlM9IiRMSUJTIC1sZ3NzIgorICBlbGlmIHRlc3QgLXogIiRHU1NBUElfTElCX0RJUiI7IHRoZW4KKyAgICAgY2FzZSAkaG9zdCBpbgorICAgICAqLSotZGFyd2luKikKKyAgICAgICAgTElCUz0iJExJQlMgLWxnc3NhcGlfa3JiNSAtbHJlc29sdiIKKyAgICAgICAgOzsKKyAgICAgKikKKyAgICAgICAgaWYgdGVzdCAtZiAiJEdTU0FQSV9ST09UL2Jpbi9rcmI1LWNvbmZpZyI7IHRoZW4KKyAgICAgICAgICAgZG5sIGtyYjUtY29uZmlnIGRvZXNuJ3QgaGF2ZSAtLWxpYnMtb25seS1MIG9yIHNpbWlsYXIsIHB1dCBldmVyeXRoaW5nCisgICAgICAgICAgIGRubCBpbnRvIExJQlMKKyAgICAgICAgICAgZ3NzX2xpYnM9YCRHU1NBUElfUk9PVC9iaW4va3JiNS1jb25maWcgLS1saWJzIGdzc2FwaWAKKyAgICAgICAgICAgTElCUz0iJExJQlMgJGdzc19saWJzIgorICAgICAgICBlbGlmIHRlc3QgIiRHU1NBUElfUk9PVCIgIT0gInllcyI7IHRoZW4KKyAgICAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLUwkR1NTQVBJX1JPT1QvbGliJGxpYnN1ZmYiCisgICAgICAgICAgIExJQlM9IiRMSUJTIC1sZ3NzYXBpIgorICAgICAgICBlbHNlCisgICAgICAgICAgIExJQlM9IiRMSUJTIC1sZ3NzYXBpIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICBlc2FjCisgIGVsc2UKKyAgICAgTERGTEFHUz0iJExERkxBR1MgJEdTU0FQSV9MSUJfRElSIgorICAgICBMSUJTPSIkTElCUyAtbGdzc2FwaSIKKyAgZmkKK2Vsc2UKKyAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorZmkKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIFNTTCBsaWJyYXJpZXMgYW5kIGhlYWRlcnMKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK2RubCBEZWZhdWx0IHRvIGNvbXBpbGVyICYgbGlua2VyIGRlZmF1bHRzIGZvciBTU0wgZmlsZXMgJiBsaWJyYXJpZXMuCitPUFRfU1NMPW9mZgorZG5sIERlZmF1bHQgdG8gbm8gQ0EgYnVuZGxlCitjYT0ibm8iCitBQ19BUkdfV0lUSChzc2wsZG5sCitBQ19IRUxQX1NUUklORyhbLS13aXRoLXNzbD1QQVRIXSxbV2hlcmUgdG8gbG9vayBmb3IgT3BlblNTTCwgUEFUSCBwb2ludHMgdG8gdGhlIFNTTCBpbnN0YWxsYXRpb24gKGRlZmF1bHQ6IC91c3IvbG9jYWwvc3NsKTsgd2hlbiBwb3NzaWJsZSwgc2V0IHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaW5zdGVhZCBvZiB1c2luZyB0aGlzIG9wdGlvbl0pCitBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LXNzbF0sIFtkaXNhYmxlIE9wZW5TU0xdKSwKKyAgT1BUX1NTTD0kd2l0aHZhbCkKKworaWYgdGVzdCBYIiRPUFRfU1NMIiAhPSBYbm87IHRoZW4KKyAgZG5sIGJhY2t1cCB0aGUgcHJlLXNzbCB2YXJpYWJsZXMKKyAgQ0xFQU5MREZMQUdTPSIkTERGTEFHUyIKKyAgQ0xFQU5DUFBGTEFHUz0iJENQUEZMQUdTIgorICBDTEVBTkxJQlM9IiRMSUJTIgorCisgIGNhc2UgIiRPUFRfU1NMIiBpbgorICB5ZXMpCisgICAgZG5sIC0td2l0aC1zc2wgKHdpdGhvdXQgcGF0aCkgdXNlZAorICAgIGlmIHRlc3QgeCRjcm9zc19jb21waWxpbmcgIT0geHllczsgdGhlbgorICAgICAgZG5sIG9ubHkgZG8gcGtnLWNvbmZpZyBtYWdpYyB3aGVuIG5vdCBjcm9zcy1jb21waWxpbmcKKyAgICAgIFBLR1RFU1Q9InllcyIKKyAgICBmaQorICAgIFBSRUZJWF9PUEVOU1NMPS91c3IvbG9jYWwvc3NsCisgICAgTElCX09QRU5TU0w9IiRQUkVGSVhfT1BFTlNTTC9saWIkbGlic3VmZiIKKyAgICA7OworICBvZmYpCisgICAgZG5sIG5vIC0td2l0aC1zc2wgb3B0aW9uIGdpdmVuLCBqdXN0IGNoZWNrIGRlZmF1bHQgcGxhY2VzCisgICAgaWYgdGVzdCB4JGNyb3NzX2NvbXBpbGluZyAhPSB4eWVzOyB0aGVuCisgICAgICBkbmwgb25seSBkbyBwa2ctY29uZmlnIG1hZ2ljIHdoZW4gbm90IGNyb3NzLWNvbXBpbGluZworICAgICAgUEtHVEVTVD0ieWVzIgorICAgIGZpCisgICAgUFJFRklYX09QRU5TU0w9CisgICAgOzsKKyAgKikKKyAgICBkbmwgY2hlY2sgdGhlIGdpdmVuIC0td2l0aC1zc2wgc3BvdAorICAgIFBLR1RFU1Q9Im5vIgorICAgIFBSRUZJWF9PUEVOU1NMPSRPUFRfU1NMCisKKyAgICBkbmwgVHJ5IHBrZy1jb25maWcgZXZlbiB3aGVuIGNyb3NzLWNvbXBpbGluZy4gIFNpbmNlIHdlCisgICAgZG5sIHNwZWNpZnkgUEtHX0NPTkZJR19MSUJESVIgd2UncmUgb25seSBsb29raW5nIHdoZXJlCisgICAgZG5sIHRoZSB1c2VyIHRvbGQgdXMgdG8gbG9vaworICAgIE9QRU5TU0xfUENESVI9IiRPUFRfU1NML2xpYi9wa2djb25maWciCisgICAgQUNfTVNHX05PVElDRShbUEtHX0NPTkZJR19MSUJESVIgd2lsbCBiZSBzZXQgdG8gIiRPUEVOU1NMX1BDRElSIl0pCisgICAgaWYgdGVzdCAtZiAiJE9QRU5TU0xfUENESVIvb3BlbnNzbC5wYyI7IHRoZW4KKyAgICAgIFBLR1RFU1Q9InllcyIKKyAgICBmaQorCisgICAgZG5sIGluIGNhc2UgcGtnLWNvbmZpZyBjb21lcyB1cCBlbXB0eSwgdXNlIHdoYXQgd2UgZ290CisgICAgZG5sIHZpYSAtLXdpdGgtc3NsCisgICAgTElCX09QRU5TU0w9IiRQUkVGSVhfT1BFTlNTTC9saWIkbGlic3VmZiIKKyAgICBpZiB0ZXN0ICIkUFJFRklYX09QRU5TU0wiICE9ICIvdXNyIiA7IHRoZW4KKyAgICAgIFNTTF9MREZMQUdTPSItTCRMSUJfT1BFTlNTTCIKKyAgICAgIFNTTF9DUFBGTEFHUz0iLUkkUFJFRklYX09QRU5TU0wvaW5jbHVkZSIKKyAgICBmaQorICAgIFNTTF9DUFBGTEFHUz0iJFNTTF9DUFBGTEFHUyAtSSRQUkVGSVhfT1BFTlNTTC9pbmNsdWRlL29wZW5zc2wiCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgIiRQS0dURVNUIiA9ICJ5ZXMiOyB0aGVuCisKKyAgICBDVVJMX0NIRUNLX1BLR0NPTkZJRyhvcGVuc3NsLCBbJE9QRU5TU0xfUENESVJdKQorCisgICAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKyAgICAgIFNTTF9MSUJTPWBDVVJMX0VYUE9SVF9QQ0RJUihbJE9QRU5TU0xfUENESVJdKSBkbmwKKyAgICAgICAgJFBLR0NPTkZJRyAtLWxpYnMtb25seS1sIG9wZW5zc2wgMj4vZGV2L251bGxgCisKKyAgICAgIFNTTF9MREZMQUdTPWBDVVJMX0VYUE9SVF9QQ0RJUihbJE9QRU5TU0xfUENESVJdKSBkbmwKKyAgICAgICAgJFBLR0NPTkZJRyAtLWxpYnMtb25seS1MIG9wZW5zc2wgMj4vZGV2L251bGxgCisKKyAgICAgIFNTTF9DUFBGTEFHUz1gQ1VSTF9FWFBPUlRfUENESVIoWyRPUEVOU1NMX1BDRElSXSkgZG5sCisgICAgICAgICRQS0dDT05GSUcgLS1jZmxhZ3Mtb25seS1JIG9wZW5zc2wgMj4vZGV2L251bGxgCisKKyAgICAgIEFDX01TR19OT1RJQ0UoW3BrZy1jb25maWc6IFNTTF9MSUJTOiAiJFNTTF9MSUJTIl0pCisgICAgICBBQ19NU0dfTk9USUNFKFtwa2ctY29uZmlnOiBTU0xfTERGTEFHUzogIiRTU0xfTERGTEFHUyJdKQorICAgICAgQUNfTVNHX05PVElDRShbcGtnLWNvbmZpZzogU1NMX0NQUEZMQUdTOiAiJFNTTF9DUFBGTEFHUyJdKQorCisgICAgICBMSUJfT1BFTlNTTD1gZWNobyAkU1NMX0xERkxBR1MgfCBzZWQgLWUgJ3MvLUwvL2cnYAorCisgICAgICBkbmwgdXNlIHRoZSB2YWx1ZXMgcGtnLWNvbmZpZyByZXBvcnRlZC4gIFRoaXMgaXMgaGVyZQorICAgICAgZG5sIGluc3RlYWQgb2YgYmVsb3cgd2l0aCBDUFBGTEFHUyBhbmQgTERGTEFHUyBiZWNhdXNlIHdlIG9ubHkKKyAgICAgIGRubCBsZWFybiBhYm91dCB0aGlzIHZpYSBwa2ctY29uZmlnLiAgSWYgd2Ugb25seSBoYXZlCisgICAgICBkbmwgdGhlIGFyZ3VtZW50IHRvIC0td2l0aC1zc2wgd2UgZG9uJ3Qga25vdyB3aGF0CisgICAgICBkbmwgYWRkaXRpb25hbCBsaWJzIG1heSBiZSBuZWNlc3NhcnkuICBIb3BlIHRoYXQgd2UKKyAgICAgIGRubCBkb24ndCBuZWVkIGFueS4KKyAgICAgIExJQlM9IiRMSUJTICRTU0xfTElCUyIKKyAgICBmaQorICBmaQorCisgIGRubCBmaW5hbGx5LCBzZXQgZmxhZ3MgdG8gdXNlIFNTTAorICBDUFBGTEFHUz0iJENQUEZMQUdTICRTU0xfQ1BQRkxBR1MiCisgIExERkxBR1M9IiRMREZMQUdTICRTU0xfTERGTEFHUyIKKworICBkbmwgVGhpcyBpcyBmb3IgTXN5cy9NaW5ndworICBjYXNlICRob3N0IGluCisgICAgKi0qLW1zeXMqIHwgKi0qLW1pbmd3KikKKyAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGdkaTMyXSkKKyAgICAgIG15X2FjX3NhdmVfTElCUz0kTElCUworICAgICAgTElCUz0iLWxnZGkzMiAkTElCUyIKKyAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8d2luZGVmLmg+CisgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHdpbmdkaS5oPl0sCisgICAgICAgICAgICAgICAgICAgW0dkaUZsdXNoKCk7XSwKKyAgICAgICAgICAgICAgICAgICBbIGRubCB3b3JrZWQhCisgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSldLAorICAgICAgICAgICAgICAgICAgIFsgZG5sIGZhaWxlZCwgcmVzdG9yZSBMSUJTCisgICAgICAgICAgICAgICAgICAgTElCUz0kbXlfYWNfc2F2ZV9MSUJTCisgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubyldCisgICAgICAgICAgICAgICAgICApCisgICAgICA7OworICBlc2FjCisKKyAgQUNfQ0hFQ0tfTElCKGNyeXB0bywgQ1JZUFRPX2xvY2ssWworICAgICBIQVZFQ1JZUFRPPSJ5ZXMiCisgICAgIExJQlM9Ii1sY3J5cHRvICRMSUJTIgorICAgICBdLFsKKyAgICAgTERGTEFHUz0iJENMRUFOTERGTEFHUyAtTCRMSUJfT1BFTlNTTCIKKyAgICAgQ1BQRkxBR1M9IiRDTEVBTkNQUEZMQUdTIC1JJFBSRUZJWF9PUEVOU1NML2luY2x1ZGUvb3BlbnNzbCAtSSRQUkVGSVhfT1BFTlNTTC9pbmNsdWRlIgorICAgICBBQ19DSEVDS19MSUIoY3J5cHRvLCBDUllQVE9fYWRkX2xvY2ssWworICAgICAgIEhBVkVDUllQVE89InllcyIKKyAgICAgICBMSUJTPSItbGNyeXB0byAkTElCUyJdLCBbCisgICAgICAgTERGTEFHUz0iJENMRUFOTERGTEFHUyIKKyAgICAgICBDUFBGTEFHUz0iJENMRUFOQ1BQRkxBR1MiCisgICAgICAgTElCUz0iJENMRUFOTElCUyIKKyAgICAgICBdKQorICAgIF0pCisKKworICBpZiB0ZXN0IFgiJEhBVkVDUllQVE8iID0gWCJ5ZXMiOyB0aGVuCisgICAgZG5sIFRoaXMgaXMgb25seSByZWFzb25hYmxlIHRvIGRvIGlmIGNyeXB0byBhY3R1YWxseSBpcyB0aGVyZTogY2hlY2sgZm9yCisgICAgZG5sIFNTTCBsaWJzIE5PVEU6IGl0IGlzIGltcG9ydGFudCB0byBkbyB0aGlzIEFGVEVSIHRoZSBjcnlwdG8gbGliCisKKyAgICBBQ19DSEVDS19MSUIoc3NsLCBTU0xfY29ubmVjdCkKKworICAgIGlmIHRlc3QgIiRhY19jdl9saWJfc3NsX1NTTF9jb25uZWN0IiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgZG5sIHdlIGRpZG4ndCBmaW5kIHRoZSBTU0wgbGliLCB0cnkgdGhlIFJTQWdsdWUvcnNhcmVmIHN0dWZmCisgICAgICAgIEFDX01TR19DSEVDS0lORyhmb3Igc3NsIHdpdGggUlNBZ2x1ZS9yc2FyZWYgbGlicyBpbiB1c2UpOworICAgICAgICBPTElCUz0kTElCUworICAgICAgICBMSUJTPSIkTElCUyAtbFJTQWdsdWUgLWxyc2FyZWYiCisgICAgICAgIEFDX0NIRUNLX0xJQihzc2wsIFNTTF9jb25uZWN0KQorICAgICAgICBpZiB0ZXN0ICIkYWNfY3ZfbGliX3NzbF9TU0xfY29ubmVjdCIgIT0geWVzOyB0aGVuCisgICAgICAgICAgICBkbmwgc3RpbGwgbm8gU1NMX2Nvbm5lY3QKKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgICAgICBMSUJTPSRPTElCUworICAgICAgICBlbHNlCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgICAgZmkKKworICAgIGVsc2UKKworICAgICAgZG5sIEhhdmUgdGhlIGxpYnJhcmllcy0tY2hlY2sgZm9yIFNTTGVheS9PcGVuU1NMIGhlYWRlcnMKKyAgICAgIEFDX0NIRUNLX0hFQURFUlMob3BlbnNzbC94NTA5Lmggb3BlbnNzbC9yc2EuaCBvcGVuc3NsL2NyeXB0by5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNzbC9wZW0uaCBvcGVuc3NsL3NzbC5oIG9wZW5zc2wvZXJyLmgsCisgICAgICAgIGN1cmxfc3NsX21zZz0iZW5hYmxlZCAoT3BlblNTTCkiCisgICAgICAgIE9QRU5TU0xfRU5BQkxFRD0xCisgICAgICAgIEFDX0RFRklORShVU0VfT1BFTlNTTCwgMSwgW2lmIE9wZW5TU0wgaXMgaW4gdXNlXSkpCisKKyAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9vcGVuc3NsX3g1MDlfaCA9IG5vOyB0aGVuCisgICAgICAgIGRubCB3ZSBkb24ndCB1c2UgdGhlICJhY3Rpb24iIHBhcnQgb2YgdGhlIEFDX0NIRUNLX0hFQURFUlMgbWFjcm8KKyAgICAgICAgZG5sIHNpbmNlICdlcnIuaCcgbWlnaHQgaW4gZmFjdCBmaW5kIGEga3JiNCBoZWFkZXIgd2l0aCB0aGUgc2FtZQorICAgICAgICBkbmwgbmFtZQorICAgICAgICBBQ19DSEVDS19IRUFERVJTKHg1MDkuaCByc2EuaCBjcnlwdG8uaCBwZW0uaCBzc2wuaCBlcnIuaCkKKworICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfeDUwOV9oID0geWVzICYmCisgICAgICAgICAgIHRlc3QgJGFjX2N2X2hlYWRlcl9jcnlwdG9faCA9IHllcyAmJgorICAgICAgICAgICB0ZXN0ICRhY19jdl9oZWFkZXJfc3NsX2ggPSB5ZXM7IHRoZW4KKyAgICAgICAgICBkbmwgdGhyZWUgbWF0Y2hlcworICAgICAgICAgIGN1cmxfc3NsX21zZz0iZW5hYmxlZCAoT3BlblNTTCkiCisgICAgICAgICAgT1BFTlNTTF9FTkFCTEVEPTEKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgWCIkT1BFTlNTTF9FTkFCTEVEIiA9IFgiMSI7IHRoZW4KKyAgICAgICBBQ19ERUZJTkUoVVNFX1NTTEVBWSwgMSwgW2lmIFNTTCBpcyBlbmFibGVkXSkKKworICAgICAgIGRubCBpcyB0aGVyZSBhIHBrY3MxMi5oIGhlYWRlciBwcmVzZW50PworICAgICAgIEFDX0NIRUNLX0hFQURFUlMob3BlbnNzbC9wa2NzMTIuaCkKKyAgICBlbHNlCisgICAgICAgTElCUz0iJENMRUFOTElCUyIKKyAgICBmaQorICAgIGRubCBVU0VfU1NMRUFZIGlzIHRoZSBoaXN0b3JpY2FsIG5hbWUgZm9yIHdoYXQgY29uZmlndXJlIGNhbGxzCisgICAgZG5sIE9QRU5TU0xfRU5BQkxFRDsgdGhlIG5hbWVzIHNob3VsZCByZWFsbHkgYmUgdW5pZmllZAorICAgIFVTRV9TU0xFQVk9IiRPUEVOU1NMX0VOQUJMRUQiCisgICAgQUNfU1VCU1QoVVNFX1NTTEVBWSkKKworICAgIGlmIHRlc3QgWCIkT1BUX1NTTCIgIT0gWG9mZiAmJgorICAgICAgIHRlc3QgIiRPUEVOU1NMX0VOQUJMRUQiICE9ICIxIjsgdGhlbgorICAgICAgQUNfTVNHX0VSUk9SKFtPcGVuU1NMIGxpYnMgYW5kL29yIGRpcmVjdG9yaWVzIHdlcmUgbm90IGZvdW5kIHdoZXJlIHNwZWNpZmllZCFdKQorICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCBYIiRPUEVOU1NMX0VOQUJMRUQiID0gWCIxIjsgdGhlbgorICAgIGRubCBJZiB0aGUgRU5HSU5FIGxpYnJhcnkgc2VlbXMgdG8gYmUgYXJvdW5kLCBjaGVjayBmb3IgdGhlIE9wZW5TU0wgZW5naW5lCisgICAgZG5sIHN0dWZmLCBpdCBpcyBraW5kIG9mICJzZXBhcmF0ZWQiIGZyb20gdGhlIG1haW4gU1NMIGNoZWNrCisgICAgQUNfQ0hFQ0tfRlVOQyhFTkdJTkVfaW5pdCwKKyAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUlMob3BlbnNzbC9lbmdpbmUuaCkKKyAgICAgICAgICAgICAgICBBQ19DSEVDS19GVU5DUyggRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzICkKKyAgICAgICAgICAgICAgXSkKKworICAgIGRubCB0aGVzZSBjYW4gb25seSBleGlzdCBpZiBvcGVuc3NsIGV4aXN0cworICAgIGRubCB5YXNzbCBkb2Vzbid0IGhhdmUgU1NMX2dldF9zaHV0ZG93bgorCisgICAgQUNfQ0hFQ0tfRlVOQ1MoIFJBTkRfc3RhdHVzIFwKKyAgICAgICAgICAgICAgICAgICAgUkFORF9zY3JlZW4gXAorICAgICAgICAgICAgICAgICAgICBSQU5EX2VnZCBcCisgICAgICAgICAgICAgICAgICAgIEVOR0lORV9jbGVhbnVwIFwKKyAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEgXAorICAgICAgICAgICAgICAgICAgICBTU0xfZ2V0X3NodXRkb3duIFwKKyAgICAgICAgICAgICAgICAgICAgU1NMdjJfY2xpZW50X21ldGhvZCApCisKKyAgICBkbmwgTWFrZSBhbiBhdHRlbXB0IHRvIGRldGVjdCBpZiB0aGlzIGlzIGFjdHVhbGx5IHlhc3NsJ3MgaGVhZGVycyBhbmQKKyAgICBkbmwgT3BlblNTTCBlbXVsYXRpb24gbGF5ZXIuIFdlIHN0aWxsIGxlYXZlIGV2ZXJ5dGhpbmcgZWxzZSBiZWxpZXZpbmcKKyAgICBkbmwgYW5kIGFjdGluZyBsaWtlIE9wZW5TU0wuCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciB5YVNTTCB1c2luZyBPcGVuU1NMIGNvbXBhdGliaWxpdHkgbW9kZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyAgICAgIF1dLFtbCisjaWYgZGVmaW5lZChZQVNTTF9WRVJTSU9OKSAmJiBkZWZpbmVkKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIpCisgICAgICAgIGludCBkdW1teSA9IFNTTF9FUlJPUl9OT05FOworI2Vsc2UKKyAgICAgICAgTm90IHRoZSB5YVNTTCBPcGVuU1NMIGNvbXBhdGliaWxpdHkgaGVhZGVyLgorI2VuZGlmCisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoVVNFX1lBU1NMRU1VTCwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHVzaW5nIHlhU1NMIGluIE9wZW5TU0wgY29tcGF0aWJpbGl0eSBtb2RlLl0pCisgICAgICBjdXJsX3NzbF9tc2c9ImVuYWJsZWQgKE9wZW5TU0wgZW11bGF0aW9uIGJ5IHlhU1NMKSIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBdKQorICBmaQorCisgIGlmIHRlc3QgIiRPUEVOU1NMX0VOQUJMRUQiID0gIjEiOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJExJQl9PUEVOU1NMIjsgdGhlbgorICAgICAgIGRubCB3aGVuIHRoZSBzc2wgc2hhcmVkIGxpYnMgd2VyZSBmb3VuZCBpbiBhIHBhdGggdGhhdCB0aGUgcnVuLXRpbWUKKyAgICAgICBkbmwgbGlua2VyIGRvZXNuJ3Qgc2VhcmNoIHRocm91Z2gsIHdlIG5lZWQgdG8gYWRkIGl0IHRvIExEX0xJQlJBUllfUEFUSAorICAgICAgIGRubCB0byBwcmV2ZW50IGZ1cnRoZXIgY29uZmlndXJlIHRlc3RzIHRvIGZhaWwgZHVlIHRvIHRoaXMKKyAgICAgICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiOyB0aGVuCisgICAgICAgICBMRF9MSUJSQVJZX1BBVEg9IiRMRF9MSUJSQVJZX1BBVEg6JExJQl9PUEVOU1NMIgorICAgICAgICAgZXhwb3J0IExEX0xJQlJBUllfUEFUSAorICAgICAgICAgQUNfTVNHX05PVElDRShbQWRkZWQgJExJQl9PUEVOU1NMIHRvIExEX0xJQlJBUllfUEFUSF0pCisgICAgICAgZmkKKyAgICBmaQorICAgIENVUkxfQ0hFQ0tfT1BFTlNTTF9BUEkKKyAgZmkKKworZmkKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIFpMSUIgbGlicmFyaWVzIGFuZCBoZWFkZXJzCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitkbmwgQ2hlY2sgZm9yICYgaGFuZGxlIGFyZ3VtZW50IHRvIC0td2l0aC16bGliLgorCitfY3BwZmxhZ3M9JENQUEZMQUdTCitfbGRmbGFncz0kTERGTEFHUworQUNfQVJHX1dJVEgoemxpYiwKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtemxpYj1QQVRIXSxbc2VhcmNoIGZvciB6bGliIGluIFBBVEhdKQorQUNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC16bGliXSxbZGlzYWJsZSB1c2Ugb2YgemxpYl0pLAorICAgICAgICAgICAgICAgW09QVF9aTElCPSIkd2l0aHZhbCJdKQorCitpZiB0ZXN0ICIkT1BUX1pMSUIiID0gIm5vIiA7IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbemxpYiBkaXNhYmxlZF0pCitlbHNlCisgIGlmIHRlc3QgIiRPUFRfWkxJQiIgPSAieWVzIiA7IHRoZW4KKyAgICAgT1BUX1pMSUI9IiIKKyAgZmkKKworICBpZiB0ZXN0IC16ICIkT1BUX1pMSUIiIDsgdGhlbgorICAgIGRubCBjaGVjayBmb3IgdGhlIGxpYiBmaXJzdCB3aXRob3V0IHNldHRpbmcgYW55IG5ldyBwYXRoLCBzaW5jZSBtYW55CisgICAgZG5sIHBlb3BsZSBoYXZlIGl0IGluIHRoZSBkZWZhdWx0IHBhdGgKKworICAgIEFDX0NIRUNLX0xJQih6LCBpbmZsYXRlRW5kLAorICAgICAgICAgICAgICAgICAgIGRubCBsaWJ6IGZvdW5kLCBzZXQgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgW0hBVkVfTElCWj0iMSJdLAorICAgICAgICAgICAgICAgICAgIGRubCBpZiBubyBsaWIgZm91bmQsIHRyeSAvdXNyL2xvY2FsCisgICAgICAgICAgICAgICAgICAgW09QVF9aTElCPSIvdXNyL2xvY2FsIl0pCisKKyAgZmkKKworICBkbmwgQWRkIGEgbm9uZW1wdHkgcGF0aCB0byB0aGUgY29tcGlsZXIgZmxhZ3MKKyAgaWYgdGVzdCAtbiAiJE9QVF9aTElCIjsgdGhlbgorICAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJE9QVF9aTElCL2luY2x1ZGUiCisgICAgIExERkxBR1M9IiRMREZMQUdTIC1MJE9QVF9aTElCL2xpYiRsaWJzdWZmIgorICBmaQorCisgIEFDX0NIRUNLX0hFQURFUih6bGliLmgsCisgICAgWworICAgIGRubCB6bGliLmggd2FzIGZvdW5kCisgICAgSEFWRV9aTElCX0g9IjEiCisgICAgZG5sIGlmIHRoZSBsaWIgd2Fzbid0IGZvdW5kIGFscmVhZHksIHRyeSBhZ2FpbiB3aXRoIHRoZSBuZXcgcGF0aHMKKyAgICBpZiB0ZXN0ICIkSEFWRV9MSUJaIiAhPSAiMSI7IHRoZW4KKyAgICAgIEFDX0NIRUNLX0xJQih6LCBnenJlYWQsCisgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgIGRubCB0aGUgbGliIHdhcyBmb3VuZCEKKyAgICAgICAgICAgICAgICAgICBIQVZFX0xJQlo9IjEiCisgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICBbIENQUEZMQUdTPSRfY3BwZmxhZ3MKKyAgICAgICAgICAgICAgICAgICBMREZMQUdTPSRfbGRmbGFnc10pCisgICAgZmkKKyAgICBdLAorICAgIFsKKyAgICAgIGRubCB6bGliLmggd2FzIG5vdCBmb3VuZCwgcmVzdG9yZSB0aGUgZmxhZ3MKKyAgICAgIENQUEZMQUdTPSRfY3BwZmxhZ3MKKyAgICAgIExERkxBR1M9JF9sZGZsYWdzXQorICAgICkKKworICBpZiB0ZXN0ICIkSEFWRV9MSUJaIiA9ICIxIiAmJiB0ZXN0ICIkSEFWRV9aTElCX0giICE9ICIxIgorICB0aGVuCisgICAgQUNfTVNHX1dBUk4oW2NvbmZpZ3VyZSBmb3VuZCBvbmx5IHRoZSBsaWJ6IGxpYiwgbm90IHRoZSBoZWFkZXIgZmlsZSFdKQorICAgIEhBVkVfTElCWj0iIgorICBlbGlmIHRlc3QgIiRIQVZFX0xJQloiICE9ICIxIiAmJiB0ZXN0ICIkSEFWRV9aTElCX0giID0gIjEiCisgIHRoZW4KKyAgICBBQ19NU0dfV0FSTihbY29uZmlndXJlIGZvdW5kIG9ubHkgdGhlIGxpYnogaGVhZGVyIGZpbGUsIG5vdCB0aGUgbGliIV0pCisgIGVsaWYgdGVzdCAiJEhBVkVfTElCWiIgPSAiMSIgJiYgdGVzdCAiJEhBVkVfWkxJQl9IIiA9ICIxIgorICB0aGVuCisgICAgZG5sIGJvdGggaGVhZGVyIGFuZCBsaWIgd2VyZSBmb3VuZCEKKyAgICBBQ19TVUJTVChIQVZFX0xJQlopCisgICAgQUNfREVGSU5FKEhBVkVfWkxJQl9ILCAxLCBbaWYgeW91IGhhdmUgdGhlIHpsaWIuaCBoZWFkZXIgZmlsZV0pCisgICAgQUNfREVGSU5FKEhBVkVfTElCWiwgMSwgW2lmIHpsaWIgaXMgYXZhaWxhYmxlXSkKKworICAgIENVUkxfTElCUz0iJENVUkxfTElCUyAtbHoiCisgICAgTElCUz0iJExJQlMgLWx6IgorCisgICAgZG5sIHJlcGxhY2UgJ0hBVkVfTElCWicgaW4gdGhlIGF1dG9tYWtlIG1ha2VmaWxlLmFtcworICAgIEFNRklYTElCPSIxIgorICAgIEFDX01TR19OT1RJQ0UoW2ZvdW5kIGJvdGggbGlieiBhbmQgbGliei5oIGhlYWRlcl0pCisgICAgY3VybF96bGliX21zZz0iZW5hYmxlZCIKKyAgZmkKK2ZpCisKK2RubCBzZXQgdmFyaWFibGUgZm9yIHVzZSBpbiBhdXRvbWFrZWZpbGUocykKK0FNX0NPTkRJVElPTkFMKEhBVkVfTElCWiwgdGVzdCB4IiRBTUZJWExJQiIgPSB4MSkKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBDaGVjayBmb3IgdGhlIHJhbmRvbSBzZWVkIHByZWZlcmVuY2VzCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitpZiB0ZXN0IFgiJE9QRU5TU0xfRU5BQkxFRCIgPSBYIjEiOyB0aGVuCisgIEFDX0FSR19XSVRIKGVnZC1zb2NrZXQsCisgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZWdkLXNvY2tldD1GSUxFXSwKKyAgICAgICAgICAgICAgICAgW0VudHJvcHkgR2F0aGVyaW5nIERhZW1vbiBzb2NrZXQgcGF0aG5hbWVdKSwKKyAgICAgIFsgRUdEX1NPQ0tFVD0iJHdpdGh2YWwiIF0KKyAgKQorICBpZiB0ZXN0IC1uICIkRUdEX1NPQ0tFVCIgOyB0aGVuCisgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEVHRF9TT0NLRVQsICIkRUdEX1NPQ0tFVCIsCisgICAgICAgICAgW3lvdXIgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldCBwYXRobmFtZV0gKQorICBmaQorCisgIGRubCBDaGVjayBmb3IgdXNlci1zcGVjaWZpZWQgcmFuZG9tIGRldmljZQorICBBQ19BUkdfV0lUSChyYW5kb20sCisgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtcmFuZG9tPUZJTEVdLAorICAgICAgICAgICAgICAgICBbcmVhZCByYW5kb21uZXNzIGZyb20gRklMRSAoZGVmYXVsdD0vZGV2L3VyYW5kb20pXSksCisgICAgICBbIFJBTkRPTV9GSUxFPSIkd2l0aHZhbCIgXSwKKyAgICAgIFsKKyAgICAgICAgICBpZiB0ZXN0IHgkY3Jvc3NfY29tcGlsaW5nICE9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgIGRubCBDaGVjayBmb3IgcmFuZG9tIGRldmljZQorICAgICAgICAgICAgQUNfQ0hFQ0tfRklMRSgiL2Rldi91cmFuZG9tIiwgWyBSQU5ET01fRklMRT0iL2Rldi91cmFuZG9tIl0gKQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFDX01TR19XQVJOKFtza2lwcGVkIHRoZSAvZGV2L3VyYW5kb20gZGV0ZWN0aW9uIHdoZW4gY3Jvc3MtY29tcGlsaW5nXSkKKyAgICAgICAgICBmaQorICAgICAgXQorICApCisgIGlmIHRlc3QgLW4gIiRSQU5ET01fRklMRSIgJiYgdGVzdCBYIiRSQU5ET01fRklMRSIgIT0gWG5vIDsgdGhlbgorICAgICAgICAgIEFDX1NVQlNUKFJBTkRPTV9GSUxFKQorICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChSQU5ET01fRklMRSwgIiRSQU5ET01fRklMRSIsCisgICAgICAgICAgW2Egc3VpdGFibGUgZmlsZSB0byByZWFkIHJhbmRvbSBkYXRhIGZyb21dKQorICBmaQorZmkKKworZG5sIC0tLQorZG5sIFdlIHJlcXVpcmUgT3BlblNTTCB3aXRoIFNSUCBzdXBwb3J0LgorZG5sIC0tLQoraWYgdGVzdCAiJE9QRU5TU0xfRU5BQkxFRCIgPSAiMSI7IHRoZW4KKyAgQUNfQ0hFQ0tfTElCKGNyeXB0bywgU1JQX0NhbGNfY2xpZW50X2tleSwKKyAgIFsKKyAgICAgQUNfREVGSU5FKEhBVkVfU1NMRUFZX1NSUCwgMSwgW2lmIHlvdSBoYXZlIHRoZSBmdW5jdGlvbiBTUlBfQ2FsY19jbGllbnRfa2V5XSkKKyAgICAgQUNfU1VCU1QoSEFWRV9TU0xFQVlfU1JQLCBbMV0pCisgICBdKQorZmkKKworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBjaGVjayBmb3IgR251VExTCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkbmwgRGVmYXVsdCB0byBjb21waWxlciAmIGxpbmtlciBkZWZhdWx0cyBmb3IgR251VExTIGZpbGVzICYgbGlicmFyaWVzLgorT1BUX0dOVVRMUz1ubworCitBQ19BUkdfV0lUSChnbnV0bHMsZG5sCitBQ19IRUxQX1NUUklORyhbLS13aXRoLWdudXRscz1QQVRIXSxbd2hlcmUgdG8gbG9vayBmb3IgR251VExTLCBQQVRIIHBvaW50cyB0byB0aGUgaW5zdGFsbGF0aW9uIHJvb3RdKQorQUNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1nbnV0bHNdLCBbZGlzYWJsZSBHbnVUTFMgZGV0ZWN0aW9uXSksCisgIE9QVF9HTlVUTFM9JHdpdGh2YWwpCisKK2lmIHRlc3QgIiRPUEVOU1NMX0VOQUJMRUQiICE9ICIxIjsgdGhlbgorCisgIGlmIHRlc3QgWCIkT1BUX0dOVVRMUyIgIT0gWG5vOyB0aGVuCisKKyAgICBhZGRsZD0iIgorICAgIGlmIHRlc3QgIngkT1BUX0dOVVRMUyIgPSAieHllcyI7IHRoZW4KKyAgICAgIGRubCB0aGlzIGlzIHdpdGggbm8gcGFydGl1bGFyIHBhdGggZ2l2ZW4KKyAgICAgIENVUkxfQ0hFQ0tfUEtHQ09ORklHKGdudXRscykKKworICAgICAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKyAgICAgICAgYWRkbGliPWAkUEtHQ09ORklHIC0tbGlicy1vbmx5LWwgZ251dGxzYAorICAgICAgICBhZGRsZD1gJFBLR0NPTkZJRyAtLWxpYnMtb25seS1MIGdudXRsc2AKKyAgICAgICAgYWRkY2ZsYWdzPWAkUEtHQ09ORklHIC0tY2ZsYWdzLW9ubHktSSBnbnV0bHNgCisgICAgICAgIHZlcnNpb249YCRQS0dDT05GSUcgLS1tb2R2ZXJzaW9uIGdudXRsc2AKKyAgICAgICAgZ3Rsc2xpYj1gZWNobyAkYWRkbGQgfCAkU0VEIC1lICdzLy1MLy8nYAorICAgICAgZWxzZQorICAgICAgICBkbmwgd2l0aG91dCBwa2ctY29uZmlnLCB3ZSB0cnkgbGliZ251dGxzLWNvbmZpZyBhcyB0aGF0IHdhcyBob3cgaXQKKyAgICAgICAgZG5sIHVzZWQgdG8gYmUgZG9uZQorICAgICAgICBjaGVjaz1gbGliZ251dGxzLWNvbmZpZyAtLXZlcnNpb24gMj4vZGV2L251bGxgCisgICAgICAgIGlmIHRlc3QgLW4gIiRjaGVjayI7IHRoZW4KKyAgICAgICAgICBhZGRsaWI9YGxpYmdudXRscy1jb25maWcgLS1saWJzYAorICAgICAgICAgIGFkZGNmbGFncz1gbGliZ251dGxzLWNvbmZpZyAtLWNmbGFnc2AKKyAgICAgICAgICB2ZXJzaW9uPWBsaWJnbnV0bHMtY29uZmlnIC0tdmVyc2lvbmAKKyAgICAgICAgICBndGxzbGliPWBsaWJnbnV0bHMtY29uZmlnIC0tcHJlZml4YC9saWIkbGlic3VmZgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBkbmwgdGhpcyBpcyB3aXRoIGEgZ2l2ZW4gcGF0aCwgZmlyc3QgY2hlY2sgaWYgdGhlcmUncyBhIGxpYmdudXRscy1jb25maWcKKyAgICAgIGRubCB0aGVyZSBhbmQgaWYgbm90LCBtYWtlIGFuIGVkdWNhdGVkIGd1ZXNzCisgICAgICBjZmc9JE9QVF9HTlVUTFMvYmluL2xpYmdudXRscy1jb25maWcKKyAgICAgIGNoZWNrPWAkY2ZnIC0tdmVyc2lvbiAyPi9kZXYvbnVsbGAKKyAgICAgIGlmIHRlc3QgLW4gIiRjaGVjayI7IHRoZW4KKyAgICAgICAgYWRkbGliPWAkY2ZnIC0tbGlic2AKKyAgICAgICAgYWRkY2ZsYWdzPWAkY2ZnIC0tY2ZsYWdzYAorICAgICAgICB2ZXJzaW9uPWAkY2ZnIC0tdmVyc2lvbmAKKyAgICAgICAgZ3Rsc2xpYj1gJGNmZyAtLXByZWZpeGAvbGliJGxpYnN1ZmYKKyAgICAgIGVsc2UKKyAgICAgICAgZG5sIHdpdGhvdXQgcGtnLWNvbmZpZyBhbmQgbGliZ251dGxzLWNvbmZpZywgd2UgZ3Vlc3MgYSBsb3QhCisgICAgICAgIGFkZGxpYj0tbGdudXRscworICAgICAgICBhZGRsZD0tTCRPUFRfR05VVExTL2xpYiRsaWJzdWZmCisgICAgICAgIGFkZGNmbGFncz0tSSRPUFRfR05VVExTL2luY2x1ZGUKKyAgICAgICAgdmVyc2lvbj0iIiAjIHdlIGp1c3QgZG9uJ3Qga25vdworICAgICAgICBndGxzbGliPSRPUFRfR05VVExTL2xpYiRsaWJzdWZmCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkdmVyc2lvbiI7IHRoZW4KKyAgICAgIGRubCBsb3RzIG9mIGVmZm9ydHMsIHN0aWxsIG5vIGdvCisgICAgICB2ZXJzaW9uPSJ1bmtub3duIgorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWRkbGliIjsgdGhlbgorCisgICAgICBDTEVBTkxJQlM9IiRMSUJTIgorICAgICAgQ0xFQU5DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgICAgQ0xFQURMREZMQUdTPSIkTERGTEFHUyIKKworICAgICAgTElCUz0iJExJQlMgJGFkZGxpYiIKKyAgICAgIExERkxBR1M9IiRMREZMQUdTICRhZGRsZCIKKyAgICAgIGlmIHRlc3QgIiRhZGRjZmxhZ3MiICE9ICItSS91c3IvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJGFkZGNmbGFncyIKKyAgICAgIGZpCisKKyAgICAgIEFDX0NIRUNLX0xJQihnbnV0bHMsIGdudXRsc19jaGVja192ZXJzaW9uLAorICAgICAgIFsKKyAgICAgICBBQ19ERUZJTkUoVVNFX0dOVVRMUywgMSwgW2lmIEdudVRMUyBpcyBlbmFibGVkXSkKKyAgICAgICBBQ19TVUJTVChVU0VfR05VVExTLCBbMV0pCisgICAgICAgR05VVExTX0VOQUJMRUQ9MQorICAgICAgIFVTRV9HTlVUTFM9InllcyIKKyAgICAgICBjdXJsX3NzbF9tc2c9ImVuYWJsZWQgKEdudVRMUykiCisgICAgICAgXSwKKyAgICAgICBbCisgICAgICAgICBMSUJTPSIkQ0xFQU5MSUJTIgorICAgICAgICAgQ1BQRkxBR1M9IiRDTEVBTkNQUEZMQUdTIgorICAgICAgIF0pCisKKyAgICAgIGlmIHRlc3QgIngkVVNFX0dOVVRMUyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgQUNfTVNHX05PVElDRShbZGV0ZWN0ZWQgR251VExTIHZlcnNpb24gJHZlcnNpb25dKQorCisgICAgICAgIGlmIHRlc3QgLW4gIiRndGxzbGliIjsgdGhlbgorICAgICAgICAgIGRubCB3aGVuIHNoYXJlZCBsaWJzIHdlcmUgZm91bmQgaW4gYSBwYXRoIHRoYXQgdGhlIHJ1bi10aW1lCisgICAgICAgICAgZG5sIGxpbmtlciBkb2Vzbid0IHNlYXJjaCB0aHJvdWdoLCB3ZSBuZWVkIHRvIGFkZCBpdCB0bworICAgICAgICAgIGRubCBMRF9MSUJSQVJZX1BBVEggdG8gcHJldmVudCBmdXJ0aGVyIGNvbmZpZ3VyZSB0ZXN0cyB0byBmYWlsCisgICAgICAgICAgZG5sIGR1ZSB0byB0aGlzCisgICAgICAgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIjsgdGhlbiAKKyAgICAgICAgICAgIExEX0xJQlJBUllfUEFUSD0iJExEX0xJQlJBUllfUEFUSDokZ3Rsc2xpYiIKKyAgICAgICAgICAgIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEgKKyAgICAgICAgICAgIEFDX01TR19OT1RJQ0UoW0FkZGVkICRndGxzbGliIHRvIExEX0xJQlJBUllfUEFUSF0pCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisKKyAgICBmaQorCisgIGZpIGRubCBHTlVUTFMgbm90IGRpc2FibGVkCisKK2ZpIGRubCBPUEVOU1NMICE9IDEKKworZG5sIC0tLQorZG5sIENoZWNrIHdoaWNoIGNyeXB0byBiYWNrZW5kIEdudVRMUyB1c2VzCitkbmwgLS0tCisKK2lmIHRlc3QgIiRHTlVUTFNfRU5BQkxFRCIgPSAiMSI7IHRoZW4KKyAgVVNFX0dOVVRMU19ORVRUTEU9CisgICMgRmlyc3QgY2hlY2sgaWYgd2UgY2FuIGRldGVjdCBlaXRoZXIgY3J5cHRvIGxpYnJhcnkgdmlhIHRyYW5zaXRpdmUgbGlua2luZworICBBQ19DSEVDS19MSUIoZ251dGxzLCBuZXR0bGVfTUQ1SW5pdCwgWyBVU0VfR05VVExTX05FVFRMRT0xIF0pCisgIGlmIHRlc3QgIiRVU0VfR05VVExTX05FVFRMRSIgPSAiIjsgdGhlbgorICAgIEFDX0NIRUNLX0xJQihnbnV0bHMsIGdjcnlfY29udHJvbCwgWyBVU0VfR05VVExTX05FVFRMRT0wIF0pCisgIGZpCisgICMgSWYgbm90LCB0cnkgbGlua2luZyBkaXJlY3RseSB0byBib3RoIG9mIHRoZW0gdG8gc2VlIGlmIHRoZXkgYXJlIGF2YWlsYWJsZQorICBpZiB0ZXN0ICIkVVNFX0dOVVRMU19ORVRUTEUiID0gIiI7IHRoZW4KKyAgICBBQ19DSEVDS19MSUIobmV0dGxlLCBuZXR0bGVfTUQ1SW5pdCwgWyBVU0VfR05VVExTX05FVFRMRT0xIF0pCisgIGZpCisgIGlmIHRlc3QgIiRVU0VfR05VVExTX05FVFRMRSIgPSAiIjsgdGhlbgorICAgIEFDX0NIRUNLX0xJQihnY3J5cHQsIGdjcnlfY29udHJvbCwgWyBVU0VfR05VVExTX05FVFRMRT0wIF0pCisgIGZpCisgIGlmIHRlc3QgIiRVU0VfR05VVExTX05FVFRMRSIgPSAiIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbR251VExTIGZvdW5kLCBidXQgbmVpdGhlciBnY3J5cHQgbm9yIG5ldHRsZSBmb3VuZF0pCisgIGZpCisgIGlmIHRlc3QgIiRVU0VfR05VVExTX05FVFRMRSIgPSAiMSI7IHRoZW4KKyAgICBBQ19ERUZJTkUoVVNFX0dOVVRMU19ORVRUTEUsIDEsIFtpZiBHbnVUTFMgdXNlcyBuZXR0bGUgYXMgY3J5cHRvIGJhY2tlbmRdKQorICAgIEFDX1NVQlNUKFVTRV9HTlVUTFNfTkVUVExFLCBbMV0pCisgICAgTElCUz0iJExJQlMgLWxuZXR0bGUiCisgIGVsc2UKKyAgICBMSUJTPSIkTElCUyAtbGdjcnlwdCIKKyAgZmkKK2ZpCisKK2RubCAtLS0KK2RubCBXZSByZXF1aXJlIEdudVRMUyB3aXRoIFNSUCBzdXBwb3J0LgorZG5sIC0tLQoraWYgdGVzdCAiJEdOVVRMU19FTkFCTEVEIiA9ICIxIjsgdGhlbgorICBBQ19DSEVDS19MSUIoZ251dGxzLCBnbnV0bHNfc3JwX3ZlcmlmaWVyLAorICAgWworICAgICBBQ19ERUZJTkUoSEFWRV9HTlVUTFNfU1JQLCAxLCBbaWYgeW91IGhhdmUgdGhlIGZ1bmN0aW9uIGdudXRsc19zcnBfdmVyaWZpZXJdKQorICAgICBBQ19TVUJTVChIQVZFX0dOVVRMU19TUlAsIFsxXSkKKyAgIF0pCitmaQorCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIGNoZWNrIGZvciBQb2xhclNTTAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZG5sIERlZmF1bHQgdG8gY29tcGlsZXIgJiBsaW5rZXIgZGVmYXVsdHMgZm9yIFBvbGFyU1NMIGZpbGVzICYgbGlicmFyaWVzLgorT1BUX1BPTEFSU1NMPW5vCisKK19jcHBmbGFncz0kQ1BQRkxBR1MKK19sZGZsYWdzPSRMREZMQUdTCitBQ19BUkdfV0lUSChwb2xhcnNzbCxkbmwKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtcG9sYXJzc2w9UEFUSF0sW3doZXJlIHRvIGxvb2sgZm9yIFBvbGFyU1NMLCBQQVRIIHBvaW50cyB0byB0aGUgaW5zdGFsbGF0aW9uIHJvb3RdKQorQUNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1wb2xhcnNzbF0sIFtkaXNhYmxlIFBvbGFyU1NMIGRldGVjdGlvbl0pLAorICBPUFRfUE9MQVJTU0w9JHdpdGh2YWwpCisKK2lmIHRlc3QgIiRPUEVOU1NMX0VOQUJMRUQiICE9ICIxIjsgdGhlbgorCisgIGlmIHRlc3QgWCIkT1BUX1BPTEFSU1NMIiAhPSBYbm87IHRoZW4KKworICAgIGlmIHRlc3QgIiRPUFRfUE9MQVJTU0wiID0gInllcyI7IHRoZW4KKyAgICAgIE9QVF9QT0xBUlNTTD0iIgorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkT1BUX1BPTEFSU1NMIiA7IHRoZW4KKyAgICAgIGRubCBjaGVjayBmb3IgbGliIGZpcnN0IHdpdGhvdXQgc2V0dGluZyBhbnkgbmV3IHBhdGgKKworICAgICAgQUNfQ0hFQ0tfTElCKHBvbGFyc3NsLCBoYXZlZ2VfaW5pdCwKKyAgICAgIGRubCBsaWJwb2xhcnNzbCBmb3VuZCwgc2V0IHRoZSB2YXJpYWJsZQorICAgICAgIFsKKyAgICAgICAgIEFDX0RFRklORShVU0VfUE9MQVJTU0wsIDEsIFtpZiBQb2xhclNTTCBpcyBlbmFibGVkXSkKKyAgICAgICAgIEFDX1NVQlNUKFVTRV9QT0xBUlNTTCwgWzFdKQorICAgICAgICAgUE9MQVJTU0xfRU5BQkxFRD0xCisgICAgICAgICBVU0VfUE9MQVJTU0w9InllcyIKKyAgICAgICAgIGN1cmxfc3NsX21zZz0iZW5hYmxlZCAoUG9sYXJTU0wpIgorICAgICAgICBdKQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICJ4JFVTRV9QT0xBUlNTTCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBkbmwgYWRkIHRoZSBwYXRoIGFuZCB0ZXN0IGFnYWluCisgICAgICBhZGRsZD0tTCRPUFRfUE9MQVJTU0wvbGliJGxpYnN1ZmYKKyAgICAgIGFkZGNmbGFncz0tSSRPUFRfUE9MQVJTU0wvaW5jbHVkZQorICAgICAgcG9sYXJzc2xsaWI9JE9QVF9QT0xBUlNTTC9saWIkbGlic3VmZgorCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAkYWRkbGQiCisgICAgICBpZiB0ZXN0ICIkYWRkY2ZsYWdzIiAhPSAiLUkvdXNyL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRhZGRjZmxhZ3MiCisgICAgICBmaQorCisgICAgICBBQ19DSEVDS19MSUIocG9sYXJzc2wsIHNzbF9pbml0LAorICAgICAgIFsKKyAgICAgICBBQ19ERUZJTkUoVVNFX1BPTEFSU1NMLCAxLCBbaWYgUG9sYXJTU0wgaXMgZW5hYmxlZF0pCisgICAgICAgQUNfU1VCU1QoVVNFX1BPTEFSU1NMLCBbMV0pCisgICAgICAgUE9MQVJTU0xfRU5BQkxFRD0xCisgICAgICAgVVNFX1BPTEFSU1NMPSJ5ZXMiCisgICAgICAgY3VybF9zc2xfbXNnPSJlbmFibGVkIChQb2xhclNTTCkiCisgICAgICAgXSwKKyAgICAgICBbCisgICAgICAgICBDUFBGTEFHUz0kX2NwcGZsYWdzCisgICAgICAgICBMREZMQUdTPSRfbGRmbGFncworICAgICAgIF0pCisgICAgZmkKKworICAgIGlmIHRlc3QgIngkVVNFX1BPTEFSU1NMIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX05PVElDRShbZGV0ZWN0ZWQgUG9sYXJTU0xdKQorCisgICAgICBDVVJMX0xJQlM9IiRDVVJMX0xJQlMgLWxwb2xhcnNzbCIKKyAgICAgIExJQlM9IiRMSUJTIC1scG9sYXJzc2wiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwb2xhcnNzbGxpYiI7IHRoZW4KKyAgICAgICAgZG5sIHdoZW4gc2hhcmVkIGxpYnMgd2VyZSBmb3VuZCBpbiBhIHBhdGggdGhhdCB0aGUgcnVuLXRpbWUKKyAgICAgICAgZG5sIGxpbmtlciBkb2Vzbid0IHNlYXJjaCB0aHJvdWdoLCB3ZSBuZWVkIHRvIGFkZCBpdCB0bworICAgICAgICBkbmwgTERfTElCUkFSWV9QQVRIIHRvIHByZXZlbnQgZnVydGhlciBjb25maWd1cmUgdGVzdHMgdG8gZmFpbAorICAgICAgICBkbmwgZHVlIHRvIHRoaXMKKyAgICAgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgIExEX0xJQlJBUllfUEFUSD0iJExEX0xJQlJBUllfUEFUSDokcG9sYXJzc2xsaWIiCisgICAgICAgICAgZXhwb3J0IExEX0xJQlJBUllfUEFUSAorICAgICAgICAgIEFDX01TR19OT1RJQ0UoW0FkZGVkICRwb2xhcnNzbGxpYiB0byBMRF9MSUJSQVJZX1BBVEhdKQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorCisgIGZpIGRubCBQb2xhclNTTCBub3QgZGlzYWJsZWQKKworZmkgZG5sIE9QRU5TU0wgIT0gMQorCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIGNoZWNrIGZvciBDeWFTU0wKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RubCBEZWZhdWx0IHRvIGNvbXBpbGVyICYgbGlua2VyIGRlZmF1bHRzIGZvciBDeWFTU0wgZmlsZXMgJiBsaWJyYXJpZXMuCitPUFRfQ1lBU1NMPW5vCisKK19jcHBmbGFncz0kQ1BQRkxBR1MKK19sZGZsYWdzPSRMREZMQUdTCitBQ19BUkdfV0lUSChjeWFzc2wsZG5sCitBQ19IRUxQX1NUUklORyhbLS13aXRoLWN5YXNzbD1QQVRIXSxbd2hlcmUgdG8gbG9vayBmb3IgQ3lhU1NMLCBQQVRIIHBvaW50cyB0byB0aGUgaW5zdGFsbGF0aW9uIHJvb3QgKGRlZmF1bHQ6IHN5c3RlbSBsaWIgZGVmYXVsdCldKQorQUNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1jeWFzc2xdLCBbZGlzYWJsZSBDeWFTU0wgZGV0ZWN0aW9uXSksCisgIE9QVF9DWUFTU0w9JHdpdGh2YWwpCisKK2lmIHRlc3QgIiRPUEVOU1NMX0VOQUJMRUQiICE9ICIxIjsgdGhlbgorCisgIGlmIHRlc3QgWCIkT1BUX0NZQVNTTCIgIT0gWG5vOyB0aGVuCisKKyAgICBpZiB0ZXN0ICIkT1BUX0NZQVNTTCIgPSAieWVzIjsgdGhlbgorICAgICAgT1BUX0NZQVNTTD0iIgorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkT1BUX0NZQVNTTCIgOyB0aGVuCisgICAgICBkbmwgY2hlY2sgZm9yIGxpYiBpbiBzeXN0ZW0gZGVmYXVsdCBmaXJzdAorCisgICAgICBBQ19DSEVDS19MSUIoY3lhc3NsLCBDeWFTU0xfSW5pdCwKKyAgICAgIGRubCBsaWJjeWFzc2wgZm91bmQsIHNldCB0aGUgdmFyaWFibGUKKyAgICAgICBbCisgICAgICAgICBBQ19ERUZJTkUoVVNFX0NZQVNTTCwgMSwgW2lmIEN5YVNTTCBpcyBlbmFibGVkXSkKKyAgICAgICAgIEFDX1NVQlNUKFVTRV9DWUFTU0wsIFsxXSkKKyAgICAgICAgIENZQVNTTF9FTkFCTEVEPTEKKyAgICAgICAgIFVTRV9DWUFTU0w9InllcyIKKyAgICAgICAgIGN1cmxfc3NsX21zZz0iZW5hYmxlZCAoQ3lhU1NMKSIKKyAgICAgICAgXSkKKyAgICBmaQorCisgICAgaWYgdGVzdCAieCRVU0VfQ1lBU1NMIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIGRubCBhZGQgdGhlIHBhdGggYW5kIHRlc3QgYWdhaW4KKyAgICAgIGFkZGxkPS1MJE9QVF9DWUFTU0wvbGliJGxpYnN1ZmYKKyAgICAgIGFkZGNmbGFncz0tSSRPUFRfQ1lBU1NML2luY2x1ZGUKKyAgICAgIGN5YXNzbGxpYj0kT1BUX0NZQVNTTC9saWIkbGlic3VmZgorCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAkYWRkbGQiCisgICAgICBpZiB0ZXN0ICIkYWRkY2ZsYWdzIiAhPSAiLUkvdXNyL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRhZGRjZmxhZ3MiCisgICAgICBmaQorCisgICAgICBBQ19DSEVDS19MSUIoY3lhc3NsLCBDeWFTU0xfSW5pdCwKKyAgICAgICBbCisgICAgICAgQUNfREVGSU5FKFVTRV9DWUFTU0wsIDEsIFtpZiBDeWFTU0wgaXMgZW5hYmxlZF0pCisgICAgICAgQUNfU1VCU1QoVVNFX0NZQVNTTCwgWzFdKQorICAgICAgIENZQVNTTF9FTkFCTEVEPTEKKyAgICAgICBVU0VfQ1lBU1NMPSJ5ZXMiCisgICAgICAgY3VybF9zc2xfbXNnPSJlbmFibGVkIChDeWFTU0wpIgorICAgICAgIF0sCisgICAgICAgWworICAgICAgICAgQ1BQRkxBR1M9JF9jcHBmbGFncworICAgICAgICAgTERGTEFHUz0kX2xkZmxhZ3MKKyAgICAgICBdKQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICJ4JFVTRV9DWUFTU0wiID0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfTk9USUNFKFtkZXRlY3RlZCBDeWFTU0xdKQorCisgICAgICBDVVJMX0xJQlM9IiRDVVJMX0xJQlMgLWxjeWFzc2wgLWxtIgorICAgICAgTElCUz0iJExJQlMgLWxjeWFzc2wgLWxtIgorCisgICAgICBpZiB0ZXN0IC1uICIkY3lhc3NsbGliIjsgdGhlbgorICAgICAgICBkbmwgd2hlbiBzaGFyZWQgbGlicyB3ZXJlIGZvdW5kIGluIGEgcGF0aCB0aGF0IHRoZSBydW4tdGltZQorICAgICAgICBkbmwgbGlua2VyIGRvZXNuJ3Qgc2VhcmNoIHRocm91Z2gsIHdlIG5lZWQgdG8gYWRkIGl0IHRvCisgICAgICAgIGRubCBMRF9MSUJSQVJZX1BBVEggdG8gcHJldmVudCBmdXJ0aGVyIGNvbmZpZ3VyZSB0ZXN0cyB0byBmYWlsCisgICAgICAgIGRubCBkdWUgdG8gdGhpcworICAgICAgICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgTERfTElCUkFSWV9QQVRIPSIkTERfTElCUkFSWV9QQVRIOiRjeWFzc2xsaWIiCisgICAgICAgICAgZXhwb3J0IExEX0xJQlJBUllfUEFUSAorICAgICAgICAgIEFDX01TR19OT1RJQ0UoW0FkZGVkICRjeWFzc2xsaWIgdG8gTERfTElCUkFSWV9QQVRIXSkKKyAgICAgICAgZmkKKyAgICAgIGZpCisKKyAgICBmaQorCisgIGZpIGRubCBDeWFTU0wgbm90IGRpc2FibGVkCisKK2ZpIGRubCBPUEVOU1NMICE9IDEKKworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBOU1MuIE9ubHkgY2hlY2sgaWYgR251VExTIGFuZCBPcGVuU1NMIGFyZSBub3QgZW5hYmxlZAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZG5sIERlZmF1bHQgdG8gY29tcGlsZXIgJiBsaW5rZXIgZGVmYXVsdHMgZm9yIE5TUyBmaWxlcyAmIGxpYnJhcmllcy4KK09QVF9OU1M9bm8KKworQUNfQVJHX1dJVEgobnNzLGRubAorQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1uc3M9UEFUSF0sW3doZXJlIHRvIGxvb2sgZm9yIE5TUywgUEFUSCBwb2ludHMgdG8gdGhlIGluc3RhbGxhdGlvbiByb290XSkKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtbnNzXSwgW2Rpc2FibGUgTlNTIGRldGVjdGlvbl0pLAorICBPUFRfTlNTPSR3aXRodmFsKQorCitpZiB0ZXN0ICIkT1BFTlNTTF9FTkFCTEVEIiAhPSAiMSIgLWEgIiRHTlVUTFNfRU5BQkxFRCIgIT0gIjEiOyB0aGVuCisKKyAgaWYgdGVzdCBYIiRPUFRfTlNTIiAhPSBYbm87IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JE9QVF9OU1MiID0gInh5ZXMiOyB0aGVuCisKKyAgICAgIENVUkxfQ0hFQ0tfUEtHQ09ORklHKG5zcykKKworICAgICAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKyAgICAgICAgYWRkbGliPWAkUEtHQ09ORklHIC0tbGlicyBuc3NgCisgICAgICAgIGFkZGNmbGFncz1gJFBLR0NPTkZJRyAtLWNmbGFncyBuc3NgCisgICAgICAgIHZlcnNpb249YCRQS0dDT05GSUcgLS1tb2R2ZXJzaW9uIG5zc2AKKyAgICAgICAgbnNzcHJlZml4PWAkUEtHQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IG5zc2AKKyAgICAgIGVsc2UKKyAgICAgICAgZG5sIFdpdGhvdXQgcGtnLWNvbmZpZywgd2UgY2hlY2sgZm9yIG5zcy1jb25maWcKKworICAgICAgICBjaGVjaz1gbnNzLWNvbmZpZyAtLXZlcnNpb24gMj4vZGV2L251bGxgCisgICAgICAgIGlmIHRlc3QgLW4gIiRjaGVjayI7IHRoZW4KKyAgICAgICAgICBhZGRsaWI9YG5zcy1jb25maWcgLS1saWJzYAorICAgICAgICAgIGFkZGNmbGFncz1gbnNzLWNvbmZpZyAtLWNmbGFnc2AKKyAgICAgICAgICB2ZXJzaW9uPWBuc3MtY29uZmlnIC0tdmVyc2lvbmAKKyAgICAgICAgICBuc3NwcmVmaXg9YG5zcy1jb25maWcgLS1wcmVmaXhgCisgICAgICAgIGVsc2UKKyAgICAgICAgICBhZGRsaWI9Ii1sbnNzMyIKKyAgICAgICAgICBhZGRjZmxhZ3M9IiIKKyAgICAgICAgICB2ZXJzaW9uPSJ1bmtub3duIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgICMgV2l0aG91dCBwa2ctY29uZmlnLCB3ZSdsbCBrbHVkZ2UgaW4gc29tZSBkZWZhdWx0cworICAgICAgICBhZGRsaWI9Ii1MJE9QVF9OU1MvbGliIC1sc3NsMyAtbHNtaW1lMyAtbG5zczMgLWxwbGRzNCAtbHBsYzQgLWxuc3ByNCAtbHB0aHJlYWQgLWxkbCIKKyAgICAgICAgYWRkY2ZsYWdzPSItSSRPUFRfTlNTL2luY2x1ZGUiCisgICAgICAgIHZlcnNpb249InVua25vd24iCisgICAgICAgIG5zc3ByZWZpeD0kT1BUX05TUworICAgIGZpCisKKyAgICBkbmwgQ2hlY2sgZm9yIGZ1bmN0aW9uUEsxMV9DcmVhdGVHZW5lcmljT2JqZWN0CisgICAgZG5sIHRoaXMgaXMgbmVlZGVkIGZvciB1c2luZyB0aGUgUEVNIFBLQ1MjMTEgbW9kdWxlCisgICAgQUNfQ0hFQ0tfTElCKG5zczMsIFBLMTFfQ3JlYXRlR2VuZXJpY09iamVjdCwKKyAgICAgWworICAgICBBQ19ERUZJTkUoSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QsIDEsIFtpZiB5b3UgaGF2ZSB0aGUgZnVuY3Rpb24gUEsxMV9DcmVhdGVHZW5lcmljT2JqZWN0XSkKKyAgICAgQUNfU1VCU1QoSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QsIFsxXSkKKyAgICAgXSkKKyAgICBpZiB0ZXN0IC1uICIkYWRkbGliIjsgdGhlbgorCisgICAgICBDTEVBTkxJQlM9IiRMSUJTIgorICAgICAgQ0xFQU5DUFBGTEFHUz0iJENQUEZMQUdTIgorCisgICAgICBMSUJTPSIkTElCUyAkYWRkbGliIgorICAgICAgaWYgdGVzdCAiJGFkZGNmbGFncyIgIT0gIi1JL3Vzci9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkYWRkY2ZsYWdzIgorICAgICAgZmkKKworICAgICAgQUNfQ0hFQ0tfTElCKG5zczMsIE5TU19Jbml0aWFsaXplLAorICAgICAgIFsKKyAgICAgICBBQ19ERUZJTkUoVVNFX05TUywgMSwgW2lmIE5TUyBpcyBlbmFibGVkXSkKKyAgICAgICBBQ19TVUJTVChVU0VfTlNTLCBbMV0pCisgICAgICAgVVNFX05TUz0ieWVzIgorICAgICAgIE5TU19FTkFCTEVEPTEKKyAgICAgICBjdXJsX3NzbF9tc2c9ImVuYWJsZWQgKE5TUykiCisgICAgICAgXSwKKyAgICAgICBbCisgICAgICAgICBMSUJTPSIkQ0xFQU5MSUJTIgorICAgICAgICAgQ1BQRkxBR1M9IiRDTEVBTkNQUEZMQUdTIgorICAgICAgIF0pCisKKyAgICAgIGlmIHRlc3QgIngkVVNFX05TUyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgQUNfTVNHX05PVElDRShbZGV0ZWN0ZWQgTlNTIHZlcnNpb24gJHZlcnNpb25dKQorCisgICAgICAgIGRubCB3aGVuIHNoYXJlZCBsaWJzIHdlcmUgZm91bmQgaW4gYSBwYXRoIHRoYXQgdGhlIHJ1bi10aW1lCisgICAgICAgIGRubCBsaW5rZXIgZG9lc24ndCBzZWFyY2ggdGhyb3VnaCwgd2UgbmVlZCB0byBhZGQgaXQgdG8KKyAgICAgICAgZG5sIExEX0xJQlJBUllfUEFUSCB0byBwcmV2ZW50IGZ1cnRoZXIgY29uZmlndXJlIHRlc3RzIHRvIGZhaWwKKyAgICAgICAgZG5sIGR1ZSB0byB0aGlzCisgICAgICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyI7IHRoZW4KKyAgICAgICAgICBMRF9MSUJSQVJZX1BBVEg9IiRMRF9MSUJSQVJZX1BBVEg6JG5zc3ByZWZpeC9saWIkbGlic3VmZiIKKyAgICAgICAgICBleHBvcnQgTERfTElCUkFSWV9QQVRICisgICAgICAgICAgQUNfTVNHX05PVElDRShbQWRkZWQgJG5zc3ByZWZpeC9saWIkbGlic3VmZiB0byBMRF9MSUJSQVJZX1BBVEhdKQorICAgICAgICBmaQorICAgICAgZmkKKworICAgIGZpCisKKyAgZmkgZG5sIE5TUyBub3QgZGlzYWJsZWQKKworZmkgZG5sIE9QRU5TU0wgIT0gMSAtYSBHTlVUTFNfRU5BQkxFRCAhPSAxCisKK09QVF9BWFRMUz1vZmYKKworQUNfQVJHX1dJVEgoYXh0bHMsZG5sCitBQ19IRUxQX1NUUklORyhbLS13aXRoLWF4dGxzPVBBVEhdLFtXaGVyZSB0byBsb29rIGZvciBheFRMUywgUEFUSCBwb2ludHMgdG8gdGhlIGF4VExTIGluc3RhbGxhdGlvbiBwcmVmaXggKGRlZmF1bHQ6IC91c3IvbG9jYWwpLiAgSWdub3JlZCBpZiBhbm90aGVyIFNTTCBlbmdpbmUgaXMgc2VsZWN0ZWQuXSkKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtYXh0bHNdLCBbZGlzYWJsZSBheFRMU10pLAorICBPUFRfQVhUTFM9JHdpdGh2YWwpCisKK2lmIHRlc3QgIiRjdXJsX3NzbF9tc2ciID0gIiRpbml0X3NzbF9tc2ciOyB0aGVuCisgIGlmIHRlc3QgWCIkT1BUX0FYVExTIiAhPSBYbm87IHRoZW4KKyAgICBkbmwgYmFja3VwIHRoZSBwcmUtYXh0bHMgdmFyaWFibGVzCisgICAgQ0xFQU5MREZMQUdTPSIkTERGTEFHUyIKKyAgICBDTEVBTkNQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgQ0xFQU5MSUJTPSIkTElCUyIKKworICAgIGNhc2UgIiRPUFRfQVhUTFMiIGluCisgICAgeWVzKQorICAgICAgZG5sIC0td2l0aC1heHRscyAod2l0aG91dCBwYXRoKSB1c2VkCisgICAgICBQUkVGSVhfQVhUTFM9L3Vzci9sb2NhbAorICAgICAgTElCX0FYVExTPSIkUFJFRklYX0FYVExTL2xpYiIKKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1MJExJQl9BWFRMUyIKKyAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkUFJFRklYX0FYVExTL2luY2x1ZGUiCisgICAgICA7OworICAgIG9mZikKKyAgICAgIGRubCBubyAtLXdpdGgtYXh0bHMgb3B0aW9uIGdpdmVuLCBqdXN0IGNoZWNrIGRlZmF1bHQgcGxhY2VzCisgICAgICBQUkVGSVhfQVhUTFM9CisgICAgICA7OworICAgICopCisgICAgICBkbmwgY2hlY2sgdGhlIGdpdmVuIC0td2l0aC1heHRscyBzcG90CisgICAgICBQUkVGSVhfQVhUTFM9JE9QVF9BWFRMUworICAgICAgTElCX0FYVExTPSIkUFJFRklYX0FYVExTL2xpYiIKKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1MJExJQl9BWFRMUyIKKyAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkUFJFRklYX0FYVExTL2luY2x1ZGUiCisgICAgICA7OworICAgIGVzYWMKKworICAgIEFDX0NIRUNLX0xJQihheHRscywgc3NsX3ZlcnNpb24sWworICAgICAgTElCUz0iLWxheHRscyAkTElCUyIKKyAgICAgIEFDX0RFRklORShVU0VfQVhUTFMsIDEsIFtpZiBheFRMUyBpcyBlbmFibGVkXSkKKyAgICAgIEFDX1NVQlNUKFVTRV9BWFRMUywgWzFdKQorICAgICAgQVhUTFNfRU5BQkxFRD0xCisgICAgICBVU0VfQVhUTFM9InllcyIKKyAgICAgIGN1cmxfc3NsX21zZz0iZW5hYmxlZCAoYXhUTFMpIgorCisKKyAgICAgIExEX0xJQlJBUllfUEFUSD0iJExEX0xJQlJBUllfUEFUSDokTElCX0FYVExTIgorICAgICAgZXhwb3J0IExEX0xJQlJBUllfUEFUSAorICAgICAgQUNfTVNHX05PVElDRShbQWRkZWQgJExJQl9BWFRMUyB0byBMRF9MSUJSQVJZX1BBVEhdKQorICAgICAgXSxbCisgICAgICBMREZMQUdTPSIkQ0xFQU5MREZMQUdTIgorICAgICAgQ1BQRkxBR1M9IiRDTEVBTkNQUEZMQUdTIgorICAgICAgTElCUz0iJENMRUFOTElCUyIKKyAgICBdKQorICBmaQorZmkKKworaWYgdGVzdCAieCRPUEVOU1NMX0VOQUJMRUQkR05VVExTX0VOQUJMRUQkTlNTX0VOQUJMRUQkUE9MQVJTU0xfRU5BQkxFRCRBWFRMU19FTkFCTEVEJENZQVNTTF9FTkFCTEVEIiA9ICJ4IjsgdGhlbgorICBBQ19NU0dfV0FSTihbU1NMIGRpc2FibGVkLCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byB1c2UgSFRUUFMsIEZUUFMsIE5UTE0gYW5kIG1vcmUuXSkKKyAgQUNfTVNHX1dBUk4oW1VzZSAtLXdpdGgtc3NsLCAtLXdpdGgtZ251dGxzLCAtLXdpdGgtcG9sYXJzc2wsIC0td2l0aC1jeWFzc2wsIC0td2l0aC1uc3Mgb3IgLS13aXRoLWF4dGxzIHRvIGFkZHJlc3MgdGhpcy5dKQorZWxzZQorICAjIFNTTCBpcyBlbmFibGVkLCBnZW5lcmljbHkKKyAgQUNfU1VCU1QoU1NMX0VOQUJMRUQpCisgIFNTTF9FTkFCTEVEPSIxIgorZmkKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBDaGVjayBmb3IgdGhlIENBIGJ1bmRsZQorZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQ1VSTF9DSEVDS19DQV9CVU5ETEUKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIExJQlNTSDIgbGlicmFyaWVzIGFuZCBoZWFkZXJzCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitkbmwgRGVmYXVsdCB0byBjb21waWxlciAmIGxpbmtlciBkZWZhdWx0cyBmb3IgTElCU1NIMiBmaWxlcyAmIGxpYnJhcmllcy4KK09QVF9MSUJTU0gyPW9mZgorQUNfQVJHX1dJVEgobGlic3NoMixkbmwKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtbGlic3NoMj1QQVRIXSxbV2hlcmUgdG8gbG9vayBmb3IgbGlic3NoMiwgUEFUSCBwb2ludHMgdG8gdGhlIExJQlNTSDIgaW5zdGFsbGF0aW9uOyB3aGVuIHBvc3NpYmxlLCBzZXQgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbnN0ZWFkIG9mIHVzaW5nIHRoaXMgb3B0aW9uXSkKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtbGlic3NoMl0sIFtkaXNhYmxlIExJQlNTSDJdKSwKKyAgT1BUX0xJQlNTSDI9JHdpdGh2YWwpCisKK2lmIHRlc3QgWCIkT1BUX0xJQlNTSDIiICE9IFhubzsgdGhlbgorICBkbmwgYmFja3VwIHRoZSBwcmUtbGlic3NoMiB2YXJpYWJsZXMKKyAgQ0xFQU5MREZMQUdTPSIkTERGTEFHUyIKKyAgQ0xFQU5DUFBGTEFHUz0iJENQUEZMQUdTIgorICBDTEVBTkxJQlM9IiRMSUJTIgorCisgIGNhc2UgIiRPUFRfTElCU1NIMiIgaW4KKyAgeWVzKQorICAgIGRubCAtLXdpdGgtbGlic3NoMiAod2l0aG91dCBwYXRoKSB1c2VkCisgICAgQ1VSTF9DSEVDS19QS0dDT05GSUcobGlic3NoMikKKworICAgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyIgOyB0aGVuCisgICAgICBMSUJfU1NIMj1gJFBLR0NPTkZJRyAtLWxpYnMtb25seS1sIGxpYnNzaDJgCisgICAgICBMRF9TU0gyPWAkUEtHQ09ORklHIC0tbGlicy1vbmx5LUwgbGlic3NoMmAKKyAgICAgIENQUF9TU0gyPWAkUEtHQ09ORklHIC0tY2ZsYWdzLW9ubHktSSBsaWJzc2gyYAorICAgICAgdmVyc2lvbj1gJFBLR0NPTkZJRyAtLW1vZHZlcnNpb24gbGlic3NoMmAKKyAgICAgIERJUl9TU0gyPWBlY2hvICRMRF9TU0gyIHwgJFNFRCAtZSAncy8tTC8vJ2AKKyAgICBmaQorCisgICAgOzsKKyAgb2ZmKQorICAgIGRubCBubyAtLXdpdGgtbGlic3NoMiBvcHRpb24gZ2l2ZW4sIGp1c3QgY2hlY2sgZGVmYXVsdCBwbGFjZXMKKyAgICA7OworICAqKQorICAgIGRubCB1c2UgdGhlIGdpdmVuIC0td2l0aC1saWJzc2gyIHNwb3QKKyAgICBQUkVGSVhfU1NIMj0kT1BUX0xJQlNTSDIKKyAgICA7OworICBlc2FjCisKKyAgZG5sIGlmIGdpdmVuIHdpdGggYSBwcmVmaXgsIHdlIHNldCAtTCBhbmQgLUkgYmFzZWQgb24gdGhhdAorICBpZiB0ZXN0IC1uICIkUFJFRklYX1NTSDIiOyB0aGVuCisgICAgTElCX1NTSDI9Ii1sc3NoMiIKKyAgICBMRF9TU0gyPS1MJHtQUkVGSVhfU1NIMn0vbGliJGxpYnN1ZmYKKyAgICBDUFBfU1NIMj0tSSR7UFJFRklYX1NTSDJ9L2luY2x1ZGUKKyAgICBESVJfU1NIMj0ke1BSRUZJWF9TU0gyfS9saWIkbGlic3VmZgorICBmaQorCisgIExERkxBR1M9IiRMREZMQUdTICRMRF9TU0gyIgorICBDUFBGTEFHUz0iJENQUEZMQUdTICRDUFBfU1NIMiIKKyAgTElCUz0iJExJQlMgJExJQl9TU0gyIgorCisgIEFDX0NIRUNLX0xJQihzc2gyLCBsaWJzc2gyX2NoYW5uZWxfb3Blbl9leCkKKworICBBQ19DSEVDS19IRUFERVJTKGxpYnNzaDIuaCwKKyAgICBjdXJsX3NzaF9tc2c9ImVuYWJsZWQgKGxpYlNTSDIpIgorICAgIExJQlNTSDJfRU5BQkxFRD0xCisgICAgQUNfREVGSU5FKFVTRV9MSUJTU0gyLCAxLCBbaWYgbGliU1NIMiBpcyBpbiB1c2VdKQorICAgIEFDX1NVQlNUKFVTRV9MSUJTU0gyLCBbMV0pCisgICkKKworICBpZiB0ZXN0IFgiJE9QVF9MSUJTU0gyIiAhPSBYb2ZmICYmCisgICAgIHRlc3QgIiRMSUJTU0gyX0VOQUJMRUQiICE9ICIxIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbbGliU1NIMiBsaWJzIGFuZC9vciBkaXJlY3RvcmllcyB3ZXJlIG5vdCBmb3VuZCB3aGVyZSBzcGVjaWZpZWQhXSkKKyAgZmkKKworICBpZiB0ZXN0ICIkTElCU1NIMl9FTkFCTEVEIiA9ICIxIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRESVJfU1NIMiI7IHRoZW4KKyAgICAgICBkbmwgd2hlbiB0aGUgbGlic3NoMiBzaGFyZWQgbGlicyB3ZXJlIGZvdW5kIGluIGEgcGF0aCB0aGF0IHRoZSBydW4tdGltZQorICAgICAgIGRubCBsaW5rZXIgZG9lc24ndCBzZWFyY2ggdGhyb3VnaCwgd2UgbmVlZCB0byBhZGQgaXQgdG8gTERfTElCUkFSWV9QQVRICisgICAgICAgZG5sIHRvIHByZXZlbnQgZnVydGhlciBjb25maWd1cmUgdGVzdHMgdG8gZmFpbCBkdWUgdG8gdGhpcworCisgICAgICAgZG5sIGxpYnNzaDJfdmVyc2lvbiBpcyBhIHBvc3QgMS4wIGFkZGl0aW9uCisgICAgICAgZG5sIGxpYnNzaDJfaW5pdCBhbmQgbGlic3NoMl9leGl0IHdlcmUgYWRkZWQgaW4gMS4yLjUKKyAgICAgICBkbmwgbGlic3NoMl9zY3Bfc2VuZDY0IHdhcyBhZGRlZCBpbiAxLjIuNgorICAgICAgIGRubCBsaWJzc2gyX3Nlc3Npb25faGFuZHNoYWtlIHdhcyBhZGRlZCBpbiAxLjIuOAorICAgICAgIEFDX0NIRUNLX0ZVTkNTKCBsaWJzc2gyX3ZlcnNpb24gbGlic3NoMl9pbml0IGxpYnNzaDJfZXhpdCBcCisgICAgICAgICAgICAgICAgICAgICAgIGxpYnNzaDJfc2NwX3NlbmQ2NCBsaWJzc2gyX3Nlc3Npb25faGFuZHNoYWtlKQorICAgICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyI7IHRoZW4KKyAgICAgICAgIExEX0xJQlJBUllfUEFUSD0iJExEX0xJQlJBUllfUEFUSDokRElSX1NTSDIiCisgICAgICAgICBleHBvcnQgTERfTElCUkFSWV9QQVRICisgICAgICAgICBBQ19NU0dfTk9USUNFKFtBZGRlZCAkRElSX1NTSDIgdG8gTERfTElCUkFSWV9QQVRIXSkKKyAgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICBkbmwgbm8gbGlic3NoMiwgcmV2ZXJ0IGJhY2sgdG8gY2xlYW4gdmFyaWFibGVzCisgICAgTERGTEFHUz0kQ0xFQU5MREZMQUdTCisgICAgQ1BQRkxBR1M9JENMRUFOQ1BQRkxBR1MKKyAgICBMSUJTPSRDTEVBTkxJQlMKKyAgZmkKK2ZpCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBMSUJSVE1QIGxpYnJhcmllcyBhbmQgaGVhZGVycworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworZG5sIERlZmF1bHQgdG8gY29tcGlsZXIgJiBsaW5rZXIgZGVmYXVsdHMgZm9yIExJQlJUTVAgZmlsZXMgJiBsaWJyYXJpZXMuCitPUFRfTElCUlRNUD1vZmYKK0FDX0FSR19XSVRIKGxpYnJ0bXAsZG5sCitBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYnJ0bXA9UEFUSF0sW1doZXJlIHRvIGxvb2sgZm9yIGxpYnJ0bXAsIFBBVEggcG9pbnRzIHRvIHRoZSBMSUJSVE1QIGluc3RhbGxhdGlvbjsgd2hlbiBwb3NzaWJsZSwgc2V0IHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaW5zdGVhZCBvZiB1c2luZyB0aGlzIG9wdGlvbl0pCitBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LWxpYnJ0bXBdLCBbZGlzYWJsZSBMSUJSVE1QXSksCisgIE9QVF9MSUJSVE1QPSR3aXRodmFsKQorCitpZiB0ZXN0IFgiJE9QVF9MSUJSVE1QIiAhPSBYbm87IHRoZW4KKyAgZG5sIGJhY2t1cCB0aGUgcHJlLWxpYnJ0bXAgdmFyaWFibGVzCisgIENMRUFOTERGTEFHUz0iJExERkxBR1MiCisgIENMRUFOQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgQ0xFQU5MSUJTPSIkTElCUyIKKworICBjYXNlICIkT1BUX0xJQlJUTVAiIGluCisgIHllcykKKyAgICBkbmwgLS13aXRoLWxpYnJ0bXAgKHdpdGhvdXQgcGF0aCkgdXNlZAorICAgIENVUkxfQ0hFQ0tfUEtHQ09ORklHKGxpYnJ0bXApCisKKyAgICBpZiB0ZXN0ICIkUEtHQ09ORklHIiAhPSAibm8iIDsgdGhlbgorICAgICAgTElCX1JUTVA9YCRQS0dDT05GSUcgLS1saWJzLW9ubHktbCBsaWJydG1wYAorICAgICAgTERfUlRNUD1gJFBLR0NPTkZJRyAtLWxpYnMtb25seS1MIGxpYnJ0bXBgCisgICAgICBDUFBfUlRNUD1gJFBLR0NPTkZJRyAtLWNmbGFncy1vbmx5LUkgbGlicnRtcGAKKyAgICAgIHZlcnNpb249YCRQS0dDT05GSUcgLS1tb2R2ZXJzaW9uIGxpYnJ0bXBgCisgICAgICBESVJfUlRNUD1gZWNobyAkTERfUlRNUCB8ICRTRUQgLWUgJ3MvLUwvLydgCisgICAgZWxzZQorICAgICAgZG5sIFRvIGF2b2lkIGxpbmsgZXJyb3JzLCB3ZSBkbyBub3QgYWxsb3cgLS1saWJydG1wIHdpdGhvdXQKKyAgICAgIGRubCBhIHBrZ2NvbmZpZyBmaWxlCisgICAgICBBQ19NU0dfRVJST1IoWy0tbGlicnRtcCB3YXMgc3BlY2lmaWVkIGJ1dCBjb3VsZCBub3QgZmluZCBsaWJydG1wIHBrZ2NvbmZpZyBmaWxlLl0pCisgICAgZmkKKworICAgIDs7CisgIG9mZikKKyAgICBkbmwgbm8gLS13aXRoLWxpYnJ0bXAgb3B0aW9uIGdpdmVuLCBqdXN0IGNoZWNrIGRlZmF1bHQgcGxhY2VzCisgICAgTElCX1JUTVA9Ii1scnRtcCIKKyAgICA7OworICAqKQorICAgIGRubCB1c2UgdGhlIGdpdmVuIC0td2l0aC1saWJydG1wIHNwb3QKKyAgICBQUkVGSVhfUlRNUD0kT1BUX0xJQlJUTVAKKyAgICA7OworICBlc2FjCisKKyAgZG5sIGlmIGdpdmVuIHdpdGggYSBwcmVmaXgsIHdlIHNldCAtTCBhbmQgLUkgYmFzZWQgb24gdGhhdAorICBpZiB0ZXN0IC1uICIkUFJFRklYX1JUTVAiOyB0aGVuCisgICAgTERfUlRNUD0tTCR7UFJFRklYX1JUTVB9L2xpYiRsaWJzdWZmCisgICAgQ1BQX1JUTVA9LUkke1BSRUZJWF9SVE1QfS9pbmNsdWRlCisgICAgRElSX1JUTVA9JHtQUkVGSVhfUlRNUH0vbGliJGxpYnN1ZmYKKyAgZmkKKworICBMREZMQUdTPSIkTERGTEFHUyAkTERfUlRNUCIKKyAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkQ1BQX1JUTVAiCisgIExJQlM9IiRMSUJTICRMSUJfUlRNUCIKKworICBBQ19DSEVDS19MSUIocnRtcCwgUlRNUF9Jbml0LAorICAgIFsKKyAgICAgQUNfQ0hFQ0tfSEVBREVSUyhsaWJydG1wL3J0bXAuaCwKKyAgICAgICAgY3VybF9ydG1wX21zZz0iZW5hYmxlZCAobGlicnRtcCkiCisgICAgICAgIExJQlJUTVBfRU5BQkxFRD0xCisgICAgICAgIEFDX0RFRklORShVU0VfTElCUlRNUCwgMSwgW2lmIGxpYnJ0bXAgaXMgaW4gdXNlXSkKKyAgICAgICAgQUNfU1VCU1QoVVNFX0xJQlJUTVAsIFsxXSkKKyAgICAgKQorICAgIF0sCisgICAgICBkbmwgbm90IGZvdW5kLCByZXZlcnQgYmFjayB0byBjbGVhbiB2YXJpYWJsZXMKKyAgICAgIExERkxBR1M9JENMRUFOTERGTEFHUworICAgICAgQ1BQRkxBR1M9JENMRUFOQ1BQRkxBR1MKKyAgICAgIExJQlM9JENMRUFOTElCUworICApCisKKyAgaWYgdGVzdCBYIiRPUFRfTElCUlRNUCIgIT0gWG9mZiAmJgorICAgICB0ZXN0ICIkTElCUlRNUF9FTkFCTEVEIiAhPSAiMSI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW2xpYnJ0bXAgbGlicyBhbmQvb3IgZGlyZWN0b3JpZXMgd2VyZSBub3QgZm91bmQgd2hlcmUgc3BlY2lmaWVkIV0pCisgIGZpCisKK2ZpCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQ2hlY2sgZm9yIGxpbmtlciBzd2l0Y2ggZm9yIHZlcnNpb25lZCBzeW1ib2xzCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnJhcmllcyBjYW4gYmUgdmVyc2lvbmVkXSkKK0dMRD1gJExEIC0taGVscCA8IC9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8IGdyZXAgdmVyc2lvbi1zY3JpcHRgCitpZiB0ZXN0IC16ICIkR0xEIjsgdGhlbgorICAgIHZlcnNpb25lZF9zeW1ib2xzX2ZsYXZvdXI9CisgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICBBQ19NU0dfV0FSTigqKioKKyoqKiBZb3UgbmVlZCBhbiBsZCB2ZXJzaW9uIHN1cHBvcnRpbmcgdGhlIC0tdmVyc2lvbi1zY3JpcHQgb3B0aW9uLgorKQorZWxzZQorICAgIEFDX01TR19SRVNVTFQoeWVzKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdmVyc2lvbmVkIHN5bWJvbHMgYXJlIHdhbnRlZF0pCit2ZXJzaW9uZWRfc3ltYm9sc19mbGF2b3VyPQorCitBQ19BUkdfRU5BQkxFKHZlcnNpb25lZC1zeW1ib2xzLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZlcnNpb25lZC1zeW1ib2xzXSwgW0VuYWJsZSB2ZXJzaW9uZWQgc3ltYm9scyBpbiBzaGFyZWQgbGlicmFyeV0pCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXZlcnNpb25lZC1zeW1ib2xzXSwgW0Rpc2FibGUgdmVyc2lvbmVkIHN5bWJvbHMgaW4gc2hhcmVkIGxpYnJhcnldKSwKK1sgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgeWVzKSBBQ19NU0dfUkVTVUxUKHllcykKKyAgICBpZiB0ZXN0ICJ4JE9QRU5TU0xfRU5BQkxFRCIgPSAieDEiOyB0aGVuCisgICAgICB2ZXJzaW9uZWRfc3ltYm9sc19mbGF2b3VyPSJPUEVOU1NMXyIKKyAgICBlbGlmIHRlc3QgIngkR05VVExTX0VOQUJMRUQiID09ICJ4MSI7IHRoZW4KKyAgICAgIHZlcnNpb25lZF9zeW1ib2xzX2ZsYXZvdXI9IkdOVVRMU18iCisgICAgZWxpZiB0ZXN0ICJ4JE5TU19FTkFCTEVEIiA9PSAieDEiOyB0aGVuCisgICAgICB2ZXJzaW9uZWRfc3ltYm9sc19mbGF2b3VyPSJOU1NfIgorICAgIGVsaWYgdGVzdCAieCRQT0xBUlNTTF9FTkFCTEVEIiA9PSAieDEiOyB0aGVuCisgICAgICB2ZXJzaW9uZWRfc3ltYm9sc19mbGF2b3VyPSJQT0xBUlNTTF8iCisgICAgZWxpZiB0ZXN0ICJ4JENZQVNTTF9FTkFCTEVEIiA9PSAieDEiOyB0aGVuCisgICAgICB2ZXJzaW9uZWRfc3ltYm9sc19mbGF2b3VyPSJDWUFTU0xfIgorICAgIGVsaWYgdGVzdCAieCRBWFRMU19FTkFCTEVEIiA9PSAieDEiOyB0aGVuCisgICAgICB2ZXJzaW9uZWRfc3ltYm9sc19mbGF2b3VyPSJBWFRMU18iCisgICAgZWxzZQorICAgICAgdmVyc2lvbmVkX3N5bWJvbHNfZmxhdm91cj0iIgorICAgIGZpCisgICAgdmVyc2lvbmVkX3N5bWJvbHM9InllcyIKKyAgICA7OworCisgICopICAgQUNfTVNHX1JFU1VMVChubykKKyAgICA7OworICBlc2FjCitdLCBbCitBQ19NU0dfUkVTVUxUKG5vKQorXQorKQorZmkKKworQUNfU1VCU1QoVkVSU0lPTkVEX0ZMQVZPVVIsIFsiJHZlcnNpb25lZF9zeW1ib2xzX2ZsYXZvdXIiXSkKK0FNX0NPTkRJVElPTkFMKFZFUlNJT05FRF9TWU1CT0xTLCB0ZXN0ICJ4JHZlcnNpb25lZF9zeW1ib2xzIiA9ICJ4eWVzIikKKworCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIENoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgSUROIGxpYnJhcmllcyBhbmQgaGVhZGVycworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHdpdGggbGliaWRuXSkKK09QVF9JRE49ImRlZmF1bHQiCitBQ19BUkdfV0lUSChsaWJpZG4sCitBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmlkbj1QQVRIXSxbRW5hYmxlIGxpYmlkbiB1c2FnZV0pCitBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LWxpYmlkbl0sW0Rpc2FibGUgbGliaWRuIHVzYWdlXSksCisgIFtPUFRfSUROPSR3aXRodmFsXSkKK2Nhc2UgIiRPUFRfSUROIiBpbgorICBubykKKyAgICBkbmwgLS13aXRob3V0LWxpYmlkbiBvcHRpb24gdXNlZAorICAgIHdhbnRfaWRuPSJubyIKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgOzsKKyAgZGVmYXVsdCkKKyAgICBkbmwgY29uZmlndXJlIG9wdGlvbiBub3Qgc3BlY2lmaWVkCisgICAgd2FudF9pZG49InllcyIKKyAgICB3YW50X2lkbl9wYXRoPSJkZWZhdWx0IgorICAgIEFDX01TR19SRVNVTFQoWyhhc3N1bWVkKSB5ZXNdKQorICAgIDs7CisgIHllcykKKyAgICBkbmwgLS13aXRoLWxpYmlkbiBvcHRpb24gdXNlZCB3aXRob3V0IHBhdGgKKyAgICB3YW50X2lkbj0ieWVzIgorICAgIHdhbnRfaWRuX3BhdGg9ImRlZmF1bHQiCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICA7OworICAqKQorICAgIGRubCAtLXdpdGgtbGliaWRuIG9wdGlvbiB1c2VkIHdpdGggcGF0aAorICAgIHdhbnRfaWRuPSJ5ZXMiCisgICAgd2FudF9pZG5fcGF0aD0iJHdpdGh2YWwiCisgICAgQUNfTVNHX1JFU1VMVChbeWVzICgkd2l0aHZhbCldKQorICAgIDs7Citlc2FjCisKK2lmIHRlc3QgIiR3YW50X2lkbiIgPSAieWVzIjsgdGhlbgorICBkbmwgaWRuIGxpYnJhcnkgc3VwcG9ydCBoYXMgYmVlbiByZXF1ZXN0ZWQKKyAgY2xlYW5fQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgY2xlYW5fTERGTEFHUz0iJExERkxBR1MiCisgIGNsZWFuX0xJQlM9IiRMSUJTIgorICBQS0dDT05GSUc9Im5vIgorICAjCisgIGlmIHRlc3QgIiR3YW50X2lkbl9wYXRoIiAhPSAiZGVmYXVsdCI7IHRoZW4KKyAgICBkbmwgcGF0aCBoYXMgYmVlbiBzcGVjaWZpZWQKKyAgICBJRE5fUENESVI9IiR3YW50X2lkbl9wYXRoL2xpYiRsaWJzdWZmL3BrZ2NvbmZpZyIKKyAgICBDVVJMX0NIRUNLX1BLR0NPTkZJRyhsaWJpZG4sIFskSUROX1BDRElSXSkKKyAgICBpZiB0ZXN0ICIkUEtHQ09ORklHIiAhPSAibm8iOyB0aGVuCisgICAgICBJRE5fTElCUz1gQ1VSTF9FWFBPUlRfUENESVIoWyRJRE5fUENESVJdKSBkbmwKKyAgICAgICAgJFBLR0NPTkZJRyAtLWxpYnMtb25seS1sIGxpYmlkbiAyPi9kZXYvbnVsbGAKKyAgICAgIElETl9MREZMQUdTPWBDVVJMX0VYUE9SVF9QQ0RJUihbJElETl9QQ0RJUl0pIGRubAorICAgICAgICAkUEtHQ09ORklHIC0tbGlicy1vbmx5LUwgbGliaWRuIDI+L2Rldi9udWxsYAorICAgICAgSUROX0NQUEZMQUdTPWBDVVJMX0VYUE9SVF9QQ0RJUihbJElETl9QQ0RJUl0pIGRubAorICAgICAgICAkUEtHQ09ORklHIC0tY2ZsYWdzLW9ubHktSSBsaWJpZG4gMj4vZGV2L251bGxgCisgICAgICBJRE5fRElSPWBlY2hvICRJRE5fTERGTEFHUyB8ICRTRUQgLWUgJ3MvLUwvLydgCisgICAgZWxzZQorICAgICAgZG5sIHBrZy1jb25maWcgbm90IGF2YWlsYWJsZSBvciBwcm92aWRlcyBubyBpbmZvCisgICAgICBJRE5fTElCUz0iLWxpZG4iCisgICAgICBJRE5fTERGTEFHUz0iLUwkd2FudF9pZG5fcGF0aC9saWIkbGlic3VmZiIKKyAgICAgIElETl9DUFBGTEFHUz0iLUkkd2FudF9pZG5fcGF0aC9pbmNsdWRlIgorICAgICAgSUROX0RJUj0iJHdhbnRfaWRuX3BhdGgvbGliJGxpYnN1ZmYiCisgICAgZmkKKyAgZWxzZQorICAgIGRubCBwYXRoIG5vdCBzcGVjaWZpZWQKKyAgICBDVVJMX0NIRUNLX1BLR0NPTkZJRyhsaWJpZG4pCisgICAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIjsgdGhlbgorICAgICAgSUROX0xJQlM9YCRQS0dDT05GSUcgLS1saWJzLW9ubHktbCBsaWJpZG4gMj4vZGV2L251bGxgCisgICAgICBJRE5fTERGTEFHUz1gJFBLR0NPTkZJRyAtLWxpYnMtb25seS1MIGxpYmlkbiAyPi9kZXYvbnVsbGAKKyAgICAgIElETl9DUFBGTEFHUz1gJFBLR0NPTkZJRyAtLWNmbGFncy1vbmx5LUkgbGliaWRuIDI+L2Rldi9udWxsYAorICAgICAgSUROX0RJUj1gZWNobyAkSUROX0xERkxBR1MgfCAkU0VEIC1lICdzLy1MLy8nYAorICAgIGVsc2UKKyAgICAgIGRubCBwa2ctY29uZmlnIG5vdCBhdmFpbGFibGUgb3IgcHJvdmlkZXMgbm8gaW5mbworICAgICAgSUROX0xJQlM9Ii1saWRuIgorICAgIGZpCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIjsgdGhlbgorICAgIEFDX01TR19OT1RJQ0UoW3BrZy1jb25maWc6IElETl9MSUJTOiAiJElETl9MSUJTIl0pCisgICAgQUNfTVNHX05PVElDRShbcGtnLWNvbmZpZzogSUROX0xERkxBR1M6ICIkSUROX0xERkxBR1MiXSkKKyAgICBBQ19NU0dfTk9USUNFKFtwa2ctY29uZmlnOiBJRE5fQ1BQRkxBR1M6ICIkSUROX0NQUEZMQUdTIl0pCisgICAgQUNfTVNHX05PVElDRShbcGtnLWNvbmZpZzogSUROX0RJUjogIiRJRE5fRElSIl0pCisgIGVsc2UKKyAgICBBQ19NU0dfTk9USUNFKFtJRE5fTElCUzogIiRJRE5fTElCUyJdKQorICAgIEFDX01TR19OT1RJQ0UoW0lETl9MREZMQUdTOiAiJElETl9MREZMQUdTIl0pCisgICAgQUNfTVNHX05PVElDRShbSUROX0NQUEZMQUdTOiAiJElETl9DUFBGTEFHUyJdKQorICAgIEFDX01TR19OT1RJQ0UoW0lETl9ESVI6ICIkSUROX0RJUiJdKQorICBmaQorICAjCisgIENQUEZMQUdTPSIkSUROX0NQUEZMQUdTICRDUFBGTEFHUyIKKyAgTERGTEFHUz0iJElETl9MREZMQUdTICRMREZMQUdTIgorICBMSUJTPSIkSUROX0xJQlMgJExJQlMiCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpZG5hX3RvX2FzY2lpXzRpIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtpZG5hX3RvX2FzY2lpXzRpXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfbGliaWRuPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfbGliaWRuPSJubyIKKyAgXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19saWJpZG4iID0gIm5vIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaWRuYV90b19hc2NpaV9seiBjYW4gYmUgbGlua2VkXSkKKyAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2lkbmFfdG9fYXNjaWlfbHpdKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9saW5rc19saWJpZG49InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9saW5rc19saWJpZG49Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19saWJpZG4iID0gInllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9MSUJJRE4sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlkbicgbGlicmFyeSAoLWxpZG4pLl0pCisgICAgZG5sIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBsaWJpZG4gaGF2ZSBkaWZmZXJlbnQgc2V0dXBzIG9mIHRoZXNlOgorICAgIEFDX0NIRUNLX0ZVTkNTKCBpZG5fZnJlZSBpZG5hX3N0cmVycm9yIHRsZF9zdHJlcnJvciApCisgICAgQUNfQ0hFQ0tfSEVBREVSUyggaWRuLWZyZWUuaCB0bGQuaCApCisgICAgaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdGxkX2giID0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19TVUJTVChbSUROX0VOQUJMRURdLCBbMV0pCisgICAgICBjdXJsX2lkbl9tc2c9ImVuYWJsZWQiCisgICAgICBpZiB0ZXN0IC1uICIkSUROX0RJUiI7IHRoZW4KKyAgICAgICAgTERfTElCUkFSWV9QQVRIPSIkTERfTElCUkFSWV9QQVRIOiRJRE5fRElSIgorICAgICAgICBleHBvcnQgTERfTElCUkFSWV9QQVRICisgICAgICAgIEFDX01TR19OT1RJQ0UoW0FkZGVkICRJRE5fRElSIHRvIExEX0xJQlJBUllfUEFUSF0pCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIEFDX01TR19XQVJOKFtMaWJyYXJpZXMgZm9yIElETiBzdXBwb3J0IHRvbyBvbGQ6IElETiBkaXNhYmxlZF0pCisgICAgICBDUFBGTEFHUz0iJGNsZWFuX0NQUEZMQUdTIgorICAgICAgTERGTEFHUz0iJGNsZWFuX0xERkxBR1MiCisgICAgICBMSUJTPSIkY2xlYW5fTElCUyIKKyAgICBmaQorICBlbHNlCisgICAgQUNfTVNHX1dBUk4oW0Nhbm5vdCBmaW5kIGxpYnJhcmllcyBmb3IgSUROIHN1cHBvcnQ6IElETiBkaXNhYmxlZF0pCisgICAgQ1BQRkxBR1M9IiRjbGVhbl9DUFBGTEFHUyIKKyAgICBMREZMQUdTPSIkY2xlYW5fTERGTEFHUyIKKyAgICBMSUJTPSIkY2xlYW5fTElCUyIKKyAgZmkKK2ZpCisKKworZG5sIExldCdzIGhvcGUgdGhpcyBzcGxpdCBVUkwgcmVtYWlucyB3b3JraW5nOgorZG5sIGh0dHA6Ly9wdWJsaWJuLmJvdWxkZXIuaWJtLmNvbS9kb2NfbGluay9lbl9VUy9hX2RvY19saWIvYWl4cHJnZ2QvIFwKK2RubCBnZW5wcm9nYy90aHJlYWRfcXVpY2tfcmVmLmh0bQorCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgQmFjayB0byAibm9ybWFsIiBjb25maWd1cmluZworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorQUNfSEVBREVSX1NUREMKKworQ1VSTF9DSEVDS19IRUFERVJfTUFMTE9DCitDVVJMX0NIRUNLX0hFQURFUl9NRU1PUlkKKworZG5sIE5vdyBjaGVjayBmb3IgdGhlIHZlcnkgbW9zdCBiYXNpYyBoZWFkZXJzLiBUaGVuIHdlIGNhbiB1c2UgdGhlc2UKK2RubCBvbmVzIGFzIGRlZmF1bHQtaGVhZGVycyB3aGVuIGNoZWNraW5nIGZvciB0aGUgcmVzdCEKK0FDX0NIRUNLX0hFQURFUlMoCisgICAgICAgIHN5cy90eXBlcy5oIFwKKyAgICAgICAgc3lzL3RpbWUuaCBcCisgICAgICAgIHN5cy9zZWxlY3QuaCBcCisgICAgICAgIHN5cy9zb2NrZXQuaCBcCisgICAgICAgIHN5cy9pb2N0bC5oIFwKKyAgICAgICAgc3lzL3Vpby5oIFwKKyAgICAgICAgYXNzZXJ0LmggXAorICAgICAgICB1bmlzdGQuaCBcCisgICAgICAgIHN0ZGxpYi5oIFwKKyAgICAgICAgbGltaXRzLmggXAorICAgICAgICBhcnBhL2luZXQuaCBcCisgICAgICAgIG5ldC9pZi5oIFwKKyAgICAgICAgbmV0aW5ldC9pbi5oIFwKKyAgICAgICAgc3lzL3VuLmggXAorICAgICAgICBuZXRpbmV0L3RjcC5oIFwKKyAgICAgICAgbmV0ZGIuaCBcCisgICAgICAgIHN5cy9zb2NraW8uaCBcCisgICAgICAgIHN5cy9zdGF0LmggXAorICAgICAgICBzeXMvcGFyYW0uaCBcCisgICAgICAgIHRlcm1pb3MuaCBcCisgICAgICAgIHRlcm1pby5oIFwKKyAgICAgICAgc2d0dHkuaCBcCisgICAgICAgIGZjbnRsLmggXAorICAgICAgICBhbGxvY2EuaCBcCisgICAgICAgIHRpbWUuaCBcCisgICAgICAgIGlvLmggXAorICAgICAgICBwd2QuaCBcCisgICAgICAgIHV0aW1lLmggXAorICAgICAgICBzeXMvdXRpbWUuaCBcCisgICAgICAgIHN5cy9wb2xsLmggXAorICAgICAgICBwb2xsLmggXAorICAgICAgICBzb2NrZXQuaCBcCisgICAgICAgIHN5cy9yZXNvdXJjZS5oIFwKKyAgICAgICAgbGliZ2VuLmggXAorICAgICAgICBsb2NhbGUuaCBcCisgICAgICAgIGVycm5vLmggXAorICAgICAgICBzdGRib29sLmggXAorICAgICAgICBhcnBhL3RmdHAuaCBcCisgICAgICAgIHN5cy9maWxpby5oIFwKKyAgICAgICAgc3lzL3dhaXQuaCBcCisgICAgICAgIHNldGptcC5oLAorZG5sIHRvIGRvIGlmIG5vdCBmb3VuZAorW10sCitkbmwgdG8gZG8gaWYgZm91bmQKK1tdLAorZG5sIGRlZmF1bHQgaW5jbHVkZXMKK1sKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU0VMRUNUX0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVU5fSAorI2luY2x1ZGUgPHN5cy91bi5oPgorI2VuZGlmCitdCispCisKK2RubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorQUNfQ19DT05TVAorQ1VSTF9DSEVDS19WQVJJQURJQ19NQUNST1MKK0FDX1RZUEVfU0laRV9UCitBQ19IRUFERVJfVElNRQorQ1VSTF9DSEVDS19TVFJVQ1RfVElNRVZBTAorQ1VSTF9WRVJJRllfUlVOVElNRUxJQlMKKworQUNfQ0hFQ0tfU0laRU9GKHNpemVfdCkKK0FDX0NIRUNLX1NJWkVPRihsb25nKQorQUNfQ0hFQ0tfU0laRU9GKGludCkKK0FDX0NIRUNLX1NJWkVPRihzaG9ydCkKK0NVUkxfQ09ORklHVVJFX0xPTkcKK0FDX0NIRUNLX1NJWkVPRih0aW1lX3QpCitBQ19DSEVDS19TSVpFT0Yob2ZmX3QpCisKK3NvbmFtZV9idW1wPW5vCitpZiB0ZXN0IHgiJGFjX2N2X25hdGl2ZV93aW5kb3dzIiAhPSAieHllcyIgJiYKKyAgIHRlc3QgJGFjX2N2X3NpemVvZl9vZmZfdCAtbmUgJGN1cmxfc2l6ZW9mX2N1cmxfb2ZmX3Q7IHRoZW4KKyAgQUNfTVNHX1dBUk4oW1RoaXMgbGliY3VybCBidWlsdCBpcyBwcm9iYWJseSBub3QgQUJJIGNvbXBhdGlibGUgd2l0aCBwcmV2aW91c10pCisgIEFDX01TR19XQVJOKFtidWlsZHMhIFlvdSBNVVNUIHJlYWQgbGliL1JFQURNRS5jdXJsX29mZl90IHRvIGZpZ3VyZSBpdCBvdXQuXSkKKyAgc29uYW1lX2J1bXA9eWVzCitmaQorCisKK0FDX0NIRUNLX1RZUEUobG9uZyBsb25nLAorICAgW0FDX0RFRklORShIQVZFX0xPTkdMT05HLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgJ2xvbmcgbG9uZycgZGF0YSB0eXBlLl0pXQorICAgbG9uZ2xvbmc9InllcyIKKykKKworaWYgdGVzdCAieHllcyIgPSAieCRsb25nbG9uZyI7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBudW1iZXJMTCB3b3Jrc10pCisgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICBdXSxbWworICAgICAgbG9uZyBsb25nIHZhbCA9IDEwMDBMTDsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkUoSEFWRV9MTCwgMSwgW2lmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgTExdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIF0pCitmaQorCisKKyMgY2hlY2sgZm9yIHNzaXplX3QKK0FDX0NIRUNLX1RZUEUoc3NpemVfdCwgLAorICAgQUNfREVGSU5FKHNzaXplX3QsIGludCwgW3RoZSBzaWduZWQgdmVyc2lvbiBvZiBzaXplX3RdKSkKKworIyBjaGVjayBmb3IgYm9vbCB0eXBlCitBQ19DSEVDS19UWVBFKFtib29sXSxbCisgIEFDX0RFRklORShIQVZFX0JPT0xfVCwgMSwKKyAgICBbRGVmaW5lIHRvIDEgaWYgYm9vbCBpcyBhbiBhdmFpbGFibGUgdHlwZS5dKQorXSwgLFsKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUREJPT0xfSAorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNlbmRpZgorXSkKKworQ1VSTF9DT05GSUdVUkVfQ1VSTF9TT0NLTEVOX1QKKworVFlQRV9JTl9BRERSX1QKKworVFlQRV9TT0NLQUREUl9TVE9SQUdFCisKK1RZUEVfU0lHX0FUT01JQ19UCisKK0FDX1RZUEVfU0lHTkFMCisKK0NVUkxfQ0hFQ0tfRlVOQ19TRUxFQ1QKKworQ1VSTF9DSEVDS19GVU5DX1JFQ1YKK0NVUkxfQ0hFQ0tfRlVOQ19SRUNWRlJPTQorQ1VSTF9DSEVDS19GVU5DX1NFTkQKK0NVUkxfQ0hFQ0tfTVNHX05PU0lHTkFMCisKK0NVUkxfQ0hFQ0tfRlVOQ19BTEFSTQorQ1VSTF9DSEVDS19GVU5DX0JBU0VOQU1FCitDVVJMX0NIRUNLX0ZVTkNfQ0xPU0VTT0NLRVQKK0NVUkxfQ0hFQ0tfRlVOQ19DTE9TRVNPQ0tFVF9DQU1FTAorQ1VSTF9DSEVDS19GVU5DX0NPTk5FQ1QKK0NVUkxfQ0hFQ0tfRlVOQ19GQ05UTAorQ1VSTF9DSEVDS19GVU5DX0ZET1BFTgorQ1VSTF9DSEVDS19GVU5DX0ZSRUVBRERSSU5GTworQ1VSTF9DSEVDS19GVU5DX0ZSRUVJRkFERFJTCitDVVJMX0NIRUNLX0ZVTkNfRlNFVFhBVFRSCitDVVJMX0NIRUNLX0ZVTkNfRlRSVU5DQVRFCitDVVJMX0NIRUNLX0ZVTkNfR0VUQUREUklORk8KK0NVUkxfQ0hFQ0tfRlVOQ19HQUlfU1RSRVJST1IKK0NVUkxfQ0hFQ0tfRlVOQ19HRVRIT1NUQllBRERSCitDVVJMX0NIRUNLX0ZVTkNfR0VUSE9TVEJZQUREUl9SCitDVVJMX0NIRUNLX0ZVTkNfR0VUSE9TVEJZTkFNRQorQ1VSTF9DSEVDS19GVU5DX0dFVEhPU1RCWU5BTUVfUgorQ1VSTF9DSEVDS19GVU5DX0dFVEhPU1ROQU1FCitDVVJMX0NIRUNLX0ZVTkNfR0VUSUZBRERSUworQ1VSTF9DSEVDS19GVU5DX0dFVFNFUlZCWVBPUlRfUgorQ1VSTF9DSEVDS19GVU5DX0dNVElNRV9SCitDVVJMX0NIRUNLX0ZVTkNfSU5FVF9OVE9BX1IKK0NVUkxfQ0hFQ0tfRlVOQ19JTkVUX05UT1AKK0NVUkxfQ0hFQ0tfRlVOQ19JTkVUX1BUT04KK0NVUkxfQ0hFQ0tfRlVOQ19JT0NUTAorQ1VSTF9DSEVDS19GVU5DX0lPQ1RMU09DS0VUCitDVVJMX0NIRUNLX0ZVTkNfSU9DVExTT0NLRVRfQ0FNRUwKK0NVUkxfQ0hFQ0tfRlVOQ19MT0NBTFRJTUVfUgorQ1VSTF9DSEVDS19GVU5DX01FTVJDSFIKK0NVUkxfQ0hFQ0tfRlVOQ19QT0xMCitDVVJMX0NIRUNLX0ZVTkNfU0VUU09DS09QVAorQ1VSTF9DSEVDS19GVU5DX1NJR0FDVElPTgorQ1VSTF9DSEVDS19GVU5DX1NJR0lOVEVSUlVQVAorQ1VSTF9DSEVDS19GVU5DX1NJR05BTAorQ1VSTF9DSEVDS19GVU5DX1NJR1NFVEpNUAorQ1VSTF9DSEVDS19GVU5DX1NPQ0tFVAorQ1VSTF9DSEVDS19GVU5DX1NPQ0tFVFBBSVIKK0NVUkxfQ0hFQ0tfRlVOQ19TVFJDQVNFQ01QCitDVVJMX0NIRUNLX0ZVTkNfU1RSQ0FTRVNUUgorQ1VSTF9DSEVDS19GVU5DX1NUUkNNUEkKK0NVUkxfQ0hFQ0tfRlVOQ19TVFJEVVAKK0NVUkxfQ0hFQ0tfRlVOQ19TVFJFUlJPUl9SCitDVVJMX0NIRUNLX0ZVTkNfU1RSSUNNUAorQ1VSTF9DSEVDS19GVU5DX1NUUk5DQVNFQ01QCitDVVJMX0NIRUNLX0ZVTkNfU1RSTkNNUEkKK0NVUkxfQ0hFQ0tfRlVOQ19TVFJOSUNNUAorQ1VSTF9DSEVDS19GVU5DX1NUUlNUUgorQ1VSTF9DSEVDS19GVU5DX1NUUlRPS19SCitDVVJMX0NIRUNLX0ZVTkNfU1RSVE9MTAorQ1VSTF9DSEVDS19GVU5DX1dSSVRFVgorCitjYXNlICRob3N0IGluCisgICptc2Rvc2RqZ3BwKQorICAgICBhY19jdl9mdW5jX3BpcGU9bm8KKyAgICAgc2tpcGNoZWNrX3BpcGU9eWVzCisgICAgIEFDX01TR19OT1RJQ0UoW3NraXAgY2hlY2sgZm9yIHBpcGUgb24gbXNkb3NkamdwcF0pCisgICAgOzsKK2VzYWMKKworQUNfQ0hFQ0tfRlVOQ1MoW2ZvcmsgXAorICBnZXRldWlkIFwKKyAgZ2V0cGFzc19yIFwKKyAgZ2V0cHBpZCBcCisgIGdldHByb3RvYnluYW1lIFwKKyAgZ2V0cHd1aWQgXAorICBnZXRybGltaXQgXAorICBnZXR0aW1lb2ZkYXkgXAorICBpbmV0X2FkZHIgXAorICBwZXJyb3IgXAorICBwaXBlIFwKKyAgc2V0bG9jYWxlIFwKKyAgc2V0bW9kZSBcCisgIHNldHJsaW1pdCBcCisgIHVuYW1lIFwKKyAgdXRpbWUKK10sWworXSxbCisgIGZ1bmM9IiRhY19mdW5jIgorICBldmFsIHNraXBjaGVjaz1cJHNraXBjaGVja18kZnVuYworICBpZiB0ZXN0ICJ4JHNraXBjaGVjayIgIT0gInh5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtkZWVwZXIgZm9yICRmdW5jXSkKKyAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgIF1dLFtbCisgICAgICAgICRmdW5jICgpOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgZXZhbCAiYWNfY3ZfZnVuY18kZnVuYz15ZXMiCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoWENfU0hfVFJfQ1BQKFtIQVZFXyRmdW5jXSksIFsxXSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSAkZnVuYyBmdW5jdGlvbi5dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbYnV0IHN0aWxsIG5vXSkKKyAgICBdKQorICBmaQorXSkKKworZG5sIENoZWNrIGlmIHRoZSBnZXRuYW1laW5mbyBmdW5jdGlvbiBpcyBhdmFpbGFibGUKK2RubCBhbmQgZ2V0IHRoZSB0eXBlcyBvZiBmaXZlIG9mIGl0cyBhcmd1bWVudHMuCitDVVJMX0NIRUNLX0ZVTkNfR0VUTkFNRUlORk8KKworaWYgdGVzdCAiJGlwdjYiID0gInllcyI7IHRoZW4KKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfZ2V0YWRkcmluZm8iID0gInllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkUoRU5BQkxFX0lQVjYsIDEsIFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydF0pCisgICAgSVBWNl9FTkFCTEVEPTEKKyAgICBBQ19TVUJTVChJUFY2X0VOQUJMRUQpCisgIGZpCisgIENVUkxfQ0hFQ0tfTklfV0lUSFNDT1BFSUQKK2ZpCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBlbmFibGUgbm9uLWJsb2NraW5nIGNvbW11bmljYXRpb25zCitkbmwKK0NVUkxfQ0hFQ0tfT1BUSU9OX05PTkJMT0NLSU5HCitDVVJMX0NIRUNLX05PTkJMT0NLSU5HX1NPQ0tFVAorCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgbnJvZmYgdG9vbCBzdHVmZgorZG5sCisKK0FDX1BBVEhfUFJPRyggUEVSTCwgcGVybCwgLAorICAkUEFUSDovdXNyL2xvY2FsL2Jpbi9wZXJsOi91c3IvYmluLzovdXNyL2xvY2FsL2JpbiApCitBQ19TVUJTVChQRVJMKQorCitBQ19QQVRIX1BST0dTKCBOUk9GRiwgZ25yb2ZmIG5yb2ZmLCAsCisgICRQQVRIOi91c3IvYmluLzovdXNyL2xvY2FsL2JpbiApCitBQ19TVUJTVChOUk9GRikKKworaWYgdGVzdCAtbiAiJE5ST0ZGIjsgdGhlbgorICBkbmwgb25seSBjaGVjayBmb3IgbnJvZmYgb3B0aW9ucyBpZiBhbiBucm9mZiBjb21tYW5kIHdhcyBmb3VuZAorCisgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIHVzZSAqbnJvZmYgdG8gZ2V0IHBsYWluIHRleHQgZnJvbSBtYW4gcGFnZXNdKQorICBNQU5PUFQ9Ii1tYW4iCisgIG1hbmNoZWNrPWBlY2hvIGZvbyB8ICROUk9GRiAkTUFOT1BUIDI+L2Rldi9udWxsYAorICBpZiB0ZXN0IC16ICIkbWFuY2hlY2siOyB0aGVuCisgICAgTUFOT1BUPSItbWFuZG9jIgorICAgbWFuY2hlY2s9YGVjaG8gZm9vIHwgJE5ST0ZGICRNQU5PUFQgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAteiAiJG1hbmNoZWNrIjsgdGhlbgorICAgICAgTUFOT1BUPSIiCisgICAgICBBQ19NU0dfUkVTVUxUKFtmYWlsZWRdKQorICAgICAgQUNfTVNHX1dBUk4oW2ZvdW5kIG5vICpucm9mZiBvcHRpb24gdG8gZ2V0IHBsYWludGV4dCBmcm9tIG1hbiBwYWdlc10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbJE1BTk9QVF0pCisgICAgZmkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoWyRNQU5PUFRdKQorICBmaQorICBBQ19TVUJTVChNQU5PUFQpCitmaQorCitpZiB0ZXN0IC16ICIkTUFOT1BUIgordGhlbgorICBkbmwgaWYgbm8gbnJvZmYgdG9vbCB3YXMgZm91bmQsIG9yIG5vIG9wdGlvbiB0aGF0IGNvdWxkIGNvbnZlcnQgbWFuIHBhZ2VzCisgIGRubCB3YXMgZm91bmQsIHRoZW4gZGlzYWJsZSB0aGUgYnVpbHQtaW4gbWFudWFsIHN0dWZmCisgIEFDX01TR19XQVJOKFtkaXNhYmxpbmcgYnVpbHQtaW4gbWFudWFsXSkKKyAgVVNFX01BTlVBTD0ibm8iOworZmkKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBJZiB0aGUgbWFudWFsIHZhcmlhYmxlIHN0aWxsIGlzIHNldCwgdGhlbiB3ZSBnbyB3aXRoIHByb3ZpZGluZyBhIGJ1aWx0LWluCitkbmwgbWFudWFsCisKK2lmIHRlc3QgIiRVU0VfTUFOVUFMIiA9ICIxIjsgdGhlbgorICBBQ19ERUZJTkUoVVNFX01BTlVBTCwgMSwgW0lmIHlvdSB3YW50IHRvIGJ1aWxkIGN1cmwgd2l0aCB0aGUgYnVpbHQtaW4gbWFudWFsXSkKKyAgY3VybF9tYW51YWxfbXNnPSJlbmFibGVkIgorZmkKKworZG5sIHNldCB2YXJpYWJsZSBmb3IgdXNlIGluIGF1dG9tYWtlZmlsZShzKQorQU1fQ09ORElUSU9OQUwoVVNFX01BTlVBTCwgdGVzdCB4IiRVU0VfTUFOVUFMIiA9IHgxKQorCitDVVJMX0NIRUNLX0xJQl9BUkVTCitBTV9DT05ESVRJT05BTChVU0VfRU1CRURERURfQVJFUywgdGVzdCB4JGVtYmVkZGVkX2FyZXMgPSB4eWVzKQorCitpZiB0ZXN0ICJ4JGFjX2N2X25hdGl2ZV93aW5kb3dzIiAhPSAieHllcyIgJiYKKyAgIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgPSAieHllcyI7IHRoZW4KKyAgYnVpbGRfbGliaG9zdG5hbWU9eWVzCitlbHNlCisgIGJ1aWxkX2xpYmhvc3RuYW1lPW5vCitmaQorQU1fQ09ORElUSU9OQUwoQlVJTERfTElCSE9TVE5BTUUsIHRlc3QgeCRidWlsZF9saWJob3N0bmFtZSA9IHh5ZXMpCisKK0NVUkxfQ0hFQ0tfT1BUSU9OX1RIUkVBREVEX1JFU09MVkVSCisKK2lmIHRlc3QgIngkd2FudF90aHJlcyIgPSB4eWVzICYmIHRlc3QgIngkd2FudF9hcmVzIiA9IHh5ZXM7IHRoZW4KKyAgQUNfTVNHX0VSUk9SKAorW09wdGlvbnMgLS1lbmFibGUtdGhyZWFkZWQtcmVzb2x2ZXIgYW5kIC0tZW5hYmxlLWFyZXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZV0pCitmaQorCitpZiB0ZXN0ICIkd2FudF90aHJlcyIgPSAieWVzIjsgdGhlbgorICBBQ19DSEVDS19IRUFERVIocHRocmVhZC5oLAorICAgIFsgQUNfREVGSU5FKEhBVkVfUFRIUkVBRF9ILCAxLCBbaWYgeW91IGhhdmUgPHB0aHJlYWQuaD5dKQorICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICBDRkxBR1M9IiRDRkxBR1MgLXB0aHJlYWQiCisgICAgICBBQ19DSEVDS19MSUIocHRocmVhZCwgcHRocmVhZF9jcmVhdGUsCisgICAgICAgIFsgQUNfTVNHX05PVElDRShbdXNpbmcgUE9TSVggdGhyZWFkZWQgRE5TIGxvb2t1cF0pCisgICAgICAgICAgQUNfREVGSU5FKFVTRV9USFJFQURTX1BPU0lYLCAxLCBbaWYgeW91IHdhbnQgUE9TSVggdGhyZWFkZWQgRE5TIGxvb2t1cF0pCisgICAgICAgICAgVVNFX1RIUkVBRFNfUE9TSVg9MQorICAgICAgICAgIGN1cmxfcmVzX21zZz0idGhyZWFkZWQiCisgICAgICAgIF0sCisgICAgICAgIFsgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiXSkKKyAgXSkKK2ZpCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBkaXNhYmxlIHZlcmJvc2UgdGV4dCBzdHJpbmdzCitkbmwKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgdmVyYm9zZSBzdHJpbmdzXSkKK0FDX0FSR19FTkFCTEUodmVyYm9zZSwKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12ZXJib3NlXSxbRW5hYmxlIHZlcmJvc2Ugc3RyaW5nc10pCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXZlcmJvc2VdLFtEaXNhYmxlIHZlcmJvc2Ugc3RyaW5nc10pLAorWyBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgIEFDX0RFRklORShDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTLCAxLCBbdG8gZGlzYWJsZSB2ZXJib3NlIHN0cmluZ3NdKQorICAgICAgIGN1cmxfdmVyYm9zZV9tc2c9Im5vIgorICAgICAgIDs7CisgICopICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgOzsKKyAgZXNhYyBdLAorICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKQorCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgZW5hYmxlIFNTUEkgc3VwcG9ydAorZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIFNTUEkgc3VwcG9ydCAoV2luZG93cyBuYXRpdmUgYnVpbGRzIG9ubHkpXSkKK0FDX0FSR19FTkFCTEUoc3NwaSwKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zc3BpXSxbRW5hYmxlIFNTUEldKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1zc3BpXSxbRGlzYWJsZSBTU1BJXSksCitbIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIHllcykKKyAgICAgICBpZiB0ZXN0ICIkYWNfY3ZfbmF0aXZlX3dpbmRvd3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICAgQUNfREVGSU5FKFVTRV9XSU5ET1dTX1NTUEksIDEsIFt0byBlbmFibGUgU1NQSSBzdXBwb3J0XSkKKyAgICAgICAgIEFDX1NVQlNUKFVTRV9XSU5ET1dTX1NTUEksIFsxXSkKKyAgICAgICAgIGN1cmxfc3NwaV9tc2c9ImVuYWJsZWQiCisgICAgICAgZWxzZQorICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgICAgIEFDX01TR19XQVJOKFstLWVuYWJsZS1zc3BpIElnbm9yZWQuIE9ubHkgc3VwcG9ydGVkIG9uIG5hdGl2ZSBXaW5kb3dzIGJ1aWxkcy5dKQorICAgICAgIGZpCisgICAgICAgOzsKKyAgKikKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgIDs7CisgIGVzYWMgXSwKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorKQorCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgZGlzYWJsZSBjcnlwdG9ncmFwaGljIGF1dGhlbnRpY2F0aW9uCitkbmwKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgY3J5cHRvZ3JhcGhpYyBhdXRoZW50aWNhdGlvbiBtZXRob2RzXSkKK0FDX0FSR19FTkFCTEUoY3J5cHRvLWF1dGgsCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtY3J5cHRvLWF1dGhdLFtFbmFibGUgY3J5cHRvZ3JhcGhpYyBhdXRoZW50aWNhdGlvbl0pCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWNyeXB0by1hdXRoXSxbRGlzYWJsZSBjcnlwdG9ncmFwaGljIGF1dGhlbnRpY2F0aW9uXSksCitbIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgQUNfREVGSU5FKENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCwgMSwgW3RvIGRpc2FibGUgY3J5cHRvZ3JhcGhpYyBhdXRoZW50aWNhdGlvbl0pCisgICAgICAgOzsKKyAgKikgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgICA7OworICBlc2FjIF0sCisgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCispCisKK0NVUkxfQ0hFQ0tfT1BUSU9OX05UTE1fV0IKKworQ1VSTF9DSEVDS19OVExNX1dCCisKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2RubCBkaXNhYmxlIFRMUy1TUlAgYXV0aGVudGljYXRpb24KK2RubAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBUTFMtU1JQIGF1dGhlbnRpY2F0aW9uXSkKK0FDX0FSR19FTkFCTEUodGxzLXNycCwKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS10bHMtc3JwXSxbRW5hYmxlIFRMUy1TUlAgYXV0aGVudGljYXRpb25dKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS10bHMtc3JwXSxbRGlzYWJsZSBUTFMtU1JQIGF1dGhlbnRpY2F0aW9uXSksCitbIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIG5vKQorICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgQUNfREVGSU5FKENVUkxfRElTQUJMRV9UTFNfU1JQLCAxLCBbdG8gZGlzYWJsZSBUTFMtU1JQIGF1dGhlbnRpY2F0aW9uXSkKKyAgICAgICB3YW50X3Rsc19zcnA9bm8KKyAgICAgICA7OworICAqKSAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgIHdhbnRfdGxzX3NycD15ZXMKKyAgICAgICA7OworICBlc2FjIF0sCisgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgd2FudF90bHNfc3JwPXllcworKQorCitpZiB0ZXN0ICIkd2FudF90bHNfc3JwIiA9ICJ5ZXMiICYmICggdGVzdCAieCRIQVZFX0dOVVRMU19TUlAiID0gIngxIiB8fCB0ZXN0ICJ4JEhBVkVfU1NMRUFZX1NSUCIgPSAieDEiKSA7IHRoZW4KKyAgIEFDX0RFRklORShVU0VfVExTX1NSUCwgMSwgW1VzZSBUTFMtU1JQIGF1dGhlbnRpY2F0aW9uXSkKKyAgIFVTRV9UTFNfU1JQPTEKKyAgIGN1cmxfdGxzX3NycF9tc2c9ImVuYWJsZWQiCitmaQorCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitkbmwgZGlzYWJsZSBjb29raWVzIHN1cHBvcnQKK2RubAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBjb29raWVzXSkKK0FDX0FSR19FTkFCTEUoY29va2llcywKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jb29raWVzXSxbRW5hYmxlIGNvb2tpZXMgc3VwcG9ydF0pCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWNvb2tpZXNdLFtEaXNhYmxlIGNvb2tpZXMgc3VwcG9ydF0pLAorWyBjYXNlICIkZW5hYmxldmFsIiBpbgorICBubykKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgIEFDX0RFRklORShDVVJMX0RJU0FCTEVfQ09PS0lFUywgMSwgW3RvIGRpc2FibGUgY29va2llcyBzdXBwb3J0XSkKKyAgICAgICA7OworICAqKSAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgIDs7CisgIGVzYWMgXSwKKyAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKykKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIEVuYWJsZSBoaWRpbmcgb2YgaW50ZXJuYWwgc3ltYm9scyBpbiBsaWJyYXJ5IHRvIHJlZHVjZSBpdHMgc2l6ZSBhbmQKK2RubCBzcGVlZCBkeW5hbWljIGxpbmtpbmcgb2YgYXBwbGljYXRpb25zLiAgVGhpcyBjdXJyZW50bHkgaXMgb25seSBzdXBwb3J0ZWQKK2RubCBvbiBnY2MgPj0gNC4wIGFuZCBTdW5Qcm8gQy4KK2RubAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBoaWRkZW4gc3ltYm9scyBpbiB0aGUgbGlicmFyeV0pCitBQ19BUkdfRU5BQkxFKGhpZGRlbi1zeW1ib2xzLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWhpZGRlbi1zeW1ib2xzXSxbSGlkZSBpbnRlcm5hbCBzeW1ib2xzIGluIGxpYnJhcnldKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1oaWRkZW4tc3ltYm9sc10sW0xlYXZlIGFsbCBzeW1ib2xzIHdpdGggZGVmYXVsdCB2aXNpYmlsaXR5IGluIGxpYnJhcnldKSwKK1sgY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgbm8pCisgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgICA7OworICAqKQorICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAkQ0Mgc3VwcG9ydHMgaXRdKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorICAgICAgICAgaWYgJENDIC0taGVscCAtLXZlcmJvc2UgMj4mMSB8IGdyZXAgZnZpc2liaWxpdHk9ID4gL2Rldi9udWxsIHx8CisgICAgICAgICAgIGRubCBjbGFuZyBhbHdheXMgc3VwcG9ydHMgLWZ2aXNpYmlsaXR5PSBidXQgaXQgZG9lc24ndCBzaG93IHVwCisgICAgICAgICAgIGRubCB1bmRlciAtLWhlbHAuCisgICAgICAgICAgIHRlc3QgIiRjb21waWxlcl9pZCIgPSAiQ0xBTkciOyB0aGVuCisgICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICAgICBBQ19ERUZJTkUoQ1VSTF9ISURERU5fU1lNQk9MUywgMSwgW3RvIGVuYWJsZSBoaWRkZW4gc3ltYm9sc10pCisgICAgICAgICAgIEFDX0RFRklORShDVVJMX0VYVEVSTl9TWU1CT0wsIFtfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpXSwgW3RvIG1ha2UgYSBzeW1ib2wgdmlzaWJsZV0pCisgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtZnZpc2liaWxpdHk9aGlkZGVuIgorICAgICAgICAgZWxzZQorICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgICAgICBmaQorCisgICAgICAgZWxzZQorICAgICAgICAgZG5sIFRlc3QgZm9yIFN1blBybyBjYworICAgICAgICAgaWYgJENDIDI+JjEgfCBncmVwIGZsYWdzID4vZGV2L251bGwgJiYgJENDIC1mbGFncyB8IGdyZXAgeGxkc2NvcGU9ID4vZGV2L251bGwgOyB0aGVuCisgICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICAgICBBQ19ERUZJTkUoQ1VSTF9ISURERU5fU1lNQk9MUywgMSwgW3RvIGVuYWJsZSBoaWRkZW4gc3ltYm9sc10pCisgICAgICAgICAgIEFDX0RFRklORShDVVJMX0VYVEVSTl9TWU1CT0wsIFtfX2dsb2JhbF0sIFt0byBtYWtlIGEgc3ltYm9sIHZpc2libGVdKQorICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXhsZHNjb3BlPWhpZGRlbiIKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgICAgIGZpCisgICAgICAgZmkKKyAgICAgICA7OworICBlc2FjIF0sCisgICAgICAgQUNfTVNHX1JFU1VMVChubykKKykKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sIGVuZm9yY2UgU09OQU1FIGJ1bXAKK2RubAorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5mb3JjZSBTT05BTUUgYnVtcF0pCitBQ19BUkdfRU5BQkxFKHNvbmFtZS1idW1wLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNvbmFtZS1idW1wXSxbRW5hYmxlIGVuZm9yY2VkIFNPTkFNRSBidW1wXSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtc29uYW1lLWJ1bXBdLFtEaXNhYmxlIGVuZm9yY2VkIFNPTkFNRSBidW1wXSksCitbIGNhc2UgIiRlbmFibGV2YWwiIGluCisgIHllcykgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgICAgIHNvbmFtZV9idW1wPXllcworICAgICAgICAgOzsKKyAgKikKKyAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgICAgICA7OworICBlc2FjIF0sCisgICAgICAgIEFDX01TR19SRVNVTFQoJHNvbmFtZV9idW1wKQorKQorQU1fQ09ORElUSU9OQUwoU09OQU1FX0JVTVAsIHRlc3QgeCRzb25hbWVfYnVtcCA9IHh5ZXMpCisKKworZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoraWYgdGVzdCAhIC16ICIkd2luc29ja19MSUIiOyB0aGVuCisKKyAgZG5sIElmIHdzMl8zMiBpcyB3YW50ZWQsIG1ha2Ugc3VyZSBpdCBpcyB0aGUgX2xhc3RfIGxpYiBpbiBMSUJTIChtYWtlcworICBkbmwgdGhpbmdzIHdvcmsgd2hlbiBidWlsdCB3aXRoIGMtYXJlcykuIEJ1dCB3ZSBjYW4ndCBqdXN0IG1vdmUgaXQgbGFzdAorICBkbmwgc2luY2UgdGhlbiBvdGhlciBzdHVmZiAoU1NMKSB3b24ndCBidWlsZC4gU28gd2Ugc2ltcGx5IGFwcGVuZCBpdCB0byB0aGUKKyAgZG5sIGVuZC4KKworICBMSUJTPSIkTElCUyAkd2luc29ja19MSUIiCisgIFRFU1RfU0VSVkVSX0xJQlM9IiRURVNUX1NFUlZFUl9MSUJTICR3aW5zb2NrX0xJQiIKKworZmkKKworZG5sCitkbmwgQWxsIHRoZSBsaWJyYXJ5IGRlcGVuZGVuY2llcyBwdXQgaW50byAkTElCIGFwcGx5IHRvIGxpYmN1cmwgb25seS4KK2RubCBUaG9zZSBpbiAkQ1VSTF9MSUJTIGFwcGx5IHRvIHRoZSBjdXJsIGNvbW1hbmQtbGluZSBjbGllbnQgb25seS4KK2RubCBUaG9zZSBpbiAkVEVTVF9TRVJWRVJfTElCUyBhcHBseSB0byB0ZXN0IHNlcnZlcnMgb25seS4KK2RubCBUaG9zZSBpbiAkQUxMX0xJQlMgYXBwbHkgdG8gYWxsIHRhcmdldHMsIGluY2x1ZGluZyB0ZXN0IHRhcmdldHMuCitkbmwKK0xJQkNVUkxfTElCUz0kTElCUworCitBQ19TVUJTVChMSUJDVVJMX0xJQlMpCitBQ19TVUJTVChDVVJMX0xJQlMpCitBQ19TVUJTVChURVNUX1NFUlZFUl9MSUJTKQorQUNfU1VCU1QoQ1VSTF9ORVRXT1JLX0xJQlMpCitMSUJTPSRBTExfTElCUyAgZG5sIExJQlMgaXMgYSBtYWdpYyB2YXJpYWJsZSB0aGF0J3MgdXNlZCBmb3IgZXZlcnkgbGluaworCitBTV9DT05ESVRJT05BTChDUk9TU0NPTVBJTElORywgdGVzdCB4JGNyb3NzX2NvbXBpbGluZyA9IHh5ZXMpCisKK2RubCB5ZXMgb3Igbm8KK0VOQUJMRV9TSEFSRUQ9IiRlbmFibGVfc2hhcmVkIgorQUNfU1VCU1QoRU5BQkxFX1NIQVJFRCkKKworZG5sCitkbmwgRm9yIGtlZXBpbmcgc3VwcG9ydGVkIGZlYXR1cmVzIGFuZCBwcm90b2NvbHMgYWxzbyBpbiBwa2ctY29uZmlnIGZpbGUKK2RubCBzaW5jZSBpdCBpcyBtb3JlIGNyb3NzLWNvbXBpbGUgZnJpZW50IHRoYW4gY3VybC1jb25maWcKK2RubAorCitpZiB0ZXN0ICJ4JFVTRV9TU0xFQVkiID0gIngxIjsgdGhlbgorICBTVVBQT1JUX0ZFQVRVUkVTPSIkU1VQUE9SVF9GRUFUVVJFUyBTU0wiCitlbGlmIHRlc3QgLW4gIiRTU0xfRU5BQkxFRCI7IHRoZW4KKyAgU1VQUE9SVF9GRUFUVVJFUz0iJFNVUFBPUlRfRkVBVFVSRVMgU1NMIgorZmkKK2lmIHRlc3QgIkBLUkI0X0VOQUJMRURAIiA9ICJ4MSI7IHRoZW4KKyAgU1VQUE9SVF9GRUFUVVJFUz0iJFNVUFBPUlRfRkVBVFVSRVMgS1JCNCIKK2ZpCitpZiB0ZXN0ICJ4JElQVjZfRU5BQkxFRCIgPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfRkVBVFVSRVM9IiRTVVBQT1JUX0ZFQVRVUkVTIElQdjYiCitmaQoraWYgdGVzdCAieCRIQVZFX0xJQloiID0gIngxIjsgdGhlbgorICBTVVBQT1JUX0ZFQVRVUkVTPSIkU1VQUE9SVF9GRUFUVVJFUyBsaWJ6IgorZmkKK2lmIHRlc3QgIngkVVNFX0FSRVMiID0gIngxIiAtbyAieCRVU0VfVEhSRUFEU19QT1NJWCIgPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfRkVBVFVSRVM9IiRTVVBQT1JUX0ZFQVRVUkVTIEFzeW5jaEROUyIKK2ZpCitpZiB0ZXN0ICJ4JElETl9FTkFCTEVEIiA9ICJ4MSI7IHRoZW4KKyAgU1VQUE9SVF9GRUFUVVJFUz0iJFNVUFBPUlRfRkVBVFVSRVMgSUROIgorZmkKK2lmIHRlc3QgIngkVVNFX1dJTkRPV1NfU1NQSSIgPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfRkVBVFVSRVM9IiRTVVBQT1JUX0ZFQVRVUkVTIFNTUEkiCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfSFRUUCIgIT0gIngxIjsgdGhlbgorICBpZiB0ZXN0ICJ4JFVTRV9TU0xFQVkiID0gIngxIiAtbyAieCRVU0VfV0lORE9XU19TU1BJIiA9ICJ4MSIgXAorICAgICAgLW8gIngkR05VVExTX0VOQUJMRUQiID0gIngxIiAtbyAieCROU1NfRU5BQkxFRCIgPSAieDEiOyB0aGVuCisgICAgU1VQUE9SVF9GRUFUVVJFUz0iJFNVUFBPUlRfRkVBVFVSRVMgTlRMTSIKKyAgICBpZiB0ZXN0ICJ4JE5UTE1fV0JfRU5BQkxFRCIgPSAieDEiOyB0aGVuCisgICAgICBTVVBQT1JUX0ZFQVRVUkVTPSIkU1VQUE9SVF9GRUFUVVJFUyBOVExNX1dCIgorICAgIGZpCisgIGZpCitmaQoraWYgdGVzdCAieCRVU0VfVExTX1NSUCIgPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfRkVBVFVSRVM9IiRTVVBQT1JUX0ZFQVRVUkVTIFRMUy1TUlAiCitmaQorCitBQ19TVUJTVChTVVBQT1JUX0ZFQVRVUkVTKQorCitkbmwgRm9yIHN1cHBvcnRlZCBwcm90b2NvbHMgaW4gcGtnLWNvbmZpZyBmaWxlCitpZiB0ZXN0ICJ4JENVUkxfRElTQUJMRV9IVFRQIiAhPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgSFRUUCIKKyAgaWYgdGVzdCAieCRTU0xfRU5BQkxFRCIgPSAieDEiOyB0aGVuCisgICAgU1VQUE9SVF9QUk9UT0NPTFM9IiRTVVBQT1JUX1BST1RPQ09MUyBIVFRQUyIKKyAgZmkKK2ZpCitpZiB0ZXN0ICJ4JENVUkxfRElTQUJMRV9GVFAiICE9ICJ4MSI7IHRoZW4KKyAgU1VQUE9SVF9QUk9UT0NPTFM9IiRTVVBQT1JUX1BST1RPQ09MUyBGVFAiCisgIGlmIHRlc3QgIngkU1NMX0VOQUJMRUQiID0gIngxIjsgdGhlbgorICAgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgRlRQUyIKKyAgZmkKK2ZpCitpZiB0ZXN0ICJ4JENVUkxfRElTQUJMRV9GSUxFIiAhPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgRklMRSIKK2ZpCitpZiB0ZXN0ICJ4JENVUkxfRElTQUJMRV9URUxORVQiICE9ICJ4MSI7IHRoZW4KKyAgU1VQUE9SVF9QUk9UT0NPTFM9IiRTVVBQT1JUX1BST1RPQ09MUyBURUxORVQiCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfTERBUCIgIT0gIngxIjsgdGhlbgorICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIExEQVAiCisgIGlmIHRlc3QgIngkQ1VSTF9ESVNBQkxFX0xEQVBTIiAhPSAieDEiOyB0aGVuCisgICAgaWYgKHRlc3QgIngkVVNFX09QRU5MREFQIiA9ICJ4MSIgJiYgdGVzdCAieCRTU0xfRU5BQkxFRCIgPSAieDEiKSB8fAorICAgICAgKHRlc3QgIngkVVNFX09QRU5MREFQIiAhPSAieDEiICAmJiB0ZXN0ICJ4JEhBVkVfTERBUF9TU0wiID0gIngxIik7IHRoZW4KKyAgICAgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgTERBUFMiCisgICAgZmkKKyAgZmkKK2ZpCitpZiB0ZXN0ICJ4JENVUkxfRElTQUJMRV9ESUNUIiAhPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgRElDVCIKK2ZpCitpZiB0ZXN0ICJ4JENVUkxfRElTQUJMRV9URlRQIiAhPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgVEZUUCIKK2ZpCitpZiB0ZXN0ICJ4JENVUkxfRElTQUJMRV9HT1BIRVIiICE9ICJ4MSI7IHRoZW4KKyAgU1VQUE9SVF9QUk9UT0NPTFM9IiRTVVBQT1JUX1BST1RPQ09MUyBHT1BIRVIiCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfUE9QMyIgIT0gIngxIjsgdGhlbgorICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIFBPUDMiCisgIGlmIHRlc3QgIngkU1NMX0VOQUJMRUQiID0gIngxIjsgdGhlbgorICAgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgUE9QM1MiCisgIGZpCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfSU1BUCIgIT0gIngxIjsgdGhlbgorICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIElNQVAiCisgIGlmIHRlc3QgIngkU1NMX0VOQUJMRUQiID0gIngxIjsgdGhlbgorICAgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgSU1BUFMiCisgIGZpCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfU01UUCIgIT0gIngxIjsgdGhlbgorICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIFNNVFAiCisgIGlmIHRlc3QgIngkU1NMX0VOQUJMRUQiID0gIngxIjsgdGhlbgorICAgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgU01UUFMiCisgIGZpCitmaQoraWYgdGVzdCAieCRVU0VfTElCU1NIMiIgPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgU0NQIgorICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIFNGVFAiCitmaQoraWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfUlRTUCIgIT0gIngxIjsgdGhlbgorICBTVVBQT1JUX1BST1RPQ09MUz0iJFNVUFBPUlRfUFJPVE9DT0xTIFJUU1AiCitmaQoraWYgdGVzdCAieCRVU0VfTElCUlRNUCIgPSAieDEiOyB0aGVuCisgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgUlRNUCIKK2ZpCisKK2RubCByZXBsYWNlIHNwYWNlcyB3aXRoIG5ld2xpbmVzCitkbmwgc29ydCB0aGUgbGluZXMKK2RubCByZXBsYWNlIHRoZSBuZXdsaW5lcyBiYWNrIHRvIHNwYWNlcworU1VQUE9SVF9QUk9UT0NPTFM9YGVjaG8gJFNVUFBPUlRfUFJPVE9DT0xTIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgfCB0ciAnXDAxMicgJyAnYAorCitBQ19TVUJTVChTVVBQT1JUX1BST1RPQ09MUykKKworZG5sIHNxdWVlemUgd2hpdGVzcGFjZSBvdXQgb2Ygc29tZSB2YXJpYWJsZXMKKworc3F1ZWV6ZSBDRkxBR1MKK3NxdWVlemUgQ1BQRkxBR1MKK3NxdWVlemUgREVGUworc3F1ZWV6ZSBMREZMQUdTCitzcXVlZXplIExJQlMKKworc3F1ZWV6ZSBDVVJMX0xJQlMKK3NxdWVlemUgTElCQ1VSTF9MSUJTCitzcXVlZXplIFRFU1RfU0VSVkVSX0xJQlMKK3NxdWVlemUgQ1VSTF9ORVRXT1JLX0xJQlMKKworc3F1ZWV6ZSBTVVBQT1JUX0ZFQVRVUkVTCitzcXVlZXplIFNVUFBPUlRfUFJPVE9DT0xTCisKK2lmIHRlc3QgIngkd2FudF9jdXJsZGVidWdfYXNzdW1lZCIgPSAieHllcyIgJiYKKyAgdGVzdCAieCR3YW50X2N1cmxkZWJ1ZyIgPSAieHllcyIgJiYgdGVzdCAieCRVU0VfQVJFUyIgPSAieDEiOyB0aGVuCisgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtY3VybGRlYnVnIgorZmkKKworQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBcCisgICAgICAgICAgIGRvY3MvTWFrZWZpbGUgXAorICAgICAgICAgICBkb2NzL2V4YW1wbGVzL01ha2VmaWxlIFwKKyAgICAgICAgICAgZG9jcy9saWJjdXJsL01ha2VmaWxlIFwKKyAgICAgICAgICAgaW5jbHVkZS9NYWtlZmlsZSBcCisgICAgICAgICAgIGluY2x1ZGUvY3VybC9NYWtlZmlsZSBcCisgICAgICAgICAgIHNyYy9NYWtlZmlsZSBcCisgICAgICAgICAgIGxpYi9NYWtlZmlsZSBcCisgICAgICAgICAgIGxpYi9saWJjdXJsLnZlcnMgXAorICAgICAgICAgICB0ZXN0cy9NYWtlZmlsZSBcCisgICAgICAgICAgIHRlc3RzL2RhdGEvTWFrZWZpbGUgXAorICAgICAgICAgICB0ZXN0cy9zZXJ2ZXIvTWFrZWZpbGUgXAorICAgICAgICAgICB0ZXN0cy9saWJ0ZXN0L01ha2VmaWxlIFwKKyAgICAgICAgICAgdGVzdHMvdW5pdC9NYWtlZmlsZSBcCisgICAgICAgICAgIHBhY2thZ2VzL01ha2VmaWxlIFwKKyAgICAgICAgICAgcGFja2FnZXMvV2luMzIvTWFrZWZpbGUgXAorICAgICAgICAgICBwYWNrYWdlcy9XaW4zMi9jeWd3aW4vTWFrZWZpbGUgXAorICAgICAgICAgICBwYWNrYWdlcy9MaW51eC9NYWtlZmlsZSBcCisgICAgICAgICAgIHBhY2thZ2VzL0xpbnV4L1JQTS9NYWtlZmlsZSBcCisgICAgICAgICAgIHBhY2thZ2VzL0xpbnV4L1JQTS9jdXJsLnNwZWMgXAorICAgICAgICAgICBwYWNrYWdlcy9MaW51eC9SUE0vY3VybC1zc2wuc3BlYyBcCisgICAgICAgICAgIHBhY2thZ2VzL1NvbGFyaXMvTWFrZWZpbGUgXAorICAgICAgICAgICBwYWNrYWdlcy9FUE0vY3VybC5saXN0IFwKKyAgICAgICAgICAgcGFja2FnZXMvRVBNL01ha2VmaWxlIFwKKyAgICAgICAgICAgcGFja2FnZXMvdm1zL01ha2VmaWxlIFwKKyAgICAgICAgICAgcGFja2FnZXMvQUlYL01ha2VmaWxlIFwKKyAgICAgICAgICAgcGFja2FnZXMvQUlYL1JQTS9NYWtlZmlsZSBcCisgICAgICAgICAgIHBhY2thZ2VzL0FJWC9SUE0vY3VybC5zcGVjIFwKKyAgICAgICAgICAgY3VybC1jb25maWcgXAorICAgICAgICAgICBsaWJjdXJsLnBjCitdKQorQUNfT1VUUFVUCisKK0NVUkxfR0VORVJBVEVfQ09ORklHVVJFSEVMUF9QTQorCitBQ19NU0dfTk9USUNFKFtDb25maWd1cmVkIHRvIGJ1aWxkIGN1cmwvbGliY3VybDoKKworICBjdXJsIHZlcnNpb246ICAgICAke0NVUkxWRVJTSU9OfQorICBIb3N0IHNldHVwOiAgICAgICAke2hvc3R9CisgIEluc3RhbGwgcHJlZml4OiAgICR7cHJlZml4fQorICBDb21waWxlcjogICAgICAgICAke0NDfQorICBTU0wgc3VwcG9ydDogICAgICAke2N1cmxfc3NsX21zZ30KKyAgU1NIIHN1cHBvcnQ6ICAgICAgJHtjdXJsX3NzaF9tc2d9CisgIHpsaWIgc3VwcG9ydDogICAgICR7Y3VybF96bGliX21zZ30KKyAga3JiNCBzdXBwb3J0OiAgICAgJHtjdXJsX2tyYjRfbXNnfQorICBHU1NBUEkgc3VwcG9ydDogICAke2N1cmxfZ3NzX21zZ30KKyAgU1BORUdPIHN1cHBvcnQ6ICAgJHtjdXJsX3NwbmVnb19tc2d9CisgIFRMUy1TUlAgc3VwcG9ydDogICR7Y3VybF90bHNfc3JwX21zZ30KKyAgcmVzb2x2ZXI6ICAgICAgICAgJHtjdXJsX3Jlc19tc2d9CisgIGlwdjYgc3VwcG9ydDogICAgICR7Y3VybF9pcHY2X21zZ30KKyAgSUROIHN1cHBvcnQ6ICAgICAgJHtjdXJsX2lkbl9tc2d9CisgIEJ1aWxkIGxpYmN1cmw6ICAgIFNoYXJlZD0ke2VuYWJsZV9zaGFyZWR9LCBTdGF0aWM9JHtlbmFibGVfc3RhdGljfQorICBCdWlsdC1pbiBtYW51YWw6ICAke2N1cmxfbWFudWFsX21zZ30KKyAgLS1saWJjdXJsIG9wdGlvbjogJHtjdXJsX2xpYmN1cmxfbXNnfQorICBWZXJib3NlIGVycm9yczogICAke2N1cmxfdmVyYm9zZV9tc2d9CisgIFNTUEkgc3VwcG9ydDogICAgICR7Y3VybF9zc3BpX21zZ30KKyAgY2EgY2VydCBidW5kbGU6ICAgJHtjYX0KKyAgY2EgY2VydCBwYXRoOiAgICAgJHtjYXBhdGh9CisgIExEQVAgc3VwcG9ydDogICAgICR7Y3VybF9sZGFwX21zZ30KKyAgTERBUFMgc3VwcG9ydDogICAgJHtjdXJsX2xkYXBzX21zZ30KKyAgUlRTUCBzdXBwb3J0OiAgICAgJHtjdXJsX3J0c3BfbXNnfQorICBSVE1QIHN1cHBvcnQ6ICAgICAke2N1cmxfcnRtcF9tc2d9CisgIFByb3RvY29sczogICAgICAgICR7U1VQUE9SVF9QUk9UT0NPTFN9CitdKQorCitpZiB0ZXN0ICJ4JHNvbmFtZV9idW1wIiA9ICJ4eWVzIjsgdGhlbgorCitjYXQgPDxFT00KKyAgU09OQU1FIGJ1bXA6ICAgICB5ZXMgLSBXQVJOSU5HOiB0aGlzIGxpYnJhcnkgd2lsbCBiZSBidWlsdCB3aXRoIHRoZSBTT05BTUUKKyAgICAgICAgICAgICAgICAgICBudW1iZXIgYnVtcGVkIGR1ZSB0byAoYSBkZXRlY3RlZCkgQUJJIGJyZWFrYWdlLgorICAgICAgICAgICAgICAgICAgIFNlZSBsaWIvUkVBRE1FLmN1cmxfb2ZmX3QgZm9yIGRldGFpbHMgb24gdGhpcy4KK0VPTQorCitmaQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9jdXJsLWNvbmZpZy5pbiBiL2N1cmwtNy4yNS4wL2N1cmwtY29uZmlnLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDJhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9jdXJsLWNvbmZpZy5pbgpAQCAtMCwwICsxLDE2NyBAQAorIyEgL2Jpbi9zaAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAoraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKwordXNhZ2UoKQoreworICAgIGNhdCA8PEVPRgorVXNhZ2U6IGN1cmwtY29uZmlnIFtPUFRJT05dCisKK0F2YWlsYWJsZSB2YWx1ZXMgZm9yIE9QVElPTiBpbmNsdWRlOgorCisgIC0tYnVpbHQtc2hhcmVkIHNheXMgJ3llcycgaWYgbGliY3VybCB3YXMgYnVpbHQgc2hhcmVkCisgIC0tY2EgICAgICAgIGNhIGJ1bmRsZSBpbnN0YWxsIHBhdGgKKyAgLS1jYyAgICAgICAgY29tcGlsZXIKKyAgLS1jZmxhZ3MgICAgcHJlLXByb2Nlc3NvciBhbmQgY29tcGlsZXIgZmxhZ3MKKyAgLS1jaGVja2ZvciBbdmVyc2lvbl0gY2hlY2sgZm9yIChsaWIpY3VybCBvZiB0aGUgc3BlY2lmaWVkIHZlcnNpb24KKyAgLS1jb25maWd1cmUgdGhlIGFyZ3VtZW50cyBnaXZlbiB0byBjb25maWd1cmUgd2hlbiBidWlsZGluZyBjdXJsCisgIC0tZmVhdHVyZXMgIG5ld2xpbmUgc2VwYXJhdGVkIGxpc3Qgb2YgZW5hYmxlZCBmZWF0dXJlcworICAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAtLWxpYnMgICAgICBsaWJyYXJ5IGxpbmtpbmcgaW5mb3JtYXRpb24KKyAgLS1wcmVmaXggICAgY3VybCBpbnN0YWxsIHByZWZpeAorICAtLXByb3RvY29scyBuZXdsaW5lIHNlcGFyYXRlZCBsaXN0IG9mIGVuYWJsZWQgcHJvdG9jb2xzCisgIC0tc3RhdGljLWxpYnMgc3RhdGljIGxpYmN1cmwgbGlicmFyeSBsaW5raW5nIGluZm9ybWF0aW9uCisgIC0tdmVyc2lvbiAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uCisgIC0tdmVybnVtICAgIG91dHB1dCB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcyBhIG51bWJlciAoaGV4YWRlY2ltYWwpCitFT0YKKworICAgIGV4aXQgJDEKK30KKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICAgIHVzYWdlIDEKK2ZpCisKK3doaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgICAgY2FzZSAiJDEiIGluCisgICAgIyB0aGlzIGRlYWxzIHdpdGggb3B0aW9ucyBpbiB0aGUgc3R5bGUKKyAgICAjIC0tb3B0aW9uPXZhbHVlIGFuZCBleHRyYWN0cyB0aGUgdmFsdWUgcGFydAorICAgICMgW25vdCBjdXJyZW50bHkgdXNlZF0KKyAgICAtKj0qKSB2YWx1ZT1gZWNobyAiJDEiIHwgc2VkICdzL1stX2EtekEtWjAtOV0qPS8vJ2AgOzsKKyAgICAqKSB2YWx1ZT0gOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICIkMSIgaW4KKyAgICAtLWJ1aWx0LXNoYXJlZCkKKyAgICAgICAgZWNobyBARU5BQkxFX1NIQVJFREAKKyAgICAgICAgOzsKKworICAgIC0tY2EpCisJZWNobyAiQENVUkxfQ0FfQlVORExFQCIKKwk7OworCisgICAgLS1jYykKKwllY2hvICJAQ0NAIgorCTs7CisKKyAgICAtLXByZWZpeCkKKwllY2hvICIkcHJlZml4IgorCTs7CisKKyAgICAtLWZlYXR1cmV8LS1mZWF0dXJlcykKKyAgICAgICAgZm9yIGZlYXR1cmUgaW4gQFNVUFBPUlRfRkVBVFVSRVNAICIiOyBkbworICAgICAgICAgICAgdGVzdCAtbiAiJGZlYXR1cmUiICYmIGVjaG8gIiRmZWF0dXJlIgorICAgICAgICBkb25lCisJOzsKKworICAgIC0tcHJvdG9jb2xzKQorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gQFNVUFBPUlRfUFJPVE9DT0xTQDsgZG8KKyAgICAgICAgICAgIGVjaG8gIiRwcm90b2NvbCIKKyAgICAgICAgZG9uZQorCTs7CisKKyAgICAtLXZlcnNpb24pCisJZWNobyBsaWJjdXJsIEBDVVJMVkVSU0lPTkAKKwlleGl0IDAKKwk7OworCisgICAgLS1jaGVja2ZvcikKKyAgICAgICAgY2hlY2tmb3I9JDIKKyAgICAgICAgY21ham9yPWBlY2hvICRjaGVja2ZvciB8IGN1dCAtZC4gLWYxYAorICAgICAgICBjbWlub3I9YGVjaG8gJGNoZWNrZm9yIHwgY3V0IC1kLiAtZjJgCisgICAgICAgICMgd2hlbiBleHRyYWN0aW5nIHRoZSBwYXRjaCBwYXJ0IHdlIHN0cmlwIG9mZiBldmVyeXRoaW5nIGFmdGVyIGEKKwkjIGRhc2ggYXMgdGhhdCdzIHVzZWQgZm9yIHRoaW5ncyBsaWtlIHZlcnNpb24gMS4yLjMtQ1ZTCisJY3BhdGNoPWBlY2hvICRjaGVja2ZvciB8IGN1dCAtZC4gLWYzIHwgY3V0IC1kLSAtZjFgCisgICAgICAgIGNoZWNrbnVtPWBlY2hvICIkY21ham9yKjI1NioyNTYgKyAkY21pbm9yKjI1NiArICR7Y3BhdGNoOi0wfSIgfCBiY2AKKyAgICAgICAgbnVtdXBwZXJjYXNlPWBlY2hvIEBWRVJTSU9OTlVNQCB8IHRyICdhLWYnICdBLUYnYAorICAgICAgICBub3dudW09YGVjaG8gIm9iYXNlPTEwOyBpYmFzZT0xNjsgJG51bXVwcGVyY2FzZSIgfCBiY2AKKworCWlmIHRlc3QgIiRub3dudW0iIC1nZSAiJGNoZWNrbnVtIjsgdGhlbgorCSAgIyBzaWxlbnQgc3VjY2VzcworCSAgZXhpdCAwCisJZWxzZQorCSAgZWNobyAicmVxdWVzdGVkIHZlcnNpb24gJGNoZWNrZm9yIGlzIG5ld2VyIHRoYW4gZXhpc3RpbmcgQENVUkxWRVJTSU9OQCIKKwkgIGV4aXQgMQorCWZpCisJOzsKKworICAgIC0tdmVybnVtKQorCWVjaG8gQFZFUlNJT05OVU1ACisJZXhpdCAwCisJOzsKKworICAgIC0taGVscCkKKwl1c2FnZSAwCisJOzsKKworICAgIC0tY2ZsYWdzKQorICAgICAgIAlpZiB0ZXN0ICJYQGluY2x1ZGVkaXJAIiA9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgIGVjaG8gIiIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVjaG8gIi1JQGluY2x1ZGVkaXJAIgorICAgICAgICBmaQorICAgICAgIAk7OworCisgICAgLS1saWJzKQorCWlmIHRlc3QgIlhAbGliZGlyQCIgIT0gIlgvdXNyL2xpYiIgLWEgIlhAbGliZGlyQCIgIT0gIlgvdXNyL2xpYjY0IjsgdGhlbgorCSAgIENVUkxMSUJESVI9Ii1MQGxpYmRpckAgIgorCWVsc2UKKwkgICBDVVJMTElCRElSPSIiCisJZmkKKwlpZiB0ZXN0ICJYQFJFUVVJUkVfTElCX0RFUFNAIiA9ICJYeWVzIjsgdGhlbgorCSAgZWNobyAke0NVUkxMSUJESVJ9LWxjdXJsIEBMSUJDVVJMX0xJQlNAIEBMSUJTQAorCWVsc2UKKwkgIGVjaG8gJHtDVVJMTElCRElSfS1sY3VybCBATElCU0AKKwlmaQorCTs7CisKKyAgICAtLXN0YXRpYy1saWJzKQorCWVjaG8gQGxpYmRpckAvbGliY3VybC5AbGliZXh0QCBATERGTEFHU0AgQExJQkNVUkxfTElCU0AgQExJQlNACisJOzsKKworICAgIC0tY29uZmlndXJlKQorICAgICAgZWNobyBAQ09ORklHVVJFX09QVElPTlNACisgICAgOzsKKworICAgICopCisgICAgICAgIGVjaG8gInVua25vd24gb3B0aW9uOiAkMSIKKwl1c2FnZSAxCisJOzsKKyAgICBlc2FjCisgICAgc2hpZnQKK2RvbmUKKworZXhpdCAwCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9jdXJsLXN0eWxlLmVsIGIvY3VybC03LjI1LjAvY3VybC1zdHlsZS5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2NmOGNjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvY3VybC1zdHlsZS5lbApAQCAtMCwwICsxLDUwIEBACis7Ozs7IEVtYWNzIExpc3AgaGVscCBmb3Igd3JpdGluZyBjdXJsIGNvZGUuIDs7OzsKKworOzs7IFRoZSBjdXJsIGhhY2tlcidzIEMgY29udmVudGlvbnMuCis7OzsgU2VlIHRoZSBzYW1wbGUuZW1hY3MgZmlsZSBvbiBob3cgdGhpcyBmaWxlIGNhbiBiZSBtYWRlIHRvIHRha2UKKzs7OyBlZmZlY3QgYXV0b21hdGljYWxseSB3aGVuIGVkaXRpbmcgY3VybCBzb3VyY2UgZmlsZXMuCisKKyhkZWZjb25zdCBjdXJsLWMtc3R5bGUKKyAgJygoYy1iYXNpYy1vZmZzZXQgLiAyKQorICAgIChjLWNvbW1lbnQtb25seS1saW5lLW9mZnNldCAuIDApCisgICAgKGMtaGFuZ2luZy1icmFjZXMtYWxpc3QgICAgIC4gKChzdWJzdGF0ZW1lbnQtb3BlbiBiZWZvcmUgYWZ0ZXIpKSkKKyAgICAoYy1vZmZzZXRzLWFsaXN0IC4gKCh0b3Btb3N0LWludHJvICAgICAgICAuIDApCisJCQkodG9wbW9zdC1pbnRyby1jb250ICAgLiAwKQorCQkJKHN1YnN0YXRlbWVudCAgICAgICAgIC4gKykKKwkJCShzdWJzdGF0ZW1lbnQtb3BlbiAgICAuIDApCisJCQkoc3RhdGVtZW50LWNhc2UtaW50cm8gLiArKQorCQkJKHN0YXRlbWVudC1jYXNlLW9wZW4gIC4gMCkKKwkJCShjYXNlLWxhYmVsICAgICAgICAgICAuIDApCisJCQkpKQorICAgICkKKyAgIkN1cmwgQyBQcm9ncmFtbWluZyBTdHlsZSIpCisKKyhkZWZ1biBjdXJsLWNvZGUtY2xlYW51cCAoKQorICAibm8gZG9jcyIKKyAgKGludGVyYWN0aXZlKQorICAodW50YWJpZnkgKHBvaW50LW1pbikgKHBvaW50LW1heCkpCisgIChkZWxldGUtdHJhaWxpbmctd2hpdGVzcGFjZSkKKykKKworOzsgQ3VzdG9taXphdGlvbnMgZm9yIGFsbCBvZiBjLW1vZGUsIGMrKy1tb2RlLCBhbmQgb2JqYy1tb2RlCisoZGVmdW4gY3VybC1jLW1vZGUtY29tbW9uLWhvb2sgKCkKKyAgIkN1cmwgQyBtb2RlIGhvb2siCisgIDs7IGFkZCBjdXJsIHN0eWxlIGFuZCBzZXQgaXQgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlcgorICAoYy1hZGQtc3R5bGUgImN1cmwiIGN1cmwtYy1zdHlsZSB0KQorICAoc2V0cSB0YWItd2lkdGggOAorCWluZGVudC10YWJzLW1vZGUgbmlsCQk7IFVzZSBzcGFjZXMuIE5vdCB0YWJzLgorCWNvbW1lbnQtY29sdW1uIDQwCisJYy1mb250LWxvY2stZXh0cmEtdHlwZXMgKGFwcGVuZCAnKCJib29sIiAiQ1VSTCIgIkNVUkxjb2RlIiAic3NpemVfdCIgInNpemVfdCIgImN1cmxfc29ja2xlbl90IiAiZmRfc2V0IiAidGltZV90IiAiY3VybF9vZmZfdCIgImN1cmxfc29ja2V0X3QiICJpbl9hZGRyX3QiICJDVVJMU0hjb2RlIiAiQ1VSTE1jb2RlIiAiQ3VybF9hZGRyaW5mbyIpKQorCSkKKyAgOzsga2V5YmluZGluZ3MgZm9yIEMsIEMrKywgYW5kIE9iamVjdGl2ZS1DLiAgV2UgY2FuIHB1dCB0aGVzZSBpbgorICA7OyBjLW1vZGUtYmFzZS1tYXAgYmVjYXVzZSBvZiBpbmhlcml0YW5jZSAuLi4KKyAgKGRlZmluZS1rZXkgYy1tb2RlLWJhc2UtbWFwICJcTS1xIiAnYy1maWxsLXBhcmFncmFwaCkKKyAgKGRlZmluZS1rZXkgYy1tb2RlLWJhc2UtbWFwICJcTS1tIiAnY3VybC1jb2RlLWNsZWFudXApCisgIChzZXRxIGMtcmVjb2duaXplLWtuci1wIG5pbCkKKyAgOzs7IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAnZGVsZXRlLXRyYWlsaW5nLXdoaXRlc3BhY2UgdCkKKyAgKHNldHEgc2hvdy10cmFpbGluZy13aGl0ZXNwYWNlIHQpCisgICkKKworOzsgU2V0IHRoaXMgaXMgaW4geW91ciAuZW1hY3MgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBjLW1vZGUtaG9vayBhcworOzsgZGVmaW5lZCBoZXJlIHJpZ2h0IG91dCBvZiB0aGUgYm94LgorOyAoYWRkLWhvb2sgJ2MtbW9kZS1jb21tb24taG9vayAnY3VybC1jLW1vZGUtY29tbW9uLWhvb2spCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kZXBjb21wIGIvY3VybC03LjI1LjAvZGVwY29tcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNDcwMWRhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZGVwY29tcApAQCAtMCwwICsxLDUzMCBAQAorIyEgL2Jpbi9zaAorIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCisKK3NjcmlwdHZlcnNpb249MjAwNS0wNy0wOS4xMQorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbGV4YW5kcmUgT2xpdmEgPG9saXZhQGRjYy51bmljYW1wLmJyPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogZGVwY29tcCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQorCitSdW4gUFJPR1JBTVMgQVJHUyB0byBjb21waWxlIGEgZmlsZSwgZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMKK2FzIHNpZGUtZWZmZWN0cy4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzOgorICBkZXBtb2RlICAgICBEZXBlbmRlbmN5IHRyYWNraW5nIG1vZGUuCisgIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBvYmplY3QgICAgICBPYmplY3QgZmlsZSBvdXRwdXQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBERVBESVIgICAgICBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgZGVwZW5kZW5jaWVzLgorICBkZXBmaWxlICAgICBEZXBlbmRlbmN5IGZpbGUgdG8gb3V0cHV0LgorICB0bXBkZXBmaWxlICBUZW1wb3JhcnkgZmlsZSB0byB1c2Ugd2hlbiBvdXRwdXRpbmcgZGVwZW5kZW5jaWVzLgorICBsaWJ0b29sICAgICBXaGV0aGVyIGxpYnRvb2wgaXMgdXNlZCAoeWVzL25vKS4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiZGVwY29tcCAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAteiAiJGRlcG1vZGUiIHx8IHRlc3QgLXogIiRzb3VyY2UiIHx8IHRlc3QgLXogIiRvYmplY3QiOyB0aGVuCisgIGVjaG8gImRlcGNvbXA6IFZhcmlhYmxlcyBzb3VyY2UsIG9iamVjdCBhbmQgZGVwbW9kZSBtdXN0IGJlIHNldCIgMT4mMgorICBleGl0IDEKK2ZpCisKKyMgRGVwZW5kZW5jaWVzIGZvciBzdWIvYmFyLm8gb3Igc3ViL2Jhci5vYmogZ28gaW50byBzdWIvLmRlcHMvYmFyLlBvLgorZGVwZmlsZT0ke2RlcGZpbGUtYGVjaG8gIiRvYmplY3QiIHwKKyAgc2VkICdzfFteXFwvXSokfCcke0RFUERJUi0uZGVwc30nLyZ8O3N8XC5cKFteLl0qXCkkfC5QXDF8O3N8UG9iaiR8UG98J2B9Cit0bXBkZXBmaWxlPSR7dG1wZGVwZmlsZS1gZWNobyAiJGRlcGZpbGUiIHwgc2VkICdzL1wuXChbXi5dKlwpJC8uVFwxLydgfQorCitybSAtZiAiJHRtcGRlcGZpbGUiCisKKyMgU29tZSBtb2RlcyB3b3JrIGp1c3QgbGlrZSBvdGhlciBtb2RlcywgYnV0IHVzZSBkaWZmZXJlbnQgZmxhZ3MuICBXZQorIyBwYXJhbWV0ZXJpemUgaGVyZSwgYnV0IHN0aWxsIGxpc3QgdGhlIG1vZGVzIGluIHRoZSBiaWcgY2FzZSBiZWxvdywKKyMgdG8gbWFrZSBkZXBlbmQubTQgZWFzaWVyIHRvIHdyaXRlLiAgTm90ZSB0aGF0IHdlICpjYW5ub3QqIHVzZSBhIGNhc2UKKyMgaGVyZSwgYmVjYXVzZSB0aGlzIGZpbGUgY2FuIG9ubHkgY29udGFpbiBvbmUgY2FzZSBzdGF0ZW1lbnQuCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBocDsgdGhlbgorICAjIEhQIGNvbXBpbGVyIHVzZXMgLU0gYW5kIG5vIGV4dHJhIGFyZy4KKyAgZ2NjZmxhZz0tTQorICBkZXBtb2RlPWdjYworZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0gZGFzaFhtc3Rkb3V0OyB0aGVuCisgICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCisgICBkYXNobWZsYWc9LXhNCisgICBkZXBtb2RlPWRhc2htc3Rkb3V0CitmaQorCitjYXNlICIkZGVwbW9kZSIgaW4KK2djYzMpCisjIyBnY2MgMyBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgdHJhY2tpbmcgdGhhdCBkb2VzIGV4YWN0bHkgd2hhdAorIyMgd2Ugd2FudC4gIFlheSEgIE5vdGU6IGZvciBzb21lIHJlYXNvbiBsaWJ0b29sIDEuNCBkb2Vzbid0IGxpa2UKKyMjIGl0IGlmIC1NRCAtTVAgY29tZXMgYWZ0ZXIgdGhlIC1NRiBzdHVmZi4gIEhtbS4KKyAgIiRAIiAtTVQgIiRvYmplY3QiIC1NRCAtTVAgLU1GICIkdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIG12ICIkdG1wZGVwZmlsZSIgIiRkZXBmaWxlIgorICA7OworCitnY2MpCisjIyBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIGdldCBkZXBlbmRlbmN5IG91dHB1dCBmcm9tIGdjYy4gIEhlcmUncworIyMgd2h5IHdlIHBpY2sgdGhpcyByYXRoZXIgb2JzY3VyZSBtZXRob2Q6CisjIyAtIERvbid0IHdhbnQgdG8gdXNlIC1NRCBiZWNhdXNlIHdlJ2QgbGlrZSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuZAorIyMgICB1cCBpbiBhIHN1YmRpci4gIEhhdmluZyB0byByZW5hbWUgYnkgaGFuZCBpcyB1Z2x5LgorIyMgICAoV2UgbWlnaHQgZW5kIHVwIGRvaW5nIHRoaXMgYW55d2F5IHRvIHN1cHBvcnQgb3RoZXIgY29tcGlsZXJzLikKKyMjIC0gVGhlIERFUEVOREVOQ0lFU19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgbWFrZXMgZ2NjIGFjdCBsaWtlCisjIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4KKyMjIC0gVXNpbmcgLU0gZGlyZWN0bHkgbWVhbnMgcnVubmluZyB0aGUgY29tcGlsZXIgdHdpY2UgKGV2ZW4gd29yc2UKKyMjICAgdGhhbiByZW5hbWluZykuCisgIGlmIHRlc3QgLXogIiRnY2NmbGFnIjsgdGhlbgorICAgIGdjY2ZsYWc9LU1ELAorICBmaQorICAiJEAiIC1XcCwiJGdjY2ZsYWckdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgYWxwaGE9QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorIyMgVGhlIHNlY29uZCAtZSBleHByZXNzaW9uIGhhbmRsZXMgRE9TLXN0eWxlIGZpbGUgbmFtZXMgd2l0aCBkcml2ZSBsZXR0ZXJzLgorICBzZWQgLWUgJ3MvXlteOl0qOiAvIC8nIFwKKyAgICAgIC1lICdzL15bJyRhbHBoYSddOlwvW146XSo6IC8gLycgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyMjIFRoaXMgbmV4dCBwaWVjZSBvZiBtYWdpYyBhdm9pZHMgdGhlIGBkZWxldGVkIGhlYWRlciBmaWxlJyBwcm9ibGVtLgorIyMgVGhlIHByb2JsZW0gaXMgdGhhdCB3aGVuIGEgaGVhZGVyIGZpbGUgd2hpY2ggYXBwZWFycyBpbiBhIC5QIGZpbGUKKyMjIGlzIGRlbGV0ZWQsIHRoZSBkZXBlbmRlbmN5IGNhdXNlcyBtYWtlIHRvIGRpZSAoYmVjYXVzZSB0aGVyZSBpcworIyMgdHlwaWNhbGx5IG5vIHdheSB0byByZWJ1aWxkIHRoZSBoZWFkZXIpLiAgV2UgYXZvaWQgdGhpcyBieSBhZGRpbmcKKyMjIGR1bW15IGRlcGVuZGVuY2llcyBmb3IgZWFjaCBoZWFkZXIgZmlsZS4gIFRvbyBiYWQgZ2NjIGRvZXNuJ3QgZG8KKyMjIHRoaXMgZm9yIHVzIGRpcmVjdGx5LgorICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgfAorIyMgU29tZSB2ZXJzaW9ucyBvZiBnY2MgcHV0IGEgc3BhY2UgYmVmb3JlIHRoZSBgOicuICBPbiB0aGUgdGhlb3J5CisjIyB0aGF0IHRoZSBzcGFjZSBtZWFucyBzb21ldGhpbmcsIHdlIGFkZCBhIHNwYWNlIHRvIHRoZSBvdXRwdXQgYXMKKyMjIHdlbGwuCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitocCkKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKK3NnaSkKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgIiRAIiAiLVdwLC1NRHVwZGF0ZSwkdG1wZGVwZmlsZSIKKyAgZWxzZQorICAgICIkQCIgLU1EdXBkYXRlICIkdG1wZGVwZmlsZSIKKyAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKworICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4gICMgeWVzLCB0aGUgc291cmNlZmlsZSBkZXBlbmQgb24gb3RoZXIgZmlsZXMKKyAgICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorCisgICAgIyBDbGlwIG9mZiB0aGUgaW5pdGlhbCBlbGVtZW50ICh0aGUgZGVwZW5kZW50KS4gIERvbid0IHRyeSB0byBiZQorICAgICMgY2xldmVyIGFuZCByZXBsYWNlIHRoaXMgd2l0aCBzZWQgY29kZSwgYXMgSVJJWCBzZWQgd29uJ3QgaGFuZGxlCisgICAgIyBsaW5lcyB3aXRoIG1vcmUgdGhhbiBhIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzICg0MDk2IGluCisgICAgIyBJUklYIDYuMiBzZWQsIDgxOTIgaW4gSVJJWCA2LjUpLiAgV2UgYWxzbyByZW1vdmUgY29tbWVudCBsaW5lczsKKyAgICAjIHRoZSBJUklYIGNjIGFkZHMgY29tbWVudHMgbGlrZSBgIzpmZWMnIHRvIHRoZSBlbmQgb2YgdGhlCisgICAgIyBkZXBlbmRlbmN5IGxpbmUuCisgICAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgfCBcCisgICAgdHIgJworJyAnICcgPj4gJGRlcGZpbGUKKyAgICBlY2hvID4+ICRkZXBmaWxlCisKKyAgICAjIFRoZSBzZWNvbmQgcGFzcyBnZW5lcmF0ZXMgYSBkdW1teSBlbnRyeSBmb3IgZWFjaCBoZWFkZXIgZmlsZS4KKyAgICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgXAorICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIC1lICdzLyQvOi8nIFwKKyAgID4+ICRkZXBmaWxlCisgIGVsc2UKKyAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAorICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQorICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCithaXgpCisgICMgVGhlIEMgZm9yIEFJWCBDb21waWxlciB1c2VzIC1NIGFuZCBvdXRwdXRzIHRoZSBkZXBlbmRlbmNpZXMKKyAgIyBpbiBhIC51IGZpbGUuICBJbiBvbGRlciB2ZXJzaW9ucywgdGhpcyBmaWxlIGFsd2F5cyBsaXZlcyBpbiB0aGUKKyAgIyBjdXJyZW50IGRpcmVjdG9yeS4gIEFsc28sIHRoZSBBSVggY29tcGlsZXIgcHV0cyBgJG9iamVjdDonIGF0IHRoZQorICAjIHN0YXJ0IG9mIGVhY2ggbGluZTsgJG9iamVjdCBkb2Vzbid0IGhhdmUgZGlyZWN0b3J5IGluZm9ybWF0aW9uLgorICAjIFZlcnNpb24gNiB1c2VzIHRoZSBkaXJlY3RvcnkgaW4gYm90aCBjYXNlcy4KKyAgc3RyaXBwZWQ9YGVjaG8gIiRvYmplY3QiIHwgc2VkICdzL1woLipcKVwuLiokL1wxLydgCisgIHRtcGRlcGZpbGU9IiRzdHJpcHBlZC51IgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAiJEAiIC1XYywtTQorICBlbHNlCisgICAgIiRAIiAtTQorICBmaQorICBzdGF0PSQ/CisKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuIDoKKyAgZWxzZQorICAgIHN0cmlwcGVkPWBlY2hvICIkc3RyaXBwZWQiIHwgc2VkICdzLF4uKi8sLCdgCisgICAgdG1wZGVwZmlsZT0iJHN0cmlwcGVkLnUiCisgIGZpCisKKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgIG91dG5hbWU9IiRzdHJpcHBlZC5vIgorICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLgorICAgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCisgICAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICAgIHNlZCAtZSAicyxeJG91dG5hbWU6LCRvYmplY3QgOiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICBzZWQgLWUgInMsXiRvdXRuYW1lOiBcKC4qXCkkLFwxOiwiIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIGVsc2UKKyAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAorICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQorICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitpY2MpCisgICMgSW50ZWwncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzIGAtTUQgLU1GIGZpbGUnLiAgSG93ZXZlciBvbgorICAjICAgIGljYyAtTUQgLU1GIGZvby5kIC1jIC1vIHN1Yi9mb28ubyBzdWIvZm9vLmMKKyAgIyBJQ0MgNy4wIHdpbGwgZmlsbCBmb28uZCB3aXRoIHNvbWV0aGluZyBsaWtlCisgICMgICAgZm9vLm86IHN1Yi9mb28uYworICAjICAgIGZvby5vOiBzdWIvZm9vLmgKKyAgIyB3aGljaCBpcyB3cm9uZy4gIFdlIHdhbnQ6CisgICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmMKKyAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uaAorICAjICAgIHN1Yi9mb28uYzoKKyAgIyAgICBzdWIvZm9vLmg6CisgICMgSUNDIDcuMSB3aWxsIG91dHB1dAorICAjICAgIGZvby5vOiBzdWIvZm9vLmMgc3ViL2Zvby5oCisgICMgYW5kIHdpbGwgd3JhcCBsb25nIGxpbmVzIHVzaW5nIFwgOgorICAjICAgIGZvby5vOiBzdWIvZm9vLmMgLi4uIFwKKyAgIyAgICAgc3ViL2Zvby5oIC4uLiBcCisgICMgICAgIC4uLgorCisgICIkQCIgLU1EIC1NRiAiJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLAorICAjIG9yIGBmb28ubzogZGVwMS5oIGRlcDIuaCBcJywgb3IgYCBkZXAzLmggZGVwNC5oIFwnLgorICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCisgIHNlZCAicyxeW146XSo6LCRvYmplY3QgOiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorICAjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgIHNlZCAncyxeW146XSo6IFwoLipcKSQsXDEsO3MvXlxcJC8vOy9eJC9kOy86JC9kJyA8ICIkdG1wZGVwZmlsZSIgfAorICAgIHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK3RydTY0KQorICAgIyBUaGUgVHJ1NjQgY29tcGlsZXIgdXNlcyAtTUQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIGFzIGEgc2lkZQorICAgIyBlZmZlY3QuICBgY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gYGZvby5vLmQnLgorICAgIyBBdCBsZWFzdCBvbiBBbHBoYS9SZWRoYXQgNi4xLCBDb21wYXEgQ0NDIFY2LjItNTA0IHNlZW1zIHRvIHB1dAorICAgIyBkZXBlbmRlbmNpZXMgaW4gYGZvby5kJyBpbnN0ZWFkLCBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28uCisgICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCisgICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorICAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9CisgICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisKKyAgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICAgIyBXaXRoIFRydTY0IGNjLCBzaGFyZWQgb2JqZWN0cyBjYW4gYWxzbyBiZSB1c2VkIHRvIG1ha2UgYQorICAgICAgIyBzdGF0aWMgbGlicmFyeS4gIFRoaXMgbWVjYW5pc20gaXMgdXNlZCBpbiBsaWJ0b29sIDEuNCBzZXJpZXMgdG8KKyAgICAgICMgaGFuZGxlIGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgbGlicmFyaWVzIGluIGEgc2luZ2xlIGNvbXBpbGF0aW9uLgorICAgICAgIyBXaXRoIGxpYnRvb2wgMS40LCBkZXBlbmRlbmNpZXMgd2VyZSBvdXRwdXQgaW4gJGRpci5saWJzLyRiYXNlLmxvLmQuCisgICAgICAjCisgICAgICAjIFdpdGggbGlidG9vbCAxLjUgdGhpcyBleGNlcHRpb24gd2FzIHJlbW92ZWQsIGFuZCBsaWJ0b29sIG5vdworICAgICAgIyBnZW5lcmF0ZXMgMiBzZXBhcmF0ZSBvYmplY3RzIGZvciB0aGUgMiBsaWJyYXJpZXMuICBUaGVzZSB0d28KKyAgICAgICMgY29tcGlsYXRpb25zIG91dHB1dCBkZXBlbmRlbmNpZXMgaW4gaW4gJGRpci5saWJzLyRiYXNlLm8uZCBhbmQKKyAgICAgICMgaW4gJGRpciRiYXNlLm8uZC4gIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGJvdGggZmlsZXMsIGJlY2F1c2UKKyAgICAgICMgb25lIG9mIHRoZSB0d28gY29tcGlsYXRpb25zIGNhbiBiZSBkaXNhYmxlZC4gIFdlIHNob3VsZCBwcmVmZXIKKyAgICAgICMgJGRpciRiYXNlLm8uZCBvdmVyICRkaXIubGlicy8kYmFzZS5vLmQgYmVjYXVzZSB0aGUgbGF0dGVyIGlzCisgICAgICAjIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB3aGVuIC5saWJzLyBpcyBkZWxldGVkLCB3aGlsZSBpZ25vcmluZworICAgICAgIyB0aGUgZm9ybWVyIHdvdWxkIGNhdXNlIGEgZGlzdGNsZWFuY2hlY2sgcGFuaWMuCisgICAgICB0bXBkZXBmaWxlMT0kZGlyLmxpYnMvJGJhc2UubG8uZCAgICMgbGlidG9vbCAxLjQKKyAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5vLmQgICAgICAgICAgIyBsaWJ0b29sIDEuNQorICAgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLm8uZCAgICAjIGxpYnRvb2wgMS41CisgICAgICB0bXBkZXBmaWxlND0kZGlyLmxpYnMvJGJhc2UuZCAgICAgICMgQ29tcGFxIENDQyBWNi4yLTUwNAorICAgICAgIiRAIiAtV2MsLU1ECisgICBlbHNlCisgICAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2Uuby5kCisgICAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLmQKKyAgICAgIHRtcGRlcGZpbGU0PSRkaXIkYmFzZS5kCisgICAgICAiJEAiIC1NRAorICAgZmkKKworICAgc3RhdD0kPworICAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgICBlbHNlCisgICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgorICAgICAgZXhpdCAkc3RhdAorICAgZmkKKworICAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIgIiR0bXBkZXBmaWxlNCIKKyAgIGRvCisgICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICAgZG9uZQorICAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICAgIyBUaGF0J3MgYSB0YWIgYW5kIGEgc3BhY2UgaW4gdGhlIFtdLgorICAgICAgc2VkIC1lICdzLF4uKlwuW2Etel0qOlsJIF0qLCwnIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgICBlbHNlCisgICAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICAgZmkKKyAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgIDs7CisKKyNub3NpZGVlZmZlY3QpCisgICMgVGhpcyBjb21tZW50IGFib3ZlIGlzIHVzZWQgYnkgYXV0b21ha2UgdG8gdGVsbCBzaWRlLWVmZmVjdAorICAjIGRlcGVuZGVuY3kgdHJhY2tpbmcgbWVjaGFuaXNtcyBmcm9tIHNsb3dlciBvbmVzLgorCitkYXNobXN0ZG91dCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8uCisgICIkQCIgfHwgZXhpdCAkPworCisgICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgJDEgIT0gJy0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgdGVzdCAteiAiJGRhc2htZmxhZyIgJiYgZGFzaG1mbGFnPS1NCisgICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciBgOicKKyAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgorICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzIGBjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCBgYycgb3RoZXJ3aXNlLgorICAiJEAiICRkYXNobWZsYWcgfAorICAgIHNlZCAnczpeWyAgXSpbXjogXVteOl1bXjpdKlw6WyAgICBdKjonIiRvYmplY3QiJ1w6IDonID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiB8IFwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2Rhc2hYbXN0ZG91dCkKKyAgIyBUaGlzIGNhc2Ugb25seSBleGlzdHMgdG8gc2F0aXNmeSBkZXBlbmQubTQuICBJdCBpcyBuZXZlciBhY3R1YWxseQorICAjIHJ1biwgYXMgdGhpcyBtb2RlIGlzIHNwZWNpYWxseSByZWNvZ25pemVkIGluIHRoZSBwcmVhbWJsZS4KKyAgZXhpdCAxCisgIDs7CisKK21ha2VkZXBlbmQpCisgICIkQCIgfHwgZXhpdCAkPworICAjIFJlbW92ZSBhbnkgTGlidG9vbCBjYWxsCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgJDEgIT0gJy0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisgICMgWCBtYWtlZGVwZW5kCisgIHNoaWZ0CisgIGNsZWFyZWQ9bm8KKyAgZm9yIGFyZyBpbiAiJEAiOyBkbworICAgIGNhc2UgJGNsZWFyZWQgaW4KKyAgICBubykKKyAgICAgIHNldCAiIjsgc2hpZnQKKyAgICAgIGNsZWFyZWQ9eWVzIDs7CisgICAgZXNhYworICAgIGNhc2UgIiRhcmciIGluCisgICAgLUQqfC1JKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKKyAgICAjIFN0cmlwIGFueSBvcHRpb24gdGhhdCBtYWtlZGVwZW5kIG1heSBub3QgdW5kZXJzdGFuZC4gIFJlbW92ZQorICAgICMgdGhlIG9iamVjdCB0b28sIG90aGVyd2lzZSBtYWtlZGVwZW5kIHdpbGwgcGFyc2UgaXQgYXMgYSBzb3VyY2UgZmlsZS4KKyAgICAtKnwkb2JqZWN0KQorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgIGVzYWMKKyAgZG9uZQorICBvYmpfc3VmZml4PSJgZWNobyAkb2JqZWN0IHwgc2VkICdzL14uKlwuLy4vJ2AiCisgIHRvdWNoICIkdG1wZGVwZmlsZSIKKyAgJHtNQUtFREVQRU5ELW1ha2VkZXBlbmR9IC1vIiRvYmpfc3VmZml4IiAtZiIkdG1wZGVwZmlsZSIgIiRAIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgIHNlZCAnMSwyZCcgIiR0bXBkZXBmaWxlIiB8IHRyICcgJyAnCisnIHwgXAorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlIi5iYWsKKyAgOzsKKworY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAiJEAiIC1FIHwKKyAgICBzZWQgLW4gLWUgJy9eIyBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgXAorICAgICAgIC1lICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyB8CisgICAgc2VkICckIHM6IFxcJDo6JyA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBjYXQgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAnL14kL2Q7cy9eIC8vO3MvIFxcJC8vO3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCittc3Zpc3VhbGNwcCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8sCisgICMgYmVjYXVzZSB3ZSBtdXN0IHVzZSAtbyB3aGVuIHJ1bm5pbmcgbGlidG9vbC4KKyAgIiRAIiB8fCBleGl0ICQ/CisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgIiRhcmciIGluCisgICAgIi1HbSJ8Ii9HbSJ8Ii1HaSJ8Ii9HaSJ8Ii1aSSJ8Ii9aSSIpCisJc2V0IGZub3JkICIkQCIKKwlzaGlmdAorCXNoaWZ0CisJOzsKKyAgICAqKQorCXNldCBmbm9yZCAiJEAiICIkYXJnIgorCXNoaWZ0CisJc2hpZnQKKwk7OworICAgIGVzYWMKKyAgZG9uZQorICAiJEAiIC1FIHwKKyAgc2VkIC1uICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLyBzOjplY2hvICJgY3lncGF0aCAtdSBcXCJcMVxcImAiOnAnIHwgc29ydCB8IHVuaXEgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgLiAiJHRtcGRlcGZpbGUiIHwgc2VkICdzJSAlXFwgJWcnIHwgc2VkIC1uICcvXlwoLipcKSQvIHM6OglcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCisgIGVjaG8gIgkiID4+ICIkZGVwZmlsZSIKKyAgLiAiJHRtcGRlcGZpbGUiIHwgc2VkICdzJSAlXFwgJWcnIHwgc2VkIC1uICcvXlwoLipcKSQvIHM6OlwxXDo6cCcgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK25vbmUpCisgIGV4ZWMgIiRAIgorICA7OworCisqKQorICBlY2hvICJVbmtub3duIGRlcG1vZGUgJGRlcG1vZGUiIDE+JjIKKyAgZXhpdCAxCisgIDs7Citlc2FjCisKK2V4aXQgMAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL0JJTkRJTkdTIGIvY3VybC03LjI1LjAvZG9jcy9CSU5ESU5HUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2YwN2ZlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9CSU5ESU5HUwpAQCAtMCwwICsxLDIyOCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYmN1cmwgYmluZGluZ3MKKworQ3JlYXRpdmUgcGVvcGxlIGhhdmUgd3JpdHRlbiBiaW5kaW5ncyBvciBpbnRlcmZhY2VzIGZvciB2YXJpb3VzIGVudmlyb25tZW50cworYW5kIHByb2dyYW1taW5nIGxhbmd1YWdlcy4gVXNpbmcgb25lIG9mIHRoZXNlIGFsbG93cyB5b3UgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YKK2N1cmwgcG93ZXJzIGZyb20gd2l0aGluIHlvdXIgZmF2b3VyaXRlIGxhbmd1YWdlIG9yIHN5c3RlbS4KKworVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIGtub3duIGludGVyZmFjZXMgYXMgb2YgdGhpcyB3cml0aW5nLgorCitUaGUgYmluZGluZ3MgbGlzdGVkIGJlbG93IGFyZSBub3QgcGFydCBvZiB0aGUgY3VybC9saWJjdXJsIGRpc3RyaWJ1dGlvbgorYXJjaGl2ZXMsIGJ1dCBtdXN0IGJlIGRvd25sb2FkZWQgYW5kIGluc3RhbGxlZCBzZXBhcmF0ZWx5LgorCitBZGE5NQorCisgIFdyaXR0dGVuIGJ5IEFuZHJlYXMgQWxtcm90aAorICBodHRwOi8vd3d3LmFsbXJvdGguY29tL2FkYWN1cmwvaW5kZXguaHRtbAorCitCYXNpYworCisgIFNjcmlwdEJhc2ljIGJpbmRpbmdzIHRvIGxpYmN1cmwuIFdyaXR0dGVuIGJ5IFBldGVyIFZlcmhhcworICBodHRwOi8vc2NyaXB0YmFzaWMuY29tLworCitDCisgIGxpYmN1cmwgaXMgYSBDIGxpYnJhcnkgaW4gaXRzZWxmIQorICBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvCisKK0MrKworCisgIFdyaXR0ZW4gYnkgSmVhbi1QaGlsaXBwZSBCYXJyZXR0ZS1MYVBpZXJyZQorICBodHRwOi8vY3VybHBwLm9yZy8KKworQ2gKKworICBXcml0dGVuIGJ5IFN0ZXBoZW4gTmVzdGluZ2VyIGFuZCBKb25hdGhhbiBSb2dhZG8KKyAgaHR0cDovL2NoY3VybC5zb3VyY2Vmb3JnZS5uZXQvCisKK0NvY29hCisKKyAgV3JpdHRlbiBieSBEYW4gV29vZAorICBodHRwOi8vY3VybGhhbmRsZS5zb3VyY2Vmb3JnZS5uZXQvCisKK0QKKworICBXcml0dGVuIGJ5IEtlbm5ldGggQm9nZXJ0CisgIGh0dHA6Ly9jdXJsLmhheHguc2UvbGliY3VybC9kLworCitEeWxhbgorCisgIFdyaXR0ZW4gYnkgQ2hyaXMgRG91YmxlCisgIGh0dHA6Ly9keWxhbmxpYnMuc291cmNlZm9yZ2UubmV0LworCitFaWZmZWwKKyAgV3JpdHRlbiBieSBFaWZmZWwgU29mdHdhcmUKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9saWJjdXJsL2VpZmZlbC8KKworRXVwaG9yaWEKKworICBXcml0dGVuIGJ5IFJheSBTbWl0aAorICBodHRwOi8vcmF5cy13ZWIuY29tL2V1bGliY3VybC5odG0KKworRmFsY29uCisKKyAgaHR0cDovL3d3dy5mYWxjb25wbC5vcmcvaW5kZXguZnRkP3BhZ2VfaWQ9cHJqcyZwcmpfaWQ9Y3VybAorCitGZXJpdGUKKworICBXcml0dGVuIGJ5IFBhdWwgUXVlcm5hCisgIGh0dHA6Ly93d3cuZmVyaXRlLm9yZy8KKworR2FtYmFzCisKKyAgaHR0cDovL2dhbWJhcy5zb3VyY2Vmb3JnZS5uZXQKKworZ2xpYi9HVEsrCisKKyAgV3JpdHRlbiBieSBSaWNoYXJkIEF0dGVyZXIKKyAgaHR0cDovL2F0dGVyZXIubmV0L2dsaWJjdXJsLworCitIYXNrZWxsCisKKyAgV3JpdHRlbiBieSBHYWxvaXMsIEluYworICBodHRwOi8vaGFja2FnZS5oYXNrZWxsLm9yZy9jZ2ktYmluL2hhY2thZ2Utc2NyaXB0cy9wYWNrYWdlL2N1cmwKKworSmF2YQorCisgIE1haW50YWluZWQgYnkgW2JsYW5rXQorICBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvamF2YS8KKworTGlzcAorCisgIFdyaXR0ZW4gYnkgTGlhbSBIZWFseQorICBodHRwOi8vY29tbW9uLWxpc3AubmV0L3Byb2plY3QvY2wtY3VybC8KKworTHVhCisKKyAgbHVhY3VybCBieSBBbGV4YW5kZXIgTWFyaW5vdgorICBodHRwOi8vbHVhY3VybC5sdWFmb3JnZS5uZXQvCisKKyAgTHVhLWNVUkwgYnkgSvxyZ2VuIEj2dHplbAorICBodHRwOi8vbHVhZm9yZ2UubmV0L3Byb2plY3RzL2x1YS1jdXJsLworCitNb25vCisKKyAgV3JpdHRlbiBieSBKZWZmcmV5IFBoaWxsaXBzCisgIGh0dHA6Ly9mb3JnZS5ub3ZlbGwuY29tL21vZHVsZXMveGZtb2QvcHJvamVjdC8/bGliY3VybC1tb25vCisKKy5ORVQKKworICBsaWJjdXJsLW5ldCBieSBKZWZmcmV5IFBoaWxsaXBzCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliY3VybC1uZXQvCisKK09iamVjdC1QYXNjYWwKKworICBGcmVlIFBhc2NhbCwgRGVscGhpIGFuZCBLeWxpeCBiaW5kaW5nIHdyaXR0ZW4gYnkgQ2hyaXN0b3BoZSBFc3Blcm4uCisgIGh0dHA6Ly93d3cudGVrb29sLmNvbS9vcGN1cmwKKworTydDYW1sCisKKyAgV3JpdHRlbiBieSBMYXJzIE5pbHNzb24KKyAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9vY3VybC8KKworUGFzY2FsCisKKyAgRnJlZSBQYXNjYWwsIERlbHBoaSBhbmQgS3lsaXggYmluZGluZyB3cml0dGVuIGJ5IEplZmZyZXkgUG9obG1leWVyLgorICBodHRwOi8vaG91c3Rvbi5xdWlrLmNvbS9qa3AvY3VybHBhcy8KKworUGVybAorCisgIE1haW50YWluZWQgYnkgQ3JpcyBCYWlsaWZmCisgIGh0dHA6Ly9jdXJsLmhheHguc2UvbGliY3VybC9wZXJsLworCitQSFAKKworICBXcml0dGVuIGJ5IFN0ZXJsaW5nIEh1Z2hlcworICBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvcGhwLworCitQb3N0Z3JlU1FMCisKKyAgV3JpdHRlbiBieSBHaWFuIFBhb2xvIENpY2VyaQorICBodHRwOi8vZ2JvcmcucG9zdGdyZXNxbC5vcmcvcHJvamVjdC9wZ2N1cmwvcHJvamRpc3BsYXkucGhwCisKK1B5dGhvbgorCisgIFB5Y1VSTCBieSBLamV0aWwgSmFjb2JzZW4KKyAgaHR0cDovL3B5Y3VybC5zb3VyY2Vmb3JnZS5uZXQvCisKK1IKKworICBSQ3VybCBieSBEdW5jYW4gVGVtcGxlIExhbmcKKyAgaHR0cDovL3d3dy5vbWVnYWhhdC5vcmcvUkN1cmwvCisKK1JleHgKKworICBXcml0dGVuIE1hcmsgSGVzc2xpbmcKKyAgaHR0cDovL3JleHhjdXJsLnNvdXJjZWZvcmdlLm5ldC8KKworUlBHCisKKyAgU3VwcG9ydCBmb3IgSUxFL1JQRyBvbiBPUy80MDAgaXMgaW5jbHVkZWQgaW4gc291cmNlIGRpc3RyaWJ1dGlvbgorICBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvCisgIFNlZSBwYWNrYWdlcy9PUzQwMC9SRUFETUUuT1M0MDAgYW5kIHBhY2thZ2VzL09TNDAwL2N1cmwuaW5jLmluCisKK1J1YnkKKworICBjdXJiIC0gd3JpdHRlbiBieSBSb3NzIEJhbWZvcmQKKyAgaHR0cDovL2N1cmIucnVieWZvcmdlLm9yZy8KKworICBydWJ5LWN1cmwtbXVsdGkgLSB3cml0dGVuIGJ5IEtyaXN0amFuIFBldHVyc3NvbiBhbmQgS2VpdGggUmFyaWNrCisgIGh0dHA6Ly9jdXJsLW11bHRpLnJ1Ynlmb3JnZS5vcmcvCisKK1NjaGVtZQorCisgIEJpZ2xvbyBiaW5kaW5nIGJ5IEtpcmlsbCBMaXNvdnNreQorICBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvc2NoZW1lLworCitTLUxhbmcKKworICBTLUxhbmcgYmluZGluZyBieSBKb2huIEUgRGF2aXMKKyAgaHR0cDovL3d3dy5qZWRzb2Z0Lm9yZy9zbGFuZy9tb2R1bGVzL2N1cmwuaHRtbAorCitTbWFsbHRhbGsKKworICBTbWFsbHRhbGsgYmluZGluZyBieSBEYW5pbCBPc2lwY2h1aworICBodHRwOi8vd3d3LnNxdWVha3NvdXJjZS5jb20vQ3VybFBsdWdpbi8KKworU1AtRm9ydGgKKworICBTUC1Gb3J0aCBiaW5kaW5nIGJ5IHlncmVrCisgIGh0dHA6Ly93d3cuZm9ydGgub3JnLnJ1L35hYy9saWIvbGluL2N1cmwvCisKK1NQTAorCisgIFNQTCBiaW5kaW5nIGJ5IENsaWZmb3JkIFdvbGYKKyAgaHR0cDovL3d3dy5jbGlmZm9yZC5hdC9zcGwvCisKK1RjbAorCisgIFRjbGN1cmwgYnkgQW5kculzIEdhcmPtYQorICBodHRwOi8vcGVyc29uYWwxLmlkZGVvLmVzL2FuZHJlc2dhcmNpL3RjbGN1cmwvZW5nbGlzaC9kb2NzLmh0bWwKKworVmlzdWFsIEJhc2ljCisKKyAgbGliY3VybC12YiBieSBKZWZmcmV5IFBoaWxsaXBzCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliY3VybC12Yi8KKworVmlzdWFsIEZveHBybworCisgIGJ5IENhcmxvcyBBbGxvYXR0aQorICBodHRwOi8vd3d3LmN0bDMyLmNvbS5hci9saWJjdXJsLmFzcAorCitRCisgIFRoZSBsaWJjdXJsIG1vZHVsZSBpcyBwYXJ0IG9mIHRoZSBkZWZhdWx0IGluc3RhbGwKKyAgaHR0cDovL3EtbGFuZy5zb3VyY2Vmb3JnZS5uZXQvCisKK3d4V2lkZ2V0cworCisgIFdyaXR0ZW4gYnkgQ2FzZXkgTydEb25uZWxsCisgIGh0dHA6Ly93eGNvZGUuc291cmNlZm9yZ2UubmV0L2NvbXBvbmVudHMvd3hjdXJsLworCitYQkxpdGUKKworICBXcml0dGVuIGJ5IERhdmlkIFN6YWZyYW5za2kKKyAgaHR0cDovL3BlcnNvLndhbmFkb28uZnIveGJsaXRlL2xpYnJhcmllcy5odG1sCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL0JVR1MgYi9jdXJsLTcuMjUuMC9kb2NzL0JVR1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRkN2ZiZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvQlVHUwpAQCAtMCwwICsxLDE0NiBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKworQlVHUworCisgMS4gQnVncworICAxLjEgVGhlcmUgYXJlIHN0aWxsIGJ1Z3MKKyAgMS4yIFdoZXJlIHRvIHJlcG9ydAorICAxLjMgV2hhdCB0byByZXBvcnQKKyAgMS40IGxpYmN1cmwgcHJvYmxlbXMKKyAgMS41IFdobyB3aWxsIGZpeCB0aGUgcHJvYmxlbXMKKyAgMS42IEhvdyB0byBnZXQgYSBzdGFjayB0cmFjZQorICAxLjcgQnVncyBpbiBsaWJjdXJsIGJpbmRpbmdzCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLjEgVGhlcmUgYXJlIHN0aWxsIGJ1Z3MKKworICBDdXJsIGFuZCBsaWJjdXJsIGhhdmUgZ3Jvd24gc3Vic3RhbnRpYWxseSBzaW5jZSB0aGUgYmVnaW5uaW5nLiBBdCB0aGUgdGltZQorICBvZiB3cml0aW5nIChTZXB0ZW1iZXIgMjAxMSksIHRoZXJlIGFyZSBhYm91dCA2NjAwMCBsaW5lcyBvZiBzb3VyY2UgY29kZSwgYW5kCisgIGJ5IHRoZSB0aW1lIHlvdSByZWFkIHRoaXMgaXQgaGFzIHByb2JhYmx5IGdyb3duIGV2ZW4gbW9yZS4KKworICBPZiBjb3Vyc2UgdGhlcmUgYXJlIGxvdHMgb2YgYnVncyBsZWZ0LiBBbmQgbG90cyBvZiBtaXNmZWF0dXJlcy4KKworICBUbyBoZWxwIHVzIG1ha2UgY3VybCB0aGUgc3RhYmxlIGFuZCBzb2xpZCBwcm9kdWN0IHdlIHdhbnQgaXQgdG8gYmUsIHdlIG5lZWQKKyAgYnVnIHJlcG9ydHMgYW5kIGJ1ZyBmaXhlcy4KKworMS4yIFdoZXJlIHRvIHJlcG9ydAorCisgIElmIHlvdSBjYW4ndCBmaXggYSBidWcgeW91cnNlbGYgYW5kIHN1Ym1pdCBhIGZpeCBmb3IgaXQsIHRyeSB0byByZXBvcnQgYW4gYXMKKyAgZGV0YWlsZWQgcmVwb3J0IGFzIHBvc3NpYmxlIHRvIGEgY3VybCBtYWlsaW5nIGxpc3QgdG8gYWxsb3cgb25lIG9mIHVzIHRvCisgIGhhdmUgYSBnbyBhdCBhIHNvbHV0aW9uLiBZb3UgY2FuIG9wdGlvbmFsbHkgYWxzbyBwb3N0IHlvdXIgYnVnL3Byb2JsZW0gYXQKKyAgY3VybCdzIGJ1ZyB0cmFja2luZyBzeXN0ZW0gb3ZlciBhdAorCisgICAgICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvYnVncy8/Z3JvdXBfaWQ9OTc2CisKKyAgKGJ1dCBwbGVhc2UgcmVhZCB0aGUgc2VjdGlvbnMgYmVsb3cgZmlyc3QgYmVmb3JlIGRvaW5nIHRoYXQpCisKKyAgSWYgeW91IGZlZWwgeW91IG5lZWQgdG8gYXNrIGFyb3VuZCBmaXJzdCwgZmluZCBhIHN1aXRhYmxlIG1haWxpbmcgbGlzdCBhbmQKKyAgcG9zdCB0aGVyZS4gVGhlIGxpc3RzIGFyZSBhdmFpbGFibGUgb24gaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsLworCisxLjMgV2hhdCB0byByZXBvcnQKKworICBXaGVuIHJlcG9ydGluZyBhIGJ1ZywgeW91IHNob3VsZCBpbmNsdWRlIGFsbCBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgaGVscCB1cworICB1bmRlcnN0YW5kIHdoYXQncyB3cm9uZywgd2hhdCB5b3UgZXhwZWN0ZWQgdG8gaGFwcGVuIGFuZCBob3cgdG8gcmVwZWF0IHRoZQorICBiYWQgYmVoYXZpb3IuIFlvdSB0aGVyZWZvcmUgbmVlZCB0byB0ZWxsIHVzOgorCisgICAtIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSdzIG5hbWUgYW5kIHZlcnNpb24gbnVtYmVyCisKKyAgIC0gd2hhdCB2ZXJzaW9uIG9mIGN1cmwgeW91J3JlIHVzaW5nIChjdXJsIC1WIGlzIGZpbmUpCisKKyAgIC0gdmVyc2lvbnMgb2YgdGhlIHVzZWQgbGlicmFyaWVzIHRoYXQgbGliY3VybCBpcyBidWlsdCB0byB1c2UKKworICAgLSB3aGF0IFVSTCB5b3Ugd2VyZSB3b3JraW5nIHdpdGggKGlmIHBvc3NpYmxlKSwgYXQgbGVhc3Qgd2hpY2ggcHJvdG9jb2wKKworICBhbmQgYW55dGhpbmcgYW5kIGV2ZXJ5dGhpbmcgZWxzZSB5b3UgdGhpbmsgbWF0dGVycy4gVGVsbCB1cyB3aGF0IHlvdQorICBleHBlY3RlZCB0byBoYXBwZW4sIHRlbGwgdXNlIHdoYXQgZGlkIGhhcHBlbiwgdGVsbCB1cyBob3cgeW91IGNvdWxkIG1ha2UgaXQKKyAgd29yayBhbm90aGVyIHdheS4gRGlnIGFyb3VuZCwgdHJ5IG91dCwgdGVzdC4gVGhlbiBpbmNsdWRlIGFsbCB0aGUgdGlueSBiaXRzCisgIGFuZCBwaWVjZXMgaW4geW91ciByZXBvcnQuIFlvdSB3aWxsIGJlbmVmaXQgZnJvbSB0aGlzIHlvdXJzZWxmLCBhcyBpdCB3aWxsCisgIGVuYWJsZSB1cyB0byBoZWxwIHlvdSBxdWlja2VyIGFuZCBtb3JlIGFjY3VyYXRlbHkuCisKKyAgU2luY2UgY3VybCBkZWFscyB3aXRoIG5ldHdvcmtzLCBpdCBvZnRlbiBoZWxwcyB1cyBpZiB5b3UgaW5jbHVkZSBhIHByb3RvY29sCisgIGRlYnVnIGR1bXAgd2l0aCB5b3VyIGJ1ZyByZXBvcnQuIFRoZSBvdXRwdXQgeW91IGdldCBieSB1c2luZyB0aGUgLXYgb3IKKyAgLS10cmFjZSBvcHRpb25zLgorCisgIElmIGN1cmwgY3Jhc2hlZCwgY2F1c2luZyBhIGNvcmUgZHVtcCAoaW4gdW5peCksIHRoZXJlIGlzIGhhcmRseSBhbnkgdXNlIHRvCisgIHNlbmQgdGhhdCBodWdlIGZpbGUgdG8gYW55b25lIG9mIHVzLiBVbmxlc3Mgd2UgaGF2ZSBhbiBleGFjdCBzYW1lIHN5c3RlbQorICBzZXR1cCBhcyB5b3UsIHdlIGNhbid0IGRvIG11Y2ggd2l0aCBpdC4gSW5zdGVhZCB3ZSBhc2sgeW91IHRvIGdldCBhIHN0YWNrCisgIHRyYWNlIGFuZCBzZW5kIHRoYXQgKG11Y2ggc21hbGxlcikgb3V0cHV0IHRvIHVzIGluc3RlYWQhCisKKyAgVGhlIGFkZHJlc3MgYW5kIGhvdyB0byBzdWJzY3JpYmUgdG8gdGhlIG1haWxpbmcgbGlzdHMgYXJlIGRldGFpbGVkIGluIHRoZQorICBNQU5VQUwgZmlsZS4KKworMS40IGxpYmN1cmwgcHJvYmxlbXMKKworICBGaXJzdCwgcG9zdCBhbGwgbGliY3VybCBwcm9ibGVtcyBvbiB0aGUgY3VybC1saWJyYXJ5IG1haWxpbmcgbGlzdC4KKworICBXaGVuIHlvdSd2ZSB3cml0dGVuIHlvdXIgb3duIGFwcGxpY2F0aW9uIHdpdGggbGliY3VybCB0byBwZXJmb3JtIHRyYW5zZmVycywKKyAgaXQgaXMgZXZlbiBtb3JlIGltcG9ydGFudCB0byBiZSBzcGVjaWZpYyBhbmQgZGV0YWlsZWQgd2hlbiByZXBvcnRpbmcgYnVncy4KKworICBUZWxsIHVzIHRoZSBsaWJjdXJsIHZlcnNpb24gYW5kIHlvdXIgb3BlcmF0aW5nIHN5c3RlbS4gVGVsbCB1cyB0aGUgbmFtZSBhbmQKKyAgdmVyc2lvbiBvZiBhbGwgcmVsZXZhbnQgc3ViLWNvbXBvbmVudHMgbGlrZSBmb3IgZXhhbXBsZSB0aGUgU1NMIGxpYnJhcnkKKyAgeW91J3JlIHVzaW5nIGFuZCB3aGF0IG5hbWUgcmVzb2x2aW5nIHlvdXIgbGliY3VybCB1c2VzLiBJZiB5b3UgdXNlIFNGVFAgb3IKKyAgU0NQLCB0aGUgbGlic3NoMiB2ZXJzaW9uIGlzIHJlbGV2YW50IGV0Yy4KKworICBTaG93aW5nIHVzIGEgcmVhbCBzb3VyY2UgY29kZSBleGFtcGxlIHJlcGVhdGluZyB5b3VyIHByb2JsZW0gaXMgdGhlIGJlc3Qgd2F5CisgIHRvIGdldCBvdXIgYXR0ZW50aW9uIGFuZCBpdCB3aWxsIGdyZWF0bHkgaW5jcmVhc2Ugb3VyIGNoYW5jZXMgdG8gdW5kZXJzdGFuZAorICB5b3VyIHByb2JsZW0gYW5kIHRvIHdvcmsgb24gYSBmaXggKGlmIHdlIGFncmVlIGl0IHRydWx5IGlzIGEgcHJvYmxlbSkuCisKKyAgTG90cyBvZiBwcm9ibGVtcyB0aGF0IGFwcGVhciB0byBiZSBsaWJjdXJsIHByb2JsZW1zIGFyZSBhY3R1YWxseSBqdXN0IGFidXNlcworICBvZiB0aGUgbGliY3VybCBBUEkgb3Igb3RoZXIgbWFsZnVuY3Rpb25zIGluIHlvdXIgYXBwbGljYXRpb25zLiBJdCBpcyBhZHZpY2VkCisgIHRoYXQgeW91IHJ1biB5b3VyIHByb2JsZW1hdGljIHByb2dyYW0gdXNpbmcgYSBtZW1vcnkgZGVidWcgdG9vbCBsaWtlCisgIHZhbGdyaW5kIG9yIHNpbWlsYXIgYmVmb3JlIHlvdSBwb3N0IG1lbW9yeS1yZWxhdGVkIG9yICJjcmFzaGluZyIgcHJvYmxlbXMgdG8KKyAgdXMuCisKKzEuNSBXaG8gd2lsbCBmaXggdGhlIHByb2JsZW1zCisKKyAgSWYgdGhlIHByb2JsZW1zIG9yIGJ1Z3MgeW91IGRlc2NyaWJlIGFyZSBjb25zaWRlcmVkIHRvIGJlIGJ1Z3MsIHdlIHdhbnQgdG8KKyAgaGF2ZSB0aGUgcHJvYmxlbXMgZml4ZWQuCisKKyAgVGhlcmUgYXJlIG5vIGRldmVsb3BlcnMgaW4gdGhlIGN1cmwgcHJvamVjdCB0aGF0IGFyZSBwYWlkIHRvIHdvcmsgb24gYnVncy4KKyAgQWxsIGRldmVsb3BlcnMgdGhhdCB0YWtlIG9uIHJlcG9ydGVkIGJ1Z3MgZG8gdGhpcyBvbiBhIHZvbHVudGFyeSBiYXNpcy4gV2UKKyAgZG8gaXQgb3V0IG9mIGFuIGFtYml0aW9uIHRvIGtlZXAgY3VybCBhbmQgbGliY3VybCBleGNlbGxlbnQgcHJvZHVjdHMgYW5kIG91dAorICBvZiBwcmlkZS4KKworICBCdXQgcGxlYXNlIGRvIG5vdCBhc3N1bWUgdGhhdCB5b3UgY2FuIGp1c3QgbHVtcCBvdmVyIHNvbWV0aGluZyB0byB1cyBhbmQgaXQKKyAgd2lsbCB0aGVuIG1hZ2ljYWxseSBiZSBmaXhlZCBhZnRlciBzb21lIGdpdmVuIHRpbWUuIE1vc3Qgb2Z0ZW4gd2UgbmVlZAorICBmZWVkYmFjayBhbmQgaGVscCB0byB1bmRlcnN0YW5kIHdoYXQgeW91J3ZlIGV4cGVyaWVuY2VkIGFuZCBob3cgdG8gcmVwZWF0IGEKKyAgcHJvYmxlbS4gVGhlbiB3ZSBtYXkgb25seSBiZSBhYmxlIHRvIGFzc2lzdCBZT1UgdG8gZGVidWcgdGhlIHByb2JsZW0gYW5kIHRvCisgIHRyYWNrIGRvd24gdGhlIHByb3BlciBmaXguCisKKyAgV2UgZ2V0IHJlcG9ydHMgZnJvbSBtYW55IHBlb3BsZSBldmVyeSBtb250aCBhbmQgZWFjaCByZXBvcnQgY2FuIHRha2UgYQorICBjb25zaWRlcmFibGUgYW1vdW50IG9mIHRpbWUgdG8gcmVhbGx5IGdvIHRvIHRoZSBib3R0b20gd2l0aC4KKworMS42IEhvdyB0byBnZXQgYSBzdGFjayB0cmFjZQorCisgIEZpcnN0LCB5b3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB5b3UgY29tcGlsZSBhbGwgc291cmNlcyB3aXRoIC1nIGFuZCB0aGF0IHlvdQorICBkb24ndCAnc3RyaXAnIHRoZSBmaW5hbCBleGVjdXRhYmxlLiBUcnkgdG8gYXZvaWQgb3B0aW1pemluZyB0aGUgY29kZSBhcworICB3ZWxsLCByZW1vdmUgLU8sIC1PMiBldGMgZnJvbSB0aGUgY29tcGlsZXIgb3B0aW9ucy4KKworICBSdW4gdGhlIHByb2dyYW0gdW50aWwgaXQgY29yZXMuCisKKyAgUnVuIHlvdXIgZGVidWdnZXIgb24gdGhlIGNvcmUgZmlsZSwgbGlrZSAnPGRlYnVnZ2VyPiBjdXJsIGNvcmUnLiA8ZGVidWdnZXI+CisgIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBuYW1lIG9mIHlvdXIgZGVidWdnZXIsIGluIG1vc3QgY2FzZXMgdGhhdCB3aWxsCisgIGJlICdnZGInLCBidXQgJ2RieCcgYW5kIG90aGVycyBhbHNvIG9jY3VyLgorCisgIFdoZW4gdGhlIGRlYnVnZ2VyIGhhcyBmaW5pc2hlZCBsb2FkaW5nIHRoZSBjb3JlIGZpbGUgYW5kIHByZXNlbnRzIHlvdSBhCisgIHByb21wdCwgZW50ZXIgJ3doZXJlJyAod2l0aG91dCB0aGUgcXVvdGVzKSBhbmQgcHJlc3MgcmV0dXJuLgorCisgIFRoZSBsaXN0IHRoYXQgaXMgcHJlc2VudGVkIGlzIHRoZSBzdGFjayB0cmFjZS4gSWYgZXZlcnl0aGluZyB3b3JrZWQsIGl0IGlzCisgIHN1cHBvc2VkIHRvIGNvbnRhaW4gdGhlIGNoYWluIG9mIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY2FsbGVkIHdoZW4gY3VybAorICBjcmFzaGVkLiBJbmNsdWRlIHRoZSBzdGFjayB0cmFjZSB3aXRoIHlvdXIgZGV0YWlsZWQgYnVnIHJlcG9ydC4gSXQnbGwgaGVscCBhCisgIGxvdC4KKworMS43IEJ1Z3MgaW4gbGliY3VybCBiaW5kaW5ncworCisgIFRoZXJlIHdpbGwgb2YgY291cnNlIHBvcCB1cCBidWdzIGluIGxpYmN1cmwgYmluZGluZ3MuIFlvdSBzaG91bGQgdGhlbgorICBwcmltYXJpbHkgYXBwcm9hY2ggdGhlIHRlYW0gdGhhdCB3b3JrcyBvbiB0aGF0IHBhcnRpY3VsYXIgYmluZGluZyBhbmQgc2VlCisgIHdoYXQgeW91IGNhbiBkbyB0byBoZWxwIHRoZW0gZml4IHRoZSBwcm9ibGVtLgorCisgIElmIHlvdSBzdXNwZWN0IHRoYXQgdGhlIHByb2JsZW0gZXhpc3RzIGluIHRoZSB1bmRlcmx5aW5nIGxpYmN1cmwsIHRoZW4KKyAgcGxlYXNlIGNvbnZlcnQgeW91ciBwcm9ncmFtIG92ZXIgdG8gcGxhaW4gQyBhbmQgZm9sbG93IHRoZSBzdGVwcyBvdXRsaW5lZAorICBhYm92ZS4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvQ09OVFJJQlVURSBiL2N1cmwtNy4yNS4wL2RvY3MvQ09OVFJJQlVURQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjJhZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9DT05UUklCVVRFCkBAIC0wLDAgKzEsMzAzIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorCisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIENvbnRyaWJ1dGluZyBTb3VyY2UgQ29kZQorCisgVGhpcyBkb2N1bWVudCBpcyBpbnRlbmRlZCB0byBvZmZlciBndWlkZWxpbmVzIHRoYXQgY2FuIGJlIHVzZWZ1bCB0byBrZWVwIGluCisgbWluZCB3aGVuIHlvdSBkZWNpZGUgdG8gY29udHJpYnV0ZSB0byB0aGUgcHJvamVjdC4gVGhpcyBjb25jZXJucyBuZXcgZmVhdHVyZXMKKyBhcyB3ZWxsIGFzIGNvcnJlY3Rpb25zIHRvIGV4aXN0aW5nIGZsYXdzIG9yIGJ1Z3MuCisKKyAxLiBMZWFybmluZyBjVVJMCisgMS4xIEpvaW4gdGhlIENvbW11bml0eQorIDEuMiBMaWNlbnNlCisgMS4zIFdoYXQgVG8gUmVhZAorCisgMi4gY1VSTCBDb2RpbmcgU3RhbmRhcmRzCisgMi4xIE5hbWluZworIDIuMiBJbmRlbnRpbmcKKyAyLjMgQ29tbWVudGluZworIDIuNCBMaW5lIExlbmd0aHMKKyAyLjUgR2VuZXJhbCBTdHlsZQorIDIuNiBOb24tY2xvYmJlcmluZyBBbGwgT3ZlcgorIDIuNyBQbGF0Zm9ybSBEZXBlbmRlbnQgQ29kZQorIDIuOCBXcml0ZSBTZXBhcmF0ZSBQYXRjaGVzCisgMi45IFBhdGNoIEFnYWluc3QgUmVjZW50IFNvdXJjZXMKKyAyLjEwIERvY3VtZW50CisgMi4xMSBUZXN0IENhc2VzCisKKyAzLiBQdXNoaW5nIE91dCBZb3VyIENoYW5nZXMKKyAzLjEgV3JpdGUgQWNjZXNzIHRvIGdpdCBSZXBvc2l0b3J5CisgMy4yIEhvdyBUbyBNYWtlIGEgUGF0Y2ggd2l0aCBnaXQKKyAzLjMgSG93IFRvIE1ha2UgYSBQYXRjaCB3aXRob3V0IGdpdAorIDMuNCBIb3cgdG8gZ2V0IHlvdXIgY2hhbmdlcyBpbnRvIHRoZSBtYWluIHNvdXJjZXMKKyAzLjUgV3JpdGUgZ29vZCBjb21taXQgbWVzc2FnZXMKKyAzLjYgUGxlYXNlIGRvbid0IHNlbmQgcHVsbCByZXF1ZXN0cworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gTGVhcm5pbmcgY1VSTAorCisxLjEgSm9pbiB0aGUgQ29tbXVuaXR5CisKKyBTa2lwIG92ZXIgdG8gaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsLyBhbmQgam9pbiB0aGUgYXBwcm9wcmlhdGUgbWFpbGluZworIGxpc3QocykuICBSZWFkIHVwIG9uIGRldGFpbHMgYmVmb3JlIHlvdSBwb3N0IHF1ZXN0aW9ucy4gUmVhZCB0aGlzIGZpbGUgYmVmb3JlCisgeW91IHN0YXJ0IHNlbmRpbmcgcGF0Y2hlcyEgV2UgcHJlZmVyIHBhdGNoZXMgYW5kIGRpc2N1c3Npb25zIGJlaW5nIGhlbGQgb24KKyB0aGUgbWFpbGluZyBsaXN0KHMpLCBub3Qgc2VudCB0byBpbmRpdmlkdWFscy4KKworIEJlZm9yZSBwb3N0aW5nIHRvIG9uZSBvZiB0aGUgY3VybCBtYWlsaW5nIGxpc3RzLCBwbGVhc2UgcmVhZCB1cCBvbiB0aGUgbWFpbGluZworIGxpc3QgZXRpcXVldHRlOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvZXRpcXVldHRlLmh0bWwKKworIFdlIGFsc28gaGFuZyBvdXQgb24gSVJDIGluICNjdXJsIG9uIGlyYy5mcmVlbm9kZS5uZXQKKworMS4yLiBMaWNlbnNlCisKKyBXaGVuIGNvbnRyaWJ1dGluZyB3aXRoIGNvZGUsIHlvdSBhZ3JlZSB0byBwdXQgeW91ciBjaGFuZ2VzIGFuZCBuZXcgY29kZSB1bmRlcgorIHRoZSBzYW1lIGxpY2Vuc2UgY3VybCBhbmQgbGliY3VybCBpcyBhbHJlYWR5IHVzaW5nIHVubGVzcyBzdGF0ZWQgYW5kIGFncmVlZAorIG90aGVyd2lzZS4KKworIElmIHlvdSBhZGQgYSBsYXJnZXIgcGllY2Ugb2YgY29kZSwgeW91IGNhbiBvcHQgdG8gbWFrZSB0aGF0IGZpbGUgb3Igc2V0IG9mCisgZmlsZXMgdG8gdXNlIGEgZGlmZmVyZW50IGxpY2Vuc2UgYXMgbG9uZyBhcyB0aGV5IGRvbid0IGVuZm9yY2UgYW55IGNoYW5nZXMgdG8KKyB0aGUgcmVzdCBvZiB0aGUgcGFja2FnZSBhbmQgdGhleSBtYWtlIHNlbnNlLiBTdWNoICJzZXBhcmF0ZSBwYXJ0cyIgY2FuIG5vdCBiZQorIEdQTCBsaWNlbnNlZCAoYXMgd2UgZG9uJ3Qgd2FudCBjb3B5bGVmdCB0byBhZmZlY3QgdXNlcnMgb2YgbGliY3VybCkgYnV0IHRoZXkKKyBtdXN0IHVzZSAiR1BMIGNvbXBhdGlibGUiIGxpY2Vuc2VzIChhcyB3ZSB3YW50IHRvIGFsbG93IHVzZXJzIHRvIHVzZSBsaWJjdXJsCisgcHJvcGVybHkgaW4gR1BMIGxpY2Vuc2VkIGVudmlyb25tZW50cykuCisKKyBXaGVuIGNoYW5naW5nIGV4aXN0aW5nIHNvdXJjZSBjb2RlLCB5b3UgZG8gbm90IGFsdGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhlCisgb3JpZ2luYWwgZmlsZShzKS4gVGhlIGNvcHlyaWdodCB3aWxsIHN0aWxsIGJlIG93bmVkIGJ5IHRoZSBvcmlnaW5hbAorIGNyZWF0b3Iocykgb3IgdGhvc2Ugd2hvIGhhdmUgYmVlbiBhc3NpZ25lZCBjb3B5cmlnaHQgYnkgdGhlIG9yaWdpbmFsCisgYXV0aG9yKHMpLgorCisgQnkgc3VibWl0dGluZyBhIHBhdGNoIHRvIHRoZSBjdXJsIHByb2plY3QsIHlvdSBhcmUgYXNzdW1lZCB0byBoYXZlIHRoZSByaWdodAorIHRvIHRoZSBjb2RlIGFuZCB0byBiZSBhbGxvd2VkIGJ5IHlvdXIgZW1wbG95ZXIgb3Igd2hhdGV2ZXIgdG8gaGFuZCBvdmVyIHRoYXQKKyBwYXRjaC9jb2RlIHRvIHVzLiBXZSB3aWxsIGNyZWRpdCB5b3UgZm9yIHlvdXIgY2hhbmdlcyBhcyBmYXIgYXMgcG9zc2libGUsIHRvCisgZ2l2ZSBjcmVkaXQgYnV0IGFsc28gdG8ga2VlcCBhIHRyYWNlIGJhY2sgdG8gd2hvIG1hZGUgd2hhdCBjaGFuZ2VzLiBQbGVhc2UKKyBhbHdheXMgcHJvdmlkZSB1cyB3aXRoIHlvdXIgZnVsbCByZWFsIG5hbWUgd2hlbiBjb250cmlidXRpbmchCisKKzEuMyBXaGF0IFRvIFJlYWQKKworIFNvdXJjZSBjb2RlLCB0aGUgbWFuIHBhZ2VzLCB0aGUgSU5URVJOQUxTIGRvY3VtZW50LCBUT0RPLCBLTk9XTl9CVUdTLCB0aGUKKyBtb3N0IHJlY2VudCBDSEFOR0VTLiBKdXN0IGx1cmtpbmcgb24gdGhlIGxpYmN1cmwgbWFpbGluZyBsaXN0IGlzIGdvbm5hIGdpdmUKKyB5b3UgYSBsb3Qgb2YgaW5zaWdodHMgb24gd2hhdCdzIGdvaW5nIG9uIHJpZ2h0IG5vdy4gQXNraW5nIHRoZXJlIGlzIGEgZ29vZAorIGlkZWEgdG9vLgorCisyLiBjVVJMIENvZGluZyBTdGFuZGFyZHMKKworMi4xIE5hbWluZworCisgVHJ5IHVzaW5nIGEgbm9uLWNvbmZ1c2luZyBuYW1pbmcgc2NoZW1lIGZvciB5b3VyIG5ldyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlCisgbmFtZXMuIEl0IGRvZXNuJ3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBtZWFuIHRoYXQgeW91IHNob3VsZCB1c2UgdGhlIHNhbWUgYXMgaW4KKyBvdGhlciBwbGFjZXMgb2YgdGhlIGNvZGUsIGp1c3QgdGhhdCB0aGUgbmFtZXMgc2hvdWxkIGJlIGxvZ2ljYWwsCisgdW5kZXJzdGFuZGFibGUgYW5kIGJlIG5hbWVkIGFjY29yZGluZyB0byB3aGF0IHRoZXkncmUgdXNlZCBmb3IuIEZpbGUtbG9jYWwKKyBmdW5jdGlvbnMgc2hvdWxkIGJlIG1hZGUgc3RhdGljLiBXZSBsaWtlIGxvd2VyIGNhc2UgbmFtZXMuCisKKyBTZWUgdGhlIElOVEVSTkFMUyBkb2N1bWVudCBvbiBob3cgd2UgbmFtZSBub24tZXhwb3J0ZWQgbGlicmFyeS1nbG9iYWwKKyBzeW1ib2xzLgorCisyLjIgSW5kZW50aW5nCisKKyBQbGVhc2UgdHJ5IHVzaW5nIHRoZSBzYW1lIGluZGVudGluZyBsZXZlbHMgYW5kIGJyYWNpbmcgbWV0aG9kIGFzIGFsbCB0aGUKKyBvdGhlciBjb2RlIGFscmVhZHkgZG9lcy4gSXQgbWFrZXMgdGhlIHNvdXJjZSBjb2RlIGEgbG90IGVhc2llciB0byBmb2xsb3cgaWYKKyBhbGwgb2YgaXQgaXMgd3JpdHRlbiB1c2luZyB0aGUgc2FtZSBzdHlsZS4gV2UgZG9uJ3QgYXNrIHlvdSB0byBsaWtlIGl0LCB3ZQorIGp1c3QgYXNrIHlvdSB0byBmb2xsb3cgdGhlIHRyYWRpdGlvbiEgOy0pIFRoaXMgbWFpbmx5IG1lYW5zOiAyLWxldmVsIGluZGVudHMsCisgdXNpbmcgc3BhY2VzIG9ubHkgKG5vIHRhYnMpIGFuZCBoYXZpbmcgdGhlIG9wZW5pbmcgYnJhY2UgKHspIG9uIHRoZSBzYW1lIGxpbmUKKyBhcyB0aGUgaWYoKSBvciB3aGlsZSgpLgorCisgQWxzbyBub3RlIHRoYXQgd2UgdXNlIGlmKCkgYW5kIHdoaWxlKCkgd2l0aCBubyBzcGFjZSBiZWZvcmUgdGhlIHBhcmVudGhlc2lzLgorCisyLjMgQ29tbWVudGluZworCisgQ29tbWVudCB5b3VyIHNvdXJjZSBjb2RlIGV4dGVuc2l2ZWx5IHVzaW5nIEMgY29tbWVudHMgKC8qIGNvbW1lbnQgKi8pLCBETyBOT1QKKyB1c2UgQysrIGNvbW1lbnRzICgvLyB0aGlzIHN0eWxlKS4gQ29tbWVudGVkIGNvZGUgaXMgcXVhbGl0eSBjb2RlIGFuZCBlbmFibGVzCisgZnV0dXJlIG1vZGlmaWNhdGlvbnMgbXVjaCBtb3JlLiBVbmNvbW1lbnRlZCBjb2RlIHJpc2sgaGF2aW5nIHRvIGJlIGNvbXBsZXRlbHkKKyByZXBsYWNlZCB3aGVuIHNvbWVvbmUgd2FudHMgdG8gZXh0ZW5kIHRoaW5ncywgc2luY2Ugb3RoZXIgcGVyc29ucycgc291cmNlCisgY29kZSBjYW4gZ2V0IHF1aXRlIGhhcmQgdG8gcmVhZC4KKworMi40IExpbmUgTGVuZ3RocworCisgV2Ugd3JpdGUgc291cmNlIGxpbmVzIHNob3J0ZXIgdGhhbiA4MCBjb2x1bW5zLgorCisyLjUgR2VuZXJhbCBTdHlsZQorCisgS2VlcCB5b3VyIGZ1bmN0aW9ucyBzbWFsbC4gSWYgdGhleSdyZSBzbWFsbCB5b3UgYXZvaWQgYSBsb3Qgb2YgbWlzdGFrZXMgYW5kCisgeW91IGRvbid0IGFjY2lkZW50YWxseSBtaXggdXAgdmFyaWFibGVzIGV0Yy4KKworMi42IE5vbi1jbG9iYmVyaW5nIEFsbCBPdmVyCisKKyBXaGVuIHlvdSB3cml0ZSBuZXcgZnVuY3Rpb25hbGl0eSBvciBmaXggYnVncywgaXQgaXMgaW1wb3J0YW50IHRoYXQgeW91IGRvbid0CisgZmlkZGxlIGFsbCBvdmVyIHRoZSBzb3VyY2UgZmlsZXMgYW5kIGZ1bmN0aW9ucy4gUmVtZW1iZXIgdGhhdCBpdCBpcyBsaWtlbHkKKyB0aGF0IG90aGVyIHBlb3BsZSBoYXZlIGRvbmUgY2hhbmdlcyBpbiB0aGUgc2FtZSBzb3VyY2UgZmlsZXMgYXMgeW91IGhhdmUgYW5kCisgcG9zc2libHkgZXZlbiBpbiB0aGUgc2FtZSBmdW5jdGlvbnMuIElmIHlvdSBicmluZyBjb21wbGV0ZWx5IG5ldworIGZ1bmN0aW9uYWxpdHksIHRyeSB3cml0aW5nIGl0IGluIGEgbmV3IHNvdXJjZSBmaWxlLiBJZiB5b3UgZml4IGJ1Z3MsIHRyeSB0bworIGZpeCBvbmUgYnVnIGF0IGEgdGltZSBhbmQgc2VuZCB0aGVtIGFzIHNlcGFyYXRlIHBhdGNoZXMuCisKKzIuNyBQbGF0Zm9ybSBEZXBlbmRlbnQgQ29kZQorCisgVXNlICNpZmRlZiBIQVZFX0ZFQVRVUkUgdG8gZG8gY29uZGl0aW9uYWwgY29kZS4gV2UgYXZvaWQgY2hlY2tpbmcgZm9yCisgcGFydGljdWxhciBvcGVyYXRpbmcgc3lzdGVtcyBvciBoYXJkd2FyZSBpbiB0aGUgI2lmZGVmIGxpbmVzLiBUaGUKKyBIQVZFX0ZFQVRVUkUgc2hhbGwgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBjb25maWd1cmUgc2NyaXB0IGZvciB1bml4LWxpa2Ugc3lzdGVtcworIGFuZCB0aGV5IGFyZSBoYXJkLWNvZGVkIGluIHRoZSBjb25maWctW3N5c3RlbV0uaCBmaWxlcyBmb3IgdGhlIG90aGVycy4KKworMi44IFdyaXRlIFNlcGFyYXRlIFBhdGNoZXMKKworIEl0IGlzIGFubm95aW5nIHdoZW4geW91IGdldCBhIGh1Z2UgcGF0Y2ggZnJvbSBzb21lb25lIHRoYXQgaXMgc2FpZCB0byBmaXggNTExCisgb2RkIHByb2JsZW1zLCBidXQgZGlzY3Vzc2lvbnMgYW5kIG9waW5pb25zIGRvbid0IGFncmVlIHdpdGggNTEwIG9mIHRoZW0gLSBvcgorIDUwOSBvZiB0aGVtIHdlcmUgYWxyZWFkeSBmaXhlZCBpbiBhIGRpZmZlcmVudCB3YXkuIFRoZW4gdGhlIHBhdGNoZXIgbmVlZHMgdG8KKyBleHRyYWN0IHRoZSBzaW5nbGUgaW50ZXJlc3RpbmcgcGF0Y2ggZnJvbSBzb21ld2hlcmUgd2l0aGluIHRoZSBodWdlIHBpbGUgb2YKKyBzb3VyY2UsIGFuZCB0aGF0IGdpdmVzIGEgbG90IG9mIGV4dHJhIHdvcmsuIFByZWZlcmFibHksIGFsbCBmaXhlcyB0aGF0CisgY29ycmVjdCBkaWZmZXJlbnQgcHJvYmxlbXMgc2hvdWxkIGJlIGluIHRoZWlyIG93biBwYXRjaCB3aXRoIGFuIGF0dGFjaGVkCisgZGVzY3JpcHRpb24gZXhhY3RseSB3aGF0IHRoZXkgY29ycmVjdCBzbyB0aGF0IGFsbCBwYXRjaGVzIGNhbiBiZSBzZWxlY3RpdmVseQorIGFwcGxpZWQgYnkgdGhlIG1haW50YWluZXIgb3Igb3RoZXIgaW50ZXJlc3RlZCBwYXJ0aWVzLgorCisyLjkgUGF0Y2ggQWdhaW5zdCBSZWNlbnQgU291cmNlcworCisgUGxlYXNlIHRyeSB0byBnZXQgdGhlIGxhdGVzdCBhdmFpbGFibGUgc291cmNlcyB0byBtYWtlIHlvdXIgcGF0Y2hlcworIGFnYWluc3QuIEl0IG1ha2VzIHRoZSBsaWZlIG9mIHRoZSBkZXZlbG9wZXJzIHNvIG11Y2ggZWFzaWVyLiBUaGUgdmVyeSBiZXN0IGlzCisgaWYgeW91IGdldCB0aGUgbW9zdCB1cC10by1kYXRlIHNvdXJjZXMgZnJvbSB0aGUgZ2l0IHJlcG9zaXRvcnksIGJ1dCB0aGUKKyBsYXRlc3QgcmVsZWFzZSBhcmNoaXZlIGlzIHF1aXRlIE9LIGFzIHdlbGwhCisKKzIuMTAgRG9jdW1lbnQKKworIFdyaXRpbmcgZG9jcyBpcyBkZWFkIGJvcmluZyBhbmQgb25lIG9mIHRoZSBiaWcgcHJvYmxlbXMgd2l0aCBtYW55IG9wZW4gc291cmNlCisgcHJvamVjdHMuIFNvbWVvbmUncyBnb3R0YSBkbyBpdC4gSXQgbWFrZXMgaXQgYSBsb3QgZWFzaWVyIGlmIHlvdSBzdWJtaXQgYQorIHNtYWxsIGRlc2NyaXB0aW9uIG9mIHlvdXIgZml4IG9yIHlvdXIgbmV3IGZlYXR1cmVzIHdpdGggZXZlcnkgY29udHJpYnV0aW9uIHNvCisgdGhhdCBpdCBjYW4gYmUgc3dpZnRseSBhZGRlZCB0byB0aGUgcGFja2FnZSBkb2N1bWVudGF0aW9uLgorCisgVGhlIGRvY3VtZW50YXRpb24gaXMgYWx3YXlzIG1hZGUgaW4gbWFuIHBhZ2VzIChucm9mZiBmb3JtYXR0ZWQpIG9yIHBsYWluCisgQVNDSUkgZmlsZXMuIEFsbCBIVE1MIGZpbGVzIG9uIHRoZSB3ZWIgc2l0ZSBhbmQgaW4gdGhlIHJlbGVhc2UgYXJjaGl2ZXMgYXJlCisgZ2VuZXJhdGVkIGZyb20gdGhlIG5yb2ZmL0FTQ0lJIHZlcnNpb25zLgorCisyLjExIFRlc3QgQ2FzZXMKKworIFNpbmNlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIHRlc3Qgc3VpdGUsIHdlIGNhbiBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZSBtYWluCisgZmVhdHVyZXMgYXJlIHdvcmtpbmcgYXMgdGhleSdyZSBzdXBwb3NlZCB0by4gVG8gbWFpbnRhaW4gdGhpcyBzaXR1YXRpb24gYW5kCisgaW1wcm92ZSBpdCwgYWxsIG5ldyBmZWF0dXJlcyBhbmQgZnVuY3Rpb25zIHRoYXQgYXJlIGFkZGVkIG5lZWQgdG8gYmUgdGVzdGVkCisgaW4gdGhlIHRlc3Qgc3VpdGUuIEV2ZXJ5IGZlYXR1cmUgdGhhdCBpcyBhZGRlZCBzaG91bGQgZ2V0IGF0IGxlYXN0IG9uZSB2YWxpZAorIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgaXQgd29ya3MgYXMgZG9jdW1lbnRlZC4gSWYgZXZlcnkgc3VibWl0dGVyIGFsc28KKyBwb3N0cyBhIGZldyB0ZXN0IGNhc2VzLCBpdCB3b24ndCBlbmQgdXAgYXMgYSBoZWF2eSBidXJkZW4gb24gYSBzaW5nbGUgcGVyc29uIQorCiszLiBQdXNoaW5nIE91dCBZb3VyIENoYW5nZXMKKworMy4xIFdyaXRlIEFjY2VzcyB0byBnaXQgUmVwb3NpdG9yeQorCisgSWYgeW91IGFyZSBhIGZyZXF1ZW50IGNvbnRyaWJ1dG9yLCBvciBoYXZlIGFub3RoZXIgZ29vZCByZWFzb24sIHlvdSBjYW4gb2YKKyBjb3Vyc2UgZ2V0IHdyaXRlIGFjY2VzcyB0byB0aGUgZ2l0IHJlcG9zaXRvcnkgYW5kIHRoZW4geW91J2xsIGJlIGFibGUgdG8gcHVzaAorIHlvdXIgY2hhbmdlcyBzdHJhaWdodCBpbnRvIHRoZSBnaXQgcmVwbyBpbnN0ZWFkIG9mIHNlbmRpbmcgY2hhbmdlcyBieSBtYWlsIGFzCisgcGF0Y2hlcy4gSnVzdCBhc2sgaWYgdGhpcyBpcyB3aGF0IHlvdSdkIHdhbnQuIFlvdSB3aWxsIGJlIHJlcXVpcmVkIHRvIGhhdmUKKyBwb3N0ZWQgYSBmZXcgcXVhbGl0eSBwYXRjaGVzIGZpcnN0LCBiZWZvcmUgeW91IGNhbiBiZSBncmFudGVkIHB1c2ggYWNjZXNzLgorCiszLjIgSG93IFRvIE1ha2UgYSBQYXRjaCB3aXRoIGdpdAorCisgWW91IG5lZWQgdG8gZmlyc3QgY2hlY2tvdXQgdGhlIHJlcG9zaXRvcnk6CisKKyAgICAgZ2l0IGNsb25lIGdpdDovL2dpdGh1Yi5jb20vYmFnZGVyL2N1cmwuZ2l0CisKKyBZb3UgdGhlbiBwcm9jZWVkIGFuZCBlZGl0IGFsbCB0aGUgZmlsZXMgeW91IGxpa2UgYW5kIHlvdSBjb21taXQgdGhlbSB0byB5b3VyCisgbG9jYWwgcmVwb3NpdG9yeToKKworICAgICBnaXQgY29tbWl0IFtmaWxlXQorCisgQXMgdXN1YWwsIGdyb3VwIHlvdXIgY29tbWl0cyBzbyB0aGF0IHlvdSBjb21taXQgYWxsIGNoYW5nZXMgdGhhdCBhdCBvbmNlIHRoYXQKKyBjb25zdGl0dXRlcyBhIGxvZ2ljYWwgY2hhbmdlLiBTZWUgYWxzbyBzZWN0aW9uICIzLjUgV3JpdGUgZ29vZCBjb21taXQKKyBtZXNzYWdlcyIuCisKKyBPbmNlIHlvdSBoYXZlIGRvbmUgYWxsIHlvdXIgY29tbWl0cyBhbmQgeW91J3JlIGhhcHB5IHdpdGggd2hhdCB5b3Ugc2VlLCB5b3UKKyBjYW4gbWFrZSBwYXRjaGVzIG91dCBvZiB5b3VyIGNoYW5nZXMgdGhhdCBhcmUgc3VpdGFibGUgZm9yIG1haWxpbmc6CisKKyAgICAgZ2l0IGZvcm1hdC1wYXRjaCByZW1vdGVzL29yaWdpbi9tYXN0ZXIKKworIFRoaXMgY3JlYXRlcyBmaWxlcyBpbiB5b3VyIGxvY2FsIGRpcmVjdG9yeSBuYW1lZCBOTk5OLVtuYW1lXS5wYXRjaCBmb3IgZWFjaAorIGNvbW1pdC4KKworIE5vdyBzZW5kIHRob3NlIHBhdGNoZXMgb2ZmIHRvIHRoZSBjdXJsLWxpYnJhcnkgbGlzdC4gWW91IGNhbiBvZiBjb3Vyc2Ugb3B0IHRvCisgZG8gdGhhdCB3aXRoIHRoZSAnZ2V0IHNlbmQtZW1haWwnIGNvbW1hbmQuCisKKzMuMyBIb3cgVG8gTWFrZSBhIFBhdGNoIHdpdGhvdXQgZ2l0CisKKyBLZWVwIGEgY29weSBvZiB0aGUgdW5tb2RpZmllZCBjdXJsIHNvdXJjZXMuIE1ha2UgeW91ciBjaGFuZ2VzIGluIGEgc2VwYXJhdGUKKyBzb3VyY2UgdHJlZS4gV2hlbiB5b3UgdGhpbmsgeW91IGhhdmUgc29tZXRoaW5nIHRoYXQgeW91IHdhbnQgdG8gb2ZmZXIgdGhlCisgY3VybCBjb21tdW5pdHksIHVzZSBHTlUgZGlmZiB0byBnZW5lcmF0ZSBwYXRjaGVzLgorCisgSWYgeW91IGhhdmUgbW9kaWZpZWQgYSBzaW5nbGUgZmlsZSwgdHJ5IHNvbWV0aGluZyBsaWtlOgorCisgICAgIGRpZmYgLXUgdW5tb2RpZmllZC1maWxlLmMgbXktY2hhbmdlZC1vbmUuYyA+IG15LWZpeGVzLmRpZmYKKworIElmIHlvdSBoYXZlIG1vZGlmaWVkIHNldmVyYWwgZmlsZXMsIHBvc3NpYmx5IGluIGRpZmZlcmVudCBkaXJlY3RvcmllcywgeW91CisgY2FuIHVzZSBkaWZmIHJlY3Vyc2l2ZWx5OgorCisgICAgIGRpZmYgLXVyIGN1cmwtb3JpZ2luYWwtZGlyIGN1cmwtbW9kaWZpZWQtc291cmNlcy1kaXIgPiBteS1maXhlcy5kaWZmCisKKyBUaGUgR05VIGRpZmYgYW5kIEdOVSBwYXRjaCB0b29scyBleGlzdCBmb3IgdmlydHVhbGx5IGFsbCBwbGF0Zm9ybXMsIGluY2x1ZGluZworIGFsbCBraW5kcyBvZiBVbml4ZXMgYW5kIFdpbmRvd3M6CisKKyBGb3IgdW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zOgorCisgICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXRjaC9wYXRjaC5odG1sCisgICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9kaXJlY3RvcnkvZGlmZnV0aWxzLmh0bWwKKworIEZvciBXaW5kb3dzOgorCisgICAgIGh0dHA6Ly9nbnV3aW4zMi5zb3VyY2Vmb3JnZS5uZXQvcGFja2FnZXMvcGF0Y2guaHRtCisgICAgIGh0dHA6Ly9nbnV3aW4zMi5zb3VyY2Vmb3JnZS5uZXQvcGFja2FnZXMvZGlmZnV0aWxzLmh0bQorCiszLjQgSG93IHRvIGdldCB5b3VyIGNoYW5nZXMgaW50byB0aGUgbWFpbiBzb3VyY2VzCisKKyBTdWJtaXQgeW91ciBwYXRjaCB0byB0aGUgY3VybC1saWJyYXJ5IG1haWxpbmcgbGlzdC4KKworIE1ha2UgdGhlIHBhdGNoIGFnYWluc3QgYXMgcmVjZW50IHNvdXJjZXMgYXMgcG9zc2libGUuCisKKyBNYWtlIHN1cmUgeW91ciBwYXRjaCBhZGhlcmVzIHRvIHRoZSBzb3VyY2UgaW5kZW50IGFuZCBjb2Rpbmcgc3R5bGUgb2YgYWxyZWFkeQorIGV4aXN0aW5nIHNvdXJjZSBjb2RlLiBGYWlsaW5nIHRvIGRvIHNvIGp1c3QgYWRkcyBtb3JlIHdvcmsgZm9yIG1lLgorCisgUmVzcG9uZCB0byByZXBsaWVzIG9uIHRoZSBsaXN0IGFib3V0IHRoZSBwYXRjaCBhbmQgYW5zd2VyIHF1ZXN0aW9ucyBhbmQvb3IKKyBmaXggbml0cy9mbGF3cy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudC4gSSB3aWxsIHRha2UgbGFjayBvZiByZXBsaWVzIGFzIGEgc2lnbgorIHRoYXQgeW91J3JlIG5vdCB2ZXJ5IGFueGlvdXMgdG8gZ2V0IHlvdXIgcGF0Y2ggYWNjZXB0ZWQgYW5kIEkgdGVuZCB0byBzaW1wbHkKKyBkcm9wIHN1Y2ggcGF0Y2hlcyBmcm9tIG15IFRPRE8gbGlzdC4KKworIElmIHlvdSd2ZSBmb2xsb3dlZCB0aGUgYWJvdmUgcGFyYWdyYXBocyBhbmQgeW91ciBwYXRjaCBzdGlsbCBoYXNuJ3QgYmVlbgorIGluY29ycG9yYXRlZCBhZnRlciBzb21lIHdlZWtzLCBjb25zaWRlciByZXN1Ym1pdHRpbmcgaXQgdG8gdGhlIGxpc3QuCisKKzMuNSBXcml0ZSBnb29kIGNvbW1pdCBtZXNzYWdlcworCisgQSBzaG9ydCBndWlkZSB0byBob3cgdG8gZG8gZmluZSBjb21taXQgbWVzc2FnZXMgaW4gdGhlIGN1cmwgcHJvamVjdC4KKworICAgICAgLS0tLSBzdGFydCAtLS0tCisgICAgICBbYXJlYV06IFtzaG9ydCBsaW5lIGRlc2NyaWJpbmcgdGhlIG1haW4gZWZmZWN0XQorCisgICAgICBbc2VwYXJhdGUgdGhlIGFib3ZlIHNpbmdsZSBsaW5lIGZyb20gdGhlIHJlc3Qgd2l0aCBhbiBlbXB0eSBsaW5lXQorCisgICAgICBbZnVsbCBkZXNjcmlwdGlvbiwgbm8gd2lkZXIgdGhhbiA3MiBjb2x1bW5zIHRoYXQgZGVzY3JpYmUgYXMgbXVjaCBhcworICAgICAgcG9zc2libGUgYXMgdG8gd2h5IHRoaXMgY2hhbmdlIGlzIG1hZGUsIGFuZCBwb3NzaWJseSB3aGF0IHRoaW5ncworICAgICAgaXQgZml4ZXMgYW5kIGV2ZXJ5dGhpbmcgZWxzZSB0aGF0IGlzIHJlbGF0ZWRdCisgICAgICAtLS0tIHN0b3AgLS0tLQorCisgRG9uJ3QgZm9yZ2V0IHRvIHVzZSBjb21taXQgLS1hdXRob3I9IiIgaWYgeW91IGNvbW1pdCBzb21lb25lIGVsc2UncyB3b3JrLAorIGFuZCBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB5b3VyIG93biB1c2VyIGFuZCBlbWFpbCBzZXR1cCBjb3JyZWN0bHkgaW4gZ2l0CisgYmVmb3JlIHlvdSBjb21taXQKKworMy42IFBsZWFzZSBkb24ndCBzZW5kIHB1bGwgcmVxdWVzdHMKKworIFdpdGggZ2l0IChhbmQgZXhwZWNpYWxseSBnaXRodWIpIGl0IGlzIGVhc3kgYW5kIHRlbXB0aW5nIHRvIHNlbmQgYSBwdWxsCisgcmVxdWVzdCB0byBvbmUgb3IgbW9yZSBwZW9wbGUgaW4gdGhlIGN1cmwgcHJvamVjdCB0byBoYXZlIGNoYW5nZXMgbWVyZ2VkIHRoaXMKKyB3YXkgaW5zdGVhZCBvZiBtYWlsaW5nIHBhdGNoZXMgdG8gdGhlIGN1cmwtbGlicmFyeSBtYWlsaW5nIGxpc3QuCisKKyBXZSBkb24ndCBsaWtlIHRoYXQuIFdlIHdhbnQgdGhlbSBtYWlsZWQgZm9yIHRoZXNlIHJlYXNvbnM6CisKKyAtIFBlZXIgcmV2aWV3LiBBbnlvbmUgYW5kIGV2ZXJ5b25lIG9uIHRoZSBsaXN0IGNhbiByZXZpZXcsIGNvbW1lbnQgYW5kCisgICBpbXByb3ZlIG9uIHRoZSBwYXRjaC4gUHVsbCByZXF1ZXN0cyBsaW1pdCB0aGlzIGFiaWxpdHkuCisKKyAtIEFueW9uZSBjYW4gbWVyZ2UgdGhlIHBhdGNoIGludG8gdGhlaXIgb3duIHRyZWVzIGZvciB0ZXN0aW5nIGFuZCB0aG9zZSB3aG8KKyAgIGhhdmUgcHVzaCByaWdodHMgY2FuIHB1c2ggaXQgdG8gdGhlIG1haW4gcmVwby4gSXQgZG9lc24ndCBoYXZlIHRvIGJlIGFueW9uZQorICAgdGhlIHBhdGNoIGF1dGhvciBrbm93cyBiZWZvcmVoYW5kLgorCisgLSBDb21taXQgbWVzc2FnZXMgY2FuIGJlIHR3ZWFrZWQgYW5kIGNoYW5nZWQgaWYgbWVyZ2VkIGxvY2FsbHkgaW5zdGVhZCBvZgorICAgdXNpbmcgZ2l0aHViLiBNZXJnZXMgZGlyZWN0bHkgb24gZ2l0aHViIHJlcXVpcmVzIHRoZSBjaGFuZ2VzIHRvIGJlIHBlcmZlY3QKKyAgIGFscmVhZHksIHdoaWNoIHRoZXkgc2VsZG9tbHkgYXJlLgorCisgLSBNZXJnZXMgb24gZ2l0aHViIHByZXZlbnRzIHJlYmFzZXMgYW5kIGV2ZW4gZW5mb3JjZXMgLS1uby1mZiB3aGljaCBpcyBhIGdpdAorICAgc3R5bGUgd2UgZG9uJ3Qgb3RoZXJ3aXNlIHVzZSBpbiB0aGUgcHJvamVjdAorCisgSG93ZXZlcjogb25jZSBwYXRjaGVzIGhhdmUgYmVlbiByZXZpZXdlZCBhbmQgZGVlbWVkIGZpbmUgb24gbGlzdCB0aGV5IGFyZQorIHBlcmZlY3RseSBPSyB0byBiZSBwdWxsZWQgZnJvbSBhIHB1Ymxpc2hlZCBnaXQgdHJlZS4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvRElTVFJPLURJTEVNTUEgYi9jdXJsLTcuMjUuMC9kb2NzL0RJU1RSTy1ESUxFTU1BCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOGU2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL0RJU1RSTy1ESUxFTU1BCkBAIC0wLDAgKzEsMTc2IEBACisgIERhdGU6IEZlYnJ1YXJ5IDExLCAyMDA3CisgIEF1dGhvcjogRGFuaWVsIFN0ZW5iZXJnIDxkYW5pZWxAaGF4eC5zZT4KKyAgVVJMOiBodHRwOi8vY3VybC5oYXh4LnNlL2xlZ2FsL2Rpc3Ryby1kaWxlbW1hLmh0bWwKKworQ29uZGl0aW9uCisKKyBUaGlzIGRvY3VtZW50IGlzIHdyaXR0ZW4gdG8gZGVzY3JpYmUgdGhlIHNpdHVhdGlvbiBhcyBpdCBpcyByaWdodCBub3cuCisgbGliY3VybCA3LjE2LjEgaXMgY3VycmVudGx5IHRoZSBsYXRlc3QgdmVyc2lvbiBhdmFpbGFibGUuIFRoaW5ncyBtYXkgb2YKKyBjb3Vyc2UgY2hhbmdlIGluIHRoZSBmdXR1cmUuCisKKyBUaGlzIGRvY3VtZW50IHJlZmxlY3RzIG15IHZpZXcgYW5kIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgdGhpbmdzLiBQbGVhc2UgdGVsbAorIG1lIHdoZXJlIGFuZCBob3cgeW91IHRoaW5rIEknbSB3cm9uZywgYW5kIEknbGwgdHJ5IHRvIGNvcnJlY3QgbXkgbWlzdGFrZXMuCisKK0JhY2tncm91bmQKKworIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaGFzIGRlZW1lZCB0aGUgT3JpZ2luYWwgQlNEIGxpY2Vuc2VbMV0gdG8gYmUKKyAiaW5jb21wYXRpYmxlIlsyXSB3aXRoIEdQTFszXS4gSSdkIHJhdGhlciBzYXkgaXQgaXMgdGhlIG90aGVyIHdheSBhcm91bmQsIGJ1dAorIHRoZSBwb2ludCBpcyB0aGUgc2FtZTogaWYgeW91IGRpc3RyaWJ1dGUgYSBiaW5hcnkgdmVyc2lvbiBvZiBhIEdQTCBwcm9ncmFtLAorIGl0IE1VU1QgTk9UIGJlIGxpbmtlZCB3aXRoIGFueSBPcmlnaW5hbCBCU0QtbGljZW5zZWQgcGFydHMgb3IgbGlicmFyaWVzLgorIERvaW5nIHNvIHdpbGwgdmlvbGF0ZSB0aGUgR1BMIGxpY2Vuc2UuIEZvciBhIGxvbmcgdGltZSwgdmVyeSBtYW55IEdQTAorIGxpY2Vuc2VkIHByb2dyYW1zIGhhdmUgYXZvaWRlZCB0aGlzIGxpY2Vuc2UgbWVzcyBieSBhZGRpbmcgYW4gZXhjZXB0aW9uWzhdIHRvCisgdGhlaXIgbGljZW5zZS4gQW5kIG1hbnkgb3RoZXJzIGhhdmUganVzdCBjbG9zZWQgdGhlaXIgZXllcyBmb3IgdGhpcyBwcm9ibGVtLgorCisgbGliY3VybCBpcyBNSVQtc3R5bGVbNF0gbGljZW5zZWQgLSBob3cgb24gZWFydGggZGlkIHRoaXMgZGlsZW1tYSBmYWxsIG9udG8KKyBvdXIgcGxhdGVzPworCisgbGliY3VybCBpcyBvbmx5IGEgbGl0dGxlIGxpYnJhcnkuIGxpYmN1cmwgY2FuIGJlIGJ1aWx0IHRvIHVzZSBPcGVuU1NMIGZvciBpdHMKKyBTU0wvVExTIGNhcGFiaWxpdGllcy4gT3BlblNTTCBpcyBiYXNpY2FsbHkgT3JpZ2luYWwgQlNEIGxpY2Vuc2VkWzVdLgorCisgSWYgbGliY3VybCBidWlsdCB0byB1c2UgT3BlblNTTCBpcyB1c2VkIGJ5IGEgR1BMLWxpY2Vuc2VkIGFwcGxpY2F0aW9uIGFuZCB5b3UKKyBkZWNpZGUgdG8gZGlzdHJpYnV0ZSBhIGJpbmFyeSB2ZXJzaW9uIG9mIGl0IChMaW51eCBkaXN0cm9zIC0gZm9yIGV4YW1wbGUgLQorIHRlbmQgdG8pLCB5b3UgaGF2ZSBhIGNsYXNoLiBHUEwgdnMgT3JpZ2luYWwgQlNELgorCisgVGhpcyBkaWxlbW1hIGlzIG5vdCBsaWJjdXJsLXNwZWNpZmljIG5vciBpcyBpdCBzcGVjaWZpYyB0byBhbnkgcGFydGljdWxhcgorIExpbnV4IGRpc3Ryby4gKFRoaXMgYXJ0aWNsZSBtZW50aW9ucyBhbmQgcmVmZXJzIHRvIERlYmlhbiBzZXZlcmFsIHRpbWVzLCBidXQKKyBvbmx5IGJlY2F1c2UgRGViaWFuIHNlZW1zIHRvIGJlIHRoZSBvbmx5IExpbnV4IGRpc3RybyB0byBoYXZlIGZhY2VkIHRoaXMKKyBpc3N1ZSB5ZXQgc2luY2Ugbm8gb3RoZXIgZGlzdHJvIGlzIHNoaXBwaW5nIGxpYmN1cmwgYnVpbHQgd2l0aCB0d28gU1NMCisgbGlicmFyaWVzLikKKworUGFydCBvZiB0aGUgT3BlcmF0aW5nIFN5c3RlbQorCisgVGhpcyB3b3VsZCBub3QgYmUgYSBwcm9ibGVtIGlmIHRoZSB1c2VkIGxpYiB3b3VsZCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlCisgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtLCBhcyB0aGVuIHRoZSBHUEwgbGljZW5zZSBoYXMgYW4gZXhjZXB0aW9uCisgY2xhdXNlWzZdIHRoYXQgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byB1c2Ugc3VjaCBsaWJzIHdpdGhvdXQgaGF2aW5nIHRvIGJlCisgYWxsb3dlZCB0byBkaXN0cmlidXRlIGl0IG9yIGl0cyBzb3VyY2VzLiBQb3NzaWJseSBzb21lIGRpc3Ryb3Mgd2lsbCBjbGFpbQorIHRoYXQgT3BlblNTTCBpcyBwYXJ0IG9mIHRoZWlyIG9wZXJhdGluZyBzeXN0ZW0uCisKKyBEZWJpYW4gZG9lcyBob3dldmVyIG5vdCB0YWtlIHRoaXMgc3RhbmNlIGFuZCBoYXMgb2ZmaWNpYWxseSg/KSBjbGFpbWVkIHRoYXQKKyBPcGVuU1NMIGlzIG5vdCBhIHJlcXVpcmVkIHBhcnQgb2YgdGhlIERlYmlhbiBvcGVyYXRpbmcgc3lzdGVtCisKKyBTb21lIHBlb3BsZSBjbGFpbSB0aGF0IHRoaXMgcGFyYWdyYXBoIGNhbm5vdCBiZSBleHBsb2l0ZWQgdGhpcyB3YXkgYnkgYSBMaW51eAorIGRpc3RybywgYnV0IEkgYW0gbm90IGEgbGF3eWVyIGFuZCB0aGF0IGlzIGEgZGlzY3Vzc2lvbiBsZWZ0IG91dHNpZGUgb2YgdGhpcworIGRvY3VtZW50LgorCitHbnVUTFMKKworIFNpbmNlIE1heSAyMDA1IGxpYmN1cmwgY2FuIGdldCBidWlsdCB0byB1c2UgR251VExTIGluc3RlYWQgb2YgT3BlblNTTC4gR251VExTCisgaXMgYW4gTEdQTFs3XSBsaWNlbnNlZCBsaWJyYXJ5IHRoYXQgb2ZmZXJzIGEgbWF0Y2hpbmcgc2V0IG9mIGZlYXR1cmVzIGFzCisgT3BlblNTTCBkb2VzLiBOb3csIHlvdSBjYW4gYnVpbGQgYW5kIGRpc3RyaWJ1dGUgYW4gVExTL1NTTCBjYXBhYmxlIGxpYmN1cmwKKyB3aXRob3V0IGluY2x1ZGluZyBhbnkgT3JpZ2luYWwgQlNEIGxpY2Vuc2VkIGNvZGUuCisKKyBJIGJlbGlldmUgRGViaWFuIGlzIHRoZSBmaXJzdCAob25seT8pIGRpc3RybyB0aGF0IHByb3ZpZGVzIGxpYmN1cmwvR251dFRMUworIHBhY2thZ2VzLgorCit5YXNzbAorCisgbGliY3VybCBjYW4gZ2V0IGFsc28gZ2V0IGJ1aWx0IHRvIHVzZSB5YXNzbCBmb3IgdGhlIFRMUy9TU0wgbGF5ZXIuIHlhc3NsIGlzIGEKKyBHUExbM10gbGljZW5zZWQgbGlicmFyeS4KKworCitHbnVUTFMgdnMgT3BlblNTTCB2cyB5YXNzbAorCisgV2hpbGUgdGhlc2UgdGhyZWUgbGlicmFyaWVzIG9mZmVyIHNpbWlsYXIgZmVhdHVyZXMsIHRoZXkgYXJlIG5vdCBlcXVhbC4KKyBsaWJjdXJsIGRvZXMgbm90ICh5ZXQpIG9mZmVyIGEgc3RhbmRhcmRpemVkIHN0YWJsZSBBQkkgaWYgeW91IGRlY2lkZSB0bworIHN3aXRjaCBmcm9tIHVzaW5nIGxpYmN1cmwtb3BlbnNzbCB0byBsaWJjdXJsLWdudXRscyBvciB2aWNlIHZlcnNhLiBUaGUgR251VExTCisgYW5kIHlhc3NsIHN1cHBvcnQgaXMgdmVyeSByZWNlbnQgaW4gbGliY3VybCBhbmQgaXQgaGFzIG5vdCBiZWVuIHRlc3RlZCBub3IKKyB1c2VkIHZlcnkgZXh0ZW5zaXZlbHksIHdoaWxlIHRoZSBPcGVuU1NMIGVxdWl2YWxlbnQgY29kZSBoYXMgYmVlbiB1c2VkIGFuZAorIHRodXMgbWF0dXJlZCBzaW5jZSAxOTk5LgorCisgR251VExTCisgICAtIExHUEwgbGljZW5zZW5lZAorICAgLSBzdXBwb3J0cyBTUlAKKyAgIC0gbGFja3MgU1NMdjIgc3VwcG9ydAorICAgLSBsYWNrcyBNRDIgc3VwcG9ydCAodXNlZCBieSBhdCBsZWFzdCBzb21lIENBIGNlcnRzKQorICAgLSBsYWNrcyB0aGUgY3J5cHRvIGZ1bmN0aW9ucyBsaWJjdXJsIHVzZXMgZm9yIE5UTE0KKworIE9wZW5TU0wKKyAgIC0gT3JpZ2luYWwgQlNEIGxpY2Vuc2VuZWQKKyAgIC0gbGFja3MgU1JQCisgICAtIHN1cHBvcnRzIFNTTHYyCisgICAtIG9sZGVyIGFuZCBtb3JlIHdpZGVseSB1c2VkCisgICAtIHByb3ZpZGVzIGNyeXB0byBmdW5jdGlvbnMgbGliY3VybCB1c2VzIGZvciBOVExNCisgICAtIGxpYmN1cmwgY2FuIGRvIG5vbi1ibG9ja2luZyBjb25uZWN0cyB3aXRoIGl0IGluIDcuMTUuNCBhbmQgbGF0ZXIKKworIHlhc3NsCisgICAtIEdQTCBsaWNlbnNlZAorICAgLSBtdWNoIHVudGVzdGVkIGFuZCB1bnByb3ZlbiBpbiB0aGUgcmVhbCB3b3JrIGJ5IChsaWIpY3VybCB1c2VycyBzbyB3ZSBkb24ndAorICAgICBrbm93IGEgbG90IGFib3V0IHJlc3RyaWN0aW9ucyBvciBiZW5lZml0cyBmcm9tIHVzaW5nIHRoaXMKKworVGhlIEJldHRlciBMaWNlbnNlLCBPcmlnaW5hbCBCU0QsIEdQTCBvciBMR1BMPworCisgSXQgaXNuJ3Qgb2J2aW91cyBvciB3aXRob3V0IGRlYmF0ZSB0byBhbnkgb2JqZWN0aXZlIGludGVyZXN0ZWQgcGFydHkgdGhhdAorIGVpdGhlciBvZiB0aGVzZSBsaWNlbnNlcyBhcmUgdGhlICJiZXR0ZXIiIG9yIGV2ZW4gdGhlICJwcmVmZXJyZWQiIG9uZSBpbiBhCisgZ2VuZXJpYyBzaXR1YXRpb24uCisKKyBJbnN0ZWFkLCBJIHRoaW5rIHdlIHNob3VsZCBhY2NlcHQgdGhlIGZhY3QgdGhhdCB0aGUgU1NML1RMUyBsaWJyYXJpZXMgYW5kCisgdGhlaXIgZGlmZmVyZW50IGxpY2Vuc2VzIHdpbGwgZml0IGRpZmZlcmVudCBhcHBsaWNhdGlvbnMgYW5kIHRoZWlyIGF1dGhvcnMKKyBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gdGhlIGFwcGxpY2F0aW9ucycgbGljZW5zZXMgYW5kIHRoZWlyIGdlbmVyYWwgdXNhZ2UKKyBwYXR0ZXJuIChjb25zaWRlcmluZyBob3cgR1BMIGFuZCBMR1BMIGxpYnJhcmllcyBmb3IgZXhhbXBsZSBjYW4gYmUgYnVyZGVuc29tZQorIGZvciBlbWJlZGRlZCBzeXN0ZW1zIHVzYWdlKS4KKworIEluIERlYmlhbiBsYW5kLCB0aGVyZSBzZWVtcyB0byBiZSBhIGNvbW1vbiBvcGluaW9uIHRoYXQgTEdQTCBpcyAibWF4aW1hbGx5CisgY29tcGF0aWJsZSIgd2l0aCBhcHBzIHdoaWxlIE9yaWdpbmFsIEJTRCBpcyBub3QuIExpa2UgdGhpczoKKworICAgICAgICBodHRwOi8vbGlzdHMuZGViaWFuLm9yZy9kZWJpYW4tZGV2ZWwvMjAwNS8wOS9tc2cwMTQxNy5odG1sCisKK01vcmUgU1NMIExpYnJhcmllcworCisgSW4gbGliY3VybCwgdGhlcmUncyBubyBzdG9wcGluZyB1cyBoZXJlLiBUaGVyZSBhcmUgbW9yZSBPcGVuIFNvdXJjZS9GcmVlCisgU1NML1RMUyBsaWJyYXJpZXMgb3V0IHRoZXJlIGFuZCB3ZSB3b3VsZCB2ZXJ5IG11Y2ggbGlrZSB0byBzdXBwb3J0IHRoZW0gYXMKKyB3ZWxsLCB0byBvZmZlciBhcHBsaWNhdGlvbiBhdXRob3JzIGFuIGV2ZW4gd2lkZXIgc2NvcGUgb2YgY2hvaWNlLgorCitBcHBsaWNhdGlvbiBBbmdsZSBvZiB0aGlzIFByb2JsZW0KKworIGxpYmN1cmwgaXMgYnVpbHQgdG8gdXNlIG9uZSBTU0wvVExTIGxpYnJhcnkuIEl0IHVzZXMgYSBzaW5nbGUgZml4ZWQgbmFtZSAoYnkKKyBkZWZhdWx0KSBvbiB0aGUgYnVpbHQvY3JlYXRlZCBsaWIgZmlsZSwgYW5kIGFwcGxpY2F0aW9ucyBhcmUgYnVpbHQvbGlua2VkIHRvCisgdXNlIHRoYXQgc2luZ2xlIGxpYi4gUmVwbGFjaW5nIG9uZSBsaWJjdXJsIGluc3RhbmNlIHdpdGggYW5vdGhlciBvbmUgdGhhdAorIHVzZXMgdGhlIG90aGVyIFNTTC9UTFMgbGlicmFyeSBtaWdodCBicmVhayBvbmUgb3IgbW9yZSBhcHBsaWNhdGlvbnMgKGR1ZSB0bworIEFCSSBkaWZmZXJlbmNlcyBhbmQvb3IgZGlmZmVyZW50IGZlYXR1cmUgc2V0KS4gWW91IHdhbnQgeW91ciBhcHBsaWNhdGlvbiB0bworIHVzZSB0aGUgbGliY3VybCBpdCB3YXMgYnVpbHQgZm9yLgorCitQcm9qZWN0IGNVUkwgQW5nbGUgb2YgdGhpcyBQcm9ibGVtCisKKyBXZSBkaXN0cmlidXRlIGxpYmN1cmwgYW5kIGV2ZXJ5b25lIG1heSBidWlsZCBsaWJjdXJsIHdpdGggZWl0aGVyIGxpYnJhcnkgYXQKKyB0aGVpciBjaG9pY2UuIFRoaXMgcHJvYmxlbSBpcyBub3QgZGlyZWN0bHkgYSBwcm9ibGVtIG9mIG91cnMuIEl0IG1lcmVseQorIGFmZmVjdHMgdXNlcnMgLSBHUEwgYXBwbGljYXRpb24gYXV0aG9ycyBvbmx5IC0gb2Ygb3VyIGxpYiBhcyBpdCBjb21lcworIGluY2x1ZGVkIGFuZCBkZWxpdmVyZWQgb24gc29tZSBkaXN0cm9zLgorCisgbGliY3VybCBoYXMgZGlmZmVyZW50IEFCSSB3aGVuIGJ1aWx0IHdpdGggZGlmZmVyZW50IFNTTC9UTFMgbGlicmFyaWVzIGR1ZSB0bworIHRoZXNlIHJlYXNvbnM6CisKKyAxLiBObyBvbmUgaGFzIHdvcmtlZCBvbiBmaXhpbmcgdGhpcy4gVGhlIG11dGV4L2xvY2sgY2FsbGJhY2tzIHNob3VsZCBiZSBzZXQKKyAgICB3aXRoIGEgZ2VuZXJpYyBsaWJjdXJsIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHVzZSB0aGUgcHJvcGVyIHVuZGVybHlpbmcKKyAgICBmdW5jdGlvbnMuCisKKyAyLiBUaGUgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OIG9wdGlvbiBpcyBub3QgcG9zc2libGUgdG8gImVtdWxhdGUiIG9uIEdudVRMUworICAgIGJ1dCBzaW1wbHkgcmVxdWlyZXMgT3BlblNTTC4KKworIDMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgb3RoZXIgc3VidGxlIGRpZmZlcmVuY2VzIGp1c3QgYmVjYXVzZSBub2JvZHkgaGFzIHlldAorICAgIHRyaWVkIHRvIG1ha2UgYSBmaXhlZCBBQkkgbGlrZSB0aGlzLgorCitEaXN0cm8gQW5nbGUgb2YgdGhpcyBQcm9ibGVtCisKKyBUbyBteSBrbm93bGVkZ2UgdGhlcmUgaXMgb25seSBvbmUgZGlzdHJvIHRoYXQgc2hpcHMgbGliY3VybCBidWlsdCB3aXRoIGVpdGhlcgorIE9wZW5TU0wgb3IgR251VExTLgorCisgRGViaWFuIExpbnV4IGlzIG5vdyAoc2luY2UgbWlkIFNlcHRlbWJlciAyMDA1KSBwcm92aWRpbmcgdHdvIGRpZmZlcmVudAorIGxpYmN1cmwgcGFja2FnZXMsIG9uZSBmb3IgbGliY3VybCBidWlsdCB3aXRoIE9wZW5TU0wgYW5kIG9uZSBidWlsdCB3aXRoCisgR251VExTLiBUaGV5IHVzZSBkaWZmZXJlbnQgLnNvIG5hbWVzIGFuZCBjYW4gdGhpcyBib3RoIGJlIGluc3RhbGxlZCBpbiBhCisgc2luZ2xlIHN5c3RlbSBzaW11bHRhbmVvdXNseS4gVGhpcyBoYXMgYmVlbiBzYWlkIHRvIGJlIGEgdHJhbnNpdGlvbmFsIHN5c3RlbQorIG5vdCBkZXNpcmVkIHRvIGtlZXAgaW4gdGhlIGxvbmcgcnVuLgorCitGb290bm90ZXMKKworIFsxXSA9IGh0dHA6Ly93d3cueGZyZWU4Ni5vcmcvMy4zLjYvQ09QWVJJR0hUMi5odG1sIzYKKyBbMl0gPSBodHRwOi8vd3d3LmZzZi5vcmcvbGljZW5zaW5nL2Vzc2F5cy9ic2QuaHRtbAorIFszXSA9IGh0dHA6Ly93d3cuZnNmLm9yZy9saWNlbnNpbmcvbGljZW5zZXMvZ3BsLmh0bWwKKyBbNF0gPSBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwKKyBbNV0gPSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9saWNlbnNlLmh0bWwKKyBbNl0gPSBodHRwOi8vd3d3LmZzZi5vcmcvbGljZW5zaW5nL2xpY2Vuc2VzL2dwbC5odG1sIGVuZCBvZiBzZWN0aW9uIDMKKyBbN10gPSBodHRwOi8vd3d3LmZzZi5vcmcvbGljZW5zaW5nL2xpY2Vuc2VzL2xncGwuaHRtbAorIFs4XSA9IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT3BlblNTTF9leGNlcHRpb24KKworRmVlZGJhY2svVXBkYXRlcyBwcm92aWRlZCBieQorCisgRXJpYyBDb29wZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvRkFRIGIvY3VybC03LjI1LjAvZG9jcy9GQVEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiMDAxZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvRkFRCkBAIC0wLDAgKzEsMTQzNiBAQAorVXBkYXRlZDogRGVjZW1iZXIgNywgMjAxMSAoaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2ZhcS5odG1sKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKworRkFRCisKKyAxLiBQaGlsb3NvcGh5CisgIDEuMSBXaGF0IGlzIGNVUkw/CisgIDEuMiBXaGF0IGlzIGxpYmN1cmw/CisgIDEuMyBXaGF0IGlzIGN1cmwgbm90PworICAxLjQgV2hlbiB3aWxsIHlvdSBtYWtlIGN1cmwgZG8gWFhYWCA/CisgIDEuNSBXaG8gbWFrZXMgY3VybD8KKyAgMS42IFdoYXQgZG8geW91IGdldCBmb3IgbWFraW5nIGN1cmw/CisgIDEuNyBXaGF0IGFib3V0IENVUkwgZnJvbSBjdXJsLmNvbT8KKyAgMS44IEkgaGF2ZSBhIHByb2JsZW0gd2hvIGRvIEkgbWFpbD8KKyAgMS45IFdoZXJlIGRvIEkgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCBmb3IgY3VybD8KKyAgMS4xMCBIb3cgbWFueSBhcmUgdXNpbmcgY3VybD8KKyAgMS4xMSBXaHkgZG9uJ3QgeW91IHVwZGF0ZSBjYS1idW5kbGUuY3J0CisgIDEuMTIgSSBoYXZlIGEgcHJvYmxlbSB3aG8gY2FuIEkgY2hhdCB3aXRoPworICAxLjEzIGN1cmwncyBFQ0NOIG51bWJlcj8KKyAgMS4xNCBIb3cgZG8gSSBzdWJtaXQgbXkgcGF0Y2g/CisKKyAyLiBJbnN0YWxsIFJlbGF0ZWQgUHJvYmxlbXMKKyAgMi4xIGNvbmZpZ3VyZSBkb2Vzbid0IGZpbmQgT3BlblNTTCBldmVuIHdoZW4gaXQgaXMgaW5zdGFsbGVkCisgICAyLjEuMSBuYXRpdmUgbGlua2VyIGRvZXNuJ3QgZmluZCBPcGVuU1NMCisgICAyLjEuMiBvbmx5IHRoZSBsaWJzc2wgbGliIGlzIG1pc3NpbmcKKyAgMi4yIERvZXMgY3VybCB3b3JrL2J1aWxkIHdpdGggb3RoZXIgU1NMIGxpYnJhcmllcz8KKyAgMi4zIFdoZXJlIGNhbiBJIGZpbmQgYSBjb3B5IG9mIExJQkVBWTMyLkRMTD8KKyAgMi40IERvZXMgY3VybCBzdXBwb3J0IFNPQ0tTIChSRkMgMTkyOCkgPworCisgMy4gVXNhZ2UgUHJvYmxlbXMKKyAgMy4xIGN1cmw6ICgxKSBTU0wgaXMgZGlzYWJsZWQsIGh0dHBzOiBub3Qgc3VwcG9ydGVkCisgIDMuMiBIb3cgZG8gSSB0ZWxsIGN1cmwgdG8gcmVzdW1lIGEgdHJhbnNmZXI/CisgIDMuMyBXaHkgZG9lc24ndCBteSBwb3N0aW5nIHVzaW5nIC1GIHdvcms/CisgIDMuNCBIb3cgZG8gSSB0ZWxsIGN1cmwgdG8gcnVuIGN1c3RvbSBGVFAgY29tbWFuZHM/CisgIDMuNSBIb3cgY2FuIEkgZGlzYWJsZSB0aGUgQWNjZXB0OiAqLyogaGVhZGVyPworICAzLjYgRG9lcyBjdXJsIHN1cHBvcnQgQVNQLCBYTUwsIFhIVE1MIG9yIEhUTUwgdmVyc2lvbiBZPworICAzLjcgQ2FuIEkgdXNlIGN1cmwgdG8gZGVsZXRlL3JlbmFtZSBhIGZpbGUgdGhyb3VnaCBGVFA/CisgIDMuOCBIb3cgZG8gSSB0ZWxsIGN1cmwgdG8gZm9sbG93IEhUVFAgcmVkaXJlY3RzPworICAzLjkgSG93IGRvIEkgdXNlIGN1cmwgaW4gbXkgZmF2b3JpdGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2U/CisgIDMuMTAgV2hhdCBhYm91dCBTT0FQLCBXZWJEQVYsIFhNTC1SUEMgb3Igc2ltaWxhciBwcm90b2NvbHMgb3ZlciBIVFRQPworICAzLjExIEhvdyBkbyBJIFBPU1Qgd2l0aCBhIGRpZmZlcmVudCBDb250ZW50LVR5cGU/CisgIDMuMTIgV2h5IGRvIEZUUCBzcGVjaWZpYyBmZWF0dXJlcyBvdmVyIEhUVFAgcHJveHkgZmFpbD8KKyAgMy4xMyBXaHkgZG9lcyBteSBzaW5nbGUvZG91YmxlIHF1b3RlcyBmYWlsPworICAzLjE0IERvZXMgY3VybCBzdXBwb3J0IEphdmFzY3JpcHQgb3IgUEFDIChhdXRvbWF0ZWQgcHJveHkgY29uZmlnKT8KKyAgMy4xNSBDYW4gSSBkbyByZWN1cnNpdmUgZmV0Y2hlcyB3aXRoIGN1cmw/CisgIDMuMTYgV2hhdCBjZXJ0aWZpY2F0ZXMgZG8gSSBuZWVkIHdoZW4gSSB1c2UgU1NMPworICAzLjE3IEhvdyBkbyBJIGxpc3QgdGhlIHJvb3QgZGlyIG9mIGFuIEZUUCBzZXJ2ZXI/CisgIDMuMTggQ2FuIEkgdXNlIGN1cmwgdG8gc2VuZCBhIFBPU1QvUFVUIGFuZCBub3Qgd2FpdCBmb3IgYSByZXNwb25zZT8KKyAgMy4xOSBIb3cgZG8gSSBnZXQgSFRUUCBmcm9tIGEgaG9zdCB1c2luZyBhIHNwZWNpZmljIElQIGFkZHJlc3M/CisgIDMuMjAgSG93IHRvIFNGVFAgZnJvbSBteSB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnk/CisgIDMuMjEgUHJvdG9jb2wgeHh4IG5vdCBzdXBwb3J0ZWQgb3IgZGlzYWJsZWQgaW4gbGliY3VybAorCisgNC4gUnVubmluZyBQcm9ibGVtcworICA0LjEgUHJvYmxlbXMgY29ubmVjdGluZyB0byBTU0wgc2VydmVycy4KKyAgNC4yIFdoeSBkbyBJIGdldCBwcm9ibGVtcyB3aGVuIEkgdXNlICYgb3IgJSBpbiB0aGUgVVJMPworICA0LjMgSG93IGNhbiBJIHVzZSB7LCB9LCBbIG9yIF0gdG8gc3BlY2lmeSBtdWx0aXBsZSBVUkxzPworICA0LjQgV2h5IGRvIEkgZ2V0IGRvd25sb2FkZWQgZGF0YSBldmVuIHRob3VnaCB0aGUgd2ViIHBhZ2UgZG9lc24ndCBleGlzdD8KKyAgNC41IFdoeSBkbyBJIGdldCByZXR1cm4gY29kZSBYWFggZnJvbSBhIEhUVFAgc2VydmVyPworICAgNC41LjEgIjQwMCBCYWQgUmVxdWVzdCIKKyAgIDQuNS4yICI0MDEgVW5hdXRob3JpemVkIgorICAgNC41LjMgIjQwMyBGb3JiaWRkZW4iCisgICA0LjUuNCAiNDA0IE5vdCBGb3VuZCIKKyAgIDQuNS41ICI0MDUgTWV0aG9kIE5vdCBBbGxvd2VkIgorICAgNC41LjYgIjMwMSBNb3ZlZCBQZXJtYW5lbnRseSIKKyAgNC42IENhbiB5b3UgdGVsbCBtZSB3aGF0IGVycm9yIGNvZGUgMTQyIG1lYW5zPworICA0LjcgSG93IGRvIEkga2VlcCB1c2VyIG5hbWVzIGFuZCBwYXNzd29yZHMgc2VjcmV0IGluIEN1cmwgY29tbWFuZCBsaW5lcz8KKyAgNC44IEkgZm91bmQgYSBidWchCisgIDQuOSBDdXJsIGNhbid0IGF1dGhlbnRpY2F0ZSB0byB0aGUgc2VydmVyIHRoYXQgcmVxdWlyZXMgTlRMTT8KKyAgNC4xMCBNeSBIVFRQIHJlcXVlc3QgdXNpbmcgSEVBRCwgUFVUIG9yIERFTEVURSBkb2Vzbid0IHdvcmshCisgIDQuMTEgV2h5IGRvZXMgbXkgSFRUUCByYW5nZSByZXF1ZXN0cyByZXR1cm4gdGhlIGZ1bGwgZG9jdW1lbnQ/CisgIDQuMTIgV2h5IGRvIEkgZ2V0ICJjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmFpbGVkIiA/CisgIDQuMTMgV2h5IGlzIGN1cmwgLVIgb24gV2luZG93cyBvbmUgaG91ciBvZmY/CisgIDQuMTQgUmVkaXJlY3RzIHdvcmsgaW4gYnJvd3NlciBidXQgbm90IHdpdGggY3VybCEKKyAgNC4xNSBGVFBTIGRvZXNuJ3Qgd29yaworICA0LjE2IE15IEhUVFAgUE9TVCBvciBQVVQgcmVxdWVzdHMgYXJlIHNsb3chCisgIDQuMTcgTm9uLWZ1bmN0aW9uYWwgY29ubmVjdCB0aW1lb3V0cyBvbiBXaW5kb3dzCisgIDQuMTggZmlsZTovLyBVUkxzIGNvbnRhaW5pbmcgZHJpdmUgbGV0dGVycyAoV2luZG93cywgTmV0V2FyZSkKKyAgNC4xOSBXaHkgZG9lc24ndCBjVVJMIHJldHVybiBhbiBlcnJvciB3aGVuIHRoZSBuZXR3b3JrIGNhYmxlIGlzIHVucGx1Z2dlZD8KKworIDUuIGxpYmN1cmwgSXNzdWVzCisgIDUuMSBJcyBsaWJjdXJsIHRocmVhZC1zYWZlPworICA1LjIgSG93IGNhbiBJIHJlY2VpdmUgYWxsIGRhdGEgaW50byBhIGxhcmdlIG1lbW9yeSBjaHVuaz8KKyAgNS4zIEhvdyBkbyBJIGZldGNoIG11bHRpcGxlIGZpbGVzIHdpdGggbGliY3VybD8KKyAgNS40IERvZXMgbGliY3VybCBkbyBXaW5zb2NrIGluaXRpbmcgb24gd2luMzIgc3lzdGVtcz8KKyAgNS41IERvZXMgQ1VSTE9QVF9XUklURURBVEEgYW5kIENVUkxPUFRfUkVBRERBVEEgd29yayBvbiB3aW4zMiA/CisgIDUuNiBXaGF0IGFib3V0IEtlZXAtQWxpdmUgb3IgcGVyc2lzdGVudCBjb25uZWN0aW9ucz8KKyAgNS43IExpbmsgZXJyb3JzIHdoZW4gYnVpbGRpbmcgbGliY3VybCBvbiBXaW5kb3dzIQorICA1LjggbGliY3VybC5zby5YOiBvcGVuIGZhaWxlZDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICA1LjkgSG93IGRvZXMgbGliY3VybCByZXNvbHZlIGhvc3QgbmFtZXM/CisgIDUuMTAgSG93IGRvIEkgcHJldmVudCBsaWJjdXJsIGZyb20gd3JpdGluZyB0aGUgcmVzcG9uc2UgdG8gc3Rkb3V0PworICA1LjExIEhvdyBkbyBJIG1ha2UgbGliY3VybCBub3QgcmVjZWl2ZSB0aGUgd2hvbGUgSFRUUCByZXNwb25zZT8KKyAgNS4xMiBDYW4gSSBtYWtlIGxpYmN1cmwgZmFrZSBvciBoaWRlIG15IHJlYWwgSVAgYWRkcmVzcz8KKyAgNS4xMyBIb3cgZG8gSSBzdG9wIGFuIG9uZ29pbmcgdHJhbnNmZXI/CisgIDUuMTQgVXNpbmcgQysrIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciBjYWxsYmFja3M/CisgIDUuMTUgSG93IGRvIEkgZ2V0IGFuIEZUUCBkaXJlY3RvcnkgbGlzdGluZz8KKworIDYuIExpY2Vuc2UgSXNzdWVzCisgIDYuMSBJIGhhdmUgYSBHUEwgcHJvZ3JhbSwgY2FuIEkgdXNlIHRoZSBsaWJjdXJsIGxpYnJhcnk/CisgIDYuMiBJIGhhdmUgYSBjbG9zZWQtc291cmNlIHByb2dyYW0sIGNhbiBJIHVzZSB0aGUgbGliY3VybCBsaWJyYXJ5PworICA2LjMgSSBoYXZlIGEgQlNEIGxpY2Vuc2VkIHByb2dyYW0sIGNhbiBJIHVzZSB0aGUgbGliY3VybCBsaWJyYXJ5PworICA2LjQgSSBoYXZlIGEgcHJvZ3JhbSB0aGF0IHVzZXMgTEdQTCBsaWJyYXJpZXMsIGNhbiBJIHVzZSBsaWJjdXJsPworICA2LjUgQ2FuIEkgbW9kaWZ5IGN1cmwvbGliY3VybCBmb3IgbXkgcHJvZ3JhbSBhbmQga2VlcCB0aGUgY2hhbmdlcyBzZWNyZXQ/CisgIDYuNiBDYW4geW91IHBsZWFzZSBjaGFuZ2UgdGhlIGN1cmwvbGliY3VybCBsaWNlbnNlIHRvIFhYWFg/CisgIDYuNyBXaGF0IGFyZSBteSBvYmxpZ2F0aW9ucyB3aGVuIHVzaW5nIGxpYmN1cmwgaW4gbXkgY29tbWVyY2lhbCBhcHBzPworCisgNy4gUEhQL0NVUkwgSXNzdWVzCisgIDcuMSBXaGF0IGlzIFBIUC9DVVJMPworICA3LjIgV2hvIHdyb3RlIFBIUC9DVVJMPworICA3LjMgQ2FuIEkgcGVyZm9ybSBtdWx0aXBsZSByZXF1ZXN0cyB1c2luZyB0aGUgc2FtZSBoYW5kbGU/CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBQaGlsb3NvcGh5CisKKyAgMS4xIFdoYXQgaXMgY1VSTD8KKworICBjVVJMIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0LiBUaGUgbmFtZSBpcyBhIHBsYXkgb24gJ0NsaWVudCBmb3IgVVJMcycsCisgIG9yaWdpbmFsbHkgd2l0aCBVUkwgc3BlbGxlZCBpbiB1cHBlcmNhc2UgdG8gbWFrZSBpdCBvYnZpb3VzIGl0IGRlYWxzIHdpdGgKKyAgVVJMcy4gVGhlIGZhY3QgaXQgY2FuIGFsc28gYmUgcHJvbm91bmNlZCAnc2VlIFVSTCcgYWxzbyBoZWxwZWQsIGl0IHdvcmtzIGFzCisgIGFuIGFiYnJldmlhdGlvbiBmb3IgIkNsaWVudCBVUkwgUmVxdWVzdCBMaWJyYXJ5IiBvciB3aHkgbm90IHRoZSByZWN1cnNpdmUKKyAgdmVyc2lvbjogIkN1cmwgVVJMIFJlcXVlc3QgTGlicmFyeSIuCisKKyAgVGhlIGNVUkwgcHJvamVjdCBwcm9kdWNlcyB0d28gcHJvZHVjdHM6CisKKyAgbGliY3VybAorCisgICAgQSBmcmVlIGFuZCBlYXN5LXRvLXVzZSBjbGllbnQtc2lkZSBVUkwgdHJhbnNmZXIgbGlicmFyeSwgc3VwcG9ydGluZyBESUNULAorICAgIEZJTEUsIEZUUCwgRlRQUywgR09QSEVSLCBIVFRQLCBIVFRQUywgSU1BUCwgSU1BUFMsIExEQVAsIExEQVBTLCBQT1AzLAorICAgIFBPUDNTLCBSVE1QLCBSVFNQLCBTQ1AsIFNGVFAsIFNNVFAsIFNNVFBTLCBURUxORVQgYW5kIFRGVFAuCisKKyAgICBsaWJjdXJsIHN1cHBvcnRzIEhUVFBTIGNlcnRpZmljYXRlcywgSFRUUCBQT1NULCBIVFRQIFBVVCwgRlRQIHVwbG9hZGluZywKKyAgICBrZXJiZXJvcywgSFRUUCBmb3JtIGJhc2VkIHVwbG9hZCwgcHJveGllcywgY29va2llcywgdXNlcitwYXNzd29yZAorICAgIGF1dGhlbnRpY2F0aW9uLCBmaWxlIHRyYW5zZmVyIHJlc3VtZSwgaHR0cCBwcm94eSB0dW5uZWxpbmcgYW5kIG1vcmUhCisKKyAgICBsaWJjdXJsIGlzIGhpZ2hseSBwb3J0YWJsZSwgaXQgYnVpbGRzIGFuZCB3b3JrcyBpZGVudGljYWxseSBvbiBudW1lcm91cworICAgIHBsYXRmb3JtcywgaW5jbHVkaW5nIFNvbGFyaXMsIE5ldEJTRCwgRnJlZUJTRCwgT3BlbkJTRCwgRGFyd2luLCBIUFVYLAorICAgIElSSVgsIEFJWCwgVHJ1NjQsIExpbnV4LCBVbml4V2FyZSwgSFVSRCwgV2luZG93cywgQW1pZ2EsIE9TLzIsIEJlT3MsIE1hYworICAgIE9TIFgsIFVsdHJpeCwgUU5YLCBPcGVuVk1TLCBSSVNDIE9TLCBOb3ZlbGwgTmV0V2FyZSwgRE9TLCBTeW1iaWFuLCBPU0YsCisgICAgQW5kcm9pZCwgTWluaXgsIElCTSBUUEYgYW5kIG1vcmUuLi4KKworICAgIGxpYmN1cmwgaXMgZnJlZSwgdGhyZWFkLXNhZmUsIElQdjYgY29tcGF0aWJsZSwgZmVhdHVyZSByaWNoLCB3ZWxsCisgICAgc3VwcG9ydGVkIGFuZCBmYXN0LgorCisgIGN1cmwKKworICAgIEEgY29tbWFuZCBsaW5lIHRvb2wgZm9yIGdldHRpbmcgb3Igc2VuZGluZyBmaWxlcyB1c2luZyBVUkwgc3ludGF4LgorCisgICAgU2luY2UgY3VybCB1c2VzIGxpYmN1cmwsIGN1cmwgc3VwcG9ydHMgdGhlIHNhbWUgd2lkZSByYW5nZSBvZiBjb21tb24KKyAgICBJbnRlcm5ldCBwcm90b2NvbHMgdGhhdCBsaWJjdXJsIGRvZXMuCisKKyAgV2UgcHJvbm91bmNlIGN1cmwgYW5kIGNVUkwgd2l0aCBhbiBpbml0aWFsIGsgc291bmQ6IFtrdXJsXS4KKworICBUaGVyZSBhcmUgbnVtZXJvdXMgc3ViLXByb2plY3RzIGFuZCByZWxhdGVkIHByb2plY3RzIHRoYXQgYWxzbyB1c2UgdGhlIHdvcmQKKyAgY3VybCBpbiB0aGUgcHJvamVjdCBuYW1lcyBpbiB2YXJpb3VzIGNvbWJpbmF0aW9ucywgYnV0IHlvdSBzaG91bGQgdGFrZQorICBub3RpY2UgdGhhdCB0aGlzIEZBUSBpcyBkaXJlY3RlZCBhdCB0aGUgY29tbWFuZC1saW5lIHRvb2wgbmFtZWQgY3VybCAoYW5kCisgIGxpYmN1cmwgdGhlIGxpYnJhcnkpLCBhbmQgbWF5IHRoZXJlZm9yZSBub3QgYmUgdmFsaWQgZm9yIG90aGVyIGN1cmwtcmVsYXRlZAorICBwcm9qZWN0cy4gKFRoZXJlIGlzIGhvd2V2ZXIgYSBzbWFsbCBzZWN0aW9uIGZvciB0aGUgUEhQL0NVUkwgaW4gdGhpcyBGQVEuKQorCisgIDEuMiBXaGF0IGlzIGxpYmN1cmw/CisKKyAgbGliY3VybCBpcyBhIHJlbGlhYmxlIGFuZCBwb3J0YWJsZSBsaWJyYXJ5IHdoaWNoIHByb3ZpZGVzIHlvdSB3aXRoIGFuIGVhc3kKKyAgaW50ZXJmYWNlIHRvIGEgcmFuZ2Ugb2YgY29tbW9uIEludGVybmV0IHByb3RvY29scy4KKworICBZb3UgY2FuIHVzZSBsaWJjdXJsIGZvciBmcmVlIGluIHlvdXIgYXBwbGljYXRpb24sIGJlIGl0IG9wZW4gc291cmNlLAorICBjb21tZXJjaWFsIG9yIGNsb3NlZC1zb3VyY2UuCisKKyAgbGliY3VybCBpcyBtb3N0IHByb2JhYmx5IHRoZSBtb3N0IHBvcnRhYmxlLCBtb3N0IHBvd2VyZnVsIGFuZCBtb3N0IG9mdGVuCisgIHVzZWQgQy1iYXNlZCBtdWx0aS1wbGF0Zm9ybSBmaWxlIHRyYW5zZmVyIGxpYnJhcnkgb24gdGhpcyBwbGFuZXQgLSBiZSBpdAorICBvcGVuIHNvdXJjZSBvciBjb21tZXJjaWFsLgorCisgIDEuMyBXaGF0IGlzIGN1cmwgbm90PworCisgIEN1cmwgaXMgbm90IGEgd2dldCBjbG9uZS4gVGhhdCBpcyBhIGNvbW1vbiBtaXNjb25jZXB0aW9uLiAgTmV2ZXIsIGR1cmluZworICBjdXJsJ3MgZGV2ZWxvcG1lbnQsIGhhdmUgd2UgaW50ZW5kZWQgY3VybCB0byByZXBsYWNlIHdnZXQgb3IgY29tcGV0ZSBvbiBpdHMKKyAgbWFya2V0LiBDdXJsIGlzIHRhcmdldGVkIGF0IHNpbmdsZS1zaG90IGZpbGUgdHJhbnNmZXJzLgorCisgIEN1cmwgaXMgbm90IGEgd2ViIHNpdGUgbWlycm9yaW5nIHByb2dyYW0uIElmIHlvdSB3YW50IHRvIHVzZSBjdXJsIHRvIG1pcnJvcgorICBzb21ldGhpbmc6IGZpbmUsIGdvIGFoZWFkIGFuZCB3cml0ZSBhIHNjcmlwdCB0aGF0IHdyYXBzIGFyb3VuZCBjdXJsIHRvIG1ha2UKKyAgaXQgcmVhbGl0eSAobGlrZSBjdXJsbWlycm9yLnBsIGRvZXMpLgorCisgIEN1cmwgaXMgbm90IGFuIEZUUCBzaXRlIG1pcnJvcmluZyBwcm9ncmFtLiBTdXJlLCBnZXQgYW5kIHNlbmQgRlRQIHdpdGggY3VybAorICBidXQgaWYgeW91IHdhbnQgc3lzdGVtYXRpYyBhbmQgc2VxdWVudGlhbCBiZWhhdmlvciB5b3Ugc2hvdWxkIHdyaXRlIGEKKyAgc2NyaXB0IChvciB3cml0ZSBhIG5ldyBwcm9ncmFtIHRoYXQgaW50ZXJmYWNlcyBsaWJjdXJsKSBhbmQgZG8gaXQuCisKKyAgQ3VybCBpcyBub3QgYSBQSFAgdG9vbCwgZXZlbiB0aG91Z2ggaXQgd29ya3MgcGVyZmVjdGx5IHdlbGwgd2hlbiB1c2VkIGZyb20KKyAgb3Igd2l0aCBQSFAgKHdoZW4gdXNpbmcgdGhlIFBIUC9DVVJMIG1vZHVsZSkuCisKKyAgQ3VybCBpcyBub3QgYSBwcm9ncmFtIGZvciBhIHNpbmdsZSBvcGVyYXRpbmcgc3lzdGVtLiBDdXJsIGV4aXN0cywgY29tcGlsZXMsCisgIGJ1aWxkcyBhbmQgcnVucyB1bmRlciBhIHdpZGUgcmFuZ2Ugb2Ygb3BlcmF0aW5nIHN5c3RlbXMsIGluY2x1ZGluZyBhbGwKKyAgbW9kZXJuIFVuaXhlcyAoYW5kIGEgYnVuY2ggb2Ygb2xkZXIgb25lcyB0b28pLCBXaW5kb3dzLCBBbWlnYSwgQmVPUywgT1MvMiwKKyAgT1MgWCwgUU5YIGV0Yy4KKworICAxLjQgV2hlbiB3aWxsIHlvdSBtYWtlIGN1cmwgZG8gWFhYWCA/CisKKyAgV2UgbG92ZSBzdWdnZXN0aW9ucyBvZiB3aGF0IHRvIGNoYW5nZSBpbiBvcmRlciB0byBtYWtlIGN1cmwgYW5kIGxpYmN1cmwKKyAgYmV0dGVyLiBXZSBkbyBob3dldmVyIGJlbGlldmUgaW4gYSBmZXcgcnVsZXMgd2hlbiBpdCBjb21lcyB0byB0aGUgZnV0dXJlIG9mCisgIGN1cmw6CisKKyAgKiBDdXJsIC0tIHRoZSBjb21tYW5kIGxpbmUgdG9vbCAtLSBpcyB0byByZW1haW4gYSBub24tZ3JhcGhpY2FsIGNvbW1hbmQgbGluZQorICAgIHRvb2wuIElmIHlvdSB3YW50IEdVSXMgb3IgZmFuY3kgc2NyaXB0aW5nIGNhcGFiaWxpdGllcywgeW91IHNob3VsZCBsb29rCisgICAgZm9yIGFub3RoZXIgdG9vbCB0aGF0IHVzZXMgbGliY3VybC4KKworICAqIFdlIGRvIG5vdCBhZGQgdGhpbmdzIHRvIGN1cmwgdGhhdCBvdGhlciBzbWFsbCBhbmQgYXZhaWxhYmxlIHRvb2xzIGFscmVhZHkKKyAgICBkbyB2ZXJ5IGZpbmUgYXQgdGhlIHNpZGUuIEN1cmwncyBvdXRwdXQgaXMgZmluZSB0byBwaXBlIGludG8gYW5vdGhlcgorICAgIHByb2dyYW0gb3IgcmVkaXJlY3QgdG8gYW5vdGhlciBmaWxlIGZvciB0aGUgbmV4dCBwcm9ncmFtIHRvIGludGVycHJldC4KKworICAqIFdlIGZvY3VzIG9uIHByb3RvY29sIHJlbGF0ZWQgaXNzdWVzIGFuZCBpbXByb3ZlbWVudHMuIElmIHlvdSB3YW5uYSBkbyBtb3JlCisgICAgbWFnaWMgd2l0aCB0aGUgc3VwcG9ydGVkIHByb3RvY29scyB0aGFuIGN1cmwgY3VycmVudGx5IGRvZXMsIGNoYW5jZXMgYXJlCisgICAgYmlnIHdlIHdpbGwgYWdyZWUuIElmIHlvdSB3YW5uYSBhZGQgbW9yZSBwcm90b2NvbHMsIHdlIG1heSB2ZXJ5IHdlbGwKKyAgICBhZ3JlZS4KKworICAqIElmIHlvdSB3YW50IHNvbWVvbmUgZWxzZSB0byBtYWtlIGFsbCB0aGUgd29yayB3aGlsZSB5b3Ugd2FpdCBmb3IgdXMgdG8KKyAgICBpbXBsZW1lbnQgaXQgZm9yIHlvdSwgdGhhdCBpcyBub3QgYSB2ZXJ5IGZyaWVuZGx5IGF0dGl0dWRlLiBXZSBzcGVuZCBhCisgICAgY29uc2lkZXJhYmxlIHRpbWUgYWxyZWFkeSBvbiBtYWludGFpbmluZyBhbmQgZGV2ZWxvcGluZyBjdXJsLiBJbiBvcmRlciB0bworICAgIGdldCBtb3JlIG91dCBvZiB1cywgeW91IHNob3VsZCBjb25zaWRlciB0cmFkaW5nIGluIHNvbWUgb2YgeW91ciB0aW1lIGFuZAorICAgIGVmZm9ydHMgaW4gcmV0dXJuLgorCisgICogSWYgeW91IHdyaXRlIHRoZSBjb2RlLCBjaGFuY2VzIGFyZSBiaWdnZXIgdGhhdCBpdCB3aWxsIGdldCBpbnRvIGN1cmwKKyAgICBmYXN0ZXIuCisKKyAgMS41IFdobyBtYWtlcyBjdXJsPworCisgIGN1cmwgYW5kIGxpYmN1cmwgYXJlIG5vdCBtYWRlIGJ5IGFueSBzaW5nbGUgaW5kaXZpZHVhbC4gRGFuaWVsIFN0ZW5iZXJnIGlzCisgIHByb2plY3QgbGVhZGVyIGFuZCBtYWluIGRldmVsb3BlciwgYnV0IG90aGVyIHBlcnNvbnMnIHN1Ym1pc3Npb25zIGFyZQorICBpbXBvcnRhbnQgYW5kIGNydWNpYWwuIEFueW9uZSBjYW4gY29udHJpYnV0ZSBhbmQgcG9zdCB0aGVpciBjaGFuZ2VzIGFuZAorICBpbXByb3ZlbWVudHMgYW5kIGhhdmUgdGhlbSBpbnNlcnRlZCBpbiB0aGUgbWFpbiBzb3VyY2VzIChvZiBjb3Vyc2Ugb24gdGhlCisgIGNvbmRpdGlvbiB0aGF0IGRldmVsb3BlcnMgYWdyZWUgb24gdGhhdCB0aGUgZml4ZXMgYXJlIGdvb2QpLgorCisgIFRoZSBmdWxsIGxpc3Qgb2YgYWxsIGNvbnRyaWJ1dG9ycyBpcyBmb3VuZCBpbiB0aGUgZG9jcy9USEFOS1MgZmlsZS4KKworICBjdXJsIGlzIGRldmVsb3BlZCBieSBhIGNvbW11bml0eSwgd2l0aCBEYW5pZWwgYXQgdGhlIHdoZWVsLgorCisgIDEuNiBXaGF0IGRvIHlvdSBnZXQgZm9yIG1ha2luZyBjdXJsPworCisgIFByb2plY3QgY1VSTCBpcyBlbnRpcmVseSBmcmVlIGFuZCBvcGVuLiBObyBwZXJzb24gZ2V0cyBwYWlkIGZvciBkZXZlbG9waW5nCisgIChsaWIpY3VybCBvbiBmdWxsIG9yIGV2ZW4gcGFydCB0aW1lLiBXZSBkbyB0aGlzIHZvbHVudGFyaWx5IG9uIG91ciBzcGFyZQorICB0aW1lLiBPY2Nhc2lvbmFsbHkgY29tcGFuaWVzIHBheSBpbmRpdmlkdWFsIGRldmVsb3BlcnMgdG8gd29yayBvbiBjdXJsLCBidXQKKyAgdGhhdCdzIHVwIHRvIGVhY2ggY29tcGFueSBhbmQgZGV2ZWxvcGVyLiBJdCBpcyBub3QgY29udHJvbGxlZCBieSBub3IKKyAgc3VwZXJ2aXNlZCBpbiBhbnkgd2F5IGJ5IHRoZSBwcm9qZWN0LgorCisgIFdlIHN0aWxsIGdldCBoZWxwIGZyb20gY29tcGFuaWVzLiBIYXh4IHByb3ZpZGVzIHdlYiBzaXRlLCBiYW5kd2lkdGgsIG1haWxpbmcKKyAgbGlzdHMgZXRjIGFuZCBzb3VyY2Vmb3JnZS5uZXQgaG9zdHMgcHJvamVjdCBzZXJ2aWNlcyB3ZSB0YWtlIGFkdmFudGFnZSBmcm9tLAorICBsaWtlIHRoZSBidWcgdHJhY2tlci4gQWxzbyBhZ2Fpbiwgc29tZSBjb21wYW5pZXMgaGF2ZSBzcG9uc29yZWQgY2VydGFpbgorICBwYXJ0cyBvZiB0aGUgZGV2ZWxvcG1lbnQgaW4gdGhlIHBhc3QgYW5kIEkgaG9wZSBzb21lIHdpbGwgY29udGludWUgdG8gZG8gc28KKyAgaW4gdGhlIGZ1dHVyZS4KKworICBJZiB5b3Ugd2FudCB0byBzdXBwb3J0IG91ciBwcm9qZWN0LCBjb25zaWRlciBhIGRvbmF0aW9uIG9yIGEgYmFubmVyLXByb2dyYW0KKyAgb3IgZXZlbiBiZXR0ZXI6IGJ5IGhlbHBpbmcgdXMgY29kaW5nLCBkb2N1bWVudGluZywgdGVzdGluZyBldGMuCisKKyAgMS43IFdoYXQgYWJvdXQgQ1VSTCBmcm9tIGN1cmwuY29tPworCisgIER1cmluZyB0aGUgc3VtbWVyIDIwMDEsIGN1cmwuY29tIHdhcyBidXN5IGFkdmVydGlzaW5nIHRoZWlyIGNsaWVudC1zaWRlCisgIHByb2dyYW1taW5nIGxhbmd1YWdlIGZvciB0aGUgd2ViLCBuYW1lZCBDVVJMLgorCisgIFdlIGFyZSBpbiBubyB3YXkgYXNzb2NpYXRlZCB3aXRoIGN1cmwuY29tIG9yIHRoZWlyIENVUkwgcHJvZ3JhbW1pbmcKKyAgbGFuZ3VhZ2UuCisKKyAgT3VyIHByb2plY3QgbmFtZSBjdXJsIGhhcyBiZWVuIGluIGVmZmVjdGl2ZSB1c2Ugc2luY2UgMTk5OC4gV2Ugd2VyZSBub3QgdGhlCisgIGZpcnN0IGNvbXB1dGVyIHJlbGF0ZWQgcHJvamVjdCB0byB1c2UgdGhlIG5hbWUgImN1cmwiIGFuZCBkbyBub3QgY2xhaW0gYW55CisgIGZpcnN0LWhhbmQgcmlnaHRzIHRvIHRoZSBuYW1lLgorCisgIFdlIHJlY29nbml6ZSB0aGF0IHdlIHdpbGwgYmUgbGl2aW5nIGluIHBhcmFsbGVsIHdpdGggY3VybC5jb20gYW5kIHdpc2ggdGhlbQorICBldmVyeSBzdWNjZXNzLgorCisgIDEuOCBJIGhhdmUgYSBwcm9ibGVtIHdobyBkbyBJIG1haWw/CisKKyAgUGxlYXNlIGRvIG5vdCBtYWlsIGFueSBzaW5nbGUgaW5kaXZpZHVhbCB1bmxlc3MgeW91IHJlYWxseSBuZWVkIHRvLiBLZWVwCisgIGN1cmwtcmVsYXRlZCBxdWVzdGlvbnMgb24gYSBzdWl0YWJsZSBtYWlsaW5nIGxpc3QuIEFsbCBhdmFpbGFibGUgbWFpbGluZworICBsaXN0cyBhcmUgbGlzdGVkIGluIHRoZSBNQU5VQUwgZG9jdW1lbnQgYW5kIG9ubGluZSBhdAorICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvCisKKyAgS2VlcGluZyBjdXJsLXJlbGF0ZWQgcXVlc3Rpb25zIGFuZCBkaXNjdXNzaW9ucyBvbiBtYWlsaW5nIGxpc3RzIGFsbG93cworICBvdGhlcnMgdG8gam9pbiBpbiBhbmQgaGVscCwgdG8gc2hhcmUgdGhlaXIgaWRlYXMsIGNvbnRyaWJ1dGUgdGhlaXIKKyAgc3VnZ2VzdGlvbnMgYW5kIHNwcmVhZCB0aGVpciB3aXNkb20uIEtlZXBpbmcgZGlzY3Vzc2lvbnMgb24gcHVibGljIG1haWxpbmcKKyAgbGlzdHMgYWxzbyBhbGxvd3MgZm9yIG90aGVycyB0byBsZWFybiBmcm9tIHRoaXMgKGJvdGggY3VycmVudCBhbmQgZnV0dXJlCisgIHVzZXJzIHRoYW5rcyB0byB0aGUgd2ViIGJhc2VkIGFyY2hpdmVzIG9mIHRoZSBtYWlsaW5nIGxpc3RzKSwgdGh1cyBzYXZpbmcgdXMKKyAgZnJvbSBoYXZpbmcgdG8gcmVwZWF0IG91cnNlbHZlcyBldmVuIG1vcmUuIFRoYW5rcyBmb3IgcmVzcGVjdGluZyB0aGlzLgorCisgIElmIHlvdSBoYXZlIGZvdW5kIG9yIHNpbXBseSBzdXNwZWN0IGEgc2VjdXJpdHkgcHJvYmxlbSBpbiBjdXJsIG9yIGxpYmN1cmwsCisgIG1haWwgY3VybC1zZWN1cml0eSBhdCBoYXh4LnNlIChjbG9zZWQgbGlzdCBvZiByZWNlaXZlcnMsIG1haWxzIGFyZSBub3QKKyAgZGlzY2xvc2VkKSBhbmQgdGVsbC4gVGhlbiB3ZSBjYW4gcHJvZHVjZSBhIGZpeCBpbiBhIHRpbWVseSBtYW5uZXIgYmVmb3JlIHRoZQorICBmbGF3IGlzIGFubm91bmNlZCB0byB0aGUgd29ybGQsIHRodXMgbGVzc2VuIHRoZSBpbXBhY3QgdGhlIHByb2JsZW0gd2lsbCBoYXZlCisgIG9uIGV4aXN0aW5nIHVzZXJzLgorCisgIDEuOSBXaGVyZSBkbyBJIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQgZm9yIGN1cmw/CisKKyAgY3VybCBpcyBmdWxseSBvcGVuIHNvdXJjZS4gSXQgbWVhbnMgeW91IGNhbiBoaXJlIGFueSBza2lsbGVkIGVuZ2luZWVyIHRvIGZpeAorICB5b3VyIGN1cmwtcmVsYXRlZCBwcm9ibGVtcy4KKworICBXZSBsaXN0IGF2YWlsYWJsZSBhbHRlcm5hdGl2ZXMgb24gdGhlIGN1cmwgd2ViIHNpdGU6CisgIGh0dHA6Ly9jdXJsLmhheHguc2Uvc3VwcG9ydC5odG1sCisKKyAgMS4xMCBIb3cgbWFueSBhcmUgdXNpbmcgY3VybD8KKworICBJdCBpcyBpbXBvc3NpYmxlIHRvIHRlbGwuCisKKyAgV2UgZG9uJ3Qga25vdyBob3cgbWFueSB1c2VycyB0aGF0IGtub3dpbmdseSBoYXZlIGluc3RhbGxlZCBhbmQgdXNlIGN1cmwuCisKKyAgV2UgZG9uJ3Qga25vdyBob3cgbWFueSB1c2VycyB0aGF0IHVzZSBjdXJsIHdpdGhvdXQga25vd2luZyB0aGF0IHRoZXkgYXJlIGluCisgIGZhY3QgdXNpbmcgaXQuCisKKyAgV2UgZG9uJ3Qga25vdyBob3cgbWFueSB1c2VycyB0aGF0IGRvd25sb2FkZWQgb3IgaW5zdGFsbGVkIGN1cmwgYW5kIHRoZW4KKyAgbmV2ZXIgdXNlIGl0LgorCisgIFNvbWUgZmFjdHMgdG8gdXNlIGFzIGlucHV0IHRvIHRoZSBtYXRoOgorCisgIGN1cmwgcGFja2FnZXMgYXJlIGRvd25sb2FkZWQgZnJvbSB0aGUgY3VybC5oYXh4LnNlIGFuZCBtaXJyb3JzIG92ZXIgYQorICBtaWxsaW9uIHRpbWVzIHBlciB5ZWFyLiBjdXJsIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0IHdpdGggbW9zdCBMaW51eAorICBkaXN0cmlidXRpb25zLiBjdXJsIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0IHdpdGggTWFjIE9TIFguIGN1cmwgYW5kIGxpYmN1cmwKKyAgYXMgdXNlZCBieSBudW1lcm91cyBhcHBsaWNhdGlvbnMgdGhhdCBpbmNsdWRlIGxpYmN1cmwgYmluYXJpZXMgaW4gdGhlaXIKKyAgZGlzdHJpYnV0aW9uIHBhY2thZ2VzIChsaWtlIEFkb2JlIEFjcm9iYXQgUmVhZGVyIGFuZCBHb29nbGUgRWFydGgpLgorCisgIE1vcmUgdGhhbiBhIGh1bmRyZWQga25vd24gbmFtZWQgY29tcGFuaWVzIHVzZSBjdXJsIGluIGNvbW1lcmNpYWwKKyAgZW52aXJvbm1lbnRzIGFuZCBwcm9kdWN0cyBhbmQgbW9yZSB0aGFuIGEgaHVuZHJlZCBrbm93biBuYW1lZCBvcGVuIHNvdXJjZQorICBwcm9qZWN0cyBkZXBlbmQgb24gKGxpYiljdXJsLgorCisgIEluIGEgcG9sbCBvbiB0aGUgY3VybCB3ZWIgc2l0ZSBtaWQtMjAwNSwgbW9yZSB0aGFuIDUwJSBvZiB0aGUgMzAwKyBhbnN3ZXJzCisgIGVzdGltYXRlZCBhIHVzZXIgYmFzZSBvZiBvbmUgbWlsbGlvbiB1c2VycyBvciBtb3JlLgorCisgIEluIE1hcmNoIDIwMDUsIHRoZSAiTGludXggQ291bnRlciBwcm9qZWN0IiBlc3RpbWF0ZWQgYSB0b3RhbCBMaW51eCB1c2VyIGJhc2UKKyAgb2Ygc29tZSAyOSBtaWxsaW9ucywgd2hpbGUgTmV0Y3JhZnQgZGV0ZWN0ZWQgc29tZSA0IG1pbGxpb24gImFjdGl2ZSIgTGludXgKKyAgYmFzZWQgd2ViIHNlcnZlcnMuIEEgZ3Vlc3MgaXMgdGhhdCBhIGZhaXIgYW1vdW50IG9mIHRoZXNlIExpbnV4CisgIGluc3RhbGxhdGlvbnMgaGF2ZSBjdXJsIGluc3RhbGxlZC4KKworICBUaGUgRGViaWFuIHByb2plY3QgbWFpbnRhaW5zIHN0YXRpc3RpY3Mgb24gcGFja2FnZXMgaW5zdGFsbGVkIGJ5IHBlb3BsZQorICB3aG8gaGF2ZSB2b2x1bnRhcmlseSBydW4gdGhlaXIgcGFja2FnZSBjb3VudGluZyBhcHBsaWNhdGlvbi4gIEluIG1pZC0yMDEwLAorICBsaWJjdXJsMyB3YXMgaW5zdGFsbGVkIG9uIG92ZXIgNTUwMDAgc3VjaCBzeXN0ZW1zICg2MiUgb2YgcmVwb3J0aW5nIHN5c3RlbXMpCisgIGFuZCB3YXMgb25lIG9mIHRoZSAzMjAgbW9zdCBwb3B1bGFyIGluc3RhbGxlZCBwYWNrYWdlcyAob3V0IG9mIGFib3V0IDEwNzAwMAorICBwb3NzaWJsZSBwYWNrYWdlcykuCisKKyAgQWxsIHRoaXMgdGFrZW4gdG9nZXRoZXIsIHRoZXJlIGlzIG5vIGRvdWJ0IHRoYXQgdGhlcmUgYXJlIG1pbGxpb25zIG9mCisgIChsaWIpY3VybCB1c2Vycy4KKworICBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29tcGFuaWVzLmh0bWwKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL3Byb2dyYW1zLmh0bWwKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9saWJjdXJsL3VzaW5nL2FwcHMuaHRtbAorICBodHRwOi8vY291bnRlci5saS5vcmcvZXN0aW1hdGVzLnBocAorICBodHRwOi8vbmV3cy5uZXRjcmFmdC5jb20vYXJjaGl2ZXMvMjAwNS8wMy8xNC9mZWRvcmFfbWFrZXNfcmFwaWRfcHJvZ3Jlc3MuaHRtbAorICBodHRwOi8vcWEuZGViaWFuLm9yZy9wb3Bjb24ucGhwP3BhY2thZ2U9Y3VybAorCisgIDEuMTEgV2h5IGRvbid0IHlvdSB1cGRhdGUgY2EtYnVuZGxlLmNydAorCisgIFRoZSBjYS1idW5kbGUuY3J0IGZpbGUgdGhhdCB1c2VkIHRvIGJlIGJ1bmRsZWQgd2l0aCBjdXJsIHdhcyB2ZXJ5IG91dGRhdGVkCisgIChpdCBiZWluZyBsYXN0IG1vZGlmaWVkIHllYXIgMjAwMCBzaG91bGQgdGVsbCkgYW5kIG11c3QgYmUgcmVwbGFjZWQgd2l0aCBhCisgIG11Y2ggbW9yZSBtb2Rlcm4gYW5kIHVwLXRvLWRhdGUgdmVyc2lvbiBieSBhbnlvbmUgd2hvIHdhbnRzIHRvIHZlcmlmeSBwZWVycworICBhbnl3YXkuIEl0IGlzIG5vIGxvbmdlciBwcm92aWRlZCwgdGhlIGxhc3QgY3VybCByZWxlYXNlIHRoYXQgc2hpcHBlZCBpdCB3YXMKKyAgY3VybCA3LjE4LjAuCisKKyAgSW4gdGhlIGNVUkwgcHJvamVjdCB3ZSd2ZSBkZWNpZGVkIG5vdCB0byBhdHRlbXB0IHRvIGtlZXAgdGhpcyBmaWxlIHVwZGF0ZWQKKyAgKG9yIGV2ZW4gcHJlc2VudCBhbnltb3JlKSBzaW5jZSBkZWNpZGluZyB3aGF0IHRvIGFkZCB0byBhIGNhIGNlcnQgYnVuZGxlIGlzCisgIGFuIHVuZGVydGFraW5nIHdlJ3ZlIG5vdCBiZWVuIHJlYWR5IHRvIGFjY2VwdCwgYW5kIHRoZSBvbmUgd2UgY2FuIGdldCBmcm9tCisgIE1vemlsbGEgaXMgcGVyZmVjdGx5IGZpbmUgc28gdGhlcmUncyBubyBuZWVkIHRvIGR1cGxpY2F0ZSB0aGF0IHdvcmsuCisKKyAgVG9kYXksIHdpdGggbWFueSBzZXJ2aWNlcyBwZXJmb3JtZWQgb3ZlciBIVFRQUywgZXZlcnkgb3BlcmF0aW5nIHN5c3RlbQorICBzaG91bGQgY29tZSB3aXRoIGEgZGVmYXVsdCBjYSBjZXJ0IGJ1bmRsZSB0aGF0IGNhbiBiZSBkZWVtZWQgc29tZXdoYXQKKyAgdHJ1c3R3b3J0aHkgYW5kIHRoYXQgY29sbGVjdGlvbiAoaWYgcmVhc29uYWJseSB1cGRhdGVkKSBzaG91bGQgYmUgZGVlbWVkIHRvCisgIGJlIGEgbG90IGJldHRlciB0aGFuIGEgcHJpdmF0ZSBjdXJsIHZlcnNpb24uCisKKyAgSWYgeW91IHdhbnQgdGhlIG1vc3QgcmVjZW50IGNvbGxlY3Rpb24gb2YgY2EgY2VydHMgdGhhdCBNb3ppbGxhIEZpcmVmb3gKKyAgdXNlcywgd2UgcmVjb21tZW5kIHRoYXQgeW91IGV4dHJhY3QgdGhlIGNvbGxlY3Rpb24geW91cnNlbGYgZnJvbSBNb3ppbGxhCisgIEZpcmVmb3ggKGJ5IHJ1bm5pbmcgJ21ha2UgY2EtYnVuZGxlKSwgb3IgYnkgdXNpbmcgb3VyIG9ubGluZSBzZXJ2aWNlIHNldHVwCisgIGZvciB0aGlzIHB1cnBvc2U6IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jYWV4dHJhY3QuaHRtbAorCisgIDEuMTIgSSBoYXZlIGEgcHJvYmxlbSB3aG8gY2FuIEkgY2hhdCB3aXRoPworCisgIFRoZXJlJ3MgYSBidW5jaCBvZiBmcmllbmRseSBwZW9wbGUgaGFuZ2luZyBvdXQgaW4gdGhlICNjdXJsIGNoYW5uZWwgb24gdGhlCisgIElSQyBuZXR3b3JrIGlyYy5mcmVlbm9kZS5uZXQuIElmIHlvdSdyZSBwb2xpdGUgYW5kIG5pY2UsIGNoYW5jZXMgYXJlIGJpZworICB0aGF0IHlvdSBjYW4gZ2V0IC0tIG9yIHByb3ZpZGUgLS0gaGVscCBpbnN0YW50bHkuCisKKyAgMS4xMyBjdXJsJ3MgRUNDTiBudW1iZXI/CisKKyAgVGhlIFVTIGdvdmVybm1lbnQgcmVzdHJpY3RzIGV4cG9ydHMgb2Ygc29mdHdhcmUgdGhhdCBjb250YWlucyBvciB1c2VzCisgIGNyeXB0b2dyYXBoeS4gV2hlbiBkb2luZyBzbywgdGhlIEV4cG9ydCBDb250cm9sIENsYXNzaWZpY2F0aW9uIE51bWJlciAoRUNDTikKKyAgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgbGV2ZWwgb2YgZXhwb3J0IGNvbnRyb2wgZXRjLgorCisgIEFTRiBnaXZlcyBhIGdvb2QgZXhwbGFuYXRpb24gYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2Rldi9jcnlwdG8uaHRtbAorCisgIFdlIGJlbGlldmUgY3VybCdzIG51bWJlciBtaWdodCBiZSBFQ0NOIDVEMDAyLCBhbm90aGVyIHBvc3NpYmlsaXR5IGlzCisgIDVEOTkyLiBJdCBzZWVtcyBuZWNlc3NhcnkgdG8gd3JpdGUgdGhlbSwgYXNraW5nIHRvIGNvbmZpcm0uCisKKyAgQ29tcHJlaGVuc2libGUgZXhwbGFuYXRpb25zIG9mIHRoZSBtZWFuaW5nIG9mIHN1Y2ggbnVtYmVycyBhbmQgaG93IHRvCisgIG9idGFpbiB0aGVtIChyZXNwLikgYXJlIGhlcmUKKworICBodHRwOi8vd3d3LmJpcy5kb2MuZ292L2xpY2Vuc2luZy9leHBvcnRpbmdiYXNpY3MuaHRtCisgIGh0dHA6Ly93d3cuYmlzLmRvYy5nb3YvbGljZW5zaW5nL2RvX2lfbmVlZGFuZWNjbi5odG1sCisKKyAgQW4gaW5jb21wcmVoZW5zaWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgdHdvIG51bWJlcnMgYWJvdmUgaXMgaGVyZQorICBodHRwOi8vd3d3LmFjY2Vzcy5ncG8uZ292L2Jpcy9lYXIvcGRmL2NjbDUtcHQyLnBkZgorCisgIDEuMTQgSG93IGRvIEkgc3VibWl0IG15IHBhdGNoPworCisgIFdoZW4geW91IGhhdmUgbWFkZSBhIHBhdGNoIG9yIGEgY2hhbmdlIG9mIHdoYXRldmVyIHNvcnQsIGFuZCB3YW50IHRvIHN1Ym1pdAorICB0aGF0IHRvIHRoZSBwcm9qZWN0LCB0aGVyZSBhcmUgYSBmZXcgZGlmZmVyZW50IHdheXMgd2UgcHJlZmVyOgorCisgIG8gc2VuZCBhIHBhdGNoIHRvIHRoZSBjdXJsLWxpYnJhcnkgbWFpbGluZyBsaXN0LiBXZSdyZSBtYW55IHN1YnNjcmliZXJzCisgICAgdGhlcmUgYW5kIHRoZXJlIGFyZSBsb3RzIG9mIHBlb3BsZSB3aG8gY2FuIHJldmlldyBwYXRjaGVzLCBjb21tZW50IG9uIHRoZW0KKyAgICBhbmQgInJlY2VpdmUiIHRoZW0gcHJvcGVybHkuCisKKyAgbyBpZiB5b3VyIHBhdGNoIGNoYW5nZXMgb3IgZml4ZXMgYSBidWcsIHlvdSBjYW4gYWxzbyBvcHQgdG8gc3VibWl0IGEgYnVnCisgICAgcmVwb3J0IGluIHRoZSBidWcgdHJhY2tlciBhbmQgYXR0YWNoIHlvdXIgcGF0Y2ggdGhlcmUuIFRoZXJlIGFyZSBsZXNzCisgICAgcGVvcGxlIGludm9sdmVkIHRoZXJlLgorCisgIExvdHMgb2YgbW9yZSBkZXRhaWxzIGFyZSBmb3VuZCBpbiB0aGUgQ09OVFJJQlVURSBhbmQgSU5URVJOQUxTIGRvY3MuCisKKworMi4gSW5zdGFsbCBSZWxhdGVkIFByb2JsZW1zCisKKyAgMi4xIGNvbmZpZ3VyZSBkb2Vzbid0IGZpbmQgT3BlblNTTCBldmVuIHdoZW4gaXQgaXMgaW5zdGFsbGVkCisKKyAgVGhpcyBtYXkgYmUgYmVjYXVzZSBvZiBzZXZlcmFsIHJlYXNvbnMuCisKKyAgICAyLjEuMSBuYXRpdmUgbGlua2VyIGRvZXNuJ3QgZmluZCBvcGVuc3NsCisKKyAgICBBZmZlY3RlZCBwbGF0Zm9ybXM6CisgICAgICBTb2xhcmlzIChuYXRpdmUgY2MgY29tcGlsZXIpCisgICAgICBIUFVYIChuYXRpdmUgY2MgY29tcGlsZXIpCisgICAgICBTR0kgSVJJWCAobmF0aXZlIGNjIGNvbXBpbGVyKQorICAgICAgU0NPIFVOSVggKG5hdGl2ZSBjYyBjb21waWxlcikKKworICAgIFdoZW4gY29uZmlndXJpbmcgY3VybCwgSSBzcGVjaWZ5IC0td2l0aC1zc2wuIE9wZW5TU0wgaXMgaW5zdGFsbGVkIGluCisgICAgL3Vzci9sb2NhbC9zc2wgQ29uZmlndXJlIHJlcG9ydHMgU1NMIGluIC91c3IvbG9jYWwvc3NsLCBidXQgZmFpbHMgdG8gZmluZAorICAgIENSWVBUT19sb2NrIGluIC1sY3J5cHRvCisKKyAgICBDYXVzZTogVGhlIGNjIGZvciB0aGlzIHRlc3QgcGxhY2VzIHRoZSAtTC91c3IvbG9jYWwvc3NsL2xpYiBBRlRFUgorICAgIC1sY3J5cHRvLCBzbyBsZCBjYW4ndCBmaW5kIHRoZSBsaWJyYXJ5LiBUaGlzIGlzIGR1ZSB0byBhIGJ1ZyBpbiB0aGUgR05VCisgICAgYXV0b2NvbmYgdG9vbC4KKworICAgIFdvcmthcm91bmQ6IFNwZWNpZnlpbmcgIkxERkxBR1M9LUwvdXNyL2xvY2FsL3NzbC9saWIiIGluIGZyb250IG9mCisgICAgLi9jb25maWd1cmUgcGxhY2VzIHRoZSAtTC91c3IvbG9jYWwvc3NsL2xpYiBlYXJseSBlbm91Z2ggaW4gdGhlIGNvbW1hbmQKKyAgICBsaW5lIHRvIG1ha2UgdGhpbmdzIHdvcmsKKworICAgIDIuMS4yIG9ubHkgdGhlIGxpYnNzbCBsaWIgaXMgbWlzc2luZworCisgICAgSWYgYWxsIGluY2x1ZGUgZmlsZXMgYW5kIHRoZSBsaWJjcnlwdG8gbGliIGlzIHByZXNlbnQsIHdpdGggb25seSB0aGUKKyAgICBsaWJzc2wgYmVpbmcgbWlzc2luZyBhY2NvcmRpbmcgdG8gY29uZmlndXJlLCB0aGlzIGlzIG1vc3RseSBsaWtlbHkgYmVjYXVzZQorICAgIGEgZmV3IGZ1bmN0aW9ucyBhcmUgbGVmdCBvdXQgZnJvbSB0aGUgbGlic3NsLgorCisgICAgSWYgdGhlIGZ1bmN0aW9uIG5hbWVzIG1pc3NpbmcgaW5jbHVkZSBSU0Egb3IgUlNBUkVGIHlvdSBjYW4gYmUgY2VydGFpbgorICAgIHRoYXQgdGhpcyBpcyBiZWNhdXNlIGxpYnNzbCByZXF1aXJlcyB0aGUgUlNBIGFuZCBSU0FSRUYgbGlicyB0byBidWlsZC4KKworICAgIFNlZSB0aGUgSU5TVEFMTCBmaWxlIHNlY3Rpb24gdGhhdCBleHBsYWlucyBob3cgdG8gYWRkIHRob3NlIGxpYnMgdG8KKyAgICBjb25maWd1cmUuIE1ha2Ugc3VyZSB0aGF0IHlvdSByZW1vdmUgdGhlIGNvbmZpZy5jYWNoZSBmaWxlIGJlZm9yZSB5b3UKKyAgICByZXJ1biBjb25maWd1cmUgd2l0aCB0aGUgbmV3IGZsYWdzLgorCisgIDIuMiBEb2VzIGN1cmwgd29yay9idWlsZCB3aXRoIG90aGVyIFNTTCBsaWJyYXJpZXM/CisKKyAgQ3VybCBoYXMgYmVlbiB3cml0dGVuIHRvIHVzZSBPcGVuU1NMLCBHbnVUTFMsIHlhc3NsLCBOU1MsIFBvbGFyU1NMLCBheFRMUyBvcgorICBxc3NsLCBhbHRob3VnaCB0aGVyZSBzaG91bGQgbm90IGJlIG1hbnkgcHJvYmxlbXMgdXNpbmcgYSBkaWZmZXJlbnQKKyAgbGlicmFyeS4gSWYgYW55b25lIGRvZXMgInBvcnQiIGN1cmwgdG8gdXNlIGEgZGlmZmVyZW50IFNTTCBsaWJyYXJ5LCB3ZSBhcmUKKyAgb2YgY291cnNlIHZlcnkgaW50ZXJlc3RlZCBpbiBnZXR0aW5nIHRoZSBwYXRjaCEKKworICAyLjMgV2hlcmUgY2FuIEkgZmluZCBhIGNvcHkgb2YgTElCRUFZMzIuRExMPworCisgIFRoYXQgaXMgYW4gT3BlblNTTCBiaW5hcnkgYnVpbHQgZm9yIFdpbmRvd3MuCisKKyAgQ3VybCB1c2VzIE9wZW5TU0wgdG8gZG8gdGhlIFNTTCBzdHVmZi4gVGhlIExJQkVBWTMyLkRMTCBpcyB3aGF0IGN1cmwgbmVlZHMKKyAgb24gYSB3aW5kb3dzIG1hY2hpbmUgdG8gZG8gaHR0cHM6Ly8uIENoZWNrIG91dCB0aGUgY3VybCB3ZWIgc2l0ZSB0byBmaW5kCisgIGFjY3VyYXRlIGFuZCB1cC10by1kYXRlIHBvaW50ZXJzIHRvIHJlY2VudCBPcGVuU1NMIERMTHMgYW5kIG90aGVyIGJpbmFyeQorICBwYWNrYWdlcy4KKworICAyLjQgRG9lcyBjdXJsIHN1cHBvcnQgU09DS1MgKFJGQyAxOTI4KSA/CisKKyAgWWVzLCBTT0NLUyA0IGFuZCA1IGFyZSBzdXBwb3J0ZWQuCisKKworMy4gVXNhZ2UgcHJvYmxlbXMKKworICAzLjEgY3VybDogKDEpIFNTTCBpcyBkaXNhYmxlZCwgaHR0cHM6IG5vdCBzdXBwb3J0ZWQKKworICBJZiB5b3UgZ2V0IHRoaXMgb3V0cHV0IHdoZW4gdHJ5aW5nIHRvIGdldCBhbnl0aGluZyBmcm9tIGEgaHR0cHM6Ly8gc2VydmVyLAorICBpdCBtZWFucyB0aGF0IHRoZSBpbnN0YW5jZSBvZiBjdXJsL2xpYmN1cmwgdGhhdCB5b3UncmUgdXNpbmcgd2FzIGJ1aWx0CisgIHdpdGhvdXQgc3VwcG9ydCBmb3IgdGhpcyBwcm90b2NvbC4KKworICBUaGlzIGNvdWxkJ3ZlIGhhcHBlbmVkIGlmIHRoZSBjb25maWd1cmUgc2NyaXB0IHRoYXQgd2FzIHJ1biBhdCBidWlsZCB0aW1lCisgIGNvdWxkbid0IGZpbmQgYWxsIGxpYnMgYW5kIGluY2x1ZGUgZmlsZXMgY3VybCByZXF1aXJlcyBmb3IgU1NMIHRvIHdvcmsuIElmCisgIHRoZSBjb25maWd1cmUgc2NyaXB0IGZhaWxzIHRvIGZpbmQgdGhlbSwgY3VybCBpcyBzaW1wbHkgYnVpbHQgd2l0aG91dCBTU0wKKyAgc3VwcG9ydC4KKworICBUbyBnZXQgdGhlIGh0dHBzOi8vIHN1cHBvcnQgaW50byBhIGN1cmwgdGhhdCB3YXMgcHJldmlvdXNseSBidWlsdCBidXQgdGhhdAorICByZXBvcnRzIHRoYXQgaHR0cHM6Ly8gaXMgbm90IHN1cHBvcnRlZCwgeW91IHNob3VsZCBkaWcgdGhyb3VnaCB0aGUgZG9jdW1lbnQKKyAgYW5kIGxvZ3MgYW5kIGNoZWNrIG91dCB3aHkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lc24ndCBmaW5kIHRoZSBTU0wgbGlicworICBhbmQvb3IgaW5jbHVkZSBmaWxlcy4KKworICBBbHNvLCBjaGVjayBvdXQgdGhlIG90aGVyIHBhcmFncmFwaCBpbiB0aGlzIEZBUSBsYWJlbGxlZCAiY29uZmlndXJlIGRvZXNuJ3QKKyAgZmluZCBPcGVuU1NMIGV2ZW4gd2hlbiBpdCBpcyBpbnN0YWxsZWQiLgorCisgIDMuMiBIb3cgZG8gSSB0ZWxsIGN1cmwgdG8gcmVzdW1lIGEgdHJhbnNmZXI/CisKKyAgQ3VybCBzdXBwb3J0cyByZXN1bWVkIHRyYW5zZmVycyBib3RoIHdheXMgb24gYm90aCBGVFAgYW5kIEhUVFAuCisgIFRyeSB0aGUgLUMgb3B0aW9uLgorCisgIDMuMyBXaHkgZG9lc24ndCBteSBwb3N0aW5nIHVzaW5nIC1GIHdvcms/CisKKyAgWW91IGNhbid0IHNpbXBseSB1c2UgLUYgb3IgLWQgYXQgeW91ciBjaG9pY2UuIFRoZSB3ZWIgc2VydmVyIHRoYXQgd2lsbAorICByZWNlaXZlIHlvdXIgcG9zdCBhc3N1bWVzIG9uZSBvZiB0aGUgZm9ybWF0cy4gSWYgdGhlIGZvcm0geW91J3JlIHRyeWluZyB0bworICAiZmFrZSIgc2V0cyB0aGUgdHlwZSB0byAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIHRoZW4gYW5kIG9ubHkgdGhlbiB5b3UgbXVzdAorICB1c2UgdGhlIC1GIHR5cGUuIEluIGFsbCB0aGUgbW9zdCBjb21tb24gY2FzZXMsIHlvdSBzaG91bGQgdXNlIC1kIHdoaWNoIHRoZW4KKyAgY2F1c2VzIGEgcG9zdGluZyB3aXRoIHRoZSB0eXBlICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLgorCisgIFRoaXMgaXMgZGVzY3JpYmVkIGluIHNvbWUgZGV0YWlsIGluIHRoZSBNQU5VQUwgYW5kIFRoZUFydE9mSHR0cFNjcmlwdGluZworICBkb2N1bWVudHMsIGFuZCBpZiB5b3UgZG9uJ3QgdW5kZXJzdGFuZCBpdCB0aGUgZmlyc3QgdGltZSwgcmVhZCBpdCBhZ2FpbgorICBiZWZvcmUgeW91IHBvc3QgcXVlc3Rpb25zIGFib3V0IHRoaXMgdG8gdGhlIG1haWxpbmcgbGlzdC4gQWxzbywgdHJ5IHJlYWRpbmcKKyAgdGhyb3VnaCB0aGUgbWFpbGluZyBsaXN0IGFyY2hpdmVzIGZvciBvbGQgcG9zdGluZ3MgYW5kIHF1ZXN0aW9ucyByZWdhcmRpbmcKKyAgdGhpcy4KKworICAzLjQgSG93IGRvIEkgdGVsbCBjdXJsIHRvIHJ1biBjdXN0b20gRlRQIGNvbW1hbmRzPworCisgIFlvdSBjYW4gdGVsbCBjdXJsIHRvIHBlcmZvcm0gb3B0aW9uYWwgY29tbWFuZHMgYm90aCBiZWZvcmUgYW5kL29yIGFmdGVyIGEKKyAgZmlsZSB0cmFuc2Zlci4gU3R1ZHkgdGhlIC1RLy0tcXVvdGUgb3B0aW9uLgorCisgIFNpbmNlIGN1cmwgaXMgdXNlZCBmb3IgZmlsZSB0cmFuc2ZlcnMsIHlvdSBkb24ndCB1c2UgY3VybCB0byBqdXN0IHBlcmZvcm0KKyAgRlRQIGNvbW1hbmRzIHdpdGhvdXQgdHJhbnNmZXJyaW5nIGFueXRoaW5nLiBUaGVyZWZvcmUgeW91IG11c3QgYWx3YXlzIHNwZWNpZnkKKyAgYSBVUkwgdG8gdHJhbnNmZXIgdG8vZnJvbSBldmVuIHdoZW4gZG9pbmcgY3VzdG9tIEZUUCBjb21tYW5kcy4KKworICAzLjUgSG93IGNhbiBJIGRpc2FibGUgdGhlIEFjY2VwdDogKi8qIGhlYWRlcj8KKworICBZb3UgY2FuIGNoYW5nZSBhbGwgaW50ZXJuYWxseSBnZW5lcmF0ZWQgaGVhZGVycyBieSBhZGRpbmcgYSByZXBsYWNlbWVudCB3aXRoCisgIHRoZSAtSC8tLWhlYWRlciBvcHRpb24uIEJ5IGFkZGluZyBhIGhlYWRlciB3aXRoIGVtcHR5IGNvbnRlbnRzIHlvdSBzYWZlbHkKKyAgZGlzYWJsZSB0aGF0IG9uZS4gVXNlIC1IICJBY2NlcHQ6IiB0byBkaXNhYmxlIHRoYXQgc3BlY2lmaWMgaGVhZGVyLgorCisgIDMuNiBEb2VzIGN1cmwgc3VwcG9ydCBBU1AsIFhNTCwgWEhUTUwgb3IgSFRNTCB2ZXJzaW9uIFk/CisKKyAgVG8gY3VybCwgYWxsIGNvbnRlbnRzIGFyZSBhbGlrZS4gSXQgZG9lc24ndCBtYXR0ZXIgaG93IHRoZSBwYWdlIHdhcworICBnZW5lcmF0ZWQuIEl0IG1heSBiZSBBU1AsIFBIUCwgUGVybCwgc2hlbGwtc2NyaXB0LCBTU0kgb3IgcGxhaW4KKyAgSFRNTC1maWxlcy4gVGhlcmUncyBubyBkaWZmZXJlbmNlIHRvIGN1cmwgYW5kIGl0IGRvZXNuJ3QgZXZlbiBrbm93IHdoYXQga2luZAorICBvZiBsYW5ndWFnZSB0aGF0IGdlbmVyYXRlZCB0aGUgcGFnZS4KKworICBTZWUgYWxzbyBpdGVtIDMuMTQgcmVnYXJkaW5nIGphdmFzY3JpcHQuCisKKyAgMy43IENhbiBJIHVzZSBjdXJsIHRvIGRlbGV0ZS9yZW5hbWUgYSBmaWxlIHRocm91Z2ggRlRQPworCisgIFllcy4gWW91IHNwZWNpZnkgY3VzdG9tIEZUUCBjb21tYW5kcyB3aXRoIC1RLy0tcXVvdGUuCisKKyAgT25lIGV4YW1wbGUgd291bGQgYmUgdG8gZGVsZXRlIGEgZmlsZSBhZnRlciB5b3UgaGF2ZSBkb3dubG9hZGVkIGl0OgorCisgICAgIGN1cmwgLU8gZnRwOi8vZG93bmxvYWQuY29tL2Nvb2xmaWxlIC1RICctREVMRSBjb29sZmlsZScKKworICBvciByZW5hbWUgYSBmaWxlIGFmdGVyIHVwbG9hZDoKKworICAgICBjdXJsIC1UIGluZmlsZSBmdHA6Ly91cGxvYWQuY29tL2Rpci8gLVEgIi1STkZSIGluZmlsZSIgLVEgIi1STlRPIG5ld25hbWUiCisKKyAgMy44IEhvdyBkbyBJIHRlbGwgY3VybCB0byBmb2xsb3cgSFRUUCByZWRpcmVjdHM/CisKKyAgQ3VybCBkb2VzIG5vdCBmb2xsb3cgc28tY2FsbGVkIHJlZGlyZWN0cyBieSBkZWZhdWx0LiBUaGUgTG9jYXRpb246IGhlYWRlcgorICB0aGF0IGluZm9ybXMgdGhlIGNsaWVudCBhYm91dCB0aGlzIGlzIG9ubHkgaW50ZXJwcmV0ZWQgaWYgeW91J3JlIHVzaW5nIHRoZQorICAtTC8tLWxvY2F0aW9uIG9wdGlvbi4gQXMgaW46CisKKyAgICAgY3VybCAtTCBodHRwOi8vcmVkaXJlY3Rvci5jb20KKworICBOb3QgYWxsIHJlZGlyZWN0cyBhcmUgSFRUUCBvbmVzLCBzZWUgNC4xNAorCisgIDMuOSBIb3cgZG8gSSB1c2UgY3VybCBpbiBteSBmYXZvcml0ZSBwcm9ncmFtbWluZyBsYW5ndWFnZT8KKworICBUaGVyZSBleGlzdCBtYW55IGxhbmd1YWdlIGludGVyZmFjZXMvYmluZGluZ3MgZm9yIGN1cmwgdGhhdCBpbnRlZ3JhdGVzIGl0CisgIGJldHRlciB3aXRoIHZhcmlvdXMgbGFuZ3VhZ2VzLiBJZiB5b3UgYXJlIGZsdWlkIGluIGEgc2NyaXB0IGxhbmd1YWdlLCB5b3UKKyAgbWF5IHZlcnkgd2VsbCBvcHQgdG8gdXNlIHN1Y2ggYW4gaW50ZXJmYWNlIGluc3RlYWQgb2YgdXNpbmcgdGhlIGNvbW1hbmQgbGluZQorICB0b29sLgorCisgIEZpbmQgb3V0IG1vcmUgYWJvdXQgd2hpY2ggbGFuZ3VhZ2VzIHRoYXQgc3VwcG9ydCBjdXJsIGRpcmVjdGx5LCBhbmQgaG93IHRvCisgIGluc3RhbGwgYW5kIHVzZSB0aGVtLCBpbiB0aGUgbGliY3VybCBzZWN0aW9uIG9mIHRoZSBjdXJsIHdlYiBzaXRlOgorICBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvCisKKyAgQWxsIHRoZSB2YXJpb3VzIGJpbmRpbmdzIHRvIGxpYmN1cmwgYXJlIG1hZGUgYnkgb3RoZXIgcHJvamVjdHMgYW5kIHBlb3BsZSwKKyAgb3V0c2lkZSBvZiB0aGUgY1VSTCBwcm9qZWN0LiBUaGUgY1VSTCBwcm9qZWN0IGl0c2VsZiBvbmx5IHByb2R1Y2VzIGxpYmN1cmwKKyAgd2l0aCBpdHMgcGxhaW4gQyBBUEkuIElmIHlvdSBkb24ndCBmaW5kIGFueXdoZXJlIGVsc2UgdG8gYXNrIHlvdSBjYW4gYXNrCisgIGFib3V0IGJpbmRpbmdzIG9uIHRoZSBjdXJsLWxpYnJhcnkgbGlzdCB0b28sIGJ1dCBiZSBwcmVwYXJlZCB0aGF0IHBlb3BsZSBvbgorICB0aGF0IGxpc3QgbWF5IG5vdCBrbm93IGFueXRoaW5nIGFib3V0IGJpbmRpbmdzLgorCisgIEluIE9jdG9iZXIgMjAwOSwgdGhlcmUgd2VyZSBpbnRlcmZhY2VzIGF2YWlsYWJsZSBmb3IgdGhlIGZvbGxvd2luZworICBsYW5ndWFnZXM6IEFkYTk1LCBCYXNpYywgQywgQysrLCBDaCwgQ29jb2EsIEQsIER5bGFuLCBFaWZmZWwsIEV1cGhvcmlhLAorICBGZXJpdGUsIEdhbWJhcywgZ2xpYi9HVEsrLCBIYXNrZWxsLCBJTEUvUlBHLCBKYXZhLCBMaXNwLCBMdWEsIE1vbm8sIC5ORVQsCisgIE9iamVjdC1QYXNjYWwsIE8nQ2FtbCwgUGFzY2FsLCBQZXJsLCBQSFAsIFBvc3RncmVTUUwsIFB5dGhvbiwgUiwgUmV4eCwgUnVieSwKKyAgU2NoZW1lLCBTLUxhbmcsIFNtYWxsdGFsaywgU1AtRm9ydGgsIFNQTCwgVGNsLCBWaXN1YWwgQmFzaWMsIFZpc3VhbCBGb3hQcm8sCisgIFEsIHd4d2lkZ2V0cyBhbmQgWEJMaXRlLiBCeSB0aGUgdGltZSB5b3UgcmVhZCB0aGlzLCBhZGRpdGlvbmFsIG9uZXMgbWF5IGhhdmUKKyAgYXBwZWFyZWQhCisKKyAgMy4xMCBXaGF0IGFib3V0IFNPQVAsIFdlYkRBViwgWE1MLVJQQyBvciBzaW1pbGFyIHByb3RvY29scyBvdmVyIEhUVFA/CisKKyAgQ3VybCBhZGhlcmVzIHRvIHRoZSBIVFRQIHNwZWMsIHdoaWNoIGJhc2ljYWxseSBtZWFucyB5b3UgY2FuIHBsYXkgd2l0aCAqYW55KgorICBwcm90b2NvbCB0aGF0IGlzIGJ1aWx0IG9uIHRvcCBvZiBIVFRQLiBQcm90b2NvbHMgc3VjaCBhcyBTT0FQLCBXRUJEQVYgYW5kCisgIFhNTC1SUEMgYXJlIGFsbCBzdWNoIG9uZXMuIFlvdSBjYW4gdXNlIC1YIHRvIHNldCBjdXN0b20gcmVxdWVzdHMgYW5kIC1IIHRvCisgIHNldCBjdXN0b20gaGVhZGVycyAob3IgcmVwbGFjZSBpbnRlcm5hbGx5IGdlbmVyYXRlZCBvbmVzKS4KKworICBVc2luZyBsaWJjdXJsIGlzIG9mIGNvdXJzZSBqdXN0IGFzIGZpbmUgYW5kIHlvdSdkIGp1c3QgdXNlIHRoZSBwcm9wZXIKKyAgbGlicmFyeSBvcHRpb25zIHRvIGRvIHRoZSBzYW1lLgorCisgIDMuMTEgSG93IGRvIEkgUE9TVCB3aXRoIGEgZGlmZmVyZW50IENvbnRlbnQtVHlwZT8KKworICBZb3UgY2FuIGFsd2F5cyByZXBsYWNlIHRoZSBpbnRlcm5hbGx5IGdlbmVyYXRlZCBoZWFkZXJzIHdpdGggLUgvLS1oZWFkZXIuCisgIFRvIG1ha2UgYSBzaW1wbGUgSFRUUCBQT1NUIHdpdGggdGV4dC94bWwgYXMgY29udGVudC10eXBlLCBkbyBzb21ldGhpbmcgbGlrZToKKworICAgICAgICBjdXJsIC1kICJkYXRhdG9wb3N0IiAtSCAiQ29udGVudC1UeXBlOiB0ZXh0L3htbCIgW1VSTF0KKworICAzLjEyIFdoeSBkbyBGVFAgc3BlY2lmaWMgZmVhdHVyZXMgb3ZlciBIVFRQIHByb3h5IGZhaWw/CisKKyAgQmVjYXVzZSB3aGVuIHlvdSB1c2UgYSBIVFRQIHByb3h5LCB0aGUgcHJvdG9jb2wgc3Bva2VuIG9uIHRoZSBuZXR3b3JrIHdpbGwKKyAgYmUgSFRUUCwgZXZlbiBpZiB5b3Ugc3BlY2lmeSBhIEZUUCBVUkwuIFRoaXMgZWZmZWN0aXZlbHkgbWVhbnMgdGhhdCB5b3UKKyAgbm9ybWFsbHkgY2FuJ3QgdXNlIEZUUCBzcGVjaWZpYyBmZWF0dXJlcyBzdWNoIGFzIEZUUCB1cGxvYWQgYW5kIEZUUCBxdW90ZQorICBldGMuCisKKyAgVGhlcmUgaXMgb25lIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUsIGFuZCB0aGF0IGlzIGlmIHlvdSBjYW4gInR1bm5lbCB0aHJvdWdoIgorICB0aGUgZ2l2ZW4gSFRUUCBwcm94eS4gUHJveHkgdHVubmVsaW5nIGlzIGVuYWJsZWQgd2l0aCBhIHNwZWNpYWwgb3B0aW9uICgtcCkKKyAgYW5kIGlzIGdlbmVyYWxseSBub3QgYXZhaWxhYmxlIGFzIHByb3h5IGFkbWlucyB1c3VhbGx5IGRpc2FibGUgdHVubmVsaW5nIHRvCisgIG90aGVyIHBvcnRzIHRoYW4gNDQzICh3aGljaCBpcyB1c2VkIGZvciBIVFRQUyBhY2Nlc3MgdGhyb3VnaCBwcm94aWVzKS4KKworICAzLjEzIFdoeSBkb2VzIG15IHNpbmdsZS9kb3VibGUgcXVvdGVzIGZhaWw/CisKKyAgVG8gc3BlY2lmeSBhIGNvbW1hbmQgbGluZSBvcHRpb24gdGhhdCBpbmNsdWRlcyBzcGFjZXMsIHlvdSBtaWdodCBuZWVkIHRvCisgIHB1dCB0aGUgZW50aXJlIG9wdGlvbiB3aXRoaW4gcXVvdGVzLiBMaWtlIGluOgorCisgICBjdXJsIC1kICIgd2l0aCBzcGFjZXMgIiB1cmwuY29tCisKKyAgb3IgcGVyaGFwcworCisgICBjdXJsIC1kICcgd2l0aCBzcGFjZXMgJyB1cmwuY29tCisKKyAgRXhhY3RseSB3aGF0IGtpbmQgb2YgcXVvdGVzIGFuZCBob3cgdG8gZG8gdGhpcyBpcyBlbnRpcmVseSB1cCB0byB0aGUgc2hlbGwKKyAgb3IgY29tbWFuZCBsaW5lIGludGVycHJldGVyIHRoYXQgeW91IGFyZSB1c2luZy4gRm9yIG1vc3QgdW5peCBzaGVsbHMsIHlvdQorICBjYW4gbW9yZSBvciBsZXNzIHBpY2sgZWl0aGVyIHNpbmdsZSAoJykgb3IgZG91YmxlICgiKSBxdW90ZXMuIEZvcgorICBXaW5kb3dzL0RPUyBwcm9tcHRzIEkgYmVsaWV2ZSB5b3UncmUgZm9yY2VkIHRvIHVzZSBkb3VibGUgKCIpIHF1b3Rlcy4KKworICBQbGVhc2Ugc3R1ZHkgdGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgcGFydGljdWxhciBlbnZpcm9ubWVudC4gRXhhbXBsZXMgaW4KKyAgdGhlIGN1cmwgZG9jcyB3aWxsIHVzZSBhIG1peCBvZiBib3RoIHRoZXNlIG9uZXMgYXMgc2hvd24gYWJvdmUuIFlvdSBtdXN0CisgIGFkanVzdCB0aGVtIHRvIHdvcmsgaW4geW91ciBlbnZpcm9ubWVudC4KKworICBSZW1lbWJlciB0aGF0IGN1cmwgd29ya3MgYW5kIHJ1bnMgb24gbW9yZSBvcGVyYXRpbmcgc3lzdGVtcyB0aGFuIG1vc3Qgc2luZ2xlCisgIGluZGl2aWR1YWxzIGhhdmUgZXZlciB0cmllZC4KKworICAzLjE0IERvZXMgY3VybCBzdXBwb3J0IEphdmFzY3JpcHQgb3IgUEFDIChhdXRvbWF0ZWQgcHJveHkgY29uZmlnKT8KKworICBNYW55IHdlYiBwYWdlcyBkbyBtYWdpYyBzdHVmZiB1c2luZyBlbWJlZGRlZCBKYXZhc2NyaXB0LiBDdXJsIGFuZCBsaWJjdXJsCisgIGhhdmUgbm8gYnVpbHQtaW4gc3VwcG9ydCBmb3IgdGhhdCwgc28gaXQgd2lsbCBiZSB0cmVhdGVkIGp1c3QgbGlrZSBhbnkgb3RoZXIKKyAgY29udGVudHMuCisKKyAgLnBhYyBmaWxlcyBhcmUgYSBuZXRzY2FwZSBpbnZlbnRpb24gYW5kIGFyZSBzb21ldGltZXMgdXNlZCBieSBvcmdhbml6YXRpb25zCisgIHRvIGFsbG93IHRoZW0gdG8gZGlmZmVyZW50aWF0ZSB3aGljaCBwcm94aWVzIHRvIHVzZS4gVGhlIC5wYWMgY29udGVudHMgaXMKKyAganVzdCBhIEphdmFzY3JpcHQgcHJvZ3JhbSB0aGF0IGdldHMgaW52b2tlZCBieSB0aGUgYnJvd3NlciBhbmQgdGhhdCByZXR1cm5zCisgIHRoZSBuYW1lIG9mIHRoZSBwcm94eSB0byBjb25uZWN0IHRvLiBTaW5jZSBjdXJsIGRvZXNuJ3Qgc3VwcG9ydCBKYXZhc2NyaXB0LAorICBpdCBjYW4ndCBzdXBwb3J0IC5wYWMgcHJveHkgY29uZmlndXJhdGlvbiBlaXRoZXIuCisKKyAgU29tZSB3b3JrYXJvdW5kcyB1c3VhbGx5IHN1Z2dlc3RlZCB0byBvdmVyY29tZSB0aGlzIEphdmFzY3JpcHQgZGVwZW5kZW5jeToKKworICAtIERlcGVuZGluZyBvbiB0aGUgSmF2YXNjcmlwdCBjb21wbGV4aXR5LCB3cml0ZSB1cCBhIHNjcmlwdCB0aGF0CisgICAgdHJhbnNsYXRlcyBpdCB0byBhbm90aGVyIGxhbmd1YWdlIGFuZCBleGVjdXRlIHRoYXQuCisKKyAgLSBSZWFkIHRoZSBKYXZhc2NyaXB0IGNvZGUgYW5kIHJld3JpdGUgdGhlIHNhbWUgbG9naWMgaW4gYW5vdGhlciBsYW5ndWFnZS4KKworICAtIEltcGxlbWVudCBhIEphdmFzY3JpcHQgaW50ZXJwcmV0ZXIsIHBlb3BsZSBoYXZlIHN1Y2Nlc3NmdWxseSB1c2VkIHRoZQorICAgIE1vemlsbGEgSmF2YXNjcmlwdCBlbmdpbmUgaW4gdGhlIHBhc3QuCisKKyAgLSBBc2sgeW91ciBhZG1pbnMgdG8gc3RvcCB0aGlzLCBmb3IgYSBzdGF0aWMgcHJveHkgc2V0dXAgb3Igc2ltaWxhci4KKworICAzLjE1IENhbiBJIGRvIHJlY3Vyc2l2ZSBmZXRjaGVzIHdpdGggY3VybD8KKworICBOby4gY3VybCBpdHNlbGYgaGFzIG5vIGNvZGUgdGhhdCBwZXJmb3JtcyByZWN1cnNpdmUgb3BlcmF0aW9ucywgc3VjaCBhcworICB0aG9zZSBwZXJmb3JtZWQgYnkgd2dldCBhbmQgc2ltaWxhciB0b29scy4KKworICBUaGVyZSBleGlzdCB3cmFwcGVyIHNjcmlwdHMgd2l0aCB0aGF0IGZ1bmN0aW9uYWxpdHkgKGZvciBleGFtcGxlIHRoZQorICBjdXJsbWlycm9yIHBlcmwgc2NyaXB0KSwgYW5kIHlvdSBjYW4gd3JpdGUgcHJvZ3JhbXMgYmFzZWQgb24gbGliY3VybCB0byBkbworICBpdCwgYnV0IHRoZSBjb21tYW5kIGxpbmUgdG9vbCBjdXJsIGl0c2VsZiBjYW5ub3QuCisKKyAgMy4xNiBXaGF0IGNlcnRpZmljYXRlcyBkbyBJIG5lZWQgd2hlbiBJIHVzZSBTU0w/CisKKyAgVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCBraW5kcyBvZiAiY2VydGlmaWNhdGVzIiB0byBrZWVwIHRyYWNrIG9mIHdoZW4gd2UKKyAgdGFsayBhYm91dCB1c2luZyBTU0wtYmFzZWQgcHJvdG9jb2xzIChIVFRQUyBvciBGVFBTKSB1c2luZyBjdXJsIG9yIGxpYmN1cmwuCisKKyAgLSBDbGllbnQgY2VydGlmaWNhdGUuIFRoZSBzZXJ2ZXIgeW91IGNvbW11bmljYXRlIG1heSByZXF1aXJlIHRoYXQgeW91IGNhbgorICAgIHByb3ZpZGUgdGhpcyBpbiBvcmRlciB0byBwcm92ZSB0aGF0IHlvdSBhY3R1YWxseSBhcmUgd2hvIHlvdSBjbGFpbSB0byBiZS4KKyAgICBJZiB0aGUgc2VydmVyIGRvZXNuJ3QgcmVxdWlyZSB0aGlzLCB5b3UgZG9uJ3QgbmVlZCBhIGNsaWVudCBjZXJ0aWZpY2F0ZS4KKworICAgIEEgY2xpZW50IGNlcnRpZmljYXRlIGlzIGFsd2F5cyB1c2VkIHRvZ2V0aGVyIHdpdGggYSBwcml2YXRlIGtleSwgYW5kIHRoZQorICAgIHByaXZhdGUga2V5IGhhcyBhIHBhc3MgcGhyYXNlIHRoYXQgcHJvdGVjdHMgaXQuCisKKyAgLSBTZXJ2ZXIgY2VydGlmaWNhdGUuIFRoZSBzZXJ2ZXIgeW91IGNvbW11bmljYXRlIHdpdGggaGFzIGEgc2VydmVyCisgICAgY2VydGlmaWNhdGUuIFlvdSBjYW4gYW5kIHNob3VsZCB2ZXJpZnkgdGhpcyBjZXJ0aWZpY2F0ZSB0byBtYWtlIHN1cmUgdGhhdAorICAgIHlvdSBhcmUgdHJ1bHkgdGFsa2luZyB0byB0aGUgcmVhbCBzZXJ2ZXIgYW5kIG5vdCBhIHNlcnZlciBpbXBlcnNvbmF0aW5nCisgICAgaXQuCisKKyAgLSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgY2VydGlmaWNhdGUgKCJDQSBjZXJ0IikuIFlvdSBvZnRlbiBoYXZlIHNldmVyYWwgQ0EKKyAgICBjZXJ0cyBpbiBhIENBIGNlcnQgYnVuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IGEgc2VydmVyIGNlcnRpZmljYXRlCisgICAgdGhhdCB3YXMgc2lnbmVkIGJ5IG9uZSBvZiB0aGUgYXV0aG9yaXRpZXMgaW4gdGhlIGJ1bmRsZS4gY3VybCBkb2VzIG5vdAorICAgIGNvbWUgd2l0aCBhIENBIGNlcnQgYnVuZGxlIGJ1dCBtb3N0IGN1cmwgaW5zdGFsbHMgcHJvdmlkZSBvbmUuIFlvdSBjYW4KKyAgICBhbHNvIG92ZXJyaWRlIHRoZSBkZWZhdWx0LgorCisgICAgVGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gcHJvY2VzcyBpcyBtYWRlIGJ5IHVzaW5nIGEgQ2VydGlmaWNhdGUKKyAgICBBdXRob3JpdHkgY2VydGlmaWNhdGUgKCJDQSBjZXJ0IikgdGhhdCB3YXMgdXNlZCB0byBzaWduIHRoZSBzZXJ2ZXIKKyAgICBjZXJ0aWZpY2F0ZS4gU2VydmVyIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gY3VybAorICAgIGFuZCBsaWJjdXJsIGFuZCBpcyBvZnRlbiB0aGUgcmVhc29uIGZvciBwcm9ibGVtcyBhcyBleHBsYWluZWQgaW4gRkFRIGVudHJ5CisgICAgNC4xMiBhbmQgdGhlIFNTTENFUlRTIGRvY3VtZW50CisgICAgKGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9zc2xjZXJ0cy5odG1sKS4gU2VydmVyIGNlcnRpZmljYXRlcyB0aGF0IGFyZQorICAgICJzZWxmLXNpZ25lZCIgb3Igb3RoZXJ3aXNlIHNpZ25lZCBieSBhIENBIHRoYXQgeW91IGRvIG5vdCBoYXZlIGEgQ0EgY2VydAorICAgIGZvciwgY2Fubm90IGJlIHZlcmlmaWVkLiBJZiB0aGUgdmVyaWZpY2F0aW9uIGR1cmluZyBhIGNvbm5lY3QgZmFpbHMsIHlvdQorICAgIGFyZSByZWZ1c2VkIGFjY2Vzcy4gWW91IHRoZW4gbmVlZCB0byBleHBsaWNpdGx5IGRpc2FibGUgdGhlIHZlcmlmaWNhdGlvbgorICAgIHRvIGNvbm5lY3QgdG8gdGhlIHNlcnZlci4KKworICAzLjE3IEhvdyBkbyBJIGxpc3QgdGhlIHJvb3QgZGlyIG9mIGFuIEZUUCBzZXJ2ZXI/CisKKyAgVGhlcmUgYXJlIHR3byB3YXlzLiBUaGUgd2F5IGRlZmluZWQgaW4gdGhlIFJGQyBpcyB0byB1c2UgYW4gZW5jb2RlZCBzbGFzaAorICBpbiB0aGUgZmlyc3QgcGF0aCBwYXJ0LiBMaXN0IHRoZSAiL3RtcCIgZGlyIGxpa2UgdGhpczoKKworICAgICBjdXJsIGZ0cDovL2Z0cC5zdW5ldC5zZS8lMmZ0bXAvCisKKyAgb3IgdGhlIG5vdC1xdWl0ZS1rb3NoZXItYnV0LW1vcmUtcmVhZGFibGUgd2F5LCBieSBzaW1wbHkgc3RhcnRpbmcgdGhlIHBhdGgKKyAgc2VjdGlvbiBvZiB0aGUgVVJMIHdpdGggYSBzbGFzaDoKKworICAgICBjdXJsIGZ0cDovL2Z0cC5zdW5ldC5zZS8vdG1wLworCisgIDMuMTggQ2FuIEkgdXNlIGN1cmwgdG8gc2VuZCBhIFBPU1QvUFVUIGFuZCBub3Qgd2FpdCBmb3IgYSByZXNwb25zZT8KKworICBOby4KKworICBCdXQgeW91IGNvdWxkIGVhc2lseSB3cml0ZSB5b3VyIG93biBwcm9ncmFtIHVzaW5nIGxpYmN1cmwgdG8gZG8gc3VjaCBzdHVudHMuCisKKyAgMy4xOSBIb3cgZG8gSSBnZXQgSFRUUCBmcm9tIGEgaG9zdCB1c2luZyBhIHNwZWNpZmljIElQIGFkZHJlc3M/CisKKyAgRm9yIGV4YW1wbGUsIHlvdSBtYXkgYmUgdHJ5aW5nIG91dCBhIHdlYiBzaXRlIGluc3RhbGxhdGlvbiB0aGF0IGlzbid0IHlldCBpbgorICB0aGUgRE5TLiBPciB5b3UgaGF2ZSBhIHNpdGUgdXNpbmcgbXVsdGlwbGUgSVAgYWRkcmVzc2VzIGZvciBhIGdpdmVuIGhvc3QKKyAgbmFtZSBhbmQgeW91IHdhbnQgdG8gYWRkcmVzcyBhIHNwZWNpZmljIG9uZSBvdXQgb2YgdGhlIHNldC4KKworICBTZXQgYSBjdXN0b20gSG9zdDogaGVhZGVyIHRoYXQgaWRlbnRpZmllcyB0aGUgc2VydmVyIG5hbWUgeW91IHdhbnQgdG8gcmVhY2gKKyAgYnV0IHVzZSB0aGUgdGFyZ2V0IElQIGFkZHJlc3MgaW4gdGhlIFVSTDoKKworICAgIGN1cmwgLS1oZWFkZXIgIkhvc3Q6IHd3dy5leGFtcGxlLmNvbSIgaHR0cDovLzEyNy4wLjAuMS8KKworICBZb3UgY2FuIGFsc28gb3B0IHRvIGFkZCBmYWtlZCBob3N0IG5hbWUgZW50cmllcyB0byBjdXJsIHdpdGggdGhlIC0tcmVzb2x2ZQorICBvcHRpb24uIFRoYXQgaGFzIHRoZSBhZGRlZCBiZW5lZml0IHRoYXQgdGhpbmdzIGxpa2UgcmVkaXJlY3RzIHdpbGwgYWxzbyB3b3JrCisgIHByb3Blcmx5LiBUaGUgYWJvdmUgb3BlcmF0aW9uIHdvdWxkIGluc3RlYWQgYmUgZG9uZSBhczoKKworICAgIGN1cmwgLS1yZXNvbHZlIHd3dy5leGFtcGxlLmNvbTo4MDoxMjcuMC4wLjEgaHR0cDovL3d3dy5leGFtcGxlLmNvbS8KKworICAzLjIwIEhvdyB0byBTRlRQIGZyb20gbXkgdXNlcidzIGhvbWUgZGlyZWN0b3J5PworCisgIENvbnRyYXJ5IHRvIGhvdyBGVFAgd29ya3MsIFNGVFAgYW5kIFNDUCBVUkxzIHNwZWNpZnkgdGhlIGV4YWN0IGRpcmVjdG9yeSB0bworICB3b3JrIHdpdGguIEl0IG1lYW5zIHRoYXQgaWYgeW91IGRvbid0IHNwZWNpZnkgdGhhdCB5b3Ugd2FudCB0aGUgdXNlcidzIGhvbWUKKyAgZGlyZWN0b3J5LCB5b3UgZ2V0IHRoZSBhY3R1YWwgcm9vdCBkaXJlY3RvcnkuCisKKyAgVG8gc3BlY2lmeSBhIGZpbGUgaW4geW91ciB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIHlvdSBuZWVkIHRvIHVzZSB0aGUgY29ycmVjdAorICBVUkwgc3ludGF4IHdoaWNoIGZvciBzZnRwIG1pZ2h0IGxvb2sgc2ltaWxhciB0bzoKKworICAgIGN1cmwgLU8gLXUgdXNlcjpwYXNzd29yZCBzZnRwOi8vZXhhbXBsZS5jb20vfi9maWxlLnR4dAorCisgIGFuZCBmb3IgU0NQIGl0IGlzIGp1c3QgYSBkaWZmZXJlbnQgcHJvdG9jb2wgcHJlZml4OgorCisgICAgY3VybCAtTyAtdSB1c2VyOnBhc3N3b3JkIHNjcDovL2V4YW1wbGUuY29tL34vZmlsZS50eHQKKworICAzLjIxIFByb3RvY29sIHh4eCBub3Qgc3VwcG9ydGVkIG9yIGRpc2FibGVkIGluIGxpYmN1cmwKKworICBXaGVuIHBhc3Npbmcgb24gYSBVUkwgdG8gY3VybCB0byB1c2UsIGl0IG1heSByZXNwb25kIHRoYXQgdGhlIHBhcnRpY3VsYXIKKyAgcHJvdG9jb2wgaXMgbm90IHN1cHBvcnRlZCBvciBkaXNhYmxlZC4gVGhlIHBhcnRpY3VsYXIgd2F5IHRoaXMgZXJyb3IgbWVzc2FnZQorICBpcyBwaHJhc2VkIGlzIGJlY2F1c2UgY3VybCBkb2Vzbid0IG1ha2UgYSBkaXN0aW5jdGlvbiBpbnRlcm5hbGx5IG9mIHdoZXRoZXIKKyAgYSBwYXJ0aWN1bGFyIHByb3RvY29sIGlzIG5vdCBzdXBwb3J0ZWQgKGllIG5ldmVyIGdvdCBhbnkgY29kZSBhZGRlZCB0aGF0CisgIGtub3dzIGhvdyB0byBzcGVhayB0aGF0IHByb3RvY29sKSBvciBpZiBpdCB3YXMgZXhwbGljaXRseSBkaXNhYmxlZC4gY3VybCBjYW4KKyAgYmUgYnVpbHQgdG8gb25seSBzdXBwb3J0IGEgZ2l2ZW4gc2V0IG9mIHByb3RvY29scywgYW5kIHRoZSByZXN0IHdvdWxkIHRoZW4KKyAgYmUgZGlzYWJsZWQgb3Igbm90IHN1cHBvcnRlZC4KKworICBOb3RlIHRoYXQgdGhpcyBlcnJvciB3aWxsIGFsc28gb2NjdXIgaWYgeW91IHBhc3MgYSB3cm9uZ2x5IHNwZWxsZWQgcHJvdG9jb2wKKyAgcGFydCBhcyBpbiAiaHRwdDovL2V4YW1wbGUuY29tIiBvciBhcyBpbiB0aGUgbGVzcyBldmlkZW50IGNhc2UgaWYgeW91IHByZWZpeAorICB0aGUgcHJvdG9jb2wgcGFydCB3aXRoIGEgc3BhY2UgYXMgaW4gIiBodHRwOi8vZXhhbXBsZS5jb20vIi4KKworCis0LiBSdW5uaW5nIFByb2JsZW1zCisKKyAgNC4xIFByb2JsZW1zIGNvbm5lY3RpbmcgdG8gU1NMIHNlcnZlcnMuCisKKyAgSXQgdG9vayBhIHZlcnkgbG9uZyB0aW1lIGJlZm9yZSB3ZSBjb3VsZCBzb3J0IG91dCB3aHkgY3VybCBoYWQgcHJvYmxlbXMgdG8KKyAgY29ubmVjdCB0byBjZXJ0YWluIFNTTCBzZXJ2ZXJzIHdoZW4gdXNpbmcgU1NMZWF5IG9yIE9wZW5TU0wgdjAuOSsuICBUaGUKKyAgZXJyb3Igc29tZXRpbWVzIHNob3dlZCB1cCBzaW1pbGFyIHRvOgorCisgIDE2NTcwOmVycm9yOjE0MDdEMDcxOlNTTCByb3V0aW5lczpTU0wyX1JFQUQ6YmFkIG1hYyBkZWNvZGU6czJfcGt0LmM6MjMzOgorCisgIEl0IHR1cm5lZCBvdXQgdG8gYmUgYmVjYXVzZSBtYW55IG9sZGVyIFNTTCBzZXJ2ZXJzIGRvbid0IGRlYWwgd2l0aCBTU0x2MworICByZXF1ZXN0cyBwcm9wZXJseS4gVG8gY29ycmVjdCB0aGlzIHByb2JsZW0sIHRlbGwgY3VybCB0byBzZWxlY3QgU1NMdjIgZnJvbQorICB0aGUgY29tbWFuZCBsaW5lICgtMi8tLXNzbHYyKS4KKworICBUaGVyZSBoYXZlIGFsc28gYmVlbiBleGFtcGxlcyB3aGVyZSB0aGUgcmVtb3RlIHNlcnZlciBkaWRuJ3QgbGlrZSB0aGUgU1NMdjIKKyAgcmVxdWVzdCBhbmQgaW5zdGVhZCB5b3UgaGFkIHRvIGZvcmNlIGN1cmwgdG8gdXNlIFNTTHYzIHdpdGggLTMvLS1zc2x2My4KKworICA0LjIgV2h5IGRvIEkgZ2V0IHByb2JsZW1zIHdoZW4gSSB1c2UgJiBvciAlIGluIHRoZSBVUkw/CisKKyAgSW4gZ2VuZXJhbCB1bml4IHNoZWxscywgdGhlICYgc3ltYm9sIGlzIHRyZWF0ZWQgc3BlY2lhbGx5IGFuZCB3aGVuIHVzZWQsIGl0CisgIHJ1bnMgdGhlIHNwZWNpZmllZCBjb21tYW5kIGluIHRoZSBiYWNrZ3JvdW5kLiBUbyBzYWZlbHkgc2VuZCB0aGUgJiBhcyBhIHBhcnQKKyAgb2YgYSBVUkwsIHlvdSBzaG91bGQgcXVvdGUgdGhlIGVudGlyZSBVUkwgYnkgdXNpbmcgc2luZ2xlICgnKSBvciBkb3VibGUgKCIpCisgIHF1b3RlcyBhcm91bmQgaXQuIFNpbWlsYXIgcHJvYmxlbXMgY2FuIGFsc28gb2NjdXIgb24gc29tZSBzaGVsbHMgd2l0aCBvdGhlcgorICBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgPyohJH4oKXt9PD5cfDtgLiAgV2hlbiBpbiBkb3VidCwgcXVvdGUgdGhlIFVSTC4KKworICBBbiBleGFtcGxlIHRoYXQgd291bGQgaW52b2tlIGEgcmVtb3RlIENHSSB0aGF0IHVzZXMgJi1zeW1ib2xzIGNvdWxkIGJlOgorCisgICAgIGN1cmwgJ2h0dHA6Ly93d3cuYWx0YXZpc3RhLmNvbS9jZ2ktYmluL3F1ZXJ5P3RleHQ9eWVzJnE9Y3VybCcKKworICBJbiBXaW5kb3dzLCB0aGUgc3RhbmRhcmQgRE9TIHNoZWxsIHRyZWF0cyB0aGUgJS1zeW1ib2wgc3BlY2lhbGx5IGFuZCB5b3UKKyAgbmVlZCB0byB1c2UgVFdPICUtc3ltYm9scyBmb3IgZWFjaCBzaW5nbGUgb25lIHlvdSB3YW50IHRvIHVzZSBpbiB0aGUgVVJMLgorCisgIEFsc28gbm90ZSB0aGF0IGlmIHlvdSB3YW50IHRoZSBsaXRlcmFsICUtc3ltYm9sIHRvIGJlIHBhcnQgb2YgdGhlIGRhdGEgeW91CisgIHBhc3MgaW4gYSBQT1NUIHVzaW5nIC1kLy0tZGF0YSB5b3UgbXVzdCBlbmNvZGUgaXQgYXMgJyUyNScgKHdoaWNoIHRoZW4gYWxzbworICBuZWVkcyB0aGUgJS1zeW1ib2wgZG91YmxlZCBvbiBXaW5kb3dzIG1hY2hpbmVzKS4KKworICA0LjMgSG93IGNhbiBJIHVzZSB7LCB9LCBbIG9yIF0gdG8gc3BlY2lmeSBtdWx0aXBsZSBVUkxzPworCisgIEJlY2F1c2UgdGhvc2UgbGV0dGVycyBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nIHRvIHRoZSBzaGVsbCwgYW5kIHRvIGJlIHVzZWQgaW4KKyAgYSBVUkwgc3BlY2lmaWVkIHRvIGN1cmwgeW91IG11c3QgcXVvdGUgdGhlbS4KKworICBBbiBleGFtcGxlIHRoYXQgZG93bmxvYWRzIHR3byBVUkxzIChzZXF1ZW50aWFsbHkpIHdvdWxkIGRvOgorCisgICAgY3VybCAne2N1cmwsd3d3fS5oYXh4LnNlJworCisgIFRvIGJlIGFibGUgdG8gdXNlIHRob3NlIGxldHRlcnMgYXMgYWN0dWFsIHBhcnRzIG9mIHRoZSBVUkwgKHdpdGhvdXQgdXNpbmcKKyAgdGhlbSBmb3IgdGhlIGN1cmwgVVJMICJnbG9iYmluZyIgc3lzdGVtKSwgdXNlIHRoZSAtZy8tLWdsb2JvZmYgb3B0aW9uOgorCisgICAgY3VybCAtZyAnd3d3LnNpdGUuY29tL3dlaXJkbmFtZVtdLmh0bWwnCisKKyAgNC40IFdoeSBkbyBJIGdldCBkb3dubG9hZGVkIGRhdGEgZXZlbiB0aG91Z2ggdGhlIHdlYiBwYWdlIGRvZXNuJ3QgZXhpc3Q/CisKKyAgQ3VybCBhc2tzIHJlbW90ZSBzZXJ2ZXJzIGZvciB0aGUgcGFnZSB5b3Ugc3BlY2lmeS4gSWYgdGhlIHBhZ2UgZG9lc24ndCBleGlzdAorICBhdCB0aGUgc2VydmVyLCB0aGUgSFRUUCBwcm90b2NvbCBkZWZpbmVzIGhvdyB0aGUgc2VydmVyIHNob3VsZCByZXNwb25kIGFuZAorICB0aGF0IG1lYW5zIHRoYXQgaGVhZGVycyBhbmQgYSAicGFnZSIgd2lsbCBiZSByZXR1cm5lZC4gVGhhdCdzIHNpbXBseSBob3cKKyAgSFRUUCB3b3Jrcy4KKworICBCeSB1c2luZyB0aGUgLS1mYWlsIG9wdGlvbiB5b3UgY2FuIHRlbGwgY3VybCBleHBsaWNpdGx5IHRvIG5vdCBnZXQgYW55IGRhdGEKKyAgaWYgdGhlIEhUVFAgcmV0dXJuIGNvZGUgZG9lc24ndCBzYXkgc3VjY2Vzcy4KKworICA0LjUgV2h5IGRvIEkgZ2V0IHJldHVybiBjb2RlIFhYWCBmcm9tIGEgSFRUUCBzZXJ2ZXI/CisKKyAgUkZDMjYxNiBjbGVhcmx5IGV4cGxhaW5zIHRoZSByZXR1cm4gY29kZXMuIFRoaXMgaXMgYSBzaG9ydCB0cmFuc2NyaXB0LiBHbworICByZWFkIHRoZSBSRkMgZm9yIGV4YWN0IGRldGFpbHM6CisKKyAgICA0LjUuMSAiNDAwIEJhZCBSZXF1ZXN0IgorCisgICAgVGhlIHJlcXVlc3QgY291bGQgbm90IGJlIHVuZGVyc3Rvb2QgYnkgdGhlIHNlcnZlciBkdWUgdG8gbWFsZm9ybWVkCisgICAgc3ludGF4LiBUaGUgY2xpZW50IFNIT1VMRCBOT1QgcmVwZWF0IHRoZSByZXF1ZXN0IHdpdGhvdXQgbW9kaWZpY2F0aW9ucy4KKworICAgIDQuNS4yICI0MDEgVW5hdXRob3JpemVkIgorCisgICAgVGhlIHJlcXVlc3QgcmVxdWlyZXMgdXNlciBhdXRoZW50aWNhdGlvbi4KKworICAgIDQuNS4zICI0MDMgRm9yYmlkZGVuIgorCisgICAgVGhlIHNlcnZlciB1bmRlcnN0b29kIHRoZSByZXF1ZXN0LCBidXQgaXMgcmVmdXNpbmcgdG8gZnVsZmlsbCBpdC4KKyAgICBBdXRob3JpemF0aW9uIHdpbGwgbm90IGhlbHAgYW5kIHRoZSByZXF1ZXN0IFNIT1VMRCBOT1QgYmUgcmVwZWF0ZWQuCisKKyAgICA0LjUuNCAiNDA0IE5vdCBGb3VuZCIKKworICAgIFRoZSBzZXJ2ZXIgaGFzIG5vdCBmb3VuZCBhbnl0aGluZyBtYXRjaGluZyB0aGUgUmVxdWVzdC1VUkkuIE5vIGluZGljYXRpb24KKyAgICBpcyBnaXZlbiBvZiB3aGV0aGVyIHRoZSBjb25kaXRpb24gaXMgdGVtcG9yYXJ5IG9yIHBlcm1hbmVudC4KKworICAgIDQuNS41ICI0MDUgTWV0aG9kIE5vdCBBbGxvd2VkIgorCisgICAgVGhlIG1ldGhvZCBzcGVjaWZpZWQgaW4gdGhlIFJlcXVlc3QtTGluZSBpcyBub3QgYWxsb3dlZCBmb3IgdGhlIHJlc291cmNlCisgICAgaWRlbnRpZmllZCBieSB0aGUgUmVxdWVzdC1VUkkuIFRoZSByZXNwb25zZSBNVVNUIGluY2x1ZGUgYW4gQWxsb3cgaGVhZGVyCisgICAgY29udGFpbmluZyBhIGxpc3Qgb2YgdmFsaWQgbWV0aG9kcyBmb3IgdGhlIHJlcXVlc3RlZCByZXNvdXJjZS4KKworICAgIDQuNS42ICIzMDEgTW92ZWQgUGVybWFuZW50bHkiCisKKyAgICBJZiB5b3UgZ2V0IHRoaXMgcmV0dXJuIGNvZGUgYW5kIGFuIEhUTUwgb3V0cHV0IHNpbWlsYXIgdG8gdGhpczoKKworICAgICAgIDxIMT5Nb3ZlZCBQZXJtYW5lbnRseTwvSDE+IFRoZSBkb2N1bWVudCBoYXMgbW92ZWQgPEEKKyAgICAgICBIUkVGPSJodHRwOi8vc2FtZV91cmxfbm93X3dpdGhfYV90cmFpbGluZ19zbGFzaC8iPmhlcmU8L0E+LgorCisgICAgaXQgbWlnaHQgYmUgYmVjYXVzZSB5b3UgcmVxdWVzdCBhIGRpcmVjdG9yeSBVUkwgYnV0IHdpdGhvdXQgdGhlIHRyYWlsaW5nCisgICAgc2xhc2guIFRyeSB0aGUgc2FtZSBvcGVyYXRpb24gYWdhaW4gX3dpdGhfIHRoZSB0cmFpbGluZyBVUkwsIG9yIHVzZSB0aGUKKyAgICAtTC8tLWxvY2F0aW9uIG9wdGlvbiB0byBmb2xsb3cgdGhlIHJlZGlyZWN0aW9uLgorCisgIDQuNiBDYW4geW91IHRlbGwgbWUgd2hhdCBlcnJvciBjb2RlIDE0MiBtZWFucz8KKworICBBbGwgY3VybCBlcnJvciBjb2RlcyBhcmUgZGVzY3JpYmVkIGF0IHRoZSBlbmQgb2YgdGhlIG1hbiBwYWdlLCBpbiB0aGUKKyAgc2VjdGlvbiBjYWxsZWQgIkVYSVQgQ09ERVMiLgorCisgIEVycm9yIGNvZGVzIHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoZSBoaWdoZXN0IGRvY3VtZW50ZWQgZXJyb3IgY29kZSBtZWFucworICB0aGF0IGN1cmwgaGFzIGV4aXRlZCBkdWUgdG8gYSBjcmFzaC4gVGhpcyBpcyBhIHNlcmlvdXMgZXJyb3IsIGFuZCB3ZQorICBhcHByZWNpYXRlIGEgZGV0YWlsZWQgYnVnIHJlcG9ydCBmcm9tIHlvdSB0aGF0IGRlc2NyaWJlcyBob3cgd2UgY291bGQgZ28KKyAgYWhlYWQgYW5kIHJlcGVhdCB0aGlzIQorCisgIDQuNyBIb3cgZG8gSSBrZWVwIHVzZXIgbmFtZXMgYW5kIHBhc3N3b3JkcyBzZWNyZXQgaW4gQ3VybCBjb21tYW5kIGxpbmVzPworCisgIFRoaXMgcHJvYmxlbSBoYXMgdHdvIHNpZGVzOgorCisgIFRoZSBmaXJzdCBwYXJ0IGlzIHRvIGF2b2lkIGhhdmluZyBjbGVhci10ZXh0IHBhc3N3b3JkcyBpbiB0aGUgY29tbWFuZCBsaW5lCisgIHNvIHRoYXQgdGhleSBkb24ndCBhcHBlYXIgaW4gJ3BzJyBvdXRwdXRzIGFuZCBzaW1pbGFyLiBUaGF0IGlzIGVhc2lseQorICBhdm9pZGVkIGJ5IHVzaW5nIHRoZSAiLUsiIG9wdGlvbiB0byB0ZWxsIGN1cmwgdG8gcmVhZCBwYXJhbWV0ZXJzIGZyb20gYSBmaWxlCisgIG9yIHN0ZGluIHRvIHdoaWNoIHlvdSBjYW4gcGFzcyB0aGUgc2VjcmV0IGluZm8uIGN1cmwgaXRzZWxmIHdpbGwgYWxzbworICBhdHRlbXB0IHRvICJoaWRlIiB0aGUgZ2l2ZW4gcGFzc3dvcmQgYnkgYmxhbmtpbmcgb3V0IHRoZSBvcHRpb24gLSB0aGlzCisgIGRvZXNuJ3Qgd29yayBvbiBhbGwgcGxhdGZvcm1zLgorCisgIFRvIGtlZXAgdGhlIHBhc3N3b3JkcyBpbiB5b3VyIGFjY291bnQgc2VjcmV0IGZyb20gdGhlIHJlc3Qgb2YgdGhlIHdvcmxkIGlzCisgIG5vdCBhIHRhc2sgdGhhdCBjdXJsIGFkZHJlc3Nlcy4gWW91IGNvdWxkIG9mIGNvdXJzZSBlbmNyeXB0IHRoZW0gc29tZWhvdyB0bworICBhdCBsZWFzdCBoaWRlIHRoZW0gZnJvbSBiZWluZyByZWFkIGJ5IGh1bWFuIGV5ZXMsIGJ1dCB0aGF0IGlzIG5vdCB3aGF0CisgIGFueW9uZSB3b3VsZCBjYWxsIHNlY3VyaXR5LgorCisgIEFsc28gbm90ZSB0aGF0IHJlZ3VsYXIgSFRUUCAodXNpbmcgQmFzaWMgYXV0aGVudGljYXRpb24pIGFuZCBGVFAgcGFzc3dvcmRzCisgIGFyZSBzZW50IGluIGNsZWFyIGFjcm9zcyB0aGUgbmV0d29yay4gQWxsIGl0IHRha2VzIGZvciBhbnlvbmUgdG8gZmV0Y2ggdGhlbQorICBpcyB0byBsaXN0ZW4gb24gdGhlIG5ldHdvcmsuICBFYXZlc2Ryb3BwaW5nIGlzIHZlcnkgZWFzeS4gVXNlIG1vcmUgc2VjdXJlCisgIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgKGxpa2UgRGlnZXN0LCBOZWdvdGlhdGUgb3IgZXZlbiBOVExNKSBvciBjb25zaWRlciB0aGUKKyAgU1NMLWJhc2VkIGFsdGVybmF0aXZlcyBIVFRQUyBhbmQgRlRQUy4KKworICA0LjggSSBmb3VuZCBhIGJ1ZyEKKworICBJdCBpcyBub3QgYSBidWcgaWYgdGhlIGJlaGF2aW9yIGlzIGRvY3VtZW50ZWQuIFJlYWQgdGhlIGRvY3MgZmlyc3QuCisgIEVzcGVjaWFsbHkgY2hlY2sgb3V0IHRoZSBLTk9XTl9CVUdTIGZpbGUsIGl0IG1heSBiZSBhIGRvY3VtZW50ZWQgYnVnIQorCisgIElmIGl0IGlzIGEgcHJvYmxlbSB3aXRoIGEgYmluYXJ5IHlvdSd2ZSBkb3dubG9hZGVkIG9yIGEgcGFja2FnZSBmb3IgeW91cgorICBwYXJ0aWN1bGFyIHBsYXRmb3JtLCB0cnkgY29udGFjdGluZyB0aGUgcGVyc29uIHdobyBidWlsdCB0aGUgcGFja2FnZS9hcmNoaXZlCisgIHlvdSBoYXZlLgorCisgIElmIHRoZXJlIGlzIGEgYnVnLCByZWFkIHRoZSBCVUdTIGRvY3VtZW50IGZpcnN0LiBUaGVuIHJlcG9ydCBpdCBhcyBkZXNjcmliZWQKKyAgaW4gdGhlcmUuCisKKyAgNC45IEN1cmwgY2FuJ3QgYXV0aGVudGljYXRlIHRvIHRoZSBzZXJ2ZXIgdGhhdCByZXF1aXJlcyBOVExNPworCisgIE5UTE0gc3VwcG9ydCByZXF1aXJlcyBPcGVuU1NMLCBHbnVUTFMsIE5TUyBvciBNaWNyb3NvZnQgV2luZG93cyBsaWJyYXJpZXMgYXQKKyAgYnVpbGQtdGltZSB0byBwcm92aWRlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKworICBOVExNIGlzIGEgTWljcm9zb2Z0IHByb3ByaWV0YXJ5IHByb3RvY29sLiBQcm9wcmlldGFyeSBmb3JtYXRzIGFyZSBldmlsLiBZb3UKKyAgc2hvdWxkIG5vdCB1c2Ugc3VjaCBvbmVzLgorCisgIDQuMTAgTXkgSFRUUCByZXF1ZXN0IHVzaW5nIEhFQUQsIFBVVCBvciBERUxFVEUgZG9lc24ndCB3b3JrIQorCisgIE1hbnkgd2ViIHNlcnZlcnMgYWxsb3cgb3IgZGVtYW5kIHRoYXQgdGhlIGFkbWluaXN0cmF0b3IgY29uZmlndXJlcyB0aGUKKyAgc2VydmVyIHByb3Blcmx5IGZvciB0aGVzZSByZXF1ZXN0cyB0byB3b3JrIG9uIHRoZSB3ZWIgc2VydmVyLgorCisgIFNvbWUgc2VydmVycyBzZWVtIHRvIHN1cHBvcnQgSEVBRCBvbmx5IG9uIGNlcnRhaW4ga2luZHMgb2YgVVJMcy4KKworICBUbyBmdWxseSBncmFzcCB0aGlzLCB0cnkgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBwYXJ0aWN1bGFyIHNlcnZlcgorICBzb2Z0d2FyZSB5b3UncmUgdHJ5aW5nIHRvIGludGVyYWN0IHdpdGguIFRoaXMgaXMgbm90IGFueXRoaW5nIGN1cmwgY2FuIGRvCisgIGFueXRoaW5nIGFib3V0LgorCisgIDQuMTEgV2h5IGRvZXMgbXkgSFRUUCByYW5nZSByZXF1ZXN0cyByZXR1cm4gdGhlIGZ1bGwgZG9jdW1lbnQ/CisKKyAgQmVjYXVzZSB0aGUgcmFuZ2UgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlciwgb3IgdGhlIHNlcnZlciBtYXkKKyAgY2hvb3NlIHRvIGlnbm9yZSBpdCBhbmQgcmV0dXJuIHRoZSBmdWxsIGRvY3VtZW50IGFueXdheS4KKworICA0LjEyIFdoeSBkbyBJIGdldCAiY2VydGlmaWNhdGUgdmVyaWZ5IGZhaWxlZCIgPworCisgIFlvdSBpbnZva2UgY3VybCA3LjEwIG9yIGxhdGVyIHRvIGNvbW11bmljYXRlIG9uIGEgaHR0cHM6Ly8gVVJMIGFuZCBnZXQgYW4KKyAgZXJyb3IgYmFjayBsb29raW5nIHNvbWV0aGluZyBzaW1pbGFyIHRvIHRoaXM6CisKKyAgICAgIGN1cmw6ICgzNSkgU1NMOiBlcnJvcjoxNDA5MDA4NjpTU0wgcm91dGluZXM6CisgICAgICBTU0wzX0dFVF9TRVJWRVJfQ0VSVElGSUNBVEU6Y2VydGlmaWNhdGUgdmVyaWZ5IGZhaWxlZAorCisgIFRoZW4gaXQgbWVhbnMgdGhhdCBjdXJsIGNvdWxkbid0IHZlcmlmeSB0aGF0IHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSB3YXMKKyAgZ29vZC4gQ3VybCB2ZXJpZmllcyB0aGUgY2VydGlmaWNhdGUgdXNpbmcgdGhlIENBIGNlcnQgYnVuZGxlIHRoYXQgY29tZXMgd2l0aAorICB0aGUgY3VybCBpbnN0YWxsYXRpb24uCisKKyAgVG8gZGlzYWJsZSB0aGUgdmVyaWZpY2F0aW9uICh3aGljaCBtYWtlcyBpdCBhY3QgbGlrZSBjdXJsIGRpZCBiZWZvcmUgNy4xMCksCisgIHVzZSAtay4gVGhpcyBkb2VzIGhvd2V2ZXIgZW5hYmxlIG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MuCisKKyAgSWYgeW91IGdldCB0aGlzIGZhaWx1cmUgYnV0IGFyZSBoYXZpbmcgYSBDQSBjZXJ0IGJ1bmRsZSBpbnN0YWxsZWQgYW5kIHVzZWQsCisgIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSBpcyBub3Qgc2lnbmVkIGJ5IG9uZSBvZiB0aGUgQ0EncyBpbiB0aGUgYnVuZGxlLiBJdAorICBtaWdodCBmb3IgZXhhbXBsZSBiZSBzZWxmLXNpZ25lZC4gWW91IHRoZW4gY29ycmVjdCB0aGlzIHByb2JsZW0gYnkgb2J0YWluaW5nCisgIGEgdmFsaWQgQ0EgY2VydCBmb3IgdGhlIHNlcnZlci4gT3IgYWdhaW4sIGRlY3JlYXNlIHRoZSBzZWN1cml0eSBieSBkaXNhYmxpbmcKKyAgdGhpcyBjaGVjay4KKworICBEZXRhaWxzIGFyZSBhbHNvIGluIHRoZSBTU0xDRVJUUyBmaWxlIGluIHRoZSByZWxlYXNlIGFyY2hpdmVzLCBmb3VuZCBvbmxpbmUKKyAgaGVyZTogaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL3NzbGNlcnRzLmh0bWwKKworICA0LjEzIFdoeSBpcyBjdXJsIC1SIG9uIFdpbmRvd3Mgb25lIGhvdXIgb2ZmPworCisgIER1cmluZyBkYXlsaWdodCBzYXZpbmdzIHRpbWUsIHdoZW4gLVIgaXMgdXNlZCwgY3VybCB3aWxsIHNldCBhIHRpbWUgdGhhdAorICBhcHBlYXJzIG9uZSBob3VyIG9mZi4gVGhpcyBoYXBwZW5zIGR1ZSB0byBhIGZsYXcgaW4gaG93IFdpbmRvd3Mgc3RvcmVzIGFuZAorICB1c2VzIGZpbGUgbW9kaWZpY2F0aW9uIHRpbWVzIGFuZCBpdCBpcyBub3QgZWFzaWx5IHdvcmtlZCBhcm91bmQuIEZvciBkZXRhaWxzCisgIG9uIHRoaXMgcHJvYmxlbSwgcmVhZCB0aGlzOiBodHRwOi8vd3d3LmNvZGVwcm9qZWN0LmNvbS9kYXRldGltZS9kc3RidWdzLmFzcAorCisgIDQuMTQgUmVkaXJlY3RzIHdvcmsgaW4gYnJvd3NlciBidXQgbm90IHdpdGggY3VybCEKKworICBjdXJsIHN1cHBvcnRzIEhUVFAgcmVkaXJlY3RzIGZpbmUgKHNlZSBpdGVtIDMuOCkuIEJyb3dzZXJzIGdlbmVyYWxseSBzdXBwb3J0CisgIGF0IGxlYXN0IHR3byBvdGhlciB3YXlzIHRvIHBlcmZvcm0gZGlyZWN0cyB0aGF0IGN1cmwgZG9lcyBub3Q6CisKKyAgLSBNZXRhIHRhZ3MuIFlvdSBjYW4gd3JpdGUgYSBIVE1MIHRhZyB0aGF0IHdpbGwgY2F1c2UgdGhlIGJyb3dzZXIgdG8KKyAgICByZWRpcmVjdCB0byBhbm90aGVyIGdpdmVuIFVSTCBhZnRlciBhIGNlcnRhaW4gdGltZS4KKworICAtIEphdmFzY3JpcHQuIFlvdSBjYW4gd3JpdGUgYSBKYXZhc2NyaXB0IHByb2dyYW0gZW1iZWRkZWQgaW4gYSBIVE1MIHBhZ2UKKyAgICB0aGF0IHJlZGlyZWN0cyB0aGUgYnJvd3NlciB0byBhbm90aGVyIGdpdmVuIFVSTC4KKworICBUaGVyZSBpcyBubyB3YXkgdG8gbWFrZSBjdXJsIGZvbGxvdyB0aGVzZSByZWRpcmVjdHMuIFlvdSBtdXN0IGVpdGhlcgorICBtYW51YWxseSBmaWd1cmUgb3V0IHdoYXQgdGhlIHBhZ2UgaXMgc2V0IHRvIGRvLCBvciB5b3Ugd3JpdGUgYSBzY3JpcHQgdGhhdAorICBwYXJzZXMgdGhlIHJlc3VsdHMgYW5kIGZldGNoZXMgdGhlIG5ldyBVUkwuCisKKyAgNC4xNSBGVFBTIGRvZXNuJ3Qgd29yaworCisgIGN1cmwgc3VwcG9ydHMgRlRQUyAoc29tZXRpbWVzIGtub3duIGFzIEZUUC1TU0wpIGJvdGggaW1wbGljaXQgYW5kIGV4cGxpY2l0CisgIG1vZGUuCisKKyAgV2hlbiBhIFVSTCBpcyB1c2VkIHRoYXQgc3RhcnRzIHdpdGggRlRQUzovLywgY3VybCBhc3N1bWVzIGltcGxpY2l0IFNTTCBvbgorICB0aGUgY29udHJvbCBjb25uZWN0aW9uIGFuZCB3aWxsIHRoZXJlZm9yZSBpbW1lZGlhdGVseSBjb25uZWN0IGFuZCB0cnkgdG8KKyAgc3BlYWsgU1NMLiBGVFBTOi8vIGNvbm5lY3Rpb25zIGRlZmF1bHQgdG8gcG9ydCA5OTAuCisKKyAgVG8gdXNlIGV4cGxpY2l0IEZUUFMsIHlvdSB1c2UgYSBGVFA6Ly8gVVJMIGFuZCB0aGUgLS1mdHAtc3NsIG9wdGlvbiAob3Igb25lCisgIG9mIGl0cyByZWxhdGVkIGZsYXZvdXJzKS4gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbWV0aG9kLCBhbmQgdGhlIG9uZQorICBtYW5kYXRlZCBieSBSRkM0MjE3LiBUaGlzIGtpbmQgb2YgY29ubmVjdGlvbiB0aGVuIG9mIGNvdXJzZSB1c2VzIHRoZQorICBzdGFuZGFyZCBGVFAgcG9ydCAyMSBieSBkZWZhdWx0LgorCisgIDQuMTYgTXkgSFRUUCBQT1NUIG9yIFBVVCByZXF1ZXN0cyBhcmUgc2xvdyEKKworICBsaWJjdXJsIG1ha2VzIGFsbCBQT1NUIGFuZCBQVVQgcmVxdWVzdHMgKGV4Y2VwdCBmb3IgUE9TVCByZXF1ZXN0cyB3aXRoIGEKKyAgdmVyeSB0aW55IHJlcXVlc3QgYm9keSkgdXNlIHRoZSAiRXhwZWN0OiAxMDAtY29udGludWUiIGhlYWRlci4gVGhpcyBoZWFkZXIKKyAgYWxsb3dzIHRoZSBzZXJ2ZXIgdG8gZGVueSB0aGUgb3BlcmF0aW9uIGVhcmx5IHNvIHRoYXQgbGliY3VybCBjYW4gYmFpbCBvdXQKKyAgYWxyZWFkeSBiZWZvcmUgaGF2aW5nIHRvIHNlbmQgYW55IGRhdGEuIFRoaXMgaXMgdXNlZnVsIGluIGF1dGhlbnRpY2F0aW9uCisgIGNhc2VzIGFuZCBvdGhlcnMuCisKKyAgSG93ZXZlciwgbWFueSBzZXJ2ZXJzIGRvbid0IGltcGxlbWVudCB0aGUgRXhwZWN0OiBzdHVmZiBwcm9wZXJseSBhbmQgaWYgdGhlCisgIHNlcnZlciBkb2Vzbid0IHJlc3BvbmQgKHBvc2l0aXZlbHkpIHdpdGhpbiAxIHNlY29uZCBsaWJjdXJsIHdpbGwgY29udGludWUKKyAgYW5kIHNlbmQgb2ZmIHRoZSBkYXRhIGFueXdheS4KKworICBZb3UgY2FuIGRpc2FibGUgbGliY3VybCdzIHVzZSBvZiB0aGUgRXhwZWN0OiBoZWFkZXIgdGhlIHNhbWUgd2F5IHlvdSBkaXNhYmxlCisgIGFueSBoZWFkZXIsIHVzaW5nIC1IIC8gQ1VSTE9QVF9IVFRQSEVBREVSLCBvciBieSBmb3JjaW5nIGl0IHRvIHVzZSBIVFRQIDEuMC4KKworICA0LjE3IE5vbi1mdW5jdGlvbmFsIGNvbm5lY3QgdGltZW91dHMKKworICBJbiBtb3N0IFdpbmRvd3Mgc2V0dXBzIGhhdmluZyBhIHRpbWVvdXQgbG9uZ2VyIHRoYW4gMjEgc2Vjb25kcyBtYWtlIG5vCisgIGRpZmZlcmVuY2UsIGFzIGl0IHdpbGwgb25seSBzZW5kIDMgVENQIFNZTiBwYWNrZXRzIGFuZCBubyBtb3JlLiBUaGUgc2Vjb25kCisgIHBhY2tldCBzZW50IHRocmVlIHNlY29uZHMgYWZ0ZXIgdGhlIGZpcnN0IGFuZCB0aGUgdGhpcmQgc2l4IHNlY29uZHMgYWZ0ZXIKKyAgdGhlIHNlY29uZC4gIE5vIG1vcmUgdGhhbiB0aHJlZSBwYWNrZXRzIGFyZSBzZW50LCBubyBtYXR0ZXIgaG93IGxvbmcgdGhlCisgIHRpbWVvdXQgaXMgc2V0LgorCisgIFNlZSBvcHRpb24gVGNwTWF4Q29ubmVjdFJldHJhbnNtaXNzaW9ucyBvbiB0aGlzIHBhZ2U6CisgIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20vP3NjaWQ9a2IlM0Jlbi11cyUzQjE3NTUyMyZ4PTYmeT03CisKKyAgQWxzbywgZXZlbiBvbiBub24tV2luZG93cyBzeXN0ZW1zIHRoZXJlIG1heSBydW4gYSBmaXJld2FsbCBvciBhbnRpLXZpcnVzCisgIHNvZnR3YXJlIG9yIHNpbWlsYXIgdGhhdCBhY2NlcHRzIHRoZSBjb25uZWN0aW9uIGJ1dCBkb2VzIG5vdCBhY3R1YWxseSBkbworICBhbnl0aGluZyBlbHNlLiBUaGlzIHdpbGwgbWFrZSAobGliKWN1cmwgdG8gY29uc2lkZXIgdGhlIGNvbm5lY3Rpb24gY29ubmVjdGVkCisgIGFuZCB0aHVzIHRoZSBjb25uZWN0IHRpbWVvdXQgd29uJ3QgdHJpZ2dlci4KKworICA0LjE4IGZpbGU6Ly8gVVJMcyBjb250YWluaW5nIGRyaXZlIGxldHRlcnMgKFdpbmRvd3MsIE5ldFdhcmUpCisKKyAgV2hlbiB1c2luZyBjVVJMIHRvIHRyeSB0byBkb3dubG9hZCBhIGxvY2FsIGZpbGUsIG9uZSBtaWdodCB1c2UgYSBVUkwKKyAgaW4gdGhpcyBmb3JtYXQ6CisKKyAgZmlsZTovL0Q6L2JsYWgudHh0CisKKyAgWW91J2xsIGZpbmQgdGhhdCBldmVuIGlmIEQ6XGJsYWgudHh0IGRvZXMgZXhpc3QsIGNVUkwgcmV0dXJucyBhICdmaWxlCisgIG5vdCBmb3VuZCcgZXJyb3IuCisKKyAgQWNjb3JkaW5nIHRvIFJGQyAxNzM4IChodHRwOi8vd3d3LmZhcXMub3JnL3JmY3MvcmZjMTczOC5odG1sKSwKKyAgZmlsZTovLyBVUkxzIG11c3QgY29udGFpbiBhIGhvc3QgY29tcG9uZW50LCBidXQgaXQgaXMgaWdub3JlZCBieQorICBtb3N0IGltcGxlbWVudGF0aW9ucy4gSW4gdGhlIGFib3ZlIGV4YW1wbGUsICdEOicgaXMgdHJlYXRlZCBhcyB0aGUKKyAgaG9zdCBjb21wb25lbnQsIGFuZCBpcyB0YWtlbiBhd2F5LiBUaHVzLCBjVVJMIHRyaWVzIHRvIG9wZW4gJy9ibGFoLnR4dCcuCisgIElmIHlvdXIgc3lzdGVtIGlzIGluc3RhbGxlZCB0byBkcml2ZSBDOiwgdGhhdCB3aWxsIHJlc29sdmUgdG8gJ0M6XGJsYWgudHh0JywKKyAgYW5kIGlmIHRoYXQgZG9lc24ndCBleGlzdCB5b3Ugd2lsbCBnZXQgdGhlIG5vdCBmb3VuZCBlcnJvci4KKworICBUbyBmaXggdGhpcyBwcm9ibGVtLCB1c2UgZmlsZTovLyBVUkxzIHdpdGggKnRocmVlKiBsZWFkaW5nIHNsYXNoZXM6CisKKyAgZmlsZTovLy9EOi9ibGFoLnR4dAorCisgIEFsdGVybmF0aXZlbHksIGlmIGl0IG1ha2VzIG1vcmUgc2Vuc2UsIHNwZWNpZnkgJ2xvY2FsaG9zdCcgYXMgdGhlIGhvc3QKKyAgY29tcG9uZW50OgorCisgIGZpbGU6Ly9sb2NhbGhvc3QvRDovYmxhaC50eHQKKworICBJbiBlaXRoZXIgY2FzZSwgY1VSTCBzaG91bGQgbm93IGJlIGxvb2tpbmcgZm9yIHRoZSBjb3JyZWN0IGZpbGUuCisKKyAgNC4xOSBXaHkgZG9lc24ndCBjVVJMIHJldHVybiBhbiBlcnJvciB3aGVuIHRoZSBuZXR3b3JrIGNhYmxlIGlzIHVucGx1Z2dlZD8KKworICBVbnBsdWdnaW5nIHRoZSBjYWJsZSBpcyBub3QgYW4gZXJyb3Igc2l0dWF0aW9uLiBUaGUgVENQL0lQIHByb3RvY29sIHN0YWNrCisgIHdhcyBkZXNpZ25lZCB0byBiZSBmYXVsdCB0b2xlcmFudCwgc28gZXZlbiB0aG91Z2ggdGhlcmUgbWF5IGJlIGEgcGh5c2ljYWwKKyAgYnJlYWsgc29tZXdoZXJlIHRoZSBjb25uZWN0aW9uIHNob3VsZG4ndCBiZSBhZmZlY3RlZCwganVzdCBwb3NzaWJseQorICBkZWxheWVkLiAgRXZlbnR1YWxseSwgdGhlIHBoeXNpY2FsIGJyZWFrIHdpbGwgYmUgZml4ZWQgb3IgdGhlIGRhdGEgd2lsbCBiZQorICByZS1yb3V0ZWQgYXJvdW5kIHRoZSBwaHlzaWNhbCBwcm9ibGVtLgorCisgIEluIHN1Y2ggY2FzZXMsIHRoZSBUQ1AvSVAgc3RhY2sgaXMgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyB3aGVuIHRoZQorICBuZXR3b3JrIGNvbm5lY3Rpb24gaXMgaXJyZXZvY2FibHkgbG9zdC4gU2luY2Ugd2l0aCBzb21lIHByb3RvY29scyBpdCBpcworICBwZXJmZWN0bHkgbGVnYWwgZm9yIHRoZSBjbGllbnQgd2FpdCBpbmRlZmluaXRlbHkgZm9yIGRhdGEsIHRoZSBzdGFjayBtYXkKKyAgbmV2ZXIgcmVwb3J0IGEgcHJvYmxlbSwgYW5kIGV2ZW4gd2hlbiBpdCBkb2VzLCBpdCBjYW4gdGFrZSB1cCB0byAyMCBtaW51dGVzCisgIGZvciBpdCB0byBkZXRlY3QgYW4gaXNzdWUuICBUaGUgY3VybCBvcHRpb24gLS1rZWVwYWxpdmUtdGltZSBlbmFibGVzCisgIGtlZXAtYWxpdmUgc3VwcG9ydCBpbiB0aGUgVENQL0lQIHN0YWNrIHdoaWNoIG1ha2VzIGl0IHBlcmlvZGljYWxseSBwcm9iZSB0aGUKKyAgY29ubmVjdGlvbiB0byBtYWtlIHN1cmUgaXQgaXMgc3RpbGwgYXZhaWxhYmxlIHRvIHNlbmQgZGF0YS4gVGhhdCBzaG91bGQKKyAgcmVsaWFibHkgZGV0ZWN0IGFueSBUQ1AvSVAgbmV0d29yayBmYWlsdXJlLgorCisgIEJ1dCBldmVuIHRoYXQgd29uJ3QgZGV0ZWN0IHRoZSBuZXR3b3JrIGdvaW5nIGRvd24gYmVmb3JlIHRoZSBUQ1AvSVAKKyAgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCAoZS5nLiBkdXJpbmcgYSBETlMgbG9va3VwKSBvciB1c2luZyBwcm90b2NvbHMgdGhhdAorICBkb24ndCB1c2UgVENQLiAgVG8gaGFuZGxlIHRob3NlIHNpdHVhdGlvbnMsIGN1cmwgb2ZmZXJzIGEgbnVtYmVyIG9mIHRpbWVvdXRzCisgIG9uIGl0cyBvd24uIC0tc3BlZWQtbGltaXQvLS1zcGVlZC10aW1lIHdpbGwgYWJvcnQgaWYgdGhlIGRhdGEgdHJhbnNmZXIgcmF0ZQorICBmYWxscyB0b28gbG93LCBhbmQgLS1jb25uZWN0LXRpbWVvdXQgYW5kIC0tbWF4LXRpbWUgY2FuIGJlIHVzZWQgdG8gcHV0IGFuCisgIG92ZXJhbGwgdGltZW91dCBvbiB0aGUgY29ubmVjdGlvbiBwaGFzZSBvciB0aGUgZW50aXJlIHRyYW5zZmVyLgorCisKKzUuIGxpYmN1cmwgSXNzdWVzCisKKyAgNS4xIElzIGxpYmN1cmwgdGhyZWFkLXNhZmU/CisKKyAgWWVzLgorCisgIFdlIGhhdmUgd3JpdHRlbiB0aGUgbGliY3VybCBjb2RlIHNwZWNpZmljYWxseSBhZGp1c3RlZCBmb3IgbXVsdGktdGhyZWFkZWQKKyAgcHJvZ3JhbXMuIGxpYmN1cmwgd2lsbCB1c2UgdGhyZWFkLXNhZmUgZnVuY3Rpb25zIGluc3RlYWQgb2Ygbm9uLXNhZmUgb25lcyBpZgorICB5b3VyIHN5c3RlbSBoYXMgc3VjaC4KKworICBJZiB5b3UgdXNlIGEgT3BlblNTTC1wb3dlcmVkIGxpYmN1cmwgaW4gYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudCwgeW91CisgIG5lZWQgdG8gcHJvdmlkZSBvbmUgb3IgdHdvIGxvY2tpbmcgZnVuY3Rpb25zOgorCisgICAgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2NyeXB0by90aHJlYWRzLmh0bWwKKworICBJZiB5b3UgdXNlIGEgR251VExTLXBvd2VyZWQgbGliY3VybCBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50LCB5b3UKKyAgbmVlZCB0byBwcm92aWRlIGxvY2tpbmcgZnVuY3Rpb24ocykgZm9yIGxpYmdjcnlwdCAod2hpY2ggaXMgdXNlZCBieSBHbnVUTFMKKyAgZm9yIHRoZSBjcnlwdG8gZnVuY3Rpb25zKS4KKworICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbnV0bHMvbWFudWFsL2h0bWxfbm9kZS9NdWx0aV8wMDJkdGhyZWFkZWQtYXBwbGljYXRpb25zLmh0bWwKKworICBObyBzcGVjaWFsIGxvY2tpbmcgaXMgbmVlZGVkIHdpdGggYSBOU1MtcG93ZXJlZCBsaWJjdXJsLiBOU1MgaXMgdGhyZWFkLXNhZmUuCisKKyAgNS4yIEhvdyBjYW4gSSByZWNlaXZlIGFsbCBkYXRhIGludG8gYSBsYXJnZSBtZW1vcnkgY2h1bms/CisKKyAgWyBTZWUgYWxzbyB0aGUgZXhhbXBsZXMvZ2V0aW5tZW1vcnkuYyBzb3VyY2UgXQorCisgIFlvdSBhcmUgaW4gZnVsbCBjb250cm9sIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGV2ZXJ5IHRpbWUKKyAgdGhlcmUgaXMgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSByZW1vdGUgc2VydmVyLiBZb3UgY2FuIG1ha2UgdGhhdCBjYWxsYmFjayBkbworICB3aGF0ZXZlciB5b3Ugd2FudC4gWW91IGRvIG5vdCBoYXZlIHRvIHdyaXRlIHRoZSByZWNlaXZlZCBkYXRhIHRvIGEgZmlsZS4KKworICBPbmUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGNvdWxkIGJlIHRvIGhhdmUgYSBwb2ludGVyIHRvIGEgc3RydWN0IHRoYXQgeW91CisgIHBhc3MgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBZb3Ugc2V0IHRoZSBwb2ludGVyIHVzaW5nIHRoZQorICBDVVJMT1BUX1dSSVRFREFUQSBvcHRpb24uIFRoZW4gdGhhdCBwb2ludGVyIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaworICBpbnN0ZWFkIG9mIGEgRklMRSAqIHRvIGEgZmlsZToKKworICAgICAgICAvKiBpbWFnaW5hcnkgc3RydWN0ICovCisgICAgICAgIHN0cnVjdCBNZW1vcnlTdHJ1Y3QgeworICAgICAgICAgIGNoYXIgKm1lbW9yeTsKKyAgICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAgICAgfTsKKworICAgICAgICAvKiBpbWFnaW5hcnkgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKyAgICAgICAgc2l6ZV90CisgICAgICAgIFdyaXRlTWVtb3J5Q2FsbGJhY2sodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpkYXRhKQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IHJlYWxzaXplID0gc2l6ZSAqIG5tZW1iOworICAgICAgICAgIHN0cnVjdCBNZW1vcnlTdHJ1Y3QgKm1lbSA9IChzdHJ1Y3QgTWVtb3J5U3RydWN0ICopZGF0YTsKKworICAgICAgICAgIG1lbS0+bWVtb3J5ID0gKGNoYXIgKilyZWFsbG9jKG1lbS0+bWVtb3J5LCBtZW0tPnNpemUgKyByZWFsc2l6ZSArIDEpOworICAgICAgICAgIGlmIChtZW0tPm1lbW9yeSkgeworICAgICAgICAgICAgbWVtY3B5KCYobWVtLT5tZW1vcnlbbWVtLT5zaXplXSksIHB0ciwgcmVhbHNpemUpOworICAgICAgICAgICAgbWVtLT5zaXplICs9IHJlYWxzaXplOworICAgICAgICAgICAgbWVtLT5tZW1vcnlbbWVtLT5zaXplXSA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiByZWFsc2l6ZTsKKyAgICAgICAgfQorCisgIDUuMyBIb3cgZG8gSSBmZXRjaCBtdWx0aXBsZSBmaWxlcyB3aXRoIGxpYmN1cmw/CisKKyAgbGliY3VybCBoYXMgZXhjZWxsZW50IHN1cHBvcnQgZm9yIHRyYW5zZmVycmluZyBtdWx0aXBsZSBmaWxlcy4gWW91IHNob3VsZAorICBqdXN0IHJlcGVhdGVkbHkgc2V0IG5ldyBVUkxzIHdpdGggY3VybF9lYXN5X3NldG9wdCgpIGFuZCB0aGVuIHRyYW5zZmVyIGl0CisgIHdpdGggY3VybF9lYXN5X3BlcmZvcm0oKS4gVGhlIGhhbmRsZSB5b3UgZ2V0IGZyb20gY3VybF9lYXN5X2luaXQoKSBpcyBub3QKKyAgb25seSByZXVzYWJsZSwgYnV0IHlvdSdyZSBldmVuIGVuY291cmFnZWQgdG8gcmV1c2UgaXQgaWYgeW91IGNhbiwgYXMgdGhhdAorICB3aWxsIGVuYWJsZSBsaWJjdXJsIHRvIHVzZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLgorCisgIDUuNCBEb2VzIGxpYmN1cmwgZG8gV2luc29jayBpbml0aWFsaXphdGlvbiBvbiB3aW4zMiBzeXN0ZW1zPworCisgIFllcywgaWYgdG9sZCB0byBpbiB0aGUgY3VybF9nbG9iYWxfaW5pdCgpIGNhbGwuCisKKyAgNS41IERvZXMgQ1VSTE9QVF9XUklURURBVEEgYW5kIENVUkxPUFRfUkVBRERBVEEgd29yayBvbiB3aW4zMiA/CisKKyAgWWVzLCBidXQgeW91IGNhbm5vdCBvcGVuIGEgRklMRSAqIGFuZCBwYXNzIHRoZSBwb2ludGVyIHRvIGEgRExMIGFuZCBoYXZlCisgIHRoYXQgRExMIHVzZSB0aGUgRklMRSAqIChhcyB0aGUgRExMIGFuZCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIGNhbm5vdCBhY2Nlc3MKKyAgZWFjaCBvdGhlcnMnIHZhcmlhYmxlIG1lbW9yeSBhcmVhcykuIElmIHlvdSBzZXQgQ1VSTE9QVF9XUklURURBVEEgeW91IG11c3QKKyAgYWxzbyB1c2UgQ1VSTE9QVF9XUklURUZVTkNUSU9OIGFzIHdlbGwgdG8gc2V0IGEgZnVuY3Rpb24gdGhhdCB3cml0ZXMgdGhlCisgIGZpbGUsIGV2ZW4gaWYgdGhhdCBzaW1wbHkgd3JpdGVzIHRoZSBkYXRhIHRvIHRoZSBzcGVjaWZpZWQgRklMRSAqLgorICBTaW1pbGFybHksIGlmIHlvdSB1c2UgQ1VSTE9QVF9SRUFEREFUQSB5b3UgbXVzdCBhbHNvIHNwZWNpZnkKKyAgQ1VSTE9QVF9SRUFERlVOQ1RJT04uCisKKyAgNS42IFdoYXQgYWJvdXQgS2VlcC1BbGl2ZSBvciBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zPworCisgIGN1cmwgYW5kIGxpYmN1cmwgaGF2ZSBleGNlbGxlbnQgc3VwcG9ydCBmb3IgcGVyc2lzdGVudCBjb25uZWN0aW9ucyB3aGVuCisgIHRyYW5zZmVycmluZyBzZXZlcmFsIGZpbGVzIGZyb20gdGhlIHNhbWUgc2VydmVyLiAgQ3VybCB3aWxsIGF0dGVtcHQgdG8gcmV1c2UKKyAgY29ubmVjdGlvbnMgZm9yIGFsbCBVUkxzIHNwZWNpZmllZCBvbiB0aGUgc2FtZSBjb21tYW5kIGxpbmUvY29uZmlnIGZpbGUsIGFuZAorICBsaWJjdXJsIHdpbGwgcmV1c2UgY29ubmVjdGlvbnMgZm9yIGFsbCB0cmFuc2ZlcnMgdGhhdCBhcmUgbWFkZSB1c2luZyB0aGUKKyAgc2FtZSBsaWJjdXJsIGhhbmRsZS4KKworICBXaGVuIHlvdSB1c2UgdGhlIGVhc3kgaW50ZXJmYWNlLCB0aGUgY29ubmVjdGlvbiBjYWNoZSBpcyBrZXB0IHdpdGhpbiB0aGUKKyAgZWFzeSBoYW5kbGUuIElmIHlvdSBpbnN0ZWFkIHVzZSB0aGUgbXVsdGkgaW50ZXJmYWNlLCB0aGUgY29ubmVjdGlvbiBjYWNoZQorICB3aWxsIGJlIGtlcHQgd2l0aGluIHRoZSBtdWx0aSBoYW5kbGUgYW5kIHdpbGwgYmUgc2hhcmVkIGFtb25nIGFsbCB0aGUgZWFzeQorICBoYW5kbGVzIHRoYXQgYXJlIHVzZWQgd2l0aGluIHRoZSBzYW1lIG11bHRpIGhhbmRsZS4KKworICA1LjcgTGluayBlcnJvcnMgd2hlbiBidWlsZGluZyBsaWJjdXJsIG9uIFdpbmRvd3MhCisKKyAgWW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91ciBwcm9qZWN0LCBhbmQgYWxsIHRoZSBsaWJyYXJpZXMgKGJvdGggc3RhdGljCisgIGFuZCBkeW5hbWljKSB0aGF0IGl0IGxpbmtzIGFnYWluc3QsIGFyZSBjb21waWxlZC9saW5rZWQgYWdhaW5zdCB0aGUgc2FtZSBydW4KKyAgdGltZSBsaWJyYXJ5LgorCisgIFRoaXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgL01ELCAvTUwsIC9NVCAoYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgL00/ZCkKKyAgb3B0aW9ucyB0byB0aGUgY29tbWFuZCBsaW5lIGNvbXBpbGVyLiAvTUQgKGxpbmtpbmcgYWdhaW5zdCBNU1ZDUlQgZGxsKSBzZWVtcworICB0byBiZSB0aGUgbW9zdCBjb21tb25seSB1c2VkIG9wdGlvbi4KKworICBXaGVuIGJ1aWxkaW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgc3RhdGljIGxpYmN1cmwgbGlicmFyeSwgeW91IG11c3QKKyAgYWRkIC1EQ1VSTF9TVEFUSUNMSUIgdG8geW91ciBDRkxBR1MuIE90aGVyd2lzZSB0aGUgbGlua2VyIHdpbGwgbG9vayBmb3IKKyAgZHluYW1pYyBpbXBvcnQgc3ltYm9scy4gSWYgeW91J3JlIHVzaW5nIFZpc3VhbCBTdHVkaW8sIHlvdSBuZWVkIHRvIGluc3RlYWQKKyAgYWRkIENVUkxfU1RBVElDTElCIGluIHRoZSAiUHJlcHJvY2Vzc29yIERlZmluaXRpb25zIiBzZWN0aW9uLgorCisgIElmIHlvdSBnZXQgbGlua2VyIGVycm9yIGxpa2UgInVua25vd24gc3ltYm9sIF9faW1wX19jdXJsX2Vhc3lfaW5pdCAuLi4iIHlvdQorICBoYXZlIGxpbmtlZCBhZ2FpbnN0IHRoZSB3cm9uZyAoc3RhdGljKSBsaWJyYXJ5LiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZQorICBsaWJjdXJsLmRsbCBhbmQgaW1wb3J0IGxpYiwgeW91IGRvbid0IG5lZWQgYW55IGV4dHJhIENGTEFHUywgYnV0IHVzZSBvbmUgb2YKKyAgdGhlIGltcG9ydCBsaWJyYXJpZXMgYmVsb3cuIFRoZXNlIGFyZSB0aGUgbGlicmFyaWVzIHByb2R1Y2VkIGJ5IHRoZSB2YXJpb3VzCisgIGxpYi9NYWtlZmlsZS4qIGZpbGVzOgorCisgICAgICAgVGFyZ2V0OiAgICAgICAgICBzdGF0aWMgbGliLiAgIGltcG9ydCBsaWIgZm9yIGxpYmN1cmwqLmRsbC4KKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIE1pbmdXOiAgICAgICAgICAgbGliY3VybC5hICAgICBsaWJjdXJsZGxsLmEKKyAgICAgICBNU1ZDIChyZWxlYXNlKTogIGxpYmN1cmwubGliICAgbGliY3VybF9pbXAubGliCisgICAgICAgTVNWQyAoZGVidWcpOiAgICBsaWJjdXJsZC5saWIgIGxpYmN1cmxkX2ltcC5saWIKKyAgICAgICBCb3JsYW5kOiAgICAgICAgIGxpYmN1cmwubGliICAgbGliY3VybF9pbXAubGliCisKKyAgNS44IGxpYmN1cmwuc28uWDogb3BlbiBmYWlsZWQ6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworICBUaGlzIGlzIGFuIGVycm9yIG1lc3NhZ2UgeW91IG1pZ2h0IGdldCB3aGVuIHlvdSB0cnkgdG8gcnVuIGEgcHJvZ3JhbSBsaW5rZWQKKyAgd2l0aCBhIHNoYXJlZCB2ZXJzaW9uIG9mIGxpYmN1cmwgYW5kIHlvdXIgcnVuLXRpbWUgbGlua2VyIChsZC5zbykgY291bGRuJ3QKKyAgZmluZCB0aGUgc2hhcmVkIGxpYnJhcnkgbmFtZWQgbGliY3VybC5zby5YLiAoV2hlcmUgWCBpcyB0aGUgbnVtYmVyIG9mIHRoZQorICBjdXJyZW50IGxpYmN1cmwgQUJJLCB0eXBpY2FsbHkgMyBvciA0KS4KKworICBZb3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBsZC5zbyBmaW5kcyBsaWJjdXJsLnNvLlguIFlvdSBjYW4gZG8gdGhhdAorICBtdWx0aXBsZSB3YXlzLCBhbmQgaXQgZGlmZmVycyBzb21ld2hhdCBiZXR3ZWVuIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcywKKyAgYnV0IHRoZXkgYXJlIHVzdWFsbHk6CisKKyAgKiBBZGQgYW4gb3B0aW9uIHRvIHRoZSBsaW5rZXIgY29tbWFuZCBsaW5lIHRoYXQgc3BlY2lmeSB0aGUgaGFyZC1jb2RlZCBwYXRoCisgICAgdGhlIHJ1bi10aW1lIGxpbmtlciBzaG91bGQgY2hlY2sgZm9yIHRoZSBsaWIgKHVzdWFsbHkgLVIpCisKKyAgKiBTZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgKExEX0xJQlJBUllfUEFUSCBmb3IgZXhhbXBsZSkgd2hlcmUgbGQuc28KKyAgICBzaG91bGQgY2hlY2sgZm9yIGxpYnMKKworICAqIEFkanVzdCB0aGUgc3lzdGVtJ3MgY29uZmlnIHRvIGNoZWNrIGZvciBsaWJzIGluIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91J3ZlCisgICAgcHV0IHRoZSBkaXIgKGxpa2UgTGludXgncyAvZXRjL2xkLnNvLmNvbmYpCisKKyAgJ21hbiBsZC5zbycgYW5kICdtYW4gbGQnIHdpbGwgdGVsbCB5b3UgbW9yZSBkZXRhaWxzCisKKyAgNS45IEhvdyBkb2VzIGxpYmN1cmwgcmVzb2x2ZSBob3N0IG5hbWVzPworCisgIGxpYmN1cmwgc3VwcG9ydHMgYSBsYXJnZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgbmFtZSByZXNvbHZlIGZ1bmN0aW9ucy4gT25lCisgIG9mIHRoZW0gaXMgcGlja2VkIGF0IGJ1aWxkLXRpbWUgYW5kIHdpbGwgYmUgdXNlZCB1bmNvbmRpdGlvbmFsbHkuIFRodXMsIGlmCisgIHlvdSB3YW50IHRvIGNoYW5nZSBuYW1lIHJlc29sdmVyIGZ1bmN0aW9uIHlvdSBtdXN0IHJlYnVpbGQgbGliY3VybCBhbmQgdGVsbAorICBpdCB0byB1c2UgYSBkaWZmZXJlbnQgZnVuY3Rpb24uCisKKyAgLSBUaGUgbm9uLWlwdjYgcmVzb2x2ZXIgdGhhdCBjYW4gdXNlIG9uZSBvdXQgb2YgZm91ciBob3N0IG5hbWUgcmVzb2x2ZSBjYWxscworICAgIChkZXBlbmRpbmcgb24gd2hhdCB5b3VyIHN5c3RlbSBzdXBwb3J0cyk6CisKKyAgICAgIEEgLSBnZXRob3N0YnluYW1lKCkKKyAgICAgIEIgLSBnZXRob3N0YnluYW1lX3IoKSB3aXRoIDMgYXJndW1lbnRzCisgICAgICBDIC0gZ2V0aG9zdGJ5bmFtZV9yKCkgd2l0aCA1IGFyZ3VtZW50cworICAgICAgRCAtIGdldGhvc3RieW5hbWVfcigpIHdpdGggNiBhcmd1bWVudHMKKworICAtIFRoZSBpcHY2LXJlc29sdmVyIHRoYXQgdXNlcyBnZXRhZGRyaW5mbygpCisKKyAgLSBUaGUgYy1hcmVzIGJhc2VkIG5hbWUgcmVzb2x2ZXIgdGhhdCB1c2VzIHRoZSBjLWFyZXMgbGlicmFyeSBmb3IgcmVzb2x2ZXMuCisgICAgVXNpbmcgdGhpcyBvZmZlcnMgYXN5bmNocm9ub3VzIG5hbWUgcmVzb2x2ZXMuCisKKyAgLSBUaGUgdGhyZWFkZWQgcmVzb2x2ZXIgKGRlZmF1bHQgb3B0aW9uIG9uIFdpbmRvd3MpLiBJdCB1c2VzOgorCisgICAgICBBIC0gZ2V0aG9zdGJ5bmFtZSgpIG9uIHBsYWluIGlwdjQgaG9zdHMKKyAgICAgIEIgLSBnZXRhZGRyaW5mbygpIG9uIGlwdjYtZW5hYmxlZCBob3N0cworCisgIEFsc28gbm90ZSB0aGF0IGxpYmN1cmwgbmV2ZXIgcmVzb2x2ZXMgb3IgcmV2ZXJzZS1sb29rdXBzIGFkZHJlc3NlcyBnaXZlbiBhcworICBwdXJlIG51bWJlcnMsIHN1Y2ggYXMgMTI3LjAuMC4xIG9yIDo6MS4KKworICA1LjEwIEhvdyBkbyBJIHByZXZlbnQgbGliY3VybCBmcm9tIHdyaXRpbmcgdGhlIHJlc3BvbnNlIHRvIHN0ZG91dD8KKworICBsaWJjdXJsIHByb3ZpZGVzIGEgZGVmYXVsdCBidWlsdC1pbiB3cml0ZSBmdW5jdGlvbiB0aGF0IHdyaXRlcyByZWNlaXZlZCBkYXRhCisgIHRvIHN0ZG91dC4gU2V0IHRoZSBDVVJMT1BUX1dSSVRFRlVOQ1RJT04gdG8gcmVjZWl2ZSB0aGUgZGF0YSwgb3IgcG9zc2libHkKKyAgc2V0IENVUkxPUFRfV1JJVEVEQVRBIHRvIGEgZGlmZmVyZW50IEZJTEUgKiBoYW5kbGUuCisKKyAgNS4xMSBIb3cgZG8gSSBtYWtlIGxpYmN1cmwgbm90IHJlY2VpdmUgdGhlIHdob2xlIEhUVFAgcmVzcG9uc2U/CisKKyAgWW91IG1ha2UgdGhlIHdyaXRlIGNhbGxiYWNrIChvciBwcm9ncmVzcyBjYWxsYmFjaykgcmV0dXJuIGFuIGVycm9yIGFuZAorICBsaWJjdXJsIHdpbGwgdGhlbiBhYm9ydCB0aGUgdHJhbnNmZXIuCisKKyAgNS4xMiBDYW4gSSBtYWtlIGxpYmN1cmwgZmFrZSBvciBoaWRlIG15IHJlYWwgSVAgYWRkcmVzcz8KKworICBOby4gbGliY3VybCBvcGVyYXRlcyBvbiBhIGhpZ2hlciBsZXZlbCB0aGFuIHNvLiBCZXNpZGVzLCBmYWtpbmcgSVAgYWRkcmVzcworICB3b3VsZCBpbXBseSBzZW5kaW5nIElQIHBhY2thZ2VzIHdpdGggYSBtYWRlLXVwIHNvdXJjZSBhZGRyZXNzLCBhbmQgdGhlbiB5b3UKKyAgbm9ybWFsbHkgZ2V0IGEgcHJvYmxlbSB3aXRoIGludGVyY2VwdGluZyB0aGUgcGFja2FnZXMgc2VudCBiYWNrIGFzIHRoZXkKKyAgd291bGQgdGhlbiBub3QgYmUgcm91dGVkIHRvIHlvdSEKKworICBJZiB5b3UgdXNlIGEgcHJveHkgdG8gYWNjZXNzIHJlbW90ZSBzaXRlcywgdGhlIHNpdGVzIHdpbGwgbm90IHNlZSB5b3VyIGxvY2FsCisgIElQIGFkZHJlc3MgYnV0IGluc3RlYWQgdGhlIGFkZHJlc3Mgb2YgdGhlIHByb3h5LgorCisgIEFsc28gbm90ZSB0aGF0IG9uIG1hbnkgbmV0d29ya3MgTkFUcyBvciBvdGhlciBJUC1tdW5naW5nIHRlY2huaXF1ZXMgYXJlIHVzZWQKKyAgdGhhdCBtYWtlcyB5b3Ugc2VlIGFuZCB1c2UgYSBkaWZmZXJlbnQgSVAgYWRkcmVzcyBsb2NhbGx5IHRoYW4gd2hhdCB0aGUKKyAgcmVtb3RlIHNlcnZlciB3aWxsIHNlZSB5b3UgY29taW5nIGZyb20uCisKKyAgNS4xMyBIb3cgZG8gSSBzdG9wIGFuIG9uZ29pbmcgdHJhbnNmZXI/CisKKyAgV2l0aCB0aGUgZWFzeSBpbnRlcmZhY2UgeW91IG1ha2Ugc3VyZSB0byByZXR1cm4gdGhlIGNvcnJlY3QgZXJyb3IgY29kZSBmcm9tCisgIG9uZSBvZiB0aGUgY2FsbGJhY2tzLCBidXQgbm9uZSBvZiB0aGVtIGFyZSBpbnN0YW50LiBUaGVyZSBpcyBubyBmdW5jdGlvbiB5b3UKKyAgY2FuIGNhbGwgZnJvbSBhbm90aGVyIHRocmVhZCBvciBzaW1pbGFyIHRoYXQgd2lsbCBzdG9wIGl0IGltbWVkaWF0ZWx5LgorICBJbnN0ZWFkLCB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBvbmUgb2YgdGhlIGNhbGxiYWNrcyB5b3UgdXNlIHJldHVybnMgYW4KKyAgYXBwcm9wcmlhdGUgdmFsdWUgdGhhdCB3aWxsIHN0b3AgdGhlIHRyYW5zZmVyLiAgU3VpdGFibGUgY2FsbGJhY2tzIHRoYXQgeW91CisgIGNhbiBkbyB0aGlzIHdpdGggaW5jbHVkZSB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2ssIHRoZSByZWFkIGNhbGxiYWNrIGFuZCB0aGUKKyAgd3JpdGUgY2FsbGJhY2suCisKKyAgSWYgeW91J3JlIHVzaW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UsIHlvdSBjYW4gYWxzbyBzdG9wIGEgdHJhbnNmZXIgYnkKKyAgcmVtb3ZpbmcgdGhlIHBhcnRpY3VsYXIgZWFzeSBoYW5kbGUgZnJvbSB0aGUgbXVsdGkgc3RhY2sgYXQgYW55IG1vbWVudCB5b3UKKyAgdGhpbmsgdGhlIHRyYW5zZmVyIGlzIGRvbmUuCisKKyAgNS4xNCBVc2luZyBDKysgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIGNhbGxiYWNrcz8KKworICBsaWJjdXJsIGlzIGEgQyBsaWJyYXJ5LCBpdCBkb2Vzbid0IGtub3cgYW55dGhpbmcgYWJvdXQgQysrIG1lbWJlciBmdW5jdGlvbnMuCisKKyAgWW91IGNhbiBvdmVyY29tZSB0aGlzICJsaW1pdGF0aW9uIiB3aXRoIGEgcmVsYXRpdmUgZWFzZSB1c2luZyBhIHN0YXRpYworICBtZW1iZXIgZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgYSBwb2ludGVyIHRvIHRoZSBjbGFzczoKKworICAgICAvLyBmIGlzIHRoZSBwb2ludGVyIHRvIHlvdXIgb2JqZWN0LgorICAgICBzdGF0aWMgWW91ckNsYXNzOjpmdW5jKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHN6LCBzaXplX3Qgbiwgdm9pZCAqZikKKyAgICAgeworICAgICAgIC8vIENhbGwgbm9uLXN0YXRpYyBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgc3RhdGljX2Nhc3Q8WW91ckNsYXNzKj4oZiktPm5vblN0YXRpY0Z1bmN0aW9uKCk7CisgICAgIH0KKworICAgICAvLyBUaGlzIGlzIGhvdyB5b3UgcGFzcyBwb2ludGVyIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb246CisgICAgIGN1cmxfZWFzeV9zZXRvcHQoaGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgWW91ckNsYXNzOmZ1bmMpOworICAgICBjdXJsX2Vhc3lfc2V0b3B0KGhjdXJsLCBDVVJMT1BUX1dSSVRFREFUQSwgdGhpcyk7CisKKyAgNS4xNSBIb3cgZG8gSSBnZXQgYW4gRlRQIGRpcmVjdG9yeSBsaXN0aW5nPworCisgIElmIHlvdSBlbmQgdGhlIEZUUCBVUkwgeW91IHJlcXVlc3Qgd2l0aCBhIHNsYXNoLCBsaWJjdXJsIHdpbGwgcHJvdmlkZSB5b3UKKyAgd2l0aCBhIGRpcmVjdG9yeSBsaXN0aW5nIG9mIHRoYXQgZ2l2ZW4gZGlyZWN0b3J5LiBZb3UgY2FuIGFsc28gc2V0CisgIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCB0byBhbHRlciB3aGF0IGV4YWN0IGxpc3RpbmcgY29tbWFuZCBsaWJjdXJsIHdvdWxkIHVzZQorICB0byBsaXN0IHRoZSBmaWxlcy4KKworICBUaGUgZm9sbG93LXVwIHF1ZXN0aW9uIHRoYXQgdGVuZCB0byBmb2xsb3cgdGhlIHByZXZpb3VzIG9uZSwgaXMgaG93IGEKKyAgcHJvZ3JhbSBpcyBzdXBwb3NlZCB0byBwYXJzZSB0aGUgZGlyZWN0b3J5IGxpc3RpbmcuIEhvdyBkb2VzIGl0IGtub3cgd2hhdCdzCisgIGEgZmlsZSBhbmQgd2hhdCdzIGEgZGlyIGFuZCB3aGF0J3MgYSBzeW1saW5rIGV0Yy4gVGhlIGhhcnNoIHJlYWxpdHkgaXMgdGhhdAorICBGVFAgcHJvdmlkZXMgbm8gc3VjaCBmaW5lIGFuZCBlYXN5LXRvLXBhcnNlIG91dHB1dC4gVGhlIG91dHB1dCBmb3JtYXQgRlRQCisgIHNlcnZlcnMgcmVzcG9uZCB0byBMSVNUIGNvbW1hbmRzIGFyZSBlbnRpcmVseSBhdCB0aGUgc2VydmVyJ3Mgb3duIGxpa2luZyBhbmQKKyAgdGhlIE5MU1Qgb3V0cHV0IGRvZXNuJ3QgcmV2ZWFsIGFueSB0eXBlcyBhbmQgaW4gbWFueSBjYXNlcyBkb24ndCBldmVuCisgIGluY2x1ZGUgYWxsIHRoZSBkaXJlY3RvcnkgZW50cmllcy4gQWxzbywgYm90aCBMSVNUIGFuZCBOTFNUIHRlbmQgdG8gaGlkZQorICB1bml4LXN0eWxlIGhpZGRlbiBmaWxlcyAodGhvc2UgdGhhdCBzdGFydCB3aXRoIGEgZG90KSBieSBkZWZhdWx0IHNvIHlvdSBuZWVkCisgIHRvIGRvICJMSVNUIC1hIiBvciBzaW1pbGFyIHRvIHNlZSB0aGVtLgorCisgIFRoZSBhcHBsaWNhdGlvbiB0aHVzIG5lZWRzIHRvIHBhcnNlIHRoZSBMSVNUIG91dHB1dC4gT25lIHN1Y2ggZXhpc3RpbmcKKyAgbGlzdCBwYXJzZXIgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly9jci55cC50by9mdHBwYXJzZS5odG1sICBWZXJzaW9ucyBvZgorICBsaWJjdXJsIHNpbmNlIDcuMjEuMCBhbHNvIHByb3ZpZGUgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHdpbGRjYXJkIHRvCisgIGRvd25sb2FkIG11bHRpcGxlIGZpbGVzIGZyb20gb25lIEZUUCBkaXJlY3RvcnkuCisKKworNi4gTGljZW5zZSBJc3N1ZXMKKworICBDdXJsIGFuZCBsaWJjdXJsIGFyZSByZWxlYXNlZCB1bmRlciBhIE1JVC9YIGRlcml2YXRlIGxpY2Vuc2UuIFRoZSBsaWNlbnNlIGlzCisgIHZlcnkgbGliZXJhbCBhbmQgc2hvdWxkIG5vdCBpbXBvc2UgYSBwcm9ibGVtIGZvciB5b3VyIHByb2plY3QuIFRoaXMgc2VjdGlvbgorICBpcyBqdXN0IGEgYnJpZWYgc3VtbWFyeSBmb3IgdGhlIGNhc2VzIHdlIGdldCB0aGUgbW9zdCBxdWVzdGlvbnMuIChQYXJ0cyBvZgorICB0aGlzIHNlY3Rpb24gd2FzIG11Y2ggZW5oYW5jZWQgYnkgQmpvcm4gUmVlc2UuKQorCisgIFdlIGFyZSBub3QgbGF3eWVycyBhbmQgdGhpcyBpcyBub3QgbGVnYWwgYWR2aWNlLiBZb3Ugc2hvdWxkIHByb2JhYmx5IGNvbnN1bHQKKyAgb25lIGlmIHlvdSB3YW50IHRydWUgYW5kIGFjY3VyYXRlIGxlZ2FsIGluc2lnaHRzIHdpdGhvdXQgb3VyIHByZWp1ZGljZS4gTm90ZQorICBlc3BlY2lhbGx5IHRoYXQgdGhpcyBzZWN0aW9uIGNvbmNlcm5zIHRoZSBsaWJjdXJsIGxpY2Vuc2Ugb25seTsgY29tcGlsaW5nIGluCisgIGZlYXR1cmVzIG9mIGxpYmN1cmwgdGhhdCBkZXBlbmQgb24gb3RoZXIgbGlicmFyaWVzIChlLmcuIE9wZW5TU0wpIG1heSBhZmZlY3QKKyAgdGhlIGxpY2Vuc2luZyBvYmxpZ2F0aW9ucyBvZiB5b3VyIGFwcGxpY2F0aW9uLgorCisgIDYuMSBJIGhhdmUgYSBHUEwgcHJvZ3JhbSwgY2FuIEkgdXNlIHRoZSBsaWJjdXJsIGxpYnJhcnk/CisKKyAgWWVzIQorCisgIFNpbmNlIGxpYmN1cmwgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQvWCBkZXJpdmF0ZSBsaWNlbnNlLCBpdCBjYW4gYmUKKyAgdXNlZCB0b2dldGhlciB3aXRoIEdQTCBpbiBhbnkgc29mdHdhcmUuCisKKyAgNi4yIEkgaGF2ZSBhIGNsb3NlZC1zb3VyY2UgcHJvZ3JhbSwgY2FuIEkgdXNlIHRoZSBsaWJjdXJsIGxpYnJhcnk/CisKKyAgWWVzIQorCisgIGxpYmN1cmwgZG9lcyBub3QgcHV0IGFueSByZXN0cmljdGlvbnMgb24gdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBsaWJyYXJ5LgorCisgIDYuMyBJIGhhdmUgYSBCU0QgbGljZW5zZWQgcHJvZ3JhbSwgY2FuIEkgdXNlIHRoZSBsaWJjdXJsIGxpYnJhcnk/CisKKyAgWWVzIQorCisgIGxpYmN1cmwgZG9lcyBub3QgcHV0IGFueSByZXN0cmljdGlvbnMgb24gdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBsaWJyYXJ5LgorCisgIDYuNCBJIGhhdmUgYSBwcm9ncmFtIHRoYXQgdXNlcyBMR1BMIGxpYnJhcmllcywgY2FuIEkgdXNlIGxpYmN1cmw/CisKKyAgWWVzIQorCisgIFRoZSBMR1BMIGxpY2Vuc2UgZG9lc24ndCBjbGFzaCB3aXRoIG90aGVyIGxpY2Vuc2VzLgorCisgIDYuNSBDYW4gSSBtb2RpZnkgY3VybC9saWJjdXJsIGZvciBteSBwcm9ncmFtIGFuZCBrZWVwIHRoZSBjaGFuZ2VzIHNlY3JldD8KKworICBZZXMhCisKKyAgVGhlIE1JVC9YIGRlcml2YXRlIGxpY2Vuc2UgcHJhY3RpY2FsbHkgYWxsb3dzIHlvdSB0byBkbyBhbG1vc3QgYW55dGhpbmcgd2l0aAorICB0aGUgc291cmNlcywgb24gdGhlIGNvbmRpdGlvbiB0aGF0IHRoZSBjb3B5cmlnaHQgdGV4dHMgaW4gdGhlIHNvdXJjZXMgYXJlCisgIGxlZnQgaW50YWN0LgorCisgIDYuNiBDYW4geW91IHBsZWFzZSBjaGFuZ2UgdGhlIGN1cmwvbGliY3VybCBsaWNlbnNlIHRvIFhYWFg/CisKKyAgTm8uCisKKyAgV2UgaGF2ZSBjYXJlZnVsbHkgcGlja2VkIHRoaXMgbGljZW5zZSBhZnRlciB5ZWFycyBvZiBkZXZlbG9wbWVudCBhbmQKKyAgZGlzY3Vzc2lvbnMgYW5kIGEgbGFyZ2UgYW1vdW50IG9mIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIHdpdGggc291cmNlIGNvZGUKKyAga25vd2luZyB0aGF0IHRoaXMgaXMgdGhlIGxpY2Vuc2Ugd2UgdXNlLiBUaGlzIGxpY2Vuc2UgcHV0cyB0aGUgcmVzdHJpY3Rpb25zCisgIHdlIHdhbnQgb24gY3VybC9saWJjdXJsIGFuZCBpdCBkb2VzIG5vdCBzcHJlYWQgdG8gb3RoZXIgcHJvZ3JhbXMgb3IKKyAgbGlicmFyaWVzIHRoYXQgdXNlIGl0LiBJdCBzaG91bGQgYmUgcG9zc2libGUgZm9yIGV2ZXJ5b25lIHRvIHVzZSBsaWJjdXJsIG9yCisgIGN1cmwgaW4gdGhlaXIgcHJvamVjdHMsIG5vIG1hdHRlciB3aGF0IGxpY2Vuc2UgdGhleSBhbHJlYWR5IGhhdmUgaW4gdXNlLgorCisgIDYuNyBXaGF0IGFyZSBteSBvYmxpZ2F0aW9ucyB3aGVuIHVzaW5nIGxpYmN1cmwgaW4gbXkgY29tbWVyY2lhbCBhcHBzPworCisgIE5leHQgdG8gbm9uZS4gQWxsIHlvdSBuZWVkIHRvIGFkaGVyZSB0byBpcyB0aGUgTUlULXN0eWxlIGxpY2Vuc2UgKHN0YXRlZCBpbgorICB0aGUgQ09QWUlORyBmaWxlKSB3aGljaCBiYXNpY2FsbHkgc2F5cyB5b3UgaGF2ZSB0byBpbmNsdWRlIHRoZSBjb3B5cmlnaHQKKyAgbm90aWNlIGluICJhbGwgY29waWVzIiBhbmQgdGhhdCB5b3UgbWF5IG5vdCB1c2UgdGhlIGNvcHlyaWdodCBob2xkZXIncyBuYW1lCisgIHdoZW4gcHJvbW90aW5nIHlvdXIgc29mdHdhcmUuCisKKyAgWW91IGRvIG5vdCBoYXZlIHRvIHJlbGVhc2UgYW55IG9mIHlvdXIgc291cmNlIGNvZGUuCisKKyAgWW91IGRvIG5vdCBoYXZlIHRvIHJldmVhbCBvciBtYWtlIHB1YmxpYyBhbnkgY2hhbmdlcyB0byB0aGUgbGliY3VybCBzb3VyY2UKKyAgY29kZS4KKworICBZb3UgZG8gbm90IGhhdmUgdG8gYnJvYWRjYXN0IHRvIHRoZSB3b3JsZCB0aGF0IHlvdSBhcmUgdXNpbmcgbGliY3VybCB3aXRoaW4KKyAgeW91ciBhcHAuCisKKyAgQWxsIHdlIGFzayBpcyB0aGF0IHlvdSBkaXNjbG9zZSAidGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbgorICBub3RpY2UiIHNvbWV3aGVyZS4gTW9zdCBwcm9iYWJseSBsaWtlIGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIGluIHRoZSBzZWN0aW9uCisgIHdoZXJlIG90aGVyIHRoaXJkIHBhcnR5IGRlcGVuZGVuY2llcyBhbHJlYWR5IGFyZSBtZW50aW9uZWQgYW5kIGFja25vd2xlZGdlZC4KKworICBBcyBjYW4gYmUgc2VlbiBoZXJlOiBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29tcGFuaWVzLmh0bWwgYW5kIGVsc2V3aGVyZSwKKyAgbW9yZSBhbmQgbW9yZSBjb21wYW5pZXMgYXJlIGRpc2NvdmVyaW5nIHRoZSBwb3dlciBvZiBsaWJjdXJsIGFuZCB0YWtlCisgIGFkdmFudGFnZSBvZiBpdCBldmVuIGluIGNvbW1lcmNpYWwgZW52aXJvbm1lbnRzLgorCisKKzcuIFBIUC9DVVJMIElzc3VlcworCisgIDcuMSBXaGF0IGlzIFBIUC9DVVJMPworCisgIFRoZSBtb2R1bGUgZm9yIFBIUCB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIGZvciBQSFAgcHJvZ3JhbXMgdG8gYWNjZXNzIGN1cmwtCisgIGZ1bmN0aW9ucyBmcm9tIHdpdGhpbiBQSFAuCisKKyAgSW4gdGhlIGNVUkwgcHJvamVjdCB3ZSBjYWxsIHRoaXMgbW9kdWxlIFBIUC9DVVJMIHRvIGRpZmZlcmVudGlhdGUgaXQgZnJvbQorICBjdXJsIHRoZSBjb21tYW5kIGxpbmUgdG9vbCBhbmQgbGliY3VybCB0aGUgbGlicmFyeS4gVGhlIFBIUCB0ZWFtIGhvd2V2ZXIKKyAgZG9lcyBub3QgcmVmZXIgdG8gaXQgbGlrZSB0aGlzIChmb3IgdW5rbm93biByZWFzb25zKS4gVGhleSBjYWxsIGl0IHBsYWluCisgIENVUkwgKG9mdGVuIHVzaW5nIGFsbCBjYXBzKSBvciBzb21ldGltZXMgZXh0L2N1cmwsIGJ1dCBib3RoIGNhdXNlIG11Y2gKKyAgY29uZnVzaW9uIHRvIHVzZXJzIHdoaWNoIGluIHR1cm4gZ2l2ZXMgdXMgYSBoaWdoZXIgcXVlc3Rpb24gbG9hZC4KKworICA3LjIgV2hvIHdyb3RlIFBIUC9DVVJMPworCisgIFBIUC9DVVJMIGlzIGEgbW9kdWxlIHRoYXQgY29tZXMgd2l0aCB0aGUgcmVndWxhciBQSFAgcGFja2FnZS4gSXQgZGVwZW5kcyBhbmQKKyAgdXNlcyBsaWJjdXJsLCBzbyB5b3UgbmVlZCB0byBoYXZlIGxpYmN1cmwgaW5zdGFsbGVkIHByb3Blcmx5IGZpcnN0IGJlZm9yZQorICBQSFAvQ1VSTCBjYW4gYmUgdXNlZC4gUEhQL0NVUkwgd2FzIGluaXRpYWxseSB3cml0dGVuIGJ5IFN0ZXJsaW5nIEh1Z2hlcy4KKworICA3LjMgQ2FuIEkgcGVyZm9ybSBtdWx0aXBsZSByZXF1ZXN0cyB1c2luZyB0aGUgc2FtZSBoYW5kbGU/CisKKyAgWWVzIC0gYXQgbGVhc3QgaW4gUEhQIHZlcnNpb24gNC4zLjggYW5kIGxhdGVyICh0aGlzIGhhcyBiZWVuIGtub3duIHRvIG5vdAorICB3b3JrIGluIGVhcmxpZXIgdmVyc2lvbnMsIGJ1dCB0aGUgZXhhY3QgdmVyc2lvbiB3aGVuIGl0IHN0YXJ0ZWQgdG8gd29yayBpcworICB1bmtub3duIHRvIG1lKS4KKworICBBZnRlciBhIHRyYW5zZmVyLCB5b3UganVzdCBzZXQgbmV3IG9wdGlvbnMgaW4gdGhlIGhhbmRsZSBhbmQgbWFrZSBhbm90aGVyCisgIHRyYW5zZmVyLiBUaGlzIHdpbGwgbWFrZSBsaWJjdXJsIHRvIHJlLXVzZSB0aGUgc2FtZSBjb25uZWN0aW9uIGlmIGl0IGNhbi4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvRkVBVFVSRVMgYi9jdXJsLTcuMjUuMC9kb2NzL0ZFQVRVUkVTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZTRmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL0ZFQVRVUkVTCkBAIC0wLDAgKzEsMTM2IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorCitGRUFUVVJFUworCitjdXJsIHRvb2wKKyAtIGNvbmZpZyBmaWxlIHN1cHBvcnQKKyAtIG11bHRpcGxlIFVSTHMgaW4gYSBzaW5nbGUgY29tbWFuZCBsaW5lCisgLSByYW5nZSAiZ2xvYmJpbmciIHN1cHBvcnQ6IFswLTEzXSwge29uZSx0d28sdGhyZWV9CisgLSBtdWx0aXBsZSBmaWxlIHVwbG9hZCBvbiBhIHNpbmdsZSBjb21tYW5kIGxpbmUKKyAtIGN1c3RvbSBtYXhpbXVtIHRyYW5zZmVyIHJhdGUKKyAtIHJlZGlyZWN0YWJsZSBzdGRlcnIKKworbGliY3VybCBzdXBwb3J0cworIC0gZnVsbCBVUkwgc3ludGF4IHdpdGggbm8gbGVuZ3RoIGxpbWl0CisgLSBjdXN0b20gbWF4aW11bSBkb3dubG9hZCB0aW1lCisgLSBjdXN0b20gbGVhc3QgZG93bmxvYWQgc3BlZWQgYWNjZXB0YWJsZQorIC0gY3VzdG9tIG91dHB1dCByZXN1bHQgYWZ0ZXIgY29tcGxldGlvbgorIC0gZ3Vlc3NlcyBwcm90b2NvbCBmcm9tIGhvc3QgbmFtZSB1bmxlc3Mgc3BlY2lmaWVkCisgLSB1c2VzIC5uZXRyYworIC0gcHJvZ3Jlc3MgYmFyL3RpbWUgc3BlY3Mgd2hpbGUgZG93bmxvYWRpbmcKKyAtICJzdGFuZGFyZCIgcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1cHBvcnQKKyAtIGNvbXBpbGVzIG9uIHdpbjMyIChyZXBvcnRlZCBidWlsZHMgb24gNDArIG9wZXJhdGluZyBzeXN0ZW1zKQorIC0gc2VsZWN0YWJsZSBuZXR3b3JrIGludGVyZmFjZSBmb3Igb3V0Z29pbmcgdHJhZmZpYworIC0gSVB2NiBzdXBwb3J0IG9uIHVuaXggYW5kIFdpbmRvd3MKKyAtIHBlcnNpc3RhbnQgY29ubmVjdGlvbnMKKyAtIHNvY2tzNSBzdXBwb3J0CisgLSBzdXBwb3J0cyB1c2VyIG5hbWUgKyBwYXNzd29yZCBpbiBwcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAtIG9wZXJhdGlvbnMgdGhyb3VnaCBwcm94eSAidHVubmVsIiAodXNpbmcgQ09OTkVDVCkKKyAtIHN1cHBvcnRzIGxhcmdlIGZpbGVzICg+MkdCIGFuZCA+NEdCKSBib3RoIHVwbG9hZC9kb3dubG9hZAorIC0gcmVwbGFjYWJsZSBtZW1vcnkgZnVuY3Rpb25zIChtYWxsb2MsIGZyZWUsIHJlYWxsb2MsIGV0YykKKyAtIGFzeW5jaHJvbm91cyBuYW1lIHJlc29sdmluZyAoKjYpCisgLSBib3RoIGEgcHVzaCBhbmQgYSBwdWxsIHN0eWxlIGludGVyZmFjZQorCitIVFRQCisgLSBIVFRQLzEuMSBjb21wbGlhbnQgKG9wdGlvbmFsbHkgdXNlcyAxLjApCisgLSBHRVQKKyAtIFBVVAorIC0gSEVBRAorIC0gUE9TVAorIC0gUGlwZWxpbmluZworIC0gbXVsdGlwYXJ0IGZvcm1wb3N0IChSRkMxODY3LXN0eWxlKQorIC0gYXV0aGVudGljYXRpb246IEJhc2ljLCBEaWdlc3QsIE5UTE0oKjkpLCBHU1MtTmVnb3RpYXRlL05lZ290aWF0ZSgqMykgYW5kCisgICBTUE5FR08gKCo0KSB0byBzZXJ2ZXIgYW5kIHByb3h5CisgLSByZXN1bWUgKGJvdGggR0VUIGFuZCBQVVQpCisgLSBmb2xsb3cgcmVkaXJlY3RzCisgLSBtYXhpbXVtIGFtb3VudCBvZiByZWRpcmVjdHMgdG8gZm9sbG93CisgLSBjdXN0b20gSFRUUCByZXF1ZXN0CisgLSBjb29raWUgZ2V0L3NlbmQgZnVsbHkgcGFyc2VkCisgLSByZWFkcy93cml0ZXMgdGhlIG5ldHNjYXBlIGNvb2tpZSBmaWxlIGZvcm1hdAorIC0gY3VzdG9tIGhlYWRlcnMgKHJlcGxhY2UvcmVtb3ZlIGludGVybmFsbHkgZ2VuZXJhdGVkIGhlYWRlcnMpCisgLSBjdXN0b20gdXNlci1hZ2VudCBzdHJpbmcKKyAtIGN1c3RvbSByZWZlcmVyIHN0cmluZworIC0gcmFuZ2UKKyAtIHByb3h5IGF1dGhlbnRpY2F0aW9uCisgLSB0aW1lIGNvbmRpdGlvbnMKKyAtIHZpYSBodHRwLXByb3h5CisgLSByZXRyaWV2ZSBmaWxlIG1vZGlmaWNhdGlvbiBkYXRlCisgLSBDb250ZW50LUVuY29kaW5nIHN1cHBvcnQgZm9yIGRlZmxhdGUgYW5kIGd6aXAKKyAtICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIgc3VwcG9ydCBmb3IgInVwbG9hZHMiCisKK0hUVFBTICgqMSkKKyAtIChhbGwgdGhlIEhUVFAgZmVhdHVyZXMpCisgLSB1c2luZyBjbGllbnQgY2VydGlmaWNhdGVzCisgLSB2ZXJpZnkgc2VydmVyIGNlcnRpZmljYXRlCisgLSB2aWEgaHR0cC1wcm94eQorIC0gc2VsZWN0IGRlc2lyZWQgZW5jcnlwdGlvbgorIC0gZm9yY2UgdXNhZ2Ugb2YgYSBzcGVjaWZpYyBTU0wgdmVyc2lvbiAoU1NMdjIoKjcpLCBTU0x2MyBvciBUTFN2MSkKKworRlRQCisgLSBkb3dubG9hZAorIC0gYXV0aGVudGljYXRpb24KKyAtIGtlcmJlcm9zNCAoKjUpLCBrZXJiZXJvczUgKCozKQorIC0gYWN0aXZlL3Bhc3NpdmUgdXNpbmcgUE9SVCwgRVBSVCwgUEFTViBvciBFUFNWCisgLSBzaW5nbGUgZmlsZSBzaXplIGluZm9ybWF0aW9uIChjb21wYXJlIHRvIEhUVFAgSEVBRCkKKyAtICd0eXBlPScgVVJMIHN1cHBvcnQKKyAtIGRpciBsaXN0aW5nCisgLSBkaXIgbGlzdGluZyBuYW1lcy1vbmx5CisgLSB1cGxvYWQKKyAtIHVwbG9hZCBhcHBlbmQKKyAtIHVwbG9hZCB2aWEgaHR0cC1wcm94eSBhcyBIVFRQIFBVVAorIC0gZG93bmxvYWQgcmVzdW1lCisgLSB1cGxvYWQgcmVzdW1lCisgLSBjdXN0b20gZnRwIGNvbW1hbmRzIChiZWZvcmUgYW5kL29yIGFmdGVyIHRoZSB0cmFuc2ZlcikKKyAtIHNpbXBsZSAicmFuZ2UiIHN1cHBvcnQKKyAtIHZpYSBodHRwLXByb3h5CisgLSBhbGwgb3BlcmF0aW9ucyBjYW4gYmUgdHVubmVsZWQgdGhyb3VnaCBhIGh0dHAtcHJveHkKKyAtIGN1c3RvbWl6YWJsZSB0byByZXRyaWV2ZSBmaWxlIG1vZGlmaWNhdGlvbiBkYXRlCisgLSBubyBkaXIgZGVwdGggbGltaXQKKworRlRQUyAoKjEpCisgLSBpbXBsaWNpdCBmdHBzOi8vIHN1cHBvcnQgdGhhdCB1c2UgU1NMIG9uIGJvdGggY29ubmVjdGlvbnMKKyAtIGV4cGxpY2l0ICJBVVRIIFRTTCIgYW5kICJBVVRIIFNTTCIgdXNhZ2UgdG8gInVwZ3JhZGUiIHBsYWluIGZ0cDovLworICAgY29ubmVjdGlvbiB0byB1c2UgU1NMIGZvciBib3RoIG9yIG9uZSBvZiB0aGUgY29ubmVjdGlvbnMKKworU0NQICgqOCkKKyAtIGJvdGggcGFzc3dvcmQgYW5kIHB1YmxpYyBrZXkgYXV0aAorCitTRlRQICgqOCkKKyAtIGJvdGggcGFzc3dvcmQgYW5kIHB1YmxpYyBrZXkgYXV0aAorIC0gd2l0aCBjdXN0b20gY29tbWFuZHMgc2VudCBiZWZvcmUvYWZ0ZXIgdGhlIHRyYW5zZmVyCisKK1RGVFAKKyAtIGRvd25sb2FkIC8gdXBsb2FkCisKK1RFTE5FVAorIC0gY29ubmVjdGlvbiBuZWdvdGlhdGlvbgorIC0gY3VzdG9tIHRlbG5ldCBvcHRpb25zCisgLSBzdGRpbi9zdGRvdXQgSS9PCisKK0xEQVAgKCoyKQorIC0gZnVsbCBMREFQIFVSTCBzdXBwb3J0CisKK0RJQ1QKKyAtIGV4dGVuZGVkIERJQ1QgVVJMIHN1cHBvcnQKKworRklMRQorIC0gVVJMIHN1cHBvcnQKKyAtICJ1cGxvYWRzIgorIC0gcmVzdW1lCisKK0ZPT1ROT1RFUworPT09PT09PT09CisKKyAgKjEgPSByZXF1aXJlcyBPcGVuU1NMLCBHbnVUTFMsIE5TUywgeWFzc2wsIGF4VExTIG9yIFBvbGFyU1NMCisgICoyID0gcmVxdWlyZXMgT3BlbkxEQVAKKyAgKjMgPSByZXF1aXJlcyBhIEdTU0FQSS1jb21wbGlhbnQgbGlicmFyeSwgc3VjaCBhcyBIZWltZGFsIG9yIHNpbWlsYXIuCisgICo0ID0gcmVxdWlyZXMgRkJvcGVuc3NsCisgICo1ID0gcmVxdWlyZXMgYSBrcmI0IGxpYnJhcnksIHN1Y2ggYXMgdGhlIE1JVCBvbmUgb3Igc2ltaWxhci4KKyAgKjYgPSByZXF1aXJlcyBjLWFyZXMKKyAgKjcgPSByZXF1aXJlcyBPcGVuU1NMIG9yIE5TUywgYXMgR251VExTIG9ubHkgc3VwcG9ydHMgU1NMdjMgYW5kIFRMU3YxCisgICo4ID0gcmVxdWlyZXMgbGlic3NoMgorICAqOSA9IHJlcXVpcmVzIE9wZW5TU0wsIEdudVRMUywgTlNTIG9yIHlhc3NsCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL0hJU1RPUlkgYi9jdXJsLTcuMjUuMC9kb2NzL0hJU1RPUlkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0ZmI1MwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvSElTVE9SWQpAQCAtMCwwICsxLDI0NCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKworICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgY1VSTCBCZWNhbWUgTGlrZSBUaGlzCisKKworSW4gdGhlIHNlY29uZCBoYWxmIG9mIDE5OTcsIERhbmllbCBTdGVuYmVyZyBjYW1lIHVwIHdpdGggdGhlIGlkZWEgdG8gbWFrZQorY3VycmVuY3ktZXhjaGFuZ2UgY2FsY3VsYXRpb25zIGF2YWlsYWJsZSB0byBJbnRlcm5ldCBSZWxheSBDaGF0IChJUkMpCit1c2Vycy4gQWxsIHRoZSBuZWNlc3NhcnkgZGF0YSBhcmUgcHVibGlzaGVkIG9uIHRoZSBXZWI7IGhlIGp1c3QgbmVlZGVkIHRvCithdXRvbWF0ZSB0aGVpciByZXRyaWV2YWwuCisKK0RhbmllbCBzaW1wbHkgYWRvcHRlZCBhbiBleGlzdGluZyBjb21tYW5kLWxpbmUgb3Blbi1zb3VyY2UgdG9vbCwgaHR0cGdldCwgdGhhdAorQnJhemlsaWFuIFJhZmFlbCBTYWd1bGEgaGFkIHdyaXR0ZW4uIEFmdGVyIGEgZmV3IG1pbm9yIGFkanVzdG1lbnRzLCBpdCBkaWQKK2p1c3Qgd2hhdCBoZSBuZWVkZWQuCisKK1Nvb24sIGhlIGZvdW5kIGN1cnJlbmNpZXMgb24gYSBHT1BIRVIgc2l0ZSwgc28gc3VwcG9ydCBmb3IgdGhhdCBoYWQgdG8gZ28gaW4sCithbmQgbm90IGJlZm9yZSBsb25nIEZUUCBkb3dubG9hZCBzdXBwb3J0IHdhcyBhZGRlZCBhcyB3ZWxsLiBUaGUgbmFtZSBvZiB0aGUKK3Byb2plY3Qgd2FzIGNoYW5nZWQgdG8gdXJsZ2V0IHRvIGJldHRlciBmaXQgd2hhdCBpdCBhY3R1YWxseSBkaWQgbm93LCBzaW5jZQordGhlIGh0dHAtb25seSBkYXlzIHdlcmUgYWxyZWFkeSBwYXNzZWQuCisKK1RoZSBwcm9qZWN0IHNsb3dseSBncmV3IGJpZ2dlci4gV2hlbiB1cGxvYWQgY2FwYWJpbGl0aWVzIHdlcmUgYWRkZWQgYW5kIHRoZQorbmFtZSBvbmNlIGFnYWluIHdhcyBtaXNsZWFkaW5nLCBhIHNlY29uZCBuYW1lIGNoYW5nZSB3YXMgbWFkZSBhbmQgb24gTWFyY2ggMjAsCisxOTk4IGN1cmwgNCB3YXMgcmVsZWFzZWQuIChUaGUgdmVyc2lvbiBudW1iZXJpbmcgZnJvbSB0aGUgcHJldmlvdXMgbmFtZXMgd2FzCitrZXB0LikKKworKFVucmVsYXRlZCB0byB0aGlzIHByb2plY3QgYSBjb21wYW55IGNhbGxlZCBDdXJsIENvcnBvcmF0aW9uIHJlZ2lzdGVyZWQgYSBVUwordHJhZGVtYXJrIG9uIHRoZSBuYW1lICJDVVJMIiBvbiBNYXkgMTggMTk5OC4gVGhhdCBjb21wYW55IGhhZCB0aGVuIGFscmVhZHkKK3JlZ2lzdGVyZWQgdGhlIGN1cmwuY29tIGRvbWFpbiBiYWNrIGluIE5vdmVtYmVyIG9mIHRoZSBwcmV2aW91cyB5ZWFyLiBBbGwgdGhpcword2FzIHJldmVhbGVkIHRvIHVzIG11Y2ggbGF0ZXIuKQorCitTU0wgc3VwcG9ydCB3YXMgYWRkZWQsIHBvd2VyZWQgYnkgdGhlIFNTTGVheSBsaWJyYXJ5LgorCitBdWd1c3QgMTk5OCwgZmlyc3QgYW5ub3VuY2VtZW50IG9mIGN1cmwgb24gZnJlc2htZWF0Lm5ldC4KKworT2N0b2JlciAxOTk4LCB3aXRoIHRoZSBjdXJsIDQuOSByZWxlYXNlIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGNvb2tpZQorc3VwcG9ydCwgY3VybCB3YXMgbm8gbG9uZ2VyIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwgbGljZW5zZS4gTm93IHdlJ3JlIGF0IDQwMDAKK2xpbmVzIG9mIGNvZGUsIHdlIHN3aXRjaGVkIG92ZXIgdG8gdGhlIE1QTCBsaWNlbnNlIHRvIHJlc3RyaWN0IHRoZSBlZmZlY3RzIG9mCisiY29weWxlZnQiLgorCitOb3ZlbWJlciAxOTk4LCBjb25maWd1cmUgc2NyaXB0IGFuZCByZXBvcnRlZCBzdWNjZXNzZnVsIGNvbXBpbGVzIG9uIHNldmVyYWwKK21ham9yIG9wZXJhdGluZyBzeXN0ZW1zLiBUaGUgbmV2ZXItcXVpdGUtdW5kZXJzdG9vZCAtRiBvcHRpb24gd2FzIGFkZGVkIGFuZAorY3VybCBjb3VsZCBub3cgc2ltdWxhdGUgcXVpdGUgYSBsb3Qgb2YgYSBicm93c2VyLiBURUxORVQgc3VwcG9ydCB3YXMgYWRkZWQuCisKK0N1cmwgNSB3YXMgcmVsZWFzZWQgaW4gRGVjZW1iZXIgMTk5OCBhbmQgaW50cm9kdWNlZCB0aGUgZmlyc3QgZXZlciBjdXJsIG1hbgorcGFnZS4gUGVvcGxlIHN0YXJ0ZWQgbWFraW5nIExpbnV4IFJQTSBwYWNrYWdlcyBvdXQgb2YgaXQuCisKK0phbnVhcnkgMTk5OSwgRElDVCBzdXBwb3J0IGFkZGVkLgorCitPcGVuU1NMIHRvb2sgb3ZlciB3aGVyZSBTU0xlYXkgd2FzIGFiYW5kb25lZC4KKworTWF5IDE5OTksIGZpcnN0IERlYmlhbiBwYWNrYWdlLgorCitBdWd1c3QgMTk5OSwgTERBUDovLyBhbmQgRklMRTovLyBzdXBwb3J0IGFkZGVkLiBUaGUgY3VybCB3ZWIgc2l0ZSBnZXRzIDEzMDAKK3Zpc2l0cyB3ZWVrbHkuCisKK1JlbGVhc2VkIGN1cmwgNi4wIGluIFNlcHRlbWJlci4gMTUwMDAgbGluZXMgb2YgY29kZS4KKworRGVjZW1iZXIgMjggMTk5OSwgYWRkZWQgdGhlIHByb2plY3Qgb24gU291cmNlZm9yZ2UgYW5kIHN0YXJ0ZWQgdXNpbmcgaXRzCitzZXJ2aWNlcyBmb3IgbWFuYWdpbmcgdGhlIHByb2plY3QuCisKK1NwcmluZyAyMDAwLCBtYWpvciBpbnRlcm5hbCBvdmVyaGF1bCB0byBwcm92aWRlIGEgc3VpdGFibGUgbGlicmFyeSBpbnRlcmZhY2UuCitUaGUgZmlyc3Qgbm9uLWJldGEgcmVsZWFzZSB3YXMgbmFtZWQgNy4xIGFuZCBhcnJpdmVkIGluIEF1Z3VzdC4gVGhpcyBvZmZlcmVkCit0aGUgZWFzeSBpbnRlcmZhY2UgYW5kIHR1cm5lZCBvdXQgdG8gYmUgdGhlIGJlZ2lubmluZyBvZiBhY3R1YWxseSBnZXR0aW5nCitvdGhlciBzb2Z0d2FyZSBhbmQgcHJvZ3JhbXMgdG8gZ2V0IGJhc2VkIG9uIGFuZCBwb3dlcmVkIGJ5IGxpYmN1cmwuIEFsbW9zdAorMjAwMDAgbGluZXMgb2YgY29kZS4KKworQXVndXN0IDIwMDAsIHRoZSBjdXJsIHdlYiBzaXRlIGdldHMgNDAwMCB2aXNpdHMgd2Vla2x5LgorCitUaGUgUEhQIGd1eXMgYWRvcHRlZCBsaWJjdXJsIGFscmVhZHkgdGhlIHNhbWUgbW9udGgsIHdoZW4gdGhlIGZpcnN0IGV2ZXIgdGhpcmQKK3BhcnR5IGxpYmN1cmwgYmluZGluZyBzaG93ZWQgdXAuIENVUkwgaGFzIGJlZW4gYSBzdXBwb3J0ZWQgbW9kdWxlIGluIFBIUCBzaW5jZQordGhlIHJlbGVhc2Ugb2YgUEhQIDQuMC4yLiBUaGlzIHdvdWxkIHNvb24gZ2V0IGZvbGxvd2Vycy4gTW9yZSB0aGFuIDE2CitkaWZmZXJlbnQgYmluZGluZ3MgZXhpc3QgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLgorCitTZXB0ZW1iZXIgMjAwMCwga2VyYmVyb3M0IHN1cHBvcnQgd2FzIGFkZGVkLgorCitJbiBOb3ZlbWJlciAyMDAwIHN0YXJ0ZWQgdGhlIHdvcmsgb24gYSB0ZXN0IHN1aXRlIGZvciBjdXJsLiBJdCB3YXMgbGF0ZXIKK3JlLXdyaXR0ZW4gZnJvbSBzY3JhdGNoIGFnYWluLiBUaGUgbGliY3VybCBtYWpvciBTT05BTUUgbnVtYmVyIHdhcyBzZXQgdG8gMS4KKworSmFudWFyeSAyMDAxLCBEYW5pZWwgcmVsZWFzZWQgY3VybCA3LjUuMiB1bmRlciBhIG5ldyBsaWNlbnNlIGFnYWluOiBNSVQgKG9yCitNUEwpLiBUaGUgTUlUIGxpY2Vuc2UgaXMgZXh0cmVtZWx5IGxpYmVyYWwgYW5kIGNhbiBiZSB1c2VkIGNvbWJpbmVkIHdpdGggR1BMCitpbiBvdGhlciBwcm9qZWN0cy4gVGhpcyB3b3VsZCBmaW5hbGx5IHB1dCBhbiBlbmQgdG8gdGhlICJjb21wbGFpbnRzIiBmcm9tCitwZW9wbGUgaW52b2x2ZWQgaW4gR1BMZWQgcHJvamVjdHMgdGhhdCBwcmV2aW91c2x5IHdlcmUgcHJvaGliaXRlZCBmcm9tIHVzaW5nCitsaWJjdXJsIHdoaWxlIGl0IHdhcyByZWxlYXNlZCB1bmRlciBNUEwgb25seS4gKER1ZSB0byB0aGUgZmFjdCB0aGF0IE1QTCBpcworZGVlbWVkICJHUEwgaW5jb21wYXRpYmxlIi4pCisKK2N1cmwgc3VwcG9ydHMgSFRUUCAxLjEgc3RhcnRpbmcgd2l0aCB0aGUgcmVsZWFzZSBvZiA3LjcsIE1hcmNoIDIyIDIwMDEuIFRoaXMKK2Fsc28gaW50cm9kdWNlZCBsaWJjdXJsJ3MgYWJpbGl0eSB0byBkbyBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLiAyNDAwMCBsaW5lcyBvZgorY29kZS4gVGhlIGxpYmN1cmwgbWFqb3IgU09OQU1FIG51bWJlciB3YXMgYnVtcGVkIHRvIDIgZHVlIHRvIHRoaXMgb3ZlcmhhdWwuCisKK1RoZSBmaXJzdCBleHBlcmltZW50YWwgZnRwczovLyBzdXBwb3J0IHdhcyBhZGRlZCBpbiBNYXJjaCAyMDAxLgorCitBdWd1c3QgMjAwMS4gY3VybCBpcyBidW5kbGVkIGluIE1hYyBPUyBYLCAxMC4xLiBJdCB3YXMgYWxyZWFkeSBiZWNvbWluZyBtb3JlCithbmQgbW9yZSBvZiBhIHN0YW5kYXJkIHV0aWxpdHkgb2YgTGludXggZGlzdHJpYnV0aW9ucyBhbmQgYSByZWd1bGFyIGluIHRoZSBCU0QKK3BvcnRzIGNvbGxlY3Rpb25zLiBUaGUgY3VybCB3ZWIgc2l0ZSBnZXRzIDgwMDAgdmlzaXRzIHdlZWtseS4gQ3VybCBDb3Jwb3JhdGlvbgorY29udGFjdGVkIERhbmllbCB0byBkaXNjdXNzICJ0aGUgbmFtZSBpc3N1ZSIuIEFmdGVyIERhbmllbCdzIHJlcGx5LCB0aGV5IGhhdmUKK25ldmVyIHNpbmNlIGdvdCBpbiB0b3VjaCBhZ2Fpbi4KKworU2VwdGVtYmVyIDIwMDEsIGxpYmN1cmwgNy45IGludHJvZHVjZXMgY29va2llIGphciBhbmQgY3VybF9mb3JtYWRkKCkuIER1cmluZwordGhlIGZvcnRoY29taW5nIDcuOS54IHJlbGVhc2VzLCB3ZSBpbnRyb2R1Y2VkIHRoZSBtdWx0aSBpbnRlcmZhY2Ugc2xvd2x5IGFuZAord2l0aG91dCBtdWNoIHdoaXN0bGVzLgorCitKdW5lIDIwMDIsIHRoZSBjdXJsIHdlYiBzaXRlIGdldHMgMTMwMDAgdmlzaXRzIHdlZWtseS4gY3VybCBhbmQgbGliY3VybCBpcworMzUwMDAgbGluZXMgb2YgY29kZS4gUmVwb3J0ZWQgc3VjY2Vzc2Z1bCBjb21waWxlcyBvbiBtb3JlIHRoYW4gNDAgY29tYmluYXRpb25zCitvZiBDUFVzIGFuZCBvcGVyYXRpbmcgc3lzdGVtcy4KKworVG8gZXN0aW1hdGUgbnVtYmVyIG9mIHVzZXJzIG9mIHRoZSBjdXJsIHRvb2wgb3IgbGliY3VybCBsaWJyYXJ5IGlzIG5leHQgdG8KK2ltcG9zc2libGUuIEFyb3VuZCA1MDAwIGRvd25sb2FkZWQgcGFja2FnZXMgZWFjaCB3ZWVrIGZyb20gdGhlIG1haW4gc2l0ZSBnaXZlcworYSBoaW50LCBidXQgdGhlIHBhY2thZ2VzIGFyZSBtaXJyb3JlZCBleHRlbnNpdmVseSwgYnVuZGxlZCB3aXRoIG51bWVyb3VzIE9TCitkaXN0cmlidXRpb25zIGFuZCBvdGhlcndpc2UgcmV0cmlldmVkIGFzIHBhcnQgb2Ygb3RoZXIgc29mdHdhcmUuCisKK1NlcHRlbWJlciAyMDAyLCB3aXRoIHRoZSByZWxlYXNlIG9mIGN1cmwgNy4xMCBpdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUCitsaWNlbnNlIG9ubHkuCisKK0phbnVhcnkgMjAwMy4gU3RhcnRlZCB3b3JraW5nIG9uIHRoZSBkaXN0cmlidXRlZCBjdXJsIHRlc3RzLiBUaGUgYXV0b2J1aWxkcy4KKworRmVicnVhcnkgMjAwMywgdGhlIGN1cmwgc2l0ZSBhdmVyYWdlcyBhdCAyMDAwMCB2aXNpdHMgd2Vla2x5LiBBdCBhbnkgZ2l2ZW4KK21vbWVudCwgdGhlcmUncyBhbiBhdmVyYWdlIG9mIDMgcGVvcGxlIGJyb3dzaW5nIHRoZSBjdXJsLmhheHguc2Ugc2l0ZS4KKworTXVsdGlwbGUgbmV3IGF1dGhlbnRpY2F0aW9uIHNjaGVtZXMgYXJlIHN1cHBvcnRlZDogRGlnZXN0IChNYXkpLCBOVExNIChKdW5lKQorYW5kIE5lZ290aWF0ZSAoSnVuZSkuCisKK05vdmVtYmVyIDIwMDM6IGN1cmwgNy4xMC44IGlzIHJlbGVhc2VkLiA0NTAwMCBsaW5lcyBvZiBjb2RlLiB+NTUwMDAgdW5pcXVlCit2aXNpdG9ycyB0byB0aGUgY3VybC5oYXh4LnNlIHNpdGUuIEZpdmUgb2ZmaWNpYWwgd2ViIG1pcnJvcnMuCisKK0RlY2VtYmVyIDIwMDMsIGZ1bGwtZmxlZGdlZCBTU0wgZm9yIEZUUCBpcyBzdXBwb3J0ZWQuCisKK0phbnVhcnkgMjAwNDogY3VybCA3LjExLjAgaW50cm9kdWNlZCBsYXJnZSBmaWxlIHN1cHBvcnQuCisKK0p1bmUgMjAwNDoKKworICBjdXJsIDcuMTIuMCBpbnRyb2R1Y2VkIElETiBzdXBwb3J0LiAxMCBvZmZpY2lhbCB3ZWIgbWlycm9ycy4KKworICBUaGlzIHJlbGVhc2UgYnVtcGVkIHRoZSBtYWpvciBTT05BTUUgdG8gMyBkdWUgdG8gdGhlIHJlbW92YWwgb2YgdGhlCisgIGN1cmxfZm9ybXBhcnNlKCkgZnVuY3Rpb24KKworQXVndXN0IDIwMDQ6CisgQ3VybCBhbmQgbGliY3VybCA3LjEyLjEKKworIFB1YmxpYyBjdXJsIHJlbGVhc2UgbnVtYmVyOiAgICAgICAgICAgICAgIDgyCisgUmVsZWFzZXMgY291bnRlZCBmcm9tIHRoZSB2ZXJ5IGJlZ2lubmluZzogMTA5CisgQXZhaWxhYmxlIGNvbW1hbmQgbGluZSBvcHRpb25zOiAgICAgICAgICAgOTYKKyBBdmFpbGFibGUgY3VybF9lYXN5X3NldG9wdCgpIG9wdGlvbnM6ICAgICAxMjAKKyBOdW1iZXIgb2YgcHVibGljIGZ1bmN0aW9ucyBpbiBsaWJjdXJsOiAgICAzNgorIEFtb3VudCBvZiBwdWJsaWMgd2ViIHNpdGUgbWlycm9yczogICAgICAgIDEyCisgTnVtYmVyIG9mIGtub3duIGxpYmN1cmwgYmluZGluZ3M6ICAgICAgICAgMjYKKworQXByaWwgMjAwNToKKworIEdudVRMUyBjYW4gbm93IG9wdGlvbmFsbHkgYmUgdXNlZCBmb3IgdGhlIHNlY3VyZSBsYXllciB3aGVuIGN1cmwgaXMgYnVpbHQuCisKK1NlcHRlbWJlciAyMDA1OgorCisgVEZUUCBzdXBwb3J0IHdhcyBhZGRlZC4KKworIE1vcmUgdGhhbiAxMDAsMDAwIHVuaXF1ZSB2aXNpdG9ycyBvZiB0aGUgY3VybCB3ZWIgc2l0ZS4gMjUgbWlycm9ycy4KKworRGVjZW1iZXIgMjAwNToKKworIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHk6IGxpYmN1cmwgVVJMIEJ1ZmZlciBPdmVyZmxvdworCitKYW51YXJ5IDIwMDY6CisKKyBXZSBkcm9wcGVkIHN1cHBvcnQgZm9yIEdvcGhlci4gV2UgZm91bmQgYnVncyBpbiB0aGUgaW1wbGVtZW50YXRpb24gdGhhdAorIHR1cm5lZCBvdXQgaGF2aW5nIGJlZW4gaW50cm9kdWNlZCB5ZWFycyBhZ28sIHNvIHdpdGggdGhlIGNvbmNsdXNpb24gdGhhdAorIG5vYm9keSBoYWQgZm91bmQgb3V0IGluIGFsbCB0aGlzIHRpbWUgd2UgcmVtb3ZlZCBpdCBpbnN0ZWFkIG9mIGZpeGluZyBpdC4KKworTWFyY2ggMjAwNjoKKworIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHk6IGxpYmN1cmwgVEZUUCBQYWNrZXQgQnVmZmVyIE92ZXJmbG93CisKK0FwcmlsIDIwMDY6CisKKyBBZGRlZCB0aGUgbXVsdGlfc29ja2V0KCkgQVBJCisKK1NlcHRlbWJlciAyMDA2OgorCisgVGhlIG1ham9yIFNPTkFNRSBudW1iZXIgZm9yIGxpYmN1cmwgd2FzIGJ1bXBlZCB0byA0IGR1ZSB0byB0aGUgcmVtb3ZhbCBvZgorIGZ0cCB0aGlyZCBwYXJ0eSB0cmFuc2ZlciBzdXBwb3J0LgorCitOb3ZlbWJlciAyMDA2OgorCisgQWRkZWQgU0NQIGFuZCBTRlRQIHN1cHBvcnQKKworRmVicnVhcnkgMjAwNzoKKworIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBNb3ppbGxhIE5TUyBsaWJyYXJ5IHRvIGRvIHRoZSBTU0wvVExTIHN0dWZmCisKK0p1bHkgMjAwNzoKKworIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHk6IGxpYmN1cmwgR251VExTIGluc3VmZmljaWVudCBjZXJ0IHZlcmlmaWNhdGlvbgorCitOb3ZlbWJlciAyMDA4OgorCisgQ29tbWFuZCBsaW5lIG9wdGlvbnM6ICAgICAgICAgMTI4CisgY3VybF9lYXN5X3NldG9wdCgpIG9wdGlvbnM6ICAgMTU4CisgUHVibGljIGZ1bmN0aW9ucyBpbiBsaWJjdXJsOiAgNTgKKyBLbm93biBsaWJjdXJsIGJpbmRpbmdzOiAgICAgICAzNworIENvbnRyaWJ1dG9yczogICAgICAgICAgICAgICAgIDY4MworCisgMTQ1LDAwMCB1bmlxdWUgdmlzaXRvcnMuID4xMDAgR0IgZG93bmxvYWRlZC4KKworTWFyY2ggMjAwOToKKworIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHk6IGxpYmN1cmwgQXJiaXRyYXJ5IEZpbGUgQWNjZXNzCisKK0F1Z3VzdCAyMDA5OgorCisgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eTogbGliY3VybCBlbWJlZGRlZCB6ZXJvIGluIGNlcnQgbmFtZQorCitEZWNlbWJlciAyMDA5OgorCisgQWRkZWQgc3VwcG9ydCBmb3IgSU1BUCwgUE9QMyBhbmQgU01UUAorCitKYW51YXJ5IDIwMTA6CisKKyBBZGRlZCBzdXBwb3J0IGZvciBSVFNQCisKK0ZlYnJ1YXJ5IDIwMTA6CisKKyBzZWN1cml0eSB2dWxuZXJhYmlsaXR5OiBsaWJjdXJsIGRhdGEgY2FsbGJhY2sgZXhjZXNzaXZlIGxlbmd0aAorCitNYXJjaCAyMDEwOgorCisgVGhlIHByb2plY3Qgc3dpdGNoZWQgb3ZlciB0byB1c2UgZ2l0IGluc3RlYWQgb2YgQ1ZTIGZvciBzb3VyY2UgY29kZSBjb250cm9sCisKK01heSAyMDEwOgorCisgQWRkZWQgc3VwcG9ydCBmb3IgUlRNUAorCisgQWRkZWQgc3VwcG9ydCBmb3IgUG9sYXJTU0wgdG8gZG8gdGhlIFNTTC9UTFMgc3R1ZmYKKworQXVndXN0IDIwMTA6CisKKyBQdWJsaWMgY3VybCByZWxlYXNlczogICAgICAgICAxMTcKKyBDb21tYW5kIGxpbmUgb3B0aW9uczogICAgICAgICAxMzgKKyBjdXJsX2Vhc3lfc2V0b3B0KCkgb3B0aW9uczogICAxODAKKyBQdWJsaWMgZnVuY3Rpb25zIGluIGxpYmN1cmw6ICA1OAorIEtub3duIGxpYmN1cmwgYmluZGluZ3M6ICAgICAgIDM5CisgQ29udHJpYnV0b3JzOiAgICAgICAgICAgICAgICAgODA4CisKKyBHb3BoZXIgc3VwcG9ydCBhZGRlZCAocmUtYWRkZWQgYWN0dWFsbHkpCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL0lOU1RBTEwgYi9jdXJsLTcuMjUuMC9kb2NzL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2ZWJkMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvSU5TVEFMTApAQCAtMCwwICsxLDEwNTYgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93IFRvIENvbXBpbGUKKworSW5zdGFsbGluZyBCaW5hcnkgUGFja2FnZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIExvdHMgb2YgcGVvcGxlIGRvd25sb2FkIGJpbmFyeSBkaXN0cmlidXRpb25zIG9mIGN1cmwgYW5kIGxpYmN1cmwuIFRoaXMKKyAgIGRvY3VtZW50IGRvZXMgbm90IGRlc2NyaWJlIGhvdyB0byBpbnN0YWxsIGN1cmwgb3IgbGliY3VybCB1c2luZyBzdWNoIGEKKyAgIGJpbmFyeSBwYWNrYWdlLiBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gY29tcGlsZSwgYnVpbGQgYW5kIGluc3RhbGwKKyAgIGN1cmwgYW5kIGxpYmN1cmwgZnJvbSBzb3VyY2UgY29kZS4KKworQnVpbGRpbmcgZnJvbSBnaXQKKz09PT09PT09PT09PT09PT09CisKKyAgIElmIHlvdSBnZXQgeW91ciBjb2RlIG9mZiBhIGdpdCByZXBvc2l0b3J5LCBzZWUgdGhlIEdJVC1JTkZPIGZpbGUgaW4gdGhlCisgICByb290IGRpcmVjdG9yeSBmb3Igc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBwcm9jZWVkLgorCitVTklYCis9PT09CisgICBBIG5vcm1hbCB1bml4IGluc3RhbGxhdGlvbiBpcyBtYWRlIGluIHRocmVlIG9yIGZvdXIgc3RlcHMgKGFmdGVyIHlvdSd2ZQorICAgdW5wYWNrZWQgdGhlIHNvdXJjZSBhcmNoaXZlKToKKworICAgICAgICAuL2NvbmZpZ3VyZQorICAgICAgICBtYWtlCisgICAgICAgIG1ha2UgdGVzdCAob3B0aW9uYWwpCisgICAgICAgIG1ha2UgaW5zdGFsbAorCisgICBZb3UgcHJvYmFibHkgbmVlZCB0byBiZSByb290IHdoZW4gZG9pbmcgdGhlIGxhc3QgY29tbWFuZC4KKworICAgSWYgeW91IGhhdmUgY2hlY2tlZCBvdXQgdGhlIHNvdXJjZXMgZnJvbSB0aGUgZ2l0IHJlcG9zaXRvcnksIHJlYWQgdGhlCisgICBHSVQtSU5GTyBvbiBob3cgdG8gcHJvY2VlZC4KKworICAgR2V0IGEgZnVsbCBsaXN0aW5nIG9mIGFsbCBhdmFpbGFibGUgY29uZmlndXJlIG9wdGlvbnMgYnkgaW52b2tpbmcgaXQgbGlrZToKKworICAgICAgICAuL2NvbmZpZ3VyZSAtLWhlbHAKKworICAgSWYgeW91IHdhbnQgdG8gaW5zdGFsbCBjdXJsIGluIGEgZGlmZmVyZW50IGZpbGUgaGllcmFyY2h5IHRoYW4gL3Vzci9sb2NhbCwKKyAgIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhhdCBhbHJlYWR5IHdoZW4gcnVubmluZyBjb25maWd1cmU6CisKKyAgICAgICAgLi9jb25maWd1cmUgLS1wcmVmaXg9L3BhdGgvdG8vY3VybC90cmVlCisKKyAgIElmIHlvdSBoYXBwZW4gdG8gaGF2ZSB3cml0ZSBwZXJtaXNzaW9uIGluIHRoYXQgZGlyZWN0b3J5LCB5b3UgY2FuIGRvICdtYWtlCisgICBpbnN0YWxsJyB3aXRob3V0IGJlaW5nIHJvb3QuIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSB0byBtYWtlIGEgbG9jYWwKKyAgIGluc3RhbGwgaW4geW91ciBvd24gaG9tZSBkaXJlY3Rvcnk6CisKKyAgICAgICAgLi9jb25maWd1cmUgLS1wcmVmaXg9JEhPTUUKKyAgICAgICAgbWFrZQorICAgICAgICBtYWtlIGluc3RhbGwKKworICAgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgYWx3YXlzIHRyaWVzIHRvIGZpbmQgYSB3b3JraW5nIFNTTCBsaWJyYXJ5IHVubGVzcworICAgZXhwbGljaXRseSB0b2xkIG5vdCB0by4gSWYgeW91IGhhdmUgT3BlblNTTCBpbnN0YWxsZWQgaW4gdGhlIGRlZmF1bHQgc2VhcmNoCisgICBwYXRoIGZvciB5b3VyIGNvbXBpbGVyL2xpbmtlciwgeW91IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4gSWYKKyAgIHlvdSBoYXZlIE9wZW5TU0wgaW5zdGFsbGVkIGluIC91c3IvbG9jYWwvc3NsLCB5b3UgY2FuIHJ1biBjb25maWd1cmUgbGlrZToKKworICAgICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtc3NsCisKKyAgIElmIHlvdSBoYXZlIE9wZW5TU0wgaW5zdGFsbGVkIHNvbWV3aGVyZSBlbHNlIChmb3IgZXhhbXBsZSwgL29wdC9PcGVuU1NMKQorICAgYW5kIHlvdSBoYXZlIHBrZy1jb25maWcgaW5zdGFsbGVkLCBzZXQgdGhlIHBrZy1jb25maWcgcGF0aCBmaXJzdCwgbGlrZSB0aGlzOgorCisgICAgICAgIGVudiBQS0dfQ09ORklHX1BBVEg9L29wdC9PcGVuU1NML2xpYi9wa2djb25maWcgLi9jb25maWd1cmUgLS13aXRoLXNzbAorCisgICBXaXRob3V0IHBrZy1jb25maWcgaW5zdGFsbGVkLCB1c2UgdGhpczoKKworICAgICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtc3NsPS9vcHQvT3BlblNTTAorCisgICBJZiB5b3UgaW5zaXN0IG9uIGZvcmNpbmcgYSBidWlsZCB3aXRob3V0IFNTTCBzdXBwb3J0LCBldmVuIHRob3VnaCB5b3UgbWF5CisgICBoYXZlIE9wZW5TU0wgaW5zdGFsbGVkIGluIHlvdXIgc3lzdGVtLCB5b3UgY2FuIHJ1biBjb25maWd1cmUgbGlrZSB0aGlzOgorCisgICAgICAgIC4vY29uZmlndXJlIC0td2l0aG91dC1zc2wKKworICAgSWYgeW91IGhhdmUgT3BlblNTTCBpbnN0YWxsZWQsIGJ1dCB3aXRoIHRoZSBsaWJyYXJpZXMgaW4gb25lIHBsYWNlIGFuZCB0aGUKKyAgIGhlYWRlciBmaWxlcyBzb21ld2hlcmUgZWxzZSwgeW91IGhhdmUgdG8gc2V0IHRoZSBMREZMQUdTIGFuZCBDUFBGTEFHUworICAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHByaW9yIHRvIHJ1bm5pbmcgY29uZmlndXJlLiAgU29tZXRoaW5nIGxpa2UgdGhpcworICAgc2hvdWxkIHdvcms6CisKKyAgICAgKHdpdGggdGhlIEJvdXJuZSBzaGVsbCBhbmQgaXRzIGNsb25lcyk6CisKKyAgICAgICAgQ1BQRkxBR1M9Ii1JL3BhdGgvdG8vc3NsL2luY2x1ZGUiIExERkxBR1M9Ii1ML3BhdGgvdG8vc3NsL2xpYiIgXAorICAgICAgICAgICAuL2NvbmZpZ3VyZQorCisgICAgICh3aXRoIGNzaCwgdGNzaCBhbmQgdGhlaXIgY2xvbmVzKToKKworICAgICAgICBlbnYgQ1BQRkxBR1M9Ii1JL3BhdGgvdG8vc3NsL2luY2x1ZGUiIExERkxBR1M9Ii1ML3BhdGgvdG8vc3NsL2xpYiIgXAorICAgICAgICAgICAuL2NvbmZpZ3VyZQorCisgICBJZiB5b3UgaGF2ZSBzaGFyZWQgU1NMIGxpYnMgaW5zdGFsbGVkIGluIGEgZGlyZWN0b3J5IHdoZXJlIHlvdXIgcnVuLXRpbWUKKyAgIGxpbmtlciBkb2Vzbid0IGZpbmQgdGhlbSAod2hpY2ggdXN1YWxseSBjYXVzZXMgY29uZmlndXJlIGZhaWx1cmVzKSwgeW91IGNhbgorICAgcHJvdmlkZSB0aGUgLVIgb3B0aW9uIHRvIGxkIG9uIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgdG8gc2V0IGEgaGFyZC1jb2RlZAorICAgcGF0aCB0byB0aGUgcnVuLXRpbWUgbGlua2VyOgorCisgICAgICAgIGVudiBMREZMQUdTPS1SL3Vzci9sb2NhbC9zc2wvbGliIC4vY29uZmlndXJlIC0td2l0aC1zc2wKKworICAgTU9SRSBPUFRJT05TCisgICAtLS0tLS0tLS0tLS0KKworICAgICBUbyBmb3JjZSBjb25maWd1cmUgdG8gdXNlIHRoZSBzdGFuZGFyZCBjYyBjb21waWxlciBpZiBib3RoIGNjIGFuZCBnY2MgYXJlCisgICAgIHByZXNlbnQsIHJ1biBjb25maWd1cmUgbGlrZQorCisgICAgICAgQ0M9Y2MgLi9jb25maWd1cmUKKyAgICAgICAgIG9yCisgICAgICAgZW52IENDPWNjIC4vY29uZmlndXJlCisKKyAgICAgVG8gZm9yY2UgYSBzdGF0aWMgbGlicmFyeSBjb21waWxlLCBkaXNhYmxlIHRoZSBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICBieSBydW5uaW5nIGNvbmZpZ3VyZSBsaWtlOgorCisgICAgICAgLi9jb25maWd1cmUgLS1kaXNhYmxlLXNoYXJlZAorCisgICAgIFRvIHRlbGwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gc2tpcCBzZWFyY2hpbmcgZm9yIHRocmVhZC1zYWZlIGZ1bmN0aW9ucywKKyAgICAgYWRkIGFuIG9wdGlvbiBsaWtlOgorCisgICAgICAgLi9jb25maWd1cmUgLS1kaXNhYmxlLXRocmVhZAorCisgICAgIFRvIGJ1aWxkIGN1cmwgd2l0aCBrZXJiZXJvczQgc3VwcG9ydCBlbmFibGVkLCBjdXJsIHJlcXVpcmVzIHRoZSBrcmI0IGxpYnMKKyAgICAgYW5kIGhlYWRlcnMgaW5zdGFsbGVkLiBZb3UgY2FuIHRoZW4gdXNlIGEgc2V0IG9mIG9wdGlvbnMgdG8gdGVsbAorICAgICBjb25maWd1cmUgd2hlcmUgdGhvc2UgYXJlOgorCisgICAgICAgICAgLS13aXRoLWtyYjQtaW5jbHVkZXNbPURJUl0gICBTcGVjaWZ5IGxvY2F0aW9uIG9mIGtlcmJlcm9zNCBoZWFkZXJzCisgICAgICAgICAgLS13aXRoLWtyYjQtbGlic1s9RElSXSAgICAgICBTcGVjaWZ5IGxvY2F0aW9uIG9mIGtlcmJlcm9zNCBsaWJzCisgICAgICAgICAgLS13aXRoLWtyYjRbPURJUl0gICAgICAgICAgICB3aGVyZSB0byBsb29rIGZvciBLZXJiZXJvczQKKworICAgICBJbiBtb3N0IGNhc2VzLCAvdXNyL2F0aGVuYSBpcyB0aGUgaW5zdGFsbCBwcmVmaXggYW5kIHRoZW4gaXQgd29ya3Mgd2l0aAorCisgICAgICAgLi9jb25maWd1cmUgLS13aXRoLWtyYjQ9L3Vzci9hdGhlbmEKKworICAgICBJZiB5b3UncmUgYSBjdXJsIGRldmVsb3BlciBhbmQgdXNlIGdjYywgeW91IG1pZ2h0IHdhbnQgdG8gZW5hYmxlIG1vcmUKKyAgICAgZGVidWcgb3B0aW9ucyB3aXRoIHRoZSAtLWVuYWJsZS1kZWJ1ZyBvcHRpb24uCisKKyAgICAgY3VybCBjYW4gYmUgYnVpbHQgdG8gdXNlIGEgd2hvbGUgcmFuZ2Ugb2YgbGlicmFyaWVzIHRvIHByb3ZpZGUgdmFyaW91cworICAgICB1c2VmdWwgc2VydmljZXMsIGFuZCBjb25maWd1cmUgd2lsbCB0cnkgdG8gYXV0by1kZXRlY3QgYSBkZWNlbnQKKyAgICAgZGVmYXVsdC4gQnV0IGlmIHlvdSB3YW50IHRvIGFsdGVyIGl0LCB5b3UgY2FuIHNlbGVjdCBob3cgdG8gZGVhbCB3aXRoCisgICAgIGVhY2ggaW5kaXZpZHVhbCBsaWJyYXJ5LgorCisgICAgIFRvIGJ1aWxkIHdpdGggR251VExTIHN1cHBvcnQgaW5zdGVhZCBvZiBPcGVuU1NMIGZvciBTU0wvVExTLCBub3RlIHRoYXQKKyAgICAgeW91IG5lZWQgdG8gdXNlIGJvdGggLS13aXRob3V0LXNzbCBhbmQgLS13aXRoLWdudXRscy4KKworICAgICBUbyBidWlsZCB3aXRoIHlhc3NsIHN1cHBvcnQgaW5zdGVhZCBvZiBPcGVuU1NMIG9yIEdudVRMUywgeW91IG11c3QgYnVpbGQKKyAgICAgeWFzc2wgd2l0aCBpdHMgT3BlblNTTCBlbXVsYXRpb24gZW5hYmxlZCBhbmQgcG9pbnQgdG8gdGhhdCBkaXJlY3Rvcnkgcm9vdAorICAgICB3aXRoIGNvbmZpZ3VyZSAtLXdpdGgtc3NsLgorCisgICAgIFRvIGJ1aWxkIHdpdGggTlNTIHN1cHBvcnQgaW5zdGVhZCBvZiBPcGVuU1NMIGZvciBTU0wvVExTLCBub3RlIHRoYXQKKyAgICAgeW91IG5lZWQgdG8gdXNlIGJvdGggLS13aXRob3V0LXNzbCBhbmQgLS13aXRoLW5zcy4KKworICAgICBUbyBidWlsZCB3aXRoIFBvbGFyU1NMIHN1cHBvcnQgaW5zdGVhZCBvZiBPcGVuU1NMIGZvciBTU0wvVExTLCBub3RlIHRoYXQKKyAgICAgeW91IG5lZWQgdG8gdXNlIGJvdGggLS13aXRob3V0LXNzbCBhbmQgLS13aXRoLXBvbGFyc3NsLgorCisgICAgIFRvIGJ1aWxkIHdpdGggYXhUTFMgc3VwcG9ydCBpbnN0ZWFkIG9mIE9wZW5TU0wgZm9yIFRMUywgbm90ZSB0aGF0IHlvdQorICAgICBuZWVkIHRvIHVzZSBib3RoIC0td2l0aG91dC1zc2wgYW5kIC0td2l0aC1heHRscy4KKworICAgICBUbyBnZXQgR1NTQVBJIHN1cHBvcnQsIGJ1aWxkIHdpdGggLS13aXRoLWdzc2FwaSBhbmQgaGF2ZSB0aGUgTUlUIG9yCisgICAgIEhlaW1kYWwgS2VyYmVyb3MgNSBwYWNrYWdlcyBpbnN0YWxsZWQuCisKKyAgICAgVG8gZ2V0IHN1cHBvcnQgZm9yIFNDUCBhbmQgU0ZUUCwgYnVpbGQgd2l0aCAtLXdpdGgtbGlic3NoMiBhbmQgaGF2ZQorICAgICBsaWJzc2gyIDAuMTYgb3IgbGF0ZXIgaW5zdGFsbGVkLgorCisgICBTUEVDSUFMIENBU0VTCisgICAtLS0tLS0tLS0tLS0tCisgICBTb21lIHZlcnNpb25zIG9mIHVDbGliYyByZXF1aXJlIGNvbmZpZ3VyaW5nIHdpdGggQ1BQRkxBR1M9LURfR05VX1NPVVJDRT0xCisgICB0byBnZXQgY29ycmVjdCBsYXJnZSBmaWxlIHN1cHBvcnQuCisKKyAgIFRoZSBPcGVuIFdhdGNvbSBDIGNvbXBpbGVyIG9uIExpbnV4IHJlcXVpcmVzIGNvbmZpZ3VyaW5nIHdpdGggdGhlIHZhcmlhYmxlczoKKworICAgICAgIC4vY29uZmlndXJlIENDPW93Y2MgQVI9IiRXQVRDT00vYmlubC93bGliIiBBUl9GTEFHUz0tcSBcCisgICAgICAgICAgIFJBTkxJQj0vYmluL3RydWUgU1RSSVA9IiRXQVRDT00vYmlubC93c3RyaXAiIENGTEFHUz0tV2V4dHJhCisKKworV2luMzIKKz09PT09CisKKyAgIEJ1aWxkaW5nIFdpbmRvd3MgRExMcyBhbmQgQyBydW4tdGltZSAoQ1JUKSBsaW5rYWdlIGlzc3VlcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIEFzIGEgZ2VuZXJhbCBydWxlLCBidWlsZGluZyBhIERMTCB3aXRoIHN0YXRpYyBDUlQgbGlua2FnZSBpcyBoaWdobHkKKyAgIGRpc2NvdXJhZ2VkLCBhbmQgaW50ZXJtaXhpbmcgQ1JUcyBpbiB0aGUgc2FtZSBhcHAgaXMgc29tZXRoaW5nIHRvCisgICBhdm9pZCBhdCBhbnkgY29zdC4KKworICAgUmVhZGluZyBhbmQgY29tcHJlaGVuc2lvbiBvZiBNaWNyb3NvZnQgS25vd2xlZGdlIEJhc2UgYXJ0aWNsZXMKKyAgIEtCOTQyNDggYW5kIEtCMTQwNTg0IGlzIGEgbXVzdCBmb3IgYW55IFdpbmRvd3MgZGV2ZWxvcGVyLiBFc3BlY2lhbGx5CisgICBpbXBvcnRhbnQgaXMgZnVsbCB1bmRlcnN0YW5kaW5nIGlmIHlvdSBhcmUgbm90IGdvaW5nIHRvIGZvbGxvdyB0aGUKKyAgIGFkdmljZSBnaXZlbiBhYm92ZS4KKworICAgS0I5NDI0OCAgLSBIb3cgVG8gVXNlIHRoZSBDIFJ1bi1UaW1lCisgICAgICAgICAgICAgIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20va2IvOTQyNDgvZW4tdXMKKworICAgS0IxNDA1ODQgLSBIb3cgdG8gbGluayB3aXRoIHRoZSBjb3JyZWN0IEMgUnVuLVRpbWUgKENSVCkgbGlicmFyeQorICAgICAgICAgICAgICBodHRwOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2tiLzE0MDU4NC9lbi11cworCisgICBLQjE5MDc5OSAtIFBvdGVudGlhbCBFcnJvcnMgUGFzc2luZyBDUlQgT2JqZWN0cyBBY3Jvc3MgRExMIEJvdW5kYXJpZXMKKyAgICAgICAgICAgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMjM1NDYwCisKKyAgIElmIHlvdXIgYXBwIGlzIG1pc2JlaGF2aW5nIGluIHNvbWUgc3RyYW5nZSB3YXksIG9yIGl0IGlzIHN1ZmZlcmluZworICAgZnJvbSBtZW1vcnkgY29ycnVwdGlvbiwgYmVmb3JlIGFza2luZyBmb3IgZnVydGhlciBoZWxwLCBwbGVhc2UgdHJ5CisgICBmaXJzdCB0byByZWJ1aWxkIGV2ZXJ5IHNpbmdsZSBsaWJyYXJ5IHlvdXIgYXBwIHVzZXMgYXMgd2VsbCBhcyB5b3VyCisgICBhcHAgdXNpbmcgdGhlIGRlYnVnIG11bHRpdGhyZWFkZWQgZHluYW1pYyBDIHJ1bnRpbWUuCisKKyAgIE1pbmdXMzIKKyAgIC0tLS0tLS0KKworICAgTWFrZSBzdXJlIHRoYXQgTWluR1czMidzIGJpbiBkaXIgaXMgaW4gdGhlIHNlYXJjaCBwYXRoLCBmb3IgZXhhbXBsZToKKworICAgICBzZXQgUEFUSD1jOlxtaW5ndzMyXGJpbjslUEFUSCUKKworICAgdGhlbiBydW4gJ21pbmd3MzItbWFrZSBtaW5ndzMyJyBpbiB0aGUgcm9vdCBkaXIuIFRoZXJlIGFyZSBvdGhlcgorICAgbWFrZSB0YXJnZXRzIGF2YWlsYWJsZSB0byBidWlsZCBsaWJjdXJsIHdpdGggbW9yZSBmZWF0dXJlcywgdXNlOgorICAgJ21pbmd3MzItbWFrZSBtaW5ndzMyLXpsaWInIHRvIGJ1aWxkIHdpdGggWmxpYiBzdXBwb3J0OworICAgJ21pbmd3MzItbWFrZSBtaW5ndzMyLXNzbC16bGliJyB0byBidWlsZCB3aXRoIFNTTCBhbmQgWmxpYiBlbmFibGVkOworICAgJ21pbmd3MzItbWFrZSBtaW5ndzMyLXNzaDItc3NsLXpsaWInIHRvIGJ1aWxkIHdpdGggU1NIMiwgU1NMLCBabGliOworICAgJ21pbmd3MzItbWFrZSBtaW5ndzMyLXNzaDItc3NsLXNzcGktemxpYicgdG8gYnVpbGQgd2l0aCBTU0gyLCBTU0wsIFpsaWIKKyAgIGFuZCBTU1BJIHN1cHBvcnQuCisKKyAgIElmIHlvdSBoYXZlIGFueSBwcm9ibGVtcyBsaW5raW5nIGxpYnJhcmllcyBvciBmaW5kaW5nIGhlYWRlciBmaWxlcywgYmUgc3VyZQorICAgdG8gdmVyaWZ5IHRoYXQgdGhlIHByb3ZpZGVkICJNYWtlZmlsZS5tMzIiIGZpbGVzIHVzZSB0aGUgcHJvcGVyIHBhdGhzLCBhbmQKKyAgIGFkanVzdCBhcyBuZWNlc3NhcnkuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlc2UgcGF0aHMgd2l0aAorICAgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBmb3IgZXhhbXBsZToKKworICAgICBzZXQgWkxJQl9QQVRIPWM6XHpsaWItMS4yLjUKKyAgICAgc2V0IE9QRU5TU0xfUEFUSD1jOlxvcGVuc3NsLTAuOS44cgorICAgICBzZXQgTElCU1NIMl9QQVRIPWM6XGxpYnNzaDItMS4yLjgKKworICAgQVRURU5USU9OOiBpZiB5b3Ugd2FudCB0byBidWlsZCB3aXRoIGxpYnNzaDIgc3VwcG9ydCB5b3UgaGF2ZSB0byB1c2UgbGF0ZXN0CisgICB2ZXJzaW9uIDAuMTcgLSBwcmV2aW91cyB2ZXJzaW9ucyB3aWxsIE5PVCB3b3JrIHdpdGggNy4xNy4wIGFuZCBsYXRlciEKKyAgIFVzZSAnbWluZ3czMi1tYWtlIG1pbmd3MzItc3NoMi1zc2wtemxpYicgdG8gYnVpbGQgd2l0aCBTU0gyIGFuZCBTU0wgZW5hYmxlZC4KKworICAgSXQgaXMgbm93IGFsc28gcG9zc2libGUgdG8gYnVpbGQgd2l0aCBvdGhlciBMREFQIFNES3MgdGhhbiBNUyBMREFQOworICAgY3VycmVudGx5IGl0IGlzIHBvc3NpYmxlIHRvIGJ1aWxkIHdpdGggbmF0aXZlIFdpbjMyIE9wZW5MREFQLCBvciB3aXRoIHRoZQorICAgTm92ZWxsIENMREFQIFNESy4gSWYgeW91IHdhbnQgdG8gdXNlIHRoZXNlIHlvdSBuZWVkIHRvIHNldCB0aGVzZSB2YXJzOgorCisgICAgIHNldCBMREFQX1NESz1jOlxvcGVubGRhcAorICAgICBzZXQgVVNFX0xEQVBfT1BFTkxEQVA9MQorCisgICBvciBmb3IgdXNpbmcgdGhlIE5vdmVsbCBTREs6CisKKyAgICAgc2V0IFVTRV9MREFQX05PVkVMTD0xCisKKyAgIElmIHlvdSB3YW50IHRvIGVuYWJsZSBMREFQUyBzdXBwb3J0IHRoZW4gc2V0IExEQVBTPTEuCisKKyAgIC0gb3B0aW9uYWwgTWluZ1czMi1idWlsdCBPcGVuTERBUCBTREsgYXZhaWxhYmxlIGZyb206CisgICAgIGh0dHA6Ly93d3cuZ2tudy5uZXQvbWlycm9yL29wZW5sZGFwLworICAgLSBvcHRpb25hbCByZWNlbnQgTm92ZWxsIENMREFQIFNESyBhdmFpbGFibGUgZnJvbToKKyAgICAgaHR0cDovL2RldmVsb3Blci5ub3ZlbGwuY29tL25kay9jbGRhcC5odG0KKworCisgICBDeWd3aW4KKyAgIC0tLS0tLQorCisgICBBbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSB1bml4IGluc3RhbGxhdGlvbi4gUnVuIHRoZSBjb25maWd1cmUgc2NyaXB0IGluIHRoZQorICAgY3VybCByb290IHdpdGggJ3NoIGNvbmZpZ3VyZScuIE1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgc2ggZXhlY3V0YWJsZSBpbgorICAgL2Jpbi8gb3IgeW91J2xsIHNlZSB0aGUgY29uZmlndXJlIGZhaWwgdG93YXJkIHRoZSBlbmQuCisKKyAgIFJ1biAnbWFrZScKKworICAgRGV2LUNwcAorICAgLS0tLS0tLQorCisgICBTZWUgdGhlIHNlcGFyYXRlIElOU1RBTEwuZGV2Y3BwIGZpbGUgZm9yIGRldGFpbHMuCisKKyAgIE1TVkMgNiBjYXZlYXRzCisgICAtLS0tLS0tLS0tLS0tLQorCisgICBJZiB5b3UgdXNlIE1TVkMgNiBpdCBpcyByZXF1aXJlZCB0aGF0IHlvdSB1c2UgdGhlIEZlYnJ1YXJ5IDIwMDMgZWRpdGlvbiBQU0RLOgorICAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL21zZG93bmxvYWQvcGxhdGZvcm1zZGsvc2RrdXBkYXRlL3BzZGstZnVsbC5odG0KKworICAgQnVpbGRpbmcgYW55IHNvZnR3YXJlIHdpdGggTVNWQyA2IHdpdGhvdXQgaGF2aW5nIFBTREsgaW5zdGFsbGVkIGlzIGp1c3QKKyAgIGFza2luZyBmb3IgdHJvdWJsZSBkb3duIHRoZSByb2FkIG9uY2UgeW91IGhhdmUgcmVsZWFzZWQgaXQsIHlvdSBtaWdodCBub3RpY2UKKyAgIHRoZSBwcm9ibGVtcyBpbiB0aGUgZmlyc3QgY29ybmVyIG9yIHRlbiBtaWxlcyBhaGVhZCwgZGVwZW5kaW5nIG1vc3RseSBvbiB5b3VyCisgICBjaG9pY2Ugb2Ygc3RhdGljIHZzIGR5bmFtaWMgcnVudGltZSBhbmQgdGhpcmQgcGFydHkgbGlicmFyaWVzLiBBbnlvbmUgdXNpbmcKKyAgIHNvZnR3YXJlIGJ1aWx0IGluIHN1Y2ggd2F5IHdpbGwgYXQgc29tZSBwb2ludCByZWdyZXQgaGF2aW5nIGRvbmUgc28uCisKKyAgIFdoZW4gc29tZW9uZSB1c2VzIE1TVkMgNiB3aXRob3V0IFBTREsgaGUgaXMgdXNpbmcgYSBjb21waWxlciBiYWNrIGZyb20gMTk5OC4KKworICAgSWYgdGhlIGNvbXBpbGVyIGhhcyBiZWVuIHVwZGF0ZWQgd2l0aCB0aGUgaW5zdGFsbGF0aW9uIG9mIGEgc2VydmljZSBwYWNrIGFzCisgICB0aG9zZSBtZW50aW9uZWQgaW4gaHR0cDovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9rYi8xOTQwMjIgdGhlIGNvbXBpbGVyIGNhbiBiZQorICAgc2FmZWx5IHVzZWQgdG8gcmVhZCBzb3VyY2UgY29kZSwgdHJhbnNsYXRlIGFuZCBtYWtlIGl0IG9iamVjdCBjb2RlLgorCisgICBCdXQsIGV2ZW4gd2l0aCB0aGUgc2VydmljZSBwYWNrcyBtZW50aW9uZWQgYWJvdmUgaW5zdGFsbGVkLCB0aGUgcmVzdWx0aW5nCisgICBzb2Z0d2FyZSBnZW5lcmF0ZWQgaW4gc3VjaCBhbiBlbnZpcm9ubWVudCB3aWxsIGJlIHVzaW5nIG91dGRhdGVkIHN5c3RlbQorICAgaGVhZGVyIGZpbGVzIGFuZCBsaWJyYXJpZXMgd2l0aCBidWdzIGFuZCBzZWN1cml0eSBpc3N1ZXMgd2hpY2ggaGF2ZSBhbHJlYWR5CisgICBiZWVuIGFkZHJlc3NlZCBhbmQgZml4ZWQgbG9uZyB0aW1lIGFnby4KKworICAgSW4gb3JkZXIgdG8gbWFrZSB1c2Ugb2YgdGhlIHVwZGF0ZWQgc3lzdGVtIGhlYWRlcnMgYW5kIGZpeGVkIGxpYnJhcmllcworICAgZm9yIE1TVkMgNiwgaXQgaXMgcmVxdWlyZWQgdGhhdCAnUGxhdGZvcm0gU0RLJywgUFNESyBmcm9tIG5vdyBvbndhcmRzLAorICAgaXMgaW5zdGFsbGVkLiBUaGUgc3BlY2lmaWMgUFNESyB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIGZvciBNU1ZDIDYgaXMgdGhlCisgICBGZWJydWFyeSAyMDAzIGVkaXRpb24sIHdoaWNoIGlzIHRoZSBsYXRlc3Qgb25lIHN1cHBvcnRpbmcgdGhlIE1TVkMgNiBjb21waWxlciwKKyAgIHRoaXMgUFNESyBpcyBhbHNvIGtub3duIGFzICdXaW5kb3dzIFNlcnZlciAyMDAzIFBTREsnIGFuZCBjYW4gYmUgZG93bmxvYWRlZAorICAgZnJvbSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbXNkb3dubG9hZC9wbGF0Zm9ybXNkay9zZGt1cGRhdGUvcHNkay1mdWxsLmh0bQorCisgICBTbywgYnVpbGRpbmcgY3VybCBhbmQgbGliY3VybCB3aXRoIE1TVkMgNiB3aXRob3V0IFBTREsgaXMgYWJzb2x1dGVseQorICAgZGlzY291cmFnZWQgZm9yIHRoZSBiZW5lZml0IG9mIGFueW9uZSB1c2luZyBzb2Z0d2FyZSBidWlsdCBpbiBzdWNoCisgICBlbnZpcm9ubWVudC4gQW5kIGl0IHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiBhbnkgd2F5LCBhcyB3ZSBjb3VsZCBqdXN0CisgICBiZSBodW50aW5nIGJ1Z3Mgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gZml4ZWQgd2F5IGJhY2sgaW4gMjAwMy4KKworICAgV2hlbiBidWlsZGluZyB3aXRoIE1TVkMgNiB3ZSBhdHRlbXB0IHRvIGRldGVjdCBpZiBQU0RLIGlzIG5vdCBiZWluZyB1c2VkLAorICAgYW5kIGlmIHRoaXMgaXMgdGhlIGNhc2UgdGhlIGJ1aWxkIHByb2Nlc3Mgd2lsbCBmYWlsIGhhcmQgd2l0aCBhbiBlcnJvcgorICAgbWVzc2FnZSBzdGF0aW5nIHRoYXQgdGhlIEZlYnJ1YXJ5IDIwMDMgUFNESyBpcyByZXF1aXJlZC4gVGhpcyBpcyBkb25lIHRvCisgICBwcm90ZWN0IHRoZSB1bnN1c3BlY3RpbmcgYW5kIGF2b2lkIFBFQktBQyBpc3N1ZXMuCisKKyAgIEFkZGl0aW9uYWxseSBpdCBtaWdodCBoYXBwZW4gdGhhdCBhIGRpZSBoYXJkIE1TVkMgaGFja2VyIHN0aWxsIHdhbnRzIHRvCisgICBidWlsZCBjdXJsIGFuZCBsaWJjdXJsIHdpdGggTVNWQyA2IHdpdGhvdXQgUFNESyBpbnN0YWxsZWQsIGV2ZW4ga25vd2luZworICAgdGhhdCB0aGlzIGlzIGEgaGlnaGx5IGRpc2NvdXJhZ2VkIGFuZCB1bnN1cHBvcnRlZCBidWlsZCBlbnZpcm9ubWVudC4gSW4KKyAgIHRoaXMgY2FzZSB0aGUgYnJhdmUgb2YgaGVhcnQgd2lsbCBiZSBhYmxlIHRvIGJ1aWxkIGluIHN1Y2ggYW4gZW52aXJvbm1lbnQKKyAgIHdpdGggdGhlIHJlcXVpc2l0ZSBvZiBkZWZpbmluZyBwcmVwcm9jZXNzb3Igc3ltYm9sIEFMTE9XX01TVkM2X1dJVEhPVVRfUFNESworICAgaW4gbGliL2NvbmZpZy13aW4zMi5oIGFuZCBrbm93aW5nIHRoYXQgTERBUCBhbmQgSVB2NiBzdXBwb3J0IHdpbGwgYmUgbWlzc2luZy4KKworICAgTVNWQyBmcm9tIGNvbW1hbmQgbGluZQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBSdW4gdGhlICd2Y3ZhcnMzMi5iYXQnIGZpbGUgdG8gZ2V0IGEgcHJvcGVyIGVudmlyb25tZW50LiBUaGUKKyAgIHZjdmFyczMyLmJhdCBmaWxlIGlzIHBhcnQgb2YgdGhlIE1pY3Jvc29mdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBhbmQKKyAgIHlvdSBtYXkgZmluZCBpdCBpbiAnQzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIFN0dWRpb1x2Yzk4XGJpbicKKyAgIHByb3ZpZGVkIHRoYXQgeW91IGluc3RhbGxlZCBWaXN1YWwgQy9DKysgNiBpbiB0aGUgZGVmYXVsdCBkaXJlY3RvcnkuCisKKyAgIFRoZW4gcnVuICdubWFrZSB2YycgaW4gY3VybCdzIHJvb3QgZGlyZWN0b3J5LgorCisgICBJZiB5b3Ugd2FudCB0byBjb21waWxlIHdpdGggemxpYiBzdXBwb3J0LCB5b3Ugd2lsbCBuZWVkIHRvIGJ1aWxkCisgICB6bGliIChodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvKSBhcyB3ZWxsLiBQbGVhc2UgcmVhZCB0aGUgemxpYgorICAgZG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gY29tcGlsZSB6bGliLiBEZWZpbmUgdGhlIFpMSUJfUEFUSCBlbnZpcm9ubWVudAorICAgdmFyaWFibGUgdG8gdGhlIGxvY2F0aW9uIG9mIHpsaWIuaCBhbmQgemxpYi5saWIsIGZvciBleGFtcGxlOgorCisgICAgIHNldCBaTElCX1BBVEg9YzpcemxpYi0xLjIuNQorCisgICBUaGVuIHJ1biAnbm1ha2UgdmMtemxpYicgaW4gY3VybCdzIHJvb3QgZGlyZWN0b3J5LgorCisgICBJZiB5b3Ugd2FudCB0byBjb21waWxlIHdpdGggU1NMIHN1cHBvcnQgeW91IG5lZWQgdGhlIE9wZW5TU0wgcGFja2FnZS4KKyAgIFBsZWFzZSByZWFkIHRoZSBPcGVuU1NMIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGNvbXBpbGUgYW5kIGluc3RhbGwKKyAgIHRoZSBPcGVuU1NMIGxpYnJhcmllcy4gIFRoZSBidWlsZCBwcm9jZXNzIG9mIE9wZW5TU0wgZ2VuZXJhdGVzIHRoZQorICAgbGliZWF5MzIuZGxsIGFuZCBzc2xlYXkzMi5kbGwgZmlsZXMgaW4gdGhlIG91dDMyZGxsIHN1YmRpcmVjdG9yeSBpbgorICAgdGhlIE9wZW5TU0wgaG9tZSBkaXJlY3RvcnkuICBPcGVuU1NMIHN0YXRpYyBsaWJyYXJpZXMgKGxpYmVheTMyLmxpYiwKKyAgIHNzbGVheTMyLmxpYiwgUlNBZ2x1ZS5saWIpIGFyZSBjcmVhdGVkIGluIHRoZSBvdXQzMiBzdWJkaXJlY3RvcnkuCisKKyAgIEJlZm9yZSBydW5uaW5nIG5tYWtlIGRlZmluZSB0aGUgT1BFTlNTTF9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGgKKyAgIHRoZSByb290L2Jhc2UgZGlyZWN0b3J5IG9mIE9wZW5TU0wsIGZvciBleGFtcGxlOgorCisgICAgIHNldCBPUEVOU1NMX1BBVEg9Yzpcb3BlbnNzbC0wLjkuOHEKKworICAgVGhlbiBydW4gJ25tYWtlIHZjLXNzbCcgb3IgJ25tYWtlIHZjLXNzbC1kbGwnIGluIGN1cmwncyByb290CisgICBkaXJlY3RvcnkuICAnbm1ha2UgdmMtc3NsJyB3aWxsIGNyZWF0ZSBhIGxpYmN1cmwgc3RhdGljIGFuZCBkeW5hbWljCisgICBsaWJyYXJpZXMgaW4gdGhlIGxpYiBzdWJkaXJlY3RvcnksIGFzIHdlbGwgYXMgYSBzdGF0aWNhbGx5IGxpbmtlZAorICAgdmVyc2lvbiBvZiBjdXJsLmV4ZSBpbiB0aGUgc3JjIHN1YmRpcmVjdG9yeS4gIFRoaXMgc3RhdGljYWxseSBsaW5rZWQKKyAgIHZlcnNpb24gaXMgYSBzdGFuZGFsb25lIGV4ZWN1dGFibGUgbm90IHJlcXVpcmluZyBhbnkgRExMIGF0CisgICBydW50aW1lLiBUaGlzIG1ha2UgbWV0aG9kIHJlcXVpcmVzIHRoYXQgeW91IGhhdmUgdGhlIHN0YXRpYyBPcGVuU1NMCisgICBsaWJyYXJpZXMgYXZhaWxhYmxlIGluIE9wZW5TU0wncyBvdXQzMiBzdWJkaXJlY3RvcnkuCisgICAnbm1ha2UgdmMtc3NsLWRsbCcgY3JlYXRlcyB0aGUgbGliY3VybCBkeW5hbWljIGxpYnJhcnkgYW5kCisgICBsaW5rcyBjdXJsLmV4ZSBhZ2FpbnN0IGxpYmN1cmwgYW5kIE9wZW5TU0wgZHluYW1pY2FsbHkuCisgICBUaGlzIGV4ZWN1dGFibGUgcmVxdWlyZXMgbGliY3VybC5kbGwgYW5kIHRoZSBPcGVuU1NMIERMTHMKKyAgIGF0IHJ1bnRpbWUuCisgICBSdW4gJ25tYWtlIHZjLXNzbC16bGliJyB0byBidWlsZCB3aXRoIGJvdGggc3NsIGFuZCB6bGliIHN1cHBvcnQuCisKKyAgIE1TVkMgNiBJREUKKyAgIC0tLS0tLS0tLS0KKworICAgQSBtaW5pbWFsIFZDKysgNi4wIHJlZmVyZW5jZSB3b3Jrc3BhY2UgKHZjNmN1cmwuZHN3KSBpcyBhdmFpbGFibGUgd2l0aCB0aGUKKyAgIHNvdXJjZSBkaXN0cmlidXRpb24gYXJjaGl2ZSB0byBhbGxvdyBwcm9wZXIgYnVpbGRpbmcgb2YgdGhlIHR3byBpbmNsdWRlZAorICAgcHJvamVjdHMsIHRoZSBsaWJjdXJsIGxpYnJhcnkgYW5kIHRoZSBjdXJsIHRvb2wuCisKKyAgIDEpIE9wZW4gdGhlIHZjNmN1cmwuZHN3IHdvcmtzcGFjZSB3aXRoIE1TVkM2J3MgSURFLgorICAgMikgU2VsZWN0ICdCdWlsZCcgZnJvbSB0b3AgbWVudS4KKyAgIDMpIFNlbGVjdCAnQmF0Y2ggQnVpbGQnIGZyb20gZHJvcGRvd24gbWVudS4KKyAgIDQpIE1ha2Ugc3VyZSB0aGF0IHRoZSBlaWdodCBwcm9qZWN0IGNvbmZpZ3VyYXRpb25zIGFyZSAnY2hlY2tlZCcuCisgICA1KSBDbGljayBvbiB0aGUgJ0J1aWxkJyBidXR0b24uCisgICA2KSBPbmNlIHRoZSBlaWdodCBwcm9qZWN0IGNvbmZpZ3VyYXRpb25zIGFyZSBidWlsdCB5b3UgYXJlIGRvbmUuCisKKyAgIER5bmFtaWMgYW5kIHN0YXRpYyBsaWJjdXJsIGxpYnJhcmllcyBhcmUgYnVpbHQgaW4gZGVidWcgYW5kIHJlbGVhc2UgZmxhdm91cnMsCisgICBhbmQgY2FuIGJlIGxvY2F0ZWQgZWFjaCBvbmUgaW4gaXRzIG93biBzdWJkaXJlY3RvcnksIERMTC1EZWJ1ZywgRExMLVJlbGVhc2UsCisgICBMSUItRGVidWcgYW5kIExJQi1SZWxlYXNlLCBhbGwgb2YgdGhlbSBiZWxvdyB0aGUgJ2xpYicgc3ViZGlyZWN0b3J5LgorCisgICBJbiB0aGUgc2FtZSB3YXkgZm91ciBjdXJsIGV4ZWN1dGFibGVzIGFyZSBjcmVhdGVkLCBlYWNoIHVzaW5nIGl0cyByZXNwZWN0aXZlCisgICBsaWJyYXJ5LiBUaGUgcmVzdWx0aW5nIGN1cmwgZXhlY3V0YWJsZXMgYXJlIGxvY2F0ZWQgaW4gaXRzIG93biBzdWJkaXJlY3RvcnksCisgICBETEwtRGVidWcsIERMTC1SZWxlYXNlLCBMSUItRGVidWcgYW5kIExJQi1SZWxlYXNlLCBiZWxvdyB0aGUgJ3NyYycgc3ViZGlyLgorCisgICBUaGVzZSByZWZlcmVuY2UgVkMrKyA2LjAgY29uZmlndXJhdGlvbnMgYXJlIGdlbmVyYXRlZCB1c2luZyB0aGUgZHluYW1pYyBDUlQuCisKKyAgIEludGVudGlvbmFsbHksIHRoZXNlIHJlZmVyZW5jZSBWQysrIDYuMCBwcm9qZWN0cyBhbmQgY29uZmlndXJhdGlvbnMgZG9uJ3QgdXNlCisgICB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMsIHN1Y2ggYXMgT3BlblNTTCBvciBabGliLCB0byBhbGxvdyBwcm9wZXIgY29tcGlsYXRpb24KKyAgIGFuZCBjb25maWd1cmF0aW9uIGZvciBhbGwgbmV3IHVzZXJzIHdpdGhvdXQgZnVydGhlciByZXF1aXJlbWVudHMuCisKKyAgIElmIHlvdSBuZWVkIHNvbWV0aGluZyBtb3JlICdpbnZvbHZlZCcgeW91IG1pZ2h0IGFkanVzdCB0aGVtIGZvciB5b3VyIG93biB1c2UsCisgICBvciBleHBsb3JlIHRoZSB3b3JsZCBvZiBtYWtlZmlsZXMgZGVzY3JpYmVkIGFib3ZlICdNU1ZDIGZyb20gY29tbWFuZCBsaW5lJy4KKworICAgQm9ybGFuZCBDKysgY29tcGlsZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBFbnN1cmUgdGhhdCB5b3VyIGJ1aWxkIGVudmlyb25tZW50IGlzIHByb3Blcmx5IHNldCB1cCB0byB1c2UgdGhlIGNvbXBpbGVyCisgICBhbmQgYXNzb2NpYXRlZCB0b29scy4gUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IGluY2x1ZGUgdGhlIHBhdGggdG8KKyAgIGJpbiBzdWJkaXJlY3Rvcnkgb2YgeW91ciBjb21waWxlciBpbnN0YWxsYXRpb24sIGVnOiBjOlxCb3JsYW5kXEJDQzU1XGJpbgorCisgICBJdCBpcyBhZHZpc2FibGUgdG8gc2V0IGVudmlyb25tZW50IHZhcmlhYmxlIEJDQ0RJUiB0byB0aGUgYmFzZSBwYXRoIG9mCisgICB0aGUgY29tcGlsZXIgaW5zdGFsbGF0aW9uLgorCisgICAgIHNldCBCQ0NESVI9YzpcQm9ybGFuZFxCQ0M1NQorCisgICBJbiBvcmRlciB0byBidWlsZCBhIHBsYWluIHZhbmlsbGEgdmVyc2lvbiBvZiBjdXJsIGFuZCBsaWJjdXJsIHJ1biB0aGUKKyAgIGZvbGxvd2luZyBjb21tYW5kIGZyb20gY3VybCdzIHJvb3QgZGlyZWN0b3J5OgorCisgICAgIG1ha2UgYm9ybGFuZAorCisgICBUbyBidWlsZCBjdXJsIGFuZCBsaWJjdXJsIHdpdGggemxpYiBhbmQgT3BlblNTTCBzdXBwb3J0IHNldCBlbnZpcm9ubWVudAorICAgdmFyaWFibGVzIFpMSUJfUEFUSCBhbmQgT1BFTlNTTF9QQVRIIHRvIHRoZSBiYXNlIHN1YmRpcmVjdG9yaWVzIG9mIHRoZQorICAgYWxyZWFkeSBidWlsdCB6bGliIGFuZCBPcGVuU1NMIGxpYnJhcmllcyBhbmQgZnJvbSBjdXJsJ3Mgcm9vdCBkaXJlY3RvcnkKKyAgIHJ1biBjb21tYW5kOgorCisgICAgIG1ha2UgYm9ybGFuZC1zc2wtemxpYgorCisgICBsaWJjdXJsIGxpYnJhcnkgd2lsbCBiZSBidWlsdCBpbiAnbGliJyBzdWJkaXJlY3Rvcnkgd2hpbGUgY3VybCB0b29sCisgICBpcyBidWlsdCBpbiAnc3JjJyBzdWJkaXJlY3RvcnkuIEluIG9yZGVyIHRvIHVzZSBsaWJjdXJsIGxpYnJhcnkgaXQgaXMKKyAgIGFkdmlzYWJsZSB0byBtb2RpZnkgY29tcGlsZXIncyBjb25maWd1cmF0aW9uIGZpbGUgYmNjMzIuY2ZnIGxvY2F0ZWQKKyAgIGluIGM6XEJvcmxhbmRcQkNDNTVcYmluIHRvIHJlZmxlY3QgdGhlIGxvY2F0aW9uIG9mIGxpYnJhcmllcyBpbmNsdWRlCisgICBwYXRocyBmb3IgZXhhbXBsZSB0aGUgJy1JJyBsaW5lIGNvdWxkIHJlc3VsdCBpbiBzb21ldGhpbmcgbGlrZToKKworICAgICAtSSJjOlxCb3JsYW5kXEJDQzU1XGluY2x1ZGU7YzpcY3VybFxpbmNsdWRlO2M6XG9wZW5zc2xcaW5jMzIiCisKKyAgIGJjYzMuY2ZnICctTCcgbGluZSBjb3VsZCBhbHNvIGJlIG1vZGlmaWVkIHRvIHJlZmxlY3QgdGhlIGxvY2F0aW9uIG9mCisgICBvZiBsaWJjdXJsIGxpYnJhcnkgcmVzdWx0aW5nIGZvciBleGFtcGxlOgorCisgICAgIC1MImM6XEJvcmxhbmRcQkNDNTVcbGliO2M6XGN1cmxcbGliO2M6XG9wZW5zc2xcb3V0MzIiCisKKyAgIEluIG9yZGVyIHRvIGJ1aWxkIHNhbXBsZSBwcm9ncmFtICdzaW1wbGUuYycgZnJvbSB0aGUgZG9jc1xleGFtcGxlcworICAgc3ViZGlyZWN0b3J5IHJ1biBmb2xsb3dpbmcgY29tbWFuZCBmcm9tIG1lbnRpb25lZCBzdWJkaXJlY3Rvcnk6CisKKyAgICAgYmNjMzIgc2ltcGxlLmMgbGliY3VybC5saWIgY3czMm10LmxpYgorCisgICBJbiBvcmRlciB0byBidWlsZCBzYW1wbGUgcHJvZ3JhbSBzaW1wbGVzc2wuYyBhbiBTU0wgZW5hYmxlZCBsaWJjdXJsCisgICBpcyByZXF1aXJlZCwgYXMgd2VsbCBhcyB0aGUgT3BlblNTTCBsaWJlYXkzMi5saWIgYW5kIHNzbGVheTMyLmxpYgorICAgbGlicmFyaWVzLgorCisKKyAgIE9USEVSIE1TVkMgSURFcworICAgLS0tLS0tLS0tLS0tLS0tCisKKyAgIElmIHlvdSB1c2UgVkMrKywgQm9ybGFuZCBvciBzaW1pbGFyIGNvbXBpbGVycy4gSW5jbHVkZSBhbGwgbGliIHNvdXJjZQorICAgZmlsZXMgaW4gYSBzdGF0aWMgbGliICJwcm9qZWN0IiAoYWxsIC5jIGFuZCAuaCBmaWxlcyB0aGF0IGlzKS4KKyAgICh5b3Ugc2hvdWxkIG5hbWUgaXQgbGliY3VybCBvciBzaW1pbGFyKQorCisgICBNYWtlIHRoZSBzb3VyY2VzIGluIHRoZSBzcmMvIGRyYXdlciBiZSBhICJ3aW4zMiBjb25zb2xlIGFwcGxpY2F0aW9uIgorICAgcHJvamVjdC4gTmFtZSBpdCBjdXJsLgorCisKKyAgIERpc2FibGluZyBTcGVjaWZpYyBQcm90b2NvbHMgaW4gV2luMzIgYnVpbGRzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBUaGUgY29uZmlndXJlIHV0aWxpdHksIHVuZm9ydHVuYXRlbHksIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBXaW5kb3dzCisgICBlbnZpcm9ubWVudCwgdGhlcmVmb3JlLCB5b3UgY2Fubm90IHVzZSB0aGUgdmFyaW91cyBkaXNhYmxlLXByb3RvY29sCisgICBvcHRpb25zIG9mIHRoZSBjb25maWd1cmUgdXRpbGl0eSBvbiB0aGlzIHBsYXRmb3JtLgorCisgICBIb3dldmVyLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGRlZmluZXMgdG8gZGlzYWJsZSBzcGVjaWZpYworICAgcHJvdG9jb2xzOgorCisgICBIVFRQX09OTFkgICAgICAgICAgICAgZGlzYWJsZXMgYWxsIHByb3RvY29scyBleGNlcHQgSFRUUAorICAgQ1VSTF9ESVNBQkxFX0ZUUCAgICAgIGRpc2FibGVzIEZUUAorICAgQ1VSTF9ESVNBQkxFX0xEQVAgICAgIGRpc2FibGVzIExEQVAKKyAgIENVUkxfRElTQUJMRV9URUxORVQgICBkaXNhYmxlcyBURUxORVQKKyAgIENVUkxfRElTQUJMRV9ESUNUICAgICBkaXNhYmxlcyBESUNUCisgICBDVVJMX0RJU0FCTEVfRklMRSAgICAgZGlzYWJsZXMgRklMRQorICAgQ1VSTF9ESVNBQkxFX1RGVFAgICAgIGRpc2FibGVzIFRGVFAKKyAgIENVUkxfRElTQUJMRV9IVFRQICAgICBkaXNhYmxlcyBIVFRQCisKKyAgIElmIHlvdSB3YW50IHRvIHNldCBhbnkgb2YgdGhlc2UgZGVmaW5lcyB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nCisgICBwb3NzaWJpbGl0aWVzOgorCisgICAtIE1vZGlmeSBsaWIvY29uZmlnLXdpbjMyLmgKKyAgIC0gTW9kaWZ5IGxpYi9zZXR1cC5oCisgICAtIE1vZGlmeSBsaWIvTWFrZWZpbGUudmM2CisgICAtIEFkZCBkZWZpbmVzIHRvIFByb2plY3QvU2V0dGluZ3MvQy9DKysvR2VuZXJhbC9QcmVwcm9jZXNzb3IgRGVmaW5pdGlvbnMKKyAgICAgaW4gdGhlIHZjNmxpYmN1cmwuZHN3L3ZjNmxpYmN1cmwuZHNwIFZpc3VhbCBDKysgNiBJREUgcHJvamVjdC4KKworCisgICBVc2luZyBCU0Qtc3R5bGUgbHdJUCBpbnN0ZWFkIG9mIFdpbnNvY2sgVENQL0lQIHN0YWNrIGluIFdpbjMyIGJ1aWxkcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgSW4gb3JkZXIgdG8gY29tcGlsZSBsaWJjdXJsIGFuZCBjdXJsIHVzaW5nIEJTRC1zdHlsZSBsd0lQIFRDUC9JUCBzdGFjaworICAgaXQgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgZGVmaW5pdGlvbiBvZiBwcmVwcm9jZXNzb3Igc3ltYm9sIFVTRV9MV0lQU09DSworICAgdmlzaWJsZSB0byBsaWJjdXJsIGFuZCBjdXJsIGNvbXBpbGF0aW9uIHByb2Nlc3Nlcy4gVG8gc2V0IHRoaXMgZGVmaW5pdGlvbgorICAgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZXM6CisKKyAgIC0gTW9kaWZ5IGxpYi9jb25maWctd2luMzIuaCBhbmQgc3JjL2NvbmZpZy13aW4zMi5oCisgICAtIE1vZGlmeSBsaWIvTWFrZWZpbGUudmM2CisgICAtIEFkZCBkZWZpbml0aW9uIHRvIFByb2plY3QvU2V0dGluZ3MvQy9DKysvR2VuZXJhbC9QcmVwcm9jZXNzb3IgRGVmaW5pdGlvbnMKKyAgICAgaW4gdGhlIHZjNmxpYmN1cmwuZHN3L3ZjNmxpYmN1cmwuZHNwIFZpc3VhbCBDKysgNiBJREUgcHJvamVjdC4KKworICAgT25jZSB0aGF0IGxpYmN1cmwgaGFzIGJlZW4gYnVpbHQgd2l0aCBCU0Qtc3R5bGUgbHdJUCBUQ1AvSVAgc3RhY2sgc3VwcG9ydCwKKyAgIGluIG9yZGVyIHRvIHVzZSBpdCB3aXRoIHlvdXIgcHJvZ3JhbSBpdCBpcyBtYW5kYXRvcnkgdGhhdCB5b3VyIHByb2dyYW0KKyAgIGluY2x1ZGVzIGx3SVAgaGVhZGVyIGZpbGUgPGx3aXAvb3B0Lmg+IChvciBhbm90aGVyIGx3SVAgaGVhZGVyIHRoYXQgaW5jbHVkZXMKKyAgIHRoaXMpIGJlZm9yZSBpbmNsdWRpbmcgYW55IGxpYmN1cmwgaGVhZGVyLiBZb3VyIHByb2dyYW0gZG9lcyBub3QgbmVlZCB0aGUKKyAgIFVTRV9MV0lQU09DSyBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbiB3aGljaCBpcyBmb3IgbGliY3VybCBpbnRlcm5hbHMgb25seS4KKworICAgQ29tcGlsYXRpb24gaGFzIGJlZW4gdmVyaWZpZWQgd2l0aCBsd0lQIDEuNC4wIGFuZCBjb250cmliLTEuNC4wIGZyb206CisKKyAgIGh0dHA6Ly9kb3dubG9hZC5zYXZhbm5haC5nbnUub3JnL3JlbGVhc2VzL2x3aXAvbHdpcC0xLjQuMC56aXAKKyAgIGh0dHA6Ly9kb3dubG9hZC5zYXZhbm5haC5nbnUub3JnL3JlbGVhc2VzL2x3aXAvY29udHJpYi0xLjQuMC56aXAKKworICAgVGhpcyBCU0Qtc3R5bGUgbHdJUCBUQ1AvSVAgc3RhY2sgc3VwcG9ydCBtdXN0IGJlIGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsCisgICBnaXZlbiB0aGF0IGl0IGhhcyBiZWVuIHZlcmlmaWVkIHRoYXQgbHdJUCAxLjQuMCBzdGlsbCBuZWVkcyBzb21lIHBvbGlzaCwKKyAgIGFuZCBsaWJjdXJsIG1pZ2h0IHlldCBuZWVkIHNvbWUgYWRkaXRpb25hbCBhZGp1c3RtZW50LCBjYXZlYXQgZW1wdG9yLgorCisgICBJbXBvcnRhbnQgc3RhdGljIGxpYmN1cmwgdXNhZ2Ugbm90ZQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgV2hlbiBidWlsZGluZyBhbiBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIHN0YXRpYyBsaWJjdXJsIGxpYnJhcnksIHlvdSBtdXN0CisgICBhZGQgJy1EQ1VSTF9TVEFUSUNMSUInIHRvIHlvdXIgQ0ZMQUdTLiAgT3RoZXJ3aXNlIHRoZSBsaW5rZXIgd2lsbCBsb29rIGZvcgorICAgZHluYW1pYyBpbXBvcnQgc3ltYm9scy4KKworCitJQk0gT1MvMgorPT09PT09PT0KKyAgIEJ1aWxkaW5nIHVuZGVyIE9TLzIgaXMgbm90IG11Y2ggZGlmZmVyZW50IGZyb20gYnVpbGRpbmcgdW5kZXIgdW5peC4KKyAgIFlvdSBuZWVkOgorCisgICAgICAtIGVteCAwLjlkCisgICAgICAtIEdOVSBtYWtlCisgICAgICAtIEdOVSBwYXRjaAorICAgICAgLSBrc2gKKyAgICAgIC0gR05VIGJpc29uCisgICAgICAtIEdOVSBmaWxlIHV0aWxpdGllcworICAgICAgLSBHTlUgc2VkCisgICAgICAtIGF1dG9jb25mIDIuMTMKKworICAgSWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCBPcGVuU1NMIG9yIE9wZW5MREFQIHN1cHBvcnQsIHlvdSdsbCBuZWVkIHRvCisgICBkb3dubG9hZCB0aG9zZSBsaWJyYXJpZXMsIHRvby4gRGlyayBPaG1lIGhhcyBkb25lIHNvbWUgd29yayB0byBwb3J0IFNTTAorICAgbGlicmFyaWVzIHVuZGVyIE9TLzIsIGJ1dCBpdCBsb29rcyBsaWtlIGhlIGRvZXNuJ3QgY2FyZSBhYm91dCBlbXguICBZb3UnbGwKKyAgIGZpbmQgaGlzIHBhdGNoZXMgb246IGh0dHA6Ly9jb21lLnRvL0RpcmtfT2htZQorCisgICBJZiBkdXJpbmcgdGhlIGxpbmtpbmcgeW91IGdldCBhbiBlcnJvciBhYm91dCBfZXJybm8gYmVpbmcgYW4gdW5kZWZpbmVkCisgICBzeW1ib2wgcmVmZXJlbmNlZCBmcm9tIHRoZSB0ZXh0IHNlZ21lbnQsIHlvdSBuZWVkIHRvIGFkZCAtRF9fU1RfTVRfRVJSTk9fXworICAgaW4geW91ciBkZWZpbml0aW9ucy4KKworICAgSWYgZXZlcnl0aGluZyBzZWVtcyB0byB3b3JrIGZpbmUgYnV0IHRoZXJlJ3Mgbm8gY3VybC5leGUsIHlvdSBuZWVkIHRvIGFkZAorICAgLVpleGUgdG8geW91ciBsaW5rZXIgZmxhZ3MuCisKKyAgIElmIHlvdSdyZSBnZXR0aW5nIGh1Z2UgYmluYXJpZXMsIHByb2JhYmx5IHlvdXIgbWFrZWZpbGVzIGhhdmUgdGhlIC1nIGluCisgICBDRkxBR1MuCisKKworVk1TCis9PT0KKyAgIChUaGUgVk1TIHNlY3Rpb24gaXMgaW4gd2hvbGUgY29udHJpYnV0ZWQgYnkgdGhlIGZyaWVuZGx5IE5pY28gQmFnZ3VzKQorCisgICBDdXJsIHNlZW1zIHRvIHdvcmsgd2l0aCBGVFAgJiBIVFRQIG90aGVyIHByb3RvY29scyBhcmUgbm90IHRlc3RlZC4gICh0aGUKKyAgIHBlcmwgaHR0cC9mdHAgdGVzdGluZyBzZXJ2ZXIgc3VwcGxpZWQgYXMgdGVzdGluZyB0b28gY2Fubm90IHdvcmsgb24gVk1TCisgICBiZWNhdXNlIHZtcyBoYXMgbm8gY29uY2VwdCBvZiBmb3JrKCkuIFsgSSB0cmllZCB0byBnaXZlIGl0IGEgd2hhY2ssIGJ1dAorICAgdGhhdHMgb2Ygbm8gdXNlLgorCisgICBTU0wgc3R1ZmYgaGFzIG5vdCBiZWVuIHBvcnRlZC4KKworICAgVGVsbmV0IGhhcyBhYm91dCB0aGUgc2FtZSBpc3N1ZXMgYXMgZm9yIFdpbjMyLiBXaGVuIHRoZSBjaGFuZ2VzIGZvciBXaW4zMgorICAgYXJlIGNsZWFyIG1heWJlIHRoZXknbGwgd29yayBmb3IgVk1TIHRvby4gVGhlIGJhc2ljIHByb2JsZW0gaXMgdGhhdCBzZWxlY3QKKyAgIE9OTFkgd29ya3MgZm9yIHNvY2tldHMuCisKKyAgIE1hcmtlZCBpbnN0YW5jZXMgb2YgZm9wZW4vW2Zdc3RhdCB0aGF0IG1pZ2h0IGJlY29tZSBhIHByb2JsZW0sIGVzcGVjaWFsbHkKKyAgIGZvciBub24gc3RyZWFtIGZpbGVzLiBJbiB0aGlzIHJlZ2FyZCwgdGhlIGZpbGVzIG9wZW5lZCBmb3Igd3JpdGluZyB3aWxsIGJlCisgICBjcmVhdGVkIHN0cmVhbS9sZiBhbmQgd2lsbCB0aHVzIGJlIHNhZmUuIEp1c3Qga2VlcCBpbiBtaW5kIHRoYXQgbm9uLWJpbmFyeQorICAgcmVhZC93cmluZyBmcm9tL3RvIGZpbGVzIHdpbGwgaGF2ZSBhIHJlY29yZHMgc2l6ZSBsaW1pdCBvZiAzMjc2NyBieXRlcworICAgaW1wb3NlZC4KKworICAgU3RhdCB0byBnZXQgdGhlIHNpemUgb2YgdGhlIGZpbGVzIGlzIGFnYWluIG9ubHkgc2FmZSBmb3Igc3RyZWFtIGZpbGVzICYKKyAgIGZpeGVkIHJlY29yZCBmaWxlcyB3aXRob3V0IGltcGxpZWQgQ0MuCisKKyAgIC0tIE15IGd1ZXNzIGlzIHRoYXQgb25seSBhbGxvd2luZyBhY2Nlc3MgdG8gc3RyZWFtIGZpbGVzIGlzIHRoZSBxdWlja2VzdAorICAgd2F5IHRvIGdldCBhcm91bmQgdGhlIG1vc3QgaXNzdWVzLiBUaGVyZWZvcmUgYWxsIGZpbGVzIG5lZWQgdG8gdG8gYmUKKyAgIGNoZWNrZWQgdG8gYmUgc3VyZSB0aGV5IHdpbGwgYmUgc3RyZWFtL2xmIGJlZm9yZSBwcm9jZXNzaW5nIHRoZW0uICBUaGlzIGlzCisgICB0aGUgZWFzaWVzdCB3YXkgb3V0LCBJIGtub3cuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBjb2RlIHRoYXQgbmVlZHMgdG8KKyAgIHJlcG9ydCB0aGUgZmlsZXNpemUgd2lsbCBiZWNvbWUgYSBwYWluIGluIHRoZSBhc3Mgb3RoZXJ3aXNlLgorCisgICBFeGl0IHN0YXR1cy4uLi4gV2VsbCB3ZSBuZWVkZWQgc29tZXRoaW5nIGRvbmUgaGVyZSwKKworICAgVk1TIGhhcyBhIHN0cnVjdHVyZWQgZXhpc3Qgc3RhdHVzOgorICAgfCAzICB8ICAgICAgIDIgICAgfCAgICAgMSAgICAgICB8ICAwfAorICAgfDEwOTh8NzY1NDMyMTA5ODc2fDU0MzIxMDk4NzY1NDN8MjEwfAorICAgKy0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tKworICAgfEN0cmx8ICBGYWNpbGl0eSAgfCBFcnJvciBjb2RlICB8c2V2fAorICAgKy0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tKworCisgICBXaXRoIHRoZSBDdHJsLWJpdHMgYW4gYXBwbGljYXRpb24gY2FuIHRlbGwgaWYgcGFydCBvciB0aGUgd2hvbGUgbWVzc2FnZSBoYXMKKyAgIGFscmVhZHkgYmVlbiBwcmludGVkIGZyb20gdGhlIHByb2dyYW0sIERDTCBkb2Vzbid0IG5lZWQgdG8gcHJpbnQgaXQgYWdhaW4uCisKKyAgIEZhY2lsaXR5IC0gYmFzaWNhbGx5IHRoZSBwcm9ncmFtIElELiBBIGNvZGUgYXNzaWduZWQgdG8gdGhlIHByb2dyYW0KKyAgIHRoZSBuYW1lIGNhbiBiZSBmZXRjaGVkIGZyb20gZXh0ZXJuYWwgb3IgaW50ZXJuYWwgbWVzc2FnZSBsaWJyYXJpZXMKKyAgIEVycm9yIGNvZGUgLSB0aGUgZXJyIGNvZGVzIGFzc2lnbmVkIGJ5IHRoZSBhcHBsaWNhdGlvbgorICAgU2V2LiAtIHNldmVyaXR5OiBFdmVuID0gZXJyb3IsIG9mZiA9IG5vbiBlcnJvcgorICAgICAgMCA9IFdhcm5pbmcKKyAgICAgIDEgPSBTdWNjZXNzCisgICAgICAyID0gRXJyb3IKKyAgICAgIDMgPSBJbmZvcm1hdGlvbgorICAgICAgNCA9IEZhdGFsCisgICAgICA8NS03PiByZXNlcnZlZC4KKworICAgVGhpcyBhbGwgcHJlc2VudHMgaXRzZWxmIHdpdGg6CisgICAlPEZBQ0lMSVRZPi08U2V2Pi08RXJyb3JuYW1lPiwgPEVycm9yIG1lc3NhZ2U+CisKKyAgIFNlZSBhbHNvIHRoZSBzcmMvY3VybG1zZy5tc2cgZmlsZSwgaXQgaGFzIHRoZSBzb3VyY2UgZm9yIHRoZSBtZXNzYWdlcyBJbgorICAgc3JjL21haW4uYyBhIHNlY3Rpb24gaXMgZGV2b3RlZCB0byBtZXNzYWdlIHN0YXR1cyB2YWx1ZXMsIHRoZSBnbG9iYWx2YWx1ZXMKKyAgIGNyZWF0ZSBzeW1ib2xzIHdpdGggY2VydGFpbiB2YWx1ZXMsIHJlZmVyZW5jZWQgZnJvbSBhIGNvbXBpbGVkIG1lc3NhZ2UKKyAgIGZpbGUuIEhhdmUgYWxsIGV4aXQgZnVuY3Rpb24gdXNlIGEgZXhpdCBzdGF0dXMgZGVyaXZlZCBmcm9tIGEgdHJhbnNsYXRpb24KKyAgIHRhYmxlIHdpdGggdGhlIGNvbXBpbGVkIG1lc3NhZ2UgY29kZXMuCisKKyAgIFRoaXMgd2FzIGFsbCBjb21waWxlZCB3aXRoOgorCisgICAgICBDb21wYXEgQyBWNi4yLTAwMyBvbiBPcGVuVk1TIEFscGhhIFY3LjEtMUgyCisKKyAgIFNvIGZhciBmb3IgcG9ydGluZyBub3RlcyBhcyBvZjoKKyAgIDEzLWp1bC0yMDAxCisgICBOLiBCYWdndXMKKworCitRTlgKKz09PQorICAgKFRoaXMgc2VjdGlvbiB3YXMgZ3JhY2lvdXNseSBicm91Z2h0IHRvIHVzIGJ5IERhdmlkIEJlbnRoYW0pCisKKyAgIEFzIFFOWCBpcyB0YXJnZXRlZCBmb3IgcmVzb3VyY2UgY29uc3RyYWluZWQgZW52aXJvbm1lbnRzLCB0aGUgUU5YIGhlYWRlcnMKKyAgIHNldCBjb25zZXJ2YXRpdmUgbGltaXRzLiBUaGlzIGluY2x1ZGVzIHRoZSBGRF9TRVRTSVpFIG1hY3JvLCBzZXQgYnkgZGVmYXVsdAorICAgdG8gMzIuIFNvY2tldCBkZXNjcmlwdG9ycyByZXR1cm5lZCB3aXRoaW4gdGhlIENVUkwgbGlicmFyeSBtYXkgZXhjZWVkIHRoaXMsCisgICByZXN1bHRpbmcgaW4gbWVtb3J5IGZhdWx0cy9TSUdTRUdWIGNyYXNoZXMgd2hlbiBwYXNzZWQgaW50byBzZWxlY3QoLi4pCisgICBjYWxscyB1c2luZyBmZF9zZXQgbWFjcm9zLgorCisgICBBIGdvb2QgYWxsLXJvdW5kIHNvbHV0aW9uIHRvIHRoaXMgaXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgd2hlbiBidWlsZGluZworICAgbGliY3VybCwgYnkgb3ZlcnJpZGluZyBDRkxBR1MgZHVyaW5nIGNvbmZpZ3VyZSwgZXhhbXBsZQorICAgIyAgY29uZmlndXJlIENGTEFHUz0nLURGRF9TRVRTSVpFPTY0IC1nIC1PMicKKworCitSSVNDIE9TCis9PT09PT09CisgICBUaGUgbGlicmFyeSBjYW4gYmUgY3Jvc3MtY29tcGlsZWQgdXNpbmcgZ2Njc2RrIGFzIGZvbGxvd3M6CisKKyAgICAgICAgQ0M9cmlzY29zLWdjYyBBUj1yaXNjb3MtYXIgUkFOTElCPSdyaXNjb3MtYXIgLXMnIC4vY29uZmlndXJlIFwKKyAgICAgICAgICAgICAtLWhvc3Q9YXJtLXJpc2Nvcy1hb2YgLS13aXRob3V0LXJhbmRvbSAtLWRpc2FibGUtc2hhcmVkCisgICAgICAgIG1ha2UKKworICAgd2hlcmUgcmlzY29zLWdjYyBhbmQgcmlzY29zLWFyIGFyZSBsaW5rcyB0byB0aGUgZ2Njc2RrIHRvb2xzLgorICAgWW91IGNhbiB0aGVuIGxpbmsgeW91ciBwcm9ncmFtIHdpdGggY3VybC9saWIvLmxpYnMvbGliY3VybC5hCisKKworQW1pZ2FPUworPT09PT09PQorICAgKFRoaXMgc2VjdGlvbiB3YXMgZ3JhY2lvdXNseSBicm91Z2h0IHRvIHVzIGJ5IERpZWdvIENhc29ycmFuKQorCisgICBUbyBidWlsZCBjVVJML2xpYmN1cmwgb24gQW1pZ2FPUyBqdXN0IHR5cGUgJ21ha2UgYW1pZ2EnIC4uLgorCisgICBXaGF0IHlvdSBuZWVkIGlzOiAgICAobm90IHRlc3RlZCB3aXRoIG90aGVycyB2ZXJzaW9ucykKKworICAgICAgICBHZWVrR2FkZ2V0cyAvIGdjYyAyLjk1LjMgKGh0dHA6Ly93d3cuZ2Vla2dhZGdldHMub3JnLykKKworICAgICAgICBBbWlUQ1AgU0RLIHY0LjMgKGh0dHA6Ly93d3cuYW1pbmV0Lm5ldC9jb21tL3RjcC9BbWlUQ1AtU0RLLTQuMy5saGEpCisKKyAgICAgICAgTmF0aXZlIERldmVsb3BlciBLaXQgKGh0dHA6Ly93d3cuYW1pZ2EuY29tLzMuOS9kb3dubG9hZC9OREszLjkubGhhKQorCisgICBBcyBubyBpeGVtdWwubGlicmFyeSBpcyByZXF1aXJlZCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGJ1aWxkIGl0IGZvcgorICAgV2FycE9TL1Bvd2VyUEMgKG5vdCB0ZXN0ZWQgYnkgbWUpLCBhcyB3ZWxsIGEgTW9ycGhPUyB2ZXJzaW9uIHNob3VsZCBiZQorICAgcG9zc2libGUgd2l0aCBubyBwcm9ibGVtcy4KKworICAgVG8gZW5hYmxlIFNTTCBzdXBwb3J0LCB5b3UgbmVlZCBhIE9wZW5TU0wgbmF0aXZlIHZlcnNpb24gKHdpdGhvdXQgaXhlbXVsKSwKKyAgIHlvdSBjYW4gZmluZCBhIHByZWNvbXBpbGVkIHBhY2thZ2UgYXQgaHR0cDovL2FtaWdhLnNvdXJjZWZvcmdlLm5ldC9PcGVuU1NMLworCisKK05ldFdhcmUKKz09PT09PT0KKyAgIFRvIGNvbXBpbGUgY3VybC5ubG0gLyBsaWJjdXJsLm5sbSB5b3UgbmVlZDoKKyAgIC0gZWl0aGVyIGFueSBnY2MgLyBubG1jb252LCBvciBDb2RlV2FycmlvciA3IFBESyA0IG9yIGxhdGVyLgorICAgLSBnbnUgbWFrZSBhbmQgYXdrIHJ1bm5pbmcgb24gdGhlIHBsYXRmb3JtIHlvdSBjb21waWxlIG9uOworICAgICBuYXRpdmUgV2luMzIgdmVyc2lvbnMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbToKKyAgICAgaHR0cDovL3d3dy5na253Lm5ldC9kZXZlbG9wbWVudC9wcmd0b29scy8KKyAgIC0gcmVjZW50IE5vdmVsbCBMaWJDIFNESyBhdmFpbGFibGUgZnJvbToKKyAgICAgaHR0cDovL2RldmVsb3Blci5ub3ZlbGwuY29tL25kay9saWJjLmh0bQorICAgLSBvciByZWNlbnQgTm92ZWxsIENMaWIgU0RLIGF2YWlsYWJsZSBmcm9tOgorICAgICBodHRwOi8vZGV2ZWxvcGVyLm5vdmVsbC5jb20vbmRrL2NsaWIuaHRtCisgICAtIG9wdGlvbmFsIHJlY2VudCBOb3ZlbGwgQ0xEQVAgU0RLIGF2YWlsYWJsZSBmcm9tOgorICAgICBodHRwOi8vZGV2ZWxvcGVyLm5vdmVsbC5jb20vbmRrL2NsZGFwLmh0bQorICAgLSBvcHRpb25hbCB6bGliIHNvdXJjZXMgKHN0YXRpYyBvciBkeW5hbWljIGxpbmtpbmcgd2l0aCB6bGliLmltcCk7CisgICAgIHNvdXJjZXMgd2l0aCBOZXRXYXJlIE1ha2VmaWxlIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgorICAgICBodHRwOi8vd3d3LmdrbncubmV0L21pcnJvci96bGliLworICAgLSBvcHRpb25hbCBPcGVuU1NMIHNvdXJjZXMgKHZlcnNpb24gMC45Ljggb3IgbGF0ZXIgYnVpbGQgd2l0aCBCU0Qgc29ja2V0cyk7CisgICAgIHlvdSBjYW4gZmluZCBwcmVjb21waWxlZCBwYWNrYWdlcyBhdDoKKyAgICAgaHR0cDovL3d3dy5na253Lm5ldC9kZXZlbG9wbWVudC9vc3NsL25ldHdhcmUvCisgICAgIGZvciBDTElCLWJhc2VkIGJ1aWxkcyBPcGVuU1NMIDAuOS44aCBvciBsYXRlciBpcyByZXF1aXJlZCAgLSBlYXJsaWVyIHZlcnNpb25zCisgICAgIGRvbnQgc3VwcG9ydCBidWlsZHVuZiB3aXRoIENMSUIgQlNEIHNvY2tldHMuCisgICAtIG9wdGlvbmFsIFNTSDIgc291cmNlcyAodmVyc2lvbiAwLjE3IG9yIGxhdGVyKTsKKworICAgU2V0IGEgc2VhcmNoIHBhdGggdG8geW91ciBjb21waWxlciwgbGlua2VyIGFuZCB0b29sczsgb24gTGludXggbWFrZQorICAgc3VyZSB0aGF0IHRoZSB2YXIgT1NUWVBFIGNvbnRhaW5zIHRoZSBzdHJpbmcgJ2xpbnV4Jzsgc2V0IHRoZSB2YXIKKyAgIE5ES0JBU0UgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBOb3ZlbGwgTkRLOyBhbmQgdGhlbiB0eXBlCisgICAnbWFrZSBuZXR3YXJlJyBmcm9tIHRoZSB0b3Agc291cmNlIGRpcmVjdG9yeTsgb3RoZXIgdGFyZ2V0cyBhdmFpbGFibGUKKyAgIGFyZSAnbmV0d2FyZS1zc2wnLCAnbmV0d2FyZS1zc2wtemxpYicsICduZXR3YXJlLXpsaWInIGFuZCAnbmV0d2FyZS1hcmVzJzsKKyAgIGlmIHlvdSBuZWVkIG90aGVyIGNvbWJpbmF0aW9ucyB5b3UgY2FuIGNvbnRyb2wgdGhlIGJ1aWxkIHdpdGggdGhlCisgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMgV0lUSF9TU0wsIFdJVEhfWkxJQiwgV0lUSF9BUkVTLCBXSVRIX1NTSDIsIGFuZAorICAgRU5BQkxFX0lQVjY7IHlvdSBjYW4gc2V0IExJTktfU1RBVElDPTEgdG8gbGluayBjdXJsLm5sbSBzdGF0aWNhbGx5LgorICAgQnkgZGVmYXVsdCBMREFQIHN1cHBvcnQgaXMgZW5hYmxlZCwgaG93ZXZlciBjdXJyZW50bHkgeW91IHdpbGwgbmVlZCBhIHBhdGNoCisgICBpbiBvcmRlciB0byB1c2UgdGhlIENMREFQIE5ESyB3aXRoIEJTRCBzb2NrZXRzIChOb3ZlbGwgQnVnIDMwMDIzNyk6CisgICBodHRwOi8vd3d3LmdrbncubmV0L3Rlc3QvY3VybC9jbGRhcF9uZGsvbGRhcF9uZGsuZGlmZgorICAgSSBmb3VuZCBvbiBzb21lIExpbnV4IHN5c3RlbXMgKFJIOSkgdGhhdCBPUyBkZXRlY3Rpb24gZGlkbid0IHdvcmsgYWx0aG91Z2gKKyAgIGEgJ3NldCB8IGdyZXAgT1NUWVBFJyBzaG93cyB0aGUgdmFyIHByZXNlbnQgYW5kIHNldDsgSSBzaW1wbHkgb3Zlcndyb3RlIGl0CisgICB3aXRoICdPU1RZUEU9bGludXgtcmg5LWdudScgYW5kIHRoZSBkZXRlY3Rpb24gaW4gdGhlIE1ha2VmaWxlIHdvcmtlZC4uLgorICAgQW55IGhlbHAgaW4gdGVzdGluZyBhcHByZWNpYXRlZCEKKyAgIEJ1aWxkcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgOCB0aW1lcyBhIGRheSBmcm9tIGN1cnJlbnQgZ2l0IGFyZSBoZXJlOgorICAgaHR0cDovL3d3dy5na253Lm5ldC9taXJyb3IvY3VybC9hdXRvYnVpbGRzLworICAgdGhlIHN0YXR1cyBvZiB0aGVzZSBidWlsZHMgY2FuIGJlIHZpZXdlZCBhdCB0aGUgYXV0b2J1aWxkIHRhYmxlOgorICAgaHR0cDovL2N1cmwuaGF4eC5zZS9kZXYvYnVpbGRzLmh0bWwKKworCitlQ29zCis9PT09CisgICBjdXJsIGRvZXMgbm90IHVzZSB0aGUgZUNvcyBidWlsZCBzeXN0ZW0sIHNvIHlvdSBtdXN0IGZpcnN0IGJ1aWxkIGVDb3MKKyAgIHNlcGFyYXRlbHksIHRoZW4gbGluayBjdXJsIHRvIHRoZSByZXN1bHRpbmcgZUNvcyBsaWJyYXJ5LiAgSGVyZSdzIGEgc2FtcGxlCisgICBjb25maWd1cmUgbGluZSB0byBkbyBzbyBvbiBhbiB4ODYgTGludXggYm94IHRhcmdldGluZyB4ODY6CisKKyAgIEdDQ0xJQj1gZ2NjIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCAmJiBcCisgICBDRkxBR1M9Ii1EX19FQ09TPTEgLW5vc3RkaW5jIC1JJEVDT1NfSU5TVEFMTC9pbmNsdWRlIFwKKyAgICAtSWBkaXJuYW1lICRHQ0NMSUJgL2luY2x1ZGUiIFwKKyAgIExERkxBR1M9Ii1ub3N0ZGxpYiAtV2wsLS1nYy1zZWN0aW9ucyAtV2wsLXN0YXRpYyBcCisgICAgLUwkRUNPU19JTlNUQUxML2xpYiAtVHRhcmdldC5sZCAtbHRhcmdldCIgXAorICAgLi9jb25maWd1cmUgLS1ob3N0PWkzODYgLS1kaXNhYmxlLXNoYXJlZCBcCisgICAgLS13aXRob3V0LXNzbCAtLXdpdGhvdXQtemxpYiAtLWRpc2FibGUtbWFudWFsIC0tZGlzYWJsZS1sZGFwCisKKyAgIEluIG1vc3QgY2FzZXMsIGVDb3MgdXNlcnMgd2lsbCBiZSB1c2luZyBsaWJjdXJsIGZyb20gd2l0aGluIGEgY3VzdG9tCisgICBlbWJlZGRlZCBhcHBsaWNhdGlvbi4gIFVzaW5nIHRoZSBzdGFuZGFyZCAnY3VybCcgZXhlY3V0YWJsZSBmcm9tCisgICB3aXRoaW4gZUNvcyBtZWFucyBmYWNpbmcgdGhlIGxpbWl0YXRpb24gb2YgdGhlIHN0YW5kYXJkIGVDb3MgQworICAgc3RhcnR1cCBjb2RlIHdoaWNoIGRvZXMgbm90IGFsbG93IHBhc3NpbmcgYXJndW1lbnRzIGluIG1haW4oKS4gIFRvCisgICBydW4gJ2N1cmwnIGZyb20gZUNvcyBhbmQgaGF2ZSBpdCBkbyBzb21ldGhpbmcgdXNlZnVsLCB5b3Ugd2lsbCBuZWVkCisgICB0byBlaXRoZXIgbW9kaWZ5IHRoZSBlQ29zIHN0YXJ0dXAgY29kZSB0byBwYXNzIGluIHNvbWUgYXJndW1lbnRzLCBvcgorICAgbW9kaWZ5IHRoZSBjdXJsIGFwcGxpY2F0aW9uIGl0c2VsZiB0byByZXRyaWV2ZSBpdHMgYXJndW1lbnRzIGZyb20KKyAgIHNvbWUgbG9jYXRpb24gc2V0IGJ5IHRoZSBib290bG9hZGVyIG9yIGhhcmQtY29kZSB0aGVtLgorCisgICBTb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHBhdGNoIGNvdWxkIGJlIHVzZWQgdG8gaGFyZC1jb2RlIHNvbWUKKyAgIGFyZ3VtZW50cy4gIFRoZSBNVEFCX0VOVFJZIGxpbmUgbW91bnRzIGEgUkFNIGRpc2sgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbQorICAgKHdpdGhvdXQgbW91bnRpbmcgc29tZSBraW5kIG9mIGZpbGVzeXN0ZW0sIGVDb3MgZXJyb3JzIG91dCBhbGwgZmlsZQorICAgb3BlcmF0aW9ucyB3aGljaCBjdXJsIGRvZXMgbm90IHRha2UgdG8gd2VsbCkuICBUaGUgbmV4dCBzZWN0aW9uIHN5bnRoZXNpemVzCisgICBzb21lIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgZm9yIGN1cmwgdG8gdXNlLCBpbiB0aGlzIGNhc2UgdG8gZGlyZWN0IGN1cmwKKyAgIHRvIHJlYWQgZnVydGhlciBhcmd1bWVudHMgZnJvbSBhIGZpbGUuICBJdCB0aGVuIGNyZWF0ZXMgdGhhdCBmaWxlIG9uIHRoZQorICAgUkFNIGRpc2sgYW5kIHBsYWNlcyB3aXRoaW4gaXQgYSBVUkwgdG8gZG93bmxvYWQ6IGEgZmlsZTogVVJMIHRoYXQKKyAgIGp1c3QgaGFwcGVucyB0byBwb2ludCB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGl0c2VsZi4gIFRoZSByZXN1bHRzCisgICBvZiBydW5uaW5nIGN1cmwgaW4gdGhpcyB3YXkgaXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuCisKKy0tLSBzcmMvbWFpbi5jICAxOSBKdWwgMjAwNiAxOTowOTo1NiAtMDAwMCAgICAxLjM2MworKysrIHNyYy9tYWluLmMgIDI0IEp1bCAyMDA2IDIxOjM3OjIzIC0wMDAwCitAQCAtNDI4NiwxMSArNDI4NiwzMSBAQAorIH0KKworCisrI2lmZGVmIF9fRUNPUworKyNpbmNsdWRlIDxjeWcvZmlsZWlvL2ZpbGVpby5oPgorK01UQUJfRU5UUlkoIHRlc3Rmc19tdGUxLAorKyAgICAgICAgICAgICAgICAgICAiLyIsCisrICAgICAgICAgICAgICAgICAgICJyYW1mcyIsCisrICAgICAgICAgICAgICAgICAgICIiLAorKyAgICAgICAgICAgICAgICAgICAwKTsKKysjZW5kaWYKKworIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworICAgaW50IHJlczsKKyAgIHN0cnVjdCBDb25maWd1cmFibGUgY29uZmlnOworKyNpZmRlZiBfX0VDT1MKKysgIGNoYXIgKmFyZ3NbXSA9IHsiZWNvcy1jdXJsIiwgIi1LIiwgImN1cmxjb25mLnR4dCJ9OworKyAgRklMRSAqZjsKKysgIGFyZ2MgPSBzaXplb2YoYXJncykvc2l6ZW9mKGFyZ3NbMF0pOworKyAgYXJndiA9IGFyZ3M7CisrCisrICBmID0gZm9wZW4oImN1cmxjb25mLnR4dCIsICJ3Iik7CisrICBpZiAoZikgeworKyAgICBmcHJpbnRmKGYsICItLXVybCBmaWxlOmN1cmxjb25mLnR4dCIpOworKyAgICBmY2xvc2UoZik7CisrICB9CisrI2VuZGlmCisgICBtZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKHN0cnVjdCBDb25maWd1cmFibGUpKTsKKworICAgY29uZmlnLmVycm9ycyA9IHN0ZGVycjsgLyogZGVmYXVsdCBlcnJvcnMgdG8gc3RkZXJyICovCisKKworTWluaXgKKz09PT09CisgICBjdXJsIGNhbiBiZSBjb21waWxlZCBvbiBNaW5peCAzIHVzaW5nIGdjYyBvciBBQ0sgKHN0YXJ0aW5nIHdpdGgKKyAgIHZlci4gMy4xLjMpLiAgRW5zdXJlIHRoYXQgR05VIGdhd2sgYW5kIGJhc2ggYXJlIGJvdGggaW5zdGFsbGVkIGFuZAorICAgYXZhaWxhYmxlIGluIHRoZSBQQVRILgorCisgICBBQ0sKKyAgIC0tLQorICAgSW5jcmVhc2UgdGhlIGhlYXAgc2l6ZXMgb2YgdGhlIGNvbXBpbGVyIHdpdGggdGhlIGNvbW1hbmQ6CisKKyAgICAgYmluc2l6ZXMgeHhsCisKKyAgIHRoZW4gY29uZmlndXJlIGFuZCBjb21waWxlIGN1cmwgd2l0aDoKKworICAgICAuL2NvbmZpZ3VyZSBDQz1jYyBMRD1jYyBBUj0vdXNyL2Jpbi9hYWwgR1JFUD1ncmVwIFwKKyAgICAgIENQUEZMQUdTPSctRF9QT1NJWF9TT1VSQ0U9MSAtSS91c3IvbG9jYWwvaW5jbHVkZScKKyAgICAgbWFrZQorICAgICBjaG1lbSA9MjU2MDAwIHNyYy9jdXJsCisKKyAgIEdDQworICAgLS0tCisgICBNYWtlIHN1cmUgZ2NjIGlzIGluIHlvdXIgUEFUSCB3aXRoIHRoZSBjb21tYW5kOgorCisgICAgIGV4cG9ydCBQQVRIPS91c3IvZ251L2JpbjokUEFUSAorCisgICB0aGVuIGNvbmZpZ3VyZSBhbmQgY29tcGlsZSBjdXJsIHdpdGg6CisKKyAgICAgLi9jb25maWd1cmUgQ0M9Z2NjIEFSPS91c3IvZ251L2Jpbi9nYXIgR1JFUD1ncmVwCisgICAgIG1ha2UKKyAgICAgY2htZW0gPTI1NjAwMCBzcmMvY3VybAorCisKK1N5bWJpYW4gT1MKKz09PT09PT09PT0KKyAgIFRoZSBTeW1iaWFuIE9TIHBvcnQgdXNlcyB0aGUgU3ltYmlhbiBidWlsZCBzeXN0ZW0gdG8gY29tcGlsZS4gIEZyb20gdGhlCisgICBwYWNrYWdlcy9TeW1iaWFuL2dyb3VwLyBkaXJlY3RvcnksIHJ1bjoKKworICAgICAgYmxkbWFrZSBibGRmaWxlcworICAgICAgYWJsZCBidWlsZAorCisgICB0byBjb21waWxlIGFuZCBpbnN0YWxsIGN1cmwgYW5kIGxpYmN1cmwgdXNpbmcgU0JTdjEuIElmIHlvdXIgU3ltYmlhbgorICAgU0RLIGRvZXNuJ3QgaW5jbHVkZSBzdXBwb3J0IGZvciBQLkkuUC5TLiwgeW91IHdpbGwgbmVlZCB0byBjb250YWN0CisgICB5b3VyIFNESyB2ZW5kb3IgdG8gb2J0YWluIHRoYXQgZmlyc3QuCisKKworVnhXb3JrcworPT09PT09PT0KKyAgIEJ1aWxkIGZvciBWeFdvcmtzIGlzIHBlcmZvcm1lZCB1c2luZyBjcm9zcyBjb21waWxhdGlvbi4KKyAgIFRoYXQgbWVhbnMgeW91IGJ1aWxkIG9uIFdpbmRvd3MgbWFjaGluZSB1c2luZyBWeFdvcmtzIHRvb2xzIGFuZAorICAgcnVuIHRoZSBidWlsdCBpbWFnZSBvbiB0aGUgVnhXb3JrcyBkZXZpY2UuCisKKyAgIFRvIGJ1aWxkIGxpYmN1cmwgZm9yIFZ4V29ya3MgeW91IG5lZWQ6CisKKyAgICAgIC0gQ1lHV0lOIChmcmVlLCBodHRwOi8vY3lnd2luLmNvbS8pCisgICAgICAtIFdpbmQgUml2ZXIgV29ya2JlbmNoIChjb21tZXJjaWFsKQorCisgICBJZiB5b3UgaGF2ZSBDWUdXSU4gYW5kIFdvcmtiZW5jaCBpbnN0YWxsZWQgb24geW91IG1hY2hpbmUKKyAgIGZvbGxvdyBhZnRlciBuZXh0IHN0ZXBzOgorCisgICAgMS4gT3BlbiB0aGUgQ29tbWFuZCBQcm9tcHQgd2luZG93IGFuZCBjaGFuZ2UgZGlyZWN0b3J5ICgnY2QnKQorICAgICAgIHRvIHRoZSBsaWJjdXJsICdsaWInIGZvbGRlci4KKyAgICAyLiBBZGQgQ1lHV0lOICdiaW4nIGZvbGRlciB0byB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICBGb3IgZXhhbXBsZSwgdHlwZSAnc2V0IFBBVEg9QzovZW1iZWRkZWQvY3lnd2luL2JpbjslUEFUSCUnLgorICAgIDMuIEFkanVzdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGVmaW5lZCBpbiAnRW52aXJvbm1lbnQnIHNlY3Rpb24KKyAgICAgICBvZiB0aGUgTWFrZWZpbGUudnh3b3JrcyBmaWxlIHRvIHBvaW50IHRvIHlvdXIgc29mdHdhcmUgZm9sZGVycy4KKyAgICA0LiBCdWlsZCB0aGUgbGliY3VybCBieSB0eXBpbmcgJ21ha2UgLWYgLi9NYWtlZmlsZS52eHdvcmtzJworCisgICBBcyBhIHJlc3VsdCB0aGUgbGliY3VybC5hIGxpYnJhcnkgc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlICdsaWInIGZvbGRlci4KKyAgIFRvIGNsZWFuIHRoZSBidWlsZCByZXN1bHRzIHR5cGUgJ21ha2UgLWYgLi9NYWtlZmlsZS52eHdvcmtzIGNsZWFuJy4KKworCitBbmRyb2lkCis9PT09PT09CisgICBTZWUgdGhlIGJ1aWxkIG5vdGVzIGluIHRoZSBBbmRyb2lkLm1rIGZpbGUuCisKKworQ1JPU1MgQ09NUElMRQorPT09PT09PT09PT09PQorICAgKFRoaXMgc2VjdGlvbiB3YXMgZ3JhY2lvdXNseSBicm91Z2h0IHRvIHVzIGJ5IEppbSBEdWV5LCB3aXRoIGFkZGl0aW9ucyBieQorICAgRGFuIEZhbmRyaWNoKQorCisgICBEb3dubG9hZCBhbmQgdW5wYWNrIHRoZSBjVVJMIHBhY2thZ2UuCisKKyAgICdjZCcgdG8gdGhlIG5ldyBkaXJlY3RvcnkuIChlLmcuIGNkIGN1cmwtNy4xMi4zKQorCisgICBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBvaW50IHRvIHRoZSBjcm9zcy1jb21waWxlIHRvb2xjaGFpbiBhbmQgY2FsbAorICAgY29uZmlndXJlIHdpdGggYW55IG9wdGlvbnMgeW91IG5lZWQuICBCZSBzdXJlIGFuZCBzcGVjaWZ5IHRoZSAnLS1ob3N0JyBhbmQKKyAgICctLWJ1aWxkJyBwYXJhbWV0ZXJzIGF0IGNvbmZpZ3VyYXRpb24gdGltZS4gIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGFuCisgICBleGFtcGxlIG9mIGNyb3NzLWNvbXBpbGluZyBmb3IgdGhlIElCTSA0MDVHUCBQb3dlclBDIHByb2Nlc3NvciB1c2luZyB0aGUKKyAgIHRvb2xjaGFpbiBmcm9tIE1vbnRlVmlzdGEgZm9yIEhhcmRoYXQgTGludXguCisKKyAgIChiZWdpbiBzY3JpcHQpCisKKyAgICMhIC9iaW4vc2gKKworICAgZXhwb3J0IFBBVEg9JFBBVEg6L29wdC9oYXJkaGF0L2RldmtpdC9wcGMvNDA1L2JpbgorICAgZXhwb3J0IENQUEZMQUdTPSItSS9vcHQvaGFyZGhhdC9kZXZraXQvcHBjLzQwNS90YXJnZXQvdXNyL2luY2x1ZGUiCisgICBleHBvcnQgQVI9cHBjXzQwNS1hcgorICAgZXhwb3J0IEFTPXBwY180MDUtYXMKKyAgIGV4cG9ydCBMRD1wcGNfNDA1LWxkCisgICBleHBvcnQgUkFOTElCPXBwY180MDUtcmFubGliCisgICBleHBvcnQgQ0M9cHBjXzQwNS1nY2MKKyAgIGV4cG9ydCBOTT1wcGNfNDA1LW5tCisKKyAgIC4vY29uZmlndXJlIC0tdGFyZ2V0PXBvd2VycGMtaGFyZGhhdC1saW51eCBcCisgICAgICAgIC0taG9zdD1wb3dlcnBjLWhhcmRoYXQtbGludXggXAorICAgICAgICAtLWJ1aWxkPWk1ODYtcGMtbGludXgtZ251IFwKKyAgICAgICAgLS1wcmVmaXg9L29wdC9oYXJkaGF0L2RldmtpdC9wcGMvNDA1L3RhcmdldC91c3IvbG9jYWwgXAorICAgICAgICAtLWV4ZWMtcHJlZml4PS91c3IvbG9jYWwKKworICAgKGVuZCBzY3JpcHQpCisKKyAgIFlvdSBtYXkgYWxzbyBuZWVkIHRvIHByb3ZpZGUgYSBwYXJhbWV0ZXIgbGlrZSAnLS13aXRoLXJhbmRvbT0vZGV2L3VyYW5kb20nCisgICB0byBjb25maWd1cmUgYXMgaXQgY2Fubm90IGRldGVjdCB0aGUgcHJlc2VuY2Ugb2YgYSByYW5kb20gbnVtYmVyCisgICBnZW5lcmF0aW5nIGRldmljZSBmb3IgYSB0YXJnZXQgc3lzdGVtLiAgVGhlICctLXByZWZpeCcgcGFyYW1ldGVyCisgICBzcGVjaWZpZXMgd2hlcmUgY1VSTCB3aWxsIGJlIGluc3RhbGxlZC4gIElmICdjb25maWd1cmUnIGNvbXBsZXRlcworICAgc3VjY2Vzc2Z1bGx5LCBkbyAnbWFrZScgYW5kICdtYWtlIGluc3RhbGwnIGFzIHVzdWFsLgorCisgICBJbiBzb21lIGNhc2VzLCB5b3UgbWF5IGJlIGFibGUgdG8gc2ltcGxpZnkgdGhlIGFib3ZlIGNvbW1hbmRzIHRvIGFzCisgICBsaXR0bGUgYXM6CisKKyAgICAgICAuL2NvbmZpZ3VyZSAtLWhvc3Q9QVJDSC1PUworCisKK1JFRFVDSU5HIFNJWkUKKz09PT09PT09PT09PT0KKyAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBjb25maWd1cmUgb3B0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZHVjZSB0aGUKKyAgIHNpemUgb2YgbGliY3VybCBmb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zIHdoZXJlIGJpbmFyeSBzaXplIGlzIGFuCisgICBpbXBvcnRhbnQgZmFjdG9yLiAgRmlyc3QsIGJlIHN1cmUgdG8gc2V0IHRoZSBDRkxBR1MgdmFyaWFibGUgd2hlbgorICAgY29uZmlndXJpbmcgd2l0aCBhbnkgcmVsZXZhbnQgY29tcGlsZXIgb3B0aW1pemF0aW9uIGZsYWdzIHRvIHJlZHVjZSB0aGUKKyAgIHNpemUgb2YgdGhlIGJpbmFyeS4gIEZvciBnY2MsIHRoaXMgd291bGQgbWVhbiBhdCBtaW5pbXVtIHRoZSAtT3Mgb3B0aW9uLAorICAgYW5kIHBvdGVudGlhbGx5IHRoZSAtbWFyY2g9WCBhbmQgLW1keW5hbWljLW5vLXBpYyBvcHRpb25zIGFzIHdlbGwsIGUuZy4KKworICAgICAgLi9jb25maWd1cmUgQ0ZMQUdTPSctT3MnIC4uLgorCisgICBOb3RlIHRoYXQgbmV3ZXIgY29tcGlsZXJzIG9mdGVuIHByb2R1Y2Ugc21hbGxlciBjb2RlIHRoYW4gb2xkZXIgdmVyc2lvbnMKKyAgIGR1ZSB0byBpbXByb3ZlZCBvcHRpbWl6YXRpb24uCisKKyAgIEJlIHN1cmUgdG8gc3BlY2lmeSBhcyBtYW55IC0tZGlzYWJsZS0gYW5kIC0td2l0aG91dC0gZmxhZ3Mgb24gdGhlIGNvbmZpZ3VyZQorICAgY29tbWFuZC1saW5lIGFzIHlvdSBjYW4gdG8gZGlzYWJsZSBhbGwgdGhlIGxpYmN1cmwgZmVhdHVyZXMgdGhhdCB5b3UKKyAgIGtub3cgeW91ciBhcHBsaWNhdGlvbiBpcyBub3QgZ29pbmcgdG8gbmVlZC4gIEJlc2lkZXMgc3BlY2lmeWluZyB0aGUKKyAgIC0tZGlzYWJsZS1QUk9UT0NPTCBmbGFncyBmb3IgYWxsIHRoZSB0eXBlcyBvZiBVUkxzIHlvdXIgYXBwbGljYXRpb24KKyAgIHdpbGwgbm90IHVzZSwgaGVyZSBhcmUgc29tZSBvdGhlciBmbGFncyB0aGF0IGNhbiByZWR1Y2UgdGhlIHNpemUgb2YgdGhlCisgICBsaWJyYXJ5OgorCisgICAgIC0tZGlzYWJsZS1hcmVzIChkaXNhYmxlcyBzdXBwb3J0IGZvciB0aGUgQy1BUkVTIEROUyBsaWJyYXJ5KQorICAgICAtLWRpc2FibGUtY29va2llcyAoZGlzYWJsZXMgc3VwcG9ydCBmb3IgSFRUUCBjb29raWVzKQorICAgICAtLWRpc2FibGUtY3J5cHRvLWF1dGggKGRpc2FibGVzIEhUVFAgY3J5cHRvZ3JhcGhpYyBhdXRoZW50aWNhdGlvbikKKyAgICAgLS1kaXNhYmxlLWlwdjYgKGRpc2FibGVzIHN1cHBvcnQgZm9yIElQdjYpCisgICAgIC0tZGlzYWJsZS1tYW51YWwgKGRpc2FibGVzIHN1cHBvcnQgZm9yIHRoZSBidWlsdC1pbiBkb2N1bWVudGF0aW9uKQorICAgICAtLWRpc2FibGUtcHJveHkgKGRpc2FibGVzIHN1cHBvcnQgZm9yIEhUVFAgYW5kIFNPQ0tTIHByb3hpZXMpCisgICAgIC0tZGlzYWJsZS12ZXJib3NlIChlbGltaW5hdGVzIGRlYnVnZ2luZyBzdHJpbmdzIGFuZCBlcnJvciBjb2RlIHN0cmluZ3MpCisgICAgIC0tZW5hYmxlLWhpZGRlbi1zeW1ib2xzIChlbGltaW5hdGVzIHVubmVlZGVkIHN5bWJvbHMgaW4gdGhlIHNoYXJlZCBsaWJyYXJ5KQorICAgICAtLXdpdGhvdXQtbGliaWRuIChkaXNhYmxlcyBzdXBwb3J0IGZvciB0aGUgbGliaWRuIEROUyBsaWJyYXJ5KQorICAgICAtLXdpdGhvdXQtc3NsIChkaXNhYmxlcyBzdXBwb3J0IGZvciBTU0wvVExTKQorICAgICAtLXdpdGhvdXQtemxpYiAoZGlzYWJsZXMgc3VwcG9ydCBmb3Igb24tdGhlLWZseSBkZWNvbXByZXNzaW9uKQorCisgICBUaGUgR05VIGNvbXBpbGVyIGFuZCBsaW5rZXIgaGF2ZSBhIG51bWJlciBvZiBvcHRpb25zIHRoYXQgY2FuIHJlZHVjZSB0aGUKKyAgIHNpemUgb2YgdGhlIGxpYmN1cmwgZHluYW1pYyBsaWJyYXJpZXMgb24gc29tZSBwbGF0Zm9ybXMgZXZlbiBmdXJ0aGVyLgorICAgU3BlY2lmeSB0aGVtIGJ5IHByb3ZpZGluZyBhcHByb3ByaWF0ZSBDRkxBR1MgYW5kIExERkxBR1MgdmFyaWFibGVzIG9uIHRoZQorICAgY29uZmlndXJlIGNvbW1hbmQtbGluZToKKyAgICAgQ0ZMQUdTPSItZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyIgXAorICAgICBMREZMQUdTPSItV2wsLXMgLVdsLC1Cc3ltYm9saWMgLVdsLC0tZ2Mtc2VjdGlvbnMiCisKKyAgIEJlIHN1cmUgYWxzbyB0byBzdHJpcCBkZWJ1Z2dpbmcgc3ltYm9scyBmcm9tIHlvdXIgYmluYXJpZXMgYWZ0ZXIKKyAgIGNvbXBpbGluZyB1c2luZyAnc3RyaXAnIChvciB0aGUgYXBwcm9wcmlhdGUgdmFyaWFudCBpZiBjcm9zcy1jb21waWxpbmcpLgorICAgSWYgc3BhY2UgaXMgcmVhbGx5IHRpZ2h0LCB5b3UgbWF5IGJlIGFibGUgdG8gcmVtb3ZlIHNvbWUgdW5uZWVkZWQKKyAgIHNlY3Rpb25zIG9mIHRoZSBzaGFyZWQgbGlicmFyeSB1c2luZyB0aGUgLVIgb3B0aW9uIHRvIG9iamNvcHkgKGUuZy4gdGhlCisgICAuY29tbWVudCBzZWN0aW9uKS4KKworICAgVXNpbmcgdGhlc2UgdGVjaG5pcXVlcyBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgYSBiYXNpYyBIVFRQLW9ubHkgc2hhcmVkCisgICBsaWJjdXJsIGxpYnJhcnkgZm9yIGkzODYgTGludXggcGxhdGZvcm1zIHRoYXQgaXMgb25seSAxMDEgS2lCIGluIHNpemUsIGFuZAorICAgYW4gRlRQLW9ubHkgbGlicmFyeSB0aGF0IGlzIDEwNSBLaUIgaW4gc2l6ZSAoYXMgb2YgbGliY3VybCB2ZXJzaW9uIDcuMjEuNSwKKyAgIHVzaW5nIGdjYyA0LjQuMykuCisKKyAgIFlvdSBtYXkgZmluZCB0aGF0IHN0YXRpY2FsbHkgbGlua2luZyBsaWJjdXJsIHRvIHlvdXIgYXBwbGljYXRpb24gd2lsbAorICAgcmVzdWx0IGluIGEgbG93ZXIgdG90YWwgc2l6ZSB0aGFuIGR5bmFtaWNhbGx5IGxpbmtpbmcuCisKKyAgIE5vdGUgdGhhdCB0aGUgY3VybCB0ZXN0IGhhcm5lc3MgY2FuIGRldGVjdCB0aGUgdXNlIG9mIHNvbWUsIGJ1dCBub3QgYWxsLCBvZgorICAgdGhlIC0tZGlzYWJsZSBzdGF0ZW1lbnRzIHN1Z2dlc3RlZCBhYm92ZS4gVXNlIHdpbGwgY2F1c2UgdGVzdHMgcmVseWluZyBvbgorICAgdGhvc2UgZmVhdHVyZXMgdG8gZmFpbC4gIFRoZSB0ZXN0IGhhcm5lc3MgY2FuIGJlIG1hbnVhbGx5IGZvcmNlZCB0byBza2lwCisgICB0aGUgcmVsZXZhbnQgdGVzdHMgYnkgc3BlY2lmeWluZyBjZXJ0YWluIGtleSB3b3JkcyBvbiB0aGUgcnVudGVzdHMucGwKKyAgIGNvbW1hbmQgbGluZS4gIEZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgYXBwcm9wcmlhdGUga2V5IHdvcmRzOgorCisgICAgIC0tZGlzYWJsZS1jb29raWVzICAgICAgICAgICFjb29raWVzCisgICAgIC0tZGlzYWJsZS1jcnlwdG8tYXV0aCAgICAgICFIVFRQXCBEaWdlc3RcIGF1dGggIUhUVFBcIHByb3h5XCBEaWdlc3RcIGF1dGgKKyAgICAgLS1kaXNhYmxlLW1hbnVhbCAgICAgICAgICAgIS0tbWFudWFsCisgICAgIC0tZGlzYWJsZS1wcm94eSAgICAgICAgICAgICFIVFRQXCBwcm94eSAhcHJveHl0dW5uZWwgIVNPQ0tTNCAhU09DS1M1CisKKworUE9SVFMKKz09PT09CisgICBUaGlzIGlzIGEgcHJvYmFibHkgaW5jb21wbGV0ZSBsaXN0IG9mIGtub3duIGhhcmR3YXJlIGFuZCBvcGVyYXRpbmcgc3lzdGVtcworICAgdGhhdCBjdXJsIGhhcyBiZWVuIGNvbXBpbGVkIGZvci4gSWYgeW91IGtub3cgYSBzeXN0ZW0gY3VybCBjb21waWxlcyBhbmQKKyAgIHJ1bnMgb24sIHRoYXQgaXNuJ3QgbGlzdGVkLCBwbGVhc2UgbGV0IHVzIGtub3chCisKKyAgICAgICAgLSBBbHBoYSBERUMgT1NGIDQKKyAgICAgICAgLSBBbHBoYSBEaWdpdGFsIFVOSVggdjMuMgorICAgICAgICAtIEFscGhhIEZyZWVCU0QgNC4xLCA0LjUKKyAgICAgICAgLSBBbHBoYSBMaW51eCAyLjIsIDIuNAorICAgICAgICAtIEFscGhhIE5ldEJTRCAxLjUuMgorICAgICAgICAtIEFscGhhIE9wZW5CU0QgMy4wCisgICAgICAgIC0gQWxwaGEgT3BlblZNUyBWNy4xLTFIMgorICAgICAgICAtIEFscGhhIFRydTY0IHY1LjAgNS4xCisgICAgICAgIC0gQVZSMzIgTGludXgKKyAgICAgICAgLSBBUk0gQW5kcm9pZCAxLjUsIDIuMQorICAgICAgICAtIEFSTSBJTlRFR1JJVFkKKyAgICAgICAgLSBBUk0gaVBob25lIE9TCisgICAgICAgIC0gQ2VsbCBMaW51eAorICAgICAgICAtIENlbGwgQ2VsbCBPUworICAgICAgICAtIEhQLVBBIEhQLVVYIDkuWCAxMC5YIDExLlgKKyAgICAgICAgLSBIUC1QQSBMaW51eAorICAgICAgICAtIEhQMzAwMCBNUEUvaVgKKyAgICAgICAgLSBNaWNyb0JsYXplIHVDbGludXgKKyAgICAgICAgLSBNSVBTIElSSVggNi4yLCA2LjUKKyAgICAgICAgLSBNSVBTIExpbnV4CisgICAgICAgIC0gT1MvNDAwCisgICAgICAgIC0gUG9ja2V0IFBDL1dpbiBDRSAzLjAKKyAgICAgICAgLSBQb3dlciBBSVggMy4yLjUsIDQuMiwgNC4zLjEsIDQuMy4yLCA1LjEsIDUuMgorICAgICAgICAtIFBvd2VyUEMgRGFyd2luIDEuMAorICAgICAgICAtIFBvd2VyUEMgSU5URUdSSVRZCisgICAgICAgIC0gUG93ZXJQQyBMaW51eAorICAgICAgICAtIFBvd2VyUEMgTWFjIE9TIDkKKyAgICAgICAgLSBQb3dlclBDIE1hYyBPUyBYCisgICAgICAgIC0gU0g0IExpbnV4IDIuNi5YCisgICAgICAgIC0gU0g0IE9TMjEKKyAgICAgICAgLSBTSU5JWC1aIHY1CisgICAgICAgIC0gU3BhcmMgTGludXgKKyAgICAgICAgLSBTcGFyYyBTb2xhcmlzIDIuNCwgMi41LCAyLjUuMSwgMi42LCA3LCA4LCA5LCAxMAorICAgICAgICAtIFNwYXJjIFN1bk9TIDQuMS5YCisgICAgICAgIC0gU3Ryb25nQVJNIChhbmQgb3RoZXIgQVJNKSBSSVNDIE9TIDMuMSwgNC4wMgorICAgICAgICAtIFN0cm9uZ0FSTS9BUk03L0FSTTkgTGludXggMi40LCAyLjYKKyAgICAgICAgLSBTdHJvbmdBUk0gTmV0QlNEIDEuNC4xCisgICAgICAgIC0gU3ltYmlhbiBPUyAoUC5JLlAuUy4pIDkueAorICAgICAgICAtIFRQRgorICAgICAgICAtIFVsdHJpeCA0LjNhCisgICAgICAgIC0gVU5JQ09TIDkuMAorICAgICAgICAtIGkzODYgQmVPUworICAgICAgICAtIGkzODYgRE9TCisgICAgICAgIC0gaTM4NiBlQ29zIDEuMy4xCisgICAgICAgIC0gaTM4NiBFc2l4IDQuMQorICAgICAgICAtIGkzODYgRnJlZUJTRAorICAgICAgICAtIGkzODYgSFVSRAorICAgICAgICAtIGkzODYgSGFpa3UgT1MKKyAgICAgICAgLSBpMzg2IExpbnV4IDEuMywgMi4wLCAyLjIsIDIuMywgMi40LCAyLjYKKyAgICAgICAgLSBpMzg2IE1JTklYIDMuMQorICAgICAgICAtIGkzODYgTmV0QlNECisgICAgICAgIC0gaTM4NiBOb3ZlbGwgTmV0V2FyZQorICAgICAgICAtIGkzODYgT1MvMgorICAgICAgICAtIGkzODYgT3BlbkJTRAorICAgICAgICAtIGkzODYgUU5YIDYKKyAgICAgICAgLSBpMzg2IFNDTyB1bml4CisgICAgICAgIC0gaTM4NiBTb2xhcmlzIDIuNworICAgICAgICAtIGkzODYgV2luZG93cyA5NSwgOTgsIE1FLCBOVCwgMjAwMCwgWFAsIDIwMDMKKyAgICAgICAgLSBpNDg2IG5jci1zeXN2NC4zLjAzIChOQ1IgTVAtUkFTKQorICAgICAgICAtIGlhNjQgTGludXggMi4zLjk5CisgICAgICAgIC0gbTY4ayBBbWlnYU9TIDMKKyAgICAgICAgLSBtNjhrIExpbnV4CisgICAgICAgIC0gbTY4ayB1Q2xpbnV4CisgICAgICAgIC0gbTY4ayBPcGVuQlNECisgICAgICAgIC0gbTg4ayBkZy1kZ3V4NS40UjMuMDAKKyAgICAgICAgLSBzMzkwIExpbnV4CisgICAgICAgIC0geDg2XzY0IExpbnV4CisgICAgICAgIC0gWFNjYWxlL1BYQTI1MCBMaW51eCAyLjQKKyAgICAgICAgLSBOaW9zIElJIHVDbGludXgKKworVXNlZnVsIFVSTHMKKz09PT09PT09PT09CisKK2F4VExTICAgICAgICBodHRwOi8vYXh0bHMuc291cmNlZm9yZ2UubmV0LworYy1hcmVzICAgICAgIGh0dHA6Ly9jLWFyZXMuaGF4eC5zZS8KK0dOVSBHU1MgICAgICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3NzLworR251VExTICAgICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbnV0bHMvCitIZWltZGFsICAgICAgaHR0cDovL3d3dy5wZGMua3RoLnNlL2hlaW1kYWwvCitsaWJpZG4gICAgICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmlkbi8KK2xpYnNzaDIgICAgICBodHRwOi8vd3d3LmxpYnNzaDIub3JnLworTUlUIEtlcmJlcm9zIGh0dHA6Ly93ZWIubWl0LmVkdS9rZXJiZXJvcy93d3cvZGlzdC8KK05TUyAgICAgICAgICBodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3NlY3VyaXR5L3BraS9uc3MvCitPcGVuTERBUCAgICAgaHR0cDovL3d3dy5vcGVubGRhcC5vcmcvCitPcGVuU1NMICAgICAgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8KK1BvbGFyU1NMICAgICBodHRwOi8vcG9sYXJzc2wub3JnLworeWFzc2wgICAgICAgIGh0dHA6Ly93d3cueWFzc2wuY29tLworWmxpYiAgICAgICAgIGh0dHA6Ly93d3cuemxpYi5uZXQvCisKK01pbmdXICAgICAgICBodHRwOi8vd3d3Lm1pbmd3Lm9yZy8KK01pbkdXLXc2NCAgICBodHRwOi8vbWluZ3ctdzY0LnNvdXJjZWZvcmdlLm5ldC8KK09wZW5XYXRjb20gICBodHRwOi8vd3d3Lm9wZW53YXRjb20ub3JnLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9JTlNUQUxMLmRldmNwcCBiL2N1cmwtNy4yNS4wL2RvY3MvSU5TVEFMTC5kZXZjcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1OGU0YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvSU5TVEFMTC5kZXZjcHAKQEAgLTAsMCArMSwzMDIgQEAKK0RldkNwcC1NaW5ndyBJbnN0YWxsICYgQ29tcGlsYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcHQgMjAwNQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWZlcmVuY2UgRW1haWxzIGF2YWlsYWJsZSBhdCBjdXJsQGhheHguc2U6CisKKyAgTGliY3VybCBJbnN0YWxsIGFuZCBVc2UgSXNzdWVzCisgIEF3YWl0aW5nIGFuIEFuc3dlciBmb3IgV2luIDMyIEluc3RhbGwKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7IEVycm9yCisgIE1ha2VmaWxlIElzc3VlcworCisKK0hhdmluZyBwcmV2aW91c2x5IGRvbmUgYSB0aG9yb3VnaCByZXZpZXcgb2Ygd2hhdCB3YXMgYXZhaWxhYmxlIHRoYXQgbWV0IG15CityZXF1aXJlbWVudHMgdW5kZXIgR1BMLCBJIHNldHRsZWQgZm9yIExpYmN1cmwgYXMgdGhlIHNvZnR3YXJlIG9mIGNob2ljZSBmb3IKK21hbnkgcmVhc29ucyBub3QgdGhlIGxlYXN0IG9mIHdoaWNoIHdhcyB0aGUgc3VwcG9ydC4KKworQmFja2dyb3VuZAorLS0tLS0tLS0tLQorCitUaGlzIHF1ZXN0IHN0YXJ0ZWQgd2hlbiBJIGlubm9jZW50bHkgdHJpZWQgdG8gaW5jb3Jwb3JhdGUgdGhlIGxpYmN1cmwgbGlicmFyeQoraW50byBteSBzaW1wbGUgc291cmNlIGNvZGUuIEkgZmlndXJlZCB0aGF0IGEgZmV3IGVhc3kgc3RlcHMgd291bGQgYWNjb21wbGlzaAordGhpcyB3aXRob3V0IG1ham9yIGhlYWRhY2hlcy4gSSBoYWQgbm8gaWRlYSB0aGF0IEkgd291bGQgYmUgZmFjaW5nIGFuIGFsbW9zdAoraW5zdXJtb3VudGFibGUgY2hhbGxlbmdlLgorCitUaGUgbWFpbiBwcm9ibGVtIGxpZXMgaW4gdHdvIGFyZWFzLiBGaXJzdCB0aGUgYnVsayBvZiBzdXBwb3J0IGZvciBsaWJjdXJsCitleGlzdHMgZm9yIGEgVW5peC9saW51eCBjb21tYW5kIGxpbmUgZW52aXJvbm1lbnRzLiBUaGlzIGlzIG9mIGxpdHRsZSBoZWxwIHdoZW4KK2l0IGNvbWVzIHRvIFdpbmRvd3MgTy9TLgorCitTZWNvbmRseSB0aGUgaGVscCB0aGF0IGRvZXMgZXhpc3QgZm9yIHRoZSBXaW5kb3dzIE8vUyBmb2N1c2VkIGFyb3VuZCBtaW5ndwordGhydSBhIGNvbW1hbmQgbGluZSBhcmd1bWVudCBlbnZpcm9ubWVudC4KKworWW91IG1heSBhc2sgIldoeSBpcyB0aGlzIGEgcHJvYmxlbT8iCisKK0knbSB1c2luZyBhIFdpbmRvd3MgTy9TIHdpdGggRGV2Q3BwLiBGb3IgdGhvc2Ugb2YgeW91IHdobyBhcmUgdW5mYW1pbGlhciB3aXRoCitEZXZDcHAsIGl0IGlzIGEgd2luZG93IHNoZWxsIEdVSSB0aGF0IHJlcGxhY2VzIHRoZSBjb21tYW5kIGxpbmUgZW52aXJvbm1lbnQKK2ZvciBnY2MuIEEgZGVmaW5pdGUgaW1wcm92ZW1lbnQgdGhhdCBJIGFtIHVud2lsbGluZyB0byBnaXZlIHVwLiBIb3dldmVyIHVzaW5nCitEZXZDcHAgcHJlc2VudGVkIGl0cyBvd24gc2V0IG9mIGlzc3Vlcy4gSW5hZHZlcnRlbnRseSBJIGFsc28gbWFkZSBzb21lCitjYXJlbGVzcyBlcnJvcnMgc3VjaCBhcyBjb21waWxpbmcgdGhlIDcuMTQgdmVyc2lvbiBvZiBNYWtlZmlsZSB3aXRoIGFuIG9sZGVyCit2ZXJzaW9uIG9mIHNvdXJjZSBjb2RlLiBUaGFua3MgdG8gRGFuIEZhbmRyaWNoIGZvciBwaWNraW5nIHRoaXMgdXAuCisKK0kgZGlkIGV2ZW50dWFsbHkgd2l0aCB0aGUgaGVscCBvZiBEYW5pZWwsIFBoaWxsaXBlIGFuZCBvdGhlcnMgbWFuYWdlIHRvCitpbXBsZW1lbnQgc3VjY2Vzc2Z1bGx5ICh0aGUgb25seSBtaW5ndyBhdmFpbGFibGUgdmVyc2lvbikKK2N1cmwtNy4xMy4wLXdpbjMyLXNzbC1kZXZlbC1taW5ndzMyIGludG8gdGhlIERldkNwcCBlbnZpcm9ubWVudC4gT25seSB0aGUKK2R5bmFtaWMgbGliY3VybC5kbGwgbGliY3VybGRsbC5hIGxpYnJhcmllcyB3b3JrZWQuIFRoZSBzdGF0aWMgbGlicmFyeSB3aGljaCBJCit3YXMgaW50ZXJlc3RlZCBpbiBkaWQgbm90LiBGdXJ0aGVybW9yZSB3aGVuIEkgdHJpZWQgdG8gaW1wbGVtZW50IG9uZSBvZiB0aGUKK2V4YW1wbGVzIGluY2x1ZGVkIHdpdGggdGhlIGN1cmwgcGFja2FnZSAoZ2V0IGluZm8uYykgaXQgY2F1c2VkIHRoZSBleGVjdXRhYmxlCit0byBjcmFzaC4gVHJhY2luZyB0aGUgYnVnIEkgZm91bmQgaXQgaW4gdGhlIGNvZGUgYW5kIGZ1bmN0aW9uIHJlcyA9CitjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsuCisKK0F0IHRoaXMgcG9pbnQgSSBoYWQgdG8gbWFrZSBhIGNob2ljZSBhcyB0byB3aGV0aGVyIGludmVzdCBteSBsaW1pdGVkCit0aW1lLWVuZXJneSByZXNvdXJjZSB0byBmaXhpbmcgdGhlIGJ1ZyBvciB0byBjb21waWxlIHRoZSBuZXcgdmVyc2lvbgorYXZhaWxhYmxlLiBBZnRlciBzZWFyY2hpbmcgdGhlIGFyY2hpdmVzIEkgZm91bmQgYSB2ZXJ5IHNpbWlsYXIgb3IgdGhlIHNhbWUgYnVnCityZXBvcnRlZCBmcm9tIHZlcnNpb24gNy4xMnggb24uIERhbmllbCBkaWQgaW5mb3JtIG1lIHRoYXQgaGUgdGhvdWdodCB0aGF0IHRoaXMKK2J1ZyBoYWQgYmVlbiBmaXhlZCB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbi4gU28gSSBwcm9jZWVkZWQgdG8gY29tcGlsZSB0aGUKK2xhdGVzdCBTU0wgdmVyc2lvbiB3aGVyZSBJIGZhY2VkIG90aGVyIGNoYWxsZW5nZXMuCisKK0luIG9yZGVyIHRvIG1ha2UgdGhpcyBwcm9jZXNzIHVucmVtYXJrYWJsZSBmb3Igb3RoZXJzIHVzaW5nIHRoZSBzYW1lCitlbnZpcm9ubWVudCBJIGRlY2lkZWQgdG8gZG9jdW1lbnQgdGhlIHByb2Nlc3Mgc28gdGhhdCBvdGhlcnMgd2lsbCBmaW5kIGl0Cityb3V0aW5lLiBJdCB3b3VsZCBiZSBhIHNoYW1lIGlmIG5ld2JpZXMgY291bGQgbm90IGltcGxlbWVudCB0aGlzIGV4Y2VsbGVudAorcGFja2FnZSBmb3IgdGhlaXIgdXNlLgorCitJIHdvdWxkIGxpa2UgdG8gdGhhbmsgdGhlIG1hbnkgb3RoZXJzIGluIHRoaXMgZm9ydW0gYW5kIGluIHRoZSBEZXZDcHAgZm9ydW0KK2ZvciB0aGVpciBoZWxwLiBXaXRob3V0IHlvdXIgaGVscCBJIG1heSBlaXRoZXIgaGF2ZSBnaXZlbiB1cCBvciBpdCB3b3VsZCBoYXZlCit0YWtlbiBtZSBtYW55IHRpbWVzIGxvbmdlciB0byBhY2hpZXZlIHN1Y2Nlc3MuCisKK1RoZSBDb29rYm9vayBBcHByb2FjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZGlzY3Vzc2lvbiB3aWxsIGJlIGNvbmZpbmVkIHRvIGEgU1NMIHN0YXRpYyBsaWJyYXJ5IGNvbXBpbGF0aW9uIGFuZAoraW5zdGFsbGF0aW9uLiBMaW1pdGVkIG1lbnRpb24gYW5kIGNvbW1lbnRzIHdpbGwgYmUgaW5zZXJ0ZWQgd2hlcmUgYXBwcm9wcmlhdGUKK3RvIGhlbHAgd2l0aCBub24tU1NMLCBkeW5hbWljIGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMuCisKKworICAgVXNpbmcgTWFrZWZpbGUgZnJvbSBEZXZDcHAgdG8gY29tcGlsZSBMaWJjdXJsIGxpYnJhcmllcworCitQcmVhbWJsZQorLS0tLS0tLS0KKworVXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIHJlbGVhc2UgLSBjdXJsLTcuMTQuMC50YXIuZ3ouIEN1cmwgc291cmNlIGNvZGUgaXMKK3BsYXRmb3JtIGluZGVwZW5kZW50LiBUaGlzIHNpbXBseSBtZWFucyB0aGF0IHRoZSBzb3VyY2UgY29kZSBjYW4gYmUgY29tcGlsZWQKK2ZvciBhbnkgT3BlcmF0aW5nIFN5c3RlbSAoTGludXgvVW5peCBXaW5kb3dzIGV0Yy4gYW5kIHZhcmlhdGlvbnMgb2YgdGhlcmVvZikuCisKK1RoZSBmaXJzdCB0aGluZyB0byBub3RlIGlzIHRoYXQgaW5zaWRlIGN1cmwtNy4xNC4wIHlvdSB3aWxsIGZpbmQgdHdvIGZvbGRlcnMKK2xpYiBhbmQgc3JjLiBCb3RoIGNvbnRhaW4gTWFrZWZpbGUubTMyIChyZXF1aXJlZCBmb3Igd2luIG1pbmd3IGxpYnJhcnkgb3IgZXhlCitjb21waWxhdGlvbikgZmlsZXMgd2hpY2ggYXJlIGRpZmZlcmVudC4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlIHR3bworZm9sZGVycyBhbmQgdGhlIG1ha2VmaWxlcyBpcyB0aGF0IHRoZSBzcmMgZm9sZGVyIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGNvbXBpbGUKK2FuIGV4ZWN1dGFibGUgZmlsZShjdXJsLmV4ZSkgd2hpbGUgdGhlIGxpYiBmb2xkZXIgY29udGVudHMgYXJlIHVzZWQgdG8gY29tcGlsZQorYSBzdGF0aWMgKGxpYmN1cmwuYSkgYW5kIGR5bmFtaWMgKGxpYmN1cmwuZGxsICYgbGliY3VybGRsbC5hKSBmaWxlIHRoYXQgY2FuIGJlCit1c2VkIHRvIGNvbXBpbGUgbGliY3VybCB3aXRoIHlvdXIgb3duIHNvdXJjZSBjb2RlIHNvIHRoYXQgb25lIGNhbiB1c2UgYW5kCithY2Nlc3MgYWxsIGxpYmN1cmwgZnVuY3Rpb25zLgorCitCZWZvcmUgd2Ugc3RhcnQgcGxlYXNlIG1ha2Ugc3VyZSB0aGF0IERldkNwcCBpcyBpbnN0YWxsZWQgcHJvcGVybHkuIEluCitwYXJ0aWN1bGFyIG1ha2Ugc3VyZSB5b3UgaGF2ZSBubyBzcGFjZXMgaW4gdGhlIG5hbWUgb2YgYW55IG9mIHRoZSBkaXJlY3RvcmllcworYW5kIHN1YmRpcmVjdG9yaWVzIHdoZXJlIERldkNwcCBpcyBpbnN0YWxsZWQuIEZhaWx1cmUgdG8gY29tcGx5IHdpdGggdGhlCitpbnN0YWxsIGluc3RydWN0aW9ucyBtYXkgcHJvZHVjZSBlcnJhdGljIGJlaGF2aW91ciBpbiBEZXZDcHAuIEZvciBmdXJ0aGVyIGluZm8KK2NoZWNrIHRoZSBmb2xsb3dpbmcgc2l0ZXMKKworaHR0cDovL2FkaXRzdS5mcmVldW5peGhvc3QuY29tL2Rldi1jcHAtZmFxLmh0bWwKK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvZm9ydW0vbWVzc2FnZS5waHA/bXNnX2lkPTMyNTIyMTMKKworQXMgSSBoYXZlIG1lbnRpb25lZCBiZWZvcmUgSSB3aWxsIGNvbmZpbmUgdGhpcyB0byB0aGUgU1NMIExpYnJhcnkgY29tcGlsYXRpb25zCitidXQgdGhlIHByb2Nlc3MgaXMgdmVyeSBzaW1pbGFyIGZvciBjb21waWxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZSAtIGN1cmwuZXhlOworanVzdCBzdWJzdGl0dXRlIHRoZSBzcmMgZm9sZGVyIG1ha2VmaWxlIGluIGl0cyBzdGVhZC4KKworRmlyc3QgdXNlIGEgdGV4dCBwcm9jZXNzb3IgTm90ZXBhZCwgb3IgeW91ciBvd24gZmF2b3VyaXRlIHRleHQgcHJvY2Vzc29yLiBUbworZW5nYWdlIHlvdXIgZmF2b3VyaXRlIHRleHQgcHJvY2Vzc29yLCBzZWxlY3QgTWFrZWZpbGUubTMyIGNsaWNrIG9uY2Ugd2l0aCB5b3VyCittb3VzZSBvbiBmaWxlIGljb247IGljb24gdHVybnMgYmx1ZSwgcHJlc3MgdGhlIHNoaWZ0IGtleSBhbmQgcmlnaHQtY2xpY2sgb24KK21vdXNlLCBtZW51IGFwcGVhcnMgc2VsZWN0ICJPcGVuIHdpdGgiLCBzZWxlY3QgeW91ciBmYXZvdXJpdGUgdGV4dCBwcm9jZXNzb3IuCisKK05leHQgcmVhZCB0aGUgY29udGVudHMgb2YgTWFrZWZpbGUubTMyLiBJdCBpbmNsdWRlcyBpbnN0cnVjdGlvbnMgb24gaXRzIHVzZS4KKworTWV0aG9kIEkgLSBET1MgQ29tbWFuZCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSAtIFRoZSBvbmx5IHJlYXNvbiBJIGhhdmUgaW5jbHVkZWQgdGhpcyBtZXRob2QgaXMgdGhhdCBNZXRob2QgSUkgd2hpY2ggaXMKK3RoZSBwcmVmZXJyZWQgbWV0aG9kIGZvciBjb21waWxpbmcgZG9lcyBub3QgYWxsb3cgZm9yIHRoZSBzZXR0aW5nIG9mIG9wdGlvbgorc3dpdGNoZXMgKGUuZy4gU1NMID0gMSBvciBTU0wgPTApLiBBdCBsZWFzdCB0aGF0J3Mgd2hhdCB0aGV5IHRlbGwgbWUgYXQgdGhlCitEZXYtQ3BwIGZvcnVtLgorCisxIC0gTWFrZSBhIGNvcHkgb2YgKEQ6XERldi1DcHBcYmluKSBiaW4gZm9sZGVyIGFuZCBuYW1lIGl0ICJiaW4gT3JpZ2luYWwiCitwbGFjZSBpdCBpbiB0aGUgRGV2LUNwcCBpbnN0YWxsZWQgZGlyZWN0b3J5IChEOlxEZXYtQ3BwXCBmb3IgdGhpcyBleGFtcGxlKQorCisyIC0gQ29weSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBMSUIgZm9sZGVyIG9mIGN1cmwtNy4xNC4wLnRhci5neiBvciB6aXAKK3ZlcnNpb24gaW50byB0aGUgYmluIGZvbGRlciBhYm92ZSAoRDpcRGV2LUNwcFxiaW4pLiBUaGUgcmVhc29uIGJlaW5nIGlzIHRoYXQKK3RoZSBtYWtlLmV4ZSBmaWxlIHJlc2lkZXMgaW4gdGhpcyBmb2xkZXIuIE1ha2UuZXhlIHdpbGwgdXNlIC0gTWFrZWZpbGUubTMyLAorTWFrZWZpbGUuaW5jLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGluY2x1ZGVkIGluIHRoZSBsaWIgZm9sZGVyIHRvIGNvbXBpbGUgdGhlCitzb3VyY2UgY29kZS4gVGhlcmUgaXMgYSBQQVRIIGlzc3VlIHdpdGggbWFrZS5leGUgdGhhdCByZW1haW5zIHVucmVzb2x2ZWQgYXQKK2xlYXN0IGZvciBtZS4gVW5sZXNzIHRoZSBlbnRpcmUgc291cmNlIGNvZGUgdG8gYmUgY29tcGlsZWQgaXMgcGxhY2VkIGVudGlyZWx5Cit3aXRoaW4gdGhlIGRpcmVjdG9yeSBvZiBtYWtlLmV4ZSBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgZ2VuZXJhdGVkIC0gImZpbGUKK3h4eHgueXl5IG5vdCBhdmFpbGFibGUiLgorCiszLSBHbyB0byBEZXYtQ3BwXGJpbiBhbmQgZG91YmxlIGNsaWNrIG9uIG1ha2UgLmV4ZS4gWW91IHdpbGwgc2VlIGEgRE9TIHdpbmRvdworcXVpY2tseSBwb3AgdXAgYW5kIGNsb3NlIHZlcnkgcXVpY2tseS4gTm90IHRvIHdvcnJ5ISBQbGVhc2UgZG8gbm90IHNraXAgdGhpcworc3RlcC4KKworNC0gQ2xpY2sgb24gdGhlIHN0YXJ0IGJ1dHRvblxQcm9ncmFtc1xNUy1ET1MgUHJvbXB0Lk9uY2UgdGhlIERPUyBXaW5kb3cgaXMgdXAKK1R5cGUgdGhlIGRpc2sgZHJpdmUgbGV0dGVyIChlLmcuIEU6ICkgZW5nYWdlIHRoZSBlbnRlciBidXR0b24uIFRoZSBwYXRoIHNob3VsZAorYXV0b21hdGljYWxseSB0YWtlIHlvdSB0byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBtYWtlLmV4ZSBmaWxlLgorCis1LSBUbyBjb21waWxlIHRoZSBzb3VyY2UgY29kZSBzaW1wbHkgdHlwZSBhdCB0aGUgRE9TIHByb21wdCBtYWtlIC1mCitNYWtlZmlsZS5tMzIgYXMgcGVyIGluc3RydWN0aW9ucyBjb250YWluZWQgaW4gdGhlIE1ha2VmaWxlLm0zMiBmaWxlICh1c2UgYW55Cit0ZXh0IHByb2Nlc3NvciB0byByZWFkIGluc3RydWN0aW9ucykuIEkgZG9uJ3QgYmVsaWV2ZSB0aGF0IHRoaXMgbWFrZWZpbGUKK2FsbG93cyBmb3IgdGhlIG9wdGlvbiBvZiBub24gU1NMLiBJZ25vcmUgYW55IHdhcm5pbmdzLgorCis2LSBDb2xsZWN0IGFuZCBtYWtlIGNvcGllcyBvZiBsaWJjdXJsLmEsIGxpYmN1cmwuZGxsLCBsaWJjdXJsZGxsLmEgYW5kIGFueSAqLm8KK2NvbXBpbGF0aW9ucyB5b3UgbWlnaHQgbmVlZCBpbiBhbm90aGVyIGRpcmVjdG9yeSBvdXRzaWRlIG9mIHRoZSBiaW4gZGlyZWN0b3J5CithcyB5b3Ugd2lsbCBuZWVkIHRoaXMgZmlsZXMgc2hvcnRseSB0byBzZXQgdXAgbGliY3VybCBmb3IgdXNlIHdpdGgKK0Rldi1jcHAuIEZvciBtb3N0IGFwcHMgKi5vIGlzIG5vdCByZXF1aXJlZC4gTGF0ZXIgb24gd2Ugd2lsbCBzaG93IHdoYXQgdG8gZG8KK3dpdGggdGhlc2UgZmlsZXMuCisKKzctIFlvdSBhcmUgZmluaXNoZWQgYnV0IGJlZm9yZSBjbG9zaW5nIHdlIG5lZWQgdG8gZG8gY2xlYW51cCAtIGVyYXNlIHRoZSBiaW4KK2ZvbGRlciBhbmQgcmVuYW1lIHRoZSAiYmluIE9yaWdpbmFsIiBmb2xkZXIgY3JlYXRlZCBpbiBzdGVwIDEgdG8gYmluLgorCitOb3RlIHRvIGNvbXBpbGUgYSBjdXJsIGV4ZWN1dGFibGUgdGhlIHByb2Nlc3MgaXMgcHJvYmFibHkgc2ltaWxhciBidXQgaW5zdGVhZAorb2YgdXNpbmcgdGhlIExJQiBmb2xkZXIgY29udGVudHMgdXNlIHRoZSBTUkMgZm9sZGVyIGNvbnRlbnRzIGFuZCBNYWtlZmlsZXMgaW4KK2N1cmwtNy4xNC4wLnRhci5nei4gRmlsZSBkaXJlY3RvcmllcyByZWxhdGl2ZSBwbGFjZW1lbnRzIG11c3QgYmUgcmVzcGVjdGVkIGZvcgorY29tcGlsaW5nIHRvIHRha2UgcGxhY2Ugc3VjY2Vzc2Z1bGx5LiBUaGlzIG1heSBub3QgYmUgcG9zc2libGUgd2l0aCB0aGUgUEFUSAorcHJvYmxlbSB0aGF0IG1ha2UuZXhlIGV4cGVyaWVuY2VzLiBJZiBhbnlvbmUgaGFzIHNvbHZlZCB0aGlzIFBBVEggaXNzdWUgYW5kCitwbGVhc2UgbWFrZSBzdXJlIGl0IGFjdHVhbGx5IHdvcmtzIG9uIFdpbiA5eC8yMDAwL1hQIGJlZm9yZSBsZXR0aW5nIG1lCitrbm93LiBUaGVuIHBsZWFzZSBsZXQgbWUgb3IgRGFuaWVsIGluIG9uIHRoZSBzb2x1dGlvbiBzbyB0aGF0IGl0IGNhbiBiZQoraW5jbHVkZWQgd2l0aCB0aGVzZSBpbnN0cnVjdGlvbnMuIFRoYW5rcy4KKworb3IKKworTWV0aG9kIElJIC0gRGV2LUNwcCBHVUkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEtIENvcHkgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgTElCIGZvbGRlciBvZiBjdXJsLTcuMTQuMC50YXIuZ3ogb3IgemlwCit2ZXJzaW9uIGludG8gYW55IGZvbGRlciBvdXRzaWRlIG9mIChEZXYtQ3BwXGJpbikuCisKKzItIERyb3AgdGhlIEZpbGUvTmV3L2NsaWNrIG9uIFByb2plY3QuCisKKzMtIE5ldyBQcm9qZWN0IERpYWxvZ3VlIGJveCBhcHBlYXJzLiBEb3VibGUgY2xpY2sgb24gdGhlIFN0YXRpYyBMaWJyYXJ5LgorCis0LSBDcmVhdGUgUHJvamVjdCBEaWFsb2d1ZSBib3ggYXBwZWFycy4gU2VsZWN0IHRoZSBMSUIgZm9sZGVyIGxvY2F0aW9uIHRvCitwbGFjZSBhbmQgbG9jYXRlIHlvdXIgUHJvamVjdCBGaWxlIE5hbWUuIFBsYWNpbmcgdGhlIFByb2plY3QgRmlsZSBOYW1lCitlbHNld2hlcmUgbWF5IGNhdXNlIHByb2JsZW1zIChQQVRIIGlzc3VlIHByb2JsZW0gYWdhaW4pLgorCis1LSBEcm9wIGRvd24gdGhlIFByb2plY3QvUHJvamVjdCBPcHRpb25zLiBQcm9qZWN0IE9wdGlvbnMgRGlhbG9ndWUgYm94CithcHBlYXJzLgorCis2LSBTZWxlY3QgdGhlIE1ha2VmaWxlIHRhYiBpbiB0aGUgUHJvamVjdCBPcHRpb25zIERpYWxvZ3VlIEJveC4gQ2hlY2sgQm94IC0KK1VzZSBDdXN0b20gTWFrZWZpbGUuIENsaWNrIG9uIHRoZSBGb2xkZXIgaWNvbiBhdCB0aGUgZXh0cmVtZSByaWdodCBvZiB0aGUKK0NoZWNrIEJveC4gU2VsZWN0IE1ha2VmaWxlLm0zMiBpbiB0aGUgZm9sZGVyIHdoZXJldmVyIHlvdSBoYXZlIHBsYWNlZCB0aGUKK2NvbnRlbnRzIG9mIHRoZSBMSUIgRm9sZGVyLiBQcmVzcyBPSyBhbmQgY2xvc2UgdGhlIERpYWxvZ3VlIEJveC4KKworNy0gRHJvcCB0aGUgTWVudSBQcm9qZWN0L0NsaWNrIG9uIEFkZCB0byBQcm9qZWN0LiBPcGVuIEZpbGUgRGlhbG9ndWUgQm94CithcHBlYXJzLiAgVGhlIERpYWxvZ3VlIEJveCBzaG91bGQgb3BlbiBpbiB0aGUgZm9sZGVyIHdoZXJldmVyIHlvdSBoYXZlIHBsYWNlZAordGhlIGNvbnRlbnRzIG9mIHRoZSBMSUIgRm9sZGVyLiBJZiBub3QgZ28gdGhlcmUuCisKKzgtIFNlbGVjdCBDcnRsLUEgdG8gc2VsZWN0IGFsbCBmaWxlcyBpbiB0aGUgTElCIGZvbGRlci4gQ2xpY2sgb24gb3BlbiB0byBhZGQKK2ZpbGVzIGFuZCBjbG9zZSBib3guIFdhaXQgdGlsbCBhbGwgZmlsZXMgYXJlIGFkZGVkLiBUaGlzIG1heSB0YWtlIDMwIHNlY29uZHMKK29yIGxvbmdlci4KKworOS0gRHJvcCB0aGUgTWVudSBFeGVjdXRlL0NsaWNrIG9uIENvbXBpbGUuCisKKzEwLSBUaGF0J3MgaXQuCisKKworICAgVGhlIGZvbGxvd2luZyBzdGVwcyBtdXN0IGJlIGNvbXBsZXRlZCBpZiBDdXJsIGlzIHRvIHdvcmsgcHJvcGVybHkKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0xJQiBmb2xkZXIgaW5jbHVzaW9ucyAoKi5hIHBsYWNlbWVudCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS0gUmVmZXIgdG8gTWV0aG9kIEkgLSBET1MgQ29tbWFuZCBMaW5lIHBvaW50ICMgNiBUYWtlIGxpYmN1cmwuYSwgbGliY3VybGRsbC5hCithbmQgaW5zdGFsbCBpdCBpbiB0aGUgZGlyZWN0b3J5IEMoIG9yIHdoaWNoZXZlciBkcml2ZSBEZXYgaXMgaW5zdGFsbGVkKQorOlxEZXYtQ3BwXGxpYi4KKworCitJbmNsdWRlIEZvbGRlcgorLS0tLS0tLS0tLS0tLS0KKworMS0gQ3JlYXRlIGEgbmV3IGZvbGRlciBieSB0aGUgbmFtZSBvZiBjdXJsIChkbyBub3QgY2hhbmdlIHRoZSBuYW1lIGN1cmwgdG8KK3NvbWUgb3RoZXIgbmFtZSBhcyBpdCB3aWxsIGNhdXNlIG1ham9yIGlzc3VlcykgaW4gdGhlIGRpcmVjdG9yeQorQzpcRGV2LUNwcFxpbmNsdWRlLgorCisyLSBDb3B5IHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGN1cmwgZm9sZGVyIG9mIGN1cmwtNy4xNC4wLnRhci5neiBvciB6aXAKKyB2ZXJzaW9uIGludG8gdGhlIG5ld2x5IGNyZWF0ZWQgY3VybCBkaXJlY3RvcnkgLSBDOlxEZXYtQ3BwXGluY2x1ZGVcY3VybC4KKworTGlua3MgVG8gSW5jbHVkZSBBbmQgTGliIEZvbGRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLSBEcm9wIHRoZSBNZW51IC0gVG9vbHNcQ29tcGlsZXIgT3B0aW9uc1xEaXJlY3Rvcmllc1xMaWJyYXJpZXMuIE1ha2Ugc3VyZQordGhhdCBDKCBvciB3aGljaGV2ZXIgZHJpdmUgRGV2IGlzIGluc3RhbGxlZCk6XERFVi1DUFBcbGliIGlzIGluY2x1ZGVkLgorCisyLSBOZXh0IHNlbGVjdCB0aGUgTWVudSAtIFRvb2xzXENvbXBpbGVyIE9wdGlvbnNcRGlyZWN0b3JpZXNcQyBJbmNsdWRlcy4gTWFrZQorc3VyZSB0aGF0IEM6XERFVi1DUFBcaW5jbHVkZSBhbmQgQzpcRGV2LUNwcFxpbmNsdWRlXGN1cmwgYXJlIGluY2x1ZGVkLgorCiszLSBOZXh0IHNlbGVjdCB0aGUgTWVudSAtIFRvb2xzXENvbXBpbGVyIE9wdGlvbnNcRGlyZWN0b3JpZXNcQysrCitJbmNsdWRlcy4gTWFrZSBzdXJlIHRoYXQgQzpcREVWLUNQUFxpbmNsdWRlIGFuZCBDOlxEZXYtQ3BwXGluY2x1ZGVcY3VybCBhcmUKK2luY2x1ZGVkLgorCitMaW5rZXIgTGlua3MKKy0tLS0tLS0tLS0tLQorCisxLSBEcm9wIHRoZSBNZW51IC0gVG9vbHNcQ29tcGlsZXIgT3B0aW9uc1xEaXJlY3Rvcmllc1xDb21waWxlci4KKworMi0gTWFrZSBzdXJlIHRoYXQgdGhlIGJveCAiQWRkIHRoZXNlIGNvbW1hbmRzIHRvIHRoZSBsaW5rZXIgY29tbWFuZCBsaW5lIiBpcworY2hlY2tlZC4KKworMy0gSW5jbHVkZSBpbiB0aGUgd2hpdGUgc3BhY2UgaW1tZWRpYXRlbHkgYmVsb3cgdGhlIGJveCByZWZlcnJlZCBpbiAyIC1sY3VybAorLWx3czJfMzIuCisKK1NTTCBGaWxlcworLS0tLS0tLS0tCisKKzEtIEdldCB0aGUgbGF0ZXN0IG9wZW5TU0wgKGFzIG9mIHRpbWUgb2YgdGhpcyB3cml0aW5nKQorb3BlbnNzbC0wLjkuN2Utd2luMzItYmluLnppcCBmb3IgdGhlIG1pbmltYWxpc3QgcGFja2FnZSBvZiB0aGUgb3BlbnNzbC0wLjkuN2UKK2JpbmFyaWVzIHBvcnRlZCB0byBNUyBXaW5kb3dzIDk1Lzk4L05UL1hQIHVzaW5nIHRoZSBNaW5nVzMyL0dDQy0zLjEKK2RldmVsb3BtZW50IGVudmlyb25tZW50LiBUaGUgZmlsZSBtYXkgYmUgZG93bmxvYWRlZCBhdAoraHR0cDovL2N1cmwuaGF4eC5zZS9kb3dubG9hZC8uCisKKzItIE9wZW4gdGhlIGFib3ZlIHppcCBmaWxlLiBZb3Ugd2lsbCBmaW5kIHR3byBmaWxlcyAtIFNETC5kbGwsCitTRExfbWl4ZXIuZGxsLiBJbnN0YWxsIHRoZW0gaW4gdGhlIGRpcmVjdG9yeSBDOlxXSU5ET1dTXFNZU1RFTTMyIGZvciBXaW4gOXgKK3VzZXJzIGFuZCBjOlx3aW5udFxzeXN0ZW0zMiBmb3IgTlQtZmFtaWx5IHVzZXJzLgorCitNdWx0aXRocmVhZGluZyBGaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gYmUgY29tcGxldGVkCisKKyNkZWZpbmUKKy0tLS0tLS0KKworMS0gTWFrZSBzdXJlIHRoYXQgeW91ciBwcm9ncmFtIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgLSAjZGVmaW5lIENVUkxfU1RBVElDTElCCittdXN0IGJlIGRlY2xhcmVkIEZJUlNUIGJlZm9yZSBhbnkgb3RoZXIgZGVmaW5lIGZ1bmN0aW9ucyBtYXkgYmUKK2FkZGVkLiBPdGhlcndpc2UgeW91IG1heSBleHBlcmllbmNlIGxpbmsgZXJyb3JzLgorCisyLSBEb24ndCBmb3JnZXQgdG8gaW5jbHVkZSAgICNpbmNsdWRlICJjdXJsL2N1cmwuaCIuCisKK2UuZy4KKyAgICAjZGVmaW5lIENVUkxfU1RBVElDTElCCisjaW5jbHVkZSA8d2luZG93cy5oPgorICAgICNpbmNsdWRlICJjdXJsL2N1cmwuaCIKKyNpbmNsdWRlIDxmc3RyZWFtPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHZlY3Rvcj4KK2V0Yy4uLgorCisKK1N0YXRpYyBvciBEeW5hbWljIExpYnJhcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGFib3ZlIHN0ZXBzIGFwcGx5IGZvciB0aGUgdXNlIGJ5IGEgc3RhdGljIGxpYnJhcnkuIFNob3VsZCB5b3UgY2hvb3NlIHRvCit1c2UgYSBkeW5hbWljIGxpYnJhcnkgeW91IHdpbGwgYmUgcmVxdWlyZWQgdG8gcGVyZm9ybSB0aGVzZSBhZGRpdGlvbmFsIHN0ZXBzLgorCisxLSBSZWZlciB0byBNZXRob2QgSSAtIERPUyBDb21tYW5kIExpbmUgcG9pbnQgIyA2LiBJbnN0YWxsIGxpYmN1cmwuZGxsIGluIHRoZQorZGlyZWN0b3J5IEM6XFdJTkRPV1NcU1lTVEVNMzIgZm9yIFdpbiA5eCB1c2VycyBhbmQgYzpcd2lubnRcc3lzdGVtMzIgZm9yCitOVC1mYW1pbHkgdXNlcnMuCisKKzItIFJlZmVyIHRvIExpbmtlciBMaW5rcyBwb2ludCAzIC0gUmVwbGFjZSAtbGN1cmwgd2l0aCAtbGN1cmxkbGwuCisKK1ZvaWxhIHlvdSdyZSBkb25lLgorCitUaGUgbm9uLVNTTCBzdGF0aWMgTGlicmFyeSBidWlsZCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIHVzZSBhdCBsZWFzdCBhcyBvZiB0aGUKK3RpbWUgb2YgdGhpcyB3cml0aW5nIC0gdjcuMTQuIENoZWNrIHJlZmVyZW5jZSBlbWFpbHMgLSBQaGlsbGlwZSBhbmQgSSBmb3VuZCBpdAoraW1wb3NzaWJsZSB0byBmdWxseSBjb21waWxlIGFzIGNlcnRhaW4gZmlsZXMgd2VyZSBtaXNzaW5nIGZvciBsaW5raW5nLiBObyBiaWcKK2xvc3MgYXMgU1NMIGlzIGEgbWFqb3IgcGx1cy4KKworSG9wZSB0aGlzIEhlbHBzCisKK1RvbQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9JTlRFUk5BTFMgYi9jdXJsLTcuMjUuMC9kb2NzL0lOVEVSTkFMUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWM0ZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9JTlRFUk5BTFMKQEAgLTAsMCArMSw1MDUgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisKK0lOVEVSTkFMUworCisgVGhlIHByb2plY3QgaXMgc3BsaXQgaW4gdHdvLiBUaGUgbGlicmFyeSBhbmQgdGhlIGNsaWVudC4gVGhlIGNsaWVudCBwYXJ0IHVzZXMKKyB0aGUgbGlicmFyeSwgYnV0IHRoZSBsaWJyYXJ5IGlzIGRlc2lnbmVkIHRvIGFsbG93IG90aGVyIGFwcGxpY2F0aW9ucyB0byB1c2UKKyBpdC4KKworIFRoZSBsYXJnZXN0IGFtb3VudCBvZiBjb2RlIGFuZCBjb21wbGV4aXR5IGlzIGluIHRoZSBsaWJyYXJ5IHBhcnQuCisKK0dJVAorPT09CisgQWxsIGNoYW5nZXMgdG8gdGhlIHNvdXJjZXMgYXJlIGNvbW1pdHRlZCB0byB0aGUgZ2l0IHJlcG9zaXRvcnkgYXMgc29vbiBhcworIHRoZXkncmUgc29tZXdoYXQgdmVyaWZpZWQgdG8gd29yay4gQ2hhbmdlcyBzaGFsbCBiZSBjb21taXR0ZWQgYXMgaW5kZXBlbmRlbnRseQorIGFzIHBvc3NpYmxlIHNvIHRoYXQgaW5kaXZpZHVhbCBjaGFuZ2VzIGNhbiBiZSBlYXNpZXIgc3BvdHRlZCBhbmQgdHJhY2tlZAorIGFmdGVyd2FyZHMuCisKKyBUYWdnaW5nIHNoYWxsIGJlIHVzZWQgZXh0ZW5zaXZlbHksIGFuZCBieSB0aGUgdGltZSB3ZSByZWxlYXNlIG5ldyBhcmNoaXZlcyB3ZQorIHNob3VsZCB0YWcgdGhlIHNvdXJjZXMgd2l0aCBhIG5hbWUgc2ltaWxhciB0byB0aGUgcmVsZWFzZWQgdmVyc2lvbiBudW1iZXIuCisKK1BvcnRhYmlsaXR5Cis9PT09PT09PT09PQorCisgV2Ugd3JpdGUgY3VybCBhbmQgbGliY3VybCB0byBjb21waWxlIHdpdGggQzg5IGNvbXBpbGVycy4gIE9uIDMyYml0IGFuZCB1cAorIG1hY2hpbmVzLiBNb3N0IG9mIGxpYmN1cmwgYXNzdW1lcyBtb3JlIG9yIGxlc3MgUE9TSVggY29tcGxpYW5jZSBidXQgdGhhdCdzCisgbm90IGEgcmVxdWlyZW1lbnQuCisKKyBXZSB3cml0ZSBsaWJjdXJsIHRvIGJ1aWxkIGFuZCB3b3JrIHdpdGggbG90cyBvZiB0aGlyZCBwYXJ0eSB0b29scywgYW5kIHdlCisgd2FudCBpdCB0byByZW1haW4gZnVuY3Rpb25hbCBhbmQgYnVpbGRhYmxlIHdpdGggdGhlc2UgYW5kIGxhdGVyIHZlcnNpb25zCisgKG9sZGVyIHZlcnNpb25zIG1heSBzdGlsbCB3b3JrIGJ1dCBpcyBub3Qgd2hhdCB3ZSB3b3JrIGhhcmQgdG8gbWFpbnRhaW4pOgorCisgT3BlblNTTCAgICAgIDAuOS42CisgR251VExTICAgICAgIDEuMgorIHpsaWIgICAgICAgICAxLjEuNAorIGxpYnNzaDIgICAgICAwLjE2CisgYy1hcmVzICAgICAgIDEuNi4wCisgbGliaWRuICAgICAgIDAuNC4xCisgY3lhc3NsICAgICAgIDIuMC4wCisgb3BlbmxkYXAgICAgIDIuMAorIE1JVCBrcmI1IGxpYiAxLjIuNAorIHFzb3NzbCAgICAgICBWNVIyTTAKKyBOU1MgICAgICAgICAgMy4xMS54CisgYXhUTFMgICAgICAgIDEuMi43CisgSGVpbWRhbCAgICAgID8KKworICogPSBvbmx5IHBhcnRseSBmdW5jdGlvbmFsLCBidXQgdGhhdCdzIGR1ZSB0byBidWdzIGluIHRoZSB0aGlyZCBwYXJ0eSBsaWIsIG5vdAorICAgICBiZWNhdXNlIG9mIGxpYmN1cmwgY29kZQorCisgT24gc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgcnVucywgd2UgYWltIGF0IHdvcmtpbmcgb24gdGhlbSBhbGwgLSBpZiB0aGV5IGhhdmUKKyBhIHN1aXRhYmxlIEMgY29tcGlsZXIuIE9uIHN5c3RlbXMgdGhhdCBkb24ndCBydW4gY29uZmlndXJlLCB3ZSBzdHJpdmUgdG8ga2VlcAorIGN1cmwgcnVubmluZyBmaW5lIG9uOgorCisgV2luZG93cyAgICAgIDk4CisgQVMvNDAwICAgICAgIFY1UjJNMAorIFN5bWJpYW4gICAgICA5LjEKKyBXaW5kb3dzIENFICAgPworIFRQRiAgICAgICAgICA/CisKKyBXaGVuIHdyaXRpbmcgY29kZSAobW9zdGx5IGZvciBnZW5lcmF0aW5nIHN0dWZmIGluY2x1ZGVkIGluIHJlbGVhc2UgdGFyYmFsbHMpCisgd2UgdXNlIGEgZmV3ICJidWlsZCB0b29scyIgYW5kIHdlIG1ha2Ugc3VyZSB0aGF0IHdlIHJlbWFpbiBmdW5jdGlvbmFsIHdpdGgKKyB0aGVzZSB2ZXJzaW9uczoKKworIEdOVSBMaWJ0b29sICAxLjQuMgorIEdOVSBBdXRvY29uZiAyLjU3CisgR05VIEF1dG9tYWtlIDEuNyAod2UgY3VycmVudGx5IGF2b2lkIDEuMTAgZHVlIHRvIFNvbGFyaXMtcmVsYXRlZCBidWdzKQorIEdOVSBNNCAgICAgICAxLjQKKyBwZXJsICAgICAgICAgNS4wMDQKKyByb2ZmaXQgICAgICAgMC41CisgZ3JvZmYgICAgICAgID8gKGFueSB2ZXJzaW9uIHRoYXQgc3VwcG9ydHMgImdyb2ZmIC1UcHMgLW1hbiBbaW5dIFtvdXRdIikKKyBwczJwZGYgKGdzKSAgPworCitXaW5kb3dzIHZzIFVuaXgKKz09PT09PT09PT09PT09PQorCisgVGhlcmUgYXJlIGEgZmV3IGRpZmZlcmVuY2VzIGluIGhvdyB0byBwcm9ncmFtIGN1cmwgdGhlIHVuaXggd2F5IGNvbXBhcmVkIHRvCisgdGhlIFdpbmRvd3Mgd2F5LiBUaGUgZm91ciBwZXJoYXBzIG1vc3Qgbm90YWJsZSBkZXRhaWxzIGFyZToKKworIDEuIERpZmZlcmVudCBmdW5jdGlvbiBuYW1lcyBmb3Igc29ja2V0IG9wZXJhdGlvbnMuCisKKyAgIEluIGN1cmwsIHRoaXMgaXMgc29sdmVkIHdpdGggZGVmaW5lcyBhbmQgbWFjcm9zLCBzbyB0aGF0IHRoZSBzb3VyY2UgbG9va3MKKyAgIHRoZSBzYW1lIGF0IGFsbCBwbGFjZXMgZXhjZXB0IGZvciB0aGUgaGVhZGVyIGZpbGUgdGhhdCBkZWZpbmVzIHRoZW0uIFRoZQorICAgbWFjcm9zIGluIHVzZSBhcmUgc2Nsb3NlKCksIHNyZWFkKCkgYW5kIHN3cml0ZSgpLgorCisgMi4gV2luZG93cyByZXF1aXJlcyBhIGNvdXBsZSBvZiBpbml0IGNhbGxzIGZvciB0aGUgc29ja2V0IHN0dWZmLgorCisgICBUaGF0J3MgdGFrZW4gY2FyZSBvZiBieSB0aGUgY3VybF9nbG9iYWxfaW5pdCgpIGNhbGwsIGJ1dCBpZiBvdGhlciBsaWJzIGFsc28KKyAgIGRvIGl0IGV0YyB0aGVyZSBtaWdodCBiZSByZWFzb25zIGZvciBhcHBsaWNhdGlvbnMgdG8gYWx0ZXIgdGhhdCBiZWhhdmlvdXIuCisKKyAzLiBUaGUgZmlsZSBkZXNjcmlwdG9ycyBmb3IgbmV0d29yayBjb21tdW5pY2F0aW9uIGFuZCBmaWxlIG9wZXJhdGlvbnMgYXJlCisgICAgbm90IGVhc2lseSBpbnRlcmNoYW5nZWFibGUgYXMgaW4gdW5peC4KKworICAgV2UgYXZvaWQgdGhpcyBieSBub3QgdHJ5aW5nIGFueSBmdW5ueSB0cmlja3Mgb24gZmlsZSBkZXNjcmlwdG9ycy4KKworIDQuIFdoZW4gd3JpdGluZyBkYXRhIHRvIHN0ZG91dCwgV2luZG93cyBtYWtlcyBlbmQtb2YtbGluZXMgdGhlIERPUyB3YXksIHRodXMKKyAgICBkZXN0cm95aW5nIGJpbmFyeSBkYXRhLCBhbHRob3VnaCB5b3UgZG8gd2FudCB0aGF0IGNvbnZlcnNpb24gaWYgaXQgaXMKKyAgICB0ZXh0IGNvbWluZyB0aHJvdWdoLi4uIChzaWdoKQorCisgICBXZSBzZXQgc3Rkb3V0IHRvIGJpbmFyeSB1bmRlciB3aW5kb3dzCisKKyBJbnNpZGUgdGhlIHNvdXJjZSBjb2RlLCBXZSBtYWtlIGFuIGVmZm9ydCB0byBhdm9pZCAnI2lmZGVmIFtZb3VyIE9TXScuIEFsbAorIGNvbmRpdGlvbmFscyB0aGF0IGRlYWwgd2l0aCBmZWF0dXJlcyAqc2hvdWxkKiBpbnN0ZWFkIGJlIGluIHRoZSBmb3JtYXQKKyAnI2lmZGVmIEhBVkVfVEhBVF9XRUlSRF9GVU5DVElPTicuIFNpbmNlIFdpbmRvd3MgY2FuJ3QgcnVuIGNvbmZpZ3VyZSBzY3JpcHRzLAorIHdlIG1haW50YWluIHR3byBjdXJsX2NvbmZpZy13aW4zMi5oIGZpbGVzIChvbmUgaW4gbGliLyBhbmQgb25lIGluIHNyYy8pIHRoYXQKKyBhcmUgc3VwcG9zZWQgdG8gbG9vayBleGFjdGx5IGFzIGEgY3VybF9jb25maWcuaCBmaWxlIHdvdWxkIGhhdmUgbG9va2VkIGxpa2Ugb24KKyBhIFdpbmRvd3MgbWFjaGluZSEKKworIEdlbmVyYWxseSBzcGVha2luZzogYWx3YXlzIHJlbWVtYmVyIHRoYXQgdGhpcyB3aWxsIGJlIGNvbXBpbGVkIG9uIGRvemVucyBvZgorIG9wZXJhdGluZyBzeXN0ZW1zLiBEb24ndCB3YWxrIG9uIHRoZSBlZGdlLgorCitMaWJyYXJ5Cis9PT09PT09CisKKyBUaGVyZSBhcmUgcGxlbnR5IG9mIGVudHJ5IHBvaW50cyB0byB0aGUgbGlicmFyeSwgbmFtZWx5IGVhY2ggcHVibGljbHkgZGVmaW5lZAorIGZ1bmN0aW9uIHRoYXQgbGliY3VybCBvZmZlcnMgdG8gYXBwbGljYXRpb25zLiBBbGwgb2YgdGhvc2UgZnVuY3Rpb25zIGFyZQorIHJhdGhlciBzbWFsbCBhbmQgZWFzeS10by1mb2xsb3cuIEFsbCB0aGUgb25lcyBwcmVmaXhlZCB3aXRoICdjdXJsX2Vhc3knIGFyZQorIHB1dCBpbiB0aGUgbGliL2Vhc3kuYyBmaWxlLgorCisgY3VybF9nbG9iYWxfaW5pdF8oKSBhbmQgY3VybF9nbG9iYWxfY2xlYW51cCgpIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlCisgYXBwbGljYXRpb24gdG8gaW5pdGlhbGl6ZSBhbmQgY2xlYW4gdXAgZ2xvYmFsIHN0dWZmIGluIHRoZSBsaWJyYXJ5LiBBcyBvZgorIHRvZGF5LCBpdCBjYW4gaGFuZGxlIHRoZSBnbG9iYWwgU1NMIGluaXRpbmcgaWYgU1NMIGlzIGVuYWJsZWQgYW5kIGl0IGNhbiBpbml0CisgdGhlIHNvY2tldCBsYXllciBvbiB3aW5kb3dzIG1hY2hpbmVzLiBsaWJjdXJsIGl0c2VsZiBoYXMgbm8gImdsb2JhbCIgc2NvcGUuCisKKyBBbGwgcHJpbnRmKCktc3R5bGUgZnVuY3Rpb25zIHVzZSB0aGUgc3VwcGxpZWQgY2xvbmVzIGluIGxpYi9tcHJpbnRmLmMuIFRoaXMKKyBtYWtlcyBzdXJlIHdlIHN0YXkgYWJzb2x1dGVseSBwbGF0Zm9ybSBpbmRlcGVuZGVudC4KKworIGN1cmxfZWFzeV9pbml0KCkgYWxsb2NhdGVzIGFuIGludGVybmFsIHN0cnVjdCBhbmQgbWFrZXMgc29tZSBpbml0aWFsaXphdGlvbnMuCisgVGhlIHJldHVybmVkIGhhbmRsZSBkb2VzIG5vdCByZXZlYWwgaW50ZXJuYWxzLiBUaGlzIGlzIHRoZSAnU2Vzc2lvbkhhbmRsZScKKyBzdHJ1Y3Qgd2hpY2ggd29ya3MgYXMgYW4gImFuY2hvciIgc3RydWN0IGZvciBhbGwgY3VybF9lYXN5IGZ1bmN0aW9ucy4gQWxsCisgY29ubmVjdGlvbnMgcGVyZm9ybWVkIHdpbGwgZ2V0IGNvbm5lY3Qtc3BlY2lmaWMgZGF0YSBhbGxvY2F0ZWQgdGhhdCBzaG91bGQgYmUKKyB1c2VkIGZvciB0aGluZ3MgcmVsYXRlZCB0byBwYXJ0aWN1bGFyIGNvbm5lY3Rpb25zL3JlcXVlc3RzLgorCisgY3VybF9lYXN5X3NldG9wdCgpIHRha2VzIHRocmVlIGFyZ3VtZW50cywgd2hlcmUgdGhlIG9wdGlvbiBzdHVmZiBtdXN0IGJlCisgcGFzc2VkIGluIHBhaXJzOiB0aGUgcGFyYW1ldGVyLUlEIGFuZCB0aGUgcGFyYW1ldGVyLXZhbHVlLiBUaGUgbGlzdCBvZgorIG9wdGlvbnMgaXMgZG9jdW1lbnRlZCBpbiB0aGUgbWFuIHBhZ2UuIFRoaXMgZnVuY3Rpb24gbWFpbmx5IHNldHMgdGhpbmdzIGluCisgdGhlICdTZXNzaW9uSGFuZGxlJyBzdHJ1Y3QuCisKKyBjdXJsX2Vhc3lfcGVyZm9ybSgpIGRvZXMgYSB3aG9sZSBsb3Qgb2YgdGhpbmdzOgorCisgSXQgc3RhcnRzIG9mZiBpbiB0aGUgbGliL2Vhc3kuYyBmaWxlIGJ5IGNhbGxpbmcgQ3VybF9wZXJmb3JtKCkgYW5kIHRoZSBtYWluCisgd29yayB0aGVuIGNvbnRpbnVlcyBpbiBsaWIvdXJsLmMuIFRoZSBmbG93IGNvbnRpbnVlcyB3aXRoIGEgY2FsbCB0bworIEN1cmxfY29ubmVjdCgpIHRvIGNvbm5lY3QgdG8gdGhlIHJlbW90ZSBzaXRlLgorCisgbyBDdXJsX2Nvbm5lY3QoKQorCisgICAuLi4gYW5hbHl6ZXMgdGhlIFVSTCwgaXQgc2VwYXJhdGVzIHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cyBhbmQgY29ubmVjdHMgdG8KKyAgIHRoZSByZW1vdGUgaG9zdC4gVGhpcyBtYXkgaW52b2x2ZSB1c2luZyBhIHByb3h5IGFuZC9vciB1c2luZyBTU0wuIFRoZQorICAgQ3VybF9yZXNvbHYoKSBmdW5jdGlvbiBpbiBsaWIvaG9zdGlwLmMgaXMgdXNlZCBmb3IgbG9va2luZyB1cCBob3N0IG5hbWVzCisgICAoaXQgZG9lcyB0aGVuIHVzZSB0aGUgcHJvcGVyIHVuZGVybHlpbmcgbWV0aG9kLCB3aGljaCBtYXkgdmFyeSBiZXR3ZWVuCisgICBwbGF0Zm9ybXMgYW5kIGJ1aWxkcykuCisKKyAgIFdoZW4gQ3VybF9jb25uZWN0IGlzIGRvbmUsIHdlIGFyZSBjb25uZWN0ZWQgdG8gdGhlIHJlbW90ZSBzaXRlLiBUaGVuIGl0IGlzCisgICB0aW1lIHRvIHRlbGwgdGhlIHNlcnZlciB0byBnZXQgYSBkb2N1bWVudC9maWxlLiBDdXJsX2RvKCkgYXJyYW5nZXMgdGhpcy4KKworICAgVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoZXJlJ3MgYW4gYWxsb2NhdGVkIGFuZCBpbml0aWF0ZWQgJ2Nvbm5lY3RkYXRhJworICAgc3RydWN0IHRoYXQgaXMgdXNlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNvbm5lY3Rpb24gb25seSAoYWx0aG91Z2ggdGhlcmUgbWF5CisgICBiZSBzZXZlcmFsIHJlcXVlc3RzIHBlcmZvcm1lZCBvbiB0aGUgc2FtZSBjb25uZWN0KS4gQSBidW5jaCBvZiB0aGluZ3MgYXJlCisgICBpbml0ZWQvaW5oZXJpdGVkIGZyb20gdGhlIFNlc3Npb25IYW5kbGUgc3RydWN0LgorCisgbyBDdXJsX2RvKCkKKworICAgQ3VybF9kbygpIG1ha2VzIHN1cmUgdGhlIHByb3BlciBwcm90b2NvbC1zcGVjaWZpYyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZQorICAgZnVuY3Rpb25zIGFyZSBuYW1lZCBhZnRlciB0aGUgcHJvdG9jb2xzIHRoZXkgaGFuZGxlLiBDdXJsX2Z0cCgpLAorICAgQ3VybF9odHRwKCksIEN1cmxfZGljdCgpLCBldGMuIFRoZXkgYWxsIHJlc2lkZSBpbiB0aGVpciByZXNwZWN0aXZlIGZpbGVzCisgICAoZnRwLmMsIGh0dHAuYyBhbmQgZGljdC5jKS4gSFRUUFMgaXMgaGFuZGxlZCBieSBDdXJsX2h0dHAoKSBhbmQgRlRQUyBieQorICAgQ3VybF9mdHAoKS4KKworICAgVGhlIHByb3RvY29sLXNwZWNpZmljIGZ1bmN0aW9ucyBvZiBjb3Vyc2UgZGVhbCB3aXRoIHByb3RvY29sLXNwZWNpZmljCisgICBuZWdvdGlhdGlvbnMgYW5kIHNldHVwLiBUaGV5IGhhdmUgYWNjZXNzIHRvIHRoZSBDdXJsX3NlbmRmKCkgKGZyb20KKyAgIGxpYi9zZW5kZi5jKSBmdW5jdGlvbiB0byBzZW5kIHByaW50Zi1zdHlsZSBmb3JtYXR0ZWQgZGF0YSB0byB0aGUgcmVtb3RlCisgICBob3N0IGFuZCB3aGVuIHRoZXkncmUgcmVhZHkgdG8gbWFrZSB0aGUgYWN0dWFsIGZpbGUgdHJhbnNmZXIgdGhleSBjYWxsIHRoZQorICAgQ3VybF9UcmFuc2ZlcigpIGZ1bmN0aW9uIChpbiBsaWIvdHJhbnNmZXIuYykgdG8gc2V0dXAgdGhlIHRyYW5zZmVyIGFuZAorICAgcmV0dXJucy4KKworICAgSWYgdGhpcyBETyBmdW5jdGlvbiBmYWlscyBhbmQgdGhlIGNvbm5lY3Rpb24gaXMgYmVpbmcgcmUtdXNlZCwgbGliY3VybCB3aWxsCisgICB0aGVuIGNsb3NlIHRoaXMgY29ubmVjdGlvbiwgc2V0dXAgYSBuZXcgY29ubmVjdGlvbiBhbmQgcmUtaXNzdWUgdGhlIERPCisgICByZXF1ZXN0IG9uIHRoYXQuIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gYmUgcGVyZmVjdGx5IHN1cmUgdGhhdAorICAgd2UgaGF2ZSBkaXNjb3ZlcmVkIGEgZGVhZCBjb25uZWN0aW9uIGJlZm9yZSB0aGUgRE8gZnVuY3Rpb24gYW5kIHRodXMgd2UKKyAgIG1pZ2h0IHdyb25nbHkgYmUgcmUtdXNpbmcgYSBjb25uZWN0aW9uIHRoYXQgd2FzIGNsb3NlZCBieSB0aGUgcmVtb3RlIHBlZXIuCisKKyAgIFNvbWUgdGltZSBkdXJpbmcgdGhlIERPIGZ1bmN0aW9uLCB0aGUgQ3VybF9zZXR1cF90cmFuc2ZlcigpIGZ1bmN0aW9uIG11c3QKKyAgIGJlIGNhbGxlZCB3aXRoIHNvbWUgYmFzaWMgaW5mbyBhYm91dCB0aGUgdXBjb21pbmcgdHJhbnNmZXI6IHdoYXQgc29ja2V0KHMpCisgICB0byByZWFkL3dyaXRlIGFuZCB0aGUgZXhwZWN0ZWQgZmlsZSB0cmFuc2ZlciBzaXplcyAoaWYga25vd24pLgorCisgbyBUcmFuc2ZlcigpCisKKyAgIEN1cmxfcGVyZm9ybSgpIHRoZW4gY2FsbHMgVHJhbnNmZXIoKSBpbiBsaWIvdHJhbnNmZXIuYyB0aGF0IHBlcmZvcm1zIHRoZQorICAgZW50aXJlIGZpbGUgdHJhbnNmZXIuCisKKyAgIER1cmluZyB0cmFuc2ZlciwgdGhlIHByb2dyZXNzIGZ1bmN0aW9ucyBpbiBsaWIvcHJvZ3Jlc3MuYyBhcmUgY2FsbGVkIGF0IGEKKyAgIGZyZXF1ZW50IGludGVydmFsIChvciBhdCB0aGUgdXNlcidzIGNob2ljZSwgYSBzcGVjaWZpZWQgY2FsbGJhY2sgbWlnaHQgZ2V0CisgICBjYWxsZWQpLiBUaGUgc3BlZWRjaGVjayBmdW5jdGlvbnMgaW4gbGliL3NwZWVkY2hlY2suYyBhcmUgYWxzbyB1c2VkIHRvCisgICB2ZXJpZnkgdGhhdCB0aGUgdHJhbnNmZXIgaXMgYXMgZmFzdCBhcyByZXF1aXJlZC4KKworIG8gQ3VybF9kb25lKCkKKworICAgQ2FsbGVkIGFmdGVyIGEgdHJhbnNmZXIgaXMgZG9uZS4gVGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGV2ZXJ5dGhpbmcKKyAgIHRoYXQgaGFzIHRvIGJlIGRvbmUgYWZ0ZXIgYSB0cmFuc2Zlci4gVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBsZWF2ZQorICAgbWF0dGVycyBpbiBhIHN0YXRlIHNvIHRoYXQgQ3VybF9kbygpIHNob3VsZCBiZSBwb3NzaWJsZSB0byBjYWxsIGFnYWluIG9uCisgICB0aGUgc2FtZSBjb25uZWN0aW9uIChpbiBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBjYXNlKS4gSXQgbWlnaHQgYWxzbyBzb29uCisgICBiZSBjbG9zZWQgd2l0aCBDdXJsX2Rpc2Nvbm5lY3QoKS4KKworIG8gQ3VybF9kaXNjb25uZWN0KCkKKworICAgV2hlbiBkb2luZyBub3JtYWwgY29ubmVjdGlvbnMgYW5kIHRyYW5zZmVycywgbm8gb25lIGV2ZXIgdHJpZXMgdG8gY2xvc2UgYW55CisgICBjb25uZWN0aW9ucyBzbyB0aGlzIGlzIG5vdCBub3JtYWxseSBjYWxsZWQgd2hlbiBjdXJsX2Vhc3lfcGVyZm9ybSgpIGlzCisgICB1c2VkLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCB3aGVuIHdlIGFyZSBjZXJ0YWluIHRoYXQgbm8gbW9yZSB0cmFuc2ZlcnMKKyAgIGlzIGdvaW5nIHRvIGJlIG1hZGUgb24gdGhlIGNvbm5lY3Rpb24uIEl0IGNhbiBiZSBhbHNvIGNsb3NlZCBieSBmb3JjZSwgb3IKKyAgIGl0IGNhbiBiZSBjYWxsZWQgdG8gbWFrZSBzdXJlIHRoYXQgbGliY3VybCBkb2Vzbid0IGtlZXAgdG9vIG1hbnkKKyAgIGNvbm5lY3Rpb25zIGFsaXZlIGF0IHRoZSBzYW1lIHRpbWUgKHRoZXJlJ3MgYSBkZWZhdWx0IGFtb3VudCBvZiA1IGJ1dCB0aGF0CisgICBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZSBDVVJMT1BUX01BWENPTk5FQ1RTIG9wdGlvbikuCisKKyAgIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIGFsbCByZXNvdXJjZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlCisgICBjb25uZWN0aW9uLgorCisgQ3VybF9wZXJmb3JtKCkgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgbWFpbiAiY29ubmVjdCAtIGRvIC0gdHJhbnNmZXIgLQorIGRvbmUiIGxvb3AuIEl0IGxvb3BzIGlmIHRoZXJlJ3MgYSBMb2NhdGlvbjogdG8gZm9sbG93LgorCisgV2hlbiBjb21wbGV0ZWQsIHRoZSBjdXJsX2Vhc3lfY2xlYW51cCgpIHNob3VsZCBiZSBjYWxsZWQgdG8gZnJlZSB1cCB1c2VkCisgcmVzb3VyY2VzLiBJdCBydW5zIEN1cmxfZGlzY29ubmVjdCgpIG9uIGFsbCBvcGVuIGNvbm5lY3RvbnMuCisKKyBBIHF1aWNrIHJvdW5kdXAgb24gaW50ZXJuYWwgZnVuY3Rpb24gc2VxdWVuY2VzIChtYW55IG9mIHRoZXNlIGNhbGwKKyBwcm90b2NvbC1zcGVjaWZpYyBmdW5jdGlvbi1wb2ludGVycyk6CisKKyAgQ3VybF9jb25uZWN0IC0gY29ubmVjdHMgdG8gYSByZW1vdGUgc2l0ZSBhbmQgZG9lcyBpbml0aWFsIGNvbm5lY3QgZmx1ZmYKKyAgIFRoaXMgYWxzbyBjaGVja3MgZm9yIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gdG8gdGhlIHJlcXVlc3RlZCBzaXRlIGFuZCB1c2VzCisgICB0aGF0IG9uZSBpZiBpdCBpcyBwb3NzaWJsZS4KKworICAgQ3VybF9kbyAtIHN0YXJ0cyBhIHRyYW5zZmVyCisgICAgQ3VybF9oYW5kbGVyOjpkb19pdCgpIC0gdHJhbnNmZXJzIGRhdGEKKyAgIEN1cmxfZG9uZSAtIGVuZHMgYSB0cmFuc2ZlcgorCisgIEN1cmxfZGlzY29ubmVjdCAtIGRpc2Nvbm5lY3RzIGZyb20gYSByZW1vdGUgc2l0ZS4gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUKKyAgIGRpc2Nvbm5lY3QgaXMgcmVhbGx5IHJlcXVlc3RlZCwgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseSBoYXZlIHRvIGJlCisgICBleGFjdGx5IGFmdGVyIGN1cmxfZG9uZSBpbiBjYXNlIHdlIHdhbnQgdG8ga2VlcCB0aGUgY29ubmVjdGlvbiBvcGVuIGZvcgorICAgYSB3aGlsZS4KKworIEhUVFAoUykKKworIEhUVFAgb2ZmZXJzIGEgbG90IGFuZCBpcyB0aGUgcHJvdG9jb2wgaW4gY3VybCB0aGF0IHVzZXMgdGhlIG1vc3QgbGluZXMgb2YKKyBjb2RlLiBUaGVyZSBpcyBhIHNwZWNpYWwgZmlsZSAobGliL2Zvcm1kYXRhLmMpIHRoYXQgb2ZmZXJzIGFsbCB0aGUgbXVsdGlwYXJ0CisgcG9zdCBmdW5jdGlvbnMuCisKKyBiYXNlNjQtZnVuY3Rpb25zIGZvciB1c2VyK3Bhc3N3b3JkIHN0dWZmIChhbmQgbW9yZSkgaXMgaW4gKGxpYi9iYXNlNjQuYykgYW5kCisgYWxsIGZ1bmN0aW9ucyBmb3IgcGFyc2luZyBhbmQgc2VuZGluZyBjb29raWVzIGFyZSBmb3VuZCBpbiAobGliL2Nvb2tpZS5jKS4KKworIEhUVFBTIHVzZXMgaW4gYWxtb3N0IGV2ZXJ5IG1lYW5zIHRoZSBzYW1lIHByb2NlZHVyZSBhcyBIVFRQLCB3aXRoIG9ubHkgdHdvCisgZXhjZXB0aW9uczogdGhlIGNvbm5lY3QgcHJvY2VkdXJlIGlzIGRpZmZlcmVudCBhbmQgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gcmVhZAorIG9yIHdyaXRlIGZyb20gdGhlIHNvY2tldCBpcyBkaWZmZXJlbnQsIGFsdGhvdWdoIHRoZSBsYXR0ZXIgZmFjdCBpcyBoaWRkZW4gaW4KKyB0aGUgc291cmNlIGJ5IHRoZSB1c2Ugb2YgQ3VybF9yZWFkKCkgZm9yIHJlYWRpbmcgYW5kIEN1cmxfd3JpdGUoKSBmb3Igd3JpdGluZworIGRhdGEgdG8gdGhlIHJlbW90ZSBzZXJ2ZXIuCisKKyBodHRwX2NodW5rcy5jIGNvbnRhaW5zIGZ1bmN0aW9ucyB0aGF0IHVuZGVyc3RhbmRzIEhUVFAgMS4xIGNodW5rZWQgdHJhbnNmZXIKKyBlbmNvZGluZy4KKworIEFuIGludGVyZXN0aW5nIGRldGFpbCB3aXRoIHRoZSBIVFRQKFMpIHJlcXVlc3QsIGlzIHRoZSBDdXJsX2FkZF9idWZmZXIoKQorIHNlcmllcyBvZiBmdW5jdGlvbnMgd2UgdXNlLiBUaGV5IGFwcGVuZCBkYXRhIHRvIG9uZSBzaW5nbGUgYnVmZmVyLCBhbmQgd2hlbgorIHRoZSBidWlsZGluZyBpcyBkb25lIHRoZSBlbnRpcmUgcmVxdWVzdCBpcyBzZW50IG9mZiBpbiBvbmUgc2luZ2xlIHdyaXRlLiBUaGlzCisgaXMgZG9uZSB0aGlzIHdheSB0byBvdmVyY29tZSBwcm9ibGVtcyB3aXRoIGZsYXdlZCBmaXJld2FsbHMgYW5kIGxhbWUgc2VydmVycy4KKworIEZUUAorCisgVGhlIEN1cmxfaWYyaXAoKSBmdW5jdGlvbiBjYW4gYmUgdXNlZCBmb3IgZ2V0dGluZyB0aGUgSVAgbnVtYmVyIG9mIGEKKyBzcGVjaWZpZWQgbmV0d29yayBpbnRlcmZhY2UsIGFuZCBpdCByZXNpZGVzIGluIGxpYi9pZjJpcC5jLgorCisgQ3VybF9mdHBzZW5kZigpIGlzIHVzZWQgZm9yIHNlbmRpbmcgRlRQIGNvbW1hbmRzIHRvIHRoZSByZW1vdGUgc2VydmVyLiBJdCB3YXMKKyBtYWRlIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gcHJldmVudCB1cyBwcm9ncmFtbWVycyBmcm9tIGZvcmdldHRpbmcgdGhhdCB0aGV5CisgbXVzdCBiZSBDUkxGIHRlcm1pbmF0ZWQuIFRoZXkgbXVzdCBhbHNvIGJlIHNlbnQgaW4gb25lIHNpbmdsZSB3cml0ZSgpIHRvIG1ha2UKKyBmaXJld2FsbHMgYW5kIHNpbWlsYXIgaGFwcHkuCisKKyBLZXJiZXJvcworCisgVGhlIGtlcmJlcm9zIHN1cHBvcnQgaXMgbWFpbmx5IGluIGxpYi9rcmI0LmMgYW5kIGxpYi9zZWN1cml0eS5jLgorCisgVEVMTkVUCisKKyBUZWxuZXQgaXMgaW1wbGVtZW50ZWQgaW4gbGliL3RlbG5ldC5jLgorCisgRklMRQorCisgVGhlIGZpbGU6Ly8gcHJvdG9jb2wgaXMgZGVhbHQgd2l0aCBpbiBsaWIvZmlsZS5jLgorCisgTERBUAorCisgRXZlcnl0aGluZyBMREFQIGlzIGluIGxpYi9sZGFwLmMgYW5kIGxpYi9vcGVubGRhcC5jCisKKyBHRU5FUkFMCisKKyBVUkwgZW5jb2RpbmcgYW5kIGRlY29kaW5nLCBjYWxsZWQgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgaW4gdGhlIHNvdXJjZSBjb2RlLAorIGlzIGZvdW5kIGluIGxpYi9lc2NhcGUuYy4KKworIFdoaWxlIHRyYW5zZmVycmluZyBkYXRhIGluIFRyYW5zZmVyKCkgYSBmZXcgZnVuY3Rpb25zIG1pZ2h0IGdldCB1c2VkLgorIGN1cmxfZ2V0ZGF0ZSgpIGluIGxpYi9wYXJzZWRhdGUuYyBpcyBmb3IgSFRUUCBkYXRlIGNvbXBhcmlzb25zIChhbmQgbW9yZSkuCisKKyBsaWIvZ2V0ZW52LmMgb2ZmZXJzIGN1cmxfZ2V0ZW52KCkgd2hpY2ggaXMgZm9yIHJlYWRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgaW4gYSBuZWF0IHBsYXRmb3JtIGluZGVwZW5kZW50IHdheS4gVGhhdCdzIHVzZWQgaW4gdGhlIGNsaWVudCwgYnV0IGFsc28gaW4KKyBsaWIvdXJsLmMgd2hlbiBjaGVja2luZyB0aGUgcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBOb3RlIHRoYXQgY29udHJhcnkKKyB0byB0aGUgbm9ybWFsIHVuaXggZ2V0ZW52KCksIHRoaXMgcmV0dXJucyBhbiBhbGxvY2F0ZWQgYnVmZmVyIHRoYXQgbXVzdCBiZQorIGZyZWUoKWVkIGFmdGVyIHVzZS4KKworIGxpYi9uZXRyYy5jIGhvbGRzIHRoZSAubmV0cmMgcGFyc2VyCisKKyBsaWIvdGltZXZhbC5jIGZlYXR1cmVzIHJlcGxhY2VtZW50IGZ1bmN0aW9ucyBmb3Igc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUKKyBnZXR0aW1lb2ZkYXkoKSBhbmQgYSBmZXcgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIHRpbWV2YWwgY29udmVyc2lvbnMuCisKKyBBIGZ1bmN0aW9uIG5hbWVkIGN1cmxfdmVyc2lvbigpIHRoYXQgcmV0dXJucyB0aGUgZnVsbCBjdXJsIHZlcnNpb24gc3RyaW5nIGlzCisgZm91bmQgaW4gbGliL3ZlcnNpb24uYy4KKworUGVyc2lzdGVudCBDb25uZWN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PQorCisgVGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBzdXBwb3J0IGluIGxpYmN1cmwgcmVxdWlyZXMgc29tZSBjb25zaWRlcmF0aW9ucyBvbgorIGhvdyB0byBkbyB0aGluZ3MgaW5zaWRlIG9mIHRoZSBsaWJyYXJ5LgorCisgbyBUaGUgJ1Nlc3Npb25IYW5kbGUnIHN0cnVjdCByZXR1cm5lZCBpbiB0aGUgY3VybF9lYXN5X2luaXQoKSBjYWxsIG11c3QgbmV2ZXIKKyAgIGhvbGQgY29ubmVjdGlvbi1vcmllbnRlZCBkYXRhLiBJdCBpcyBtZWFudCB0byBob2xkIHRoZSByb290IGRhdGEgYXMgd2VsbCBhcworICAgYWxsIHRoZSBvcHRpb25zIGV0YyB0aGF0IHRoZSBsaWJyYXJ5LXVzZXIgbWF5IGNob29zZS4KKyBvIFRoZSAnU2Vzc2lvbkhhbmRsZScgc3RydWN0IGhvbGRzIHRoZSAiY29ubmVjdGlvbiBjYWNoZSIgKGFuIGFycmF5IG9mCisgICBwb2ludGVycyB0byAnY29ubmVjdGRhdGEnIHN0cnVjdHMpLiBUaGVyZSdzIG9uZSBjb25uZWN0ZGF0YSBzdHJ1Y3QKKyAgIGFsbG9jYXRlZCBmb3IgZWFjaCBjb25uZWN0aW9uIHRoYXQgbGliY3VybCBrbm93cyBhYm91dC4gTm90ZSB0aGF0IHdoZW4geW91CisgICB1c2UgdGhlIG11bHRpIGludGVyZmFjZSwgdGhlIG11bHRpIGhhbmRsZSB3aWxsIGhvbGQgdGhlIGNvbm5lY3Rpb24gY2FjaGUKKyAgIGFuZCBub3QgdGhlIHBhcnRpY3VsYXIgZWFzeSBoYW5kbGUuIFRoaXMgb2YgY291cnNlIHRvIGFsbG93IGFsbCBlYXN5IGhhbmRsZXMKKyAgIGluIGEgbXVsdGkgc3RhY2sgdG8gYmUgYWJsZSB0byBzaGFyZSBhbmQgcmUtdXNlIGNvbm5lY3Rpb25zLgorIG8gVGhpcyBlbmFibGVzIHRoZSAnY3VybCBoYW5kbGUnIHRvIGJlIHJldXNlZCBvbiBzdWJzZXF1ZW50IHRyYW5zZmVycy4KKyBvIFdoZW4gd2UgYXJlIGFib3V0IHRvIHBlcmZvcm0gYSB0cmFuc2ZlciB3aXRoIGN1cmxfZWFzeV9wZXJmb3JtKCksIHdlIGZpcnN0CisgICBjaGVjayBmb3IgYW4gYWxyZWFkeSBleGlzdGluZyBjb25uZWN0aW9uIGluIHRoZSBjYWNoZSB0aGF0IHdlIGNhbiB1c2UsCisgICBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgbmV3IG9uZSBhbmQgYWRkIHRvIHRoZSBjYWNoZS4gSWYgdGhlIGNhY2hlIGlzIGZ1bGwKKyAgIGFscmVhZHkgd2hlbiB3ZSBhZGQgYSBuZXcgY29ubmVjdGlvbiwgd2UgY2xvc2Ugb25lIG9mIHRoZSBwcmVzZW50IG9uZXMuIFdlCisgICBzZWxlY3Qgd2hpY2ggb25lIHRvIGNsb3NlIGRlcGVuZGVudCBvbiB0aGUgY2xvc2UgcG9saWN5IHRoYXQgbWF5IGhhdmUgYmVlbgorICAgcHJldmlvdXNseSBzZXQuCisgbyBXaGVuIHRoZSB0cmFuc2ZlciBvcGVyYXRpb24gaXMgY29tcGxldGUsIHdlIHRyeSB0byBsZWF2ZSB0aGUgY29ubmVjdGlvbgorICAgb3Blbi4gUGFydGljdWxhciBvcHRpb25zIG1heSB0ZWxsIHVzIG5vdCB0bywgYW5kIHByb3RvY29scyBtYXkgc2lnbmFsCisgICBjbG9zdXJlIG9uIGNvbm5lY3Rpb25zIGFuZCB0aGVuIHdlIGRvbid0IGtlZXAgaXQgb3BlbiBvZiBjb3Vyc2UuCisgbyBXaGVuIGN1cmxfZWFzeV9jbGVhbnVwKCkgaXMgY2FsbGVkLCB3ZSBjbG9zZSBhbGwgc3RpbGwgb3BlbmVkIGNvbm5lY3Rpb25zLAorICAgdW5sZXNzIG9mIGNvdXJzZSB0aGUgbXVsdGkgaW50ZXJmYWNlICJvd25zIiB0aGUgY29ubmVjdGlvbnMuCisKKyBZb3UgZG8gcmVhbGl6ZSB0aGF0IHRoZSBjdXJsIGhhbmRsZSBtdXN0IGJlIHJlLXVzZWQgaW4gb3JkZXIgZm9yIHRoZQorIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgdG8gd29yay4KKworbXVsdGkgaW50ZXJmYWNlL25vbi1ibG9ja2luZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgV2UgbWFrZSBhbiBlZmZvcnQgdG8gcHJvdmlkZSBhIG5vbi1ibG9ja2luZyBpbnRlcmZhY2UgdG8gdGhlIGxpYnJhcnksIHRoZQorIG11bHRpIGludGVyZmFjZS4gVG8gbWFrZSB0aGF0IGludGVyZmFjZSB3b3JrIGFzIGdvb2QgYXMgcG9zc2libGUsIG5vCisgbG93LWxldmVsIGZ1bmN0aW9ucyB3aXRoaW4gbGliY3VybCBtdXN0IGJlIHdyaXR0ZW4gdG8gd29yayBpbiBhIGJsb2NraW5nCisgbWFubmVyLgorCisgT25lIG9mIHRoZSBwcmltYXJ5IHJlYXNvbnMgd2UgaW50cm9kdWNlZCBjLWFyZXMgc3VwcG9ydCB3YXMgdG8gYWxsb3cgdGhlIG5hbWUKKyByZXNvbHZlIHBoYXNlIHRvIGJlIHBlcmZlY3RseSBub24tYmxvY2tpbmcgYXMgd2VsbC4KKworIFRoZSB1bHRpbWF0ZSBnb2FsIGlzIHRvIHByb3ZpZGUgdGhlIGVhc3kgaW50ZXJmYWNlIHNpbXBseSBieSB3cmFwcGluZyB0aGUKKyBtdWx0aSBpbnRlcmZhY2UgZnVuY3Rpb25zIGFuZCB0aHVzIHRyZWF0IGV2ZXJ5dGhpbmcgaW50ZXJuYWxseSBhcyB0aGUgbXVsdGkKKyBpbnRlcmZhY2UgaXMgdGhlIHNpbmdsZSBpbnRlcmZhY2Ugd2UgaGF2ZS4KKworIFRoZSBGVFAgYW5kIHRoZSBTRlRQL1NDUCBwcm90b2NvbHMgYXJlIHRodXMgcGVyZmVjdCBleGFtcGxlcyBvZiBob3cgd2UgYWRhcHQKKyBhbmQgYWRqdXN0IHRoZSBjb2RlIHRvIGFsbG93IG5vbi1ibG9ja2luZyBvcGVyYXRpb25zIGV2ZW4gb24gbXVsdGktc3RhZ2UKKyBwcm90b2NvbHMuIFRoZXkgYXJlIGJ1aWx0IGFyb3VuZCBzdGF0ZSBtYWNoaW5lcyB0aGF0IHJldHVybiB3aGVuIHRoZXkgY291bGQKKyBibG9jayB3YWl0aW5nIGZvciBkYXRhLiAgVGhlIERJQ1QsIExEQVAgYW5kIFRFTE5FVCBwcm90b2NvbHMgYXJlIGNyYXBweQorIGV4YW1wbGVzIGFuZCB0aGV5IGFyZSBzdWJqZWN0IGZvciByZXdyaXRlIGluIHRoZSBmdXR1cmUgdG8gYmV0dGVyIGZpdCB0aGUKKyBsaWJjdXJsIHByb3RvY29sIGZhbWlseS4KKworU1NMIGxpYnJhcmllcworPT09PT09PT09PT09PQorCisgT3JpZ2luYWxseSBsaWJjdXJsIHN1cHBvcnRlZCBTU0xlYXkgZm9yIFNTTC9UTFMgdHJhbnNwb3J0cywgYnV0IHRoYXQgd2FzIHRoZW4KKyBleHRlbmRlZCB0byBpdHMgc3VjY2Vzc29yIE9wZW5TU0wgYnV0IGhhcyBzaW5jZSBhbHNvIGJlZW4gZXh0ZW5kZWQgdG8gc2V2ZXJhbAorIG90aGVyIFNTTC9UTFMgbGlicmFyaWVzIGFuZCB3ZSBleHBlY3QgYW5kIGhvcGUgdG8gZnVydGhlciBleHRlbmQgdGhlIHN1cHBvcnQKKyBpbiBmdXR1cmUgbGliY3VybCB2ZXJzaW9ucy4KKworIFRvIGRlYWwgd2l0aCB0aGlzIGludGVybmFsbHkgaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlLCB3ZSBoYXZlIGEgZ2VuZXJpYyBTU0wKKyBmdW5jdGlvbiBBUEkgYXMgcHJvdmlkZWQgYnkgdGhlIHNzbGdlbi5bY2hdIHN5c3RlbSwgYW5kIHRoZXkgYXJlIHRoZSBvbmx5IFNTTAorIGZ1bmN0aW9ucyB3ZSBtdXN0IHVzZSBmcm9tIHdpdGhpbiBsaWJjdXJsLiBzc2xnZW4gaXMgdGhlbiBjcmFmdGVkIHRvIHVzZSB0aGUKKyBhcHByb3ByaWF0ZSBsb3dlci1sZXZlbCBmdW5jdGlvbiBjYWxscyB0byB3aGF0ZXZlciBTU0wgbGlicmFyeSB0aGF0IGlzIGluCisgdXNlLgorCitMaWJyYXJ5IFN5bWJvbHMKKz09PT09PT09PT09PT09PQorCisgQWxsIHN5bWJvbHMgdXNlZCBpbnRlcm5hbGx5IGluIGxpYmN1cmwgbXVzdCB1c2UgYSAnQ3VybF8nIHByZWZpeCBpZiB0aGV5J3JlCisgdXNlZCBpbiBtb3JlIHRoYW4gYSBzaW5nbGUgZmlsZS4gU2luZ2xlLWZpbGUgc3ltYm9scyBtdXN0IGJlIG1hZGUgc3RhdGljLgorIFB1YmxpYyAoImV4cG9ydGVkIikgc3ltYm9scyBtdXN0IHVzZSBhICdjdXJsXycgcHJlZml4LiAoVGhlcmUgYXJlIGV4Y2VwdGlvbnMsCisgYnV0IHRoZXkgYXJlIHRvIGJlIGNoYW5nZWQgdG8gZm9sbG93IHRoaXMgcGF0dGVybiBpbiBmdXR1cmUgdmVyc2lvbnMuKSBQdWJsaWMKKyBBUEkgZnVuY3Rpb25zIGFyZSBtYXJrZWQgd2l0aCBDVVJMX0VYVEVSTiBpbiB0aGUgcHVibGljIGhlYWRlciBmaWxlcyBzbyB0aGF0CisgYWxsIG90aGVycyBjYW4gYmUgaGlkZGVuIG9uIHBsYXRmb3JtcyB3aGVyZSB0aGlzIGlzIHBvc3NpYmxlLgorCitSZXR1cm4gQ29kZXMgYW5kIEluZm9ybWF0aW9uYWxzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyBJJ3ZlIG1hZGUgdGhpbmdzIHNpbXBsZS4gQWxtb3N0IGV2ZXJ5IGZ1bmN0aW9uIGluIGxpYmN1cmwgcmV0dXJucyBhIENVUkxjb2RlLAorIHRoYXQgbXVzdCBiZSBDVVJMRV9PSyBpZiBldmVyeXRoaW5nIGlzIE9LIG9yIG90aGVyd2lzZSBhIHN1aXRhYmxlIGVycm9yIGNvZGUKKyBhcyB0aGUgY3VybC9jdXJsLmggaW5jbHVkZSBmaWxlIGRlZmluZXMuIFRoZSB2ZXJ5IHNwb3QgdGhhdCBkZXRlY3RzIGFuIGVycm9yCisgbXVzdCB1c2UgdGhlIEN1cmxfZmFpbGYoKSBmdW5jdGlvbiB0byBzZXQgdGhlIGh1bWFuLXJlYWRhYmxlIGVycm9yCisgZGVzY3JpcHRpb24uCisKKyBJbiBhaWRpbmcgdGhlIHVzZXIgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFuZCB0byBkZWJ1ZyBjdXJsIHVzYWdlLCB3ZQorIG11c3Qgc3VwcGx5IGEgZmFpciBhbW91bnQgb2YgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyBieSB1c2luZyB0aGUgQ3VybF9pbmZvZigpCisgZnVuY3Rpb24uIFRob3NlIG1lc3NhZ2VzIGFyZSBvbmx5IGRpc3BsYXllZCB3aGVuIHRoZSB1c2VyIGV4cGxpY2l0bHkgYXNrcyBmb3IKKyB0aGVtLiBUaGV5IGFyZSBiZXN0IHVzZWQgd2hlbiByZXZlYWxpbmcgaW5mb3JtYXRpb24gdGhhdCBpc24ndCBvdGhlcndpc2UKKyBvYnZpb3VzLgorCitBUEkvQUJJCis9PT09PT09CisKKyBXZSBtYWtlIGFuIGVmZm9ydCB0byBub3QgZXhwb3J0IG9yIHNob3cgaW50ZXJuYWxzIG9yIGhvdyBpbnRlcm5hbHMgd29yaywgYXMKKyB0aGF0IG1ha2VzIGl0IGVhc2llciB0byBrZWVwIGEgc29saWQgQVBJL0FCSSBvdmVyIHRpbWUuIFNlZSBkb2NzL2xpYmN1cmwvQUJJCisgZm9yIG91ciBwcm9taXNlIHRvIHVzZXJzLgorCitDbGllbnQKKz09PT09PQorCisgbWFpbigpIHJlc2lkZXMgaW4gc3JjL21haW4uYyB0b2dldGhlciB3aXRoIG1vc3Qgb2YgdGhlIGNsaWVudCBjb2RlLgorCisgc3JjL2h1Z2VoZWxwLmMgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgdGhlIG1raGVscC5wbCBwZXJsIHNjcmlwdCB0bworIGRpc3BsYXkgdGhlIGNvbXBsZXRlICJtYW51YWwiIGFuZCB0aGUgc3JjL3VybGdsb2IuYyBmaWxlIGhvbGRzIHRoZSBmdW5jdGlvbnMKKyB1c2VkIGZvciB0aGUgVVJMLSJnbG9iYmluZyIgc3VwcG9ydC4gR2xvYmJpbmcgaW4gdGhlIHNlbnNlIHRoYXQgdGhlIHt9IGFuZCBbXQorIGV4cGFuc2lvbiBzdHVmZiBpcyB0aGVyZS4KKworIFRoZSBjbGllbnQgbW9zdGx5IG1lc3NlcyBhcm91bmQgdG8gc2V0dXAgaXRzICdjb25maWcnIHN0cnVjdCBwcm9wZXJseSwgdGhlbgorIGl0IGNhbGxzIHRoZSBjdXJsX2Vhc3lfKigpIGZ1bmN0aW9ucyBvZiB0aGUgbGlicmFyeSBhbmQgd2hlbiBpdCBnZXRzIGJhY2sKKyBjb250cm9sIGFmdGVyIHRoZSBjdXJsX2Vhc3lfcGVyZm9ybSgpIGl0IGNsZWFucyB1cCB0aGUgbGlicmFyeSwgY2hlY2tzIHN0YXR1cworIGFuZCBleGl0cy4KKworIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBkb25lLCB0aGUgb3VyV3JpdGVPdXQoKSBmdW5jdGlvbiBpbiBzcmMvd3JpdGVvdXQuYyBtYXkKKyBiZSBjYWxsZWQgdG8gcmVwb3J0IGFib3V0IHRoZSBvcGVyYXRpb24uIFRoYXQgZnVuY3Rpb24gaXMgdXNpbmcgdGhlCisgY3VybF9lYXN5X2dldGluZm8oKSBmdW5jdGlvbiB0byBleHRyYWN0IHVzZWZ1bCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjdXJsCisgc2Vzc2lvbi4KKworIFJlY2VudCB2ZXJzaW9ucyBtYXkgbG9vcCBhbmQgZG8gYWxsIHRoaXMgc2V2ZXJhbCB0aW1lcyBpZiBtYW55IFVSTHMgd2VyZQorIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGNvbmZpZyBmaWxlLgorCitNZW1vcnkgRGVidWdnaW5nCis9PT09PT09PT09PT09PT09CisKKyBUaGUgZmlsZSBsaWIvbWVtZGVidWcuYyBjb250YWlucyBkZWJ1Zy12ZXJzaW9ucyBvZiBhIGZldyBmdW5jdGlvbnMuIEZ1bmN0aW9ucworIHN1Y2ggYXMgbWFsbG9jLCBmcmVlLCBmb3BlbiwgZmNsb3NlLCBldGMgdGhhdCBzb21laG93IGRlYWwgd2l0aCByZXNvdXJjZXMKKyB0aGF0IG1pZ2h0IGdpdmUgdXMgcHJvYmxlbXMgaWYgd2UgImxlYWsiIHRoZW0uIFRoZSBmdW5jdGlvbnMgaW4gdGhlIG1lbWRlYnVnCisgc3lzdGVtIGRvIG5vdGhpbmcgZmFuY3ksIHRoZXkgZG8gdGhlaXIgbm9ybWFsIGZ1bmN0aW9uIGFuZCB0aGVuIGxvZworIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhleSBqdXN0IGRpZC4gVGhlIGxvZ2dlZCBkYXRhIGNhbiB0aGVuIGJlIGFuYWx5emVkCisgYWZ0ZXIgYSBjb21wbGV0ZSBzZXNzaW9uLAorCisgbWVtYW5hbHl6ZS5wbCBpcyB0aGUgcGVybCBzY3JpcHQgcHJlc2VudCBpbiB0ZXN0cy8gdGhhdCBhbmFseXplcyBhIGxvZyBmaWxlCisgZ2VuZXJhdGVkIGJ5IHRoZSBtZW1vcnkgdHJhY2tpbmcgc3lzdGVtLiBJdCBkZXRlY3RzIGlmIHJlc291cmNlcyBhcmUKKyBhbGxvY2F0ZWQgYnV0IG5ldmVyIGZyZWVkIGFuZCBvdGhlciBraW5kcyBvZiBlcnJvcnMgcmVsYXRlZCB0byByZXNvdXJjZQorIG1hbmFnZW1lbnQuCisKKyBJbnRlcm5hbGx5LCBkZWZpbml0aW9uIG9mIHByZXByb2Nlc3NvciBzeW1ib2wgREVCVUdCVUlMRCByZXN0cmljdHMgY29kZSB3aGljaAorIGlzIG9ubHkgY29tcGlsZWQgZm9yIGRlYnVnIGVuYWJsZWQgYnVpbGRzLiBBbmQgc3ltYm9sIENVUkxERUJVRyBpcyB1c2VkIHRvCisgZGlmZmVyZW50aWF0ZSBjb2RlIHdoaWNoIGlzIF9vbmx5XyB1c2VkIGZvciBtZW1vcnkgdHJhY2tpbmcvZGVidWdnaW5nLgorCisgVXNlIC1EQ1VSTERFQlVHIHdoZW4gY29tcGlsaW5nIHRvIGVuYWJsZSBtZW1vcnkgZGVidWdnaW5nLCB0aGlzIGlzIGFsc28KKyBzd2l0Y2hlZCBvbiBieSBydW5uaW5nIGNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWN1cmxkZWJ1Zy4gVXNlIC1EREVCVUdCVUlMRAorIHdoZW4gY29tcGlsaW5nIHRvIGVuYWJsZSBhIGRlYnVnIGJ1aWxkIG9yIHJ1biBjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1kZWJ1Zy4KKworIGN1cmwgLS12ZXJzaW9uIHdpbGwgbGlzdCAnRGVidWcnIGZlYXR1cmUgZm9yIGRlYnVnIGVuYWJsZWQgYnVpbGRzLCBhbmQKKyB3aWxsIGxpc3QgJ1RyYWNrTWVtb3J5JyBmZWF0dXJlIGZvciBjdXJsIGRlYnVnIG1lbW9yeSB0cmFja2luZyBjYXBhYmxlCisgYnVpbGRzLiBUaGVzZSBmZWF0dXJlcyBhcmUgaW5kZXBlbmRlbnQgYW5kIGNhbiBiZSBjb250cm9sbGVkIHdoZW4gcnVubmluZworIHRoZSBjb25maWd1cmUgc2NyaXB0LiBXaGVuIC0tZW5hYmxlLWRlYnVnIGlzIGdpdmVuIGJvdGggZmVhdHVyZXMgd2lsbCBiZQorIGVuYWJsZWQsIHVubGVzcyBzb21lIHJlc3RyaWN0aW9uIHByZXZlbnRzIG1lbW9yeSB0cmFja2luZyBmcm9tIGJlaW5nIHVzZWQuCisKK1Rlc3QgU3VpdGUKKz09PT09PT09PT0KKworIFRoZSB0ZXN0IHN1aXRlIGlzIHBsYWNlZCBpbiBpdHMgb3duIHN1YmRpcmVjdG9yeSBkaXJlY3RseSBvZmYgdGhlIHJvb3QgaW4gdGhlCisgY3VybCBhcmNoaXZlIHRyZWUsIGFuZCBpdCBjb250YWlucyBhIGJ1bmNoIG9mIHNjcmlwdHMgYW5kIGEgbG90IG9mIHRlc3QgY2FzZQorIGRhdGEuCisKKyBUaGUgbWFpbiB0ZXN0IHNjcmlwdCBpcyBydW50ZXN0cy5wbCB0aGF0IHdpbGwgaW52b2tlIHRlc3Qgc2VydmVycyBsaWtlCisgaHR0cHNlcnZlci5wbCBhbmQgZnRwc2VydmVyLnBsIGJlZm9yZSBhbGwgdGhlIHRlc3QgY2FzZXMgYXJlIHBlcmZvcm1lZC4gVGhlCisgdGVzdCBzdWl0ZSBjdXJyZW50bHkgb25seSBydW5zIG9uIHVuaXgtbGlrZSBwbGF0Zm9ybXMuCisKKyBZb3UnbGwgZmluZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0IHN1aXRlIGluIHRoZSB0ZXN0cy9SRUFETUUgZmlsZSwgYW5kIHRoZQorIHRlc3QgY2FzZSBkYXRhIGZpbGVzIGluIHRoZSB0ZXN0cy9GSUxFRk9STUFUIGZpbGUuCisKKyBUaGUgdGVzdCBzdWl0ZSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgaWYgY3VybCB3YXMgYnVpbHQgd2l0aCB0aGUgbWVtb3J5CisgZGVidWdnaW5nIGVuYWJsZWQsIGFuZCBpZiBpdCB3YXMgaXQgd2lsbCBkZXRlY3QgbWVtb3J5IGxlYWtzLCB0b28uCisKK0J1aWxkaW5nIFJlbGVhc2VzCis9PT09PT09PT09PT09PT09PQorCisgVGhlcmUncyBubyBtYWdpYyB0byB0aGlzLiBXaGVuIHlvdSBjb25zaWRlciBldmVyeXRoaW5nIHN0YWJsZSBlbm91Z2ggdG8gYmUKKyByZWxlYXNlZCwgZG8gdGhpczoKKworICAgMS4gVGFnIHRoZSBzb3VyY2UgY29kZSBhY2NvcmRpbmdseS4KKworICAgMi4gcnVuIHRoZSAnbWFrZXRneicgc2NyaXB0ICh1c2luZyAnbWFrZSBkaXN0Y2hlY2snIHdpbGwgZ2l2ZSB5b3UgYSBwcmV0dHkKKyAgICAgIGdvb2QgdmlldyBvbiB0aGUgc3RhdHVzIG9mIHRoZSBjdXJyZW50IHNvdXJjZXMpLiBtYWtldGd6IHJlcXVpcmVzIGEKKyAgICAgIHZlcnNpb24gbnVtYmVyIGFuZCBjcmVhdGVzIHRoZSByZWxlYXNlIGFyY2hpdmUuIG1ha2V0Z3ogdXNlcyAnbWFrZSBkaXN0JworICAgICAgZm9yIHRoZSBhY3R1YWwgYXJjaGl2ZSBidWlsZGluZywgd2h5IHlvdSBuZWVkIHRvIGZpbGwgaW4gdGhlIE1ha2VmaWxlLmFtCisgICAgICBmaWxlcyBwcm9wZXJseSBmb3Igd2hpY2ggZmlsZXMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHJlbGVhc2UKKyAgICAgIGFyY2hpdmVzLgorCisgICAzLiBXaGVuIHRoYXQncyBjb21wbGV0ZSwgc2lnbiB0aGUgb3V0cHV0IGZpbGVzLgorCisgICA0LiBVcGxvYWQKKworICAgNS4gVXBkYXRlIHdlYiBzaXRlIGFuZCBjaGFuZ2Vsb2cgb24gc2l0ZQorCisgICA2LiBTZW5kIGFubm91bmNlbWVudCB0byB0aGUgbWFpbGluZyBsaXN0cworCisgTk9URTogeW91IG11c3QgaGF2ZSBjdXJsIGNoZWNrZWQgb3V0IGZyb20gZ2l0IHRvIGJlIGFibGUgdG8gZG8gYSBwcm9wZXIKKyByZWxlYXNlIGJ1aWxkLiBUaGUgcmVsZWFzZSB0YXJiYWxscyBkbyBub3QgaGF2ZSBldmVyeXRoaW5nIHNldHVwIGluIG9yZGVyIHRvCisgZG8gcmVsZWFzZXMgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL0tOT1dOX0JVR1MgYi9jdXJsLTcuMjUuMC9kb2NzL0tOT1dOX0JVR1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4YmZjMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvS05PV05fQlVHUwpAQCAtMCwwICsxLDIzNSBAQAorVGhlc2UgYXJlIHByb2JsZW1zIGtub3duIHRvIGV4aXN0IGF0IHRoZSB0aW1lIG9mIHRoaXMgcmVsZWFzZS4gRmVlbCBmcmVlIHRvCitqb2luIGluIGFuZCBoZWxwIHVzIGNvcnJlY3Qgb25lIG9yIG1vcmUgb2YgdGhlc2UhIEFsc28gYmUgc3VyZSB0byBjaGVjayB0aGUKK2NoYW5nZWxvZyBvZiB0aGUgY3VycmVudCBkZXZlbG9wbWVudCBzdGF0dXMsIGFzIG9uZSBvciBtb3JlIG9mIHRoZXNlIHByb2JsZW1zCittYXkgaGF2ZSBiZWVuIGZpeGVkIHNpbmNlIHRoaXMgd2FzIHdyaXR0ZW4hCisKKzc4LiBjdXJsIGFuZCBsaWJjdXJsIGRvbid0IGFsd2F5cyBzaWduYWwgdGhlIGNsaWVudCBwcm9wZXJseSB3aGVuICJzZW5kaW5nIgorICB6ZXJvIGJ5dGVzIGZpbGVzIC0gaXQgbWFrZXMgZm9yIGV4YW1wbGUgdGhlIGNvbW1hbmQgbGluZSBjbGllbnQgbm90IGNyZWF0aW5nCisgIGFueSBmaWxlIGF0IGFsbC4gTGlrZSB3aGVuIHVzaW5nIEZUUC4KKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQzODM2MgorCis3Ny4gQ1VSTE9QVF9GT1JCSURfUkVVU0Ugb24gYSBoYW5kbGUgcHJldmVudHMgTlRMTSBmcm9tIHdvcmtpbmcgc2luY2UgaXQKKyAgImFic3VzZXMiIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gcmUtdXNlIHN5c3RlbSBhbmQgaWYgY29ubmVjdGlvbnMgYXJlCisgIGZvcmNlZCB0byBjbG9zZSB0aGV5IGJyZWFrIHRoZSBOVExNIHN1cHBvcnQuCisKKzc2LiBUaGUgU09DS0VUIHR5cGUgaW4gV2luNjQgaXMgNjQgYml0cyBsYXJnZSAoYW5kIHRodXMgc28gaXMgY3VybF9zb2NrZXRfdCBvbgorICB0aGF0IHBsYXRmb3JtKSwgYW5kIGxvbmcgaXMgb25seSAzMiBiaXRzLiBJdCBtYWtlcyBpdCBpbXBvc3NpYmxlIGZvcgorICBjdXJsX2Vhc3lfZ2V0aW5mbygpIHRvIHJldHVybiBhIHNvY2tldCBwcm9wZXJseSB3aXRoIHRoZSBDVVJMSU5GT19MQVNUU09DS0VUCisgIG9wdGlvbiBhcyBmb3IgYWxsIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLgorCis3NS4gTlRMTSBhdXRoZW50aWNhdGlvbiBpbnZvbHZpbmcgdW5pY29kZSB1c2VyIG5hbWUgb3IgcGFzc3dvcmQuCisgIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwOS0xMC8wMDI0Lmh0bWwKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9Mjk0NDMyNQorCis3My4gaWYgYSBjb25uZWN0aW9uIGlzIG1hZGUgdG8gYSBGVFAgc2VydmVyIGJ1dCB0aGUgc2VydmVyIHRoZW4ganVzdCBuZXZlcgorICBzZW5kcyB0aGUgMjIwIHJlc3BvbnNlIG9yIG90aGVyd2lzZSBpcyBkZWFkIHNsb3csIGxpYmN1cmwgd2lsbCBub3QKKyAgYWNrbm93bGVkZ2UgdGhlIGNvbm5lY3Rpb24gdGltZW91dCBkdXJpbmcgdGhhdCBwaGFzZSBidXQgb25seSB0aGUgInJlYWwiCisgIHRpbWVvdXQgLSB3aGljaCBtYXkgc3VycHJpc2UgdXNlcnMgYXMgaXQgaXMgcHJvYmFibHkgY29uc2lkZXJlZCB0byBiZSB0aGUKKyAgY29ubmVjdCBwaGFzZSB0byBtb3N0IHBlb3BsZS4gQnJvdWdodCB1cCAoYW5kIGlzIGJlaW5nIG1pc3VuZGVyc3Rvb2QpIGluOgorICBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0yODQ0MDc3CisKKzcyLiAiUGF1c2luZyBwaXBlbGluZSBwcm9ibGVtcy4iCisgIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwOS0wNy8wMjE0Lmh0bWwKKworNzAuIFByb2JsZW0gcmUtdXNpbmcgZWFzeSBoYW5kbGUgYWZ0ZXIgY2FsbCB0byBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA5LTA3LzAyNDkuaHRtbAorCis2OC4gIk1vcmUgcXVlc3Rpb25zIGFib3V0IGFyZXMgYmVoYXZpb3IiLgorICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDktMDgvMDAxMi5odG1sCisKKzY3LiBXaGVuIGNyZWF0aW5nIG11bHRpcGFydCBmb3JtcG9zdHMuIFRoZSBmaWxlIG5hbWUgcGFydCBjYW4gYmUgZW5jb2RlZCB3aXRoCisgIHNvbWV0aGluZyBiZXlvbmQgYXNjaWkgYnV0IGN1cnJlbnRseSBsaWJjdXJsIHdpbGwgb25seSBwYXNzIGluIHRoZSB2ZXJiYXRpbQorICBzdHJpbmcgdGhlIGFwcCBwcm92aWRlcy4gVGhlcmUgYXJlIHNldmVyYWwgYnJvd3NlcnMgdGhhdCBhbHJlYWR5IGRvIHRoaXMKKyAgZW5jb2RpbmcuIFRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIHVwZGF0ZWQgZHJhZnQgdG8gUkZDMjIzMToKKyAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtcmVzY2hrZS1yZmMyMjMxLWluLWh0dHAtMDIKKworNjYuIFdoZW4gdXNpbmcgdGVsbmV0LCB0aGUgdGltZSBsaW1pdGF0aW9uIG9wdGlvbnMgZG9uJ3Qgd29yay4KKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjgxODk1MAorCis2NS4gV2hlbiBkb2luZyBGVFAgb3ZlciBhIHNvY2tzIHByb3h5IG9yIENPTk5FQ1QgdGhyb3VnaCBIVFRQIHByb3h5IGFuZCB0aGUKKyAgbXVsdGkgaW50ZXJmYWNlIGlzIHVzZWQsIGxpYmN1cmwgd2lsbCBmYWlsIGlmIHRoZSAocGFzc2l2ZSkgVENQIGNvbm5lY3Rpb24KKyAgZm9yIHRoZSBkYXRhIHRyYW5zZmVyIGlzbid0IG1vcmUgb3IgbGVzcyBpbnN0YW50IGFzIHRoZSBjb2RlIGRvZXMgbm90CisgIHByb3Blcmx5IHdhaXQgZm9yIHRoZSBjb25uZWN0IHRvIGJlIGNvbmZpcm1lZC4gU2VlIHRlc3QgY2FzZSA1NjQgZm9yIGEgZmlyc3QKKyAgc2hvdCBhdCBhIHRlc3QgY2FzZS4KKworNjMuIFdoZW4gQ1VSTE9QVF9DT05ORUNUX09OTFkgaXMgdXNlZCwgdGhlIGhhbmRsZSBjYW5ub3QgcmVsaWFibHkgYmUgcmUtdXNlZAorICBmb3IgYW55IGZ1cnRoZXIgcmVxdWVzdHMgb3IgdHJhbnNmZXJzLiBUaGUgd29yay1hcm91bmQgaXMgdGhlbiB0byBjbG9zZSB0aGF0CisgIGhhbmRsZSB3aXRoIGN1cmxfZWFzeV9jbGVhbnVwKCkgYW5kIGNyZWF0ZSBhIG5ldy4gU29tZSBtb3JlIGRldGFpbHM6CisgIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwOS0wNC8wMzAwLmh0bWwKKworNjEuIElmIGFuIHVwbG9hZCB1c2luZyBFeHBlY3Q6IDEwMC1jb250aW51ZSByZWNlaXZlcyBhbiBIVFRQIDQxNyByZXNwb25zZSwKKyAgaXQgb3VnaHQgdG8gYmUgYXV0b21hdGljYWxseSByZXNlbnQgd2l0aG91dCB0aGUgRXhwZWN0Oi4gIEEgd29ya2Fyb3VuZCBpcworICBmb3IgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB0byByZWRvIHRoZSB0cmFuc2ZlciBhZnRlciBkaXNhYmxpbmcgRXhwZWN0Oi4KKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2FyY2hpdmUtMjAwOC0wMi8wMDQzLmh0bWwKKworNjAuIGxpYmN1cmwgY2xvc2VzIHRoZSBjb25uZWN0aW9uIGlmIGFuIEhUVFAgNDAxIHJlcGx5IGlzIHJlY2VpdmVkIHdoaWxlIGl0CisgIGlzIHdhaXRpbmcgZm9yIHRoZSB0aGUgMTAwLWNvbnRpbnVlIHJlc3BvbnNlLgorICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDgtMDgvMDQ2Mi5odG1sCisKKzU4LiBJdCBzZWVtcyBzZW5zaWJsZSB0byBiZSBhYmxlIHRvIHVzZSBDVVJMT1BUX05PQk9EWSBhbmQKKyAgQ1VSTE9QVF9GQUlMT05FUlJPUiB3aXRoIEZUUCB0byBkZXRlY3QgaWYgYSBmaWxlIGV4aXN0cyBvciBub3QsIGJ1dCBpdCBpcworICBub3Qgd29ya2luZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA4LTA3LzAyOTUuaHRtbAorCis1Ny4gT24gVk1TLUFscGhhOiBXaGVuIHVzaW5nIGFuIGh0dHAtZmlsZS11cGxvYWQgdGhlIGZpbGUgaXMgbm90IHNlbnQgdG8gdGhlCisgIFNlcnZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbnRlbnQtbGVuZ3RoLiAgU2VuZGluZyBhIGZpbGUgd2l0aCA1MTEgb3IgbGVzcworICBieXRlcywgY29udGVudC1sZW5ndGggNTEyIGlzIHVzZWQuICBTZW5kaW5nIGEgZmlsZSB3aXRoIDUxMyAtIDEwMjMgYnl0ZXMsCisgIGNvbnRlbnQtbGVuZ3RoIDEwMjQgaXMgdXNlZC4gIEZpbGVzIHdpdGggYSBsZW5ndGggb2YgYSBtdWx0aXBsZSBvZiA1MTIgQnl0ZXMKKyAgc2hvdyB0aGUgY29ycmVjdCBjb250ZW50LWxlbmd0aC4gT25seSB0aGVzZSBmaWxlcyB3b3JrIGZvciB1cGxvYWQuCisgIGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTIwNTc4NTgKKworNTYuIFdoZW4gbGliY3VybCBzZW5kcyBDVVJMT1BUX1BPU1RRVU9URSBjb21tYW5kcyB3aGVuIGNvbm5lY3RlZCB0byBhIFNGVFAKKyAgc2VydmVyIHVzaW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UsIHRoZSBjb21tYW5kcyBhcmUgbm90IGJlaW5nIHNlbnQgY29ycmVjdGx5CisgIGFuZCBpbnN0ZWFkIHRoZSBjb25uZWN0aW9uIGlzICJjYW5jZWxsZWQiICh0aGUgb3BlcmF0aW9uIGlzIGNvbnNpZGVyZWQgZG9uZSkKKyAgcHJlbWF0dXJlbHkuIFRoZXJlIGlzIGEgaGFsZi1iYWtlZCAoYnVzeS1sb29waW5nKSBwYXRjaCBwcm92aWRlZCBpbiB0aGUgYnVnCisgIHJlcG9ydCBidXQgaXQgY2Fubm90IGJlIGFjY2VwdGVkIGFzLWlzLiBTZWUKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MjAwNjU0NAorCis1NS4gbGliY3VybCBmYWlscyB0byBidWlsZCB3aXRoIE1JVCBLZXJiZXJvcyBmb3IgV2luZG93cyAoS2ZXKSBkdWUgdG8gS2ZXJ3MKKyAgbGlicmFyeSBoZWFkZXIgZmlsZXMgZXhwb3J0aW5nIHN5bWJvbHMvbWFjcm9zIHRoYXQgc2hvdWxkIGJlIGtlcHQgcHJpdmF0ZQorICB0byB0aGUgS2ZXIGxpYnJhcnkuIFNlZSB0aWNrZXQgIzU2MDEgYXQgaHR0cDovL2tyYmRldi5taXQuZWR1L3J0LworCis1Mi4gR2F1dGFtIEthY2hyb28ncyBpc3N1ZSB0aGF0IGlkZW50aWZpZXMgYSBwcm9ibGVtIHdpdGggdGhlIG11bHRpIGludGVyZmFjZQorICB3aGVyZSBhIGNvbm5lY3Rpb24gY2FuIGJlIHJlLXVzZWQgd2l0aG91dCBhY3R1YWxseSBiZWluZyBwcm9wZXJseQorICBTU0wtbmVnb3RpYXRlZDoKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA4LTAxLzAyNzcuaHRtbAorCis0OS4gSWYgdXNpbmcgLS1yZXRyeSBhbmQgdGhlIHRyYW5zZmVyIHRpbWVvdXRzIChwb3NzaWJseSBkdWUgdG8gdXNpbmcgLW0gb3IKKyAgLXkvLVkpIHRoZSBuZXh0IGF0dGVtcHQgZG9lc24ndCByZXN1bWUgdGhlIHRyYW5zZmVyIHByb3Blcmx5IGZyb20gd2hhdCB3YXMKKyAgZG93bmxvYWRlZCBpbiB0aGUgcHJldmlvdXMgYXR0ZW1wdCBidXQgd2lsbCB0cnVuY2F0ZSBhbmQgcmVzdGFydCBhdCB0aGUKKyAgb3JpZ2luYWwgcG9zaXRpb24gd2hlcmUgaXQgd2FzIGF0IGJlZm9yZSB0aGUgcHJldmlvdXMgZmFpbGVkIGF0dGVtcHQuIFNlZQorICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDgtMDEvMDA4MC5odG1sIGFuZCBNYW5kcml2YSBidWcgcmVwb3J0CisgIGh0dHBzOi8vcWEubWFuZHJpdmEuY29tL3Nob3dfYnVnLmNnaT9pZD0yMjU2NQorCis0OC4gSWYgYSBDT05ORUNUIHJlc3BvbnNlLWhlYWRlcnMgYXJlIGxhcmdlciB0aGFuIEJVRlNJWkUgKDE2S0IpIHdoZW4gdGhlCisgIGNvbm5lY3Rpb24gaXMgbWVhbnQgdG8gYmUga2VwdCBhbGl2ZSAobGlrZSBmb3IgTlRMTSBwcm94eSBhdXRoKSwgdGhlCisgIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHByZW1hdHVyZWx5IGFuZCB3aWxsIGNvbmZ1c2UgdGhlIHJlc3Qgb2YgdGhlIEhUVFAKKyAgcHJvdG9jb2wgY29kZS4gVGhpcyBzaG91bGQgYmUgdmVyeSByYXJlLgorCis0My4gVGhlcmUgc2VlbXMgdG8gYmUgYSBwcm9ibGVtIHdoZW4gY29ubmVjdGluZyB0byB0aGUgTWljcm9zb2Z0IHRlbG5ldCBzZXJ2ZXIuCisgIGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE3MjA2MDUKKworNDEuIFdoZW4gZG9pbmcgYW4gb3BlcmF0aW9uIG92ZXIgRlRQIHRoYXQgcmVxdWlyZXMgdGhlIEFDQ1QgY29tbWFuZCAoYnV0IG5vdAorICB3aGVuIGxvZ2dpbmcgaW4pLCB0aGUgb3BlcmF0aW9uIHdpbGwgZmFpbCBzaW5jZSBsaWJjdXJsIGRvZXNuJ3QgZGV0ZWN0IHRoaXMKKyAgYW5kIHRodXMgZmFpbHMgdG8gaXNzdWUgdGhlIGNvcnJlY3QgY29tbWFuZDoKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTY5MzMzNworCiszOS4gU3RlZmZlbiBSdW1sZXIncyBSYWNlIENvbmRpdGlvbiBpbiBDdXJsX3Byb3h5Q09OTkVDVDoKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA3LTAxLzAwNDUuaHRtbAorCiszOC4gS3VtYXIgU3dhbXkgQmhhdHQncyBwcm9ibGVtIGluIGZ0cC9zc2wgIkxJU1QiIG9wZXJhdGlvbjoKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA3LTAxLzAxMDMuaHRtbAorCiszNy4gSGF2aW5nIG1vcmUgdGhhbiBvbmUgY29ubmVjdGlvbiB0byB0aGUgc2FtZSBob3N0IHdoZW4gZG9pbmcgTlRMTQorICBhdXRoZW50aWNhdGlvbiAod2l0aCBwZXJmb3JtcyBtdWx0aXBsZSAicGFzc2VzIiBhbmQgYXV0aGVudGljYXRlcyBhCisgIGNvbm5lY3Rpb24gcmF0aGVyIHRoYW4gYSBIVFRQIHJlcXVlc3QpLCBhbmQgcGFydGljdWxhcmx5IHdoZW4gdXNpbmcgdGhlCisgIG11bHRpIGludGVyZmFjZSwgdGhlcmUncyBhIHJpc2sgdGhhdCBsaWJjdXJsIHdpbGwgcmUtdXNlIGEgd3JvbmcgY29ubmVjdGlvbgorICB3aGVuIGRvaW5nIHRoZSBkaWZmZXJlbnQgcGFzc2VzIGluIHRoZSBOVExNIG5lZ290aWF0aW9uIGFuZCB0aHVzIGZhaWwgdG8KKyAgbmVnb3RpYXRlIChpbiBzZWVtaW5nbHkgbXlzdGVyaW91cyB3YXlzKS4KKworMzUuIEJvdGggU09DS1M1IGFuZCBTT0NLUzQgcHJveHkgY29ubmVjdGlvbnMgYXJlIGRvbmUgYmxvY2tpbmcsIHdoaWNoIGlzIHZlcnkKKyAgYmFkIHdoZW4gdXNlZCB3aXRoIHRoZSBtdWx0aSBpbnRlcmZhY2UuCisKKzM0LiBUaGUgU09DS1M0IGNvbm5lY3Rpb24gY29kZXMgZG9uJ3QgcHJvcGVybHkgYWNrbm93bGVkZ2UgKGNvbm5lY3QpIHRpbWVvdXRzLgorICBBbHNvIHNlZSAjMTIuIEFjY29yZGluZyB0byBidWcgIzE1NTY1MjgsIGV2ZW4gdGhlIFNPQ0tTNSBjb25uZWN0IGNvZGUgZG9lcworICBub3QgZG8gaXQgcmlnaHQ6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE1NTY1MjgsCisKKzMxLiAiY3VybC1jb25maWcgLS1saWJzIiB3aWxsIGluY2x1ZGUgZGV0YWlscyBzZXQgaW4gTERGTEFHUyB3aGVuIGNvbmZpZ3VyZSBpcworICBydW4gdGhhdCBtaWdodCBiZSBuZWVkZWQgb25seSBmb3IgYnVpbGRpbmcgbGliY3VybC4gRnVydGhlciwgY3VybC1jb25maWcKKyAgLS1jZmxhZ3Mgc3VmZmVycyBmcm9tIHRoZSBzYW1lIGVmZmVjdHMgd2l0aCBDRkxBR1MvQ1BQRkxBR1MuCisKKzMwLiBZb3UgbmVlZCB0byB1c2UgLWcgdG8gdGhlIGNvbW1hbmQgbGluZSB0b29sIGluIG9yZGVyIHRvIHVzZSBSRkMyNzMyLXN0eWxlCisgIElQdjYgbnVtZXJpY2FsIGFkZHJlc3NlcyBpbiBVUkxzLgorCisyOS4gSVB2NiBVUkxzIHdpdGggem9uZSBJRCBpcyBub3QgbmljZWx5IHN1cHBvcnRlZC4KKyAgaHR0cDovL3d3dy5pZXRmLm9yZy9pbnRlcm5ldC1kcmFmdHMvZHJhZnQtZmVubmVyLWxpdGVyYWwtem9uZS0wMi50eHQgKGV4cGlyZWQpCisgIHNwZWNpZmllcyB0aGUgdXNlIG9mIGEgcGx1cyBzaWduIGluc3RlYWQgb2YgYSBwZXJjZW50IHdoZW4gc3BlY2lmeWluZyB6b25lCisgIElEcyBpbiBVUkxzIHRvIGdldCBhcm91bmQgdGhlIHByb2JsZW0gb2YgcGVyY2VudCBzaWducyBiZWluZworICBzcGVjaWFsLiBBY2NvcmRpbmcgdG8gdGhlIHJlcG9ydGVyLCBGaXJlZm94IGRlYWxzIHdpdGggdGhlIFVSTCBfd2l0aF8gYQorICBwZXJjZW50IGxldHRlciAod2hpY2ggc2VlbXMgbGlrZSBhIGJsYXRhbnQgVVJMIHNwZWMgdmlvbGF0aW9uKS4KKyAgbGliY3VybCBzdXBwb3J0cyB6b25lIElEcyB3aGVyZSB0aGUgcGVyY2VudCBzaWduIGlzIFVSTC1lc2NhcGVkIChpLmUuICUyNSkuCisKKyAgIFNlZSBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xMzcxMTE4CisKKzI2LiBOVExNIGF1dGhlbnRpY2F0aW9uIHVzaW5nIFNTUEkgKG9uIFdpbmRvd3MpIHdoZW4gKGxpYiljdXJsIGlzIHJ1bm5pbmcgaW4KKyAgInN5c3RlbSBjb250ZXh0IiB3aWxsIG1ha2UgaXQgdXNlIHdyb25nKD8pIHVzZXIgbmFtZSAtIGF0IGxlYXN0IHdoZW4gY29tcGFyZWQKKyAgdG8gd2hhdCB3aW5odHRwIGRvZXMuIFNlZSBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xMjgxODY3CisKKzIzLiBTT0NLUy1yZWxhdGVkIHByb2JsZW1zOgorICBBKSBsaWJjdXJsIGRvZXNuJ3Qgc3VwcG9ydCBTT0NLUyBmb3IgSVB2Ni4KKyAgQikgbGliY3VybCBkb2Vzbid0IHN1cHBvcnQgRlRQUyBvdmVyIGEgU09DS1MgcHJveHkuCisgIEUpIGxpYmN1cmwgZG9lc24ndCBzdXBwb3J0IGFjdGl2ZSBGVFAgb3ZlciBhIFNPQ0tTIHByb3h5CisKKyAgV2UgcHJvYmFibHkgaGF2ZSBldmVuIG1vcmUgYnVncyBhbmQgbGFjayBvZiBmZWF0dXJlcyB3aGVuIGEgU09DS1MgcHJveHkgaXMKKyAgdXNlZC4KKworMjIuIFNlbmRpbmcgZmlsZXMgdG8gYSBGVFAgc2VydmVyIHVzaW5nIGN1cmwgb24gVk1TLCBtaWdodCBsZWFkIHRvIGN1cmwKKyAgY29tcGxhaW5pbmcgb24gInVuYWxpZ25lZCBmaWxlIHNpemUiIG9uIGNvbXBsZXRpb24uIFRoZSBwcm9ibGVtIGlzIHJlbGF0ZWQKKyAgdG8gVk1TIGZpbGUgc3RydWN0dXJlcyBhbmQgdGhlIHBlcmNlaXZlZCBmaWxlIHNpemVzIHN0YXQoKSByZXR1cm5zLiBBCisgIHBvc3NpYmxlIGZpeCB3b3VsZCBpbnZvbHZlIHNlbmRpbmcgYSAiU1RSVSBWTVMiIGNvbW1hbmQuCisgIGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTExNTYyODcKKworMjEuIEZUUCBBU0NJSSB0cmFuc2ZlcnMgZG8gbm90IGZvbGxvdyBSRkM5NTkuIFRoZXkgZG9uJ3QgY29udmVydCB0aGUgZGF0YQorICAgYWNjb3JkaW5nbHkgKG5vdCBmb3Igc2VuZGluZyBub3IgZm9yIHJlY2VpdmluZykuIFJGQyA5NTkgc2VjdGlvbiAzLjEuMS4xCisgICBjbGVhcmx5IGRlc2NyaWJlcyBob3cgdGhpcyBzaG91bGQgYmUgZG9uZToKKworICAgICBUaGUgc2VuZGVyIGNvbnZlcnRzIHRoZSBkYXRhIGZyb20gYW4gaW50ZXJuYWwgY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9uIHRvCisgICAgIHRoZSBzdGFuZGFyZCA4LWJpdCBOVlQtQVNDSUkgcmVwcmVzZW50YXRpb24gKHNlZSB0aGUgVGVsbmV0CisgICAgIHNwZWNpZmljYXRpb24pLiAgVGhlIHJlY2VpdmVyIHdpbGwgY29udmVydCB0aGUgZGF0YSBmcm9tIHRoZSBzdGFuZGFyZAorICAgICBmb3JtIHRvIGhpcyBvd24gaW50ZXJuYWwgZm9ybS4KKworICAgU2luY2UgNy4xNS40IGF0IGxlYXN0IGxpbmUgZW5kaW5ncyBhcmUgY29udmVydGVkLgorCisxNi4gRlRQIFVSTHMgcGFzc2VkIHRvIGN1cmwgbWF5IGNvbnRhaW4gTlVMICgweDAwKSBpbiB0aGUgUkZDIDE3MzggPHVzZXI+LAorICA8cGFzc3dvcmQ+LCBhbmQgPGZwYXRoPiBjb21wb25lbnRzLCBlbmNvZGVkIGFzICIlMDAiLiAgVGhlIHByb2JsZW0gaXMgdGhhdAorICBjdXJsX3VuZXNjYXBlIGRvZXMgbm90IGRldGVjdCB0aGlzLCBidXQgaW5zdGVhZCByZXR1cm5zIGEgc2hvcnRlbmVkIEMKKyAgc3RyaW5nLiAgRnJvbSBhIHN0cmljdCBGVFAgcHJvdG9jb2wgc3RhbmRwb2ludCwgTlVMIGlzIGEgdmFsaWQgY2hhcmFjdGVyCisgIHdpdGhpbiBSRkMgOTU5IDxzdHJpbmc+LCBzbyB0aGUgd2F5IHRvIGhhbmRsZSB0aGlzIGNvcnJlY3RseSBpbiBjdXJsIHdvdWxkCisgIGJlIHRvIHVzZSBhIGRhdGEgc3RydWN0dXJlIG90aGVyIHRoYW4gYSBwbGFpbiBDIHN0cmluZywgb25lIHRoYXQgY2FuIGhhbmRsZQorICBlbWJlZGRlZCBOVUwgY2hhcmFjdGVycy4gIEZyb20gYSBwcmFjdGljYWwgc3RhbmRwb2ludCwgbW9zdCBGVFAgc2VydmVycworICB3b3VsZCBub3QgbWVhbmluZ2Z1bGx5IHN1cHBvcnQgTlVMIGNoYXJhY3RlcnMgd2l0aGluIFJGQyA5NTkgPHN0cmluZz4sCisgIGFueXdheSAoZS5nLiwgVU5JWCBwYXRobmFtZXMgbWF5IG5vdCBjb250YWluIE5VTCkuCisKKzE0LiBUZXN0IGNhc2UgMTY1IG1pZ2h0IGZhaWwgb24gYSBzeXN0ZW0gd2hpY2ggaGFzIGxpYmlkbiBwcmVzZW50LCBidXQgd2l0aCBhbgorICBvbGQgaWNvbnYgdmVyc2lvbiAoMi4xLjMgaXMgYSBrbm93biBiYWQgdmVyc2lvbiksIHNpbmNlIGl0IGRvZXNuJ3QgcmVjb2duaXplCisgIHRoZSBjaGFyc2V0IHdoZW4gbmFtZWQgSVNPODg1OS0xLiBDaGFuZ2luZyB0aGUgbmFtZSB0byBJU08tODg1OS0xIG1ha2VzIHRoZQorICB0ZXN0IHBhc3MsIGJ1dCBpbnN0ZWFkIG1ha2VzIGl0IGZhaWwgb24gU29sYXJpcyBob3N0cyB0aGF0IHVzZSBpdHMgbmF0aXZlCisgIGljb252LgorCisxMy4gY3VybCB2ZXJzaW9uIDcuMTIuMiBmYWlscyBvbiBBSVggaWYgY29tcGlsZWQgd2l0aCAtLWVuYWJsZS1hcmVzLgorICBUaGUgd29ya2Fyb3VuZCBpcyB0byBjb21iaW5lIC0tZW5hYmxlLWFyZXMgd2l0aCAtLWRpc2FibGUtc2hhcmVkCisKKzEyLiBXaGVuIGNvbm5lY3RpbmcgdG8gYSBTT0NLUyBwcm94eSwgdGhlIChjb25uZWN0KSB0aW1lb3V0IGlzIG5vdCBwcm9wZXJseQorICBhY2tub3dsZWRnZWQgYWZ0ZXIgdGhlIGFjdHVhbCBUQ1AgY29ubmVjdCAoZHVyaW5nIHRoZSBTT0NLUyAibmVnb3RpYXRlIgorICBwaGFzZSkuCisKKzEwLiBUbyBnZXQgSFRUUCBOZWdvdGlhdGUgYXV0aGVudGljYXRpb24gdG8gd29yayBmaW5lLCB5b3UgbmVlZCB0byBwcm92aWRlIGEKKyAgKGZha2UpIHVzZXIgbmFtZSAodGhpcyBjb25jZXJucyBib3RoIGN1cmwgYW5kIHRoZSBsaWIpIGJlY2F1c2UgdGhlIGNvZGUKKyAgd3JvbmdseSBvbmx5IGNvbnNpZGVycyBhdXRoZW50aWNhdGlvbiBpZiB0aGVyZSdzIGEgdXNlciBuYW1lIHByb3ZpZGVkLgorICBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xMDA0ODQxLiBIb3c/CisgIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwNC0wOC8wMTgyLmh0bWwKKworOC4gRG9pbmcgcmVzdW1lZCB1cGxvYWQgb3ZlciBIVFRQIGRvZXMgbm90IHdvcmsgd2l0aCAnLUMgLScsIGJlY2F1c2UgY3VybAorICBkb2Vzbid0IGRvIGEgSEVBRCBmaXJzdCB0byBnZXQgdGhlIGluaXRpYWwgc2l6ZS4gVGhpcyBuZWVkcyB0byBiZSBkb25lCisgIG1hbnVhbGx5IGZvciBIVFRQIFBVVCByZXN1bWUgdG8gd29yaywgYW5kIHRoZW4gJy1DIFtpbmRleF0nLgorCis2LiBsaWJjdXJsIGlnbm9yZXMgZW1wdHkgcGF0aCBwYXJ0cyBpbiBGVFAgVVJMcywgd2hlcmVhcyBSRkMxNzM4IHN0YXRlcyB0aGF0CisgIHN1Y2ggcGFydHMgc2hvdWxkIGJlIHNlbnQgdG8gdGhlIHNlcnZlciBhcyAnQ1dEICcgKHdpdGhvdXQgYW4gYXJndW1lbnQpLgorICBUaGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBydWxlLCBpcyB0aGF0IHdlIGtub3dpbmdseSBicmVhayB0aGlzIGlmIHRoZQorICBlbXB0eSBwYXJ0IGlzIGZpcnN0IGluIHRoZSBwYXRoLCBhcyB0aGVuIHdlIHVzZSB0aGUgZG91YmxlIHNsYXNoZXMgdG8KKyAgaW5kaWNhdGUgdGhhdCB0aGUgdXNlciB3YW50cyB0byByZWFjaCB0aGUgcm9vdCBkaXIgKHRoaXMgZXhjZXB0aW9uIFNIQUxMCisgIHJlbWFpbiBldmVuIHdoZW4gdGhpcyBidWcgaXMgZml4ZWQpLgorCis1LiBsaWJjdXJsIGRvZXNuJ3QgdHJlYXQgdGhlIGNvbnRlbnQtbGVuZ3RoIG9mIGNvbXByZXNzZWQgZGF0YSBwcm9wZXJseSwgYXMKKyAgaXQgc2VlbXMgSFRUUCBzZXJ2ZXJzIHNlbmQgdGhlICp1bmNvbXByZXNzZWQqIGxlbmd0aCBpbiB0aGF0IGhlYWRlciBhbmQKKyAgbGliY3VybCB0aGlua3Mgb2YgaXQgYXMgdGhlICpjb21wcmVzc2VkKiBsZW5ndGguIFNvbWUgZXhwbGFuYXRpb25zIGFyZSBoZXJlOgorICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDMtMDYvMDE0Ni5odG1sCisKKzIuIElmIGEgSFRUUCBzZXJ2ZXIgcmVzcG9uZHMgdG8gYSBIRUFEIHJlcXVlc3QgYW5kIGluY2x1ZGVzIGEgYm9keSAodGh1cworICB2aW9sYXRpbmcgdGhlIFJGQzI2MTYpLCBjdXJsIHdvbid0IHdhaXQgdG8gcmVhZCB0aGUgcmVzcG9uc2UgYnV0IGp1c3Qgc3RvcAorICByZWFkaW5nIGFuZCByZXR1cm4gYmFjay4gSWYgYSBzZWNvbmQgcmVxdWVzdCAobGV0J3MgYXNzdW1lIGEgR0VUKSBpcyB0aGVuCisgIGltbWVkaWF0ZWx5IG1hZGUgdG8gdGhlIHNhbWUgc2VydmVyIGFnYWluLCB0aGUgY29ubmVjdGlvbiB3aWxsIGJlIHJlLXVzZWQKKyAgZmluZSBvZiBjb3Vyc2UsIGFuZCB0aGUgc2Vjb25kIHJlcXVlc3Qgd2lsbCBiZSBzZW50IG9mZiBidXQgd2hlbiB0aGUKKyAgcmVzcG9uc2UgaXMgdG8gZ2V0IHJlYWQsIHRoZSBwcmV2aW91cyByZXNwb25zZS1ib2R5IGlzIHdoYXQgY3VybCB3aWxsIHJlYWQKKyAgYW5kIGhhdm9jIGlzIHdoYXQgaGFwcGVucy4KKyAgTW9yZSBkZXRhaWxzIG9uIHRoaXMgaXMgZm91bmQgaW4gdGhpcyBsaWJjdXJsIG1haWxpbmcgbGlzdCB0aHJlYWQ6CisgIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwMi0wOC8wMDAwLmh0bWwKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvTElDRU5TRS1NSVhJTkcgYi9jdXJsLTcuMjUuMC9kb2NzL0xJQ0VOU0UtTUlYSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTY1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL0xJQ0VOU0UtTUlYSU5HCkBAIC0wLDAgKzEsMTMwIEBACisgICAgICAgICBMaWNlbnNlIE1peGluZyB3aXRoIGFwcHMsIGxpYmN1cmwgYW5kIFRoaXJkIFBhcnR5IExpYnJhcmllcworICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworbGliY3VybCBjYW4gYmUgYnVpbHQgdG8gdXNlIGEgZmFpciBhbW91bnQgb2YgdmFyaW91cyB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMsCitsaWJyYXJpZXMgdGhhdCBhcmUgd3JpdHRlbiBhbmQgcHJvdmlkZWQgYnkgb3RoZXIgcGFydGllcyB0aGF0IGFyZSBkaXN0cmlidXRlZAordXNpbmcgdGhlaXIgb3duIGxpY2Vuc2VzLiBFdmVuIGxpYmN1cmwgaXRzZWxmIGNvbnRhaW5zIGNvZGUgdGhhdCBtYXkgY2F1c2UKK3Byb2JsZW1zIHRvIHNvbWUuIFRoaXMgZG9jdW1lbnQgYXR0ZW1wdHMgdG8gZGVzY3JpYmUgd2hhdCBsaWNlbnNlcyBsaWJjdXJsIGFuZAordGhlIG90aGVyIGxpYnJhcmllcyB1c2UgYW5kIHdoYXQgcG9zc2libGUgZGlsZW1tYXMgbGlua2luZyBhbmQgbWl4aW5nIHRoZW0gYWxsCitjYW4gbGVhZCB0byBmb3IgZW5kIHVzZXJzLgorCitJIGFtIG5vdCBhIGxhd3llciBhbmQgdGhpcyBpcyBub3QgbGVnYWwgYWR2aWNlIQorCitPbmUgY29tbW9uIGRpbGVtbWEgaXMgdGhhdCBHUExbMV0tbGljZW5zZWQgY29kZSBpcyBub3QgYWxsb3dlZCB0byBiZSBsaW5rZWQKK3dpdGggY29kZSBsaWNlbnNlZCB1bmRlciB0aGUgT3JpZ2luYWwgQlNEIGxpY2Vuc2UgKHdpdGggdGhlIGFubm91bmNlbWVudAorY2xhdXNlKS4gWW91IG1heSBzdGlsbCBidWlsZCB5b3VyIG93biBjb3BpZXMgdGhhdCB1c2UgdGhlbSBhbGwsIGJ1dAorZGlzdHJpYnV0aW5nIHRoZW0gYXMgYmluYXJpZXMgd291bGQgYmUgdG8gdmlvbGF0ZSB0aGUgR1BMIGxpY2Vuc2UgLSB1bmxlc3MgeW91CithY2NvbXBhbnkgeW91ciBsaWNlbnNlIHdpdGggYW4gZXhjZXB0aW9uWzJdLiBUaGlzIHBhcnRpY3VsYXIgcHJvYmxlbSB3YXMKK2FkZHJlc3NlZCB3aGVuIHRoZSBNb2RpZmllZCBCU0QgbGljZW5zZSB3YXMgY3JlYXRlZCwgd2hpY2ggZG9lcyBub3QgaGF2ZSB0aGUKK2Fubm91bmNlbWVudCBjbGF1c2UgdGhhdCBjb2xsaWRlcyB3aXRoIEdQTC4KKworbGliY3VybCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwKKworICAgICAgICBVc2VzIGFuIE1JVCAob3IgTW9kaWZpZWQgQlNEKS1zdHlsZSBsaWNlbnNlIHRoYXQgaXMgYXMgbGliZXJhbCBhcworICAgICAgICBwb3NzaWJsZS4gIFNvbWUgb2YgdGhlIHNvdXJjZSBmaWxlcyB0aGF0IGRlYWwgd2l0aCBLUkI0IGhhdmUgT3JpZ2luYWwKKyAgICAgICAgQlNELXN0eWxlIGFubm91bmNlLWNsYXVzZSBsaWNlbnNlcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSBiaW5hcmllcworICAgICAgICB3aXRoIGtyYjQtZW5hYmxlZCBsaWJjdXJsIHRoYXQgYWxzbyBsaW5rIHdpdGggR1BMLWxpY2Vuc2VkIGNvZGUhCisKK09wZW5TU0wgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2UvbGljZW5zZS5odG1sCisKKyAgICAgICAgKE1heSBiZSB1c2VkIGZvciBTU0wvVExTIHN1cHBvcnQpIFVzZXMgYW4gT3JpZ2luYWwgQlNELXN0eWxlIGxpY2Vuc2UKKyAgICAgICAgd2l0aCBhbiBhbm5vdW5jZW1lbnQgY2xhdXNlIHRoYXQgbWFrZXMgaXQgImluY29tcGF0aWJsZSIgd2l0aCBHUEwuIFlvdQorICAgICAgICBhcmUgbm90IGFsbG93ZWQgdG8gc2hpcCBiaW5hcmllcyB0aGF0IGxpbmsgd2l0aCBPcGVuU1NMIHRoYXQgaW5jbHVkZXMKKyAgICAgICAgR1BMIGNvZGUgKHVubGVzcyB0aGF0IHNwZWNpZmljIEdQTCBjb2RlIGluY2x1ZGVzIGFuIGV4Y2VwdGlvbiBmb3IKKyAgICAgICAgT3BlblNTTCAtIGEgaGFiaXQgdGhhdCBpcyBncm93aW5nIG1vcmUgYW5kIG1vcmUgY29tbW9uKS4gSWYgT3BlblNTTCdzCisgICAgICAgIGxpY2Vuc2luZyBpcyBhIHByb2JsZW0gZm9yIHlvdSwgY29uc2lkZXIgdXNpbmcgR251VExTIG9yIHlhc3NsCisgICAgICAgIGluc3RlYWQuCisKK0dudVRMUyAgaHR0cDovL3d3dy5nbnV0bHMub3JnLworCisgICAgICAgIChNYXkgYmUgdXNlZCBmb3IgU1NML1RMUyBzdXBwb3J0KSBVc2VzIHRoZSBMR1BMWzNdIGxpY2Vuc2UuIElmIHRoaXMgaXMKKyAgICAgICAgYSBwcm9ibGVtIGZvciB5b3UsIGNvbnNpZGVyIHVzaW5nIE9wZW5TU0wgaW5zdGVhZC4gQWxzbyBub3RlIHRoYXQKKyAgICAgICAgR251VExTIGl0c2VsZiBkZXBlbmRzIG9uIGFuZCB1c2VzIG90aGVyIGxpYnMgKGxpYmdjcnlwdCBhbmQKKyAgICAgICAgbGliZ3BnLWVycm9yKSBhbmQgdGhleSB0b28gYXJlIExHUEwtIG9yIEdQTC1saWNlbnNlZC4KKworeWFzc2wgICBodHRwOi8vd3d3Lnlhc3NsLmNvbS8KKworICAgICAgICAoTWF5IGJlIHVzZWQgZm9yIFNTTC9UTFMgc3VwcG9ydCkgVXNlcyB0aGUgR1BMWzFdIGxpY2Vuc2UuIElmIHRoaXMgaXMKKyAgICAgICAgYSBwcm9ibGVtIGZvciB5b3UsIGNvbnNpZGVyIHVzaW5nIE9wZW5TU0wgb3IgR251VExTIGluc3RlYWQuCisKK05TUyAgICAgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9zZWN1cml0eS9wa2kvbnNzLworCisgICAgICAgIChNYXkgYmUgdXNlZCBmb3IgU1NML1RMUyBzdXBwb3J0KSBJcyBjb3ZlcmVkIGJ5IHRoZSBNUExbNF0gbGljZW5zZSwKKyAgICAgICAgdGhlIEdQTFsxXSBsaWNlbnNlIGFuZCB0aGUgTEdQTFszXSBsaWNlbnNlLiBZb3UgbWF5IGNob29zZSB0byBsaWNlbnNlCisgICAgICAgIHRoZSBjb2RlIHVuZGVyIE1QTCB0ZXJtcywgR1BMIHRlcm1zLCBvciBMR1BMIHRlcm1zLiBUaGVzZSBsaWNlbnNlcworICAgICAgICBncmFudCB5b3UgZGlmZmVyZW50IHBlcm1pc3Npb25zIGFuZCBpbXBvc2UgZGlmZmVyZW50IG9ibGlnYXRpb25zLiBZb3UKKyAgICAgICAgc2hvdWxkIHNlbGVjdCB0aGUgbGljZW5zZSB0aGF0IGJlc3QgbWVldHMgeW91ciBuZWVkcy4KKworYXhUTFMgICBodHRwOi8vYXh0bHMuc291cmNlZm9yZ2UubmV0LworCisgICAgICAgIChNYXkgYmUgdXNlZCBmb3IgU1NML1RMUyBzdXBwb3J0KSBVc2VzIGEgTW9kaWZpZWQgQlNELXN0eWxlIGxpY2Vuc2UuCisKK2MtYXJlcyAgaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL2MtYXJlcy9saWNlbnNlLmh0bWwKKworICAgICAgICAoVXNlZCBmb3IgYXN5bmNocm9ub3VzIG5hbWUgcmVzb2x2ZXMpIFVzZXMgYW4gTUlUIGxpY2Vuc2UgdGhhdCBpcyB2ZXJ5CisgICAgICAgIGxpYmVyYWwgYW5kIGltcG9zZXMgbm8gcmVzdHJpY3Rpb25zIG9uIGFueSBvdGhlciBsaWJyYXJ5IG9yIHBhcnQgeW91CisgICAgICAgIG1heSBsaW5rIHdpdGguCisKK3psaWIgICAgaHR0cDovL3d3dy5nemlwLm9yZy96bGliL3psaWJfbGljZW5zZS5odG1sCisKKyAgICAgICAgKFVzZWQgZm9yIGNvbXByZXNzZWQgVHJhbnNmZXItRW5jb2Rpbmcgc3VwcG9ydCkgVXNlcyBhbiBNSVQtc3R5bGUKKyAgICAgICAgbGljZW5zZSB0aGF0IHNob3VsZG4ndCBjb2xsaWRlIHdpdGggYW55IG90aGVyIGxpYnJhcnkuCisKK2tyYjQKKworICAgICAgICBXaGlsZSBub3RoaW5nIGluIHBhcnRpY3VsYXIgc2F5cyB0aGF0IGEgS2VyYmVyb3M0IGxpYnJhcnkgbXVzdCB1c2UgYW55CisgICAgICAgIHBhcnRpY3VsYXIgbGljZW5zZSwgdGhlIG9uZSBJJ3ZlIHRyaWVkIGFuZCB1c2VkIHN1Y2Nlc3NmdWxseSBzbyBmYXIKKyAgICAgICAgKGt0aC1rcmI0KSBpcyBwYXJ0bHkgT3JpZ2luYWwgQlNELWxpY2Vuc2VkIHdpdGggdGhlIGFubm91bmNlbWVudAorICAgICAgICBjbGF1c2UuIFNvbWUgb2YgdGhlIGNvZGUgaW4gbGliY3VybCB0aGF0IGlzIHdyaXR0ZW4gdG8gZGVhbCB3aXRoCisgICAgICAgIEtlcmJlcm9zNCBpcyBNb2RpZmllZCBCU0QtbGljZW5zZWQuCisKK01JVCBLZXJiZXJvcyBodHRwOi8vd2ViLm1pdC5lZHUva2VyYmVyb3Mvd3d3L2Rpc3QvCisKKyAgICAgICAgKE1heSBiZSB1c2VkIGZvciBHU1Mgc3VwcG9ydCkgTUlUIGxpY2Vuc2VkLCB0aGF0IHNob3VsZG4ndCBjb2xsaWRlCisgICAgICAgIHdpdGggYW55IG90aGVyIHBhcnRzLgorCitIZWltZGFsIGh0dHA6Ly93d3cucGRjLmt0aC5zZS9oZWltZGFsLworCisgICAgICAgIChNYXkgYmUgdXNlZCBmb3IgR1NTIHN1cHBvcnQpIEhlaW1kYWwgaXMgT3JpZ2luYWwgQlNEIGxpY2Vuc2VkIHdpdGgKKyAgICAgICAgdGhlIGFubm91bmNlbWVudCBjbGF1c2UuCisKK0dOVSBHU1MgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dzcy8KKworICAgICAgICAoTWF5IGJlIHVzZWQgZm9yIEdTUyBzdXBwb3J0KSBHTlUgR1NTIGlzIEdQTCBsaWNlbnNlZC4gTm90ZSB0aGF0IHlvdQorICAgICAgICBtYXkgbm90IGRpc3RyaWJ1dGUgYmluYXJ5IGN1cmwgcGFja2FnZXMgdGhhdCB1c2VzIHRoaXMgaWYgeW91IGJ1aWxkCisgICAgICAgIGN1cmwgdG8gYWxzbyBsaW5rIGFuZCB1c2UgYW55IE9yaWdpbmFsIEJTRCBsaWNlbnNlZCBsaWJyYXJpZXMhCisKK2Zib3BlbnNzbAorCisgICAgICAgIChVc2VkIGZvciBTUE5FR08gc3VwcG9ydCkgVW5jbGVhciBsaWNlbnNlLiBCYXNlZCBvbiBpdHMgbmFtZSwgSSBhc3N1bWUKKyAgICAgICAgdGhhdCBpdCB1c2VzIHRoZSBPcGVuU1NMIGxpY2Vuc2UgYW5kIHRodXMgc2hhcmVzIHRoZSBzYW1lIGlzc3VlcyBhcworICAgICAgICBkZXNjcmliZWQgZm9yIE9wZW5TU0wgYWJvdmUuCisKK2xpYmlkbiAgaHR0cDovL2pvc2Vmc3Nvbi5vcmcvbGliaWRuLworCisgICAgICAgIChVc2VkIGZvciBJRE5BIHN1cHBvcnQpIFVzZXMgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICAgICAgTGljZW5zZSBbM10uIExHUEwgaXMgYSB2YXJpYXRpb24gb2YgR1BMIHdpdGggc2xpZ2h0bHkgbGVzcyBhZ2dyZXNzaXZlCisgICAgICAgICJjb3B5bGVmdCIuIFRoaXMgbGljZW5zZSByZXF1aXJlcyBtb3JlIHJlcXVpcmVtZW50cyB0byBiZSBtZXQgd2hlbgorICAgICAgICBkaXN0cmlidXRpbmcgYmluYXJpZXMsIHNlZSB0aGUgbGljZW5zZSBmb3IgZGV0YWlscy4gQWxzbyBub3RlIHRoYXQgaWYKKyAgICAgICAgeW91IGRpc3RyaWJ1dGUgYSBiaW5hcnkgdGhhdCBpbmNsdWRlcyB0aGlzIGxpYnJhcnksIHlvdSBtdXN0IGFsc28KKyAgICAgICAgaW5jbHVkZSB0aGUgZnVsbCBMR1BMIGxpY2Vuc2UgdGV4dC4gUGxlYXNlIHByb3Blcmx5IHBvaW50IG91dCB3aGF0CisgICAgICAgIHBhcnRzIG9mIHRoZSBkaXN0cmlidXRlZCBwYWNrYWdlIHRoYXQgdGhlIGxpY2Vuc2UgYWRkcmVzc2VzLgorCitPcGVuTERBUCBodHRwOi8vd3d3Lm9wZW5sZGFwLm9yZy9zb2Z0d2FyZS9yZWxlYXNlL2xpY2Vuc2UuaHRtbAorCisgICAgICAgIChVc2VkIGZvciBMREFQIHN1cHBvcnQpIFVzZXMgYSBNb2RpZmllZCBCU0Qtc3R5bGUgbGljZW5zZS4gU2luY2UKKyAgICAgICAgbGliY3VybCB1c2VzIE9wZW5MREFQIGFzIGEgc2hhcmVkIGxpYnJhcnkgb25seSwgSSBoYXZlIG5vdCBoZWFyZCBvZgorICAgICAgICBhbnlvbmUgdGhhdCBzaGlwcyBPcGVuTERBUCBsaW5rZWQgd2l0aCBsaWJjdXJsIGluIGFuIGFwcC4KKworbGlic3NoMiBodHRwOi8vd3d3LmxpYnNzaDIub3JnLworCisgICAgICAgIChVc2VkIGZvciBzY3AgYW5kIHNmdHAgc3VwcG9ydCkgbGlic3NoMiB1c2VzIGEgTW9kaWZpZWQgQlNELXN0eWxlCisgICAgICAgIGxpY2Vuc2UuCisKK1sxXSA9IEdQTCAtIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwKK1syXSA9IGh0dHA6Ly93d3cuZnNmLm9yZy9saWNlbnNlcy9ncGwtZmFxLmh0bWwjR1BMSW5jb21wYXRpYmxlTGlicyBkZXRhaWxzIG9uCisgICAgICBob3cgdG8gd3JpdGUgc3VjaCBhbiBleGNlcHRpb24gdG8gdGhlIEdQTAorWzNdID0gTEdQTCAtIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZToKKyAgICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9sZ3BsLmh0bWwKK1s0XSA9IE1QTCAtIE1vemlsbGEgUHVibGljIExpY2Vuc2U6CisgICAgICBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvTUFJTC1FVElRVUVUVEUgYi9jdXJsLTcuMjUuMC9kb2NzL01BSUwtRVRJUVVFVFRFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhM2I1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL01BSUwtRVRJUVVFVFRFCkBAIC0wLDAgKzEsMjEzIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorCitNQUlMIEVUSVFVRVRURQorCisgMS4gQWJvdXQgdGhlIGxpc3RzCisgIDEuMSBNYWlsaW5nIExpc3RzCisgIDEuMiBOZXRpcXVldHRlCisgIDEuMyBEbyBOb3QgTWFpbCBhIFNpbmdsZSBJbmRpdmlkdWFsCisgIDEuNCBTdWJzY3JpcHRpb24gUmVxdWlyZWQKKyAgMS41IE1vZGVyYXRpb24gb2YgbmV3IHBvc3RlcnMKKyAgMS42IEhhbmRsaW5nIHRyb2xscyBhbmQgc3BhbQorCisgMi4gU2VuZGluZyBtYWlsCisgIDIuMSBSZXBseSBvciBOZXcgTWFpbAorICAyLjIgUmVwbHkgdG8gdGhlIExpc3QKKyAgMi4zIFVzZSBhIFNlbnNpYmxlIFN1YmplY3QKKyAgMi40IERvIE5vdCBUb3AtUG9zdAorICAyLjUgSFRNTCBpcyBub3QgZm9yIG1haWxzCisgIDIuNiBRdW90aW5nCisgIDIuNyBEaWdlc3QKKyAgMi44IFBsZWFzZSBUZWxsIFVzIEhvdyBZb3UgU29sdmVkIFRoZSBQcm9ibGVtIQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gQWJvdXQgdGhlIGxpc3RzCisKKyAgMS4xIE1haWxpbmcgTGlzdHMKKworICBUaGUgbWFpbGluZyBsaXN0cyB3ZSBoYXZlIGFyZSBhbGwgbGlzdGVkIGFuZCBkZXNjcmliZWQgYXQKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsLworCisgIEVhY2ggbWFpbGluZyBsaXN0IGlzIHRhcmdldGVkIHRvIGEgc3BlY2lmaWMgc2V0IG9mIHVzZXJzIGFuZCBzdWJqZWN0cywKKyAgcGxlYXNlIHVzZSB0aGUgb25lIG9yIHRoZSBvbmVzIHRoYXQgc3VpdCB5b3UgdGhlIG1vc3QuCisKKyAgRWFjaCBtYWlsaW5nIGxpc3QgaGF2ZSBodW5kcmVkcyB1cCB0byB0aG91c2FuZHMgb2YgcmVhZGVycywgbWVhbmluZyB0aGF0CisgIGVhY2ggbWFpbCBzZW50IHdpbGwgYmUgcmVjZWl2ZWQgYW5kIHJlYWQgYnkgYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBwZW9wbGUuCisgIFBlb3BsZSBmcm9tIHZhcmlvdXMgY3VsdHVyZXMsIHJlZ2lvbnMsIHJlbGlnaW9ucyBhbmQgY29udGluZW50cy4KKworICAxLjIgTmV0aXF1ZXR0ZQorCisgIE5ldGlxdWV0dGUgaXMgYSBjb21tb24gbmFtZSBmb3IgaG93IHRvIGJlaGF2ZSBvbiB0aGUgaW50ZXJuZXQuIE9mIGNvdXJzZSwgaW4KKyAgZWFjaCBwYXJ0aWN1bGFyIGdyb3VwIGFuZCBzdWJjdWx0dXJlIHRoZXJlIHdpbGwgYmUgZGlmZmVyZW5jZXMgaW4gd2hhdCBpcworICBhY2NlcHRhYmxlIGFuZCB3aGF0IGlzIGNvbnNpZGVyZWQgZ29vZCBtYW5uZXJzLgorCisgIFRoaXMgZG9jdW1lbnQgb3V0bGluZXMgd2hhdCB3ZSBpbiB0aGUgY1VSTCBwcm9qZWN0IGNvbnNpZGVycyB0byBiZSBnb29kCisgIGV0aXF1ZXR0ZSwgYW5kIHByaW1hcmlseSB0aGlzIGZvY3VzIG9uIGhvdyB0byBiZWhhdmUgb24gYW5kIGhvdyB0byB1c2Ugb3VyCisgIG1haWxpbmcgbGlzdHMuCisKKyAgMS4zIERvIE5vdCBNYWlsIGEgU2luZ2xlIEluZGl2aWR1YWwKKworICBNYW55IHBlb3BsZSBzZW5kIG9uZSBxdWVzdGlvbiB0byBvbmUgcGVyc29uLiBPbmUgcGVyc29uIGdldHMgbWFueSBtYWlscywgYW5kCisgIHRoZXJlIGlzIG9ubHkgb25lIHBlcnNvbiB3aG8gY2FuIGdpdmUgeW91IGEgcmVwbHkuIFRoZSBxdWVzdGlvbiBtYXkgYmUKKyAgc29tZXRoaW5nIHRoYXQgb3RoZXIgcGVvcGxlIGFyZSBhbHNvIHdhbnRpbmcgdG8gYXNrLiBUaGVzZSBvdGhlciBwZW9wbGUgaGF2ZQorICBubyB3YXkgdG8gcmVhZCB0aGUgcmVwbHksIGJ1dCB0byBhc2sgdGhlIG9uZSBwZXJzb24gdGhlIHF1ZXN0aW9uLiBUaGUgb25lCisgIHBlcnNvbiBjb25zZXF1ZW50bHkgZ2V0cyBvdmVybG9hZGVkIHdpdGggbWFpbC4KKworICBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGFjdCBhbiBpbmRpdmlkdWFsIGFuZCBwZXJoYXBzIHBheSBmb3IgaGlzIG9yIGhlcidzCisgIHNlcnZpY2VzLCBieSBhbGwgbWVhbnMgZ28gYWhlYWQsIGJ1dCBpZiBpdCdzIGp1c3QgYW5vdGhlciBjdXJsIHF1ZXN0aW9uLAorICB0YWtlIGl0IHRvIGEgc3VpdGFibGUgbGlzdCBpbnN0ZWFkLgorCisgIDEuNCBTdWJzY3JpcHRpb24gUmVxdWlyZWQKKworICBBbGwgY3VybCBtYWlsaW5nIGxpc3RzIHJlcXVpcmUgdGhhdCB5b3UgYXJlIHN1YnNjcmliZWQgdG8gYWxsb3cgYSBtYWlsIHRvIGdvCisgIHRocm91Z2ggdG8gYWxsIHRoZSBzdWJzY3JpYmVycy4KKworICBJZiB5b3UgcG9zdCB3aXRob3V0IGJlaW5nIHN1YnNjcmliZWQgKG9yIGZyb20gYSBkaWZmZXJlbnQgbWFpbCBhZGRyZXNzIHRoYW4KKyAgdGhlIG9uZSB5b3UgYXJlIHN1YnNjcmliZWQgd2l0aCksIHlvdXIgbWFpbCB3aWxsIHNpbXBseSBiZSBzaWxlbnRseQorICBkaXNjYXJkZWQuIFlvdSBoYXZlIHRvIHN1YnNjcmliZSBmaXJzdCwgdGhlbiBwb3N0LgorCisgIFRoZSByZWFzb24gZm9yIHRoaXMgdW5mb3J0dW5hdGUgYW5kIHN0cmljdCBzdWJzY3JpcHRpb24gcG9saWN5IGlzIG9mIGNvdXJzZQorICB0byBzdG9wIHNwYW0gZnJvbSBwZXN0ZXJpbmcgdGhlIGxpc3RzLgorCisgIDEuNSBNb2RlcmF0aW9uIG9mIG5ldyBwb3N0ZXJzCisKKyAgU2V2ZXJhbCBvZiB0aGUgY3VybCBtYWlsaW5nIGxpc3RzIGF1dG9tYXRpY2FsbHkgbWFrZSBhbGwgcG9zdHMgZnJvbSBuZXcKKyAgc3Vic2NyaWJlcnMgcmVxdWlyZSBtb2RlcmF0aW9uLiBUaGlzIG1lYW5zIHRoYXQgYWZ0ZXIgeW91J3ZlIHN1YnNjcmliZWQgYW5kCisgIHNlbmQgeW91ciBmaXJzdCBtYWlsIHRvIGEgbGlzdCwgdGhhdCBtYWlsIHdpbGwgbm90IGJlIGxldCB0aHJvdWdoIHRvIHRoZQorICBsaXN0IHVudGlsIGEgbWFpbGluZyBsaXN0IGFkbWluaXN0cmF0b3IgaGFzIHZlcmlmaWVkIHRoYXQgaXQgaXMgT0sgYW5kCisgIHBlcm1pdHMgaXQgdG8gZ2V0IHBvc3RlZC4KKworICBPbmNlIGEgZmlyc3QgcG9zdCBoYXMgYmVlbiBtYWRlIHRoYXQgcHJvdmVzIHRoZSBzZW5kZXIgaXMgYWN0dWFsbHkgdGFsa2luZworICBhYm91dCBjdXJsLXJlbGF0ZWQgc3ViamVjdHMsIHRoZSBtb2RlcmF0aW9uICJmbGFnIiB3aWxsIGJlIHN3aXRjaGVkIG9mZiBhbmQKKyAgZnV0dXJlIHBvc3RzIHdpbGwgZ28gdGhyb3VnaCB3aXRob3V0IGJlaW5nIG1vZGVyYXRlZC4KKworICBUaGUgcmVhc29uIGZvciB0aGlzIG1vZGVyYXRpb24gcG9saWN5IGlzIHRoYXQgd2UgZG8gc3VmZmVyIGZyb20gc3BhbW1lcnMgd2hvCisgIGFjdHVhbGx5IHN1YnNjcmliZSBhbmQgc2VuZCBzcGFtIHRvIG91ciBsaXN0cy4KKworICAxLjYgSGFuZGxpbmcgdHJvbGxzIGFuZCBzcGFtCisKKyAgRGVzcGl0ZSBvdXIgZ29vZCBpbnRlbnNpb25zIGFuZCBoYXJkIHdvcmsgdG8ga2VlcCBzcGFtIG9mZiB0aGUgbGlzdHMgYW5kIHRvCisgIG1haW50YWluIGEgZnJpZW5kbHkgYW5kIHBvc2l0aXZlIGF0bW9zcGhlcmUsIHRoZXJlIHdpbGwgYmUgdGltZXMgd2hlbiBzcGFtCisgIGFuZCBvciB0cm9sbHMgZ2V0IHRocm91Z2guCisKKyAgVHJvbGwgLSAic29tZW9uZSB3aG8gcG9zdHMgaW5mbGFtbWF0b3J5LCBleHRyYW5lb3VzLCBvciBvZmYtdG9waWMgbWVzc2FnZXMKKyAgaW4gYW4gb25saW5lIGNvbW11bml0eSIKKworICBTcGFtIC0gInVzZSBvZiBlbGVjdHJvbmljIG1lc3NhZ2luZyBzeXN0ZW1zIHRvIHNlbmQgdW5zb2xpY2l0ZWQgYnVsaworICBtZXNzYWdlcyIKKworICBObyBtYXR0ZXIgd2hhdCwgd2UgTkVWRVIgRVZFUiByZXNwb25kIHRvIHRyb2xscyBvciBzcGFtbWVycyBvbiB0aGUgbGlzdC4gSWYKKyAgeW91IGJlbGlldmUgdGhlIGxpc3QgYWRtaW4gc2hvdWxkIGRvIHNvbWV0aGluZyBwYXJ0aWN1bGFyLCBjb250YWN0IGhpbS9oZXIKKyAgb2ZmLWxpc3QuIFRoZSBzdWJqZWN0IHdpbGwgYmUgdGFrZW4gY2FyZSBvZiBhcyBnb29kIGFzIHBvc3NpYmxlIHRvIHByZXZlbnQKKyAgcmVwZWF0ZWQgb2ZmZW5jZXMsIGJ1dCByZXNwb25kaW5nIG9uIHRoZSBsaXN0IHRvIHN1Y2ggbWVzc2FnZXMgbmV2ZXIgbGVhZCB0bworICBhbnl0aGluZyBnb29kIGFuZCBvbmx5IHB1dHMgdGhlIGxpZ2h0IGV2ZW4gbW9yZSBvbiB0aGUgb2ZmZW5kZXI6IHdoaWNoIHdhcworICB0aGUgZW50aXJlIHB1cnBvc2Ugb2YgaXQgZ2V0dGluZyB0byB0aGUgbGlzdCBpbiB0aGUgZmlyc3QgcGxhY2UuCisKKyAgRG9uJ3QgZmVlZCB0aGUgdHJvbGxzIQorCisKKzIuIFNlbmRpbmcgbWFpbAorCisgIDIuMSBSZXBseSBvciBOZXcgTWFpbAorCisgIFBsZWFzZSBkbyBub3QgcmVwbHkgdG8gYW4gZXhpc3RpbmcgbWVzc2FnZSBhcyBhIHNob3J0LWN1dCB0byBwb3N0IGEgbWVzc2FnZQorICB0byB0aGUgbGlzdHMuCisKKyAgTWFueSBtYWlsIHByb2dyYW1zIGFuZCB3ZWIgYXJjaGl2ZXJzIHVzZSBpbmZvcm1hdGlvbiB3aXRoaW4gbWFpbHMgdG8ga2VlcAorICB0aGVtIHRvZ2V0aGVyIGFzICJ0aHJlYWRzIiwgYXMgY29sbGVjdGlvbnMgb2YgcG9zdHMgdGhhdCBkaXNjdXNzIGEgY2VydGFpbgorICBzdWJqZWN0LiBJZiB5b3UgZG9uJ3QgaW50ZW5kIHRvIHJlcGx5IG9uIHRoZSBzYW1lIG9yIHNpbWlsYXIgc3ViamVjdCwgZG9uJ3QKKyAganVzdCBoaXQgcmVwbHkgb24gYW4gZXhpc3RpbmcgbWFpbCBhbmQgY2hhbmdlIHN1YmplY3QsIGNyZWF0ZSBhIG5ldyBtYWlsLgorCisgIDIuMiBSZXBseSB0byB0aGUgTGlzdAorCisgIFdoZW4gcmVwbHlpbmcgdG8gYSBtZXNzYWdlIGZyb20gdGhlIGxpc3QsIG1ha2Ugc3VyZSB0aGF0IHlvdSBkbyAiZ3JvdXAKKyAgcmVwbHkiIG9yICJyZXBseSB0byBhbGwiLCBhbmQgbm90IGp1c3QgcmVwbHkgdG8gdGhlIGF1dGhvciBvZiB0aGUgc2luZ2xlCisgIG1haWwgeW91IHJlcGx5IHRvLgorCisgIFdlJ3JlIGFjdGl2ZWx5IGRpc2NvdXJhZ2luZyByZXBseWluZyBiYWNrIHRvIHRoZSBzaW5nbGUgcGVyc29uIGJ5IHNldHRpbmcKKyAgdGhlIFJlcGx5LVRvOiBmaWVsZCBpbiBvdXRnb2luZyBtYWlscyBiYWNrIHRvIHRoZSBtYWlsaW5nIGxpc3QgYWRkcmVzcywKKyAgbWFraW5nIGl0IGhhcmRlciBmb3IgcGVvcGxlIHRvIG1haWwgdGhlIGF1dGhvciBvbmx5IGJ5IG1pc3Rha2UuCisKKyAgMi4zIFVzZSBhIFNlbnNpYmxlIFN1YmplY3QKKworICBQbGVhc2UgdXNlIGEgc3ViamVjdCBvZiB0aGUgbWFpbCB0aGF0IG1ha2VzIHNlbnNlIGFuZCB0aGF0IGlzIHJlbGF0ZWQgdG8gdGhlCisgIGNvbnRlbnRzIG9mIHlvdXIgbWFpbC4gSXQgbWFrZXMgaXQgYSBsb3QgZWFzaWVyIHRvIGZpbmQgeW91ciBtYWlsIGFmdGVyd2FyZHMKKyAgYW5kIGl0IG1ha2VzIGl0IGVhc2llciB0byB0cmFjayBtYWlsIHRocmVhZHMgYW5kIHRvcGljcy4KKworICAyLjQgRG8gTm90IFRvcC1Qb3N0CisKKyAgSWYgeW91IHJlcGx5IHRvIGEgbWVzc2FnZSwgZG9uJ3QgdXNlIHRvcC1wb3N0aW5nLiBUb3AtcG9zdGluZyBpcyB3aGVuIHlvdQorICB3cml0ZSB0aGUgbmV3IHRleHQgYXQgdGhlIHRvcCBvZiBhIG1haWwgYW5kIHlvdSBpbnNlcnQgdGhlIHByZXZpb3VzIHF1b3RlZAorICBtYWlsIGNvbnZlcnNhdGlvbiBiZWxvdy4gSXQgZm9yY2VzIHVzZXJzIHRvIHJlYWQgdGhlIG1haWwgaW4gYSBiYWNrd2FyZHMKKyAgb3JkZXIgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCBpdC4KKworICBUaGlzIGlzIHdoeSB0b3AgcG9zdGluZyBpcyBzbyBiYWQ6CisKKyAgICAgIEE6IEJlY2F1c2UgaXQgbWVzc2VzIHVwIHRoZSBvcmRlciBpbiB3aGljaCBwZW9wbGUgbm9ybWFsbHkgcmVhZAorICAgICAgICAgdGV4dC4KKyAgICAgIFE6IFdoeSBpcyB0b3AtcG9zdGluZyBzdWNoIGEgYmFkIHRoaW5nPworICAgICAgQTogVG9wLXBvc3RpbmcuCisgICAgICBROiBXaGF0IGlzIHRoZSBtb3N0IGFubm95aW5nIHRoaW5nIGluIGUtbWFpbD8KKworICBBcGFydCBmcm9tIHRoZSBzY3Jld2VkIHVwIHJlYWQgb3JkZXIgKGVzcGVjaWFsbHkgd2hlbiBtaXhlZCB0b2dldGhlciBpbiBhCisgIHRocmVhZCB3aGVuIHNvbWUgcmVzcG9uZHMgZG9pbmcgdGhlIG1hbmRhZGVkIGJvdHRvbS1wb3N0aW5nIHN0eWxlKSwgaXQgYWxzbworICBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIG9ubHkgcGFydHMgb2YgdGhlIG9yaWdpbmFsIG1haWwuCisKKyAgV2hlbiB5b3UgcmVwbHkgdG8gYSBtYWlsLiBZb3UgbGV0IHRoZSBtYWlsIGNsaWVudCBpbnNlcnQgdGhlIHByZXZpb3VzIG1haWwKKyAgcXVvdGVkLiBUaGVuIHlvdSBwdXQgdGhlIGN1cnNvciBvbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgbWFpbCBhbmQgeW91IG1vdmUKKyAgZG93biB0aHJvdWdoIHRoZSBtYWlsLCBkZWxldGluZyBhbGwgcGFydHMgb2YgdGhlIHF1b3RlcyB0aGF0IGRvbid0IGFkZAorICBjb250ZXh0IGZvciB5b3VyIGNvbW1lbnRzLiBXaGVuIHlvdSB3YW50IHRvIGFkZCBhIGNvbW1lbnQgeW91IGRvIHNvLCBpbmxpbmUsCisgIHJpZ2h0IGFmdGVyIHRoZSBxdW90ZXMgdGhhdCByZWxhdGUgdG8geW91ciBjb21tZW50LiBUaGVuIHlvdSBjb250aW51ZQorICBkb3dud2FyZHMgYWdhaW4uCisKKyAgV2hlbiBtb3N0IG9mIHRoZSBxdW90ZXMgaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIHlvdSd2ZSBhZGRlZCB5b3VyIG93biB3b3JkcywKKyAgeW91J3JlIGRvbmUhCisKKyAgMi41IEhUTUwgaXMgbm90IGZvciBtYWlscworCisgIFBsZWFzZSBzd2l0Y2ggb2ZmIHRob3NlIEhUTUwgZW5jb2RlZCBtZXNzYWdlcy4gWW91IGNhbiBtYWlsIGFsbCB0aG9zZSBmdW5ueQorICBtYWlscyB0byB5b3VyIGZyaWVuZHMuIFdlIHNwZWFrIHBsYWluIHRleHQgbWFpbHMuCisKKyAgMi42IFF1b3RpbmcKKworICBRdW90ZSBhcyBsaXR0bGUgYXMgcG9zc2libGUuIEp1c3QgZW5vdWdoIHRvIHByb3ZpZGUgdGhlIGNvbnRleHQgeW91IGNhbm5vdAorICBsZWF2ZSBvdXQuIEEgbGVuZ3RoeSBkZXNjcmlwdGlvbiBjYW4gYmUgZm91bmQgaGVyZToKKworICAgICAgaHR0cDovL3d3dy5uZXRtZWlzdGVyLm9yZy9uZXdzL2xlYXJuMnF1b3RlLmh0bWwKKworICAyLjcgRGlnZXN0CisKKyAgV2UgYWxsb3cgc3Vic2NyaWJlcnMgdG8gc3Vic2NyaWJlIHRvIHRoZSAiZGlnZXN0IiB2ZXJzaW9uIG9mIHRoZSBtYWlsaW5nCisgIGxpc3RzLiBBIGRpZ2VzdCBpcyBhIGNvbGxlY3Rpb24gb2YgbWFpbHMgbHVtcGVkIHRvZ2V0aGVyIGluIG9uZSBzaW5nbGUgbWFpbC4KKworICBTaG91bGQgeW91IGRlY2lkZSB0byByZXBseSB0byBhIG1haWwgc2VudCBvdXQgYXMgYSBkaWdlc3QsIHRoZXJlIGFyZSB0d28KKyAgdGhpbmdzIHlvdSBNVVNUIGNvbnNpZGVyIGlmIHlvdSByZWFsbHkgcmVhbGx5IGNhbm5vdCBzdWJzY3JpYmUgbm9ybWFsbHkKKyAgaW5zdGVhZDoKKworICBDdXQgb2ZmIGFsbCBtYWlscyBhbmQgY2hhdHRlciB0aGF0IGlzIG5vdCByZWxhdGVkIHRvIHRoZSBtYWlsIHlvdSB3YW50IHRvCisgIHJlcGx5IHRvLgorCisgIENoYW5nZSB0aGUgc3ViamVjdCBuYW1lIHRvIHNvbWV0aGluZyBzZW5zaWJsZSBhbmQgcmVsYXRlZCB0byB0aGUgc3ViamVjdCwKKyAgcHJlZmVyYWJseSBldmVuIHRoZSBhY3R1YWwgc3ViamVjdCBvZiB0aGUgc2luZ2xlIG1haWwgeW91IHdhbnRlZCB0byByZXBseSB0bworCisgIDIuOCBQbGVhc2UgVGVsbCBVcyBIb3cgWW91IFNvbHZlZCBUaGUgUHJvYmxlbSEKKworICBNYW55IHBlb3BsZSBtYWlsIHF1ZXN0aW9ucyB0byB0aGUgbGlzdCwgcGVvcGxlIHNwZW5kIHNvbWUgb2YgdGhlaXIgdGltZSBhbmQKKyAgbWFrZSBhbiBlZmZvcnQgaW4gcHJvdmlkaW5nIGdvb2QgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMuCisKKyAgSWYgeW91IGFyZSB0aGUgb25lIHdobyBhc2tzLCBwbGVhc2UgY29uc2lkZXIgcmVzcG9uZGluZyBvbmNlIG1vcmUgaW4gY2FzZQorICBvbmUgb2YgdGhlIGhpbnRzIHdhcyB3aGF0IHNvbHZlZCB5b3VyIHByb2JsZW1zLiBUaGUgZ3V5cyB3aG8gd3JpdGUgYW5zd2VycworICBmZWVsIGdvb2QgdG8ga25vdyB0aGF0IHRoZXkgcHJvdmlkZWQgYSBnb29kIGFuc3dlciBhbmQgdGhhdCB5b3UgZml4ZWQgdGhlCisgIHByb2JsZW0uIEZhciB0b28gb2Z0ZW4sIHRoZSBwZXJzb24gd2hvIGFza2VkIHRoZSBxdWVzdGlvbiBpcyBuZXZlciBoZWFyZCBvZgorICBhZ2FpbiwgYW5kIHdlIG5ldmVyIGdldCB0byBrbm93IGlmIGhlL3NoZSBpcyBnb25lIGJlY2F1c2UgdGhlIHByb2JsZW0gd2FzCisgIHNvbHZlZCBvciBwZXJoYXBzIGJlY2F1c2UgdGhlIHByb2JsZW0gd2FzIHVuc29sdmFibGUhCisKKyAgR2V0dGluZyB0aGUgc29sdXRpb24gcG9zdGVkIGFsc28gaGVscHMgb3RoZXIgdXNlcnMgdGhhdCBleHBlcmllbmNlIHRoZSBzYW1lCisgIHByb2JsZW0ocykuIFRoZXkgZ2V0IHRvIHNlZSAocG9zc2libHkgaW4gdGhlIHdlYiBhcmNoaXZlcykgdGhhdCB0aGUKKyAgc3VnZ2VzdGVkIGZpeGVzIGFjdHVhbGx5IGhhcyBoZWxwZWQgYXQgbGVhc3Qgb25lIHBlcnNvbi4KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9NQU5VQUwgYi9jdXJsLTcuMjUuMC9kb2NzL01BTlVBTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTA3MzEwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9NQU5VQUwKQEAgLTAsMCArMSw5OTEgQEAKK0xBVEVTVCBWRVJTSU9OCisKKyAgWW91IGFsd2F5cyBmaW5kIG5ld3MgYWJvdXQgd2hhdCdzIGdvaW5nIG9uIGFzIHdlbGwgYXMgdGhlIGxhdGVzdCB2ZXJzaW9ucworICBmcm9tIHRoZSBjdXJsIHdlYiBwYWdlcywgbG9jYXRlZCBhdDoKKworICAgICAgICBodHRwOi8vY3VybC5oYXh4LnNlCisKK1NJTVBMRSBVU0FHRQorCisgIEdldCB0aGUgbWFpbiBwYWdlIGZyb20gTmV0c2NhcGUncyB3ZWItc2VydmVyOgorCisgICAgICAgIGN1cmwgaHR0cDovL3d3dy5uZXRzY2FwZS5jb20vCisKKyAgR2V0IHRoZSBSRUFETUUgZmlsZSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGF0IGZ1bmV0J3MgZnRwLXNlcnZlcjoKKworICAgICAgICBjdXJsIGZ0cDovL2Z0cC5mdW5ldC5maS9SRUFETUUKKworICBHZXQgYSB3ZWIgcGFnZSBmcm9tIGEgc2VydmVyIHVzaW5nIHBvcnQgODAwMDoKKworICAgICAgICBjdXJsIGh0dHA6Ly93d3cud2VpcmRzZXJ2ZXIuY29tOjgwMDAvCisKKyAgR2V0IGEgbGlzdCBvZiBhIGRpcmVjdG9yeSBvZiBhbiBGVFAgc2l0ZToKKworICAgICAgICBjdXJsIGZ0cDovL2Nvb2wuaGF4eC5zZS8KKworICBHZXQgdGhlIGRlZmluaXRpb24gb2YgY3VybCBmcm9tIGEgZGljdGlvbmFyeToKKworICAgICAgICBjdXJsIGRpY3Q6Ly9kaWN0Lm9yZy9tOmN1cmwKKworICBGZXRjaCB0d28gZG9jdW1lbnRzIGF0IG9uY2U6CisKKyAgICAgICAgY3VybCBmdHA6Ly9jb29sLmhheHguc2UvIGh0dHA6Ly93d3cud2VpcmRzZXJ2ZXIuY29tOjgwMDAvCisKKyAgR2V0IGEgZmlsZSBvZmYgYW4gRlRQUyBzZXJ2ZXI6CisKKyAgICAgICAgY3VybCBmdHBzOi8vZmlsZXMuYXJlLnNlY3VyZS5jb20vc2VjcmV0cy50eHQKKworICBvciB1c2UgdGhlIG1vcmUgYXBwcm9wcmlhdGUgRlRQUyB3YXkgdG8gZ2V0IHRoZSBzYW1lIGZpbGU6CisKKyAgICAgICAgY3VybCAtLWZ0cC1zc2wgZnRwOi8vZmlsZXMuYXJlLnNlY3VyZS5jb20vc2VjcmV0cy50eHQKKworICBHZXQgYSBmaWxlIGZyb20gYW4gU1NIIHNlcnZlciB1c2luZyBTRlRQOgorCisgICAgICAgIGN1cmwgLXUgdXNlcm5hbWUgc2Z0cDovL3NoZWxsLmV4YW1wbGUuY29tL2V0Yy9pc3N1ZQorCisgIEdldCBhIGZpbGUgZnJvbSBhbiBTU0ggc2VydmVyIHVzaW5nIFNDUCB1c2luZyBhIHByaXZhdGUga2V5IHRvIGF1dGhlbnRpY2F0ZToKKworICAgICAgICBjdXJsIC11IHVzZXJuYW1lOiAtLWtleSB+Ly5zc2gvaWRfZHNhIC0tcHVia2V5IH4vLnNzaC9pZF9kc2EucHViIFwKKyAgICAgICAgICAgIHNjcDovL3NoZWxsLmV4YW1wbGUuY29tL34vcGVyc29uYWwudHh0CisKKyAgR2V0IHRoZSBtYWluIHBhZ2UgZnJvbSBhbiBJUHY2IHdlYiBzZXJ2ZXI6CisKKyAgICAgICAgY3VybCAtZyAiaHR0cDovL1syMDAxOjE4OTA6MTExMjoxOjoyMF0vIgorCitET1dOTE9BRCBUTyBBIEZJTEUKKworICBHZXQgYSB3ZWIgcGFnZSBhbmQgc3RvcmUgaW4gYSBsb2NhbCBmaWxlOgorCisgICAgICAgIGN1cmwgLW8gdGhhdHBhZ2UuaHRtbCBodHRwOi8vd3d3Lm5ldHNjYXBlLmNvbS8KKworICBHZXQgYSB3ZWIgcGFnZSBhbmQgc3RvcmUgaW4gYSBsb2NhbCBmaWxlLCBtYWtlIHRoZSBsb2NhbCBmaWxlIGdldCB0aGUgbmFtZQorICBvZiB0aGUgcmVtb3RlIGRvY3VtZW50IChpZiBubyBmaWxlIG5hbWUgcGFydCBpcyBzcGVjaWZpZWQgaW4gdGhlIFVSTCwgdGhpcworICB3aWxsIGZhaWwpOgorCisgICAgICAgIGN1cmwgLU8gaHR0cDovL3d3dy5uZXRzY2FwZS5jb20vaW5kZXguaHRtbAorCisgIEZldGNoIHR3byBmaWxlcyBhbmQgc3RvcmUgdGhlbSB3aXRoIHRoZWlyIHJlbW90ZSBuYW1lczoKKworICAgICAgICBjdXJsIC1PIHd3dy5oYXh4LnNlL2luZGV4Lmh0bWwgLU8gY3VybC5oYXh4LnNlL2Rvd25sb2FkLmh0bWwKKworVVNJTkcgUEFTU1dPUkRTCisKKyBGVFAKKworICAgVG8gZnRwIGZpbGVzIHVzaW5nIG5hbWUrcGFzc3dkLCBpbmNsdWRlIHRoZW0gaW4gdGhlIFVSTCBsaWtlOgorCisgICAgICAgIGN1cmwgZnRwOi8vbmFtZTpwYXNzd2RAbWFjaGluZS5kb21haW46cG9ydC9mdWxsL3BhdGgvdG8vZmlsZQorCisgICBvciBzcGVjaWZ5IHRoZW0gd2l0aCB0aGUgLXUgZmxhZyBsaWtlCisKKyAgICAgICAgY3VybCAtdSBuYW1lOnBhc3N3ZCBmdHA6Ly9tYWNoaW5lLmRvbWFpbjpwb3J0L2Z1bGwvcGF0aC90by9maWxlCisKKyBGVFBTCisKKyAgIEl0IGlzIGp1c3QgbGlrZSBmb3IgRlRQLCBidXQgeW91IG1heSBhbHNvIHdhbnQgdG8gc3BlY2lmeSBhbmQgdXNlCisgICBTU0wtc3BlY2lmaWMgb3B0aW9ucyBmb3IgY2VydGlmaWNhdGVzIGV0Yy4KKworICAgTm90ZSB0aGF0IHVzaW5nIEZUUFM6Ly8gYXMgcHJlZml4IGlzIHRoZSAiaW1wbGljaXQiIHdheSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICBzdGFuZGFyZHMgd2hpbGUgdGhlIHJlY29tbWVuZGVkICJleHBsaWNpdCIgd2F5IGlzIGRvbmUgYnkgdXNpbmcgRlRQOi8vIGFuZAorICAgdGhlIC0tZnRwLXNzbCBvcHRpb24uCisKKyBTRlRQIC8gU0NQCisKKyAgIFRoaXMgaXMgc2ltaWxhciB0byBGVFAsIGJ1dCB5b3UgY2FuIHNwZWNpZnkgYSBwcml2YXRlIGtleSB0byB1c2UgaW5zdGVhZCBvZgorICAgYSBwYXNzd29yZC4gTm90ZSB0aGF0IHRoZSBwcml2YXRlIGtleSBtYXkgaXRzZWxmIGJlIHByb3RlY3RlZCBieSBhIHBhc3N3b3JkCisgICB0aGF0IGlzIHVucmVsYXRlZCB0byB0aGUgbG9naW4gcGFzc3dvcmQgb2YgdGhlIHJlbW90ZSBzeXN0ZW0uICBJZiB5b3UKKyAgIHByb3ZpZGUgYSBwcml2YXRlIGtleSBmaWxlIHlvdSBtdXN0IGFsc28gcHJvdmlkZSBhIHB1YmxpYyBrZXkgZmlsZS4KKworIEhUVFAKKworICAgQ3VybCBhbHNvIHN1cHBvcnRzIHVzZXIgYW5kIHBhc3N3b3JkIGluIEhUVFAgVVJMcywgdGh1cyB5b3UgY2FuIHBpY2sgYSBmaWxlCisgICBsaWtlOgorCisgICAgICAgIGN1cmwgaHR0cDovL25hbWU6cGFzc3dkQG1hY2hpbmUuZG9tYWluL2Z1bGwvcGF0aC90by9maWxlCisKKyAgIG9yIHNwZWNpZnkgdXNlciBhbmQgcGFzc3dvcmQgc2VwYXJhdGVseSBsaWtlIGluCisKKyAgICAgICAgY3VybCAtdSBuYW1lOnBhc3N3ZCBodHRwOi8vbWFjaGluZS5kb21haW4vZnVsbC9wYXRoL3RvL2ZpbGUKKworICAgSFRUUCBvZmZlcnMgbWFueSBkaWZmZXJlbnQgbWV0aG9kcyBvZiBhdXRoZW50aWNhdGlvbiBhbmQgY3VybCBzdXBwb3J0cworICAgc2V2ZXJhbDogQmFzaWMsIERpZ2VzdCwgTlRMTSBhbmQgTmVnb3RpYXRlLiBXaXRob3V0IHRlbGxpbmcgd2hpY2ggbWV0aG9kIHRvCisgICB1c2UsIGN1cmwgZGVmYXVsdHMgdG8gQmFzaWMuIFlvdSBjYW4gYWxzbyBhc2sgY3VybCB0byBwaWNrIHRoZSBtb3N0IHNlY3VyZQorICAgb25lcyBvdXQgb2YgdGhlIG9uZXMgdGhhdCB0aGUgc2VydmVyIGFjY2VwdHMgZm9yIHRoZSBnaXZlbiBVUkwsIGJ5IHVzaW5nCisgICAtLWFueWF1dGguCisKKyAgIE5PVEUhIFNpbmNlIEhUVFAgVVJMcyBkb24ndCBzdXBwb3J0IHVzZXIgYW5kIHBhc3N3b3JkLCB5b3UgY2FuJ3QgdXNlIHRoYXQKKyAgIHN0eWxlIHdoZW4gdXNpbmcgQ3VybCB2aWEgYSBwcm94eS4gWW91IF9tdXN0XyB1c2UgdGhlIC11IHN0eWxlIGZldGNoCisgICBkdXJpbmcgc3VjaCBjaXJjdW1zdGFuY2VzLgorCisgSFRUUFMKKworICAgUHJvYmFibHkgbW9zdCBjb21tb25seSB1c2VkIHdpdGggcHJpdmF0ZSBjZXJ0aWZpY2F0ZXMsIGFzIGV4cGxhaW5lZCBiZWxvdy4KKworUFJPWFkKKworIGN1cmwgc3VwcG9ydHMgYm90aCBIVFRQIGFuZCBTT0NLUyBwcm94eSBzZXJ2ZXJzLCB3aXRoIG9wdGlvbmFsIGF1dGhlbnRpY2F0aW9uLgorIEl0IGRvZXMgbm90IGhhdmUgc3BlY2lhbCBzdXBwb3J0IGZvciBGVFAgcHJveHkgc2VydmVycyBzaW5jZSB0aGVyZSBhcmUgbm8KKyBzdGFuZGFyZHMgZm9yIHRob3NlLCBidXQgaXQgY2FuIHN0aWxsIGJlIG1hZGUgdG8gd29yayB3aXRoIG1hbnkgb2YgdGhlbS4gWW91CisgY2FuIGFsc28gdXNlIGJvdGggSFRUUCBhbmQgU09DS1MgcHJveGllcyB0byB0cmFuc2ZlciBmaWxlcyB0byBhbmQgZnJvbSBGVFAKKyBzZXJ2ZXJzLgorCisgR2V0IGFuIGZ0cCBmaWxlIHVzaW5nIGFuIEhUVFAgcHJveHkgbmFtZWQgbXktcHJveHkgdGhhdCB1c2VzIHBvcnQgODg4OgorCisgICAgICAgIGN1cmwgLXggbXktcHJveHk6ODg4IGZ0cDovL2Z0cC5sZWFjaHNpdGUuY29tL1JFQURNRQorCisgR2V0IGEgZmlsZSBmcm9tIGEgSFRUUCBzZXJ2ZXIgdGhhdCByZXF1aXJlcyB1c2VyIGFuZCBwYXNzd29yZCwgdXNpbmcgdGhlCisgc2FtZSBwcm94eSBhcyBhYm92ZToKKworICAgICAgICBjdXJsIC11IHVzZXI6cGFzc3dkIC14IG15LXByb3h5Ojg4OCBodHRwOi8vd3d3LmdldC50aGlzLworCisgU29tZSBwcm94aWVzIHJlcXVpcmUgc3BlY2lhbCBhdXRoZW50aWNhdGlvbi4gU3BlY2lmeSBieSB1c2luZyAtVSBhcyBhYm92ZToKKworICAgICAgICBjdXJsIC1VIHVzZXI6cGFzc3dkIC14IG15LXByb3h5Ojg4OCBodHRwOi8vd3d3LmdldC50aGlzLworCisgQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBob3N0cyBhbmQgZG9tYWlucyB3aGljaCBkbyBub3QgdXNlIHRoZSBwcm94eSBjYW4KKyBiZSBzcGVjaWZpZWQgYXM6CisKKyAgICAgICAgY3VybCAtLW5vcHJveHkgbG9jYWxob3N0LGdldC50aGlzIC14IG15LXByb3h5Ojg4OCBodHRwOi8vd3d3LmdldC50aGlzLworCisgSWYgdGhlIHByb3h5IGlzIHNwZWNpZmllZCB3aXRoIC0tcHJveHkxLjAgaW5zdGVhZCBvZiAtLXByb3h5IG9yIC14LCB0aGVuCisgY3VybCB3aWxsIHVzZSBIVFRQLzEuMCBpbnN0ZWFkIG9mIEhUVFAvMS4xIGZvciBhbnkgQ09OTkVDVCBhdHRlbXB0cy4KKworIGN1cmwgYWxzbyBzdXBwb3J0cyBTT0NLUzQgYW5kIFNPQ0tTNSBwcm94aWVzIHdpdGggLS1zb2NrczQgYW5kIC0tc29ja3M1LgorCisgU2VlIGFsc28gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBDdXJsIHN1cHBvcnRzIHRoYXQgb2ZmZXIgZnVydGhlciBwcm94eQorIGNvbnRyb2wuCisKKyBNb3N0IEZUUCBwcm94eSBzZXJ2ZXJzIGFyZSBzZXQgdXAgdG8gYXBwZWFyIGFzIGEgbm9ybWFsIEZUUCBzZXJ2ZXIgZnJvbSB0aGUKKyBjbGllbnQncyBwZXJzcGVjdGl2ZSwgd2l0aCBzcGVjaWFsIGNvbW1hbmRzIHRvIHNlbGVjdCB0aGUgcmVtb3RlIEZUUCBzZXJ2ZXIuCisgY3VybCBzdXBwb3J0cyB0aGUgLXUsIC1RIGFuZCAtLWZ0cC1hY2NvdW50IG9wdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0bworIHNldCB1cCB0cmFuc2ZlcnMgdGhyb3VnaCBtYW55IEZUUCBwcm94aWVzLiBGb3IgZXhhbXBsZSwgYSBmaWxlIGNhbiBiZQorIHVwbG9hZGVkIHRvIGEgcmVtb3RlIEZUUCBzZXJ2ZXIgdXNpbmcgYSBCbHVlIENvYXQgRlRQIHByb3h5IHdpdGggdGhlCisgb3B0aW9uczoKKworICAgY3VybCAtdSAiUmVtb3RlLUZUUC1Vc2VybmFtZUByZW1vdGUuZnRwLnNlcnZlciBQcm94eS1Vc2VybmFtZTpSZW1vdGUtUGFzcyIgXAorICAgIC0tZnRwLWFjY291bnQgUHJveHktUGFzc3dvcmQgLS11cGxvYWQtZmlsZSBsb2NhbC1maWxlIFwKKyAgICBmdHA6Ly9teS1mdHAucHJveHkuc2VydmVyOjIxL3JlbW90ZS91cGxvYWQvcGF0aC8KKworIFNlZSB0aGUgbWFudWFsIGZvciB5b3VyIEZUUCBwcm94eSB0byBkZXRlcm1pbmUgdGhlIGZvcm0gaXQgZXhwZWN0cyB0byBzZXQgdXAKKyB0cmFuc2ZlcnMsIGFuZCBjdXJsJ3MgLXYgb3B0aW9uIHRvIHNlZSBleGFjdGx5IHdoYXQgY3VybCBpcyBzZW5kaW5nLgorCitSQU5HRVMKKworICBXaXRoIEhUVFAgMS4xIGJ5dGUtcmFuZ2VzIHdlcmUgaW50cm9kdWNlZC4gVXNpbmcgdGhpcywgYSBjbGllbnQgY2FuIHJlcXVlc3QKKyAgdG8gZ2V0IG9ubHkgb25lIG9yIG1vcmUgc3VicGFydHMgb2YgYSBzcGVjaWZpZWQgZG9jdW1lbnQuIEN1cmwgc3VwcG9ydHMKKyAgdGhpcyB3aXRoIHRoZSAtciBmbGFnLgorCisgIEdldCB0aGUgZmlyc3QgMTAwIGJ5dGVzIG9mIGEgZG9jdW1lbnQ6CisKKyAgICAgICAgY3VybCAtciAwLTk5IGh0dHA6Ly93d3cuZ2V0LnRoaXMvCisKKyAgR2V0IHRoZSBsYXN0IDUwMCBieXRlcyBvZiBhIGRvY3VtZW50OgorCisgICAgICAgIGN1cmwgLXIgLTUwMCBodHRwOi8vd3d3LmdldC50aGlzLworCisgIEN1cmwgYWxzbyBzdXBwb3J0cyBzaW1wbGUgcmFuZ2VzIGZvciBGVFAgZmlsZXMgYXMgd2VsbC4gVGhlbiB5b3UgY2FuIG9ubHkKKyAgc3BlY2lmeSBzdGFydCBhbmQgc3RvcCBwb3NpdGlvbi4KKworICBHZXQgdGhlIGZpcnN0IDEwMCBieXRlcyBvZiBhIGRvY3VtZW50IHVzaW5nIEZUUDoKKworICAgICAgICBjdXJsIC1yIDAtOTkgZnRwOi8vd3d3LmdldC50aGlzL1JFQURNRQorCitVUExPQURJTkcKKworIEZUUCAvIEZUUFMgLyBTRlRQIC8gU0NQCisKKyAgVXBsb2FkIGFsbCBkYXRhIG9uIHN0ZGluIHRvIGEgc3BlY2lmaWVkIHNlcnZlcjoKKworICAgICAgICBjdXJsIC1UIC0gZnRwOi8vZnRwLnVwbG9hZC5jb20vbXlmaWxlCisKKyAgVXBsb2FkIGRhdGEgZnJvbSBhIHNwZWNpZmllZCBmaWxlLCBsb2dpbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkOgorCisgICAgICAgIGN1cmwgLVQgdXBsb2FkZmlsZSAtdSB1c2VyOnBhc3N3ZCBmdHA6Ly9mdHAudXBsb2FkLmNvbS9teWZpbGUKKworICBVcGxvYWQgYSBsb2NhbCBmaWxlIHRvIHRoZSByZW1vdGUgc2l0ZSwgYW5kIHVzZSB0aGUgbG9jYWwgZmlsZSBuYW1lIHJlbW90ZQorICB0b286CisKKyAgICAgICAgY3VybCAtVCB1cGxvYWRmaWxlIC11IHVzZXI6cGFzc3dkIGZ0cDovL2Z0cC51cGxvYWQuY29tLworCisgIFVwbG9hZCBhIGxvY2FsIGZpbGUgdG8gZ2V0IGFwcGVuZGVkIHRvIHRoZSByZW1vdGUgZmlsZToKKworICAgICAgICBjdXJsIC1UIGxvY2FsZmlsZSAtYSBmdHA6Ly9mdHAudXBsb2FkLmNvbS9yZW1vdGVmaWxlCisKKyAgQ3VybCBhbHNvIHN1cHBvcnRzIGZ0cCB1cGxvYWQgdGhyb3VnaCBhIHByb3h5LCBidXQgb25seSBpZiB0aGUgcHJveHkgaXMKKyAgY29uZmlndXJlZCB0byBhbGxvdyB0aGF0IGtpbmQgb2YgdHVubmVsaW5nLiBJZiBpdCBkb2VzLCB5b3UgY2FuIHJ1biBjdXJsIGluCisgIGEgZmFzaGlvbiBzaW1pbGFyIHRvOgorCisgICAgICAgIGN1cmwgLS1wcm94eXR1bm5lbCAteCBwcm94eTpwb3J0IC1UIGxvY2FsZmlsZSBmdHAudXBsb2FkLmNvbQorCisgSFRUUAorCisgIFVwbG9hZCBhbGwgZGF0YSBvbiBzdGRpbiB0byBhIHNwZWNpZmllZCBodHRwIHNpdGU6CisKKyAgICAgICAgY3VybCAtVCAtIGh0dHA6Ly93d3cudXBsb2FkLmNvbS9teWZpbGUKKworICBOb3RlIHRoYXQgdGhlIGh0dHAgc2VydmVyIG11c3QgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgdG8gYWNjZXB0IFBVVCBiZWZvcmUKKyAgdGhpcyBjYW4gYmUgZG9uZSBzdWNjZXNzZnVsbHkuCisKKyAgRm9yIG90aGVyIHdheXMgdG8gZG8gaHR0cCBkYXRhIHVwbG9hZCwgc2VlIHRoZSBQT1NUIHNlY3Rpb24gYmVsb3cuCisKK1ZFUkJPU0UgLyBERUJVRworCisgIElmIGN1cmwgZmFpbHMgd2hlcmUgaXQgaXNuJ3Qgc3VwcG9zZWQgdG8sIGlmIHRoZSBzZXJ2ZXJzIGRvbid0IGxldCB5b3UgaW4sCisgIGlmIHlvdSBjYW4ndCB1bmRlcnN0YW5kIHRoZSByZXNwb25zZXM6IHVzZSB0aGUgLXYgZmxhZyB0byBnZXQgdmVyYm9zZQorICBmZXRjaGluZy4gQ3VybCB3aWxsIG91dHB1dCBsb3RzIG9mIGluZm8gYW5kIHdoYXQgaXQgc2VuZHMgYW5kIHJlY2VpdmVzIGluCisgIG9yZGVyIHRvIGxldCB0aGUgdXNlciBzZWUgYWxsIGNsaWVudC1zZXJ2ZXIgaW50ZXJhY3Rpb24gKGJ1dCBpdCB3b24ndCBzaG93CisgIHlvdSB0aGUgYWN0dWFsIGRhdGEpLgorCisgICAgICAgIGN1cmwgLXYgZnRwOi8vZnRwLnVwbG9hZC5jb20vCisKKyAgVG8gZ2V0IGV2ZW4gbW9yZSBkZXRhaWxzIGFuZCBpbmZvcm1hdGlvbiBvbiB3aGF0IGN1cmwgZG9lcywgdHJ5IHVzaW5nIHRoZQorICAtLXRyYWNlIG9yIC0tdHJhY2UtYXNjaWkgb3B0aW9ucyB3aXRoIGEgZ2l2ZW4gZmlsZSBuYW1lIHRvIGxvZyB0bywgbGlrZQorICB0aGlzOgorCisgICAgICAgIGN1cmwgLS10cmFjZSB0cmFjZS50eHQgd3d3LmhheHguc2UKKworCitERVRBSUxFRCBJTkZPUk1BVElPTgorCisgIERpZmZlcmVudCBwcm90b2NvbHMgcHJvdmlkZSBkaWZmZXJlbnQgd2F5cyBvZiBnZXR0aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uCisgIGFib3V0IHNwZWNpZmljIGZpbGVzL2RvY3VtZW50cy4gVG8gZ2V0IGN1cmwgdG8gc2hvdyBkZXRhaWxlZCBpbmZvcm1hdGlvbgorICBhYm91dCBhIHNpbmdsZSBmaWxlLCB5b3Ugc2hvdWxkIHVzZSAtSS8tLWhlYWQgb3B0aW9uLiBJdCBkaXNwbGF5cyBhbGwKKyAgYXZhaWxhYmxlIGluZm8gb24gYSBzaW5nbGUgZmlsZSBmb3IgSFRUUCBhbmQgRlRQLiBUaGUgSFRUUCBpbmZvcm1hdGlvbiBpcyBhCisgIGxvdCBtb3JlIGV4dGVuc2l2ZS4KKworICBGb3IgSFRUUCwgeW91IGNhbiBnZXQgdGhlIGhlYWRlciBpbmZvcm1hdGlvbiAodGhlIHNhbWUgYXMgLUkgd291bGQgc2hvdykKKyAgc2hvd24gYmVmb3JlIHRoZSBkYXRhIGJ5IHVzaW5nIC1pLy0taW5jbHVkZS4gQ3VybCB1bmRlcnN0YW5kcyB0aGUKKyAgLUQvLS1kdW1wLWhlYWRlciBvcHRpb24gd2hlbiBnZXR0aW5nIGZpbGVzIGZyb20gYm90aCBGVFAgYW5kIEhUVFAsIGFuZCBpdAorICB3aWxsIHRoZW4gc3RvcmUgdGhlIGhlYWRlcnMgaW4gdGhlIHNwZWNpZmllZCBmaWxlLgorCisgIFN0b3JlIHRoZSBIVFRQIGhlYWRlcnMgaW4gYSBzZXBhcmF0ZSBmaWxlIChoZWFkZXJzLnR4dCBpbiB0aGUgZXhhbXBsZSk6CisKKyAgICAgICAgY3VybCAtLWR1bXAtaGVhZGVyIGhlYWRlcnMudHh0IGN1cmwuaGF4eC5zZQorCisgIE5vdGUgdGhhdCBoZWFkZXJzIHN0b3JlZCBpbiBhIHNlcGFyYXRlIGZpbGUgY2FuIGJlIHZlcnkgdXNlZnVsIGF0IGEgbGF0ZXIKKyAgdGltZSBpZiB5b3Ugd2FudCBjdXJsIHRvIHVzZSBjb29raWVzIHNlbnQgYnkgdGhlIHNlcnZlci4gTW9yZSBhYm91dCB0aGF0IGluCisgIHRoZSBjb29raWVzIHNlY3Rpb24uCisKK1BPU1QgKEhUVFApCisKKyAgSXQncyBlYXN5IHRvIHBvc3QgZGF0YSB1c2luZyBjdXJsLiBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIC1kIDxkYXRhPgorICBvcHRpb24uICBUaGUgcG9zdCBkYXRhIG11c3QgYmUgdXJsZW5jb2RlZC4KKworICBQb3N0IGEgc2ltcGxlICJuYW1lIiBhbmQgInBob25lIiBndWVzdGJvb2suCisKKyAgICAgICAgY3VybCAtZCAibmFtZT1SYWZhZWwlMjBTYWd1bGEmcGhvbmU9MzMyMDc4MCIgXAorICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cud2hlcmUuY29tL2d1ZXN0LmNnaQorCisgIEhvdyB0byBwb3N0IGEgZm9ybSB3aXRoIGN1cmwsIGxlc3NvbiAjMToKKworICBEaWcgb3V0IGFsbCB0aGUgPGlucHV0PiB0YWdzIGluIHRoZSBmb3JtIHRoYXQgeW91IHdhbnQgdG8gZmlsbCBpbi4gKFRoZXJlJ3MKKyAgYSBwZXJsIHByb2dyYW0gY2FsbGVkIGZvcm1maW5kLnBsIG9uIHRoZSBjdXJsIHNpdGUgdGhhdCBoZWxwcyB3aXRoIHRoaXMpLgorCisgIElmIHRoZXJlJ3MgYSAibm9ybWFsIiBwb3N0LCB5b3UgdXNlIC1kIHRvIHBvc3QuIC1kIHRha2VzIGEgZnVsbCAicG9zdAorICBzdHJpbmciLCB3aGljaCBpcyBpbiB0aGUgZm9ybWF0CisKKyAgICAgICAgPHZhcmlhYmxlMT49PGRhdGExPiY8dmFyaWFibGUyPj08ZGF0YTI+Ji4uLgorCisgIFRoZSAndmFyaWFibGUnIG5hbWVzIGFyZSB0aGUgbmFtZXMgc2V0IHdpdGggIm5hbWU9IiBpbiB0aGUgPGlucHV0PiB0YWdzLCBhbmQKKyAgdGhlIGRhdGEgaXMgdGhlIGNvbnRlbnRzIHlvdSB3YW50IHRvIGZpbGwgaW4gZm9yIHRoZSBpbnB1dHMuIFRoZSBkYXRhICptdXN0KgorICBiZSBwcm9wZXJseSBVUkwgZW5jb2RlZC4gVGhhdCBtZWFucyB5b3UgcmVwbGFjZSBzcGFjZSB3aXRoICsgYW5kIHRoYXQgeW91CisgIHdyaXRlIHdlaXJkIGxldHRlcnMgd2l0aCAlWFggd2hlcmUgWFggaXMgdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mCisgIHRoZSBsZXR0ZXIncyBBU0NJSSBjb2RlLgorCisgIEV4YW1wbGU6CisKKyAgKHBhZ2UgbG9jYXRlZCBhdCBodHRwOi8vd3d3LmZvcm1wb3N0LmNvbS9nZXR0aGlzLworCisgICAgICAgIDxmb3JtIGFjdGlvbj0icG9zdC5jZ2kiIG1ldGhvZD0icG9zdCI+CisgICAgICAgIDxpbnB1dCBuYW1lPXVzZXIgc2l6ZT0xMD4KKyAgICAgICAgPGlucHV0IG5hbWU9cGFzcyB0eXBlPXBhc3N3b3JkIHNpemU9MTA+CisgICAgICAgIDxpbnB1dCBuYW1lPWlkIHR5cGU9aGlkZGVuIHZhbHVlPSJibGFibGFibGEiPgorICAgICAgICA8aW5wdXQgbmFtZT1kaW5nIHZhbHVlPSJzdWJtaXQiPgorICAgICAgICA8L2Zvcm0+CisKKyAgV2Ugd2FudCB0byBlbnRlciB1c2VyICdmb29iYXInIHdpdGggcGFzc3dvcmQgJzEyMzQ1Jy4KKworICBUbyBwb3N0IHRvIHRoaXMsIHlvdSBlbnRlciBhIGN1cmwgY29tbWFuZCBsaW5lIGxpa2U6CisKKyAgICAgICAgY3VybCAtZCAidXNlcj1mb29iYXImcGFzcz0xMjM0NSZpZD1ibGFibGFibGEmZGluZz1zdWJtaXQiICAoY29udGludWVzKQorICAgICAgICAgIGh0dHA6Ly93d3cuZm9ybXBvc3QuY29tL2dldHRoaXMvcG9zdC5jZ2kKKworCisgIFdoaWxlIC1kIHVzZXMgdGhlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBtaW1lLXR5cGUsIGdlbmVyYWxseQorICB1bmRlcnN0b29kIGJ5IENHSSdzIGFuZCBzaW1pbGFyLCBjdXJsIGFsc28gc3VwcG9ydHMgdGhlIG1vcmUgY2FwYWJsZQorICBtdWx0aXBhcnQvZm9ybS1kYXRhIHR5cGUuIFRoaXMgbGF0dGVyIHR5cGUgc3VwcG9ydHMgdGhpbmdzIGxpa2UgZmlsZSB1cGxvYWQuCisKKyAgLUYgYWNjZXB0cyBwYXJhbWV0ZXJzIGxpa2UgLUYgIm5hbWU9Y29udGVudHMiLiBJZiB5b3Ugd2FudCB0aGUgY29udGVudHMgdG8KKyAgYmUgcmVhZCBmcm9tIGEgZmlsZSwgdXNlIDxAZmlsZW5hbWU+IGFzIGNvbnRlbnRzLiBXaGVuIHNwZWNpZnlpbmcgYSBmaWxlLAorICB5b3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgZmlsZSBjb250ZW50IHR5cGUgYnkgYXBwZW5kaW5nICc7dHlwZT08bWltZSB0eXBlPicKKyAgdG8gdGhlIGZpbGUgbmFtZS4gWW91IGNhbiBhbHNvIHBvc3QgdGhlIGNvbnRlbnRzIG9mIHNldmVyYWwgZmlsZXMgaW4gb25lCisgIGZpZWxkLiAgRm9yIGV4YW1wbGUsIHRoZSBmaWVsZCBuYW1lICdjb29sZmlsZXMnIGlzIHVzZWQgdG8gc2VuZCB0aHJlZSBmaWxlcywKKyAgd2l0aCBkaWZmZXJlbnQgY29udGVudCB0eXBlcyB1c2luZyB0aGUgZm9sbG93aW5nIHN5bnRheDoKKworICAgICAgICBjdXJsIC1GICJjb29sZmlsZXM9QGZpbDEuZ2lmO3R5cGU9aW1hZ2UvZ2lmLGZpbDIudHh0LGZpbDMuaHRtbCIgXAorICAgICAgICBodHRwOi8vd3d3LnBvc3QuY29tL3Bvc3RpdC5jZ2kKKworICBJZiB0aGUgY29udGVudC10eXBlIGlzIG5vdCBzcGVjaWZpZWQsIGN1cmwgd2lsbCB0cnkgdG8gZ3Vlc3MgZnJvbSB0aGUgZmlsZQorICBleHRlbnNpb24gKGl0IG9ubHkga25vd3MgYSBmZXcpLCBvciB1c2UgdGhlIHByZXZpb3VzbHkgc3BlY2lmaWVkIHR5cGUgKGZyb20KKyAgYW4gZWFybGllciBmaWxlIGlmIHNldmVyYWwgZmlsZXMgYXJlIHNwZWNpZmllZCBpbiBhIGxpc3QpIG9yIGVsc2UgaXQgd2lsbAorICB1c2UgdGhlIGRlZmF1bHQgdHlwZSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJy4KKworICBFbXVsYXRlIGEgZmlsbC1pbiBmb3JtIHdpdGggLUYuIExldCdzIHNheSB5b3UgZmlsbCBpbiB0aHJlZSBmaWVsZHMgaW4gYQorICBmb3JtLiBPbmUgZmllbGQgaXMgYSBmaWxlIG5hbWUgd2hpY2ggdG8gcG9zdCwgb25lIGZpZWxkIGlzIHlvdXIgbmFtZSBhbmQgb25lCisgIGZpZWxkIGlzIGEgZmlsZSBkZXNjcmlwdGlvbi4gV2Ugd2FudCB0byBwb3N0IHRoZSBmaWxlIHdlIGhhdmUgd3JpdHRlbiBuYW1lZAorICAiY29vbHRleHQudHh0Ii4gVG8gbGV0IGN1cmwgZG8gdGhlIHBvc3Rpbmcgb2YgdGhpcyBkYXRhIGluc3RlYWQgb2YgeW91cgorICBmYXZvdXJpdGUgYnJvd3NlciwgeW91IGhhdmUgdG8gcmVhZCB0aGUgSFRNTCBzb3VyY2Ugb2YgdGhlIGZvcm0gcGFnZSBhbmQKKyAgZmluZCB0aGUgbmFtZXMgb2YgdGhlIGlucHV0IGZpZWxkcy4gSW4gb3VyIGV4YW1wbGUsIHRoZSBpbnB1dCBmaWVsZCBuYW1lcworICBhcmUgJ2ZpbGUnLCAneW91cm5hbWUnIGFuZCAnZmlsZWRlc2NyaXB0aW9uJy4KKworICAgICAgICBjdXJsIC1GICJmaWxlPUBjb29sdGV4dC50eHQiIC1GICJ5b3VybmFtZT1EYW5pZWwiIFwKKyAgICAgICAgICAgICAtRiAiZmlsZWRlc2NyaXB0aW9uPUNvb2wgdGV4dCBmaWxlIHdpdGggY29vbCB0ZXh0IGluc2lkZSIgXAorICAgICAgICAgICAgIGh0dHA6Ly93d3cucG9zdC5jb20vcG9zdGl0LmNnaQorCisgIFRvIHNlbmQgdHdvIGZpbGVzIGluIG9uZSBwb3N0IHlvdSBjYW4gZG8gaXQgaW4gdHdvIHdheXM6CisKKyAgMS4gU2VuZCBtdWx0aXBsZSBmaWxlcyBpbiBhIHNpbmdsZSAiZmllbGQiIHdpdGggYSBzaW5nbGUgZmllbGQgbmFtZToKKworICAgICAgICBjdXJsIC1GICJwaWN0dXJlcz1AZG9nLmdpZixjYXQuZ2lmIgorCisgIDIuIFNlbmQgdHdvIGZpZWxkcyB3aXRoIHR3byBmaWVsZCBuYW1lczoKKworICAgICAgICBjdXJsIC1GICJkb2NwaWN0dXJlPUBkb2cuZ2lmIiAtRiAiY2F0cGljdHVyZT1AY2F0LmdpZiIKKworICBUbyBzZW5kIGEgZmllbGQgdmFsdWUgbGl0ZXJhbGx5IHdpdGhvdXQgaW50ZXJwcmV0aW5nIGEgbGVhZGluZyAnQCcKKyAgb3IgJzwnLCBvciBhbiBlbWJlZGRlZCAnO3R5cGU9JywgdXNlIC0tZm9ybS1zdHJpbmcgaW5zdGVhZCBvZgorICAtRi4gVGhpcyBpcyByZWNvbW1lbmRlZCB3aGVuIHRoZSB2YWx1ZSBpcyBvYnRhaW5lZCBmcm9tIGEgdXNlciBvcgorICBzb21lIG90aGVyIHVucHJlZGljdGFibGUgc291cmNlLiBVbmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzLCB1c2luZworICAtRiBpbnN0ZWFkIG9mIC0tZm9ybS1zdHJpbmcgd291bGQgYWxsb3cgYSB1c2VyIHRvIHRyaWNrIGN1cmwgaW50bworICB1cGxvYWRpbmcgYSBmaWxlLgorCitSRUZFUlJFUgorCisgIEEgSFRUUCByZXF1ZXN0IGhhcyB0aGUgb3B0aW9uIHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggYWRkcmVzcworICB0aGF0IHJlZmVycmVkIHRvIGFjdHVhbCBwYWdlLiAgQ3VybCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlCisgIHJlZmVycmVyIHRvIGJlIHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gSXQgaXMgZXNwZWNpYWxseSB1c2VmdWwgdG8KKyAgZm9vbCBvciB0cmljayBzdHVwaWQgc2VydmVycyBvciBDR0kgc2NyaXB0cyB0aGF0IHJlbHkgb24gdGhhdCBpbmZvcm1hdGlvbgorICBiZWluZyBhdmFpbGFibGUgb3IgY29udGFpbiBjZXJ0YWluIGRhdGEuCisKKyAgICAgICAgY3VybCAtZSB3d3cuY29vbHNpdGUuY29tIGh0dHA6Ly93d3cuc2hvd21lLmNvbS8KKworICBOT1RFOiBUaGUgUmVmZXJlcjogW3NpY10gZmllbGQgaXMgZGVmaW5lZCBpbiB0aGUgSFRUUCBzcGVjIHRvIGJlIGEgZnVsbCBVUkwuCisKK1VTRVIgQUdFTlQKKworICBBIEhUVFAgcmVxdWVzdCBoYXMgdGhlIG9wdGlvbiB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBicm93c2VyCisgIHRoYXQgZ2VuZXJhdGVkIHRoZSByZXF1ZXN0LiBDdXJsIGFsbG93cyBpdCB0byBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQKKyAgbGluZS4gSXQgaXMgZXNwZWNpYWxseSB1c2VmdWwgdG8gZm9vbCBvciB0cmljayBzdHVwaWQgc2VydmVycyBvciBDR0kKKyAgc2NyaXB0cyB0aGF0IG9ubHkgYWNjZXB0IGNlcnRhaW4gYnJvd3NlcnMuCisKKyAgRXhhbXBsZToKKworICBjdXJsIC1BICdNb3ppbGxhLzMuMCAoV2luOTU7IEkpJyBodHRwOi8vd3d3Lm5hdGlvbnNiYW5rLmNvbS8KKworICBPdGhlciBjb21tb24gc3RyaW5nczoKKyAgICAnTW96aWxsYS8zLjAgKFdpbjk1OyBJKScgICAgIE5ldHNjYXBlIFZlcnNpb24gMyBmb3IgV2luZG93cyA5NQorICAgICdNb3ppbGxhLzMuMDQgKFdpbjk1OyBVKScgICAgTmV0c2NhcGUgVmVyc2lvbiAzIGZvciBXaW5kb3dzIDk1CisgICAgJ01vemlsbGEvMi4wMiAoT1MvMjsgVSknICAgICBOZXRzY2FwZSBWZXJzaW9uIDIgZm9yIE9TLzIKKyAgICAnTW96aWxsYS80LjA0IFtlbl0gKFgxMTsgVTsgQUlYIDQuMjsgTmF2KScgICAgICAgICAgIE5TIGZvciBBSVgKKyAgICAnTW96aWxsYS80LjA1IFtlbl0gKFgxMTsgVTsgTGludXggMi4wLjMyIGk1ODYpJyAgICAgIE5TIGZvciBMaW51eAorCisgIE5vdGUgdGhhdCBJbnRlcm5ldCBFeHBsb3JlciB0cmllcyBoYXJkIHRvIGJlIGNvbXBhdGlibGUgaW4gZXZlcnkgd2F5OgorICAgICdNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA0LjAxOyBXaW5kb3dzIDk1KScgICAgTVNJRSBmb3IgVzk1CisKKyAgTW96aWxsYSBpcyBub3QgdGhlIG9ubHkgcG9zc2libGUgVXNlci1BZ2VudCBuYW1lOgorICAgICdLb25xdWVyb3IvMS4wJyAgICAgICAgICAgICBLREUgRmlsZSBNYW5hZ2VyIGRlc2t0b3AgY2xpZW50CisgICAgJ0x5bngvMi43LjEgbGlid3d3LUZNLzIuMTQnIEx5bnggY29tbWFuZCBsaW5lIGJyb3dzZXIKKworQ09PS0lFUworCisgIENvb2tpZXMgYXJlIGdlbmVyYWxseSB1c2VkIGJ5IHdlYiBzZXJ2ZXJzIHRvIGtlZXAgc3RhdGUgaW5mb3JtYXRpb24gYXQgdGhlCisgIGNsaWVudCdzIHNpZGUuIFRoZSBzZXJ2ZXIgc2V0cyBjb29raWVzIGJ5IHNlbmRpbmcgYSByZXNwb25zZSBsaW5lIGluIHRoZQorICBoZWFkZXJzIHRoYXQgbG9va3MgbGlrZSAnU2V0LUNvb2tpZTogPGRhdGE+JyB3aGVyZSB0aGUgZGF0YSBwYXJ0IHRoZW4KKyAgdHlwaWNhbGx5IGNvbnRhaW5zIGEgc2V0IG9mIE5BTUU9VkFMVUUgcGFpcnMgKHNlcGFyYXRlZCBieSBzZW1pY29sb25zICc7JworICBsaWtlICJOQU1FMT1WQUxVRTE7IE5BTUUyPVZBTFVFMjsiKS4gVGhlIHNlcnZlciBjYW4gYWxzbyBzcGVjaWZ5IGZvciB3aGF0CisgIHBhdGggdGhlICJjb29raWUiIHNob3VsZCBiZSB1c2VkIGZvciAoYnkgc3BlY2lmeWluZyAicGF0aD12YWx1ZSIpLCB3aGVuIHRoZQorICBjb29raWUgc2hvdWxkIGV4cGlyZSAoImV4cGlyZT1EQVRFIiksIGZvciB3aGF0IGRvbWFpbiB0byB1c2UgaXQKKyAgKCJkb21haW49TkFNRSIpIGFuZCBpZiBpdCBzaG91bGQgYmUgdXNlZCBvbiBzZWN1cmUgY29ubmVjdGlvbnMgb25seQorICAoInNlY3VyZSIpLgorCisgIElmIHlvdSd2ZSByZWNlaXZlZCBhIHBhZ2UgZnJvbSBhIHNlcnZlciB0aGF0IGNvbnRhaW5zIGEgaGVhZGVyIGxpa2U6CisgICAgICAgIFNldC1Db29raWU6IHNlc3Npb25pZD1ib28xMjM7IHBhdGg9Ii9mb28iOworCisgIGl0IG1lYW5zIHRoZSBzZXJ2ZXIgd2FudHMgdGhhdCBmaXJzdCBwYWlyIHBhc3NlZCBvbiB3aGVuIHdlIGdldCBhbnl0aGluZyBpbgorICBhIHBhdGggYmVnaW5uaW5nIHdpdGggIi9mb28iLgorCisgIEV4YW1wbGUsIGdldCBhIHBhZ2UgdGhhdCB3YW50cyBteSBuYW1lIHBhc3NlZCBpbiBhIGNvb2tpZToKKworICAgICAgICBjdXJsIC1iICJuYW1lPURhbmllbCIgd3d3LnNpbGx5cGFnZS5jb20KKworICBDdXJsIGFsc28gaGFzIHRoZSBhYmlsaXR5IHRvIHVzZSBwcmV2aW91c2x5IHJlY2VpdmVkIGNvb2tpZXMgaW4gZm9sbG93aW5nCisgIHNlc3Npb25zLiBJZiB5b3UgZ2V0IGNvb2tpZXMgZnJvbSBhIHNlcnZlciBhbmQgc3RvcmUgdGhlbSBpbiBhIGZpbGUgaW4gYQorICBtYW5uZXIgc2ltaWxhciB0bzoKKworICAgICAgICBjdXJsIC0tZHVtcC1oZWFkZXIgaGVhZGVycyB3d3cuZXhhbXBsZS5jb20KKworICAuLi4geW91IGNhbiB0aGVuIGluIGEgc2Vjb25kIGNvbm5lY3QgdG8gdGhhdCAob3IgYW5vdGhlcikgc2l0ZSwgdXNlIHRoZQorICBjb29raWVzIGZyb20gdGhlICdoZWFkZXJzJyBmaWxlIGxpa2U6CisKKyAgICAgICAgY3VybCAtYiBoZWFkZXJzIHd3dy5leGFtcGxlLmNvbQorCisgIFdoaWxlIHNhdmluZyBoZWFkZXJzIHRvIGEgZmlsZSBpcyBhIHdvcmtpbmcgd2F5IHRvIHN0b3JlIGNvb2tpZXMsIGl0IGlzCisgIGhvd2V2ZXIgZXJyb3ItcHJvbmUgYW5kIG5vdCB0aGUgcHJlZmVycmVkIHdheSB0byBkbyB0aGlzLiBJbnN0ZWFkLCBtYWtlIGN1cmwKKyAgc2F2ZSB0aGUgaW5jb21pbmcgY29va2llcyB1c2luZyB0aGUgd2VsbC1rbm93biBuZXRzY2FwZSBjb29raWUgZm9ybWF0IGxpa2UKKyAgdGhpczoKKworICAgICAgICBjdXJsIC1jIGNvb2tpZXMudHh0IHd3dy5leGFtcGxlLmNvbQorCisgIE5vdGUgdGhhdCBieSBzcGVjaWZ5aW5nIC1iIHlvdSBlbmFibGUgdGhlICJjb29raWUgYXdhcmVuZXNzIiBhbmQgd2l0aCAtTAorICB5b3UgY2FuIG1ha2UgY3VybCBmb2xsb3cgYSBsb2NhdGlvbjogKHdoaWNoIG9mdGVuIGlzIHVzZWQgaW4gY29tYmluYXRpb24KKyAgd2l0aCBjb29raWVzKS4gU28gdGhhdCBpZiBhIHNpdGUgc2VuZHMgY29va2llcyBhbmQgYSBsb2NhdGlvbiwgeW91IGNhbgorICB1c2UgYSBub24tZXhpc3RpbmcgZmlsZSB0byB0cmlnZ2VyIHRoZSBjb29raWUgYXdhcmVuZXNzIGxpa2U6CisKKyAgICAgICAgY3VybCAtTCAtYiBlbXB0eS50eHQgd3d3LmV4YW1wbGUuY29tCisKKyAgVGhlIGZpbGUgdG8gcmVhZCBjb29raWVzIGZyb20gbXVzdCBiZSBmb3JtYXR0ZWQgdXNpbmcgcGxhaW4gSFRUUCBoZWFkZXJzIE9SCisgIGFzIG5ldHNjYXBlJ3MgY29va2llIGZpbGUuIEN1cmwgd2lsbCBkZXRlcm1pbmUgd2hhdCBraW5kIGl0IGlzIGJhc2VkIG9uIHRoZQorICBmaWxlIGNvbnRlbnRzLiAgSW4gdGhlIGFib3ZlIGNvbW1hbmQsIGN1cmwgd2lsbCBwYXJzZSB0aGUgaGVhZGVyIGFuZCBzdG9yZQorICB0aGUgY29va2llcyByZWNlaXZlZCBmcm9tIHd3dy5leGFtcGxlLmNvbS4gIGN1cmwgd2lsbCBzZW5kIHRvIHRoZSBzZXJ2ZXIgdGhlCisgIHN0b3JlZCBjb29raWVzIHdoaWNoIG1hdGNoIHRoZSByZXF1ZXN0IGFzIGl0IGZvbGxvd3MgdGhlIGxvY2F0aW9uLiAgVGhlCisgIGZpbGUgImVtcHR5LnR4dCIgbWF5IGJlIGEgbm9uZXhpc3RlbnQgZmlsZS4KKworICBBbGFzLCB0byBib3RoIHJlYWQgYW5kIHdyaXRlIGNvb2tpZXMgZnJvbSBhIG5ldHNjYXBlIGNvb2tpZSBmaWxlLCB5b3UgY2FuCisgIHNldCBib3RoIC1iIGFuZCAtYyB0byB1c2UgdGhlIHNhbWUgZmlsZToKKworICAgICAgICBjdXJsIC1iIGNvb2tpZXMudHh0IC1jIGNvb2tpZXMudHh0IHd3dy5leGFtcGxlLmNvbQorCitQUk9HUkVTUyBNRVRFUgorCisgIFRoZSBwcm9ncmVzcyBtZXRlciBleGlzdHMgdG8gc2hvdyBhIHVzZXIgdGhhdCBzb21ldGhpbmcgYWN0dWFsbHkgaXMKKyAgaGFwcGVuaW5nLiBUaGUgZGlmZmVyZW50IGZpZWxkcyBpbiB0aGUgb3V0cHV0IGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOgorCisgICUgVG90YWwgICAgJSBSZWNlaXZlZCAlIFhmZXJkICBBdmVyYWdlIFNwZWVkICAgICAgICAgIFRpbWUgICAgICAgICAgICAgQ3Vyci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERsb2FkICBVcGxvYWQgVG90YWwgICAgQ3VycmVudCAgTGVmdCAgICBTcGVlZAorICAwICAxNTFNICAgIDAgMzg2MDggICAgMCAgICAgMCAgIDk0MDYgICAgICAwICA0OjQxOjQzICAwOjAwOjA0ICA0OjQxOjM5ICA5Mjg3CisKKyAgRnJvbSBsZWZ0LXRvLXJpZ2h0OgorICAgJSAgICAgICAgICAgICAtIHBlcmNlbnRhZ2UgY29tcGxldGVkIG9mIHRoZSB3aG9sZSB0cmFuc2ZlcgorICAgVG90YWwgICAgICAgICAtIHRvdGFsIHNpemUgb2YgdGhlIHdob2xlIGV4cGVjdGVkIHRyYW5zZmVyCisgICAlICAgICAgICAgICAgIC0gcGVyY2VudGFnZSBjb21wbGV0ZWQgb2YgdGhlIGRvd25sb2FkCisgICBSZWNlaXZlZCAgICAgIC0gY3VycmVudGx5IGRvd25sb2FkZWQgYW1vdW50IG9mIGJ5dGVzCisgICAlICAgICAgICAgICAgIC0gcGVyY2VudGFnZSBjb21wbGV0ZWQgb2YgdGhlIHVwbG9hZAorICAgWGZlcmQgICAgICAgICAtIGN1cnJlbnRseSB1cGxvYWRlZCBhbW91bnQgb2YgYnl0ZXMKKyAgIEF2ZXJhZ2UgU3BlZWQKKyAgIERsb2FkICAgICAgICAgLSB0aGUgYXZlcmFnZSB0cmFuc2ZlciBzcGVlZCBvZiB0aGUgZG93bmxvYWQKKyAgIEF2ZXJhZ2UgU3BlZWQKKyAgIFVwbG9hZCAgICAgICAgLSB0aGUgYXZlcmFnZSB0cmFuc2ZlciBzcGVlZCBvZiB0aGUgdXBsb2FkCisgICBUaW1lIFRvdGFsICAgIC0gZXhwZWN0ZWQgdGltZSB0byBjb21wbGV0ZSB0aGUgb3BlcmF0aW9uCisgICBUaW1lIEN1cnJlbnQgIC0gdGltZSBwYXNzZWQgc2luY2UgdGhlIGludm9rZQorICAgVGltZSBMZWZ0ICAgICAtIGV4cGVjdGVkIHRpbWUgbGVmdCB0byBjb21wbGV0aW9uCisgICBDdXJyLlNwZWVkICAgIC0gdGhlIGF2ZXJhZ2UgdHJhbnNmZXIgc3BlZWQgdGhlIGxhc3QgNSBzZWNvbmRzICh0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAgICA1IHNlY29uZHMgb2YgYSB0cmFuc2ZlciBpcyBiYXNlZCBvbiBsZXNzIHRpbWUgb2YgY291cnNlLikKKworICBUaGUgLSMgb3B0aW9uIHdpbGwgZGlzcGxheSBhIHRvdGFsbHkgZGlmZmVyZW50IHByb2dyZXNzIGJhciB0aGF0IGRvZXNuJ3QKKyAgbmVlZCBtdWNoIGV4cGxhbmF0aW9uIQorCitTUEVFRCBMSU1JVAorCisgIEN1cmwgYWxsb3dzIHRoZSB1c2VyIHRvIHNldCB0aGUgdHJhbnNmZXIgc3BlZWQgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0CisgIHRvIGxldCB0aGUgdHJhbnNmZXIga2VlcCBnb2luZy4gQnkgdXNpbmcgdGhlIHN3aXRjaCAteSBhbmQgLVkgeW91CisgIGNhbiBtYWtlIGN1cmwgYWJvcnQgdHJhbnNmZXJzIGlmIHRoZSB0cmFuc2ZlciBzcGVlZCBpcyBiZWxvdyB0aGUgc3BlY2lmaWVkCisgIGxvd2VzdCBsaW1pdCBmb3IgYSBzcGVjaWZpZWQgdGltZS4KKworICBUbyBoYXZlIGN1cmwgYWJvcnQgdGhlIGRvd25sb2FkIGlmIHRoZSBzcGVlZCBpcyBzbG93ZXIgdGhhbiAzMDAwIGJ5dGVzIHBlcgorICBzZWNvbmQgZm9yIDEgbWludXRlLCBydW46CisKKyAgICAgICAgY3VybCAtWSAzMDAwIC15IDYwIHd3dy5mYXItYXdheS1zaXRlLmNvbQorCisgIFRoaXMgY2FuIHZlcnkgd2VsbCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIG92ZXJhbGwgdGltZSBsaW1pdCwgc28KKyAgdGhhdCB0aGUgYWJvdmUgb3BlcmF0aW9uIG11c3QgYmUgY29tcGxldGVkIGluIHdob2xlIHdpdGhpbiAzMCBtaW51dGVzOgorCisgICAgICAgIGN1cmwgLW0gMTgwMCAtWSAzMDAwIC15IDYwIHd3dy5mYXItYXdheS1zaXRlLmNvbQorCisgIEZvcmNpbmcgY3VybCBub3QgdG8gdHJhbnNmZXIgZGF0YSBmYXN0ZXIgdGhhbiBhIGdpdmVuIHJhdGUgaXMgYWxzbyBwb3NzaWJsZSwKKyAgd2hpY2ggbWlnaHQgYmUgdXNlZnVsIGlmIHlvdSdyZSB1c2luZyBhIGxpbWl0ZWQgYmFuZHdpZHRoIGNvbm5lY3Rpb24gYW5kIHlvdQorICBkb24ndCB3YW50IHlvdXIgdHJhbnNmZXIgdG8gdXNlIGFsbCBvZiBpdCAoc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzCisgICJiYW5kd2lkdGggdGhyb3R0bGUiKS4KKworICBNYWtlIGN1cmwgdHJhbnNmZXIgZGF0YSBubyBmYXN0ZXIgdGhhbiAxMCBraWxvYnl0ZXMgcGVyIHNlY29uZDoKKworICAgICAgICBjdXJsIC0tbGltaXQtcmF0ZSAxMEsgd3d3LmZhci1hd2F5LXNpdGUuY29tCisKKyAgICBvcgorCisgICAgICAgIGN1cmwgLS1saW1pdC1yYXRlIDEwMjQwIHd3dy5mYXItYXdheS1zaXRlLmNvbQorCisgIE9yIHByZXZlbnQgY3VybCBmcm9tIHVwbG9hZGluZyBkYXRhIGZhc3RlciB0aGFuIDEgbWVnYWJ5dGUgcGVyIHNlY29uZDoKKworICAgICAgICBjdXJsIC1UIHVwbG9hZCAtLWxpbWl0LXJhdGUgMU0gZnRwOi8vdXBsb2Fkc2hlcmVwbGVhc2UuY29tCisKKyAgV2hlbiB1c2luZyB0aGUgLS1saW1pdC1yYXRlIG9wdGlvbiwgdGhlIHRyYW5zZmVyIHJhdGUgaXMgcmVndWxhdGVkIG9uIGEKKyAgcGVyLXNlY29uZCBiYXNpcywgd2hpY2ggd2lsbCBjYXVzZSB0aGUgdG90YWwgdHJhbnNmZXIgc3BlZWQgdG8gYmVjb21lIGxvd2VyCisgIHRoYW4gdGhlIGdpdmVuIG51bWJlci4gU29tZXRpbWVzIG9mIGNvdXJzZSBzdWJzdGFudGlhbGx5IGxvd2VyLCBpZiB5b3VyCisgIHRyYW5zZmVyIHN0YWxscyBkdXJpbmcgcGVyaW9kcy4KKworQ09ORklHIEZJTEUKKworICBDdXJsIGF1dG9tYXRpY2FsbHkgdHJpZXMgdG8gcmVhZCB0aGUgLmN1cmxyYyBmaWxlIChvciBfY3VybHJjIGZpbGUgb24gd2luMzIKKyAgc3lzdGVtcykgZnJvbSB0aGUgdXNlcidzIGhvbWUgZGlyIG9uIHN0YXJ0dXAuCisKKyAgVGhlIGNvbmZpZyBmaWxlIGNvdWxkIGJlIG1hZGUgdXAgd2l0aCBub3JtYWwgY29tbWFuZCBsaW5lIHN3aXRjaGVzLCBidXQgeW91CisgIGNhbiBhbHNvIHNwZWNpZnkgdGhlIGxvbmcgb3B0aW9ucyB3aXRob3V0IHRoZSBkYXNoZXMgdG8gbWFrZSBpdCBtb3JlCisgIHJlYWRhYmxlLiBZb3UgY2FuIHNlcGFyYXRlIHRoZSBvcHRpb25zIGFuZCB0aGUgcGFyYW1ldGVyIHdpdGggc3BhY2VzLCBvcgorICB3aXRoID0gb3IgOi4gQ29tbWVudHMgY2FuIGJlIHVzZWQgd2l0aGluIHRoZSBmaWxlLiBJZiB0aGUgZmlyc3QgbGV0dGVyIG9uIGEKKyAgbGluZSBpcyBhICcjJy1zeW1ib2wgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQuCisKKyAgSWYgeW91IHdhbnQgdGhlIHBhcmFtZXRlciB0byBjb250YWluIHNwYWNlcywgeW91IG11c3QgZW5jbG9zZSB0aGUgZW50aXJlCisgIHBhcmFtZXRlciB3aXRoaW4gZG91YmxlIHF1b3RlcyAoIikuIFdpdGhpbiB0aG9zZSBxdW90ZXMsIHlvdSBzcGVjaWZ5IGEKKyAgcXVvdGUgYXMgXCIuCisKKyAgTk9URTogWW91IG11c3Qgc3BlY2lmeSBvcHRpb25zIGFuZCB0aGVpciBhcmd1bWVudHMgb24gdGhlIHNhbWUgbGluZS4KKworICBFeGFtcGxlLCBzZXQgZGVmYXVsdCB0aW1lIG91dCBhbmQgcHJveHkgaW4gYSBjb25maWcgZmlsZToKKworICAgICAgICAjIFdlIHdhbnQgYSAzMCBtaW51dGUgdGltZW91dDoKKyAgICAgICAgLW0gMTgwMAorICAgICAgICAjIC4uLiBhbmQgd2UgdXNlIGEgcHJveHkgZm9yIGFsbCBhY2Nlc3NlczoKKyAgICAgICAgcHJveHkgPSBwcm94eS5vdXIuZG9tYWluLmNvbTo4MDgwCisKKyAgV2hpdGUgc3BhY2VzIEFSRSBzaWduaWZpY2FudCBhdCB0aGUgZW5kIG9mIGxpbmVzLCBidXQgYWxsIHdoaXRlIHNwYWNlcworICBsZWFkaW5nIHVwIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXJzIG9mIGVhY2ggbGluZSBhcmUgaWdub3JlZC4KKworICBQcmV2ZW50IGN1cmwgZnJvbSByZWFkaW5nIHRoZSBkZWZhdWx0IGZpbGUgYnkgdXNpbmcgLXEgYXMgdGhlIGZpcnN0IGNvbW1hbmQKKyAgbGluZSBwYXJhbWV0ZXIsIGxpa2U6CisKKyAgICAgICAgY3VybCAtcSB3d3cudGhhdHNpdGUuY29tCisKKyAgRm9yY2UgY3VybCB0byBnZXQgYW5kIGRpc3BsYXkgYSBsb2NhbCBoZWxwIHBhZ2UgaW4gY2FzZSBpdCBpcyBpbnZva2VkCisgIHdpdGhvdXQgVVJMIGJ5IG1ha2luZyBhIGNvbmZpZyBmaWxlIHNpbWlsYXIgdG86CisKKyAgICAgICAgIyBkZWZhdWx0IHVybCB0byBnZXQKKyAgICAgICAgdXJsID0gImh0dHA6Ly9oZWxwLndpdGguY3VybC5jb20vY3VybGhlbHAuaHRtbCIKKworICBZb3UgY2FuIHNwZWNpZnkgYW5vdGhlciBjb25maWcgZmlsZSB0byBiZSByZWFkIGJ5IHVzaW5nIHRoZSAtSy8tLWNvbmZpZworICBmbGFnLiBJZiB5b3Ugc2V0IGNvbmZpZyBmaWxlIG5hbWUgdG8gIi0iIGl0J2xsIHJlYWQgdGhlIGNvbmZpZyBmcm9tIHN0ZGluLAorICB3aGljaCBjYW4gYmUgaGFuZHkgaWYgeW91IHdhbnQgdG8gaGlkZSBvcHRpb25zIGZyb20gYmVpbmcgdmlzaWJsZSBpbiBwcm9jZXNzCisgIHRhYmxlcyBldGM6CisKKyAgICAgICAgZWNobyAidXNlciA9IHVzZXI6cGFzc3dkIiB8IGN1cmwgLUsgLSBodHRwOi8vdGhhdC5zZWNyZXQuc2l0ZS5jb20KKworRVhUUkEgSEVBREVSUworCisgIFdoZW4gdXNpbmcgY3VybCBpbiB5b3VyIG93biB2ZXJ5IHNwZWNpYWwgcHJvZ3JhbXMsIHlvdSBtYXkgZW5kIHVwIG5lZWRpbmcKKyAgdG8gcGFzcyBvbiB5b3VyIG93biBjdXN0b20gaGVhZGVycyB3aGVuIGdldHRpbmcgYSB3ZWIgcGFnZS4gWW91IGNhbiBkbworICB0aGlzIGJ5IHVzaW5nIHRoZSAtSCBmbGFnLgorCisgIEV4YW1wbGUsIHNlbmQgdGhlIGhlYWRlciAiWC15b3UtYW5kLW1lOiB5ZXMiIHRvIHRoZSBzZXJ2ZXIgd2hlbiBnZXR0aW5nIGEKKyAgcGFnZToKKworICAgICAgICBjdXJsIC1IICJYLXlvdS1hbmQtbWU6IHllcyIgd3d3LmxvdmUuY29tCisKKyAgVGhpcyBjYW4gYWxzbyBiZSB1c2VmdWwgaW4gY2FzZSB5b3Ugd2FudCBjdXJsIHRvIHNlbmQgYSBkaWZmZXJlbnQgdGV4dCBpbiBhCisgIGhlYWRlciB0aGFuIGl0IG5vcm1hbGx5IGRvZXMuIFRoZSAtSCBoZWFkZXIgeW91IHNwZWNpZnkgdGhlbiByZXBsYWNlcyB0aGUKKyAgaGVhZGVyIGN1cmwgd291bGQgbm9ybWFsbHkgc2VuZC4gSWYgeW91IHJlcGxhY2UgYW4gaW50ZXJuYWwgaGVhZGVyIHdpdGggYW4KKyAgZW1wdHkgb25lLCB5b3UgcHJldmVudCB0aGF0IGhlYWRlciBmcm9tIGJlaW5nIHNlbnQuIFRvIHByZXZlbnQgdGhlIEhvc3Q6CisgIGhlYWRlciBmcm9tIGJlaW5nIHVzZWQ6CisKKyAgICAgICAgY3VybCAtSCAiSG9zdDoiIHd3dy5zZXJ2ZXIuY29tCisKK0ZUUCBhbmQgUEFUSCBOQU1FUworCisgIERvIG5vdGUgdGhhdCB3aGVuIGdldHRpbmcgZmlsZXMgd2l0aCB0aGUgZnRwOi8vIFVSTCwgdGhlIGdpdmVuIHBhdGggaXMKKyAgcmVsYXRpdmUgdGhlIGRpcmVjdG9yeSB5b3UgZW50ZXIuIFRvIGdldCB0aGUgZmlsZSAnUkVBRE1FJyBmcm9tIHlvdXIgaG9tZQorICBkaXJlY3RvcnkgYXQgeW91ciBmdHAgc2l0ZSwgZG86CisKKyAgICAgICAgY3VybCBmdHA6Ly91c2VyOnBhc3N3ZEBteS5zaXRlLmNvbS9SRUFETUUKKworICBCdXQgaWYgeW91IHdhbnQgdGhlIFJFQURNRSBmaWxlIGZyb20gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoYXQgdmVyeSBzYW1lCisgIHNpdGUsIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGFic29sdXRlIGZpbGUgbmFtZToKKworICAgICAgICBjdXJsIGZ0cDovL3VzZXI6cGFzc3dkQG15LnNpdGUuY29tLy9SRUFETUUKKworICAoSS5lIHdpdGggYW4gZXh0cmEgc2xhc2ggaW4gZnJvbnQgb2YgdGhlIGZpbGUgbmFtZS4pCisKK1NGVFAgYW5kIFNDUCBhbmQgUEFUSCBOQU1FUworCisgIFdpdGggc2Z0cDogYW5kIHNjcDogVVJMcywgdGhlIHBhdGggbmFtZSBnaXZlbiBpcyB0aGUgYWJzb2x1dGUgbmFtZSBvbiB0aGUKKyAgc2VydmVyLiBUbyBhY2Nlc3MgYSBmaWxlIHJlbGF0aXZlIHRvIHRoZSByZW1vdGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LAorICBwcmVmaXggdGhlIGZpbGUgd2l0aCAvfi8gLCBzdWNoIGFzOgorCisgICAgICAgIGN1cmwgLXUgJFVTRVIgc2Z0cDovL2hvbWUuZXhhbXBsZS5jb20vfi8uYmFzaHJjCisKK0ZUUCBhbmQgZmlyZXdhbGxzCisKKyAgVGhlIEZUUCBwcm90b2NvbCByZXF1aXJlcyBvbmUgb2YgdGhlIGludm9sdmVkIHBhcnRpZXMgdG8gb3BlbiBhIHNlY29uZAorICBjb25uZWN0aW9uIGFzIHNvb24gYXMgZGF0YSBpcyBhYm91dCB0byBnZXQgdHJhbnNmZXJlZC4gVGhlcmUgYXJlIHR3byB3YXlzIHRvCisgIGRvIHRoaXMuCisKKyAgVGhlIGRlZmF1bHQgd2F5IGZvciBjdXJsIGlzIHRvIGlzc3VlIHRoZSBQQVNWIGNvbW1hbmQgd2hpY2ggY2F1c2VzIHRoZQorICBzZXJ2ZXIgdG8gb3BlbiBhbm90aGVyIHBvcnQgYW5kIGF3YWl0IGFub3RoZXIgY29ubmVjdGlvbiBwZXJmb3JtZWQgYnkgdGhlCisgIGNsaWVudC4gVGhpcyBpcyBnb29kIGlmIHRoZSBjbGllbnQgaXMgYmVoaW5kIGEgZmlyZXdhbGwgdGhhdCBkb24ndCBhbGxvdworICBpbmNvbWluZyBjb25uZWN0aW9ucy4KKworICAgICAgICBjdXJsIGZ0cC5kb3dubG9hZC5jb20KKworICBJZiB0aGUgc2VydmVyIGZvciBleGFtcGxlLCBpcyBiZWhpbmQgYSBmaXJld2FsbCB0aGF0IGRvbid0IGFsbG93IGNvbm5lY3Rpb25zCisgIG9uIG90aGVyIHBvcnRzIHRoYW4gMjEgKG9yIGlmIGl0IGp1c3QgZG9lc24ndCBzdXBwb3J0IHRoZSBQQVNWIGNvbW1hbmQpLCB0aGUKKyAgb3RoZXIgd2F5IHRvIGRvIGl0IGlzIHRvIHVzZSB0aGUgUE9SVCBjb21tYW5kIGFuZCBpbnN0cnVjdCB0aGUgc2VydmVyIHRvCisgIGNvbm5lY3QgdG8gdGhlIGNsaWVudCBvbiB0aGUgZ2l2ZW4gKGFzIHBhcmFtZXRlcnMgdG8gdGhlIFBPUlQgY29tbWFuZCkgSVAKKyAgbnVtYmVyIGFuZCBwb3J0LgorCisgIFRoZSAtUCBmbGFnIHRvIGN1cmwgc3VwcG9ydHMgYSBmZXcgZGlmZmVyZW50IG9wdGlvbnMuIFlvdXIgbWFjaGluZSBtYXkgaGF2ZQorICBzZXZlcmFsIElQLWFkZHJlc3NlcyBhbmQvb3IgbmV0d29yayBpbnRlcmZhY2VzIGFuZCBjdXJsIGFsbG93cyB5b3UgdG8gc2VsZWN0CisgIHdoaWNoIG9mIHRoZW0gdG8gdXNlLiBEZWZhdWx0IGFkZHJlc3MgY2FuIGFsc28gYmUgdXNlZDoKKworICAgICAgICBjdXJsIC1QIC0gZnRwLmRvd25sb2FkLmNvbQorCisgIERvd25sb2FkIHdpdGggUE9SVCBidXQgdXNlIHRoZSBJUCBhZGRyZXNzIG9mIG91ciAnbGUwJyBpbnRlcmZhY2UgKHRoaXMgZG9lcworICBub3Qgd29yayBvbiB3aW5kb3dzKToKKworICAgICAgICBjdXJsIC1QIGxlMCBmdHAuZG93bmxvYWQuY29tCisKKyAgRG93bmxvYWQgd2l0aCBQT1JUIGJ1dCB1c2UgMTkyLjE2OC4wLjEwIGFzIG91ciBJUCBhZGRyZXNzIHRvIHVzZToKKworICAgICAgICBjdXJsIC1QIDE5Mi4xNjguMC4xMCBmdHAuZG93bmxvYWQuY29tCisKK05FVFdPUksgSU5URVJGQUNFCisKKyAgR2V0IGEgd2ViIHBhZ2UgZnJvbSBhIHNlcnZlciB1c2luZyBhIHNwZWNpZmllZCBwb3J0IGZvciB0aGUgaW50ZXJmYWNlOgorCisgICAgICAgIGN1cmwgLS1pbnRlcmZhY2UgZXRoMDoxIGh0dHA6Ly93d3cubmV0c2NhcGUuY29tLworCisgIG9yCisKKyAgICAgICAgY3VybCAtLWludGVyZmFjZSAxOTIuMTY4LjEuMTAgaHR0cDovL3d3dy5uZXRzY2FwZS5jb20vCisKK0hUVFBTCisKKyAgU2VjdXJlIEhUVFAgcmVxdWlyZXMgU1NMIGxpYnJhcmllcyB0byBiZSBpbnN0YWxsZWQgYW5kIHVzZWQgd2hlbiBjdXJsIGlzCisgIGJ1aWx0LiBJZiB0aGF0IGlzIGRvbmUsIGN1cmwgaXMgY2FwYWJsZSBvZiByZXRyaWV2aW5nIGFuZCBwb3N0aW5nIGRvY3VtZW50cworICB1c2luZyB0aGUgSFRUUFMgcHJvdG9jb2wuCisKKyAgRXhhbXBsZToKKworICAgICAgICBjdXJsIGh0dHBzOi8vd3d3LnNlY3VyZS1zaXRlLmNvbQorCisgIEN1cmwgaXMgYWxzbyBjYXBhYmxlIG9mIHVzaW5nIHlvdXIgcGVyc29uYWwgY2VydGlmaWNhdGVzIHRvIGdldC9wb3N0IGZpbGVzCisgIGZyb20gc2l0ZXMgdGhhdCByZXF1aXJlIHZhbGlkIGNlcnRpZmljYXRlcy4gVGhlIG9ubHkgZHJhd2JhY2sgaXMgdGhhdCB0aGUKKyAgY2VydGlmaWNhdGUgbmVlZHMgdG8gYmUgaW4gUEVNLWZvcm1hdC4gUEVNIGlzIGEgc3RhbmRhcmQgYW5kIG9wZW4gZm9ybWF0IHRvCisgIHN0b3JlIGNlcnRpZmljYXRlcyB3aXRoLCBidXQgaXQgaXMgbm90IHVzZWQgYnkgdGhlIG1vc3QgY29tbW9ubHkgdXNlZAorICBicm93c2VycyAoTmV0c2NhcGUgYW5kIE1TSUUgYm90aCB1c2UgdGhlIHNvIGNhbGxlZCBQS0NTIzEyIGZvcm1hdCkuIElmIHlvdQorICB3YW50IGN1cmwgdG8gdXNlIHRoZSBjZXJ0aWZpY2F0ZXMgeW91IHVzZSB3aXRoIHlvdXIgKGZhdm91cml0ZSkgYnJvd3NlciwgeW91CisgIG1heSBuZWVkIHRvIGRvd25sb2FkL2NvbXBpbGUgYSBjb252ZXJ0ZXIgdGhhdCBjYW4gY29udmVydCB5b3VyIGJyb3dzZXIncworICBmb3JtYXR0ZWQgY2VydGlmaWNhdGVzIHRvIFBFTSBmb3JtYXR0ZWQgb25lcy4gVGhpcyBraW5kIG9mIGNvbnZlcnRlciBpcworICBpbmNsdWRlZCBpbiByZWNlbnQgdmVyc2lvbnMgb2YgT3BlblNTTCwgYW5kIGZvciBvbGRlciB2ZXJzaW9ucyBEciBTdGVwaGVuCisgIE4uIEhlbnNvbiBoYXMgd3JpdHRlbiBhIHBhdGNoIGZvciBTU0xlYXkgdGhhdCBhZGRzIHRoaXMgZnVuY3Rpb25hbGl0eS4gWW91CisgIGNhbiBnZXQgaGlzIHBhdGNoICh0aGF0IHJlcXVpcmVzIGFuIFNTTGVheSBpbnN0YWxsYXRpb24pIGZyb20gaGlzIHNpdGUgYXQ6CisgIGh0dHA6Ly93d3cuZHJoLWNvbnN1bHRhbmN5LmRlbW9uLmNvLnVrLworCisgIEV4YW1wbGUgb24gaG93IHRvIGF1dG9tYXRpY2FsbHkgcmV0cmlldmUgYSBkb2N1bWVudCB1c2luZyBhIGNlcnRpZmljYXRlIHdpdGgKKyAgYSBwZXJzb25hbCBwYXNzd29yZDoKKworICAgICAgICBjdXJsIC1FIC9wYXRoL3RvL2NlcnQucGVtOnBhc3N3b3JkIGh0dHBzOi8vc2VjdXJlLnNpdGUuY29tLworCisgIElmIHlvdSBuZWdsZWN0IHRvIHNwZWNpZnkgdGhlIHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHlvdSB3aWxsIGJlCisgIHByb21wdGVkIGZvciB0aGUgY29ycmVjdCBwYXNzd29yZCBiZWZvcmUgYW55IGRhdGEgY2FuIGJlIHJlY2VpdmVkLgorCisgIE1hbnkgb2xkZXIgU1NMLXNlcnZlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIFNTTHYzIG9yIFRMUywgdGhhdCBuZXdlciB2ZXJzaW9ucworICBvZiBPcGVuU1NMIGV0YyBpcyB1c2luZywgdGhlcmVmb3JlIGl0IGlzIHNvbWV0aW1lcyB1c2VmdWwgdG8gc3BlY2lmeSB3aGF0CisgIFNTTC12ZXJzaW9uIGN1cmwgc2hvdWxkIHVzZS4gVXNlIC0zLCAtMiBvciAtMSB0byBzcGVjaWZ5IHRoYXQgZXhhY3QgU1NMCisgIHZlcnNpb24gdG8gdXNlIChmb3IgU1NMdjMsIFNTTHYyIG9yIFRMU3YxIHJlc3BlY3RpdmVseSk6CisKKyAgICAgICAgY3VybCAtMiBodHRwczovL3NlY3VyZS5zaXRlLmNvbS8KKworICBPdGhlcndpc2UsIGN1cmwgd2lsbCBmaXJzdCBhdHRlbXB0IHRvIHVzZSB2MyBhbmQgdGhlbiB2Mi4KKworICBUbyB1c2UgT3BlblNTTCB0byBjb252ZXJ0IHlvdXIgZmF2b3VyaXRlIGJyb3dzZXIncyBjZXJ0aWZpY2F0ZSBpbnRvIGEgUEVNCisgIGZvcm1hdHRlZCBvbmUgdGhhdCBjdXJsIGNhbiB1c2UsIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMgKGFzc3VtaW5nIG5ldHNjYXBlLAorICBidXQgSUUgaXMgbGlrZWx5IHRvIHdvcmsgc2ltaWxhcmx5KToKKworICAgIFlvdSBzdGFydCB3aXRoIGhpdHRpbmcgdGhlICdzZWN1cml0eScgbWVudSBidXR0b24gaW4gbmV0c2NhcGUuCisKKyAgICBTZWxlY3QgJ2NlcnRpZmljYXRlcy0+eW91cnMnIGFuZCB0aGVuIHBpY2sgYSBjZXJ0aWZpY2F0ZSBpbiB0aGUgbGlzdAorCisgICAgUHJlc3MgdGhlICdleHBvcnQnIGJ1dHRvbgorCisgICAgZW50ZXIgeW91ciBQSU4gY29kZSBmb3IgdGhlIGNlcnRzCisKKyAgICBzZWxlY3QgYSBwcm9wZXIgcGxhY2UgdG8gc2F2ZSBpdAorCisgICAgUnVuIHRoZSAnb3BlbnNzbCcgYXBwbGljYXRpb24gdG8gY29udmVydCB0aGUgY2VydGlmaWNhdGUuIElmIHlvdSBjZCB0byB0aGUKKyAgICBvcGVuc3NsIGluc3RhbGxhdGlvbiwgeW91IGNhbiBkbyBpdCBsaWtlOgorCisgICAgICMgLi9hcHBzL29wZW5zc2wgcGtjczEyIC1pbiBbZmlsZSB5b3Ugc2F2ZWRdIC1jbGNlcnRzIC1vdXQgW1BFTWZpbGVdCisKKworUkVTVU1JTkcgRklMRSBUUkFOU0ZFUlMKKworIFRvIGNvbnRpbnVlIGEgZmlsZSB0cmFuc2ZlciB3aGVyZSBpdCB3YXMgcHJldmlvdXNseSBhYm9ydGVkLCBjdXJsIHN1cHBvcnRzCisgcmVzdW1lIG9uIGh0dHAocykgZG93bmxvYWRzIGFzIHdlbGwgYXMgZnRwIHVwbG9hZHMgYW5kIGRvd25sb2Fkcy4KKworIENvbnRpbnVlIGRvd25sb2FkaW5nIGEgZG9jdW1lbnQ6CisKKyAgICAgICAgY3VybCAtQyAtIC1vIGZpbGUgZnRwOi8vZnRwLnNlcnZlci5jb20vcGF0aC9maWxlCisKKyBDb250aW51ZSB1cGxvYWRpbmcgYSBkb2N1bWVudCgqMSk6CisKKyAgICAgICAgY3VybCAtQyAtIC1UIGZpbGUgZnRwOi8vZnRwLnNlcnZlci5jb20vcGF0aC9maWxlCisKKyBDb250aW51ZSBkb3dubG9hZGluZyBhIGRvY3VtZW50IGZyb20gYSB3ZWIgc2VydmVyKCoyKToKKworICAgICAgICBjdXJsIC1DIC0gLW8gZmlsZSBodHRwOi8vd3d3LnNlcnZlci5jb20vCisKKyAoKjEpID0gVGhpcyByZXF1aXJlcyB0aGF0IHRoZSBmdHAgc2VydmVyIHN1cHBvcnRzIHRoZSBub24tc3RhbmRhcmQgY29tbWFuZAorICAgICAgICBTSVpFLiBJZiBpdCBkb2Vzbid0LCBjdXJsIHdpbGwgc2F5IHNvLgorCisgKCoyKSA9IFRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgd2ViIHNlcnZlciBzdXBwb3J0cyBhdCBsZWFzdCBIVFRQLzEuMS4gSWYgaXQKKyAgICAgICAgZG9lc24ndCwgY3VybCB3aWxsIHNheSBzby4KKworVElNRSBDT05ESVRJT05TCisKKyBIVFRQIGFsbG93cyBhIGNsaWVudCB0byBzcGVjaWZ5IGEgdGltZSBjb25kaXRpb24gZm9yIHRoZSBkb2N1bWVudCBpdAorIHJlcXVlc3RzLiBJdCBpcyBJZi1Nb2RpZmllZC1TaW5jZSBvciBJZi1Vbm1vZGlmaWVkLVNpbmNlLiBDdXJsIGFsbG93IHlvdSB0bworIHNwZWNpZnkgdGhlbSB3aXRoIHRoZSAtei8tLXRpbWUtY29uZCBmbGFnLgorCisgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZWFzaWx5IG1ha2UgYSBkb3dubG9hZCB0aGF0IG9ubHkgZ2V0cyBwZXJmb3JtZWQgaWYgdGhlCisgcmVtb3RlIGZpbGUgaXMgbmV3ZXIgdGhhbiBhIGxvY2FsIGNvcHkuIEl0IHdvdWxkIGJlIG1hZGUgbGlrZToKKworICAgICAgICBjdXJsIC16IGxvY2FsLmh0bWwgaHR0cDovL3JlbW90ZS5zZXJ2ZXIuY29tL3JlbW90ZS5odG1sCisKKyBPciB5b3UgY2FuIGRvd25sb2FkIGEgZmlsZSBvbmx5IGlmIHRoZSBsb2NhbCBmaWxlIGlzIG5ld2VyIHRoYW4gdGhlIHJlbW90ZQorIG9uZS4gRG8gdGhpcyBieSBwcmVwZW5kaW5nIHRoZSBkYXRlIHN0cmluZyB3aXRoIGEgJy0nLCBhcyBpbjoKKworICAgICAgICBjdXJsIC16IC1sb2NhbC5odG1sIGh0dHA6Ly9yZW1vdGUuc2VydmVyLmNvbS9yZW1vdGUuaHRtbAorCisgWW91IGNhbiBzcGVjaWZ5IGEgImZyZWUgdGV4dCIgZGF0ZSBhcyBjb25kaXRpb24uIFRlbGwgY3VybCB0byBvbmx5IGRvd25sb2FkCisgdGhlIGZpbGUgaWYgaXQgd2FzIHVwZGF0ZWQgc2luY2UgSmFudWFyeSAxMiwgMjAxMjoKKworICAgICAgICBjdXJsIC16ICJKYW4gMTIgMjAxMiIgaHR0cDovL3JlbW90ZS5zZXJ2ZXIuY29tL3JlbW90ZS5odG1sCisKKyBDdXJsIHdpbGwgdGhlbiBhY2NlcHQgYSB3aWRlIHJhbmdlIG9mIGRhdGUgZm9ybWF0cy4gWW91IGFsd2F5cyBtYWtlIHRoZSBkYXRlCisgY2hlY2sgdGhlIG90aGVyIHdheSBhcm91bmQgYnkgcHJlcGVuZGluZyBpdCB3aXRoIGEgZGFzaCAnLScuCisKK0RJQ1QKKworICBGb3IgZnVuIHRyeQorCisgICAgICAgIGN1cmwgZGljdDovL2RpY3Qub3JnL206Y3VybAorICAgICAgICBjdXJsIGRpY3Q6Ly9kaWN0Lm9yZy9kOmhlaXNlbmJ1ZzpqYXJnb24KKyAgICAgICAgY3VybCBkaWN0Oi8vZGljdC5vcmcvZDpkYW5pZWw6d2ViMTkxMworCisgIEFsaWFzZXMgZm9yICdtJyBhcmUgJ21hdGNoJyBhbmQgJ2ZpbmQnLCBhbmQgYWxpYXNlcyBmb3IgJ2QnIGFyZSAnZGVmaW5lJworICBhbmQgJ2xvb2t1cCcuIEZvciBleGFtcGxlLAorCisgICAgICAgIGN1cmwgZGljdDovL2RpY3Qub3JnL2ZpbmQ6Y3VybAorCisgIENvbW1hbmRzIHRoYXQgYnJlYWsgdGhlIFVSTCBkZXNjcmlwdGlvbiBvZiB0aGUgUkZDIChidXQgbm90IHRoZSBESUNUCisgIHByb3RvY29sKSBhcmUKKworICAgICAgICBjdXJsIGRpY3Q6Ly9kaWN0Lm9yZy9zaG93OmRiCisgICAgICAgIGN1cmwgZGljdDovL2RpY3Qub3JnL3Nob3c6c3RyYXQKKworICBBdXRoZW50aWNhdGlvbiBpcyBzdGlsbCBtaXNzaW5nIChidXQgdGhpcyBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIFJGQykKKworTERBUAorCisgIElmIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgT3BlbkxEQVAgbGlicmFyeSwgY3VybCBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQKKyAgYW5kIG9mZmVyIGxkYXA6Ly8gc3VwcG9ydC4KKworICBMREFQIGlzIGEgY29tcGxleCB0aGluZyBhbmQgd3JpdGluZyBhbiBMREFQIHF1ZXJ5IGlzIG5vdCBhbiBlYXN5IHRhc2suIEkgZG8KKyAgYWR2aWNlIHlvdSB0byBkaWcgdXAgdGhlIHN5bnRheCBkZXNjcmlwdGlvbiBmb3IgdGhhdCBlbHNld2hlcmUuIFR3byBwbGFjZXMKKyAgdGhhdCBtaWdodCBzdWl0IHlvdSBhcmU6CisKKyAgTmV0c2NhcGUncyAiTmV0c2NhcGUgRGlyZWN0b3J5IFNESyAzLjAgZm9yIEMgUHJvZ3JhbW1lcidzIEd1aWRlIENoYXB0ZXIgMTA6CisgIFdvcmtpbmcgd2l0aCBMREFQIFVSTHMiOgorICBodHRwOi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21hbnVhbHMvZGlyc2RrL2NzZGszMC91cmwuaHRtCisKKyAgUkZDIDIyNTUsICJUaGUgTERBUCBVUkwgRm9ybWF0IiBodHRwOi8vY3VybC5oYXh4LnNlL3JmYy9yZmMyMjU1LnR4dAorCisgIFRvIHNob3cgeW91IGFuIGV4YW1wbGUsIHRoaXMgaXMgbm93IEkgY2FuIGdldCBhbGwgcGVvcGxlIGZyb20gbXkgbG9jYWwgTERBUAorICBzZXJ2ZXIgdGhhdCBoYXMgYSBjZXJ0YWluIHN1Yi1kb21haW4gaW4gdGhlaXIgZW1haWwgYWRkcmVzczoKKworICAgICAgICBjdXJsIC1CICJsZGFwOi8vbGRhcC5mcm9udGVjLnNlL289ZnJvbnRlYz8/c3ViP21haWw9KnN0aC5mcm9udGVjLnNlIgorCisgIElmIEkgd2FudCB0aGUgc2FtZSBpbmZvIGluIEhUTUwgZm9ybWF0LCBJIGNhbiBnZXQgaXQgYnkgbm90IHVzaW5nIHRoZSAtQgorICAoZW5mb3JjZSBBU0NJSSkgZmxhZy4KKworRU5WSVJPTk1FTlQgVkFSSUFCTEVTCisKKyAgQ3VybCByZWFkcyBhbmQgdW5kZXJzdGFuZHMgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisKKyAgICAgICAgaHR0cF9wcm94eSwgSFRUUFNfUFJPWFksIEZUUF9QUk9YWQorCisgIFRoZXkgc2hvdWxkIGJlIHNldCBmb3IgcHJvdG9jb2wtc3BlY2lmaWMgcHJveGllcy4gR2VuZXJhbCBwcm94eSBzaG91bGQgYmUKKyAgc2V0IHdpdGgKKworICAgICAgICBBTExfUFJPWFkKKworICBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGhvc3QgbmFtZXMgdGhhdCBzaG91bGRuJ3QgZ28gdGhyb3VnaCBhbnkgcHJveHkgaXMKKyAgc2V0IGluIChvbmx5IGFuIGFzdGVyaXNrLCAnKicgbWF0Y2hlcyBhbGwgaG9zdHMpCisKKyAgICAgICAgTk9fUFJPWFkKKworICBJZiB0aGUgaG9zdCBuYW1lIG1hdGNoZXMgb25lIG9mIHRoZXNlIHN0cmluZ3MsIG9yIHRoZSBob3N0IGlzIHdpdGhpbiB0aGUKKyAgZG9tYWluIG9mIG9uZSBvZiB0aGVzZSBzdHJpbmdzLCB0cmFuc2FjdGlvbnMgd2l0aCB0aGF0IG5vZGUgd2lsbCBub3QgYmUKKyAgcHJveGllZC4KKworCisgIFRoZSB1c2FnZSBvZiB0aGUgLXgvLS1wcm94eSBmbGFnIG92ZXJyaWRlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCitORVRSQworCisgIFVuaXggaW50cm9kdWNlZCB0aGUgLm5ldHJjIGNvbmNlcHQgYSBsb25nIHRpbWUgYWdvLiBJdCBpcyBhIHdheSBmb3IgYSB1c2VyCisgIHRvIHNwZWNpZnkgbmFtZSBhbmQgcGFzc3dvcmQgZm9yIGNvbW1vbmx5IHZpc2l0ZWQgZnRwIHNpdGVzIGluIGEgZmlsZSBzbworICB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIHR5cGUgdGhlbSBpbiBlYWNoIHRpbWUgeW91IHZpc2l0IHRob3NlIHNpdGVzLiBZb3UKKyAgcmVhbGl6ZSB0aGlzIGlzIGEgYmlnIHNlY3VyaXR5IHJpc2sgaWYgc29tZW9uZSBlbHNlIGdldHMgaG9sZCBvZiB5b3VyCisgIHBhc3N3b3Jkcywgc28gdGhlcmVmb3JlIG1vc3QgdW5peCBwcm9ncmFtcyB3b24ndCByZWFkIHRoaXMgZmlsZSB1bmxlc3MgaXQgaXMKKyAgb25seSByZWFkYWJsZSBieSB5b3Vyc2VsZiAoY3VybCBkb2Vzbid0IGNhcmUgdGhvdWdoKS4KKworICBDdXJsIHN1cHBvcnRzIC5uZXRyYyBmaWxlcyBpZiB0b2xkIHNvICh1c2luZyB0aGUgLW4vLS1uZXRyYyBhbmQKKyAgLS1uZXRyYy1vcHRpb25hbCBvcHRpb25zKS4gVGhpcyBpcyBub3QgcmVzdHJpY3RlZCB0byBvbmx5IGZ0cCwKKyAgYnV0IGN1cmwgY2FuIHVzZSBpdCBmb3IgYWxsIHByb3RvY29scyB3aGVyZSBhdXRoZW50aWNhdGlvbiBpcyB1c2VkLgorCisgIEEgdmVyeSBzaW1wbGUgLm5ldHJjIGZpbGUgY291bGQgbG9vayBzb21ldGhpbmcgbGlrZToKKworICAgICAgICBtYWNoaW5lIGN1cmwuaGF4eC5zZSBsb2dpbiBpYW1kYW5pZWwgcGFzc3dvcmQgbXlzZWNyZXQKKworQ1VTVE9NIE9VVFBVVAorCisgIFRvIGJldHRlciBhbGxvdyBzY3JpcHQgcHJvZ3JhbW1lcnMgdG8gZ2V0IHRvIGtub3cgYWJvdXQgdGhlIHByb2dyZXNzIG9mCisgIGN1cmwsIHRoZSAtdy8tLXdyaXRlLW91dCBvcHRpb24gd2FzIGludHJvZHVjZWQuIFVzaW5nIHRoaXMsIHlvdSBjYW4gc3BlY2lmeQorICB3aGF0IGluZm9ybWF0aW9uIGZyb20gdGhlIHByZXZpb3VzIHRyYW5zZmVyIHlvdSB3YW50IHRvIGV4dHJhY3QuCisKKyAgVG8gZGlzcGxheSB0aGUgYW1vdW50IG9mIGJ5dGVzIGRvd25sb2FkZWQgdG9nZXRoZXIgd2l0aCBzb21lIHRleHQgYW5kIGFuCisgIGVuZGluZyBuZXdsaW5lOgorCisgICAgICAgIGN1cmwgLXcgJ1dlIGRvd25sb2FkZWQgJXtzaXplX2Rvd25sb2FkfSBieXRlc1xuJyB3d3cuZG93bmxvYWQuY29tCisKK0tFUkJFUk9TIEZUUCBUUkFOU0ZFUgorCisgIEN1cmwgc3VwcG9ydHMga2VyYmVyb3M0IGFuZCBrZXJiZXJvczUvR1NTQVBJIGZvciBGVFAgdHJhbnNmZXJzLiBZb3UgbmVlZAorICB0aGUga2VyYmVyb3MgcGFja2FnZSBpbnN0YWxsZWQgYW5kIHVzZWQgYXQgY3VybCBidWlsZCB0aW1lIGZvciBpdCB0byBiZQorICB1c2VkLgorCisgIEZpcnN0LCBnZXQgdGhlIGtyYi10aWNrZXQgdGhlIG5vcm1hbCB3YXksIGxpa2Ugd2l0aCB0aGUga2luaXQva2F1dGggdG9vbC4KKyAgVGhlbiB1c2UgY3VybCBpbiB3YXkgc2ltaWxhciB0bzoKKworICAgICAgICBjdXJsIC0ta3JiIHByaXZhdGUgZnRwOi8va3JiNHNpdGUuY29tIC11IHVzZXJuYW1lOmZha2Vwd2QKKworICBUaGVyZSdzIG5vIHVzZSBmb3IgYSBwYXNzd29yZCBvbiB0aGUgLXUgc3dpdGNoLCBidXQgYSBibGFuayBvbmUgd2lsbCBtYWtlCisgIGN1cmwgYXNrIGZvciBvbmUgYW5kIHlvdSBhbHJlYWR5IGVudGVyZWQgdGhlIHJlYWwgcGFzc3dvcmQgdG8ga2luaXQva2F1dGguCisKK1RFTE5FVAorCisgIFRoZSBjdXJsIHRlbG5ldCBzdXBwb3J0IGlzIGJhc2ljIGFuZCB2ZXJ5IGVhc3kgdG8gdXNlLiBDdXJsIHBhc3NlcyBhbGwgZGF0YQorICBwYXNzZWQgdG8gaXQgb24gc3RkaW4gdG8gdGhlIHJlbW90ZSBzZXJ2ZXIuIENvbm5lY3QgdG8gYSByZW1vdGUgdGVsbmV0CisgIHNlcnZlciB1c2luZyBhIGNvbW1hbmQgbGluZSBzaW1pbGFyIHRvOgorCisgICAgICAgIGN1cmwgdGVsbmV0Oi8vcmVtb3RlLnNlcnZlci5jb20KKworICBBbmQgZW50ZXIgdGhlIGRhdGEgdG8gcGFzcyB0byB0aGUgc2VydmVyIG9uIHN0ZGluLiBUaGUgcmVzdWx0IHdpbGwgYmUgc2VudAorICB0byBzdGRvdXQgb3IgdG8gdGhlIGZpbGUgeW91IHNwZWNpZnkgd2l0aCAtby4KKworICBZb3UgbWlnaHQgd2FudCB0aGUgLU4vLS1uby1idWZmZXIgb3B0aW9uIHRvIHN3aXRjaCBvZmYgdGhlIGJ1ZmZlcmVkIG91dHB1dAorICBmb3Igc2xvdyBjb25uZWN0aW9ucyBvciBzaW1pbGFyLgorCisgIFBhc3Mgb3B0aW9ucyB0byB0aGUgdGVsbmV0IHByb3RvY29sIG5lZ290aWF0aW9uLCBieSB1c2luZyB0aGUgLXQgb3B0aW9uLiBUbworICB0ZWxsIHRoZSBzZXJ2ZXIgd2UgdXNlIGEgdnQxMDAgdGVybWluYWwsIHRyeSBzb21ldGhpbmcgbGlrZToKKworICAgICAgICBjdXJsIC10VFRZUEU9dnQxMDAgdGVsbmV0Oi8vcmVtb3RlLnNlcnZlci5jb20KKworICBPdGhlciBpbnRlcmVzdGluZyBvcHRpb25zIGZvciBpdCAtdCBpbmNsdWRlOgorCisgICAtIFhESVNQTE9DPTxYIGRpc3BsYXk+IFNldHMgdGhlIFggZGlzcGxheSBsb2NhdGlvbi4KKworICAgLSBORVdfRU5WPTx2YXIsdmFsPiBTZXRzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgIE5PVEU6IHRoZSB0ZWxuZXQgcHJvdG9jb2wgZG9lcyBub3Qgc3BlY2lmeSBhbnkgd2F5IHRvIGxvZ2luIHdpdGggYSBzcGVjaWZpZWQKKyAgdXNlciBhbmQgcGFzc3dvcmQgc28gY3VybCBjYW4ndCBkbyB0aGF0IGF1dG9tYXRpY2FsbHkuIFRvIGRvIHRoYXQsIHlvdSBuZWVkCisgIHRvIHRyYWNrIHdoZW4gdGhlIGxvZ2luIHByb21wdCBpcyByZWNlaXZlZCBhbmQgc2VuZCB0aGUgdXNlcm5hbWUgYW5kCisgIHBhc3N3b3JkIGFjY29yZGluZ2x5LgorCitQRVJTSVNURU5UIENPTk5FQ1RJT05TCisKKyAgU3BlY2lmeWluZyBtdWx0aXBsZSBmaWxlcyBvbiBhIHNpbmdsZSBjb21tYW5kIGxpbmUgd2lsbCBtYWtlIGN1cmwgdHJhbnNmZXIKKyAgYWxsIG9mIHRoZW0sIG9uZSBhZnRlciB0aGUgb3RoZXIgaW4gdGhlIHNwZWNpZmllZCBvcmRlci4KKworICBsaWJjdXJsIHdpbGwgYXR0ZW1wdCB0byB1c2UgcGVyc2lzdGVudCBjb25uZWN0aW9ucyBmb3IgdGhlIHRyYW5zZmVycyBzbyB0aGF0CisgIHRoZSBzZWNvbmQgdHJhbnNmZXIgdG8gdGhlIHNhbWUgaG9zdCBjYW4gdXNlIHRoZSBzYW1lIGNvbm5lY3Rpb24gdGhhdCB3YXMKKyAgYWxyZWFkeSBpbml0aWF0ZWQgYW5kIHdhcyBsZWZ0IG9wZW4gaW4gdGhlIHByZXZpb3VzIHRyYW5zZmVyLiBUaGlzIGdyZWF0bHkKKyAgZGVjcmVhc2VzIGNvbm5lY3Rpb24gdGltZSBmb3IgYWxsIGJ1dCB0aGUgZmlyc3QgdHJhbnNmZXIgYW5kIGl0IG1ha2VzIGEgZmFyCisgIGJldHRlciB1c2Ugb2YgdGhlIG5ldHdvcmsuCisKKyAgTm90ZSB0aGF0IGN1cmwgY2Fubm90IHVzZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zIGZvciB0cmFuc2ZlcnMgdGhhdCBhcmUgdXNlZAorICBpbiBzdWJzZXF1ZW5jZSBjdXJsIGludm9rZXMuIFRyeSB0byBzdHVmZiBhcyBtYW55IFVSTHMgYXMgcG9zc2libGUgb24gdGhlCisgIHNhbWUgY29tbWFuZCBsaW5lIGlmIHRoZXkgYXJlIHVzaW5nIHRoZSBzYW1lIGhvc3QsIGFzIHRoYXQnbGwgbWFrZSB0aGUKKyAgdHJhbnNmZXJzIGZhc3Rlci4gSWYgeW91IHVzZSBhIGh0dHAgcHJveHkgZm9yIGZpbGUgdHJhbnNmZXJzLCBwcmFjdGljYWxseQorICBhbGwgdHJhbnNmZXJzIHdpbGwgYmUgcGVyc2lzdGVudC4KKworTVVMVElQTEUgVFJBTlNGRVJTIFdJVEggQSBTSU5HTEUgQ09NTUFORCBMSU5FCisKKyAgQXMgaXMgbWVudGlvbmVkIGFib3ZlLCB5b3UgY2FuIGRvd25sb2FkIG11bHRpcGxlIGZpbGVzIHdpdGggb25lIGNvbW1hbmQgbGluZQorICBieSBzaW1wbHkgYWRkaW5nIG1vcmUgVVJMcy4gSWYgeW91IHdhbnQgdGhvc2UgdG8gZ2V0IHNhdmVkIHRvIGEgbG9jYWwgZmlsZQorICBpbnN0ZWFkIG9mIGp1c3QgcHJpbnRlZCB0byBzdGRvdXQsIHlvdSBuZWVkIHRvIGFkZCBvbmUgc2F2ZSBvcHRpb24gZm9yIGVhY2gKKyAgVVJMIHlvdSBzcGVjaWZ5LiBOb3RlIHRoYXQgdGhpcyBhbHNvIGdvZXMgZm9yIHRoZSAtTyBvcHRpb24gKGJ1dCBub3QKKyAgLS1yZW1vdGUtbmFtZS1hbGwpLgorCisgIEZvciBleGFtcGxlOiBnZXQgdHdvIGZpbGVzIGFuZCB1c2UgLU8gZm9yIHRoZSBmaXJzdCBhbmQgYSBjdXN0b20gZmlsZQorICBuYW1lIGZvciB0aGUgc2Vjb25kOgorCisgICAgY3VybCAtTyBodHRwOi8vdXJsLmNvbS9maWxlLnR4dCBmdHA6Ly9mdHAuY29tL21vby5leGUgLW8gbW9vLmpwZworCisgIFlvdSBjYW4gYWxzbyB1cGxvYWQgbXVsdGlwbGUgZmlsZXMgaW4gYSBzaW1pbGFyIGZhc2hpb246CisKKyAgICBjdXJsIC1UIGxvY2FsMSBmdHA6Ly9mdHAuY29tL21vby5leGUgLVQgbG9jYWwyIGZ0cDovL2Z0cC5jb20vbW9vMi50eHQKKworSVB2NgorCisgIGN1cmwgd2lsbCBjb25uZWN0IHRvIGEgc2VydmVyIHdpdGggSVB2NiB3aGVuIGEgaG9zdCBsb29rdXAgcmV0dXJucyBhbiBJUHY2CisgIGFkZHJlc3MgYW5kIGZhbGwgYmFjayB0byBJUHY0IGlmIHRoZSBjb25uZWN0aW9uIGZhaWxzLiBUaGUgLS1pcHY0IGFuZCAtLWlwdjYKKyAgb3B0aW9ucyBjYW4gc3BlY2lmeSB3aGljaCBhZGRyZXNzIHRvIHVzZSB3aGVuIGJvdGggYXJlIGF2YWlsYWJsZS4gSVB2NgorICBhZGRyZXNzZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGRpcmVjdGx5IGluIFVSTHMgdXNpbmcgdGhlIHN5bnRheDoKKworICAgIGh0dHA6Ly9bMjAwMToxODkwOjExMTI6MTo6MjBdL292ZXJ2aWV3Lmh0bWwKKworICBXaGVuIHRoaXMgc3R5bGUgaXMgdXNlZCwgdGhlIC1nIG9wdGlvbiBtdXN0IGJlIGdpdmVuIHRvIHN0b3AgY3VybCBmcm9tCisgIGludGVycHJldGluZyB0aGUgc3F1YXJlIGJyYWNrZXRzIGFzIHNwZWNpYWwgZ2xvYmJpbmcgY2hhcmFjdGVycy4gIExpbmsgbG9jYWwKKyAgYW5kIHNpdGUgbG9jYWwgYWRkcmVzc2VzIGluY2x1ZGluZyBhIHNjb3BlIGlkZW50aWZpZXIsIHN1Y2ggYXMgZmU4MDo6MTIzNCUxLAorICBtYXkgYWxzbyBiZSB1c2VkLCBidXQgdGhlIHNjb3BlIHBvcnRpb24gbXVzdCBiZSBudW1lcmljIGFuZCB0aGUgcGVyY2VudAorICBjaGFyYWN0ZXIgbXVzdCBiZSBVUkwgZXNjYXBlZC4gVGhlIHByZXZpb3VzIGV4YW1wbGUgaW4gYW4gU0ZUUCBVUkwgbWlnaHQKKyAgbG9vayBsaWtlOgorCisgICAgc2Z0cDovL1tmZTgwOjoxMjM0JTI1MV0vCisKKyAgSVB2NiBhZGRyZXNzZXMgcHJvdmlkZWQgb3RoZXIgdGhhbiBpbiBVUkxzIChlLmcuIHRvIHRoZSAtLXByb3h5LCAtLWludGVyZmFjZQorICBvciAtLWZ0cC1wb3J0IG9wdGlvbnMpIHNob3VsZCBub3QgYmUgVVJMIGVuY29kZWQuCisKKworTUFJTElORyBMSVNUUworCisgIEZvciB5b3VyIGNvbnZlbmllbmNlLCB3ZSBoYXZlIHNldmVyYWwgb3BlbiBtYWlsaW5nIGxpc3RzIHRvIGRpc2N1c3MgY3VybCwKKyAgaXRzIGRldmVsb3BtZW50IGFuZCB0aGluZ3MgcmVsZXZhbnQgdG8gdGhpcy4gR2V0IGFsbCBpbmZvIGF0CisgIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC8uIFNvbWUgb2YgdGhlIGxpc3RzIGF2YWlsYWJsZSBhcmU6CisKKyAgY3VybC11c2VycworCisgICAgVXNlcnMgb2YgdGhlIGNvbW1hbmQgbGluZSB0b29sLiBIb3cgdG8gdXNlIGl0LCB3aGF0IGRvZXNuJ3Qgd29yaywgbmV3CisgICAgZmVhdHVyZXMsIHJlbGF0ZWQgdG9vbHMsIHF1ZXN0aW9ucywgbmV3cywgaW5zdGFsbGF0aW9ucywgY29tcGlsYXRpb25zLAorICAgIHJ1bm5pbmcsIHBvcnRpbmcgZXRjLgorCisgIGN1cmwtbGlicmFyeQorCisgICAgRGV2ZWxvcGVycyB1c2luZyBvciBkZXZlbG9waW5nIGxpYmN1cmwuIEJ1Z3MsIGV4dGVuc2lvbnMsIGltcHJvdmVtZW50cy4KKworICBjdXJsLWFubm91bmNlCisKKyAgICBMb3ctdHJhZmZpYy4gT25seSByZWNlaXZlcyBhbm5vdW5jZW1lbnRzIG9mIG5ldyBwdWJsaWMgdmVyc2lvbnMuIEF0IHdvcnN0LAorICAgIHRoYXQgbWFrZXMgc29tZXRoaW5nIGxpa2Ugb25lIG9yIHR3byBtYWlscyBwZXIgbW9udGgsIGJ1dCB1c3VhbGx5IG9ubHkgb25lCisgICAgbWFpbCBldmVyeSBzZWNvbmQgbW9udGguCisKKyAgY3VybC1hbmQtcGhwCisKKyAgICBVc2luZyB0aGUgY3VybCBmdW5jdGlvbnMgaW4gUEhQLiBFdmVyeXRoaW5nIGN1cmwgd2l0aCBhIFBIUCBhbmdsZS4gT3IgUEhQCisgICAgd2l0aCBhIGN1cmwgYW5nbGUuCisKKyAgY3VybC1hbmQtcHl0aG9uCisKKyAgICBQeXRob24gaGFja2VycyB1c2luZyBjdXJsIHdpdGggb3Igd2l0aG91dCB0aGUgcHl0aG9uIGJpbmRpbmcgcHljdXJsLgorCisgIFBsZWFzZSBkaXJlY3QgY3VybCBxdWVzdGlvbnMsIGZlYXR1cmUgcmVxdWVzdHMgYW5kIHRyb3VibGUgcmVwb3J0cyB0byBvbmUgb2YKKyAgdGhlc2UgbWFpbGluZyBsaXN0cyBpbnN0ZWFkIG9mIG1haWxpbmcgYW55IGluZGl2aWR1YWwuCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL01ha2VmaWxlLmFtIGIvY3VybC03LjI1LjAvZG9jcy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGIzMGRmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDYwIEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm8tZGVwZW5kZW5jaWVzCisKK21hbl9NQU5TID0gY3VybC4xIGN1cmwtY29uZmlnLjEKK0dFTkhUTUxQQUdFUyA9IGN1cmwuaHRtbCBjdXJsLWNvbmZpZy5odG1sCitQREZQQUdFUyA9IGN1cmwucGRmIGN1cmwtY29uZmlnLnBkZgorCitIVE1MUEFHRVMgPSAkKEdFTkhUTUxQQUdFUykgaW5kZXguaHRtbAorCitTVUJESVJTID0gZXhhbXBsZXMgbGliY3VybAorCitDTEVBTkZJTEVTID0gJChHRU5IVE1MUEFHRVMpICQoUERGUEFHRVMpCisKK0VYVFJBX0RJU1QgPSBNQU5VQUwgQlVHUyBDT05UUklCVVRFIEZBUSBGRUFUVVJFUyBJTlRFUk5BTFMgU1NMQ0VSVFMJIFwKKyBSRUFETUUud2luMzIgUkVTT1VSQ0VTIFRPRE8gVGhlQXJ0T2ZIdHRwU2NyaXB0aW5nIFRIQU5LUyBWRVJTSU9OUwkgXAorIEtOT1dOX0JVR1MgQklORElOR1MgJChtYW5fTUFOUykgJChIVE1MUEFHRVMpIEhJU1RPUlkgSU5TVEFMTAkJIFwKKyAkKFBERlBBR0VTKSBMSUNFTlNFLU1JWElORyBSRUFETUUubmV0d2FyZSBESVNUUk8tRElMRU1NQSBJTlNUQUxMLmRldmNwcCBcCisgTUFJTC1FVElRVUVUVEUKKworTUFOMkhUTUw9IHJvZmZpdCA8ICQ8ID4kQAorCitTVUZGSVhFUyA9IC4xIC5odG1sIC5wZGYKKworaHRtbDogJChIVE1MUEFHRVMpCisJY2QgbGliY3VybDsgbWFrZSBodG1sCisKK3BkZjogJChQREZQQUdFUykKKwljZCBsaWJjdXJsOyBtYWtlIHBkZgorCisuMS5odG1sOgorCSQoTUFOMkhUTUwpCisKKy4xLnBkZjoKKwlAKGZvbz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLlswLTldJCQvL2cnYDsgXAorCWdyb2ZmIC1UcHMgLW1hbiAkPCA+JCRmb28ucHM7IFwKKwlwczJwZGYgJCRmb28ucHMgJEA7IFwKKwlybSAkJGZvby5wczsgXAorCWVjaG8gImNvbnZlcnRlZCAkPCB0byAkQCIpCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvTWFrZWZpbGUuaW4gYi9jdXJsLTcuMjUuMC9kb2NzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTMwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjg0IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gZG9jcworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIElOU1RBTEwgXAorCVRIQU5LUyBUT0RPCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbXBpbGVycy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbmZvcHRzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtZnVuY3Rpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3BlbnNzbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW92ZXJyaWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtcmVlbnRyYW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtc3lzdGVtLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hjLXRyYW5zbGl0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3p6NTAteGMtb3ZyLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvc3JjL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitkZXBjb21wID0KK2FtX19kZXBmaWxlc19tYXliZSA9CitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZXhlYy1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgXAorCXBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJdW5pbnN0YWxsLXJlY3Vyc2l2ZQorbWFuMWRpciA9ICQobWFuZGlyKS9tYW4xCithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobWFuMWRpcikiCitNQU5TID0gJChtYW5fTUFOUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQlVJTERfTElCSE9TVE5BTUVfRkFMU0UgPSBAQlVJTERfTElCSE9TVE5BTUVfRkFMU0VACitCVUlMRF9MSUJIT1NUTkFNRV9UUlVFID0gQEJVSUxEX0xJQkhPU1ROQU1FX1RSVUVACitCVUlMRF9VTklUVEVTVFNfRkFMU0UgPSBAQlVJTERfVU5JVFRFU1RTX0ZBTFNFQAorQlVJTERfVU5JVFRFU1RTX1RSVUUgPSBAQlVJTERfVU5JVFRFU1RTX1RSVUVACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ09ORklHVVJFX09QVElPTlMgPSBAQ09ORklHVVJFX09QVElPTlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDUk9TU0NPTVBJTElOR19GQUxTRSA9IEBDUk9TU0NPTVBJTElOR19GQUxTRUAKK0NST1NTQ09NUElMSU5HX1RSVUUgPSBAQ1JPU1NDT01QSUxJTkdfVFJVRUAKK0NVUkxERUJVR19GQUxTRSA9IEBDVVJMREVCVUdfRkFMU0VACitDVVJMREVCVUdfVFJVRSA9IEBDVVJMREVCVUdfVFJVRUAKK0NVUkxWRVJTSU9OID0gQENVUkxWRVJTSU9OQAorQ1VSTF9DQV9CVU5ETEUgPSBAQ1VSTF9DQV9CVU5ETEVACitDVVJMX0NGTEFHX0VYVFJBUyA9IEBDVVJMX0NGTEFHX0VYVFJBU0AKK0NVUkxfRElTQUJMRV9ESUNUID0gQENVUkxfRElTQUJMRV9ESUNUQAorQ1VSTF9ESVNBQkxFX0ZJTEUgPSBAQ1VSTF9ESVNBQkxFX0ZJTEVACitDVVJMX0RJU0FCTEVfRlRQID0gQENVUkxfRElTQUJMRV9GVFBACitDVVJMX0RJU0FCTEVfR09QSEVSID0gQENVUkxfRElTQUJMRV9HT1BIRVJACitDVVJMX0RJU0FCTEVfSFRUUCA9IEBDVVJMX0RJU0FCTEVfSFRUUEAKK0NVUkxfRElTQUJMRV9JTUFQID0gQENVUkxfRElTQUJMRV9JTUFQQAorQ1VSTF9ESVNBQkxFX0xEQVAgPSBAQ1VSTF9ESVNBQkxFX0xEQVBACitDVVJMX0RJU0FCTEVfTERBUFMgPSBAQ1VSTF9ESVNBQkxFX0xEQVBTQAorQ1VSTF9ESVNBQkxFX1BPUDMgPSBAQ1VSTF9ESVNBQkxFX1BPUDNACitDVVJMX0RJU0FCTEVfUFJPWFkgPSBAQ1VSTF9ESVNBQkxFX1BST1hZQAorQ1VSTF9ESVNBQkxFX1JUU1AgPSBAQ1VSTF9ESVNBQkxFX1JUU1BACitDVVJMX0RJU0FCTEVfU01UUCA9IEBDVVJMX0RJU0FCTEVfU01UUEAKK0NVUkxfRElTQUJMRV9URUxORVQgPSBAQ1VSTF9ESVNBQkxFX1RFTE5FVEAKK0NVUkxfRElTQUJMRV9URlRQID0gQENVUkxfRElTQUJMRV9URlRQQAorQ1VSTF9MSUJTID0gQENVUkxfTElCU0AKK0NVUkxfTkVUV09SS19MSUJTID0gQENVUkxfTkVUV09SS19MSUJTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NIQVJFRCA9IEBFTkFCTEVfU0hBUkVEQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSEFWRV9HTlVUTFNfU1JQID0gQEhBVkVfR05VVExTX1NSUEAKK0hBVkVfTERBUF9TU0wgPSBASEFWRV9MREFQX1NTTEAKK0hBVkVfTElCWiA9IEBIQVZFX0xJQlpACitIQVZFX0xJQlpfRkFMU0UgPSBASEFWRV9MSUJaX0ZBTFNFQAorSEFWRV9MSUJaX1RSVUUgPSBASEFWRV9MSUJaX1RSVUVACitIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVCA9IEBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVEAKK0hBVkVfU1NMRUFZX1NSUCA9IEBIQVZFX1NTTEVBWV9TUlBACitJRE5fRU5BQkxFRCA9IEBJRE5fRU5BQkxFREAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSVBWNl9FTkFCTEVEID0gQElQVjZfRU5BQkxFREAKK0tSQjRfRU5BQkxFRCA9IEBLUkI0X0VOQUJMRURACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkNVUkxfTElCUyA9IEBMSUJDVVJMX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUlOVEFJTkVSX01PREVfRkFMU0UgPSBATUFJTlRBSU5FUl9NT0RFX0ZBTFNFQAorTUFJTlRBSU5FUl9NT0RFX1RSVUUgPSBATUFJTlRBSU5FUl9NT0RFX1RSVUVACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01BTk9QVCA9IEBNQU5PUFRACitNSU1QVVJFX0ZBTFNFID0gQE1JTVBVUkVfRkFMU0VACitNSU1QVVJFX1RSVUUgPSBATUlNUFVSRV9UUlVFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorTk9fVU5ERUZJTkVEX0ZBTFNFID0gQE5PX1VOREVGSU5FRF9GQUxTRUAKK05PX1VOREVGSU5FRF9UUlVFID0gQE5PX1VOREVGSU5FRF9UUlVFQAorTlJPRkYgPSBATlJPRkZACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIID0gQFBBVEhACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkwgPSBAUEVSTEAKK1BLR0FERF9OQU1FID0gQFBLR0FERF9OQU1FQAorUEtHQUREX1BLRyA9IEBQS0dBRERfUEtHQAorUEtHQUREX1ZFTkRPUiA9IEBQS0dBRERfVkVORE9SQAorUEtHQ09ORklHID0gQFBLR0NPTkZJR0AKK1JBTkRPTV9GSUxFID0gQFJBTkRPTV9GSUxFQAorUkFOTElCID0gQFJBTkxJQkAKK1JFUVVJUkVfTElCX0RFUFMgPSBAUkVRVUlSRV9MSUJfREVQU0AKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU09OQU1FX0JVTVBfRkFMU0UgPSBAU09OQU1FX0JVTVBfRkFMU0VACitTT05BTUVfQlVNUF9UUlVFID0gQFNPTkFNRV9CVU1QX1RSVUVACitTU0xfRU5BQkxFRCA9IEBTU0xfRU5BQkxFREAKK1NUQVRJQ0xJQl9GQUxTRSA9IEBTVEFUSUNMSUJfRkFMU0VACitTVEFUSUNMSUJfVFJVRSA9IEBTVEFUSUNMSUJfVFJVRUAKK1NUUklQID0gQFNUUklQQAorU1VQUE9SVF9GRUFUVVJFUyA9IEBTVVBQT1JUX0ZFQVRVUkVTQAorU1VQUE9SVF9QUk9UT0NPTFMgPSBAU1VQUE9SVF9QUk9UT0NPTFNACitURVNUX1NFUlZFUl9MSUJTID0gQFRFU1RfU0VSVkVSX0xJQlNACitVU0VfQVJFUyA9IEBVU0VfQVJFU0AKK1VTRV9BWFRMUyA9IEBVU0VfQVhUTFNACitVU0VfQ1lBU1NMID0gQFVTRV9DWUFTU0xACitVU0VfRU1CRURERURfQVJFU19GQUxTRSA9IEBVU0VfRU1CRURERURfQVJFU19GQUxTRUAKK1VTRV9FTUJFRERFRF9BUkVTX1RSVUUgPSBAVVNFX0VNQkVEREVEX0FSRVNfVFJVRUAKK1VTRV9HTlVUTFMgPSBAVVNFX0dOVVRMU0AKK1VTRV9HTlVUTFNfTkVUVExFID0gQFVTRV9HTlVUTFNfTkVUVExFQAorVVNFX0xJQlJUTVAgPSBAVVNFX0xJQlJUTVBACitVU0VfTElCU1NIMiA9IEBVU0VfTElCU1NIMkAKK1VTRV9NQU5VQUxfRkFMU0UgPSBAVVNFX01BTlVBTF9GQUxTRUAKK1VTRV9NQU5VQUxfVFJVRSA9IEBVU0VfTUFOVUFMX1RSVUVACitVU0VfTlNTID0gQFVTRV9OU1NACitVU0VfT1BFTkxEQVAgPSBAVVNFX09QRU5MREFQQAorVVNFX1BPTEFSU1NMID0gQFVTRV9QT0xBUlNTTEAKK1VTRV9TU0xFQVkgPSBAVVNFX1NTTEVBWUAKK1VTRV9XSU5ET1dTX1NTUEkgPSBAVVNFX1dJTkRPV1NfU1NQSUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZFUlNJT05FRF9GTEFWT1VSID0gQFZFUlNJT05FRF9GTEFWT1VSQAorVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0UgPSBAVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0VACitWRVJTSU9ORURfU1lNQk9MU19UUlVFID0gQFZFUlNJT05FRF9TWU1CT0xTX1RSVUVACitWRVJTSU9OTlVNID0gQFZFUlNJT05OVU1ACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAorYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsaWJleHQgPSBAbGliZXh0QAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzdWJkaXJzID0gQHN1YmRpcnNACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAorQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm8tZGVwZW5kZW5jaWVzCittYW5fTUFOUyA9IGN1cmwuMSBjdXJsLWNvbmZpZy4xCitHRU5IVE1MUEFHRVMgPSBjdXJsLmh0bWwgY3VybC1jb25maWcuaHRtbAorUERGUEFHRVMgPSBjdXJsLnBkZiBjdXJsLWNvbmZpZy5wZGYKK0hUTUxQQUdFUyA9ICQoR0VOSFRNTFBBR0VTKSBpbmRleC5odG1sCitTVUJESVJTID0gZXhhbXBsZXMgbGliY3VybAorQ0xFQU5GSUxFUyA9ICQoR0VOSFRNTFBBR0VTKSAkKFBERlBBR0VTKQorRVhUUkFfRElTVCA9IE1BTlVBTCBCVUdTIENPTlRSSUJVVEUgRkFRIEZFQVRVUkVTIElOVEVSTkFMUyBTU0xDRVJUUwkgXAorIFJFQURNRS53aW4zMiBSRVNPVVJDRVMgVE9ETyBUaGVBcnRPZkh0dHBTY3JpcHRpbmcgVEhBTktTIFZFUlNJT05TCSBcCisgS05PV05fQlVHUyBCSU5ESU5HUyAkKG1hbl9NQU5TKSAkKEhUTUxQQUdFUykgSElTVE9SWSBJTlNUQUxMCQkgXAorICQoUERGUEFHRVMpIExJQ0VOU0UtTUlYSU5HIFJFQURNRS5uZXR3YXJlIERJU1RSTy1ESUxFTU1BIElOU1RBTEwuZGV2Y3BwIFwKKyBNQUlMLUVUSVFVRVRURQorCitNQU4ySFRNTCA9IHJvZmZpdCA8ICQ8ID4kQAorU1VGRklYRVMgPSAuMSAuaHRtbCAucGRmCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuMSAuaHRtbCAucGRmCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZG9jcy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZG9jcy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbAordW5pbnN0YWxsLWluZm8tYW06CitpbnN0YWxsLW1hbjE6ICQobWFuMV9NQU5TKSAkKG1hbl9NQU5TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobWFuMWRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKG1hbjFkaXIpIgorCUBsaXN0PSckKG1hbjFfTUFOUykgJChkaXN0X21hbjFfTUFOUykgJChub2Rpc3RfbWFuMV9NQU5TKSc7IFwKKwlsMj0nJChtYW5fTUFOUykgJChkaXN0X21hbl9NQU5TKSAkKG5vZGlzdF9tYW5fTUFOUyknOyBcCisJZm9yIGkgaW4gJCRsMjsgZG8gXAorCSAgY2FzZSAiJCRpIiBpbiBcCisJICAgICouMSopIGxpc3Q9IiQkbGlzdCAkJGkiIDs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS8kJGk7IHRoZW4gZmlsZT0kKHNyY2RpcikvJCRpOyBcCisJICBlbHNlIGZpbGU9JCRpOyBmaTsgXAorCSAgZXh0PWBlY2hvICQkaSB8IHNlZCAtZSAncy9eLipcXC4vLydgOyBcCisJICBjYXNlICIkJGV4dCIgaW4gXAorCSAgICAxKikgOzsgXAorCSAgICAqKSBleHQ9JzEnIDs7IFwKKwkgIGVzYWM7IFwKKwkgIGluc3Q9YGVjaG8gJCRpIHwgc2VkIC1lICdzL1xcLlswLTlhLXpdKiQkLy8nYDsgXAorCSAgaW5zdD1gZWNobyAkJGluc3QgfCBzZWQgLWUgJ3MvXi4qXC8vLydgOyBcCisJICBpbnN0PWBlY2hvICQkaW5zdCB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2AuJCRleHQ7IFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZmlsZScgJyQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCciOyBcCisJICAkKElOU1RBTExfREFUQSkgIiQkZmlsZSIgIiQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCI7IFwKKwlkb25lCit1bmluc3RhbGwtbWFuMToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKG1hbjFfTUFOUykgJChkaXN0X21hbjFfTUFOUykgJChub2Rpc3RfbWFuMV9NQU5TKSc7IFwKKwlsMj0nJChtYW5fTUFOUykgJChkaXN0X21hbl9NQU5TKSAkKG5vZGlzdF9tYW5fTUFOUyknOyBcCisJZm9yIGkgaW4gJCRsMjsgZG8gXAorCSAgY2FzZSAiJCRpIiBpbiBcCisJICAgICouMSopIGxpc3Q9IiQkbGlzdCAkJGkiIDs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICBleHQ9YGVjaG8gJCRpIHwgc2VkIC1lICdzL14uKlxcLi8vJ2A7IFwKKwkgIGNhc2UgIiQkZXh0IiBpbiBcCisJICAgIDEqKSA7OyBcCisJICAgICopIGV4dD0nMScgOzsgXAorCSAgZXNhYzsgXAorCSAgaW5zdD1gZWNobyAkJGkgfCBzZWQgLWUgJ3MvXFwuWzAtOWEtel0qJCQvLydgOyBcCisJICBpbnN0PWBlY2hvICQkaW5zdCB8IHNlZCAtZSAncy9eLipcLy8vJ2A7IFwKKwkgIGluc3Q9YGVjaG8gJCRpbnN0IHwgc2VkICckKHRyYW5zZm9ybSknYC4kJGV4dDsgXAorCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3QnIjsgXAorCSAgcm0gLWYgIiQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCI7IFwKKwlkb25lCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCittb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi1yZWN1cnNpdmUgXAorbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmU6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKKwkgIGVzYWM7IFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKKwkgICAgZGlyPSIvJCRkaXIiOyBcCisJICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKKwkgIGVsc2UgXAorCSAgICBkaXI9Jyc7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChta2Rpcl9wKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgICAgZGlzdGRpcj1gJChhbV9fY2QpICQoZGlzdGRpcikgJiYgcHdkYDsgXAorCSAgICB0b3BfZGlzdGRpcj1gJChhbV9fY2QpICQodG9wX2Rpc3RkaXIpICYmIHB3ZGA7IFwKKwkgICAgKGNkICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCR0b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRkaXN0ZGlyLyQkc3ViZGlyIiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUgJChNQU5TKQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CisJZm9yIGRpciBpbiAiJChERVNURElSKSQobWFuMWRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChta2Rpcl9wKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1yZWN1cnNpdmUKKworZHZpLWFtOgorCitpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtbWFuCisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtbWFuOiBpbnN0YWxsLW1hbjEKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1tYW4KKwordW5pbnN0YWxsLWluZm86IHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCit1bmluc3RhbGwtbWFuOiB1bmluc3RhbGwtbWFuMQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gXAorCWNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1yZWN1cnNpdmUgY3RhZ3MgXAorCWN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtbWFuMSBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1yZWN1cnNpdmUgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtIFwKKwl1bmluc3RhbGwtbWFuIHVuaW5zdGFsbC1tYW4xCisKKworaHRtbDogJChIVE1MUEFHRVMpCisJY2QgbGliY3VybDsgbWFrZSBodG1sCisKK3BkZjogJChQREZQQUdFUykKKwljZCBsaWJjdXJsOyBtYWtlIHBkZgorCisuMS5odG1sOgorCSQoTUFOMkhUTUwpCisKKy4xLnBkZjoKKwlAKGZvbz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLlswLTldJCQvL2cnYDsgXAorCWdyb2ZmIC1UcHMgLW1hbiAkPCA+JCRmb28ucHM7IFwKKwlwczJwZGYgJCRmb28ucHMgJEA7IFwKKwlybSAkJGZvby5wczsgXAorCWVjaG8gImNvbnZlcnRlZCAkPCB0byAkQCIpCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL1JFQURNRS5uZXR3YXJlIGIvY3VybC03LjI1LjAvZG9jcy9SRUFETUUubmV0d2FyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWRhMmU4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9SRUFETUUubmV0d2FyZQpAQCAtMCwwICsxLDI3IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorCitSRUFETUUubmV0d2FyZQorCisgIFJlYWQgdGhlIFJFQURNRSBmaWxlIGZpcnN0LgorCisgIEN1cmwgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbXBpbGVkIHdpdGggZ2NjIC8gbmxtY29udiBvbiBkaWZmZXJlbnQgZmxhdm91cnMKKyAgb2YgTGludXggYXMgd2VsbCBhcyB3aXRoIHRoZSBvZmZpY2lhbCBNZXRyb3dlcmtzIENvZGVXYXJyaW9yIGNvbXBpbGVyLgorICBXaGlsZSBub3QgYmVpbmcgdGhlIG1haW4gZGV2ZWxvcG1lbnQgdGFyZ2V0LCBhIGNvbnRpbm91c2x5IGdyb3dpbmcgc2hhcmUgb2YKKyAgY3VybCB1c2VycyBhcmUgTmV0V2FyZS1iYXNlZCwgc3BlY2lhbGx5IGFsc28gY29uc3VtaW5nIHRoZSBsaWIgZnJvbSBQSFAuCisKKyAgVGhlIHVuaXgtc3R5bGUgbWFuIHBhZ2VzIGFyZSB0cmlja3kgdG8gcmVhZCBvbiB3aW5kb3dzLCBzbyB0aGVyZWZvcmUgYXJlIGFsbAorICB0aG9zZSBwYWdlcyBjb252ZXJ0ZWQgdG8gSFRNTCBhcyB3ZWxsIGFzIHBkZiwgYW5kIGluY2x1ZGVkIGluIHRoZSByZWxlYXNlCisgIGFyY2hpdmVzLgorCisgIFRoZSBtYWluIGN1cmwuMSBtYW4gcGFnZSBpcyBhbHNvICJidWlsdC1pbiIgaW4gdGhlIGNvbW1hbmQgbGluZSB0b29sLiBVc2UgYQorICBjb21tYW5kIGxpbmUgc2ltaWxhciB0byB0aGlzIGluIG9yZGVyIHRvIGV4dHJhY3QgYSBzZXBhcmF0ZSB0ZXh0IGZpbGU6CisKKyAgICAgICAgY3VybCAtTSA+bWFudWFsLnR4dAorCisgIFJlYWQgdGhlIElOU1RBTEwgZmlsZSBmb3IgaW5zdHJ1Y3Rpb25zIGhvdyB0byBjb21waWxlIGN1cmwgc2VsZi4KKworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL1JFQURNRS53aW4zMiBiL2N1cmwtNy4yNS4wL2RvY3MvUkVBRE1FLndpbjMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDQ1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL1JFQURNRS53aW4zMgpAQCAtMCwwICsxLDI2IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorCitSRUFETUUud2luMzIKKworICBSZWFkIHRoZSBSRUFETUUgZmlsZSBmaXJzdC4KKworICBDdXJsIGhhcyBiZWVuIGNvbXBpbGVkLCBidWlsdCBhbmQgcnVuIG9uIGFsbCBzb3J0cyBvZiBXaW5kb3dzIGFuZCB3aW4zMgorICBzeXN0ZW1zLiBXaGlsZSBub3QgYmVpbmcgdGhlIG1haW4gZGV2ZWxvcCB0YXJnZXQsIGEgZmFpciBzaGFyZSBvZiBjdXJsIHVzZXJzCisgIGFyZSB3aW4zMi1iYXNlZC4KKworICBUaGUgdW5peC1zdHlsZSBtYW4gcGFnZXMgYXJlIHRyaWNreSB0byByZWFkIG9uIHdpbmRvd3MsIHNvIHRoZXJlZm9yZSBhcmUgYWxsCisgIHRob3NlIHBhZ2VzIGNvbnZlcnRlZCB0byBIVE1MIGFzIHdlbGwgYXMgcGRmLCBhbmQgaW5jbHVkZWQgaW4gdGhlIHJlbGVhc2UKKyAgYXJjaGl2ZXMuCisKKyAgVGhlIG1haW4gY3VybC4xIG1hbiBwYWdlIGlzIGFsc28gImJ1aWx0LWluIiBpbiB0aGUgY29tbWFuZCBsaW5lIHRvb2wuIFVzZSBhCisgIGNvbW1hbmQgbGluZSBzaW1pbGFyIHRvIHRoaXMgaW4gb3JkZXIgdG8gZXh0cmFjdCBhIHNlcGFyYXRlIHRleHQgZmlsZToKKworICAgICAgICBjdXJsIC1NID5tYW51YWwudHh0CisKKyAgUmVhZCB0aGUgSU5TVEFMTCBmaWxlIGZvciBpbnN0cnVjdGlvbnMgaG93IHRvIGNvbXBpbGUgY3VybCBzZWxmLgorCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvUkVTT1VSQ0VTIGIvY3VybC03LjI1LjAvZG9jcy9SRVNPVVJDRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYwZTc1OQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvUkVTT1VSQ0VTCkBAIC0wLDAgKzEsODMgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisKKworVGhpcyBkb2N1bWVudCBsaXN0cyBkb2N1bWVudHMgYW5kIHN0YW5kYXJkcyB1c2VkIGJ5IGN1cmwuCisKKyAgUkZDIDk1OSAgLSBUaGUgRlRQIHByb3RvY29sCisKKyAgUkZDIDE2MzUgLSBIb3cgdG8gVXNlIEFub255bW91cyBGVFAKKworICBSRkMgMTczOCAtIFVuaWZvcm0gUmVzb3VyY2UgTG9jYXRvcnMKKworICBSRkMgMTc3NyAtIGRlZmluZXMgdGhlIExEQVAgcHJvdG9jb2wKKworICBSRkMgMTgwOCAtIFJlbGF0aXZlIFVuaWZvcm0gUmVzb3VyY2UgTG9jYXRvcnMKKworICBSRkMgMTg2NyAtIEZvcm0tYmFzZWQgRmlsZSBVcGxvYWQgaW4gSFRNTAorCisgIFJGQyAxOTUwIC0gWkxJQiBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24KKworICBSRkMgMTk1MSAtIERFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uCisKKyAgUkZDIDE5NTIgLSBnemlwIGNvbXByZXNzaW9uIGZvcm1hdAorCisgIFJGQyAxOTU5IC0gTERBUCBVUkwgc3ludGF4CisKKyAgUkZDIDIwNDUtMjA0OSAtIEV2ZXJ5dGhpbmcgeW91IG5lZWQgdG8ga25vdyBhYm91dCBNSU1FISAobmVlZGVkIGZvciBmb3JtCisgICAgICAgICAgICAgICAgICBiYXNlZCB1cGxvYWQpCisKKyAgUkZDIDIwNjggLSBIVFRQIDEuMSAob2Jzb2xldGVkIGJ5IFJGQyAyNjE2KQorCisgIFJGQyAyMTA0IC0gS2V5ZWQtSGFzaGluZyBmb3IgTWVzc2FnZSBBdXRoZW50aWNhdGlvbgorCisgIFJGQyAyMTA5IC0gSFRUUCBTdGF0ZSBNYW5hZ2VtZW50IE1lY2hhbmlzbSAoY29va2llIHN0dWZmKQorICAgICAgICAgICAtIEFsc28sIHJlYWQgTmV0c2NhcGUncyBzcGVjaWZpY2F0aW9uIGF0CisgICAgICAgICAgICAgaHR0cDovL2N1cmwuaGF4eC5zZS9yZmMvY29va2llX3NwZWMuaHRtbAorCisgIFJGQyAyMTgzIC0gVGhlIENvbnRlbnQtRGlzcG9zaXRpb24gSGVhZGVyIEZpZWxkCisKKyAgUkZDIDIxOTUgLSBDUkFNLU1ENSBhdXRoZW50aWNhdGlvbgorCisgIFJGQyAyMjI5IC0gQSBEaWN0aW9uYXJ5IFNlcnZlciBQcm90b2NvbAorCisgIFJGQyAyMjU1IC0gTmV3ZXIgTERBUCBVUkwgc3ludGF4IGRvY3VtZW50LgorCisgIFJGQyAyMjMxIC0gTUlNRSBQYXJhbWV0ZXIgVmFsdWUgYW5kIEVuY29kZWQgV29yZCBFeHRlbnNpb25zOgorICAgICAgICAgICAgIENoYXJhY3RlciBTZXRzLCBMYW5ndWFnZXMsIGFuZCBDb250aW51YXRpb25zCisKKyAgUkZDIDIzODggLSAiUmV0dXJuaW5nIFZhbHVlcyBmcm9tIEZvcm1zOiBtdWx0aXBhcnQvZm9ybS1kYXRhIgorICAgICAgICAgICAgIFVzZSB0aGlzIGFzIGFuIGFkZGl0aW9uIHRvIHRoZSBSRkMxODY3CisKKyAgUkZDIDIzOTYgLSAiVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyczogR2VuZXJpYyBTeW50YXggYW5kIFNlbWFudGljcyIgVGhpcworICAgICAgICAgICAgIG9uZSBvYnNvbGV0ZXMgUkZDIDE3MzgsIGJ1dCBzaW5jZSBSRkMgMTczOCBpcyBvZnRlbiBtZW50aW9uZWQKKyAgICAgICAgICAgICBJJ3ZlIGxlZnQgaXQgaW4gdGhpcyBsaXN0LgorCisgIFJGQyAyNDI4IC0gRlRQIEV4dGVuc2lvbnMgZm9yIElQdjYgYW5kIE5BVHMKKworICBSRkMgMjU3NyAtIEZUUCBTZWN1cml0eSBDb25zaWRlcmF0aW9ucworCisgIFJGQyAyNjE2IC0gSFRUUCAxLjEsIHRoZSBsYXRlc3QKKworICBSRkMgMjYxNyAtIEhUVFAgQXV0aGVudGljYXRpb24KKworICBSRkMgMjcxOCAtIEd1aWRlbGluZXMgZm9yIG5ldyBVUkwgU2NoZW1lcworCisgIFJGQyAyNzMyIC0gRm9ybWF0IGZvciBMaXRlcmFsIElQdjYgQWRkcmVzc2VzIGluIFVSTCdzCisKKyAgUkZDIDI4MTggLSBIVFRQIE92ZXIgVExTIChUTFMgaXMgdGhlIHN1Y2Nlc3NvciB0byBTU0wpCisKKyAgUkZDIDI4MjEgLSBTTVRQIHByb3RvY29sCisKKyAgUkZDIDI5NjQgLSBVc2Ugb2YgSFRUUCBTdGF0ZSBNYW5hZ2VtZW50CisKKyAgUkZDIDI5NjUgLSBIVFRQIFN0YXRlIE1hbmFnZW1lbnQgTWVjaGFuaXNtLiBDb29raWVzLiBPYnNvbGV0ZXMgUkZDMjEwOQorCisgIFJGQyAzMjA3IC0gU01UUCBvdmVyIFRMUworCisgIFJGQyA0NjE2IC0gUExBSU4gYXV0aGVudGljYXRpb24KKworICBSRkMgNDk1NCAtIFNNVFAgQXV0aGVudGljYXRpb24KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvU1NMQ0VSVFMgYi9jdXJsLTcuMjUuMC9kb2NzL1NTTENFUlRTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMTQxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL1NTTENFUlRTCkBAIC0wLDAgKzEsMTE2IEBACisgICAgICAgICAgICAgICAgICAgICAgUGVlciBTU0wgQ2VydGlmaWNhdGUgVmVyaWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2xpYmN1cmwgcGVyZm9ybXMgcGVlciBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGJ5IGRlZmF1bHQuICBUaGlzIGlzIGRvbmUKK2J5IHVzaW5nIENBIGNlcnQgYnVuZGxlIHRoYXQgdGhlIFNTTCBsaWJyYXJ5IGNhbiB1c2UgdG8gbWFrZSBzdXJlIHRoZSBwZWVyJ3MKK3NlcnZlciBjZXJ0aWZpY2F0ZSBpcyB2YWxpZC4KKworSWYgeW91IGNvbW11bmljYXRlIHdpdGggSFRUUFMgb3IgRlRQUyBzZXJ2ZXJzIHVzaW5nIGNlcnRpZmljYXRlcyB0aGF0IGFyZQorc2lnbmVkIGJ5IENBcyBwcmVzZW50IGluIHRoZSBidW5kbGUsIHlvdSBjYW4gYmUgc3VyZSB0aGF0IHRoZSByZW1vdGUgc2VydmVyCityZWFsbHkgaXMgdGhlIG9uZSBpdCBjbGFpbXMgdG8gYmUuCisKK1VudGlsIDcuMTguMCwgY3VybCBidW5kbGVkIGEgc2V2ZXJlbHkgb3V0ZGF0ZWQgY2EgYnVuZGxlIGZpbGUgdGhhdCB3YXMKK2luc3RhbGxlZCBieSBkZWZhdWx0LiBUaGVzZSBkYXlzLCB0aGUgY3VybCBhcmNoaXZlcyBpbmNsdWRlIG5vIGNhIGNlcnRzIGF0CithbGwuIFlvdSBuZWVkIHRvIGdldCB0aGVtIGVsc2V3aGVyZS4gU2VlIGJlbG93IGZvciBleGFtcGxlLgorCitJZiB0aGUgcmVtb3RlIHNlcnZlciB1c2VzIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUsIGlmIHlvdSBkb24ndCBpbnN0YWxsIGEgQ0EKK2NlcnQgYnVuZGxlLCBpZiB0aGUgc2VydmVyIHVzZXMgYSBjZXJ0aWZpY2F0ZSBzaWduZWQgYnkgYSBDQSB0aGF0IGlzbid0CitpbmNsdWRlZCBpbiB0aGUgYnVuZGxlIHlvdSB1c2Ugb3IgaWYgdGhlIHJlbW90ZSBob3N0IGlzIGFuIGltcG9zdG9yCitpbXBlcnNvbmF0aW5nIHlvdXIgZmF2b3JpdGUgc2l0ZSwgYW5kIHlvdSB3YW50IHRvIHRyYW5zZmVyIGZpbGVzIGZyb20gdGhpcworc2VydmVyLCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworIDEuIFRlbGwgbGliY3VybCB0byAqbm90KiB2ZXJpZnkgdGhlIHBlZXIuIFdpdGggbGliY3VybCB5b3UgZGlzYWJsZSB0aGlzIHdpdGgKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIEZBTFNFKTsKKworICAgIFdpdGggdGhlIGN1cmwgY29tbWFuZCBsaW5lIHRvb2wsIHlvdSBkaXNhYmxlIHRoaXMgd2l0aCAtay8tLWluc2VjdXJlLgorCisgMi4gR2V0IGEgQ0EgY2VydGlmaWNhdGUgdGhhdCBjYW4gdmVyaWZ5IHRoZSByZW1vdGUgc2VydmVyIGFuZCB1c2UgdGhlIHByb3BlcgorICAgIG9wdGlvbiB0byBwb2ludCBvdXQgdGhpcyBDQSBjZXJ0IGZvciB2ZXJpZmljYXRpb24gd2hlbiBjb25uZWN0aW5nLiBGb3IKKyAgICBsaWJjdXJsIGhhY2tlcnM6IGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DQVBBVEgsIGNhcGF0aCk7CisKKyAgICBXaXRoIHRoZSBjdXJsIGNvbW1hbmQgbGluZSB0b29sOiAtLWNhY2VydCBbZmlsZV0KKworIDMuIEFkZCB0aGUgQ0EgY2VydCBmb3IgeW91ciBzZXJ2ZXIgdG8gdGhlIGV4aXN0aW5nIGRlZmF1bHQgQ0EgY2VydCBidW5kbGUuCisgICAgVGhlIGRlZmF1bHQgcGF0aCBvZiB0aGUgQ0EgYnVuZGxlIHVzZWQgY2FuIGJlIGNoYW5nZWQgYnkgcnVubmluZyBjb25maWd1cmUKKyAgICB3aXRoIHRoZSAtLXdpdGgtY2EtYnVuZGxlIG9wdGlvbiBwb2ludGluZyBvdXQgdGhlIHBhdGggb2YgeW91ciBjaG9pY2UuCisKKyAgICBUbyBkbyB0aGlzLCB5b3UgbmVlZCB0byBnZXQgdGhlIENBIGNlcnQgZm9yIHlvdXIgc2VydmVyIGluIFBFTSBmb3JtYXQgYW5kCisgICAgdGhlbiBhcHBlbmQgdGhhdCB0byB5b3VyIENBIGNlcnQgYnVuZGxlLgorCisgICAgSWYgeW91IHVzZSBJbnRlcm5ldCBFeHBsb3JlciwgdGhpcyBpcyBvbmUgd2F5IHRvIGdldCBleHRyYWN0IHRoZSBDQSBjZXJ0CisgICAgZm9yIGEgcGFydGljdWxhciBzZXJ2ZXI6CisKKyAgICAgbyBWaWV3IHRoZSBjZXJ0aWZpY2F0ZSBieSBkb3VibGUtY2xpY2tpbmcgdGhlIHBhZGxvY2sKKyAgICAgbyBGaW5kIG91dCB3aGVyZSB0aGUgQ0EgY2VydGlmaWNhdGUgaXMga2VwdCAoQ2VydGlmaWNhdGU+CisgICAgICAgQXV0aG9yaXR5IEluZm9ybWF0aW9uIEFjY2Vzcz5VUkwpCisgICAgIG8gR2V0IGEgY29weSBvZiB0aGUgY3J0IGZpbGUgdXNpbmcgY3VybAorICAgICBvIENvbnZlcnQgaXQgZnJvbSBjcnQgdG8gUEVNIHVzaW5nIHRoZSBvcGVuc3NsIHRvb2w6CisgICAgICAgb3BlbnNzbCB4NTA5IC1pbmZvcm0gREVTIC1pbiB5b3VyZG93bmxvYWRlZC5jcnQgXAorICAgICAgIC1vdXQgb3V0Y2VydC5wZW0gLXRleHQKKyAgICAgbyBBcHBlbmQgdGhlICdvdXRjZXJ0LnBlbScgdG8gdGhlIENBIGNlcnQgYnVuZGxlIG9yIHVzZSBpdCBzdGFuZC1hbG9uZQorICAgICAgIGFzIGRlc2NyaWJlZCBiZWxvdy4KKworICAgIElmIHlvdSB1c2UgdGhlICdvcGVuc3NsJyB0b29sLCB0aGlzIGlzIG9uZSB3YXkgdG8gZ2V0IGV4dHJhY3QgdGhlIENBIGNlcnQKKyAgICBmb3IgYSBwYXJ0aWN1bGFyIHNlcnZlcjoKKworICAgICBvIG9wZW5zc2wgc19jbGllbnQgLWNvbm5lY3QgeHh4eHguY29tOjQ0MyB8dGVlIGxvZ2ZpbGUKKyAgICAgbyB0eXBlICJRVUlUIiwgZm9sbG93ZWQgYnkgdGhlICJFTlRFUiIga2V5CisgICAgIG8gVGhlIGNlcnRpZmljYXRlIHdpbGwgaGF2ZSAiQkVHSU4gQ0VSVElGSUNBVEUiIGFuZCAiRU5EIENFUlRJRklDQVRFIgorICAgICAgIG1hcmtlcnMuCisgICAgIG8gSWYgeW91IHdhbnQgdG8gc2VlIHRoZSBkYXRhIGluIHRoZSBjZXJ0aWZpY2F0ZSwgeW91IGNhbiBkbzogIm9wZW5zc2wKKyAgICAgICB4NTA5IC1pbmZvcm0gUEVNIC1pbiBjZXJ0ZmlsZSAtdGV4dCAtb3V0IGNlcnRkYXRhIiB3aGVyZSBjZXJ0ZmlsZSBpcworICAgICAgIHRoZSBjZXJ0IHlvdSBleHRyYWN0ZWQgZnJvbSBsb2dmaWxlLiBMb29rIGluIGNlcnRkYXRhLgorICAgICBvIElmIHlvdSB3YW50IHRvIHRydXN0IHRoZSBjZXJ0aWZpY2F0ZSwgeW91IGNhbiBhcHBlbmQgaXQgdG8geW91cgorICAgICAgIGNlcnRfYnVuZGxlIG9yIHVzZSBpdCBzdGFuZC1hbG9uZSBhcyBkZXNjcmliZWQuIEp1c3QgcmVtZW1iZXIgdGhhdCB0aGUKKyAgICAgICBzZWN1cml0eSBpcyBubyBiZXR0ZXIgdGhhbiB0aGUgd2F5IHlvdSBvYnRhaW5lZCB0aGUgY2VydGlmaWNhdGUuCisKKyA0LiBJZiB5b3UncmUgdXNpbmcgdGhlIGN1cmwgY29tbWFuZCBsaW5lIHRvb2wsIHlvdSBjYW4gc3BlY2lmeSB5b3VyIG93biBDQQorICAgIGNlcnQgcGF0aCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDVVJMX0NBX0JVTkRMRSB0byB0aGUgcGF0aAorICAgIG9mIHlvdXIgY2hvaWNlLgorCisgICAgSWYgeW91J3JlIHVzaW5nIHRoZSBjdXJsIGNvbW1hbmQgbGluZSB0b29sIG9uIFdpbmRvd3MsIGN1cmwgd2lsbCBzZWFyY2gKKyAgICBmb3IgYSBDQSBjZXJ0IGZpbGUgbmFtZWQgImN1cmwtY2EtYnVuZGxlLmNydCIgaW4gdGhlc2UgZGlyZWN0b3JpZXMgYW5kIGluCisgICAgdGhpcyBvcmRlcjoKKyAgICAgIDEuIGFwcGxpY2F0aW9uJ3MgZGlyZWN0b3J5CisgICAgICAyLiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAzLiBXaW5kb3dzIFN5c3RlbSBkaXJlY3RvcnkgKGUuZy4gQzpcd2luZG93c1xzeXN0ZW0zMikKKyAgICAgIDQuIFdpbmRvd3MgRGlyZWN0b3J5IChlLmcuIEM6XHdpbmRvd3MpCisgICAgICA1LiBhbGwgZGlyZWN0b3JpZXMgYWxvbmcgJVBBVEglCisKKyA1LiBHZXQgYSBiZXR0ZXIvZGlmZmVyZW50L25ld2VyIENBIGNlcnQgYnVuZGxlISBPbmUgb3B0aW9uIGlzIHRvIGV4dHJhY3QgdGhlCisgICAgb25lIGEgcmVjZW50IEZpcmVmb3ggYnJvd3NlciB1c2VzIGJ5IHJ1bm5pbmcgJ21ha2UgY2EtYnVuZGxlJyBpbiB0aGUgY3VybAorICAgIGJ1aWxkIHRyZWUgcm9vdCwgb3IgcG9zc2libHkgZG93bmxvYWQgYSB2ZXJzaW9uIHRoYXQgd2FzIGdlbmVyYXRlZCB0aGlzCisgICAgd2F5IGZvciB5b3U6CisKKyAgICAgICAgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NhZXh0cmFjdC5odG1sCisKK05lZ2xlY3RpbmcgdG8gdXNlIG9uZSBvZiB0aGUgYWJvdmUgbWV0aG9kcyB3aGVuIGRlYWxpbmcgd2l0aCBhIHNlcnZlciB1c2luZyBhCitjZXJ0aWZpY2F0ZSB0aGF0IGlzbid0IHNpZ25lZCBieSBvbmUgb2YgdGhlIGNlcnRpZmljYXRlcyBpbiB0aGUgaW5zdGFsbGVkIENBCitjZXJ0IGJ1bmRsZSwgd2lsbCBjYXVzZSBTU0wgdG8gcmVwb3J0IGFuIGVycm9yICgiY2VydGlmaWNhdGUgdmVyaWZ5IGZhaWxlZCIpCitkdXJpbmcgdGhlIGhhbmRzaGFrZSBhbmQgU1NMIHdpbGwgdGhlbiByZWZ1c2UgZnVydGhlciBjb21tdW5pY2F0aW9uIHdpdGggdGhhdAorc2VydmVyLgorCisgICAgICAgICAgICAgICAgICAgICAgUGVlciBTU0wgQ2VydGlmaWNhdGUgVmVyaWZpY2F0aW9uIHdpdGggTlNTCisgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIGxpYmN1cmwgaXMgYnVpbGQgd2l0aCBOU1Mgc3VwcG9ydCB0aGVuIGRlcGVuZGluZyBvbiB0aGUgT1MgZGlzdHJpYnV0aW9uIGl0CitpcyBwcm9iYWJseSByZXF1aXJlZCB0byB0YWtlIHNvbWUgYWRkaXRpb25hbCBzdGVwcyB0byB1c2UgdGhlIHN5c3RlbS13aWRlIENBCitjZXJ0IGRiLiBSZWRIYXQgc2hpcHMgd2l0aCBhbiBhZGRpdGlvbmFsIG1vZHVsZSBsaWJuc3NwZW0uc28gd2hpY2ggZW5hYmxlcyBOU1MKK3RvIHJlYWQgdGhlIE9wZW5TU0wgUEVNIENBIGJ1bmRsZS4gV2l0aCBPcGVuU3VTRSB0aGlzIGxpYiBpcyBtaXNzaW5nLCBhbmQgTlNTCitjYW4gb25seSB3b3JrIHdpdGggaXRzIG93biBpbnRlcm5hbCBmb3JtYXRzLiBBbHNvIE5TUyBnb3QgYSBuZXcgZGF0YWJhc2UKK2Zvcm1hdDoKK2h0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9OU1NfU2hhcmVkX0RCCitTdGFydGluZyB3aXRoIHZlcnNpb24gNy4xOS43IGxpYmN1cmwgd2lsbCBjaGVjayBmb3IgdGhlIE5TUyB2ZXJzaW9uIGl0IHJ1bnMsCithbmQgYWRkIGF1dG9tYXRpY2FsbHkgdGhlICdzcWw6JyBwcmVmaXggdG8gdGhlIGNlcnRkYiBkaXJlY3RvcnkgKGVpdGhlciB0aGUKK2hhcmRjb2RlZCBkZWZhdWx0IC9ldGMvcGtpL25zc2RiIG9yIHRoZSBkaXJlY3RvcnkgY29uZmlndXJlZCB3aXRoIFNTTF9ESVIKK2Vudmlyb25tZW50IHZhcmlhYmxlKSBpZiBhIHZlcnNpb24gMy4xMi4wIG9yIGxhdGVyIGlzIGRldGVjdGVkLgorVG8gY2hlY2sgd2hpY2ggY2VydGRiIGZvcm1hdCB5b3VyIGRpc3RyaWJ1dGlvbiBwcm92aWRlcyBleGFtaW5lIHRoZSBkZWZhdWx0CitjZXJ0ZGIgbG9jYXRpb24gL2V0Yy9wa2kvbnNzZGI7IHRoZSBuZXcgY2VydGRiIGZvcm1hdCBjYW4gYmUgaWRlbnRpZmllZCBieQordGhlIGZpbGVuYW1lcyBjZXJ0OS5kYiwga2V5NC5kYiwgcGtjczExLnR4dDsgZmlsZW5hbWVzIG9mIG9sZGVyIHZlcnNpb25zIGFyZQorY2VydDguZGIsIGtleTMuZGIsIG1vZHNlYy5kYi4KK1VzdWFsbHkgdGhlc2UgY2VydCBkYXRhYmFzZXMgYXJlIGVtcHR5OyBidXQgTlNTIGFsc28gaGFzIGJ1aWx0LWluIENBcyB3aGljaCBhcmUKK3Byb3ZpZGVkIHRocm91Z2ggYSBzaGFyZWQgbGlicmFyeSBsaWJuc3Nja2JpLnNvOyBpZiB5b3Ugd2FudCB0byB1c2UgdGhlc2UKK2J1aWx0LWluIENBcyB0aGVuIGNyZWF0ZSBhIHN5bWxpbmsgdG8gbGlibnNzY2tiaS5zbyBpbiAvZXRjL3BraS9uc3NkYjoKK2xuIC1zIC91c3IvbGliWzY0XS9saWJuc3Nja2JpLnNvIC9ldGMvcGtpL25zc2RiL2xpYm5zc2NrYmkuc28KKworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL1RIQU5LUyBiL2N1cmwtNy4yNS4wL2RvY3MvVEhBTktTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMmZkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL1RIQU5LUwpAQCAtMCwwICsxLDkzNSBAQAorIFRoaXMgcHJvamVjdCBoYXMgYmVlbiBhbGl2ZSBmb3IgbWFueSB5ZWFycy4gQ291bnRsZXNzIHBlb3BsZSBoYXZlIHByb3ZpZGVkCisgZmVlZGJhY2sgdGhhdCBoYXZlIGltcHJvdmVkIGN1cmwuIEhlcmUgZm9sbG93cyBhIGxpc3Qgb2YgcGVvcGxlIHRoYXQgaGF2ZQorIGNvbnRyaWJ1dGVkIChhLXogb3JkZXIpLgorCisgSWYgeW91IGhhdmUgY29udHJpYnV0ZWQgYnV0IGFyZSBtaXNzaW5nIGhlcmUsIHBsZWFzZSBsZXQgdXMga25vdyEKKworQWFyb24gT25lYWwKK0Fhcm9uIE9yZW5zdGVpbgorQWRhbSBELiBNb3NzCitBZGFtIExpZ2h0CitBZGFtIFBpZ2dvdHQKK0FkYW0gVGthYworQWRyaWFuIFNjaHV1cgorQWRyaWFubyBNZWlyZWxsZXMKK0Frb3MgUGFzenRvcnkKK0FsYW4gUGluc3RlaW4KK0FsYmVydCBDaGluCitBbGJlcnQgQ2hpbi1BLVlvdW5nCitBbGJlcnQgQ2hveQorQWxlIFZlc2VseQorQWxlamFuZHJvIEFsdmFyZXoKK0FsZWtzYW5kYXIgTWlsaXZvamV2aWMKK0FsZXNzYW5kcm8gR2hlZGluaQorQWxlc3NhbmRybyBWZXNlbHkKK0FsZXggQmxpZ2gKK0FsZXggRmlzaG1hbgorQWxleCBOZWJsZXR0CitBbGV4IFN1eWtvdgorQWxleCBWaW5uaWsKK0FsZXggYWthIFdpbmRFYWdsZQorQWxleGFuZGVyIEJlZWRpZQorQWxleGFuZGVyIEtvdXJha29zCitBbGV4YW5kZXIgS3Jhc25vc3RhdnNreQorQWxleGFuZGVyIExhemljCitBbGV4YW5kZXIgWmh1cmF2bGV2CitBbGV4ZXkgQm9yem92CitBbGV4ZXkgUGVzdGVybmlrb3YKK0FsZXhleSBTaW1haworQWxleGV5IFpha2hsZXN0aW4KK0FsZXhpcyBDYXJ2YWxobworQWxmcmVkIEdlYmVydAorQWxsZW4gUHVsc2lmZXIKK0Ftb2wgUGF0dGVrYXIKK0FtciBTaGFoaW4KK0FuYXRvbGkgVHVibWFuCitBbmRlcnMgR3VzdGFmc3NvbgorQW5kaSBKYWhqYQorQW5kcmUgR3VpYmVydCBkZSBCcnVldAorQW5kcmVhcyBEYW1tCitBbmRyZWFzIEZhZXJiZXIKK0FuZHJlYXMgRmFyYmVyCitBbmRyZWFzIE50YWZsb3MKK0FuZHJlYXMgT2xzc29uCitBbmRyZWFzIFJpZWtlCitBbmRyZWFzIFNjaHVsZGVpCitBbmRyZWFzIFd1cmYKK0FuZHJlaSBCZW5lYQorQW5kcmVzIEdhcmNpYQorQW5kcmV3IEJlbmhhbQorQW5kcmV3IEJpZ2dzCitBbmRyZXcgQnVzaG5lbGwKK0FuZHJldyBGcmFuY2lzCitBbmRyZXcgRnVsbGVyCitBbmRyZXcgTW9pc2UKK0FuZHJldyBXYW5zaW5rCitBbmRyZXcgZGUgbG9zIFJleWVzCitBbmRy6XMgR2FyY+1hCitBbmR5IENlZGlsbmlrCitBbmR5IFNlcnBhCitBbmR5IFRzb3VsYWR6ZQorQW5ndXMgTWFja2F5CitBbnRob255IEJyeWFuCitBbnRvaW5lIENhbGFuZG8KK0FudG9uIEJ5Y2hrb3YKK0FudG9uIEthbG15a292CitBcmthZGl1c3ogTWlza2lld2ljegorQXJtZWwgQXNzZWxpbgorQXJuYXVkIEViYWxhcmQKK0FydGh1ciBNdXJyYXkKK0FydmUgS251ZHNlbgorQXRlcyBHb3JhbAorQXVndXN0dXMgU2F1bmRlcnMKK0F2ZXJ5IEZheQorQXhlbCBUaWxsZXF1aW4KK0JhbGludCBTemlsYWtzemkKK0JhcnQgV2hpdGVsZXkKK0JhcyBNZXZpc3NlbgorQmVuIERhcm5lbGwKK0JlbiBHcmVlYXIKK0JlbiBNYWRzZW4KK0JlbiBOb29yZGh1aXMKK0JlbiBWYW4gSG9mCitCZW4gV2luc2xvdworQmVuYnVjayBOYXNvbgorQmVuamFtaW4gR2VyYXJkCitCZXJuYXJkIExlYWsKK0Jlcm5oYXJkIFJldXRuZXItRmlzY2hlcgorQmVydHJhbmQgRGVtaWRkZWxhZXIKK0JpbGwgRWdlcnQKK0JpbGwgSG9mZm1hbgorQmpvZXJuIFNpa29yYQorQmpvcm4gQXVndXN0c3NvbgorQmpvcm4gUmVlc2UKK0Jq9nJuIFN0ZW5iZXJnCitCb2IgUmljaG1vbmQKK0JvYiBTY2hhZGVyCitCb2dkYW4gTmljdWxhCitCcmFkIEJ1cmRpY2sKK0JyYWQgSGFyZHMKK0JyYWQgS2luZworQnJhZGZvcmQgQnJ1Y2UKK0JyYW5kb24gV2FuZworQnJlbmRhbiBKdXJkCitCcmVudCBCZWFyZHNsZXkKK0JyaWFuIEFraW5zCitCcmlhbiBEZXNzZW50CitCcmlhbiBKLiBNdXJyZWxsCitCcmlhbiBSIER1ZmZ5CitCcmlhbiBVbG0KK0Jyb2NrIE5vbGFuZAorQnJ1Y2UgTWl0Y2hlbmVyCitCcnlhbiBIZW5kZXJzb24KK0JyeWFuIEtlbXAKK0NhbWVyb24gS2Fpc2VyCitDYW1pbGxlIE1vbmNlbGllcgorQ2FvbGFuIE1jTmFtYXJhCitDYXJzdGVuIExhbmdlCitDYXNleSBPJ0Rvbm5lbGwKK0NlZHJpYyBEZWx0aGVpbAorQ2hhZCBNb25yb2UKK0NoYXJsZXMgS2VycgorQ2hpaC1DaHVuZyBDaGFuZworQ2hyaXMgIkJvYiBCb2IiCitDaHJpcyBDb21iZXMKK0NocmlzIENvbnJveQorQ2hyaXMgRGVpZHVuCitDaHJpcyBGbGVyYWNrZXJzCitDaHJpcyBHYXVrcm9nZXIKK0NocmlzIE1hbHRieQorQ2hyaXMgTXVtZm9yZAorQ2hyaXMgU21vd3RvbgorQ2hyaXN0aWFuIEdyb3Rob2ZmCitDaHJpc3RpYW4gSGFnZWxlCitDaHJpc3RpYW4gS3JhdXNlCitDaHJpc3RpYW4gS3VyegorQ2hyaXN0aWFuIFJvYm90dG9tIFJlaXMKK0NocmlzdGlhbiBTY2htaXR6CitDaHJpc3RpYW4gVm9ndAorQ2hyaXN0b3BoZSBEZW1vcnkKK0NocmlzdG9waGUgTGVncnkKK0NocmlzdG9waGVyIENvbnJveQorQ2hyaXN0b3BoZXIgUGFsb3cKK0NocmlzdG9waGVyIFIuIFBhbG1lcgorQ2hyaXN0b3BoZXIgU3RvbmUKK0NpcHJpYW4gQmFkZXNjdQorQ2xhZXMgSmFrb2Jzc29uCitDbGFyZW5jZSBHYXJkbmVyCitDbGlmZm9yZCBXb2xmCitDb2R5IEpvbmVzCitDb2xpbiBIb2diZW4KK0NvbGluIFdhdHNvbgorQ29sbSBCdWNrbGV5CitDb25zdGFudGluZSBTYXB1bnR6YWtpcworQ29yeSBOZWxzb24KK0NyYWlnIEEgV2VzdAorQ3JhaWcgRGF2aXNvbgorQ3JhaWcgTWFya3dhcmR0CitDcmlzIEJhaWxpZmYKK0NyaXN0aWFuIFJvZHJpZ3VlegorQ3VydCBCb2dtaW5lCitDeXJpbGwgT3N0ZXJ3YWxkZXIKK0RhZ29iZXJ0IE1pY2hlbHNlbgorRGFtaWVuIEFkYW50CitEYW4gQmVja2VyCitEYW4gQworRGFuIEZhbmRyaWNoCitEYW4gTG9ja3MKK0RhbiBOZWxzb24KK0RhbiBQZXRpdHQKK0RhbiBUb3JvcAorRGFuIFppdHRlcgorRGFuaWVsIEJsYWNrCitEYW5pZWwgQ2F0ZXIKK0RhbmllbCBFZ2dlcgorRGFuaWVsIEZhbmRyaWNoCitEYW5pZWwgSm9obnNvbgorRGFuaWVsIE1lbnR6CitEYW5pZWwgU3RlaW5iZXJnCitEYW5pZWwgU3RlbmJlcmcKK0RhbmllbCBhdCB0b3VjaHR1bmVzCitEYXJyeWwgSG91c2UKK0RhcnNoYW4gTW9keQorRGF2ZSBEcmliaW4KK0RhdmUgSGFsYmFra2VuCitEYXZlIEhhbWlsdG9uCitEYXZlIE1heQorRGF2ZSBSZWlzbmVyCitEYXZlIFZhc2lsZXZza3kKK0RhdmlkIEJhdQorRGF2aWQgQmluZGVybWFuCitEYXZpZCBCeXJvbgorRGF2aWQgQ29oZW4KK0RhdmlkIEVyaWtzc29uCitEYXZpZCBIb3VsZGVyCitEYXZpZCBIdWxsCitEYXZpZCBKIE1leWVyCitEYXZpZCBKYW1lcworRGF2aWQgS2llcnpub3dza2kKK0RhdmlkIEtpbWRvbgorRGF2aWQgTGFuZworRGF2aWQgTGVCbGFuYworRGF2aWQgTWNDcmVlZHkKK0RhdmlkIE9kaW4KK0RhdmlkIFBoaWxsaXBzCitEYXZpZCBSb3NlbnN0cmF1Y2gKK0RhdmlkIFNoYXcKK0RhdmlkIFRhcmVuZGFzaAorRGF2aWQgVGhpZWwKK0RhdmlkIFdyaWdodAorRGF2aWQgWWFuCitEZW5nbWlud2VuCitEZXRsZWYgU2NobWllcgorRGlkaWVyIEJyaXNlYm91cmcKK0RpZWdvIENhc29ycmFuCitEaW1hIEJhcnNreQorRGltaXRyZSBEaW1pdHJvdgorRGltaXRyaXMgU2FycmlzCitEaW5hcgorRGlyayBFZGRlbGJ1ZXR0ZWwKK0RpcmsgTWFuc2tlCitEbWl0cmkgU2h1YmluCitEbWl0cml5IFNlcmdleWV2CitEbWl0cnkgQmFydHNldmljaAorRG1pdHJ5IEt1cm9jaGtpbgorRG1pdHJ5IFBvcG92CitEbWl0cnkgUmVjaGtpbgorRG9sYm5lZmYgQS5WCitEb21lbmljbyBBbmRyZW9saQorRG9taW5pY2sgTWVnbGlvCitEb21pbmlxdWUgTGV1ZW5iZXJnZXIKK0RvdWcgS2F1Zm1hbgorRG91ZyBQb3J0ZXIKK0RvdWdsYXMgRS4gV2Vnc2NoZWlkCitEb3VnbGFzIEtpbHBhdHJpY2sKK0RvdWdsYXMgUi4gSG9ybmVyCitEb3VnbGFzIFN0ZWlud2FuZAorRG92IE11cmlrCitEdWFuZSBDYXRoZXkKK0R1bmNhbiBNYWMtVmljYXIgUHJldHQKK0R1c3RpbiBCb3N3ZWxsCitEeWxhbiBFbGxpY290dAorRHlsYW4gU2FsaXNidXJ5CitFYXJseSBFaGxpbmdlcgorRWJlbmV6ZXIgSWtvbm5lCitFZGluIEthZHJpYmFzaWMKK0VkdWFyZCBCbG9jaAorRWV0dSBPamFuZW4KK0VsbGlzIFByaXRjaGFyZAorRW1hbnVlbGUgQm92aXNpbworRW1pbCBSb21hbnVzCitFbWlsaWFubyBJZGEKK0VucmljbyBTY2hvbHoKK0VucmlrIEJlcmtoYW4KK0VyaWMgQ29vcGVyCitFcmljIEh1CitFcmljIExhbmRlcworRXJpYyBMYXZpZ25lCitFcmljIE1lbHZpbGxlCitFcmljIE1lcnRlbnMKK0VyaWMgUmF1dG1hbgorRXJpYyBUaGVsaW4KK0VyaWMgVmVyZ25hdWQKK0VyaWMgV29uZworRXJpYyBZb3VuZworRXJpY2sgTnV3ZW5kYW0KK0Vyd2FuIExlZ3JhbmQKK0Vyd2luIEF1dGhyaWVkCitFdWdlbmUgS290bHlhcm92CitFdmFuIEpvcmRhbgorRXlnZW5lIFJ5YWJpbmtpbgorRmFiaWFuIEhpZXJuYXV4CitGYWJpYW4gS2VpbAorRmFicml6aW8gQW1tb2xsbworRmVkb3IgS2FycGVsZXZpdGNoCitGZWxpeCB2b24gTGVpdG5lcgorRmVuZyBUdQorRmxvcmlhbiBTY2hvcHBtYW5uCitGb3JyZXN0IENhaG9vbgorRnJhbmsgSGVtcGVsCitGcmFuayBLZWVuZXkKK0ZyYW5rIE1jR2VvdWdoCitGcmFuayBNZWllcgorRnJhbmsgVGljaGVsZXIKK0ZyYW5rIFZhbiBVZmZlbGVuCitGcmVkIE1hY2hhZG8KK0ZyZWQgTmV3CitGcmVkIE5vegorRnJlZGVyaWMgTGVwaWVkCitHYWJyaWVsIEt1cmkKK0dhcnJldHQgSG9sbXN0cm9tCitHYXJ5IE1heHdlbGwKK0dhdXRhbSBLYWNocm9vCitHYXV0YW0gTWFuaQorR2F2cmllIFBoaWxpcHNvbgorR2F6IElxYmFsCitHZW9yZyBIb3JuCitHZW9yZyBIdWV0dGVuZWdnZXIKK0dlb3JnIExpcHBpdHNjaAorR2VvcmcgV2ljaGVyc2tpCitHZXJkIHYuIEVnaWR5CitHZXJoYXJkIEhlcnJlCitHZXJyaXQgQnJ1Y2ho5HVzZXIKK0dpYW5jYXJsbyBGb3JtaWN1Y2NpYQorR2lhc2xhcyBHZW9yZ2lvcworR2lsIFdlYmVyCitHaWxhZAorR2lsYmVydCBSYW1pcmV6IEpyLgorR2lsbGVzIEJsYW5jCitHaXNsZSBWYW5lbQorR2l1c2VwcGUgQXR0YXJkaQorR2l1c2VwcGUgRCdBbWJyb3NpbworR2xlbiBOYWthbXVyYQorR2xlbiBTY290dAorR29raGFuIFNlbmd1bgorR3JhbnQgRXJpY2tzb24KK0dyZWcgSGV3Z2lsbAorR3JlZyBNb3JzZQorR3JlZyBPbnVmZXIKK0dyZWcgWmF2ZXJ0bmlrCitHcmlnb3J5IEVudGluCitHdWVub2xlIEJlc2NvbgorR3VlbnRlciBLbmF1ZgorR3VpbGxhdW1lIEFybHVpc29uCitHdXN0YWYgSHVpCitHd2Vub2xlIEJlYXVjaGVzbmUKK0f2dHogQmFiaW4tRWJlbGwKK0hhbWlzaCBNYWNrZW56aWUKK0hhbmcgS2luIExhdQorSGFubm8gS3Jhbnpob2ZmCitIYW5zIFN0ZWVnZXJzCitIYW5zLUp1cmdlbiBNYXkKK0hhcmRlZXAgU2luZ2gKK0hhcnNoYWwgUHJhZGhhbgorSGF1a2UgRHVkZW4KK0hlaWtraSBLb3JwZWxhCitIZWlucmljaCBLbworSGVuZHJpayBWaXNhZ2UKK0hlbnJpayBTdG9ybmVyCitIZW5yeSBMdWRlbWFubgorSGVydmUgQW1ibGFyZAorSGlkZW1vdG8gTmFrYWRhCitIb2ktSG8gQ2hhbgorSG9uZ2xpIExhaQorSG93YXJkIENodQorSHpoaWp1bgorSWFuIEQgQWxsZW4KK0lhbiBGb3JkCitJYW4gR3VsbGl2ZXIKK0lhbiBMeW5hZ2gKK0lhbiBUdXJuZXIKK0lhbiBXaWxrZXMKK0lnbmFjaW8gVmF6cXVlei1BYnJhbXMKK0lnb3IgRnJhbmNodWsKK0lnb3IgTm92b3NlbHRzZXYKK0lnb3IgUG9seWFrb3YKK0lsZ3VpeiBMYXR5cG92CitJbGphIHZhbiBTcHJ1bmRlbAorSW1tYW51ZWwgR3JlZ29pcmUKK0luZ21hciBSdW5nZQorSW5nbyBSYWxmIEJsdW0KK0luZ28gV2lsa2VuCitKYWNrIFpoYW5nCitKYWNreSBMYW0KK0phY29iIE1ldXNlcgorSmFjb2IgTW9zaGVua28KK0phZCBDaGFtY2hhbQorSmFtZXMgQnVyc2EKK0phbWVzIENoZW5nCitKYW1lcyBDbGFuY3kKK0phbWVzIENvbmUKK0phbWVzIEdhbGxhZ2hlcgorSmFtZXMgR3JpZmZpdGhzCitKYW1lcyBIb3VzbGV5CitKYW1lcyBNYWNNaWxsYW4KK0phbWllIExva2llcgorSmFtaWUgTmV3dG9uCitKYW1pZSBXaWxraW5zb24KK0phbiBLdW5kZXIKK0phbiBWYW4gQm9naG91dAorSmFyZWQgTHVuZGVsbAorSmFyaSBTdW5kZWxsCitKYXNvbiBHbGFzZ293CitKYXNvbiBMaXUKK0phc29uIE1jRG9uYWxkCitKYXNvbiBTLiBQcmllYmUKK0pheSBBdXN0aW4KK0pheWVzaCBBIFNoYWgKK0pheiBGcmVzaAorSmVhbiBKYWNxdWVzIERyb3VpbgorSmVhbi1DbGF1ZGUgQ2hhdXZlCitKZWFuLUZyYW5jb2lzIEJlcnRyYW5kCitKZWFuLUxvdWlzIExlbWFpcmUKK0plYW4tTWFyYyBSYW5nZXIKK0plYW4tUGhpbGlwcGUgQmFycmV0dGUtTGFQaWVycmUKK0plZmYgSm9obnNvbgorSmVmZiBMYXdzb24KK0plZmYgUGhpbGxpcHMKK0plZmYgUG9obG1leWVyCitKZWZmIFdlYmVyCitKZWZmcmV5IFBvaGxtZXllcgorSmVyZW15IEZyaWVzbmVyCitKZXJvbWUgTXVmZmF0LU1lcmlkb2wKK0plcm9tZSBWb3VpbGxvbgorSmVycnkgV3UKK0plcyBCYWR3YWwKK0plc3BlciBKZW5zZW4KK0plc3NlIE5vbGxlcgorSmltIERyYXNoCitKaW0gRnJlZW1hbgorSmltIEhvbGxpbmdlcgorSmltIE1leWVyaW5nCitKb2NlbHluIEphdWJlcnQKK0pvZSBIYWxwaW4KK0pvZSBNYWxpY2tpCitKb2VsIENoZW4KK0pvZmVsbCBHYWxsYXJkbworSm9oYW4gQW5kZXJzb24KK0pvaGFuIE5pbHNzb24KK0pvaGFuIHZhbiBTZWxzdAorSm9oYW5uZXMgQmF1ZXIKK0pvaG4gQnJhZHNoYXcKK0pvaG4gQ3JvdworSm9obiBEZW5uaXMKK0pvaG4gRS4gTWFsbWJlcmcKK0pvaG4gSmFuc3NlbgorSm9obiBLZWxseQorSm9obiBMYXNrCitKb2huIExpZ2h0c2V5CitKb2huIE1jR293YW4KK0pvaG4gUC4gTWNDYXNrZXkKK0pvaG4gV2lsa2luc29uCitKb2huLU1hcmsgQmVsbAorSm9obm55IEx1b25nCitKb24gR3J1YmJzCitKb24gTmVsc29uCitKb24gU2FyZ2VhbnQKK0pvbiBUcmF2aXMKK0pvbiBUdXJuZXIKK0pvbmFzIEZvcnNtYW4KK0pvbmFzIFNjaG5lbGxpCitKb25hdGFuIExhbmRlcgorSm9uYXRoYW4gSHNldQorSm9uZ2tpIFN1d2FuZGkKK0pvc2UgS2FoYW4KK0pvc2VmIFdvbGYKK0pvc2ggS2FwZWxsCitKb3NodWEgS3dhbgorSm9zdWUgQW5kcmFkZSBHb21lcworSnVhbiBGLiBDb2RhZ25vbmUKK0p1YW4gSWduYWNpbyBIZXJ24XMKK0p1ZHNvbiBCaXNob3AKK0p1ZXJnZW4gV2lsa2UKK0p1a2thIFBpaGwKK0p1bGlhbiBOb2JsZQorSnVsaWVuIENoYWZmcmFpeAorSnVsaWVuIFJveWVyCitKdW4taWNoaXJvIGl0b2p1biBIYWdpbm8KK0p1cmlqIFNtYWtvdgorSnVzdGluIEZsZXRjaGVyCitK9nJnIE11ZWxsZXItVG9saworSvZybiBIYXJ0cm90aAorS2FpIFNvbW1lcmZlbGQKK0thaS1Vd2UgUm9tbWVsCitLYWxsZSBWYWhsbWFuCitLYW1pbCBEdWRrYQorS2FuZy1KaW4gTGVlCitLYXJsIE0KK0thcmwgTW9lcmRlcgorS2Fyb2wgUGlldHJ6YWsKK0thc3BhciBCcmFuZAorS2F0aWUgV2FuZworS2VlcyBDb29rCitLZWl0aCBNYWNEb25hbGQKK0tlaXRoIE1jR3VpZ2FuCitLZWl0aCBNb2sKK0tlbiBIaXJzY2gKK0tlbiBSYXN0YXR0ZXIKK0tlbm55IFRvCitLZW50IEJvb3J0egorS2VzaGF2IEtyaXR5CitLZXZpbiBCYXVnaG1hbgorS2V2aW4gRmlzaworS2V2aW4gTHVzc2llcgorS2V2aW4gUmVlZAorS2V2aW4gUm90aAorS2ltIFJpbm5ld2l0egorS2ltbW8gS2lubnVuZW4KK0tqZWxsIEVyaWNzb24KK0tqZXRpbCBKYWNvYnNlbgorS2xldnRzb3YgVmFkaW0KK0tyaXMgS2VubmF3YXkKK0tyaXNobmVuZHUgTWFqdW1kYXIKK0tyaXN0ZXIgSm9oYW5zZW4KK0tyaXN0aWFuIEd1bnN0b25lCitLcmlzdGlhbiBL9mhudG9wcAorS3lsZSBTYWxsZWUKK0xhY2hsYW4gTydEZWEKK0xhcnJ5IENhbXBiZWxsCitMYXJyeSBGYWhub2UKK0xhcnMgR3VzdGFmc3NvbgorTGFycyBKLiBBYXMKK0xhcnMgTmlsc3NvbgorTGFycyBUb3JiZW4gV2lsc29uCitMYXUgSGFuZyBLaW4KK0xhdXJlbnQgUmFicmV0CitMZWdvZmYgVmluY2VudAorTGVoZWwgQmVybmFkdAorTGVuIEtyYXVzZQorTGVuYWljIExlZmV2ZXIKK0xlbm55IFJhY2hpdHNreQorTGlhbSBIZWFseQorTGluYXMgVmVwc3RhcworTGluZyBUaGlvCitMaW51cyBOaWVsc2VuIEZlbHR6aW5nCitMaXNhIFh1CitMaXphIEFsZW5jaGVyeQorTG9pYyBEYWNoYXJ5CitMb3JlbiBLaXJrYnkKK0x1Y2EgQWx0ZWEKK0x1Y2EgQWx0ZWFzCitMdWNhcyBBZGFtc2tpCitMdWthc3ogQ3pla2llcmRhCitMdWtlIEFtZXJ5CitMdWtlIENhbGwKK0x1b25nIERpbmggRHVuZworTWFjaWVqIEthcnBpdWsKK01hY2llaiBXLiBSb3p5Y2tpCitNYW1vcnUgVGFzYWthCitNYW5keSBXdQorTWFuZnJlZCBTY2h3YXJiCitNYW51ZWwgTWFzc2luZworTWFyYyBCb3VjaGVyCitNYXJjIEtsZWluZS1CdWRkZQorTWFyY2VsIFJvZWxvZnMKK01hcmNlbG8gSnVjaGVtCitNYXJjaW4gQWRhbXNraQorTWFyY2luIEtvbmlja2kKK01hcmNvIEcuIFNhbHZhZ25vCitNYXJjbyBNYWdnaQorTWFyY3VzIFN1bmRiZXJnCitNYXJjdXMgV2Vic3RlcgorTWFyaW8gU2Nocm9lZGVyCitNYXJrIEJyYW5kCitNYXJrIEJ1dGxlcgorTWFyayBEYXZpZXMKK01hcmsgRWljaGluCitNYXJrIEluY2xleQorTWFyayBLYXJwZWxlcworTWFyayBMZW50Y3puZXIKK01hcmt1cyBEdWZ0CitNYXJrdXMgS29ldHRlcgorTWFya3VzIE1vZWxsZXIKK01hcmt1cyBPYmVyaHVtZXIKK01hcnRpam4gS29zdGVyCitNYXJ0aW4gQy4gTWFydGluCitNYXJ0aW4gRHJhc2FyCitNYXJ0aW4gSGFnZXIKK01hcnRpbiBIZWRlbmZhbGsKK01hcnRpbiBMZW1rZQorTWFydGluIFNraW5uZXIKK01hcnRpbiBTdG9yc2pvCitNYXJ0eSBLdWhydAorTWFydWtvCitNYXNzaW1pbGlhbm8gWmljY2FyZGkKK01hc3NpbW8gQ2FsbGVnYXJpCitNYXRldXN6IExvc2tvdAorTWF0aGlhcyBBeGVsc3NvbgorTWF0cyBMaWRlbGwKK01hdHQgS3JhYWkKK01hdHQgVmVlbnN0cmEKK01hdHQgV2l0aGVyc3Bvb24KK01hdHQgV2l4c29uCitNYXR0ZW8gUm9jY28KK01hdHRoZXcgQmxhaW4KK01hdHRoZXcgQ2xhcmtlCitNYXR0aGlhcyBCb2x0ZQorTWF1cmljZSBCYXJudW0KK01hdXJvIElvcmlvCitNYXggS2F0c2V2CitNYXhpbSBJdmFub3YKK01heGltIFBlcmVuZXNlbmtvCitNZWhtZXQgQm96a3VydAorTWVrb25pa3VtCitNZXR0Z3V0IEphbWFsbGEKK01pY2hhZWwgQmVuZWRpY3QKK01pY2hhZWwgQ2FsbWVyCitNaWNoYWVsIENyb25lbndvcnRoCitNaWNoYWVsIEN1cnRpcworTWljaGFlbCBHb2ZmaW91bAorTWljaGFlbCBKYWhuCitNaWNoYWVsIEplcnJpcworTWljaGFlbCBNZWFsbGluZworTWljaGFlbCBNdWVsbGVyCitNaWNoYWVsIFNtaXRoCitNaWNoYWVsIFN0aWxsd2VsbAorTWljaGFlbCBXYWxsbmVyCitNaWNoYWwgQm9uaW5vCitNaWNoYWwgR29ybnkKK01pY2hhbCBNYXJlaworTWljaGVsZSBCaW5pCitNaWhhaSBJb25lc2N1CitNaWthZWwgSm9oYW5zc29uCitNaWthZWwgU2VubmVyaG9sbQorTWlrZSBCeXRuYXIKK01pa2UgQ3Jvd2UKK01pa2UgRG9iYnMKK01pa2UgSG9tbWV5CitNaWtlIFBvd2VyCitNaWtlIFByb3R0cworTWlrZSBSZXZpCitNaWtsb3MgTmVtZXRoCitNaXR6IFdhcmsKK01vaGFtZWQgTHJoYXppCitNb2h1biBCaXN3YXMKK01vb25lc2FteQorTmF0aGFuIENvdWx0ZXIKK05hdGhhbiBPJ1N1bGxpdmFuCitOYXRoYW5hZWwgTmVyb2RlCitOYXZlZW4gQ2hhbmRyYW4KK05hdmVlbiBOb2VsCitOZWlsIER1bmJhcgorTmVpbCBTcHJpbmcKK05pYyBSb2V0cworTmljaG9sYXMgTWFuaXNjYWxjbworTmljayBHaW1icm9uZQorTmljayBIdW1mcmV5CitOaWNrIFppdHptYW5uCitOaWNvIEJhZ2d1cworTmljb2xhcyBCZXJsb3F1aW4KK05pY29sYXMgQ3JvaXNldAorTmljb2xhcyBGcmFu529pcworTmllbHMgdmFuIFRvbmdlcmVuCitOaWtpdGEgU2NobWlkdAorTmlraXRpbnNraXQgRG1pdHJpeQorTmlrbGFzIEFuZ2VicmFuZAorTmlrb2xhaSBLb25kcmFzaG92CitOaWtvcyBNYXZyb2dpYW5ub3BvdWxvcworTmluZyBEb25nCitOaXIgU29mZmVyCitOaXMgSm9yZ2Vuc2VuCitOb2RhayBTb2RhaworTm9yYmVydCBGcmVzZQorTm9yYmVydCBOb3ZvdG55CitPZmVyCitPbGFmIFN0dWViZW4KK09sYWYgU3T8YmVuCitPcmVuIFRpcm9zaAorT3JpIEF2dGFsaW9uCitQIFIgU2NoYWZmbmVyCitQYW9sbyBQaWFjZW50aW5pCitQYXNjYWwgVGVyamFuCitQYXNoYSBLdXpuZXRzb3YKK1BhdCBSYXkKK1BhdHJpY2UgR3VlcmluCitQYXRyaWNrIEJpaGFuLUZhb3UKK1BhdHJpY2sgTW9ubmVyYXQKK1BhdHJpY2sgU2NvdHQKK1BhdHJpY2sgU21pdGgKK1BhdHJpayBUaHVuc3Ryb20KK1BhdSBHYXJjaWEgaSBRdWlsZXMKK1BhdWwgSGFycmluZ3RvbgorUGF1bCBIb3dhcnRoCitQYXVsIE1hcnF1aXMKK1BhdWwgTW9vcmUKK1BhdWwgTm9sYW4KK1BhdWwgUXVlcm5hCitQYXZlbCBDZW5laworUGF2ZWwgT3JlaG92CitQYXZlbCBSYWlza3VwCitQYXdlbCBBLiBHYWpkYQorUGF3ZWwgS2llcnNraQorUGVkcm8gTGFycm95CitQZWRybyBOZXZlcworUGV0ZSBTdQorUGV0ZXIgQnJheQorUGV0ZXIgRm9ycmV0CitQZXRlciBIZXVjaGVydAorUGV0ZXIgSGphbG1hcnNzb24KK1BldGVyIEtvcnNnYWFyZAorUGV0ZXIgTGFtYmVyZworUGV0ZXIgTydHb3JtYW4KK1BldGVyIFBlbnRjaGV2CitQZXRlciBTaWx2YQorUGV0ZXIgU3UKK1BldGVyIFN5bHZlc3RlcgorUGV0ZXIgVG9kZAorUGV0ZXIgVmVyaGFzCitQZXRlciBXdWxsaW5nZXIKK1BldGVyaXMgS3J1bWlucworUGhpbCBCbHVuZGVsbAorUGhpbCBLYXJuCitQaGlsIExpc2llY2tpCitQaGlsIFBlbGxvdWNob3VkCitQaGlsaXAgR2xhZHN0b25lCitQaGlsaXAgTGFuZ2RhbGUKK1BoaWxpcHBlIEhhbWVhdQorUGhpbGlwcGUgUmFvdWx0CitQaGlsaXBwZSBWYXVjaGVyCitQaWVycmUKK1BpZXJyZSBCcmljbworUGllcnJlIEpveWUKK1Bvb3lhbiBNY1Nwb3JyYW4KK1ByYW1vZCBTaGFybWEKK1B1bmVldCBQYXdhaWEKK1F1YWdtaXJlCitRdWFuYWggR2lic29uLU1vdW50CitRdWlubiBTbGFjaworUmFmYSBNdXlvCitSYWZhZWwgU2FndWxhCitSYWluZXIgQ2FuYXZhbgorUmFpbmVyIEtvZW5pZworUmFqZXNoIE5hZ2FuYXRoYW4KK1JhbGYgUy4gRW5nZWxzY2hhbGwKK1JhbHBoIEJlY2ttYW5uCitSYWxwaCBNaXRjaGVsbAorUmFtYW5hIE1va2thcGF0aQorUmFuZHkgTWNNdXJjaHkKK1JhdmkgUHJhdGFwCitSYXkgRGFzc2VuCitSYXkgUGVrb3dza2kKK1JlaW5vdXQgdmFuIFNjaG91d2VuCitSZW5hdG8gQm90ZWxobworUmVuYXVkIENoYWlsbGF0CitSZW5hdWQgRHVoYXV0CitSZW5lIEJlcm5oYXJkdAorUmVuZSBSZWJlCitSZXV2ZW4gV2FjaHRmb2dlbAorUmV6YSBBcmJhYgorUmljYXJkbyBDYWRpbWUKK1JpY2ggR3JheQorUmljaCBSYXVlbnphaG4KK1JpY2hhcmQgQXJjaGVyCitSaWNoYXJkIEF0dGVyZXIKK1JpY2hhcmQgQnJhbWFudGUKK1JpY2hhcmQgQ2xheXRvbgorUmljaGFyZCBDb29wZXIKK1JpY2hhcmQgR29ydG9uCitSaWNoYXJkIFByZXNjb3R0CitSaWNoYXJkIFNpbHZlcm1hbgorUmljayBKb25lcworUmljayBSaWNoYXJkc29uCitSb2IgQ3JpdHRlbmRlbgorUm9iIEpvbmVzCitSb2IgU3RhbnplbAorUm9iIFdhcmQKK1JvYmVydCBBLiBNb25hdAorUm9iZXJ0IEQuIFlvdW5nCitSb2JlcnQgRm9yZW1hbgorUm9iZXJ0IElha29iYXNodmlsaQorUm9iZXJ0IE9sc29uCitSb2JlcnQgU2NodW1hbm4KK1JvYmVydCBXZWF2ZXIKK1JvYmluIENvcm5lbGl1cworUm9iaW4gSm9obnNvbgorUm9iaW4gS2F5CitSb2Jzb24gQnJhZ2EgQXJhdWpvCitSb2RuZXkgU2ltbW9ucworUm9sYW5kIEJsb20KK1JvbGFuZCBLcmlrYXZhCitSb2xhbmQgWmltbWVybWFubgorUm9sbGFuZCBEdWRlbWFpbmUKK1JvbWFuIEtvaWZtYW4KK1JvbiBaYXBwCitSb3NpbWlsZG8gZGEgU2lsdmEKK1JveSBTaGFuCitSdW5lIEtsZXZlbGFuZAorUnVzbGFuIEdheml6b3YKK1J1dGdlciBIb2ZtYW4KK1J5YW4gQ2hhbgorUnlhbiBOZWxzb24KK1J5YW4gU2NobWlkdAorUy4gTW9vbmVzYW15CitTYWx2YWRvciBE4XZpbGEKK1NhbHZhdG9yZSBTb3JyZW50aW5vCitTYW0gTGlzdG9wYWQKK1NhbXBvIEtlbGxvbWFraQorU2FtdWVsIETtYXogR2FyY+1hCitTYW11ZWwgTGlzdG9wYWQKK1NhbXVlbCBUaGliYXVsdAorU2FuZGVyIEdhdGVzCitTYW5kb3IgRmVsZGkKK1NhcWliIEFsaQorU2F1bCBnb29kCitTY290dCBCYXJyZXR0CitTY290dCBDYW50b3IKK1Njb3R0IERhdmlzCitTY290dCBNY0NyZWFyeQorU2ViYXN0aWVuIFdpbGxlbWlqbnMKK1NlbnRoaWwgUmFqYSBWZWx1CitTZXJnaW8gQmFsbGVzdHJlcm8KK1Nlc2h1YmFidSBQYXNhbQorU2ggRGlhbworU2hhcmFkIEd1cHRhCitTaGFyZAorU2hhd24gUG91bHNvbgorU2htdWxpayBSZWdldgorU2lkZGhhcnRoYSBQcmFrYXNoIEphaW4KK1NpZG5leSBTYW4gTWFydGluCitTaWVnZnJpZWQgR3l1cmljc2tvCitTaW1vbiBEaWNrCitTaW1vbiBKb3NlZnNzb24KK1NpbW9uIExpdQorU29uZyBNYQorU29uaWEgU3VicmFtYW5pYW4KK1NwYWNlbiBKYXNzZXQKK1NwaXJpZG9ub2ZmIEEuVgorU3RhZGxlciBTdGVwaGFuCitTdGFuIHZhbiBkZSBCdXJndAorU3RlZmFuIEVzc2VyCitTdGVmYW4gS3JhdXNlCitTdGVmYW4gVGVsZW1hbgorU3RlZmFuIFRvbWFuZWsKK1N0ZWZhbiBVbHJpY2gKK1N0ZXBoYW4gQmVyZ21hbm4KK1N0ZXBoZW4gQ29sbHllcgorU3RlcGhlbiBLaWNrCitTdGVwaGVuIE1vcmUKK1N0ZXJsaW5nIEh1Z2hlcworU3RldmUgR3JlZW4KK1N0ZXZlIEggVHJ1b25nCitTdGV2ZSBIb2xtZQorU3RldmUgTGhvbW1lCitTdGV2ZSBMaXR0bGUKK1N0ZXZlIE1hcngKK1N0ZXZlIE9saXBoYW50CitTdGV2ZSBSb3Nrb3dza2kKK1N0ZXZlbiBCYXp5bAorU3RldmVuIEcuIEpvaG5zb24KK1N0ZXZlbiBNLiBTY2h3ZWRhCitTdGV2ZW4gUGFya2VzCitTdG9uZWQgRWxpcG90CitTdmVuIEFuZGVycworU3ZlbiBOZXVoYXVzCitTdmVuIFdlZ2VuZXIKK1PpYmFzdGllbiBXaWxsZW1pam5zCitULiBCaGFyYXRoCitULiBZYW1hZGEKK1RhbmVsaSBWYWhha2FuZ2FzCitUYW5ndXkgRmF1dHJlCitUZW1wcmltdXMKK1Rob21hcyBKLiBNb29yZQorVGhvbWFzIEtsYXVzbmVyCitUaG9tYXMgTC4gU2hpbm5pY2sKK1Rob21hcyBMb3BhdGljCitUaG9tYXMgU2Nod2luZ2UKK1Rob21hcyBUb25pbm8KK1RpbSBBbnNlbGwKK1RpbSBCYWtlcgorVGltIEJhcnRsZXkKK1RpbSBDaGVuCitUaW0gQ29zdGVsbG8KK1RpbSBIYXJkZXIKK1RpbSBOZXdzb21lCitUaW0gU25lZGRvbgorVGludXMgdmFuIGRlbiBCZXJnCitUb2JpYXMgUnVuZHN0cvZtCitUb2J5IFBldGVyc29uCitUb2RkIEEgT3Vza2EKK1RvZGQgS3VsZXN6YQorVG9kZCBWaWVybGluZworVG9tIEJlbm9pc3QKK1RvbSBEb25vdmFuCitUb20gTGVlCitUb20gTWF0dGlzb24KK1RvbSBNb2VycworVG9tIE11ZWxsZXIKK1RvbSBSZWduZXIKK1RvbSBXcmlnaHQKK1RvbSBaZXJ1Y2hhCitUb21hcyBQb3NwaXNlaworVG9tYXMgU3plcGUKK1RvbWFzeiBMYWNraQorVG9tbWllIEdhbm5lcnQKK1RvbW15IFRhbQorVG9uIFZvb24KK1RvbmkgTW9yZW5vCitUb29uIFZlcndhZXN0CitUb3IgQXJudHNlbgorVG9yc3RlbiBGb2VydHNjaAorVG9zaGlvIEt1cmF0b21pCitUb3NoaXl1a2kgTWFlemF3YQorVHJhaWFuIE5pY29sZXNjdQorVHJvZWxzIFdhbHN0ZWQgSGFuc2VuCitUcm95IEVuZ2VsCitUdXBvbmUgQWxmcmVkbworVWxmIEjkcm5oYW1tYXIKK1VscmljaCBaYWRvdworVmVua2F0IEFrZWxsYQorVmljdG9yIFNuZXpoa28KK1Zpa3JhbSBTYXhlbmEKK1ZpbG1vcyBOZWJlaGFqCitWaW5jZW50IEJyb25uZXIKK1ZpbmNlbnQgTGUgTm9ybWFuZAorVmluY2VudCBQZW5xdWVyYydoCitWaW5jZW50IFNhbmRlcnMKK1ZpbmNlbnQgVG9ycmkKK1ZsYWQgR3JhY2hvdgorVmxhZCBVcmVjaGUKK1ZsYWRpbWlyIEdyaXNoY2hlbmtvCitWbGFkaW1pciBMYXphcmVua28KK1ZvanRlY2ggSmFub3RhCitWb2p0ZWNoIE1pbmFyaWsKK1ZzZXZvbG9kIE5vdmlrb3YKK1dhbHRlciBKLiBNYWNrCitXYXJkIFdpbGxhdHMKK1dheW5lIEhhaWdoCitXZXJuZXIgS29jaAorV2VzbGV5IExheHRvbgorV2VzbGV5IE1pYXcKK1dleiBGdXJsb25nCitXaWxmcmVkbyBTYW5jaGV6CitXb2pjaWVjaCBad2llZmthCitXdSBZb25nemhlbmcKK1hhdmllciBCb3VjaG91eAorWWFuZyBUc2UKK1lhcnJhbSBTdW5pbAorWWVob3NodWEgSGVyc2hiZXJnCitZdWtpaGlybyBLYXdhZGEKK1l1cml5IFNvc292CitZdmVzIExlamV1bmUKK1ptZXkgUGV0cm9mZgorWnZpIEhhcidFbAorbmsKK3N3YWxrYXVzIGF0IHlhaG9vLmNvbQordG9tbWlua1thdF1wb3N0LnBsCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL1RPRE8gYi9jdXJsLTcuMjUuMC9kb2NzL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzMjY4NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvVE9ETwpAQCAtMCwwICsxLDU4MyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKworICAgICAgICAgICAgICAgIFRoaW5ncyB0aGF0IGNvdWxkIGJlIG5pY2UgdG8gZG8gaW4gdGhlIGZ1dHVyZQorCisgVGhpbmdzIHRvIGRvIGluIHByb2plY3QgY1VSTC4gUGxlYXNlIHRlbGwgdXMgd2hhdCB5b3UgdGhpbmssIGNvbnRyaWJ1dGUgYW5kCisgc2VuZCB1cyBwYXRjaGVzIHRoYXQgaW1wcm92ZSB0aGluZ3MhCisKKyBBbGwgYnVncyBkb2N1bWVudGVkIGluIHRoZSBLTk9XTl9CVUdTIGRvY3VtZW50IGFyZSBzdWJqZWN0IGZvciBmaXhpbmchCisKKyAxLiBsaWJjdXJsCisgMS4yIE1vcmUgZGF0YSBzaGFyaW5nCisgMS4zIHN0cnVjdCBsaWZyZXEKKyAxLjQgc2lnbmFsLWJhc2VkIHJlc29sdmVyIHRpbWVvdXRzCisgMS41IGdldCByaWQgb2YgUEFUSF9NQVgKKyAxLjYgcHJvZ3Jlc3MgY2FsbGJhY2sgd2l0aG91dCBkb3VibGVzCisgMS43IEhhcHB5IEV5ZWJhbGwgZHVhbCBzdGFjayBjb25uZWN0CisKKyAyLiBsaWJjdXJsIC0gbXVsdGkgaW50ZXJmYWNlCisgMi4xIE1vcmUgbm9uLWJsb2NraW5nCisgMi4yIFJlbW92ZSBlYXN5IGludGVyZmFjZSBpbnRlcm5hbGx5CisgMi40IEZpeCBIVFRQIFBpcGVsaW5pbmcgZm9yIFBVVAorCisgMy4gRG9jdW1lbnRhdGlvbgorIDMuMSAgTW9yZSBhbmQgYmV0dGVyCisKKyA0LiBGVFAKKyA0LjEgSE9TVAorIDQuMiBBbHRlciBwYXNzaXZlL2FjdGl2ZSBvbiBmYWlsdXJlIGFuZCByZXRyeQorIDQuMyBFYXJsaWVyIGJhZCBsZXR0ZXIgZGV0ZWN0aW9uCisgNC40IFJFU1QgZm9yIGxhcmdlIGZpbGVzCisgNC41IEZUUCBwcm94eSBzdXBwb3J0CisgNC42IEFTQ0lJIHN1cHBvcnQKKworIDUuIEhUVFAKKyA1LjEgQmV0dGVyIHBlcnNpc3RlbmN5IGZvciBIVFRQIDEuMAorIDUuMiBzdXBwb3J0IEZGMyBzcWxpdGUgY29va2llIGZpbGVzCisgNS4zIFJlYXJyYW5nZSByZXF1ZXN0IGhlYWRlciBvcmRlcgorCisgNi4gVEVMTkVUCisgNi4xIGRpdGNoIHN0ZGluCisgNi4yIGRpdGNoIHRlbG5ldC1zcGVjaWZpYyBzZWxlY3QKKyA2LjMgZmVhdHVyZSBuZWdvdGlhdGlvbiBkZWJ1ZyBkYXRhCisgNi40IHNlbmQgZGF0YSBpbiBjaHVua3MKKworIDcuIFNTTAorIDcuMSBEaXNhYmxlIHNwZWNpZmljIHZlcnNpb25zCisgNy4yIFByb3ZpZGUgbXV0ZXggbG9ja2luZyBBUEkKKyA3LjMgRXZhbHVhdGUgU1NMIHBhdGNoZXMKKyA3LjQgQ2FjaGUgT3BlblNTTCBjb250ZXh0cworIDcuNSBFeHBvcnQgc2Vzc2lvbiBpZHMKKyA3LjYgUHJvdmlkZSBjYWxsYmFjayBmb3IgY2VydCB2ZXJpZmljYXRpb24KKyA3LjcgU3VwcG9ydCBvdGhlciBTU0wgbGlicmFyaWVzCisgNy45IGltcHJvdmUgY29uZmlndXJlIC0td2l0aC1zc2wKKworIDguIEdudVRMUworIDguMSBTU0wgZW5naW5lIHN0dWZmCisgOC4zIGNoZWNrIGNvbm5lY3Rpb24KKyA4LjQgbm9uLWdjcnlwdAorCisgOS4gT3RoZXIgcHJvdG9jb2xzCisKKyAxMC4gTmV3IHByb3RvY29scworIDEwLjEgUlNZTkMKKworIDExLiBDbGllbnQKKyAxMS4xIHN5bmMKKyAxMS4yIGdsb2IgcG9zdHMKKyAxMS4zIHByZXZlbnQgZmlsZSBvdmVyd3JpdGluZworIDExLjQgc2ltdWx0YW5lb3VzIHBhcmFsbGVsIHRyYW5zZmVycworIDExLjUgcHJvdmlkZSBmb3JtcG9zdCBoZWFkZXJzCisgMTEuNiB1cmwtc3BlY2lmaWMgb3B0aW9ucworIDExLjcgbWV0YWxpbmsgc3VwcG9ydAorIDExLjggd2FybmluZyB3aGVuIHNldHRpbmcgYW4gb3B0aW9uCisgMTEuOSBJUHY2IGFkZHJlc3NlcyB3aXRoIGdsb2JiaW5nCisKKyAxMi4gQnVpbGQKKyAxMi4xIHJvZmZpdAorCisgMTMuIFRlc3Qgc3VpdGUKKyAxMy4xIFNTTCB0dW5uZWwKKyAxMy4yIG5pY2VyIGxhY2tpbmcgcGVybCBtZXNzYWdlCisgMTMuMyBtb3JlIHByb3RvY29scyBzdXBwb3J0ZWQKKyAxMy40IG1vcmUgcGxhdGZvcm1zIHN1cHBvcnRlZAorCisgMTQuIE5leHQgU09OQU1FIGJ1bXAKKyAxNC4xIGh0dHAtc3R5bGUgSEVBRCBvdXRwdXQgZm9yIGZ0cAorIDE0LjIgY29tYmluZSBlcnJvciBjb2RlcworIDE0LjMgZXh0ZW5kIENVUkxPUFRfU09DS09QVEZVTkNUSU9OIHByb3RvdHlwZQorCisgMTUuIE5leHQgbWFqb3IgcmVsZWFzZQorIDE1LjEgY2xlYW51cCByZXR1cm4gY29kZXMKKyAxNS4yIHJlbW92ZSBvYnNvbGV0ZSBkZWZpbmVzCisgMTUuMyBzaXplX3QKKyAxNS40IHJlbW92ZSBzZXZlcmFsIGZ1bmN0aW9ucworIDE1LjUgcmVtb3ZlIENVUkxPUFRfRkFJTE9ORVJST1IKKyAxNS42IHJlbW92ZSBDVVJMT1BUX0ROU19VU0VfR0xPQkFMX0NBQ0hFCisgMTUuNyByZW1vdmUgcHJvZ3Jlc3MgbWV0ZXIgZnJvbSBsaWJjdXJsCisgMTUuOCByZW1vdmUgJ2N1cmxfaHR0cHBvc3QnIGZyb20gcHVibGljCisgMTUuOSBoYXZlIGZvcm0gZnVuY3Rpb25zIHVzZSBDVVJMIGhhbmRsZSBhcmd1bWVudAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gbGliY3VybAorCisxLjIgTW9yZSBkYXRhIHNoYXJpbmcKKworIGN1cmxfc2hhcmVfKiBmdW5jdGlvbnMgYWxyZWFkeSBleGlzdCBhbmQgd29yaywgYW5kIHRoZXkgY2FuIGJlIGV4dGVuZGVkIHRvCisgc2hhcmUgbW9yZS4gRm9yIGV4YW1wbGUsIGVuYWJsZSBzaGFyaW5nIG9mIHRoZSBhcmVzIGNoYW5uZWwgYW5kIHRoZQorIGNvbm5lY3Rpb24gY2FjaGUuCisKKzEuMyBzdHJ1Y3QgbGlmcmVxCisKKyBVc2UgJ3N0cnVjdCBsaWZyZXEnIGFuZCBTSU9DR0xJRkFERFIgaW5zdGVhZCBvZiAnc3RydWN0IGlmcmVxJyBhbmQKKyBTSU9DR0lGQUREUiBvbiBuZXdlciBTb2xhcmlzIHZlcnNpb25zIGFzIHRoZXkgY2xhaW0gdGhlIGxhdHRlciBpcyBvYnNvbGV0ZS4KKyBUbyBzdXBwb3J0IGlwdjYgaW50ZXJmYWNlIGFkZHJlc3NlcyBmb3IgbmV0d29yayBpbnRlcmZhY2VzIHByb3Blcmx5LgorCisxLjQgc2lnbmFsLWJhc2VkIHJlc29sdmVyIHRpbWVvdXRzCisKKyBsaWJjdXJsIGJ1aWx0IHdpdGhvdXQgYW4gYXN5bmNocm9ub3VzIHJlc29sdmVyIGxpYnJhcnkgdXNlcyBhbGFybSgpIHRvIHRpbWUKKyBvdXQgRE5TIGxvb2t1cHMuIFdoZW4gYSB0aW1lb3V0IG9jY3VycywgdGhpcyBjYXVzZXMgbGliY3VybCB0byBqdW1wIGZyb20gdGhlCisgc2lnbmFsIGhhbmRsZXIgYmFjayBpbnRvIHRoZSBsaWJyYXJ5IHdpdGggYSBzaWdzZXRqbXAsIHdoaWNoIGVmZmVjdGl2ZWx5CisgY2F1c2VzIGxpYmN1cmwgdG8gY29udGludWUgcnVubmluZyB3aXRoaW4gdGhlIHNpZ25hbCBoYW5kbGVyLiBUaGlzIGlzCisgbm9uLXBvcnRhYmxlIGFuZCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBvbiBzb21lIHBsYXRmb3Jtcy4gQSBkaXNjdXNzaW9uIG9uIHRoZQorIHByb2JsZW0gaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwOC0wOS8wMTk3Lmh0bWwKKworIEFsc28sIGFsYXJtKCkgcHJvdmlkZXMgdGltZW91dCByZXNvbHV0aW9uIG9ubHkgdG8gdGhlIG5lYXJlc3Qgc2Vjb25kLiBhbGFybQorIG91Z2h0IHRvIGJlIHJlcGxhY2VkIGJ5IHNldGl0aW1lciBvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdC4KKworMS41IGdldCByaWQgb2YgUEFUSF9NQVgKKworIEhhdmluZyBjb2RlIHVzZSBhbmQgcmVseSBvbiBQQVRIX01BWCBpcyBub3QgbmljZToKKyBodHRwOi8vaW5zYW5lY29kaW5nLmJsb2dzcG90LmNvbS8yMDA3LzExL3BhdGhtYXgtc2ltcGx5LWlzbnQuaHRtbAorCisgQ3VycmVudGx5IHRoZSBTU0ggYmFzZWQgY29kZSB1c2VzIGl0IGEgYml0LCBidXQgdG8gcmVtb3ZlIFBBVEhfTUFYIGZyb20gdGhlcmUKKyB3ZSBuZWVkIGxpYnNzaDIgdG8gcHJvcGVybHkgdGVsbCB1cyB3aGVuIHdlIHBhc3MgaW4gYSB0b28gc21hbGwgYnVmZmVyIGFuZAorIGl0cyBjdXJyZW50IEFQSSAoYXMgb2YgbGlic3NoMiAxLjIuNykgZG9lc24ndC4KKworMS42IHByb2dyZXNzIGNhbGxiYWNrIHdpdGhvdXQgZG91YmxlcworCisgVGhlIHByb2dyZXNzIGNhbGxiYWNrIHdhcyBpbnRyb2R1Y2VkIHdheSBiYWNrIGluIHRoZSBkYXlzIGFuZCB0aGUgY2hvaWNlIHRvCisgdXNlIGRvdWJsZXMgaW4gdGhlIGFyZ3VtZW50cyB3YXMgcG9zc2libHkgZ29vZCBhdCB0aGUgdGltZS4gVG9kYXkgdGhlIGRvdWJsZXMKKyBvbmx5IGNvbmZ1c2UgdXNlcnMgYW5kIG1ha2UgdGhlIGFtb3VudHMgbGVzcyBwcmVjaXNlLiBXZSBzaG91bGQgaW50cm9kdWNlCisgYW5vdGhlciBwcm9ncmVzcyBjYWxsYmFjayBvcHRpb24gdGhhdCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgb2xkIG9uZSBhbmQKKyBoYXZlIGJvdGggY28tZXhpc3QgZm9yIGEgZm9yc2VlYWJsZSB0aW1lIHVudGlsIHdlIGNhbiByZW1vdmUgdGhlIGRvdWJsZS11c2luZworIG9uZS4KKworMS43IEhhcHB5IEV5ZWJhbGwgZHVhbCBzdGFjayBjb25uZWN0CisKKyBJbiBvcmRlciB0byBtYWtlIGFsdGVybmF0aXZlIHRlY2hub2xvZ2llcyBub3Qgc3VmZmVyIHdoZW4gdHJhbnNpdGlvbmluZywgbGlrZQorIHdoZW4gaW50cm9kdWNpbmcgSVB2NiBhcyBhbiBhbHRlcm5hdGl2ZSB0byBJUHY0IGFuZCB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZQorIG9wdGlvbiBleGlzdGluZyBzaW11bHRhbmVvdXNseSB0aGVyZSBhcmUgcmVhc29ucyB0byByZWNvbnNpZGVyIGludGVybmFsCisgY2hvaWNlcy4KKworIFRvIG1ha2UgbGliY3VybCBkbyBibGF6aW5nIGZhc3QgSVB2NiBpbiBhIGR1YWwtc3RhY2sgY29uZmlndXJhdGlvbiwgdGhpcyBuZWVkcworIHRvIGJlIGFkZHJlc3NlZDoKKworICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtdjZvcHMtaGFwcHktZXllYmFsbHMtMDcKKworCisyLiBsaWJjdXJsIC0gbXVsdGkgaW50ZXJmYWNlCisKKzIuMSBNb3JlIG5vbi1ibG9ja2luZworCisgTWFrZSBzdXJlIHdlIGRvbid0IGV2ZXIgbG9vcCBiZWNhdXNlIG9mIG5vbi1ibG9ja2luZyBzb2NrZXRzIHJldHVybmluZworIEVXT1VMREJMT0NLIG9yIHNpbWlsYXIuIEJsb2NraW5nIGNhc2VzIGluY2x1ZGU6CisKKyAtIE5hbWUgcmVzb2x2ZXMgb24gbm9uLXdpbmRvd3MgdW5sZXNzIGMtYXJlcyBpcyB1c2VkCisgLSBOU1MgU1NMIGNvbm5lY3Rpb25zCisgLSBIVFRQIHByb3h5IENPTk5FQ1Qgb3BlcmF0aW9ucworIC0gU09DS1MgcHJveHkgaGFuZHNoYWtlcworIC0gZmlsZTovLyB0cmFuc2ZlcnMKKyAtIFRFTE5FVCB0cmFuc2ZlcnMKKyAtIFRoZSAiRE9ORSIgb3BlcmF0aW9uIChwb3N0IHRyYW5zZmVyIHByb3RvY29sLXNwZWNpZmljIGFjdGlvbnMpIGZvciB0aGUKKyAgIHByb3RvY29scyBTRlRQLCBTTVRQLCBGVFAuIEZpeGluZyBDdXJsX2RvbmUoKSBmb3IgdGhpcyBpcyBhIHdvcnRoeSB0YXNrLgorCisyLjIgUmVtb3ZlIGVhc3kgaW50ZXJmYWNlIGludGVybmFsbHkKKworIE1ha2UgY3VybF9lYXN5X3BlcmZvcm0oKSBhIHdyYXBwZXItZnVuY3Rpb24gdGhhdCBzaW1wbHkgY3JlYXRlcyBhIG11bHRpCisgaGFuZGxlLCBhZGRzIHRoZSBlYXN5IGhhbmRsZSB0byBpdCwgcnVucyBjdXJsX211bHRpX3BlcmZvcm0oKSB1bnRpbCB0aGUKKyB0cmFuc2ZlciBpcyBkb25lLCB0aGVuIGRldGFjaCB0aGUgZWFzeSBoYW5kbGUsIGRlc3Ryb3kgdGhlIG11bHRpIGhhbmRsZSBhbmQKKyByZXR1cm4gdGhlIGVhc3kgaGFuZGxlJ3MgcmV0dXJuIGNvZGUuIFRoaXMgd2lsbCB0aHVzIG1ha2UgZXZlcnl0aGluZworIGludGVybmFsbHkgdXNlIGFuZCBhc3N1bWUgdGhlIG11bHRpIGludGVyZmFjZS4gVGhlIHNlbGVjdCgpLWxvb3Agc2hvdWxkIHVzZQorIGN1cmxfbXVsdGlfc29ja2V0KCkuCisKKzIuNCBGaXggSFRUUCBQaXBlbGluaW5nIGZvciBQVVQKKworIEhUVFAgUGlwZWxpbmluZyBjYW4gYmUgYSB3YXkgdG8gZ3JlYXRseSBlbmhhbmNlIHBlcmZvcm1hbmNlIGZvciBtdWx0aXBsZQorIHNlcmlhbCByZXF1ZXN0cyBhbmQgY3VycmVudGx5IGxpYmN1cmwgb25seSBzdXBwb3J0cyB0aGF0IGZvciBIRUFEIGFuZCBHRVQKKyByZXF1ZXN0cyBidXQgaXQgc2hvdWxkIGFsc28gYmUgcG9zc2libGUgZm9yIFBVVC4KKworMy4gRG9jdW1lbnRhdGlvbgorCiszLjEgIE1vcmUgYW5kIGJldHRlcgorCisgRXhhY3RseQorCis0LiBGVFAKKworNC4xIEhPU1QKKworIEhPU1QgaXMgYSBzdWdnZXN0ZWQgY29tbWFuZCBpbiB0aGUgd29ya3MgZm9yIGEgY2xpZW50IHRvIHRlbGwgd2hpY2ggaG9zdCBuYW1lCisgdG8gdXNlLCB0byBvZmZlciBGVFAgc2VydmVycyBuYW1lZC1iYXNlZCB2aXJ0dWFsIGhvc3Rpbmc6CisKKyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1oZXRobW9uLW1jbXVycmF5LWZ0cC1ob3N0cy0xMQorCis0LjIgQWx0ZXIgcGFzc2l2ZS9hY3RpdmUgb24gZmFpbHVyZSBhbmQgcmV0cnkKKworIFdoZW4gdHJ5aW5nIHRvIGNvbm5lY3QgcGFzc2l2ZWx5IHRvIGEgc2VydmVyIHdoaWNoIG9ubHkgc3VwcG9ydHMgYWN0aXZlCisgY29ubmVjdGlvbnMsIGxpYmN1cmwgcmV0dXJucyBDVVJMRV9GVFBfV0VJUkRfUEFTVl9SRVBMWSBhbmQgY2xvc2VzIHRoZQorIGNvbm5lY3Rpb24uIFRoZXJlIGNvdWxkIGJlIGEgd2F5IHRvIGZhbGxiYWNrIHRvIGFuIGFjdGl2ZSBjb25uZWN0aW9uIChhbmQKKyB2aWNlIHZlcnNhKS4gaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvZmVhdHVyZS5jZ2k/aWQ9MTc1NDc5MworCis0LjMgRWFybGllciBiYWQgbGV0dGVyIGRldGVjdGlvbgorCisgTWFrZSB0aGUgZGV0ZWN0aW9uIG9mIChiYWQpICUwZCBhbmQgJTBhIGNvZGVzIGluIEZUUCB1cmwgcGFydHMgZWFybGllciBpbiB0aGUKKyBwcm9jZXNzIHRvIGF2b2lkIGRvaW5nIGEgcmVzb2x2ZSBhbmQgY29ubmVjdCBpbiB2YWluLgorCis0LjQgUkVTVCBmb3IgbGFyZ2UgZmlsZXMKKworIFJFU1QgZml4IGZvciBzZXJ2ZXJzIG5vdCBiZWhhdmluZyB3ZWxsIG9uID4yR0IgcmVxdWVzdHMuIFRoaXMgc2hvdWxkIGZhaWwgaWYKKyB0aGUgc2VydmVyIGRvZXNuJ3Qgc2V0IHRoZSBwb2ludGVyIHRvIHRoZSByZXF1ZXN0ZWQgaW5kZXguIFRoZSB0cmlja3kKKyAoaW1wb3NzaWJsZT8pIHBhcnQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGUgc2VydmVyIGRpZCB0aGUgcmlnaHQgdGhpbmcgb3Igbm90LgorCis0LjUgRlRQIHByb3h5IHN1cHBvcnQKKworIFN1cHBvcnQgdGhlIG1vc3QgY29tbW9uIEZUUCBwcm94aWVzLCBQaGlsaXAgTmV3dG9uIHByb3ZpZGVkIGEgbGlzdCBhbGxlZ2VkbHkKKyBmcm9tIG5jZnRwLiBUaGlzIGlzIG5vdCBhIHN1YmplY3Qgd2l0aG91dCBkZWJhdGUsIGFuZCBpcyBwcm9iYWJseSBub3QgcmVhbGx5Cisgc3VpdGFibGUgZm9yIGxpYmN1cmwuICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvYXJjaGl2ZS0yMDAzLTA0LzAxMjYuaHRtbAorCis0LjYgQVNDSUkgc3VwcG9ydAorCisgRlRQIEFTQ0lJIHRyYW5zZmVycyBkbyBub3QgZm9sbG93IFJGQzk1OS4gVGhleSBkb24ndCBjb252ZXJ0IHRoZSBkYXRhCisgYWNjb3JkaW5nbHkuCisKKzUuIEhUVFAKKworNS4xIEJldHRlciBwZXJzaXN0ZW5jeSBmb3IgSFRUUCAxLjAKKworICJCZXR0ZXIiIHN1cHBvcnQgZm9yIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgb3ZlciBIVFRQIDEuMAorIGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL2ZlYXR1cmUuY2dpP2lkPTEwODkwMDEKKworNS4yIHN1cHBvcnQgRkYzIHNxbGl0ZSBjb29raWUgZmlsZXMKKworIEZpcmVmb3ggMyBpcyBjaGFuZ2luZyBmcm9tIGl0cyBmb3JtZXIgZm9ybWF0IHRvIGEgYSBzcWxpdGUgZGF0YWJhc2UgaW5zdGVhZC4KKyBXZSBzaG91bGQgY29uc2lkZXIgaG93IChsaWIpY3VybCBjYW4vc2hvdWxkIHN1cHBvcnQgdGhpcy4KKyBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy9mZWF0dXJlLmNnaT9pZD0xODcxMzg4CisKKzUuMyBSZWFycmFuZ2UgcmVxdWVzdCBoZWFkZXIgb3JkZXIKKworIFNlcnZlciBpbXBsZW1lbnRvcnMgb2Z0ZW4gbWFrZSBhbiBlZmZvcnQgdG8gZGV0ZWN0IGJyb3dzZXIgYW5kIHRvIHJlamVjdAorIGNsaWVudHMgaXQgY2FuIGRldGVjdCB0byBub3QgbWF0Y2guIE9uZSBvZiB0aGUgbGFzdCBkZXRhaWxzIHdlIGNhbm5vdCB5ZXQKKyBjb250cm9sIGluIGxpYmN1cmwncyBIVFRQIHJlcXVlc3RzLCB3aGljaCBhbHNvIGNhbiBiZSBleHBsb2l0ZWQgdG8gZGV0ZWN0CisgdGhhdCBsaWJjdXJsIGlzIGluIGZhY3QgdXNlZCBldmVuIHdoZW4gaXQgdHJpZXMgdG8gaW1wZXJzb25hdGUgYSBicm93c2VyLCBpcworIHRoZSBvcmRlciBvZiB0aGUgcmVxdWVzdCBoZWFkZXJzLiBJIHByb3Bvc2UgdGhhdCB3ZSBpbnRyb2R1Y2UgYSBuZXcgb3B0aW9uIGluCisgd2hpY2ggeW91IGdpdmUgaGVhZGVycyBhIHZhbHVlLCBhbmQgdGhlbiB3aGVuIHRoZSBIVFRQIHJlcXVlc3QgaXMgYnVpbHQgaXQKKyBzb3J0cyB0aGUgaGVhZGVycyBiYXNlZCBvbiB0aGF0IG51bWJlci4gV2UgY291bGQgdGhlbiBoYXZlIGludGVybmFsbHkgY3JlYXRlZAorIGhlYWRlcnMgdXNlIGEgZGVmYXVsdCB2YWx1ZSBzbyBvbmx5IGhlYWRlcnMgdGhhdCBuZWVkIHRvIGJlIG1vdmVkIGhhdmUgdG8gYmUKKyBzcGVjaWZpZWQuCisKKworNi4gVEVMTkVUCisKKzYuMSBkaXRjaCBzdGRpbgorCitSZWFkaW5nIGlucHV0ICh0byBzZW5kIHRvIHRoZSByZW1vdGUgc2VydmVyKSBvbiBzdGRpbiBpcyBhIGNyYXBweSBzb2x1dGlvbiBmb3IKK2xpYnJhcnkgcHVycG9zZXMuIFdlIG5lZWQgdG8gaW52ZW50IGEgZ29vZCB3YXkgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBiZSBhYmxlCit0byBwcm92aWRlIHRoZSBkYXRhIHRvIHNlbmQuCisKKzYuMiBkaXRjaCB0ZWxuZXQtc3BlY2lmaWMgc2VsZWN0CisKKyBNb3ZlIHRoZSB0ZWxuZXQgc3VwcG9ydCdzIG5ldHdvcmsgc2VsZWN0KCkgbG9vcCBnbyBhd2F5IGFuZCBtZXJnZSB0aGUgY29kZQorIGludG8gdGhlIG1haW4gdHJhbnNmZXIgbG9vcC4gVW50aWwgdGhpcyBpcyBkb25lLCB0aGUgbXVsdGkgaW50ZXJmYWNlIHdvbid0Cisgd29yayBmb3IgdGVsbmV0LgorCis2LjMgZmVhdHVyZSBuZWdvdGlhdGlvbiBkZWJ1ZyBkYXRhCisKKyAgQWRkIHRlbG5ldCBmZWF0dXJlIG5lZ290aWF0aW9uIGRhdGEgdG8gdGhlIGRlYnVnIGNhbGxiYWNrIGFzIGhlYWRlciBkYXRhLgorCis2LjQgc2VuZCBkYXRhIGluIGNodW5rcworCisgIEN1cnJlbnRseSwgdGVsbmV0IHNlbmRzIGRhdGEgb25lIGJ5dGUgYXQgYSB0aW1lLiAgVGhpcyBpcyBmaW5lIGZvciBpbnRlcmFjdGl2ZQorICB1c2UsIGJ1dCBpbmVmZmljaWVudCBmb3IgYW55IG90aGVyLiAgU2VudCBkYXRhIHNob3VsZCBiZSBzZW50IGluIGxhcmdlcgorICBjaHVua3MuCisKKzcuIFNTTAorCis3LjEgRGlzYWJsZSBzcGVjaWZpYyB2ZXJzaW9ucworCisgUHJvdmlkZSBhbiBvcHRpb24gdGhhdCBhbGxvd3MgZm9yIGRpc2FibGluZyBzcGVjaWZpYyBTU0wgdmVyc2lvbnMsIHN1Y2ggYXMKKyBTU0x2MiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy9mZWF0dXJlLmNnaT9pZD0xNzY3Mjc2CisKKzcuMiBQcm92aWRlIG11dGV4IGxvY2tpbmcgQVBJCisKKyBQcm92aWRlIGEgbGliY3VybCBBUEkgZm9yIHNldHRpbmcgbXV0ZXggY2FsbGJhY2tzIGluIHRoZSB1bmRlcmx5aW5nIFNTTAorIGxpYnJhcnksIHNvIHRoYXQgdGhlIHNhbWUgYXBwbGljYXRpb24gY29kZSBjYW4gdXNlIG11dGV4LWxvY2tpbmcKKyBpbmRlcGVuZGVudGx5IG9mIE9wZW5TU0wgb3IgR251dFRMUyBiZWluZyB1c2VkLgorCis3LjMgRXZhbHVhdGUgU1NMIHBhdGNoZXMKKworIEV2YWx1YXRlL2FwcGx5IEdlcnRqYW4gdmFuIFdpbmdlcmRlJ3MgU1NMIHBhdGNoZXM6CisgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA0LTAzLzAwODcuaHRtbAorCis3LjQgQ2FjaGUgT3BlblNTTCBjb250ZXh0cworCisgIkxvb2sgYXQgU1NMIGNhZmlsZSAtIHF1aWNrIHRyYWNlcyBsb29rIHRvIG1lIGxpa2UgdGhlc2UgYXJlIGRvbmUgb24gZXZlcnkKKyByZXF1ZXN0IGFzIHdlbGwsIHdoZW4gdGhleSBzaG91bGQgb25seSBiZSBuZWNlc3Nhcnkgb25jZSBwZXIgc3NsIGNvbnRleHQgKG9yCisgb25jZSBwZXIgaGFuZGxlKSIuIFRoZSBtYWpvciBpbXByb3ZlbWVudCB3ZSBjYW4gcmF0aGVyIGVhc2lseSBkbyBpcyB0byBtYWtlCisgc3VyZSB3ZSBkb24ndCBjcmVhdGUgYW5kIGtpbGwgYSBuZXcgU1NMICJjb250ZXh0IiBmb3IgZXZlcnkgcmVxdWVzdCwgYnV0CisgaW5zdGVhZCBtYWtlIG9uZSBmb3IgZXZlcnkgY29ubmVjdGlvbiBhbmQgcmUtdXNlIHRoYXQgU1NMIGNvbnRleHQgaW4gdGhlIHNhbWUKKyBzdHlsZSBjb25uZWN0aW9ucyBhcmUgcmUtdXNlZC4gSXQgd2lsbCBtYWtlIHVzIHVzZSBzbGlnaHRseSBtb3JlIG1lbW9yeSBidXQKKyBpdCB3aWxsIGxpYmN1cmwgZG8gbGVzcyBjcmVhdGlvbnMgYW5kIGRlbGV0aW9ucyBvZiBTU0wgY29udGV4dHMuCisKKzcuNSBFeHBvcnQgc2Vzc2lvbiBpZHMKKworIEFkZCBhbiBpbnRlcmZhY2UgdG8gbGliY3VybCB0aGF0IGVuYWJsZXMgInNlc3Npb24gSURzIiB0byBnZXQKKyBleHBvcnRlZC9pbXBvcnRlZC4gQ3JpcyBCYWlsaWZmIHNhaWQ6ICJPcGVuU1NMIGhhcyBmdW5jdGlvbnMgd2hpY2ggY2FuCisgc2VyaWFsaXNlIHRoZSBjdXJyZW50IFNTTCBzdGF0ZSB0byBhIGJ1ZmZlciBvZiB5b3VyIGNob2ljZSwgYW5kIHJlY292ZXIvcmVzZXQKKyB0aGUgc3RhdGUgZnJvbSBzdWNoIGEgYnVmZmVyIGF0IGEgbGF0ZXIgZGF0ZSAtIHRoaXMgaXMgdXNlZCBieSBtb2Rfc3NsIGZvcgorIGFwYWNoZSB0byBpbXBsZW1lbnQgYW5kIFNTTCBzZXNzaW9uIElEIGNhY2hlIi4KKworNy42IFByb3ZpZGUgY2FsbGJhY2sgZm9yIGNlcnQgdmVyaWZpY2F0aW9uCisKKyBPcGVuU1NMIHN1cHBvcnRzIGEgY2FsbGJhY2sgZm9yIGN1c3RvbWlzZWQgdmVyaWZpY2F0aW9uIG9mIHRoZSBwZWVyCisgY2VydGlmaWNhdGUsIGJ1dCB0aGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBleHBvc2VkIGluIHRoZSBsaWJjdXJsIEFQSXMuIENvdWxkCisgaXQgYmU/IFRoZXJlJ3Mgc28gbXVjaCB0aGF0IGNvdWxkIGJlIGRvbmUgaWYgaXQgd2VyZSEKKworNy43IFN1cHBvcnQgb3RoZXIgU1NMIGxpYnJhcmllcworCisgTWFrZSBjdXJsJ3MgU1NMIGxheWVyIGNhcGFibGUgb2YgdXNpbmcgb3RoZXIgZnJlZSBTU0wgbGlicmFyaWVzLiAgU3VjaCBhcworIE1hdHJpeFNTTCAoaHR0cDovL3d3dy5tYXRyaXhzc2wub3JnLykuCisKKzcuOSBpbXByb3ZlIGNvbmZpZ3VyZSAtLXdpdGgtc3NsCisKKyBtYWtlIHRoZSBjb25maWd1cmUgLS13aXRoLXNzbCBvcHRpb24gZmlyc3QgY2hlY2sgZm9yIE9wZW5TU0wsIHRoZW4gR251VExTLAorIHRoZW4gTlNTLi4uCisKKzguIEdudVRMUworCis4LjEgU1NMIGVuZ2luZSBzdHVmZgorCisgSXMgdGhpcyBldmVuIHBvc3NpYmxlPworCis4LjMgY2hlY2sgY29ubmVjdGlvbgorCisgQWRkIGEgd2F5IHRvIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIHNlZW1zIHRvIGJlIGFsaXZlLCB0byBjb3JyZXNwb25kIHRvIHRoZQorIFNTTF9wZWFrKCkgd2F5IHdlIHVzZSB3aXRoIE9wZW5TU0wuCisKKzguNCBub24tZ2NyeXB0CisKKyBsaWJjdXJsIGFzc3VtZXMgdGhhdCB0aGVyZSBhcmUgZ2NyeXB0IGZ1bmN0aW9ucyBhdmFpbGFibGUgd2hlbgorIEdudVRMUyBpcy4KKworIEdudVRMUyBjYW4gYmUgYnVpbHQgdG8gdXNlIGxpYm5ldHRsZSBpbnN0ZWFkIGFzIGNyeXB0byBsaWJyYXJ5LAorIHdoaWNoIGJyZWFrcyB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgYXNzdW1wdGlvbgorCisgVGhlIGNvcnJlY3QgZml4IHdvdWxkIGJlIHRvIGRldGVjdCB3aGljaCBjcnlwdG8gbGF5ZXIgdGhhdCBpcyBpbiB1c2UgYW5kCisgYWRhcHQgb3VyIGNvZGUgdG8gdXNlIHRoYXQgaW5zdGVhZCBvZiBibGluZGx5IGFzc3VtaW5nIGdjcnlwdC4KKworOS4gT3RoZXIgcHJvdG9jb2xzCisKKzEwLiBOZXcgcHJvdG9jb2xzCisKKzEwLjEgUlNZTkMKKworIFRoZXJlJ3Mgbm8gUkZDIGZvciBwcm90b2NvbCBub3IgVVJJL1VSTCBmb3JtYXQuICBBbiBpbXBsZW1lbnRhdGlvbiBzaG91bGQKKyBtb3N0IHByb2JhYmx5IHVzZSBhbiBleGlzdGluZyByc3luYyBsaWJyYXJ5LCBzdWNoIGFzIGxpYnJzeW5jLgorCisxMS4gQ2xpZW50CisKKzExLjEgc3luYworCisgImN1cmwgLS1zeW5jIGh0dHA6Ly9leGFtcGxlLmNvbS9mZWVkWzEtMTAwXS5yc3MiIG9yCisgImN1cmwgLS1zeW5jIGh0dHA6Ly9leGFtcGxlLm5ldC97aW5kZXgsY2FsZW5kYXIsaGlzdG9yeX0uaHRtbCIKKworIERvd25sb2FkcyBhIHJhbmdlIG9yIHNldCBvZiBVUkxzIHVzaW5nIHRoZSByZW1vdGUgbmFtZSwgYnV0IG9ubHkgaWYgdGhlCisgcmVtb3RlIGZpbGUgaXMgbmV3ZXIgdGhhbiB0aGUgbG9jYWwgZmlsZS4gQSBMYXN0LU1vZGlmaWVkIEhUVFAgZGF0ZSBoZWFkZXIKKyBzaG91bGQgYWxzbyBiZSB1c2VkIHRvIHNldCB0aGUgbW9kIGRhdGUgb24gdGhlIGRvd25sb2FkZWQgZmlsZS4KKworMTEuMiBnbG9iIHBvc3RzCisKKyBHbG9iYmluZyBzdXBwb3J0IGZvciAtZCBhbmQgLUYsIGFzIGluICdjdXJsIC1kICJuYW1lPWZvb1swLTldIiBVUkwnLgorIFRoaXMgaXMgZWFzaWx5IHNjcmlwdGVkIHRob3VnaC4KKworMTEuMyBwcmV2ZW50IGZpbGUgb3ZlcndyaXRpbmcKKworIEFkZCBhbiBvcHRpb24gdGhhdCBwcmV2ZW50cyBjVVJMIGZyb20gb3ZlcndyaXRpbmcgZXhpc3RpbmcgbG9jYWwgZmlsZXMuIFdoZW4KKyB1c2VkLCBhbmQgdGhlcmUgYWxyZWFkeSBpcyBhbiBleGlzdGluZyBmaWxlIHdpdGggdGhlIHRhcmdldCBmaWxlIG5hbWUKKyAoZWl0aGVyIC1PIG9yIC1vKSwgYSBudW1iZXIgc2hvdWxkIGJlIGFwcGVuZGVkIChhbmQgaW5jcmVhc2VkIGlmIGFscmVhZHkKKyBleGlzdGluZykuIFNvIHRoYXQgaW5kZXguaHRtbCBiZWNvbWVzIGZpcnN0IGluZGV4Lmh0bWwuMSBhbmQgdGhlbgorIGluZGV4Lmh0bWwuMiBldGMuCisKKzExLjQgc2ltdWx0YW5lb3VzIHBhcmFsbGVsIHRyYW5zZmVycworCisgVGhlIGNsaWVudCBjb3VsZCBiZSB0b2xkIHRvIHVzZSBtYXhpbXVtIE4gc2ltdWx0YW5lb3VzIHBhcmFsbGVsIHRyYW5zZmVycyBhbmQKKyB0aGVuIGp1c3QgbWFrZSBzdXJlIHRoYXQgaGFwcGVucy4gSXQgc2hvdWxkIG9mIGNvdXJzZSBub3QgbWFrZSBtb3JlIHRoYW4gb25lCisgY29ubmVjdGlvbiB0byB0aGUgc2FtZSByZW1vdGUgaG9zdC4gVGhpcyB3b3VsZCByZXF1aXJlIHRoZSBjbGllbnQgdG8gdXNlIHRoZQorIG11bHRpIGludGVyZmFjZS4gaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvZmVhdHVyZS5jZ2k/aWQ9MTU1ODU5NQorCisxMS41IHByb3ZpZGUgZm9ybXBvc3QgaGVhZGVycworCisgRXh0ZW5kaW5nIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIG11bHRpcGFydCBmb3JtcG9zdGluZy4gSG93IGFib3V0IGxlYXZpbmcKKyB0aGUgJzt0eXBlPWZvbycgc3ludGF4IGFzIGl0IGlzIGFuZCBhZGRpbmcgYW4gZXh0cmEgdGFnIChoZWFkZXJzKSB3aGljaAorIHdvcmtzIGxpa2UgdGhpczogY3VybCAtRiAiY29vbGZpbGVzPUBmaWwxLnR4dDtoZWFkZXJzPUBmaWwxLmhkciIgd2hlcmUKKyBmaWwxLmhkciBjb250YWlucyBleHRyYSBoZWFkZXJzIGxpa2UKKworICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUtPSTgtUiIKKyAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorICAgWC1Vc2VyLUNvbW1lbnQ6IFBsZWFzZSBkb24ndCB1c2UgYnJvd3NlciBzcGVjaWZpYyBIVE1MIGNvZGUKKworIHdoaWNoIHNob3VsZCBvdmVyd3JpdGUgdGhlIHByb2dyYW0gcmVhc29uYWJsZSBkZWZhdWx0cyAocGxhaW4vdGV4dCwKKyA4Yml0Li4uKQorCisxMS42IHVybC1zcGVjaWZpYyBvcHRpb25zCisKKyBQcm92aWRlIGEgd2F5IHRvIG1ha2Ugb3B0aW9ucyBib3VuZCB0byBhIHNwZWNpZmljIFVSTCBhbW9uZyBzZXZlcmFsIG9uIHRoZQorIGNvbW1hbmQgbGluZS4gUG9zc2libHkgYnkgbGV0dGluZyAnOicgc2VwYXJhdGUgb3B0aW9ucyBiZXR3ZWVuIFVSTHMsCisgc2ltaWxhciB0byB0aGlzOgorCisgICAgY3VybCAtLWRhdGEgZm9vIC0tdXJsIHVybC5jb20gOiBcCisgICAgICAgIC0tdXJsIHVybDIuY29tIDogXAorICAgICAgICAtLXVybCB1cmwzLmNvbSAtLWRhdGEgZm9vMworCisgKE1vcmUgZGV0YWlsczogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2FyY2hpdmUtMjAwNC0wNy8wMTMzLmh0bWwpCisKKyBUaGUgZXhhbXBsZSB3b3VsZCBkbyBhIFBPU1QtR0VULVBPU1QgY29tYmluYXRpb24gb24gYSBzaW5nbGUgY29tbWFuZCBsaW5lLgorCisxMS43IG1ldGFsaW5rIHN1cHBvcnQKKworIEFkZCBtZXRhbGluayBzdXBwb3J0IHRvIGN1cmwgKGh0dHA6Ly93d3cubWV0YWxpbmtlci5vcmcvKS4gVGhpcyBpcyBtb3N0IHVzZWZ1bAorIHdpdGggc2ltdWx0YW5lb3VzIHBhcmFsbGVsIHRyYW5zZmVycyAoMTEuNikgYnV0IG5vdCBuZWNlc3NhcnkuCisKKzExLjggd2FybmluZyB3aGVuIHNldHRpbmcgYW4gb3B0aW9uCisKKyAgRGlzcGxheSBhIHdhcm5pbmcgd2hlbiBsaWJjdXJsIHJldHVybnMgYW4gZXJyb3Igd2hlbiBzZXR0aW5nIGFuIG9wdGlvbi4KKyAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHRlbGwgd2hlbiBzdXBwb3J0IGZvciBhIHBhcnRpY3VsYXIgZmVhdHVyZSBoYXNuJ3QgYmVlbgorICBjb21waWxlZCBpbnRvIHRoZSBsaWJyYXJ5LgorCisxMS45IElQdjYgYWRkcmVzc2VzIHdpdGggZ2xvYmJpbmcKKworICBDdXJyZW50bHkgdGhlIGNvbW1hbmQgbGluZSBjbGllbnQgbmVlZHMgdG8gZ2V0IHVybCBnbG9iYmluZyBkaXNhYmxlZCAod2l0aAorICAtZykgZm9yIGl0IHRvIHN1cHBvcnQgSVB2NiBudW1lcmljYWwgYWRkcmVzc2VzLiBUaGlzIGlzIGEgcmF0aGVyIHNpbGx5IGZsYXcKKyAgdGhhdCBzaG91bGQgYmUgY29ycmVjdGVkLiBJdCBwcm9iYWJseSBpbnZvbHZlcyBhIHNtYXJ0ZXIgZGV0ZWN0aW9uIG9mIHRoZQorICAnWycgYW5kICddJyBsZXR0ZXJzLgorCisxMi4gQnVpbGQKKworMTIuMSByb2ZmaXQKKworIENvbnNpZGVyIGV4dGVuZGluZyAncm9mZml0JyB0byBwcm9kdWNlIGRlY2VudCBBU0NJSSBvdXRwdXQsIGFuZCB1c2UgdGhhdAorIGluc3RlYWQgb2YgKGcpbnJvZmYgd2hlbiBidWlsZGluZyBzcmMvaHVnZWhlbHAuYworCisxMy4gVGVzdCBzdWl0ZQorCisxMy4xIFNTTCB0dW5uZWwKKworIE1ha2Ugb3VyIG93biB2ZXJzaW9uIG9mIHN0dW5uZWwgZm9yIHNpbXBsZSBwb3J0IGZvcndhcmRpbmcgdG8gZW5hYmxlIEhUVFBTCisgYW5kIEZUUC1TU0wgdGVzdHMgd2l0aG91dCB0aGUgc3R1bm5lbCBkZXBlbmRlbmN5LCBhbmQgaXQgY291bGQgYWxsb3cgdXMgdG8KKyBwcm92aWRlIHRlc3QgdG9vbHMgYnVpbHQgd2l0aCBlaXRoZXIgT3BlblNTTCBvciBHbnVUTFMKKworMTMuMiBuaWNlciBsYWNraW5nIHBlcmwgbWVzc2FnZQorCisgSWYgcGVybCB3YXNuJ3QgZm91bmQgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQsIGRvbid0IGF0dGVtcHQgdG8gcnVuIHRoZSB0ZXN0cworIGJ1dCBleHBsYWluIHNvbWV0aGluZyBuaWNlIHdoeSBpdCBkb2Vzbid0LgorCisxMy4zIG1vcmUgcHJvdG9jb2xzIHN1cHBvcnRlZAorCisgRXh0ZW5kIHRoZSB0ZXN0IHN1aXRlIHRvIGluY2x1ZGUgbW9yZSBwcm90b2NvbHMuIFRoZSB0ZWxuZXQgY291bGQganVzdCBkbyBmdHAKKyBvciBodHRwIG9wZXJhdGlvbnMgKGZvciB3aGljaCB3ZSBoYXZlIHRlc3Qgc2VydmVycykuCisKKzEzLjQgbW9yZSBwbGF0Zm9ybXMgc3VwcG9ydGVkCisKKyBNYWtlIHRoZSB0ZXN0IHN1aXRlIHdvcmsgb24gbW9yZSBwbGF0Zm9ybXMuIE9wZW5CU0QgYW5kIE1hYyBPUy4gUmVtb3ZlCisgZm9yaygpcyBhbmQgaXQgc2hvdWxkIGJlY29tZSBldmVuIG1vcmUgcG9ydGFibGUuCisKKzE0LiBOZXh0IFNPTkFNRSBidW1wCisKKzE0LjEgaHR0cC1zdHlsZSBIRUFEIG91dHB1dCBmb3IgZnRwCisKKyAjdW5kZWYgQ1VSTF9GVFBfSFRUUFNUWUxFX0hFQUQgaW4gbGliL2Z0cC5jIHRvIHJlbW92ZSB0aGUgSFRUUC1zdHlsZSBoZWFkZXJzCisgZnJvbSBiZWluZyBvdXRwdXQgaW4gTk9CT0RZIHJlcXVlc3RzIG92ZXIgZnRwCisKKzE0LjIgY29tYmluZSBlcnJvciBjb2RlcworCisgQ29tYmluZSBzb21lIG9mIHRoZSBlcnJvciBjb2RlcyB0byByZW1vdmUgZHVwbGljYXRlcy4gIFRoZSBvcmlnaW5hbAorIG51bWJlcmluZyBzaG91bGQgbm90IGJlIGNoYW5nZWQsIGFuZCB0aGUgb2xkIGlkZW50aWZpZXJzIHdvdWxkIGJlCisgbWFjcm9lZCB0byB0aGUgbmV3IG9uZXMgaW4gYW4gQ1VSTF9OT19PTERJRVMgc2VjdGlvbiB0byBoZWxwIHdpdGgKKyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCisgQ2FuZGlkYXRlcyBmb3IgcmVtb3ZhbCBhbmQgdGhlaXIgcmVwbGFjZW1lbnRzOgorCisgICAgQ1VSTEVfRklMRV9DT1VMRE5UX1JFQURfRklMRSA9PiBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQKKyAgICBDVVJMRV9GVFBfQ09VTEROVF9SRVRSX0ZJTEUgPT4gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5ECisgICAgQ1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1QgPT4gQ1VSTEVfUkFOR0VfRVJST1IKKyAgICBDVVJMRV9GVU5DVElPTl9OT1RfRk9VTkQgPT4gQ1VSTEVfRkFJTEVEX0lOSVQKKyAgICBDVVJMRV9MREFQX0lOVkFMSURfVVJMID0+IENVUkxFX1VSTF9NQUxGT1JNQVQKKyAgICBDVVJMRV9URlRQX05PU1VDSFVTRVIgPT4gQ1VSTEVfVEZUUF9JTExFR0FMCisgICAgQ1VSTEVfVEZUUF9OT1RGT1VORCA9PiBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQKKyAgICBDVVJMRV9URlRQX1BFUk0gPT4gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQKKworMTQuMyBleHRlbmQgQ1VSTE9QVF9TT0NLT1BURlVOQ1RJT04gcHJvdG90eXBlCisKKyBUaGUgY3VycmVudCBwcm90b3R5cGUgb25seSBwcm92aWRlcyAncHVycG9zZScgdGhhdCB0ZWxscyB3aGF0IHRoZQorIGNvbm5lY3Rpb24vc29ja2V0IGlzIGZvciwgYnV0IG5vdCBhbnkgcHJvdG9jb2wgb3Igc2ltaWxhci4gSXQgbWFrZXMgaXQgaGFyZAorIGZvciBhcHBsaWNhdGlvbnMgdG8gZGlmZmVyZW50aWF0ZSBvbiBUQ1AgdnMgVURQIGFuZCBldmVuIEhUVFAgdnMgRlRQIGFuZAorIHNpbWlsYXIuCisKKzE1LiBOZXh0IG1ham9yIHJlbGVhc2UKKworMTUuMSBjbGVhbnVwIHJldHVybiBjb2RlcworCisgY3VybF9lYXN5X2NsZWFudXAoKSByZXR1cm5zIHZvaWQsIGJ1dCBjdXJsX211bHRpX2NsZWFudXAoKSByZXR1cm5zIGEKKyBDVVJMTWNvZGUuIFRoZXNlIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGJlIHRoZSBzYW1lLgorCisxNS4yIHJlbW92ZSBvYnNvbGV0ZSBkZWZpbmVzCisKKyByZW1vdmUgb2Jzb2xldGUgZGVmaW5lcyBmcm9tIGN1cmwvY3VybC5oCisKKzE1LjMgc2l6ZV90CisKKyBtYWtlIHNldmVyYWwgZnVuY3Rpb25zIHVzZSBzaXplX3QgaW5zdGVhZCBvZiBpbnQgaW4gdGhlaXIgQVBJcworCisxNS40IHJlbW92ZSBzZXZlcmFsIGZ1bmN0aW9ucworCisgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGZyb20gdGhlIHB1YmxpYyBBUEk6CisKKyBjdXJsX2dldGVudgorCisgY3VybF9tcHJpbnRmIChhbmQgdmFyaWF0aW9ucykKKworIGN1cmxfc3RyZXF1YWwKKworIGN1cmxfc3RybmVxdWFsCisKKyBUaGV5IHdpbGwgaW5zdGVhZCBiZWNvbWUgY3VybHhfIC0gYWx0ZXJuYXRpdmVzLiBUaGF0IG1ha2VzIHRoZSBjdXJsIGFwcAorIHN0aWxsIGNhcGFibGUgb2YgdXNpbmcgdGhlbSwgYnkgYnVpbGRpbmcgd2l0aCB0aGVtIGZyb20gc291cmNlLgorCisgVGhlc2UgZnVuY3Rpb25zIGhhdmUgbm8gcHVycG9zZSBhbnltb3JlOgorCisgY3VybF9tdWx0aV9zb2NrZXQKKworIGN1cmxfbXVsdGlfc29ja2V0X2FsbAorCisxNS41IHJlbW92ZSBDVVJMT1BUX0ZBSUxPTkVSUk9SCisKKyBSZW1vdmUgc3VwcG9ydCBmb3IgQ1VSTE9QVF9GQUlMT05FUlJPUiwgaXQgaGFzIGdvdHRlbiB0b28ga2x1ZGd5IGFuZCB3ZWlyZAorIGludGVybmFsbHkuIExldCB0aGUgYXBwIGp1ZGdlIHN1Y2Nlc3Mgb3Igbm90IGZvciBpdHNlbGYuCisKKzE1LjYgcmVtb3ZlIENVUkxPUFRfRE5TX1VTRV9HTE9CQUxfQ0FDSEUKKworIFJlbW92ZSBzdXBwb3J0IGZvciBhIGdsb2JhbCBETlMgY2FjaGUuIEFueXRoaW5nIGdsb2JhbCBpcyBzaWxseSwgYW5kIHdlCisgYWxyZWFkeSBvZmZlciB0aGUgc2hhcmUgaW50ZXJmYWNlIGZvciB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGJ1dCBkb25lCisgInJpZ2h0Ii4KKworMTUuNyByZW1vdmUgcHJvZ3Jlc3MgbWV0ZXIgZnJvbSBsaWJjdXJsCisKKyBUaGUgaW50ZXJuYWxseSBwcm92aWRlZCBwcm9ncmVzcyBtZXRlciBvdXRwdXQgZG9lc24ndCBiZWxvbmcgaW4gdGhlIGxpYnJhcnkuCisgQmFzaWNhbGx5IG5vIGFwcGxpY2F0aW9uIHdhbnRzIGl0IChhcGFydCBmcm9tIGN1cmwpIGJ1dCBpbnN0ZWFkIGFwcGxpY2F0aW9ucworIGNhbiBhbmQgc2hvdWxkIGRvIHRoZWlyIG93biBwcm9ncmVzcyBtZXRlcnMgdXNpbmcgdGhlIHByb2dyZXNzIGNhbGxiYWNrLgorCisgVGhlIHByb2dyZXNzIGNhbGxiYWNrIHNob3VsZCB0aGVuIGJlIGJ1bXBlZCBhcyB3ZWxsIHRvIGdldCBwcm9wZXIgNjRiaXQKKyB2YXJpYWJsZSB0eXBlcyBwYXNzZWQgdG8gaXQgaW5zdGVhZCBvZiBkb3VibGVzIHNvIHRoYXQgYmlnIGZpbGVzIHdvcmsKKyBjb3JyZWN0bHkuCisKKzE1LjggcmVtb3ZlICdjdXJsX2h0dHBwb3N0JyBmcm9tIHB1YmxpYworCisgY3VybF9mb3JtYWRkKCkgd2FzIG1hZGUgdG8gZmlsbCBpbiBhIHB1YmxpYyBzdHJ1Y3QsIGJ1dCB0aGUgZmFjdCB0aGF0IHRoZQorIHN0cnVjdCBpcyBwdWJsaWMgaXMgbmV2ZXIgcmVhbGx5IHVzZWQgYnkgYXBwbGljYXRpb24gZm9yIHRoZWlyIG93biBhZHZhbnRhZ2UKKyBidXQgaW5zdGVhZCBvZnRlbiByZXN0cmljdHMgaG93IHRoZSBmb3JtIGZ1bmN0aW9ucyBjYW4gb3IgY2FuJ3QgYmUgbW9kaWZpZWQuCisKKyBDaGFuZ2luZyB0aGVtIHRvIHJldHVybiBhIHByaXZhdGUgaGFuZGxlIHdpbGwgYmVuZWZpdCB0aGUgaW1wbGVtZW50YXRpb24gYW5kCisgYWxsb3cgdXMgbXVjaCBncmVhdGVyIGZyZWVkb21zIHdoaWxlIHN0aWxsIG1haW50aW5pbmcgYSBzb2xpZCBBUEkgYW5kIEFCSS4KKworMTUuOSBoYXZlIGZvcm0gZnVuY3Rpb25zIHVzZSBDVVJMIGhhbmRsZSBhcmd1bWVudAorCisgY3VybF9mb3JtYWRkKCkgYW5kIGN1cmxfZm9ybWdldCgpIGJvdGggY3VycmVudGx5IGhhdmUgbm8gQ1VSTCBoYW5kbGUKKyBhcmd1bWVudCwgYnV0IGJvdGggY2FuIHVzZSBhIGNhbGxiYWNrIHRoYXQgaXMgc2V0IGluIHRoZSBlYXN5IGhhbmRsZSwgYW5kCisgdGh1cyBjdXJsX2Zvcm1nZXQoKSB3aXRoIGNhbGxiYWNrIGNhbm5vdCBmdW5jdGlvbiB3aXRob3V0IGZpcnN0IGhhdmluZworIGN1cmxfZWFzeV9wZXJmb3JtKCkgKG9yIHNpbWlsYXIpIGNhbGxlZCAtIHdoaWNoIGlzIGhhcmQgdG8gZ3Jhc3AgYW5kIGEgZGVzaWduCisgbWlzdGFrZS4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvVGhlQXJ0T2ZIdHRwU2NyaXB0aW5nIGIvY3VybC03LjI1LjAvZG9jcy9UaGVBcnRPZkh0dHBTY3JpcHRpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBkYWI1ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvVGhlQXJ0T2ZIdHRwU2NyaXB0aW5nCkBAIC0wLDAgKzEsNTA3IEBACitPbmxpbmU6ICBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvaHR0cHNjcmlwdGluZy5odG1sCitEYXRlOiAgICBKYW4gMTksIDIwMTEKKworICAgICAgICAgICAgICAgIFRoZSBBcnQgT2YgU2NyaXB0aW5nIEhUVFAgUmVxdWVzdHMgVXNpbmcgQ3VybAorICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgVGhpcyBkb2N1bWVudCB3aWxsIGFzc3VtZSB0aGF0IHlvdSdyZSBmYW1pbGlhciB3aXRoIEhUTUwgYW5kIGdlbmVyYWwKKyBuZXR3b3JraW5nLgorCisgVGhlIHBvc3NpYmlsaXR5IHRvIHdyaXRlIHNjcmlwdHMgaXMgZXNzZW50aWFsIHRvIG1ha2UgYSBnb29kIGNvbXB1dGVyCisgc3lzdGVtLiBVbml4JyBjYXBhYmlsaXR5IHRvIGJlIGV4dGVuZGVkIGJ5IHNoZWxsIHNjcmlwdHMgYW5kIHZhcmlvdXMgdG9vbHMgdG8KKyBydW4gdmFyaW91cyBhdXRvbWF0ZWQgY29tbWFuZHMgYW5kIHNjcmlwdHMgaXMgb25lIHJlYXNvbiB3aHkgaXQgaGFzIHN1Y2NlZWRlZAorIHNvIHdlbGwuCisKKyBUaGUgaW5jcmVhc2luZyBhbW91bnQgb2YgYXBwbGljYXRpb25zIG1vdmluZyB0byB0aGUgd2ViIGhhcyBtYWRlICJIVFRQCisgU2NyaXB0aW5nIiBtb3JlIGZyZXF1ZW50bHkgcmVxdWVzdGVkIGFuZCB3YW50ZWQuIFRvIGJlIGFibGUgdG8gYXV0b21hdGljYWxseQorIGV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgd2ViLCB0byBmYWtlIHVzZXJzLCB0byBwb3N0IG9yIHVwbG9hZCBkYXRhIHRvCisgd2ViIHNlcnZlcnMgYXJlIGFsbCBpbXBvcnRhbnQgdGFza3MgdG9kYXkuCisKKyBDdXJsIGlzIGEgY29tbWFuZCBsaW5lIHRvb2wgZm9yIGRvaW5nIGFsbCBzb3J0cyBvZiBVUkwgbWFuaXB1bGF0aW9ucyBhbmQKKyB0cmFuc2ZlcnMsIGJ1dCB0aGlzIHBhcnRpY3VsYXIgZG9jdW1lbnQgd2lsbCBmb2N1cyBvbiBob3cgdG8gdXNlIGl0IHdoZW4KKyBkb2luZyBIVFRQIHJlcXVlc3RzIGZvciBmdW4gYW5kIHByb2ZpdC4gSSdsbCBhc3N1bWUgdGhhdCB5b3Uga25vdyBob3cgdG8KKyBpbnZva2UgJ2N1cmwgLS1oZWxwJyBvciAnY3VybCAtLW1hbnVhbCcgdG8gZ2V0IGJhc2ljIGluZm9ybWF0aW9uIGFib3V0IGl0LgorCisgQ3VybCBpcyBub3Qgd3JpdHRlbiB0byBkbyBldmVyeXRoaW5nIGZvciB5b3UuIEl0IG1ha2VzIHRoZSByZXF1ZXN0cywgaXQgZ2V0cworIHRoZSBkYXRhLCBpdCBzZW5kcyBkYXRhIGFuZCBpdCByZXRyaWV2ZXMgdGhlIGluZm9ybWF0aW9uLiBZb3UgcHJvYmFibHkgbmVlZAorIHRvIGdsdWUgZXZlcnl0aGluZyB0b2dldGhlciB1c2luZyBzb21lIGtpbmQgb2Ygc2NyaXB0IGxhbmd1YWdlIG9yIHJlcGVhdGVkCisgbWFudWFsIGludm9rZXMuCisKKzEuIFRoZSBIVFRQIFByb3RvY29sCisKKyBIVFRQIGlzIHRoZSBwcm90b2NvbCB1c2VkIHRvIGZldGNoIGRhdGEgZnJvbSB3ZWIgc2VydmVycy4gSXQgaXMgYSB2ZXJ5IHNpbXBsZQorIHByb3RvY29sIHRoYXQgaXMgYnVpbHQgdXBvbiBUQ1AvSVAuIFRoZSBwcm90b2NvbCBhbHNvIGFsbG93cyBpbmZvcm1hdGlvbiB0bworIGdldCBzZW50IHRvIHRoZSBzZXJ2ZXIgZnJvbSB0aGUgY2xpZW50IHVzaW5nIGEgZmV3IGRpZmZlcmVudCBtZXRob2RzLCBhcyB3aWxsCisgYmUgc2hvd24gaGVyZS4KKworIEhUVFAgaXMgcGxhaW4gQVNDSUkgdGV4dCBsaW5lcyBiZWluZyBzZW50IGJ5IHRoZSBjbGllbnQgdG8gYSBzZXJ2ZXIgdG8KKyByZXF1ZXN0IGEgcGFydGljdWxhciBhY3Rpb24sIGFuZCB0aGVuIHRoZSBzZXJ2ZXIgcmVwbGllcyBhIGZldyB0ZXh0IGxpbmVzCisgYmVmb3JlIHRoZSBhY3R1YWwgcmVxdWVzdGVkIGNvbnRlbnQgaXMgc2VudCB0byB0aGUgY2xpZW50LgorCisgVGhlIGNsaWVudCwgY3VybCwgc2VuZHMgYSBIVFRQIHJlcXVlc3QuIFRoZSByZXF1ZXN0IGNvbnRhaW5zIGEgbWV0aG9kIChsaWtlCisgR0VULCBQT1NULCBIRUFEIGV0YyksIGEgbnVtYmVyIG9mIHJlcXVlc3QgaGVhZGVycyBhbmQgc29tZXRpbWVzIGEgcmVxdWVzdAorIGJvZHkuIFRoZSBIVFRQIHNlcnZlciByZXNwb25kcyB3aXRoIGEgc3RhdHVzIGxpbmUgKGluZGljYXRpbmcgaWYgdGhpbmdzIHdlbnQKKyB3ZWxsKSwgcmVzcG9uc2UgaGVhZGVycyBhbmQgbW9zdCBvZnRlbiBhbHNvIGEgcmVzcG9uc2UgYm9keS4gVGhlICJib2R5IiBwYXJ0CisgaXMgdGhlIHBsYWluIGRhdGEgeW91IHJlcXVlc3RlZCwgbGlrZSB0aGUgYWN0dWFsIEhUTUwgb3IgdGhlIGltYWdlIGV0Yy4KKworIDEuMSBTZWUgdGhlIFByb3RvY29sCisKKyAgVXNpbmcgY3VybCdzIG9wdGlvbiAtLXZlcmJvc2UgKC12IGFzIGEgc2hvcnQgb3B0aW9uKSB3aWxsIGRpc3BsYXkgd2hhdCBraW5kCisgIG9mIGNvbW1hbmRzIGN1cmwgc2VuZHMgdG8gdGhlIHNlcnZlciwgYXMgd2VsbCBhcyBhIGZldyBvdGhlciBpbmZvcm1hdGlvbmFsCisgIHRleHRzLgorCisgIC0tdmVyYm9zZSBpcyB0aGUgc2luZ2xlIG1vc3QgdXNlZnVsIG9wdGlvbiB3aGVuIGl0IGNvbWVzIHRvIGRlYnVnIG9yIGV2ZW4KKyAgdW5kZXJzdGFuZCB0aGUgY3VybDwtPnNlcnZlciBpbnRlcmFjdGlvbi4KKworICBTb21ldGltZXMgZXZlbiAtLXZlcmJvc2UgaXMgbm90IGVub3VnaC4gVGhlbiAtLXRyYWNlIGFuZCAtLXRyYWNlLWFzY2lpIG9mZmVyCisgIGV2ZW4gbW9yZSBkZXRhaWxzIGFzIHRoZXkgc2hvdyBFVkVSWVRISU5HIGN1cmwgc2VuZHMgYW5kIHJlY2VpdmVzLiBVc2UgaXQKKyAgbGlrZSB0aGlzOgorCisgICAgICBjdXJsIC0tdHJhY2UtYXNjaWkgZGVidWdkdW1wLnR4dCBodHRwOi8vd3d3LmV4YW1wbGUuY29tLworCisyLiBVUkwKKworIFRoZSBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgZm9ybWF0IGlzIGhvdyB5b3Ugc3BlY2lmeSB0aGUgYWRkcmVzcyBvZiBhCisgcGFydGljdWxhciByZXNvdXJjZSBvbiB0aGUgSW50ZXJuZXQuIFlvdSBrbm93IHRoZXNlLCB5b3UndmUgc2VlbiBVUkxzIGxpa2UKKyBodHRwOi8vY3VybC5oYXh4LnNlIG9yIGh0dHBzOi8veW91cmJhbmsuY29tIGEgbWlsbGlvbiB0aW1lcy4KKworMy4gR0VUIGEgcGFnZQorCisgVGhlIHNpbXBsZXN0IGFuZCBtb3N0IGNvbW1vbiByZXF1ZXN0L29wZXJhdGlvbiBtYWRlIHVzaW5nIEhUVFAgaXMgdG8gZ2V0IGEKKyBVUkwuIFRoZSBVUkwgY291bGQgaXRzZWxmIHJlZmVyIHRvIGEgd2ViIHBhZ2UsIGFuIGltYWdlIG9yIGEgZmlsZS4gVGhlIGNsaWVudAorIGlzc3VlcyBhIEdFVCByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgYW5kIHJlY2VpdmVzIHRoZSBkb2N1bWVudCBpdCBhc2tlZCBmb3IuCisgSWYgeW91IGlzc3VlIHRoZSBjb21tYW5kIGxpbmUKKworICAgICAgICBjdXJsIGh0dHA6Ly9jdXJsLmhheHguc2UKKworIHlvdSBnZXQgYSB3ZWIgcGFnZSByZXR1cm5lZCBpbiB5b3VyIHRlcm1pbmFsIHdpbmRvdy4gVGhlIGVudGlyZSBIVE1MIGRvY3VtZW50CisgdGhhdCB0aGF0IFVSTCBob2xkcy4KKworIEFsbCBIVFRQIHJlcGxpZXMgY29udGFpbiBhIHNldCBvZiByZXNwb25zZSBoZWFkZXJzIHRoYXQgYXJlIG5vcm1hbGx5IGhpZGRlbiwKKyB1c2UgY3VybCdzIC0taW5jbHVkZSAoLWkpIG9wdGlvbiB0byBkaXNwbGF5IHRoZW0gYXMgd2VsbCBhcyB0aGUgcmVzdCBvZiB0aGUKKyBkb2N1bWVudC4gWW91IGNhbiBhbHNvIGFzayB0aGUgcmVtb3RlIHNlcnZlciBmb3IgT05MWSB0aGUgaGVhZGVycyBieSB1c2luZworIHRoZSAtLWhlYWQgKC1JKSBvcHRpb24gKHdoaWNoIHdpbGwgbWFrZSBjdXJsIGlzc3VlIGEgSEVBRCByZXF1ZXN0KS4KKworNC4gRm9ybXMKKworIEZvcm1zIGFyZSB0aGUgZ2VuZXJhbCB3YXkgYSB3ZWIgc2l0ZSBjYW4gcHJlc2VudCBhIEhUTUwgcGFnZSB3aXRoIGZpZWxkcyBmb3IKKyB0aGUgdXNlciB0byBlbnRlciBkYXRhIGluLCBhbmQgdGhlbiBwcmVzcyBzb21lIGtpbmQgb2YgJ09LJyBvciAnc3VibWl0JworIGJ1dHRvbiB0byBnZXQgdGhhdCBkYXRhIHNlbnQgdG8gdGhlIHNlcnZlci4gVGhlIHNlcnZlciB0aGVuIHR5cGljYWxseSB1c2VzCisgdGhlIHBvc3RlZCBkYXRhIHRvIGRlY2lkZSBob3cgdG8gYWN0LiBMaWtlIHVzaW5nIHRoZSBlbnRlcmVkIHdvcmRzIHRvIHNlYXJjaAorIGluIGEgZGF0YWJhc2UsIG9yIHRvIGFkZCB0aGUgaW5mbyBpbiBhIGJ1ZyB0cmFjayBzeXN0ZW0sIGRpc3BsYXkgdGhlIGVudGVyZWQKKyBhZGRyZXNzIG9uIGEgbWFwIG9yIHVzaW5nIHRoZSBpbmZvIGFzIGEgbG9naW4tcHJvbXB0IHZlcmlmeWluZyB0aGF0IHRoZSB1c2VyCisgaXMgYWxsb3dlZCB0byBzZWUgd2hhdCBpdCBpcyBhYm91dCB0byBzZWUuCisKKyBPZiBjb3Vyc2UgdGhlcmUgaGFzIHRvIGJlIHNvbWUga2luZCBvZiBwcm9ncmFtIGluIHRoZSBzZXJ2ZXIgZW5kIHRvIHJlY2VpdmUKKyB0aGUgZGF0YSB5b3Ugc2VuZC4gWW91IGNhbm5vdCBqdXN0IGludmVudCBzb21ldGhpbmcgb3V0IG9mIHRoZSBhaXIuCisKKyA0LjEgR0VUCisKKyAgQSBHRVQtZm9ybSB1c2VzIHRoZSBtZXRob2QgR0VULCBhcyBzcGVjaWZpZWQgaW4gSFRNTCBsaWtlOgorCisgICAgICAgIDxmb3JtIG1ldGhvZD0iR0VUIiBhY3Rpb249Imp1bmsuY2dpIj4KKyAgICAgICAgICA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ImJpcnRoeWVhciI+CisgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9cHJlc3MgdmFsdWU9Ik9LIj4KKyAgICAgICAgPC9mb3JtPgorCisgIEluIHlvdXIgZmF2b3JpdGUgYnJvd3NlciwgdGhpcyBmb3JtIHdpbGwgYXBwZWFyIHdpdGggYSB0ZXh0IGJveCB0byBmaWxsIGluCisgIGFuZCBhIHByZXNzLWJ1dHRvbiBsYWJlbGVkICJPSyIuIElmIHlvdSBmaWxsIGluICcxOTA1JyBhbmQgcHJlc3MgdGhlIE9LCisgIGJ1dHRvbiwgeW91ciBicm93c2VyIHdpbGwgdGhlbiBjcmVhdGUgYSBuZXcgVVJMIHRvIGdldCBmb3IgeW91LiBUaGUgVVJMIHdpbGwKKyAgZ2V0ICJqdW5rLmNnaT9iaXJ0aHllYXI9MTkwNSZwcmVzcz1PSyIgYXBwZW5kZWQgdG8gdGhlIHBhdGggcGFydCBvZiB0aGUKKyAgcHJldmlvdXMgVVJMLgorCisgIElmIHRoZSBvcmlnaW5hbCBmb3JtIHdhcyBzZWVuIG9uIHRoZSBwYWdlICJ3d3cuaG90bWFpbC5jb20vd2hlbi9iaXJ0aC5odG1sIiwKKyAgdGhlIHNlY29uZCBwYWdlIHlvdSdsbCBnZXQgd2lsbCBiZWNvbWUKKyAgInd3dy5ob3RtYWlsLmNvbS93aGVuL2p1bmsuY2dpP2JpcnRoeWVhcj0xOTA1JnByZXNzPU9LIi4KKworICBNb3N0IHNlYXJjaCBlbmdpbmVzIHdvcmsgdGhpcyB3YXkuCisKKyAgVG8gbWFrZSBjdXJsIGRvIHRoZSBHRVQgZm9ybSBwb3N0IGZvciB5b3UsIGp1c3QgZW50ZXIgdGhlIGV4cGVjdGVkIGNyZWF0ZWQKKyAgVVJMOgorCisgICAgICAgIGN1cmwgImh0dHA6Ly93d3cuaG90bWFpbC5jb20vd2hlbi9qdW5rLmNnaT9iaXJ0aHllYXI9MTkwNSZwcmVzcz1PSyIKKworIDQuMiBQT1NUCisKKyAgVGhlIEdFVCBtZXRob2QgbWFrZXMgYWxsIGlucHV0IGZpZWxkIG5hbWVzIGdldCBkaXNwbGF5ZWQgaW4gdGhlIFVSTCBmaWVsZCBvZgorICB5b3VyIGJyb3dzZXIuIFRoYXQncyBnZW5lcmFsbHkgYSBnb29kIHRoaW5nIHdoZW4geW91IHdhbnQgdG8gYmUgYWJsZSB0bworICBib29rbWFyayB0aGF0IHBhZ2Ugd2l0aCB5b3VyIGdpdmVuIGRhdGEsIGJ1dCBpdCBpcyBhbiBvYnZpb3VzIGRpc2FkdmFudGFnZQorICBpZiB5b3UgZW50ZXJlZCBzZWNyZXQgaW5mb3JtYXRpb24gaW4gb25lIG9mIHRoZSBmaWVsZHMgb3IgaWYgdGhlcmUgYXJlIGEKKyAgbGFyZ2UgYW1vdW50IG9mIGZpZWxkcyBjcmVhdGluZyBhIHZlcnkgbG9uZyBhbmQgdW5yZWFkYWJsZSBVUkwuCisKKyAgVGhlIEhUVFAgcHJvdG9jb2wgdGhlbiBvZmZlcnMgdGhlIFBPU1QgbWV0aG9kLiBUaGlzIHdheSB0aGUgY2xpZW50IHNlbmRzIHRoZQorICBkYXRhIHNlcGFyYXRlZCBmcm9tIHRoZSBVUkwgYW5kIHRodXMgeW91IHdvbid0IHNlZSBhbnkgb2YgaXQgaW4gdGhlIFVSTAorICBhZGRyZXNzIGZpZWxkLgorCisgIFRoZSBmb3JtIHdvdWxkIGxvb2sgdmVyeSBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBvbmU6CisKKyAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Imp1bmsuY2dpIj4KKyAgICAgICAgICA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ImJpcnRoeWVhciI+CisgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9cHJlc3MgdmFsdWU9IiBPSyAiPgorICAgICAgICA8L2Zvcm0+CisKKyAgQW5kIHRvIHVzZSBjdXJsIHRvIHBvc3QgdGhpcyBmb3JtIHdpdGggdGhlIHNhbWUgZGF0YSBmaWxsZWQgaW4gYXMgYmVmb3JlLCB3ZQorICBjb3VsZCBkbyBpdCBsaWtlOgorCisgICAgICAgIGN1cmwgLS1kYXRhICJiaXJ0aHllYXI9MTkwNSZwcmVzcz0lMjBPSyUyMCIgXAorICAgICAgICBodHRwOi8vd3d3LmV4YW1wbGUuY29tL3doZW4uY2dpCisKKyAgVGhpcyBraW5kIG9mIFBPU1Qgd2lsbCB1c2UgdGhlIENvbnRlbnQtVHlwZQorICBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgYW5kIGlzIHRoZSBtb3N0IHdpZGVseSB1c2VkIFBPU1Qga2luZC4KKworICBUaGUgZGF0YSB5b3Ugc2VuZCB0byB0aGUgc2VydmVyIE1VU1QgYWxyZWFkeSBiZSBwcm9wZXJseSBlbmNvZGVkLCBjdXJsIHdpbGwKKyAgbm90IGRvIHRoYXQgZm9yIHlvdS4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRoZSBkYXRhIHRvIGNvbnRhaW4gYSBzcGFjZSwKKyAgeW91IG5lZWQgdG8gcmVwbGFjZSB0aGF0IHNwYWNlIHdpdGggJTIwIGV0Yy4gRmFpbGluZyB0byBjb21wbHkgd2l0aCB0aGlzCisgIHdpbGwgbW9zdCBsaWtlbHkgY2F1c2UgeW91ciBkYXRhIHRvIGJlIHJlY2VpdmVkIHdyb25nbHkgYW5kIG1lc3NlZCB1cC4KKworICBSZWNlbnQgY3VybCB2ZXJzaW9ucyBjYW4gaW4gZmFjdCB1cmwtZW5jb2RlIFBPU1QgZGF0YSBmb3IgeW91LCBsaWtlIHRoaXM6CisKKyAgICAgICAgY3VybCAtLWRhdGEtdXJsZW5jb2RlICJuYW1lPUkgYW0gRGFuaWVsIiBodHRwOi8vd3d3LmV4YW1wbGUuY29tCisKKyA0LjMgRmlsZSBVcGxvYWQgUE9TVAorCisgIEJhY2sgaW4gbGF0ZSAxOTk1IHRoZXkgZGVmaW5lZCBhbiBhZGRpdGlvbmFsIHdheSB0byBwb3N0IGRhdGEgb3ZlciBIVFRQLiBJdAorICBpcyBkb2N1bWVudGVkIGluIHRoZSBSRkMgMTg2Nywgd2h5IHRoaXMgbWV0aG9kIHNvbWV0aW1lcyBpcyByZWZlcnJlZCB0byBhcworICBSRkMxODY3LXBvc3RpbmcuCisKKyAgVGhpcyBtZXRob2QgaXMgbWFpbmx5IGRlc2lnbmVkIHRvIGJldHRlciBzdXBwb3J0IGZpbGUgdXBsb2Fkcy4gQSBmb3JtIHRoYXQKKyAgYWxsb3dzIGEgdXNlciB0byB1cGxvYWQgYSBmaWxlIGNvdWxkIGJlIHdyaXR0ZW4gbGlrZSB0aGlzIGluIEhUTUw6CisKKyAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnIGFjdGlvbj0idXBsb2FkLmNnaSI+CisgICAgICA8aW5wdXQgdHlwZT1maWxlIG5hbWU9dXBsb2FkPgorICAgICAgPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9cHJlc3MgdmFsdWU9Ik9LIj4KKyAgICA8L2Zvcm0+CisKKyAgVGhpcyBjbGVhcmx5IHNob3dzIHRoYXQgdGhlIENvbnRlbnQtVHlwZSBhYm91dCB0byBiZSBzZW50IGlzCisgIG11bHRpcGFydC9mb3JtLWRhdGEuCisKKyAgVG8gcG9zdCB0byBhIGZvcm0gbGlrZSB0aGlzIHdpdGggY3VybCwgeW91IGVudGVyIGEgY29tbWFuZCBsaW5lIGxpa2U6CisKKyAgICAgICAgY3VybCAtLWZvcm0gdXBsb2FkPUBsb2NhbGZpbGVuYW1lIC0tZm9ybSBwcmVzcz1PSyBbVVJMXQorCisgNC40IEhpZGRlbiBGaWVsZHMKKworICBBIHZlcnkgY29tbW9uIHdheSBmb3IgSFRNTCBiYXNlZCBhcHBsaWNhdGlvbiB0byBwYXNzIHN0YXRlIGluZm9ybWF0aW9uCisgIGJldHdlZW4gcGFnZXMgaXMgdG8gYWRkIGhpZGRlbiBmaWVsZHMgdG8gdGhlIGZvcm1zLiBIaWRkZW4gZmllbGRzIGFyZQorICBhbHJlYWR5IGZpbGxlZCBpbiwgdGhleSBhcmVuJ3QgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGFuZCB0aGV5IGdldCBwYXNzZWQKKyAgYWxvbmcganVzdCBhcyBhbGwgdGhlIG90aGVyIGZpZWxkcy4KKworICBBIHNpbWlsYXIgZXhhbXBsZSBmb3JtIHdpdGggb25lIHZpc2libGUgZmllbGQsIG9uZSBoaWRkZW4gZmllbGQgYW5kIG9uZQorICBzdWJtaXQgYnV0dG9uIGNvdWxkIGxvb2sgbGlrZToKKworICAgIDxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSJmb29iYXIuY2dpIj4KKyAgICAgIDxpbnB1dCB0eXBlPXRleHQgbmFtZT0iYmlydGh5ZWFyIj4KKyAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJwZXJzb24iIHZhbHVlPSJkYW5pZWwiPgorICAgICAgPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9InByZXNzIiB2YWx1ZT0iT0siPgorICAgIDwvZm9ybT4KKworICBUbyBwb3N0IHRoaXMgd2l0aCBjdXJsLCB5b3Ugd29uJ3QgaGF2ZSB0byB0aGluayBhYm91dCBpZiB0aGUgZmllbGRzIGFyZQorICBoaWRkZW4gb3Igbm90LiBUbyBjdXJsIHRoZXkncmUgYWxsIHRoZSBzYW1lOgorCisgICAgICAgIGN1cmwgLS1kYXRhICJiaXJ0aHllYXI9MTkwNSZwcmVzcz1PSyZwZXJzb249ZGFuaWVsIiBbVVJMXQorCisgNC41IEZpZ3VyZSBPdXQgV2hhdCBBIFBPU1QgTG9va3MgTGlrZQorCisgIFdoZW4geW91J3JlIGFib3V0IGZpbGwgaW4gYSBmb3JtIGFuZCBzZW5kIHRvIGEgc2VydmVyIGJ5IHVzaW5nIGN1cmwgaW5zdGVhZAorICBvZiBhIGJyb3dzZXIsIHlvdSdyZSBvZiBjb3Vyc2UgdmVyeSBpbnRlcmVzdGVkIGluIHNlbmRpbmcgYSBQT1NUIGV4YWN0bHkgdGhlCisgIHdheSB5b3VyIGJyb3dzZXIgZG9lcy4KKworICBBbiBlYXN5IHdheSB0byBnZXQgdG8gc2VlIHRoaXMsIGlzIHRvIHNhdmUgdGhlIEhUTUwgcGFnZSB3aXRoIHRoZSBmb3JtIG9uCisgIHlvdXIgbG9jYWwgZGlzaywgbW9kaWZ5IHRoZSAnbWV0aG9kJyB0byBhIEdFVCwgYW5kIHByZXNzIHRoZSBzdWJtaXQgYnV0dG9uCisgICh5b3UgY291bGQgYWxzbyBjaGFuZ2UgdGhlIGFjdGlvbiBVUkwgaWYgeW91IHdhbnQgdG8pLgorCisgIFlvdSB3aWxsIHRoZW4gY2xlYXJseSBzZWUgdGhlIGRhdGEgZ2V0IGFwcGVuZGVkIHRvIHRoZSBVUkwsIHNlcGFyYXRlZCB3aXRoIGEKKyAgJz8nLWxldHRlciBhcyBHRVQgZm9ybXMgYXJlIHN1cHBvc2VkIHRvLgorCis1LiBQVVQKKworIFRoZSBwZXJoYXBzIGJlc3Qgd2F5IHRvIHVwbG9hZCBkYXRhIHRvIGEgSFRUUCBzZXJ2ZXIgaXMgdG8gdXNlIFBVVC4gVGhlbgorIGFnYWluLCB0aGlzIG9mIGNvdXJzZSByZXF1aXJlcyB0aGF0IHNvbWVvbmUgcHV0IGEgcHJvZ3JhbSBvciBzY3JpcHQgb24gdGhlCisgc2VydmVyIGVuZCB0aGF0IGtub3dzIGhvdyB0byByZWNlaXZlIGEgSFRUUCBQVVQgc3RyZWFtLgorCisgUHV0IGEgZmlsZSB0byBhIEhUVFAgc2VydmVyIHdpdGggY3VybDoKKworICAgICAgICBjdXJsIC0tdXBsb2FkLWZpbGUgdXBsb2FkZmlsZSBodHRwOi8vd3d3LmV4YW1wbGUuY29tL3JlY2VpdmUuY2dpCisKKzYuIEhUVFAgQXV0aGVudGljYXRpb24KKworIEhUVFAgQXV0aGVudGljYXRpb24gaXMgdGhlIGFiaWxpdHkgdG8gdGVsbCB0aGUgc2VydmVyIHlvdXIgdXNlcm5hbWUgYW5kCisgcGFzc3dvcmQgc28gdGhhdCBpdCBjYW4gdmVyaWZ5IHRoYXQgeW91J3JlIGFsbG93ZWQgdG8gZG8gdGhlIHJlcXVlc3QgeW91J3JlCisgZG9pbmcuIFRoZSBCYXNpYyBhdXRoZW50aWNhdGlvbiB1c2VkIGluIEhUVFAgKHdoaWNoIGlzIHRoZSB0eXBlIGN1cmwgdXNlcyBieQorIGRlZmF1bHQpIGlzICpwbGFpbiogKnRleHQqIGJhc2VkLCB3aGljaCBtZWFucyBpdCBzZW5kcyB1c2VybmFtZSBhbmQgcGFzc3dvcmQKKyBvbmx5IHNsaWdodGx5IG9iZnVzY2F0ZWQsIGJ1dCBzdGlsbCBmdWxseSByZWFkYWJsZSBieSBhbnlvbmUgdGhhdCBzbmlmZnMgb24KKyB0aGUgbmV0d29yayBiZXR3ZWVuIHlvdSBhbmQgdGhlIHJlbW90ZSBzZXJ2ZXIuCisKKyBUbyB0ZWxsIGN1cmwgdG8gdXNlIGEgdXNlciBhbmQgcGFzc3dvcmQgZm9yIGF1dGhlbnRpY2F0aW9uOgorCisgICAgICAgIGN1cmwgLS11c2VyIG5hbWU6cGFzc3dvcmQgaHR0cDovL3d3dy5leGFtcGxlLmNvbQorCisgVGhlIHNpdGUgbWlnaHQgcmVxdWlyZSBhIGRpZmZlcmVudCBhdXRoZW50aWNhdGlvbiBtZXRob2QgKGNoZWNrIHRoZSBoZWFkZXJzCisgcmV0dXJuZWQgYnkgdGhlIHNlcnZlciksIGFuZCB0aGVuIC0tbnRsbSwgLS1kaWdlc3QsIC0tbmVnb3RpYXRlIG9yIGV2ZW4KKyAtLWFueWF1dGggbWlnaHQgYmUgb3B0aW9ucyB0aGF0IHN1aXQgeW91LgorCisgU29tZXRpbWVzIHlvdXIgSFRUUCBhY2Nlc3MgaXMgb25seSBhdmFpbGFibGUgdGhyb3VnaCB0aGUgdXNlIG9mIGEgSFRUUAorIHByb3h5LiBUaGlzIHNlZW1zIHRvIGJlIGVzcGVjaWFsbHkgY29tbW9uIGF0IHZhcmlvdXMgY29tcGFuaWVzLiBBIEhUVFAgcHJveHkKKyBtYXkgcmVxdWlyZSBpdHMgb3duIHVzZXIgYW5kIHBhc3N3b3JkIHRvIGFsbG93IHRoZSBjbGllbnQgdG8gZ2V0IHRocm91Z2ggdG8KKyB0aGUgSW50ZXJuZXQuIFRvIHNwZWNpZnkgdGhvc2Ugd2l0aCBjdXJsLCBydW4gc29tZXRoaW5nIGxpa2U6CisKKyAgICAgICAgY3VybCAtLXByb3h5LXVzZXIgcHJveHl1c2VyOnByb3h5cGFzc3dvcmQgY3VybC5oYXh4LnNlCisKKyBJZiB5b3VyIHByb3h5IHJlcXVpcmVzIHRoZSBhdXRoZW50aWNhdGlvbiB0byBiZSBkb25lIHVzaW5nIHRoZSBOVExNIG1ldGhvZCwKKyB1c2UgLS1wcm94eS1udGxtLCBpZiBpdCByZXF1aXJlcyBEaWdlc3QgdXNlIC0tcHJveHktZGlnZXN0LgorCisgSWYgeW91IHVzZSBhbnkgb25lIHRoZXNlIHVzZXIrcGFzc3dvcmQgb3B0aW9ucyBidXQgbGVhdmUgb3V0IHRoZSBwYXNzd29yZAorIHBhcnQsIGN1cmwgd2lsbCBwcm9tcHQgZm9yIHRoZSBwYXNzd29yZCBpbnRlcmFjdGl2ZWx5LgorCisgRG8gbm90ZSB0aGF0IHdoZW4gYSBwcm9ncmFtIGlzIHJ1biwgaXRzIHBhcmFtZXRlcnMgbWlnaHQgYmUgcG9zc2libGUgdG8gc2VlCisgd2hlbiBsaXN0aW5nIHRoZSBydW5uaW5nIHByb2Nlc3NlcyBvZiB0aGUgc3lzdGVtLiBUaHVzLCBvdGhlciB1c2VycyBtYXkgYmUKKyBhYmxlIHRvIHdhdGNoIHlvdXIgcGFzc3dvcmRzIGlmIHlvdSBwYXNzIHRoZW0gYXMgcGxhaW4gY29tbWFuZCBsaW5lCisgb3B0aW9ucy4gVGhlcmUgYXJlIHdheXMgdG8gY2lyY3VtdmVudCB0aGlzLgorCisgSXQgaXMgd29ydGggbm90aW5nIHRoYXQgd2hpbGUgdGhpcyBpcyBob3cgSFRUUCBBdXRoZW50aWNhdGlvbiB3b3JrcywgdmVyeQorIG1hbnkgd2ViIHNpdGVzIHdpbGwgbm90IHVzZSB0aGlzIGNvbmNlcHQgd2hlbiB0aGV5IHByb3ZpZGUgbG9naW5zIGV0Yy4gU2VlCisgdGhlIFdlYiBMb2dpbiBjaGFwdGVyIGZ1cnRoZXIgYmVsb3cgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGF0LgorCis3LiBSZWZlcmVyCisKKyBBIEhUVFAgcmVxdWVzdCBtYXkgaW5jbHVkZSBhICdyZWZlcmVyJyBmaWVsZCAoeWVzIGl0IGlzIG1pc3NwZWxsZWQpLCB3aGljaAorIGNhbiBiZSB1c2VkIHRvIHRlbGwgZnJvbSB3aGljaCBVUkwgdGhlIGNsaWVudCBnb3QgdG8gdGhpcyBwYXJ0aWN1bGFyCisgcmVzb3VyY2UuIFNvbWUgcHJvZ3JhbXMvc2NyaXB0cyBjaGVjayB0aGUgcmVmZXJlciBmaWVsZCBvZiByZXF1ZXN0cyB0byB2ZXJpZnkKKyB0aGF0IHRoaXMgd2Fzbid0IGFycml2aW5nIGZyb20gYW4gZXh0ZXJuYWwgc2l0ZSBvciBhbiB1bmtub3duIHBhZ2UuIFdoaWxlCisgdGhpcyBpcyBhIHN0dXBpZCB3YXkgdG8gY2hlY2sgc29tZXRoaW5nIHNvIGVhc2lseSBmb3JnZWQsIG1hbnkgc2NyaXB0cyBzdGlsbAorIGRvIGl0LiBVc2luZyBjdXJsLCB5b3UgY2FuIHB1dCBhbnl0aGluZyB5b3Ugd2FudCBpbiB0aGUgcmVmZXJlci1maWVsZCBhbmQKKyB0aHVzIG1vcmUgZWFzaWx5IGJlIGFibGUgdG8gZm9vbCB0aGUgc2VydmVyIGludG8gc2VydmluZyB5b3VyIHJlcXVlc3QuCisKKyBVc2UgY3VybCB0byBzZXQgdGhlIHJlZmVyZXIgZmllbGQgd2l0aDoKKworICAgICAgICBjdXJsIC0tcmVmZXJlciBodHRwOi8vd3d3LmV4YW1wbGUuY29tZSBodHRwOi8vd3d3LmV4YW1wbGUuY29tCisKKzguIFVzZXIgQWdlbnQKKworIFZlcnkgc2ltaWxhciB0byB0aGUgcmVmZXJlciBmaWVsZCwgYWxsIEhUVFAgcmVxdWVzdHMgbWF5IHNldCB0aGUgVXNlci1BZ2VudAorIGZpZWxkLiBJdCBuYW1lcyB3aGF0IHVzZXIgYWdlbnQgKGNsaWVudCkgdGhhdCBpcyBiZWluZyB1c2VkLiBNYW55CisgYXBwbGljYXRpb25zIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGRlY2lkZSBob3cgdG8gZGlzcGxheSBwYWdlcy4gU2lsbHkgd2ViCisgcHJvZ3JhbW1lcnMgdHJ5IHRvIG1ha2UgZGlmZmVyZW50IHBhZ2VzIGZvciB1c2VycyBvZiBkaWZmZXJlbnQgYnJvd3NlcnMgdG8KKyBtYWtlIHRoZW0gbG9vayB0aGUgYmVzdCBwb3NzaWJsZSBmb3IgdGhlaXIgcGFydGljdWxhciBicm93c2Vycy4gVGhleSB1c3VhbGx5CisgYWxzbyBkbyBkaWZmZXJlbnQga2luZHMgb2YgamF2YXNjcmlwdCwgdmJzY3JpcHQgZXRjLgorCisgQXQgdGltZXMsIHlvdSB3aWxsIHNlZSB0aGF0IGdldHRpbmcgYSBwYWdlIHdpdGggY3VybCB3aWxsIG5vdCByZXR1cm4gdGhlIHNhbWUKKyBwYWdlIHRoYXQgeW91IHNlZSB3aGVuIGdldHRpbmcgdGhlIHBhZ2Ugd2l0aCB5b3VyIGJyb3dzZXIuIFRoZW4geW91IGtub3cgaXQKKyBpcyB0aW1lIHRvIHNldCB0aGUgVXNlciBBZ2VudCBmaWVsZCB0byBmb29sIHRoZSBzZXJ2ZXIgaW50byB0aGlua2luZyB5b3UncmUKKyBvbmUgb2YgdGhvc2UgYnJvd3NlcnMuCisKKyBUbyBtYWtlIGN1cmwgbG9vayBsaWtlIEludGVybmV0IEV4cGxvcmVyIDUgb24gYSBXaW5kb3dzIDIwMDAgYm94OgorCisgIGN1cmwgLS11c2VyLWFnZW50ICJNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA1LjAxOyBXaW5kb3dzIE5UIDUuMCkiIFtVUkxdCisKKyBPciB3aHkgbm90IGxvb2sgbGlrZSB5b3UncmUgdXNpbmcgTmV0c2NhcGUgNC43MyBvbiBhbiBvbGQgTGludXggYm94OgorCisgIGN1cmwgLS11c2VyLWFnZW50ICJNb3ppbGxhLzQuNzMgW2VuXSAoWDExOyBVOyBMaW51eCAyLjIuMTUgaTY4NikiIFtVUkxdCisKKzkuIFJlZGlyZWN0cworCisgV2hlbiBhIHJlc291cmNlIGlzIHJlcXVlc3RlZCBmcm9tIGEgc2VydmVyLCB0aGUgcmVwbHkgZnJvbSB0aGUgc2VydmVyIG1heQorIGluY2x1ZGUgYSBoaW50IGFib3V0IHdoZXJlIHRoZSBicm93c2VyIHNob3VsZCBnbyBuZXh0IHRvIGZpbmQgdGhpcyBwYWdlLCBvciBhCisgbmV3IHBhZ2Uga2VlcGluZyBuZXdseSBnZW5lcmF0ZWQgb3V0cHV0LiBUaGUgaGVhZGVyIHRoYXQgdGVsbHMgdGhlIGJyb3dzZXIKKyB0byByZWRpcmVjdCBpcyBMb2NhdGlvbjouCisKKyBDdXJsIGRvZXMgbm90IGZvbGxvdyBMb2NhdGlvbjogaGVhZGVycyBieSBkZWZhdWx0LCBidXQgd2lsbCBzaW1wbHkgZGlzcGxheQorIHN1Y2ggcGFnZXMgaW4gdGhlIHNhbWUgbWFubmVyIGl0IGRpc3BsYXkgYWxsIEhUVFAgcmVwbGllcy4gSXQgZG9lcyBob3dldmVyCisgZmVhdHVyZSBhbiBvcHRpb24gdGhhdCB3aWxsIG1ha2UgaXQgYXR0ZW1wdCB0byBmb2xsb3cgdGhlIExvY2F0aW9uOiBwb2ludGVycy4KKworIFRvIHRlbGwgY3VybCB0byBmb2xsb3cgYSBMb2NhdGlvbjoKKworICAgICAgICBjdXJsIC0tbG9jYXRpb24gaHR0cDovL3d3dy5leGFtcGxlLmNvbQorCisgSWYgeW91IHVzZSBjdXJsIHRvIFBPU1QgdG8gYSBzaXRlIHRoYXQgaW1tZWRpYXRlbHkgcmVkaXJlY3RzIHlvdSB0byBhbm90aGVyCisgcGFnZSwgeW91IGNhbiBzYWZlbHkgdXNlIC0tbG9jYXRpb24gKC1MKSBhbmQgLS1kYXRhLy0tZm9ybSB0b2dldGhlci4gQ3VybCB3aWxsCisgb25seSB1c2UgUE9TVCBpbiB0aGUgZmlyc3QgcmVxdWVzdCwgYW5kIHRoZW4gcmV2ZXJ0IHRvIEdFVCBpbiB0aGUgZm9sbG93aW5nCisgb3BlcmF0aW9ucy4KKworMTAuIENvb2tpZXMKKworIFRoZSB3YXkgdGhlIHdlYiBicm93c2VycyBkbyAiY2xpZW50IHNpZGUgc3RhdGUgY29udHJvbCIgaXMgYnkgdXNpbmcKKyBjb29raWVzLiBDb29raWVzIGFyZSBqdXN0IG5hbWVzIHdpdGggYXNzb2NpYXRlZCBjb250ZW50cy4gVGhlIGNvb2tpZXMgYXJlCisgc2VudCB0byB0aGUgY2xpZW50IGJ5IHRoZSBzZXJ2ZXIuIFRoZSBzZXJ2ZXIgdGVsbHMgdGhlIGNsaWVudCBmb3Igd2hhdCBwYXRoCisgYW5kIGhvc3QgbmFtZSBpdCB3YW50cyB0aGUgY29va2llIHNlbnQgYmFjaywgYW5kIGl0IGFsc28gc2VuZHMgYW4gZXhwaXJhdGlvbgorIGRhdGUgYW5kIGEgZmV3IG1vcmUgcHJvcGVydGllcy4KKworIFdoZW4gYSBjbGllbnQgY29tbXVuaWNhdGVzIHdpdGggYSBzZXJ2ZXIgd2l0aCBhIG5hbWUgYW5kIHBhdGggYXMgcHJldmlvdXNseQorIHNwZWNpZmllZCBpbiBhIHJlY2VpdmVkIGNvb2tpZSwgdGhlIGNsaWVudCBzZW5kcyBiYWNrIHRoZSBjb29raWVzIGFuZCB0aGVpcgorIGNvbnRlbnRzIHRvIHRoZSBzZXJ2ZXIsIHVubGVzcyBvZiBjb3Vyc2UgdGhleSBhcmUgZXhwaXJlZC4KKworIE1hbnkgYXBwbGljYXRpb25zIGFuZCBzZXJ2ZXJzIHVzZSB0aGlzIG1ldGhvZCB0byBjb25uZWN0IGEgc2VyaWVzIG9mIHJlcXVlc3RzCisgaW50byBhIHNpbmdsZSBsb2dpY2FsIHNlc3Npb24uIFRvIGJlIGFibGUgdG8gdXNlIGN1cmwgaW4gc3VjaCBvY2Nhc2lvbnMsIHdlCisgbXVzdCBiZSBhYmxlIHRvIHJlY29yZCBhbmQgc2VuZCBiYWNrIGNvb2tpZXMgdGhlIHdheSB0aGUgd2ViIGFwcGxpY2F0aW9uCisgZXhwZWN0cyB0aGVtLiBUaGUgc2FtZSB3YXkgYnJvd3NlcnMgZGVhbCB3aXRoIHRoZW0uCisKKyBUaGUgc2ltcGxlc3Qgd2F5IHRvIHNlbmQgYSBmZXcgY29va2llcyB0byB0aGUgc2VydmVyIHdoZW4gZ2V0dGluZyBhIHBhZ2Ugd2l0aAorIGN1cmwgaXMgdG8gYWRkIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSBsaWtlOgorCisgICAgICAgIGN1cmwgLS1jb29raWUgIm5hbWU9RGFuaWVsIiBodHRwOi8vd3d3LmV4YW1wbGUuY29tCisKKyBDb29raWVzIGFyZSBzZW50IGFzIGNvbW1vbiBIVFRQIGhlYWRlcnMuIFRoaXMgaXMgcHJhY3RpY2FsIGFzIGl0IGFsbG93cyBjdXJsCisgdG8gcmVjb3JkIGNvb2tpZXMgc2ltcGx5IGJ5IHJlY29yZGluZyBoZWFkZXJzLiBSZWNvcmQgY29va2llcyB3aXRoIGN1cmwgYnkKKyB1c2luZyB0aGUgLS1kdW1wLWhlYWRlciAoLUQpIG9wdGlvbiBsaWtlOgorCisgICAgICAgIGN1cmwgLS1kdW1wLWhlYWRlciBoZWFkZXJzX2FuZF9jb29raWVzIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20KKworIChUYWtlIG5vdGUgdGhhdCB0aGUgLS1jb29raWUtamFyIG9wdGlvbiBkZXNjcmliZWQgYmVsb3cgaXMgYSBiZXR0ZXIgd2F5IHRvCisgc3RvcmUgY29va2llcy4pCisKKyBDdXJsIGhhcyBhIGZ1bGwgYmxvd24gY29va2llIHBhcnNpbmcgZW5naW5lIGJ1aWx0LWluIHRoYXQgY29tZXMgdG8gdXNlIGlmIHlvdQorIHdhbnQgdG8gcmVjb25uZWN0IHRvIGEgc2VydmVyIGFuZCB1c2UgY29va2llcyB0aGF0IHdlcmUgc3RvcmVkIGZyb20gYQorIHByZXZpb3VzIGNvbm5lY3Rpb24gKG9yIGhhbmRpY3JhZnRlZCBtYW51YWxseSB0byBmb29sIHRoZSBzZXJ2ZXIgaW50bworIGJlbGlldmluZyB5b3UgaGFkIGEgcHJldmlvdXMgY29ubmVjdGlvbikuIFRvIHVzZSBwcmV2aW91c2x5IHN0b3JlZCBjb29raWVzLAorIHlvdSBydW4gY3VybCBsaWtlOgorCisgICAgICAgIGN1cmwgLS1jb29raWUgc3RvcmVkX2Nvb2tpZXNfaW5fZmlsZSBodHRwOi8vd3d3LmV4YW1wbGUuY29tCisKKyBDdXJsJ3MgImNvb2tpZSBlbmdpbmUiIGdldHMgZW5hYmxlZCB3aGVuIHlvdSB1c2UgdGhlIC0tY29va2llIG9wdGlvbi4gSWYgeW91Cisgb25seSB3YW50IGN1cmwgdG8gdW5kZXJzdGFuZCByZWNlaXZlZCBjb29raWVzLCB1c2UgLS1jb29raWUgd2l0aCBhIGZpbGUgdGhhdAorIGRvZXNuJ3QgZXhpc3QuIEV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGxldCBjdXJsIHVuZGVyc3RhbmQgY29va2llcyBmcm9tIGEKKyBwYWdlIGFuZCBmb2xsb3cgYSBsb2NhdGlvbiAoYW5kIHRodXMgcG9zc2libHkgc2VuZCBiYWNrIGNvb2tpZXMgaXQgcmVjZWl2ZWQpLAorIHlvdSBjYW4gaW52b2tlIGl0IGxpa2U6CisKKyAgICAgICAgY3VybCAtLWNvb2tpZSBuYWRhIC0tbG9jYXRpb24gaHR0cDovL3d3dy5leGFtcGxlLmNvbQorCisgQ3VybCBoYXMgdGhlIGFiaWxpdHkgdG8gcmVhZCBhbmQgd3JpdGUgY29va2llIGZpbGVzIHRoYXQgdXNlIHRoZSBzYW1lIGZpbGUKKyBmb3JtYXQgdGhhdCBOZXRzY2FwZSBhbmQgTW96aWxsYSBkby4gSXQgaXMgYSBjb252ZW5pZW50IHdheSB0byBzaGFyZSBjb29raWVzCisgYmV0d2VlbiBicm93c2VycyBhbmQgYXV0b21hdGljIHNjcmlwdHMuIFRoZSAtLWNvb2tpZSAoLWIpIHN3aXRjaAorIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBpZiBhIGdpdmVuIGZpbGUgaXMgc3VjaCBhIGNvb2tpZSBmaWxlIGFuZCBwYXJzZXMgaXQsCisgYW5kIGJ5IHVzaW5nIHRoZSAtLWNvb2tpZS1qYXIgKC1jKSBvcHRpb24geW91J2xsIG1ha2UgY3VybCB3cml0ZSBhIG5ldyBjb29raWUKKyBmaWxlIGF0IHRoZSBlbmQgb2YgYW4gb3BlcmF0aW9uOgorCisgICAgICAgIGN1cmwgLS1jb29raWUgY29va2llcy50eHQgLS1jb29raWUtamFyIG5ld2Nvb2tpZXMudHh0IFwKKyAgICAgICAgaHR0cDovL3d3dy5leGFtcGxlLmNvbQorCisxMS4gSFRUUFMKKworIFRoZXJlIGFyZSBhIGZldyB3YXlzIHRvIGRvIHNlY3VyZSBIVFRQIHRyYW5zZmVycy4gVGhlIGJ5IGZhciBtb3N0IGNvbW1vbgorIHByb3RvY29sIGZvciBkb2luZyB0aGlzIGlzIHdoYXQgaXMgZ2VuZXJhbGx5IGtub3duIGFzIEhUVFBTLCBIVFRQIG92ZXIKKyBTU0wuIFNTTCBlbmNyeXB0cyBhbGwgdGhlIGRhdGEgdGhhdCBpcyBzZW50IGFuZCByZWNlaXZlZCBvdmVyIHRoZSBuZXR3b3JrIGFuZAorIHRodXMgbWFrZXMgaXQgaGFyZGVyIGZvciBhdHRhY2tlcnMgdG8gc3B5IG9uIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KKworIFNTTCAob3IgVExTIGFzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgc3RhbmRhcmQgaXMgY2FsbGVkKSBvZmZlcnMgYQorIHRydWNrbG9hZCBvZiBhZHZhbmNlZCBmZWF0dXJlcyB0byBhbGxvdyBhbGwgdGhvc2UgZW5jcnlwdGlvbnMgYW5kIGtleQorIGluZnJhc3RydWN0dXJlIG1lY2hhbmlzbXMgZW5jcnlwdGVkIEhUVFAgcmVxdWlyZXMuCisKKyBDdXJsIHN1cHBvcnRzIGVuY3J5cHRlZCBmZXRjaGVzIHRoYW5rcyB0byB0aGUgZnJlZWx5IGF2YWlsYWJsZSBPcGVuU1NMCisgbGlicmFyaWVzLiBUbyBnZXQgYSBwYWdlIGZyb20gYSBIVFRQUyBzZXJ2ZXIsIHNpbXBseSBydW4gY3VybCBsaWtlOgorCisgICAgICAgIGN1cmwgaHR0cHM6Ly9zZWN1cmUuZXhhbXBsZS5jb20KKworIDExLjEgQ2VydGlmaWNhdGVzCisKKyAgSW4gdGhlIEhUVFBTIHdvcmxkLCB5b3UgdXNlIGNlcnRpZmljYXRlcyB0byB2YWxpZGF0ZSB0aGF0IHlvdSBhcmUgdGhlIG9uZQorICB5b3UgY2xhaW0gdG8gYmUsIGFzIGFuIGFkZGl0aW9uIHRvIG5vcm1hbCBwYXNzd29yZHMuIEN1cmwgc3VwcG9ydHMgY2xpZW50LQorICBzaWRlIGNlcnRpZmljYXRlcy4gQWxsIGNlcnRpZmljYXRlcyBhcmUgbG9ja2VkIHdpdGggYSBwYXNzIHBocmFzZSwgd2hpY2ggeW91CisgIG5lZWQgdG8gZW50ZXIgYmVmb3JlIHRoZSBjZXJ0aWZpY2F0ZSBjYW4gYmUgdXNlZCBieSBjdXJsLiBUaGUgcGFzcyBwaHJhc2UKKyAgY2FuIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGlmIG5vdCwgZW50ZXJlZCBpbnRlcmFjdGl2ZWx5IHdoZW4KKyAgY3VybCBxdWVyaWVzIGZvciBpdC4gVXNlIGEgY2VydGlmaWNhdGUgd2l0aCBjdXJsIG9uIGEgSFRUUFMgc2VydmVyIGxpa2U6CisKKyAgICAgICAgY3VybCAtLWNlcnQgbXljZXJ0LnBlbSBodHRwczovL3NlY3VyZS5leGFtcGxlLmNvbQorCisgIGN1cmwgYWxzbyB0cmllcyB0byB2ZXJpZnkgdGhhdCB0aGUgc2VydmVyIGlzIHdobyBpdCBjbGFpbXMgdG8gYmUsIGJ5CisgIHZlcmlmeWluZyB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUgYWdhaW5zdCBhIGxvY2FsbHkgc3RvcmVkIENBIGNlcnQKKyAgYnVuZGxlLiBGYWlsaW5nIHRoZSB2ZXJpZmljYXRpb24gd2lsbCBjYXVzZSBjdXJsIHRvIGRlbnkgdGhlIGNvbm5lY3Rpb24uIFlvdQorICBtdXN0IHRoZW4gdXNlIC0taW5zZWN1cmUgKC1rKSBpbiBjYXNlIHlvdSB3YW50IHRvIHRlbGwgY3VybCB0byBpZ25vcmUgdGhhdAorICB0aGUgc2VydmVyIGNhbid0IGJlIHZlcmlmaWVkLgorCisgIE1vcmUgYWJvdXQgc2VydmVyIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBhbmQgY2EgY2VydCBidW5kbGVzIGNhbiBiZSByZWFkCisgIGluIHRoZSBTU0xDRVJUUyBkb2N1bWVudCwgYXZhaWxhYmxlIG9ubGluZSBoZXJlOgorCisgICAgICAgIGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9zc2xjZXJ0cy5odG1sCisKKzEyLiBDdXN0b20gUmVxdWVzdCBFbGVtZW50cworCisgRG9pbmcgZmFuY3kgc3R1ZmYsIHlvdSBtYXkgbmVlZCB0byBhZGQgb3IgY2hhbmdlIGVsZW1lbnRzIG9mIGEgc2luZ2xlIGN1cmwKKyByZXF1ZXN0LgorCisgRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hhbmdlIHRoZSBQT1NUIHJlcXVlc3QgdG8gYSBQUk9QRklORCBhbmQgc2VuZCB0aGUgZGF0YQorIGFzICJDb250ZW50LVR5cGU6IHRleHQveG1sIiAoaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBDb250ZW50LVR5cGUpIGxpa2UgdGhpczoKKworICAgICAgICAgY3VybCAtLWRhdGEgIjx4bWw+IiAtLWhlYWRlciAiQ29udGVudC1UeXBlOiB0ZXh0L3htbCIgXAorICAgICAgICAgICAgICAtLXJlcXVlc3QgUFJPUEZJTkQgdXJsLmNvbQorCisgWW91IGNhbiBkZWxldGUgYSBkZWZhdWx0IGhlYWRlciBieSBwcm92aWRpbmcgb25lIHdpdGhvdXQgY29udGVudC4gTGlrZSB5b3UKKyBjYW4gcnVpbiB0aGUgcmVxdWVzdCBieSBjaG9wcGluZyBvZmYgdGhlIEhvc3Q6IGhlYWRlcjoKKworICAgICAgICBjdXJsIC0taGVhZGVyICJIb3N0OiIgaHR0cDovL3d3dy5leGFtcGxlLmNvbQorCisgWW91IGNhbiBhZGQgaGVhZGVycyB0aGUgc2FtZSB3YXkuIFlvdXIgc2VydmVyIG1heSB3YW50IGEgIkRlc3RpbmF0aW9uOiIKKyBoZWFkZXIsIGFuZCB5b3UgY2FuIGFkZCBpdDoKKworICAgICAgICBjdXJsIC0taGVhZGVyICJEZXN0aW5hdGlvbjogaHR0cDovL25vd2hlcmUiIGh0dHA6Ly9leGFtcGxlLmNvbQorCisxMy4gV2ViIExvZ2luCisKKyBXaGlsZSBub3Qgc3RyaWN0bHkganVzdCBIVFRQIHJlbGF0ZWQsIGl0IHN0aWxsIGNhdXNlIGEgbG90IG9mIHBlb3BsZSBwcm9ibGVtcworIHNvIGhlcmUncyB0aGUgZXhlY3V0aXZlIHJ1bi1kb3duIG9mIGhvdyB0aGUgdmFzdCBtYWpvcml0eSBvZiBhbGwgbG9naW4gZm9ybXMKKyB3b3JrIGFuZCBob3cgdG8gbG9naW4gdG8gdGhlbSB1c2luZyBjdXJsLgorCisgSXQgY2FuIGFsc28gYmUgbm90ZWQgdGhhdCB0byBkbyB0aGlzIHByb3Blcmx5IGluIGFuIGF1dG9tYXRlZCBmYXNoaW9uLCB5b3UKKyB3aWxsIG1vc3QgY2VydGFpbmx5IG5lZWQgdG8gc2NyaXB0IHRoaW5ncyBhbmQgZG8gbXVsdGlwbGUgY3VybCBpbnZva2VzIGV0Yy4KKworIEZpcnN0LCBzZXJ2ZXJzIG1vc3RseSB1c2UgY29va2llcyB0byB0cmFjayB0aGUgbG9nZ2VkLWluIHN0YXR1cyBvZiB0aGUKKyBjbGllbnQsIHNvIHlvdSB3aWxsIG5lZWQgdG8gY2FwdHVyZSB0aGUgY29va2llcyB5b3UgcmVjZWl2ZSBpbiB0aGUKKyByZXNwb25zZXMuIFRoZW4sIG1hbnkgc2l0ZXMgYWxzbyBzZXQgYSBzcGVjaWFsIGNvb2tpZSBvbiB0aGUgbG9naW4gcGFnZSAodG8KKyBtYWtlIHN1cmUgeW91IGdvdCB0aGVyZSB0aHJvdWdoIHRoZWlyIGxvZ2luIHBhZ2UpIHNvIHlvdSBzaG91bGQgbWFrZSBhIGhhYml0Cisgb2YgZmlyc3QgZ2V0dGluZyB0aGUgbG9naW4tZm9ybSBwYWdlIHRvIGNhcHR1cmUgdGhlIGNvb2tpZXMgc2V0IHRoZXJlLgorCisgU29tZSB3ZWItYmFzZWQgbG9naW4gc3lzdGVtcyBmZWF0dXJlcyB2YXJpb3VzIGFtb3VudHMgb2YgamF2YXNjcmlwdCwgYW5kCisgc29tZXRpbWVzIHRoZXkgdXNlIHN1Y2ggY29kZSB0byBzZXQgb3IgbW9kaWZ5IGNvb2tpZSBjb250ZW50cy4gUG9zc2libHkgdGhleQorIGRvIHRoYXQgdG8gcHJldmVudCBwcm9ncmFtbWVkIGxvZ2lucywgbGlrZSB0aGlzIG1hbnVhbCBkZXNjcmliZXMgaG93IHRvLi4uCisgQW55d2F5LCBpZiByZWFkaW5nIHRoZSBjb2RlIGlzbid0IGVub3VnaCB0byBsZXQgeW91IHJlcGVhdCB0aGUgYmVoYXZpb3IKKyBtYW51YWxseSwgY2FwdHVyaW5nIHRoZSBIVFRQIHJlcXVlc3RzIGRvbmUgYnkgeW91ciBicm93ZXJzIGFuZCBhbmFseXppbmcgdGhlCisgc2VudCBjb29raWVzIGlzIHVzdWFsbHkgYSB3b3JraW5nIG1ldGhvZCB0byB3b3JrIG91dCBob3cgdG8gc2hvcnRjdXQgdGhlCisgamF2YXNjcmlwdCBuZWVkLgorCisgSW4gdGhlIGFjdHVhbCA8Zm9ybT4gdGFnIGZvciB0aGUgbG9naW4sIGxvdHMgb2Ygc2l0ZXMgZmlsbC1pbiByYW5kb20vc2Vzc2lvbgorIG9yIG90aGVyd2lzZSBzZWNyZXRseSBnZW5lcmF0ZWQgaGlkZGVuIHRhZ3MgYW5kIHlvdSBtYXkgbmVlZCB0byBmaXJzdCBjYXB0dXJlCisgdGhlIEhUTUwgY29kZSBmb3IgdGhlIGxvZ2luIGZvcm0gYW5kIGV4dHJhY3QgYWxsIHRoZSBoaWRkZW4gZmllbGRzIHRvIGJlIGFibGUKKyB0byBkbyBhIHByb3BlciBsb2dpbiBQT1NULiBSZW1lbWJlciB0aGF0IHRoZSBjb250ZW50cyBuZWVkIHRvIGJlIFVSTCBlbmNvZGVkCisgd2hlbiBzZW50IGluIGEgbm9ybWFsIFBPU1QuCisKKzE0LiBEZWJ1ZworCisgTWFueSB0aW1lcyB3aGVuIHlvdSBydW4gY3VybCBvbiBhIHNpdGUsIHlvdSdsbCBub3RpY2UgdGhhdCB0aGUgc2l0ZSBkb2Vzbid0Cisgc2VlbSB0byByZXNwb25kIHRoZSBzYW1lIHdheSB0byB5b3VyIGN1cmwgcmVxdWVzdHMgYXMgaXQgZG9lcyB0byB5b3VyCisgYnJvd3NlcidzLgorCisgVGhlbiB5b3UgbmVlZCB0byBzdGFydCBtYWtpbmcgeW91ciBjdXJsIHJlcXVlc3RzIG1vcmUgc2ltaWxhciB0byB5b3VyCisgYnJvd3NlcidzIHJlcXVlc3RzOgorCisgKiBVc2UgdGhlIC0tdHJhY2UtYXNjaWkgb3B0aW9uIHRvIHN0b3JlIGZ1bGx5IGRldGFpbGVkIGxvZ3Mgb2YgdGhlIHJlcXVlc3RzCisgICBmb3IgZWFzaWVyIGFuYWx5emluZyBhbmQgYmV0dGVyIHVuZGVyc3RhbmRpbmcKKworICogTWFrZSBzdXJlIHlvdSBjaGVjayBmb3IgYW5kIHVzZSBjb29raWVzIHdoZW4gbmVlZGVkIChib3RoIHJlYWRpbmcgd2l0aAorICAgLS1jb29raWUgYW5kIHdyaXRpbmcgd2l0aCAtLWNvb2tpZS1qYXIpCisKKyAqIFNldCB1c2VyLWFnZW50IHRvIG9uZSBsaWtlIGEgcmVjZW50IHBvcHVsYXIgYnJvd3NlciBkb2VzCisKKyAqIFNldCByZWZlcmVyIGxpa2UgaXQgaXMgc2V0IGJ5IHRoZSBicm93c2VyCisKKyAqIElmIHlvdSB1c2UgUE9TVCwgbWFrZSBzdXJlIHlvdSBzZW5kIGFsbCB0aGUgZmllbGRzIGFuZCBpbiB0aGUgc2FtZSBvcmRlciBhcworICAgdGhlIGJyb3dzZXIgZG9lcyBpdC4gKFNlZSBjaGFwdGVyIDQuNSBhYm92ZSkKKworIEEgdmVyeSBnb29kIGhlbHBlciB0byBtYWtlIHN1cmUgeW91IGRvIHRoaXMgcmlnaHQsIGlzIHRoZSBMaXZlSFRUUEhlYWRlciB0b29sCisgdGhhdCBsZXRzIHlvdSB2aWV3IGFsbCBoZWFkZXJzIHlvdSBzZW5kIGFuZCByZWNlaXZlIHdpdGggTW96aWxsYS9GaXJlZm94CisgKGV2ZW4gd2hlbiB1c2luZyBIVFRQUykuCisKKyBBIG1vcmUgcmF3IGFwcHJvYWNoIGlzIHRvIGNhcHR1cmUgdGhlIEhUVFAgdHJhZmZpYyBvbiB0aGUgbmV0d29yayB3aXRoIHRvb2xzCisgc3VjaCBhcyBldGhlcmVhbCBvciB0Y3BkdW1wIGFuZCBjaGVjayB3aGF0IGhlYWRlcnMgdGhhdCB3ZXJlIHNlbnQgYW5kCisgcmVjZWl2ZWQgYnkgdGhlIGJyb3dzZXIuIChIVFRQUyBtYWtlcyB0aGlzIHRlY2huaXF1ZSBpbmVmZmljaWVudC4pCisKKzE1LiBSZWZlcmVuY2VzCisKKyBSRkMgMjYxNiBpcyBhIG11c3QgdG8gcmVhZCBpZiB5b3Ugd2FudCBpbi1kZXB0aCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBIVFRQCisgcHJvdG9jb2wuCisKKyBSRkMgMzk4NiBleHBsYWlucyB0aGUgVVJMIHN5bnRheC4KKworIFJGQyAyMTA5IGRlZmluZXMgaG93IGNvb2tpZXMgYXJlIHN1cHBvc2VkIHRvIHdvcmsuCisKKyBSRkMgMTg2NyBkZWZpbmVzIHRoZSBIVFRQIHBvc3QgdXBsb2FkIGZvcm1hdC4KKworIGh0dHA6Ly9jdXJsLmhheHguc2UgaXMgdGhlIGhvbWUgb2YgdGhlIGNVUkwgcHJvamVjdApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9WRVJTSU9OUyBiL2N1cmwtNy4yNS4wL2RvY3MvVkVSU0lPTlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3MDA4OQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvVkVSU0lPTlMKQEAgLTAsMCArMSw2MCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKworVmVyc2lvbiBOdW1iZXJzIGFuZCBSZWxlYXNlcworCisgQ3VybCBpcyBub3Qgb25seSBjdXJsLiBDdXJsIGlzIGFsc28gbGliY3VybC4gVGhleSdyZSBhY3R1YWxseSBpbmRpdmlkdWFsbHkKKyB2ZXJzaW9uZWQsIGJ1dCB0aGV5IG1vc3RseSBmb2xsb3cgZWFjaCBvdGhlciByYXRoZXIgY2xvc2VseS4KKworIFRoZSB2ZXJzaW9uIG51bWJlcmluZyBpcyBhbHdheXMgYnVpbHQgdXAgdXNpbmcgdGhlIHNhbWUgc3lzdGVtOgorCisgICAgICAgIFguWVsuWl0KKworIFdoZXJlCisgICBYIGlzIG1haW4gdmVyc2lvbiBudW1iZXIKKyAgIFkgaXMgcmVsZWFzZSBudW1iZXIKKyAgIFogaXMgcGF0Y2ggbnVtYmVyCisKKyBPbmUgb2YgdGhlc2UgbnVtYmVycyB3aWxsIGdldCBidW1wZWQgaW4gZWFjaCBuZXcgcmVsZWFzZS4gVGhlIG51bWJlcnMgdG8gdGhlCisgcmlnaHQgb2YgYSBidW1wZWQgbnVtYmVyIHdpbGwgYmUgcmVzZXQgdG8gemVyby4gSWYgWiBpcyB6ZXJvLCBpdCBtYXkgbm90IGJlCisgaW5jbHVkZWQgaW4gdGhlIHZlcnNpb24gbnVtYmVyLgorCisgVGhlIG1haW4gdmVyc2lvbiBudW1iZXIgd2lsbCBnZXQgYnVtcGVkIHdoZW4gKnJlYWxseSogYmlnLCB3b3JsZCBjb2xsaWRpbmcKKyBjaGFuZ2VzIGFyZSBtYWRlLiBUaGUgcmVsZWFzZSBudW1iZXIgaXMgYnVtcGVkIHdoZW4gY2hhbmdlcyBhcmUgcGVyZm9ybWVkIG9yCisgdGhpbmdzL2ZlYXR1cmVzIGFyZSBhZGRlZC4gVGhlIHBhdGNoIG51bWJlciBpcyBidW1wZWQgd2hlbiB0aGUgY2hhbmdlcyBhcmUKKyBtZXJlIGJ1Z2ZpeGVzLgorCisgSXQgbWVhbnMgdGhhdCBhZnRlciByZWxlYXNlIDEuMi4zLCB3ZSBjYW4gcmVsZWFzZSAyLjAgaWYgc29tZXRoaW5nIHJlYWxseSBiaWcKKyBoYXMgYmVlbiBtYWRlLCAxLjMgaWYgbm90IHRoYXQgYmlnIGNoYW5nZXMgd2VyZSBtYWRlIG9yIDEuMi40IGlmIG1vc3RseSBidWdzCisgd2VyZSBmaXhlZC4KKworIEJ1bXBpbmcsIGFzIGluIGluY3JlYXNpbmcgdGhlIG51bWJlciB3aXRoIDEsIGlzIHVuY29uZGl0aW9uYWxseSBvbmx5CisgYWZmZWN0aW5nIG9uZSBvZiB0aGUgbnVtYmVycyAoZXhjZXB0IHRoZSBvbmVzIHRvIHRoZSByaWdodCBvZiBpdCwgdGhhdCBtYXkgYmUKKyBzZXQgdG8gemVybykuIDEgYmVjb21lcyAyLCAzIGJlY29tZXMgNCwgOSBiZWNvbWVzIDEwLCA4OCBiZWNvbWVzIDg5IGFuZCA5OQorIGJlY29tZXMgMTAwLiBTbywgYWZ0ZXIgMS4yLjkgY29tZXMgMS4yLjEwLiBBZnRlciAzLjk5LjMsIDMuMTAwIG1pZ2h0IGNvbWUuCisKKyBBbGwgb3JpZ2luYWwgY3VybCBzb3VyY2UgcmVsZWFzZSBhcmNoaXZlcyBhcmUgbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBsaWJjdXJsCisgdmVyc2lvbiAobm90IGFjY29yZGluZyB0byB0aGUgY3VybCBjbGllbnQgdmVyc2lvbiB0aGF0LCBhcyBzYWlkIGJlZm9yZSwgbWlnaHQKKyBkaWZmZXIpLgorCisgQXMgYSBzZXJ2aWNlIHRvIGFueSBhcHBsaWNhdGlvbiB0aGF0IG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCBuZXcgbGliY3VybAorIGZlYXR1cmVzIHdoaWxlIHN0aWxsIGJlaW5nIGFibGUgdG8gYnVpbGQgd2l0aCBvbGRlciB2ZXJzaW9ucywgYWxsIHJlbGVhc2VzCisgaGF2ZSB0aGUgbGliY3VybCB2ZXJzaW9uIHN0b3JlZCBpbiB0aGUgY3VybC9jdXJsdmVyLmggZmlsZSB1c2luZyBhIHN0YXRpYworIG51bWJlcmluZyBzY2hlbWUgdGhhdCBjYW4gYmUgdXNlZCBmb3IgY29tcGFyaXNvbi4gVGhlIHZlcnNpb24gbnVtYmVyIGlzCisgZGVmaW5lZCBhczoKKworICAgICAgICAjZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9OVU0gMHhYWFlZWloKKworIFdoZXJlIFhYLCBZWSBhbmQgWlogYXJlIHRoZSBtYWluIHZlcnNpb24sIHJlbGVhc2UgYW5kIHBhdGNoIG51bWJlcnMgaW4KKyBoZXhhZGVjaW1hbC4gQWxsIHRocmVlIG51bWJlciBmaWVsZHMgYXJlIGFsd2F5cyByZXByZXNlbnRlZCB1c2luZyB0d28gZGlnaXRzCisgKGVpZ2h0IGJpdHMgZWFjaCkuIDEuMiB3b3VsZCBhcHBlYXIgYXMgIjB4MDEwMjAwIiB3aGlsZSB2ZXJzaW9uIDkuMTEuNworIGFwcGVhcnMgYXMgIjB4MDkwYjA3Ii4KKworIFRoaXMgNi1kaWdpdCBoZXhhZGVjaW1hbCBudW1iZXIgaXMgYWx3YXlzIGEgZ3JlYXRlciBudW1iZXIgaW4gYSBtb3JlIHJlY2VudAorIHJlbGVhc2UuIEl0IG1ha2VzIGNvbXBhcmlzb25zIHdpdGggZ3JlYXRlciB0aGFuIGFuZCBsZXNzIHRoYW4gd29yay4KKworIFRoaXMgbnVtYmVyIGlzIGFsc28gYXZhaWxhYmxlIGFzIHRocmVlIHNlcGFyYXRlIGRlZmluZXM6CisgTElCQ1VSTF9WRVJTSU9OX01BSk9SLCBMSUJDVVJMX1ZFUlNJT05fTUlOT1IgYW5kIExJQkNVUkxfVkVSU0lPTl9QQVRDSC4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvY3VybC1jb25maWcuMSBiL2N1cmwtNy4yNS4wL2RvY3MvY3VybC1jb25maWcuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGY0ZTJiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9jdXJsLWNvbmZpZy4xCkBAIC0wLDAgKzEsOTkgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuVEggY3VybC1jb25maWcgMSAiMjUgT2N0IDIwMDciICJDdXJsIDcuMTcuMSIgImN1cmwtY29uZmlnIG1hbnVhbCIKKy5TSCBOQU1FCitjdXJsLWNvbmZpZyBcLSBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBsaWJjdXJsIGluc3RhbGxhdGlvbgorLlNIIFNZTk9QU0lTCisuQiBjdXJsLWNvbmZpZyBbb3B0aW9uc10KKy5TSCBERVNDUklQVElPTgorLkIgY3VybC1jb25maWcKK2Rpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJsIGFuZCBsaWJjdXJsIGluc3RhbGxhdGlvbi4KKy5TSCBPUFRJT05TCisuSVAgIi0tY2EiCitEaXNwbGF5cyB0aGUgYnVpbHQtaW4gcGF0aCB0byB0aGUgQ0EgY2VydCBidW5kbGUgdGhpcyBsaWJjdXJsIHVzZXMuCisuSVAgIi0tY2MiCitEaXNwbGF5cyB0aGUgY29tcGlsZXIgdXNlZCB0byBidWlsZCBsaWJjdXJsLgorLklQICItLWNmbGFncyIKK1NldCBvZiBjb21waWxlciBvcHRpb25zIChDRkxBR1MpIHRvIHVzZSB3aGVuIGNvbXBpbGluZyBmaWxlcyB0aGF0IHVzZQorbGliY3VybC4gQ3VycmVudGx5IHRoYXQgaXMgb25seSB0aGUgaW5jbHVkZSBwYXRoIHRvIHRoZSBjdXJsIGluY2x1ZGUgZmlsZXMuCisuSVAgIi0tY2hlY2tmb3IgW3ZlcnNpb25dIgorU3BlY2lmeSB0aGUgb2xkZXN0IHBvc3NpYmxlIGxpYmN1cmwgdmVyc2lvbiBzdHJpbmcgeW91IHdhbnQsIGFuZCB0aGlzCitzY3JpcHQgd2lsbCByZXR1cm4gMCBpZiB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gaXMgbmV3IGVub3VnaCBvciBpdAorcmV0dXJucyAxIGFuZCBvdXRwdXRzIGEgdGV4dCBzYXlpbmcgdGhhdCB0aGUgY3VycmVudCB2ZXJzaW9uIGlzIG5vdCBuZXcKK2Vub3VnaC4gKEFkZGVkIGluIDcuMTUuNCkKKy5JUCAiLS1jb25maWd1cmUiCitEaXNwbGF5cyB0aGUgYXJndW1lbnRzIGdpdmVuIHRvIGNvbmZpZ3VyZSB3aGVuIGJ1aWxkaW5nIGN1cmwuCisuSVAgIi0tZmVhdHVyZSIKK0xpc3RzIHdoYXQgcGFydGljdWxhciBtYWluIGZlYXR1cmVzIHRoZSBpbnN0YWxsZWQgbGliY3VybCB3YXMgYnVpbHQgd2l0aC4gQXQKK3RoZSB0aW1lIG9mIHdyaXRpbmcsIHRoaXMgbGlzdCBtYXkgaW5jbHVkZSBTU0wsIEtSQjQgb3IgSVB2Ni4gRG8gbm90IGFzc3VtZQorYW55IHBhcnRpY3VsYXIgb3JkZXIuIFRoZSBrZXl3b3JkcyB3aWxsIGJlIHNlcGFyYXRlZCBieSBuZXdsaW5lcy4gVGhlcmUgbWF5IGJlCitub25lLCBvbmUsIG9yIHNldmVyYWwga2V5d29yZHMgaW4gdGhlIGxpc3QuCisuSVAgIi0taGVscCIKK0Rpc3BsYXlzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4KKy5JUCAiLS1saWJzIgorU2hvd3MgdGhlIGNvbXBsZXRlIHNldCBvZiBsaWJzIGFuZCBvdGhlciBsaW5rZXIgb3B0aW9ucyB5b3Ugd2lsbCBuZWVkIGluIG9yZGVyCit0byBsaW5rIHlvdXIgYXBwbGljYXRpb24gd2l0aCBsaWJjdXJsLgorLklQICItLXByZWZpeCIKK1RoaXMgaXMgdGhlIHByZWZpeCB1c2VkIHdoZW4gbGliY3VybCB3YXMgaW5zdGFsbGVkLiBMaWJjdXJsIGlzIHRoZW4gaW5zdGFsbGVkCitpbiAkcHJlZml4L2xpYiBhbmQgaXRzIGhlYWRlciBmaWxlcyBhcmUgaW5zdGFsbGVkIGluICRwcmVmaXgvaW5jbHVkZSBhbmQgc28KK29uLiBUaGUgcHJlZml4IGlzIHNldCB3aXRoICJjb25maWd1cmUgLS1wcmVmaXgiLgorLklQICItLXByb3RvY29scyIKK0xpc3RzIHdoYXQgcGFydGljdWxhciBwcm90b2NvbHMgdGhlIGluc3RhbGxlZCBsaWJjdXJsIHdhcyBidWlsdCB0byBzdXBwb3J0LiBBdAordGhlIHRpbWUgb2Ygd3JpdGluZywgdGhpcyBsaXN0IG1heSBpbmNsdWRlIEhUVFAsIEhUVFBTLCBGVFAsIEZUUFMsIEZJTEUsCitURUxORVQsIExEQVAsIERJQ1QuIERvIG5vdCBhc3N1bWUgYW55IHBhcnRpY3VsYXIgb3JkZXIuIFRoZSBwcm90b2NvbHMgd2lsbAorYmUgbGlzdGVkIHVzaW5nIHVwcGVyY2FzZSBhbmQgYXJlIHNlcGFyYXRlZCBieSBuZXdsaW5lcy4gVGhlcmUgbWF5IGJlIG5vbmUsCitvbmUsIG9yIHNldmVyYWwgcHJvdG9jb2xzIGluIHRoZSBsaXN0LiAoQWRkZWQgaW4gNy4xMy4wKQorLklQICItLXN0YXRpYy1saWJzIgorU2hvd3MgdGhlIGNvbXBsZXRlIHNldCBvZiBsaWJzIGFuZCBvdGhlciBsaW5rZXIgb3B0aW9ucyB5b3Ugd2lsbCBuZWVkIGluIG9yZGVyCit0byBsaW5rIHlvdXIgYXBwbGljYXRpb24gd2l0aCBsaWJjdXJsIHN0YXRpY2FsbHkuIChBZGRlZCBpbiA3LjE3LjEpCisuSVAgIi0tdmVyc2lvbiIKK091dHB1dHMgdmVyc2lvbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5zdGFsbGVkIGxpYmN1cmwuCisuSVAgIi0tdmVybnVtIgorT3V0cHV0cyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnN0YWxsZWQgbGliY3VybCwgaW4gbnVtZXJpY2FsIG1vZGUuCitUaGlzIG91dHB1dHMgdGhlIHZlcnNpb24gbnVtYmVyLCBpbiBoZXhhZGVjaW1hbCwgd2l0aCA4IGJpdHMgZm9yIGVhY2ggcGFydDsKK21ham9yLCBtaW5vciwgcGF0Y2guIFNvIHRoYXQgbGliY3VybCA3LjcuNCB3b3VsZCBhcHBlYXIgYXMgMDcwNzA0IGFuZCBsaWJjdXJsCisxMi4xMy4xNCB3b3VsZCBhcHBlYXIgYXMgMGMwZDBlLi4uIE5vdGUgdGhhdCB0aGUgaW5pdGlhbCB6ZXJvIG1pZ2h0IGJlCitvbWl0dGVkLiAoVGhpcyBvcHRpb24gd2FzIGJyb2tlbiBpbiB0aGUgNy4xNS4wIHJlbGVhc2UuKQorLlNIICJFWEFNUExFUyIKK1doYXQgbGlua2VyIG9wdGlvbnMgZG8gSSBuZWVkIHdoZW4gSSBsaW5rIHdpdGggbGliY3VybD8KKworICAkIGN1cmwtY29uZmlnIC0tbGlicworCitXaGF0IGNvbXBpbGVyIG9wdGlvbnMgZG8gSSBuZWVkIHdoZW4gSSBjb21waWxlIHVzaW5nIGxpYmN1cmwgZnVuY3Rpb25zPworCisgICQgY3VybC1jb25maWcgLS1jZmxhZ3MKKworSG93IGRvIEkga25vdyBpZiBsaWJjdXJsIHdhcyBidWlsdCB3aXRoIFNTTCBzdXBwb3J0PworCisgICQgY3VybC1jb25maWcgLS1mZWF0dXJlIHwgZ3JlcCBTU0wKKworV2hhdCdzIHRoZSBpbnN0YWxsZWQgbGliY3VybCB2ZXJzaW9uPworCisgICQgY3VybC1jb25maWcgLS12ZXJzaW9uCisKK0hvdyBkbyBJIGJ1aWxkIGEgc2luZ2xlIGZpbGUgd2l0aCBhIG9uZS1saW5lIGNvbW1hbmQ/CisKKyAgJCBgY3VybC1jb25maWcgLS1jYyAtLWNmbGFncyAtLWxpYnNgIC1vIGV4YW1wbGUgZXhhbXBsZS5jCisKKy5TSCAiU0VFIEFMU08iCisuQlIgY3VybCAoMSkKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvY3VybC1jb25maWcuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvY3VybC1jb25maWcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTJkMzM4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9jdXJsLWNvbmZpZy5odG1sCkBAIC0wLDAgKzEsOTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsLWNvbmZpZyBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsLWNvbmZpZyAtIEdldCBpbmZvcm1hdGlvbiBhYm91dCBhIGxpYmN1cmwgaW5zdGFsbGF0aW9uIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Y3VybC1jb25maWcgW29wdGlvbnNdPC9zcGFuPiA8YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmN1cmwtY29uZmlnPC9zcGFuPiBkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VybCBhbmQgbGliY3VybCBpbnN0YWxsYXRpb24uIDxhIG5hbWU9Ik9QVElPTlMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk9QVElPTlM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWNhIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tY2E8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RGlzcGxheXMgdGhlIGJ1aWx0LWluIHBhdGggdG8gdGhlIENBIGNlcnQgYnVuZGxlIHRoaXMgbGliY3VybCB1c2VzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tY2MiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1jYzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5EaXNwbGF5cyB0aGUgY29tcGlsZXIgdXNlZCB0byBidWlsZCBsaWJjdXJsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tY2ZsYWdzIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tY2ZsYWdzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldCBvZiBjb21waWxlciBvcHRpb25zIChDRkxBR1MpIHRvIHVzZSB3aGVuIGNvbXBpbGluZyBmaWxlcyB0aGF0IHVzZSBsaWJjdXJsLiBDdXJyZW50bHkgdGhhdCBpcyBvbmx5IHRoZSBpbmNsdWRlIHBhdGggdG8gdGhlIGN1cmwgaW5jbHVkZSBmaWxlcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWNoZWNrZm9yIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tY2hlY2tmb3IgW3ZlcnNpb25dPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNwZWNpZnkgdGhlIG9sZGVzdCBwb3NzaWJsZSBsaWJjdXJsIHZlcnNpb24gc3RyaW5nIHlvdSB3YW50LCBhbmQgdGhpcyBzY3JpcHQgd2lsbCByZXR1cm4gMCBpZiB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gaXMgbmV3IGVub3VnaCBvciBpdCByZXR1cm5zIDEgYW5kIG91dHB1dHMgYSB0ZXh0IHNheWluZyB0aGF0IHRoZSBjdXJyZW50IHZlcnNpb24gaXMgbm90IG5ldyBlbm91Z2guIChBZGRlZCBpbiA3LjE1LjQpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1jb25maWd1cmUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1jb25maWd1cmU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RGlzcGxheXMgdGhlIGFyZ3VtZW50cyBnaXZlbiB0byBjb25maWd1cmUgd2hlbiBidWlsZGluZyBjdXJsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tZmVhdHVyZSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLWZlYXR1cmU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+TGlzdHMgd2hhdCBwYXJ0aWN1bGFyIG1haW4gZmVhdHVyZXMgdGhlIGluc3RhbGxlZCBsaWJjdXJsIHdhcyBidWlsdCB3aXRoLiBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGlzIGxpc3QgbWF5IGluY2x1ZGUgU1NMLCBLUkI0IG9yIElQdjYuIERvIG5vdCBhc3N1bWUgYW55IHBhcnRpY3VsYXIgb3JkZXIuIFRoZSBrZXl3b3JkcyB3aWxsIGJlIHNlcGFyYXRlZCBieSBuZXdsaW5lcy4gVGhlcmUgbWF5IGJlIG5vbmUsIG9uZSwgb3Igc2V2ZXJhbCBrZXl3b3JkcyBpbiB0aGUgbGlzdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWhlbHAiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1oZWxwPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkRpc3BsYXlzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWxpYnMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1saWJzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNob3dzIHRoZSBjb21wbGV0ZSBzZXQgb2YgbGlicyBhbmQgb3RoZXIgbGlua2VyIG9wdGlvbnMgeW91IHdpbGwgbmVlZCBpbiBvcmRlciB0byBsaW5rIHlvdXIgYXBwbGljYXRpb24gd2l0aCBsaWJjdXJsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tcHJlZml4Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tcHJlZml4PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgaXMgdGhlIHByZWZpeCB1c2VkIHdoZW4gbGliY3VybCB3YXMgaW5zdGFsbGVkLiBMaWJjdXJsIGlzIHRoZW4gaW5zdGFsbGVkIGluICRwcmVmaXgvbGliIGFuZCBpdHMgaGVhZGVyIGZpbGVzIGFyZSBpbnN0YWxsZWQgaW4gJHByZWZpeC9pbmNsdWRlIGFuZCBzbyBvbi4gVGhlIHByZWZpeCBpcyBzZXQgd2l0aCAiY29uZmlndXJlIC0tcHJlZml4Ii4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLXByb3RvY29scyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXByb3RvY29sczwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5MaXN0cyB3aGF0IHBhcnRpY3VsYXIgcHJvdG9jb2xzIHRoZSBpbnN0YWxsZWQgbGliY3VybCB3YXMgYnVpbHQgdG8gc3VwcG9ydC4gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgdGhpcyBsaXN0IG1heSBpbmNsdWRlIEhUVFAsIEhUVFBTLCBGVFAsIEZUUFMsIEZJTEUsIFRFTE5FVCwgTERBUCwgRElDVC4gRG8gbm90IGFzc3VtZSBhbnkgcGFydGljdWxhciBvcmRlci4gVGhlIHByb3RvY29scyB3aWxsIGJlIGxpc3RlZCB1c2luZyB1cHBlcmNhc2UgYW5kIGFyZSBzZXBhcmF0ZWQgYnkgbmV3bGluZXMuIFRoZXJlIG1heSBiZSBub25lLCBvbmUsIG9yIHNldmVyYWwgcHJvdG9jb2xzIGluIHRoZSBsaXN0LiAoQWRkZWQgaW4gNy4xMy4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tc3RhdGljLWxpYnMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1zdGF0aWMtbGliczwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TaG93cyB0aGUgY29tcGxldGUgc2V0IG9mIGxpYnMgYW5kIG90aGVyIGxpbmtlciBvcHRpb25zIHlvdSB3aWxsIG5lZWQgaW4gb3JkZXIgdG8gbGluayB5b3VyIGFwcGxpY2F0aW9uIHdpdGggbGliY3VybCBzdGF0aWNhbGx5LiAoQWRkZWQgaW4gNy4xNy4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tdmVyc2lvbiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXZlcnNpb248L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+T3V0cHV0cyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnN0YWxsZWQgbGliY3VybC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLXZlcm51bSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXZlcm51bTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5PdXRwdXRzIHZlcnNpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGluc3RhbGxlZCBsaWJjdXJsLCBpbiBudW1lcmljYWwgbW9kZS4gVGhpcyBvdXRwdXRzIHRoZSB2ZXJzaW9uIG51bWJlciwgaW4gaGV4YWRlY2ltYWwsIHdpdGggOCBiaXRzIGZvciBlYWNoIHBhcnQ7IG1ham9yLCBtaW5vciwgcGF0Y2guIFNvIHRoYXQgbGliY3VybCA3LjcuNCB3b3VsZCBhcHBlYXIgYXMgMDcwNzA0IGFuZCBsaWJjdXJsIDEyLjEzLjE0IHdvdWxkIGFwcGVhciBhcyAwYzBkMGUuLi4gTm90ZSB0aGF0IHRoZSBpbml0aWFsIHplcm8gbWlnaHQgYmUgb21pdHRlZC4gKFRoaXMgb3B0aW9uIHdhcyBicm9rZW4gaW4gdGhlIDcuMTUuMCByZWxlYXNlLikgPGEgbmFtZT0iRVhBTVBMRVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkVYQU1QTEVTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPldoYXQgbGlua2VyIG9wdGlvbnMgZG8gSSBuZWVkIHdoZW4gSSBsaW5rIHdpdGggbGliY3VybD8gCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDsgJCBjdXJsLWNvbmZpZyAtLWxpYnMgCis8cCBjbGFzcz0ibGV2ZWwwIj5XaGF0IGNvbXBpbGVyIG9wdGlvbnMgZG8gSSBuZWVkIHdoZW4gSSBjb21waWxlIHVzaW5nIGxpYmN1cmwgZnVuY3Rpb25zPyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOyAkIGN1cmwtY29uZmlnIC0tY2ZsYWdzIAorPHAgY2xhc3M9ImxldmVsMCI+SG93IGRvIEkga25vdyBpZiBsaWJjdXJsIHdhcyBidWlsdCB3aXRoIFNTTCBzdXBwb3J0PyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOyAkIGN1cmwtY29uZmlnIC0tZmVhdHVyZSB8IGdyZXAgU1NMIAorPHAgY2xhc3M9ImxldmVsMCI+V2hhdCdzIHRoZSBpbnN0YWxsZWQgbGliY3VybCB2ZXJzaW9uPyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOyAkIGN1cmwtY29uZmlnIC0tdmVyc2lvbiAKKzxwIGNsYXNzPSJsZXZlbDAiPkhvdyBkbyBJIGJ1aWxkIGEgc2luZ2xlIGZpbGUgd2l0aCBhIG9uZS1saW5lIGNvbW1hbmQ/IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7ICQgYGN1cmwtY29uZmlnIC0tY2MgLS1jZmxhZ3MgLS1saWJzYCAtbyBleGFtcGxlIGV4YW1wbGUuYyAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPmN1cmwgKDEpPC9zcGFuPiA8cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvY3VybC1jb25maWcucGRmIGIvY3VybC03LjI1LjAvZG9jcy9jdXJsLWNvbmZpZy5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjZTEwZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvY3VybC1jb25maWcucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvY3VybC4xIGIvY3VybC03LjI1LjAvZG9jcy9jdXJsLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk1ZjVkZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvY3VybC4xCkBAIC0wLDAgKzEsMTkwOCBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCBjdXJsIDEgIjE2IEZlYnJ1YXJ5IDIwMTIiICJDdXJsIDcuMjUuMCIgIkN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmwgXC0gdHJhbnNmZXIgYSBVUkwKKy5TSCBTWU5PUFNJUworLkIgY3VybCBbb3B0aW9uc10KKy5JIFtVUkwuLi5dCisuU0ggREVTQ1JJUFRJT04KKy5CIGN1cmwKK2lzIGEgdG9vbCB0byB0cmFuc2ZlciBkYXRhIGZyb20gb3IgdG8gYSBzZXJ2ZXIsIHVzaW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkCitwcm90b2NvbHMgKERJQ1QsIEZJTEUsIEZUUCwgRlRQUywgR09QSEVSLCBIVFRQLCBIVFRQUywgSU1BUCwgSU1BUFMsIExEQVAsCitMREFQUywgUE9QMywgUE9QM1MsIFJUTVAsIFJUU1AsIFNDUCwgU0ZUUCwgU01UUCwgU01UUFMsIFRFTE5FVCBhbmQgVEZUUCkuICBUaGUKK2NvbW1hbmQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRob3V0IHVzZXIgaW50ZXJhY3Rpb24uCisKK2N1cmwgb2ZmZXJzIGEgYnVzbG9hZCBvZiB1c2VmdWwgdHJpY2tzIGxpa2UgcHJveHkgc3VwcG9ydCwgdXNlcgorYXV0aGVudGljYXRpb24sIEZUUCB1cGxvYWQsIEhUVFAgcG9zdCwgU1NMIGNvbm5lY3Rpb25zLCBjb29raWVzLCBmaWxlIHRyYW5zZmVyCityZXN1bWUgYW5kIG1vcmUuIEFzIHlvdSB3aWxsIHNlZSBiZWxvdywgdGhlIG51bWJlciBvZiBmZWF0dXJlcyB3aWxsIG1ha2UgeW91cgoraGVhZCBzcGluIQorCitjdXJsIGlzIHBvd2VyZWQgYnkgbGliY3VybCBmb3IgYWxsIHRyYW5zZmVyLXJlbGF0ZWQgZmVhdHVyZXMuIFNlZQorLkJSIGxpYmN1cmwgKDMpCitmb3IgZGV0YWlscy4KKy5TSCBVUkwKK1RoZSBVUkwgc3ludGF4IGlzIHByb3RvY29sLWRlcGVuZGVudC4gWW91J2xsIGZpbmQgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBpbgorUkZDIDM5ODYuCisKK1lvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSBVUkxzIG9yIHBhcnRzIG9mIFVSTHMgYnkgd3JpdGluZyBwYXJ0IHNldHMgd2l0aGluCiticmFjZXMgYXMgaW46CisKKyBodHRwOi8vc2l0ZS57b25lLHR3byx0aHJlZX0uY29tCisKK29yIHlvdSBjYW4gZ2V0IHNlcXVlbmNlcyBvZiBhbHBoYW51bWVyaWMgc2VyaWVzIGJ5IHVzaW5nIFtdIGFzIGluOgorCisgZnRwOi8vZnRwLm51bWVyaWNhbHMuY29tL2ZpbGVbMS0xMDBdLnR4dAorIGZ0cDovL2Z0cC5udW1lcmljYWxzLmNvbS9maWxlWzAwMS0xMDBdLnR4dCAgICAod2l0aCBsZWFkaW5nIHplcm9zKQorIGZ0cDovL2Z0cC5sZXR0ZXJzLmNvbS9maWxlW2Etel0udHh0CisKK05lc3RlZCBzZXF1ZW5jZXMgYXJlIG5vdCBzdXBwb3J0ZWQsIGJ1dCB5b3UgY2FuIHVzZSBzZXZlcmFsIG9uZXMgbmV4dCB0byBlYWNoCitvdGhlcjoKKworIGh0dHA6Ly9hbnkub3JnL2FyY2hpdmVbMTk5Ni0xOTk5XS92b2xbMS00XS9wYXJ0e2EsYixjfS5odG1sCisKK1lvdSBjYW4gc3BlY2lmeSBhbnkgYW1vdW50IG9mIFVSTHMgb24gdGhlIGNvbW1hbmQgbGluZS4gVGhleSB3aWxsIGJlIGZldGNoZWQKK2luIGEgc2VxdWVudGlhbCBtYW5uZXIgaW4gdGhlIHNwZWNpZmllZCBvcmRlci4KKworWW91IGNhbiBzcGVjaWZ5IGEgc3RlcCBjb3VudGVyIGZvciB0aGUgcmFuZ2VzIHRvIGdldCBldmVyeSBOdGggbnVtYmVyIG9yCitsZXR0ZXI6CisKKyBodHRwOi8vd3d3Lm51bWVyaWNhbHMuY29tL2ZpbGVbMS0xMDA6MTBdLnR4dAorIGh0dHA6Ly93d3cubGV0dGVycy5jb20vZmlsZVthLXo6Ml0udHh0CisKK0lmIHlvdSBzcGVjaWZ5IFVSTCB3aXRob3V0IHByb3RvY29sOi8vIHByZWZpeCwgY3VybCB3aWxsIGF0dGVtcHQgdG8gZ3Vlc3Mgd2hhdAorcHJvdG9jb2wgeW91IG1pZ2h0IHdhbnQuIEl0IHdpbGwgdGhlbiBkZWZhdWx0IHRvIEhUVFAgYnV0IHRyeSBvdGhlciBwcm90b2NvbHMKK2Jhc2VkIG9uIG9mdGVuLXVzZWQgaG9zdCBuYW1lIHByZWZpeGVzLiBGb3IgZXhhbXBsZSwgZm9yIGhvc3QgbmFtZXMgc3RhcnRpbmcKK3dpdGggImZ0cC4iIGN1cmwgd2lsbCBhc3N1bWUgeW91IHdhbnQgdG8gc3BlYWsgRlRQLgorCitjdXJsIHdpbGwgZG8gaXRzIGJlc3QgdG8gdXNlIHdoYXQgeW91IHBhc3MgdG8gaXQgYXMgYSBVUkwuIEl0IGlzIG5vdCB0cnlpbmcgdG8KK3ZhbGlkYXRlIGl0IGFzIGEgc3ludGFjdGljYWxseSBjb3JyZWN0IFVSTCBieSBhbnkgbWVhbnMgYnV0IGlzIGluc3RlYWQKK1xmQnZlcnlcZlAgbGliZXJhbCB3aXRoIHdoYXQgaXQgYWNjZXB0cy4KKworQ3VybCB3aWxsIGF0dGVtcHQgdG8gcmUtdXNlIGNvbm5lY3Rpb25zIGZvciBtdWx0aXBsZSBmaWxlIHRyYW5zZmVycywgc28gdGhhdAorZ2V0dGluZyBtYW55IGZpbGVzIGZyb20gdGhlIHNhbWUgc2VydmVyIHdpbGwgbm90IGRvIG11bHRpcGxlIGNvbm5lY3RzIC8KK2hhbmRzaGFrZXMuIFRoaXMgaW1wcm92ZXMgc3BlZWQuIE9mIGNvdXJzZSB0aGlzIGlzIG9ubHkgZG9uZSBvbiBmaWxlcworc3BlY2lmaWVkIG9uIGEgc2luZ2xlIGNvbW1hbmQgbGluZSBhbmQgY2Fubm90IGJlIHVzZWQgYmV0d2VlbiBzZXBhcmF0ZSBjdXJsCitpbnZva2VzLgorLlNIICJQUk9HUkVTUyBNRVRFUiIKK2N1cmwgbm9ybWFsbHkgZGlzcGxheXMgYSBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb3BlcmF0aW9ucywgaW5kaWNhdGluZyB0aGUgYW1vdW50CitvZiB0cmFuc2ZlcnJlZCBkYXRhLCB0cmFuc2ZlciBzcGVlZHMgYW5kIGVzdGltYXRlZCB0aW1lIGxlZnQsIGV0Yy4KKworY3VybCBkaXNwbGF5cyB0aGlzIGRhdGEgdG8gdGhlIHRlcm1pbmFsIGJ5IGRlZmF1bHQsIHNvIGlmIHlvdSBpbnZva2UgY3VybCB0bworZG8gYW4gb3BlcmF0aW9uIGFuZCBpdCBpcyBhYm91dCB0byB3cml0ZSBkYXRhIHRvIHRoZSB0ZXJtaW5hbCwgaXQKK1xmSWRpc2FibGVzXGZQIHRoZSBwcm9ncmVzcyBtZXRlciBhcyBvdGhlcndpc2UgaXQgd291bGQgbWVzcyB1cCB0aGUgb3V0cHV0CittaXhpbmcgcHJvZ3Jlc3MgbWV0ZXIgYW5kIHJlc3BvbnNlIGRhdGEuCisKK0lmIHlvdSB3YW50IGEgcHJvZ3Jlc3MgbWV0ZXIgZm9yIEhUVFAgUE9TVCBvciBQVVQgcmVxdWVzdHMsIHlvdSBuZWVkIHRvCityZWRpcmVjdCB0aGUgcmVzcG9uc2Ugb3V0cHV0IHRvIGEgZmlsZSwgdXNpbmcgc2hlbGwgcmVkaXJlY3QgKD4pLCAtbyBbZmlsZV0gb3IKK3NpbWlsYXIuCisKK0l0IGlzIG5vdCB0aGUgc2FtZSBjYXNlIGZvciBGVFAgdXBsb2FkIGFzIHRoYXQgb3BlcmF0aW9uIGRvZXMgbm90IHNwaXQgb3V0CithbnkgcmVzcG9uc2UgZGF0YSB0byB0aGUgdGVybWluYWwuCisKK0lmIHlvdSBwcmVmZXIgYSBwcm9ncmVzcyAiYmFyIiBpbnN0ZWFkIG9mIHRoZSByZWd1bGFyIG1ldGVyLCBcZkktI1xmUCBpcyB5b3VyCitmcmllbmQuCisuU0ggT1BUSU9OUworSW4gZ2VuZXJhbCwgYWxsIGJvb2xlYW4gb3B0aW9ucyBhcmUgZW5hYmxlZCB3aXRoIC0tb3B0aW9uIGFuZCB5ZXQgYWdhaW4KK2Rpc2FibGVkIHdpdGggLS1cZkJuby1cZlBvcHRpb24uIFRoYXQgaXMsIHlvdSB1c2UgdGhlIGV4YWN0IHNhbWUgb3B0aW9uIG5hbWUKK2J1dCBwcmVmaXggaXQgd2l0aCAibm8tIi4gSG93ZXZlciwgaW4gdGhpcyBsaXN0IHdlIG1vc3RseSBvbmx5IGxpc3QgYW5kIHNob3cKK3RoZSAtLW9wdGlvbiB2ZXJzaW9uIG9mIHRoZW0uIChUaGlzIGNvbmNlcHQgd2l0aCAtLW5vIG9wdGlvbnMgd2FzIGFkZGVkIGluCis3LjE5LjAuIFByZXZpb3VzbHkgbW9zdCBvcHRpb25zIHdlcmUgdG9nZ2xlZCBvbi9vZmYgb24gcmVwZWF0ZWQgdXNlIG9mIHRoZQorc2FtZSBjb21tYW5kIGxpbmUgb3B0aW9uLikKKy5JUCAiLSMsIC0tcHJvZ3Jlc3MtYmFyIgorTWFrZSBjdXJsIGRpc3BsYXkgcHJvZ3Jlc3MgYXMgYSBzaW1wbGUgcHJvZ3Jlc3MgYmFyIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkLAorbW9yZSBpbmZvcm1hdGlvbmFsLCBtZXRlci4KKy5JUCAiLTAsIC0taHR0cDEuMCIKKyhIVFRQKSBGb3JjZXMgY3VybCB0byBpc3N1ZSBpdHMgcmVxdWVzdHMgdXNpbmcgSFRUUCAxLjAgaW5zdGVhZCBvZiB1c2luZyBpdHMKK2ludGVybmFsbHkgcHJlZmVycmVkOiBIVFRQIDEuMS4KKy5JUCAiLTEsIC0tdGxzdjEiCisoU1NMKQorRm9yY2VzIGN1cmwgdG8gdXNlIFRMUyB2ZXJzaW9uIDEgd2hlbiBuZWdvdGlhdGluZyB3aXRoIGEgcmVtb3RlIFRMUyBzZXJ2ZXIuCisuSVAgIi0yLCAtLXNzbHYyIgorKFNTTCkKK0ZvcmNlcyBjdXJsIHRvIHVzZSBTU0wgdmVyc2lvbiAyIHdoZW4gbmVnb3RpYXRpbmcgd2l0aCBhIHJlbW90ZSBTU0wgc2VydmVyLgorLklQICItMywgLS1zc2x2MyIKKyhTU0wpCitGb3JjZXMgY3VybCB0byB1c2UgU1NMIHZlcnNpb24gMyB3aGVuIG5lZ290aWF0aW5nIHdpdGggYSByZW1vdGUgU1NMIHNlcnZlci4KKy5JUCAiLTQsIC0taXB2NCIKK0lmIGxpYmN1cmwgaXMgY2FwYWJsZSBvZiByZXNvbHZpbmcgYW4gYWRkcmVzcyB0byBtdWx0aXBsZSBJUCB2ZXJzaW9ucyAod2hpY2gKK2l0IGlzIGlmIGl0IGlzIElQdjYtY2FwYWJsZSksIHRoaXMgb3B0aW9uIHRlbGxzIGxpYmN1cmwgdG8gcmVzb2x2ZSBuYW1lcyB0bworSVB2NCBhZGRyZXNzZXMgb25seS4KKy5JUCAiLTYsIC0taXB2NiIKK0lmIGxpYmN1cmwgaXMgY2FwYWJsZSBvZiByZXNvbHZpbmcgYW4gYWRkcmVzcyB0byBtdWx0aXBsZSBJUCB2ZXJzaW9ucyAod2hpY2gKK2l0IGlzIGlmIGl0IGlzIElQdjYtY2FwYWJsZSksIHRoaXMgb3B0aW9uIHRlbGxzIGxpYmN1cmwgdG8gcmVzb2x2ZSBuYW1lcyB0bworSVB2NiBhZGRyZXNzZXMgb25seS4KK2RlZmF1bHQgc3RhdGlzdGljcy4KKy5JUCAiLWEsIC0tYXBwZW5kIgorKEZUUC9TRlRQKSBXaGVuIHVzZWQgaW4gYW4gdXBsb2FkLCB0aGlzIHdpbGwgdGVsbCBjdXJsIHRvIGFwcGVuZCB0byB0aGUgdGFyZ2V0CitmaWxlIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmcgaXQuIElmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC4KK05vdGUgdGhhdCB0aGlzIGZsYWcgaXMgaWdub3JlZCBieSBzb21lIFNTSCBzZXJ2ZXJzIChpbmNsdWRpbmcgT3BlblNTSCkuCisuSVAgIi1BLCAtLXVzZXItYWdlbnQgPGFnZW50IHN0cmluZz4iCisoSFRUUCkgU3BlY2lmeSB0aGUgVXNlci1BZ2VudCBzdHJpbmcgdG8gc2VuZCB0byB0aGUgSFRUUCBzZXJ2ZXIuIFNvbWUgYmFkbHkKK2RvbmUgQ0dJcyBmYWlsIGlmIHRoaXMgZmllbGQgaXNuJ3Qgc2V0IHRvICJNb3ppbGxhLzQuMCIuIFRvIGVuY29kZSBibGFua3MgaW4KK3RoZSBzdHJpbmcsIHN1cnJvdW5kIHRoZSBzdHJpbmcgd2l0aCBzaW5nbGUgcXVvdGUgbWFya3MuIFRoaXMgY2FuIGFsc28gYmUgc2V0Cit3aXRoIHRoZSBcZkktSCwgLS1oZWFkZXJcZlAgb3B0aW9uIG9mIGNvdXJzZS4KKworSWYgdGhpcyBvcHRpb24gaXMgc2V0IG1vcmUgdGhhbiBvbmNlLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB0aGUgb25lIHRoYXQncwordXNlZC4KKy5JUCAiLS1hbnlhdXRoIgorKEhUVFApIFRlbGxzIGN1cmwgdG8gZmlndXJlIG91dCBhdXRoZW50aWNhdGlvbiBtZXRob2QgYnkgaXRzZWxmLCBhbmQgdXNlIHRoZQorbW9zdCBzZWN1cmUgb25lIHRoZSByZW1vdGUgc2l0ZSBjbGFpbXMgdG8gc3VwcG9ydC4gVGhpcyBpcyBkb25lIGJ5IGZpcnN0Citkb2luZyBhIHJlcXVlc3QgYW5kIGNoZWNraW5nIHRoZSByZXNwb25zZS1oZWFkZXJzLCB0aHVzIHBvc3NpYmx5IGluZHVjaW5nIGFuCitleHRyYSBuZXR3b3JrIHJvdW5kLXRyaXAuIFRoaXMgaXMgdXNlZCBpbnN0ZWFkIG9mIHNldHRpbmcgYSBzcGVjaWZpYworYXV0aGVudGljYXRpb24gbWV0aG9kLCB3aGljaCB5b3UgY2FuIGRvIHdpdGggXGZJLS1iYXNpY1xmUCwgXGZJLS1kaWdlc3RcZlAsCitcZkktLW50bG1cZlAsIGFuZCBcZkktLW5lZ290aWF0ZVxmUC4KKworTm90ZSB0aGF0IHVzaW5nIC0tYW55YXV0aCBpcyBub3QgcmVjb21tZW5kZWQgaWYgeW91IGRvIHVwbG9hZHMgZnJvbSBzdGRpbiwKK3NpbmNlIGl0IG1heSByZXF1aXJlIGRhdGEgdG8gYmUgc2VudCB0d2ljZSBhbmQgdGhlbiB0aGUgY2xpZW50IG11c3QgYmUgYWJsZSB0bworcmV3aW5kLiBJZiB0aGUgbmVlZCBzaG91bGQgYXJpc2Ugd2hlbiB1cGxvYWRpbmcgZnJvbSBzdGRpbiwgdGhlIHVwbG9hZAorb3BlcmF0aW9uIHdpbGwgZmFpbC4KKy5JUCAiLWIsIC0tY29va2llIDxuYW1lPWRhdGE+IgorKEhUVFApCitQYXNzIHRoZSBkYXRhIHRvIHRoZSBIVFRQIHNlcnZlciBhcyBhIGNvb2tpZS4gSXQgaXMgc3VwcG9zZWRseSB0aGUKK2RhdGEgcHJldmlvdXNseSByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgaW4gYSAiU2V0LUNvb2tpZToiIGxpbmUuCitUaGUgZGF0YSBzaG91bGQgYmUgaW4gdGhlIGZvcm1hdCAiTkFNRTE9VkFMVUUxOyBOQU1FMj1WQUxVRTIiLgorCitJZiBubyAnPScgc3ltYm9sIGlzIHVzZWQgaW4gdGhlIGxpbmUsIGl0IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZSB0byB1c2UgdG8KK3JlYWQgcHJldmlvdXNseSBzdG9yZWQgY29va2llIGxpbmVzIGZyb20sIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluIHRoaXMgc2Vzc2lvbgoraWYgdGhleSBtYXRjaC4gVXNpbmcgdGhpcyBtZXRob2QgYWxzbyBhY3RpdmF0ZXMgdGhlICJjb29raWUgcGFyc2VyIiB3aGljaCB3aWxsCittYWtlIGN1cmwgcmVjb3JkIGluY29taW5nIGNvb2tpZXMgdG9vLCB3aGljaCBtYXkgYmUgaGFuZHkgaWYgeW91J3JlIHVzaW5nIHRoaXMKK2luIGNvbWJpbmF0aW9uIHdpdGggdGhlIFxmSS1MLCAtLWxvY2F0aW9uXGZQIG9wdGlvbi4gVGhlIGZpbGUgZm9ybWF0IG9mIHRoZQorZmlsZSB0byByZWFkIGNvb2tpZXMgZnJvbSBzaG91bGQgYmUgcGxhaW4gSFRUUCBoZWFkZXJzIG9yIHRoZSBOZXRzY2FwZS9Nb3ppbGxhCitjb29raWUgZmlsZSBmb3JtYXQuCisKK1xmQk5PVEVcZlAgdGhhdCB0aGUgZmlsZSBzcGVjaWZpZWQgd2l0aCBcZkktYiwgLS1jb29raWVcZlAgaXMgb25seSB1c2VkIGFzCitpbnB1dC4gTm8gY29va2llcyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgZmlsZS4gVG8gc3RvcmUgY29va2llcywgdXNlIHRoZQorXGZJLWMsIC0tY29va2llLWphclxmUCBvcHRpb24gb3IgeW91IGNvdWxkIGV2ZW4gc2F2ZSB0aGUgSFRUUCBoZWFkZXJzIHRvIGEgZmlsZQordXNpbmcgXGZJLUQsIC0tZHVtcC1oZWFkZXJcZlAhCisKK0lmIHRoaXMgb3B0aW9uIGlzIHNldCBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdGhlIG9uZSB0aGF0J3MKK3VzZWQuCisuSVAgIi1CLCAtLXVzZS1hc2NpaSIKK0VuYWJsZSBBU0NJSSB0cmFuc2ZlciB3aGVuIHVzaW5nIEZUUCBvciBMREFQLiBGb3IgRlRQLCB0aGlzIGNhbiBhbHNvIGJlCitlbmZvcmNlZCBieSB1c2luZyBhbiBVUkwgdGhhdCBlbmRzIHdpdGggIjt0eXBlPUEiLiBUaGlzIG9wdGlvbiBjYXVzZXMgZGF0YQorc2VudCB0byBzdGRvdXQgdG8gYmUgaW4gdGV4dCBtb2RlIGZvciB3aW4zMiBzeXN0ZW1zLgorLklQICItLWJhc2ljIgorKEhUVFApIFRlbGxzIGN1cmwgdG8gdXNlIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24uIFRoaXMgaXMgdGhlIGRlZmF1bHQgYW5kCit0aGlzIG9wdGlvbiBpcyB1c3VhbGx5IHBvaW50bGVzcywgdW5sZXNzIHlvdSB1c2UgaXQgdG8gb3ZlcnJpZGUgYSBwcmV2aW91c2x5CitzZXQgb3B0aW9uIHRoYXQgc2V0cyBhIGRpZmZlcmVudCBhdXRoZW50aWNhdGlvbiBtZXRob2QgKHN1Y2ggYXMgXGZJLS1udGxtXGZQLAorXGZJLS1kaWdlc3RcZlAsIG9yIFxmSS0tbmVnb3RpYXRlXGZQKS4KKy5JUCAiLWMsIC0tY29va2llLWphciA8ZmlsZSBuYW1lPiIKK1NwZWNpZnkgdG8gd2hpY2ggZmlsZSB5b3Ugd2FudCBjdXJsIHRvIHdyaXRlIGFsbCBjb29raWVzIGFmdGVyIGEgY29tcGxldGVkCitvcGVyYXRpb24uIEN1cmwgd3JpdGVzIGFsbCBjb29raWVzIHByZXZpb3VzbHkgcmVhZCBmcm9tIGEgc3BlY2lmaWVkIGZpbGUgYXMKK3dlbGwgYXMgYWxsIGNvb2tpZXMgcmVjZWl2ZWQgZnJvbSByZW1vdGUgc2VydmVyKHMpLiBJZiBubyBjb29raWVzIGFyZSBrbm93biwKK25vIGZpbGUgd2lsbCBiZSB3cml0dGVuLiBUaGUgZmlsZSB3aWxsIGJlIHdyaXR0ZW4gdXNpbmcgdGhlIE5ldHNjYXBlIGNvb2tpZQorZmlsZSBmb3JtYXQuIElmIHlvdSBzZXQgdGhlIGZpbGUgbmFtZSB0byBhIHNpbmdsZSBkYXNoLCAiLSIsIHRoZSBjb29raWVzIHdpbGwKK2JlIHdyaXR0ZW4gdG8gc3Rkb3V0LgorCitUaGlzIGNvbW1hbmQgbGluZSBvcHRpb24gd2lsbCBhY3RpdmF0ZSB0aGUgY29va2llIGVuZ2luZSB0aGF0IG1ha2VzIGN1cmwKK3JlY29yZCBhbmQgdXNlIGNvb2tpZXMuIEFub3RoZXIgd2F5IHRvIGFjdGl2YXRlIGl0IGlzIHRvIHVzZSB0aGUgXGZJLWIsCistLWNvb2tpZVxmUCBvcHRpb24uCisKK0lmIHRoZSBjb29raWUgamFyIGNhbid0IGJlIGNyZWF0ZWQgb3Igd3JpdHRlbiB0bywgdGhlIHdob2xlIGN1cmwgb3BlcmF0aW9uCit3b24ndCBmYWlsIG9yIGV2ZW4gcmVwb3J0IGFuIGVycm9yIGNsZWFybHkuIFVzaW5nIC12IHdpbGwgZ2V0IGEgd2FybmluZworZGlzcGxheWVkLCBidXQgdGhhdCBpcyB0aGUgb25seSB2aXNpYmxlIGZlZWRiYWNrIHlvdSBnZXQgYWJvdXQgdGhpcyBwb3NzaWJseQorbGV0aGFsIHNpdHVhdGlvbi4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBzcGVjaWZpZWQgZmlsZSBuYW1lIHdpbGwgYmUKK3VzZWQuCisuSVAgIi1DLCAtLWNvbnRpbnVlLWF0IDxvZmZzZXQ+IgorQ29udGludWUvUmVzdW1lIGEgcHJldmlvdXMgZmlsZSB0cmFuc2ZlciBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LiBUaGUgZ2l2ZW4gb2Zmc2V0CitpcyB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZSBza2lwcGVkLCBjb3VudGluZyBmcm9tIHRoZSBiZWdpbm5pbmcKK29mIHRoZSBzb3VyY2UgZmlsZSBiZWZvcmUgaXQgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIGRlc3RpbmF0aW9uLiAgSWYgdXNlZCB3aXRoCit1cGxvYWRzLCB0aGUgRlRQIHNlcnZlciBjb21tYW5kIFNJWkUgd2lsbCBub3QgYmUgdXNlZCBieSBjdXJsLgorCitVc2UgIi1DIC0iIHRvIHRlbGwgY3VybCB0byBhdXRvbWF0aWNhbGx5IGZpbmQgb3V0IHdoZXJlL2hvdyB0byByZXN1bWUgdGhlCit0cmFuc2Zlci4gSXQgdGhlbiB1c2VzIHRoZSBnaXZlbiBvdXRwdXQvaW5wdXQgZmlsZXMgdG8gZmlndXJlIHRoYXQgb3V0LgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi0tY2lwaGVycyA8bGlzdCBvZiBjaXBoZXJzPiIKKyhTU0wpIFNwZWNpZmllcyB3aGljaCBjaXBoZXJzIHRvIHVzZSBpbiB0aGUgY29ubmVjdGlvbi4gVGhlIGxpc3Qgb2YgY2lwaGVycworbXVzdCBzcGVjaWZ5IHZhbGlkIGNpcGhlcnMuIFJlYWQgdXAgb24gU1NMIGNpcGhlciBsaXN0IGRldGFpbHMgb24gdGhpcyBVUkw6CitcZklodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvYXBwcy9jaXBoZXJzLmh0bWxcZlAKKworTlNTIGNpcGhlcnMgYXJlIGRvbmUgZGlmZmVyZW50bHkgdGhhbiBPcGVuU1NMIGFuZCBHbnVUTFMuIFRoZSBmdWxsIGxpc3Qgb2YKK05TUyBjaXBoZXJzIGlzIGluIHRoZSBOU1NDaXBoZXJTdWl0ZSBlbnRyeSBhdCB0aGlzIFVSTDoKK1xmSWh0dHA6Ly9kaXJlY3RvcnkuZmVkb3JhLnJlZGhhdC5jb20vZG9jcy9tb2RfbnNzLmh0bWwjRGlyZWN0aXZlc1xmUAorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIG92ZXJyaWRlIHRoZSBvdGhlcnMuCisuSVAgIi0tY29tcHJlc3NlZCIKKyhIVFRQKSBSZXF1ZXN0IGEgY29tcHJlc3NlZCByZXNwb25zZSB1c2luZyBvbmUgb2YgdGhlIGFsZ29yaXRobXMgbGliY3VybAorc3VwcG9ydHMsIGFuZCBzYXZlIHRoZSB1bmNvbXByZXNzZWQgZG9jdW1lbnQuICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIGFuZCB0aGUKK3NlcnZlciBzZW5kcyBhbiB1bnN1cHBvcnRlZCBlbmNvZGluZywgY3VybCB3aWxsIHJlcG9ydCBhbiBlcnJvci4KKy5JUCAiLS1jb25uZWN0LXRpbWVvdXQgPHNlY29uZHM+IgorTWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCB5b3UgYWxsb3cgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciB0byB0YWtlLgorVGhpcyBvbmx5IGxpbWl0cyB0aGUgY29ubmVjdGlvbiBwaGFzZSwgb25jZSBjdXJsIGhhcyBjb25uZWN0ZWQgdGhpcyBvcHRpb24gaXMKK29mIG5vIG1vcmUgdXNlLiBTZWUgYWxzbyB0aGUgXGZJLW0sIC0tbWF4LXRpbWVcZlAgb3B0aW9uLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi0tY3JlYXRlLWRpcnMiCitXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgLW8gb3B0aW9uLCBjdXJsIHdpbGwgY3JlYXRlIHRoZSBuZWNlc3NhcnkKK2xvY2FsIGRpcmVjdG9yeSBoaWVyYXJjaHkgYXMgbmVlZGVkLiBUaGlzIG9wdGlvbiBjcmVhdGVzIHRoZSBkaXJzIG1lbnRpb25lZAord2l0aCB0aGUgLW8gb3B0aW9uLCBub3RoaW5nIGVsc2UuIElmIHRoZSAtbyBmaWxlIG5hbWUgdXNlcyBubyBkaXIgb3IgaWYgdGhlCitkaXJzIGl0IG1lbnRpb25zIGFscmVhZHkgZXhpc3QsIG5vIGRpciB3aWxsIGJlIGNyZWF0ZWQuCisKK1RvIGNyZWF0ZSByZW1vdGUgZGlyZWN0b3JpZXMgd2hlbiB1c2luZyBGVFAgb3IgU0ZUUCwgdHJ5CitcZkktLWZ0cC1jcmVhdGUtZGlyc1xmUC4KKy5JUCAiLS1jcmxmIgorKEZUUCkgQ29udmVydCBMRiB0byBDUkxGIGluIHVwbG9hZC4gVXNlZnVsIGZvciBNVlMgKE9TLzM5MCkuCisuSVAgIi0tY3JsZmlsZSA8ZmlsZT4iCisoSFRUUFMvRlRQUykgUHJvdmlkZSBhIGZpbGUgdXNpbmcgUEVNIGZvcm1hdCB3aXRoIGEgQ2VydGlmaWNhdGUgUmV2b2NhdGlvbgorTGlzdCB0aGF0IG1heSBzcGVjaWZ5IHBlZXIgY2VydGlmaWNhdGVzIHRoYXQgYXJlIHRvIGJlIGNvbnNpZGVyZWQgcmV2b2tlZC4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgorCisoQWRkZWQgaW4gNy4xOS43KQorLklQICItZCwgLS1kYXRhIDxkYXRhPiIKKyhIVFRQKSBTZW5kcyB0aGUgc3BlY2lmaWVkIGRhdGEgaW4gYSBQT1NUIHJlcXVlc3QgdG8gdGhlIEhUVFAgc2VydmVyLCBpbiB0aGUKK3NhbWUgd2F5IHRoYXQgYSBicm93c2VyIGRvZXMgd2hlbiBhIHVzZXIgaGFzIGZpbGxlZCBpbiBhbiBIVE1MIGZvcm0gYW5kCitwcmVzc2VzIHRoZSBzdWJtaXQgYnV0dG9uLiBUaGlzIHdpbGwgY2F1c2UgY3VybCB0byBwYXNzIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIKK3VzaW5nIHRoZSBjb250ZW50LXR5cGUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkLiAgQ29tcGFyZSB0bworXGZJLUYsIC0tZm9ybVxmUC4KKworXGZJLWQsIC0tZGF0YVxmUCBpcyB0aGUgc2FtZSBhcyBcZkktLWRhdGEtYXNjaWlcZlAuIFRvIHBvc3QgZGF0YSBwdXJlbHkgYmluYXJ5LAoreW91IHNob3VsZCBpbnN0ZWFkIHVzZSB0aGUgXGZJLS1kYXRhLWJpbmFyeVxmUCBvcHRpb24uIFRvIFVSTC1lbmNvZGUgdGhlIHZhbHVlCitvZiBhIGZvcm0gZmllbGQgeW91IG1heSB1c2UgXGZJLS1kYXRhLXVybGVuY29kZVxmUC4KKworSWYgYW55IG9mIHRoZXNlIG9wdGlvbnMgaXMgdXNlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBjb21tYW5kIGxpbmUsIHRoZQorZGF0YSBwaWVjZXMgc3BlY2lmaWVkIHdpbGwgYmUgbWVyZ2VkIHRvZ2V0aGVyIHdpdGggYSBzZXBhcmF0aW5nCismLXN5bWJvbC4gVGh1cywgdXNpbmcgJy1kIG5hbWU9ZGFuaWVsIC1kIHNraWxsPWxvdXN5JyB3b3VsZCBnZW5lcmF0ZSBhIHBvc3QKK2NodW5rIHRoYXQgbG9va3MgbGlrZSBcJiduYW1lPWRhbmllbCZza2lsbD1sb3VzeScuCisKK0lmIHlvdSBzdGFydCB0aGUgZGF0YSB3aXRoIHRoZSBsZXR0ZXIgQCwgdGhlIHJlc3Qgc2hvdWxkIGJlIGEgZmlsZSBuYW1lIHRvCityZWFkIHRoZSBkYXRhIGZyb20sIG9yIC0gaWYgeW91IHdhbnQgY3VybCB0byByZWFkIHRoZSBkYXRhIGZyb20gc3RkaW4uICBUaGUKK2NvbnRlbnRzIG9mIHRoZSBmaWxlIG11c3QgYWxyZWFkeSBiZSBVUkwtZW5jb2RlZC4gTXVsdGlwbGUgZmlsZXMgY2FuIGFsc28gYmUKK3NwZWNpZmllZC4gUG9zdGluZyBkYXRhIGZyb20gYSBmaWxlIG5hbWVkICdmb29iYXInIHdvdWxkIHRodXMgYmUgZG9uZSB3aXRoCitcZkktLWRhdGEgQGZvb2JhclxmUC4KKy5JUCAiLUQsIC0tZHVtcC1oZWFkZXIgPGZpbGU+IgorV3JpdGUgdGhlIHByb3RvY29sIGhlYWRlcnMgdG8gdGhlIHNwZWNpZmllZCBmaWxlLgorCitUaGlzIG9wdGlvbiBpcyBoYW5keSB0byB1c2Ugd2hlbiB5b3Ugd2FudCB0byBzdG9yZSB0aGUgaGVhZGVycyB0aGF0IGEgSFRUUAorc2l0ZSBzZW5kcyB0byB5b3UuIENvb2tpZXMgZnJvbSB0aGUgaGVhZGVycyBjb3VsZCB0aGVuIGJlIHJlYWQgaW4gYSBzZWNvbmQKK2N1cmwgaW52b2NhdGlvbiBieSB1c2luZyB0aGUgXGZJLWIsIC0tY29va2llXGZQIG9wdGlvbiEgVGhlCitcZkktYywgLS1jb29raWUtamFyXGZQIG9wdGlvbiBpcyBob3dldmVyIGEgYmV0dGVyIHdheSB0byBzdG9yZSBjb29raWVzLgorCitXaGVuIHVzZWQgaW4gRlRQLCB0aGUgRlRQIHNlcnZlciByZXNwb25zZSBsaW5lcyBhcmUgY29uc2lkZXJlZCBiZWluZyAiaGVhZGVycyIKK2FuZCB0aHVzIGFyZSBzYXZlZCB0aGVyZS4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAgSVAKKyItLWRhdGEtYXNjaWkgPGRhdGE+IiBTZWUgXGZJLWQsIC0tZGF0YVxmUC4KKy5JUCAiLS1kYXRhLWJpbmFyeSA8ZGF0YT4iCisoSFRUUCkgVGhpcyBwb3N0cyBkYXRhIGV4YWN0bHkgYXMgc3BlY2lmaWVkIHdpdGggbm8gZXh0cmEgcHJvY2Vzc2luZword2hhdHNvZXZlci4KKworSWYgeW91IHN0YXJ0IHRoZSBkYXRhIHdpdGggdGhlIGxldHRlciBALCB0aGUgcmVzdCBzaG91bGQgYmUgYSBmaWxlbmFtZS4gIERhdGEKK2lzIHBvc3RlZCBpbiBhIHNpbWlsYXIgbWFubmVyIGFzIFxmSS0tZGF0YS1hc2NpaVxmUCBkb2VzLCBleGNlcHQgdGhhdCBuZXdsaW5lcworYXJlIHByZXNlcnZlZCBhbmQgY29udmVyc2lvbnMgYXJlIG5ldmVyIGRvbmUuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIG9uZXMgZm9sbG93aW5nIHRoZSBmaXJzdCB3aWxsIGFwcGVuZAorZGF0YSBhcyBkZXNjcmliZWQgaW4gXGZJLWQsIC0tZGF0YVxmUC4KKy5JUCAiLS1kYXRhLXVybGVuY29kZSA8ZGF0YT4iCisoSFRUUCkgVGhpcyBwb3N0cyBkYXRhLCBzaW1pbGFyIHRvIHRoZSBvdGhlciAtLWRhdGEgb3B0aW9ucyB3aXRoIHRoZSBleGNlcHRpb24KK3RoYXQgdGhpcyBwZXJmb3JtcyBVUkwtZW5jb2RpbmcuIChBZGRlZCBpbiA3LjE4LjApCisKK1RvIGJlIENHSS1jb21wbGlhbnQsIHRoZSA8ZGF0YT4gcGFydCBzaG91bGQgYmVnaW4gd2l0aCBhIFxmSW5hbWVcZlAgZm9sbG93ZWQKK2J5IGEgc2VwYXJhdG9yIGFuZCBhIGNvbnRlbnQgc3BlY2lmaWNhdGlvbi4gVGhlIDxkYXRhPiBwYXJ0IGNhbiBiZSBwYXNzZWQgdG8KK2N1cmwgdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3ludGF4ZXM6CisuUlMKKy5JUCAiY29udGVudCIKK1RoaXMgd2lsbCBtYWtlIGN1cmwgVVJMLWVuY29kZSB0aGUgY29udGVudCBhbmQgcGFzcyB0aGF0IG9uLiBKdXN0IGJlIGNhcmVmdWwKK3NvIHRoYXQgdGhlIGNvbnRlbnQgZG9lc24ndCBjb250YWluIGFueSA9IG9yIEAgc3ltYm9scywgYXMgdGhhdCB3aWxsIHRoZW4gbWFrZQordGhlIHN5bnRheCBtYXRjaCBvbmUgb2YgdGhlIG90aGVyIGNhc2VzIGJlbG93IQorLklQICI9Y29udGVudCIKK1RoaXMgd2lsbCBtYWtlIGN1cmwgVVJMLWVuY29kZSB0aGUgY29udGVudCBhbmQgcGFzcyB0aGF0IG9uLiBUaGUgcHJlY2VkaW5nID0KK3N5bWJvbCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGRhdGEuCisuSVAgIm5hbWU9Y29udGVudCIKK1RoaXMgd2lsbCBtYWtlIGN1cmwgVVJMLWVuY29kZSB0aGUgY29udGVudCBwYXJ0IGFuZCBwYXNzIHRoYXQgb24uIE5vdGUgdGhhdAordGhlIG5hbWUgcGFydCBpcyBleHBlY3RlZCB0byBiZSBVUkwtZW5jb2RlZCBhbHJlYWR5LgorLklQICJAZmlsZW5hbWUiCitUaGlzIHdpbGwgbWFrZSBjdXJsIGxvYWQgZGF0YSBmcm9tIHRoZSBnaXZlbiBmaWxlIChpbmNsdWRpbmcgYW55IG5ld2xpbmVzKSwKK1VSTC1lbmNvZGUgdGhhdCBkYXRhIGFuZCBwYXNzIGl0IG9uIGluIHRoZSBQT1NULgorLklQICJuYW1lQGZpbGVuYW1lIgorVGhpcyB3aWxsIG1ha2UgY3VybCBsb2FkIGRhdGEgZnJvbSB0aGUgZ2l2ZW4gZmlsZSAoaW5jbHVkaW5nIGFueSBuZXdsaW5lcyksCitVUkwtZW5jb2RlIHRoYXQgZGF0YSBhbmQgcGFzcyBpdCBvbiBpbiB0aGUgUE9TVC4gVGhlIG5hbWUgcGFydCBnZXRzIGFuIGVxdWFsCitzaWduIGFwcGVuZGVkLCByZXN1bHRpbmcgaW4gXGZJbmFtZT11cmxlbmNvZGVkLWZpbGUtY29udGVudFxmUC4gTm90ZSB0aGF0IHRoZQorbmFtZSBpcyBleHBlY3RlZCB0byBiZSBVUkwtZW5jb2RlZCBhbHJlYWR5LgorLlJFCisuSVAgIi0tZGVsZWdhdGlvbiBMRVZFTCIKK1NldCBcZklMRVZFTFxmUCB0byB0ZWxsIHRoZSBzZXJ2ZXIgd2hhdCBpdCBpcyBhbGxvd2VkIHRvIGRlbGVnYXRlIHdoZW4gaXQKK2NvbWVzIHRvIHVzZXIgY3JlZGVudGlhbHMuIFVzZWQgd2l0aCBHU1Mva2VyYmVyb3MuCisuUlMKKy5JUCAibm9uZSIKK0Rvbid0IGFsbG93IGFueSBkZWxlZ2F0aW9uLgorLklQICJwb2xpY3kiCitEZWxlZ2F0ZXMgaWYgYW5kIG9ubHkgaWYgdGhlIE9LLUFTLURFTEVHQVRFIGZsYWcgaXMgc2V0IGluIHRoZSBLZXJiZXJvcworc2VydmljZSB0aWNrZXQsIHdoaWNoIGlzIGEgbWF0dGVyIG9mIHJlYWxtIHBvbGljeS4KKy5JUCAiYWx3YXlzIgorVW5jb25kaXRpb25hbGx5IGFsbG93IHRoZSBzZXJ2ZXIgdG8gZGVsZWdhdGUuCisuUkUKKy5JUCAiLS1kaWdlc3QiCisoSFRUUCkgRW5hYmxlcyBIVFRQIERpZ2VzdCBhdXRoZW50aWNhdGlvbi4gVGhpcyBpcyBhIGF1dGhlbnRpY2F0aW9uIHRoYXQKK3ByZXZlbnRzIHRoZSBwYXNzd29yZCBmcm9tIGJlaW5nIHNlbnQgb3ZlciB0aGUgd2lyZSBpbiBjbGVhciB0ZXh0LiBVc2UgdGhpcyBpbgorY29tYmluYXRpb24gd2l0aCB0aGUgbm9ybWFsIFxmSS11LCAtLXVzZXJcZlAgb3B0aW9uIHRvIHNldCB1c2VyIG5hbWUgYW5kCitwYXNzd29yZC4gU2VlIGFsc28gXGZJLS1udGxtXGZQLCBcZkktLW5lZ290aWF0ZVxmUCBhbmQgXGZJLS1hbnlhdXRoXGZQIGZvcgorcmVsYXRlZCBvcHRpb25zLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBmb2xsb3dpbmcgb2NjdXJyZW5jZXMgbWFrZSBubworZGlmZmVyZW5jZS4KKy5JUCAiLS1kaXNhYmxlLWVwcnQiCisoRlRQKSBUZWxsIGN1cmwgdG8gZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBFUFJUIGFuZCBMUFJUIGNvbW1hbmRzIHdoZW4gZG9pbmcKK2FjdGl2ZSBGVFAgdHJhbnNmZXJzLiBDdXJsIHdpbGwgbm9ybWFsbHkgYWx3YXlzIGZpcnN0IGF0dGVtcHQgdG8gdXNlIEVQUlQsCit0aGVuIExQUlQgYmVmb3JlIHVzaW5nIFBPUlQsIGJ1dCB3aXRoIHRoaXMgb3B0aW9uLCBpdCB3aWxsIHVzZSBQT1JUIHJpZ2h0Cithd2F5LiBFUFJUIGFuZCBMUFJUIGFyZSBleHRlbnNpb25zIHRvIHRoZSBvcmlnaW5hbCBGVFAgcHJvdG9jb2wsIGFuZCBtYXkgbm90IHdvcmsKK29uIGFsbCBzZXJ2ZXJzLCBidXQgdGhleSBlbmFibGUgbW9yZSBmdW5jdGlvbmFsaXR5IGluIGEgYmV0dGVyIHdheSB0aGFuIHRoZQordHJhZGl0aW9uYWwgUE9SVCBjb21tYW5kLgorCitcZkItLWVwcnRcZlAgY2FuIGJlIHVzZWQgdG8gZXhwbGljaXRseSBlbmFibGUgRVBSVCBhZ2FpbiBhbmQgXGZCLS1uby1lcHJ0XGZQCitpcyBhbiBhbGlhcyBmb3IgXGZCLS1kaXNhYmxlLWVwcnRcZlAuCisKK0Rpc2FibGluZyBFUFJUIG9ubHkgY2hhbmdlcyB0aGUgYWN0aXZlIGJlaGF2aW9yLiBJZiB5b3Ugd2FudCB0byBzd2l0Y2ggdG8KK3Bhc3NpdmUgbW9kZSB5b3UgbmVlZCB0byBub3QgdXNlIFxmSS1QLCAtLWZ0cC1wb3J0XGZQIG9yIGZvcmNlIGl0IHdpdGgKK1xmSS0tZnRwLXBhc3ZcZlAuCisuSVAgIi0tZGlzYWJsZS1lcHN2IgorKEZUUCkgVGVsbCBjdXJsIHRvIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgRVBTViBjb21tYW5kIHdoZW4gZG9pbmcgcGFzc2l2ZSBGVFAKK3RyYW5zZmVycy4gQ3VybCB3aWxsIG5vcm1hbGx5IGFsd2F5cyBmaXJzdCBhdHRlbXB0IHRvIHVzZSBFUFNWIGJlZm9yZSBQQVNWLAorYnV0IHdpdGggdGhpcyBvcHRpb24sIGl0IHdpbGwgbm90IHRyeSB1c2luZyBFUFNWLgorCitcZkItLWVwc3ZcZlAgY2FuIGJlIHVzZWQgdG8gZXhwbGljaXRseSBlbmFibGUgRVBTViBhZ2FpbiBhbmQgXGZCLS1uby1lcHN2XGZQCitpcyBhbiBhbGlhcyBmb3IgXGZCLS1kaXNhYmxlLWVwc3ZcZlAuCisKK0Rpc2FibGluZyBFUFNWIG9ubHkgY2hhbmdlcyB0aGUgcGFzc2l2ZSBiZWhhdmlvci4gSWYgeW91IHdhbnQgdG8gc3dpdGNoIHRvCithY3RpdmUgbW9kZSB5b3UgbmVlZCB0byB1c2UgXGZJLVAsIC0tZnRwLXBvcnRcZlAuCisuSVAgIi1lLCAtLXJlZmVyZXIgPFVSTD4iCisoSFRUUCkgU2VuZHMgdGhlICJSZWZlcmVyIFBhZ2UiIGluZm9ybWF0aW9uIHRvIHRoZSBIVFRQIHNlcnZlci4gVGhpcyBjYW4gYWxzbworYmUgc2V0IHdpdGggdGhlIFxmSS1ILCAtLWhlYWRlclxmUCBmbGFnIG9mIGNvdXJzZS4gIFdoZW4gdXNlZCB3aXRoCitcZkktTCwgLS1sb2NhdGlvblxmUCB5b3UgY2FuIGFwcGVuZCAiO2F1dG8iIHRvIHRoZSAtLXJlZmVyZXIgVVJMIHRvIG1ha2UgY3VybAorYXV0b21hdGljYWxseSBzZXQgdGhlIHByZXZpb3VzIFVSTCB3aGVuIGl0IGZvbGxvd3MgYSBMb2NhdGlvbjogaGVhZGVyLiBUaGUKK1wmIjthdXRvIiBzdHJpbmcgY2FuIGJlIHVzZWQgYWxvbmUsIGV2ZW4gaWYgeW91IGRvbid0IHNldCBhbiBpbml0aWFsIC0tcmVmZXJlci4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgorLklQICItRSwgLS1jZXJ0IDxjZXJ0aWZpY2F0ZVs6cGFzc3dvcmRdPiIKKyhTU0wpIFRlbGxzIGN1cmwgdG8gdXNlIHRoZSBzcGVjaWZpZWQgY2xpZW50IGNlcnRpZmljYXRlIGZpbGUgd2hlbiBnZXR0aW5nIGEKK2ZpbGUgd2l0aCBIVFRQUywgRlRQUyBvciBhbm90aGVyIFNTTC1iYXNlZCBwcm90b2NvbC4gVGhlIGNlcnRpZmljYXRlIG11c3QgYmUKK2luIFBFTSBmb3JtYXQuICBJZiB0aGUgb3B0aW9uYWwgcGFzc3dvcmQgaXNuJ3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGJlIHF1ZXJpZWQKK2ZvciBvbiB0aGUgdGVybWluYWwuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBhc3N1bWVzIGEgXCYiY2VydGlmaWNhdGUiIGZpbGUgdGhhdAoraXMgdGhlIHByaXZhdGUga2V5IGFuZCB0aGUgcHJpdmF0ZSBjZXJ0aWZpY2F0ZSBjb25jYXRlbmF0ZWQhIFNlZSBcZkktLWNlcnRcZlAKK2FuZCBcZkktLWtleVxmUCB0byBzcGVjaWZ5IHRoZW0gaW5kZXBlbmRlbnRseS4KKworSWYgY3VybCBpcyBidWlsdCBhZ2FpbnN0IHRoZSBOU1MgU1NMIGxpYnJhcnkgdGhlbiB0aGlzIG9wdGlvbiBjYW4gdGVsbAorY3VybCB0aGUgbmlja25hbWUgb2YgdGhlIGNlcnRpZmljYXRlIHRvIHVzZSB3aXRoaW4gdGhlIE5TUyBkYXRhYmFzZSBkZWZpbmVkCitieSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgU1NMX0RJUiAob3IgYnkgZGVmYXVsdCAvZXRjL3BraS9uc3NkYikuIElmIHRoZQorTlNTIFBFTSBQS0NTIzExIG1vZHVsZSAobGlibnNzcGVtLnNvKSBpcyBhdmFpbGFibGUgdGhlbiBQRU0gZmlsZXMgbWF5IGJlCitsb2FkZWQuIElmIHlvdSB3YW50IHRvIHVzZSBhIGZpbGUgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHBsZWFzZSBwcmVjZWRlCitpdCB3aXRoICIuLyIgcHJlZml4LCBpbiBvcmRlciB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBhIG5pY2tuYW1lLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi0tZW5naW5lIDxuYW1lPiIKK1NlbGVjdCB0aGUgT3BlblNTTCBjcnlwdG8gZW5naW5lIHRvIHVzZSBmb3IgY2lwaGVyCitvcGVyYXRpb25zLiBVc2UgXGZJLS1lbmdpbmUgbGlzdFxmUCB0byBwcmludCBhIGxpc3Qgb2YgYnVpbGQtdGltZSBzdXBwb3J0ZWQKK2VuZ2luZXMuIE5vdGUgdGhhdCBub3QgYWxsIChvciBub25lKSBvZiB0aGUgZW5naW5lcyBtYXkgYmUgYXZhaWxhYmxlIGF0CitydW4tdGltZS4KKy5JUCAiLS1lbnZpcm9ubWVudCIKKyhSSVNDIE9TIE9OTFkpIFNldHMgYSByYW5nZSBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHVzaW5nIHRoZSBuYW1lcyB0aGUgLXcKK29wdGlvbiBzdXBwb3J0cywgdG8gYWxsb3cgZWFzaWVyIGV4dHJhY3Rpb24gb2YgdXNlZnVsIGluZm9ybWF0aW9uIGFmdGVyIGhhdmluZworcnVuIGN1cmwuCisuSVAgIi0tZWdkLWZpbGUgPGZpbGU+IgorKFNTTCkgU3BlY2lmeSB0aGUgcGF0aCBuYW1lIHRvIHRoZSBFbnRyb3B5IEdhdGhlcmluZyBEYWVtb24gc29ja2V0LiBUaGUgc29ja2V0CitpcyB1c2VkIHRvIHNlZWQgdGhlIHJhbmRvbSBlbmdpbmUgZm9yIFNTTCBjb25uZWN0aW9ucy4gU2VlIGFsc28gdGhlCitcZkktLXJhbmRvbS1maWxlXGZQIG9wdGlvbi4KKy5JUCAiLS1jZXJ0LXR5cGUgPHR5cGU+IgorKFNTTCkgVGVsbHMgY3VybCB3aGF0IGNlcnRpZmljYXRlIHR5cGUgdGhlIHByb3ZpZGVkIGNlcnRpZmljYXRlIGlzIGluLiBQRU0sCitERVIgYW5kIEVORyBhcmUgcmVjb2duaXplZCB0eXBlcy4gIElmIG5vdCBzcGVjaWZpZWQsIFBFTSBpcyBhc3N1bWVkLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi0tY2FjZXJ0IDxDQSBjZXJ0aWZpY2F0ZT4iCisoU1NMKSBUZWxscyBjdXJsIHRvIHVzZSB0aGUgc3BlY2lmaWVkIGNlcnRpZmljYXRlIGZpbGUgdG8gdmVyaWZ5IHRoZSBwZWVyLiBUaGUKK2ZpbGUgbWF5IGNvbnRhaW4gbXVsdGlwbGUgQ0EgY2VydGlmaWNhdGVzLiBUaGUgY2VydGlmaWNhdGUocykgbXVzdCBiZSBpbiBQRU0KK2Zvcm1hdC4gTm9ybWFsbHkgY3VybCBpcyBidWlsdCB0byB1c2UgYSBkZWZhdWx0IGZpbGUgZm9yIHRoaXMsIHNvIHRoaXMgb3B0aW9uCitpcyB0eXBpY2FsbHkgdXNlZCB0byBhbHRlciB0aGF0IGRlZmF1bHQgZmlsZS4KKworY3VybCByZWNvZ25pemVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lZCAnQ1VSTF9DQV9CVU5ETEUnIGlmIGl0IGlzCitzZXQsIGFuZCB1c2VzIHRoZSBnaXZlbiBwYXRoIGFzIGEgcGF0aCB0byBhIENBIGNlcnQgYnVuZGxlLiBUaGlzIG9wdGlvbgorb3ZlcnJpZGVzIHRoYXQgdmFyaWFibGUuCisKK1RoZSB3aW5kb3dzIHZlcnNpb24gb2YgY3VybCB3aWxsIGF1dG9tYXRpY2FsbHkgbG9vayBmb3IgYSBDQSBjZXJ0cyBmaWxlIG5hbWVkCitcJ2N1cmwtY2EtYnVuZGxlLmNydFwnLCBlaXRoZXIgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGN1cmwuZXhlLCBvciBpbiB0aGUKK0N1cnJlbnQgV29ya2luZyBEaXJlY3RvcnksIG9yIGluIGFueSBmb2xkZXIgYWxvbmcgeW91ciBQQVRILgorCitJZiBjdXJsIGlzIGJ1aWx0IGFnYWluc3QgdGhlIE5TUyBTU0wgbGlicmFyeSB0aGVuIHRoaXMgb3B0aW9uIHRlbGxzCitjdXJsIHRoZSBuaWNrbmFtZSBvZiB0aGUgQ0EgY2VydGlmaWNhdGUgdG8gdXNlIHdpdGhpbiB0aGUgTlNTIGRhdGFiYXNlCitkZWZpbmVkIGJ5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBTU0xfRElSIChvciBieSBkZWZhdWx0IC9ldGMvcGtpL25zc2RiKS4KK0lmIHRoZSBOU1MgUEVNIFBLQ1MjMTEgbW9kdWxlIChsaWJuc3NwZW0uc28pIGlzIGF2YWlsYWJsZSB0aGVuIFBFTSBmaWxlcworbWF5IGJlIGxvYWRlZC4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgorLklQICItLWNhcGF0aCA8Q0EgY2VydGlmaWNhdGUgZGlyZWN0b3J5PiIKKyhTU0wpIFRlbGxzIGN1cmwgdG8gdXNlIHRoZSBzcGVjaWZpZWQgY2VydGlmaWNhdGUgZGlyZWN0b3J5IHRvIHZlcmlmeSB0aGUKK3BlZXIuIE11bHRpcGxlIHBhdGhzIGNhbiBiZSBwcm92aWRlZCBieSBzZXBhcmF0aW5nIHRoZW0gd2l0aCAiOiIgKGUuZy4KK1wmInBhdGgxOnBhdGgyOnBhdGgzIikuIFRoZSBjZXJ0aWZpY2F0ZXMgbXVzdCBiZSBpbiBQRU0gZm9ybWF0LCBhbmQgaWYgY3VybCBpcworYnVpbHQgYWdhaW5zdCBPcGVuU1NMLCB0aGUgZGlyZWN0b3J5IG11c3QgaGF2ZSBiZWVuIHByb2Nlc3NlZCB1c2luZyB0aGUKK2NfcmVoYXNoIHV0aWxpdHkgc3VwcGxpZWQgd2l0aCBPcGVuU1NMLiBVc2luZyBcZkktLWNhcGF0aFxmUCBjYW4gYWxsb3cKK09wZW5TU0wtcG93ZXJlZCBjdXJsIHRvIG1ha2UgU1NMLWNvbm5lY3Rpb25zIG11Y2ggbW9yZSBlZmZpY2llbnRseSB0aGFuIHVzaW5nCitcZkktLWNhY2VydFxmUCBpZiB0aGUgXGZJLS1jYWNlcnRcZlAgZmlsZSBjb250YWlucyBtYW55IENBIGNlcnRpZmljYXRlcy4KKworSWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgZGVmYXVsdCBjYXBhdGggdmFsdWUgd2lsbCBiZSBpZ25vcmVkLCBhbmQgaWYgaXQgaXMKK3VzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KKy5JUCAiLWYsIC0tZmFpbCIKKyhIVFRQKSBGYWlsIHNpbGVudGx5IChubyBvdXRwdXQgYXQgYWxsKSBvbiBzZXJ2ZXIgZXJyb3JzLiBUaGlzIGlzIG1vc3RseSBkb25lCit0byBiZXR0ZXIgZW5hYmxlIHNjcmlwdHMgZXRjIHRvIGJldHRlciBkZWFsIHdpdGggZmFpbGVkIGF0dGVtcHRzLiBJbgorbm9ybWFsIGNhc2VzIHdoZW4gYSBIVFRQIHNlcnZlciBmYWlscyB0byBkZWxpdmVyIGEgZG9jdW1lbnQsIGl0IHJldHVybnMgYW4KK0hUTUwgZG9jdW1lbnQgc3RhdGluZyBzbyAod2hpY2ggb2Z0ZW4gYWxzbyBkZXNjcmliZXMgd2h5IGFuZCBtb3JlKS4gVGhpcyBmbGFnCit3aWxsIHByZXZlbnQgY3VybCBmcm9tIG91dHB1dHRpbmcgdGhhdCBhbmQgcmV0dXJuIGVycm9yIDIyLgorCitUaGlzIG1ldGhvZCBpcyBub3QgZmFpbC1zYWZlIGFuZCB0aGVyZSBhcmUgb2NjYXNpb25zIHdoZXJlIG5vbi1zdWNjZXNzZnVsCityZXNwb25zZSBjb2RlcyB3aWxsIHNsaXAgdGhyb3VnaCwgZXNwZWNpYWxseSB3aGVuIGF1dGhlbnRpY2F0aW9uIGlzIGludm9sdmVkCisocmVzcG9uc2UgY29kZXMgNDAxIGFuZCA0MDcpLgorLklQICItRiwgLS1mb3JtIDxuYW1lPWNvbnRlbnQ+IgorKEhUVFApIFRoaXMgbGV0cyBjdXJsIGVtdWxhdGUgYSBmaWxsZWQtaW4gZm9ybSBpbiB3aGljaCBhIHVzZXIgaGFzIHByZXNzZWQgdGhlCitzdWJtaXQgYnV0dG9uLiBUaGlzIGNhdXNlcyBjdXJsIHRvIFBPU1QgZGF0YSB1c2luZyB0aGUgQ29udGVudC1UeXBlCittdWx0aXBhcnQvZm9ybS1kYXRhIGFjY29yZGluZyB0byBSRkMgMjM4OC4gVGhpcyBlbmFibGVzIHVwbG9hZGluZyBvZiBiaW5hcnkKK2ZpbGVzIGV0Yy4gVG8gZm9yY2UgdGhlICdjb250ZW50JyBwYXJ0IHRvIGJlIGEgZmlsZSwgcHJlZml4IHRoZSBmaWxlIG5hbWUKK3dpdGggYW4gQCBzaWduLiBUbyBqdXN0IGdldCB0aGUgY29udGVudCBwYXJ0IGZyb20gYSBmaWxlLCBwcmVmaXggdGhlIGZpbGUgbmFtZQord2l0aCB0aGUgc3ltYm9sIDwuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gQCBhbmQgPCBpcyB0aGVuIHRoYXQgQCBtYWtlcyBhIGZpbGUKK2dldCBhdHRhY2hlZCBpbiB0aGUgcG9zdCBhcyBhIGZpbGUgdXBsb2FkLCB3aGlsZSB0aGUgPCBtYWtlcyBhIHRleHQgZmllbGQgYW5kCitqdXN0IGdldCB0aGUgY29udGVudHMgZm9yIHRoYXQgdGV4dCBmaWVsZCBmcm9tIGEgZmlsZS4KKworRXhhbXBsZSwgdG8gc2VuZCB5b3VyIHBhc3N3b3JkIGZpbGUgdG8gdGhlIHNlcnZlciwgd2hlcmUKK1wmJ3Bhc3N3b3JkJyBpcyB0aGUgbmFtZSBvZiB0aGUgZm9ybS1maWVsZCB0byB3aGljaCAvZXRjL3Bhc3N3ZCB3aWxsIGJlIHRoZQoraW5wdXQ6CisKK1xmQmN1cmxcZlAgLUYgcGFzc3dvcmQ9QC9ldGMvcGFzc3dkIHd3dy5teXBhc3N3b3Jkcy5jb20KKworVG8gcmVhZCBjb250ZW50IGZyb20gc3RkaW4gaW5zdGVhZCBvZiBhIGZpbGUsIHVzZSAtIGFzIHRoZSBmaWxlbmFtZS4gVGhpcyBnb2VzCitmb3IgYm90aCBAIGFuZCA8IGNvbnN0cnVjdHMuCisKK1lvdSBjYW4gYWxzbyB0ZWxsIGN1cmwgd2hhdCBDb250ZW50LVR5cGUgdG8gdXNlIGJ5IHVzaW5nICd0eXBlPScsIGluIGEgbWFubmVyCitzaW1pbGFyIHRvOgorCitcZkJjdXJsXGZQIC1GICJ3ZWI9QGluZGV4Lmh0bWw7dHlwZT10ZXh0L2h0bWwiIHVybC5jb20KKworb3IKKworXGZCY3VybFxmUCAtRiAibmFtZT1kYW5pZWw7dHlwZT10ZXh0L2ZvbyIgdXJsLmNvbQorCitZb3UgY2FuIGFsc28gZXhwbGljaXRseSBjaGFuZ2UgdGhlIG5hbWUgZmllbGQgb2YgYSBmaWxlIHVwbG9hZCBwYXJ0IGJ5IHNldHRpbmcKK2ZpbGVuYW1lPSwgbGlrZSB0aGlzOgorCitcZkJjdXJsXGZQIC1GICJmaWxlPUBsb2NhbGZpbGU7ZmlsZW5hbWU9bmFtZWlucG9zdCIgdXJsLmNvbQorCitTZWUgZnVydGhlciBleGFtcGxlcyBhbmQgZGV0YWlscyBpbiB0aGUgTUFOVUFMLgorCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy4KKy5JUCAiLS1mdHAtYWNjb3VudCBbZGF0YV0iCisoRlRQKSBXaGVuIGFuIEZUUCBzZXJ2ZXIgYXNrcyBmb3IgImFjY291bnQgZGF0YSIgYWZ0ZXIgdXNlciBuYW1lIGFuZCBwYXNzd29yZAoraGFzIGJlZW4gcHJvdmlkZWQsIHRoaXMgZGF0YSBpcyBzZW50IG9mZiB1c2luZyB0aGUgQUNDVCBjb21tYW5kLiAoQWRkZWQgaW4KKzcuMTMuMCkKKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB0d2ljZSwgdGhlIHNlY29uZCB3aWxsIG92ZXJyaWRlIHRoZSBwcmV2aW91cyB1c2UuCisuSVAgIi0tZnRwLWFsdGVybmF0aXZlLXRvLXVzZXIgPGNvbW1hbmQ+IgorKEZUUCkgSWYgYXV0aGVudGljYXRpbmcgd2l0aCB0aGUgVVNFUiBhbmQgUEFTUyBjb21tYW5kcyBmYWlscywgc2VuZCB0aGlzCitjb21tYW5kLiAgV2hlbiBjb25uZWN0aW5nIHRvIFR1bWJsZXdlZWQncyBTZWN1cmUgVHJhbnNwb3J0IHNlcnZlciBvdmVyIEZUUFMKK3VzaW5nIGEgY2xpZW50IGNlcnRpZmljYXRlLCB1c2luZyAiU0lURSBBVVRIIiB3aWxsIHRlbGwgdGhlIHNlcnZlciB0byByZXRyaWV2ZQordGhlIHVzZXJuYW1lIGZyb20gdGhlIGNlcnRpZmljYXRlLiAoQWRkZWQgaW4gNy4xNS41KQorLklQICItLWZ0cC1jcmVhdGUtZGlycyIKKyhGVFAvU0ZUUCkgV2hlbiBhbiBGVFAgb3IgU0ZUUCBVUkwvb3BlcmF0aW9uIHVzZXMgYSBwYXRoIHRoYXQgZG9lc24ndAorY3VycmVudGx5IGV4aXN0IG9uIHRoZSBzZXJ2ZXIsIHRoZSBzdGFuZGFyZCBiZWhhdmlvciBvZiBjdXJsIGlzIHRvCitmYWlsLiBVc2luZyB0aGlzIG9wdGlvbiwgY3VybCB3aWxsIGluc3RlYWQgYXR0ZW1wdCB0byBjcmVhdGUgbWlzc2luZworZGlyZWN0b3JpZXMuCisuSVAgIi0tZnRwLW1ldGhvZCBbbWV0aG9kXSIKKyhGVFApIENvbnRyb2wgd2hhdCBtZXRob2QgY3VybCBzaG91bGQgdXNlIHRvIHJlYWNoIGEgZmlsZSBvbiBhIEZUUChTKQorc2VydmVyLiBUaGUgbWV0aG9kIGFyZ3VtZW50IHNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZXM6CisuUlMKKy5JUCBtdWx0aWN3ZAorY3VybCBkb2VzIGEgc2luZ2xlIENXRCBvcGVyYXRpb24gZm9yIGVhY2ggcGF0aCBwYXJ0IGluIHRoZSBnaXZlbiBVUkwuIEZvciBkZWVwCitoaWVyYXJjaGllcyB0aGlzIG1lYW5zIHZlcnkgbWFueSBjb21tYW5kcy4gVGhpcyBpcyBob3cgUkZDIDE3Mzggc2F5cyBpdCBzaG91bGQKK2JlIGRvbmUuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBzbG93ZXN0IGJlaGF2aW9yLgorLklQIG5vY3dkCitjdXJsIGRvZXMgbm8gQ1dEIGF0IGFsbC4gY3VybCB3aWxsIGRvIFNJWkUsIFJFVFIsIFNUT1IgZXRjIGFuZCBnaXZlIGEgZnVsbAorcGF0aCB0byB0aGUgc2VydmVyIGZvciBhbGwgdGhlc2UgY29tbWFuZHMuIFRoaXMgaXMgdGhlIGZhc3Rlc3QgYmVoYXZpb3IuCisuSVAgc2luZ2xlY3dkCitjdXJsIGRvZXMgb25lIENXRCB3aXRoIHRoZSBmdWxsIHRhcmdldCBkaXJlY3RvcnkgYW5kIHRoZW4gb3BlcmF0ZXMgb24gdGhlIGZpbGUKK1wmIm5vcm1hbGx5IiAobGlrZSBpbiB0aGUgbXVsdGljd2QgY2FzZSkuIFRoaXMgaXMgc29tZXdoYXQgbW9yZSBzdGFuZGFyZHMKK2NvbXBsaWFudCB0aGFuICdub2N3ZCcgYnV0IHdpdGhvdXQgdGhlIGZ1bGwgcGVuYWx0eSBvZiAnbXVsdGljd2QnLgorLlJFCisoQWRkZWQgaW4gNy4xNS4xKQorLklQICItLWZ0cC1wYXN2IgorKEZUUCkgVXNlIHBhc3NpdmUgbW9kZSBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbi4gUGFzc2l2ZSBpcyB0aGUgaW50ZXJuYWwgZGVmYXVsdAorYmVoYXZpb3IsIGJ1dCB1c2luZyB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBhIHByZXZpb3VzCitcZkktUC8tZnRwLXBvcnRcZlAgb3B0aW9uLiAoQWRkZWQgaW4gNy4xMS4wKQorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBmb2xsb3dpbmcgb2NjdXJyZW5jZXMgbWFrZSBubworZGlmZmVyZW5jZS4gVW5kb2luZyBhbiBlbmZvcmNlZCBwYXNzaXZlIHJlYWxseSBpc24ndCBkb2FibGUgYnV0IHlvdSBtdXN0IHRoZW4KK2luc3RlYWQgZW5mb3JjZSB0aGUgY29ycmVjdCBcZkktUCwgLS1mdHAtcG9ydFxmUCBhZ2Fpbi4KKworUGFzc2l2ZSBtb2RlIG1lYW5zIHRoYXQgY3VybCB3aWxsIHRyeSB0aGUgRVBTViBjb21tYW5kIGZpcnN0IGFuZCB0aGVuIFBBU1YsCit1bmxlc3MgXGZJLS1kaXNhYmxlLWVwc3ZcZlAgaXMgdXNlZC4KKy5JUCAiLS1mdHAtc2tpcC1wYXN2LWlwIgorKEZUUCkgVGVsbCBjdXJsIHRvIG5vdCB1c2UgdGhlIElQIGFkZHJlc3MgdGhlIHNlcnZlciBzdWdnZXN0cyBpbiBpdHMgcmVzcG9uc2UKK3RvIGN1cmwncyBQQVNWIGNvbW1hbmQgd2hlbiBjdXJsIGNvbm5lY3RzIHRoZSBkYXRhIGNvbm5lY3Rpb24uIEluc3RlYWQgY3VybAord2lsbCByZS11c2UgdGhlIHNhbWUgSVAgYWRkcmVzcyBpdCBhbHJlYWR5IHVzZXMgZm9yIHRoZSBjb250cm9sCitjb25uZWN0aW9uLiAoQWRkZWQgaW4gNy4xNC4yKQorCitUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIFBPUlQsIEVQUlQgb3IgRVBTViBpcyB1c2VkIGluc3RlYWQgb2YgUEFTVi4KKy5JUCAiLS1mdHAtcHJldCIKKyhGVFApIFRlbGwgY3VybCB0byBzZW5kIGEgUFJFVCBjb21tYW5kIGJlZm9yZSBQQVNWIChhbmQgRVBTVikuIENlcnRhaW4KK0ZUUCBzZXJ2ZXJzLCBtYWlubHkgZHJmdHBkLCByZXF1aXJlIHRoaXMgbm9uLXN0YW5kYXJkIGNvbW1hbmQgZm9yCitkaXJlY3RvcnkgbGlzdGluZ3MgYXMgd2VsbCBhcyB1cCBhbmQgZG93bmxvYWRzIGluIFBBU1YgbW9kZS4KKyhBZGRlZCBpbiA3LjIwLngpCisuSVAgIi0tZnRwLXNzbC1jY2MiCisoRlRQKSBVc2UgQ0NDIChDbGVhciBDb21tYW5kIENoYW5uZWwpCitTaHV0cyBkb3duIHRoZSBTU0wvVExTIGxheWVyIGFmdGVyIGF1dGhlbnRpY2F0aW5nLiBUaGUgcmVzdCBvZiB0aGUKK2NvbnRyb2wgY2hhbm5lbCBjb21tdW5pY2F0aW9uIHdpbGwgYmUgdW5lbmNyeXB0ZWQuIFRoaXMgYWxsb3dzCitOQVQgcm91dGVycyB0byBmb2xsb3cgdGhlIEZUUCB0cmFuc2FjdGlvbi4gVGhlIGRlZmF1bHQgbW9kZSBpcworcGFzc2l2ZS4gU2VlIC0tZnRwLXNzbC1jY2MtbW9kZSBmb3Igb3RoZXIgbW9kZXMuCisoQWRkZWQgaW4gNy4xNi4xKQorLklQICItLWZ0cC1zc2wtY2NjLW1vZGUgW2FjdGl2ZS9wYXNzaXZlXSIKKyhGVFApIFVzZSBDQ0MgKENsZWFyIENvbW1hbmQgQ2hhbm5lbCkKK1NldHMgdGhlIENDQyBtb2RlLiBUaGUgcGFzc2l2ZSBtb2RlIHdpbGwgbm90IGluaXRpYXRlIHRoZSBzaHV0ZG93biwgYnV0CitpbnN0ZWFkIHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdG8gZG8gaXQsIGFuZCB3aWxsIG5vdCByZXBseSB0byB0aGUKK3NodXRkb3duIGZyb20gdGhlIHNlcnZlci4gVGhlIGFjdGl2ZSBtb2RlIGluaXRpYXRlcyB0aGUgc2h1dGRvd24gYW5kCit3YWl0cyBmb3IgYSByZXBseSBmcm9tIHRoZSBzZXJ2ZXIuCisoQWRkZWQgaW4gNy4xNi4yKQorLklQICItLWZ0cC1zc2wtY29udHJvbCIKKyhGVFApIFJlcXVpcmUgU1NML1RMUyBmb3IgdGhlIEZUUCBsb2dpbiwgY2xlYXIgZm9yIHRyYW5zZmVyLiAgQWxsb3dzIHNlY3VyZQorYXV0aGVudGljYXRpb24sIGJ1dCBub24tZW5jcnlwdGVkIGRhdGEgdHJhbnNmZXJzIGZvciBlZmZpY2llbmN5LiAgRmFpbHMgdGhlCit0cmFuc2ZlciBpZiB0aGUgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBTU0wvVExTLiAgKEFkZGVkIGluIDcuMTYuMCkKK3RoYXQgY2FuIHN0aWxsIGJlIHVzZWQgYnV0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorLklQICItLWZvcm0tc3RyaW5nIDxuYW1lPXN0cmluZz4iCisoSFRUUCkgU2ltaWxhciB0byBcZkktLWZvcm1cZlAgZXhjZXB0IHRoYXQgdGhlIHZhbHVlIHN0cmluZyBmb3IgdGhlIG5hbWVkCitwYXJhbWV0ZXIgaXMgdXNlZCBsaXRlcmFsbHkuIExlYWRpbmcgXCYnQCcgYW5kIFwmJzwnIGNoYXJhY3RlcnMsIGFuZCB0aGUKK1wmJzt0eXBlPScgc3RyaW5nIGluIHRoZSB2YWx1ZSBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZy4gVXNlIHRoaXMgaW4gcHJlZmVyZW5jZQordG8gXGZJLS1mb3JtXGZQIGlmIHRoZXJlJ3MgYW55IHBvc3NpYmlsaXR5IHRoYXQgdGhlIHN0cmluZyB2YWx1ZSBtYXkKK2FjY2lkZW50YWxseSB0cmlnZ2VyIHRoZSBcJidAJyBvciBcJic8JyBmZWF0dXJlcyBvZiBcZkktLWZvcm1cZlAuCisuSVAgIi1nLCAtLWdsb2JvZmYiCitUaGlzIG9wdGlvbiBzd2l0Y2hlcyBvZmYgdGhlICJVUkwgZ2xvYmJpbmcgcGFyc2VyIi4gV2hlbiB5b3Ugc2V0IHRoaXMgb3B0aW9uLAoreW91IGNhbiBzcGVjaWZ5IFVSTHMgdGhhdCBjb250YWluIHRoZSBsZXR0ZXJzIHt9W10gd2l0aG91dCBoYXZpbmcgdGhlbSBiZWluZworaW50ZXJwcmV0ZWQgYnkgY3VybCBpdHNlbGYuIE5vdGUgdGhhdCB0aGVzZSBsZXR0ZXJzIGFyZSBub3Qgbm9ybWFsIGxlZ2FsIFVSTAorY29udGVudHMgYnV0IHRoZXkgc2hvdWxkIGJlIGVuY29kZWQgYWNjb3JkaW5nIHRvIHRoZSBVUkkgc3RhbmRhcmQuCisuSVAgIi1HLCAtLWdldCIKK1doZW4gdXNlZCwgdGhpcyBvcHRpb24gd2lsbCBtYWtlIGFsbCBkYXRhIHNwZWNpZmllZCB3aXRoIFxmSS1kLCAtLWRhdGFcZlAgb3IKK1xmSS0tZGF0YS1iaW5hcnlcZlAgdG8gYmUgdXNlZCBpbiBhIEhUVFAgR0VUIHJlcXVlc3QgaW5zdGVhZCBvZiB0aGUgUE9TVAorcmVxdWVzdCB0aGF0IG90aGVyd2lzZSB3b3VsZCBiZSB1c2VkLiBUaGUgZGF0YSB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBVUkwKK3dpdGggYSAnPycgc2VwYXJhdG9yLgorCitJZiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggLUksIHRoZSBQT1NUIGRhdGEgd2lsbCBpbnN0ZWFkIGJlIGFwcGVuZGVkIHRvIHRoZQorVVJMIHdpdGggYSBIRUFEIHJlcXVlc3QuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBtYWtlIG5vCitkaWZmZXJlbmNlLiBUaGlzIGlzIGJlY2F1c2UgdW5kb2luZyBhIEdFVCBkb2Vzbid0IG1ha2Ugc2Vuc2UsIGJ1dCB5b3Ugc2hvdWxkCit0aGVuIGluc3RlYWQgZW5mb3JjZSB0aGUgYWx0ZXJuYXRpdmUgbWV0aG9kIHlvdSBwcmVmZXIuCisuSVAgIi1ILCAtLWhlYWRlciA8aGVhZGVyPiIKKyhIVFRQKSBFeHRyYSBoZWFkZXIgdG8gdXNlIHdoZW4gZ2V0dGluZyBhIHdlYiBwYWdlLiBZb3UgbWF5IHNwZWNpZnkgYW55IG51bWJlcgorb2YgZXh0cmEgaGVhZGVycy4gTm90ZSB0aGF0IGlmIHlvdSBzaG91bGQgYWRkIGEgY3VzdG9tIGhlYWRlciB0aGF0IGhhcyB0aGUKK3NhbWUgbmFtZSBhcyBvbmUgb2YgdGhlIGludGVybmFsIG9uZXMgY3VybCB3b3VsZCB1c2UsIHlvdXIgZXh0ZXJuYWxseSBzZXQKK2hlYWRlciB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgaW50ZXJuYWwgb25lLiBUaGlzIGFsbG93cyB5b3UgdG8gbWFrZSBldmVuCit0cmlja2llciBzdHVmZiB0aGFuIGN1cmwgd291bGQgbm9ybWFsbHkgZG8uIFlvdSBzaG91bGQgbm90IHJlcGxhY2UgaW50ZXJuYWxseQorc2V0IGhlYWRlcnMgd2l0aG91dCBrbm93aW5nIHBlcmZlY3RseSB3ZWxsIHdoYXQgeW91J3JlIGRvaW5nLiBSZW1vdmUgYW4KK2ludGVybmFsIGhlYWRlciBieSBnaXZpbmcgYSByZXBsYWNlbWVudCB3aXRob3V0IGNvbnRlbnQgb24gdGhlIHJpZ2h0IHNpZGUgb2YKK3RoZSBjb2xvbiwgYXMgaW46IC1IIFwmIkhvc3Q6Ii4gSWYgeW91IHNlbmQgdGhlIGN1c3RvbSBoZWFkZXIgd2l0aCBuby12YWx1ZSB0aGVuCitpdHMgaGVhZGVyIG11c3QgYmUgdGVybWluYXRlZCB3aXRoIGEgc2VtaWNvbG9uLCBzdWNoIGFzIFwtSCAiWC1DdXN0b20tSGVhZGVyOyIKK3RvIHNlbmQgIlgtQ3VzdG9tLUhlYWRlcjoiLgorCitjdXJsIHdpbGwgbWFrZSBzdXJlIHRoYXQgZWFjaCBoZWFkZXIgeW91IGFkZC9yZXBsYWNlIGlzIHNlbnQgd2l0aCB0aGUgcHJvcGVyCitlbmQtb2YtbGluZSBtYXJrZXIsIHlvdSBzaG91bGQgdGh1cyBcZkJub3RcZlAgYWRkIHRoYXQgYXMgYSBwYXJ0IG9mIHRoZSBoZWFkZXIKK2NvbnRlbnQ6IGRvIG5vdCBhZGQgbmV3bGluZXMgb3IgY2FycmlhZ2UgcmV0dXJucywgdGhleSB3aWxsIG9ubHkgbWVzcyB0aGluZ3MgdXAKK2ZvciB5b3UuCisKK1NlZSBhbHNvIHRoZSBcZkktQSwgLS11c2VyLWFnZW50XGZQIGFuZCBcZkktZSwgLS1yZWZlcmVyXGZQIG9wdGlvbnMuCisKK1RoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzIHRvIGFkZC9yZXBsYWNlL3JlbW92ZSBtdWx0aXBsZSBoZWFkZXJzLgorLklQICItLWhvc3RwdWJtZDUgPG1kNT4iCitQYXNzIGEgc3RyaW5nIGNvbnRhaW5pbmcgMzIgaGV4YWRlY2ltYWwgZGlnaXRzLiBUaGUgc3RyaW5nIHNob3VsZCBiZSB0aGUgMTI4CitiaXQgTUQ1IGNoZWNrc3VtIG9mIHRoZSByZW1vdGUgaG9zdCdzIHB1YmxpYyBrZXksIGN1cmwgd2lsbCByZWZ1c2UgdGhlCitjb25uZWN0aW9uIHdpdGggdGhlIGhvc3QgdW5sZXNzIHRoZSBtZDVzdW1zIG1hdGNoLiBUaGlzIG9wdGlvbiBpcyBvbmx5IGZvciBTQ1AKK2FuZCBTRlRQIHRyYW5zZmVycy4gKEFkZGVkIGluIDcuMTcuMSkKKy5JUCAiLS1pZ25vcmUtY29udGVudC1sZW5ndGgiCisoSFRUUCkKK0lnbm9yZSB0aGUgQ29udGVudC1MZW5ndGggaGVhZGVyLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNlcnZlcnMKK3J1bm5pbmcgQXBhY2hlIDEueCwgd2hpY2ggd2lsbCByZXBvcnQgaW5jb3JyZWN0IENvbnRlbnQtTGVuZ3RoIGZvciBmaWxlcworbGFyZ2VyIHRoYW4gMiBnaWdhYnl0ZXMuCisuSVAgIi1pLCAtLWluY2x1ZGUiCisoSFRUUCkgSW5jbHVkZSB0aGUgSFRUUC1oZWFkZXIgaW4gdGhlIG91dHB1dC4gVGhlIEhUVFAtaGVhZGVyIGluY2x1ZGVzIHRoaW5ncworbGlrZSBzZXJ2ZXItbmFtZSwgZGF0ZSBvZiB0aGUgZG9jdW1lbnQsIEhUVFAtdmVyc2lvbiBhbmQgbW9yZS4uLgorLklQICItSSwgLS1oZWFkIgorKEhUVFAvRlRQL0ZJTEUpCitGZXRjaCB0aGUgSFRUUC1oZWFkZXIgb25seSEgSFRUUC1zZXJ2ZXJzIGZlYXR1cmUgdGhlIGNvbW1hbmQgSEVBRAord2hpY2ggdGhpcyB1c2VzIHRvIGdldCBub3RoaW5nIGJ1dCB0aGUgaGVhZGVyIG9mIGEgZG9jdW1lbnQuIFdoZW4gdXNlZAorb24gYSBGVFAgb3IgRklMRSBmaWxlLCBjdXJsIGRpc3BsYXlzIHRoZSBmaWxlIHNpemUgYW5kIGxhc3QgbW9kaWZpY2F0aW9uCit0aW1lIG9ubHkuCisuSVAgIi0taW50ZXJmYWNlIDxuYW1lPiIKK1BlcmZvcm0gYW4gb3BlcmF0aW9uIHVzaW5nIGEgc3BlY2lmaWVkIGludGVyZmFjZS4gWW91IGNhbiBlbnRlciBpbnRlcmZhY2UKK25hbWUsIElQIGFkZHJlc3Mgb3IgaG9zdCBuYW1lLiBBbiBleGFtcGxlIGNvdWxkIGxvb2sgbGlrZToKKworIGN1cmwgLS1pbnRlcmZhY2UgZXRoMDoxIGh0dHA6Ly93d3cubmV0c2NhcGUuY29tLworCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi1qLCAtLWp1bmstc2Vzc2lvbi1jb29raWVzIgorKEhUVFApIFdoZW4gY3VybCBpcyB0b2xkIHRvIHJlYWQgY29va2llcyBmcm9tIGEgZ2l2ZW4gZmlsZSwgdGhpcyBvcHRpb24gd2lsbAorbWFrZSBpdCBkaXNjYXJkIGFsbCAic2Vzc2lvbiBjb29raWVzIi4gVGhpcyB3aWxsIGJhc2ljYWxseSBoYXZlIHRoZSBzYW1lIGVmZmVjdAorYXMgaWYgYSBuZXcgc2Vzc2lvbiBpcyBzdGFydGVkLiBUeXBpY2FsIGJyb3dzZXJzIGFsd2F5cyBkaXNjYXJkIHNlc3Npb24KK2Nvb2tpZXMgd2hlbiB0aGV5J3JlIGNsb3NlZCBkb3duLgorLklQICItSiwgLS1yZW1vdGUtaGVhZGVyLW5hbWUiCisoSFRUUCkgVGhpcyBvcHRpb24gdGVsbHMgdGhlIC1PLCAtLXJlbW90ZS1uYW1lIG9wdGlvbiB0byB1c2UgdGhlIHNlcnZlci1zcGVjaWZpZWQKK0NvbnRlbnQtRGlzcG9zaXRpb24gZmlsZW5hbWUgaW5zdGVhZCBvZiBleHRyYWN0aW5nIGEgZmlsZW5hbWUgZnJvbSB0aGUgVVJMLgorLklQICItaywgLS1pbnNlY3VyZSIKKyhTU0wpIFRoaXMgb3B0aW9uIGV4cGxpY2l0bHkgYWxsb3dzIGN1cmwgdG8gcGVyZm9ybSAiaW5zZWN1cmUiIFNTTCBjb25uZWN0aW9ucworYW5kIHRyYW5zZmVycy4gQWxsIFNTTCBjb25uZWN0aW9ucyBhcmUgYXR0ZW1wdGVkIHRvIGJlIG1hZGUgc2VjdXJlIGJ5IHVzaW5nCit0aGUgQ0EgY2VydGlmaWNhdGUgYnVuZGxlIGluc3RhbGxlZCBieSBkZWZhdWx0LiBUaGlzIG1ha2VzIGFsbCBjb25uZWN0aW9ucworY29uc2lkZXJlZCAiaW5zZWN1cmUiIGZhaWwgdW5sZXNzIFxmSS1rLCAtLWluc2VjdXJlXGZQIGlzIHVzZWQuCisKK1NlZSB0aGlzIG9ubGluZSByZXNvdXJjZSBmb3IgZnVydGhlciBkZXRhaWxzOgorXGZCaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL3NzbGNlcnRzLmh0bWxcZlAKKy5JUCAiLUssIC0tY29uZmlnIDxjb25maWcgZmlsZT4iCitTcGVjaWZ5IHdoaWNoIGNvbmZpZyBmaWxlIHRvIHJlYWQgY3VybCBhcmd1bWVudHMgZnJvbS4gVGhlIGNvbmZpZyBmaWxlIGlzIGEKK3RleHQgZmlsZSBpbiB3aGljaCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGNhbiBiZSB3cml0dGVuIHdoaWNoIHRoZW4gd2lsbCBiZQordXNlZCBhcyBpZiB0aGV5IHdlcmUgd3JpdHRlbiBvbiB0aGUgYWN0dWFsIGNvbW1hbmQgbGluZS4gT3B0aW9ucyBhbmQgdGhlaXIKK3BhcmFtZXRlcnMgbXVzdCBiZSBzcGVjaWZpZWQgb24gdGhlIHNhbWUgY29uZmlnIGZpbGUgbGluZSwgc2VwYXJhdGVkIGJ5Cit3aGl0ZXNwYWNlLCBjb2xvbiwgdGhlIGVxdWFscyBzaWduIG9yIGFueSBjb21iaW5hdGlvbiB0aGVyZW9mIChob3dldmVyLAordGhlIHByZWZlcnJlZCBzZXBhcmF0b3IgaXMgdGhlIGVxdWFscyBzaWduKS4gSWYgdGhlIHBhcmFtZXRlciBpcyB0byBjb250YWluCit3aGl0ZXNwYWNlLCB0aGUgcGFyYW1ldGVyIG11c3QgYmUgZW5jbG9zZWQgd2l0aGluIHF1b3Rlcy4gV2l0aGluIGRvdWJsZQorcXVvdGVzLCB0aGUgZm9sbG93aW5nIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIGF2YWlsYWJsZTogXFxcXCwgXFwiLCBcXHQsIFxcbiwKK1xcciBhbmQgXFx2LiBBIGJhY2tzbGFzaCBwcmVjZWRpbmcgYW55IG90aGVyIGxldHRlciBpcyBpZ25vcmVkLiBJZiB0aGUKK2ZpcnN0IGNvbHVtbiBvZiBhIGNvbmZpZyBsaW5lIGlzIGEgJyMnIGNoYXJhY3RlciwgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgd2lsbCBiZQordHJlYXRlZCBhcyBhIGNvbW1lbnQuIE9ubHkgd3JpdGUgb25lIG9wdGlvbiBwZXIgcGh5c2ljYWwgbGluZSBpbiB0aGUgY29uZmlnCitmaWxlLgorCitTcGVjaWZ5IHRoZSBmaWxlbmFtZSB0byAtSywgLS1jb25maWcgYXMgJy0nIHRvIG1ha2UgY3VybCByZWFkIHRoZSBmaWxlIGZyb20KK3N0ZGluLgorCitOb3RlIHRoYXQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGEgVVJMIGluIHRoZSBjb25maWcgZmlsZSwgeW91IG5lZWQgdG8gc3BlY2lmeQoraXQgdXNpbmcgdGhlIFxmSS0tdXJsXGZQIG9wdGlvbiwgYW5kIG5vdCBieSBzaW1wbHkgd3JpdGluZyB0aGUgVVJMIG9uIGl0cyBvd24KK2xpbmUuIFNvLCBpdCBjb3VsZCBsb29rIHNpbWlsYXIgdG8gdGhpczoKKwordXJsID0gImh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy8iCisKK0xvbmcgb3B0aW9uIG5hbWVzIGNhbiBvcHRpb25hbGx5IGJlIGdpdmVuIGluIHRoZSBjb25maWcgZmlsZSB3aXRob3V0IHRoZQoraW5pdGlhbCBkb3VibGUgZGFzaGVzLgorCitXaGVuIGN1cmwgaXMgaW52b2tlZCwgaXQgYWx3YXlzICh1bmxlc3MgXGZJLXFcZlAgaXMgdXNlZCkgY2hlY2tzIGZvciBhIGRlZmF1bHQKK2NvbmZpZyBmaWxlIGFuZCB1c2VzIGl0IGlmIGZvdW5kLiBUaGUgZGVmYXVsdCBjb25maWcgZmlsZSBpcyBjaGVja2VkIGZvciBpbgordGhlIGZvbGxvd2luZyBwbGFjZXMgaW4gdGhpcyBvcmRlcjoKKworMSkgY3VybCB0cmllcyB0byBmaW5kIHRoZSAiaG9tZSBkaXIiOiBJdCBmaXJzdCBjaGVja3MgZm9yIHRoZSBDVVJMX0hPTUUgYW5kCit0aGVuIHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlcy4gRmFpbGluZyB0aGF0LCBpdCB1c2VzIGdldHB3dWlkKCkgb24KK1VOSVgtbGlrZSBzeXN0ZW1zICh3aGljaCByZXR1cm5zIHRoZSBob21lIGRpciBnaXZlbiB0aGUgY3VycmVudCB1c2VyIGluIHlvdXIKK3N5c3RlbSkuIE9uIFdpbmRvd3MsIGl0IHRoZW4gY2hlY2tzIGZvciB0aGUgQVBQREFUQSB2YXJpYWJsZSwgb3IgYXMgYSBsYXN0CityZXNvcnQgdGhlICclVVNFUlBST0ZJTEUlXFxBcHBsaWNhdGlvbiBEYXRhJy4KKworMikgT24gd2luZG93cywgaWYgdGhlcmUgaXMgbm8gX2N1cmxyYyBmaWxlIGluIHRoZSBob21lIGRpciwgaXQgY2hlY2tzIGZvciBvbmUKK2luIHRoZSBzYW1lIGRpciB0aGUgY3VybCBleGVjdXRhYmxlIGlzIHBsYWNlZC4gT24gVU5JWC1saWtlIHN5c3RlbXMsIGl0IHdpbGwKK3NpbXBseSB0cnkgdG8gbG9hZCAuY3VybHJjIGZyb20gdGhlIGRldGVybWluZWQgaG9tZSBkaXIuCisKKy5uZgorIyAtLS0gRXhhbXBsZSBmaWxlIC0tLQorIyB0aGlzIGlzIGEgY29tbWVudAordXJsID0gImN1cmwuaGF4eC5zZSIKK291dHB1dCA9ICJjdXJsaGVyZS5odG1sIgordXNlci1hZ2VudCA9ICJzdXBlcmFnZW50LzEuMCIKKworIyBhbmQgZmV0Y2ggYW5vdGhlciBVUkwgdG9vCit1cmwgPSAiY3VybC5oYXh4LnNlL2RvY3MvbWFucGFnZS5odG1sIgorLU8KK3JlZmVyZXIgPSAiaHR0cDovL25vd2hlcmVhdGFsbC5jb20vIgorIyAtLS0gRW5kIG9mIGV4YW1wbGUgZmlsZSAtLS0KKy5maQorCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyB0byBsb2FkIG11bHRpcGxlIGNvbmZpZyBmaWxlcy4KKy5JUCAiLS1rZWVwYWxpdmUtdGltZSA8c2Vjb25kcz4iCitUaGlzIG9wdGlvbiBzZXRzIHRoZSB0aW1lIGEgY29ubmVjdGlvbiBuZWVkcyB0byByZW1haW4gaWRsZSBiZWZvcmUgc2VuZGluZwora2VlcGFsaXZlIHByb2JlcyBhbmQgdGhlIHRpbWUgYmV0d2VlbiBpbmRpdmlkdWFsIGtlZXBhbGl2ZSBwcm9iZXMuIEl0IGlzCitjdXJyZW50bHkgZWZmZWN0aXZlIG9uIG9wZXJhdGluZyBzeXN0ZW1zIG9mZmVyaW5nIHRoZSBUQ1BfS0VFUElETEUgYW5kCitUQ1BfS0VFUElOVFZMIHNvY2tldCBvcHRpb25zIChtZWFuaW5nIExpbnV4LCByZWNlbnQgQUlYLCBIUC1VWCBhbmQgbW9yZSkuIFRoaXMKK29wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIFxmSS0tbm8ta2VlcGFsaXZlXGZQIGlzIHVzZWQuIChBZGRlZCBpbiA3LjE4LjApCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgbXVsdGlwbGUgdGltZXMsIHRoZSBsYXN0IG9jY3VycmVuY2Ugc2V0cyB0aGUgYW1vdW50LiBJZgordW5zcGVjaWZpZWQsIHRoZSBvcHRpb24gZGVmYXVsdHMgdG8gNjAgc2Vjb25kcy4KKy5JUCAiLS1rZXkgPGtleT4iCisoU1NML1NTSCkgUHJpdmF0ZSBrZXkgZmlsZSBuYW1lLiBBbGxvd3MgeW91IHRvIHByb3ZpZGUgeW91ciBwcml2YXRlIGtleSBpbiB0aGlzCitzZXBhcmF0ZSBmaWxlLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi0ta2V5LXR5cGUgPHR5cGU+IgorKFNTTCkgUHJpdmF0ZSBrZXkgZmlsZSB0eXBlLiBTcGVjaWZ5IHdoaWNoIHR5cGUgeW91ciBcZkktLWtleVxmUCBwcm92aWRlZAorcHJpdmF0ZSBrZXkgaXMuIERFUiwgUEVNLCBhbmQgRU5HIGFyZSBzdXBwb3J0ZWQuIElmIG5vdCBzcGVjaWZpZWQsIFBFTSBpcworYXNzdW1lZC4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgorLklQICItLWtyYiA8bGV2ZWw+IgorKEZUUCkgRW5hYmxlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGFuZCB1c2UuIFRoZSBsZXZlbCBtdXN0IGJlIGVudGVyZWQgYW5kCitzaG91bGQgYmUgb25lIG9mICdjbGVhcicsICdzYWZlJywgJ2NvbmZpZGVudGlhbCcsIG9yICdwcml2YXRlJy4gU2hvdWxkIHlvdSB1c2UKK2EgbGV2ZWwgdGhhdCBpcyBub3Qgb25lIG9mIHRoZXNlLCAncHJpdmF0ZScgd2lsbCBpbnN0ZWFkIGJlIHVzZWQuCisKK1RoaXMgb3B0aW9uIHJlcXVpcmVzIGEgbGlicmFyeSBidWlsdCB3aXRoIGtlcmJlcm9zNCBvciBHU1NBUEkKKyhHU1MtTmVnb3RpYXRlKSBzdXBwb3J0LiBUaGlzIGlzIG5vdCB2ZXJ5IGNvbW1vbi4gVXNlIFxmSS1WLCAtLXZlcnNpb25cZlAgdG8KK3NlZSBpZiB5b3VyIGN1cmwgc3VwcG9ydHMgaXQuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KKy5JUCAiLWwsIC0tbGlzdC1vbmx5IgorKEZUUCkKK1doZW4gbGlzdGluZyBhbiBGVFAgZGlyZWN0b3J5LCB0aGlzIHN3aXRjaCBmb3JjZXMgYSBuYW1lLW9ubHkgdmlldy4KK0VzcGVjaWFsbHkgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1hY2hpbmUtcGFyc2UgdGhlIGNvbnRlbnRzIG9mIGFuIEZUUAorZGlyZWN0b3J5IHNpbmNlIHRoZSBub3JtYWwgZGlyZWN0b3J5IHZpZXcgZG9lc24ndCB1c2UgYSBzdGFuZGFyZCBsb29rCitvciBmb3JtYXQuCisKK1RoaXMgb3B0aW9uIGNhdXNlcyBhbiBGVFAgTkxTVCBjb21tYW5kIHRvIGJlIHNlbnQuICBTb21lIEZUUCBzZXJ2ZXJzCitsaXN0IG9ubHkgZmlsZXMgaW4gdGhlaXIgcmVzcG9uc2UgdG8gTkxTVDsgdGhleSBkbyBub3QgaW5jbHVkZQorc3ViZGlyZWN0b3JpZXMgYW5kIHN5bWJvbGljIGxpbmtzLgorCisuSVAgIi1MLCAtLWxvY2F0aW9uIgorKEhUVFAvSFRUUFMpIElmIHRoZSBzZXJ2ZXIgcmVwb3J0cyB0aGF0IHRoZSByZXF1ZXN0ZWQgcGFnZSBoYXMgbW92ZWQgdG8gYQorZGlmZmVyZW50IGxvY2F0aW9uIChpbmRpY2F0ZWQgd2l0aCBhIExvY2F0aW9uOiBoZWFkZXIgYW5kIGEgM1hYIHJlc3BvbnNlIGNvZGUpLAordGhpcyBvcHRpb24gd2lsbCBtYWtlIGN1cmwgcmVkbyB0aGUgcmVxdWVzdCBvbiB0aGUgbmV3IHBsYWNlLiBJZiB1c2VkIHRvZ2V0aGVyCit3aXRoIFxmSS1pLCAtLWluY2x1ZGVcZlAgb3IgXGZJLUksIC0taGVhZFxmUCwgaGVhZGVycyBmcm9tIGFsbCByZXF1ZXN0ZWQgcGFnZXMKK3dpbGwgYmUgc2hvd24uIFdoZW4gYXV0aGVudGljYXRpb24gaXMgdXNlZCwgY3VybCBvbmx5IHNlbmRzIGl0cyBjcmVkZW50aWFscyB0bwordGhlIGluaXRpYWwgaG9zdC4gSWYgYSByZWRpcmVjdCB0YWtlcyBjdXJsIHRvIGEgZGlmZmVyZW50IGhvc3QsIGl0IHdvbid0IGJlCithYmxlIHRvIGludGVyY2VwdCB0aGUgdXNlcitwYXNzd29yZC4gU2VlIGFsc28gXGZJLS1sb2NhdGlvbi10cnVzdGVkXGZQIG9uIGhvdwordG8gY2hhbmdlIHRoaXMuIFlvdSBjYW4gbGltaXQgdGhlIGFtb3VudCBvZiByZWRpcmVjdHMgdG8gZm9sbG93IGJ5IHVzaW5nIHRoZQorXGZJLS1tYXgtcmVkaXJzXGZQIG9wdGlvbi4KKworV2hlbiBjdXJsIGZvbGxvd3MgYSByZWRpcmVjdCBhbmQgdGhlIHJlcXVlc3QgaXMgbm90IGEgcGxhaW4gR0VUIChmb3IgZXhhbXBsZQorUE9TVCBvciBQVVQpLCBpdCB3aWxsIGRvIHRoZSBmb2xsb3dpbmcgcmVxdWVzdCB3aXRoIGEgR0VUIGlmIHRoZSBIVFRQIHJlc3BvbnNlCit3YXMgMzAxLCAzMDIsIG9yIDMwMy4gSWYgdGhlIHJlc3BvbnNlIGNvZGUgd2FzIGFueSBvdGhlciAzeHggY29kZSwgY3VybCB3aWxsCityZS1zZW5kIHRoZSBmb2xsb3dpbmcgcmVxdWVzdCB1c2luZyB0aGUgc2FtZSB1bm1vZGlmaWVkIG1ldGhvZC4KKy5JUCAiLS1saWJjdXJsIDxmaWxlPiIKK0FwcGVuZCB0aGlzIG9wdGlvbiB0byBhbnkgb3JkaW5hcnkgY3VybCBjb21tYW5kIGxpbmUsIGFuZCB5b3Ugd2lsbCBnZXQgYQorbGliY3VybC11c2luZyBDIHNvdXJjZSBjb2RlIHdyaXR0ZW4gdG8gdGhlIGZpbGUgdGhhdCBkb2VzIHRoZSBlcXVpdmFsZW50CitvZiB3aGF0IHlvdXIgY29tbWFuZC1saW5lIG9wZXJhdGlvbiBkb2VzIQorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IGdpdmVuIGZpbGUgbmFtZSB3aWxsIGJlCit1c2VkLiAoQWRkZWQgaW4gNy4xNi4xKQorLklQICItLWxpbWl0LXJhdGUgPHNwZWVkPiIKK1NwZWNpZnkgdGhlIG1heGltdW0gdHJhbnNmZXIgcmF0ZSB5b3Ugd2FudCBjdXJsIHRvIHVzZS4gVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bAoraWYgeW91IGhhdmUgYSBsaW1pdGVkIHBpcGUgYW5kIHlvdSdkIGxpa2UgeW91ciB0cmFuc2ZlciBub3QgdG8gdXNlIHlvdXIgZW50aXJlCitiYW5kd2lkdGguCisKK1RoZSBnaXZlbiBzcGVlZCBpcyBtZWFzdXJlZCBpbiBieXRlcy9zZWNvbmQsIHVubGVzcyBhIHN1ZmZpeCBpcyBhcHBlbmRlZC4KK0FwcGVuZGluZyAnaycgb3IgJ0snIHdpbGwgY291bnQgdGhlIG51bWJlciBhcyBraWxvYnl0ZXMsICdtJyBvciBNJyBtYWtlcyBpdAorbWVnYWJ5dGVzLCB3aGlsZSAnZycgb3IgJ0cnIG1ha2VzIGl0IGdpZ2FieXRlcy4gRXhhbXBsZXM6IDIwMEssIDNtIGFuZCAxRy4KKworVGhlIGdpdmVuIHJhdGUgaXMgdGhlIGF2ZXJhZ2Ugc3BlZWQgY291bnRlZCBkdXJpbmcgdGhlIGVudGlyZSB0cmFuc2Zlci4gSXQKK21lYW5zIHRoYXQgY3VybCBtaWdodCB1c2UgaGlnaGVyIHRyYW5zZmVyIHNwZWVkcyBpbiBzaG9ydCBidXJzdHMsIGJ1dCBvdmVyCit0aW1lIGl0IHVzZXMgbm8gbW9yZSB0aGFuIHRoZSBnaXZlbiByYXRlLgorCitJZiB5b3UgYWxzbyB1c2UgdGhlIFxmSS1ZLCAtLXNwZWVkLWxpbWl0XGZQIG9wdGlvbiwgdGhhdCBvcHRpb24gd2lsbCB0YWtlCitwcmVjZWRlbmNlIGFuZCBtaWdodCBjcmlwcGxlIHRoZSByYXRlLWxpbWl0aW5nIHNsaWdodGx5LCB0byBoZWxwIGtlZXBpbmcgdGhlCitzcGVlZC1saW1pdCBsb2dpYyB3b3JraW5nLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi0tbG9jYWwtcG9ydCA8bnVtPlstbnVtXSIKK1NldCBhIHByZWZlcnJlZCBudW1iZXIgb3IgcmFuZ2Ugb2YgbG9jYWwgcG9ydCBudW1iZXJzIHRvIHVzZSBmb3IgdGhlCitjb25uZWN0aW9uKHMpLiAgTm90ZSB0aGF0IHBvcnQgbnVtYmVycyBieSBuYXR1cmUgYXJlIGEgc2NhcmNlIHJlc291cmNlIHRoYXQKK3dpbGwgYmUgYnVzeSBhdCB0aW1lcyBzbyBzZXR0aW5nIHRoaXMgcmFuZ2UgdG8gc29tZXRoaW5nIHRvbyBuYXJyb3cgbWlnaHQKK2NhdXNlIHVubmVjZXNzYXJ5IGNvbm5lY3Rpb24gc2V0dXAgZmFpbHVyZXMuIChBZGRlZCBpbiA3LjE1LjIpCisuSVAgIi0tbG9jYXRpb24tdHJ1c3RlZCIKKyhIVFRQL0hUVFBTKSBMaWtlIFxmSS1MLCAtLWxvY2F0aW9uXGZQLCBidXQgd2lsbCBhbGxvdyBzZW5kaW5nIHRoZSBuYW1lICsKK3Bhc3N3b3JkIHRvIGFsbCBob3N0cyB0aGF0IHRoZSBzaXRlIG1heSByZWRpcmVjdCB0by4gVGhpcyBtYXkgb3IgbWF5IG5vdAoraW50cm9kdWNlIGEgc2VjdXJpdHkgYnJlYWNoIGlmIHRoZSBzaXRlIHJlZGlyZWN0cyB5b3UgdG8gYSBzaXRlIHRvIHdoaWNoCit5b3UnbGwgc2VuZCB5b3VyIGF1dGhlbnRpY2F0aW9uIGluZm8gKHdoaWNoIGlzIHBsYWludGV4dCBpbiB0aGUgY2FzZSBvZiBIVFRQCitCYXNpYyBhdXRoZW50aWNhdGlvbikuCisuSVAgIi1tLCAtLW1heC10aW1lIDxzZWNvbmRzPiIKK01heGltdW0gdGltZSBpbiBzZWNvbmRzIHRoYXQgeW91IGFsbG93IHRoZSB3aG9sZSBvcGVyYXRpb24gdG8gdGFrZS4gIFRoaXMgaXMKK3VzZWZ1bCBmb3IgcHJldmVudGluZyB5b3VyIGJhdGNoIGpvYnMgZnJvbSBoYW5naW5nIGZvciBob3VycyBkdWUgdG8gc2xvdworbmV0d29ya3Mgb3IgbGlua3MgZ29pbmcgZG93bi4gIFNlZSBhbHNvIHRoZSBcZkktLWNvbm5lY3QtdGltZW91dFxmUCBvcHRpb24uCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KKy5JUCAiLS1tYWlsLWF1dGggPGFkZHJlc3M+IgorKFNNVFApIFNwZWNpZnkgYSBzaW5nbGUgYWRkcmVzcy4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUKK2F1dGhlbnRpY2F0aW9uIGFkZHJlc3MgKGlkZW50aXR5KSBvZiBhIHN1Ym1pdHRlZCBtZXNzYWdlIHRoYXQgaXMgYmVpbmcgcmVsYXllZAordG8gYW5vdGhlciBzZXJ2ZXIuCisKKyhBZGRlZCBpbiA3LjI1LjApCisuSVAgIi0tbWFpbC1mcm9tIDxhZGRyZXNzPiIKKyhTTVRQKSBTcGVjaWZ5IGEgc2luZ2xlIGFkZHJlc3MgdGhhdCB0aGUgZ2l2ZW4gbWFpbCBzaG91bGQgZ2V0IHNlbnQgZnJvbS4KKworKEFkZGVkIGluIDcuMjAuMCkKKy5JUCAiLS1tYXgtZmlsZXNpemUgPGJ5dGVzPiIKK1NwZWNpZnkgdGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIGEgZmlsZSB0byBkb3dubG9hZC4gSWYgdGhlIGZpbGUKK3JlcXVlc3RlZCBpcyBsYXJnZXIgdGhhbiB0aGlzIHZhbHVlLCB0aGUgdHJhbnNmZXIgd2lsbCBub3Qgc3RhcnQgYW5kIGN1cmwgd2lsbAorcmV0dXJuIHdpdGggZXhpdCBjb2RlIDYzLgorCitcZkJOT1RFOlxmUCBUaGUgZmlsZSBzaXplIGlzIG5vdCBhbHdheXMga25vd24gcHJpb3IgdG8gZG93bmxvYWQsIGFuZCBmb3Igc3VjaCBmaWxlcwordGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBldmVuIGlmIHRoZSBmaWxlIHRyYW5zZmVyIGVuZHMgdXAgYmVpbmcgbGFyZ2VyIHRoYW4KK3RoaXMgZ2l2ZW4gbGltaXQuIFRoaXMgY29uY2VybnMgYm90aCBGVFAgYW5kIEhUVFAgdHJhbnNmZXJzLgorLklQICItLW1haWwtcmNwdCA8YWRkcmVzcz4iCisoU01UUCkgU3BlY2lmeSBhIHNpbmdsZSBhZGRyZXNzIHRoYXQgdGhlIGdpdmVuIG1haWwgc2hvdWxkIGdldCBzZW50IHRvLiBUaGlzCitvcHRpb24gY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMgdG8gc3BlY2lmeSBtYW55IHJlY2lwaWVudHMuCisKKyhBZGRlZCBpbiA3LjIwLjApCisuSVAgIi0tbWF4LXJlZGlycyA8bnVtPiIKK1NldCBtYXhpbXVtIG51bWJlciBvZiByZWRpcmVjdGlvbi1mb2xsb3dpbmdzIGFsbG93ZWQuIElmIFxmSS1MLCAtLWxvY2F0aW9uXGZQCitpcyB1c2VkLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IGN1cmwgZnJvbSBmb2xsb3dpbmcgcmVkaXJlY3Rpb25zCitcJiJpbiBhYnN1cmR1bSIuIEJ5IGRlZmF1bHQsIHRoZSBsaW1pdCBpcyBzZXQgdG8gNTAgcmVkaXJlY3Rpb25zLiBTZXQgdGhpcworb3B0aW9uIHRvIC0xIHRvIG1ha2UgaXQgbGltaXRsZXNzLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi1uLCAtLW5ldHJjIgorTWFrZXMgY3VybCBzY2FuIHRoZSBcZkkubmV0cmNcZlAgKFxmSV9uZXRyY1xmUCBvbiBXaW5kb3dzKSBmaWxlIGluIHRoZSB1c2VyJ3MKK2hvbWUgZGlyZWN0b3J5IGZvciBsb2dpbiBuYW1lIGFuZCBwYXNzd29yZC4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgRlRQIG9uCitVTklYLiBJZiB1c2VkIHdpdGggSFRUUCwgY3VybCB3aWxsIGVuYWJsZSB1c2VyIGF1dGhlbnRpY2F0aW9uLiBTZWUKKy5CUiBuZXRyYyg0KQorb3IKKy5CUiBmdHAoMSkKK2ZvciBkZXRhaWxzIG9uIHRoZSBmaWxlIGZvcm1hdC4gQ3VybCB3aWxsIG5vdCBjb21wbGFpbiBpZiB0aGF0IGZpbGUKK2RvZXNuJ3QgaGF2ZSB0aGUgcmlnaHQgcGVybWlzc2lvbnMgKGl0IHNob3VsZCBub3QgYmUgZWl0aGVyIHdvcmxkLSBvcgorZ3JvdXAtcmVhZGFibGUpLiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgIkhPTUUiIGlzIHVzZWQgdG8gZmluZCB0aGUgaG9tZQorZGlyZWN0b3J5LgorCitBIHF1aWNrIGFuZCB2ZXJ5IHNpbXBsZSBleGFtcGxlIG9mIGhvdyB0byBzZXR1cCBhIFxmSS5uZXRyY1xmUCB0byBhbGxvdyBjdXJsCit0byBGVFAgdG8gdGhlIG1hY2hpbmUgaG9zdC5kb21haW4uY29tIHdpdGggdXNlciBuYW1lIFwmJ215c2VsZicgYW5kIHBhc3N3b3JkCitcJidzZWNyZXQnIHNob3VsZCBsb29rIHNpbWlsYXIgdG86CisKKy5CICJtYWNoaW5lIGhvc3QuZG9tYWluLmNvbSBsb2dpbiBteXNlbGYgcGFzc3dvcmQgc2VjcmV0IgorLklQICItTiwgLS1uby1idWZmZXIiCitEaXNhYmxlcyB0aGUgYnVmZmVyaW5nIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiBJbiBub3JtYWwgd29yayBzaXR1YXRpb25zLCBjdXJsCit3aWxsIHVzZSBhIHN0YW5kYXJkIGJ1ZmZlcmVkIG91dHB1dCBzdHJlYW0gdGhhdCB3aWxsIGhhdmUgdGhlIGVmZmVjdCB0aGF0IGl0Cit3aWxsIG91dHB1dCB0aGUgZGF0YSBpbiBjaHVua3MsIG5vdCBuZWNlc3NhcmlseSBleGFjdGx5IHdoZW4gdGhlIGRhdGEgYXJyaXZlcy4KK1VzaW5nIHRoaXMgb3B0aW9uIHdpbGwgZGlzYWJsZSB0aGF0IGJ1ZmZlcmluZy4KKworTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG5lZ2F0ZWQgb3B0aW9uIG5hbWUgZG9jdW1lbnRlZC4gWW91IGNhbiB0aHVzIHVzZQorXGZJLS1idWZmZXJcZlAgdG8gZW5mb3JjZSB0aGUgYnVmZmVyaW5nLgorLklQICItLW5ldHJjLWZpbGUiCitUaGlzIG9wdGlvbiBpcyBzaW1pbGFyIHRvIFxmSS0tbmV0cmNcZlAsIGV4Y2VwdCB0aGF0IHlvdSBwcm92aWRlIHRoZSBwYXRoCisoYWJzb2x1dGUgb3IgcmVsYXRpdmUpIHRvIHRoZSBuZXRyYyBmaWxlIHRoYXQgQ3VybCBzaG91bGQgdXNlLgorWW91IGNhbiBvbmx5IHNwZWNpZnkgb25lIG5ldHJjIGZpbGUgcGVyIGludm9jYXRpb24uIElmIHNldmVyYWwKK1xmSS0tbmV0cmMtZmlsZVxmUCBvcHRpb25zIGFyZSBwcm92aWRlZCwgb25seSB0aGUgXGZCbGFzdCBvbmVcZlAgd2lsbCBiZSB1c2VkLgorKEFkZGVkIGluIDcuMjEuNSkKKworVGhpcyBvcHRpb24gb3ZlcnJpZGVzIGFueSB1c2Ugb2YgXGZJLS1uZXRyY1xmUCBhcyB0aGV5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCitJdCB3aWxsIGFsc28gYWJpZGUgYnkgLS1uZXRyYy1vcHRpb25hbCBpZiBzcGVjaWZpZWQuCisKKy5JUCAiLS1uZXRyYy1vcHRpb25hbCIKK1Zlcnkgc2ltaWxhciB0byBcZkktLW5ldHJjXGZQLCBidXQgdGhpcyBvcHRpb24gbWFrZXMgdGhlIC5uZXRyYyB1c2FnZQorXGZCb3B0aW9uYWxcZlAgYW5kIG5vdCBtYW5kYXRvcnkgYXMgdGhlIFxmSS0tbmV0cmNcZlAgb3B0aW9uIGRvZXMuCisKKy5JUCAiLS1uZWdvdGlhdGUiCisoSFRUUCkgRW5hYmxlcyBHU1MtTmVnb3RpYXRlIGF1dGhlbnRpY2F0aW9uLiBUaGUgR1NTLU5lZ290aWF0ZSBtZXRob2Qgd2FzCitkZXNpZ25lZCBieSBNaWNyb3NvZnQgYW5kIGlzIHVzZWQgaW4gdGhlaXIgd2ViIGFwcGxpY2F0aW9ucy4gSXQgaXMgcHJpbWFyaWx5CittZWFudCBhcyBhIHN1cHBvcnQgZm9yIEtlcmJlcm9zNSBhdXRoZW50aWNhdGlvbiBidXQgbWF5IGJlIGFsc28gdXNlZCBhbG9uZword2l0aCBhbm90aGVyIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIElFVEYgZHJhZnQKK2RyYWZ0LWJyZXphay1zcG5lZ28taHR0cC0wNC50eHQuCisKK0lmIHlvdSB3YW50IHRvIGVuYWJsZSBOZWdvdGlhdGUgZm9yIHlvdXIgcHJveHkgYXV0aGVudGljYXRpb24sIHRoZW4gdXNlCitcZkktLXByb3h5LW5lZ290aWF0ZVxmUC4KKworVGhpcyBvcHRpb24gcmVxdWlyZXMgYSBsaWJyYXJ5IGJ1aWx0IHdpdGggR1NTQVBJIHN1cHBvcnQuIFRoaXMgaXMKK25vdCB2ZXJ5IGNvbW1vbi4gVXNlIFxmSS1WLCAtLXZlcnNpb25cZlAgdG8gc2VlIGlmIHlvdXIgdmVyc2lvbiBzdXBwb3J0cworR1NTLU5lZ290aWF0ZS4KKworV2hlbiB1c2luZyB0aGlzIG9wdGlvbiwgeW91IG11c3QgYWxzbyBwcm92aWRlIGEgZmFrZSAtdSwgLS11c2VyIG9wdGlvbiB0bworYWN0aXZhdGUgdGhlIGF1dGhlbnRpY2F0aW9uIGNvZGUgcHJvcGVybHkuIFNlbmRpbmcgYSAnLXUgOicgaXMgZW5vdWdoIGFzIHRoZQordXNlciBuYW1lIGFuZCBwYXNzd29yZCBmcm9tIHRoZSAtdSBvcHRpb24gYXJlbid0IGFjdHVhbGx5IHVzZWQuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBtYWtlIG5vCitkaWZmZXJlbmNlLgorLklQICItLW5vLWtlZXBhbGl2ZSIKK0Rpc2FibGVzIHRoZSB1c2Ugb2Yga2VlcGFsaXZlIG1lc3NhZ2VzIG9uIHRoZSBUQ1AgY29ubmVjdGlvbiwgYXMgYnkgZGVmYXVsdAorY3VybCBlbmFibGVzIHRoZW0uCisKK05vdGUgdGhhdCB0aGlzIGlzIHRoZSBuZWdhdGVkIG9wdGlvbiBuYW1lIGRvY3VtZW50ZWQuIFlvdSBjYW4gdGh1cyB1c2UKK1xmSS0ta2VlcGFsaXZlXGZQIHRvIGVuZm9yY2Uga2VlcGFsaXZlLgorLklQICItLW5vLXNlc3Npb25pZCIKKyhTU0wpIERpc2FibGUgY3VybCdzIHVzZSBvZiBTU0wgc2Vzc2lvbi1JRCBjYWNoaW5nLiAgQnkgZGVmYXVsdCBhbGwgdHJhbnNmZXJzCithcmUgZG9uZSB1c2luZyB0aGUgY2FjaGUuIE5vdGUgdGhhdCB3aGlsZSBub3RoaW5nIHNob3VsZCBldmVyIGdldCBodXJ0IGJ5CithdHRlbXB0aW5nIHRvIHJldXNlIFNTTCBzZXNzaW9uLUlEcywgdGhlcmUgc2VlbSB0byBiZSBicm9rZW4gU1NMCitpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIHdpbGQgdGhhdCBtYXkgcmVxdWlyZSB5b3UgdG8gZGlzYWJsZSB0aGlzIGluIG9yZGVyIGZvcgoreW91IHRvIHN1Y2NlZWQuIChBZGRlZCBpbiA3LjE2LjApCisKK05vdGUgdGhhdCB0aGlzIGlzIHRoZSBuZWdhdGVkIG9wdGlvbiBuYW1lIGRvY3VtZW50ZWQuIFlvdSBjYW4gdGh1cyB1c2UKK1xmSS0tc2Vzc2lvbmlkXGZQIHRvIGVuZm9yY2Ugc2Vzc2lvbi1JRCBjYWNoaW5nLgorLklQICItLW5vcHJveHkgPG5vLXByb3h5LWxpc3Q+IgorQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaG9zdHMgd2hpY2ggZG8gbm90IHVzZSBhIHByb3h5LCBpZiBvbmUgaXMgc3BlY2lmaWVkLgorVGhlIG9ubHkgd2lsZGNhcmQgaXMgYSBzaW5nbGUgKiBjaGFyYWN0ZXIsIHdoaWNoIG1hdGNoZXMgYWxsIGhvc3RzLCBhbmQKK2VmZmVjdGl2ZWx5IGRpc2FibGVzIHRoZSBwcm94eS4gRWFjaCBuYW1lIGluIHRoaXMgbGlzdCBpcyBtYXRjaGVkIGFzIGVpdGhlcgorYSBkb21haW4gd2hpY2ggY29udGFpbnMgdGhlIGhvc3RuYW1lLCBvciB0aGUgaG9zdG5hbWUgaXRzZWxmLiBGb3IgZXhhbXBsZSwKK2xvY2FsLmNvbSB3b3VsZCBtYXRjaCBsb2NhbC5jb20sIGxvY2FsLmNvbTo4MCwgYW5kIHd3dy5sb2NhbC5jb20sIGJ1dCBub3QKK3d3dy5ub3Rsb2NhbC5jb20uICAoQWRkZWQgaW4gNy4xOS40KS4KKy5JUCAiLS1udGxtIgorKEhUVFApIEVuYWJsZXMgTlRMTSBhdXRoZW50aWNhdGlvbi4gVGhlIE5UTE0gYXV0aGVudGljYXRpb24gbWV0aG9kIHdhcworZGVzaWduZWQgYnkgTWljcm9zb2Z0IGFuZCBpcyB1c2VkIGJ5IElJUyB3ZWIgc2VydmVycy4gSXQgaXMgYSBwcm9wcmlldGFyeQorcHJvdG9jb2wsIHJldmVyc2UtZW5naW5lZXJlZCBieSBjbGV2ZXIgcGVvcGxlIGFuZCBpbXBsZW1lbnRlZCBpbiBjdXJsIGJhc2VkCitvbiB0aGVpciBlZmZvcnRzLiBUaGlzIGtpbmQgb2YgYmVoYXZpb3Igc2hvdWxkIG5vdCBiZSBlbmRvcnNlZCwgeW91IHNob3VsZAorZW5jb3VyYWdlIGV2ZXJ5b25lIHdobyB1c2VzIE5UTE0gdG8gc3dpdGNoIHRvIGEgcHVibGljIGFuZCBkb2N1bWVudGVkCithdXRoZW50aWNhdGlvbiBtZXRob2QgaW5zdGVhZCwgc3VjaCBhcyBEaWdlc3QuCisKK0lmIHlvdSB3YW50IHRvIGVuYWJsZSBOVExNIGZvciB5b3VyIHByb3h5IGF1dGhlbnRpY2F0aW9uLCB0aGVuIHVzZQorXGZJLS1wcm94eS1udGxtXGZQLgorCitUaGlzIG9wdGlvbiByZXF1aXJlcyBhIGxpYnJhcnkgYnVpbHQgd2l0aCBTU0wgc3VwcG9ydC4gVXNlCitcZkktViwgLS12ZXJzaW9uXGZQIHRvIHNlZSBpZiB5b3VyIGN1cmwgc3VwcG9ydHMgTlRMTS4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgZm9sbG93aW5nIG9jY3VycmVuY2VzIG1ha2Ugbm8KK2RpZmZlcmVuY2UuCisuSVAgIi1vLCAtLW91dHB1dCA8ZmlsZT4iCitXcml0ZSBvdXRwdXQgdG8gPGZpbGU+IGluc3RlYWQgb2Ygc3Rkb3V0LiBJZiB5b3UgYXJlIHVzaW5nIHt9IG9yIFtdIHRvIGZldGNoCittdWx0aXBsZSBkb2N1bWVudHMsIHlvdSBjYW4gdXNlICcjJyBmb2xsb3dlZCBieSBhIG51bWJlciBpbiB0aGUgPGZpbGU+CitzcGVjaWZpZXIuIFRoYXQgdmFyaWFibGUgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBjdXJyZW50IHN0cmluZyBmb3IgdGhlIFVSTAorYmVpbmcgZmV0Y2hlZC4gTGlrZSBpbjoKKworICBjdXJsIGh0dHA6Ly97b25lLHR3b30uc2l0ZS5jb20gLW8gImZpbGVfIzEudHh0IgorCitvciB1c2Ugc2V2ZXJhbCB2YXJpYWJsZXMgbGlrZToKKworICBjdXJsIGh0dHA6Ly97c2l0ZSxob3N0fS5ob3N0WzEtNV0uY29tIC1vICIjMV8jMiIKKworWW91IG1heSB1c2UgdGhpcyBvcHRpb24gYXMgbWFueSB0aW1lcyBhcyB0aGUgbnVtYmVyIG9mIFVSTHMgeW91IGhhdmUuCisKK1NlZSBhbHNvIHRoZSBcZkktLWNyZWF0ZS1kaXJzXGZQIG9wdGlvbiB0byBjcmVhdGUgdGhlIGxvY2FsIGRpcmVjdG9yaWVzCitkeW5hbWljYWxseS4gU3BlY2lmeWluZyB0aGUgb3V0cHV0IGFzICctJyAoYSBzaW5nbGUgZGFzaCkgd2lsbCBmb3JjZSB0aGUKK291dHB1dCB0byBiZSBkb25lIHRvIHN0ZG91dC4KKy5JUCAiLU8sIC0tcmVtb3RlLW5hbWUiCitXcml0ZSBvdXRwdXQgdG8gYSBsb2NhbCBmaWxlIG5hbWVkIGxpa2UgdGhlIHJlbW90ZSBmaWxlIHdlIGdldC4gKE9ubHkgdGhlIGZpbGUKK3BhcnQgb2YgdGhlIHJlbW90ZSBmaWxlIGlzIHVzZWQsIHRoZSBwYXRoIGlzIGN1dCBvZmYuKQorCitUaGUgcmVtb3RlIGZpbGUgbmFtZSB0byB1c2UgZm9yIHNhdmluZyBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgZ2l2ZW4gVVJMLAorbm90aGluZyBlbHNlLgorCitDb25zZXF1ZW50aWFsbHksIHRoZSBmaWxlIHdpbGwgYmUgc2F2ZWQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIElmCit5b3Ugd2FudCB0aGUgZmlsZSBzYXZlZCBpbiBhIGRpZmZlcmVudCBkaXJlY3RvcnksIG1ha2Ugc3VyZSB5b3UgY2hhbmdlIGN1cnJlbnQKK3dvcmtpbmcgZGlyZWN0b3J5IGJlZm9yZSB5b3UgaW52b2tlIGN1cmwgd2l0aCB0aGUgXGZCLU8sIC0tcmVtb3RlLW5hbWVcZlAgZmxhZyEKKworWW91IG1heSB1c2UgdGhpcyBvcHRpb24gYXMgbWFueSB0aW1lcyBhcyB0aGUgbnVtYmVyIG9mIFVSTHMgeW91IGhhdmUuCisuSVAgIi1wLCAtLXByb3h5dHVubmVsIgorV2hlbiBhbiBIVFRQIHByb3h5IGlzIHVzZWQgKFxmSS14LCAtLXByb3h5XGZQKSwgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSBub24tSFRUUAorcHJvdG9jb2xzIHRvIGF0dGVtcHQgdG8gdHVubmVsIHRocm91Z2ggdGhlIHByb3h5IGluc3RlYWQgb2YgbWVyZWx5IHVzaW5nIGl0IHRvCitkbyBIVFRQLWxpa2Ugb3BlcmF0aW9ucy4gVGhlIHR1bm5lbCBhcHByb2FjaCBpcyBtYWRlIHdpdGggdGhlIEhUVFAgcHJveHkKK0NPTk5FQ1QgcmVxdWVzdCBhbmQgcmVxdWlyZXMgdGhhdCB0aGUgcHJveHkgYWxsb3dzIGRpcmVjdCBjb25uZWN0IHRvIHRoZQorcmVtb3RlIHBvcnQgbnVtYmVyIGN1cmwgd2FudHMgdG8gdHVubmVsIHRocm91Z2ggdG8uCisuSVAgIi1QLCAtLWZ0cC1wb3J0IDxhZGRyZXNzPiIKKyhGVFApIFJldmVyc2VzIHRoZSBkZWZhdWx0IGluaXRpYXRvci9saXN0ZW5lciByb2xlcyB3aGVuIGNvbm5lY3Rpbmcgd2l0aAorRlRQLiBUaGlzIHN3aXRjaCBtYWtlcyBjdXJsIHVzZSBhY3RpdmUgbW9kZS4gSW4gcHJhY3RpY2UsIGN1cmwgdGhlbiB0ZWxscyB0aGUKK3NlcnZlciB0byBjb25uZWN0IGJhY2sgdG8gdGhlIGNsaWVudCdzIHNwZWNpZmllZCBhZGRyZXNzIGFuZCBwb3J0LCB3aGlsZQorcGFzc2l2ZSBtb2RlIGFza3MgdGhlIHNlcnZlciB0byBzZXR1cCBhbiBJUCBhZGRyZXNzIGFuZCBwb3J0IGZvciBpdCB0byBjb25uZWN0Cit0by4gPGFkZHJlc3M+IHNob3VsZCBiZSBvbmUgb2Y6CisuUlMKKy5JUCBpbnRlcmZhY2UKK2kuZSAiZXRoMCIgdG8gc3BlY2lmeSB3aGljaCBpbnRlcmZhY2UncyBJUCBhZGRyZXNzIHlvdSB3YW50IHRvIHVzZSAoVW5peCBvbmx5KQorLklQICJJUCBhZGRyZXNzIgoraS5lICIxOTIuMTY4LjEwLjEiIHRvIHNwZWNpZnkgdGhlIGV4YWN0IElQIGFkZHJlc3MKKy5JUCAiaG9zdCBuYW1lIgoraS5lICJteS5ob3N0LmRvbWFpbiIgdG8gc3BlY2lmeSB0aGUgbWFjaGluZQorLklQICItIgorbWFrZSBjdXJsIHBpY2sgdGhlIHNhbWUgSVAgYWRkcmVzcyB0aGF0IGlzIGFscmVhZHkgdXNlZCBmb3IgdGhlIGNvbnRyb2wKK2Nvbm5lY3Rpb24KKy5SRQorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuIERpc2FibGUgdGhlCit1c2Ugb2YgUE9SVCB3aXRoIFxmSS0tZnRwLXBhc3ZcZlAuIERpc2FibGUgdGhlIGF0dGVtcHQgdG8gdXNlIHRoZSBFUFJUIGNvbW1hbmQKK2luc3RlYWQgb2YgUE9SVCBieSB1c2luZyBcZkktLWRpc2FibGUtZXBydFxmUC4gRVBSVCBpcyByZWFsbHkgUE9SVCsrLgorCitTdGFydGluZyBpbiA3LjE5LjUsIHlvdSBjYW4gYXBwZW5kIFwmIjpbc3RhcnRdLVtlbmRdXCYiIHRvIHRoZSByaWdodCBvZiB0aGUKK2FkZHJlc3MsIHRvIHRlbGwgY3VybCB3aGF0IFRDUCBwb3J0IHJhbmdlIHRvIHVzZS4gVGhhdCBtZWFucyB5b3Ugc3BlY2lmeSBhCitwb3J0IHJhbmdlLCBmcm9tIGEgbG93ZXIgdG8gYSBoaWdoZXIgbnVtYmVyLiBBIHNpbmdsZSBudW1iZXIgd29ya3MgYXMgd2VsbCwKK2J1dCBkbyBub3RlIHRoYXQgaXQgaW5jcmVhc2VzIHRoZSByaXNrIG9mIGZhaWx1cmUgc2luY2UgdGhlIHBvcnQgbWF5IG5vdCBiZQorYXZhaWxhYmxlLgorLklQICItLXBhc3MgPHBocmFzZT4iCisoU1NML1NTSCkgUGFzc3BocmFzZSBmb3IgdGhlIHByaXZhdGUga2V5CisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KKy5JUCAiLS1wb3N0MzAxIgorVGVsbHMgY3VybCB0byByZXNwZWN0IFJGQyAyNjE2LzEwLjMuMiBhbmQgbm90IGNvbnZlcnQgUE9TVCByZXF1ZXN0cyBpbnRvIEdFVAorcmVxdWVzdHMgd2hlbiBmb2xsb3dpbmcgYSAzMDEgcmVkaXJlY3Rpb24uIFRoZSBub24tUkZDIGJlaGF2aW91ciBpcyB1YmlxdWl0b3VzCitpbiB3ZWIgYnJvd3NlcnMsIHNvIGN1cmwgZG9lcyB0aGUgY29udmVyc2lvbiBieSBkZWZhdWx0IHRvIG1haW50YWluCitjb25zaXN0ZW5jeS4gSG93ZXZlciwgYSBzZXJ2ZXIgbWF5IHJlcXVpcmUgYSBQT1NUIHRvIHJlbWFpbiBhIFBPU1QgYWZ0ZXIgc3VjaAorYSByZWRpcmVjdGlvbi4gVGhpcyBvcHRpb24gaXMgbWVhbmluZ2Z1bCBvbmx5IHdoZW4gdXNpbmcgXGZJLUwsIC0tbG9jYXRpb25cZlAKKyhBZGRlZCBpbiA3LjE3LjEpCisuSVAgIi0tcG9zdDMwMiIKK1RlbGxzIGN1cmwgdG8gcmVzcGVjdCBSRkMgMjYxNi8xMC4zLjIgYW5kIG5vdCBjb252ZXJ0IFBPU1QgcmVxdWVzdHMgaW50byBHRVQKK3JlcXVlc3RzIHdoZW4gZm9sbG93aW5nIGEgMzAyIHJlZGlyZWN0aW9uLiBUaGUgbm9uLVJGQyBiZWhhdmlvdXIgaXMgdWJpcXVpdG91cworaW4gd2ViIGJyb3dzZXJzLCBzbyBjdXJsIGRvZXMgdGhlIGNvbnZlcnNpb24gYnkgZGVmYXVsdCB0byBtYWludGFpbgorY29uc2lzdGVuY3kuIEhvd2V2ZXIsIGEgc2VydmVyIG1heSByZXF1aXJlIGEgUE9TVCB0byByZW1haW4gYSBQT1NUIGFmdGVyIHN1Y2gKK2EgcmVkaXJlY3Rpb24uIFRoaXMgb3B0aW9uIGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIHVzaW5nIFxmSS1MLCAtLWxvY2F0aW9uXGZQCisoQWRkZWQgaW4gNy4xOS4xKQorLklQICItLXByb3RvIDxwcm90b2NvbHM+IgorVGVsbHMgY3VybCB0byB1c2UgdGhlIGxpc3RlZCBwcm90b2NvbHMgZm9yIGl0cyBpbml0aWFsIHJldHJpZXZhbC4gUHJvdG9jb2xzCithcmUgZXZhbHVhdGVkIGxlZnQgdG8gcmlnaHQsIGFyZSBjb21tYSBzZXBhcmF0ZWQsIGFuZCBhcmUgZWFjaCBhIHByb3RvY29sCituYW1lIG9yICdhbGwnLCBvcHRpb25hbGx5IHByZWZpeGVkIGJ5IHplcm8gb3IgbW9yZSBtb2RpZmllcnMuIEF2YWlsYWJsZQorbW9kaWZpZXJzIGFyZToKKy5SUworLlRQIDMKKy5CICsKK1Blcm1pdCB0aGlzIHByb3RvY29sIGluIGFkZGl0aW9uIHRvIHByb3RvY29scyBhbHJlYWR5IHBlcm1pdHRlZCAodGhpcyBpcwordGhlIGRlZmF1bHQgaWYgbm8gbW9kaWZpZXIgaXMgdXNlZCkuCisuVFAKKy5CIC0KK0RlbnkgdGhpcyBwcm90b2NvbCwgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbGlzdCBvZiBwcm90b2NvbHMgYWxyZWFkeSBwZXJtaXR0ZWQuCisuVFAKKy5CID0KK1Blcm1pdCBvbmx5IHRoaXMgcHJvdG9jb2wgKGlnbm9yaW5nIHRoZSBsaXN0IGFscmVhZHkgcGVybWl0dGVkKSwgdGhvdWdoCitzdWJqZWN0IHRvIGxhdGVyIG1vZGlmaWNhdGlvbiBieSBzdWJzZXF1ZW50IGVudHJpZXMgaW4gdGhlIGNvbW1hIHNlcGFyYXRlZAorbGlzdC4KKy5SRQorLklQCitGb3IgZXhhbXBsZToKKy5SUworLlRQIDE1CisuQiAtLXByb3RvIC1mdHBzCit1c2VzIHRoZSBkZWZhdWx0IHByb3RvY29scywgYnV0IGRpc2FibGVzIGZ0cHMKKy5UUAorLkIgIC0tcHJvdG8gLWFsbCxodHRwcywraHR0cAorb25seSBlbmFibGVzIGh0dHAgYW5kIGh0dHBzCisuVFAKKy5CIC0tcHJvdG8gPWh0dHAsaHR0cHMKK2Fsc28gb25seSBlbmFibGVzIGh0dHAgYW5kIGh0dHBzCisuUkUKKy5JUAorVW5rbm93biBwcm90b2NvbHMgcHJvZHVjZSBhIHdhcm5pbmcuIFRoaXMgYWxsb3dzIHNjcmlwdHMgdG8gc2FmZWx5IHJlbHkgb24KK2JlaW5nIGFibGUgdG8gZGlzYWJsZSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgcHJvdG9jb2xzLCB3aXRob3V0IHJlbHlpbmcgdXBvbgorc3VwcG9ydCBmb3IgdGhhdCBwcm90b2NvbCBiZWluZyBidWlsdCBpbnRvIGN1cmwgdG8gYXZvaWQgYW4gZXJyb3IuCisKK1RoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLCBpbiB3aGljaCBjYXNlIHRoZSBlZmZlY3QgaXMgdGhlIHNhbWUKK2FzIGNvbmNhdGVuYXRpbmcgdGhlIHByb3RvY29scyBpbnRvIG9uZSBpbnN0YW5jZSBvZiB0aGUgb3B0aW9uLgorCisoQWRkZWQgaW4gNy4yMC4yKQorLklQICItLXByb3RvLXJlZGlyIDxwcm90b2NvbHM+IgorVGVsbHMgY3VybCB0byB1c2UgdGhlIGxpc3RlZCBwcm90b2NvbHMgYWZ0ZXIgYSByZWRpcmVjdC4gU2VlIC0tcHJvdG8gZm9yCitob3cgcHJvdG9jb2xzIGFyZSByZXByZXNlbnRlZC4KKworKEFkZGVkIGluIDcuMjAuMikKKy5JUCAiLS1wcm94eS1hbnlhdXRoIgorVGVsbHMgY3VybCB0byBwaWNrIGEgc3VpdGFibGUgYXV0aGVudGljYXRpb24gbWV0aG9kIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoCit0aGUgZ2l2ZW4gcHJveHkuIFRoaXMgbWlnaHQgY2F1c2UgYW4gZXh0cmEgcmVxdWVzdC9yZXNwb25zZSByb3VuZC10cmlwLiAoQWRkZWQKK2luIDcuMTMuMikKKy5JUCAiLS1wcm94eS1iYXNpYyIKK1RlbGxzIGN1cmwgdG8gdXNlIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24gd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGdpdmVuCitwcm94eS4gVXNlIFxmSS0tYmFzaWNcZlAgZm9yIGVuYWJsaW5nIEhUVFAgQmFzaWMgd2l0aCBhIHJlbW90ZSBob3N0LiBCYXNpYyBpcwordGhlIGRlZmF1bHQgYXV0aGVudGljYXRpb24gbWV0aG9kIGN1cmwgdXNlcyB3aXRoIHByb3hpZXMuCisuSVAgIi0tcHJveHktZGlnZXN0IgorVGVsbHMgY3VybCB0byB1c2UgSFRUUCBEaWdlc3QgYXV0aGVudGljYXRpb24gd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGdpdmVuCitwcm94eS4gVXNlIFxmSS0tZGlnZXN0XGZQIGZvciBlbmFibGluZyBIVFRQIERpZ2VzdCB3aXRoIGEgcmVtb3RlIGhvc3QuCisuSVAgIi0tcHJveHktbmVnb3RpYXRlIgorVGVsbHMgY3VybCB0byB1c2UgSFRUUCBOZWdvdGlhdGUgYXV0aGVudGljYXRpb24gd2hlbiBjb21tdW5pY2F0aW5nCit3aXRoIHRoZSBnaXZlbiBwcm94eS4gVXNlIFxmSS0tbmVnb3RpYXRlXGZQIGZvciBlbmFibGluZyBIVFRQIE5lZ290aWF0ZQord2l0aCBhIHJlbW90ZSBob3N0LiAoQWRkZWQgaW4gNy4xNy4xKQorLklQICItLXByb3h5LW50bG0iCitUZWxscyBjdXJsIHRvIHVzZSBIVFRQIE5UTE0gYXV0aGVudGljYXRpb24gd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGdpdmVuCitwcm94eS4gVXNlIFxmSS0tbnRsbVxmUCBmb3IgZW5hYmxpbmcgTlRMTSB3aXRoIGEgcmVtb3RlIGhvc3QuCisuSVAgIi0tcHJveHkxLjAgPHByb3h5aG9zdFs6cG9ydF0+IgorVXNlIHRoZSBzcGVjaWZpZWQgSFRUUCAxLjAgcHJveHkuIElmIHRoZSBwb3J0IG51bWJlciBpcyBub3Qgc3BlY2lmaWVkLCBpdCBpcworYXNzdW1lZCBhdCBwb3J0IDEwODAuCisKK1RoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGFuZCB0aGUgSFRUUCBwcm94eSBvcHRpb24gKFxmSS14LCAtLXByb3h5XGZQKSwKK2lzIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIENPTk5FQ1QgdGhyb3VnaCB0aGUgcHJveHkgd2lsbCBzcGVjaWZ5IGFuIEhUVFAgMS4wCitwcm90b2NvbCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IEhUVFAgMS4xLgorLklQICItLXB1YmtleSA8a2V5PiIKKyhTU0gpIFB1YmxpYyBrZXkgZmlsZSBuYW1lLiBBbGxvd3MgeW91IHRvIHByb3ZpZGUgeW91ciBwdWJsaWMga2V5IGluIHRoaXMKK3NlcGFyYXRlIGZpbGUuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KKy5JUCAiLXEiCitJZiB1c2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlIFxmSWN1cmxyY1xmUCBjb25maWcKK2ZpbGUgd2lsbCBub3QgYmUgcmVhZCBhbmQgdXNlZC4gU2VlIHRoZSBcZkktSywgLS1jb25maWdcZlAgZm9yIGRldGFpbHMgb24gdGhlCitkZWZhdWx0IGNvbmZpZyBmaWxlIHNlYXJjaCBwYXRoLgorLklQICItUSwgLS1xdW90ZSA8Y29tbWFuZD4iCisoRlRQL1NGVFApIFNlbmQgYW4gYXJiaXRyYXJ5IGNvbW1hbmQgdG8gdGhlIHJlbW90ZSBGVFAgb3IgU0ZUUCBzZXJ2ZXIuIFF1b3RlCitjb21tYW5kcyBhcmUgc2VudCBCRUZPUkUgdGhlIHRyYW5zZmVyIHRha2VzIHBsYWNlIChqdXN0IGFmdGVyIHRoZSBpbml0aWFsIFBXRAorY29tbWFuZCBpbiBhbiBGVFAgdHJhbnNmZXIsIHRvIGJlIGV4YWN0KS4gVG8gbWFrZSBjb21tYW5kcyB0YWtlIHBsYWNlIGFmdGVyIGEKK3N1Y2Nlc3NmdWwgdHJhbnNmZXIsIHByZWZpeCB0aGVtIHdpdGggYSBkYXNoICctJy4gIFRvIG1ha2UgY29tbWFuZHMgYmUgc2VudAorYWZ0ZXIgbGliY3VybCBoYXMgY2hhbmdlZCB0aGUgd29ya2luZyBkaXJlY3RvcnksIGp1c3QgYmVmb3JlIHRoZSB0cmFuc2ZlcgorY29tbWFuZChzKSwgcHJlZml4IHRoZSBjb21tYW5kIHdpdGggYSAnKycgKHRoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yCitGVFApLiBZb3UgbWF5IHNwZWNpZnkgYW55IG51bWJlciBvZiBjb21tYW5kcy4gSWYgdGhlIHNlcnZlciByZXR1cm5zIGZhaWx1cmUKK2ZvciBvbmUgb2YgdGhlIGNvbW1hbmRzLCB0aGUgZW50aXJlIG9wZXJhdGlvbiB3aWxsIGJlIGFib3J0ZWQuIFlvdSBtdXN0IHNlbmQKK3N5bnRhY3RpY2FsbHkgY29ycmVjdCBGVFAgY29tbWFuZHMgYXMgUkZDIDk1OSBkZWZpbmVzIHRvIEZUUCBzZXJ2ZXJzLCBvciBvbmUKK29mIHRoZSBjb21tYW5kcyBsaXN0ZWQgYmVsb3cgdG8gU0ZUUCBzZXJ2ZXJzLiAgVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQKK211bHRpcGxlIHRpbWVzLiBXaGVuIHNwZWFraW5nIHRvIGEgRlRQIHNlcnZlciwgcHJlZml4IHRoZSBjb21tYW5kIHdpdGggYW4KK2FzdGVyaXNrICgqKSB0byBtYWtlIGxpYmN1cmwgY29udGludWUgZXZlbiBpZiB0aGUgY29tbWFuZCBmYWlscyBhcyBieSBkZWZhdWx0CitjdXJsIHdpbGwgc3RvcCBhdCBmaXJzdCBmYWlsdXJlLgorCitTRlRQIGlzIGEgYmluYXJ5IHByb3RvY29sLiBVbmxpa2UgZm9yIEZUUCwgbGliY3VybCBpbnRlcnByZXRzIFNGVFAgcXVvdGUKK2NvbW1hbmRzIGl0c2VsZiBiZWZvcmUgc2VuZGluZyB0aGVtIHRvIHRoZSBzZXJ2ZXIuICBGaWxlIG5hbWVzIG1heSBiZSBxdW90ZWQKK3NoZWxsLXN0eWxlIHRvIGVtYmVkIHNwYWNlcyBvciBzcGVjaWFsIGNoYXJhY3RlcnMuICBGb2xsb3dpbmcgaXMgdGhlIGxpc3Qgb2YKK2FsbCBzdXBwb3J0ZWQgU0ZUUCBxdW90ZSBjb21tYW5kczoKKy5SUworLklQICJjaGdycCBncm91cCBmaWxlIgorVGhlIGNoZ3JwIGNvbW1hbmQgc2V0cyB0aGUgZ3JvdXAgSUQgb2YgdGhlIGZpbGUgbmFtZWQgYnkgdGhlIGZpbGUgb3BlcmFuZCB0byB0aGUKK2dyb3VwIElEIHNwZWNpZmllZCBieSB0aGUgZ3JvdXAgb3BlcmFuZC4gVGhlIGdyb3VwIG9wZXJhbmQgaXMgYSBkZWNpbWFsCitpbnRlZ2VyIGdyb3VwIElELgorLklQICJjaG1vZCBtb2RlIGZpbGUiCitUaGUgY2htb2QgY29tbWFuZCBtb2RpZmllcyB0aGUgZmlsZSBtb2RlIGJpdHMgb2YgdGhlIHNwZWNpZmllZCBmaWxlLiBUaGUKK21vZGUgb3BlcmFuZCBpcyBhbiBvY3RhbCBpbnRlZ2VyIG1vZGUgbnVtYmVyLgorLklQICJjaG93biB1c2VyIGZpbGUiCitUaGUgY2hvd24gY29tbWFuZCBzZXRzIHRoZSBvd25lciBvZiB0aGUgZmlsZSBuYW1lZCBieSB0aGUgZmlsZSBvcGVyYW5kIHRvIHRoZQordXNlciBJRCBzcGVjaWZpZWQgYnkgdGhlIHVzZXIgb3BlcmFuZC4gVGhlIHVzZXIgb3BlcmFuZCBpcyBhIGRlY2ltYWwKK2ludGVnZXIgdXNlciBJRC4KKy5JUCAibG4gc291cmNlX2ZpbGUgdGFyZ2V0X2ZpbGUiCitUaGUgbG4gYW5kIHN5bWxpbmsgY29tbWFuZHMgY3JlYXRlIGEgc3ltYm9saWMgbGluayBhdCB0aGUgdGFyZ2V0X2ZpbGUgbG9jYXRpb24KK3BvaW50aW5nIHRvIHRoZSBzb3VyY2VfZmlsZSBsb2NhdGlvbi4KKy5JUCAibWtkaXIgZGlyZWN0b3J5X25hbWUiCitUaGUgbWtkaXIgY29tbWFuZCBjcmVhdGVzIHRoZSBkaXJlY3RvcnkgbmFtZWQgYnkgdGhlIGRpcmVjdG9yeV9uYW1lIG9wZXJhbmQuCisuSVAgInB3ZCIKK1RoZSBwd2QgY29tbWFuZCByZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRobmFtZSBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKy5JUCAicmVuYW1lIHNvdXJjZSB0YXJnZXQiCitUaGUgcmVuYW1lIGNvbW1hbmQgcmVuYW1lcyB0aGUgZmlsZSBvciBkaXJlY3RvcnkgbmFtZWQgYnkgdGhlIHNvdXJjZQorb3BlcmFuZCB0byB0aGUgZGVzdGluYXRpb24gcGF0aCBuYW1lZCBieSB0aGUgdGFyZ2V0IG9wZXJhbmQuCisuSVAgInJtIGZpbGUiCitUaGUgcm0gY29tbWFuZCByZW1vdmVzIHRoZSBmaWxlIHNwZWNpZmllZCBieSB0aGUgZmlsZSBvcGVyYW5kLgorLklQICJybWRpciBkaXJlY3RvcnkiCitUaGUgcm1kaXIgY29tbWFuZCByZW1vdmVzIHRoZSBkaXJlY3RvcnkgZW50cnkgc3BlY2lmaWVkIGJ5IHRoZSBkaXJlY3RvcnkKK29wZXJhbmQsIHByb3ZpZGVkIGl0IGlzIGVtcHR5LgorLklQICJzeW1saW5rIHNvdXJjZV9maWxlIHRhcmdldF9maWxlIgorU2VlIGxuLgorLlJFCisuSVAgIi1yLCAtLXJhbmdlIDxyYW5nZT4iCisoSFRUUC9GVFAvU0ZUUC9GSUxFKSBSZXRyaWV2ZSBhIGJ5dGUgcmFuZ2UgKGkuZSBhIHBhcnRpYWwgZG9jdW1lbnQpIGZyb20gYQorSFRUUC8xLjEsIEZUUCBvciBTRlRQIHNlcnZlciBvciBhIGxvY2FsIEZJTEUuIFJhbmdlcyBjYW4gYmUgc3BlY2lmaWVkCitpbiBhIG51bWJlciBvZiB3YXlzLgorLlJTCisuVFAgMTAKKy5CIDAtNDk5CitzcGVjaWZpZXMgdGhlIGZpcnN0IDUwMCBieXRlcworLlRQCisuQiA1MDAtOTk5CitzcGVjaWZpZXMgdGhlIHNlY29uZCA1MDAgYnl0ZXMKKy5UUAorLkIgLTUwMAorc3BlY2lmaWVzIHRoZSBsYXN0IDUwMCBieXRlcworLlRQCisuQiA5NTAwLQorc3BlY2lmaWVzIHRoZSBieXRlcyBmcm9tIG9mZnNldCA5NTAwIGFuZCBmb3J3YXJkCisuVFAKKy5CIDAtMCwtMQorc3BlY2lmaWVzIHRoZSBmaXJzdCBhbmQgbGFzdCBieXRlIG9ubHkoKikoSCkKKy5UUAorLkIgNTAwLTcwMCw2MDAtNzk5CitzcGVjaWZpZXMgMzAwIGJ5dGVzIGZyb20gb2Zmc2V0IDUwMChIKQorLlRQCisuQiAxMDAtMTk5LDUwMC01OTkKK3NwZWNpZmllcyB0d28gc2VwYXJhdGUgMTAwLWJ5dGUgcmFuZ2VzKCopKEgpCisuUkUKKworKCopID0gTk9URSB0aGF0IHRoaXMgd2lsbCBjYXVzZSB0aGUgc2VydmVyIHRvIHJlcGx5IHdpdGggYSBtdWx0aXBhcnQKK3Jlc3BvbnNlIQorCitPbmx5IGRpZ2l0IGNoYXJhY3RlcnMgKDAtOSkgYXJlIHZhbGlkIGluIHRoZSAnc3RhcnQnIGFuZCAnc3RvcCcgZmllbGRzIG9mCit0aGUgXCYnc3RhcnQtc3RvcCcgcmFuZ2Ugc3ludGF4LiBJZiBhIG5vbi1kaWdpdCBjaGFyYWN0ZXIgaXMgZ2l2ZW4gaW4gdGhlIHJhbmdlLCB0aGUgc2VydmVyJ3MKK3Jlc3BvbnNlIHdpbGwgYmUgdW5zcGVjaWZpZWQsIGRlcGVuZGluZyBvbiB0aGUgc2VydmVyJ3MgY29uZmlndXJhdGlvbi4KKworWW91IHNob3VsZCBhbHNvIGJlIGF3YXJlIHRoYXQgbWFueSBIVFRQLzEuMSBzZXJ2ZXJzIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZQorZW5hYmxlZCwgc28gdGhhdCB3aGVuIHlvdSBhdHRlbXB0IHRvIGdldCBhIHJhbmdlLCB5b3UnbGwgaW5zdGVhZCBnZXQgdGhlIHdob2xlCitkb2N1bWVudC4KKworRlRQIGFuZCBTRlRQIHJhbmdlIGRvd25sb2FkcyBvbmx5IHN1cHBvcnQgdGhlIHNpbXBsZSAnc3RhcnQtc3RvcCcgc3ludGF4Cisob3B0aW9uYWxseSB3aXRoIG9uZSBvZiB0aGUgbnVtYmVycyBvbWl0dGVkKS4gRlRQIHVzZSBkZXBlbmRzIG9uIHRoZSBleHRlbmRlZAorRlRQIGNvbW1hbmQgU0laRS4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgorLklQICItUiwgLS1yZW1vdGUtdGltZSIKK1doZW4gdXNlZCwgdGhpcyB3aWxsIG1ha2UgbGliY3VybCBhdHRlbXB0IHRvIGZpZ3VyZSBvdXQgdGhlIHRpbWVzdGFtcCBvZiB0aGUKK3JlbW90ZSBmaWxlLCBhbmQgaWYgdGhhdCBpcyBhdmFpbGFibGUgbWFrZSB0aGUgbG9jYWwgZmlsZSBnZXQgdGhhdCBzYW1lCit0aW1lc3RhbXAuCisuSVAgIi0tcmFuZG9tLWZpbGUgPGZpbGU+IgorKFNTTCkgU3BlY2lmeSB0aGUgcGF0aCBuYW1lIHRvIGZpbGUgY29udGFpbmluZyB3aGF0IHdpbGwgYmUgY29uc2lkZXJlZCBhcworcmFuZG9tIGRhdGEuIFRoZSBkYXRhIGlzIHVzZWQgdG8gc2VlZCB0aGUgcmFuZG9tIGVuZ2luZSBmb3IgU1NMIGNvbm5lY3Rpb25zLgorU2VlIGFsc28gdGhlIFxmSS0tZWdkLWZpbGVcZlAgb3B0aW9uLgorLklQICItLXJhdyIKK1doZW4gdXNlZCwgaXQgZGlzYWJsZXMgYWxsIGludGVybmFsIEhUVFAgZGVjb2Rpbmcgb2YgY29udGVudCBvciB0cmFuc2ZlcgorZW5jb2RpbmdzIGFuZCBpbnN0ZWFkIG1ha2VzIHRoZW0gcGFzc2VkIG9uIHVuYWx0ZXJlZCwgcmF3LiAoQWRkZWQgaW4gNy4xNi4yKQorLklQICItLXJlbW90ZS1uYW1lLWFsbCIKK1RoaXMgb3B0aW9uIGNoYW5nZXMgdGhlIGRlZmF1bHQgYWN0aW9uIGZvciBhbGwgZ2l2ZW4gVVJMcyB0byBiZSBkZWFsdCB3aXRoIGFzCitpZiBcZkktTywgLS1yZW1vdGUtbmFtZVxmUCB3ZXJlIHVzZWQgZm9yIGVhY2ggb25lLiBTbyBpZiB5b3Ugd2FudCB0byBkaXNhYmxlCit0aGF0IGZvciBhIHNwZWNpZmljIFVSTCBhZnRlciBcZkktLXJlbW90ZS1uYW1lLWFsbFxmUCBoYXMgYmVlbiB1c2VkLCB5b3UgbXVzdAordXNlICItbyAtIiBvciBcZkktLW5vLXJlbW90ZS1uYW1lXGZQLiAoQWRkZWQgaW4gNy4xOS4wKQorLklQICItLXJlc29sdmUgPGhvc3Q6cG9ydDphZGRyZXNzPiIKK1Byb3ZpZGUgYSBjdXN0b20gYWRkcmVzcyBmb3IgYSBzcGVjaWZpYyBob3N0IGFuZCBwb3J0IHBhaXIuIFVzaW5nIHRoaXMsIHlvdQorY2FuIG1ha2UgdGhlIGN1cmwgcmVxdWVzdHMocykgdXNlIGEgc3BlY2lmaWVkIGFkZHJlc3MgYW5kIHByZXZlbnQgdGhlCitvdGhlcndpc2Ugbm9ybWFsbHkgcmVzb2x2ZWQgYWRkcmVzcyB0byBiZSB1c2VkLiBDb25zaWRlciBpdCBhIHNvcnQgb2YKKy9ldGMvaG9zdHMgYWx0ZXJuYXRpdmUgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gVGhlIHBvcnQgbnVtYmVyIHNob3VsZCBiZQordGhlIG51bWJlciB1c2VkIGZvciB0aGUgc3BlY2lmaWMgcHJvdG9jb2wgdGhlIGhvc3Qgd2lsbCBiZSB1c2VkIGZvci4gSXQgbWVhbnMKK3lvdSBuZWVkIHNldmVyYWwgZW50cmllcyBpZiB5b3Ugd2FudCB0byBwcm92aWRlIGFkZHJlc3MgZm9yIHRoZSBzYW1lIGhvc3QgYnV0CitkaWZmZXJlbnQgcG9ydHMuCisKK1RoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIG1hbnkgdGltZXMgdG8gYWRkIG1hbnkgaG9zdCBuYW1lcyB0byByZXNvbHZlLgorCisoQWRkZWQgaW4gNy4yMS4zKQorLklQICItLXJldHJ5IDxudW0+IgorSWYgYSB0cmFuc2llbnQgZXJyb3IgaXMgcmV0dXJuZWQgd2hlbiBjdXJsIHRyaWVzIHRvIHBlcmZvcm0gYSB0cmFuc2ZlciwgaXQKK3dpbGwgcmV0cnkgdGhpcyBudW1iZXIgb2YgdGltZXMgYmVmb3JlIGdpdmluZyB1cC4gU2V0dGluZyB0aGUgbnVtYmVyIHRvIDAKK21ha2VzIGN1cmwgZG8gbm8gcmV0cmllcyAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLiBUcmFuc2llbnQgZXJyb3IgbWVhbnMgZWl0aGVyOgorYSB0aW1lb3V0LCBhbiBGVFAgNHh4IHJlc3BvbnNlIGNvZGUgb3IgYW4gSFRUUCA1eHggcmVzcG9uc2UgY29kZS4KKworV2hlbiBjdXJsIGlzIGFib3V0IHRvIHJldHJ5IGEgdHJhbnNmZXIsIGl0IHdpbGwgZmlyc3Qgd2FpdCBvbmUgc2Vjb25kIGFuZCB0aGVuCitmb3IgYWxsIGZvcnRoY29taW5nIHJldHJpZXMgaXQgd2lsbCBkb3VibGUgdGhlIHdhaXRpbmcgdGltZSB1bnRpbCBpdCByZWFjaGVzCisxMCBtaW51dGVzIHdoaWNoIHRoZW4gd2lsbCBiZSB0aGUgZGVsYXkgYmV0d2VlbiB0aGUgcmVzdCBvZiB0aGUgcmV0cmllcy4gIEJ5Cit1c2luZyBcZkktLXJldHJ5LWRlbGF5XGZQIHlvdSBkaXNhYmxlIHRoaXMgZXhwb25lbnRpYWwgYmFja29mZiBhbGdvcml0aG0uIFNlZQorYWxzbyBcZkktLXJldHJ5LW1heC10aW1lXGZQIHRvIGxpbWl0IHRoZSB0b3RhbCB0aW1lIGFsbG93ZWQgZm9yCityZXRyaWVzLiAoQWRkZWQgaW4gNy4xMi4zKQorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCBvY2N1cnJlbmNlIGRlY2lkZSB0aGUgYW1vdW50LgorLklQICItLXJldHJ5LWRlbGF5IDxzZWNvbmRzPiIKK01ha2UgY3VybCBzbGVlcCB0aGlzIGFtb3VudCBvZiB0aW1lIGJlZm9yZSBlYWNoIHJldHJ5IHdoZW4gYSB0cmFuc2ZlciBoYXMKK2ZhaWxlZCB3aXRoIGEgdHJhbnNpZW50IGVycm9yIChpdCBjaGFuZ2VzIHRoZSBkZWZhdWx0IGJhY2tvZmYgdGltZSBhbGdvcml0aG0KK2JldHdlZW4gcmV0cmllcykuIFRoaXMgb3B0aW9uIGlzIG9ubHkgaW50ZXJlc3RpbmcgaWYgXGZJLS1yZXRyeVxmUCBpcyBhbHNvCit1c2VkLiBTZXR0aW5nIHRoaXMgZGVsYXkgdG8gemVybyB3aWxsIG1ha2UgY3VybCB1c2UgdGhlIGRlZmF1bHQgYmFja29mZiB0aW1lLgorKEFkZGVkIGluIDcuMTIuMykKKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBtdWx0aXBsZSB0aW1lcywgdGhlIGxhc3Qgb2NjdXJyZW5jZSBkZXRlcm1pbmVzIHRoZSBhbW91bnQuCisuSVAgIi0tcmV0cnktbWF4LXRpbWUgPHNlY29uZHM+IgorVGhlIHJldHJ5IHRpbWVyIGlzIHJlc2V0IGJlZm9yZSB0aGUgZmlyc3QgdHJhbnNmZXIgYXR0ZW1wdC4gUmV0cmllcyB3aWxsIGJlCitkb25lIGFzIHVzdWFsIChzZWUgXGZJLS1yZXRyeVxmUCkgYXMgbG9uZyBhcyB0aGUgdGltZXIgaGFzbid0IHJlYWNoZWQgdGhpcworZ2l2ZW4gbGltaXQuIE5vdGljZSB0aGF0IGlmIHRoZSB0aW1lciBoYXNuJ3QgcmVhY2hlZCB0aGUgbGltaXQsIHRoZSByZXF1ZXN0Cit3aWxsIGJlIG1hZGUgYW5kIHdoaWxlIHBlcmZvcm1pbmcsIGl0IG1heSB0YWtlIGxvbmdlciB0aGFuIHRoaXMgZ2l2ZW4gdGltZQorcGVyaW9kLiBUbyBsaW1pdCBhIHNpbmdsZSByZXF1ZXN0XCdzIG1heGltdW0gdGltZSwgdXNlIFxmSS1tLCAtLW1heC10aW1lXGZQLgorU2V0IHRoaXMgb3B0aW9uIHRvIHplcm8gdG8gbm90IHRpbWVvdXQgcmV0cmllcy4gKEFkZGVkIGluIDcuMTIuMykKKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBtdWx0aXBsZSB0aW1lcywgdGhlIGxhc3Qgb2NjdXJyZW5jZSBkZXRlcm1pbmVzIHRoZQorYW1vdW50LgorLklQICItcywgLS1zaWxlbnQiCitTaWxlbnQgb3IgcXVpZXQgbW9kZS4gRG9uJ3Qgc2hvdyBwcm9ncmVzcyBtZXRlciBvciBlcnJvciBtZXNzYWdlcy4gIE1ha2VzCitDdXJsIG11dGUuCisuSVAgIi1TLCAtLXNob3ctZXJyb3IiCitXaGVuIHVzZWQgd2l0aCAtcyBpdCBtYWtlcyBjdXJsIHNob3cgYW4gZXJyb3IgbWVzc2FnZSBpZiBpdCBmYWlscy4KKy5JUCAiLS1zc2wiCisoRlRQLCBQT1AzLCBJTUFQLCBTTVRQKSBUcnkgdG8gdXNlIFNTTC9UTFMgZm9yIHRoZSBjb25uZWN0aW9uLiAgUmV2ZXJ0cyB0byBhCitub24tc2VjdXJlIGNvbm5lY3Rpb24gaWYgdGhlIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgU1NML1RMUy4gIFNlZSBhbHNvCitcZkktLWZ0cC1zc2wtY29udHJvbFxmUCBhbmQgXGZJLS1zc2wtcmVxZFxmUCBmb3IgZGlmZmVyZW50IGxldmVscyBvZgorZW5jcnlwdGlvbiByZXF1aXJlZC4gKEFkZGVkIGluIDcuMjAuMCkKKworVGhpcyBvcHRpb24gd2FzIGZvcm1lcmx5IGtub3duIGFzIFxmSS0tZnRwLXNzbFxmUCAoQWRkZWQgaW4gNy4xMS4wKS4gVGhhdAorb3B0aW9uIG5hbWUgY2FuIHN0aWxsIGJlIHVzZWQgYnV0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorLklQICItLXNzbC1yZXFkIgorKEZUUCwgUE9QMywgSU1BUCwgU01UUCkgUmVxdWlyZSBTU0wvVExTIGZvciB0aGUgY29ubmVjdGlvbi4gIFRlcm1pbmF0ZXMgdGhlCitjb25uZWN0aW9uIGlmIHRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IFNTTC9UTFMuIChBZGRlZCBpbiA3LjIwLjApCisKK1RoaXMgb3B0aW9uIHdhcyBmb3JtZXJseSBrbm93biBhcyBcZkktLWZ0cC1zc2wtcmVxZFxmUCAoYWRkZWQgaW4gNy4xNS41KS4gVGhhdAorb3B0aW9uIG5hbWUgY2FuIHN0aWxsIGJlIHVzZWQgYnV0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorLklQICItLXNzbC1hbGxvdy1iZWFzdCIKKyhTU0wpIFRoaXMgb3B0aW9uIHRlbGxzIGN1cmwgdG8gbm90IHdvcmsgYXJvdW5kIGEgc2VjdXJpdHkgZmxhdyBpbiB0aGUgU1NMMworYW5kIFRMUzEuMCBwcm90b2NvbHMga25vd24gYXMgQkVBU1QuICBJZiB0aGlzIG9wdGlvbiBpc24ndCB1c2VkLCB0aGUgU1NMIGxheWVyCittYXkgdXNlIHdvcmstYXJvdW5kcyBrbm93biB0byBjYXVzZSBpbnRlcm9wZXJhYmlsaXR5IHByb2JsZW1zIHdpdGggc29tZSBvbGRlcgorU1NMIGltcGxlbWVudGF0aW9ucy4gV0FSTklORzogdGhpcyBvcHRpb24gbG9vc2VucyB0aGUgU1NMIHNlY3VyaXR5LCBhbmQgYnkKK3VzaW5nIHRoaXMgZmxhZyB5b3UgYXNrIGZvciBleGFjdGx5IHRoYXQuICAoQWRkZWQgaW4gNy4yNS4wKQorLklQICItLXNvY2tzNCA8aG9zdFs6cG9ydF0+IgorVXNlIHRoZSBzcGVjaWZpZWQgU09DS1M0IHByb3h5LiBJZiB0aGUgcG9ydCBudW1iZXIgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMKK2Fzc3VtZWQgYXQgcG9ydCAxMDgwLiAoQWRkZWQgaW4gNy4xNS4yKQorCitUaGlzIG9wdGlvbiBvdmVycmlkZXMgYW55IHByZXZpb3VzIHVzZSBvZiBcZkkteCwgLS1wcm94eVxmUCwgYXMgdGhleSBhcmUKK211dHVhbGx5IGV4Y2x1c2l2ZS4KKworU2luY2UgNy4yMS43LCB0aGlzIG9wdGlvbiBpcyBzdXBlcmZsdW91cyBzaW5jZSB5b3UgY2FuIHNwZWNpZnkgYSBzb2NrczQgcHJveHkKK3dpdGggXGZJLXgsIC0tcHJveHlcZlAgdXNpbmcgYSBzb2NrczQ6Ly8gcHJvdG9jb2wgcHJlZml4LgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi0tc29ja3M0YSA8aG9zdFs6cG9ydF0+IgorVXNlIHRoZSBzcGVjaWZpZWQgU09DS1M0YSBwcm94eS4gSWYgdGhlIHBvcnQgbnVtYmVyIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzCithc3N1bWVkIGF0IHBvcnQgMTA4MC4gKEFkZGVkIGluIDcuMTguMCkKKworVGhpcyBvcHRpb24gb3ZlcnJpZGVzIGFueSBwcmV2aW91cyB1c2Ugb2YgXGZJLXgsIC0tcHJveHlcZlAsIGFzIHRoZXkgYXJlCittdXR1YWxseSBleGNsdXNpdmUuCisKK1NpbmNlIDcuMjEuNywgdGhpcyBvcHRpb24gaXMgc3VwZXJmbHVvdXMgc2luY2UgeW91IGNhbiBzcGVjaWZ5IGEgc29ja3M0YSBwcm94eQord2l0aCBcZkkteCwgLS1wcm94eVxmUCB1c2luZyBhIHNvY2tzNGE6Ly8gcHJvdG9jb2wgcHJlZml4LgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi0tc29ja3M1LWhvc3RuYW1lIDxob3N0Wzpwb3J0XT4iCitVc2UgdGhlIHNwZWNpZmllZCBTT0NLUzUgcHJveHkgKGFuZCBsZXQgdGhlIHByb3h5IHJlc29sdmUgdGhlIGhvc3QgbmFtZSkuIElmCit0aGUgcG9ydCBudW1iZXIgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgYXNzdW1lZCBhdCBwb3J0IDEwODAuIChBZGRlZCBpbgorNy4xOC4wKQorCitUaGlzIG9wdGlvbiBvdmVycmlkZXMgYW55IHByZXZpb3VzIHVzZSBvZiBcZkkteCwgLS1wcm94eVxmUCwgYXMgdGhleSBhcmUKK211dHVhbGx5IGV4Y2x1c2l2ZS4KKworU2luY2UgNy4yMS43LCB0aGlzIG9wdGlvbiBpcyBzdXBlcmZsdW91cyBzaW5jZSB5b3UgY2FuIHNwZWNpZnkgYSBzb2NrczUKK2hvc3RuYW1lIHByb3h5IHdpdGggXGZJLXgsIC0tcHJveHlcZlAgdXNpbmcgYSBzb2NrczVoOi8vIHByb3RvY29sIHByZWZpeC4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAoVGhpcyBvcHRpb24KK3dhcyBwcmV2aW91c2x5IHdyb25nbHkgZG9jdW1lbnRlZCBhbmQgdXNlZCBhcyAtLXNvY2tzIHdpdGhvdXQgdGhlIG51bWJlcgorYXBwZW5kZWQuKQorLklQICItLXNvY2tzNSA8aG9zdFs6cG9ydF0+IgorVXNlIHRoZSBzcGVjaWZpZWQgU09DS1M1IHByb3h5IC0gYnV0IHJlc29sdmUgdGhlIGhvc3QgbmFtZSBsb2NhbGx5LiBJZiB0aGUKK3BvcnQgbnVtYmVyIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIGFzc3VtZWQgYXQgcG9ydCAxMDgwLgorCitUaGlzIG9wdGlvbiBvdmVycmlkZXMgYW55IHByZXZpb3VzIHVzZSBvZiBcZkkteCwgLS1wcm94eVxmUCwgYXMgdGhleSBhcmUKK211dHVhbGx5IGV4Y2x1c2l2ZS4KKworU2luY2UgNy4yMS43LCB0aGlzIG9wdGlvbiBpcyBzdXBlcmZsdW91cyBzaW5jZSB5b3UgY2FuIHNwZWNpZnkgYSBzb2NrczUgcHJveHkKK3dpdGggXGZJLXgsIC0tcHJveHlcZlAgdXNpbmcgYSBzb2NrczU6Ly8gcHJvdG9jb2wgcHJlZml4LgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuIChUaGlzIG9wdGlvbgord2FzIHByZXZpb3VzbHkgd3JvbmdseSBkb2N1bWVudGVkIGFuZCB1c2VkIGFzIC0tc29ja3Mgd2l0aG91dCB0aGUgbnVtYmVyCithcHBlbmRlZC4pCisKK1RoaXMgb3B0aW9uIChhcyB3ZWxsIGFzIFxmSS0tc29ja3M0XGZQKSBkb2VzIG5vdCB3b3JrIHdpdGggSVBWNiwgRlRQUyBvciBMREFQLgorLklQICItLXNvY2tzNS1nc3NhcGktc2VydmljZSA8c2VydmljZW5hbWU+IgorVGhlIGRlZmF1bHQgc2VydmljZSBuYW1lIGZvciBhIHNvY2tzIHNlcnZlciBpcyByY21kL3NlcnZlci1mcWRuLiBUaGlzIG9wdGlvbgorYWxsb3dzIHlvdSB0byBjaGFuZ2UgaXQuCisKK0V4YW1wbGVzOiAtLXNvY2tzNSBwcm94eS1uYW1lIFxmSS0tc29ja3M1LWdzc2FwaS1zZXJ2aWNlXGZQIHNvY2tkIHdvdWxkIHVzZQorc29ja2QvcHJveHktbmFtZSAtLXNvY2tzNSBwcm94eS1uYW1lIFxmSS0tc29ja3M1LWdzc2FwaS1zZXJ2aWNlXGZQCitzb2NrZC9yZWFsLW5hbWUgd291bGQgdXNlIHNvY2tkL3JlYWwtbmFtZSBmb3IgY2FzZXMgd2hlcmUgdGhlIHByb3h5LW5hbWUgZG9lcworbm90IG1hdGNoIHRoZSBwcmluY2lwYWwgbmFtZS4gIChBZGRlZCBpbiA3LjE5LjQpLgorLklQICItLXNvY2tzNS1nc3NhcGktbmVjIgorQXMgcGFydCBvZiB0aGUgZ3NzYXBpIG5lZ290aWF0aW9uIGEgcHJvdGVjdGlvbiBtb2RlIGlzIG5lZ290aWF0ZWQuIFJGQyAxOTYxCitzYXlzIGluIHNlY3Rpb24gNC4zLzQuNCBpdCBzaG91bGQgYmUgcHJvdGVjdGVkLCBidXQgdGhlIE5FQyByZWZlcmVuY2UKK2ltcGxlbWVudGF0aW9uIGRvZXMgbm90LiAgVGhlIG9wdGlvbiBcZkktLXNvY2tzNS1nc3NhcGktbmVjXGZQIGFsbG93cyB0aGUKK3VucHJvdGVjdGVkIGV4Y2hhbmdlIG9mIHRoZSBwcm90ZWN0aW9uIG1vZGUgbmVnb3RpYXRpb24uIChBZGRlZCBpbiA3LjE5LjQpLgorLklQICItLXN0ZGVyciA8ZmlsZT4iCitSZWRpcmVjdCBhbGwgd3JpdGVzIHRvIHN0ZGVyciB0byB0aGUgc3BlY2lmaWVkIGZpbGUgaW5zdGVhZC4gSWYgdGhlIGZpbGUgbmFtZQoraXMgYSBwbGFpbiAnLScsIGl0IGlzIGluc3RlYWQgd3JpdHRlbiB0byBzdGRvdXQuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KKy5JUCAiLXQsIC0tdGVsbmV0LW9wdGlvbiA8T1BUPXZhbD4iCitQYXNzIG9wdGlvbnMgdG8gdGhlIHRlbG5ldCBwcm90b2NvbC4gU3VwcG9ydGVkIG9wdGlvbnMgYXJlOgorCitUVFlQRT08dGVybT4gU2V0cyB0aGUgdGVybWluYWwgdHlwZS4KKworWERJU1BMT0M9PFggZGlzcGxheT4gU2V0cyB0aGUgWCBkaXNwbGF5IGxvY2F0aW9uLgorCitORVdfRU5WPTx2YXIsdmFsPiBTZXRzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgorLklQICItVCwgLS11cGxvYWQtZmlsZSA8ZmlsZT4iCitUaGlzIHRyYW5zZmVycyB0aGUgc3BlY2lmaWVkIGxvY2FsIGZpbGUgdG8gdGhlIHJlbW90ZSBVUkwuIElmIHRoZXJlIGlzIG5vIGZpbGUKK3BhcnQgaW4gdGhlIHNwZWNpZmllZCBVUkwsIEN1cmwgd2lsbCBhcHBlbmQgdGhlIGxvY2FsIGZpbGUgbmFtZS4gTk9URSB0aGF0IHlvdQorbXVzdCB1c2UgYSB0cmFpbGluZyAvIG9uIHRoZSBsYXN0IGRpcmVjdG9yeSB0byByZWFsbHkgcHJvdmUgdG8gQ3VybCB0aGF0IHRoZXJlCitpcyBubyBmaWxlIG5hbWUgb3IgY3VybCB3aWxsIHRoaW5rIHRoYXQgeW91ciBsYXN0IGRpcmVjdG9yeSBuYW1lIGlzIHRoZSByZW1vdGUKK2ZpbGUgbmFtZSB0byB1c2UuIFRoYXQgd2lsbCBtb3N0IGxpa2VseSBjYXVzZSB0aGUgdXBsb2FkIG9wZXJhdGlvbiB0byBmYWlsLiBJZgordGhpcyBpcyB1c2VkIG9uIGEgSFRUUChTKSBzZXJ2ZXIsIHRoZSBQVVQgY29tbWFuZCB3aWxsIGJlIHVzZWQuCisKK1VzZSB0aGUgZmlsZSBuYW1lICItIiAoYSBzaW5nbGUgZGFzaCkgdG8gdXNlIHN0ZGluIGluc3RlYWQgb2YgYSBnaXZlbiBmaWxlLgorQWx0ZXJuYXRlbHksIHRoZSBmaWxlIG5hbWUgIi4iIChhIHNpbmdsZSBwZXJpb2QpIG1heSBiZSBzcGVjaWZpZWQgaW5zdGVhZAorb2YgIi0iIHRvIHVzZSBzdGRpbiBpbiBub24tYmxvY2tpbmcgbW9kZSB0byBhbGxvdyByZWFkaW5nIHNlcnZlciBvdXRwdXQKK3doaWxlIHN0ZGluIGlzIGJlaW5nIHVwbG9hZGVkLgorCitZb3UgY2FuIHNwZWNpZnkgb25lIC1UIGZvciBlYWNoIFVSTCBvbiB0aGUgY29tbWFuZCBsaW5lLiBFYWNoIC1UICsgVVJMIHBhaXIKK3NwZWNpZmllcyB3aGF0IHRvIHVwbG9hZCBhbmQgdG8gd2hlcmUuIGN1cmwgYWxzbyBzdXBwb3J0cyAiZ2xvYmJpbmciIG9mIHRoZSAtVAorYXJndW1lbnQsIG1lYW5pbmcgdGhhdCB5b3UgY2FuIHVwbG9hZCBtdWx0aXBsZSBmaWxlcyB0byBhIHNpbmdsZSBVUkwgYnkgdXNpbmcKK3RoZSBzYW1lIFVSTCBnbG9iYmluZyBzdHlsZSBzdXBwb3J0ZWQgaW4gdGhlIFVSTCwgbGlrZSB0aGlzOgorCitjdXJsIC1UICJ7ZmlsZTEsZmlsZTJ9IiBodHRwOi8vd3d3LnVwbG9hZHRvdGhpc3NpdGUuY29tCisKK29yIGV2ZW4KKworY3VybCAtVCAiaW1nWzEtMTAwMF0ucG5nIiBmdHA6Ly9mdHAucGljdHVyZW1hbmlhLmNvbS91cGxvYWQvCisuSVAgIi0tdGNwLW5vZGVsYXkiCitUdXJuIG9uIHRoZSBUQ1BfTk9ERUxBWSBvcHRpb24uIFNlZSB0aGUgXGZJY3VybF9lYXN5X3NldG9wdCgzKVxmUCBtYW4gcGFnZSBmb3IKK2RldGFpbHMgYWJvdXQgdGhpcyBvcHRpb24uIChBZGRlZCBpbiA3LjExLjIpCisuSVAgIi0tdGZ0cC1ibGtzaXplIDx2YWx1ZT4iCisoVEZUUCkgU2V0IFRGVFAgQkxLU0laRSBvcHRpb24gKG11c3QgYmUgPjUxMikuIFRoaXMgaXMgdGhlIGJsb2NrIHNpemUgdGhhdAorY3VybCB3aWxsIHRyeSB0byB1c2Ugd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSB0byBvciBmcm9tIGEgVEZUUCBzZXJ2ZXIuIEJ5CitkZWZhdWx0IDUxMiBieXRlcyB3aWxsIGJlIHVzZWQuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KKworKEFkZGVkIGluIDcuMjAuMCkKKy5JUCAiLS10bHNhdXRodHlwZSA8YXV0aHR5cGU+IgorU2V0IFRMUyBhdXRoZW50aWNhdGlvbiB0eXBlLiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCBvcHRpb24gaXMgIlNSUCIsCitmb3IgVExTLVNSUCAoUkZDIDUwNTQpLiBJZiBcZkktLXRsc3VzZXJcZlAgYW5kIFxmSS0tdGxzcGFzc3dvcmRcZlAgYXJlCitzcGVjaWZpZWQgYnV0IFxmSS0tdGxzYXV0aHR5cGVcZlAgaXMgbm90LCB0aGVuIHRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvICJTUlAiLgorKEFkZGVkIGluIDcuMjEuNCkKKy5JUCAiLS10bHN1c2VyIDx1c2VyPiIKK1NldCB1c2VybmFtZSBmb3IgdXNlIHdpdGggdGhlIFRMUyBhdXRoZW50aWNhdGlvbiBtZXRob2Qgc3BlY2lmaWVkIHdpdGgKK1xmSS0tdGxzYXV0aHR5cGVcZlAuIFJlcXVpcmVzIHRoYXQgXGZJLS10bHNwYXNzd29yZFxmUCBhbHNvIGJlIHNldC4gIChBZGRlZCBpbgorNy4yMS40KQorLklQICItLXRsc3Bhc3N3b3JkIDxwYXNzd29yZD4iCitTZXQgcGFzc3dvcmQgZm9yIHVzZSB3aXRoIHRoZSBUTFMgYXV0aGVudGljYXRpb24gbWV0aG9kIHNwZWNpZmllZCB3aXRoCitcZkktLXRsc2F1dGh0eXBlXGZQLiBSZXF1aXJlcyB0aGF0IFxmSS0tdGxzdXNlclxmUCBhbHNvIGJlIHNldC4gIChBZGRlZCBpbgorNy4yMS40KQorLklQICItLXRyLWVuY29kaW5nIgorKEhUVFApIFJlcXVlc3QgYSBjb21wcmVzc2VkIFRyYW5zZmVyLUVuY29kaW5nIHJlc3BvbnNlIHVzaW5nIG9uZSBvZiB0aGUKK2FsZ29yaXRobXMgbGliY3VybCBzdXBwb3J0cywgYW5kIHVuY29tcHJlc3MgdGhlIGRhdGEgd2hpbGUgcmVjZWl2aW5nIGl0LgorCisoQWRkZWQgaW4gNy4yMS42KQorLklQICItLXRyYWNlIDxmaWxlPiIKK0VuYWJsZXMgYSBmdWxsIHRyYWNlIGR1bXAgb2YgYWxsIGluY29taW5nIGFuZCBvdXRnb2luZyBkYXRhLCBpbmNsdWRpbmcKK2Rlc2NyaXB0aXZlIGluZm9ybWF0aW9uLCB0byB0aGUgZ2l2ZW4gb3V0cHV0IGZpbGUuIFVzZSAiLSIgYXMgZmlsZW5hbWUgdG8gaGF2ZQordGhlIG91dHB1dCBzZW50IHRvIHN0ZG91dC4KKworVGhpcyBvcHRpb24gb3ZlcnJpZGVzIHByZXZpb3VzIHVzZXMgb2YgXGZJLXYsIC0tdmVyYm9zZVxmUCBvcgorXGZJLS10cmFjZS1hc2NpaVxmUC4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgorLklQICItLXRyYWNlLWFzY2lpIDxmaWxlPiIKK0VuYWJsZXMgYSBmdWxsIHRyYWNlIGR1bXAgb2YgYWxsIGluY29taW5nIGFuZCBvdXRnb2luZyBkYXRhLCBpbmNsdWRpbmcKK2Rlc2NyaXB0aXZlIGluZm9ybWF0aW9uLCB0byB0aGUgZ2l2ZW4gb3V0cHV0IGZpbGUuIFVzZSAiLSIgYXMgZmlsZW5hbWUgdG8gaGF2ZQordGhlIG91dHB1dCBzZW50IHRvIHN0ZG91dC4KKworVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gXGZJLS10cmFjZVxmUCwgYnV0IGxlYXZlcyBvdXQgdGhlIGhleCBwYXJ0IGFuZCBvbmx5CitzaG93cyB0aGUgQVNDSUkgcGFydCBvZiB0aGUgZHVtcC4gSXQgbWFrZXMgc21hbGxlciBvdXRwdXQgdGhhdCBtaWdodCBiZSBlYXNpZXIKK3RvIHJlYWQgZm9yIHVudHJhaW5lZCBodW1hbnMuCisKK1RoaXMgb3B0aW9uIG92ZXJyaWRlcyBwcmV2aW91cyB1c2VzIG9mIFxmSS12LCAtLXZlcmJvc2VcZlAgb3IgXGZJLS10cmFjZVxmUC4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgorLklQICItLXRyYWNlLXRpbWUiCitQcmVwZW5kcyBhIHRpbWUgc3RhbXAgdG8gZWFjaCB0cmFjZSBvciB2ZXJib3NlIGxpbmUgdGhhdCBjdXJsIGRpc3BsYXlzLgorKEFkZGVkIGluIDcuMTQuMCkKKy5JUCAiLXUsIC0tdXNlciA8dXNlcjpwYXNzd29yZD4iCitTcGVjaWZ5IHRoZSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIHRvIHVzZSBmb3Igc2VydmVyIGF1dGhlbnRpY2F0aW9uLiBPdmVycmlkZXMKK1xmSS1uLCAtLW5ldHJjXGZQIGFuZCBcZkktLW5ldHJjLW9wdGlvbmFsXGZQLgorCitJZiB5b3UganVzdCBnaXZlIHRoZSB1c2VyIG5hbWUgKHdpdGhvdXQgZW50ZXJpbmcgYSBjb2xvbikgY3VybCB3aWxsIHByb21wdCBmb3IKK2EgcGFzc3dvcmQuCisKK0lmIHlvdSB1c2UgYW4gU1NQSS1lbmFibGVkIGN1cmwgYmluYXJ5IGFuZCBkbyBOVExNIGF1dGhlbnRpY2F0aW9uLCB5b3UgY2FuCitmb3JjZSBjdXJsIHRvIHBpY2sgdXAgdGhlIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB5b3VyIGVudmlyb25tZW50IGJ5CitzaW1wbHkgc3BlY2lmeWluZyBhIHNpbmdsZSBjb2xvbiB3aXRoIHRoaXMgb3B0aW9uOiAiLXUgOiIuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KKy5JUCAiLVUsIC0tcHJveHktdXNlciA8dXNlcjpwYXNzd29yZD4iCitTcGVjaWZ5IHRoZSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIHRvIHVzZSBmb3IgcHJveHkgYXV0aGVudGljYXRpb24uCisKK0lmIHlvdSB1c2UgYW4gU1NQSS1lbmFibGVkIGN1cmwgYmluYXJ5IGFuZCBkbyBOVExNIGF1dGhlbnRpY2F0aW9uLCB5b3UgY2FuCitmb3JjZSBjdXJsIHRvIHBpY2sgdXAgdGhlIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB5b3VyIGVudmlyb25tZW50IGJ5CitzaW1wbHkgc3BlY2lmeWluZyBhIHNpbmdsZSBjb2xvbiB3aXRoIHRoaXMgb3B0aW9uOiAiLVUgOiIuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KKy5JUCAiLS11cmwgPFVSTD4iCitTcGVjaWZ5IGEgVVJMIHRvIGZldGNoLiBUaGlzIG9wdGlvbiBpcyBtb3N0bHkgaGFuZHkgd2hlbiB5b3Ugd2FudCB0byBzcGVjaWZ5CitVUkwocykgaW4gYSBjb25maWcgZmlsZS4KKworVGhpcyBvcHRpb24gbWF5IGJlIHVzZWQgYW55IG51bWJlciBvZiB0aW1lcy4gVG8gY29udHJvbCB3aGVyZSB0aGlzIFVSTCBpcword3JpdHRlbiwgdXNlIHRoZSBcZkktbywgLS1vdXRwdXRcZlAgb3IgdGhlIFxmSS1PLCAtLXJlbW90ZS1uYW1lXGZQIG9wdGlvbnMuCisuSVAgIi12LCAtLXZlcmJvc2UiCitNYWtlcyB0aGUgZmV0Y2hpbmcgbW9yZSB2ZXJib3NlL3RhbGthdGl2ZS4gTW9zdGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiBBIGxpbmUKK3N0YXJ0aW5nIHdpdGggJz4nIG1lYW5zICJoZWFkZXIgZGF0YSIgc2VudCBieSBjdXJsLCAnPCcgbWVhbnMgImhlYWRlciBkYXRhIgorcmVjZWl2ZWQgYnkgY3VybCB0aGF0IGlzIGhpZGRlbiBpbiBub3JtYWwgY2FzZXMsIGFuZCBhIGxpbmUgc3RhcnRpbmcgd2l0aCAnKicKK21lYW5zIGFkZGl0aW9uYWwgaW5mbyBwcm92aWRlZCBieSBjdXJsLgorCitOb3RlIHRoYXQgaWYgeW91IG9ubHkgd2FudCBIVFRQIGhlYWRlcnMgaW4gdGhlIG91dHB1dCwgXGZJLWksIC0taW5jbHVkZVxmUAorbWlnaHQgYmUgdGhlIG9wdGlvbiB5b3UncmUgbG9va2luZyBmb3IuCisKK0lmIHlvdSB0aGluayB0aGlzIG9wdGlvbiBzdGlsbCBkb2Vzbid0IGdpdmUgeW91IGVub3VnaCBkZXRhaWxzLCBjb25zaWRlciB1c2luZworXGZJLS10cmFjZVxmUCBvciBcZkktLXRyYWNlLWFzY2lpXGZQIGluc3RlYWQuCisKK1RoaXMgb3B0aW9uIG92ZXJyaWRlcyBwcmV2aW91cyB1c2VzIG9mIFxmSS0tdHJhY2UtYXNjaWlcZlAgb3IgXGZJLS10cmFjZVxmUC4KKworVXNlIFxmSS1zLCAtLXNpbGVudFxmUCB0byBtYWtlIGN1cmwgcXVpZXQuCisuSVAgIi13LCAtLXdyaXRlLW91dCA8Zm9ybWF0PiIKK0RlZmluZXMgd2hhdCB0byBkaXNwbGF5IG9uIHN0ZG91dCBhZnRlciBhIGNvbXBsZXRlZCBhbmQgc3VjY2Vzc2Z1bAorb3BlcmF0aW9uLiBUaGUgZm9ybWF0IGlzIGEgc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gcGxhaW4gdGV4dCBtaXhlZCB3aXRoIGFueQorbnVtYmVyIG9mIHZhcmlhYmxlcy4gVGhlIHN0cmluZyBjYW4gYmUgc3BlY2lmaWVkIGFzICJzdHJpbmciLCB0byBnZXQgcmVhZCBmcm9tCithIHBhcnRpY3VsYXIgZmlsZSB5b3Ugc3BlY2lmeSBpdCAiQGZpbGVuYW1lIiBhbmQgdG8gdGVsbCBjdXJsIHRvIHJlYWQgdGhlCitmb3JtYXQgZnJvbSBzdGRpbiB5b3Ugd3JpdGUgIkAtIi4KKworVGhlIHZhcmlhYmxlcyBwcmVzZW50IGluIHRoZSBvdXRwdXQgZm9ybWF0IHdpbGwgYmUgc3Vic3RpdHV0ZWQgYnkgdGhlIHZhbHVlIG9yCit0ZXh0IHRoYXQgY3VybCB0aGlua3MgZml0LCBhcyBkZXNjcmliZWQgYmVsb3cuIEFsbCB2YXJpYWJsZXMgYXJlIHNwZWNpZmllZAorYXMgJXt2YXJpYWJsZV9uYW1lfSBhbmQgdG8gb3V0cHV0IGEgbm9ybWFsICUgeW91IGp1c3Qgd3JpdGUgdGhlbSBhcworJSUuIFlvdSBjYW4gb3V0cHV0IGEgbmV3bGluZSBieSB1c2luZyBcXG4sIGEgY2FycmlhZ2UgcmV0dXJuIHdpdGggXFxyIGFuZCBhIHRhYgorc3BhY2Ugd2l0aCBcXHQuCisKKy5CIE5PVEU6CitUaGUgJS1zeW1ib2wgaXMgYSBzcGVjaWFsIHN5bWJvbCBpbiB0aGUgd2luMzItZW52aXJvbm1lbnQsIHdoZXJlIGFsbAorb2NjdXJyZW5jZXMgb2YgJSBtdXN0IGJlIGRvdWJsZWQgd2hlbiB1c2luZyB0aGlzIG9wdGlvbi4KKworVGhlIHZhcmlhYmxlcyBhdmFpbGFibGUgYXQgdGhpcyBwb2ludCBhcmU6CisuUlMKKy5UUCAxNQorLkIgdXJsX2VmZmVjdGl2ZQorVGhlIFVSTCB0aGF0IHdhcyBmZXRjaGVkIGxhc3QuIFRoaXMgaXMgbW9zdCBtZWFuaW5nZnVsIGlmIHlvdSd2ZSB0b2xkIGN1cmwKK3RvIGZvbGxvdyBsb2NhdGlvbjogaGVhZGVycy4KKy5UUAorLkIgaHR0cF9jb2RlCitUaGUgbnVtZXJpY2FsIHJlc3BvbnNlIGNvZGUgdGhhdCB3YXMgZm91bmQgaW4gdGhlIGxhc3QgcmV0cmlldmVkIEhUVFAoUykgb3IKK0ZUUChzKSB0cmFuc2Zlci4gSW4gNy4xOC4yIHRoZSBhbGlhcyBcZkJyZXNwb25zZV9jb2RlXGZQIHdhcyBhZGRlZCB0byBzaG93IHRoZQorc2FtZSBpbmZvLgorLlRQCisuQiBodHRwX2Nvbm5lY3QKK1RoZSBudW1lcmljYWwgY29kZSB0aGF0IHdhcyBmb3VuZCBpbiB0aGUgbGFzdCByZXNwb25zZSAoZnJvbSBhIHByb3h5KSB0byBhCitjdXJsIENPTk5FQ1QgcmVxdWVzdC4gKEFkZGVkIGluIDcuMTIuNCkKKy5UUAorLkIgdGltZV90b3RhbAorVGhlIHRvdGFsIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgdGhlIGZ1bGwgb3BlcmF0aW9uIGxhc3RlZC4gVGhlIHRpbWUgd2lsbCBiZQorZGlzcGxheWVkIHdpdGggbWlsbGlzZWNvbmQgcmVzb2x1dGlvbi4KKy5UUAorLkIgdGltZV9uYW1lbG9va3VwCitUaGUgdGltZSwgaW4gc2Vjb25kcywgaXQgdG9vayBmcm9tIHRoZSBzdGFydCB1bnRpbCB0aGUgbmFtZSByZXNvbHZpbmcgd2FzCitjb21wbGV0ZWQuCisuVFAKKy5CIHRpbWVfY29ubmVjdAorVGhlIHRpbWUsIGluIHNlY29uZHMsIGl0IHRvb2sgZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIFRDUCBjb25uZWN0IHRvIHRoZQorcmVtb3RlIGhvc3QgKG9yIHByb3h5KSB3YXMgY29tcGxldGVkLgorLlRQCisuQiB0aW1lX2FwcGNvbm5lY3QKK1RoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBTU0wvU1NIL2V0YworY29ubmVjdC9oYW5kc2hha2UgdG8gdGhlIHJlbW90ZSBob3N0IHdhcyBjb21wbGV0ZWQuIChBZGRlZCBpbiA3LjE5LjApCisuVFAKKy5CIHRpbWVfcHJldHJhbnNmZXIKK1RoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBmaWxlIHRyYW5zZmVyIHdhcyBqdXN0CithYm91dCB0byBiZWdpbi4gVGhpcyBpbmNsdWRlcyBhbGwgcHJlLXRyYW5zZmVyIGNvbW1hbmRzIGFuZCBuZWdvdGlhdGlvbnMgdGhhdAorYXJlIHNwZWNpZmljIHRvIHRoZSBwYXJ0aWN1bGFyIHByb3RvY29sKHMpIGludm9sdmVkLgorLlRQCisuQiB0aW1lX3JlZGlyZWN0CitUaGUgdGltZSwgaW4gc2Vjb25kcywgaXQgdG9vayBmb3IgYWxsIHJlZGlyZWN0aW9uIHN0ZXBzIGluY2x1ZGUgbmFtZSBsb29rdXAsCitjb25uZWN0LCBwcmV0cmFuc2ZlciBhbmQgdHJhbnNmZXIgYmVmb3JlIHRoZSBmaW5hbCB0cmFuc2FjdGlvbiB3YXMKK3N0YXJ0ZWQuIHRpbWVfcmVkaXJlY3Qgc2hvd3MgdGhlIGNvbXBsZXRlIGV4ZWN1dGlvbiB0aW1lIGZvciBtdWx0aXBsZQorcmVkaXJlY3Rpb25zLiAoQWRkZWQgaW4gNy4xMi4zKQorLlRQCisuQiB0aW1lX3N0YXJ0dHJhbnNmZXIKK1RoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBmaXJzdCBieXRlIHdhcyBqdXN0IGFib3V0Cit0byBiZSB0cmFuc2ZlcnJlZC4gVGhpcyBpbmNsdWRlcyB0aW1lX3ByZXRyYW5zZmVyIGFuZCBhbHNvIHRoZSB0aW1lIHRoZQorc2VydmVyIG5lZWRlZCB0byBjYWxjdWxhdGUgdGhlIHJlc3VsdC4KKy5UUAorLkIgc2l6ZV9kb3dubG9hZAorVGhlIHRvdGFsIGFtb3VudCBvZiBieXRlcyB0aGF0IHdlcmUgZG93bmxvYWRlZC4KKy5UUAorLkIgc2l6ZV91cGxvYWQKK1RoZSB0b3RhbCBhbW91bnQgb2YgYnl0ZXMgdGhhdCB3ZXJlIHVwbG9hZGVkLgorLlRQCisuQiBzaXplX2hlYWRlcgorVGhlIHRvdGFsIGFtb3VudCBvZiBieXRlcyBvZiB0aGUgZG93bmxvYWRlZCBoZWFkZXJzLgorLlRQCisuQiBzaXplX3JlcXVlc3QKK1RoZSB0b3RhbCBhbW91bnQgb2YgYnl0ZXMgdGhhdCB3ZXJlIHNlbnQgaW4gdGhlIEhUVFAgcmVxdWVzdC4KKy5UUAorLkIgc3BlZWRfZG93bmxvYWQKK1RoZSBhdmVyYWdlIGRvd25sb2FkIHNwZWVkIHRoYXQgY3VybCBtZWFzdXJlZCBmb3IgdGhlIGNvbXBsZXRlIGRvd25sb2FkLiBCeXRlcworcGVyIHNlY29uZC4KKy5UUAorLkIgc3BlZWRfdXBsb2FkCitUaGUgYXZlcmFnZSB1cGxvYWQgc3BlZWQgdGhhdCBjdXJsIG1lYXN1cmVkIGZvciB0aGUgY29tcGxldGUgdXBsb2FkLiBCeXRlcyBwZXIKK3NlY29uZC4KKy5UUAorLkIgY29udGVudF90eXBlCitUaGUgQ29udGVudC1UeXBlIG9mIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnQsIGlmIHRoZXJlIHdhcyBhbnkuCisuVFAKKy5CIG51bV9jb25uZWN0cworTnVtYmVyIG9mIG5ldyBjb25uZWN0cyBtYWRlIGluIHRoZSByZWNlbnQgdHJhbnNmZXIuIChBZGRlZCBpbiA3LjEyLjMpCisuVFAKKy5CIG51bV9yZWRpcmVjdHMKK051bWJlciBvZiByZWRpcmVjdHMgdGhhdCB3ZXJlIGZvbGxvd2VkIGluIHRoZSByZXF1ZXN0LiAoQWRkZWQgaW4gNy4xMi4zKQorLlRQCisuQiByZWRpcmVjdF91cmwKK1doZW4gYSBIVFRQIHJlcXVlc3Qgd2FzIG1hZGUgd2l0aG91dCAtTCB0byBmb2xsb3cgcmVkaXJlY3RzLCB0aGlzIHZhcmlhYmxlCit3aWxsIHNob3cgdGhlIGFjdHVhbCBVUkwgYSByZWRpcmVjdCBcZkl3b3VsZFxmUCB0YWtlIHlvdSB0by4gKEFkZGVkIGluIDcuMTguMikKKy5UUAorLkIgZnRwX2VudHJ5X3BhdGgKK1RoZSBpbml0aWFsIHBhdGggbGliY3VybCBlbmRlZCB1cCBpbiB3aGVuIGxvZ2dpbmcgb24gdG8gdGhlIHJlbW90ZSBGVFAKK3NlcnZlci4gKEFkZGVkIGluIDcuMTUuNCkKKy5UUAorLkIgc3NsX3ZlcmlmeV9yZXN1bHQKK1RoZSByZXN1bHQgb2YgdGhlIFNTTCBwZWVyIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiB0aGF0IHdhcyByZXF1ZXN0ZWQuIDAKK21lYW5zIHRoZSB2ZXJpZmljYXRpb24gd2FzIHN1Y2Nlc3NmdWwuIChBZGRlZCBpbiA3LjE5LjApCisuUkUKKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgorLklQICIteCwgLS1wcm94eSA8W3Byb3RvY29sOi8vXVt1c2VyQHBhc3N3b3JkXXByb3h5aG9zdFs6cG9ydF0+IgorVXNlIHRoZSBzcGVjaWZpZWQgSFRUUCBwcm94eS4gSWYgdGhlIHBvcnQgbnVtYmVyIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzCithc3N1bWVkIGF0IHBvcnQgMTA4MC4KKworVGhpcyBvcHRpb24gb3ZlcnJpZGVzIGV4aXN0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHNldCB0aGUgcHJveHkgdG8KK3VzZS4gSWYgdGhlcmUncyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXR0aW5nIGEgcHJveHksIHlvdSBjYW4gc2V0IHByb3h5IHRvCitcJiIiIHRvIG92ZXJyaWRlIGl0LgorCitBbGwgb3BlcmF0aW9ucyB0aGF0IGFyZSBwZXJmb3JtZWQgb3ZlciBhIEhUVFAgcHJveHkgd2lsbCB0cmFuc3BhcmVudGx5IGJlCitjb252ZXJ0ZWQgdG8gSFRUUC4gSXQgbWVhbnMgdGhhdCBjZXJ0YWluIHByb3RvY29sIHNwZWNpZmljIG9wZXJhdGlvbnMgbWlnaHQKK25vdCBiZSBhdmFpbGFibGUuIFRoaXMgaXMgbm90IHRoZSBjYXNlIGlmIHlvdSBjYW4gdHVubmVsIHRocm91Z2ggdGhlIHByb3h5LCBhcworb25lIHdpdGggdGhlIFxmSS1wLCAtLXByb3h5dHVubmVsXGZQIG9wdGlvbi4KKworVGhlIHByb3h5IGhvc3QgY2FuIGJlIHNwZWNpZmllZCB0aGUgZXhhY3Qgc2FtZSB3YXkgYXMgdGhlIHByb3h5IGVudmlyb25tZW50Cit2YXJpYWJsZXMsIGluY2x1ZGluZyB0aGUgcHJvdG9jb2wgcHJlZml4IChodHRwOi8vKSBhbmQgdGhlIGVtYmVkZGVkIHVzZXIgKworcGFzc3dvcmQuCisKK0Zyb20gNy4yMS43LCB0aGUgcHJveHkgc3RyaW5nIG1heSBiZSBzcGVjaWZpZWQgd2l0aCBhIHByb3RvY29sOi8vIHByZWZpeCB0bworc3BlY2lmeSBhbHRlcm5hdGl2ZSBwcm94eSBwcm90b2NvbHMuIFVzZSBzb2NrczQ6Ly8sIHNvY2tzNGE6Ly8sIHNvY2tzNTovLyBvcgorc29ja3M1aDovLyB0byByZXF1ZXN0IHRoZSBzcGVjaWZpYyBTT0NLUyB2ZXJzaW9uIHRvIGJlIHVzZWQuIE5vIHByb3RvY29sCitzcGVjaWZpZWQsIGh0dHA6Ly8gYW5kIGFsbCBvdGhlcnMgd2lsbCBiZSB0cmVhdGVkIGFzIEhUVFAgcHJveGllcy4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgorLklQICItWCwgLS1yZXF1ZXN0IDxjb21tYW5kPiIKKyhIVFRQKSBTcGVjaWZpZXMgYSBjdXN0b20gcmVxdWVzdCBtZXRob2QgdG8gdXNlIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIHRoZQorSFRUUCBzZXJ2ZXIuICBUaGUgc3BlY2lmaWVkIHJlcXVlc3Qgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIG1ldGhvZAorb3RoZXJ3aXNlIHVzZWQgKHdoaWNoIGRlZmF1bHRzIHRvIEdFVCkuIFJlYWQgdGhlIEhUVFAgMS4xIHNwZWNpZmljYXRpb24gZm9yCitkZXRhaWxzIGFuZCBleHBsYW5hdGlvbnMuIENvbW1vbiBhZGRpdGlvbmFsIEhUVFAgcmVxdWVzdHMgaW5jbHVkZSBQVVQgYW5kCitERUxFVEUsIGJ1dCByZWxhdGVkIHRlY2hub2xvZ2llcyBsaWtlIFdlYkRBViBvZmZlcnMgUFJPUEZJTkQsIENPUFksIE1PVkUgYW5kCittb3JlLgorCisoRlRQKQorU3BlY2lmaWVzIGEgY3VzdG9tIEZUUCBjb21tYW5kIHRvIHVzZSBpbnN0ZWFkIG9mIExJU1Qgd2hlbiBkb2luZyBmaWxlIGxpc3RzCit3aXRoIEZUUC4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgorCisuSVAgIi0teGF0dHIiCitXaGVuIHNhdmluZyBvdXRwdXQgdG8gYSBmaWxlLCB0aGlzIG9wdGlvbiB0ZWxscyBjdXJsIHRvIHN0b3JlIGNlcnRhaW4gZmlsZQorbWV0YWRhdGEgaW4gZXh0ZW5lZCBmaWxlIGF0dHJpYnV0ZXMuIEN1cnJlbnRseSwgdGhlIFVSTCBpcyBzdG9yZWQgaW4gdGhlCit4ZGcub3JpZ2luLnVybCBhdHRyaWJ1dGUgYW5kLCBmb3IgSFRUUCwgdGhlIGNvbnRlbnQgdHlwZSBpcyBzdG9yZWQgaW4KK3RoZSBtaW1lX3R5cGUgYXR0cmlidXRlLiBJZiB0aGUgZmlsZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBleHRlbmRlZAorYXR0cmlidXRlcywgYSB3YXJuaW5nIGlzIGlzc3VlZC4KKworLklQICIteSwgLS1zcGVlZC10aW1lIDx0aW1lPiIKK0lmIGEgZG93bmxvYWQgaXMgc2xvd2VyIHRoYW4gc3BlZWQtbGltaXQgYnl0ZXMgcGVyIHNlY29uZCBkdXJpbmcgYSBzcGVlZC10aW1lCitwZXJpb2QsIHRoZSBkb3dubG9hZCBnZXRzIGFib3J0ZWQuIElmIHNwZWVkLXRpbWUgaXMgdXNlZCwgdGhlIGRlZmF1bHQKK3NwZWVkLWxpbWl0IHdpbGwgYmUgMSB1bmxlc3Mgc2V0IHdpdGggLVkuCisKK1RoaXMgb3B0aW9uIGNvbnRyb2xzIHRyYW5zZmVycyBhbmQgdGh1cyB3aWxsIG5vdCBhZmZlY3Qgc2xvdyBjb25uZWN0cyBldGMuIElmCit0aGlzIGlzIGEgY29uY2VybiBmb3IgeW91LCB0cnkgdGhlIFxmSS0tY29ubmVjdC10aW1lb3V0XGZQIG9wdGlvbi4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgorLklQICItWSwgLS1zcGVlZC1saW1pdCA8c3BlZWQ+IgorSWYgYSBkb3dubG9hZCBpcyBzbG93ZXIgdGhhbiB0aGlzIGdpdmVuIHNwZWVkIChpbiBieXRlcyBwZXIgc2Vjb25kKSBmb3IKK3NwZWVkLXRpbWUgc2Vjb25kcyBpdCBnZXRzIGFib3J0ZWQuIHNwZWVkLXRpbWUgaXMgc2V0IHdpdGggLXkgYW5kIGlzIDMwIGlmCitub3Qgc2V0LgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi16LCAtLXRpbWUtY29uZCA8ZGF0ZSBleHByZXNzaW9uPiIKKyhIVFRQL0ZUUC9GSUxFKSBSZXF1ZXN0IGEgZmlsZSB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIGxhdGVyIHRoYW4gdGhlIGdpdmVuIHRpbWUKK2FuZCBkYXRlLCBvciBvbmUgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBiZWZvcmUgdGhhdCB0aW1lLiBUaGUgZGF0ZSBleHByZXNzaW9uCitjYW4gYmUgYWxsIHNvcnRzIG9mIGRhdGUgc3RyaW5ncyBvciBpZiBpdCBkb2Vzbid0IG1hdGNoIGFueSBpbnRlcm5hbCBvbmVzLCBpdAordHJpZXMgdG8gZ2V0IHRoZSB0aW1lIGZyb20gYSBnaXZlbiBmaWxlIG5hbWUgaW5zdGVhZCEgU2VlIHRoZQorXGZJY3VybF9nZXRkYXRlKDMpXGZQIG1hbiBwYWdlcyBmb3IgZGF0ZSBleHByZXNzaW9uIGRldGFpbHMuCisKK1N0YXJ0IHRoZSBkYXRlIGV4cHJlc3Npb24gd2l0aCBhIGRhc2ggKC0pIHRvIG1ha2UgaXQgcmVxdWVzdCBmb3IgYSBkb2N1bWVudAordGhhdCBpcyBvbGRlciB0aGFuIHRoZSBnaXZlbiBkYXRlL3RpbWUsIGRlZmF1bHQgaXMgYSBkb2N1bWVudCB0aGF0IGlzIG5ld2VyCit0aGFuIHRoZSBzcGVjaWZpZWQgZGF0ZS90aW1lLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi1oLCAtLWhlbHAiCitVc2FnZSBoZWxwLgorLklQICItTSwgLS1tYW51YWwiCitNYW51YWwuIERpc3BsYXkgdGhlIGh1Z2UgaGVscCB0ZXh0LgorLklQICItViwgLS12ZXJzaW9uIgorRGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQgY3VybCBhbmQgdGhlIGxpYmN1cmwgdmVyc2lvbiBpdCB1c2VzLgorCitUaGUgZmlyc3QgbGluZSBpbmNsdWRlcyB0aGUgZnVsbCB2ZXJzaW9uIG9mIGN1cmwsIGxpYmN1cmwgYW5kIG90aGVyIDNyZCBwYXJ0eQorbGlicmFyaWVzIGxpbmtlZCB3aXRoIHRoZSBleGVjdXRhYmxlLgorCitUaGUgc2Vjb25kIGxpbmUgKHN0YXJ0cyB3aXRoICJQcm90b2NvbHM6Iikgc2hvd3MgYWxsIHByb3RvY29scyB0aGF0IGxpYmN1cmwKK3JlcG9ydHMgdG8gc3VwcG9ydC4KKworVGhlIHRoaXJkIGxpbmUgKHN0YXJ0cyB3aXRoICJGZWF0dXJlczoiKSBzaG93cyBzcGVjaWZpYyBmZWF0dXJlcyBsaWJjdXJsCityZXBvcnRzIHRvIG9mZmVyLiBBdmFpbGFibGUgZmVhdHVyZXMgaW5jbHVkZToKKy5SUworLklQICJJUHY2IgorWW91IGNhbiB1c2UgSVB2NiB3aXRoIHRoaXMuCisuSVAgImtyYjQiCitLcmI0IGZvciBGVFAgaXMgc3VwcG9ydGVkLgorLklQICJTU0wiCitIVFRQUyBhbmQgRlRQUyBhcmUgc3VwcG9ydGVkLgorLklQICJsaWJ6IgorQXV0b21hdGljIGRlY29tcHJlc3Npb24gb2YgY29tcHJlc3NlZCBmaWxlcyBvdmVyIEhUVFAgaXMgc3VwcG9ydGVkLgorLklQICJOVExNIgorTlRMTSBhdXRoZW50aWNhdGlvbiBpcyBzdXBwb3J0ZWQuCisuSVAgIkdTUy1OZWdvdGlhdGUiCitOZWdvdGlhdGUgYXV0aGVudGljYXRpb24gYW5kIGtyYjUgZm9yIEZUUCBpcyBzdXBwb3J0ZWQuCisuSVAgIkRlYnVnIgorVGhpcyBjdXJsIHVzZXMgYSBsaWJjdXJsIGJ1aWx0IHdpdGggRGVidWcuIFRoaXMgZW5hYmxlcyBtb3JlIGVycm9yLXRyYWNraW5nCithbmQgbWVtb3J5IGRlYnVnZ2luZyBldGMuIEZvciBjdXJsLWRldmVsb3BlcnMgb25seSEKKy5JUCAiQXN5bmNoRE5TIgorVGhpcyBjdXJsIHVzZXMgYXN5bmNocm9ub3VzIG5hbWUgcmVzb2x2ZXMuCisuSVAgIlNQTkVHTyIKK1NQTkVHTyBOZWdvdGlhdGUgYXV0aGVudGljYXRpb24gaXMgc3VwcG9ydGVkLgorLklQICJMYXJnZWZpbGUiCitUaGlzIGN1cmwgc3VwcG9ydHMgdHJhbnNmZXJzIG9mIGxhcmdlIGZpbGVzLCBmaWxlcyBsYXJnZXIgdGhhbiAyR0IuCisuSVAgIklETiIKK1RoaXMgY3VybCBzdXBwb3J0cyBJRE4gLSBpbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lcy4KKy5JUCAiU1NQSSIKK1NTUEkgaXMgc3VwcG9ydGVkLiBJZiB5b3UgdXNlIE5UTE0gYW5kIHNldCBhIGJsYW5rIHVzZXIgbmFtZSwgY3VybCB3aWxsCithdXRoZW50aWNhdGUgd2l0aCB5b3VyIGN1cnJlbnQgdXNlciBhbmQgcGFzc3dvcmQuCisuSVAgIlRMUy1TUlAiCitTUlAgKFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQpIGF1dGhlbnRpY2F0aW9uIGlzIHN1cHBvcnRlZCBmb3IgVExTLgorLlJFCisuU0ggRklMRVMKKy5JIH4vLmN1cmxyYworLlJTCitEZWZhdWx0IGNvbmZpZyBmaWxlLCBzZWUgXGZJLUssIC0tY29uZmlnXGZQIGZvciBkZXRhaWxzLgorLlNIIEVOVklST05NRU5UCitUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbiBiZSBzcGVjaWZpZWQgaW4gbG93ZXIgY2FzZSBvciB1cHBlciBjYXNlLiBUaGUKK2xvd2VyIGNhc2UgdmVyc2lvbiBoYXMgcHJlY2VkZW5jZS4gaHR0cF9wcm94eSBpcyBhbiBleGNlcHRpb24gYXMgaXQgaXMgb25seQorYXZhaWxhYmxlIGluIGxvd2VyIGNhc2UuCisKK1VzaW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNldCB0aGUgcHJveHkgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB1c2luZwordGhlIFxmSS0tcHJveHlcZlAgb3B0aW9uLgorCisuSVAgImh0dHBfcHJveHkgW3Byb3RvY29sOi8vXTxob3N0Pls6cG9ydF0iCitTZXRzIHRoZSBwcm94eSBzZXJ2ZXIgdG8gdXNlIGZvciBIVFRQLgorLklQICJIVFRQU19QUk9YWSBbcHJvdG9jb2w6Ly9dPGhvc3Q+Wzpwb3J0XSIKK1NldHMgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yIEhUVFBTLgorLklQICJbdXJsLXByb3RvY29sXV9QUk9YWSBbcHJvdG9jb2w6Ly9dPGhvc3Q+Wzpwb3J0XSIKK1NldHMgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yIFt1cmwtcHJvdG9jb2xdLCB3aGVyZSB0aGUgcHJvdG9jb2wgaXMgYQorcHJvdG9jb2wgdGhhdCBjdXJsIHN1cHBvcnRzIGFuZCBhcyBzcGVjaWZpZWQgaW4gYSBVUkwuIEZUUCwgRlRQUywgUE9QMywgSU1BUCwKK1NNVFAsIExEQVAgZXRjLgorLklQICJBTExfUFJPWFkgW3Byb3RvY29sOi8vXTxob3N0Pls6cG9ydF0iCitTZXRzIHRoZSBwcm94eSBzZXJ2ZXIgdG8gdXNlIGlmIG5vIHByb3RvY29sLXNwZWNpZmljIHByb3h5IGlzIHNldC4KKy5JUCAiTk9fUFJPWFkgPGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGhvc3RzPiIKK2xpc3Qgb2YgaG9zdCBuYW1lcyB0aGF0IHNob3VsZG4ndCBnbyB0aHJvdWdoIGFueSBwcm94eS4gSWYgc2V0IHRvIGEgYXN0ZXJpc2sKK1wmJyonIG9ubHksIGl0IG1hdGNoZXMgYWxsIGhvc3RzLgorLlNIICJQUk9YWSBQUk9UT0NPTCBQUkVGSVhFUyIKK1NpbmNlIGN1cmwgdmVyc2lvbiA3LjIxLjcsIHRoZSBwcm94eSBzdHJpbmcgbWF5IGJlIHNwZWNpZmllZCB3aXRoIGEKK3Byb3RvY29sOi8vIHByZWZpeCB0byBzcGVjaWZ5IGFsdGVybmF0aXZlIHByb3h5IHByb3RvY29scy4KKworSWYgbm8gcHJvdG9jb2wgaXMgc3BlY2lmaWVkIGluIHRoZSBwcm94eSBzdHJpbmcgb3IgaWYgdGhlIHN0cmluZyBkb2Vzbid0IG1hdGNoCithIHN1cHBvcnRlZCBvbmUsIHRoZSBwcm94eSB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBIVFRQIHByb3h5LgorCitUaGUgc3VwcG9ydGVkIHByb3h5IHByb3RvY29sIHByZWZpeGVzIGFyZSBhcyBmb2xsb3dzOgorLklQICJzb2NrczQ6Ly8iCitNYWtlcyBpdCB0aGUgZXF1aXZhbGVudCBvZiBcZkktLXNvY2tzNFxmUAorLklQICJzb2NrczRhOi8vIgorTWFrZXMgaXQgdGhlIGVxdWl2YWxlbnQgb2YgXGZJLS1zb2NrczRhXGZQCisuSVAgInNvY2tzNTovLyIKK01ha2VzIGl0IHRoZSBlcXVpdmFsZW50IG9mIFxmSS0tc29ja3M1XGZQCisuSVAgInNvY2tzNWg6Ly8iCitNYWtlcyBpdCB0aGUgZXF1aXZhbGVudCBvZiBcZkktLXNvY2tzNS1ob3N0bmFtZVxmUAorLlNIIEVYSVQgQ09ERVMKK1RoZXJlIGFyZSBhIGJ1bmNoIG9mIGRpZmZlcmVudCBlcnJvciBjb2RlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBlcnJvcgorbWVzc2FnZXMgdGhhdCBtYXkgYXBwZWFyIGR1cmluZyBiYWQgY29uZGl0aW9ucy4gQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLAordGhlIGV4aXQgY29kZXMgYXJlOgorLklQIDEKK1Vuc3VwcG9ydGVkIHByb3RvY29sLiBUaGlzIGJ1aWxkIG9mIGN1cmwgaGFzIG5vIHN1cHBvcnQgZm9yIHRoaXMgcHJvdG9jb2wuCisuSVAgMgorRmFpbGVkIHRvIGluaXRpYWxpemUuCisuSVAgMworVVJMIG1hbGZvcm1lZC4gVGhlIHN5bnRheCB3YXMgbm90IGNvcnJlY3QuCisuSVAgNAorQSBmZWF0dXJlIG9yIG9wdGlvbiB0aGF0IHdhcyBuZWVkZWQgdG8gcGVyZm9ybSB0aGUgZGVzaXJlZCByZXF1ZXN0IHdhcyBub3QKK2VuYWJsZWQgb3Igd2FzIGV4cGxpY2l0bHkgZGlzYWJsZWQgYXQgYnVpbGQtdGltZS4gVG8gbWFrZSBjdXJsIGFibGUgdG8gZG8KK3RoaXMsIHlvdSBwcm9iYWJseSBuZWVkIGFub3RoZXIgYnVpbGQgb2YgbGliY3VybCEKKy5JUCA1CitDb3VsZG4ndCByZXNvbHZlIHByb3h5LiBUaGUgZ2l2ZW4gcHJveHkgaG9zdCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuCisuSVAgNgorQ291bGRuJ3QgcmVzb2x2ZSBob3N0LiBUaGUgZ2l2ZW4gcmVtb3RlIGhvc3Qgd2FzIG5vdCByZXNvbHZlZC4KKy5JUCA3CitGYWlsZWQgdG8gY29ubmVjdCB0byBob3N0LgorLklQIDgKK0ZUUCB3ZWlyZCBzZXJ2ZXIgcmVwbHkuIFRoZSBzZXJ2ZXIgc2VudCBkYXRhIGN1cmwgY291bGRuJ3QgcGFyc2UuCisuSVAgOQorRlRQIGFjY2VzcyBkZW5pZWQuIFRoZSBzZXJ2ZXIgZGVuaWVkIGxvZ2luIG9yIGRlbmllZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIKK3Jlc291cmNlIG9yIGRpcmVjdG9yeSB5b3Ugd2FudGVkIHRvIHJlYWNoLiBNb3N0IG9mdGVuIHlvdSB0cmllZCB0byBjaGFuZ2UgdG8gYQorZGlyZWN0b3J5IHRoYXQgZG9lc24ndCBleGlzdCBvbiB0aGUgc2VydmVyLgorLklQIDExCitGVFAgd2VpcmQgUEFTUyByZXBseS4gQ3VybCBjb3VsZG4ndCBwYXJzZSB0aGUgcmVwbHkgc2VudCB0byB0aGUgUEFTUyByZXF1ZXN0LgorLklQIDEzCitGVFAgd2VpcmQgUEFTViByZXBseSwgQ3VybCBjb3VsZG4ndCBwYXJzZSB0aGUgcmVwbHkgc2VudCB0byB0aGUgUEFTViByZXF1ZXN0LgorLklQIDE0CitGVFAgd2VpcmQgMjI3IGZvcm1hdC4gQ3VybCBjb3VsZG4ndCBwYXJzZSB0aGUgMjI3LWxpbmUgdGhlIHNlcnZlciBzZW50LgorLklQIDE1CitGVFAgY2FuJ3QgZ2V0IGhvc3QuIENvdWxkbid0IHJlc29sdmUgdGhlIGhvc3QgSVAgd2UgZ290IGluIHRoZSAyMjctbGluZS4KKy5JUCAxNworRlRQIGNvdWxkbid0IHNldCBiaW5hcnkuIENvdWxkbid0IGNoYW5nZSB0cmFuc2ZlciBtZXRob2QgdG8gYmluYXJ5LgorLklQIDE4CitQYXJ0aWFsIGZpbGUuIE9ubHkgYSBwYXJ0IG9mIHRoZSBmaWxlIHdhcyB0cmFuc2ZlcnJlZC4KKy5JUCAxOQorRlRQIGNvdWxkbid0IGRvd25sb2FkL2FjY2VzcyB0aGUgZ2l2ZW4gZmlsZSwgdGhlIFJFVFIgKG9yIHNpbWlsYXIpIGNvbW1hbmQKK2ZhaWxlZC4KKy5JUCAyMQorRlRQIHF1b3RlIGVycm9yLiBBIHF1b3RlIGNvbW1hbmQgcmV0dXJuZWQgZXJyb3IgZnJvbSB0aGUgc2VydmVyLgorLklQIDIyCitIVFRQIHBhZ2Ugbm90IHJldHJpZXZlZC4gVGhlIHJlcXVlc3RlZCB1cmwgd2FzIG5vdCBmb3VuZCBvciByZXR1cm5lZCBhbm90aGVyCitlcnJvciB3aXRoIHRoZSBIVFRQIGVycm9yIGNvZGUgYmVpbmcgNDAwIG9yIGFib3ZlLiBUaGlzIHJldHVybiBjb2RlIG9ubHkKK2FwcGVhcnMgaWYgXGZJLWYsIC0tZmFpbFxmUCBpcyB1c2VkLgorLklQIDIzCitXcml0ZSBlcnJvci4gQ3VybCBjb3VsZG4ndCB3cml0ZSBkYXRhIHRvIGEgbG9jYWwgZmlsZXN5c3RlbSBvciBzaW1pbGFyLgorLklQIDI1CitGVFAgY291bGRuJ3QgU1RPUiBmaWxlLiBUaGUgc2VydmVyIGRlbmllZCB0aGUgU1RPUiBvcGVyYXRpb24sIHVzZWQgZm9yIEZUUAordXBsb2FkaW5nLgorLklQIDI2CitSZWFkIGVycm9yLiBWYXJpb3VzIHJlYWRpbmcgcHJvYmxlbXMuCisuSVAgMjcKK091dCBvZiBtZW1vcnkuIEEgbWVtb3J5IGFsbG9jYXRpb24gcmVxdWVzdCBmYWlsZWQuCisuSVAgMjgKK09wZXJhdGlvbiB0aW1lb3V0LiBUaGUgc3BlY2lmaWVkIHRpbWUtb3V0IHBlcmlvZCB3YXMgcmVhY2hlZCBhY2NvcmRpbmcgdG8gdGhlCitjb25kaXRpb25zLgorLklQIDMwCitGVFAgUE9SVCBmYWlsZWQuIFRoZSBQT1JUIGNvbW1hbmQgZmFpbGVkLiBOb3QgYWxsIEZUUCBzZXJ2ZXJzIHN1cHBvcnQgdGhlIFBPUlQKK2NvbW1hbmQsIHRyeSBkb2luZyBhIHRyYW5zZmVyIHVzaW5nIFBBU1YgaW5zdGVhZCEKKy5JUCAzMQorRlRQIGNvdWxkbid0IHVzZSBSRVNULiBUaGUgUkVTVCBjb21tYW5kIGZhaWxlZC4gVGhpcyBjb21tYW5kIGlzIHVzZWQgZm9yCityZXN1bWVkIEZUUCB0cmFuc2ZlcnMuCisuSVAgMzMKK0hUVFAgcmFuZ2UgZXJyb3IuIFRoZSByYW5nZSAiY29tbWFuZCIgZGlkbid0IHdvcmsuCisuSVAgMzQKK0hUVFAgcG9zdCBlcnJvci4gSW50ZXJuYWwgcG9zdC1yZXF1ZXN0IGdlbmVyYXRpb24gZXJyb3IuCisuSVAgMzUKK1NTTCBjb25uZWN0IGVycm9yLiBUaGUgU1NMIGhhbmRzaGFraW5nIGZhaWxlZC4KKy5JUCAzNgorRlRQIGJhZCBkb3dubG9hZCByZXN1bWUuIENvdWxkbid0IGNvbnRpbnVlIGFuIGVhcmxpZXIgYWJvcnRlZCBkb3dubG9hZC4KKy5JUCAzNworRklMRSBjb3VsZG4ndCByZWFkIGZpbGUuIEZhaWxlZCB0byBvcGVuIHRoZSBmaWxlLiBQZXJtaXNzaW9ucz8KKy5JUCAzOAorTERBUCBjYW5ub3QgYmluZC4gTERBUCBiaW5kIG9wZXJhdGlvbiBmYWlsZWQuCisuSVAgMzkKK0xEQVAgc2VhcmNoIGZhaWxlZC4KKy5JUCA0MQorRnVuY3Rpb24gbm90IGZvdW5kLiBBIHJlcXVpcmVkIExEQVAgZnVuY3Rpb24gd2FzIG5vdCBmb3VuZC4KKy5JUCA0MgorQWJvcnRlZCBieSBjYWxsYmFjay4gQW4gYXBwbGljYXRpb24gdG9sZCBjdXJsIHRvIGFib3J0IHRoZSBvcGVyYXRpb24uCisuSVAgNDMKK0ludGVybmFsIGVycm9yLiBBIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aCBhIGJhZCBwYXJhbWV0ZXIuCisuSVAgNDUKK0ludGVyZmFjZSBlcnJvci4gQSBzcGVjaWZpZWQgb3V0Z29pbmcgaW50ZXJmYWNlIGNvdWxkIG5vdCBiZSB1c2VkLgorLklQIDQ3CitUb28gbWFueSByZWRpcmVjdHMuIFdoZW4gZm9sbG93aW5nIHJlZGlyZWN0cywgY3VybCBoaXQgdGhlIG1heGltdW0gYW1vdW50LgorLklQIDQ4CitVbmtub3duIG9wdGlvbiBzcGVjaWZpZWQgdG8gbGliY3VybC4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB5b3UgcGFzc2VkIGEgd2VpcmQKK29wdGlvbiB0byBjdXJsIHRoYXQgd2FzIHBhc3NlZCBvbiB0byBsaWJjdXJsIGFuZCByZWplY3RlZC4gUmVhZCB1cCBpbiB0aGUKK21hbnVhbCEKKy5JUCA0OQorTWFsZm9ybWVkIHRlbG5ldCBvcHRpb24uCisuSVAgNTEKK1RoZSBwZWVyJ3MgU1NMIGNlcnRpZmljYXRlIG9yIFNTSCBNRDUgZmluZ2VycHJpbnQgd2FzIG5vdCBPSy4KKy5JUCA1MgorVGhlIHNlcnZlciBkaWRuJ3QgcmVwbHkgYW55dGhpbmcsIHdoaWNoIGhlcmUgaXMgY29uc2lkZXJlZCBhbiBlcnJvci4KKy5JUCA1MworU1NMIGNyeXB0byBlbmdpbmUgbm90IGZvdW5kLgorLklQIDU0CitDYW5ub3Qgc2V0IFNTTCBjcnlwdG8gZW5naW5lIGFzIGRlZmF1bHQuCisuSVAgNTUKK0ZhaWxlZCBzZW5kaW5nIG5ldHdvcmsgZGF0YS4KKy5JUCA1NgorRmFpbHVyZSBpbiByZWNlaXZpbmcgbmV0d29yayBkYXRhLgorLklQIDU4CitQcm9ibGVtIHdpdGggdGhlIGxvY2FsIGNlcnRpZmljYXRlLgorLklQIDU5CitDb3VsZG4ndCB1c2Ugc3BlY2lmaWVkIFNTTCBjaXBoZXIuCisuSVAgNjAKK1BlZXIgY2VydGlmaWNhdGUgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCBrbm93biBDQSBjZXJ0aWZpY2F0ZXMuCisuSVAgNjEKK1VucmVjb2duaXplZCB0cmFuc2ZlciBlbmNvZGluZy4KKy5JUCA2MgorSW52YWxpZCBMREFQIFVSTC4KKy5JUCA2MworTWF4aW11bSBmaWxlIHNpemUgZXhjZWVkZWQuCisuSVAgNjQKK1JlcXVlc3RlZCBGVFAgU1NMIGxldmVsIGZhaWxlZC4KKy5JUCA2NQorU2VuZGluZyB0aGUgZGF0YSByZXF1aXJlcyBhIHJld2luZCB0aGF0IGZhaWxlZC4KKy5JUCA2NgorRmFpbGVkIHRvIGluaXRpYWxpc2UgU1NMIEVuZ2luZS4KKy5JUCA2NworVGhlIHVzZXIgbmFtZSwgcGFzc3dvcmQsIG9yIHNpbWlsYXIgd2FzIG5vdCBhY2NlcHRlZCBhbmQgY3VybCBmYWlsZWQgdG8gbG9nIGluLgorLklQIDY4CitGaWxlIG5vdCBmb3VuZCBvbiBURlRQIHNlcnZlci4KKy5JUCA2OQorUGVybWlzc2lvbiBwcm9ibGVtIG9uIFRGVFAgc2VydmVyLgorLklQIDcwCitPdXQgb2YgZGlzayBzcGFjZSBvbiBURlRQIHNlcnZlci4KKy5JUCA3MQorSWxsZWdhbCBURlRQIG9wZXJhdGlvbi4KKy5JUCA3MgorVW5rbm93biBURlRQIHRyYW5zZmVyIElELgorLklQIDczCitGaWxlIGFscmVhZHkgZXhpc3RzIChURlRQKS4KKy5JUCA3NAorTm8gc3VjaCB1c2VyIChURlRQKS4KKy5JUCA3NQorQ2hhcmFjdGVyIGNvbnZlcnNpb24gZmFpbGVkLgorLklQIDc2CitDaGFyYWN0ZXIgY29udmVyc2lvbiBmdW5jdGlvbnMgcmVxdWlyZWQuCisuSVAgNzcKK1Byb2JsZW0gd2l0aCByZWFkaW5nIHRoZSBTU0wgQ0EgY2VydCAocGF0aD8gYWNjZXNzIHJpZ2h0cz8pLgorLklQIDc4CitUaGUgcmVzb3VyY2UgcmVmZXJlbmNlZCBpbiB0aGUgVVJMIGRvZXMgbm90IGV4aXN0LgorLklQIDc5CitBbiB1bnNwZWNpZmllZCBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIFNTSCBzZXNzaW9uLgorLklQIDgwCitGYWlsZWQgdG8gc2h1dCBkb3duIHRoZSBTU0wgY29ubmVjdGlvbi4KKy5JUCA4MgorQ291bGQgbm90IGxvYWQgQ1JMIGZpbGUsIG1pc3Npbmcgb3Igd3JvbmcgZm9ybWF0IChhZGRlZCBpbiA3LjE5LjApLgorLklQIDgzCitJc3N1ZXIgY2hlY2sgZmFpbGVkIChhZGRlZCBpbiA3LjE5LjApLgorLklQIDg0CitUaGUgRlRQIFBSRVQgY29tbWFuZCBmYWlsZWQKKy5JUCA4NQorUlRTUDogbWlzbWF0Y2ggb2YgQ1NlcSBudW1iZXJzCisuSVAgODYKK1JUU1A6IG1pc21hdGNoIG9mIFNlc3Npb24gSWRlbnRpZmllcnMKKy5JUCA4NwordW5hYmxlIHRvIHBhcnNlIEZUUCBmaWxlIGxpc3QKKy5JUCA4OAorRlRQIGNodW5rIGNhbGxiYWNrIHJlcG9ydGVkIGVycm9yCisuSVAgWFgKK01vcmUgZXJyb3IgY29kZXMgd2lsbCBhcHBlYXIgaGVyZSBpbiBmdXR1cmUgcmVsZWFzZXMuIFRoZSBleGlzdGluZyBvbmVzCithcmUgbWVhbnQgdG8gbmV2ZXIgY2hhbmdlLgorLlNIIEFVVEhPUlMgLyBDT05UUklCVVRPUlMKK0RhbmllbCBTdGVuYmVyZyBpcyB0aGUgbWFpbiBhdXRob3IsIGJ1dCB0aGUgd2hvbGUgbGlzdCBvZiBjb250cmlidXRvcnMgaXMKK2ZvdW5kIGluIHRoZSBzZXBhcmF0ZSBUSEFOS1MgZmlsZS4KKy5TSCBXV1cKK2h0dHA6Ly9jdXJsLmhheHguc2UKKy5TSCBGVFAKK2Z0cDovL2Z0cC5zdW5ldC5zZS9wdWIvd3d3L3V0aWxpdGllcy9jdXJsLworLlNIICJTRUUgQUxTTyIKKy5CUiBmdHAgKDEpLAorLkJSIHdnZXQgKDEpCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2N1cmwuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvY3VybC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExN2EyZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2N1cmwuaHRtbApAQCAtMCwwICsxLDg5NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmwgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybCAtIHRyYW5zZmVyIGEgVVJMIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Y3VybCBbb3B0aW9uc108L3NwYW4+IDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI1VSTCI+W1VSTC4uLl08L2E+IDxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Y3VybDwvc3Bhbj4gaXMgYSB0b29sIHRvIHRyYW5zZmVyIGRhdGEgZnJvbSBvciB0byBhIHNlcnZlciwgdXNpbmcgb25lIG9mIHRoZSBzdXBwb3J0ZWQgcHJvdG9jb2xzIChESUNULCBGSUxFLCBGVFAsIEZUUFMsIEdPUEhFUiwgSFRUUCwgSFRUUFMsIElNQVAsIElNQVBTLCBMREFQLCBMREFQUywgUE9QMywgUE9QM1MsIFJUTVAsIFJUU1AsIFNDUCwgU0ZUUCwgU01UUCwgU01UUFMsIFRFTE5FVCBhbmQgVEZUUCkuICBUaGUgY29tbWFuZCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsIG9mZmVycyBhIGJ1c2xvYWQgb2YgdXNlZnVsIHRyaWNrcyBsaWtlIHByb3h5IHN1cHBvcnQsIHVzZXIgYXV0aGVudGljYXRpb24sIEZUUCB1cGxvYWQsIEhUVFAgcG9zdCwgU1NMIGNvbm5lY3Rpb25zLCBjb29raWVzLCBmaWxlIHRyYW5zZmVyIHJlc3VtZSBhbmQgbW9yZS4gQXMgeW91IHdpbGwgc2VlIGJlbG93LCB0aGUgbnVtYmVyIG9mIGZlYXR1cmVzIHdpbGwgbWFrZSB5b3VyIGhlYWQgc3BpbiEgCis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsIGlzIHBvd2VyZWQgYnkgbGliY3VybCBmb3IgYWxsIHRyYW5zZmVyLXJlbGF0ZWQgZmVhdHVyZXMuIFNlZSA8c3BhbiBDbGFzcz0ibWFucGFnZSI+bGliY3VybCAoMyk8L3NwYW4+IGZvciBkZXRhaWxzLiA8YSBuYW1lPSJVUkwiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlVSTDwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgVVJMIHN5bnRheCBpcyBwcm90b2NvbC1kZXBlbmRlbnQuIFlvdSdsbCBmaW5kIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gaW4gPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzk4Ni50eHQiPlJGQyAzOTg2PC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgY2FuIHNwZWNpZnkgbXVsdGlwbGUgVVJMcyBvciBwYXJ0cyBvZiBVUkxzIGJ5IHdyaXRpbmcgcGFydCBzZXRzIHdpdGhpbiBicmFjZXMgYXMgaW46IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3NpdGUiPmh0dHA6Ly9zaXRlPC9hPi57b25lLHR3byx0aHJlZX0uY29tIAorPHAgY2xhc3M9ImxldmVsMCI+b3IgeW91IGNhbiBnZXQgc2VxdWVuY2VzIG9mIGFscGhhbnVtZXJpYyBzZXJpZXMgYnkgdXNpbmcgW10gYXMgaW46IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7PGEgaHJlZj0iZnRwOi8vZnRwLm51bWVyaWNhbHMuY29tL2ZpbGUiPmZ0cDovL2Z0cC5udW1lcmljYWxzLmNvbS9maWxlPC9hPlsxLTEwMF0udHh0ICZuYnNwOzxhIGhyZWY9ImZ0cDovL2Z0cC5udW1lcmljYWxzLmNvbS9maWxlIj5mdHA6Ly9mdHAubnVtZXJpY2Fscy5jb20vZmlsZTwvYT5bMDAxLTEwMF0udHh0ICAgICh3aXRoIGxlYWRpbmcgemVyb3MpICZuYnNwOzxhIGhyZWY9ImZ0cDovL2Z0cC5sZXR0ZXJzLmNvbS9maWxlIj5mdHA6Ly9mdHAubGV0dGVycy5jb20vZmlsZTwvYT5bYS16XS50eHQgCis8cCBjbGFzcz0ibGV2ZWwwIj5OZXN0ZWQgc2VxdWVuY2VzIGFyZSBub3Qgc3VwcG9ydGVkLCBidXQgeW91IGNhbiB1c2Ugc2V2ZXJhbCBvbmVzIG5leHQgdG8gZWFjaCBvdGhlcjogCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDs8YSBocmVmPSJodHRwOi8vYW55Lm9yZy9hcmNoaXZlIj5odHRwOi8vYW55Lm9yZy9hcmNoaXZlPC9hPlsxOTk2LTE5OTldL3ZvbFsxLTRdL3BhcnR7YSxiLGN9Lmh0bWwgCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgY2FuIHNwZWNpZnkgYW55IGFtb3VudCBvZiBVUkxzIG9uIHRoZSBjb21tYW5kIGxpbmUuIFRoZXkgd2lsbCBiZSBmZXRjaGVkIGluIGEgc2VxdWVudGlhbCBtYW5uZXIgaW4gdGhlIHNwZWNpZmllZCBvcmRlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgY2FuIHNwZWNpZnkgYSBzdGVwIGNvdW50ZXIgZm9yIHRoZSByYW5nZXMgdG8gZ2V0IGV2ZXJ5IE50aCBudW1iZXIgb3IgbGV0dGVyOiAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cubnVtZXJpY2Fscy5jb20vZmlsZSI+aHR0cDovL3d3dy5udW1lcmljYWxzLmNvbS9maWxlPC9hPlsxLTEwMDoxMF0udHh0ICZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cubGV0dGVycy5jb20vZmlsZSI+aHR0cDovL3d3dy5sZXR0ZXJzLmNvbS9maWxlPC9hPlthLXo6Ml0udHh0IAorPHAgY2xhc3M9ImxldmVsMCI+SWYgeW91IHNwZWNpZnkgVVJMIHdpdGhvdXQgcHJvdG9jb2w6Ly8gcHJlZml4LCBjdXJsIHdpbGwgYXR0ZW1wdCB0byBndWVzcyB3aGF0IHByb3RvY29sIHlvdSBtaWdodCB3YW50LiBJdCB3aWxsIHRoZW4gZGVmYXVsdCB0byBIVFRQIGJ1dCB0cnkgb3RoZXIgcHJvdG9jb2xzIGJhc2VkIG9uIG9mdGVuLXVzZWQgaG9zdCBuYW1lIHByZWZpeGVzLiBGb3IgZXhhbXBsZSwgZm9yIGhvc3QgbmFtZXMgc3RhcnRpbmcgd2l0aCAiZnRwLiIgY3VybCB3aWxsIGFzc3VtZSB5b3Ugd2FudCB0byBzcGVhayBGVFAuIAorPHAgY2xhc3M9ImxldmVsMCI+Y3VybCB3aWxsIGRvIGl0cyBiZXN0IHRvIHVzZSB3aGF0IHlvdSBwYXNzIHRvIGl0IGFzIGEgVVJMLiBJdCBpcyBub3QgdHJ5aW5nIHRvIHZhbGlkYXRlIGl0IGFzIGEgc3ludGFjdGljYWxseSBjb3JyZWN0IFVSTCBieSBhbnkgbWVhbnMgYnV0IGlzIGluc3RlYWQgPHNwYW4gQ2xhc3M9ImJvbGQiPnZlcnk8L3NwYW4+IGxpYmVyYWwgd2l0aCB3aGF0IGl0IGFjY2VwdHMuIAorPHAgY2xhc3M9ImxldmVsMCI+Q3VybCB3aWxsIGF0dGVtcHQgdG8gcmUtdXNlIGNvbm5lY3Rpb25zIGZvciBtdWx0aXBsZSBmaWxlIHRyYW5zZmVycywgc28gdGhhdCBnZXR0aW5nIG1hbnkgZmlsZXMgZnJvbSB0aGUgc2FtZSBzZXJ2ZXIgd2lsbCBub3QgZG8gbXVsdGlwbGUgY29ubmVjdHMgLyBoYW5kc2hha2VzLiBUaGlzIGltcHJvdmVzIHNwZWVkLiBPZiBjb3Vyc2UgdGhpcyBpcyBvbmx5IGRvbmUgb24gZmlsZXMgc3BlY2lmaWVkIG9uIGEgc2luZ2xlIGNvbW1hbmQgbGluZSBhbmQgY2Fubm90IGJlIHVzZWQgYmV0d2VlbiBzZXBhcmF0ZSBjdXJsIGludm9rZXMuIDxhIG5hbWU9IlBST0dSRVNTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5QUk9HUkVTUyBNRVRFUjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsIG5vcm1hbGx5IGRpc3BsYXlzIGEgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9wZXJhdGlvbnMsIGluZGljYXRpbmcgdGhlIGFtb3VudCBvZiB0cmFuc2ZlcnJlZCBkYXRhLCB0cmFuc2ZlciBzcGVlZHMgYW5kIGVzdGltYXRlZCB0aW1lIGxlZnQsIGV0Yy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsIGRpc3BsYXlzIHRoaXMgZGF0YSB0byB0aGUgdGVybWluYWwgYnkgZGVmYXVsdCwgc28gaWYgeW91IGludm9rZSBjdXJsIHRvIGRvIGFuIG9wZXJhdGlvbiBhbmQgaXQgaXMgYWJvdXQgdG8gd3JpdGUgZGF0YSB0byB0aGUgdGVybWluYWwsIGl0IDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+ZGlzYWJsZXM8L3NwYW4+IHRoZSBwcm9ncmVzcyBtZXRlciBhcyBvdGhlcndpc2UgaXQgd291bGQgbWVzcyB1cCB0aGUgb3V0cHV0IG1peGluZyBwcm9ncmVzcyBtZXRlciBhbmQgcmVzcG9uc2UgZGF0YS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5JZiB5b3Ugd2FudCBhIHByb2dyZXNzIG1ldGVyIGZvciBIVFRQIFBPU1Qgb3IgUFVUIHJlcXVlc3RzLCB5b3UgbmVlZCB0byByZWRpcmVjdCB0aGUgcmVzcG9uc2Ugb3V0cHV0IHRvIGEgZmlsZSwgdXNpbmcgc2hlbGwgcmVkaXJlY3QgKCZndDspLCAtbyBbZmlsZV0gb3Igc2ltaWxhci4gCis8cCBjbGFzcz0ibGV2ZWwwIj5JdCBpcyBub3QgdGhlIHNhbWUgY2FzZSBmb3IgRlRQIHVwbG9hZCBhcyB0aGF0IG9wZXJhdGlvbiBkb2VzIG5vdCBzcGl0IG91dCBhbnkgcmVzcG9uc2UgZGF0YSB0byB0aGUgdGVybWluYWwuIAorPHAgY2xhc3M9ImxldmVsMCI+SWYgeW91IHByZWZlciBhIHByb2dyZXNzICJiYXIiIGluc3RlYWQgb2YgdGhlIHJlZ3VsYXIgbWV0ZXIsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0iPi0jPC9hPiBpcyB5b3VyIGZyaWVuZC4gPGEgbmFtZT0iT1BUSU9OUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+T1BUSU9OUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5JbiBnZW5lcmFsLCBhbGwgYm9vbGVhbiBvcHRpb25zIGFyZSBlbmFibGVkIHdpdGggLS1vcHRpb24gYW5kIHlldCBhZ2FpbiBkaXNhYmxlZCB3aXRoIC0tPHNwYW4gQ2xhc3M9ImJvbGQiPm5vLTwvc3Bhbj5vcHRpb24uIFRoYXQgaXMsIHlvdSB1c2UgdGhlIGV4YWN0IHNhbWUgb3B0aW9uIG5hbWUgYnV0IHByZWZpeCBpdCB3aXRoICJuby0iLiBIb3dldmVyLCBpbiB0aGlzIGxpc3Qgd2UgbW9zdGx5IG9ubHkgbGlzdCBhbmQgc2hvdyB0aGUgLS1vcHRpb24gdmVyc2lvbiBvZiB0aGVtLiAoVGhpcyBjb25jZXB0IHdpdGggLS1ubyBvcHRpb25zIHdhcyBhZGRlZCBpbiA3LjE5LjAuIFByZXZpb3VzbHkgbW9zdCBvcHRpb25zIHdlcmUgdG9nZ2xlZCBvbi9vZmYgb24gcmVwZWF0ZWQgdXNlIG9mIHRoZSBzYW1lIGNvbW1hbmQgbGluZSBvcHRpb24uKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LSMsIC0tcHJvZ3Jlc3MtYmFyPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk1ha2UgY3VybCBkaXNwbGF5IHByb2dyZXNzIGFzIGEgc2ltcGxlIHByb2dyZXNzIGJhciBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCwgbW9yZSBpbmZvcm1hdGlvbmFsLCBtZXRlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItMCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tMCwgLS1odHRwMS4wPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBGb3JjZXMgY3VybCB0byBpc3N1ZSBpdHMgcmVxdWVzdHMgdXNpbmcgSFRUUCAxLjAgaW5zdGVhZCBvZiB1c2luZyBpdHMgaW50ZXJuYWxseSBwcmVmZXJyZWQ6IEhUVFAgMS4xLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0xIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0xLCAtLXRsc3YxPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihTU0wpIEZvcmNlcyBjdXJsIHRvIHVzZSBUTFMgdmVyc2lvbiAxIHdoZW4gbmVnb3RpYXRpbmcgd2l0aCBhIHJlbW90ZSBUTFMgc2VydmVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0yIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0yLCAtLXNzbHYyPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihTU0wpIEZvcmNlcyBjdXJsIHRvIHVzZSBTU0wgdmVyc2lvbiAyIHdoZW4gbmVnb3RpYXRpbmcgd2l0aCBhIHJlbW90ZSBTU0wgc2VydmVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0zIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0zLCAtLXNzbHYzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihTU0wpIEZvcmNlcyBjdXJsIHRvIHVzZSBTU0wgdmVyc2lvbiAzIHdoZW4gbmVnb3RpYXRpbmcgd2l0aCBhIHJlbW90ZSBTU0wgc2VydmVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii00Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi00LCAtLWlwdjQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+SWYgbGliY3VybCBpcyBjYXBhYmxlIG9mIHJlc29sdmluZyBhbiBhZGRyZXNzIHRvIG11bHRpcGxlIElQIHZlcnNpb25zICh3aGljaCBpdCBpcyBpZiBpdCBpcyBJUHY2LWNhcGFibGUpLCB0aGlzIG9wdGlvbiB0ZWxscyBsaWJjdXJsIHRvIHJlc29sdmUgbmFtZXMgdG8gSVB2NCBhZGRyZXNzZXMgb25seS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItNiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tNiwgLS1pcHY2PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIGxpYmN1cmwgaXMgY2FwYWJsZSBvZiByZXNvbHZpbmcgYW4gYWRkcmVzcyB0byBtdWx0aXBsZSBJUCB2ZXJzaW9ucyAod2hpY2ggaXQgaXMgaWYgaXQgaXMgSVB2Ni1jYXBhYmxlKSwgdGhpcyBvcHRpb24gdGVsbHMgbGliY3VybCB0byByZXNvbHZlIG5hbWVzIHRvIElQdjYgYWRkcmVzc2VzIG9ubHkuIGRlZmF1bHQgc3RhdGlzdGljcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItYSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tYSwgLS1hcHBlbmQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEZUUC9TRlRQKSBXaGVuIHVzZWQgaW4gYW4gdXBsb2FkLCB0aGlzIHdpbGwgdGVsbCBjdXJsIHRvIGFwcGVuZCB0byB0aGUgdGFyZ2V0IGZpbGUgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyBpdC4gSWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLiBOb3RlIHRoYXQgdGhpcyBmbGFnIGlzIGlnbm9yZWQgYnkgc29tZSBTU0ggc2VydmVycyAoaW5jbHVkaW5nIE9wZW5TU0gpLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1BIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1BLCAtLXVzZXItYWdlbnQgJmx0O2FnZW50IHN0cmluZyZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEhUVFApIFNwZWNpZnkgdGhlIFVzZXItQWdlbnQgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIEhUVFAgc2VydmVyLiBTb21lIGJhZGx5IGRvbmUgQ0dJcyBmYWlsIGlmIHRoaXMgZmllbGQgaXNuJ3Qgc2V0IHRvICJNb3ppbGxhLzQuMCIuIFRvIGVuY29kZSBibGFua3MgaW4gdGhlIHN0cmluZywgc3Vycm91bmQgdGhlIHN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZSBtYXJrcy4gVGhpcyBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLUgiPi1ILCAtLWhlYWRlcjwvYT4gb3B0aW9uIG9mIGNvdXJzZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB0aGlzIG9wdGlvbiBpcyBzZXQgbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHRoZSBvbmUgdGhhdCdzIHVzZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1hbnlhdXRoIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tYW55YXV0aDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oSFRUUCkgVGVsbHMgY3VybCB0byBmaWd1cmUgb3V0IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBieSBpdHNlbGYsIGFuZCB1c2UgdGhlIG1vc3Qgc2VjdXJlIG9uZSB0aGUgcmVtb3RlIHNpdGUgY2xhaW1zIHRvIHN1cHBvcnQuIFRoaXMgaXMgZG9uZSBieSBmaXJzdCBkb2luZyBhIHJlcXVlc3QgYW5kIGNoZWNraW5nIHRoZSByZXNwb25zZS1oZWFkZXJzLCB0aHVzIHBvc3NpYmx5IGluZHVjaW5nIGFuIGV4dHJhIG5ldHdvcmsgcm91bmQtdHJpcC4gVGhpcyBpcyB1c2VkIGluc3RlYWQgb2Ygc2V0dGluZyBhIHNwZWNpZmljIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCwgd2hpY2ggeW91IGNhbiBkbyB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tYmFzaWMiPi0tYmFzaWM8L2E+LCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWRpZ2VzdCI+LS1kaWdlc3Q8L2E+LCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLW50bG0iPi0tbnRsbTwvYT4sIGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLW5lZ290aWF0ZSI+LS1uZWdvdGlhdGU8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDEiPk5vdGUgdGhhdCB1c2luZyAtLWFueWF1dGggaXMgbm90IHJlY29tbWVuZGVkIGlmIHlvdSBkbyB1cGxvYWRzIGZyb20gc3RkaW4sIHNpbmNlIGl0IG1heSByZXF1aXJlIGRhdGEgdG8gYmUgc2VudCB0d2ljZSBhbmQgdGhlbiB0aGUgY2xpZW50IG11c3QgYmUgYWJsZSB0byByZXdpbmQuIElmIHRoZSBuZWVkIHNob3VsZCBhcmlzZSB3aGVuIHVwbG9hZGluZyBmcm9tIHN0ZGluLCB0aGUgdXBsb2FkIG9wZXJhdGlvbiB3aWxsIGZhaWwuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLWIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LWIsIC0tY29va2llICZsdDtuYW1lPWRhdGEmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBQYXNzIHRoZSBkYXRhIHRvIHRoZSBIVFRQIHNlcnZlciBhcyBhIGNvb2tpZS4gSXQgaXMgc3VwcG9zZWRseSB0aGUgZGF0YSBwcmV2aW91c2x5IHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBpbiBhICJTZXQtQ29va2llOiIgbGluZS4gVGhlIGRhdGEgc2hvdWxkIGJlIGluIHRoZSBmb3JtYXQgIk5BTUUxPVZBTFVFMTsgTkFNRTI9VkFMVUUyIi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiBubyAnPScgc3ltYm9sIGlzIHVzZWQgaW4gdGhlIGxpbmUsIGl0IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZSB0byB1c2UgdG8gcmVhZCBwcmV2aW91c2x5IHN0b3JlZCBjb29raWUgbGluZXMgZnJvbSwgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW4gdGhpcyBzZXNzaW9uIGlmIHRoZXkgbWF0Y2guIFVzaW5nIHRoaXMgbWV0aG9kIGFsc28gYWN0aXZhdGVzIHRoZSAiY29va2llIHBhcnNlciIgd2hpY2ggd2lsbCBtYWtlIGN1cmwgcmVjb3JkIGluY29taW5nIGNvb2tpZXMgdG9vLCB3aGljaCBtYXkgYmUgaGFuZHkgaWYgeW91J3JlIHVzaW5nIHRoaXMgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLUwiPi1MLCAtLWxvY2F0aW9uPC9hPiBvcHRpb24uIFRoZSBmaWxlIGZvcm1hdCBvZiB0aGUgZmlsZSB0byByZWFkIGNvb2tpZXMgZnJvbSBzaG91bGQgYmUgcGxhaW4gSFRUUCBoZWFkZXJzIG9yIHRoZSBOZXRzY2FwZS9Nb3ppbGxhIGNvb2tpZSBmaWxlIGZvcm1hdC4gCis8cCBjbGFzcz0ibGV2ZWwxIj48c3BhbiBDbGFzcz0iYm9sZCI+Tk9URTwvc3Bhbj4gdGhhdCB0aGUgZmlsZSBzcGVjaWZpZWQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtYiI+LWIsIC0tY29va2llPC9hPiBpcyBvbmx5IHVzZWQgYXMgaW5wdXQuIE5vIGNvb2tpZXMgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGZpbGUuIFRvIHN0b3JlIGNvb2tpZXMsIHVzZSB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLWMiPi1jLCAtLWNvb2tpZS1qYXI8L2E+IG9wdGlvbiBvciB5b3UgY291bGQgZXZlbiBzYXZlIHRoZSBIVFRQIGhlYWRlcnMgdG8gYSBmaWxlIHVzaW5nIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1EIj4tRCwgLS1kdW1wLWhlYWRlcjwvYT4hIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgc2V0IG1vcmUgdGhhbiBvbmNlLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB0aGUgb25lIHRoYXQncyB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1CIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1CLCAtLXVzZS1hc2NpaTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5FbmFibGUgQVNDSUkgdHJhbnNmZXIgd2hlbiB1c2luZyBGVFAgb3IgTERBUC4gRm9yIEZUUCwgdGhpcyBjYW4gYWxzbyBiZSBlbmZvcmNlZCBieSB1c2luZyBhbiBVUkwgdGhhdCBlbmRzIHdpdGggIjt0eXBlPUEiLiBUaGlzIG9wdGlvbiBjYXVzZXMgZGF0YSBzZW50IHRvIHN0ZG91dCB0byBiZSBpbiB0ZXh0IG1vZGUgZm9yIHdpbjMyIHN5c3RlbXMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1iYXNpYyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLWJhc2ljPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBUZWxscyBjdXJsIHRvIHVzZSBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGFuZCB0aGlzIG9wdGlvbiBpcyB1c3VhbGx5IHBvaW50bGVzcywgdW5sZXNzIHlvdSB1c2UgaXQgdG8gb3ZlcnJpZGUgYSBwcmV2aW91c2x5IHNldCBvcHRpb24gdGhhdCBzZXRzIGEgZGlmZmVyZW50IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAoc3VjaCBhcyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLW50bG0iPi0tbnRsbTwvYT4sIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tZGlnZXN0Ij4tLWRpZ2VzdDwvYT4sIG9yIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tbmVnb3RpYXRlIj4tLW5lZ290aWF0ZTwvYT4pLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1jIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1jLCAtLWNvb2tpZS1qYXIgJmx0O2ZpbGUgbmFtZSZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U3BlY2lmeSB0byB3aGljaCBmaWxlIHlvdSB3YW50IGN1cmwgdG8gd3JpdGUgYWxsIGNvb2tpZXMgYWZ0ZXIgYSBjb21wbGV0ZWQgb3BlcmF0aW9uLiBDdXJsIHdyaXRlcyBhbGwgY29va2llcyBwcmV2aW91c2x5IHJlYWQgZnJvbSBhIHNwZWNpZmllZCBmaWxlIGFzIHdlbGwgYXMgYWxsIGNvb2tpZXMgcmVjZWl2ZWQgZnJvbSByZW1vdGUgc2VydmVyKHMpLiBJZiBubyBjb29raWVzIGFyZSBrbm93biwgbm8gZmlsZSB3aWxsIGJlIHdyaXR0ZW4uIFRoZSBmaWxlIHdpbGwgYmUgd3JpdHRlbiB1c2luZyB0aGUgTmV0c2NhcGUgY29va2llIGZpbGUgZm9ybWF0LiBJZiB5b3Ugc2V0IHRoZSBmaWxlIG5hbWUgdG8gYSBzaW5nbGUgZGFzaCwgIi0iLCB0aGUgY29va2llcyB3aWxsIGJlIHdyaXR0ZW4gdG8gc3Rkb3V0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgY29tbWFuZCBsaW5lIG9wdGlvbiB3aWxsIGFjdGl2YXRlIHRoZSBjb29raWUgZW5naW5lIHRoYXQgbWFrZXMgY3VybCByZWNvcmQgYW5kIHVzZSBjb29raWVzLiBBbm90aGVyIHdheSB0byBhY3RpdmF0ZSBpdCBpcyB0byB1c2UgdGhlIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+LWIsIC0tY29va2llPC9zcGFuPiBvcHRpb24uIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhlIGNvb2tpZSBqYXIgY2FuJ3QgYmUgY3JlYXRlZCBvciB3cml0dGVuIHRvLCB0aGUgd2hvbGUgY3VybCBvcGVyYXRpb24gd29uJ3QgZmFpbCBvciBldmVuIHJlcG9ydCBhbiBlcnJvciBjbGVhcmx5LiBVc2luZyAtdiB3aWxsIGdldCBhIHdhcm5pbmcgZGlzcGxheWVkLCBidXQgdGhhdCBpcyB0aGUgb25seSB2aXNpYmxlIGZlZWRiYWNrIHlvdSBnZXQgYWJvdXQgdGhpcyBwb3NzaWJseSBsZXRoYWwgc2l0dWF0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgc3BlY2lmaWVkIGZpbGUgbmFtZSB3aWxsIGJlIHVzZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLUMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LUMsIC0tY29udGludWUtYXQgJmx0O29mZnNldCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Q29udGludWUvUmVzdW1lIGEgcHJldmlvdXMgZmlsZSB0cmFuc2ZlciBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LiBUaGUgZ2l2ZW4gb2Zmc2V0IGlzIHRoZSBleGFjdCBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3aWxsIGJlIHNraXBwZWQsIGNvdW50aW5nIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc291cmNlIGZpbGUgYmVmb3JlIGl0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSBkZXN0aW5hdGlvbi4gIElmIHVzZWQgd2l0aCB1cGxvYWRzLCB0aGUgRlRQIHNlcnZlciBjb21tYW5kIFNJWkUgd2lsbCBub3QgYmUgdXNlZCBieSBjdXJsLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlVzZSAiLUMgLSIgdG8gdGVsbCBjdXJsIHRvIGF1dG9tYXRpY2FsbHkgZmluZCBvdXQgd2hlcmUvaG93IHRvIHJlc3VtZSB0aGUgdHJhbnNmZXIuIEl0IHRoZW4gdXNlcyB0aGUgZ2l2ZW4gb3V0cHV0L2lucHV0IGZpbGVzIHRvIGZpZ3VyZSB0aGF0IG91dC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1jaXBoZXJzIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tY2lwaGVycyAmbHQ7bGlzdCBvZiBjaXBoZXJzJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oU1NMKSBTcGVjaWZpZXMgd2hpY2ggY2lwaGVycyB0byB1c2UgaW4gdGhlIGNvbm5lY3Rpb24uIFRoZSBsaXN0IG9mIGNpcGhlcnMgbXVzdCBzcGVjaWZ5IHZhbGlkIGNpcGhlcnMuIFJlYWQgdXAgb24gU1NMIGNpcGhlciBsaXN0IGRldGFpbHMgb24gdGhpcyBVUkw6IDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2FwcHMvY2lwaGVycy5odG1sIj5odHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvYXBwcy9jaXBoZXJzLmh0bWw8L2E+PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk5TUyBjaXBoZXJzIGFyZSBkb25lIGRpZmZlcmVudGx5IHRoYW4gT3BlblNTTCBhbmQgR251VExTLiBUaGUgZnVsbCBsaXN0IG9mIE5TUyBjaXBoZXJzIGlzIGluIHRoZSBOU1NDaXBoZXJTdWl0ZSBlbnRyeSBhdCB0aGlzIFVSTDogPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj48YSBocmVmPSJodHRwOi8vZGlyZWN0b3J5LmZlZG9yYS5yZWRoYXQuY29tL2RvY3MvbW9kX25zcy5odG1sIj5odHRwOi8vZGlyZWN0b3J5LmZlZG9yYS5yZWRoYXQuY29tL2RvY3MvbW9kX25zcy5odG1sPC9hPiNEaXJlY3RpdmVzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgb3ZlcnJpZGUgdGhlIG90aGVycy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWNvbXByZXNzZWQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1jb21wcmVzc2VkPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBSZXF1ZXN0IGEgY29tcHJlc3NlZCByZXNwb25zZSB1c2luZyBvbmUgb2YgdGhlIGFsZ29yaXRobXMgbGliY3VybCBzdXBwb3J0cywgYW5kIHNhdmUgdGhlIHVuY29tcHJlc3NlZCBkb2N1bWVudC4gIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgYW5kIHRoZSBzZXJ2ZXIgc2VuZHMgYW4gdW5zdXBwb3J0ZWQgZW5jb2RpbmcsIGN1cmwgd2lsbCByZXBvcnQgYW4gZXJyb3IuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1jb25uZWN0LXRpbWVvdXQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1jb25uZWN0LXRpbWVvdXQgJmx0O3NlY29uZHMmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk1heGltdW0gdGltZSBpbiBzZWNvbmRzIHRoYXQgeW91IGFsbG93IHRoZSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIgdG8gdGFrZS4gVGhpcyBvbmx5IGxpbWl0cyB0aGUgY29ubmVjdGlvbiBwaGFzZSwgb25jZSBjdXJsIGhhcyBjb25uZWN0ZWQgdGhpcyBvcHRpb24gaXMgb2Ygbm8gbW9yZSB1c2UuIFNlZSBhbHNvIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtbSI+LW0sIC0tbWF4LXRpbWU8L2E+IG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1jcmVhdGUtZGlycyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLWNyZWF0ZS1kaXJzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSAtbyBvcHRpb24sIGN1cmwgd2lsbCBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBsb2NhbCBkaXJlY3RvcnkgaGllcmFyY2h5IGFzIG5lZWRlZC4gVGhpcyBvcHRpb24gY3JlYXRlcyB0aGUgZGlycyBtZW50aW9uZWQgd2l0aCB0aGUgLW8gb3B0aW9uLCBub3RoaW5nIGVsc2UuIElmIHRoZSAtbyBmaWxlIG5hbWUgdXNlcyBubyBkaXIgb3IgaWYgdGhlIGRpcnMgaXQgbWVudGlvbnMgYWxyZWFkeSBleGlzdCwgbm8gZGlyIHdpbGwgYmUgY3JlYXRlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UbyBjcmVhdGUgcmVtb3RlIGRpcmVjdG9yaWVzIHdoZW4gdXNpbmcgRlRQIG9yIFNGVFAsIHRyeSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWZ0cC1jcmVhdGUtZGlycyI+LS1mdHAtY3JlYXRlLWRpcnM8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tY3JsZiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLWNybGY8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEZUUCkgQ29udmVydCBMRiB0byBDUkxGIGluIHVwbG9hZC4gVXNlZnVsIGZvciBNVlMgKE9TLzM5MCkuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1jcmxmaWxlIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tY3JsZmlsZSAmbHQ7ZmlsZSZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEhUVFBTL0ZUUFMpIFByb3ZpZGUgYSBmaWxlIHVzaW5nIFBFTSBmb3JtYXQgd2l0aCBhIENlcnRpZmljYXRlIFJldm9jYXRpb24gTGlzdCB0aGF0IG1heSBzcGVjaWZ5IHBlZXIgY2VydGlmaWNhdGVzIHRoYXQgYXJlIHRvIGJlIGNvbnNpZGVyZWQgcmV2b2tlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+KEFkZGVkIGluIDcuMTkuNykgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItZCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tZCwgLS1kYXRhICZsdDtkYXRhJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oSFRUUCkgU2VuZHMgdGhlIHNwZWNpZmllZCBkYXRhIGluIGEgUE9TVCByZXF1ZXN0IHRvIHRoZSBIVFRQIHNlcnZlciwgaW4gdGhlIHNhbWUgd2F5IHRoYXQgYSBicm93c2VyIGRvZXMgd2hlbiBhIHVzZXIgaGFzIGZpbGxlZCBpbiBhbiBIVE1MIGZvcm0gYW5kIHByZXNzZXMgdGhlIHN1Ym1pdCBidXR0b24uIFRoaXMgd2lsbCBjYXVzZSBjdXJsIHRvIHBhc3MgdGhlIGRhdGEgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29udGVudC10eXBlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC4gIENvbXBhcmUgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLUYiPi1GLCAtLWZvcm08L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1kIj4tZCwgLS1kYXRhPC9hPiBpcyB0aGUgc2FtZSBhcyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi0tZGF0YS1hc2NpaTwvc3Bhbj4uIFRvIHBvc3QgZGF0YSBwdXJlbHkgYmluYXJ5LCB5b3Ugc2hvdWxkIGluc3RlYWQgdXNlIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWRhdGEtYmluYXJ5Ij4tLWRhdGEtYmluYXJ5PC9hPiBvcHRpb24uIFRvIFVSTC1lbmNvZGUgdGhlIHZhbHVlIG9mIGEgZm9ybSBmaWVsZCB5b3UgbWF5IHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWRhdGEtdXJsZW5jb2RlIj4tLWRhdGEtdXJsZW5jb2RlPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiBhbnkgb2YgdGhlc2Ugb3B0aW9ucyBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGNvbW1hbmQgbGluZSwgdGhlIGRhdGEgcGllY2VzIHNwZWNpZmllZCB3aWxsIGJlIG1lcmdlZCB0b2dldGhlciB3aXRoIGEgc2VwYXJhdGluZyAmLXN5bWJvbC4gVGh1cywgdXNpbmcgJy1kIG5hbWU9ZGFuaWVsIC1kIHNraWxsPWxvdXN5JyB3b3VsZCBnZW5lcmF0ZSBhIHBvc3QgY2h1bmsgdGhhdCBsb29rcyBsaWtlICduYW1lPWRhbmllbCZza2lsbD1sb3VzeScuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgeW91IHN0YXJ0IHRoZSBkYXRhIHdpdGggdGhlIGxldHRlciBALCB0aGUgcmVzdCBzaG91bGQgYmUgYSBmaWxlIG5hbWUgdG8gcmVhZCB0aGUgZGF0YSBmcm9tLCBvciAtIGlmIHlvdSB3YW50IGN1cmwgdG8gcmVhZCB0aGUgZGF0YSBmcm9tIHN0ZGluLiAgVGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIG11c3QgYWxyZWFkeSBiZSBVUkwtZW5jb2RlZC4gTXVsdGlwbGUgZmlsZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkLiBQb3N0aW5nIGRhdGEgZnJvbSBhIGZpbGUgbmFtZWQgJ2Zvb2Jhcicgd291bGQgdGh1cyBiZSBkb25lIHdpdGggPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj4tLWRhdGEgQGZvb2Jhcjwvc3Bhbj4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LUQsIC0tZHVtcC1oZWFkZXIgJmx0O2ZpbGUmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPldyaXRlIHRoZSBwcm90b2NvbCBoZWFkZXJzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBpcyBoYW5keSB0byB1c2Ugd2hlbiB5b3Ugd2FudCB0byBzdG9yZSB0aGUgaGVhZGVycyB0aGF0IGEgSFRUUCBzaXRlIHNlbmRzIHRvIHlvdS4gQ29va2llcyBmcm9tIHRoZSBoZWFkZXJzIGNvdWxkIHRoZW4gYmUgcmVhZCBpbiBhIHNlY29uZCBjdXJsIGludm9jYXRpb24gYnkgdXNpbmcgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1iIj4tYiwgLS1jb29raWU8L2E+IG9wdGlvbiEgVGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1jIj4tYywgLS1jb29raWUtamFyPC9hPiBvcHRpb24gaXMgaG93ZXZlciBhIGJldHRlciB3YXkgdG8gc3RvcmUgY29va2llcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIHVzZWQgaW4gRlRQLCB0aGUgRlRQIHNlcnZlciByZXNwb25zZSBsaW5lcyBhcmUgY29uc2lkZXJlZCBiZWluZyAiaGVhZGVycyIgYW5kIHRodXMgYXJlIHNhdmVkIHRoZXJlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gIElQICItLWRhdGEtYXNjaWkgJmx0O2RhdGEmZ3Q7IiBTZWUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLWQiPi1kLCAtLWRhdGE8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tZGF0YS1iaW5hcnkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1kYXRhLWJpbmFyeSAmbHQ7ZGF0YSZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEhUVFApIFRoaXMgcG9zdHMgZGF0YSBleGFjdGx5IGFzIHNwZWNpZmllZCB3aXRoIG5vIGV4dHJhIHByb2Nlc3Npbmcgd2hhdHNvZXZlci4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3Ugc3RhcnQgdGhlIGRhdGEgd2l0aCB0aGUgbGV0dGVyIEAsIHRoZSByZXN0IHNob3VsZCBiZSBhIGZpbGVuYW1lLiAgRGF0YSBpcyBwb3N0ZWQgaW4gYSBzaW1pbGFyIG1hbm5lciBhcyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi0tZGF0YS1hc2NpaTwvc3Bhbj4gZG9lcywgZXhjZXB0IHRoYXQgbmV3bGluZXMgYXJlIHByZXNlcnZlZCBhbmQgY29udmVyc2lvbnMgYXJlIG5ldmVyIGRvbmUuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgb25lcyBmb2xsb3dpbmcgdGhlIGZpcnN0IHdpbGwgYXBwZW5kIGRhdGEgYXMgZGVzY3JpYmVkIGluIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1kIj4tZCwgLS1kYXRhPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWRhdGEtdXJsZW5jb2RlIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tZGF0YS11cmxlbmNvZGUgJmx0O2RhdGEmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBUaGlzIHBvc3RzIGRhdGEsIHNpbWlsYXIgdG8gdGhlIG90aGVyIC0tZGF0YSBvcHRpb25zIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoaXMgcGVyZm9ybXMgVVJMLWVuY29kaW5nLiAoQWRkZWQgaW4gNy4xOC4wKSAKKzxwIGNsYXNzPSJsZXZlbDEiPlRvIGJlIENHSS1jb21wbGlhbnQsIHRoZSAmbHQ7ZGF0YSZndDsgcGFydCBzaG91bGQgYmVnaW4gd2l0aCBhIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bmFtZTwvc3Bhbj4gZm9sbG93ZWQgYnkgYSBzZXBhcmF0b3IgYW5kIGEgY29udGVudCBzcGVjaWZpY2F0aW9uLiBUaGUgJmx0O2RhdGEmZ3Q7IHBhcnQgY2FuIGJlIHBhc3NlZCB0byBjdXJsIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN5bnRheGVzOiAKKzxwIGNsYXNzPSJsZXZlbDIiPgorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iY29udGVudCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5jb250ZW50PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRoaXMgd2lsbCBtYWtlIGN1cmwgVVJMLWVuY29kZSB0aGUgY29udGVudCBhbmQgcGFzcyB0aGF0IG9uLiBKdXN0IGJlIGNhcmVmdWwgc28gdGhhdCB0aGUgY29udGVudCBkb2Vzbid0IGNvbnRhaW4gYW55ID0gb3IgQCBzeW1ib2xzLCBhcyB0aGF0IHdpbGwgdGhlbiBtYWtlIHRoZSBzeW50YXggbWF0Y2ggb25lIG9mIHRoZSBvdGhlciBjYXNlcyBiZWxvdyEgCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJjb250ZW50Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPj1jb250ZW50PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRoaXMgd2lsbCBtYWtlIGN1cmwgVVJMLWVuY29kZSB0aGUgY29udGVudCBhbmQgcGFzcyB0aGF0IG9uLiBUaGUgcHJlY2VkaW5nID0gc3ltYm9sIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgZGF0YS4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJuYW1lY29udGVudCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5uYW1lPWNvbnRlbnQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VGhpcyB3aWxsIG1ha2UgY3VybCBVUkwtZW5jb2RlIHRoZSBjb250ZW50IHBhcnQgYW5kIHBhc3MgdGhhdCBvbi4gTm90ZSB0aGF0IHRoZSBuYW1lIHBhcnQgaXMgZXhwZWN0ZWQgdG8gYmUgVVJMLWVuY29kZWQgYWxyZWFkeS4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJmaWxlbmFtZSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5AZmlsZW5hbWU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VGhpcyB3aWxsIG1ha2UgY3VybCBsb2FkIGRhdGEgZnJvbSB0aGUgZ2l2ZW4gZmlsZSAoaW5jbHVkaW5nIGFueSBuZXdsaW5lcyksIFVSTC1lbmNvZGUgdGhhdCBkYXRhIGFuZCBwYXNzIGl0IG9uIGluIHRoZSBQT1NULiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9Im5hbWVmaWxlbmFtZSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5uYW1lQGZpbGVuYW1lPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRoaXMgd2lsbCBtYWtlIGN1cmwgbG9hZCBkYXRhIGZyb20gdGhlIGdpdmVuIGZpbGUgKGluY2x1ZGluZyBhbnkgbmV3bGluZXMpLCBVUkwtZW5jb2RlIHRoYXQgZGF0YSBhbmQgcGFzcyBpdCBvbiBpbiB0aGUgUE9TVC4gVGhlIG5hbWUgcGFydCBnZXRzIGFuIGVxdWFsIHNpZ24gYXBwZW5kZWQsIHJlc3VsdGluZyBpbiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPm5hbWU9dXJsZW5jb2RlZC1maWxlLWNvbnRlbnQ8L3NwYW4+LiBOb3RlIHRoYXQgdGhlIG5hbWUgaXMgZXhwZWN0ZWQgdG8gYmUgVVJMLWVuY29kZWQgYWxyZWFkeS4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tZGVsZWdhdGlvbiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLWRlbGVnYXRpb24gTEVWRUw8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U2V0IDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+TEVWRUw8L3NwYW4+IHRvIHRlbGwgdGhlIHNlcnZlciB3aGF0IGl0IGlzIGFsbG93ZWQgdG8gZGVsZWdhdGUgd2hlbiBpdCBjb21lcyB0byB1c2VyIGNyZWRlbnRpYWxzLiBVc2VkIHdpdGggR1NTL2tlcmJlcm9zLiAKKzxwIGNsYXNzPSJsZXZlbDIiPgorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0ibm9uZSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5ub25lPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPkRvbid0IGFsbG93IGFueSBkZWxlZ2F0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9InBvbGljeSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5wb2xpY3k8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+RGVsZWdhdGVzIGlmIGFuZCBvbmx5IGlmIHRoZSBPSy1BUy1ERUxFR0FURSBmbGFnIGlzIHNldCBpbiB0aGUgS2VyYmVyb3Mgc2VydmljZSB0aWNrZXQsIHdoaWNoIGlzIGEgbWF0dGVyIG9mIHJlYWxtIHBvbGljeS4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJhbHdheXMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+YWx3YXlzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlVuY29uZGl0aW9uYWxseSBhbGxvdyB0aGUgc2VydmVyIHRvIGRlbGVnYXRlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1kaWdlc3QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1kaWdlc3Q8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEhUVFApIEVuYWJsZXMgSFRUUCBEaWdlc3QgYXV0aGVudGljYXRpb24uIFRoaXMgaXMgYSBhdXRoZW50aWNhdGlvbiB0aGF0IHByZXZlbnRzIHRoZSBwYXNzd29yZCBmcm9tIGJlaW5nIHNlbnQgb3ZlciB0aGUgd2lyZSBpbiBjbGVhciB0ZXh0LiBVc2UgdGhpcyBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBub3JtYWwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLXUiPi11LCAtLXVzZXI8L2E+IG9wdGlvbiB0byBzZXQgdXNlciBuYW1lIGFuZCBwYXNzd29yZC4gU2VlIGFsc28gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS1udGxtIj4tLW50bG08L2E+LCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLW5lZ290aWF0ZSI+LS1uZWdvdGlhdGU8L2E+IGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWFueWF1dGgiPi0tYW55YXV0aDwvYT4gZm9yIHJlbGF0ZWQgb3B0aW9ucy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBmb2xsb3dpbmcgb2NjdXJyZW5jZXMgbWFrZSBubyBkaWZmZXJlbmNlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tZGlzYWJsZS1lcHJ0Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tZGlzYWJsZS1lcHJ0PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihGVFApIFRlbGwgY3VybCB0byBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIEVQUlQgYW5kIExQUlQgY29tbWFuZHMgd2hlbiBkb2luZyBhY3RpdmUgRlRQIHRyYW5zZmVycy4gQ3VybCB3aWxsIG5vcm1hbGx5IGFsd2F5cyBmaXJzdCBhdHRlbXB0IHRvIHVzZSBFUFJULCB0aGVuIExQUlQgYmVmb3JlIHVzaW5nIFBPUlQsIGJ1dCB3aXRoIHRoaXMgb3B0aW9uLCBpdCB3aWxsIHVzZSBQT1JUIHJpZ2h0IGF3YXkuIEVQUlQgYW5kIExQUlQgYXJlIGV4dGVuc2lvbnMgdG8gdGhlIG9yaWdpbmFsIEZUUCBwcm90b2NvbCwgYW5kIG1heSBub3Qgd29yayBvbiBhbGwgc2VydmVycywgYnV0IHRoZXkgZW5hYmxlIG1vcmUgZnVuY3Rpb25hbGl0eSBpbiBhIGJldHRlciB3YXkgdGhhbiB0aGUgdHJhZGl0aW9uYWwgUE9SVCBjb21tYW5kLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxzcGFuIENsYXNzPSJib2xkIj4tLWVwcnQ8L3NwYW4+IGNhbiBiZSB1c2VkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIEVQUlQgYWdhaW4gYW5kIDxzcGFuIENsYXNzPSJib2xkIj4tLW5vLWVwcnQ8L3NwYW4+IGlzIGFuIGFsaWFzIGZvciA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iIy0tZGlzYWJsZS1lcHJ0Ij4tLWRpc2FibGUtZXBydDwvYT4uIAorPHAgY2xhc3M9ImxldmVsMSI+RGlzYWJsaW5nIEVQUlQgb25seSBjaGFuZ2VzIHRoZSBhY3RpdmUgYmVoYXZpb3IuIElmIHlvdSB3YW50IHRvIHN3aXRjaCB0byBwYXNzaXZlIG1vZGUgeW91IG5lZWQgdG8gbm90IHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtUCI+LVAsIC0tZnRwLXBvcnQ8L2E+IG9yIGZvcmNlIGl0IHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS1mdHAtcGFzdiI+LS1mdHAtcGFzdjwvYT4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1kaXNhYmxlLWVwc3YiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1kaXNhYmxlLWVwc3Y8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEZUUCkgVGVsbCBjdXJsIHRvIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgRVBTViBjb21tYW5kIHdoZW4gZG9pbmcgcGFzc2l2ZSBGVFAgdHJhbnNmZXJzLiBDdXJsIHdpbGwgbm9ybWFsbHkgYWx3YXlzIGZpcnN0IGF0dGVtcHQgdG8gdXNlIEVQU1YgYmVmb3JlIFBBU1YsIGJ1dCB3aXRoIHRoaXMgb3B0aW9uLCBpdCB3aWxsIG5vdCB0cnkgdXNpbmcgRVBTVi4gCis8cCBjbGFzcz0ibGV2ZWwxIj48c3BhbiBDbGFzcz0iYm9sZCI+LS1lcHN2PC9zcGFuPiBjYW4gYmUgdXNlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBFUFNWIGFnYWluIGFuZCA8c3BhbiBDbGFzcz0iYm9sZCI+LS1uby1lcHN2PC9zcGFuPiBpcyBhbiBhbGlhcyBmb3IgPGEgY2xhc3M9ImJvbGQiIGhyZWY9IiMtLWRpc2FibGUtZXBzdiI+LS1kaXNhYmxlLWVwc3Y8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDEiPkRpc2FibGluZyBFUFNWIG9ubHkgY2hhbmdlcyB0aGUgcGFzc2l2ZSBiZWhhdmlvci4gSWYgeW91IHdhbnQgdG8gc3dpdGNoIHRvIGFjdGl2ZSBtb2RlIHlvdSBuZWVkIHRvIHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtUCI+LVAsIC0tZnRwLXBvcnQ8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1lIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1lLCAtLXJlZmVyZXIgJmx0O1VSTCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEhUVFApIFNlbmRzIHRoZSAiUmVmZXJlciBQYWdlIiBpbmZvcm1hdGlvbiB0byB0aGUgSFRUUCBzZXJ2ZXIuIFRoaXMgY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1IIj4tSCwgLS1oZWFkZXI8L2E+IGZsYWcgb2YgY291cnNlLiAgV2hlbiB1c2VkIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLUwiPi1MLCAtLWxvY2F0aW9uPC9hPiB5b3UgY2FuIGFwcGVuZCAiO2F1dG8iIHRvIHRoZSAtLXJlZmVyZXIgVVJMIHRvIG1ha2UgY3VybCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgcHJldmlvdXMgVVJMIHdoZW4gaXQgZm9sbG93cyBhIExvY2F0aW9uOiBoZWFkZXIuIFRoZSAiO2F1dG8iIHN0cmluZyBjYW4gYmUgdXNlZCBhbG9uZSwgZXZlbiBpZiB5b3UgZG9uJ3Qgc2V0IGFuIGluaXRpYWwgLS1yZWZlcmVyLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tRSwgLS1jZXJ0ICZsdDtjZXJ0aWZpY2F0ZVs6cGFzc3dvcmRdJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oU1NMKSBUZWxscyBjdXJsIHRvIHVzZSB0aGUgc3BlY2lmaWVkIGNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlIHdoZW4gZ2V0dGluZyBhIGZpbGUgd2l0aCBIVFRQUywgRlRQUyBvciBhbm90aGVyIFNTTC1iYXNlZCBwcm90b2NvbC4gVGhlIGNlcnRpZmljYXRlIG11c3QgYmUgaW4gUEVNIGZvcm1hdC4gIElmIHRoZSBvcHRpb25hbCBwYXNzd29yZCBpc24ndCBzcGVjaWZpZWQsIGl0IHdpbGwgYmUgcXVlcmllZCBmb3Igb24gdGhlIHRlcm1pbmFsLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gYXNzdW1lcyBhICJjZXJ0aWZpY2F0ZSIgZmlsZSB0aGF0IGlzIHRoZSBwcml2YXRlIGtleSBhbmQgdGhlIHByaXZhdGUgY2VydGlmaWNhdGUgY29uY2F0ZW5hdGVkISBTZWUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj4tLWNlcnQ8L3NwYW4+IGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWtleSI+LS1rZXk8L2E+IHRvIHNwZWNpZnkgdGhlbSBpbmRlcGVuZGVudGx5LiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIGN1cmwgaXMgYnVpbHQgYWdhaW5zdCB0aGUgTlNTIFNTTCBsaWJyYXJ5IHRoZW4gdGhpcyBvcHRpb24gY2FuIHRlbGwgY3VybCB0aGUgbmlja25hbWUgb2YgdGhlIGNlcnRpZmljYXRlIHRvIHVzZSB3aXRoaW4gdGhlIE5TUyBkYXRhYmFzZSBkZWZpbmVkIGJ5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBTU0xfRElSIChvciBieSBkZWZhdWx0IC9ldGMvcGtpL25zc2RiKS4gSWYgdGhlIE5TUyBQRU0gUEtDUyMxMSBtb2R1bGUgKGxpYm5zc3BlbS5zbykgaXMgYXZhaWxhYmxlIHRoZW4gUEVNIGZpbGVzIG1heSBiZSBsb2FkZWQuIElmIHlvdSB3YW50IHRvIHVzZSBhIGZpbGUgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHBsZWFzZSBwcmVjZWRlIGl0IHdpdGggIi4vIiBwcmVmaXgsIGluIG9yZGVyIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIGEgbmlja25hbWUuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tZW5naW5lIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tZW5naW5lICZsdDtuYW1lJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TZWxlY3QgdGhlIE9wZW5TU0wgY3J5cHRvIGVuZ2luZSB0byB1c2UgZm9yIGNpcGhlciBvcGVyYXRpb25zLiBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS1lbmdpbmUiPi0tZW5naW5lIGxpc3Q8L2E+IHRvIHByaW50IGEgbGlzdCBvZiBidWlsZC10aW1lIHN1cHBvcnRlZCBlbmdpbmVzLiBOb3RlIHRoYXQgbm90IGFsbCAob3Igbm9uZSkgb2YgdGhlIGVuZ2luZXMgbWF5IGJlIGF2YWlsYWJsZSBhdCBydW4tdGltZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWVudmlyb25tZW50Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tZW52aXJvbm1lbnQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KFJJU0MgT1MgT05MWSkgU2V0cyBhIHJhbmdlIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcywgdXNpbmcgdGhlIG5hbWVzIHRoZSAtdyBvcHRpb24gc3VwcG9ydHMsIHRvIGFsbG93IGVhc2llciBleHRyYWN0aW9uIG9mIHVzZWZ1bCBpbmZvcm1hdGlvbiBhZnRlciBoYXZpbmcgcnVuIGN1cmwuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1lZ2QtZmlsZSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLWVnZC1maWxlICZsdDtmaWxlJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oU1NMKSBTcGVjaWZ5IHRoZSBwYXRoIG5hbWUgdG8gdGhlIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vbiBzb2NrZXQuIFRoZSBzb2NrZXQgaXMgdXNlZCB0byBzZWVkIHRoZSByYW5kb20gZW5naW5lIGZvciBTU0wgY29ubmVjdGlvbnMuIFNlZSBhbHNvIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLXJhbmRvbS1maWxlIj4tLXJhbmRvbS1maWxlPC9hPiBvcHRpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1jZXJ0LXR5cGUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1jZXJ0LXR5cGUgJmx0O3R5cGUmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihTU0wpIFRlbGxzIGN1cmwgd2hhdCBjZXJ0aWZpY2F0ZSB0eXBlIHRoZSBwcm92aWRlZCBjZXJ0aWZpY2F0ZSBpcyBpbi4gUEVNLCBERVIgYW5kIEVORyBhcmUgcmVjb2duaXplZCB0eXBlcy4gIElmIG5vdCBzcGVjaWZpZWQsIFBFTSBpcyBhc3N1bWVkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWNhY2VydCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLWNhY2VydCAmbHQ7Q0EgY2VydGlmaWNhdGUmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihTU0wpIFRlbGxzIGN1cmwgdG8gdXNlIHRoZSBzcGVjaWZpZWQgY2VydGlmaWNhdGUgZmlsZSB0byB2ZXJpZnkgdGhlIHBlZXIuIFRoZSBmaWxlIG1heSBjb250YWluIG11bHRpcGxlIENBIGNlcnRpZmljYXRlcy4gVGhlIGNlcnRpZmljYXRlKHMpIG11c3QgYmUgaW4gUEVNIGZvcm1hdC4gTm9ybWFsbHkgY3VybCBpcyBidWlsdCB0byB1c2UgYSBkZWZhdWx0IGZpbGUgZm9yIHRoaXMsIHNvIHRoaXMgb3B0aW9uIGlzIHR5cGljYWxseSB1c2VkIHRvIGFsdGVyIHRoYXQgZGVmYXVsdCBmaWxlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPmN1cmwgcmVjb2duaXplcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZWQgJ0NVUkxfQ0FfQlVORExFJyBpZiBpdCBpcyBzZXQsIGFuZCB1c2VzIHRoZSBnaXZlbiBwYXRoIGFzIGEgcGF0aCB0byBhIENBIGNlcnQgYnVuZGxlLiBUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhhdCB2YXJpYWJsZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgd2luZG93cyB2ZXJzaW9uIG9mIGN1cmwgd2lsbCBhdXRvbWF0aWNhbGx5IGxvb2sgZm9yIGEgQ0EgY2VydHMgZmlsZSBuYW1lZCAmYWN1dGU7Y3VybC1jYS1idW5kbGUuY3J0JmFjdXRlOywgZWl0aGVyIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBjdXJsLmV4ZSwgb3IgaW4gdGhlIEN1cnJlbnQgV29ya2luZyBEaXJlY3RvcnksIG9yIGluIGFueSBmb2xkZXIgYWxvbmcgeW91ciBQQVRILiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIGN1cmwgaXMgYnVpbHQgYWdhaW5zdCB0aGUgTlNTIFNTTCBsaWJyYXJ5IHRoZW4gdGhpcyBvcHRpb24gdGVsbHMgY3VybCB0aGUgbmlja25hbWUgb2YgdGhlIENBIGNlcnRpZmljYXRlIHRvIHVzZSB3aXRoaW4gdGhlIE5TUyBkYXRhYmFzZSBkZWZpbmVkIGJ5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBTU0xfRElSIChvciBieSBkZWZhdWx0IC9ldGMvcGtpL25zc2RiKS4gSWYgdGhlIE5TUyBQRU0gUEtDUyMxMSBtb2R1bGUgKGxpYm5zc3BlbS5zbykgaXMgYXZhaWxhYmxlIHRoZW4gUEVNIGZpbGVzIG1heSBiZSBsb2FkZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tY2FwYXRoIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tY2FwYXRoICZsdDtDQSBjZXJ0aWZpY2F0ZSBkaXJlY3RvcnkmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihTU0wpIFRlbGxzIGN1cmwgdG8gdXNlIHRoZSBzcGVjaWZpZWQgY2VydGlmaWNhdGUgZGlyZWN0b3J5IHRvIHZlcmlmeSB0aGUgcGVlci4gTXVsdGlwbGUgcGF0aHMgY2FuIGJlIHByb3ZpZGVkIGJ5IHNlcGFyYXRpbmcgdGhlbSB3aXRoICI6IiAoZS5nLiAicGF0aDE6cGF0aDI6cGF0aDMiKS4gVGhlIGNlcnRpZmljYXRlcyBtdXN0IGJlIGluIFBFTSBmb3JtYXQsIGFuZCBpZiBjdXJsIGlzIGJ1aWx0IGFnYWluc3QgT3BlblNTTCwgdGhlIGRpcmVjdG9yeSBtdXN0IGhhdmUgYmVlbiBwcm9jZXNzZWQgdXNpbmcgdGhlIGNfcmVoYXNoIHV0aWxpdHkgc3VwcGxpZWQgd2l0aCBPcGVuU1NMLiBVc2luZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWNhcGF0aCI+LS1jYXBhdGg8L2E+IGNhbiBhbGxvdyBPcGVuU1NMLXBvd2VyZWQgY3VybCB0byBtYWtlIFNTTC1jb25uZWN0aW9ucyBtdWNoIG1vcmUgZWZmaWNpZW50bHkgdGhhbiB1c2luZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWNhY2VydCI+LS1jYWNlcnQ8L2E+IGlmIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWNhY2VydCI+LS1jYWNlcnQ8L2E+IGZpbGUgY29udGFpbnMgbWFueSBDQSBjZXJ0aWZpY2F0ZXMuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgZGVmYXVsdCBjYXBhdGggdmFsdWUgd2lsbCBiZSBpZ25vcmVkLCBhbmQgaWYgaXQgaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1mIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1mLCAtLWZhaWw8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEhUVFApIEZhaWwgc2lsZW50bHkgKG5vIG91dHB1dCBhdCBhbGwpIG9uIHNlcnZlciBlcnJvcnMuIFRoaXMgaXMgbW9zdGx5IGRvbmUgdG8gYmV0dGVyIGVuYWJsZSBzY3JpcHRzIGV0YyB0byBiZXR0ZXIgZGVhbCB3aXRoIGZhaWxlZCBhdHRlbXB0cy4gSW4gbm9ybWFsIGNhc2VzIHdoZW4gYSBIVFRQIHNlcnZlciBmYWlscyB0byBkZWxpdmVyIGEgZG9jdW1lbnQsIGl0IHJldHVybnMgYW4gSFRNTCBkb2N1bWVudCBzdGF0aW5nIHNvICh3aGljaCBvZnRlbiBhbHNvIGRlc2NyaWJlcyB3aHkgYW5kIG1vcmUpLiBUaGlzIGZsYWcgd2lsbCBwcmV2ZW50IGN1cmwgZnJvbSBvdXRwdXR0aW5nIHRoYXQgYW5kIHJldHVybiBlcnJvciAyMi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG1ldGhvZCBpcyBub3QgZmFpbC1zYWZlIGFuZCB0aGVyZSBhcmUgb2NjYXNpb25zIHdoZXJlIG5vbi1zdWNjZXNzZnVsIHJlc3BvbnNlIGNvZGVzIHdpbGwgc2xpcCB0aHJvdWdoLCBlc3BlY2lhbGx5IHdoZW4gYXV0aGVudGljYXRpb24gaXMgaW52b2x2ZWQgKHJlc3BvbnNlIGNvZGVzIDQwMSBhbmQgNDA3KS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItRiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tRiwgLS1mb3JtICZsdDtuYW1lPWNvbnRlbnQmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBUaGlzIGxldHMgY3VybCBlbXVsYXRlIGEgZmlsbGVkLWluIGZvcm0gaW4gd2hpY2ggYSB1c2VyIGhhcyBwcmVzc2VkIHRoZSBzdWJtaXQgYnV0dG9uLiBUaGlzIGNhdXNlcyBjdXJsIHRvIFBPU1QgZGF0YSB1c2luZyB0aGUgQ29udGVudC1UeXBlIG11bHRpcGFydC9mb3JtLWRhdGEgYWNjb3JkaW5nIHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzIzODgudHh0Ij5SRkMgMjM4ODwvYT4uIFRoaXMgZW5hYmxlcyB1cGxvYWRpbmcgb2YgYmluYXJ5IGZpbGVzIGV0Yy4gVG8gZm9yY2UgdGhlICdjb250ZW50JyBwYXJ0IHRvIGJlIGEgZmlsZSwgcHJlZml4IHRoZSBmaWxlIG5hbWUgd2l0aCBhbiBAIHNpZ24uIFRvIGp1c3QgZ2V0IHRoZSBjb250ZW50IHBhcnQgZnJvbSBhIGZpbGUsIHByZWZpeCB0aGUgZmlsZSBuYW1lIHdpdGggdGhlIHN5bWJvbCAmbHQ7LiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEAgYW5kICZsdDsgaXMgdGhlbiB0aGF0IEAgbWFrZXMgYSBmaWxlIGdldCBhdHRhY2hlZCBpbiB0aGUgcG9zdCBhcyBhIGZpbGUgdXBsb2FkLCB3aGlsZSB0aGUgJmx0OyBtYWtlcyBhIHRleHQgZmllbGQgYW5kIGp1c3QgZ2V0IHRoZSBjb250ZW50cyBmb3IgdGhhdCB0ZXh0IGZpZWxkIGZyb20gYSBmaWxlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkV4YW1wbGUsIHRvIHNlbmQgeW91ciBwYXNzd29yZCBmaWxlIHRvIHRoZSBzZXJ2ZXIsIHdoZXJlICdwYXNzd29yZCcgaXMgdGhlIG5hbWUgb2YgdGhlIGZvcm0tZmllbGQgdG8gd2hpY2ggL2V0Yy9wYXNzd2Qgd2lsbCBiZSB0aGUgaW5wdXQ6IAorPHAgY2xhc3M9ImxldmVsMSI+PHNwYW4gQ2xhc3M9ImJvbGQiPmN1cmw8L3NwYW4+IC1GIHBhc3N3b3JkPUAvZXRjL3Bhc3N3ZCB3d3cubXlwYXNzd29yZHMuY29tIAorPHAgY2xhc3M9ImxldmVsMSI+VG8gcmVhZCBjb250ZW50IGZyb20gc3RkaW4gaW5zdGVhZCBvZiBhIGZpbGUsIHVzZSAtIGFzIHRoZSBmaWxlbmFtZS4gVGhpcyBnb2VzIGZvciBib3RoIEAgYW5kICZsdDsgY29uc3RydWN0cy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Zb3UgY2FuIGFsc28gdGVsbCBjdXJsIHdoYXQgQ29udGVudC1UeXBlIHRvIHVzZSBieSB1c2luZyAndHlwZT0nLCBpbiBhIG1hbm5lciBzaW1pbGFyIHRvOiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxzcGFuIENsYXNzPSJib2xkIj5jdXJsPC9zcGFuPiAtRiAid2ViPUBpbmRleC5odG1sO3R5cGU9dGV4dC9odG1sIiB1cmwuY29tIAorPHAgY2xhc3M9ImxldmVsMSI+b3IgCis8cCBjbGFzcz0ibGV2ZWwxIj48c3BhbiBDbGFzcz0iYm9sZCI+Y3VybDwvc3Bhbj4gLUYgIm5hbWU9ZGFuaWVsO3R5cGU9dGV4dC9mb28iIHVybC5jb20gCis8cCBjbGFzcz0ibGV2ZWwxIj5Zb3UgY2FuIGFsc28gZXhwbGljaXRseSBjaGFuZ2UgdGhlIG5hbWUgZmllbGQgb2YgYSBmaWxlIHVwbG9hZCBwYXJ0IGJ5IHNldHRpbmcgZmlsZW5hbWU9LCBsaWtlIHRoaXM6IAorPHAgY2xhc3M9ImxldmVsMSI+PHNwYW4gQ2xhc3M9ImJvbGQiPmN1cmw8L3NwYW4+IC1GICJmaWxlPUBsb2NhbGZpbGU7ZmlsZW5hbWU9bmFtZWlucG9zdCIgdXJsLmNvbSAKKzxwIGNsYXNzPSJsZXZlbDEiPlNlZSBmdXJ0aGVyIGV4YW1wbGVzIGFuZCBkZXRhaWxzIGluIHRoZSBNQU5VQUwuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1mdHAtYWNjb3VudCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLWZ0cC1hY2NvdW50IFtkYXRhXTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oRlRQKSBXaGVuIGFuIEZUUCBzZXJ2ZXIgYXNrcyBmb3IgImFjY291bnQgZGF0YSIgYWZ0ZXIgdXNlciBuYW1lIGFuZCBwYXNzd29yZCBoYXMgYmVlbiBwcm92aWRlZCwgdGhpcyBkYXRhIGlzIHNlbnQgb2ZmIHVzaW5nIHRoZSBBQ0NUIGNvbW1hbmQuIChBZGRlZCBpbiA3LjEzLjApIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCB0d2ljZSwgdGhlIHNlY29uZCB3aWxsIG92ZXJyaWRlIHRoZSBwcmV2aW91cyB1c2UuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1mdHAtYWx0ZXJuYXRpdmUtdG8tdXNlciI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLWZ0cC1hbHRlcm5hdGl2ZS10by11c2VyICZsdDtjb21tYW5kJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oRlRQKSBJZiBhdXRoZW50aWNhdGluZyB3aXRoIHRoZSBVU0VSIGFuZCBQQVNTIGNvbW1hbmRzIGZhaWxzLCBzZW5kIHRoaXMgY29tbWFuZC4gIFdoZW4gY29ubmVjdGluZyB0byBUdW1ibGV3ZWVkJ3MgU2VjdXJlIFRyYW5zcG9ydCBzZXJ2ZXIgb3ZlciBGVFBTIHVzaW5nIGEgY2xpZW50IGNlcnRpZmljYXRlLCB1c2luZyAiU0lURSBBVVRIIiB3aWxsIHRlbGwgdGhlIHNlcnZlciB0byByZXRyaWV2ZSB0aGUgdXNlcm5hbWUgZnJvbSB0aGUgY2VydGlmaWNhdGUuIChBZGRlZCBpbiA3LjE1LjUpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1mdHAtY3JlYXRlLWRpcnMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1mdHAtY3JlYXRlLWRpcnM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEZUUC9TRlRQKSBXaGVuIGFuIEZUUCBvciBTRlRQIFVSTC9vcGVyYXRpb24gdXNlcyBhIHBhdGggdGhhdCBkb2Vzbid0IGN1cnJlbnRseSBleGlzdCBvbiB0aGUgc2VydmVyLCB0aGUgc3RhbmRhcmQgYmVoYXZpb3Igb2YgY3VybCBpcyB0byBmYWlsLiBVc2luZyB0aGlzIG9wdGlvbiwgY3VybCB3aWxsIGluc3RlYWQgYXR0ZW1wdCB0byBjcmVhdGUgbWlzc2luZyBkaXJlY3Rvcmllcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWZ0cC1tZXRob2QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1mdHAtbWV0aG9kIFttZXRob2RdPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihGVFApIENvbnRyb2wgd2hhdCBtZXRob2QgY3VybCBzaG91bGQgdXNlIHRvIHJlYWNoIGEgZmlsZSBvbiBhIEZUUChTKSBzZXJ2ZXIuIFRoZSBtZXRob2QgYXJndW1lbnQgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlczogCis8cCBjbGFzcz0ibGV2ZWwyIj4KKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9Im11bHRpY3dkIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPm11bHRpY3dkPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPmN1cmwgZG9lcyBhIHNpbmdsZSBDV0Qgb3BlcmF0aW9uIGZvciBlYWNoIHBhdGggcGFydCBpbiB0aGUgZ2l2ZW4gVVJMLiBGb3IgZGVlcCBoaWVyYXJjaGllcyB0aGlzIG1lYW5zIHZlcnkgbWFueSBjb21tYW5kcy4gVGhpcyBpcyBob3cgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTczOC50eHQiPlJGQyAxNzM4PC9hPiBzYXlzIGl0IHNob3VsZCBiZSBkb25lLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgc2xvd2VzdCBiZWhhdmlvci4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJub2N3ZCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5ub2N3ZDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5jdXJsIGRvZXMgbm8gQ1dEIGF0IGFsbC4gY3VybCB3aWxsIGRvIFNJWkUsIFJFVFIsIFNUT1IgZXRjIGFuZCBnaXZlIGEgZnVsbCBwYXRoIHRvIHRoZSBzZXJ2ZXIgZm9yIGFsbCB0aGVzZSBjb21tYW5kcy4gVGhpcyBpcyB0aGUgZmFzdGVzdCBiZWhhdmlvci4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJzaW5nbGVjd2QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+c2luZ2xlY3dkPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPmN1cmwgZG9lcyBvbmUgQ1dEIHdpdGggdGhlIGZ1bGwgdGFyZ2V0IGRpcmVjdG9yeSBhbmQgdGhlbiBvcGVyYXRlcyBvbiB0aGUgZmlsZSAibm9ybWFsbHkiIChsaWtlIGluIHRoZSBtdWx0aWN3ZCBjYXNlKS4gVGhpcyBpcyBzb21ld2hhdCBtb3JlIHN0YW5kYXJkcyBjb21wbGlhbnQgdGhhbiAnbm9jd2QnIGJ1dCB3aXRob3V0IHRoZSBmdWxsIHBlbmFsdHkgb2YgJ211bHRpY3dkJy4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oQWRkZWQgaW4gNy4xNS4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tZnRwLXBhc3YiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1mdHAtcGFzdjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oRlRQKSBVc2UgcGFzc2l2ZSBtb2RlIGZvciB0aGUgZGF0YSBjb25uZWN0aW9uLiBQYXNzaXZlIGlzIHRoZSBpbnRlcm5hbCBkZWZhdWx0IGJlaGF2aW9yLCBidXQgdXNpbmcgdGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYSBwcmV2aW91cyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi1QLy1mdHAtcG9ydDwvc3Bhbj4gb3B0aW9uLiAoQWRkZWQgaW4gNy4xMS4wKSAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBtYWtlIG5vIGRpZmZlcmVuY2UuIFVuZG9pbmcgYW4gZW5mb3JjZWQgcGFzc2l2ZSByZWFsbHkgaXNuJ3QgZG9hYmxlIGJ1dCB5b3UgbXVzdCB0aGVuIGluc3RlYWQgZW5mb3JjZSB0aGUgY29ycmVjdCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtUCI+LVAsIC0tZnRwLXBvcnQ8L2E+IGFnYWluLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3NpdmUgbW9kZSBtZWFucyB0aGF0IGN1cmwgd2lsbCB0cnkgdGhlIEVQU1YgY29tbWFuZCBmaXJzdCBhbmQgdGhlbiBQQVNWLCB1bmxlc3MgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS1kaXNhYmxlLWVwc3YiPi0tZGlzYWJsZS1lcHN2PC9hPiBpcyB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tZnRwLXNraXAtcGFzdi1pcCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLWZ0cC1za2lwLXBhc3YtaXA8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEZUUCkgVGVsbCBjdXJsIHRvIG5vdCB1c2UgdGhlIElQIGFkZHJlc3MgdGhlIHNlcnZlciBzdWdnZXN0cyBpbiBpdHMgcmVzcG9uc2UgdG8gY3VybCdzIFBBU1YgY29tbWFuZCB3aGVuIGN1cmwgY29ubmVjdHMgdGhlIGRhdGEgY29ubmVjdGlvbi4gSW5zdGVhZCBjdXJsIHdpbGwgcmUtdXNlIHRoZSBzYW1lIElQIGFkZHJlc3MgaXQgYWxyZWFkeSB1c2VzIGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uLiAoQWRkZWQgaW4gNy4xNC4yKSAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgaWYgUE9SVCwgRVBSVCBvciBFUFNWIGlzIHVzZWQgaW5zdGVhZCBvZiBQQVNWLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tZnRwLXByZXQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1mdHAtcHJldDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oRlRQKSBUZWxsIGN1cmwgdG8gc2VuZCBhIFBSRVQgY29tbWFuZCBiZWZvcmUgUEFTViAoYW5kIEVQU1YpLiBDZXJ0YWluIEZUUCBzZXJ2ZXJzLCBtYWlubHkgZHJmdHBkLCByZXF1aXJlIHRoaXMgbm9uLXN0YW5kYXJkIGNvbW1hbmQgZm9yIGRpcmVjdG9yeSBsaXN0aW5ncyBhcyB3ZWxsIGFzIHVwIGFuZCBkb3dubG9hZHMgaW4gUEFTViBtb2RlLiAoQWRkZWQgaW4gNy4yMC54KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tZnRwLXNzbC1jY2MiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1mdHAtc3NsLWNjYzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oRlRQKSBVc2UgQ0NDIChDbGVhciBDb21tYW5kIENoYW5uZWwpIFNodXRzIGRvd24gdGhlIFNTTC9UTFMgbGF5ZXIgYWZ0ZXIgYXV0aGVudGljYXRpbmcuIFRoZSByZXN0IG9mIHRoZSBjb250cm9sIGNoYW5uZWwgY29tbXVuaWNhdGlvbiB3aWxsIGJlIHVuZW5jcnlwdGVkLiBUaGlzIGFsbG93cyBOQVQgcm91dGVycyB0byBmb2xsb3cgdGhlIEZUUCB0cmFuc2FjdGlvbi4gVGhlIGRlZmF1bHQgbW9kZSBpcyBwYXNzaXZlLiBTZWUgLS1mdHAtc3NsLWNjYy1tb2RlIGZvciBvdGhlciBtb2Rlcy4gKEFkZGVkIGluIDcuMTYuMSkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWZ0cC1zc2wtY2NjLW1vZGUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1mdHAtc3NsLWNjYy1tb2RlIFthY3RpdmUvcGFzc2l2ZV08L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEZUUCkgVXNlIENDQyAoQ2xlYXIgQ29tbWFuZCBDaGFubmVsKSBTZXRzIHRoZSBDQ0MgbW9kZS4gVGhlIHBhc3NpdmUgbW9kZSB3aWxsIG5vdCBpbml0aWF0ZSB0aGUgc2h1dGRvd24sIGJ1dCBpbnN0ZWFkIHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdG8gZG8gaXQsIGFuZCB3aWxsIG5vdCByZXBseSB0byB0aGUgc2h1dGRvd24gZnJvbSB0aGUgc2VydmVyLiBUaGUgYWN0aXZlIG1vZGUgaW5pdGlhdGVzIHRoZSBzaHV0ZG93biBhbmQgd2FpdHMgZm9yIGEgcmVwbHkgZnJvbSB0aGUgc2VydmVyLiAoQWRkZWQgaW4gNy4xNi4yKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tZnRwLXNzbC1jb250cm9sIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tZnRwLXNzbC1jb250cm9sPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihGVFApIFJlcXVpcmUgU1NML1RMUyBmb3IgdGhlIEZUUCBsb2dpbiwgY2xlYXIgZm9yIHRyYW5zZmVyLiAgQWxsb3dzIHNlY3VyZSBhdXRoZW50aWNhdGlvbiwgYnV0IG5vbi1lbmNyeXB0ZWQgZGF0YSB0cmFuc2ZlcnMgZm9yIGVmZmljaWVuY3kuICBGYWlscyB0aGUgdHJhbnNmZXIgaWYgdGhlIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgU1NML1RMUy4gIChBZGRlZCBpbiA3LjE2LjApIHRoYXQgY2FuIHN0aWxsIGJlIHVzZWQgYnV0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tZm9ybS1zdHJpbmciPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1mb3JtLXN0cmluZyAmbHQ7bmFtZT1zdHJpbmcmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBTaW1pbGFyIHRvIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+LS1mb3JtPC9zcGFuPiBleGNlcHQgdGhhdCB0aGUgdmFsdWUgc3RyaW5nIGZvciB0aGUgbmFtZWQgcGFyYW1ldGVyIGlzIHVzZWQgbGl0ZXJhbGx5LiBMZWFkaW5nICdAJyBhbmQgJyZsdDsnIGNoYXJhY3RlcnMsIGFuZCB0aGUgJzt0eXBlPScgc3RyaW5nIGluIHRoZSB2YWx1ZSBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZy4gVXNlIHRoaXMgaW4gcHJlZmVyZW5jZSB0byA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi0tZm9ybTwvc3Bhbj4gaWYgdGhlcmUncyBhbnkgcG9zc2liaWxpdHkgdGhhdCB0aGUgc3RyaW5nIHZhbHVlIG1heSBhY2NpZGVudGFsbHkgdHJpZ2dlciB0aGUgJ0AnIG9yICcmbHQ7JyBmZWF0dXJlcyBvZiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi0tZm9ybTwvc3Bhbj4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLWciPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LWcsIC0tZ2xvYm9mZjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBzd2l0Y2hlcyBvZmYgdGhlICJVUkwgZ2xvYmJpbmcgcGFyc2VyIi4gV2hlbiB5b3Ugc2V0IHRoaXMgb3B0aW9uLCB5b3UgY2FuIHNwZWNpZnkgVVJMcyB0aGF0IGNvbnRhaW4gdGhlIGxldHRlcnMge31bXSB3aXRob3V0IGhhdmluZyB0aGVtIGJlaW5nIGludGVycHJldGVkIGJ5IGN1cmwgaXRzZWxmLiBOb3RlIHRoYXQgdGhlc2UgbGV0dGVycyBhcmUgbm90IG5vcm1hbCBsZWdhbCBVUkwgY29udGVudHMgYnV0IHRoZXkgc2hvdWxkIGJlIGVuY29kZWQgYWNjb3JkaW5nIHRvIHRoZSBVUkkgc3RhbmRhcmQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLUciPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LUcsIC0tZ2V0PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gdXNlZCwgdGhpcyBvcHRpb24gd2lsbCBtYWtlIGFsbCBkYXRhIHNwZWNpZmllZCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1kIj4tZCwgLS1kYXRhPC9hPiBvciA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWRhdGEtYmluYXJ5Ij4tLWRhdGEtYmluYXJ5PC9hPiB0byBiZSB1c2VkIGluIGEgSFRUUCBHRVQgcmVxdWVzdCBpbnN0ZWFkIG9mIHRoZSBQT1NUIHJlcXVlc3QgdGhhdCBvdGhlcndpc2Ugd291bGQgYmUgdXNlZC4gVGhlIGRhdGEgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgVVJMIHdpdGggYSAnPycgc2VwYXJhdG9yLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCAtSSwgdGhlIFBPU1QgZGF0YSB3aWxsIGluc3RlYWQgYmUgYXBwZW5kZWQgdG8gdGhlIFVSTCB3aXRoIGEgSEVBRCByZXF1ZXN0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBtYWtlIG5vIGRpZmZlcmVuY2UuIFRoaXMgaXMgYmVjYXVzZSB1bmRvaW5nIGEgR0VUIGRvZXNuJ3QgbWFrZSBzZW5zZSwgYnV0IHlvdSBzaG91bGQgdGhlbiBpbnN0ZWFkIGVuZm9yY2UgdGhlIGFsdGVybmF0aXZlIG1ldGhvZCB5b3UgcHJlZmVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1IIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1ILCAtLWhlYWRlciAmbHQ7aGVhZGVyJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oSFRUUCkgRXh0cmEgaGVhZGVyIHRvIHVzZSB3aGVuIGdldHRpbmcgYSB3ZWIgcGFnZS4gWW91IG1heSBzcGVjaWZ5IGFueSBudW1iZXIgb2YgZXh0cmEgaGVhZGVycy4gTm90ZSB0aGF0IGlmIHlvdSBzaG91bGQgYWRkIGEgY3VzdG9tIGhlYWRlciB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIG9uZSBvZiB0aGUgaW50ZXJuYWwgb25lcyBjdXJsIHdvdWxkIHVzZSwgeW91ciBleHRlcm5hbGx5IHNldCBoZWFkZXIgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGludGVybmFsIG9uZS4gVGhpcyBhbGxvd3MgeW91IHRvIG1ha2UgZXZlbiB0cmlja2llciBzdHVmZiB0aGFuIGN1cmwgd291bGQgbm9ybWFsbHkgZG8uIFlvdSBzaG91bGQgbm90IHJlcGxhY2UgaW50ZXJuYWxseSBzZXQgaGVhZGVycyB3aXRob3V0IGtub3dpbmcgcGVyZmVjdGx5IHdlbGwgd2hhdCB5b3UncmUgZG9pbmcuIFJlbW92ZSBhbiBpbnRlcm5hbCBoZWFkZXIgYnkgZ2l2aW5nIGEgcmVwbGFjZW1lbnQgd2l0aG91dCBjb250ZW50IG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb2xvbiwgYXMgaW46IC1IICJIb3N0OiIuIElmIHlvdSBzZW5kIHRoZSBjdXN0b20gaGVhZGVyIHdpdGggbm8tdmFsdWUgdGhlbiBpdHMgaGVhZGVyIG11c3QgYmUgdGVybWluYXRlZCB3aXRoIGEgc2VtaWNvbG9uLCBzdWNoIGFzIC1IICJYLUN1c3RvbS1IZWFkZXI7IiB0byBzZW5kICJYLUN1c3RvbS1IZWFkZXI6Ii4gCis8cCBjbGFzcz0ibGV2ZWwxIj5jdXJsIHdpbGwgbWFrZSBzdXJlIHRoYXQgZWFjaCBoZWFkZXIgeW91IGFkZC9yZXBsYWNlIGlzIHNlbnQgd2l0aCB0aGUgcHJvcGVyIGVuZC1vZi1saW5lIG1hcmtlciwgeW91IHNob3VsZCB0aHVzIDxzcGFuIENsYXNzPSJib2xkIj5ub3Q8L3NwYW4+IGFkZCB0aGF0IGFzIGEgcGFydCBvZiB0aGUgaGVhZGVyIGNvbnRlbnQ6IGRvIG5vdCBhZGQgbmV3bGluZXMgb3IgY2FycmlhZ2UgcmV0dXJucywgdGhleSB3aWxsIG9ubHkgbWVzcyB0aGluZ3MgdXAgZm9yIHlvdS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TZWUgYWxzbyB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLUEiPi1BLCAtLXVzZXItYWdlbnQ8L2E+IGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtZSI+LWUsIC0tcmVmZXJlcjwvYT4gb3B0aW9ucy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyB0byBhZGQvcmVwbGFjZS9yZW1vdmUgbXVsdGlwbGUgaGVhZGVycy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWhvc3RwdWJtZDUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1ob3N0cHVibWQ1ICZsdDttZDUmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBzdHJpbmcgY29udGFpbmluZyAzMiBoZXhhZGVjaW1hbCBkaWdpdHMuIFRoZSBzdHJpbmcgc2hvdWxkIGJlIHRoZSAxMjggYml0IE1ENSBjaGVja3N1bSBvZiB0aGUgcmVtb3RlIGhvc3QncyBwdWJsaWMga2V5LCBjdXJsIHdpbGwgcmVmdXNlIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIGhvc3QgdW5sZXNzIHRoZSBtZDVzdW1zIG1hdGNoLiBUaGlzIG9wdGlvbiBpcyBvbmx5IGZvciBTQ1AgYW5kIFNGVFAgdHJhbnNmZXJzLiAoQWRkZWQgaW4gNy4xNy4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0taWdub3JlLWNvbnRlbnQtbGVuZ3RoIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0taWdub3JlLWNvbnRlbnQtbGVuZ3RoPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBJZ25vcmUgdGhlIENvbnRlbnQtTGVuZ3RoIGhlYWRlci4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBzZXJ2ZXJzIHJ1bm5pbmcgQXBhY2hlIDEueCwgd2hpY2ggd2lsbCByZXBvcnQgaW5jb3JyZWN0IENvbnRlbnQtTGVuZ3RoIGZvciBmaWxlcyBsYXJnZXIgdGhhbiAyIGdpZ2FieXRlcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItaSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4taSwgLS1pbmNsdWRlPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBJbmNsdWRlIHRoZSBIVFRQLWhlYWRlciBpbiB0aGUgb3V0cHV0LiBUaGUgSFRUUC1oZWFkZXIgaW5jbHVkZXMgdGhpbmdzIGxpa2Ugc2VydmVyLW5hbWUsIGRhdGUgb2YgdGhlIGRvY3VtZW50LCBIVFRQLXZlcnNpb24gYW5kIG1vcmUuLi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItSSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tSSwgLS1oZWFkPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQL0ZUUC9GSUxFKSBGZXRjaCB0aGUgSFRUUC1oZWFkZXIgb25seSEgSFRUUC1zZXJ2ZXJzIGZlYXR1cmUgdGhlIGNvbW1hbmQgSEVBRCB3aGljaCB0aGlzIHVzZXMgdG8gZ2V0IG5vdGhpbmcgYnV0IHRoZSBoZWFkZXIgb2YgYSBkb2N1bWVudC4gV2hlbiB1c2VkIG9uIGEgRlRQIG9yIEZJTEUgZmlsZSwgY3VybCBkaXNwbGF5cyB0aGUgZmlsZSBzaXplIGFuZCBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9ubHkuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1pbnRlcmZhY2UiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1pbnRlcmZhY2UgJmx0O25hbWUmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBlcmZvcm0gYW4gb3BlcmF0aW9uIHVzaW5nIGEgc3BlY2lmaWVkIGludGVyZmFjZS4gWW91IGNhbiBlbnRlciBpbnRlcmZhY2UgbmFtZSwgSVAgYWRkcmVzcyBvciBob3N0IG5hbWUuIEFuIGV4YW1wbGUgY291bGQgbG9vayBsaWtlOiAKKzxwIGNsYXNzPSJsZXZlbDEiPiZuYnNwO2N1cmwgLS1pbnRlcmZhY2UgZXRoMDoxIDxhIGhyZWY9Imh0dHA6Ly93d3cubmV0c2NhcGUuY29tLyI+aHR0cDovL3d3dy5uZXRzY2FwZS5jb20vPC9hPiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItaiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4taiwgLS1qdW5rLXNlc3Npb24tY29va2llczwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oSFRUUCkgV2hlbiBjdXJsIGlzIHRvbGQgdG8gcmVhZCBjb29raWVzIGZyb20gYSBnaXZlbiBmaWxlLCB0aGlzIG9wdGlvbiB3aWxsIG1ha2UgaXQgZGlzY2FyZCBhbGwgInNlc3Npb24gY29va2llcyIuIFRoaXMgd2lsbCBiYXNpY2FsbHkgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgaWYgYSBuZXcgc2Vzc2lvbiBpcyBzdGFydGVkLiBUeXBpY2FsIGJyb3dzZXJzIGFsd2F5cyBkaXNjYXJkIHNlc3Npb24gY29va2llcyB3aGVuIHRoZXkncmUgY2xvc2VkIGRvd24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLUoiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LUosIC0tcmVtb3RlLWhlYWRlci1uYW1lPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBUaGlzIG9wdGlvbiB0ZWxscyB0aGUgLU8sIC0tcmVtb3RlLW5hbWUgb3B0aW9uIHRvIHVzZSB0aGUgc2VydmVyLXNwZWNpZmllZCBDb250ZW50LURpc3Bvc2l0aW9uIGZpbGVuYW1lIGluc3RlYWQgb2YgZXh0cmFjdGluZyBhIGZpbGVuYW1lIGZyb20gdGhlIFVSTC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItayI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4taywgLS1pbnNlY3VyZTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oU1NMKSBUaGlzIG9wdGlvbiBleHBsaWNpdGx5IGFsbG93cyBjdXJsIHRvIHBlcmZvcm0gImluc2VjdXJlIiBTU0wgY29ubmVjdGlvbnMgYW5kIHRyYW5zZmVycy4gQWxsIFNTTCBjb25uZWN0aW9ucyBhcmUgYXR0ZW1wdGVkIHRvIGJlIG1hZGUgc2VjdXJlIGJ5IHVzaW5nIHRoZSBDQSBjZXJ0aWZpY2F0ZSBidW5kbGUgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuIFRoaXMgbWFrZXMgYWxsIGNvbm5lY3Rpb25zIGNvbnNpZGVyZWQgImluc2VjdXJlIiBmYWlsIHVubGVzcyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtayI+LWssIC0taW5zZWN1cmU8L2E+IGlzIHVzZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+U2VlIHRoaXMgb25saW5lIHJlc291cmNlIGZvciBmdXJ0aGVyIGRldGFpbHM6IDxzcGFuIENsYXNzPSJib2xkIj48YSBocmVmPSJodHRwOi8vY3VybC5oYXh4LnNlL2RvY3Mvc3NsY2VydHMuaHRtbCI+aHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL3NzbGNlcnRzLmh0bWw8L2E+PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1LIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1LLCAtLWNvbmZpZyAmbHQ7Y29uZmlnIGZpbGUmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNwZWNpZnkgd2hpY2ggY29uZmlnIGZpbGUgdG8gcmVhZCBjdXJsIGFyZ3VtZW50cyBmcm9tLiBUaGUgY29uZmlnIGZpbGUgaXMgYSB0ZXh0IGZpbGUgaW4gd2hpY2ggY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBjYW4gYmUgd3JpdHRlbiB3aGljaCB0aGVuIHdpbGwgYmUgdXNlZCBhcyBpZiB0aGV5IHdlcmUgd3JpdHRlbiBvbiB0aGUgYWN0dWFsIGNvbW1hbmQgbGluZS4gT3B0aW9ucyBhbmQgdGhlaXIgcGFyYW1ldGVycyBtdXN0IGJlIHNwZWNpZmllZCBvbiB0aGUgc2FtZSBjb25maWcgZmlsZSBsaW5lLCBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSwgY29sb24sIHRoZSBlcXVhbHMgc2lnbiBvciBhbnkgY29tYmluYXRpb24gdGhlcmVvZiAoaG93ZXZlciwgdGhlIHByZWZlcnJlZCBzZXBhcmF0b3IgaXMgdGhlIGVxdWFscyBzaWduKS4gSWYgdGhlIHBhcmFtZXRlciBpcyB0byBjb250YWluIHdoaXRlc3BhY2UsIHRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBlbmNsb3NlZCB3aXRoaW4gcXVvdGVzLiBXaXRoaW4gZG91YmxlIHF1b3RlcywgdGhlIGZvbGxvd2luZyBlc2NhcGUgc2VxdWVuY2VzIGFyZSBhdmFpbGFibGU6IFxcLCBcIiwgXHQsIFxuLCBcciBhbmQgXHYuIEEgYmFja3NsYXNoIHByZWNlZGluZyBhbnkgb3RoZXIgbGV0dGVyIGlzIGlnbm9yZWQuIElmIHRoZSBmaXJzdCBjb2x1bW4gb2YgYSBjb25maWcgbGluZSBpcyBhICcjJyBjaGFyYWN0ZXIsIHRoZSByZXN0IG9mIHRoZSBsaW5lIHdpbGwgYmUgdHJlYXRlZCBhcyBhIGNvbW1lbnQuIE9ubHkgd3JpdGUgb25lIG9wdGlvbiBwZXIgcGh5c2ljYWwgbGluZSBpbiB0aGUgY29uZmlnIGZpbGUuIAorPHAgY2xhc3M9ImxldmVsMSI+U3BlY2lmeSB0aGUgZmlsZW5hbWUgdG8gLUssIC0tY29uZmlnIGFzICctJyB0byBtYWtlIGN1cmwgcmVhZCB0aGUgZmlsZSBmcm9tIHN0ZGluLiAKKzxwIGNsYXNzPSJsZXZlbDEiPk5vdGUgdGhhdCB0byBiZSBhYmxlIHRvIHNwZWNpZnkgYSBVUkwgaW4gdGhlIGNvbmZpZyBmaWxlLCB5b3UgbmVlZCB0byBzcGVjaWZ5IGl0IHVzaW5nIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLXVybCI+LS11cmw8L2E+IG9wdGlvbiwgYW5kIG5vdCBieSBzaW1wbHkgd3JpdGluZyB0aGUgVVJMIG9uIGl0cyBvd24gbGluZS4gU28sIGl0IGNvdWxkIGxvb2sgc2ltaWxhciB0byB0aGlzOiAKKzxwIGNsYXNzPSJsZXZlbDEiPnVybCA9ICI8YSBocmVmPSJodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvIj5odHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvPC9hPiIgCis8cCBjbGFzcz0ibGV2ZWwxIj5Mb25nIG9wdGlvbiBuYW1lcyBjYW4gb3B0aW9uYWxseSBiZSBnaXZlbiBpbiB0aGUgY29uZmlnIGZpbGUgd2l0aG91dCB0aGUgaW5pdGlhbCBkb3VibGUgZGFzaGVzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gY3VybCBpcyBpbnZva2VkLCBpdCBhbHdheXMgKHVubGVzcyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtcSI+LXE8L2E+IGlzIHVzZWQpIGNoZWNrcyBmb3IgYSBkZWZhdWx0IGNvbmZpZyBmaWxlIGFuZCB1c2VzIGl0IGlmIGZvdW5kLiBUaGUgZGVmYXVsdCBjb25maWcgZmlsZSBpcyBjaGVja2VkIGZvciBpbiB0aGUgZm9sbG93aW5nIHBsYWNlcyBpbiB0aGlzIG9yZGVyOiAKKzxwIGNsYXNzPSJsZXZlbDEiPjEpIGN1cmwgdHJpZXMgdG8gZmluZCB0aGUgImhvbWUgZGlyIjogSXQgZmlyc3QgY2hlY2tzIGZvciB0aGUgQ1VSTF9IT01FIGFuZCB0aGVuIHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlcy4gRmFpbGluZyB0aGF0LCBpdCB1c2VzIGdldHB3dWlkKCkgb24gVU5JWC1saWtlIHN5c3RlbXMgKHdoaWNoIHJldHVybnMgdGhlIGhvbWUgZGlyIGdpdmVuIHRoZSBjdXJyZW50IHVzZXIgaW4geW91ciBzeXN0ZW0pLiBPbiBXaW5kb3dzLCBpdCB0aGVuIGNoZWNrcyBmb3IgdGhlIEFQUERBVEEgdmFyaWFibGUsIG9yIGFzIGEgbGFzdCByZXNvcnQgdGhlICclVVNFUlBST0ZJTEUlXEFwcGxpY2F0aW9uIERhdGEnLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjIpIE9uIHdpbmRvd3MsIGlmIHRoZXJlIGlzIG5vIF9jdXJscmMgZmlsZSBpbiB0aGUgaG9tZSBkaXIsIGl0IGNoZWNrcyBmb3Igb25lIGluIHRoZSBzYW1lIGRpciB0aGUgY3VybCBleGVjdXRhYmxlIGlzIHBsYWNlZC4gT24gVU5JWC1saWtlIHN5c3RlbXMsIGl0IHdpbGwgc2ltcGx5IHRyeSB0byBsb2FkIC5jdXJscmMgZnJvbSB0aGUgZGV0ZXJtaW5lZCBob21lIGRpci4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDEiPiMgLS0tIEV4YW1wbGUgZmlsZSAtLS0gIyB0aGlzIGlzIGEgY29tbWVudCB1cmwgPSAiY3VybC5oYXh4LnNlIiBvdXRwdXQgPSAiY3VybGhlcmUuaHRtbCIgdXNlci1hZ2VudCA9ICJzdXBlcmFnZW50LzEuMCIgCis8cCBjbGFzcz0ibGV2ZWwxIj4jIGFuZCBmZXRjaCBhbm90aGVyIFVSTCB0b28gdXJsID0gImN1cmwuaGF4eC5zZS9kb2NzL21hbnBhZ2UuaHRtbCIgLU8gcmVmZXJlciA9ICI8YSBocmVmPSJodHRwOi8vbm93aGVyZWF0YWxsLmNvbS8iPmh0dHA6Ly9ub3doZXJlYXRhbGwuY29tLzwvYT4iICMgLS0tIEVuZCBvZiBleGFtcGxlIGZpbGUgLS0tIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyB0byBsb2FkIG11bHRpcGxlIGNvbmZpZyBmaWxlcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWtlZXBhbGl2ZS10aW1lIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0ta2VlcGFsaXZlLXRpbWUgJmx0O3NlY29uZHMmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIHNldHMgdGhlIHRpbWUgYSBjb25uZWN0aW9uIG5lZWRzIHRvIHJlbWFpbiBpZGxlIGJlZm9yZSBzZW5kaW5nIGtlZXBhbGl2ZSBwcm9iZXMgYW5kIHRoZSB0aW1lIGJldHdlZW4gaW5kaXZpZHVhbCBrZWVwYWxpdmUgcHJvYmVzLiBJdCBpcyBjdXJyZW50bHkgZWZmZWN0aXZlIG9uIG9wZXJhdGluZyBzeXN0ZW1zIG9mZmVyaW5nIHRoZSBUQ1BfS0VFUElETEUgYW5kIFRDUF9LRUVQSU5UVkwgc29ja2V0IG9wdGlvbnMgKG1lYW5pbmcgTGludXgsIHJlY2VudCBBSVgsIEhQLVVYIGFuZCBtb3JlKS4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBpZiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLW5vLWtlZXBhbGl2ZSI+LS1uby1rZWVwYWxpdmU8L2E+IGlzIHVzZWQuIChBZGRlZCBpbiA3LjE4LjApIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBtdWx0aXBsZSB0aW1lcywgdGhlIGxhc3Qgb2NjdXJyZW5jZSBzZXRzIHRoZSBhbW91bnQuIElmIHVuc3BlY2lmaWVkLCB0aGUgb3B0aW9uIGRlZmF1bHRzIHRvIDYwIHNlY29uZHMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1rZXkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1rZXkgJmx0O2tleSZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KFNTTC9TU0gpIFByaXZhdGUga2V5IGZpbGUgbmFtZS4gQWxsb3dzIHlvdSB0byBwcm92aWRlIHlvdXIgcHJpdmF0ZSBrZXkgaW4gdGhpcyBzZXBhcmF0ZSBmaWxlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWtleS10eXBlIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0ta2V5LXR5cGUgJmx0O3R5cGUmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihTU0wpIFByaXZhdGUga2V5IGZpbGUgdHlwZS4gU3BlY2lmeSB3aGljaCB0eXBlIHlvdXIgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS1rZXkiPi0ta2V5PC9hPiBwcm92aWRlZCBwcml2YXRlIGtleSBpcy4gREVSLCBQRU0sIGFuZCBFTkcgYXJlIHN1cHBvcnRlZC4gSWYgbm90IHNwZWNpZmllZCwgUEVNIGlzIGFzc3VtZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0ta3JiIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0ta3JiICZsdDtsZXZlbCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEZUUCkgRW5hYmxlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGFuZCB1c2UuIFRoZSBsZXZlbCBtdXN0IGJlIGVudGVyZWQgYW5kIHNob3VsZCBiZSBvbmUgb2YgJ2NsZWFyJywgJ3NhZmUnLCAnY29uZmlkZW50aWFsJywgb3IgJ3ByaXZhdGUnLiBTaG91bGQgeW91IHVzZSBhIGxldmVsIHRoYXQgaXMgbm90IG9uZSBvZiB0aGVzZSwgJ3ByaXZhdGUnIHdpbGwgaW5zdGVhZCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIHJlcXVpcmVzIGEgbGlicmFyeSBidWlsdCB3aXRoIGtlcmJlcm9zNCBvciBHU1NBUEkgKEdTUy1OZWdvdGlhdGUpIHN1cHBvcnQuIFRoaXMgaXMgbm90IHZlcnkgY29tbW9uLiBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLVYiPi1WLCAtLXZlcnNpb248L2E+IHRvIHNlZSBpZiB5b3VyIGN1cmwgc3VwcG9ydHMgaXQuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1sIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1sLCAtLWxpc3Qtb25seTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oRlRQKSBXaGVuIGxpc3RpbmcgYW4gRlRQIGRpcmVjdG9yeSwgdGhpcyBzd2l0Y2ggZm9yY2VzIGEgbmFtZS1vbmx5IHZpZXcuIEVzcGVjaWFsbHkgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1hY2hpbmUtcGFyc2UgdGhlIGNvbnRlbnRzIG9mIGFuIEZUUCBkaXJlY3Rvcnkgc2luY2UgdGhlIG5vcm1hbCBkaXJlY3RvcnkgdmlldyBkb2Vzbid0IHVzZSBhIHN0YW5kYXJkIGxvb2sgb3IgZm9ybWF0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIGNhdXNlcyBhbiBGVFAgTkxTVCBjb21tYW5kIHRvIGJlIHNlbnQuICBTb21lIEZUUCBzZXJ2ZXJzIGxpc3Qgb25seSBmaWxlcyBpbiB0aGVpciByZXNwb25zZSB0byBOTFNUOyB0aGV5IGRvIG5vdCBpbmNsdWRlIHN1YmRpcmVjdG9yaWVzIGFuZCBzeW1ib2xpYyBsaW5rcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1MIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1MLCAtLWxvY2F0aW9uPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQL0hUVFBTKSBJZiB0aGUgc2VydmVyIHJlcG9ydHMgdGhhdCB0aGUgcmVxdWVzdGVkIHBhZ2UgaGFzIG1vdmVkIHRvIGEgZGlmZmVyZW50IGxvY2F0aW9uIChpbmRpY2F0ZWQgd2l0aCBhIExvY2F0aW9uOiBoZWFkZXIgYW5kIGEgM1hYIHJlc3BvbnNlIGNvZGUpLCB0aGlzIG9wdGlvbiB3aWxsIG1ha2UgY3VybCByZWRvIHRoZSByZXF1ZXN0IG9uIHRoZSBuZXcgcGxhY2UuIElmIHVzZWQgdG9nZXRoZXIgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtaSI+LWksIC0taW5jbHVkZTwvYT4gb3IgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLUkiPi1JLCAtLWhlYWQ8L2E+LCBoZWFkZXJzIGZyb20gYWxsIHJlcXVlc3RlZCBwYWdlcyB3aWxsIGJlIHNob3duLiBXaGVuIGF1dGhlbnRpY2F0aW9uIGlzIHVzZWQsIGN1cmwgb25seSBzZW5kcyBpdHMgY3JlZGVudGlhbHMgdG8gdGhlIGluaXRpYWwgaG9zdC4gSWYgYSByZWRpcmVjdCB0YWtlcyBjdXJsIHRvIGEgZGlmZmVyZW50IGhvc3QsIGl0IHdvbid0IGJlIGFibGUgdG8gaW50ZXJjZXB0IHRoZSB1c2VyK3Bhc3N3b3JkLiBTZWUgYWxzbyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWxvY2F0aW9uLXRydXN0ZWQiPi0tbG9jYXRpb24tdHJ1c3RlZDwvYT4gb24gaG93IHRvIGNoYW5nZSB0aGlzLiBZb3UgY2FuIGxpbWl0IHRoZSBhbW91bnQgb2YgcmVkaXJlY3RzIHRvIGZvbGxvdyBieSB1c2luZyB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS1tYXgtcmVkaXJzIj4tLW1heC1yZWRpcnM8L2E+IG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIGN1cmwgZm9sbG93cyBhIHJlZGlyZWN0IGFuZCB0aGUgcmVxdWVzdCBpcyBub3QgYSBwbGFpbiBHRVQgKGZvciBleGFtcGxlIFBPU1Qgb3IgUFVUKSwgaXQgd2lsbCBkbyB0aGUgZm9sbG93aW5nIHJlcXVlc3Qgd2l0aCBhIEdFVCBpZiB0aGUgSFRUUCByZXNwb25zZSB3YXMgMzAxLCAzMDIsIG9yIDMwMy4gSWYgdGhlIHJlc3BvbnNlIGNvZGUgd2FzIGFueSBvdGhlciAzeHggY29kZSwgY3VybCB3aWxsIHJlLXNlbmQgdGhlIGZvbGxvd2luZyByZXF1ZXN0IHVzaW5nIHRoZSBzYW1lIHVubW9kaWZpZWQgbWV0aG9kLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tbGliY3VybCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLWxpYmN1cmwgJmx0O2ZpbGUmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFwcGVuZCB0aGlzIG9wdGlvbiB0byBhbnkgb3JkaW5hcnkgY3VybCBjb21tYW5kIGxpbmUsIGFuZCB5b3Ugd2lsbCBnZXQgYSBsaWJjdXJsLXVzaW5nIEMgc291cmNlIGNvZGUgd3JpdHRlbiB0byB0aGUgZmlsZSB0aGF0IGRvZXMgdGhlIGVxdWl2YWxlbnQgb2Ygd2hhdCB5b3VyIGNvbW1hbmQtbGluZSBvcGVyYXRpb24gZG9lcyEgCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IGdpdmVuIGZpbGUgbmFtZSB3aWxsIGJlIHVzZWQuIChBZGRlZCBpbiA3LjE2LjEpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1saW1pdC1yYXRlIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tbGltaXQtcmF0ZSAmbHQ7c3BlZWQmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNwZWNpZnkgdGhlIG1heGltdW0gdHJhbnNmZXIgcmF0ZSB5b3Ugd2FudCBjdXJsIHRvIHVzZS4gVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIGxpbWl0ZWQgcGlwZSBhbmQgeW91J2QgbGlrZSB5b3VyIHRyYW5zZmVyIG5vdCB0byB1c2UgeW91ciBlbnRpcmUgYmFuZHdpZHRoLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBnaXZlbiBzcGVlZCBpcyBtZWFzdXJlZCBpbiBieXRlcy9zZWNvbmQsIHVubGVzcyBhIHN1ZmZpeCBpcyBhcHBlbmRlZC4gQXBwZW5kaW5nICdrJyBvciAnSycgd2lsbCBjb3VudCB0aGUgbnVtYmVyIGFzIGtpbG9ieXRlcywgJ20nIG9yIE0nIG1ha2VzIGl0IG1lZ2FieXRlcywgd2hpbGUgJ2cnIG9yICdHJyBtYWtlcyBpdCBnaWdhYnl0ZXMuIEV4YW1wbGVzOiAyMDBLLCAzbSBhbmQgMUcuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIGdpdmVuIHJhdGUgaXMgdGhlIGF2ZXJhZ2Ugc3BlZWQgY291bnRlZCBkdXJpbmcgdGhlIGVudGlyZSB0cmFuc2Zlci4gSXQgbWVhbnMgdGhhdCBjdXJsIG1pZ2h0IHVzZSBoaWdoZXIgdHJhbnNmZXIgc3BlZWRzIGluIHNob3J0IGJ1cnN0cywgYnV0IG92ZXIgdGltZSBpdCB1c2VzIG5vIG1vcmUgdGhhbiB0aGUgZ2l2ZW4gcmF0ZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3UgYWxzbyB1c2UgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1ZIj4tWSwgLS1zcGVlZC1saW1pdDwvYT4gb3B0aW9uLCB0aGF0IG9wdGlvbiB3aWxsIHRha2UgcHJlY2VkZW5jZSBhbmQgbWlnaHQgY3JpcHBsZSB0aGUgcmF0ZS1saW1pdGluZyBzbGlnaHRseSwgdG8gaGVscCBrZWVwaW5nIHRoZSBzcGVlZC1saW1pdCBsb2dpYyB3b3JraW5nLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWxvY2FsLXBvcnQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1sb2NhbC1wb3J0ICZsdDtudW0mZ3Q7Wy1udW1dPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldCBhIHByZWZlcnJlZCBudW1iZXIgb3IgcmFuZ2Ugb2YgbG9jYWwgcG9ydCBudW1iZXJzIHRvIHVzZSBmb3IgdGhlIGNvbm5lY3Rpb24ocykuICBOb3RlIHRoYXQgcG9ydCBudW1iZXJzIGJ5IG5hdHVyZSBhcmUgYSBzY2FyY2UgcmVzb3VyY2UgdGhhdCB3aWxsIGJlIGJ1c3kgYXQgdGltZXMgc28gc2V0dGluZyB0aGlzIHJhbmdlIHRvIHNvbWV0aGluZyB0b28gbmFycm93IG1pZ2h0IGNhdXNlIHVubmVjZXNzYXJ5IGNvbm5lY3Rpb24gc2V0dXAgZmFpbHVyZXMuIChBZGRlZCBpbiA3LjE1LjIpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1sb2NhdGlvbi10cnVzdGVkIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tbG9jYXRpb24tdHJ1c3RlZDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oSFRUUC9IVFRQUykgTGlrZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtTCI+LUwsIC0tbG9jYXRpb248L2E+LCBidXQgd2lsbCBhbGxvdyBzZW5kaW5nIHRoZSBuYW1lICsgcGFzc3dvcmQgdG8gYWxsIGhvc3RzIHRoYXQgdGhlIHNpdGUgbWF5IHJlZGlyZWN0IHRvLiBUaGlzIG1heSBvciBtYXkgbm90IGludHJvZHVjZSBhIHNlY3VyaXR5IGJyZWFjaCBpZiB0aGUgc2l0ZSByZWRpcmVjdHMgeW91IHRvIGEgc2l0ZSB0byB3aGljaCB5b3UnbGwgc2VuZCB5b3VyIGF1dGhlbnRpY2F0aW9uIGluZm8gKHdoaWNoIGlzIHBsYWludGV4dCBpbiB0aGUgY2FzZSBvZiBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uKS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItbSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tbSwgLS1tYXgtdGltZSAmbHQ7c2Vjb25kcyZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+TWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCB5b3UgYWxsb3cgdGhlIHdob2xlIG9wZXJhdGlvbiB0byB0YWtlLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHByZXZlbnRpbmcgeW91ciBiYXRjaCBqb2JzIGZyb20gaGFuZ2luZyBmb3IgaG91cnMgZHVlIHRvIHNsb3cgbmV0d29ya3Mgb3IgbGlua3MgZ29pbmcgZG93bi4gIFNlZSBhbHNvIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWNvbm5lY3QtdGltZW91dCI+LS1jb25uZWN0LXRpbWVvdXQ8L2E+IG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1tYWlsLWF1dGgiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1tYWlsLWF1dGggJmx0O2FkZHJlc3MmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihTTVRQKSBTcGVjaWZ5IGEgc2luZ2xlIGFkZHJlc3MuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGF1dGhlbnRpY2F0aW9uIGFkZHJlc3MgKGlkZW50aXR5KSBvZiBhIHN1Ym1pdHRlZCBtZXNzYWdlIHRoYXQgaXMgYmVpbmcgcmVsYXllZCB0byBhbm90aGVyIHNlcnZlci4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oQWRkZWQgaW4gNy4yNS4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tbWFpbC1mcm9tIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tbWFpbC1mcm9tICZsdDthZGRyZXNzJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oU01UUCkgU3BlY2lmeSBhIHNpbmdsZSBhZGRyZXNzIHRoYXQgdGhlIGdpdmVuIG1haWwgc2hvdWxkIGdldCBzZW50IGZyb20uIAorPHAgY2xhc3M9ImxldmVsMSI+KEFkZGVkIGluIDcuMjAuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLW1heC1maWxlc2l6ZSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLW1heC1maWxlc2l6ZSAmbHQ7Ynl0ZXMmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNwZWNpZnkgdGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIGEgZmlsZSB0byBkb3dubG9hZC4gSWYgdGhlIGZpbGUgcmVxdWVzdGVkIGlzIGxhcmdlciB0aGFuIHRoaXMgdmFsdWUsIHRoZSB0cmFuc2ZlciB3aWxsIG5vdCBzdGFydCBhbmQgY3VybCB3aWxsIHJldHVybiB3aXRoIGV4aXQgY29kZSA2My4gCis8cCBjbGFzcz0ibGV2ZWwxIj48c3BhbiBDbGFzcz0iYm9sZCI+Tk9URTo8L3NwYW4+IFRoZSBmaWxlIHNpemUgaXMgbm90IGFsd2F5cyBrbm93biBwcmlvciB0byBkb3dubG9hZCwgYW5kIGZvciBzdWNoIGZpbGVzIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgZXZlbiBpZiB0aGUgZmlsZSB0cmFuc2ZlciBlbmRzIHVwIGJlaW5nIGxhcmdlciB0aGFuIHRoaXMgZ2l2ZW4gbGltaXQuIFRoaXMgY29uY2VybnMgYm90aCBGVFAgYW5kIEhUVFAgdHJhbnNmZXJzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tbWFpbC1yY3B0Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tbWFpbC1yY3B0ICZsdDthZGRyZXNzJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oU01UUCkgU3BlY2lmeSBhIHNpbmdsZSBhZGRyZXNzIHRoYXQgdGhlIGdpdmVuIG1haWwgc2hvdWxkIGdldCBzZW50IHRvLiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyB0byBzcGVjaWZ5IG1hbnkgcmVjaXBpZW50cy4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oQWRkZWQgaW4gNy4yMC4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tbWF4LXJlZGlycyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLW1heC1yZWRpcnMgJmx0O251bSZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U2V0IG1heGltdW0gbnVtYmVyIG9mIHJlZGlyZWN0aW9uLWZvbGxvd2luZ3MgYWxsb3dlZC4gSWYgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLUwiPi1MLCAtLWxvY2F0aW9uPC9hPiBpcyB1c2VkLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IGN1cmwgZnJvbSBmb2xsb3dpbmcgcmVkaXJlY3Rpb25zICJpbiBhYnN1cmR1bSIuIEJ5IGRlZmF1bHQsIHRoZSBsaW1pdCBpcyBzZXQgdG8gNTAgcmVkaXJlY3Rpb25zLiBTZXQgdGhpcyBvcHRpb24gdG8gLTEgdG8gbWFrZSBpdCBsaW1pdGxlc3MuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1uIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1uLCAtLW5ldHJjPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk1ha2VzIGN1cmwgc2NhbiB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj4ubmV0cmM8L3NwYW4+ICg8c3BhbiBDbGFzcz0iZW1waGFzaXMiPl9uZXRyYzwvc3Bhbj4gb24gV2luZG93cykgZmlsZSBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGZvciBsb2dpbiBuYW1lIGFuZCBwYXNzd29yZC4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgRlRQIG9uIFVOSVguIElmIHVzZWQgd2l0aCBIVFRQLCBjdXJsIHdpbGwgZW5hYmxlIHVzZXIgYXV0aGVudGljYXRpb24uIFNlZSA8c3BhbiBDbGFzcz0ibWFucGFnZSI+bmV0cmMoNCk8L3NwYW4+IG9yIDxzcGFuIENsYXNzPSJtYW5wYWdlIj5mdHAoMSk8L3NwYW4+IGZvciBkZXRhaWxzIG9uIHRoZSBmaWxlIGZvcm1hdC4gQ3VybCB3aWxsIG5vdCBjb21wbGFpbiBpZiB0aGF0IGZpbGUgZG9lc24ndCBoYXZlIHRoZSByaWdodCBwZXJtaXNzaW9ucyAoaXQgc2hvdWxkIG5vdCBiZSBlaXRoZXIgd29ybGQtIG9yIGdyb3VwLXJlYWRhYmxlKS4gVGhlIGVudmlyb25tZW50IHZhcmlhYmxlICJIT01FIiBpcyB1c2VkIHRvIGZpbmQgdGhlIGhvbWUgZGlyZWN0b3J5LiAKKzxwIGNsYXNzPSJsZXZlbDEiPkEgcXVpY2sgYW5kIHZlcnkgc2ltcGxlIGV4YW1wbGUgb2YgaG93IHRvIHNldHVwIGEgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj4ubmV0cmM8L3NwYW4+IHRvIGFsbG93IGN1cmwgdG8gRlRQIHRvIHRoZSBtYWNoaW5lIGhvc3QuZG9tYWluLmNvbSB3aXRoIHVzZXIgbmFtZSAnbXlzZWxmJyBhbmQgcGFzc3dvcmQgJ3NlY3JldCcgc2hvdWxkIGxvb2sgc2ltaWxhciB0bzogCis8cCBjbGFzcz0ibGV2ZWwxIj48c3BhbiBDbGFzcz0iYm9sZCI+bWFjaGluZSBob3N0LmRvbWFpbi5jb20gbG9naW4gbXlzZWxmIHBhc3N3b3JkIHNlY3JldDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tTiwgLS1uby1idWZmZXI8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RGlzYWJsZXMgdGhlIGJ1ZmZlcmluZyBvZiB0aGUgb3V0cHV0IHN0cmVhbS4gSW4gbm9ybWFsIHdvcmsgc2l0dWF0aW9ucywgY3VybCB3aWxsIHVzZSBhIHN0YW5kYXJkIGJ1ZmZlcmVkIG91dHB1dCBzdHJlYW0gdGhhdCB3aWxsIGhhdmUgdGhlIGVmZmVjdCB0aGF0IGl0IHdpbGwgb3V0cHV0IHRoZSBkYXRhIGluIGNodW5rcywgbm90IG5lY2Vzc2FyaWx5IGV4YWN0bHkgd2hlbiB0aGUgZGF0YSBhcnJpdmVzLiBVc2luZyB0aGlzIG9wdGlvbiB3aWxsIGRpc2FibGUgdGhhdCBidWZmZXJpbmcuIAorPHAgY2xhc3M9ImxldmVsMSI+Tm90ZSB0aGF0IHRoaXMgaXMgdGhlIG5lZ2F0ZWQgb3B0aW9uIG5hbWUgZG9jdW1lbnRlZC4gWW91IGNhbiB0aHVzIHVzZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi0tYnVmZmVyPC9zcGFuPiB0byBlbmZvcmNlIHRoZSBidWZmZXJpbmcuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1uZXRyYy1maWxlIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tbmV0cmMtZmlsZTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBpcyBzaW1pbGFyIHRvIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+LS1uZXRyYzwvc3Bhbj4sIGV4Y2VwdCB0aGF0IHlvdSBwcm92aWRlIHRoZSBwYXRoIChhYnNvbHV0ZSBvciByZWxhdGl2ZSkgdG8gdGhlIG5ldHJjIGZpbGUgdGhhdCBDdXJsIHNob3VsZCB1c2UuIFlvdSBjYW4gb25seSBzcGVjaWZ5IG9uZSBuZXRyYyBmaWxlIHBlciBpbnZvY2F0aW9uLiBJZiBzZXZlcmFsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tbmV0cmMtZmlsZSI+LS1uZXRyYy1maWxlPC9hPiBvcHRpb25zIGFyZSBwcm92aWRlZCwgb25seSB0aGUgPHNwYW4gQ2xhc3M9ImJvbGQiPmxhc3Qgb25lPC9zcGFuPiB3aWxsIGJlIHVzZWQuIChBZGRlZCBpbiA3LjIxLjUpIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gb3ZlcnJpZGVzIGFueSB1c2Ugb2YgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj4tLW5ldHJjPC9zcGFuPiBhcyB0aGV5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIEl0IHdpbGwgYWxzbyBhYmlkZSBieSAtLW5ldHJjLW9wdGlvbmFsIGlmIHNwZWNpZmllZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tbmV0cmMtb3B0aW9uYWwiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1uZXRyYy1vcHRpb25hbDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5WZXJ5IHNpbWlsYXIgdG8gPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj4tLW5ldHJjPC9zcGFuPiwgYnV0IHRoaXMgb3B0aW9uIG1ha2VzIHRoZSAubmV0cmMgdXNhZ2UgPHNwYW4gQ2xhc3M9ImJvbGQiPm9wdGlvbmFsPC9zcGFuPiBhbmQgbm90IG1hbmRhdG9yeSBhcyB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj4tLW5ldHJjPC9zcGFuPiBvcHRpb24gZG9lcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tbmVnb3RpYXRlIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tbmVnb3RpYXRlPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBFbmFibGVzIEdTUy1OZWdvdGlhdGUgYXV0aGVudGljYXRpb24uIFRoZSBHU1MtTmVnb3RpYXRlIG1ldGhvZCB3YXMgZGVzaWduZWQgYnkgTWljcm9zb2Z0IGFuZCBpcyB1c2VkIGluIHRoZWlyIHdlYiBhcHBsaWNhdGlvbnMuIEl0IGlzIHByaW1hcmlseSBtZWFudCBhcyBhIHN1cHBvcnQgZm9yIEtlcmJlcm9zNSBhdXRoZW50aWNhdGlvbiBidXQgbWF5IGJlIGFsc28gdXNlZCBhbG9uZyB3aXRoIGFub3RoZXIgYXV0aGVudGljYXRpb24gbWV0aG9kLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgSUVURiBkcmFmdCBkcmFmdC1icmV6YWstc3BuZWdvLWh0dHAtMDQudHh0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHlvdSB3YW50IHRvIGVuYWJsZSBOZWdvdGlhdGUgZm9yIHlvdXIgcHJveHkgYXV0aGVudGljYXRpb24sIHRoZW4gdXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tcHJveHktbmVnb3RpYXRlIj4tLXByb3h5LW5lZ290aWF0ZTwvYT4uIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gcmVxdWlyZXMgYSBsaWJyYXJ5IGJ1aWx0IHdpdGggR1NTQVBJIHN1cHBvcnQuIFRoaXMgaXMgbm90IHZlcnkgY29tbW9uLiBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLVYiPi1WLCAtLXZlcnNpb248L2E+IHRvIHNlZSBpZiB5b3VyIHZlcnNpb24gc3VwcG9ydHMgR1NTLU5lZ290aWF0ZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIHVzaW5nIHRoaXMgb3B0aW9uLCB5b3UgbXVzdCBhbHNvIHByb3ZpZGUgYSBmYWtlIC11LCAtLXVzZXIgb3B0aW9uIHRvIGFjdGl2YXRlIHRoZSBhdXRoZW50aWNhdGlvbiBjb2RlIHByb3Blcmx5LiBTZW5kaW5nIGEgJy11IDonIGlzIGVub3VnaCBhcyB0aGUgdXNlciBuYW1lIGFuZCBwYXNzd29yZCBmcm9tIHRoZSAtdSBvcHRpb24gYXJlbid0IGFjdHVhbGx5IHVzZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgZm9sbG93aW5nIG9jY3VycmVuY2VzIG1ha2Ugbm8gZGlmZmVyZW5jZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLW5vLWtlZXBhbGl2ZSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLW5vLWtlZXBhbGl2ZTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5EaXNhYmxlcyB0aGUgdXNlIG9mIGtlZXBhbGl2ZSBtZXNzYWdlcyBvbiB0aGUgVENQIGNvbm5lY3Rpb24sIGFzIGJ5IGRlZmF1bHQgY3VybCBlbmFibGVzIHRoZW0uIAorPHAgY2xhc3M9ImxldmVsMSI+Tm90ZSB0aGF0IHRoaXMgaXMgdGhlIG5lZ2F0ZWQgb3B0aW9uIG5hbWUgZG9jdW1lbnRlZC4gWW91IGNhbiB0aHVzIHVzZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi0ta2VlcGFsaXZlPC9zcGFuPiB0byBlbmZvcmNlIGtlZXBhbGl2ZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLW5vLXNlc3Npb25pZCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLW5vLXNlc3Npb25pZDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oU1NMKSBEaXNhYmxlIGN1cmwncyB1c2Ugb2YgU1NMIHNlc3Npb24tSUQgY2FjaGluZy4gIEJ5IGRlZmF1bHQgYWxsIHRyYW5zZmVycyBhcmUgZG9uZSB1c2luZyB0aGUgY2FjaGUuIE5vdGUgdGhhdCB3aGlsZSBub3RoaW5nIHNob3VsZCBldmVyIGdldCBodXJ0IGJ5IGF0dGVtcHRpbmcgdG8gcmV1c2UgU1NMIHNlc3Npb24tSURzLCB0aGVyZSBzZWVtIHRvIGJlIGJyb2tlbiBTU0wgaW1wbGVtZW50YXRpb25zIGluIHRoZSB3aWxkIHRoYXQgbWF5IHJlcXVpcmUgeW91IHRvIGRpc2FibGUgdGhpcyBpbiBvcmRlciBmb3IgeW91IHRvIHN1Y2NlZWQuIChBZGRlZCBpbiA3LjE2LjApIAorPHAgY2xhc3M9ImxldmVsMSI+Tm90ZSB0aGF0IHRoaXMgaXMgdGhlIG5lZ2F0ZWQgb3B0aW9uIG5hbWUgZG9jdW1lbnRlZC4gWW91IGNhbiB0aHVzIHVzZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi0tc2Vzc2lvbmlkPC9zcGFuPiB0byBlbmZvcmNlIHNlc3Npb24tSUQgY2FjaGluZy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLW5vcHJveHkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1ub3Byb3h5ICZsdDtuby1wcm94eS1saXN0Jmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Db21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBob3N0cyB3aGljaCBkbyBub3QgdXNlIGEgcHJveHksIGlmIG9uZSBpcyBzcGVjaWZpZWQuIFRoZSBvbmx5IHdpbGRjYXJkIGlzIGEgc2luZ2xlICogY2hhcmFjdGVyLCB3aGljaCBtYXRjaGVzIGFsbCBob3N0cywgYW5kIGVmZmVjdGl2ZWx5IGRpc2FibGVzIHRoZSBwcm94eS4gRWFjaCBuYW1lIGluIHRoaXMgbGlzdCBpcyBtYXRjaGVkIGFzIGVpdGhlciBhIGRvbWFpbiB3aGljaCBjb250YWlucyB0aGUgaG9zdG5hbWUsIG9yIHRoZSBob3N0bmFtZSBpdHNlbGYuIEZvciBleGFtcGxlLCBsb2NhbC5jb20gd291bGQgbWF0Y2ggbG9jYWwuY29tLCBsb2NhbC5jb206ODAsIGFuZCB3d3cubG9jYWwuY29tLCBidXQgbm90IHd3dy5ub3Rsb2NhbC5jb20uICAoQWRkZWQgaW4gNy4xOS40KS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLW50bG0iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1udGxtPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBFbmFibGVzIE5UTE0gYXV0aGVudGljYXRpb24uIFRoZSBOVExNIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB3YXMgZGVzaWduZWQgYnkgTWljcm9zb2Z0IGFuZCBpcyB1c2VkIGJ5IElJUyB3ZWIgc2VydmVycy4gSXQgaXMgYSBwcm9wcmlldGFyeSBwcm90b2NvbCwgcmV2ZXJzZS1lbmdpbmVlcmVkIGJ5IGNsZXZlciBwZW9wbGUgYW5kIGltcGxlbWVudGVkIGluIGN1cmwgYmFzZWQgb24gdGhlaXIgZWZmb3J0cy4gVGhpcyBraW5kIG9mIGJlaGF2aW9yIHNob3VsZCBub3QgYmUgZW5kb3JzZWQsIHlvdSBzaG91bGQgZW5jb3VyYWdlIGV2ZXJ5b25lIHdobyB1c2VzIE5UTE0gdG8gc3dpdGNoIHRvIGEgcHVibGljIGFuZCBkb2N1bWVudGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBpbnN0ZWFkLCBzdWNoIGFzIERpZ2VzdC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3Ugd2FudCB0byBlbmFibGUgTlRMTSBmb3IgeW91ciBwcm94eSBhdXRoZW50aWNhdGlvbiwgdGhlbiB1c2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS1wcm94eS1udGxtIj4tLXByb3h5LW50bG08L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIHJlcXVpcmVzIGEgbGlicmFyeSBidWlsdCB3aXRoIFNTTCBzdXBwb3J0LiBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLVYiPi1WLCAtLXZlcnNpb248L2E+IHRvIHNlZSBpZiB5b3VyIGN1cmwgc3VwcG9ydHMgTlRMTS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBmb2xsb3dpbmcgb2NjdXJyZW5jZXMgbWFrZSBubyBkaWZmZXJlbmNlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1vIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1vLCAtLW91dHB1dCAmbHQ7ZmlsZSZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+V3JpdGUgb3V0cHV0IHRvICZsdDtmaWxlJmd0OyBpbnN0ZWFkIG9mIHN0ZG91dC4gSWYgeW91IGFyZSB1c2luZyB7fSBvciBbXSB0byBmZXRjaCBtdWx0aXBsZSBkb2N1bWVudHMsIHlvdSBjYW4gdXNlICcjJyBmb2xsb3dlZCBieSBhIG51bWJlciBpbiB0aGUgJmx0O2ZpbGUmZ3Q7IHNwZWNpZmllci4gVGhhdCB2YXJpYWJsZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGN1cnJlbnQgc3RyaW5nIGZvciB0aGUgVVJMIGJlaW5nIGZldGNoZWQuIExpa2UgaW46IAorPHAgY2xhc3M9ImxldmVsMSI+Jm5ic3A7IGN1cmwgaHR0cDovL3tvbmUsdHdvfS5zaXRlLmNvbSAtbyAiZmlsZV8jMS50eHQiIAorPHAgY2xhc3M9ImxldmVsMSI+b3IgdXNlIHNldmVyYWwgdmFyaWFibGVzIGxpa2U6IAorPHAgY2xhc3M9ImxldmVsMSI+Jm5ic3A7IGN1cmwgaHR0cDovL3tzaXRlLGhvc3R9Lmhvc3RbMS01XS5jb20gLW8gIiMxXyMyIiAKKzxwIGNsYXNzPSJsZXZlbDEiPllvdSBtYXkgdXNlIHRoaXMgb3B0aW9uIGFzIG1hbnkgdGltZXMgYXMgdGhlIG51bWJlciBvZiBVUkxzIHlvdSBoYXZlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNlZSBhbHNvIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWNyZWF0ZS1kaXJzIj4tLWNyZWF0ZS1kaXJzPC9hPiBvcHRpb24gdG8gY3JlYXRlIHRoZSBsb2NhbCBkaXJlY3RvcmllcyBkeW5hbWljYWxseS4gU3BlY2lmeWluZyB0aGUgb3V0cHV0IGFzICctJyAoYSBzaW5nbGUgZGFzaCkgd2lsbCBmb3JjZSB0aGUgb3V0cHV0IHRvIGJlIGRvbmUgdG8gc3Rkb3V0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1PIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1PLCAtLXJlbW90ZS1uYW1lPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPldyaXRlIG91dHB1dCB0byBhIGxvY2FsIGZpbGUgbmFtZWQgbGlrZSB0aGUgcmVtb3RlIGZpbGUgd2UgZ2V0LiAoT25seSB0aGUgZmlsZSBwYXJ0IG9mIHRoZSByZW1vdGUgZmlsZSBpcyB1c2VkLCB0aGUgcGF0aCBpcyBjdXQgb2ZmLikgCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgcmVtb3RlIGZpbGUgbmFtZSB0byB1c2UgZm9yIHNhdmluZyBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgZ2l2ZW4gVVJMLCBub3RoaW5nIGVsc2UuIAorPHAgY2xhc3M9ImxldmVsMSI+Q29uc2VxdWVudGlhbGx5LCB0aGUgZmlsZSB3aWxsIGJlIHNhdmVkIGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBJZiB5b3Ugd2FudCB0aGUgZmlsZSBzYXZlZCBpbiBhIGRpZmZlcmVudCBkaXJlY3RvcnksIG1ha2Ugc3VyZSB5b3UgY2hhbmdlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYmVmb3JlIHlvdSBpbnZva2UgY3VybCB3aXRoIHRoZSA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iIy1PIj4tTywgLS1yZW1vdGUtbmFtZTwvYT4gZmxhZyEgCis8cCBjbGFzcz0ibGV2ZWwxIj5Zb3UgbWF5IHVzZSB0aGlzIG9wdGlvbiBhcyBtYW55IHRpbWVzIGFzIHRoZSBudW1iZXIgb2YgVVJMcyB5b3UgaGF2ZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItcCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tcCwgLS1wcm94eXR1bm5lbDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIGFuIEhUVFAgcHJveHkgaXMgdXNlZCAoPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLXgiPi14LCAtLXByb3h5PC9hPiksIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugbm9uLUhUVFAgcHJvdG9jb2xzIHRvIGF0dGVtcHQgdG8gdHVubmVsIHRocm91Z2ggdGhlIHByb3h5IGluc3RlYWQgb2YgbWVyZWx5IHVzaW5nIGl0IHRvIGRvIEhUVFAtbGlrZSBvcGVyYXRpb25zLiBUaGUgdHVubmVsIGFwcHJvYWNoIGlzIG1hZGUgd2l0aCB0aGUgSFRUUCBwcm94eSBDT05ORUNUIHJlcXVlc3QgYW5kIHJlcXVpcmVzIHRoYXQgdGhlIHByb3h5IGFsbG93cyBkaXJlY3QgY29ubmVjdCB0byB0aGUgcmVtb3RlIHBvcnQgbnVtYmVyIGN1cmwgd2FudHMgdG8gdHVubmVsIHRocm91Z2ggdG8uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLVAiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LVAsIC0tZnRwLXBvcnQgJmx0O2FkZHJlc3MmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihGVFApIFJldmVyc2VzIHRoZSBkZWZhdWx0IGluaXRpYXRvci9saXN0ZW5lciByb2xlcyB3aGVuIGNvbm5lY3Rpbmcgd2l0aCBGVFAuIFRoaXMgc3dpdGNoIG1ha2VzIGN1cmwgdXNlIGFjdGl2ZSBtb2RlLiBJbiBwcmFjdGljZSwgY3VybCB0aGVuIHRlbGxzIHRoZSBzZXJ2ZXIgdG8gY29ubmVjdCBiYWNrIHRvIHRoZSBjbGllbnQncyBzcGVjaWZpZWQgYWRkcmVzcyBhbmQgcG9ydCwgd2hpbGUgcGFzc2l2ZSBtb2RlIGFza3MgdGhlIHNlcnZlciB0byBzZXR1cCBhbiBJUCBhZGRyZXNzIGFuZCBwb3J0IGZvciBpdCB0byBjb25uZWN0IHRvLiAmbHQ7YWRkcmVzcyZndDsgc2hvdWxkIGJlIG9uZSBvZjogCis8cCBjbGFzcz0ibGV2ZWwyIj4KKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9ImludGVyZmFjZSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5pbnRlcmZhY2U8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+aS5lICJldGgwIiB0byBzcGVjaWZ5IHdoaWNoIGludGVyZmFjZSdzIElQIGFkZHJlc3MgeW91IHdhbnQgdG8gdXNlIChVbml4IG9ubHkpIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iSVAiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+SVAgYWRkcmVzczwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5pLmUgIjE5Mi4xNjguMTAuMSIgdG8gc3BlY2lmeSB0aGUgZXhhY3QgSVAgYWRkcmVzcyAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9Imhvc3QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+aG9zdCBuYW1lPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPmkuZSAibXkuaG9zdC5kb21haW4iIHRvIHNwZWNpZnkgdGhlIG1hY2hpbmUgCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSItIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi08L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+bWFrZSBjdXJsIHBpY2sgdGhlIHNhbWUgSVAgYWRkcmVzcyB0aGF0IGlzIGFscmVhZHkgdXNlZCBmb3IgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiBEaXNhYmxlIHRoZSB1c2Ugb2YgUE9SVCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tZnRwLXBhc3YiPi0tZnRwLXBhc3Y8L2E+LiBEaXNhYmxlIHRoZSBhdHRlbXB0IHRvIHVzZSB0aGUgRVBSVCBjb21tYW5kIGluc3RlYWQgb2YgUE9SVCBieSB1c2luZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWRpc2FibGUtZXBydCI+LS1kaXNhYmxlLWVwcnQ8L2E+LiBFUFJUIGlzIHJlYWxseSBQT1JUKysuIAorPHAgY2xhc3M9ImxldmVsMSI+U3RhcnRpbmcgaW4gNy4xOS41LCB5b3UgY2FuIGFwcGVuZCAiOltzdGFydF0tW2VuZF0iIHRvIHRoZSByaWdodCBvZiB0aGUgYWRkcmVzcywgdG8gdGVsbCBjdXJsIHdoYXQgVENQIHBvcnQgcmFuZ2UgdG8gdXNlLiBUaGF0IG1lYW5zIHlvdSBzcGVjaWZ5IGEgcG9ydCByYW5nZSwgZnJvbSBhIGxvd2VyIHRvIGEgaGlnaGVyIG51bWJlci4gQSBzaW5nbGUgbnVtYmVyIHdvcmtzIGFzIHdlbGwsIGJ1dCBkbyBub3RlIHRoYXQgaXQgaW5jcmVhc2VzIHRoZSByaXNrIG9mIGZhaWx1cmUgc2luY2UgdGhlIHBvcnQgbWF5IG5vdCBiZSBhdmFpbGFibGUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1wYXNzIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tcGFzcyAmbHQ7cGhyYXNlJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oU1NML1NTSCkgUGFzc3BocmFzZSBmb3IgdGhlIHByaXZhdGUga2V5IAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tcG9zdDMwMSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXBvc3QzMDE8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGVsbHMgY3VybCB0byByZXNwZWN0IDxhIGhyZWY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI2MTYudHh0Ij5SRkMgMjYxNjwvYT4vMTAuMy4yIGFuZCBub3QgY29udmVydCBQT1NUIHJlcXVlc3RzIGludG8gR0VUIHJlcXVlc3RzIHdoZW4gZm9sbG93aW5nIGEgMzAxIHJlZGlyZWN0aW9uLiBUaGUgbm9uLVJGQyBiZWhhdmlvdXIgaXMgdWJpcXVpdG91cyBpbiB3ZWIgYnJvd3NlcnMsIHNvIGN1cmwgZG9lcyB0aGUgY29udmVyc2lvbiBieSBkZWZhdWx0IHRvIG1haW50YWluIGNvbnNpc3RlbmN5LiBIb3dldmVyLCBhIHNlcnZlciBtYXkgcmVxdWlyZSBhIFBPU1QgdG8gcmVtYWluIGEgUE9TVCBhZnRlciBzdWNoIGEgcmVkaXJlY3Rpb24uIFRoaXMgb3B0aW9uIGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIHVzaW5nIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1MIj4tTCwgLS1sb2NhdGlvbjwvYT4gKEFkZGVkIGluIDcuMTcuMSkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLXBvc3QzMDIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1wb3N0MzAyPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRlbGxzIGN1cmwgdG8gcmVzcGVjdCA8YSBocmVmPSJodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyNjE2LnR4dCI+UkZDIDI2MTY8L2E+LzEwLjMuMiBhbmQgbm90IGNvbnZlcnQgUE9TVCByZXF1ZXN0cyBpbnRvIEdFVCByZXF1ZXN0cyB3aGVuIGZvbGxvd2luZyBhIDMwMiByZWRpcmVjdGlvbi4gVGhlIG5vbi1SRkMgYmVoYXZpb3VyIGlzIHViaXF1aXRvdXMgaW4gd2ViIGJyb3dzZXJzLCBzbyBjdXJsIGRvZXMgdGhlIGNvbnZlcnNpb24gYnkgZGVmYXVsdCB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4gSG93ZXZlciwgYSBzZXJ2ZXIgbWF5IHJlcXVpcmUgYSBQT1NUIHRvIHJlbWFpbiBhIFBPU1QgYWZ0ZXIgc3VjaCBhIHJlZGlyZWN0aW9uLiBUaGlzIG9wdGlvbiBpcyBtZWFuaW5nZnVsIG9ubHkgd2hlbiB1c2luZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtTCI+LUwsIC0tbG9jYXRpb248L2E+IChBZGRlZCBpbiA3LjE5LjEpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1wcm90byI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXByb3RvICZsdDtwcm90b2NvbHMmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRlbGxzIGN1cmwgdG8gdXNlIHRoZSBsaXN0ZWQgcHJvdG9jb2xzIGZvciBpdHMgaW5pdGlhbCByZXRyaWV2YWwuIFByb3RvY29scyBhcmUgZXZhbHVhdGVkIGxlZnQgdG8gcmlnaHQsIGFyZSBjb21tYSBzZXBhcmF0ZWQsIGFuZCBhcmUgZWFjaCBhIHByb3RvY29sIG5hbWUgb3IgJ2FsbCcsIG9wdGlvbmFsbHkgcHJlZml4ZWQgYnkgemVybyBvciBtb3JlIG1vZGlmaWVycy4gQXZhaWxhYmxlIG1vZGlmaWVycyBhcmU6IAorPHAgY2xhc3M9ImxldmVsMiI+Cis8cCBjbGFzcz0ibGV2ZWwyIj48YSBjbGFzcz0iYm9sZCIgaHJlZj0iIyI+KzwvYT4gUGVybWl0IHRoaXMgcHJvdG9jb2wgaW4gYWRkaXRpb24gdG8gcHJvdG9jb2xzIGFscmVhZHkgcGVybWl0dGVkICh0aGlzIGlzIHRoZSBkZWZhdWx0IGlmIG5vIG1vZGlmaWVyIGlzIHVzZWQpLiAKKzxwIGNsYXNzPSJsZXZlbDIiPjxhIGNsYXNzPSJib2xkIiBocmVmPSIjLSI+LTwvYT4gRGVueSB0aGlzIHByb3RvY29sLCByZW1vdmluZyBpdCBmcm9tIHRoZSBsaXN0IG9mIHByb3RvY29scyBhbHJlYWR5IHBlcm1pdHRlZC4gCis8cCBjbGFzcz0ibGV2ZWwyIj48YSBjbGFzcz0iYm9sZCIgaHJlZj0iIyI+PTwvYT4gUGVybWl0IG9ubHkgdGhpcyBwcm90b2NvbCAoaWdub3JpbmcgdGhlIGxpc3QgYWxyZWFkeSBwZXJtaXR0ZWQpLCB0aG91Z2ggc3ViamVjdCB0byBsYXRlciBtb2RpZmljYXRpb24gYnkgc3Vic2VxdWVudCBlbnRyaWVzIGluIHRoZSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj48L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Rm9yIGV4YW1wbGU6IAorPHAgY2xhc3M9ImxldmVsMiI+Cis8cCBjbGFzcz0ibGV2ZWwyIj48YSBjbGFzcz0iYm9sZCIgaHJlZj0iIy0tcHJvdG8iPi0tcHJvdG8gLWZ0cHM8L2E+IHVzZXMgdGhlIGRlZmF1bHQgcHJvdG9jb2xzLCBidXQgZGlzYWJsZXMgZnRwcyAKKzxwIGNsYXNzPSJsZXZlbDIiPjxhIGNsYXNzPSJib2xkIiBocmVmPSIjLS1wcm90byI+LS1wcm90byAtYWxsLGh0dHBzLCtodHRwPC9hPiBvbmx5IGVuYWJsZXMgaHR0cCBhbmQgaHR0cHMgCis8cCBjbGFzcz0ibGV2ZWwyIj48YSBjbGFzcz0iYm9sZCIgaHJlZj0iIy0tcHJvdG8iPi0tcHJvdG8gPWh0dHAsaHR0cHM8L2E+IGFsc28gb25seSBlbmFibGVzIGh0dHAgYW5kIGh0dHBzIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlVua25vd24gcHJvdG9jb2xzIHByb2R1Y2UgYSB3YXJuaW5nLiBUaGlzIGFsbG93cyBzY3JpcHRzIHRvIHNhZmVseSByZWx5IG9uIGJlaW5nIGFibGUgdG8gZGlzYWJsZSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgcHJvdG9jb2xzLCB3aXRob3V0IHJlbHlpbmcgdXBvbiBzdXBwb3J0IGZvciB0aGF0IHByb3RvY29sIGJlaW5nIGJ1aWx0IGludG8gY3VybCB0byBhdm9pZCBhbiBlcnJvci4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcywgaW4gd2hpY2ggY2FzZSB0aGUgZWZmZWN0IGlzIHRoZSBzYW1lIGFzIGNvbmNhdGVuYXRpbmcgdGhlIHByb3RvY29scyBpbnRvIG9uZSBpbnN0YW5jZSBvZiB0aGUgb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPihBZGRlZCBpbiA3LjIwLjIpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1wcm90by1yZWRpciI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXByb3RvLXJlZGlyICZsdDtwcm90b2NvbHMmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRlbGxzIGN1cmwgdG8gdXNlIHRoZSBsaXN0ZWQgcHJvdG9jb2xzIGFmdGVyIGEgcmVkaXJlY3QuIFNlZSAtLXByb3RvIGZvciBob3cgcHJvdG9jb2xzIGFyZSByZXByZXNlbnRlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oQWRkZWQgaW4gNy4yMC4yKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tcHJveHktYW55YXV0aCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXByb3h5LWFueWF1dGg8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGVsbHMgY3VybCB0byBwaWNrIGEgc3VpdGFibGUgYXV0aGVudGljYXRpb24gbWV0aG9kIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIHRoZSBnaXZlbiBwcm94eS4gVGhpcyBtaWdodCBjYXVzZSBhbiBleHRyYSByZXF1ZXN0L3Jlc3BvbnNlIHJvdW5kLXRyaXAuIChBZGRlZCBpbiA3LjEzLjIpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1wcm94eS1iYXNpYyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXByb3h5LWJhc2ljPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRlbGxzIGN1cmwgdG8gdXNlIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24gd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGdpdmVuIHByb3h5LiBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS1iYXNpYyI+LS1iYXNpYzwvYT4gZm9yIGVuYWJsaW5nIEhUVFAgQmFzaWMgd2l0aCBhIHJlbW90ZSBob3N0LiBCYXNpYyBpcyB0aGUgZGVmYXVsdCBhdXRoZW50aWNhdGlvbiBtZXRob2QgY3VybCB1c2VzIHdpdGggcHJveGllcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLXByb3h5LWRpZ2VzdCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXByb3h5LWRpZ2VzdDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UZWxscyBjdXJsIHRvIHVzZSBIVFRQIERpZ2VzdCBhdXRoZW50aWNhdGlvbiB3aGVuIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgZ2l2ZW4gcHJveHkuIFVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWRpZ2VzdCI+LS1kaWdlc3Q8L2E+IGZvciBlbmFibGluZyBIVFRQIERpZ2VzdCB3aXRoIGEgcmVtb3RlIGhvc3QuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1wcm94eS1uZWdvdGlhdGUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1wcm94eS1uZWdvdGlhdGU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGVsbHMgY3VybCB0byB1c2UgSFRUUCBOZWdvdGlhdGUgYXV0aGVudGljYXRpb24gd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGdpdmVuIHByb3h5LiBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS1uZWdvdGlhdGUiPi0tbmVnb3RpYXRlPC9hPiBmb3IgZW5hYmxpbmcgSFRUUCBOZWdvdGlhdGUgd2l0aCBhIHJlbW90ZSBob3N0LiAoQWRkZWQgaW4gNy4xNy4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tcHJveHktbnRsbSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXByb3h5LW50bG08L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGVsbHMgY3VybCB0byB1c2UgSFRUUCBOVExNIGF1dGhlbnRpY2F0aW9uIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIHRoZSBnaXZlbiBwcm94eS4gVXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tbnRsbSI+LS1udGxtPC9hPiBmb3IgZW5hYmxpbmcgTlRMTSB3aXRoIGEgcmVtb3RlIGhvc3QuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1wcm94eTEwIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tcHJveHkxLjAgJmx0O3Byb3h5aG9zdFs6cG9ydF0mZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlVzZSB0aGUgc3BlY2lmaWVkIEhUVFAgMS4wIHByb3h5LiBJZiB0aGUgcG9ydCBudW1iZXIgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgYXNzdW1lZCBhdCBwb3J0IDEwODAuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBIVFRQIHByb3h5IG9wdGlvbiAoPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLXgiPi14LCAtLXByb3h5PC9hPiksIGlzIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIENPTk5FQ1QgdGhyb3VnaCB0aGUgcHJveHkgd2lsbCBzcGVjaWZ5IGFuIEhUVFAgMS4wIHByb3RvY29sIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgSFRUUCAxLjEuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1wdWJrZXkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1wdWJrZXkgJmx0O2tleSZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KFNTSCkgUHVibGljIGtleSBmaWxlIG5hbWUuIEFsbG93cyB5b3UgdG8gcHJvdmlkZSB5b3VyIHB1YmxpYyBrZXkgaW4gdGhpcyBzZXBhcmF0ZSBmaWxlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItcSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tcTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB1c2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybHJjPC9zcGFuPiBjb25maWcgZmlsZSB3aWxsIG5vdCBiZSByZWFkIGFuZCB1c2VkLiBTZWUgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1LIj4tSywgLS1jb25maWc8L2E+IGZvciBkZXRhaWxzIG9uIHRoZSBkZWZhdWx0IGNvbmZpZyBmaWxlIHNlYXJjaCBwYXRoLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1RIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1RLCAtLXF1b3RlICZsdDtjb21tYW5kJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oRlRQL1NGVFApIFNlbmQgYW4gYXJiaXRyYXJ5IGNvbW1hbmQgdG8gdGhlIHJlbW90ZSBGVFAgb3IgU0ZUUCBzZXJ2ZXIuIFF1b3RlIGNvbW1hbmRzIGFyZSBzZW50IEJFRk9SRSB0aGUgdHJhbnNmZXIgdGFrZXMgcGxhY2UgKGp1c3QgYWZ0ZXIgdGhlIGluaXRpYWwgUFdEIGNvbW1hbmQgaW4gYW4gRlRQIHRyYW5zZmVyLCB0byBiZSBleGFjdCkuIFRvIG1ha2UgY29tbWFuZHMgdGFrZSBwbGFjZSBhZnRlciBhIHN1Y2Nlc3NmdWwgdHJhbnNmZXIsIHByZWZpeCB0aGVtIHdpdGggYSBkYXNoICctJy4gIFRvIG1ha2UgY29tbWFuZHMgYmUgc2VudCBhZnRlciBsaWJjdXJsIGhhcyBjaGFuZ2VkIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwganVzdCBiZWZvcmUgdGhlIHRyYW5zZmVyIGNvbW1hbmQocyksIHByZWZpeCB0aGUgY29tbWFuZCB3aXRoIGEgJysnICh0aGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBGVFApLiBZb3UgbWF5IHNwZWNpZnkgYW55IG51bWJlciBvZiBjb21tYW5kcy4gSWYgdGhlIHNlcnZlciByZXR1cm5zIGZhaWx1cmUgZm9yIG9uZSBvZiB0aGUgY29tbWFuZHMsIHRoZSBlbnRpcmUgb3BlcmF0aW9uIHdpbGwgYmUgYWJvcnRlZC4gWW91IG11c3Qgc2VuZCBzeW50YWN0aWNhbGx5IGNvcnJlY3QgRlRQIGNvbW1hbmRzIGFzIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzk1OS50eHQiPlJGQyA5NTk8L2E+IGRlZmluZXMgdG8gRlRQIHNlcnZlcnMsIG9yIG9uZSBvZiB0aGUgY29tbWFuZHMgbGlzdGVkIGJlbG93IHRvIFNGVFAgc2VydmVycy4gIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLiBXaGVuIHNwZWFraW5nIHRvIGEgRlRQIHNlcnZlciwgcHJlZml4IHRoZSBjb21tYW5kIHdpdGggYW4gYXN0ZXJpc2sgKCopIHRvIG1ha2UgbGliY3VybCBjb250aW51ZSBldmVuIGlmIHRoZSBjb21tYW5kIGZhaWxzIGFzIGJ5IGRlZmF1bHQgY3VybCB3aWxsIHN0b3AgYXQgZmlyc3QgZmFpbHVyZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TRlRQIGlzIGEgYmluYXJ5IHByb3RvY29sLiBVbmxpa2UgZm9yIEZUUCwgbGliY3VybCBpbnRlcnByZXRzIFNGVFAgcXVvdGUgY29tbWFuZHMgaXRzZWxmIGJlZm9yZSBzZW5kaW5nIHRoZW0gdG8gdGhlIHNlcnZlci4gIEZpbGUgbmFtZXMgbWF5IGJlIHF1b3RlZCBzaGVsbC1zdHlsZSB0byBlbWJlZCBzcGFjZXMgb3Igc3BlY2lhbCBjaGFyYWN0ZXJzLiAgRm9sbG93aW5nIGlzIHRoZSBsaXN0IG9mIGFsbCBzdXBwb3J0ZWQgU0ZUUCBxdW90ZSBjb21tYW5kczogCis8cCBjbGFzcz0ibGV2ZWwyIj4KKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9ImNoZ3JwIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPmNoZ3JwIGdyb3VwIGZpbGU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VGhlIGNoZ3JwIGNvbW1hbmQgc2V0cyB0aGUgZ3JvdXAgSUQgb2YgdGhlIGZpbGUgbmFtZWQgYnkgdGhlIGZpbGUgb3BlcmFuZCB0byB0aGUgZ3JvdXAgSUQgc3BlY2lmaWVkIGJ5IHRoZSBncm91cCBvcGVyYW5kLiBUaGUgZ3JvdXAgb3BlcmFuZCBpcyBhIGRlY2ltYWwgaW50ZWdlciBncm91cCBJRC4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJjaG1vZCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5jaG1vZCBtb2RlIGZpbGU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VGhlIGNobW9kIGNvbW1hbmQgbW9kaWZpZXMgdGhlIGZpbGUgbW9kZSBiaXRzIG9mIHRoZSBzcGVjaWZpZWQgZmlsZS4gVGhlIG1vZGUgb3BlcmFuZCBpcyBhbiBvY3RhbCBpbnRlZ2VyIG1vZGUgbnVtYmVyLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9ImNob3duIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPmNob3duIHVzZXIgZmlsZTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGUgY2hvd24gY29tbWFuZCBzZXRzIHRoZSBvd25lciBvZiB0aGUgZmlsZSBuYW1lZCBieSB0aGUgZmlsZSBvcGVyYW5kIHRvIHRoZSB1c2VyIElEIHNwZWNpZmllZCBieSB0aGUgdXNlciBvcGVyYW5kLiBUaGUgdXNlciBvcGVyYW5kIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIHVzZXIgSUQuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0ibG4iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+bG4gc291cmNlX2ZpbGUgdGFyZ2V0X2ZpbGU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VGhlIGxuIGFuZCBzeW1saW5rIGNvbW1hbmRzIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgYXQgdGhlIHRhcmdldF9maWxlIGxvY2F0aW9uIHBvaW50aW5nIHRvIHRoZSBzb3VyY2VfZmlsZSBsb2NhdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJta2RpciI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5ta2RpciBkaXJlY3RvcnlfbmFtZTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGUgbWtkaXIgY29tbWFuZCBjcmVhdGVzIHRoZSBkaXJlY3RvcnkgbmFtZWQgYnkgdGhlIGRpcmVjdG9yeV9uYW1lIG9wZXJhbmQuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0icHdkIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPnB3ZDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGUgcHdkIGNvbW1hbmQgcmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aG5hbWUgb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0icmVuYW1lIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPnJlbmFtZSBzb3VyY2UgdGFyZ2V0PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRoZSByZW5hbWUgY29tbWFuZCByZW5hbWVzIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lZCBieSB0aGUgc291cmNlIG9wZXJhbmQgdG8gdGhlIGRlc3RpbmF0aW9uIHBhdGggbmFtZWQgYnkgdGhlIHRhcmdldCBvcGVyYW5kLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9InJtIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPnJtIGZpbGU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VGhlIHJtIGNvbW1hbmQgcmVtb3ZlcyB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgdGhlIGZpbGUgb3BlcmFuZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJybWRpciI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5ybWRpciBkaXJlY3Rvcnk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VGhlIHJtZGlyIGNvbW1hbmQgcmVtb3ZlcyB0aGUgZGlyZWN0b3J5IGVudHJ5IHNwZWNpZmllZCBieSB0aGUgZGlyZWN0b3J5IG9wZXJhbmQsIHByb3ZpZGVkIGl0IGlzIGVtcHR5LiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9InN5bWxpbmsiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+c3ltbGluayBzb3VyY2VfZmlsZSB0YXJnZXRfZmlsZTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5TZWUgbG4uIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItciI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tciwgLS1yYW5nZSAmbHQ7cmFuZ2UmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQL0ZUUC9TRlRQL0ZJTEUpIFJldHJpZXZlIGEgYnl0ZSByYW5nZSAoaS5lIGEgcGFydGlhbCBkb2N1bWVudCkgZnJvbSBhIEhUVFAvMS4xLCBGVFAgb3IgU0ZUUCBzZXJ2ZXIgb3IgYSBsb2NhbCBGSUxFLiBSYW5nZXMgY2FuIGJlIHNwZWNpZmllZCBpbiBhIG51bWJlciBvZiB3YXlzLiAKKzxwIGNsYXNzPSJsZXZlbDIiPgorPHAgY2xhc3M9ImxldmVsMiI+PHNwYW4gQ2xhc3M9ImJvbGQiPjAtNDk5PC9zcGFuPiBzcGVjaWZpZXMgdGhlIGZpcnN0IDUwMCBieXRlcyAKKzxwIGNsYXNzPSJsZXZlbDIiPjxzcGFuIENsYXNzPSJib2xkIj41MDAtOTk5PC9zcGFuPiBzcGVjaWZpZXMgdGhlIHNlY29uZCA1MDAgYnl0ZXMgCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+LTUwMDwvc3Bhbj4gc3BlY2lmaWVzIHRoZSBsYXN0IDUwMCBieXRlcyAKKzxwIGNsYXNzPSJsZXZlbDIiPjxzcGFuIENsYXNzPSJib2xkIj45NTAwLTwvc3Bhbj4gc3BlY2lmaWVzIHRoZSBieXRlcyBmcm9tIG9mZnNldCA5NTAwIGFuZCBmb3J3YXJkIAorPHAgY2xhc3M9ImxldmVsMiI+PHNwYW4gQ2xhc3M9ImJvbGQiPjAtMCwtMTwvc3Bhbj4gc3BlY2lmaWVzIHRoZSBmaXJzdCBhbmQgbGFzdCBieXRlIG9ubHkoKikoSCkgCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+NTAwLTcwMCw2MDAtNzk5PC9zcGFuPiBzcGVjaWZpZXMgMzAwIGJ5dGVzIGZyb20gb2Zmc2V0IDUwMChIKSAKKzxwIGNsYXNzPSJsZXZlbDIiPjxzcGFuIENsYXNzPSJib2xkIj4xMDAtMTk5LDUwMC01OTk8L3NwYW4+IHNwZWNpZmllcyB0d28gc2VwYXJhdGUgMTAwLWJ5dGUgcmFuZ2VzKCopKEgpIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwxIj4oKikgPSBOT1RFIHRoYXQgdGhpcyB3aWxsIGNhdXNlIHRoZSBzZXJ2ZXIgdG8gcmVwbHkgd2l0aCBhIG11bHRpcGFydCByZXNwb25zZSEgCis8cCBjbGFzcz0ibGV2ZWwxIj5Pbmx5IGRpZ2l0IGNoYXJhY3RlcnMgKDAtOSkgYXJlIHZhbGlkIGluIHRoZSAnc3RhcnQnIGFuZCAnc3RvcCcgZmllbGRzIG9mIHRoZSAnc3RhcnQtc3RvcCcgcmFuZ2Ugc3ludGF4LiBJZiBhIG5vbi1kaWdpdCBjaGFyYWN0ZXIgaXMgZ2l2ZW4gaW4gdGhlIHJhbmdlLCB0aGUgc2VydmVyJ3MgcmVzcG9uc2Ugd2lsbCBiZSB1bnNwZWNpZmllZCwgZGVwZW5kaW5nIG9uIHRoZSBzZXJ2ZXIncyBjb25maWd1cmF0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPllvdSBzaG91bGQgYWxzbyBiZSBhd2FyZSB0aGF0IG1hbnkgSFRUUC8xLjEgc2VydmVycyBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUgZW5hYmxlZCwgc28gdGhhdCB3aGVuIHlvdSBhdHRlbXB0IHRvIGdldCBhIHJhbmdlLCB5b3UnbGwgaW5zdGVhZCBnZXQgdGhlIHdob2xlIGRvY3VtZW50LiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZUUCBhbmQgU0ZUUCByYW5nZSBkb3dubG9hZHMgb25seSBzdXBwb3J0IHRoZSBzaW1wbGUgJ3N0YXJ0LXN0b3AnIHN5bnRheCAob3B0aW9uYWxseSB3aXRoIG9uZSBvZiB0aGUgbnVtYmVycyBvbWl0dGVkKS4gRlRQIHVzZSBkZXBlbmRzIG9uIHRoZSBleHRlbmRlZCBGVFAgY29tbWFuZCBTSVpFLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tUiwgLS1yZW1vdGUtdGltZTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIHVzZWQsIHRoaXMgd2lsbCBtYWtlIGxpYmN1cmwgYXR0ZW1wdCB0byBmaWd1cmUgb3V0IHRoZSB0aW1lc3RhbXAgb2YgdGhlIHJlbW90ZSBmaWxlLCBhbmQgaWYgdGhhdCBpcyBhdmFpbGFibGUgbWFrZSB0aGUgbG9jYWwgZmlsZSBnZXQgdGhhdCBzYW1lIHRpbWVzdGFtcC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLXJhbmRvbS1maWxlIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tcmFuZG9tLWZpbGUgJmx0O2ZpbGUmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihTU0wpIFNwZWNpZnkgdGhlIHBhdGggbmFtZSB0byBmaWxlIGNvbnRhaW5pbmcgd2hhdCB3aWxsIGJlIGNvbnNpZGVyZWQgYXMgcmFuZG9tIGRhdGEuIFRoZSBkYXRhIGlzIHVzZWQgdG8gc2VlZCB0aGUgcmFuZG9tIGVuZ2luZSBmb3IgU1NMIGNvbm5lY3Rpb25zLiBTZWUgYWxzbyB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS1lZ2QtZmlsZSI+LS1lZ2QtZmlsZTwvYT4gb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tcmF3Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tcmF3PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gdXNlZCwgaXQgZGlzYWJsZXMgYWxsIGludGVybmFsIEhUVFAgZGVjb2Rpbmcgb2YgY29udGVudCBvciB0cmFuc2ZlciBlbmNvZGluZ3MgYW5kIGluc3RlYWQgbWFrZXMgdGhlbSBwYXNzZWQgb24gdW5hbHRlcmVkLCByYXcuIChBZGRlZCBpbiA3LjE2LjIpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1yZW1vdGUtbmFtZS1hbGwiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1yZW1vdGUtbmFtZS1hbGw8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIGFsbCBnaXZlbiBVUkxzIHRvIGJlIGRlYWx0IHdpdGggYXMgaWYgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLU8iPi1PLCAtLXJlbW90ZS1uYW1lPC9hPiB3ZXJlIHVzZWQgZm9yIGVhY2ggb25lLiBTbyBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoYXQgZm9yIGEgc3BlY2lmaWMgVVJMIGFmdGVyIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tcmVtb3RlLW5hbWUtYWxsIj4tLXJlbW90ZS1uYW1lLWFsbDwvYT4gaGFzIGJlZW4gdXNlZCwgeW91IG11c3QgdXNlICItbyAtIiBvciA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi0tbm8tcmVtb3RlLW5hbWU8L3NwYW4+LiAoQWRkZWQgaW4gNy4xOS4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tcmVzb2x2ZSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXJlc29sdmUgJmx0O2hvc3Q6cG9ydDphZGRyZXNzJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Qcm92aWRlIGEgY3VzdG9tIGFkZHJlc3MgZm9yIGEgc3BlY2lmaWMgaG9zdCBhbmQgcG9ydCBwYWlyLiBVc2luZyB0aGlzLCB5b3UgY2FuIG1ha2UgdGhlIGN1cmwgcmVxdWVzdHMocykgdXNlIGEgc3BlY2lmaWVkIGFkZHJlc3MgYW5kIHByZXZlbnQgdGhlIG90aGVyd2lzZSBub3JtYWxseSByZXNvbHZlZCBhZGRyZXNzIHRvIGJlIHVzZWQuIENvbnNpZGVyIGl0IGEgc29ydCBvZiAvZXRjL2hvc3RzIGFsdGVybmF0aXZlIHByb3ZpZGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuIFRoZSBwb3J0IG51bWJlciBzaG91bGQgYmUgdGhlIG51bWJlciB1c2VkIGZvciB0aGUgc3BlY2lmaWMgcHJvdG9jb2wgdGhlIGhvc3Qgd2lsbCBiZSB1c2VkIGZvci4gSXQgbWVhbnMgeW91IG5lZWQgc2V2ZXJhbCBlbnRyaWVzIGlmIHlvdSB3YW50IHRvIHByb3ZpZGUgYWRkcmVzcyBmb3IgdGhlIHNhbWUgaG9zdCBidXQgZGlmZmVyZW50IHBvcnRzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIG1hbnkgdGltZXMgdG8gYWRkIG1hbnkgaG9zdCBuYW1lcyB0byByZXNvbHZlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPihBZGRlZCBpbiA3LjIxLjMpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1yZXRyeSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXJldHJ5ICZsdDtudW0mZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIGEgdHJhbnNpZW50IGVycm9yIGlzIHJldHVybmVkIHdoZW4gY3VybCB0cmllcyB0byBwZXJmb3JtIGEgdHJhbnNmZXIsIGl0IHdpbGwgcmV0cnkgdGhpcyBudW1iZXIgb2YgdGltZXMgYmVmb3JlIGdpdmluZyB1cC4gU2V0dGluZyB0aGUgbnVtYmVyIHRvIDAgbWFrZXMgY3VybCBkbyBubyByZXRyaWVzICh3aGljaCBpcyB0aGUgZGVmYXVsdCkuIFRyYW5zaWVudCBlcnJvciBtZWFucyBlaXRoZXI6IGEgdGltZW91dCwgYW4gRlRQIDR4eCByZXNwb25zZSBjb2RlIG9yIGFuIEhUVFAgNXh4IHJlc3BvbnNlIGNvZGUuIAorPHAgY2xhc3M9ImxldmVsMSI+V2hlbiBjdXJsIGlzIGFib3V0IHRvIHJldHJ5IGEgdHJhbnNmZXIsIGl0IHdpbGwgZmlyc3Qgd2FpdCBvbmUgc2Vjb25kIGFuZCB0aGVuIGZvciBhbGwgZm9ydGhjb21pbmcgcmV0cmllcyBpdCB3aWxsIGRvdWJsZSB0aGUgd2FpdGluZyB0aW1lIHVudGlsIGl0IHJlYWNoZXMgMTAgbWludXRlcyB3aGljaCB0aGVuIHdpbGwgYmUgdGhlIGRlbGF5IGJldHdlZW4gdGhlIHJlc3Qgb2YgdGhlIHJldHJpZXMuICBCeSB1c2luZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLXJldHJ5LWRlbGF5Ij4tLXJldHJ5LWRlbGF5PC9hPiB5b3UgZGlzYWJsZSB0aGlzIGV4cG9uZW50aWFsIGJhY2tvZmYgYWxnb3JpdGhtLiBTZWUgYWxzbyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLXJldHJ5LW1heC10aW1lIj4tLXJldHJ5LW1heC10aW1lPC9hPiB0byBsaW1pdCB0aGUgdG90YWwgdGltZSBhbGxvd2VkIGZvciByZXRyaWVzLiAoQWRkZWQgaW4gNy4xMi4zKSAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgbXVsdGlwbGUgdGltZXMsIHRoZSBsYXN0IG9jY3VycmVuY2UgZGVjaWRlIHRoZSBhbW91bnQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1yZXRyeS1kZWxheSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXJldHJ5LWRlbGF5ICZsdDtzZWNvbmRzJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5NYWtlIGN1cmwgc2xlZXAgdGhpcyBhbW91bnQgb2YgdGltZSBiZWZvcmUgZWFjaCByZXRyeSB3aGVuIGEgdHJhbnNmZXIgaGFzIGZhaWxlZCB3aXRoIGEgdHJhbnNpZW50IGVycm9yIChpdCBjaGFuZ2VzIHRoZSBkZWZhdWx0IGJhY2tvZmYgdGltZSBhbGdvcml0aG0gYmV0d2VlbiByZXRyaWVzKS4gVGhpcyBvcHRpb24gaXMgb25seSBpbnRlcmVzdGluZyBpZiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLXJldHJ5Ij4tLXJldHJ5PC9hPiBpcyBhbHNvIHVzZWQuIFNldHRpbmcgdGhpcyBkZWxheSB0byB6ZXJvIHdpbGwgbWFrZSBjdXJsIHVzZSB0aGUgZGVmYXVsdCBiYWNrb2ZmIHRpbWUuIChBZGRlZCBpbiA3LjEyLjMpIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBtdWx0aXBsZSB0aW1lcywgdGhlIGxhc3Qgb2NjdXJyZW5jZSBkZXRlcm1pbmVzIHRoZSBhbW91bnQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1yZXRyeS1tYXgtdGltZSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXJldHJ5LW1heC10aW1lICZsdDtzZWNvbmRzJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgcmV0cnkgdGltZXIgaXMgcmVzZXQgYmVmb3JlIHRoZSBmaXJzdCB0cmFuc2ZlciBhdHRlbXB0LiBSZXRyaWVzIHdpbGwgYmUgZG9uZSBhcyB1c3VhbCAoc2VlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tcmV0cnkiPi0tcmV0cnk8L2E+KSBhcyBsb25nIGFzIHRoZSB0aW1lciBoYXNuJ3QgcmVhY2hlZCB0aGlzIGdpdmVuIGxpbWl0LiBOb3RpY2UgdGhhdCBpZiB0aGUgdGltZXIgaGFzbid0IHJlYWNoZWQgdGhlIGxpbWl0LCB0aGUgcmVxdWVzdCB3aWxsIGJlIG1hZGUgYW5kIHdoaWxlIHBlcmZvcm1pbmcsIGl0IG1heSB0YWtlIGxvbmdlciB0aGFuIHRoaXMgZ2l2ZW4gdGltZSBwZXJpb2QuIFRvIGxpbWl0IGEgc2luZ2xlIHJlcXVlc3QmYWN1dGU7cyBtYXhpbXVtIHRpbWUsIHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtbSI+LW0sIC0tbWF4LXRpbWU8L2E+LiBTZXQgdGhpcyBvcHRpb24gdG8gemVybyB0byBub3QgdGltZW91dCByZXRyaWVzLiAoQWRkZWQgaW4gNy4xMi4zKSAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgbXVsdGlwbGUgdGltZXMsIHRoZSBsYXN0IG9jY3VycmVuY2UgZGV0ZXJtaW5lcyB0aGUgYW1vdW50LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1zIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1zLCAtLXNpbGVudDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TaWxlbnQgb3IgcXVpZXQgbW9kZS4gRG9uJ3Qgc2hvdyBwcm9ncmVzcyBtZXRlciBvciBlcnJvciBtZXNzYWdlcy4gIE1ha2VzIEN1cmwgbXV0ZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItUyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tUywgLS1zaG93LWVycm9yPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gdXNlZCB3aXRoIC1zIGl0IG1ha2VzIGN1cmwgc2hvdyBhbiBlcnJvciBtZXNzYWdlIGlmIGl0IGZhaWxzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tc3NsIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tc3NsPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihGVFAsIFBPUDMsIElNQVAsIFNNVFApIFRyeSB0byB1c2UgU1NML1RMUyBmb3IgdGhlIGNvbm5lY3Rpb24uICBSZXZlcnRzIHRvIGEgbm9uLXNlY3VyZSBjb25uZWN0aW9uIGlmIHRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IFNTTC9UTFMuICBTZWUgYWxzbyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLWZ0cC1zc2wtY29udHJvbCI+LS1mdHAtc3NsLWNvbnRyb2w8L2E+IGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLXNzbC1yZXFkIj4tLXNzbC1yZXFkPC9hPiBmb3IgZGlmZmVyZW50IGxldmVscyBvZiBlbmNyeXB0aW9uIHJlcXVpcmVkLiAoQWRkZWQgaW4gNy4yMC4wKSAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIHdhcyBmb3JtZXJseSBrbm93biBhcyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi0tZnRwLXNzbDwvc3Bhbj4gKEFkZGVkIGluIDcuMTEuMCkuIFRoYXQgb3B0aW9uIG5hbWUgY2FuIHN0aWxsIGJlIHVzZWQgYnV0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tc3NsLXJlcWQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1zc2wtcmVxZDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oRlRQLCBQT1AzLCBJTUFQLCBTTVRQKSBSZXF1aXJlIFNTTC9UTFMgZm9yIHRoZSBjb25uZWN0aW9uLiAgVGVybWluYXRlcyB0aGUgY29ubmVjdGlvbiBpZiB0aGUgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBTU0wvVExTLiAoQWRkZWQgaW4gNy4yMC4wKSAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIHdhcyBmb3JtZXJseSBrbm93biBhcyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi0tZnRwLXNzbC1yZXFkPC9zcGFuPiAoYWRkZWQgaW4gNy4xNS41KS4gVGhhdCBvcHRpb24gbmFtZSBjYW4gc3RpbGwgYmUgdXNlZCBidXQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1zc2wtYWxsb3ctYmVhc3QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1zc2wtYWxsb3ctYmVhc3Q8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KFNTTCkgVGhpcyBvcHRpb24gdGVsbHMgY3VybCB0byBub3Qgd29yayBhcm91bmQgYSBzZWN1cml0eSBmbGF3IGluIHRoZSBTU0wzIGFuZCBUTFMxLjAgcHJvdG9jb2xzIGtub3duIGFzIEJFQVNULiAgSWYgdGhpcyBvcHRpb24gaXNuJ3QgdXNlZCwgdGhlIFNTTCBsYXllciBtYXkgdXNlIHdvcmstYXJvdW5kcyBrbm93biB0byBjYXVzZSBpbnRlcm9wZXJhYmlsaXR5IHByb2JsZW1zIHdpdGggc29tZSBvbGRlciBTU0wgaW1wbGVtZW50YXRpb25zLiBXQVJOSU5HOiB0aGlzIG9wdGlvbiBsb29zZW5zIHRoZSBTU0wgc2VjdXJpdHksIGFuZCBieSB1c2luZyB0aGlzIGZsYWcgeW91IGFzayBmb3IgZXhhY3RseSB0aGF0LiAgKEFkZGVkIGluIDcuMjUuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLXNvY2tzNCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXNvY2tzNCAmbHQ7aG9zdFs6cG9ydF0mZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlVzZSB0aGUgc3BlY2lmaWVkIFNPQ0tTNCBwcm94eS4gSWYgdGhlIHBvcnQgbnVtYmVyIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIGFzc3VtZWQgYXQgcG9ydCAxMDgwLiAoQWRkZWQgaW4gNy4xNS4yKSAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIG92ZXJyaWRlcyBhbnkgcHJldmlvdXMgdXNlIG9mIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy14Ij4teCwgLS1wcm94eTwvYT4sIGFzIHRoZXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TaW5jZSA3LjIxLjcsIHRoaXMgb3B0aW9uIGlzIHN1cGVyZmx1b3VzIHNpbmNlIHlvdSBjYW4gc3BlY2lmeSBhIHNvY2tzNCBwcm94eSB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy14Ij4teCwgLS1wcm94eTwvYT4gdXNpbmcgYSBzb2NrczQ6Ly8gcHJvdG9jb2wgcHJlZml4LiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLXNvY2tzNGEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1zb2NrczRhICZsdDtob3N0Wzpwb3J0XSZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VXNlIHRoZSBzcGVjaWZpZWQgU09DS1M0YSBwcm94eS4gSWYgdGhlIHBvcnQgbnVtYmVyIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIGFzc3VtZWQgYXQgcG9ydCAxMDgwLiAoQWRkZWQgaW4gNy4xOC4wKSAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIG92ZXJyaWRlcyBhbnkgcHJldmlvdXMgdXNlIG9mIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy14Ij4teCwgLS1wcm94eTwvYT4sIGFzIHRoZXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TaW5jZSA3LjIxLjcsIHRoaXMgb3B0aW9uIGlzIHN1cGVyZmx1b3VzIHNpbmNlIHlvdSBjYW4gc3BlY2lmeSBhIHNvY2tzNGEgcHJveHkgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMteCI+LXgsIC0tcHJveHk8L2E+IHVzaW5nIGEgc29ja3M0YTovLyBwcm90b2NvbCBwcmVmaXguIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tc29ja3M1LWhvc3RuYW1lIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tc29ja3M1LWhvc3RuYW1lICZsdDtob3N0Wzpwb3J0XSZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VXNlIHRoZSBzcGVjaWZpZWQgU09DS1M1IHByb3h5IChhbmQgbGV0IHRoZSBwcm94eSByZXNvbHZlIHRoZSBob3N0IG5hbWUpLiBJZiB0aGUgcG9ydCBudW1iZXIgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgYXNzdW1lZCBhdCBwb3J0IDEwODAuIChBZGRlZCBpbiA3LjE4LjApIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gb3ZlcnJpZGVzIGFueSBwcmV2aW91cyB1c2Ugb2YgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLXgiPi14LCAtLXByb3h5PC9hPiwgYXMgdGhleSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNpbmNlIDcuMjEuNywgdGhpcyBvcHRpb24gaXMgc3VwZXJmbHVvdXMgc2luY2UgeW91IGNhbiBzcGVjaWZ5IGEgc29ja3M1IGhvc3RuYW1lIHByb3h5IHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLXgiPi14LCAtLXByb3h5PC9hPiB1c2luZyBhIHNvY2tzNWg6Ly8gcHJvdG9jb2wgcHJlZml4LiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gKFRoaXMgb3B0aW9uIHdhcyBwcmV2aW91c2x5IHdyb25nbHkgZG9jdW1lbnRlZCBhbmQgdXNlZCBhcyAtLXNvY2tzIHdpdGhvdXQgdGhlIG51bWJlciBhcHBlbmRlZC4pIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1zb2NrczUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1zb2NrczUgJmx0O2hvc3RbOnBvcnRdJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Vc2UgdGhlIHNwZWNpZmllZCBTT0NLUzUgcHJveHkgLSBidXQgcmVzb2x2ZSB0aGUgaG9zdCBuYW1lIGxvY2FsbHkuIElmIHRoZSBwb3J0IG51bWJlciBpcyBub3Qgc3BlY2lmaWVkLCBpdCBpcyBhc3N1bWVkIGF0IHBvcnQgMTA4MC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBvdmVycmlkZXMgYW55IHByZXZpb3VzIHVzZSBvZiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMteCI+LXgsIC0tcHJveHk8L2E+LCBhcyB0aGV5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIAorPHAgY2xhc3M9ImxldmVsMSI+U2luY2UgNy4yMS43LCB0aGlzIG9wdGlvbiBpcyBzdXBlcmZsdW91cyBzaW5jZSB5b3UgY2FuIHNwZWNpZnkgYSBzb2NrczUgcHJveHkgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMteCI+LXgsIC0tcHJveHk8L2E+IHVzaW5nIGEgc29ja3M1Oi8vIHByb3RvY29sIHByZWZpeC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuIChUaGlzIG9wdGlvbiB3YXMgcHJldmlvdXNseSB3cm9uZ2x5IGRvY3VtZW50ZWQgYW5kIHVzZWQgYXMgLS1zb2NrcyB3aXRob3V0IHRoZSBudW1iZXIgYXBwZW5kZWQuKSAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIChhcyB3ZWxsIGFzIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tc29ja3M0Ij4tLXNvY2tzNDwvYT4pIGRvZXMgbm90IHdvcmsgd2l0aCBJUFY2LCBGVFBTIG9yIExEQVAuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1zb2NrczUtZ3NzYXBpLXNlcnZpY2UiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1zb2NrczUtZ3NzYXBpLXNlcnZpY2UgJmx0O3NlcnZpY2VuYW1lJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgZGVmYXVsdCBzZXJ2aWNlIG5hbWUgZm9yIGEgc29ja3Mgc2VydmVyIGlzIHJjbWQvc2VydmVyLWZxZG4uIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hhbmdlIGl0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPkV4YW1wbGVzOiAtLXNvY2tzNSBwcm94eS1uYW1lIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tc29ja3M1LWdzc2FwaS1zZXJ2aWNlIj4tLXNvY2tzNS1nc3NhcGktc2VydmljZTwvYT4gc29ja2Qgd291bGQgdXNlIHNvY2tkL3Byb3h5LW5hbWUgLS1zb2NrczUgcHJveHktbmFtZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLXNvY2tzNS1nc3NhcGktc2VydmljZSI+LS1zb2NrczUtZ3NzYXBpLXNlcnZpY2U8L2E+IHNvY2tkL3JlYWwtbmFtZSB3b3VsZCB1c2Ugc29ja2QvcmVhbC1uYW1lIGZvciBjYXNlcyB3aGVyZSB0aGUgcHJveHktbmFtZSBkb2VzIG5vdCBtYXRjaCB0aGUgcHJpbmNpcGFsIG5hbWUuICAoQWRkZWQgaW4gNy4xOS40KS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLXNvY2tzNS1nc3NhcGktbmVjIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tc29ja3M1LWdzc2FwaS1uZWM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QXMgcGFydCBvZiB0aGUgZ3NzYXBpIG5lZ290aWF0aW9uIGEgcHJvdGVjdGlvbiBtb2RlIGlzIG5lZ290aWF0ZWQuIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NjEudHh0Ij5SRkMgMTk2MTwvYT4gc2F5cyBpbiBzZWN0aW9uIDQuMy80LjQgaXQgc2hvdWxkIGJlIHByb3RlY3RlZCwgYnV0IHRoZSBORUMgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGRvZXMgbm90LiAgVGhlIG9wdGlvbiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLXNvY2tzNS1nc3NhcGktbmVjIj4tLXNvY2tzNS1nc3NhcGktbmVjPC9hPiBhbGxvd3MgdGhlIHVucHJvdGVjdGVkIGV4Y2hhbmdlIG9mIHRoZSBwcm90ZWN0aW9uIG1vZGUgbmVnb3RpYXRpb24uIChBZGRlZCBpbiA3LjE5LjQpLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tc3RkZXJyIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tc3RkZXJyICZsdDtmaWxlJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5SZWRpcmVjdCBhbGwgd3JpdGVzIHRvIHN0ZGVyciB0byB0aGUgc3BlY2lmaWVkIGZpbGUgaW5zdGVhZC4gSWYgdGhlIGZpbGUgbmFtZSBpcyBhIHBsYWluICctJywgaXQgaXMgaW5zdGVhZCB3cml0dGVuIHRvIHN0ZG91dC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLXQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LXQsIC0tdGVsbmV0LW9wdGlvbiAmbHQ7T1BUPXZhbCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBvcHRpb25zIHRvIHRoZSB0ZWxuZXQgcHJvdG9jb2wuIFN1cHBvcnRlZCBvcHRpb25zIGFyZTogCis8cCBjbGFzcz0ibGV2ZWwxIj5UVFlQRT0mbHQ7dGVybSZndDsgU2V0cyB0aGUgdGVybWluYWwgdHlwZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5YRElTUExPQz0mbHQ7WCBkaXNwbGF5Jmd0OyBTZXRzIHRoZSBYIGRpc3BsYXkgbG9jYXRpb24uIAorPHAgY2xhc3M9ImxldmVsMSI+TkVXX0VOVj0mbHQ7dmFyLHZhbCZndDsgU2V0cyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tVCwgLS11cGxvYWQtZmlsZSAmbHQ7ZmlsZSZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyB0cmFuc2ZlcnMgdGhlIHNwZWNpZmllZCBsb2NhbCBmaWxlIHRvIHRoZSByZW1vdGUgVVJMLiBJZiB0aGVyZSBpcyBubyBmaWxlIHBhcnQgaW4gdGhlIHNwZWNpZmllZCBVUkwsIEN1cmwgd2lsbCBhcHBlbmQgdGhlIGxvY2FsIGZpbGUgbmFtZS4gTk9URSB0aGF0IHlvdSBtdXN0IHVzZSBhIHRyYWlsaW5nIC8gb24gdGhlIGxhc3QgZGlyZWN0b3J5IHRvIHJlYWxseSBwcm92ZSB0byBDdXJsIHRoYXQgdGhlcmUgaXMgbm8gZmlsZSBuYW1lIG9yIGN1cmwgd2lsbCB0aGluayB0aGF0IHlvdXIgbGFzdCBkaXJlY3RvcnkgbmFtZSBpcyB0aGUgcmVtb3RlIGZpbGUgbmFtZSB0byB1c2UuIFRoYXQgd2lsbCBtb3N0IGxpa2VseSBjYXVzZSB0aGUgdXBsb2FkIG9wZXJhdGlvbiB0byBmYWlsLiBJZiB0aGlzIGlzIHVzZWQgb24gYSBIVFRQKFMpIHNlcnZlciwgdGhlIFBVVCBjb21tYW5kIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Vc2UgdGhlIGZpbGUgbmFtZSAiLSIgKGEgc2luZ2xlIGRhc2gpIHRvIHVzZSBzdGRpbiBpbnN0ZWFkIG9mIGEgZ2l2ZW4gZmlsZS4gQWx0ZXJuYXRlbHksIHRoZSBmaWxlIG5hbWUgIi4iIChhIHNpbmdsZSBwZXJpb2QpIG1heSBiZSBzcGVjaWZpZWQgaW5zdGVhZCBvZiAiLSIgdG8gdXNlIHN0ZGluIGluIG5vbi1ibG9ja2luZyBtb2RlIHRvIGFsbG93IHJlYWRpbmcgc2VydmVyIG91dHB1dCB3aGlsZSBzdGRpbiBpcyBiZWluZyB1cGxvYWRlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Zb3UgY2FuIHNwZWNpZnkgb25lIC1UIGZvciBlYWNoIFVSTCBvbiB0aGUgY29tbWFuZCBsaW5lLiBFYWNoIC1UICsgVVJMIHBhaXIgc3BlY2lmaWVzIHdoYXQgdG8gdXBsb2FkIGFuZCB0byB3aGVyZS4gY3VybCBhbHNvIHN1cHBvcnRzICJnbG9iYmluZyIgb2YgdGhlIC1UIGFyZ3VtZW50LCBtZWFuaW5nIHRoYXQgeW91IGNhbiB1cGxvYWQgbXVsdGlwbGUgZmlsZXMgdG8gYSBzaW5nbGUgVVJMIGJ5IHVzaW5nIHRoZSBzYW1lIFVSTCBnbG9iYmluZyBzdHlsZSBzdXBwb3J0ZWQgaW4gdGhlIFVSTCwgbGlrZSB0aGlzOiAKKzxwIGNsYXNzPSJsZXZlbDEiPmN1cmwgLVQgIntmaWxlMSxmaWxlMn0iIDxhIGhyZWY9Imh0dHA6Ly93d3cudXBsb2FkdG90aGlzc2l0ZS5jb20iPmh0dHA6Ly93d3cudXBsb2FkdG90aGlzc2l0ZS5jb208L2E+IAorPHAgY2xhc3M9ImxldmVsMSI+b3IgZXZlbiAKKzxwIGNsYXNzPSJsZXZlbDEiPmN1cmwgLVQgImltZ1sxLTEwMDBdLnBuZyIgPGEgaHJlZj0iZnRwOi8vZnRwLnBpY3R1cmVtYW5pYS5jb20vdXBsb2FkLyI+ZnRwOi8vZnRwLnBpY3R1cmVtYW5pYS5jb20vdXBsb2FkLzwvYT4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLXRjcC1ub2RlbGF5Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tdGNwLW5vZGVsYXk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VHVybiBvbiB0aGUgVENQX05PREVMQVkgb3B0aW9uLiBTZWUgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9lYXN5X3NldG9wdCgzKTwvc3Bhbj4gbWFuIHBhZ2UgZm9yIGRldGFpbHMgYWJvdXQgdGhpcyBvcHRpb24uIChBZGRlZCBpbiA3LjExLjIpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS10ZnRwLWJsa3NpemUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS10ZnRwLWJsa3NpemUgJmx0O3ZhbHVlJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oVEZUUCkgU2V0IFRGVFAgQkxLU0laRSBvcHRpb24gKG11c3QgYmUgJmd0OzUxMikuIFRoaXMgaXMgdGhlIGJsb2NrIHNpemUgdGhhdCBjdXJsIHdpbGwgdHJ5IHRvIHVzZSB3aGVuIHRyYW5zZmVycmluZyBkYXRhIHRvIG9yIGZyb20gYSBURlRQIHNlcnZlci4gQnkgZGVmYXVsdCA1MTIgYnl0ZXMgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oQWRkZWQgaW4gNy4yMC4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tdGxzYXV0aHR5cGUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS10bHNhdXRodHlwZSAmbHQ7YXV0aHR5cGUmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldCBUTFMgYXV0aGVudGljYXRpb24gdHlwZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgb3B0aW9uIGlzICJTUlAiLCBmb3IgVExTLVNSUCAoPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNTA1NC50eHQiPlJGQyA1MDU0PC9hPikuIElmIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tdGxzdXNlciI+LS10bHN1c2VyPC9hPiBhbmQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS10bHNwYXNzd29yZCI+LS10bHNwYXNzd29yZDwvYT4gYXJlIHNwZWNpZmllZCBidXQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS10bHNhdXRodHlwZSI+LS10bHNhdXRodHlwZTwvYT4gaXMgbm90LCB0aGVuIHRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvICJTUlAiLiAoQWRkZWQgaW4gNy4yMS40KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tdGxzdXNlciI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXRsc3VzZXIgJmx0O3VzZXImZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldCB1c2VybmFtZSBmb3IgdXNlIHdpdGggdGhlIFRMUyBhdXRoZW50aWNhdGlvbiBtZXRob2Qgc3BlY2lmaWVkIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS10bHNhdXRodHlwZSI+LS10bHNhdXRodHlwZTwvYT4uIFJlcXVpcmVzIHRoYXQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS10bHNwYXNzd29yZCI+LS10bHNwYXNzd29yZDwvYT4gYWxzbyBiZSBzZXQuICAoQWRkZWQgaW4gNy4yMS40KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tdGxzcGFzc3dvcmQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS10bHNwYXNzd29yZCAmbHQ7cGFzc3dvcmQmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldCBwYXNzd29yZCBmb3IgdXNlIHdpdGggdGhlIFRMUyBhdXRoZW50aWNhdGlvbiBtZXRob2Qgc3BlY2lmaWVkIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS10bHNhdXRodHlwZSI+LS10bHNhdXRodHlwZTwvYT4uIFJlcXVpcmVzIHRoYXQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS10bHN1c2VyIj4tLXRsc3VzZXI8L2E+IGFsc28gYmUgc2V0LiAgKEFkZGVkIGluIDcuMjEuNCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLXRyLWVuY29kaW5nIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tdHItZW5jb2Rpbmc8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+KEhUVFApIFJlcXVlc3QgYSBjb21wcmVzc2VkIFRyYW5zZmVyLUVuY29kaW5nIHJlc3BvbnNlIHVzaW5nIG9uZSBvZiB0aGUgYWxnb3JpdGhtcyBsaWJjdXJsIHN1cHBvcnRzLCBhbmQgdW5jb21wcmVzcyB0aGUgZGF0YSB3aGlsZSByZWNlaXZpbmcgaXQuIAorPHAgY2xhc3M9ImxldmVsMSI+KEFkZGVkIGluIDcuMjEuNikgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLXRyYWNlIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tdHJhY2UgJmx0O2ZpbGUmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkVuYWJsZXMgYSBmdWxsIHRyYWNlIGR1bXAgb2YgYWxsIGluY29taW5nIGFuZCBvdXRnb2luZyBkYXRhLCBpbmNsdWRpbmcgZGVzY3JpcHRpdmUgaW5mb3JtYXRpb24sIHRvIHRoZSBnaXZlbiBvdXRwdXQgZmlsZS4gVXNlICItIiBhcyBmaWxlbmFtZSB0byBoYXZlIHRoZSBvdXRwdXQgc2VudCB0byBzdGRvdXQuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gb3ZlcnJpZGVzIHByZXZpb3VzIHVzZXMgb2YgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLXYiPi12LCAtLXZlcmJvc2U8L2E+IG9yIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tdHJhY2UtYXNjaWkiPi0tdHJhY2UtYXNjaWk8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLXRyYWNlLWFzY2lpIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tdHJhY2UtYXNjaWkgJmx0O2ZpbGUmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkVuYWJsZXMgYSBmdWxsIHRyYWNlIGR1bXAgb2YgYWxsIGluY29taW5nIGFuZCBvdXRnb2luZyBkYXRhLCBpbmNsdWRpbmcgZGVzY3JpcHRpdmUgaW5mb3JtYXRpb24sIHRvIHRoZSBnaXZlbiBvdXRwdXQgZmlsZS4gVXNlICItIiBhcyBmaWxlbmFtZSB0byBoYXZlIHRoZSBvdXRwdXQgc2VudCB0byBzdGRvdXQuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS10cmFjZSI+LS10cmFjZTwvYT4sIGJ1dCBsZWF2ZXMgb3V0IHRoZSBoZXggcGFydCBhbmQgb25seSBzaG93cyB0aGUgQVNDSUkgcGFydCBvZiB0aGUgZHVtcC4gSXQgbWFrZXMgc21hbGxlciBvdXRwdXQgdGhhdCBtaWdodCBiZSBlYXNpZXIgdG8gcmVhZCBmb3IgdW50cmFpbmVkIGh1bWFucy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBvdmVycmlkZXMgcHJldmlvdXMgdXNlcyBvZiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtdiI+LXYsIC0tdmVyYm9zZTwvYT4gb3IgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS10cmFjZSI+LS10cmFjZTwvYT4uIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tdHJhY2UtdGltZSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXRyYWNlLXRpbWU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UHJlcGVuZHMgYSB0aW1lIHN0YW1wIHRvIGVhY2ggdHJhY2Ugb3IgdmVyYm9zZSBsaW5lIHRoYXQgY3VybCBkaXNwbGF5cy4gKEFkZGVkIGluIDcuMTQuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItdSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tdSwgLS11c2VyICZsdDt1c2VyOnBhc3N3b3JkJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TcGVjaWZ5IHRoZSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIHRvIHVzZSBmb3Igc2VydmVyIGF1dGhlbnRpY2F0aW9uLiBPdmVycmlkZXMgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLW4iPi1uLCAtLW5ldHJjPC9hPiBhbmQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS1uZXRyYy1vcHRpb25hbCI+LS1uZXRyYy1vcHRpb25hbDwvYT4uIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgeW91IGp1c3QgZ2l2ZSB0aGUgdXNlciBuYW1lICh3aXRob3V0IGVudGVyaW5nIGEgY29sb24pIGN1cmwgd2lsbCBwcm9tcHQgZm9yIGEgcGFzc3dvcmQuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgeW91IHVzZSBhbiBTU1BJLWVuYWJsZWQgY3VybCBiaW5hcnkgYW5kIGRvIE5UTE0gYXV0aGVudGljYXRpb24sIHlvdSBjYW4gZm9yY2UgY3VybCB0byBwaWNrIHVwIHRoZSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIGZyb20geW91ciBlbnZpcm9ubWVudCBieSBzaW1wbHkgc3BlY2lmeWluZyBhIHNpbmdsZSBjb2xvbiB3aXRoIHRoaXMgb3B0aW9uOiAiLXUgOiIuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1VIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1VLCAtLXByb3h5LXVzZXIgJmx0O3VzZXI6cGFzc3dvcmQmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNwZWNpZnkgdGhlIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgdG8gdXNlIGZvciBwcm94eSBhdXRoZW50aWNhdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3UgdXNlIGFuIFNTUEktZW5hYmxlZCBjdXJsIGJpbmFyeSBhbmQgZG8gTlRMTSBhdXRoZW50aWNhdGlvbiwgeW91IGNhbiBmb3JjZSBjdXJsIHRvIHBpY2sgdXAgdGhlIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB5b3VyIGVudmlyb25tZW50IGJ5IHNpbXBseSBzcGVjaWZ5aW5nIGEgc2luZ2xlIGNvbG9uIHdpdGggdGhpcyBvcHRpb246ICItVSA6Ii4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS11cmwiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS11cmwgJmx0O1VSTCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U3BlY2lmeSBhIFVSTCB0byBmZXRjaC4gVGhpcyBvcHRpb24gaXMgbW9zdGx5IGhhbmR5IHdoZW4geW91IHdhbnQgdG8gc3BlY2lmeSBVUkwocykgaW4gYSBjb25maWcgZmlsZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCBhbnkgbnVtYmVyIG9mIHRpbWVzLiBUbyBjb250cm9sIHdoZXJlIHRoaXMgVVJMIGlzIHdyaXR0ZW4sIHVzZSB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLW8iPi1vLCAtLW91dHB1dDwvYT4gb3IgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1PIj4tTywgLS1yZW1vdGUtbmFtZTwvYT4gb3B0aW9ucy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItdiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tdiwgLS12ZXJib3NlPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk1ha2VzIHRoZSBmZXRjaGluZyBtb3JlIHZlcmJvc2UvdGFsa2F0aXZlLiBNb3N0bHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuIEEgbGluZSBzdGFydGluZyB3aXRoICcmZ3Q7JyBtZWFucyAiaGVhZGVyIGRhdGEiIHNlbnQgYnkgY3VybCwgJyZsdDsnIG1lYW5zICJoZWFkZXIgZGF0YSIgcmVjZWl2ZWQgYnkgY3VybCB0aGF0IGlzIGhpZGRlbiBpbiBub3JtYWwgY2FzZXMsIGFuZCBhIGxpbmUgc3RhcnRpbmcgd2l0aCAnKicgbWVhbnMgYWRkaXRpb25hbCBpbmZvIHByb3ZpZGVkIGJ5IGN1cmwuIAorPHAgY2xhc3M9ImxldmVsMSI+Tm90ZSB0aGF0IGlmIHlvdSBvbmx5IHdhbnQgSFRUUCBoZWFkZXJzIGluIHRoZSBvdXRwdXQsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1pIj4taSwgLS1pbmNsdWRlPC9hPiBtaWdodCBiZSB0aGUgb3B0aW9uIHlvdSdyZSBsb29raW5nIGZvci4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3UgdGhpbmsgdGhpcyBvcHRpb24gc3RpbGwgZG9lc24ndCBnaXZlIHlvdSBlbm91Z2ggZGV0YWlscywgY29uc2lkZXIgdXNpbmcgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS10cmFjZSI+LS10cmFjZTwvYT4gb3IgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS10cmFjZS1hc2NpaSI+LS10cmFjZS1hc2NpaTwvYT4gaW5zdGVhZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBvdmVycmlkZXMgcHJldmlvdXMgdXNlcyBvZiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLXRyYWNlLWFzY2lpIj4tLXRyYWNlLWFzY2lpPC9hPiBvciA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLXRyYWNlIj4tLXRyYWNlPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Vc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLXMiPi1zLCAtLXNpbGVudDwvYT4gdG8gbWFrZSBjdXJsIHF1aWV0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii13Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi13LCAtLXdyaXRlLW91dCAmbHQ7Zm9ybWF0Jmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5EZWZpbmVzIHdoYXQgdG8gZGlzcGxheSBvbiBzdGRvdXQgYWZ0ZXIgYSBjb21wbGV0ZWQgYW5kIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uLiBUaGUgZm9ybWF0IGlzIGEgc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gcGxhaW4gdGV4dCBtaXhlZCB3aXRoIGFueSBudW1iZXIgb2YgdmFyaWFibGVzLiBUaGUgc3RyaW5nIGNhbiBiZSBzcGVjaWZpZWQgYXMgInN0cmluZyIsIHRvIGdldCByZWFkIGZyb20gYSBwYXJ0aWN1bGFyIGZpbGUgeW91IHNwZWNpZnkgaXQgIkBmaWxlbmFtZSIgYW5kIHRvIHRlbGwgY3VybCB0byByZWFkIHRoZSBmb3JtYXQgZnJvbSBzdGRpbiB5b3Ugd3JpdGUgIkAtIi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgdmFyaWFibGVzIHByZXNlbnQgaW4gdGhlIG91dHB1dCBmb3JtYXQgd2lsbCBiZSBzdWJzdGl0dXRlZCBieSB0aGUgdmFsdWUgb3IgdGV4dCB0aGF0IGN1cmwgdGhpbmtzIGZpdCwgYXMgZGVzY3JpYmVkIGJlbG93LiBBbGwgdmFyaWFibGVzIGFyZSBzcGVjaWZpZWQgYXMgJXt2YXJpYWJsZV9uYW1lfSBhbmQgdG8gb3V0cHV0IGEgbm9ybWFsICUgeW91IGp1c3Qgd3JpdGUgdGhlbSBhcyAlJS4gWW91IGNhbiBvdXRwdXQgYSBuZXdsaW5lIGJ5IHVzaW5nIFxuLCBhIGNhcnJpYWdlIHJldHVybiB3aXRoIFxyIGFuZCBhIHRhYiBzcGFjZSB3aXRoIFx0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxzcGFuIENsYXNzPSJib2xkIj5OT1RFOjwvc3Bhbj4gVGhlICUtc3ltYm9sIGlzIGEgc3BlY2lhbCBzeW1ib2wgaW4gdGhlIHdpbjMyLWVudmlyb25tZW50LCB3aGVyZSBhbGwgb2NjdXJyZW5jZXMgb2YgJSBtdXN0IGJlIGRvdWJsZWQgd2hlbiB1c2luZyB0aGlzIG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgdmFyaWFibGVzIGF2YWlsYWJsZSBhdCB0aGlzIHBvaW50IGFyZTogCis8cCBjbGFzcz0ibGV2ZWwyIj4KKzxwIGNsYXNzPSJsZXZlbDIiPjxzcGFuIENsYXNzPSJib2xkIj51cmxfZWZmZWN0aXZlPC9zcGFuPiBUaGUgVVJMIHRoYXQgd2FzIGZldGNoZWQgbGFzdC4gVGhpcyBpcyBtb3N0IG1lYW5pbmdmdWwgaWYgeW91J3ZlIHRvbGQgY3VybCB0byBmb2xsb3cgbG9jYXRpb246IGhlYWRlcnMuIAorPHAgY2xhc3M9ImxldmVsMiI+PHNwYW4gQ2xhc3M9ImJvbGQiPmh0dHBfY29kZTwvc3Bhbj4gVGhlIG51bWVyaWNhbCByZXNwb25zZSBjb2RlIHRoYXQgd2FzIGZvdW5kIGluIHRoZSBsYXN0IHJldHJpZXZlZCBIVFRQKFMpIG9yIEZUUChzKSB0cmFuc2Zlci4gSW4gNy4xOC4yIHRoZSBhbGlhcyA8c3BhbiBDbGFzcz0iYm9sZCI+cmVzcG9uc2VfY29kZTwvc3Bhbj4gd2FzIGFkZGVkIHRvIHNob3cgdGhlIHNhbWUgaW5mby4gCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+aHR0cF9jb25uZWN0PC9zcGFuPiBUaGUgbnVtZXJpY2FsIGNvZGUgdGhhdCB3YXMgZm91bmQgaW4gdGhlIGxhc3QgcmVzcG9uc2UgKGZyb20gYSBwcm94eSkgdG8gYSBjdXJsIENPTk5FQ1QgcmVxdWVzdC4gKEFkZGVkIGluIDcuMTIuNCkgCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+dGltZV90b3RhbDwvc3Bhbj4gVGhlIHRvdGFsIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgdGhlIGZ1bGwgb3BlcmF0aW9uIGxhc3RlZC4gVGhlIHRpbWUgd2lsbCBiZSBkaXNwbGF5ZWQgd2l0aCBtaWxsaXNlY29uZCByZXNvbHV0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDIiPjxzcGFuIENsYXNzPSJib2xkIj50aW1lX25hbWVsb29rdXA8L3NwYW4+IFRoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBuYW1lIHJlc29sdmluZyB3YXMgY29tcGxldGVkLiAKKzxwIGNsYXNzPSJsZXZlbDIiPjxzcGFuIENsYXNzPSJib2xkIj50aW1lX2Nvbm5lY3Q8L3NwYW4+IFRoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBUQ1AgY29ubmVjdCB0byB0aGUgcmVtb3RlIGhvc3QgKG9yIHByb3h5KSB3YXMgY29tcGxldGVkLiAKKzxwIGNsYXNzPSJsZXZlbDIiPjxzcGFuIENsYXNzPSJib2xkIj50aW1lX2FwcGNvbm5lY3Q8L3NwYW4+IFRoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBTU0wvU1NIL2V0YyBjb25uZWN0L2hhbmRzaGFrZSB0byB0aGUgcmVtb3RlIGhvc3Qgd2FzIGNvbXBsZXRlZC4gKEFkZGVkIGluIDcuMTkuMCkgCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+dGltZV9wcmV0cmFuc2Zlcjwvc3Bhbj4gVGhlIHRpbWUsIGluIHNlY29uZHMsIGl0IHRvb2sgZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIGZpbGUgdHJhbnNmZXIgd2FzIGp1c3QgYWJvdXQgdG8gYmVnaW4uIFRoaXMgaW5jbHVkZXMgYWxsIHByZS10cmFuc2ZlciBjb21tYW5kcyBhbmQgbmVnb3RpYXRpb25zIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBwYXJ0aWN1bGFyIHByb3RvY29sKHMpIGludm9sdmVkLiAKKzxwIGNsYXNzPSJsZXZlbDIiPjxzcGFuIENsYXNzPSJib2xkIj50aW1lX3JlZGlyZWN0PC9zcGFuPiBUaGUgdGltZSwgaW4gc2Vjb25kcywgaXQgdG9vayBmb3IgYWxsIHJlZGlyZWN0aW9uIHN0ZXBzIGluY2x1ZGUgbmFtZSBsb29rdXAsIGNvbm5lY3QsIHByZXRyYW5zZmVyIGFuZCB0cmFuc2ZlciBiZWZvcmUgdGhlIGZpbmFsIHRyYW5zYWN0aW9uIHdhcyBzdGFydGVkLiB0aW1lX3JlZGlyZWN0IHNob3dzIHRoZSBjb21wbGV0ZSBleGVjdXRpb24gdGltZSBmb3IgbXVsdGlwbGUgcmVkaXJlY3Rpb25zLiAoQWRkZWQgaW4gNy4xMi4zKSAKKzxwIGNsYXNzPSJsZXZlbDIiPjxzcGFuIENsYXNzPSJib2xkIj50aW1lX3N0YXJ0dHJhbnNmZXI8L3NwYW4+IFRoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBmaXJzdCBieXRlIHdhcyBqdXN0IGFib3V0IHRvIGJlIHRyYW5zZmVycmVkLiBUaGlzIGluY2x1ZGVzIHRpbWVfcHJldHJhbnNmZXIgYW5kIGFsc28gdGhlIHRpbWUgdGhlIHNlcnZlciBuZWVkZWQgdG8gY2FsY3VsYXRlIHRoZSByZXN1bHQuIAorPHAgY2xhc3M9ImxldmVsMiI+PHNwYW4gQ2xhc3M9ImJvbGQiPnNpemVfZG93bmxvYWQ8L3NwYW4+IFRoZSB0b3RhbCBhbW91bnQgb2YgYnl0ZXMgdGhhdCB3ZXJlIGRvd25sb2FkZWQuIAorPHAgY2xhc3M9ImxldmVsMiI+PHNwYW4gQ2xhc3M9ImJvbGQiPnNpemVfdXBsb2FkPC9zcGFuPiBUaGUgdG90YWwgYW1vdW50IG9mIGJ5dGVzIHRoYXQgd2VyZSB1cGxvYWRlZC4gCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+c2l6ZV9oZWFkZXI8L3NwYW4+IFRoZSB0b3RhbCBhbW91bnQgb2YgYnl0ZXMgb2YgdGhlIGRvd25sb2FkZWQgaGVhZGVycy4gCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+c2l6ZV9yZXF1ZXN0PC9zcGFuPiBUaGUgdG90YWwgYW1vdW50IG9mIGJ5dGVzIHRoYXQgd2VyZSBzZW50IGluIHRoZSBIVFRQIHJlcXVlc3QuIAorPHAgY2xhc3M9ImxldmVsMiI+PHNwYW4gQ2xhc3M9ImJvbGQiPnNwZWVkX2Rvd25sb2FkPC9zcGFuPiBUaGUgYXZlcmFnZSBkb3dubG9hZCBzcGVlZCB0aGF0IGN1cmwgbWVhc3VyZWQgZm9yIHRoZSBjb21wbGV0ZSBkb3dubG9hZC4gQnl0ZXMgcGVyIHNlY29uZC4gCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+c3BlZWRfdXBsb2FkPC9zcGFuPiBUaGUgYXZlcmFnZSB1cGxvYWQgc3BlZWQgdGhhdCBjdXJsIG1lYXN1cmVkIGZvciB0aGUgY29tcGxldGUgdXBsb2FkLiBCeXRlcyBwZXIgc2Vjb25kLiAKKzxwIGNsYXNzPSJsZXZlbDIiPjxzcGFuIENsYXNzPSJib2xkIj5jb250ZW50X3R5cGU8L3NwYW4+IFRoZSBDb250ZW50LVR5cGUgb2YgdGhlIHJlcXVlc3RlZCBkb2N1bWVudCwgaWYgdGhlcmUgd2FzIGFueS4gCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+bnVtX2Nvbm5lY3RzPC9zcGFuPiBOdW1iZXIgb2YgbmV3IGNvbm5lY3RzIG1hZGUgaW4gdGhlIHJlY2VudCB0cmFuc2Zlci4gKEFkZGVkIGluIDcuMTIuMykgCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+bnVtX3JlZGlyZWN0czwvc3Bhbj4gTnVtYmVyIG9mIHJlZGlyZWN0cyB0aGF0IHdlcmUgZm9sbG93ZWQgaW4gdGhlIHJlcXVlc3QuIChBZGRlZCBpbiA3LjEyLjMpIAorPHAgY2xhc3M9ImxldmVsMiI+PHNwYW4gQ2xhc3M9ImJvbGQiPnJlZGlyZWN0X3VybDwvc3Bhbj4gV2hlbiBhIEhUVFAgcmVxdWVzdCB3YXMgbWFkZSB3aXRob3V0IC1MIHRvIGZvbGxvdyByZWRpcmVjdHMsIHRoaXMgdmFyaWFibGUgd2lsbCBzaG93IHRoZSBhY3R1YWwgVVJMIGEgcmVkaXJlY3QgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj53b3VsZDwvc3Bhbj4gdGFrZSB5b3UgdG8uIChBZGRlZCBpbiA3LjE4LjIpIAorPHAgY2xhc3M9ImxldmVsMiI+PHNwYW4gQ2xhc3M9ImJvbGQiPmZ0cF9lbnRyeV9wYXRoPC9zcGFuPiBUaGUgaW5pdGlhbCBwYXRoIGxpYmN1cmwgZW5kZWQgdXAgaW4gd2hlbiBsb2dnaW5nIG9uIHRvIHRoZSByZW1vdGUgRlRQIHNlcnZlci4gKEFkZGVkIGluIDcuMTUuNCkgCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+c3NsX3ZlcmlmeV9yZXN1bHQ8L3NwYW4+IFRoZSByZXN1bHQgb2YgdGhlIFNTTCBwZWVyIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiB0aGF0IHdhcyByZXF1ZXN0ZWQuIDAgbWVhbnMgdGhlIHZlcmlmaWNhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4gKEFkZGVkIGluIDcuMTkuMCkgCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSIteCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4teCwgLS1wcm94eSAmbHQ7W3Byb3RvY29sOi8vXVt1c2VyQHBhc3N3b3JkXXByb3h5aG9zdFs6cG9ydF0mZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlVzZSB0aGUgc3BlY2lmaWVkIEhUVFAgcHJveHkuIElmIHRoZSBwb3J0IG51bWJlciBpcyBub3Qgc3BlY2lmaWVkLCBpdCBpcyBhc3N1bWVkIGF0IHBvcnQgMTA4MC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBvdmVycmlkZXMgZXhpc3RpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgc2V0IHRoZSBwcm94eSB0byB1c2UuIElmIHRoZXJlJ3MgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0dGluZyBhIHByb3h5LCB5b3UgY2FuIHNldCBwcm94eSB0byAiIiB0byBvdmVycmlkZSBpdC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BbGwgb3BlcmF0aW9ucyB0aGF0IGFyZSBwZXJmb3JtZWQgb3ZlciBhIEhUVFAgcHJveHkgd2lsbCB0cmFuc3BhcmVudGx5IGJlIGNvbnZlcnRlZCB0byBIVFRQLiBJdCBtZWFucyB0aGF0IGNlcnRhaW4gcHJvdG9jb2wgc3BlY2lmaWMgb3BlcmF0aW9ucyBtaWdodCBub3QgYmUgYXZhaWxhYmxlLiBUaGlzIGlzIG5vdCB0aGUgY2FzZSBpZiB5b3UgY2FuIHR1bm5lbCB0aHJvdWdoIHRoZSBwcm94eSwgYXMgb25lIHdpdGggdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1wIj4tcCwgLS1wcm94eXR1bm5lbDwvYT4gb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBwcm94eSBob3N0IGNhbiBiZSBzcGVjaWZpZWQgdGhlIGV4YWN0IHNhbWUgd2F5IGFzIHRoZSBwcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGluY2x1ZGluZyB0aGUgcHJvdG9jb2wgcHJlZml4IChodHRwOi8vKSBhbmQgdGhlIGVtYmVkZGVkIHVzZXIgKyBwYXNzd29yZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Gcm9tIDcuMjEuNywgdGhlIHByb3h5IHN0cmluZyBtYXkgYmUgc3BlY2lmaWVkIHdpdGggYSBwcm90b2NvbDovLyBwcmVmaXggdG8gc3BlY2lmeSBhbHRlcm5hdGl2ZSBwcm94eSBwcm90b2NvbHMuIFVzZSBzb2NrczQ6Ly8sIHNvY2tzNGE6Ly8sIHNvY2tzNTovLyBvciBzb2NrczVoOi8vIHRvIHJlcXVlc3QgdGhlIHNwZWNpZmljIFNPQ0tTIHZlcnNpb24gdG8gYmUgdXNlZC4gTm8gcHJvdG9jb2wgc3BlY2lmaWVkLCBodHRwOi8vIGFuZCBhbGwgb3RoZXJzIHdpbGwgYmUgdHJlYXRlZCBhcyBIVFRQIHByb3hpZXMuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1YIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1YLCAtLXJlcXVlc3QgJmx0O2NvbW1hbmQmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihIVFRQKSBTcGVjaWZpZXMgYSBjdXN0b20gcmVxdWVzdCBtZXRob2QgdG8gdXNlIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIHRoZSBIVFRQIHNlcnZlci4gIFRoZSBzcGVjaWZpZWQgcmVxdWVzdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgbWV0aG9kIG90aGVyd2lzZSB1c2VkICh3aGljaCBkZWZhdWx0cyB0byBHRVQpLiBSZWFkIHRoZSBIVFRQIDEuMSBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIGFuZCBleHBsYW5hdGlvbnMuIENvbW1vbiBhZGRpdGlvbmFsIEhUVFAgcmVxdWVzdHMgaW5jbHVkZSBQVVQgYW5kIERFTEVURSwgYnV0IHJlbGF0ZWQgdGVjaG5vbG9naWVzIGxpa2UgV2ViREFWIG9mZmVycyBQUk9QRklORCwgQ09QWSwgTU9WRSBhbmQgbW9yZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oRlRQKSBTcGVjaWZpZXMgYSBjdXN0b20gRlRQIGNvbW1hbmQgdG8gdXNlIGluc3RlYWQgb2YgTElTVCB3aGVuIGRvaW5nIGZpbGUgbGlzdHMgd2l0aCBGVFAuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS14YXR0ciI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLXhhdHRyPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gc2F2aW5nIG91dHB1dCB0byBhIGZpbGUsIHRoaXMgb3B0aW9uIHRlbGxzIGN1cmwgdG8gc3RvcmUgY2VydGFpbiBmaWxlIG1ldGFkYXRhIGluIGV4dGVuZWQgZmlsZSBhdHRyaWJ1dGVzLiBDdXJyZW50bHksIHRoZSBVUkwgaXMgc3RvcmVkIGluIHRoZSB4ZGcub3JpZ2luLnVybCBhdHRyaWJ1dGUgYW5kLCBmb3IgSFRUUCwgdGhlIGNvbnRlbnQgdHlwZSBpcyBzdG9yZWQgaW4gdGhlIG1pbWVfdHlwZSBhdHRyaWJ1dGUuIElmIHRoZSBmaWxlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGEgd2FybmluZyBpcyBpc3N1ZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSIteSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4teSwgLS1zcGVlZC10aW1lICZsdDt0aW1lJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiBhIGRvd25sb2FkIGlzIHNsb3dlciB0aGFuIHNwZWVkLWxpbWl0IGJ5dGVzIHBlciBzZWNvbmQgZHVyaW5nIGEgc3BlZWQtdGltZSBwZXJpb2QsIHRoZSBkb3dubG9hZCBnZXRzIGFib3J0ZWQuIElmIHNwZWVkLXRpbWUgaXMgdXNlZCwgdGhlIGRlZmF1bHQgc3BlZWQtbGltaXQgd2lsbCBiZSAxIHVubGVzcyBzZXQgd2l0aCAtWS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBjb250cm9scyB0cmFuc2ZlcnMgYW5kIHRodXMgd2lsbCBub3QgYWZmZWN0IHNsb3cgY29ubmVjdHMgZXRjLiBJZiB0aGlzIGlzIGEgY29uY2VybiBmb3IgeW91LCB0cnkgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tY29ubmVjdC10aW1lb3V0Ij4tLWNvbm5lY3QtdGltZW91dDwvYT4gb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItWSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tWSwgLS1zcGVlZC1saW1pdCAmbHQ7c3BlZWQmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIGEgZG93bmxvYWQgaXMgc2xvd2VyIHRoYW4gdGhpcyBnaXZlbiBzcGVlZCAoaW4gYnl0ZXMgcGVyIHNlY29uZCkgZm9yIHNwZWVkLXRpbWUgc2Vjb25kcyBpdCBnZXRzIGFib3J0ZWQuIHNwZWVkLXRpbWUgaXMgc2V0IHdpdGggLXkgYW5kIGlzIDMwIGlmIG5vdCBzZXQuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii16Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi16LCAtLXRpbWUtY29uZCAmbHQ7ZGF0ZSBleHByZXNzaW9uJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oSFRUUC9GVFAvRklMRSkgUmVxdWVzdCBhIGZpbGUgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBsYXRlciB0aGFuIHRoZSBnaXZlbiB0aW1lIGFuZCBkYXRlLCBvciBvbmUgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBiZWZvcmUgdGhhdCB0aW1lLiBUaGUgZGF0ZSBleHByZXNzaW9uIGNhbiBiZSBhbGwgc29ydHMgb2YgZGF0ZSBzdHJpbmdzIG9yIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggYW55IGludGVybmFsIG9uZXMsIGl0IHRyaWVzIHRvIGdldCB0aGUgdGltZSBmcm9tIGEgZ2l2ZW4gZmlsZSBuYW1lIGluc3RlYWQhIFNlZSB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jdXJsX2dldGRhdGUoMyk8L3NwYW4+IG1hbiBwYWdlcyBmb3IgZGF0ZSBleHByZXNzaW9uIGRldGFpbHMuIAorPHAgY2xhc3M9ImxldmVsMSI+U3RhcnQgdGhlIGRhdGUgZXhwcmVzc2lvbiB3aXRoIGEgZGFzaCAoLSkgdG8gbWFrZSBpdCByZXF1ZXN0IGZvciBhIGRvY3VtZW50IHRoYXQgaXMgb2xkZXIgdGhhbiB0aGUgZ2l2ZW4gZGF0ZS90aW1lLCBkZWZhdWx0IGlzIGEgZG9jdW1lbnQgdGhhdCBpcyBuZXdlciB0aGFuIHRoZSBzcGVjaWZpZWQgZGF0ZS90aW1lLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItaCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4taCwgLS1oZWxwPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlVzYWdlIGhlbHAuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLU0iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LU0sIC0tbWFudWFsPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk1hbnVhbC4gRGlzcGxheSB0aGUgaHVnZSBoZWxwIHRleHQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLVYiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LVYsIC0tdmVyc2lvbjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5EaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCBjdXJsIGFuZCB0aGUgbGliY3VybCB2ZXJzaW9uIGl0IHVzZXMuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIGZpcnN0IGxpbmUgaW5jbHVkZXMgdGhlIGZ1bGwgdmVyc2lvbiBvZiBjdXJsLCBsaWJjdXJsIGFuZCBvdGhlciAzcmQgcGFydHkgbGlicmFyaWVzIGxpbmtlZCB3aXRoIHRoZSBleGVjdXRhYmxlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBzZWNvbmQgbGluZSAoc3RhcnRzIHdpdGggIlByb3RvY29sczoiKSBzaG93cyBhbGwgcHJvdG9jb2xzIHRoYXQgbGliY3VybCByZXBvcnRzIHRvIHN1cHBvcnQuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIHRoaXJkIGxpbmUgKHN0YXJ0cyB3aXRoICJGZWF0dXJlczoiKSBzaG93cyBzcGVjaWZpYyBmZWF0dXJlcyBsaWJjdXJsIHJlcG9ydHMgdG8gb2ZmZXIuIEF2YWlsYWJsZSBmZWF0dXJlcyBpbmNsdWRlOiAKKzxwIGNsYXNzPSJsZXZlbDIiPgorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iSVB2NiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5JUHY2PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPllvdSBjYW4gdXNlIElQdjYgd2l0aCB0aGlzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9ImtyYjQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+a3JiNDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5LcmI0IGZvciBGVFAgaXMgc3VwcG9ydGVkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IlNTTCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5TU0w8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+SFRUUFMgYW5kIEZUUFMgYXJlIHN1cHBvcnRlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJsaWJ6Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPmxpYno8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+QXV0b21hdGljIGRlY29tcHJlc3Npb24gb2YgY29tcHJlc3NlZCBmaWxlcyBvdmVyIEhUVFAgaXMgc3VwcG9ydGVkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9Ik5UTE0iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+TlRMTTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5OVExNIGF1dGhlbnRpY2F0aW9uIGlzIHN1cHBvcnRlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJHU1MtTmVnb3RpYXRlIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkdTUy1OZWdvdGlhdGU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+TmVnb3RpYXRlIGF1dGhlbnRpY2F0aW9uIGFuZCBrcmI1IGZvciBGVFAgaXMgc3VwcG9ydGVkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkRlYnVnIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkRlYnVnPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRoaXMgY3VybCB1c2VzIGEgbGliY3VybCBidWlsdCB3aXRoIERlYnVnLiBUaGlzIGVuYWJsZXMgbW9yZSBlcnJvci10cmFja2luZyBhbmQgbWVtb3J5IGRlYnVnZ2luZyBldGMuIEZvciBjdXJsLWRldmVsb3BlcnMgb25seSEgCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJBc3luY2hETlMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+QXN5bmNoRE5TPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRoaXMgY3VybCB1c2VzIGFzeW5jaHJvbm91cyBuYW1lIHJlc29sdmVzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IlNQTkVHTyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5TUE5FR088L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+U1BORUdPIE5lZ290aWF0ZSBhdXRoZW50aWNhdGlvbiBpcyBzdXBwb3J0ZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iTGFyZ2VmaWxlIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkxhcmdlZmlsZTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGlzIGN1cmwgc3VwcG9ydHMgdHJhbnNmZXJzIG9mIGxhcmdlIGZpbGVzLCBmaWxlcyBsYXJnZXIgdGhhbiAyR0IuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iSUROIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPklETjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGlzIGN1cmwgc3VwcG9ydHMgSUROIC0gaW50ZXJuYXRpb25hbCBkb21haW4gbmFtZXMuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iU1NQSSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5TU1BJPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlNTUEkgaXMgc3VwcG9ydGVkLiBJZiB5b3UgdXNlIE5UTE0gYW5kIHNldCBhIGJsYW5rIHVzZXIgbmFtZSwgY3VybCB3aWxsIGF1dGhlbnRpY2F0ZSB3aXRoIHlvdXIgY3VycmVudCB1c2VyIGFuZCBwYXNzd29yZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJUTFMtU1JQIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPlRMUy1TUlA8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+U1JQIChTZWN1cmUgUmVtb3RlIFBhc3N3b3JkKSBhdXRoZW50aWNhdGlvbiBpcyBzdXBwb3J0ZWQgZm9yIFRMUy4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJGSUxFUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+RklMRVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5+Ly5jdXJscmM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RGVmYXVsdCBjb25maWcgZmlsZSwgc2VlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1LIj4tSywgLS1jb25maWc8L2E+IGZvciBkZXRhaWxzLiA8YSBuYW1lPSJFTlZJUk9OTUVOVCI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+RU5WSVJPTk1FTlQ8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBjYW4gYmUgc3BlY2lmaWVkIGluIGxvd2VyIGNhc2Ugb3IgdXBwZXIgY2FzZS4gVGhlIGxvd2VyIGNhc2UgdmVyc2lvbiBoYXMgcHJlY2VkZW5jZS4gaHR0cF9wcm94eSBpcyBhbiBleGNlcHRpb24gYXMgaXQgaXMgb25seSBhdmFpbGFibGUgaW4gbG93ZXIgY2FzZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Vc2luZyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQgdGhlIHByb3h5IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdXNpbmcgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+LS1wcm94eTwvc3Bhbj4gb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iaHR0cHByb3h5Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPmh0dHBfcHJveHkgW3Byb3RvY29sOi8vXSZsdDtob3N0Jmd0O1s6cG9ydF08L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U2V0cyB0aGUgcHJveHkgc2VydmVyIHRvIHVzZSBmb3IgSFRUUC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJIVFRQU1BST1hZIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkhUVFBTX1BST1hZIFtwcm90b2NvbDovL10mbHQ7aG9zdCZndDtbOnBvcnRdPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldHMgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yIEhUVFBTLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9InVybC1wcm90b2NvbFBST1hZIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPlt1cmwtcHJvdG9jb2xdX1BST1hZIFtwcm90b2NvbDovL10mbHQ7aG9zdCZndDtbOnBvcnRdPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldHMgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yIFt1cmwtcHJvdG9jb2xdLCB3aGVyZSB0aGUgcHJvdG9jb2wgaXMgYSBwcm90b2NvbCB0aGF0IGN1cmwgc3VwcG9ydHMgYW5kIGFzIHNwZWNpZmllZCBpbiBhIFVSTC4gRlRQLCBGVFBTLCBQT1AzLCBJTUFQLCBTTVRQLCBMREFQIGV0Yy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJBTExQUk9YWSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5BTExfUFJPWFkgW3Byb3RvY29sOi8vXSZsdDtob3N0Jmd0O1s6cG9ydF08L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U2V0cyB0aGUgcHJveHkgc2VydmVyIHRvIHVzZSBpZiBubyBwcm90b2NvbC1zcGVjaWZpYyBwcm94eSBpcyBzZXQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTk9QUk9YWSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5OT19QUk9YWSAmbHQ7Y29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaG9zdHMmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPmxpc3Qgb2YgaG9zdCBuYW1lcyB0aGF0IHNob3VsZG4ndCBnbyB0aHJvdWdoIGFueSBwcm94eS4gSWYgc2V0IHRvIGEgYXN0ZXJpc2sgJyonIG9ubHksIGl0IG1hdGNoZXMgYWxsIGhvc3RzLiA8YSBuYW1lPSJQUk9YWSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UFJPWFkgUFJPVE9DT0wgUFJFRklYRVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+U2luY2UgY3VybCB2ZXJzaW9uIDcuMjEuNywgdGhlIHByb3h5IHN0cmluZyBtYXkgYmUgc3BlY2lmaWVkIHdpdGggYSBwcm90b2NvbDovLyBwcmVmaXggdG8gc3BlY2lmeSBhbHRlcm5hdGl2ZSBwcm94eSBwcm90b2NvbHMuIAorPHAgY2xhc3M9ImxldmVsMCI+SWYgbm8gcHJvdG9jb2wgaXMgc3BlY2lmaWVkIGluIHRoZSBwcm94eSBzdHJpbmcgb3IgaWYgdGhlIHN0cmluZyBkb2Vzbid0IG1hdGNoIGEgc3VwcG9ydGVkIG9uZSwgdGhlIHByb3h5IHdpbGwgYmUgdHJlYXRlZCBhcyBhIEhUVFAgcHJveHkuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIHN1cHBvcnRlZCBwcm94eSBwcm90b2NvbCBwcmVmaXhlcyBhcmUgYXMgZm9sbG93czogCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJzb2NrczQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+c29ja3M0Oi8vPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk1ha2VzIGl0IHRoZSBlcXVpdmFsZW50IG9mIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tc29ja3M0Ij4tLXNvY2tzNDwvYT4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJzb2NrczRhIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPnNvY2tzNGE6Ly88L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+TWFrZXMgaXQgdGhlIGVxdWl2YWxlbnQgb2YgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLS1zb2NrczRhIj4tLXNvY2tzNGE8L2E+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0ic29ja3M1Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPnNvY2tzNTovLzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5NYWtlcyBpdCB0aGUgZXF1aXZhbGVudCBvZiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiMtLXNvY2tzNSI+LS1zb2NrczU8L2E+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0ic29ja3M1aCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5zb2NrczVoOi8vPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk1ha2VzIGl0IHRoZSBlcXVpdmFsZW50IG9mIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy0tc29ja3M1LWhvc3RuYW1lIj4tLXNvY2tzNS1ob3N0bmFtZTwvYT4gPGEgbmFtZT0iRVhJVCI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+RVhJVCBDT0RFUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGVyZSBhcmUgYSBidW5jaCBvZiBkaWZmZXJlbnQgZXJyb3IgY29kZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMgdGhhdCBtYXkgYXBwZWFyIGR1cmluZyBiYWQgY29uZGl0aW9ucy4gQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCB0aGUgZXhpdCBjb2RlcyBhcmU6IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iMSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4xPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlVuc3VwcG9ydGVkIHByb3RvY29sLiBUaGlzIGJ1aWxkIG9mIGN1cmwgaGFzIG5vIHN1cHBvcnQgZm9yIHRoaXMgcHJvdG9jb2wuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iMiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4yPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZhaWxlZCB0byBpbml0aWFsaXplLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Mzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5VUkwgbWFsZm9ybWVkLiBUaGUgc3ludGF4IHdhcyBub3QgY29ycmVjdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSI0Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QSBmZWF0dXJlIG9yIG9wdGlvbiB0aGF0IHdhcyBuZWVkZWQgdG8gcGVyZm9ybSB0aGUgZGVzaXJlZCByZXF1ZXN0IHdhcyBub3QgZW5hYmxlZCBvciB3YXMgZXhwbGljaXRseSBkaXNhYmxlZCBhdCBidWlsZC10aW1lLiBUbyBtYWtlIGN1cmwgYWJsZSB0byBkbyB0aGlzLCB5b3UgcHJvYmFibHkgbmVlZCBhbm90aGVyIGJ1aWxkIG9mIGxpYmN1cmwhIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj41PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkNvdWxkbid0IHJlc29sdmUgcHJveHkuIFRoZSBnaXZlbiBwcm94eSBob3N0IGNvdWxkIG5vdCBiZSByZXNvbHZlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSI2Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjY8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Q291bGRuJ3QgcmVzb2x2ZSBob3N0LiBUaGUgZ2l2ZW4gcmVtb3RlIGhvc3Qgd2FzIG5vdCByZXNvbHZlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSI3Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjc8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RmFpbGVkIHRvIGNvbm5lY3QgdG8gaG9zdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSI4Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjg8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RlRQIHdlaXJkIHNlcnZlciByZXBseS4gVGhlIHNlcnZlciBzZW50IGRhdGEgY3VybCBjb3VsZG4ndCBwYXJzZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSI5Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RlRQIGFjY2VzcyBkZW5pZWQuIFRoZSBzZXJ2ZXIgZGVuaWVkIGxvZ2luIG9yIGRlbmllZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgcmVzb3VyY2Ugb3IgZGlyZWN0b3J5IHlvdSB3YW50ZWQgdG8gcmVhY2guIE1vc3Qgb2Z0ZW4geW91IHRyaWVkIHRvIGNoYW5nZSB0byBhIGRpcmVjdG9yeSB0aGF0IGRvZXNuJ3QgZXhpc3Qgb24gdGhlIHNlcnZlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSIxMSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4xMTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GVFAgd2VpcmQgUEFTUyByZXBseS4gQ3VybCBjb3VsZG4ndCBwYXJzZSB0aGUgcmVwbHkgc2VudCB0byB0aGUgUEFTUyByZXF1ZXN0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjEzIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjEzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZUUCB3ZWlyZCBQQVNWIHJlcGx5LCBDdXJsIGNvdWxkbid0IHBhcnNlIHRoZSByZXBseSBzZW50IHRvIHRoZSBQQVNWIHJlcXVlc3QuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iMTQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+MTQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RlRQIHdlaXJkIDIyNyBmb3JtYXQuIEN1cmwgY291bGRuJ3QgcGFyc2UgdGhlIDIyNy1saW5lIHRoZSBzZXJ2ZXIgc2VudC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSIxNSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4xNTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GVFAgY2FuJ3QgZ2V0IGhvc3QuIENvdWxkbid0IHJlc29sdmUgdGhlIGhvc3QgSVAgd2UgZ290IGluIHRoZSAyMjctbGluZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSIxNyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4xNzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GVFAgY291bGRuJ3Qgc2V0IGJpbmFyeS4gQ291bGRuJ3QgY2hhbmdlIHRyYW5zZmVyIG1ldGhvZCB0byBiaW5hcnkuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iMTgiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+MTg8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFydGlhbCBmaWxlLiBPbmx5IGEgcGFydCBvZiB0aGUgZmlsZSB3YXMgdHJhbnNmZXJyZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iMTkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+MTk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RlRQIGNvdWxkbid0IGRvd25sb2FkL2FjY2VzcyB0aGUgZ2l2ZW4gZmlsZSwgdGhlIFJFVFIgKG9yIHNpbWlsYXIpIGNvbW1hbmQgZmFpbGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjIxIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjIxPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZUUCBxdW90ZSBlcnJvci4gQSBxdW90ZSBjb21tYW5kIHJldHVybmVkIGVycm9yIGZyb20gdGhlIHNlcnZlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSIyMiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4yMjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5IVFRQIHBhZ2Ugbm90IHJldHJpZXZlZC4gVGhlIHJlcXVlc3RlZCB1cmwgd2FzIG5vdCBmb3VuZCBvciByZXR1cm5lZCBhbm90aGVyIGVycm9yIHdpdGggdGhlIEhUVFAgZXJyb3IgY29kZSBiZWluZyA0MDAgb3IgYWJvdmUuIFRoaXMgcmV0dXJuIGNvZGUgb25seSBhcHBlYXJzIGlmIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iIy1mIj4tZiwgLS1mYWlsPC9hPiBpcyB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjIzIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjIzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPldyaXRlIGVycm9yLiBDdXJsIGNvdWxkbid0IHdyaXRlIGRhdGEgdG8gYSBsb2NhbCBmaWxlc3lzdGVtIG9yIHNpbWlsYXIuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iMjUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+MjU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RlRQIGNvdWxkbid0IFNUT1IgZmlsZS4gVGhlIHNlcnZlciBkZW5pZWQgdGhlIFNUT1Igb3BlcmF0aW9uLCB1c2VkIGZvciBGVFAgdXBsb2FkaW5nLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjI2Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjI2PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlJlYWQgZXJyb3IuIFZhcmlvdXMgcmVhZGluZyBwcm9ibGVtcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSIyNyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4yNzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5PdXQgb2YgbWVtb3J5LiBBIG1lbW9yeSBhbGxvY2F0aW9uIHJlcXVlc3QgZmFpbGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjI4Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjI4PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk9wZXJhdGlvbiB0aW1lb3V0LiBUaGUgc3BlY2lmaWVkIHRpbWUtb3V0IHBlcmlvZCB3YXMgcmVhY2hlZCBhY2NvcmRpbmcgdG8gdGhlIGNvbmRpdGlvbnMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iMzAiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+MzA8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RlRQIFBPUlQgZmFpbGVkLiBUaGUgUE9SVCBjb21tYW5kIGZhaWxlZC4gTm90IGFsbCBGVFAgc2VydmVycyBzdXBwb3J0IHRoZSBQT1JUIGNvbW1hbmQsIHRyeSBkb2luZyBhIHRyYW5zZmVyIHVzaW5nIFBBU1YgaW5zdGVhZCEgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSIzMSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4zMTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GVFAgY291bGRuJ3QgdXNlIFJFU1QuIFRoZSBSRVNUIGNvbW1hbmQgZmFpbGVkLiBUaGlzIGNvbW1hbmQgaXMgdXNlZCBmb3IgcmVzdW1lZCBGVFAgdHJhbnNmZXJzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjMzIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjMzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkhUVFAgcmFuZ2UgZXJyb3IuIFRoZSByYW5nZSAiY29tbWFuZCIgZGlkbid0IHdvcmsuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iMzQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+MzQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+SFRUUCBwb3N0IGVycm9yLiBJbnRlcm5hbCBwb3N0LXJlcXVlc3QgZ2VuZXJhdGlvbiBlcnJvci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSIzNSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4zNTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TU0wgY29ubmVjdCBlcnJvci4gVGhlIFNTTCBoYW5kc2hha2luZyBmYWlsZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iMzYiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+MzY8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RlRQIGJhZCBkb3dubG9hZCByZXN1bWUuIENvdWxkbid0IGNvbnRpbnVlIGFuIGVhcmxpZXIgYWJvcnRlZCBkb3dubG9hZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSIzNyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4zNzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GSUxFIGNvdWxkbid0IHJlYWQgZmlsZS4gRmFpbGVkIHRvIG9wZW4gdGhlIGZpbGUuIFBlcm1pc3Npb25zPyAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjM4Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjM4PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkxEQVAgY2Fubm90IGJpbmQuIExEQVAgYmluZCBvcGVyYXRpb24gZmFpbGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjM5Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjM5PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkxEQVAgc2VhcmNoIGZhaWxlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSI0MSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj40MTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GdW5jdGlvbiBub3QgZm91bmQuIEEgcmVxdWlyZWQgTERBUCBmdW5jdGlvbiB3YXMgbm90IGZvdW5kLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjQyIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjQyPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFib3J0ZWQgYnkgY2FsbGJhY2suIEFuIGFwcGxpY2F0aW9uIHRvbGQgY3VybCB0byBhYm9ydCB0aGUgb3BlcmF0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjQzIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjQzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkludGVybmFsIGVycm9yLiBBIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aCBhIGJhZCBwYXJhbWV0ZXIuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNDUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NDU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+SW50ZXJmYWNlIGVycm9yLiBBIHNwZWNpZmllZCBvdXRnb2luZyBpbnRlcmZhY2UgY291bGQgbm90IGJlIHVzZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNDciPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NDc8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VG9vIG1hbnkgcmVkaXJlY3RzLiBXaGVuIGZvbGxvd2luZyByZWRpcmVjdHMsIGN1cmwgaGl0IHRoZSBtYXhpbXVtIGFtb3VudC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSI0OCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj40ODwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Vbmtub3duIG9wdGlvbiBzcGVjaWZpZWQgdG8gbGliY3VybC4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB5b3UgcGFzc2VkIGEgd2VpcmQgb3B0aW9uIHRvIGN1cmwgdGhhdCB3YXMgcGFzc2VkIG9uIHRvIGxpYmN1cmwgYW5kIHJlamVjdGVkLiBSZWFkIHVwIGluIHRoZSBtYW51YWwhIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNDkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NDk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+TWFsZm9ybWVkIHRlbG5ldCBvcHRpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNTEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NTE8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIHBlZXIncyBTU0wgY2VydGlmaWNhdGUgb3IgU1NIIE1ENSBmaW5nZXJwcmludCB3YXMgbm90IE9LLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjUyIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjUyPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBzZXJ2ZXIgZGlkbid0IHJlcGx5IGFueXRoaW5nLCB3aGljaCBoZXJlIGlzIGNvbnNpZGVyZWQgYW4gZXJyb3IuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNTMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NTM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U1NMIGNyeXB0byBlbmdpbmUgbm90IGZvdW5kLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjU0Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjU0PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkNhbm5vdCBzZXQgU1NMIGNyeXB0byBlbmdpbmUgYXMgZGVmYXVsdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSI1NSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj41NTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GYWlsZWQgc2VuZGluZyBuZXR3b3JrIGRhdGEuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNTYiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NTY8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RmFpbHVyZSBpbiByZWNlaXZpbmcgbmV0d29yayBkYXRhLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjU4Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjU4PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlByb2JsZW0gd2l0aCB0aGUgbG9jYWwgY2VydGlmaWNhdGUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNTkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NTk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Q291bGRuJ3QgdXNlIHNwZWNpZmllZCBTU0wgY2lwaGVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjYwIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjYwPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBlZXIgY2VydGlmaWNhdGUgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCBrbm93biBDQSBjZXJ0aWZpY2F0ZXMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNjEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NjE8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VW5yZWNvZ25pemVkIHRyYW5zZmVyIGVuY29kaW5nLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjYyIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjYyPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkludmFsaWQgTERBUCBVUkwuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNjMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NjM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+TWF4aW11bSBmaWxlIHNpemUgZXhjZWVkZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNjQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NjQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UmVxdWVzdGVkIEZUUCBTU0wgbGV2ZWwgZmFpbGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjY1Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjY1PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNlbmRpbmcgdGhlIGRhdGEgcmVxdWlyZXMgYSByZXdpbmQgdGhhdCBmYWlsZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNjYiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NjY8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RmFpbGVkIHRvIGluaXRpYWxpc2UgU1NMIEVuZ2luZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSI2NyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj42Nzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgdXNlciBuYW1lLCBwYXNzd29yZCwgb3Igc2ltaWxhciB3YXMgbm90IGFjY2VwdGVkIGFuZCBjdXJsIGZhaWxlZCB0byBsb2cgaW4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNjgiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Njg8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RmlsZSBub3QgZm91bmQgb24gVEZUUCBzZXJ2ZXIuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNjkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Njk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGVybWlzc2lvbiBwcm9ibGVtIG9uIFRGVFAgc2VydmVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjcwIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjcwPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk91dCBvZiBkaXNrIHNwYWNlIG9uIFRGVFAgc2VydmVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjcxIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjcxPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPklsbGVnYWwgVEZUUCBvcGVyYXRpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNzIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NzI8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VW5rbm93biBURlRQIHRyYW5zZmVyIElELiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjczIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjczPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZpbGUgYWxyZWFkeSBleGlzdHMgKFRGVFApLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ijc0Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjc0PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk5vIHN1Y2ggdXNlciAoVEZUUCkuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNzUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+NzU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Q2hhcmFjdGVyIGNvbnZlcnNpb24gZmFpbGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ijc2Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjc2PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkNoYXJhY3RlciBjb252ZXJzaW9uIGZ1bmN0aW9ucyByZXF1aXJlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSI3NyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj43Nzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Qcm9ibGVtIHdpdGggcmVhZGluZyB0aGUgU1NMIENBIGNlcnQgKHBhdGg/IGFjY2VzcyByaWdodHM/KS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSI3OCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj43ODwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgcmVzb3VyY2UgcmVmZXJlbmNlZCBpbiB0aGUgVVJMIGRvZXMgbm90IGV4aXN0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ijc5Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjc5PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFuIHVuc3BlY2lmaWVkIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUgU1NIIHNlc3Npb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iODAiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+ODA8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RmFpbGVkIHRvIHNodXQgZG93biB0aGUgU1NMIGNvbm5lY3Rpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iODIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+ODI8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Q291bGQgbm90IGxvYWQgQ1JMIGZpbGUsIG1pc3Npbmcgb3Igd3JvbmcgZm9ybWF0IChhZGRlZCBpbiA3LjE5LjApLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjgzIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjgzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPklzc3VlciBjaGVjayBmYWlsZWQgKGFkZGVkIGluIDcuMTkuMCkuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iODQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+ODQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIEZUUCBQUkVUIGNvbW1hbmQgZmFpbGVkIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iODUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+ODU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UlRTUDogbWlzbWF0Y2ggb2YgQ1NlcSBudW1iZXJzIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iODYiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+ODY8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UlRTUDogbWlzbWF0Y2ggb2YgU2Vzc2lvbiBJZGVudGlmaWVycyAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ijg3Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPjg3PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPnVuYWJsZSB0byBwYXJzZSBGVFAgZmlsZSBsaXN0IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iODgiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+ODg8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RlRQIGNodW5rIGNhbGxiYWNrIHJlcG9ydGVkIGVycm9yIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iWFgiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+WFg8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+TW9yZSBlcnJvciBjb2RlcyB3aWxsIGFwcGVhciBoZXJlIGluIGZ1dHVyZSByZWxlYXNlcy4gVGhlIGV4aXN0aW5nIG9uZXMgYXJlIG1lYW50IHRvIG5ldmVyIGNoYW5nZS4gPGEgbmFtZT0iQVVUSE9SUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+QVVUSE9SUyAvIENPTlRSSUJVVE9SUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5EYW5pZWwgU3RlbmJlcmcgaXMgdGhlIG1haW4gYXV0aG9yLCBidXQgdGhlIHdob2xlIGxpc3Qgb2YgY29udHJpYnV0b3JzIGlzIGZvdW5kIGluIHRoZSBzZXBhcmF0ZSBUSEFOS1MgZmlsZS4gPGEgbmFtZT0iV1dXIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5XV1c8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgaHJlZj0iaHR0cDovL2N1cmwuaGF4eC5zZSI+aHR0cDovL2N1cmwuaGF4eC5zZTwvYT4gPGEgbmFtZT0iRlRQIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5GVFA8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgaHJlZj0iZnRwOi8vZnRwLnN1bmV0LnNlL3B1Yi93d3cvdXRpbGl0aWVzL2N1cmwvIj5mdHA6Ly9mdHAuc3VuZXQuc2UvcHViL3d3dy91dGlsaXRpZXMvY3VybC88L2E+IDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPmZ0cCAoMSk8L3NwYW4+IDxzcGFuIENsYXNzPSJtYW5wYWdlIj53Z2V0ICgxKTwvc3Bhbj4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2N1cmwucGRmIGIvY3VybC03LjI1LjAvZG9jcy9jdXJsLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODZhNjhlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9jdXJsLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzLzEwLWF0LWEtdGltZS5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy8xMC1hdC1hLXRpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODVmZmY0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy8xMC1hdC1hLXRpbWUuYwpAQCAtMCwwICsxLDE5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFeGFtcGxlIGFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIHVzaW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gZG93bmxvYWQgbWFueQorICogZmlsZXMsIGJ1dCB3aXRoIGEgY2FwcGVkIG1heGltdW0gYW1vdW50IG9mIHNpbXVsdGFuZW91cyB0cmFuc2ZlcnMuCisgKgorICogV3JpdHRlbiBieSBNaWNoYWVsIFdhbGxuZXIKKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZm5kZWYgV0lOMzIKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8Y3VybC9tdWx0aS5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqdXJsc1tdID0geworICAiaHR0cDovL3d3dy5taWNyb3NvZnQuY29tIiwKKyAgImh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmciLAorICAiaHR0cDovL3d3dy5nb29nbGUuY29tIiwKKyAgImh0dHA6Ly93d3cueWFob28uY29tIiwKKyAgImh0dHA6Ly93d3cuaWJtLmNvbSIsCisgICJodHRwOi8vd3d3Lm15c3FsLmNvbSIsCisgICJodHRwOi8vd3d3Lm9yYWNsZS5jb20iLAorICAiaHR0cDovL3d3dy5yaXBlLm5ldCIsCisgICJodHRwOi8vd3d3LmlhbmEub3JnIiwKKyAgImh0dHA6Ly93d3cuYW1hem9uLmNvbSIsCisgICJodHRwOi8vd3d3Lm5ldGNyYWZ0LmNvbSIsCisgICJodHRwOi8vd3d3LmhlaXNlLmRlIiwKKyAgImh0dHA6Ly93d3cuY2hpcC5kZSIsCisgICJodHRwOi8vd3d3LmNhLmNvbSIsCisgICJodHRwOi8vd3d3LmNuZXQuY29tIiwKKyAgImh0dHA6Ly93d3cubmV3cy5jb20iLAorICAiaHR0cDovL3d3dy5jbm4uY29tIiwKKyAgImh0dHA6Ly93d3cud2lraXBlZGlhLm9yZyIsCisgICJodHRwOi8vd3d3LmRlbGwuY29tIiwKKyAgImh0dHA6Ly93d3cuaHAuY29tIiwKKyAgImh0dHA6Ly93d3cuY2VydC5vcmciLAorICAiaHR0cDovL3d3dy5taXQuZWR1IiwKKyAgImh0dHA6Ly93d3cubmlzdC5nb3YiLAorICAiaHR0cDovL3d3dy5lYmF5LmNvbSIsCisgICJodHRwOi8vd3d3LnBsYXlzdGF0aW9uLmNvbSIsCisgICJodHRwOi8vd3d3LnVlZmEuY29tIiwKKyAgImh0dHA6Ly93d3cuaWVlZS5vcmciLAorICAiaHR0cDovL3d3dy5hcHBsZS5jb20iLAorICAiaHR0cDovL3d3dy5zb255LmNvbSIsCisgICJodHRwOi8vd3d3LnN5bWFudGVjLmNvbSIsCisgICJodHRwOi8vd3d3LnpkbmV0LmNvbSIsCisgICJodHRwOi8vd3d3LmZ1aml0c3UuY29tIiwKKyAgImh0dHA6Ly93d3cuc3VwZXJtaWNyby5jb20iLAorICAiaHR0cDovL3d3dy5ob3RtYWlsLmNvbSIsCisgICJodHRwOi8vd3d3LmVjbWEuY29tIiwKKyAgImh0dHA6Ly93d3cuYmJjLmNvLnVrIiwKKyAgImh0dHA6Ly9uZXdzLmdvb2dsZS5jb20iLAorICAiaHR0cDovL3d3dy5mb3huZXdzLmNvbSIsCisgICJodHRwOi8vd3d3Lm1zbi5jb20iLAorICAiaHR0cDovL3d3dy53aXJlZC5jb20iLAorICAiaHR0cDovL3d3dy5za3kuY29tIiwKKyAgImh0dHA6Ly93d3cudXNhdG9kYXkuY29tIiwKKyAgImh0dHA6Ly93d3cuY2JzLmNvbSIsCisgICJodHRwOi8vd3d3Lm5iYy5jb20iLAorICAiaHR0cDovL3NsYXNoZG90Lm9yZyIsCisgICJodHRwOi8vd3d3LmJsb2dsaW5lcy5jb20iLAorICAiaHR0cDovL3d3dy50ZWNod2ViLmNvbSIsCisgICJodHRwOi8vd3d3Lm5ld3NsaW5rLm9yZyIsCisgICJodHRwOi8vd3d3LnVuLm9yZyIsCit9OworCisjZGVmaW5lIE1BWCAxMCAvKiBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHRyYW5zZmVycyAqLworI2RlZmluZSBDTlQgc2l6ZW9mKHVybHMpL3NpemVvZihjaGFyKikgLyogdG90YWwgbnVtYmVyIG9mIHRyYW5zZmVycyB0byBkbyAqLworCitzdGF0aWMgc2l6ZV90IGNiKGNoYXIgKmQsIHNpemVfdCBuLCBzaXplX3QgbCwgdm9pZCAqcCkKK3sKKyAgLyogdGFrZSBjYXJlIG9mIHRoZSBkYXRhIGhlcmUsIGlnbm9yZWQgaW4gdGhpcyBleGFtcGxlICovCisgICh2b2lkKWQ7CisgICh2b2lkKXA7CisgIHJldHVybiBuKmw7Cit9CisKK3N0YXRpYyB2b2lkIGluaXQoQ1VSTE0gKmNtLCBpbnQgaSkKK3sKKyAgQ1VSTCAqZWggPSBjdXJsX2Vhc3lfaW5pdCgpOworCisgIGN1cmxfZWFzeV9zZXRvcHQoZWgsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgY2IpOworICBjdXJsX2Vhc3lfc2V0b3B0KGVoLCBDVVJMT1BUX0hFQURFUiwgMEwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGVoLCBDVVJMT1BUX1VSTCwgdXJsc1tpXSk7CisgIGN1cmxfZWFzeV9zZXRvcHQoZWgsIENVUkxPUFRfUFJJVkFURSwgdXJsc1tpXSk7CisgIGN1cmxfZWFzeV9zZXRvcHQoZWgsIENVUkxPUFRfVkVSQk9TRSwgMEwpOworCisgIGN1cmxfbXVsdGlfYWRkX2hhbmRsZShjbSwgZWgpOworfQorCitpbnQgbWFpbih2b2lkKQoreworICBDVVJMTSAqY207CisgIENVUkxNc2cgKm1zZzsKKyAgbG9uZyBMOworICB1bnNpZ25lZCBpbnQgQz0wOworICBpbnQgTSwgUSwgVSA9IC0xOworICBmZF9zZXQgUiwgVywgRTsKKyAgc3RydWN0IHRpbWV2YWwgVDsKKworICBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisKKyAgY20gPSBjdXJsX211bHRpX2luaXQoKTsKKworICAvKiB3ZSBjYW4gb3B0aW9uYWxseSBsaW1pdCB0aGUgdG90YWwgYW1vdW50IG9mIGNvbm5lY3Rpb25zIHRoaXMgbXVsdGkgaGFuZGxlCisgICAgIHVzZXMgKi8KKyAgY3VybF9tdWx0aV9zZXRvcHQoY20sIENVUkxNT1BUX01BWENPTk5FQ1RTLCAobG9uZylNQVgpOworCisgIGZvciAoQyA9IDA7IEMgPCBNQVg7ICsrQykgeworICAgIGluaXQoY20sIEMpOworICB9CisKKyAgd2hpbGUgKFUpIHsKKyAgICBjdXJsX211bHRpX3BlcmZvcm0oY20sICZVKTsKKworICAgIGlmIChVKSB7CisgICAgICBGRF9aRVJPKCZSKTsKKyAgICAgIEZEX1pFUk8oJlcpOworICAgICAgRkRfWkVSTygmRSk7CisKKyAgICAgIGlmIChjdXJsX211bHRpX2Zkc2V0KGNtLCAmUiwgJlcsICZFLCAmTSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFOiBjdXJsX211bHRpX2Zkc2V0XG4iKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICAgIH0KKworICAgICAgaWYgKGN1cmxfbXVsdGlfdGltZW91dChjbSwgJkwpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRTogY3VybF9tdWx0aV90aW1lb3V0XG4iKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICAgIH0KKyAgICAgIGlmIChMID09IC0xKQorICAgICAgICBMID0gMTAwOworCisgICAgICBpZiAoTSA9PSAtMSkgeworI2lmZGVmIFdJTjMyCisgICAgICAgIFNsZWVwKEwpOworI2Vsc2UKKyAgICAgICAgc2xlZXAoTCAvIDEwMDApOworI2VuZGlmCisgICAgICB9IGVsc2UgeworICAgICAgICBULnR2X3NlYyA9IEwvMTAwMDsKKyAgICAgICAgVC50dl91c2VjID0gKEwlMTAwMCkqMTAwMDsKKworICAgICAgICBpZiAoMCA+IHNlbGVjdChNKzEsICZSLCAmVywgJkUsICZUKSkgeworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRTogc2VsZWN0KCVpLCwsLCVsaSk6ICVpOiAlc1xuIiwKKyAgICAgICAgICAgICAgTSsxLCBMLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKChtc2cgPSBjdXJsX211bHRpX2luZm9fcmVhZChjbSwgJlEpKSkgeworICAgICAgaWYgKG1zZy0+bXNnID09IENVUkxNU0dfRE9ORSkgeworICAgICAgICBjaGFyICp1cmw7CisgICAgICAgIENVUkwgKmUgPSBtc2ctPmVhc3lfaGFuZGxlOworICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhtc2ctPmVhc3lfaGFuZGxlLCBDVVJMSU5GT19QUklWQVRFLCAmdXJsKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJSOiAlZCAtICVzIDwlcz5cbiIsCisgICAgICAgICAgICAgICAgbXNnLT5kYXRhLnJlc3VsdCwgY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpLCB1cmwpOworICAgICAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoY20sIGUpOworICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChlKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkU6IENVUkxNc2cgKCVkKVxuIiwgbXNnLT5tc2cpOworICAgICAgfQorICAgICAgaWYgKEMgPCBDTlQpIHsKKyAgICAgICAgaW5pdChjbSwgQysrKTsKKyAgICAgICAgVSsrOyAvKiBqdXN0IHRvIHByZXZlbnQgaXQgZnJvbSByZW1haW5pbmcgYXQgMCBpZiB0aGVyZSBhcmUgbW9yZQorICAgICAgICAgICAgICAgIFVSTHMgdG8gZ2V0ICovCisgICAgICB9CisgICAgfQorICB9CisKKyAgY3VybF9tdWx0aV9jbGVhbnVwKGNtKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL01ha2VmaWxlLmFtIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzU5NDJlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDU2IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm9zdGRpbmMKKworRVhUUkFfRElTVCA9IFJFQURNRSBNYWtlZmlsZS5leGFtcGxlIE1ha2VmaWxlLmluYyBNYWtlZmlsZS5tMzIgXAorCU1ha2VmaWxlLm5ldHdhcmUgbWFrZWZpbGUuZGogcHJpbnRmX21hY3JvLmggJChDT01QTElDQVRFRF9FWEFNUExFUykKKworIyBTcGVjaWZ5IG91ciBpbmNsdWRlIHBhdGhzIGhlcmUsIGFuZCBkbyBpdCByZWxhdGl2ZSB0byAkKHRvcF9zcmNkaXIpIGFuZAorIyAkKHRvcF9idWlsZGRpciksIHRvIGVuc3VyZSB0aGF0IHRoZXNlIHBhdGhzIHdoaWNoIGJlbG9uZyB0byB0aGUgbGlicmFyeQorIyBiZWluZyBjdXJyZW50bHkgYnVpbHQgYW5kIHRlc3RlZCBhcmUgc2VhcmNoZWQgYmVmb3JlIHRoZSBsaWJyYXJ5IHdoaWNoCisjIG1pZ2h0IHBvc3NpYmx5IGFscmVhZHkgYmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0uCisjCisjICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwgZm9yIGdlbmVyYXRlZCBjdXJsYnVpbGQuaCBpbmNsdWRlZCBmcm9tIGN1cmwuaAorIyAkKHRvcF9idWlsZGRpcikvaW5jbHVkZSBmb3IgZ2VuZXJhdGVkIGN1cmxidWlsZC5oIGluY2x1ZGVkIGZyb20gbGliL3NldHVwLmgKKyMgJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIGlzIGZvciBsaWJjdXJsJ3MgZXh0ZXJuYWwgaW5jbHVkZSBmaWxlcworCitJTkNMVURFUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCisKK0xJQkRJUiA9ICQodG9wX2J1aWxkZGlyKS9saWIKKworaWYgU1RBVElDTElCCisjIHdlIG5lZWQgdGhpcyBkZWZpbmUgd2hlbiBidWlsZGluZyB3aXRoIGEgc3RhdGljIGxpYiBvbiBXaW5kb3dzCitTVEFUSUNDUFBGTEFHUyA9IC1EQ1VSTF9TVEFUSUNMSUIKK2VuZGlmCisKK0NQUEZMQUdTID0gLURDVVJMX05PX09MRElFUyAkKFNUQVRJQ0NQUEZMQUdTKQorCisjIERlcGVuZGVuY2llcworTERBREQgPSAkKExJQkRJUikvbGliY3VybC5sYQorCisjIE1ha2VmaWxlLmluYyBwcm92aWRlcyB0aGUgY2hlY2tfUFJPR1JBTVMgYW5kIENPTVBMSUNBVEVEX0VYQU1QTEVTIGRlZmluZXMKK2luY2x1ZGUgTWFrZWZpbGUuaW5jCisKK2FsbDogJChjaGVja19QUk9HUkFNUykKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvTWFrZWZpbGUuZXhhbXBsZSBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvTWFrZWZpbGUuZXhhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmQxMTc4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9NYWtlZmlsZS5leGFtcGxlCkBAIC0wLDAgKzEsNTMgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFdoYXQgdG8gY2FsbCB0aGUgZmluYWwgZXhlY3V0YWJsZQorVEFSR0VUID0gZXhhbXBsZQorCisjIFdoaWNoIG9iamVjdCBmaWxlcyB0aGF0IHRoZSBleGVjdXRhYmxlIGNvbnNpc3RzIG9mCitPQkpTPSBmdHBnZXQubworCisjIFdoYXQgY29tcGlsZXIgdG8gdXNlCitDQyA9IGdjYworCisjIENvbXBpbGVyIGZsYWdzLCAtZyBmb3IgZGVidWcsIC1jIHRvIG1ha2UgYW4gb2JqZWN0IGZpbGUKK0NGTEFHUyA9IC1jIC1nCisKKyMgVGhpcyBzaG91bGQgcG9pbnQgdG8gYSBkaXJlY3RvcnkgdGhhdCBob2xkcyBsaWJjdXJsLCBpZiBpdCBpc24ndAorIyBpbiB0aGUgc3lzdGVtJ3Mgc3RhbmRhcmQgbGliIGRpcgorIyBXZSBhbHNvIHNldCBhIC1MIHRvIGluY2x1ZGUgdGhlIGRpcmVjdG9yeSB3aGVyZSB3ZSBoYXZlIHRoZSBvcGVuc3NsCisjIGxpYnJhcmllcworTERGTEFHUyA9IC1ML2hvbWUvZGFzdC9saWIgLUwvdXNyL2xvY2FsL3NzbC9saWIKKworIyBXZSBuZWVkIC1sY3VybCBmb3IgdGhlIGN1cmwgc3R1ZmYKKyMgV2UgbmVlZCAtbHNvY2tldCBhbmQgLWxuc2wgd2hlbiBvbiBTb2xhcmlzCisjIFdlIG5lZWQgLWxzc2wgYW5kIC1sY3J5cHRvIHdoZW4gdXNpbmcgbGliY3VybCB3aXRoIFNTTCBzdXBwb3J0CisjIFdlIG5lZWQgLWxwdGhyZWFkIGZvciB0aGUgcHRocmVhZCBleGFtcGxlCitMSUJTID0gLWxjdXJsIC1sc29ja2V0IC1sbnNsIC1sc3NsIC1sY3J5cHRvCisKKyMgTGluayB0aGUgdGFyZ2V0IHdpdGggYWxsIG9iamVjdHMgYW5kIGxpYnJhcmllcworJChUQVJHRVQpIDogJChPQkpTKQorCSQoQ0MpICAtbyAkKFRBUkdFVCkgJChPQkpTKSAkKExERkxBR1MpICQoTElCUykKKworIyBDb21waWxlIHRoZSBzb3VyY2UgZmlsZXMgaW50byBvYmplY3QgZmlsZXMKK2Z0cGdldC5vIDogZnRwZ2V0LmMKKwkkKENDKSAkKENGTEFHUykgJDwKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvTWFrZWZpbGUuaW4gYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYmQwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsOTU1IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLi8uLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorRElTVF9DT01NT04gPSBSRUFETUUgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCisJJChzcmNkaXIpL01ha2VmaWxlLmluYworY2hlY2tfUFJPR1JBTVMgPSAxMC1hdC1hLXRpbWUkKEVYRUVYVCkgYW55YXV0aHB1dCQoRVhFRVhUKSBcCisJY29va2llX2ludGVyZmFjZSQoRVhFRVhUKSBkZWJ1ZyQoRVhFRVhUKSBmaWxldXBsb2FkJChFWEVFWFQpIFwKKwlmb3BlbiQoRVhFRVhUKSBmdHBnZXQkKEVYRUVYVCkgZnRwZ2V0cmVzcCQoRVhFRVhUKSBcCisJZnRwdXBsb2FkJChFWEVFWFQpIGdldGluZm8kKEVYRUVYVCkgZ2V0aW5tZW1vcnkkKEVYRUVYVCkgXAorCWh0dHAtcG9zdCQoRVhFRVhUKSBodHRwcHV0JChFWEVFWFQpIGh0dHBzJChFWEVFWFQpIFwKKwltdWx0aS1hcHAkKEVYRUVYVCkgbXVsdGktZGVidWdjYWxsYmFjayQoRVhFRVhUKSBcCisJbXVsdGktZG91YmxlJChFWEVFWFQpIG11bHRpLXBvc3QkKEVYRUVYVCkgXAorCW11bHRpLXNpbmdsZSQoRVhFRVhUKSBwZXJzaXN0YW50JChFWEVFWFQpIFwKKwlwb3N0LWNhbGxiYWNrJChFWEVFWFQpIHBvc3RpdDIkKEVYRUVYVCkgc2VwaGVhZGVycyQoRVhFRVhUKSBcCisJc2ltcGxlJChFWEVFWFQpIHNpbXBsZXBvc3QkKEVYRUVYVCkgc2ltcGxlc3NsJChFWEVFWFQpIFwKKwlzZW5kcmVjdiQoRVhFRVhUKSBodHRwY3VzdG9taGVhZGVyJChFWEVFWFQpIGNlcnRpbmZvJChFWEVFWFQpIFwKKwljaGtzcGVlZCQoRVhFRVhUKSBmdHBnZXRpbmZvJChFWEVFWFQpIGZ0cC13aWxkY2FyZCQoRVhFRVhUKSBcCisJc210cC1tdWx0aSQoRVhFRVhUKSBzaW1wbGVzbXRwJChFWEVFWFQpIHNtdHAtdGxzJChFWEVFWFQpIFwKKwlydHNwJChFWEVFWFQpIGV4dGVybmFsc29ja2V0JChFWEVFWFQpIHJlc29sdmUkKEVYRUVYVCkgXAorCXByb2dyZXNzZnVuYyQoRVhFRVhUKSBwb3AzcyQoRVhFRVhUKSBwb3Azc2xpc3QkKEVYRUVYVCkgXAorCWltYXAkKEVYRUVYVCkgdXJsMmZpbGUkKEVYRUVYVCkKK3N1YmRpciA9IGRvY3MvZXhhbXBsZXMKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2N1cmwtY29tcGlsZXJzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtY29uZm9wdHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1mdW5jdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vcGVuc3NsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3ZlcnJpZGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1yZWVudHJhbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1zeXN0ZW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtdHJhbnNsaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQveno1MC14Yy1vdnIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9zcmMvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KKzEwX2F0X2FfdGltZV9TT1VSQ0VTID0gMTAtYXQtYS10aW1lLmMKKzEwX2F0X2FfdGltZV9PQkpFQ1RTID0gMTAtYXQtYS10aW1lLiQoT0JKRVhUKQorMTBfYXRfYV90aW1lX0xEQUREID0gJChMREFERCkKKzEwX2F0X2FfdGltZV9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorYW55YXV0aHB1dF9TT1VSQ0VTID0gYW55YXV0aHB1dC5jCithbnlhdXRocHV0X09CSkVDVFMgPSBhbnlhdXRocHV0LiQoT0JKRVhUKQorYW55YXV0aHB1dF9MREFERCA9ICQoTERBREQpCithbnlhdXRocHV0X0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCitjZXJ0aW5mb19TT1VSQ0VTID0gY2VydGluZm8uYworY2VydGluZm9fT0JKRUNUUyA9IGNlcnRpbmZvLiQoT0JKRVhUKQorY2VydGluZm9fTERBREQgPSAkKExEQUREKQorY2VydGluZm9fREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK2Noa3NwZWVkX1NPVVJDRVMgPSBjaGtzcGVlZC5jCitjaGtzcGVlZF9PQkpFQ1RTID0gY2hrc3BlZWQuJChPQkpFWFQpCitjaGtzcGVlZF9MREFERCA9ICQoTERBREQpCitjaGtzcGVlZF9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorY29va2llX2ludGVyZmFjZV9TT1VSQ0VTID0gY29va2llX2ludGVyZmFjZS5jCitjb29raWVfaW50ZXJmYWNlX09CSkVDVFMgPSBjb29raWVfaW50ZXJmYWNlLiQoT0JKRVhUKQorY29va2llX2ludGVyZmFjZV9MREFERCA9ICQoTERBREQpCitjb29raWVfaW50ZXJmYWNlX0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCitkZWJ1Z19TT1VSQ0VTID0gZGVidWcuYworZGVidWdfT0JKRUNUUyA9IGRlYnVnLiQoT0JKRVhUKQorZGVidWdfTERBREQgPSAkKExEQUREKQorZGVidWdfREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK2V4dGVybmFsc29ja2V0X1NPVVJDRVMgPSBleHRlcm5hbHNvY2tldC5jCitleHRlcm5hbHNvY2tldF9PQkpFQ1RTID0gZXh0ZXJuYWxzb2NrZXQuJChPQkpFWFQpCitleHRlcm5hbHNvY2tldF9MREFERCA9ICQoTERBREQpCitleHRlcm5hbHNvY2tldF9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorZmlsZXVwbG9hZF9TT1VSQ0VTID0gZmlsZXVwbG9hZC5jCitmaWxldXBsb2FkX09CSkVDVFMgPSBmaWxldXBsb2FkLiQoT0JKRVhUKQorZmlsZXVwbG9hZF9MREFERCA9ICQoTERBREQpCitmaWxldXBsb2FkX0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCitmb3Blbl9TT1VSQ0VTID0gZm9wZW4uYworZm9wZW5fT0JKRUNUUyA9IGZvcGVuLiQoT0JKRVhUKQorZm9wZW5fTERBREQgPSAkKExEQUREKQorZm9wZW5fREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK2Z0cF93aWxkY2FyZF9TT1VSQ0VTID0gZnRwLXdpbGRjYXJkLmMKK2Z0cF93aWxkY2FyZF9PQkpFQ1RTID0gZnRwLXdpbGRjYXJkLiQoT0JKRVhUKQorZnRwX3dpbGRjYXJkX0xEQUREID0gJChMREFERCkKK2Z0cF93aWxkY2FyZF9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorZnRwZ2V0X1NPVVJDRVMgPSBmdHBnZXQuYworZnRwZ2V0X09CSkVDVFMgPSBmdHBnZXQuJChPQkpFWFQpCitmdHBnZXRfTERBREQgPSAkKExEQUREKQorZnRwZ2V0X0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCitmdHBnZXRpbmZvX1NPVVJDRVMgPSBmdHBnZXRpbmZvLmMKK2Z0cGdldGluZm9fT0JKRUNUUyA9IGZ0cGdldGluZm8uJChPQkpFWFQpCitmdHBnZXRpbmZvX0xEQUREID0gJChMREFERCkKK2Z0cGdldGluZm9fREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK2Z0cGdldHJlc3BfU09VUkNFUyA9IGZ0cGdldHJlc3AuYworZnRwZ2V0cmVzcF9PQkpFQ1RTID0gZnRwZ2V0cmVzcC4kKE9CSkVYVCkKK2Z0cGdldHJlc3BfTERBREQgPSAkKExEQUREKQorZnRwZ2V0cmVzcF9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorZnRwdXBsb2FkX1NPVVJDRVMgPSBmdHB1cGxvYWQuYworZnRwdXBsb2FkX09CSkVDVFMgPSBmdHB1cGxvYWQuJChPQkpFWFQpCitmdHB1cGxvYWRfTERBREQgPSAkKExEQUREKQorZnRwdXBsb2FkX0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCitnZXRpbmZvX1NPVVJDRVMgPSBnZXRpbmZvLmMKK2dldGluZm9fT0JKRUNUUyA9IGdldGluZm8uJChPQkpFWFQpCitnZXRpbmZvX0xEQUREID0gJChMREFERCkKK2dldGluZm9fREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK2dldGlubWVtb3J5X1NPVVJDRVMgPSBnZXRpbm1lbW9yeS5jCitnZXRpbm1lbW9yeV9PQkpFQ1RTID0gZ2V0aW5tZW1vcnkuJChPQkpFWFQpCitnZXRpbm1lbW9yeV9MREFERCA9ICQoTERBREQpCitnZXRpbm1lbW9yeV9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQoraHR0cF9wb3N0X1NPVVJDRVMgPSBodHRwLXBvc3QuYworaHR0cF9wb3N0X09CSkVDVFMgPSBodHRwLXBvc3QuJChPQkpFWFQpCitodHRwX3Bvc3RfTERBREQgPSAkKExEQUREKQoraHR0cF9wb3N0X0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCitodHRwY3VzdG9taGVhZGVyX1NPVVJDRVMgPSBodHRwY3VzdG9taGVhZGVyLmMKK2h0dHBjdXN0b21oZWFkZXJfT0JKRUNUUyA9IGh0dHBjdXN0b21oZWFkZXIuJChPQkpFWFQpCitodHRwY3VzdG9taGVhZGVyX0xEQUREID0gJChMREFERCkKK2h0dHBjdXN0b21oZWFkZXJfREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK2h0dHBwdXRfU09VUkNFUyA9IGh0dHBwdXQuYworaHR0cHB1dF9PQkpFQ1RTID0gaHR0cHB1dC4kKE9CSkVYVCkKK2h0dHBwdXRfTERBREQgPSAkKExEQUREKQoraHR0cHB1dF9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQoraHR0cHNfU09VUkNFUyA9IGh0dHBzLmMKK2h0dHBzX09CSkVDVFMgPSBodHRwcy4kKE9CSkVYVCkKK2h0dHBzX0xEQUREID0gJChMREFERCkKK2h0dHBzX0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCitpbWFwX1NPVVJDRVMgPSBpbWFwLmMKK2ltYXBfT0JKRUNUUyA9IGltYXAuJChPQkpFWFQpCitpbWFwX0xEQUREID0gJChMREFERCkKK2ltYXBfREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK211bHRpX2FwcF9TT1VSQ0VTID0gbXVsdGktYXBwLmMKK211bHRpX2FwcF9PQkpFQ1RTID0gbXVsdGktYXBwLiQoT0JKRVhUKQorbXVsdGlfYXBwX0xEQUREID0gJChMREFERCkKK211bHRpX2FwcF9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorbXVsdGlfZGVidWdjYWxsYmFja19TT1VSQ0VTID0gbXVsdGktZGVidWdjYWxsYmFjay5jCittdWx0aV9kZWJ1Z2NhbGxiYWNrX09CSkVDVFMgPSBtdWx0aS1kZWJ1Z2NhbGxiYWNrLiQoT0JKRVhUKQorbXVsdGlfZGVidWdjYWxsYmFja19MREFERCA9ICQoTERBREQpCittdWx0aV9kZWJ1Z2NhbGxiYWNrX0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCittdWx0aV9kb3VibGVfU09VUkNFUyA9IG11bHRpLWRvdWJsZS5jCittdWx0aV9kb3VibGVfT0JKRUNUUyA9IG11bHRpLWRvdWJsZS4kKE9CSkVYVCkKK211bHRpX2RvdWJsZV9MREFERCA9ICQoTERBREQpCittdWx0aV9kb3VibGVfREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK211bHRpX3Bvc3RfU09VUkNFUyA9IG11bHRpLXBvc3QuYworbXVsdGlfcG9zdF9PQkpFQ1RTID0gbXVsdGktcG9zdC4kKE9CSkVYVCkKK211bHRpX3Bvc3RfTERBREQgPSAkKExEQUREKQorbXVsdGlfcG9zdF9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorbXVsdGlfc2luZ2xlX1NPVVJDRVMgPSBtdWx0aS1zaW5nbGUuYworbXVsdGlfc2luZ2xlX09CSkVDVFMgPSBtdWx0aS1zaW5nbGUuJChPQkpFWFQpCittdWx0aV9zaW5nbGVfTERBREQgPSAkKExEQUREKQorbXVsdGlfc2luZ2xlX0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCitwZXJzaXN0YW50X1NPVVJDRVMgPSBwZXJzaXN0YW50LmMKK3BlcnNpc3RhbnRfT0JKRUNUUyA9IHBlcnNpc3RhbnQuJChPQkpFWFQpCitwZXJzaXN0YW50X0xEQUREID0gJChMREFERCkKK3BlcnNpc3RhbnRfREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK3BvcDNzX1NPVVJDRVMgPSBwb3Azcy5jCitwb3Azc19PQkpFQ1RTID0gcG9wM3MuJChPQkpFWFQpCitwb3Azc19MREFERCA9ICQoTERBREQpCitwb3Azc19ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorcG9wM3NsaXN0X1NPVVJDRVMgPSBwb3Azc2xpc3QuYworcG9wM3NsaXN0X09CSkVDVFMgPSBwb3Azc2xpc3QuJChPQkpFWFQpCitwb3Azc2xpc3RfTERBREQgPSAkKExEQUREKQorcG9wM3NsaXN0X0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCitwb3N0X2NhbGxiYWNrX1NPVVJDRVMgPSBwb3N0LWNhbGxiYWNrLmMKK3Bvc3RfY2FsbGJhY2tfT0JKRUNUUyA9IHBvc3QtY2FsbGJhY2suJChPQkpFWFQpCitwb3N0X2NhbGxiYWNrX0xEQUREID0gJChMREFERCkKK3Bvc3RfY2FsbGJhY2tfREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK3Bvc3RpdDJfU09VUkNFUyA9IHBvc3RpdDIuYworcG9zdGl0Ml9PQkpFQ1RTID0gcG9zdGl0Mi4kKE9CSkVYVCkKK3Bvc3RpdDJfTERBREQgPSAkKExEQUREKQorcG9zdGl0Ml9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorcHJvZ3Jlc3NmdW5jX1NPVVJDRVMgPSBwcm9ncmVzc2Z1bmMuYworcHJvZ3Jlc3NmdW5jX09CSkVDVFMgPSBwcm9ncmVzc2Z1bmMuJChPQkpFWFQpCitwcm9ncmVzc2Z1bmNfTERBREQgPSAkKExEQUREKQorcHJvZ3Jlc3NmdW5jX0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCityZXNvbHZlX1NPVVJDRVMgPSByZXNvbHZlLmMKK3Jlc29sdmVfT0JKRUNUUyA9IHJlc29sdmUuJChPQkpFWFQpCityZXNvbHZlX0xEQUREID0gJChMREFERCkKK3Jlc29sdmVfREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK3J0c3BfU09VUkNFUyA9IHJ0c3AuYworcnRzcF9PQkpFQ1RTID0gcnRzcC4kKE9CSkVYVCkKK3J0c3BfTERBREQgPSAkKExEQUREKQorcnRzcF9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorc2VuZHJlY3ZfU09VUkNFUyA9IHNlbmRyZWN2LmMKK3NlbmRyZWN2X09CSkVDVFMgPSBzZW5kcmVjdi4kKE9CSkVYVCkKK3NlbmRyZWN2X0xEQUREID0gJChMREFERCkKK3NlbmRyZWN2X0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCitzZXBoZWFkZXJzX1NPVVJDRVMgPSBzZXBoZWFkZXJzLmMKK3NlcGhlYWRlcnNfT0JKRUNUUyA9IHNlcGhlYWRlcnMuJChPQkpFWFQpCitzZXBoZWFkZXJzX0xEQUREID0gJChMREFERCkKK3NlcGhlYWRlcnNfREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK3NpbXBsZV9TT1VSQ0VTID0gc2ltcGxlLmMKK3NpbXBsZV9PQkpFQ1RTID0gc2ltcGxlLiQoT0JKRVhUKQorc2ltcGxlX0xEQUREID0gJChMREFERCkKK3NpbXBsZV9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorc2ltcGxlcG9zdF9TT1VSQ0VTID0gc2ltcGxlcG9zdC5jCitzaW1wbGVwb3N0X09CSkVDVFMgPSBzaW1wbGVwb3N0LiQoT0JKRVhUKQorc2ltcGxlcG9zdF9MREFERCA9ICQoTERBREQpCitzaW1wbGVwb3N0X0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCitzaW1wbGVzbXRwX1NPVVJDRVMgPSBzaW1wbGVzbXRwLmMKK3NpbXBsZXNtdHBfT0JKRUNUUyA9IHNpbXBsZXNtdHAuJChPQkpFWFQpCitzaW1wbGVzbXRwX0xEQUREID0gJChMREFERCkKK3NpbXBsZXNtdHBfREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK3NpbXBsZXNzbF9TT1VSQ0VTID0gc2ltcGxlc3NsLmMKK3NpbXBsZXNzbF9PQkpFQ1RTID0gc2ltcGxlc3NsLiQoT0JKRVhUKQorc2ltcGxlc3NsX0xEQUREID0gJChMREFERCkKK3NpbXBsZXNzbF9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorc210cF9tdWx0aV9TT1VSQ0VTID0gc210cC1tdWx0aS5jCitzbXRwX211bHRpX09CSkVDVFMgPSBzbXRwLW11bHRpLiQoT0JKRVhUKQorc210cF9tdWx0aV9MREFERCA9ICQoTERBREQpCitzbXRwX211bHRpX0RFUEVOREVOQ0lFUyA9ICQoTElCRElSKS9saWJjdXJsLmxhCitzbXRwX3Rsc19TT1VSQ0VTID0gc210cC10bHMuYworc210cF90bHNfT0JKRUNUUyA9IHNtdHAtdGxzLiQoT0JKRVhUKQorc210cF90bHNfTERBREQgPSAkKExEQUREKQorc210cF90bHNfREVQRU5ERU5DSUVTID0gJChMSUJESVIpL2xpYmN1cmwubGEKK3VybDJmaWxlX1NPVVJDRVMgPSB1cmwyZmlsZS5jCit1cmwyZmlsZV9PQkpFQ1RTID0gdXJsMmZpbGUuJChPQkpFWFQpCit1cmwyZmlsZV9MREFERCA9ICQoTERBREQpCit1cmwyZmlsZV9ERVBFTkRFTkNJRVMgPSAkKExJQkRJUikvbGliY3VybC5sYQorREVGQVVMVF9JTkNMVURFUyA9IAorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9IDEwLWF0LWEtdGltZS5jIGFueWF1dGhwdXQuYyBjZXJ0aW5mby5jIGNoa3NwZWVkLmMgXAorCWNvb2tpZV9pbnRlcmZhY2UuYyBkZWJ1Zy5jIGV4dGVybmFsc29ja2V0LmMgZmlsZXVwbG9hZC5jIFwKKwlmb3Blbi5jIGZ0cC13aWxkY2FyZC5jIGZ0cGdldC5jIGZ0cGdldGluZm8uYyBmdHBnZXRyZXNwLmMgXAorCWZ0cHVwbG9hZC5jIGdldGluZm8uYyBnZXRpbm1lbW9yeS5jIGh0dHAtcG9zdC5jIFwKKwlodHRwY3VzdG9taGVhZGVyLmMgaHR0cHB1dC5jIGh0dHBzLmMgaW1hcC5jIG11bHRpLWFwcC5jIFwKKwltdWx0aS1kZWJ1Z2NhbGxiYWNrLmMgbXVsdGktZG91YmxlLmMgbXVsdGktcG9zdC5jIFwKKwltdWx0aS1zaW5nbGUuYyBwZXJzaXN0YW50LmMgcG9wM3MuYyBwb3Azc2xpc3QuYyBcCisJcG9zdC1jYWxsYmFjay5jIHBvc3RpdDIuYyBwcm9ncmVzc2Z1bmMuYyByZXNvbHZlLmMgcnRzcC5jIFwKKwlzZW5kcmVjdi5jIHNlcGhlYWRlcnMuYyBzaW1wbGUuYyBzaW1wbGVwb3N0LmMgc2ltcGxlc210cC5jIFwKKwlzaW1wbGVzc2wuYyBzbXRwLW11bHRpLmMgc210cC10bHMuYyB1cmwyZmlsZS5jCitESVNUX1NPVVJDRVMgPSAxMC1hdC1hLXRpbWUuYyBhbnlhdXRocHV0LmMgY2VydGluZm8uYyBjaGtzcGVlZC5jIFwKKwljb29raWVfaW50ZXJmYWNlLmMgZGVidWcuYyBleHRlcm5hbHNvY2tldC5jIGZpbGV1cGxvYWQuYyBcCisJZm9wZW4uYyBmdHAtd2lsZGNhcmQuYyBmdHBnZXQuYyBmdHBnZXRpbmZvLmMgZnRwZ2V0cmVzcC5jIFwKKwlmdHB1cGxvYWQuYyBnZXRpbmZvLmMgZ2V0aW5tZW1vcnkuYyBodHRwLXBvc3QuYyBcCisJaHR0cGN1c3RvbWhlYWRlci5jIGh0dHBwdXQuYyBodHRwcy5jIGltYXAuYyBtdWx0aS1hcHAuYyBcCisJbXVsdGktZGVidWdjYWxsYmFjay5jIG11bHRpLWRvdWJsZS5jIG11bHRpLXBvc3QuYyBcCisJbXVsdGktc2luZ2xlLmMgcGVyc2lzdGFudC5jIHBvcDNzLmMgcG9wM3NsaXN0LmMgXAorCXBvc3QtY2FsbGJhY2suYyBwb3N0aXQyLmMgcHJvZ3Jlc3NmdW5jLmMgcmVzb2x2ZS5jIHJ0c3AuYyBcCisJc2VuZHJlY3YuYyBzZXBoZWFkZXJzLmMgc2ltcGxlLmMgc2ltcGxlcG9zdC5jIHNpbXBsZXNtdHAuYyBcCisJc2ltcGxlc3NsLmMgc210cC1tdWx0aS5jIHNtdHAtdGxzLmMgdXJsMmZpbGUuYworRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRUAKK0JVSUxEX0xJQkhPU1ROQU1FX1RSVUUgPSBAQlVJTERfTElCSE9TVE5BTUVfVFJVRUAKK0JVSUxEX1VOSVRURVNUU19GQUxTRSA9IEBCVUlMRF9VTklUVEVTVFNfRkFMU0VACitCVUlMRF9VTklUVEVTVFNfVFJVRSA9IEBCVUlMRF9VTklUVEVTVFNfVFJVRUAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDT05GSUdVUkVfT1BUSU9OUyA9IEBDT05GSUdVUkVfT1BUSU9OU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IC1EQ1VSTF9OT19PTERJRVMgJChTVEFUSUNDUFBGTEFHUykKK0NST1NTQ09NUElMSU5HX0ZBTFNFID0gQENST1NTQ09NUElMSU5HX0ZBTFNFQAorQ1JPU1NDT01QSUxJTkdfVFJVRSA9IEBDUk9TU0NPTVBJTElOR19UUlVFQAorQ1VSTERFQlVHX0ZBTFNFID0gQENVUkxERUJVR19GQUxTRUAKK0NVUkxERUJVR19UUlVFID0gQENVUkxERUJVR19UUlVFQAorQ1VSTFZFUlNJT04gPSBAQ1VSTFZFUlNJT05ACitDVVJMX0NBX0JVTkRMRSA9IEBDVVJMX0NBX0JVTkRMRUAKK0NVUkxfQ0ZMQUdfRVhUUkFTID0gQENVUkxfQ0ZMQUdfRVhUUkFTQAorQ1VSTF9ESVNBQkxFX0RJQ1QgPSBAQ1VSTF9ESVNBQkxFX0RJQ1RACitDVVJMX0RJU0FCTEVfRklMRSA9IEBDVVJMX0RJU0FCTEVfRklMRUAKK0NVUkxfRElTQUJMRV9GVFAgPSBAQ1VSTF9ESVNBQkxFX0ZUUEAKK0NVUkxfRElTQUJMRV9HT1BIRVIgPSBAQ1VSTF9ESVNBQkxFX0dPUEhFUkAKK0NVUkxfRElTQUJMRV9IVFRQID0gQENVUkxfRElTQUJMRV9IVFRQQAorQ1VSTF9ESVNBQkxFX0lNQVAgPSBAQ1VSTF9ESVNBQkxFX0lNQVBACitDVVJMX0RJU0FCTEVfTERBUCA9IEBDVVJMX0RJU0FCTEVfTERBUEAKK0NVUkxfRElTQUJMRV9MREFQUyA9IEBDVVJMX0RJU0FCTEVfTERBUFNACitDVVJMX0RJU0FCTEVfUE9QMyA9IEBDVVJMX0RJU0FCTEVfUE9QM0AKK0NVUkxfRElTQUJMRV9QUk9YWSA9IEBDVVJMX0RJU0FCTEVfUFJPWFlACitDVVJMX0RJU0FCTEVfUlRTUCA9IEBDVVJMX0RJU0FCTEVfUlRTUEAKK0NVUkxfRElTQUJMRV9TTVRQID0gQENVUkxfRElTQUJMRV9TTVRQQAorQ1VSTF9ESVNBQkxFX1RFTE5FVCA9IEBDVVJMX0RJU0FCTEVfVEVMTkVUQAorQ1VSTF9ESVNBQkxFX1RGVFAgPSBAQ1VSTF9ESVNBQkxFX1RGVFBACitDVVJMX0xJQlMgPSBAQ1VSTF9MSUJTQAorQ1VSTF9ORVRXT1JLX0xJQlMgPSBAQ1VSTF9ORVRXT1JLX0xJQlNACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU0hBUkVEID0gQEVOQUJMRV9TSEFSRURACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitIQVZFX0dOVVRMU19TUlAgPSBASEFWRV9HTlVUTFNfU1JQQAorSEFWRV9MREFQX1NTTCA9IEBIQVZFX0xEQVBfU1NMQAorSEFWRV9MSUJaID0gQEhBVkVfTElCWkAKK0hBVkVfTElCWl9GQUxTRSA9IEBIQVZFX0xJQlpfRkFMU0VACitIQVZFX0xJQlpfVFJVRSA9IEBIQVZFX0xJQlpfVFJVRUAKK0hBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUID0gQEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUQAorSEFWRV9TU0xFQVlfU1JQID0gQEhBVkVfU1NMRUFZX1NSUEAKK0lETl9FTkFCTEVEID0gQElETl9FTkFCTEVEQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJUFY2X0VOQUJMRUQgPSBASVBWNl9FTkFCTEVEQAorS1JCNF9FTkFCTEVEID0gQEtSQjRfRU5BQkxFREAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQ1VSTF9MSUJTID0gQExJQkNVUkxfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUFOT1BUID0gQE1BTk9QVEAKK01JTVBVUkVfRkFMU0UgPSBATUlNUFVSRV9GQUxTRUAKK01JTVBVUkVfVFJVRSA9IEBNSU1QVVJFX1RSVUVACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitOT19VTkRFRklORURfRkFMU0UgPSBATk9fVU5ERUZJTkVEX0ZBTFNFQAorTk9fVU5ERUZJTkVEX1RSVUUgPSBATk9fVU5ERUZJTkVEX1RSVUVACitOUk9GRiA9IEBOUk9GRkAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEggPSBAUEFUSEAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTCA9IEBQRVJMQAorUEtHQUREX05BTUUgPSBAUEtHQUREX05BTUVACitQS0dBRERfUEtHID0gQFBLR0FERF9QS0dACitQS0dBRERfVkVORE9SID0gQFBLR0FERF9WRU5ET1JACitQS0dDT05GSUcgPSBAUEtHQ09ORklHQAorUkFORE9NX0ZJTEUgPSBAUkFORE9NX0ZJTEVACitSQU5MSUIgPSBAUkFOTElCQAorUkVRVUlSRV9MSUJfREVQUyA9IEBSRVFVSVJFX0xJQl9ERVBTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTT05BTUVfQlVNUF9GQUxTRSA9IEBTT05BTUVfQlVNUF9GQUxTRUAKK1NPTkFNRV9CVU1QX1RSVUUgPSBAU09OQU1FX0JVTVBfVFJVRUAKK1NTTF9FTkFCTEVEID0gQFNTTF9FTkFCTEVEQAorU1RBVElDTElCX0ZBTFNFID0gQFNUQVRJQ0xJQl9GQUxTRUAKK1NUQVRJQ0xJQl9UUlVFID0gQFNUQVRJQ0xJQl9UUlVFQAorU1RSSVAgPSBAU1RSSVBACitTVVBQT1JUX0ZFQVRVUkVTID0gQFNVUFBPUlRfRkVBVFVSRVNACitTVVBQT1JUX1BST1RPQ09MUyA9IEBTVVBQT1JUX1BST1RPQ09MU0AKK1RFU1RfU0VSVkVSX0xJQlMgPSBAVEVTVF9TRVJWRVJfTElCU0AKK1VTRV9BUkVTID0gQFVTRV9BUkVTQAorVVNFX0FYVExTID0gQFVTRV9BWFRMU0AKK1VTRV9DWUFTU0wgPSBAVVNFX0NZQVNTTEAKK1VTRV9FTUJFRERFRF9BUkVTX0ZBTFNFID0gQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQAorVVNFX0VNQkVEREVEX0FSRVNfVFJVRSA9IEBVU0VfRU1CRURERURfQVJFU19UUlVFQAorVVNFX0dOVVRMUyA9IEBVU0VfR05VVExTQAorVVNFX0dOVVRMU19ORVRUTEUgPSBAVVNFX0dOVVRMU19ORVRUTEVACitVU0VfTElCUlRNUCA9IEBVU0VfTElCUlRNUEAKK1VTRV9MSUJTU0gyID0gQFVTRV9MSUJTU0gyQAorVVNFX01BTlVBTF9GQUxTRSA9IEBVU0VfTUFOVUFMX0ZBTFNFQAorVVNFX01BTlVBTF9UUlVFID0gQFVTRV9NQU5VQUxfVFJVRUAKK1VTRV9OU1MgPSBAVVNFX05TU0AKK1VTRV9PUEVOTERBUCA9IEBVU0VfT1BFTkxEQVBACitVU0VfUE9MQVJTU0wgPSBAVVNFX1BPTEFSU1NMQAorVVNFX1NTTEVBWSA9IEBVU0VfU1NMRUFZQAorVVNFX1dJTkRPV1NfU1NQSSA9IEBVU0VfV0lORE9XU19TU1BJQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVkVSU0lPTkVEX0ZMQVZPVVIgPSBAVkVSU0lPTkVEX0ZMQVZPVVJACitWRVJTSU9ORURfU1lNQk9MU19GQUxTRSA9IEBWRVJTSU9ORURfU1lNQk9MU19GQUxTRUAKK1ZFUlNJT05FRF9TWU1CT0xTX1RSVUUgPSBAVkVSU0lPTkVEX1NZTUJPTFNfVFJVRUAKK1ZFUlNJT05OVU0gPSBAVkVSU0lPTk5VTUAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpYmV4dCA9IEBsaWJleHRACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACitBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBub3N0ZGluYworRVhUUkFfRElTVCA9IFJFQURNRSBNYWtlZmlsZS5leGFtcGxlIE1ha2VmaWxlLmluYyBNYWtlZmlsZS5tMzIgXAorCU1ha2VmaWxlLm5ldHdhcmUgbWFrZWZpbGUuZGogcHJpbnRmX21hY3JvLmggJChDT01QTElDQVRFRF9FWEFNUExFUykKKworCisjIFNwZWNpZnkgb3VyIGluY2x1ZGUgcGF0aHMgaGVyZSwgYW5kIGRvIGl0IHJlbGF0aXZlIHRvICQodG9wX3NyY2RpcikgYW5kCisjICQodG9wX2J1aWxkZGlyKSwgdG8gZW5zdXJlIHRoYXQgdGhlc2UgcGF0aHMgd2hpY2ggYmVsb25nIHRvIHRoZSBsaWJyYXJ5CisjIGJlaW5nIGN1cnJlbnRseSBidWlsdCBhbmQgdGVzdGVkIGFyZSBzZWFyY2hlZCBiZWZvcmUgdGhlIGxpYnJhcnkgd2hpY2gKKyMgbWlnaHQgcG9zc2libHkgYWxyZWFkeSBiZSBpbnN0YWxsZWQgaW4gdGhlIHN5c3RlbS4KKyMKKyMgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBmb3IgZ2VuZXJhdGVkIGN1cmxidWlsZC5oIGluY2x1ZGVkIGZyb20gY3VybC5oCisjICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlIGZvciBnZW5lcmF0ZWQgY3VybGJ1aWxkLmggaW5jbHVkZWQgZnJvbSBsaWIvc2V0dXAuaAorIyAkKHRvcF9zcmNkaXIpL2luY2x1ZGUgaXMgZm9yIGxpYmN1cmwncyBleHRlcm5hbCBpbmNsdWRlIGZpbGVzCitJTkNMVURFUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCisKK0xJQkRJUiA9ICQodG9wX2J1aWxkZGlyKS9saWIKKworIyB3ZSBuZWVkIHRoaXMgZGVmaW5lIHdoZW4gYnVpbGRpbmcgd2l0aCBhIHN0YXRpYyBsaWIgb24gV2luZG93cworQFNUQVRJQ0xJQl9UUlVFQFNUQVRJQ0NQUEZMQUdTID0gLURDVVJMX1NUQVRJQ0xJQgorCisjIERlcGVuZGVuY2llcworTERBREQgPSAkKExJQkRJUikvbGliY3VybC5sYQorCisjIFRoZXNlIGV4YW1wbGVzIHJlcXVpcmUgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWF5IG5vdCBiZSBjb21tb25seQorIyBhdmFpbGFibGUgb24gUE9TSVggc3lzdGVtcywgc28gZG9uJ3QgYm90aGVyIGF0dGVtcHRpbmcgdG8gY29tcGlsZSB0aGVtIGhlcmUuCitDT01QTElDQVRFRF9FWEFNUExFUyA9IGN1cmxndGsuYyBjdXJseC5jIGh0bWx0aXRsZS5jYyBjYWNlcnRpbm1lbS5jCSAgIFwKKyAgZnRwdXBsb2FkcmVzdW1lLmMgZ2hpcGVyLmMgaGlwZXJmaWZvLmMgaHRtbHRpZHkuYyBtdWx0aXRocmVhZC5jCSAgIFwKKyAgb3BlbnNzbHRocmVhZGxvY2suYyBzYW1wbGVjb252LmMgc3luY3RpbWUuYyB0aHJlYWRlZC1zc2wuYyBldmhpcGVyZmlmby5jIFwKKyAgc21vb3RoLWd0ay10aHJlYWQuYyB2ZXJzaW9uLWNoZWNrLnBsCisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluYyAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZG9jcy9leGFtcGxlcy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgZG9jcy9leGFtcGxlcy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCitjbGVhbi1jaGVja1BST0dSQU1TOgorCUBsaXN0PSckKGNoZWNrX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZj1gZWNobyAkJHB8c2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCSAgZWNobyAiIHJtIC1mICQkcCAkJGYiOyBcCisJICBybSAtZiAkJHAgJCRmIDsgXAorCWRvbmUKKzEwLWF0LWEtdGltZSQoRVhFRVhUKTogJCgxMF9hdF9hX3RpbWVfT0JKRUNUUykgJCgxMF9hdF9hX3RpbWVfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgMTAtYXQtYS10aW1lJChFWEVFWFQpCisJJChMSU5LKSAkKDEwX2F0X2FfdGltZV9MREZMQUdTKSAkKDEwX2F0X2FfdGltZV9PQkpFQ1RTKSAkKDEwX2F0X2FfdGltZV9MREFERCkgJChMSUJTKQorYW55YXV0aHB1dCQoRVhFRVhUKTogJChhbnlhdXRocHV0X09CSkVDVFMpICQoYW55YXV0aHB1dF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBhbnlhdXRocHV0JChFWEVFWFQpCisJJChMSU5LKSAkKGFueWF1dGhwdXRfTERGTEFHUykgJChhbnlhdXRocHV0X09CSkVDVFMpICQoYW55YXV0aHB1dF9MREFERCkgJChMSUJTKQorY2VydGluZm8kKEVYRUVYVCk6ICQoY2VydGluZm9fT0JKRUNUUykgJChjZXJ0aW5mb19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBjZXJ0aW5mbyQoRVhFRVhUKQorCSQoTElOSykgJChjZXJ0aW5mb19MREZMQUdTKSAkKGNlcnRpbmZvX09CSkVDVFMpICQoY2VydGluZm9fTERBREQpICQoTElCUykKK2Noa3NwZWVkJChFWEVFWFQpOiAkKGNoa3NwZWVkX09CSkVDVFMpICQoY2hrc3BlZWRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgY2hrc3BlZWQkKEVYRUVYVCkKKwkkKExJTkspICQoY2hrc3BlZWRfTERGTEFHUykgJChjaGtzcGVlZF9PQkpFQ1RTKSAkKGNoa3NwZWVkX0xEQUREKSAkKExJQlMpCitjb29raWVfaW50ZXJmYWNlJChFWEVFWFQpOiAkKGNvb2tpZV9pbnRlcmZhY2VfT0JKRUNUUykgJChjb29raWVfaW50ZXJmYWNlX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGNvb2tpZV9pbnRlcmZhY2UkKEVYRUVYVCkKKwkkKExJTkspICQoY29va2llX2ludGVyZmFjZV9MREZMQUdTKSAkKGNvb2tpZV9pbnRlcmZhY2VfT0JKRUNUUykgJChjb29raWVfaW50ZXJmYWNlX0xEQUREKSAkKExJQlMpCitkZWJ1ZyQoRVhFRVhUKTogJChkZWJ1Z19PQkpFQ1RTKSAkKGRlYnVnX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGRlYnVnJChFWEVFWFQpCisJJChMSU5LKSAkKGRlYnVnX0xERkxBR1MpICQoZGVidWdfT0JKRUNUUykgJChkZWJ1Z19MREFERCkgJChMSUJTKQorZXh0ZXJuYWxzb2NrZXQkKEVYRUVYVCk6ICQoZXh0ZXJuYWxzb2NrZXRfT0JKRUNUUykgJChleHRlcm5hbHNvY2tldF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBleHRlcm5hbHNvY2tldCQoRVhFRVhUKQorCSQoTElOSykgJChleHRlcm5hbHNvY2tldF9MREZMQUdTKSAkKGV4dGVybmFsc29ja2V0X09CSkVDVFMpICQoZXh0ZXJuYWxzb2NrZXRfTERBREQpICQoTElCUykKK2ZpbGV1cGxvYWQkKEVYRUVYVCk6ICQoZmlsZXVwbG9hZF9PQkpFQ1RTKSAkKGZpbGV1cGxvYWRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZmlsZXVwbG9hZCQoRVhFRVhUKQorCSQoTElOSykgJChmaWxldXBsb2FkX0xERkxBR1MpICQoZmlsZXVwbG9hZF9PQkpFQ1RTKSAkKGZpbGV1cGxvYWRfTERBREQpICQoTElCUykKK2ZvcGVuJChFWEVFWFQpOiAkKGZvcGVuX09CSkVDVFMpICQoZm9wZW5fREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZm9wZW4kKEVYRUVYVCkKKwkkKExJTkspICQoZm9wZW5fTERGTEFHUykgJChmb3Blbl9PQkpFQ1RTKSAkKGZvcGVuX0xEQUREKSAkKExJQlMpCitmdHAtd2lsZGNhcmQkKEVYRUVYVCk6ICQoZnRwX3dpbGRjYXJkX09CSkVDVFMpICQoZnRwX3dpbGRjYXJkX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGZ0cC13aWxkY2FyZCQoRVhFRVhUKQorCSQoTElOSykgJChmdHBfd2lsZGNhcmRfTERGTEFHUykgJChmdHBfd2lsZGNhcmRfT0JKRUNUUykgJChmdHBfd2lsZGNhcmRfTERBREQpICQoTElCUykKK2Z0cGdldCQoRVhFRVhUKTogJChmdHBnZXRfT0JKRUNUUykgJChmdHBnZXRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZnRwZ2V0JChFWEVFWFQpCisJJChMSU5LKSAkKGZ0cGdldF9MREZMQUdTKSAkKGZ0cGdldF9PQkpFQ1RTKSAkKGZ0cGdldF9MREFERCkgJChMSUJTKQorZnRwZ2V0aW5mbyQoRVhFRVhUKTogJChmdHBnZXRpbmZvX09CSkVDVFMpICQoZnRwZ2V0aW5mb19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBmdHBnZXRpbmZvJChFWEVFWFQpCisJJChMSU5LKSAkKGZ0cGdldGluZm9fTERGTEFHUykgJChmdHBnZXRpbmZvX09CSkVDVFMpICQoZnRwZ2V0aW5mb19MREFERCkgJChMSUJTKQorZnRwZ2V0cmVzcCQoRVhFRVhUKTogJChmdHBnZXRyZXNwX09CSkVDVFMpICQoZnRwZ2V0cmVzcF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBmdHBnZXRyZXNwJChFWEVFWFQpCisJJChMSU5LKSAkKGZ0cGdldHJlc3BfTERGTEFHUykgJChmdHBnZXRyZXNwX09CSkVDVFMpICQoZnRwZ2V0cmVzcF9MREFERCkgJChMSUJTKQorZnRwdXBsb2FkJChFWEVFWFQpOiAkKGZ0cHVwbG9hZF9PQkpFQ1RTKSAkKGZ0cHVwbG9hZF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBmdHB1cGxvYWQkKEVYRUVYVCkKKwkkKExJTkspICQoZnRwdXBsb2FkX0xERkxBR1MpICQoZnRwdXBsb2FkX09CSkVDVFMpICQoZnRwdXBsb2FkX0xEQUREKSAkKExJQlMpCitnZXRpbmZvJChFWEVFWFQpOiAkKGdldGluZm9fT0JKRUNUUykgJChnZXRpbmZvX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGdldGluZm8kKEVYRUVYVCkKKwkkKExJTkspICQoZ2V0aW5mb19MREZMQUdTKSAkKGdldGluZm9fT0JKRUNUUykgJChnZXRpbmZvX0xEQUREKSAkKExJQlMpCitnZXRpbm1lbW9yeSQoRVhFRVhUKTogJChnZXRpbm1lbW9yeV9PQkpFQ1RTKSAkKGdldGlubWVtb3J5X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGdldGlubWVtb3J5JChFWEVFWFQpCisJJChMSU5LKSAkKGdldGlubWVtb3J5X0xERkxBR1MpICQoZ2V0aW5tZW1vcnlfT0JKRUNUUykgJChnZXRpbm1lbW9yeV9MREFERCkgJChMSUJTKQoraHR0cC1wb3N0JChFWEVFWFQpOiAkKGh0dHBfcG9zdF9PQkpFQ1RTKSAkKGh0dHBfcG9zdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBodHRwLXBvc3QkKEVYRUVYVCkKKwkkKExJTkspICQoaHR0cF9wb3N0X0xERkxBR1MpICQoaHR0cF9wb3N0X09CSkVDVFMpICQoaHR0cF9wb3N0X0xEQUREKSAkKExJQlMpCitodHRwY3VzdG9taGVhZGVyJChFWEVFWFQpOiAkKGh0dHBjdXN0b21oZWFkZXJfT0JKRUNUUykgJChodHRwY3VzdG9taGVhZGVyX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGh0dHBjdXN0b21oZWFkZXIkKEVYRUVYVCkKKwkkKExJTkspICQoaHR0cGN1c3RvbWhlYWRlcl9MREZMQUdTKSAkKGh0dHBjdXN0b21oZWFkZXJfT0JKRUNUUykgJChodHRwY3VzdG9taGVhZGVyX0xEQUREKSAkKExJQlMpCitodHRwcHV0JChFWEVFWFQpOiAkKGh0dHBwdXRfT0JKRUNUUykgJChodHRwcHV0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGh0dHBwdXQkKEVYRUVYVCkKKwkkKExJTkspICQoaHR0cHB1dF9MREZMQUdTKSAkKGh0dHBwdXRfT0JKRUNUUykgJChodHRwcHV0X0xEQUREKSAkKExJQlMpCitodHRwcyQoRVhFRVhUKTogJChodHRwc19PQkpFQ1RTKSAkKGh0dHBzX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGh0dHBzJChFWEVFWFQpCisJJChMSU5LKSAkKGh0dHBzX0xERkxBR1MpICQoaHR0cHNfT0JKRUNUUykgJChodHRwc19MREFERCkgJChMSUJTKQoraW1hcCQoRVhFRVhUKTogJChpbWFwX09CSkVDVFMpICQoaW1hcF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBpbWFwJChFWEVFWFQpCisJJChMSU5LKSAkKGltYXBfTERGTEFHUykgJChpbWFwX09CSkVDVFMpICQoaW1hcF9MREFERCkgJChMSUJTKQorbXVsdGktYXBwJChFWEVFWFQpOiAkKG11bHRpX2FwcF9PQkpFQ1RTKSAkKG11bHRpX2FwcF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBtdWx0aS1hcHAkKEVYRUVYVCkKKwkkKExJTkspICQobXVsdGlfYXBwX0xERkxBR1MpICQobXVsdGlfYXBwX09CSkVDVFMpICQobXVsdGlfYXBwX0xEQUREKSAkKExJQlMpCittdWx0aS1kZWJ1Z2NhbGxiYWNrJChFWEVFWFQpOiAkKG11bHRpX2RlYnVnY2FsbGJhY2tfT0JKRUNUUykgJChtdWx0aV9kZWJ1Z2NhbGxiYWNrX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIG11bHRpLWRlYnVnY2FsbGJhY2skKEVYRUVYVCkKKwkkKExJTkspICQobXVsdGlfZGVidWdjYWxsYmFja19MREZMQUdTKSAkKG11bHRpX2RlYnVnY2FsbGJhY2tfT0JKRUNUUykgJChtdWx0aV9kZWJ1Z2NhbGxiYWNrX0xEQUREKSAkKExJQlMpCittdWx0aS1kb3VibGUkKEVYRUVYVCk6ICQobXVsdGlfZG91YmxlX09CSkVDVFMpICQobXVsdGlfZG91YmxlX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIG11bHRpLWRvdWJsZSQoRVhFRVhUKQorCSQoTElOSykgJChtdWx0aV9kb3VibGVfTERGTEFHUykgJChtdWx0aV9kb3VibGVfT0JKRUNUUykgJChtdWx0aV9kb3VibGVfTERBREQpICQoTElCUykKK211bHRpLXBvc3QkKEVYRUVYVCk6ICQobXVsdGlfcG9zdF9PQkpFQ1RTKSAkKG11bHRpX3Bvc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbXVsdGktcG9zdCQoRVhFRVhUKQorCSQoTElOSykgJChtdWx0aV9wb3N0X0xERkxBR1MpICQobXVsdGlfcG9zdF9PQkpFQ1RTKSAkKG11bHRpX3Bvc3RfTERBREQpICQoTElCUykKK211bHRpLXNpbmdsZSQoRVhFRVhUKTogJChtdWx0aV9zaW5nbGVfT0JKRUNUUykgJChtdWx0aV9zaW5nbGVfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbXVsdGktc2luZ2xlJChFWEVFWFQpCisJJChMSU5LKSAkKG11bHRpX3NpbmdsZV9MREZMQUdTKSAkKG11bHRpX3NpbmdsZV9PQkpFQ1RTKSAkKG11bHRpX3NpbmdsZV9MREFERCkgJChMSUJTKQorcGVyc2lzdGFudCQoRVhFRVhUKTogJChwZXJzaXN0YW50X09CSkVDVFMpICQocGVyc2lzdGFudF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBwZXJzaXN0YW50JChFWEVFWFQpCisJJChMSU5LKSAkKHBlcnNpc3RhbnRfTERGTEFHUykgJChwZXJzaXN0YW50X09CSkVDVFMpICQocGVyc2lzdGFudF9MREFERCkgJChMSUJTKQorcG9wM3MkKEVYRUVYVCk6ICQocG9wM3NfT0JKRUNUUykgJChwb3Azc19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBwb3AzcyQoRVhFRVhUKQorCSQoTElOSykgJChwb3Azc19MREZMQUdTKSAkKHBvcDNzX09CSkVDVFMpICQocG9wM3NfTERBREQpICQoTElCUykKK3BvcDNzbGlzdCQoRVhFRVhUKTogJChwb3Azc2xpc3RfT0JKRUNUUykgJChwb3Azc2xpc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcG9wM3NsaXN0JChFWEVFWFQpCisJJChMSU5LKSAkKHBvcDNzbGlzdF9MREZMQUdTKSAkKHBvcDNzbGlzdF9PQkpFQ1RTKSAkKHBvcDNzbGlzdF9MREFERCkgJChMSUJTKQorcG9zdC1jYWxsYmFjayQoRVhFRVhUKTogJChwb3N0X2NhbGxiYWNrX09CSkVDVFMpICQocG9zdF9jYWxsYmFja19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBwb3N0LWNhbGxiYWNrJChFWEVFWFQpCisJJChMSU5LKSAkKHBvc3RfY2FsbGJhY2tfTERGTEFHUykgJChwb3N0X2NhbGxiYWNrX09CSkVDVFMpICQocG9zdF9jYWxsYmFja19MREFERCkgJChMSUJTKQorcG9zdGl0MiQoRVhFRVhUKTogJChwb3N0aXQyX09CSkVDVFMpICQocG9zdGl0Ml9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBwb3N0aXQyJChFWEVFWFQpCisJJChMSU5LKSAkKHBvc3RpdDJfTERGTEFHUykgJChwb3N0aXQyX09CSkVDVFMpICQocG9zdGl0Ml9MREFERCkgJChMSUJTKQorcHJvZ3Jlc3NmdW5jJChFWEVFWFQpOiAkKHByb2dyZXNzZnVuY19PQkpFQ1RTKSAkKHByb2dyZXNzZnVuY19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBwcm9ncmVzc2Z1bmMkKEVYRUVYVCkKKwkkKExJTkspICQocHJvZ3Jlc3NmdW5jX0xERkxBR1MpICQocHJvZ3Jlc3NmdW5jX09CSkVDVFMpICQocHJvZ3Jlc3NmdW5jX0xEQUREKSAkKExJQlMpCityZXNvbHZlJChFWEVFWFQpOiAkKHJlc29sdmVfT0JKRUNUUykgJChyZXNvbHZlX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHJlc29sdmUkKEVYRUVYVCkKKwkkKExJTkspICQocmVzb2x2ZV9MREZMQUdTKSAkKHJlc29sdmVfT0JKRUNUUykgJChyZXNvbHZlX0xEQUREKSAkKExJQlMpCitydHNwJChFWEVFWFQpOiAkKHJ0c3BfT0JKRUNUUykgJChydHNwX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHJ0c3AkKEVYRUVYVCkKKwkkKExJTkspICQocnRzcF9MREZMQUdTKSAkKHJ0c3BfT0JKRUNUUykgJChydHNwX0xEQUREKSAkKExJQlMpCitzZW5kcmVjdiQoRVhFRVhUKTogJChzZW5kcmVjdl9PQkpFQ1RTKSAkKHNlbmRyZWN2X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHNlbmRyZWN2JChFWEVFWFQpCisJJChMSU5LKSAkKHNlbmRyZWN2X0xERkxBR1MpICQoc2VuZHJlY3ZfT0JKRUNUUykgJChzZW5kcmVjdl9MREFERCkgJChMSUJTKQorc2VwaGVhZGVycyQoRVhFRVhUKTogJChzZXBoZWFkZXJzX09CSkVDVFMpICQoc2VwaGVhZGVyc19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBzZXBoZWFkZXJzJChFWEVFWFQpCisJJChMSU5LKSAkKHNlcGhlYWRlcnNfTERGTEFHUykgJChzZXBoZWFkZXJzX09CSkVDVFMpICQoc2VwaGVhZGVyc19MREFERCkgJChMSUJTKQorc2ltcGxlJChFWEVFWFQpOiAkKHNpbXBsZV9PQkpFQ1RTKSAkKHNpbXBsZV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBzaW1wbGUkKEVYRUVYVCkKKwkkKExJTkspICQoc2ltcGxlX0xERkxBR1MpICQoc2ltcGxlX09CSkVDVFMpICQoc2ltcGxlX0xEQUREKSAkKExJQlMpCitzaW1wbGVwb3N0JChFWEVFWFQpOiAkKHNpbXBsZXBvc3RfT0JKRUNUUykgJChzaW1wbGVwb3N0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHNpbXBsZXBvc3QkKEVYRUVYVCkKKwkkKExJTkspICQoc2ltcGxlcG9zdF9MREZMQUdTKSAkKHNpbXBsZXBvc3RfT0JKRUNUUykgJChzaW1wbGVwb3N0X0xEQUREKSAkKExJQlMpCitzaW1wbGVzbXRwJChFWEVFWFQpOiAkKHNpbXBsZXNtdHBfT0JKRUNUUykgJChzaW1wbGVzbXRwX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHNpbXBsZXNtdHAkKEVYRUVYVCkKKwkkKExJTkspICQoc2ltcGxlc210cF9MREZMQUdTKSAkKHNpbXBsZXNtdHBfT0JKRUNUUykgJChzaW1wbGVzbXRwX0xEQUREKSAkKExJQlMpCitzaW1wbGVzc2wkKEVYRUVYVCk6ICQoc2ltcGxlc3NsX09CSkVDVFMpICQoc2ltcGxlc3NsX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHNpbXBsZXNzbCQoRVhFRVhUKQorCSQoTElOSykgJChzaW1wbGVzc2xfTERGTEFHUykgJChzaW1wbGVzc2xfT0JKRUNUUykgJChzaW1wbGVzc2xfTERBREQpICQoTElCUykKK3NtdHAtbXVsdGkkKEVYRUVYVCk6ICQoc210cF9tdWx0aV9PQkpFQ1RTKSAkKHNtdHBfbXVsdGlfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgc210cC1tdWx0aSQoRVhFRVhUKQorCSQoTElOSykgJChzbXRwX211bHRpX0xERkxBR1MpICQoc210cF9tdWx0aV9PQkpFQ1RTKSAkKHNtdHBfbXVsdGlfTERBREQpICQoTElCUykKK3NtdHAtdGxzJChFWEVFWFQpOiAkKHNtdHBfdGxzX09CSkVDVFMpICQoc210cF90bHNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgc210cC10bHMkKEVYRUVYVCkKKwkkKExJTkspICQoc210cF90bHNfTERGTEFHUykgJChzbXRwX3Rsc19PQkpFQ1RTKSAkKHNtdHBfdGxzX0xEQUREKSAkKExJQlMpCit1cmwyZmlsZSQoRVhFRVhUKTogJCh1cmwyZmlsZV9PQkpFQ1RTKSAkKHVybDJmaWxlX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHVybDJmaWxlJChFWEVFWFQpCisJJChMSU5LKSAkKHVybDJmaWxlX0xERkxBR1MpICQodXJsMmZpbGVfT0JKRUNUUykgJCh1cmwyZmlsZV9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvMTAtYXQtYS10aW1lLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hbnlhdXRocHV0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jZXJ0aW5mby5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2hrc3BlZWQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Nvb2tpZV9pbnRlcmZhY2UuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RlYnVnLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9leHRlcm5hbHNvY2tldC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmlsZXVwbG9hZC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZm9wZW4uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Z0cC13aWxkY2FyZC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZnRwZ2V0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mdHBnZXRpbmZvLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mdHBnZXRyZXNwLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mdHB1cGxvYWQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dldGluZm8uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dldGlubWVtb3J5LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9odHRwLXBvc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2h0dHBjdXN0b21oZWFkZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2h0dHBwdXQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2h0dHBzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pbWFwLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tdWx0aS1hcHAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL211bHRpLWRlYnVnY2FsbGJhY2suUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL211bHRpLWRvdWJsZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXVsdGktcG9zdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXVsdGktc2luZ2xlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wZXJzaXN0YW50LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wb3Azcy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcG9wM3NsaXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wb3N0LWNhbGxiYWNrLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wb3N0aXQyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wcm9ncmVzc2Z1bmMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Jlc29sdmUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3J0c3AuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NlbmRyZWN2LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zZXBoZWFkZXJzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zaW1wbGUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NpbXBsZXBvc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NpbXBsZXNtdHAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NpbXBsZXNzbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc210cC1tdWx0aS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc210cC10bHMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3VybDJmaWxlLlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUGxvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK2Rpc3RjbGVhbi1saWJ0b29sOgorCS1ybSAtZiBsaWJ0b29sCit1bmluc3RhbGwtaW5mby1hbToKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICQkdGFncyAkJHVuaXF1ZTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKGNoZWNrX1BST0dSQU1TKQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorCWNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGN0YWdzIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtCisKKworIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgdGhlIGNoZWNrX1BST0dSQU1TIGFuZCBDT01QTElDQVRFRF9FWEFNUExFUyBkZWZpbmVzCisKK2FsbDogJChjaGVja19QUk9HUkFNUykKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvTWFrZWZpbGUuaW5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9NYWtlZmlsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjExODgxZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvTWFrZWZpbGUuaW5jCkBAIC0wLDAgKzEsMTUgQEAKKyMgVGhlc2UgYXJlIGFsbCBsaWJjdXJsIGV4YW1wbGUgcHJvZ3JhbXMgdG8gYmUgdGVzdCBjb21waWxlZAorY2hlY2tfUFJPR1JBTVMgPSAxMC1hdC1hLXRpbWUgYW55YXV0aHB1dCBjb29raWVfaW50ZXJmYWNlIGRlYnVnIGZpbGV1cGxvYWQgXAorICBmb3BlbiBmdHBnZXQgZnRwZ2V0cmVzcCBmdHB1cGxvYWQgZ2V0aW5mbyBnZXRpbm1lbW9yeSBodHRwLXBvc3QgaHR0cHB1dCAgXAorICBodHRwcyBtdWx0aS1hcHAgbXVsdGktZGVidWdjYWxsYmFjayBtdWx0aS1kb3VibGUgbXVsdGktcG9zdCBtdWx0aS1zaW5nbGUgXAorICBwZXJzaXN0YW50IHBvc3QtY2FsbGJhY2sgcG9zdGl0MiBzZXBoZWFkZXJzIHNpbXBsZSBzaW1wbGVwb3N0IHNpbXBsZXNzbCAgXAorICBzZW5kcmVjdiBodHRwY3VzdG9taGVhZGVyIGNlcnRpbmZvIGNoa3NwZWVkIGZ0cGdldGluZm8gZnRwLXdpbGRjYXJkIFwKKyAgc210cC1tdWx0aSBzaW1wbGVzbXRwIHNtdHAtdGxzIHJ0c3AgZXh0ZXJuYWxzb2NrZXQgcmVzb2x2ZSBcCisgIHByb2dyZXNzZnVuYyBwb3AzcyBwb3Azc2xpc3QgaW1hcCB1cmwyZmlsZQorCisjIFRoZXNlIGV4YW1wbGVzIHJlcXVpcmUgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWF5IG5vdCBiZSBjb21tb25seQorIyBhdmFpbGFibGUgb24gUE9TSVggc3lzdGVtcywgc28gZG9uJ3QgYm90aGVyIGF0dGVtcHRpbmcgdG8gY29tcGlsZSB0aGVtIGhlcmUuCitDT01QTElDQVRFRF9FWEFNUExFUyA9IGN1cmxndGsuYyBjdXJseC5jIGh0bWx0aXRsZS5jYyBjYWNlcnRpbm1lbS5jCSAgIFwKKyAgZnRwdXBsb2FkcmVzdW1lLmMgZ2hpcGVyLmMgaGlwZXJmaWZvLmMgaHRtbHRpZHkuYyBtdWx0aXRocmVhZC5jCSAgIFwKKyAgb3BlbnNzbHRocmVhZGxvY2suYyBzYW1wbGVjb252LmMgc3luY3RpbWUuYyB0aHJlYWRlZC1zc2wuYyBldmhpcGVyZmlmby5jIFwKKyAgc21vb3RoLWd0ay10aHJlYWQuYyB2ZXJzaW9uLWNoZWNrLnBsCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL01ha2VmaWxlLm0zMiBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvTWFrZWZpbGUubTMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjM2QxMjEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL01ha2VmaWxlLm0zMgpAQCAtMCwwICsxLDIzNSBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgY3VybCBleGFtcGxlcyB3aXRoIE1pbmdXIChHQ0MtMy4yIG9yIGxhdGVyKQorIyMgYW5kIG9wdGlvbmFsbHkgT3BlblNTTCAoMC45LjgpLCBsaWJzc2gyICgxLjMpLCB6bGliICgxLjIuNSksIGxpYnJ0bXAgKDIuMykKKyMjCisjIyBVc2FnZTogICBtaW5ndzMyLW1ha2UgLWYgTWFrZWZpbGUubTMyIENGRz0tZmVhdHVyZTFbLWZlYXR1cmUyXVstZmVhdHVyZTNdWy4uLl0KKyMjIEV4YW1wbGU6IG1pbmd3MzItbWFrZSAtZiBNYWtlZmlsZS5tMzIgQ0ZHPS16bGliLXNzbC1zcGktd2luaWRuCisjIworIyMgSGludDogeW91IGNhbiBhbHNvIHNldCBlbnZpcm9ubWVudCB2YXJzIHRvIGNvbnRyb2wgdGhlIGJ1aWxkLCBmLmUuOgorIyMgc2V0IFpMSUJfUEFUSD1jOi96bGliLTEuMi41CisjIyBzZXQgWkxJQj0xCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgWmxpYiBzb3VyY2VzLgoraWZuZGVmIFpMSUJfUEFUSAorWkxJQl9QQVRIID0gLi4vLi4vLi4vemxpYi0xLjIuNQorZW5kaWYKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIE9wZW5TU0wgcGFja2FnZS4KK2lmbmRlZiBPUEVOU1NMX1BBVEgKK09QRU5TU0xfUEFUSCA9IC4uLy4uLy4uL29wZW5zc2wtMC45LjhyCitlbmRpZgoraWZuZGVmIE9QRU5TU0xfTElCUEFUSAorT1BFTlNTTF9MSUJQQVRIID0gJChPUEVOU1NMX1BBVEgpL291dAorZW5kaWYKK2lmbmRlZiBPUEVOU1NMX0xJQlMKK09QRU5TU0xfTElCUyA9IC1sZWF5MzIgLWxzc2wzMgorZW5kaWYKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIExpYlNTSDIgcGFja2FnZS4KK2lmbmRlZiBMSUJTU0gyX1BBVEgKK0xJQlNTSDJfUEFUSCA9IC4uLy4uLy4uL2xpYnNzaDItMS4zLjAKK2VuZGlmCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBsaWJydG1wIHBhY2thZ2UuCitpZm5kZWYgTElCUlRNUF9QQVRICitMSUJSVE1QX1BBVEggPSAuLi8uLi8uLi9saWJydG1wLTIuMworZW5kaWYKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIGxpYmlkbiBwYWNrYWdlLgoraWZuZGVmIExJQklETl9QQVRICitMSUJJRE5fUEFUSCA9IC4uLy4uLy4uL2xpYmlkbi0xLjE4CitlbmRpZgorIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgTVMgSUROIHBhY2thZ2UuCisjIE1pY3Jvc29mdCBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgKElETikgTWl0aWdhdGlvbiBBUElzIDEuMQorIyBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZG93bmxvYWRzL2VuL2RldGFpbHMuYXNweD9GYW1pbHlJRD1hZDYxNThkNy1kZGJhLTQxNmEtOTEwOS0wNzYwNzQyNWE4MTUKK2lmbmRlZiBXSU5JRE5fUEFUSAorV0lOSUROX1BBVEggPSAuLi8uLi8uLi9NaWNyb3NvZnQgSUROIE1pdGlnYXRpb24gQVBJcworZW5kaWYKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIE5vdmVsbCBMREFQIE5ESy4KK2lmbmRlZiBMREFQX1NESworTERBUF9TREsgPSBjOi9ub3ZlbGwvbmRrL2NsZGFwc2RrL3dpbjMyCitlbmRpZgorCitQUk9PVCA9IC4uLy4uCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIGMtYXJlcyBwYWNrYWdlLgoraWZuZGVmIExJQkNBUkVTX1BBVEgKK0xJQkNBUkVTX1BBVEggPSAkKFBST09UKS9hcmVzCitlbmRpZgorCisjIEVkaXQgdGhlIHZhciBiZWxvdyB0byBzZXQgdG8geW91ciBhcmNoaXRlY3R1cmUgb3Igc2V0IGVudmlyb25tZW50IHZhci4KK2lmbmRlZiBBUkNICitBUkNIID0gdzMyCitlbmRpZgorCitDQyA9IGdjYworQ0ZMQUdTID0gLWcgLU8yIC1XYWxsCitDRkxBR1MgKz0gLWZuby1zdHJpY3QtYWxpYXNpbmcKK2lmZXEgKCQoQVJDSCksdzY0KQorQ0ZMQUdTICs9IC1EX0FNRDY0XworZW5kaWYKKyMgY29tbWVudCBMREZMQUdTIGJlbG93IHRvIGtlZXAgZGVidWcgaW5mbworTERGTEFHUyA9IC1zCitSQyA9IHdpbmRyZXMKK1JDRkxBR1MgPSAtLWluY2x1ZGUtZGlyPSQoUFJPT1QpL2luY2x1ZGUgLU8gQ09GRiAtaQorCitSTSA9IGRlbCAvcSAvZiAyPk5VTAorQ1AgPSBjb3B5CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBOb3RoaW5nIG1vcmUgdG8gZG8gYmVsb3cgdGhpcyBsaW5lIQorCitpZmVxICgkKGZpbmRzdHJpbmcgLWR5biwkKENGRykpLC1keW4pCitEWU4gPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1hcmVzLCQoQ0ZHKSksLWFyZXMpCitBUkVTID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtcnRtcCwkKENGRykpLC1ydG1wKQorUlRNUCA9IDEKK1NTTCA9IDEKK1pMSUIgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1zc2gyLCQoQ0ZHKSksLXNzaDIpCitTU0gyID0gMQorU1NMID0gMQorWkxJQiA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLXNzbCwkKENGRykpLC1zc2wpCitTU0wgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC16bGliLCQoQ0ZHKSksLXpsaWIpCitaTElCID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtaWRuLCQoQ0ZHKSksLWlkbikKK0lETiA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLXdpbmlkbiwkKENGRykpLC13aW5pZG4pCitXSU5JRE4gPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1zc3BpLCQoQ0ZHKSksLXNzcGkpCitTU1BJID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtc3BuZWdvLCQoQ0ZHKSksLXNwbmVnbykKK1NQTkVHTyA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLWxkYXBzLCQoQ0ZHKSksLWxkYXBzKQorTERBUFMgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1pcHY2LCQoQ0ZHKSksLWlwdjYpCitJUFY2ID0gMQorZW5kaWYKKworSU5DTFVERVMgPSAtSS4gLUkkKFBST09UKSAtSSQoUFJPT1QpL2luY2x1ZGUgLUkkKFBST09UKS9saWIKKworaWZkZWYgRFlOCisgIGN1cmxfREVQRU5ERU5DSUVTID0gJChQUk9PVCkvbGliL2xpYmN1cmxkbGwuYSAkKFBST09UKS9saWIvbGliY3VybC5kbGwKKyAgY3VybF9MREFERCA9IC1MJChQUk9PVCkvbGliIC1sY3VybGRsbAorZWxzZQorICBjdXJsX0RFUEVOREVOQ0lFUyA9ICQoUFJPT1QpL2xpYi9saWJjdXJsLmEKKyAgY3VybF9MREFERCA9IC1MJChQUk9PVCkvbGliIC1sY3VybAorICBDRkxBR1MgKz0gLURDVVJMX1NUQVRJQ0xJQgorZW5kaWYKK2lmZGVmIEFSRVMKKyAgaWZuZGVmIERZTgorICAgIGN1cmxfREVQRU5ERU5DSUVTICs9ICQoTElCQ0FSRVNfUEFUSCkvbGliY2FyZXMuYQorICBlbmRpZgorICBDRkxBR1MgKz0gLURVU0VfQVJFUworICBjdXJsX0xEQUREICs9IC1MIiQoTElCQ0FSRVNfUEFUSCkiIC1sY2FyZXMKK2VuZGlmCitpZmRlZiBSVE1QCisgIENGTEFHUyArPSAtRFVTRV9MSUJSVE1QCisgIGN1cmxfTERBREQgKz0gLUwiJChMSUJSVE1QX1BBVEgpL2xpYnJ0bXAiIC1scnRtcCAtbHdpbm1tCitlbmRpZgoraWZkZWYgU1NIMgorICBDRkxBR1MgKz0gLURVU0VfTElCU1NIMiAtREhBVkVfTElCU1NIMl9ICisgIGN1cmxfTERBREQgKz0gLUwiJChMSUJTU0gyX1BBVEgpL3dpbjMyIiAtbHNzaDIKK2VuZGlmCitpZmRlZiBTU0wKKyAgQ0ZMQUdTICs9IC1EVVNFX1NTTEVBWSAtREhBVkVfT1BFTlNTTF9FTkdJTkVfSAorICBjdXJsX0xEQUREICs9IC1MIiQoT1BFTlNTTF9MSUJQQVRIKSIgJChPUEVOU1NMX0xJQlMpCitlbmRpZgoraWZkZWYgWkxJQgorICBJTkNMVURFUyArPSAtSSIkKFpMSUJfUEFUSCkiCisgIENGTEFHUyArPSAtREhBVkVfTElCWiAtREhBVkVfWkxJQl9ICisgIGN1cmxfTERBREQgKz0gLUwiJChaTElCX1BBVEgpIiAtbHoKK2VuZGlmCitpZmRlZiBJRE4KKyAgQ0ZMQUdTICs9IC1EVVNFX0xJQklETgorICBjdXJsX0xEQUREICs9IC1MIiQoTElCSUROX1BBVEgpL2xpYiIgLWxpZG4KK2Vsc2UKK2lmZGVmIFdJTklETgorICBDRkxBR1MgKz0gLURVU0VfV0lOMzJfSUROCisgIGN1cmxfTERBREQgKz0gLUwiJChXSU5JRE5fUEFUSCkiIC1sbm9ybWFsaXoKK2VuZGlmCitlbmRpZgoraWZkZWYgU1NQSQorICBDRkxBR1MgKz0gLURVU0VfV0lORE9XU19TU1BJCitlbmRpZgoraWZkZWYgU1BORUdPCisgIENGTEFHUyArPSAtREhBVkVfU1BORUdPCitlbmRpZgoraWZkZWYgSVBWNgorICBDRkxBR1MgKz0gLURFTkFCTEVfSVBWNiAtRF9XSU4zMl9XSU5OVD0weDA1MDEKK2VuZGlmCitpZmRlZiBMREFQUworICBDRkxBR1MgKz0gLURIQVZFX0xEQVBfU1NMCitlbmRpZgoraWZkZWYgVVNFX0xEQVBfTk9WRUxMCisgIENGTEFHUyArPSAtRENVUkxfSEFTX05PVkVMTF9MREFQU0RLCisgIGN1cmxfTERBREQgKz0gLUwiJChMREFQX1NESykvbGliL21zY3ZjIiAtbGxkYXBzZGsgLWxsZGFwc3NsIC1sbGRhcHgKK2VuZGlmCitpZmRlZiBVU0VfTERBUF9PUEVOTERBUAorICBDRkxBR1MgKz0gLURDVVJMX0hBU19PUEVOTERBUF9MREFQU0RLCisgIGN1cmxfTERBREQgKz0gLUwiJChMREFQX1NESykvbGliIiAtbGxkYXAgLWxsYmVyCitlbmRpZgoraWZuZGVmIFVTRV9MREFQX05PVkVMTAoraWZuZGVmIFVTRV9MREFQX09QRU5MREFQCisgIGN1cmxfTERBREQgKz0gLWx3bGRhcDMyCitlbmRpZgorZW5kaWYKK2N1cmxfTERBREQgKz0gLWx3czJfMzIKKworIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgdGhlIGNoZWNrX1BST0dSQU1TIGFuZCBDT01QTElDQVRFRF9FWEFNUExFUyBkZWZpbmVzCitpbmNsdWRlIE1ha2VmaWxlLmluYworCitjaGVja19QUk9HUkFNUyA6PSAkKHBhdHN1YnN0ICUsJS5leGUsJChzdHJpcCAkKGNoZWNrX1BST0dSQU1TKSkpCitjaGVja19QUk9HUkFNUyArPSBmdHB1cGxvYWRyZXN1bWUuZXhlIHN5bmN0aW1lLmV4ZQorCisKK2FsbDogJChjaGVja19QUk9HUkFNUykKKworJS5leGU6ICUubyAkKGN1cmxfREVQRU5ERU5DSUVTKQorCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJDwgJChjdXJsX0xEQUREKQorCislLm86ICUuYworCSQoQ0MpICQoSU5DTFVERVMpICQoQ0ZMQUdTKSAtYyAkPAorCislLnJlczogJS5yYworCSQoUkMpICQoUkNGTEFHUykgJDwgLW8gJEAKKworY2xlYW46CisJLSQoUk0pICQoY2hlY2tfUFJPR1JBTVM6LmV4ZT0ubykKKworZGlzdGNsZWFuIHZjbGVhbjogY2xlYW4KKwktJChSTSkgJChjaGVja19QUk9HUkFNUykKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9NYWtlZmlsZS5uZXR3YXJlIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9NYWtlZmlsZS5uZXR3YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZWE2YjgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL01ha2VmaWxlLm5ldHdhcmUKQEAgLTAsMCArMSw0NDEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgY3VybC5ubG0gKE5ldFdhcmUgdmVyc2lvbiAtIGdudSBtYWtlKQorIyMgVXNlOiBtYWtlIC1mIE1ha2VmaWxlLm5ldHdhcmUKKyMjCisjIyBDb21tZW50cyB0bzogR3VlbnRlciBLbmF1ZiBodHRwOi8vd3d3LmdrbncubmV0L3BocGJiCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBOb3ZlbGwgTkRLLgoraWZuZGVmIE5ES0JBU0UKK05ES0JBU0UJPSBjOi9ub3ZlbGwKK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIFpsaWIgc291cmNlcy4KK2lmbmRlZiBaTElCX1BBVEgKK1pMSUJfUEFUSCA9IC4uLy4uLy4uL3psaWItMS4yLjUKK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIE9wZW5TU0wgcGFja2FnZS4KK2lmbmRlZiBPUEVOU1NMX1BBVEgKK09QRU5TU0xfUEFUSCA9IC4uLy4uLy4uL29wZW5zc2wtMC45LjhyCitlbmRpZgorCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBMaWJTU0gyIHBhY2thZ2UuCitpZm5kZWYgTElCU1NIMl9QQVRICitMSUJTU0gyX1BBVEggPSAuLi8uLi8uLi9saWJzc2gyLTEuMy4wCitlbmRpZgorCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBheFRMUyBwYWNrYWdlLgoraWZuZGVmIEFYVExTX1BBVEgKK0FYVExTX1BBVEggPSAuLi8uLi8uLi9heFRMUy0xLjIuNworZW5kaWYKKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgbGliaWRuIHBhY2thZ2UuCitpZm5kZWYgTElCSUROX1BBVEgKK0xJQklETl9QQVRIID0gLi4vLi4vLi4vbGliaWRuLTEuMTgKK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIGxpYnJ0bXAgcGFja2FnZS4KK2lmbmRlZiBMSUJSVE1QX1BBVEgKK0xJQlJUTVBfUEFUSCA9IC4uLy4uLy4uL2xpYnJ0bXAtMi4zCitlbmRpZgorCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBmYm9wZW5zc2wgcGFja2FnZS4KK2lmbmRlZiBGQk9QRU5TU0xfUEFUSAorRkJPUEVOU1NMX1BBVEggPSAuLi8uLi9mYm9wZW5zc2wtMC40CitlbmRpZgorCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBjLWFyZXMgcGFja2FnZS4KK2lmbmRlZiBMSUJDQVJFU19QQVRICitMSUJDQVJFU19QQVRIID0gLi4vLi4vYXJlcworZW5kaWYKKworaWZuZGVmIElOU1RESVIKK0lOU1RESVIJPSAuLiQoRFMpLi4kKERTKWN1cmwtJChMSUJDVVJMX1ZFUlNJT05fU1RSKS1iaW4tbncKK2VuZGlmCisKKyMgRWRpdCB0aGUgdmFycyBiZWxvdyB0byBjaGFuZ2UgTkxNIHRhcmdldCBzZXR0aW5ncy4KK1RBUkdFVCAgPSBleGFtcGxlcworVkVSU0lPTgk9ICQoTElCQ1VSTF9WRVJTSU9OKQorQ09QWVIJPSBDb3B5cmlnaHQgKEMpICQoTElCQ1VSTF9DT1BZUklHSFRfU1RSKQorREVTQ1IJPSBjVVJMICgkKExJQkFSQ0gpKQorTVRTQUZFCT0gWUVTCitTVEFDSwk9IDgxOTIKK1NDUkVFTgk9IEV4YW1wbGUgUHJvZ3JhbQorIyBDb21tZW50IHRoZSBsaW5lIGJlbG93IGlmIHlvdSBkb250IHdhbnQgdG8gbG9hZCBwcm90ZWN0ZWQgYXV0b21hdGljYWxseS4KKyMgTERSSU5HID0gMworCisjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGVuYWJsZSBsaW5raW5nIHdpdGggUE9TSVggc2VtYW50aWNzLgorIyBQT1NJWEZMID0gMQorCisjIEVkaXQgdGhlIHZhciBiZWxvdyB0byBwb2ludCB0byB5b3VyIGxpYiBhcmNoaXRlY3R1cmUuCitpZm5kZWYgTElCQVJDSAorTElCQVJDSCA9IExJQkMKK2VuZGlmCisKKyMgbXVzdCBiZSBlcXVhbCB0byBOREVCVUcgb3IgREVCVUcsIENVUkxERUJVRworaWZuZGVmIERCCitEQgk9IE5ERUJVRworZW5kaWYKKyMgT3B0aW1pemF0aW9uOiAtTzxuPiBvciBkZWJ1Z2dpbmc6IC1nCitpZmVxICgkKERCKSxOREVCVUcpCisJT1BUCT0gLU8yCisJT0JKRElSCT0gcmVsZWFzZQorZWxzZQorCU9QVAk9IC1nCisJT0JKRElSCT0gZGVidWcKK2VuZGlmCisKKyMgVGhlIGZvbGxvd2luZyBsaW5lcyBkZWZpbmVzIHlvdXIgY29tcGlsZXIuCitpZmRlZiBDV0ZvbGRlcgorCU1FVFJPV0VSS1MgPSAkKENXRm9sZGVyKQorZW5kaWYKK2lmZGVmIE1FVFJPV0VSS1MKKwkjIE1XQ1dfUEFUSCA9ICQoc3Vic3QgXCwvLCQoTUVUUk9XRVJLUykpL05vdmVsbCBTdXBwb3J0CisJTVdDV19QQVRIID0gJChzdWJzdCBcLC8sJChNRVRST1dFUktTKSkvTm92ZWxsIFN1cHBvcnQvTWV0cm93ZXJrcyBTdXBwb3J0CisJQ0MgPSBtd2NjbmxtCitlbHNlCisJQ0MgPSBnY2MKK2VuZGlmCitQRVJMCT0gcGVybAorIyBIZXJlIHlvdSBjYW4gZmluZCBhIG5hdGl2ZSBXaW4zMiBiaW5hcnkgb2YgdGhlIG9yaWdpbmFsIGF3azoKKyMgaHR0cDovL3d3dy5na253Lm5ldC9kZXZlbG9wbWVudC9wcmd0b29scy9hd2stMjAxMDA1MjMuemlwCitBV0sJPSBhd2sKK0NQCT0gY3AgLWFmdgorTUtESVIJPSBta2RpcgorIyBSTQk9IHJtIC1mCisjIElmIHlvdSB3YW50IHRvIG1hcmsgdGhlIHRhcmdldCBhcyBNVFNBRkUgeW91IHdpbGwgbmVlZCBhIHRvb2wgZm9yCisjIGdlbmVyYXRpbmcgdGhlIHhkYyBkYXRhIGZvciB0aGUgbGlua2VyOyBoZXJlJ3MgYSBtaW5pbWFsIHRvb2w6CisjIGh0dHA6Ly93d3cuZ2tudy5uZXQvZGV2ZWxvcG1lbnQvcHJndG9vbHMvbWt4ZGMuemlwCitNUEtYREMJPSBta3hkYworCisjIExJQkFSQ0hfVSA9ICQoc2hlbGwgJChBV0spICdCRUdJTiB7cHJpbnQgdG91cHBlcihBUkdWWzFdKX0nICQoTElCQVJDSCkpCitMSUJBUkNIX0wgPSAkKHNoZWxsICQoQVdLKSAnQkVHSU4ge3ByaW50IHRvbG93ZXIoQVJHVlsxXSl9JyAkKExJQkFSQ0gpKQorCisjIEluY2x1ZGUgdGhlIHZlcnNpb24gaW5mbyByZXRyaWV2ZWQgZnJvbSBjdXJsdmVyLmgKKy1pbmNsdWRlICQoT0JKRElSKS92ZXJzaW9uLmluYworCisjIEdsb2JhbCBmbGFncyBmb3IgYWxsIGNvbXBpbGVycworQ0ZMQUdTCSs9ICQoT1BUKSAtRCQoREIpIC1ETkVUV0FSRSAtREhBVkVfQ09ORklHX0ggLW5vc3RkaW5jCisKK2lmZXEgKCQoQ0MpLG13Y2NubG0pCitMRAk9IG13bGRubG0KK0xERkxBR1MJPSAtbm9zdGRsaWIgJDwgJChQUkVMVURFKSAkKExETElCUykgLW8gJEAgLWNvbW1hbmRmaWxlCitMSUJFWFQJPSBsaWIKK0NGTEFHUwkrPSAtZ2NjaW5jIC1pbmxpbmUgb2ZmIC1vcHQgbm9pbnRyaW5zaWNzIC1wcm9jIDU4NgorQ0ZMQUdTCSs9IC1yZWxheF9wb2ludGVycworI0NGTEFHUwkrPSAtdyBvbgoraWZlcSAoJChMSUJBUkNIKSxMSUJDKQoraWZlcSAoJChQT1NJWEZMKSwxKQorCVBSRUxVREUgPSAkKE5ES19MSUJDKS9pbXBvcnRzL3Bvc2l4cHJlLm8KK2Vsc2UKKwlQUkVMVURFID0gJChOREtfTElCQykvaW1wb3J0cy9saWJjcHJlLm8KK2VuZGlmCisJQ0ZMQUdTICs9IC1hbGlnbiA0CitlbHNlCisJIyBQUkVMVURFID0gJChOREtfQ0xJQikvaW1wb3J0cy9jbGlicHJlLm8KKwkjIHRvIGF2b2lkIHRoZSBfX2luaXRfKiAvIF9fZGVpbml0Xyogd2hvZXMgZG9udCB1c2UgcHJlbHVkZSBmcm9tIE5ESworCVBSRUxVREUgPSAiJChNV0NXX1BBVEgpL2xpYnJhcmllcy9ydW50aW1lL3ByZWx1ZGUub2JqIgorCSMgQ0ZMQUdTICs9IC1pbmNsdWRlICIkKE1XQ1dfUEFUSCkvaGVhZGVycy9ubG1fY2xpYl9wcmVmaXguaCIKKwlDRkxBR1MgKz0gLWFsaWduIDEKK2VuZGlmCitlbHNlCitMRAk9IG5sbWNvbnYKK0xERkxBR1MJPSAtVAorTElCRVhUCT0gYQorQ0ZMQUdTCSs9IC1tMzIKK0NGTEFHUyAgKz0gLWZuby1idWlsdGluIC1mbm8tc3RyaWN0LWFsaWFzaW5nCitpZmVxICgkKGZpbmRzdHJpbmcgZ2NjLCQoQ0MpKSxnY2MpCitDRkxBR1MgICs9IC1mcGNjLXN0cnVjdC1yZXR1cm4KK2VuZGlmCitDRkxBR1MJKz0gLVdhbGwgIyAtcGVkYW50aWMKK2lmZXEgKCQoTElCQVJDSCksTElCQykKK2lmZXEgKCQoUE9TSVhGTCksMSkKKwlQUkVMVURFID0gJChOREtfTElCQykvaW1wb3J0cy9wb3NpeHByZS5nY2MubworZWxzZQorCVBSRUxVREUgPSAkKE5ES19MSUJDKS9pbXBvcnRzL2xpYmNwcmUuZ2NjLm8KK2VuZGlmCitlbHNlCisJIyBQUkVMVURFID0gJChOREtfQ0xJQikvaW1wb3J0cy9jbGlicHJlLmdjYy5vCisJIyB0byBhdm9pZCB0aGUgX19pbml0XyogLyBfX2RlaW5pdF8qIHdob2VzIGRvbnQgdXNlIHByZWx1ZGUgZnJvbSBOREsKKwkjIGh0dHA6Ly93d3cuZ2tudy5uZXQvZGV2ZWxvcG1lbnQvbWtfbmxtL2djY19wcmUuemlwCisJUFJFTFVERSA9ICQoTkRLX1JPT1QpL3ByZS9wcmVsdWRlLm8KKwlDRkxBR1MgKz0gLWluY2x1ZGUgJChOREtCQVNFKS9ubG1jb252L2dlbmxtLmgKK2VuZGlmCitlbmRpZgorCitOREtfUk9PVCA9ICQoTkRLQkFTRSkvbmRrCitpZm5kZWYgTkRLX0NMSUIKK05ES19DTElCID0gJChOREtfUk9PVCkvbndzZGsKK2VuZGlmCitpZm5kZWYgTkRLX0xJQkMKK05ES19MSUJDID0gJChOREtfUk9PVCkvbGliYworZW5kaWYKK2lmbmRlZiBOREtfTERBUAorTkRLX0xEQVAgPSAkKE5ES19ST09UKS9jbGRhcHNkay9uZXR3YXJlCitlbmRpZgorQ1VSTF9JTkMgPSAuLi8uLi9pbmNsdWRlCitDVVJMX0xJQiA9IC4uLy4uL2xpYgorCitJTkNMVURFUyA9IC1JJChDVVJMX0lOQykKKworaWZlcSAoJChmaW5kc3RyaW5nIC1zdGF0aWMsJChDRkcpKSwtc3RhdGljKQorTElOS19TVEFUSUMgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1hcmVzLCQoQ0ZHKSksLWFyZXMpCitXSVRIX0FSRVMgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1ydG1wLCQoQ0ZHKSksLXJ0bXApCitXSVRIX1JUTVAgPSAxCitXSVRIX1NTTCA9IDEKK1dJVEhfWkxJQiA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLXNzaDIsJChDRkcpKSwtc3NoMikKK1dJVEhfU1NIMiA9IDEKK1dJVEhfU1NMID0gMQorV0lUSF9aTElCID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtYXh0bHMsJChDRkcpKSwtYXh0bHMpCitXSVRIX0FYVExTID0gMQorV0lUSF9TU0wgPQorZWxzZQoraWZlcSAoJChmaW5kc3RyaW5nIC1zc2wsJChDRkcpKSwtc3NsKQorV0lUSF9TU0wgPSAxCitlbmRpZgorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtemxpYiwkKENGRykpLC16bGliKQorV0lUSF9aTElCID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtaWRuLCQoQ0ZHKSksLWlkbikKK1dJVEhfSUROID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtc3BuZWdvLCQoQ0ZHKSksLXNwbmVnbykKK1dJVEhfU1BORUdPID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtaXB2NiwkKENGRykpLC1pcHY2KQorRU5BQkxFX0lQVjYgPSAxCitlbmRpZgorCitpZmRlZiBMSU5LX1NUQVRJQworCUxETElCUwk9ICQoQ1VSTF9MSUIpL2xpYmN1cmwuJChMSUJFWFQpCitpZmRlZiBXSVRIX0FSRVMKKwlMRExJQlMgKz0gJChMSUJDQVJFU19QQVRIKS9saWJjYXJlcy4kKExJQkVYVCkKK2VuZGlmCitlbHNlCisJTU9EVUxFUwk9IGxpYmN1cmwubmxtCisJSU1QT1JUUwk9IEAkKENVUkxfTElCKS9saWJjdXJsLmltcAorZW5kaWYKK2lmZGVmIFdJVEhfU1NIMgorCSMgSU5DTFVERVMgKz0gLUkkKExJQlNTSDJfUEFUSCkvaW5jbHVkZQoraWZkZWYgTElOS19TVEFUSUMKKwlMRExJQlMgKz0gJChMSUJTU0gyX1BBVEgpL253L2xpYnNzaDIuJChMSUJFWFQpCitlbHNlCisJTU9EVUxFUyArPSBsaWJzc2gyLm5sbQorCUlNUE9SVFMgKz0gQCQoTElCU1NIMl9QQVRIKS9udy9saWJzc2gyLmltcAorZW5kaWYKK2VuZGlmCitpZmRlZiBXSVRIX1JUTVAKKwkjIElOQ0xVREVTICs9IC1JJChMSUJSVE1QX1BBVEgpCitpZmRlZiBMSU5LX1NUQVRJQworCUxETElCUyArPSAkKExJQlJUTVBfUEFUSCkvbGlicnRtcC9saWJydG1wLiQoTElCRVhUKQorZW5kaWYKK2VuZGlmCitpZmRlZiBXSVRIX1NTTAorCUlOQ0xVREVTICs9IC1JJChPUEVOU1NMX1BBVEgpL291dGluY19ud18kKExJQkFSQ0hfTCkKKwlMRExJQlMgKz0gJChPUEVOU1NMX1BBVEgpL291dF9ud18kKExJQkFSQ0hfTCkvc3NsLiQoTElCRVhUKQorCUxETElCUyArPSAkKE9QRU5TU0xfUEFUSCkvb3V0X253XyQoTElCQVJDSF9MKS9jcnlwdG8uJChMSUJFWFQpCisJSU1QT1JUUyArPSBHZXRQcm9jZXNzU3dpdGNoQ291bnQgUnVubmluZ1Byb2Nlc3MKK2lmZGVmIFdJVEhfU1BORUdPCisJIyBJTkNMVURFUyArPSAtSSQoRkJPUEVOU1NMX1BBVEgpL2luY2x1ZGUKKwlMRExJQlMgKz0gJChGQk9QRU5TU0xfUEFUSCkvbncvZmJvcGVuc3NsLiQoTElCRVhUKQorZW5kaWYKK2Vsc2UKK2lmZGVmIFdJVEhfQVhUTFMKKwlJTkNMVURFUyArPSAtSSQoQVhUTFNfUEFUSCkvaW5jCitpZmRlZiBMSU5LX1NUQVRJQworCUxETElCUyArPSAkKEFYVExTX1BBVEgpL2xpYi9saWJheHRscy4kKExJQkVYVCkKK2Vsc2UKKwlNT0RVTEVTICs9IGxpYmF4dGxzLm5sbQorCUlNUE9SVFMgKz0gJChBWFRMU19QQVRIKS9saWIvbGliYXh0bHMuaW1wCitlbmRpZgorZW5kaWYKK2VuZGlmCitpZmRlZiBXSVRIX1pMSUIKKwkjIElOQ0xVREVTICs9IC1JJChaTElCX1BBVEgpCitpZmRlZiBMSU5LX1NUQVRJQworCUxETElCUyArPSAkKFpMSUJfUEFUSCkvbncvJChMSUJBUkNIKS9saWJ6LiQoTElCRVhUKQorZWxzZQorCU1PRFVMRVMgKz0gbGliei5ubG0KKwlJTVBPUlRTICs9IEAkKFpMSUJfUEFUSCkvbncvJChMSUJBUkNIKS9saWJ6LmltcAorZW5kaWYKK2VuZGlmCitpZmRlZiBXSVRIX0lETgorCSMgSU5DTFVERVMgKz0gLUkkKExJQklETl9QQVRIKS9pbmNsdWRlCisJTERMSUJTICs9ICQoTElCSUROX1BBVEgpL2xpYi9saWJpZG4uJChMSUJFWFQpCitlbmRpZgorCitpZmVxICgkKExJQkFSQ0gpLExJQkMpCisJSU5DTFVERVMgKz0gLUkkKE5ES19MSUJDKS9pbmNsdWRlCisJIyBJTkNMVURFUyArPSAtSSQoTkRLX0xJQkMpL2luY2x1ZGUvbmtzCisJIyBJTkNMVURFUyArPSAtSSQoTkRLX0xJQkMpL2luY2x1ZGUvd2luc29jaworCUNGTEFHUyArPSAtRF9QT1NJWF9TT1VSQ0UKK2Vsc2UKKwlJTkNMVURFUyArPSAtSSQoTkRLX0NMSUIpL2luY2x1ZGUvbmxtCisJIyBJTkNMVURFUyArPSAtSSQoTkRLX0NMSUIpL2luY2x1ZGUKK2VuZGlmCitpZm5kZWYgRElTQUJMRV9MREFQCisJIyBJTkNMVURFUyArPSAtSSQoTkRLX0xEQVApLyQoTElCQVJDSF9MKS9pbmMKK2VuZGlmCitDRkxBR1MJKz0gJChJTkNMVURFUykKKworaWZlcSAoJChNVFNBRkUpLFlFUykKKwlYRENPUFQgPSAtbgorZW5kaWYKK2lmZXEgKCQoTVRTQUZFKSxOTykKKwlYRENPUFQgPSAtdQorZW5kaWYKK2lmZGVmIFhEQ09QVAorCVhEQ0RBVEEgPSAkKE9CSkRJUikvJChUQVJHRVQpLnhkYworZW5kaWYKKworaWZlcSAoJChmaW5kc3RyaW5nIC9zaCwkKFNIRUxMKSksL3NoKQorREwJPSAnCitEUwk9IC8KK1BDVAk9ICUKKyMtaW5jbHVkZSAkKE5ES0JBU0UpL25sbWNvbnYvbmNwZnMuaW5jCitlbHNlCitEUwk9IFxcCitQQ1QJPSAlJQorZW5kaWYKKworIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgdGhlIENTT1VSQ0VTIGFuZCBISEVBREVSUyBkZWZpbmVzCitpbmNsdWRlIE1ha2VmaWxlLmluYworCitjaGVja19QUk9HUkFNUyA6PSAkKHBhdHN1YnN0ICUsJS5ubG0sJChzdHJpcCAkKGNoZWNrX1BST0dSQU1TKSkpCisKKy5QUkVDSU9VUzogJChPQkpESVIpLyUubyAkKE9CSkRJUikvJS5kZWYgJChPQkpESVIpLyUueGRjCisKKworYWxsOiBwcmVidWlsZCAkKGNoZWNrX1BST0dSQU1TKQorCitwcmVidWlsZDogJChPQkpESVIpICQoT0JKRElSKS92ZXJzaW9uLmluYworCiskKE9CSkRJUikvJS5vOiAlLmMKKwlAZWNobyBDb21waWxpbmcgJDwKKwkkKENDKSAkKENGTEFHUykgLWMgJDwgLW8gJEAKKworJChPQkpESVIpL3ZlcnNpb24uaW5jOiAkKENVUkxfSU5DKS9jdXJsL2N1cmx2ZXIuaCAkKE9CSkRJUikKKwlAZWNobyBDcmVhdGluZyAkQAorCUAkKEFXSykgLWYgLi4vLi4vcGFja2FnZXMvTmV0V2FyZS9nZXRfdmVyLmF3ayAkPCA+ICRACisKK2luc3RhbGw6ICQoSU5TVERJUikgYWxsCisJQCQoQ1ApICQoY2hlY2tfUFJPR1JBTVMpICQoSU5TVERJUikKKworY2xlYW46CisJLSQoUk0pIC1yICQoT0JKRElSKQorCitkaXN0Y2xlYW4gdmNsZWFuOiBjbGVhbgorCS0kKFJNKSAkKGNoZWNrX1BST0dSQU1TKQorCiskKE9CSkRJUikgJChJTlNURElSKToKKwlAJChNS0RJUikgJEAKKworJS5ubG06ICQoT0JKRElSKS8lLm8gJChPQkpESVIpLyUuZGVmICQoWERDREFUQSkKKwlAZWNobyBMaW5raW5nICRACisJQC0kKFJNKSAkQAorCUAkKExEKSAkKExERkxBR1MpICQoT0JKRElSKS8kKEA6Lm5sbT0uZGVmKQorCiskKE9CSkRJUikvJS54ZGM6IE1ha2VmaWxlLm5ldHdhcmUKKwlAZWNobyBDcmVhdGluZyAkQAorCUAkKE1QS1hEQykgJChYRENPUFQpICRACisKKyQoT0JKRElSKS8lLmRlZjogTWFrZWZpbGUubmV0d2FyZQorCUBlY2hvICQoREwpIyBERUYgZmlsZSBmb3IgbGlua2luZyB3aXRoICQoTEQpJChETCkgPiAkQAorCUBlY2hvICQoREwpIyBEbyBub3QgZWRpdCB0aGlzIGZpbGUgLSBpdCBpcyBjcmVhdGVkIGJ5IE1ha2UhJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSMgQWxsIHlvdXIgY2hhbmdlcyB3aWxsIGJlIGxvc3QhISQoREwpID4+ICRACisJQGVjaG8gJChETCkjJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWNvcHlyaWdodCAiJChDT1BZUikiJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWRlc2NyaXB0aW9uICIkKERFU0NSKSAkKG5vdGRpciAkKEA6LmRlZj0pKSBFeGFtcGxlIiQoREwpID4+ICRACisJQGVjaG8gJChETCl2ZXJzaW9uICQoVkVSU0lPTikkKERMKSA+PiAkQAoraWZkZWYgTkxNVFlQRQorCUBlY2hvICQoREwpdHlwZSAkKE5MTVRZUEUpJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBTVEFDSworCUBlY2hvICQoREwpc3RhY2sgJChTVEFDSykkKERMKSA+PiAkQAorZW5kaWYKK2lmZGVmIFNDUkVFTgorCUBlY2hvICQoREwpc2NyZWVubmFtZSAiJChERVNDUikgJChub3RkaXIgJChAOi5kZWY9KSkgJChTQ1JFRU4pIiQoREwpID4+ICRACitlbHNlCisJQGVjaG8gJChETClzY3JlZW5uYW1lICJERUZBVUxUIiQoREwpID4+ICRACitlbmRpZgoraWZuZXEgKCQoREIpLE5ERUJVRykKKwlAZWNobyAkKERMKWRlYnVnJChETCkgPj4gJEAKK2VuZGlmCisJQGVjaG8gJChETCl0aHJlYWRuYW1lICJfJChub3RkaXIgJChAOi5kZWY9KSkiJChETCkgPj4gJEAKK2lmZGVmIFhEQ0RBVEEKKwlAZWNobyAkKERMKXhkY2RhdGEgJChYRENEQVRBKSQoREwpID4+ICRACitlbmRpZgoraWZlcSAoJChMRFJJTkcpLDApCisJQGVjaG8gJChETClmbGFnX29uIDE2JChETCkgPj4gJEAKK2VuZGlmCitpZmVxICgkKExEUklORyksMykKKwlAZWNobyAkKERMKWZsYWdfb24gNTEyJChETCkgPj4gJEAKK2VuZGlmCitpZmVxICgkKExJQkFSQ0gpLENMSUIpCisJQGVjaG8gJChETClzdGFydCBfUHJlbHVkZSQoREwpID4+ICRACisJQGVjaG8gJChETClleGl0IF9TdG9wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfQ0xJQikvaW1wb3J0cy9jbGliLmltcCQoREwpID4+ICRACisJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0NMSUIpL2ltcG9ydHMvdGhyZWFkcy5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19DTElCKS9pbXBvcnRzL25sbWxpYi5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19DTElCKS9pbXBvcnRzL3NvY2tsaWIuaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKW1vZHVsZSBjbGliJChETCkgPj4gJEAKK2lmbmRlZiBESVNBQkxFX0xEQVAKKwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfTERBUCkvY2xpYi9pbXBvcnRzL2xkYXBzZGsuaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfTERBUCkvY2xpYi9pbXBvcnRzL2xkYXBzc2wuaW1wJChETCkgPj4gJEAKKyMJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0xEQVApL2NsaWIvaW1wb3J0cy9sZGFweC5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpbW9kdWxlIGxkYXBzZGsgbGRhcHNzbCQoREwpID4+ICRACitlbmRpZgorZWxzZQoraWZlcSAoJChQT1NJWEZMKSwxKQorCUBlY2hvICQoREwpZmxhZ19vbiA0MTk0MzA0JChETCkgPj4gJEAKK2VuZGlmCisJQGVjaG8gJChETClmbGFnX29uIDY0JChETCkgPj4gJEAKKwlAZWNobyAkKERMKXBzZXVkb3ByZWVtcHRpb24kKERMKSA+PiAkQAoraWZlcSAoJChmaW5kc3RyaW5nIHBvc2l4cHJlLCQoUFJFTFVERSkpLHBvc2l4cHJlKQorCUBlY2hvICQoREwpc3RhcnQgUE9TSVhfU3RhcnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpZXhpdCBQT1NJWF9TdG9wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWNoZWNrIFBPU0lYX0NoZWNrVW5sb2FkJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKXN0YXJ0IF9MaWJDUHJlbHVkZSQoREwpID4+ICRACisJQGVjaG8gJChETClleGl0IF9MaWJDUG9zdGx1ZGUkKERMKSA+PiAkQAorCUBlY2hvICQoREwpY2hlY2sgX0xpYkNDaGVja1VubG9hZCQoREwpID4+ICRACitlbmRpZgorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19MSUJDKS9pbXBvcnRzL2xpYmMuaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfTElCQykvaW1wb3J0cy9uZXR3YXJlLmltcCQoREwpID4+ICRACisJQGVjaG8gJChETCltb2R1bGUgbGliYyQoREwpID4+ICRACitpZm5kZWYgRElTQUJMRV9MREFQCisJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0xEQVApL2xpYmMvaW1wb3J0cy9sbGRhcHNkay5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19MREFQKS9saWJjL2ltcG9ydHMvbGxkYXBzc2wuaW1wJChETCkgPj4gJEAKKyMJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0xEQVApL2xpYmMvaW1wb3J0cy9sbGRhcHguaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKW1vZHVsZSBsbGRhcHNkayBsbGRhcHNzbCQoREwpID4+ICRACitlbmRpZgorZW5kaWYKK2lmZGVmIE1PRFVMRVMKKwlAZWNobyAkKERMKW1vZHVsZSAkKE1PRFVMRVMpJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBFWFBPUlRTCisJQGVjaG8gJChETClleHBvcnQgJChFWFBPUlRTKSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgSU1QT1JUUworCUBlY2hvICQoREwpaW1wb3J0ICQoSU1QT1JUUykkKERMKSA+PiAkQAorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyBubG1jb252LCQoTEQpKSxubG1jb252KQorCUBlY2hvICQoREwpaW5wdXQgJChQUkVMVURFKSQoREwpID4+ICRACisJQGVjaG8gJChETClpbnB1dCAkKEA6LmRlZj0ubykkKERMKSA+PiAkQAoraWZkZWYgTERMSUJTCisJQGVjaG8gJChETClpbnB1dCAkKExETElCUykkKERMKSA+PiAkQAorZW5kaWYKKwlAZWNobyAkKERMKW91dHB1dCAkKG5vdGRpciAkKEA6LmRlZj0ubmxtKSkkKERMKSA+PiAkQAorZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvUkVBRE1FIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcwMDQ4YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvUkVBRE1FCkBAIC0wLDAgKzEsODAgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisKK1RoaXMgZGlyZWN0b3J5IGlzIGZvciBsaWJjdXJsIHByb2dyYW1taW5nIGV4YW1wbGVzLiBUaGV5IGFyZSBtZWFudCB0byBzaG93Citzb21lIHNpbXBsZSBzdGVwcyBvbiBob3cgeW91IGNhbiBidWlsZCB5b3VyIG93biBhcHBsaWNhdGlvbiB0byB0YWtlIGZ1bGwKK2FkdmFudGFnZSBvZiBsaWJjdXJsLgorCitJZiB5b3UgZW5kIHVwIHdpdGggb3RoZXIgc21hbGwgYnV0IHN0aWxsIHVzZWZ1bCBleGFtcGxlIHNvdXJjZXMsIHBsZWFzZSBtYWlsCit0aGVtIGZvciBzdWJtaXNzaW9uIGluIGZ1dHVyZSBwYWNrYWdlcyBhbmQgb24gdGhlIHdlYiBzaXRlLgorCitCVUlMRElORworCitUaGUgTWFrZWZpbGUuZXhhbXBsZSBpcyBhbiBleGFtcGxlIG1ha2VmaWxlIHRoYXQgY291bGQgYmUgdXNlZCB0byBidWlsZCB0aGVzZQorZXhhbXBsZXMuIEp1c3QgZWRpdCB0aGUgZmlsZSBhY2NvcmRpbmcgdG8geW91ciBzeXN0ZW0gYW5kIHJlcXVpcmVtZW50cyBmaXJzdC4KKworTW9zdCBleGFtcGxlcyBzaG91bGQgYnVpbGQgZmluZSB1c2luZyBhIGNvbW1hbmQgbGluZSBsaWtlIHRoaXM6CisKKyAgJCBgY3VybC1jb25maWcgLS1jYyAtLWNmbGFncyAtLWxpYnNgIC1vIGV4YW1wbGUgZXhhbXBsZS5jCisKK1NvbWUgY29tcGlsZXJzIGRvbid0IGxpa2UgaGF2aW5nIHRoZSBhcmd1bWVudHMgaW4gdGhpcyBvcmRlciBidXQgaW5zdGVhZAord2FudCB5b3UgZG8gcmVvcmdhbml6ZSB0aGVtIGxpa2U6CisKKyAgJCBgY3VybC1jb25maWcgLS1jY2AgLW8gZXhhbXBsZSBleGFtcGxlLmMgYGN1cmwtY29uZmlnIC0tY2ZsYWdzIC0tbGlic2AKKworKlBMRUFTRSogZG8gbm90IHVzZSB0aGUgY3VybC5oYXh4LnNlIHNpdGUgYXMgYSB0ZXN0IHRhcmdldCBmb3IgeW91ciBsaWJjdXJsCithcHBsaWNhdGlvbnMvZXhwZXJpbWVudHMuIEV2ZW4gaWYgc29tZSBvZiB0aGUgZXhhbXBsZXMgdXNlIHRoYXQgc2l0ZSBhcyBhIFVSTAorYXQgc29tZSBwbGFjZXMsIGl0IGRvZXNuJ3QgbWVhbiB0aGF0IHRoZSBVUkxzIHdvcmsgb3IgdGhhdCB3ZSBleHBlY3QgeW91IHRvCithY3R1YWxseSB0b3J0dXJlIG91ciB3ZWIgc2l0ZSB3aXRoIHlvdXIgdGVzdHMhICBUaGFua3MuCisKK0VYQU1QTEVTCisKK2FueWF1dGhwdXQuYyAgIC0gSFRUUCBQVVQgdXNpbmcgImFueSIgYXV0aGVudGljYXRpb24gbWV0aG9kCitjYWNlcnRpbm1lbS5jICAtIFVzZSBhIGJ1aWx0LWluIFBFTSBjZXJ0aWZpY2F0ZSB0byByZXRyaWV2ZSBhIGh0dHBzIHBhZ2UKK2Nvb2tpZV9pbnRlcmZhY2UuYyAtIHNob3dzIHVzYWdlIG9mIHNpbXBsZSBjb29raWUgaW50ZXJmYWNlCitjdXJsZ3RrLmMgICAgICAtIGRvd25sb2FkIHVzaW5nIGEgR1RLIHByb2dyZXNzIGJhcgorY3VybHguYyAgICAgICAgLSBnZXR0aW5nIGZpbGUgaW5mbyBmcm9tIHRoZSByZW1vdGUgY2VydCBkYXRhCitkZWJ1Zy5jICAgICAgICAtIHNob3dpbmcgaG93IHRvIHVzZSB0aGUgZGVidWcgY2FsbGJhY2sKK2ZpbGV1cGxvYWQuYyAgIC0gdXBsb2FkaW5nIHRvIGEgZmlsZTovLyBVUkwKK2ZvcGVuLmMgICAgICAgIC0gZm9wZW4oKSBsYXllciB0aGF0IHN1cHBvcnRzIG9wZW5pbmcgVVJMcyBhbmQgZmlsZXMKK2Z0cGdldC5jICAgICAgIC0gc2ltcGxlIGdldHRpbmcgYSBmaWxlIGZyb20gRlRQCitmdHBnZXRyZXNwLmMgICAtIGdldCB0aGUgcmVzcG9uc2Ugc3RyaW5ncyBmcm9tIHRoZSBGVFAgc2VydmVyCitmdHB1cGxvYWQuYyAgICAtIHVwbG9hZCBhIGZpbGUgdG8gYW4gRlRQIHNlcnZlcgorZnRwdXBsb2FkcmVzdW1lLmMgLSByZXN1bWUgYW4gdXBsb2FkIHRvIGFuIEZUUCBzZXJ2ZXIKK2dldGluZm8uYyAgICAgIC0gZ2V0IHRoZSBDb250ZW50LVR5cGUgZnJvbSB0aGUgcmVjZW50IHRyYW5zZmVyCitnZXRpbm1lbW9yeS5jICAtIGRvd25sb2FkIGEgZmlsZSB0byBtZW1vcnkgb25seQorZ2hpcGVyLmMgICAgICAgLSBjdXJsX211bHRpX3NvY2tldCgpIHVzaW5nIGNvZGUgd2l0aCBnbGliLTIKK2hpcGVyZmlmby5jICAgIC0gZG93bmxvYWRzIGFsbCBVUkxzIHdyaXR0ZW4gdG8gdGhlIGZpZm8sIHVzaW5nCisgICAgICAgICAgICAgICAgIGN1cmxfbXVsdGlfc29ja2V0KCkgYW5kIGxpYmV2ZW50CitodG1sdGlkeS5jICAgICAtIGRvd25sb2FkIGEgZG9jdW1lbnQgYW5kIHVzZSBsaWJ0aWR5IHRvIHBhcnNlIHRoZSBIVE1MCitodG1sdGl0bGUuY2MgICAtIGRvd25sb2FkIGEgSFRNTCBmaWxlIGFuZCBleHRyYWN0IHRoZSA8dGl0bGU+IHRhZyBmcm9tIGEgSFRNTAorICAgICAgICAgICAgICAgICBwYWdlIHVzaW5nIGxpYnhtbAoraHR0cC1wb3N0LmMgICAgLSBIVFRQIFBPU1QKK2h0dHBwdXQuYyAgICAgIC0gSFRUUCBQVVQgYSBsb2NhbCBmaWxlCitodHRwcy5jICAgICAgICAtIHNpbXBsZSBIVFRQUyB0cmFuc2ZlcgoraW1hcC5jICAgICAgICAgLSBzaW1wbGUgSU1BUCB0cmFuc2ZlcgorbXVsdGktYXBwLmMgICAgLSBhIG11bHRpLWludGVyZmFjZSBhcHAKK211bHRpLWRlYnVnY2FsbGJhY2suYyAtIGEgbXVsdGktaW50ZXJmYWNlIGFwcCB1c2luZyB0aGUgZGVidWcgY2FsbGJhY2sKK211bHRpLWRvdWJsZS5jIC0gYSBtdWx0aS1pbnRlcmZhY2UgYXBwIGRvaW5nIHR3byBzaW11bHRhbmVvdXMgdHJhbnNmZXJzCittdWx0aS1wb3N0LmMgICAtIGEgbXVsdGktaW50ZXJmYWNlIGFwcCBkb2luZyBhIG11bHRpcGFydCBmb3JtcG9zdAorbXVsdGktc2luZ2xlLmMgLSBhIG11bHRpLWludGVyZmFjZSBhcHAgZ2V0dGluZyBhIHNpbmdsZSBmaWxlCittdWx0aXRocmVhZC5jICAtIGFuIGV4YW1wbGUgdXNpbmcgbXVsdGktdHJlYWRpbmcgdHJhbnNmZXJyaW5nIG11bHRpcGxlIGZpbGVzCitvcGVuc3NsdGhyZWFkbG9jay5jIC0gc2hvdyBob3cgdG8gZG8gbG9ja2luZyB3aGVuIHVzaW5nIE9wZW5TU0wgbXVsdGktdGhyZWFkZWQKK3BlcnNpc3RhbnQuYyAgIC0gcmVxdWVzdCB0d28gVVJMcyB3aXRoIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uCitwb3Azcy5jICAgICAgICAtIFBPUDNTIHRyYW5zZmVyCitwb3Azc2xpc3QuYyAgICAtIFBPUDNTIExJU1QKK3Bvc3QtY2FsbGJhY2suYyAtIHNlbmQgYSBIVFRQIFBPU1QgdXNpbmcgYSBjYWxsYmFjaworcG9zdGl0Mi5jICAgICAgLSBzZW5kIGEgSFRUUCBtdWx0aXBhcnQgZm9ybXBvc3QKK3NhbXBsZWNvbnYuYyAgIC0gc2hvd2luZyBob3cgYSBwcm9ncmFtIG9uIGEgbm9uLUFTQ0lJIHBsYXRmb3JtIHdvdWxkIGludm9rZQorICAgICAgICAgICAgICAgICBjYWxsYmFja3MgdG8gZG8gaXRzIG93biBjb2Rlc2V0IGNvbnZlcnNpb25zIGluc3RlYWQgb2YgdXNpbmcKKyAgICAgICAgICAgICAgICAgdGhlIGJ1aWx0LWluIGljb252IGZ1bmN0aW9ucyBpbiBsaWJjdXJsCitzZXBoZWFkZXJzLmMgICAtIGRvd25sb2FkIGhlYWRlcnMgdG8gYSBzZXBhcmF0ZSBmaWxlCitzaW1wbGUuYyAgICAgICAtIHRoZSBtb3N0IHNpbXBsZSBkb3dubG9hZCBhIFVSTCBzb3VyY2UKK3NpbXBsZXBvc3QuYyAgIC0gSFRUUCBQT1NUCitzaW1wbGVzc2wuYyAgICAtIEhUVFBTIGV4YW1wbGUgd2l0aCBjZXJ0aWZpY2F0ZXMgbWFueSBvcHRpb25zIHNldAorc3luY3RpbWUuYyAgICAgLSBTeW5jIGxvY2FsIHRpbWUgYnkgZXh0cmFjdGluZyBkYXRlIGZyb20gcmVtb3RlIEhUVFAgc2VydmVycwordXJsMmZpbGUuYyAgICAgLSBkb3dubG9hZCBhIGRvY3VtZW50IGFuZCBzdG9yZSBpdCBpbiBhIGZpbGUKKzEwLWF0LWEtdGltZS5jIC0gRG93bmxvYWQgbWFueSBmaWxlcyBzaW11bHRhbmVvdXNseSwgMTAgYXQgYSB0aW1lLgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9hbnlhdXRocHV0LmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2FueWF1dGhwdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTk3YTFlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9hbnlhdXRocHV0LmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpZmRlZiBXSU4zMgorIyAgaW5jbHVkZSA8aW8uaD4KKyNlbHNlCisjICBpZmRlZiBfX1ZNUworICAgICB0eXBlZGVmIGludCBpbnRwdHJfdDsKKyMgIGVuZGlmCisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2lmZGVmIF9NU0NfVkVSCisjICBpZmRlZiBfV0lONjQKKyAgICAgdHlwZWRlZiBfX2ludDY0IGludHB0cl90OworIyAgZWxzZQorICAgICB0eXBlZGVmIGludCBpbnRwdHJfdDsKKyMgIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInByaW50Zl9tYWNyby5oIgorCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA8IDB4MDcwYzAzCisjZXJyb3IgInVwZ3JhZGUgeW91ciBsaWJjdXJsIHRvIG5vIGxlc3MgdGhhbiA3LjEyLjMiCisjZW5kaWYKKworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgMQorI2VuZGlmCisKKy8qCisgKiBUaGlzIGV4YW1wbGUgc2hvd3MgYSBIVFRQIFBVVCBvcGVyYXRpb24gd2l0aCBhdXRoZW50aWN0aW9uIHVzaW5nICJhbnkiCisgKiB0eXBlLiBJdCBQVVRzIGEgZmlsZSBnaXZlbiBhcyBhIGNvbW1hbmQgbGluZSBhcmd1bWVudCB0byB0aGUgVVJMIGFsc28gZ2l2ZW4KKyAqIG9uIHRoZSBjb21tYW5kIGxpbmUuCisgKgorICogU2luY2UgbGliY3VybCA3LjEyLjMsIHVzaW5nICJhbnkiIGF1dGggYW5kIFBPU1QvUFVUIHJlcXVpcmVzIGEgc2V0IGlvY3RsCisgKiBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGV4YW1wbGUgYWxzbyB1c2VzIGl0cyBvd24gcmVhZCBjYWxsYmFjay4KKyAqLworCisvKiBpb2N0bCBjYWxsYmFjayBmdW5jdGlvbiAqLworc3RhdGljIGN1cmxpb2VyciBteV9pb2N0bChDVVJMICpoYW5kbGUsIGN1cmxpb2NtZCBjbWQsIHZvaWQgKnVzZXJwKQoreworICBpbnRwdHJfdCBmZCA9IChpbnRwdHJfdCl1c2VycDsKKworICAodm9pZCloYW5kbGU7IC8qIG5vdCB1c2VkIGluIGhlcmUgKi8KKworICBzd2l0Y2goY21kKSB7CisgIGNhc2UgQ1VSTElPQ01EX1JFU1RBUlRSRUFEOgorICAgIC8qIG1yIGxpYmN1cmwga2luZGx5IGFza3MgYXMgdG8gcmV3aW5kIHRoZSByZWFkIGRhdGEgc3RyZWFtIHRvIHN0YXJ0ICovCisgICAgaWYoLTEgPT0gbHNlZWsoZmQsIDAsIFNFRUtfU0VUKSkKKyAgICAgIC8qIGNvdWxkbid0IHJld2luZCAqLworICAgICAgcmV0dXJuIENVUkxJT0VfRkFJTFJFU1RBUlQ7CisKKyAgICBicmVhazsKKworICBkZWZhdWx0OiAvKiBpZ25vcmUgdW5rbm93biBjb21tYW5kcyAqLworICAgIHJldHVybiBDVVJMSU9FX1VOS05PV05DTUQ7CisgIH0KKyAgcmV0dXJuIENVUkxJT0VfT0s7IC8qIHN1Y2Nlc3MhICovCit9CisKKy8qIHJlYWQgY2FsbGJhY2sgZnVuY3Rpb24sIGZyZWFkKCkgbG9vayBhbGlrZSAqLworc3RhdGljIHNpemVfdCByZWFkX2NhbGxiYWNrKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyZWFtKQoreworICBzaXplX3QgcmV0Y29kZTsKKworICBpbnRwdHJfdCBmZCA9IChpbnRwdHJfdClzdHJlYW07CisKKyAgcmV0Y29kZSA9IHJlYWQoZmQsIHB0ciwgc2l6ZSAqIG5tZW1iKTsKKworICBmcHJpbnRmKHN0ZGVyciwgIioqKiBXZSByZWFkICUiIF9GTVRfU0laRV9UICIgYnl0ZXMgZnJvbSBmaWxlXG4iLCByZXRjb2RlKTsKKworICByZXR1cm4gcmV0Y29kZTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM7CisgIGludHB0cl90IGhkIDsKKyAgc3RydWN0IHN0YXQgZmlsZV9pbmZvOworCisgIGNoYXIgKmZpbGU7CisgIGNoYXIgKnVybDsKKworICBpZihhcmdjIDwgMykKKyAgICByZXR1cm4gMTsKKworICBmaWxlPSBhcmd2WzFdOworICB1cmwgPSBhcmd2WzJdOworCisgIC8qIGdldCB0aGUgZmlsZSBzaXplIG9mIHRoZSBsb2NhbCBmaWxlICovCisgIGhkID0gb3BlbihmaWxlLCBPX1JET05MWSkgOworICBmc3RhdChoZCwgJmZpbGVfaW5mbyk7CisKKyAgLyogSW4gd2luZG93cywgdGhpcyB3aWxsIGluaXQgdGhlIHdpbnNvY2sgc3R1ZmYgKi8KKyAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIC8qIGdldCBhIGN1cmwgaGFuZGxlICovCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZihjdXJsKSB7CisgICAgLyogd2Ugd2FudCB0byB1c2Ugb3VyIG93biByZWFkIGZ1bmN0aW9uICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgcmVhZF9jYWxsYmFjayk7CisKKyAgICAvKiB3aGljaCBmaWxlIHRvIHVwbG9hZCAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFEREFUQSwgKHZvaWQqKWhkKTsKKworICAgIC8qIHNldCB0aGUgaW9jdGwgZnVuY3Rpb24gKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU9DVExGVU5DVElPTiwgbXlfaW9jdGwpOworCisgICAgLyogcGFzcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIHRoZSBpb2N0bCBjYWxsYmFjayBhcyB3ZWxsICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0lPQ1RMREFUQSwgKHZvaWQqKWhkKTsKKworICAgIC8qIGVuYWJsZSAidXBsb2FkaW5nIiAod2hpY2ggbWVhbnMgUFVUIHdoZW4gZG9pbmcgSFRUUCkgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVBMT0FELCAxTCkgOworCisgICAgLyogc3BlY2lmeSB0YXJnZXQgVVJMLCBhbmQgbm90ZSB0aGF0IHRoaXMgVVJMIHNob3VsZCBhbHNvIGluY2x1ZGUgYSBmaWxlCisgICAgICAgbmFtZSwgbm90IG9ubHkgYSBkaXJlY3RvcnkgKGFzIHlvdSBjYW4gZG8gd2l0aCBHVFAgdXBsb2FkcykgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9VUkwsIHVybCk7CisKKyAgICAvKiBhbmQgZ2l2ZSB0aGUgc2l6ZSBvZiB0aGUgdXBsb2FkLCB0aGlzIHN1cHBvcnRzIGxhcmdlIGZpbGUgc2l6ZXMKKyAgICAgICBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBnZW5lcmFsIHN1cHBvcnQgZm9yIGl0ICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0lORklMRVNJWkVfTEFSR0UsCisgICAgICAgICAgICAgICAgICAgICAoY3VybF9vZmZfdClmaWxlX2luZm8uc3Rfc2l6ZSk7CisKKyAgICAvKiB0ZWxsIGxpYmN1cmwgd2UgY2FuIHVzZSAiYW55IiBhdXRoLCB3aGljaCBsZXRzIHRoZSBsaWIgcGljayBvbmUsIGJ1dCBpdAorICAgICAgIGFsc28gY29zdHMgb25lIGV4dHJhIHJvdW5kLXRyaXAgYW5kIHBvc3NpYmx5IHNlbmRpbmcgb2YgYWxsIHRoZSBQVVQKKyAgICAgICBkYXRhIHR3aWNlISEhICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBBVVRILCAobG9uZylDVVJMQVVUSF9BTlkpOworCisgICAgLyogc2V0IHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgZm9yIHRoZSBhdXRoZW50aWNhdGlvbiAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VU0VSUFdELCAidXNlcjpwYXNzd29yZCIpOworCisgICAgLyogTm93IHJ1biBvZmYgYW5kIGRvIHdoYXQgeW91J3ZlIGJlZW4gdG9sZCEgKi8KKyAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKworICAgIC8qIGFsd2F5cyBjbGVhbnVwICovCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIH0KKyAgY2xvc2UoaGQpOyAvKiBjbG9zZSB0aGUgbG9jYWwgZmlsZSAqLworCisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2NhY2VydGlubWVtLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2NhY2VydGlubWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxYWZiYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvY2FjZXJ0aW5tZW0uYwpAQCAtMCwwICsxLDE1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFeGFtcGxlIHVzaW5nIGEgImluIGNvcmUiIFBFTSBjZXJ0aWZpY2F0ZSB0byByZXRyaWV2ZSBhIGh0dHBzIHBhZ2UuCisgKiBXcml0dGVuIGJ5IFRoZW8gQm9ybQorICovCisKKy8qIG9uIGEgbmV0QlNEIHN5c3RlbSB3aXRoIE9QRU5TU0wmIExJQkNVUkwgaW5zdGFsbGVkIGZyb20KKyAqIHBrZ3NyYyAodXNpbmcgZGVmYXVsdCBwYXRocykgdGhpcyBwcm9ncmFtIGNhbiBiZSBjb21waWxlZCB1c2luZzoKKyAqIGdjYyAtSS91c3IvcGtnL2luY2x1ZGUgLUwvdXNyL3BrZy9saWIgLWxjdXJsIC1XbCwtUi91c3IvcGtnL2xpYiAtbHNzbAorICogLWxjcnlwdG8gLWx6IC1vIGN1cmxjYWNlcnR0ZXN0IGN1cmxjYWNlcnR0ZXN0LmMKKyAqIG9uIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIHlvdSBtYXkgd2FudCB0byBjaGFuZ2UgcGF0aHMgdG8gaGVhZGVycworICogYW5kIGxpYnJhcmllcworKi8KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3NpemVfdCB3cml0ZWZ1bmN0aW9uKCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnN0cmVhbSkKK3sKKyAgZndyaXRlKHB0cixzaXplLG5tZW1iLHN0cmVhbSk7CisgIHJldHVybihubWVtYipzaXplKTsKK30KKworc3RhdGljIENVUkxjb2RlIHNzbGN0eF9mdW5jdGlvbihDVVJMICogY3VybCwgdm9pZCAqIHNzbGN0eCwgdm9pZCAqIHBhcm0pCit7CisgIFg1MDlfU1RPUkUgKiBzdG9yZTsKKyAgWDUwOSAqIGNlcnQ9TlVMTDsKKyAgQklPICogYmlvOworICBjaGFyICogbXlwZW0gPSAvKiB3d3cuY2FjZXJ0Lm9yZyAqLworICAgICItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cbiJcCisgICAgIk1JSUhQVENDQlNXZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRUUZBREI1TVJBd0RnWURWUVFLRXdkU2IyOTBcbiJcCisgICAgIklFTkJNUjR3SEFZRFZRUUxFeFZvZEhSd09pOHZkM2QzTG1OaFkyVnlkQzV2Y21jeElqQWdCZ05WQkFNVEdVTkJcbiJcCisgICAgIklFTmxjblFnVTJsbmJtbHVaeUJCZFhSb2IzSnBkSGt4SVRBZkJna3Foa2lHOXcwQkNRRVdFbk4xY0hCdmNuUkFcbiJcCisgICAgIlkyRmpaWEowTG05eVp6QWVGdzB3TXpBek16QXhNakk1TkRsYUZ3MHpNekF6TWpreE1qSTVORGxhTUhreEVEQU9cbiJcCisgICAgIkJnTlZCQW9UQjFKdmIzUWdRMEV4SGpBY0JnTlZCQXNURldoMGRIQTZMeTkzZDNjdVkyRmpaWEowTG05eVp6RWlcbiJcCisgICAgIk1DQUdBMVVFQXhNWlEwRWdRMlZ5ZENCVGFXZHVhVzVuSUVGMWRHaHZjbWwwZVRFaE1COEdDU3FHU0liM0RRRUpcbiJcCisgICAgIkFSWVNjM1Z3Y0c5eWRFQmpZV05sY25RdWIzSm5NSUlDSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQWc4QU1JSUNcbiJcCisgICAgIkNnS0NBZ0VBemlMQTRrWjk3RFlvQjFDVzhxQXpRSXhMOFR0bVB6SGxhd0kyMjlaODl2R0lqMDUzTmdWQmxma0pcbiJcCisgICAgIjhCTFBSb1p6WUxkdWZ1akFXR1N1emJDdFJSY01ZL3BuQ3VqVzByOCs1NWpFOEV6NjRBTzdOVjFzSWQ2ZUlObTZcbiJcCisgICAgInpXWXlOM0w2OXdqMXg4MVl5WTduRGw3cVB2NGNvUlFLRld5R2hGdGtaaXA2cVV0VGVmV0lvbnZ1THdwaEs0MnlcbiJcCisgICAgImZrMVdwUlBzNnRxU25xeEVRUjVZWUdVRlp2akFSTDNMbFBkQ2ZndjNaV2lZVVFYdzh3V1JCQjBiRjRMc3lGZTdcbiJcCisgICAgIncydDZpUEd3Y3N3bFd5Q1I3QllDRW84eTZSY1lTTkRIQlM0Q01FSzRKWndGYXorcU9xZnJVMGozNk5LMkI1amNcbiJcCisgICAgIkc4WTBmMy9KSElKNkJWZ3JDRnZ6T0tLckYxMW15WmpYbmhDTG90TGRkSnIzY1F4eVlOL05iNWd6blpZMGRqNGtcbiJcCisgICAgImVwS3dEcFVlYithZ1JUaEhxdGRCN1VxM0V2YlhHNE9LRHk3WUNiWloxNm9FLzlLVGZXZ3UzWXRMcTFpNkw0M3FcbiJcCisgICAgImxhZWd3MVNKcGZ2YmkxRWluYkxEdmhHK0xKR0dpNVo0clNEVGlpOGFQOGJRVVdXSEliRVpBV1YvUlJ5SDlYelFcbiJcCisgICAgIlFVeFBLWmdoL1RNZmRRd0VVZm9aZDl2VUZCenVnY01kOVppM2FRYVJJdDBBVU15Qk1hd1NCM3M0Mm1oYjVpdlVcbiJcCisgICAgImZzbGZyZWpyY2t6ekFlVkxJTCthcGxmS2tRQUJpNkYxSVRlMVl3MW5Qa1pQY0NCbnpzWFdXZHNDNFBEU3k4MjZcbiJcCisgICAgIllyZVFRZWpkSU9RcHZHUXBRc2dpM0hpYS8wUHNtQnNKVVV0YVdzSng4Y1RMYzZubG9Rc0NBd0VBQWFPQ0FjNHdcbiJcCisgICAgImdnSEtNQjBHQTFVZERnUVdCQlFXdFRJYjFNZno0T2FPODczU3NEcnVzamtZMFRDQm93WURWUjBqQklHYk1JR1lcbiJcCisgICAgImdCUVd0VEliMU1mejRPYU84NzNTc0RydXNqa1kwYUY5cEhzd2VURVFNQTRHQTFVRUNoTUhVbTl2ZENCRFFURWVcbiJcCisgICAgIk1Cd0dBMVVFQ3hNVmFIUjBjRG92TDNkM2R5NWpZV05sY25RdWIzSm5NU0l3SUFZRFZRUURFeGxEUVNCRFpYSjBcbiJcCisgICAgIklGTnBaMjVwYm1jZ1FYVjBhRzl5YVhSNU1TRXdId1lKS29aSWh2Y05BUWtCRmhKemRYQndiM0owUUdOaFkyVnlcbiJcCisgICAgImRDNXZjbWVDQVFBd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBeUJnTlZIUjhFS3pBcE1DZWdKYUFqaGlGb2RIUndcbiJcCisgICAgImN6b3ZMM2QzZHk1allXTmxjblF1YjNKbkwzSmxkbTlyWlM1amNtd3dNQVlKWUlaSUFZYjRRZ0VFQkNNV0lXaDBcbiJcCisgICAgImRIQnpPaTh2ZDNkM0xtTmhZMlZ5ZEM1dmNtY3ZjbVYyYjJ0bExtTnliREEwQmdsZ2hrZ0JodmhDQVFnRUp4WWxcbiJcCisgICAgImFIUjBjRG92TDNkM2R5NWpZV05sY25RdWIzSm5MMmx1WkdWNExuQm9jRDlwWkQweE1EQldCZ2xnaGtnQmh2aENcbiJcCisgICAgIkFRMEVTUlpIVkc4Z1oyVjBJSGx2ZFhJZ2IzZHVJR05sY25ScFptbGpZWFJsSUdadmNpQkdVa1ZGSUdobFlXUWdcbiJcCisgICAgImIzWmxjaUIwYnlCb2RIUndPaTh2ZDNkM0xtTmhZMlZ5ZEM1dmNtY3dEUVlKS29aSWh2Y05BUUVFQlFBRGdnSUJcbiJcCisgICAgIkFDakg3cHlDQXJwY2dCTEtOUW9kZ1crSmFwbk04bWdQZjZmaGpWaVZQcjN5QnNPUVdxeTFZUGFaUXdHamlIQ2NcbiJcCisgICAgIm5XS2RwSWV2WjFnTk1EWTc1cTFJMDh0MEFvWnhQdUlyQTJqeE5HSkFSanRUNmlqMHJQdG1sVk9LVFYzOU85bGdcbiJcCisgICAgIjE4cDVhVHV4WlpLbXhvR0NYSnpONjAwQmlxWGZFVldxRmNvZk44Q0NtSEJoMjJwOGxxT09MbFErVHlHcGtPL2NcbiJcCisgICAgImdyL2M2RVd0VFpCekNEeVVaYkFFbVhaLzRyekNhaFdxbHdRM0pOZ2VsRTV0RGxHKzFzU1B5cFp0OTBQZjZEQmxcbiJcCisgICAgIkp6dDd1ME5EWThSRDk3THNhTXpoR1k0aSs1amhlMW8rQVRjN2l3aXdvdk9WVGhyTG04MmFzZHV5Y1BBdFN0dllcbiJcCisgICAgInNPTnZSVWd6RXYvK1BESXFWUGZFOTRyd2lDUENSLzVrZW5IQTBSNm1ZN0FIZnFRdjB3R1AzSjhydHNZSXFRK1RcbiJcCisgICAgIlNDWDhFdjJmUXR6enhENzJWN0RYM1duUkJuYzBDa3ZTeXFEL0hNYU15UmEreE13eU4yaHpYd2o3VWZkSlV6WUZcbiJcCisgICAgIkNwVUNUUEo1R2hEMjJEcDFuUE1kOGFJTmNHZUdHN01XOVMvbHBPdDVodms5QzhKekM2V1pyRy84WjdqbEx3dW1cbiJcCisgICAgIkdDU05lOUZJTlNrWVFLeVRZT0dXaGxDMGVsbllqeUVMbjgrQ2tjWTd2MnZjQjVHNWwxWWpxclpzbE1aSUJqemtcbiJcCisgICAgInprNnE1UFl2Q2R4VGJ5NzhkT3M2WTVuQ3BxeUp2S2V5UktBTmloRGpiUElreS9xYm4zQkhMdDRVaTlTeUlBbVdcbiJcCisgICAgIm9tVHhKQnpjb1RXY0ZiTFV2RlV1ZlFiMW5BNVY5RnJXazlwMnJTVnpUTVZEXG4iXAorICAgICItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG4iOworICAvKiBnZXQgYSBCSU8gKi8KKyAgYmlvPUJJT19uZXdfbWVtX2J1ZihteXBlbSwgLTEpOworICAvKiB1c2UgaXQgdG8gcmVhZCB0aGUgUEVNIGZvcm1hdHRlZCBjZXJ0aWZpY2F0ZSBmcm9tIG1lbW9yeSBpbnRvIGFuIFg1MDkKKyAgICogc3RydWN0dXJlIHRoYXQgU1NMIGNhbiB1c2UKKyAgICovCisgIFBFTV9yZWFkX2Jpb19YNTA5KGJpbywgJmNlcnQsIDAsIE5VTEwpOworICBpZiAoY2VydCA9PSBOVUxMKQorICAgIHByaW50ZigiUEVNX3JlYWRfYmlvX1g1MDkgZmFpbGVkLi4uXG4iKTsKKworICAvKiBnZXQgYSBwb2ludGVyIHRvIHRoZSBYNTA5IGNlcnRpZmljYXRlIHN0b3JlICh3aGljaCBtYXkgYmUgZW1wdHkhKSAqLworICBzdG9yZT1TU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKChTU0xfQ1RYICopc3NsY3R4KTsKKworICAvKiBhZGQgb3VyIGNlcnRpZmljYXRlIHRvIHRoaXMgc3RvcmUgKi8KKyAgaWYgKFg1MDlfU1RPUkVfYWRkX2NlcnQoc3RvcmUsIGNlcnQpPT0wKQorICAgIHByaW50ZigiZXJyb3IgYWRkaW5nIGNlcnRpZmljYXRlXG4iKTsKKworICAvKiBhbGwgc2V0IHRvIGdvICovCisgIHJldHVybiBDVVJMRV9PSyA7Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKiBjaDsKKyAgQ1VSTGNvZGUgcnY7CisKKyAgcnY9Y3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworICBjaD1jdXJsX2Vhc3lfaW5pdCgpOworICBydj1jdXJsX2Vhc3lfc2V0b3B0KGNoLENVUkxPUFRfVkVSQk9TRSwgMEwpOworICBydj1jdXJsX2Vhc3lfc2V0b3B0KGNoLENVUkxPUFRfSEVBREVSLCAwTCk7CisgIHJ2PWN1cmxfZWFzeV9zZXRvcHQoY2gsQ1VSTE9QVF9OT1BST0dSRVNTLCAxTCk7CisgIHJ2PWN1cmxfZWFzeV9zZXRvcHQoY2gsQ1VSTE9QVF9OT1NJR05BTCwgMUwpOworICBydj1jdXJsX2Vhc3lfc2V0b3B0KGNoLENVUkxPUFRfV1JJVEVGVU5DVElPTiwgKndyaXRlZnVuY3Rpb24pOworICBydj1jdXJsX2Vhc3lfc2V0b3B0KGNoLENVUkxPUFRfV1JJVEVEQVRBLCBzdGRvdXQpOworICBydj1jdXJsX2Vhc3lfc2V0b3B0KGNoLENVUkxPUFRfSEVBREVSRlVOQ1RJT04sICp3cml0ZWZ1bmN0aW9uKTsKKyAgcnY9Y3VybF9lYXN5X3NldG9wdChjaCxDVVJMT1BUX1dSSVRFSEVBREVSLCBzdGRlcnIpOworICBydj1jdXJsX2Vhc3lfc2V0b3B0KGNoLENVUkxPUFRfU1NMQ0VSVFRZUEUsIlBFTSIpOworICBydj1jdXJsX2Vhc3lfc2V0b3B0KGNoLENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsMUwpOworICBydj1jdXJsX2Vhc3lfc2V0b3B0KGNoLCBDVVJMT1BUX1VSTCwgImh0dHBzOi8vd3d3LmV4YW1wbGUuY29tLyIpOworCisgIC8qIGZpcnN0IHRyeTogcmV0cmlldmUgcGFnZSB3aXRob3V0IGNhY2VydHMnIGNlcnRpZmljYXRlIC0+IHdpbGwgZmFpbAorICAgKi8KKyAgcnY9Y3VybF9lYXN5X3BlcmZvcm0oY2gpOworICBpZiAocnY9PUNVUkxFX09LKQorICAgIHByaW50ZigiKioqIHRyYW5zZmVyIHN1Y2NlZWRlZCAqKipcbiIpOworICBlbHNlCisgICAgcHJpbnRmKCIqKiogdHJhbnNmZXIgZmFpbGVkICoqKlxuIik7CisKKyAgLyogc2Vjb25kIHRyeTogcmV0cmlldmUgcGFnZSB1c2luZyBjYWNlcnRzJyBjZXJ0aWZpY2F0ZSAtPiB3aWxsIHN1Y2NlZWQKKyAgICogbG9hZCB0aGUgY2VydGlmaWNhdGUgYnkgaW5zdGFsbGluZyBhIGZ1bmN0aW9uIGRvaW5nIHRoZSBuZXNjZXNzYXJ5CisgICAqICJtb2RpZmljYXRpb25zIiB0byB0aGUgU1NMIENPTlRFWFQganVzdCBiZWZvcmUgbGluayBpbml0CisgICAqLworICBydj1jdXJsX2Vhc3lfc2V0b3B0KGNoLENVUkxPUFRfU1NMX0NUWF9GVU5DVElPTiwgKnNzbGN0eF9mdW5jdGlvbik7CisgIHJ2PWN1cmxfZWFzeV9wZXJmb3JtKGNoKTsKKyAgaWYgKHJ2PT1DVVJMRV9PSykKKyAgICBwcmludGYoIioqKiB0cmFuc2ZlciBzdWNjZWVkZWQgKioqXG4iKTsKKyAgZWxzZQorICAgIHByaW50ZigiKioqIHRyYW5zZmVyIGZhaWxlZCAqKipcbiIpOworCisgIGN1cmxfZWFzeV9jbGVhbnVwKGNoKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICByZXR1cm4gcnY7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2NlcnRpbmZvLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2NlcnRpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjZWM2MwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvY2VydGluZm8uYwpAQCAtMCwwICsxLDgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK3N0YXRpYyBzaXplX3Qgd3JmdSh2b2lkICpwdHIsICBzaXplX3QgIHNpemUsICBzaXplX3QgIG5tZW1iLCAgdm9pZCAqc3RyZWFtKQoreworICAodm9pZClzdHJlYW07CisgICh2b2lkKXB0cjsKKyAgcmV0dXJuIHNpemUgKiBubWVtYjsKK30KKworaW50IG1haW4odm9pZCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzOworCisgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfREVGQVVMVCk7CisKKyAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmKGN1cmwpIHsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCAiaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20vIik7CisKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgd3JmdSk7CisKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDBMKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDBMKTsKKworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAwTCk7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NFUlRJTkZPLCAxTCk7CisKKyAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKworICAgIGlmKCFyZXMpIHsKKyAgICAgIHN0cnVjdCBjdXJsX2NlcnRpbmZvICpjaSA9IE5VTEw7CisKKyAgICAgIHJlcyA9IGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX0NFUlRJTkZPLCAmY2kpOworCisgICAgICBpZighcmVzICYmIGNpKSB7CisgICAgICAgIGludCBpOworICAgICAgICBwcmludGYoIiVkIGNlcnRzIVxuIiwgY2ktPm51bV9vZl9jZXJ0cyk7CisKKyAgICAgICAgZm9yKGk9MDsgaTxjaS0+bnVtX29mX2NlcnRzOyBpKyspIHsKKyAgICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3Q7CisKKyAgICAgICAgICBmb3Ioc2xpc3QgPSBjaS0+Y2VydGluZm9baV07IHNsaXN0OyBzbGlzdCA9IHNsaXN0LT5uZXh0KQorICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgc2xpc3QtPmRhdGEpOworCisgICAgICAgIH0KKyAgICAgIH0KKworICAgIH0KKworCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIH0KKworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2Noa3NwZWVkLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2Noa3NwZWVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjMzk3YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvY2hrc3BlZWQuYwpAQCAtMCwwICsxLDE3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFeGFtcGxlIHNvdXJjZSBjb2RlIHRvIHNob3cgaG93IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0bworICogZG93bmxvYWQgZGF0YSBpbnRvIGEgY2h1bmsgb2YgbWVtb3J5IGluc3RlYWQgb2Ygc3RvcmluZyBpdCBpbiBhIGZpbGUuCisgKiBBZnRlciBzdWNjZXNzZnVsIGRvd25sb2FkIHdlIHVzZSBjdXJsX2Vhc3lfZ2V0aW5mbygpIGNhbGxzIHRvIGdldCB0aGUKKyAqIGFtb3VudCBvZiBkb3dubG9hZGVkIGJ5dGVzLCB0aGUgdGltZSB1c2VkIGZvciB0aGUgd2hvbGUgZG93bmxvYWQsIGFuZAorICogdGhlIGF2ZXJhZ2UgZG93bmxvYWQgc3BlZWQuCisgKiBPbiBMaW51eCB5b3UgY2FuIGNyZWF0ZSB0aGUgZG93bmxvYWQgdGVzdCBmaWxlcyB3aXRoOgorICogZGQgaWY9L2Rldi91cmFuZG9tIG9mPWZpbGVfMU0uYmluIGJzPTFNIGNvdW50PTEKKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNkZWZpbmUgVVJMX0JBU0UgImh0dHA6Ly9zcGVlZHRlc3QueW91ci5kb21haW4vIgorI2RlZmluZSBVUkxfMU0gICBVUkxfQkFTRSAiZmlsZV8xTS5iaW4iCisjZGVmaW5lIFVSTF8yTSAgIFVSTF9CQVNFICJmaWxlXzJNLmJpbiIKKyNkZWZpbmUgVVJMXzVNICAgVVJMX0JBU0UgImZpbGVfNU0uYmluIgorI2RlZmluZSBVUkxfMTBNICBVUkxfQkFTRSAiZmlsZV8xME0uYmluIgorI2RlZmluZSBVUkxfMjBNICBVUkxfQkFTRSAiZmlsZV8yME0uYmluIgorI2RlZmluZSBVUkxfNTBNICBVUkxfQkFTRSAiZmlsZV81ME0uYmluIgorI2RlZmluZSBVUkxfMTAwTSBVUkxfQkFTRSAiZmlsZV8xMDBNLmJpbiIKKworI2RlZmluZSBDSEtTUEVFRF9WRVJTSU9OICIxLjAiCisKK3N0YXRpYyBzaXplX3QgV3JpdGVDYWxsYmFjayh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKmRhdGEpCit7CisgIC8qIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGUgZG93bmxvYWRlZCBieXRlcyBpdHNlbGYsCisgICAgIHNvIHdlIG9ubHkgcmV0dXJuIHRoZSBzaXplIHdlIHdvdWxkIGhhdmUgc2F2ZWQgLi4uICovCisgICh2b2lkKXB0cjsgIC8qIHVudXNlZCAqLworICAodm9pZClkYXRhOyAvKiB1bnVzZWQgKi8KKyAgcmV0dXJuIChzaXplX3QpKHNpemUgKiBubWVtYik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIENVUkwgKmN1cmxfaGFuZGxlOworICBDVVJMY29kZSByZXM7CisgIGludCBwcnRzZXAgPSAwLCBwcnR0aW1lID0gMDsKKyAgY29uc3QgY2hhciAqdXJsID0gVVJMXzFNOworICBjaGFyICphcHBuYW1lID0gYXJndlswXTsKKworICBpZiAoYXJnYyA+IDEpIHsKKyAgICAvKiBwYXJzZSBpbnB1dCBwYXJhbWV0ZXJzICovCisgICAgZm9yIChhcmdjLS0sIGFyZ3YrKzsgKmFyZ3Y7IGFyZ2MtLSwgYXJndisrKSB7CisgICAgICBpZiAoc3RybmNhc2VjbXAoKmFyZ3YsICItIiwgMSkgPT0gMCkgeworICAgICAgICBpZiAoc3RybmNhc2VjbXAoKmFyZ3YsICItSCIsIDIpID09IDApIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICJcclVzYWdlOiAlcyBbLW09MXwyfDV8MTB8MjB8NTB8MTAwXSBbLXRdIFsteF0gW3VybF1cbiIsCisgICAgICAgICAgICAgICAgICBhcHBuYW1lKTsKKyAgICAgICAgICBleGl0KDEpOworICAgICAgICB9IGVsc2UgaWYgKHN0cm5jYXNlY21wKCphcmd2LCAiLVYiLCAyKSA9PSAwKSB7CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcciVzICVzIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgICBhcHBuYW1lLCBDSEtTUEVFRF9WRVJTSU9OLCBjdXJsX3ZlcnNpb24oKSk7CisgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJuY2FzZWNtcCgqYXJndiwgIi1YIiwgMikgPT0gMCkgeworICAgICAgICAgIHBydHNlcCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAoc3RybmNhc2VjbXAoKmFyZ3YsICItVCIsIDIpID09IDApIHsKKyAgICAgICAgICBwcnR0aW1lID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJuY2FzZWNtcCgqYXJndiwgIi1NPSIsIDMpID09IDApIHsKKyAgICAgICAgICBsb25nIG0gPSBzdHJ0b2woKCphcmd2KSszLCBOVUxMLCAxMCk7CisgICAgICAgICAgc3dpdGNoKG0pIHsKKyAgICAgICAgICAgIGNhc2UgICAxOiB1cmwgPSBVUkxfMU07CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICAgMjogdXJsID0gVVJMXzJNOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAgIDU6IHVybCA9IFVSTF81TTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIDEwOiB1cmwgPSBVUkxfMTBNOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAgMjA6IHVybCA9IFVSTF8yME07CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICA1MDogdXJsID0gVVJMXzUwTTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTAwOiB1cmwgPSBVUkxfMTAwTTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6ICBmcHJpbnRmKHN0ZGVyciwgIlxyJXM6IGludmFsaWQgcGFyYW1ldGVyICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbmFtZSwgKmFyZ3YgKyAzKTsKKyAgICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxyJXM6IGludmFsaWQgb3IgdW5rbm93biBvcHRpb24gJXNcbiIsCisgICAgICAgICAgICAgICAgICBhcHBuYW1lLCAqYXJndik7CisgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgdXJsID0gKmFyZ3Y7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogcHJpbnQgc2VwYXJhdG9yIGxpbmUgKi8KKyAgaWYgKHBydHNlcCkgeworICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgIH0KKyAgLyogcHJpbnQgbG9jYWx0aW1lICovCisgIGlmIChwcnR0aW1lKSB7CisgICAgdGltZV90IHQgPSB0aW1lKE5VTEwpOworICAgIHByaW50ZigiTG9jYWx0aW1lOiAlcyIsIGN0aW1lKCZ0KSk7CisgIH0KKworICAvKiBpbml0IGxpYmN1cmwgKi8KKyAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIC8qIGluaXQgdGhlIGN1cmwgc2Vzc2lvbiAqLworICBjdXJsX2hhbmRsZSA9IGN1cmxfZWFzeV9pbml0KCk7CisKKyAgLyogc3BlY2lmeSBVUkwgdG8gZ2V0ICovCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybF9oYW5kbGUsIENVUkxPUFRfVVJMLCB1cmwpOworCisgIC8qIHNlbmQgYWxsIGRhdGEgdG8gdGhpcyBmdW5jdGlvbiAgKi8KKyAgY3VybF9lYXN5X3NldG9wdChjdXJsX2hhbmRsZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBXcml0ZUNhbGxiYWNrKTsKKworICAvKiBzb21lIHNlcnZlcnMgZG9uJ3QgbGlrZSByZXF1ZXN0cyB0aGF0IGFyZSBtYWRlIHdpdGhvdXQgYSB1c2VyLWFnZW50CisgICAgIGZpZWxkLCBzbyB3ZSBwcm92aWRlIG9uZSAqLworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxfaGFuZGxlLCBDVVJMT1BUX1VTRVJBR0VOVCwKKyAgICAgICAgICAgICAgICAgICAibGliY3VybC1zcGVlZGNoZWNrZXIvIiBDSEtTUEVFRF9WRVJTSU9OKTsKKworICAvKiBnZXQgaXQhICovCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmxfaGFuZGxlKTsKKworICBpZihDVVJMRV9PSyA9PSByZXMpIHsKKyAgICBkb3VibGUgdmFsOworCisgICAgLyogY2hlY2sgZm9yIGJ5dGVzIGRvd25sb2FkZWQgKi8KKyAgICByZXMgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsX2hhbmRsZSwgQ1VSTElORk9fU0laRV9ET1dOTE9BRCwgJnZhbCk7CisgICAgaWYoKENVUkxFX09LID09IHJlcykgJiYgKHZhbD4wKSkKKyAgICAgIHByaW50ZigiRGF0YSBkb3dubG9hZGVkOiAlMC4wZiBieXRlcy5cbiIsIHZhbCk7CisKKyAgICAvKiBjaGVjayBmb3IgdG90YWwgZG93bmxvYWQgdGltZSAqLworICAgIHJlcyA9IGN1cmxfZWFzeV9nZXRpbmZvKGN1cmxfaGFuZGxlLCBDVVJMSU5GT19UT1RBTF9USU1FLCAmdmFsKTsKKyAgICBpZigoQ1VSTEVfT0sgPT0gcmVzKSAmJiAodmFsPjApKQorICAgICAgcHJpbnRmKCJUb3RhbCBkb3dubG9hZCB0aW1lOiAlMC4zZiBzZWMuXG4iLCB2YWwpOworCisgICAgLyogY2hlY2sgZm9yIGF2ZXJhZ2UgZG93bmxvYWQgc3BlZWQgKi8KKyAgICByZXMgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsX2hhbmRsZSwgQ1VSTElORk9fU1BFRURfRE9XTkxPQUQsICZ2YWwpOworICAgIGlmKChDVVJMRV9PSyA9PSByZXMpICYmICh2YWw+MCkpCisgICAgICBwcmludGYoIkF2ZXJhZ2UgZG93bmxvYWQgc3BlZWQ6ICUwLjNmIGtieXRlL3NlYy5cbiIsIHZhbCAvIDEwMjQpOworCisgIH0gZWxzZSB7CisgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciB3aGlsZSBmZXRjaGluZyAnJXMnIDogJXNcbiIsCisgICAgICAgICAgICB1cmwsIGN1cmxfZWFzeV9zdHJlcnJvcihyZXMpKTsKKyAgfQorCisgIC8qIGNsZWFudXAgY3VybCBzdHVmZiAqLworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsX2hhbmRsZSk7CisKKyAgLyogd2UncmUgZG9uZSB3aXRoIGxpYmN1cmwsIHNvIGNsZWFuIGl0IHVwICovCisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvY29va2llX2ludGVyZmFjZS5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9jb29raWVfaW50ZXJmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMzNjg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvY29va2llX2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsMTI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRoaXMgZXhhbXBsZSBzaG93cyB1c2FnZSBvZiBzaW1wbGUgY29va2llIGludGVyZmFjZS4gKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworc3RhdGljIHZvaWQKK3ByaW50X2Nvb2tpZXMoQ1VSTCAqY3VybCkKK3sKKyAgQ1VSTGNvZGUgcmVzOworICBzdHJ1Y3QgY3VybF9zbGlzdCAqY29va2llczsKKyAgc3RydWN0IGN1cmxfc2xpc3QgKm5jOworICBpbnQgaTsKKworICBwcmludGYoIkNvb2tpZXMsIGN1cmwga25vd3M6XG4iKTsKKyAgcmVzID0gY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fQ09PS0lFTElTVCwgJmNvb2tpZXMpOworICBpZiAocmVzICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdXJsIGN1cmxfZWFzeV9nZXRpbmZvIGZhaWxlZDogJXNcbiIsIGN1cmxfZWFzeV9zdHJlcnJvcihyZXMpKTsKKyAgICBleGl0KDEpOworICB9CisgIG5jID0gY29va2llcywgaSA9IDE7CisgIHdoaWxlIChuYykgeworICAgIHByaW50ZigiWyVkXTogJXNcbiIsIGksIG5jLT5kYXRhKTsKKyAgICBuYyA9IG5jLT5uZXh0OworICAgIGkrKzsKKyAgfQorICBpZiAoaSA9PSAxKSB7CisgICAgcHJpbnRmKCIobm9uZSlcbiIpOworICB9CisgIGN1cmxfc2xpc3RfZnJlZV9hbGwoY29va2llcyk7Cit9CisKK2ludAorbWFpbih2b2lkKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM7CisKKyAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYgKGN1cmwpIHsKKyAgICBjaGFyIG5saW5lWzI1Nl07CisKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAiIik7IC8qIGp1c3QgdG8gc3RhcnQgdGhlIGNvb2tpZSBlbmdpbmUgKi8KKyAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKyAgICBpZiAocmVzICE9IENVUkxFX09LKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkN1cmwgcGVyZm9ybSBmYWlsZWQ6ICVzXG4iLCBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBwcmludF9jb29raWVzKGN1cmwpOworCisgICAgcHJpbnRmKCJFcmFzaW5nIGN1cmwncyBrbm93bGVkZ2Ugb2YgY29va2llcyFcbiIpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09LSUVMSVNULCAiQUxMIik7CisKKyAgICBwcmludF9jb29raWVzKGN1cmwpOworCisgICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICAgICAiU2V0dGluZyBhIGNvb2tpZSBcIlBSRUZcIiB2aWEgY29va2llIGludGVyZmFjZTpcbiIpOworI2lmZGVmIFdJTjMyCisjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgorI2VuZGlmCisgICAgLyogTmV0c2NhcGUgZm9ybWF0IGNvb2tpZSAqLworICAgIHNucHJpbnRmKG5saW5lLCBzaXplb2YobmxpbmUpLCAiJXNcdCVzXHQlc1x0JXNcdCVsdVx0JXNcdCVzIiwKKyAgICAgICIuZ29vZ2xlLmNvbSIsICJUUlVFIiwgIi8iLCAiRkFMU0UiLCB0aW1lKE5VTEwpICsgMzEzMzcsICJQUkVGIiwgImhlbGxvIGdvb2dsZSwgaSBsaWtlIHlvdSB2ZXJ5IG11Y2ghIik7CisgICAgcmVzID0gY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRUxJU1QsIG5saW5lKTsKKyAgICBpZiAocmVzICE9IENVUkxFX09LKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkN1cmwgY3VybF9lYXN5X3NldG9wdCBmYWlsZWQ6ICVzXG4iLCBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBIVFRQLWhlYWRlciBzdHlsZSBjb29raWUgKi8KKyAgICBzbnByaW50ZihubGluZSwgc2l6ZW9mKG5saW5lKSwKKyAgICAgICJTZXQtQ29va2llOiBPTERfUFJFRj0zZDE0MTQxNGJmNDIwOTMyMTsgIgorICAgICAgImV4cGlyZXM9U3VuLCAxNy1KYW4tMjAzOCAxOToxNDowNyBHTVQ7IHBhdGg9LzsgZG9tYWluPS5nb29nbGUuY29tIik7CisgICAgcmVzID0gY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRUxJU1QsIG5saW5lKTsKKyAgICBpZiAocmVzICE9IENVUkxFX09LKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkN1cmwgY3VybF9lYXN5X3NldG9wdCBmYWlsZWQ6ICVzXG4iLCBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBwcmludF9jb29raWVzKGN1cmwpOworCisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgICAgaWYgKHJlcyAhPSBDVVJMRV9PSykgeworICAgICAgZnByaW50ZihzdGRlcnIsICJDdXJsIHBlcmZvcm0gZmFpbGVkOiAlc1xuIiwgY3VybF9lYXN5X3N0cmVycm9yKHJlcykpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ3VybCBpbml0IGZhaWxlZCFcbiIpOworICAgIHJldHVybiAxOworICB9CisKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvY3VybGd0ay5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9jdXJsZ3RrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNiOTkxNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvY3VybGd0ay5jCkBAIC0wLDAgKzEsMTA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqLworLyogQ29weXJpZ2h0IChjKSAyMDAwIERhdmlkIE9kaW4gKGFrYSBEaW5kaW5YKSBmb3IgTWFuZHJha2VTb2Z0ICovCisvKiBhbiBhdHRlbXB0IHRvIHVzZSB0aGUgY3VybCBsaWJyYXJ5IGluIGNvbmNlcnQgd2l0aCBhIGd0ay10aHJlYWRlZCBhcHBsaWNhdGlvbiAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworR3RrV2lkZ2V0ICpCYXI7CisKK3NpemVfdCBteV93cml0ZV9mdW5jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgRklMRSAqc3RyZWFtKQoreworICByZXR1cm4gZndyaXRlKHB0ciwgc2l6ZSwgbm1lbWIsIHN0cmVhbSk7Cit9CisKK3NpemVfdCBteV9yZWFkX2Z1bmModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCBGSUxFICpzdHJlYW0pCit7CisgIHJldHVybiBmcmVhZChwdHIsIHNpemUsIG5tZW1iLCBzdHJlYW0pOworfQorCitpbnQgbXlfcHJvZ3Jlc3NfZnVuYyhHdGtXaWRnZXQgKmJhciwKKyAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0LCAvKiBkbHRvdGFsICovCisgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZCwgLyogZGxub3cgKi8KKyAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB1bHRvdGFsLAorICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHVsbm93KQoreworLyogIHByaW50ZigiJWQgLyAlZCAoJWcgJSUpXG4iLCBkLCB0LCBkKjEwMC4wL3QpOyovCisgIGdka190aHJlYWRzX2VudGVyKCk7CisgIGd0a19wcm9ncmVzc19zZXRfdmFsdWUoR1RLX1BST0dSRVNTKGJhciksIGQqMTAwLjAvdCk7CisgIGdka190aHJlYWRzX2xlYXZlKCk7CisgIHJldHVybiAwOworfQorCit2b2lkICpteV90aHJlYWQodm9pZCAqcHRyKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM7CisgIEZJTEUgKm91dGZpbGU7CisgIGdjaGFyICp1cmwgPSBwdHI7CisKKyAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmKGN1cmwpCisgIHsKKyAgICBvdXRmaWxlID0gZm9wZW4oInRlc3QuY3VybCIsICJ3Iik7CisKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURURBVEEsIG91dGZpbGUpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBteV93cml0ZV9mdW5jKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCBteV9yZWFkX2Z1bmMpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9OT1BST0dSRVNTLCAwTCk7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04sIG15X3Byb2dyZXNzX2Z1bmMpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QUk9HUkVTU0RBVEEsIEJhcik7CisKKyAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKworICAgIGZjbG9zZShvdXRmaWxlKTsKKyAgICAvKiBhbHdheXMgY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgR3RrV2lkZ2V0ICpXaW5kb3csICpGcmFtZSwgKkZyYW1lMjsKKyAgR3RrQWRqdXN0bWVudCAqYWRqOworCisgIC8qIE11c3QgaW5pdGlhbGl6ZSBsaWJjdXJsIGJlZm9yZSBhbnkgdGhyZWFkcyBhcmUgc3RhcnRlZCAqLworICBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisKKyAgLyogSW5pdCB0aHJlYWQgKi8KKyAgZ190aHJlYWRfaW5pdChOVUxMKTsKKworICBndGtfaW5pdCgmYXJnYywgJmFyZ3YpOworICBXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgRnJhbWUgPSBndGtfZnJhbWVfbmV3KE5VTEwpOworICBndGtfZnJhbWVfc2V0X3NoYWRvd190eXBlKEdUS19GUkFNRShGcmFtZSksIEdUS19TSEFET1dfT1VUKTsKKyAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihXaW5kb3cpLCBGcmFtZSk7CisgIEZyYW1lMiA9IGd0a19mcmFtZV9uZXcoTlVMTCk7CisgIGd0a19mcmFtZV9zZXRfc2hhZG93X3R5cGUoR1RLX0ZSQU1FKEZyYW1lMiksIEdUS19TSEFET1dfSU4pOworICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKEZyYW1lKSwgRnJhbWUyKTsKKyAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoRnJhbWUyKSwgNSk7CisgIGFkaiA9IChHdGtBZGp1c3RtZW50KilndGtfYWRqdXN0bWVudF9uZXcoMCwgMCwgMTAwLCAwLCAwLCAwKTsKKyAgQmFyID0gZ3RrX3Byb2dyZXNzX2Jhcl9uZXdfd2l0aF9hZGp1c3RtZW50KGFkaik7CisgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoRnJhbWUyKSwgQmFyKTsKKyAgZ3RrX3dpZGdldF9zaG93X2FsbChXaW5kb3cpOworCisgIGlmICghZ190aHJlYWRfY3JlYXRlKCZteV90aHJlYWQsIGFyZ3ZbMV0sIEZBTFNFLCBOVUxMKSAhPSAwKQorICAgIGdfd2FybmluZygiY2FuJ3QgY3JlYXRlIHRoZSB0aHJlYWQiKTsKKworCisgIGdka190aHJlYWRzX2VudGVyKCk7CisgIGd0a19tYWluKCk7CisgIGdka190aHJlYWRzX2xlYXZlKCk7CisgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2N1cmx4LmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2N1cmx4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkNWY0MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvY3VybHguYwpAQCAtMCwwICsxLDUxMyBAQAorLyoKKyAgY3VybHguYyAgQXV0aG9yczogUGV0ZXIgU3lsdmVzdGVyLCBKZWFuLVBhdWwgTWVybGluCisKKyAgVGhpcyBpcyBhIGxpdHRsZSBwcm9ncmFtIHRvIGRlbW9uc3RyYXRlIHRoZSB1c2FnZSBvZgorCisgIC0gYW4gc3NsIGluaXRpYWxpc2F0aW9uIGNhbGxiYWNrIHNldHRpbmcgYSB1c2VyIGtleSBhbmQgdHJ1c3RiYXNlcworICBjb21pbmcgZnJvbSBhIHBrY3MxMiBmaWxlCisgIC0gdXNpbmcgYW4gc3NsIGFwcGxpY2F0aW9uIGNhbGxiYWNrIHRvIGZpbmQgYSBVUkkgaW4gdGhlCisgIGNlcnRpZmljYXRlIHByZXNlbnRlZCBkdXJpbmcgc3NsIHNlc3Npb24gZXN0YWJsaXNobWVudC4KKworKi8KKworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuRXZpZGVuY2UgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIGFuZCB0aGUgb3JpZ2luYWwgT3BlblNTTCBhbmQgU1NMZWF5IExpY2VuY2VzIGJlbG93LgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGFuZCB0aGUgb3JpZ2luYWwgT3BlblNTTCBhbmQgU1NMZWF5IExpY2VuY2VzIGJlbG93IGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudHM6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlbmV2aWRlbmNlIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5FdmlkZW5jZSBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuZXZpZGVuY2Uub3JnLykiCisgKiAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICogICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAgICAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiAgICBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4iCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuRXZpZGVuY2UgVG9vbGtpdCIgYW5kICJPcGVuRXZpZGVuY2UgUHJvamVjdCIgbXVzdCBub3QgYmUKKyAqICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5ldmlkZW5jZS1jb3JlQG9wZW5ldmlkZW5jZS5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5FdmlkZW5jZSIKKyAqICAgIG5vciBtYXkgIk9wZW5FdmlkZW5jZSIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlbkV2aWRlbmNlIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnRzOgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5FdmlkZW5jZSBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuRXZpZGVuY2UgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuZXZpZGVuY2Uub3JnLykKKyAqICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKiAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqICAgIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqICAgIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLiIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuRXZpZGVuY2UgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5FdmlkZW5jZSBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKQorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDlfdmZ5Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2xoYXNoLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvcGtjczEyLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqY3VybHhfdXNhZ2VbXT17CisgICJ1c2FnZTogY3VybHggYXJnc1xuIiwKKyAgIiAtcDEyIGFyZyAgICAgICAgIC0gdGlhICBmaWxlICIsCisgICIgLWVudnBhc3MgYXJnICAgICAtIGVudmlyb25lbWVudCB2YXJpYWJsZSB3aGljaCBjb250ZW50IHRoZSB0aWEgcHJpdmF0ZSBrZXkgcGFzc3dvcmQiLAorICAiIC1vdXQgYXJnICAgICAgICAgLSBvdXRwdXQgZmlsZSAocmVzcG9uc2UpLSBkZWZhdWx0IHN0ZG91dCIsCisgICIgLWluIGFyZyAgICAgICAgICAtIGlucHV0IGZpbGUgKHJlcXVlc3QpLSBkZWZhdWx0IHN0ZGluIiwKKyAgIiAtY29ubmVjdCBhcmcgICAgIC0gVVJMIG9mIHRoZSBzZXJ2ZXIgZm9yIHRoZSBjb25uZWN0aW9uIGV4OiB3d3cub3BlbmV2aWRlbmNlLm9yZyIsCisgICIgLW1pbWV0eXBlIGFyZyAgICAtIE1JTUUgdHlwZSBmb3IgZGF0YSBpbiBleCA6IGFwcGxpY2F0aW9uL3RpbWVzdGFtcC1xdWVyeSBvciBhcHBsaWNhdGlvbi9kdmNzIC1kZWZhdWx0IGFwcGxpY2F0aW9uL3RpbWVzdGFtcC1xdWVyeSIsCisgICIgLWFjY2VwdG1pbWUgYXJnICAtIE1JTUUgdHlwZSBhY2NlcHRhYmxlIGZvciB0aGUgcmVzcG9uc2UgZXggOiBhcHBsaWNhdGlvbi90aW1lc3RhbXAtcmVzcG9uc2Ugb3IgYXBwbGljYXRpb24vZHZjcyAtZGVmYXVsdCBub25lIiwKKyAgIiAtYWNjZXNzdHlwZSBhcmcgIC0gYW4gT2JqZWN0IGlkZW50aWZpZXIgaW4gYW4gQUlBL1NJQSBtZXRob2QsIGUuZy4gQURfRFZDUyBvciBhZF90aW1lc3RhbXBpbmciLAorICBOVUxMCit9OworCisvKgorCisuL2N1cmx4IC1wMTIgcHN5LnAxMiAtZW52cGFzcyBYWCAtaW4gcmVxdWVzdCAtdmVyYm9zZSAtYWNjZXNzdHlwZSBBRF9EVkNTCistbWltZXR5cGUgYXBwbGljYXRpb24vZHZjcyAtYWNjZXB0bWltZSBhcHBsaWNhdGlvbi9kdmNzIC1vdXQgcmVzcG9uc2UKKworKi8KKworLyoKKyAqIFdlIHVzZSB0aGlzIFpFUk9fTlVMTCB0byBhdm9pZCBwaWNreSBjb21waWxlciB3YXJuaW5ncywKKyAqIHdoZW4gYXNzaWduaW5nIGEgTlVMTCBwb2ludGVyIHRvIGEgZnVuY3Rpb24gcG9pbnRlciB2YXIuCisgKi8KKworI2RlZmluZSBaRVJPX05VTEwgMAorCisvKiBUaGlzIGlzIGEgY29udGV4dCB0aGF0IHdlIHBhc3MgdG8gYWxsIGNhbGxiYWNrcyAqLworCit0eXBlZGVmIHN0cnVjdCBzc2xjdHhwYXJtX3N0IHsKKyAgdW5zaWduZWQgY2hhciAqIHAxMmZpbGUgOworICBjb25zdCBjaGFyICogcHN0IDsKKyAgUEtDUzEyICogcDEyIDsKKyAgRVZQX1BLRVkgKiBwa2V5IDsKKyAgWDUwOSAqIHVzZXJjZXJ0IDsKKyAgU1RBQ0tfT0YoWDUwOSkgKiBjYSA7CisgIENVUkwgKiBjdXJsOworICBCSU8gKiBlcnJvcmJpbzsKKyAgaW50IGFjY2Vzc3R5cGUgOworICBpbnQgdmVyYm9zZTsKKworfSBzc2xjdHhwYXJtOworCisvKiBzb21lIGhlbHBlciBmdW5jdGlvbi4gKi8KKworc3RhdGljIGNoYXIgKmkyc19BU04xX0lBNVNUUklORyggQVNOMV9JQTVTVFJJTkcgKmlhNSkKK3sKKyAgY2hhciAqdG1wOworICBpZighaWE1IHx8ICFpYTUtPmxlbmd0aCkKKyAgICByZXR1cm4gTlVMTDsKKyAgdG1wID0gT1BFTlNTTF9tYWxsb2MoaWE1LT5sZW5ndGggKyAxKTsKKyAgbWVtY3B5KHRtcCwgaWE1LT5kYXRhLCBpYTUtPmxlbmd0aCk7CisgIHRtcFtpYTUtPmxlbmd0aF0gPSAwOworICByZXR1cm4gdG1wOworfQorCisvKiBBIGNvbnZlbmlhbmNlIHJvdXRpbmUgdG8gZ2V0IGFuIGFjY2VzcyBVUkkuICovCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpteV9nZXRfZXh0KFg1MDkgKiBjZXJ0LCBjb25zdCBpbnQgdHlwZSwgaW50IGV4dGVuc2lvbnR5cGUpIHsKKworICBpbnQgaTsKKyAgU1RBQ0tfT0YoQUNDRVNTX0RFU0NSSVBUSU9OKSAqIGFjY2Vzc2luZm8gOworICBhY2Nlc3NpbmZvID0gIFg1MDlfZ2V0X2V4dF9kMmkoY2VydCwgZXh0ZW5zaW9udHlwZSwgTlVMTCwgTlVMTCkgOworCisgIGlmICghc2tfQUNDRVNTX0RFU0NSSVBUSU9OX251bShhY2Nlc3NpbmZvKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgZm9yIChpID0gMDsgaSA8IHNrX0FDQ0VTU19ERVNDUklQVElPTl9udW0oYWNjZXNzaW5mbyk7IGkrKykgeworICAgIEFDQ0VTU19ERVNDUklQVElPTiAqIGFkID0gc2tfQUNDRVNTX0RFU0NSSVBUSU9OX3ZhbHVlKGFjY2Vzc2luZm8sIGkpOworICAgIGlmIChPQkpfb2JqMm5pZChhZC0+bWV0aG9kKSA9PSB0eXBlKSB7CisgICAgICBpZiAoYWQtPmxvY2F0aW9uLT50eXBlID09IEdFTl9VUkkpIHsKKyAgICAgICAgcmV0dXJuIGkyc19BU04xX0lBNVNUUklORyhhZC0+bG9jYXRpb24tPmQuaWE1KTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworLyogVGhpcyBpcyBhbiBhcHBsaWNhdGlvbiB2ZXJpZmljYXRpb24gY2FsbCBiYWNrLCBpdCBkb2VzIG5vdAorICAgcGVyZm9ybSBhbnkgYWRkaXRpb24gdmVyaWZpY2F0aW9uIGJ1dCB0cmllcyB0byBmaW5kIGEgVVJMCisgICBpbiB0aGUgcHJlc2VudGVkIGNlcnRpZmljYXQuIElmIGZvdW5kLCB0aGlzIHdpbGwgYmVjb21lCisgICB0aGUgVVJMIHRvIGJlIHVzZWQgaW4gdGhlIFBPU1QuCisqLworCitzdGF0aWMgaW50IHNzbF9hcHBfdmVyaWZ5X2NhbGxiYWNrKFg1MDlfU1RPUkVfQ1RYICpjdHgsIHZvaWQgKmFyZykKK3sKKyAgc3NsY3R4cGFybSAqIHAgPSAoc3NsY3R4cGFybSAqKSBhcmc7CisgIGludCBvazsKKworICBpZiAocC0+dmVyYm9zZSA+IDIpCisgICAgQklPX3ByaW50ZihwLT5lcnJvcmJpbywiZW50ZXJpbmcgc3NsX2FwcF92ZXJpZnlfY2FsbGJhY2tcbiIpOworCisgIGlmICgob2s9IFg1MDlfdmVyaWZ5X2NlcnQoY3R4KSkgJiYgY3R4LT5jZXJ0KSB7CisgICAgdW5zaWduZWQgY2hhciAqIGFjY2Vzc2luZm8gOworICAgIGlmIChwLT52ZXJib3NlID4gMSkKKyAgICAgIFg1MDlfcHJpbnRfZXgocC0+ZXJyb3JiaW8sY3R4LT5jZXJ0LDAsMCk7CisKKyAgICBpZiAoYWNjZXNzaW5mbyA9IG15X2dldF9leHQoY3R4LT5jZXJ0LHAtPmFjY2Vzc3R5cGUgLE5JRF9zaW5mb19hY2Nlc3MpKSB7CisgICAgICBpZiAocC0+dmVyYm9zZSkKKyAgICAgICAgQklPX3ByaW50ZihwLT5lcnJvcmJpbywiU2V0dGluZyBVUkwgZnJvbSBTSUEgdG86ICVzXG4iLCBhY2Nlc3NpbmZvKTsKKworICAgICAgY3VybF9lYXN5X3NldG9wdChwLT5jdXJsLCBDVVJMT1BUX1VSTCxhY2Nlc3NpbmZvKTsKKyAgICB9CisgICAgZWxzZSBpZiAoYWNjZXNzaW5mbyA9IG15X2dldF9leHQoY3R4LT5jZXJ0LHAtPmFjY2Vzc3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTklEX2luZm9fYWNjZXNzKSkgeworICAgICAgaWYgKHAtPnZlcmJvc2UpCisgICAgICAgIEJJT19wcmludGYocC0+ZXJyb3JiaW8sIlNldHRpbmcgVVJMIGZyb20gQUlBIHRvOiAlc1xuIiwgYWNjZXNzaW5mbyk7CisKKyAgICAgIGN1cmxfZWFzeV9zZXRvcHQocC0+Y3VybCwgQ1VSTE9QVF9VUkwsYWNjZXNzaW5mbyk7CisgICAgfQorICB9CisgIGlmIChwLT52ZXJib3NlID4gMikKKyAgICBCSU9fcHJpbnRmKHAtPmVycm9yYmlvLCJsZWF2aW5nIHNzbF9hcHBfdmVyaWZ5X2NhbGxiYWNrIHdpdGggJWRcbiIsIG9rKTsKKyAgcmV0dXJuKG9rKTsKK30KKworCisvKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYW4gY3VybCBTU0wgaW5pdGlhbGlzYXRpb24gY2FsbCBiYWNrLiBUaGUgY2FsbGJhY2sgc2V0czoKKyAgIC0gYSBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUKKyAgIC0gYSB0cnVzdGVkIGNhIGNlcnRpZmljYXRlCisgICAtIGEgcHJlZmVycmVkIGNpcGhlcmxpc3QKKyAgIC0gYW4gYXBwbGljYXRpb24gdmVyaWZpY2F0aW9uIGNhbGxiYWNrICh0aGUgZnVuY3Rpb24gYWJvdmUpCisqLworCitzdGF0aWMgQ1VSTGNvZGUgc3NsY3R4ZnVuKENVUkwgKiBjdXJsLCB2b2lkICogc3NsY3R4LCB2b2lkICogcGFybSkgeworCisgIHNzbGN0eHBhcm0gKiBwID0gKHNzbGN0eHBhcm0gKikgcGFybTsKKyAgU1NMX0NUWCAqIGN0eCA9IChTU0xfQ1RYICopIHNzbGN0eCA7CisKKyAgaWYgKCFTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZShjdHgscC0+dXNlcmNlcnQpKSB7CisgICAgQklPX3ByaW50ZihwLT5lcnJvcmJpbywgIlNTTF9DVFhfdXNlX2NlcnRpZmljYXRlIHByb2JsZW1cbiIpOyBnb3RvIGVycjsKKyAgfQorICBpZiAoIVNTTF9DVFhfdXNlX1ByaXZhdGVLZXkoY3R4LHAtPnBrZXkpKSB7CisgICAgQklPX3ByaW50ZihwLT5lcnJvcmJpbywgIlNTTF9DVFhfdXNlX1ByaXZhdGVLZXlcbiIpOyBnb3RvIGVycjsKKyAgfQorCisgIGlmICghU1NMX0NUWF9jaGVja19wcml2YXRlX2tleShjdHgpKSB7CisgICAgQklPX3ByaW50ZihwLT5lcnJvcmJpbywgIlNTTF9DVFhfY2hlY2tfcHJpdmF0ZV9rZXlcbiIpOyBnb3RvIGVycjsKKyAgfQorCisgIFNTTF9DVFhfc2V0X3F1aWV0X3NodXRkb3duKGN0eCwxKTsKKyAgU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoY3R4LCJSQzQtTUQ1Iik7CisgIFNTTF9DVFhfc2V0X21vZGUoY3R4LCBTU0xfTU9ERV9BVVRPX1JFVFJZKTsKKworICBYNTA5X1NUT1JFX2FkZF9jZXJ0KFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoY3R4KSwgc2tfWDUwOV92YWx1ZShwLT5jYSwgc2tfWDUwOV9udW0ocC0+Y2EpLTEpKTsKKworICBTU0xfQ1RYX3NldF92ZXJpZnlfZGVwdGgoY3R4LDIpOworCisgIFNTTF9DVFhfc2V0X3ZlcmlmeShjdHgsU1NMX1ZFUklGWV9QRUVSLFpFUk9fTlVMTCk7CisKKyAgU1NMX0NUWF9zZXRfY2VydF92ZXJpZnlfY2FsbGJhY2soY3R4LCBzc2xfYXBwX3ZlcmlmeV9jYWxsYmFjaywgcGFybSk7CisKKworICByZXR1cm4gQ1VSTEVfT0sgOworICBlcnI6CisgIEVSUl9wcmludF9lcnJvcnMocC0+ZXJyb3JiaW8pOworICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworCit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeworCisgIEJJTyogaW49TlVMTDsKKyAgQklPKiBvdXQ9TlVMTDsKKworICBjaGFyICogb3V0ZmlsZSA9IE5VTEw7CisgIGNoYXIgKiBpbmZpbGUgPSBOVUxMIDsKKworICBpbnQgdGFiTGVuZ3RoPTEwMDsKKyAgY2hhciAqYmluYXJ5cHRyOworICBjaGFyKiBtaW1ldHlwZTsKKyAgY2hhciogbWltZXR5cGVhY2NlcHQ9TlVMTDsKKyAgY2hhciogY29udGVudHR5cGU7CisgIGNvbnN0IGNoYXIqKiBwcDsKKyAgdW5zaWduZWQgY2hhciogaG9zdHBvcnR1cmwgPSBOVUxMOworICBCSU8gKiBwMTJiaW8gOworICBjaGFyICoqYXJncyA9IGFyZ3YgKyAxOworICB1bnNpZ25lZCBjaGFyICogc2VydmVydXJsOworICBzc2xjdHhwYXJtIHA7CisgIGNoYXIgKnJlc3BvbnNlOworCisgIENVUkxjb2RlIHJlczsKKyAgc3RydWN0IGN1cmxfc2xpc3QgKiBoZWFkZXJzPU5VTEw7CisgIGludCBiYWRhcmc9MDsKKworICBiaW5hcnlwdHIgPSBtYWxsb2ModGFiTGVuZ3RoKTsKKworICBwLnZlcmJvc2UgPSAwOworICBwLmVycm9yYmlvID0gQklPX25ld19mcCAoc3RkZXJyLCBCSU9fTk9DTE9TRSk7CisKKyAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9ERUZBVUxUKTsKKworICAvKiB3ZSBuZWVkIHNvbWUgbW9yZSBmb3IgdGhlIFAxMiBkZWNvZGluZyAqLworCisgIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKCk7CisgIE9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzKCk7CisgIEVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKCk7CisKKworCisgIHdoaWxlICgqYXJncyAmJiAqYXJnc1swXSA9PSAnLScpIHsKKyAgICBpZiAoIXN0cmNtcCAoKmFyZ3MsICItaW4iKSkgeworICAgICAgaWYgKGFyZ3NbMV0pIHsKKyAgICAgICAgaW5maWxlPSooKythcmdzKTsKKyAgICAgIH0gZWxzZSBiYWRhcmc9MTsKKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLW91dCIpKSB7CisgICAgICBpZiAoYXJnc1sxXSkgeworICAgICAgICBvdXRmaWxlPSooKythcmdzKTsKKyAgICAgIH0gZWxzZSBiYWRhcmc9MTsKKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLXAxMiIpKSB7CisgICAgICBpZiAoYXJnc1sxXSkgeworICAgICAgICBwLnAxMmZpbGUgPSAqKCsrYXJncyk7CisgICAgICB9IGVsc2UgYmFkYXJnPTE7CisgICAgfSBlbHNlIGlmIChzdHJjbXAoKmFyZ3MsIi1lbnZwYXNzIikgPT0gMCkgeworICAgICAgaWYgKGFyZ3NbMV0pIHsKKyAgICAgICAgcC5wc3QgPSBnZXRlbnYoKigrK2FyZ3MpKTsKKyAgICAgIH0gZWxzZSBiYWRhcmc9MTsKKyAgICB9IGVsc2UgaWYgKHN0cmNtcCgqYXJncywiLWNvbm5lY3QiKSA9PSAwKSB7CisgICAgICBpZiAoYXJnc1sxXSkgeworICAgICAgICBob3N0cG9ydHVybCA9ICooKythcmdzKTsKKyAgICAgIH0gZWxzZSBiYWRhcmc9MTsKKyAgICB9IGVsc2UgaWYgKHN0cmNtcCgqYXJncywiLW1pbWV0eXBlIikgPT0gMCkgeworICAgICAgaWYgKGFyZ3NbMV0pIHsKKyAgICAgICAgbWltZXR5cGUgPSAqKCsrYXJncyk7CisgICAgICB9IGVsc2UgYmFkYXJnPTE7CisgICAgfSBlbHNlIGlmIChzdHJjbXAoKmFyZ3MsIi1hY2NlcHRtaW1lIikgPT0gMCkgeworICAgICAgaWYgKGFyZ3NbMV0pIHsKKyAgICAgICAgbWltZXR5cGVhY2NlcHQgPSAqKCsrYXJncyk7CisgICAgICB9IGVsc2UgYmFkYXJnPTE7CisgICAgfSBlbHNlIGlmIChzdHJjbXAoKmFyZ3MsIi1hY2Nlc3N0eXBlIikgPT0gMCkgeworICAgICAgaWYgKGFyZ3NbMV0pIHsKKyAgICAgICAgaWYgKChwLmFjY2Vzc3R5cGUgPSBPQkpfb2JqMm5pZChPQkpfdHh0Mm9iaigqKythcmdzLDApKSkgPT0gMCkgYmFkYXJnPTE7CisgICAgICB9IGVsc2UgYmFkYXJnPTE7CisgICAgfSBlbHNlIGlmIChzdHJjbXAoKmFyZ3MsIi12ZXJib3NlIikgPT0gMCkgeworICAgICAgcC52ZXJib3NlKys7CisgICAgfSBlbHNlIGJhZGFyZz0xOworICAgIGFyZ3MrKzsKKyAgfQorCisgIGlmIChtaW1ldHlwZT09TlVMTCB8fCBtaW1ldHlwZWFjY2VwdCA9PSBOVUxMKSBiYWRhcmcgPSAxOworCisgIGlmIChiYWRhcmcpIHsKKyAgICBmb3IgKHBwPWN1cmx4X3VzYWdlOyAoKnBwICE9IE5VTEwpOyBwcCsrKQorICAgICAgQklPX3ByaW50ZihwLmVycm9yYmlvLCIlc1xuIiwqcHApOworICAgIEJJT19wcmludGYocC5lcnJvcmJpbywiXG4iKTsKKyAgICBnb3RvIGVycjsKKyAgfQorCisKKworICAvKiBzZXQgaW5wdXQgKi8KKworICBpZiAoKGluPUJJT19uZXcoQklPX3NfZmlsZSgpKSkgPT0gTlVMTCkgeworICAgIEJJT19wcmludGYocC5lcnJvcmJpbywgIkVycm9yIHNldHRpbmcgaW5wdXQgYmlvXG4iKTsKKyAgICBnb3RvIGVycjsKKyAgfSBlbHNlIGlmIChpbmZpbGUgPT0gTlVMTCkKKyAgICBCSU9fc2V0X2ZwKGluLHN0ZGluLEJJT19OT0NMT1NFfEJJT19GUF9URVhUKTsKKyAgZWxzZSBpZiAoQklPX3JlYWRfZmlsZW5hbWUoaW4saW5maWxlKSA8PSAwKSB7CisgICAgQklPX3ByaW50ZihwLmVycm9yYmlvLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlICVzXG4iLCBpbmZpbGUpOworICAgIEJJT19mcmVlKGluKTsKKyAgICBnb3RvIGVycjsKKyAgfQorCisgIC8qIHNldCBvdXRwdXQgICovCisKKyAgaWYgKChvdXQ9QklPX25ldyhCSU9fc19maWxlKCkpKSA9PSBOVUxMKSB7CisgICAgQklPX3ByaW50ZihwLmVycm9yYmlvLCAiRXJyb3Igc2V0dGluZyBvdXRwdXQgYmlvLlxuIik7CisgICAgZ290byBlcnI7CisgIH0gZWxzZSBpZiAob3V0ZmlsZSA9PSBOVUxMKQorICAgIEJJT19zZXRfZnAob3V0LHN0ZG91dCxCSU9fTk9DTE9TRXxCSU9fRlBfVEVYVCk7CisgIGVsc2UgaWYgKEJJT193cml0ZV9maWxlbmFtZShvdXQsb3V0ZmlsZSkgPD0gMCkgeworICAgIEJJT19wcmludGYocC5lcnJvcmJpbywgIkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGUgJXNcbiIsIG91dGZpbGUpOworICAgIEJJT19mcmVlKG91dCk7CisgICAgZ290byBlcnI7CisgIH0KKworCisgIHAuZXJyb3JiaW8gPSBCSU9fbmV3X2ZwIChzdGRlcnIsIEJJT19OT0NMT1NFKTsKKworICBpZiAoIShwLmN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSkgeworICAgIEJJT19wcmludGYocC5lcnJvcmJpbywgIkNhbm5vdCBpbml0IGN1cmwgbGliXG4iKTsKKyAgICBnb3RvIGVycjsKKyAgfQorCisKKworICBpZiAoIShwMTJiaW8gPSBCSU9fbmV3X2ZpbGUocC5wMTJmaWxlICwgInJiIikpKSB7CisgICAgQklPX3ByaW50ZihwLmVycm9yYmlvLCAiRXJyb3Igb3BlbmluZyBQMTIgZmlsZSAlc1xuIiwgcC5wMTJmaWxlKTsgZ290byBlcnI7CisgIH0KKyAgaWYgKCEocC5wMTIgPSBkMmlfUEtDUzEyX2JpbyAocDEyYmlvLCBOVUxMKSkpIHsKKyAgICBCSU9fcHJpbnRmKHAuZXJyb3JiaW8sICJDYW5ub3QgZGVjb2RlIFAxMiBzdHJ1Y3R1cmUgJXNcbiIsIHAucDEyZmlsZSk7IGdvdG8gZXJyOworICB9CisKKyAgcC5jYT0gTlVMTDsKKyAgaWYgKCEoUEtDUzEyX3BhcnNlIChwLnAxMiwgcC5wc3QsICYocC5wa2V5KSwgJihwLnVzZXJjZXJ0KSwgJihwLmNhKSApICkpIHsKKyAgICBCSU9fcHJpbnRmKHAuZXJyb3JiaW8sIkludmFsaWQgUDEyIHN0cnVjdHVyZSBpbiAlc1xuIiwgcC5wMTJmaWxlKTsgZ290byBlcnI7CisgIH0KKworICBpZiAoc2tfWDUwOV9udW0ocC5jYSkgPD0gMCkgeworICAgIEJJT19wcmludGYocC5lcnJvcmJpbywiTm8gdHJ1c3R3b3J0aHkgQ0EgZ2l2ZW4uJXNcbiIsIHAucDEyZmlsZSk7IGdvdG8gZXJyOworICB9CisKKyAgaWYgKHAudmVyYm9zZSA+IDEpCisgICAgWDUwOV9wcmludF9leChwLmVycm9yYmlvLHAudXNlcmNlcnQsMCwwKTsKKworICAvKiBkZXRlcm1pbmUgVVJMIHRvIGdvICovCisKKyAgaWYgKGhvc3Rwb3J0dXJsKSB7CisgICAgc2VydmVydXJsID0gbWFsbG9jKDkrc3RybGVuKGhvc3Rwb3J0dXJsKSk7CisgICAgc3ByaW50ZihzZXJ2ZXJ1cmwsImh0dHBzOi8vJXMiLGhvc3Rwb3J0dXJsKTsKKyAgfQorICBlbHNlIGlmIChwLmFjY2Vzc3R5cGUgIT0gMCkgeyAvKiBzZWUgd2hldGhlciB3ZSBjYW4gZmluZCBhbiBBSUEgb3IgU0lBIGZvciBhIGdpdmVuIGFjY2VzcyB0eXBlICovCisgICAgaWYgKCEoc2VydmVydXJsID0gbXlfZ2V0X2V4dChwLnVzZXJjZXJ0LHAuYWNjZXNzdHlwZSxOSURfaW5mb19hY2Nlc3MpKSkgeworICAgICAgaW50IGo9MDsKKyAgICAgIEJJT19wcmludGYocC5lcnJvcmJpbywibm8gc2VydmljZSBVUkwgaW4gdXNlciBjZXJ0ICIKKyAgICAgICAgICAgICAgICAgImNoZXJjaGluZyBpbiBvdGhlcnMgY2VydGlmaWNhdHNcbiIpOworICAgICAgZm9yIChqPTA7ajxza19YNTA5X251bShwLmNhKTtqKyspIHsKKyAgICAgICAgaWYgKChzZXJ2ZXJ1cmwgPSBteV9nZXRfZXh0KHNrX1g1MDlfdmFsdWUocC5jYSxqKSxwLmFjY2Vzc3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSURfaW5mb19hY2Nlc3MpKSkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKChzZXJ2ZXJ1cmwgPSBteV9nZXRfZXh0KHNrX1g1MDlfdmFsdWUocC5jYSxqKSxwLmFjY2Vzc3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSURfc2luZm9fYWNjZXNzKSkpCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKCFzZXJ2ZXJ1cmwpIHsKKyAgICBCSU9fcHJpbnRmKHAuZXJyb3JiaW8sICJubyBzZXJ2aWNlIFVSTCBpbiBjZXJ0aWZpY2F0cywiCisgICAgICAgICAgICAgICAiIGNoZWNrICctYWNjZXNzdHlwZSAoQURfRFZDUyB8IGFkX3RpbWVzdGFtcGluZyknIgorICAgICAgICAgICAgICAgIiBvciB1c2UgJy1jb25uZWN0J1xuIik7CisgICAgZ290byBlcnI7CisgIH0KKworICBpZiAocC52ZXJib3NlKQorICAgIEJJT19wcmludGYocC5lcnJvcmJpbywgIlNlcnZpY2UgVVJMOiA8JXM+XG4iLCBzZXJ2ZXJ1cmwpOworCisgIGN1cmxfZWFzeV9zZXRvcHQocC5jdXJsLCBDVVJMT1BUX1VSTCwgc2VydmVydXJsKTsKKworICAvKiBOb3cgc3BlY2lmeSB0aGUgUE9TVCBiaW5hcnkgZGF0YSAqLworCisgIGN1cmxfZWFzeV9zZXRvcHQocC5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsIGJpbmFyeXB0cik7CisgIGN1cmxfZWFzeV9zZXRvcHQocC5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsKGxvbmcpdGFiTGVuZ3RoKTsKKworICAvKiBwYXNzIG91ciBsaXN0IG9mIGN1c3RvbSBtYWRlIGhlYWRlcnMgKi8KKworICBjb250ZW50dHlwZSA9IG1hbGxvYygxNStzdHJsZW4obWltZXR5cGUpKTsKKyAgc3ByaW50Zihjb250ZW50dHlwZSwiQ29udGVudC10eXBlOiAlcyIsbWltZXR5cGUpOworICBoZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycyxjb250ZW50dHlwZSk7CisgIGN1cmxfZWFzeV9zZXRvcHQocC5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcnMpOworCisgIGlmIChwLnZlcmJvc2UpCisgICAgQklPX3ByaW50ZihwLmVycm9yYmlvLCAiU2VydmljZSBVUkw6IDwlcz5cbiIsIHNlcnZlcnVybCk7CisKKyAgeworICAgIEZJTEUgKm91dGZwOworICAgIEJJT19nZXRfZnAob3V0LCZvdXRmcCk7CisgICAgY3VybF9lYXN5X3NldG9wdChwLmN1cmwsIENVUkxPUFRfV1JJVEVEQVRBLCBvdXRmcCk7CisgIH0KKworICByZXMgPSBjdXJsX2Vhc3lfc2V0b3B0KHAuY3VybCwgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLCBzc2xjdHhmdW4pICA7CisKKyAgaWYgKHJlcyAhPSBDVVJMRV9PSykKKyAgICBCSU9fcHJpbnRmKHAuZXJyb3JiaW8sIiVkICVzPSVkICVkXG4iLCBfX0xJTkVfXywgIkNVUkxPUFRfU1NMX0NUWF9GVU5DVElPTiIsQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLHJlcyk7CisKKyAgY3VybF9lYXN5X3NldG9wdChwLmN1cmwsIENVUkxPUFRfU1NMX0NUWF9EQVRBLCAmcCk7CisKKyAgeworICAgIGludCBsdTsgaW50IGk9MDsKKyAgICB3aGlsZSAoKGx1ID0gQklPX3JlYWQgKGluLCZiaW5hcnlwdHJbaV0sdGFiTGVuZ3RoLWkpKSA+MCApIHsKKyAgICAgIGkrPWx1OworICAgICAgaWYgKGk9PSB0YWJMZW5ndGgpIHsKKyAgICAgICAgdGFiTGVuZ3RoKz0xMDA7CisgICAgICAgIGJpbmFyeXB0cj1yZWFsbG9jKGJpbmFyeXB0cix0YWJMZW5ndGgpOyAvKiBzaG91bGQgYmUgbW9yZSBjYXJlZnVsICovCisgICAgICB9CisgICAgfQorICAgIHRhYkxlbmd0aCA9IGk7CisgIH0KKyAgLyogTm93IHNwZWNpZnkgdGhlIFBPU1QgYmluYXJ5IGRhdGEgKi8KKworICBjdXJsX2Vhc3lfc2V0b3B0KHAuY3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCBiaW5hcnlwdHIpOworICBjdXJsX2Vhc3lfc2V0b3B0KHAuY3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFLChsb25nKXRhYkxlbmd0aCk7CisKKworICAvKiBQZXJmb3JtIHRoZSByZXF1ZXN0LCByZXMgd2lsbCBnZXQgdGhlIHJldHVybiBjb2RlICovCisKKyAgQklPX3ByaW50ZihwLmVycm9yYmlvLCIlZCAlcyAlZFxuIiwgX19MSU5FX18sICJjdXJsX2Vhc3lfcGVyZm9ybSIsCisgICAgICAgICAgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0ocC5jdXJsKSk7CisgIHsKKyAgICBpbnQgcmVzdWx0ID1jdXJsX2Vhc3lfZ2V0aW5mbyhwLmN1cmwsQ1VSTElORk9fQ09OVEVOVF9UWVBFLCZyZXNwb25zZSk7CisgICAgaWYoIG1pbWV0eXBlYWNjZXB0ICYmIHAudmVyYm9zZSkKKyAgICAgIGlmKCFzdHJjbXAobWltZXR5cGVhY2NlcHQscmVzcG9uc2UpKQorICAgICAgICBCSU9fcHJpbnRmKHAuZXJyb3JiaW8sInRoZSByZXNwb25zZSBoYXMgYSBjb3JyZWN0IG1pbWV0eXBlIDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UpOworICAgICAgZWxzZQorICAgICAgICBCSU9fcHJpbnRmKHAuZXJyb3JiaW8sInRoZSByZXBvbnNlIGRvZXNuXCd0IGhhcyBhbiBhY2NlcHRhYmxlICIKKyAgICAgICAgICAgICAgICAgICAibWltZSB0eXBlLCBpdCBpcyAlcyBpbnN0ZWFkIG9mICVzXG4iLAorICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLG1pbWV0eXBlYWNjZXB0KTsKKyAgfQorCisgIC8qKiogY29kZSBkJ2VycmV1ciBzaSBhY2NlcHQgbWltZSAqKiosIGVnYWxlbWVudCBjb2RlIHJldHVybiBIVFRQICE9IDIwMCAqKiovCisKKy8qIGZyZWUgdGhlIGhlYWRlciBsaXN0Ki8KKworICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGhlYWRlcnMpOworCisgIC8qIGFsd2F5cyBjbGVhbnVwICovCisgIGN1cmxfZWFzeV9jbGVhbnVwKHAuY3VybCk7CisKKyAgQklPX2ZyZWUoaW4pOworICBCSU9fZnJlZShvdXQpOworICByZXR1cm4gKEVYSVRfU1VDQ0VTUyk7CisKKyAgZXJyOiBCSU9fcHJpbnRmKHAuZXJyb3JiaW8sImVycm9yIik7CisgIGV4aXQoMSk7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2RlYnVnLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcwYjQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvZGVidWcuYwpAQCAtMCwwICsxLDE0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworc3RydWN0IGRhdGEgeworICBjaGFyIHRyYWNlX2FzY2lpOyAvKiAxIG9yIDAgKi8KK307CisKK3N0YXRpYwordm9pZCBkdW1wKGNvbnN0IGNoYXIgKnRleHQsCisgICAgICAgICAgRklMRSAqc3RyZWFtLCB1bnNpZ25lZCBjaGFyICpwdHIsIHNpemVfdCBzaXplLAorICAgICAgICAgIGNoYXIgbm9oZXgpCit7CisgIHNpemVfdCBpOworICBzaXplX3QgYzsKKworICB1bnNpZ25lZCBpbnQgd2lkdGg9MHgxMDsKKworICBpZihub2hleCkKKyAgICAvKiB3aXRob3V0IHRoZSBoZXggb3V0cHV0LCB3ZSBjYW4gZml0IG1vcmUgb24gc2NyZWVuICovCisgICAgd2lkdGggPSAweDQwOworCisgIGZwcmludGYoc3RyZWFtLCAiJXMsICUxMC4xMGxkIGJ5dGVzICgweCU4LjhseClcbiIsCisgICAgICAgICAgdGV4dCwgKGxvbmcpc2l6ZSwgKGxvbmcpc2l6ZSk7CisKKyAgZm9yKGk9MDsgaTxzaXplOyBpKz0gd2lkdGgpIHsKKworICAgIGZwcmludGYoc3RyZWFtLCAiJTQuNGx4OiAiLCAobG9uZylpKTsKKworICAgIGlmKCFub2hleCkgeworICAgICAgLyogaGV4IG5vdCBkaXNhYmxlZCwgc2hvdyBpdCAqLworICAgICAgZm9yKGMgPSAwOyBjIDwgd2lkdGg7IGMrKykKKyAgICAgICAgaWYoaStjIDwgc2l6ZSkKKyAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiUwMnggIiwgcHRyW2krY10pOworICAgICAgICBlbHNlCisgICAgICAgICAgZnB1dHMoIiAgICIsIHN0cmVhbSk7CisgICAgfQorCisgICAgZm9yKGMgPSAwOyAoYyA8IHdpZHRoKSAmJiAoaStjIDwgc2l6ZSk7IGMrKykgeworICAgICAgLyogY2hlY2sgZm9yIDBEMEE7IGlmIGZvdW5kLCBza2lwIHBhc3QgYW5kIHN0YXJ0IGEgbmV3IGxpbmUgb2Ygb3V0cHV0ICovCisgICAgICBpZiAobm9oZXggJiYgKGkrYysxIDwgc2l6ZSkgJiYgcHRyW2krY109PTB4MEQgJiYgcHRyW2krYysxXT09MHgwQSkgeworICAgICAgICBpKz0oYysyLXdpZHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVjIiwKKyAgICAgICAgICAgICAgKHB0cltpK2NdPj0weDIwKSAmJiAocHRyW2krY108MHg4MCk/cHRyW2krY106Jy4nKTsKKyAgICAgIC8qIGNoZWNrIGFnYWluIGZvciAwRDBBLCB0byBhdm9pZCBhbiBleHRyYSBcbiBpZiBpdCdzIGF0IHdpZHRoICovCisgICAgICBpZiAobm9oZXggJiYgKGkrYysyIDwgc2l6ZSkgJiYgcHRyW2krYysxXT09MHgwRCAmJiBwdHJbaStjKzJdPT0weDBBKSB7CisgICAgICAgIGkrPShjKzMtd2lkdGgpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZnB1dGMoJ1xuJywgc3RyZWFtKTsgLyogbmV3bGluZSAqLworICB9CisgIGZmbHVzaChzdHJlYW0pOworfQorCitzdGF0aWMKK2ludCBteV90cmFjZShDVVJMICpoYW5kbGUsIGN1cmxfaW5mb3R5cGUgdHlwZSwKKyAgICAgICAgICAgICBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICB2b2lkICp1c2VycCkKK3sKKyAgc3RydWN0IGRhdGEgKmNvbmZpZyA9IChzdHJ1Y3QgZGF0YSAqKXVzZXJwOworICBjb25zdCBjaGFyICp0ZXh0OworICAodm9pZCloYW5kbGU7IC8qIHByZXZlbnQgY29tcGlsZXIgd2FybmluZyAqLworCisgIHN3aXRjaCAodHlwZSkgeworICBjYXNlIENVUkxJTkZPX1RFWFQ6CisgICAgZnByaW50ZihzdGRlcnIsICI9PSBJbmZvOiAlcyIsIGRhdGEpOworICBkZWZhdWx0OiAvKiBpbiBjYXNlIGEgbmV3IG9uZSBpcyBpbnRyb2R1Y2VkIHRvIHNob2NrIHVzICovCisgICAgcmV0dXJuIDA7CisKKyAgY2FzZSBDVVJMSU5GT19IRUFERVJfT1VUOgorICAgIHRleHQgPSAiPT4gU2VuZCBoZWFkZXIiOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0RBVEFfT1VUOgorICAgIHRleHQgPSAiPT4gU2VuZCBkYXRhIjsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19TU0xfREFUQV9PVVQ6CisgICAgdGV4dCA9ICI9PiBTZW5kIFNTTCBkYXRhIjsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19IRUFERVJfSU46CisgICAgdGV4dCA9ICI8PSBSZWN2IGhlYWRlciI7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fREFUQV9JTjoKKyAgICB0ZXh0ID0gIjw9IFJlY3YgZGF0YSI7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fU1NMX0RBVEFfSU46CisgICAgdGV4dCA9ICI8PSBSZWN2IFNTTCBkYXRhIjsKKyAgICBicmVhazsKKyAgfQorCisgIGR1bXAodGV4dCwgc3RkZXJyLCAodW5zaWduZWQgY2hhciAqKWRhdGEsIHNpemUsIGNvbmZpZy0+dHJhY2VfYXNjaWkpOworICByZXR1cm4gMDsKK30KKworaW50IG1haW4odm9pZCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzOworICBzdHJ1Y3QgZGF0YSBjb25maWc7CisKKyAgY29uZmlnLnRyYWNlX2FzY2lpID0gMTsgLyogZW5hYmxlIGFzY2lpIHRyYWNpbmcgKi8KKworICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYoY3VybCkgeworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OLCBteV90cmFjZSk7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0RFQlVHREFUQSwgJmNvbmZpZyk7CisKKyAgICAvKiB0aGUgREVCVUdGVU5DVElPTiBoYXMgbm8gZWZmZWN0IHVudGlsIHdlIGVuYWJsZSBWRVJCT1NFICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vZXhhbXBsZS5jb20vIik7CisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgICAvKiBhbHdheXMgY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICB9CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9ldmhpcGVyZmlmby5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9ldmhpcGVyZmlmby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZTRkYWQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2V2aGlwZXJmaWZvLmMKQEAgLTAsMCArMSw0NDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRXhhbXBsZSBhcHBsaWNhdGlvbiBzb3VyY2UgY29kZSB1c2luZyB0aGUgbXVsdGkgc29ja2V0IGludGVyZmFjZSB0bworICogZG93bmxvYWQgbWFueSBmaWxlcyBhdCBvbmNlLgorICoKKyAqIFRoaXMgZXhhbXBsZSBmZWF0dXJlcyB0aGUgc2FtZSBiYXNpYyBmdW5jdGlvbmFsaXR5IGFzIGhpcGVyZmlmby5jIGRvZXMsCisgKiBidXQgdGhpcyB1c2VzIGxpYmV2IGluc3RlYWQgb2YgbGliZXZlbnQuCisgKgorICogV3JpdHRlbiBieSBKZWZmIFBvaGxtZXllciwgY29udmVydGVkIHRvIHVzZSBsaWJldiBieSBNYXJrdXMgS29ldHRlcgorCitSZXF1aXJlcyBsaWJldiBhbmQgYSAoUE9TSVg/KSBzeXN0ZW0gdGhhdCBoYXMgbWtmaWZvKCkuCisKK1RoaXMgaXMgYW4gYWRhcHRhdGlvbiBvZiBsaWJjdXJsJ3MgImhpcGV2LmMiIGFuZCBsaWJldmVudCdzICJldmVudC10ZXN0LmMiCitzYW1wbGUgcHJvZ3JhbXMuCisKK1doZW4gcnVubmluZywgdGhlIHByb2dyYW0gY3JlYXRlcyB0aGUgbmFtZWQgcGlwZSAiaGlwZXIuZmlmbyIKKworV2hlbmV2ZXIgdGhlcmUgaXMgaW5wdXQgaW50byB0aGUgZmlmbywgdGhlIHByb2dyYW0gcmVhZHMgdGhlIGlucHV0IGFzIGEgbGlzdAorb2YgVVJMJ3MgYW5kIGNyZWF0ZXMgc29tZSBuZXcgZWFzeSBoYW5kbGVzIHRvIGZldGNoIGVhY2ggVVJMIHZpYSB0aGUKK2N1cmxfbXVsdGkgImhpcGVyIiBBUEkuCisKKworVGh1cywgeW91IGNhbiB0cnkgYSBzaW5nbGUgVVJMOgorICAlIGVjaG8gaHR0cDovL3d3dy55YWhvby5jb20gPiBoaXBlci5maWZvCisKK09yIGEgd2hvbGUgYnVuY2ggb2YgdGhlbToKKyAgJSBjYXQgbXktdXJsLWxpc3QgPiBoaXBlci5maWZvCisKK1RoZSBmaWZvIGJ1ZmZlciBpcyBoYW5kbGVkIGFsbW9zdCBpbnN0YW50bHksIHNvIHlvdSBjYW4gZXZlbiBhZGQgbW9yZSBVUkwncword2hpbGUgdGhlIHByZXZpb3VzIHJlcXVlc3RzIGFyZSBzdGlsbCBiZWluZyBkb3dubG9hZGVkLgorCitOb3RlOgorICBGb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eSwgVVJMIGxlbmd0aCBpcyBsaW1pdGVkIHRvIDEwMjMgY2hhcidzICEKKworVGhpcyBpcyBwdXJlbHkgYSBkZW1vIGFwcCwgYWxsIHJldHJpZXZlZCBkYXRhIGlzIHNpbXBseSBkaXNjYXJkZWQgYnkgdGhlIHdyaXRlCitjYWxsYmFjay4KKworKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlIDxldi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjZGVmaW5lIERQUklOVCh4Li4uKSBwcmludGYoeCkKKworI2RlZmluZSBNU0dfT1VUIHN0ZG91dCAvKiBTZW5kIGluZm8gdG8gc3Rkb3V0LCBjaGFuZ2UgdG8gc3RkZXJyIGlmIHlvdSB3YW50ICovCisKKworLyogR2xvYmFsIGluZm9ybWF0aW9uLCBjb21tb24gdG8gYWxsIGNvbm5lY3Rpb25zICovCit0eXBlZGVmIHN0cnVjdCBfR2xvYmFsSW5mbworeworICBzdHJ1Y3QgZXZfbG9vcCAqbG9vcDsKKyAgc3RydWN0IGV2X2lvIGZpZm9fZXZlbnQ7CisgIHN0cnVjdCBldl90aW1lciB0aW1lcl9ldmVudDsKKyAgQ1VSTE0gKm11bHRpOworICBpbnQgc3RpbGxfcnVubmluZzsKKyAgRklMRSogaW5wdXQ7Cit9IEdsb2JhbEluZm87CisKKworLyogSW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgZWFzeSBoYW5kbGUgKi8KK3R5cGVkZWYgc3RydWN0IF9Db25uSW5mbworeworICBDVVJMICplYXN5OworICBjaGFyICp1cmw7CisgIEdsb2JhbEluZm8gKmdsb2JhbDsKKyAgY2hhciBlcnJvcltDVVJMX0VSUk9SX1NJWkVdOworfSBDb25uSW5mbzsKKworCisvKiBJbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBzb2NrZXQgKi8KK3R5cGVkZWYgc3RydWN0IF9Tb2NrSW5mbworeworICBjdXJsX3NvY2tldF90IHNvY2tmZDsKKyAgQ1VSTCAqZWFzeTsKKyAgaW50IGFjdGlvbjsKKyAgbG9uZyB0aW1lb3V0OworICBzdHJ1Y3QgZXZfaW8gZXY7CisgIGludCBldnNldDsKKyAgR2xvYmFsSW5mbyAqZ2xvYmFsOworfSBTb2NrSW5mbzsKKworc3RhdGljIHZvaWQgdGltZXJfY2IoRVZfUF8gc3RydWN0IGV2X3RpbWVyICp3LCBpbnQgcmV2ZW50cyk7CisKKy8qIFVwZGF0ZSB0aGUgZXZlbnQgdGltZXIgYWZ0ZXIgY3VybF9tdWx0aSBsaWJyYXJ5IGNhbGxzICovCitzdGF0aWMgaW50IG11bHRpX3RpbWVyX2NiKENVUkxNICptdWx0aSwgbG9uZyB0aW1lb3V0X21zLCBHbG9iYWxJbmZvICpnKQoreworICBEUFJJTlQoIiVzICVsaVxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgIHRpbWVvdXRfbXMpOworICBldl90aW1lcl9zdG9wKGctPmxvb3AsICZnLT50aW1lcl9ldmVudCk7CisgIGlmICh0aW1lb3V0X21zID4gMCkKKyAgeworICAgIGRvdWJsZSAgdCA9IHRpbWVvdXRfbXMgLyAxMDAwOworICAgIGV2X3RpbWVyX2luaXQoJmctPnRpbWVyX2V2ZW50LCB0aW1lcl9jYiwgdCwgMC4pOworICAgIGV2X3RpbWVyX3N0YXJ0KGctPmxvb3AsICZnLT50aW1lcl9ldmVudCk7CisgIH1lbHNlCisgICAgdGltZXJfY2IoZy0+bG9vcCwgJmctPnRpbWVyX2V2ZW50LCAwKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIERpZSBpZiB3ZSBnZXQgYSBiYWQgQ1VSTE1jb2RlIHNvbWV3aGVyZSAqLworc3RhdGljIHZvaWQgbWNvZGVfb3JfZGllKGNvbnN0IGNoYXIgKndoZXJlLCBDVVJMTWNvZGUgY29kZSkKK3sKKyAgaWYgKCBDVVJMTV9PSyAhPSBjb2RlICkKKyAgeworICAgIGNvbnN0IGNoYXIgKnM7CisgICAgc3dpdGNoICggY29kZSApCisgICAgeworICAgIGNhc2UgQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOiBzPSJDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0iOyBicmVhazsKKyAgICBjYXNlIENVUkxNX0JBRF9IQU5ETEU6ICAgICAgICAgcz0iQ1VSTE1fQkFEX0hBTkRMRSI7ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMTV9CQURfRUFTWV9IQU5ETEU6ICAgIHM9IkNVUkxNX0JBRF9FQVNZX0hBTkRMRSI7ICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTE1fT1VUX09GX01FTU9SWTogICAgICBzPSJDVVJMTV9PVVRfT0ZfTUVNT1JZIjsgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxNX0lOVEVSTkFMX0VSUk9SOiAgICAgcz0iQ1VSTE1fSU5URVJOQUxfRVJST1IiOyAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMTV9VTktOT1dOX09QVElPTjogICAgIHM9IkNVUkxNX1VOS05PV05fT1BUSU9OIjsgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTE1fTEFTVDogICAgICAgICAgICAgICBzPSJDVVJMTV9MQVNUIjsgICAgICAgICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiBzPSJDVVJMTV91bmtub3duIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgICAgIENVUkxNX0JBRF9TT0NLRVQ6ICAgICAgICAgcz0iQ1VSTE1fQkFEX1NPQ0tFVCI7CisgICAgICBmcHJpbnRmKE1TR19PVVQsICJFUlJPUjogJXMgcmV0dXJucyAlc1xuIiwgd2hlcmUsIHMpOworICAgICAgLyogaWdub3JlIHRoaXMgZXJyb3IgKi8KKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZnByaW50ZihNU0dfT1VULCAiRVJST1I6ICVzIHJldHVybnMgJXNcbiIsIHdoZXJlLCBzKTsKKyAgICBleGl0KGNvZGUpOworICB9Cit9CisKKworCisvKiBDaGVjayBmb3IgY29tcGxldGVkIHRyYW5zZmVycywgYW5kIHJlbW92ZSB0aGVpciBlYXN5IGhhbmRsZXMgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX211bHRpX2luZm8oR2xvYmFsSW5mbyAqZykKK3sKKyAgY2hhciAqZWZmX3VybDsKKyAgQ1VSTE1zZyAqbXNnOworICBpbnQgbXNnc19sZWZ0OworICBDb25uSW5mbyAqY29ubjsKKyAgQ1VSTCAqZWFzeTsKKyAgQ1VSTGNvZGUgcmVzOworCisgIGZwcmludGYoTVNHX09VVCwgIlJFTUFJTklORzogJWRcbiIsIGctPnN0aWxsX3J1bm5pbmcpOworICB3aGlsZSAoKG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGctPm11bHRpLCAmbXNnc19sZWZ0KSkpIHsKKyAgICBpZiAobXNnLT5tc2cgPT0gQ1VSTE1TR19ET05FKSB7CisgICAgICBlYXN5ID0gbXNnLT5lYXN5X2hhbmRsZTsKKyAgICAgIHJlcyA9IG1zZy0+ZGF0YS5yZXN1bHQ7CisgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhlYXN5LCBDVVJMSU5GT19QUklWQVRFLCAmY29ubik7CisgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhlYXN5LCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmZWZmX3VybCk7CisgICAgICBmcHJpbnRmKE1TR19PVVQsICJET05FOiAlcyA9PiAoJWQpICVzXG4iLCBlZmZfdXJsLCByZXMsIGNvbm4tPmVycm9yKTsKKyAgICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShnLT5tdWx0aSwgZWFzeSk7CisgICAgICBmcmVlKGNvbm4tPnVybCk7CisgICAgICBjdXJsX2Vhc3lfY2xlYW51cChlYXN5KTsKKyAgICAgIGZyZWUoY29ubik7CisgICAgfQorICB9Cit9CisKKworCisvKiBDYWxsZWQgYnkgbGliZXZlbnQgd2hlbiB3ZSBnZXQgYWN0aW9uIG9uIGEgbXVsdGkgc29ja2V0ICovCitzdGF0aWMgdm9pZCBldmVudF9jYihFVl9QXyBzdHJ1Y3QgZXZfaW8gKncsIGludCByZXZlbnRzKQoreworICBEUFJJTlQoIiVzICB3ICVwIHJldmVudHMgJWlcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIHcsIHJldmVudHMpOworICBHbG9iYWxJbmZvICpnID0gKEdsb2JhbEluZm8qKSB3LT5kYXRhOworICBDVVJMTWNvZGUgcmM7CisKKyAgaW50IGFjdGlvbiA9IChyZXZlbnRzJkVWX1JFQUQ/Q1VSTF9QT0xMX0lOOjApfAorICAgIChyZXZlbnRzJkVWX1dSSVRFP0NVUkxfUE9MTF9PVVQ6MCk7CisgIHJjID0gY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKGctPm11bHRpLCB3LT5mZCwgYWN0aW9uLCAmZy0+c3RpbGxfcnVubmluZyk7CisgIG1jb2RlX29yX2RpZSgiZXZlbnRfY2I6IGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbiIsIHJjKTsKKyAgY2hlY2tfbXVsdGlfaW5mbyhnKTsKKyAgaWYgKCBnLT5zdGlsbF9ydW5uaW5nIDw9IDAgKQorICB7CisgICAgZnByaW50ZihNU0dfT1VULCAibGFzdCB0cmFuc2ZlciBkb25lLCBraWxsIHRpbWVvdXRcbiIpOworICAgIGV2X3RpbWVyX3N0b3AoZy0+bG9vcCwgJmctPnRpbWVyX2V2ZW50KTsKKyAgfQorfQorCisvKiBDYWxsZWQgYnkgbGliZXZlbnQgd2hlbiBvdXIgdGltZW91dCBleHBpcmVzICovCitzdGF0aWMgdm9pZCB0aW1lcl9jYihFVl9QXyBzdHJ1Y3QgZXZfdGltZXIgKncsIGludCByZXZlbnRzKQoreworICBEUFJJTlQoIiVzICB3ICVwIHJldmVudHMgJWlcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIHcsIHJldmVudHMpOworCisgIEdsb2JhbEluZm8gKmcgPSAoR2xvYmFsSW5mbyAqKXctPmRhdGE7CisgIENVUkxNY29kZSByYzsKKworICByYyA9IGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbihnLT5tdWx0aSwgQ1VSTF9TT0NLRVRfVElNRU9VVCwgMCwgJmctPnN0aWxsX3J1bm5pbmcpOworICBtY29kZV9vcl9kaWUoInRpbWVyX2NiOiBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24iLCByYyk7CisgIGNoZWNrX211bHRpX2luZm8oZyk7Cit9CisKKy8qIENsZWFuIHVwIHRoZSBTb2NrSW5mbyBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyB2b2lkIHJlbXNvY2soU29ja0luZm8gKmYsIEdsb2JhbEluZm8gKmcpCit7CisgIHByaW50ZigiJXMgIFxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgIGlmICggZiApCisgIHsKKyAgICBpZiAoIGYtPmV2c2V0ICkKKyAgICAgIGV2X2lvX3N0b3AoZy0+bG9vcCwgJmYtPmV2KTsKKyAgICBmcmVlKGYpOworICB9Cit9CisKKworCisvKiBBc3NpZ24gaW5mb3JtYXRpb24gdG8gYSBTb2NrSW5mbyBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyB2b2lkIHNldHNvY2soU29ja0luZm8qZiwgY3VybF9zb2NrZXRfdCBzLCBDVVJMKmUsIGludCBhY3QsIEdsb2JhbEluZm8qZykKK3sKKyAgcHJpbnRmKCIlcyAgXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKworICBpbnQga2luZCA9IChhY3QmQ1VSTF9QT0xMX0lOP0VWX1JFQUQ6MCl8KGFjdCZDVVJMX1BPTExfT1VUP0VWX1dSSVRFOjApOworCisgIGYtPnNvY2tmZCA9IHM7CisgIGYtPmFjdGlvbiA9IGFjdDsKKyAgZi0+ZWFzeSA9IGU7CisgIGlmICggZi0+ZXZzZXQgKQorICAgIGV2X2lvX3N0b3AoZy0+bG9vcCwgJmYtPmV2KTsKKyAgZXZfaW9faW5pdCgmZi0+ZXYsIGV2ZW50X2NiLCBmLT5zb2NrZmQsIGtpbmQpOworICBmLT5ldi5kYXRhID0gZzsKKyAgZi0+ZXZzZXQ9MTsKKyAgZXZfaW9fc3RhcnQoZy0+bG9vcCwgJmYtPmV2KTsKK30KKworCisKKy8qIEluaXRpYWxpemUgYSBuZXcgU29ja0luZm8gc3RydWN0dXJlICovCitzdGF0aWMgdm9pZCBhZGRzb2NrKGN1cmxfc29ja2V0X3QgcywgQ1VSTCAqZWFzeSwgaW50IGFjdGlvbiwgR2xvYmFsSW5mbyAqZykKK3sKKyAgU29ja0luZm8gKmZkcCA9IGNhbGxvYyhzaXplb2YoU29ja0luZm8pLCAxKTsKKworICBmZHAtPmdsb2JhbCA9IGc7CisgIHNldHNvY2soZmRwLCBzLCBlYXN5LCBhY3Rpb24sIGcpOworICBjdXJsX211bHRpX2Fzc2lnbihnLT5tdWx0aSwgcywgZmRwKTsKK30KKworLyogQ1VSTE1PUFRfU09DS0VURlVOQ1RJT04gKi8KK3N0YXRpYyBpbnQgc29ja19jYihDVVJMICplLCBjdXJsX3NvY2tldF90IHMsIGludCB3aGF0LCB2b2lkICpjYnAsIHZvaWQgKnNvY2twKQoreworICBEUFJJTlQoIiVzIGUgJXAgcyAlaSB3aGF0ICVpIGNicCAlcCBzb2NrcCAlcFxuIiwKKyAgICAgICAgIF9fUFJFVFRZX0ZVTkNUSU9OX18sIGUsIHMsIHdoYXQsIGNicCwgc29ja3ApOworCisgIEdsb2JhbEluZm8gKmcgPSAoR2xvYmFsSW5mbyopIGNicDsKKyAgU29ja0luZm8gKmZkcCA9IChTb2NrSW5mbyopIHNvY2twOworICBjb25zdCBjaGFyICp3aGF0c3RyW109eyAibm9uZSIsICJJTiIsICJPVVQiLCAiSU5PVVQiLCAiUkVNT1ZFIn07CisKKyAgZnByaW50ZihNU0dfT1VULAorICAgICAgICAgICJzb2NrZXQgY2FsbGJhY2s6IHM9JWQgZT0lcCB3aGF0PSVzICIsIHMsIGUsIHdoYXRzdHJbd2hhdF0pOworICBpZiAoIHdoYXQgPT0gQ1VSTF9QT0xMX1JFTU9WRSApCisgIHsKKyAgICBmcHJpbnRmKE1TR19PVVQsICJcbiIpOworICAgIHJlbXNvY2soZmRwLCBnKTsKKyAgfSBlbHNlCisgIHsKKyAgICBpZiAoICFmZHAgKQorICAgIHsKKyAgICAgIGZwcmludGYoTVNHX09VVCwgIkFkZGluZyBkYXRhOiAlc1xuIiwgd2hhdHN0clt3aGF0XSk7CisgICAgICBhZGRzb2NrKHMsIGUsIHdoYXQsIGcpOworICAgIH0gZWxzZQorICAgIHsKKyAgICAgIGZwcmludGYoTVNHX09VVCwKKyAgICAgICAgICAgICAgIkNoYW5naW5nIGFjdGlvbiBmcm9tICVzIHRvICVzXG4iLAorICAgICAgICAgICAgICB3aGF0c3RyW2ZkcC0+YWN0aW9uXSwgd2hhdHN0clt3aGF0XSk7CisgICAgICBzZXRzb2NrKGZkcCwgcywgZSwgd2hhdCwgZyk7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisKKy8qIENVUkxPUFRfV1JJVEVGVU5DVElPTiAqLworc3RhdGljIHNpemVfdCB3cml0ZV9jYih2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKmRhdGEpCit7CisgIHNpemVfdCByZWFsc2l6ZSA9IHNpemUgKiBubWVtYjsKKyAgQ29ubkluZm8gKmNvbm4gPSAoQ29ubkluZm8qKSBkYXRhOworICAodm9pZClwdHI7CisgICh2b2lkKWNvbm47CisgIHJldHVybiByZWFsc2l6ZTsKK30KKworCisvKiBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04gKi8KK3N0YXRpYyBpbnQgcHJvZ19jYiAodm9pZCAqcCwgZG91YmxlIGRsdG90YWwsIGRvdWJsZSBkbG5vdywgZG91YmxlIHVsdCwKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHVsbikKK3sKKyAgQ29ubkluZm8gKmNvbm4gPSAoQ29ubkluZm8gKilwOworICAodm9pZCl1bHQ7CisgICh2b2lkKXVsbjsKKworICBmcHJpbnRmKE1TR19PVVQsICJQcm9ncmVzczogJXMgKCVnLyVnKVxuIiwgY29ubi0+dXJsLCBkbG5vdywgZGx0b3RhbCk7CisgIHJldHVybiAwOworfQorCisKKy8qIENyZWF0ZSBhIG5ldyBlYXN5IGhhbmRsZSwgYW5kIGFkZCBpdCB0byB0aGUgZ2xvYmFsIGN1cmxfbXVsdGkgKi8KK3N0YXRpYyB2b2lkIG5ld19jb25uKGNoYXIgKnVybCwgR2xvYmFsSW5mbyAqZyApCit7CisgIENvbm5JbmZvICpjb25uOworICBDVVJMTWNvZGUgcmM7CisKKyAgY29ubiA9IGNhbGxvYygxLCBzaXplb2YoQ29ubkluZm8pKTsKKyAgbWVtc2V0KGNvbm4sIDAsIHNpemVvZihDb25uSW5mbykpOworICBjb25uLT5lcnJvclswXT0nXDAnOworCisgIGNvbm4tPmVhc3kgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZiAoICFjb25uLT5lYXN5ICkKKyAgeworICAgIGZwcmludGYoTVNHX09VVCwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkLCBleGl0aW5nIVxuIik7CisgICAgZXhpdCgyKTsKKyAgfQorICBjb25uLT5nbG9iYWwgPSBnOworICBjb25uLT51cmwgPSBzdHJkdXAodXJsKTsKKyAgY3VybF9lYXN5X3NldG9wdChjb25uLT5lYXN5LCBDVVJMT1BUX1VSTCwgY29ubi0+dXJsKTsKKyAgY3VybF9lYXN5X3NldG9wdChjb25uLT5lYXN5LCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIHdyaXRlX2NiKTsKKyAgY3VybF9lYXN5X3NldG9wdChjb25uLT5lYXN5LCBDVVJMT1BUX1dSSVRFREFUQSwgJmNvbm4pOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfVkVSQk9TRSwgMUwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfRVJST1JCVUZGRVIsIGNvbm4tPmVycm9yKTsKKyAgY3VybF9lYXN5X3NldG9wdChjb25uLT5lYXN5LCBDVVJMT1BUX1BSSVZBVEUsIGNvbm4pOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfTk9QUk9HUkVTUywgMEwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiwgcHJvZ19jYik7CisgIGN1cmxfZWFzeV9zZXRvcHQoY29ubi0+ZWFzeSwgQ1VSTE9QVF9QUk9HUkVTU0RBVEEsIGNvbm4pOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfTE9XX1NQRUVEX1RJTUUsIDNMKTsKKyAgY3VybF9lYXN5X3NldG9wdChjb25uLT5lYXN5LCBDVVJMT1BUX0xPV19TUEVFRF9MSU1JVCwgMTBMKTsKKworICBmcHJpbnRmKE1TR19PVVQsCisgICAgICAgICAgIkFkZGluZyBlYXN5ICVwIHRvIG11bHRpICVwICglcylcbiIsIGNvbm4tPmVhc3ksIGctPm11bHRpLCB1cmwpOworICByYyA9IGN1cmxfbXVsdGlfYWRkX2hhbmRsZShnLT5tdWx0aSwgY29ubi0+ZWFzeSk7CisgIG1jb2RlX29yX2RpZSgibmV3X2Nvbm46IGN1cmxfbXVsdGlfYWRkX2hhbmRsZSIsIHJjKTsKKworICAvKiBub3RlIHRoYXQgdGhlIGFkZF9oYW5kbGUoKSB3aWxsIHNldCBhIHRpbWUtb3V0IHRvIHRyaWdnZXIgdmVyeSBzb29uIHNvCisgICAgIHRoYXQgdGhlIG5lY2Vzc2FyeSBzb2NrZXRfYWN0aW9uKCkgY2FsbCB3aWxsIGJlIGNhbGxlZCBieSB0aGlzIGFwcCAqLworfQorCisvKiBUaGlzIGdldHMgY2FsbGVkIHdoZW5ldmVyIGRhdGEgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgZmlmbyAqLworc3RhdGljIHZvaWQgZmlmb19jYihFVl9QXyBzdHJ1Y3QgZXZfaW8gKncsIGludCByZXZlbnRzKQoreworICBjaGFyIHNbMTAyNF07CisgIGxvbmcgaW50IHJ2PTA7CisgIGludCBuPTA7CisgIEdsb2JhbEluZm8gKmcgPSAoR2xvYmFsSW5mbyAqKXctPmRhdGE7CisKKyAgZG8KKyAgeworICAgIHNbMF09J1wwJzsKKyAgICBydj1mc2NhbmYoZy0+aW5wdXQsICIlMTAyM3MlbiIsIHMsICZuKTsKKyAgICBzW25dPSdcMCc7CisgICAgaWYgKCBuICYmIHNbMF0gKQorICAgIHsKKyAgICAgIG5ld19jb25uKHMsZyk7ICAvKiBpZiB3ZSByZWFkIGEgVVJMLCBnbyBnZXQgaXQhICovCisgICAgfSBlbHNlIGJyZWFrOworICB9IHdoaWxlICggcnYgIT0gRU9GICk7Cit9CisKKy8qIENyZWF0ZSBhIG5hbWVkIHBpcGUgYW5kIHRlbGwgbGliZXZlbnQgdG8gbW9uaXRvciBpdCAqLworc3RhdGljIGludCBpbml0X2ZpZm8gKEdsb2JhbEluZm8gKmcpCit7CisgIHN0cnVjdCBzdGF0IHN0OworICBzdGF0aWMgY29uc3QgY2hhciAqZmlmbyA9ICJoaXBlci5maWZvIjsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQ7CisKKyAgZnByaW50ZihNU0dfT1VULCAiQ3JlYXRpbmcgbmFtZWQgcGlwZSBcIiVzXCJcbiIsIGZpZm8pOworICBpZiAoIGxzdGF0IChmaWZvLCAmc3QpID09IDAgKQorICB7CisgICAgaWYgKCAoc3Quc3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRlJFRyApCisgICAgeworICAgICAgZXJybm8gPSBFRVhJU1Q7CisgICAgICBwZXJyb3IoImxzdGF0Iik7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisgIH0KKyAgdW5saW5rKGZpZm8pOworICBpZiAoIG1rZmlmbyAoZmlmbywgMDYwMCkgPT0gLTEgKQorICB7CisgICAgcGVycm9yKCJta2ZpZm8iKTsKKyAgICBleGl0ICgxKTsKKyAgfQorICBzb2NrZmQgPSBvcGVuKGZpZm8sIE9fUkRXUiB8IE9fTk9OQkxPQ0ssIDApOworICBpZiAoIHNvY2tmZCA9PSAtMSApCisgIHsKKyAgICBwZXJyb3IoIm9wZW4iKTsKKyAgICBleGl0ICgxKTsKKyAgfQorICBnLT5pbnB1dCA9IGZkb3Blbihzb2NrZmQsICJyIik7CisKKyAgZnByaW50ZihNU0dfT1VULCAiTm93LCBwaXBlIHNvbWUgVVJMJ3MgaW50byA+ICVzXG4iLCBmaWZvKTsKKyAgZXZfaW9faW5pdCgmZy0+Zmlmb19ldmVudCwgZmlmb19jYiwgc29ja2ZkLCBFVl9SRUFEKTsKKyAgZXZfaW9fc3RhcnQoZy0+bG9vcCwgJmctPmZpZm9fZXZlbnQpOworICByZXR1cm4oMCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgR2xvYmFsSW5mbyBnOworICBDVVJMTWNvZGUgcmM7CisgICh2b2lkKWFyZ2M7CisgICh2b2lkKWFyZ3Y7CisKKyAgbWVtc2V0KCZnLCAwLCBzaXplb2YoR2xvYmFsSW5mbykpOworICBnLmxvb3AgPSBldl9kZWZhdWx0X2xvb3AoMCk7CisKKyAgaW5pdF9maWZvKCZnKTsKKyAgZy5tdWx0aSA9IGN1cmxfbXVsdGlfaW5pdCgpOworCisgIGV2X3RpbWVyX2luaXQoJmcudGltZXJfZXZlbnQsIHRpbWVyX2NiLCAwLiwgMC4pOworICBnLnRpbWVyX2V2ZW50LmRhdGEgPSAmZzsKKyAgZy5maWZvX2V2ZW50LmRhdGEgPSAmZzsKKyAgY3VybF9tdWx0aV9zZXRvcHQoZy5tdWx0aSwgQ1VSTE1PUFRfU09DS0VURlVOQ1RJT04sIHNvY2tfY2IpOworICBjdXJsX211bHRpX3NldG9wdChnLm11bHRpLCBDVVJMTU9QVF9TT0NLRVREQVRBLCAmZyk7CisgIGN1cmxfbXVsdGlfc2V0b3B0KGcubXVsdGksIENVUkxNT1BUX1RJTUVSRlVOQ1RJT04sIG11bHRpX3RpbWVyX2NiKTsKKyAgY3VybF9tdWx0aV9zZXRvcHQoZy5tdWx0aSwgQ1VSTE1PUFRfVElNRVJEQVRBLCAmZyk7CisKKyAgLyogd2UgZG9uJ3QgY2FsbCBhbnkgY3VybF9tdWx0aV9zb2NrZXQqKCkgZnVuY3Rpb24geWV0IGFzIHdlIGhhdmUgbm8gaGFuZGxlcworICAgICBhZGRlZCEgKi8KKworICBldl9sb29wKGcubG9vcCwgMCk7CisgIGN1cmxfbXVsdGlfY2xlYW51cChnLm11bHRpKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2V4dGVybmFsc29ja2V0LmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2V4dGVybmFsc29ja2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhYmFmZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvZXh0ZXJuYWxzb2NrZXQuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogVGhpcyBpcyBhbiBleGFtcGxlIGRlbW9uc3RyYXRpbmcgaG93IGFuIGFwcGxpY2F0aW9uIGNhbiBwYXNzIGluIGEgY3VzdG9tCisgKiBzb2NrZXQgdG8gbGliY3VybCB0byB1c2UuIFRoaXMgZXhhbXBsZSBhbHNvIGhhbmRsZXMgdGhlIGNvbm5lY3QgaXRzZWxmLgorICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2lmZGVmIFdJTjMyCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNkZWZpbmUgY2xvc2UgY2xvc2Vzb2NrZXQKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgICAgICAvKiAgc29ja2V0IHR5cGVzICAgICAgICAgICAgICAqLworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4gICAgICAgLyogIHNvY2tldCBkZWZpbml0aW9ucyAgICAgICAgKi8KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+ICAgICAgICAvKiAgaW5ldCAoMykgZnVudGlvbnMgICAgICAgICAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgICAgLyogIG1pc2MuIFVOSVggZnVuY3Rpb25zICAgICAgKi8KKyNlbmRpZgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyogVGhlIElQIGFkZHJlc3MgYW5kIHBvcnQgbnVtYmVyIHRvIGNvbm5lY3QgdG8gKi8KKyNkZWZpbmUgSVBBRERSICIxMjcuMC4wLjEiCisjZGVmaW5lIFBPUlROVU0gODAKKworc3RhdGljIHNpemVfdCB3cml0ZV9kYXRhKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyZWFtKQoreworICBpbnQgd3JpdHRlbiA9IGZ3cml0ZShwdHIsIHNpemUsIG5tZW1iLCAoRklMRSAqKXN0cmVhbSk7CisgIHJldHVybiB3cml0dGVuOworfQorCitzdGF0aWMgY3VybF9zb2NrZXRfdCBvcGVuc29ja2V0KHZvaWQgKmNsaWVudHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxzb2NrdHlwZSBwdXJwb3NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9zb2NrYWRkciAqYWRkcmVzcykKK3sKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSAqKGN1cmxfc29ja2V0X3QgKiljbGllbnRwOworICAvKiB0aGUgYWN0dWFsIGV4dGVybmFsbHkgc2V0IHNvY2tldCBpcyBwYXNzZWQgaW4gdmlhIHRoZSBPUEVOU09DS0VUREFUQQorICAgICBvcHRpb24gKi8KKyAgcmV0dXJuIHNvY2tmZDsKK30KKworc3RhdGljIGludCBzb2Nrb3B0X2NhbGxiYWNrKHZvaWQgKmNsaWVudHAsIGN1cmxfc29ja2V0X3QgY3VybGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxzb2NrdHlwZSBwdXJwb3NlKQoreworICAvKiBUaGlzIHJldHVybiBjb2RlIHdhcyBhZGRlZCBpbiBsaWJjdXJsIDcuMjEuNSAqLworICByZXR1cm4gQ1VSTF9TT0NLT1BUX0FMUkVBRFlfQ09OTkVDVEVEOworfQorCitpbnQgbWFpbih2b2lkKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2YWRkcjsgIC8qICBzb2NrZXQgYWRkcmVzcyBzdHJ1Y3R1cmUgICovCisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkOworCisjaWZkZWYgV0lOMzIKKyAgV1NBREFUQSB3c2FEYXRhOworICBpbnQgaW5pdHdzYTsKKworICBpZigoaW5pdHdzYSA9IFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwwKSwgJndzYURhdGEpKSAhPSAwKSB7CisgICAgcHJpbnRmKCJXU0FTdGFydHVwIGZhaWxlZDogJWRcbiIsIGluaXR3c2EpOworICAgIHJldHVybiAxOworICB9CisjZW5kaWYKKworICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYoY3VybCkgeworICAgIC8qCisgICAgICogTm90ZSB0aGF0IGxpYmN1cmwgd2lsbCBpbnRlcm5hbGx5IHRoaW5rIHRoYXQgeW91IGNvbm5lY3QgdG8gdGhlIGhvc3QKKyAgICAgKiBhbmQgcG9ydCB0aGF0IHlvdSBzcGVjaWZ5IGluIHRoZSBVUkwgb3B0aW9uLgorICAgICAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vOTkuOTkuOTkuOTk6OTk5OSIpOworCisgICAgLyogQ3JlYXRlIHRoZSBzb2NrZXQgIm1hbnVhbGx5IiAqLworICAgIGlmKCAoc29ja2ZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKSkgPCAwICkgeworICAgICAgcHJpbnRmKCJFcnJvciBjcmVhdGluZyBsaXN0ZW5pbmcgc29ja2V0LlxuIik7CisgICAgICByZXR1cm4gMzsKKyAgICB9CisKKyAgICBtZW1zZXQoJnNlcnZhZGRyLCAwLCBzaXplb2Yoc2VydmFkZHIpKTsKKyAgICBzZXJ2YWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBzZXJ2YWRkci5zaW5fcG9ydCAgID0gaHRvbnMoUE9SVE5VTSk7CisKKyAgICBpZiAoSU5BRERSX05PTkUgPT0gKHNlcnZhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihJUEFERFIpKSkKKyAgICAgIHJldHVybiAyOworCisgICAgaWYoY29ubmVjdChzb2NrZmQsKHN0cnVjdCBzb2NrYWRkciAqKSAmc2VydmFkZHIsIHNpemVvZihzZXJ2YWRkcikpID09CisgICAgICAgLTEpIHsKKyAgICAgIGNsb3NlKHNvY2tmZCk7CisgICAgICBwcmludGYoImNsaWVudCBlcnJvcjogY29ubmVjdDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBubyBwcm9ncmVzcyBtZXRlciBwbGVhc2UgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfTk9QUk9HUkVTUywgMUwpOworCisgICAgLyogc2VuZCBhbGwgZGF0YSB0byB0aGlzIGZ1bmN0aW9uICAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZV9kYXRhKTsKKworICAgIC8qIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBnZXQgYSBzb2NrZXQgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfT1BFTlNPQ0tFVEZVTkNUSU9OLCBvcGVuc29ja2V0KTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfT1BFTlNPQ0tFVERBVEEsICZzb2NrZmQpOworCisgICAgLyogY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHNldCBvcHRpb25zIGZvciB0aGUgc29ja2V0ICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NPQ0tPUFRGVU5DVElPTiwgc29ja29wdF9jYWxsYmFjayk7CisKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMSk7CisKKyAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworCisgICAgaWYocmVzKSB7CisgICAgICBwcmludGYoImxpYmN1cmwgZXJyb3I6ICVkXG4iLCByZXMpOworICAgICAgcmV0dXJuIDQ7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9maWxldXBsb2FkLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2ZpbGV1cGxvYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTYzNjdiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9maWxldXBsb2FkLmMKQEAgLTAsMCArMSw3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlczsKKyAgc3RydWN0IHN0YXQgZmlsZV9pbmZvOworICBkb3VibGUgc3BlZWRfdXBsb2FkLCB0b3RhbF90aW1lOworICBGSUxFICpmZDsKKworICBmZCA9IGZvcGVuKCJkZWJ1Z2l0IiwgInJiIik7IC8qIG9wZW4gZmlsZSB0byB1cGxvYWQgKi8KKyAgaWYoIWZkKSB7CisKKyAgICByZXR1cm4gMTsgLyogY2FuJ3QgY29udGludWUgKi8KKyAgfQorCisgIC8qIHRvIGdldCB0aGUgZmlsZSBzaXplICovCisgIGlmKGZzdGF0KGZpbGVubyhmZCksICZmaWxlX2luZm8pICE9IDApIHsKKworICAgIHJldHVybiAxOyAvKiBjYW4ndCBjb250aW51ZSAqLworICB9CisKKyAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmKGN1cmwpIHsKKyAgICAvKiB1cGxvYWQgdG8gdGhpcyBwbGFjZSAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsCisgICAgICAgICAgICAgICAgICAgICAiZmlsZTovLy9ob21lL2Rhc3Qvc3JjL2N1cmwvZGVidWcvbmV3Iik7CisKKyAgICAvKiB0ZWxsIGl0IHRvICJ1cGxvYWQiIHRvIHRoZSBVUkwgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVBMT0FELCAxTCk7CisKKyAgICAvKiBzZXQgd2hlcmUgdG8gcmVhZCBmcm9tIChvbiBXaW5kb3dzIHlvdSBuZWVkIHRvIHVzZSBSRUFERlVOQ1RJT04gdG9vKSAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFEREFUQSwgZmQpOworCisgICAgLyogYW5kIGdpdmUgdGhlIHNpemUgb2YgdGhlIHVwbG9hZCAob3B0aW9uYWwpICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0lORklMRVNJWkVfTEFSR0UsCisgICAgICAgICAgICAgICAgICAgICAoY3VybF9vZmZfdClmaWxlX2luZm8uc3Rfc2l6ZSk7CisKKyAgICAvKiBlbmFibGUgdmVyYm9zZSBmb3IgZWFzaWVyIHRyYWNpbmcgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgICAvKiBub3cgZXh0cmFjdCB0cmFuc2ZlciBpbmZvICovCisgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fU1BFRURfVVBMT0FELCAmc3BlZWRfdXBsb2FkKTsKKyAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19UT1RBTF9USU1FLCAmdG90YWxfdGltZSk7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWVkOiAlLjNmIGJ5dGVzL3NlYyBkdXJpbmcgJS4zZiBzZWNvbmRzXG4iLAorICAgICAgICAgICAgc3BlZWRfdXBsb2FkLCB0b3RhbF90aW1lKTsKKworICAgIC8qIGFsd2F5cyBjbGVhbnVwICovCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2ZvcGVuLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2ZvcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlNWMwZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvZm9wZW4uYwpAQCAtMCwwICsxLDUyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhpcyBleGFtcGxlIHNvdXJjZSBjb2RlIGludHJvZHVjZXMgYSBjIGxpYnJhcnkgYnVmZmVyZWQgSS9PIGludGVyZmFjZSB0bworICogVVJMIHJlYWRzIGl0IHN1cHBvcnRzIGZvcGVuKCksIGZyZWFkKCksIGZnZXRzKCksIGZlb2YoKSwgZmNsb3NlKCksCisgKiByZXdpbmQoKS4gU3VwcG9ydGVkIGZ1bmN0aW9ucyBoYXZlIGlkZW50aWNhbCBwcm90b3R5cGVzIHRvIHRoZWlyIG5vcm1hbCBjCisgKiBsaWIgbmFtZXNha2VzIGFuZCBhcmUgcHJlY2VhZGVkIGJ5IHVybF8gLgorICoKKyAqIFVzaW5nIHRoaXMgY29kZSB5b3UgY2FuIHJlcGxhY2UgeW91ciBwcm9ncmFtJ3MgZm9wZW4oKSB3aXRoIHVybF9mb3BlbigpCisgKiBhbmQgZnJlYWQoKSB3aXRoIHVybF9mcmVhZCgpIGFuZCBpdCBiZWNvbWUgcG9zc2libGUgdG8gcmVhZCByZW1vdGUgc3RyZWFtcworICogaW5zdGVhZCBvZiAob25seSkgbG9jYWwgZmlsZXMuIExvY2FsIGZpbGVzIChpZSB0aG9zZSB0aGF0IGNhbiBiZSBkaXJlY3RseQorICogZm9wZW5lZCkgd2lsbCBkcm9wIGJhY2sgdG8gdXNpbmcgdGhlIHVuZGVybHlpbmcgY2xpYiBpbXBsZW1lbnRhdGlvbnMKKyAqCisgKiBTZWUgdGhlIG1haW4oKSBmdW5jdGlvbiBhdCB0aGUgYm90dG9tIHRoYXQgc2hvd3MgYW4gYXBwIHRoYXQgcmV0cml2ZXMgZnJvbSBhCisgKiBzcGVjaWZpZWQgdXJsIHVzaW5nIGZnZXRzKCkgYW5kIGZyZWFkKCkgYW5kIHNhdmVzIGFzIHR3byBvdXRwdXQgZmlsZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcworICoKKyAqIFJlLWltcGxlbWVudGVkIGJ5IFZpbmNlbnQgU2FuZGVycyA8dmluY2VAa3lsbGlra2kub3JnPiB3aXRoIGV4dGVuc2l2ZQorICogcmVmZXJlbmNlIHRvIG9yaWdpbmFsIGN1cmwgZXhhbXBsZSBjb2RlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGlzIGV4YW1wbGUgcmVxdWlyZXMgbGliY3VybCA3LjkuNyBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZm5kZWYgV0lOMzIKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2VudW0gZmN1cmxfdHlwZV9lIHsKKyAgQ0ZUWVBFX05PTkU9MCwKKyAgQ0ZUWVBFX0ZJTEU9MSwKKyAgQ0ZUWVBFX0NVUkw9MgorfTsKKworc3RydWN0IGZjdXJsX2RhdGEKK3sKKyAgZW51bSBmY3VybF90eXBlX2UgdHlwZTsgICAgIC8qIHR5cGUgb2YgaGFuZGxlICovCisgIHVuaW9uIHsKKyAgICBDVVJMICpjdXJsOworICAgIEZJTEUgKmZpbGU7CisgIH0gaGFuZGxlOyAgICAgICAgICAgICAgICAgICAvKiBoYW5kbGUgKi8KKworICBjaGFyICpidWZmZXI7ICAgICAgICAgICAgICAgLyogYnVmZmVyIHRvIHN0b3JlIGNhY2hlZCBkYXRhKi8KKyAgc2l6ZV90IGJ1ZmZlcl9sZW47ICAgICAgICAgIC8qIGN1cnJlbnRseSBhbGxvY2F0ZWQgYnVmZmVycyBsZW5ndGggKi8KKyAgc2l6ZV90IGJ1ZmZlcl9wb3M7ICAgICAgICAgIC8qIGVuZCBvZiBkYXRhIGluIGJ1ZmZlciovCisgIGludCBzdGlsbF9ydW5uaW5nOyAgICAgICAgICAvKiBJcyBiYWNrZ3JvdW5kIHVybCBmZXRjaCBzdGlsbCBpbiBwcm9ncmVzcyAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZmN1cmxfZGF0YSBVUkxfRklMRTsKKworLyogZXhwb3J0ZWQgZnVuY3Rpb25zICovCitVUkxfRklMRSAqdXJsX2ZvcGVuKGNvbnN0IGNoYXIgKnVybCxjb25zdCBjaGFyICpvcGVyYXRpb24pOworaW50IHVybF9mY2xvc2UoVVJMX0ZJTEUgKmZpbGUpOworaW50IHVybF9mZW9mKFVSTF9GSUxFICpmaWxlKTsKK3NpemVfdCB1cmxfZnJlYWQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCBVUkxfRklMRSAqZmlsZSk7CitjaGFyICogdXJsX2ZnZXRzKGNoYXIgKnB0ciwgc2l6ZV90IHNpemUsIFVSTF9GSUxFICpmaWxlKTsKK3ZvaWQgdXJsX3Jld2luZChVUkxfRklMRSAqZmlsZSk7CisKKy8qIHdlIHVzZSBhIGdsb2JhbCBvbmUgZm9yIGNvbnZlbmllbmNlICovCitDVVJMTSAqbXVsdGlfaGFuZGxlOworCisvKiBjdXJsIGNhbGxzIHRoaXMgcm91dGluZSB0byBnZXQgbW9yZSBkYXRhICovCitzdGF0aWMgc2l6ZV90IHdyaXRlX2NhbGxiYWNrKGNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJwKQoreworICBjaGFyICpuZXdidWZmOworICBzaXplX3QgcmVtYnVmZjsKKworICBVUkxfRklMRSAqdXJsID0gKFVSTF9GSUxFICopdXNlcnA7CisgIHNpemUgKj0gbml0ZW1zOworCisgIHJlbWJ1ZmY9dXJsLT5idWZmZXJfbGVuIC0gdXJsLT5idWZmZXJfcG9zOyAvKiByZW1haW5pbmcgc3BhY2UgaW4gYnVmZmVyICovCisKKyAgaWYoc2l6ZSA+IHJlbWJ1ZmYpIHsKKyAgICAvKiBub3QgZW5vdWdoIHNwYWNlIGluIGJ1ZmZlciAqLworICAgIG5ld2J1ZmY9cmVhbGxvYyh1cmwtPmJ1ZmZlcix1cmwtPmJ1ZmZlcl9sZW4gKyAoc2l6ZSAtIHJlbWJ1ZmYpKTsKKyAgICBpZihuZXdidWZmPT1OVUxMKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwiY2FsbGJhY2sgYnVmZmVyIGdyb3cgZmFpbGVkXG4iKTsKKyAgICAgIHNpemU9cmVtYnVmZjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiByZWFsbG9jIHN1Y2VlZGVkIGluY3JlYXNlIGJ1ZmZlciBzaXplKi8KKyAgICAgIHVybC0+YnVmZmVyX2xlbis9c2l6ZSAtIHJlbWJ1ZmY7CisgICAgICB1cmwtPmJ1ZmZlcj1uZXdidWZmOworICAgIH0KKyAgfQorCisgIG1lbWNweSgmdXJsLT5idWZmZXJbdXJsLT5idWZmZXJfcG9zXSwgYnVmZmVyLCBzaXplKTsKKyAgdXJsLT5idWZmZXJfcG9zICs9IHNpemU7CisKKyAgcmV0dXJuIHNpemU7Cit9CisKKy8qIHVzZSB0byBhdHRlbXB0IHRvIGZpbGwgdGhlIHJlYWQgYnVmZmVyIHVwIHRvIHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMgKi8KK3N0YXRpYyBpbnQgZmlsbF9idWZmZXIoVVJMX0ZJTEUgKmZpbGUsIHNpemVfdCB3YW50KQoreworICBmZF9zZXQgZmRyZWFkOworICBmZF9zZXQgZmR3cml0ZTsKKyAgZmRfc2V0IGZkZXhjZXA7CisgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisgIGludCByYzsKKworICAvKiBvbmx5IGF0dGVtcHQgdG8gZmlsbCBidWZmZXIgaWYgdHJhbnNhY3Rpb25zIHN0aWxsIHJ1bm5pbmcgYW5kIGJ1ZmZlcgorICAgKiBkb2VzbnQgZXhjZWVkIHJlcXVpcmVkIHNpemUgYWxyZWFkeQorICAgKi8KKyAgaWYoKCFmaWxlLT5zdGlsbF9ydW5uaW5nKSB8fCAoZmlsZS0+YnVmZmVyX3BvcyA+IHdhbnQpKQorICAgIHJldHVybiAwOworCisgIC8qIGF0dGVtcHQgdG8gZmlsbCBidWZmZXIgKi8KKyAgZG8geworICAgIGludCBtYXhmZCA9IC0xOworICAgIGxvbmcgY3VybF90aW1lbyA9IC0xOworCisgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICBGRF9aRVJPKCZmZHdyaXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKworICAgIC8qIHNldCBhIHN1aXRhYmxlIHRpbWVvdXQgdG8gZmFpbCBvbiAqLworICAgIHRpbWVvdXQudHZfc2VjID0gNjA7IC8qIDEgbWludXRlICovCisgICAgdGltZW91dC50dl91c2VjID0gMDsKKworICAgIGN1cmxfbXVsdGlfdGltZW91dChtdWx0aV9oYW5kbGUsICZjdXJsX3RpbWVvKTsKKyAgICBpZihjdXJsX3RpbWVvID49IDApIHsKKyAgICAgIHRpbWVvdXQudHZfc2VjID0gY3VybF90aW1lbyAvIDEwMDA7CisgICAgICBpZih0aW1lb3V0LnR2X3NlYyA+IDEpCisgICAgICAgIHRpbWVvdXQudHZfc2VjID0gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgdGltZW91dC50dl91c2VjID0gKGN1cmxfdGltZW8gJSAxMDAwKSAqIDEwMDA7CisgICAgfQorCisgICAgLyogZ2V0IGZpbGUgZGVzY3JpcHRvcnMgZnJvbSB0aGUgdHJhbnNmZXJzICovCisgICAgY3VybF9tdWx0aV9mZHNldChtdWx0aV9oYW5kbGUsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJm1heGZkKTsKKworICAgIC8qIEluIGEgcmVhbC13b3JsZCBwcm9ncmFtIHlvdSBPRiBDT1VSU0UgY2hlY2sgdGhlIHJldHVybiBjb2RlIG9mIHRoZQorICAgICAgIGZ1bmN0aW9uIGNhbGxzLiAgT24gc3VjY2VzcywgdGhlIHZhbHVlIG9mIG1heGZkIGlzIGd1YXJhbnRlZWQgdG8gYmUKKyAgICAgICBncmVhdGVyIG9yIGVxdWFsIHRoYW4gLTEuICBXZSBjYWxsIHNlbGVjdChtYXhmZCArIDEsIC4uLiksIHNwZWNpYWxseQorICAgICAgIGluIGNhc2Ugb2YgKG1heGZkID09IC0xKSwgd2UgY2FsbCBzZWxlY3QoMCwgLi4uKSwgd2hpY2ggaXMgYmFzaWNhbGx5CisgICAgICAgZXF1YWwgdG8gc2xlZXAuICovCisKKyAgICByYyA9IHNlbGVjdChtYXhmZCsxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZ0aW1lb3V0KTsKKworICAgIHN3aXRjaChyYykgeworICAgIGNhc2UgLTE6CisgICAgICAvKiBzZWxlY3QgZXJyb3IgKi8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAwOgorICAgIGRlZmF1bHQ6CisgICAgICAvKiB0aW1lb3V0IG9yIHJlYWRhYmxlL3dyaXRhYmxlIHNvY2tldHMgKi8KKyAgICAgIGN1cmxfbXVsdGlfcGVyZm9ybShtdWx0aV9oYW5kbGUsICZmaWxlLT5zdGlsbF9ydW5uaW5nKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfSB3aGlsZShmaWxlLT5zdGlsbF9ydW5uaW5nICYmIChmaWxlLT5idWZmZXJfcG9zIDwgd2FudCkpOworICByZXR1cm4gMTsKK30KKworLyogdXNlIHRvIHJlbW92ZSB3YW50IGJ5dGVzIGZyb20gdGhlIGZyb250IG9mIGEgZmlsZXMgYnVmZmVyICovCitzdGF0aWMgaW50IHVzZV9idWZmZXIoVVJMX0ZJTEUgKmZpbGUsaW50IHdhbnQpCit7CisgIC8qIHNvcnQgb3V0IGJ1ZmZlciAqLworICBpZigoZmlsZS0+YnVmZmVyX3BvcyAtIHdhbnQpIDw9MCkgeworICAgIC8qIGRpdGNoIGJ1ZmZlciAtIHdyaXRlIHdpbGwgcmVjcmVhdGUgKi8KKyAgICBpZihmaWxlLT5idWZmZXIpCisgICAgICBmcmVlKGZpbGUtPmJ1ZmZlcik7CisKKyAgICBmaWxlLT5idWZmZXI9TlVMTDsKKyAgICBmaWxlLT5idWZmZXJfcG9zPTA7CisgICAgZmlsZS0+YnVmZmVyX2xlbj0wOworICB9CisgIGVsc2UgeworICAgIC8qIG1vdmUgcmVzdCBkb3duIG1ha2UgaXQgYXZhaWxhYmxlIGZvciBsYXRlciAqLworICAgIG1lbW1vdmUoZmlsZS0+YnVmZmVyLAorICAgICAgICAgICAgJmZpbGUtPmJ1ZmZlclt3YW50XSwKKyAgICAgICAgICAgIChmaWxlLT5idWZmZXJfcG9zIC0gd2FudCkpOworCisgICAgZmlsZS0+YnVmZmVyX3BvcyAtPSB3YW50OworICB9CisgIHJldHVybiAwOworfQorCitVUkxfRklMRSAqdXJsX2ZvcGVuKGNvbnN0IGNoYXIgKnVybCxjb25zdCBjaGFyICpvcGVyYXRpb24pCit7CisgIC8qIHRoaXMgY29kZSBjb3VsZCBjaGVjayBmb3IgVVJMcyBvciB0eXBlcyBpbiB0aGUgJ3VybCcgYW5kCisgICAgIGJhc2ljbHkgdXNlIHRoZSByZWFsIGZvcGVuKCkgZm9yIHN0YW5kYXJkIGZpbGVzICovCisKKyAgVVJMX0ZJTEUgKmZpbGU7CisgICh2b2lkKW9wZXJhdGlvbjsKKworICBmaWxlID0gbWFsbG9jKHNpemVvZihVUkxfRklMRSkpOworICBpZighZmlsZSkKKyAgICByZXR1cm4gTlVMTDsKKworICBtZW1zZXQoZmlsZSwgMCwgc2l6ZW9mKFVSTF9GSUxFKSk7CisKKyAgaWYoKGZpbGUtPmhhbmRsZS5maWxlPWZvcGVuKHVybCxvcGVyYXRpb24pKSkKKyAgICBmaWxlLT50eXBlID0gQ0ZUWVBFX0ZJTEU7IC8qIG1hcmtlZCBhcyBVUkwgKi8KKworICBlbHNlIHsKKyAgICBmaWxlLT50eXBlID0gQ0ZUWVBFX0NVUkw7IC8qIG1hcmtlZCBhcyBVUkwgKi8KKyAgICBmaWxlLT5oYW5kbGUuY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGZpbGUtPmhhbmRsZS5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGZpbGUtPmhhbmRsZS5jdXJsLCBDVVJMT1BUX1dSSVRFREFUQSwgZmlsZSk7CisgICAgY3VybF9lYXN5X3NldG9wdChmaWxlLT5oYW5kbGUuY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAwTCk7CisgICAgY3VybF9lYXN5X3NldG9wdChmaWxlLT5oYW5kbGUuY3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZV9jYWxsYmFjayk7CisKKyAgICBpZighbXVsdGlfaGFuZGxlKQorICAgICAgbXVsdGlfaGFuZGxlID0gY3VybF9tdWx0aV9pbml0KCk7CisKKyAgICBjdXJsX211bHRpX2FkZF9oYW5kbGUobXVsdGlfaGFuZGxlLCBmaWxlLT5oYW5kbGUuY3VybCk7CisKKyAgICAvKiBsZXRzIHN0YXJ0IHRoZSBmZXRjaCAqLworICAgIGN1cmxfbXVsdGlfcGVyZm9ybShtdWx0aV9oYW5kbGUsICZmaWxlLT5zdGlsbF9ydW5uaW5nKTsKKworICAgIGlmKChmaWxlLT5idWZmZXJfcG9zID09IDApICYmICghZmlsZS0+c3RpbGxfcnVubmluZykpIHsKKyAgICAgIC8qIGlmIHN0aWxsX3J1bm5pbmcgaXMgMCBub3csIHdlIHNob3VsZCByZXR1cm4gTlVMTCAqLworCisgICAgICAvKiBtYWtlIHN1cmUgdGhlIGVhc3kgaGFuZGxlIGlzIG5vdCBpbiB0aGUgbXVsdGkgaGFuZGxlIGFueW1vcmUgKi8KKyAgICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShtdWx0aV9oYW5kbGUsIGZpbGUtPmhhbmRsZS5jdXJsKTsKKworICAgICAgLyogY2xlYW51cCAqLworICAgICAgY3VybF9lYXN5X2NsZWFudXAoZmlsZS0+aGFuZGxlLmN1cmwpOworCisgICAgICBmcmVlKGZpbGUpOworCisgICAgICBmaWxlID0gTlVMTDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGZpbGU7Cit9CisKK2ludCB1cmxfZmNsb3NlKFVSTF9GSUxFICpmaWxlKQoreworICBpbnQgcmV0PTA7LyogZGVmYXVsdCBpcyBnb29kIHJldHVybiAqLworCisgIHN3aXRjaChmaWxlLT50eXBlKSB7CisgIGNhc2UgQ0ZUWVBFX0ZJTEU6CisgICAgcmV0PWZjbG9zZShmaWxlLT5oYW5kbGUuZmlsZSk7IC8qIHBhc3N0aHJvdWdoICovCisgICAgYnJlYWs7CisKKyAgY2FzZSBDRlRZUEVfQ1VSTDoKKyAgICAvKiBtYWtlIHN1cmUgdGhlIGVhc3kgaGFuZGxlIGlzIG5vdCBpbiB0aGUgbXVsdGkgaGFuZGxlIGFueW1vcmUgKi8KKyAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUobXVsdGlfaGFuZGxlLCBmaWxlLT5oYW5kbGUuY3VybCk7CisKKyAgICAvKiBjbGVhbnVwICovCisgICAgY3VybF9lYXN5X2NsZWFudXAoZmlsZS0+aGFuZGxlLmN1cmwpOworICAgIGJyZWFrOworCisgIGRlZmF1bHQ6IC8qIHVua25vd24gb3Igc3VwcG9ydGVkIHR5cGUgLSBvaCBkZWFyICovCisgICAgcmV0PUVPRjsKKyAgICBlcnJubz1FQkFERjsKKyAgICBicmVhazsKKyAgfQorCisgIGlmKGZpbGUtPmJ1ZmZlcikKKyAgICBmcmVlKGZpbGUtPmJ1ZmZlcik7LyogZnJlZSBhbnkgYWxsb2NhdGVkIGJ1ZmZlciBzcGFjZSAqLworCisgIGZyZWUoZmlsZSk7CisKKyAgcmV0dXJuIHJldDsKK30KKworaW50IHVybF9mZW9mKFVSTF9GSUxFICpmaWxlKQoreworICBpbnQgcmV0PTA7CisKKyAgc3dpdGNoKGZpbGUtPnR5cGUpIHsKKyAgY2FzZSBDRlRZUEVfRklMRToKKyAgICByZXQ9ZmVvZihmaWxlLT5oYW5kbGUuZmlsZSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDRlRZUEVfQ1VSTDoKKyAgICBpZigoZmlsZS0+YnVmZmVyX3BvcyA9PSAwKSAmJiAoIWZpbGUtPnN0aWxsX3J1bm5pbmcpKQorICAgICAgcmV0ID0gMTsKKyAgICBicmVhazsKKworICBkZWZhdWx0OiAvKiB1bmtub3duIG9yIHN1cHBvcnRlZCB0eXBlIC0gb2ggZGVhciAqLworICAgIHJldD0tMTsKKyAgICBlcnJubz1FQkFERjsKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gcmV0OworfQorCitzaXplX3QgdXJsX2ZyZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgVVJMX0ZJTEUgKmZpbGUpCit7CisgIHNpemVfdCB3YW50OworCisgIHN3aXRjaChmaWxlLT50eXBlKSB7CisgIGNhc2UgQ0ZUWVBFX0ZJTEU6CisgICAgd2FudD1mcmVhZChwdHIsc2l6ZSxubWVtYixmaWxlLT5oYW5kbGUuZmlsZSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDRlRZUEVfQ1VSTDoKKyAgICB3YW50ID0gbm1lbWIgKiBzaXplOworCisgICAgZmlsbF9idWZmZXIoZmlsZSx3YW50KTsKKworICAgIC8qIGNoZWNrIGlmIHRoZXJlcyBkYXRhIGluIHRoZSBidWZmZXIgLSBpZiBub3QgZmlsbF9idWZmZXIoKQorICAgICAqIGVpdGhlciBlcnJvcmVkIG9yIEVPRiAqLworICAgIGlmKCFmaWxlLT5idWZmZXJfcG9zKQorICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBlbnN1cmUgb25seSBhdmFpbGFibGUgZGF0YSBpcyBjb25zaWRlcmVkICovCisgICAgaWYoZmlsZS0+YnVmZmVyX3BvcyA8IHdhbnQpCisgICAgICB3YW50ID0gZmlsZS0+YnVmZmVyX3BvczsKKworICAgIC8qIHhmZXIgZGF0YSB0byBjYWxsZXIgKi8KKyAgICBtZW1jcHkocHRyLCBmaWxlLT5idWZmZXIsIHdhbnQpOworCisgICAgdXNlX2J1ZmZlcihmaWxlLHdhbnQpOworCisgICAgd2FudCA9IHdhbnQgLyBzaXplOyAgICAgLyogbnVtYmVyIG9mIGl0ZW1zICovCisgICAgYnJlYWs7CisKKyAgZGVmYXVsdDogLyogdW5rbm93biBvciBzdXBwb3J0ZWQgdHlwZSAtIG9oIGRlYXIgKi8KKyAgICB3YW50PTA7CisgICAgZXJybm89RUJBREY7CisgICAgYnJlYWs7CisKKyAgfQorICByZXR1cm4gd2FudDsKK30KKworY2hhciAqdXJsX2ZnZXRzKGNoYXIgKnB0ciwgc2l6ZV90IHNpemUsIFVSTF9GSUxFICpmaWxlKQoreworICBzaXplX3Qgd2FudCA9IHNpemUgLSAxOy8qIGFsd2F5cyBuZWVkIHRvIGxlYXZlIHJvb20gZm9yIHplcm8gdGVybWluYXRpb24gKi8KKyAgc2l6ZV90IGxvb3A7CisKKyAgc3dpdGNoKGZpbGUtPnR5cGUpIHsKKyAgY2FzZSBDRlRZUEVfRklMRToKKyAgICBwdHIgPSBmZ2V0cyhwdHIsc2l6ZSxmaWxlLT5oYW5kbGUuZmlsZSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDRlRZUEVfQ1VSTDoKKyAgICBmaWxsX2J1ZmZlcihmaWxlLHdhbnQpOworCisgICAgLyogY2hlY2sgaWYgdGhlcmVzIGRhdGEgaW4gdGhlIGJ1ZmZlciAtIGlmIG5vdCBmaWxsIGVpdGhlciBlcnJvcmVkIG9yCisgICAgICogRU9GICovCisgICAgaWYoIWZpbGUtPmJ1ZmZlcl9wb3MpCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIGVuc3VyZSBvbmx5IGF2YWlsYWJsZSBkYXRhIGlzIGNvbnNpZGVyZWQgKi8KKyAgICBpZihmaWxlLT5idWZmZXJfcG9zIDwgd2FudCkKKyAgICAgIHdhbnQgPSBmaWxlLT5idWZmZXJfcG9zOworCisgICAgLypidWZmZXIgY29udGFpbnMgZGF0YSAqLworICAgIC8qIGxvb2sgZm9yIG5ld2xpbmUgb3IgZW9mICovCisgICAgZm9yKGxvb3A9MDtsb29wIDwgd2FudDtsb29wKyspIHsKKyAgICAgIGlmKGZpbGUtPmJ1ZmZlcltsb29wXSA9PSAnXG4nKSB7CisgICAgICAgIHdhbnQ9bG9vcCsxOy8qIGluY2x1ZGUgbmV3bGluZSAqLworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiB4ZmVyIGRhdGEgdG8gY2FsbGVyICovCisgICAgbWVtY3B5KHB0ciwgZmlsZS0+YnVmZmVyLCB3YW50KTsKKyAgICBwdHJbd2FudF09MDsvKiBhbGx3YXlzIG51bGwgdGVybWluYXRlICovCisKKyAgICB1c2VfYnVmZmVyKGZpbGUsd2FudCk7CisKKyAgICBicmVhazsKKworICBkZWZhdWx0OiAvKiB1bmtub3duIG9yIHN1cHBvcnRlZCB0eXBlIC0gb2ggZGVhciAqLworICAgIHB0cj1OVUxMOworICAgIGVycm5vPUVCQURGOworICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHB0cjsvKnN1Y2Nlc3MgKi8KK30KKwordm9pZCB1cmxfcmV3aW5kKFVSTF9GSUxFICpmaWxlKQoreworICBzd2l0Y2goZmlsZS0+dHlwZSkgeworICBjYXNlIENGVFlQRV9GSUxFOgorICAgIHJld2luZChmaWxlLT5oYW5kbGUuZmlsZSk7IC8qIHBhc3N0aHJvdWdoICovCisgICAgYnJlYWs7CisKKyAgY2FzZSBDRlRZUEVfQ1VSTDoKKyAgICAvKiBoYWx0IHRyYW5zYWN0aW9uICovCisgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKG11bHRpX2hhbmRsZSwgZmlsZS0+aGFuZGxlLmN1cmwpOworCisgICAgLyogcmVzdGFydCAqLworICAgIGN1cmxfbXVsdGlfYWRkX2hhbmRsZShtdWx0aV9oYW5kbGUsIGZpbGUtPmhhbmRsZS5jdXJsKTsKKworICAgIC8qIGRpdGNoIGJ1ZmZlciAtIHdyaXRlIHdpbGwgcmVjcmVhdGUgLSByZXNldHMgc3RyZWFtIHBvcyovCisgICAgaWYoZmlsZS0+YnVmZmVyKQorICAgICAgZnJlZShmaWxlLT5idWZmZXIpOworCisgICAgZmlsZS0+YnVmZmVyPU5VTEw7CisgICAgZmlsZS0+YnVmZmVyX3Bvcz0wOworICAgIGZpbGUtPmJ1ZmZlcl9sZW49MDsKKworICAgIGJyZWFrOworCisgIGRlZmF1bHQ6IC8qIHVua25vd24gb3Igc3VwcG9ydGVkIHR5cGUgLSBvaCBkZWFyICovCisgICAgYnJlYWs7CisgIH0KK30KKworLyogU21hbGwgbWFpbiBwcm9ncmFtIHRvIHJldHJpdmUgZnJvbSBhIHVybCB1c2luZyBmZ2V0cyBhbmQgZnJlYWQgc2F2aW5nIHRoZQorICogb3V0cHV0IHRvIHR3byB0ZXN0IGZpbGVzIChub3RlIHRoZSBmZ2V0cyBtZXRob2Qgd2lsbCBjb3JydXB0IGJpbmFyeSBmaWxlcyBpZgorICogdGhleSBjb250YWluIDAgY2hhcnMgKi8KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIFVSTF9GSUxFICpoYW5kbGU7CisgIEZJTEUgKm91dGY7CisKKyAgaW50IG5yZWFkOworICBjaGFyIGJ1ZmZlclsyNTZdOworICBjb25zdCBjaGFyICp1cmw7CisKKyAgaWYoYXJnYyA8IDIpCisgICAgdXJsPSJodHRwOi8vMTkyLjE2OC43LjMvdGVzdGZpbGUiOy8qIGRlZmF1bHQgdG8gdGVzdHVybCAqLworICBlbHNlCisgICAgdXJsPWFyZ3ZbMV07LyogdXNlIHBhc3NlZCB1cmwgKi8KKworICAvKiBjb3B5IGZyb20gdXJsIGxpbmUgYnkgbGluZSB3aXRoIGZnZXRzICovCisgIG91dGY9Zm9wZW4oImZnZXRzLnRlc3QiLCJ3KyIpOworICBpZighb3V0ZikgeworICAgIHBlcnJvcigiY291bGRuJ3Qgb3BlbiBmZ2V0cyBvdXRwdXQgZmlsZVxuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBoYW5kbGUgPSB1cmxfZm9wZW4odXJsLCAiciIpOworICBpZighaGFuZGxlKSB7CisgICAgcHJpbnRmKCJjb3VsZG4ndCB1cmxfZm9wZW4oKSAlc1xuIiwgdXJsKTsKKyAgICBmY2xvc2Uob3V0Zik7CisgICAgcmV0dXJuIDI7CisgIH0KKworICB3aGlsZSghdXJsX2Zlb2YoaGFuZGxlKSkgeworICAgIHVybF9mZ2V0cyhidWZmZXIsc2l6ZW9mKGJ1ZmZlciksaGFuZGxlKTsKKyAgICBmd3JpdGUoYnVmZmVyLDEsc3RybGVuKGJ1ZmZlciksb3V0Zik7CisgIH0KKworICB1cmxfZmNsb3NlKGhhbmRsZSk7CisKKyAgZmNsb3NlKG91dGYpOworCisKKyAgLyogQ29weSBmcm9tIHVybCB3aXRoIGZyZWFkICovCisgIG91dGY9Zm9wZW4oImZyZWFkLnRlc3QiLCJ3KyIpOworICBpZighb3V0ZikgeworICAgIHBlcnJvcigiY291bGRuJ3Qgb3BlbiBmcmVhZCBvdXRwdXQgZmlsZVxuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBoYW5kbGUgPSB1cmxfZm9wZW4oInRlc3RmaWxlIiwgInIiKTsKKyAgaWYoIWhhbmRsZSkgeworICAgIHByaW50ZigiY291bGRuJ3QgdXJsX2ZvcGVuKCkgdGVzdGZpbGVcbiIpOworICAgIGZjbG9zZShvdXRmKTsKKyAgICByZXR1cm4gMjsKKyAgfQorCisgIGRvIHsKKyAgICBucmVhZCA9IHVybF9mcmVhZChidWZmZXIsIDEsc2l6ZW9mKGJ1ZmZlciksIGhhbmRsZSk7CisgICAgZndyaXRlKGJ1ZmZlciwxLG5yZWFkLG91dGYpOworICB9IHdoaWxlKG5yZWFkKTsKKworICB1cmxfZmNsb3NlKGhhbmRsZSk7CisKKyAgZmNsb3NlKG91dGYpOworCisKKyAgLyogVGVzdCByZXdpbmQgKi8KKyAgb3V0Zj1mb3BlbigicmV3aW5kLnRlc3QiLCJ3KyIpOworICBpZighb3V0ZikgeworICAgIHBlcnJvcigiY291bGRuJ3Qgb3BlbiBmcmVhZCBvdXRwdXQgZmlsZVxuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBoYW5kbGUgPSB1cmxfZm9wZW4oInRlc3RmaWxlIiwgInIiKTsKKyAgaWYoIWhhbmRsZSkgeworICAgIHByaW50ZigiY291bGRuJ3QgdXJsX2ZvcGVuKCkgdGVzdGZpbGVcbiIpOworICAgIGZjbG9zZShvdXRmKTsKKyAgICByZXR1cm4gMjsKKyAgfQorCisgIG5yZWFkID0gdXJsX2ZyZWFkKGJ1ZmZlciwgMSxzaXplb2YoYnVmZmVyKSwgaGFuZGxlKTsKKyAgZndyaXRlKGJ1ZmZlciwxLG5yZWFkLG91dGYpOworICB1cmxfcmV3aW5kKGhhbmRsZSk7CisKKyAgYnVmZmVyWzBdPSdcbic7CisgIGZ3cml0ZShidWZmZXIsMSwxLG91dGYpOworCisgIG5yZWFkID0gdXJsX2ZyZWFkKGJ1ZmZlciwgMSxzaXplb2YoYnVmZmVyKSwgaGFuZGxlKTsKKyAgZndyaXRlKGJ1ZmZlciwxLG5yZWFkLG91dGYpOworCisKKyAgdXJsX2ZjbG9zZShoYW5kbGUpOworCisgIGZjbG9zZShvdXRmKTsKKworCisgIHJldHVybiAwOy8qIGFsbCBkb25lICovCit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2Z0cC13aWxkY2FyZC5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9mdHAtd2lsZGNhcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkyY2E2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9mdHAtd2lsZGNhcmQuYwpAQCAtMCwwICsxLDE0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworc3RydWN0IGNhbGxiYWNrX2RhdGEgeworICBGSUxFICpvdXRwdXQ7Cit9OworCitzdGF0aWMgbG9uZyBmaWxlX2lzX2NvbW1pbmcoc3RydWN0IGN1cmxfZmlsZWluZm8gKmZpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYWxsYmFja19kYXRhICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZW1haW5zKTsKKworc3RhdGljIGxvbmcgZmlsZV9pc19kb3dubG9hZGVkKHN0cnVjdCBjYWxsYmFja19kYXRhICpkYXRhKTsKKworc3RhdGljIHNpemVfdCB3cml0ZV9pdChjaGFyICpidWZmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2FsbGJhY2tfZGF0YSAqZGF0YSk7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IHJjID0gQ1VSTEVfT0s7CisKKyAgLyogY3VybCBlYXN5IGhhbmRsZSAqLworICBDVVJMICpoYW5kbGU7CisKKyAgLyogaGVscCBkYXRhICovCisgIHN0cnVjdCBjYWxsYmFja19kYXRhIGRhdGEgPSB7IDAgfTsKKworICAvKiBnbG9iYWwgaW5pdGlhbGl6YXRpb24gKi8KKyAgcmMgPSBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisgIGlmKHJjKQorICAgIHJldHVybiByYzsKKworICAvKiBpbml0aWFsaXphdGlvbiBvZiBlYXN5IGhhbmRsZSAqLworICBoYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZighaGFuZGxlKSB7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgLyogdHVybiBvbiB3aWxkY2FyZCBtYXRjaGluZyAqLworICBjdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9XSUxEQ0FSRE1BVENILCAxTCk7CisKKyAgLyogY2FsbGJhY2sgaXMgY2FsbGVkIGJlZm9yZSBkb3dubG9hZCBvZiBjb25jcmV0ZSBmaWxlIHN0YXJ0ZWQgKi8KKyAgY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfQ0hVTktfQkdOX0ZVTkNUSU9OLCBmaWxlX2lzX2NvbW1pbmcpOworCisgIC8qIGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlciBkYXRhIGZyb20gdGhlIGZpbGUgaGF2ZSBiZWVuIHRyYW5zZmVycmVkICovCisgIGN1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX0NIVU5LX0VORF9GVU5DVElPTiwgZmlsZV9pc19kb3dubG9hZGVkKTsKKworICAvKiB0aGlzIGNhbGxiYWNrIHdpbGwgd3JpdGUgY29udGVudHMgaW50byBmaWxlcyAqLworICBjdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZV9pdCk7CisKKyAgLyogcHV0IHRyYW5zZmVyIGRhdGEgaW50byBjYWxsYmFja3MgKi8KKyAgY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfQ0hVTktfREFUQSwgJmRhdGEpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9XUklURURBVEEsICZkYXRhKTsKKworICAvKiBjdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7ICovCisKKyAgLyogc2V0IGFuIFVSTCBjb250YWluaW5nIHdpbGRjYXJkIHBhdHRlcm4gKG9ubHkgaW4gdGhlIGxhc3QgcGFydCkgKi8KKyAgaWYoYXJnYyA9PSAyKQorICAgIGN1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX1VSTCwgYXJndlsxXSk7CisgIGVsc2UKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9VUkwsICJmdHA6Ly9leGFtcGxlLmNvbS90ZXN0LyoiKTsKKworICAvKiBhbmQgc3RhcnQgdHJhbnNmZXIhICovCisgIHJjID0gY3VybF9lYXN5X3BlcmZvcm0oaGFuZGxlKTsKKworICBjdXJsX2Vhc3lfY2xlYW51cChoYW5kbGUpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgIHJldHVybiByYzsKK30KKworc3RhdGljIGxvbmcgZmlsZV9pc19jb21taW5nKHN0cnVjdCBjdXJsX2ZpbGVpbmZvICpmaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2FsbGJhY2tfZGF0YSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtYWlucykKK3sKKyAgcHJpbnRmKCIlM2QgJTQwcyAlMTBsdUIgIiwgcmVtYWlucywgZmluZm8tPmZpbGVuYW1lLAorICAgICAgICAgKHVuc2lnbmVkIGxvbmcpZmluZm8tPnNpemUpOworCisgIHN3aXRjaChmaW5mby0+ZmlsZXR5cGUpIHsKKyAgY2FzZSBDVVJMRklMRVRZUEVfRElSRUNUT1JZOgorICAgIHByaW50ZigiIERJUlxuIik7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTEZJTEVUWVBFX0ZJTEU6CisgICAgcHJpbnRmKCJGSUxFICIpOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIHByaW50ZigiT1RIRVJcbiIpOworICAgIGJyZWFrOworICB9CisKKyAgaWYoZmluZm8tPmZpbGV0eXBlID09IENVUkxGSUxFVFlQRV9GSUxFKSB7CisgICAgLyogZG8gbm90IHRyYW5zZmVyIGZpbGVzID49IDUwQiAqLworICAgIGlmKGZpbmZvLT5zaXplID4gNTApIHsKKyAgICAgIHByaW50ZigiU0tJUFBFRFxuIik7CisgICAgICByZXR1cm4gQ1VSTF9DSFVOS19CR05fRlVOQ19TS0lQOworICAgIH0KKworICAgIGRhdGEtPm91dHB1dCA9IGZvcGVuKGZpbmZvLT5maWxlbmFtZSwgInciKTsKKyAgICBpZighZGF0YS0+b3V0cHV0KSB7CisgICAgICByZXR1cm4gQ1VSTF9DSFVOS19CR05fRlVOQ19GQUlMOworICAgIH0KKyAgfQorCisgIHJldHVybiBDVVJMX0NIVU5LX0JHTl9GVU5DX09LOworfQorCitzdGF0aWMgbG9uZyBmaWxlX2lzX2Rvd25sb2FkZWQoc3RydWN0IGNhbGxiYWNrX2RhdGEgKmRhdGEpCit7CisgIGlmKGRhdGEtPm91dHB1dCkgeworICAgIHByaW50ZigiRE9XTkxPQURFRFxuIik7CisgICAgZmNsb3NlKGRhdGEtPm91dHB1dCk7CisgICAgZGF0YS0+b3V0cHV0ID0gMHgwOworICB9CisgIHJldHVybiBDVVJMX0NIVU5LX0VORF9GVU5DX09LOworfQorCitzdGF0aWMgc2l6ZV90IHdyaXRlX2l0KGNoYXIgKmJ1ZmYsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYWxsYmFja19kYXRhICpkYXRhKQoreworICBzaXplX3Qgd3JpdHRlbiA9IDA7CisgIGlmKGRhdGEtPm91dHB1dCkKKyAgICB3cml0dGVuID0gZndyaXRlKGJ1ZmYsIHNpemUsIG5tZW1iLCBkYXRhLT5vdXRwdXQpOworICBlbHNlCisgICAgLyogbGlzdGluZyBvdXRwdXQgKi8KKyAgICB3cml0dGVuID0gZndyaXRlKGJ1ZmYsIHNpemUsIG5tZW1iLCBzdGRvdXQpOworICByZXR1cm4gd3JpdHRlbjsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvZnRwZ2V0LmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2Z0cGdldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYjQyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2Z0cGdldC5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworLyoKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBzaG93aW5nIGhvdyB0byBnZXQgYSBzaW5nbGUgZmlsZSBmcm9tIGFuIEZUUCBzZXJ2ZXIuCisgKiBJdCBkZWxheXMgdGhlIGFjdHVhbCBkZXN0aW5hdGlvbiBmaWxlIGNyZWF0aW9uIHVudGlsIHRoZSBmaXJzdCB3cml0ZQorICogY2FsbGJhY2sgc28gdGhhdCBpdCB3b24ndCBjcmVhdGUgYW4gZW1wdHkgZmlsZSBpbiBjYXNlIHRoZSByZW1vdGUgZmlsZQorICogZG9lc24ndCBleGlzdCBvciBzb21ldGhpbmcgZWxzZSBmYWlscy4KKyAqLworCitzdHJ1Y3QgRnRwRmlsZSB7CisgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworICBGSUxFICpzdHJlYW07Cit9OworCitzdGF0aWMgc2l6ZV90IG15X2Z3cml0ZSh2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnN0cmVhbSkKK3sKKyAgc3RydWN0IEZ0cEZpbGUgKm91dD0oc3RydWN0IEZ0cEZpbGUgKilzdHJlYW07CisgIGlmKG91dCAmJiAhb3V0LT5zdHJlYW0pIHsKKyAgICAvKiBvcGVuIGZpbGUgZm9yIHdyaXRpbmcgKi8KKyAgICBvdXQtPnN0cmVhbT1mb3BlbihvdXQtPmZpbGVuYW1lLCAid2IiKTsKKyAgICBpZighb3V0LT5zdHJlYW0pCisgICAgICByZXR1cm4gLTE7IC8qIGZhaWx1cmUsIGNhbid0IG9wZW4gZmlsZSB0byB3cml0ZSAqLworICB9CisgIHJldHVybiBmd3JpdGUoYnVmZmVyLCBzaXplLCBubWVtYiwgb3V0LT5zdHJlYW0pOworfQorCisKK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlczsKKyAgc3RydWN0IEZ0cEZpbGUgZnRwZmlsZT17CisgICAgImN1cmwudGFyLmd6IiwgLyogbmFtZSB0byBzdG9yZSB0aGUgZmlsZSBhcyBpZiBzdWNjZXNmdWwgKi8KKyAgICBOVUxMCisgIH07CisKKyAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9ERUZBVUxUKTsKKworICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYoY3VybCkgeworICAgIC8qCisgICAgICogWW91IGJldHRlciByZXBsYWNlIHRoZSBVUkwgd2l0aCBvbmUgdGhhdCB3b3JrcyEKKyAgICAgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLAorICAgICAgICAgICAgICAgICAgICAgImZ0cDovL2Z0cC5leGFtcGxlLmNvbS9wdWIvd3d3L3V0aWxpdGllcy9jdXJsL2N1cmwtNy45LjIudGFyLmd6Iik7CisgICAgLyogRGVmaW5lIG91ciBjYWxsYmFjayB0byBnZXQgY2FsbGVkIHdoZW4gdGhlcmUncyBkYXRhIHRvIGJlIHdyaXR0ZW4gKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgbXlfZndyaXRlKTsKKyAgICAvKiBTZXQgYSBwb2ludGVyIHRvIG91ciBzdHJ1Y3QgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVEQVRBLCAmZnRwZmlsZSk7CisKKyAgICAvKiBTd2l0Y2ggb24gZnVsbCBwcm90b2NvbC9kZWJ1ZyBvdXRwdXQgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgICAvKiBhbHdheXMgY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworCisgICAgaWYoQ1VSTEVfT0sgIT0gcmVzKSB7CisgICAgICAvKiB3ZSBmYWlsZWQgKi8KKyAgICAgIGZwcmludGYoc3RkZXJyLCAiY3VybCB0b2xkIHVzICVkXG4iLCByZXMpOworICAgIH0KKyAgfQorCisgIGlmKGZ0cGZpbGUuc3RyZWFtKQorICAgIGZjbG9zZShmdHBmaWxlLnN0cmVhbSk7IC8qIGNsb3NlIHRoZSBsb2NhbCBmaWxlICovCisKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9mdHBnZXRpbmZvLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2Z0cGdldGluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDc0NjY5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9mdHBnZXRpbmZvLmMKQEAgLTAsMCArMSw4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisvKgorICogVGhpcyBpcyBhbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIGNoZWNrIGEgc2luZ2xlIGZpbGUncyBzaXplIGFuZCBtdGltZQorICogZnJvbSBhbiBGVFAgc2VydmVyLgorICovCisKK3N0YXRpYyBzaXplX3QgdGhyb3dfYXdheSh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKmRhdGEpCit7CisgICh2b2lkKXB0cjsKKyAgKHZvaWQpZGF0YTsKKyAgLyogd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBoZWFkZXJzIGl0c2VsZiwKKyAgICAgc28gd2Ugb25seSByZXR1cm4gdGhlIHNpemUgd2Ugd291bGQgaGF2ZSBzYXZlZCAuLi4gKi8KKyAgcmV0dXJuIChzaXplX3QpKHNpemUgKiBubWVtYik7Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisgIGNoYXIgZnRwdXJsW10gPSAiZnRwOi8vZnRwLmV4YW1wbGUuY29tL2dudS9iaW51dGlscy9iaW51dGlscy0yLjE5LjEudGFyLmJ6MiI7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlczsKKyAgY29uc3QgdGltZV90IGZpbGV0aW1lOworICBjb25zdCBkb3VibGUgZmlsZXNpemU7CisgIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gc3RycmNocihmdHB1cmwsICcvJykgKyAxOworCisgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfREVGQVVMVCk7CisKKyAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmKGN1cmwpIHsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBmdHB1cmwpOworICAgIC8qIE5vIGRvd25sb2FkIGlmIHRoZSBmaWxlICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX05PQk9EWSwgMUwpOworICAgIC8qIEFzayBmb3IgZmlsZXRpbWUgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfRklMRVRJTUUsIDFMKTsKKyAgICAvKiBObyBoZWFkZXIgb3V0cHV0OiBUT0RPIDE0LjEgaHR0cC1zdHlsZSBIRUFEIG91dHB1dCBmb3IgZnRwICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCB0aHJvd19hd2F5KTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSLCAwTCk7CisgICAgLyogU3dpdGNoIG9uIGZ1bGwgcHJvdG9jb2wvZGVidWcgb3V0cHV0ICovCisgICAgLyogY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsgKi8KKworICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAgaWYoQ1VSTEVfT0sgPT0gcmVzKSB7CisgICAgICAvKiBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9jdXJsX2Vhc3lfZ2V0aW5mby5odG1sICovCisgICAgICByZXMgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19GSUxFVElNRSwgJmZpbGV0aW1lKTsKKyAgICAgIGlmKChDVVJMRV9PSyA9PSByZXMpICYmIGZpbGV0aW1lKQorICAgICAgICBwcmludGYoImZpbGV0aW1lICVzOiAlcyIsIGZpbGVuYW1lLCBjdGltZSgmZmlsZXRpbWUpKTsKKyAgICAgIHJlcyA9IGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FELCAmZmlsZXNpemUpOworICAgICAgaWYoKENVUkxFX09LID09IHJlcykgJiYgKGZpbGVzaXplPjApKQorICAgICAgICBwcmludGYoImZpbGVzaXplICVzOiAlMC4wZiBieXRlc1xuIiwgZmlsZW5hbWUsIGZpbGVzaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogd2UgZmFpbGVkICovCisgICAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmwgdG9sZCB1cyAlZFxuIiwgcmVzKTsKKyAgICB9CisKKyAgICAvKiBhbHdheXMgY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICB9CisKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9mdHBnZXRyZXNwLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2Z0cGdldHJlc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTI5MGEzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9mdHBnZXRyZXNwLmMKQEAgLTAsMCArMSw3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisvKgorICogU2ltaWxhciB0byBmdHBnZXQuYyBidXQgdGhpcyBhbHNvIHN0b3JlcyB0aGUgcmVjZWl2ZWQgcmVzcG9uc2UtbGluZXMKKyAqIGluIGEgc2VwYXJhdGUgZmlsZSB1c2luZyBvdXIgb3duIGNhbGxiYWNrIQorICoKKyAqIFRoaXMgZnVuY3Rpb25hbGl0eSB3YXMgaW50cm9kdWNlZCBpbiBsaWJjdXJsIDcuOS4zLgorICovCisKK3N0YXRpYyBzaXplX3QKK3dyaXRlX3Jlc3BvbnNlKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqZGF0YSkKK3sKKyAgRklMRSAqd3JpdGVoZXJlID0gKEZJTEUgKilkYXRhOworICByZXR1cm4gZndyaXRlKHB0ciwgc2l6ZSwgbm1lbWIsIHdyaXRlaGVyZSk7Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlczsKKyAgRklMRSAqZnRwZmlsZTsKKyAgRklMRSAqcmVzcGZpbGU7CisKKyAgLyogbG9jYWwgZmlsZSBuYW1lIHRvIHN0b3JlIHRoZSBmaWxlIGFzICovCisgIGZ0cGZpbGUgPSBmb3BlbigiZnRwLWxpc3QiLCAid2IiKTsgLyogYiBpcyBiaW5hcnksIG5lZWRlZCBvbiB3aW4zMiAqLworCisgIC8qIGxvY2FsIGZpbGUgbmFtZSB0byBzdG9yZSB0aGUgRlRQIHNlcnZlcidzIHJlc3BvbnNlIGxpbmVzIGluICovCisgIHJlc3BmaWxlID0gZm9wZW4oImZ0cC1yZXNwb25zZXMiLCAid2IiKTsgLyogYiBpcyBiaW5hcnksIG5lZWRlZCBvbiB3aW4zMiAqLworCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZihjdXJsKSB7CisgICAgLyogR2V0IGEgZmlsZSBsaXN0aW5nIGZyb20gc3VuZXQgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCAiZnRwOi8vZnRwLmV4YW1wbGUuY29tLyIpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURURBVEEsIGZ0cGZpbGUpOworICAgIC8qIElmIHlvdSBpbnRlbmQgdG8gdXNlIHRoaXMgb24gd2luZG93cyB3aXRoIGEgbGliY3VybCBETEwsIHlvdSBtdXN0IHVzZQorICAgICAgIENVUkxPUFRfV1JJVEVGVU5DVElPTiBhcyB3ZWxsICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCB3cml0ZV9yZXNwb25zZSk7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFSEVBREVSLCByZXNwZmlsZSk7CisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgICAvKiBhbHdheXMgY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICB9CisKKyAgZmNsb3NlKGZ0cGZpbGUpOyAvKiBjbG9zZSB0aGUgbG9jYWwgZmlsZSAqLworICBmY2xvc2UocmVzcGZpbGUpOyAvKiBjbG9zZSB0aGUgcmVzcG9uc2UgZmlsZSAqLworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9mdHB1cGxvYWQuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvZnRwdXBsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyYWNiYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvZnRwdXBsb2FkLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBXSU4zMgorI2luY2x1ZGUgPGlvLmg+CisjZWxzZQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSAicHJpbnRmX21hY3JvLmgiCisKKy8qCisgKiBUaGlzIGV4YW1wbGUgc2hvd3MgYW4gRlRQIHVwbG9hZCwgd2l0aCBhIHJlbmFtZSBvZiB0aGUgZmlsZSBqdXN0IGFmdGVyCisgKiBhIHN1Y2Nlc3NmdWwgdXBsb2FkLgorICoKKyAqIEV4YW1wbGUgYmFzZWQgb24gc291cmNlIGNvZGUgcHJvdmlkZWQgYnkgRXJpY2sgTnV3ZW5kYW0uIFRoYW5rcyEKKyAqLworCisjZGVmaW5lIExPQ0FMX0ZJTEUgICAgICAiL3RtcC91cGxvYWR0aGlzLnR4dCIKKyNkZWZpbmUgVVBMT0FEX0ZJTEVfQVMgICJ3aGlsZS11cGxvYWRpbmcudHh0IgorI2RlZmluZSBSRU1PVEVfVVJMICAgICAgImZ0cDovL2V4YW1wbGUuY29tLyIgIFVQTE9BRF9GSUxFX0FTCisjZGVmaW5lIFJFTkFNRV9GSUxFX1RPICAicmVuYW1lZC1hbmQtZmluZS50eHQiCisKKy8qIE5PVEU6IGlmIHlvdSB3YW50IHRoaXMgZXhhbXBsZSB0byB3b3JrIG9uIFdpbmRvd3Mgd2l0aCBsaWJjdXJsIGFzIGEKKyAgIERMTCwgeW91IE1VU1QgYWxzbyBwcm92aWRlIGEgcmVhZCBjYWxsYmFjayB3aXRoIENVUkxPUFRfUkVBREZVTkNUSU9OLgorICAgRmFpbGluZyB0byBkbyBzbyB3aWxsIGdpdmUgeW91IGEgY3Jhc2ggc2luY2UgYSBETEwgbWF5IG5vdCB1c2UgdGhlCisgICB2YXJpYWJsZSdzIG1lbW9yeSB3aGVuIHBhc3NlZCBpbiB0byBpdCBmcm9tIGFuIGFwcCBsaWtlIHRoaXMuICovCitzdGF0aWMgc2l6ZV90IHJlYWRfY2FsbGJhY2sodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJlYW0pCit7CisgIC8qIGluIHJlYWwtd29ybGQgY2FzZXMsIHRoaXMgd291bGQgcHJvYmFibHkgZ2V0IHRoaXMgZGF0YSBkaWZmZXJlbnRseQorICAgICBhcyB0aGlzIGZyZWFkKCkgc3R1ZmYgaXMgZXhhY3RseSB3aGF0IHRoZSBsaWJyYXJ5IGFscmVhZHkgd291bGQgZG8KKyAgICAgYnkgZGVmYXVsdCBpbnRlcm5hbGx5ICovCisgIHNpemVfdCByZXRjb2RlID0gZnJlYWQocHRyLCBzaXplLCBubWVtYiwgc3RyZWFtKTsKKworICBmcHJpbnRmKHN0ZGVyciwgIioqKiBXZSByZWFkICUiIF9GTVRfU0laRV9UICIgYnl0ZXMgZnJvbSBmaWxlXG4iLCByZXRjb2RlKTsKKyAgcmV0dXJuIHJldGNvZGU7Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlczsKKyAgRklMRSAqaGRfc3JjOworICBzdHJ1Y3Qgc3RhdCBmaWxlX2luZm87CisgIGN1cmxfb2ZmX3QgZnNpemU7CisKKyAgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcmxpc3Q9TlVMTDsKKyAgc3RhdGljIGNvbnN0IGNoYXIgYnVmXzEgW10gPSAiUk5GUiAiIFVQTE9BRF9GSUxFX0FTOworICBzdGF0aWMgY29uc3QgY2hhciBidWZfMiBbXSA9ICJSTlRPICIgUkVOQU1FX0ZJTEVfVE87CisKKyAgLyogZ2V0IHRoZSBmaWxlIHNpemUgb2YgdGhlIGxvY2FsIGZpbGUgKi8KKyAgaWYoc3RhdChMT0NBTF9GSUxFLCAmZmlsZV9pbmZvKSkgeworICAgIHByaW50ZigiQ291bGRudCBvcGVuICclcyc6ICVzXG4iLCBMT0NBTF9GSUxFLCBzdHJlcnJvcihlcnJubykpOworICAgIHJldHVybiAxOworICB9CisgIGZzaXplID0gKGN1cmxfb2ZmX3QpZmlsZV9pbmZvLnN0X3NpemU7CisKKyAgcHJpbnRmKCJMb2NhbCBmaWxlIHNpemU6ICUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIiBieXRlcy5cbiIsIGZzaXplKTsKKworICAvKiBnZXQgYSBGSUxFICogb2YgdGhlIHNhbWUgZmlsZSAqLworICBoZF9zcmMgPSBmb3BlbihMT0NBTF9GSUxFLCAicmIiKTsKKworICAvKiBJbiB3aW5kb3dzLCB0aGlzIHdpbGwgaW5pdCB0aGUgd2luc29jayBzdHVmZiAqLworICBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisKKyAgLyogZ2V0IGEgY3VybCBoYW5kbGUgKi8KKyAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmKGN1cmwpIHsKKyAgICAvKiBidWlsZCBhIGxpc3Qgb2YgY29tbWFuZHMgdG8gcGFzcyB0byBsaWJjdXJsICovCisgICAgaGVhZGVybGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcmxpc3QsIGJ1Zl8xKTsKKyAgICBoZWFkZXJsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVybGlzdCwgYnVmXzIpOworCisgICAgLyogd2Ugd2FudCB0byB1c2Ugb3VyIG93biByZWFkIGZ1bmN0aW9uICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgcmVhZF9jYWxsYmFjayk7CisKKyAgICAvKiBlbmFibGUgdXBsb2FkaW5nICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VQTE9BRCwgMUwpOworCisgICAgLyogc3BlY2lmeSB0YXJnZXQgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9VUkwsIFJFTU9URV9VUkwpOworCisgICAgLyogcGFzcyBpbiB0aGF0IGxhc3Qgb2YgRlRQIGNvbW1hbmRzIHRvIHJ1biBhZnRlciB0aGUgdHJhbnNmZXIgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9TVFFVT1RFLCBoZWFkZXJsaXN0KTsKKworICAgIC8qIG5vdyBzcGVjaWZ5IHdoaWNoIGZpbGUgdG8gdXBsb2FkICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQUREQVRBLCBoZF9zcmMpOworCisgICAgLyogU2V0IHRoZSBzaXplIG9mIHRoZSBmaWxlIHRvIHVwbG9hZCAob3B0aW9uYWwpLiAgSWYgeW91IGdpdmUgYSAqX0xBUkdFCisgICAgICAgb3B0aW9uIHlvdSBNVVNUIG1ha2Ugc3VyZSB0aGF0IHRoZSB0eXBlIG9mIHRoZSBwYXNzZWQtaW4gYXJndW1lbnQgaXMgYQorICAgICAgIGN1cmxfb2ZmX3QuIElmIHlvdSB1c2UgQ1VSTE9QVF9JTkZJTEVTSVpFICh3aXRob3V0IF9MQVJHRSkgeW91IG11c3QKKyAgICAgICBtYWtlIHN1cmUgdGhhdCB0byBwYXNzIGluIGEgdHlwZSAnbG9uZycgYXJndW1lbnQuICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0lORklMRVNJWkVfTEFSR0UsCisgICAgICAgICAgICAgICAgICAgICAoY3VybF9vZmZfdClmc2l6ZSk7CisKKyAgICAvKiBOb3cgcnVuIG9mZiBhbmQgZG8gd2hhdCB5b3UndmUgYmVlbiB0b2xkISAqLworICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAgLyogY2xlYW4gdXAgdGhlIEZUUCBjb21tYW5kcyBsaXN0ICovCisgICAgY3VybF9zbGlzdF9mcmVlX2FsbCAoaGVhZGVybGlzdCk7CisKKyAgICAvKiBhbHdheXMgY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICB9CisgIGZjbG9zZShoZF9zcmMpOyAvKiBjbG9zZSB0aGUgbG9jYWwgZmlsZSAqLworCisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2Z0cHVwbG9hZHJlc3VtZS5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9mdHB1cGxvYWRyZXN1bWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWI4OTg2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9mdHB1cGxvYWRyZXN1bWUuYwpAQCAtMCwwICsxLDE3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBVcGxvYWQgdG8gRlRQLCByZXN1bWluZyBmYWlsZWQgdHJhbnNmZXJzCisgKgorICogQ29tcGlsZSBmb3IgTWluR1cgbGlrZSB0aGlzOgorICogIGdjYyAtV2FsbCAtcGVkYW50aWMgLXN0ZD1jOTkgZnRwdXBsb2Fkd2l0aHJlc3VtZS5jIC1vIGZ0cHVwbG9hZHJlc3VtZS5leGUKKyAqICAtbGN1cmwgLWxtc3ZjcjcwCisgKgorICogV3JpdHRlbiBieSBQaGlsaXAgQm9jaworICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPCAxMzAwKQorIyAgZXJyb3IgX3Nuc2NhbmYgcmVxdWlyZXMgTVNWQyA3LjAgb3IgbGF0ZXIuCisjZW5kaWYKKworLyogVGhlIE1pbkdXIGhlYWRlcnMgYXJlIG1pc3NpbmcgYSBmZXcgV2luMzIgZnVuY3Rpb24gZGVmaW5pdGlvbnMsCisgICB5b3Ugc2hvdWxkbid0IG5lZWQgdGhpcyBpZiB5b3UgdXNlIFZDKysgKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSAmJiAhZGVmaW5lZChfX01JTkdXNjRfXykKK2ludCBfX2NkZWNsIF9zbnNjYW5mKGNvbnN0IGNoYXIgKiBpbnB1dCwgc2l6ZV90IGxlbmd0aCwgY29uc3QgY2hhciAqIGZvcm1hdCwgLi4uKTsKKyNlbmRpZgorCisKKy8qIHBhcnNlIGhlYWRlcnMgZm9yIENvbnRlbnQtTGVuZ3RoICovCitzaXplX3QgZ2V0Y29udGVudGxlbmd0aGZ1bmModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJlYW0pCit7CisgIGludCByOworICBsb25nIGxlbiA9IDA7CisKKyAgLyogX3Nuc2NhbmYoKSBpcyBXaW4zMiBzcGVjaWZpYyAqLworICByID0gX3Nuc2NhbmYocHRyLCBzaXplICogbm1lbWIsICJDb250ZW50LUxlbmd0aDogJWxkXG4iLCAmbGVuKTsKKworICBpZiAocikgLyogTWljcm9zb2Z0OiB3ZSBkb24ndCByZWFkIHRoZSBzcGVjcyAqLworICAgICooKGxvbmcgKikgc3RyZWFtKSA9IGxlbjsKKworICByZXR1cm4gc2l6ZSAqIG5tZW1iOworfQorCisvKiBkaXNjYXJkIGRvd25sb2FkZWQgZGF0YSAqLworc2l6ZV90IGRpc2NhcmRmdW5jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyZWFtKQoreworICByZXR1cm4gc2l6ZSAqIG5tZW1iOworfQorCisvKiByZWFkIGRhdGEgdG8gdXBsb2FkICovCitzaXplX3QgcmVhZGZ1bmModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJlYW0pCit7CisgIEZJTEUgKmYgPSBzdHJlYW07CisgIHNpemVfdCBuOworCisgIGlmIChmZXJyb3IoZikpCisgICAgcmV0dXJuIENVUkxfUkVBREZVTkNfQUJPUlQ7CisKKyAgbiA9IGZyZWFkKHB0ciwgc2l6ZSwgbm1lbWIsIGYpICogc2l6ZTsKKworICByZXR1cm4gbjsKK30KKworCitpbnQgdXBsb2FkKENVUkwgKmN1cmxoYW5kbGUsIGNvbnN0IGNoYXIgKiByZW1vdGVwYXRoLCBjb25zdCBjaGFyICogbG9jYWxwYXRoLAorICAgICAgICAgICBsb25nIHRpbWVvdXQsIGxvbmcgdHJpZXMpCit7CisgIEZJTEUgKmY7CisgIGxvbmcgdXBsb2FkZWRfbGVuID0gMDsKKyAgQ1VSTGNvZGUgciA9IENVUkxFX0dPVF9OT1RISU5HOworICBpbnQgYzsKKworICBmID0gZm9wZW4obG9jYWxwYXRoLCAicmIiKTsKKyAgaWYgKGYgPT0gTlVMTCkgeworICAgIHBlcnJvcihOVUxMKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybGhhbmRsZSwgQ1VSTE9QVF9VUExPQUQsIDFMKTsKKworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxoYW5kbGUsIENVUkxPUFRfVVJMLCByZW1vdGVwYXRoKTsKKworICBpZiAodGltZW91dCkKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxoYW5kbGUsIENVUkxPUFRfRlRQX1JFU1BPTlNFX1RJTUVPVVQsIHRpbWVvdXQpOworCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybGhhbmRsZSwgQ1VSTE9QVF9IRUFERVJGVU5DVElPTiwgZ2V0Y29udGVudGxlbmd0aGZ1bmMpOworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxoYW5kbGUsIENVUkxPUFRfSEVBREVSREFUQSwgJnVwbG9hZGVkX2xlbik7CisKKyAgY3VybF9lYXN5X3NldG9wdChjdXJsaGFuZGxlLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGRpc2NhcmRmdW5jKTsKKworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxoYW5kbGUsIENVUkxPUFRfUkVBREZVTkNUSU9OLCByZWFkZnVuYyk7CisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybGhhbmRsZSwgQ1VSTE9QVF9SRUFEREFUQSwgZik7CisKKyAgY3VybF9lYXN5X3NldG9wdChjdXJsaGFuZGxlLCBDVVJMT1BUX0ZUUFBPUlQsICItIik7IC8qIGRpc2FibGUgcGFzc2l2ZSBtb2RlICovCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybGhhbmRsZSwgQ1VSTE9QVF9GVFBfQ1JFQVRFX01JU1NJTkdfRElSUywgMUwpOworCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybGhhbmRsZSwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisKKyAgZm9yIChjID0gMDsgKHIgIT0gQ1VSTEVfT0spICYmIChjIDwgdHJpZXMpOyBjKyspIHsKKyAgICAvKiBhcmUgd2UgcmVzdW1pbmc/ICovCisgICAgaWYgKGMpIHsgLyogeWVzICovCisgICAgICAvKiBkZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZSBhbHJlYWR5IHdyaXR0ZW4gKi8KKworICAgICAgLyoKKyAgICAgICAqIFdpdGggTk9CT0RZIGFuZCBOT0hFQURFUiwgbGliY3VybCB3aWxsIGlzc3VlIGEgU0laRQorICAgICAgICogY29tbWFuZCwgYnV0IHRoZSBvbmx5IHdheSB0byByZXRyaWV2ZSB0aGUgcmVzdWx0IGlzCisgICAgICAgKiB0byBwYXJzZSB0aGUgcmV0dXJuZWQgQ29udGVudC1MZW5ndGggaGVhZGVyLiBUaHVzLAorICAgICAgICogZ2V0Y29udGVudGxlbmd0aGZ1bmMoKS4gV2UgbmVlZCBkaXNjYXJkZnVuYygpIGFib3ZlCisgICAgICAgKiBiZWNhdXNlIEhFQURFUiB3aWxsIGR1bXAgdGhlIGhlYWRlcnMgdG8gc3Rkb3V0CisgICAgICAgKiB3aXRob3V0IGl0LgorICAgICAgICovCisgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxoYW5kbGUsIENVUkxPUFRfTk9CT0RZLCAxTCk7CisgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxoYW5kbGUsIENVUkxPUFRfSEVBREVSLCAxTCk7CisKKyAgICAgIHIgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsaGFuZGxlKTsKKyAgICAgIGlmIChyICE9IENVUkxFX09LKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsaGFuZGxlLCBDVVJMT1BUX05PQk9EWSwgMEwpOworICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsaGFuZGxlLCBDVVJMT1BUX0hFQURFUiwgMEwpOworCisgICAgICBmc2VlayhmLCB1cGxvYWRlZF9sZW4sIFNFRUtfU0VUKTsKKworICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsaGFuZGxlLCBDVVJMT1BUX0FQUEVORCwgMUwpOworICAgIH0KKyAgICBlbHNlIHsgLyogbm8gKi8KKyAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybGhhbmRsZSwgQ1VSTE9QVF9BUFBFTkQsIDBMKTsKKyAgICB9CisKKyAgICByID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybGhhbmRsZSk7CisgIH0KKworICBmY2xvc2UoZik7CisKKyAgaWYgKHIgPT0gQ1VSTEVfT0spCisgICAgcmV0dXJuIDE7CisgIGVsc2UgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGN1cmxfZWFzeV9zdHJlcnJvcihyKSk7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworaW50IG1haW4oaW50IGMsIGNoYXIgKiphcmd2KQoreworICBDVVJMICpjdXJsaGFuZGxlID0gTlVMTDsKKworICBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisgIGN1cmxoYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworCisgIHVwbG9hZChjdXJsaGFuZGxlLCAiZnRwOi8vdXNlcjpwYXNzQGV4YW1wbGUuY29tL3BhdGgvZmlsZSIsICJDOlxcZmlsZSIsIDAsIDMpOworCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmxoYW5kbGUpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2dldGluZm8uYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvZ2V0aW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYmUxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2dldGluZm8uYwpAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitpbnQgbWFpbih2b2lkKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM7CisKKyAgLyogaHR0cDovL2N1cmwuaGF4eC5zZS9saWJjdXJsL2MvY3VybF9lYXN5X2luaXQuaHRtbCAqLworICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYoY3VybCkgeworICAgIC8qIGh0dHA6Ly9jdXJsLmhheHguc2UvbGliY3VybC9jL2N1cmxfZWFzeV9zZXRvcHQuaHRtbCNDVVJMT1BUVVJMICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIik7CisgICAgLyogaHR0cDovL2N1cmwuaGF4eC5zZS9saWJjdXJsL2MvY3VybF9lYXN5X3BlcmZvcm0uaHRtbCAqLworICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAgaWYoQ1VSTEVfT0sgPT0gcmVzKSB7CisgICAgICBjaGFyICpjdDsKKyAgICAgIC8qIGFzayBmb3IgdGhlIGNvbnRlbnQtdHlwZSAqLworICAgICAgLyogaHR0cDovL2N1cmwuaGF4eC5zZS9saWJjdXJsL2MvY3VybF9lYXN5X2dldGluZm8uaHRtbCAqLworICAgICAgcmVzID0gY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fQ09OVEVOVF9UWVBFLCAmY3QpOworCisgICAgICBpZigoQ1VSTEVfT0sgPT0gcmVzKSAmJiBjdCkKKyAgICAgICAgcHJpbnRmKCJXZSByZWNlaXZlZCBDb250ZW50LVR5cGU6ICVzXG4iLCBjdCk7CisgICAgfQorCisgICAgLyogYWx3YXlzIGNsZWFudXAgKi8KKyAgICAvKiBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9jdXJsX2Vhc3lfY2xlYW51cC5odG1sICovCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2dldGlubWVtb3J5LmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2dldGlubWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhlNmRlYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvZ2V0aW5tZW1vcnkuYwpAQCAtMCwwICsxLDExMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFeGFtcGxlIHNvdXJjZSBjb2RlIHRvIHNob3cgaG93IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0bworICogZG93bmxvYWQgZGF0YSBpbnRvIGEgY2h1bmsgb2YgbWVtb3J5IGluc3RlYWQgb2Ygc3RvcmluZyBpdCBpbiBhIGZpbGUuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworc3RydWN0IE1lbW9yeVN0cnVjdCB7CisgIGNoYXIgKm1lbW9yeTsKKyAgc2l6ZV90IHNpemU7Cit9OworCisKK3N0YXRpYyBzaXplX3QKK1dyaXRlTWVtb3J5Q2FsbGJhY2sodm9pZCAqY29udGVudHMsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnVzZXJwKQoreworICBzaXplX3QgcmVhbHNpemUgPSBzaXplICogbm1lbWI7CisgIHN0cnVjdCBNZW1vcnlTdHJ1Y3QgKm1lbSA9IChzdHJ1Y3QgTWVtb3J5U3RydWN0ICopdXNlcnA7CisKKyAgbWVtLT5tZW1vcnkgPSByZWFsbG9jKG1lbS0+bWVtb3J5LCBtZW0tPnNpemUgKyByZWFsc2l6ZSArIDEpOworICBpZiAobWVtLT5tZW1vcnkgPT0gTlVMTCkgeworICAgIC8qIG91dCBvZiBtZW1vcnkhICovCisgICAgcHJpbnRmKCJub3QgZW5vdWdoIG1lbW9yeSAocmVhbGxvYyByZXR1cm5lZCBOVUxMKVxuIik7CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICB9CisKKyAgbWVtY3B5KCYobWVtLT5tZW1vcnlbbWVtLT5zaXplXSksIGNvbnRlbnRzLCByZWFsc2l6ZSk7CisgIG1lbS0+c2l6ZSArPSByZWFsc2l6ZTsKKyAgbWVtLT5tZW1vcnlbbWVtLT5zaXplXSA9IDA7CisKKyAgcmV0dXJuIHJlYWxzaXplOworfQorCisKK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKmN1cmxfaGFuZGxlOworCisgIHN0cnVjdCBNZW1vcnlTdHJ1Y3QgY2h1bms7CisKKyAgY2h1bmsubWVtb3J5ID0gbWFsbG9jKDEpOyAgLyogd2lsbCBiZSBncm93biBhcyBuZWVkZWQgYnkgdGhlIHJlYWxsb2MgYWJvdmUgKi8KKyAgY2h1bmsuc2l6ZSA9IDA7ICAgIC8qIG5vIGRhdGEgYXQgdGhpcyBwb2ludCAqLworCisgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKworICAvKiBpbml0IHRoZSBjdXJsIHNlc3Npb24gKi8KKyAgY3VybF9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworCisgIC8qIHNwZWNpZnkgVVJMIHRvIGdldCAqLworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxfaGFuZGxlLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIik7CisKKyAgLyogc2VuZCBhbGwgZGF0YSB0byB0aGlzIGZ1bmN0aW9uICAqLworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxfaGFuZGxlLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIFdyaXRlTWVtb3J5Q2FsbGJhY2spOworCisgIC8qIHdlIHBhc3Mgb3VyICdjaHVuaycgc3RydWN0IHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbiAqLworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxfaGFuZGxlLCBDVVJMT1BUX1dSSVRFREFUQSwgKHZvaWQgKikmY2h1bmspOworCisgIC8qIHNvbWUgc2VydmVycyBkb24ndCBsaWtlIHJlcXVlc3RzIHRoYXQgYXJlIG1hZGUgd2l0aG91dCBhIHVzZXItYWdlbnQKKyAgICAgZmllbGQsIHNvIHdlIHByb3ZpZGUgb25lICovCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybF9oYW5kbGUsIENVUkxPUFRfVVNFUkFHRU5ULCAibGliY3VybC1hZ2VudC8xLjAiKTsKKworICAvKiBnZXQgaXQhICovCisgIGN1cmxfZWFzeV9wZXJmb3JtKGN1cmxfaGFuZGxlKTsKKworICAvKiBjbGVhbnVwIGN1cmwgc3R1ZmYgKi8KKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybF9oYW5kbGUpOworCisgIC8qCisgICAqIE5vdywgb3VyIGNodW5rLm1lbW9yeSBwb2ludHMgdG8gYSBtZW1vcnkgYmxvY2sgdGhhdCBpcyBjaHVuay5zaXplCisgICAqIGJ5dGVzIGJpZyBhbmQgY29udGFpbnMgdGhlIHJlbW90ZSBmaWxlLgorICAgKgorICAgKiBEbyBzb21ldGhpbmcgbmljZSB3aXRoIGl0IQorICAgKgorICAgKiBZb3Ugc2hvdWxkIGJlIGF3YXJlIG9mIHRoZSBmYWN0IHRoYXQgYXQgdGhpcyBwb2ludCB3ZSBtaWdodCBoYXZlIGFuCisgICAqIGFsbG9jYXRlZCBkYXRhIGJsb2NrLCBhbmQgbm90aGluZyBoYXMgeWV0IGRlYWxsb2NhdGVkIHRoYXQgZGF0YS4gU28gd2hlbgorICAgKiB5b3UncmUgZG9uZSB3aXRoIGl0LCB5b3Ugc2hvdWxkIGZyZWUoKSBpdCBhcyBhIG5pY2UgYXBwbGljYXRpb24uCisgICAqLworCisgIHByaW50ZigiJWx1IGJ5dGVzIHJldHJpZXZlZFxuIiwgKGxvbmcpY2h1bmsuc2l6ZSk7CisKKyAgaWYoY2h1bmsubWVtb3J5KQorICAgIGZyZWUoY2h1bmsubWVtb3J5KTsKKworICAvKiB3ZSdyZSBkb25lIHdpdGggbGliY3VybCwgc28gY2xlYW4gaXQgdXAgKi8KKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9naGlwZXIuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvZ2hpcGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEzZjQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvZ2hpcGVyLmMKQEAgLTAsMCArMSw0NTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRXhhbXBsZSBhcHBsaWNhdGlvbiBzb3VyY2UgY29kZSB1c2luZyB0aGUgbXVsdGkgc29ja2V0IGludGVyZmFjZSB0bworICogZG93bmxvYWQgbWFueSBmaWxlcyBhdCBvbmNlLgorICoKKyAqIFdyaXR0ZW4gYnkgSmVmZiBQb2hsbWV5ZXIKKworUmVxdWlyZXMgZ2xpYi0yLnggYW5kIGEgKFBPU0lYPykgc3lzdGVtIHRoYXQgaGFzIG1rZmlmbygpLgorCitUaGlzIGlzIGFuIGFkYXB0YXRpb24gb2YgbGliY3VybCdzICJoaXBldi5jIiBhbmQgbGliZXZlbnQncyAiZXZlbnQtdGVzdC5jIgorc2FtcGxlIHByb2dyYW1zLCBhZGFwdGVkIHRvIHVzZSBnbGliJ3MgZ19pb19jaGFubmVsIGluIHBsYWNlIG9mIGxpYmV2ZW50LgorCitXaGVuIHJ1bm5pbmcsIHRoZSBwcm9ncmFtIGNyZWF0ZXMgdGhlIG5hbWVkIHBpcGUgImhpcGVyLmZpZm8iCisKK1doZW5ldmVyIHRoZXJlIGlzIGlucHV0IGludG8gdGhlIGZpZm8sIHRoZSBwcm9ncmFtIHJlYWRzIHRoZSBpbnB1dCBhcyBhIGxpc3QKK29mIFVSTCdzIGFuZCBjcmVhdGVzIHNvbWUgbmV3IGVhc3kgaGFuZGxlcyB0byBmZXRjaCBlYWNoIFVSTCB2aWEgdGhlCitjdXJsX211bHRpICJoaXBlciIgQVBJLgorCisKK1RodXMsIHlvdSBjYW4gdHJ5IGEgc2luZ2xlIFVSTDoKKyAgJSBlY2hvIGh0dHA6Ly93d3cueWFob28uY29tID4gaGlwZXIuZmlmbworCitPciBhIHdob2xlIGJ1bmNoIG9mIHRoZW06CisgICUgY2F0IG15LXVybC1saXN0ID4gaGlwZXIuZmlmbworCitUaGUgZmlmbyBidWZmZXIgaXMgaGFuZGxlZCBhbG1vc3QgaW5zdGFudGx5LCBzbyB5b3UgY2FuIGV2ZW4gYWRkIG1vcmUgVVJMJ3MKK3doaWxlIHRoZSBwcmV2aW91cyByZXF1ZXN0cyBhcmUgc3RpbGwgYmVpbmcgZG93bmxvYWRlZC4KKworVGhpcyBpcyBwdXJlbHkgYSBkZW1vIGFwcCwgYWxsIHJldHJpZXZlZCBkYXRhIGlzIHNpbXBseSBkaXNjYXJkZWQgYnkgdGhlIHdyaXRlCitjYWxsYmFjay4KKworKi8KKworCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKworI2RlZmluZSBNU0dfT1VUIGdfcHJpbnQgICAvKiBDaGFuZ2UgdG8gImdfZXJyb3IiIHRvIHdyaXRlIHRvIHN0ZGVyciAqLworI2RlZmluZSBTSE9XX1ZFUkJPU0UgMCAgICAvKiBTZXQgdG8gbm9uLXplcm8gZm9yIGxpYmN1cmwgbWVzc2FnZXMgKi8KKyNkZWZpbmUgU0hPV19QUk9HUkVTUyAwICAgLyogU2V0IHRvIG5vbi16ZXJvIHRvIGVuYWJsZSBwcm9ncmVzcyBjYWxsYmFjayAqLworCisKKworLyogR2xvYmFsIGluZm9ybWF0aW9uLCBjb21tb24gdG8gYWxsIGNvbm5lY3Rpb25zICovCit0eXBlZGVmIHN0cnVjdCBfR2xvYmFsSW5mbyB7CisgIENVUkxNICptdWx0aTsKKyAgZ3VpbnQgdGltZXJfZXZlbnQ7CisgIGludCBzdGlsbF9ydW5uaW5nOworfSBHbG9iYWxJbmZvOworCisKKworLyogSW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgZWFzeSBoYW5kbGUgKi8KK3R5cGVkZWYgc3RydWN0IF9Db25uSW5mbyB7CisgIENVUkwgKmVhc3k7CisgIGNoYXIgKnVybDsKKyAgR2xvYmFsSW5mbyAqZ2xvYmFsOworICBjaGFyIGVycm9yW0NVUkxfRVJST1JfU0laRV07Cit9IENvbm5JbmZvOworCisKKy8qIEluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIHNvY2tldCAqLwordHlwZWRlZiBzdHJ1Y3QgX1NvY2tJbmZvIHsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQ7CisgIENVUkwgKmVhc3k7CisgIGludCBhY3Rpb247CisgIGxvbmcgdGltZW91dDsKKyAgR0lPQ2hhbm5lbCAqY2g7CisgIGd1aW50IGV2OworICBHbG9iYWxJbmZvICpnbG9iYWw7Cit9IFNvY2tJbmZvOworCisKKworCisvKiBEaWUgaWYgd2UgZ2V0IGEgYmFkIENVUkxNY29kZSBzb21ld2hlcmUgKi8KK3N0YXRpYyB2b2lkIG1jb2RlX29yX2RpZShjb25zdCBjaGFyICp3aGVyZSwgQ1VSTE1jb2RlIGNvZGUpIHsKKyAgaWYgKCBDVVJMTV9PSyAhPSBjb2RlICkgeworICAgIGNvbnN0IGNoYXIgKnM7CisgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICBjYXNlICAgICBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk06IHM9IkNVUkxNX0NBTExfTVVMVElfUEVSRk9STSI7IGJyZWFrOworICAgICAgY2FzZSAgICAgQ1VSTE1fQkFEX0hBTkRMRTogICAgICAgICBzPSJDVVJMTV9CQURfSEFORExFIjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgICAgIENVUkxNX0JBRF9FQVNZX0hBTkRMRTogICAgcz0iQ1VSTE1fQkFEX0VBU1lfSEFORExFIjsgICAgYnJlYWs7CisgICAgICBjYXNlICAgICBDVVJMTV9PVVRfT0ZfTUVNT1JZOiAgICAgIHM9IkNVUkxNX09VVF9PRl9NRU1PUlkiOyAgICAgIGJyZWFrOworICAgICAgY2FzZSAgICAgQ1VSTE1fSU5URVJOQUxfRVJST1I6ICAgICBzPSJDVVJMTV9JTlRFUk5BTF9FUlJPUiI7ICAgICBicmVhazsKKyAgICAgIGNhc2UgICAgIENVUkxNX0JBRF9TT0NLRVQ6ICAgICAgICAgcz0iQ1VSTE1fQkFEX1NPQ0tFVCI7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICAgICBDVVJMTV9VTktOT1dOX09QVElPTjogICAgIHM9IkNVUkxNX1VOS05PV05fT1BUSU9OIjsgICAgIGJyZWFrOworICAgICAgY2FzZSAgICAgQ1VSTE1fTEFTVDogICAgICAgICAgICAgICBzPSJDVVJMTV9MQVNUIjsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IHM9IkNVUkxNX3Vua25vd24iOworICAgIH0KKyAgICBNU0dfT1VUKCJFUlJPUjogJXMgcmV0dXJucyAlc1xuIiwgd2hlcmUsIHMpOworICAgIGV4aXQoY29kZSk7CisgIH0KK30KKworCisKKy8qIENoZWNrIGZvciBjb21wbGV0ZWQgdHJhbnNmZXJzLCBhbmQgcmVtb3ZlIHRoZWlyIGVhc3kgaGFuZGxlcyAqLworc3RhdGljIHZvaWQgY2hlY2tfbXVsdGlfaW5mbyhHbG9iYWxJbmZvICpnKQoreworICBjaGFyICplZmZfdXJsOworICBDVVJMTXNnICptc2c7CisgIGludCBtc2dzX2xlZnQ7CisgIENvbm5JbmZvICpjb25uOworICBDVVJMICplYXN5OworICBDVVJMY29kZSByZXM7CisKKyAgTVNHX09VVCgiUkVNQUlOSU5HOiAlZFxuIiwgZy0+c3RpbGxfcnVubmluZyk7CisgIHdoaWxlICgobXNnID0gY3VybF9tdWx0aV9pbmZvX3JlYWQoZy0+bXVsdGksICZtc2dzX2xlZnQpKSkgeworICAgIGlmIChtc2ctPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKKyAgICAgIGVhc3kgPSBtc2ctPmVhc3lfaGFuZGxlOworICAgICAgcmVzID0gbXNnLT5kYXRhLnJlc3VsdDsKKyAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGVhc3ksIENVUkxJTkZPX1BSSVZBVEUsICZjb25uKTsKKyAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGVhc3ksIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZlZmZfdXJsKTsKKyAgICAgIE1TR19PVVQoIkRPTkU6ICVzID0+ICglZCkgJXNcbiIsIGVmZl91cmwsIHJlcywgY29ubi0+ZXJyb3IpOworICAgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGctPm11bHRpLCBlYXN5KTsKKyAgICAgIGZyZWUoY29ubi0+dXJsKTsKKyAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGVhc3kpOworICAgICAgZnJlZShjb25uKTsKKyAgICB9CisgIH0KK30KKworCisKKy8qIENhbGxlZCBieSBnbGliIHdoZW4gb3VyIHRpbWVvdXQgZXhwaXJlcyAqLworc3RhdGljIGdib29sZWFuIHRpbWVyX2NiKGdwb2ludGVyIGRhdGEpCit7CisgIEdsb2JhbEluZm8gKmcgPSAoR2xvYmFsSW5mbyAqKWRhdGE7CisgIENVUkxNY29kZSByYzsKKworICByYyA9IGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbihnLT5tdWx0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMX1NPQ0tFVF9USU1FT1VULCAwLCAmZy0+c3RpbGxfcnVubmluZyk7CisgIG1jb2RlX29yX2RpZSgidGltZXJfY2I6IGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbiIsIHJjKTsKKyAgY2hlY2tfbXVsdGlfaW5mbyhnKTsKKyAgcmV0dXJuIEZBTFNFOworfQorCisKKworLyogVXBkYXRlIHRoZSBldmVudCB0aW1lciBhZnRlciBjdXJsX211bHRpIGxpYnJhcnkgY2FsbHMgKi8KK3N0YXRpYyBpbnQgdXBkYXRlX3RpbWVvdXRfY2IoQ1VSTE0gKm11bHRpLCBsb25nIHRpbWVvdXRfbXMsIHZvaWQgKnVzZXJwKQoreworICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICBHbG9iYWxJbmZvICpnPShHbG9iYWxJbmZvICopdXNlcnA7CisgIHRpbWVvdXQudHZfc2VjID0gdGltZW91dF9tcy8xMDAwOworICB0aW1lb3V0LnR2X3VzZWMgPSAodGltZW91dF9tcyUxMDAwKSoxMDAwOworCisgIE1TR19PVVQoIioqKiB1cGRhdGVfdGltZW91dF9jYiAlbGQgPT4gJWxkOiVsZCAqKipcbiIsCisgICAgICAgICAgICAgIHRpbWVvdXRfbXMsIHRpbWVvdXQudHZfc2VjLCB0aW1lb3V0LnR2X3VzZWMpOworCisgIGctPnRpbWVyX2V2ZW50ID0gZ190aW1lb3V0X2FkZCh0aW1lb3V0X21zLCB0aW1lcl9jYiwgZyk7CisgIHJldHVybiAwOworfQorCisKKworCisvKiBDYWxsZWQgYnkgZ2xpYiB3aGVuIHdlIGdldCBhY3Rpb24gb24gYSBtdWx0aSBzb2NrZXQgKi8KK3N0YXRpYyBnYm9vbGVhbiBldmVudF9jYihHSU9DaGFubmVsICpjaCwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR2xvYmFsSW5mbyAqZyA9IChHbG9iYWxJbmZvKikgZGF0YTsKKyAgQ1VSTE1jb2RlIHJjOworICBpbnQgZmQ9Z19pb19jaGFubmVsX3VuaXhfZ2V0X2ZkKGNoKTsKKworICBpbnQgYWN0aW9uID0KKyAgICAoY29uZGl0aW9uICYgR19JT19JTiA/IENVUkxfQ1NFTEVDVF9JTiA6IDApIHwKKyAgICAoY29uZGl0aW9uICYgR19JT19PVVQgPyBDVVJMX0NTRUxFQ1RfT1VUIDogMCk7CisKKyAgcmMgPSBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24oZy0+bXVsdGksIGZkLCBhY3Rpb24sICZnLT5zdGlsbF9ydW5uaW5nKTsKKyAgbWNvZGVfb3JfZGllKCJldmVudF9jYjogY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uIiwgcmMpOworCisgIGNoZWNrX211bHRpX2luZm8oZyk7CisgIGlmKGctPnN0aWxsX3J1bm5pbmcpIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICBNU0dfT1VUKCJsYXN0IHRyYW5zZmVyIGRvbmUsIGtpbGwgdGltZW91dFxuIik7CisgICAgaWYgKGctPnRpbWVyX2V2ZW50KSB7IGdfc291cmNlX3JlbW92ZShnLT50aW1lcl9ldmVudCk7IH0KKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworCisKKy8qIENsZWFuIHVwIHRoZSBTb2NrSW5mbyBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyB2b2lkIHJlbXNvY2soU29ja0luZm8gKmYpCit7CisgIGlmICghZikgeyByZXR1cm47IH0KKyAgaWYgKGYtPmV2KSB7IGdfc291cmNlX3JlbW92ZShmLT5ldik7IH0KKyAgZ19mcmVlKGYpOworfQorCisKKworLyogQXNzaWduIGluZm9ybWF0aW9uIHRvIGEgU29ja0luZm8gc3RydWN0dXJlICovCitzdGF0aWMgdm9pZCBzZXRzb2NrKFNvY2tJbmZvKmYsIGN1cmxfc29ja2V0X3QgcywgQ1VSTCplLCBpbnQgYWN0LCBHbG9iYWxJbmZvKmcpCit7CisgIEdJT0NvbmRpdGlvbiBraW5kID0KKyAgICAgKGFjdCZDVVJMX1BPTExfSU4/R19JT19JTjowKXwoYWN0JkNVUkxfUE9MTF9PVVQ/R19JT19PVVQ6MCk7CisKKyAgZi0+c29ja2ZkID0gczsKKyAgZi0+YWN0aW9uID0gYWN0OworICBmLT5lYXN5ID0gZTsKKyAgaWYgKGYtPmV2KSB7IGdfc291cmNlX3JlbW92ZShmLT5ldik7IH0KKyAgZi0+ZXY9Z19pb19hZGRfd2F0Y2goZi0+Y2gsIGtpbmQsIGV2ZW50X2NiLGcpOworCit9CisKKworCisvKiBJbml0aWFsaXplIGEgbmV3IFNvY2tJbmZvIHN0cnVjdHVyZSAqLworc3RhdGljIHZvaWQgYWRkc29jayhjdXJsX3NvY2tldF90IHMsIENVUkwgKmVhc3ksIGludCBhY3Rpb24sIEdsb2JhbEluZm8gKmcpCit7CisgIFNvY2tJbmZvICpmZHAgPSBnX21hbGxvYzAoc2l6ZW9mKFNvY2tJbmZvKSk7CisKKyAgZmRwLT5nbG9iYWwgPSBnOworICBmZHAtPmNoPWdfaW9fY2hhbm5lbF91bml4X25ldyhzKTsKKyAgc2V0c29jayhmZHAsIHMsIGVhc3ksIGFjdGlvbiwgZyk7CisgIGN1cmxfbXVsdGlfYXNzaWduKGctPm11bHRpLCBzLCBmZHApOworfQorCisKKworLyogQ1VSTE1PUFRfU09DS0VURlVOQ1RJT04gKi8KK3N0YXRpYyBpbnQgc29ja19jYihDVVJMICplLCBjdXJsX3NvY2tldF90IHMsIGludCB3aGF0LCB2b2lkICpjYnAsIHZvaWQgKnNvY2twKQoreworICBHbG9iYWxJbmZvICpnID0gKEdsb2JhbEluZm8qKSBjYnA7CisgIFNvY2tJbmZvICpmZHAgPSAoU29ja0luZm8qKSBzb2NrcDsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKndoYXRzdHJbXT17ICJub25lIiwgIklOIiwgIk9VVCIsICJJTk9VVCIsICJSRU1PVkUiIH07CisKKyAgTVNHX09VVCgic29ja2V0IGNhbGxiYWNrOiBzPSVkIGU9JXAgd2hhdD0lcyAiLCBzLCBlLCB3aGF0c3RyW3doYXRdKTsKKyAgaWYgKHdoYXQgPT0gQ1VSTF9QT0xMX1JFTU9WRSkgeworICAgIE1TR19PVVQoIlxuIik7CisgICAgcmVtc29jayhmZHApOworICB9IGVsc2UgeworICAgIGlmICghZmRwKSB7CisgICAgICBNU0dfT1VUKCJBZGRpbmcgZGF0YTogJXMlc1xuIiwKKyAgICAgICAgICAgICB3aGF0JkNVUkxfUE9MTF9JTj8iUkVBRCI6IiIsCisgICAgICAgICAgICAgd2hhdCZDVVJMX1BPTExfT1VUPyJXUklURSI6IiIgKTsKKyAgICAgIGFkZHNvY2socywgZSwgd2hhdCwgZyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgTVNHX09VVCgKKyAgICAgICAgIkNoYW5naW5nIGFjdGlvbiBmcm9tICVkIHRvICVkXG4iLCBmZHAtPmFjdGlvbiwgd2hhdCk7CisgICAgICBzZXRzb2NrKGZkcCwgcywgZSwgd2hhdCwgZyk7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisKKworLyogQ1VSTE9QVF9XUklURUZVTkNUSU9OICovCitzdGF0aWMgc2l6ZV90IHdyaXRlX2NiKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqZGF0YSkKK3sKKyAgc2l6ZV90IHJlYWxzaXplID0gc2l6ZSAqIG5tZW1iOworICBDb25uSW5mbyAqY29ubiA9IChDb25uSW5mbyopIGRhdGE7CisgICh2b2lkKXB0cjsKKyAgKHZvaWQpY29ubjsKKyAgcmV0dXJuIHJlYWxzaXplOworfQorCisKKworLyogQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OICovCitzdGF0aWMgaW50IHByb2dfY2IgKHZvaWQgKnAsIGRvdWJsZSBkbHRvdGFsLCBkb3VibGUgZGxub3csIGRvdWJsZSB1bHQsIGRvdWJsZSB1bG4pCit7CisgIENvbm5JbmZvICpjb25uID0gKENvbm5JbmZvICopcDsKKyAgTVNHX09VVCgiUHJvZ3Jlc3M6ICVzICglZy8lZylcbiIsIGNvbm4tPnVybCwgZGxub3csIGRsdG90YWwpOworICByZXR1cm4gMDsKK30KKworCisKKy8qIENyZWF0ZSBhIG5ldyBlYXN5IGhhbmRsZSwgYW5kIGFkZCBpdCB0byB0aGUgZ2xvYmFsIGN1cmxfbXVsdGkgKi8KK3N0YXRpYyB2b2lkIG5ld19jb25uKGNoYXIgKnVybCwgR2xvYmFsSW5mbyAqZyApCit7CisgIENvbm5JbmZvICpjb25uOworICBDVVJMTWNvZGUgcmM7CisKKyAgY29ubiA9IGdfbWFsbG9jMChzaXplb2YoQ29ubkluZm8pKTsKKworICBjb25uLT5lcnJvclswXT0nXDAnOworCisgIGNvbm4tPmVhc3kgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZiAoIWNvbm4tPmVhc3kpIHsKKyAgICBNU0dfT1VUKCJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZCwgZXhpdGluZyFcbiIpOworICAgIGV4aXQoMik7CisgIH0KKyAgY29ubi0+Z2xvYmFsID0gZzsKKyAgY29ubi0+dXJsID0gZ19zdHJkdXAodXJsKTsKKyAgY3VybF9lYXN5X3NldG9wdChjb25uLT5lYXN5LCBDVVJMT1BUX1VSTCwgY29ubi0+dXJsKTsKKyAgY3VybF9lYXN5X3NldG9wdChjb25uLT5lYXN5LCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIHdyaXRlX2NiKTsKKyAgY3VybF9lYXN5X3NldG9wdChjb25uLT5lYXN5LCBDVVJMT1BUX1dSSVRFREFUQSwgJmNvbm4pOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfVkVSQk9TRSwgKGxvbmcpU0hPV19WRVJCT1NFKTsKKyAgY3VybF9lYXN5X3NldG9wdChjb25uLT5lYXN5LCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBjb25uLT5lcnJvcik7CisgIGN1cmxfZWFzeV9zZXRvcHQoY29ubi0+ZWFzeSwgQ1VSTE9QVF9QUklWQVRFLCBjb25uKTsKKyAgY3VybF9lYXN5X3NldG9wdChjb25uLT5lYXN5LCBDVVJMT1BUX05PUFJPR1JFU1MsIFNIT1dfUFJPR1JFU1M/MEw6MUwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiwgcHJvZ19jYik7CisgIGN1cmxfZWFzeV9zZXRvcHQoY29ubi0+ZWFzeSwgQ1VSTE9QVF9QUk9HUkVTU0RBVEEsIGNvbm4pOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDFMKTsKKyAgY3VybF9lYXN5X3NldG9wdChjb25uLT5lYXN5LCBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULCAzMEwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfTE9XX1NQRUVEX0xJTUlULCAxTCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoY29ubi0+ZWFzeSwgQ1VSTE9QVF9MT1dfU1BFRURfVElNRSwgMzBMKTsKKworICBNU0dfT1VUKCJBZGRpbmcgZWFzeSAlcCB0byBtdWx0aSAlcCAoJXMpXG4iLCBjb25uLT5lYXN5LCBnLT5tdWx0aSwgdXJsKTsKKyAgcmMgPWN1cmxfbXVsdGlfYWRkX2hhbmRsZShnLT5tdWx0aSwgY29ubi0+ZWFzeSk7CisgIG1jb2RlX29yX2RpZSgibmV3X2Nvbm46IGN1cmxfbXVsdGlfYWRkX2hhbmRsZSIsIHJjKTsKKworICAvKiBub3RlIHRoYXQgdGhlIGFkZF9oYW5kbGUoKSB3aWxsIHNldCBhIHRpbWUtb3V0IHRvIHRyaWdnZXIgdmVyeSBzb29uIHNvCisgICAgIHRoYXQgdGhlIG5lY2Vzc2FyeSBzb2NrZXRfYWN0aW9uKCkgY2FsbCB3aWxsIGJlIGNhbGxlZCBieSB0aGlzIGFwcCAqLworfQorCisKKy8qIFRoaXMgZ2V0cyBjYWxsZWQgYnkgZ2xpYiB3aGVuZXZlciBkYXRhIGlzIHJlY2VpdmVkIGZyb20gdGhlIGZpZm8gKi8KK3N0YXRpYyBnYm9vbGVhbiBmaWZvX2NiIChHSU9DaGFubmVsICpjaCwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgI2RlZmluZSBCVUZfU0laRSAxMDI0CisgIGdzaXplIGxlbiwgdHA7CisgIGdjaGFyICpidWYsICp0bXAsICphbGw9TlVMTDsKKyAgR0lPU3RhdHVzIHJ2OworCisgIGRvIHsKKyAgICBHRXJyb3IgKmVycj1OVUxMOworICAgIHJ2ID0gZ19pb19jaGFubmVsX3JlYWRfbGluZSAoY2gsJmJ1ZiwmbGVuLCZ0cCwmZXJyKTsKKyAgICBpZiAoIGJ1ZiApIHsKKyAgICAgIGlmICh0cCkgeyBidWZbdHBdPSdcMCc7IH0KKyAgICAgIG5ld19jb25uKGJ1ZiwoR2xvYmFsSW5mbyopZGF0YSk7CisgICAgICBnX2ZyZWUoYnVmKTsKKyAgICB9IGVsc2UgeworICAgICAgYnVmID0gZ19tYWxsb2MoQlVGX1NJWkUrMSk7CisgICAgICB3aGlsZSAoVFJVRSkgeworICAgICAgICBidWZbQlVGX1NJWkVdPSdcMCc7CisgICAgICAgIGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKGNoLGJ1ZixCVUZfU0laRSwmbGVuLCZlcnIpOworICAgICAgICBpZiAobGVuKSB7CisgICAgICAgICAgYnVmW2xlbl09J1wwJzsKKyAgICAgICAgICBpZiAoYWxsKSB7CisgICAgICAgICAgICB0bXA9YWxsOworICAgICAgICAgICAgYWxsPWdfc3RyZHVwX3ByaW50ZigiJXMlcyIsIHRtcCwgYnVmKTsKKyAgICAgICAgICAgIGdfZnJlZSh0bXApOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbGwgPSBnX3N0cmR1cChidWYpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChhbGwpIHsKKyAgICAgICAgbmV3X2Nvbm4oYWxsLChHbG9iYWxJbmZvKilkYXRhKTsKKyAgICAgICAgZ19mcmVlKGFsbCk7CisgICAgICB9CisgICAgICBnX2ZyZWUoYnVmKTsKKyAgICB9CisgICAgaWYgKCBlcnIgKSB7CisgICAgICBnX2Vycm9yKCJmaWZvX2NiOiAlcyIsIGVyci0+bWVzc2FnZSk7CisgICAgICBnX2ZyZWUoZXJyKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfSB3aGlsZSAoIChsZW4pICYmIChydiA9PSBHX0lPX1NUQVRVU19OT1JNQUwpICk7CisgIHJldHVybiBUUlVFOworfQorCisKKworCitpbnQgaW5pdF9maWZvKHZvaWQpCit7Cisgc3RydWN0IHN0YXQgc3Q7CisgY29uc3QgY2hhciAqZmlmbyA9ICJoaXBlci5maWZvIjsKKyBpbnQgc29ja2V0OworCisgaWYgKGxzdGF0IChmaWZvLCAmc3QpID09IDApIHsKKyAgaWYgKChzdC5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGUkVHKSB7CisgICBlcnJubyA9IEVFWElTVDsKKyAgIHBlcnJvcigibHN0YXQiKTsKKyAgIGV4aXQgKDEpOworICB9CisgfQorCisgdW5saW5rIChmaWZvKTsKKyBpZiAobWtmaWZvIChmaWZvLCAwNjAwKSA9PSAtMSkgeworICBwZXJyb3IoIm1rZmlmbyIpOworICBleGl0ICgxKTsKKyB9CisKKyBzb2NrZXQgPSBvcGVuIChmaWZvLCBPX1JEV1IgfCBPX05PTkJMT0NLLCAwKTsKKworIGlmIChzb2NrZXQgPT0gLTEpIHsKKyAgcGVycm9yKCJvcGVuIik7CisgIGV4aXQgKDEpOworIH0KKyBNU0dfT1VUKCJOb3csIHBpcGUgc29tZSBVUkwncyBpbnRvID4gJXNcbiIsIGZpZm8pOworCisgcmV0dXJuIHNvY2tldDsKKworfQorCisKKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIEdsb2JhbEluZm8gKmc7CisgIENVUkxNY29kZSByYzsKKyAgR01haW5Mb29wKmdtYWluOworICBpbnQgZmQ7CisgIEdJT0NoYW5uZWwqIGNoOworICBnPWdfbWFsbG9jMChzaXplb2YoR2xvYmFsSW5mbykpOworCisgIGZkPWluaXRfZmlmbygpOworICBjaD1nX2lvX2NoYW5uZWxfdW5peF9uZXcoZmQpOworICBnX2lvX2FkZF93YXRjaChjaCxHX0lPX0lOLGZpZm9fY2IsZyk7CisgIGdtYWluPWdfbWFpbl9sb29wX25ldyhOVUxMLEZBTFNFKTsKKyAgZy0+bXVsdGkgPSBjdXJsX211bHRpX2luaXQoKTsKKyAgY3VybF9tdWx0aV9zZXRvcHQoZy0+bXVsdGksIENVUkxNT1BUX1NPQ0tFVEZVTkNUSU9OLCBzb2NrX2NiKTsKKyAgY3VybF9tdWx0aV9zZXRvcHQoZy0+bXVsdGksIENVUkxNT1BUX1NPQ0tFVERBVEEsIGcpOworICBjdXJsX211bHRpX3NldG9wdChnLT5tdWx0aSwgQ1VSTE1PUFRfVElNRVJGVU5DVElPTiwgdXBkYXRlX3RpbWVvdXRfY2IpOworICBjdXJsX211bHRpX3NldG9wdChnLT5tdWx0aSwgQ1VSTE1PUFRfVElNRVJEQVRBLCBnKTsKKworICAvKiB3ZSBkb24ndCBjYWxsIGFueSBjdXJsX211bHRpX3NvY2tldCooKSBmdW5jdGlvbiB5ZXQgYXMgd2UgaGF2ZSBubyBoYW5kbGVzCisgICAgIGFkZGVkISAqLworCisgIGdfbWFpbl9sb29wX3J1bihnbWFpbik7CisgIGN1cmxfbXVsdGlfY2xlYW51cChnLT5tdWx0aSk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9oaXBlcmZpZm8uYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvaGlwZXJmaWZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzNjY0MwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvaGlwZXJmaWZvLmMKQEAgLTAsMCArMSw0MTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRXhhbXBsZSBhcHBsaWNhdGlvbiBzb3VyY2UgY29kZSB1c2luZyB0aGUgbXVsdGkgc29ja2V0IGludGVyZmFjZSB0bworICAgZG93bmxvYWQgbWFueSBmaWxlcyBhdCBvbmNlLgorCitXcml0dGVuIGJ5IEplZmYgUG9obG1leWVyCisKK1JlcXVpcmVzIGxpYmV2ZW50IGFuZCBhIChQT1NJWD8pIHN5c3RlbSB0aGF0IGhhcyBta2ZpZm8oKS4KKworVGhpcyBpcyBhbiBhZGFwdGF0aW9uIG9mIGxpYmN1cmwncyAiaGlwZXYuYyIgYW5kIGxpYmV2ZW50J3MgImV2ZW50LXRlc3QuYyIKK3NhbXBsZSBwcm9ncmFtcy4KKworV2hlbiBydW5uaW5nLCB0aGUgcHJvZ3JhbSBjcmVhdGVzIHRoZSBuYW1lZCBwaXBlICJoaXBlci5maWZvIgorCitXaGVuZXZlciB0aGVyZSBpcyBpbnB1dCBpbnRvIHRoZSBmaWZvLCB0aGUgcHJvZ3JhbSByZWFkcyB0aGUgaW5wdXQgYXMgYSBsaXN0CitvZiBVUkwncyBhbmQgY3JlYXRlcyBzb21lIG5ldyBlYXN5IGhhbmRsZXMgdG8gZmV0Y2ggZWFjaCBVUkwgdmlhIHRoZQorY3VybF9tdWx0aSAiaGlwZXIiIEFQSS4KKworCitUaHVzLCB5b3UgY2FuIHRyeSBhIHNpbmdsZSBVUkw6CisgICUgZWNobyBodHRwOi8vd3d3LnlhaG9vLmNvbSA+IGhpcGVyLmZpZm8KKworT3IgYSB3aG9sZSBidW5jaCBvZiB0aGVtOgorICAlIGNhdCBteS11cmwtbGlzdCA+IGhpcGVyLmZpZm8KKworVGhlIGZpZm8gYnVmZmVyIGlzIGhhbmRsZWQgYWxtb3N0IGluc3RhbnRseSwgc28geW91IGNhbiBldmVuIGFkZCBtb3JlIFVSTCdzCit3aGlsZSB0aGUgcHJldmlvdXMgcmVxdWVzdHMgYXJlIHN0aWxsIGJlaW5nIGRvd25sb2FkZWQuCisKK05vdGU6CisgIEZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LCBVUkwgbGVuZ3RoIGlzIGxpbWl0ZWQgdG8gMTAyMyBjaGFyJ3MgIQorCitUaGlzIGlzIHB1cmVseSBhIGRlbW8gYXBwLCBhbGwgcmV0cmlldmVkIGRhdGEgaXMgc2ltcGx5IGRpc2NhcmRlZCBieSB0aGUgd3JpdGUKK2NhbGxiYWNrLgorCisqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgPGV2ZW50Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKworI2RlZmluZSBNU0dfT1VUIHN0ZG91dCAvKiBTZW5kIGluZm8gdG8gc3Rkb3V0LCBjaGFuZ2UgdG8gc3RkZXJyIGlmIHlvdSB3YW50ICovCisKKworLyogR2xvYmFsIGluZm9ybWF0aW9uLCBjb21tb24gdG8gYWxsIGNvbm5lY3Rpb25zICovCit0eXBlZGVmIHN0cnVjdCBfR2xvYmFsSW5mbyB7CisgIHN0cnVjdCBldmVudCBmaWZvX2V2ZW50OworICBzdHJ1Y3QgZXZlbnQgdGltZXJfZXZlbnQ7CisgIENVUkxNICptdWx0aTsKKyAgaW50IHN0aWxsX3J1bm5pbmc7CisgIEZJTEUqIGlucHV0OworfSBHbG9iYWxJbmZvOworCisKKy8qIEluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGVhc3kgaGFuZGxlICovCit0eXBlZGVmIHN0cnVjdCBfQ29ubkluZm8geworICBDVVJMICplYXN5OworICBjaGFyICp1cmw7CisgIEdsb2JhbEluZm8gKmdsb2JhbDsKKyAgY2hhciBlcnJvcltDVVJMX0VSUk9SX1NJWkVdOworfSBDb25uSW5mbzsKKworCisvKiBJbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBzb2NrZXQgKi8KK3R5cGVkZWYgc3RydWN0IF9Tb2NrSW5mbyB7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkOworICBDVVJMICplYXN5OworICBpbnQgYWN0aW9uOworICBsb25nIHRpbWVvdXQ7CisgIHN0cnVjdCBldmVudCBldjsKKyAgaW50IGV2c2V0OworICBHbG9iYWxJbmZvICpnbG9iYWw7Cit9IFNvY2tJbmZvOworCisKKworLyogVXBkYXRlIHRoZSBldmVudCB0aW1lciBhZnRlciBjdXJsX211bHRpIGxpYnJhcnkgY2FsbHMgKi8KK3N0YXRpYyBpbnQgbXVsdGlfdGltZXJfY2IoQ1VSTE0gKm11bHRpLCBsb25nIHRpbWVvdXRfbXMsIEdsb2JhbEluZm8gKmcpCit7CisgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisgICh2b2lkKW11bHRpOyAvKiB1bnVzZWQgKi8KKworICB0aW1lb3V0LnR2X3NlYyA9IHRpbWVvdXRfbXMvMTAwMDsKKyAgdGltZW91dC50dl91c2VjID0gKHRpbWVvdXRfbXMlMTAwMCkqMTAwMDsKKyAgZnByaW50ZihNU0dfT1VULCAibXVsdGlfdGltZXJfY2I6IFNldHRpbmcgdGltZW91dCB0byAlbGQgbXNcbiIsIHRpbWVvdXRfbXMpOworICBldnRpbWVyX2FkZCgmZy0+dGltZXJfZXZlbnQsICZ0aW1lb3V0KTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIERpZSBpZiB3ZSBnZXQgYSBiYWQgQ1VSTE1jb2RlIHNvbWV3aGVyZSAqLworc3RhdGljIHZvaWQgbWNvZGVfb3JfZGllKGNvbnN0IGNoYXIgKndoZXJlLCBDVVJMTWNvZGUgY29kZSkKK3sKKyAgaWYgKCBDVVJMTV9PSyAhPSBjb2RlICkgeworICAgIGNvbnN0IGNoYXIgKnM7CisgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICBjYXNlICAgICBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk06IHM9IkNVUkxNX0NBTExfTVVMVElfUEVSRk9STSI7IGJyZWFrOworICAgICAgY2FzZSAgICAgQ1VSTE1fQkFEX0hBTkRMRTogICAgICAgICBzPSJDVVJMTV9CQURfSEFORExFIjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgICAgIENVUkxNX0JBRF9FQVNZX0hBTkRMRTogICAgcz0iQ1VSTE1fQkFEX0VBU1lfSEFORExFIjsgICAgYnJlYWs7CisgICAgICBjYXNlICAgICBDVVJMTV9PVVRfT0ZfTUVNT1JZOiAgICAgIHM9IkNVUkxNX09VVF9PRl9NRU1PUlkiOyAgICAgIGJyZWFrOworICAgICAgY2FzZSAgICAgQ1VSTE1fSU5URVJOQUxfRVJST1I6ICAgICBzPSJDVVJMTV9JTlRFUk5BTF9FUlJPUiI7ICAgICBicmVhazsKKyAgICAgIGNhc2UgICAgIENVUkxNX1VOS05PV05fT1BUSU9OOiAgICAgcz0iQ1VSTE1fVU5LTk9XTl9PUFRJT04iOyAgICAgYnJlYWs7CisgICAgICBjYXNlICAgICBDVVJMTV9MQVNUOiAgICAgICAgICAgICAgIHM9IkNVUkxNX0xBU1QiOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogcz0iQ1VSTE1fdW5rbm93biI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgICAgIENVUkxNX0JBRF9TT0NLRVQ6ICAgICAgICAgcz0iQ1VSTE1fQkFEX1NPQ0tFVCI7CisgICAgICBmcHJpbnRmKE1TR19PVVQsICJFUlJPUjogJXMgcmV0dXJucyAlc1xuIiwgd2hlcmUsIHMpOworICAgICAgLyogaWdub3JlIHRoaXMgZXJyb3IgKi8KKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZnByaW50ZihNU0dfT1VULCAiRVJST1I6ICVzIHJldHVybnMgJXNcbiIsIHdoZXJlLCBzKTsKKyAgICBleGl0KGNvZGUpOworICB9Cit9CisKKworCisvKiBDaGVjayBmb3IgY29tcGxldGVkIHRyYW5zZmVycywgYW5kIHJlbW92ZSB0aGVpciBlYXN5IGhhbmRsZXMgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX211bHRpX2luZm8oR2xvYmFsSW5mbyAqZykKK3sKKyAgY2hhciAqZWZmX3VybDsKKyAgQ1VSTE1zZyAqbXNnOworICBpbnQgbXNnc19sZWZ0OworICBDb25uSW5mbyAqY29ubjsKKyAgQ1VSTCAqZWFzeTsKKyAgQ1VSTGNvZGUgcmVzOworCisgIGZwcmludGYoTVNHX09VVCwgIlJFTUFJTklORzogJWRcbiIsIGctPnN0aWxsX3J1bm5pbmcpOworICB3aGlsZSAoKG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGctPm11bHRpLCAmbXNnc19sZWZ0KSkpIHsKKyAgICBpZiAobXNnLT5tc2cgPT0gQ1VSTE1TR19ET05FKSB7CisgICAgICBlYXN5ID0gbXNnLT5lYXN5X2hhbmRsZTsKKyAgICAgIHJlcyA9IG1zZy0+ZGF0YS5yZXN1bHQ7CisgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhlYXN5LCBDVVJMSU5GT19QUklWQVRFLCAmY29ubik7CisgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhlYXN5LCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmZWZmX3VybCk7CisgICAgICBmcHJpbnRmKE1TR19PVVQsICJET05FOiAlcyA9PiAoJWQpICVzXG4iLCBlZmZfdXJsLCByZXMsIGNvbm4tPmVycm9yKTsKKyAgICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShnLT5tdWx0aSwgZWFzeSk7CisgICAgICBmcmVlKGNvbm4tPnVybCk7CisgICAgICBjdXJsX2Vhc3lfY2xlYW51cChlYXN5KTsKKyAgICAgIGZyZWUoY29ubik7CisgICAgfQorICB9Cit9CisKKworCisvKiBDYWxsZWQgYnkgbGliZXZlbnQgd2hlbiB3ZSBnZXQgYWN0aW9uIG9uIGEgbXVsdGkgc29ja2V0ICovCitzdGF0aWMgdm9pZCBldmVudF9jYihpbnQgZmQsIHNob3J0IGtpbmQsIHZvaWQgKnVzZXJwKQoreworICBHbG9iYWxJbmZvICpnID0gKEdsb2JhbEluZm8qKSB1c2VycDsKKyAgQ1VSTE1jb2RlIHJjOworCisgIGludCBhY3Rpb24gPQorICAgIChraW5kICYgRVZfUkVBRCA/IENVUkxfQ1NFTEVDVF9JTiA6IDApIHwKKyAgICAoa2luZCAmIEVWX1dSSVRFID8gQ1VSTF9DU0VMRUNUX09VVCA6IDApOworCisgIHJjID0gY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKGctPm11bHRpLCBmZCwgYWN0aW9uLCAmZy0+c3RpbGxfcnVubmluZyk7CisgIG1jb2RlX29yX2RpZSgiZXZlbnRfY2I6IGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbiIsIHJjKTsKKworICBjaGVja19tdWx0aV9pbmZvKGcpOworICBpZiAoIGctPnN0aWxsX3J1bm5pbmcgPD0gMCApIHsKKyAgICBmcHJpbnRmKE1TR19PVVQsICJsYXN0IHRyYW5zZmVyIGRvbmUsIGtpbGwgdGltZW91dFxuIik7CisgICAgaWYgKGV2dGltZXJfcGVuZGluZygmZy0+dGltZXJfZXZlbnQsIE5VTEwpKSB7CisgICAgICBldnRpbWVyX2RlbCgmZy0+dGltZXJfZXZlbnQpOworICAgIH0KKyAgfQorfQorCisKKworLyogQ2FsbGVkIGJ5IGxpYmV2ZW50IHdoZW4gb3VyIHRpbWVvdXQgZXhwaXJlcyAqLworc3RhdGljIHZvaWQgdGltZXJfY2IoaW50IGZkLCBzaG9ydCBraW5kLCB2b2lkICp1c2VycCkKK3sKKyAgR2xvYmFsSW5mbyAqZyA9IChHbG9iYWxJbmZvICopdXNlcnA7CisgIENVUkxNY29kZSByYzsKKyAgKHZvaWQpZmQ7CisgICh2b2lkKWtpbmQ7CisKKyAgcmMgPSBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24oZy0+bXVsdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTF9TT0NLRVRfVElNRU9VVCwgMCwgJmctPnN0aWxsX3J1bm5pbmcpOworICBtY29kZV9vcl9kaWUoInRpbWVyX2NiOiBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24iLCByYyk7CisgIGNoZWNrX211bHRpX2luZm8oZyk7Cit9CisKKworCisvKiBDbGVhbiB1cCB0aGUgU29ja0luZm8gc3RydWN0dXJlICovCitzdGF0aWMgdm9pZCByZW1zb2NrKFNvY2tJbmZvICpmKQoreworICBpZiAoZikgeworICAgIGlmIChmLT5ldnNldCkKKyAgICAgIGV2ZW50X2RlbCgmZi0+ZXYpOworICAgIGZyZWUoZik7CisgIH0KK30KKworCisKKy8qIEFzc2lnbiBpbmZvcm1hdGlvbiB0byBhIFNvY2tJbmZvIHN0cnVjdHVyZSAqLworc3RhdGljIHZvaWQgc2V0c29jayhTb2NrSW5mbypmLCBjdXJsX3NvY2tldF90IHMsIENVUkwqZSwgaW50IGFjdCwgR2xvYmFsSW5mbypnKQoreworICBpbnQga2luZCA9CisgICAgIChhY3QmQ1VSTF9QT0xMX0lOP0VWX1JFQUQ6MCl8KGFjdCZDVVJMX1BPTExfT1VUP0VWX1dSSVRFOjApfEVWX1BFUlNJU1Q7CisKKyAgZi0+c29ja2ZkID0gczsKKyAgZi0+YWN0aW9uID0gYWN0OworICBmLT5lYXN5ID0gZTsKKyAgaWYgKGYtPmV2c2V0KQorICAgIGV2ZW50X2RlbCgmZi0+ZXYpOworICBldmVudF9zZXQoJmYtPmV2LCBmLT5zb2NrZmQsIGtpbmQsIGV2ZW50X2NiLCBnKTsKKyAgZi0+ZXZzZXQ9MTsKKyAgZXZlbnRfYWRkKCZmLT5ldiwgTlVMTCk7Cit9CisKKworCisvKiBJbml0aWFsaXplIGEgbmV3IFNvY2tJbmZvIHN0cnVjdHVyZSAqLworc3RhdGljIHZvaWQgYWRkc29jayhjdXJsX3NvY2tldF90IHMsIENVUkwgKmVhc3ksIGludCBhY3Rpb24sIEdsb2JhbEluZm8gKmcpIHsKKyAgU29ja0luZm8gKmZkcCA9IGNhbGxvYyhzaXplb2YoU29ja0luZm8pLCAxKTsKKworICBmZHAtPmdsb2JhbCA9IGc7CisgIHNldHNvY2soZmRwLCBzLCBlYXN5LCBhY3Rpb24sIGcpOworICBjdXJsX211bHRpX2Fzc2lnbihnLT5tdWx0aSwgcywgZmRwKTsKK30KKworLyogQ1VSTE1PUFRfU09DS0VURlVOQ1RJT04gKi8KK3N0YXRpYyBpbnQgc29ja19jYihDVVJMICplLCBjdXJsX3NvY2tldF90IHMsIGludCB3aGF0LCB2b2lkICpjYnAsIHZvaWQgKnNvY2twKQoreworICBHbG9iYWxJbmZvICpnID0gKEdsb2JhbEluZm8qKSBjYnA7CisgIFNvY2tJbmZvICpmZHAgPSAoU29ja0luZm8qKSBzb2NrcDsKKyAgY29uc3QgY2hhciAqd2hhdHN0cltdPXsgIm5vbmUiLCAiSU4iLCAiT1VUIiwgIklOT1VUIiwgIlJFTU9WRSIgfTsKKworICBmcHJpbnRmKE1TR19PVVQsCisgICAgICAgICAgInNvY2tldCBjYWxsYmFjazogcz0lZCBlPSVwIHdoYXQ9JXMgIiwgcywgZSwgd2hhdHN0clt3aGF0XSk7CisgIGlmICh3aGF0ID09IENVUkxfUE9MTF9SRU1PVkUpIHsKKyAgICBmcHJpbnRmKE1TR19PVVQsICJcbiIpOworICAgIHJlbXNvY2soZmRwKTsKKyAgfQorICBlbHNlIHsKKyAgICBpZiAoIWZkcCkgeworICAgICAgZnByaW50ZihNU0dfT1VULCAiQWRkaW5nIGRhdGE6ICVzXG4iLCB3aGF0c3RyW3doYXRdKTsKKyAgICAgIGFkZHNvY2socywgZSwgd2hhdCwgZyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZnByaW50ZihNU0dfT1VULAorICAgICAgICAgICAgICAiQ2hhbmdpbmcgYWN0aW9uIGZyb20gJXMgdG8gJXNcbiIsCisgICAgICAgICAgICAgIHdoYXRzdHJbZmRwLT5hY3Rpb25dLCB3aGF0c3RyW3doYXRdKTsKKyAgICAgIHNldHNvY2soZmRwLCBzLCBlLCB3aGF0LCBnKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKworCisvKiBDVVJMT1BUX1dSSVRFRlVOQ1RJT04gKi8KK3N0YXRpYyBzaXplX3Qgd3JpdGVfY2Iodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpkYXRhKQoreworICBzaXplX3QgcmVhbHNpemUgPSBzaXplICogbm1lbWI7CisgIENvbm5JbmZvICpjb25uID0gKENvbm5JbmZvKikgZGF0YTsKKyAgKHZvaWQpcHRyOworICAodm9pZCljb25uOworICByZXR1cm4gcmVhbHNpemU7Cit9CisKKworLyogQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OICovCitzdGF0aWMgaW50IHByb2dfY2IgKHZvaWQgKnAsIGRvdWJsZSBkbHRvdGFsLCBkb3VibGUgZGxub3csIGRvdWJsZSB1bHQsCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB1bG4pCit7CisgIENvbm5JbmZvICpjb25uID0gKENvbm5JbmZvICopcDsKKyAgKHZvaWQpdWx0OworICAodm9pZCl1bG47CisKKyAgZnByaW50ZihNU0dfT1VULCAiUHJvZ3Jlc3M6ICVzICglZy8lZylcbiIsIGNvbm4tPnVybCwgZGxub3csIGRsdG90YWwpOworICByZXR1cm4gMDsKK30KKworCisvKiBDcmVhdGUgYSBuZXcgZWFzeSBoYW5kbGUsIGFuZCBhZGQgaXQgdG8gdGhlIGdsb2JhbCBjdXJsX211bHRpICovCitzdGF0aWMgdm9pZCBuZXdfY29ubihjaGFyICp1cmwsIEdsb2JhbEluZm8gKmcgKQoreworICBDb25uSW5mbyAqY29ubjsKKyAgQ1VSTE1jb2RlIHJjOworCisgIGNvbm4gPSBjYWxsb2MoMSwgc2l6ZW9mKENvbm5JbmZvKSk7CisgIG1lbXNldChjb25uLCAwLCBzaXplb2YoQ29ubkluZm8pKTsKKyAgY29ubi0+ZXJyb3JbMF09J1wwJzsKKworICBjb25uLT5lYXN5ID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYgKCFjb25uLT5lYXN5KSB7CisgICAgZnByaW50ZihNU0dfT1VULCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWQsIGV4aXRpbmchXG4iKTsKKyAgICBleGl0KDIpOworICB9CisgIGNvbm4tPmdsb2JhbCA9IGc7CisgIGNvbm4tPnVybCA9IHN0cmR1cCh1cmwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfVVJMLCBjb25uLT51cmwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgd3JpdGVfY2IpOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfV1JJVEVEQVRBLCAmY29ubik7CisgIGN1cmxfZWFzeV9zZXRvcHQoY29ubi0+ZWFzeSwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoY29ubi0+ZWFzeSwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgY29ubi0+ZXJyb3IpOworICBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4tPmVhc3ksIENVUkxPUFRfUFJJVkFURSwgY29ubik7CisgIGN1cmxfZWFzeV9zZXRvcHQoY29ubi0+ZWFzeSwgQ1VSTE9QVF9OT1BST0dSRVNTLCAwTCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoY29ubi0+ZWFzeSwgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OLCBwcm9nX2NiKTsKKyAgY3VybF9lYXN5X3NldG9wdChjb25uLT5lYXN5LCBDVVJMT1BUX1BST0dSRVNTREFUQSwgY29ubik7CisgIGZwcmludGYoTVNHX09VVCwKKyAgICAgICAgICAiQWRkaW5nIGVhc3kgJXAgdG8gbXVsdGkgJXAgKCVzKVxuIiwgY29ubi0+ZWFzeSwgZy0+bXVsdGksIHVybCk7CisgIHJjID0gY3VybF9tdWx0aV9hZGRfaGFuZGxlKGctPm11bHRpLCBjb25uLT5lYXN5KTsKKyAgbWNvZGVfb3JfZGllKCJuZXdfY29ubjogY3VybF9tdWx0aV9hZGRfaGFuZGxlIiwgcmMpOworCisgIC8qIG5vdGUgdGhhdCB0aGUgYWRkX2hhbmRsZSgpIHdpbGwgc2V0IGEgdGltZS1vdXQgdG8gdHJpZ2dlciB2ZXJ5IHNvb24gc28KKyAgICAgdGhhdCB0aGUgbmVjZXNzYXJ5IHNvY2tldF9hY3Rpb24oKSBjYWxsIHdpbGwgYmUgY2FsbGVkIGJ5IHRoaXMgYXBwICovCit9CisKKy8qIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgZGF0YSBpcyByZWNlaXZlZCBmcm9tIHRoZSBmaWZvICovCitzdGF0aWMgdm9pZCBmaWZvX2NiKGludCBmZCwgc2hvcnQgZXZlbnQsIHZvaWQgKmFyZykKK3sKKyAgY2hhciBzWzEwMjRdOworICBsb25nIGludCBydj0wOworICBpbnQgbj0wOworICBHbG9iYWxJbmZvICpnID0gKEdsb2JhbEluZm8gKilhcmc7CisgICh2b2lkKWZkOyAvKiB1bnVzZWQgKi8KKyAgKHZvaWQpZXZlbnQ7IC8qIHVudXNlZCAqLworCisgIGRvIHsKKyAgICBzWzBdPSdcMCc7CisgICAgcnY9ZnNjYW5mKGctPmlucHV0LCAiJTEwMjNzJW4iLCBzLCAmbik7CisgICAgc1tuXT0nXDAnOworICAgIGlmICggbiAmJiBzWzBdICkgeworICAgICAgbmV3X2Nvbm4ocyxhcmcpOyAgLyogaWYgd2UgcmVhZCBhIFVSTCwgZ28gZ2V0IGl0ISAqLworICAgIH0gZWxzZSBicmVhazsKKyAgfSB3aGlsZSAoIHJ2ICE9IEVPRik7Cit9CisKKy8qIENyZWF0ZSBhIG5hbWVkIHBpcGUgYW5kIHRlbGwgbGliZXZlbnQgdG8gbW9uaXRvciBpdCAqLworc3RhdGljIGludCBpbml0X2ZpZm8gKEdsb2JhbEluZm8gKmcpCit7CisgIHN0cnVjdCBzdGF0IHN0OworICBzdGF0aWMgY29uc3QgY2hhciAqZmlmbyA9ICJoaXBlci5maWZvIjsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQ7CisKKyAgZnByaW50ZihNU0dfT1VULCAiQ3JlYXRpbmcgbmFtZWQgcGlwZSBcIiVzXCJcbiIsIGZpZm8pOworICBpZiAobHN0YXQgKGZpZm8sICZzdCkgPT0gMCkgeworICAgIGlmICgoc3Quc3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRlJFRykgeworICAgICAgZXJybm8gPSBFRVhJU1Q7CisgICAgICBwZXJyb3IoImxzdGF0Iik7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisgIH0KKyAgdW5saW5rKGZpZm8pOworICBpZiAobWtmaWZvIChmaWZvLCAwNjAwKSA9PSAtMSkgeworICAgIHBlcnJvcigibWtmaWZvIik7CisgICAgZXhpdCAoMSk7CisgIH0KKyAgc29ja2ZkID0gb3BlbihmaWZvLCBPX1JEV1IgfCBPX05PTkJMT0NLLCAwKTsKKyAgaWYgKHNvY2tmZCA9PSAtMSkgeworICAgIHBlcnJvcigib3BlbiIpOworICAgIGV4aXQgKDEpOworICB9CisgIGctPmlucHV0ID0gZmRvcGVuKHNvY2tmZCwgInIiKTsKKworICBmcHJpbnRmKE1TR19PVVQsICJOb3csIHBpcGUgc29tZSBVUkwncyBpbnRvID4gJXNcbiIsIGZpZm8pOworICBldmVudF9zZXQoJmctPmZpZm9fZXZlbnQsIHNvY2tmZCwgRVZfUkVBRCB8IEVWX1BFUlNJU1QsIGZpZm9fY2IsIGcpOworICBldmVudF9hZGQoJmctPmZpZm9fZXZlbnQsIE5VTEwpOworICByZXR1cm4gKDApOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIEdsb2JhbEluZm8gZzsKKyAgKHZvaWQpYXJnYzsKKyAgKHZvaWQpYXJndjsKKworICBtZW1zZXQoJmcsIDAsIHNpemVvZihHbG9iYWxJbmZvKSk7CisgIGV2ZW50X2luaXQoKTsKKyAgaW5pdF9maWZvKCZnKTsKKyAgZy5tdWx0aSA9IGN1cmxfbXVsdGlfaW5pdCgpOworICBldnRpbWVyX3NldCgmZy50aW1lcl9ldmVudCwgdGltZXJfY2IsICZnKTsKKworICAvKiBzZXR1cCB0aGUgZ2VuZXJpYyBtdWx0aSBpbnRlcmZhY2Ugb3B0aW9ucyB3ZSB3YW50ICovCisgIGN1cmxfbXVsdGlfc2V0b3B0KGcubXVsdGksIENVUkxNT1BUX1NPQ0tFVEZVTkNUSU9OLCBzb2NrX2NiKTsKKyAgY3VybF9tdWx0aV9zZXRvcHQoZy5tdWx0aSwgQ1VSTE1PUFRfU09DS0VUREFUQSwgJmcpOworICBjdXJsX211bHRpX3NldG9wdChnLm11bHRpLCBDVVJMTU9QVF9USU1FUkZVTkNUSU9OLCBtdWx0aV90aW1lcl9jYik7CisgIGN1cmxfbXVsdGlfc2V0b3B0KGcubXVsdGksIENVUkxNT1BUX1RJTUVSREFUQSwgJmcpOworCisgIC8qIHdlIGRvbid0IGNhbGwgYW55IGN1cmxfbXVsdGlfc29ja2V0KigpIGZ1bmN0aW9uIHlldCBhcyB3ZSBoYXZlIG5vIGhhbmRsZXMKKyAgICAgYWRkZWQhICovCisKKyAgZXZlbnRfZGlzcGF0Y2goKTsKKyAgY3VybF9tdWx0aV9jbGVhbnVwKGcubXVsdGkpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvaHRtbHRpZHkuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvaHRtbHRpZHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzZlMzMxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9odG1sdGlkeS5jCkBAIC0wLDAgKzEsMTMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERvd25sb2FkIGEgZG9jdW1lbnQgYW5kIHVzZSBsaWJ0aWR5IHRvIHBhcnNlIHRoZSBIVE1MLgorICogV3JpdHRlbiBieSBKZWZmIFBvaGxtZXllcgorICoKKyAqIExpYlRpZHkgPT4gaHR0cDovL3RpZHkuc291cmNlZm9yZ2UubmV0CisgKgorICogZ2NjIC1XYWxsIC1JL3Vzci9sb2NhbC9pbmNsdWRlIHRpZHljdXJsLmMgLWxjdXJsIC1sdGlkeSAtbyB0aWR5Y3VybAorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aWR5L3RpZHkuaD4KKyNpbmNsdWRlIDx0aWR5L2J1ZmZpby5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisvKiBjdXJsIHdyaXRlIGNhbGxiYWNrLCB0byBmaWxsIHRpZHkncyBpbnB1dCBidWZmZXIuLi4gICovCit1aW50IHdyaXRlX2NiKGNoYXIgKmluLCB1aW50IHNpemUsIHVpbnQgbm1lbWIsIFRpZHlCdWZmZXIgKm91dCkKK3sKKyAgdWludCByOworICByID0gc2l6ZSAqIG5tZW1iOworICB0aWR5QnVmQXBwZW5kKCBvdXQsIGluLCByICk7CisgIHJldHVybihyKTsKK30KKworLyogVHJhdmVyc2UgdGhlIGRvY3VtZW50IHRyZWUgKi8KK3ZvaWQgZHVtcE5vZGUoVGlkeURvYyBkb2MsIFRpZHlOb2RlIHRub2QsIGludCBpbmRlbnQgKQoreworICBUaWR5Tm9kZSBjaGlsZDsKKyAgZm9yICggY2hpbGQgPSB0aWR5R2V0Q2hpbGQodG5vZCk7IGNoaWxkOyBjaGlsZCA9IHRpZHlHZXROZXh0KGNoaWxkKSApCisgIHsKKyAgICBjdG1ic3RyIG5hbWUgPSB0aWR5Tm9kZUdldE5hbWUoIGNoaWxkICk7CisgICAgaWYgKCBuYW1lICkKKyAgICB7CisgICAgICAvKiBpZiBpdCBoYXMgYSBuYW1lLCB0aGVuIGl0J3MgYW4gSFRNTCB0YWcgLi4uICovCisgICAgICBUaWR5QXR0ciBhdHRyOworICAgICAgcHJpbnRmKCAiJSouKnMlcyAiLCBpbmRlbnQsIGluZGVudCwgIjwiLCBuYW1lKTsKKyAgICAgIC8qIHdhbGsgdGhlIGF0dHJpYnV0ZSBsaXN0ICovCisgICAgICBmb3IgKCBhdHRyPXRpZHlBdHRyRmlyc3QoY2hpbGQpOyBhdHRyOyBhdHRyPXRpZHlBdHRyTmV4dChhdHRyKSApIHsKKyAgICAgICAgcHJpbnRmKHRpZHlBdHRyTmFtZShhdHRyKSk7CisgICAgICAgIHRpZHlBdHRyVmFsdWUoYXR0cik/cHJpbnRmKCI9XCIlc1wiICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZHlBdHRyVmFsdWUoYXR0cikpOnByaW50ZigiICIpOworICAgICAgfQorICAgICAgcHJpbnRmKCAiPlxuIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogaWYgaXQgZG9lc24ndCBoYXZlIGEgbmFtZSwgdGhlbiBpdCdzIHByb2JhYmx5IHRleHQsIGNkYXRhLCBldGMuLi4gKi8KKyAgICAgIFRpZHlCdWZmZXIgYnVmOworICAgICAgdGlkeUJ1ZkluaXQoJmJ1Zik7CisgICAgICB0aWR5Tm9kZUdldFRleHQoZG9jLCBjaGlsZCwgJmJ1Zik7CisgICAgICBwcmludGYoIiUqLipzXG4iLCBpbmRlbnQsIGluZGVudCwgYnVmLmJwPyhjaGFyICopYnVmLmJwOiIiKTsKKyAgICAgIHRpZHlCdWZGcmVlKCZidWYpOworICAgIH0KKyAgICBkdW1wTm9kZSggZG9jLCBjaGlsZCwgaW5kZW50ICsgNCApOyAvKiByZWN1cnNpdmUgKi8KKyAgfQorfQorCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndiApCit7CisgIENVUkwgKmN1cmw7CisgIGNoYXIgY3VybF9lcnJidWZbQ1VSTF9FUlJPUl9TSVpFXTsKKyAgVGlkeURvYyB0ZG9jOworICBUaWR5QnVmZmVyIGRvY2J1ZiA9IHswfTsKKyAgVGlkeUJ1ZmZlciB0aWR5X2VycmJ1ZiA9IHswfTsKKyAgaW50IGVycjsKKyAgaWYgKCBhcmdjID09IDIpIHsKKyAgICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBhcmd2WzFdKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfRVJST1JCVUZGRVIsIGN1cmxfZXJyYnVmKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfTk9QUk9HUkVTUywgMEwpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIHdyaXRlX2NiKTsKKworICAgIHRkb2MgPSB0aWR5Q3JlYXRlKCk7CisgICAgdGlkeU9wdFNldEJvb2wodGRvYywgVGlkeUZvcmNlT3V0cHV0LCB5ZXMpOyAvKiB0cnkgaGFyZGVyICovCisgICAgdGlkeU9wdFNldEludCh0ZG9jLCBUaWR5V3JhcExlbiwgNDA5Nik7CisgICAgdGlkeVNldEVycm9yQnVmZmVyKCB0ZG9jLCAmdGlkeV9lcnJidWYgKTsKKyAgICB0aWR5QnVmSW5pdCgmZG9jYnVmKTsKKworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURURBVEEsICZkb2NidWYpOworICAgIGVycj1jdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKyAgICBpZiAoICFlcnIgKSB7CisgICAgICBlcnIgPSB0aWR5UGFyc2VCdWZmZXIodGRvYywgJmRvY2J1Zik7IC8qIHBhcnNlIHRoZSBpbnB1dCAqLworICAgICAgaWYgKCBlcnIgPj0gMCApIHsKKyAgICAgICAgZXJyID0gdGlkeUNsZWFuQW5kUmVwYWlyKHRkb2MpOyAvKiBmaXggYW55IHByb2JsZW1zICovCisgICAgICAgIGlmICggZXJyID49IDAgKSB7CisgICAgICAgICAgZXJyID0gdGlkeVJ1bkRpYWdub3N0aWNzKHRkb2MpOyAvKiBsb2FkIHRpZHkgZXJyb3IgYnVmZmVyICovCisgICAgICAgICAgaWYgKCBlcnIgPj0gMCApIHsKKyAgICAgICAgICAgIGR1bXBOb2RlKCB0ZG9jLCB0aWR5R2V0Um9vdCh0ZG9jKSwgMCApOyAvKiB3YWxrIHRoZSB0cmVlICovCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB0aWR5X2VycmJ1Zi5icCk7IC8qIHNob3cgZXJyb3JzICovCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGN1cmxfZXJyYnVmKTsKKworICAgIC8qIGNsZWFuLXVwICovCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgICAgdGlkeUJ1ZkZyZWUoJmRvY2J1Zik7CisgICAgdGlkeUJ1ZkZyZWUoJnRpZHlfZXJyYnVmKTsKKyAgICB0aWR5UmVsZWFzZSh0ZG9jKTsKKyAgICByZXR1cm4oZXJyKTsKKworICB9CisgIGVsc2UKKyAgICBwcmludGYoICJ1c2FnZTogJXMgPHVybD5cbiIsIGFyZ3ZbMF0gKTsKKworICByZXR1cm4oMCk7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2h0bWx0aXRsZS5jYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvaHRtbHRpdGxlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YTc5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2h0bWx0aXRsZS5jYwpAQCAtMCwwICsxLDMxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBHZXQgYSB3ZWIgcGFnZSwgcGFyc2UgaXQgd2l0aCBsaWJ4bWwuCisvLworLy8gV3JpdHRlbiBieSBMYXJzIE5pbHNzb24KKy8vCisvLyBHTlUgQysrIGNvbXBpbGUgY29tbWFuZCBsaW5lIHN1Z2dlc3Rpb24gKGVkaXQgcGF0aHMgYWNjb3JkaW5nbHkpOgorLy8KKy8vIGcrKyAtV2FsbCAtSS9vcHQvY3VybC9pbmNsdWRlIC1JL29wdC9saWJ4bWwvaW5jbHVkZS9saWJ4bWwyIGh0bWx0aXRsZS5jYyBcCisvLyAtbyBodG1sdGl0bGUgLUwvb3B0L2N1cmwvbGliIC1ML29wdC9saWJ4bWwvbGliIC1sY3VybCAtbHhtbDIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgPGxpYnhtbC9IVE1McGFyc2VyLmg+CisKKy8vCisvLyAgQ2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmcgY29tcGFyaXNvbgorLy8KKworI2lmZGVmIF9NU0NfVkVSCisjZGVmaW5lIENPTVBBUkUoYSwgYikgKCFzdHJpY21wKChhKSwgKGIpKSkKKyNlbHNlCisjZGVmaW5lIENPTVBBUkUoYSwgYikgKCFzdHJjYXNlY21wKChhKSwgKGIpKSkKKyNlbmRpZgorCisvLworLy8gIGxpYnhtbCBjYWxsYmFjayBjb250ZXh0IHN0cnVjdHVyZQorLy8KKworc3RydWN0IENvbnRleHQKK3sKKyAgQ29udGV4dCgpOiBhZGRUaXRsZShmYWxzZSkgeyB9CisKKyAgYm9vbCBhZGRUaXRsZTsKKyAgc3RkOjpzdHJpbmcgdGl0bGU7Cit9OworCisvLworLy8gIGxpYmN1cmwgdmFyaWFibGVzIGZvciBlcnJvciBzdHJpbmdzIGFuZCByZXR1cm5lZCBkYXRhCisKK3N0YXRpYyBjaGFyIGVycm9yQnVmZmVyW0NVUkxfRVJST1JfU0laRV07CitzdGF0aWMgc3RkOjpzdHJpbmcgYnVmZmVyOworCisvLworLy8gIGxpYmN1cmwgd3JpdGUgY2FsbGJhY2sgZnVuY3Rpb24KKy8vCisKK3N0YXRpYyBpbnQgd3JpdGVyKGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsCisgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyAqd3JpdGVyRGF0YSkKK3sKKyAgaWYgKHdyaXRlckRhdGEgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICB3cml0ZXJEYXRhLT5hcHBlbmQoZGF0YSwgc2l6ZSpubWVtYik7CisKKyAgcmV0dXJuIHNpemUgKiBubWVtYjsKK30KKworLy8KKy8vICBsaWJjdXJsIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24KKy8vCisKK3N0YXRpYyBib29sIGluaXQoQ1VSTCAqJmNvbm4sIGNoYXIgKnVybCkKK3sKKyAgQ1VSTGNvZGUgY29kZTsKKworICBjb25uID0gY3VybF9lYXN5X2luaXQoKTsKKworICBpZiAoY29ubiA9PSBOVUxMKQorICB7CisgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY3JlYXRlIENVUkwgY29ubmVjdGlvblxuIik7CisKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgIH0KKworICBjb2RlID0gY3VybF9lYXN5X3NldG9wdChjb25uLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBlcnJvckJ1ZmZlcik7CisgIGlmIChjb2RlICE9IENVUkxFX09LKQorICB7CisgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gc2V0IGVycm9yIGJ1ZmZlciBbJWRdXG4iLCBjb2RlKTsKKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGNvZGUgPSBjdXJsX2Vhc3lfc2V0b3B0KGNvbm4sIENVUkxPUFRfVVJMLCB1cmwpOworICBpZiAoY29kZSAhPSBDVVJMRV9PSykKKyAgeworICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHNldCBVUkwgWyVzXVxuIiwgZXJyb3JCdWZmZXIpOworCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY29kZSA9IGN1cmxfZWFzeV9zZXRvcHQoY29ubiwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMUwpOworICBpZiAoY29kZSAhPSBDVVJMRV9PSykKKyAgeworICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHNldCByZWRpcmVjdCBvcHRpb24gWyVzXVxuIiwgZXJyb3JCdWZmZXIpOworCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY29kZSA9IGN1cmxfZWFzeV9zZXRvcHQoY29ubiwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZXIpOworICBpZiAoY29kZSAhPSBDVVJMRV9PSykKKyAgeworICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHNldCB3cml0ZXIgWyVzXVxuIiwgZXJyb3JCdWZmZXIpOworCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY29kZSA9IGN1cmxfZWFzeV9zZXRvcHQoY29ubiwgQ1VSTE9QVF9XUklURURBVEEsICZidWZmZXIpOworICBpZiAoY29kZSAhPSBDVVJMRV9PSykKKyAgeworICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHNldCB3cml0ZSBkYXRhIFslc11cbiIsIGVycm9yQnVmZmVyKTsKKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCisvLworLy8gIGxpYnhtbCBzdGFydCBlbGVtZW50IGNhbGxiYWNrIGZ1bmN0aW9uCisvLworCitzdGF0aWMgdm9pZCBTdGFydEVsZW1lbnQodm9pZCAqdm9pZENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWxDaGFyICoqYXR0cmlidXRlcykKK3sKKyAgQ29udGV4dCAqY29udGV4dCA9IChDb250ZXh0ICopdm9pZENvbnRleHQ7CisKKyAgaWYgKENPTVBBUkUoKGNoYXIgKiluYW1lLCAiVElUTEUiKSkKKyAgeworICAgIGNvbnRleHQtPnRpdGxlID0gIiI7CisgICAgY29udGV4dC0+YWRkVGl0bGUgPSB0cnVlOworICB9CisgICh2b2lkKSBhdHRyaWJ1dGVzOworfQorCisvLworLy8gIGxpYnhtbCBlbmQgZWxlbWVudCBjYWxsYmFjayBmdW5jdGlvbgorLy8KKworc3RhdGljIHZvaWQgRW5kRWxlbWVudCh2b2lkICp2b2lkQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqbmFtZSkKK3sKKyAgQ29udGV4dCAqY29udGV4dCA9IChDb250ZXh0ICopdm9pZENvbnRleHQ7CisKKyAgaWYgKENPTVBBUkUoKGNoYXIgKiluYW1lLCAiVElUTEUiKSkKKyAgICBjb250ZXh0LT5hZGRUaXRsZSA9IGZhbHNlOworfQorCisvLworLy8gIFRleHQgaGFuZGxpbmcgaGVscGVyIGZ1bmN0aW9uCisvLworCitzdGF0aWMgdm9pZCBoYW5kbGVDaGFyYWN0ZXJzKENvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKmNoYXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoKQoreworICBpZiAoY29udGV4dC0+YWRkVGl0bGUpCisgICAgY29udGV4dC0+dGl0bGUuYXBwZW5kKChjaGFyICopY2hhcnMsIGxlbmd0aCk7Cit9CisKKy8vCisvLyAgbGlieG1sIFBDREFUQSBjYWxsYmFjayBmdW5jdGlvbgorLy8KKworc3RhdGljIHZvaWQgQ2hhcmFjdGVycyh2b2lkICp2b2lkQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1sQ2hhciAqY2hhcnMsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgpCit7CisgIENvbnRleHQgKmNvbnRleHQgPSAoQ29udGV4dCAqKXZvaWRDb250ZXh0OworCisgIGhhbmRsZUNoYXJhY3RlcnMoY29udGV4dCwgY2hhcnMsIGxlbmd0aCk7Cit9CisKKy8vCisvLyAgbGlieG1sIENEQVRBIGNhbGxiYWNrIGZ1bmN0aW9uCisvLworCitzdGF0aWMgdm9pZCBjZGF0YSh2b2lkICp2b2lkQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHhtbENoYXIgKmNoYXJzLAorICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCkKK3sKKyAgQ29udGV4dCAqY29udGV4dCA9IChDb250ZXh0ICopdm9pZENvbnRleHQ7CisKKyAgaGFuZGxlQ2hhcmFjdGVycyhjb250ZXh0LCBjaGFycywgbGVuZ3RoKTsKK30KKworLy8KKy8vICBsaWJ4bWwgU0FYIGNhbGxiYWNrIHN0cnVjdHVyZQorLy8KKworc3RhdGljIGh0bWxTQVhIYW5kbGVyIHNheEhhbmRsZXIgPQoreworICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBTdGFydEVsZW1lbnQsCisgIEVuZEVsZW1lbnQsCisgIE5VTEwsCisgIENoYXJhY3RlcnMsCisgIE5VTEwsCisgIE5VTEwsCisgIE5VTEwsCisgIE5VTEwsCisgIE5VTEwsCisgIE5VTEwsCisgIE5VTEwsCisgIGNkYXRhLAorICBOVUxMCit9OworCisvLworLy8gIFBhcnNlIGdpdmVuIChhc3N1bWVkIHRvIGJlKSBIVE1MIHRleHQgYW5kIHJldHVybiB0aGUgdGl0bGUKKy8vCisKK3N0YXRpYyB2b2lkIHBhcnNlSHRtbChjb25zdCBzdGQ6OnN0cmluZyAmaHRtbCwKKyAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyAmdGl0bGUpCit7CisgIGh0bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgIENvbnRleHQgY29udGV4dDsKKworICBjdHh0ID0gaHRtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KCZzYXhIYW5kbGVyLCAmY29udGV4dCwgIiIsIDAsICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9DSEFSX0VOQ09ESU5HX05PTkUpOworCisgIGh0bWxQYXJzZUNodW5rKGN0eHQsIGh0bWwuY19zdHIoKSwgaHRtbC5zaXplKCksIDApOworICBodG1sUGFyc2VDaHVuayhjdHh0LCAiIiwgMCwgMSk7CisKKyAgaHRtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOworCisgIHRpdGxlID0gY29udGV4dC50aXRsZTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgQ1VSTCAqY29ubiA9IE5VTEw7CisgIENVUkxjb2RlIGNvZGU7CisgIHN0ZDo6c3RyaW5nIHRpdGxlOworCisgIC8vIEVuc3VyZSBvbmUgYXJndW1lbnQgaXMgZ2l2ZW4KKworICBpZiAoYXJnYyAhPSAyKQorICB7CisgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgPHVybD5cbiIsIGFyZ3ZbMF0pOworCisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICB9CisKKyAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9ERUZBVUxUKTsKKworICAvLyBJbml0aWFsaXplIENVUkwgY29ubmVjdGlvbgorCisgIGlmICghaW5pdChjb25uLCBhcmd2WzFdKSkKKyAgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ29ubmVjdGlvbiBpbml0aWFsaXppb24gZmFpbGVkXG4iKTsKKworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgfQorCisgIC8vIFJldHJpZXZlIGNvbnRlbnQgZm9yIHRoZSBVUkwKKworICBjb2RlID0gY3VybF9lYXN5X3BlcmZvcm0oY29ubik7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGNvbm4pOworCisgIGlmIChjb2RlICE9IENVUkxFX09LKQorICB7CisgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZ2V0ICclcycgWyVzXVxuIiwgYXJndlsxXSwgZXJyb3JCdWZmZXIpOworCisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICB9CisKKyAgLy8gUGFyc2UgdGhlIChhc3N1bWVkKSBIVE1MIGNvZGUKKworICBwYXJzZUh0bWwoYnVmZmVyLCB0aXRsZSk7CisKKyAgLy8gRGlzcGxheSB0aGUgZXh0cmFjdGVkIHRpdGxlCisKKyAgcHJpbnRmKCJUaXRsZTogJXNcbiIsIHRpdGxlLmNfc3RyKCkpOworCisgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2h0dHAtcG9zdC5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9odHRwLXBvc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmRlNjI4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9odHRwLXBvc3QuYwpAQCAtMCwwICsxLDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitpbnQgbWFpbih2b2lkKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM7CisKKyAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmKGN1cmwpIHsKKyAgICAvKiBGaXJzdCBzZXQgdGhlIFVSTCB0aGF0IGlzIGFib3V0IHRvIHJlY2VpdmUgb3VyIFBPU1QuIFRoaXMgVVJMIGNhbgorICAgICAgIGp1c3QgYXMgd2VsbCBiZSBhIGh0dHBzOi8vIFVSTCBpZiB0aGF0IGlzIHdoYXQgc2hvdWxkIHJlY2VpdmUgdGhlCisgICAgICAgZGF0YS4gKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCAiaHR0cDovL3Bvc3RpdC5leGFtcGxlLmNvbS9tb28uY2dpIik7CisgICAgLyogTm93IHNwZWNpZnkgdGhlIFBPU1QgZGF0YSAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCAibmFtZT1kYW5pZWwmcHJvamVjdD1jdXJsIik7CisKKyAgICAvKiBQZXJmb3JtIHRoZSByZXF1ZXN0LCByZXMgd2lsbCBnZXQgdGhlIHJldHVybiBjb2RlICovCisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgICAvKiBhbHdheXMgY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICB9CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9odHRwY3VzdG9taGVhZGVyLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2h0dHBjdXN0b21oZWFkZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzdkZjIxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9odHRwY3VzdG9taGVhZGVyLmMKQEAgLTAsMCArMSw1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworaW50IG1haW4odm9pZCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzOworCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZihjdXJsKSB7CisgICAgc3RydWN0IGN1cmxfc2xpc3QgKmNodW5rID0gTlVMTDsKKworICAgIGNodW5rID0gY3VybF9zbGlzdF9hcHBlbmQoY2h1bmssICJBY2NlcHQ6IG1vbyIpOworICAgIGNodW5rID0gY3VybF9zbGlzdF9hcHBlbmQoY2h1bmssICJBbm90aGVyOiB5ZXMiKTsKKworICAgIC8qIHJlcXVlc3Qgd2l0aCB0aGUgYnVpbHQtaW4gQWNjZXB0OiAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsICJsb2NhbGhvc3QiKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAgLyogcmVkbyByZXF1ZXN0IHdpdGggb3VyIG93biBjdXN0b20gQWNjZXB0OiAqLworICAgIHJlcyA9IGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBjaHVuayk7CisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgICAvKiBhbHdheXMgY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICB9CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9odHRwcHV0LmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2h0dHBwdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjRjOGUxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9odHRwcHV0LmMKQEAgLTAsMCArMSwxMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAicHJpbnRmX21hY3JvLmgiCisKKy8qCisgKiBUaGlzIGV4YW1wbGUgc2hvd3MgYSBIVFRQIFBVVCBvcGVyYXRpb24uIFBVVHMgYSBmaWxlIGdpdmVuIGFzIGEgY29tbWFuZAorICogbGluZSBhcmd1bWVudCB0byB0aGUgVVJMIGFsc28gZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKyAqCisgKiBUaGlzIGV4YW1wbGUgYWxzbyB1c2VzIGl0cyBvd24gcmVhZCBjYWxsYmFjay4KKyAqCisgKiBIZXJlJ3MgYW4gYXJ0aWNsZSBvbiBob3cgdG8gc2V0dXAgYSBQVVQgaGFuZGxlciBmb3IgQXBhY2hlOgorICogaHR0cDovL3d3dy5hcGFjaGV3ZWVrLmNvbS9mZWF0dXJlcy9wdXQKKyAqLworCitzdGF0aWMgc2l6ZV90IHJlYWRfY2FsbGJhY2sodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJlYW0pCit7CisgIHNpemVfdCByZXRjb2RlOworCisgIC8qIGluIHJlYWwtd29ybGQgY2FzZXMsIHRoaXMgd291bGQgcHJvYmFibHkgZ2V0IHRoaXMgZGF0YSBkaWZmZXJlbnRseQorICAgICBhcyB0aGlzIGZyZWFkKCkgc3R1ZmYgaXMgZXhhY3RseSB3aGF0IHRoZSBsaWJyYXJ5IGFscmVhZHkgd291bGQgZG8KKyAgICAgYnkgZGVmYXVsdCBpbnRlcm5hbGx5ICovCisgIHJldGNvZGUgPSBmcmVhZChwdHIsIHNpemUsIG5tZW1iLCBzdHJlYW0pOworCisgIGZwcmludGYoc3RkZXJyLCAiKioqIFdlIHJlYWQgJSIgX0ZNVF9TSVpFX1QgIiBieXRlcyBmcm9tIGZpbGVcbiIsIHJldGNvZGUpOworCisgIHJldHVybiByZXRjb2RlOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlczsKKyAgRklMRSAqIGhkX3NyYyA7CisgIGludCBoZCA7CisgIHN0cnVjdCBzdGF0IGZpbGVfaW5mbzsKKworICBjaGFyICpmaWxlOworICBjaGFyICp1cmw7CisKKyAgaWYoYXJnYyA8IDMpCisgICAgcmV0dXJuIDE7CisKKyAgZmlsZT0gYXJndlsxXTsKKyAgdXJsID0gYXJndlsyXTsKKworICAvKiBnZXQgdGhlIGZpbGUgc2l6ZSBvZiB0aGUgbG9jYWwgZmlsZSAqLworICBoZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpIDsKKyAgZnN0YXQoaGQsICZmaWxlX2luZm8pOworICBjbG9zZShoZCkgOworCisgIC8qIGdldCBhIEZJTEUgKiBvZiB0aGUgc2FtZSBmaWxlLCBjb3VsZCBhbHNvIGJlIG1hZGUgd2l0aAorICAgICBmZG9wZW4oKSBmcm9tIHRoZSBwcmV2aW91cyBkZXNjcmlwdG9yLCBidXQgaGV5IHRoaXMgaXMganVzdAorICAgICBhbiBleGFtcGxlISAqLworICBoZF9zcmMgPSBmb3BlbihmaWxlLCAicmIiKTsKKworICAvKiBJbiB3aW5kb3dzLCB0aGlzIHdpbGwgaW5pdCB0aGUgd2luc29jayBzdHVmZiAqLworICBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisKKyAgLyogZ2V0IGEgY3VybCBoYW5kbGUgKi8KKyAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmKGN1cmwpIHsKKyAgICAvKiB3ZSB3YW50IHRvIHVzZSBvdXIgb3duIHJlYWQgZnVuY3Rpb24gKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCByZWFkX2NhbGxiYWNrKTsKKworICAgIC8qIGVuYWJsZSB1cGxvYWRpbmcgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVBMT0FELCAxTCk7CisKKyAgICAvKiBIVFRQIFBVVCBwbGVhc2UgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFVULCAxTCk7CisKKyAgICAvKiBzcGVjaWZ5IHRhcmdldCBVUkwsIGFuZCBub3RlIHRoYXQgdGhpcyBVUkwgc2hvdWxkIGluY2x1ZGUgYSBmaWxlCisgICAgICAgbmFtZSwgbm90IG9ubHkgYSBkaXJlY3RvcnkgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCisgICAgLyogbm93IHNwZWNpZnkgd2hpY2ggZmlsZSB0byB1cGxvYWQgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBRERBVEEsIGhkX3NyYyk7CisKKyAgICAvKiBwcm92aWRlIHRoZSBzaXplIG9mIHRoZSB1cGxvYWQsIHdlIHNwZWNpY2lhbGx5IHR5cGVjYXN0IHRoZSB2YWx1ZQorICAgICAgIHRvIGN1cmxfb2ZmX3Qgc2luY2Ugd2UgbXVzdCBiZSBzdXJlIHRvIHVzZSB0aGUgY29ycmVjdCBkYXRhIHNpemUgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU5GSUxFU0laRV9MQVJHRSwKKyAgICAgICAgICAgICAgICAgICAgIChjdXJsX29mZl90KWZpbGVfaW5mby5zdF9zaXplKTsKKworICAgIC8qIE5vdyBydW4gb2ZmIGFuZCBkbyB3aGF0IHlvdSd2ZSBiZWVuIHRvbGQhICovCisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgICAvKiBhbHdheXMgY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICB9CisgIGZjbG9zZShoZF9zcmMpOyAvKiBjbG9zZSB0aGUgbG9jYWwgZmlsZSAqLworCisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2h0dHBzLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2h0dHBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0MzU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvaHR0cHMuYwpAQCAtMCwwICsxLDY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitpbnQgbWFpbih2b2lkKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM7CisKKyAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmKGN1cmwpIHsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCAiaHR0cHM6Ly9leGFtcGxlLmNvbS8iKTsKKworI2lmZGVmIFNLSVBfUEVFUl9WRVJJRklDQVRJT04KKyAgICAvKgorICAgICAqIElmIHlvdSB3YW50IHRvIGNvbm5lY3QgdG8gYSBzaXRlIHdobyBpc24ndCB1c2luZyBhIGNlcnRpZmljYXRlIHRoYXQgaXMKKyAgICAgKiBzaWduZWQgYnkgb25lIG9mIHRoZSBjZXJ0cyBpbiB0aGUgQ0EgYnVuZGxlIHlvdSBoYXZlLCB5b3UgY2FuIHNraXAgdGhlCisgICAgICogdmVyaWZpY2F0aW9uIG9mIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4gVGhpcyBtYWtlcyB0aGUgY29ubmVjdGlvbgorICAgICAqIEEgTE9UIExFU1MgU0VDVVJFLgorICAgICAqCisgICAgICogSWYgeW91IGhhdmUgYSBDQSBjZXJ0IGZvciB0aGUgc2VydmVyIHN0b3JlZCBzb21lcGxhY2UgZWxzZSB0aGFuIGluIHRoZQorICAgICAqIGRlZmF1bHQgYnVuZGxlLCB0aGVuIHRoZSBDVVJMT1BUX0NBUEFUSCBvcHRpb24gbWlnaHQgY29tZSBoYW5keSBmb3IKKyAgICAgKiB5b3UuCisgICAgICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAwTCk7CisjZW5kaWYKKworI2lmZGVmIFNLSVBfSE9TVE5BTUVfVkVSRklDQVRJT04KKyAgICAvKgorICAgICAqIElmIHRoZSBzaXRlIHlvdSdyZSBjb25uZWN0aW5nIHRvIHVzZXMgYSBkaWZmZXJlbnQgaG9zdCBuYW1lIHRoYXQgd2hhdAorICAgICAqIHRoZXkgaGF2ZSBtZW50aW9uZWQgaW4gdGhlaXIgc2VydmVyIGNlcnRpZmljYXRlJ3MgY29tbW9uTmFtZSAob3IKKyAgICAgKiBzdWJqZWN0QWx0TmFtZSkgZmllbGRzLCBsaWJjdXJsIHdpbGwgcmVmdXNlIHRvIGNvbm5lY3QuIFlvdSBjYW4gc2tpcAorICAgICAqIHRoaXMgY2hlY2ssIGJ1dCB0aGlzIHdpbGwgbWFrZSB0aGUgY29ubmVjdGlvbiBsZXNzIHNlY3VyZS4KKyAgICAgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDBMKTsKKyNlbmRpZgorCisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgICAvKiBhbHdheXMgY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICB9CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9pbWFwLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL2ltYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWZlYTgxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9pbWFwLmMKQEAgLTAsMCArMSw0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworaW50IG1haW4odm9pZCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzOworCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZihjdXJsKSB7CisgICAgLyogU2V0IHVzZXJuYW1lIGFuZCBwYXNzd29yZCAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VU0VSUFdELCAidXNlcjpwYXNzd29yZCIpOworCisgICAgLyogVGhpcyB3aWxsIGZldGNoIHRoZSBtYWlsYm94IG5hbWVkICJmb29iYXIiICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgImltYXA6Ly9pbWFwLmV4YW1wbGUuY29tL2Zvb2JhciIpOworCisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgICAvKiBhbHdheXMgY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICB9CisgIHJldHVybiAoaW50KXJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvbWFrZWZpbGUuZGogYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL21ha2VmaWxlLmRqCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOGVmOGEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL21ha2VmaWxlLmRqCkBAIC0wLDAgKzEsNjAgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgQWRhcHRlZCBmb3IgZGpncHAgLyBXYXR0LTMyIC8gRE9TIGJ5CisjICBHaXNsZSBWYW5lbSA8Z3ZhbmVtQGJyb2FkcGFyay5ubz4KKyMKKworVE9QRElSID0gLi4vLi4KKworaW5jbHVkZSAkKFRPUERJUikvcGFja2FnZXMvRE9TL2NvbW1vbi5kagorCitDRkxBR1MgKz0gLURGQUxTRT0wIC1EVFJVRT0xCisKK0xJQlMgPSAkKFRPUERJUikvbGliL2xpYmN1cmwuYQorCitpZmVxICgkKFVTRV9TU0wpLDEpCisgIExJQlMgKz0gJChPUEVOU1NMX1JPT1QpL2xpYi9saWJzc2wuYSAkKE9QRU5TU0xfUk9PVCkvbGliL2xpYmNyeXB0LmEKK2VuZGlmCisKK2lmZXEgKCQoVVNFX0lETkEpLDEpCisgIExJQlMgKz0gJChMSUJJRE5fUk9PVCkvbGliL2RqX29iai9saWJpZG4uYSAtbGljb252CitlbmRpZgorCitMSUJTICs9ICQoV0FUVDMyX1JPT1QpL2xpYi9saWJ3YXR0LmEgJChaTElCX1JPT1QpL2xpYnouYQorCitpbmNsdWRlIE1ha2VmaWxlLmluYworCitQUk9HUkFNUyA9ICQocGF0c3Vic3QgJSwlLmV4ZSwkKGNoZWNrX1BST0dSQU1TKSkKKworYWxsOiAkKFBST0dSQU1TKQorCUBlY2hvIFdlbGNvbWUgdG8gbGliY3VybCBleGFtcGxlIHByb2dyYW0KKworJS5leGU6ICUuYworCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXiAkKExJQlMpCisJQGVjaG8KKworY2xlYW4gdmNsZWFuIHJlYWxjbGVhbjoKKwktIHJtIC1mICQoUFJPR1JBTVMpIGRlcGVuZC5kagorCistaW5jbHVkZSBkZXBlbmQuZGoKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9tdWx0aS1hcHAuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvbXVsdGktYXBwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYxNWU2NwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvbXVsdGktYXBwLmMKQEAgLTAsMCArMSwxNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVGhpcyBpcyBhbiBleGFtcGxlIGFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIHVzaW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UuICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBzb21ld2hhdCB1bml4LXNwZWNpZmljICovCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogY3VybCBzdHVmZiAqLworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisvKgorICogRG93bmxvYWQgYSBIVFRQIGZpbGUgYW5kIHVwbG9hZCBhbiBGVFAgZmlsZSBzaW11bHRhbmVvdXNseS4KKyAqLworCisjZGVmaW5lIEhBTkRMRUNPVU5UIDIgICAvKiBOdW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHRyYW5zZmVycyAqLworI2RlZmluZSBIVFRQX0hBTkRMRSAwICAgLyogSW5kZXggZm9yIHRoZSBIVFRQIHRyYW5zZmVyICovCisjZGVmaW5lIEZUUF9IQU5ETEUgMSAgICAvKiBJbmRleCBmb3IgdGhlIEZUUCB0cmFuc2ZlciAqLworCitpbnQgbWFpbih2b2lkKQoreworICBDVVJMICpoYW5kbGVzW0hBTkRMRUNPVU5UXTsKKyAgQ1VSTE0gKm11bHRpX2hhbmRsZTsKKworICBpbnQgc3RpbGxfcnVubmluZzsgLyoga2VlcCBudW1iZXIgb2YgcnVubmluZyBoYW5kbGVzICovCisgIGludCBpOworCisgIENVUkxNc2cgKm1zZzsgLyogZm9yIHBpY2tpbmcgdXAgbWVzc2FnZXMgd2l0aCB0aGUgdHJhbnNmZXIgc3RhdHVzICovCisgIGludCBtc2dzX2xlZnQ7IC8qIGhvdyBtYW55IG1lc3NhZ2VzIGFyZSBsZWZ0ICovCisKKyAgLyogQWxsb2NhdGUgb25lIENVUkwgaGFuZGxlIHBlciB0cmFuc2ZlciAqLworICBmb3IgKGk9MDsgaTxIQU5ETEVDT1VOVDsgaSsrKQorICAgICAgaGFuZGxlc1tpXSA9IGN1cmxfZWFzeV9pbml0KCk7CisKKyAgLyogc2V0IHRoZSBvcHRpb25zIChJIGxlZnQgb3V0IGEgZmV3LCB5b3UnbGwgZ2V0IHRoZSBwb2ludCBhbnl3YXkpICovCisgIGN1cmxfZWFzeV9zZXRvcHQoaGFuZGxlc1tIVFRQX0hBTkRMRV0sIENVUkxPUFRfVVJMLCAiaHR0cDovL2V4YW1wbGUuY29tIik7CisKKyAgY3VybF9lYXN5X3NldG9wdChoYW5kbGVzW0ZUUF9IQU5ETEVdLCBDVVJMT1BUX1VSTCwgImZ0cDovL2V4YW1wbGUuY29tIik7CisgIGN1cmxfZWFzeV9zZXRvcHQoaGFuZGxlc1tGVFBfSEFORExFXSwgQ1VSTE9QVF9VUExPQUQsIDFMKTsKKworICAvKiBpbml0IGEgbXVsdGkgc3RhY2sgKi8KKyAgbXVsdGlfaGFuZGxlID0gY3VybF9tdWx0aV9pbml0KCk7CisKKyAgLyogYWRkIHRoZSBpbmRpdmlkdWFsIHRyYW5zZmVycyAqLworICBmb3IgKGk9MDsgaTxIQU5ETEVDT1VOVDsgaSsrKQorICAgICAgY3VybF9tdWx0aV9hZGRfaGFuZGxlKG11bHRpX2hhbmRsZSwgaGFuZGxlc1tpXSk7CisKKyAgLyogd2Ugc3RhcnQgc29tZSBhY3Rpb24gYnkgY2FsbGluZyBwZXJmb3JtIHJpZ2h0IGF3YXkgKi8KKyAgY3VybF9tdWx0aV9wZXJmb3JtKG11bHRpX2hhbmRsZSwgJnN0aWxsX3J1bm5pbmcpOworCisgIHdoaWxlKHN0aWxsX3J1bm5pbmcpIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgIGludCByYzsgLyogc2VsZWN0KCkgcmV0dXJuIGNvZGUgKi8KKworICAgIGZkX3NldCBmZHJlYWQ7CisgICAgZmRfc2V0IGZkd3JpdGU7CisgICAgZmRfc2V0IGZkZXhjZXA7CisgICAgaW50IG1heGZkID0gLTE7CisKKyAgICBsb25nIGN1cmxfdGltZW8gPSAtMTsKKworICAgIEZEX1pFUk8oJmZkcmVhZCk7CisgICAgRkRfWkVSTygmZmR3cml0ZSk7CisgICAgRkRfWkVSTygmZmRleGNlcCk7CisKKyAgICAvKiBzZXQgYSBzdWl0YWJsZSB0aW1lb3V0IHRvIHBsYXkgYXJvdW5kIHdpdGggKi8KKyAgICB0aW1lb3V0LnR2X3NlYyA9IDE7CisgICAgdGltZW91dC50dl91c2VjID0gMDsKKworICAgIGN1cmxfbXVsdGlfdGltZW91dChtdWx0aV9oYW5kbGUsICZjdXJsX3RpbWVvKTsKKyAgICBpZihjdXJsX3RpbWVvID49IDApIHsKKyAgICAgIHRpbWVvdXQudHZfc2VjID0gY3VybF90aW1lbyAvIDEwMDA7CisgICAgICBpZih0aW1lb3V0LnR2X3NlYyA+IDEpCisgICAgICAgIHRpbWVvdXQudHZfc2VjID0gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgdGltZW91dC50dl91c2VjID0gKGN1cmxfdGltZW8gJSAxMDAwKSAqIDEwMDA7CisgICAgfQorCisgICAgLyogZ2V0IGZpbGUgZGVzY3JpcHRvcnMgZnJvbSB0aGUgdHJhbnNmZXJzICovCisgICAgY3VybF9tdWx0aV9mZHNldChtdWx0aV9oYW5kbGUsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJm1heGZkKTsKKworICAgIC8qIEluIGEgcmVhbC13b3JsZCBwcm9ncmFtIHlvdSBPRiBDT1VSU0UgY2hlY2sgdGhlIHJldHVybiBjb2RlIG9mIHRoZQorICAgICAgIGZ1bmN0aW9uIGNhbGxzLiAgT24gc3VjY2VzcywgdGhlIHZhbHVlIG9mIG1heGZkIGlzIGd1YXJhbnRlZWQgdG8gYmUKKyAgICAgICBncmVhdGVyIG9yIGVxdWFsIHRoYW4gLTEuICBXZSBjYWxsIHNlbGVjdChtYXhmZCArIDEsIC4uLiksIHNwZWNpYWxseSBpbgorICAgICAgIGNhc2Ugb2YgKG1heGZkID09IC0xKSwgd2UgY2FsbCBzZWxlY3QoMCwgLi4uKSwgd2hpY2ggaXMgYmFzaWNhbGx5IGVxdWFsCisgICAgICAgdG8gc2xlZXAuICovCisKKyAgICByYyA9IHNlbGVjdChtYXhmZCsxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZ0aW1lb3V0KTsKKworICAgIHN3aXRjaChyYykgeworICAgIGNhc2UgLTE6CisgICAgICAvKiBzZWxlY3QgZXJyb3IgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMDogLyogdGltZW91dCAqLworICAgIGRlZmF1bHQ6IC8qIGFjdGlvbiAqLworICAgICAgY3VybF9tdWx0aV9wZXJmb3JtKG11bHRpX2hhbmRsZSwgJnN0aWxsX3J1bm5pbmcpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgLyogU2VlIGhvdyB0aGUgdHJhbnNmZXJzIHdlbnQgKi8KKyAgd2hpbGUgKChtc2cgPSBjdXJsX211bHRpX2luZm9fcmVhZChtdWx0aV9oYW5kbGUsICZtc2dzX2xlZnQpKSkgeworICAgIGlmIChtc2ctPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKKyAgICAgIGludCBpZHgsIGZvdW5kID0gMDsKKworICAgICAgLyogRmluZCBvdXQgd2hpY2ggaGFuZGxlIHRoaXMgbWVzc2FnZSBpcyBhYm91dCAqLworICAgICAgZm9yIChpZHg9MDsgaWR4PEhBTkRMRUNPVU5UOyBpZHgrKykgeworICAgICAgICBmb3VuZCA9IChtc2ctPmVhc3lfaGFuZGxlID09IGhhbmRsZXNbaWR4XSk7CisgICAgICAgIGlmKGZvdW5kKQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBzd2l0Y2ggKGlkeCkgeworICAgICAgY2FzZSBIVFRQX0hBTkRMRToKKyAgICAgICAgcHJpbnRmKCJIVFRQIHRyYW5zZmVyIGNvbXBsZXRlZCB3aXRoIHN0YXR1cyAlZFxuIiwgbXNnLT5kYXRhLnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGVFBfSEFORExFOgorICAgICAgICBwcmludGYoIkZUUCB0cmFuc2ZlciBjb21wbGV0ZWQgd2l0aCBzdGF0dXMgJWRcbiIsIG1zZy0+ZGF0YS5yZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBjdXJsX211bHRpX2NsZWFudXAobXVsdGlfaGFuZGxlKTsKKworICAvKiBGcmVlIHRoZSBDVVJMIGhhbmRsZXMgKi8KKyAgZm9yIChpPTA7IGk8SEFORExFQ09VTlQ7IGkrKykKKyAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGhhbmRsZXNbaV0pOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9tdWx0aS1kZWJ1Z2NhbGxiYWNrLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL211bHRpLWRlYnVnY2FsbGJhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2U4MTlkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9tdWx0aS1kZWJ1Z2NhbGxiYWNrLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVGhpcyBpcyBhbiBleGFtcGxlIHNob3dpbmcgdGhlIG11bHRpIGludGVyZmFjZSBhbmQgdGhlIGRlYnVnIGNhbGxiYWNrLiAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogc29tZXdoYXQgdW5peC1zcGVjaWZpYyAqLworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qIGN1cmwgc3R1ZmYgKi8KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKwordHlwZWRlZiBjaGFyIGJvb2w7CisjZGVmaW5lIFRSVUUgMQorCitzdGF0aWMKK3ZvaWQgZHVtcChjb25zdCBjaGFyICp0ZXh0LAorICAgICAgICAgIEZJTEUgKnN0cmVhbSwgdW5zaWduZWQgY2hhciAqcHRyLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICBib29sIG5vaGV4KQoreworICBzaXplX3QgaTsKKyAgc2l6ZV90IGM7CisKKyAgdW5zaWduZWQgaW50IHdpZHRoPTB4MTA7CisKKyAgaWYobm9oZXgpCisgICAgLyogd2l0aG91dCB0aGUgaGV4IG91dHB1dCwgd2UgY2FuIGZpdCBtb3JlIG9uIHNjcmVlbiAqLworICAgIHdpZHRoID0gMHg0MDsKKworICBmcHJpbnRmKHN0cmVhbSwgIiVzLCAlMTAuMTBsZCBieXRlcyAoMHglOC44bHgpXG4iLAorICAgICAgICAgIHRleHQsIChsb25nKXNpemUsIChsb25nKXNpemUpOworCisgIGZvcihpPTA7IGk8c2l6ZTsgaSs9IHdpZHRoKSB7CisKKyAgICBmcHJpbnRmKHN0cmVhbSwgIiU0LjRseDogIiwgKGxvbmcpaSk7CisKKyAgICBpZighbm9oZXgpIHsKKyAgICAgIC8qIGhleCBub3QgZGlzYWJsZWQsIHNob3cgaXQgKi8KKyAgICAgIGZvcihjID0gMDsgYyA8IHdpZHRoOyBjKyspCisgICAgICAgIGlmKGkrYyA8IHNpemUpCisgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlMDJ4ICIsIHB0cltpK2NdKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGZwdXRzKCIgICAiLCBzdHJlYW0pOworICAgIH0KKworICAgIGZvcihjID0gMDsgKGMgPCB3aWR0aCkgJiYgKGkrYyA8IHNpemUpOyBjKyspIHsKKyAgICAgIC8qIGNoZWNrIGZvciAwRDBBOyBpZiBmb3VuZCwgc2tpcCBwYXN0IGFuZCBzdGFydCBhIG5ldyBsaW5lIG9mIG91dHB1dCAqLworICAgICAgaWYgKG5vaGV4ICYmIChpK2MrMSA8IHNpemUpICYmIHB0cltpK2NdPT0weDBEICYmIHB0cltpK2MrMV09PTB4MEEpIHsKKyAgICAgICAgaSs9KGMrMi13aWR0aCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZnByaW50ZihzdHJlYW0sICIlYyIsCisgICAgICAgICAgICAgIChwdHJbaStjXT49MHgyMCkgJiYgKHB0cltpK2NdPDB4ODApP3B0cltpK2NdOicuJyk7CisgICAgICAvKiBjaGVjayBhZ2FpbiBmb3IgMEQwQSwgdG8gYXZvaWQgYW4gZXh0cmEgXG4gaWYgaXQncyBhdCB3aWR0aCAqLworICAgICAgaWYgKG5vaGV4ICYmIChpK2MrMiA8IHNpemUpICYmIHB0cltpK2MrMV09PTB4MEQgJiYgcHRyW2krYysyXT09MHgwQSkgeworICAgICAgICBpKz0oYyszLXdpZHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGZwdXRjKCdcbicsIHN0cmVhbSk7IC8qIG5ld2xpbmUgKi8KKyAgfQorICBmZmx1c2goc3RyZWFtKTsKK30KKworc3RhdGljCitpbnQgbXlfdHJhY2UoQ1VSTCAqaGFuZGxlLCBjdXJsX2luZm90eXBlIHR5cGUsCisgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgdm9pZCAqdXNlcnApCit7CisgIGNvbnN0IGNoYXIgKnRleHQ7CisKKyAgKHZvaWQpdXNlcnA7CisgICh2b2lkKWhhbmRsZTsgLyogcHJldmVudCBjb21waWxlciB3YXJuaW5nICovCisKKyAgc3dpdGNoICh0eXBlKSB7CisgIGNhc2UgQ1VSTElORk9fVEVYVDoKKyAgICBmcHJpbnRmKHN0ZGVyciwgIj09IEluZm86ICVzIiwgZGF0YSk7CisgIGRlZmF1bHQ6IC8qIGluIGNhc2UgYSBuZXcgb25lIGlzIGludHJvZHVjZWQgdG8gc2hvY2sgdXMgKi8KKyAgICByZXR1cm4gMDsKKworICBjYXNlIENVUkxJTkZPX0hFQURFUl9PVVQ6CisgICAgdGV4dCA9ICI9PiBTZW5kIGhlYWRlciI7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fREFUQV9PVVQ6CisgICAgdGV4dCA9ICI9PiBTZW5kIGRhdGEiOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0hFQURFUl9JTjoKKyAgICB0ZXh0ID0gIjw9IFJlY3YgaGVhZGVyIjsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19EQVRBX0lOOgorICAgIHRleHQgPSAiPD0gUmVjdiBkYXRhIjsKKyAgICBicmVhazsKKyAgfQorCisgIGR1bXAodGV4dCwgc3RkZXJyLCBkYXRhLCBzaXplLCBUUlVFKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTaW1wbHkgZG93bmxvYWQgYSBIVFRQIGZpbGUuCisgKi8KK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKmh0dHBfaGFuZGxlOworICBDVVJMTSAqbXVsdGlfaGFuZGxlOworCisgIGludCBzdGlsbF9ydW5uaW5nOyAvKiBrZWVwIG51bWJlciBvZiBydW5uaW5nIGhhbmRsZXMgKi8KKworICBodHRwX2hhbmRsZSA9IGN1cmxfZWFzeV9pbml0KCk7CisKKyAgLyogc2V0IHRoZSBvcHRpb25zIChJIGxlZnQgb3V0IGEgZmV3LCB5b3UnbGwgZ2V0IHRoZSBwb2ludCBhbnl3YXkpICovCisgIGN1cmxfZWFzeV9zZXRvcHQoaHR0cF9oYW5kbGUsIENVUkxPUFRfVVJMLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKTsKKworICBjdXJsX2Vhc3lfc2V0b3B0KGh0dHBfaGFuZGxlLCBDVVJMT1BUX0RFQlVHRlVOQ1RJT04sIG15X3RyYWNlKTsKKyAgY3VybF9lYXN5X3NldG9wdChodHRwX2hhbmRsZSwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisKKyAgLyogaW5pdCBhIG11bHRpIHN0YWNrICovCisgIG11bHRpX2hhbmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOworCisgIC8qIGFkZCB0aGUgaW5kaXZpZHVhbCB0cmFuc2ZlcnMgKi8KKyAgY3VybF9tdWx0aV9hZGRfaGFuZGxlKG11bHRpX2hhbmRsZSwgaHR0cF9oYW5kbGUpOworCisgIC8qIHdlIHN0YXJ0IHNvbWUgYWN0aW9uIGJ5IGNhbGxpbmcgcGVyZm9ybSByaWdodCBhd2F5ICovCisgIGN1cmxfbXVsdGlfcGVyZm9ybShtdWx0aV9oYW5kbGUsICZzdGlsbF9ydW5uaW5nKTsKKworICB3aGlsZShzdGlsbF9ydW5uaW5nKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICBpbnQgcmM7IC8qIHNlbGVjdCgpIHJldHVybiBjb2RlICovCisKKyAgICBmZF9zZXQgZmRyZWFkOworICAgIGZkX3NldCBmZHdyaXRlOworICAgIGZkX3NldCBmZGV4Y2VwOworICAgIGludCBtYXhmZCA9IC0xOworCisgICAgbG9uZyBjdXJsX3RpbWVvID0gLTE7CisKKyAgICBGRF9aRVJPKCZmZHJlYWQpOworICAgIEZEX1pFUk8oJmZkd3JpdGUpOworICAgIEZEX1pFUk8oJmZkZXhjZXApOworCisgICAgLyogc2V0IGEgc3VpdGFibGUgdGltZW91dCB0byBwbGF5IGFyb3VuZCB3aXRoICovCisgICAgdGltZW91dC50dl9zZWMgPSAxOworICAgIHRpbWVvdXQudHZfdXNlYyA9IDA7CisKKyAgICBjdXJsX211bHRpX3RpbWVvdXQobXVsdGlfaGFuZGxlLCAmY3VybF90aW1lbyk7CisgICAgaWYoY3VybF90aW1lbyA+PSAwKSB7CisgICAgICB0aW1lb3V0LnR2X3NlYyA9IGN1cmxfdGltZW8gLyAxMDAwOworICAgICAgaWYodGltZW91dC50dl9zZWMgPiAxKQorICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDE7CisgICAgICBlbHNlCisgICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IChjdXJsX3RpbWVvICUgMTAwMCkgKiAxMDAwOworICAgIH0KKworICAgIC8qIGdldCBmaWxlIGRlc2NyaXB0b3JzIGZyb20gdGhlIHRyYW5zZmVycyAqLworICAgIGN1cmxfbXVsdGlfZmRzZXQobXVsdGlfaGFuZGxlLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZtYXhmZCk7CisKKyAgICAvKiBJbiBhIHJlYWwtd29ybGQgcHJvZ3JhbSB5b3UgT0YgQ09VUlNFIGNoZWNrIHRoZSByZXR1cm4gY29kZSBvZiB0aGUKKyAgICAgICBmdW5jdGlvbiBjYWxscy4gIE9uIHN1Y2Nlc3MsIHRoZSB2YWx1ZSBvZiBtYXhmZCBpcyBndWFyYW50ZWVkIHRvIGJlCisgICAgICAgZ3JlYXRlciBvciBlcXVhbCB0aGFuIC0xLiAgV2UgY2FsbCBzZWxlY3QobWF4ZmQgKyAxLCAuLi4pLCBzcGVjaWFsbHkgaW4KKyAgICAgICBjYXNlIG9mIChtYXhmZCA9PSAtMSksIHdlIGNhbGwgc2VsZWN0KDAsIC4uLiksIHdoaWNoIGlzIGJhc2ljYWxseSBlcXVhbAorICAgICAgIHRvIHNsZWVwLiAqLworCisgICAgcmMgPSBzZWxlY3QobWF4ZmQrMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmdGltZW91dCk7CisKKyAgICBzd2l0Y2gocmMpIHsKKyAgICBjYXNlIC0xOgorICAgICAgLyogc2VsZWN0IGVycm9yICovCisgICAgICBzdGlsbF9ydW5uaW5nID0gMDsKKyAgICAgIHByaW50Zigic2VsZWN0KCkgcmV0dXJucyBlcnJvciwgdGhpcyBpcyBiYWRuZXNzXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMDoKKyAgICBkZWZhdWx0OgorICAgICAgLyogdGltZW91dCBvciByZWFkYWJsZS93cml0YWJsZSBzb2NrZXRzICovCisgICAgICBjdXJsX211bHRpX3BlcmZvcm0obXVsdGlfaGFuZGxlLCAmc3RpbGxfcnVubmluZyk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBjdXJsX211bHRpX2NsZWFudXAobXVsdGlfaGFuZGxlKTsKKworICBjdXJsX2Vhc3lfY2xlYW51cChodHRwX2hhbmRsZSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL211bHRpLWRvdWJsZS5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9tdWx0aS1kb3VibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjBmZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9tdWx0aS1kb3VibGUuYwpAQCAtMCwwICsxLDExOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogc29tZXdoYXQgdW5peC1zcGVjaWZpYyAqLworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qIGN1cmwgc3R1ZmYgKi8KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworLyoKKyAqIFNpbXBseSBkb3dubG9hZCB0d28gSFRUUCBmaWxlcyEKKyAqLworaW50IG1haW4odm9pZCkKK3sKKyAgQ1VSTCAqaHR0cF9oYW5kbGU7CisgIENVUkwgKmh0dHBfaGFuZGxlMjsKKyAgQ1VSTE0gKm11bHRpX2hhbmRsZTsKKworICBpbnQgc3RpbGxfcnVubmluZzsgLyoga2VlcCBudW1iZXIgb2YgcnVubmluZyBoYW5kbGVzICovCisKKyAgaHR0cF9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBodHRwX2hhbmRsZTIgPSBjdXJsX2Vhc3lfaW5pdCgpOworCisgIC8qIHNldCBvcHRpb25zICovCisgIGN1cmxfZWFzeV9zZXRvcHQoaHR0cF9oYW5kbGUsIENVUkxPUFRfVVJMLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKTsKKworICAvKiBzZXQgb3B0aW9ucyAqLworICBjdXJsX2Vhc3lfc2V0b3B0KGh0dHBfaGFuZGxlMiwgQ1VSTE9QVF9VUkwsICJodHRwOi8vbG9jYWxob3N0LyIpOworCisgIC8qIGluaXQgYSBtdWx0aSBzdGFjayAqLworICBtdWx0aV9oYW5kbGUgPSBjdXJsX211bHRpX2luaXQoKTsKKworICAvKiBhZGQgdGhlIGluZGl2aWR1YWwgdHJhbnNmZXJzICovCisgIGN1cmxfbXVsdGlfYWRkX2hhbmRsZShtdWx0aV9oYW5kbGUsIGh0dHBfaGFuZGxlKTsKKyAgY3VybF9tdWx0aV9hZGRfaGFuZGxlKG11bHRpX2hhbmRsZSwgaHR0cF9oYW5kbGUyKTsKKworICAvKiB3ZSBzdGFydCBzb21lIGFjdGlvbiBieSBjYWxsaW5nIHBlcmZvcm0gcmlnaHQgYXdheSAqLworICBjdXJsX211bHRpX3BlcmZvcm0obXVsdGlfaGFuZGxlLCAmc3RpbGxfcnVubmluZyk7CisKKyAgd2hpbGUoc3RpbGxfcnVubmluZykgeworICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgaW50IHJjOyAvKiBzZWxlY3QoKSByZXR1cm4gY29kZSAqLworCisgICAgZmRfc2V0IGZkcmVhZDsKKyAgICBmZF9zZXQgZmR3cml0ZTsKKyAgICBmZF9zZXQgZmRleGNlcDsKKyAgICBpbnQgbWF4ZmQgPSAtMTsKKworICAgIGxvbmcgY3VybF90aW1lbyA9IC0xOworCisgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICBGRF9aRVJPKCZmZHdyaXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKworICAgIC8qIHNldCBhIHN1aXRhYmxlIHRpbWVvdXQgdG8gcGxheSBhcm91bmQgd2l0aCAqLworICAgIHRpbWVvdXQudHZfc2VjID0gMTsKKyAgICB0aW1lb3V0LnR2X3VzZWMgPSAwOworCisgICAgY3VybF9tdWx0aV90aW1lb3V0KG11bHRpX2hhbmRsZSwgJmN1cmxfdGltZW8pOworICAgIGlmKGN1cmxfdGltZW8gPj0gMCkgeworICAgICAgdGltZW91dC50dl9zZWMgPSBjdXJsX3RpbWVvIC8gMTAwMDsKKyAgICAgIGlmKHRpbWVvdXQudHZfc2VjID4gMSkKKyAgICAgICAgdGltZW91dC50dl9zZWMgPSAxOworICAgICAgZWxzZQorICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSAoY3VybF90aW1lbyAlIDEwMDApICogMTAwMDsKKyAgICB9CisKKyAgICAvKiBnZXQgZmlsZSBkZXNjcmlwdG9ycyBmcm9tIHRoZSB0cmFuc2ZlcnMgKi8KKyAgICBjdXJsX211bHRpX2Zkc2V0KG11bHRpX2hhbmRsZSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOworCisgICAgLyogSW4gYSByZWFsLXdvcmxkIHByb2dyYW0geW91IE9GIENPVVJTRSBjaGVjayB0aGUgcmV0dXJuIGNvZGUgb2YgdGhlCisgICAgICAgZnVuY3Rpb24gY2FsbHMuICBPbiBzdWNjZXNzLCB0aGUgdmFsdWUgb2YgbWF4ZmQgaXMgZ3VhcmFudGVlZCB0byBiZQorICAgICAgIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAtMS4gIFdlIGNhbGwgc2VsZWN0KG1heGZkICsgMSwgLi4uKSwgc3BlY2lhbGx5IGluCisgICAgICAgY2FzZSBvZiAobWF4ZmQgPT0gLTEpLCB3ZSBjYWxsIHNlbGVjdCgwLCAuLi4pLCB3aGljaCBpcyBiYXNpY2FsbHkgZXF1YWwKKyAgICAgICB0byBzbGVlcC4gKi8KKworICAgIHJjID0gc2VsZWN0KG1heGZkKzEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVvdXQpOworCisgICAgc3dpdGNoKHJjKSB7CisgICAgY2FzZSAtMToKKyAgICAgIC8qIHNlbGVjdCBlcnJvciAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAwOgorICAgIGRlZmF1bHQ6CisgICAgICAvKiB0aW1lb3V0IG9yIHJlYWRhYmxlL3dyaXRhYmxlIHNvY2tldHMgKi8KKyAgICAgIGN1cmxfbXVsdGlfcGVyZm9ybShtdWx0aV9oYW5kbGUsICZzdGlsbF9ydW5uaW5nKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGN1cmxfbXVsdGlfY2xlYW51cChtdWx0aV9oYW5kbGUpOworCisgIGN1cmxfZWFzeV9jbGVhbnVwKGh0dHBfaGFuZGxlKTsKKyAgY3VybF9lYXN5X2NsZWFudXAoaHR0cF9oYW5kbGUyKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvbXVsdGktcG9zdC5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9tdWx0aS1wb3N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI2MzM4YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvbXVsdGktcG9zdC5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRoaXMgaXMgYW4gZXhhbXBsZSBhcHBsaWNhdGlvbiBzb3VyY2UgY29kZSB1c2luZyB0aGUgbXVsdGkgaW50ZXJmYWNlCisgKiB0byBkbyBhIG11bHRpcGFydCBmb3JtcG9zdCB3aXRob3V0ICJibG9ja2luZyIuICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKmN1cmw7CisKKyAgQ1VSTE0gKm11bHRpX2hhbmRsZTsKKyAgaW50IHN0aWxsX3J1bm5pbmc7CisKKyAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKmZvcm1wb3N0PU5VTEw7CisgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpsYXN0cHRyPU5VTEw7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJsaXN0PU5VTEw7CisgIHN0YXRpYyBjb25zdCBjaGFyIGJ1ZltdID0gIkV4cGVjdDoiOworCisgIC8qIEZpbGwgaW4gdGhlIGZpbGUgdXBsb2FkIGZpZWxkLiBUaGlzIG1ha2VzIGxpYmN1cmwgbG9hZCBkYXRhIGZyb20KKyAgICAgdGhlIGdpdmVuIGZpbGUgbmFtZSB3aGVuIGN1cmxfZWFzeV9wZXJmb3JtKCkgaXMgY2FsbGVkLiAqLworICBjdXJsX2Zvcm1hZGQoJmZvcm1wb3N0LAorICAgICAgICAgICAgICAgJmxhc3RwdHIsCisgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgInNlbmRmaWxlIiwKKyAgICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsICJwb3N0aXQyLmMiLAorICAgICAgICAgICAgICAgQ1VSTEZPUk1fRU5EKTsKKworICAvKiBGaWxsIGluIHRoZSBmaWxlbmFtZSBmaWVsZCAqLworICBjdXJsX2Zvcm1hZGQoJmZvcm1wb3N0LAorICAgICAgICAgICAgICAgJmxhc3RwdHIsCisgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgImZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUywgInBvc3RpdDIuYyIsCisgICAgICAgICAgICAgICBDVVJMRk9STV9FTkQpOworCisgIC8qIEZpbGwgaW4gdGhlIHN1Ym1pdCBmaWVsZCB0b28sIGV2ZW4gaWYgdGhpcyBpcyByYXJlbHkgbmVlZGVkICovCisgIGN1cmxfZm9ybWFkZCgmZm9ybXBvc3QsCisgICAgICAgICAgICAgICAmbGFzdHB0ciwKKyAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlOQU1FLCAic3VibWl0IiwKKyAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUywgInNlbmQiLAorICAgICAgICAgICAgICAgQ1VSTEZPUk1fRU5EKTsKKworICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgbXVsdGlfaGFuZGxlID0gY3VybF9tdWx0aV9pbml0KCk7CisKKyAgLyogaW5pdGFsaXplIGN1c3RvbSBoZWFkZXIgbGlzdCAoc3RhdGluZyB0aGF0IEV4cGVjdDogMTAwLWNvbnRpbnVlIGlzIG5vdAorICAgICB3YW50ZWQgKi8KKyAgaGVhZGVybGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcmxpc3QsIGJ1Zik7CisgIGlmKGN1cmwgJiYgbXVsdGlfaGFuZGxlKSB7CisKKyAgICAvKiB3aGF0IFVSTCB0aGF0IHJlY2VpdmVzIHRoaXMgUE9TVCAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3VwbG9hZC5jZ2kiKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcmxpc3QpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IVFRQUE9TVCwgZm9ybXBvc3QpOworCisgICAgY3VybF9tdWx0aV9hZGRfaGFuZGxlKG11bHRpX2hhbmRsZSwgY3VybCk7CisKKyAgICBjdXJsX211bHRpX3BlcmZvcm0obXVsdGlfaGFuZGxlLCAmc3RpbGxfcnVubmluZyk7CisKKyAgICB3aGlsZShzdGlsbF9ydW5uaW5nKSB7CisgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgICAgaW50IHJjOyAvKiBzZWxlY3QoKSByZXR1cm4gY29kZSAqLworCisgICAgICBmZF9zZXQgZmRyZWFkOworICAgICAgZmRfc2V0IGZkd3JpdGU7CisgICAgICBmZF9zZXQgZmRleGNlcDsKKyAgICAgIGludCBtYXhmZCA9IC0xOworCisgICAgICBsb25nIGN1cmxfdGltZW8gPSAtMTsKKworICAgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICAgIEZEX1pFUk8oJmZkd3JpdGUpOworICAgICAgRkRfWkVSTygmZmRleGNlcCk7CisKKyAgICAgIC8qIHNldCBhIHN1aXRhYmxlIHRpbWVvdXQgdG8gcGxheSBhcm91bmQgd2l0aCAqLworICAgICAgdGltZW91dC50dl9zZWMgPSAxOworICAgICAgdGltZW91dC50dl91c2VjID0gMDsKKworICAgICAgY3VybF9tdWx0aV90aW1lb3V0KG11bHRpX2hhbmRsZSwgJmN1cmxfdGltZW8pOworICAgICAgaWYoY3VybF90aW1lbyA+PSAwKSB7CisgICAgICAgIHRpbWVvdXQudHZfc2VjID0gY3VybF90aW1lbyAvIDEwMDA7CisgICAgICAgIGlmKHRpbWVvdXQudHZfc2VjID4gMSkKKyAgICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSAoY3VybF90aW1lbyAlIDEwMDApICogMTAwMDsKKyAgICAgIH0KKworICAgICAgLyogZ2V0IGZpbGUgZGVzY3JpcHRvcnMgZnJvbSB0aGUgdHJhbnNmZXJzICovCisgICAgICBjdXJsX211bHRpX2Zkc2V0KG11bHRpX2hhbmRsZSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOworCisgICAgICAvKiBJbiBhIHJlYWwtd29ybGQgcHJvZ3JhbSB5b3UgT0YgQ09VUlNFIGNoZWNrIHRoZSByZXR1cm4gY29kZSBvZiB0aGUKKyAgICAgICAgIGZ1bmN0aW9uIGNhbGxzLiAgT24gc3VjY2VzcywgdGhlIHZhbHVlIG9mIG1heGZkIGlzIGd1YXJhbnRlZWQgdG8gYmUKKyAgICAgICAgIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAtMS4gIFdlIGNhbGwgc2VsZWN0KG1heGZkICsgMSwgLi4uKSwgc3BlY2lhbGx5IGluCisgICAgICAgICBjYXNlIG9mIChtYXhmZCA9PSAtMSksIHdlIGNhbGwgc2VsZWN0KDAsIC4uLiksIHdoaWNoIGlzIGJhc2ljYWxseSBlcXVhbAorICAgICAgICAgdG8gc2xlZXAuICovCisKKyAgICAgIHJjID0gc2VsZWN0KG1heGZkKzEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVvdXQpOworCisgICAgICBzd2l0Y2gocmMpIHsKKyAgICAgIGNhc2UgLTE6CisgICAgICAgIC8qIHNlbGVjdCBlcnJvciAqLworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMDoKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIHRpbWVvdXQgb3IgcmVhZGFibGUvd3JpdGFibGUgc29ja2V0cyAqLworICAgICAgICBwcmludGYoInBlcmZvcm0hXG4iKTsKKyAgICAgICAgY3VybF9tdWx0aV9wZXJmb3JtKG11bHRpX2hhbmRsZSwgJnN0aWxsX3J1bm5pbmcpOworICAgICAgICBwcmludGYoInJ1bm5pbmc6ICVkIVxuIiwgc3RpbGxfcnVubmluZyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGN1cmxfbXVsdGlfY2xlYW51cChtdWx0aV9oYW5kbGUpOworCisgICAgLyogYWx3YXlzIGNsZWFudXAgKi8KKyAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKworICAgIC8qIHRoZW4gY2xlYW51cCB0aGUgZm9ybXBvc3QgY2hhaW4gKi8KKyAgICBjdXJsX2Zvcm1mcmVlKGZvcm1wb3N0KTsKKworICAgIC8qIGZyZWUgc2xpc3QgKi8KKyAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsIChoZWFkZXJsaXN0KTsKKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvbXVsdGktc2luZ2xlLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL211bHRpLXNpbmdsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzU0MjcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL211bHRpLXNpbmdsZS5jCkBAIC0wLDAgKzEsMTE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBleGFtcGxlIHVzaW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UuICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBzb21ld2hhdCB1bml4LXNwZWNpZmljICovCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogY3VybCBzdHVmZiAqLworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisvKgorICogU2ltcGx5IGRvd25sb2FkIGEgSFRUUCBmaWxlLgorICovCitpbnQgbWFpbih2b2lkKQoreworICBDVVJMICpodHRwX2hhbmRsZTsKKyAgQ1VSTE0gKm11bHRpX2hhbmRsZTsKKworICBpbnQgc3RpbGxfcnVubmluZzsgLyoga2VlcCBudW1iZXIgb2YgcnVubmluZyBoYW5kbGVzICovCisKKyAgaHR0cF9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworCisgIC8qIHNldCB0aGUgb3B0aW9ucyAoSSBsZWZ0IG91dCBhIGZldywgeW91J2xsIGdldCB0aGUgcG9pbnQgYW55d2F5KSAqLworICBjdXJsX2Vhc3lfc2V0b3B0KGh0dHBfaGFuZGxlLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIik7CisKKyAgLyogaW5pdCBhIG11bHRpIHN0YWNrICovCisgIG11bHRpX2hhbmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOworCisgIC8qIGFkZCB0aGUgaW5kaXZpZHVhbCB0cmFuc2ZlcnMgKi8KKyAgY3VybF9tdWx0aV9hZGRfaGFuZGxlKG11bHRpX2hhbmRsZSwgaHR0cF9oYW5kbGUpOworCisgIC8qIHdlIHN0YXJ0IHNvbWUgYWN0aW9uIGJ5IGNhbGxpbmcgcGVyZm9ybSByaWdodCBhd2F5ICovCisgIGN1cmxfbXVsdGlfcGVyZm9ybShtdWx0aV9oYW5kbGUsICZzdGlsbF9ydW5uaW5nKTsKKworICB3aGlsZShzdGlsbF9ydW5uaW5nKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICBpbnQgcmM7IC8qIHNlbGVjdCgpIHJldHVybiBjb2RlICovCisKKyAgICBmZF9zZXQgZmRyZWFkOworICAgIGZkX3NldCBmZHdyaXRlOworICAgIGZkX3NldCBmZGV4Y2VwOworICAgIGludCBtYXhmZCA9IC0xOworCisgICAgbG9uZyBjdXJsX3RpbWVvID0gLTE7CisKKyAgICBGRF9aRVJPKCZmZHJlYWQpOworICAgIEZEX1pFUk8oJmZkd3JpdGUpOworICAgIEZEX1pFUk8oJmZkZXhjZXApOworCisgICAgLyogc2V0IGEgc3VpdGFibGUgdGltZW91dCB0byBwbGF5IGFyb3VuZCB3aXRoICovCisgICAgdGltZW91dC50dl9zZWMgPSAxOworICAgIHRpbWVvdXQudHZfdXNlYyA9IDA7CisKKyAgICBjdXJsX211bHRpX3RpbWVvdXQobXVsdGlfaGFuZGxlLCAmY3VybF90aW1lbyk7CisgICAgaWYoY3VybF90aW1lbyA+PSAwKSB7CisgICAgICB0aW1lb3V0LnR2X3NlYyA9IGN1cmxfdGltZW8gLyAxMDAwOworICAgICAgaWYodGltZW91dC50dl9zZWMgPiAxKQorICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDE7CisgICAgICBlbHNlCisgICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IChjdXJsX3RpbWVvICUgMTAwMCkgKiAxMDAwOworICAgIH0KKworICAgIC8qIGdldCBmaWxlIGRlc2NyaXB0b3JzIGZyb20gdGhlIHRyYW5zZmVycyAqLworICAgIGN1cmxfbXVsdGlfZmRzZXQobXVsdGlfaGFuZGxlLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZtYXhmZCk7CisKKyAgICAvKiBJbiBhIHJlYWwtd29ybGQgcHJvZ3JhbSB5b3UgT0YgQ09VUlNFIGNoZWNrIHRoZSByZXR1cm4gY29kZSBvZiB0aGUKKyAgICAgICBmdW5jdGlvbiBjYWxscy4gIE9uIHN1Y2Nlc3MsIHRoZSB2YWx1ZSBvZiBtYXhmZCBpcyBndWFyYW50ZWVkIHRvIGJlCisgICAgICAgZ3JlYXRlciBvciBlcXVhbCB0aGFuIC0xLiAgV2UgY2FsbCBzZWxlY3QobWF4ZmQgKyAxLCAuLi4pLCBzcGVjaWFsbHkgaW4KKyAgICAgICBjYXNlIG9mIChtYXhmZCA9PSAtMSksIHdlIGNhbGwgc2VsZWN0KDAsIC4uLiksIHdoaWNoIGlzIGJhc2ljYWxseSBlcXVhbAorICAgICAgIHRvIHNsZWVwLiAqLworCisgICAgcmMgPSBzZWxlY3QobWF4ZmQrMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmdGltZW91dCk7CisKKyAgICBzd2l0Y2gocmMpIHsKKyAgICBjYXNlIC0xOgorICAgICAgLyogc2VsZWN0IGVycm9yICovCisgICAgICBzdGlsbF9ydW5uaW5nID0gMDsKKyAgICAgIHByaW50Zigic2VsZWN0KCkgcmV0dXJucyBlcnJvciwgdGhpcyBpcyBiYWRuZXNzXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMDoKKyAgICBkZWZhdWx0OgorICAgICAgLyogdGltZW91dCBvciByZWFkYWJsZS93cml0YWJsZSBzb2NrZXRzICovCisgICAgICBjdXJsX211bHRpX3BlcmZvcm0obXVsdGlfaGFuZGxlLCAmc3RpbGxfcnVubmluZyk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBjdXJsX211bHRpX2NsZWFudXAobXVsdGlfaGFuZGxlKTsKKworICBjdXJsX2Vhc3lfY2xlYW51cChodHRwX2hhbmRsZSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL211bHRpdGhyZWFkLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL211bHRpdGhyZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxYTA3NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvbXVsdGl0aHJlYWQuYwpAQCAtMCwwICsxLDkzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEEgbXVsdGktdGhyZWFkZWQgZXhhbXBsZSB0aGF0IHVzZXMgcHRocmVhZHMgZXh0ZW5zaXZlbHkgdG8gZmV0Y2gKKyAqIFggcmVtb3RlIGZpbGVzIGF0IG9uY2UgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisjZGVmaW5lIE5VTVQgNAorCisvKgorICBMaXN0IG9mIFVSTHMgdG8gZmV0Y2guCisKKyAgSWYgeW91IGludGVuZCB0byB1c2UgYSBTU0wtYmFzZWQgcHJvdG9jb2wgaGVyZSB5b3UgTVVTVCBzZXR1cCB0aGUgT3BlblNTTAorICBjYWxsYmFjayBmdW5jdGlvbnMgYXMgZGVzY3JpYmVkIGhlcmU6CisKKyAgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2NyeXB0by90aHJlYWRzLmh0bWwjREVTQ1JJUFRJT04KKworKi8KK2NvbnN0IGNoYXIgKiBjb25zdCB1cmxzW05VTVRdPSB7CisgICJodHRwOi8vY3VybC5oYXh4LnNlLyIsCisgICJmdHA6Ly9jb29sLmhheHguc2UvIiwKKyAgImh0dHA6Ly93d3cuY29udGFjdG9yLnNlLyIsCisgICJ3d3cuaGF4eC5zZSIKK307CisKK3N0YXRpYyB2b2lkICpwdWxsX29uZV91cmwodm9pZCAqdXJsKQoreworICBDVVJMICpjdXJsOworCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworICBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsgLyogaWdub3JlcyBlcnJvciAqLworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKworICByZXR1cm4gTlVMTDsKK30KKworCisvKgorICAgaW50IHB0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqbmV3X3RocmVhZF9JRCwKKyAgIGNvbnN0IHB0aHJlYWRfYXR0cl90ICphdHRyLAorICAgdm9pZCAqICgqc3RhcnRfZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnKTsKKyovCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgcHRocmVhZF90IHRpZFtOVU1UXTsKKyAgaW50IGk7CisgIGludCBlcnJvcjsKKworICAvKiBNdXN0IGluaXRpYWxpemUgbGliY3VybCBiZWZvcmUgYW55IHRocmVhZHMgYXJlIHN0YXJ0ZWQgKi8KKyAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIGZvcihpPTA7IGk8IE5VTVQ7IGkrKykgeworICAgIGVycm9yID0gcHRocmVhZF9jcmVhdGUoJnRpZFtpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIGRlZmF1bHQgYXR0cmlidXRlcyBwbGVhc2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxfb25lX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopdXJsc1tpXSk7CisgICAgaWYoMCAhPSBlcnJvcikKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgcnVuIHRocmVhZCBudW1iZXIgJWQsIGVycm5vICVkXG4iLCBpLCBlcnJvcik7CisgICAgZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsICJUaHJlYWQgJWQsIGdldHMgJXNcbiIsIGksIHVybHNbaV0pOworICB9CisKKyAgLyogbm93IHdhaXQgZm9yIGFsbCB0aHJlYWRzIHRvIHRlcm1pbmF0ZSAqLworICBmb3IoaT0wOyBpPCBOVU1UOyBpKyspIHsKKyAgICBlcnJvciA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpOworICAgIGZwcmludGYoc3RkZXJyLCAiVGhyZWFkICVkIHRlcm1pbmF0ZWRcbiIsIGkpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL29wZW5zc2x0aHJlYWRsb2NrLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL29wZW5zc2x0aHJlYWRsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1NGYwOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvb3BlbnNzbHRocmVhZGxvY2suYwpAQCAtMCwwICsxLDk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEV4YW1wbGUgc291cmNlIGNvZGUgdG8gc2hvdyBvbmUgd2F5IHRvIHNldCB0aGUgbmVjZXNzYXJ5IE9wZW5TU0wgbG9ja2luZworICogY2FsbGJhY2tzIGlmIHlvdSB3YW50IHRvIGRvIG11bHRpLXRocmVhZGVkIHRyYW5zZmVycyB3aXRoIEhUVFBTL0ZUUFMgd2l0aAorICogbGliY3VybCBidWlsdCB0byB1c2UgT3BlblNTTC4KKyAqCisgKiBUaGlzIGlzIG5vdCBhIGNvbXBsZXRlIHN0YW5kLWFsb25lIGV4YW1wbGUuCisgKgorICogQXV0aG9yOiBKZXJlbXkgQnJvd24KKyAqLworCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorCisjZGVmaW5lIE1VVEVYX1RZUEUgICAgICAgcHRocmVhZF9tdXRleF90CisjZGVmaW5lIE1VVEVYX1NFVFVQKHgpICAgcHRocmVhZF9tdXRleF9pbml0KCYoeCksIE5VTEwpCisjZGVmaW5lIE1VVEVYX0NMRUFOVVAoeCkgcHRocmVhZF9tdXRleF9kZXN0cm95KCYoeCkpCisjZGVmaW5lIE1VVEVYX0xPQ0soeCkgICAgcHRocmVhZF9tdXRleF9sb2NrKCYoeCkpCisjZGVmaW5lIE1VVEVYX1VOTE9DSyh4KSAgcHRocmVhZF9tdXRleF91bmxvY2soJih4KSkKKyNkZWZpbmUgVEhSRUFEX0lEICAgICAgICBwdGhyZWFkX3NlbGYoICApCisKKwordm9pZCBoYW5kbGVfZXJyb3IoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmVubywgY29uc3QgY2hhciAqbXNnKXsKKyAgICAgZnByaW50ZihzdGRlcnIsICIqKiAlczolZCAlc1xuIiwgZmlsZSwgbGluZW5vLCBtc2cpOworICAgICBFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7CisgICAgIC8qIGV4aXQoLTEpOyAqLworIH0KKworLyogVGhpcyBhcnJheSB3aWxsIHN0b3JlIGFsbCBvZiB0aGUgbXV0ZXhlcyBhdmFpbGFibGUgdG8gT3BlblNTTC4gKi8KK3N0YXRpYyBNVVRFWF9UWVBFICptdXRleF9idWY9IE5VTEw7CisKKworc3RhdGljIHZvaWQgbG9ja2luZ19mdW5jdGlvbihpbnQgbW9kZSwgaW50IG4sIGNvbnN0IGNoYXIgKiBmaWxlLCBpbnQgbGluZSkKK3sKKyAgaWYgKG1vZGUgJiBDUllQVE9fTE9DSykKKyAgICBNVVRFWF9MT0NLKG11dGV4X2J1ZltuXSk7CisgIGVsc2UKKyAgICBNVVRFWF9VTkxPQ0sobXV0ZXhfYnVmW25dKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaWRfZnVuY3Rpb24odm9pZCkKK3sKKyAgcmV0dXJuICgodW5zaWduZWQgbG9uZylUSFJFQURfSUQpOworfQorCitpbnQgdGhyZWFkX3NldHVwKHZvaWQpCit7CisgIGludCBpOworCisgIG11dGV4X2J1ZiA9IG1hbGxvYyhDUllQVE9fbnVtX2xvY2tzKCAgKSAqIHNpemVvZihNVVRFWF9UWVBFKSk7CisgIGlmICghbXV0ZXhfYnVmKQorICAgIHJldHVybiAwOworICBmb3IgKGkgPSAwOyAgaSA8IENSWVBUT19udW1fbG9ja3MoICApOyAgaSsrKQorICAgIE1VVEVYX1NFVFVQKG11dGV4X2J1ZltpXSk7CisgIENSWVBUT19zZXRfaWRfY2FsbGJhY2soaWRfZnVuY3Rpb24pOworICBDUllQVE9fc2V0X2xvY2tpbmdfY2FsbGJhY2sobG9ja2luZ19mdW5jdGlvbik7CisgIHJldHVybiAxOworfQorCitpbnQgdGhyZWFkX2NsZWFudXAodm9pZCkKK3sKKyAgaW50IGk7CisKKyAgaWYgKCFtdXRleF9idWYpCisgICAgcmV0dXJuIDA7CisgIENSWVBUT19zZXRfaWRfY2FsbGJhY2soTlVMTCk7CisgIENSWVBUT19zZXRfbG9ja2luZ19jYWxsYmFjayhOVUxMKTsKKyAgZm9yIChpID0gMDsgIGkgPCBDUllQVE9fbnVtX2xvY2tzKCAgKTsgIGkrKykKKyAgICBNVVRFWF9DTEVBTlVQKG11dGV4X2J1ZltpXSk7CisgIGZyZWUobXV0ZXhfYnVmKTsKKyAgbXV0ZXhfYnVmID0gTlVMTDsKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3BlcnNpc3RhbnQuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvcGVyc2lzdGFudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNTdlNDkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3BlcnNpc3RhbnQuYwpAQCAtMCwwICsxLDUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitpbnQgbWFpbih2b2lkKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM7CisKKyAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZihjdXJsKSB7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSLCAxTCk7CisKKyAgICAvKiBnZXQgdGhlIGZpcnN0IGRvY3VtZW50ICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKKyAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKworICAgIC8qIGdldCBhbm90aGVyIGRvY3VtZW50IGZyb20gdGhlIHNhbWUgc2VydmVyIHVzaW5nIHRoZSBzYW1lCisgICAgICAgY29ubmVjdGlvbiAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vZXhhbXBsZS5jb20vZG9jcy8iKTsKKyAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKworICAgIC8qIGFsd2F5cyBjbGVhbnVwICovCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvcG9wM3MuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvcG9wM3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTJlOGZkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9wb3Azcy5jCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlczsKKworICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYoY3VybCkgeworICAgIC8qIFNldCB1c2VybmFtZSBhbmQgcGFzc3dvcmQgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVNFUlBXRCwgInVzZXI6cGFzc3dvcmQiKTsKKworICAgIC8qIFRoaXMgd2lsbCBvbmx5IGZldGNoIHRoZSBtZXNzYWdlIHdpdGggSUQgIjEiIG9mIHRoZSBnaXZlbiBtYWlsYm94ICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgInBvcDNzOi8vdXNlckBwb3AuZXhhbXBsZS5jb20vMSIpOworCisjaWZkZWYgU0tJUF9QRUVSX1ZFUklGSUNBVElPTgorICAgIC8qCisgICAgICogSWYgeW91IHdhbnQgdG8gY29ubmVjdCB0byBhIHNpdGUgd2hvIGlzbid0IHVzaW5nIGEgY2VydGlmaWNhdGUgdGhhdCBpcworICAgICAqIHNpZ25lZCBieSBvbmUgb2YgdGhlIGNlcnRzIGluIHRoZSBDQSBidW5kbGUgeW91IGhhdmUsIHlvdSBjYW4gc2tpcCB0aGUKKyAgICAgKiB2ZXJpZmljYXRpb24gb2YgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlLiBUaGlzIG1ha2VzIHRoZSBjb25uZWN0aW9uCisgICAgICogQSBMT1QgTEVTUyBTRUNVUkUuCisgICAgICoKKyAgICAgKiBJZiB5b3UgaGF2ZSBhIENBIGNlcnQgZm9yIHRoZSBzZXJ2ZXIgc3RvcmVkIHNvbWVwbGFjZSBlbHNlIHRoYW4gaW4gdGhlCisgICAgICogZGVmYXVsdCBidW5kbGUsIHRoZW4gdGhlIENVUkxPUFRfQ0FQQVRIIG9wdGlvbiBtaWdodCBjb21lIGhhbmR5IGZvcgorICAgICAqIHlvdS4KKyAgICAgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDBMKTsKKyNlbmRpZgorCisjaWZkZWYgU0tJUF9IT1NUTkFNRV9WRVJGSUNBVElPTgorICAgIC8qCisgICAgICogSWYgdGhlIHNpdGUgeW91J3JlIGNvbm5lY3RpbmcgdG8gdXNlcyBhIGRpZmZlcmVudCBob3N0IG5hbWUgdGhhdCB3aGF0CisgICAgICogdGhleSBoYXZlIG1lbnRpb25lZCBpbiB0aGVpciBzZXJ2ZXIgY2VydGlmaWNhdGUncyBjb21tb25OYW1lIChvcgorICAgICAqIHN1YmplY3RBbHROYW1lKSBmaWVsZHMsIGxpYmN1cmwgd2lsbCByZWZ1c2UgdG8gY29ubmVjdC4gWW91IGNhbiBza2lwCisgICAgICogdGhpcyBjaGVjaywgYnV0IHRoaXMgd2lsbCBtYWtlIHRoZSBjb25uZWN0aW9uIGxlc3Mgc2VjdXJlLgorICAgICAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMEwpOworI2VuZGlmCisKKyAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKworICAgIC8qIGFsd2F5cyBjbGVhbnVwICovCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3BvcDNzbGlzdC5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9wb3Azc2xpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGNiMjg3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9wb3Azc2xpc3QuYwpAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitpbnQgbWFpbih2b2lkKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM7CisKKyAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmKGN1cmwpIHsKKyAgICAvKiBTZXQgdXNlcm5hbWUgYW5kIHBhc3N3b3JkICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VTRVJQV0QsICJ1c2VyOnBhc3N3b3JkIik7CisKKyAgICAvKiBUaGlzIHdpbGwgbGlzdCBldmVyeSBtZXNzYWdlIG9mIHRoZSBnaXZlbiBtYWlsYm94ICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgInBvcDNzOi8vdXNlckBwb3AuZXhhbXBsZS5jb20vIik7CisKKyNpZmRlZiBTS0lQX1BFRVJfVkVSSUZJQ0FUSU9OCisgICAgLyoKKyAgICAgKiBJZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIGEgc2l0ZSB3aG8gaXNuJ3QgdXNpbmcgYSBjZXJ0aWZpY2F0ZSB0aGF0IGlzCisgICAgICogc2lnbmVkIGJ5IG9uZSBvZiB0aGUgY2VydHMgaW4gdGhlIENBIGJ1bmRsZSB5b3UgaGF2ZSwgeW91IGNhbiBza2lwIHRoZQorICAgICAqIHZlcmlmaWNhdGlvbiBvZiB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUuIFRoaXMgbWFrZXMgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBBIExPVCBMRVNTIFNFQ1VSRS4KKyAgICAgKgorICAgICAqIElmIHlvdSBoYXZlIGEgQ0EgY2VydCBmb3IgdGhlIHNlcnZlciBzdG9yZWQgc29tZXBsYWNlIGVsc2UgdGhhbiBpbiB0aGUKKyAgICAgKiBkZWZhdWx0IGJ1bmRsZSwgdGhlbiB0aGUgQ1VSTE9QVF9DQVBBVEggb3B0aW9uIG1pZ2h0IGNvbWUgaGFuZHkgZm9yCisgICAgICogeW91LgorICAgICAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMEwpOworI2VuZGlmCisKKyNpZmRlZiBTS0lQX0hPU1ROQU1FX1ZFUkZJQ0FUSU9OCisgICAgLyoKKyAgICAgKiBJZiB0aGUgc2l0ZSB5b3UncmUgY29ubmVjdGluZyB0byB1c2VzIGEgZGlmZmVyZW50IGhvc3QgbmFtZSB0aGF0IHdoYXQKKyAgICAgKiB0aGV5IGhhdmUgbWVudGlvbmVkIGluIHRoZWlyIHNlcnZlciBjZXJ0aWZpY2F0ZSdzIGNvbW1vbk5hbWUgKG9yCisgICAgICogc3ViamVjdEFsdE5hbWUpIGZpZWxkcywgbGliY3VybCB3aWxsIHJlZnVzZSB0byBjb25uZWN0LiBZb3UgY2FuIHNraXAKKyAgICAgKiB0aGlzIGNoZWNrLCBidXQgdGhpcyB3aWxsIG1ha2UgdGhlIGNvbm5lY3Rpb24gbGVzcyBzZWN1cmUuCisgICAgICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwTCk7CisjZW5kaWYKKworICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAgLyogYWx3YXlzIGNsZWFudXAgKi8KKyAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvcG9zdC1jYWxsYmFjay5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9wb3N0LWNhbGxiYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5OWE4NQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvcG9zdC1jYWxsYmFjay5jCkBAIC0wLDAgKzEsMTI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFuIGV4YW1wbGUgc291cmNlIGNvZGUgdGhhdCBpc3N1ZXMgYSBIVFRQIFBPU1QgYW5kIHdlIHByb3ZpZGUgdGhlIGFjdHVhbAorICogZGF0YSB0aHJvdWdoIGEgcmVhZCBjYWxsYmFjay4KKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2NvbnN0IGNoYXIgZGF0YVtdPSJ0aGlzIGlzIHdoYXQgd2UgcG9zdCB0byB0aGUgc2lsbHkgd2ViIHNlcnZlciI7CisKK3N0cnVjdCBXcml0ZVRoaXMgeworICBjb25zdCBjaGFyICpyZWFkcHRyOworICBpbnQgc2l6ZWxlZnQ7Cit9OworCitzdGF0aWMgc2l6ZV90IHJlYWRfY2FsbGJhY2sodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICp1c2VycCkKK3sKKyAgc3RydWN0IFdyaXRlVGhpcyAqcG9vaCA9IChzdHJ1Y3QgV3JpdGVUaGlzICopdXNlcnA7CisKKyAgaWYoc2l6ZSpubWVtYiA8IDEpCisgICAgcmV0dXJuIDA7CisKKyAgaWYocG9vaC0+c2l6ZWxlZnQpIHsKKyAgICAqKGNoYXIgKilwdHIgPSBwb29oLT5yZWFkcHRyWzBdOyAvKiBjb3B5IG9uZSBzaW5nbGUgYnl0ZSAqLworICAgIHBvb2gtPnJlYWRwdHIrKzsgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciAqLworICAgIHBvb2gtPnNpemVsZWZ0LS07ICAgICAgICAgICAgICAgIC8qIGxlc3MgZGF0YSBsZWZ0ICovCisgICAgcmV0dXJuIDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogd2UgcmV0dXJuIDEgYnl0ZSBhdCBhIHRpbWUhICovCisgIH0KKworICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIG1vcmUgZGF0YSBsZWZ0IHRvIGRlbGl2ZXIgKi8KK30KKworaW50IG1haW4odm9pZCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzOworCisgIHN0cnVjdCBXcml0ZVRoaXMgcG9vaDsKKworICBwb29oLnJlYWRwdHIgPSBkYXRhOworICBwb29oLnNpemVsZWZ0ID0gc3RybGVuKGRhdGEpOworCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZihjdXJsKSB7CisgICAgLyogRmlyc3Qgc2V0IHRoZSBVUkwgdGhhdCBpcyBhYm91dCB0byByZWNlaXZlIG91ciBQT1NULiAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vZXhhbXBsZS5jb20vaW5kZXguY2dpIik7CisKKyAgICAvKiBOb3cgc3BlY2lmeSB3ZSB3YW50IHRvIFBPU1QgZGF0YSAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NULCAxTCk7CisKKyAgICAvKiB3ZSB3YW50IHRvIHVzZSBvdXIgb3duIHJlYWQgZnVuY3Rpb24gKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCByZWFkX2NhbGxiYWNrKTsKKworICAgIC8qIHBvaW50ZXIgdG8gcGFzcyB0byBvdXIgcmVhZCBmdW5jdGlvbiAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFEREFUQSwgJnBvb2gpOworCisgICAgLyogZ2V0IHZlcmJvc2UgZGVidWcgb3V0cHV0IHBsZWFzZSAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisKKyAgICAvKgorICAgICAgSWYgeW91IHVzZSBQT1NUIHRvIGEgSFRUUCAxLjEgc2VydmVyLCB5b3UgY2FuIHNlbmQgZGF0YSB3aXRob3V0IGtub3dpbmcKKyAgICAgIHRoZSBzaXplIGJlZm9yZSBzdGFydGluZyB0aGUgUE9TVCBpZiB5b3UgdXNlIGNodW5rZWQgZW5jb2RpbmcuIFlvdQorICAgICAgZW5hYmxlIHRoaXMgYnkgYWRkaW5nIGEgaGVhZGVyIGxpa2UgIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIiB3aXRoCisgICAgICBDVVJMT1BUX0hUVFBIRUFERVIuIFdpdGggSFRUUCAxLjAgb3Igd2l0aG91dCBjaHVua2VkIHRyYW5zZmVyLCB5b3UgbXVzdAorICAgICAgc3BlY2lmeSB0aGUgc2l6ZSBpbiB0aGUgcmVxdWVzdC4KKyAgICAqLworI2lmZGVmIFVTRV9DSFVOS0VECisgICAgeworICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKmNodW5rID0gTlVMTDsKKworICAgICAgY2h1bmsgPSBjdXJsX3NsaXN0X2FwcGVuZChjaHVuaywgIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIik7CisgICAgICByZXMgPSBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgY2h1bmspOworICAgICAgLyogdXNlIGN1cmxfc2xpc3RfZnJlZV9hbGwoKSBhZnRlciB0aGUgKnBlcmZvcm0oKSBjYWxsIHRvIGZyZWUgdGhpcworICAgICAgICAgbGlzdCBhZ2FpbiAqLworICAgIH0KKyNlbHNlCisgICAgLyogU2V0IHRoZSBleHBlY3RlZCBQT1NUIHNpemUuIElmIHlvdSB3YW50IHRvIFBPU1QgbGFyZ2UgYW1vdW50cyBvZiBkYXRhLAorICAgICAgIGNvbnNpZGVyIENVUkxPUFRfUE9TVEZJRUxEU0laRV9MQVJHRSAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFLCAoY3VybF9vZmZfdClwb29oLnNpemVsZWZ0KTsKKyNlbmRpZgorCisjaWZkZWYgRElTQUJMRV9FWFBFQ1QKKyAgICAvKgorICAgICAgVXNpbmcgUE9TVCB3aXRoIEhUVFAgMS4xIGltcGxpZXMgdGhlIHVzZSBvZiBhICJFeHBlY3Q6IDEwMC1jb250aW51ZSIKKyAgICAgIGhlYWRlci4gIFlvdSBjYW4gZGlzYWJsZSB0aGlzIGhlYWRlciB3aXRoIENVUkxPUFRfSFRUUEhFQURFUiBhcyB1c3VhbC4KKyAgICAgIE5PVEU6IGlmIHlvdSB3YW50IGNodW5rZWQgdHJhbnNmZXIgdG9vLCB5b3UgbmVlZCB0byBjb21iaW5lIHRoZXNlIHR3bworICAgICAgc2luY2UgeW91IGNhbiBvbmx5IHNldCBvbmUgbGlzdCBvZiBoZWFkZXJzIHdpdGggQ1VSTE9QVF9IVFRQSEVBREVSLiAqLworCisgICAgLyogQSBsZXNzIGdvb2Qgb3B0aW9uIHdvdWxkIGJlIHRvIGVuZm9yY2UgSFRUUCAxLjAsIGJ1dCB0aGF0IG1pZ2h0IGFsc28KKyAgICAgICBoYXZlIG90aGVyIGltcGxpY2F0aW9ucy4gKi8KKyAgICB7CisgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqY2h1bmsgPSBOVUxMOworCisgICAgICBjaHVuayA9IGN1cmxfc2xpc3RfYXBwZW5kKGNodW5rLCAiRXhwZWN0OiIpOworICAgICAgcmVzID0gY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGNodW5rKTsKKyAgICAgIC8qIHVzZSBjdXJsX3NsaXN0X2ZyZWVfYWxsKCkgYWZ0ZXIgdGhlICpwZXJmb3JtKCkgY2FsbCB0byBmcmVlIHRoaXMKKyAgICAgICAgIGxpc3QgYWdhaW4gKi8KKyAgICB9CisjZW5kaWYKKworICAgIC8qIFBlcmZvcm0gdGhlIHJlcXVlc3QsIHJlcyB3aWxsIGdldCB0aGUgcmV0dXJuIGNvZGUgKi8KKyAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKworICAgIC8qIGFsd2F5cyBjbGVhbnVwICovCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3Bvc3RpdDIuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvcG9zdGl0Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzI0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3Bvc3RpdDIuYwpAQCAtMCwwICsxLDk3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEV4YW1wbGUgY29kZSB0aGF0IHVwbG9hZHMgYSBmaWxlIG5hbWUgJ2ZvbycgdG8gYSByZW1vdGUgc2NyaXB0IHRoYXQgYWNjZXB0cworICogIkhUTUwgZm9ybSBiYXNlZCIgKGFzIGRlc2NyaWJlZCBpbiBSRkMxNzM4KSB1cGxvYWRzIHVzaW5nIEhUVFAgUE9TVC4KKyAqCisgKiBUaGUgaW1hZ2luYXJ5IGZvcm0gd2UnbGwgZmlsbCBpbiBsb29rcyBsaWtlOgorICoKKyAqIDxmb3JtIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uPSJleGFtcGxlcG9zdC5jZ2kiPgorICogRW50ZXIgZmlsZTogPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InNlbmRmaWxlIiBzaXplPSI0MCI+CisgKiBFbnRlciBmaWxlIG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmaWxlbmFtZSIgc2l6ZT0iMzAiPgorICogPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9InNlbmQiIG5hbWU9InN1Ym1pdCI+CisgKiA8L2Zvcm0+CisgKgorICogVGhpcyBleGFjdCBzb3VyY2UgY29kZSBoYXMgbm90IGJlZW4gdmVyaWZpZWQgdG8gd29yay4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM7CisKKyAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKmZvcm1wb3N0PU5VTEw7CisgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpsYXN0cHRyPU5VTEw7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJsaXN0PU5VTEw7CisgIHN0YXRpYyBjb25zdCBjaGFyIGJ1ZltdID0gIkV4cGVjdDoiOworCisgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKworICAvKiBGaWxsIGluIHRoZSBmaWxlIHVwbG9hZCBmaWVsZCAqLworICBjdXJsX2Zvcm1hZGQoJmZvcm1wb3N0LAorICAgICAgICAgICAgICAgJmxhc3RwdHIsCisgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgInNlbmRmaWxlIiwKKyAgICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsICJwb3N0aXQyLmMiLAorICAgICAgICAgICAgICAgQ1VSTEZPUk1fRU5EKTsKKworICAvKiBGaWxsIGluIHRoZSBmaWxlbmFtZSBmaWVsZCAqLworICBjdXJsX2Zvcm1hZGQoJmZvcm1wb3N0LAorICAgICAgICAgICAgICAgJmxhc3RwdHIsCisgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgImZpbGVuYW1lIiwKKyAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUywgInBvc3RpdDIuYyIsCisgICAgICAgICAgICAgICBDVVJMRk9STV9FTkQpOworCisKKyAgLyogRmlsbCBpbiB0aGUgc3VibWl0IGZpZWxkIHRvbywgZXZlbiBpZiB0aGlzIGlzIHJhcmVseSBuZWVkZWQgKi8KKyAgY3VybF9mb3JtYWRkKCZmb3JtcG9zdCwKKyAgICAgICAgICAgICAgICZsYXN0cHRyLAorICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJzdWJtaXQiLAorICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLCAic2VuZCIsCisgICAgICAgICAgICAgICBDVVJMRk9STV9FTkQpOworCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICAvKiBpbml0YWxpemUgY3VzdG9tIGhlYWRlciBsaXN0IChzdGF0aW5nIHRoYXQgRXhwZWN0OiAxMDAtY29udGludWUgaXMgbm90CisgICAgIHdhbnRlZCAqLworICBoZWFkZXJsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVybGlzdCwgYnVmKTsKKyAgaWYoY3VybCkgeworICAgIC8qIHdoYXQgVVJMIHRoYXQgcmVjZWl2ZXMgdGhpcyBQT1NUICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly9leGFtcGxlLmNvbS9leGFtcGxlcG9zdC5jZ2kiKTsKKyAgICBpZiAoIChhcmdjID09IDIpICYmICghc3RyY21wKGFyZ3ZbMV0sICJub2V4cGVjdGhlYWRlciIpKSApCisgICAgICAvKiBvbmx5IGRpc2FibGUgMTAwLWNvbnRpbnVlIGhlYWRlciBpZiBleHBsaWNpdGx5IHJlcXVlc3RlZCAqLworICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcmxpc3QpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IVFRQUE9TVCwgZm9ybXBvc3QpOworICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAgLyogYWx3YXlzIGNsZWFudXAgKi8KKyAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKworICAgIC8qIHRoZW4gY2xlYW51cCB0aGUgZm9ybXBvc3QgY2hhaW4gKi8KKyAgICBjdXJsX2Zvcm1mcmVlKGZvcm1wb3N0KTsKKyAgICAvKiBmcmVlIHNsaXN0ICovCisgICAgY3VybF9zbGlzdF9mcmVlX2FsbCAoaGVhZGVybGlzdCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3ByaW50Zl9tYWNyby5oIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9wcmludGZfbWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWVkOGY0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9wcmludGZfbWFjcm8uaApAQCAtMCwwICsxLDQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNpbXBsZSBoYWNrIHRyeWluZyB0byBnZXQgYSB2YWxpZCBwcmludGYgZm9ybWF0IHN0cmluZyBmb3Igc2l6ZV90LgorICogSWYgdGhhdCBmYWlscyBmb3IgeW91ciBwbGF0Zm9ybSB5b3UgY2FuIGRlZmluZSB5b3VyIG93biBfRk1UX1NJWkVfVCwKKyAqIGYuZS46IC1EX0ZNVF9TSVpFX1Q9InpkIgorICovCisjaWZuZGVmIF9QUklOVEZfTUFDUk9fSAorI2RlZmluZSBfUFJJTlRGX01BQ1JPX0gKKworI2lmbmRlZiBfRk1UX1NJWkVfVAorI2lmZGVmIFdJTjMyCisjZGVmaW5lIF9GTVRfU0laRV9UICJJZCIKKyNlbHNlCisvKgorInpkIiBpcyBhIEdOVSBleHRlbnNpb24gdG8gUE9TSVg7IHNvIHdlIGRvbnQgdXNlIGl0IGZvciBzaXplX3QgYnV0IGhhY2sgYXJvdW5kCisjZGVmaW5lIF9GTVRfU0laRV9UICJ6ZCIKKyovCisjaWZkZWYgX194ODZfNjRfXworI2RlZmluZSBfRk1UX1NJWkVfVCAibHUiCisjZWxzZQorI2RlZmluZSBfRk1UX1NJWkVfVCAidSIKKyNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisjZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiAhX0ZNVF9TSVpFX1QgKi8KKworI2VuZGlmIC8qICFfUFJJTlRGX01BQ1JPX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvcHJvZ3Jlc3NmdW5jLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3Byb2dyZXNzZnVuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OTgwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3Byb2dyZXNzZnVuYy5jCkBAIC0wLDAgKzEsODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNkZWZpbmUgU1RPUF9ET1dOTE9BRF9BRlRFUl9USElTX01BTllfQllURVMgICAgICAgICA2MDAwCisjZGVmaW5lIE1JTklNQUxfUFJPR1JFU1NfRlVOQ1RJT05BTElUWV9JTlRFUlZBTCAgICAgMworCitzdHJ1Y3QgbXlwcm9ncmVzcyB7CisgIGRvdWJsZSBsYXN0cnVudGltZTsKKyAgQ1VSTCAqY3VybDsKK307CisKK3N0YXRpYyBpbnQgcHJvZ3Jlc3Modm9pZCAqcCwKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRsdG90YWwsIGRvdWJsZSBkbG5vdywKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHVsdG90YWwsIGRvdWJsZSB1bG5vdykKK3sKKyAgc3RydWN0IG15cHJvZ3Jlc3MgKm15cCA9IChzdHJ1Y3QgbXlwcm9ncmVzcyAqKXA7CisgIENVUkwgKmN1cmwgPSBteXAtPmN1cmw7CisgIGRvdWJsZSBjdXJ0aW1lID0gMDsKKworICBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19UT1RBTF9USU1FLCAmY3VydGltZSk7CisKKyAgLyogdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzIGl0IG1heSBiZSBkZXNpcmFibGUgZm9yIGNlcnRhaW4gZnVuY3Rpb25hbGl0eQorICAgICB0byBvbmx5IHJ1biBldmVyeSBOIHNlY29uZHMsIGluIG9yZGVyIHRvIGRvIHRoaXMgdGhlIHRyYW5zYWN0aW9uIHRpbWUgY2FuCisgICAgIGJlIHVzZWQgKi8KKyAgaWYoKGN1cnRpbWUgLSBteXAtPmxhc3RydW50aW1lKSA+PSBNSU5JTUFMX1BST0dSRVNTX0ZVTkNUSU9OQUxJVFlfSU5URVJWQUwpIHsKKyAgICBteXAtPmxhc3RydW50aW1lID0gY3VydGltZTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlRPVEFMIFRJTUU6ICVmIFxyXG4iLCBjdXJ0aW1lKTsKKyAgfQorCisgIGZwcmludGYoc3RkZXJyLCAiVVA6ICVnIG9mICVnICBET1dOOiAlZyBvZiAlZ1xyXG4iLAorICAgICAgICAgIHVsbm93LCB1bHRvdGFsLCBkbG5vdywgZGx0b3RhbCk7CisKKyAgaWYoZGxub3cgPiBTVE9QX0RPV05MT0FEX0FGVEVSX1RISVNfTUFOWV9CWVRFUykKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlcz0wOworICBzdHJ1Y3QgbXlwcm9ncmVzcyBwcm9nOworCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZihjdXJsKSB7CisgICAgcHJvZy5sYXN0cnVudGltZSA9IDA7CisgICAgcHJvZy5jdXJsID0gY3VybDsKKworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vZXhhbXBsZS5jb20vIik7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04sIHByb2dyZXNzKTsKKyAgICAvKiBwYXNzIHRoZSBzdHJ1Y3QgcG9pbnRlciBpbnRvIHRoZSBwcm9ncmVzcyBmdW5jdGlvbiAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QUk9HUkVTU0RBVEEsICZwcm9nKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfTk9QUk9HUkVTUywgMEwpOworICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAgaWYocmVzKQorICAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgY3VybF9lYXN5X3N0cmVycm9yKHJlcykpOworCisgICAgLyogYWx3YXlzIGNsZWFudXAgKi8KKyAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgfQorICByZXR1cm4gKGludClyZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3Jlc29sdmUuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvcmVzb2x2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiM2U1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3Jlc29sdmUuYwpAQCAtMCwwICsxLDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitpbnQgbWFpbih2b2lkKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXMgPSBDVVJMRV9PSzsKKyAgc3RydWN0IGN1cmxfc2xpc3QgKmhvc3QgPSBOVUxMOworCisgIC8qIEVhY2ggc2luZ2xlIG5hbWUgcmVzb2x2ZSBzdHJpbmcgc2hvdWxkIGJlIHdyaXR0ZW4gdXNpbmcgdGhlIGZvcm1hdAorICAgICBIT1NUOlBPUlQ6QUREUkVTUyB3aGVyZSBIT1NUIGlzIHRoZSBuYW1lIGxpYmN1cmwgd2lsbCB0cnkgdG8gcmVzb2x2ZSwKKyAgICAgUE9SVCBpcyB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZpY2Ugd2hlcmUgbGliY3VybCB3YW50cyB0byBjb25uZWN0IHRvCisgICAgIHRoZSBIT1NUIGFuZCBBRERSRVNTIGlzIHRoZSBudW1lcmljYWwgSVAgYWRkcmVzcworICAgKi8KKyAgaG9zdCA9IGN1cmxfc2xpc3RfYXBwZW5kKE5VTEwsICJleGFtcGxlLmNvbTo4MDoxMjcuMC4wLjEiKTsKKworICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYoY3VybCkgeworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRVNPTFZFLCBob3N0KTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCAiaHR0cDovL2V4YW1wbGUuY29tIik7CisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgICAvKiBhbHdheXMgY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICB9CisKKyAgY3VybF9zbGlzdF9mcmVlX2FsbChob3N0KTsKKworICByZXR1cm4gKGludClyZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3J0c3AuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvcnRzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYzE5NjcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3J0c3AuYwpAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgSmltIEhvbGxpbmdlcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSmltIEhvbGxpbmdlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQgKFdJTjMyKQorIyAgaW5jbHVkZSA8Y29uaW8uaD4gIC8qIF9nZXRjaCgpICovCisjZWxzZQorIyAgaW5jbHVkZSA8dGVybWlvcy5oPgorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyBpbnQgX2dldGNoKHZvaWQpCit7CisgIHN0cnVjdCB0ZXJtaW9zIG9sZHQsIG5ld3Q7CisgIGludCBjaDsKKyAgdGNnZXRhdHRyKCBTVERJTl9GSUxFTk8sICZvbGR0ICk7CisgIG5ld3QgPSBvbGR0OworICBuZXd0LmNfbGZsYWcgJj0gfiggSUNBTk9OIHwgRUNITyApOworICB0Y3NldGF0dHIoIFNURElOX0ZJTEVOTywgVENTQU5PVywgJm5ld3QgKTsKKyAgY2ggPSBnZXRjaGFyKCk7CisgIHRjc2V0YXR0ciggU1RESU5fRklMRU5PLCBUQ1NBTk9XLCAmb2xkdCApOworICByZXR1cm4gY2g7Cit9CisjZW5kaWYKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisjZGVmaW5lIFZFUlNJT05fU1RSICAiVjEuMCIKKworLyogZXJyb3IgaGFuZGxpbmcgbWFjcm9zICovCisjZGVmaW5lIG15X2N1cmxfZWFzeV9zZXRvcHQoQSwgQiwgQykgXAorICBpZiAoKHJlcyA9IGN1cmxfZWFzeV9zZXRvcHQoKEEpLCAoQiksIChDKSkpICE9IENVUkxFX09LKSBcCisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfc2V0b3B0KCVzLCAlcywgJXMpIGZhaWxlZDogJWRcbiIsIFwKKyAgICAgICAgICAgICNBLCAjQiwgI0MsIHJlcyk7CisKKyNkZWZpbmUgbXlfY3VybF9lYXN5X3BlcmZvcm0oQSkgXAorICBpZiAoKHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKChBKSkpICE9IENVUkxFX09LKSBcCisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfcGVyZm9ybSglcykgZmFpbGVkOiAlZFxuIiwgI0EsIHJlcyk7CisKKworLyogc2VuZCBSVFNQIE9QVElPTlMgcmVxdWVzdCAqLworc3RhdGljIHZvaWQgcnRzcF9vcHRpb25zKENVUkwgKmN1cmwsIGNvbnN0IGNoYXIgKnVyaSkKK3sKKyAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7CisgIHByaW50ZigiXG5SVFNQOiBPUFRJT05TICVzXG4iLCB1cmkpOworICBteV9jdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJLCB1cmkpOworICBteV9jdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9SRVFVRVNULCAobG9uZylDVVJMX1JUU1BSRVFfT1BUSU9OUyk7CisgIG15X2N1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworfQorCisKKy8qIHNlbmQgUlRTUCBERVNDUklCRSByZXF1ZXN0IGFuZCB3cml0ZSBzZHAgcmVzcG9uc2UgdG8gYSBmaWxlICovCitzdGF0aWMgdm9pZCBydHNwX2Rlc2NyaWJlKENVUkwgKmN1cmwsIGNvbnN0IGNoYXIgKnVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2RwX2ZpbGVuYW1lKQoreworICBDVVJMY29kZSByZXMgPSBDVVJMRV9PSzsKKyAgRklMRSAqc2RwX2ZwID0gZm9wZW4oc2RwX2ZpbGVuYW1lLCAid3QiKTsKKyAgcHJpbnRmKCJcblJUU1A6IERFU0NSSUJFICVzXG4iLCB1cmkpOworICBpZiAoc2RwX2ZwID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmdcbiIsIHNkcF9maWxlbmFtZSk7CisgICAgc2RwX2ZwID0gc3Rkb3V0OworICB9CisgIGVsc2UgeworICAgIHByaW50ZigiV3JpdGluZyBTRFAgdG8gJyVzJ1xuIiwgc2RwX2ZpbGVuYW1lKTsKKyAgfQorICBteV9jdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVEQVRBLCBzZHBfZnApOworICBteV9jdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9SRVFVRVNULCAobG9uZylDVVJMX1JUU1BSRVFfREVTQ1JJQkUpOworICBteV9jdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKyAgbXlfY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFREFUQSwgc3Rkb3V0KTsKKyAgaWYgKHNkcF9mcCAhPSBzdGRvdXQpIHsKKyAgICBmY2xvc2Uoc2RwX2ZwKTsKKyAgfQorfQorCisvKiBzZW5kIFJUU1AgU0VUVVAgcmVxdWVzdCAqLworc3RhdGljIHZvaWQgcnRzcF9zZXR1cChDVVJMICpjdXJsLCBjb25zdCBjaGFyICp1cmksIGNvbnN0IGNoYXIgKnRyYW5zcG9ydCkKK3sKKyAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7CisgIHByaW50ZigiXG5SVFNQOiBTRVRVUCAlc1xuIiwgdXJpKTsKKyAgcHJpbnRmKCIgICAgICBUUkFOU1BPUlQgJXNcbiIsIHRyYW5zcG9ydCk7CisgIG15X2N1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1NUUkVBTV9VUkksIHVyaSk7CisgIG15X2N1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1RSQU5TUE9SVCwgdHJhbnNwb3J0KTsKKyAgbXlfY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfUkVRVUVTVCwgKGxvbmcpQ1VSTF9SVFNQUkVRX1NFVFVQKTsKKyAgbXlfY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7Cit9CisKKworLyogc2VuZCBSVFNQIFBMQVkgcmVxdWVzdCAqLworc3RhdGljIHZvaWQgcnRzcF9wbGF5KENVUkwgKmN1cmwsIGNvbnN0IGNoYXIgKnVyaSwgY29uc3QgY2hhciAqcmFuZ2UpCit7CisgIENVUkxjb2RlIHJlcyA9IENVUkxFX09LOworICBwcmludGYoIlxuUlRTUDogUExBWSAlc1xuIiwgdXJpKTsKKyAgbXlfY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfU1RSRUFNX1VSSSwgdXJpKTsKKyAgbXlfY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JBTkdFLCByYW5nZSk7CisgIG15X2N1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIChsb25nKUNVUkxfUlRTUFJFUV9QTEFZKTsKKyAgbXlfY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7Cit9CisKKworLyogc2VuZCBSVFNQIFRFQVJET1dOIHJlcXVlc3QgKi8KK3N0YXRpYyB2b2lkIHJ0c3BfdGVhcmRvd24oQ1VSTCAqY3VybCwgY29uc3QgY2hhciAqdXJpKQoreworICBDVVJMY29kZSByZXMgPSBDVVJMRV9PSzsKKyAgcHJpbnRmKCJcblJUU1A6IFRFQVJET1dOICVzXG4iLCB1cmkpOworICBteV9jdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9SRVFVRVNULCAobG9uZylDVVJMX1JUU1BSRVFfVEVBUkRPV04pOworICBteV9jdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKK30KKworCisvKiBjb252ZXJ0IHVybCBpbnRvIGFuIHNkcCBmaWxlbmFtZSAqLworc3RhdGljIHZvaWQgZ2V0X3NkcF9maWxlbmFtZShjb25zdCBjaGFyICp1cmwsIGNoYXIgKnNkcF9maWxlbmFtZSkKK3sKKyAgY29uc3QgY2hhciAqcyA9IHN0cnJjaHIodXJsLCAnLycpOworICBzdHJjcHkoc2RwX2ZpbGVuYW1lLCAidmlkZW8uc2RwIik7CisgIGlmIChzICE9IE5VTEwpIHsKKyAgICBzKys7CisgICAgaWYgKHNbMF0gIT0gJ1wwJykgeworICAgICAgc3ByaW50ZihzZHBfZmlsZW5hbWUsICIlcy5zZHAiLCBzKTsKKyAgICB9CisgIH0KK30KKworCisvKiBzY2FuIHNkcCBmaWxlIGZvciBtZWRpYSBjb250cm9sIGF0dHJpYnV0ZSAqLworc3RhdGljIHZvaWQgZ2V0X21lZGlhX2NvbnRyb2xfYXR0cmlidXRlKGNvbnN0IGNoYXIgKnNkcF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjb250cm9sKQoreworICBpbnQgbWF4X2xlbiA9IDI1NjsKKyAgY2hhciAqcyA9IG1hbGxvYyhtYXhfbGVuKTsKKyAgRklMRSAqc2RwX2ZwID0gZm9wZW4oc2RwX2ZpbGVuYW1lLCAicnQiKTsKKyAgY29udHJvbFswXSA9ICdcMCc7CisgIGlmIChzZHBfZnAgIT0gTlVMTCkgeworICAgIHdoaWxlIChmZ2V0cyhzLCBtYXhfbGVuIC0gMiwgc2RwX2ZwKSAhPSBOVUxMKSB7CisgICAgICBzc2NhbmYocywgIiBhID0gY29udHJvbDogJXMiLCBjb250cm9sKTsKKyAgICB9CisgICAgZmNsb3NlKHNkcF9mcCk7CisgIH0KKyAgZnJlZShzKTsKK30KKworCisvKiBtYWluIGFwcCAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCit7CisjaWYgMQorICBjb25zdCBjaGFyICp0cmFuc3BvcnQgPSAiUlRQL0FWUDt1bmljYXN0O2NsaWVudF9wb3J0PTEyMzQtMTIzNSI7ICAvKiBVRFAgKi8KKyNlbHNlCisgIGNvbnN0IGNoYXIgKnRyYW5zcG9ydCA9ICJSVFAvQVZQL1RDUDt1bmljYXN0O2NsaWVudF9wb3J0PTEyMzQtMTIzNSI7ICAvKiBUQ1AgKi8KKyNlbmRpZgorICBjb25zdCBjaGFyICpyYW5nZSA9ICIwLjAwMC0iOworICBpbnQgcmMgPSBFWElUX1NVQ0NFU1M7CisgIGNoYXIgKmJhc2VuYW1lID0gTlVMTDsKKworICBwcmludGYoIlxuUlRTUCByZXF1ZXN0ICVzXG4iLCBWRVJTSU9OX1NUUik7CisgIHByaW50ZigiICAgIFByb2plY3Qgd2ViIHNpdGU6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9ydHNwcmVxdWVzdC9cbiIpOworICBwcmludGYoIiAgICBSZXF1aXJlcyBjVVJMIFY3LjIwIG9yIGdyZWF0ZXJcblxuIik7CisKKyAgLyogY2hlY2sgY29tbWFuZCBsaW5lICovCisgIGlmICgoYXJnYyAhPSAyKSAmJiAoYXJnYyAhPSAzKSkgeworICAgIGJhc2VuYW1lID0gc3RycmNocihhcmd2WzBdLCAnLycpOworICAgIGlmIChiYXNlbmFtZSA9PSBOVUxMKSB7CisgICAgICBiYXNlbmFtZSA9IHN0cnJjaHIoYXJndlswXSwgJ1xcJyk7CisgICAgfQorICAgIGlmIChiYXNlbmFtZSA9PSBOVUxMKSB7CisgICAgICBiYXNlbmFtZSA9IGFyZ3ZbMF07CisgICAgfSBlbHNlIHsKKyAgICAgIGJhc2VuYW1lKys7CisgICAgfQorICAgIHByaW50ZigiVXNhZ2U6ICAgJXMgdXJsIFt0cmFuc3BvcnRdXG4iLCBiYXNlbmFtZSk7CisgICAgcHJpbnRmKCIgICAgICAgICB1cmwgb2YgdmlkZW8gc2VydmVyXG4iKTsKKyAgICBwcmludGYoIiAgICAgICAgIHRyYW5zcG9ydCAob3B0aW9uYWwpIHNwZWNpZmllciBmb3IgbWVkaWEgc3RyZWFtIHByb3RvY29sXG4iKTsKKyAgICBwcmludGYoIiAgICAgICAgIGRlZmF1bHQgdHJhbnNwb3J0OiAlc1xuIiwgdHJhbnNwb3J0KTsKKyAgICBwcmludGYoIkV4YW1wbGU6ICVzIHJ0c3A6Ly8xOTIuMTY4LjAuMi9tZWRpYS92aWRlbzFcblxuIiwgYmFzZW5hbWUpOworICAgIHJjID0gRVhJVF9GQUlMVVJFOworICB9IGVsc2UgeworICAgIGNvbnN0IGNoYXIgKnVybCA9IGFyZ3ZbMV07CisgICAgY2hhciAqdXJpID0gbWFsbG9jKHN0cmxlbih1cmwpICsgMzIpOworICAgIGNoYXIgKnNkcF9maWxlbmFtZSA9IG1hbGxvYyhzdHJsZW4odXJsKSArIDMyKTsKKyAgICBjaGFyICpjb250cm9sID0gbWFsbG9jKHN0cmxlbih1cmwpICsgMzIpOworICAgIENVUkxjb2RlIHJlczsKKyAgICBnZXRfc2RwX2ZpbGVuYW1lKHVybCwgc2RwX2ZpbGVuYW1lKTsKKyAgICBpZiAoYXJnYyA9PSAzKSB7CisgICAgICB0cmFuc3BvcnQgPSBhcmd2WzJdOworICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgY3VybCAqLworICAgIHJlcyA9IGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKyAgICBpZiAocmVzID09IENVUkxFX09LKSB7CisgICAgICBjdXJsX3ZlcnNpb25faW5mb19kYXRhICpkYXRhID0gY3VybF92ZXJzaW9uX2luZm8oQ1VSTFZFUlNJT05fTk9XKTsKKyAgICAgIENVUkwgKmN1cmw7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICBjVVJMIFYlcyBsb2FkZWRcbiIsIGRhdGEtPnZlcnNpb24pOworCisgICAgICAvKiBpbml0aWFsaXplIHRoaXMgY3VybCBzZXNzaW9uICovCisgICAgICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgICAgIGlmIChjdXJsICE9IE5VTEwpIHsKKyAgICAgICAgbXlfY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDBMKTsKKyAgICAgICAgbXlfY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX05PUFJPR1JFU1MsIDFMKTsKKyAgICAgICAgbXlfY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFSEVBREVSLCBzdGRvdXQpOworICAgICAgICBteV9jdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCisgICAgICAgIC8qIHJlcXVlc3Qgc2VydmVyIG9wdGlvbnMgKi8KKyAgICAgICAgc3ByaW50Zih1cmksICIlcyIsIHVybCk7CisgICAgICAgIHJ0c3Bfb3B0aW9ucyhjdXJsLCB1cmkpOworCisgICAgICAgIC8qIHJlcXVlc3Qgc2Vzc2lvbiBkZXNjcmlwdGlvbiBhbmQgd3JpdGUgcmVzcG9uc2UgdG8gc2RwIGZpbGUgKi8KKyAgICAgICAgcnRzcF9kZXNjcmliZShjdXJsLCB1cmksIHNkcF9maWxlbmFtZSk7CisKKyAgICAgICAgLyogZ2V0IG1lZGlhIGNvbnRyb2wgYXR0cmlidXRlIGZyb20gc2RwIGZpbGUgKi8KKyAgICAgICAgZ2V0X21lZGlhX2NvbnRyb2xfYXR0cmlidXRlKHNkcF9maWxlbmFtZSwgY29udHJvbCk7CisKKyAgICAgICAgLyogc2V0dXAgbWVkaWEgc3RyZWFtICovCisgICAgICAgIHNwcmludGYodXJpLCAiJXMvJXMiLCB1cmwsIGNvbnRyb2wpOworICAgICAgICBydHNwX3NldHVwKGN1cmwsIHVyaSwgdHJhbnNwb3J0KTsKKworICAgICAgICAvKiBzdGFydCBwbGF5aW5nIG1lZGlhIHN0cmVhbSAqLworICAgICAgICBzcHJpbnRmKHVyaSwgIiVzLyIsIHVybCk7CisgICAgICAgIHJ0c3BfcGxheShjdXJsLCB1cmksIHJhbmdlKTsKKyAgICAgICAgcHJpbnRmKCJQbGF5aW5nIHZpZGVvLCBwcmVzcyBhbnkga2V5IHRvIHN0b3AgLi4uIik7CisgICAgICAgIF9nZXRjaCgpOworICAgICAgICBwcmludGYoIlxuIik7CisKKyAgICAgICAgLyogdGVhcmRvd24gc2Vzc2lvbiAqLworICAgICAgICBydHNwX3RlYXJkb3duKGN1cmwsIHVyaSk7CisKKyAgICAgICAgLyogY2xlYW51cCAqLworICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgICAgICAgY3VybCA9IE5VTEw7CisgICAgICB9IGVsc2UgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICAgIH0KKyAgICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICB9IGVsc2UgeworICAgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCVzKSBmYWlsZWQ6ICVkXG4iLAorICAgICAgICAgICAgICAiQ1VSTF9HTE9CQUxfQUxMIiwgcmVzKTsKKyAgICB9CisgICAgZnJlZShjb250cm9sKTsKKyAgICBmcmVlKHNkcF9maWxlbmFtZSk7CisgICAgZnJlZSh1cmkpOworICB9CisKKyAgcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zYW1wbGVjb252LmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3NhbXBsZWNvbnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGIzMTYwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zYW1wbGVjb252LmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAgIFRoaXMgaXMgYSBzaW1wbGUgZXhhbXBsZSBzaG93aW5nIGhvdyBhIHByb2dyYW0gb24gYSBub24tQVNDSUkgcGxhdGZvcm0KKyAgIHdvdWxkIGludm9rZSBjYWxsYmFja3MgdG8gZG8gaXRzIG93biBjb2Rlc2V0IGNvbnZlcnNpb25zIGluc3RlYWQgb2YKKyAgIHVzaW5nIHRoZSBidWlsdC1pbiBpY29udiBmdW5jdGlvbnMgaW4gbGliY3VybC4KKworICAgVGhlIElCTS0xMDQ3IEVCQ0RJQyBjb2Rlc2V0IGlzIHVzZWQgZm9yIHRoaXMgZXhhbXBsZSBidXQgdGhlIGNvZGUKKyAgIHdvdWxkIGJlIHNpbWlsYXIgZm9yIG90aGVyIG5vbi1BU0NJSSBjb2Rlc2V0cy4KKworICAgVGhyZWUgY2FsbGJhY2sgZnVuY3Rpb25zIGFyZSBjcmVhdGVkIGJlbG93OgorICAgICAgICBteV9jb252X2Zyb21fYXNjaWlfdG9fZWJjZGljLAorICAgICAgICBteV9jb252X2Zyb21fZWJjZGljX3RvX2FzY2lpLCBhbmQKKyAgICAgICAgbXlfY29udl9mcm9tX3V0ZjhfdG9fZWJjZGljCisKKyAgIFRoZSAicGxhdGZvcm1feHh4IiBjYWxscyByZXByZXNlbnQgcGxhdGZvcm0tc3BlY2lmaWMgY29udmVyc2lvbiByb3V0aW5lcy4KKworICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitDVVJMY29kZSBteV9jb252X2Zyb21fYXNjaWlfdG9fZWJjZGljKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBjaGFyICp0ZW1wcHRyaW4sICp0ZW1wcHRyb3V0OworICAgIHNpemVfdCBieXRlcyA9IGxlbmd0aDsKKyAgICBpbnQgcmM7CisgICAgdGVtcHB0cmluID0gdGVtcHB0cm91dCA9IGJ1ZmZlcjsKKyAgICByYyA9IHBsYXRmb3JtX2EyZSgmdGVtcHB0cmluLCAmYnl0ZXMsICZ0ZW1wcHRyb3V0LCAmYnl0ZXMpOworICAgIGlmIChyYyA9PSBQTEFURk9STV9DT05WX09LKSB7CisgICAgICByZXR1cm4oQ1VSTEVfT0spOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4oQ1VSTEVfQ09OVl9GQUlMRUQpOworICAgIH0KK30KKworQ1VSTGNvZGUgbXlfY29udl9mcm9tX2ViY2RpY190b19hc2NpaShjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisgICAgY2hhciAqdGVtcHB0cmluLCAqdGVtcHB0cm91dDsKKyAgICBzaXplX3QgYnl0ZXMgPSBsZW5ndGg7CisgICAgaW50IHJjOworICAgIHRlbXBwdHJpbiA9IHRlbXBwdHJvdXQgPSBidWZmZXI7CisgICAgcmMgPSBwbGF0Zm9ybV9lMmEoJnRlbXBwdHJpbiwgJmJ5dGVzLCAmdGVtcHB0cm91dCwgJmJ5dGVzKTsKKyAgICBpZiAocmMgPT0gUExBVEZPUk1fQ09OVl9PSykgeworICAgICAgcmV0dXJuKENVUkxFX09LKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuKENVUkxFX0NPTlZfRkFJTEVEKTsKKyAgICB9Cit9CisKK0NVUkxjb2RlIG15X2NvbnZfZnJvbV91dGY4X3RvX2ViY2RpYyhjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisgICAgY2hhciAqdGVtcHB0cmluLCAqdGVtcHB0cm91dDsKKyAgICBzaXplX3QgYnl0ZXMgPSBsZW5ndGg7CisgICAgaW50IHJjOworICAgIHRlbXBwdHJpbiA9IHRlbXBwdHJvdXQgPSBidWZmZXI7CisgICAgcmMgPSBwbGF0Zm9ybV91MmUoJnRlbXBwdHJpbiwgJmJ5dGVzLCAmdGVtcHB0cm91dCwgJmJ5dGVzKTsKKyAgICBpZiAocmMgPT0gUExBVEZPUk1fQ09OVl9PSykgeworICAgICAgcmV0dXJuKENVUkxFX09LKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuKENVUkxFX0NPTlZfRkFJTEVEKTsKKyAgICB9Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlczsKKworICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYoY3VybCkgeworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vZXhhbXBsZS5jb20iKTsKKworICAgIC8qIHVzZSBwbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIGNvZGVzZXQgY29udmVyc2lvbnMgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ09OVl9GUk9NX05FVFdPUktfRlVOQ1RJT04sCisgICAgICAgICAgICAgICAgICAgICBteV9jb252X2Zyb21fYXNjaWlfdG9fZWJjZGljKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ09OVl9UT19ORVRXT1JLX0ZVTkNUSU9OLAorICAgICAgICAgICAgICAgICAgICAgbXlfY29udl9mcm9tX2ViY2RpY190b19hc2NpaSk7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPTlZfRlJPTV9VVEY4X0ZVTkNUSU9OLAorICAgICAgICAgICAgICAgICAgICAgbXlfY29udl9mcm9tX3V0ZjhfdG9fZWJjZGljKTsKKworICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAgLyogYWx3YXlzIGNsZWFudXAgKi8KKyAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc2VuZHJlY3YuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc2VuZHJlY3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjk2MDFkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zZW5kcmVjdi5jCkBAIC0wLDAgKzEsMTMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFuIGV4YW1wbGUgb2YgY3VybF9lYXN5X3NlbmQoKSBhbmQgY3VybF9lYXN5X3JlY3YoKSB1c2FnZS4gKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAicHJpbnRmX21hY3JvLmgiCisKKy8qIEF1eGlsaWFyeSBmdW5jdGlvbiB0aGF0IHdhaXRzIG9uIHRoZSBzb2NrZXQuICovCitzdGF0aWMgaW50IHdhaXRfb25fc29ja2V0KGN1cmxfc29ja2V0X3Qgc29ja2ZkLCBpbnQgZm9yX3JlY3YsIGxvbmcgdGltZW91dF9tcykKK3sKKyAgc3RydWN0IHRpbWV2YWwgdHY7CisgIGZkX3NldCBpbmZkLCBvdXRmZCwgZXJyZmQ7CisgIGludCByZXM7CisKKyAgdHYudHZfc2VjID0gdGltZW91dF9tcyAvIDEwMDA7CisgIHR2LnR2X3VzZWM9ICh0aW1lb3V0X21zICUgMTAwMCkgKiAxMDAwOworCisgIEZEX1pFUk8oJmluZmQpOworICBGRF9aRVJPKCZvdXRmZCk7CisgIEZEX1pFUk8oJmVycmZkKTsKKworICBGRF9TRVQoc29ja2ZkLCAmZXJyZmQpOyAvKiBhbHdheXMgY2hlY2sgZm9yIGVycm9yICovCisKKyAgaWYoZm9yX3JlY3YpCisgIHsKKyAgICBGRF9TRVQoc29ja2ZkLCAmaW5mZCk7CisgIH0KKyAgZWxzZQorICB7CisgICAgRkRfU0VUKHNvY2tmZCwgJm91dGZkKTsKKyAgfQorCisgIC8qIHNlbGVjdCgpIHJldHVybnMgdGhlIG51bWJlciBvZiBzaWduYWxsZWQgc29ja2V0cyBvciAtMSAqLworICByZXMgPSBzZWxlY3Qoc29ja2ZkICsgMSwgJmluZmQsICZvdXRmZCwgJmVycmZkLCAmdHYpOworICByZXR1cm4gcmVzOworfQorCitpbnQgbWFpbih2b2lkKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM7CisgIC8qIE1pbmltYWxpc3RpYyBodHRwIHJlcXVlc3QgKi8KKyAgY29uc3QgY2hhciAqcmVxdWVzdCA9ICJHRVQgLyBIVFRQLzEuMFxyXG5Ib3N0OiBleGFtcGxlLmNvbVxyXG5cclxuIjsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQ7IC8qIHNvY2tldCAqLworICBsb25nIHNvY2tleHRyOworICBzaXplX3QgaW9sZW47CisKKyAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmKGN1cmwpIHsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCAiaHR0cDovL2V4YW1wbGUuY29tIik7CisgICAgLyogRG8gbm90IGRvIHRoZSB0cmFuc2ZlciAtIG9ubHkgY29ubmVjdCB0byBob3N0ICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPTk5FQ1RfT05MWSwgMUwpOworICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAgaWYoQ1VSTEVfT0sgIT0gcmVzKQorICAgIHsKKyAgICAgIHByaW50ZigiRXJyb3I6ICVzXG4iLCBzdHJlcnJvcihyZXMpKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8qIEV4dHJhY3QgdGhlIHNvY2tldCBmcm9tIHRoZSBjdXJsIGhhbmRsZSAtIHdlJ2xsIG5lZWQgaXQgZm9yIHdhaXRpbmcuCisgICAgICogTm90ZSB0aGF0IHRoaXMgQVBJIHRha2VzIGEgcG9pbnRlciB0byBhICdsb25nJyB3aGlsZSB3ZSB1c2UKKyAgICAgKiBjdXJsX3NvY2tldF90IGZvciBzb2NrZXRzIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICByZXMgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19MQVNUU09DS0VULCAmc29ja2V4dHIpOworCisgICAgaWYoQ1VSTEVfT0sgIT0gcmVzKQorICAgIHsKKyAgICAgIHByaW50ZigiRXJyb3I6ICVzXG4iLCBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBzb2NrZmQgPSBzb2NrZXh0cjsKKworICAgIC8qIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmVjb21lIHJlYWR5IGZvciBzZW5kaW5nICovCisgICAgaWYoIXdhaXRfb25fc29ja2V0KHNvY2tmZCwgMCwgNjAwMDBMKSkKKyAgICB7CisgICAgICBwcmludGYoIkVycm9yOiB0aW1lb3V0LlxuIik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBwdXRzKCJTZW5kaW5nIHJlcXVlc3QuIik7CisgICAgLyogU2VuZCB0aGUgcmVxdWVzdC4gUmVhbCBhcHBsaWNhdGlvbnMgc2hvdWxkIGNoZWNrIHRoZSBpb2xlbgorICAgICAqIHRvIHNlZSBpZiBhbGwgdGhlIHJlcXVlc3QgaGFzIGJlZW4gc2VudCAqLworICAgIHJlcyA9IGN1cmxfZWFzeV9zZW5kKGN1cmwsIHJlcXVlc3QsIHN0cmxlbihyZXF1ZXN0KSwgJmlvbGVuKTsKKworICAgIGlmKENVUkxFX09LICE9IHJlcykKKyAgICB7CisgICAgICBwcmludGYoIkVycm9yOiAlc1xuIiwgY3VybF9lYXN5X3N0cmVycm9yKHJlcykpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHB1dHMoIlJlYWRpbmcgcmVzcG9uc2UuIik7CisKKyAgICAvKiByZWFkIHRoZSByZXNwb25zZSAqLworICAgIGZvcig7OykKKyAgICB7CisgICAgICBjaGFyIGJ1ZlsxMDI0XTsKKworICAgICAgd2FpdF9vbl9zb2NrZXQoc29ja2ZkLCAxLCA2MDAwMEwpOworICAgICAgcmVzID0gY3VybF9lYXN5X3JlY3YoY3VybCwgYnVmLCAxMDI0LCAmaW9sZW4pOworCisgICAgICBpZihDVVJMRV9PSyAhPSByZXMpCisgICAgICAgIGJyZWFrOworCisgICAgICBwcmludGYoIlJlY2VpdmVkICUiIF9GTVRfU0laRV9UICIgYnl0ZXMuXG4iLCBpb2xlbik7CisgICAgfQorCisgICAgLyogYWx3YXlzIGNsZWFudXAgKi8KKyAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc2VwaGVhZGVycy5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zZXBoZWFkZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhMTRmYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc2VwaGVhZGVycy5jCkBAIC0wLDAgKzEsODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworc3RhdGljIHNpemVfdCB3cml0ZV9kYXRhKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyZWFtKQoreworICBpbnQgd3JpdHRlbiA9IGZ3cml0ZShwdHIsIHNpemUsIG5tZW1iLCAoRklMRSAqKXN0cmVhbSk7CisgIHJldHVybiB3cml0dGVuOworfQorCitpbnQgbWFpbih2b2lkKQoreworICBDVVJMICpjdXJsX2hhbmRsZTsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmhlYWRlcmZpbGVuYW1lID0gImhlYWQub3V0IjsKKyAgRklMRSAqaGVhZGVyZmlsZTsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmJvZHlmaWxlbmFtZSA9ICJib2R5Lm91dCI7CisgIEZJTEUgKmJvZHlmaWxlOworCisgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKworICAvKiBpbml0IHRoZSBjdXJsIHNlc3Npb24gKi8KKyAgY3VybF9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworCisgIC8qIHNldCBVUkwgdG8gZ2V0ICovCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybF9oYW5kbGUsIENVUkxPUFRfVVJMLCAiaHR0cDovL2V4YW1wbGUuY29tIik7CisKKyAgLyogbm8gcHJvZ3Jlc3MgbWV0ZXIgcGxlYXNlICovCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybF9oYW5kbGUsIENVUkxPUFRfTk9QUk9HUkVTUywgMUwpOworCisgIC8qIHNlbmQgYWxsIGRhdGEgdG8gdGhpcyBmdW5jdGlvbiAgKi8KKyAgY3VybF9lYXN5X3NldG9wdChjdXJsX2hhbmRsZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZV9kYXRhKTsKKworICAvKiBvcGVuIHRoZSBmaWxlcyAqLworICBoZWFkZXJmaWxlID0gZm9wZW4oaGVhZGVyZmlsZW5hbWUsInciKTsKKyAgaWYgKGhlYWRlcmZpbGUgPT0gTlVMTCkgeworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmxfaGFuZGxlKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgYm9keWZpbGUgPSBmb3Blbihib2R5ZmlsZW5hbWUsInciKTsKKyAgaWYgKGJvZHlmaWxlID09IE5VTEwpIHsKKyAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsX2hhbmRsZSk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogd2Ugd2FudCB0aGUgaGVhZGVycyB0byB0aGlzIGZpbGUgaGFuZGxlICovCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybF9oYW5kbGUsICAgQ1VSTE9QVF9XUklURUhFQURFUiwgaGVhZGVyZmlsZSk7CisKKyAgLyoKKyAgICogTm90aWNlIGhlcmUgdGhhdCBpZiB5b3Ugd2FudCB0aGUgYWN0dWFsIGRhdGEgc2VudCBhbnl3aGVyZSBlbHNlIGJ1dAorICAgKiBzdGRvdXQsIHlvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcgdGhlIENVUkxPUFRfV1JJVEVEQVRBIG9wdGlvbi4gICovCisKKyAgLyogZ2V0IGl0ISAqLworICBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsX2hhbmRsZSk7CisKKyAgLyogY2xvc2UgdGhlIGhlYWRlciBmaWxlICovCisgIGZjbG9zZShoZWFkZXJmaWxlKTsKKworICAvKiBjbGVhbnVwIGN1cmwgc3R1ZmYgKi8KKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybF9oYW5kbGUpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zaW1wbGUuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc2ltcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4NzdmOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc2ltcGxlLmMKQEAgLTAsMCArMSwzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworaW50IG1haW4odm9pZCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzOworCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZihjdXJsKSB7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly9leGFtcGxlLmNvbSIpOworICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAgLyogYWx3YXlzIGNsZWFudXAgKi8KKyAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc2ltcGxlcG9zdC5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zaW1wbGVwb3N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4NTcxOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc2ltcGxlcG9zdC5jCkBAIC0wLDAgKzEsNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlczsKKworICBzdGF0aWMgY29uc3QgY2hhciAqcG9zdHRoaXM9Im1vbyBtb29vIG1vbyBtb28iOworCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZihjdXJsKSB7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly9leGFtcGxlLmNvbSIpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCBwb3N0dGhpcyk7CisKKyAgICAvKiBpZiB3ZSBkb24ndCBwcm92aWRlIFBPU1RGSUVMRFNJWkUsIGxpYmN1cmwgd2lsbCBzdHJsZW4oKSBieQorICAgICAgIGl0c2VsZiAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFLCAobG9uZylzdHJsZW4ocG9zdHRoaXMpKTsKKworICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAgLyogYWx3YXlzIGNsZWFudXAgKi8KKyAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc2ltcGxlc210cC5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zaW1wbGVzbXRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0MjlmNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc2ltcGxlc210cC5jCkBAIC0wLDAgKzEsODMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2ludCBtYWluKHZvaWQpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlczsKKyAgc3RydWN0IGN1cmxfc2xpc3QgKnJlY2lwaWVudHMgPSBOVUxMOworCisgIC8qIHZhbHVlIGZvciBlbnZlbG9wZSByZXZlcnNlLXBhdGggKi8KKyAgc3RhdGljIGNvbnN0IGNoYXIgKmZyb20gPSAiPGJyYWRoQGV4YW1wbGUuY29tPiI7CisKKyAgLyogdGhpcyBiZWNvbWVzIHRoZSBlbnZlbG9wZSBmb3J3YXJkLXBhdGggKi8KKyAgc3RhdGljIGNvbnN0IGNoYXIgKnRvID0gIjxicmFkaEBleGFtcGxlLm5ldD4iOworCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBpZihjdXJsKSB7CisgICAgLyogdGhpcyBpcyB0aGUgVVJMIGZvciB5b3VyIG1haWxzZXJ2ZXIgLSB5b3UgY2FuIGFsc28gdXNlIGFuIHNtdHBzOi8vIFVSTAorICAgICAqIGhlcmUgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCAic210cDovL21haWwuZXhhbXBsZS5uZXQuIik7CisKKyAgICAvKiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXNuJ3Qgc3RyaWN0bHkgcmVxdWlyZWQsIG9taXR0aW5nIGl0IHdpbGwgcmVzdWx0IGluCisgICAgICogbGliY3VybCB3aWxsIHNlbnQgdGhlIE1BSUwgRlJPTSBjb21tYW5kIHdpdGggbm8gc2VuZGVyIGRhdGEuIEFsbAorICAgICAqIGF1dG9yZXNwb25zZXMgc2hvdWxkIGhhdmUgYW4gZW1wdHkgcmV2ZXJzZS1wYXRoLCBhbmQgc2hvdWxkIGJlIGRpcmVjdGVkCisgICAgICogdG8gdGhlIGFkZHJlc3MgaW4gdGhlIHJldmVyc2UtcGF0aCB3aGljaCB0cmlnZ2VyZWQgdGhlbS4gT3RoZXJ3aXNlLCB0aGV5CisgICAgICogY291bGQgY2F1c2UgYW4gZW5kbGVzcyBsb29wLiBTZWUgUkZDIDUzMjEgU2VjdGlvbiA0LjUuNSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9NQUlMX0ZST00sIGZyb20pOworCisgICAgLyogTm90ZSB0aGF0IHRoZSBDVVJMT1BUX01BSUxfUkNQVCB0YWtlcyBhIGxpc3QsIG5vdCBhIGNoYXIgYXJyYXkuICAqLworICAgIHJlY2lwaWVudHMgPSBjdXJsX3NsaXN0X2FwcGVuZChyZWNpcGllbnRzLCB0byk7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX01BSUxfUkNQVCwgcmVjaXBpZW50cyk7CisKKyAgICAvKiBZb3UgcHJvdmlkZSB0aGUgcGF5bG9hZCAoaGVhZGVycyBhbmQgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UpIGFzIHRoZQorICAgICAqICJkYXRhIiBlbGVtZW50LiBUaGVyZSBhcmUgdHdvIGNob2ljZXMsIGVpdGhlcjoKKyAgICAgKiAtIHByb3ZpZGUgYSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgc3BlY2lmeSB0aGUgZnVuY3Rpb24gbmFtZSB1c2luZyB0aGUKKyAgICAgKiBDVVJMT1BUX1JFQURGVU5DVElPTiBvcHRpb247IG9yCisgICAgICogLSBqdXN0IHByb3ZpZGUgYSBGSUxFIHBvaW50ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byByZWFkIHRoZSBkYXRhIGZyb20uCisgICAgICogVGhlIGVhc2llc3QgY2FzZSBpcyBqdXN0IHRvIHJlYWQgZnJvbSBzdGFuZGFyZCBpbnB1dCwgKHdoaWNoIGlzIGF2YWlsYWJsZQorICAgICAqIGFzIGEgRklMRSBwb2ludGVyKSBhcyBzaG93biBoZXJlLgorICAgICAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFEREFUQSwgc3RkaW4pOworCisgICAgLyogc2VuZCB0aGUgbWVzc2FnZSAoaW5jbHVkaW5nIGhlYWRlcnMpICovCisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgICAvKiBmcmVlIHRoZSBsaXN0IG9mIHJlY2lwaWVudHMgKi8KKyAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKHJlY2lwaWVudHMpOworCisgICAgLyogY3VybCB3b24ndCBzZW5kIHRoZSBRVUlUIGNvbW1hbmQgdW50aWwgeW91IGNhbGwgY2xlYW51cCwgc28geW91IHNob3VsZCBiZQorICAgICAqIGFibGUgdG8gcmUtdXNlIHRoaXMgY29ubmVjdGlvbiBmb3IgYWRkaXRpb25hbCBtZXNzYWdlcyAoc2V0dGluZworICAgICAqIENVUkxPUFRfTUFJTF9GUk9NIGFuZCBDVVJMT1BUX01BSUxfUkNQVCBhcyByZXF1aXJlZCwgYW5kIGNhbGxpbmcKKyAgICAgKiBjdXJsX2Vhc3lfcGVyZm9ybSgpIGFnYWluLiBJdCBtYXkgbm90IGJlIGEgZ29vZCBpZGVhIHRvIGtlZXAgdGhlCisgICAgICogY29ubmVjdGlvbiBvcGVuIGZvciBhIHZlcnkgbG9uZyB0aW1lIHRob3VnaCAobW9yZSB0aGFuIGEgZmV3IG1pbnV0ZXMgbWF5CisgICAgICogcmVzdWx0IGluIHRoZSBzZXJ2ZXIgdGltaW5nIG91dCB0aGUgY29ubmVjdGlvbiksIGFuZCB5b3UgZG8gd2FudCB0byBjbGVhbgorICAgICAqIHVwIGluIHRoZSBlbmQuCisgICAgICovCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3NpbXBsZXNzbC5jIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zaW1wbGVzc2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmEzNzgzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zaW1wbGVzc2wuYwpAQCAtMCwwICsxLDEzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisvKiBzb21lIHJlcXVpcmVtZW50cyBmb3IgdGhpcyB0byB3b3JrOgorICAgMS4gICBzZXQgcENlcnRGaWxlIHRvIHRoZSBmaWxlIHdpdGggdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZQorICAgMi4gICBpZiB0aGUga2V5IGlzIHBhc3NwaHJhc2UgcHJvdGVjdGVkLCBzZXQgcFBhc3NwaHJhc2UgdG8gdGhlCisgICAgICAgIHBhc3NwaHJhc2UgeW91IHVzZQorICAgMy4gICBpZiB5b3UgYXJlIHVzaW5nIGEgY3J5cHRvIGVuZ2luZToKKyAgIDMuMS4gc2V0IGEgI2RlZmluZSBVU0VfRU5HSU5FCisgICAzLjIuIHNldCBwRW5naW5lIHRvIHRoZSBuYW1lIG9mIHRoZSBjcnlwdG8gZW5naW5lIHlvdSB1c2UKKyAgIDMuMy4gc2V0IHBLZXlOYW1lIHRvIHRoZSBrZXkgaWRlbnRpZmllciB5b3Ugd2FudCB0byB1c2UKKyAgIDQuICAgaWYgeW91IGRvbid0IHVzZSBhIGNyeXB0byBlbmdpbmU6CisgICA0LjEuIHNldCBwS2V5TmFtZSB0byB0aGUgZmlsZSBuYW1lIG9mIHlvdXIgY2xpZW50IGtleQorICAgNC4yLiBpZiB0aGUgZm9ybWF0IG9mIHRoZSBrZXkgZmlsZSBpcyBERVIsIHNldCBwS2V5VHlwZSB0byAiREVSIgorCisgICAhISB2ZXJpZnkgb2YgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBpcyBub3QgaW1wbGVtZW50ZWQgaGVyZSAhIQorCisgICAqKioqIFRoaXMgZXhhbXBsZSBvbmx5IHdvcmtzIHdpdGggbGliY3VybCA3LjkuMyBhbmQgbGF0ZXIhICoqKioKKworKi8KKworaW50IG1haW4odm9pZCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzOworICBGSUxFICpoZWFkZXJmaWxlOworICBjb25zdCBjaGFyICpwUGFzc3BocmFzZSA9IE5VTEw7CisKKyAgc3RhdGljIGNvbnN0IGNoYXIgKnBDZXJ0RmlsZSA9ICJ0ZXN0Y2VydC5wZW0iOworICBzdGF0aWMgY29uc3QgY2hhciAqcENBQ2VydEZpbGU9ImNhY2VydC5wZW0iOworCisgIGNvbnN0IGNoYXIgKnBLZXlOYW1lOworICBjb25zdCBjaGFyICpwS2V5VHlwZTsKKworICBjb25zdCBjaGFyICpwRW5naW5lOworCisjaWZkZWYgVVNFX0VOR0lORQorICBwS2V5TmFtZSAgPSAicnNhX3Rlc3QiOworICBwS2V5VHlwZSAgPSAiRU5HIjsKKyAgcEVuZ2luZSAgID0gImNoaWwiOyAgICAgICAgICAgIC8qIGZvciBuQ2hpcGVyIEhTTS4uLiAqLworI2Vsc2UKKyAgcEtleU5hbWUgID0gInRlc3RrZXkucGVtIjsKKyAgcEtleVR5cGUgID0gIlBFTSI7CisgIHBFbmdpbmUgICA9IE5VTEw7CisjZW5kaWYKKworICBoZWFkZXJmaWxlID0gZm9wZW4oImR1bXBpdCIsICJ3Iik7CisKKyAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9ERUZBVUxUKTsKKworICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYoY3VybCkgeworICAgIC8qIHdoYXQgY2FsbCB0byB3cml0ZTogKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCAiSFRUUFM6Ly95b3VyLmZhdm91cml0ZS5zc2wuc2l0ZSIpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURUhFQURFUiwgaGVhZGVyZmlsZSk7CisKKyAgICB3aGlsZSgxKSAgICAgICAgICAgICAgICAgICAgLyogZG8gc29tZSB1Z2x5IHNob3J0IGN1dC4uLiAqLworICAgIHsKKyAgICAgIGlmIChwRW5naW5lKSAgICAgICAgICAgICAvKiB1c2UgY3J5cHRvIGVuZ2luZSAqLworICAgICAgeworICAgICAgICBpZiAoY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTEVOR0lORSxwRW5naW5lKSAhPSBDVVJMRV9PSykKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgIC8qIGxvYWQgdGhlIGNyeXB0byBlbmdpbmUgKi8KKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiY2FuJ3Qgc2V0IGNyeXB0byBlbmdpbmVcbiIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMRU5HSU5FX0RFRkFVTFQsMUwpICE9IENVUkxFX09LKQorICAgICAgICB7IC8qIHNldCB0aGUgY3J5cHRvIGVuZ2luZSBhcyBkZWZhdWx0ICovCisgICAgICAgICAgLyogb25seSBuZWVkZWQgZm9yIHRoZSBmaXJzdCB0aW1lIHlvdSBsb2FkCisgICAgICAgICAgICAgYSBlbmdpbmUgaW4gYSBjdXJsIG9iamVjdC4uLiAqLworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJjYW4ndCBzZXQgY3J5cHRvIGVuZ2luZSBhcyBkZWZhdWx0XG4iKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogY2VydCBpcyBzdG9yZWQgUEVNIGNvZGVkIGluIGZpbGUuLi4gKi8KKyAgICAgIC8qIHNpbmNlIFBFTSBpcyBkZWZhdWx0LCB3ZSBuZWVkbid0IHNldCBpdCBmb3IgUEVNICovCisgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9TU0xDRVJUVFlQRSwiUEVNIik7CisKKyAgICAgIC8qIHNldCB0aGUgY2VydCBmb3IgY2xpZW50IGF1dGhlbnRpY2F0aW9uICovCisgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9TU0xDRVJULHBDZXJ0RmlsZSk7CisKKyAgICAgIC8qIHNvcnJ5LCBmb3IgZW5naW5lIHdlIG11c3Qgc2V0IHRoZSBwYXNzcGhyYXNlCisgICAgICAgICAoaWYgdGhlIGtleSBoYXMgb25lLi4uKSAqLworICAgICAgaWYgKHBQYXNzcGhyYXNlKQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9LRVlQQVNTV0QscFBhc3NwaHJhc2UpOworCisgICAgICAvKiBpZiB3ZSB1c2UgYSBrZXkgc3RvcmVkIGluIGEgY3J5cHRvIGVuZ2luZSwKKyAgICAgICAgIHdlIG11c3Qgc2V0IHRoZSBrZXkgdHlwZSB0byAiRU5HIiAqLworICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLENVUkxPUFRfU1NMS0VZVFlQRSxwS2V5VHlwZSk7CisKKyAgICAgIC8qIHNldCB0aGUgcHJpdmF0ZSBrZXkgKGZpbGUgb3IgSUQgaW4gZW5naW5lKSAqLworICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLENVUkxPUFRfU1NMS0VZLHBLZXlOYW1lKTsKKworICAgICAgLyogc2V0IHRoZSBmaWxlIHdpdGggdGhlIGNlcnRzIHZhaWxkYXRpbmcgdGhlIHNlcnZlciAqLworICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLENVUkxPUFRfQ0FJTkZPLHBDQUNlcnRGaWxlKTsKKworICAgICAgLyogZGlzY29ubmVjdCBpZiB3ZSBjYW4ndCB2YWxpZGF0ZSBzZXJ2ZXIncyBjZXJ0ICovCisgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwxTCk7CisKKyAgICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgIC8qIHdlIGFyZSBkb25lLi4uICovCisgICAgfQorICAgIC8qIGFsd2F5cyBjbGVhbnVwICovCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIH0KKworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3Ntb290aC1ndGstdGhyZWFkLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3Ntb290aC1ndGstdGhyZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyZjZlMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc21vb3RoLWd0ay10aHJlYWQuYwpAQCAtMCwwICsxLDIyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUaGlzIGlzIGEgbXVsdGkgdGhyZWFkZWQgYXBwbGljYXRpb24gdGhhdCB1c2VzIGEgcHJvZ3Jlc3MgYmFyIHRvIHNob3cKKyAqIHN0YXR1cy4gIEl0IHVzZXMgR3RrKyB0byBtYWtlIGEgc21vb3RoIHB1bHNlLgorICoKKyAqIFdyaXR0ZW4gYnkgSnVkIEJpc2hvcCBhZnRlciBzdHVkeWluZyB0aGUgb3RoZXIgZXhhbXBsZXMgcHJvdmlkZWQgd2l0aAorICogbGliY3VybC4KKyAqCisgKiBUbyBjb21waWxlIChvbiBhIHNpbmdsZSBsaW5lKToKKyAqIGdjYyAtZ2dkYiBgcGtnLWNvbmZpZyAtLWNmbGFncyAgLS1saWJzIGd0aystMi4wYCAtbGN1cmwgLWxzc2wgLWxjcnlwdG8KKyAqICAgLWxndGhyZWFkLTIuMCAtZGwgIHNtb290aC1ndGstdGhyZWFkLmMgLW8gc21vb3RoLWd0ay10aHJlYWQKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisjZGVmaW5lIE5VTVQgNAorCitwdGhyZWFkX211dGV4X3QgbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CitpbnQgaiA9IDA7CitnaW50IG51bV91cmxzID0gOTsgLyogSnVzdCBtYWtlIHN1cmUgdGhpcyBpcyBsZXNzIHRoYW4gdXJsc1tdKi8KK2NvbnN0IGNoYXIgKiBjb25zdCB1cmxzW109IHsKKyAgIjkwMDIyIiwKKyAgIjkwMDIzIiwKKyAgIjkwMDI0IiwKKyAgIjkwMDI1IiwKKyAgIjkwMDI2IiwKKyAgIjkwMDI3IiwKKyAgIjkwMDI4IiwKKyAgIjkwMDI5IiwKKyAgIjkwMDMwIgorfTsKKworc2l6ZV90IHdyaXRlX2ZpbGUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCBGSUxFICpzdHJlYW0pCit7CisgIC8qIHByaW50Zigid3JpdGVfZmlsZVxuIik7ICovCisgIHJldHVybiBmd3JpdGUocHRyLCBzaXplLCBubWVtYiwgc3RyZWFtKTsKK30KKworLyogaHR0cDovL3hvYXAud2VhdGhlci5jb20vd2VhdGhlci9sb2NhbC80NjIxND9jYz0qJmRheWY9NSZ1bml0PWkgKi8KK3ZvaWQgKnB1bGxfb25lX3VybCh2b2lkICpOYU4pCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlczsKKyAgZ2NoYXIgKmh0dHA7CisgIEZJTEUgKm91dGZpbGU7CisKKyAgLyogU3RvcCB0aHJlYWRzIGZyb20gZW50ZXJpbmcgdW5sZXNzIGogaXMgaW5jcmVtZW50ZWQgKi8KKyAgcHRocmVhZF9tdXRleF9sb2NrKCZsb2NrKTsKKyAgd2hpbGUgKCBqIDwgbnVtX3VybHMgKQorICB7CisgICAgcHJpbnRmKCJqID0gJWRcbiIsIGopOworCisgICAgaHR0cCA9CisgICAgICBnX3N0cmR1cF9wcmludGYoInhvYXAud2VhdGhlci5jb20vd2VhdGhlci9sb2NhbC8lcz9jYz0qJmRheWY9NSZ1bml0PWlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgdXJsc1tqXSk7CisKKyAgICBwcmludGYoICJodHRwICVzIiwgaHR0cCApOworCisgICAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgICAgaWYoY3VybCkKKyAgICB7CisKKyAgICAgIG91dGZpbGUgPSBmb3Blbih1cmxzW2pdLCAidyIpOworICAgICAgLyogcHJpbnRmKCJmb3BlblxuIik7ICovCisKKyAgICAgIC8qIFNldCB0aGUgVVJMIGFuZCB0cmFuc2ZlciB0eXBlICovCisgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBodHRwKTsKKworICAgICAgLyogV3JpdGUgdG8gdGhlIGZpbGUgKi8KKyAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURURBVEEsIG91dGZpbGUpOworICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIHdyaXRlX2ZpbGUpOworCisgICAgICBqKys7ICAvKiBjcml0aWNhbCBsaW5lICovCisgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbG9jayk7CisKKyAgICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAgICBmY2xvc2Uob3V0ZmlsZSk7CisgICAgICBwcmludGYoImZjbG9zZVxuIik7CisKKyAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICAgIH0KKyAgICBnX2ZyZWUgKGh0dHApOworCisgICAgLyogQWRkcyBtb3JlIGxhdGVuY3ksIHRlc3RpbmcgdGhlIG11dGV4LiovCisgICAgc2xlZXAoMSk7CisKKyAgfSAvKiBlbmQgd2hpbGUgKi8KKyAgcmV0dXJuIE5VTEw7Cit9CisKKworZ2Jvb2xlYW4gcHVsc2VfYmFyKGdwb2ludGVyIGRhdGEpCit7CisgIGdka190aHJlYWRzX2VudGVyKCk7CisgIGd0a19wcm9ncmVzc19iYXJfcHVsc2UgKEdUS19QUk9HUkVTU19CQVIgKGRhdGEpKTsKKyAgZ2RrX3RocmVhZHNfbGVhdmUoKTsKKworICAvKiBSZXR1cm4gdHJ1ZSBzbyB0aGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWdhaW47CisgICAqIHJldHVybmluZyBmYWxzZSByZW1vdmVzIHRoaXMgdGltZW91dCBmdW5jdGlvbi4KKyAgICovCisgIHJldHVybiBUUlVFOworfQorCit2b2lkICpjcmVhdGVfdGhyZWFkKHZvaWQgKnByb2dyZXNzX2JhcikKK3sKKyAgcHRocmVhZF90IHRpZFtOVU1UXTsKKyAgaW50IGk7CisgIGludCBlcnJvcjsKKworICAvKiBNYWtlIHN1cmUgSSBkb24ndCBjcmVhdGUgbW9yZSB0aHJlYWRzIHRoYW4gdXJscy4gKi8KKyAgZm9yKGk9MDsgaSA8IE5VTVQgJiYgaSA8IG51bV91cmxzIDsgaSsrKSB7CisgICAgZXJyb3IgPSBwdGhyZWFkX2NyZWF0ZSgmdGlkW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogZGVmYXVsdCBhdHRyaWJ1dGVzIHBsZWFzZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVsbF9vbmVfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYoMCAhPSBlcnJvcikKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgcnVuIHRocmVhZCBudW1iZXIgJWQsIGVycm5vICVkXG4iLCBpLCBlcnJvcik7CisgICAgZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsICJUaHJlYWQgJWQsIGdldHMgJXNcbiIsIGksIHVybHNbaV0pOworICB9CisKKyAgLyogV2FpdCBmb3IgYWxsIHRocmVhZHMgdG8gdGVybWluYXRlLiAqLworICBmb3IoaT0wOyBpIDwgTlVNVCAmJiBpIDwgbnVtX3VybHM7IGkrKykgeworICAgIGVycm9yID0gcHRocmVhZF9qb2luKHRpZFtpXSwgTlVMTCk7CisgICAgZnByaW50ZihzdGRlcnIsICJUaHJlYWQgJWQgdGVybWluYXRlZFxuIiwgaSk7CisgIH0KKworICAvKiBUaGlzIHN0b3BzIHRoZSBwdWxzaW5nIGlmIHlvdSBoYXZlIGl0IHR1cm5lZCBvbiBpbiB0aGUgcHJvZ3Jlc3MgYmFyCisgICAgIHNlY3Rpb24gKi8KKyAgZ19zb3VyY2VfcmVtb3ZlKEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChwcm9ncmVzc19iYXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdWxzZV9pZCIpKSk7CisKKyAgLyogVGhpcyBkZXN0cm95cyB0aGUgcHJvZ3Jlc3MgYmFyICovCisgIGd0a193aWRnZXRfZGVzdHJveShwcm9ncmVzc19iYXIpOworCisgIC8qIFtVbl1Db21tZW50IHRoaXMgb3V0IHRvIGtpbGwgdGhlIHByb2dyYW0gcmF0aGVyIHRoYW4gcHVzaGluZyBjbG9zZS4gKi8KKyAgLyogZ3RrX21haW5fcXVpdCgpOyAqLworCisKKyAgcmV0dXJuIE5VTEw7CisKK30KKworc3RhdGljIGdib29sZWFuIGNiX2RlbGV0ZShHdGtXaWRnZXQgKndpbmRvdywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgZ3RrX21haW5fcXVpdCgpOworICByZXR1cm4gRkFMU0U7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgR3RrV2lkZ2V0ICp0b3Bfd2luZG93LCAqb3V0c2lkZV9mcmFtZSwgKmluc2lkZV9mcmFtZSwgKnByb2dyZXNzX2JhcjsKKworICAvKiBNdXN0IGluaXRpYWxpemUgbGliY3VybCBiZWZvcmUgYW55IHRocmVhZHMgYXJlIHN0YXJ0ZWQgKi8KKyAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIC8qIEluaXQgdGhyZWFkICovCisgIGdfdGhyZWFkX2luaXQoTlVMTCk7CisgIGdka190aHJlYWRzX2luaXQgKCk7CisgIGdka190aHJlYWRzX2VudGVyICgpOworCisgIGd0a19pbml0KCZhcmdjLCAmYXJndik7CisKKyAgLyogQmFzZSB3aW5kb3cgKi8KKyAgdG9wX3dpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworCisgIC8qIEZyYW1lICovCisgIG91dHNpZGVfZnJhbWUgPSBndGtfZnJhbWVfbmV3KE5VTEwpOworICBndGtfZnJhbWVfc2V0X3NoYWRvd190eXBlKEdUS19GUkFNRShvdXRzaWRlX2ZyYW1lKSwgR1RLX1NIQURPV19PVVQpOworICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHRvcF93aW5kb3cpLCBvdXRzaWRlX2ZyYW1lKTsKKworICAvKiBGcmFtZSAqLworICBpbnNpZGVfZnJhbWUgPSBndGtfZnJhbWVfbmV3KE5VTEwpOworICBndGtfZnJhbWVfc2V0X3NoYWRvd190eXBlKEdUS19GUkFNRShpbnNpZGVfZnJhbWUpLCBHVEtfU0hBRE9XX0lOKTsKKyAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoaW5zaWRlX2ZyYW1lKSwgNSk7CisgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIob3V0c2lkZV9mcmFtZSksIGluc2lkZV9mcmFtZSk7CisKKyAgLyogUHJvZ3Jlc3MgYmFyICovCisgIHByb2dyZXNzX2JhciA9IGd0a19wcm9ncmVzc19iYXJfbmV3KCk7CisgIGd0a19wcm9ncmVzc19iYXJfcHVsc2UgKEdUS19QUk9HUkVTU19CQVIgKHByb2dyZXNzX2JhcikpOworICAvKiBNYWtlIHVuaWZvcm0gcHVsc2luZyAqLworICBnaW50IHB1bHNlX3JlZiA9IGdfdGltZW91dF9hZGQgKDMwMCwgcHVsc2VfYmFyLCBwcm9ncmVzc19iYXIpOworICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChwcm9ncmVzc19iYXIpLCAicHVsc2VfaWQiLAorICAgICAgICAgICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIocHVsc2VfcmVmKSk7CisgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoaW5zaWRlX2ZyYW1lKSwgcHJvZ3Jlc3NfYmFyKTsKKworICBndGtfd2lkZ2V0X3Nob3dfYWxsKHRvcF93aW5kb3cpOworICBwcmludGYoImd0a193aWRnZXRfc2hvd19hbGxcbiIpOworCisgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QgKHRvcF93aW5kb3cpLCAiZGVsZXRlLWV2ZW50IiwKKyAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKGNiX2RlbGV0ZSksIE5VTEwpOworCisgIGlmICghZ190aHJlYWRfY3JlYXRlKCZjcmVhdGVfdGhyZWFkLCBwcm9ncmVzc19iYXIsIEZBTFNFLCBOVUxMKSAhPSAwKQorICAgIGdfd2FybmluZygiY2FuJ3QgY3JlYXRlIHRoZSB0aHJlYWQiKTsKKworICBndGtfbWFpbigpOworICBnZGtfdGhyZWFkc19sZWF2ZSgpOworICBwcmludGYoImdka190aHJlYWRzX2xlYXZlXG4iKTsKKworICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zbXRwLW11bHRpLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3NtdHAtbXVsdGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjgxMzIwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zbXRwLW11bHRpLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVGhpcyBpcyBhbiBleGFtcGxlIGFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIHNlbmRpbmcgU01UUCBtYWlsIHVzaW5nIHRoZQorICogbXVsdGkgaW50ZXJmYWNlLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworLyoKKyAqIFRoaXMgaXMgdGhlIGxpc3Qgb2YgYmFzaWMgZGV0YWlscyB5b3UgbmVlZCB0byB0d2VhayB0byBnZXQgdGhpbmdzIHJpZ2h0LgorICovCisjZGVmaW5lIFVTRVJOQU1FICJ1c2VyQGV4YW1wbGUuY29tIgorI2RlZmluZSBQQVNTV09SRCAiMTIzcXdlcnR5IgorI2RlZmluZSBTTVRQU0VSVkVSICJzbXRwLmV4YW1wbGUuY29tIgorI2RlZmluZSBTTVRQUE9SVCAiOjU4NyIgLyogaXQgaXMgYSBjb2xvbitwb3J0IHN0cmluZywgYnV0IHlvdSBjYW4gc2V0IGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0byAiIiB0byB1c2UgdGhlIGRlZmF1bHQgcG9ydCAqLworI2RlZmluZSBSRUNJUElFTlQgIjxyZWNpcGllbnRAZXhhbXBsZS5jb20+IgorI2RlZmluZSBNQUlMRlJPTSAiPHJlYWx1c2VyQGV4YW1wbGUuY29tPiIKKworI2RlZmluZSBNVUxUSV9QRVJGT1JNX0hBTkdfVElNRU9VVCA2MCAqIDEwMDAKKworLyogTm90ZSB0aGF0IHlvdSBzaG91bGQgaW5jbHVkZSB0aGUgYWN0dWFsIG1ldGEgZGF0YSBoZWFkZXJzIGhlcmUgYXMgd2VsbCBpZgorICAgeW91IHdhbnQgdGhlIG1haWwgdG8gaGF2ZSBhIFN1YmplY3QsIGFub3RoZXIgRnJvbTosIHNob3cgYSBUbzogb3Igd2hhdGV2ZXIKKyAgIHlvdSB0aGluayB5b3VyIG1haWwgc2hvdWxkIGZlYXR1cmUhICovCitzdGF0aWMgY29uc3QgY2hhciAqdGV4dFtdPXsKKyAgIm9uZVxuIiwKKyAgInR3b1xuIiwKKyAgInRocmVlXG4iLAorICAiIEhlbGxvLCB0aGlzIGlzIENVUkwgZW1haWwgU01UUFxuIiwKKyAgTlVMTAorfTsKKworc3RydWN0IFdyaXRlVGhpcyB7CisgIGludCBjb3VudGVyOworfTsKKworc3RhdGljIHNpemVfdCByZWFkX2NhbGxiYWNrKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqdXNlcnApCit7CisgIHN0cnVjdCBXcml0ZVRoaXMgKnBvb2ggPSAoc3RydWN0IFdyaXRlVGhpcyAqKXVzZXJwOworICBjb25zdCBjaGFyICpkYXRhOworCisgIGlmKHNpemUqbm1lbWIgPCAxKQorICAgIHJldHVybiAwOworCisgIGRhdGEgPSB0ZXh0W3Bvb2gtPmNvdW50ZXJdOworCisgIGlmKGRhdGEpIHsKKyAgICBzaXplX3QgbGVuID0gc3RybGVuKGRhdGEpOworICAgIG1lbWNweShwdHIsIGRhdGEsIGxlbik7CisgICAgcG9vaC0+Y291bnRlcisrOyAvKiBhZHZhbmNlIHBvaW50ZXIgKi8KKyAgICByZXR1cm4gbGVuOworICB9CisgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBtb3JlIGRhdGEgbGVmdCB0byBkZWxpdmVyICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0dm5vdyh2b2lkKQoreworICAvKgorICAqKiB0aW1lKCkgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGltZSBpbiBzZWNvbmRzIHNpbmNlIHRoZSBFcG9jaC4KKyAgKi8KKyAgc3RydWN0IHRpbWV2YWwgbm93OworICBub3cudHZfc2VjID0gKGxvbmcpdGltZShOVUxMKTsKKyAgbm93LnR2X3VzZWMgPSAwOworICByZXR1cm4gbm93OworfQorCitzdGF0aWMgbG9uZyB0dmRpZmYoc3RydWN0IHRpbWV2YWwgbmV3ZXIsIHN0cnVjdCB0aW1ldmFsIG9sZGVyKQoreworICByZXR1cm4gKG5ld2VyLnR2X3NlYy1vbGRlci50dl9zZWMpKjEwMDArCisgICAgKG5ld2VyLnR2X3VzZWMtb2xkZXIudHZfdXNlYykvMTAwMDsKK30KKworaW50IG1haW4odm9pZCkKK3sKKyAgIENVUkwgKmN1cmw7CisgICBDVVJMTSAqbWN1cmw7CisgICBpbnQgc3RpbGxfcnVubmluZyA9IDE7CisgICBzdHJ1Y3QgdGltZXZhbCBtcF9zdGFydDsKKyAgIGNoYXIgbXBfdGltZWRvdXQgPSAwOworICAgc3RydWN0IFdyaXRlVGhpcyBwb29oOworICAgc3RydWN0IGN1cmxfc2xpc3QqIHJjcHRfbGlzdCA9IE5VTEw7CisKKyAgIHBvb2guY291bnRlciA9IDA7CisKKyAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfREVGQVVMVCk7CisKKyAgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICAgaWYoIWN1cmwpCisgICAgIHJldHVybiAxOworCisgICBtY3VybCA9IGN1cmxfbXVsdGlfaW5pdCgpOworICAgaWYoIW1jdXJsKQorICAgICByZXR1cm4gMjsKKworICAgcmNwdF9saXN0ID0gY3VybF9zbGlzdF9hcHBlbmQocmNwdF9saXN0LCBSRUNJUElFTlQpOworICAgLyogbW9yZSBhZGRyZXNzZXMgY2FuIGJlIGFkZGVkIGhlcmUKKyAgICAgIHJjcHRfbGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5kKHJjcHRfbGlzdCwgIjxvdGhlcnNAZXhhbXBsZS5jb20+Iik7CisgICAqLworCisgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCAic210cDovLyIgU01UUFNFUlZFUiBTTVRQUE9SVCk7CisgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVNFUk5BTUUsIFVTRVJOQU1FKTsKKyAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QQVNTV09SRCwgUEFTU1dPUkQpOworICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgcmVhZF9jYWxsYmFjayk7CisgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfTUFJTF9GUk9NLCBNQUlMRlJPTSk7CisgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfTUFJTF9SQ1BULCByY3B0X2xpc3QpOworICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VTRV9TU0wsIChsb25nKUNVUkxVU0VTU0xfQUxMKTsKKyAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMEwpOworICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwTCk7CisgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBRERBVEEsICZwb29oKTsKKyAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMVkVSU0lPTiwgMEwpOworICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9TRVNTSU9OSURfQ0FDSEUsIDBMKTsKKyAgIGN1cmxfbXVsdGlfYWRkX2hhbmRsZShtY3VybCwgY3VybCk7CisKKyAgIG1wX3RpbWVkb3V0ID0gMDsKKyAgIG1wX3N0YXJ0ID0gdHZub3coKTsKKworICAvKiB3ZSBzdGFydCBzb21lIGFjdGlvbiBieSBjYWxsaW5nIHBlcmZvcm0gcmlnaHQgYXdheSAqLworICBjdXJsX211bHRpX3BlcmZvcm0obWN1cmwsICZzdGlsbF9ydW5uaW5nKTsKKworICB3aGlsZShzdGlsbF9ydW5uaW5nKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICBpbnQgcmM7IC8qIHNlbGVjdCgpIHJldHVybiBjb2RlICovCisKKyAgICBmZF9zZXQgZmRyZWFkOworICAgIGZkX3NldCBmZHdyaXRlOworICAgIGZkX3NldCBmZGV4Y2VwOworICAgIGludCBtYXhmZCA9IC0xOworCisgICAgbG9uZyBjdXJsX3RpbWVvID0gLTE7CisKKyAgICBGRF9aRVJPKCZmZHJlYWQpOworICAgIEZEX1pFUk8oJmZkd3JpdGUpOworICAgIEZEX1pFUk8oJmZkZXhjZXApOworCisgICAgLyogc2V0IGEgc3VpdGFibGUgdGltZW91dCB0byBwbGF5IGFyb3VuZCB3aXRoICovCisgICAgdGltZW91dC50dl9zZWMgPSAxOworICAgIHRpbWVvdXQudHZfdXNlYyA9IDA7CisKKyAgICBjdXJsX211bHRpX3RpbWVvdXQobWN1cmwsICZjdXJsX3RpbWVvKTsKKyAgICBpZihjdXJsX3RpbWVvID49IDApIHsKKyAgICAgIHRpbWVvdXQudHZfc2VjID0gY3VybF90aW1lbyAvIDEwMDA7CisgICAgICBpZih0aW1lb3V0LnR2X3NlYyA+IDEpCisgICAgICAgIHRpbWVvdXQudHZfc2VjID0gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgdGltZW91dC50dl91c2VjID0gKGN1cmxfdGltZW8gJSAxMDAwKSAqIDEwMDA7CisgICAgfQorCisgICAgLyogZ2V0IGZpbGUgZGVzY3JpcHRvcnMgZnJvbSB0aGUgdHJhbnNmZXJzICovCisgICAgY3VybF9tdWx0aV9mZHNldChtY3VybCwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOworCisgICAgLyogSW4gYSByZWFsLXdvcmxkIHByb2dyYW0geW91IE9GIENPVVJTRSBjaGVjayB0aGUgcmV0dXJuIGNvZGUgb2YgdGhlCisgICAgICAgZnVuY3Rpb24gY2FsbHMuICBPbiBzdWNjZXNzLCB0aGUgdmFsdWUgb2YgbWF4ZmQgaXMgZ3VhcmFudGVlZCB0byBiZQorICAgICAgIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAtMS4gIFdlIGNhbGwgc2VsZWN0KG1heGZkICsgMSwgLi4uKSwgc3BlY2lhbGx5IGluCisgICAgICAgY2FzZSBvZiAobWF4ZmQgPT0gLTEpLCB3ZSBjYWxsIHNlbGVjdCgwLCAuLi4pLCB3aGljaCBpcyBiYXNpY2FsbHkgZXF1YWwKKyAgICAgICB0byBzbGVlcC4gKi8KKworICAgIHJjID0gc2VsZWN0KG1heGZkKzEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVvdXQpOworCisgICAgaWYgKHR2ZGlmZih0dm5vdygpLCBtcF9zdGFydCkgPiBNVUxUSV9QRVJGT1JNX0hBTkdfVElNRU9VVCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJBQk9SVElORyBURVNULCBzaW5jZSBpdCBzZWVtcyAiCisgICAgICAgICAgICAgICJ0aGF0IGl0IHdvdWxkIGhhdmUgcnVuIGZvcmV2ZXIuXG4iKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaChyYykgeworICAgIGNhc2UgLTE6CisgICAgICAvKiBzZWxlY3QgZXJyb3IgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMDogLyogdGltZW91dCAqLworICAgIGRlZmF1bHQ6IC8qIGFjdGlvbiAqLworICAgICAgY3VybF9tdWx0aV9wZXJmb3JtKG1jdXJsLCAmc3RpbGxfcnVubmluZyk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBjdXJsX3NsaXN0X2ZyZWVfYWxsKHJjcHRfbGlzdCk7CisgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShtY3VybCwgY3VybCk7CisgIGN1cmxfbXVsdGlfY2xlYW51cChtY3VybCk7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgIHJldHVybiAwOworfQorCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc210cC10bHMuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc210cC10bHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTI2MDNmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zbXRwLXRscy5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisvKiBUaGlzIGlzIGEgc2ltcGxlIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gc2VuZCBtYWlsIHVzaW5nIGxpYmN1cmwncyBTTVRQCisgKiBjYXBhYmlsaXRpZXMuIEl0IGJ1aWxkcyBvbiB0aGUgc2ltcGxlc210cC5jIGV4YW1wbGUsIGFkZGluZyBzb21lCisgKiBhdXRoZW50aWNhdGlvbiBhbmQgdHJhbnNwb3J0IHNlY3VyaXR5LgorICovCisKKyNkZWZpbmUgRlJPTSAgICAiPHNlbmRlckBleGFtcGxlLm9yZz4iCisjZGVmaW5lIFRPICAgICAgIjxhZGRyZXNzZWVAZXhhbXBsZS5uZXQ+IgorI2RlZmluZSBDQyAgICAgICI8aW5mb0BleGFtcGxlLm9yZz4iCisKK3N0YXRpYyBjb25zdCBjaGFyICpwYXlsb2FkX3RleHRbXT17CisgICJEYXRlOiBNb24sIDI5IE5vdiAyMDEwIDIxOjU0OjI5ICsxMTAwXG4iLAorICAiVG86ICIgVE8gIlxuIiwKKyAgIkZyb206ICIgRlJPTSAiKEV4YW1wbGUgVXNlcilcbiIsCisgICJDYzogIiBDQyAiKEFub3RoZXIgZXhhbXBsZSBVc2VyKVxuIiwKKyAgIk1lc3NhZ2UtSUQ6IDxkY2Q3Y2IzNi0xMWRiLTQ4N2EtOWYzYS1lNjUyYTk0NThlZmRAcmZjcGVkYW50LmV4YW1wbGUub3JnPlxuIiwKKyAgIlN1YmplY3Q6IFNNVFAgVExTIGV4YW1wbGUgbWVzc2FnZVxuIiwKKyAgIlxuIiwgLyogZW1wdHkgbGluZSB0byBkaXZpZGUgaGVhZGVycyBmcm9tIGJvZHksIHNlZSBSRkM1MzIyICovCisgICJUaGUgYm9keSBvZiB0aGUgbWVzc2FnZSBzdGFydHMgaGVyZS5cbiIsCisgICJcbiIsCisgICJJdCBjb3VsZCBiZSBhIGxvdCBvZiBsaW5lcywgY291bGQgYmUgTUlNRSBlbmNvZGVkLCB3aGF0ZXZlci5cbiIsCisgICJDaGVjayBSRkM1MzIyLlxuIiwKKyAgTlVMTAorfTsKKworc3RydWN0IHVwbG9hZF9zdGF0dXMgeworICBpbnQgbGluZXNfcmVhZDsKK307CisKK3N0YXRpYyBzaXplX3QgcGF5bG9hZF9zb3VyY2Uodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICp1c2VycCkKK3sKKyAgc3RydWN0IHVwbG9hZF9zdGF0dXMgKnVwbG9hZF9jdHggPSAoc3RydWN0IHVwbG9hZF9zdGF0dXMgKil1c2VycDsKKyAgY29uc3QgY2hhciAqZGF0YTsKKworICBpZiAoKHNpemUgPT0gMCkgfHwgKG5tZW1iID09IDApIHx8ICgoc2l6ZSpubWVtYikgPCAxKSkgeworICAgIHJldHVybiAwOworICB9CisKKyAgZGF0YSA9IHBheWxvYWRfdGV4dFt1cGxvYWRfY3R4LT5saW5lc19yZWFkXTsKKworICBpZiAoZGF0YSkgeworICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oZGF0YSk7CisgICAgbWVtY3B5KHB0ciwgZGF0YSwgbGVuKTsKKyAgICB1cGxvYWRfY3R4LT5saW5lc19yZWFkICsrOworICAgIHJldHVybiBsZW47CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKworaW50IG1haW4odm9pZCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzOworICBzdHJ1Y3QgY3VybF9zbGlzdCAqcmVjaXBpZW50cyA9IE5VTEw7CisgIHN0cnVjdCB1cGxvYWRfc3RhdHVzIHVwbG9hZF9jdHg7CisKKyAgdXBsb2FkX2N0eC5saW5lc19yZWFkID0gMDsKKworICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYgKGN1cmwpIHsKKyAgICAvKiBUaGlzIGlzIHRoZSBVUkwgZm9yIHlvdXIgbWFpbHNlcnZlci4gTm90ZSB0aGUgdXNlIG9mIHBvcnQgNTg3IGhlcmUsCisgICAgICogaW5zdGVhZCBvZiB0aGUgbm9ybWFsIFNNVFAgcG9ydCAoMjUpLiBQb3J0IDU4NyBpcyBjb21tb25seSB1c2VkIGZvcgorICAgICAqIHNlY3VyZSBtYWlsIHN1Ym1pc3Npb24gKHNlZSBSRkM0NDAzKSwgYnV0IHlvdSBzaG91bGQgdXNlIHdoYXRldmVyCisgICAgICogbWF0Y2hlcyB5b3VyIHNlcnZlciBjb25maWd1cmF0aW9uLiAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsICJzbXRwOi8vbWFpbnNlcnZlci5leGFtcGxlLm5ldDo1ODciKTsKKworICAgIC8qIEluIHRoaXMgZXhhbXBsZSwgd2UnbGwgc3RhcnQgd2l0aCBhIHBsYWluIHRleHQgY29ubmVjdGlvbiwgYW5kIHVwZ3JhZGUKKyAgICAgKiB0byBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgdXNpbmcgdGhlIFNUQVJUVExTIGNvbW1hbmQuIEJlIGNhcmVmdWwKKyAgICAgKiBvZiB1c2luZyBDVVJMVVNFU1NMX1RSWSBoZXJlLCBiZWNhdXNlIGlmIFRMUyB1cGdyYWRlIGZhaWxzLCB0aGUgdHJhbnNmZXIKKyAgICAgKiB3aWxsIGNvbnRpbnVlIGFueXdheSAtIHNlZSB0aGUgc2VjdXJpdHkgZGlzY3Vzc2lvbiBpbiB0aGUgbGliY3VybAorICAgICAqIHR1dG9yaWFsIGZvciBtb3JlIGRldGFpbHMuICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VTRV9TU0wsIChsb25nKUNVUkxVU0VTU0xfQUxMKTsKKworICAgIC8qIElmIHlvdXIgc2VydmVyIGRvZXNuJ3QgaGF2ZSBhIHZhbGlkIGNlcnRpZmljYXRlLCB0aGVuIHlvdSBjYW4gZGlzYWJsZQorICAgICAqIHBhcnQgb2YgdGhlIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBwcm90ZWN0aW9uIGJ5IHNldHRpbmcgdGhlCisgICAgICogQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiBhbmQgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCBvcHRpb25zIHRvIDAgKGZhbHNlKS4KKyAgICAgKiAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMEwpOworICAgICAqICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwTCk7CisgICAgICogVGhhdCBpcywgaW4gZ2VuZXJhbCwgYSBiYWQgaWRlYS4gSXQgaXMgc3RpbGwgYmV0dGVyIHRoYW4gc2VuZGluZyB5b3VyCisgICAgICogYXV0aGVudGljYXRpb24gZGV0YWlscyBpbiBwbGFpbiB0ZXh0IHRob3VnaC4KKyAgICAgKiBJbnN0ZWFkLCB5b3Ugc2hvdWxkIGdldCB0aGUgaXNzdWVyIGNlcnRpZmljYXRlIChvciB0aGUgaG9zdCBjZXJ0aWZpY2F0ZQorICAgICAqIGlmIHRoZSBjZXJ0aWZpY2F0ZSBpcyBzZWxmLXNpZ25lZCkgYW5kIGFkZCBpdCB0byB0aGUgc2V0IG9mIGNlcnRpZmljYXRlcworICAgICAqIHRoYXQgYXJlIGtub3duIHRvIGxpYmN1cmwgdXNpbmcgQ1VSTE9QVF9DQUlORk8gYW5kL29yIENVUkxPUFRfQ0FQQVRILiBTZWUKKyAgICAgKiBkb2NzL1NTTENFUlRTIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAqLworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DQUlORk8sICIvcGF0aC90by9jZXJ0aWZpY2F0ZS5wZW0iKTsKKworICAgIC8qIEEgY29tbW9uIHJlYXNvbiBmb3IgcmVxdWlyaW5nIHRyYW5zcG9ydCBzZWN1cml0eSBpcyB0byBwcm90ZWN0CisgICAgICogYXV0aGVudGljYXRpb24gZGV0YWlscyAodXNlciBuYW1lcyBhbmQgcGFzc3dvcmRzKSBmcm9tIGJlaW5nICJzbm9vcGVkIgorICAgICAqIG9uIHRoZSBuZXR3b3JrLiBIZXJlIGlzIGhvdyB0aGUgdXNlciBuYW1lIGFuZCBwYXNzd29yZCBhcmUgcHJvdmlkZWQ6ICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VTRVJOQU1FLCAidXNlckBleGFtcGxlLm5ldCIpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QQVNTV09SRCwgIlBAc3N3MHJkIik7CisKKyAgICAvKiB2YWx1ZSBmb3IgZW52ZWxvcGUgcmV2ZXJzZS1wYXRoICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX01BSUxfRlJPTSwgRlJPTSk7CisgICAgLyogQWRkIHR3byByZWNpcGllbnRzLCBpbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSB0aGV5IGNvcnJlc3BvbmQgdG8gdGhlCisgICAgICogVG86IGFuZCBDYzogYWRkcmVzc2VlcyBpbiB0aGUgaGVhZGVyLCBidXQgdGhleSBjb3VsZCBiZSBhbnkga2luZCBvZgorICAgICAqIHJlY2lwaWVudC4gKi8KKyAgICByZWNpcGllbnRzID0gY3VybF9zbGlzdF9hcHBlbmQocmVjaXBpZW50cywgVE8pOworICAgIHJlY2lwaWVudHMgPSBjdXJsX3NsaXN0X2FwcGVuZChyZWNpcGllbnRzLCBDQyk7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX01BSUxfUkNQVCwgcmVjaXBpZW50cyk7CisKKyAgICAvKiBJbiB0aGlzIGNhc2UsIHdlJ3JlIHVzaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc3BlY2lmeSB0aGUgZGF0YS4gWW91CisgICAgICogY291bGQganVzdCB1c2UgdGhlIENVUkxPUFRfUkVBRERBVEEgb3B0aW9uIHRvIHNwZWNpZnkgYSBGSUxFIHBvaW50ZXIgdG8KKyAgICAgKiByZWFkIGZyb20uCisgICAgICovCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgcGF5bG9hZF9zb3VyY2UpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFEREFUQSwgJnVwbG9hZF9jdHgpOworCisgICAgLyogU2luY2UgdGhlIHRyYWZmaWMgd2lsbCBiZSBlbmNyeXB0ZWQsIGl0IGlzIHZlcnkgdXNlZnVsIHRvIHR1cm4gb24gZGVidWcKKyAgICAgKiBpbmZvcm1hdGlvbiB3aXRoaW4gbGliY3VybCB0byBzZWUgd2hhdCBpcyBoYXBwZW5pbmcgZHVyaW5nIHRoZSB0cmFuc2Zlci4KKyAgICAgKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgICAgLyogc2VuZCB0aGUgbWVzc2FnZSAoaW5jbHVkaW5nIGhlYWRlcnMpICovCisgICAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgICAvKiBmcmVlIHRoZSBsaXN0IG9mIHJlY2lwaWVudHMgYW5kIGNsZWFuIHVwICovCisgICAgY3VybF9zbGlzdF9mcmVlX2FsbChyZWNpcGllbnRzKTsKKyAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc3luY3RpbWUuYyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvc3luY3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGQ3N2RlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy9zeW5jdGltZS5jCkBAIC0wLDAgKzEsMzY2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRoaXMgZXhhbXBsZSBjb2RlIG9ubHkgYnVpbGRzIGFzLWlzIG9uIFdpbmRvd3MuCisgKgorICogV2hpbGUgVW5peC9MaW51eCB1c2VyLCB5b3UgZG8gbm90IG5lZWQgdGhpcyBzb2Z0d2FyZS4KKyAqIFlvdSBjYW4gYWNoaWV2ZSB0aGUgc2FtZSByZXN1bHQgYXMgc3luY3RpbWUgdXNpbmcgY3VybCwgYXdrIGFuZCBkYXRlLgorICogU2V0IHByb3h5IGFzIGFjY29yZGluZyB0byB5b3VyIG5ldHdvcmssIGJ1dCBiZXdhcmUgb2YgcHJveHkgQ2FjaGUtQ29udHJvbC4KKyAqCisgKiBUbyBzZXQgeW91ciBzeXN0ZW0gY2xvY2ssIHJvb3QgYWNjZXNzIGlzIHJlcXVpcmVkLgorICogIyBkYXRlIC1zICJgY3VybCAtc0kgaHR0cDovL25pc3QudGltZS5nb3YvdGltZXpvbmUuY2dpP1VUQy9zLzAgXAorICogICAgICAgIHwgYXdrIC1GJzogJyAnL0RhdGU6IC8ge3ByaW50ICQyfSdgIgorICoKKyAqIFRvIHZpZXcgcmVtb3RlIHdlYnNlcnZlciBkYXRlIGFuZCB0aW1lLgorICogJCBjdXJsIC1zSSBodHRwOi8vbmlzdC50aW1lLmdvdi90aW1lem9uZS5jZ2k/VVRDL3MvMCBcCisgKiAgICAgICAgfCBhd2sgLUYnOiAnICcvRGF0ZTogLyB7cHJpbnQgJDJ9JworICoKKyAqIFN5bmNocm9uaXNpbmcgeW91ciBjb21wdXRlciBjbG9jayB2aWEgSW50ZXJuZXQgdGltZSBzZXJ2ZXIgdXN1YWxseSByZWxpZXMKKyAqIG9uIERBWVRJTUUsIFRJTUUsIG9yIE5UUCBwcm90b2NvbHMuIFRoZXNlIHByb3RvY29scyBwcm92aWRlIGdvb2QgYWNjdXJhdGUKKyAqIHRpbWUgc3luY2hyb25pc2F0aW9uIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIHZlcnkgd2VsbCB0aHJvdWdoIGEKKyAqIGZpcmV3YWxsL3Byb3h5LiBTb21lIGFkanVzdG1lbnQgaGFzIHRvIGJlIG1hZGUgdG8gdGhlIGZpcmV3YWxsL3Byb3h5IGZvcgorICogdGhlc2UgcHJvdG9jb2xzIHRvIHdvcmsgcHJvcGVybHkuCisgKgorICogVGhlcmUgaXMgYW4gaW5kaXJlY3QgbWV0aG9kLiBTaW5jZSBtb3N0IHdlYnNlcnZlciBwcm92aWRlIHNlcnZlciB0aW1lIGluCisgKiB0aGVpciBIVFRQIGhlYWRlciwgdGhlcmVmb3JlIHlvdSBjb3VsZCBzeW5jaHJvbmlzZSB5b3VyIGNvbXB1dGVyIGNsb2NrCisgKiB1c2luZyBIVFRQIHByb3RvY29sIHdoaWNoIGhhcyBubyBwcm9ibGVtIHdpdGggZmlyZXdhbGwvcHJveHkuCisgKgorICogRm9yIHRoaXMgc29mdHdhcmUgdG8gd29yaywgeW91IHNob3VsZCB0YWtlIG5vdGUgb2YgdGhlc2UgaXRlbXMuCisgKiAxLiBZb3VyIGZpcmV3YWxsL3Byb3h5IG11c3QgYWxsb3cgeW91ciBjb21wdXRlciB0byBzdXJmIGludGVybmV0LgorICogMi4gV2Vic2VydmVyIHN5c3RlbSB0aW1lIG11c3QgaW4gc3luYyB3aXRoIHRoZSBOVFAgdGltZSBzZXJ2ZXIsCisgKiAgICBvciBhdCBsZWFzdCBwcm92aWRlIGFuIGFjY3VyYXRlIHRpbWUga2VlcGluZy4KKyAqIDMuIFdlYnNlcnZlciBIVFRQIGhlYWRlciBkb2VzIG5vdCBwcm92aWRlIHRoZSBtaWxsaXNlY29uZHMgdW5pdHMsCisgKiAgICBzbyB0aGVyZSBpcyBubyB3YXkgdG8gZ2V0IHZlcnkgYWNjdXJhdGUgdGltZS4KKyAqIDQuIFRoaXMgc29mdHdhcmUgY291bGQgb25seSBwcm92aWRlIGFuIGFjY3VyYWN5IG9mICstIGEgZmV3IHNlY29uZHMsCisgKiAgICBhcyBSb3VuZC1UcmlwIGRlbGF5IHRpbWUgaXMgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4KKyAqICAgIENvbXBlbnNhdGlvbiBvZiBuZXR3b3JrLCBmaXJld2FsbC9wcm94eSBkZWxheSBjYW5ub3QgYmUgc2ltcGx5IGRpdmlkZQorICogICAgdGhlIFJvdW5kLVRyaXAgZGVsYXkgdGltZSBieSBoYWxmLgorICogNS4gV2luMzIgU2V0U3lzdGVtVGltZSgpIEFQSSB3aWxsIHNldCB5b3VyIGNvbXB1dGVyIGNsb2NrIGFjY29yZGluZyB0bworICogICAgR01UL1VUQyB0aW1lLiBUaGVyZWZvcmUgeW91ciBjb21wdXRlciB0aW1lem9uZSBtdXN0IGJlIHByb3Blcmx5IHNldC4KKyAqIDYuIFdlYnNlcnZlciBkYXRhIHNob3VsZCBub3QgYmUgY2FjaGVkIGJ5IHRoZSBwcm94eSBzZXJ2ZXIuIFNvbWUKKyAqICAgIHdlYnNlcnZlciBwcm92aWRlIENhY2hlLUNvbnRyb2wgdG8gcHJldmVudCBjYWNoaW5nLgorICoKKyAqIFJlZmVyZW5jZXM6CisgKiBodHRwOi8vdGYubmlzdC5nb3YvdGltZWZyZXEvc2VydmljZS9pdHMuaHRtCisgKiBodHRwOi8vdGYubmlzdC5nb3YvdGltZWZyZXEvc2VydmljZS9maXJld2FsbC5odG0KKyAqCisgKiBVc2FnZToKKyAqIFRoaXMgc29mdHdhcmUgd2lsbCBzeW5jaHJvbmlzZSB5b3VyIGNvbXB1dGVyIGNsb2NrIG9ubHkgd2hlbiB5b3UgaXNzdWUKKyAqIGl0IHdpdGggLS1zeW5jdGltZS4gQnkgZGVmYXVsdCwgaXQgb25seSBkaXNwbGF5IHRoZSB3ZWJzZXJ2ZXIncyBjbG9jay4KKyAqCisgKiBXcml0dGVuIGJ5OiBGcmFuayAoY29udHJpYnV0ZWQgdG8gbGliY3VybCkKKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTLUlTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MsIElNUExJRUQgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKKyAqIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9GIFRISVMgU09GVFdBUkUgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCwKKyAqIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywKKyAqIFdIRVRIRVIgT1IgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIERBTUFHRSwgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UKKyAqIE9GIFRISVMgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZm5kZWYgX19DWUdXSU5fXworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisKKyNkZWZpbmUgTUFYX1NUUklORyAgICAgICAgICAgICAgMjU2CisjZGVmaW5lIE1BWF9TVFJJTkcxICAgICAgICAgICAgIE1BWF9TVFJJTkcrMQorCit0eXBlZGVmIHN0cnVjdAoreworICBjaGFyIGh0dHBfcHJveHlbTUFYX1NUUklORzFdOworICBjaGFyIHByb3h5X3VzZXJbTUFYX1NUUklORzFdOworICBjaGFyIHRpbWVzZXJ2ZXJbTUFYX1NUUklORzFdOworfSBjb25mX3Q7CisKK2NvbnN0IGNoYXIgRGVmYXVsdFRpbWVTZXJ2ZXJbNF1bTUFYX1NUUklORzFdID0KK3sKKyAgImh0dHA6Ly9uaXN0LnRpbWUuZ292L3RpbWV6b25lLmNnaT9VVEMvcy8wIiwKKyAgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLAorICAiaHR0cDovL3d3dy53b3JsZHRpbWVzZXJ2ZXIuY29tL2N1cnJlbnRfdGltZV9pbl9VVEMuYXNweCIsCisgICJodHRwOi8vd3d3LndvcmxkdGltZS5jb20vY2dpLWJpbi93dC5jZ2kiCit9OworCitjb25zdCBjaGFyICpEYXlTdHJbXSA9IHsiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0In07Citjb25zdCBjaGFyICpNdGhTdHJbXSA9IHsiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIn07CisKK2ludCAgU2hvd0FsbEhlYWRlcjsKK2ludCAgQXV0b1N5bmNUaW1lOworU1lTVEVNVElNRSBTWVNUaW1lOworU1lTVEVNVElNRSBMT0NBTFRpbWU7CisKKyNkZWZpbmUgSFRUUF9DT01NQU5EX0hFQUQgICAgICAgMAorI2RlZmluZSBIVFRQX0NPTU1BTkRfR0VUICAgICAgICAxCisKKworc2l6ZV90IFN5bmNUaW1lX0NVUkxfV3JpdGVPdXRwdXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtKQoreworICBmd3JpdGUocHRyLCBzaXplLCBubWVtYiwgc3RyZWFtKTsKKyAgcmV0dXJuKG5tZW1iKnNpemUpOworfQorCitzaXplX3QgU3luY1RpbWVfQ1VSTF9Xcml0ZUhlYWRlcih2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdHJlYW0pCit7CisgIGludCAgIGksIFJldFZhbDsKKyAgY2hhciAgVG1wU3RyMVsyNl0sIFRtcFN0cjJbMjZdOworCisgIGlmIChTaG93QWxsSGVhZGVyID09IDEpCisgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIChjaGFyICopKHB0cikpOworCisgIGlmIChzdHJuY21wKChjaGFyICopKHB0ciksICJEYXRlOiIsIDUpID09IDApIHsKKyAgICBpZiAoU2hvd0FsbEhlYWRlciA9PSAwKQorICAgICAgZnByaW50ZihzdGRlcnIsICJIVFRQIFNlcnZlci4gJXMiLCAoY2hhciAqKShwdHIpKTsKKworICAgIGlmIChBdXRvU3luY1RpbWUgPT0gMSkgeworICAgICAgKlRtcFN0cjEgPSAwOworICAgICAgKlRtcFN0cjIgPSAwOworICAgICAgaWYgKHN0cmxlbigoY2hhciAqKShwdHIpKSA+IDUwKSAvKiBDYW4gcHJldmVudCBidWZmZXIgb3ZlcmZsb3cgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wU3RyMSAmIDI/ICovCisgICAgICAgIEF1dG9TeW5jVGltZSA9IDA7CisgICAgICBlbHNlIHsKKyAgICAgICAgUmV0VmFsID0gc3NjYW5mICgoY2hhciAqKShwdHIpLCAiRGF0ZTogJXMgJWh1ICVzICVodSAlaHU6JWh1OiVodSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVG1wU3RyMSwgJlNZU1RpbWUud0RheSwgVG1wU3RyMiwgJlNZU1RpbWUud1llYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJlNZU1RpbWUud0hvdXIsICZTWVNUaW1lLndNaW51dGUsICZTWVNUaW1lLndTZWNvbmQpOworCisgICAgICAgIGlmIChSZXRWYWwgPT0gNykgeworCisgICAgICAgICAgU1lTVGltZS53TWlsbGlzZWNvbmRzID0gNTAwOyAgICAvKiBhZGp1c3QgdG8gbWlkcG9pbnQsIDAuNSBzZWMgKi8KKyAgICAgICAgICBmb3IgKGk9MDsgaTwxMjsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc3RyY21wKE10aFN0cltpXSwgVG1wU3RyMikgPT0gMCkgeworICAgICAgICAgICAgICBTWVNUaW1lLndNb250aCA9IGkrMTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIEF1dG9TeW5jVGltZSA9IDM7ICAgICAgIC8qIENvbXB1dGVyIGNsb2NrIHdpbGwgYmUgYWRqdXN0ZWQgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBBdXRvU3luY1RpbWUgPSAwOyAgICAgICAvKiBFcnJvciBpbiBzc2NhbmYoKSBmaWVsZHMgY29udmVyc2lvbiAqLworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHN0cm5jbXAoKGNoYXIgKikocHRyKSwgIlgtQ2FjaGU6IEhJVCIsIDEyKSA9PSAwKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogSFRUUCBTZXJ2ZXIgZGF0YSBpcyBjYWNoZWQuIgorICAgICAgICAgICAgIiBTZXJ2ZXIgRGF0ZSBpcyBubyBsb25nZXIgdmFsaWQuXG4iKTsKKyAgICBBdXRvU3luY1RpbWUgPSAwOworICB9CisgIHJldHVybihubWVtYipzaXplKTsKK30KKwordm9pZCBTeW5jVGltZV9DVVJMX0luaXQoQ1VSTCAqY3VybCwgY2hhciAqcHJveHlfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnByb3h5X3VzZXJfcGFzc3dvcmQpCit7CisgIGlmIChzdHJsZW4ocHJveHlfcG9ydCkgPiAwKQorICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QUk9YWSwgcHJveHlfcG9ydCk7CisKKyAgaWYgKHN0cmxlbihwcm94eV91c2VyX3Bhc3N3b3JkKSA+IDApCisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST1hZVVNFUlBXRCwgcHJveHlfdXNlcl9wYXNzd29yZCk7CisKKyAgLyogVHJpY2sgV2Vic2VydmVyIGJ5IGNsYWltaW5nIHRoYXQgeW91IGFyZSB1c2luZyBNaWNyb3NvZnQgV2luWFAgU1AyLCBJRTYgKi8KKyAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VTRVJBR0VOVCwKKyAgICAgICAgICAgICAgICAgICAiTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgU1YxKSIpOworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgKlN5bmNUaW1lX0NVUkxfV3JpdGVPdXRwdXQpOworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSRlVOQ1RJT04sICpTeW5jVGltZV9DVVJMX1dyaXRlSGVhZGVyKTsKK30KKworaW50IFN5bmNUaW1lX0NVUkxfRmV0Y2goQ1VSTCAqY3VybCwgY2hhciAqVVJMX1N0ciwgY2hhciAqT3V0RmlsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgSHR0cEdldEJvZHkpCit7CisgIEZJTEUgKm91dGZpbGU7CisgIENVUkxjb2RlIHJlczsKKworICBvdXRmaWxlID0gTlVMTDsKKyAgaWYgKEh0dHBHZXRCb2R5ID09IEhUVFBfQ09NTUFORF9IRUFEKQorICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9OT0JPRFksIDFMKTsKKyAgZWxzZSB7CisgICAgb3V0ZmlsZSA9IGZvcGVuKE91dEZpbGVOYW1lLCAid2IiKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVEQVRBLCBvdXRmaWxlKTsKKyAgfQorCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTF9TdHIpOworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKyAgaWYgKG91dGZpbGUgIT0gTlVMTCkKKyAgICBmY2xvc2Uob3V0ZmlsZSk7CisgIHJldHVybiByZXM7ICAvKiAoQ1VSTEVfT0spICovCit9CisKK3ZvaWQgc2hvd1VzYWdlKHZvaWQpCit7CisgIGZwcmludGYoc3RkZXJyLCAiU1lOQ1RJTUU6IFN5bmNocm9uaXNpbmcgY29tcHV0ZXIgY2xvY2sgd2l0aCB0aW1lIHNlcnZlciIKKyAgICAgICAgICAiIHVzaW5nIEhUVFAgcHJvdG9jb2wuXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICJVc2FnZSAgIDogU1lOQ1RJTUUgW09wdGlvbl1cbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIk9wdGlvbnMgOlxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiIC0tc2VydmVyPVdFQlNFUlZFUiAgICAgICAgVXNlIHRoaXMgdGltZSBzZXJ2ZXIgaW5zdGVhZCIKKyAgICAgICAgICAiIG9mIGRlZmF1bHQuXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICIgLS1zaG93YWxsICAgICAgICAgICAgICAgICBTaG93IGFsbCBIVFRQIGhlYWRlci5cbiIpOworICBmcHJpbnRmKHN0ZGVyciwgIiAtLXN5bmN0aW1lICAgICAgICAgICAgICAgIFN5bmNocm9uaXNpbmcgY29tcHV0ZXIgY2xvY2siCisgICAgICAgICAgIiB3aXRoIHRpbWUgc2VydmVyLlxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiIC0tcHJveHktdXNlcj1VU0VSWzpQQVNTXSAgU2V0IHByb3h5IHVzZXJuYW1lIGFuZCIKKyAgICAgICAgICAiIHBhc3N3b3JkLlxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiIC0tcHJveHk9SE9TVFs6UE9SVF0gICAgICAgVXNlIEhUVFAgcHJveHkgb24gZ2l2ZW4iCisgICAgICAgICAgIiBwb3J0LlxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiIC0taGVscCAgICAgICAgICAgICAgICAgICAgUHJpbnQgdGhpcyBoZWxwLlxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgcmV0dXJuOworfQorCitpbnQgY29uZl9pbml0KGNvbmZfdCAqY29uZikKK3sKKyAgaW50IGk7CisKKyAgKmNvbmYtPmh0dHBfcHJveHkgICAgICAgPSAwOworICBmb3IgKGk9MDsgaTxNQVhfU1RSSU5HMTsgaSsrKQorICAgIGNvbmYtPnByb3h5X3VzZXJbaV0gICAgID0gMDsgICAgLyogQ2xlYW4gdXAgcGFzc3dvcmQgZnJvbSBtZW1vcnkgKi8KKyAgKmNvbmYtPnRpbWVzZXJ2ZXIgICAgICAgPSAwOworICByZXR1cm4gMTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgQ1VSTCAgICAqY3VybDsKKyAgY29uZl90ICBjb25mWzFdOworICBpbnQgICAgIE9wdGlvbkluZGV4OworICBzdHJ1Y3QgIHRtICpsdDsKKyAgc3RydWN0ICB0bSAqZ210OworICB0aW1lX3QgIHR0OworICB0aW1lX3QgIHR0X2xvY2FsOworICB0aW1lX3QgIHR0X2dtdDsKKyAgZG91YmxlICB0em9uZWRpZmZGbG9hdDsKKyAgaW50ICAgICB0em9uZWRpZmZXb3JkOworICBjaGFyICAgIHRpbWVCdWZbNjFdOworICBjaGFyICAgIHR6b25lQnVmWzE2XTsKKyAgaW50ICAgICBSZXRWYWx1ZTsKKworICBPcHRpb25JbmRleCAgICAgPSAwOworICBTaG93QWxsSGVhZGVyICAgPSAwOyAgICAvKiBEbyBub3Qgc2hvdyBIVFRQIEhlYWRlciAqLworICBBdXRvU3luY1RpbWUgICAgPSAwOyAgICAvKiBEbyBub3Qgc3luY2hyb25pc2UgY29tcHV0ZXIgY2xvY2sgKi8KKyAgUmV0VmFsdWUgICAgICAgID0gMDsgICAgLyogU3VjY2Vzc2Z1bCBFeGl0ICovCisgIGNvbmZfaW5pdChjb25mKTsKKworICBpZiAoYXJnYyA+IDEpIHsKKyAgICB3aGlsZSAoT3B0aW9uSW5kZXggPCBhcmdjKSB7CisgICAgICBpZiAoc3RybmNtcChhcmd2W09wdGlvbkluZGV4XSwgIi0tc2VydmVyPSIsIDkpID09IDApCisgICAgICAgIHNucHJpbnRmKGNvbmYtPnRpbWVzZXJ2ZXIsIE1BWF9TVFJJTkcsICIlcyIsICZhcmd2W09wdGlvbkluZGV4XVs5XSk7CisKKyAgICAgIGlmIChzdHJjbXAoYXJndltPcHRpb25JbmRleF0sICItLXNob3dhbGwiKSA9PSAwKQorICAgICAgICBTaG93QWxsSGVhZGVyID0gMTsKKworICAgICAgaWYgKHN0cmNtcChhcmd2W09wdGlvbkluZGV4XSwgIi0tc3luY3RpbWUiKSA9PSAwKQorICAgICAgICBBdXRvU3luY1RpbWUgPSAxOworCisgICAgICBpZiAoc3RybmNtcChhcmd2W09wdGlvbkluZGV4XSwgIi0tcHJveHktdXNlcj0iLCAxMykgPT0gMCkKKyAgICAgICAgc25wcmludGYoY29uZi0+cHJveHlfdXNlciwgTUFYX1NUUklORywgIiVzIiwgJmFyZ3ZbT3B0aW9uSW5kZXhdWzEzXSk7CisKKyAgICAgIGlmIChzdHJuY21wKGFyZ3ZbT3B0aW9uSW5kZXhdLCAiLS1wcm94eT0iLCA4KSA9PSAwKQorICAgICAgICBzbnByaW50Zihjb25mLT5odHRwX3Byb3h5LCBNQVhfU1RSSU5HLCAiJXMiLCAmYXJndltPcHRpb25JbmRleF1bOF0pOworCisgICAgICBpZiAoKHN0cmNtcChhcmd2W09wdGlvbkluZGV4XSwgIi0taGVscCIpID09IDApIHx8CisgICAgICAgICAgKHN0cmNtcChhcmd2W09wdGlvbkluZGV4XSwgIi8/IikgPT0gMCkpIHsKKyAgICAgICAgc2hvd1VzYWdlKCk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgT3B0aW9uSW5kZXgrKzsKKyAgICB9CisgIH0KKworICBpZiAoKmNvbmYtPnRpbWVzZXJ2ZXIgPT0gMCkgICAgIC8qIFVzZSBkZWZhdWx0IHNlcnZlciBmb3IgdGltZSBpbmZvcm1hdGlvbiAqLworICAgIHNucHJpbnRmKGNvbmYtPnRpbWVzZXJ2ZXIsIE1BWF9TVFJJTkcsICIlcyIsIERlZmF1bHRUaW1lU2VydmVyWzBdKTsKKworICAvKiBJbml0IENVUkwgYmVmb3JlIHVzYWdlICovCisgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKyAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmIChjdXJsKSB7CisgICAgU3luY1RpbWVfQ1VSTF9Jbml0KGN1cmwsIGNvbmYtPmh0dHBfcHJveHksIGNvbmYtPnByb3h5X3VzZXIpOworCisgICAgLyogQ2FsY3VsYXRpbmcgdGltZSBkaWZmIGJldHdlZW4gR01UIGFuZCBsb2NhbHRpbWUgKi8KKyAgICB0dCAgICAgICA9IHRpbWUoMCk7CisgICAgbHQgICAgICAgPSBsb2NhbHRpbWUoJnR0KTsKKyAgICB0dF9sb2NhbCA9IG1rdGltZShsdCk7CisgICAgZ210ICAgICAgPSBnbXRpbWUoJnR0KTsKKyAgICB0dF9nbXQgICA9IG1rdGltZShnbXQpOworICAgIHR6b25lZGlmZkZsb2F0ID0gZGlmZnRpbWUodHRfbG9jYWwsIHR0X2dtdCk7CisgICAgdHpvbmVkaWZmV29yZCAgPSAoaW50KSh0em9uZWRpZmZGbG9hdC8zNjAwLjApOworCisgICAgaWYgKChkb3VibGUpKHR6b25lZGlmZldvcmQgKiAzNjAwKSA9PSB0em9uZWRpZmZGbG9hdCkKKyAgICAgIHNucHJpbnRmKHR6b25lQnVmLCAxNSwgIiUrMDNkJzAwJyIsIHR6b25lZGlmZldvcmQpOworICAgIGVsc2UKKyAgICAgIHNucHJpbnRmKHR6b25lQnVmLCAxNSwgIiUrMDNkJzMwJyIsIHR6b25lZGlmZldvcmQpOworCisgICAgLyogR2V0IGN1cnJlbnQgc3lzdGVtIHRpbWUgYW5kIGxvY2FsIHRpbWUgKi8KKyAgICBHZXRTeXN0ZW1UaW1lKCZTWVNUaW1lKTsKKyAgICBHZXRMb2NhbFRpbWUoJkxPQ0FMVGltZSk7CisgICAgc25wcmludGYodGltZUJ1ZiwgNjAsICIlcywgJTAyZCAlcyAlMDRkICUwMmQ6JTAyZDolMDJkLiUwM2QsICIsCisgICAgICAgICAgICAgRGF5U3RyW0xPQ0FMVGltZS53RGF5T2ZXZWVrXSwgTE9DQUxUaW1lLndEYXksCisgICAgICAgICAgICAgTXRoU3RyW0xPQ0FMVGltZS53TW9udGgtMV0sIExPQ0FMVGltZS53WWVhciwKKyAgICAgICAgICAgICBMT0NBTFRpbWUud0hvdXIsIExPQ0FMVGltZS53TWludXRlLCBMT0NBTFRpbWUud1NlY29uZCwKKyAgICAgICAgICAgICBMT0NBTFRpbWUud01pbGxpc2Vjb25kcyk7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZldGNoOiAlc1xuXG4iLCBjb25mLT50aW1lc2VydmVyKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkJlZm9yZSBIVFRQLiBEYXRlOiAlcyVzXG5cbiIsIHRpbWVCdWYsIHR6b25lQnVmKTsKKworICAgIC8qIEhUVFAgSEVBRCBjb21tYW5kIHRvIHRoZSBXZWJzZXJ2ZXIgKi8KKyAgICBTeW5jVGltZV9DVVJMX0ZldGNoKGN1cmwsIGNvbmYtPnRpbWVzZXJ2ZXIsICJpbmRleC5odG0iLAorICAgICAgICAgICAgICAgICAgICAgICAgSFRUUF9DT01NQU5EX0hFQUQpOworCisgICAgR2V0TG9jYWxUaW1lKCZMT0NBTFRpbWUpOworICAgIHNucHJpbnRmKHRpbWVCdWYsIDYwLCAiJXMsICUwMmQgJXMgJTA0ZCAlMDJkOiUwMmQ6JTAyZC4lMDNkLCAiLAorICAgICAgICAgICAgIERheVN0cltMT0NBTFRpbWUud0RheU9mV2Vla10sIExPQ0FMVGltZS53RGF5LAorICAgICAgICAgICAgIE10aFN0cltMT0NBTFRpbWUud01vbnRoLTFdLCBMT0NBTFRpbWUud1llYXIsCisgICAgICAgICAgICAgTE9DQUxUaW1lLndIb3VyLCBMT0NBTFRpbWUud01pbnV0ZSwgTE9DQUxUaW1lLndTZWNvbmQsCisgICAgICAgICAgICAgTE9DQUxUaW1lLndNaWxsaXNlY29uZHMpOworICAgIGZwcmludGYoc3RkZXJyLCAiXG5BZnRlciAgSFRUUC4gRGF0ZTogJXMlc1xuIiwgdGltZUJ1ZiwgdHpvbmVCdWYpOworCisgICAgaWYgKEF1dG9TeW5jVGltZSA9PSAzKSB7CisgICAgICAvKiBTeW5jaHJvbmlzaW5nIGNvbXB1dGVyIGNsb2NrICovCisgICAgICBpZiAoIVNldFN5c3RlbVRpbWUoJlNZU1RpbWUpKSB7ICAvKiBTZXQgc3lzdGVtIHRpbWUgKi8KKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW5hYmxlIHRvIHNldCBzeXN0ZW0gdGltZS5cbiIpOworICAgICAgICBSZXRWYWx1ZSA9IDE7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogU3VjY2Vzc2Z1bGx5IHJlLWFkanVzdGVkIGNvbXB1dGVyIGNsb2NrICovCisgICAgICAgIEdldExvY2FsVGltZSgmTE9DQUxUaW1lKTsKKyAgICAgICAgc25wcmludGYodGltZUJ1ZiwgNjAsICIlcywgJTAyZCAlcyAlMDRkICUwMmQ6JTAyZDolMDJkLiUwM2QsICIsCisgICAgICAgICAgICAgICAgIERheVN0cltMT0NBTFRpbWUud0RheU9mV2Vla10sIExPQ0FMVGltZS53RGF5LAorICAgICAgICAgICAgICAgICBNdGhTdHJbTE9DQUxUaW1lLndNb250aC0xXSwgTE9DQUxUaW1lLndZZWFyLAorICAgICAgICAgICAgICAgICBMT0NBTFRpbWUud0hvdXIsIExPQ0FMVGltZS53TWludXRlLCBMT0NBTFRpbWUud1NlY29uZCwKKyAgICAgICAgICAgICAgICAgTE9DQUxUaW1lLndNaWxsaXNlY29uZHMpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuTmV3IFN5c3RlbSdzIERhdGU6ICVzJXNcbiIsIHRpbWVCdWYsIHR6b25lQnVmKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDbGVhbnVwIGJlZm9yZSBleGl0ICovCisgICAgY29uZl9pbml0KGNvbmYpOworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICB9CisgIHJldHVybiBSZXRWYWx1ZTsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvdGhyZWFkZWQtc3NsLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3RocmVhZGVkLXNzbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZTljMmQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3RocmVhZGVkLXNzbC5jCkBAIC0wLDAgKzEsMTYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEEgbXVsdGktdGhyZWFkZWQgZXhhbXBsZSB0aGF0IHVzZXMgcHRocmVhZHMgYW5kIGZldGNoZXMgNCByZW1vdGUgZmlsZXMgYXQKKyAqIG9uY2Ugb3ZlciBIVFRQUy4gVGhlIGxvY2sgY2FsbGJhY2tzIGFuZCBzdHVmZiBhc3N1bWUgT3BlblNTTCBvciBHbnVUTFMKKyAqIChsaWJnY3J5cHQpIHNvIGZhci4KKyAqCisgKiBPcGVuU1NMIGRvY3MgZm9yIHRoaXM6CisgKiAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9jcnlwdG8vdGhyZWFkcy5odG1sCisgKiBnY3J5cHQgZG9jcyBmb3IgdGhpczoKKyAqICAgaHR0cDovL2dudXBnLm9yZy9kb2N1bWVudGF0aW9uL21hbnVhbHMvZ2NyeXB0L011bHRpXzAwMmRUaHJlYWRpbmcuaHRtbAorICovCisKKyNkZWZpbmUgVVNFX09QRU5TU0wgLyogb3IgVVNFX0dOVVRMUyBhY2NvcmRpbmdseSAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNkZWZpbmUgTlVNVCA0CisKKy8qIHdlIGhhdmUgdGhpcyBnbG9iYWwgdG8gbGV0IHRoZSBjYWxsYmFjayBnZXQgZWFzeSBhY2Nlc3MgdG8gaXQgKi8KK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgKmxvY2thcnJheTsKKworI2lmZGVmIFVTRV9PUEVOU1NMCisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KK3N0YXRpYyB2b2lkIGxvY2tfY2FsbGJhY2soaW50IG1vZGUsIGludCB0eXBlLCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKyAgKHZvaWQpZmlsZTsKKyAgKHZvaWQpbGluZTsKKyAgaWYgKG1vZGUgJiBDUllQVE9fTE9DSykgeworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmKGxvY2thcnJheVt0eXBlXSkpOworICB9CisgIGVsc2UgeworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYobG9ja2FycmF5W3R5cGVdKSk7CisgIH0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGhyZWFkX2lkKHZvaWQpCit7CisgIHVuc2lnbmVkIGxvbmcgcmV0OworCisgIHJldD0odW5zaWduZWQgbG9uZylwdGhyZWFkX3NlbGYoKTsKKyAgcmV0dXJuKHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfbG9ja3Modm9pZCkKK3sKKyAgaW50IGk7CisKKyAgbG9ja2FycmF5PShwdGhyZWFkX211dGV4X3QgKilPUEVOU1NMX21hbGxvYyhDUllQVE9fbnVtX2xvY2tzKCkgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocHRocmVhZF9tdXRleF90KSk7CisgIGZvciAoaT0wOyBpPENSWVBUT19udW1fbG9ja3MoKTsgaSsrKSB7CisgICAgcHRocmVhZF9tdXRleF9pbml0KCYobG9ja2FycmF5W2ldKSxOVUxMKTsKKyAgfQorCisgIENSWVBUT19zZXRfaWRfY2FsbGJhY2soKHVuc2lnbmVkIGxvbmcgKCopKCkpdGhyZWFkX2lkKTsKKyAgQ1JZUFRPX3NldF9sb2NraW5nX2NhbGxiYWNrKCh2b2lkICgqKSgpKWxvY2tfY2FsbGJhY2spOworfQorCitzdGF0aWMgdm9pZCBraWxsX2xvY2tzKHZvaWQpCit7CisgIGludCBpOworCisgIENSWVBUT19zZXRfbG9ja2luZ19jYWxsYmFjayhOVUxMKTsKKyAgZm9yIChpPTA7IGk8Q1JZUFRPX251bV9sb2NrcygpOyBpKyspCisgICAgcHRocmVhZF9tdXRleF9kZXN0cm95KCYobG9ja2FycmF5W2ldKSk7CisKKyAgT1BFTlNTTF9mcmVlKGxvY2thcnJheSk7Cit9CisjZW5kaWYKKworI2lmZGVmIFVTRV9HTlVUTFMKKyNpbmNsdWRlIDxnY3J5cHQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCitHQ1JZX1RIUkVBRF9PUFRJT05fUFRIUkVBRF9JTVBMOworCit2b2lkIGluaXRfbG9ja3Modm9pZCkKK3sKKyAgZ2NyeV9jb250cm9sKEdDUllDVExfU0VUX1RIUkVBRF9DQlMpOworfQorCisjZGVmaW5lIGtpbGxfbG9ja3MoKQorI2VuZGlmCisKKy8qIExpc3Qgb2YgVVJMcyB0byBmZXRjaC4qLworY29uc3QgY2hhciAqIGNvbnN0IHVybHNbXT0geworICAiaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20vIiwKKyAgImh0dHBzOi8vd3d3Mi5leGFtcGxlLmNvbS8iLAorICAiaHR0cHM6Ly93d3czLmV4YW1wbGUuY29tLyIsCisgICJodHRwczovL3d3dzQuZXhhbXBsZS5jb20vIiwKK307CisKK3N0YXRpYyB2b2lkICpwdWxsX29uZV91cmwodm9pZCAqdXJsKQoreworICBDVVJMICpjdXJsOworCisgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworICAvKiB0aGlzIGV4YW1wbGUgZG9lc24ndCB2ZXJpZnkgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlLCB3aGljaCBtZWFucyB3ZQorICAgICBtaWdodCBiZSBkb3dubG9hZGluZyBzdHVmZiBmcm9tIGFuIGltcG9zdG9yICovCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMEwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDBMKTsKKyAgY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7IC8qIGlnbm9yZXMgZXJyb3IgKi8KKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgcHRocmVhZF90IHRpZFtOVU1UXTsKKyAgaW50IGk7CisgIGludCBlcnJvcjsKKyAgKHZvaWQpYXJnYzsgLyogd2UgZG9uJ3QgdXNlIGFueSBhcmd1bWVudHMgaW4gdGhpcyBleGFtcGxlICovCisgICh2b2lkKWFyZ3Y7CisKKyAgLyogTXVzdCBpbml0aWFsaXplIGxpYmN1cmwgYmVmb3JlIGFueSB0aHJlYWRzIGFyZSBzdGFydGVkICovCisgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKworICBpbml0X2xvY2tzKCk7CisKKyAgZm9yKGk9MDsgaTwgTlVNVDsgaSsrKSB7CisgICAgZXJyb3IgPSBwdGhyZWFkX2NyZWF0ZSgmdGlkW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogZGVmYXVsdCBhdHRyaWJ1dGVzIHBsZWFzZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVsbF9vbmVfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKil1cmxzW2ldKTsKKyAgICBpZigwICE9IGVycm9yKQorICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBydW4gdGhyZWFkIG51bWJlciAlZCwgZXJybm8gJWRcbiIsIGksIGVycm9yKTsKKyAgICBlbHNlCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRocmVhZCAlZCwgZ2V0cyAlc1xuIiwgaSwgdXJsc1tpXSk7CisgIH0KKworICAvKiBub3cgd2FpdCBmb3IgYWxsIHRocmVhZHMgdG8gdGVybWluYXRlICovCisgIGZvcihpPTA7IGk8IE5VTVQ7IGkrKykgeworICAgIGVycm9yID0gcHRocmVhZF9qb2luKHRpZFtpXSwgTlVMTCk7CisgICAgZnByaW50ZihzdGRlcnIsICJUaHJlYWQgJWQgdGVybWluYXRlZFxuIiwgaSk7CisgIH0KKworICBraWxsX2xvY2tzKCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3VybDJmaWxlLmMgYi9jdXJsLTcuMjUuMC9kb2NzL2V4YW1wbGVzL3VybDJmaWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRkMjdjOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvdXJsMmZpbGUuYwpAQCAtMCwwICsxLDgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK3N0YXRpYyBzaXplX3Qgd3JpdGVfZGF0YSh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnN0cmVhbSkKK3sKKyAgc2l6ZV90IHdyaXR0ZW4gPSBmd3JpdGUocHRyLCBzaXplLCBubWVtYiwgKEZJTEUgKilzdHJlYW0pOworICByZXR1cm4gd3JpdHRlbjsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgQ1VSTCAqY3VybF9oYW5kbGU7CisgIHN0YXRpYyBjb25zdCBjaGFyICpwYWdlZmlsZW5hbWUgPSAicGFnZS5vdXQiOworICBGSUxFICpwYWdlZmlsZTsKKworICBpZihhcmdjIDwgMiApIHsKKyAgICBwcmludGYoIlVzYWdlOiAlcyA8VVJMPlxuIiwgYXJndlswXSk7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisKKyAgLyogaW5pdCB0aGUgY3VybCBzZXNzaW9uICovCisgIGN1cmxfaGFuZGxlID0gY3VybF9lYXN5X2luaXQoKTsKKworICAvKiBzZXQgVVJMIHRvIGdldCBoZXJlICovCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybF9oYW5kbGUsIENVUkxPUFRfVVJMLCBhcmd2WzFdKTsKKworICAvKiBTd2l0Y2ggb24gZnVsbCBwcm90b2NvbC9kZWJ1ZyBvdXRwdXQgd2hpbGUgdGVzdGluZyAqLworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxfaGFuZGxlLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICAvKiBkaXNhYmxlIHByb2dyZXNzIG1ldGVyLCBzZXQgdG8gMEwgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIGRlYnVnIG91dHB1dCAqLworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxfaGFuZGxlLCBDVVJMT1BUX05PUFJPR1JFU1MsIDFMKTsKKworICAvKiBzZW5kIGFsbCBkYXRhIHRvIHRoaXMgZnVuY3Rpb24gICovCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybF9oYW5kbGUsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgd3JpdGVfZGF0YSk7CisKKyAgLyogb3BlbiB0aGUgZmlsZSAqLworICBwYWdlZmlsZSA9IGZvcGVuKHBhZ2VmaWxlbmFtZSwgIndiIik7CisgIGlmIChwYWdlZmlsZSkgeworCisgICAgLyogd3JpdGUgdGhlIHBhZ2UgYm9keSB0byB0aGlzIGZpbGUgaGFuZGxlLiBDVVJMT1BUX0ZJTEUgaXMgYWxzbyBrbm93biBhcworICAgICAgIENVUkxPUFRfV1JJVEVEQVRBKi8KKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxfaGFuZGxlLCBDVVJMT1BUX0ZJTEUsIHBhZ2VmaWxlKTsKKworICAgIC8qIGdldCBpdCEgKi8KKyAgICBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsX2hhbmRsZSk7CisKKyAgICAvKiBjbG9zZSB0aGUgaGVhZGVyIGZpbGUgKi8KKyAgICBmY2xvc2UocGFnZWZpbGUpOworICB9CisKKyAgLyogY2xlYW51cCBjdXJsIHN0dWZmICovCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmxfaGFuZGxlKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvdmVyc2lvbi1jaGVjay5wbCBiL2N1cmwtNy4yNS4wL2RvY3MvZXhhbXBsZXMvdmVyc2lvbi1jaGVjay5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MmYwODA4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9leGFtcGxlcy92ZXJzaW9uLWNoZWNrLnBsCkBAIC0wLDAgKzEsMTA1IEBACisjIS91c3IvYmluL2VudiBwZXJsCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIHNjcmlwdCBhY2NlcHRzIGEgc291cmNlIGZpbGUgYXMgaW5wdXQgb24gdGhlIGNvbW1hbmQgbGluZS4KKyMKKyMgSXQgZmlyc3QgbG9hZHMgdGhlICdzeW1ib2xzLWluLXZlcnNpb25zJyBkb2N1bWVudCBhbmQgc3RvcmVzIGEgbG9va3VwCisjIHRhYmxlIGZvciBhbGwga25vd24gc3ltYm9scyBmb3Igd2hpY2ggdmVyc2lvbiB0aGV5IHdlcmUgaW50cm9kdWNlZC4KKyMKKyMgSXQgdGhlbiBzY2FucyB0aGUgZ2l2ZW4gc291cmNlIGZpbGUgdG8gZGlnIHVwIGFsbCBzeW1ib2xzIHN0YXJ0aW5nIHdpdGggQ1VSTC4KKyMgRmluYWxseSwgaXQgc29ydHMgdGhlIGludGVybmFsIGxpc3Qgb2YgZm91bmQgc3ltYm9scyAodXNpbmcgdGhlIHZlcnNpb24KKyMgbnVtYmVyIGFzIHNvcnQga2V5KSBhbmQgdGhlbiBpdCBvdXRwdXRzIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG51bWJlciBhbmQKKyMgdGhlIHN5bWJvbHMgZnJvbSB0aGF0IHZlcnNpb24gdGhhdCBhcmUgdXNlZC4KKyMKKyMgVXNhZ2U6CisjCisjICAgIHZlcnNpb24tY2hlY2sucGwgW3NvdXJjZSBmaWxlXQorIworCitvcGVuKFMsICI8Li4vbGliY3VybC9zeW1ib2xzLWluLXZlcnNpb25zIikgfHwgZGllOworCitteSAlZG9jOworbXkgJXJlbTsKK3doaWxlKDxTPikgeworICAgIGlmKC8oXkNVUkxbXiBcbl0qKSAqKC4qKS8pIHsKKyAgICAgICAgbXkgKCRzeW0sICRyZXN0KT0oJDEsICQyKTsKKyAgICAgICAgbXkgQGE9c3BsaXQoLyArLywgJHJlc3QpOworCisgICAgICAgICRkb2N7JHN5bX09JGFbMF07ICMgd2hlbiBpdCB3YXMgaW50cm9kdWNlZAorCisgICAgICAgIGlmKCRhWzJdKSB7CisgICAgICAgICAgICAjIHRoaXMgc3ltYm9sIGlzIGRvY3VtZW50ZWQgdG8gaGF2ZSBiZWVuIHByZXNlbnQgdGhlIGxhc3QgdGltZQorICAgICAgICAgICAgIyBpbiB0aGlzIHJlbGVhc2UKKyAgICAgICAgICAgICRyZW17JHN5bX09JGFbMl07CisgICAgICAgIH0KKyAgICB9CisKK30KKworY2xvc2UoUyk7CisKK3N1YiBhZ2UgeworICAgIG15ICgkdmVyKT1AXzsKKworICAgIG15IEBzPXNwbGl0KC9cLi8sICR2ZXIpOworICAgIHJldHVybiAkc1swXSoxMDAwMCskc1sxXSoxMDArJHNbMl07Cit9CisKK215ICV1c2VkOworb3BlbihDLCAiPCRBUkdWWzBdIikgfHwgZGllOworCit3aGlsZSg8Qz4pIHsKKyAgICBpZigvXFcoQ1VSTFtfQS1aMC05dl0rKVxXLykgeworICAgICAgICAjcHJpbnQgIiQxXG4iOworICAgICAgICAkdXNlZHskMX0rKzsKKyAgICB9Cit9CisKK2Nsb3NlKEMpOworCitzdWIgc29ydHZlcnNpb25zIHsKKyAgICBteSAkciA9IGFnZSgkZG9jeyRhfSkgPD0+IGFnZSgkZG9jeyRifSk7CisgICAgaWYoISRyKSB7CisgICAgICAgICRyID0gJGEgY21wICRiOworICAgIH0KKyAgICByZXR1cm4gJHI7Cit9CisKK215IEByZWNlbnQgPSByZXZlcnNlIHNvcnQgc29ydHZlcnNpb25zIGtleXMgJXVzZWQ7CisKKyMgdGhlIG1vc3QgcmVjZW50IHN5bWJvbAorbXkgJG5ld3N5bSA9ICRyZWNlbnRbMF07CisjIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uCitteSAkbmV3dmVyID0gJGRvY3skbmV3c3ltfTsKKworcHJpbnQgIlRoZSBzY2FubmVkIHNvdXJjZSB1c2VzIHRoZXNlIHN5bWJvbHMgaW50cm9kdWNlZCBpbiAkbmV3dmVyOlxuIjsKKworZm9yIG15ICR3IChAcmVjZW50KSB7CisgICAgaWYoJGRvY3skd30gZXEgJG5ld3ZlcikgeworICAgICAgICBwcmludGYgIiAgJHdcbiI7CisgICAgICAgIG5leHQ7CisgICAgfQorICAgIGxhc3Q7Cit9CisKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9pbmRleC5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOTAzNzgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkluZGV4IHRvIEN1cmwgZG9jdW1lbnRhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxIGFsaWduPSJjZW50ZXIiPkluZGV4IHRvIEN1cmwgZG9jdW1lbnRhdGlvbjwvaDE+CisKKzxoMj5Qcm9ncmFtczwvaDI+Cis8YSBocmVmPSJjdXJsLWNvbmZpZy5odG1sIj5jdXJsLWNvbmZpZzwvQT4KKzxicj48YSBocmVmPSJjdXJsLmh0bWwiPmN1cmw8L0E+CisKKzxoMj5UdXRvcmlhbDwvaDI+Cis8YSBocmVmPSJUaGVBcnRPZkh0dHBTY3JpcHRpbmciPlRoZSBBcnQgT2YgU2NyaXB0aW5nIEhUVFAgUmVxdWVzdHMgVXNpbmcgQ3VybDwvYT4gKHBsYWluIHRleHQpCisKKzxoMj5saWJjdXJsPC9oMj4KK1NlZSB0aGUgPGEgaHJlZj0ibGliY3VybC9pbmRleC5odG1sIj5saWJjdXJsIHNlY3Rpb248L2E+CisKKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvQUJJIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL0FCSQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWMwZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL0FCSQpAQCAtMCwwICsxLDY5IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYmN1cmwncyBiaW5hcnkgaW50ZXJmYWNlCisKK0FCSSAtIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UKKworICBGaXJzdCwgYWxsb3cgbWUgdG8gZGVmaW5lIHRoZSB3b3JkIGZvciB0aGlzIGNvbnRleHQ6IEFCSSBkZXNjcmliZXMgdGhlCisgIGxvdy1sZXZlbCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIGFuZCBhIGxpYnJhcnkuIENhbGxpbmcKKyAgY29udmVudGlvbnMsIGZ1bmN0aW9uIGFyZ3VtZW50cywgcmV0dXJuIHZhbHVlcywgc3RydWN0IHNpemVzL2RlZmluZXMgYW5kCisgIG1vcmUuCisKKyAgRm9yIGEgbG9uZ2VyIGRlc2NyaXB0aW9uLCBzZWUKKyAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BcHBsaWNhdGlvbl9iaW5hcnlfaW50ZXJmYWNlCisKK1VwZ3JhZGVzCisKKyAgSW4gdGhlIHZhc3QgbWFqb3JpdHkgb2YgYWxsIGNhc2VzLCBhIHR5cGljYWwgbGliY3VybCB1cGdyYWRlIGRvZXMgbm90IGJyZWFrCisgIHRoZSBBQkkgYXQgYWxsLiBZb3VyIGFwcGxpY2F0aW9uIGNhbiByZW1haW4gdXNpbmcgbGliY3VybCBqdXN0IGFzIGJlZm9yZSwKKyAgb25seSB3aXRoIGxlc3MgYnVncyBhbmQgcG9zc2libHkgd2l0aCBhZGRlZCBuZXcgZmVhdHVyZXMuIFlvdSBuZWVkIHRvIHJlYWQKKyAgdGhlIHJlbGVhc2Ugbm90ZXMsIGFuZCBpZiB0aGV5IG1lbnRpb24gYW4gQUJJIGJyZWFrL3NvbmFtZSBidW1wLCB5b3UgbWF5CisgIGhhdmUgdG8gdmVyaWZ5IHRoYXQgeW91ciBhcHBsaWNhdGlvbiBzdGlsbCBidWlsZHMgZmluZSBhbmQgdXNlcyBsaWJjdXJsIGFzCisgIGl0IG5vdyBpcyBkZWZpbmVkIHRvIHdvcmsuCisKK1ZlcnNpb24gTnVtYmVycworCisgIEluIGxpYmN1cmwgbGFuZCwgeW91IHJlYWxseSBjYW4ndCB0ZWxsIGJ5IHRoZSBsaWJjdXJsIHZlcnNpb24gbnVtYmVyIGlmIHRoYXQKKyAgbGliY3VybCBpcyBiaW5hcnkgY29tcGF0aWJsZSBvciBub3Qgd2l0aCBhbm90aGVyIGxpYmN1cmwgdmVyc2lvbi4KKworU29uYW1lIEJ1bXBzCisKKyAgV2hlbmV2ZXIgdGhlcmUgYXJlIGNoYW5nZXMgZG9uZSB0byB0aGUgbGlicmFyeSB0aGF0IHdpbGwgY2F1c2UgYW4gQUJJCisgIGJyZWFrYWdlLCB0aGF0IG1heSByZXF1aXJlIHlvdXIgYXBwbGljYXRpb24gdG8gZ2V0IGF0dGVudGlvbiBvciBwb3NzaWJseSBiZQorICBjaGFuZ2VkIHRvIGFkaGVyZSB0byBuZXcgdGhpbmdzLCB3ZSB3aWxsIGJ1bXAgdGhlIHNvbmFtZS4gVGhlbiB0aGUgbGlicmFyeQorICB3aWxsIGdldCBhIGRpZmZlcmVudCBvdXRwdXQgbmFtZSBhbmQgdGh1cyBjYW4gaW4gZmFjdCBiZSBpbnN0YWxsZWQgaW4KKyAgcGFyYWxsZWwgd2l0aCBhbiBvbGRlciBpbnN0YWxsZWQgbGliIChvbiBtb3N0IHN5c3RlbXMpLiBUaHVzLCBvbGQKKyAgYXBwbGljYXRpb25zIGJ1aWx0IGFnYWluc3QgdGhlIHByZXZpb3VzIEFCSSB2ZXJzaW9uIHdpbGwgcmVtYWluIHdvcmtpbmcgYW5kCisgIHVzaW5nIHRoZSBvbGRlciBsaWIsIHdoaWxlIG5ld2VyIGFwcGxpY2F0aW9ucyBidWlsZCBhbmQgdXNlIHRoZSBuZXdlciBvbmUuCisKKyAgRHVyaW5nIHRoZSBmaXJzdCBzZXZlbiB5ZWFycyBvZiBsaWJjdXJsIHJlbGVhc2VzLCB0aGVyZSBoYXZlIG9ubHkgYmVlbiBmb3VyCisgIEFCSSBicmVha2FnZXMuCisKK0Rvd25ncmFkZXMKKworICBHb2luZyB0byBhbiBvbGRlciBsaWJjdXJsIHZlcnNpb24gZnJvbSBvbmUgeW91J3JlIGN1cnJlbnRseSB1c2luZyBjYW4gYmUgYQorICB0cmlja3kgdGhpbmcuIE1vc3RseSB3ZSBhZGQgZmVhdHVyZXMgYW5kIG9wdGlvbnMgdG8gbmV3ZXIgbGliY3VybHMgYXMgdGhhdAorICB3b24ndCBicmVhayBBQkkgb3IgaGFtcGVyIGV4aXN0aW5nIGFwcGxpY2F0aW9ucy4gVGhpcyBoYXMgdGhlIGltcGxpY2F0aW9uCisgIHRoYXQgZ29pbmcgYmFja3dhcmRzIG1heSBnZXQgeW91IGluIGEgc2l0dWF0aW9uIHdoZXJlIHlvdSBwaWNrIGEgbGliY3VybAorICB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3B0aW9ucyB5b3VyIGFwcGxpY2F0aW9uIG5lZWRzLiBPciBwb3NzaWJseSB5b3UKKyAgZXZlbiBkb3duZ3JhZGUgc28gZmFyIHNvIHlvdSBjcm9zcyBhbiBBQkkgYnJlYWsgYm9yZGVyIGFuZCB0aHVzIGEgZGlmZmVyZW50CisgIHNvbmFtZSwgYW5kIHRoZW4geW91ciBhcHBsaWNhdGlvbiBtYXkgbmVlZCB0byBhZGFwdCB0byB0aGUgbW9kaWZpZWQgQUJJLgorCitIaXN0b3J5CisKKyAgVGhlIHByZXZpb3VzIG1ham9yIGxpYnJhcnkgc29uYW1lIG51bWJlciBidW1wcyAoYnJlYWtpbmcgYmFja3dhcmRzCisgIGNvbXBhdGliaWxpdHkpIGhhdmUgaGFwcGVuZWQgdGhlIGZvbGxvd2luZyB0aW1lczoKKworICAwIC0gbGliY3VybCA3LjEsICAgQXVndXN0IDIwMDAKKworICAxIC0gbGliY3VybCA3LjUgICAgRGVjZW1iZXIgMjAwMAorCisgIDIgLSBsaWJjdXJsIDcuNyAgICBNYXJjaCAyMDAxCisKKyAgMyAtIGxpYmN1cmwgNy4xMi4wIEp1bmUgMjAwNAorCisgIDQgLSBsaWJjdXJsIDcuMTYuMCBPY3RvYmVyIDIwMDYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9NYWtlZmlsZS5hbSBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGYxYTNiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTAyIEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm8tZGVwZW5kZW5jaWVzCisKK21hbl9NQU5TID0gY3VybF9lYXN5X2NsZWFudXAuMyBjdXJsX2Vhc3lfZ2V0aW5mby4zIGN1cmxfZWFzeV9pbml0LjMJIFwKKyBjdXJsX2Vhc3lfcGVyZm9ybS4zIGN1cmxfZWFzeV9zZXRvcHQuMyBjdXJsX2Vhc3lfZHVwaGFuZGxlLjMJCSBcCisgY3VybF9mb3JtYWRkLjMgY3VybF9mb3JtZnJlZS4zIGN1cmxfZ2V0ZGF0ZS4zIGN1cmxfZ2V0ZW52LjMJCSBcCisgY3VybF9zbGlzdF9hcHBlbmQuMyBjdXJsX3NsaXN0X2ZyZWVfYWxsLjMgY3VybF92ZXJzaW9uLjMJCSBcCisgY3VybF92ZXJzaW9uX2luZm8uMyBjdXJsX2VzY2FwZS4zIGN1cmxfdW5lc2NhcGUuMyBjdXJsX2ZyZWUuMwkJIFwKKyBjdXJsX3N0cmVxdWFsLjMgY3VybF9tcHJpbnRmLjMgY3VybF9nbG9iYWxfaW5pdC4zIGN1cmxfZ2xvYmFsX2NsZWFudXAuMyBcCisgY3VybF9tdWx0aV9hZGRfaGFuZGxlLjMgY3VybF9tdWx0aV9jbGVhbnVwLjMgY3VybF9tdWx0aV9mZHNldC4zCSBcCisgY3VybF9tdWx0aV9pbmZvX3JlYWQuMyBjdXJsX211bHRpX2luaXQuMyBjdXJsX211bHRpX3BlcmZvcm0uMwkJIFwKKyBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUuMyBjdXJsX3NoYXJlX2NsZWFudXAuMyBjdXJsX3NoYXJlX2luaXQuMwkgXAorIGN1cmxfc2hhcmVfc2V0b3B0LjMgbGliY3VybC4zIGxpYmN1cmwtZWFzeS4zIGxpYmN1cmwtbXVsdGkuMwkJIFwKKyBsaWJjdXJsLXNoYXJlLjMgbGliY3VybC1lcnJvcnMuMyBjdXJsX2Vhc3lfc3RyZXJyb3IuMwkJCSBcCisgY3VybF9tdWx0aV9zdHJlcnJvci4zIGN1cmxfc2hhcmVfc3RyZXJyb3IuMyBjdXJsX2dsb2JhbF9pbml0X21lbS4zCSBcCisgbGliY3VybC10dXRvcmlhbC4zIGN1cmxfZWFzeV9yZXNldC4zIGN1cmxfZWFzeV9lc2NhcGUuMwkJIFwKKyBjdXJsX2Vhc3lfdW5lc2NhcGUuMyBjdXJsX211bHRpX3NldG9wdC4zIGN1cmxfbXVsdGlfc29ja2V0LjMJCSBcCisgY3VybF9tdWx0aV90aW1lb3V0LjMgY3VybF9mb3JtZ2V0LjMgY3VybF9tdWx0aV9hc3NpZ24uMwkJIFwKKyBjdXJsX2Vhc3lfcGF1c2UuMyBjdXJsX2Vhc3lfcmVjdi4zIGN1cmxfZWFzeV9zZW5kLjMJCQkgXAorIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi4zCisKK0hUTUxQQUdFUyA9IGN1cmxfZWFzeV9jbGVhbnVwLmh0bWwgY3VybF9lYXN5X2dldGluZm8uaHRtbAkJXAorIGN1cmxfZWFzeV9pbml0Lmh0bWwgY3VybF9lYXN5X3BlcmZvcm0uaHRtbCBjdXJsX2Vhc3lfc2V0b3B0Lmh0bWwJXAorIGN1cmxfZWFzeV9kdXBoYW5kbGUuaHRtbCBjdXJsX2Zvcm1hZGQuaHRtbCBjdXJsX2Zvcm1mcmVlLmh0bWwJCVwKKyBjdXJsX2dldGRhdGUuaHRtbCBjdXJsX2dldGVudi5odG1sIGN1cmxfc2xpc3RfYXBwZW5kLmh0bWwJCVwKKyBjdXJsX3NsaXN0X2ZyZWVfYWxsLmh0bWwgY3VybF92ZXJzaW9uLmh0bWwgY3VybF92ZXJzaW9uX2luZm8uaHRtbAlcCisgY3VybF9lc2NhcGUuaHRtbCBjdXJsX3VuZXNjYXBlLmh0bWwgY3VybF9mcmVlLmh0bWwgY3VybF9zdHJlcXVhbC5odG1sCVwKKyBjdXJsX21wcmludGYuaHRtbCBjdXJsX2dsb2JhbF9pbml0Lmh0bWwgY3VybF9nbG9iYWxfY2xlYW51cC5odG1sCVwKKyBjdXJsX211bHRpX2FkZF9oYW5kbGUuaHRtbCBjdXJsX211bHRpX2NsZWFudXAuaHRtbAkJCVwKKyBjdXJsX211bHRpX2Zkc2V0Lmh0bWwgY3VybF9tdWx0aV9pbmZvX3JlYWQuaHRtbCBjdXJsX211bHRpX2luaXQuaHRtbAlcCisgY3VybF9tdWx0aV9wZXJmb3JtLmh0bWwgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlLmh0bWwJCQlcCisgY3VybF9zaGFyZV9jbGVhbnVwLmh0bWwgY3VybF9zaGFyZV9pbml0Lmh0bWwgY3VybF9zaGFyZV9zZXRvcHQuaHRtbAlcCisgbGliY3VybC5odG1sIGxpYmN1cmwtbXVsdGkuaHRtbCBsaWJjdXJsLWVhc3kuaHRtbCBsaWJjdXJsLXNoYXJlLmh0bWwJXAorIGxpYmN1cmwtZXJyb3JzLmh0bWwgY3VybF9lYXN5X3N0cmVycm9yLmh0bWwgY3VybF9tdWx0aV9zdHJlcnJvci5odG1sCVwKKyBjdXJsX3NoYXJlX3N0cmVycm9yLmh0bWwgY3VybF9nbG9iYWxfaW5pdF9tZW0uaHRtbAkJCVwKKyBsaWJjdXJsLXR1dG9yaWFsLmh0bWwgY3VybF9lYXN5X3Jlc2V0Lmh0bWwgY3VybF9lYXN5X2VzY2FwZS5odG1sCVwKKyBjdXJsX2Vhc3lfdW5lc2NhcGUuaHRtbCBjdXJsX211bHRpX3NldG9wdC5odG1sIGN1cmxfbXVsdGlfc29ja2V0Lmh0bWwJXAorIGN1cmxfbXVsdGlfdGltZW91dC5odG1sIGN1cmxfZm9ybWdldC5odG1sIGN1cmxfbXVsdGlfYXNzaWduLmh0bWwJXAorIGN1cmxfZWFzeV9wYXVzZS5odG1sIGN1cmxfZWFzeV9yZWN2Lmh0bWwgY3VybF9lYXN5X3NlbmQuaHRtbAkJXAorIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sCisKK1BERlBBR0VTID0gY3VybF9lYXN5X2NsZWFudXAucGRmIGN1cmxfZWFzeV9nZXRpbmZvLnBkZgkJCSBcCisgY3VybF9lYXN5X2luaXQucGRmIGN1cmxfZWFzeV9wZXJmb3JtLnBkZiBjdXJsX2Vhc3lfc2V0b3B0LnBkZgkJIFwKKyBjdXJsX2Vhc3lfZHVwaGFuZGxlLnBkZiBjdXJsX2Zvcm1hZGQucGRmIGN1cmxfZm9ybWZyZWUucGRmCQkgXAorIGN1cmxfZ2V0ZGF0ZS5wZGYgY3VybF9nZXRlbnYucGRmIGN1cmxfc2xpc3RfYXBwZW5kLnBkZgkJCSBcCisgY3VybF9zbGlzdF9mcmVlX2FsbC5wZGYgY3VybF92ZXJzaW9uLnBkZiBjdXJsX3ZlcnNpb25faW5mby5wZGYJCSBcCisgY3VybF9lc2NhcGUucGRmIGN1cmxfdW5lc2NhcGUucGRmIGN1cmxfZnJlZS5wZGYgY3VybF9zdHJlcXVhbC5wZGYJIFwKKyBjdXJsX21wcmludGYucGRmIGN1cmxfZ2xvYmFsX2luaXQucGRmIGN1cmxfZ2xvYmFsX2NsZWFudXAucGRmCQkgXAorIGN1cmxfbXVsdGlfYWRkX2hhbmRsZS5wZGYgY3VybF9tdWx0aV9jbGVhbnVwLnBkZiBjdXJsX211bHRpX2Zkc2V0LnBkZgkgXAorIGN1cmxfbXVsdGlfaW5mb19yZWFkLnBkZiBjdXJsX211bHRpX2luaXQucGRmIGN1cmxfbXVsdGlfcGVyZm9ybS5wZGYJIFwKKyBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUucGRmIGN1cmxfc2hhcmVfY2xlYW51cC5wZGYgY3VybF9zaGFyZV9pbml0LnBkZiBcCisgY3VybF9zaGFyZV9zZXRvcHQucGRmIGxpYmN1cmwucGRmIGxpYmN1cmwtbXVsdGkucGRmIGxpYmN1cmwtZWFzeS5wZGYJIFwKKyBsaWJjdXJsLXNoYXJlLnBkZiBsaWJjdXJsLWVycm9ycy5wZGYgY3VybF9lYXN5X3N0cmVycm9yLnBkZgkJIFwKKyBjdXJsX211bHRpX3N0cmVycm9yLnBkZiBjdXJsX3NoYXJlX3N0cmVycm9yLnBkZgkJCSBcCisgY3VybF9nbG9iYWxfaW5pdF9tZW0ucGRmIGxpYmN1cmwtdHV0b3JpYWwucGRmIGN1cmxfZWFzeV9yZXNldC5wZGYJIFwKKyBjdXJsX2Vhc3lfZXNjYXBlLnBkZiBjdXJsX2Vhc3lfdW5lc2NhcGUucGRmIGN1cmxfbXVsdGlfc2V0b3B0LnBkZgkgXAorIGN1cmxfbXVsdGlfc29ja2V0LnBkZiBjdXJsX211bHRpX3RpbWVvdXQucGRmIGN1cmxfZm9ybWdldC5wZGYJCSBcCisgY3VybF9tdWx0aV9hc3NpZ24ucGRmIGN1cmxfZWFzeV9wYXVzZS5wZGYgY3VybF9lYXN5X3JlY3YucGRmCQkgXAorIGN1cmxfZWFzeV9zZW5kLnBkZiBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24ucGRmCisKK0NMRUFORklMRVMgPSAkKEhUTUxQQUdFUykgJChQREZQQUdFUykKKworRVhUUkFfRElTVCA9ICQobWFuX01BTlMpICQoSFRNTFBBR0VTKSBpbmRleC5odG1sICQoUERGUEFHRVMpIGxpYmN1cmwubTQgQUJJIFwKKyAgc3ltYm9scy1pbi12ZXJzaW9ucyBzeW1ib2xzLnBsCitNQU4ySFRNTD0gcm9mZml0IC0tbWFuZGlyPS4gPCAkPCA+JEAKKworU1VGRklYRVMgPSAuMyAuaHRtbAorCitodG1sOiAkKEhUTUxQQUdFUykKKworLjMuaHRtbDoKKwkkKE1BTjJIVE1MKQorCitwZGY6ICQoUERGUEFHRVMpCisKKy4zLnBkZjoKKwlAKGZvbz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLlswLTldJCQvL2cnYDsgXAorCWdyb2ZmIC1UcHMgLW1hbiAkPCA+JCRmb28ucHM7IFwKKwlwczJwZGYgJCRmb28ucHMgJEA7IFwKKwlybSAkJGZvby5wczsgXAorCWVjaG8gImNvbnZlcnRlZCAkPCB0byAkQCIpCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvTWFrZWZpbGUuaW4gYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY4OWM4YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDU3MyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK0lOU1RBTEwgPSBASU5TVEFMTEAKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGRvY3MvbGliY3VybAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbXBpbGVycy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbmZvcHRzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtZnVuY3Rpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3BlbnNzbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW92ZXJyaWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtcmVlbnRyYW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtc3lzdGVtLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hjLXRyYW5zbGl0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3p6NTAteGMtb3ZyLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvc3JjL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitkZXBjb21wID0KK2FtX19kZXBmaWxlc19tYXliZSA9CitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CittYW4zZGlyID0gJChtYW5kaXIpL21hbjMKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChtYW4zZGlyKSIKK01BTlMgPSAkKG1hbl9NQU5TKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRUAKK0JVSUxEX0xJQkhPU1ROQU1FX1RSVUUgPSBAQlVJTERfTElCSE9TVE5BTUVfVFJVRUAKK0JVSUxEX1VOSVRURVNUU19GQUxTRSA9IEBCVUlMRF9VTklUVEVTVFNfRkFMU0VACitCVUlMRF9VTklUVEVTVFNfVFJVRSA9IEBCVUlMRF9VTklUVEVTVFNfVFJVRUAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDT05GSUdVUkVfT1BUSU9OUyA9IEBDT05GSUdVUkVfT1BUSU9OU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NST1NTQ09NUElMSU5HX0ZBTFNFID0gQENST1NTQ09NUElMSU5HX0ZBTFNFQAorQ1JPU1NDT01QSUxJTkdfVFJVRSA9IEBDUk9TU0NPTVBJTElOR19UUlVFQAorQ1VSTERFQlVHX0ZBTFNFID0gQENVUkxERUJVR19GQUxTRUAKK0NVUkxERUJVR19UUlVFID0gQENVUkxERUJVR19UUlVFQAorQ1VSTFZFUlNJT04gPSBAQ1VSTFZFUlNJT05ACitDVVJMX0NBX0JVTkRMRSA9IEBDVVJMX0NBX0JVTkRMRUAKK0NVUkxfQ0ZMQUdfRVhUUkFTID0gQENVUkxfQ0ZMQUdfRVhUUkFTQAorQ1VSTF9ESVNBQkxFX0RJQ1QgPSBAQ1VSTF9ESVNBQkxFX0RJQ1RACitDVVJMX0RJU0FCTEVfRklMRSA9IEBDVVJMX0RJU0FCTEVfRklMRUAKK0NVUkxfRElTQUJMRV9GVFAgPSBAQ1VSTF9ESVNBQkxFX0ZUUEAKK0NVUkxfRElTQUJMRV9HT1BIRVIgPSBAQ1VSTF9ESVNBQkxFX0dPUEhFUkAKK0NVUkxfRElTQUJMRV9IVFRQID0gQENVUkxfRElTQUJMRV9IVFRQQAorQ1VSTF9ESVNBQkxFX0lNQVAgPSBAQ1VSTF9ESVNBQkxFX0lNQVBACitDVVJMX0RJU0FCTEVfTERBUCA9IEBDVVJMX0RJU0FCTEVfTERBUEAKK0NVUkxfRElTQUJMRV9MREFQUyA9IEBDVVJMX0RJU0FCTEVfTERBUFNACitDVVJMX0RJU0FCTEVfUE9QMyA9IEBDVVJMX0RJU0FCTEVfUE9QM0AKK0NVUkxfRElTQUJMRV9QUk9YWSA9IEBDVVJMX0RJU0FCTEVfUFJPWFlACitDVVJMX0RJU0FCTEVfUlRTUCA9IEBDVVJMX0RJU0FCTEVfUlRTUEAKK0NVUkxfRElTQUJMRV9TTVRQID0gQENVUkxfRElTQUJMRV9TTVRQQAorQ1VSTF9ESVNBQkxFX1RFTE5FVCA9IEBDVVJMX0RJU0FCTEVfVEVMTkVUQAorQ1VSTF9ESVNBQkxFX1RGVFAgPSBAQ1VSTF9ESVNBQkxFX1RGVFBACitDVVJMX0xJQlMgPSBAQ1VSTF9MSUJTQAorQ1VSTF9ORVRXT1JLX0xJQlMgPSBAQ1VSTF9ORVRXT1JLX0xJQlNACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU0hBUkVEID0gQEVOQUJMRV9TSEFSRURACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitIQVZFX0dOVVRMU19TUlAgPSBASEFWRV9HTlVUTFNfU1JQQAorSEFWRV9MREFQX1NTTCA9IEBIQVZFX0xEQVBfU1NMQAorSEFWRV9MSUJaID0gQEhBVkVfTElCWkAKK0hBVkVfTElCWl9GQUxTRSA9IEBIQVZFX0xJQlpfRkFMU0VACitIQVZFX0xJQlpfVFJVRSA9IEBIQVZFX0xJQlpfVFJVRUAKK0hBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUID0gQEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUQAorSEFWRV9TU0xFQVlfU1JQID0gQEhBVkVfU1NMRUFZX1NSUEAKK0lETl9FTkFCTEVEID0gQElETl9FTkFCTEVEQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJUFY2X0VOQUJMRUQgPSBASVBWNl9FTkFCTEVEQAorS1JCNF9FTkFCTEVEID0gQEtSQjRfRU5BQkxFREAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQ1VSTF9MSUJTID0gQExJQkNVUkxfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUFOT1BUID0gQE1BTk9QVEAKK01JTVBVUkVfRkFMU0UgPSBATUlNUFVSRV9GQUxTRUAKK01JTVBVUkVfVFJVRSA9IEBNSU1QVVJFX1RSVUVACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitOT19VTkRFRklORURfRkFMU0UgPSBATk9fVU5ERUZJTkVEX0ZBTFNFQAorTk9fVU5ERUZJTkVEX1RSVUUgPSBATk9fVU5ERUZJTkVEX1RSVUVACitOUk9GRiA9IEBOUk9GRkAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEggPSBAUEFUSEAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTCA9IEBQRVJMQAorUEtHQUREX05BTUUgPSBAUEtHQUREX05BTUVACitQS0dBRERfUEtHID0gQFBLR0FERF9QS0dACitQS0dBRERfVkVORE9SID0gQFBLR0FERF9WRU5ET1JACitQS0dDT05GSUcgPSBAUEtHQ09ORklHQAorUkFORE9NX0ZJTEUgPSBAUkFORE9NX0ZJTEVACitSQU5MSUIgPSBAUkFOTElCQAorUkVRVUlSRV9MSUJfREVQUyA9IEBSRVFVSVJFX0xJQl9ERVBTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTT05BTUVfQlVNUF9GQUxTRSA9IEBTT05BTUVfQlVNUF9GQUxTRUAKK1NPTkFNRV9CVU1QX1RSVUUgPSBAU09OQU1FX0JVTVBfVFJVRUAKK1NTTF9FTkFCTEVEID0gQFNTTF9FTkFCTEVEQAorU1RBVElDTElCX0ZBTFNFID0gQFNUQVRJQ0xJQl9GQUxTRUAKK1NUQVRJQ0xJQl9UUlVFID0gQFNUQVRJQ0xJQl9UUlVFQAorU1RSSVAgPSBAU1RSSVBACitTVVBQT1JUX0ZFQVRVUkVTID0gQFNVUFBPUlRfRkVBVFVSRVNACitTVVBQT1JUX1BST1RPQ09MUyA9IEBTVVBQT1JUX1BST1RPQ09MU0AKK1RFU1RfU0VSVkVSX0xJQlMgPSBAVEVTVF9TRVJWRVJfTElCU0AKK1VTRV9BUkVTID0gQFVTRV9BUkVTQAorVVNFX0FYVExTID0gQFVTRV9BWFRMU0AKK1VTRV9DWUFTU0wgPSBAVVNFX0NZQVNTTEAKK1VTRV9FTUJFRERFRF9BUkVTX0ZBTFNFID0gQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQAorVVNFX0VNQkVEREVEX0FSRVNfVFJVRSA9IEBVU0VfRU1CRURERURfQVJFU19UUlVFQAorVVNFX0dOVVRMUyA9IEBVU0VfR05VVExTQAorVVNFX0dOVVRMU19ORVRUTEUgPSBAVVNFX0dOVVRMU19ORVRUTEVACitVU0VfTElCUlRNUCA9IEBVU0VfTElCUlRNUEAKK1VTRV9MSUJTU0gyID0gQFVTRV9MSUJTU0gyQAorVVNFX01BTlVBTF9GQUxTRSA9IEBVU0VfTUFOVUFMX0ZBTFNFQAorVVNFX01BTlVBTF9UUlVFID0gQFVTRV9NQU5VQUxfVFJVRUAKK1VTRV9OU1MgPSBAVVNFX05TU0AKK1VTRV9PUEVOTERBUCA9IEBVU0VfT1BFTkxEQVBACitVU0VfUE9MQVJTU0wgPSBAVVNFX1BPTEFSU1NMQAorVVNFX1NTTEVBWSA9IEBVU0VfU1NMRUFZQAorVVNFX1dJTkRPV1NfU1NQSSA9IEBVU0VfV0lORE9XU19TU1BJQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVkVSU0lPTkVEX0ZMQVZPVVIgPSBAVkVSU0lPTkVEX0ZMQVZPVVJACitWRVJTSU9ORURfU1lNQk9MU19GQUxTRSA9IEBWRVJTSU9ORURfU1lNQk9MU19GQUxTRUAKK1ZFUlNJT05FRF9TWU1CT0xTX1RSVUUgPSBAVkVSU0lPTkVEX1NZTUJPTFNfVFJVRUAKK1ZFUlNJT05OVU0gPSBAVkVSU0lPTk5VTUAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpYmV4dCA9IEBsaWJleHRACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACitBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBuby1kZXBlbmRlbmNpZXMKK21hbl9NQU5TID0gY3VybF9lYXN5X2NsZWFudXAuMyBjdXJsX2Vhc3lfZ2V0aW5mby4zIGN1cmxfZWFzeV9pbml0LjMJIFwKKyBjdXJsX2Vhc3lfcGVyZm9ybS4zIGN1cmxfZWFzeV9zZXRvcHQuMyBjdXJsX2Vhc3lfZHVwaGFuZGxlLjMJCSBcCisgY3VybF9mb3JtYWRkLjMgY3VybF9mb3JtZnJlZS4zIGN1cmxfZ2V0ZGF0ZS4zIGN1cmxfZ2V0ZW52LjMJCSBcCisgY3VybF9zbGlzdF9hcHBlbmQuMyBjdXJsX3NsaXN0X2ZyZWVfYWxsLjMgY3VybF92ZXJzaW9uLjMJCSBcCisgY3VybF92ZXJzaW9uX2luZm8uMyBjdXJsX2VzY2FwZS4zIGN1cmxfdW5lc2NhcGUuMyBjdXJsX2ZyZWUuMwkJIFwKKyBjdXJsX3N0cmVxdWFsLjMgY3VybF9tcHJpbnRmLjMgY3VybF9nbG9iYWxfaW5pdC4zIGN1cmxfZ2xvYmFsX2NsZWFudXAuMyBcCisgY3VybF9tdWx0aV9hZGRfaGFuZGxlLjMgY3VybF9tdWx0aV9jbGVhbnVwLjMgY3VybF9tdWx0aV9mZHNldC4zCSBcCisgY3VybF9tdWx0aV9pbmZvX3JlYWQuMyBjdXJsX211bHRpX2luaXQuMyBjdXJsX211bHRpX3BlcmZvcm0uMwkJIFwKKyBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUuMyBjdXJsX3NoYXJlX2NsZWFudXAuMyBjdXJsX3NoYXJlX2luaXQuMwkgXAorIGN1cmxfc2hhcmVfc2V0b3B0LjMgbGliY3VybC4zIGxpYmN1cmwtZWFzeS4zIGxpYmN1cmwtbXVsdGkuMwkJIFwKKyBsaWJjdXJsLXNoYXJlLjMgbGliY3VybC1lcnJvcnMuMyBjdXJsX2Vhc3lfc3RyZXJyb3IuMwkJCSBcCisgY3VybF9tdWx0aV9zdHJlcnJvci4zIGN1cmxfc2hhcmVfc3RyZXJyb3IuMyBjdXJsX2dsb2JhbF9pbml0X21lbS4zCSBcCisgbGliY3VybC10dXRvcmlhbC4zIGN1cmxfZWFzeV9yZXNldC4zIGN1cmxfZWFzeV9lc2NhcGUuMwkJIFwKKyBjdXJsX2Vhc3lfdW5lc2NhcGUuMyBjdXJsX211bHRpX3NldG9wdC4zIGN1cmxfbXVsdGlfc29ja2V0LjMJCSBcCisgY3VybF9tdWx0aV90aW1lb3V0LjMgY3VybF9mb3JtZ2V0LjMgY3VybF9tdWx0aV9hc3NpZ24uMwkJIFwKKyBjdXJsX2Vhc3lfcGF1c2UuMyBjdXJsX2Vhc3lfcmVjdi4zIGN1cmxfZWFzeV9zZW5kLjMJCQkgXAorIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi4zCisKK0hUTUxQQUdFUyA9IGN1cmxfZWFzeV9jbGVhbnVwLmh0bWwgY3VybF9lYXN5X2dldGluZm8uaHRtbAkJXAorIGN1cmxfZWFzeV9pbml0Lmh0bWwgY3VybF9lYXN5X3BlcmZvcm0uaHRtbCBjdXJsX2Vhc3lfc2V0b3B0Lmh0bWwJXAorIGN1cmxfZWFzeV9kdXBoYW5kbGUuaHRtbCBjdXJsX2Zvcm1hZGQuaHRtbCBjdXJsX2Zvcm1mcmVlLmh0bWwJCVwKKyBjdXJsX2dldGRhdGUuaHRtbCBjdXJsX2dldGVudi5odG1sIGN1cmxfc2xpc3RfYXBwZW5kLmh0bWwJCVwKKyBjdXJsX3NsaXN0X2ZyZWVfYWxsLmh0bWwgY3VybF92ZXJzaW9uLmh0bWwgY3VybF92ZXJzaW9uX2luZm8uaHRtbAlcCisgY3VybF9lc2NhcGUuaHRtbCBjdXJsX3VuZXNjYXBlLmh0bWwgY3VybF9mcmVlLmh0bWwgY3VybF9zdHJlcXVhbC5odG1sCVwKKyBjdXJsX21wcmludGYuaHRtbCBjdXJsX2dsb2JhbF9pbml0Lmh0bWwgY3VybF9nbG9iYWxfY2xlYW51cC5odG1sCVwKKyBjdXJsX211bHRpX2FkZF9oYW5kbGUuaHRtbCBjdXJsX211bHRpX2NsZWFudXAuaHRtbAkJCVwKKyBjdXJsX211bHRpX2Zkc2V0Lmh0bWwgY3VybF9tdWx0aV9pbmZvX3JlYWQuaHRtbCBjdXJsX211bHRpX2luaXQuaHRtbAlcCisgY3VybF9tdWx0aV9wZXJmb3JtLmh0bWwgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlLmh0bWwJCQlcCisgY3VybF9zaGFyZV9jbGVhbnVwLmh0bWwgY3VybF9zaGFyZV9pbml0Lmh0bWwgY3VybF9zaGFyZV9zZXRvcHQuaHRtbAlcCisgbGliY3VybC5odG1sIGxpYmN1cmwtbXVsdGkuaHRtbCBsaWJjdXJsLWVhc3kuaHRtbCBsaWJjdXJsLXNoYXJlLmh0bWwJXAorIGxpYmN1cmwtZXJyb3JzLmh0bWwgY3VybF9lYXN5X3N0cmVycm9yLmh0bWwgY3VybF9tdWx0aV9zdHJlcnJvci5odG1sCVwKKyBjdXJsX3NoYXJlX3N0cmVycm9yLmh0bWwgY3VybF9nbG9iYWxfaW5pdF9tZW0uaHRtbAkJCVwKKyBsaWJjdXJsLXR1dG9yaWFsLmh0bWwgY3VybF9lYXN5X3Jlc2V0Lmh0bWwgY3VybF9lYXN5X2VzY2FwZS5odG1sCVwKKyBjdXJsX2Vhc3lfdW5lc2NhcGUuaHRtbCBjdXJsX211bHRpX3NldG9wdC5odG1sIGN1cmxfbXVsdGlfc29ja2V0Lmh0bWwJXAorIGN1cmxfbXVsdGlfdGltZW91dC5odG1sIGN1cmxfZm9ybWdldC5odG1sIGN1cmxfbXVsdGlfYXNzaWduLmh0bWwJXAorIGN1cmxfZWFzeV9wYXVzZS5odG1sIGN1cmxfZWFzeV9yZWN2Lmh0bWwgY3VybF9lYXN5X3NlbmQuaHRtbAkJXAorIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sCisKK1BERlBBR0VTID0gY3VybF9lYXN5X2NsZWFudXAucGRmIGN1cmxfZWFzeV9nZXRpbmZvLnBkZgkJCSBcCisgY3VybF9lYXN5X2luaXQucGRmIGN1cmxfZWFzeV9wZXJmb3JtLnBkZiBjdXJsX2Vhc3lfc2V0b3B0LnBkZgkJIFwKKyBjdXJsX2Vhc3lfZHVwaGFuZGxlLnBkZiBjdXJsX2Zvcm1hZGQucGRmIGN1cmxfZm9ybWZyZWUucGRmCQkgXAorIGN1cmxfZ2V0ZGF0ZS5wZGYgY3VybF9nZXRlbnYucGRmIGN1cmxfc2xpc3RfYXBwZW5kLnBkZgkJCSBcCisgY3VybF9zbGlzdF9mcmVlX2FsbC5wZGYgY3VybF92ZXJzaW9uLnBkZiBjdXJsX3ZlcnNpb25faW5mby5wZGYJCSBcCisgY3VybF9lc2NhcGUucGRmIGN1cmxfdW5lc2NhcGUucGRmIGN1cmxfZnJlZS5wZGYgY3VybF9zdHJlcXVhbC5wZGYJIFwKKyBjdXJsX21wcmludGYucGRmIGN1cmxfZ2xvYmFsX2luaXQucGRmIGN1cmxfZ2xvYmFsX2NsZWFudXAucGRmCQkgXAorIGN1cmxfbXVsdGlfYWRkX2hhbmRsZS5wZGYgY3VybF9tdWx0aV9jbGVhbnVwLnBkZiBjdXJsX211bHRpX2Zkc2V0LnBkZgkgXAorIGN1cmxfbXVsdGlfaW5mb19yZWFkLnBkZiBjdXJsX211bHRpX2luaXQucGRmIGN1cmxfbXVsdGlfcGVyZm9ybS5wZGYJIFwKKyBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUucGRmIGN1cmxfc2hhcmVfY2xlYW51cC5wZGYgY3VybF9zaGFyZV9pbml0LnBkZiBcCisgY3VybF9zaGFyZV9zZXRvcHQucGRmIGxpYmN1cmwucGRmIGxpYmN1cmwtbXVsdGkucGRmIGxpYmN1cmwtZWFzeS5wZGYJIFwKKyBsaWJjdXJsLXNoYXJlLnBkZiBsaWJjdXJsLWVycm9ycy5wZGYgY3VybF9lYXN5X3N0cmVycm9yLnBkZgkJIFwKKyBjdXJsX211bHRpX3N0cmVycm9yLnBkZiBjdXJsX3NoYXJlX3N0cmVycm9yLnBkZgkJCSBcCisgY3VybF9nbG9iYWxfaW5pdF9tZW0ucGRmIGxpYmN1cmwtdHV0b3JpYWwucGRmIGN1cmxfZWFzeV9yZXNldC5wZGYJIFwKKyBjdXJsX2Vhc3lfZXNjYXBlLnBkZiBjdXJsX2Vhc3lfdW5lc2NhcGUucGRmIGN1cmxfbXVsdGlfc2V0b3B0LnBkZgkgXAorIGN1cmxfbXVsdGlfc29ja2V0LnBkZiBjdXJsX211bHRpX3RpbWVvdXQucGRmIGN1cmxfZm9ybWdldC5wZGYJCSBcCisgY3VybF9tdWx0aV9hc3NpZ24ucGRmIGN1cmxfZWFzeV9wYXVzZS5wZGYgY3VybF9lYXN5X3JlY3YucGRmCQkgXAorIGN1cmxfZWFzeV9zZW5kLnBkZiBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24ucGRmCisKK0NMRUFORklMRVMgPSAkKEhUTUxQQUdFUykgJChQREZQQUdFUykKK0VYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKSAkKEhUTUxQQUdFUykgaW5kZXguaHRtbCAkKFBERlBBR0VTKSBsaWJjdXJsLm00IEFCSSBcCisgIHN5bWJvbHMtaW4tdmVyc2lvbnMgc3ltYm9scy5wbAorCitNQU4ySFRNTCA9IHJvZmZpdCAtLW1hbmRpcj0uIDwgJDwgPiRACitTVUZGSVhFUyA9IC4zIC5odG1sCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC4zIC5odG1sIC5wZGYKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBkb2NzL2xpYmN1cmwvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGRvY3MvbGliY3VybC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbAordW5pbnN0YWxsLWluZm8tYW06CitpbnN0YWxsLW1hbjM6ICQobWFuM19NQU5TKSAkKG1hbl9NQU5TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobWFuM2RpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKG1hbjNkaXIpIgorCUBsaXN0PSckKG1hbjNfTUFOUykgJChkaXN0X21hbjNfTUFOUykgJChub2Rpc3RfbWFuM19NQU5TKSc7IFwKKwlsMj0nJChtYW5fTUFOUykgJChkaXN0X21hbl9NQU5TKSAkKG5vZGlzdF9tYW5fTUFOUyknOyBcCisJZm9yIGkgaW4gJCRsMjsgZG8gXAorCSAgY2FzZSAiJCRpIiBpbiBcCisJICAgICouMyopIGxpc3Q9IiQkbGlzdCAkJGkiIDs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS8kJGk7IHRoZW4gZmlsZT0kKHNyY2RpcikvJCRpOyBcCisJICBlbHNlIGZpbGU9JCRpOyBmaTsgXAorCSAgZXh0PWBlY2hvICQkaSB8IHNlZCAtZSAncy9eLipcXC4vLydgOyBcCisJICBjYXNlICIkJGV4dCIgaW4gXAorCSAgICAzKikgOzsgXAorCSAgICAqKSBleHQ9JzMnIDs7IFwKKwkgIGVzYWM7IFwKKwkgIGluc3Q9YGVjaG8gJCRpIHwgc2VkIC1lICdzL1xcLlswLTlhLXpdKiQkLy8nYDsgXAorCSAgaW5zdD1gZWNobyAkJGluc3QgfCBzZWQgLWUgJ3MvXi4qXC8vLydgOyBcCisJICBpbnN0PWBlY2hvICQkaW5zdCB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2AuJCRleHQ7IFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZmlsZScgJyQoREVTVERJUikkKG1hbjNkaXIpLyQkaW5zdCciOyBcCisJICAkKElOU1RBTExfREFUQSkgIiQkZmlsZSIgIiQoREVTVERJUikkKG1hbjNkaXIpLyQkaW5zdCI7IFwKKwlkb25lCit1bmluc3RhbGwtbWFuMzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKG1hbjNfTUFOUykgJChkaXN0X21hbjNfTUFOUykgJChub2Rpc3RfbWFuM19NQU5TKSc7IFwKKwlsMj0nJChtYW5fTUFOUykgJChkaXN0X21hbl9NQU5TKSAkKG5vZGlzdF9tYW5fTUFOUyknOyBcCisJZm9yIGkgaW4gJCRsMjsgZG8gXAorCSAgY2FzZSAiJCRpIiBpbiBcCisJICAgICouMyopIGxpc3Q9IiQkbGlzdCAkJGkiIDs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICBleHQ9YGVjaG8gJCRpIHwgc2VkIC1lICdzL14uKlxcLi8vJ2A7IFwKKwkgIGNhc2UgIiQkZXh0IiBpbiBcCisJICAgIDMqKSA7OyBcCisJICAgICopIGV4dD0nMycgOzsgXAorCSAgZXNhYzsgXAorCSAgaW5zdD1gZWNobyAkJGkgfCBzZWQgLWUgJ3MvXFwuWzAtOWEtel0qJCQvLydgOyBcCisJICBpbnN0PWBlY2hvICQkaW5zdCB8IHNlZCAtZSAncy9eLipcLy8vJ2A7IFwKKwkgIGluc3Q9YGVjaG8gJCRpbnN0IHwgc2VkICckKHRyYW5zZm9ybSknYC4kJGV4dDsgXAorCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChtYW4zZGlyKS8kJGluc3QnIjsgXAorCSAgcm0gLWYgIiQoREVTVERJUikkKG1hbjNkaXIpLyQkaW5zdCI7IFwKKwlkb25lCit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKE1BTlMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChtYW4zZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKG1rZGlyX3ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbAorCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLW1hbgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOiBpbnN0YWxsLW1hbjMKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1tYW4KKwordW5pbnN0YWxsLW1hbjogdW5pbnN0YWxsLW1hbjMKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLW1hbjMgXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1tYW4gXAorCXVuaW5zdGFsbC1tYW4zCisKKworaHRtbDogJChIVE1MUEFHRVMpCisKKy4zLmh0bWw6CisJJChNQU4ySFRNTCkKKworcGRmOiAkKFBERlBBR0VTKQorCisuMy5wZGY6CisJQChmb289YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5bMC05XSQkLy9nJ2A7IFwKKwlncm9mZiAtVHBzIC1tYW4gJDwgPiQkZm9vLnBzOyBcCisJcHMycGRmICQkZm9vLnBzICRAOyBcCisJcm0gJCRmb28ucHM7IFwKKwllY2hvICJjb252ZXJ0ZWQgJDwgdG8gJEAiKQorIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9jbGVhbnVwLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X2NsZWFudXAuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGEzZjlmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9jbGVhbnVwLjMKQEAgLTAsMCArMSw1NyBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCBjdXJsX2Vhc3lfY2xlYW51cCAzICIyMiBhdWcgMjAwNyIgImxpYmN1cmwgNy4xNy4wIiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9lYXN5X2NsZWFudXAgLSBFbmQgYSBsaWJjdXJsIGVhc3kgc2Vzc2lvbgorLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKy5CSSAidm9pZCBjdXJsX2Vhc3lfY2xlYW51cChDVVJMICoiIGhhbmRsZSAiKTsiCisKKy5TSCBERVNDUklQVElPTgorVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHRoZSBsYXN0IGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGFuIGVhc3kgc2Vzc2lvbi4gSXQgaXMgdGhlCitvcHBvc2l0ZSBvZiB0aGUgXGZJY3VybF9lYXN5X2luaXQoMylcZlAgZnVuY3Rpb24gYW5kIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlCitzYW1lIFxmSWhhbmRsZVxmUCBhcyBpbnB1dCB0aGF0IHRoZSBjdXJsX2Vhc3lfaW5pdCBjYWxsIHJldHVybmVkLgorCitUaGlzIHdpbGwgZWZmZWN0aXZlbHkgY2xvc2UgYWxsIGNvbm5lY3Rpb25zIHRoaXMgaGFuZGxlIGhhcyB1c2VkIGFuZCBwb3NzaWJseQoraGFzIGtlcHQgb3BlbiB1bnRpbCBub3cuIERvbid0IGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgaW50ZW5kIHRvIHRyYW5zZmVyCittb3JlIGZpbGVzLgorCitPY2Nhc2lvbmFsbHkgeW91IG1heSBnZXQgeW91ciBwcm9ncmVzcyBjYWxsYmFjayBvciBoZWFkZXIgY2FsbGJhY2sgY2FsbGVkIGZyb20KK3dpdGhpbiBcZkljdXJsX2Vhc3lfY2xlYW51cCgzKVxmUCAoaWYgcHJldmlvdXNseSBzZXQgZm9yIHRoZSBoYW5kbGUgdXNpbmcKK1xmSWN1cmxfZWFzeV9zZXRvcHQoMylcZlApLiBMaWtlIGlmIGxpYmN1cmwgZGVjaWRlcyB0byBzaHV0IGRvd24gdGhlCitjb25uZWN0aW9uIGFuZCB0aGUgcHJvdG9jb2wgaXMgb2YgYSBraW5kIHRoYXQgcmVxdWlyZXMgYSBjb21tYW5kL3Jlc3BvbnNlCitzZXF1ZW5jZSBiZWZvcmUgZGlzY29ubmVjdC4gRXhhbXBsZXMgb2Ygc3VjaCBwcm90b2NvbHMgYXJlIEZUUCwgUE9QMyBhbmQgSU1BUC4KKworQW55IHVzZXMgb2YgdGhlIFxmQmhhbmRsZVxmUCBhZnRlciB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCBhbmQgaGF2ZQorcmV0dXJuZWQsIGFyZSBpbGxlZ2FsLiBUaGlzIGtpbGxzIHRoZSBoYW5kbGUgYW5kIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoCitpdCEKKworV2l0aCBsaWJjdXJsIHZlcnNpb25zIHByaW9yIHRvIDcuMTcuOiB3aGVuIHlvdSd2ZSBjYWxsZWQgdGhpcywgeW91IGNhbiBzYWZlbHkKK3JlbW92ZSBhbGwgdGhlIHN0cmluZ3MgeW91J3ZlIHByZXZpb3VzbHkgdG9sZCBsaWJjdXJsIHRvIHVzZSwgYXMgaXQgd29uJ3QgdXNlCit0aGVtIGFueW1vcmUgbm93LgorLlNIIFJFVFVSTiBWQUxVRQorTm9uZQorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX2Vhc3lfaW5pdCAiKDMpLCAiCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfY2xlYW51cC5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9jbGVhbnVwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhOTIxZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfY2xlYW51cC5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX2Vhc3lfY2xlYW51cCBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX2Vhc3lfY2xlYW51cCAtIEVuZCBhIGxpYmN1cmwgZWFzeSBzZXNzaW9uIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+dm9pZCBjdXJsX2Vhc3lfY2xlYW51cChDVVJMICogaGFuZGxlICk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIG11c3QgYmUgdGhlIGxhc3QgZnVuY3Rpb24gdG8gY2FsbCBmb3IgYW4gZWFzeSBzZXNzaW9uLiBJdCBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfaW5pdC5odG1sIj5jdXJsX2Vhc3lfaW5pdCgzKTwvYT4gZnVuY3Rpb24gYW5kIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5oYW5kbGU8L3NwYW4+IGFzIGlucHV0IHRoYXQgdGhlIGN1cmxfZWFzeV9pbml0IGNhbGwgcmV0dXJuZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhpcyB3aWxsIGVmZmVjdGl2ZWx5IGNsb3NlIGFsbCBjb25uZWN0aW9ucyB0aGlzIGhhbmRsZSBoYXMgdXNlZCBhbmQgcG9zc2libHkgaGFzIGtlcHQgb3BlbiB1bnRpbCBub3cuIERvbid0IGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgaW50ZW5kIHRvIHRyYW5zZmVyIG1vcmUgZmlsZXMuIAorPHAgY2xhc3M9ImxldmVsMCI+T2NjYXNpb25hbGx5IHlvdSBtYXkgZ2V0IHlvdXIgcHJvZ3Jlc3MgY2FsbGJhY2sgb3IgaGVhZGVyIGNhbGxiYWNrIGNhbGxlZCBmcm9tIHdpdGhpbiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X2NsZWFudXAuaHRtbCI+Y3VybF9lYXN5X2NsZWFudXAoMyk8L2E+IChpZiBwcmV2aW91c2x5IHNldCBmb3IgdGhlIGhhbmRsZSB1c2luZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3NldG9wdC5odG1sIj5jdXJsX2Vhc3lfc2V0b3B0KDMpPC9hPikuIExpa2UgaWYgbGliY3VybCBkZWNpZGVzIHRvIHNodXQgZG93biB0aGUgY29ubmVjdGlvbiBhbmQgdGhlIHByb3RvY29sIGlzIG9mIGEga2luZCB0aGF0IHJlcXVpcmVzIGEgY29tbWFuZC9yZXNwb25zZSBzZXF1ZW5jZSBiZWZvcmUgZGlzY29ubmVjdC4gRXhhbXBsZXMgb2Ygc3VjaCBwcm90b2NvbHMgYXJlIEZUUCwgUE9QMyBhbmQgSU1BUC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5BbnkgdXNlcyBvZiB0aGUgPHNwYW4gQ2xhc3M9ImJvbGQiPmhhbmRsZTwvc3Bhbj4gYWZ0ZXIgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQgYW5kIGhhdmUgcmV0dXJuZWQsIGFyZSBpbGxlZ2FsLiBUaGlzIGtpbGxzIHRoZSBoYW5kbGUgYW5kIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGl0ISAKKzxwIGNsYXNzPSJsZXZlbDAiPldpdGggbGliY3VybCB2ZXJzaW9ucyBwcmlvciB0byA3LjE3Ljogd2hlbiB5b3UndmUgY2FsbGVkIHRoaXMsIHlvdSBjYW4gc2FmZWx5IHJlbW92ZSBhbGwgdGhlIHN0cmluZ3MgeW91J3ZlIHByZXZpb3VzbHkgdG9sZCBsaWJjdXJsIHRvIHVzZSwgYXMgaXQgd29uJ3QgdXNlIHRoZW0gYW55bW9yZSBub3cuIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPk5vbmUgPGEgbmFtZT0iU0VFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TRUUgQUxTTzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX2Vhc3lfaW5pdC5odG1sIj5jdXJsX2Vhc3lfaW5pdCAoMyk8L2E+IDxzcGFuIENsYXNzPSJtYW5wYWdlIj4gPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9jbGVhbnVwLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfY2xlYW51cC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyYWJjYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfY2xlYW51cC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9kdXBoYW5kbGUuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfZHVwaGFuZGxlLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzY2VkNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfZHVwaGFuZGxlLjMKQEAgLTAsMCArMSw1MSBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF9lYXN5X2R1cGhhbmRsZSAzICIxOCBTZXB0ZW1iZXIgMjAwMSIgImxpYmN1cmwgNy45IiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9lYXN5X2R1cGhhbmRsZSAtIENsb25lIGEgbGliY3VybCBzZXNzaW9uIGhhbmRsZQorLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKy5CSSAiQ1VSTCAqY3VybF9lYXN5X2R1cGhhbmRsZShDVVJMICoiaGFuZGxlICIpOyIKKworLlNIIERFU0NSSVBUSU9OCitUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgbmV3IGN1cmwgaGFuZGxlLCBhIGR1cGxpY2F0ZSwgdXNpbmcgYWxsIHRoZQorb3B0aW9ucyBwcmV2aW91c2x5IHNldCBpbiB0aGUgaW5wdXQgY3VybCBcZkloYW5kbGVcZlAuIEJvdGggaGFuZGxlcyBjYW4KK3N1YnNlcXVlbnRseSBiZSB1c2VkIGluZGVwZW5kZW50bHkgYW5kIHRoZXkgbXVzdCBib3RoIGJlIGZyZWVkIHdpdGgKK1xmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQLgorCitBbGwgc3RyaW5ncyB0aGF0IHRoZSBpbnB1dCBoYW5kbGUgaGFzIGJlZW4gdG9sZCB0byBwb2ludCB0byAoYXMgb3Bwb3NlZCB0bworY29weSkgd2l0aCBwcmV2aW91cyBjYWxscyB0byBcZkljdXJsX2Vhc3lfc2V0b3B0KDMpXGZQIHVzaW5nIGNoYXIgKiBpbnB1dHMsCit3aWxsIGJlIHBvaW50ZWQgdG8gYnkgdGhlIG5ldyBoYW5kbGUgYXMgd2VsbC4gWW91IG11c3QgdGhlcmVmb3JlIG1ha2Ugc3VyZSB0bwora2VlcCB0aGUgZGF0YSBhcm91bmQgdW50aWwgYm90aCBoYW5kbGVzIGhhdmUgYmVlbiBjbGVhbmVkIHVwLgorCitUaGUgbmV3IGhhbmRsZSB3aWxsIFxmQm5vdFxmUCBpbmhlcml0IGFueSBzdGF0ZSBpbmZvcm1hdGlvbiwgbm8gY29ubmVjdGlvbnMsCitubyBTU0wgc2Vzc2lvbnMgYW5kIG5vIGNvb2tpZXMuCisKK1xmQk5vdGVcZlAgdGhhdCBldmVuIGluIG11bHRpLXRocmVhZGVkIHByb2dyYW1zLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkCitpbiBhIHN5bmNocm9ub3VzIHdheSwgdGhlIGlucHV0IGhhbmRsZSBtYXkgbm90IGJlIGluIHVzZSB3aGVuIGNsb25lZC4KKy5TSCBSRVRVUk4gVkFMVUUKK0lmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMLCBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgbm8gdmFsaWQgaGFuZGxlIHdhcworcmV0dXJuZWQuCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfZWFzeV9pbml0ICIoMyksIiBjdXJsX2Vhc3lfY2xlYW51cCAiKDMpLCIgY3VybF9nbG9iYWxfaW5pdCAiKDMpCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfZHVwaGFuZGxlLmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X2R1cGhhbmRsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NGYwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X2R1cGhhbmRsZS5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX2Vhc3lfZHVwaGFuZGxlIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfZWFzeV9kdXBoYW5kbGUgLSBDbG9uZSBhIGxpYmN1cmwgc2Vzc2lvbiBoYW5kbGUgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj4jaW5jbHVkZSAmbHQ7Y3VybC9jdXJsLmgmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5DVVJMICpjdXJsX2Vhc3lfZHVwaGFuZGxlKENVUkwgKmhhbmRsZSApOzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIG5ldyBjdXJsIGhhbmRsZSwgYSBkdXBsaWNhdGUsIHVzaW5nIGFsbCB0aGUgb3B0aW9ucyBwcmV2aW91c2x5IHNldCBpbiB0aGUgaW5wdXQgY3VybCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmhhbmRsZTwvc3Bhbj4uIEJvdGggaGFuZGxlcyBjYW4gc3Vic2VxdWVudGx5IGJlIHVzZWQgaW5kZXBlbmRlbnRseSBhbmQgdGhleSBtdXN0IGJvdGggYmUgZnJlZWQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X2NsZWFudXAuaHRtbCI+Y3VybF9lYXN5X2NsZWFudXAoMyk8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPkFsbCBzdHJpbmdzIHRoYXQgdGhlIGlucHV0IGhhbmRsZSBoYXMgYmVlbiB0b2xkIHRvIHBvaW50IHRvIChhcyBvcHBvc2VkIHRvIGNvcHkpIHdpdGggcHJldmlvdXMgY2FsbHMgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9zZXRvcHQuaHRtbCI+Y3VybF9lYXN5X3NldG9wdCgzKTwvYT4gdXNpbmcgY2hhciAqIGlucHV0cywgd2lsbCBiZSBwb2ludGVkIHRvIGJ5IHRoZSBuZXcgaGFuZGxlIGFzIHdlbGwuIFlvdSBtdXN0IHRoZXJlZm9yZSBtYWtlIHN1cmUgdG8ga2VlcCB0aGUgZGF0YSBhcm91bmQgdW50aWwgYm90aCBoYW5kbGVzIGhhdmUgYmVlbiBjbGVhbmVkIHVwLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBuZXcgaGFuZGxlIHdpbGwgPHNwYW4gQ2xhc3M9ImJvbGQiPm5vdDwvc3Bhbj4gaW5oZXJpdCBhbnkgc3RhdGUgaW5mb3JtYXRpb24sIG5vIGNvbm5lY3Rpb25zLCBubyBTU0wgc2Vzc2lvbnMgYW5kIG5vIGNvb2tpZXMuIAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPk5vdGU8L3NwYW4+IHRoYXQgZXZlbiBpbiBtdWx0aS10aHJlYWRlZCBwcm9ncmFtcywgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiBhIHN5bmNocm9ub3VzIHdheSwgdGhlIGlucHV0IGhhbmRsZSBtYXkgbm90IGJlIGluIHVzZSB3aGVuIGNsb25lZC4gPGEgbmFtZT0iUkVUVVJOIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SRVRVUk4gVkFMVUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+SWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwsIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCBubyB2YWxpZCBoYW5kbGUgd2FzIHJldHVybmVkLiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9pbml0Lmh0bWwiPmN1cmxfZWFzeV9pbml0ICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9lYXN5X2NsZWFudXAuaHRtbCI+IGN1cmxfZWFzeV9jbGVhbnVwICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9nbG9iYWxfaW5pdC5odG1sIj4gY3VybF9nbG9iYWxfaW5pdCAoMyk8L2E+IAorPHAgY2xhc3M9ImxldmVsMCI+PHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X2R1cGhhbmRsZS5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X2R1cGhhbmRsZS5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4MWY0OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfZHVwaGFuZGxlLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X2VzY2FwZS4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9lc2NhcGUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTk4ZTZmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9lc2NhcGUuMwpAQCAtMCwwICsxLDQ2IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIGN1cmxfZWFzeV9lc2NhcGUgMyAiNyBBcHJpbCAyMDA2IiAibGliY3VybCA3LjE1LjQiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX2Vhc3lfZXNjYXBlIC0gVVJMIGVuY29kZXMgdGhlIGdpdmVuIHN0cmluZworLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+Cisuc3AKKy5CSSAiY2hhciAqY3VybF9lYXN5X2VzY2FwZSggQ1VSTCAqIiBjdXJsICIsIGNoYXIgKiIgdXJsICIsIGludCAibGVuZ3RoICIgKTsiCisuYWQKKy5TSCBERVNDUklQVElPTgorVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgZ2l2ZW4gaW5wdXQgc3RyaW5nIHRvIGFuIFVSTCBlbmNvZGVkIHN0cmluZyBhbmQKK3JldHVybnMgdGhhdCBhcyBhIG5ldyBhbGxvY2F0ZWQgc3RyaW5nLiBBbGwgaW5wdXQgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgYS16LAorQS1aLCAwLTksICctJywgJy4nLCAnXycgb3IgJ34nIGFyZSBjb252ZXJ0ZWQgdG8gdGhlaXIgIlVSTCBlc2NhcGVkIiB2ZXJzaW9uCisoJU5OIHdoZXJlIE5OIGlzIGEgdHdvLWRpZ2l0IGhleGFkZWNpbWFsIG51bWJlcikuCisKK0lmIHRoZSBcZkJsZW5ndGhcZlAgYXJndW1lbnQgaXMgc2V0IHRvIDAgKHplcm8pLCBcZkljdXJsX2Vhc3lfZXNjYXBlKDMpXGZQCit1c2VzIHN0cmxlbigpIG9uIHRoZSBpbnB1dCBcZkJ1cmxcZlAgdG8gZmluZCBvdXQgdGhlIHNpemUuCisKK1lvdSBtdXN0IFxmSWN1cmxfZnJlZSgzKVxmUCB0aGUgcmV0dXJuZWQgc3RyaW5nIHdoZW4geW91J3JlIGRvbmUgd2l0aCBpdC4KKy5TSCBBVkFJTEFCSUxJVFkKK0FkZGVkIGluIDcuMTUuNCBhbmQgcmVwbGFjZXMgdGhlIG9sZCBcZkljdXJsX2VzY2FwZSgzKVxmUCBmdW5jdGlvbi4KKy5TSCBSRVRVUk4gVkFMVUUKK0EgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgb3IgTlVMTCBpZiBpdCBmYWlsZWQuCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfZWFzeV91bmVzY2FwZSAiKDMpLCAiIGN1cmxfZnJlZSAiKDMpLCAiIFJGQyAyMzk2CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X2VzY2FwZS5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9lc2NhcGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGI2NWRjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9lc2NhcGUuaHRtbApAQCAtMCwwICsxLDYwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF9lYXN5X2VzY2FwZSBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX2Vhc3lfZXNjYXBlIC0gVVJMIGVuY29kZXMgdGhlIGdpdmVuIHN0cmluZyA8YSBuYW1lPSJTWU5PUFNJUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1lOT1BTSVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmNoYXIgKmN1cmxfZWFzeV9lc2NhcGUoIENVUkwgKiBjdXJsICwgY2hhciAqIHVybCAsIGludCBsZW5ndGggICk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBnaXZlbiBpbnB1dCBzdHJpbmcgdG8gYW4gVVJMIGVuY29kZWQgc3RyaW5nIGFuZCByZXR1cm5zIHRoYXQgYXMgYSBuZXcgYWxsb2NhdGVkIHN0cmluZy4gQWxsIGlucHV0IGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGEteiwgQS1aLCAwLTksICctJywgJy4nLCAnXycgb3IgJ34nIGFyZSBjb252ZXJ0ZWQgdG8gdGhlaXIgIlVSTCBlc2NhcGVkIiB2ZXJzaW9uICglTk4gd2hlcmUgTk4gaXMgYSB0d28tZGlnaXQgaGV4YWRlY2ltYWwgbnVtYmVyKS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5JZiB0aGUgPHNwYW4gQ2xhc3M9ImJvbGQiPmxlbmd0aDwvc3Bhbj4gYXJndW1lbnQgaXMgc2V0IHRvIDAgKHplcm8pLCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X2VzY2FwZS5odG1sIj5jdXJsX2Vhc3lfZXNjYXBlKDMpPC9hPiB1c2VzIHN0cmxlbigpIG9uIHRoZSBpbnB1dCA8c3BhbiBDbGFzcz0iYm9sZCI+dXJsPC9zcGFuPiB0byBmaW5kIG91dCB0aGUgc2l6ZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgbXVzdCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9mcmVlLmh0bWwiPmN1cmxfZnJlZSgzKTwvYT4gdGhlIHJldHVybmVkIHN0cmluZyB3aGVuIHlvdSdyZSBkb25lIHdpdGggaXQuIDxhIG5hbWU9IkFWQUlMQUJJTElUWSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+QVZBSUxBQklMSVRZPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPkFkZGVkIGluIDcuMTUuNCBhbmQgcmVwbGFjZXMgdGhlIG9sZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lc2NhcGUuaHRtbCI+Y3VybF9lc2NhcGUoMyk8L2E+IGZ1bmN0aW9uLiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5BIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIG9yIE5VTEwgaWYgaXQgZmFpbGVkLiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV91bmVzY2FwZS5odG1sIj5jdXJsX2Vhc3lfdW5lc2NhcGUgKDMpPC9hPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX2ZyZWUuaHRtbCI+ICBjdXJsX2ZyZWUgKDMpPC9hPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+ICA8YSBocmVmPSJodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMzk2LnR4dCI+UkZDIDIzOTY8L2E+PC9zcGFuPiA8cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfZXNjYXBlLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfZXNjYXBlLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDU1MzcwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9lc2NhcGUucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfZ2V0aW5mby4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9nZXRpbmZvLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2ODEzNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfZ2V0aW5mby4zCkBAIC0wLDAgKzEsMjkyIEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIGN1cmxfZWFzeV9nZXRpbmZvIDMgIjExIEZlYiAyMDA5IiAibGliY3VybCA3LjE5LjQiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX2Vhc3lfZ2V0aW5mbyAtIGV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSBhIGN1cmwgaGFuZGxlCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworLkIgIkNVUkxjb2RlIGN1cmxfZWFzeV9nZXRpbmZvKENVUkwgKmN1cmwsIENVUkxJTkZPIGluZm8sIC4uLiApOyIKKworLlNIIERFU0NSSVBUSU9OCitSZXF1ZXN0IGludGVybmFsIGluZm9ybWF0aW9uIGZyb20gdGhlIGN1cmwgc2Vzc2lvbiB3aXRoIHRoaXMgZnVuY3Rpb24uICBUaGUKK3RoaXJkIGFyZ3VtZW50IFxmQk1VU1RcZlAgYmUgYSBwb2ludGVyIHRvIGEgbG9uZywgYSBwb2ludGVyIHRvIGEgY2hhciAqLCBhCitwb2ludGVyIHRvIGEgc3RydWN0IGN1cmxfc2xpc3QgKiBvciBhIHBvaW50ZXIgdG8gYSBkb3VibGUgKGFzIHRoaXMKK2RvY3VtZW50YXRpb24gZGVzY3JpYmVzIGZ1cnRoZXIgZG93bikuICBUaGUgZGF0YSBwb2ludGVkLXRvIHdpbGwgYmUgZmlsbGVkIGluCithY2NvcmRpbmdseSBhbmQgY2FuIGJlIHJlbGllZCB1cG9uIG9ubHkgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgQ1VSTEVfT0suICBVc2UKK3RoaXMgZnVuY3Rpb24gQUZURVIgYSBwZXJmb3JtZWQgdHJhbnNmZXIgaWYgeW91IHdhbnQgdG8gZ2V0IHRyYW5zZmVyLSBvcmllbnRlZAorZGF0YS4KKworWW91IHNob3VsZCBub3QgZnJlZSB0aGUgbWVtb3J5IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gdW5sZXNzIGl0IGlzCitleHBsaWNpdGx5IG1lbnRpb25lZCBiZWxvdy4KKy5TSCBBVkFJTEFCTEUgSU5GT1JNQVRJT04KK1RoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gY2FuIGJlIGV4dHJhY3RlZDoKKy5JUCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMCitQYXNzIGEgcG9pbnRlciB0byBhIGNoYXIgcG9pbnRlciB0byByZWNlaXZlIHRoZSBsYXN0IHVzZWQgZWZmZWN0aXZlIFVSTC4KKy5JUCBDVVJMSU5GT19SRVNQT05TRV9DT0RFCitQYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgbGFzdCByZWNlaXZlZCBIVFRQLCBGVFAgb3IgU01UUAorcmVzcG9uc2UgY29kZS4gVGhpcyBvcHRpb24gd2FzIHByZXZpb3VzbHkga25vd24gYXMgQ1VSTElORk9fSFRUUF9DT0RFIGluCitsaWJjdXJsIDcuMTAuNyBhbmQgZWFybGllci4gVGhlIHZhbHVlIHdpbGwgYmUgemVybyBpZiBubyBzZXJ2ZXIgcmVzcG9uc2UgY29kZQoraGFzIGJlZW4gcmVjZWl2ZWQuIE5vdGUgdGhhdCBhIHByb3h5J3MgQ09OTkVDVCByZXNwb25zZSBzaG91bGQgYmUgcmVhZCB3aXRoCitcZklDVVJMSU5GT19IVFRQX0NPTk5FQ1RDT0RFXGZQIGFuZCBub3QgdGhpcy4KKworU3VwcG9ydCBmb3IgU01UUCByZXNwb25zZXMgYWRkZWQgaW4gNy4yNS4wLgorLklQIENVUkxJTkZPX0hUVFBfQ09OTkVDVENPREUKK1Bhc3MgYSBwb2ludGVyIHRvIGEgbG9uZyB0byByZWNlaXZlIHRoZSBsYXN0IHJlY2VpdmVkIHByb3h5IHJlc3BvbnNlIGNvZGUgdG8gYQorQ09OTkVDVCByZXF1ZXN0LgorLklQIENVUkxJTkZPX0ZJTEVUSU1FCitQYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgcmVtb3RlIHRpbWUgb2YgdGhlIHJldHJpZXZlZCBkb2N1bWVudAorKGluIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIDEgamFuIDE5NzAgaW4gdGhlIEdNVC9VVEMgdGltZSB6b25lKS4gSWYgeW91IGdldAorLTEsIGl0IGNhbiBiZSBiZWNhdXNlIG9mIG1hbnkgcmVhc29ucyAodW5rbm93biwgdGhlIHNlcnZlciBoaWRlcyBpdCBvciB0aGUKK3NlcnZlciBkb2Vzbid0IHN1cHBvcnQgdGhlIGNvbW1hbmQgdGhhdCB0ZWxscyBkb2N1bWVudCB0aW1lIGV0YykgYW5kIHRoZSB0aW1lCitvZiB0aGUgZG9jdW1lbnQgaXMgdW5rbm93bi4gTm90ZSB0aGF0IHlvdSBtdXN0IHRlbGwgdGhlIHNlcnZlciB0byBjb2xsZWN0IHRoaXMKK2luZm9ybWF0aW9uIGJlZm9yZSB0aGUgdHJhbnNmZXIgaXMgbWFkZSwgYnkgdXNpbmcgdGhlIENVUkxPUFRfRklMRVRJTUUgb3B0aW9uCit0byBcZkljdXJsX2Vhc3lfc2V0b3B0KDMpXGZQIG9yIHlvdSB3aWxsIHVuY29uZGl0aW9uYWxseSBnZXQgYSAtMSBiYWNrLiAoQWRkZWQKK2luIDcuNSkKKy5JUCBDVVJMSU5GT19UT1RBTF9USU1FCitQYXNzIGEgcG9pbnRlciB0byBhIGRvdWJsZSB0byByZWNlaXZlIHRoZSB0b3RhbCB0aW1lIGluIHNlY29uZHMgZm9yIHRoZQorcHJldmlvdXMgdHJhbnNmZXIsIGluY2x1ZGluZyBuYW1lIHJlc29sdmluZywgVENQIGNvbm5lY3QgZXRjLgorLklQIENVUkxJTkZPX05BTUVMT09LVVBfVElNRQorUGFzcyBhIHBvaW50ZXIgdG8gYSBkb3VibGUgdG8gcmVjZWl2ZSB0aGUgdGltZSwgaW4gc2Vjb25kcywgaXQgdG9vayBmcm9tIHRoZQorc3RhcnQgdW50aWwgdGhlIG5hbWUgcmVzb2x2aW5nIHdhcyBjb21wbGV0ZWQuCisuSVAgQ1VSTElORk9fQ09OTkVDVF9USU1FCitQYXNzIGEgcG9pbnRlciB0byBhIGRvdWJsZSB0byByZWNlaXZlIHRoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlCitzdGFydCB1bnRpbCB0aGUgY29ubmVjdCB0byB0aGUgcmVtb3RlIGhvc3QgKG9yIHByb3h5KSB3YXMgY29tcGxldGVkLgorLklQIENVUkxJTkZPX0FQUENPTk5FQ1RfVElNRQorUGFzcyBhIHBvaW50ZXIgdG8gYSBkb3VibGUgdG8gcmVjZWl2ZSB0aGUgdGltZSwgaW4gc2Vjb25kcywgaXQgdG9vayBmcm9tIHRoZQorc3RhcnQgdW50aWwgdGhlIFNTTC9TU0ggY29ubmVjdC9oYW5kc2hha2UgdG8gdGhlIHJlbW90ZSBob3N0IHdhcyBjb21wbGV0ZWQuCitUaGlzIHRpbWUgaXMgbW9zdCBvZnRlbiB2ZXJ5IG5lYXIgdG8gdGhlIFBSRVRSQU5TRkVSIHRpbWUsIGV4Y2VwdCBmb3IgY2FzZXMKK3N1Y2ggYXMgSFRUUCBwaXBwZWxpbmluZyB3aGVyZSB0aGUgcHJldHJhbnNmZXIgdGltZSBjYW4gYmUgZGVsYXllZCBkdWUgdG8KK3dhaXRzIGluIGxpbmUgZm9yIHRoZSBwaXBlbGluZSBhbmQgbW9yZS4gKEFkZGVkIGluIDcuMTkuMCkKKy5JUCBDVVJMSU5GT19QUkVUUkFOU0ZFUl9USU1FCitQYXNzIGEgcG9pbnRlciB0byBhIGRvdWJsZSB0byByZWNlaXZlIHRoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlCitzdGFydCB1bnRpbCB0aGUgZmlsZSB0cmFuc2ZlciBpcyBqdXN0IGFib3V0IHRvIGJlZ2luLiBUaGlzIGluY2x1ZGVzIGFsbAorcHJlLXRyYW5zZmVyIGNvbW1hbmRzIGFuZCBuZWdvdGlhdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIHBhcnRpY3VsYXIKK3Byb3RvY29sKHMpIGludm9sdmVkLiBJdCBkb2VzIFxmSW5vdFxmUCBpbnZvbHZlIHRoZSBzZW5kaW5nIG9mIHRoZSBwcm90b2NvbC0KK3NwZWNpZmljIHJlcXVlc3QgdGhhdCB0cmlnZ2VycyBhIHRyYW5zZmVyLgorLklQIENVUkxJTkZPX1NUQVJUVFJBTlNGRVJfVElNRQorUGFzcyBhIHBvaW50ZXIgdG8gYSBkb3VibGUgdG8gcmVjZWl2ZSB0aGUgdGltZSwgaW4gc2Vjb25kcywgaXQgdG9vayBmcm9tIHRoZQorc3RhcnQgdW50aWwgdGhlIGZpcnN0IGJ5dGUgaXMgcmVjZWl2ZWQgYnkgbGliY3VybC4gVGhpcyBpbmNsdWRlcworQ1VSTElORk9fUFJFVFJBTlNGRVJfVElNRSBhbmQgYWxzbyB0aGUgdGltZSB0aGUgc2VydmVyIG5lZWRzIHRvIGNhbGN1bGF0ZSB0aGUKK3Jlc3VsdC4KKy5JUCBDVVJMSU5GT19SRURJUkVDVF9USU1FCitQYXNzIGEgcG9pbnRlciB0byBhIGRvdWJsZSB0byByZWNlaXZlIHRoZSB0b3RhbCB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZvcgorYWxsIHJlZGlyZWN0aW9uIHN0ZXBzIGluY2x1ZGUgbmFtZSBsb29rdXAsIGNvbm5lY3QsIHByZXRyYW5zZmVyIGFuZCB0cmFuc2ZlcgorYmVmb3JlIGZpbmFsIHRyYW5zYWN0aW9uIHdhcyBzdGFydGVkLiBDVVJMSU5GT19SRURJUkVDVF9USU1FIGNvbnRhaW5zIHRoZQorY29tcGxldGUgZXhlY3V0aW9uIHRpbWUgZm9yIG11bHRpcGxlIHJlZGlyZWN0aW9ucy4gIChBZGRlZCBpbiA3LjkuNykKKy5JUCBDVVJMSU5GT19SRURJUkVDVF9DT1VOVAorUGFzcyBhIHBvaW50ZXIgdG8gYSBsb25nIHRvIHJlY2VpdmUgdGhlIHRvdGFsIG51bWJlciBvZiByZWRpcmVjdGlvbnMgdGhhdCB3ZXJlCithY3R1YWxseSBmb2xsb3dlZC4gIChBZGRlZCBpbiA3LjkuNykKKy5JUCBDVVJMSU5GT19SRURJUkVDVF9VUkwKK1Bhc3MgYSBwb2ludGVyIHRvIGEgY2hhciBwb2ludGVyIHRvIHJlY2VpdmUgdGhlIFVSTCBhIHJlZGlyZWN0IFxmSXdvdWxkXGZQCit0YWtlIHlvdSB0byBpZiB5b3Ugd291bGQgZW5hYmxlIENVUkxPUFRfRk9MTE9XTE9DQVRJT04uIFRoaXMgY2FuIGNvbWUgdmVyeQoraGFuZHkgaWYgeW91IHRoaW5rIHVzaW5nIHRoZSBidWlsdC1pbiBsaWJjdXJsIHJlZGlyZWN0IGxvZ2ljIGlzbid0IGdvb2QgZW5vdWdoCitmb3IgeW91IGJ1dCB5b3Ugd291bGQgc3RpbGwgcHJlZmVyIHRvIGF2b2lkIGltcGxlbWVudGluZyBhbGwgdGhlIG1hZ2ljIG9mCitmaWd1cmluZyBvdXQgdGhlIG5ldyBVUkwuIChBZGRlZCBpbiA3LjE4LjIpCisuSVAgQ1VSTElORk9fU0laRV9VUExPQUQKK1Bhc3MgYSBwb2ludGVyIHRvIGEgZG91YmxlIHRvIHJlY2VpdmUgdGhlIHRvdGFsIGFtb3VudCBvZiBieXRlcyB0aGF0IHdlcmUKK3VwbG9hZGVkLgorLklQIENVUkxJTkZPX1NJWkVfRE9XTkxPQUQKK1Bhc3MgYSBwb2ludGVyIHRvIGEgZG91YmxlIHRvIHJlY2VpdmUgdGhlIHRvdGFsIGFtb3VudCBvZiBieXRlcyB0aGF0IHdlcmUKK2Rvd25sb2FkZWQuIFRoZSBhbW91bnQgaXMgb25seSBmb3IgdGhlIGxhdGVzdCB0cmFuc2ZlciBhbmQgd2lsbCBiZSByZXNldCBhZ2FpbgorZm9yIGVhY2ggbmV3IHRyYW5zZmVyLgorLklQIENVUkxJTkZPX1NQRUVEX0RPV05MT0FECitQYXNzIGEgcG9pbnRlciB0byBhIGRvdWJsZSB0byByZWNlaXZlIHRoZSBhdmVyYWdlIGRvd25sb2FkIHNwZWVkIHRoYXQgY3VybAorbWVhc3VyZWQgZm9yIHRoZSBjb21wbGV0ZSBkb3dubG9hZC4gTWVhc3VyZWQgaW4gYnl0ZXMvc2Vjb25kLgorLklQIENVUkxJTkZPX1NQRUVEX1VQTE9BRAorUGFzcyBhIHBvaW50ZXIgdG8gYSBkb3VibGUgdG8gcmVjZWl2ZSB0aGUgYXZlcmFnZSB1cGxvYWQgc3BlZWQgdGhhdCBjdXJsCittZWFzdXJlZCBmb3IgdGhlIGNvbXBsZXRlIHVwbG9hZC4gTWVhc3VyZWQgaW4gYnl0ZXMvc2Vjb25kLgorLklQIENVUkxJTkZPX0hFQURFUl9TSVpFCitQYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgdG90YWwgc2l6ZSBvZiBhbGwgdGhlIGhlYWRlcnMKK3JlY2VpdmVkLiBNZWFzdXJlZCBpbiBudW1iZXIgb2YgYnl0ZXMuCisuSVAgQ1VSTElORk9fUkVRVUVTVF9TSVpFCitQYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgaXNzdWVkCityZXF1ZXN0cy4gVGhpcyBpcyBzbyBmYXIgb25seSBmb3IgSFRUUCByZXF1ZXN0cy4gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIG1vcmUKK3RoYW4gb25lIHJlcXVlc3QgaWYgRk9MTE9XTE9DQVRJT04gaXMgdHJ1ZS4KKy5JUCBDVVJMSU5GT19TU0xfVkVSSUZZUkVTVUxUCitQYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgcmVzdWx0IG9mIHRoZSBjZXJ0aWZpY2F0aW9uCit2ZXJpZmljYXRpb24gdGhhdCB3YXMgcmVxdWVzdGVkICh1c2luZyB0aGUgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiBvcHRpb24gdG8KK1xmSWN1cmxfZWFzeV9zZXRvcHQoMylcZlApLgorLklQIENVUkxJTkZPX1NTTF9FTkdJTkVTCitQYXNzIHRoZSBhZGRyZXNzIG9mIGEgJ3N0cnVjdCBjdXJsX3NsaXN0IConIHRvIHJlY2VpdmUgYSBsaW5rZWQtbGlzdCBvZgorT3BlblNTTCBjcnlwdG8tZW5naW5lcyBzdXBwb3J0ZWQuIE5vdGUgdGhhdCBlbmdpbmVzIGFyZSBub3JtYWxseSBpbXBsZW1lbnRlZAoraW4gc2VwYXJhdGUgZHluYW1pYyBsaWJyYXJpZXMuIEhlbmNlIG5vdCBhbGwgdGhlIHJldHVybmVkIGVuZ2luZXMgbWF5IGJlCithdmFpbGFibGUgYXQgcnVuLXRpbWUuIFxmQk5PVEU6XGZQIHlvdSBtdXN0IGNhbGwgXGZJY3VybF9zbGlzdF9mcmVlX2FsbCgzKVxmUAorb24gdGhlIGxpc3QgcG9pbnRlciBvbmNlIHlvdSdyZSBkb25lIHdpdGggaXQsIGFzIGxpYmN1cmwgd2lsbCBub3QgZnJlZSB0aGUKK2RhdGEgZm9yIHlvdS4gKEFkZGVkIGluIDcuMTIuMykKKy5JUCBDVVJMSU5GT19DT05URU5UX0xFTkdUSF9ET1dOTE9BRAorUGFzcyBhIHBvaW50ZXIgdG8gYSBkb3VibGUgdG8gcmVjZWl2ZSB0aGUgY29udGVudC1sZW5ndGggb2YgdGhlIGRvd25sb2FkLiBUaGlzCitpcyB0aGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBDb250ZW50LUxlbmd0aDogZmllbGQuIFNpbmNlIDcuMTkuNCwgdGhpcyByZXR1cm5zIC0xCitpZiB0aGUgc2l6ZSBpc24ndCBrbm93bi4KKy5JUCBDVVJMSU5GT19DT05URU5UX0xFTkdUSF9VUExPQUQKK1Bhc3MgYSBwb2ludGVyIHRvIGEgZG91YmxlIHRvIHJlY2VpdmUgdGhlIHNwZWNpZmllZCBzaXplIG9mIHRoZSB1cGxvYWQuICBTaW5jZQorNy4xOS40LCB0aGlzIHJldHVybnMgLTEgaWYgdGhlIHNpemUgaXNuJ3Qga25vd24uCisuSVAgQ1VSTElORk9fQ09OVEVOVF9UWVBFCitQYXNzIGEgcG9pbnRlciB0byBhIGNoYXIgcG9pbnRlciB0byByZWNlaXZlIHRoZSBjb250ZW50LXR5cGUgb2YgdGhlIGRvd25sb2FkZWQKK29iamVjdC4gVGhpcyBpcyB0aGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBDb250ZW50LVR5cGU6IGZpZWxkLiBJZiB5b3UgZ2V0IE5VTEwsCitpdCBtZWFucyB0aGF0IHRoZSBzZXJ2ZXIgZGlkbid0IHNlbmQgYSB2YWxpZCBDb250ZW50LVR5cGUgaGVhZGVyIG9yIHRoYXQgdGhlCitwcm90b2NvbCB1c2VkIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzLgorLklQIENVUkxJTkZPX1BSSVZBVEUKK1Bhc3MgYSBwb2ludGVyIHRvIGEgY2hhciBwb2ludGVyIHRvIHJlY2VpdmUgdGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgZGF0YQorYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJsIGhhbmRsZSAoc2V0IHdpdGggdGhlIENVUkxPUFRfUFJJVkFURSBvcHRpb24gdG8KK1xmSWN1cmxfZWFzeV9zZXRvcHQoMylcZlApLiBQbGVhc2Ugbm90ZSB0aGF0IGZvciBpbnRlcm5hbCByZWFzb25zLCB0aGUKK3ZhbHVlIGlzIHJldHVybmVkIGFzIGEgY2hhciBwb2ludGVyLCBhbHRob3VnaCBlZmZlY3RpdmVseSBiZWluZyBhICd2b2lkIConLgorKEFkZGVkIGluIDcuMTAuMykKKy5JUCBDVVJMSU5GT19IVFRQQVVUSF9BVkFJTAorUGFzcyBhIHBvaW50ZXIgdG8gYSBsb25nIHRvIHJlY2VpdmUgYSBiaXRtYXNrIGluZGljYXRpbmcgdGhlIGF1dGhlbnRpY2F0aW9uCittZXRob2QocykgYXZhaWxhYmxlLiBUaGUgbWVhbmluZyBvZiB0aGUgYml0cyBpcyBleHBsYWluZWQgaW4gdGhlCitDVVJMT1BUX0hUVFBBVVRIIG9wdGlvbiBmb3IgXGZJY3VybF9lYXN5X3NldG9wdCgzKVxmUC4gIChBZGRlZCBpbiA3LjEwLjgpCisuSVAgQ1VSTElORk9fUFJPWFlBVVRIX0FWQUlMCitQYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSBhIGJpdG1hc2sgaW5kaWNhdGluZyB0aGUgYXV0aGVudGljYXRpb24KK21ldGhvZChzKSBhdmFpbGFibGUgZm9yIHlvdXIgcHJveHkgYXV0aGVudGljYXRpb24uICAoQWRkZWQgaW4gNy4xMC44KQorLklQIENVUkxJTkZPX09TX0VSUk5PCitQYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgZXJybm8gdmFyaWFibGUgZnJvbSBhIGNvbm5lY3QgZmFpbHVyZS4KK05vdGUgdGhhdCB0aGUgdmFsdWUgaXMgb25seSBzZXQgb24gZmFpbHVyZSwgaXQgaXMgbm90IHJlc2V0IHVwb24gYQorc3VjY2Vzc2Z1bGwgb3BlcmF0aW9uLiAgKEFkZGVkIGluIDcuMTIuMikKKy5JUCBDVVJMSU5GT19OVU1fQ09OTkVDVFMKK1Bhc3MgYSBwb2ludGVyIHRvIGEgbG9uZyB0byByZWNlaXZlIGhvdyBtYW55IG5ldyBjb25uZWN0aW9ucyBsaWJjdXJsIGhhZCB0bworY3JlYXRlIHRvIGFjaGlldmUgdGhlIHByZXZpb3VzIHRyYW5zZmVyIChvbmx5IHRoZSBzdWNjZXNzZnVsIGNvbm5lY3RzIGFyZQorY291bnRlZCkuICBDb21iaW5lZCB3aXRoIFxmSUNVUkxJTkZPX1JFRElSRUNUX0NPVU5UXGZQIHlvdSBhcmUgYWJsZSB0byBrbm93Citob3cgbWFueSB0aW1lcyBsaWJjdXJsIHN1Y2Nlc3NmdWxseSByZXVzZWQgZXhpc3RpbmcgY29ubmVjdGlvbihzKSBvciBub3QuICBTZWUKK3RoZSBDb25uZWN0aW9uIE9wdGlvbnMgb2YgXGZJY3VybF9lYXN5X3NldG9wdCgzKVxmUCB0byBzZWUgaG93IGxpYmN1cmwgdHJpZXMKK3RvIG1ha2UgcGVyc2lzdGVudCBjb25uZWN0aW9ucyB0byBzYXZlIHRpbWUuICAoQWRkZWQgaW4gNy4xMi4zKQorLklQIENVUkxJTkZPX1BSSU1BUllfSVAKK1Bhc3MgYSBwb2ludGVyIHRvIGEgY2hhciBwb2ludGVyIHRvIHJlY2VpdmUgdGhlIHBvaW50ZXIgdG8gYSB6ZXJvLXRlcm1pbmF0ZWQKK3N0cmluZyBob2xkaW5nIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBtb3N0IHJlY2VudCBjb25uZWN0aW9uIGRvbmUgd2l0aCB0aGlzCitcZkJjdXJsXGZQIGhhbmRsZS4gVGhpcyBzdHJpbmcgbWF5IGJlIElQdjYgaWYgdGhhdCdzIGVuYWJsZWQuIE5vdGUgdGhhdCB5b3UKK2dldCBhIHBvaW50ZXIgdG8gYSBtZW1vcnkgYXJlYSB0aGF0IHdpbGwgYmUgcmUtdXNlZCBhdCBuZXh0IHJlcXVlc3Qgc28geW91CituZWVkIHRvIGNvcHkgdGhlIHN0cmluZyBpZiB5b3Ugd2FudCB0byBrZWVwIHRoZSBpbmZvcm1hdGlvbi4gKEFkZGVkIGluIDcuMTkuMCkKKy5JUCBDVVJMSU5GT19QUklNQVJZX1BPUlQKK1Bhc3MgYSBwb2ludGVyIHRvIGEgbG9uZyB0byByZWNlaXZlIHRoZSBkZXN0aW5hdGlvbiBwb3J0IG9mIHRoZSBtb3N0IHJlY2VudAorY29ubmVjdGlvbiBkb25lIHdpdGggdGhpcyBcZkJjdXJsXGZQIGhhbmRsZS4gKEFkZGVkIGluIDcuMjEuMCkKKy5JUCBDVVJMSU5GT19MT0NBTF9JUAorUGFzcyBhIHBvaW50ZXIgdG8gYSBjaGFyIHBvaW50ZXIgdG8gcmVjZWl2ZSB0aGUgcG9pbnRlciB0byBhIHplcm8tdGVybWluYXRlZAorc3RyaW5nIGhvbGRpbmcgdGhlIGxvY2FsIChzb3VyY2UpIElQIGFkZHJlc3Mgb2YgdGhlIG1vc3QgcmVjZW50IGNvbm5lY3Rpb24gZG9uZQord2l0aCB0aGlzIFxmQmN1cmxcZlAgaGFuZGxlLiBUaGlzIHN0cmluZyBtYXkgYmUgSVB2NiBpZiB0aGF0J3MgZW5hYmxlZC4gVGhlCitzYW1lIHJlc3RyaWN0aW9ucyBhcHBseSBhcyB0byBcZklDVVJMSU5GT19QUklNQVJZX0lQXGZQLiAoQWRkZWQgaW4gNy4yMS4wKQorLklQIENVUkxJTkZPX0xPQ0FMX1BPUlQKK1Bhc3MgYSBwb2ludGVyIHRvIGEgbG9uZyB0byByZWNlaXZlIHRoZSBsb2NhbCAoc291cmNlKSBwb3J0IG9mIHRoZSBtb3N0IHJlY2VudAorY29ubmVjdGlvbiBkb25lIHdpdGggdGhpcyBcZkJjdXJsXGZQIGhhbmRsZS4gKEFkZGVkIGluIDcuMjEuMCkKKy5JUCBDVVJMSU5GT19DT09LSUVMSVNUCitQYXNzIGEgcG9pbnRlciB0byBhICdzdHJ1Y3QgY3VybF9zbGlzdCAqJyB0byByZWNlaXZlIGEgbGlua2VkLWxpc3Qgb2YgYWxsCitjb29raWVzIGNVUkwga25vd3MgKGV4cGlyZWQgb25lcywgdG9vKS4gRG9uJ3QgZm9yZ2V0IHRvCitcZkljdXJsX3NsaXN0X2ZyZWVfYWxsKDMpXGZQIHRoZSBsaXN0IGFmdGVyIGl0IGhhcyBiZWVuIHVzZWQuICBJZiB0aGVyZSBhcmUgbm8KK2Nvb2tpZXMgKGNvb2tpZXMgZm9yIHRoZSBoYW5kbGUgaGF2ZSBub3QgYmVlbiBlbmFibGVkIG9yIHNpbXBseSBub25lIGhhdmUgYmVlbgorcmVjZWl2ZWQpICdzdHJ1Y3QgY3VybF9zbGlzdCAqJyB3aWxsIGJlIHNldCB0byBwb2ludCB0byBOVUxMLiAoQWRkZWQgaW4KKzcuMTQuMSkKKy5JUCBDVVJMSU5GT19MQVNUU09DS0VUCitQYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgbGFzdCBzb2NrZXQgdXNlZCBieSB0aGlzIGN1cmwKK3Nlc3Npb24uIElmIHRoZSBzb2NrZXQgaXMgbm8gbG9uZ2VyIHZhbGlkLCAtMSBpcyByZXR1cm5lZC4gV2hlbiB5b3UgZmluaXNoCit3b3JraW5nIHdpdGggdGhlIHNvY2tldCwgeW91IG11c3QgY2FsbCBjdXJsX2Vhc3lfY2xlYW51cCgpIGFzIHVzdWFsIGFuZCBsZXQKK2xpYmN1cmwgY2xvc2UgdGhlIHNvY2tldCBhbmQgY2xlYW51cCBvdGhlciByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZQoraGFuZGxlLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggXGZJQ1VSTE9QVF9DT05ORUNUX09OTFlcZlAuCisoQWRkZWQgaW4gNy4xNS4yKQorCitOT1RFOiB0aGlzIEFQSSBpcyBub3QgcmVhbGx5IHdvcmtpbmcgb24gd2luNjQsIHNpbmNlIHRoZSBTT0NLRVQgdHlwZSBvbiB3aW42NAoraXMgNjQgYml0IGxhcmdlIHdoaWxlIGl0cyAnbG9uZycgaXMgb25seSAzMiBiaXRzLgorLklQIENVUkxJTkZPX0ZUUF9FTlRSWV9QQVRICitQYXNzIGEgcG9pbnRlciB0byBhIGNoYXIgcG9pbnRlciB0byByZWNlaXZlIGEgcG9pbnRlciB0byBhIHN0cmluZyBob2xkaW5nIHRoZQorcGF0aCBvZiB0aGUgZW50cnkgcGF0aC4gVGhhdCBpcyB0aGUgaW5pdGlhbCBwYXRoIGxpYmN1cmwgZW5kZWQgdXAgaW4gd2hlbgorbG9nZ2luZyBvbiB0byB0aGUgcmVtb3RlIEZUUCBzZXJ2ZXIuIFRoaXMgc3RvcmVzIGEgTlVMTCBhcyBwb2ludGVyIGlmCitzb21ldGhpbmcgaXMgd3JvbmcuIChBZGRlZCBpbiA3LjE1LjQpCisKK0Fsc28gd29ya3MgZm9yIFNGVFAgc2luY2UgNy4yMS40CisuSVAgQ1VSTElORk9fQ0VSVElORk8KK1Bhc3MgYSBwb2ludGVyIHRvIGEgJ3N0cnVjdCBjdXJsX2NlcnRpbmZvIConIGFuZCB5b3UnbGwgZ2V0IGl0IHNldCB0byBwb2ludCB0bworc3RydWN0IHRoYXQgaG9sZHMgYSBudW1iZXIgb2YgbGlua2VkIGxpc3RzIHdpdGggaW5mbyBhYm91dCB0aGUgY2VydGlmaWNhdGUKK2NoYWluLCBhc3N1bWluZyB5b3UgaGFkIENVUkxPUFRfQ0VSVElORk8gZW5hYmxlZCB3aGVuIHRoZSBwcmV2aW91cyByZXF1ZXN0IHdhcworZG9uZS4gVGhlIHN0cnVjdCByZXBvcnRzIGhvdyBtYW55IGNlcnRzIGl0IGZvdW5kIGFuZCB0aGVuIHlvdSBjYW4gZXh0cmFjdCBpbmZvCitmb3IgZWFjaCBvZiB0aG9zZSBjZXJ0cyBieSBmb2xsb3dpbmcgdGhlIGxpbmtlZCBsaXN0cy4gVGhlIGluZm8gY2hhaW4gaXMKK3Byb3ZpZGVkIGluIGEgc2VyaWVzIG9mIGRhdGEgaW4gdGhlIGZvcm1hdCAibmFtZTpjb250ZW50IiB3aGVyZSB0aGUgY29udGVudCBpcworZm9yIHRoZSBzcGVjaWZpYyBuYW1lZCBkYXRhLiBTZWUgYWxzbyB0aGUgY2VydGluZm8uYyBleGFtcGxlLiBOT1RFOiB0aGlzCitvcHRpb24gaXMgb25seSBhdmFpbGFibGUgaW4gbGliY3VybCBidWlsdCB3aXRoIE9wZW5TU0wgc3VwcG9ydC4gKEFkZGVkIGluCis3LjE5LjEpCisuSVAgQ1VSTElORk9fQ09ORElUSU9OX1VOTUVUCitQYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgbnVtYmVyIDEgaWYgdGhlIGNvbmRpdGlvbiBwcm92aWRlZCBpbgordGhlIHByZXZpb3VzIHJlcXVlc3QgZGlkbid0IG1hdGNoIChzZWUgXGZJQ1VSTE9QVF9USU1FQ09ORElUSU9OXGZQKS4gQWxhcywgaWYKK3RoaXMgcmV0dXJucyBhIDEgeW91IGtub3cgdGhhdCB0aGUgcmVhc29uIHlvdSBkaWRuJ3QgZ2V0IGRhdGEgaW4gcmV0dXJuIGlzCitiZWNhdXNlIGl0IGRpZG4ndCBmdWxmaWxsIHRoZSBjb25kaXRpb24uIFRoZSBsb25nIHRocyBhcmd1bWVudCBwb2ludHMgdG8gd2lsbAorZ2V0IGEgemVybyBzdG9yZWQgaWYgdGhlIGNvbmRpdGlvbiBpbnN0ZWFkIHdhcyBtZXQuIChBZGRlZCBpbiA3LjE5LjQpCisuSVAgQ1VSTElORk9fUlRTUF9TRVNTSU9OX0lECitQYXNzIGEgcG9pbnRlciB0byBhIGNoYXIgcG9pbnRlciB0byByZWNlaXZlIGEgcG9pbnRlciB0byBhIHN0cmluZyBob2xkaW5nIHRoZQorbW9zdCByZWNlbnQgUlRTUCBTZXNzaW9uIElELgorCitBcHBsaWNhdGlvbnMgd2lzaGluZyB0byByZXN1bWUgYW4gUlRTUCBzZXNzaW9uIG9uIGFub3RoZXIgY29ubmVjdGlvbiBzaG91bGQKK3JldHJlaXZlIHRoaXMgaW5mbyBiZWZvcmUgY2xvc2luZyB0aGUgYWN0aXZlIGNvbm5lY3Rpb24uCisuSVAgQ1VSTElORk9fUlRTUF9DTElFTlRfQ1NFUQorUGFzcyBhIHBvaW50ZXIgdG8gYSBsb25nIHRvIHJlY2VpdmUgdGhlIG5leHQgQ1NlcSB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUKK2FwcGxpY2F0aW9uLgorLklQIENVUkxJTkZPX1JUU1BfU0VSVkVSX0NTRVEKK1Bhc3MgYSBwb2ludGVyIHRvIGEgbG9uZyB0byByZWNlaXZlIHRoZSBuZXh0IHNlcnZlciBDU2VxIHRoYXQgd2lsbCBiZSBleHBlY3RlZAorYnkgdGhlIGFwcGxpY2F0aW9uLgorCitcZkkoTk9URTogbGlzdGVuaW5nIGZvciBzZXJ2ZXIgaW5pdGlhdGVkIHJlcXVlc3RzIGlzIGN1cnJlbnRseQordW5pbXBsZW1lbnRlZCkuXGZQCisKK0FwcGxpY2F0aW9ucyB3aXNoaW5nIHRvIHJlc3VtZSBhbiBSVFNQIHNlc3Npb24gb24gYW5vdGhlciBjb25uZWN0aW9uIHNob3VsZAorcmV0cmVpdmUgdGhpcyBpbmZvIGJlZm9yZSBjbG9zaW5nIHRoZSBhY3RpdmUgY29ubmVjdGlvbi4KKy5JUCBDVVJMSU5GT19SVFNQX0NTRVFfUkVDVgorUGFzcyBhIHBvaW50ZXIgdG8gYSBsb25nIHRvIHJlY2VpdmUgdGhlIG1vc3QgcmVjZW50bHkgcmVjZWl2ZWQgQ1NlcSBmcm9tIHRoZQorc2VydmVyLiBJZiB5b3VyIGFwcGxpY2F0aW9uIGVuY291bnRlcnMgYSBcZklDVVJMRV9SVFNQX0NTRVFfRVJST1JcZlAgdGhlbiB5b3UKK21heSB3aXNoIHRvIHRyb3VibGVzaG9vdCBhbmQvb3IgZml4IHRoZSBDU2VxIG1pc21hdGNoIGJ5IHBlZWtpbmcgYXQgdGhpcyB2YWx1ZS4KKy5TSCBUSU1FUworLm5mCitBbiBvdmVydmlldyBvZiB0aGUgc2l4IHRpbWUgdmFsdWVzIGF2YWlsYWJsZSBmcm9tIGN1cmxfZWFzeV9nZXRpbmZvKCkKKworY3VybF9lYXN5X3BlcmZvcm0oKQorICAgIHwKKyAgICB8LS1OQU1FTE9PS1VQCisgICAgfC0tfC0tQ09OTkVDVAorICAgIHwtLXwtLXwtLUFQUENPTk5FQ1QKKyAgICB8LS18LS18LS18LS1QUkVUUkFOU0ZFUgorICAgIHwtLXwtLXwtLXwtLXwtLVNUQVJUVFJBTlNGRVIKKyAgICB8LS18LS18LS18LS18LS18LS1UT1RBTAorICAgIHwtLXwtLXwtLXwtLXwtLXwtLVJFRElSRUNUCisuZmkKKy5JUCBOQU1FTE9PS1VQCitcZklDVVJMSU5GT19OQU1FTE9PS1VQX1RJTUVcZlAuIFRoZSB0aW1lIGl0IHRvb2sgZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIG5hbWUKK3Jlc29sdmluZyB3YXMgY29tcGxldGVkLgorLklQIENPTk5FQ1QKK1xmSUNVUkxJTkZPX0NPTk5FQ1RfVElNRVxmUC4gVGhlIHRpbWUgaXQgdG9vayBmcm9tIHRoZSBzdGFydCB1bnRpbCB0aGUgY29ubmVjdAordG8gdGhlIHJlbW90ZSBob3N0IChvciBwcm94eSkgd2FzIGNvbXBsZXRlZC4KKy5JUCBBUFBDT05ORUNUCitcZklDVVJMSU5GT19BUFBDT05ORUNUX1RJTUVcZlAuIFRoZSB0aW1lIGl0IHRvb2sgZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIFNTTAorY29ubmVjdC9oYW5kc2hha2Ugd2l0aCB0aGUgcmVtb3RlIGhvc3Qgd2FzIGNvbXBsZXRlZC4gKEFkZGVkIGluIGluIDcuMTkuMCkKKy5JUCBQUkVUUkFOU0ZFUgorXGZJQ1VSTElORk9fUFJFVFJBTlNGRVJfVElNRVxmUC4gVGhlIHRpbWUgaXQgdG9vayBmcm9tIHRoZSBzdGFydCB1bnRpbCB0aGUKK2ZpbGUgdHJhbnNmZXIgaXMganVzdCBhYm91dCB0byBiZWdpbi4gVGhpcyBpbmNsdWRlcyBhbGwgcHJlLXRyYW5zZmVyIGNvbW1hbmRzCithbmQgbmVnb3RpYXRpb25zIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBwYXJ0aWN1bGFyIHByb3RvY29sKHMpIGludm9sdmVkLgorLklQIFNUQVJUVFJBTlNGRVIKK1xmSUNVUkxJTkZPX1NUQVJUVFJBTlNGRVJfVElNRVxmUC4gVGhlIHRpbWUgaXQgdG9vayBmcm9tIHRoZSBzdGFydCB1bnRpbCB0aGUKK2ZpcnN0IGJ5dGUgaXMgcmVjZWl2ZWQgYnkgbGliY3VybC4KKy5JUCBUT1RBTAorXGZJQ1VSTElORk9fVE9UQUxfVElNRVxmUC4gVG90YWwgdGltZSBvZiB0aGUgcHJldmlvdXMgcmVxdWVzdC4KKy5JUCBSRURJUkVDVAorXGZJQ1VSTElORk9fUkVESVJFQ1RfVElNRVxmUC4gVGhlIHRpbWUgaXQgdG9vayBmb3IgYWxsIHJlZGlyZWN0aW9uIHN0ZXBzCitpbmNsdWRlIG5hbWUgbG9va3VwLCBjb25uZWN0LCBwcmV0cmFuc2ZlciBhbmQgdHJhbnNmZXIgYmVmb3JlIGZpbmFsCit0cmFuc2FjdGlvbiB3YXMgc3RhcnRlZC4gU28sIHRoaXMgaXMgemVybyBpZiBubyByZWRpcmVjdGlvbiB0b29rIHBsYWNlLgorLlNIIFJFVFVSTiBWQUxVRQorSWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgQ1VSTEVfT0sgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSBhbgorYXBwcm9wcmlhdGUgZXJyb3IgY29kZSB3aWxsIGJlIHJldHVybmVkLgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX2Vhc3lfc2V0b3B0ICIoMykiCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X2dldGluZm8uaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfZ2V0aW5mby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzJjYjQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X2dldGluZm8uaHRtbApAQCAtMCwwICsxLDE2NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfZWFzeV9nZXRpbmZvIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfZWFzeV9nZXRpbmZvIC0gZXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIGEgY3VybCBoYW5kbGUgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj4jaW5jbHVkZSAmbHQ7Y3VybC9jdXJsLmgmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5DVVJMY29kZSBjdXJsX2Vhc3lfZ2V0aW5mbyhDVVJMICpjdXJsLCBDVVJMSU5GTyBpbmZvLCAuLi4gKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlJlcXVlc3QgaW50ZXJuYWwgaW5mb3JtYXRpb24gZnJvbSB0aGUgY3VybCBzZXNzaW9uIHdpdGggdGhpcyBmdW5jdGlvbi4gIFRoZSB0aGlyZCBhcmd1bWVudCA8c3BhbiBDbGFzcz0iYm9sZCI+TVVTVDwvc3Bhbj4gYmUgYSBwb2ludGVyIHRvIGEgbG9uZywgYSBwb2ludGVyIHRvIGEgY2hhciAqLCBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgY3VybF9zbGlzdCAqIG9yIGEgcG9pbnRlciB0byBhIGRvdWJsZSAoYXMgdGhpcyBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyBmdXJ0aGVyIGRvd24pLiAgVGhlIGRhdGEgcG9pbnRlZC10byB3aWxsIGJlIGZpbGxlZCBpbiBhY2NvcmRpbmdseSBhbmQgY2FuIGJlIHJlbGllZCB1cG9uIG9ubHkgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgQ1VSTEVfT0suICBVc2UgdGhpcyBmdW5jdGlvbiBBRlRFUiBhIHBlcmZvcm1lZCB0cmFuc2ZlciBpZiB5b3Ugd2FudCB0byBnZXQgdHJhbnNmZXItIG9yaWVudGVkIGRhdGEuIAorPHAgY2xhc3M9ImxldmVsMCI+WW91IHNob3VsZCBub3QgZnJlZSB0aGUgbWVtb3J5IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gdW5sZXNzIGl0IGlzIGV4cGxpY2l0bHkgbWVudGlvbmVkIGJlbG93LiA8YSBuYW1lPSJBVkFJTEFCTEUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkFWQUlMQUJMRSBJTkZPUk1BVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGNhbiBiZSBleHRyYWN0ZWQ6IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTElORk9FRkZFQ1RJVkVVUkwiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fRUZGRUNUSVZFX1VSTDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGNoYXIgcG9pbnRlciB0byByZWNlaXZlIHRoZSBsYXN0IHVzZWQgZWZmZWN0aXZlIFVSTC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT1JFU1BPTlNFQ09ERSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19SRVNQT05TRV9DT0RFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgbG9uZyB0byByZWNlaXZlIHRoZSBsYXN0IHJlY2VpdmVkIEhUVFAsIEZUUCBvciBTTVRQIHJlc3BvbnNlIGNvZGUuIFRoaXMgb3B0aW9uIHdhcyBwcmV2aW91c2x5IGtub3duIGFzIENVUkxJTkZPX0hUVFBfQ09ERSBpbiBsaWJjdXJsIDcuMTAuNyBhbmQgZWFybGllci4gVGhlIHZhbHVlIHdpbGwgYmUgemVybyBpZiBubyBzZXJ2ZXIgcmVzcG9uc2UgY29kZSBoYXMgYmVlbiByZWNlaXZlZC4gTm90ZSB0aGF0IGEgcHJveHkncyBDT05ORUNUIHJlc3BvbnNlIHNob3VsZCBiZSByZWFkIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTElORk9IVFRQQ09OTkVDVENPREUiPkNVUkxJTkZPX0hUVFBfQ09OTkVDVENPREU8L2E+IGFuZCBub3QgdGhpcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TdXBwb3J0IGZvciBTTVRQIHJlc3BvbnNlcyBhZGRlZCBpbiA3LjI1LjAuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTElORk9IVFRQQ09OTkVDVENPREUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fSFRUUF9DT05ORUNUQ09ERTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgbGFzdCByZWNlaXZlZCBwcm94eSByZXNwb25zZSBjb2RlIHRvIGEgQ09OTkVDVCByZXF1ZXN0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPRklMRVRJTUUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fRklMRVRJTUU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBsb25nIHRvIHJlY2VpdmUgdGhlIHJlbW90ZSB0aW1lIG9mIHRoZSByZXRyaWV2ZWQgZG9jdW1lbnQgKGluIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIDEgamFuIDE5NzAgaW4gdGhlIEdNVC9VVEMgdGltZSB6b25lKS4gSWYgeW91IGdldCAtMSwgaXQgY2FuIGJlIGJlY2F1c2Ugb2YgbWFueSByZWFzb25zICh1bmtub3duLCB0aGUgc2VydmVyIGhpZGVzIGl0IG9yIHRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHRoZSBjb21tYW5kIHRoYXQgdGVsbHMgZG9jdW1lbnQgdGltZSBldGMpIGFuZCB0aGUgdGltZSBvZiB0aGUgZG9jdW1lbnQgaXMgdW5rbm93bi4gTm90ZSB0aGF0IHlvdSBtdXN0IHRlbGwgdGhlIHNlcnZlciB0byBjb2xsZWN0IHRoaXMgaW5mb3JtYXRpb24gYmVmb3JlIHRoZSB0cmFuc2ZlciBpcyBtYWRlLCBieSB1c2luZyB0aGUgQ1VSTE9QVF9GSUxFVElNRSBvcHRpb24gdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9zZXRvcHQuaHRtbCI+Y3VybF9lYXN5X3NldG9wdCgzKTwvYT4gb3IgeW91IHdpbGwgdW5jb25kaXRpb25hbGx5IGdldCBhIC0xIGJhY2suIChBZGRlZCBpbiA3LjUpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTElORk9UT1RBTFRJTUUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fVE9UQUxfVElNRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGRvdWJsZSB0byByZWNlaXZlIHRoZSB0b3RhbCB0aW1lIGluIHNlY29uZHMgZm9yIHRoZSBwcmV2aW91cyB0cmFuc2ZlciwgaW5jbHVkaW5nIG5hbWUgcmVzb2x2aW5nLCBUQ1AgY29ubmVjdCBldGMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTElORk9OQU1FTE9PS1VQVElNRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19OQU1FTE9PS1VQX1RJTUU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBkb3VibGUgdG8gcmVjZWl2ZSB0aGUgdGltZSwgaW4gc2Vjb25kcywgaXQgdG9vayBmcm9tIHRoZSBzdGFydCB1bnRpbCB0aGUgbmFtZSByZXNvbHZpbmcgd2FzIGNvbXBsZXRlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT0NPTk5FQ1RUSU1FIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX0NPTk5FQ1RfVElNRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGRvdWJsZSB0byByZWNlaXZlIHRoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBjb25uZWN0IHRvIHRoZSByZW1vdGUgaG9zdCAob3IgcHJveHkpIHdhcyBjb21wbGV0ZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTElORk9BUFBDT05ORUNUVElNRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19BUFBDT05ORUNUX1RJTUU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBkb3VibGUgdG8gcmVjZWl2ZSB0aGUgdGltZSwgaW4gc2Vjb25kcywgaXQgdG9vayBmcm9tIHRoZSBzdGFydCB1bnRpbCB0aGUgU1NML1NTSCBjb25uZWN0L2hhbmRzaGFrZSB0byB0aGUgcmVtb3RlIGhvc3Qgd2FzIGNvbXBsZXRlZC4gVGhpcyB0aW1lIGlzIG1vc3Qgb2Z0ZW4gdmVyeSBuZWFyIHRvIHRoZSBQUkVUUkFOU0ZFUiB0aW1lLCBleGNlcHQgZm9yIGNhc2VzIHN1Y2ggYXMgSFRUUCBwaXBwZWxpbmluZyB3aGVyZSB0aGUgcHJldHJhbnNmZXIgdGltZSBjYW4gYmUgZGVsYXllZCBkdWUgdG8gd2FpdHMgaW4gbGluZSBmb3IgdGhlIHBpcGVsaW5lIGFuZCBtb3JlLiAoQWRkZWQgaW4gNy4xOS4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPUFJFVFJBTlNGRVJUSU1FIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX1BSRVRSQU5TRkVSX1RJTUU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBkb3VibGUgdG8gcmVjZWl2ZSB0aGUgdGltZSwgaW4gc2Vjb25kcywgaXQgdG9vayBmcm9tIHRoZSBzdGFydCB1bnRpbCB0aGUgZmlsZSB0cmFuc2ZlciBpcyBqdXN0IGFib3V0IHRvIGJlZ2luLiBUaGlzIGluY2x1ZGVzIGFsbCBwcmUtdHJhbnNmZXIgY29tbWFuZHMgYW5kIG5lZ290aWF0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgcGFydGljdWxhciBwcm90b2NvbChzKSBpbnZvbHZlZC4gSXQgZG9lcyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPm5vdDwvc3Bhbj4gaW52b2x2ZSB0aGUgc2VuZGluZyBvZiB0aGUgcHJvdG9jb2wtIHNwZWNpZmljIHJlcXVlc3QgdGhhdCB0cmlnZ2VycyBhIHRyYW5zZmVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPU1RBUlRUUkFOU0ZFUlRJTUUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgZG91YmxlIHRvIHJlY2VpdmUgdGhlIHRpbWUsIGluIHNlY29uZHMsIGl0IHRvb2sgZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIGZpcnN0IGJ5dGUgaXMgcmVjZWl2ZWQgYnkgbGliY3VybC4gVGhpcyBpbmNsdWRlcyBDVVJMSU5GT19QUkVUUkFOU0ZFUl9USU1FIGFuZCBhbHNvIHRoZSB0aW1lIHRoZSBzZXJ2ZXIgbmVlZHMgdG8gY2FsY3VsYXRlIHRoZSByZXN1bHQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTElORk9SRURJUkVDVFRJTUUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fUkVESVJFQ1RfVElNRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGRvdWJsZSB0byByZWNlaXZlIHRoZSB0b3RhbCB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZvciBhbGwgcmVkaXJlY3Rpb24gc3RlcHMgaW5jbHVkZSBuYW1lIGxvb2t1cCwgY29ubmVjdCwgcHJldHJhbnNmZXIgYW5kIHRyYW5zZmVyIGJlZm9yZSBmaW5hbCB0cmFuc2FjdGlvbiB3YXMgc3RhcnRlZC4gQ1VSTElORk9fUkVESVJFQ1RfVElNRSBjb250YWlucyB0aGUgY29tcGxldGUgZXhlY3V0aW9uIHRpbWUgZm9yIG11bHRpcGxlIHJlZGlyZWN0aW9ucy4gIChBZGRlZCBpbiA3LjkuNykgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT1JFRElSRUNUQ09VTlQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fUkVESVJFQ1RfQ09VTlQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBsb25nIHRvIHJlY2VpdmUgdGhlIHRvdGFsIG51bWJlciBvZiByZWRpcmVjdGlvbnMgdGhhdCB3ZXJlIGFjdHVhbGx5IGZvbGxvd2VkLiAgKEFkZGVkIGluIDcuOS43KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPUkVESVJFQ1RVUkwiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fUkVESVJFQ1RfVVJMPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgY2hhciBwb2ludGVyIHRvIHJlY2VpdmUgdGhlIFVSTCBhIHJlZGlyZWN0IDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+d291bGQ8L3NwYW4+IHRha2UgeW91IHRvIGlmIHlvdSB3b3VsZCBlbmFibGUgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTi4gVGhpcyBjYW4gY29tZSB2ZXJ5IGhhbmR5IGlmIHlvdSB0aGluayB1c2luZyB0aGUgYnVpbHQtaW4gbGliY3VybCByZWRpcmVjdCBsb2dpYyBpc24ndCBnb29kIGVub3VnaCBmb3IgeW91IGJ1dCB5b3Ugd291bGQgc3RpbGwgcHJlZmVyIHRvIGF2b2lkIGltcGxlbWVudGluZyBhbGwgdGhlIG1hZ2ljIG9mIGZpZ3VyaW5nIG91dCB0aGUgbmV3IFVSTC4gKEFkZGVkIGluIDcuMTguMikgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT1NJWkVVUExPQUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fU0laRV9VUExPQUQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBkb3VibGUgdG8gcmVjZWl2ZSB0aGUgdG90YWwgYW1vdW50IG9mIGJ5dGVzIHRoYXQgd2VyZSB1cGxvYWRlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT1NJWkVET1dOTE9BRCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19TSVpFX0RPV05MT0FEPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgZG91YmxlIHRvIHJlY2VpdmUgdGhlIHRvdGFsIGFtb3VudCBvZiBieXRlcyB0aGF0IHdlcmUgZG93bmxvYWRlZC4gVGhlIGFtb3VudCBpcyBvbmx5IGZvciB0aGUgbGF0ZXN0IHRyYW5zZmVyIGFuZCB3aWxsIGJlIHJlc2V0IGFnYWluIGZvciBlYWNoIG5ldyB0cmFuc2Zlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT1NQRUVERE9XTkxPQUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fU1BFRURfRE9XTkxPQUQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBkb3VibGUgdG8gcmVjZWl2ZSB0aGUgYXZlcmFnZSBkb3dubG9hZCBzcGVlZCB0aGF0IGN1cmwgbWVhc3VyZWQgZm9yIHRoZSBjb21wbGV0ZSBkb3dubG9hZC4gTWVhc3VyZWQgaW4gYnl0ZXMvc2Vjb25kLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPU1BFRURVUExPQUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fU1BFRURfVVBMT0FEPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgZG91YmxlIHRvIHJlY2VpdmUgdGhlIGF2ZXJhZ2UgdXBsb2FkIHNwZWVkIHRoYXQgY3VybCBtZWFzdXJlZCBmb3IgdGhlIGNvbXBsZXRlIHVwbG9hZC4gTWVhc3VyZWQgaW4gYnl0ZXMvc2Vjb25kLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPSEVBREVSU0laRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19IRUFERVJfU0laRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgdG90YWwgc2l6ZSBvZiBhbGwgdGhlIGhlYWRlcnMgcmVjZWl2ZWQuIE1lYXN1cmVkIGluIG51bWJlciBvZiBieXRlcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT1JFUVVFU1RTSVpFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX1JFUVVFU1RfU0laRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgaXNzdWVkIHJlcXVlc3RzLiBUaGlzIGlzIHNvIGZhciBvbmx5IGZvciBIVFRQIHJlcXVlc3RzLiBOb3RlIHRoYXQgdGhpcyBtYXkgYmUgbW9yZSB0aGFuIG9uZSByZXF1ZXN0IGlmIEZPTExPV0xPQ0FUSU9OIGlzIHRydWUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTElORk9TU0xWRVJJRllSRVNVTFQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fU1NMX1ZFUklGWVJFU1VMVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgcmVzdWx0IG9mIHRoZSBjZXJ0aWZpY2F0aW9uIHZlcmlmaWNhdGlvbiB0aGF0IHdhcyByZXF1ZXN0ZWQgKHVzaW5nIHRoZSBDVVJMT1BUX1NTTF9WRVJJRllQRUVSIG9wdGlvbiB0byA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3NldG9wdC5odG1sIj5jdXJsX2Vhc3lfc2V0b3B0KDMpPC9hPikuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTElORk9TU0xFTkdJTkVTIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX1NTTF9FTkdJTkVTPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgdGhlIGFkZHJlc3Mgb2YgYSAnc3RydWN0IGN1cmxfc2xpc3QgKicgdG8gcmVjZWl2ZSBhIGxpbmtlZC1saXN0IG9mIE9wZW5TU0wgY3J5cHRvLWVuZ2luZXMgc3VwcG9ydGVkLiBOb3RlIHRoYXQgZW5naW5lcyBhcmUgbm9ybWFsbHkgaW1wbGVtZW50ZWQgaW4gc2VwYXJhdGUgZHluYW1pYyBsaWJyYXJpZXMuIEhlbmNlIG5vdCBhbGwgdGhlIHJldHVybmVkIGVuZ2luZXMgbWF5IGJlIGF2YWlsYWJsZSBhdCBydW4tdGltZS4gPHNwYW4gQ2xhc3M9ImJvbGQiPk5PVEU6PC9zcGFuPiB5b3UgbXVzdCBjYWxsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX3NsaXN0X2ZyZWVfYWxsLmh0bWwiPmN1cmxfc2xpc3RfZnJlZV9hbGwoMyk8L2E+IG9uIHRoZSBsaXN0IHBvaW50ZXIgb25jZSB5b3UncmUgZG9uZSB3aXRoIGl0LCBhcyBsaWJjdXJsIHdpbGwgbm90IGZyZWUgdGhlIGRhdGEgZm9yIHlvdS4gKEFkZGVkIGluIDcuMTIuMykgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT0NPTlRFTlRMRU5HVEhET1dOTE9BRCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19DT05URU5UX0xFTkdUSF9ET1dOTE9BRDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGRvdWJsZSB0byByZWNlaXZlIHRoZSBjb250ZW50LWxlbmd0aCBvZiB0aGUgZG93bmxvYWQuIFRoaXMgaXMgdGhlIHZhbHVlIHJlYWQgZnJvbSB0aGUgQ29udGVudC1MZW5ndGg6IGZpZWxkLiBTaW5jZSA3LjE5LjQsIHRoaXMgcmV0dXJucyAtMSBpZiB0aGUgc2l6ZSBpc24ndCBrbm93bi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT0NPTlRFTlRMRU5HVEhVUExPQUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fQ09OVEVOVF9MRU5HVEhfVVBMT0FEPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgZG91YmxlIHRvIHJlY2VpdmUgdGhlIHNwZWNpZmllZCBzaXplIG9mIHRoZSB1cGxvYWQuICBTaW5jZSA3LjE5LjQsIHRoaXMgcmV0dXJucyAtMSBpZiB0aGUgc2l6ZSBpc24ndCBrbm93bi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT0NPTlRFTlRUWVBFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX0NPTlRFTlRfVFlQRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGNoYXIgcG9pbnRlciB0byByZWNlaXZlIHRoZSBjb250ZW50LXR5cGUgb2YgdGhlIGRvd25sb2FkZWQgb2JqZWN0LiBUaGlzIGlzIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIENvbnRlbnQtVHlwZTogZmllbGQuIElmIHlvdSBnZXQgTlVMTCwgaXQgbWVhbnMgdGhhdCB0aGUgc2VydmVyIGRpZG4ndCBzZW5kIGEgdmFsaWQgQ29udGVudC1UeXBlIGhlYWRlciBvciB0aGF0IHRoZSBwcm90b2NvbCB1c2VkIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPUFJJVkFURSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19QUklWQVRFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgY2hhciBwb2ludGVyIHRvIHJlY2VpdmUgdGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cmwgaGFuZGxlIChzZXQgd2l0aCB0aGUgQ1VSTE9QVF9QUklWQVRFIG9wdGlvbiB0byA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3NldG9wdC5odG1sIj5jdXJsX2Vhc3lfc2V0b3B0KDMpPC9hPikuIFBsZWFzZSBub3RlIHRoYXQgZm9yIGludGVybmFsIHJlYXNvbnMsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCBhcyBhIGNoYXIgcG9pbnRlciwgYWx0aG91Z2ggZWZmZWN0aXZlbHkgYmVpbmcgYSAndm9pZCAqJy4gKEFkZGVkIGluIDcuMTAuMykgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT0hUVFBBVVRIQVZBSUwiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fSFRUUEFVVEhfQVZBSUw8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBsb25nIHRvIHJlY2VpdmUgYSBiaXRtYXNrIGluZGljYXRpbmcgdGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZChzKSBhdmFpbGFibGUuIFRoZSBtZWFuaW5nIG9mIHRoZSBiaXRzIGlzIGV4cGxhaW5lZCBpbiB0aGUgQ1VSTE9QVF9IVFRQQVVUSCBvcHRpb24gZm9yIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwiPmN1cmxfZWFzeV9zZXRvcHQoMyk8L2E+LiAgKEFkZGVkIGluIDcuMTAuOCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT1BST1hZQVVUSEFWQUlMIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX1BST1hZQVVUSF9BVkFJTDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSBhIGJpdG1hc2sgaW5kaWNhdGluZyB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kKHMpIGF2YWlsYWJsZSBmb3IgeW91ciBwcm94eSBhdXRoZW50aWNhdGlvbi4gIChBZGRlZCBpbiA3LjEwLjgpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTElORk9PU0VSUk5PIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX09TX0VSUk5PPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgbG9uZyB0byByZWNlaXZlIHRoZSBlcnJubyB2YXJpYWJsZSBmcm9tIGEgY29ubmVjdCBmYWlsdXJlLiBOb3RlIHRoYXQgdGhlIHZhbHVlIGlzIG9ubHkgc2V0IG9uIGZhaWx1cmUsIGl0IGlzIG5vdCByZXNldCB1cG9uIGEgc3VjY2Vzc2Z1bGwgb3BlcmF0aW9uLiAgKEFkZGVkIGluIDcuMTIuMikgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT05VTUNPTk5FQ1RTIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX05VTV9DT05ORUNUUzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSBob3cgbWFueSBuZXcgY29ubmVjdGlvbnMgbGliY3VybCBoYWQgdG8gY3JlYXRlIHRvIGFjaGlldmUgdGhlIHByZXZpb3VzIHRyYW5zZmVyIChvbmx5IHRoZSBzdWNjZXNzZnVsIGNvbm5lY3RzIGFyZSBjb3VudGVkKS4gIENvbWJpbmVkIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTElORk9SRURJUkVDVENPVU5UIj5DVVJMSU5GT19SRURJUkVDVF9DT1VOVDwvYT4geW91IGFyZSBhYmxlIHRvIGtub3cgaG93IG1hbnkgdGltZXMgbGliY3VybCBzdWNjZXNzZnVsbHkgcmV1c2VkIGV4aXN0aW5nIGNvbm5lY3Rpb24ocykgb3Igbm90LiAgU2VlIHRoZSBDb25uZWN0aW9uIE9wdGlvbnMgb2YgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9zZXRvcHQuaHRtbCI+Y3VybF9lYXN5X3NldG9wdCgzKTwvYT4gdG8gc2VlIGhvdyBsaWJjdXJsIHRyaWVzIHRvIG1ha2UgcGVyc2lzdGVudCBjb25uZWN0aW9ucyB0byBzYXZlIHRpbWUuICAoQWRkZWQgaW4gNy4xMi4zKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPUFJJTUFSWUlQIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX1BSSU1BUllfSVA8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBjaGFyIHBvaW50ZXIgdG8gcmVjZWl2ZSB0aGUgcG9pbnRlciB0byBhIHplcm8tdGVybWluYXRlZCBzdHJpbmcgaG9sZGluZyB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgbW9zdCByZWNlbnQgY29ubmVjdGlvbiBkb25lIHdpdGggdGhpcyA8c3BhbiBDbGFzcz0iYm9sZCI+Y3VybDwvc3Bhbj4gaGFuZGxlLiBUaGlzIHN0cmluZyBtYXkgYmUgSVB2NiBpZiB0aGF0J3MgZW5hYmxlZC4gTm90ZSB0aGF0IHlvdSBnZXQgYSBwb2ludGVyIHRvIGEgbWVtb3J5IGFyZWEgdGhhdCB3aWxsIGJlIHJlLXVzZWQgYXQgbmV4dCByZXF1ZXN0IHNvIHlvdSBuZWVkIHRvIGNvcHkgdGhlIHN0cmluZyBpZiB5b3Ugd2FudCB0byBrZWVwIHRoZSBpbmZvcm1hdGlvbi4gKEFkZGVkIGluIDcuMTkuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT1BSSU1BUllQT1JUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX1BSSU1BUllfUE9SVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgZGVzdGluYXRpb24gcG9ydCBvZiB0aGUgbW9zdCByZWNlbnQgY29ubmVjdGlvbiBkb25lIHdpdGggdGhpcyA8c3BhbiBDbGFzcz0iYm9sZCI+Y3VybDwvc3Bhbj4gaGFuZGxlLiAoQWRkZWQgaW4gNy4yMS4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPTE9DQUxJUCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19MT0NBTF9JUDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGNoYXIgcG9pbnRlciB0byByZWNlaXZlIHRoZSBwb2ludGVyIHRvIGEgemVyby10ZXJtaW5hdGVkIHN0cmluZyBob2xkaW5nIHRoZSBsb2NhbCAoc291cmNlKSBJUCBhZGRyZXNzIG9mIHRoZSBtb3N0IHJlY2VudCBjb25uZWN0aW9uIGRvbmUgd2l0aCB0aGlzIDxzcGFuIENsYXNzPSJib2xkIj5jdXJsPC9zcGFuPiBoYW5kbGUuIFRoaXMgc3RyaW5nIG1heSBiZSBJUHY2IGlmIHRoYXQncyBlbmFibGVkLiBUaGUgc2FtZSByZXN0cmljdGlvbnMgYXBwbHkgYXMgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTElORk9QUklNQVJZSVAiPkNVUkxJTkZPX1BSSU1BUllfSVA8L2E+LiAoQWRkZWQgaW4gNy4yMS4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPTE9DQUxQT1JUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX0xPQ0FMX1BPUlQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBsb25nIHRvIHJlY2VpdmUgdGhlIGxvY2FsIChzb3VyY2UpIHBvcnQgb2YgdGhlIG1vc3QgcmVjZW50IGNvbm5lY3Rpb24gZG9uZSB3aXRoIHRoaXMgPHNwYW4gQ2xhc3M9ImJvbGQiPmN1cmw8L3NwYW4+IGhhbmRsZS4gKEFkZGVkIGluIDcuMjEuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT0NPT0tJRUxJU1QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fQ09PS0lFTElTVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhICdzdHJ1Y3QgY3VybF9zbGlzdCAqJyB0byByZWNlaXZlIGEgbGlua2VkLWxpc3Qgb2YgYWxsIGNvb2tpZXMgY1VSTCBrbm93cyAoZXhwaXJlZCBvbmVzLCB0b28pLiBEb24ndCBmb3JnZXQgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfc2xpc3RfZnJlZV9hbGwuaHRtbCI+Y3VybF9zbGlzdF9mcmVlX2FsbCgzKTwvYT4gdGhlIGxpc3QgYWZ0ZXIgaXQgaGFzIGJlZW4gdXNlZC4gIElmIHRoZXJlIGFyZSBubyBjb29raWVzIChjb29raWVzIGZvciB0aGUgaGFuZGxlIGhhdmUgbm90IGJlZW4gZW5hYmxlZCBvciBzaW1wbHkgbm9uZSBoYXZlIGJlZW4gcmVjZWl2ZWQpICdzdHJ1Y3QgY3VybF9zbGlzdCAqJyB3aWxsIGJlIHNldCB0byBwb2ludCB0byBOVUxMLiAoQWRkZWQgaW4gNy4xNC4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPTEFTVFNPQ0tFVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19MQVNUU09DS0VUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgbG9uZyB0byByZWNlaXZlIHRoZSBsYXN0IHNvY2tldCB1c2VkIGJ5IHRoaXMgY3VybCBzZXNzaW9uLiBJZiB0aGUgc29ja2V0IGlzIG5vIGxvbmdlciB2YWxpZCwgLTEgaXMgcmV0dXJuZWQuIFdoZW4geW91IGZpbmlzaCB3b3JraW5nIHdpdGggdGhlIHNvY2tldCwgeW91IG11c3QgY2FsbCBjdXJsX2Vhc3lfY2xlYW51cCgpIGFzIHVzdWFsIGFuZCBsZXQgbGliY3VybCBjbG9zZSB0aGUgc29ja2V0IGFuZCBjbGVhbnVwIG90aGVyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGhhbmRsZS4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTE9QVF9DT05ORUNUX09OTFk8L3NwYW4+LiAoQWRkZWQgaW4gNy4xNS4yKSAKKzxwIGNsYXNzPSJsZXZlbDEiPk5PVEU6IHRoaXMgQVBJIGlzIG5vdCByZWFsbHkgd29ya2luZyBvbiB3aW42NCwgc2luY2UgdGhlIFNPQ0tFVCB0eXBlIG9uIHdpbjY0IGlzIDY0IGJpdCBsYXJnZSB3aGlsZSBpdHMgJ2xvbmcnIGlzIG9ubHkgMzIgYml0cy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT0ZUUEVOVFJZUEFUSCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19GVFBfRU5UUllfUEFUSDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGNoYXIgcG9pbnRlciB0byByZWNlaXZlIGEgcG9pbnRlciB0byBhIHN0cmluZyBob2xkaW5nIHRoZSBwYXRoIG9mIHRoZSBlbnRyeSBwYXRoLiBUaGF0IGlzIHRoZSBpbml0aWFsIHBhdGggbGliY3VybCBlbmRlZCB1cCBpbiB3aGVuIGxvZ2dpbmcgb24gdG8gdGhlIHJlbW90ZSBGVFAgc2VydmVyLiBUaGlzIHN0b3JlcyBhIE5VTEwgYXMgcG9pbnRlciBpZiBzb21ldGhpbmcgaXMgd3JvbmcuIChBZGRlZCBpbiA3LjE1LjQpIAorPHAgY2xhc3M9ImxldmVsMSI+QWxzbyB3b3JrcyBmb3IgU0ZUUCBzaW5jZSA3LjIxLjQgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT0NFUlRJTkZPIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX0NFUlRJTkZPPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgJ3N0cnVjdCBjdXJsX2NlcnRpbmZvIConIGFuZCB5b3UnbGwgZ2V0IGl0IHNldCB0byBwb2ludCB0byBzdHJ1Y3QgdGhhdCBob2xkcyBhIG51bWJlciBvZiBsaW5rZWQgbGlzdHMgd2l0aCBpbmZvIGFib3V0IHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiwgYXNzdW1pbmcgeW91IGhhZCBDVVJMT1BUX0NFUlRJTkZPIGVuYWJsZWQgd2hlbiB0aGUgcHJldmlvdXMgcmVxdWVzdCB3YXMgZG9uZS4gVGhlIHN0cnVjdCByZXBvcnRzIGhvdyBtYW55IGNlcnRzIGl0IGZvdW5kIGFuZCB0aGVuIHlvdSBjYW4gZXh0cmFjdCBpbmZvIGZvciBlYWNoIG9mIHRob3NlIGNlcnRzIGJ5IGZvbGxvd2luZyB0aGUgbGlua2VkIGxpc3RzLiBUaGUgaW5mbyBjaGFpbiBpcyBwcm92aWRlZCBpbiBhIHNlcmllcyBvZiBkYXRhIGluIHRoZSBmb3JtYXQgIm5hbWU6Y29udGVudCIgd2hlcmUgdGhlIGNvbnRlbnQgaXMgZm9yIHRoZSBzcGVjaWZpYyBuYW1lZCBkYXRhLiBTZWUgYWxzbyB0aGUgY2VydGluZm8uYyBleGFtcGxlLiBOT1RFOiB0aGlzIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpbiBsaWJjdXJsIGJ1aWx0IHdpdGggT3BlblNTTCBzdXBwb3J0LiAoQWRkZWQgaW4gNy4xOS4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPQ09ORElUSU9OVU5NRVQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fQ09ORElUSU9OX1VOTUVUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgbG9uZyB0byByZWNlaXZlIHRoZSBudW1iZXIgMSBpZiB0aGUgY29uZGl0aW9uIHByb3ZpZGVkIGluIHRoZSBwcmV2aW91cyByZXF1ZXN0IGRpZG4ndCBtYXRjaCAoc2VlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTE9QVF9USU1FQ09ORElUSU9OPC9zcGFuPikuIEFsYXMsIGlmIHRoaXMgcmV0dXJucyBhIDEgeW91IGtub3cgdGhhdCB0aGUgcmVhc29uIHlvdSBkaWRuJ3QgZ2V0IGRhdGEgaW4gcmV0dXJuIGlzIGJlY2F1c2UgaXQgZGlkbid0IGZ1bGZpbGwgdGhlIGNvbmRpdGlvbi4gVGhlIGxvbmcgdGhzIGFyZ3VtZW50IHBvaW50cyB0byB3aWxsIGdldCBhIHplcm8gc3RvcmVkIGlmIHRoZSBjb25kaXRpb24gaW5zdGVhZCB3YXMgbWV0LiAoQWRkZWQgaW4gNy4xOS40KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPUlRTUFNFU1NJT05JRCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19SVFNQX1NFU1NJT05fSUQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBjaGFyIHBvaW50ZXIgdG8gcmVjZWl2ZSBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgaG9sZGluZyB0aGUgbW9zdCByZWNlbnQgUlRTUCBTZXNzaW9uIElELiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFwcGxpY2F0aW9ucyB3aXNoaW5nIHRvIHJlc3VtZSBhbiBSVFNQIHNlc3Npb24gb24gYW5vdGhlciBjb25uZWN0aW9uIHNob3VsZCByZXRyZWl2ZSB0aGlzIGluZm8gYmVmb3JlIGNsb3NpbmcgdGhlIGFjdGl2ZSBjb25uZWN0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxJTkZPUlRTUENMSUVOVENTRVEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fUlRTUF9DTElFTlRfQ1NFUTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgbmV4dCBDU2VxIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT1JUU1BTRVJWRVJDU0VRIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX1JUU1BfU0VSVkVSX0NTRVE8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBsb25nIHRvIHJlY2VpdmUgdGhlIG5leHQgc2VydmVyIENTZXEgdGhhdCB3aWxsIGJlIGV4cGVjdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPihOT1RFOiBsaXN0ZW5pbmcgZm9yIHNlcnZlciBpbml0aWF0ZWQgcmVxdWVzdHMgaXMgY3VycmVudGx5IHVuaW1wbGVtZW50ZWQpLjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BcHBsaWNhdGlvbnMgd2lzaGluZyB0byByZXN1bWUgYW4gUlRTUCBzZXNzaW9uIG9uIGFub3RoZXIgY29ubmVjdGlvbiBzaG91bGQgcmV0cmVpdmUgdGhpcyBpbmZvIGJlZm9yZSBjbG9zaW5nIHRoZSBhY3RpdmUgY29ubmVjdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMSU5GT1JUU1BDU0VRUkVDViI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19SVFNQX0NTRVFfUkVDVjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgbW9zdCByZWNlbnRseSByZWNlaXZlZCBDU2VxIGZyb20gdGhlIHNlcnZlci4gSWYgeW91ciBhcHBsaWNhdGlvbiBlbmNvdW50ZXJzIGEgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMRV9SVFNQX0NTRVFfRVJST1I8L3NwYW4+IHRoZW4geW91IG1heSB3aXNoIHRvIHRyb3VibGVzaG9vdCBhbmQvb3IgZml4IHRoZSBDU2VxIG1pc21hdGNoIGJ5IHBlZWtpbmcgYXQgdGhpcyB2YWx1ZS4gPGEgbmFtZT0iVElNRVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlRJTUVTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+QW4gb3ZlcnZpZXcgb2YgdGhlIHNpeCB0aW1lIHZhbHVlcyBhdmFpbGFibGUgZnJvbSBjdXJsX2Vhc3lfZ2V0aW5mbygpIAorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9lYXN5X3BlcmZvcm0oKSAmbmJzcDsgICB8ICZuYnNwOyAgIHwtLU5BTUVMT09LVVAgJm5ic3A7ICAgfC0tfC0tQ09OTkVDVCAmbmJzcDsgICB8LS18LS18LS1BUFBDT05ORUNUICZuYnNwOyAgIHwtLXwtLXwtLXwtLVBSRVRSQU5TRkVSICZuYnNwOyAgIHwtLXwtLXwtLXwtLXwtLVNUQVJUVFJBTlNGRVIgJm5ic3A7ICAgfC0tfC0tfC0tfC0tfC0tfC0tVE9UQUwgJm5ic3A7ICAgfC0tfC0tfC0tfC0tfC0tfC0tUkVESVJFQ1QgCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUVMT09LVVAiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+TkFNRUxPT0tVUDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMSU5GT05BTUVMT09LVVBUSU1FIj5DVVJMSU5GT19OQU1FTE9PS1VQX1RJTUU8L2E+LiBUaGUgdGltZSBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBuYW1lIHJlc29sdmluZyB3YXMgY29tcGxldGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNPTk5FQ1QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q09OTkVDVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMSU5GT0NPTk5FQ1RUSU1FIj5DVVJMSU5GT19DT05ORUNUX1RJTUU8L2E+LiBUaGUgdGltZSBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBjb25uZWN0IHRvIHRoZSByZW1vdGUgaG9zdCAob3IgcHJveHkpIHdhcyBjb21wbGV0ZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQVBQQ09OTkVDVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5BUFBDT05ORUNUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxJTkZPQVBQQ09OTkVDVFRJTUUiPkNVUkxJTkZPX0FQUENPTk5FQ1RfVElNRTwvYT4uIFRoZSB0aW1lIGl0IHRvb2sgZnJvbSB0aGUgc3RhcnQgdW50aWwgdGhlIFNTTCBjb25uZWN0L2hhbmRzaGFrZSB3aXRoIHRoZSByZW1vdGUgaG9zdCB3YXMgY29tcGxldGVkLiAoQWRkZWQgaW4gaW4gNy4xOS4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IlBSRVRSQU5TRkVSIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPlBSRVRSQU5TRkVSPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxJTkZPUFJFVFJBTlNGRVJUSU1FIj5DVVJMSU5GT19QUkVUUkFOU0ZFUl9USU1FPC9hPi4gVGhlIHRpbWUgaXQgdG9vayBmcm9tIHRoZSBzdGFydCB1bnRpbCB0aGUgZmlsZSB0cmFuc2ZlciBpcyBqdXN0IGFib3V0IHRvIGJlZ2luLiBUaGlzIGluY2x1ZGVzIGFsbCBwcmUtdHJhbnNmZXIgY29tbWFuZHMgYW5kIG5lZ290aWF0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgcGFydGljdWxhciBwcm90b2NvbChzKSBpbnZvbHZlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJTVEFSVFRSQU5TRkVSIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPlNUQVJUVFJBTlNGRVI8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+PGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTElORk9TVEFSVFRSQU5TRkVSVElNRSI+Q1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FPC9hPi4gVGhlIHRpbWUgaXQgdG9vayBmcm9tIHRoZSBzdGFydCB1bnRpbCB0aGUgZmlyc3QgYnl0ZSBpcyByZWNlaXZlZCBieSBsaWJjdXJsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IlRPVEFMIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPlRPVEFMPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxJTkZPVE9UQUxUSU1FIj5DVVJMSU5GT19UT1RBTF9USU1FPC9hPi4gVG90YWwgdGltZSBvZiB0aGUgcHJldmlvdXMgcmVxdWVzdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJSRURJUkVDVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5SRURJUkVDVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMSU5GT1JFRElSRUNUVElNRSI+Q1VSTElORk9fUkVESVJFQ1RfVElNRTwvYT4uIFRoZSB0aW1lIGl0IHRvb2sgZm9yIGFsbCByZWRpcmVjdGlvbiBzdGVwcyBpbmNsdWRlIG5hbWUgbG9va3VwLCBjb25uZWN0LCBwcmV0cmFuc2ZlciBhbmQgdHJhbnNmZXIgYmVmb3JlIGZpbmFsIHRyYW5zYWN0aW9uIHdhcyBzdGFydGVkLiBTbywgdGhpcyBpcyB6ZXJvIGlmIG5vIHJlZGlyZWN0aW9uIHRvb2sgcGxhY2UuIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPklmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwsIENVUkxFX09LIGlzIHJldHVybmVkLiBPdGhlcndpc2UgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSB3aWxsIGJlIHJldHVybmVkLiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9zZXRvcHQuaHRtbCI+Y3VybF9lYXN5X3NldG9wdCAoMyk8L2E+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9nZXRpbmZvLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfZ2V0aW5mby5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDViYzBkOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfZ2V0aW5mby5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9pbml0LjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X2luaXQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzdiYTMyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9pbml0LjMKQEAgLTAsMCArMSw1MSBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF9lYXN5X2luaXQgMyAiNCBNYXJjaCAyMDAyIiAibGliY3VybCA3LjguMSIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfZWFzeV9pbml0IC0gU3RhcnQgYSBsaWJjdXJsIGVhc3kgc2Vzc2lvbgorLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKy5CSSAiQ1VSTCAqY3VybF9lYXN5X2luaXQoICk7IgorCisuU0ggREVTQ1JJUFRJT04KK1RoaXMgZnVuY3Rpb24gbXVzdCBiZSB0aGUgZmlyc3QgZnVuY3Rpb24gdG8gY2FsbCwgYW5kIGl0IHJldHVybnMgYSBDVVJMIGVhc3kKK2hhbmRsZSB0aGF0IHlvdSBtdXN0IHVzZSBhcyBpbnB1dCB0byBvdGhlciBlYXN5LWZ1bmN0aW9ucy4gY3VybF9lYXN5X2luaXQKK2luaXRpYWxpemVzIGN1cmwgYW5kIHRoaXMgY2FsbCBcZkJNVVNUXGZQIGhhdmUgYSBjb3JyZXNwb25kaW5nIGNhbGwgdG8KK1xmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS4KKworSWYgeW91IGRpZCBub3QgYWxyZWFkeSBjYWxsIFxmSWN1cmxfZ2xvYmFsX2luaXQoMylcZlAsCitcZkljdXJsX2Vhc3lfaW5pdCgzKVxmUCBkb2VzIGl0IGF1dG9tYXRpY2FsbHkuCitUaGlzIG1heSBiZSBsZXRoYWwgaW4gbXVsdGktdGhyZWFkZWQgY2FzZXMsIHNpbmNlIFxmSWN1cmxfZ2xvYmFsX2luaXQoMylcZlAgaXMKK25vdCB0aHJlYWQtc2FmZSwgYW5kIGl0IG1heSByZXN1bHQgaW4gcmVzb3VyY2UgcHJvYmxlbXMgYmVjYXVzZSB0aGVyZSBpcworbm8gY29ycmVzcG9uZGluZyBjbGVhbnVwLgorCitZb3UgYXJlIHN0cm9uZ2x5IGFkdmlzZWQgdG8gbm90IGFsbG93IHRoaXMgYXV0b21hdGljIGJlaGF2aW91ciwgYnkKK2NhbGxpbmcgXGZJY3VybF9nbG9iYWxfaW5pdCgzKVxmUCB5b3Vyc2VsZiBwcm9wZXJseS4KK1NlZSB0aGUgZGVzY3JpcHRpb24gaW4gXGZCbGliY3VybFxmUCgzKSBvZiBnbG9iYWwgZW52aXJvbm1lbnQKK3JlcXVpcmVtZW50cyBmb3IgZGV0YWlscyBvZiBob3cgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisKKy5TSCBSRVRVUk4gVkFMVUUKK0lmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMLCBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgeW91IGNhbm5vdCB1c2UgdGhlCitvdGhlciBjdXJsIGZ1bmN0aW9ucy4KKy5TSCAiU0VFIEFMU08iCisuQlIgY3VybF9lYXN5X2NsZWFudXAgIigzKSwgIiBjdXJsX2dsb2JhbF9pbml0ICIoMyksICIgY3VybF9lYXN5X3Jlc2V0ICIoMykiCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X2luaXQuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfaW5pdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNTQ3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X2luaXQuaHRtbApAQCAtMCwwICsxLDYwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF9lYXN5X2luaXQgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9lYXN5X2luaXQgLSBTdGFydCBhIGxpYmN1cmwgZWFzeSBzZXNzaW9uIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Q1VSTCAqY3VybF9lYXN5X2luaXQoICk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIG11c3QgYmUgdGhlIGZpcnN0IGZ1bmN0aW9uIHRvIGNhbGwsIGFuZCBpdCByZXR1cm5zIGEgQ1VSTCBlYXN5IGhhbmRsZSB0aGF0IHlvdSBtdXN0IHVzZSBhcyBpbnB1dCB0byBvdGhlciBlYXN5LWZ1bmN0aW9ucy4gY3VybF9lYXN5X2luaXQgaW5pdGlhbGl6ZXMgY3VybCBhbmQgdGhpcyBjYWxsIDxzcGFuIENsYXNzPSJib2xkIj5NVVNUPC9zcGFuPiBoYXZlIGEgY29ycmVzcG9uZGluZyBjYWxsIHRvIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfY2xlYW51cC5odG1sIj5jdXJsX2Vhc3lfY2xlYW51cCgzKTwvYT4gd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPklmIHlvdSBkaWQgbm90IGFscmVhZHkgY2FsbCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9nbG9iYWxfaW5pdC5odG1sIj5jdXJsX2dsb2JhbF9pbml0KDMpPC9hPiwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9pbml0Lmh0bWwiPmN1cmxfZWFzeV9pbml0KDMpPC9hPiBkb2VzIGl0IGF1dG9tYXRpY2FsbHkuIFRoaXMgbWF5IGJlIGxldGhhbCBpbiBtdWx0aS10aHJlYWRlZCBjYXNlcywgc2luY2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZ2xvYmFsX2luaXQuaHRtbCI+Y3VybF9nbG9iYWxfaW5pdCgzKTwvYT4gaXMgbm90IHRocmVhZC1zYWZlLCBhbmQgaXQgbWF5IHJlc3VsdCBpbiByZXNvdXJjZSBwcm9ibGVtcyBiZWNhdXNlIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgY2xlYW51cC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgYXJlIHN0cm9uZ2x5IGFkdmlzZWQgdG8gbm90IGFsbG93IHRoaXMgYXV0b21hdGljIGJlaGF2aW91ciwgYnkgY2FsbGluZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9nbG9iYWxfaW5pdC5odG1sIj5jdXJsX2dsb2JhbF9pbml0KDMpPC9hPiB5b3Vyc2VsZiBwcm9wZXJseS4gU2VlIHRoZSBkZXNjcmlwdGlvbiBpbiA8c3BhbiBDbGFzcz0iYm9sZCI+bGliY3VybDwvc3Bhbj4oMykgb2YgZ2xvYmFsIGVudmlyb25tZW50IHJlcXVpcmVtZW50cyBmb3IgZGV0YWlscyBvZiBob3cgdG8gdXNlIHRoaXMgZnVuY3Rpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iUkVUVVJOIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SRVRVUk4gVkFMVUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+SWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwsIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB5b3UgY2Fubm90IHVzZSB0aGUgb3RoZXIgY3VybCBmdW5jdGlvbnMuIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9lYXN5X2NsZWFudXAuaHRtbCI+Y3VybF9lYXN5X2NsZWFudXAgKDMpPC9hPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX2dsb2JhbF9pbml0Lmh0bWwiPiAgY3VybF9nbG9iYWxfaW5pdCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9yZXNldC5odG1sIj4gIGN1cmxfZWFzeV9yZXNldCAoMyk8L2E+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9pbml0LnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfaW5pdC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRiZWUwNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfaW5pdC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9wYXVzZS4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9wYXVzZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZDY3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3BhdXNlLjMKQEAgLTAsMCArMSw4NSBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF9lYXN5X3BhdXNlIDMgIjE3IERlYyAyMDA3IiAibGliY3VybCA3LjE4LjAiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX2Vhc3lfcGF1c2UgLSBwYXVzZSBhbmQgdW5wYXVzZSBhIGNvbm5lY3Rpb24KKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisuQkkgIkNVUkxjb2RlIGN1cmxfZWFzeV9wYXVzZShDVVJMICoiaGFuZGxlICIsIGludCAiYml0bWFzayAiICk7IgorCisuU0ggREVTQ1JJUFRJT04KK1VzaW5nIHRoaXMgZnVuY3Rpb24sIHlvdSBjYW4gZXhwbGljaXRseSBtYXJrIGEgcnVubmluZyBjb25uZWN0aW9uIHRvIGdldAorcGF1c2VkLCBhbmQgeW91IGNhbiB1bnBhdXNlIGEgY29ubmVjdGlvbiB0aGF0IHdhcyBwcmV2aW91c2x5IHBhdXNlZC4KKworQSBjb25uZWN0aW9uIGNhbiBiZSBwYXVzZWQgYnkgdXNpbmcgdGhpcyBmdW5jdGlvbiBvciBieSBsZXR0aW5nIHRoZSByZWFkCitvciB0aGUgd3JpdGUgY2FsbGJhY2tzIHJldHVybiB0aGUgcHJvcGVyIG1hZ2ljIHJldHVybiBjb2RlCisoXGZJQ1VSTF9SRUFERlVOQ19QQVVTRVxmUCBhbmQgXGZJQ1VSTF9XUklURUZVTkNfUEFVU0VcZlApLiBBIHdyaXRlIGNhbGxiYWNrCit0aGF0IHJldHVybnMgcGF1c2Ugc2lnbmFscyB0byB0aGUgbGlicmFyeSB0aGF0IGl0IGNvdWxkbid0IHRha2UgY2FyZSBvZiBhbnkKK2RhdGEgYXQgYWxsLCBhbmQgdGhhdCBkYXRhIHdpbGwgdGhlbiBiZSBkZWxpdmVyZWQgYWdhaW4gdG8gdGhlIGNhbGxiYWNrIHdoZW4KK3RoZSB3cml0aW5nIGlzIGxhdGVyIHVucGF1c2VkLgorCitOT1RFOiB3aGlsZSBpdCBtYXkgZmVlbCB0ZW1wdGluZywgdGFrZSBjYXJlIGFuZCBub3RpY2UgdGhhdCB5b3UgY2Fubm90IGNhbGwKK3RoaXMgZnVuY3Rpb24gZnJvbSBhbm90aGVyIHRocmVhZC4KKworV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byB1bnBhdXNlIHJlYWRpbmcsIHRoZSBjaGFuY2UgaXMgaGlnaCB0aGF0IHlvdQord2lsbCBnZXQgeW91ciB3cml0ZSBjYWxsYmFjayBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KKworVGhlIFxmQmhhbmRsZVxmUCBhcmd1bWVudCBpcyBvZiBjb3Vyc2UgaWRlbnRpZnlpbmcgdGhlIGhhbmRsZSB0aGF0IG9wZXJhdGVzIG9uCit0aGUgY29ubmVjdGlvbiB5b3Ugd2FudCB0byBwYXVzZSBvciB1bnBhdXNlLgorCitUaGUgXGZCYml0bWFza1xmUCBhcmd1bWVudCBpcyBhIHNldCBvZiBiaXRzIHRoYXQgc2V0cyB0aGUgbmV3IHN0YXRlIG9mIHRoZQorY29ubmVjdGlvbi4gVGhlIGZvbGxvd2luZyBiaXRzIGNhbiBiZSB1c2VkOgorLklQIENVUkxQQVVTRV9SRUNWCitQYXVzZSByZWNlaXZpbmcgZGF0YS4gVGhlcmUgd2lsbCBiZSBubyBkYXRhIHJlY2VpdmVkIG9uIHRoaXMgY29ubmVjdGlvbiB1bnRpbAordGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWdhaW4gd2l0aG91dCB0aGlzIGJpdCBzZXQuIFRodXMsIHRoZSB3cml0ZSBjYWxsYmFjaworKFxmSUNVUkxPUFRfV1JJVEVGVU5DVElPTlxmUCkgd29uJ3QgYmUgY2FsbGVkLgorLklQIENVUkxQQVVTRV9TRU5ECitQYXVzZSBzZW5kaW5nIGRhdGEuIFRoZXJlIHdpbGwgYmUgbm8gZGF0YSBzZW50IG9uIHRoaXMgY29ubmVjdGlvbiB1bnRpbCB0aGlzCitmdW5jdGlvbiBpcyBjYWxsZWQgYWdhaW4gd2l0aG91dCB0aGlzIGJpdCBzZXQuIFRodXMsIHRoZSByZWFkIGNhbGxiYWNrCisoXGZJQ1VSTE9QVF9SRUFERlVOQ1RJT05cZlApIHdvbid0IGJlIGNhbGxlZC4KKy5JUCBDVVJMUEFVU0VfQUxMCitDb252ZW5pZW5jZSBkZWZpbmUgdGhhdCBwYXVzZXMgYm90aCBkaXJlY3Rpb25zLgorLklQIENVUkxQQVVTRV9DT05UCitDb252ZW5pZW5jZSBkZWZpbmUgdGhhdCB1bnBhdXNlcyBib3RoIGRpcmVjdGlvbnMKKy5TSCBSRVRVUk4gVkFMVUUKK0NVUkxFX09LICh6ZXJvKSBtZWFucyB0aGF0IHRoZSBvcHRpb24gd2FzIHNldCBwcm9wZXJseSwgYW5kIGEgbm9uLXplcm8gcmV0dXJuCitjb2RlIG1lYW5zIHNvbWV0aGluZyB3cm9uZyBvY2N1cnJlZCBhZnRlciB0aGUgbmV3IHN0YXRlIHdhcyBzZXQuICBTZWUgdGhlCitcZklsaWJjdXJsLWVycm9ycygzKVxmUCBtYW4gcGFnZSBmb3IgdGhlIGZ1bGwgbGlzdCB3aXRoIGRlc2NyaXB0aW9ucy4KKy5TSCBBVkFJTEFCSUxJVFkKK1RoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIGluIGxpYmN1cmwgNy4xOC4wLiBCZWZvcmUgdGhpcyB2ZXJzaW9uLCB0aGVyZSB3YXMgbm8KK2V4cGxpY2l0IHN1cHBvcnQgZm9yIHBhdXNpbmcgdHJhbnNmZXJzLgorLlNIICJNRU1PUlkgVVNFIgorV2hlbiBwYXVzaW5nIGEgcmVhZCBieSByZXR1cm5pbmcgdGhlIG1hZ2ljIHJldHVybiBjb2RlIGZyb20gYSB3cml0ZSBjYWxsYmFjaywKK3RoZSByZWFkIGRhdGEgaXMgYWxyZWFkeSBpbiBsaWJjdXJsJ3MgaW50ZXJuYWwgYnVmZmVycyBzbyBpdCdsbCBoYXZlIHRvIGtlZXAKK2l0IGluIGFuIGFsbG9jYXRlZCBidWZmZXIgdW50aWwgdGhlIHJlYWRpbmcgaXMgYWdhaW4gdW5wYXVzZWQgdXNpbmcgdGhpcworZnVuY3Rpb24uCisKK0lmIHRoZSBkb3dubG9hZGVkIGRhdGEgaXMgY29tcHJlc3NlZCBhbmQgaXMgYXNrZWQgdG8gZ2V0IHVuY29tcHJlc3NlZAorYXV0b21hdGljYWxseSBvbiBkb3dubG9hZCwgbGliY3VybCB3aWxsIGNvbnRpbnVlIHRvIHVuY29tcHJlc3MgdGhlIGVudGlyZQorZG93bmxvYWRlZCBjaHVuayBhbmQgaXQgd2lsbCBjYWNoZSB0aGUgZGF0YSB1bmNvbXByZXNzZWQuIFRoaXMgaGFzIHRoZSBzaWRlLQorZWZmZWN0IHRoYXQgaWYgeW91IGRvd25sb2FkIHNvbWV0aGluZyB0aGF0IGlzIGNvbXByZXNzZWQgYSBsb3QsIGl0IGNhbiByZXN1bHQKK2luIGEgdmVyeSBsYXJnZSBkYXRhIGFtb3VudCBuZWVkaW5nIHRvIGJlIGFsbG9jYXRlZCB0byBzYXZlIHRoZSBkYXRhIGR1cmluZwordGhlIHBhdXNlLiBUaGlzIHNhaWQsIHlvdSBzaG91bGQgcHJvYmFibHkgY29uc2lkZXIgbm90IHVzaW5nIHBhdXNlZCByZWFkaW5nIGlmCit5b3UgYWxsb3cgbGliY3VybCB0byB1bmNvbXByZXNzIGRhdGEgYXV0b21hdGljYWxseS4KKy5TSCAiU0VFIEFMU08iCisuQlIgY3VybF9lYXN5X2NsZWFudXAgIigzKSwgIiBjdXJsX2Vhc3lfcmVzZXQgIigzKSIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcGF1c2UuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcGF1c2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjk2OGJlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9wYXVzZS5odG1sCkBAIC0wLDAgKzEsNzMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX2Vhc3lfcGF1c2UgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9lYXN5X3BhdXNlIC0gcGF1c2UgYW5kIHVucGF1c2UgYSBjb25uZWN0aW9uIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Q1VSTGNvZGUgY3VybF9lYXN5X3BhdXNlKENVUkwgKmhhbmRsZSAsIGludCBiaXRtYXNrICApOzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VXNpbmcgdGhpcyBmdW5jdGlvbiwgeW91IGNhbiBleHBsaWNpdGx5IG1hcmsgYSBydW5uaW5nIGNvbm5lY3Rpb24gdG8gZ2V0IHBhdXNlZCwgYW5kIHlvdSBjYW4gdW5wYXVzZSBhIGNvbm5lY3Rpb24gdGhhdCB3YXMgcHJldmlvdXNseSBwYXVzZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+QSBjb25uZWN0aW9uIGNhbiBiZSBwYXVzZWQgYnkgdXNpbmcgdGhpcyBmdW5jdGlvbiBvciBieSBsZXR0aW5nIHRoZSByZWFkIG9yIHRoZSB3cml0ZSBjYWxsYmFja3MgcmV0dXJuIHRoZSBwcm9wZXIgbWFnaWMgcmV0dXJuIGNvZGUgKDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTF9SRUFERlVOQ19QQVVTRTwvc3Bhbj4gYW5kIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTF9XUklURUZVTkNfUEFVU0U8L3NwYW4+KS4gQSB3cml0ZSBjYWxsYmFjayB0aGF0IHJldHVybnMgcGF1c2Ugc2lnbmFscyB0byB0aGUgbGlicmFyeSB0aGF0IGl0IGNvdWxkbid0IHRha2UgY2FyZSBvZiBhbnkgZGF0YSBhdCBhbGwsIGFuZCB0aGF0IGRhdGEgd2lsbCB0aGVuIGJlIGRlbGl2ZXJlZCBhZ2FpbiB0byB0aGUgY2FsbGJhY2sgd2hlbiB0aGUgd3JpdGluZyBpcyBsYXRlciB1bnBhdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5OT1RFOiB3aGlsZSBpdCBtYXkgZmVlbCB0ZW1wdGluZywgdGFrZSBjYXJlIGFuZCBub3RpY2UgdGhhdCB5b3UgY2Fubm90IGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIGFub3RoZXIgdGhyZWFkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gdW5wYXVzZSByZWFkaW5nLCB0aGUgY2hhbmNlIGlzIGhpZ2ggdGhhdCB5b3Ugd2lsbCBnZXQgeW91ciB3cml0ZSBjYWxsYmFjayBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgPHNwYW4gQ2xhc3M9ImJvbGQiPmhhbmRsZTwvc3Bhbj4gYXJndW1lbnQgaXMgb2YgY291cnNlIGlkZW50aWZ5aW5nIHRoZSBoYW5kbGUgdGhhdCBvcGVyYXRlcyBvbiB0aGUgY29ubmVjdGlvbiB5b3Ugd2FudCB0byBwYXVzZSBvciB1bnBhdXNlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSA8c3BhbiBDbGFzcz0iYm9sZCI+Yml0bWFzazwvc3Bhbj4gYXJndW1lbnQgaXMgYSBzZXQgb2YgYml0cyB0aGF0IHNldHMgdGhlIG5ldyBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbi4gVGhlIGZvbGxvd2luZyBiaXRzIGNhbiBiZSB1c2VkOiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxQQVVTRVJFQ1YiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTFBBVVNFX1JFQ1Y8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGF1c2UgcmVjZWl2aW5nIGRhdGEuIFRoZXJlIHdpbGwgYmUgbm8gZGF0YSByZWNlaXZlZCBvbiB0aGlzIGNvbm5lY3Rpb24gdW50aWwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWdhaW4gd2l0aG91dCB0aGlzIGJpdCBzZXQuIFRodXMsIHRoZSB3cml0ZSBjYWxsYmFjayAoPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMT1BUX1dSSVRFRlVOQ1RJT048L3NwYW4+KSB3b24ndCBiZSBjYWxsZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFBBVVNFU0VORCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMUEFVU0VfU0VORDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXVzZSBzZW5kaW5nIGRhdGEuIFRoZXJlIHdpbGwgYmUgbm8gZGF0YSBzZW50IG9uIHRoaXMgY29ubmVjdGlvbiB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZ2FpbiB3aXRob3V0IHRoaXMgYml0IHNldC4gVGh1cywgdGhlIHJlYWQgY2FsbGJhY2sgKDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTE9QVF9SRUFERlVOQ1RJT048L3NwYW4+KSB3b24ndCBiZSBjYWxsZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFBBVVNFQUxMIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxQQVVTRV9BTEw8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Q29udmVuaWVuY2UgZGVmaW5lIHRoYXQgcGF1c2VzIGJvdGggZGlyZWN0aW9ucy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMUEFVU0VDT05UIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxQQVVTRV9DT05UPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkNvbnZlbmllbmNlIGRlZmluZSB0aGF0IHVucGF1c2VzIGJvdGggZGlyZWN0aW9ucyA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5DVVJMRV9PSyAoemVybykgbWVhbnMgdGhhdCB0aGUgb3B0aW9uIHdhcyBzZXQgcHJvcGVybHksIGFuZCBhIG5vbi16ZXJvIHJldHVybiBjb2RlIG1lYW5zIHNvbWV0aGluZyB3cm9uZyBvY2N1cnJlZCBhZnRlciB0aGUgbmV3IHN0YXRlIHdhcyBzZXQuICBTZWUgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGliY3VybC1lcnJvcnMoMyk8L3NwYW4+IG1hbiBwYWdlIGZvciB0aGUgZnVsbCBsaXN0IHdpdGggZGVzY3JpcHRpb25zLiA8YSBuYW1lPSJBVkFJTEFCSUxJVFkiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkFWQUlMQUJJTElUWTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBsaWJjdXJsIDcuMTguMC4gQmVmb3JlIHRoaXMgdmVyc2lvbiwgdGhlcmUgd2FzIG5vIGV4cGxpY2l0IHN1cHBvcnQgZm9yIHBhdXNpbmcgdHJhbnNmZXJzLiA8YSBuYW1lPSJNRU1PUlkiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk1FTU9SWSBVU0U8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+V2hlbiBwYXVzaW5nIGEgcmVhZCBieSByZXR1cm5pbmcgdGhlIG1hZ2ljIHJldHVybiBjb2RlIGZyb20gYSB3cml0ZSBjYWxsYmFjaywgdGhlIHJlYWQgZGF0YSBpcyBhbHJlYWR5IGluIGxpYmN1cmwncyBpbnRlcm5hbCBidWZmZXJzIHNvIGl0J2xsIGhhdmUgdG8ga2VlcCBpdCBpbiBhbiBhbGxvY2F0ZWQgYnVmZmVyIHVudGlsIHRoZSByZWFkaW5nIGlzIGFnYWluIHVucGF1c2VkIHVzaW5nIHRoaXMgZnVuY3Rpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+SWYgdGhlIGRvd25sb2FkZWQgZGF0YSBpcyBjb21wcmVzc2VkIGFuZCBpcyBhc2tlZCB0byBnZXQgdW5jb21wcmVzc2VkIGF1dG9tYXRpY2FsbHkgb24gZG93bmxvYWQsIGxpYmN1cmwgd2lsbCBjb250aW51ZSB0byB1bmNvbXByZXNzIHRoZSBlbnRpcmUgZG93bmxvYWRlZCBjaHVuayBhbmQgaXQgd2lsbCBjYWNoZSB0aGUgZGF0YSB1bmNvbXByZXNzZWQuIFRoaXMgaGFzIHRoZSBzaWRlLSBlZmZlY3QgdGhhdCBpZiB5b3UgZG93bmxvYWQgc29tZXRoaW5nIHRoYXQgaXMgY29tcHJlc3NlZCBhIGxvdCwgaXQgY2FuIHJlc3VsdCBpbiBhIHZlcnkgbGFyZ2UgZGF0YSBhbW91bnQgbmVlZGluZyB0byBiZSBhbGxvY2F0ZWQgdG8gc2F2ZSB0aGUgZGF0YSBkdXJpbmcgdGhlIHBhdXNlLiBUaGlzIHNhaWQsIHlvdSBzaG91bGQgcHJvYmFibHkgY29uc2lkZXIgbm90IHVzaW5nIHBhdXNlZCByZWFkaW5nIGlmIHlvdSBhbGxvdyBsaWJjdXJsIHRvIHVuY29tcHJlc3MgZGF0YSBhdXRvbWF0aWNhbGx5LiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9jbGVhbnVwLmh0bWwiPmN1cmxfZWFzeV9jbGVhbnVwICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9lYXN5X3Jlc2V0Lmh0bWwiPiAgY3VybF9lYXN5X3Jlc2V0ICgzKTwvYT4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3BhdXNlLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcGF1c2UucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODIyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3BhdXNlLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3BlcmZvcm0uMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcGVyZm9ybS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmODUxN2YKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3BlcmZvcm0uMwpAQCAtMCwwICsxLDU3IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX2Vhc3lfcGVyZm9ybSAzICI1IE1hciAyMDAxIiAibGliY3VybCA3LjciICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX2Vhc3lfcGVyZm9ybSAtIFBlcmZvcm0gYSBmaWxlIHRyYW5zZmVyCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKy5zcAorLkJJICJDVVJMY29kZSBjdXJsX2Vhc3lfcGVyZm9ybShDVVJMICoiIGhhbmRsZSAiKTsiCisuYWQKKy5TSCBERVNDUklQVElPTgorVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGluaXQgYW5kIGFsbCB0aGUgXGZJY3VybF9lYXN5X3NldG9wdCgzKVxmUAorY2FsbHMgYXJlIG1hZGUsIGFuZCB3aWxsIHBlcmZvcm0gdGhlIHRyYW5zZmVyIGFzIGRlc2NyaWJlZCBpbiB0aGUgb3B0aW9ucy4gIEl0CittdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBzYW1lCisuSSBoYW5kbGUKK2FzIGlucHV0IGFzIHRoZSBjdXJsX2Vhc3lfaW5pdCBjYWxsIHJldHVybmVkLgorCitZb3UgY2FuIGRvIGFueSBhbW91bnQgb2YgY2FsbHMgdG8gXGZJY3VybF9lYXN5X3BlcmZvcm0oMylcZlAgd2hpbGUgdXNpbmcgdGhlCitzYW1lIGhhbmRsZS4gSWYgeW91IGludGVuZCB0byB0cmFuc2ZlciBtb3JlIHRoYW4gb25lIGZpbGUsIHlvdSBhcmUgZXZlbgorZW5jb3VyYWdlZCB0byBkbyBzby4gbGliY3VybCB3aWxsIHRoZW4gYXR0ZW1wdCB0byByZS11c2UgdGhlIHNhbWUgY29ubmVjdGlvbgorZm9yIHRoZSBmb2xsb3dpbmcgdHJhbnNmZXJzLCB0aHVzIG1ha2luZyB0aGUgb3BlcmF0aW9ucyBmYXN0ZXIsIGxlc3MgQ1BVCitpbnRlbnNlIGFuZCB1c2luZyBsZXNzIG5ldHdvcmsgcmVzb3VyY2VzLiBKdXN0IG5vdGUgdGhhdCB5b3Ugd2lsbCBoYXZlIHRvIHVzZQorXGZJY3VybF9lYXN5X3NldG9wdCgzKVxmUCBiZXR3ZWVuIHRoZSBpbnZva2VzIHRvIHNldCBvcHRpb25zIGZvciB0aGUgZm9sbG93aW5nCitjdXJsX2Vhc3lfcGVyZm9ybS4KKworWW91IG11c3QgbmV2ZXIgY2FsbCB0aGlzIGZ1bmN0aW9uIHNpbXVsdGFuZW91c2x5IGZyb20gdHdvIHBsYWNlcyB1c2luZyB0aGUKK3NhbWUgaGFuZGxlLiBMZXQgdGhlIGZ1bmN0aW9uIHJldHVybiBmaXJzdCBiZWZvcmUgaW52b2tpbmcgaXQgYW5vdGhlciB0aW1lLiBJZgoreW91IHdhbnQgcGFyYWxsZWwgdHJhbnNmZXJzLCB5b3UgbXVzdCB1c2Ugc2V2ZXJhbCBjdXJsIGhhbmRsZXMuCisuU0ggUkVUVVJOIFZBTFVFCiswIG1lYW5zIGV2ZXJ5dGhpbmcgd2FzIG9rLCBub24temVybyBtZWFucyBhbiBlcnJvciBvY2N1cnJlZCBhcworLkkgPGN1cmwvY3VybC5oPgorZGVmaW5lcy4gSWYgdGhlIENVUkxPUFRfRVJST1JCVUZGRVIgd2FzIHNldCB3aXRoCisuSSBjdXJsX2Vhc3lfc2V0b3B0Cit0aGVyZSB3aWxsIGJlIGEgcmVhZGFibGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUgZXJyb3IgYnVmZmVyIHdoZW4gbm9uLXplcm8gaXMKK3JldHVybmVkLgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX2Vhc3lfaW5pdCAiKDMpLCAiIGN1cmxfZWFzeV9zZXRvcHQgIigzKSwgIgorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3BlcmZvcm0uaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcGVyZm9ybS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MDAyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3BlcmZvcm0uaHRtbApAQCAtMCwwICsxLDYwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF9lYXN5X3BlcmZvcm0gbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9lYXN5X3BlcmZvcm0gLSBQZXJmb3JtIGEgZmlsZSB0cmFuc2ZlciA8YSBuYW1lPSJTWU5PUFNJUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1lOT1BTSVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxjb2RlIGN1cmxfZWFzeV9wZXJmb3JtKENVUkwgKiBoYW5kbGUgKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBpbml0IGFuZCBhbGwgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwiPmN1cmxfZWFzeV9zZXRvcHQoMyk8L2E+IGNhbGxzIGFyZSBtYWRlLCBhbmQgd2lsbCBwZXJmb3JtIHRoZSB0cmFuc2ZlciBhcyBkZXNjcmliZWQgaW4gdGhlIG9wdGlvbnMuICBJdCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBzYW1lIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+aGFuZGxlPC9zcGFuPiBhcyBpbnB1dCBhcyB0aGUgY3VybF9lYXN5X2luaXQgY2FsbCByZXR1cm5lZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgY2FuIGRvIGFueSBhbW91bnQgb2YgY2FsbHMgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9wZXJmb3JtLmh0bWwiPmN1cmxfZWFzeV9wZXJmb3JtKDMpPC9hPiB3aGlsZSB1c2luZyB0aGUgc2FtZSBoYW5kbGUuIElmIHlvdSBpbnRlbmQgdG8gdHJhbnNmZXIgbW9yZSB0aGFuIG9uZSBmaWxlLCB5b3UgYXJlIGV2ZW4gZW5jb3VyYWdlZCB0byBkbyBzby4gbGliY3VybCB3aWxsIHRoZW4gYXR0ZW1wdCB0byByZS11c2UgdGhlIHNhbWUgY29ubmVjdGlvbiBmb3IgdGhlIGZvbGxvd2luZyB0cmFuc2ZlcnMsIHRodXMgbWFraW5nIHRoZSBvcGVyYXRpb25zIGZhc3RlciwgbGVzcyBDUFUgaW50ZW5zZSBhbmQgdXNpbmcgbGVzcyBuZXR3b3JrIHJlc291cmNlcy4gSnVzdCBub3RlIHRoYXQgeW91IHdpbGwgaGF2ZSB0byB1c2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9zZXRvcHQuaHRtbCI+Y3VybF9lYXN5X3NldG9wdCgzKTwvYT4gYmV0d2VlbiB0aGUgaW52b2tlcyB0byBzZXQgb3B0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyBjdXJsX2Vhc3lfcGVyZm9ybS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgbXVzdCBuZXZlciBjYWxsIHRoaXMgZnVuY3Rpb24gc2ltdWx0YW5lb3VzbHkgZnJvbSB0d28gcGxhY2VzIHVzaW5nIHRoZSBzYW1lIGhhbmRsZS4gTGV0IHRoZSBmdW5jdGlvbiByZXR1cm4gZmlyc3QgYmVmb3JlIGludm9raW5nIGl0IGFub3RoZXIgdGltZS4gSWYgeW91IHdhbnQgcGFyYWxsZWwgdHJhbnNmZXJzLCB5b3UgbXVzdCB1c2Ugc2V2ZXJhbCBjdXJsIGhhbmRsZXMuIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjAgbWVhbnMgZXZlcnl0aGluZyB3YXMgb2ssIG5vbi16ZXJvIG1lYW5zIGFuIGVycm9yIG9jY3VycmVkIGFzIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Jmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gZGVmaW5lcy4gSWYgdGhlIENVUkxPUFRfRVJST1JCVUZGRVIgd2FzIHNldCB3aXRoIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9lYXN5X3NldG9wdDwvc3Bhbj4gdGhlcmUgd2lsbCBiZSBhIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGVycm9yIGJ1ZmZlciB3aGVuIG5vbi16ZXJvIGlzIHJldHVybmVkLiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9pbml0Lmh0bWwiPmN1cmxfZWFzeV9pbml0ICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9lYXN5X3NldG9wdC5odG1sIj4gIGN1cmxfZWFzeV9zZXRvcHQgKDMpPC9hPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+IDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcGVyZm9ybS5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3BlcmZvcm0ucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYTEzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3BlcmZvcm0ucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcmVjdi4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9yZWN2LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkZTU4OQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcmVjdi4zCkBAIC0wLDAgKzEsNjkgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuVEggY3VybF9lYXN5X3JlY3YgMyAiMjkgQXByaWwgMjAwOCIgImxpYmN1cmwgNy4xOC4yIiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9lYXN5X3JlY3YgLSByZWNlaXZlcyByYXcgZGF0YSBvbiBhbiAiZWFzeSIgY29ubmVjdGlvbgorLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9lYXN5Lmg+Cisuc3AKKy5CSSAiQ1VSTGNvZGUgY3VybF9lYXN5X3JlY3YoIENVUkwgKiIgY3VybCAiLCB2b2lkICoiIGJ1ZmZlciAiLCIKKy5CSSAic2l6ZV90ICIgYnVmbGVuICIsIHNpemVfdCAqIiBuICIpOyIKKy5hZAorLlNIIERFU0NSSVBUSU9OCitUaGlzIGZ1bmN0aW9uIHJlY2VpdmVzIHJhdyBkYXRhIGZyb20gdGhlIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24uIFlvdSBtYXkgdXNlCitpdCB0b2dldGhlciB3aXRoIFxmSWN1cmxfZWFzeV9zZW5kKDMpXGZQIHRvIGltcGxlbWVudCBjdXN0b20gcHJvdG9jb2xzIHVzaW5nCitsaWJjdXJsLiBUaGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHBhcnRpY3VsYXJseSB1c2VmdWwgaWYgeW91IHVzZSBwcm94aWVzCithbmQvb3IgU1NMIGVuY3J5cHRpb246IGxpYmN1cmwgd2lsbCB0YWtlIGNhcmUgb2YgcHJveHkgbmVnb3RpYXRpb24gYW5kCitjb25uZWN0aW9uIHNldC11cC4KKworXGZCYnVmZmVyXGZQIGlzIGEgcG9pbnRlciB0byB5b3VyIGJ1ZmZlciB0aGF0IHdpbGwgZ2V0IHRoZSByZWNlaXZlZAorZGF0YS4gXGZCYnVmbGVuXGZQIGlzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHlvdSBjYW4gZ2V0IGluIHRoYXQKK2J1ZmZlci4gVGhlIHZhcmlhYmxlIFxmQm5cZlAgcG9pbnRzIHRvIHdpbGwgcmVjZWl2ZSB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkCitieXRlcy4KKworVG8gZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uLCBzZXQgXGZCQ1VSTE9QVF9DT05ORUNUX09OTFlcZlAgb3B0aW9uIGJlZm9yZQorY2FsbGluZyBcZkljdXJsX2Vhc3lfcGVyZm9ybSgzKVxmUC4gTm90ZSB0aGF0IFxmSWN1cmxfZWFzeV9yZWN2KDMpXGZQIGRvZXMgbm90Cit3b3JrIG9uIGNvbm5lY3Rpb25zIHRoYXQgd2VyZSBjcmVhdGVkIHdpdGhvdXQgdGhpcyBvcHRpb24uCisKK1lvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBzb2NrZXQgaGFzIGRhdGEgdG8gcmVhZCBiZWZvcmUgY2FsbGluZworXGZJY3VybF9lYXN5X3JlY3YoMylcZlAsIG90aGVyd2lzZSB0aGUgY2FsbCB3aWxsIHJldHVybiBcZkJDVVJMRV9BR0FJTlxmUCAtCit0aGUgc29ja2V0IGlzIHVzZWQgaW4gbm9uLWJsb2NraW5nIG1vZGUgaW50ZXJuYWxseS4gVXNlCitcZkljdXJsX2Vhc3lfZ2V0aW5mbygzKVxmUCB3aXRoIFxmQkNVUkxJTkZPX0xBU1RTT0NLRVRcZlAgdG8gb2J0YWluIHRoZQorc29ja2V0OyB1c2UgeW91ciBvcGVyYXRpbmcgc3lzdGVtIGZhY2lsaXRpZXMgbGlrZSBcZklzZWxlY3QoMilcZlAgdG8gY2hlY2sgaWYKK2l0IGhhcyBhbnkgZGF0YSB5b3UgY2FuIHJlYWQuCisuU0ggQVZBSUxBQklMSVRZCitBZGRlZCBpbiA3LjE4LjIuCisuU0ggUkVUVVJOIFZBTFVFCitPbiBzdWNjZXNzLCByZXR1cm5zIFxmQkNVUkxFX09LXGZQLCBzdG9yZXMgdGhlIHJlY2VpdmVkIGRhdGEgaW50bworXGZCYnVmZmVyXGZQLCBhbmQgdGhlIG51bWJlciBvZiBieXRlcyBpdCBhY3R1YWxseSByZWFkIGludG8gXGZCKm5cZlAuCisKK09uIGZhaWx1cmUsIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCisKK0lmIHRoZXJlIGlzIG5vIGRhdGEgdG8gcmVhZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgXGZCQ1VSTEVfQUdBSU5cZlAuIFVzZQoreW91ciBvcGVyYXRpbmcgc3lzdGVtIGZhY2lsaXRpZXMgdG8gd2FpdCB1bnRpbCB0aGUgZGF0YSBpcyByZWFkeSwgYW5kIHJldHJ5LgorLlNIIEVYQU1QTEUKK1NlZSBcZkJzZW5kcmVjdi5jXGZQIGluIFxmQmRvY3MvZXhhbXBsZXNcZlAgZGlyZWN0b3J5IGZvciB1c2FnZSBleGFtcGxlLgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX2Vhc3lfc2V0b3B0ICIoMyksICIgY3VybF9lYXN5X3BlcmZvcm0gIigzKSwgIgorLkJSIGN1cmxfZWFzeV9nZXRpbmZvICIoMyksICIKKy5CUiBjdXJsX2Vhc3lfc2VuZCAiKDMpICIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcmVjdi5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9yZWN2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM1YzFhMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcmVjdi5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX2Vhc3lfcmVjdiBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX2Vhc3lfcmVjdiAtIHJlY2VpdmVzIHJhdyBkYXRhIG9uIGFuICJlYXN5IiBjb25uZWN0aW9uIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvZWFzeS5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Q1VSTGNvZGUgY3VybF9lYXN5X3JlY3YoIENVUkwgKiBjdXJsICwgdm9pZCAqIGJ1ZmZlciAsPC9zcGFuPiA8c3BhbiBDbGFzcz0iYm9sZCI+c2l6ZV90ICBidWZsZW4gLCBzaXplX3QgKiBuICk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIHJlY2VpdmVzIHJhdyBkYXRhIGZyb20gdGhlIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24uIFlvdSBtYXkgdXNlIGl0IHRvZ2V0aGVyIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9zZW5kLmh0bWwiPmN1cmxfZWFzeV9zZW5kKDMpPC9hPiB0byBpbXBsZW1lbnQgY3VzdG9tIHByb3RvY29scyB1c2luZyBsaWJjdXJsLiBUaGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHBhcnRpY3VsYXJseSB1c2VmdWwgaWYgeW91IHVzZSBwcm94aWVzIGFuZC9vciBTU0wgZW5jcnlwdGlvbjogbGliY3VybCB3aWxsIHRha2UgY2FyZSBvZiBwcm94eSBuZWdvdGlhdGlvbiBhbmQgY29ubmVjdGlvbiBzZXQtdXAuIAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmJ1ZmZlcjwvc3Bhbj4gaXMgYSBwb2ludGVyIHRvIHlvdXIgYnVmZmVyIHRoYXQgd2lsbCBnZXQgdGhlIHJlY2VpdmVkIGRhdGEuIDxzcGFuIENsYXNzPSJib2xkIj5idWZsZW48L3NwYW4+IGlzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHlvdSBjYW4gZ2V0IGluIHRoYXQgYnVmZmVyLiBUaGUgdmFyaWFibGUgPHNwYW4gQ2xhc3M9ImJvbGQiPm48L3NwYW4+IHBvaW50cyB0byB3aWxsIHJlY2VpdmUgdGhlIG51bWJlciBvZiByZWNlaXZlZCBieXRlcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UbyBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24sIHNldCA8c3BhbiBDbGFzcz0iYm9sZCI+Q1VSTE9QVF9DT05ORUNUX09OTFk8L3NwYW4+IG9wdGlvbiBiZWZvcmUgY2FsbGluZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3BlcmZvcm0uaHRtbCI+Y3VybF9lYXN5X3BlcmZvcm0oMyk8L2E+LiBOb3RlIHRoYXQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9yZWN2Lmh0bWwiPmN1cmxfZWFzeV9yZWN2KDMpPC9hPiBkb2VzIG5vdCB3b3JrIG9uIGNvbm5lY3Rpb25zIHRoYXQgd2VyZSBjcmVhdGVkIHdpdGhvdXQgdGhpcyBvcHRpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+WW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIHNvY2tldCBoYXMgZGF0YSB0byByZWFkIGJlZm9yZSBjYWxsaW5nIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfcmVjdi5odG1sIj5jdXJsX2Vhc3lfcmVjdigzKTwvYT4sIG90aGVyd2lzZSB0aGUgY2FsbCB3aWxsIHJldHVybiA8c3BhbiBDbGFzcz0iYm9sZCI+Q1VSTEVfQUdBSU48L3NwYW4+IC0gdGhlIHNvY2tldCBpcyB1c2VkIGluIG5vbi1ibG9ja2luZyBtb2RlIGludGVybmFsbHkuIFVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X2dldGluZm8uaHRtbCI+Y3VybF9lYXN5X2dldGluZm8oMyk8L2E+IHdpdGggPHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxJTkZPX0xBU1RTT0NLRVQ8L3NwYW4+IHRvIG9idGFpbiB0aGUgc29ja2V0OyB1c2UgeW91ciBvcGVyYXRpbmcgc3lzdGVtIGZhY2lsaXRpZXMgbGlrZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnNlbGVjdCgyKTwvc3Bhbj4gdG8gY2hlY2sgaWYgaXQgaGFzIGFueSBkYXRhIHlvdSBjYW4gcmVhZC4gPGEgbmFtZT0iQVZBSUxBQklMSVRZIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5BVkFJTEFCSUxJVFk8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+QWRkZWQgaW4gNy4xOC4yLiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5PbiBzdWNjZXNzLCByZXR1cm5zIDxzcGFuIENsYXNzPSJib2xkIj5DVVJMRV9PSzwvc3Bhbj4sIHN0b3JlcyB0aGUgcmVjZWl2ZWQgZGF0YSBpbnRvIDxzcGFuIENsYXNzPSJib2xkIj5idWZmZXI8L3NwYW4+LCBhbmQgdGhlIG51bWJlciBvZiBieXRlcyBpdCBhY3R1YWxseSByZWFkIGludG8gPHNwYW4gQ2xhc3M9ImJvbGQiPipuPC9zcGFuPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj5PbiBmYWlsdXJlLCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPklmIHRoZXJlIGlzIG5vIGRhdGEgdG8gcmVhZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgPHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxFX0FHQUlOPC9zcGFuPi4gVXNlIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBmYWNpbGl0aWVzIHRvIHdhaXQgdW50aWwgdGhlIGRhdGEgaXMgcmVhZHksIGFuZCByZXRyeS4gPGEgbmFtZT0iRVhBTVBMRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+RVhBTVBMRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5TZWUgPHNwYW4gQ2xhc3M9ImJvbGQiPnNlbmRyZWN2LmM8L3NwYW4+IGluIDxzcGFuIENsYXNzPSJib2xkIj5kb2NzL2V4YW1wbGVzPC9zcGFuPiBkaXJlY3RvcnkgZm9yIHVzYWdlIGV4YW1wbGUuIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9lYXN5X3NldG9wdC5odG1sIj5jdXJsX2Vhc3lfc2V0b3B0ICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9lYXN5X3BlcmZvcm0uaHRtbCI+ICBjdXJsX2Vhc3lfcGVyZm9ybSAoMyk8L2E+IDxzcGFuIENsYXNzPSJtYW5wYWdlIj4gPC9zcGFuPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX2Vhc3lfZ2V0aW5mby5odG1sIj5jdXJsX2Vhc3lfZ2V0aW5mbyAoMyk8L2E+IDxzcGFuIENsYXNzPSJtYW5wYWdlIj4gPC9zcGFuPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX2Vhc3lfc2VuZC5odG1sIj5jdXJsX2Vhc3lfc2VuZCAoMykgPC9hPiA8cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcmVjdi5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3JlY3YucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYjk4YWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3JlY3YucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcmVzZXQuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcmVzZXQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTJkM2VkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9yZXNldC4zCkBAIC0wLDAgKzEsNDMgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGN1cmxfZWFzeV9yZXNldCAzICIzMSBKdWx5IDIwMDQiICJsaWJjdXJsIDcuMTIuMSIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfZWFzeV9yZXNldCAtIHJlc2V0IGFsbCBvcHRpb25zIG9mIGEgbGliY3VybCBzZXNzaW9uIGhhbmRsZQorLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKy5CSSAidm9pZCBjdXJsX2Vhc3lfcmVzZXQoQ1VSTCAqImhhbmRsZSAiKTsiCisKKy5TSCBERVNDUklQVElPTgorUmUtaW5pdGlhbGl6ZXMgYWxsIG9wdGlvbnMgcHJldmlvdXNseSBzZXQgb24gYSBzcGVjaWZpZWQgQ1VSTCBoYW5kbGUgdG8gdGhlCitkZWZhdWx0IHZhbHVlcy4gVGhpcyBwdXRzIGJhY2sgdGhlIGhhbmRsZSB0byB0aGUgc2FtZSBzdGF0ZSBhcyBpdCB3YXMgaW4gd2hlbgoraXQgd2FzIGp1c3QgY3JlYXRlZCB3aXRoIFxmSWN1cmxfZWFzeV9pbml0KDMpXGZQLgorCitJdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBrZXB0IGluIHRoZSBoYW5kbGU6IGxpdmUKK2Nvbm5lY3Rpb25zLCB0aGUgU2Vzc2lvbiBJRCBjYWNoZSwgdGhlIEROUyBjYWNoZSwgdGhlIGNvb2tpZXMgYW5kIHNoYXJlcy4KKy5TSCBBVkFJTEFCSUxJVFkKK1RoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIGluIGxpYmN1cmwgNy4xMi4xCisuU0ggUkVUVVJOIFZBTFVFCitOb3RoaW5nCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfZWFzeV9pbml0ICIoMyksIiBjdXJsX2Vhc3lfY2xlYW51cCAiKDMpLCIgY3VybF9lYXN5X3NldG9wdCAiKDMpCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcmVzZXQuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcmVzZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2RjNzBjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9yZXNldC5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX2Vhc3lfcmVzZXQgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9lYXN5X3Jlc2V0IC0gcmVzZXQgYWxsIG9wdGlvbnMgb2YgYSBsaWJjdXJsIHNlc3Npb24gaGFuZGxlIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+dm9pZCBjdXJsX2Vhc3lfcmVzZXQoQ1VSTCAqaGFuZGxlICk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5SZS1pbml0aWFsaXplcyBhbGwgb3B0aW9ucyBwcmV2aW91c2x5IHNldCBvbiBhIHNwZWNpZmllZCBDVVJMIGhhbmRsZSB0byB0aGUgZGVmYXVsdCB2YWx1ZXMuIFRoaXMgcHV0cyBiYWNrIHRoZSBoYW5kbGUgdG8gdGhlIHNhbWUgc3RhdGUgYXMgaXQgd2FzIGluIHdoZW4gaXQgd2FzIGp1c3QgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfaW5pdC5odG1sIj5jdXJsX2Vhc3lfaW5pdCgzKTwvYT4uIAorPHAgY2xhc3M9ImxldmVsMCI+SXQgZG9lcyBub3QgY2hhbmdlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24ga2VwdCBpbiB0aGUgaGFuZGxlOiBsaXZlIGNvbm5lY3Rpb25zLCB0aGUgU2Vzc2lvbiBJRCBjYWNoZSwgdGhlIEROUyBjYWNoZSwgdGhlIGNvb2tpZXMgYW5kIHNoYXJlcy4gPGEgbmFtZT0iQVZBSUxBQklMSVRZIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5BVkFJTEFCSUxJVFk8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gbGliY3VybCA3LjEyLjEgPGEgbmFtZT0iUkVUVVJOIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SRVRVUk4gVkFMVUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Tm90aGluZyA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9pbml0Lmh0bWwiPmN1cmxfZWFzeV9pbml0ICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9lYXN5X2NsZWFudXAuaHRtbCI+IGN1cmxfZWFzeV9jbGVhbnVwICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9lYXN5X3NldG9wdC5odG1sIj4gY3VybF9lYXN5X3NldG9wdCAoMyk8L2E+IAorPHAgY2xhc3M9ImxldmVsMCI+PHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3Jlc2V0LnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfcmVzZXQucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzdjMDQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3Jlc2V0LnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3NlbmQuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfc2VuZC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YzRjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3NlbmQuMwpAQCAtMCwwICsxLDY0IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIGN1cmxfZWFzeV9zZW5kIDMgIjI5IEFwcmlsIDIwMDgiICJsaWJjdXJsIDcuMTguMiIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfZWFzeV9zZW5kIC0gc2VuZHMgcmF3IGRhdGEgb3ZlciBhbiAiZWFzeSIgY29ubmVjdGlvbgorLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9lYXN5Lmg+Cisuc3AKKy5CSSAiQ1VSTGNvZGUgY3VybF9lYXN5X3NlbmQoIENVUkwgKiIgY3VybCAiLCBjb25zdCB2b2lkICoiIGJ1ZmZlciAiLCIKKy5CSSAiIHNpemVfdCAiIGJ1ZmxlbiAiLCBzaXplX3QgKiIgbiAiKTsiCisuYWQKKy5TSCBERVNDUklQVElPTgorVGhpcyBmdW5jdGlvbiBzZW5kcyBhcmJpdHJhcnkgZGF0YSBvdmVyIHRoZSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uLiBZb3UgbWF5Cit1c2UgaXQgdG9nZXRoZXIgd2l0aCBcZkljdXJsX2Vhc3lfcmVjdigzKVxmUCB0byBpbXBsZW1lbnQgY3VzdG9tIHByb3RvY29scwordXNpbmcgbGliY3VybC4gVGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSBwYXJ0aWN1bGFybHkgdXNlZnVsIGlmIHlvdSB1c2UKK3Byb3hpZXMgYW5kL29yIFNTTCBlbmNyeXB0aW9uOiBsaWJjdXJsIHdpbGwgdGFrZSBjYXJlIG9mIHByb3h5IG5lZ290aWF0aW9uIGFuZAorY29ubmVjdGlvbiBzZXQtdXAuCisKK1xmQmJ1ZmZlclxmUCBpcyBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgb2YgbGVuZ3RoIFxmQmJ1ZmxlblxmUCB0aGF0IHlvdSB3YW50IHNlbnQuCitUaGUgdmFyaWFibGUgXGZCblxmUCBwb2ludHMgdG8gd2lsbCByZWNlaXZlIHRoZSBudW1iZXIgb2Ygc2VudCBieXRlcy4KKworVG8gZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uLCBzZXQgXGZCQ1VSTE9QVF9DT05ORUNUX09OTFlcZlAgb3B0aW9uIGJlZm9yZQorY2FsbGluZyBcZkljdXJsX2Vhc3lfcGVyZm9ybSgzKVxmUC4gTm90ZSB0aGF0IFxmSWN1cmxfZWFzeV9zZW5kKDMpXGZQIHdpbGwgbm90Cit3b3JrIG9uIGNvbm5lY3Rpb25zIHRoYXQgd2VyZSBjcmVhdGVkIHdpdGhvdXQgdGhpcyBvcHRpb24uCisKK1lvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBzb2NrZXQgaXMgd3JpdGFibGUgYmVmb3JlIGNhbGxpbmcKK1xmSWN1cmxfZWFzeV9zZW5kKDMpXGZQLCBvdGhlcndpc2UgdGhlIGNhbGwgd2lsbCByZXR1cm4gXGZCQ1VSTEVfQUdBSU5cZlAgLQordGhlIHNvY2tldCBpcyB1c2VkIGluIG5vbi1ibG9ja2luZyBtb2RlIGludGVybmFsbHkuIFVzZQorXGZJY3VybF9lYXN5X2dldGluZm8oMylcZlAgd2l0aCBcZkJDVVJMSU5GT19MQVNUU09DS0VUXGZQIHRvIG9idGFpbiB0aGUKK3NvY2tldDsgdXNlIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBmYWNpbGl0aWVzIGxpa2UgXGZJc2VsZWN0KDIpXGZQIHRvIGNoZWNrIGlmCitpdCBjYW4gYmUgd3JpdHRlbiB0by4KKy5TSCBBVkFJTEFCSUxJVFkKK0FkZGVkIGluIDcuMTguMi4KKy5TSCBSRVRVUk4gVkFMVUUKK09uIHN1Y2Nlc3MsIHJldHVybnMgXGZCQ1VSTEVfT0tcZlAgYW5kIHN0b3JlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5CitzZW50IGludG8gXGZCKm5cZlAuIE5vdGUgdGhhdCB0aGlzIG1heSB2ZXJ5IHdlbGwgYmUgbGVzcyB0aGFuIHRoZSBhbW91bnQgeW91Cit3YW50ZWQgdG8gc2VuZC4KKworT24gZmFpbHVyZSwgcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZS4KKy5TSCBFWEFNUExFCitTZWUgXGZCc2VuZHJlY3YuY1xmUCBpbiBcZkJkb2NzL2V4YW1wbGVzXGZQIGRpcmVjdG9yeSBmb3IgdXNhZ2UgZXhhbXBsZS4KKy5TSCAiU0VFIEFMU08iCisuQlIgY3VybF9lYXN5X3NldG9wdCAiKDMpLCAiIGN1cmxfZWFzeV9wZXJmb3JtICIoMyksICIgY3VybF9lYXN5X2dldGluZm8gIigzKSwgIgorLkJSIGN1cmxfZWFzeV9yZWN2ICIoMykgIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9zZW5kLmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3NlbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Y1ZDMyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9zZW5kLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfZWFzeV9zZW5kIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfZWFzeV9zZW5kIC0gc2VuZHMgcmF3IGRhdGEgb3ZlciBhbiAiZWFzeSIgY29ubmVjdGlvbiA8YSBuYW1lPSJTWU5PUFNJUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1lOT1BTSVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPiNpbmNsdWRlICZsdDtjdXJsL2Vhc3kuaCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxjb2RlIGN1cmxfZWFzeV9zZW5kKCBDVVJMICogY3VybCAsIGNvbnN0IHZvaWQgKiBidWZmZXIgLDwvc3Bhbj4gPHNwYW4gQ2xhc3M9ImJvbGQiPiBzaXplX3QgIGJ1ZmxlbiAsIHNpemVfdCAqIG4gKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZnVuY3Rpb24gc2VuZHMgYXJiaXRyYXJ5IGRhdGEgb3ZlciB0aGUgZXN0YWJsaXNoZWQgY29ubmVjdGlvbi4gWW91IG1heSB1c2UgaXQgdG9nZXRoZXIgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3JlY3YuaHRtbCI+Y3VybF9lYXN5X3JlY3YoMyk8L2E+IHRvIGltcGxlbWVudCBjdXN0b20gcHJvdG9jb2xzIHVzaW5nIGxpYmN1cmwuIFRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcGFydGljdWxhcmx5IHVzZWZ1bCBpZiB5b3UgdXNlIHByb3hpZXMgYW5kL29yIFNTTCBlbmNyeXB0aW9uOiBsaWJjdXJsIHdpbGwgdGFrZSBjYXJlIG9mIHByb3h5IG5lZ290aWF0aW9uIGFuZCBjb25uZWN0aW9uIHNldC11cC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+YnVmZmVyPC9zcGFuPiBpcyBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgb2YgbGVuZ3RoIDxzcGFuIENsYXNzPSJib2xkIj5idWZsZW48L3NwYW4+IHRoYXQgeW91IHdhbnQgc2VudC4gVGhlIHZhcmlhYmxlIDxzcGFuIENsYXNzPSJib2xkIj5uPC9zcGFuPiBwb2ludHMgdG8gd2lsbCByZWNlaXZlIHRoZSBudW1iZXIgb2Ygc2VudCBieXRlcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UbyBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24sIHNldCA8c3BhbiBDbGFzcz0iYm9sZCI+Q1VSTE9QVF9DT05ORUNUX09OTFk8L3NwYW4+IG9wdGlvbiBiZWZvcmUgY2FsbGluZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3BlcmZvcm0uaHRtbCI+Y3VybF9lYXN5X3BlcmZvcm0oMyk8L2E+LiBOb3RlIHRoYXQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9zZW5kLmh0bWwiPmN1cmxfZWFzeV9zZW5kKDMpPC9hPiB3aWxsIG5vdCB3b3JrIG9uIGNvbm5lY3Rpb25zIHRoYXQgd2VyZSBjcmVhdGVkIHdpdGhvdXQgdGhpcyBvcHRpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+WW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIHNvY2tldCBpcyB3cml0YWJsZSBiZWZvcmUgY2FsbGluZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3NlbmQuaHRtbCI+Y3VybF9lYXN5X3NlbmQoMyk8L2E+LCBvdGhlcndpc2UgdGhlIGNhbGwgd2lsbCByZXR1cm4gPHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxFX0FHQUlOPC9zcGFuPiAtIHRoZSBzb2NrZXQgaXMgdXNlZCBpbiBub24tYmxvY2tpbmcgbW9kZSBpbnRlcm5hbGx5LiBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9nZXRpbmZvLmh0bWwiPmN1cmxfZWFzeV9nZXRpbmZvKDMpPC9hPiB3aXRoIDxzcGFuIENsYXNzPSJib2xkIj5DVVJMSU5GT19MQVNUU09DS0VUPC9zcGFuPiB0byBvYnRhaW4gdGhlIHNvY2tldDsgdXNlIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBmYWNpbGl0aWVzIGxpa2UgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5zZWxlY3QoMik8L3NwYW4+IHRvIGNoZWNrIGlmIGl0IGNhbiBiZSB3cml0dGVuIHRvLiA8YSBuYW1lPSJBVkFJTEFCSUxJVFkiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkFWQUlMQUJJTElUWTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5BZGRlZCBpbiA3LjE4LjIuIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPk9uIHN1Y2Nlc3MsIHJldHVybnMgPHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxFX09LPC9zcGFuPiBhbmQgc3RvcmVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgc2VudCBpbnRvIDxzcGFuIENsYXNzPSJib2xkIj4qbjwvc3Bhbj4uIE5vdGUgdGhhdCB0aGlzIG1heSB2ZXJ5IHdlbGwgYmUgbGVzcyB0aGFuIHRoZSBhbW91bnQgeW91IHdhbnRlZCB0byBzZW5kLiAKKzxwIGNsYXNzPSJsZXZlbDAiPk9uIGZhaWx1cmUsIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuIDxhIG5hbWU9IkVYQU1QTEUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkVYQU1QTEU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+U2VlIDxzcGFuIENsYXNzPSJib2xkIj5zZW5kcmVjdi5jPC9zcGFuPiBpbiA8c3BhbiBDbGFzcz0iYm9sZCI+ZG9jcy9leGFtcGxlczwvc3Bhbj4gZGlyZWN0b3J5IGZvciB1c2FnZSBleGFtcGxlLiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9zZXRvcHQuaHRtbCI+Y3VybF9lYXN5X3NldG9wdCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9wZXJmb3JtLmh0bWwiPiAgY3VybF9lYXN5X3BlcmZvcm0gKDMpPC9hPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX2Vhc3lfZ2V0aW5mby5odG1sIj4gIGN1cmxfZWFzeV9nZXRpbmZvICgzKTwvYT4gPHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPiA8L3NwYW4+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9yZWN2Lmh0bWwiPmN1cmxfZWFzeV9yZWN2ICgzKSA8L2E+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9zZW5kLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfc2VuZC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJjY2NiMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfc2VuZC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9zZXRvcHQuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfc2V0b3B0LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxNDA2OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfc2V0b3B0LjMKQEAgLTAsMCArMSwyNDcyIEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIGN1cmxfZWFzeV9zZXRvcHQgMyAiMSBKYW4gMjAxMCIgImxpYmN1cmwgNy4yMC4wIiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9lYXN5X3NldG9wdCBcLSBzZXQgb3B0aW9ucyBmb3IgYSBjdXJsIGVhc3kgaGFuZGxlCisuU0ggU1lOT1BTSVMKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworQ1VSTGNvZGUgY3VybF9lYXN5X3NldG9wdChDVVJMICpoYW5kbGUsIENVUkxvcHRpb24gb3B0aW9uLCBwYXJhbWV0ZXIpOworLlNIIERFU0NSSVBUSU9OCitjdXJsX2Vhc3lfc2V0b3B0KCkgaXMgdXNlZCB0byB0ZWxsIGxpYmN1cmwgaG93IHRvIGJlaGF2ZS4gQnkgdXNpbmcgdGhlCithcHByb3ByaWF0ZSBvcHRpb25zIHRvIFxmSWN1cmxfZWFzeV9zZXRvcHRcZlAsIHlvdSBjYW4gY2hhbmdlIGxpYmN1cmwncworYmVoYXZpb3IuICBBbGwgb3B0aW9ucyBhcmUgc2V0IHdpdGggdGhlIFxmSW9wdGlvblxmUCBmb2xsb3dlZCBieSBhCitcZklwYXJhbWV0ZXJcZlAuIFRoYXQgcGFyYW1ldGVyIGNhbiBiZSBhIFxmQmxvbmdcZlAsIGEgXGZCZnVuY3Rpb24gcG9pbnRlclxmUCwKK2FuIFxmQm9iamVjdCBwb2ludGVyXGZQIG9yIGEgXGZCY3VybF9vZmZfdFxmUCwgZGVwZW5kaW5nIG9uIHdoYXQgdGhlIHNwZWNpZmljCitvcHRpb24gZXhwZWN0cy4gUmVhZCB0aGlzIG1hbnVhbCBjYXJlZnVsbHkgYXMgYmFkIGlucHV0IHZhbHVlcyBtYXkgY2F1c2UKK2xpYmN1cmwgdG8gYmVoYXZlIGJhZGx5ISAgWW91IGNhbiBvbmx5IHNldCBvbmUgb3B0aW9uIGluIGVhY2ggZnVuY3Rpb24gY2FsbC4gQQordHlwaWNhbCBhcHBsaWNhdGlvbiB1c2VzIG1hbnkgY3VybF9lYXN5X3NldG9wdCgpIGNhbGxzIGluIHRoZSBzZXR1cCBwaGFzZS4KKworT3B0aW9ucyBzZXQgd2l0aCB0aGlzIGZ1bmN0aW9uIGNhbGwgYXJlIHZhbGlkIGZvciBhbGwgZm9ydGhjb21pbmcgdHJhbnNmZXJzCitwZXJmb3JtZWQgdXNpbmcgdGhpcyBcZkloYW5kbGVcZlAuICBUaGUgb3B0aW9ucyBhcmUgbm90IGluIGFueSB3YXkgcmVzZXQKK2JldHdlZW4gdHJhbnNmZXJzLCBzbyBpZiB5b3Ugd2FudCBzdWJzZXF1ZW50IHRyYW5zZmVycyB3aXRoIGRpZmZlcmVudCBvcHRpb25zLAoreW91IG11c3QgY2hhbmdlIHRoZW0gYmV0d2VlbiB0aGUgdHJhbnNmZXJzLiBZb3UgY2FuIG9wdGlvbmFsbHkgcmVzZXQgYWxsCitvcHRpb25zIGJhY2sgdG8gaW50ZXJuYWwgZGVmYXVsdCB3aXRoIFxmSWN1cmxfZWFzeV9yZXNldCgzKVxmUC4KKworU3RyaW5ncyBwYXNzZWQgdG8gbGliY3VybCBhcyAnY2hhciAqJyBhcmd1bWVudHMsIGFyZSBjb3BpZWQgYnkgdGhlIGxpYnJhcnk7Cit0aHVzIHRoZSBzdHJpbmcgc3RvcmFnZSBhc3NvY2lhdGVkIHRvIHRoZSBwb2ludGVyIGFyZ3VtZW50IG1heSBiZSBvdmVyd3JpdHRlbgorYWZ0ZXIgY3VybF9lYXN5X3NldG9wdCgpIHJldHVybnMuIEV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlIGFyZSBkZXNjcmliZWQgaW4KK3RoZSBvcHRpb24gZGV0YWlscyBiZWxvdy4KKworQmVmb3JlIHZlcnNpb24gNy4xNy4wLCBzdHJpbmdzIHdlcmUgbm90IGNvcGllZC4gSW5zdGVhZCB0aGUgdXNlciB3YXMgZm9yY2VkCitrZWVwIHRoZW0gYXZhaWxhYmxlIHVudGlsIGxpYmN1cmwgbm8gbG9uZ2VyIG5lZWRlZCB0aGVtLgorCitUaGUgXGZJaGFuZGxlXGZQIGlzIHRoZSByZXR1cm4gY29kZSBmcm9tIGEgXGZJY3VybF9lYXN5X2luaXQoMylcZlAgb3IKK1xmSWN1cmxfZWFzeV9kdXBoYW5kbGUoMylcZlAgY2FsbC4KKy5TSCBCRUhBVklPUiBPUFRJT05TCisuSVAgQ1VSTE9QVF9WRVJCT1NFCitTZXQgdGhlIHBhcmFtZXRlciB0byAxIHRvIGdldCB0aGUgbGlicmFyeSB0byBkaXNwbGF5IGEgbG90IG9mIHZlcmJvc2UKK2luZm9ybWF0aW9uIGFib3V0IGl0cyBvcGVyYXRpb25zLiBWZXJ5IHVzZWZ1bCBmb3IgbGliY3VybCBhbmQvb3IgcHJvdG9jb2wKK2RlYnVnZ2luZyBhbmQgdW5kZXJzdGFuZGluZy4gVGhlIHZlcmJvc2UgaW5mb3JtYXRpb24gd2lsbCBiZSBzZW50IHRvIHN0ZGVyciwKK29yIHRoZSBzdHJlYW0gc2V0IHdpdGggXGZJQ1VSTE9QVF9TVERFUlJcZlAuCisKK1lvdSBoYXJkbHkgZXZlciB3YW50IHRoaXMgc2V0IGluIHByb2R1Y3Rpb24gdXNlLCB5b3Ugd2lsbCBhbG1vc3QgYWx3YXlzIHdhbnQKK3RoaXMgd2hlbiB5b3UgZGVidWcvcmVwb3J0IHByb2JsZW1zLiBBbm90aGVyIG5lYXQgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgaXMgdGhlCitcZklDVVJMT1BUX0RFQlVHRlVOQ1RJT05cZlAuCisuSVAgQ1VSTE9QVF9IRUFERVIKK0EgcGFyYW1ldGVyIHNldCB0byAxIHRlbGxzIHRoZSBsaWJyYXJ5IHRvIGluY2x1ZGUgdGhlIGhlYWRlciBpbiB0aGUgYm9keQorb3V0cHV0LiBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHByb3RvY29scyB0aGF0IGFjdHVhbGx5IGhhdmUgaGVhZGVycworcHJlY2VkaW5nIHRoZSBkYXRhIChsaWtlIEhUVFApLgorLklQIENVUkxPUFRfTk9QUk9HUkVTUworUGFzcyBhIGxvbmcuIElmIHNldCB0byAxLCBpdCB0ZWxscyB0aGUgbGlicmFyeSB0byBzaHV0IG9mZiB0aGUgcHJvZ3Jlc3MgbWV0ZXIKK2NvbXBsZXRlbHkuIEl0IHdpbGwgYWxzbyBwcmVzZW50IHRoZSBcZklDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT05cZlAgZnJvbQorZ2V0dGluZyBjYWxsZWQuCisKK0Z1dHVyZSB2ZXJzaW9ucyBvZiBsaWJjdXJsIGFyZSBsaWtlbHkgdG8gbm90IGhhdmUgYW55IGJ1aWx0LWluIHByb2dyZXNzIG1ldGVyCithdCBhbGwuCisuSVAgQ1VSTE9QVF9OT1NJR05BTAorUGFzcyBhIGxvbmcuIElmIGl0IGlzIDEsIGxpYmN1cmwgd2lsbCBub3QgdXNlIGFueSBmdW5jdGlvbnMgdGhhdAoraW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgb3IgYW55IGZ1bmN0aW9ucyB0aGF0IGNhdXNlIHNpZ25hbHMgdG8gYmUgc2VudCB0byB0aGUKK3Byb2Nlc3MuIFRoaXMgb3B0aW9uIGlzIG1haW5seSBoZXJlIHRvIGFsbG93IG11bHRpLXRocmVhZGVkIHVuaXggYXBwbGljYXRpb25zCit0byBzdGlsbCBzZXQvdXNlIGFsbCB0aW1lb3V0IG9wdGlvbnMgZXRjLCB3aXRob3V0IHJpc2tpbmcgZ2V0dGluZyBzaWduYWxzLgorKEFkZGVkIGluIDcuMTApCisKK0lmIHRoaXMgb3B0aW9uIGlzIHNldCBhbmQgbGliY3VybCBoYXMgYmVlbiBidWlsdCB3aXRoIHRoZSBzdGFuZGFyZCBuYW1lCityZXNvbHZlciwgdGltZW91dHMgd2lsbCBub3Qgb2NjdXIgd2hpbGUgdGhlIG5hbWUgcmVzb2x2ZSB0YWtlcyBwbGFjZS4KK0NvbnNpZGVyIGJ1aWxkaW5nIGxpYmN1cmwgd2l0aCBjLWFyZXMgc3VwcG9ydCB0byBlbmFibGUgYXN5bmNocm9ub3VzIEROUworbG9va3Vwcywgd2hpY2ggZW5hYmxlcyBuaWNlIHRpbWVvdXRzIGZvciBuYW1lIHJlc29sdmVzIHdpdGhvdXQgc2lnbmFscy4KKworU2V0dGluZyBcZklDVVJMT1BUX05PU0lHTkFMXGZQIHRvIDEgbWFrZXMgbGliY3VybCBOT1QgYXNrIHRoZSBzeXN0ZW0gdG8gaWdub3JlCitTSUdQSVBFIHNpZ25hbHMsIHdoaWNoIG90aGVyd2lzZSBhcmUgc2VudCBieSB0aGUgc3lzdGVtIHdoZW4gdHJ5aW5nIHRvIHNlbmQKK2RhdGEgdG8gYSBzb2NrZXQgd2hpY2ggaXMgY2xvc2VkIGluIHRoZSBvdGhlciBlbmQuIGxpYmN1cmwgbWFrZXMgYW4gZWZmb3J0IHRvCituZXZlciBjYXVzZSBzdWNoIFNJR1BJUEVzIHRvIHRyaWdnZXIsIGJ1dCBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIGhhdmUgbm8gd2F5Cit0byBhdm9pZCB0aGVtIGFuZCBldmVuIG9uIHRob3NlIHRoYXQgaGF2ZSB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgd2hlbgordGhleSBtYXkgc3RpbGwgaGFwcGVuLCBjb250cmFyeSB0byBvdXIgZGVzaXJlLiBJbiBhZGRpdGlvbiwgdXNpbmcKK1xmSUNVUkxBVVRIX05UTE1fV0JcZlAgYXV0aGVudGljYXRpb24gY291bGQgY2F1c2UgYSBTSUdDSExEIHNpZ25hbCB0byBiZQorcmFpc2VkLgorLklQIENVUkxPUFRfV0lMRENBUkRNQVRDSAorU2V0IHRoaXMgb3B0aW9uIHRvIDEgaWYgeW91IHdhbnQgdG8gdHJhbnNmZXIgbXVsdGlwbGUgZmlsZXMgYWNjb3JkaW5nIHRvIGEKK2ZpbGUgbmFtZSBwYXR0ZXJuLiBUaGUgcGF0dGVybiBjYW4gYmUgc3BlY2lmaWVkIGFzIHBhcnQgb2YgdGhlCitcZklDVVJMT1BUX1VSTFxmUCBvcHRpb24sIHVzaW5nIGFuIGZubWF0Y2gtbGlrZSBwYXR0ZXJuIChTaGVsbCBQYXR0ZXJuCitNYXRjaGluZykgaW4gdGhlIGxhc3QgcGFydCBvZiBVUkwgKGZpbGUgbmFtZSkuCisKK0J5IGRlZmF1bHQsIGxpYmN1cmwgdXNlcyBpdHMgaW50ZXJuYWwgd2lsZGNhcmQgbWF0Y2hpbmcgaW1wbGVtZW50YXRpb24uIFlvdQorY2FuIHByb3ZpZGUgeW91ciBvd24gbWF0Y2hpbmcgZnVuY3Rpb24gYnkgdGhlIFxmSUNVUkxPUFRfRk5NQVRDSF9GVU5DVElPTlxmUAorb3B0aW9uLgorCitUaGlzIGZlYXR1cmUgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIEZUUCBkb3dubG9hZCBmb3Igbm93LgorCitBIGJyaWVmIGludHJvZHVjdGlvbiBvZiBpdHMgc3ludGF4IGZvbGxvd3M6CisuUlMKKy5JUCAiKiAtIEFTVEVSSVNLIgorXCZmdHA6Ly9leGFtcGxlLmNvbS9zb21lL3BhdGgvXGZCKi50eHRcZlAgKGZvciBhbGwgdHh0J3MgZnJvbSB0aGUgcm9vdAorZGlyZWN0b3J5KQorLlJFCisuUlMKKy5JUCAiPyAtIFFVRVNUSU9OIE1BUksiCitRdWVzdGlvbiBtYXJrIG1hdGNoZXMgYW55IChleGFjdGx5IG9uZSkgY2hhcmFjdGVyLgorCitcJmZ0cDovL2V4YW1wbGUuY29tL3NvbWUvcGF0aC9cZkJwaG90bz8uanBlZ1xmUAorLlJFCisuUlMKKy5JUCAiWyAtIEJSQUNLRVQgRVhQUkVTU0lPTiIKK1RoZSBsZWZ0IGJyYWNrZXQgb3BlbnMgYSBicmFja2V0IGV4cHJlc3Npb24uIFRoZSBxdWVzdGlvbiBtYXJrIGFuZCBhc3RlcmlzayBoYXZlCitubyBzcGVjaWFsIG1lYW5pbmcgaW4gYSBicmFja2V0IGV4cHJlc3Npb24uIEVhY2ggYnJhY2tldCBleHByZXNzaW9uIGVuZHMgYnkgdGhlCityaWdodCBicmFja2V0IGFuZCBtYXRjaGVzIGV4YWN0bHkgb25lIGNoYXJhY3Rlci4gU29tZSBleGFtcGxlcyBmb2xsb3c6CisKK1xmQlthLXpBLVowXC05XVxmUCBvciBcZkJbZlwtZ0ZcLUddXGZQIFwtIGNoYXJhY3RlciBpbnRlcnZhbAorCitcZkJbYWJjXVxmUCAtIGNoYXJhY3RlciBlbnVtZXJhdGlvbgorCitcZkJbXmFiY11cZlAgb3IgXGZCWyFhYmNdXGZQIC0gbmVnYXRpb24KKworXGZCW1s6XGZQXGZJbmFtZVxmUFxmQjpdXVxmUCBjbGFzcyBleHByZXNzaW9uLiBTdXBwb3J0ZWQgY2xhc3NlcyBhcmUKK1xmQmFsbnVtXGZQLFxmQmxvd2VyXGZQLCBcZkJzcGFjZVxmUCwgXGZCYWxwaGFcZlAsIFxmQmRpZ2l0XGZQLCBcZkJwcmludFxmUCwKK1xmQnVwcGVyXGZQLCBcZkJibGFua1xmUCwgXGZCZ3JhcGhcZlAsIFxmQnhkaWdpdFxmUC4KKworXGZCW11bLSFeXVxmUCAtIHNwZWNpYWwgY2FzZSBcLSBtYXRjaGVzIG9ubHkgJ1wtJywgJ10nLCAnWycsICchJyBvciAnXicuIFRoZXNlCitjaGFyYWN0ZXJzIGhhdmUgbm8gc3BlY2lhbCBwdXJwb3NlLgorCitcZkJbXFxbXFxdXFxcXF1cZlAgLSBlc2NhcGUgc3ludGF4LiBNYXRjaGVzICdbJywgJ10nIG9yICdcXCcuCisKK1VzaW5nIHRoZSBydWxlcyBhYm92ZSwgYSBmaWxlIG5hbWUgcGF0dGVybiBjYW4gYmUgY29uc3RydWN0ZWQ6CisKK1wmZnRwOi8vZXhhbXBsZS5jb20vc29tZS9wYXRoL1xmQlthLXpbOnVwcGVyOl1cXFxcXS5qcGVnXGZQCisuUkUKKy5QUAorKFRoaXMgd2FzIGFkZGVkIGluIDcuMjEuMCkKKy5TSCBDQUxMQkFDSyBPUFRJT05TCisuSVAgQ1VSTE9QVF9XUklURUZVTkNUSU9OCitGdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiBcZkJzaXplX3QKK2Z1bmN0aW9uKCBjaGFyICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnVzZXJkYXRhKTtcZlAgVGhpcworZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgbGliY3VybCBhcyBzb29uIGFzIHRoZXJlIGlzIGRhdGEgcmVjZWl2ZWQgdGhhdCBuZWVkcwordG8gYmUgc2F2ZWQuIFRoZSBzaXplIG9mIHRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgXGZJcHRyXGZQIGlzIFxmSXNpemVcZlAKK211bHRpcGxpZWQgd2l0aCBcZklubWVtYlxmUCwgaXQgd2lsbCBub3QgYmUgemVybyB0ZXJtaW5hdGVkLiBSZXR1cm4gdGhlIG51bWJlcgorb2YgYnl0ZXMgYWN0dWFsbHkgdGFrZW4gY2FyZSBvZi4gSWYgdGhhdCBhbW91bnQgZGlmZmVycyBmcm9tIHRoZSBhbW91bnQgcGFzc2VkCit0byB5b3VyIGZ1bmN0aW9uLCBpdCdsbCBzaWduYWwgYW4gZXJyb3IgdG8gdGhlIGxpYnJhcnkuIFRoaXMgd2lsbCBhYm9ydCB0aGUKK3RyYW5zZmVyIGFuZCByZXR1cm4gXGZJQ1VSTEVfV1JJVEVfRVJST1JcZlAuCisKK0Zyb20gNy4xOC4wLCB0aGUgZnVuY3Rpb24gY2FuIHJldHVybiBDVVJMX1dSSVRFRlVOQ19QQVVTRSB3aGljaCB0aGVuIHdpbGwKK2NhdXNlIHdyaXRpbmcgdG8gdGhpcyBjb25uZWN0aW9uIHRvIGJlY29tZSBwYXVzZWQuIFNlZQorXGZJY3VybF9lYXN5X3BhdXNlKDMpXGZQIGZvciBmdXJ0aGVyIGRldGFpbHMuCisKK1RoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCB3aXRoIHplcm8gYnl0ZXMgZGF0YSBpZiB0aGUgdHJhbnNmZXJyZWQgZmlsZSBpcworZW1wdHkuCisKK1NldCB0aGlzIG9wdGlvbiB0byBOVUxMIHRvIGdldCB0aGUgaW50ZXJuYWwgZGVmYXVsdCBmdW5jdGlvbi4gVGhlIGludGVybmFsCitkZWZhdWx0IGZ1bmN0aW9uIHdpbGwgd3JpdGUgdGhlIGRhdGEgdG8gdGhlIEZJTEUgKiBnaXZlbiB3aXRoCitcZklDVVJMT1BUX1dSSVRFREFUQVxmUC4KKworU2V0IHRoZSBcZkl1c2VyZGF0YVxmUCBhcmd1bWVudCB3aXRoIHRoZSBcZklDVVJMT1BUX1dSSVRFREFUQVxmUCBvcHRpb24uCisKK1RoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUgaW4gYWxsIGludm9rZXMsCitidXQgeW91IGNhbm5vdCBwb3NzaWJseSBtYWtlIGFueSBhc3N1bXB0aW9ucy4gSXQgbWF5IGJlIG9uZSBieXRlLCBpdCBtYXkgYmUKK3Rob3VzYW5kcy4gVGhlIG1heGltdW0gYW1vdW50IG9mIGJvZHkgZGF0YSB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHdyaXRlCitjYWxsYmFjayBpcyBkZWZpbmVkIGluIHRoZSBjdXJsLmggaGVhZGVyIGZpbGU6IENVUkxfTUFYX1dSSVRFX1NJWkUgKHRoZSB1c3VhbAorZGVmYXVsdCBpcyAxNkspLiBJZiB5b3UgaG93ZXZlciBoYXZlIFxmSUNVUkxPUFRfSEVBREVSXGZQIHNldCwgd2hpY2ggc2VuZHMKK2hlYWRlciBkYXRhIHRvIHRoZSB3cml0ZSBjYWxsYmFjaywgeW91IGNhbiBnZXQgdXAgdG8KK1xmSUNVUkxfTUFYX0hUVFBfSEVBREVSXGZQIGJ5dGVzIG9mIGhlYWRlciBkYXRhIHBhc3NlZCBpbnRvIGl0LiBUaGlzIHVzdWFsbHkKK21lYW5zIDEwMEsuCisuSVAgQ1VSTE9QVF9XUklURURBVEEKK0RhdGEgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmaWxlIHdyaXRlIGZ1bmN0aW9uLiBJZiB5b3UgdXNlIHRoZQorXGZJQ1VSTE9QVF9XUklURUZVTkNUSU9OXGZQIG9wdGlvbiwgdGhpcyBpcyB0aGUgcG9pbnRlciB5b3UnbGwgZ2V0IGFzCitpbnB1dC4gSWYgeW91IGRvbid0IHVzZSBhIGNhbGxiYWNrLCB5b3UgbXVzdCBwYXNzIGEgJ0ZJTEUgKicgYXMgbGliY3VybCB3aWxsCitwYXNzIHRoaXMgdG8gZndyaXRlKCkgd2hlbiB3cml0aW5nIGRhdGEuCisKK1RoZSBpbnRlcm5hbCBcZklDVVJMT1BUX1dSSVRFRlVOQ1RJT05cZlAgd2lsbCB3cml0ZSB0aGUgZGF0YSB0byB0aGUgRklMRSAqCitnaXZlbiB3aXRoIHRoaXMgb3B0aW9uLCBvciB0byBzdGRvdXQgaWYgdGhpcyBvcHRpb24gaGFzbid0IGJlZW4gc2V0LgorCitJZiB5b3UncmUgdXNpbmcgbGliY3VybCBhcyBhIHdpbjMyIERMTCwgeW91IFxmQk1VU1RcZlAgdXNlIHRoZQorXGZJQ1VSTE9QVF9XUklURUZVTkNUSU9OXGZQIGlmIHlvdSBzZXQgdGhpcyBvcHRpb24gb3IgeW91IHdpbGwgZXhwZXJpZW5jZQorY3Jhc2hlcy4KKworVGhpcyBvcHRpb24gaXMgYWxzbyBrbm93biB3aXRoIHRoZSBvbGRlciBuYW1lIFxmSUNVUkxPUFRfRklMRVxmUCwgdGhlIG5hbWUKK1xmSUNVUkxPUFRfV1JJVEVEQVRBXGZQIHdhcyBpbnRyb2R1Y2VkIGluIDcuOS43LgorLklQIENVUkxPUFRfUkVBREZVTkNUSU9OCitGdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiBcZkJzaXplX3QKK2Z1bmN0aW9uKCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnVzZXJkYXRhKTtcZlAgVGhpcworZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgbGliY3VybCBhcyBzb29uIGFzIGl0IG5lZWRzIHRvIHJlYWQgZGF0YSBpbiBvcmRlciB0bworc2VuZCBpdCB0byB0aGUgcGVlci4gVGhlIGRhdGEgYXJlYSBwb2ludGVkIGF0IGJ5IHRoZSBwb2ludGVyIFxmSXB0clxmUCBtYXkgYmUKK2ZpbGxlZCB3aXRoIGF0IG1vc3QgXGZJc2l6ZVxmUCBtdWx0aXBsaWVkIHdpdGggXGZJbm1lbWJcZlAgbnVtYmVyIG9mCitieXRlcy4gWW91ciBmdW5jdGlvbiBtdXN0IHJldHVybiB0aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyB0aGF0IHlvdSBzdG9yZWQgaW4KK3RoYXQgbWVtb3J5IGFyZWEuIFJldHVybmluZyAwIHdpbGwgc2lnbmFsIGVuZC1vZi1maWxlIHRvIHRoZSBsaWJyYXJ5IGFuZCBjYXVzZQoraXQgdG8gc3RvcCB0aGUgY3VycmVudCB0cmFuc2Zlci4KKworSWYgeW91IHN0b3AgdGhlIGN1cnJlbnQgdHJhbnNmZXIgYnkgcmV0dXJuaW5nIDAgInByZS1tYXR1cmVseSIgKGkuZSBiZWZvcmUgdGhlCitzZXJ2ZXIgZXhwZWN0ZWQgaXQsIGxpa2Ugd2hlbiB5b3UndmUgc2FpZCB5b3Ugd2lsbCB1cGxvYWQgTiBieXRlcyBhbmQgeW91Cit1cGxvYWQgbGVzcyB0aGFuIE4gYnl0ZXMpLCB5b3UgbWF5IGV4cGVyaWVuY2UgdGhhdCB0aGUgc2VydmVyICJoYW5ncyIgd2FpdGluZworZm9yIHRoZSByZXN0IG9mIHRoZSBkYXRhIHRoYXQgd29uJ3QgY29tZS4KKworVGhlIHJlYWQgY2FsbGJhY2sgbWF5IHJldHVybiBcZklDVVJMX1JFQURGVU5DX0FCT1JUXGZQIHRvIHN0b3AgdGhlIGN1cnJlbnQKK29wZXJhdGlvbiBpbW1lZGlhdGVseSwgcmVzdWx0aW5nIGluIGEgXGZJQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDS1xmUCBlcnJvcgorY29kZSBmcm9tIHRoZSB0cmFuc2ZlciAoQWRkZWQgaW4gNy4xMi4xKQorCitGcm9tIDcuMTguMCwgdGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gQ1VSTF9SRUFERlVOQ19QQVVTRSB3aGljaCB0aGVuIHdpbGwgY2F1c2UKK3JlYWRpbmcgZnJvbSB0aGlzIGNvbm5lY3Rpb24gdG8gYmVjb21lIHBhdXNlZC4gU2VlIFxmSWN1cmxfZWFzeV9wYXVzZSgzKVxmUAorZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworXGZCQnVnc1xmUDogd2hlbiBkb2luZyBURlRQIHVwbG9hZHMsIHlvdSBtdXN0IHJldHVybiB0aGUgZXhhY3QgYW1vdW50IG9mIGRhdGEKK3RoYXQgdGhlIGNhbGxiYWNrIHdhbnRzLCBvciBpdCB3aWxsIGJlIGNvbnNpZGVyZWQgdGhlIGZpbmFsIHBhY2tldCBieSB0aGUKK3NlcnZlciBlbmQgYW5kIHRoZSB0cmFuc2ZlciB3aWxsIGVuZCB0aGVyZS4KKworSWYgeW91IHNldCB0aGlzIGNhbGxiYWNrIHBvaW50ZXIgdG8gTlVMTCwgb3IgZG9uJ3Qgc2V0IGl0IGF0IGFsbCwgdGhlIGRlZmF1bHQKK2ludGVybmFsIHJlYWQgZnVuY3Rpb24gd2lsbCBiZSB1c2VkLiBJdCBpcyBkb2luZyBhbiBmcmVhZCgpIG9uIHRoZSBGSUxFICoKK3VzZXJkYXRhIHNldCB3aXRoIFxmSUNVUkxPUFRfUkVBRERBVEFcZlAuCisuSVAgQ1VSTE9QVF9SRUFEREFUQQorRGF0YSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZpbGUgcmVhZCBmdW5jdGlvbi4gSWYgeW91IHVzZSB0aGUKK1xmSUNVUkxPUFRfUkVBREZVTkNUSU9OXGZQIG9wdGlvbiwgdGhpcyBpcyB0aGUgcG9pbnRlciB5b3UnbGwgZ2V0IGFzIGlucHV0LiBJZgoreW91IGRvbid0IHNwZWNpZnkgYSByZWFkIGNhbGxiYWNrIGJ1dCBpbnN0ZWFkIHJlbHkgb24gdGhlIGRlZmF1bHQgaW50ZXJuYWwKK3JlYWQgZnVuY3Rpb24sIHRoaXMgZGF0YSBtdXN0IGJlIGEgdmFsaWQgcmVhZGFibGUgRklMRSAqLgorCitJZiB5b3UncmUgdXNpbmcgbGliY3VybCBhcyBhIHdpbjMyIERMTCwgeW91IE1VU1QgdXNlIGEKK1xmSUNVUkxPUFRfUkVBREZVTkNUSU9OXGZQIGlmIHlvdSBzZXQgdGhpcyBvcHRpb24uCisKK1RoaXMgb3B0aW9uIHdhcyBhbHNvIGtub3duIGJ5IHRoZSBvbGRlciBuYW1lIFxmSUNVUkxPUFRfSU5GSUxFXGZQLCB0aGUgbmFtZQorXGZJQ1VSTE9QVF9SRUFEREFUQVxmUCB3YXMgaW50cm9kdWNlZCBpbiA3LjkuNy4KKy5JUCBDVVJMT1BUX0lPQ1RMRlVOQ1RJT04KK0Z1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIFxmSWN1cmxfaW9jdGxfY2FsbGJhY2tcZlAgcHJvdG90eXBlCitmb3VuZCBpbiBcZkk8Y3VybC9jdXJsLmg+XGZQLiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGxpYmN1cmwgd2hlbgorc29tZXRoaW5nIHNwZWNpYWwgSS9PLXJlbGF0ZWQgbmVlZHMgdG8gYmUgZG9uZSB0aGF0IHRoZSBsaWJyYXJ5IGNhbid0IGRvIGJ5CitpdHNlbGYuIEZvciBub3csIHJld2luZGluZyB0aGUgcmVhZCBkYXRhIHN0cmVhbSBpcyB0aGUgb25seSBhY3Rpb24gaXQgY2FuCityZXF1ZXN0LiBUaGUgcmV3aW5kaW5nIG9mIHRoZSByZWFkIGRhdGEgc3RyZWFtIG1heSBiZSBuZWNlc3Nhcnkgd2hlbiBkb2luZyBhCitIVFRQIFBVVCBvciBQT1NUIHdpdGggYSBtdWx0aS1wYXNzIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4gIChPcHRpb24gYWRkZWQgaW4KKzcuMTIuMykuCisKK1VzZSBcZklDVVJMT1BUX1NFRUtGVU5DVElPTlxmUCBpbnN0ZWFkIHRvIHByb3ZpZGUgc2Vla2luZyEKKy5JUCBDVVJMT1BUX0lPQ1RMREFUQQorUGFzcyBhIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHVudG91Y2hlZCBieSBsaWJjdXJsIGFuZCBwYXNzZWQgYXMgdGhlIDNyZAorYXJndW1lbnQgaW4gdGhlIGlvY3RsIGNhbGxiYWNrIHNldCB3aXRoIFxmSUNVUkxPUFRfSU9DVExGVU5DVElPTlxmUC4gIChPcHRpb24KK2FkZGVkIGluIDcuMTIuMykKKy5JUCBDVVJMT1BUX1NFRUtGVU5DVElPTgorRnVuY3Rpb24gcG9pbnRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZTogXGZJaW50CitmdW5jdGlvbih2b2lkICppbnN0cmVhbSwgY3VybF9vZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pO1xmUCBUaGlzIGZ1bmN0aW9uIGdldHMKK2NhbGxlZCBieSBsaWJjdXJsIHRvIHNlZWsgdG8gYSBjZXJ0YWluIHBvc2l0aW9uIGluIHRoZSBpbnB1dCBzdHJlYW0gYW5kIGNhbiBiZQordXNlZCB0byBmYXN0IGZvcndhcmQgYSBmaWxlIGluIGEgcmVzdW1lZCB1cGxvYWQgKGluc3RlYWQgb2YgcmVhZGluZyBhbGwKK3VwbG9hZGVkIGJ5dGVzIHdpdGggdGhlIG5vcm1hbCByZWFkIGZ1bmN0aW9uL2NhbGxiYWNrKS4gSXQgaXMgYWxzbyBjYWxsZWQgdG8KK3Jld2luZCBhIHN0cmVhbSB3aGVuIGRvaW5nIGEgSFRUUCBQVVQgb3IgUE9TVCB3aXRoIGEgbXVsdGktcGFzcyBhdXRoZW50aWNhdGlvbgorbWV0aG9kLiBUaGUgZnVuY3Rpb24gc2hhbGwgd29yayBsaWtlICJmc2VlayIgb3IgImxzZWVrIiBhbmQgYWNjZXB0ZWQgU0VFS19TRVQsCitTRUVLX0NVUiBhbmQgU0VFS19FTkQgYXMgYXJndW1lbnQgZm9yIG9yaWdpbiwgYWx0aG91Z2ggKGluIDcuMTguMCkgbGliY3VybAorb25seSBwYXNzZXMgU0VFS19TRVQuIFRoZSBjYWxsYmFjayBtdXN0IHJldHVybiAwIChDVVJMX1NFRUtGVU5DX09LKSBvbgorc3VjY2VzcywgMSAoQ1VSTF9TRUVLRlVOQ19GQUlMKSB0byBjYXVzZSB0aGUgdXBsb2FkIG9wZXJhdGlvbiB0byBmYWlsIG9yIDIKKyhDVVJMX1NFRUtGVU5DX0NBTlRTRUVLKSB0byBpbmRpY2F0ZSB0aGF0IHdoaWxlIHRoZSBzZWVrIGZhaWxlZCwgbGliY3VybCBpcworZnJlZSB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbSBpZiBwb3NzaWJsZS4gVGhlIGxhdHRlciBjYW4gc29tZXRpbWVzIGJlIGRvbmUKK2J5IGluc3RlYWQgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBvciBzaW1pbGFyLgorCitJZiB5b3UgZm9yd2FyZCB0aGUgaW5wdXQgYXJndW1lbnRzIGRpcmVjdGx5IHRvICJmc2VlayIgb3IgImxzZWVrIiwgbm90ZSB0aGF0Cit0aGUgZGF0YSB0eXBlIGZvciBcZklvZmZzZXRcZlAgaXMgbm90IHRoZSBzYW1lIGFzIGRlZmluZWQgZm9yIGN1cmxfb2ZmX3Qgb24KK21hbnkgc3lzdGVtcyEgKE9wdGlvbiBhZGRlZCBpbiA3LjE4LjApCisuSVAgQ1VSTE9QVF9TRUVLREFUQQorRGF0YSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZpbGUgc2VlayBmdW5jdGlvbi4gSWYgeW91IHVzZSB0aGUKK1xmSUNVUkxPUFRfU0VFS0ZVTkNUSU9OXGZQIG9wdGlvbiwgdGhpcyBpcyB0aGUgcG9pbnRlciB5b3UnbGwgZ2V0IGFzIGlucHV0LiBJZgoreW91IGRvbid0IHNwZWNpZnkgYSBzZWVrIGNhbGxiYWNrLCBOVUxMIGlzIHBhc3NlZC4gKE9wdGlvbiBhZGRlZCBpbiA3LjE4LjApCisuSVAgQ1VSTE9QVF9TT0NLT1BURlVOQ1RJT04KK0Z1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIFxmSWN1cmxfc29ja29wdF9jYWxsYmFja1xmUCBwcm90b3R5cGUKK2ZvdW5kIGluIFxmSTxjdXJsL2N1cmwuaD5cZlAuIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgbGliY3VybCBhZnRlciB0aGUKK3NvY2tldCgpIGNhbGwgYnV0IGJlZm9yZSB0aGUgY29ubmVjdCgpIGNhbGwuIFRoZSBjYWxsYmFjaydzIFxmSXB1cnBvc2VcZlAKK2FyZ3VtZW50IGlkZW50aWZpZXMgdGhlIGV4YWN0IHB1cnBvc2UgZm9yIHRoaXMgcGFydGljdWxhciBzb2NrZXQsIGFuZAorY3VycmVudGx5IG9ubHkgb25lIHZhbHVlIGlzIHN1cHBvcnRlZDogXGZJQ1VSTFNPQ0tUWVBFX0lQQ1hOXGZQIGZvciB0aGUKK3ByaW1hcnkgY29ubmVjdGlvbiAobWVhbmluZyB0aGUgY29udHJvbCBjb25uZWN0aW9uIGluIHRoZSBGVFAgY2FzZSkuIEZ1dHVyZQordmVyc2lvbnMgb2YgbGliY3VybCBtYXkgc3VwcG9ydCBtb3JlIHB1cnBvc2VzLiBJdCBwYXNzZXMgdGhlIG5ld2x5IGNyZWF0ZWQKK3NvY2tldCBkZXNjcmlwdG9yIHNvIGFkZGl0aW9uYWwgc2V0c29ja29wdCgpIGNhbGxzIGNhbiBiZSBkb25lIGF0IHRoZSB1c2VyJ3MKK2Rpc2NyZXRpb24uICBSZXR1cm4gMCAoemVybykgZnJvbSB0aGUgY2FsbGJhY2sgb24gc3VjY2Vzcy4gUmV0dXJuIDEgZnJvbSB0aGUKK2NhbGxiYWNrIGZ1bmN0aW9uIHRvIHNpZ25hbCBhbiB1bnJlY292ZXJhYmxlIGVycm9yIHRvIHRoZSBsaWJyYXJ5IGFuZCBpdCB3aWxsCitjbG9zZSB0aGUgc29ja2V0IGFuZCByZXR1cm4gXGZJQ1VSTEVfQ09VTEROVF9DT05ORUNUXGZQLiAgKE9wdGlvbiBhZGRlZCBpbgorNy4xNi4wKQorCitBZGRlZCBpbiA3LjIxLjUsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBtYXkgcmV0dXJuCitcZklDVVJMX1NPQ0tPUFRfQUxSRUFEWV9DT05ORUNURURcZlAsIHdoaWNoIHRlbGxzIGxpYmN1cmwgdGhhdCB0aGUgc29ja2V0IGlzCitpbiBmYWN0IGFscmVhZHkgY29ubmVjdGVkIGFuZCB0aGVuIGxpYmN1cmwgd2lsbCBub3QgYXR0ZW1wdCB0byBjb25uZWN0IGl0LgorLklQIENVUkxPUFRfU09DS09QVERBVEEKK1Bhc3MgYSBwb2ludGVyIHRoYXQgd2lsbCBiZSB1bnRvdWNoZWQgYnkgbGliY3VybCBhbmQgcGFzc2VkIGFzIHRoZSBmaXJzdAorYXJndW1lbnQgaW4gdGhlIHNvY2tvcHQgY2FsbGJhY2sgc2V0IHdpdGggXGZJQ1VSTE9QVF9TT0NLT1BURlVOQ1RJT05cZlAuCisoT3B0aW9uIGFkZGVkIGluIDcuMTYuMCkKKy5JUCBDVVJMT1BUX09QRU5TT0NLRVRGVU5DVElPTgorRnVuY3Rpb24gcG9pbnRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgXGZJY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrXGZQCitwcm90b3R5cGUgZm91bmQgaW4gXGZJPGN1cmwvY3VybC5oPlxmUC4gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBsaWJjdXJsCitpbnN0ZWFkIG9mIHRoZSBcZklzb2NrZXQoMilcZlAgY2FsbC4gVGhlIGNhbGxiYWNrJ3MgXGZJcHVycG9zZVxmUCBhcmd1bWVudAoraWRlbnRpZmllcyB0aGUgZXhhY3QgcHVycG9zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHNvY2tldDoKK1xmSUNVUkxTT0NLVFlQRV9JUENYTlxmUCBpcyBmb3IgSVAgYmFzZWQgY29ubmVjdGlvbnMuIEZ1dHVyZSB2ZXJzaW9ucyBvZgorbGliY3VybCBtYXkgc3VwcG9ydCBtb3JlIHB1cnBvc2VzLiBJdCBwYXNzZXMgdGhlIHJlc29sdmVkIHBlZXIgYWRkcmVzcyBhcyBhCitcZklhZGRyZXNzXGZQIGFyZ3VtZW50IHNvIHRoZSBjYWxsYmFjayBjYW4gbW9kaWZ5IHRoZSBhZGRyZXNzIG9yIHJlZnVzZSB0bworY29ubmVjdCBhdCBhbGwuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBzb2NrZXQgb3IKK1xmSUNVUkxfU09DS0VUX0JBRFxmUCBpbiBjYXNlIG5vIGNvbm5lY3Rpb24gc2hvdWxkIGJlIGVzdGFibGlzaGVkIG9yIGFueSBlcnJvcgorZGV0ZWN0ZWQuIEFueSBhZGRpdGlvbmFsIFxmSXNldHNvY2tvcHQoMilcZlAgY2FsbHMgY2FuIGJlIGRvbmUgb24gdGhlIHNvY2tldAorYXQgdGhlIHVzZXIncyBkaXNjcmV0aW9uLiAgXGZJQ1VSTF9TT0NLRVRfQkFEXGZQIHJldHVybiB2YWx1ZSBmcm9tIHRoZQorY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBzaWduYWwgYW4gdW5yZWNvdmVyYWJsZSBlcnJvciB0byB0aGUgbGlicmFyeSBhbmQgaXQKK3dpbGwgcmV0dXJuIFxmSUNVUkxFX0NPVUxETlRfQ09OTkVDVFxmUC4gIFRoaXMgcmV0dXJuIGNvZGUgY2FuIGJlIHVzZWQgZm9yIElQCithZGRyZXNzIGJsYWNrbGlzdGluZy4gIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzOgorLm5mCisgICByZXR1cm4gc29ja2V0KGFkZHItPmZhbWlseSwgYWRkci0+c29ja3R5cGUsIGFkZHItPnByb3RvY29sKTsKKy5maQorKE9wdGlvbiBhZGRlZCBpbiA3LjE3LjEuKQorLklQIENVUkxPUFRfT1BFTlNPQ0tFVERBVEEKK1Bhc3MgYSBwb2ludGVyIHRoYXQgd2lsbCBiZSB1bnRvdWNoZWQgYnkgbGliY3VybCBhbmQgcGFzc2VkIGFzIHRoZSBmaXJzdAorYXJndW1lbnQgaW4gdGhlIG9wZW5zb2NrZXQgY2FsbGJhY2sgc2V0IHdpdGggXGZJQ1VSTE9QVF9PUEVOU09DS0VURlVOQ1RJT05cZlAuCisoT3B0aW9uIGFkZGVkIGluIDcuMTcuMS4pCisuSVAgQ1VSTE9QVF9DTE9TRVNPQ0tFVEZVTkNUSU9OCitGdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBcZkljdXJsX2Nsb3Nlc29ja2V0X2NhbGxiYWNrXGZQCitwcm90b3R5cGUgZm91bmQgaW4gXGZJPGN1cmwvY3VybC5oPlxmUC4gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBsaWJjdXJsCitpbnN0ZWFkIG9mIHRoZSBcZkljbG9zZSgzKVxmUCBvciBcZkljbG9zZXNvY2tldCgzKVxmUCBjYWxsIHdoZW4gc29ja2V0cyBhcmUKK2Nsb3NlZCAobm90IGZvciBhbnkgb3RoZXIgZmlsZSBkZXNjcmlwdG9ycykuIFRoaXMgaXMgcHJldHR5IG11Y2ggdGhlIHJldmVyc2UKK3RvIHRoZSBcZklDVVJMT1BUX09QRU5TT0NLRVRGVU5DVElPTlxmUCBvcHRpb24uIFJldHVybiAwIHRvIHNpZ25hbCBzdWNjZXNzIGFuZAorMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuICAoT3B0aW9uIGFkZGVkIGluIDcuMjEuNykKKy5JUCBDVVJMT1BUX0NMT1NFU09DS0VUREFUQQorUGFzcyBhIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHVudG91Y2hlZCBieSBsaWJjdXJsIGFuZCBwYXNzZWQgYXMgdGhlIGZpcnN0Cithcmd1bWVudCBpbiB0aGUgY2xvc2Vzb2NrZXQgY2FsbGJhY2sgc2V0IHdpdGgKK1xmSUNVUkxPUFRfQ0xPU0VTT0NLRVRGVU5DVElPTlxmUC4gIChPcHRpb24gYWRkZWQgaW4gNy4yMS43KQorLklQIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTgorRnVuY3Rpb24gcG9pbnRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgXGZJY3VybF9wcm9ncmVzc19jYWxsYmFja1xmUCBwcm90b3R5cGUKK2ZvdW5kIGluIFxmSTxjdXJsL2N1cmwuaD5cZlAuIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgbGliY3VybCBpbnN0ZWFkIG9mCitpdHMgaW50ZXJuYWwgZXF1aXZhbGVudCB3aXRoIGEgZnJlcXVlbnQgaW50ZXJ2YWwgZHVyaW5nIG9wZXJhdGlvbiAocm91Z2hseQorb25jZSBwZXIgc2Vjb25kIG9yIHNvb25lcikgbm8gbWF0dGVyIGlmIGRhdGEgaXMgYmVpbmcgdHJhbnNmZXJlZCBvciBub3QuCitVbmtub3duL3VudXNlZCBhcmd1bWVudCB2YWx1ZXMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayB3aWxsIGJlIHNldCB0byB6ZXJvCisobGlrZSBpZiB5b3Ugb25seSBkb3dubG9hZCBkYXRhLCB0aGUgdXBsb2FkIHNpemUgd2lsbCByZW1haW4gMCkuIFJldHVybmluZyBhCitub24temVybyB2YWx1ZSBmcm9tIHRoaXMgY2FsbGJhY2sgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFib3J0IHRoZSB0cmFuc2ZlciBhbmQKK3JldHVybiBcZklDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLXGZQLgorCitJZiB5b3UgdHJhbnNmZXIgZGF0YSB3aXRoIHRoZSBtdWx0aSBpbnRlcmZhY2UsIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgYmUKK2NhbGxlZCBkdXJpbmcgcGVyaW9kcyBvZiBpZGxlbmVzcyB1bmxlc3MgeW91IGNhbGwgdGhlIGFwcHJvcHJpYXRlIGxpYmN1cmwKK2Z1bmN0aW9uIHRoYXQgcGVyZm9ybXMgdHJhbnNmZXJzLgorCitcZklDVVJMT1BUX05PUFJPR1JFU1NcZlAgbXVzdCBiZSBzZXQgdG8gMCB0byBtYWtlIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkKK2dldCBjYWxsZWQuCisuSVAgQ1VSTE9QVF9QUk9HUkVTU0RBVEEKK1Bhc3MgYSBwb2ludGVyIHRoYXQgd2lsbCBiZSB1bnRvdWNoZWQgYnkgbGliY3VybCBhbmQgcGFzc2VkIGFzIHRoZSBmaXJzdAorYXJndW1lbnQgaW4gdGhlIHByb2dyZXNzIGNhbGxiYWNrIHNldCB3aXRoIFxmSUNVUkxPUFRfUFJPR1JFU1NGVU5DVElPTlxmUC4KKy5JUCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OCitGdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiBcZklzaXplX3QKK2Z1bmN0aW9uKCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnVzZXJkYXRhKTtcZlAuIFRoaXMKK2Z1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGxpYmN1cmwgYXMgc29vbiBhcyBpdCBoYXMgcmVjZWl2ZWQgaGVhZGVyIGRhdGEuIFRoZQoraGVhZGVyIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggaGVhZGVyIGFuZCBvbmx5IGNvbXBsZXRlIGhlYWRlcgorbGluZXMgYXJlIHBhc3NlZCBvbiB0byB0aGUgY2FsbGJhY2suIFBhcnNpbmcgaGVhZGVycyBpcyB2ZXJ5IGVhc3kgdXNpbmcKK3RoaXMuIFRoZSBzaXplIG9mIHRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgXGZJcHRyXGZQIGlzIFxmSXNpemVcZlAgbXVsdGlwbGllZAord2l0aCBcZklubWVtYlxmUC4gRG8gbm90IGFzc3VtZSB0aGF0IHRoZSBoZWFkZXIgbGluZSBpcyB6ZXJvIHRlcm1pbmF0ZWQhIFRoZQorcG9pbnRlciBuYW1lZCBcZkl1c2VyZGF0YVxmUCBpcyB0aGUgb25lIHlvdSBzZXQgd2l0aCB0aGUKK1xmSUNVUkxPUFRfV1JJVEVIRUFERVJcZlAgb3B0aW9uLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gbXVzdCByZXR1cm4gdGhlIG51bWJlcgorb2YgYnl0ZXMgYWN0dWFsbHkgdGFrZW4gY2FyZSBvZi4gSWYgdGhhdCBhbW91bnQgZGlmZmVycyBmcm9tIHRoZSBhbW91bnQgcGFzc2VkCit0byB5b3VyIGZ1bmN0aW9uLCBpdCdsbCBzaWduYWwgYW4gZXJyb3IgdG8gdGhlIGxpYnJhcnkuIFRoaXMgd2lsbCBhYm9ydCB0aGUKK3RyYW5zZmVyIGFuZCByZXR1cm4gXGZJQ1VSTF9XUklURV9FUlJPUlxmUC4KKworQSBjb21wbGV0ZSBoZWFkZXIgdGhhdCBpcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXAgdG8KK1xmSUNVUkxfTUFYX0hUVFBfSEVBREVSXGZQICgxMDBLKSBieXRlcy4KKworSWYgdGhpcyBvcHRpb24gaXMgbm90IHNldCwgb3IgaWYgaXQgaXMgc2V0IHRvIE5VTEwsIGJ1dAorXGZJQ1VSTE9QVF9IRUFERVJEQVRBXGZQIChcZklDVVJMT1BUX1dSSVRFSEVBREVSXGZQKSBpcyBzZXQgdG8gYW55dGhpbmcgYnV0CitOVUxMLCB0aGUgZnVuY3Rpb24gdXNlZCB0byBhY2NlcHQgcmVzcG9uc2UgZGF0YSB3aWxsIGJlIHVzZWQgaW5zdGVhZC4gVGhhdCBpcywKK2l0IHdpbGwgYmUgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCB3aXRoIFxmSUNVUkxPUFRfV1JJVEVGVU5DVElPTlxmUCwgb3IgaWYgaXQKK2lzIG5vdCBzcGVjaWZpZWQgb3IgTlVMTCAtIHRoZSBkZWZhdWx0LCBzdHJlYW0td3JpdGluZyBmdW5jdGlvbi4KKworSXQncyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgZm9yIHRoZSBoZWFkZXJzIG9mCithbGwgcmVzcG9uc2VzIHJlY2VpdmVkIGFmdGVyIGluaXRpYXRpbmcgYSByZXF1ZXN0IGFuZCBub3QganVzdCB0aGUgZmluYWwKK3Jlc3BvbnNlLiBUaGlzIGluY2x1ZGVzIGFsbCByZXNwb25zZXMgd2hpY2ggb2NjdXIgZHVyaW5nIGF1dGhlbnRpY2F0aW9uCituZWdvdGlhdGlvbi4gSWYgeW91IG5lZWQgdG8gb3BlcmF0ZSBvbiBvbmx5IHRoZSBoZWFkZXJzIGZyb20gdGhlIGZpbmFsCityZXNwb25zZSwgeW91IHdpbGwgbmVlZCB0byBjb2xsZWN0IGhlYWRlcnMgaW4gdGhlIGNhbGxiYWNrIHlvdXJzZWxmIGFuZCB1c2UKK0hUVFAgc3RhdHVzIGxpbmVzLCBmb3IgZXhhbXBsZSwgdG8gZGVsaW1pdCByZXNwb25zZSBib3VuZGFyaWVzLgorCitXaGVuIGEgc2VydmVyIHNlbmRzIGEgY2h1bmtlZCBlbmNvZGVkIHRyYW5zZmVyLCBpdCBtYXkgY29udGFpbiBhIHRyYWlsZXIuIFRoYXQKK3RyYWlsZXIgaXMgaWRlbnRpY2FsIHRvIGEgSFRUUCBoZWFkZXIgYW5kIGlmIHN1Y2ggYSB0cmFpbGVyIGlzIHJlY2VpdmVkIGl0IGlzCitwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHVzaW5nIHRoaXMgY2FsbGJhY2sgYXMgd2VsbC4gVGhlcmUgYXJlIHNldmVyYWwgd2F5cwordG8gZGV0ZWN0IGl0IGJlaW5nIGEgdHJhaWxlciBhbmQgbm90IGFuIG9yZGluYXJ5IGhlYWRlcjogMSkgaXQgY29tZXMgYWZ0ZXIgdGhlCityZXNwb25zZS1ib2R5LiAyKSBpdCBjb21lcyBhZnRlciB0aGUgZmluYWwgaGVhZGVyIGxpbmUgKENSIExGKSAzKSBhIFRyYWlsZXI6CitoZWFkZXIgYW1vbmcgdGhlIHJlZ3VsYXIgcmVzcG9uc2UtaGVhZGVycyBtZW50aW9uIHdoYXQgaGVhZGVyKHMpIHRvIGV4cGVjdCBpbgordGhlIHRyYWlsZXIuCisuSVAgQ1VSTE9QVF9XUklURUhFQURFUgorKFRoaXMgb3B0aW9uIGlzIGFsc28ga25vd24gYXMgXGZCQ1VSTE9QVF9IRUFERVJEQVRBXGZQKSBQYXNzIGEgcG9pbnRlciB0byBiZQordXNlZCB0byB3cml0ZSB0aGUgaGVhZGVyIHBhcnQgb2YgdGhlIHJlY2VpdmVkIGRhdGEgdG8uIElmIHlvdSBkb24ndCB1c2UKK1xmSUNVUkxPUFRfV1JJVEVGVU5DVElPTlxmUCBvciBcZklDVVJMT1BUX0hFQURFUkZVTkNUSU9OXGZQIHRvIHRha2UgY2FyZSBvZgordGhlIHdyaXRpbmcsIHRoaXMgbXVzdCBiZSBhIHZhbGlkIEZJTEUgKiBhcyB0aGUgaW50ZXJuYWwgZGVmYXVsdCB3aWxsIHRoZW4gYmUKK2EgcGxhaW4gZndyaXRlKCkuIFNlZSBhbHNvIHRoZSBcZklDVVJMT1BUX0hFQURFUkZVTkNUSU9OXGZQIG9wdGlvbiBhYm92ZSBvbgoraG93IHRvIHNldCBhIGN1c3RvbSBnZXQtYWxsLWhlYWRlcnMgY2FsbGJhY2suCisuSVAgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OCitGdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiBcZklpbnQKK2N1cmxfZGVidWdfY2FsbGJhY2sgKENVUkwgKiwgY3VybF9pbmZvdHlwZSwgY2hhciAqLCBzaXplX3QsIHZvaWQgKik7XGZQCitcZklDVVJMT1BUX0RFQlVHRlVOQ1RJT05cZlAgcmVwbGFjZXMgdGhlIHN0YW5kYXJkIGRlYnVnIGZ1bmN0aW9uIHVzZWQgd2hlbgorXGZJQ1VSTE9QVF9WRVJCT1NFIFxmUCBpcyBpbiBlZmZlY3QuIFRoaXMgY2FsbGJhY2sgcmVjZWl2ZXMgZGVidWcgaW5mb3JtYXRpb24sCithcyBzcGVjaWZpZWQgd2l0aCB0aGUgXGZCY3VybF9pbmZvdHlwZVxmUCBhcmd1bWVudC4gVGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybgorMC4gIFRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgdGhlIGNoYXIgKiBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBXSUxMIE5PVCBiZSB6ZXJvCit0ZXJtaW5hdGVkLCBidXQgd2lsbCBiZSBleGFjdGx5IG9mIHRoZSBzaXplIGFzIHRvbGQgYnkgdGhlIHNpemVfdCBhcmd1bWVudC4KKworQXZhaWxhYmxlIGN1cmxfaW5mb3R5cGUgdmFsdWVzOgorLlJTCisuSVAgQ1VSTElORk9fVEVYVAorVGhlIGRhdGEgaXMgaW5mb3JtYXRpb25hbCB0ZXh0LgorLklQIENVUkxJTkZPX0hFQURFUl9JTgorVGhlIGRhdGEgaXMgaGVhZGVyIChvciBoZWFkZXItbGlrZSkgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBwZWVyLgorLklQIENVUkxJTkZPX0hFQURFUl9PVVQKK1RoZSBkYXRhIGlzIGhlYWRlciAob3IgaGVhZGVyLWxpa2UpIGRhdGEgc2VudCB0byB0aGUgcGVlci4KKy5JUCBDVVJMSU5GT19EQVRBX0lOCitUaGUgZGF0YSBpcyBwcm90b2NvbCBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIHBlZXIuCisuSVAgQ1VSTElORk9fREFUQV9PVVQKK1RoZSBkYXRhIGlzIHByb3RvY29sIGRhdGEgc2VudCB0byB0aGUgcGVlci4KKy5SRQorLklQIENVUkxPUFRfREVCVUdEQVRBCitQYXNzIGEgcG9pbnRlciB0byB3aGF0ZXZlciB5b3Ugd2FudCBwYXNzZWQgaW4gdG8geW91cgorXGZJQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OXGZQIGluIHRoZSBsYXN0IHZvaWQgKiBhcmd1bWVudC4gVGhpcyBwb2ludGVyIGlzIG5vdAordXNlZCBieSBsaWJjdXJsLCBpdCBpcyBvbmx5IHBhc3NlZCB0byB0aGUgY2FsbGJhY2suCisuSVAgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OCitUaGlzIG9wdGlvbiBkb2VzIG9ubHkgZnVuY3Rpb24gZm9yIGxpYmN1cmwgcG93ZXJlZCBieSBPcGVuU1NMLiBJZiBsaWJjdXJsIHdhcworYnVpbHQgYWdhaW5zdCBhbm90aGVyIFNTTCBsaWJyYXJ5LCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWJzZW50LgorCitGdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiBcZkJDVVJMY29kZQorc3NsY3R4ZnVuKENVUkwgKmN1cmwsIHZvaWQgKnNzbGN0eCwgdm9pZCAqcGFybSk7XGZQIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQKK2J5IGxpYmN1cmwganVzdCBiZWZvcmUgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgU1NMIGNvbm5lY3Rpb24gYWZ0ZXIgaGF2aW5nCitwcm9jZXNzZWQgYWxsIG90aGVyIFNTTCByZWxhdGVkIG9wdGlvbnMgdG8gZ2l2ZSBhIGxhc3QgY2hhbmNlIHRvIGFuCithcHBsaWNhdGlvbiB0byBtb2RpZnkgdGhlIGJlaGF2aW91ciBvZiBvcGVuc3NsJ3Mgc3NsIGluaXRpYWxpemF0aW9uLiBUaGUKK1xmSXNzbGN0eFxmUCBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgYSBwb2ludGVyIHRvIGFuIG9wZW5zc2wgXGZJU1NMX0NUWFxmUC4gSWYKK2FuIGVycm9yIGlzIHJldHVybmVkIG5vIGF0dGVtcHQgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiBpcyBtYWRlIGFuZCB0aGUKK3BlcmZvcm0gb3BlcmF0aW9uIHdpbGwgcmV0dXJuIHRoZSBlcnJvciBjb2RlIGZyb20gdGhpcyBjYWxsYmFjayBmdW5jdGlvbi4gIFNldAordGhlIFxmSXBhcm1cZlAgYXJndW1lbnQgd2l0aCB0aGUgXGZJQ1VSTE9QVF9TU0xfQ1RYX0RBVEFcZlAgb3B0aW9uLiBUaGlzCitvcHRpb24gd2FzIGludHJvZHVjZWQgaW4gNy4xMS4wLgorCitUaGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IGNhbGxlZCBvbiBhbGwgbmV3IGNvbm5lY3Rpb25zIG1hZGUgdG8gYSBzZXJ2ZXIsIGR1cmluZwordGhlIFNTTCBuZWdvdGlhdGlvbi4gVGhlIFNTTF9DVFggcG9pbnRlciB3aWxsIGJlIGEgbmV3IG9uZSBldmVyeSB0aW1lLgorCitUbyB1c2UgdGhpcyBwcm9wZXJseSwgYSBub24tdHJpdmlhbCBhbW91bnQgb2Yga25vd2xlZGdlIG9mIHRoZSBvcGVuc3NsCitsaWJyYXJpZXMgaXMgbmVjZXNzYXJ5LiBGb3IgZXhhbXBsZSwgdXNpbmcgdGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHVzZQorb3BlbnNzbCBjYWxsYmFja3MgdG8gYWRkIGFkZGl0aW9uYWwgdmFsaWRhdGlvbiBjb2RlIGZvciBjZXJ0aWZpY2F0ZXMsIGFuZCBldmVuCit0byBjaGFuZ2UgdGhlIGFjdHVhbCBVUkkgb2YgYSBIVFRQUyByZXF1ZXN0IChleGFtcGxlIHVzZWQgaW4gdGhlIGxpYjUwOSB0ZXN0CitjYXNlKS4gIFNlZSBhbHNvIHRoZSBleGFtcGxlIHNlY3Rpb24gZm9yIGEgcmVwbGFjZW1lbnQgb2YgdGhlIGtleSwgY2VydGlmaWNhdGUKK2FuZCB0cnVzdCBmaWxlIHNldHRpbmdzLgorLklQIENVUkxPUFRfU1NMX0NUWF9EQVRBCitEYXRhIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgc3NsIGNvbnRleHQgY2FsbGJhY2sgc2V0IGJ5IHRoZSBvcHRpb24KK1xmSUNVUkxPUFRfU1NMX0NUWF9GVU5DVElPTlxmUCwgdGhpcyBpcyB0aGUgcG9pbnRlciB5b3UnbGwgZ2V0IGFzIHRoaXJkCitwYXJhbWV0ZXIsIG90aGVyd2lzZSBcZkJOVUxMXGZQLiAoQWRkZWQgaW4gNy4xMS4wKQorLklQIENVUkxPUFRfQ09OVl9UT19ORVRXT1JLX0ZVTkNUSU9OCisuSVAgQ1VSTE9QVF9DT05WX0ZST01fTkVUV09SS19GVU5DVElPTgorLklQIENVUkxPUFRfQ09OVl9GUk9NX1VURjhfRlVOQ1RJT04KK0Z1bmN0aW9uIHBvaW50ZXJzIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiBDVVJMY29kZQorZnVuY3Rpb24oY2hhciAqcHRyLCBzaXplX3QgbGVuZ3RoKTsKKworVGhlc2UgdGhyZWUgb3B0aW9ucyBhcHBseSB0byBub24tQVNDSUkgcGxhdGZvcm1zIG9ubHkuICBUaGV5IGFyZSBhdmFpbGFibGUKK29ubHkgaWYgXGZCQ1VSTF9ET0VTX0NPTlZFUlNJT05TXGZQIHdhcyBkZWZpbmVkIHdoZW4gbGliY3VybCB3YXMgYnVpbHQuIFdoZW4KK3RoaXMgaXMgdGhlIGNhc2UsIFxmSWN1cmxfdmVyc2lvbl9pbmZvKDMpXGZQIHdpbGwgcmV0dXJuIHRoZSBDVVJMX1ZFUlNJT05fQ09OVgorZmVhdHVyZSBiaXQgc2V0LgorCitUaGUgZGF0YSB0byBiZSBjb252ZXJ0ZWQgaXMgaW4gYSBidWZmZXIgcG9pbnRlZCB0byBieSB0aGUgcHRyIHBhcmFtZXRlci4gIFRoZQorYW1vdW50IG9mIGRhdGEgdG8gY29udmVydCBpcyBpbmRpY2F0ZWQgYnkgdGhlIGxlbmd0aCBwYXJhbWV0ZXIuICBUaGUgY29udmVydGVkCitkYXRhIG92ZXJsYXlzIHRoZSBpbnB1dCBkYXRhIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSB0aGUgcHRyIHBhcmFtZXRlci4KK0NVUkxFX09LIHNob3VsZCBiZSByZXR1cm5lZCB1cG9uIHN1Y2Nlc3NmdWwgY29udmVyc2lvbi4gIEEgQ1VSTGNvZGUgcmV0dXJuCit2YWx1ZSBkZWZpbmVkIGJ5IGN1cmwuaCwgc3VjaCBhcyBDVVJMRV9DT05WX0ZBSUxFRCwgc2hvdWxkIGJlIHJldHVybmVkIGlmIGFuCitlcnJvciB3YXMgZW5jb3VudGVyZWQuCisKK1xmQkNVUkxPUFRfQ09OVl9UT19ORVRXT1JLX0ZVTkNUSU9OXGZQIGFuZAorXGZCQ1VSTE9QVF9DT05WX0ZST01fTkVUV09SS19GVU5DVElPTlxmUCBjb252ZXJ0IGJldHdlZW4gdGhlIGhvc3QgZW5jb2RpbmcgYW5kCit0aGUgbmV0d29yayBlbmNvZGluZy4gIFRoZXkgYXJlIHVzZWQgd2hlbiBjb21tYW5kcyBvciBBU0NJSSBkYXRhIGFyZQorc2VudC9yZWNlaXZlZCBvdmVyIHRoZSBuZXR3b3JrLgorCitcZkJDVVJMT1BUX0NPTlZfRlJPTV9VVEY4X0ZVTkNUSU9OXGZQIGlzIGNhbGxlZCB0byBjb252ZXJ0IGZyb20gVVRGOCBpbnRvIHRoZQoraG9zdCBlbmNvZGluZy4gIEl0IGlzIHJlcXVpcmVkIG9ubHkgZm9yIFNTTCBwcm9jZXNzaW5nLgorCitJZiB5b3Ugc2V0IGEgY2FsbGJhY2sgcG9pbnRlciB0byBOVUxMLCBvciBkb24ndCBzZXQgaXQgYXQgYWxsLCB0aGUgYnVpbHQtaW4KK2xpYmN1cmwgaWNvbnYgZnVuY3Rpb25zIHdpbGwgYmUgdXNlZC4gIElmIEhBVkVfSUNPTlYgd2FzIG5vdCBkZWZpbmVkIHdoZW4KK2xpYmN1cmwgd2FzIGJ1aWx0LCBhbmQgbm8gY2FsbGJhY2sgaGFzIGJlZW4gZXN0YWJsaXNoZWQsIGNvbnZlcnNpb24gd2lsbAorcmV0dXJuIHRoZSBDVVJMRV9DT05WX1JFUUQgZXJyb3IgY29kZS4KKworSWYgSEFWRV9JQ09OViBpcyBkZWZpbmVkLCBDVVJMX0lDT05WX0NPREVTRVRfT0ZfSE9TVCBtdXN0IGFsc28gYmUgZGVmaW5lZC4KK0ZvciBleGFtcGxlOgorCisgXCYjZGVmaW5lIENVUkxfSUNPTlZfQ09ERVNFVF9PRl9IT1NUICJJQk0tMTA0NyIKKworVGhlIGljb252IGNvZGUgaW4gbGliY3VybCB3aWxsIGRlZmF1bHQgdGhlIG5ldHdvcmsgYW5kIFVURjggY29kZXNldCBuYW1lcyBhcworZm9sbG93czoKKworIFwmI2RlZmluZSBDVVJMX0lDT05WX0NPREVTRVRfT0ZfTkVUV09SSyAiSVNPODg1OS0xIgorCisgXCYjZGVmaW5lIENVUkxfSUNPTlZfQ09ERVNFVF9GT1JfVVRGOCAgICJVVEYtOCIKKworWW91IHdpbGwgbmVlZCB0byBvdmVycmlkZSB0aGVzZSBkZWZpbml0aW9ucyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgb24geW91cgorc3lzdGVtLgorLklQIENVUkxPUFRfSU5URVJMRUFWRUZVTkNUSU9OCitGdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiBcZklzaXplX3QKK2Z1bmN0aW9uKCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnVzZXJkYXRhKVxmUC4gVGhpcworZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgbGliY3VybCBhcyBzb29uIGFzIGl0IGhhcyByZWNlaXZlZCBpbnRlcmxlYXZlZCBSVFAKK2RhdGEuIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZm9yIGVhY2ggJCBibG9jayBhbmQgdGhlcmVmb3JlIGNvbnRhaW5zCitleGFjdGx5IG9uZSB1cHBlci1sYXllciBwcm90b2NvbCB1bml0IChlLmcuICBvbmUgUlRQIHBhY2tldCkuIEN1cmwgd3JpdGVzIHRoZQoraW50ZXJsZWF2ZWQgaGVhZGVyIGFzIHdlbGwgYXMgdGhlIGluY2x1ZGVkIGRhdGEgZm9yIGVhY2ggY2FsbC4gVGhlIGZpcnN0IGJ5dGUKK2lzIGFsd2F5cyBhbiBBU0NJSSBkb2xsYXIgc2lnbi4gVGhlIGRvbGxhciBzaWduIGlzIGZvbGxvd2VkIGJ5IGEgb25lIGJ5dGUKK2NoYW5uZWwgaWRlbnRpZmllciBhbmQgdGhlbiBhIDIgYnl0ZSBpbnRlZ2VyIGxlbmd0aCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuIFNlZQorXGZJUkZDIDIzMjYgU2VjdGlvbiAxMC4xMlxmUCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgUlRQIGludGVybGVhdmluZworYmVoYXZlcy4gSWYgdW5zZXQgb3Igc2V0IHRvIE5VTEwsIGN1cmwgd2lsbCB1c2UgdGhlIGRlZmF1bHQgd3JpdGUgZnVuY3Rpb24uCisKK0ludGVybGVhdmVkIFJUUCBwb3NlcyBzb21lIGNoYWxsZW5lZ2VzIGZvciB0aGUgY2xpZW50IGFwcGxpY2F0aW9uLiBTaW5jZSB0aGUKK3N0cmVhbSBkYXRhIGlzIHNoYXJpbmcgdGhlIFJUU1AgY29udHJvbCBjb25uZWN0aW9uLCBpdCBpcyBjcml0aWNhbCB0byBzZXJ2aWNlCit0aGUgUlRQIGluIGEgdGltZWx5IGZhc2hpb24uIElmIHRoZSBSVFAgZGF0YSBpcyBub3QgaGFuZGxlZCBxdWlja2x5LAorc3Vic2VxdWVudCByZXNwb25zZSBwcm9jZXNzaW5nIG1heSBiZWNvbWUgdW5yZWFzb25hYmx5IGRlbGF5ZWQgYW5kIHRoZQorY29ubmVjdGlvbiBtYXkgY2xvc2UuIFRoZSBhcHBsaWNhdGlvbiBtYXkgdXNlIFxmSUNVUkxfUlRTUFJFUV9SRUNFSVZFXGZQIHRvCitzZXJ2aWNlIFJUUCBkYXRhIHdoZW4gbm8gcmVxdWVzdHMgYXJlIGRlc2lyZWQuIElmIHRoZSBhcHBsaWNhdGlvbiBtYWtlcyBhCityZXF1ZXN0LCAoZS5nLiAgXGZJQ1VSTF9SVFNQUkVRX1BBVVNFXGZQKSB0aGVuIHRoZSByZXNwb25zZSBoYW5kbGVyIHdpbGwKK3Byb2Nlc3MgYW55IHBlbmRpbmcgUlRQIGRhdGEgYmVmb3JlIG1hcmtpbmcgdGhlIHJlcXVlc3QgYXMgZmluaXNoZWQuICAoQWRkZWQKK2luIDcuMjAuMCkKKy5JUCBDVVJMT1BUX0lOVEVSTEVBVkVEQVRBCitUaGlzIGlzIHRoZSB1c2VyZGF0YSBwb2ludGVyIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8KK1xmSUNVUkxPUFRfSU5URVJMRUFWRUZVTkNUSU9OXGZQIHdoZW4gaW50ZXJsZWF2ZWQgUlRQIGRhdGEgaXMgcmVjZWl2ZWQuIChBZGRlZAoraW4gNy4yMC4wKQorLklQIENVUkxPUFRfQ0hVTktfQkdOX0ZVTkNUSU9OCitGdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiBcZkJsb25nIGZ1bmN0aW9uCisoY29uc3Qgdm9pZCAqdHJhbnNmZXJfaW5mbywgdm9pZCAqcHRyLCBpbnQgcmVtYWlucylcZlAuIFRoaXMgZnVuY3Rpb24gZ2V0cworY2FsbGVkIGJ5IGxpYmN1cmwgYmVmb3JlIGEgcGFydCBvZiB0aGUgc3RyZWFtIGlzIGdvaW5nIHRvIGJlIHRyYW5zZmVycmVkIChpZgordGhlIHRyYW5zZmVyIHN1cHBvcnRzIGNodW5rcykuCisKK1RoaXMgY2FsbGJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aGVuIHVzaW5nIHRoZSBcZklDVVJMT1BUX1dJTERDQVJETUFUQ0hcZlAKK29wdGlvbiBmb3Igbm93LgorCitUaGUgdGFyZ2V0IG9mIHRyYW5zZmVyX2luZm8gcGFyYW1ldGVyIGlzIGEgImZlYXR1cmUgZGVwZW5kZWQiIHN0cnVjdHVyZS4gRm9yCit0aGUgRlRQIHdpbGRjYXJkIGRvd25sb2FkLCB0aGUgdGFyZ2V0IGlzIGN1cmxfZmlsZWluZm8gc3RydWN0dXJlIChzZWUKK1xmSWN1cmwvY3VybC5oXGZQKS4gIFRoZSBwYXJhbWV0ZXIgcHRyIGlzIGEgcG9pbnRlciBnaXZlbiBieQorXGZJQ1VSTE9QVF9DSFVOS19EQVRBXGZQLiBUaGUgcGFyYW1ldGVyIHJlbWFpbnMgY29udGFpbnMgbnVtYmVyIG9mIGNodW5rcworcmVtYWluaW5nIHBlciB0aGUgdHJhbnNmZXIuIElmIHRoZSBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBwYXJhbWV0ZXIgaGFzCit6ZXJvIHZhbHVlLgorCitSZXR1cm4gXGZJQ1VSTF9DSFVOS19CR05fRlVOQ19PS1xmUCBpZiBldmVyeXRoaW5nIGlzIGZpbmUsCitcZklDVVJMX0NIVU5LX0JHTl9GVU5DX1NLSVBcZlAgaWYgeW91IHdhbnQgdG8gc2tpcCB0aGUgY29uY3JldGUgY2h1bmsgb3IKK1xmSUNVUkxfQ0hVTktfQkdOX0ZVTkNfRkFJTFxmUCB0byB0ZWxsIGxpYmN1cmwgdG8gc3RvcCBpZiBzb21lIGVycm9yIG9jY3VycmVkLgorKFRoaXMgd2FzIGFkZGVkIGluIDcuMjEuMCkKKy5JUCBDVVJMT1BUX0NIVU5LX0VORF9GVU5DVElPTgorRnVuY3Rpb24gcG9pbnRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZTogXGZCbG9uZworZnVuY3Rpb24odm9pZCAqcHRyKVxmUC4gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBsaWJjdXJsIGFzIHNvb24gYXMgYSBwYXJ0CitvZiB0aGUgc3RyZWFtIGhhcyBiZWVuIHRyYW5zZmVycmVkIChvciBza2lwcGVkKS4KKworUmV0dXJuIFxmSUNVUkxfQ0hVTktfRU5EX0ZVTkNfT0tcZlAgaWYgZXZlcnl0aGluZyBpcyBmaW5lIG9yCitcZkJDVVJMX0NIVU5LX0VORF9GVU5DX0ZBSUxcZlAgdG8gdGVsbCB0aGUgbGliIHRvIHN0b3AgaWYgc29tZSBlcnJvciBvY2N1cnJlZC4KKyhUaGlzIHdhcyBhZGRlZCBpbiA3LjIxLjApCisuSVAgQ1VSTE9QVF9DSFVOS19EQVRBCitQYXNzIGEgcG9pbnRlciB0aGF0IHdpbGwgYmUgdW50b3VjaGVkIGJ5IGxpYmN1cmwgYW5kIHBhc3NlZCBhcyB0aGUgcHRyCithcmd1bWVudCB0byB0aGUgXGZJQ1VSTF9DSFVOS19CR05fRlVOVElPTlxmUCBhbmQgXGZJQ1VSTF9DSFVOS19FTkRfRlVOVElPTlxmUC4KKyhUaGlzIHdhcyBhZGRlZCBpbiA3LjIxLjApCisuSVAgQ1VSTE9QVF9GTk1BVENIX0ZVTkNUSU9OCitGdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIFxmQmludCBmdW5jdGlvbih2b2lkICpwdHIsIGNvbnN0IGNoYXIKKypwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHJpbmcpXGZQIHByb3RvdHlwZSAoc2VlIFxmSWN1cmwvY3VybC5oXGZQKS4gSXQgaXMgdXNlZAoraW50ZXJuYWxseSBmb3IgdGhlIHdpbGRjYXJkIG1hdGNoaW5nIGZlYXR1cmUuCisKK1JldHVybiBcZklDVVJMX0ZOTUFUQ0hGVU5DX01BVENIXGZQIGlmIHBhdHRlcm4gbWF0Y2hlcyB0aGUgc3RyaW5nLAorXGZJQ1VSTF9GTk1BVENIRlVOQ19OT01BVENIXGZQIGlmIG5vdCBvciBcZklDVVJMX0ZOTUFUQ0hGVU5DX0ZBSUxcZlAgaWYgYW4KK2Vycm9yIG9jY3VycmVkLiAgKFRoaXMgd2FzIGFkZGVkIGluIDcuMjEuMCkKKy5JUCBDVVJMT1BUX0ZOTUFUQ0hfREFUQQorUGFzcyBhIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHVudG91Y2hlZCBieSBsaWJjdXJsIGFuZCBwYXNzZWQgYXMgdGhlIHB0ciBhcmd1bWVudAordG8gdGhlIFxmSUNVUkxfRk5NQVRDSF9GVU5DVElPTlxmUC4gKFRoaXMgd2FzIGFkZGVkIGluIDcuMjEuMCkKKy5TSCBFUlJPUiBPUFRJT05TCisuSVAgQ1VSTE9QVF9FUlJPUkJVRkZFUgorUGFzcyBhIGNoYXIgKiB0byBhIGJ1ZmZlciB0aGF0IHRoZSBsaWJjdXJsIG1heSBzdG9yZSBodW1hbiByZWFkYWJsZSBlcnJvcgorbWVzc2FnZXMgaW4uIFRoaXMgbWF5IGJlIG1vcmUgaGVscGZ1bCB0aGFuIGp1c3QgdGhlIHJldHVybiBjb2RlIGZyb20KK1xmSWN1cmxfZWFzeV9wZXJmb3JtXGZQLiBUaGUgYnVmZmVyIG11c3QgYmUgYXQgbGVhc3QgQ1VSTF9FUlJPUl9TSVpFIGJpZy4KK0FsdGhvdWdoIHRoaXMgYXJndW1lbnQgaXMgYSAnY2hhciAqJywgaXQgZG9lcyBub3QgZGVzY3JpYmUgYW4gaW5wdXQgc3RyaW5nLgorVGhlcmVmb3JlIHRoZSAocHJvYmFibHkgdW5kZWZpbmVkKSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIGlzIE5PVCBjb3BpZWQKK2J5IHRoZSBsaWJyYXJ5LiBZb3Ugc2hvdWxkIGtlZXAgdGhlIGFzc29jaWF0ZWQgc3RvcmFnZSBhdmFpbGFibGUgdW50aWwKK2xpYmN1cmwgbm8gbG9uZ2VyIG5lZWRzIGl0LiBGYWlsaW5nIHRvIGRvIHNvIHdpbGwgY2F1c2UgdmVyeSBvZGQgYmVoYXZpb3IKK29yIGV2ZW4gY3Jhc2hlcy4gbGliY3VybCB3aWxsIG5lZWQgaXQgdW50aWwgeW91IGNhbGwgXGZJY3VybF9lYXN5X2NsZWFudXAoMylcZlAKK29yIHlvdSBzZXQgdGhlIHNhbWUgb3B0aW9uIGFnYWluIHRvIHVzZSBhIGRpZmZlcmVudCBwb2ludGVyLgorCitVc2UgXGZJQ1VSTE9QVF9WRVJCT1NFXGZQIGFuZCBcZklDVVJMT1BUX0RFQlVHRlVOQ1RJT05cZlAgdG8gYmV0dGVyCitkZWJ1Zy90cmFjZSB3aHkgZXJyb3JzIGhhcHBlbi4KKworSWYgdGhlIGxpYnJhcnkgZG9lcyBub3QgcmV0dXJuIGFuIGVycm9yLCB0aGUgYnVmZmVyIG1heSBub3QgaGF2ZSBiZWVuCit0b3VjaGVkLiBEbyBub3QgcmVseSBvbiB0aGUgY29udGVudHMgaW4gdGhvc2UgY2FzZXMuCisKKy5JUCBDVVJMT1BUX1NUREVSUgorUGFzcyBhIEZJTEUgKiBhcyBwYXJhbWV0ZXIuIFRlbGwgbGliY3VybCB0byB1c2UgdGhpcyBzdHJlYW0gaW5zdGVhZCBvZiBzdGRlcnIKK3doZW4gc2hvd2luZyB0aGUgcHJvZ3Jlc3MgbWV0ZXIgYW5kIGRpc3BsYXlpbmcgXGZJQ1VSTE9QVF9WRVJCT1NFXGZQIGRhdGEuCisuSVAgQ1VSTE9QVF9GQUlMT05FUlJPUgorQSBwYXJhbWV0ZXIgc2V0IHRvIDEgdGVsbHMgdGhlIGxpYnJhcnkgdG8gZmFpbCBzaWxlbnRseSBpZiB0aGUgSFRUUCBjb2RlCityZXR1cm5lZCBpcyBlcXVhbCB0byBvciBsYXJnZXIgdGhhbiA0MDAuIFRoZSBkZWZhdWx0IGFjdGlvbiB3b3VsZCBiZSB0byByZXR1cm4KK3RoZSBwYWdlIG5vcm1hbGx5LCBpZ25vcmluZyB0aGF0IGNvZGUuCisKK1RoaXMgbWV0aG9kIGlzIG5vdCBmYWlsLXNhZmUgYW5kIHRoZXJlIGFyZSBvY2Nhc2lvbnMgd2hlcmUgbm9uLXN1Y2Nlc3NmdWwKK3Jlc3BvbnNlIGNvZGVzIHdpbGwgc2xpcCB0aHJvdWdoLCBlc3BlY2lhbGx5IHdoZW4gYXV0aGVudGljYXRpb24gaXMgaW52b2x2ZWQKKyhyZXNwb25zZSBjb2RlcyA0MDEgYW5kIDQwNykuCisKK1lvdSBtaWdodCBnZXQgc29tZSBhbW91bnRzIG9mIGhlYWRlcnMgdHJhbnNmZXJyZWQgYmVmb3JlIHRoaXMgc2l0dWF0aW9uIGlzCitkZXRlY3RlZCwgbGlrZSB3aGVuIGEgIjEwMC1jb250aW51ZSIgaXMgcmVjZWl2ZWQgYXMgYSByZXNwb25zZSB0byBhCitQT1NUL1BVVCBhbmQgYSA0MDEgb3IgNDA3IGlzIHJlY2VpdmVkIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuCisuU0ggTkVUV09SSyBPUFRJT05TCisuSVAgQ1VSTE9QVF9VUkwKK1RoZSBhY3R1YWwgVVJMIHRvIGRlYWwgd2l0aC4gVGhlIHBhcmFtZXRlciBzaG91bGQgYmUgYSBjaGFyICogdG8gYSB6ZXJvCit0ZXJtaW5hdGVkIHN0cmluZyB3aGljaCBtdXN0IGJlIFVSTC1lbmNvZGVkIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCitzY2hlbWU6Ly9ob3N0OnBvcnQvcGF0aAorCitGb3IgYSBncmVhdGVyIGV4cGxhbmF0aW9uIG9mIHRoZSBmb3JtYXQgcGxlYXNlIHNlZSBSRkMgMzk4NgorKGh0dHA6Ly9jdXJsLmhheHguc2UvcmZjL3JmYzM5ODYudHh0KS4KKworSWYgdGhlIGdpdmVuIFVSTCBsYWNrcyB0aGUgc2NoZW1lLCBvciBwcm90b2NvbCwgcGFydCAoImh0dHA6Ly8iIG9yICJmdHA6Ly8iCitldGMpLCBsaWJjdXJsIHdpbGwgYXR0ZW1wdCB0byByZXNvbHZlIHdoaWNoIHByb3RvY29sIHRvIHVzZSBiYXNlZCBvbiB0aGUKK2dpdmVuIGhvc3QgbWFtZS4gSWYgdGhlIHByb3RvY29sIGlzIG5vdCBzdXBwb3J0ZWQsIGxpYmN1cmwgd2lsbCByZXR1cm4KKyhcZklDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTFxmUCkgd2hlbiB5b3UgY2FsbCBcZkljdXJsX2Vhc3lfcGVyZm9ybSgzKVxmUAorb3IgXGZJY3VybF9tdWx0aV9wZXJmb3JtKDMpXGZQLiBVc2UgXGZJY3VybF92ZXJzaW9uX2luZm8oMylcZlAgZm9yIGRldGFpbGVkCitpbmZvcm1hdGlvbiBvbiB3aGljaCBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZC4KKworVGhlIGhvc3QgcGFydCBvZiB0aGUgVVJMIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXIgdGhhdCB5b3Ugd2FudCB0bworY29ubmVjdCB0by4gVGhpcyBjYW4gYmUgdGhlIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSBvZiB0aGUgc2VydmVyLCB0aGUKK2xvY2FsIG5ldHdvcmsgbmFtZSBvZiB0aGUgbWFjaGluZSBvbiB5b3VyIG5ldHdvcmsgb3IgdGhlIElQIGFkZHJlc3Mgb2YgdGhlCitzZXJ2ZXIgb3IgbWFjaGluZSByZXByZXNlbnRlZCBieSBlaXRoZXIgYW4gSVB2NCBvciBJUHY2IGFkZHJlc3MuIEZvciBleGFtcGxlOgorCitodHRwOi8vd3d3LmV4YW1wbGUuY29tLworCitodHRwOi8vaG9zdG5hbWUvCisKK2h0dHA6Ly8xOTIuMTY4LjAuMS8KKworaHR0cDovL1syMDAxOjE4OTA6MTExMjoxOjoyMF0vCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSB0aGUgdXNlciBuYW1lIGFuZCBwYXNzd29yZCBhcyBwYXJ0IG9mIHRoZQoraG9zdCwgZm9yIHNvbWUgcHJvdG9jb2xzLCB3aGVuIGNvbm5lY3RpbmcgdG8gc2VydmVycyB0aGF0IHJlcXVpcmUKK2F1dGhlbnRpY2F0aW9uLgorCitGb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgdGhpczoKKworaHR0cDovL3VzZXI6cGFzc3dvcmRAd3d3LmRvbWFpbi5jb20KK2Z0cDovL3VzZXI6cGFzc3dvcmRAZnRwLmRvbWFpbi5jb20KK3BvcDM6Ly91c2VyOnBhc3N3b3JkQG1haWwuZG9tYWluLmNvbQorCitUaGUgcG9ydCBpcyBvcHRpb25hbCBhbmQgd2hlbiBub3Qgc3BlY2lmaWVkIGxpYmN1cmwgd2lsbCB1c2UgdGhlIGRlZmF1bHQgcG9ydAorYmFzZWQgb24gdGhlIGRldGVybWluZWQgb3Igc3BlY2lmaWVkIHByb3RvY29sOiA4MCBmb3IgaHR0cCwgMjEgZm9yIGZ0cCBhbmQgMjUKK2ZvciBzbXRwLCBldGMuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgc2hvdyBob3cgdG8gc3BlY2lmeSB0aGUgcG9ydDoKKworaHR0cDovL3d3dy53ZWlyZHNlcnZlci5jb206ODA4MC8gLSBUaGlzIHdpbGwgY29ubmVjdCB0byBhIHdlYiBzZXJ2ZXIgdXNpbmcKK3BvcnQgODA4MC4KKworc210cDovL21haWwuZG9tYWluLmNvbTo1ODcvIC0gVGhpcyB3aWxsIGNvbm5lY3QgdG8gYSBzbXRwIHNlcnZlciBvbiB0aGUKK2FsdGVybmF0aXZlIG1haWwgcG9ydC4KKworVGhlIHBhdGggcGFydCBvZiB0aGUgVVJMIGlzIHByb3RvY29sIHNwZWNpZmljIGFuZCB3aGlsc3Qgc29tZSBleGFtcGxlcyBhcmUKK2dpdmVuIGJlbG93IHRoaXMgbGlzdCBpcyBub3QgY29uY2x1c2l2ZToKKworLkIgSFRUUAorCitUaGUgcGF0aCBwYXJ0IG9mIGEgSFRUUCByZXF1ZXN0IHNwZWNpZmllcyB0aGUgZmlsZSB0byByZXRyaWV2ZSBhbmQgZnJvbSB3aGF0CitkaXJlY3RvcnkuIElmIHRoZSBkaXJlY3RvcnkgaXMgbm90IHNwZWNpZmllZCB0aGVuIHRoZSB3ZWIgc2VydmVyJ3Mgcm9vdAorZGlyZWN0b3J5IGlzIHVzZWQuIElmIHRoZSBmaWxlIGlzIG9taXR0ZWQgdGhlbiB0aGUgZGVmYXVsdCBkb2N1bWVudCB3aWxsIGJlCityZXRyaWV2ZWQgZm9yIGVpdGhlciB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBvciB0aGUgcm9vdCBkaXJlY3RvcnkuIFRoZQorZXhhY3QgcmVzb3VyY2UgcmV0dXJuZWQgZm9yIGVhY2ggVVJMIGlzIGVudGlyZWx5IGRlcGVuZGVudCBvbiB0aGUgc2VydmVyJ3MKK2NvbmZpZ3VyYXRpb24uCisKK2h0dHA6Ly93d3cubmV0c2NhcGUuY29tIC0gVGhpcyBnZXRzIHRoZSBtYWluIHBhZ2UgKGluZGV4Lmh0bWwgaW4gdGhpcworZXhhbXBsZSkgZnJvbSBOZXRzY2FwZSdzIHdlYiBzZXJ2ZXIuCisKK2h0dHA6Ly93d3cubmV0c2NhcGUuY29tL2luZGV4Lmh0bWwgLSBUaGlzIHJldHVybnMgdGhlIG1haW4gcGFnZSBmcm9tIE5ldHNjYXBlCitieSBzcGVjaWZ5aW5nIHRoZSBwYWdlIHRvIGdldC4KKworaHR0cDovL3d3dy5uZXRzY2FwZS5jb20vY29udGFjdHVzLyAtIFRoaXMgcmV0dXJucyB0aGUgZGVmYXVsdCBkb2N1bWVudCBmcm9tCit0aGUgY29udGFjdHVzIGRpcmVjdG9yeS4KKworLkIgRlRQCisKK1RoZSBwYXRoIHBhcnQgb2YgYW4gRlRQIHJlcXVlc3Qgc3BlY2lmaWVzIHRoZSBmaWxlIHRvIHJldHJpZXZlIGFuZCBmcm9tIHdoYXQKK2RpcmVjdG9yeS4gSWYgdGhlIGZpbGUgcGFydCBpcyBvbWl0dGVkIHRoZW4gbGliY3VybCBkb3dubG9hZHMgdGhlIGRpcmVjdG9yeQorbGlzdGluZyBmb3IgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQuIElmIHRoZSBkaXJlY3RvcnkgaXMgb21pdHRlZCB0aGVuCit0aGUgZGlyZWN0b3J5IGxpc3RpbmcgZm9yIHRoZSByb290IC8gaG9tZSBkaXJlY3Rvcnkgd2lsbCBiZSByZXR1cm5lZC4KKworZnRwOi8vY29vbC5oYXh4LnNlIC0gVGhpcyByZXRyaWV2ZXMgdGhlIGRpcmVjdG9yeSBsaXN0aW5nIGZvciBvdXIgRlRQIHNlcnZlci4KKworZnRwOi8vY29vbC5oYXh4LnNlL3JlYWRtZS50eHQgLSBUaGlzIGRvd25sb2FkcyB0aGUgZmlsZSByZWFkbWUudHh0IGZyb20gdGhlCityb290IGRpcmVjdG9yeS4KKworZnRwOi8vY29vbC5oYXh4LnNlL2xpYmN1cmwvcmVhZG1lLnR4dCAtIFRoaXMgZG93bmxvYWRzIHJlYWRtZS50eHQgZnJvbSB0aGUKK2xpYmN1cmwgZGlyZWN0b3J5LgorCitmdHA6Ly91c2VyOnBhc3N3b3JkQG15LmV4YW1wbGUuY29tL3JlYWRtZS50eHQgLSBUaGlzIHJldHJpZXZlcyB0aGUgcmVhZG1lLnR4dAorZmlsZSBmcm9tIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuIFdoZW4gYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgaXMKK3NwZWNpZmllZCwgZXZlcnl0aGluZyB0aGF0IGlzIHNwZWNpZmllZCBpbiB0aGUgcGF0aCBwYXJ0IGlzIHJlbGF0aXZlIHRvIHRoZQordXNlcidzIGhvbWUgZGlyZWN0b3J5LiBUbyByZXRyaWV2ZSBmaWxlcyBmcm9tIHRoZSByb290IGRpcmVjdG9yeSBvciBhCitkaXJlY3RvcnkgdW5kZXJuZWF0aCB0aGUgcm9vdCBkaXJlY3RvcnkgdGhlbiB0aGUgYWJzb2x1dGUgcGF0aCBtdXN0IGJlCitzcGVjaWZpZWQgYnkgcHJlcGVuZGluZyBhbiBhZGRpdGlvbmFsIGZvcndhcmQgc2xhc2ggdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKK3BhdGguCisKK2Z0cDovL3VzZXI6cGFzc3dvcmRAbXkuZXhhbXBsZS5jb20vL3JlYWRtZS50eHQgLSBUaGlzIHJldHJpZXZlcyB0aGUgcmVhZG1lLnR4dAorZnJvbSB0aGUgcm9vdCBkaXJlY3Rvcnkgd2hlbiBsb2dnaW5nIGluIGFzIGEgc3BlY2lmaWVkIHVzZXIuCisKKy5CIFNNVFAKKworVGhlIHBhdGggcGFydCBvZiBhIFNNVFAgcmVxdWVzdCBzcGVjaWZpZXMgdGhlIGhvc3QgbmFtZSB0byBwcmVzZW50IGR1cmluZworY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBtYWlsIHNlcnZlci4gSWYgdGhlIHBhdGggaXMgb21pdHRlZCB0aGVuIGxpYmN1cmwgd2lsbAorYXR0ZW1wdCB0byByZXNvbHZlIHRoZSBsb2NhbCBjb21wdXRlcidzIGhvc3QgbmFtZS4gSG93ZXZlciwgdGhpcyBtYXkgbm90CityZXR1cm4gdGhlIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSB0aGF0IGlzIHJlcXVpcmVkIGJ5IHNvbWUgbWFpbCBzZXJ2ZXJzCithbmQgc3BlY2lmeWluZyB0aGlzIHBhdGggYWxsb3dzIHlvdSB0byBzZXQgYW4gYWx0ZXJuYXRpdmUgbmFtZSwgc3VjaCBhcworeW91ciBtYWNoaW5lJ3MgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lLCB3aGljaCB5b3UgbWlnaHQgaGF2ZSBvYnRhaW5lZAorZnJvbSBhbiBleHRlcm5hbCBmdW5jdGlvbiBzdWNoIGFzIGdldGhvc3RuYW1lIG9yIGdldGFkZHJpbmZvLgorCitzbXRwOi8vbWFpbC5kb21haW4uY29tIC0gVGhpcyBjb25uZWN0cyB0byB0aGUgbWFpbCBzZXJ2ZXIgYXQgZG9tYWluLmNvbSBhbmQKK3NlbmRzIHlvdXIgbG9jYWwgY29tcHV0ZXIncyBob3N0IG5hbWUgaW4gdGhlIEhFTE8gLyBFSExPIGNvbW1hbmQuCisKK3NtdHA6Ly9tYWlsLmRvbWFpbi5jb20vY2xpZW50LmRvbWFpbi5jb20gLSBUaGlzIHdpbGwgc2VuZCBjbGllbnQuZG9tYWluLmNvbSBpbgordGhlIEhFTE8gLyBFSExPIGNvbW1hbmQgdG8gdGhlIG1haWwgc2VydmVyIGF0IGRvbWFpbi5jb20uCisKKy5CIFBPUDMKKworVGhlIHBhdGggcGFydCBvZiBhIFBPUDMgcmVxdWVzdCBzcGVjaWZpZXMgdGhlIG1haWxib3ggKG1lc3NhZ2UpIHRvIHJldHJpZXZlLgorSWYgdGhlIG1haWxib3ggaXMgbm90IHNwZWNpZmllZCB0aGVuIGEgbGlzdCBvZiB3YWl0aW5nIG1lc3NhZ2VzIGlzIHJldHVybmVkCitpbnN0ZWFkLgorCitwb3AzOi8vdXNlcjpwYXNzd29yZEBtYWlsLmRvbWFpbi5jb20gLSBUaGlzIGxpc3RzIHRoZSBhdmFpbGFibGUgbWVzc2FnZXMKK3BvcDM6Ly91c2VyOnBhc3N3b3JkQG1haWwuZG9tYWluLmNvbS8xIC0gVGhpcyByZXRyaWV2ZXMgdGhlIGZpcnN0IG1lc3NhZ2UKKworLkIgU0NQCisKK1RoZSBwYXRoIHBhcnQgb2YgYSBTQ1AgcmVxdWVzdCBzcGVjaWZpZXMgdGhlIGZpbGUgdG8gcmV0cmlldmUgYW5kIGZyb20gd2hhdAorZGlyZWN0b3J5LiBUaGUgZmlsZSBwYXJ0IG1heSBub3QgYmUgb21pdHRlZC4gVGhlIGZpbGUgaXMgdGFrZW4gYXMgYW4gYWJzb2x1dGUKK3BhdGggZnJvbSB0aGUgcm9vdCBkaXJlY3Rvcnkgb24gdGhlIHNlcnZlci4gVG8gc3BlY2lmeSBhIHBhdGggcmVsYXRpdmUgdG8KK3RoZSB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgb24gdGhlIHNlcnZlciwgcHJlcGVuZCB+LyB0byB0aGUgcGF0aCBwb3J0aW9uLgorSWYgdGhlIHVzZXIgbmFtZSBpcyBub3QgZW1iZWRkZWQgaW4gdGhlIFVSTCwgaXQgY2FuIGJlIHNldCB3aXRoIHRoZQorXGZJQ1VSTE9QVF9VU0VSUFdEXGZQIG9yIFxmQkNVUkxPUFRfVVNFUk5BTUVcZlAgb3B0aW9uLgorCitzY3A6Ly91c2VyQGV4YW1wbGUuY29tL2V0Yy9pc3N1ZSAtIFRoaXMgc3BlY2lmaWVzIHRoZSBmaWxlIC9ldGMvaXNzdWUKKworc2NwOi8vZXhhbXBsZS5jb20vfi9teS1maWxlIC0gVGhpcyBzcGVjaWZpZXMgdGhlIGZpbGUgbXktZmlsZSBpbiB0aGUKK3VzZXIncyBob21lIGRpcmVjdG9yeSBvbiB0aGUgc2VydmVyCisKKy5CIFNGVFAKKworVGhlIHBhdGggcGFydCBvZiBhIFNGVFAgcmVxdWVzdCBzcGVjaWZpZXMgdGhlIGZpbGUgdG8gcmV0cmlldmUgYW5kIGZyb20gd2hhdAorZGlyZWN0b3J5LiBJZiB0aGUgZmlsZSBwYXJ0IGlzIG9taXR0ZWQgdGhlbiBsaWJjdXJsIGRvd25sb2FkcyB0aGUgZGlyZWN0b3J5CitsaXN0aW5nIGZvciB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZC4gIElmIHRoZSBwYXRoIGVuZHMgaW4gYSAvIHRoZW4gYSBkaXJlY3RvcnkKK2xpc3RpbmcgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhIGZpbGUuICBJZiB0aGUgcGF0aCBpcyBvbWl0dGVkIGVudGlyZWx5IHRoZW4KK3RoZSBkaXJlY3RvcnkgbGlzdGluZyBmb3IgdGhlIHJvb3QgLyBob21lIGRpcmVjdG9yeSB3aWxsIGJlIHJldHVybmVkLgorSWYgdGhlIHVzZXIgbmFtZSBpcyBub3QgZW1iZWRkZWQgaW4gdGhlIFVSTCwgaXQgY2FuIGJlIHNldCB3aXRoIHRoZQorXGZJQ1VSTE9QVF9VU0VSUFdEXGZQIG9yIFxmQkNVUkxPUFRfVVNFUk5BTUVcZlAgb3B0aW9uLgorCitzZnRwOi8vdXNlcjpwYXNzd29yZEBleGFtcGxlLmNvbS9ldGMvaXNzdWUgLSBUaGlzIHNwZWNpZmllcyB0aGUgZmlsZQorL2V0Yy9pc3N1ZQorCitzZnRwOi8vdXNlckBleGFtcGxlLmNvbS9+L215LWZpbGUgLSBUaGlzIHNwZWNpZmllcyB0aGUgZmlsZSBteS1maWxlIGluIHRoZQordXNlcidzIGhvbWUgZGlyZWN0b3J5CisKK3NmdHA6Ly9zc2guZXhhbXBsZS5jb20vfi9Eb2N1bWVudHMvIC0gVGhpcyByZXF1ZXN0cyBhIGRpcmVjdG9yeSBsaXN0aW5nCitvZiB0aGUgRG9jdW1lbnRzIGRpcmVjdG9yeSB1bmRlciB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5CisKKy5CIE5PVEVTCisKK1N0YXJ0aW5nIHdpdGggdmVyc2lvbiA3LjIwLjAsIHRoZSBmcmFnbWVudCBwYXJ0IG9mIHRoZSBVUkkgd2lsbCBub3QgYmUgc2VudCBhcworcGFydCBvZiB0aGUgcGF0aCwgd2hpY2ggd2FzIHByZXZpb3VzbHkgdGhlIGNhc2UuCisKK1xmSUNVUkxPUFRfVVJMXGZQIGlzIHRoZSBvbmx5IG9wdGlvbiB0aGF0IFxmQm11c3RcZlAgYmUgc2V0IGJlZm9yZQorXGZJY3VybF9lYXN5X3BlcmZvcm0oMylcZlAgaXMgY2FsbGVkLgorCitcZklDVVJMT1BUX1BST1RPQ09MU1xmUCBjYW4gYmUgdXNlZCB0byBsaW1pdCB3aGF0IHByb3RvY29scyBsaWJjdXJsIHdpbGwgdXNlCitmb3IgdGhpcyB0cmFuc2ZlciwgaW5kZXBlbmRlbnQgb2Ygd2hhdCBsaWJjdXJsIGhhcyBiZWVuIGNvbXBpbGVkIHRvCitzdXBwb3J0LiBUaGF0IG1heSBiZSB1c2VmdWwgaWYgeW91IGFjY2VwdCB0aGUgVVJMIGZyb20gYW4gZXh0ZXJuYWwgc291cmNlIGFuZAord2FudCB0byBsaW1pdCB0aGUgYWNjZXNzaWJpbGl0eS4KKy5JUCBDVVJMT1BUX1BST1RPQ09MUworUGFzcyBhIGxvbmcgdGhhdCBob2xkcyBhIGJpdG1hc2sgb2YgQ1VSTFBST1RPXyogZGVmaW5lcy4gSWYgdXNlZCwgdGhpcyBiaXRtYXNrCitsaW1pdHMgd2hhdCBwcm90b2NvbHMgbGliY3VybCBtYXkgdXNlIGluIHRoZSB0cmFuc2Zlci4gVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUKK2EgbGliY3VybCBidWlsdCB0byBzdXBwb3J0IGEgd2lkZSByYW5nZSBvZiBwcm90b2NvbHMgYnV0IHN0aWxsIGxpbWl0IHNwZWNpZmljCit0cmFuc2ZlcnMgdG8gb25seSBiZSBhbGxvd2VkIHRvIHVzZSBhIHN1YnNldCBvZiB0aGVtLiBCeSBkZWZhdWx0IGxpYmN1cmwgd2lsbAorYWNjZXB0IGFsbCBwcm90b2NvbHMgaXQgc3VwcG9ydHMuIFNlZSBhbHNvCitcZklDVVJMT1BUX1JFRElSX1BST1RPQ09MU1xmUC4gKEFkZGVkIGluIDcuMTkuNCkKKy5JUCBDVVJMT1BUX1JFRElSX1BST1RPQ09MUworUGFzcyBhIGxvbmcgdGhhdCBob2xkcyBhIGJpdG1hc2sgb2YgQ1VSTFBST1RPXyogZGVmaW5lcy4gSWYgdXNlZCwgdGhpcyBiaXRtYXNrCitsaW1pdHMgd2hhdCBwcm90b2NvbHMgbGliY3VybCBtYXkgdXNlIGluIGEgdHJhbnNmZXIgdGhhdCBpdCBmb2xsb3dzIHRvIGluIGEKK3JlZGlyZWN0IHdoZW4gXGZJQ1VSTE9QVF9GT0xMT1dMT0NBVElPTlxmUCBpcyBlbmFibGVkLiBUaGlzIGFsbG93cyB5b3UgdG8KK2xpbWl0IHNwZWNpZmljIHRyYW5zZmVycyB0byBvbmx5IGJlIGFsbG93ZWQgdG8gdXNlIGEgc3Vic2V0IG9mIHByb3RvY29scyBpbgorcmVkaXJlY3Rpb25zLiBCeSBkZWZhdWx0IGxpYmN1cmwgd2lsbCBhbGxvdyBhbGwgcHJvdG9jb2xzIGV4Y2VwdCBmb3IgRklMRSBhbmQKK1NDUC4gVGhpcyBpcyBhIGRpZmZlcmVuY2UgY29tcGFyZWQgdG8gcHJlLTcuMTkuNCB2ZXJzaW9ucyB3aGljaAordW5jb25kaXRpb25hbGx5IHdvdWxkIGZvbGxvdyB0byBhbGwgcHJvdG9jb2xzIHN1cHBvcnRlZC4gKEFkZGVkIGluIDcuMTkuNCkKKy5JUCBDVVJMT1BUX1BST1hZCitTZXQgSFRUUCBwcm94eSB0byB1c2UuIFRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgY2hhciAqIHRvIGEgemVybyB0ZXJtaW5hdGVkCitzdHJpbmcgaG9sZGluZyB0aGUgaG9zdCBuYW1lIG9yIGRvdHRlZCBJUCBhZGRyZXNzLiBUbyBzcGVjaWZ5IHBvcnQgbnVtYmVyIGluCit0aGlzIHN0cmluZywgYXBwZW5kIDpbcG9ydF0gdG8gdGhlIGVuZCBvZiB0aGUgaG9zdCBuYW1lLiBUaGUgcHJveHkgc3RyaW5nIG1heQorYmUgcHJlZml4ZWQgd2l0aCBbcHJvdG9jb2xdOi8vIHNpbmNlIGFueSBzdWNoIHByZWZpeCB3aWxsIGJlIGlnbm9yZWQuIFRoZQorcHJveHkncyBwb3J0IG51bWJlciBtYXkgb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQgd2l0aCB0aGUgc2VwYXJhdGUgb3B0aW9uLiBJZgorbm90IHNwZWNpZmllZCwgbGliY3VybCB3aWxsIGRlZmF1bHQgdG8gdXNpbmcgcG9ydCAxMDgwIGZvciBwcm94aWVzLgorXGZJQ1VSTE9QVF9QUk9YWVBPUlRcZlAuCisKK1doZW4geW91IHRlbGwgdGhlIGxpYnJhcnkgdG8gdXNlIGEgSFRUUCBwcm94eSwgbGliY3VybCB3aWxsIHRyYW5zcGFyZW50bHkKK2NvbnZlcnQgb3BlcmF0aW9ucyB0byBIVFRQIGV2ZW4gaWYgeW91IHNwZWNpZnkgYW4gRlRQIFVSTCBldGMuIFRoaXMgbWF5IGhhdmUKK2FuIGltcGFjdCBvbiB3aGF0IG90aGVyIGZlYXR1cmVzIG9mIHRoZSBsaWJyYXJ5IHlvdSBjYW4gdXNlLCBzdWNoIGFzCitcZklDVVJMT1BUX1FVT1RFXGZQIGFuZCBzaW1pbGFyIEZUUCBzcGVjaWZpY3MgdGhhdCBkb24ndCB3b3JrIHVubGVzcyB5b3UKK3R1bm5lbCB0aHJvdWdoIHRoZSBIVFRQIHByb3h5LiBTdWNoIHR1bm5lbGluZyBpcyBhY3RpdmF0ZWQgd2l0aAorXGZJQ1VSTE9QVF9IVFRQUFJPWFlUVU5ORUxcZlAuCisKK2xpYmN1cmwgcmVzcGVjdHMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBcZkJodHRwX3Byb3h5XGZQLCBcZkJmdHBfcHJveHlcZlAsCitcZkJhbGxfcHJveHlcZlAgZXRjLCBpZiBhbnkgb2YgdGhvc2UgYXJlIHNldC4gVGhlIFxmSUNVUkxPUFRfUFJPWFlcZlAgb3B0aW9uCitkb2VzIGhvd2V2ZXIgb3ZlcnJpZGUgYW55IHBvc3NpYmx5IHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKK1NldHRpbmcgdGhlIHByb3h5IHN0cmluZyB0byAiIiAoYW4gZW1wdHkgc3RyaW5nKSB3aWxsIGV4cGxpY2l0bHkgZGlzYWJsZSB0aGUKK3VzZSBvZiBhIHByb3h5LCBldmVuIGlmIHRoZXJlIGlzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCBmb3IgaXQuCisKK1NpbmNlIDcuMTQuMSwgdGhlIHByb3h5IGhvc3Qgc3RyaW5nIGdpdmVuIGluIGVudmlyb25tZW50IHZhcmlhYmxlcyBjYW4gYmUKK3NwZWNpZmllZCB0aGUgZXhhY3Qgc2FtZSB3YXkgYXMgdGhlIHByb3h5IGNhbiBiZSBzZXQgd2l0aCBcZklDVVJMT1BUX1BST1hZXGZQLAoraW5jbHVkZSBwcm90b2NvbCBwcmVmaXggKGh0dHA6Ly8pIGFuZCBlbWJlZGRlZCB1c2VyICsgcGFzc3dvcmQuCisKK1NpbmNlIDcuMjEuNywgdGhlIHByb3h5IHN0cmluZyBtYXkgYmUgc3BlY2lmaWVkIHdpdGggYSBwcm90b2NvbDovLyBwcmVmaXggdG8KK3NwZWNpZnkgYWx0ZXJuYXRpdmUgcHJveHkgcHJvdG9jb2xzLiBVc2Ugc29ja3M0Oi8vLCBzb2NrczRhOi8vLCBzb2NrczU6Ly8gb3IKK3NvY2tzNWg6Ly8gKHRoZSBsYXN0IG9uZSB0byBlbmFibGUgc29ja3M1IGFuZCBhc2tpbmcgdGhlIHByb3h5IHRvIGRvIHRoZQorcmVzb2x2aW5nLCBhbHNvIGtub3duIGFzIENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUUgdHlwZSkgdG8gcmVxdWVzdCB0aGUKK3NwZWNpZmljIFNPQ0tTIHZlcnNpb24gdG8gYmUgdXNlZC4gTm8gcHJvdG9jb2wgc3BlY2lmaWVkLCBodHRwOi8vIGFuZCBhbGwKK290aGVycyB3aWxsIGJlIHRyZWF0ZWQgYXMgSFRUUCBwcm94aWVzLgorLklQIENVUkxPUFRfUFJPWFlQT1JUCitQYXNzIGEgbG9uZyB3aXRoIHRoaXMgb3B0aW9uIHRvIHNldCB0aGUgcHJveHkgcG9ydCB0byBjb25uZWN0IHRvIHVubGVzcyBpdCBpcworc3BlY2lmaWVkIGluIHRoZSBwcm94eSBzdHJpbmcgXGZJQ1VSTE9QVF9QUk9YWVxmUC4KKy5JUCBDVVJMT1BUX1BST1hZVFlQRQorUGFzcyBhIGxvbmcgd2l0aCB0aGlzIG9wdGlvbiB0byBzZXQgdHlwZSBvZiB0aGUgcHJveHkuIEF2YWlsYWJsZSBvcHRpb25zIGZvcgordGhpcyBhcmUgXGZJQ1VSTFBST1hZX0hUVFBcZlAsIFxmSUNVUkxQUk9YWV9IVFRQXzFfMFxmUCAoYWRkZWQgaW4gNy4xOS40KSwKK1xmSUNVUkxQUk9YWV9TT0NLUzRcZlAgKGFkZGVkIGluIDcuMTApLCBcZklDVVJMUFJPWFlfU09DS1M1XGZQLAorXGZJQ1VSTFBST1hZX1NPQ0tTNEFcZlAgKGFkZGVkIGluIDcuMTguMCkgYW5kIFxmSUNVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUVcZlAKKyhhZGRlZCBpbiA3LjE4LjApLiBUaGUgSFRUUCB0eXBlIGlzIGRlZmF1bHQuIChBZGRlZCBpbiA3LjEwKQorCitJZiB5b3Ugc2V0IFxmQkNVUkxPUFRfUFJPWFlUWVBFXGZQIHRvIFxmSUNVUkxQUk9YWV9IVFRQXzFfMFxmUCwgaXQgd2lsbCBvbmx5CithZmZlY3QgaG93IGxpYmN1cmwgc3BlYWtzIHRvIGEgcHJveHkgd2hlbiBDT05ORUNUIGlzIHVzZWQuIFRoZSBIVFRQIHZlcnNpb24KK3VzZWQgZm9yICJyZWd1bGFyIiBIVFRQIHJlcXVlc3RzIGlzIGluc3RlYWQgY29udHJvbGxlZCB3aXRoCitcZklDVVJMT1BUX0hUVFBfVkVSU0lPTlxmUC4KKy5JUCBDVVJMT1BUX05PUFJPWFkKK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZy4gVGhpcyBzaG91bGQgYmUgYSBjb21tYSBzZXBhcmF0ZWQKK2xpc3Qgb2YgaG9zdHMgd2hpY2ggZG8gbm90IHVzZSBhIHByb3h5LCBpZiBvbmUgaXMgc3BlY2lmaWVkLiAgVGhlIG9ubHkKK3dpbGRjYXJkIGlzIGEgc2luZ2xlICogY2hhcmFjdGVyLCB3aGljaCBtYXRjaGVzIGFsbCBob3N0cywgYW5kIGVmZmVjdGl2ZWx5CitkaXNhYmxlcyB0aGUgcHJveHkuIEVhY2ggbmFtZSBpbiB0aGlzIGxpc3QgaXMgbWF0Y2hlZCBhcyBlaXRoZXIgYSBkb21haW4gd2hpY2gKK2NvbnRhaW5zIHRoZSBob3N0bmFtZSwgb3IgdGhlIGhvc3RuYW1lIGl0c2VsZi4gRm9yIGV4YW1wbGUsIGxvY2FsLmNvbSB3b3VsZAorbWF0Y2ggbG9jYWwuY29tLCBsb2NhbC5jb206ODAsIGFuZCB3d3cubG9jYWwuY29tLCBidXQgbm90IHd3dy5ub3Rsb2NhbC5jb20uCisoQWRkZWQgaW4gNy4xOS40KQorLklQIENVUkxPUFRfSFRUUFBST1hZVFVOTkVMCitTZXQgdGhlIHBhcmFtZXRlciB0byAxIHRvIG1ha2UgdGhlIGxpYnJhcnkgdHVubmVsIGFsbCBvcGVyYXRpb25zIHRocm91Z2ggYQorZ2l2ZW4gSFRUUCBwcm94eS4gVGhlcmUgaXMgYSBiaWcgZGlmZmVyZW5jZSBiZXR3ZWVuIHVzaW5nIGEgcHJveHkgYW5kIHRvCit0dW5uZWwgdGhyb3VnaCBpdC4gSWYgeW91IGRvbid0IGtub3cgd2hhdCB0aGlzIG1lYW5zLCB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudAordGhpcyB0dW5uZWxpbmcgb3B0aW9uLgorLklQIENVUkxPUFRfU09DS1M1X0dTU0FQSV9TRVJWSUNFCitQYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciB0byBhIHN0cmluZyBob2xkaW5nIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlLiBUaGUKK2RlZmF1bHQgc2VydmljZSBuYW1lIGZvciBhIFNPQ0tTNSBzZXJ2ZXIgaXMgcmNtZC9zZXJ2ZXItZnFkbi4gVGhpcyBvcHRpb24KK2FsbG93cyB5b3UgdG8gY2hhbmdlIGl0LiAoQWRkZWQgaW4gNy4xOS40KQorLklQIENVUkxPUFRfU09DS1M1X0dTU0FQSV9ORUMKK1Bhc3MgYSBsb25nIHNldCB0byAxIHRvIGVuYWJsZSBvciAwIHRvIGRpc2FibGUuIEFzIHBhcnQgb2YgdGhlIGdzc2FwaQorbmVnb3RpYXRpb24gYSBwcm90ZWN0aW9uIG1vZGUgaXMgbmVnb3RpYXRlZC4gVGhlIHJmYzE5NjEgc2F5cyBpbiBzZWN0aW9uCis0LjMvNC40IGl0IHNob3VsZCBiZSBwcm90ZWN0ZWQsIGJ1dCB0aGUgTkVDIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdC4KK0lmIGVuYWJsZWQsIHRoaXMgb3B0aW9uIGFsbG93cyB0aGUgdW5wcm90ZWN0ZWQgZXhjaGFuZ2Ugb2YgdGhlIHByb3RlY3Rpb24gbW9kZQorbmVnb3RpYXRpb24uIChBZGRlZCBpbiA3LjE5LjQpLgorLklQIENVUkxPUFRfSU5URVJGQUNFCitQYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlci4gVGhpcyBzZXRzIHRoZSBpbnRlcmZhY2UgbmFtZSB0byB1c2UgYXMgb3V0Z29pbmcKK25ldHdvcmsgaW50ZXJmYWNlLiBUaGUgbmFtZSBjYW4gYmUgYW4gaW50ZXJmYWNlIG5hbWUsIGFuIElQIGFkZHJlc3MsIG9yIGEgaG9zdAorbmFtZS4KKworU3RhcnRpbmcgd2l0aCA3LjI0LjA6IElmIHRoZSBwYXJhbWV0ZXIgc3RhcnRzIHdpdGggImlmISIgdGhlbiBpdCBpcyB0cmVhdGVkIGFzCitvbmx5IGFzIGludGVyZmFjZSBuYW1lIGFuZCBubyBhdHRlbXB0IHdpbGwgZXZlciBiZSBuYW1lZCB0byBkbyB0cmVhdCBpdCBhcyBhbgorSVAgYWRkcmVzcyBvciB0byBkbyBuYW1lIHJlc29sdXRpb24gb24gaXQuICBJZiB0aGUgcGFyYW1ldGVyIHN0YXJ0cyB3aXRoCitcJiJob3N0ISIgaXQgaXMgdHJlYXRlZCBhcyBlaXRoZXIgYW4gSVAgYWRkcmVzcyBvciBhIGhvc3RuYW1lLiAgSG9zdG5hbWVzIGFyZQorcmVzb2x2ZWQgc3luY2hyb25vdXNseS4gIFVzaW5nIHRoZSBpZiEgZm9ybWF0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB3aGVuIHVzaW5nCit0aGUgbXVsdGkgaW50ZXJmYWNlcyB0byBhdm9pZCBhbGxvd2luZyB0aGUgY29kZSB0byBibG9jay4gIElmICJpZiEiIGlzCitzcGVjaWZpZWQgYnV0IHRoZSBwYXJhbWV0ZXIgZG9lcyBub3QgbWF0Y2ggYW4gZXhpc3RpbmcgaW50ZXJmYWNlLAorQ1VSTEVfSU5URVJGQUNFX0ZBSUxFRCBpcyByZXR1cm5lZC4KKy5JUCBDVVJMT1BUX0xPQ0FMUE9SVAorUGFzcyBhIGxvbmcuIFRoaXMgc2V0cyB0aGUgbG9jYWwgcG9ydCBudW1iZXIgb2YgdGhlIHNvY2tldCB1c2VkIGZvcgorY29ubmVjdGlvbi4gVGhpcyBjYW4gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIFxmSUNVUkxPUFRfSU5URVJGQUNFXGZQIGFuZAoreW91IGFyZSByZWNvbW1lbmRlZCB0byB1c2UgXGZJQ1VSTE9QVF9MT0NBTFBPUlRSQU5HRVxmUCBhcyB3ZWxsIHdoZW4gdGhpcyBpcworc2V0LiBWYWxpZCBwb3J0IG51bWJlcnMgYXJlIDEgLSA2NTUzNS4gKEFkZGVkIGluIDcuMTUuMikKKy5JUCBDVVJMT1BUX0xPQ0FMUE9SVFJBTkdFCitQYXNzIGEgbG9uZy4gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGF0dGVtcHRzIGxpYmN1cmwgc2hvdWxkIG1ha2UgdG8gZmluZCBhCit3b3JraW5nIGxvY2FsIHBvcnQgbnVtYmVyLiBJdCBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gXGZJQ1VSTE9QVF9MT0NBTFBPUlRcZlAKK2FuZCBhZGRzIG9uZSB0byB0aGUgbnVtYmVyIGZvciBlYWNoIHJldHJ5LiBTZXR0aW5nIHRoaXMgdG8gMSBvciBiZWxvdyB3aWxsCittYWtlIGxpYmN1cmwgZG8gb25seSBvbmUgdHJ5IGZvciB0aGUgZXhhY3QgcG9ydCBudW1iZXIuIFBvcnQgbnVtYmVycyBieSBuYXR1cmUKK2FyZSBzY2FyY2UgcmVzb3VyY2VzIHRoYXQgd2lsbCBiZSBidXN5IGF0IHRpbWVzIHNvIHNldHRpbmcgdGhpcyB2YWx1ZSB0bworc29tZXRoaW5nIHRvbyBsb3cgbWlnaHQgY2F1c2UgdW5uZWNlc3NhcnkgY29ubmVjdGlvbiBzZXR1cCBmYWlsdXJlcy4gKEFkZGVkIGluCis3LjE1LjIpCisuSVAgQ1VSTE9QVF9ETlNfQ0FDSEVfVElNRU9VVAorUGFzcyBhIGxvbmcsIHRoaXMgc2V0cyB0aGUgdGltZW91dCBpbiBzZWNvbmRzLiBOYW1lIHJlc29sdmVzIHdpbGwgYmUga2VwdCBpbgorbWVtb3J5IGZvciB0aGlzIG51bWJlciBvZiBzZWNvbmRzLiBTZXQgdG8gemVybyB0byBjb21wbGV0ZWx5IGRpc2FibGUKK2NhY2hpbmcsIG9yIHNldCB0byAtMSB0byBtYWtlIHRoZSBjYWNoZWQgZW50cmllcyByZW1haW4gZm9yZXZlci4gQnkgZGVmYXVsdCwKK2xpYmN1cmwgY2FjaGVzIHRoaXMgaW5mbyBmb3IgNjAgc2Vjb25kcy4KKworVGhlIG5hbWUgcmVzb2x2ZSBmdW5jdGlvbnMgb2YgdmFyaW91cyBsaWJjIGltcGxlbWVudGF0aW9ucyBkb24ndCByZS1yZWFkIG5hbWUKK3NlcnZlciBpbmZvcm1hdGlvbiB1bmxlc3MgZXhwbGljaXRseSB0b2xkIHNvIChmb3IgZXhhbXBsZSwgYnkgY2FsbGluZworXGZJcmVzX2luaXQoMylcZlApLiBUaGlzIG1heSBjYXVzZSBsaWJjdXJsIHRvIGtlZXAgdXNpbmcgdGhlIG9sZGVyIHNlcnZlciBldmVuCitpZiBESENQIGhhcyB1cGRhdGVkIHRoZSBzZXJ2ZXIgaW5mbywgYW5kIHRoaXMgbWF5IGxvb2sgbGlrZSBhIEROUyBjYWNoZSBpc3N1ZQordG8gdGhlIGNhc3VhbCBsaWJjdXJsLWFwcCB1c2VyLgorLklQIENVUkxPUFRfRE5TX1VTRV9HTE9CQUxfQ0FDSEUKK1Bhc3MgYSBsb25nLiBJZiB0aGUgdmFsdWUgaXMgMSwgaXQgdGVsbHMgY3VybCB0byB1c2UgYSBnbG9iYWwgRE5TIGNhY2hlCit0aGF0IHdpbGwgc3Vydml2ZSBiZXR3ZWVuIGVhc3kgaGFuZGxlIGNyZWF0aW9ucyBhbmQgZGVsZXRpb25zLiBUaGlzIGlzIG5vdAordGhyZWFkLXNhZmUgYW5kIHRoaXMgd2lsbCB1c2UgYSBnbG9iYWwgdmFyaWFibGUuCisKK1xmQldBUk5JTkc6XGZQIHRoaXMgb3B0aW9uIGlzIGNvbnNpZGVyZWQgb2Jzb2xldGUuIFN0b3AgdXNpbmcgaXQuIFN3aXRjaCBvdmVyCit0byB1c2luZyB0aGUgc2hhcmUgaW50ZXJmYWNlIGluc3RlYWQhIFNlZSBcZklDVVJMT1BUX1NIQVJFXGZQIGFuZAorXGZJY3VybF9zaGFyZV9pbml0KDMpXGZQLgorLklQIENVUkxPUFRfQlVGRkVSU0laRQorUGFzcyBhIGxvbmcgc3BlY2lmeWluZyB5b3VyIHByZWZlcnJlZCBzaXplIChpbiBieXRlcykgZm9yIHRoZSByZWNlaXZlIGJ1ZmZlcgoraW4gbGliY3VybC4gIFRoZSBtYWluIHBvaW50IG9mIHRoaXMgd291bGQgYmUgdGhhdCB0aGUgd3JpdGUgY2FsbGJhY2sgZ2V0cworY2FsbGVkIG1vcmUgb2Z0ZW4gYW5kIHdpdGggc21hbGxlciBjaHVua3MuIFRoaXMgaXMganVzdCB0cmVhdGVkIGFzIGEgcmVxdWVzdCwKK25vdCBhbiBvcmRlci4gWW91IGNhbm5vdCBiZSBndWFyYW50ZWVkIHRvIGFjdHVhbGx5IGdldCB0aGUgZ2l2ZW4gc2l6ZS4gKEFkZGVkCitpbiA3LjEwKQorCitUaGlzIHNpemUgaXMgYnkgZGVmYXVsdCBzZXQgYXMgYmlnIGFzIHBvc3NpYmxlIChDVVJMX01BWF9XUklURV9TSVpFKSwgc28gaXQKK29ubHkgbWFrZXMgc2Vuc2UgdG8gdXNlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGl0IHNtYWxsZXIuCisuSVAgQ1VSTE9QVF9QT1JUCitQYXNzIGEgbG9uZyBzcGVjaWZ5aW5nIHdoYXQgcmVtb3RlIHBvcnQgbnVtYmVyIHRvIGNvbm5lY3QgdG8sIGluc3RlYWQgb2YgdGhlCitvbmUgc3BlY2lmaWVkIGluIHRoZSBVUkwgb3IgdGhlIGRlZmF1bHQgcG9ydCBmb3IgdGhlIHVzZWQgcHJvdG9jb2wuCisuSVAgQ1VSTE9QVF9UQ1BfTk9ERUxBWQorUGFzcyBhIGxvbmcgc3BlY2lmeWluZyB3aGV0aGVyIHRoZSBUQ1BfTk9ERUxBWSBvcHRpb24gc2hvdWxkIGJlIHNldCBvcgorY2xlYXJlZCAoMSA9IHNldCwgMCA9IGNsZWFyKS4gVGhlIG9wdGlvbiBpcyBjbGVhcmVkIGJ5IGRlZmF1bHQuIFRoaXMKK3dpbGwgaGF2ZSBubyBlZmZlY3QgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQuCisKK1NldHRpbmcgdGhpcyBvcHRpb24gd2lsbCBkaXNhYmxlIFRDUCdzIE5hZ2xlIGFsZ29yaXRobS4gVGhlIHB1cnBvc2Ugb2YKK3RoaXMgYWxnb3JpdGhtIGlzIHRvIHRyeSB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHNtYWxsIHBhY2tldHMgb24KK3RoZSBuZXR3b3JrICh3aGVyZSAic21hbGwgcGFja2V0cyIgbWVhbnMgVENQIHNlZ21lbnRzIGxlc3MgdGhhbiB0aGUKK01heGltdW0gU2VnbWVudCBTaXplIChNU1MpIGZvciB0aGUgbmV0d29yaykuCisKK01heGltaXppbmcgdGhlIGFtb3VudCBvZiBkYXRhIHNlbnQgcGVyIFRDUCBzZWdtZW50IGlzIGdvb2QgYmVjYXVzZSBpdAorYW1vcnRpemVzIHRoZSBvdmVyaGVhZCBvZiB0aGUgc2VuZC4gSG93ZXZlciwgaW4gc29tZSBjYXNlcyAobW9zdAorbm90YWJseSB0ZWxuZXQgb3IgcmxvZ2luKSBzbWFsbCBzZWdtZW50cyBtYXkgbmVlZCB0byBiZSBzZW50Cit3aXRob3V0IGRlbGF5LiBUaGlzIGlzIGxlc3MgZWZmaWNpZW50IHRoYW4gc2VuZGluZyBsYXJnZXIgYW1vdW50cyBvZgorZGF0YSBhdCBhIHRpbWUsIGFuZCBjYW4gY29udHJpYnV0ZSB0byBjb25nZXN0aW9uIG9uIHRoZSBuZXR3b3JrIGlmCitvdmVyZG9uZS4KKy5JUCBDVVJMT1BUX0FERFJFU1NfU0NPUEUKK1Bhc3MgYSBsb25nIHNwZWNpZnlpbmcgdGhlIHNjb3BlX2lkIHZhbHVlIHRvIHVzZSB3aGVuIGNvbm5lY3RpbmcgdG8gSVB2NgorbGluay1sb2NhbCBvciBzaXRlLWxvY2FsIGFkZHJlc3Nlcy4gKEFkZGVkIGluIDcuMTkuMCkKKy5JUCBDVVJMT1BUX1RDUF9LRUVQQUxJVkUKK1Bhc3MgYSBsb25nLiBJZiBzZXQgdG8gMSwgVENQIGtlZXBhbGl2ZSBwcm9iZXMgd2lsbCBiZSBzZW50LiBUaGUgZGVsYXkgYW5kCitmcmVxdWVuY3kgb2YgdGhlc2UgcHJvYmVzIGNhbiBiZSBjb250cm9sbGVkIGJ5IHRoZSBcZklDVVJMT1BUX1RDUF9LRUVQSURMRVxmUAorYW5kIFxmSUNVUkxPUFRfVENQX0tFRVBJTlRWTFxmUCBvcHRpb25zLCBwcm92aWRlZCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBzdXBwb3J0cwordGhlbS4gU2V0IHRvIDAgKGRlZmF1bHQgYmVoYXZpb3IpIHRvIGRpc2FibGUga2VlcGFsaXZlIHByb2JlcyAoQWRkZWQgaW4KKzcuMjUuMCkuCisuSVAgQ1VSTE9QVF9UQ1BfS0VFUElETEUKK1Bhc3MgYSBsb25nLiBTZXRzIHRoZSBkZWxheSwgaW4gc2Vjb25kcywgdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aWxsIHdhaXQKK3doaWxlIHRoZSBjb25uZWN0aW9uIGlzIGlkbGUgYmVmb3JlIHNlbmRpbmcga2VlcGFsaXZlIHByb2Jlcy4gTm90IGFsbCBvcGVyYXRpbmcKK3N5c3RlbXMgc3VwcG9ydCB0aGlzIG9wdGlvbi4gKEFkZGVkIGluIDcuMjUuMCkKKy5JUCBDVVJMT1BUX1RDUF9LRUVQSU5UVkwKK1Bhc3MgYSBsb25nLiBTZXRzIHRoZSBpbnRlcnZhbCwgaW4gc2Vjb25kcywgdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aWxsIHdhaXQKK2JldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcHJvYmVzLiBOb3QgYWxsIG9wZXJhdGluZyBzeXN0ZW1zIHN1cHBvcnQgdGhpcworb3B0aW9uLiAoQWRkZWQgaW4gNy4yNS4wKQorLlNIIE5BTUVTIGFuZCBQQVNTV09SRFMgT1BUSU9OUyAoQXV0aGVudGljYXRpb24pCisuSVAgQ1VSTE9QVF9ORVRSQworVGhpcyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIHByZWZlcmVuY2Ugb2YgbGliY3VybCBiZXR3ZWVuIHVzaW5nIHVzZXIgbmFtZXMgYW5kCitwYXNzd29yZHMgZnJvbSB5b3VyIFxmSX4vLm5ldHJjXGZQIGZpbGUsIHJlbGF0aXZlIHRvIHVzZXIgbmFtZXMgYW5kIHBhc3N3b3JkcworaW4gdGhlIFVSTCBzdXBwbGllZCB3aXRoIFxmSUNVUkxPUFRfVVJMXGZQLgorCitsaWJjdXJsIHVzZXMgYSB1c2VyIG5hbWUgKGFuZCBzdXBwbGllZCBvciBwcm9tcHRlZCBwYXNzd29yZCkgc3VwcGxpZWQgd2l0aAorXGZJQ1VSTE9QVF9VU0VSUFdEXGZQIGluIHByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBvcHRpb25zIGNvbnRyb2xsZWQgYnkgdGhpcworcGFyYW1ldGVyLgorCitQYXNzIGEgbG9uZywgc2V0IHRvIG9uZSBvZiB0aGUgdmFsdWVzIGRlc2NyaWJlZCBiZWxvdy4KKy5SUworLklQIENVUkxfTkVUUkNfT1BUSU9OQUwKK1RoZSB1c2Ugb2YgeW91ciBcZkl+Ly5uZXRyY1xmUCBmaWxlIGlzIG9wdGlvbmFsLCBhbmQgaW5mb3JtYXRpb24gaW4gdGhlIFVSTCBpcwordG8gYmUgcHJlZmVycmVkLiAgVGhlIGZpbGUgd2lsbCBiZSBzY2FubmVkIGZvciB0aGUgaG9zdCBhbmQgdXNlciBuYW1lICh0bworZmluZCB0aGUgcGFzc3dvcmQgb25seSkgb3IgZm9yIHRoZSBob3N0IG9ubHksIHRvIGZpbmQgdGhlIGZpcnN0IHVzZXIgbmFtZSBhbmQKK3Bhc3N3b3JkIGFmdGVyIHRoYXQgXGZJbWFjaGluZVxmUCwgd2hpY2ggZXZlciBpbmZvcm1hdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluCit0aGUgVVJMLgorCitVbmRlZmluZWQgdmFsdWVzIG9mIHRoZSBvcHRpb24gd2lsbCBoYXZlIHRoaXMgZWZmZWN0LgorLklQIENVUkxfTkVUUkNfSUdOT1JFRAorVGhlIGxpYnJhcnkgd2lsbCBpZ25vcmUgdGhlIGZpbGUgYW5kIHVzZSBvbmx5IHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgVVJMLgorCitUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQIENVUkxfTkVUUkNfUkVRVUlSRUQKK1RoaXMgdmFsdWUgdGVsbHMgdGhlIGxpYnJhcnkgdGhhdCB1c2Ugb2YgdGhlIGZpbGUgaXMgcmVxdWlyZWQsIHRvIGlnbm9yZSB0aGUKK2luZm9ybWF0aW9uIGluIHRoZSBVUkwsIGFuZCB0byBzZWFyY2ggdGhlIGZpbGUgZm9yIHRoZSBob3N0IG9ubHkuCisuUkUKK09ubHkgbWFjaGluZSBuYW1lLCB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIGFyZSB0YWtlbiBpbnRvIGFjY291bnQKKyhpbml0IG1hY3JvcyBhbmQgc2ltaWxhciB0aGluZ3MgYXJlbid0IHN1cHBvcnRlZCkuCisKK2xpYmN1cmwgZG9lcyBub3QgdmVyaWZ5IHRoYXQgdGhlIGZpbGUgaGFzIHRoZSBjb3JyZWN0IHByb3BlcnRpZXMgc2V0IChhcyB0aGUKK3N0YW5kYXJkIFVuaXggZnRwIGNsaWVudCBkb2VzKS4gSXQgc2hvdWxkIG9ubHkgYmUgcmVhZGFibGUgYnkgdXNlci4KKy5JUCBDVVJMT1BUX05FVFJDX0ZJTEUKK1Bhc3MgYSBjaGFyICogYXMgcGFyYW1ldGVyLCBwb2ludGluZyB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZwordGhlIGZ1bGwgcGF0aCBuYW1lIHRvIHRoZSBmaWxlIHlvdSB3YW50IGxpYmN1cmwgdG8gdXNlIGFzIC5uZXRyYyBmaWxlLiBJZiB0aGlzCitvcHRpb24gaXMgb21pdHRlZCwgYW5kIFxmSUNVUkxPUFRfTkVUUkNcZlAgaXMgc2V0LCBsaWJjdXJsIHdpbGwgYXR0ZW1wdCB0bworZmluZCBhIC5uZXRyYyBmaWxlIGluIHRoZSBjdXJyZW50IHVzZXIncyBob21lIGRpcmVjdG9yeS4gKEFkZGVkIGluIDcuMTAuOSkKKy5JUCBDVVJMT1BUX1VTRVJQV0QKK1Bhc3MgYSBjaGFyICogYXMgcGFyYW1ldGVyLCB3aGljaCBzaG91bGQgYmUgW3VzZXIgbmFtZV06W3Bhc3N3b3JkXSB0byB1c2UgZm9yCit0aGUgY29ubmVjdGlvbi4gVXNlIFxmSUNVUkxPUFRfSFRUUEFVVEhcZlAgdG8gZGVjaWRlIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QuCisKK1doZW4gdXNpbmcgTlRMTSwgeW91IGNhbiBzZXQgdGhlIGRvbWFpbiBieSBwcmVwZW5kaW5nIGl0IHRvIHRoZSB1c2VyIG5hbWUgYW5kCitzZXBhcmF0aW5nIHRoZSBkb21haW4gYW5kIG5hbWUgd2l0aCBhIGZvcndhcmQgKC8pIG9yIGJhY2t3YXJkIHNsYXNoIChcXCkuIExpa2UKK3RoaXM6ICJkb21haW4vdXNlcjpwYXNzd29yZCIgb3IgImRvbWFpblxcdXNlcjpwYXNzd29yZCIuIFNvbWUgSFRUUCBzZXJ2ZXJzIChvbgorV2luZG93cykgc3VwcG9ydCB0aGlzIHN0eWxlIGV2ZW4gZm9yIEJhc2ljIGF1dGhlbnRpY2F0aW9uLgorCitXaGVuIHVzaW5nIEhUVFAgYW5kIFxmSUNVUkxPUFRfRk9MTE9XTE9DQVRJT05cZlAsIGxpYmN1cmwgbWlnaHQgcGVyZm9ybQorc2V2ZXJhbCByZXF1ZXN0cyB0byBwb3NzaWJseSBkaWZmZXJlbnQgaG9zdHMuIGxpYmN1cmwgd2lsbCBvbmx5IHNlbmQgdGhpcyB1c2VyCithbmQgcGFzc3dvcmQgaW5mb3JtYXRpb24gdG8gaG9zdHMgdXNpbmcgdGhlIGluaXRpYWwgaG9zdCBuYW1lICh1bmxlc3MKK1xmSUNVUkxPUFRfVU5SRVNUUklDVEVEX0FVVEhcZlAgaXMgc2V0KSwgc28gaWYgbGliY3VybCBmb2xsb3dzIGxvY2F0aW9ucyB0bworb3RoZXIgaG9zdHMgaXQgd2lsbCBub3Qgc2VuZCB0aGUgdXNlciBhbmQgcGFzc3dvcmQgdG8gdGhvc2UuIFRoaXMgaXMgZW5mb3JjZWQKK3RvIHByZXZlbnQgYWNjaWRlbnRhbCBpbmZvcm1hdGlvbiBsZWFrYWdlLgorLklQIENVUkxPUFRfUFJPWFlVU0VSUFdECitQYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgd2hpY2ggc2hvdWxkIGJlIFt1c2VyIG5hbWVdOltwYXNzd29yZF0gdG8gdXNlIGZvcgordGhlIGNvbm5lY3Rpb24gdG8gdGhlIEhUVFAgcHJveHkuICBVc2UgXGZJQ1VSTE9QVF9QUk9YWUFVVEhcZlAgdG8gZGVjaWRlCit0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kLgorLklQIENVUkxPUFRfVVNFUk5BTUUKK1Bhc3MgYSBjaGFyICogYXMgcGFyYW1ldGVyLCB3aGljaCBzaG91bGQgYmUgcG9pbnRpbmcgdG8gdGhlIHplcm8gdGVybWluYXRlZAordXNlciBuYW1lIHRvIHVzZSBmb3IgdGhlIHRyYW5zZmVyLgorCitcZkJDVVJMT1BUX1VTRVJOQU1FXGZQIHNldHMgdGhlIHVzZXIgbmFtZSB0byBiZSB1c2VkIGluIHByb3RvY29sCithdXRoZW50aWNhdGlvbi4gWW91IHNob3VsZCBub3QgdXNlIHRoaXMgb3B0aW9uIHRvZ2V0aGVyIHdpdGggdGhlIChvbGRlcikKK0NVUkxPUFRfVVNFUlBXRCBvcHRpb24uCisKK0luIG9yZGVyIHRvIHNwZWNpZnkgdGhlIHBhc3N3b3JkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgdXNlciBuYW1lCit1c2UgdGhlIFxmSUNVUkxPUFRfUEFTU1dPUkRcZlAgb3B0aW9uLiAgKEFkZGVkIGluIDcuMTkuMSkKKy5JUCBDVVJMT1BUX1BBU1NXT1JECitQYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgd2hpY2ggc2hvdWxkIGJlIHBvaW50aW5nIHRvIHRoZSB6ZXJvIHRlcm1pbmF0ZWQKK3Bhc3N3b3JkIHRvIHVzZSBmb3IgdGhlIHRyYW5zZmVyLgorCitUaGUgQ1VSTE9QVF9QQVNTV09SRCBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAordGhlIFxmSUNVUkxPUFRfVVNFUk5BTUVcZlAgb3B0aW9uLiAoQWRkZWQgaW4gNy4xOS4xKQorLklQIENVUkxPUFRfUFJPWFlVU0VSTkFNRQorUGFzcyBhIGNoYXIgKiBhcyBwYXJhbWV0ZXIsIHdoaWNoIHNob3VsZCBiZSBwb2ludGluZyB0byB0aGUgemVybyB0ZXJtaW5hdGVkCit1c2VyIG5hbWUgdG8gdXNlIGZvciB0aGUgdHJhbnNmZXIgd2hpbGUgY29ubmVjdGluZyB0byBQcm94eS4KKworVGhlIENVUkxPUFRfUFJPWFlVU0VSTkFNRSBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4gc2FtZSB3YXkgYXMgdGhlCitcZklDVVJMT1BUX1BST1hZVVNFUlBXRFxmUCBpcyB1c2VkLiAgSW4gY29tcGFyaXNvbiB0bworXGZJQ1VSTE9QVF9QUk9YWVVTRVJQV0RcZlAgdGhlIENVUkxPUFRfUFJPWFlVU0VSTkFNRSBhbGxvd3MgdGhlIHVzZXJuYW1lIHRvCitjb250YWluIGEgY29sb24sIGxpa2UgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOiAic2lwOnVzZXJAZXhhbXBsZS5jb20iLiBUaGUKK0NVUkxPUFRfUFJPWFlVU0VSTkFNRSBvcHRpb24gaXMgYW4gYWx0ZXJuYXRpdmUgd2F5IHRvIHNldCB0aGUgdXNlciBuYW1lIHdoaWxlCitjb25uZWN0aW5nIHRvIFByb3h5LiAgVGhlcmUgaXMgbm8gbWVhbmluZyB0byB1c2UgaXQgdG9nZXRoZXIgd2l0aCB0aGUKK1xmSUNVUkxPUFRfUFJPWFlVU0VSUFdEXGZQIG9wdGlvbi4KKworSW4gb3JkZXIgdG8gc3BlY2lmeSB0aGUgcGFzc3dvcmQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSB1c2VyIG5hbWUKK3VzZSB0aGUgXGZJQ1VSTE9QVF9QUk9YWVBBU1NXT1JEXGZQIG9wdGlvbi4gIChBZGRlZCBpbiA3LjE5LjEpCisuSVAgQ1VSTE9QVF9QUk9YWVBBU1NXT1JECitQYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgd2hpY2ggc2hvdWxkIGJlIHBvaW50aW5nIHRvIHRoZSB6ZXJvIHRlcm1pbmF0ZWQKK3Bhc3N3b3JkIHRvIHVzZSBmb3IgdGhlIHRyYW5zZmVyIHdoaWxlIGNvbm5lY3RpbmcgdG8gUHJveHkuCisKK1RoZSBDVVJMT1BUX1BST1hZUEFTU1dPUkQgb3B0aW9uIHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKK3RoZSBcZklDVVJMT1BUX1BST1hZVVNFUk5BTUVcZlAgb3B0aW9uLiAoQWRkZWQgaW4gNy4xOS4xKQorLklQIENVUkxPUFRfSFRUUEFVVEgKK1Bhc3MgYSBsb25nIGFzIHBhcmFtZXRlciwgd2hpY2ggaXMgc2V0IHRvIGEgYml0bWFzaywgdG8gdGVsbCBsaWJjdXJsIHdoaWNoCithdXRoZW50aWNhdGlvbiBtZXRob2QocykgeW91IHdhbnQgaXQgdG8gdXNlLiBUaGUgYXZhaWxhYmxlIGJpdHMgYXJlIGxpc3RlZAorYmVsb3cuIElmIG1vcmUgdGhhbiBvbmUgYml0IGlzIHNldCwgbGliY3VybCB3aWxsIGZpcnN0IHF1ZXJ5IHRoZSBzaXRlIHRvIHNlZQord2hpY2ggYXV0aGVudGljYXRpb24gbWV0aG9kcyBpdCBzdXBwb3J0cyBhbmQgdGhlbiBwaWNrIHRoZSBiZXN0IG9uZSB5b3UgYWxsb3cKK2l0IHRvIHVzZS4gRm9yIHNvbWUgbWV0aG9kcywgdGhpcyB3aWxsIGluZHVjZSBhbiBleHRyYSBuZXR3b3JrIHJvdW5kLXRyaXAuIFNldAordGhlIGFjdHVhbCBuYW1lIGFuZCBwYXNzd29yZCB3aXRoIHRoZSBcZklDVVJMT1BUX1VTRVJQV0RcZlAgb3B0aW9uIG9yCit3aXRoIHRoZSBcZklDVVJMT1BUX1VTRVJOQU1FXGZQIGFuZCB0aGUgXGZJQ1VSTE9QVF9QQVNTV09SRFxmUCBvcHRpb25zLgorKEFkZGVkIGluIDcuMTAuNikKKy5SUworLklQIENVUkxBVVRIX0JBU0lDCitIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGNob2ljZSwgYW5kIHRoZSBvbmx5IG1ldGhvZAordGhhdCBpcyBpbiB3aWRlLXNwcmVhZCB1c2UgYW5kIHN1cHBvcnRlZCB2aXJ0dWFsbHkgZXZlcnl3aGVyZS4gVGhpcyBzZW5kcwordGhlIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgb3ZlciB0aGUgbmV0d29yayBpbiBwbGFpbiB0ZXh0LCBlYXNpbHkgY2FwdHVyZWQgYnkKK290aGVycy4KKy5JUCBDVVJMQVVUSF9ESUdFU1QKK0hUVFAgRGlnZXN0IGF1dGhlbnRpY2F0aW9uLiAgRGlnZXN0IGF1dGhlbnRpY2F0aW9uIGlzIGRlZmluZWQgaW4gUkZDMjYxNyBhbmQKK2lzIGEgbW9yZSBzZWN1cmUgd2F5IHRvIGRvIGF1dGhlbnRpY2F0aW9uIG92ZXIgcHVibGljIG5ldHdvcmtzIHRoYW4gdGhlCityZWd1bGFyIG9sZC1mYXNoaW9uZWQgQmFzaWMgbWV0aG9kLgorLklQIENVUkxBVVRIX0RJR0VTVF9JRQorSFRUUCBEaWdlc3QgYXV0aGVudGljYXRpb24gd2l0aCBhbiBJRSBmbGF2b3IuICBEaWdlc3QgYXV0aGVudGljYXRpb24gaXMKK2RlZmluZWQgaW4gUkZDMjYxNyBhbmQgaXMgYSBtb3JlIHNlY3VyZSB3YXkgdG8gZG8gYXV0aGVudGljYXRpb24gb3ZlciBwdWJsaWMKK25ldHdvcmtzIHRoYW4gdGhlIHJlZ3VsYXIgb2xkLWZhc2hpb25lZCBCYXNpYyBtZXRob2QuIFRoZSBJRSBmbGF2b3IgaXMgc2ltcGx5Cit0aGF0IGxpYmN1cmwgd2lsbCB1c2UgYSBzcGVjaWFsICJxdWlyayIgdGhhdCBJRSBpcyBrbm93biB0byBoYXZlIHVzZWQgYmVmb3JlCit2ZXJzaW9uIDcgYW5kIHRoYXQgc29tZSBzZXJ2ZXJzIHJlcXVpcmUgdGhlIGNsaWVudCB0byB1c2UuIChUaGlzIGRlZmluZSB3YXMKK2FkZGVkIGluIDcuMTkuMykKKy5JUCBDVVJMQVVUSF9HU1NORUdPVElBVEUKK0hUVFAgR1NTLU5lZ290aWF0ZSBhdXRoZW50aWNhdGlvbi4gVGhlIEdTUy1OZWdvdGlhdGUgKGFsc28ga25vd24gYXMgcGxhaW4KK1wmIk5lZ290aWF0ZSIpIG1ldGhvZCB3YXMgZGVzaWduZWQgYnkgTWljcm9zb2Z0IGFuZCBpcyB1c2VkIGluIHRoZWlyIHdlYgorYXBwbGljYXRpb25zLiBJdCBpcyBwcmltYXJpbHkgbWVhbnQgYXMgYSBzdXBwb3J0IGZvciBLZXJiZXJvczUgYXV0aGVudGljYXRpb24KK2J1dCBtYXkgYWxzbyBiZSB1c2VkIGFsb25nIHdpdGggb3RoZXIgYXV0aGVudGljYXRpb24gbWV0aG9kcy4gRm9yIG1vcmUKK2luZm9ybWF0aW9uIHNlZSBJRVRGIGRyYWZ0IGRyYWZ0LWJyZXphay1zcG5lZ28taHR0cC0wNC50eHQuCisKK1lvdSBuZWVkIHRvIGJ1aWxkIGxpYmN1cmwgd2l0aCBhIHN1aXRhYmxlIEdTUy1BUEkgbGlicmFyeSBmb3IgdGhpcyB0byB3b3JrLgorLklQIENVUkxBVVRIX05UTE0KK0hUVFAgTlRMTSBhdXRoZW50aWNhdGlvbi4gQSBwcm9wcmlldGFyeSBwcm90b2NvbCBpbnZlbnRlZCBhbmQgdXNlZCBieQorTWljcm9zb2Z0LiBJdCB1c2VzIGEgY2hhbGxlbmdlLXJlc3BvbnNlIGFuZCBoYXNoIGNvbmNlcHQgc2ltaWxhciB0byBEaWdlc3QsIHRvCitwcmV2ZW50IHRoZSBwYXNzd29yZCBmcm9tIGJlaW5nIGVhdmVzZHJvcHBlZC4KKworWW91IG5lZWQgdG8gYnVpbGQgbGliY3VybCB3aXRoIGVpdGhlciBPcGVuU1NMIG9yIE5TUyBzdXBwb3J0IGZvciB0aGlzIG9wdGlvbgordG8gd29yaywgb3IgYnVpbGQgbGliY3VybCBvbiBXaW5kb3dzLgorLklQIENVUkxBVVRIX05UTE1fV0IKK05UTE0gZGVsZWdhdGluZyB0byB3aW5iaW5kIGhlbHBlci4gQXV0aGVudGljYXRpb24gaXMgcGVyZm9ybWVkIGJ5IGEgc2VwYXJhdGUKK2JpbmFyeSBhcHBsaWNhdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIHdoZW4gbmVlZGVkLiBUaGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24KK2lzIHNwZWNpZmllZCBhdCBjb21waWxlIHRpbWUgYnV0IGlzIHR5cGljYWxseSAvdXNyL2Jpbi9udGxtX2F1dGgKKyhBZGRlZCBpbiA3LjIyLjApCisKK05vdGUgdGhhdCBsaWJjdXJsIHdpbGwgZm9yayB3aGVuIG5lY2Vzc2FyeSB0byBydW4gdGhlIHdpbmJpbmQgYXBwbGljYXRpb24gYW5kCitraWxsIGl0IHdoZW4gY29tcGxldGUsIGNhbGxpbmcgd2FpdHBpZCgpIHRvIGF3YWl0IGl0cyBleGl0IHdoZW4gZG9uZS4gT24gUE9TSVgKK29wZXJhdGluZyBzeXN0ZW1zLCBraWxsaW5nIHRoZSBwcm9jZXNzIHdpbGwgY2F1c2UgYSBTSUdDSExEIHNpZ25hbCB0byBiZQorcmFpc2VkIChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgXGZJQ1VSTE9QVF9OT1NJR05BTFxmUCBpcyBzZXQpLCB3aGljaCBtdXN0IGJlCitoYW5kbGVkIGludGVsbGlnZW50bHkgYnkgdGhlIGFwcGxpY2F0aW9uLiBJbiBwYXJ0aWN1bGFyLCB0aGUgYXBwbGljYXRpb24gbXVzdAorbm90IHVuY29uZGl0aW9uYWxseSBjYWxsIHdhaXQoKSBpbiBpdHMgU0lHQ0hMRCBzaWduYWwgaGFuZGxlciB0byBhdm9pZCBiZWluZworc3ViamVjdCB0byBhIHJhY2UgY29uZGl0aW9uLiAgVGhpcyBiZWhhdmlvciBpcyBzdWJqZWN0IHRvIGNoYW5nZSBpbiBmdXR1cmUKK3ZlcnNpb25zIG9mIGxpYmN1cmwuCisuSVAgQ1VSTEFVVEhfQU5ZCitUaGlzIGlzIGEgY29udmVuaWVuY2UgbWFjcm8gdGhhdCBzZXRzIGFsbCBiaXRzIGFuZCB0aHVzIG1ha2VzIGxpYmN1cmwgcGljayBhbnkKK2l0IGZpbmRzIHN1aXRhYmxlLiBsaWJjdXJsIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIG9uZSBpdCBmaW5kcyBtb3N0CitzZWN1cmUuCisuSVAgQ1VSTEFVVEhfQU5ZU0FGRQorVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1hY3JvIHRoYXQgc2V0cyBhbGwgYml0cyBleGNlcHQgQmFzaWMgYW5kIHRodXMgbWFrZXMKK2xpYmN1cmwgcGljayBhbnkgaXQgZmluZHMgc3VpdGFibGUuIGxpYmN1cmwgd2lsbCBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgb25lCitpdCBmaW5kcyBtb3N0IHNlY3VyZS4KKy5JUCBDVVJMQVVUSF9PTkxZCitUaGlzIGlzIGEgbWV0YSBzeW1ib2wuIE9yIHRoaXMgdmFsdWUgdG9nZXRoZXIgd2l0aCBhIHNpbmdsZSBzcGVjaWZpYyBhdXRoCit2YWx1ZSB0byBmb3JjZSBsaWJjdXJsIHRvIHByb2JlIGZvciB1bi1yZXN0cmljdGVkIGF1dGggYW5kIGlmIG5vdCwgb25seSB0aGF0CitzaW5nbGUgYXV0aCBhbGdvcml0aG0gaXMgYWNjZXB0YWJsZS4gKEFkZGVkIGluIDcuMjEuMykKKy5SRQorLklQIENVUkxPUFRfVExTQVVUSF9UWVBFCitQYXNzIGEgbG9uZyBhcyBwYXJhbWV0ZXIsIHdoaWNoIGlzIHNldCB0byBhIGJpdG1hc2ssIHRvIHRlbGwgbGliY3VybCB3aGljaAorYXV0aGVudGljYXRpb24gbWV0aG9kKHMpIHlvdSB3YW50IGl0IHRvIHVzZSBmb3IgVExTIGF1dGhlbnRpY2F0aW9uLgorLlJTCisuSVAgQ1VSTE9QVF9UTFNBVVRIX1NSUAorVExTLVNSUCBhdXRoZW50aWNhdGlvbi4gU2VjdXJlIFJlbW90ZSBQYXNzd29yZCBhdXRoZW50aWNhdGlvbiBmb3IgVExTIGlzCitkZWZpbmVkIGluIFJGQyA1MDU0IGFuZCBwcm92aWRlcyBtdXR1YWwgYXV0aGVudGljYXRpb24gaWYgYm90aCBzaWRlcyBoYXZlIGEKK3NoYXJlZCBzZWNyZXQuIFRvIHVzZSBUTFMtU1JQLCB5b3UgbXVzdCBhbHNvIHNldCB0aGUKK1xmSUNVUkxPUFRfVExTQVVUSF9VU0VSTkFNRVxmUCBhbmQgXGZJQ1VSTE9QVF9UTFNBVVRIX1BBU1NXT1JEXGZQIG9wdGlvbnMuCisKK1lvdSBuZWVkIHRvIGJ1aWxkIGxpYmN1cmwgd2l0aCBHbnVUTFMgb3IgT3BlblNTTCB3aXRoIFRMUy1TUlAgc3VwcG9ydCBmb3IgdGhpcwordG8gd29yay4gKEFkZGVkIGluIDcuMjEuNCkKKy5SRQorLklQIENVUkxPUFRfVExTQVVUSF9VU0VSTkFNRQorUGFzcyBhIGNoYXIgKiBhcyBwYXJhbWV0ZXIsIHdoaWNoIHNob3VsZCBwb2ludCB0byB0aGUgemVybyB0ZXJtaW5hdGVkIHVzZXJuYW1lCit0byB1c2UgZm9yIHRoZSBUTFMgYXV0aGVudGljYXRpb24gbWV0aG9kIHNwZWNpZmllZCB3aXRoIHRoZQorXGZJQ1VSTE9QVF9UTFNBVVRIX1RZUEVcZlAgb3B0aW9uLiBSZXF1aXJlcyB0aGF0IHRoZQorXGZJQ1VSTE9QVF9UTFNfUEFTU1dPUkRcZlAgb3B0aW9uIGFsc28gYmUgc2V0LiAoQWRkZWQgaW4gNy4yMS40KQorLklQIENVUkxPUFRfVExTQVVUSF9QQVNTV09SRAorUGFzcyBhIGNoYXIgKiBhcyBwYXJhbWV0ZXIsIHdoaWNoIHNob3VsZCBwb2ludCB0byB0aGUgemVybyB0ZXJtaW5hdGVkIHBhc3N3b3JkCit0byB1c2UgZm9yIHRoZSBUTFMgYXV0aGVudGljYXRpb24gbWV0aG9kIHNwZWNpZmllZCB3aXRoIHRoZQorXGZJQ1VSTE9QVF9UTFNBVVRIX1RZUEVcZlAgb3B0aW9uLiBSZXF1aXJlcyB0aGF0IHRoZQorXGZJQ1VSTE9QVF9UTFNfVVNFUk5BTUVcZlAgb3B0aW9uIGFsc28gYmUgc2V0LiAoQWRkZWQgaW4gNy4yMS40KQorLklQIENVUkxPUFRfUFJPWFlBVVRICitQYXNzIGEgbG9uZyBhcyBwYXJhbWV0ZXIsIHdoaWNoIGlzIHNldCB0byBhIGJpdG1hc2ssIHRvIHRlbGwgbGliY3VybCB3aGljaAorYXV0aGVudGljYXRpb24gbWV0aG9kKHMpIHlvdSB3YW50IGl0IHRvIHVzZSBmb3IgeW91ciBwcm94eSBhdXRoZW50aWNhdGlvbi4gIElmCittb3JlIHRoYW4gb25lIGJpdCBpcyBzZXQsIGxpYmN1cmwgd2lsbCBmaXJzdCBxdWVyeSB0aGUgc2l0ZSB0byBzZWUgd2hhdAorYXV0aGVudGljYXRpb24gbWV0aG9kcyBpdCBzdXBwb3J0cyBhbmQgdGhlbiBwaWNrIHRoZSBiZXN0IG9uZSB5b3UgYWxsb3cgaXQgdG8KK3VzZS4gRm9yIHNvbWUgbWV0aG9kcywgdGhpcyB3aWxsIGluZHVjZSBhbiBleHRyYSBuZXR3b3JrIHJvdW5kLXRyaXAuIFNldCB0aGUKK2FjdHVhbCBuYW1lIGFuZCBwYXNzd29yZCB3aXRoIHRoZSBcZklDVVJMT1BUX1BST1hZVVNFUlBXRFxmUCBvcHRpb24uIFRoZQorYml0bWFzayBjYW4gYmUgY29uc3RydWN0ZWQgYnkgb3InaW5nIHRvZ2V0aGVyIHRoZSBiaXRzIGxpc3RlZCBhYm92ZSBmb3IgdGhlCitcZklDVVJMT1BUX0hUVFBBVVRIXGZQIG9wdGlvbi4gQXMgb2YgdGhpcyB3cml0aW5nLCBvbmx5IEJhc2ljLCBEaWdlc3QgYW5kIE5UTE0KK3dvcmsuIChBZGRlZCBpbiA3LjEwLjcpCisuU0ggSFRUUCBPUFRJT05TCisuSVAgQ1VSTE9QVF9BVVRPUkVGRVJFUgorUGFzcyBhIHBhcmFtZXRlciBzZXQgdG8gMSB0byBlbmFibGUgdGhpcy4gV2hlbiBlbmFibGVkLCBsaWJjdXJsIHdpbGwKK2F1dG9tYXRpY2FsbHkgc2V0IHRoZSBSZWZlcmVyOiBmaWVsZCBpbiByZXF1ZXN0cyB3aGVyZSBpdCBmb2xsb3dzIGEgTG9jYXRpb246CityZWRpcmVjdC4KKy5JUCBDVVJMT1BUX0FDQ0VQVF9FTkNPRElORworU2V0cyB0aGUgY29udGVudHMgb2YgdGhlIEFjY2VwdC1FbmNvZGluZzogaGVhZGVyIHNlbnQgaW4gYSBIVFRQIHJlcXVlc3QsIGFuZAorZW5hYmxlcyBkZWNvZGluZyBvZiBhIHJlc3BvbnNlIHdoZW4gYSBDb250ZW50LUVuY29kaW5nOiBoZWFkZXIgaXMgcmVjZWl2ZWQuCitUaHJlZSBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZDogXGZJaWRlbnRpdHlcZlAsIHdoaWNoIGRvZXMgbm90aGluZywKK1xmSWRlZmxhdGVcZlAgd2hpY2ggcmVxdWVzdHMgdGhlIHNlcnZlciB0byBjb21wcmVzcyBpdHMgcmVzcG9uc2UgdXNpbmcgdGhlCit6bGliIGFsZ29yaXRobSwgYW5kIFxmSWd6aXBcZlAgd2hpY2ggcmVxdWVzdHMgdGhlIGd6aXAgYWxnb3JpdGhtLiAgSWYgYQoremVyby1sZW5ndGggc3RyaW5nIGlzIHNldCwgdGhlbiBhbiBBY2NlcHQtRW5jb2Rpbmc6IGhlYWRlciBjb250YWluaW5nIGFsbAorc3VwcG9ydGVkIGVuY29kaW5ncyBpcyBzZW50LgorCitUaGlzIGlzIGEgcmVxdWVzdCwgbm90IGFuIG9yZGVyOyB0aGUgc2VydmVyIG1heSBvciBtYXkgbm90IGRvIGl0LiAgVGhpcyBvcHRpb24KK211c3QgYmUgc2V0ICh0byBhbnkgbm9uLU5VTEwgdmFsdWUpIG9yIGVsc2UgYW55IHVuc29saWNpdGVkIGVuY29kaW5nIGRvbmUgYnkKK3RoZSBzZXJ2ZXIgaXMgaWdub3JlZC4gU2VlIHRoZSBzcGVjaWFsIGZpbGUgbGliL1JFQURNRS5lbmNvZGluZyBmb3IgZGV0YWlscy4KKworKFRoaXMgb3B0aW9uIHdhcyBjYWxsZWQgQ1VSTE9QVF9FTkNPRElORyBiZWZvcmUgNy4yMS42KQorLklQIENVUkxPUFRfVFJBTlNGRVJfRU5DT0RJTkcKK0FkZHMgYSByZXF1ZXN0IGZvciBjb21wcmVzc2VkIFRyYW5zZmVyIEVuY29kaW5nIGluIHRoZSBvdXRnb2luZyBIVFRQCityZXF1ZXN0LiBJZiB0aGUgc2VydmVyIHN1cHBvcnRzIHRoaXMgYW5kIHNvIGRlc2lyZXMsIGl0IGNhbiByZXNwb25kIHdpdGggdGhlCitIVFRQIHJlc29uc2Ugc2VudCB1c2luZyBhIGNvbXByZXNzZWQgVHJhbnNmZXItRW5jb2RpbmcgdGhhdCB3aWxsIGJlCithdXRvbWF0aWNhbGx5IHVuY29tcHJlc3NlZCBieSBsaWJjdXJsIG9uIHJlY2VpdmFsLgorCitUcmFuc2Zlci1FbmNvZGluZyBkaWZmZXJzIHNsaWdodGx5IGZyb20gdGhlIENvbnRlbnQtRW5jb2RpbmcgeW91IGFzayBmb3Igd2l0aAorXGZCQ1VSTE9QVF9BQ0NFUFRfRU5DT0RJTkdcZlAgaW4gdGhhdCBhIFRyYW5zZmVyLUVuY29kaW5nIGlzIHN0cmljdGx5IG1lYW50IHRvCitiZSBmb3IgdGhlIHRyYW5zZmVyIGFuZCB0aHVzIE1VU1QgYmUgZGVjb2RlZCBiZWZvcmUgdGhlIGRhdGEgYXJyaXZlcyBpbiB0aGUKK2NsaWVudC4gVHJhZGl0aW9uYWxseSwgVHJhbnNmZXItRW5jb2RpbmcgaGFzIGJlZW4gbXVjaCBsZXNzIHVzZWQgYW5kIHN1cHBvcnRlZAorYnkgYm90aCBIVFRQIGNsaWVudHMgYW5kIEhUVFAgc2VydmVycy4KKworKEFkZGVkIGluIDcuMjEuNikKKy5JUCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OCitBIHBhcmFtZXRlciBzZXQgdG8gMSB0ZWxscyB0aGUgbGlicmFyeSB0byBmb2xsb3cgYW55IExvY2F0aW9uOiBoZWFkZXIgdGhhdCB0aGUKK3NlcnZlciBzZW5kcyBhcyBwYXJ0IG9mIGEgSFRUUCBoZWFkZXIuCisKK1RoaXMgbWVhbnMgdGhhdCB0aGUgbGlicmFyeSB3aWxsIHJlLXNlbmQgdGhlIHNhbWUgcmVxdWVzdCBvbiB0aGUgbmV3IGxvY2F0aW9uCithbmQgZm9sbG93IG5ldyBMb2NhdGlvbjogaGVhZGVycyBhbGwgdGhlIHdheSB1bnRpbCBubyBtb3JlIHN1Y2ggaGVhZGVycyBhcmUKK3JldHVybmVkLiBcZklDVVJMT1BUX01BWFJFRElSU1xmUCBjYW4gYmUgdXNlZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHJlZGlyZWN0cworbGliY3VybCB3aWxsIGZvbGxvdy4KKworU2luY2UgNy4xOS40LCBsaWJjdXJsIGNhbiBsaW1pdCB3aGF0IHByb3RvY29scyBpdCB3aWxsIGF1dG9tYXRpY2FsbHkKK2ZvbGxvdy4gVGhlIGFjY2VwdGVkIHByb3RvY29scyBhcmUgc2V0IHdpdGggXGZJQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFNcZlAgYW5kCitpdCBleGNsdWRlcyB0aGUgRklMRSBwcm90b2NvbCBieSBkZWZhdWx0LgorLklQIENVUkxPUFRfVU5SRVNUUklDVEVEX0FVVEgKK0EgcGFyYW1ldGVyIHNldCB0byAxIHRlbGxzIHRoZSBsaWJyYXJ5IGl0IGNhbiBjb250aW51ZSB0byBzZW5kIGF1dGhlbnRpY2F0aW9uCisodXNlcitwYXNzd29yZCkgd2hlbiBmb2xsb3dpbmcgbG9jYXRpb25zLCBldmVuIHdoZW4gaG9zdG5hbWUgY2hhbmdlZC4gVGhpcworb3B0aW9uIGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIHNldHRpbmcgXGZJQ1VSTE9QVF9GT0xMT1dMT0NBVElPTlxmUC4KKy5JUCBDVVJMT1BUX01BWFJFRElSUworUGFzcyBhIGxvbmcuIFRoZSBzZXQgbnVtYmVyIHdpbGwgYmUgdGhlIHJlZGlyZWN0aW9uIGxpbWl0LiBJZiB0aGF0IG1hbnkKK3JlZGlyZWN0aW9ucyBoYXZlIGJlZW4gZm9sbG93ZWQsIHRoZSBuZXh0IHJlZGlyZWN0IHdpbGwgY2F1c2UgYW4gZXJyb3IKKyhcZklDVVJMRV9UT09fTUFOWV9SRURJUkVDVFNcZlApLiBUaGlzIG9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZQorXGZJQ1VSTE9QVF9GT0xMT1dMT0NBVElPTlxmUCBpcyB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuIEFkZGVkIGluIDcuMTUuMToKK1NldHRpbmcgdGhlIGxpbWl0IHRvIDAgd2lsbCBtYWtlIGxpYmN1cmwgcmVmdXNlIGFueSByZWRpcmVjdC4gU2V0IGl0IHRvIC0xIGZvcgorYW4gaW5maW5pdGUgbnVtYmVyIG9mIHJlZGlyZWN0cyAod2hpY2ggaXMgdGhlIGRlZmF1bHQpCisuSVAgQ1VSTE9QVF9QT1NUUkVESVIKK1Bhc3MgYSBiaXRtYXNrIHRvIGNvbnRyb2wgaG93IGxpYmN1cmwgYWN0cyBvbiByZWRpcmVjdHMgYWZ0ZXIgUE9TVHMgdGhhdCBnZXQgYQorMzAxIG9yIDMwMiByZXNwb25zZSBiYWNrLiAgQSBwYXJhbWV0ZXIgd2l0aCBiaXQgMCBzZXQgKHZhbHVlCitcZkJDVVJMX1JFRElSX1BPU1RfMzAxXGZQKSB0ZWxscyB0aGUgbGlicmFyeSB0byByZXNwZWN0IFJGQyAyNjE2LzEwLjMuMiBhbmQKK25vdCBjb252ZXJ0IFBPU1QgcmVxdWVzdHMgaW50byBHRVQgcmVxdWVzdHMgd2hlbiBmb2xsb3dpbmcgYSAzMDEKK3JlZGlyZWN0aW9uLiBTZXR0aW5nIGJpdCAxICh2YWx1ZSBDVVJMX1JFRElSX1BPU1RfMzAyKSBtYWtlcyBsaWJjdXJsIG1haW50YWluCit0aGUgcmVxdWVzdCBtZXRob2QgYWZ0ZXIgYSAzMDIgcmVkaXJlY3QuIENVUkxfUkVESVJfUE9TVF9BTEwgaXMgYSBjb252ZW5pZW5jZQorZGVmaW5lIHRoYXQgc2V0cyBib3RoIGJpdHMuCisKK1RoZSBub24tUkZDIGJlaGF2aW91ciBpcyB1YmlxdWl0b3VzIGluIHdlYiBicm93c2Vycywgc28gdGhlIGxpYnJhcnkgZG9lcyB0aGUKK2NvbnZlcnNpb24gYnkgZGVmYXVsdCB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4gSG93ZXZlciwgYSBzZXJ2ZXIgbWF5IHJlcXVpcmUgYQorUE9TVCB0byByZW1haW4gYSBQT1NUIGFmdGVyIHN1Y2ggYSByZWRpcmVjdGlvbi4gVGhpcyBvcHRpb24gaXMgbWVhbmluZ2Z1bCBvbmx5Cit3aGVuIHNldHRpbmcgXGZJQ1VSTE9QVF9GT0xMT1dMT0NBVElPTlxmUC4gIChBZGRlZCBpbiA3LjE3LjEpIChUaGlzIG9wdGlvbiB3YXMKK2tub3duIGFzIENVUkxPUFRfUE9TVDMwMSB1cCB0byA3LjE5LjAgYXMgaXQgb25seSBzdXBwb3J0ZWQgdGhlIDMwMSB3YXkgYmVmb3JlCit0aGVuKQorLklQIENVUkxPUFRfUFVUCitBIHBhcmFtZXRlciBzZXQgdG8gMSB0ZWxscyB0aGUgbGlicmFyeSB0byB1c2UgSFRUUCBQVVQgdG8gdHJhbnNmZXIgZGF0YS4gVGhlCitkYXRhIHNob3VsZCBiZSBzZXQgd2l0aCBcZklDVVJMT1BUX1JFQUREQVRBXGZQIGFuZCBcZklDVVJMT1BUX0lORklMRVNJWkVcZlAuCisKK1RoaXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHN0YXJ0aW5nIHdpdGggdmVyc2lvbiA3LjEyLjEgeW91IHNob3VsZCBpbnN0ZWFkCit1c2UgXGZJQ1VSTE9QVF9VUExPQURcZlAuCisuSVAgQ1VSTE9QVF9QT1NUCitBIHBhcmFtZXRlciBzZXQgdG8gMSB0ZWxscyB0aGUgbGlicmFyeSB0byBkbyBhIHJlZ3VsYXIgSFRUUCBwb3N0LiBUaGlzIHdpbGwKK2Fsc28gbWFrZSB0aGUgbGlicmFyeSB1c2UgYSAiQ29udGVudC1UeXBlOgorYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiBoZWFkZXIuIChUaGlzIGlzIGJ5IGZhciB0aGUgbW9zdCBjb21tb25seQordXNlZCBQT1NUIG1ldGhvZCkuCisKK1VzZSBvbmUgb2YgXGZJQ1VSTE9QVF9QT1NURklFTERTXGZQIG9yIFxmSUNVUkxPUFRfQ09QWVBPU1RGSUVMRFNcZlAgb3B0aW9ucyB0bworc3BlY2lmeSB3aGF0IGRhdGEgdG8gcG9zdCBhbmQgXGZJQ1VSTE9QVF9QT1NURklFTERTSVpFXGZQIG9yCitcZklDVVJMT1BUX1BPU1RGSUVMRFNJWkVfTEFSR0VcZlAgdG8gc2V0IHRoZSBkYXRhIHNpemUuCisKK09wdGlvbmFsbHksIHlvdSBjYW4gcHJvdmlkZSBkYXRhIHRvIFBPU1QgdXNpbmcgdGhlIFxmSUNVUkxPUFRfUkVBREZVTkNUSU9OXGZQCithbmQgXGZJQ1VSTE9QVF9SRUFEREFUQVxmUCBvcHRpb25zIGJ1dCB0aGVuIHlvdSBtdXN0IG1ha2Ugc3VyZSB0byBub3Qgc2V0CitcZklDVVJMT1BUX1BPU1RGSUVMRFNcZlAgdG8gYW55dGhpbmcgYnV0IE5VTEwuIFdoZW4gcHJvdmlkaW5nIGRhdGEgd2l0aCBhCitjYWxsYmFjaywgeW91IG11c3QgdHJhbnNtaXQgaXQgdXNpbmcgY2h1bmtlZCB0cmFuc2Zlci1lbmNvZGluZyBvciB5b3UgbXVzdCBzZXQKK3RoZSBzaXplIG9mIHRoZSBkYXRhIHdpdGggdGhlIFxmSUNVUkxPUFRfUE9TVEZJRUxEU0laRVxmUCBvcgorXGZJQ1VSTE9QVF9QT1NURklFTERTSVpFX0xBUkdFXGZQIG9wdGlvbi4gVG8gZW5hYmxlIGNodW5rZWQgZW5jb2RpbmcsIHlvdQorc2ltcGx5IHBhc3MgaW4gdGhlIGFwcHJvcHJpYXRlIFRyYW5zZmVyLUVuY29kaW5nIGhlYWRlciwgc2VlIHRoZQorcG9zdC1jYWxsYmFjay5jIGV4YW1wbGUuCisKK1lvdSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgUE9TVCBDb250ZW50LVR5cGU6IGhlYWRlciBieSBzZXR0aW5nIHlvdXIgb3duCit3aXRoIFxmSUNVUkxPUFRfSFRUUEhFQURFUlxmUC4KKworVXNpbmcgUE9TVCB3aXRoIEhUVFAgMS4xIGltcGxpZXMgdGhlIHVzZSBvZiBhICJFeHBlY3Q6IDEwMC1jb250aW51ZSIgaGVhZGVyLgorWW91IGNhbiBkaXNhYmxlIHRoaXMgaGVhZGVyIHdpdGggXGZJQ1VSTE9QVF9IVFRQSEVBREVSXGZQIGFzIHVzdWFsLgorCitJZiB5b3UgdXNlIFBPU1QgdG8gYSBIVFRQIDEuMSBzZXJ2ZXIsIHlvdSBjYW4gc2VuZCBkYXRhIHdpdGhvdXQga25vd2luZyB0aGUKK3NpemUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBQT1NUIGlmIHlvdSB1c2UgY2h1bmtlZCBlbmNvZGluZy4gWW91IGVuYWJsZSB0aGlzIGJ5CithZGRpbmcgYSBoZWFkZXIgbGlrZSAiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiIHdpdGgKK1xmSUNVUkxPUFRfSFRUUEhFQURFUlxmUC4gV2l0aCBIVFRQIDEuMCBvciB3aXRob3V0IGNodW5rZWQgdHJhbnNmZXIsIHlvdSBtdXN0CitzcGVjaWZ5IHRoZSBzaXplIGluIHRoZSByZXF1ZXN0LgorCitXaGVuIHNldHRpbmcgXGZJQ1VSTE9QVF9QT1NUXGZQIHRvIDEsIGl0IHdpbGwgYXV0b21hdGljYWxseSBzZXQKK1xmSUNVUkxPUFRfTk9CT0RZXGZQIHRvIDAgKHNpbmNlIDcuMTQuMSkuCisKK0lmIHlvdSBpc3N1ZSBhIFBPU1QgcmVxdWVzdCBhbmQgdGhlbiB3YW50IHRvIG1ha2UgYSBIRUFEIG9yIEdFVCB1c2luZyB0aGUgc2FtZQorcmUtdXNlZCBoYW5kbGUsIHlvdSBtdXN0IGV4cGxpY2l0bHkgc2V0IHRoZSBuZXcgcmVxdWVzdCB0eXBlIHVzaW5nCitcZklDVVJMT1BUX05PQk9EWVxmUCBvciBcZklDVVJMT1BUX0hUVFBHRVRcZlAgb3Igc2ltaWxhci4KKy5JUCBDVVJMT1BUX1BPU1RGSUVMRFMKK1Bhc3MgYSB2b2lkICogYXMgcGFyYW1ldGVyLCB3aGljaCBzaG91bGQgYmUgdGhlIGZ1bGwgZGF0YSB0byBwb3N0IGluIGEgSFRUUAorUE9TVCBvcGVyYXRpb24uIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBkYXRhIGlzIGZvcm1hdHRlZCB0aGUgd2F5IHlvdSB3YW50Cit0aGUgc2VydmVyIHRvIHJlY2VpdmUgaXQuIGxpYmN1cmwgd2lsbCBub3QgY29udmVydCBvciBlbmNvZGUgaXQgZm9yIHlvdS4gTW9zdAord2ViIHNlcnZlcnMgd2lsbCBhc3N1bWUgdGhpcyBkYXRhIHRvIGJlIHVybC1lbmNvZGVkLgorCitUaGUgcG9pbnRlZCBkYXRhIGFyZSBOT1QgY29waWVkIGJ5IHRoZSBsaWJyYXJ5OiBhcyBhIGNvbnNlcXVlbmNlLCB0aGV5IG11c3QKK2JlIHByZXNlcnZlZCBieSB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiB1bnRpbCB0aGUgdHJhbnNmZXIgZmluaXNoZXMuCisKK1RoaXMgUE9TVCBpcyBhIG5vcm1hbCBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQga2luZCAoYW5kIGxpYmN1cmwgd2lsbAorc2V0IHRoYXQgQ29udGVudC1UeXBlIGJ5IGRlZmF1bHQgd2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkKSwgd2hpY2ggaXMgdGhlIG1vc3QKK2NvbW1vbmx5IHVzZWQgb25lIGJ5IEhUTUwgZm9ybXMuIFNlZSBhbHNvIHRoZSBcZklDVVJMT1BUX1BPU1RcZlAuIFVzaW5nCitcZklDVVJMT1BUX1BPU1RGSUVMRFNcZlAgaW1wbGllcyBcZklDVVJMT1BUX1BPU1RcZlAuCisKK0lmIHlvdSB3YW50IHRvIGRvIGEgemVyby1ieXRlIFBPU1QsIHlvdSBuZWVkIHRvIHNldAorXGZJQ1VSTE9QVF9QT1NURklFTERTSVpFXGZQIGV4cGxpY2l0bHkgdG8gemVybywgYXMgc2ltcGx5IHNldHRpbmcKK1xmSUNVUkxPUFRfUE9TVEZJRUxEU1xmUCB0byBOVUxMIG9yICIiIGp1c3QgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIHNlbmRpbmcKK29mIHRoZSBzcGVjaWZpZWQgc3RyaW5nLiBsaWJjdXJsIHdpbGwgaW5zdGVhZCBhc3N1bWUgdGhhdCB5b3UnbGwgc2VuZCB0aGUgUE9TVAorZGF0YSB1c2luZyB0aGUgcmVhZCBjYWxsYmFjayEKKworVXNpbmcgUE9TVCB3aXRoIEhUVFAgMS4xIGltcGxpZXMgdGhlIHVzZSBvZiBhICJFeHBlY3Q6IDEwMC1jb250aW51ZSIgaGVhZGVyLgorWW91IGNhbiBkaXNhYmxlIHRoaXMgaGVhZGVyIHdpdGggXGZJQ1VSTE9QVF9IVFRQSEVBREVSXGZQIGFzIHVzdWFsLgorCitUbyBtYWtlIG11bHRpcGFydC9mb3JtZGF0YSBwb3N0cyAoYWthIFJGQzIzODgtcG9zdHMpLCBjaGVjayBvdXQgdGhlCitcZklDVVJMT1BUX0hUVFBQT1NUXGZQIG9wdGlvbi4KKy5JUCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUKK0lmIHlvdSB3YW50IHRvIHBvc3QgZGF0YSB0byB0aGUgc2VydmVyIHdpdGhvdXQgbGV0dGluZyBsaWJjdXJsIGRvIGEgc3RybGVuKCkKK3RvIG1lYXN1cmUgdGhlIGRhdGEgc2l6ZSwgdGhpcyBvcHRpb24gbXVzdCBiZSB1c2VkLiBXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQKK3lvdSBjYW4gcG9zdCBmdWxseSBiaW5hcnkgZGF0YSwgd2hpY2ggb3RoZXJ3aXNlIGlzIGxpa2VseSB0byBmYWlsLiBJZiB0aGlzCitzaXplIGlzIHNldCB0byAtMSwgdGhlIGxpYnJhcnkgd2lsbCB1c2Ugc3RybGVuKCkgdG8gZ2V0IHRoZSBzaXplLgorLklQIENVUkxPUFRfUE9TVEZJRUxEU0laRV9MQVJHRQorUGFzcyBhIGN1cmxfb2ZmX3QgYXMgcGFyYW1ldGVyLiBVc2UgdGhpcyB0byBzZXQgdGhlIHNpemUgb2YgdGhlCitcZklDVVJMT1BUX1BPU1RGSUVMRFNcZlAgZGF0YSB0byBwcmV2ZW50IGxpYmN1cmwgZnJvbSBkb2luZyBzdHJsZW4oKSBvbiB0aGUKK2RhdGEgdG8gZmlndXJlIG91dCB0aGUgc2l6ZS4gVGhpcyBpcyB0aGUgbGFyZ2UgZmlsZSB2ZXJzaW9uIG9mIHRoZQorXGZJQ1VSTE9QVF9QT1NURklFTERTSVpFXGZQIG9wdGlvbi4gKEFkZGVkIGluIDcuMTEuMSkKKy5JUCBDVVJMT1BUX0NPUFlQT1NURklFTERTCitQYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgd2hpY2ggc2hvdWxkIGJlIHRoZSBmdWxsIGRhdGEgdG8gcG9zdCBpbiBhIEhUVFAKK1BPU1Qgb3BlcmF0aW9uLiBJdCBiZWhhdmVzIGFzIHRoZSBcZklDVVJMT1BUX1BPU1RGSUVMRFNcZlAgb3B0aW9uLCBidXQgdGhlCitvcmlnaW5hbCBkYXRhIGFyZSBjb3BpZWQgYnkgdGhlIGxpYnJhcnksIGFsbG93aW5nIHRoZSBhcHBsaWNhdGlvbiB0byBvdmVyd3JpdGUKK3RoZSBvcmlnaW5hbCBkYXRhIGFmdGVyIHNldHRpbmcgdGhpcyBvcHRpb24uCisKK0JlY2F1c2UgZGF0YSBhcmUgY29waWVkLCBjYXJlIG11c3QgYmUgdGFrZW4gd2hlbiB1c2luZyB0aGlzIG9wdGlvbiBpbgorY29uanVuY3Rpb24gd2l0aCBcZklDVVJMT1BUX1BPU1RGSUVMRFNJWkVcZlAgb3IKK1xmSUNVUkxPUFRfUE9TVEZJRUxEU0laRV9MQVJHRVxmUDogSWYgdGhlIHNpemUgaGFzIG5vdCBiZWVuIHNldCBwcmlvciB0bworXGZJQ1VSTE9QVF9DT1BZUE9TVEZJRUxEU1xmUCwgdGhlIGRhdGEgYXJlIGFzc3VtZWQgdG8gYmUgYSBOVUwtdGVybWluYXRlZAorc3RyaW5nOyBlbHNlIHRoZSBzdG9yZWQgc2l6ZSBpbmZvcm1zIHRoZSBsaWJyYXJ5IGFib3V0IHRoZSBkYXRhIGJ5dGUgY291bnQgdG8KK2NvcHkuIEluIGFueSBjYXNlLCB0aGUgc2l6ZSBtdXN0IG5vdCBiZSBjaGFuZ2VkIGFmdGVyCitcZklDVVJMT1BUX0NPUFlQT1NURklFTERTXGZQLCB1bmxlc3MgYW5vdGhlciBcZklDVVJMT1BUX1BPU1RGSUVMRFNcZlAgb3IKK1xmSUNVUkxPUFRfQ09QWVBPU1RGSUVMRFNcZlAgb3B0aW9uIGlzIGlzc3VlZC4KKyhBZGRlZCBpbiA3LjE3LjEpCisuSVAgQ1VSTE9QVF9IVFRQUE9TVAorVGVsbHMgbGliY3VybCB5b3Ugd2FudCBhIG11bHRpcGFydC9mb3JtZGF0YSBIVFRQIFBPU1QgdG8gYmUgbWFkZSBhbmQgeW91CitpbnN0cnVjdCB3aGF0IGRhdGEgdG8gcGFzcyBvbiB0byB0aGUgc2VydmVyLiAgUGFzcyBhIHBvaW50ZXIgdG8gYSBsaW5rZWQgbGlzdAorb2YgY3VybF9odHRwcG9zdCBzdHJ1Y3RzIGFzIHBhcmFtZXRlci4gIFRoZSBlYXNpZXN0IHdheSB0byBjcmVhdGUgc3VjaCBhCitsaXN0LCBpcyB0byB1c2UgXGZJY3VybF9mb3JtYWRkKDMpXGZQIGFzIGRvY3VtZW50ZWQuIFRoZSBkYXRhIGluIHRoaXMgbGlzdAorbXVzdCByZW1haW4gaW50YWN0IHVudGlsIHlvdSBjbG9zZSB0aGlzIGN1cmwgaGFuZGxlIGFnYWluIHdpdGgKK1xmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQLgorCitVc2luZyBQT1NUIHdpdGggSFRUUCAxLjEgaW1wbGllcyB0aGUgdXNlIG9mIGEgIkV4cGVjdDogMTAwLWNvbnRpbnVlIiBoZWFkZXIuCitZb3UgY2FuIGRpc2FibGUgdGhpcyBoZWFkZXIgd2l0aCBcZklDVVJMT1BUX0hUVFBIRUFERVJcZlAgYXMgdXN1YWwuCisKK1doZW4gc2V0dGluZyBcZklDVVJMT1BUX0hUVFBQT1NUXGZQLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0CitcZklDVVJMT1BUX05PQk9EWVxmUCB0byAwIChzaW5jZSA3LjE0LjEpLgorLklQIENVUkxPUFRfUkVGRVJFUgorUGFzcyBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGFzIHBhcmFtZXRlci4gSXQgd2lsbCBiZSB1c2VkIHRvCitzZXQgdGhlIFJlZmVyZXI6IGhlYWRlciBpbiB0aGUgaHR0cCByZXF1ZXN0IHNlbnQgdG8gdGhlIHJlbW90ZSBzZXJ2ZXIuIFRoaXMKK2NhbiBiZSB1c2VkIHRvIGZvb2wgc2VydmVycyBvciBzY3JpcHRzLiBZb3UgY2FuIGFsc28gc2V0IGFueSBjdXN0b20gaGVhZGVyCit3aXRoIFxmSUNVUkxPUFRfSFRUUEhFQURFUlxmUC4KKy5JUCBDVVJMT1BUX1VTRVJBR0VOVAorUGFzcyBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGFzIHBhcmFtZXRlci4gSXQgd2lsbCBiZSB1c2VkIHRvCitzZXQgdGhlIFVzZXItQWdlbnQ6IGhlYWRlciBpbiB0aGUgaHR0cCByZXF1ZXN0IHNlbnQgdG8gdGhlIHJlbW90ZSBzZXJ2ZXIuIFRoaXMKK2NhbiBiZSB1c2VkIHRvIGZvb2wgc2VydmVycyBvciBzY3JpcHRzLiBZb3UgY2FuIGFsc28gc2V0IGFueSBjdXN0b20gaGVhZGVyCit3aXRoIFxmSUNVUkxPUFRfSFRUUEhFQURFUlxmUC4KKy5JUCBDVVJMT1BUX0hUVFBIRUFERVIKK1Bhc3MgYSBwb2ludGVyIHRvIGEgbGlua2VkIGxpc3Qgb2YgSFRUUCBoZWFkZXJzIHRvIHBhc3MgdG8gdGhlIHNlcnZlciBpbiB5b3VyCitIVFRQIHJlcXVlc3QuIFRoZSBsaW5rZWQgbGlzdCBzaG91bGQgYmUgYSBmdWxseSB2YWxpZCBsaXN0IG9mIFxmQnN0cnVjdAorY3VybF9zbGlzdFxmUCBzdHJ1Y3RzIHByb3Blcmx5IGZpbGxlZCBpbi4gVXNlIFxmSWN1cmxfc2xpc3RfYXBwZW5kKDMpXGZQIHRvCitjcmVhdGUgdGhlIGxpc3QgYW5kIFxmSWN1cmxfc2xpc3RfZnJlZV9hbGwoMylcZlAgdG8gY2xlYW4gdXAgYW4gZW50aXJlCitsaXN0LiBJZiB5b3UgYWRkIGEgaGVhZGVyIHRoYXQgaXMgb3RoZXJ3aXNlIGdlbmVyYXRlZCBhbmQgdXNlZCBieSBsaWJjdXJsCitpbnRlcm5hbGx5LCB5b3VyIGFkZGVkIG9uZSB3aWxsIGJlIHVzZWQgaW5zdGVhZC4gSWYgeW91IGFkZCBhIGhlYWRlciB3aXRoIG5vCitjb250ZW50IGFzIGluICdBY2NlcHQ6JyAobm8gZGF0YSBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29sb24pLCB0aGUKK2ludGVybmFsbHkgdXNlZCBoZWFkZXIgd2lsbCBnZXQgZGlzYWJsZWQuIFRodXMsIHVzaW5nIHRoaXMgb3B0aW9uIHlvdSBjYW4gYWRkCituZXcgaGVhZGVycywgcmVwbGFjZSBpbnRlcm5hbCBoZWFkZXJzIGFuZCByZW1vdmUgaW50ZXJuYWwgaGVhZGVycy4gVG8gYWRkIGEKK2hlYWRlciB3aXRoIG5vIGNvbnRlbnQsIG1ha2UgdGhlIGNvbnRlbnQgYmUgdHdvIHF1b3RlczogXCYiIi4gVGhlIGhlYWRlcnMKK2luY2x1ZGVkIGluIHRoZSBsaW5rZWQgbGlzdCBtdXN0IG5vdCBiZSBDUkxGLXRlcm1pbmF0ZWQsIGJlY2F1c2UgY3VybCBhZGRzCitDUkxGIGFmdGVyIGVhY2ggaGVhZGVyIGl0ZW0uIEZhaWx1cmUgdG8gY29tcGx5IHdpdGggdGhpcyB3aWxsIHJlc3VsdCBpbgorc3RyYW5nZSBidWdzIGJlY2F1c2UgdGhlIHNlcnZlciB3aWxsIG1vc3QgbGlrZWx5IGlnbm9yZSBwYXJ0IG9mIHRoZSBoZWFkZXJzCit5b3Ugc3BlY2lmaWVkLgorCitUaGUgZmlyc3QgbGluZSBpbiBhIHJlcXVlc3QgKGNvbnRhaW5pbmcgdGhlIG1ldGhvZCwgdXN1YWxseSBhIEdFVCBvciBQT1NUKSBpcworbm90IGEgaGVhZGVyIGFuZCBjYW5ub3QgYmUgcmVwbGFjZWQgdXNpbmcgdGhpcyBvcHRpb24uIE9ubHkgdGhlIGxpbmVzCitmb2xsb3dpbmcgdGhlIHJlcXVlc3QtbGluZSBhcmUgaGVhZGVycy4gQWRkaW5nIHRoaXMgbWV0aG9kIGxpbmUgaW4gdGhpcyBsaXN0CitvZiBoZWFkZXJzIHdpbGwgb25seSBjYXVzZSB5b3VyIHJlcXVlc3QgdG8gc2VuZCBhbiBpbnZhbGlkIGhlYWRlci4KKworUGFzcyBhIE5VTEwgdG8gdGhpcyB0byByZXNldCBiYWNrIHRvIG5vIGN1c3RvbSBoZWFkZXJzLgorCitUaGUgbW9zdCBjb21tb25seSByZXBsYWNlZCBoZWFkZXJzIGhhdmUgInNob3J0Y3V0cyIgaW4gdGhlIG9wdGlvbnMKK1xmSUNVUkxPUFRfQ09PS0lFXGZQLCBcZklDVVJMT1BUX1VTRVJBR0VOVFxmUCBhbmQgXGZJQ1VSTE9QVF9SRUZFUkVSXGZQLgorLklQIENVUkxPUFRfSFRUUDIwMEFMSUFTRVMKK1Bhc3MgYSBwb2ludGVyIHRvIGEgbGlua2VkIGxpc3Qgb2YgYWxpYXNlcyB0byBiZSB0cmVhdGVkIGFzIHZhbGlkIEhUVFAgMjAwCityZXNwb25zZXMuICBTb21lIHNlcnZlcnMgcmVzcG9uZCB3aXRoIGEgY3VzdG9tIGhlYWRlciByZXNwb25zZSBsaW5lLiAgRm9yCitleGFtcGxlLCBJY2VDYXN0IHNlcnZlcnMgcmVzcG9uZCB3aXRoICJJQ1kgMjAwIE9LIi4gIEJ5IGluY2x1ZGluZyB0aGlzIHN0cmluZworaW4geW91ciBsaXN0IG9mIGFsaWFzZXMsIHRoZSByZXNwb25zZSB3aWxsIGJlIHRyZWF0ZWQgYXMgYSB2YWxpZCBIVFRQIGhlYWRlcgorbGluZSBzdWNoIGFzICJIVFRQLzEuMCAyMDAgT0siLiAoQWRkZWQgaW4gNy4xMC4zKQorCitUaGUgbGlua2VkIGxpc3Qgc2hvdWxkIGJlIGEgZnVsbHkgdmFsaWQgbGlzdCBvZiBzdHJ1Y3QgY3VybF9zbGlzdCBzdHJ1Y3RzLCBhbmQKK2JlIHByb3Blcmx5IGZpbGxlZCBpbi4gIFVzZSBcZkljdXJsX3NsaXN0X2FwcGVuZCgzKVxmUCB0byBjcmVhdGUgdGhlIGxpc3QgYW5kCitcZkljdXJsX3NsaXN0X2ZyZWVfYWxsKDMpXGZQIHRvIGNsZWFuIHVwIGFuIGVudGlyZSBsaXN0LgorCitUaGUgYWxpYXMgaXRzZWxmIGlzIG5vdCBwYXJzZWQgZm9yIGFueSB2ZXJzaW9uIHN0cmluZ3MuIEJlZm9yZSBsaWJjdXJsIDcuMTYuMywKK0xpYmN1cmwgdXNlZCB0aGUgdmFsdWUgc2V0IGJ5IG9wdGlvbiBcZklDVVJMT1BUX0hUVFBfVkVSU0lPTlxmUCwgYnV0IHN0YXJ0aW5nCit3aXRoIDcuMTYuMyB0aGUgcHJvdG9jb2wgaXMgYXNzdW1lZCB0byBtYXRjaCBIVFRQIDEuMCB3aGVuIGFuIGFsaWFzIG1hdGNoZWQuCisuSVAgQ1VSTE9QVF9DT09LSUUKK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIEl0IHdpbGwgYmUgdXNlZCB0bworc2V0IGEgY29va2llIGluIHRoZSBodHRwIHJlcXVlc3QuIFRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyBzaG91bGQgYmUKK05BTUU9Q09OVEVOVFMsIHdoZXJlIE5BTUUgaXMgdGhlIGNvb2tpZSBuYW1lIGFuZCBDT05URU5UUyBpcyB3aGF0IHRoZSBjb29raWUKK3Nob3VsZCBjb250YWluLgorCitJZiB5b3UgbmVlZCB0byBzZXQgbXVsdGlwbGUgY29va2llcywgeW91IG5lZWQgdG8gc2V0IHRoZW0gYWxsIHVzaW5nIGEgc2luZ2xlCitvcHRpb24gYW5kIHRodXMgeW91IG5lZWQgdG8gY29uY2F0ZW5hdGUgdGhlbSBhbGwgaW4gb25lIHNpbmdsZSBzdHJpbmcuIFNldAorbXVsdGlwbGUgY29va2llcyBpbiBvbmUgc3RyaW5nIGxpa2UgdGhpczogIm5hbWUxPWNvbnRlbnQxOyBuYW1lMj1jb250ZW50MjsiCitldGMuCisKK1RoaXMgb3B0aW9uIHNldHMgdGhlIGNvb2tpZSBoZWFkZXIgZXhwbGljaXRseSBpbiB0aGUgb3V0Z29pbmcgcmVxdWVzdChzKS4gSWYKK211bHRpcGxlIHJlcXVlc3RzIGFyZSBkb25lIGR1ZSB0byBhdXRoZW50aWNhdGlvbiwgZm9sbG93ZWQgcmVkaXJlY3Rpb25zIG9yCitzaW1pbGFyLCB0aGV5IHdpbGwgYWxsIGdldCB0aGlzIGNvb2tpZSBwYXNzZWQgb24uCisKK1VzaW5nIHRoaXMgb3B0aW9uIG11bHRpcGxlIHRpbWVzIHdpbGwgb25seSBtYWtlIHRoZSBsYXRlc3Qgc3RyaW5nIG92ZXJyaWRlIHRoZQorcHJldmlvdXMgb25lcy4KKy5JUCBDVVJMT1BUX0NPT0tJRUZJTEUKK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIEl0IHNob3VsZCBjb250YWluIHRoZQorbmFtZSBvZiB5b3VyIGZpbGUgaG9sZGluZyBjb29raWUgZGF0YSB0byByZWFkLiBUaGUgY29va2llIGRhdGEgbWF5IGJlIGluCitOZXRzY2FwZSAvIE1vemlsbGEgY29va2llIGRhdGEgZm9ybWF0IG9yIGp1c3QgcmVndWxhciBIVFRQLXN0eWxlIGhlYWRlcnMKK2R1bXBlZCB0byBhIGZpbGUuCisKK0dpdmVuIGFuIGVtcHR5IG9yIG5vbi1leGlzdGluZyBmaWxlIG9yIGJ5IHBhc3NpbmcgdGhlIGVtcHR5IHN0cmluZyAoIiIpLCB0aGlzCitvcHRpb24gd2lsbCBlbmFibGUgY29va2llcyBmb3IgdGhpcyBjdXJsIGhhbmRsZSwgbWFraW5nIGl0IHVuZGVyc3RhbmQgYW5kCitwYXJzZSByZWNlaXZlZCBjb29raWVzIGFuZCB0aGVuIHVzZSBtYXRjaGluZyBjb29raWVzIGluIGZ1dHVyZSByZXF1ZXN0cy4KKworSWYgeW91IHVzZSB0aGlzIG9wdGlvbiBtdWx0aXBsZSB0aW1lcywgeW91IGp1c3QgYWRkIG1vcmUgZmlsZXMgdG8gcmVhZC4KK1N1YnNlcXVlbnQgZmlsZXMgd2lsbCBhZGQgbW9yZSBjb29raWVzLgorLklQIENVUkxPUFRfQ09PS0lFSkFSCitQYXNzIGEgZmlsZSBuYW1lIGFzIGNoYXIgKiwgemVybyB0ZXJtaW5hdGVkLiBUaGlzIHdpbGwgbWFrZSBsaWJjdXJsIHdyaXRlIGFsbAoraW50ZXJuYWxseSBrbm93biBjb29raWVzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSB3aGVuIFxmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQCitpcyBjYWxsZWQuIElmIG5vIGNvb2tpZXMgYXJlIGtub3duLCBubyBmaWxlIHdpbGwgYmUgY3JlYXRlZC4gU3BlY2lmeSAiLSIgdG8KK2luc3RlYWQgaGF2ZSB0aGUgY29va2llcyB3cml0dGVuIHRvIHN0ZG91dC4gVXNpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzCitjb29raWVzIGZvciB0aGlzIHNlc3Npb24sIHNvIGlmIHlvdSBmb3IgZXhhbXBsZSBmb2xsb3cgYSBsb2NhdGlvbiBpdCB3aWxsIG1ha2UKK21hdGNoaW5nIGNvb2tpZXMgZ2V0IHNlbnQgYWNjb3JkaW5nbHkuCisKK0lmIHRoZSBjb29raWUgamFyIGZpbGUgY2FuJ3QgYmUgY3JlYXRlZCBvciB3cml0dGVuIHRvICh3aGVuIHRoZQorXGZJY3VybF9lYXN5X2NsZWFudXAoMylcZlAgaXMgY2FsbGVkKSwgbGliY3VybCB3aWxsIG5vdCBhbmQgY2Fubm90IHJlcG9ydCBhbgorZXJyb3IgZm9yIHRoaXMuIFVzaW5nIFxmSUNVUkxPUFRfVkVSQk9TRVxmUCBvciBcZklDVVJMT1BUX0RFQlVHRlVOQ1RJT05cZlAKK3dpbGwgZ2V0IGEgd2FybmluZyB0byBkaXNwbGF5LCBidXQgdGhhdCBpcyB0aGUgb25seSB2aXNpYmxlIGZlZWRiYWNrIHlvdSBnZXQKK2Fib3V0IHRoaXMgcG9zc2libHkgbGV0aGFsIHNpdHVhdGlvbi4KKy5JUCBDVVJMT1BUX0NPT0tJRVNFU1NJT04KK1Bhc3MgYSBsb25nIHNldCB0byAxIHRvIG1hcmsgdGhpcyBhcyBhIG5ldyBjb29raWUgInNlc3Npb24iLiBJdCB3aWxsIGZvcmNlCitsaWJjdXJsIHRvIGlnbm9yZSBhbGwgY29va2llcyBpdCBpcyBhYm91dCB0byBsb2FkIHRoYXQgYXJlICJzZXNzaW9uIGNvb2tpZXMiCitmcm9tIHRoZSBwcmV2aW91cyBzZXNzaW9uLiBCeSBkZWZhdWx0LCBsaWJjdXJsIGFsd2F5cyBzdG9yZXMgYW5kIGxvYWRzIGFsbAorY29va2llcywgaW5kZXBlbmRlbnQgaWYgdGhleSBhcmUgc2Vzc2lvbiBjb29raWVzIG9yIG5vdC4gU2Vzc2lvbiBjb29raWVzIGFyZQorY29va2llcyB3aXRob3V0IGV4cGlyeSBkYXRlIGFuZCB0aGV5IGFyZSBtZWFudCB0byBiZSBhbGl2ZSBhbmQgZXhpc3RpbmcgZm9yCit0aGlzICJzZXNzaW9uIiBvbmx5LgorLklQIENVUkxPUFRfQ09PS0lFTElTVAorUGFzcyBhIGNoYXIgKiB0byBhIGNvb2tpZSBzdHJpbmcuIENvb2tpZSBjYW4gYmUgZWl0aGVyIGluIE5ldHNjYXBlIC8gTW96aWxsYQorZm9ybWF0IG9yIGp1c3QgcmVndWxhciBIVFRQLXN0eWxlIGhlYWRlciAoU2V0LUNvb2tpZTogLi4uKSBmb3JtYXQuIElmIGNVUkwKK2Nvb2tpZSBlbmdpbmUgd2FzIG5vdCBlbmFibGVkIGl0IHdpbGwgZW5hYmxlIGl0cyBjb29raWUgZW5naW5lLiAgUGFzc2luZyBhCittYWdpYyBzdHJpbmcgXCYiQUxMIiB3aWxsIGVyYXNlIGFsbCBjb29raWVzIGtub3duIGJ5IGNVUkwuIChBZGRlZCBpbiA3LjE0LjEpCitQYXNzaW5nIHRoZSBzcGVjaWFsIHN0cmluZyBcJiJTRVNTIiB3aWxsIG9ubHkgZXJhc2UgYWxsIHNlc3Npb24gY29va2llcyBrbm93bgorYnkgY1VSTC4gKEFkZGVkIGluIDcuMTUuNCkgUGFzc2luZyB0aGUgc3BlY2lhbCBzdHJpbmcgXCYiRkxVU0giIHdpbGwgd3JpdGUKK2FsbCBjb29raWVzIGtub3duIGJ5IGNVUkwgdG8gdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IFxmSUNVUkxPUFRfQ09PS0lFSkFSXGZQLgorKEFkZGVkIGluIDcuMTcuMSkKKy5JUCBDVVJMT1BUX0hUVFBHRVQKK1Bhc3MgYSBsb25nLiBJZiB0aGUgbG9uZyBpcyAxLCB0aGlzIGZvcmNlcyB0aGUgSFRUUCByZXF1ZXN0IHRvIGdldCBiYWNrCit0byBHRVQuIFVzYWJsZSBpZiBhIFBPU1QsIEhFQUQsIFBVVCwgb3IgYSBjdXN0b20gcmVxdWVzdCBoYXMgYmVlbiB1c2VkCitwcmV2aW91c2x5IHVzaW5nIHRoZSBzYW1lIGN1cmwgaGFuZGxlLgorCitXaGVuIHNldHRpbmcgXGZJQ1VSTE9QVF9IVFRQR0VUXGZQIHRvIDEsIGl0IHdpbGwgYXV0b21hdGljYWxseSBzZXQKK1xmSUNVUkxPUFRfTk9CT0RZXGZQIHRvIDAgKHNpbmNlIDcuMTQuMSkuCisuSVAgQ1VSTE9QVF9IVFRQX1ZFUlNJT04KK1Bhc3MgYSBsb25nLCBzZXQgdG8gb25lIG9mIHRoZSB2YWx1ZXMgZGVzY3JpYmVkIGJlbG93LiBUaGV5IGZvcmNlIGxpYmN1cmwgdG8KK3VzZSB0aGUgc3BlY2lmaWMgSFRUUCB2ZXJzaW9ucy4gVGhpcyBpcyBub3Qgc2Vuc2libGUgdG8gZG8gdW5sZXNzIHlvdSBoYXZlIGEKK2dvb2QgcmVhc29uLgorLlJTCisuSVAgQ1VSTF9IVFRQX1ZFUlNJT05fTk9ORQorV2UgZG9uJ3QgY2FyZSBhYm91dCB3aGF0IHZlcnNpb24gdGhlIGxpYnJhcnkgdXNlcy4gbGliY3VybCB3aWxsIHVzZSB3aGF0ZXZlcgoraXQgdGhpbmtzIGZpdC4KKy5JUCBDVVJMX0hUVFBfVkVSU0lPTl8xXzAKK0VuZm9yY2UgSFRUUCAxLjAgcmVxdWVzdHMuCisuSVAgQ1VSTF9IVFRQX1ZFUlNJT05fMV8xCitFbmZvcmNlIEhUVFAgMS4xIHJlcXVlc3RzLgorLlJFCisuSVAgQ1VSTE9QVF9JR05PUkVfQ09OVEVOVF9MRU5HVEgKK0lnbm9yZSB0aGUgQ29udGVudC1MZW5ndGggaGVhZGVyLiBUaGlzIGlzIHVzZWZ1bCBmb3IgQXBhY2hlIDEueCAoYW5kIHNpbWlsYXIKK3NlcnZlcnMpIHdoaWNoIHdpbGwgcmVwb3J0IGluY29ycmVjdCBjb250ZW50IGxlbmd0aCBmb3IgZmlsZXMgb3ZlciAyCitnaWdhYnl0ZXMuIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQsIGN1cmwgd2lsbCBub3QgYmUgYWJsZSB0byBhY2N1cmF0ZWx5IHJlcG9ydAorcHJvZ3Jlc3MsIGFuZCB3aWxsIHNpbXBseSBzdG9wIHRoZSBkb3dubG9hZCB3aGVuIHRoZSBzZXJ2ZXIgZW5kcyB0aGUKK2Nvbm5lY3Rpb24uIChhZGRlZCBpbiA3LjE0LjEpCisuSVAgQ1VSTE9QVF9IVFRQX0NPTlRFTlRfREVDT0RJTkcKK1Bhc3MgYSBsb25nIHRvIHRlbGwgbGliY3VybCBob3cgdG8gYWN0IG9uIGNvbnRlbnQgZGVjb2RpbmcuIElmIHNldCB0byB6ZXJvLAorY29udGVudCBkZWNvZGluZyB3aWxsIGJlIGRpc2FibGVkLiBJZiBzZXQgdG8gMSBpdCBpcyBlbmFibGVkLiBMaWJjdXJsIGhhcyBubworZGVmYXVsdCBjb250ZW50IGRlY29kaW5nIGJ1dCByZXF1aXJlcyB5b3UgdG8gdXNlIFxmSUNVUkxPUFRfRU5DT0RJTkdcZlAgZm9yCit0aGF0LiAoYWRkZWQgaW4gNy4xNi4yKQorLklQIENVUkxPUFRfSFRUUF9UUkFOU0ZFUl9ERUNPRElORworUGFzcyBhIGxvbmcgdG8gdGVsbCBsaWJjdXJsIGhvdyB0byBhY3Qgb24gdHJhbnNmZXIgZGVjb2RpbmcuIElmIHNldCB0byB6ZXJvLAordHJhbnNmZXIgZGVjb2Rpbmcgd2lsbCBiZSBkaXNhYmxlZCwgaWYgc2V0IHRvIDEgaXQgaXMgZW5hYmxlZAorKGRlZmF1bHQpLiBsaWJjdXJsIGRvZXMgY2h1bmtlZCB0cmFuc2ZlciBkZWNvZGluZyBieSBkZWZhdWx0IHVubGVzcyB0aGlzCitvcHRpb24gaXMgc2V0IHRvIHplcm8uIChhZGRlZCBpbiA3LjE2LjIpCisuU0ggU01UUCBPUFRJT05TCisuSVAgQ1VSTE9QVF9NQUlMX0ZST00KK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIFRoaXMgc2hvdWxkIGJlIHVzZWQKK3RvIHNwZWNpZnkgdGhlIHNlbmRlcidzIGVtYWlsIGFkZHJlc3Mgd2hlbiBzZW5kaW5nIFNNVFAgbWFpbCB3aXRoIGxpYmN1cmwuCisKK0FuIG9yaWdpbmF0b3IgZW1haWwgYWRkcmVzcyBzaG91bGQgYmUgc3BlY2lmaWVkIHdpdGggYW5nbGVkIGJyYWNrZXRzICg8PikKK2Fyb3VuZCBpdCwgd2hpY2ggaWYgbm90IHNwZWNpZmllZCwgd2lsbCBiZSBhZGRlZCBieSBsaWJjdXJsIGZyb20gdmVyc2lvbgorNy4yMS40IG9ud2FyZHMuIEZhaWxpbmcgdG8gcHJvdmlkZSBzdWNoIGJyYWNrZXRzIG1heSBjYXVzZSB0aGUgc2VydmVyIHRvCityZWplY3QgdGhlIGVtYWlsLgorCitJZiB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkIHRoZW4gYW4gZW1wdHkgYWRkcmVzcyB3aWxsIGJlIHNlbnQgdG8gdGhlCittYWlsIHNlcnZlciB3aGljaCBtYXkgb3IgbWF5IG5vdCBjYXVzZSB0aGUgZW1haWwgdG8gYmUgcmVqZWN0ZWQuCisKKyhBZGRlZCBpbiA3LjIwLjApCisuSVAgQ1VSTE9QVF9NQUlMX1JDUFQKK1Bhc3MgYSBwb2ludGVyIHRvIGEgbGlua2VkIGxpc3Qgb2YgcmVjaXBpZW50cyB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIgaW4geW91cgorU01UUCBtYWlsIHJlcXVlc3QuIFRoZSBsaW5rZWQgbGlzdCBzaG91bGQgYmUgYSBmdWxseSB2YWxpZCBsaXN0IG9mIFxmQnN0cnVjdAorY3VybF9zbGlzdFxmUCBzdHJ1Y3RzIHByb3Blcmx5IGZpbGxlZCBpbi4gVXNlIFxmSWN1cmxfc2xpc3RfYXBwZW5kKDMpXGZQIHRvCitjcmVhdGUgdGhlIGxpc3QgYW5kIFxmSWN1cmxfc2xpc3RfZnJlZV9hbGwoMylcZlAgdG8gY2xlYW4gdXAgYW4gZW50aXJlIGxpc3QuCisKK0VhY2ggcmVjaXBpZW50IHNob3VsZCBiZSBzcGVjaWZpZWQgd2l0aGluIGEgcGFpciBvZiBhbmdsZWQgYnJhY2tldHMgKDw+KSwKK2hvd2V2ZXIsIHNob3VsZCB5b3Ugbm90IHVzZSBhbiBhbmdsZWQgYnJhY2tldCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGxpYmN1cmwKK3dpbGwgYXNzdW1lIHlvdSBwcm92aWRlZCBhIHNpbmdsZSBlbWFpbCBhZGRyZXNzIGFuZCBlbmNsb3NlIHRoYXQgYWRkcmVzcword2l0aGluIGJyYWNrZXRzIGZvciB5b3UuCisKKyhBZGRlZCBpbiA3LjIwLjApCisuSVAgQ1VSTE9QVF9NQUlMX0FVVEgKK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIFRoaXMgd2lsbCBiZSB1c2VkCit0byBzcGVjaWZ5IHRoZSBhdXRoZW50aWNhdGlvbiBhZGRyZXNzIChpZGVudGl0eSkgb2YgYSBzdWJtaXR0ZWQgbWVzc2FnZSB0aGF0CitpcyBiZWluZyByZWxheWVkIHRvIGFub3RoZXIgc2VydmVyLgorCitUaGlzIG9wdGlvbmFsIHBhcmFtZXRlciBhbGxvd3MgY28tb3BlcmF0aW5nIGFnZW50cyBpbiBhIHRydXN0ZWQgZW52aXJvbm1lbnQgdG8KK2NvbW11bmljYXRlIHRoZSBhdXRoZW50aWNhdGlvbiBvZiBpbmRpdmlkdWFsIG1lc3NhZ2VzIGFuZCBzaG91bGQgb25seSBiZSB1c2VkCitieSB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbSwgdXNpbmcgbGliY3VybCwgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGl0c2VsZiBhCittYWlsIHNlcnZlciBhY3RpbmcgaW4gc3VjaCBhbiBlbnZpcm9ubWVudC4gSWYgdGhlIGFwcGxpY2F0aW9uIGlzIG9wZXJhdGluZyBhcworc3VjaCBhbmQgdGhlIEFVVEggYWRkcmVzcyBpcyBub3Qga25vd24gb3IgaXMgaW52YWxpZCwgdGhlbiBhbiBlbXB0eSBzdHJpbmcKK3Nob3VsZCBiZSB1c2VkIGZvciB0aGlzIHBhcmFtZXRlci4KKworVW5saWtlIENVUkxPUFRfTUFJTF9GUk9NIGFuZCBDVVJMT1BUX01BSUxfUkNQVCwgdGhlIGFkZHJlc3Mgc2hvdWxkIG5vdCBiZQorc3BlY2lmaWVkIHdpdGhpbiBhIHBhaXIgb2YgYW5nbGVkIGJyYWNrZXRzICg8PikuIEhvd2V2ZXIsIGlmIGFuIGVtcHR5IHN0cmluZworaXMgdXNlZCB0aGVuIGEgcGFpciBvZiBicmFja2V0cyB3aWxsIGJlIHNlbnQgYnkgbGliY3VybCBhcyByZXF1aXJlZCBieQorUkZDLTI1NTQuCisKKyhBZGRlZCBpbiA3LjI0LjApCisuU0ggVEZUUCBPUFRJT05TCisuSVAgQ1VSTE9QVF9URlRQX0JMS1NJWkUKK1NwZWNpZnkgYmxvY2sgc2l6ZSB0byB1c2UgZm9yIFRGVFAgZGF0YSB0cmFuc21pc3Npb24uIFZhbGlkIHJhbmdlIGFzIHBlciBSRkMKKzIzNDggaXMgOC02NTQ2NCBieXRlcy4gVGhlIGRlZmF1bHQgb2YgNTEyIGJ5dGVzIHdpbGwgYmUgdXNlZCBpZiB0aGlzIG9wdGlvbiBpcworbm90IHNwZWNpZmllZC4gVGhlIHNwZWNpZmllZCBibG9jayBzaXplIHdpbGwgb25seSBiZSB1c2VkIHBlbmRpbmcgc3VwcG9ydCBieQordGhlIHJlbW90ZSBzZXJ2ZXIuIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIGFuIG9wdGlvbiBhY2tub3dsZWRnZW1lbnQgb3IKK3JldHVybnMgYW4gb3B0aW9uIGFja25vd2xlZGdlbWVudCB3aXRoIG5vIGJsa3NpemUsIHRoZSBkZWZhdWx0IG9mIDUxMiBieXRlcword2lsbCBiZSB1c2VkLiAoYWRkZWQgaW4gNy4xOS40KQorLlNIIEZUUCBPUFRJT05TCisuSVAgQ1VSTE9QVF9GVFBQT1JUCitQYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgYXMgcGFyYW1ldGVyLiBJdCB3aWxsIGJlIHVzZWQgdG8KK2dldCB0aGUgSVAgYWRkcmVzcyB0byB1c2UgZm9yIHRoZSBGVFAgUE9SVCBpbnN0cnVjdGlvbi4gVGhlIFBPUlQgaW5zdHJ1Y3Rpb24KK3RlbGxzIHRoZSByZW1vdGUgc2VydmVyIHRvIGNvbm5lY3QgdG8gb3VyIHNwZWNpZmllZCBJUCBhZGRyZXNzLiBUaGUgc3RyaW5nIG1heQorYmUgYSBwbGFpbiBJUCBhZGRyZXNzLCBhIGhvc3QgbmFtZSwgYSBuZXR3b3JrIGludGVyZmFjZSBuYW1lICh1bmRlciBVbml4KSBvcgoranVzdCBhICctJyBzeW1ib2wgdG8gbGV0IHRoZSBsaWJyYXJ5IHVzZSB5b3VyIHN5c3RlbSdzIGRlZmF1bHQgSVAKK2FkZHJlc3MuIERlZmF1bHQgRlRQIG9wZXJhdGlvbnMgYXJlIHBhc3NpdmUsIGFuZCB0aHVzIHdvbid0IHVzZSBQT1JULgorCitUaGUgYWRkcmVzcyBjYW4gYmUgZm9sbG93ZWQgYnkgYSAnOicgdG8gc3BlY2lmeSBhIHBvcnQsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkKK2EgJy0nIHRvIHNwZWNpZnkgYSBwb3J0IHJhbmdlLiAgSWYgdGhlIHBvcnQgc3BlY2lmaWVkIGlzIDAsIHRoZSBvcGVyYXRpbmcKK3N5c3RlbSB3aWxsIHBpY2sgYSBmcmVlIHBvcnQuICBJZiBhIHJhbmdlIGlzIHByb3ZpZGVkIGFuZCBhbGwgcG9ydHMgaW4gdGhlCityYW5nZSBhcmUgbm90IGF2YWlsYWJsZSwgbGliY3VybCB3aWxsIHJlcG9ydCBDVVJMRV9GVFBfUE9SVF9GQUlMRUQgZm9yIHRoZQoraGFuZGxlLiAgSW52YWxpZCBwb3J0L3JhbmdlIHNldHRpbmdzIGFyZSBpZ25vcmVkLiAgSVB2NiBhZGRyZXNzZXMgZm9sbG93ZWQgYnkKK2EgcG9ydCBvciBwb3J0cmFuZ2UgaGF2ZSB0byBiZSBpbiBicmFja2V0cy4gIElQdjYgYWRkcmVzc2VzIHdpdGhvdXQgcG9ydC9yYW5nZQorc3BlY2lmaWVyIGNhbiBiZSBpbiBicmFja2V0cy4gIChhZGRlZCBpbiA3LjE5LjUpCisKK0V4YW1wbGVzIHdpdGggc3BlY2lmaWVkIHBvcnRzOgorCisubmYKKyAgZXRoMDowCisgIDE5Mi4xNjguMS4yOjMyMDAwLTMzMDAwCisgIGN1cmwuc2U6MzIxMjMKKyAgWzo6MV06MTIzNC00NTY3CisuZmkKKworWW91IGRpc2FibGUgUE9SVCBhZ2FpbiBhbmQgZ28gYmFjayB0byB1c2luZyB0aGUgcGFzc2l2ZSB2ZXJzaW9uIGJ5IHNldHRpbmcKK3RoaXMgb3B0aW9uIHRvIE5VTEwuCisuSVAgQ1VSTE9QVF9RVU9URQorUGFzcyBhIHBvaW50ZXIgdG8gYSBsaW5rZWQgbGlzdCBvZiBGVFAgb3IgU0ZUUCBjb21tYW5kcyB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIKK3ByaW9yIHRvIHlvdXIgRlRQIHJlcXVlc3QuIFRoaXMgd2lsbCBiZSBkb25lIGJlZm9yZSBhbnkgb3RoZXIgY29tbWFuZHMgYXJlCitpc3N1ZWQgKGV2ZW4gYmVmb3JlIHRoZSBDV0QgY29tbWFuZCBmb3IgRlRQKS4gVGhlIGxpbmtlZCBsaXN0IHNob3VsZCBiZSBhCitmdWxseSB2YWxpZCBsaXN0IG9mICdzdHJ1Y3QgY3VybF9zbGlzdCcgc3RydWN0cyBwcm9wZXJseSBmaWxsZWQgaW4gd2l0aCB0ZXh0CitzdHJpbmdzLiBVc2UgXGZJY3VybF9zbGlzdF9hcHBlbmQoMylcZlAgdG8gYXBwZW5kIHN0cmluZ3MgKGNvbW1hbmRzKSB0byB0aGUKK2xpc3QsIGFuZCBjbGVhciB0aGUgZW50aXJlIGxpc3QgYWZ0ZXJ3YXJkcyB3aXRoCitcZkljdXJsX3NsaXN0X2ZyZWVfYWxsKDMpXGZQLiBEaXNhYmxlIHRoaXMgb3BlcmF0aW9uIGFnYWluIGJ5IHNldHRpbmcgYSBOVUxMCit0byB0aGlzIG9wdGlvbi4gV2hlbiBzcGVha2luZyB0byBhIEZUUCAob3IgU0ZUUCBzaW5jZSA3LjI0LjApIHNlcnZlciwgcHJlZml4Cit0aGUgY29tbWFuZCB3aXRoIGFuIGFzdGVyaXNrICgqKSB0byBtYWtlIGxpYmN1cmwgY29udGludWUgZXZlbiBpZiB0aGUgY29tbWFuZAorZmFpbHMgYXMgYnkgZGVmYXVsdCBsaWJjdXJsIHdpbGwgc3RvcCBhdCBmaXJzdCBmYWlsdXJlLgorCitUaGUgc2V0IG9mIHZhbGlkIEZUUCBjb21tYW5kcyBkZXBlbmRzIG9uIHRoZSBzZXJ2ZXIgKHNlZSBSRkM5NTkgZm9yIGEgbGlzdCBvZgorbWFuZGF0b3J5IGNvbW1hbmRzKS4KKworVGhlIHZhbGlkIFNGVFAgY29tbWFuZHMgYXJlOiBjaGdycCwgY2htb2QsIGNob3duLCBsbiwgbWtkaXIsIHB3ZCwgcmVuYW1lLCBybSwKK3JtZGlyLCBzeW1saW5rIChzZWUKKy5CUiBjdXJsICgxKSkKKyhTRlRQIHN1cHBvcnQgYWRkZWQgaW4gNy4xNi4zKQorLklQIENVUkxPUFRfUE9TVFFVT1RFCitQYXNzIGEgcG9pbnRlciB0byBhIGxpbmtlZCBsaXN0IG9mIEZUUCBvciBTRlRQIGNvbW1hbmRzIHRvIHBhc3MgdG8gdGhlIHNlcnZlcgorYWZ0ZXIgeW91ciBGVFAgdHJhbnNmZXIgcmVxdWVzdC4gVGhlIGNvbW1hbmRzIHdpbGwgb25seSBiZSBydW4gaWYgbm8gZXJyb3IKK29jY3VycmVkLiBUaGUgbGlua2VkIGxpc3Qgc2hvdWxkIGJlIGEgZnVsbHkgdmFsaWQgbGlzdCBvZiBzdHJ1Y3QgY3VybF9zbGlzdAorc3RydWN0cyBwcm9wZXJseSBmaWxsZWQgaW4gYXMgZGVzY3JpYmVkIGZvciBcZklDVVJMT1BUX1FVT1RFXGZQLiBEaXNhYmxlIHRoaXMKK29wZXJhdGlvbiBhZ2FpbiBieSBzZXR0aW5nIGEgTlVMTCB0byB0aGlzIG9wdGlvbi4KKy5JUCBDVVJMT1BUX1BSRVFVT1RFCitQYXNzIGEgcG9pbnRlciB0byBhIGxpbmtlZCBsaXN0IG9mIEZUUCBjb21tYW5kcyB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIKK3RoZSB0cmFuc2ZlciB0eXBlIGlzIHNldC4gVGhlIGxpbmtlZCBsaXN0IHNob3VsZCBiZSBhIGZ1bGx5IHZhbGlkIGxpc3Qgb2YKK3N0cnVjdCBjdXJsX3NsaXN0IHN0cnVjdHMgcHJvcGVybHkgZmlsbGVkIGluIGFzIGRlc2NyaWJlZCBmb3IKK1xmSUNVUkxPUFRfUVVPVEVcZlAuIERpc2FibGUgdGhpcyBvcGVyYXRpb24gYWdhaW4gYnkgc2V0dGluZyBhIE5VTEwgdG8gdGhpcworb3B0aW9uLiBCZWZvcmUgdmVyc2lvbiA3LjE2LjAsIGlmIHlvdSBhbHNvIHNldCBcZklDVVJMT1BUX05PQk9EWVxmUCB0byAxLCB0aGlzCitvcHRpb24gZGlkbid0IHdvcmsuCisuSVAgQ1VSTE9QVF9ESVJMSVNUT05MWQorQSBwYXJhbWV0ZXIgc2V0IHRvIDEgdGVsbHMgdGhlIGxpYnJhcnkgdG8ganVzdCBsaXN0IHRoZSBuYW1lcyBvZiBmaWxlcyBpbiBhCitkaXJlY3RvcnksIGluc3RlYWQgb2YgZG9pbmcgYSBmdWxsIGRpcmVjdG9yeSBsaXN0aW5nIHRoYXQgd291bGQgaW5jbHVkZSBmaWxlCitzaXplcywgZGF0ZXMgZXRjLiBUaGlzIHdvcmtzIGZvciBGVFAgYW5kIFNGVFAgVVJMcy4KKworVGhpcyBjYXVzZXMgYW4gRlRQIE5MU1QgY29tbWFuZCB0byBiZSBzZW50IG9uIGFuIEZUUCBzZXJ2ZXIuICBCZXdhcmUgdGhhdCBzb21lCitGVFAgc2VydmVycyBsaXN0IG9ubHkgZmlsZXMgaW4gdGhlaXIgcmVzcG9uc2UgdG8gTkxTVDsgdGhleSBtaWdodCBub3QgaW5jbHVkZQorc3ViZGlyZWN0b3JpZXMgYW5kIHN5bWJvbGljIGxpbmtzLgorCitTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIDEgYWxzbyBpbXBsaWVzIGEgZGlyZWN0b3J5IGxpc3RpbmcgZXZlbiBpZiB0aGUgVVJMCitkb2Vzbid0IGVuZCB3aXRoIGEgc2xhc2gsIHdoaWNoIG90aGVyd2lzZSBpcyBuZWNlc3NhcnkuCisKK0RvIE5PVCB1c2UgdGhpcyBvcHRpb24gaWYgeW91IGFsc28gdXNlIFxmSUNVUkxPUFRfV0lMRENBUkRNQVRDSFxmUCBhcyBpdCB3aWxsCitlZmZlY3RpdmVseSBicmVhayB0aGF0IGZlYXR1cmUgdGhlbi4KKworKFRoaXMgb3B0aW9uIHdhcyBrbm93biBhcyBDVVJMT1BUX0ZUUExJU1RPTkxZIHVwIHRvIDcuMTYuNCkKKy5JUCBDVVJMT1BUX0FQUEVORAorQSBwYXJhbWV0ZXIgc2V0IHRvIDEgdGVsbHMgdGhlIGxpYnJhcnkgdG8gYXBwZW5kIHRvIHRoZSByZW1vdGUgZmlsZSBpbnN0ZWFkIG9mCitvdmVyd3JpdGUgaXQuIFRoaXMgaXMgb25seSB1c2VmdWwgd2hlbiB1cGxvYWRpbmcgdG8gYW4gRlRQIHNpdGUuCisKKyhUaGlzIG9wdGlvbiB3YXMga25vd24gYXMgQ1VSTE9QVF9GVFBBUFBFTkQgdXAgdG8gNy4xNi40KQorLklQIENVUkxPUFRfRlRQX1VTRV9FUFJUCitQYXNzIGEgbG9uZy4gSWYgdGhlIHZhbHVlIGlzIDEsIGl0IHRlbGxzIGN1cmwgdG8gdXNlIHRoZSBFUFJUIChhbmQKK0xQUlQpIGNvbW1hbmQgd2hlbiBkb2luZyBhY3RpdmUgRlRQIGRvd25sb2FkcyAod2hpY2ggaXMgZW5hYmxlZCBieQorXGZJQ1VSTE9QVF9GVFBQT1JUXGZQKS4gVXNpbmcgRVBSVCBtZWFucyB0aGF0IGl0IHdpbGwgZmlyc3QgYXR0ZW1wdCB0byB1c2UKK0VQUlQgYW5kIHRoZW4gTFBSVCBiZWZvcmUgdXNpbmcgUE9SVCwgYnV0IGlmIHlvdSBwYXNzIHplcm8gdG8gdGhpcworb3B0aW9uLCBpdCB3aWxsIG5vdCB0cnkgdXNpbmcgRVBSVCBvciBMUFJULCBvbmx5IHBsYWluIFBPUlQuIChBZGRlZCBpbiA3LjEwLjUpCisKK0lmIHRoZSBzZXJ2ZXIgaXMgYW4gSVB2NiBob3N0LCB0aGlzIG9wdGlvbiB3aWxsIGhhdmUgbm8gZWZmZWN0IGFzIG9mIDcuMTIuMy4KKy5JUCBDVVJMT1BUX0ZUUF9VU0VfRVBTVgorUGFzcyBhIGxvbmcuIElmIHRoZSB2YWx1ZSBpcyAxLCBpdCB0ZWxscyBjdXJsIHRvIHVzZSB0aGUgRVBTViBjb21tYW5kCit3aGVuIGRvaW5nIHBhc3NpdmUgRlRQIGRvd25sb2FkcyAod2hpY2ggaXQgYWx3YXlzIGRvZXMgYnkgZGVmYXVsdCkuIFVzaW5nIEVQU1YKK21lYW5zIHRoYXQgaXQgd2lsbCBmaXJzdCBhdHRlbXB0IHRvIHVzZSBFUFNWIGJlZm9yZSB1c2luZyBQQVNWLCBidXQgaWYgeW91CitwYXNzIHplcm8gdG8gdGhpcyBvcHRpb24sIGl0IHdpbGwgbm90IHRyeSB1c2luZyBFUFNWLCBvbmx5IHBsYWluIFBBU1YuCisKK0lmIHRoZSBzZXJ2ZXIgaXMgYW4gSVB2NiBob3N0LCB0aGlzIG9wdGlvbiB3aWxsIGhhdmUgbm8gZWZmZWN0IGFzIG9mIDcuMTIuMy4KKy5JUCBDVVJMT1BUX0ZUUF9VU0VfUFJFVAorUGFzcyBhIGxvbmcuIElmIHRoZSB2YWx1ZSBpcyAxLCBpdCB0ZWxscyBjdXJsIHRvIHNlbmQgYSBQUkVUIGNvbW1hbmQgYmVmb3JlCitQQVNWIChhbmQgRVBTVikuIENlcnRhaW4gRlRQIHNlcnZlcnMsIG1haW5seSBkcmZ0cGQsIHJlcXVpcmUgdGhpcyBub24tc3RhbmRhcmQKK2NvbW1hbmQgZm9yIGRpcmVjdG9yeSBsaXN0aW5ncyBhcyB3ZWxsIGFzIHVwIGFuZCBkb3dubG9hZHMgaW4gUEFTViBtb2RlLiBIYXMKK25vIGVmZmVjdCB3aGVuIHVzaW5nIHRoZSBhY3RpdmUgRlRQIHRyYW5zZmVycyBtb2RlLiAgKEFkZGVkIGluIDcuMjAuMCkKKy5JUCBDVVJMT1BUX0ZUUF9DUkVBVEVfTUlTU0lOR19ESVJTCitQYXNzIGEgbG9uZy4gSWYgdGhlIHZhbHVlIGlzIDEsIGN1cmwgd2lsbCBhdHRlbXB0IHRvIGNyZWF0ZSBhbnkgcmVtb3RlCitkaXJlY3RvcnkgdGhhdCBpdCBmYWlscyB0byBDV0QgaW50by4gQ1dEIGlzIHRoZSBjb21tYW5kIHRoYXQgY2hhbmdlcyB3b3JraW5nCitkaXJlY3RvcnkuIChBZGRlZCBpbiA3LjEwLjcpCisKK1RoaXMgc2V0dGluZyBhbHNvIGFwcGxpZXMgdG8gU0ZUUC1jb25uZWN0aW9ucy4gY3VybCB3aWxsIGF0dGVtcHQgdG8gY3JlYXRlCit0aGUgcmVtb3RlIGRpcmVjdG9yeSBpZiBpdCBjYW4ndCBvYnRhaW4gYSBoYW5kbGUgdG8gdGhlIHRhcmdldC1sb2NhdGlvbi4gVGhlCitjcmVhdGlvbiB3aWxsIGZhaWwgaWYgYSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGRpcmVjdG9yeSB0byBjcmVhdGUKK2FscmVhZHkgZXhpc3RzIG9yIGxhY2sgb2YgcGVybWlzc2lvbnMgcHJldmVudHMgY3JlYXRpb24uIChBZGRlZCBpbiA3LjE2LjMpCisKK1N0YXJ0aW5nIHdpdGggNy4xOS40LCB5b3UgY2FuIGFsc28gc2V0IHRoaXMgdmFsdWUgdG8gMiwgd2hpY2ggd2lsbCBtYWtlCitsaWJjdXJsIHJldHJ5IHRoZSBDV0QgY29tbWFuZCBhZ2FpbiBpZiB0aGUgc3Vic2VxdWVudCBNS0QgY29tbWFuZCBmYWlscy4gVGhpcworaXMgZXNwZWNpYWxseSB1c2VmdWwgaWYgeW91J3JlIGRvaW5nIG1hbnkgc2ltdWx0YW5vZXMgY29ubmVjdGlvbnMgYWdhaW5zdCB0aGUKK3NhbWUgc2VydmVyIGFuZCB0aGV5IGFsbCBoYXZlIHRoaXMgb3B0aW9uIGVuYWJsZWQsIGFzIHRoZW4gQ1dEIG1heSBmaXJzdCBmYWlsCitidXQgdGhlbiBhbm90aGVyIGNvbm5lY3Rpb24gZG9lcyBNS0QgYmVmb3JlIHRoaXMgY29ubmVjdGlvbiBhbmQgdGh1cyBNS0QgZmFpbHMKK2J1dCB0cnlpbmcgQ1dEIHdvcmtzISA3LjE5LjQgYWxzbyBpbnRyb2R1Y2VkIHRoZSBcZklDVVJMRlRQX0NSRUFURV9ESVJcZlAgYW5kCitcZklDVVJMRlRQX0NSRUFURV9ESVJfUkVUUllcZlAgZW51bSBuYW1lcyBmb3IgdGhlc2UgYXJndW1lbnRzLgorCitCZWZvcmUgdmVyc2lvbiA3LjE5LjQsIGxpYmN1cmwgd2lsbCBzaW1wbHkgaWdub3JlIGFyZ3VtZW50cyBzZXQgdG8gMiBhbmQgYWN0CithcyBpZiAxIHdhcyBzZWxlY3RlZC4KKy5JUCBDVVJMT1BUX0ZUUF9SRVNQT05TRV9USU1FT1VUCitQYXNzIGEgbG9uZy4gIENhdXNlcyBjdXJsIHRvIHNldCBhIHRpbWVvdXQgcGVyaW9kIChpbiBzZWNvbmRzKSBvbiB0aGUgYW1vdW50CitvZiB0aW1lIHRoYXQgdGhlIHNlcnZlciBpcyBhbGxvd2VkIHRvIHRha2UgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgYSByZXNwb25zZQorbWVzc2FnZSBmb3IgYSBjb21tYW5kIGJlZm9yZSB0aGUgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGh1bmcuICBXaGlsZSBjdXJsIGlzCit3YWl0aW5nIGZvciBhIHJlc3BvbnNlLCB0aGlzIHZhbHVlIG92ZXJyaWRlcyBcZklDVVJMT1BUX1RJTUVPVVRcZlAuIEl0IGlzCityZWNvbW1lbmRlZCB0aGF0IGlmIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBcZklDVVJMT1BUX1RJTUVPVVRcZlAsIHlvdSBzZXQKK1xmSUNVUkxPUFRfRlRQX1JFU1BPTlNFX1RJTUVPVVRcZlAgdG8gYSB2YWx1ZSBzbWFsbGVyIHRoYW4KK1xmSUNVUkxPUFRfVElNRU9VVFxmUC4gIChBZGRlZCBpbiA3LjEwLjgpCisuSVAgQ1VSTE9QVF9GVFBfQUxURVJOQVRJVkVfVE9fVVNFUgorUGFzcyBhIGNoYXIgKiBhcyBwYXJhbWV0ZXIsIHBvaW50aW5nIHRvIGEgc3RyaW5nIHdoaWNoIHdpbGwgYmUgdXNlZCB0bworYXV0aGVudGljYXRlIGlmIHRoZSB1c3VhbCBGVFAgIlVTRVIgdXNlciIgYW5kICJQQVNTIHBhc3N3b3JkIiBuZWdvdGlhdGlvbgorZmFpbHMuIFRoaXMgaXMgY3VycmVudGx5IG9ubHkga25vd24gdG8gYmUgcmVxdWlyZWQgd2hlbiBjb25uZWN0aW5nIHRvCitUdW1ibGV3ZWVkJ3MgU2VjdXJlIFRyYW5zcG9ydCBGVFBTIHNlcnZlciB1c2luZyBjbGllbnQgY2VydGlmaWNhdGVzIGZvcgorYXV0aGVudGljYXRpb24uIChBZGRlZCBpbiA3LjE1LjUpCisuSVAgQ1VSTE9QVF9GVFBfU0tJUF9QQVNWX0lQCitQYXNzIGEgbG9uZy4gSWYgc2V0IHRvIDEsIGl0IGluc3RydWN0cyBsaWJjdXJsIHRvIG5vdCB1c2UgdGhlIElQIGFkZHJlc3MgdGhlCitzZXJ2ZXIgc3VnZ2VzdHMgaW4gaXRzIDIyNy1yZXNwb25zZSB0byBsaWJjdXJsJ3MgUEFTViBjb21tYW5kIHdoZW4gbGliY3VybAorY29ubmVjdHMgdGhlIGRhdGEgY29ubmVjdGlvbi4gSW5zdGVhZCBsaWJjdXJsIHdpbGwgcmUtdXNlIHRoZSBzYW1lIElQIGFkZHJlc3MKK2l0IGFscmVhZHkgdXNlcyBmb3IgdGhlIGNvbnRyb2wgY29ubmVjdGlvbi4gQnV0IGl0IHdpbGwgdXNlIHRoZSBwb3J0IG51bWJlcgorZnJvbSB0aGUgMjI3LXJlc3BvbnNlLiAoQWRkZWQgaW4gNy4xNC4yKQorCitUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIFBPUlQsIEVQUlQgb3IgRVBTViBpcyB1c2VkIGluc3RlYWQgb2YgUEFTVi4KKy5JUCBDVVJMT1BUX0ZUUFNTTEFVVEgKK1Bhc3MgYSBsb25nIHVzaW5nIG9uZSBvZiB0aGUgdmFsdWVzIGZyb20gYmVsb3csIHRvIGFsdGVyIGhvdyBsaWJjdXJsIGlzc3VlcworXCYiQVVUSCBUTFMiIG9yICJBVVRIIFNTTCIgd2hlbiBGVFAgb3ZlciBTU0wgaXMgYWN0aXZhdGVkIChzZWUKK1xmSUNVUkxPUFRfVVNFX1NTTFxmUCkuIChBZGRlZCBpbiA3LjEyLjIpCisuUlMKKy5JUCBDVVJMRlRQQVVUSF9ERUZBVUxUCitBbGxvdyBsaWJjdXJsIHRvIGRlY2lkZS4KKy5JUCBDVVJMRlRQQVVUSF9TU0wKK1RyeSAiQVVUSCBTU0wiIGZpcnN0LCBhbmQgb25seSBpZiB0aGF0IGZhaWxzIHRyeSAiQVVUSCBUTFMiLgorLklQIENVUkxGVFBBVVRIX1RMUworVHJ5ICJBVVRIIFRMUyIgZmlyc3QsIGFuZCBvbmx5IGlmIHRoYXQgZmFpbHMgdHJ5ICJBVVRIIFNTTCIuCisuUkUKKy5JUCBDVVJMT1BUX0ZUUF9TU0xfQ0NDCitJZiBlbmFibGVkLCB0aGlzIG9wdGlvbiBtYWtlcyBsaWJjdXJsIHVzZSBDQ0MgKENsZWFyIENvbW1hbmQgQ2hhbm5lbCkuIEl0CitzaHV0cyBkb3duIHRoZSBTU0wvVExTIGxheWVyIGFmdGVyIGF1dGhlbnRpY2F0aW5nLiBUaGUgcmVzdCBvZiB0aGUKK2NvbnRyb2wgY2hhbm5lbCBjb21tdW5pY2F0aW9uIHdpbGwgYmUgdW5lbmNyeXB0ZWQuIFRoaXMgYWxsb3dzIE5BVCByb3V0ZXJzCit0byBmb2xsb3cgdGhlIEZUUCB0cmFuc2FjdGlvbi4gUGFzcyBhIGxvbmcgdXNpbmcgb25lIG9mIHRoZSB2YWx1ZXMgYmVsb3cuCisoQWRkZWQgaW4gNy4xNi4xKQorLlJTCisuSVAgQ1VSTEZUUFNTTF9DQ0NfTk9ORQorRG9uJ3QgYXR0ZW1wdCB0byB1c2UgQ0NDLgorLklQIENVUkxGVFBTU0xfQ0NDX1BBU1NJVkUKK0RvIG5vdCBpbml0aWF0ZSB0aGUgc2h1dGRvd24sIGJ1dCB3YWl0IGZvciB0aGUgc2VydmVyIHRvIGRvIGl0LiBEbyBub3Qgc2VuZAorYSByZXBseS4KKy5JUCBDVVJMRlRQU1NMX0NDQ19BQ1RJVkUKK0luaXRpYXRlIHRoZSBzaHV0ZG93biBhbmQgd2FpdCBmb3IgYSByZXBseS4KKy5SRQorLklQIENVUkxPUFRfRlRQX0FDQ09VTlQKK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyAob3IgTlVMTCB0byBkaXNhYmxlKS4gV2hlbiBhbiBGVFAKK3NlcnZlciBhc2tzIGZvciAiYWNjb3VudCBkYXRhIiBhZnRlciB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIGhhcyBiZWVuIHByb3ZpZGVkLAordGhpcyBkYXRhIGlzIHNlbnQgb2ZmIHVzaW5nIHRoZSBBQ0NUIGNvbW1hbmQuIChBZGRlZCBpbiA3LjEzLjApCisuSVAgQ1VSTE9QVF9GVFBfRklMRU1FVEhPRAorUGFzcyBhIGxvbmcgdGhhdCBzaG91bGQgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMuIFRoaXMgb3B0aW9uIGNvbnRyb2xzCit3aGF0IG1ldGhvZCBsaWJjdXJsIHNob3VsZCB1c2UgdG8gcmVhY2ggYSBmaWxlIG9uIGEgRlRQKFMpIHNlcnZlci4gVGhlCithcmd1bWVudCBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmVzOgorLlJTCisuSVAgQ1VSTEZUUE1FVEhPRF9NVUxUSUNXRAorbGliY3VybCBkb2VzIGEgc2luZ2xlIENXRCBvcGVyYXRpb24gZm9yIGVhY2ggcGF0aCBwYXJ0IGluIHRoZSBnaXZlbiBVUkwuIEZvcgorZGVlcCBoaWVyYXJjaGllcyB0aGlzIG1lYW5zIG1hbnkgY29tbWFuZHMuIFRoaXMgaXMgaG93IFJGQzE3Mzggc2F5cyBpdAorc2hvdWxkIGJlIGRvbmUuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBzbG93ZXN0IGJlaGF2aW9yLgorLklQIENVUkxGVFBNRVRIT0RfTk9DV0QKK2xpYmN1cmwgZG9lcyBubyBDV0QgYXQgYWxsLiBsaWJjdXJsIHdpbGwgZG8gU0laRSwgUkVUUiwgU1RPUiBldGMgYW5kIGdpdmUgYQorZnVsbCBwYXRoIHRvIHRoZSBzZXJ2ZXIgZm9yIGFsbCB0aGVzZSBjb21tYW5kcy4gVGhpcyBpcyB0aGUgZmFzdGVzdCBiZWhhdmlvci4KKy5JUCBDVVJMRlRQTUVUSE9EX1NJTkdMRUNXRAorbGliY3VybCBkb2VzIG9uZSBDV0Qgd2l0aCB0aGUgZnVsbCB0YXJnZXQgZGlyZWN0b3J5IGFuZCB0aGVuIG9wZXJhdGVzIG9uIHRoZQorZmlsZSBcJiJub3JtYWxseSIgKGxpa2UgaW4gdGhlIG11bHRpY3dkIGNhc2UpLiBUaGlzIGlzIHNvbWV3aGF0IG1vcmUgc3RhbmRhcmRzCitjb21wbGlhbnQgdGhhbiAnbm9jd2QnIGJ1dCB3aXRob3V0IHRoZSBmdWxsIHBlbmFsdHkgb2YgJ211bHRpY3dkJy4KKy5SRQorKEFkZGVkIGluIDcuMTUuMSkKKy5TSCBSVFNQIE9QVElPTlMKKy5JUCBDVVJMT1BUX1JUU1BfUkVRVUVTVAorVGVsbCBsaWJjdXJsIHdoYXQga2luZCBvZiBSVFNQIHJlcXVlc3QgdG8gbWFrZS4gUGFzcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBSVFNQCitlbnVtIHZhbHVlcy4gVW5sZXNzIG5vdGVkIG90aGVyd2lzZSwgY29tbWFuZHMgcmVxdWlyZSB0aGUgU2Vzc2lvbiBJRCB0byBiZQoraW5pdGlhbGl6ZWQuIChBZGRlZCBpbiA3LjIwLjApCisuUlMKKy5JUCBDVVJMX1JUU1BSRVFfT1BUSU9OUworVXNlZCB0byByZXRyaWV2ZSB0aGUgYXZhaWxhYmxlIG1ldGhvZHMgb2YgdGhlIHNlcnZlci4gVGhlIGFwcGxpY2F0aW9uIGlzCityZXNwb25zYmlsZSBmb3IgcGFyc2luZyBhbmQgb2JleWluZyB0aGUgcmVzcG9uc2UuIFxmQihUaGUgc2Vzc2lvbiBJRCBpcyBub3QKK25lZWRlZCBmb3IgdGhpcyBtZXRob2QuKVxmUCAgKEFkZGVkIGluIDcuMjAuMCkKKy5JUCBDVVJMX1JUU1BSRVFfREVTQ1JJQkUKK1VzZWQgdG8gZ2V0IHRoZSBsb3cgbGV2ZWwgZGVzY3JpcHRpb24gb2YgYSBzdHJlYW0uIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90ZQord2hhdCBmb3JtYXRzIGl0IHVuZGVyc3RhbmRzIGluIHRoZSBcZkknQWNjZXB0OidcZlAgaGVhZGVyLiBVbmxlc3Mgc2V0CittYW51YWxseSwgbGliY3VybCB3aWxsIGF1dG9tYXRpY2FsbHkgZmlsbCBpbiBcZkknQWNjZXB0OgorYXBwbGljYXRpb24vc2RwJ1xmUC4gVGltZS1jb25kaXRpb24gaGVhZGVycyB3aWxsIGJlIGFkZGVkIHRvIERlc2NyaWJlIHJlcXVlc3RzCitpZiB0aGUgXGZJQ1VSTE9QVF9USU1FQ09ORElUSU9OXGZQIG9wdGlvbiBpcyBhY3RpdmUuIFxmQihUaGUgc2Vzc2lvbiBJRCBpcyBub3QKK25lZWRlZCBmb3IgdGhpcyBtZXRob2QpXGZQICAoQWRkZWQgaW4gNy4yMC4wKQorLklQIENVUkxfUlRTUFJFUV9BTk5PVU5DRQorV2hlbiBzZW50IGJ5IGEgY2xpZW50LCB0aGlzIG1ldGhvZCBjaGFuZ2VzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc2Vzc2lvbi4gRm9yCitleGFtcGxlLCBpZiBhIGNsaWVudCBpcyB1c2luZyB0aGUgc2VydmVyIHRvIHJlY29yZCBhIG1lZXRpbmcsIHRoZSBjbGllbnQgY2FuCit1c2UgQW5ub3VuY2UgdG8gaW5mb3JtIHRoZSBzZXJ2ZXIgb2YgYWxsIHRoZSBtZXRhLWluZm9ybWF0aW9uIGFib3V0IHRoZQorc2Vzc2lvbi4gIEFOTk9VTkNFIGFjdHMgbGlrZSBhIEhUVFAgUFVUIG9yIFBPU1QganVzdCBsaWtlCitcZklDVVJMX1JUU1BSRVFfU0VUX1BBUkFNRVRFUlxmUCAoQWRkZWQgaW4gNy4yMC4wKQorLklQIENVUkxfUlRTUFJFUV9TRVRVUAorU2V0dXAgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSB0cmFuc3BvcnQgbGF5ZXIgZm9yIHRoZSBzZXNzaW9uLiBUaGUKK2FwcGxpY2F0aW9uIG11c3Qgc2V0IHRoZSBkZXNpcmVkIFRyYW5zcG9ydCBvcHRpb25zIGZvciBhIHNlc3Npb24gYnkgdXNpbmcgdGhlCitcZklDVVJMT1BUX1JUU1BfVFJBTlNQT1JUXGZQIG9wdGlvbiBwcmlvciB0byBjYWxsaW5nIHNldHVwLiBJZiBubyBzZXNzaW9uIElECitpcyBjdXJyZW50bHkgc2V0IHdpdGggXGZJQ1VSTE9QVF9SVFNQX1NFU1NJT05fSURcZlAsIGxpYmN1cmwgd2lsbCBleHRyYWN0IGFuZAordXNlIHRoZSBzZXNzaW9uIElEIGluIHRoZSByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QuIFxmQihUaGUgc2Vzc2lvbiBJRCBpcyBub3QKK25lZWRlZCBmb3IgdGhpcyBtZXRob2QpLlxmUCAgKEFkZGVkIGluIDcuMjAuMCkKKy5JUCBDVVJMX1JUU1BSRVFfUExBWQorU2VuZCBhIFBsYXkgY29tbWFuZCB0byB0aGUgc2VydmVyLiBVc2UgdGhlIFxmSUNVUkxPUFRfUkFOR0VcZlAgb3B0aW9uIHRvCittb2RpZnkgdGhlIHBsYXliYWNrIHRpbWUgKGUuZy4gJ25wdD0xMC0xNScpLiAgKEFkZGVkIGluIDcuMjAuMCkKKy5JUCBDVVJMX1JUU1BSRVFfUEFVU0UKK1NlbmQgYSBQYXVzZSBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIuIFVzZSB0aGUgXGZJQ1VSTE9QVF9SQU5HRVxmUCBvcHRpb24gd2l0aCBhCitzaW5nbGUgdmFsdWUgdG8gaW5kaWNhdGUgd2hlbiB0aGUgc3RyZWFtIHNob3VsZCBiZSBoYWx0ZWQuIChlLmcuIG5wdD0nMjUnKQorKEFkZGVkIGluIDcuMjAuMCkKKy5JUCBDVVJMX1JUU1BSRVFfVEVBUkRPV04KK1RoaXMgY29tbWFuZCB0ZXJtaW5hdGVzIGFuIFJUU1Agc2Vzc2lvbi4gU2ltcGx5IGNsb3NpbmcgYSBjb25uZWN0aW9uIGRvZXMgbm90Cit0ZXJtaW5hdGUgdGhlIFJUU1Agc2Vzc2lvbiBzaW5jZSBpdCBpcyB2YWxpZCB0byBjb250cm9sIGFuIFJUU1Agc2Vzc2lvbiBvdmVyCitkaWZmZXJlbnQgY29ubmVjdGlvbnMuICAoQWRkZWQgaW4gNy4yMC4wKQorLklQIENVUkxfUlRTUFJFUV9HRVRfUEFSQU1FVEVSCitSZXRyaWV2ZSBhIHBhcmFtZXRlciBmcm9tIHRoZSBzZXJ2ZXIuIEJ5IGRlZmF1bHQsIGxpYmN1cmwgd2lsbCBhdXRvbWF0aWNhbGx5CitpbmNsdWRlIGEgXGZJQ29udGVudC1UeXBlOiB0ZXh0L3BhcmFtZXRlcnNcZlAgaGVhZGVyIG9uIGFsbCBub24tZW1wdHkgcmVxdWVzdHMKK3VubGVzcyBhIGN1c3RvbSBvbmUgaXMgc2V0LiBHRVRfUEFSQU1FVEVSIGFjdHMganVzdCBsaWtlIGEgSFRUUCBQVVQgb3IgUE9TVAorKHNlZSBcZklDVVJMX1JUU1BSRVFfU0VUX1BBUkFNRVRFUlxmUCkuCitBcHBsaWNhdGlvbnMgd2lzaGluZyB0byBzZW5kIGEgaGVhcnRiZWF0IG1lc3NhZ2UgKGUuZy4gaW4gdGhlIHByZXNlbmNlIG9mIGEKK3NlcnZlci1zcGVjaWZpZWQgdGltZW91dCkgc2hvdWxkIHNlbmQgdXNlIGFuIGVtcHR5IEdFVF9QQVJBTUVURVIgcmVxdWVzdC4KKyhBZGRlZCBpbiA3LjIwLjApCisuSVAgQ1VSTF9SVFNQUkVRX1NFVF9QQVJBTUVURVIKK1NldCBhIHBhcmFtZXRlciBvbiB0aGUgc2VydmVyLiBCeSBkZWZhdWx0LCBsaWJjdXJsIHdpbGwgYXV0b21hdGljYWxseSBpbmNsdWRlCithIFxmSUNvbnRlbnQtVHlwZTogdGV4dC9wYXJhbWV0ZXJzXGZQIGhlYWRlciB1bmxlc3MgYSBjdXN0b20gb25lIGlzIHNldC4gVGhlCitpbnRlcmFjdGlvbiB3aXRoIFNFVF9QQVJBTVRFUiBpcyBtdWNoIGxpa2UgYSBIVFRQIFBVVCBvciBQT1NULiBBbiBhcHBsaWNhdGlvbgorbWF5IGVpdGhlciB1c2UgXGZJQ1VSTE9QVF9VUExPQURcZlAgd2l0aCBcZklDVVJMT1BUX1JFQUREQVRBXGZQIGxpa2UgYSBIVFRQCitQVVQsIG9yIGl0IG1heSB1c2UgXGZJQ1VSTE9QVF9QT1NURklFTERTXGZQIGxpa2UgYSBIVFRQIFBPU1QuIE5vIGNodW5rZWQKK3RyYW5zZmVycyBhcmUgYWxsb3dlZCwgc28gdGhlIGFwcGxpY2F0aW9uIG11c3Qgc2V0IHRoZQorXGZJQ1VSTE9QVF9JTkZJTEVTSVpFXGZQIGluIHRoZSBmb3JtZXIgYW5kIFxmSUNVUkxPUFRfUE9TVEZJRUxEU0laRVxmUCBpbiB0aGUKK2xhdHRlci4gQWxzbywgdGhlcmUgaXMgbm8gdXNlIG9mIG11bHRpLXBhcnQgUE9TVHMgd2l0aGluIFJUU1AuIChBZGRlZCBpbgorNy4yMC4wKQorLklQIENVUkxfUlRTUFJFUV9SRUNPUkQKK1VzZWQgdG8gdGVsbCB0aGUgc2VydmVyIHRvIHJlY29yZCBhIHNlc3Npb24uIFVzZSB0aGUgXGZJQ1VSTE9QVF9SQU5HRVxmUAorb3B0aW9uIHRvIG1vZGlmeSB0aGUgcmVjb3JkIHRpbWUuIChBZGRlZCBpbiA3LjIwLjApCisuSVAgQ1VSTF9SVFNQUkVRX1JFQ0VJVkUKK1RoaXMgaXMgYSBzcGVjaWFsIHJlcXVlc3QgYmVjYXVzZSBpdCBkb2VzIG5vdCBzZW5kIGFueSBkYXRhIHRvIHRoZSBzZXJ2ZXIuIFRoZQorYXBwbGljYXRpb24gbWF5IGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBvcmRlciB0byByZWNlaXZlIGludGVybGVhdmVkIFJUUAorZGF0YS4gSXQgd2lsbCByZXR1cm4gYWZ0ZXIgcHJvY2Vzc2luZyBvbmUgcmVhZCBidWZmZXIgb2YgZGF0YSBpbiBvcmRlciB0byBnaXZlCit0aGUgYXBwbGljYXRpb24gYSBjaGFuY2UgdG8gcnVuLiAoQWRkZWQgaW4gNy4yMC4wKQorLlJFCisuSVAgQ1VSTE9QVF9SVFNQX1NFU1NJT05fSUQKK1Bhc3MgYSBjaGFyICogYXMgYSBwYXJhbWV0ZXIgdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBSVFNQIFNlc3Npb24gSUQKK2ZvciB0aGUgaGFuZGxlLiBVc2VmdWwgZm9yIHJlc3VtaW5nIGFuIGluLXByb2dyZXNzIHNlc3Npb24uIE9uY2UgdGhpcyB2YWx1ZSBpcworc2V0IHRvIGFueSBub24tTlVMTCB2YWx1ZSwgbGliY3VybCB3aWxsIHJldHVybiBcZklDVVJMRV9SVFNQX1NFU1NJT05fRVJST1JcZlAKK2lmIElEIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBkb2VzIG5vdCBtYXRjaC4gSWYgdW5zZXQgKG9yIHNldCB0byBOVUxMKSwKK2xpYmN1cmwgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgSUQgdGhlIGZpcnN0IHRpbWUgdGhlIHNlcnZlciBzZXRzIGl0IGluIGEKK3Jlc3BvbnNlLiAoQWRkZWQgaW4gNy4yMC4wKQorLklQIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJCitTZXQgdGhlIHN0cmVhbSBVUkkgdG8gb3BlcmF0ZSBvbiBieSBwYXNzaW5nIGEgY2hhciAqIC4gRm9yIGV4YW1wbGUsIGEgc2luZ2xlCitzZXNzaW9uIG1heSBiZSBjb250cm9sbGluZyBcZklydHNwOi8vZm9vL3R3aXN0ZXIvYXVkaW9cZlAgYW5kCitcZklydHNwOi8vZm9vL3R3aXN0ZXIvdmlkZW9cZlAgYW5kIHRoZSBhcHBsaWNhdGlvbiBjYW4gc3dpdGNoIHRvIHRoZQorYXBwcm9wcmlhdGUgc3RyZWFtIHVzaW5nIHRoaXMgb3B0aW9uLiBJZiB1bnNldCwgbGliY3VybCB3aWxsIGRlZmF1bHQgdG8KK29wZXJhdGluZyBvbiBnZW5lcmljIHNlcnZlciBvcHRpb25zIGJ5IHBhc3NpbmcgJyonIGluIHRoZSBwbGFjZSBvZiB0aGUgUlRTUAorU3RyZWFtIFVSSS4gVGhpcyBvcHRpb24gaXMgZGlzdGluY3QgZnJvbSBcZklDVVJMT1BUX1VSTFxmUC4gV2hlbiB3b3JraW5nIHdpdGgKK1JUU1AsIHRoZSBcZklDVVJMT1BUX1NUUkVBTV9VUklcZlAgaW5kaWNhdGVzIHdoYXQgVVJMIHRvIHNlbmQgdG8gdGhlIHNlcnZlciBpbgordGhlIHJlcXVlc3QgaGVhZGVyIHdoaWxlIHRoZSBcZklDVVJMT1BUX1VSTFxmUCBpbmRpY2F0ZXMgd2hlcmUgdG8gbWFrZSB0aGUKK2Nvbm5lY3Rpb24gdG8uICAoZS5nLiB0aGUgXGZJQ1VSTE9QVF9VUkxcZlAgZm9yIHRoZSBhYm92ZSBleGFtcGxlcyBtaWdodCBiZQorc2V0IHRvIFxmSXJ0c3A6Ly9mb28vdHdpc3RlclxmUCAoQWRkZWQgaW4gNy4yMC4wKQorLklQIENVUkxPUFRfUlRTUF9UUkFOU1BPUlQKK1Bhc3MgYSBjaGFyICogdG8gdGVsbCBsaWJjdXJsIHdoYXQgdG8gcGFzcyBmb3IgdGhlIFRyYW5zcG9ydDogaGVhZGVyIGZvciB0aGlzCitSVFNQIHNlc3Npb24uIFRoaXMgaXMgbWFpbmx5IGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGF2b2lkIG5lZWRpbmcgdG8gc2V0IGEKK2N1c3RvbSBUcmFuc3BvcnQ6IGhlYWRlciBmb3IgZXZlcnkgU0VUVVAgcmVxdWVzdC4gVGhlIGFwcGxpY2F0aW9uIG11c3Qgc2V0IGEKK1RyYW5zcG9ydDogaGVhZGVyIGJlZm9yZSBpc3N1aW5nIGEgU0VUVVAgcmVxdWVzdC4gKEFkZGVkIGluIDcuMjAuMCkKKy5JUCBDVVJMT1BUX1JUU1BfSEVBREVSCitUaGlzIG9wdGlvbiBpcyBzaW1wbHkgYW4gYWxpYXMgZm9yIFxmSUNVUkxPUFRfSFRUUF9IRUFERVJcZlAuIFVzZSB0aGlzIHRvCityZXBsYWNlIHRoZSBzdGFuZGFyZCBoZWFkZXJzIHRoYXQgUlRTUCBhbmQgSFRUUCBzaGFyZS4gSXQgaXMgYWxzbyB2YWxpZCB0byB1c2UKK3RoZSBzaG9ydGN1dHMgc3VjaCBhcyBcZklDVVJMT1BUX1VTRVJBR0VOVFxmUC4gKEFkZGVkIGluIDcuMjAuMCkKKy5JUCBDVVJMT1BUX1JUU1BfQ0xJRU5UX0NTRVEKK01hbnVhbGx5IHNldCB0aGUgdGhlIENTRVEgbnVtYmVyIHRvIGlzc3VlIGZvciB0aGUgbmV4dCBSVFNQIHJlcXVlc3QuIFVzZWZ1bCBpZgordGhlIGFwcGxpY2F0aW9uIGlzIHJlc3VtaW5nIGEgcHJldmlvdXNseSBicm9rZW4gY29ubmVjdGlvbi4gVGhlIENTRVEgd2lsbAoraW5jcmVtZW50IGZyb20gdGhpcyBuZXcgbnVtYmVyIGhlbmNlZm9ydGguIChBZGRlZCBpbiA3LjIwLjApCisuSVAgQ1VSTE9QVF9SVFNQX1NFUlZFUl9DU0VRCitNYW51YWxseSBzZXQgdGhlIENTRVEgbnVtYmVyIHRvIGV4cGVjdCBmb3IgdGhlIG5leHQgUlRTUCBTZXJ2ZXItPkNsaWVudAorcmVxdWVzdC4gIEF0IHRoZSBtb21lbnQsIHRoaXMgZmVhdHVyZSAobGlzdGVuaW5nIGZvciBTZXJ2ZXIgcmVxdWVzdHMpIGlzCit1bmltcGxlbWVudGVkLiAoQWRkZWQgaW4gNy4yMC4wKQorLlNIIFBST1RPQ09MIE9QVElPTlMKKy5JUCBDVVJMT1BUX1RSQU5TRkVSVEVYVAorQSBwYXJhbWV0ZXIgc2V0IHRvIDEgdGVsbHMgdGhlIGxpYnJhcnkgdG8gdXNlIEFTQ0lJIG1vZGUgZm9yIEZUUCB0cmFuc2ZlcnMsCitpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGJpbmFyeSB0cmFuc2Zlci4gRm9yIHdpbjMyIHN5c3RlbXMgaXQgZG9lcyBub3Qgc2V0IHRoZQorc3Rkb3V0IHRvIGJpbmFyeSBtb2RlLiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNhYmxlIHdoZW4gdHJhbnNmZXJyaW5nIHRleHQgZGF0YQorYmV0d2VlbiBzeXN0ZW1zIHdpdGggZGlmZmVyZW50IHZpZXdzIG9uIGNlcnRhaW4gY2hhcmFjdGVycywgc3VjaCBhcyBuZXdsaW5lcworb3Igc2ltaWxhci4KKworbGliY3VybCBkb2VzIG5vdCBkbyBhIGNvbXBsZXRlIEFTQ0lJIGNvbnZlcnNpb24gd2hlbiBkb2luZyBBU0NJSSB0cmFuc2ZlcnMKK292ZXIgRlRQLiBUaGlzIGlzIGEga25vd24gbGltaXRhdGlvbi9mbGF3IHRoYXQgbm9ib2R5IGhhcyByZWN0aWZpZWQuIGxpYmN1cmwKK3NpbXBseSBzZXRzIHRoZSBtb2RlIHRvIEFTQ0lJIGFuZCBwZXJmb3JtcyBhIHN0YW5kYXJkIHRyYW5zZmVyLgorLklQIENVUkxPUFRfUFJPWFlfVFJBTlNGRVJfTU9ERQorUGFzcyBhIGxvbmcuIElmIHRoZSB2YWx1ZSBpcyBzZXQgdG8gMSAob25lKSwgaXQgdGVsbHMgbGliY3VybCB0byBzZXQgdGhlCit0cmFuc2ZlciBtb2RlIChiaW5hcnkgb3IgQVNDSUkpIGZvciBGVFAgdHJhbnNmZXJzIGRvbmUgdmlhIGEgSFRUUCBwcm94eSwgYnkKK2FwcGVuZGluZyA7dHlwZT1hIG9yIDt0eXBlPWkgdG8gdGhlIFVSTC4gV2l0aG91dCB0aGlzIHNldHRpbmcsIG9yIGl0IGJlaW5nIHNldAordG8gMCAoemVybywgdGhlIGRlZmF1bHQpLCBcZklDVVJMT1BUX1RSQU5TRkVSVEVYVFxmUCBoYXMgbm8gZWZmZWN0IHdoZW4gZG9pbmcKK0ZUUCB2aWEgYSBwcm94eS4gQmV3YXJlIHRoYXQgbm90IGFsbCBwcm94aWVzIHN1cHBvcnQgdGhpcyBmZWF0dXJlLiAgKEFkZGVkIGluCis3LjE4LjApCisuSVAgQ1VSTE9QVF9DUkxGCitQYXNzIGEgbG9uZy4gSWYgdGhlIHZhbHVlIGlzIHNldCB0byAxIChvbmUpLCBsaWJjdXJsIGNvbnZlcnRzIFVuaXggbmV3bGluZXMgdG8KK0NSTEYgbmV3bGluZXMgb24gdHJhbnNmZXJzLiBEaXNhYmxlIHRoaXMgb3B0aW9uIGFnYWluIGJ5IHNldHRpbmcgdGhlIHZhbHVlIHRvCiswICh6ZXJvKS4KKy5JUCBDVVJMT1BUX1JBTkdFCitQYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgd2hpY2ggc2hvdWxkIGNvbnRhaW4gdGhlIHNwZWNpZmllZCByYW5nZSB5b3UKK3dhbnQuIEl0IHNob3VsZCBiZSBpbiB0aGUgZm9ybWF0ICJYLVkiLCB3aGVyZSBYIG9yIFkgbWF5IGJlIGxlZnQgb3V0LiBIVFRQCit0cmFuc2ZlcnMgYWxzbyBzdXBwb3J0IHNldmVyYWwgaW50ZXJ2YWxzLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMgYXMgaW4KK1xmSSJYLVksTi1NIlxmUC4gVXNpbmcgdGhpcyBraW5kIG9mIG11bHRpcGxlIGludGVydmFscyB3aWxsIGNhdXNlIHRoZSBIVFRQCitzZXJ2ZXIgdG8gc2VuZCB0aGUgcmVzcG9uc2UgZG9jdW1lbnQgaW4gcGllY2VzICh1c2luZyBzdGFuZGFyZCBNSU1FIHNlcGFyYXRpb24KK3RlY2huaXF1ZXMpLiBGb3IgUlRTUCwgdGhlIGZvcm1hdHRpbmcgb2YgYSByYW5nZSBzaG91bGQgZm9sbG93IFJGQyAyMzI2CitTZWN0aW9uIDEyLjI5LiBGb3IgUlRTUCwgYnl0ZSByYW5nZXMgYXJlIFxmQm5vdFxmUCBwZXJtaXR0ZWQuIEluc3RlYWQsIHJhbmdlcworc2hvdWxkIGJlIGdpdmVuIGluIG5wdCwgdXRjLCBvciBzbXB0ZSBmb3JtYXRzLgorCitQYXNzIGEgTlVMTCB0byB0aGlzIG9wdGlvbiB0byBkaXNhYmxlIHRoZSB1c2Ugb2YgcmFuZ2VzLgorCitSYW5nZXMgd29yayBvbiBIVFRQLCBGVFAsIEZJTEUgKHNpbmNlIDcuMTguMCksIGFuZCBSVFNQIChzaW5jZSA3LjIwLjApCit0cmFuc2ZlcnMgb25seS4KKy5JUCBDVVJMT1BUX1JFU1VNRV9GUk9NCitQYXNzIGEgbG9uZyBhcyBwYXJhbWV0ZXIuIEl0IGNvbnRhaW5zIHRoZSBvZmZzZXQgaW4gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgeW91Cit3YW50IHRoZSB0cmFuc2ZlciB0byBzdGFydCBmcm9tLiBTZXQgdGhpcyBvcHRpb24gdG8gMCB0byBtYWtlIHRoZSB0cmFuc2Zlcgorc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIChlZmZlY3RpdmVseSBkaXNhYmxpbmcgcmVzdW1lKS4gRm9yIEZUUCwgc2V0IHRoaXMKK29wdGlvbiB0byAtMSB0byBtYWtlIHRoZSB0cmFuc2ZlciBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIHRhcmdldCBmaWxlCisodXNlZnVsIHRvIGNvbnRpbnVlIGFuIGludGVycnVwdGVkIHVwbG9hZCkuCisKK1doZW4gZG9pbmcgdXBsb2FkcyB3aXRoIEZUUCwgdGhlIHJlc3VtZSBwb3NpdGlvbiBpcyB3aGVyZSBpbiB0aGUgbG9jYWwvc291cmNlCitmaWxlIGxpYmN1cmwgc2hvdWxkIHRyeSB0byByZXN1bWUgdGhlIHVwbG9hZCBmcm9tIGFuZCBpdCB3aWxsIHRoZW4gYXBwZW5kIHRoZQorc291cmNlIGZpbGUgdG8gdGhlIHJlbW90ZSB0YXJnZXQgZmlsZS4KKy5JUCBDVVJMT1BUX1JFU1VNRV9GUk9NX0xBUkdFCitQYXNzIGEgY3VybF9vZmZfdCBhcyBwYXJhbWV0ZXIuIEl0IGNvbnRhaW5zIHRoZSBvZmZzZXQgaW4gbnVtYmVyIG9mIGJ5dGVzIHRoYXQKK3lvdSB3YW50IHRoZSB0cmFuc2ZlciB0byBzdGFydCBmcm9tLiAoQWRkZWQgaW4gNy4xMS4wKQorLklQIENVUkxPUFRfQ1VTVE9NUkVRVUVTVAorUGFzcyBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGFzIHBhcmFtZXRlci4gSXQgd2lsbCBiZSB1c2VkCitpbnN0ZWFkIG9mIEdFVCBvciBIRUFEIHdoZW4gZG9pbmcgYSBIVFRQIHJlcXVlc3QsIG9yIGluc3RlYWQgb2YgTElTVCBvciBOTFNUCit3aGVuIGRvaW5nIGEgRlRQIGRpcmVjdG9yeSBsaXN0aW5nLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZG9pbmcgREVMRVRFIG9yIG90aGVyCittb3JlIG9yIGxlc3Mgb2JzY3VyZSBIVFRQIHJlcXVlc3RzLiBEb24ndCBkbyB0aGlzIGF0IHdpbGwsIG1ha2Ugc3VyZSB5b3VyCitzZXJ2ZXIgc3VwcG9ydHMgdGhlIGNvbW1hbmQgZmlyc3QuCisKK1doZW4geW91IGNoYW5nZSB0aGUgcmVxdWVzdCBtZXRob2QgYnkgc2V0dGluZyBcZkJDVVJMT1BUX0NVU1RPTVJFUVVFU1RcZlAgdG8KK3NvbWV0aGluZywgeW91IGRvbid0IGFjdHVhbGx5IGNoYW5nZSBob3cgbGliY3VybCBiZWhhdmVzIG9yIGFjdHMgaW4gcmVnYXJkcyB0bwordGhlIHBhcnRpY3VsYXIgcmVxdWVzdCBtZXRob2QsIGl0IHdpbGwgb25seSBjaGFuZ2UgdGhlIGFjdHVhbCBzdHJpbmcgc2VudCBpbgordGhlIHJlcXVlc3QuCisKK0ZvciBleGFtcGxlOiBpZiB5b3UgdGVsbCBsaWJjdXJsIHRvIGRvIGEgSEVBRCByZXF1ZXN0LCBidXQgdGhlbiBjaGFuZ2UgdGhlCityZXF1ZXN0IHRvIGEgIkdFVCIgd2l0aCBcZkJDVVJMT1BUX0NVU1RPTVJFUVVFU1RcZlAgeW91J2xsIHN0aWxsIHNlZSBsaWJjdXJsCithY3QgYXMgaWYgaXQgc2VudCBhIEhFQUQgZXZlbiB3aGVuIGl0IGRvZXMgc2VuZCBhIEdFVC4KKworVG8gc3dpdGNoIHRvIGEgcHJvcGVyIEhFQUQsIHVzZSBcZklDVVJMT1BUX05PQk9EWVxmUCwgdG8gc3dpdGNoIHRvIGEgcHJvcGVyCitQT1NULCB1c2UgXGZJQ1VSTE9QVF9QT1NUXGZQIG9yIFxmSUNVUkxPUFRfUE9TVEZJRUxEU1xmUCBhbmQgc28gb24uCisKK1Jlc3RvcmUgdG8gdGhlIGludGVybmFsIGRlZmF1bHQgYnkgc2V0dGluZyB0aGlzIHRvIE5VTEwuCisKK01hbnkgcGVvcGxlIGhhdmUgd3JvbmdseSB1c2VkIHRoaXMgb3B0aW9uIHRvIHJlcGxhY2UgdGhlIGVudGlyZSByZXF1ZXN0IHdpdGgKK3RoZWlyIG93biwgaW5jbHVkaW5nIG11bHRpcGxlIGhlYWRlcnMgYW5kIFBPU1QgY29udGVudHMuIFdoaWxlIHRoYXQgbWlnaHQgd29yaworaW4gbWFueSBjYXNlcywgaXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIHNlbmQgaW52YWxpZCByZXF1ZXN0cyBhbmQgaXQgY291bGQKK3Bvc3NpYmx5IGNvbmZ1c2UgdGhlIHJlbW90ZSBzZXJ2ZXIgYmFkbHkuIFVzZSBcZklDVVJMT1BUX1BPU1RcZlAgYW5kCitcZklDVVJMT1BUX1BPU1RGSUVMRFNcZlAgdG8gc2V0IFBPU1QgZGF0YS4gVXNlIFxmSUNVUkxPUFRfSFRUUEhFQURFUlxmUCB0bworcmVwbGFjZSBvciBleHRlbmQgdGhlIHNldCBvZiBoZWFkZXJzIHNlbnQgYnkgbGliY3VybC4gVXNlCitcZklDVVJMT1BUX0hUVFBfVkVSU0lPTlxmUCB0byBjaGFuZ2UgSFRUUCB2ZXJzaW9uLgorLklQIENVUkxPUFRfRklMRVRJTUUKK1Bhc3MgYSBsb25nLiBJZiBpdCBpcyAxLCBsaWJjdXJsIHdpbGwgYXR0ZW1wdCB0byBnZXQgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mCit0aGUgcmVtb3RlIGRvY3VtZW50IGluIHRoaXMgb3BlcmF0aW9uLiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIHJlbW90ZSBzZXJ2ZXIKK3NlbmRzIHRoZSB0aW1lIG9yIHJlcGxpZXMgdG8gYSB0aW1lIHF1ZXJ5aW5nIGNvbW1hbmQuIFRoZQorXGZJY3VybF9lYXN5X2dldGluZm8oMylcZlAgZnVuY3Rpb24gd2l0aCB0aGUgXGZJQ1VSTElORk9fRklMRVRJTUVcZlAgYXJndW1lbnQKK2NhbiBiZSB1c2VkIGFmdGVyIGEgdHJhbnNmZXIgdG8gZXh0cmFjdCB0aGUgcmVjZWl2ZWQgdGltZSAoaWYgYW55KS4KKy5JUCBDVVJMT1BUX05PQk9EWQorQSBwYXJhbWV0ZXIgc2V0IHRvIDEgdGVsbHMgdGhlIGxpYnJhcnkgdG8gbm90IGluY2x1ZGUgdGhlIGJvZHktcGFydCBpbiB0aGUKK291dHB1dC4gVGhpcyBpcyBvbmx5IHJlbGV2YW50IGZvciBwcm90b2NvbHMgdGhhdCBoYXZlIHNlcGFyYXRlIGhlYWRlciBhbmQgYm9keQorcGFydHMuIE9uIEhUVFAoUykgc2VydmVycywgdGhpcyB3aWxsIG1ha2UgbGliY3VybCBkbyBhIEhFQUQgcmVxdWVzdC4KKworVG8gY2hhbmdlIHJlcXVlc3QgdG8gR0VULCB5b3Ugc2hvdWxkIHVzZSBcZklDVVJMT1BUX0hUVFBHRVRcZlAuIENoYW5nZSByZXF1ZXN0Cit0byBQT1NUIHdpdGggXGZJQ1VSTE9QVF9QT1NUXGZQIGV0Yy4KKy5JUCBDVVJMT1BUX0lORklMRVNJWkUKK1doZW4gdXBsb2FkaW5nIGEgZmlsZSB0byBhIHJlbW90ZSBzaXRlLCB0aGlzIG9wdGlvbiBzaG91bGQgYmUgdXNlZCB0byB0ZWxsCitsaWJjdXJsIHdoYXQgdGhlIGV4cGVjdGVkIHNpemUgb2YgdGhlIGluZmlsZSBpcy4gVGhpcyB2YWx1ZSBzaG91bGQgYmUgcGFzc2VkCithcyBhIGxvbmcuIFNlZSBhbHNvIFxmSUNVUkxPUFRfSU5GSUxFU0laRV9MQVJHRVxmUC4KKworRm9yIHVwbG9hZGluZyB1c2luZyBTQ1AsIHRoaXMgb3B0aW9uIG9yIFxmSUNVUkxPUFRfSU5GSUxFU0laRV9MQVJHRVxmUCBpcworbWFuZGF0b3J5LgorCitXaGVuIHNlbmRpbmcgZW1haWxzIHVzaW5nIFNNVFAsIHRoaXMgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZQorb3B0aW9uYWwgU0laRSBwYXJhbWV0ZXIgZm9yIHRoZSBNQUlMIEZST00gY29tbWFuZC4gKEFkZGVkIGluIDcuMjMuMCkKKworVGhpcyBvcHRpb24gZG9lcyBub3QgbGltaXQgaG93IG11Y2ggZGF0YSBsaWJjdXJsIHdpbGwgYWN0dWFsbHkgc2VuZCwgYXMgdGhhdAoraXMgY29udHJvbGxlZCBlbnRpcmVseSBieSB3aGF0IHRoZSByZWFkIGNhbGxiYWNrIHJldHVybnMuCisuSVAgQ1VSTE9QVF9JTkZJTEVTSVpFX0xBUkdFCitXaGVuIHVwbG9hZGluZyBhIGZpbGUgdG8gYSByZW1vdGUgc2l0ZSwgdGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgdG8gdGVsbAorbGliY3VybCB3aGF0IHRoZSBleHBlY3RlZCBzaXplIG9mIHRoZSBpbmZpbGUgaXMuICBUaGlzIHZhbHVlIHNob3VsZCBiZSBwYXNzZWQKK2FzIGEgY3VybF9vZmZfdC4gKEFkZGVkIGluIDcuMTEuMCkKKworRm9yIHVwbG9hZGluZyB1c2luZyBTQ1AsIHRoaXMgb3B0aW9uIG9yIFxmSUNVUkxPUFRfSU5GSUxFU0laRVxmUCBpcyBtYW5kYXRvcnkuCisKK1RoaXMgb3B0aW9uIGRvZXMgbm90IGxpbWl0IGhvdyBtdWNoIGRhdGEgbGliY3VybCB3aWxsIGFjdHVhbGx5IHNlbmQsIGFzIHRoYXQKK2lzIGNvbnRyb2xsZWQgZW50aXJlbHkgYnkgd2hhdCB0aGUgcmVhZCBjYWxsYmFjayByZXR1cm5zLgorLklQIENVUkxPUFRfVVBMT0FECitBIHBhcmFtZXRlciBzZXQgdG8gMSB0ZWxscyB0aGUgbGlicmFyeSB0byBwcmVwYXJlIGZvciBhbiB1cGxvYWQuIFRoZQorXGZJQ1VSTE9QVF9SRUFEREFUQVxmUCBhbmQgXGZJQ1VSTE9QVF9JTkZJTEVTSVpFXGZQIG9yCitcZklDVVJMT1BUX0lORklMRVNJWkVfTEFSR0VcZlAgb3B0aW9ucyBhcmUgYWxzbyBpbnRlcmVzdGluZyBmb3IgdXBsb2Fkcy4gSWYKK3RoZSBwcm90b2NvbCBpcyBIVFRQLCB1cGxvYWRpbmcgbWVhbnMgdXNpbmcgdGhlIFBVVCByZXF1ZXN0IHVubGVzcyB5b3UgdGVsbAorbGliY3VybCBvdGhlcndpc2UuCisKK1VzaW5nIFBVVCB3aXRoIEhUVFAgMS4xIGltcGxpZXMgdGhlIHVzZSBvZiBhICJFeHBlY3Q6IDEwMC1jb250aW51ZSIgaGVhZGVyLgorWW91IGNhbiBkaXNhYmxlIHRoaXMgaGVhZGVyIHdpdGggXGZJQ1VSTE9QVF9IVFRQSEVBREVSXGZQIGFzIHVzdWFsLgorCitJZiB5b3UgdXNlIFBVVCB0byBhIEhUVFAgMS4xIHNlcnZlciwgeW91IGNhbiB1cGxvYWQgZGF0YSB3aXRob3V0IGtub3dpbmcgdGhlCitzaXplIGJlZm9yZSBzdGFydGluZyB0aGUgdHJhbnNmZXIgaWYgeW91IHVzZSBjaHVua2VkIGVuY29kaW5nLiBZb3UgZW5hYmxlIHRoaXMKK2J5IGFkZGluZyBhIGhlYWRlciBsaWtlICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIgd2l0aAorXGZJQ1VSTE9QVF9IVFRQSEVBREVSXGZQLiBXaXRoIEhUVFAgMS4wIG9yIHdpdGhvdXQgY2h1bmtlZCB0cmFuc2ZlciwgeW91IG11c3QKK3NwZWNpZnkgdGhlIHNpemUuCisuSVAgQ1VSTE9QVF9NQVhGSUxFU0laRQorUGFzcyBhIGxvbmcgYXMgcGFyYW1ldGVyLiBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBzaXplIChpbgorYnl0ZXMpIG9mIGEgZmlsZSB0byBkb3dubG9hZC4gSWYgdGhlIGZpbGUgcmVxdWVzdGVkIGlzIGxhcmdlciB0aGFuIHRoaXMgdmFsdWUsCit0aGUgdHJhbnNmZXIgd2lsbCBub3Qgc3RhcnQgYW5kIENVUkxFX0ZJTEVTSVpFX0VYQ0VFREVEIHdpbGwgYmUgcmV0dXJuZWQuCisKK1RoZSBmaWxlIHNpemUgaXMgbm90IGFsd2F5cyBrbm93biBwcmlvciB0byBkb3dubG9hZCwgYW5kIGZvciBzdWNoIGZpbGVzIHRoaXMKK29wdGlvbiBoYXMgbm8gZWZmZWN0IGV2ZW4gaWYgdGhlIGZpbGUgdHJhbnNmZXIgZW5kcyB1cCBiZWluZyBsYXJnZXIgdGhhbiB0aGlzCitnaXZlbiBsaW1pdC4gVGhpcyBjb25jZXJucyBib3RoIEZUUCBhbmQgSFRUUCB0cmFuc2ZlcnMuCisuSVAgQ1VSTE9QVF9NQVhGSUxFU0laRV9MQVJHRQorUGFzcyBhIGN1cmxfb2ZmX3QgYXMgcGFyYW1ldGVyLiBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBzaXplCisoaW4gYnl0ZXMpIG9mIGEgZmlsZSB0byBkb3dubG9hZC4gSWYgdGhlIGZpbGUgcmVxdWVzdGVkIGlzIGxhcmdlciB0aGFuIHRoaXMKK3ZhbHVlLCB0aGUgdHJhbnNmZXIgd2lsbCBub3Qgc3RhcnQgYW5kIFxmSUNVUkxFX0ZJTEVTSVpFX0VYQ0VFREVEXGZQIHdpbGwgYmUKK3JldHVybmVkLiAoQWRkZWQgaW4gNy4xMS4wKQorCitUaGUgZmlsZSBzaXplIGlzIG5vdCBhbHdheXMga25vd24gcHJpb3IgdG8gZG93bmxvYWQsIGFuZCBmb3Igc3VjaCBmaWxlcyB0aGlzCitvcHRpb24gaGFzIG5vIGVmZmVjdCBldmVuIGlmIHRoZSBmaWxlIHRyYW5zZmVyIGVuZHMgdXAgYmVpbmcgbGFyZ2VyIHRoYW4gdGhpcworZ2l2ZW4gbGltaXQuIFRoaXMgY29uY2VybnMgYm90aCBGVFAgYW5kIEhUVFAgdHJhbnNmZXJzLgorLklQIENVUkxPUFRfVElNRUNPTkRJVElPTgorUGFzcyBhIGxvbmcgYXMgcGFyYW1ldGVyLiBUaGlzIGRlZmluZXMgaG93IHRoZSBcZklDVVJMT1BUX1RJTUVWQUxVRVxmUCB0aW1lCit2YWx1ZSBpcyB0cmVhdGVkLiBZb3UgY2FuIHNldCB0aGlzIHBhcmFtZXRlciB0byBcZklDVVJMX1RJTUVDT05EX0lGTU9EU0lOQ0VcZlAKK29yIFxmSUNVUkxfVElNRUNPTkRfSUZVTk1PRFNJTkNFXGZQLiBUaGlzIGZlYXR1cmUgYXBwbGllcyB0byBIVFRQLCBGVFAsIFJUU1AsCithbmQgRklMRS4KKworVGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgYSBmaWxlIGlzIG5vdCBhbHdheXMga25vd24gYW5kIGluIHN1Y2ggaW5zdGFuY2VzCit0aGlzIGZlYXR1cmUgd2lsbCBoYXZlIG5vIGVmZmVjdCBldmVuIGlmIHRoZSBnaXZlbiB0aW1lIGNvbmRpdGlvbiB3b3VsZCBub3QKK2hhdmUgYmVlbiBtZXQuIFxmSWN1cmxfZWFzeV9nZXRpbmZvKDMpXGZQIHdpdGggdGhlCitcZklDVVJMSU5GT19DT05ESVRJT05fVU5NRVRcZlAgb3B0aW9uIGNhbiBiZSB1c2VkIGFmdGVyIGEgdHJhbnNmZXIgdG8gbGVhcm4gaWYKK2EgemVyby1ieXRlIHN1Y2Nlc3NmdWwgInRyYW5zZmVyIiB3YXMgZHVlIHRvIHRoaXMgY29uZGl0aW9uIG5vdCBtYXRjaGluZy4KKy5JUCBDVVJMT1BUX1RJTUVWQUxVRQorUGFzcyBhIGxvbmcgYXMgcGFyYW1ldGVyLiBUaGlzIHNob3VsZCBiZSB0aGUgdGltZSBpbiBzZWNvbmRzIHNpbmNlIDEgSmFuIDE5NzAsCithbmQgdGhlIHRpbWUgd2lsbCBiZSB1c2VkIGluIGEgY29uZGl0aW9uIGFzIHNwZWNpZmllZCB3aXRoCitcZklDVVJMT1BUX1RJTUVDT05ESVRJT05cZlAuCisuU0ggQ09OTkVDVElPTiBPUFRJT05TCisuSVAgQ1VSTE9QVF9USU1FT1VUCitQYXNzIGEgbG9uZyBhcyBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCB5b3UgYWxsb3cKK3RoZSBsaWJjdXJsIHRyYW5zZmVyIG9wZXJhdGlvbiB0byB0YWtlLiBOb3JtYWxseSwgbmFtZSBsb29rdXBzIGNhbiB0YWtlIGEKK2NvbnNpZGVyYWJsZSB0aW1lIGFuZCBsaW1pdGluZyBvcGVyYXRpb25zIHRvIGxlc3MgdGhhbiBhIGZldyBtaW51dGVzIHJpc2sKK2Fib3J0aW5nIHBlcmZlY3RseSBub3JtYWwgb3BlcmF0aW9ucy4gVGhpcyBvcHRpb24gd2lsbCBjYXVzZSBjdXJsIHRvIHVzZSB0aGUKK1NJR0FMUk0gdG8gZW5hYmxlIHRpbWUtb3V0aW5nIHN5c3RlbSBjYWxscy4KKworSW4gdW5peC1saWtlIHN5c3RlbXMsIHRoaXMgbWlnaHQgY2F1c2Ugc2lnbmFscyB0byBiZSB1c2VkIHVubGVzcworXGZJQ1VSTE9QVF9OT1NJR05BTFxmUCBpcyBzZXQuCisuSVAgQ1VSTE9QVF9USU1FT1VUX01TCitMaWtlIFxmSUNVUkxPUFRfVElNRU9VVFxmUCBidXQgdGFrZXMgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbnN0ZWFkLiBJZgorbGliY3VybCBpcyBidWlsdCB0byB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBuYW1lIHJlc29sdmVyLCB0aGF0IHBvcnRpb24KK29mIHRoZSB0cmFuc2ZlciB3aWxsIHN0aWxsIHVzZSBmdWxsLXNlY29uZCByZXNvbHV0aW9uIGZvciB0aW1lb3V0cyB3aXRoCithIG1pbmltdW0gdGltZW91dCBhbGxvd2VkIG9mIG9uZSBzZWNvbmQuCisoQWRkZWQgaW4gNy4xNi4yKQorLklQIENVUkxPUFRfTE9XX1NQRUVEX0xJTUlUCitQYXNzIGEgbG9uZyBhcyBwYXJhbWV0ZXIuIEl0IGNvbnRhaW5zIHRoZSB0cmFuc2ZlciBzcGVlZCBpbiBieXRlcyBwZXIgc2Vjb25kCit0aGF0IHRoZSB0cmFuc2ZlciBzaG91bGQgYmUgYmVsb3cgZHVyaW5nIFxmSUNVUkxPUFRfTE9XX1NQRUVEX1RJTUVcZlAgc2Vjb25kcworZm9yIHRoZSBsaWJyYXJ5IHRvIGNvbnNpZGVyIGl0IHRvbyBzbG93IGFuZCBhYm9ydC4KKy5JUCBDVVJMT1BUX0xPV19TUEVFRF9USU1FCitQYXNzIGEgbG9uZyBhcyBwYXJhbWV0ZXIuIEl0IGNvbnRhaW5zIHRoZSB0aW1lIGluIHNlY29uZHMgdGhhdCB0aGUgdHJhbnNmZXIKK3Nob3VsZCBiZSBiZWxvdyB0aGUgXGZJQ1VSTE9QVF9MT1dfU1BFRURfTElNSVRcZlAgZm9yIHRoZSBsaWJyYXJ5IHRvIGNvbnNpZGVyCitpdCB0b28gc2xvdyBhbmQgYWJvcnQuCisuSVAgQ1VSTE9QVF9NQVhfU0VORF9TUEVFRF9MQVJHRQorUGFzcyBhIGN1cmxfb2ZmX3QgYXMgcGFyYW1ldGVyLiAgSWYgYW4gdXBsb2FkIGV4Y2VlZHMgdGhpcyBzcGVlZCAoY291bnRlZCBpbgorYnl0ZXMgcGVyIHNlY29uZCkgb24gY3VtdWxhdGl2ZSBhdmVyYWdlIGR1cmluZyB0aGUgdHJhbnNmZXIsIHRoZSB0cmFuc2ZlciB3aWxsCitwYXVzZSB0byBrZWVwIHRoZSBhdmVyYWdlIHJhdGUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwYXJhbWV0ZXIgdmFsdWUuCitEZWZhdWx0cyB0byB1bmxpbWl0ZWQgc3BlZWQuIChBZGRlZCBpbiA3LjE1LjUpCisuSVAgQ1VSTE9QVF9NQVhfUkVDVl9TUEVFRF9MQVJHRQorUGFzcyBhIGN1cmxfb2ZmX3QgYXMgcGFyYW1ldGVyLiAgSWYgYSBkb3dubG9hZCBleGNlZWRzIHRoaXMgc3BlZWQgKGNvdW50ZWQgaW4KK2J5dGVzIHBlciBzZWNvbmQpIG9uIGN1bXVsYXRpdmUgYXZlcmFnZSBkdXJpbmcgdGhlIHRyYW5zZmVyLCB0aGUgdHJhbnNmZXIgd2lsbAorcGF1c2UgdG8ga2VlcCB0aGUgYXZlcmFnZSByYXRlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGFyYW1ldGVyCit2YWx1ZS4gRGVmYXVsdHMgdG8gdW5saW1pdGVkIHNwZWVkLiAoQWRkZWQgaW4gNy4xNS41KQorLklQIENVUkxPUFRfTUFYQ09OTkVDVFMKK1Bhc3MgYSBsb25nLiBUaGUgc2V0IG51bWJlciB3aWxsIGJlIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gY2FjaGUgc2l6ZS4gVGhlCitzZXQgYW1vdW50IHdpbGwgYmUgdGhlIG1heGltdW0gYW1vdW50IG9mIHNpbXVsdGFuZW91c2x5IG9wZW4gY29ubmVjdGlvbnMgdGhhdAorbGliY3VybCBtYXkgY2FjaGUgaW4gdGhpcyBlYXN5IGhhbmRsZS4gRGVmYXVsdCBpcyA1LCBhbmQgdGhlcmUgaXNuJ3QgbXVjaAorcG9pbnQgaW4gY2hhbmdpbmcgdGhpcyB2YWx1ZSB1bmxlc3MgeW91IGFyZSBwZXJmZWN0bHkgYXdhcmUgb2YgaG93IHRoaXMgd29ya3MKK2FuZCBjaGFuZ2VzIGxpYmN1cmwncyBiZWhhdmlvdXIuIFRoaXMgY29uY2VybnMgY29ubmVjdGlvbnMgdXNpbmcgYW55IG9mIHRoZQorcHJvdG9jb2xzIHRoYXQgc3VwcG9ydCBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLgorCitXaGVuIHJlYWNoaW5nIHRoZSBtYXhpbXVtIGxpbWl0LCBjdXJsIGNsb3NlcyB0aGUgb2xkZXN0IG9uZSBpbiB0aGUgY2FjaGUgdG8KK3ByZXZlbnQgaW5jcmVhc2luZyB0aGUgbnVtYmVyIG9mIG9wZW4gY29ubmVjdGlvbnMuCisKK0lmIHlvdSBhbHJlYWR5IGhhdmUgcGVyZm9ybWVkIHRyYW5zZmVycyB3aXRoIHRoaXMgY3VybCBoYW5kbGUsIHNldHRpbmcgYQorc21hbGxlciBNQVhDT05ORUNUUyB0aGFuIGJlZm9yZSBtYXkgY2F1c2Ugb3BlbiBjb25uZWN0aW9ucyB0byBnZXQgY2xvc2VkCit1bm5lY2Vzc2FyaWx5LgorCitJZiB5b3UgYWRkIHRoaXMgZWFzeSBoYW5kbGUgdG8gYSBtdWx0aSBoYW5kbGUsIHRoaXMgc2V0dGluZyBpcyBub3QKK2Fja25vd2xlZGdlZCwgYW5kIHlvdSBtdXN0IGluc3RlYWQgdXNlIFxmSWN1cmxfbXVsdGlfc2V0b3B0KDMpXGZQIGFuZCB0aGUKK1xmSUNVUkxNT1BUX01BWENPTk5FQ1RTXGZQIG9wdGlvbi4KKy5JUCBDVVJMT1BUX0NMT1NFUE9MSUNZCisoT2Jzb2xldGUpIFRoaXMgb3B0aW9uIGRvZXMgbm90aGluZy4KKy5JUCBDVVJMT1BUX0ZSRVNIX0NPTk5FQ1QKK1Bhc3MgYSBsb25nLiBTZXQgdG8gMSB0byBtYWtlIHRoZSBuZXh0IHRyYW5zZmVyIHVzZSBhIG5ldyAoZnJlc2gpIGNvbm5lY3Rpb24KK2J5IGZvcmNlLiBJZiB0aGUgY29ubmVjdGlvbiBjYWNoZSBpcyBmdWxsIGJlZm9yZSB0aGlzIGNvbm5lY3Rpb24sIG9uZSBvZiB0aGUKK2V4aXN0aW5nIGNvbm5lY3Rpb25zIHdpbGwgYmUgY2xvc2VkIGFzIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgb3IgZGVmYXVsdAorcG9saWN5LiBUaGlzIG9wdGlvbiBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24gYW5kIG9ubHkgaWYgeW91IHVuZGVyc3RhbmQKK3doYXQgaXQgZG9lcy4gU2V0IHRoaXMgdG8gMCB0byBoYXZlIGxpYmN1cmwgYXR0ZW1wdCByZS11c2luZyBhbiBleGlzdGluZworY29ubmVjdGlvbiAoZGVmYXVsdCBiZWhhdmlvcikuCisuSVAgQ1VSTE9QVF9GT1JCSURfUkVVU0UKK1Bhc3MgYSBsb25nLiBTZXQgdG8gMSB0byBtYWtlIHRoZSBuZXh0IHRyYW5zZmVyIGV4cGxpY2l0bHkgY2xvc2UgdGhlCitjb25uZWN0aW9uIHdoZW4gZG9uZS4gTm9ybWFsbHksIGxpYmN1cmwga2VlcHMgYWxsIGNvbm5lY3Rpb25zIGFsaXZlIHdoZW4gZG9uZQord2l0aCBvbmUgdHJhbnNmZXIgaW4gY2FzZSBhIHN1Y2NlZWRpbmcgb25lIGZvbGxvd3MgdGhhdCBjYW4gcmUtdXNlIHRoZW0uCitUaGlzIG9wdGlvbiBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24gYW5kIG9ubHkgaWYgeW91IHVuZGVyc3RhbmQgd2hhdCBpdAorZG9lcy4gU2V0IHRvIDAgdG8gaGF2ZSBsaWJjdXJsIGtlZXAgdGhlIGNvbm5lY3Rpb24gb3BlbiBmb3IgcG9zc2libGUgbGF0ZXIKK3JlLXVzZSAoZGVmYXVsdCBiZWhhdmlvcikuCisuSVAgQ1VSTE9QVF9DT05ORUNUVElNRU9VVAorUGFzcyBhIGxvbmcuIEl0IHNob3VsZCBjb250YWluIHRoZSBtYXhpbXVtIHRpbWUgaW4gc2Vjb25kcyB0aGF0IHlvdSBhbGxvdyB0aGUKK2Nvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciB0byB0YWtlLiAgVGhpcyBvbmx5IGxpbWl0cyB0aGUgY29ubmVjdGlvbiBwaGFzZSwgb25jZQoraXQgaGFzIGNvbm5lY3RlZCwgdGhpcyBvcHRpb24gaXMgb2Ygbm8gbW9yZSB1c2UuIFNldCB0byB6ZXJvIHRvIHN3aXRjaCB0byB0aGUKK2RlZmF1bHQgYnVpbHQtaW4gY29ubmVjdGlvbiB0aW1lb3V0IC0gMzAwIHNlY29uZHMuIFNlZSBhbHNvIHRoZQorXGZJQ1VSTE9QVF9USU1FT1VUXGZQIG9wdGlvbi4KKworSW4gdW5peC1saWtlIHN5c3RlbXMsIHRoaXMgbWlnaHQgY2F1c2Ugc2lnbmFscyB0byBiZSB1c2VkIHVubGVzcworXGZJQ1VSTE9QVF9OT1NJR05BTFxmUCBpcyBzZXQuCisuSVAgQ1VSTE9QVF9DT05ORUNUVElNRU9VVF9NUworTGlrZSBcZklDVVJMT1BUX0NPTk5FQ1RUSU1FT1VUXGZQIGJ1dCB0YWtlcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcworaW5zdGVhZC4gSWYgbGliY3VybCBpcyBidWlsdCB0byB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBuYW1lIHJlc29sdmVyLAordGhhdCBwb3J0aW9uIG9mIHRoZSBjb25uZWN0IHdpbGwgc3RpbGwgdXNlIGZ1bGwtc2Vjb25kIHJlc29sdXRpb24gZm9yCit0aW1lb3V0cyB3aXRoIGEgbWluaW11bSB0aW1lb3V0IGFsbG93ZWQgb2Ygb25lIHNlY29uZC4KKyhBZGRlZCBpbiA3LjE2LjIpCisuSVAgQ1VSTE9QVF9JUFJFU09MVkUKK0FsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBzZWxlY3Qgd2hhdCBraW5kIG9mIElQIGFkZHJlc3NlcyB0byB1c2Ugd2hlbgorcmVzb2x2aW5nIGhvc3QgbmFtZXMuIFRoaXMgaXMgb25seSBpbnRlcmVzdGluZyB3aGVuIHVzaW5nIGhvc3QgbmFtZXMgdGhhdAorcmVzb2x2ZSBhZGRyZXNzZXMgdXNpbmcgbW9yZSB0aGFuIG9uZSB2ZXJzaW9uIG9mIElQLiBUaGUgYWxsb3dlZCB2YWx1ZXMgYXJlOgorLlJTCisuSVAgQ1VSTF9JUFJFU09MVkVfV0hBVEVWRVIKK0RlZmF1bHQsIHJlc29sdmVzIGFkZHJlc3NlcyB0byBhbGwgSVAgdmVyc2lvbnMgdGhhdCB5b3VyIHN5c3RlbSBhbGxvd3MuCisuSVAgQ1VSTF9JUFJFU09MVkVfVjQKK1Jlc29sdmUgdG8gSVB2NCBhZGRyZXNzZXMuCisuSVAgQ1VSTF9JUFJFU09MVkVfVjYKK1Jlc29sdmUgdG8gSVB2NiBhZGRyZXNzZXMuCisuUkUKKy5JUCBDVVJMT1BUX0NPTk5FQ1RfT05MWQorUGFzcyBhIGxvbmcuIElmIHRoZSBwYXJhbWV0ZXIgZXF1YWxzIDEsIGl0IHRlbGxzIHRoZSBsaWJyYXJ5IHRvIHBlcmZvcm0gYWxsCit0aGUgcmVxdWlyZWQgcHJveHkgYXV0aGVudGljYXRpb24gYW5kIGNvbm5lY3Rpb24gc2V0dXAsIGJ1dCBubyBkYXRhIHRyYW5zZmVyLgorVGhpcyBvcHRpb24gaXMgdXNlZnVsIG9ubHkgb24gSFRUUCBVUkxzLgorCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2l0aCB0aGUgXGZJQ1VSTElORk9fTEFTVFNPQ0tFVFxmUCBvcHRpb24gdG8KK1xmSWN1cmxfZWFzeV9nZXRpbmZvKDMpXGZQLiBUaGUgbGlicmFyeSBjYW4gc2V0IHVwIHRoZSBjb25uZWN0aW9uIGFuZCB0aGVuIHRoZQorYXBwbGljYXRpb24gY2FuIG9idGFpbiB0aGUgbW9zdCByZWNlbnRseSB1c2VkIHNvY2tldCBmb3Igc3BlY2lhbCBkYXRhCit0cmFuc2ZlcnMuIChBZGRlZCBpbiA3LjE1LjIpCisuSVAgQ1VSTE9QVF9VU0VfU1NMCitQYXNzIGEgbG9uZyB1c2luZyBvbmUgb2YgdGhlIHZhbHVlcyBmcm9tIGJlbG93LCB0byBtYWtlIGxpYmN1cmwgdXNlIHlvdXIKK2Rlc2lyZWQgbGV2ZWwgb2YgU1NMIGZvciB0aGUgdHJhbnNmZXIuIChBZGRlZCBpbiA3LjExLjApCisKK1RoaXMgaXMgZm9yIGVuYWJsaW5nIFNTTC9UTFMgd2hlbiB5b3UgdXNlIEZUUCwgU01UUCwgUE9QMywgSU1BUCBldGMuCisKKyhUaGlzIG9wdGlvbiB3YXMga25vd24gYXMgQ1VSTE9QVF9GVFBfU1NMIHVwIHRvIDcuMTYuNCwgYW5kIHRoZSBjb25zdGFudHMKK3dlcmUga25vd24gYXMgQ1VSTEZUUFNTTF8qKQorLlJTCisuSVAgQ1VSTFVTRVNTTF9OT05FCitEb24ndCBhdHRlbXB0IHRvIHVzZSBTU0wuCisuSVAgQ1VSTFVTRVNTTF9UUlkKK1RyeSB1c2luZyBTU0wsIHByb2NlZWQgYXMgbm9ybWFsIG90aGVyd2lzZS4KKy5JUCBDVVJMVVNFU1NMX0NPTlRST0wKK1JlcXVpcmUgU1NMIGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uIG9yIGZhaWwgd2l0aCBcZklDVVJMRV9VU0VfU1NMX0ZBSUxFRFxmUC4KKy5JUCBDVVJMVVNFU1NMX0FMTAorUmVxdWlyZSBTU0wgZm9yIGFsbCBjb21tdW5pY2F0aW9uIG9yIGZhaWwgd2l0aCBcZklDVVJMRV9VU0VfU1NMX0ZBSUxFRFxmUC4KKy5SRQorLklQIENVUkxPUFRfUkVTT0xWRQorUGFzcyBhIHBvaW50ZXIgdG8gYSBsaW5rZWQgbGlzdCBvZiBzdHJpbmdzIHdpdGggaG9zdCBuYW1lIHJlc29sdmUgaW5mb3JtYXRpb24KK3RvIHVzZSBmb3IgcmVxdWVzdHMgd2l0aCB0aGlzIGhhbmRsZS4gVGhlIGxpbmtlZCBsaXN0IHNob3VsZCBiZSBhIGZ1bGx5IHZhbGlkCitsaXN0IG9mIFxmQnN0cnVjdCBjdXJsX3NsaXN0XGZQIHN0cnVjdHMgcHJvcGVybHkgZmlsbGVkIGluLiBVc2UKK1xmSWN1cmxfc2xpc3RfYXBwZW5kKDMpXGZQIHRvIGNyZWF0ZSB0aGUgbGlzdCBhbmQgXGZJY3VybF9zbGlzdF9mcmVlX2FsbCgzKVxmUAordG8gY2xlYW4gdXAgYW4gZW50aXJlIGxpc3QuCisKK0VhY2ggc2luZ2xlIG5hbWUgcmVzb2x2ZSBzdHJpbmcgc2hvdWxkIGJlIHdyaXR0ZW4gdXNpbmcgdGhlIGZvcm1hdAorSE9TVDpQT1JUOkFERFJFU1Mgd2hlcmUgSE9TVCBpcyB0aGUgbmFtZSBsaWJjdXJsIHdpbGwgdHJ5IHRvIHJlc29sdmUsIFBPUlQgaXMKK3RoZSBwb3J0IG51bWJlciBvZiB0aGUgc2VydmljZSB3aGVyZSBsaWJjdXJsIHdhbnRzIHRvIGNvbm5lY3QgdG8gdGhlIEhPU1QgYW5kCitBRERSRVNTIGlzIHRoZSBudW1lcmljYWwgSVAgYWRkcmVzcy4gSWYgbGliY3VybCBpcyBidWlsdCB0byBzdXBwb3J0IElQdjYsCitBRERSRVNTIGNhbiBvZiBjb3Vyc2UgYmUgZWl0aGVyIElQdjQgb3IgSVB2NiBzdHlsZSBhZGRyZXNzaW5nLgorCitUaGlzIG9wdGlvbiBlZmZlY3RpdmVseSBwcmUtcG9wdWxhdGVzIHRoZSBETlMgY2FjaGUgd2l0aCBlbnRyaWVzIGZvciB0aGUKK2hvc3QrcG9ydCBwYWlyIHNvIHJlZGlyZWN0cyBhbmQgZXZlcnl0aGluZyB0aGF0IG9wZXJhdGlvbnMgYWdhaW5zdCB0aGUKK0hPU1QrUE9SVCB3aWxsIGluc3RlYWQgdXNlIHlvdXIgcHJvdmlkZWQgQUREUkVTUy4KKworWW91IGNhbiByZW1vdmUgbmFtZXMgZnJvbSB0aGUgRE5TIGNhY2hlIGFnYWluLCB0byBzdG9wIHByb3ZpZGluZyB0aGVzZSBmYWtlCityZXNvbHZlcywgYnkgaW5jbHVkaW5nIGEgc3RyaW5nIGluIHRoZSBsaW5rZWQgbGlzdCB0aGF0IHVzZXMgdGhlIGZvcm1hdAorXCYiLUhPU1Q6UE9SVCIuIFRoZSBob3N0IG5hbWUgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIGEgZGFzaCwgYW5kIHRoZSBob3N0IG5hbWUKK2FuZCBwb3J0IG51bWJlciBtdXN0IGV4YWN0bHkgbWF0Y2ggd2hhdCB3YXMgYWxyZWFkeSBhZGRlZCBwcmV2aW91c2x5LgorCisoQWRkZWQgaW4gNy4yMS4zKQorLklQIENVUkxPUFRfRE5TX1NFUlZFUlMKK1NldCB0aGUgbGlzdCBvZiBETlMgc2VydmVycyB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHN5c3RlbSBkZWZhdWx0LgorVGhlIGZvcm1hdCBvZiB0aGUgZG5zIHNlcnZlcnMgb3B0aW9uIGlzOgorCitob3N0Wzpwb3J0XVssaG9zdFs6cG9ydF1dLi4uCisKK0ZvciBleGFtcGxlOgorCisxOTIuMTY4LjEuMTAwLDE5Mi4xNjguMS4xMDEsMy40LjUuNgorCitUaGlzIG9wdGlvbiByZXF1aXJlcyB0aGF0IGxpYmN1cmwgd2FzIGJ1aWx0IHdpdGggYSByZXNvbHZlciBiYWNrZW5kIHRoYXQKK3N1cHBvcnRzIHRoaXMgb3BlcmF0aW9uLiBUaGUgYy1hcmVzIGJhY2tlbmQgaXMgdGhlIG9ubHkgc3VjaCBvbmUuCisKKyhBZGRlZCBpbiA3LjI0LjApCisuSVAgQ1VSTE9QVF9BQ0NFUFRUSU1FT1VUX01TCitQYXNzIGEgbG9uZyB0ZWxsaW5nIGxpYmN1cmwgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciBhCitzZXJ2ZXIgdG8gY29ubmVjdCBiYWNrIHRvIGxpYmN1cmwgd2hlbiBhbiBhY3RpdmUgRlRQIGNvbm5lY3Rpb24gaXMgdXNlZC4gSWYgbm8KK3RpbWVvdXQgaXMgc2V0LCB0aGUgaW50ZXJuYWwgZGVmYXVsdCBvZiA2MDAwMCB3aWxsIGJlIHVzZWQuIChBZGRlZCBpbiA3LjI0LjApCisuU0ggU1NMIGFuZCBTRUNVUklUWSBPUFRJT05TCisuSVAgQ1VSTE9QVF9TU0xDRVJUCitQYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgYXMgcGFyYW1ldGVyLiBUaGUgc3RyaW5nIHNob3VsZCBiZQordGhlIGZpbGUgbmFtZSBvZiB5b3VyIGNlcnRpZmljYXRlLiBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgIlBFTSIgYW5kIGNhbiBiZQorY2hhbmdlZCB3aXRoIFxmSUNVUkxPUFRfU1NMQ0VSVFRZUEVcZlAuCisKK1dpdGggTlNTIHRoaXMgY2FuIGFsc28gYmUgdGhlIG5pY2tuYW1lIG9mIHRoZSBjZXJ0aWZpY2F0ZSB5b3Ugd2lzaCB0bworYXV0aGVudGljYXRlIHdpdGguIElmIHlvdSB3YW50IHRvIHVzZSBhIGZpbGUgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHBsZWFzZQorcHJlY2VkZSBpdCB3aXRoICIuLyIgcHJlZml4LCBpbiBvcmRlciB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBhIG5pY2tuYW1lLgorLklQIENVUkxPUFRfU1NMQ0VSVFRZUEUKK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIFRoZSBzdHJpbmcgc2hvdWxkIGJlCit0aGUgZm9ybWF0IG9mIHlvdXIgY2VydGlmaWNhdGUuIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSAiUEVNIiBhbmQgIkRFUiIuICAoQWRkZWQKK2luIDcuOS4zKQorLklQIENVUkxPUFRfU1NMS0VZCitQYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgYXMgcGFyYW1ldGVyLiBUaGUgc3RyaW5nIHNob3VsZCBiZQordGhlIGZpbGUgbmFtZSBvZiB5b3VyIHByaXZhdGUga2V5LiBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgIlBFTSIgYW5kIGNhbiBiZQorY2hhbmdlZCB3aXRoIFxmSUNVUkxPUFRfU1NMS0VZVFlQRVxmUC4KKy5JUCBDVVJMT1BUX1NTTEtFWVRZUEUKK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIFRoZSBzdHJpbmcgc2hvdWxkIGJlCit0aGUgZm9ybWF0IG9mIHlvdXIgcHJpdmF0ZSBrZXkuIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSAiUEVNIiwgIkRFUiIgYW5kICJFTkciLgorCitUaGUgZm9ybWF0ICJFTkciIGVuYWJsZXMgeW91IHRvIGxvYWQgdGhlIHByaXZhdGUga2V5IGZyb20gYSBjcnlwdG8gZW5naW5lLiBJbgordGhpcyBjYXNlIFxmSUNVUkxPUFRfU1NMS0VZXGZQIGlzIHVzZWQgYXMgYW4gaWRlbnRpZmllciBwYXNzZWQgdG8gdGhlCitlbmdpbmUuIFlvdSBoYXZlIHRvIHNldCB0aGUgY3J5cHRvIGVuZ2luZSB3aXRoIFxmSUNVUkxPUFRfU1NMRU5HSU5FXGZQLgorXCYiREVSIiBmb3JtYXQga2V5IGZpbGUgY3VycmVudGx5IGRvZXMgbm90IHdvcmsgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBPcGVuU1NMLgorLklQIENVUkxPUFRfS0VZUEFTU1dECitQYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgYXMgcGFyYW1ldGVyLiBJdCB3aWxsIGJlIHVzZWQgYXMKK3RoZSBwYXNzd29yZCByZXF1aXJlZCB0byB1c2UgdGhlIFxmSUNVUkxPUFRfU1NMS0VZXGZQIG9yCitcZklDVVJMT1BUX1NTSF9QUklWQVRFX0tFWUZJTEVcZlAgcHJpdmF0ZSBrZXkuCitZb3UgbmV2ZXIgbmVlZGVkIGEgcGFzcyBwaHJhc2UgdG8gbG9hZCBhIGNlcnRpZmljYXRlIGJ1dCB5b3UgbmVlZCBvbmUgdG8KK2xvYWQgeW91ciBwcml2YXRlIGtleS4KKworKFRoaXMgb3B0aW9uIHdhcyBrbm93biBhcyBDVVJMT1BUX1NTTEtFWVBBU1NXRCB1cCB0byA3LjE2LjQgYW5kCitDVVJMT1BUX1NTTENFUlRQQVNTV0QgdXAgdG8gNy45LjIpCisuSVAgQ1VSTE9QVF9TU0xFTkdJTkUKK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIEl0IHdpbGwgYmUgdXNlZCBhcwordGhlIGlkZW50aWZpZXIgZm9yIHRoZSBjcnlwdG8gZW5naW5lIHlvdSB3YW50IHRvIHVzZSBmb3IgeW91ciBwcml2YXRlCitrZXkuCisKK0lmIHRoZSBjcnlwdG8gZGV2aWNlIGNhbm5vdCBiZSBsb2FkZWQsIFxmSUNVUkxFX1NTTF9FTkdJTkVfTk9URk9VTkRcZlAgaXMKK3JldHVybmVkLgorLklQIENVUkxPUFRfU1NMRU5HSU5FX0RFRkFVTFQKK1NldHMgdGhlIGFjdHVhbCBjcnlwdG8gZW5naW5lIGFzIHRoZSBkZWZhdWx0IGZvciAoYXN5bW1ldHJpYykgY3J5cHRvCitvcGVyYXRpb25zLgorCitJZiB0aGUgY3J5cHRvIGRldmljZSBjYW5ub3QgYmUgc2V0LCBcZklDVVJMRV9TU0xfRU5HSU5FX1NFVEZBSUxFRFxmUCBpcworcmV0dXJuZWQuCisKK0V2ZW4gdGhvdWdoIHRoaXMgb3B0aW9uIGRvZXNuJ3QgbmVlZCBhbnkgcGFyYW1ldGVyLCBpbiBzb21lIGNvbmZpZ3VyYXRpb25zCitcZkljdXJsX2Vhc3lfc2V0b3B0XGZQIG1pZ2h0IGJlIGRlZmluZWQgYXMgYSBtYWNybyB0YWtpbmcgZXhhY3RseSB0aHJlZQorYXJndW1lbnRzLiBUaGVyZWZvcmUsIGl0J3MgcmVjb21tZW5kZWQgdG8gcGFzcyAxIGFzIHBhcmFtZXRlciB0byB0aGlzIG9wdGlvbi4KKy5JUCBDVVJMT1BUX1NTTFZFUlNJT04KK1Bhc3MgYSBsb25nIGFzIHBhcmFtZXRlciB0byBjb250cm9sIHdoYXQgdmVyc2lvbiBvZiBTU0wvVExTIHRvIGF0dGVtcHQgdG8gdXNlLgorVGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZToKKy5SUworLklQIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUCitUaGUgZGVmYXVsdCBhY3Rpb24uIFRoaXMgd2lsbCBhdHRlbXB0IHRvIGZpZ3VyZSBvdXQgdGhlIHJlbW90ZSBTU0wgcHJvdG9jb2wKK3ZlcnNpb24sIGkuZS4gZWl0aGVyIFNTTHYzIG9yIFRMU3YxIChidXQgbm90IFNTTHYyLCB3aGljaCBiZWNhbWUgZGlzYWJsZWQKK2J5IGRlZmF1bHQgd2l0aCA3LjE4LjEpLgorLklQIENVUkxfU1NMVkVSU0lPTl9UTFN2MQorRm9yY2UgVExTdjEKKy5JUCBDVVJMX1NTTFZFUlNJT05fU1NMdjIKK0ZvcmNlIFNTTHYyCisuSVAgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzCitGb3JjZSBTU0x2MworLlJFCisuSVAgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUgorUGFzcyBhIGxvbmcgYXMgcGFyYW1ldGVyLiBCeSBkZWZhdWx0LCBjdXJsIGFzc3VtZXMgYSB2YWx1ZSBvZiAxLgorCitUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgY3VybCB2ZXJpZmllcyB0aGUgYXV0aGVudGljaXR5IG9mIHRoZSBwZWVyJ3MKK2NlcnRpZmljYXRlLiBBIHZhbHVlIG9mIDEgbWVhbnMgY3VybCB2ZXJpZmllczsgMCAoemVybykgbWVhbnMgaXQgZG9lc24ndC4KKworV2hlbiBuZWdvdGlhdGluZyBhIFNTTCBjb25uZWN0aW9uLCB0aGUgc2VydmVyIHNlbmRzIGEgY2VydGlmaWNhdGUgaW5kaWNhdGluZworaXRzIGlkZW50aXR5LiAgQ3VybCB2ZXJpZmllcyB3aGV0aGVyIHRoZSBjZXJ0aWZpY2F0ZSBpcyBhdXRoZW50aWMsIGkuZS4gdGhhdAoreW91IGNhbiB0cnVzdCB0aGF0IHRoZSBzZXJ2ZXIgaXMgd2hvIHRoZSBjZXJ0aWZpY2F0ZSBzYXlzIGl0IGlzLiAgVGhpcyB0cnVzdAoraXMgYmFzZWQgb24gYSBjaGFpbiBvZiBkaWdpdGFsIHNpZ25hdHVyZXMsIHJvb3RlZCBpbiBjZXJ0aWZpY2F0aW9uIGF1dGhvcml0eQorKENBKSBjZXJ0aWZpY2F0ZXMgeW91IHN1cHBseS4gIGN1cmwgdXNlcyBhIGRlZmF1bHQgYnVuZGxlIG9mIENBIGNlcnRpZmljYXRlcworKHRoZSBwYXRoIGZvciB0aGF0IGlzIGRldGVybWluZWQgYXQgYnVpbGQgdGltZSkgYW5kIHlvdSBjYW4gc3BlY2lmeSBhbHRlcm5hdGUKK2NlcnRpZmljYXRlcyB3aXRoIHRoZSBcZklDVVJMT1BUX0NBSU5GT1xmUCBvcHRpb24gb3IgdGhlIFxmSUNVUkxPUFRfQ0FQQVRIXGZQCitvcHRpb24uCisKK1doZW4gXGZJQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUlxmUCBpcyBub256ZXJvLCBhbmQgdGhlIHZlcmlmaWNhdGlvbiBmYWlscyB0bworcHJvdmUgdGhhdCB0aGUgY2VydGlmaWNhdGUgaXMgYXV0aGVudGljLCB0aGUgY29ubmVjdGlvbiBmYWlscy4gIFdoZW4gdGhlCitvcHRpb24gaXMgemVybywgdGhlIHBlZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHN1Y2NlZWRzIHJlZ2FyZGxlc3MuCisKK0F1dGhlbnRpY2F0aW5nIHRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgYnkgaXRzZWxmIHZlcnkgdXNlZnVsLiAgWW91IHR5cGljYWxseQord2FudCB0byBlbnN1cmUgdGhhdCB0aGUgc2VydmVyLCBhcyBhdXRoZW50aWNhbGx5IGlkZW50aWZpZWQgYnkgaXRzCitjZXJ0aWZpY2F0ZSwgaXMgdGhlIHNlcnZlciB5b3UgbWVhbiB0byBiZSB0YWxraW5nIHRvLiAgVXNlCitcZklDVVJMT1BUX1NTTF9WRVJJRllIT1NUXGZQIHRvIGNvbnRyb2wgdGhhdC4gVGhlIGNoZWNrIHRoYXQgdGhlIGhvc3QgbmFtZSBpbgordGhlIGNlcnRpZmljYXRlIGlzIHZhbGlkIGZvciB0aGUgaG9zdCBuYW1lIHlvdSdyZSBjb25uZWN0aW5nIHRvIGlzIGRvbmUKK2luZGVwZW5kZW50bHkgb2YgdGhlIFxmSUNVUkxPUFRfU1NMX1ZFUklGWVBFRVJcZlAgb3B0aW9uLgorLklQIENVUkxPUFRfQ0FJTkZPCitQYXNzIGEgY2hhciAqIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBuYW1pbmcgYSBmaWxlIGhvbGRpbmcgb25lIG9yIG1vcmUKK2NlcnRpZmljYXRlcyB0byB2ZXJpZnkgdGhlIHBlZXIgd2l0aC4gIFRoaXMgbWFrZXMgc2Vuc2Ugb25seSB3aGVuIHVzZWQgaW4KK2NvbWJpbmF0aW9uIHdpdGggdGhlIFxmSUNVUkxPUFRfU1NMX1ZFUklGWVBFRVJcZlAgb3B0aW9uLiAgSWYKK1xmSUNVUkxPUFRfU1NMX1ZFUklGWVBFRVJcZlAgaXMgemVybywgXGZJQ1VSTE9QVF9DQUlORk9cZlAgbmVlZCBub3QKK2V2ZW4gaW5kaWNhdGUgYW4gYWNjZXNzaWJsZSBmaWxlLgorCitUaGlzIG9wdGlvbiBpcyBieSBkZWZhdWx0IHNldCB0byB0aGUgc3lzdGVtIHBhdGggd2hlcmUgbGliY3VybCdzIGNhY2VydCBidW5kbGUKK2lzIGFzc3VtZWQgdG8gYmUgc3RvcmVkLCBhcyBlc3RhYmxpc2hlZCBhdCBidWlsZCB0aW1lLgorCitXaGVuIGJ1aWx0IGFnYWluc3QgTlNTLCB0aGlzIGlzIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgTlNTIGNlcnRpZmljYXRlCitkYXRhYmFzZSByZXNpZGVzIGluLgorLklQIENVUkxPUFRfSVNTVUVSQ0VSVAorUGFzcyBhIGNoYXIgKiB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgbmFtaW5nIGEgZmlsZSBob2xkaW5nIGEgQ0EKK2NlcnRpZmljYXRlIGluIFBFTSBmb3JtYXQuIElmIHRoZSBvcHRpb24gaXMgc2V0LCBhbiBhZGRpdGlvbmFsIGNoZWNrIGFnYWluc3QKK3RoZSBwZWVyIGNlcnRpZmljYXRlIGlzIHBlcmZvcm1lZCB0byB2ZXJpZnkgdGhlIGlzc3VlciBpcyBpbmRlZWQgdGhlIG9uZQorYXNzb2NpYXRlZCB3aXRoIHRoZSBjZXJ0aWZpY2F0ZSBwcm92aWRlZCBieSB0aGUgb3B0aW9uLiBUaGlzIGFkZGl0aW9uYWwgY2hlY2sKK2lzIHVzZWZ1bCBpbiBtdWx0aS1sZXZlbCBQS0kgd2hlcmUgb25lIG5lZWRzIHRvIGVuZm9yY2UgdGhhdCB0aGUgcGVlcgorY2VydGlmaWNhdGUgaXMgZnJvbSBhIHNwZWNpZmljIGJyYW5jaCBvZiB0aGUgdHJlZS4KKworVGhpcyBvcHRpb24gbWFrZXMgc2Vuc2Ugb25seSB3aGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUKK1xmSUNVUkxPUFRfU1NMX1ZFUklGWVBFRVJcZlAgb3B0aW9uLiBPdGhlcndpc2UsIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrIGlzIG5vdAorY29uc2lkZXJlZCBhcyBmYWlsdXJlLgorCitBIHNwZWNpZmljIGVycm9yIGNvZGUgKENVUkxFX1NTTF9JU1NVRVJfRVJST1IpIGlzIGRlZmluZWQgd2l0aCB0aGUgb3B0aW9uLAord2hpY2ggaXMgcmV0dXJuZWQgaWYgdGhlIHNldHVwIG9mIHRoZSBTU0wvVExTIHNlc3Npb24gaGFzIGZhaWxlZCBkdWUgdG8gYQorbWlzbWF0Y2ggd2l0aCB0aGUgaXNzdWVyIG9mIHBlZXIgY2VydGlmaWNhdGUgKFxmSUNVUkxPUFRfU1NMX1ZFUklGWVBFRVJcZlAgaGFzCit0byBiZSBzZXQgdG9vIGZvciB0aGUgY2hlY2sgdG8gZmFpbCkuIChBZGRlZCBpbiA3LjE5LjApCisuSVAgQ1VSTE9QVF9DQVBBVEgKK1Bhc3MgYSBjaGFyICogdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIG5hbWluZyBhIGRpcmVjdG9yeSBob2xkaW5nIG11bHRpcGxlCitDQSBjZXJ0aWZpY2F0ZXMgdG8gdmVyaWZ5IHRoZSBwZWVyIHdpdGguIElmIGxpYmN1cmwgaXMgYnVpbHQgYWdhaW5zdCBPcGVuU1NMLAordGhlIGNlcnRpZmljYXRlIGRpcmVjdG9yeSBtdXN0IGJlIHByZXBhcmVkIHVzaW5nIHRoZSBvcGVuc3NsIGNfcmVoYXNoIHV0aWxpdHkuCitUaGlzIG1ha2VzIHNlbnNlIG9ubHkgd2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlCitcZklDVVJMT1BUX1NTTF9WRVJJRllQRUVSXGZQIG9wdGlvbi4gIElmIFxmSUNVUkxPUFRfU1NMX1ZFUklGWVBFRVJcZlAgaXMgemVybywKK1xmSUNVUkxPUFRfQ0FQQVRIXGZQIG5lZWQgbm90IGV2ZW4gaW5kaWNhdGUgYW4gYWNjZXNzaWJsZSBwYXRoLiAgVGhlCitcZklDVVJMT1BUX0NBUEFUSFxmUCBmdW5jdGlvbiBhcHBhcmVudGx5IGRvZXMgbm90IHdvcmsgaW4gV2luZG93cyBkdWUgdG8gc29tZQorbGltaXRhdGlvbiBpbiBvcGVuc3NsLiBUaGlzIG9wdGlvbiBpcyBPcGVuU1NMLXNwZWNpZmljIGFuZCBkb2VzIG5vdGhpbmcgaWYKK2xpYmN1cmwgaXMgYnVpbHQgdG8gdXNlIEdudVRMUy4gTlNTLXBvd2VyZWQgbGliY3VybCBwcm92aWRlcyB0aGUgb3B0aW9uIG9ubHkKK2ZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorLklQIENVUkxPUFRfQ1JMRklMRQorUGFzcyBhIGNoYXIgKiB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgbmFtaW5nIGEgZmlsZSB3aXRoIHRoZSBjb25jYXRlbmF0aW9uCitvZiBDUkwgKGluIFBFTSBmb3JtYXQpIHRvIHVzZSBpbiB0aGUgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiB0aGF0IG9jY3VycyBkdXJpbmcKK3RoZSBTU0wgZXhjaGFuZ2UuCisKK1doZW4gY3VybCBpcyBidWlsdCB0byB1c2UgTlNTIG9yIEdudVRMUywgdGhlcmUgaXMgbm8gd2F5IHRvIGluZmx1ZW5jZSB0aGUgdXNlCitvZiBDUkwgcGFzc2VkIHRvIGhlbHAgaW4gdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBXaGVuIGxpYmN1cmwgaXMgYnVpbHQgd2l0aAorT3BlblNTTCBzdXBwb3J0LCBYNTA5X1ZfRkxBR19DUkxfQ0hFQ0sgYW5kIFg1MDlfVl9GTEFHX0NSTF9DSEVDS19BTEwgYXJlIGJvdGgKK3NldCwgcmVxdWlyaW5nIENSTCBjaGVjayBhZ2FpbnN0IGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIGNlcnRpZmljYXRlIGNoYWluIGlmCithIENSTCBmaWxlIGlzIHBhc3NlZC4KKworVGhpcyBvcHRpb24gbWFrZXMgc2Vuc2Ugb25seSB3aGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUKK1xmSUNVUkxPUFRfU1NMX1ZFUklGWVBFRVJcZlAgb3B0aW9uLgorCitBIHNwZWNpZmljIGVycm9yIGNvZGUgKENVUkxFX1NTTF9DUkxfQkFERklMRSkgaXMgZGVmaW5lZCB3aXRoIHRoZSBvcHRpb24uIEl0CitpcyByZXR1cm5lZCB3aGVuIHRoZSBTU0wgZXhjaGFuZ2UgZmFpbHMgYmVjYXVzZSB0aGUgQ1JMIGZpbGUgY2Fubm90IGJlIGxvYWRlZC4KK0EgZmFpbHVyZSBpbiBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZHVlIHRvIGEgcmV2b2NhdGlvbiBpbmZvcm1hdGlvbiBmb3VuZCBpbgordGhlIENSTCBkb2VzIG5vdCB0cmlnZ2VyIHRoaXMgc3BlY2lmaWMgZXJyb3IuIChBZGRlZCBpbiA3LjE5LjApCisuSVAgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVAorUGFzcyBhIGxvbmcgYXMgcGFyYW1ldGVyLgorCitUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgbGliY3VybCB2ZXJpZmllcyB0aGF0IHRoZSBzZXJ2ZXIgY2VydCBpcyBmb3IKK3RoZSBzZXJ2ZXIgaXQgaXMga25vd24gYXMuCisKK1doZW4gbmVnb3RpYXRpbmcgYSBTU0wgY29ubmVjdGlvbiwgdGhlIHNlcnZlciBzZW5kcyBhIGNlcnRpZmljYXRlIGluZGljYXRpbmcKK2l0cyBpZGVudGl0eS4KKworV2hlbiBcZklDVVJMT1BUX1NTTF9WRVJJRllIT1NUXGZQIGlzIDIsIHRoYXQgY2VydGlmaWNhdGUgbXVzdCBpbmRpY2F0ZSB0aGF0Cit0aGUgc2VydmVyIGlzIHRoZSBzZXJ2ZXIgdG8gd2hpY2ggeW91IG1lYW50IHRvIGNvbm5lY3QsIG9yIHRoZSBjb25uZWN0aW9uCitmYWlscy4KKworQ3VybCBjb25zaWRlcnMgdGhlIHNlcnZlciB0aGUgaW50ZW5kZWQgb25lIHdoZW4gdGhlIENvbW1vbiBOYW1lIGZpZWxkIG9yIGEKK1N1YmplY3QgQWx0ZXJuYXRlIE5hbWUgZmllbGQgaW4gdGhlIGNlcnRpZmljYXRlIG1hdGNoZXMgdGhlIGhvc3QgbmFtZSBpbiB0aGUKK1VSTCB0byB3aGljaCB5b3UgdG9sZCBDdXJsIHRvIGNvbm5lY3QuCisKK1doZW4gdGhlIHZhbHVlIGlzIDEsIHRoZSBjZXJ0aWZpY2F0ZSBtdXN0IGNvbnRhaW4gYSBDb21tb24gTmFtZSBmaWVsZCwgYnV0IGl0Citkb2Vzbid0IG1hdHRlciB3aGF0IG5hbWUgaXQgc2F5cy4gIChUaGlzIGlzIG5vdCBvcmRpbmFyaWx5IGEgdXNlZnVsIHNldHRpbmcpLgorCitXaGVuIHRoZSB2YWx1ZSBpcyAwLCB0aGUgY29ubmVjdGlvbiBzdWNjZWVkcyByZWdhcmRsZXNzIG9mIHRoZSBuYW1lcyBpbiB0aGUKK2NlcnRpZmljYXRlLgorCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBvcHRpb24gaXMgMi4KKworVGhpcyBvcHRpb24gY29udHJvbHMgY2hlY2tpbmcgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlJ3MgY2xhaW1lZCBpZGVudGl0eS4KK1RoZSBzZXJ2ZXIgY291bGQgYmUgbHlpbmcuICBUbyBjb250cm9sIGx5aW5nLCBzZWUKK1xmSUNVUkxPUFRfU1NMX1ZFUklGWVBFRVJcZlAuICBJZiBsaWJjdXJsIGlzIGJ1aWx0IGFnYWluc3QgTlNTIGFuZAorXGZJQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUlxmUCBpcyB6ZXJvLCBcZklDVVJMT1BUX1NTTF9WRVJJRllIT1NUXGZQCitpcyBpZ25vcmVkLgorCisuSVAgQ1VSTE9QVF9DRVJUSU5GTworUGFzcyBhIGxvbmcgc2V0IHRvIDEgdG8gZW5hYmxlIGxpYmN1cmwncyBjZXJ0aWZpY2F0ZSBjaGFpbiBpbmZvIGdhdGhlcmVyLiBXaXRoCit0aGlzIGVuYWJsZWQsIGxpYmN1cmwgKGlmIGJ1aWx0IHdpdGggT3BlblNTTCkgd2lsbCBleHRyYWN0IGxvdHMgb2YgaW5mb3JtYXRpb24KK2FuZCBkYXRhIGFib3V0IHRoZSBjZXJ0aWZpY2F0ZXMgaW4gdGhlIGNlcnRpZmljYXRlIGNoYWluIHVzZWQgaW4gdGhlIFNTTAorY29ubmVjdGlvbi4gVGhpcyBkYXRhIGlzIHRoZW4gcG9zc2libGUgdG8gZXh0cmFjdCBhZnRlciBhIHRyYW5zZmVyIHVzaW5nCitcZkljdXJsX2Vhc3lfZ2V0aW5mbygzKVxmUCBhbmQgaXRzIG9wdGlvbiBcZklDVVJMSU5GT19DRVJUSU5GT1xmUC4gKEFkZGVkIGluCis3LjE5LjEpCisuSVAgQ1VSTE9QVF9SQU5ET01fRklMRQorUGFzcyBhIGNoYXIgKiB0byBhIHplcm8gdGVybWluYXRlZCBmaWxlIG5hbWUuIFRoZSBmaWxlIHdpbGwgYmUgdXNlZCB0byByZWFkCitmcm9tIHRvIHNlZWQgdGhlIHJhbmRvbSBlbmdpbmUgZm9yIFNTTC4gVGhlIG1vcmUgcmFuZG9tIHRoZSBzcGVjaWZpZWQgZmlsZSBpcywKK3RoZSBtb3JlIHNlY3VyZSB0aGUgU1NMIGNvbm5lY3Rpb24gd2lsbCBiZWNvbWUuCisuSVAgQ1VSTE9QVF9FR0RTT0NLRVQKK1Bhc3MgYSBjaGFyICogdG8gdGhlIHplcm8gdGVybWluYXRlZCBwYXRoIG5hbWUgdG8gdGhlIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vbgorc29ja2V0LiBJdCB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgcmFuZG9tIGVuZ2luZSBmb3IgU1NMLgorLklQIENVUkxPUFRfU1NMX0NJUEhFUl9MSVNUCitQYXNzIGEgY2hhciAqLCBwb2ludGluZyB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgaG9sZGluZyB0aGUgbGlzdCBvZgorY2lwaGVycyB0byB1c2UgZm9yIHRoZSBTU0wgY29ubmVjdGlvbi4gVGhlIGxpc3QgbXVzdCBiZSBzeW50YWN0aWNhbGx5IGNvcnJlY3QsCitpdCBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBjaXBoZXIgc3RyaW5ncyBzZXBhcmF0ZWQgYnkgY29sb25zLiBDb21tYXMgb3IKK3NwYWNlcyBhcmUgYWxzbyBhY2NlcHRhYmxlIHNlcGFyYXRvcnMgYnV0IGNvbG9ucyBhcmUgbm9ybWFsbHkgdXNlZCwgXCYhLCBcJi0KK2FuZCBcJisgY2FuIGJlIHVzZWQgYXMgb3BlcmF0b3JzLgorCitGb3IgT3BlblNTTCBhbmQgR251VExTIHZhbGlkIGV4YW1wbGVzIG9mIGNpcGhlciBsaXN0cyBpbmNsdWRlICdSQzQtU0hBJywKK1wnU0hBMStERVNcJywgJ1RMU3YxJyBhbmQgJ0RFRkFVTFQnLiBUaGUgZGVmYXVsdCBsaXN0IGlzIG5vcm1hbGx5IHNldCB3aGVuIHlvdQorY29tcGlsZSBPcGVuU1NMLgorCitZb3UnbGwgZmluZCBtb3JlIGRldGFpbHMgYWJvdXQgY2lwaGVyIGxpc3RzIG9uIHRoaXMgVVJMOgorXGZJaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2FwcHMvY2lwaGVycy5odG1sXGZQCisKK0ZvciBOU1MsIHZhbGlkIGV4YW1wbGVzIG9mIGNpcGhlciBsaXN0cyBpbmNsdWRlICdyc2FfcmM0XzEyOF9tZDUnLAorXCdyc2FfYWVzXzEyOF9zaGFcJywgZXRjLiBXaXRoIE5TUyB5b3UgZG9uJ3QgYWRkL3JlbW92ZSBjaXBoZXJzLiBJZiBvbmUgdXNlcwordGhpcyBvcHRpb24gdGhlbiBhbGwga25vd24gY2lwaGVycyBhcmUgZGlzYWJsZWQgYW5kIG9ubHkgdGhvc2UgcGFzc2VkIGluCithcmUgZW5hYmxlZC4KKworWW91J2xsIGZpbmQgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBOU1MgY2lwaGVyIGxpc3RzIG9uIHRoaXMgVVJMOgorXGZJaHR0cDovL2RpcmVjdG9yeS5mZWRvcmEucmVkaGF0LmNvbS9kb2NzL21vZF9uc3MuaHRtbCNEaXJlY3RpdmVzXGZQCisKKy5JUCBDVVJMT1BUX1NTTF9TRVNTSU9OSURfQ0FDSEUKK1Bhc3MgYSBsb25nIHNldCB0byAwIHRvIGRpc2FibGUgbGliY3VybCdzIHVzZSBvZiBTU0wgc2Vzc2lvbi1JRCBjYWNoaW5nLiBTZXQKK3RoaXMgdG8gMSB0byBlbmFibGUgaXQuIEJ5IGRlZmF1bHQgYWxsIHRyYW5zZmVycyBhcmUgZG9uZSB1c2luZyB0aGUKK2NhY2hlLiBXaGlsZSBub3RoaW5nIGV2ZXIgc2hvdWxkIGdldCBodXJ0IGJ5IGF0dGVtcHRpbmcgdG8gcmV1c2UgU1NMCitzZXNzaW9uLUlEcywgdGhlcmUgc2VlbSB0byBiZSBicm9rZW4gU1NMIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgd2lsZCB0aGF0IG1heQorcmVxdWlyZSB5b3UgdG8gZGlzYWJsZSB0aGlzIGluIG9yZGVyIGZvciB5b3UgdG8gc3VjY2VlZC4gKEFkZGVkIGluIDcuMTYuMCkKKy5JUCBDVVJMT1BUX1NTTF9PUFRJT05TCitQYXNzIGEgbG9uZyB3aXRoIGEgYml0bWFzayB0byB0ZWxsIGxpYmN1cmwgYWJvdXQgc3BlY2lmaWMgU1NMIGJlaGF2aW9ycy4KKworQ1VSTFNTTE9QVF9BTExPV19CRUFTVCBpcyB0aGUgb25seSBzdXBwb3J0ZWQgYml0IGFuZCBieSBzZXR0aW5nIHRoaXMgdGhlIHVzZXIKK3dpbGwgdGVsbCBsaWJjdXJsIHRvIG5vdCBhdHRlbXB0IHRvIHVzZSBhbnkgd29yay1hcm91bmRzIGZvciBhIHNlY3VyaXR5IGZsYXcKK2luIHRoZSBTU0wzIGFuZCBUTFMxLjAgcHJvdG9jb2xzLiAgSWYgdGhpcyBvcHRpb24gaXNuJ3QgdXNlZCBvciB0aGlzIGJpdCBpcworc2V0IHRvIDAsIHRoZSBTU0wgbGF5ZXIgbGliY3VybCB1c2VzIG1heSB1c2UgYSB3b3JrLWFyb3VuZCBmb3IgdGhpcyBmbGF3CithbHRob3VnaCBpdCBtaWdodCBjYXVzZSBpbnRlcm9wZXJhYmlsaXR5IHByb2JsZW1zIHdpdGggc29tZSAob2xkZXIpIFNTTAoraW1wbGVtZW50YXRpb25zLiBXQVJOSU5HOiBhdm9pZGluZyB0aGlzIHdvcmstYXJvdW5kIGxvb3NlbnMgdGhlIHNlY3VyaXR5LCBhbmQKK2J5IHNldHRpbmcgdGhpcyBvcHRpb24gdG8gMSB5b3UgYXNrIGZvciBleGFjdGx5IHRoYXQuIChBZGRlZCBpbiA3LjI1LjApCisuSVAgQ1VSTE9QVF9LUkJMRVZFTAorUGFzcyBhIGNoYXIgKiBhcyBwYXJhbWV0ZXIuIFNldCB0aGUga2VyYmVyb3Mgc2VjdXJpdHkgbGV2ZWwgZm9yIEZUUDsgdGhpcyBhbHNvCitlbmFibGVzIGtlcmJlcm9zIGF3YXJlbmVzcy4gIFRoaXMgaXMgYSBzdHJpbmcsIFwmJ2NsZWFyJywgXCYnc2FmZScsCitcJidjb25maWRlbnRpYWwnIG9yIFwmJ3ByaXZhdGUnLiAgSWYgdGhlIHN0cmluZyBpcyBzZXQgYnV0IGRvZXNuJ3QgbWF0Y2ggb25lCitvZiB0aGVzZSwgJ3ByaXZhdGUnIHdpbGwgYmUgdXNlZC4gU2V0IHRoZSBzdHJpbmcgdG8gTlVMTCB0byBkaXNhYmxlIGtlcmJlcm9zCitzdXBwb3J0IGZvciBGVFAuCisKKyhUaGlzIG9wdGlvbiB3YXMga25vd24gYXMgQ1VSTE9QVF9LUkI0TEVWRUwgdXAgdG8gNy4xNi4zKQorLklQIENVUkxPUFRfR1NTQVBJX0RFTEVHQVRJT04KK1NldCB0aGUgcGFyYW1ldGVyIHRvIENVUkxHU1NBUElfREVMRUdBVElPTl9GTEFHIHRvIGFsbG93IHVuY29uZGl0aW9uYWwgR1NTQVBJCitjcmVkZW50aWFsIGRlbGVnYXRpb24uICBUaGUgZGVsZWdhdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IHNpbmNlIDcuMjEuNy4KK1NldCB0aGUgcGFyYW1ldGVyIHRvIENVUkxHU1NBUElfREVMRUdBVElPTl9QT0xJQ1lfRkxBRyB0byBkZWxlZ2F0ZSBvbmx5IGlmCit0aGUgT0stQVMtREVMRUdBVEUgZmxhZyBpcyBzZXQgaW4gdGhlIHNlcnZpY2UgdGlja2V0IGluIGNhc2UgdGhpcyBmZWF0dXJlIGlzCitzdXBwb3J0ZWQgYnkgdGhlIEdTU0FQSSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIGRlZmluaXRpb24gb2YKK0dTU19DX0RFTEVHX1BPTElDWV9GTEFHIHdhcyBhdmFpbGFibGUgYXQgY29tcGlsZS10aW1lLgorKEFkZGVkIGluIDcuMjIuMCkKKy5TSCBTU0ggT1BUSU9OUworLklQIENVUkxPUFRfU1NIX0FVVEhfVFlQRVMKK1Bhc3MgYSBsb25nIHNldCB0byBhIGJpdG1hc2sgY29uc2lzdGluZyBvZiBvbmUgb3IgbW9yZSBvZgorQ1VSTFNTSF9BVVRIX1BVQkxJQ0tFWSwgQ1VSTFNTSF9BVVRIX1BBU1NXT1JELCBDVVJMU1NIX0FVVEhfSE9TVCwKK0NVUkxTU0hfQVVUSF9LRVlCT0FSRC4gU2V0IENVUkxTU0hfQVVUSF9BTlkgdG8gbGV0IGxpYmN1cmwgcGljayBvbmUuIEN1cnJlbnRseQorQ1VSTFNTSF9BVVRIX0hPU1QgaGFzIG5vIGVmZmVjdC4gKEFkZGVkIGluIDcuMTYuMSkKKy5JUCBDVVJMT1BUX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1CitQYXNzIGEgY2hhciAqIHBvaW50aW5nIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgMzIgaGV4YWRlY2ltYWwgZGlnaXRzLiBUaGUKK3N0cmluZyBzaG91bGQgYmUgdGhlIDEyOCBiaXQgTUQ1IGNoZWNrc3VtIG9mIHRoZSByZW1vdGUgaG9zdCdzIHB1YmxpYyBrZXksIGFuZAorbGliY3VybCB3aWxsIHJlamVjdCB0aGUgY29ubmVjdGlvbiB0byB0aGUgaG9zdCB1bmxlc3MgdGhlIG1kNXN1bXMgbWF0Y2guIFRoaXMKK29wdGlvbiBpcyBvbmx5IGZvciBTQ1AgYW5kIFNGVFAgdHJhbnNmZXJzLiAoQWRkZWQgaW4gNy4xNy4xKQorLklQIENVUkxPUFRfU1NIX1BVQkxJQ19LRVlGSUxFCitQYXNzIGEgY2hhciAqIHBvaW50aW5nIHRvIGEgZmlsZSBuYW1lIGZvciB5b3VyIHB1YmxpYyBrZXkuIElmIG5vdCB1c2VkLAorbGliY3VybCBkZWZhdWx0cyB0byBcZkIkSE9NRS8uc3NoL2lkX2RzYS5wdWJcZlAgaWYgdGhlIEhPTUUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIGlzIHNldCwgYW5kIGp1c3QgImlkX2RzYS5wdWIiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiBIT01FIGlzIG5vdAorc2V0LiAgKEFkZGVkIGluIDcuMTYuMSkKKy5JUCBDVVJMT1BUX1NTSF9QUklWQVRFX0tFWUZJTEUKK1Bhc3MgYSBjaGFyICogcG9pbnRpbmcgdG8gYSBmaWxlIG5hbWUgZm9yIHlvdXIgcHJpdmF0ZSBrZXkuIElmIG5vdCB1c2VkLAorbGliY3VybCBkZWZhdWx0cyB0byBcZkIkSE9NRS8uc3NoL2lkX2RzYVxmUCBpZiB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZQoraXMgc2V0LCBhbmQganVzdCAiaWRfZHNhIiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaWYgSE9NRSBpcyBub3Qgc2V0LiAgSWYgdGhlCitmaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCwgc2V0IHRoZSBwYXNzd29yZCB3aXRoCitcZklDVVJMT1BUX0tFWVBBU1NXRFxmUC4gKEFkZGVkIGluIDcuMTYuMSkKKy5JUCBDVVJMT1BUX1NTSF9LTk9XTkhPU1RTCitQYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgaG9sZGluZyB0aGUgZmlsZSBuYW1lIG9mIHRoZQora25vd25faG9zdCBmaWxlIHRvIHVzZS4gIFRoZSBrbm93bl9ob3N0cyBmaWxlIHNob3VsZCB1c2UgdGhlIE9wZW5TU0ggZmlsZQorZm9ybWF0IGFzIHN1cHBvcnRlZCBieSBsaWJzc2gyLiBJZiB0aGlzIGZpbGUgaXMgc3BlY2lmaWVkLCBsaWJjdXJsIHdpbGwgb25seQorYWNjZXB0IGNvbm5lY3Rpb25zIHdpdGggaG9zdHMgdGhhdCBhcmUga25vd24gYW5kIHByZXNlbnQgaW4gdGhhdCBmaWxlLCB3aXRoIGEKK21hdGNoaW5nIHB1YmxpYyBrZXkuIFVzZSBcZklDVVJMT1BUX1NTSF9LRVlGVU5DVElPTlxmUCB0byBhbHRlciB0aGUgZGVmYXVsdAorYmVoYXZpb3Igb24gaG9zdCBhbmQga2V5IChtaXMpbWF0Y2hpbmcuIChBZGRlZCBpbiA3LjE5LjYpCisuSVAgQ1VSTE9QVF9TU0hfS0VZRlVOQ1RJT04KK1Bhc3MgYSBwb2ludGVyIHRvIGEgY3VybF9zc2hrZXljYWxsYmFjayBmdW5jdGlvbi4gSXQgZ2V0cyBjYWxsZWQgd2hlbiB0aGUKK2tub3duX2hvc3QgbWF0Y2hpbmcgaGFzIGJlZW4gZG9uZSwgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGFjdCBhbmQgZGVjaWRlCitmb3IgbGliY3VybCBob3cgdG8gcHJvY2VlZC4gVGhlIGNhbGxiYWNrIHdpbGwgb25seSBiZSBjYWxsZWQgaWYKK1xmSUNVUkxPUFRfU1NIX0tOT1dOSE9TVFNcZlAgaXMgYWxzbyBzZXQuCisKK1RoZSBjdXJsX3NzaGtleWNhbGxiYWNrIGZ1bmN0aW9uIGdldHMgcGFzc2VkIHRoZSBDVVJMIGhhbmRsZSwgdGhlIGtleSBmcm9tIHRoZQora25vd25faG9zdHMgZmlsZSwgdGhlIGtleSBmcm9tIHRoZSByZW1vdGUgc2l0ZSwgaW5mbyBmcm9tIGxpYmN1cmwgb24gdGhlCittYXRjaGluZyBzdGF0dXMgYW5kIGEgY3VzdG9tIHBvaW50ZXIgKHNldCB3aXRoIFxmSUNVUkxPUFRfU1NIX0tFWURBVEFcZlApLiBJdAorTVVTVCByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJuIGNvZGVzIHRvIHRlbGwgbGliY3VybCBob3cgdG8gYWN0OgorLlJTCisuSVAgQ1VSTEtIU1RBVF9GSU5FX0FERF9UT19GSUxFCitUaGUgaG9zdCtrZXkgaXMgYWNjZXB0ZWQgYW5kIGxpYmN1cmwgd2lsbCBhcHBlbmQgaXQgdG8gdGhlIGtub3duX2hvc3RzIGZpbGUKK2JlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIGNvbm5lY3Rpb24uIFRoaXMgd2lsbCBhbHNvIGFkZCB0aGUgaG9zdCtrZXkgY29tYm8KK3RvIHRoZSBrbm93bl9ob3N0IHBvb2wga2VwdCBpbiBtZW1vcnkgaWYgaXQgd2Fzbid0IGFscmVhZHkgcHJlc2VudCB0aGVyZS4gVGhlCithZGRpbmcgb2YgZGF0YSB0byB0aGUgZmlsZSBpcyBkb25lIGJ5IGNvbXBsZXRlbHkgcmVwbGFjaW5nIHRoZSBmaWxlIHdpdGggYSBuZXcKK2NvcHksIHNvIHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgZmlsZSBtdXN0IGFsbG93IHRoaXMuCisuSVAgQ1VSTEtIU1RBVF9GSU5FCitUaGUgaG9zdCtrZXkgaXMgYWNjZXB0ZWQgbGliY3VybCB3aWxsIGNvbnRpbnVlIHdpdGggdGhlIGNvbm5lY3Rpb24uIFRoaXMgd2lsbAorYWxzbyBhZGQgdGhlIGhvc3Qra2V5IGNvbWJvIHRvIHRoZSBrbm93bl9ob3N0IHBvb2wga2VwdCBpbiBtZW1vcnkgaWYgaXQgd2Fzbid0CithbHJlYWR5IHByZXNlbnQgdGhlcmUuCisuSVAgQ1VSTEtIU1RBVF9SRUpFQ1QKK1RoZSBob3N0K2tleSBpcyByZWplY3RlZC4gbGliY3VybCB3aWxsIGRlbnkgdGhlIGNvbm5lY3Rpb24gdG8gY29udGludWUgYW5kIGl0Cit3aWxsIGJlIGNsb3NlZC4KKy5JUCBDVVJMS0hTVEFUX0RFRkVSCitUaGUgaG9zdCtrZXkgaXMgcmVqZWN0ZWQsIGJ1dCB0aGUgU1NIIGNvbm5lY3Rpb24gaXMgYXNrZWQgdG8gYmUga2VwdCBhbGl2ZS4KK1RoaXMgZmVhdHVyZSBjb3VsZCBiZSB1c2VkIHdoZW4gdGhlIGFwcCB3YW50cyB0byBzb21laG93IHJldHVybiBiYWNrIGFuZCBhY3QKK29uIHRoZSBob3N0K2tleSBzaXR1YXRpb24gYW5kIHRoZW4gcmV0cnkgd2l0aG91dCBuZWVkaW5nIHRoZSBvdmVyaGVhZCBvZgorc2V0dGluZyBpdCB1cCBmcm9tIHNjcmF0Y2ggYWdhaW4uCisuUkUKKyAoQWRkZWQgaW4gNy4xOS42KQorLklQIENVUkxPUFRfU1NIX0tFWURBVEEKK1Bhc3MgYSB2b2lkICogYXMgcGFyYW1ldGVyLiBUaGlzIHBvaW50ZXIgd2lsbCBiZSBwYXNzZWQgYWxvbmcgdmVyYmF0aW0gdG8gdGhlCitjYWxsYmFjayBzZXQgd2l0aCBcZklDVVJMT1BUX1NTSF9LRVlGVU5DVElPTlxmUC4gKEFkZGVkIGluIDcuMTkuNikKKy5TSCBPVEhFUiBPUFRJT05TCisuSVAgQ1VSTE9QVF9QUklWQVRFCitQYXNzIGEgdm9pZCAqIGFzIHBhcmFtZXRlciwgcG9pbnRpbmcgdG8gZGF0YSB0aGF0IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKK3RoaXMgY3VybCBoYW5kbGUuICBUaGUgcG9pbnRlciBjYW4gc3Vic2VxdWVudGx5IGJlIHJldHJpZXZlZCB1c2luZworXGZJY3VybF9lYXN5X2dldGluZm8oMylcZlAgd2l0aCB0aGUgQ1VSTElORk9fUFJJVkFURSBvcHRpb24uIGxpYmN1cmwgaXRzZWxmCitkb2VzIG5vdGhpbmcgd2l0aCB0aGlzIGRhdGEuIChBZGRlZCBpbiA3LjEwLjMpCisuSVAgQ1VSTE9QVF9TSEFSRQorUGFzcyBhIHNoYXJlIGhhbmRsZSBhcyBhIHBhcmFtZXRlci4gVGhlIHNoYXJlIGhhbmRsZSBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5CithIHByZXZpb3VzIGNhbGwgdG8gXGZJY3VybF9zaGFyZV9pbml0KDMpXGZQLiBTZXR0aW5nIHRoaXMgb3B0aW9uLCB3aWxsIG1ha2UKK3RoaXMgY3VybCBoYW5kbGUgdXNlIHRoZSBkYXRhIGZyb20gdGhlIHNoYXJlZCBoYW5kbGUgaW5zdGVhZCBvZiBrZWVwaW5nIHRoZQorZGF0YSB0byBpdHNlbGYuIFRoaXMgZW5hYmxlcyBzZXZlcmFsIGN1cmwgaGFuZGxlcyB0byBzaGFyZSBkYXRhLiBJZiB0aGUgY3VybAoraGFuZGxlcyBhcmUgdXNlZCBzaW11bHRhbmVvdXNseSBpbiBtdWx0aXBsZSB0aHJlYWRzLCB5b3UgXGZCTVVTVFxmUCB1c2UgdGhlCitsb2NraW5nIG1ldGhvZHMgaW4gdGhlIHNoYXJlIGhhbmRsZS4gU2VlIFxmSWN1cmxfc2hhcmVfc2V0b3B0KDMpXGZQIGZvcgorZGV0YWlscy4KKworSWYgeW91IGFkZCBhIHNoYXJlIHRoYXQgaXMgc2V0IHRvIHNoYXJlIGNvb2tpZXMsIHlvdXIgZWFzeSBoYW5kbGUgd2lsbCB1c2UKK3RoYXQgY29va2llIGNhY2hlIGFuZCBnZXQgdGhlIGNvb2tpZSBlbmdpbmUgZW5hYmxlZC4gSWYgeW91IHVuc2hhcmUgYW4gb2JqZWN0Cit0aGF0IHdhcyB1c2luZyBjb29raWVzIChvciBjaGFuZ2UgdG8gYW5vdGhlciBvYmplY3QgdGhhdCBkb2Vzbid0IHNoYXJlCitjb29raWVzKSwgdGhlIGVhc3kgaGFuZGxlIHdpbGwgZ2V0IGl0cyBjb29raWUgZW5naW5lIGRpc2FibGVkLgorCitEYXRhIHRoYXQgdGhlIHNoYXJlIG9iamVjdCBpcyBub3Qgc2V0IHRvIHNoYXJlIHdpbGwgYmUgZGVhbHQgd2l0aCB0aGUgdXN1YWwKK3dheSwgYXMgaWYgbm8gc2hhcmUgd2FzIHVzZWQuCisuSVAgQ1VSTE9QVF9ORVdfRklMRV9QRVJNUworUGFzcyBhIGxvbmcgYXMgYSBwYXJhbWV0ZXIsIGNvbnRhaW5pbmcgdGhlIHZhbHVlIG9mIHRoZSBwZXJtaXNzaW9ucyB0aGF0IHdpbGwKK2JlIGFzc2lnbmVkIHRvIG5ld2x5IGNyZWF0ZWQgZmlsZXMgb24gdGhlIHJlbW90ZSBzZXJ2ZXIuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcworXGZJMDY0NFxmUCwgYnV0IGFueSB2YWxpZCB2YWx1ZSBjYW4gYmUgdXNlZC4gIFRoZSBvbmx5IHByb3RvY29scyB0aGF0IGNhbiB1c2UKK3RoaXMgYXJlIFxmSXNmdHA6Ly9cZlAsIFxmSXNjcDovL1xmUCwgYW5kIFxmSWZpbGU6Ly9cZlAuIChBZGRlZCBpbiA3LjE2LjQpCisuSVAgQ1VSTE9QVF9ORVdfRElSRUNUT1JZX1BFUk1TCitQYXNzIGEgbG9uZyBhcyBhIHBhcmFtZXRlciwgY29udGFpbmluZyB0aGUgdmFsdWUgb2YgdGhlIHBlcm1pc3Npb25zIHRoYXQgd2lsbAorYmUgYXNzaWduZWQgdG8gbmV3bHkgY3JlYXRlZCBkaXJlY3RvcmllcyBvbiB0aGUgcmVtb3RlIHNlcnZlci4gIFRoZSBkZWZhdWx0Cit2YWx1ZSBpcyBcZkkwNzU1XGZQLCBidXQgYW55IHZhbGlkIHZhbHVlIGNhbiBiZSB1c2VkLiAgVGhlIG9ubHkgcHJvdG9jb2xzIHRoYXQKK2NhbiB1c2UgdGhpcyBhcmUgXGZJc2Z0cDovL1xmUCwgXGZJc2NwOi8vXGZQLCBhbmQgXGZJZmlsZTovL1xmUC4KKyhBZGRlZCBpbiA3LjE2LjQpCisuU0ggVEVMTkVUIE9QVElPTlMKKy5JUCBDVVJMT1BUX1RFTE5FVE9QVElPTlMKK1Byb3ZpZGUgYSBwb2ludGVyIHRvIGEgY3VybF9zbGlzdCB3aXRoIHZhcmlhYmxlcyB0byBwYXNzIHRvIHRoZSB0ZWxuZXQKK25lZ290aWF0aW9ucy4gVGhlIHZhcmlhYmxlcyBzaG91bGQgYmUgaW4gdGhlIGZvcm1hdCA8b3B0aW9uPXZhbHVlPi4gbGliY3VybAorc3VwcG9ydHMgdGhlIG9wdGlvbnMgJ1RUWVBFJywgJ1hESVNQTE9DJyBhbmQgJ05FV19FTlYnLiBTZWUgdGhlIFRFTE5FVAorc3RhbmRhcmQgZm9yIGRldGFpbHMuCisuU0ggUkVUVVJOIFZBTFVFCitDVVJMRV9PSyAoemVybykgbWVhbnMgdGhhdCB0aGUgb3B0aW9uIHdhcyBzZXQgcHJvcGVybHksIG5vbi16ZXJvIG1lYW5zIGFuCitlcnJvciBvY2N1cnJlZCBhcyBcZkk8Y3VybC9jdXJsLmg+XGZQIGRlZmluZXMuIFNlZSB0aGUgXGZJbGliY3VybC1lcnJvcnMoMylcZlAKK21hbiBwYWdlIGZvciB0aGUgZnVsbCBsaXN0IHdpdGggZGVzY3JpcHRpb25zLgorCitJZiB5b3UgdHJ5IHRvIHNldCBhbiBvcHRpb24gdGhhdCBsaWJjdXJsIGRvZXNuJ3Qga25vdyBhYm91dCwgcGVyaGFwcyBiZWNhdXNlCit0aGUgbGlicmFyeSBpcyB0b28gb2xkIHRvIHN1cHBvcnQgaXQgb3IgdGhlIG9wdGlvbiB3YXMgcmVtb3ZlZCBpbiBhIHJlY2VudAordmVyc2lvbiwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBcZklDVVJMRV9GQUlMRURfSU5JVFxmUC4KKy5TSCAiU0VFIEFMU08iCisuQlIgY3VybF9lYXN5X2luaXQgIigzKSwgIiBjdXJsX2Vhc3lfY2xlYW51cCAiKDMpLCAiIGN1cmxfZWFzeV9yZXNldCAiKDMpIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9zZXRvcHQuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUyNzU5NgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwKQEAgLTAsMCArMSw5MDUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX2Vhc3lfc2V0b3B0IG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfZWFzeV9zZXRvcHQgLSBzZXQgb3B0aW9ucyBmb3IgYSBjdXJsIGVhc3kgaGFuZGxlIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4jaW5jbHVkZSAmbHQ7Y3VybC9jdXJsLmgmZ3Q7IAorPHAgY2xhc3M9ImxldmVsMCI+Q1VSTGNvZGUgY3VybF9lYXN5X3NldG9wdChDVVJMICpoYW5kbGUsIENVUkxvcHRpb24gb3B0aW9uLCBwYXJhbWV0ZXIpOyA8YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9lYXN5X3NldG9wdCgpIGlzIHVzZWQgdG8gdGVsbCBsaWJjdXJsIGhvdyB0byBiZWhhdmUuIEJ5IHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIHRvIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9lYXN5X3NldG9wdDwvc3Bhbj4sIHlvdSBjYW4gY2hhbmdlIGxpYmN1cmwncyBiZWhhdmlvci4gIEFsbCBvcHRpb25zIGFyZSBzZXQgd2l0aCB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5vcHRpb248L3NwYW4+IGZvbGxvd2VkIGJ5IGEgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5wYXJhbWV0ZXI8L3NwYW4+LiBUaGF0IHBhcmFtZXRlciBjYW4gYmUgYSA8c3BhbiBDbGFzcz0iYm9sZCI+bG9uZzwvc3Bhbj4sIGEgPHNwYW4gQ2xhc3M9ImJvbGQiPmZ1bmN0aW9uIHBvaW50ZXI8L3NwYW4+LCBhbiA8c3BhbiBDbGFzcz0iYm9sZCI+b2JqZWN0IHBvaW50ZXI8L3NwYW4+IG9yIGEgPHNwYW4gQ2xhc3M9ImJvbGQiPmN1cmxfb2ZmX3Q8L3NwYW4+LCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgc3BlY2lmaWMgb3B0aW9uIGV4cGVjdHMuIFJlYWQgdGhpcyBtYW51YWwgY2FyZWZ1bGx5IGFzIGJhZCBpbnB1dCB2YWx1ZXMgbWF5IGNhdXNlIGxpYmN1cmwgdG8gYmVoYXZlIGJhZGx5ISAgWW91IGNhbiBvbmx5IHNldCBvbmUgb3B0aW9uIGluIGVhY2ggZnVuY3Rpb24gY2FsbC4gQSB0eXBpY2FsIGFwcGxpY2F0aW9uIHVzZXMgbWFueSBjdXJsX2Vhc3lfc2V0b3B0KCkgY2FsbHMgaW4gdGhlIHNldHVwIHBoYXNlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPk9wdGlvbnMgc2V0IHdpdGggdGhpcyBmdW5jdGlvbiBjYWxsIGFyZSB2YWxpZCBmb3IgYWxsIGZvcnRoY29taW5nIHRyYW5zZmVycyBwZXJmb3JtZWQgdXNpbmcgdGhpcyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmhhbmRsZTwvc3Bhbj4uICBUaGUgb3B0aW9ucyBhcmUgbm90IGluIGFueSB3YXkgcmVzZXQgYmV0d2VlbiB0cmFuc2ZlcnMsIHNvIGlmIHlvdSB3YW50IHN1YnNlcXVlbnQgdHJhbnNmZXJzIHdpdGggZGlmZmVyZW50IG9wdGlvbnMsIHlvdSBtdXN0IGNoYW5nZSB0aGVtIGJldHdlZW4gdGhlIHRyYW5zZmVycy4gWW91IGNhbiBvcHRpb25hbGx5IHJlc2V0IGFsbCBvcHRpb25zIGJhY2sgdG8gaW50ZXJuYWwgZGVmYXVsdCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfcmVzZXQuaHRtbCI+Y3VybF9lYXN5X3Jlc2V0KDMpPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj5TdHJpbmdzIHBhc3NlZCB0byBsaWJjdXJsIGFzICdjaGFyIConIGFyZ3VtZW50cywgYXJlIGNvcGllZCBieSB0aGUgbGlicmFyeTsgdGh1cyB0aGUgc3RyaW5nIHN0b3JhZ2UgYXNzb2NpYXRlZCB0byB0aGUgcG9pbnRlciBhcmd1bWVudCBtYXkgYmUgb3ZlcndyaXR0ZW4gYWZ0ZXIgY3VybF9lYXN5X3NldG9wdCgpIHJldHVybnMuIEV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlIGFyZSBkZXNjcmliZWQgaW4gdGhlIG9wdGlvbiBkZXRhaWxzIGJlbG93LiAKKzxwIGNsYXNzPSJsZXZlbDAiPkJlZm9yZSB2ZXJzaW9uIDcuMTcuMCwgc3RyaW5ncyB3ZXJlIG5vdCBjb3BpZWQuIEluc3RlYWQgdGhlIHVzZXIgd2FzIGZvcmNlZCBrZWVwIHRoZW0gYXZhaWxhYmxlIHVudGlsIGxpYmN1cmwgbm8gbG9uZ2VyIG5lZWRlZCB0aGVtLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmhhbmRsZTwvc3Bhbj4gaXMgdGhlIHJldHVybiBjb2RlIGZyb20gYSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X2luaXQuaHRtbCI+Y3VybF9lYXN5X2luaXQoMyk8L2E+IG9yIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfZHVwaGFuZGxlLmh0bWwiPmN1cmxfZWFzeV9kdXBoYW5kbGUoMyk8L2E+IGNhbGwuIDxhIG5hbWU9IkJFSEFWSU9SIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5CRUhBVklPUiBPUFRJT05TPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFZFUkJPU0UiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9WRVJCT1NFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldCB0aGUgcGFyYW1ldGVyIHRvIDEgdG8gZ2V0IHRoZSBsaWJyYXJ5IHRvIGRpc3BsYXkgYSBsb3Qgb2YgdmVyYm9zZSBpbmZvcm1hdGlvbiBhYm91dCBpdHMgb3BlcmF0aW9ucy4gVmVyeSB1c2VmdWwgZm9yIGxpYmN1cmwgYW5kL29yIHByb3RvY29sIGRlYnVnZ2luZyBhbmQgdW5kZXJzdGFuZGluZy4gVGhlIHZlcmJvc2UgaW5mb3JtYXRpb24gd2lsbCBiZSBzZW50IHRvIHN0ZGVyciwgb3IgdGhlIHN0cmVhbSBzZXQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUU1RERVJSIj5DVVJMT1BUX1NUREVSUjwvYT4uIAorPHAgY2xhc3M9ImxldmVsMSI+WW91IGhhcmRseSBldmVyIHdhbnQgdGhpcyBzZXQgaW4gcHJvZHVjdGlvbiB1c2UsIHlvdSB3aWxsIGFsbW9zdCBhbHdheXMgd2FudCB0aGlzIHdoZW4geW91IGRlYnVnL3JlcG9ydCBwcm9ibGVtcy4gQW5vdGhlciBuZWF0IG9wdGlvbiBmb3IgZGVidWdnaW5nIGlzIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUREVCVUdGVU5DVElPTiI+Q1VSTE9QVF9ERUJVR0ZVTkNUSU9OPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUSEVBREVSIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfSEVBREVSPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkEgcGFyYW1ldGVyIHNldCB0byAxIHRlbGxzIHRoZSBsaWJyYXJ5IHRvIGluY2x1ZGUgdGhlIGhlYWRlciBpbiB0aGUgYm9keSBvdXRwdXQuIFRoaXMgaXMgb25seSByZWxldmFudCBmb3IgcHJvdG9jb2xzIHRoYXQgYWN0dWFsbHkgaGF2ZSBoZWFkZXJzIHByZWNlZGluZyB0aGUgZGF0YSAobGlrZSBIVFRQKS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUTk9QUk9HUkVTUyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX05PUFJPR1JFU1M8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcuIElmIHNldCB0byAxLCBpdCB0ZWxscyB0aGUgbGlicmFyeSB0byBzaHV0IG9mZiB0aGUgcHJvZ3Jlc3MgbWV0ZXIgY29tcGxldGVseS4gSXQgd2lsbCBhbHNvIHByZXNlbnQgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQUk9HUkVTU0ZVTkNUSU9OIj5DVVJMT1BUX1BST0dSRVNTRlVOQ1RJT048L2E+IGZyb20gZ2V0dGluZyBjYWxsZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+RnV0dXJlIHZlcnNpb25zIG9mIGxpYmN1cmwgYXJlIGxpa2VseSB0byBub3QgaGF2ZSBhbnkgYnVpbHQtaW4gcHJvZ3Jlc3MgbWV0ZXIgYXQgYWxsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFROT1NJR05BTCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX05PU0lHTkFMPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nLiBJZiBpdCBpcyAxLCBsaWJjdXJsIHdpbGwgbm90IHVzZSBhbnkgZnVuY3Rpb25zIHRoYXQgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgb3IgYW55IGZ1bmN0aW9ucyB0aGF0IGNhdXNlIHNpZ25hbHMgdG8gYmUgc2VudCB0byB0aGUgcHJvY2Vzcy4gVGhpcyBvcHRpb24gaXMgbWFpbmx5IGhlcmUgdG8gYWxsb3cgbXVsdGktdGhyZWFkZWQgdW5peCBhcHBsaWNhdGlvbnMgdG8gc3RpbGwgc2V0L3VzZSBhbGwgdGltZW91dCBvcHRpb25zIGV0Yywgd2l0aG91dCByaXNraW5nIGdldHRpbmcgc2lnbmFscy4gKEFkZGVkIGluIDcuMTApIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBvcHRpb24gaXMgc2V0IGFuZCBsaWJjdXJsIGhhcyBiZWVuIGJ1aWx0IHdpdGggdGhlIHN0YW5kYXJkIG5hbWUgcmVzb2x2ZXIsIHRpbWVvdXRzIHdpbGwgbm90IG9jY3VyIHdoaWxlIHRoZSBuYW1lIHJlc29sdmUgdGFrZXMgcGxhY2UuIENvbnNpZGVyIGJ1aWxkaW5nIGxpYmN1cmwgd2l0aCBjLWFyZXMgc3VwcG9ydCB0byBlbmFibGUgYXN5bmNocm9ub3VzIEROUyBsb29rdXBzLCB3aGljaCBlbmFibGVzIG5pY2UgdGltZW91dHMgZm9yIG5hbWUgcmVzb2x2ZXMgd2l0aG91dCBzaWduYWxzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldHRpbmcgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVE5PU0lHTkFMIj5DVVJMT1BUX05PU0lHTkFMPC9hPiB0byAxIG1ha2VzIGxpYmN1cmwgTk9UIGFzayB0aGUgc3lzdGVtIHRvIGlnbm9yZSBTSUdQSVBFIHNpZ25hbHMsIHdoaWNoIG90aGVyd2lzZSBhcmUgc2VudCBieSB0aGUgc3lzdGVtIHdoZW4gdHJ5aW5nIHRvIHNlbmQgZGF0YSB0byBhIHNvY2tldCB3aGljaCBpcyBjbG9zZWQgaW4gdGhlIG90aGVyIGVuZC4gbGliY3VybCBtYWtlcyBhbiBlZmZvcnQgdG8gbmV2ZXIgY2F1c2Ugc3VjaCBTSUdQSVBFcyB0byB0cmlnZ2VyLCBidXQgc29tZSBvcGVyYXRpbmcgc3lzdGVtcyBoYXZlIG5vIHdheSB0byBhdm9pZCB0aGVtIGFuZCBldmVuIG9uIHRob3NlIHRoYXQgaGF2ZSB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgd2hlbiB0aGV5IG1heSBzdGlsbCBoYXBwZW4sIGNvbnRyYXJ5IHRvIG91ciBkZXNpcmUuIEluIGFkZGl0aW9uLCB1c2luZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMQVVUSE5UTE1XQiI+Q1VSTEFVVEhfTlRMTV9XQjwvYT4gYXV0aGVudGljYXRpb24gY291bGQgY2F1c2UgYSBTSUdDSExEIHNpZ25hbCB0byBiZSByYWlzZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFdJTERDQVJETUFUQ0giPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9XSUxEQ0FSRE1BVENIPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldCB0aGlzIG9wdGlvbiB0byAxIGlmIHlvdSB3YW50IHRvIHRyYW5zZmVyIG11bHRpcGxlIGZpbGVzIGFjY29yZGluZyB0byBhIGZpbGUgbmFtZSBwYXR0ZXJuLiBUaGUgcGF0dGVybiBjYW4gYmUgc3BlY2lmaWVkIGFzIHBhcnQgb2YgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRVUkwiPkNVUkxPUFRfVVJMPC9hPiBvcHRpb24sIHVzaW5nIGFuIGZubWF0Y2gtbGlrZSBwYXR0ZXJuIChTaGVsbCBQYXR0ZXJuIE1hdGNoaW5nKSBpbiB0aGUgbGFzdCBwYXJ0IG9mIFVSTCAoZmlsZSBuYW1lKS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5CeSBkZWZhdWx0LCBsaWJjdXJsIHVzZXMgaXRzIGludGVybmFsIHdpbGRjYXJkIG1hdGNoaW5nIGltcGxlbWVudGF0aW9uLiBZb3UgY2FuIHByb3ZpZGUgeW91ciBvd24gbWF0Y2hpbmcgZnVuY3Rpb24gYnkgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRGTk1BVENIRlVOQ1RJT04iPkNVUkxPUFRfRk5NQVRDSF9GVU5DVElPTjwvYT4gb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgZmVhdHVyZSBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgRlRQIGRvd25sb2FkIGZvciBub3cuIAorPHAgY2xhc3M9ImxldmVsMSI+QSBicmllZiBpbnRyb2R1Y3Rpb24gb2YgaXRzIHN5bnRheCBmb2xsb3dzOiAKKzxwIGNsYXNzPSJsZXZlbDIiPgorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPiogLSBBU1RFUklTSzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj48YSBocmVmPSJmdHA6Ly9leGFtcGxlLmNvbS9zb21lL3BhdGgvIj5mdHA6Ly9leGFtcGxlLmNvbS9zb21lL3BhdGgvPC9hPjxzcGFuIENsYXNzPSJib2xkIj4qLnR4dDwvc3Bhbj4gKGZvciBhbGwgdHh0J3MgZnJvbSB0aGUgcm9vdCBkaXJlY3RvcnkpIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwyIj4KKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4/IC0gUVVFU1RJT04gTUFSSzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5RdWVzdGlvbiBtYXJrIG1hdGNoZXMgYW55IChleGFjdGx5IG9uZSkgY2hhcmFjdGVyLiAKKzxwIGNsYXNzPSJsZXZlbDIiPjxhIGhyZWY9ImZ0cDovL2V4YW1wbGUuY29tL3NvbWUvcGF0aC8iPmZ0cDovL2V4YW1wbGUuY29tL3NvbWUvcGF0aC88L2E+PHNwYW4gQ2xhc3M9ImJvbGQiPnBob3RvPy5qcGVnPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMiI+Cis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+WyAtIEJSQUNLRVQgRVhQUkVTU0lPTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGUgbGVmdCBicmFja2V0IG9wZW5zIGEgYnJhY2tldCBleHByZXNzaW9uLiBUaGUgcXVlc3Rpb24gbWFyayBhbmQgYXN0ZXJpc2sgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmcgaW4gYSBicmFja2V0IGV4cHJlc3Npb24uIEVhY2ggYnJhY2tldCBleHByZXNzaW9uIGVuZHMgYnkgdGhlIHJpZ2h0IGJyYWNrZXQgYW5kIG1hdGNoZXMgZXhhY3RseSBvbmUgY2hhcmFjdGVyLiBTb21lIGV4YW1wbGVzIGZvbGxvdzogCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+W2EtekEtWjAtOV08L3NwYW4+IG9yIDxzcGFuIENsYXNzPSJib2xkIj5bZi1nRi1HXTwvc3Bhbj4gLSBjaGFyYWN0ZXIgaW50ZXJ2YWwgCis8cCBjbGFzcz0ibGV2ZWwyIj48c3BhbiBDbGFzcz0iYm9sZCI+W2FiY108L3NwYW4+IC0gY2hhcmFjdGVyIGVudW1lcmF0aW9uIAorPHAgY2xhc3M9ImxldmVsMiI+PHNwYW4gQ2xhc3M9ImJvbGQiPlteYWJjXTwvc3Bhbj4gb3IgPHNwYW4gQ2xhc3M9ImJvbGQiPlshYWJjXTwvc3Bhbj4gLSBuZWdhdGlvbiAKKzxwIGNsYXNzPSJsZXZlbDIiPjxhIGNsYXNzPSJib2xkIiBocmVmPSIjIj5bWzo8L2E+PHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5uYW1lPC9zcGFuPjxhIGNsYXNzPSJib2xkIiBocmVmPSIjIj46XV08L2E+IGNsYXNzIGV4cHJlc3Npb24uIFN1cHBvcnRlZCBjbGFzc2VzIGFyZSA8c3BhbiBDbGFzcz0iYm9sZCI+YWxudW08L3NwYW4+LDxzcGFuIENsYXNzPSJib2xkIj5sb3dlcjwvc3Bhbj4sIDxzcGFuIENsYXNzPSJib2xkIj5zcGFjZTwvc3Bhbj4sIDxzcGFuIENsYXNzPSJib2xkIj5hbHBoYTwvc3Bhbj4sIDxzcGFuIENsYXNzPSJib2xkIj5kaWdpdDwvc3Bhbj4sIDxzcGFuIENsYXNzPSJib2xkIj5wcmludDwvc3Bhbj4sIDxzcGFuIENsYXNzPSJib2xkIj51cHBlcjwvc3Bhbj4sIDxzcGFuIENsYXNzPSJib2xkIj5ibGFuazwvc3Bhbj4sIDxzcGFuIENsYXNzPSJib2xkIj5ncmFwaDwvc3Bhbj4sIDxzcGFuIENsYXNzPSJib2xkIj54ZGlnaXQ8L3NwYW4+LiAKKzxwIGNsYXNzPSJsZXZlbDIiPjxzcGFuIENsYXNzPSJib2xkIj5bXVstIV5dPC9zcGFuPiAtIHNwZWNpYWwgY2FzZSAtIG1hdGNoZXMgb25seSAnLScsICddJywgJ1snLCAnIScgb3IgJ14nLiBUaGVzZSBjaGFyYWN0ZXJzIGhhdmUgbm8gc3BlY2lhbCBwdXJwb3NlLiAKKzxwIGNsYXNzPSJsZXZlbDIiPjxhIGNsYXNzPSJib2xkIiBocmVmPSIjIj5bXFtcXVxcXTwvYT4gLSBlc2NhcGUgc3ludGF4LiBNYXRjaGVzICdbJywgJ10nIG9yICcmYWN1dGU7LiAKKzxwIGNsYXNzPSJsZXZlbDIiPlVzaW5nIHRoZSBydWxlcyBhYm92ZSwgYSBmaWxlIG5hbWUgcGF0dGVybiBjYW4gYmUgY29uc3RydWN0ZWQ6IAorPHAgY2xhc3M9ImxldmVsMiI+PGEgaHJlZj0iZnRwOi8vZXhhbXBsZS5jb20vc29tZS9wYXRoLyI+ZnRwOi8vZXhhbXBsZS5jb20vc29tZS9wYXRoLzwvYT48c3BhbiBDbGFzcz0iYm9sZCI+W2Etels6dXBwZXI6XVxcXS5qcGVnPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMSI+KFRoaXMgd2FzIGFkZGVkIGluIDcuMjEuMCkgPGEgbmFtZT0iQ0FMTEJBQ0siPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkNBTExCQUNLIE9QVElPTlM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUV1JJVEVGVU5DVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1dSSVRFRlVOQ1RJT048L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RnVuY3Rpb24gcG9pbnRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZTogPHNwYW4gY2xhc3M9ImJvbGQiPnNpemVfdCBmdW5jdGlvbiggY2hhciAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICp1c2VyZGF0YSk7PC9zcGFuPiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGxpYmN1cmwgYXMgc29vbiBhcyB0aGVyZSBpcyBkYXRhIHJlY2VpdmVkIHRoYXQgbmVlZHMgdG8gYmUgc2F2ZWQuIFRoZSBzaXplIG9mIHRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5wdHI8L3NwYW4+IGlzIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+c2l6ZTwvc3Bhbj4gbXVsdGlwbGllZCB3aXRoIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bm1lbWI8L3NwYW4+LCBpdCB3aWxsIG5vdCBiZSB6ZXJvIHRlcm1pbmF0ZWQuIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHRha2VuIGNhcmUgb2YuIElmIHRoYXQgYW1vdW50IGRpZmZlcnMgZnJvbSB0aGUgYW1vdW50IHBhc3NlZCB0byB5b3VyIGZ1bmN0aW9uLCBpdCdsbCBzaWduYWwgYW4gZXJyb3IgdG8gdGhlIGxpYnJhcnkuIFRoaXMgd2lsbCBhYm9ydCB0aGUgdHJhbnNmZXIgYW5kIHJldHVybiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxFX1dSSVRFX0VSUk9SPC9zcGFuPi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Gcm9tIDcuMTguMCwgdGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gQ1VSTF9XUklURUZVTkNfUEFVU0Ugd2hpY2ggdGhlbiB3aWxsIGNhdXNlIHdyaXRpbmcgdG8gdGhpcyBjb25uZWN0aW9uIHRvIGJlY29tZSBwYXVzZWQuIFNlZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3BhdXNlLmh0bWwiPmN1cmxfZWFzeV9wYXVzZSgzKTwvYT4gZm9yIGZ1cnRoZXIgZGV0YWlscy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgd2l0aCB6ZXJvIGJ5dGVzIGRhdGEgaWYgdGhlIHRyYW5zZmVycmVkIGZpbGUgaXMgZW1wdHkuIAorPHAgY2xhc3M9ImxldmVsMSI+U2V0IHRoaXMgb3B0aW9uIHRvIE5VTEwgdG8gZ2V0IHRoZSBpbnRlcm5hbCBkZWZhdWx0IGZ1bmN0aW9uLiBUaGUgaW50ZXJuYWwgZGVmYXVsdCBmdW5jdGlvbiB3aWxsIHdyaXRlIHRoZSBkYXRhIHRvIHRoZSBGSUxFICogZ2l2ZW4gd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUV1JJVEVEQVRBIj5DVVJMT1BUX1dSSVRFREFUQTwvYT4uIAorPHAgY2xhc3M9ImxldmVsMSI+U2V0IHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnVzZXJkYXRhPC9zcGFuPiBhcmd1bWVudCB3aXRoIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUV1JJVEVEQVRBIj5DVVJMT1BUX1dSSVRFREFUQTwvYT4gb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUgaW4gYWxsIGludm9rZXMsIGJ1dCB5b3UgY2Fubm90IHBvc3NpYmx5IG1ha2UgYW55IGFzc3VtcHRpb25zLiBJdCBtYXkgYmUgb25lIGJ5dGUsIGl0IG1heSBiZSB0aG91c2FuZHMuIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBib2R5IGRhdGEgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSB3cml0ZSBjYWxsYmFjayBpcyBkZWZpbmVkIGluIHRoZSBjdXJsLmggaGVhZGVyIGZpbGU6IENVUkxfTUFYX1dSSVRFX1NJWkUgKHRoZSB1c3VhbCBkZWZhdWx0IGlzIDE2SykuIElmIHlvdSBob3dldmVyIGhhdmUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEhFQURFUiI+Q1VSTE9QVF9IRUFERVI8L2E+IHNldCwgd2hpY2ggc2VuZHMgaGVhZGVyIGRhdGEgdG8gdGhlIHdyaXRlIGNhbGxiYWNrLCB5b3UgY2FuIGdldCB1cCB0byA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxfTUFYX0hUVFBfSEVBREVSPC9zcGFuPiBieXRlcyBvZiBoZWFkZXIgZGF0YSBwYXNzZWQgaW50byBpdC4gVGhpcyB1c3VhbGx5IG1lYW5zIDEwMEsuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFdSSVRFREFUQSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1dSSVRFREFUQTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5EYXRhIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZmlsZSB3cml0ZSBmdW5jdGlvbi4gSWYgeW91IHVzZSB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFdSSVRFRlVOQ1RJT04iPkNVUkxPUFRfV1JJVEVGVU5DVElPTjwvYT4gb3B0aW9uLCB0aGlzIGlzIHRoZSBwb2ludGVyIHlvdSdsbCBnZXQgYXMgaW5wdXQuIElmIHlvdSBkb24ndCB1c2UgYSBjYWxsYmFjaywgeW91IG11c3QgcGFzcyBhICdGSUxFIConIGFzIGxpYmN1cmwgd2lsbCBwYXNzIHRoaXMgdG8gZndyaXRlKCkgd2hlbiB3cml0aW5nIGRhdGEuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIGludGVybmFsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRXUklURUZVTkNUSU9OIj5DVVJMT1BUX1dSSVRFRlVOQ1RJT048L2E+IHdpbGwgd3JpdGUgdGhlIGRhdGEgdG8gdGhlIEZJTEUgKiBnaXZlbiB3aXRoIHRoaXMgb3B0aW9uLCBvciB0byBzdGRvdXQgaWYgdGhpcyBvcHRpb24gaGFzbid0IGJlZW4gc2V0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHlvdSdyZSB1c2luZyBsaWJjdXJsIGFzIGEgd2luMzIgRExMLCB5b3UgPHNwYW4gQ2xhc3M9ImJvbGQiPk1VU1Q8L3NwYW4+IHVzZSB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFdSSVRFRlVOQ1RJT04iPkNVUkxPUFRfV1JJVEVGVU5DVElPTjwvYT4gaWYgeW91IHNldCB0aGlzIG9wdGlvbiBvciB5b3Ugd2lsbCBleHBlcmllbmNlIGNyYXNoZXMuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gaXMgYWxzbyBrbm93biB3aXRoIHRoZSBvbGRlciBuYW1lIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTE9QVF9GSUxFPC9zcGFuPiwgdGhlIG5hbWUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFdSSVRFREFUQSI+Q1VSTE9QVF9XUklURURBVEE8L2E+IHdhcyBpbnRyb2R1Y2VkIGluIDcuOS43LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRSRUFERlVOQ1RJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9SRUFERlVOQ1RJT048L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RnVuY3Rpb24gcG9pbnRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZTogPHNwYW4gY2xhc3M9ImJvbGQiPnNpemVfdCBmdW5jdGlvbiggdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICp1c2VyZGF0YSk7PC9zcGFuPiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGxpYmN1cmwgYXMgc29vbiBhcyBpdCBuZWVkcyB0byByZWFkIGRhdGEgaW4gb3JkZXIgdG8gc2VuZCBpdCB0byB0aGUgcGVlci4gVGhlIGRhdGEgYXJlYSBwb2ludGVkIGF0IGJ5IHRoZSBwb2ludGVyIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+cHRyPC9zcGFuPiBtYXkgYmUgZmlsbGVkIHdpdGggYXQgbW9zdCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnNpemU8L3NwYW4+IG11bHRpcGxpZWQgd2l0aCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPm5tZW1iPC9zcGFuPiBudW1iZXIgb2YgYnl0ZXMuIFlvdXIgZnVuY3Rpb24gbXVzdCByZXR1cm4gdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgdGhhdCB5b3Ugc3RvcmVkIGluIHRoYXQgbWVtb3J5IGFyZWEuIFJldHVybmluZyAwIHdpbGwgc2lnbmFsIGVuZC1vZi1maWxlIHRvIHRoZSBsaWJyYXJ5IGFuZCBjYXVzZSBpdCB0byBzdG9wIHRoZSBjdXJyZW50IHRyYW5zZmVyLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHlvdSBzdG9wIHRoZSBjdXJyZW50IHRyYW5zZmVyIGJ5IHJldHVybmluZyAwICJwcmUtbWF0dXJlbHkiIChpLmUgYmVmb3JlIHRoZSBzZXJ2ZXIgZXhwZWN0ZWQgaXQsIGxpa2Ugd2hlbiB5b3UndmUgc2FpZCB5b3Ugd2lsbCB1cGxvYWQgTiBieXRlcyBhbmQgeW91IHVwbG9hZCBsZXNzIHRoYW4gTiBieXRlcyksIHlvdSBtYXkgZXhwZXJpZW5jZSB0aGF0IHRoZSBzZXJ2ZXIgImhhbmdzIiB3YWl0aW5nIGZvciB0aGUgcmVzdCBvZiB0aGUgZGF0YSB0aGF0IHdvbid0IGNvbWUuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIHJlYWQgY2FsbGJhY2sgbWF5IHJldHVybiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxfUkVBREZVTkNfQUJPUlQ8L3NwYW4+IHRvIHN0b3AgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIGltbWVkaWF0ZWx5LCByZXN1bHRpbmcgaW4gYSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s8L3NwYW4+IGVycm9yIGNvZGUgZnJvbSB0aGUgdHJhbnNmZXIgKEFkZGVkIGluIDcuMTIuMSkgCis8cCBjbGFzcz0ibGV2ZWwxIj5Gcm9tIDcuMTguMCwgdGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gQ1VSTF9SRUFERlVOQ19QQVVTRSB3aGljaCB0aGVuIHdpbGwgY2F1c2UgcmVhZGluZyBmcm9tIHRoaXMgY29ubmVjdGlvbiB0byBiZWNvbWUgcGF1c2VkLiBTZWUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9wYXVzZS5odG1sIj5jdXJsX2Vhc3lfcGF1c2UoMyk8L2E+IGZvciBmdXJ0aGVyIGRldGFpbHMuIAorPHAgY2xhc3M9ImxldmVsMSI+PHNwYW4gQ2xhc3M9ImJvbGQiPkJ1Z3M8L3NwYW4+OiB3aGVuIGRvaW5nIFRGVFAgdXBsb2FkcywgeW91IG11c3QgcmV0dXJuIHRoZSBleGFjdCBhbW91bnQgb2YgZGF0YSB0aGF0IHRoZSBjYWxsYmFjayB3YW50cywgb3IgaXQgd2lsbCBiZSBjb25zaWRlcmVkIHRoZSBmaW5hbCBwYWNrZXQgYnkgdGhlIHNlcnZlciBlbmQgYW5kIHRoZSB0cmFuc2ZlciB3aWxsIGVuZCB0aGVyZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3Ugc2V0IHRoaXMgY2FsbGJhY2sgcG9pbnRlciB0byBOVUxMLCBvciBkb24ndCBzZXQgaXQgYXQgYWxsLCB0aGUgZGVmYXVsdCBpbnRlcm5hbCByZWFkIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZC4gSXQgaXMgZG9pbmcgYW4gZnJlYWQoKSBvbiB0aGUgRklMRSAqIHVzZXJkYXRhIHNldCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRSRUFEREFUQSI+Q1VSTE9QVF9SRUFEREFUQTwvYT4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFJFQUREQVRBIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfUkVBRERBVEE8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RGF0YSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZpbGUgcmVhZCBmdW5jdGlvbi4gSWYgeW91IHVzZSB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFJFQURGVU5DVElPTiI+Q1VSTE9QVF9SRUFERlVOQ1RJT048L2E+IG9wdGlvbiwgdGhpcyBpcyB0aGUgcG9pbnRlciB5b3UnbGwgZ2V0IGFzIGlucHV0LiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHJlYWQgY2FsbGJhY2sgYnV0IGluc3RlYWQgcmVseSBvbiB0aGUgZGVmYXVsdCBpbnRlcm5hbCByZWFkIGZ1bmN0aW9uLCB0aGlzIGRhdGEgbXVzdCBiZSBhIHZhbGlkIHJlYWRhYmxlIEZJTEUgKi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3UncmUgdXNpbmcgbGliY3VybCBhcyBhIHdpbjMyIERMTCwgeW91IE1VU1QgdXNlIGEgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFJFQURGVU5DVElPTiI+Q1VSTE9QVF9SRUFERlVOQ1RJT048L2E+IGlmIHlvdSBzZXQgdGhpcyBvcHRpb24uIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gd2FzIGFsc28ga25vd24gYnkgdGhlIG9sZGVyIG5hbWUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMT1BUX0lORklMRTwvc3Bhbj4sIHRoZSBuYW1lIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRSRUFEREFUQSI+Q1VSTE9QVF9SRUFEREFUQTwvYT4gd2FzIGludHJvZHVjZWQgaW4gNy45LjcuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVElPQ1RMRlVOQ1RJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9JT0NUTEZVTkNUSU9OPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9pb2N0bF9jYWxsYmFjazwvc3Bhbj4gcHJvdG90eXBlIGZvdW5kIGluIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Jmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4uIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgbGliY3VybCB3aGVuIHNvbWV0aGluZyBzcGVjaWFsIEkvTy1yZWxhdGVkIG5lZWRzIHRvIGJlIGRvbmUgdGhhdCB0aGUgbGlicmFyeSBjYW4ndCBkbyBieSBpdHNlbGYuIEZvciBub3csIHJld2luZGluZyB0aGUgcmVhZCBkYXRhIHN0cmVhbSBpcyB0aGUgb25seSBhY3Rpb24gaXQgY2FuIHJlcXVlc3QuIFRoZSByZXdpbmRpbmcgb2YgdGhlIHJlYWQgZGF0YSBzdHJlYW0gbWF5IGJlIG5lY2Vzc2FyeSB3aGVuIGRvaW5nIGEgSFRUUCBQVVQgb3IgUE9TVCB3aXRoIGEgbXVsdGktcGFzcyBhdXRoZW50aWNhdGlvbiBtZXRob2QuICAoT3B0aW9uIGFkZGVkIGluIDcuMTIuMykuIAorPHAgY2xhc3M9ImxldmVsMSI+VXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRTRUVLRlVOQ1RJT04iPkNVUkxPUFRfU0VFS0ZVTkNUSU9OPC9hPiBpbnN0ZWFkIHRvIHByb3ZpZGUgc2Vla2luZyEgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUSU9DVExEQVRBIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfSU9DVExEQVRBPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRoYXQgd2lsbCBiZSB1bnRvdWNoZWQgYnkgbGliY3VybCBhbmQgcGFzc2VkIGFzIHRoZSAzcmQgYXJndW1lbnQgaW4gdGhlIGlvY3RsIGNhbGxiYWNrIHNldCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRJT0NUTEZVTkNUSU9OIj5DVVJMT1BUX0lPQ1RMRlVOQ1RJT048L2E+LiAgKE9wdGlvbiBhZGRlZCBpbiA3LjEyLjMpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFNFRUtGVU5DVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NFRUtGVU5DVElPTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPmludCBmdW5jdGlvbih2b2lkICppbnN0cmVhbSwgY3VybF9vZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pOzwvc3Bhbj4gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBsaWJjdXJsIHRvIHNlZWsgdG8gYSBjZXJ0YWluIHBvc2l0aW9uIGluIHRoZSBpbnB1dCBzdHJlYW0gYW5kIGNhbiBiZSB1c2VkIHRvIGZhc3QgZm9yd2FyZCBhIGZpbGUgaW4gYSByZXN1bWVkIHVwbG9hZCAoaW5zdGVhZCBvZiByZWFkaW5nIGFsbCB1cGxvYWRlZCBieXRlcyB3aXRoIHRoZSBub3JtYWwgcmVhZCBmdW5jdGlvbi9jYWxsYmFjaykuIEl0IGlzIGFsc28gY2FsbGVkIHRvIHJld2luZCBhIHN0cmVhbSB3aGVuIGRvaW5nIGEgSFRUUCBQVVQgb3IgUE9TVCB3aXRoIGEgbXVsdGktcGFzcyBhdXRoZW50aWNhdGlvbiBtZXRob2QuIFRoZSBmdW5jdGlvbiBzaGFsbCB3b3JrIGxpa2UgImZzZWVrIiBvciAibHNlZWsiIGFuZCBhY2NlcHRlZCBTRUVLX1NFVCwgU0VFS19DVVIgYW5kIFNFRUtfRU5EIGFzIGFyZ3VtZW50IGZvciBvcmlnaW4sIGFsdGhvdWdoIChpbiA3LjE4LjApIGxpYmN1cmwgb25seSBwYXNzZXMgU0VFS19TRVQuIFRoZSBjYWxsYmFjayBtdXN0IHJldHVybiAwIChDVVJMX1NFRUtGVU5DX09LKSBvbiBzdWNjZXNzLCAxIChDVVJMX1NFRUtGVU5DX0ZBSUwpIHRvIGNhdXNlIHRoZSB1cGxvYWQgb3BlcmF0aW9uIHRvIGZhaWwgb3IgMiAoQ1VSTF9TRUVLRlVOQ19DQU5UU0VFSykgdG8gaW5kaWNhdGUgdGhhdCB3aGlsZSB0aGUgc2VlayBmYWlsZWQsIGxpYmN1cmwgaXMgZnJlZSB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbSBpZiBwb3NzaWJsZS4gVGhlIGxhdHRlciBjYW4gc29tZXRpbWVzIGJlIGRvbmUgYnkgaW5zdGVhZCByZWFkaW5nIGZyb20gdGhlIGlucHV0IG9yIHNpbWlsYXIuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgeW91IGZvcndhcmQgdGhlIGlucHV0IGFyZ3VtZW50cyBkaXJlY3RseSB0byAiZnNlZWsiIG9yICJsc2VlayIsIG5vdGUgdGhhdCB0aGUgZGF0YSB0eXBlIGZvciA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPm9mZnNldDwvc3Bhbj4gaXMgbm90IHRoZSBzYW1lIGFzIGRlZmluZWQgZm9yIGN1cmxfb2ZmX3Qgb24gbWFueSBzeXN0ZW1zISAoT3B0aW9uIGFkZGVkIGluIDcuMTguMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUU0VFS0RBVEEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9TRUVLREFUQTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5EYXRhIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZmlsZSBzZWVrIGZ1bmN0aW9uLiBJZiB5b3UgdXNlIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUU0VFS0ZVTkNUSU9OIj5DVVJMT1BUX1NFRUtGVU5DVElPTjwvYT4gb3B0aW9uLCB0aGlzIGlzIHRoZSBwb2ludGVyIHlvdSdsbCBnZXQgYXMgaW5wdXQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgc2VlayBjYWxsYmFjaywgTlVMTCBpcyBwYXNzZWQuIChPcHRpb24gYWRkZWQgaW4gNy4xOC4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRTT0NLT1BURlVOQ1RJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9TT0NLT1BURlVOQ1RJT048L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RnVuY3Rpb24gcG9pbnRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jdXJsX3NvY2tvcHRfY2FsbGJhY2s8L3NwYW4+IHByb3RvdHlwZSBmb3VuZCBpbiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPiZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+LiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGxpYmN1cmwgYWZ0ZXIgdGhlIHNvY2tldCgpIGNhbGwgYnV0IGJlZm9yZSB0aGUgY29ubmVjdCgpIGNhbGwuIFRoZSBjYWxsYmFjaydzIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+cHVycG9zZTwvc3Bhbj4gYXJndW1lbnQgaWRlbnRpZmllcyB0aGUgZXhhY3QgcHVycG9zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHNvY2tldCwgYW5kIGN1cnJlbnRseSBvbmx5IG9uZSB2YWx1ZSBpcyBzdXBwb3J0ZWQ6IDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTFNPQ0tUWVBFX0lQQ1hOPC9zcGFuPiBmb3IgdGhlIHByaW1hcnkgY29ubmVjdGlvbiAobWVhbmluZyB0aGUgY29udHJvbCBjb25uZWN0aW9uIGluIHRoZSBGVFAgY2FzZSkuIEZ1dHVyZSB2ZXJzaW9ucyBvZiBsaWJjdXJsIG1heSBzdXBwb3J0IG1vcmUgcHVycG9zZXMuIEl0IHBhc3NlcyB0aGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgZGVzY3JpcHRvciBzbyBhZGRpdGlvbmFsIHNldHNvY2tvcHQoKSBjYWxscyBjYW4gYmUgZG9uZSBhdCB0aGUgdXNlcidzIGRpc2NyZXRpb24uICBSZXR1cm4gMCAoemVybykgZnJvbSB0aGUgY2FsbGJhY2sgb24gc3VjY2Vzcy4gUmV0dXJuIDEgZnJvbSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2lnbmFsIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IgdG8gdGhlIGxpYnJhcnkgYW5kIGl0IHdpbGwgY2xvc2UgdGhlIHNvY2tldCBhbmQgcmV0dXJuIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTEVfQ09VTEROVF9DT05ORUNUPC9zcGFuPi4gIChPcHRpb24gYWRkZWQgaW4gNy4xNi4wKSAKKzxwIGNsYXNzPSJsZXZlbDEiPkFkZGVkIGluIDcuMjEuNSwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG1heSByZXR1cm4gPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMX1NPQ0tPUFRfQUxSRUFEWV9DT05ORUNURUQ8L3NwYW4+LCB3aGljaCB0ZWxscyBsaWJjdXJsIHRoYXQgdGhlIHNvY2tldCBpcyBpbiBmYWN0IGFscmVhZHkgY29ubmVjdGVkIGFuZCB0aGVuIGxpYmN1cmwgd2lsbCBub3QgYXR0ZW1wdCB0byBjb25uZWN0IGl0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRTT0NLT1BUREFUQSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NPQ0tPUFREQVRBPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRoYXQgd2lsbCBiZSB1bnRvdWNoZWQgYnkgbGliY3VybCBhbmQgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBpbiB0aGUgc29ja29wdCBjYWxsYmFjayBzZXQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUU09DS09QVEZVTkNUSU9OIj5DVVJMT1BUX1NPQ0tPUFRGVU5DVElPTjwvYT4uIChPcHRpb24gYWRkZWQgaW4gNy4xNi4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRPUEVOU09DS0VURlVOQ1RJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9PUEVOU09DS0VURlVOQ1RJT048L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RnVuY3Rpb24gcG9pbnRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2s8L3NwYW4+IHByb3RvdHlwZSBmb3VuZCBpbiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPiZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+LiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGxpYmN1cmwgaW5zdGVhZCBvZiB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5zb2NrZXQoMik8L3NwYW4+IGNhbGwuIFRoZSBjYWxsYmFjaydzIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+cHVycG9zZTwvc3Bhbj4gYXJndW1lbnQgaWRlbnRpZmllcyB0aGUgZXhhY3QgcHVycG9zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHNvY2tldDogPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMU09DS1RZUEVfSVBDWE48L3NwYW4+IGlzIGZvciBJUCBiYXNlZCBjb25uZWN0aW9ucy4gRnV0dXJlIHZlcnNpb25zIG9mIGxpYmN1cmwgbWF5IHN1cHBvcnQgbW9yZSBwdXJwb3Nlcy4gSXQgcGFzc2VzIHRoZSByZXNvbHZlZCBwZWVyIGFkZHJlc3MgYXMgYSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmFkZHJlc3M8L3NwYW4+IGFyZ3VtZW50IHNvIHRoZSBjYWxsYmFjayBjYW4gbW9kaWZ5IHRoZSBhZGRyZXNzIG9yIHJlZnVzZSB0byBjb25uZWN0IGF0IGFsbC4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIHNvY2tldCBvciA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxfU09DS0VUX0JBRDwvc3Bhbj4gaW4gY2FzZSBubyBjb25uZWN0aW9uIHNob3VsZCBiZSBlc3RhYmxpc2hlZCBvciBhbnkgZXJyb3IgZGV0ZWN0ZWQuIEFueSBhZGRpdGlvbmFsIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+c2V0c29ja29wdCgyKTwvc3Bhbj4gY2FsbHMgY2FuIGJlIGRvbmUgb24gdGhlIHNvY2tldCBhdCB0aGUgdXNlcidzIGRpc2NyZXRpb24uICA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxfU09DS0VUX0JBRDwvc3Bhbj4gcmV0dXJuIHZhbHVlIGZyb20gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgc2lnbmFsIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IgdG8gdGhlIGxpYnJhcnkgYW5kIGl0IHdpbGwgcmV0dXJuIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTEVfQ09VTEROVF9DT05ORUNUPC9zcGFuPi4gIFRoaXMgcmV0dXJuIGNvZGUgY2FuIGJlIHVzZWQgZm9yIElQIGFkZHJlc3MgYmxhY2tsaXN0aW5nLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXM6IAorPHAgY2xhc3M9ImxldmVsMSI+Jm5ic3A7ICByZXR1cm4gc29ja2V0KGFkZHItJmd0O2ZhbWlseSwgYWRkci0mZ3Q7c29ja3R5cGUsIGFkZHItJmd0O3Byb3RvY29sKTsgCis8cCBjbGFzcz0ibGV2ZWwxIj4oT3B0aW9uIGFkZGVkIGluIDcuMTcuMS4pIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVE9QRU5TT0NLRVREQVRBIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfT1BFTlNPQ0tFVERBVEE8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHVudG91Y2hlZCBieSBsaWJjdXJsIGFuZCBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGluIHRoZSBvcGVuc29ja2V0IGNhbGxiYWNrIHNldCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRPUEVOU09DS0VURlVOQ1RJT04iPkNVUkxPUFRfT1BFTlNPQ0tFVEZVTkNUSU9OPC9hPi4gKE9wdGlvbiBhZGRlZCBpbiA3LjE3LjEuKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRDTE9TRVNPQ0tFVEZVTkNUSU9OIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfQ0xPU0VTT0NLRVRGVU5DVElPTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmN1cmxfY2xvc2Vzb2NrZXRfY2FsbGJhY2s8L3NwYW4+IHByb3RvdHlwZSBmb3VuZCBpbiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPiZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+LiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGxpYmN1cmwgaW5zdGVhZCBvZiB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jbG9zZSgzKTwvc3Bhbj4gb3IgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jbG9zZXNvY2tldCgzKTwvc3Bhbj4gY2FsbCB3aGVuIHNvY2tldHMgYXJlIGNsb3NlZCAobm90IGZvciBhbnkgb3RoZXIgZmlsZSBkZXNjcmlwdG9ycykuIFRoaXMgaXMgcHJldHR5IG11Y2ggdGhlIHJldmVyc2UgdG8gdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRPUEVOU09DS0VURlVOQ1RJT04iPkNVUkxPUFRfT1BFTlNPQ0tFVEZVTkNUSU9OPC9hPiBvcHRpb24uIFJldHVybiAwIHRvIHNpZ25hbCBzdWNjZXNzIGFuZCAxIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4gIChPcHRpb24gYWRkZWQgaW4gNy4yMS43KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRDTE9TRVNPQ0tFVERBVEEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DTE9TRVNPQ0tFVERBVEE8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHVudG91Y2hlZCBieSBsaWJjdXJsIGFuZCBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGluIHRoZSBjbG9zZXNvY2tldCBjYWxsYmFjayBzZXQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUQ0xPU0VTT0NLRVRGVU5DVElPTiI+Q1VSTE9QVF9DTE9TRVNPQ0tFVEZVTkNUSU9OPC9hPi4gIChPcHRpb24gYWRkZWQgaW4gNy4yMS43KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRQUk9HUkVTU0ZVTkNUSU9OIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfUFJPR1JFU1NGVU5DVElPTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmN1cmxfcHJvZ3Jlc3NfY2FsbGJhY2s8L3NwYW4+IHByb3RvdHlwZSBmb3VuZCBpbiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPiZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+LiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGxpYmN1cmwgaW5zdGVhZCBvZiBpdHMgaW50ZXJuYWwgZXF1aXZhbGVudCB3aXRoIGEgZnJlcXVlbnQgaW50ZXJ2YWwgZHVyaW5nIG9wZXJhdGlvbiAocm91Z2hseSBvbmNlIHBlciBzZWNvbmQgb3Igc29vbmVyKSBubyBtYXR0ZXIgaWYgZGF0YSBpcyBiZWluZyB0cmFuc2ZlcmVkIG9yIG5vdC4gVW5rbm93bi91bnVzZWQgYXJndW1lbnQgdmFsdWVzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgd2lsbCBiZSBzZXQgdG8gemVybyAobGlrZSBpZiB5b3Ugb25seSBkb3dubG9hZCBkYXRhLCB0aGUgdXBsb2FkIHNpemUgd2lsbCByZW1haW4gMCkuIFJldHVybmluZyBhIG5vbi16ZXJvIHZhbHVlIGZyb20gdGhpcyBjYWxsYmFjayB3aWxsIGNhdXNlIGxpYmN1cmwgdG8gYWJvcnQgdGhlIHRyYW5zZmVyIGFuZCByZXR1cm4gPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLPC9zcGFuPi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3UgdHJhbnNmZXIgZGF0YSB3aXRoIHRoZSBtdWx0aSBpbnRlcmZhY2UsIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgYmUgY2FsbGVkIGR1cmluZyBwZXJpb2RzIG9mIGlkbGVuZXNzIHVubGVzcyB5b3UgY2FsbCB0aGUgYXBwcm9wcmlhdGUgbGliY3VybCBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIHRyYW5zZmVycy4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUTk9QUk9HUkVTUyI+Q1VSTE9QVF9OT1BST0dSRVNTPC9hPiBtdXN0IGJlIHNldCB0byAwIHRvIG1ha2UgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBnZXQgY2FsbGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRQUk9HUkVTU0RBVEEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9QUk9HUkVTU0RBVEE8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHVudG91Y2hlZCBieSBsaWJjdXJsIGFuZCBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGluIHRoZSBwcm9ncmVzcyBjYWxsYmFjayBzZXQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUFJPR1JFU1NGVU5DVElPTiI+Q1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUSEVBREVSRlVOQ1RJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9IRUFERVJGVU5DVElPTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPnNpemVfdCBmdW5jdGlvbiggdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICp1c2VyZGF0YSk7PC9zcGFuPi4gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBsaWJjdXJsIGFzIHNvb24gYXMgaXQgaGFzIHJlY2VpdmVkIGhlYWRlciBkYXRhLiBUaGUgaGVhZGVyIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggaGVhZGVyIGFuZCBvbmx5IGNvbXBsZXRlIGhlYWRlciBsaW5lcyBhcmUgcGFzc2VkIG9uIHRvIHRoZSBjYWxsYmFjay4gUGFyc2luZyBoZWFkZXJzIGlzIHZlcnkgZWFzeSB1c2luZyB0aGlzLiBUaGUgc2l6ZSBvZiB0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+cHRyPC9zcGFuPiBpcyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnNpemU8L3NwYW4+IG11bHRpcGxpZWQgd2l0aCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPm5tZW1iPC9zcGFuPi4gRG8gbm90IGFzc3VtZSB0aGF0IHRoZSBoZWFkZXIgbGluZSBpcyB6ZXJvIHRlcm1pbmF0ZWQhIFRoZSBwb2ludGVyIG5hbWVkIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+dXNlcmRhdGE8L3NwYW4+IGlzIHRoZSBvbmUgeW91IHNldCB3aXRoIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUV1JJVEVIRUFERVIiPkNVUkxPUFRfV1JJVEVIRUFERVI8L2E+IG9wdGlvbi4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG11c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgdGFrZW4gY2FyZSBvZi4gSWYgdGhhdCBhbW91bnQgZGlmZmVycyBmcm9tIHRoZSBhbW91bnQgcGFzc2VkIHRvIHlvdXIgZnVuY3Rpb24sIGl0J2xsIHNpZ25hbCBhbiBlcnJvciB0byB0aGUgbGlicmFyeS4gVGhpcyB3aWxsIGFib3J0IHRoZSB0cmFuc2ZlciBhbmQgcmV0dXJuIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTF9XUklURV9FUlJPUjwvc3Bhbj4uIAorPHAgY2xhc3M9ImxldmVsMSI+QSBjb21wbGV0ZSBoZWFkZXIgdGhhdCBpcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXAgdG8gPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMX01BWF9IVFRQX0hFQURFUjwvc3Bhbj4gKDEwMEspIGJ5dGVzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoaXMgb3B0aW9uIGlzIG5vdCBzZXQsIG9yIGlmIGl0IGlzIHNldCB0byBOVUxMLCBidXQgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMT1BUX0hFQURFUkRBVEE8L3NwYW4+ICg8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUV1JJVEVIRUFERVIiPkNVUkxPUFRfV1JJVEVIRUFERVI8L2E+KSBpcyBzZXQgdG8gYW55dGhpbmcgYnV0IE5VTEwsIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGFjY2VwdCByZXNwb25zZSBkYXRhIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiBUaGF0IGlzLCBpdCB3aWxsIGJlIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUV1JJVEVGVU5DVElPTiI+Q1VSTE9QVF9XUklURUZVTkNUSU9OPC9hPiwgb3IgaWYgaXQgaXMgbm90IHNwZWNpZmllZCBvciBOVUxMIC0gdGhlIGRlZmF1bHQsIHN0cmVhbS13cml0aW5nIGZ1bmN0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkl0J3MgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGZvciB0aGUgaGVhZGVycyBvZiBhbGwgcmVzcG9uc2VzIHJlY2VpdmVkIGFmdGVyIGluaXRpYXRpbmcgYSByZXF1ZXN0IGFuZCBub3QganVzdCB0aGUgZmluYWwgcmVzcG9uc2UuIFRoaXMgaW5jbHVkZXMgYWxsIHJlc3BvbnNlcyB3aGljaCBvY2N1ciBkdXJpbmcgYXV0aGVudGljYXRpb24gbmVnb3RpYXRpb24uIElmIHlvdSBuZWVkIHRvIG9wZXJhdGUgb24gb25seSB0aGUgaGVhZGVycyBmcm9tIHRoZSBmaW5hbCByZXNwb25zZSwgeW91IHdpbGwgbmVlZCB0byBjb2xsZWN0IGhlYWRlcnMgaW4gdGhlIGNhbGxiYWNrIHlvdXJzZWxmIGFuZCB1c2UgSFRUUCBzdGF0dXMgbGluZXMsIGZvciBleGFtcGxlLCB0byBkZWxpbWl0IHJlc3BvbnNlIGJvdW5kYXJpZXMuIAorPHAgY2xhc3M9ImxldmVsMSI+V2hlbiBhIHNlcnZlciBzZW5kcyBhIGNodW5rZWQgZW5jb2RlZCB0cmFuc2ZlciwgaXQgbWF5IGNvbnRhaW4gYSB0cmFpbGVyLiBUaGF0IHRyYWlsZXIgaXMgaWRlbnRpY2FsIHRvIGEgSFRUUCBoZWFkZXIgYW5kIGlmIHN1Y2ggYSB0cmFpbGVyIGlzIHJlY2VpdmVkIGl0IGlzIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhpcyBjYWxsYmFjayBhcyB3ZWxsLiBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRldGVjdCBpdCBiZWluZyBhIHRyYWlsZXIgYW5kIG5vdCBhbiBvcmRpbmFyeSBoZWFkZXI6IDEpIGl0IGNvbWVzIGFmdGVyIHRoZSByZXNwb25zZS1ib2R5LiAyKSBpdCBjb21lcyBhZnRlciB0aGUgZmluYWwgaGVhZGVyIGxpbmUgKENSIExGKSAzKSBhIFRyYWlsZXI6IGhlYWRlciBhbW9uZyB0aGUgcmVndWxhciByZXNwb25zZS1oZWFkZXJzIG1lbnRpb24gd2hhdCBoZWFkZXIocykgdG8gZXhwZWN0IGluIHRoZSB0cmFpbGVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRXUklURUhFQURFUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1dSSVRFSEVBREVSPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPihUaGlzIG9wdGlvbiBpcyBhbHNvIGtub3duIGFzIDxzcGFuIENsYXNzPSJib2xkIj5DVVJMT1BUX0hFQURFUkRBVEE8L3NwYW4+KSBQYXNzIGEgcG9pbnRlciB0byBiZSB1c2VkIHRvIHdyaXRlIHRoZSBoZWFkZXIgcGFydCBvZiB0aGUgcmVjZWl2ZWQgZGF0YSB0by4gSWYgeW91IGRvbid0IHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUV1JJVEVGVU5DVElPTiI+Q1VSTE9QVF9XUklURUZVTkNUSU9OPC9hPiBvciA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUSEVBREVSRlVOQ1RJT04iPkNVUkxPUFRfSEVBREVSRlVOQ1RJT048L2E+IHRvIHRha2UgY2FyZSBvZiB0aGUgd3JpdGluZywgdGhpcyBtdXN0IGJlIGEgdmFsaWQgRklMRSAqIGFzIHRoZSBpbnRlcm5hbCBkZWZhdWx0IHdpbGwgdGhlbiBiZSBhIHBsYWluIGZ3cml0ZSgpLiBTZWUgYWxzbyB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEhFQURFUkZVTkNUSU9OIj5DVVJMT1BUX0hFQURFUkZVTkNUSU9OPC9hPiBvcHRpb24gYWJvdmUgb24gaG93IHRvIHNldCBhIGN1c3RvbSBnZXQtYWxsLWhlYWRlcnMgY2FsbGJhY2suIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVERFQlVHRlVOQ1RJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9ERUJVR0ZVTkNUSU9OPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6IDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+aW50IGN1cmxfZGVidWdfY2FsbGJhY2sgKENVUkwgKiwgY3VybF9pbmZvdHlwZSwgY2hhciAqLCBzaXplX3QsIHZvaWQgKik7PC9zcGFuPiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUREVCVUdGVU5DVElPTiI+Q1VSTE9QVF9ERUJVR0ZVTkNUSU9OPC9hPiByZXBsYWNlcyB0aGUgc3RhbmRhcmQgZGVidWcgZnVuY3Rpb24gdXNlZCB3aGVuIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRWRVJCT1NFIj5DVVJMT1BUX1ZFUkJPU0UgPC9hPiBpcyBpbiBlZmZlY3QuIFRoaXMgY2FsbGJhY2sgcmVjZWl2ZXMgZGVidWcgaW5mb3JtYXRpb24sIGFzIHNwZWNpZmllZCB3aXRoIHRoZSA8c3BhbiBDbGFzcz0iYm9sZCI+Y3VybF9pbmZvdHlwZTwvc3Bhbj4gYXJndW1lbnQuIFRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gMC4gIFRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgdGhlIGNoYXIgKiBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBXSUxMIE5PVCBiZSB6ZXJvIHRlcm1pbmF0ZWQsIGJ1dCB3aWxsIGJlIGV4YWN0bHkgb2YgdGhlIHNpemUgYXMgdG9sZCBieSB0aGUgc2l6ZV90IGFyZ3VtZW50LiAKKzxwIGNsYXNzPSJsZXZlbDEiPkF2YWlsYWJsZSBjdXJsX2luZm90eXBlIHZhbHVlczogCis8cCBjbGFzcz0ibGV2ZWwyIj4KKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxJTkZPVEVYVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMSU5GT19URVhUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRoZSBkYXRhIGlzIGluZm9ybWF0aW9uYWwgdGV4dC4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMSU5GT0hFQURFUklOIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX0hFQURFUl9JTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGUgZGF0YSBpcyBoZWFkZXIgKG9yIGhlYWRlci1saWtlKSBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIHBlZXIuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTElORk9IRUFERVJPVVQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fSEVBREVSX09VVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGUgZGF0YSBpcyBoZWFkZXIgKG9yIGhlYWRlci1saWtlKSBkYXRhIHNlbnQgdG8gdGhlIHBlZXIuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTElORk9EQVRBSU4iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTElORk9fREFUQV9JTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGUgZGF0YSBpcyBwcm90b2NvbCBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIHBlZXIuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTElORk9EQVRBT1VUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxJTkZPX0RBVEFfT1VUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRoZSBkYXRhIGlzIHByb3RvY29sIGRhdGEgc2VudCB0byB0aGUgcGVlci4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRERUJVR0RBVEEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9ERUJVR0RBVEE8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gd2hhdGV2ZXIgeW91IHdhbnQgcGFzc2VkIGluIHRvIHlvdXIgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVERFQlVHRlVOQ1RJT04iPkNVUkxPUFRfREVCVUdGVU5DVElPTjwvYT4gaW4gdGhlIGxhc3Qgdm9pZCAqIGFyZ3VtZW50LiBUaGlzIHBvaW50ZXIgaXMgbm90IHVzZWQgYnkgbGliY3VybCwgaXQgaXMgb25seSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRTU0xDVFhGVU5DVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NTTF9DVFhfRlVOQ1RJT048L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gZG9lcyBvbmx5IGZ1bmN0aW9uIGZvciBsaWJjdXJsIHBvd2VyZWQgYnkgT3BlblNTTC4gSWYgbGliY3VybCB3YXMgYnVpbHQgYWdhaW5zdCBhbm90aGVyIFNTTCBsaWJyYXJ5LCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWJzZW50LiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6IDxzcGFuIGNsYXNzPSJib2xkIj5DVVJMY29kZSBzc2xjdHhmdW4oQ1VSTCAqY3VybCwgdm9pZCAqc3NsY3R4LCB2b2lkICpwYXJtKTs8L3NwYW4+IFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgbGliY3VybCBqdXN0IGJlZm9yZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYSBTU0wgY29ubmVjdGlvbiBhZnRlciBoYXZpbmcgcHJvY2Vzc2VkIGFsbCBvdGhlciBTU0wgcmVsYXRlZCBvcHRpb25zIHRvIGdpdmUgYSBsYXN0IGNoYW5jZSB0byBhbiBhcHBsaWNhdGlvbiB0byBtb2RpZnkgdGhlIGJlaGF2aW91ciBvZiBvcGVuc3NsJ3Mgc3NsIGluaXRpYWxpemF0aW9uLiBUaGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5zc2xjdHg8L3NwYW4+IHBhcmFtZXRlciBpcyBhY3R1YWxseSBhIHBvaW50ZXIgdG8gYW4gb3BlbnNzbCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPlNTTF9DVFg8L3NwYW4+LiBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCBubyBhdHRlbXB0IHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gaXMgbWFkZSBhbmQgdGhlIHBlcmZvcm0gb3BlcmF0aW9uIHdpbGwgcmV0dXJuIHRoZSBlcnJvciBjb2RlIGZyb20gdGhpcyBjYWxsYmFjayBmdW5jdGlvbi4gIFNldCB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5wYXJtPC9zcGFuPiBhcmd1bWVudCB3aXRoIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUU1NMQ1RYREFUQSI+Q1VSTE9QVF9TU0xfQ1RYX0RBVEE8L2E+IG9wdGlvbi4gVGhpcyBvcHRpb24gd2FzIGludHJvZHVjZWQgaW4gNy4xMS4wLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgY2FsbGVkIG9uIGFsbCBuZXcgY29ubmVjdGlvbnMgbWFkZSB0byBhIHNlcnZlciwgZHVyaW5nIHRoZSBTU0wgbmVnb3RpYXRpb24uIFRoZSBTU0xfQ1RYIHBvaW50ZXIgd2lsbCBiZSBhIG5ldyBvbmUgZXZlcnkgdGltZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UbyB1c2UgdGhpcyBwcm9wZXJseSwgYSBub24tdHJpdmlhbCBhbW91bnQgb2Yga25vd2xlZGdlIG9mIHRoZSBvcGVuc3NsIGxpYnJhcmllcyBpcyBuZWNlc3NhcnkuIEZvciBleGFtcGxlLCB1c2luZyB0aGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gdXNlIG9wZW5zc2wgY2FsbGJhY2tzIHRvIGFkZCBhZGRpdGlvbmFsIHZhbGlkYXRpb24gY29kZSBmb3IgY2VydGlmaWNhdGVzLCBhbmQgZXZlbiB0byBjaGFuZ2UgdGhlIGFjdHVhbCBVUkkgb2YgYSBIVFRQUyByZXF1ZXN0IChleGFtcGxlIHVzZWQgaW4gdGhlIGxpYjUwOSB0ZXN0IGNhc2UpLiAgU2VlIGFsc28gdGhlIGV4YW1wbGUgc2VjdGlvbiBmb3IgYSByZXBsYWNlbWVudCBvZiB0aGUga2V5LCBjZXJ0aWZpY2F0ZSBhbmQgdHJ1c3QgZmlsZSBzZXR0aW5ncy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUU1NMQ1RYREFUQSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NTTF9DVFhfREFUQTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5EYXRhIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgc3NsIGNvbnRleHQgY2FsbGJhY2sgc2V0IGJ5IHRoZSBvcHRpb24gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFNTTENUWEZVTkNUSU9OIj5DVVJMT1BUX1NTTF9DVFhfRlVOQ1RJT048L2E+LCB0aGlzIGlzIHRoZSBwb2ludGVyIHlvdSdsbCBnZXQgYXMgdGhpcmQgcGFyYW1ldGVyLCBvdGhlcndpc2UgPHNwYW4gQ2xhc3M9ImJvbGQiPk5VTEw8L3NwYW4+LiAoQWRkZWQgaW4gNy4xMS4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRDT05WVE9ORVRXT1JLRlVOQ1RJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DT05WX1RPX05FVFdPUktfRlVOQ1RJT048L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUQ09OVkZST01ORVRXT1JLRlVOQ1RJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DT05WX0ZST01fTkVUV09SS19GVU5DVElPTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRDT05WRlJPTVVURjhGVU5DVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0NPTlZfRlJPTV9VVEY4X0ZVTkNUSU9OPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiBDVVJMY29kZSBmdW5jdGlvbihjaGFyICpwdHIsIHNpemVfdCBsZW5ndGgpOyAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZXNlIHRocmVlIG9wdGlvbnMgYXBwbHkgdG8gbm9uLUFTQ0lJIHBsYXRmb3JtcyBvbmx5LiAgVGhleSBhcmUgYXZhaWxhYmxlIG9ubHkgaWYgPHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxfRE9FU19DT05WRVJTSU9OUzwvc3Bhbj4gd2FzIGRlZmluZWQgd2hlbiBsaWJjdXJsIHdhcyBidWlsdC4gV2hlbiB0aGlzIGlzIHRoZSBjYXNlLCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF92ZXJzaW9uX2luZm8uaHRtbCI+Y3VybF92ZXJzaW9uX2luZm8oMyk8L2E+IHdpbGwgcmV0dXJuIHRoZSBDVVJMX1ZFUlNJT05fQ09OViBmZWF0dXJlIGJpdCBzZXQuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIGRhdGEgdG8gYmUgY29udmVydGVkIGlzIGluIGEgYnVmZmVyIHBvaW50ZWQgdG8gYnkgdGhlIHB0ciBwYXJhbWV0ZXIuICBUaGUgYW1vdW50IG9mIGRhdGEgdG8gY29udmVydCBpcyBpbmRpY2F0ZWQgYnkgdGhlIGxlbmd0aCBwYXJhbWV0ZXIuICBUaGUgY29udmVydGVkIGRhdGEgb3ZlcmxheXMgdGhlIGlucHV0IGRhdGEgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IHRoZSBwdHIgcGFyYW1ldGVyLiBDVVJMRV9PSyBzaG91bGQgYmUgcmV0dXJuZWQgdXBvbiBzdWNjZXNzZnVsIGNvbnZlcnNpb24uICBBIENVUkxjb2RlIHJldHVybiB2YWx1ZSBkZWZpbmVkIGJ5IGN1cmwuaCwgc3VjaCBhcyBDVVJMRV9DT05WX0ZBSUxFRCwgc2hvdWxkIGJlIHJldHVybmVkIGlmIGFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBjbGFzcz0iYm9sZCIgaHJlZj0iI0NVUkxPUFRDT05WVE9ORVRXT1JLRlVOQ1RJT04iPkNVUkxPUFRfQ09OVl9UT19ORVRXT1JLX0ZVTkNUSU9OPC9hPiBhbmQgPGEgY2xhc3M9ImJvbGQiIGhyZWY9IiNDVVJMT1BUQ09OVkZST01ORVRXT1JLRlVOQ1RJT04iPkNVUkxPUFRfQ09OVl9GUk9NX05FVFdPUktfRlVOQ1RJT048L2E+IGNvbnZlcnQgYmV0d2VlbiB0aGUgaG9zdCBlbmNvZGluZyBhbmQgdGhlIG5ldHdvcmsgZW5jb2RpbmcuICBUaGV5IGFyZSB1c2VkIHdoZW4gY29tbWFuZHMgb3IgQVNDSUkgZGF0YSBhcmUgc2VudC9yZWNlaXZlZCBvdmVyIHRoZSBuZXR3b3JrLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGNsYXNzPSJib2xkIiBocmVmPSIjQ1VSTE9QVENPTlZGUk9NVVRGOEZVTkNUSU9OIj5DVVJMT1BUX0NPTlZfRlJPTV9VVEY4X0ZVTkNUSU9OPC9hPiBpcyBjYWxsZWQgdG8gY29udmVydCBmcm9tIFVURjggaW50byB0aGUgaG9zdCBlbmNvZGluZy4gIEl0IGlzIHJlcXVpcmVkIG9ubHkgZm9yIFNTTCBwcm9jZXNzaW5nLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHlvdSBzZXQgYSBjYWxsYmFjayBwb2ludGVyIHRvIE5VTEwsIG9yIGRvbid0IHNldCBpdCBhdCBhbGwsIHRoZSBidWlsdC1pbiBsaWJjdXJsIGljb252IGZ1bmN0aW9ucyB3aWxsIGJlIHVzZWQuICBJZiBIQVZFX0lDT05WIHdhcyBub3QgZGVmaW5lZCB3aGVuIGxpYmN1cmwgd2FzIGJ1aWx0LCBhbmQgbm8gY2FsbGJhY2sgaGFzIGJlZW4gZXN0YWJsaXNoZWQsIGNvbnZlcnNpb24gd2lsbCByZXR1cm4gdGhlIENVUkxFX0NPTlZfUkVRRCBlcnJvciBjb2RlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIEhBVkVfSUNPTlYgaXMgZGVmaW5lZCwgQ1VSTF9JQ09OVl9DT0RFU0VUX09GX0hPU1QgbXVzdCBhbHNvIGJlIGRlZmluZWQuIEZvciBleGFtcGxlOiAKKzxwIGNsYXNzPSJsZXZlbDEiPiZuYnNwOyNkZWZpbmUgQ1VSTF9JQ09OVl9DT0RFU0VUX09GX0hPU1QgIklCTS0xMDQ3IiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBpY29udiBjb2RlIGluIGxpYmN1cmwgd2lsbCBkZWZhdWx0IHRoZSBuZXR3b3JrIGFuZCBVVEY4IGNvZGVzZXQgbmFtZXMgYXMgZm9sbG93czogCis8cCBjbGFzcz0ibGV2ZWwxIj4mbmJzcDsjZGVmaW5lIENVUkxfSUNPTlZfQ09ERVNFVF9PRl9ORVRXT1JLICJJU084ODU5LTEiIAorPHAgY2xhc3M9ImxldmVsMSI+Jm5ic3A7I2RlZmluZSBDVVJMX0lDT05WX0NPREVTRVRfRk9SX1VURjggICAiVVRGLTgiIAorPHAgY2xhc3M9ImxldmVsMSI+WW91IHdpbGwgbmVlZCB0byBvdmVycmlkZSB0aGVzZSBkZWZpbml0aW9ucyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgb24geW91ciBzeXN0ZW0uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVElOVEVSTEVBVkVGVU5DVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0lOVEVSTEVBVkVGVU5DVElPTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPnNpemVfdCBmdW5jdGlvbiggdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICp1c2VyZGF0YSk8L3NwYW4+LiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGxpYmN1cmwgYXMgc29vbiBhcyBpdCBoYXMgcmVjZWl2ZWQgaW50ZXJsZWF2ZWQgUlRQIGRhdGEuIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZm9yIGVhY2ggJCBibG9jayBhbmQgdGhlcmVmb3JlIGNvbnRhaW5zIGV4YWN0bHkgb25lIHVwcGVyLWxheWVyIHByb3RvY29sIHVuaXQgKGUuZy4gIG9uZSBSVFAgcGFja2V0KS4gQ3VybCB3cml0ZXMgdGhlIGludGVybGVhdmVkIGhlYWRlciBhcyB3ZWxsIGFzIHRoZSBpbmNsdWRlZCBkYXRhIGZvciBlYWNoIGNhbGwuIFRoZSBmaXJzdCBieXRlIGlzIGFsd2F5cyBhbiBBU0NJSSBkb2xsYXIgc2lnbi4gVGhlIGRvbGxhciBzaWduIGlzIGZvbGxvd2VkIGJ5IGEgb25lIGJ5dGUgY2hhbm5lbCBpZGVudGlmaWVyIGFuZCB0aGVuIGEgMiBieXRlIGludGVnZXIgbGVuZ3RoIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4gU2VlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+PGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjMyNi50eHQiPlJGQyAyMzI2PC9hPiBTZWN0aW9uIDEwLjEyPC9zcGFuPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgUlRQIGludGVybGVhdmluZyBiZWhhdmVzLiBJZiB1bnNldCBvciBzZXQgdG8gTlVMTCwgY3VybCB3aWxsIHVzZSB0aGUgZGVmYXVsdCB3cml0ZSBmdW5jdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JbnRlcmxlYXZlZCBSVFAgcG9zZXMgc29tZSBjaGFsbGVuZWdlcyBmb3IgdGhlIGNsaWVudCBhcHBsaWNhdGlvbi4gU2luY2UgdGhlIHN0cmVhbSBkYXRhIGlzIHNoYXJpbmcgdGhlIFJUU1AgY29udHJvbCBjb25uZWN0aW9uLCBpdCBpcyBjcml0aWNhbCB0byBzZXJ2aWNlIHRoZSBSVFAgaW4gYSB0aW1lbHkgZmFzaGlvbi4gSWYgdGhlIFJUUCBkYXRhIGlzIG5vdCBoYW5kbGVkIHF1aWNrbHksIHN1YnNlcXVlbnQgcmVzcG9uc2UgcHJvY2Vzc2luZyBtYXkgYmVjb21lIHVucmVhc29uYWJseSBkZWxheWVkIGFuZCB0aGUgY29ubmVjdGlvbiBtYXkgY2xvc2UuIFRoZSBhcHBsaWNhdGlvbiBtYXkgdXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxSVFNQUkVRUkVDRUlWRSI+Q1VSTF9SVFNQUkVRX1JFQ0VJVkU8L2E+IHRvIHNlcnZpY2UgUlRQIGRhdGEgd2hlbiBubyByZXF1ZXN0cyBhcmUgZGVzaXJlZC4gSWYgdGhlIGFwcGxpY2F0aW9uIG1ha2VzIGEgcmVxdWVzdCwgKGUuZy4gIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxSVFNQUkVRUEFVU0UiPkNVUkxfUlRTUFJFUV9QQVVTRTwvYT4pIHRoZW4gdGhlIHJlc3BvbnNlIGhhbmRsZXIgd2lsbCBwcm9jZXNzIGFueSBwZW5kaW5nIFJUUCBkYXRhIGJlZm9yZSBtYXJraW5nIHRoZSByZXF1ZXN0IGFzIGZpbmlzaGVkLiAgKEFkZGVkIGluIDcuMjAuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUSU5URVJMRUFWRURBVEEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9JTlRFUkxFQVZFREFUQTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIGlzIHRoZSB1c2VyZGF0YSBwb2ludGVyIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVElOVEVSTEVBVkVGVU5DVElPTiI+Q1VSTE9QVF9JTlRFUkxFQVZFRlVOQ1RJT048L2E+IHdoZW4gaW50ZXJsZWF2ZWQgUlRQIGRhdGEgaXMgcmVjZWl2ZWQuIChBZGRlZCBpbiA3LjIwLjApIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVENIVU5LQkdORlVOQ1RJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DSFVOS19CR05fRlVOQ1RJT048L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RnVuY3Rpb24gcG9pbnRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgZm9sbG93aW5nIHByb3RvdHlwZTogPHNwYW4gY2xhc3M9ImJvbGQiPmxvbmcgZnVuY3Rpb24gKGNvbnN0IHZvaWQgKnRyYW5zZmVyX2luZm8sIHZvaWQgKnB0ciwgaW50IHJlbWFpbnMpPC9zcGFuPi4gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBsaWJjdXJsIGJlZm9yZSBhIHBhcnQgb2YgdGhlIHN0cmVhbSBpcyBnb2luZyB0byBiZSB0cmFuc2ZlcnJlZCAoaWYgdGhlIHRyYW5zZmVyIHN1cHBvcnRzIGNodW5rcykuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBjYWxsYmFjayBtYWtlcyBzZW5zZSBvbmx5IHdoZW4gdXNpbmcgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRXSUxEQ0FSRE1BVENIIj5DVVJMT1BUX1dJTERDQVJETUFUQ0g8L2E+IG9wdGlvbiBmb3Igbm93LiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSB0YXJnZXQgb2YgdHJhbnNmZXJfaW5mbyBwYXJhbWV0ZXIgaXMgYSAiZmVhdHVyZSBkZXBlbmRlZCIgc3RydWN0dXJlLiBGb3IgdGhlIEZUUCB3aWxkY2FyZCBkb3dubG9hZCwgdGhlIHRhcmdldCBpcyBjdXJsX2ZpbGVpbmZvIHN0cnVjdHVyZSAoc2VlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybC9jdXJsLmg8L3NwYW4+KS4gIFRoZSBwYXJhbWV0ZXIgcHRyIGlzIGEgcG9pbnRlciBnaXZlbiBieSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUQ0hVTktEQVRBIj5DVVJMT1BUX0NIVU5LX0RBVEE8L2E+LiBUaGUgcGFyYW1ldGVyIHJlbWFpbnMgY29udGFpbnMgbnVtYmVyIG9mIGNodW5rcyByZW1haW5pbmcgcGVyIHRoZSB0cmFuc2Zlci4gSWYgdGhlIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSwgdGhlIHBhcmFtZXRlciBoYXMgemVybyB2YWx1ZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5SZXR1cm4gPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMX0NIVU5LX0JHTl9GVU5DX09LPC9zcGFuPiBpZiBldmVyeXRoaW5nIGlzIGZpbmUsIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTF9DSFVOS19CR05fRlVOQ19TS0lQPC9zcGFuPiBpZiB5b3Ugd2FudCB0byBza2lwIHRoZSBjb25jcmV0ZSBjaHVuayBvciA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxfQ0hVTktfQkdOX0ZVTkNfRkFJTDwvc3Bhbj4gdG8gdGVsbCBsaWJjdXJsIHRvIHN0b3AgaWYgc29tZSBlcnJvciBvY2N1cnJlZC4gKFRoaXMgd2FzIGFkZGVkIGluIDcuMjEuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUQ0hVTktFTkRGVU5DVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0NIVU5LX0VORF9GVU5DVElPTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiA8c3BhbiBjbGFzcz0iYm9sZCI+bG9uZyBmdW5jdGlvbih2b2lkICpwdHIpPC9zcGFuPi4gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBsaWJjdXJsIGFzIHNvb24gYXMgYSBwYXJ0IG9mIHRoZSBzdHJlYW0gaGFzIGJlZW4gdHJhbnNmZXJyZWQgKG9yIHNraXBwZWQpLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlJldHVybiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxfQ0hVTktfRU5EX0ZVTkNfT0s8L3NwYW4+IGlmIGV2ZXJ5dGhpbmcgaXMgZmluZSBvciA8c3BhbiBDbGFzcz0iYm9sZCI+Q1VSTF9DSFVOS19FTkRfRlVOQ19GQUlMPC9zcGFuPiB0byB0ZWxsIHRoZSBsaWIgdG8gc3RvcCBpZiBzb21lIGVycm9yIG9jY3VycmVkLiAoVGhpcyB3YXMgYWRkZWQgaW4gNy4yMS4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRDSFVOS0RBVEEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DSFVOS19EQVRBPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRoYXQgd2lsbCBiZSB1bnRvdWNoZWQgYnkgbGliY3VybCBhbmQgcGFzc2VkIGFzIHRoZSBwdHIgYXJndW1lbnQgdG8gdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTF9DSFVOS19CR05fRlVOVElPTjwvc3Bhbj4gYW5kIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTF9DSFVOS19FTkRfRlVOVElPTjwvc3Bhbj4uIChUaGlzIHdhcyBhZGRlZCBpbiA3LjIxLjApIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEZOTUFUQ0hGVU5DVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0ZOTUFUQ0hfRlVOQ1RJT048L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RnVuY3Rpb24gcG9pbnRlciB0aGF0IHNob3VsZCBtYXRjaCA8c3BhbiBjbGFzcz0iYm9sZCI+aW50IGZ1bmN0aW9uKHZvaWQgKnB0ciwgY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nKTwvc3Bhbj4gcHJvdG90eXBlIChzZWUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jdXJsL2N1cmwuaDwvc3Bhbj4pLiBJdCBpcyB1c2VkIGludGVybmFsbHkgZm9yIHRoZSB3aWxkY2FyZCBtYXRjaGluZyBmZWF0dXJlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlJldHVybiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxfRk5NQVRDSEZVTkNfTUFUQ0g8L3NwYW4+IGlmIHBhdHRlcm4gbWF0Y2hlcyB0aGUgc3RyaW5nLCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxfRk5NQVRDSEZVTkNfTk9NQVRDSDwvc3Bhbj4gaWYgbm90IG9yIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTF9GTk1BVENIRlVOQ19GQUlMPC9zcGFuPiBpZiBhbiBlcnJvciBvY2N1cnJlZC4gIChUaGlzIHdhcyBhZGRlZCBpbiA3LjIxLjApIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEZOTUFUQ0hEQVRBIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfRk5NQVRDSF9EQVRBPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRoYXQgd2lsbCBiZSB1bnRvdWNoZWQgYnkgbGliY3VybCBhbmQgcGFzc2VkIGFzIHRoZSBwdHIgYXJndW1lbnQgdG8gdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTF9GTk1BVENIX0ZVTkNUSU9OPC9zcGFuPi4gKFRoaXMgd2FzIGFkZGVkIGluIDcuMjEuMCkgPGEgbmFtZT0iRVJST1IiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkVSUk9SIE9QVElPTlM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BURVJST1JCVUZGRVIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9FUlJPUkJVRkZFUjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY2hhciAqIHRvIGEgYnVmZmVyIHRoYXQgdGhlIGxpYmN1cmwgbWF5IHN0b3JlIGh1bWFuIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2VzIGluLiBUaGlzIG1heSBiZSBtb3JlIGhlbHBmdWwgdGhhbiBqdXN0IHRoZSByZXR1cm4gY29kZSBmcm9tIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9lYXN5X3BlcmZvcm08L3NwYW4+LiBUaGUgYnVmZmVyIG11c3QgYmUgYXQgbGVhc3QgQ1VSTF9FUlJPUl9TSVpFIGJpZy4gQWx0aG91Z2ggdGhpcyBhcmd1bWVudCBpcyBhICdjaGFyIConLCBpdCBkb2VzIG5vdCBkZXNjcmliZSBhbiBpbnB1dCBzdHJpbmcuIFRoZXJlZm9yZSB0aGUgKHByb2JhYmx5IHVuZGVmaW5lZCkgY29udGVudHMgb2YgdGhlIGJ1ZmZlciBpcyBOT1QgY29waWVkIGJ5IHRoZSBsaWJyYXJ5LiBZb3Ugc2hvdWxkIGtlZXAgdGhlIGFzc29jaWF0ZWQgc3RvcmFnZSBhdmFpbGFibGUgdW50aWwgbGliY3VybCBubyBsb25nZXIgbmVlZHMgaXQuIEZhaWxpbmcgdG8gZG8gc28gd2lsbCBjYXVzZSB2ZXJ5IG9kZCBiZWhhdmlvciBvciBldmVuIGNyYXNoZXMuIGxpYmN1cmwgd2lsbCBuZWVkIGl0IHVudGlsIHlvdSBjYWxsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfY2xlYW51cC5odG1sIj5jdXJsX2Vhc3lfY2xlYW51cCgzKTwvYT4gb3IgeW91IHNldCB0aGUgc2FtZSBvcHRpb24gYWdhaW4gdG8gdXNlIGEgZGlmZmVyZW50IHBvaW50ZXIuIAorPHAgY2xhc3M9ImxldmVsMSI+VXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRWRVJCT1NFIj5DVVJMT1BUX1ZFUkJPU0U8L2E+IGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUREVCVUdGVU5DVElPTiI+Q1VSTE9QVF9ERUJVR0ZVTkNUSU9OPC9hPiB0byBiZXR0ZXIgZGVidWcvdHJhY2Ugd2h5IGVycm9ycyBoYXBwZW4uIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhlIGxpYnJhcnkgZG9lcyBub3QgcmV0dXJuIGFuIGVycm9yLCB0aGUgYnVmZmVyIG1heSBub3QgaGF2ZSBiZWVuIHRvdWNoZWQuIERvIG5vdCByZWx5IG9uIHRoZSBjb250ZW50cyBpbiB0aG9zZSBjYXNlcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRTVERFUlIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9TVERFUlI8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIEZJTEUgKiBhcyBwYXJhbWV0ZXIuIFRlbGwgbGliY3VybCB0byB1c2UgdGhpcyBzdHJlYW0gaW5zdGVhZCBvZiBzdGRlcnIgd2hlbiBzaG93aW5nIHRoZSBwcm9ncmVzcyBtZXRlciBhbmQgZGlzcGxheWluZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVkVSQk9TRSI+Q1VSTE9QVF9WRVJCT1NFPC9hPiBkYXRhLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRGQUlMT05FUlJPUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0ZBSUxPTkVSUk9SPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkEgcGFyYW1ldGVyIHNldCB0byAxIHRlbGxzIHRoZSBsaWJyYXJ5IHRvIGZhaWwgc2lsZW50bHkgaWYgdGhlIEhUVFAgY29kZSByZXR1cm5lZCBpcyBlcXVhbCB0byBvciBsYXJnZXIgdGhhbiA0MDAuIFRoZSBkZWZhdWx0IGFjdGlvbiB3b3VsZCBiZSB0byByZXR1cm4gdGhlIHBhZ2Ugbm9ybWFsbHksIGlnbm9yaW5nIHRoYXQgY29kZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG1ldGhvZCBpcyBub3QgZmFpbC1zYWZlIGFuZCB0aGVyZSBhcmUgb2NjYXNpb25zIHdoZXJlIG5vbi1zdWNjZXNzZnVsIHJlc3BvbnNlIGNvZGVzIHdpbGwgc2xpcCB0aHJvdWdoLCBlc3BlY2lhbGx5IHdoZW4gYXV0aGVudGljYXRpb24gaXMgaW52b2x2ZWQgKHJlc3BvbnNlIGNvZGVzIDQwMSBhbmQgNDA3KS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Zb3UgbWlnaHQgZ2V0IHNvbWUgYW1vdW50cyBvZiBoZWFkZXJzIHRyYW5zZmVycmVkIGJlZm9yZSB0aGlzIHNpdHVhdGlvbiBpcyBkZXRlY3RlZCwgbGlrZSB3aGVuIGEgIjEwMC1jb250aW51ZSIgaXMgcmVjZWl2ZWQgYXMgYSByZXNwb25zZSB0byBhIFBPU1QvUFVUIGFuZCBhIDQwMSBvciA0MDcgaXMgcmVjZWl2ZWQgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcy4gPGEgbmFtZT0iTkVUV09SSyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkVUV09SSyBPUFRJT05TPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFVSTCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1VSTDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgYWN0dWFsIFVSTCB0byBkZWFsIHdpdGguIFRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgY2hhciAqIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyB3aGljaCBtdXN0IGJlIFVSTC1lbmNvZGVkIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiAKKzxwIGNsYXNzPSJsZXZlbDEiPnNjaGVtZTovL2hvc3Q6cG9ydC9wYXRoIAorPHAgY2xhc3M9ImxldmVsMSI+Rm9yIGEgZ3JlYXRlciBleHBsYW5hdGlvbiBvZiB0aGUgZm9ybWF0IHBsZWFzZSBzZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzk4Ni50eHQiPlJGQyAzOTg2PC9hPiAoPGEgaHJlZj0iaHR0cDovL2N1cmwuaGF4eC5zZS9yZmMvcmZjMzk4Ni50eHQiPmh0dHA6Ly9jdXJsLmhheHguc2UvcmZjL3JmYzM5ODYudHh0PC9hPikuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhlIGdpdmVuIFVSTCBsYWNrcyB0aGUgc2NoZW1lLCBvciBwcm90b2NvbCwgcGFydCAoImh0dHA6Ly8iIG9yICJmdHA6Ly8iIGV0YyksIGxpYmN1cmwgd2lsbCBhdHRlbXB0IHRvIHJlc29sdmUgd2hpY2ggcHJvdG9jb2wgdG8gdXNlIGJhc2VkIG9uIHRoZSBnaXZlbiBob3N0IG1hbWUuIElmIHRoZSBwcm90b2NvbCBpcyBub3Qgc3VwcG9ydGVkLCBsaWJjdXJsIHdpbGwgcmV0dXJuICg8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MPC9zcGFuPikgd2hlbiB5b3UgY2FsbCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3BlcmZvcm0uaHRtbCI+Y3VybF9lYXN5X3BlcmZvcm0oMyk8L2E+IG9yIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3BlcmZvcm0uaHRtbCI+Y3VybF9tdWx0aV9wZXJmb3JtKDMpPC9hPi4gVXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX3ZlcnNpb25faW5mby5odG1sIj5jdXJsX3ZlcnNpb25faW5mbygzKTwvYT4gZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHdoaWNoIHByb3RvY29scyBhcmUgc3VwcG9ydGVkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBob3N0IHBhcnQgb2YgdGhlIFVSTCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgc2VydmVyIHRoYXQgeW91IHdhbnQgdG8gY29ubmVjdCB0by4gVGhpcyBjYW4gYmUgdGhlIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSBvZiB0aGUgc2VydmVyLCB0aGUgbG9jYWwgbmV0d29yayBuYW1lIG9mIHRoZSBtYWNoaW5lIG9uIHlvdXIgbmV0d29yayBvciB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyIG9yIG1hY2hpbmUgcmVwcmVzZW50ZWQgYnkgZWl0aGVyIGFuIElQdjQgb3IgSVB2NiBhZGRyZXNzLiBGb3IgZXhhbXBsZTogCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBocmVmPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyI+aHR0cDovL3d3dy5leGFtcGxlLmNvbS88L2E+IAorPHAgY2xhc3M9ImxldmVsMSI+PGEgaHJlZj0iaHR0cDovL2hvc3RuYW1lLyI+aHR0cDovL2hvc3RuYW1lLzwvYT4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBocmVmPSJodHRwOi8vMTkyLjE2OC4wLjEvIj5odHRwOi8vMTkyLjE2OC4wLjEvPC9hPiAKKzxwIGNsYXNzPSJsZXZlbDEiPmh0dHA6Ly9bMjAwMToxODkwOjExMTI6MTo6MjBdLyAKKzxwIGNsYXNzPSJsZXZlbDEiPkl0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSB0aGUgdXNlciBuYW1lIGFuZCBwYXNzd29yZCBhcyBwYXJ0IG9mIHRoZSBob3N0LCBmb3Igc29tZSBwcm90b2NvbHMsIHdoZW4gY29ubmVjdGluZyB0byBzZXJ2ZXJzIHRoYXQgcmVxdWlyZSBhdXRoZW50aWNhdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Gb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgdGhpczogCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBocmVmPSJodHRwOi8vdXNlciI+aHR0cDovL3VzZXI8L2E+OnBhc3N3b3JkQHd3dy5kb21haW4uY29tIDxhIGhyZWY9ImZ0cDovL3VzZXIiPmZ0cDovL3VzZXI8L2E+OnBhc3N3b3JkQGZ0cC5kb21haW4uY29tIHBvcDM6Ly91c2VyOnBhc3N3b3JkQG1haWwuZG9tYWluLmNvbSAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBwb3J0IGlzIG9wdGlvbmFsIGFuZCB3aGVuIG5vdCBzcGVjaWZpZWQgbGliY3VybCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBwb3J0IGJhc2VkIG9uIHRoZSBkZXRlcm1pbmVkIG9yIHNwZWNpZmllZCBwcm90b2NvbDogODAgZm9yIGh0dHAsIDIxIGZvciBmdHAgYW5kIDI1IGZvciBzbXRwLCBldGMuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgc2hvdyBob3cgdG8gc3BlY2lmeSB0aGUgcG9ydDogCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBocmVmPSJodHRwOi8vd3d3LndlaXJkc2VydmVyLmNvbSI+aHR0cDovL3d3dy53ZWlyZHNlcnZlci5jb208L2E+OjgwODAvIC0gVGhpcyB3aWxsIGNvbm5lY3QgdG8gYSB3ZWIgc2VydmVyIHVzaW5nIHBvcnQgODA4MC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5zbXRwOi8vbWFpbC5kb21haW4uY29tOjU4Ny8gLSBUaGlzIHdpbGwgY29ubmVjdCB0byBhIHNtdHAgc2VydmVyIG9uIHRoZSBhbHRlcm5hdGl2ZSBtYWlsIHBvcnQuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIHBhdGggcGFydCBvZiB0aGUgVVJMIGlzIHByb3RvY29sIHNwZWNpZmljIGFuZCB3aGlsc3Qgc29tZSBleGFtcGxlcyBhcmUgZ2l2ZW4gYmVsb3cgdGhpcyBsaXN0IGlzIG5vdCBjb25jbHVzaXZlOiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGNsYXNzPSJib2xkIiBocmVmPSIjSFRUUCI+SFRUUDwvYT4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgcGF0aCBwYXJ0IG9mIGEgSFRUUCByZXF1ZXN0IHNwZWNpZmllcyB0aGUgZmlsZSB0byByZXRyaWV2ZSBhbmQgZnJvbSB3aGF0IGRpcmVjdG9yeS4gSWYgdGhlIGRpcmVjdG9yeSBpcyBub3Qgc3BlY2lmaWVkIHRoZW4gdGhlIHdlYiBzZXJ2ZXIncyByb290IGRpcmVjdG9yeSBpcyB1c2VkLiBJZiB0aGUgZmlsZSBpcyBvbWl0dGVkIHRoZW4gdGhlIGRlZmF1bHQgZG9jdW1lbnQgd2lsbCBiZSByZXRyaWV2ZWQgZm9yIGVpdGhlciB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBvciB0aGUgcm9vdCBkaXJlY3RvcnkuIFRoZSBleGFjdCByZXNvdXJjZSByZXR1cm5lZCBmb3IgZWFjaCBVUkwgaXMgZW50aXJlbHkgZGVwZW5kZW50IG9uIHRoZSBzZXJ2ZXIncyBjb25maWd1cmF0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGhyZWY9Imh0dHA6Ly93d3cubmV0c2NhcGUuY29tIj5odHRwOi8vd3d3Lm5ldHNjYXBlLmNvbTwvYT4gLSBUaGlzIGdldHMgdGhlIG1haW4gcGFnZSAoaW5kZXguaHRtbCBpbiB0aGlzIGV4YW1wbGUpIGZyb20gTmV0c2NhcGUncyB3ZWIgc2VydmVyLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGhyZWY9Imh0dHA6Ly93d3cubmV0c2NhcGUuY29tL2luZGV4Lmh0bWwiPmh0dHA6Ly93d3cubmV0c2NhcGUuY29tL2luZGV4Lmh0bWw8L2E+IC0gVGhpcyByZXR1cm5zIHRoZSBtYWluIHBhZ2UgZnJvbSBOZXRzY2FwZSBieSBzcGVjaWZ5aW5nIHRoZSBwYWdlIHRvIGdldC4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBocmVmPSJodHRwOi8vd3d3Lm5ldHNjYXBlLmNvbS9jb250YWN0dXMvIj5odHRwOi8vd3d3Lm5ldHNjYXBlLmNvbS9jb250YWN0dXMvPC9hPiAtIFRoaXMgcmV0dXJucyB0aGUgZGVmYXVsdCBkb2N1bWVudCBmcm9tIHRoZSBjb250YWN0dXMgZGlyZWN0b3J5LiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGNsYXNzPSJib2xkIiBocmVmPSIjRlRQIj5GVFA8L2E+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIHBhdGggcGFydCBvZiBhbiBGVFAgcmVxdWVzdCBzcGVjaWZpZXMgdGhlIGZpbGUgdG8gcmV0cmlldmUgYW5kIGZyb20gd2hhdCBkaXJlY3RvcnkuIElmIHRoZSBmaWxlIHBhcnQgaXMgb21pdHRlZCB0aGVuIGxpYmN1cmwgZG93bmxvYWRzIHRoZSBkaXJlY3RvcnkgbGlzdGluZyBmb3IgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQuIElmIHRoZSBkaXJlY3RvcnkgaXMgb21pdHRlZCB0aGVuIHRoZSBkaXJlY3RvcnkgbGlzdGluZyBmb3IgdGhlIHJvb3QgLyBob21lIGRpcmVjdG9yeSB3aWxsIGJlIHJldHVybmVkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGhyZWY9ImZ0cDovL2Nvb2wuaGF4eC5zZSI+ZnRwOi8vY29vbC5oYXh4LnNlPC9hPiAtIFRoaXMgcmV0cmlldmVzIHRoZSBkaXJlY3RvcnkgbGlzdGluZyBmb3Igb3VyIEZUUCBzZXJ2ZXIuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgaHJlZj0iZnRwOi8vY29vbC5oYXh4LnNlL3JlYWRtZS50eHQiPmZ0cDovL2Nvb2wuaGF4eC5zZS9yZWFkbWUudHh0PC9hPiAtIFRoaXMgZG93bmxvYWRzIHRoZSBmaWxlIHJlYWRtZS50eHQgZnJvbSB0aGUgcm9vdCBkaXJlY3RvcnkuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgaHJlZj0iZnRwOi8vY29vbC5oYXh4LnNlL2xpYmN1cmwvcmVhZG1lLnR4dCI+ZnRwOi8vY29vbC5oYXh4LnNlL2xpYmN1cmwvcmVhZG1lLnR4dDwvYT4gLSBUaGlzIGRvd25sb2FkcyByZWFkbWUudHh0IGZyb20gdGhlIGxpYmN1cmwgZGlyZWN0b3J5LiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGhyZWY9ImZ0cDovL3VzZXIiPmZ0cDovL3VzZXI8L2E+OnBhc3N3b3JkQG15LmV4YW1wbGUuY29tL3JlYWRtZS50eHQgLSBUaGlzIHJldHJpZXZlcyB0aGUgcmVhZG1lLnR4dCBmaWxlIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gV2hlbiBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBpcyBzcGVjaWZpZWQsIGV2ZXJ5dGhpbmcgdGhhdCBpcyBzcGVjaWZpZWQgaW4gdGhlIHBhdGggcGFydCBpcyByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LiBUbyByZXRyaWV2ZSBmaWxlcyBmcm9tIHRoZSByb290IGRpcmVjdG9yeSBvciBhIGRpcmVjdG9yeSB1bmRlcm5lYXRoIHRoZSByb290IGRpcmVjdG9yeSB0aGVuIHRoZSBhYnNvbHV0ZSBwYXRoIG11c3QgYmUgc3BlY2lmaWVkIGJ5IHByZXBlbmRpbmcgYW4gYWRkaXRpb25hbCBmb3J3YXJkIHNsYXNoIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGguIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgaHJlZj0iZnRwOi8vdXNlciI+ZnRwOi8vdXNlcjwvYT46cGFzc3dvcmRAbXkuZXhhbXBsZS5jb20vL3JlYWRtZS50eHQgLSBUaGlzIHJldHJpZXZlcyB0aGUgcmVhZG1lLnR4dCBmcm9tIHRoZSByb290IGRpcmVjdG9yeSB3aGVuIGxvZ2dpbmcgaW4gYXMgYSBzcGVjaWZpZWQgdXNlci4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBjbGFzcz0iYm9sZCIgaHJlZj0iI1NNVFAiPlNNVFA8L2E+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIHBhdGggcGFydCBvZiBhIFNNVFAgcmVxdWVzdCBzcGVjaWZpZXMgdGhlIGhvc3QgbmFtZSB0byBwcmVzZW50IGR1cmluZyBjb21tdW5pY2F0aW9uIHdpdGggdGhlIG1haWwgc2VydmVyLiBJZiB0aGUgcGF0aCBpcyBvbWl0dGVkIHRoZW4gbGliY3VybCB3aWxsIGF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgbG9jYWwgY29tcHV0ZXIncyBob3N0IG5hbWUuIEhvd2V2ZXIsIHRoaXMgbWF5IG5vdCByZXR1cm4gdGhlIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSB0aGF0IGlzIHJlcXVpcmVkIGJ5IHNvbWUgbWFpbCBzZXJ2ZXJzIGFuZCBzcGVjaWZ5aW5nIHRoaXMgcGF0aCBhbGxvd3MgeW91IHRvIHNldCBhbiBhbHRlcm5hdGl2ZSBuYW1lLCBzdWNoIGFzIHlvdXIgbWFjaGluZSdzIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSwgd2hpY2ggeW91IG1pZ2h0IGhhdmUgb2J0YWluZWQgZnJvbSBhbiBleHRlcm5hbCBmdW5jdGlvbiBzdWNoIGFzIGdldGhvc3RuYW1lIG9yIGdldGFkZHJpbmZvLiAKKzxwIGNsYXNzPSJsZXZlbDEiPnNtdHA6Ly9tYWlsLmRvbWFpbi5jb20gLSBUaGlzIGNvbm5lY3RzIHRvIHRoZSBtYWlsIHNlcnZlciBhdCBkb21haW4uY29tIGFuZCBzZW5kcyB5b3VyIGxvY2FsIGNvbXB1dGVyJ3MgaG9zdCBuYW1lIGluIHRoZSBIRUxPIC8gRUhMTyBjb21tYW5kLiAKKzxwIGNsYXNzPSJsZXZlbDEiPnNtdHA6Ly9tYWlsLmRvbWFpbi5jb20vY2xpZW50LmRvbWFpbi5jb20gLSBUaGlzIHdpbGwgc2VuZCBjbGllbnQuZG9tYWluLmNvbSBpbiB0aGUgSEVMTyAvIEVITE8gY29tbWFuZCB0byB0aGUgbWFpbCBzZXJ2ZXIgYXQgZG9tYWluLmNvbS4gCis8cCBjbGFzcz0ibGV2ZWwxIj48c3BhbiBDbGFzcz0iYm9sZCI+UE9QMzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgcGF0aCBwYXJ0IG9mIGEgUE9QMyByZXF1ZXN0IHNwZWNpZmllcyB0aGUgbWFpbGJveCAobWVzc2FnZSkgdG8gcmV0cmlldmUuIElmIHRoZSBtYWlsYm94IGlzIG5vdCBzcGVjaWZpZWQgdGhlbiBhIGxpc3Qgb2Ygd2FpdGluZyBtZXNzYWdlcyBpcyByZXR1cm5lZCBpbnN0ZWFkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPnBvcDM6Ly91c2VyOnBhc3N3b3JkQG1haWwuZG9tYWluLmNvbSAtIFRoaXMgbGlzdHMgdGhlIGF2YWlsYWJsZSBtZXNzYWdlcyBwb3AzOi8vdXNlcjpwYXNzd29yZEBtYWlsLmRvbWFpbi5jb20vMSAtIFRoaXMgcmV0cmlldmVzIHRoZSBmaXJzdCBtZXNzYWdlIAorPHAgY2xhc3M9ImxldmVsMSI+PHNwYW4gQ2xhc3M9ImJvbGQiPlNDUDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgcGF0aCBwYXJ0IG9mIGEgU0NQIHJlcXVlc3Qgc3BlY2lmaWVzIHRoZSBmaWxlIHRvIHJldHJpZXZlIGFuZCBmcm9tIHdoYXQgZGlyZWN0b3J5LiBUaGUgZmlsZSBwYXJ0IG1heSBub3QgYmUgb21pdHRlZC4gVGhlIGZpbGUgaXMgdGFrZW4gYXMgYW4gYWJzb2x1dGUgcGF0aCBmcm9tIHRoZSByb290IGRpcmVjdG9yeSBvbiB0aGUgc2VydmVyLiBUbyBzcGVjaWZ5IGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IG9uIHRoZSBzZXJ2ZXIsIHByZXBlbmQgfi8gdG8gdGhlIHBhdGggcG9ydGlvbi4gSWYgdGhlIHVzZXIgbmFtZSBpcyBub3QgZW1iZWRkZWQgaW4gdGhlIFVSTCwgaXQgY2FuIGJlIHNldCB3aXRoIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVVNFUlBXRCI+Q1VSTE9QVF9VU0VSUFdEPC9hPiBvciA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iI0NVUkxPUFRVU0VSTkFNRSI+Q1VSTE9QVF9VU0VSTkFNRTwvYT4gb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPnNjcDovL3VzZXJAZXhhbXBsZS5jb20vZXRjL2lzc3VlIC0gVGhpcyBzcGVjaWZpZXMgdGhlIGZpbGUgL2V0Yy9pc3N1ZSAKKzxwIGNsYXNzPSJsZXZlbDEiPnNjcDovL2V4YW1wbGUuY29tL34vbXktZmlsZSAtIFRoaXMgc3BlY2lmaWVzIHRoZSBmaWxlIG15LWZpbGUgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSBvbiB0aGUgc2VydmVyIAorPHAgY2xhc3M9ImxldmVsMSI+PHNwYW4gQ2xhc3M9ImJvbGQiPlNGVFA8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIHBhdGggcGFydCBvZiBhIFNGVFAgcmVxdWVzdCBzcGVjaWZpZXMgdGhlIGZpbGUgdG8gcmV0cmlldmUgYW5kIGZyb20gd2hhdCBkaXJlY3RvcnkuIElmIHRoZSBmaWxlIHBhcnQgaXMgb21pdHRlZCB0aGVuIGxpYmN1cmwgZG93bmxvYWRzIHRoZSBkaXJlY3RvcnkgbGlzdGluZyBmb3IgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQuICBJZiB0aGUgcGF0aCBlbmRzIGluIGEgLyB0aGVuIGEgZGlyZWN0b3J5IGxpc3RpbmcgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhIGZpbGUuICBJZiB0aGUgcGF0aCBpcyBvbWl0dGVkIGVudGlyZWx5IHRoZW4gdGhlIGRpcmVjdG9yeSBsaXN0aW5nIGZvciB0aGUgcm9vdCAvIGhvbWUgZGlyZWN0b3J5IHdpbGwgYmUgcmV0dXJuZWQuIElmIHRoZSB1c2VyIG5hbWUgaXMgbm90IGVtYmVkZGVkIGluIHRoZSBVUkwsIGl0IGNhbiBiZSBzZXQgd2l0aCB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFVTRVJQV0QiPkNVUkxPUFRfVVNFUlBXRDwvYT4gb3IgPGEgY2xhc3M9ImJvbGQiIGhyZWY9IiNDVVJMT1BUVVNFUk5BTUUiPkNVUkxPUFRfVVNFUk5BTUU8L2E+IG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5zPGEgaHJlZj0iZnRwOi8vdXNlciI+ZnRwOi8vdXNlcjwvYT46cGFzc3dvcmRAZXhhbXBsZS5jb20vZXRjL2lzc3VlIC0gVGhpcyBzcGVjaWZpZXMgdGhlIGZpbGUgL2V0Yy9pc3N1ZSAKKzxwIGNsYXNzPSJsZXZlbDEiPnM8YSBocmVmPSJmdHA6Ly91c2VyIj5mdHA6Ly91c2VyPC9hPkBleGFtcGxlLmNvbS9+L215LWZpbGUgLSBUaGlzIHNwZWNpZmllcyB0aGUgZmlsZSBteS1maWxlIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgCis8cCBjbGFzcz0ibGV2ZWwxIj5zPGEgaHJlZj0iZnRwOi8vc3NoLmV4YW1wbGUuY29tLyI+ZnRwOi8vc3NoLmV4YW1wbGUuY29tLzwvYT5+L0RvY3VtZW50cy8gLSBUaGlzIHJlcXVlc3RzIGEgZGlyZWN0b3J5IGxpc3Rpbmcgb2YgdGhlIERvY3VtZW50cyBkaXJlY3RvcnkgdW5kZXIgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSAKKzxwIGNsYXNzPSJsZXZlbDEiPjxzcGFuIENsYXNzPSJib2xkIj5OT1RFUzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TdGFydGluZyB3aXRoIHZlcnNpb24gNy4yMC4wLCB0aGUgZnJhZ21lbnQgcGFydCBvZiB0aGUgVVJJIHdpbGwgbm90IGJlIHNlbnQgYXMgcGFydCBvZiB0aGUgcGF0aCwgd2hpY2ggd2FzIHByZXZpb3VzbHkgdGhlIGNhc2UuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFVSTCI+Q1VSTE9QVF9VUkw8L2E+IGlzIHRoZSBvbmx5IG9wdGlvbiB0aGF0IDxzcGFuIENsYXNzPSJib2xkIj5tdXN0PC9zcGFuPiBiZSBzZXQgYmVmb3JlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfcGVyZm9ybS5odG1sIj5jdXJsX2Vhc3lfcGVyZm9ybSgzKTwvYT4gaXMgY2FsbGVkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQUk9UT0NPTFMiPkNVUkxPUFRfUFJPVE9DT0xTPC9hPiBjYW4gYmUgdXNlZCB0byBsaW1pdCB3aGF0IHByb3RvY29scyBsaWJjdXJsIHdpbGwgdXNlIGZvciB0aGlzIHRyYW5zZmVyLCBpbmRlcGVuZGVudCBvZiB3aGF0IGxpYmN1cmwgaGFzIGJlZW4gY29tcGlsZWQgdG8gc3VwcG9ydC4gVGhhdCBtYXkgYmUgdXNlZnVsIGlmIHlvdSBhY2NlcHQgdGhlIFVSTCBmcm9tIGFuIGV4dGVybmFsIHNvdXJjZSBhbmQgd2FudCB0byBsaW1pdCB0aGUgYWNjZXNzaWJpbGl0eS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUFJPVE9DT0xTIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfUFJPVE9DT0xTPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIHRoYXQgaG9sZHMgYSBiaXRtYXNrIG9mIENVUkxQUk9UT18qIGRlZmluZXMuIElmIHVzZWQsIHRoaXMgYml0bWFzayBsaW1pdHMgd2hhdCBwcm90b2NvbHMgbGliY3VybCBtYXkgdXNlIGluIHRoZSB0cmFuc2Zlci4gVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUgYSBsaWJjdXJsIGJ1aWx0IHRvIHN1cHBvcnQgYSB3aWRlIHJhbmdlIG9mIHByb3RvY29scyBidXQgc3RpbGwgbGltaXQgc3BlY2lmaWMgdHJhbnNmZXJzIHRvIG9ubHkgYmUgYWxsb3dlZCB0byB1c2UgYSBzdWJzZXQgb2YgdGhlbS4gQnkgZGVmYXVsdCBsaWJjdXJsIHdpbGwgYWNjZXB0IGFsbCBwcm90b2NvbHMgaXQgc3VwcG9ydHMuIFNlZSBhbHNvIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRSRURJUlBST1RPQ09MUyI+Q1VSTE9QVF9SRURJUl9QUk9UT0NPTFM8L2E+LiAoQWRkZWQgaW4gNy4xOS40KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRSRURJUlBST1RPQ09MUyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1JFRElSX1BST1RPQ09MUzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZyB0aGF0IGhvbGRzIGEgYml0bWFzayBvZiBDVVJMUFJPVE9fKiBkZWZpbmVzLiBJZiB1c2VkLCB0aGlzIGJpdG1hc2sgbGltaXRzIHdoYXQgcHJvdG9jb2xzIGxpYmN1cmwgbWF5IHVzZSBpbiBhIHRyYW5zZmVyIHRoYXQgaXQgZm9sbG93cyB0byBpbiBhIHJlZGlyZWN0IHdoZW4gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEZPTExPV0xPQ0FUSU9OIj5DVVJMT1BUX0ZPTExPV0xPQ0FUSU9OPC9hPiBpcyBlbmFibGVkLiBUaGlzIGFsbG93cyB5b3UgdG8gbGltaXQgc3BlY2lmaWMgdHJhbnNmZXJzIHRvIG9ubHkgYmUgYWxsb3dlZCB0byB1c2UgYSBzdWJzZXQgb2YgcHJvdG9jb2xzIGluIHJlZGlyZWN0aW9ucy4gQnkgZGVmYXVsdCBsaWJjdXJsIHdpbGwgYWxsb3cgYWxsIHByb3RvY29scyBleGNlcHQgZm9yIEZJTEUgYW5kIFNDUC4gVGhpcyBpcyBhIGRpZmZlcmVuY2UgY29tcGFyZWQgdG8gcHJlLTcuMTkuNCB2ZXJzaW9ucyB3aGljaCB1bmNvbmRpdGlvbmFsbHkgd291bGQgZm9sbG93IHRvIGFsbCBwcm90b2NvbHMgc3VwcG9ydGVkLiAoQWRkZWQgaW4gNy4xOS40KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRQUk9YWSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1BST1hZPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldCBIVFRQIHByb3h5IHRvIHVzZS4gVGhlIHBhcmFtZXRlciBzaG91bGQgYmUgYSBjaGFyICogdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGhvbGRpbmcgdGhlIGhvc3QgbmFtZSBvciBkb3R0ZWQgSVAgYWRkcmVzcy4gVG8gc3BlY2lmeSBwb3J0IG51bWJlciBpbiB0aGlzIHN0cmluZywgYXBwZW5kIDpbcG9ydF0gdG8gdGhlIGVuZCBvZiB0aGUgaG9zdCBuYW1lLiBUaGUgcHJveHkgc3RyaW5nIG1heSBiZSBwcmVmaXhlZCB3aXRoIFtwcm90b2NvbF06Ly8gc2luY2UgYW55IHN1Y2ggcHJlZml4IHdpbGwgYmUgaWdub3JlZC4gVGhlIHByb3h5J3MgcG9ydCBudW1iZXIgbWF5IG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkIHdpdGggdGhlIHNlcGFyYXRlIG9wdGlvbi4gSWYgbm90IHNwZWNpZmllZCwgbGliY3VybCB3aWxsIGRlZmF1bHQgdG8gdXNpbmcgcG9ydCAxMDgwIGZvciBwcm94aWVzLiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUFJPWFlQT1JUIj5DVVJMT1BUX1BST1hZUE9SVDwvYT4uIAorPHAgY2xhc3M9ImxldmVsMSI+V2hlbiB5b3UgdGVsbCB0aGUgbGlicmFyeSB0byB1c2UgYSBIVFRQIHByb3h5LCBsaWJjdXJsIHdpbGwgdHJhbnNwYXJlbnRseSBjb252ZXJ0IG9wZXJhdGlvbnMgdG8gSFRUUCBldmVuIGlmIHlvdSBzcGVjaWZ5IGFuIEZUUCBVUkwgZXRjLiBUaGlzIG1heSBoYXZlIGFuIGltcGFjdCBvbiB3aGF0IG90aGVyIGZlYXR1cmVzIG9mIHRoZSBsaWJyYXJ5IHlvdSBjYW4gdXNlLCBzdWNoIGFzIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRRVU9URSI+Q1VSTE9QVF9RVU9URTwvYT4gYW5kIHNpbWlsYXIgRlRQIHNwZWNpZmljcyB0aGF0IGRvbid0IHdvcmsgdW5sZXNzIHlvdSB0dW5uZWwgdGhyb3VnaCB0aGUgSFRUUCBwcm94eS4gU3VjaCB0dW5uZWxpbmcgaXMgYWN0aXZhdGVkIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEhUVFBQUk9YWVRVTk5FTCI+Q1VSTE9QVF9IVFRQUFJPWFlUVU5ORUw8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDEiPmxpYmN1cmwgcmVzcGVjdHMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyA8c3BhbiBDbGFzcz0iYm9sZCI+aHR0cF9wcm94eTwvc3Bhbj4sIDxzcGFuIENsYXNzPSJib2xkIj5mdHBfcHJveHk8L3NwYW4+LCA8c3BhbiBDbGFzcz0iYm9sZCI+YWxsX3Byb3h5PC9zcGFuPiBldGMsIGlmIGFueSBvZiB0aG9zZSBhcmUgc2V0LiBUaGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFBST1hZIj5DVVJMT1BUX1BST1hZPC9hPiBvcHRpb24gZG9lcyBob3dldmVyIG92ZXJyaWRlIGFueSBwb3NzaWJseSBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldHRpbmcgdGhlIHByb3h5IHN0cmluZyB0byAiIiAoYW4gZW1wdHkgc3RyaW5nKSB3aWxsIGV4cGxpY2l0bHkgZGlzYWJsZSB0aGUgdXNlIG9mIGEgcHJveHksIGV2ZW4gaWYgdGhlcmUgaXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0IGZvciBpdC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TaW5jZSA3LjE0LjEsIHRoZSBwcm94eSBob3N0IHN0cmluZyBnaXZlbiBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgY2FuIGJlIHNwZWNpZmllZCB0aGUgZXhhY3Qgc2FtZSB3YXkgYXMgdGhlIHByb3h5IGNhbiBiZSBzZXQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUFJPWFkiPkNVUkxPUFRfUFJPWFk8L2E+LCBpbmNsdWRlIHByb3RvY29sIHByZWZpeCAoaHR0cDovLykgYW5kIGVtYmVkZGVkIHVzZXIgKyBwYXNzd29yZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TaW5jZSA3LjIxLjcsIHRoZSBwcm94eSBzdHJpbmcgbWF5IGJlIHNwZWNpZmllZCB3aXRoIGEgcHJvdG9jb2w6Ly8gcHJlZml4IHRvIHNwZWNpZnkgYWx0ZXJuYXRpdmUgcHJveHkgcHJvdG9jb2xzLiBVc2Ugc29ja3M0Oi8vLCBzb2NrczRhOi8vLCBzb2NrczU6Ly8gb3Igc29ja3M1aDovLyAodGhlIGxhc3Qgb25lIHRvIGVuYWJsZSBzb2NrczUgYW5kIGFza2luZyB0aGUgcHJveHkgdG8gZG8gdGhlIHJlc29sdmluZywgYWxzbyBrbm93biBhcyBDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FIHR5cGUpIHRvIHJlcXVlc3QgdGhlIHNwZWNpZmljIFNPQ0tTIHZlcnNpb24gdG8gYmUgdXNlZC4gTm8gcHJvdG9jb2wgc3BlY2lmaWVkLCBodHRwOi8vIGFuZCBhbGwgb3RoZXJzIHdpbGwgYmUgdHJlYXRlZCBhcyBIVFRQIHByb3hpZXMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFBST1hZUE9SVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1BST1hZUE9SVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZyB3aXRoIHRoaXMgb3B0aW9uIHRvIHNldCB0aGUgcHJveHkgcG9ydCB0byBjb25uZWN0IHRvIHVubGVzcyBpdCBpcyBzcGVjaWZpZWQgaW4gdGhlIHByb3h5IHN0cmluZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUFJPWFkiPkNVUkxPUFRfUFJPWFk8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRQUk9YWVRZUEUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9QUk9YWVRZUEU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcgd2l0aCB0aGlzIG9wdGlvbiB0byBzZXQgdHlwZSBvZiB0aGUgcHJveHkuIEF2YWlsYWJsZSBvcHRpb25zIGZvciB0aGlzIGFyZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxQUk9YWV9IVFRQPC9zcGFuPiwgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMUFJPWFlfSFRUUF8xXzA8L3NwYW4+IChhZGRlZCBpbiA3LjE5LjQpLCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxQUk9YWV9TT0NLUzQ8L3NwYW4+IChhZGRlZCBpbiA3LjEwKSwgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMUFJPWFlfU09DS1M1PC9zcGFuPiwgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMUFJPWFlfU09DS1M0QTwvc3Bhbj4gKGFkZGVkIGluIDcuMTguMCkgYW5kIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRTwvc3Bhbj4gKGFkZGVkIGluIDcuMTguMCkuIFRoZSBIVFRQIHR5cGUgaXMgZGVmYXVsdC4gKEFkZGVkIGluIDcuMTApIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgeW91IHNldCA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iI0NVUkxPUFRQUk9YWVRZUEUiPkNVUkxPUFRfUFJPWFlUWVBFPC9hPiB0byA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxQUk9YWV9IVFRQXzFfMDwvc3Bhbj4sIGl0IHdpbGwgb25seSBhZmZlY3QgaG93IGxpYmN1cmwgc3BlYWtzIHRvIGEgcHJveHkgd2hlbiBDT05ORUNUIGlzIHVzZWQuIFRoZSBIVFRQIHZlcnNpb24gdXNlZCBmb3IgInJlZ3VsYXIiIEhUVFAgcmVxdWVzdHMgaXMgaW5zdGVhZCBjb250cm9sbGVkIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEhUVFBWRVJTSU9OIj5DVVJMT1BUX0hUVFBfVkVSU0lPTjwvYT4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVE5PUFJPWFkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9OT1BST1hZPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZy4gVGhpcyBzaG91bGQgYmUgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBob3N0cyB3aGljaCBkbyBub3QgdXNlIGEgcHJveHksIGlmIG9uZSBpcyBzcGVjaWZpZWQuICBUaGUgb25seSB3aWxkY2FyZCBpcyBhIHNpbmdsZSAqIGNoYXJhY3Rlciwgd2hpY2ggbWF0Y2hlcyBhbGwgaG9zdHMsIGFuZCBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGUgcHJveHkuIEVhY2ggbmFtZSBpbiB0aGlzIGxpc3QgaXMgbWF0Y2hlZCBhcyBlaXRoZXIgYSBkb21haW4gd2hpY2ggY29udGFpbnMgdGhlIGhvc3RuYW1lLCBvciB0aGUgaG9zdG5hbWUgaXRzZWxmLiBGb3IgZXhhbXBsZSwgbG9jYWwuY29tIHdvdWxkIG1hdGNoIGxvY2FsLmNvbSwgbG9jYWwuY29tOjgwLCBhbmQgd3d3LmxvY2FsLmNvbSwgYnV0IG5vdCB3d3cubm90bG9jYWwuY29tLiAoQWRkZWQgaW4gNy4xOS40KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRIVFRQUFJPWFlUVU5ORUwiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9IVFRQUFJPWFlUVU5ORUw8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U2V0IHRoZSBwYXJhbWV0ZXIgdG8gMSB0byBtYWtlIHRoZSBsaWJyYXJ5IHR1bm5lbCBhbGwgb3BlcmF0aW9ucyB0aHJvdWdoIGEgZ2l2ZW4gSFRUUCBwcm94eS4gVGhlcmUgaXMgYSBiaWcgZGlmZmVyZW5jZSBiZXR3ZWVuIHVzaW5nIGEgcHJveHkgYW5kIHRvIHR1bm5lbCB0aHJvdWdoIGl0LiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgbWVhbnMsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRoaXMgdHVubmVsaW5nIG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUU09DS1M1R1NTQVBJU0VSVklDRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NPQ0tTNV9HU1NBUElfU0VSVklDRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciB0byBhIHN0cmluZyBob2xkaW5nIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlLiBUaGUgZGVmYXVsdCBzZXJ2aWNlIG5hbWUgZm9yIGEgU09DS1M1IHNlcnZlciBpcyByY21kL3NlcnZlci1mcWRuLiBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNoYW5nZSBpdC4gKEFkZGVkIGluIDcuMTkuNCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUU09DS1M1R1NTQVBJTkVDIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfU09DS1M1X0dTU0FQSV9ORUM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcgc2V0IHRvIDEgdG8gZW5hYmxlIG9yIDAgdG8gZGlzYWJsZS4gQXMgcGFydCBvZiB0aGUgZ3NzYXBpIG5lZ290aWF0aW9uIGEgcHJvdGVjdGlvbiBtb2RlIGlzIG5lZ290aWF0ZWQuIFRoZSByZmMxOTYxIHNheXMgaW4gc2VjdGlvbiA0LjMvNC40IGl0IHNob3VsZCBiZSBwcm90ZWN0ZWQsIGJ1dCB0aGUgTkVDIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdC4gSWYgZW5hYmxlZCwgdGhpcyBvcHRpb24gYWxsb3dzIHRoZSB1bnByb3RlY3RlZCBleGNoYW5nZSBvZiB0aGUgcHJvdGVjdGlvbiBtb2RlIG5lZ290aWF0aW9uLiAoQWRkZWQgaW4gNy4xOS40KS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUSU5URVJGQUNFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfSU5URVJGQUNFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBjaGFyICogYXMgcGFyYW1ldGVyLiBUaGlzIHNldHMgdGhlIGludGVyZmFjZSBuYW1lIHRvIHVzZSBhcyBvdXRnb2luZyBuZXR3b3JrIGludGVyZmFjZS4gVGhlIG5hbWUgY2FuIGJlIGFuIGludGVyZmFjZSBuYW1lLCBhbiBJUCBhZGRyZXNzLCBvciBhIGhvc3QgbmFtZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TdGFydGluZyB3aXRoIDcuMjQuMDogSWYgdGhlIHBhcmFtZXRlciBzdGFydHMgd2l0aCAiaWYhIiB0aGVuIGl0IGlzIHRyZWF0ZWQgYXMgb25seSBhcyBpbnRlcmZhY2UgbmFtZSBhbmQgbm8gYXR0ZW1wdCB3aWxsIGV2ZXIgYmUgbmFtZWQgdG8gZG8gdHJlYXQgaXQgYXMgYW4gSVAgYWRkcmVzcyBvciB0byBkbyBuYW1lIHJlc29sdXRpb24gb24gaXQuICBJZiB0aGUgcGFyYW1ldGVyIHN0YXJ0cyB3aXRoICJob3N0ISIgaXQgaXMgdHJlYXRlZCBhcyBlaXRoZXIgYW4gSVAgYWRkcmVzcyBvciBhIGhvc3RuYW1lLiAgSG9zdG5hbWVzIGFyZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5LiAgVXNpbmcgdGhlIGlmISBmb3JtYXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHdoZW4gdXNpbmcgdGhlIG11bHRpIGludGVyZmFjZXMgdG8gYXZvaWQgYWxsb3dpbmcgdGhlIGNvZGUgdG8gYmxvY2suICBJZiAiaWYhIiBpcyBzcGVjaWZpZWQgYnV0IHRoZSBwYXJhbWV0ZXIgZG9lcyBub3QgbWF0Y2ggYW4gZXhpc3RpbmcgaW50ZXJmYWNlLCBDVVJMRV9JTlRFUkZBQ0VfRkFJTEVEIGlzIHJldHVybmVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRMT0NBTFBPUlQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9MT0NBTFBPUlQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcuIFRoaXMgc2V0cyB0aGUgbG9jYWwgcG9ydCBudW1iZXIgb2YgdGhlIHNvY2tldCB1c2VkIGZvciBjb25uZWN0aW9uLiBUaGlzIGNhbiBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVElOVEVSRkFDRSI+Q1VSTE9QVF9JTlRFUkZBQ0U8L2E+IGFuZCB5b3UgYXJlIHJlY29tbWVuZGVkIHRvIHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUTE9DQUxQT1JUUkFOR0UiPkNVUkxPUFRfTE9DQUxQT1JUUkFOR0U8L2E+IGFzIHdlbGwgd2hlbiB0aGlzIGlzIHNldC4gVmFsaWQgcG9ydCBudW1iZXJzIGFyZSAxIC0gNjU1MzUuIChBZGRlZCBpbiA3LjE1LjIpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVExPQ0FMUE9SVFJBTkdFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfTE9DQUxQT1JUUkFOR0U8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcuIFRoaXMgaXMgdGhlIG51bWJlciBvZiBhdHRlbXB0cyBsaWJjdXJsIHNob3VsZCBtYWtlIHRvIGZpbmQgYSB3b3JraW5nIGxvY2FsIHBvcnQgbnVtYmVyLiBJdCBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVExPQ0FMUE9SVCI+Q1VSTE9QVF9MT0NBTFBPUlQ8L2E+IGFuZCBhZGRzIG9uZSB0byB0aGUgbnVtYmVyIGZvciBlYWNoIHJldHJ5LiBTZXR0aW5nIHRoaXMgdG8gMSBvciBiZWxvdyB3aWxsIG1ha2UgbGliY3VybCBkbyBvbmx5IG9uZSB0cnkgZm9yIHRoZSBleGFjdCBwb3J0IG51bWJlci4gUG9ydCBudW1iZXJzIGJ5IG5hdHVyZSBhcmUgc2NhcmNlIHJlc291cmNlcyB0aGF0IHdpbGwgYmUgYnVzeSBhdCB0aW1lcyBzbyBzZXR0aW5nIHRoaXMgdmFsdWUgdG8gc29tZXRoaW5nIHRvbyBsb3cgbWlnaHQgY2F1c2UgdW5uZWNlc3NhcnkgY29ubmVjdGlvbiBzZXR1cCBmYWlsdXJlcy4gKEFkZGVkIGluIDcuMTUuMikgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BURE5TQ0FDSEVUSU1FT1VUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfRE5TX0NBQ0hFX1RJTUVPVVQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcsIHRoaXMgc2V0cyB0aGUgdGltZW91dCBpbiBzZWNvbmRzLiBOYW1lIHJlc29sdmVzIHdpbGwgYmUga2VwdCBpbiBtZW1vcnkgZm9yIHRoaXMgbnVtYmVyIG9mIHNlY29uZHMuIFNldCB0byB6ZXJvIHRvIGNvbXBsZXRlbHkgZGlzYWJsZSBjYWNoaW5nLCBvciBzZXQgdG8gLTEgdG8gbWFrZSB0aGUgY2FjaGVkIGVudHJpZXMgcmVtYWluIGZvcmV2ZXIuIEJ5IGRlZmF1bHQsIGxpYmN1cmwgY2FjaGVzIHRoaXMgaW5mbyBmb3IgNjAgc2Vjb25kcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgbmFtZSByZXNvbHZlIGZ1bmN0aW9ucyBvZiB2YXJpb3VzIGxpYmMgaW1wbGVtZW50YXRpb25zIGRvbid0IHJlLXJlYWQgbmFtZSBzZXJ2ZXIgaW5mb3JtYXRpb24gdW5sZXNzIGV4cGxpY2l0bHkgdG9sZCBzbyAoZm9yIGV4YW1wbGUsIGJ5IGNhbGxpbmcgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5yZXNfaW5pdCgzKTwvc3Bhbj4pLiBUaGlzIG1heSBjYXVzZSBsaWJjdXJsIHRvIGtlZXAgdXNpbmcgdGhlIG9sZGVyIHNlcnZlciBldmVuIGlmIERIQ1AgaGFzIHVwZGF0ZWQgdGhlIHNlcnZlciBpbmZvLCBhbmQgdGhpcyBtYXkgbG9vayBsaWtlIGEgRE5TIGNhY2hlIGlzc3VlIHRvIHRoZSBjYXN1YWwgbGliY3VybC1hcHAgdXNlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BURE5TVVNFR0xPQkFMQ0FDSEUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9ETlNfVVNFX0dMT0JBTF9DQUNIRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZy4gSWYgdGhlIHZhbHVlIGlzIDEsIGl0IHRlbGxzIGN1cmwgdG8gdXNlIGEgZ2xvYmFsIEROUyBjYWNoZSB0aGF0IHdpbGwgc3Vydml2ZSBiZXR3ZWVuIGVhc3kgaGFuZGxlIGNyZWF0aW9ucyBhbmQgZGVsZXRpb25zLiBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSBhbmQgdGhpcyB3aWxsIHVzZSBhIGdsb2JhbCB2YXJpYWJsZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj48c3BhbiBDbGFzcz0iYm9sZCI+V0FSTklORzo8L3NwYW4+IHRoaXMgb3B0aW9uIGlzIGNvbnNpZGVyZWQgb2Jzb2xldGUuIFN0b3AgdXNpbmcgaXQuIFN3aXRjaCBvdmVyIHRvIHVzaW5nIHRoZSBzaGFyZSBpbnRlcmZhY2UgaW5zdGVhZCEgU2VlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRTSEFSRSI+Q1VSTE9QVF9TSEFSRTwvYT4gYW5kIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX3NoYXJlX2luaXQuaHRtbCI+Y3VybF9zaGFyZV9pbml0KDMpPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUQlVGRkVSU0laRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0JVRkZFUlNJWkU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcgc3BlY2lmeWluZyB5b3VyIHByZWZlcnJlZCBzaXplIChpbiBieXRlcykgZm9yIHRoZSByZWNlaXZlIGJ1ZmZlciBpbiBsaWJjdXJsLiAgVGhlIG1haW4gcG9pbnQgb2YgdGhpcyB3b3VsZCBiZSB0aGF0IHRoZSB3cml0ZSBjYWxsYmFjayBnZXRzIGNhbGxlZCBtb3JlIG9mdGVuIGFuZCB3aXRoIHNtYWxsZXIgY2h1bmtzLiBUaGlzIGlzIGp1c3QgdHJlYXRlZCBhcyBhIHJlcXVlc3QsIG5vdCBhbiBvcmRlci4gWW91IGNhbm5vdCBiZSBndWFyYW50ZWVkIHRvIGFjdHVhbGx5IGdldCB0aGUgZ2l2ZW4gc2l6ZS4gKEFkZGVkIGluIDcuMTApIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBzaXplIGlzIGJ5IGRlZmF1bHQgc2V0IGFzIGJpZyBhcyBwb3NzaWJsZSAoQ1VSTF9NQVhfV1JJVEVfU0laRSksIHNvIGl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gdXNlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGl0IHNtYWxsZXIuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFBPUlQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9QT1JUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIHNwZWNpZnlpbmcgd2hhdCByZW1vdGUgcG9ydCBudW1iZXIgdG8gY29ubmVjdCB0bywgaW5zdGVhZCBvZiB0aGUgb25lIHNwZWNpZmllZCBpbiB0aGUgVVJMIG9yIHRoZSBkZWZhdWx0IHBvcnQgZm9yIHRoZSB1c2VkIHByb3RvY29sLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRUQ1BOT0RFTEFZIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfVENQX05PREVMQVk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcgc3BlY2lmeWluZyB3aGV0aGVyIHRoZSBUQ1BfTk9ERUxBWSBvcHRpb24gc2hvdWxkIGJlIHNldCBvciBjbGVhcmVkICgxID0gc2V0LCAwID0gY2xlYXIpLiBUaGUgb3B0aW9uIGlzIGNsZWFyZWQgYnkgZGVmYXVsdC4gVGhpcyB3aWxsIGhhdmUgbm8gZWZmZWN0IGFmdGVyIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldHRpbmcgdGhpcyBvcHRpb24gd2lsbCBkaXNhYmxlIFRDUCdzIE5hZ2xlIGFsZ29yaXRobS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBhbGdvcml0aG0gaXMgdG8gdHJ5IHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2Ygc21hbGwgcGFja2V0cyBvbiB0aGUgbmV0d29yayAod2hlcmUgInNtYWxsIHBhY2tldHMiIG1lYW5zIFRDUCBzZWdtZW50cyBsZXNzIHRoYW4gdGhlIE1heGltdW0gU2VnbWVudCBTaXplIChNU1MpIGZvciB0aGUgbmV0d29yaykuIAorPHAgY2xhc3M9ImxldmVsMSI+TWF4aW1pemluZyB0aGUgYW1vdW50IG9mIGRhdGEgc2VudCBwZXIgVENQIHNlZ21lbnQgaXMgZ29vZCBiZWNhdXNlIGl0IGFtb3J0aXplcyB0aGUgb3ZlcmhlYWQgb2YgdGhlIHNlbmQuIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMgKG1vc3Qgbm90YWJseSB0ZWxuZXQgb3IgcmxvZ2luKSBzbWFsbCBzZWdtZW50cyBtYXkgbmVlZCB0byBiZSBzZW50IHdpdGhvdXQgZGVsYXkuIFRoaXMgaXMgbGVzcyBlZmZpY2llbnQgdGhhbiBzZW5kaW5nIGxhcmdlciBhbW91bnRzIG9mIGRhdGEgYXQgYSB0aW1lLCBhbmQgY2FuIGNvbnRyaWJ1dGUgdG8gY29uZ2VzdGlvbiBvbiB0aGUgbmV0d29yayBpZiBvdmVyZG9uZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUQUREUkVTU1NDT1BFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfQUREUkVTU19TQ09QRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZyBzcGVjaWZ5aW5nIHRoZSBzY29wZV9pZCB2YWx1ZSB0byB1c2Ugd2hlbiBjb25uZWN0aW5nIHRvIElQdjYgbGluay1sb2NhbCBvciBzaXRlLWxvY2FsIGFkZHJlc3Nlcy4gKEFkZGVkIGluIDcuMTkuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUVENQS0VFUEFMSVZFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfVENQX0tFRVBBTElWRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZy4gSWYgc2V0IHRvIDEsIFRDUCBrZWVwYWxpdmUgcHJvYmVzIHdpbGwgYmUgc2VudC4gVGhlIGRlbGF5IGFuZCBmcmVxdWVuY3kgb2YgdGhlc2UgcHJvYmVzIGNhbiBiZSBjb250cm9sbGVkIGJ5IHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVENQS0VFUElETEUiPkNVUkxPUFRfVENQX0tFRVBJRExFPC9hPiBhbmQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFRDUEtFRVBJTlRWTCI+Q1VSTE9QVF9UQ1BfS0VFUElOVFZMPC9hPiBvcHRpb25zLCBwcm92aWRlZCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBzdXBwb3J0cyB0aGVtLiBTZXQgdG8gMCAoZGVmYXVsdCBiZWhhdmlvcikgdG8gZGlzYWJsZSBrZWVwYWxpdmUgcHJvYmVzIChBZGRlZCBpbiA3LjI1LjApLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRUQ1BLRUVQSURMRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1RDUF9LRUVQSURMRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZy4gU2V0cyB0aGUgZGVsYXksIGluIHNlY29uZHMsIHRoYXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2lsbCB3YWl0IHdoaWxlIHRoZSBjb25uZWN0aW9uIGlzIGlkbGUgYmVmb3JlIHNlbmRpbmcga2VlcGFsaXZlIHByb2Jlcy4gTm90IGFsbCBvcGVyYXRpbmcgc3lzdGVtcyBzdXBwb3J0IHRoaXMgb3B0aW9uLiAoQWRkZWQgaW4gNy4yNS4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRUQ1BLRUVQSU5UVkwiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9UQ1BfS0VFUElOVFZMPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nLiBTZXRzIHRoZSBpbnRlcnZhbCwgaW4gc2Vjb25kcywgdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aWxsIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwcm9iZXMuIE5vdCBhbGwgb3BlcmF0aW5nIHN5c3RlbXMgc3VwcG9ydCB0aGlzIG9wdGlvbi4gKEFkZGVkIGluIDcuMjUuMCkgPGEgbmFtZT0iTkFNRVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUVTIGFuZCBQQVNTV09SRFMgT1BUSU9OUyAoQXV0aGVudGljYXRpb24pPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVE5FVFJDIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfTkVUUkM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIHByZWZlcmVuY2Ugb2YgbGliY3VybCBiZXR3ZWVuIHVzaW5nIHVzZXIgbmFtZXMgYW5kIHBhc3N3b3JkcyBmcm9tIHlvdXIgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5+Ly5uZXRyYzwvc3Bhbj4gZmlsZSwgcmVsYXRpdmUgdG8gdXNlciBuYW1lcyBhbmQgcGFzc3dvcmRzIGluIHRoZSBVUkwgc3VwcGxpZWQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVVJMIj5DVVJMT1BUX1VSTDwvYT4uIAorPHAgY2xhc3M9ImxldmVsMSI+bGliY3VybCB1c2VzIGEgdXNlciBuYW1lIChhbmQgc3VwcGxpZWQgb3IgcHJvbXB0ZWQgcGFzc3dvcmQpIHN1cHBsaWVkIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFVTRVJQV0QiPkNVUkxPUFRfVVNFUlBXRDwvYT4gaW4gcHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIG9wdGlvbnMgY29udHJvbGxlZCBieSB0aGlzIHBhcmFtZXRlci4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZywgc2V0IHRvIG9uZSBvZiB0aGUgdmFsdWVzIGRlc2NyaWJlZCBiZWxvdy4gCis8cCBjbGFzcz0ibGV2ZWwyIj4KKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxORVRSQ09QVElPTkFMIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfTkVUUkNfT1BUSU9OQUw8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VGhlIHVzZSBvZiB5b3VyIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+fi8ubmV0cmM8L3NwYW4+IGZpbGUgaXMgb3B0aW9uYWwsIGFuZCBpbmZvcm1hdGlvbiBpbiB0aGUgVVJMIGlzIHRvIGJlIHByZWZlcnJlZC4gIFRoZSBmaWxlIHdpbGwgYmUgc2Nhbm5lZCBmb3IgdGhlIGhvc3QgYW5kIHVzZXIgbmFtZSAodG8gZmluZCB0aGUgcGFzc3dvcmQgb25seSkgb3IgZm9yIHRoZSBob3N0IG9ubHksIHRvIGZpbmQgdGhlIGZpcnN0IHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgYWZ0ZXIgdGhhdCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPm1hY2hpbmU8L3NwYW4+LCB3aGljaCBldmVyIGluZm9ybWF0aW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIFVSTC4gCis8cCBjbGFzcz0ibGV2ZWwyIj5VbmRlZmluZWQgdmFsdWVzIG9mIHRoZSBvcHRpb24gd2lsbCBoYXZlIHRoaXMgZWZmZWN0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxORVRSQ0lHTk9SRUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9ORVRSQ19JR05PUkVEPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRoZSBsaWJyYXJ5IHdpbGwgaWdub3JlIHRoZSBmaWxlIGFuZCB1c2Ugb25seSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIFVSTC4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGlzIGlzIHRoZSBkZWZhdWx0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxORVRSQ1JFUVVJUkVEIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfTkVUUkNfUkVRVUlSRUQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VGhpcyB2YWx1ZSB0ZWxscyB0aGUgbGlicmFyeSB0aGF0IHVzZSBvZiB0aGUgZmlsZSBpcyByZXF1aXJlZCwgdG8gaWdub3JlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgVVJMLCBhbmQgdG8gc2VhcmNoIHRoZSBmaWxlIGZvciB0aGUgaG9zdCBvbmx5LiAKKzxwIGNsYXNzPSJsZXZlbDEiPk9ubHkgbWFjaGluZSBuYW1lLCB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgKGluaXQgbWFjcm9zIGFuZCBzaW1pbGFyIHRoaW5ncyBhcmVuJ3Qgc3VwcG9ydGVkKS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5saWJjdXJsIGRvZXMgbm90IHZlcmlmeSB0aGF0IHRoZSBmaWxlIGhhcyB0aGUgY29ycmVjdCBwcm9wZXJ0aWVzIHNldCAoYXMgdGhlIHN0YW5kYXJkIFVuaXggZnRwIGNsaWVudCBkb2VzKS4gSXQgc2hvdWxkIG9ubHkgYmUgcmVhZGFibGUgYnkgdXNlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUTkVUUkNGSUxFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfTkVUUkNfRklMRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgcG9pbnRpbmcgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZ1bGwgcGF0aCBuYW1lIHRvIHRoZSBmaWxlIHlvdSB3YW50IGxpYmN1cmwgdG8gdXNlIGFzIC5uZXRyYyBmaWxlLiBJZiB0aGlzIG9wdGlvbiBpcyBvbWl0dGVkLCBhbmQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVE5FVFJDIj5DVVJMT1BUX05FVFJDPC9hPiBpcyBzZXQsIGxpYmN1cmwgd2lsbCBhdHRlbXB0IHRvIGZpbmQgYSAubmV0cmMgZmlsZSBpbiB0aGUgY3VycmVudCB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuIChBZGRlZCBpbiA3LjEwLjkpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFVTRVJQV0QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9VU0VSUFdEPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBjaGFyICogYXMgcGFyYW1ldGVyLCB3aGljaCBzaG91bGQgYmUgW3VzZXIgbmFtZV06W3Bhc3N3b3JkXSB0byB1c2UgZm9yIHRoZSBjb25uZWN0aW9uLiBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEhUVFBBVVRIIj5DVVJMT1BUX0hUVFBBVVRIPC9hPiB0byBkZWNpZGUgdGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIHVzaW5nIE5UTE0sIHlvdSBjYW4gc2V0IHRoZSBkb21haW4gYnkgcHJlcGVuZGluZyBpdCB0byB0aGUgdXNlciBuYW1lIGFuZCBzZXBhcmF0aW5nIHRoZSBkb21haW4gYW5kIG5hbWUgd2l0aCBhIGZvcndhcmQgKC8pIG9yIGJhY2t3YXJkIHNsYXNoIChcKS4gTGlrZSB0aGlzOiAiZG9tYWluL3VzZXI6cGFzc3dvcmQiIG9yICJkb21haW5cdXNlcjpwYXNzd29yZCIuIFNvbWUgSFRUUCBzZXJ2ZXJzIChvbiBXaW5kb3dzKSBzdXBwb3J0IHRoaXMgc3R5bGUgZXZlbiBmb3IgQmFzaWMgYXV0aGVudGljYXRpb24uIAorPHAgY2xhc3M9ImxldmVsMSI+V2hlbiB1c2luZyBIVFRQIGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BURk9MTE9XTE9DQVRJT04iPkNVUkxPUFRfRk9MTE9XTE9DQVRJT048L2E+LCBsaWJjdXJsIG1pZ2h0IHBlcmZvcm0gc2V2ZXJhbCByZXF1ZXN0cyB0byBwb3NzaWJseSBkaWZmZXJlbnQgaG9zdHMuIGxpYmN1cmwgd2lsbCBvbmx5IHNlbmQgdGhpcyB1c2VyIGFuZCBwYXNzd29yZCBpbmZvcm1hdGlvbiB0byBob3N0cyB1c2luZyB0aGUgaW5pdGlhbCBob3N0IG5hbWUgKHVubGVzcyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVU5SRVNUUklDVEVEQVVUSCI+Q1VSTE9QVF9VTlJFU1RSSUNURURfQVVUSDwvYT4gaXMgc2V0KSwgc28gaWYgbGliY3VybCBmb2xsb3dzIGxvY2F0aW9ucyB0byBvdGhlciBob3N0cyBpdCB3aWxsIG5vdCBzZW5kIHRoZSB1c2VyIGFuZCBwYXNzd29yZCB0byB0aG9zZS4gVGhpcyBpcyBlbmZvcmNlZCB0byBwcmV2ZW50IGFjY2lkZW50YWwgaW5mb3JtYXRpb24gbGVha2FnZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUFJPWFlVU0VSUFdEIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfUFJPWFlVU0VSUFdEPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBjaGFyICogYXMgcGFyYW1ldGVyLCB3aGljaCBzaG91bGQgYmUgW3VzZXIgbmFtZV06W3Bhc3N3b3JkXSB0byB1c2UgZm9yIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBIVFRQIHByb3h5LiAgVXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQUk9YWUFVVEgiPkNVUkxPUFRfUFJPWFlBVVRIPC9hPiB0byBkZWNpZGUgdGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUVVNFUk5BTUUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9VU0VSTkFNRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgd2hpY2ggc2hvdWxkIGJlIHBvaW50aW5nIHRvIHRoZSB6ZXJvIHRlcm1pbmF0ZWQgdXNlciBuYW1lIHRvIHVzZSBmb3IgdGhlIHRyYW5zZmVyLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIGNsYXNzPSJib2xkIiBocmVmPSIjQ1VSTE9QVFVTRVJOQU1FIj5DVVJMT1BUX1VTRVJOQU1FPC9hPiBzZXRzIHRoZSB1c2VyIG5hbWUgdG8gYmUgdXNlZCBpbiBwcm90b2NvbCBhdXRoZW50aWNhdGlvbi4gWW91IHNob3VsZCBub3QgdXNlIHRoaXMgb3B0aW9uIHRvZ2V0aGVyIHdpdGggdGhlIChvbGRlcikgQ1VSTE9QVF9VU0VSUFdEIG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JbiBvcmRlciB0byBzcGVjaWZ5IHRoZSBwYXNzd29yZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHVzZXIgbmFtZSB1c2UgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQQVNTV09SRCI+Q1VSTE9QVF9QQVNTV09SRDwvYT4gb3B0aW9uLiAgKEFkZGVkIGluIDcuMTkuMSkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUEFTU1dPUkQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9QQVNTV09SRDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgd2hpY2ggc2hvdWxkIGJlIHBvaW50aW5nIHRvIHRoZSB6ZXJvIHRlcm1pbmF0ZWQgcGFzc3dvcmQgdG8gdXNlIGZvciB0aGUgdHJhbnNmZXIuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIENVUkxPUFRfUEFTU1dPUkQgb3B0aW9uIHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRVU0VSTkFNRSI+Q1VSTE9QVF9VU0VSTkFNRTwvYT4gb3B0aW9uLiAoQWRkZWQgaW4gNy4xOS4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRQUk9YWVVTRVJOQU1FIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfUFJPWFlVU0VSTkFNRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgd2hpY2ggc2hvdWxkIGJlIHBvaW50aW5nIHRvIHRoZSB6ZXJvIHRlcm1pbmF0ZWQgdXNlciBuYW1lIHRvIHVzZSBmb3IgdGhlIHRyYW5zZmVyIHdoaWxlIGNvbm5lY3RpbmcgdG8gUHJveHkuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIENVUkxPUFRfUFJPWFlVU0VSTkFNRSBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4gc2FtZSB3YXkgYXMgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQUk9YWVVTRVJQV0QiPkNVUkxPUFRfUFJPWFlVU0VSUFdEPC9hPiBpcyB1c2VkLiAgSW4gY29tcGFyaXNvbiB0byA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUFJPWFlVU0VSUFdEIj5DVVJMT1BUX1BST1hZVVNFUlBXRDwvYT4gdGhlIENVUkxPUFRfUFJPWFlVU0VSTkFNRSBhbGxvd3MgdGhlIHVzZXJuYW1lIHRvIGNvbnRhaW4gYSBjb2xvbiwgbGlrZSBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6ICJzaXA6dXNlckBleGFtcGxlLmNvbSIuIFRoZSBDVVJMT1BUX1BST1hZVVNFUk5BTUUgb3B0aW9uIGlzIGFuIGFsdGVybmF0aXZlIHdheSB0byBzZXQgdGhlIHVzZXIgbmFtZSB3aGlsZSBjb25uZWN0aW5nIHRvIFByb3h5LiAgVGhlcmUgaXMgbm8gbWVhbmluZyB0byB1c2UgaXQgdG9nZXRoZXIgd2l0aCB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFBST1hZVVNFUlBXRCI+Q1VSTE9QVF9QUk9YWVVTRVJQV0Q8L2E+IG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JbiBvcmRlciB0byBzcGVjaWZ5IHRoZSBwYXNzd29yZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHVzZXIgbmFtZSB1c2UgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQUk9YWVBBU1NXT1JEIj5DVVJMT1BUX1BST1hZUEFTU1dPUkQ8L2E+IG9wdGlvbi4gIChBZGRlZCBpbiA3LjE5LjEpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFBST1hZUEFTU1dPUkQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9QUk9YWVBBU1NXT1JEPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBjaGFyICogYXMgcGFyYW1ldGVyLCB3aGljaCBzaG91bGQgYmUgcG9pbnRpbmcgdG8gdGhlIHplcm8gdGVybWluYXRlZCBwYXNzd29yZCB0byB1c2UgZm9yIHRoZSB0cmFuc2ZlciB3aGlsZSBjb25uZWN0aW5nIHRvIFByb3h5LiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBDVVJMT1BUX1BST1hZUEFTU1dPUkQgb3B0aW9uIHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQUk9YWVVTRVJOQU1FIj5DVVJMT1BUX1BST1hZVVNFUk5BTUU8L2E+IG9wdGlvbi4gKEFkZGVkIGluIDcuMTkuMSkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUSFRUUEFVVEgiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9IVFRQQVVUSDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZyBhcyBwYXJhbWV0ZXIsIHdoaWNoIGlzIHNldCB0byBhIGJpdG1hc2ssIHRvIHRlbGwgbGliY3VybCB3aGljaCBhdXRoZW50aWNhdGlvbiBtZXRob2QocykgeW91IHdhbnQgaXQgdG8gdXNlLiBUaGUgYXZhaWxhYmxlIGJpdHMgYXJlIGxpc3RlZCBiZWxvdy4gSWYgbW9yZSB0aGFuIG9uZSBiaXQgaXMgc2V0LCBsaWJjdXJsIHdpbGwgZmlyc3QgcXVlcnkgdGhlIHNpdGUgdG8gc2VlIHdoaWNoIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgaXQgc3VwcG9ydHMgYW5kIHRoZW4gcGljayB0aGUgYmVzdCBvbmUgeW91IGFsbG93IGl0IHRvIHVzZS4gRm9yIHNvbWUgbWV0aG9kcywgdGhpcyB3aWxsIGluZHVjZSBhbiBleHRyYSBuZXR3b3JrIHJvdW5kLXRyaXAuIFNldCB0aGUgYWN0dWFsIG5hbWUgYW5kIHBhc3N3b3JkIHdpdGggdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRVU0VSUFdEIj5DVVJMT1BUX1VTRVJQV0Q8L2E+IG9wdGlvbiBvciB3aXRoIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVVNFUk5BTUUiPkNVUkxPUFRfVVNFUk5BTUU8L2E+IGFuZCB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFBBU1NXT1JEIj5DVVJMT1BUX1BBU1NXT1JEPC9hPiBvcHRpb25zLiAoQWRkZWQgaW4gNy4xMC42KSAKKzxwIGNsYXNzPSJsZXZlbDIiPgorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTEFVVEhCQVNJQyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMQVVUSF9CQVNJQzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5IVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGNob2ljZSwgYW5kIHRoZSBvbmx5IG1ldGhvZCB0aGF0IGlzIGluIHdpZGUtc3ByZWFkIHVzZSBhbmQgc3VwcG9ydGVkIHZpcnR1YWxseSBldmVyeXdoZXJlLiBUaGlzIHNlbmRzIHRoZSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIG92ZXIgdGhlIG5ldHdvcmsgaW4gcGxhaW4gdGV4dCwgZWFzaWx5IGNhcHR1cmVkIGJ5IG90aGVycy4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMQVVUSERJR0VTVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMQVVUSF9ESUdFU1Q8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+SFRUUCBEaWdlc3QgYXV0aGVudGljYXRpb24uICBEaWdlc3QgYXV0aGVudGljYXRpb24gaXMgZGVmaW5lZCBpbiA8YSBocmVmPSJodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyNjE3LnR4dCI+UkZDIDI2MTc8L2E+IGFuZCBpcyBhIG1vcmUgc2VjdXJlIHdheSB0byBkbyBhdXRoZW50aWNhdGlvbiBvdmVyIHB1YmxpYyBuZXR3b3JrcyB0aGFuIHRoZSByZWd1bGFyIG9sZC1mYXNoaW9uZWQgQmFzaWMgbWV0aG9kLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxBVVRIRElHRVNUSUUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEFVVEhfRElHRVNUX0lFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPkhUVFAgRGlnZXN0IGF1dGhlbnRpY2F0aW9uIHdpdGggYW4gSUUgZmxhdm9yLiAgRGlnZXN0IGF1dGhlbnRpY2F0aW9uIGlzIGRlZmluZWQgaW4gPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjYxNy50eHQiPlJGQyAyNjE3PC9hPiBhbmQgaXMgYSBtb3JlIHNlY3VyZSB3YXkgdG8gZG8gYXV0aGVudGljYXRpb24gb3ZlciBwdWJsaWMgbmV0d29ya3MgdGhhbiB0aGUgcmVndWxhciBvbGQtZmFzaGlvbmVkIEJhc2ljIG1ldGhvZC4gVGhlIElFIGZsYXZvciBpcyBzaW1wbHkgdGhhdCBsaWJjdXJsIHdpbGwgdXNlIGEgc3BlY2lhbCAicXVpcmsiIHRoYXQgSUUgaXMga25vd24gdG8gaGF2ZSB1c2VkIGJlZm9yZSB2ZXJzaW9uIDcgYW5kIHRoYXQgc29tZSBzZXJ2ZXJzIHJlcXVpcmUgdGhlIGNsaWVudCB0byB1c2UuIChUaGlzIGRlZmluZSB3YXMgYWRkZWQgaW4gNy4xOS4zKSAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxBVVRIR1NTTkVHT1RJQVRFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxBVVRIX0dTU05FR09USUFURTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5IVFRQIEdTUy1OZWdvdGlhdGUgYXV0aGVudGljYXRpb24uIFRoZSBHU1MtTmVnb3RpYXRlIChhbHNvIGtub3duIGFzIHBsYWluICJOZWdvdGlhdGUiKSBtZXRob2Qgd2FzIGRlc2lnbmVkIGJ5IE1pY3Jvc29mdCBhbmQgaXMgdXNlZCBpbiB0aGVpciB3ZWIgYXBwbGljYXRpb25zLiBJdCBpcyBwcmltYXJpbHkgbWVhbnQgYXMgYSBzdXBwb3J0IGZvciBLZXJiZXJvczUgYXV0aGVudGljYXRpb24gYnV0IG1heSBhbHNvIGJlIHVzZWQgYWxvbmcgd2l0aCBvdGhlciBhdXRoZW50aWNhdGlvbiBtZXRob2RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgSUVURiBkcmFmdCBkcmFmdC1icmV6YWstc3BuZWdvLWh0dHAtMDQudHh0LiAKKzxwIGNsYXNzPSJsZXZlbDIiPllvdSBuZWVkIHRvIGJ1aWxkIGxpYmN1cmwgd2l0aCBhIHN1aXRhYmxlIEdTUy1BUEkgbGlicmFyeSBmb3IgdGhpcyB0byB3b3JrLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxBVVRITlRMTSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMQVVUSF9OVExNPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPkhUVFAgTlRMTSBhdXRoZW50aWNhdGlvbi4gQSBwcm9wcmlldGFyeSBwcm90b2NvbCBpbnZlbnRlZCBhbmQgdXNlZCBieSBNaWNyb3NvZnQuIEl0IHVzZXMgYSBjaGFsbGVuZ2UtcmVzcG9uc2UgYW5kIGhhc2ggY29uY2VwdCBzaW1pbGFyIHRvIERpZ2VzdCwgdG8gcHJldmVudCB0aGUgcGFzc3dvcmQgZnJvbSBiZWluZyBlYXZlc2Ryb3BwZWQuIAorPHAgY2xhc3M9ImxldmVsMiI+WW91IG5lZWQgdG8gYnVpbGQgbGliY3VybCB3aXRoIGVpdGhlciBPcGVuU1NMIG9yIE5TUyBzdXBwb3J0IGZvciB0aGlzIG9wdGlvbiB0byB3b3JrLCBvciBidWlsZCBsaWJjdXJsIG9uIFdpbmRvd3MuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTEFVVEhOVExNV0IiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEFVVEhfTlRMTV9XQjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5OVExNIGRlbGVnYXRpbmcgdG8gd2luYmluZCBoZWxwZXIuIEF1dGhlbnRpY2F0aW9uIGlzIHBlcmZvcm1lZCBieSBhIHNlcGFyYXRlIGJpbmFyeSBhcHBsaWNhdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIHdoZW4gbmVlZGVkLiBUaGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gaXMgc3BlY2lmaWVkIGF0IGNvbXBpbGUgdGltZSBidXQgaXMgdHlwaWNhbGx5IC91c3IvYmluL250bG1fYXV0aCAoQWRkZWQgaW4gNy4yMi4wKSAKKzxwIGNsYXNzPSJsZXZlbDIiPk5vdGUgdGhhdCBsaWJjdXJsIHdpbGwgZm9yayB3aGVuIG5lY2Vzc2FyeSB0byBydW4gdGhlIHdpbmJpbmQgYXBwbGljYXRpb24gYW5kIGtpbGwgaXQgd2hlbiBjb21wbGV0ZSwgY2FsbGluZyB3YWl0cGlkKCkgdG8gYXdhaXQgaXRzIGV4aXQgd2hlbiBkb25lLiBPbiBQT1NJWCBvcGVyYXRpbmcgc3lzdGVtcywga2lsbGluZyB0aGUgcHJvY2VzcyB3aWxsIGNhdXNlIGEgU0lHQ0hMRCBzaWduYWwgdG8gYmUgcmFpc2VkIChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVE5PU0lHTkFMIj5DVVJMT1BUX05PU0lHTkFMPC9hPiBpcyBzZXQpLCB3aGljaCBtdXN0IGJlIGhhbmRsZWQgaW50ZWxsaWdlbnRseSBieSB0aGUgYXBwbGljYXRpb24uIEluIHBhcnRpY3VsYXIsIHRoZSBhcHBsaWNhdGlvbiBtdXN0IG5vdCB1bmNvbmRpdGlvbmFsbHkgY2FsbCB3YWl0KCkgaW4gaXRzIFNJR0NITEQgc2lnbmFsIGhhbmRsZXIgdG8gYXZvaWQgYmVpbmcgc3ViamVjdCB0byBhIHJhY2UgY29uZGl0aW9uLiAgVGhpcyBiZWhhdmlvciBpcyBzdWJqZWN0IHRvIGNoYW5nZSBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgbGliY3VybC4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMQVVUSEFOWSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMQVVUSF9BTlk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VGhpcyBpcyBhIGNvbnZlbmllbmNlIG1hY3JvIHRoYXQgc2V0cyBhbGwgYml0cyBhbmQgdGh1cyBtYWtlcyBsaWJjdXJsIHBpY2sgYW55IGl0IGZpbmRzIHN1aXRhYmxlLiBsaWJjdXJsIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIG9uZSBpdCBmaW5kcyBtb3N0IHNlY3VyZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMQVVUSEFOWVNBRkUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEFVVEhfQU5ZU0FGRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGlzIGlzIGEgY29udmVuaWVuY2UgbWFjcm8gdGhhdCBzZXRzIGFsbCBiaXRzIGV4Y2VwdCBCYXNpYyBhbmQgdGh1cyBtYWtlcyBsaWJjdXJsIHBpY2sgYW55IGl0IGZpbmRzIHN1aXRhYmxlLiBsaWJjdXJsIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIG9uZSBpdCBmaW5kcyBtb3N0IHNlY3VyZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMQVVUSE9OTFkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEFVVEhfT05MWTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGlzIGlzIGEgbWV0YSBzeW1ib2wuIE9yIHRoaXMgdmFsdWUgdG9nZXRoZXIgd2l0aCBhIHNpbmdsZSBzcGVjaWZpYyBhdXRoIHZhbHVlIHRvIGZvcmNlIGxpYmN1cmwgdG8gcHJvYmUgZm9yIHVuLXJlc3RyaWN0ZWQgYXV0aCBhbmQgaWYgbm90LCBvbmx5IHRoYXQgc2luZ2xlIGF1dGggYWxnb3JpdGhtIGlzIGFjY2VwdGFibGUuIChBZGRlZCBpbiA3LjIxLjMpIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUVExTQVVUSFRZUEUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9UTFNBVVRIX1RZUEU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcgYXMgcGFyYW1ldGVyLCB3aGljaCBpcyBzZXQgdG8gYSBiaXRtYXNrLCB0byB0ZWxsIGxpYmN1cmwgd2hpY2ggYXV0aGVudGljYXRpb24gbWV0aG9kKHMpIHlvdSB3YW50IGl0IHRvIHVzZSBmb3IgVExTIGF1dGhlbnRpY2F0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDIiPgorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTE9QVFRMU0FVVEhTUlAiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9UTFNBVVRIX1NSUDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UTFMtU1JQIGF1dGhlbnRpY2F0aW9uLiBTZWN1cmUgUmVtb3RlIFBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIGZvciBUTFMgaXMgZGVmaW5lZCBpbiA8YSBocmVmPSJodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM1MDU0LnR4dCI+UkZDIDUwNTQ8L2E+IGFuZCBwcm92aWRlcyBtdXR1YWwgYXV0aGVudGljYXRpb24gaWYgYm90aCBzaWRlcyBoYXZlIGEgc2hhcmVkIHNlY3JldC4gVG8gdXNlIFRMUy1TUlAsIHlvdSBtdXN0IGFsc28gc2V0IHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVExTQVVUSFVTRVJOQU1FIj5DVVJMT1BUX1RMU0FVVEhfVVNFUk5BTUU8L2E+IGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVExTQVVUSFBBU1NXT1JEIj5DVVJMT1BUX1RMU0FVVEhfUEFTU1dPUkQ8L2E+IG9wdGlvbnMuIAorPHAgY2xhc3M9ImxldmVsMiI+WW91IG5lZWQgdG8gYnVpbGQgbGliY3VybCB3aXRoIEdudVRMUyBvciBPcGVuU1NMIHdpdGggVExTLVNSUCBzdXBwb3J0IGZvciB0aGlzIHRvIHdvcmsuIChBZGRlZCBpbiA3LjIxLjQpIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUVExTQVVUSFVTRVJOQU1FIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfVExTQVVUSF9VU0VSTkFNRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgd2hpY2ggc2hvdWxkIHBvaW50IHRvIHRoZSB6ZXJvIHRlcm1pbmF0ZWQgdXNlcm5hbWUgdG8gdXNlIGZvciB0aGUgVExTIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBzcGVjaWZpZWQgd2l0aCB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFRMU0FVVEhUWVBFIj5DVVJMT1BUX1RMU0FVVEhfVFlQRTwvYT4gb3B0aW9uLiBSZXF1aXJlcyB0aGF0IHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxPUFRfVExTX1BBU1NXT1JEPC9zcGFuPiBvcHRpb24gYWxzbyBiZSBzZXQuIChBZGRlZCBpbiA3LjIxLjQpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFRMU0FVVEhQQVNTV09SRCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1RMU0FVVEhfUEFTU1dPUkQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGNoYXIgKiBhcyBwYXJhbWV0ZXIsIHdoaWNoIHNob3VsZCBwb2ludCB0byB0aGUgemVybyB0ZXJtaW5hdGVkIHBhc3N3b3JkIHRvIHVzZSBmb3IgdGhlIFRMUyBhdXRoZW50aWNhdGlvbiBtZXRob2Qgc3BlY2lmaWVkIHdpdGggdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRUTFNBVVRIVFlQRSI+Q1VSTE9QVF9UTFNBVVRIX1RZUEU8L2E+IG9wdGlvbi4gUmVxdWlyZXMgdGhhdCB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMT1BUX1RMU19VU0VSTkFNRTwvc3Bhbj4gb3B0aW9uIGFsc28gYmUgc2V0LiAoQWRkZWQgaW4gNy4yMS40KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRQUk9YWUFVVEgiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9QUk9YWUFVVEg8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcgYXMgcGFyYW1ldGVyLCB3aGljaCBpcyBzZXQgdG8gYSBiaXRtYXNrLCB0byB0ZWxsIGxpYmN1cmwgd2hpY2ggYXV0aGVudGljYXRpb24gbWV0aG9kKHMpIHlvdSB3YW50IGl0IHRvIHVzZSBmb3IgeW91ciBwcm94eSBhdXRoZW50aWNhdGlvbi4gIElmIG1vcmUgdGhhbiBvbmUgYml0IGlzIHNldCwgbGliY3VybCB3aWxsIGZpcnN0IHF1ZXJ5IHRoZSBzaXRlIHRvIHNlZSB3aGF0IGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgaXQgc3VwcG9ydHMgYW5kIHRoZW4gcGljayB0aGUgYmVzdCBvbmUgeW91IGFsbG93IGl0IHRvIHVzZS4gRm9yIHNvbWUgbWV0aG9kcywgdGhpcyB3aWxsIGluZHVjZSBhbiBleHRyYSBuZXR3b3JrIHJvdW5kLXRyaXAuIFNldCB0aGUgYWN0dWFsIG5hbWUgYW5kIHBhc3N3b3JkIHdpdGggdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQUk9YWVVTRVJQV0QiPkNVUkxPUFRfUFJPWFlVU0VSUFdEPC9hPiBvcHRpb24uIFRoZSBiaXRtYXNrIGNhbiBiZSBjb25zdHJ1Y3RlZCBieSBvcidpbmcgdG9nZXRoZXIgdGhlIGJpdHMgbGlzdGVkIGFib3ZlIGZvciB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEhUVFBBVVRIIj5DVVJMT1BUX0hUVFBBVVRIPC9hPiBvcHRpb24uIEFzIG9mIHRoaXMgd3JpdGluZywgb25seSBCYXNpYywgRGlnZXN0IGFuZCBOVExNIHdvcmsuIChBZGRlZCBpbiA3LjEwLjcpIDxhIG5hbWU9IkhUVFAiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkhUVFAgT1BUSU9OUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRBVVRPUkVGRVJFUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0FVVE9SRUZFUkVSPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwYXJhbWV0ZXIgc2V0IHRvIDEgdG8gZW5hYmxlIHRoaXMuIFdoZW4gZW5hYmxlZCwgbGliY3VybCB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBSZWZlcmVyOiBmaWVsZCBpbiByZXF1ZXN0cyB3aGVyZSBpdCBmb2xsb3dzIGEgTG9jYXRpb246IHJlZGlyZWN0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRBQ0NFUFRFTkNPRElORyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0FDQ0VQVF9FTkNPRElORzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TZXRzIHRoZSBjb250ZW50cyBvZiB0aGUgQWNjZXB0LUVuY29kaW5nOiBoZWFkZXIgc2VudCBpbiBhIEhUVFAgcmVxdWVzdCwgYW5kIGVuYWJsZXMgZGVjb2Rpbmcgb2YgYSByZXNwb25zZSB3aGVuIGEgQ29udGVudC1FbmNvZGluZzogaGVhZGVyIGlzIHJlY2VpdmVkLiBUaHJlZSBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZDogPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5pZGVudGl0eTwvc3Bhbj4sIHdoaWNoIGRvZXMgbm90aGluZywgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5kZWZsYXRlPC9zcGFuPiB3aGljaCByZXF1ZXN0cyB0aGUgc2VydmVyIHRvIGNvbXByZXNzIGl0cyByZXNwb25zZSB1c2luZyB0aGUgemxpYiBhbGdvcml0aG0sIGFuZCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmd6aXA8L3NwYW4+IHdoaWNoIHJlcXVlc3RzIHRoZSBnemlwIGFsZ29yaXRobS4gIElmIGEgemVyby1sZW5ndGggc3RyaW5nIGlzIHNldCwgdGhlbiBhbiBBY2NlcHQtRW5jb2Rpbmc6IGhlYWRlciBjb250YWluaW5nIGFsbCBzdXBwb3J0ZWQgZW5jb2RpbmdzIGlzIHNlbnQuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBpcyBhIHJlcXVlc3QsIG5vdCBhbiBvcmRlcjsgdGhlIHNlcnZlciBtYXkgb3IgbWF5IG5vdCBkbyBpdC4gIFRoaXMgb3B0aW9uIG11c3QgYmUgc2V0ICh0byBhbnkgbm9uLU5VTEwgdmFsdWUpIG9yIGVsc2UgYW55IHVuc29saWNpdGVkIGVuY29kaW5nIGRvbmUgYnkgdGhlIHNlcnZlciBpcyBpZ25vcmVkLiBTZWUgdGhlIHNwZWNpYWwgZmlsZSBsaWIvUkVBRE1FLmVuY29kaW5nIGZvciBkZXRhaWxzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPihUaGlzIG9wdGlvbiB3YXMgY2FsbGVkIENVUkxPUFRfRU5DT0RJTkcgYmVmb3JlIDcuMjEuNikgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUVFJBTlNGRVJFTkNPRElORyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1RSQU5TRkVSX0VOQ09ESU5HPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFkZHMgYSByZXF1ZXN0IGZvciBjb21wcmVzc2VkIFRyYW5zZmVyIEVuY29kaW5nIGluIHRoZSBvdXRnb2luZyBIVFRQIHJlcXVlc3QuIElmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgdGhpcyBhbmQgc28gZGVzaXJlcywgaXQgY2FuIHJlc3BvbmQgd2l0aCB0aGUgSFRUUCByZXNvbnNlIHNlbnQgdXNpbmcgYSBjb21wcmVzc2VkIFRyYW5zZmVyLUVuY29kaW5nIHRoYXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHVuY29tcHJlc3NlZCBieSBsaWJjdXJsIG9uIHJlY2VpdmFsLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRyYW5zZmVyLUVuY29kaW5nIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSB0aGUgQ29udGVudC1FbmNvZGluZyB5b3UgYXNrIGZvciB3aXRoIDxhIGNsYXNzPSJib2xkIiBocmVmPSIjQ1VSTE9QVEFDQ0VQVEVOQ09ESU5HIj5DVVJMT1BUX0FDQ0VQVF9FTkNPRElORzwvYT4gaW4gdGhhdCBhIFRyYW5zZmVyLUVuY29kaW5nIGlzIHN0cmljdGx5IG1lYW50IHRvIGJlIGZvciB0aGUgdHJhbnNmZXIgYW5kIHRodXMgTVVTVCBiZSBkZWNvZGVkIGJlZm9yZSB0aGUgZGF0YSBhcnJpdmVzIGluIHRoZSBjbGllbnQuIFRyYWRpdGlvbmFsbHksIFRyYW5zZmVyLUVuY29kaW5nIGhhcyBiZWVuIG11Y2ggbGVzcyB1c2VkIGFuZCBzdXBwb3J0ZWQgYnkgYm90aCBIVFRQIGNsaWVudHMgYW5kIEhUVFAgc2VydmVycy4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oQWRkZWQgaW4gNy4yMS42KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRGT0xMT1dMT0NBVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0ZPTExPV0xPQ0FUSU9OPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkEgcGFyYW1ldGVyIHNldCB0byAxIHRlbGxzIHRoZSBsaWJyYXJ5IHRvIGZvbGxvdyBhbnkgTG9jYXRpb246IGhlYWRlciB0aGF0IHRoZSBzZXJ2ZXIgc2VuZHMgYXMgcGFydCBvZiBhIEhUVFAgaGVhZGVyLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgbWVhbnMgdGhhdCB0aGUgbGlicmFyeSB3aWxsIHJlLXNlbmQgdGhlIHNhbWUgcmVxdWVzdCBvbiB0aGUgbmV3IGxvY2F0aW9uIGFuZCBmb2xsb3cgbmV3IExvY2F0aW9uOiBoZWFkZXJzIGFsbCB0aGUgd2F5IHVudGlsIG5vIG1vcmUgc3VjaCBoZWFkZXJzIGFyZSByZXR1cm5lZC4gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVE1BWFJFRElSUyI+Q1VSTE9QVF9NQVhSRURJUlM8L2E+IGNhbiBiZSB1c2VkIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVkaXJlY3RzIGxpYmN1cmwgd2lsbCBmb2xsb3cuIAorPHAgY2xhc3M9ImxldmVsMSI+U2luY2UgNy4xOS40LCBsaWJjdXJsIGNhbiBsaW1pdCB3aGF0IHByb3RvY29scyBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93LiBUaGUgYWNjZXB0ZWQgcHJvdG9jb2xzIGFyZSBzZXQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUkVESVJQUk9UT0NPTFMiPkNVUkxPUFRfUkVESVJfUFJPVE9DT0xTPC9hPiBhbmQgaXQgZXhjbHVkZXMgdGhlIEZJTEUgcHJvdG9jb2wgYnkgZGVmYXVsdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUVU5SRVNUUklDVEVEQVVUSCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1VOUkVTVFJJQ1RFRF9BVVRIPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkEgcGFyYW1ldGVyIHNldCB0byAxIHRlbGxzIHRoZSBsaWJyYXJ5IGl0IGNhbiBjb250aW51ZSB0byBzZW5kIGF1dGhlbnRpY2F0aW9uICh1c2VyK3Bhc3N3b3JkKSB3aGVuIGZvbGxvd2luZyBsb2NhdGlvbnMsIGV2ZW4gd2hlbiBob3N0bmFtZSBjaGFuZ2VkLiBUaGlzIG9wdGlvbiBpcyBtZWFuaW5nZnVsIG9ubHkgd2hlbiBzZXR0aW5nIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRGT0xMT1dMT0NBVElPTiI+Q1VSTE9QVF9GT0xMT1dMT0NBVElPTjwvYT4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVE1BWFJFRElSUyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX01BWFJFRElSUzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZy4gVGhlIHNldCBudW1iZXIgd2lsbCBiZSB0aGUgcmVkaXJlY3Rpb24gbGltaXQuIElmIHRoYXQgbWFueSByZWRpcmVjdGlvbnMgaGF2ZSBiZWVuIGZvbGxvd2VkLCB0aGUgbmV4dCByZWRpcmVjdCB3aWxsIGNhdXNlIGFuIGVycm9yICg8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxFX1RPT19NQU5ZX1JFRElSRUNUUzwvc3Bhbj4pLiBUaGlzIG9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BURk9MTE9XTE9DQVRJT04iPkNVUkxPUFRfRk9MTE9XTE9DQVRJT048L2E+IGlzIHVzZWQgYXQgdGhlIHNhbWUgdGltZS4gQWRkZWQgaW4gNy4xNS4xOiBTZXR0aW5nIHRoZSBsaW1pdCB0byAwIHdpbGwgbWFrZSBsaWJjdXJsIHJlZnVzZSBhbnkgcmVkaXJlY3QuIFNldCBpdCB0byAtMSBmb3IgYW4gaW5maW5pdGUgbnVtYmVyIG9mIHJlZGlyZWN0cyAod2hpY2ggaXMgdGhlIGRlZmF1bHQpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFBPU1RSRURJUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1BPU1RSRURJUjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgYml0bWFzayB0byBjb250cm9sIGhvdyBsaWJjdXJsIGFjdHMgb24gcmVkaXJlY3RzIGFmdGVyIFBPU1RzIHRoYXQgZ2V0IGEgMzAxIG9yIDMwMiByZXNwb25zZSBiYWNrLiAgQSBwYXJhbWV0ZXIgd2l0aCBiaXQgMCBzZXQgKHZhbHVlIDxzcGFuIENsYXNzPSJib2xkIj5DVVJMX1JFRElSX1BPU1RfMzAxPC9zcGFuPikgdGVsbHMgdGhlIGxpYnJhcnkgdG8gcmVzcGVjdCA8YSBocmVmPSJodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyNjE2LnR4dCI+UkZDIDI2MTY8L2E+LzEwLjMuMiBhbmQgbm90IGNvbnZlcnQgUE9TVCByZXF1ZXN0cyBpbnRvIEdFVCByZXF1ZXN0cyB3aGVuIGZvbGxvd2luZyBhIDMwMSByZWRpcmVjdGlvbi4gU2V0dGluZyBiaXQgMSAodmFsdWUgQ1VSTF9SRURJUl9QT1NUXzMwMikgbWFrZXMgbGliY3VybCBtYWludGFpbiB0aGUgcmVxdWVzdCBtZXRob2QgYWZ0ZXIgYSAzMDIgcmVkaXJlY3QuIENVUkxfUkVESVJfUE9TVF9BTEwgaXMgYSBjb252ZW5pZW5jZSBkZWZpbmUgdGhhdCBzZXRzIGJvdGggYml0cy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgbm9uLVJGQyBiZWhhdmlvdXIgaXMgdWJpcXVpdG91cyBpbiB3ZWIgYnJvd3NlcnMsIHNvIHRoZSBsaWJyYXJ5IGRvZXMgdGhlIGNvbnZlcnNpb24gYnkgZGVmYXVsdCB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4gSG93ZXZlciwgYSBzZXJ2ZXIgbWF5IHJlcXVpcmUgYSBQT1NUIHRvIHJlbWFpbiBhIFBPU1QgYWZ0ZXIgc3VjaCBhIHJlZGlyZWN0aW9uLiBUaGlzIG9wdGlvbiBpcyBtZWFuaW5nZnVsIG9ubHkgd2hlbiBzZXR0aW5nIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRGT0xMT1dMT0NBVElPTiI+Q1VSTE9QVF9GT0xMT1dMT0NBVElPTjwvYT4uICAoQWRkZWQgaW4gNy4xNy4xKSAoVGhpcyBvcHRpb24gd2FzIGtub3duIGFzIENVUkxPUFRfUE9TVDMwMSB1cCB0byA3LjE5LjAgYXMgaXQgb25seSBzdXBwb3J0ZWQgdGhlIDMwMSB3YXkgYmVmb3JlIHRoZW4pIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFBVVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1BVVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BIHBhcmFtZXRlciBzZXQgdG8gMSB0ZWxscyB0aGUgbGlicmFyeSB0byB1c2UgSFRUUCBQVVQgdG8gdHJhbnNmZXIgZGF0YS4gVGhlIGRhdGEgc2hvdWxkIGJlIHNldCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRSRUFEREFUQSI+Q1VSTE9QVF9SRUFEREFUQTwvYT4gYW5kIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRJTkZJTEVTSVpFIj5DVVJMT1BUX0lORklMRVNJWkU8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHN0YXJ0aW5nIHdpdGggdmVyc2lvbiA3LjEyLjEgeW91IHNob3VsZCBpbnN0ZWFkIHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVVBMT0FEIj5DVVJMT1BUX1VQTE9BRDwvYT4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFBPU1QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9QT1NUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkEgcGFyYW1ldGVyIHNldCB0byAxIHRlbGxzIHRoZSBsaWJyYXJ5IHRvIGRvIGEgcmVndWxhciBIVFRQIHBvc3QuIFRoaXMgd2lsbCBhbHNvIG1ha2UgdGhlIGxpYnJhcnkgdXNlIGEgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiBoZWFkZXIuIChUaGlzIGlzIGJ5IGZhciB0aGUgbW9zdCBjb21tb25seSB1c2VkIFBPU1QgbWV0aG9kKS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Vc2Ugb25lIG9mIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQT1NURklFTERTIj5DVVJMT1BUX1BPU1RGSUVMRFM8L2E+IG9yIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRDT1BZUE9TVEZJRUxEUyI+Q1VSTE9QVF9DT1BZUE9TVEZJRUxEUzwvYT4gb3B0aW9ucyB0byBzcGVjaWZ5IHdoYXQgZGF0YSB0byBwb3N0IGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUE9TVEZJRUxEU0laRSI+Q1VSTE9QVF9QT1NURklFTERTSVpFPC9hPiBvciA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUE9TVEZJRUxEU0laRUxBUkdFIj5DVVJMT1BUX1BPU1RGSUVMRFNJWkVfTEFSR0U8L2E+IHRvIHNldCB0aGUgZGF0YSBzaXplLiAKKzxwIGNsYXNzPSJsZXZlbDEiPk9wdGlvbmFsbHksIHlvdSBjYW4gcHJvdmlkZSBkYXRhIHRvIFBPU1QgdXNpbmcgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRSRUFERlVOQ1RJT04iPkNVUkxPUFRfUkVBREZVTkNUSU9OPC9hPiBhbmQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFJFQUREQVRBIj5DVVJMT1BUX1JFQUREQVRBPC9hPiBvcHRpb25zIGJ1dCB0aGVuIHlvdSBtdXN0IG1ha2Ugc3VyZSB0byBub3Qgc2V0IDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQT1NURklFTERTIj5DVVJMT1BUX1BPU1RGSUVMRFM8L2E+IHRvIGFueXRoaW5nIGJ1dCBOVUxMLiBXaGVuIHByb3ZpZGluZyBkYXRhIHdpdGggYSBjYWxsYmFjaywgeW91IG11c3QgdHJhbnNtaXQgaXQgdXNpbmcgY2h1bmtlZCB0cmFuc2Zlci1lbmNvZGluZyBvciB5b3UgbXVzdCBzZXQgdGhlIHNpemUgb2YgdGhlIGRhdGEgd2l0aCB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFBPU1RGSUVMRFNJWkUiPkNVUkxPUFRfUE9TVEZJRUxEU0laRTwvYT4gb3IgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFBPU1RGSUVMRFNJWkVMQVJHRSI+Q1VSTE9QVF9QT1NURklFTERTSVpFX0xBUkdFPC9hPiBvcHRpb24uIFRvIGVuYWJsZSBjaHVua2VkIGVuY29kaW5nLCB5b3Ugc2ltcGx5IHBhc3MgaW4gdGhlIGFwcHJvcHJpYXRlIFRyYW5zZmVyLUVuY29kaW5nIGhlYWRlciwgc2VlIHRoZSBwb3N0LWNhbGxiYWNrLmMgZXhhbXBsZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Zb3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IFBPU1QgQ29udGVudC1UeXBlOiBoZWFkZXIgYnkgc2V0dGluZyB5b3VyIG93biB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRIVFRQSEVBREVSIj5DVVJMT1BUX0hUVFBIRUFERVI8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDEiPlVzaW5nIFBPU1Qgd2l0aCBIVFRQIDEuMSBpbXBsaWVzIHRoZSB1c2Ugb2YgYSAiRXhwZWN0OiAxMDAtY29udGludWUiIGhlYWRlci4gWW91IGNhbiBkaXNhYmxlIHRoaXMgaGVhZGVyIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEhUVFBIRUFERVIiPkNVUkxPUFRfSFRUUEhFQURFUjwvYT4gYXMgdXN1YWwuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgeW91IHVzZSBQT1NUIHRvIGEgSFRUUCAxLjEgc2VydmVyLCB5b3UgY2FuIHNlbmQgZGF0YSB3aXRob3V0IGtub3dpbmcgdGhlIHNpemUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBQT1NUIGlmIHlvdSB1c2UgY2h1bmtlZCBlbmNvZGluZy4gWW91IGVuYWJsZSB0aGlzIGJ5IGFkZGluZyBhIGhlYWRlciBsaWtlICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUSFRUUEhFQURFUiI+Q1VSTE9QVF9IVFRQSEVBREVSPC9hPi4gV2l0aCBIVFRQIDEuMCBvciB3aXRob3V0IGNodW5rZWQgdHJhbnNmZXIsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIHNpemUgaW4gdGhlIHJlcXVlc3QuIAorPHAgY2xhc3M9ImxldmVsMSI+V2hlbiBzZXR0aW5nIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQT1NUIj5DVVJMT1BUX1BPU1Q8L2E+IHRvIDEsIGl0IHdpbGwgYXV0b21hdGljYWxseSBzZXQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVE5PQk9EWSI+Q1VSTE9QVF9OT0JPRFk8L2E+IHRvIDAgKHNpbmNlIDcuMTQuMSkuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgeW91IGlzc3VlIGEgUE9TVCByZXF1ZXN0IGFuZCB0aGVuIHdhbnQgdG8gbWFrZSBhIEhFQUQgb3IgR0VUIHVzaW5nIHRoZSBzYW1lIHJlLXVzZWQgaGFuZGxlLCB5b3UgbXVzdCBleHBsaWNpdGx5IHNldCB0aGUgbmV3IHJlcXVlc3QgdHlwZSB1c2luZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUTk9CT0RZIj5DVVJMT1BUX05PQk9EWTwvYT4gb3IgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEhUVFBHRVQiPkNVUkxPUFRfSFRUUEdFVDwvYT4gb3Igc2ltaWxhci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUE9TVEZJRUxEUyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1BPU1RGSUVMRFM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHZvaWQgKiBhcyBwYXJhbWV0ZXIsIHdoaWNoIHNob3VsZCBiZSB0aGUgZnVsbCBkYXRhIHRvIHBvc3QgaW4gYSBIVFRQIFBPU1Qgb3BlcmF0aW9uLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgZGF0YSBpcyBmb3JtYXR0ZWQgdGhlIHdheSB5b3Ugd2FudCB0aGUgc2VydmVyIHRvIHJlY2VpdmUgaXQuIGxpYmN1cmwgd2lsbCBub3QgY29udmVydCBvciBlbmNvZGUgaXQgZm9yIHlvdS4gTW9zdCB3ZWIgc2VydmVycyB3aWxsIGFzc3VtZSB0aGlzIGRhdGEgdG8gYmUgdXJsLWVuY29kZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIHBvaW50ZWQgZGF0YSBhcmUgTk9UIGNvcGllZCBieSB0aGUgbGlicmFyeTogYXMgYSBjb25zZXF1ZW5jZSwgdGhleSBtdXN0IGJlIHByZXNlcnZlZCBieSB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiB1bnRpbCB0aGUgdHJhbnNmZXIgZmluaXNoZXMuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBQT1NUIGlzIGEgbm9ybWFsIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBraW5kIChhbmQgbGliY3VybCB3aWxsIHNldCB0aGF0IENvbnRlbnQtVHlwZSBieSBkZWZhdWx0IHdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCksIHdoaWNoIGlzIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgb25lIGJ5IEhUTUwgZm9ybXMuIFNlZSBhbHNvIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUE9TVCI+Q1VSTE9QVF9QT1NUPC9hPi4gVXNpbmcgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFBPU1RGSUVMRFMiPkNVUkxPUFRfUE9TVEZJRUxEUzwvYT4gaW1wbGllcyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUE9TVCI+Q1VSTE9QVF9QT1NUPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3Ugd2FudCB0byBkbyBhIHplcm8tYnl0ZSBQT1NULCB5b3UgbmVlZCB0byBzZXQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFBPU1RGSUVMRFNJWkUiPkNVUkxPUFRfUE9TVEZJRUxEU0laRTwvYT4gZXhwbGljaXRseSB0byB6ZXJvLCBhcyBzaW1wbHkgc2V0dGluZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUE9TVEZJRUxEUyI+Q1VSTE9QVF9QT1NURklFTERTPC9hPiB0byBOVUxMIG9yICIiIGp1c3QgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIHNlbmRpbmcgb2YgdGhlIHNwZWNpZmllZCBzdHJpbmcuIGxpYmN1cmwgd2lsbCBpbnN0ZWFkIGFzc3VtZSB0aGF0IHlvdSdsbCBzZW5kIHRoZSBQT1NUIGRhdGEgdXNpbmcgdGhlIHJlYWQgY2FsbGJhY2shIAorPHAgY2xhc3M9ImxldmVsMSI+VXNpbmcgUE9TVCB3aXRoIEhUVFAgMS4xIGltcGxpZXMgdGhlIHVzZSBvZiBhICJFeHBlY3Q6IDEwMC1jb250aW51ZSIgaGVhZGVyLiBZb3UgY2FuIGRpc2FibGUgdGhpcyBoZWFkZXIgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUSFRUUEhFQURFUiI+Q1VSTE9QVF9IVFRQSEVBREVSPC9hPiBhcyB1c3VhbC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UbyBtYWtlIG11bHRpcGFydC9mb3JtZGF0YSBwb3N0cyAoYWthIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzIzODgudHh0Ij5SRkMgMjM4ODwvYT4tcG9zdHMpLCBjaGVjayBvdXQgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRIVFRQUE9TVCI+Q1VSTE9QVF9IVFRQUE9TVDwvYT4gb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRQT1NURklFTERTSVpFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfUE9TVEZJRUxEU0laRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3Ugd2FudCB0byBwb3N0IGRhdGEgdG8gdGhlIHNlcnZlciB3aXRob3V0IGxldHRpbmcgbGliY3VybCBkbyBhIHN0cmxlbigpIHRvIG1lYXN1cmUgdGhlIGRhdGEgc2l6ZSwgdGhpcyBvcHRpb24gbXVzdCBiZSB1c2VkLiBXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQgeW91IGNhbiBwb3N0IGZ1bGx5IGJpbmFyeSBkYXRhLCB3aGljaCBvdGhlcndpc2UgaXMgbGlrZWx5IHRvIGZhaWwuIElmIHRoaXMgc2l6ZSBpcyBzZXQgdG8gLTEsIHRoZSBsaWJyYXJ5IHdpbGwgdXNlIHN0cmxlbigpIHRvIGdldCB0aGUgc2l6ZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUE9TVEZJRUxEU0laRUxBUkdFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfUE9TVEZJRUxEU0laRV9MQVJHRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY3VybF9vZmZfdCBhcyBwYXJhbWV0ZXIuIFVzZSB0aGlzIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFBPU1RGSUVMRFMiPkNVUkxPUFRfUE9TVEZJRUxEUzwvYT4gZGF0YSB0byBwcmV2ZW50IGxpYmN1cmwgZnJvbSBkb2luZyBzdHJsZW4oKSBvbiB0aGUgZGF0YSB0byBmaWd1cmUgb3V0IHRoZSBzaXplLiBUaGlzIGlzIHRoZSBsYXJnZSBmaWxlIHZlcnNpb24gb2YgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQT1NURklFTERTSVpFIj5DVVJMT1BUX1BPU1RGSUVMRFNJWkU8L2E+IG9wdGlvbi4gKEFkZGVkIGluIDcuMTEuMSkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUQ09QWVBPU1RGSUVMRFMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DT1BZUE9TVEZJRUxEUzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgd2hpY2ggc2hvdWxkIGJlIHRoZSBmdWxsIGRhdGEgdG8gcG9zdCBpbiBhIEhUVFAgUE9TVCBvcGVyYXRpb24uIEl0IGJlaGF2ZXMgYXMgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQT1NURklFTERTIj5DVVJMT1BUX1BPU1RGSUVMRFM8L2E+IG9wdGlvbiwgYnV0IHRoZSBvcmlnaW5hbCBkYXRhIGFyZSBjb3BpZWQgYnkgdGhlIGxpYnJhcnksIGFsbG93aW5nIHRoZSBhcHBsaWNhdGlvbiB0byBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsIGRhdGEgYWZ0ZXIgc2V0dGluZyB0aGlzIG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5CZWNhdXNlIGRhdGEgYXJlIGNvcGllZCwgY2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gdXNpbmcgdGhpcyBvcHRpb24gaW4gY29uanVuY3Rpb24gd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUE9TVEZJRUxEU0laRSI+Q1VSTE9QVF9QT1NURklFTERTSVpFPC9hPiBvciA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUE9TVEZJRUxEU0laRUxBUkdFIj5DVVJMT1BUX1BPU1RGSUVMRFNJWkVfTEFSR0U8L2E+OiBJZiB0aGUgc2l6ZSBoYXMgbm90IGJlZW4gc2V0IHByaW9yIHRvIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRDT1BZUE9TVEZJRUxEUyI+Q1VSTE9QVF9DT1BZUE9TVEZJRUxEUzwvYT4sIHRoZSBkYXRhIGFyZSBhc3N1bWVkIHRvIGJlIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nOyBlbHNlIHRoZSBzdG9yZWQgc2l6ZSBpbmZvcm1zIHRoZSBsaWJyYXJ5IGFib3V0IHRoZSBkYXRhIGJ5dGUgY291bnQgdG8gY29weS4gSW4gYW55IGNhc2UsIHRoZSBzaXplIG11c3Qgbm90IGJlIGNoYW5nZWQgYWZ0ZXIgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVENPUFlQT1NURklFTERTIj5DVVJMT1BUX0NPUFlQT1NURklFTERTPC9hPiwgdW5sZXNzIGFub3RoZXIgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFBPU1RGSUVMRFMiPkNVUkxPUFRfUE9TVEZJRUxEUzwvYT4gb3IgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVENPUFlQT1NURklFTERTIj5DVVJMT1BUX0NPUFlQT1NURklFTERTPC9hPiBvcHRpb24gaXMgaXNzdWVkLiAoQWRkZWQgaW4gNy4xNy4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRIVFRQUE9TVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0hUVFBQT1NUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRlbGxzIGxpYmN1cmwgeW91IHdhbnQgYSBtdWx0aXBhcnQvZm9ybWRhdGEgSFRUUCBQT1NUIHRvIGJlIG1hZGUgYW5kIHlvdSBpbnN0cnVjdCB3aGF0IGRhdGEgdG8gcGFzcyBvbiB0byB0aGUgc2VydmVyLiAgUGFzcyBhIHBvaW50ZXIgdG8gYSBsaW5rZWQgbGlzdCBvZiBjdXJsX2h0dHBwb3N0IHN0cnVjdHMgYXMgcGFyYW1ldGVyLiAgVGhlIGVhc2llc3Qgd2F5IHRvIGNyZWF0ZSBzdWNoIGEgbGlzdCwgaXMgdG8gdXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Zvcm1hZGQuaHRtbCI+Y3VybF9mb3JtYWRkKDMpPC9hPiBhcyBkb2N1bWVudGVkLiBUaGUgZGF0YSBpbiB0aGlzIGxpc3QgbXVzdCByZW1haW4gaW50YWN0IHVudGlsIHlvdSBjbG9zZSB0aGlzIGN1cmwgaGFuZGxlIGFnYWluIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9jbGVhbnVwLmh0bWwiPmN1cmxfZWFzeV9jbGVhbnVwKDMpPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Vc2luZyBQT1NUIHdpdGggSFRUUCAxLjEgaW1wbGllcyB0aGUgdXNlIG9mIGEgIkV4cGVjdDogMTAwLWNvbnRpbnVlIiBoZWFkZXIuIFlvdSBjYW4gZGlzYWJsZSB0aGlzIGhlYWRlciB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRIVFRQSEVBREVSIj5DVVJMT1BUX0hUVFBIRUFERVI8L2E+IGFzIHVzdWFsLiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gc2V0dGluZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUSFRUUFBPU1QiPkNVUkxPUFRfSFRUUFBPU1Q8L2E+LCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFROT0JPRFkiPkNVUkxPUFRfTk9CT0RZPC9hPiB0byAwIChzaW5jZSA3LjE0LjEpLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRSRUZFUkVSIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfUkVGRVJFUjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgYXMgcGFyYW1ldGVyLiBJdCB3aWxsIGJlIHVzZWQgdG8gc2V0IHRoZSBSZWZlcmVyOiBoZWFkZXIgaW4gdGhlIGh0dHAgcmVxdWVzdCBzZW50IHRvIHRoZSByZW1vdGUgc2VydmVyLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGZvb2wgc2VydmVycyBvciBzY3JpcHRzLiBZb3UgY2FuIGFsc28gc2V0IGFueSBjdXN0b20gaGVhZGVyIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEhUVFBIRUFERVIiPkNVUkxPUFRfSFRUUEhFQURFUjwvYT4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFVTRVJBR0VOVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1VTRVJBR0VOVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgYXMgcGFyYW1ldGVyLiBJdCB3aWxsIGJlIHVzZWQgdG8gc2V0IHRoZSBVc2VyLUFnZW50OiBoZWFkZXIgaW4gdGhlIGh0dHAgcmVxdWVzdCBzZW50IHRvIHRoZSByZW1vdGUgc2VydmVyLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGZvb2wgc2VydmVycyBvciBzY3JpcHRzLiBZb3UgY2FuIGFsc28gc2V0IGFueSBjdXN0b20gaGVhZGVyIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEhUVFBIRUFERVIiPkNVUkxPUFRfSFRUUEhFQURFUjwvYT4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEhUVFBIRUFERVIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9IVFRQSEVBREVSPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgbGlua2VkIGxpc3Qgb2YgSFRUUCBoZWFkZXJzIHRvIHBhc3MgdG8gdGhlIHNlcnZlciBpbiB5b3VyIEhUVFAgcmVxdWVzdC4gVGhlIGxpbmtlZCBsaXN0IHNob3VsZCBiZSBhIGZ1bGx5IHZhbGlkIGxpc3Qgb2YgPHNwYW4gY2xhc3M9ImJvbGQiPnN0cnVjdCBjdXJsX3NsaXN0PC9zcGFuPiBzdHJ1Y3RzIHByb3Blcmx5IGZpbGxlZCBpbi4gVXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX3NsaXN0X2FwcGVuZC5odG1sIj5jdXJsX3NsaXN0X2FwcGVuZCgzKTwvYT4gdG8gY3JlYXRlIHRoZSBsaXN0IGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9zbGlzdF9mcmVlX2FsbC5odG1sIj5jdXJsX3NsaXN0X2ZyZWVfYWxsKDMpPC9hPiB0byBjbGVhbiB1cCBhbiBlbnRpcmUgbGlzdC4gSWYgeW91IGFkZCBhIGhlYWRlciB0aGF0IGlzIG90aGVyd2lzZSBnZW5lcmF0ZWQgYW5kIHVzZWQgYnkgbGliY3VybCBpbnRlcm5hbGx5LCB5b3VyIGFkZGVkIG9uZSB3aWxsIGJlIHVzZWQgaW5zdGVhZC4gSWYgeW91IGFkZCBhIGhlYWRlciB3aXRoIG5vIGNvbnRlbnQgYXMgaW4gJ0FjY2VwdDonIChubyBkYXRhIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb2xvbiksIHRoZSBpbnRlcm5hbGx5IHVzZWQgaGVhZGVyIHdpbGwgZ2V0IGRpc2FibGVkLiBUaHVzLCB1c2luZyB0aGlzIG9wdGlvbiB5b3UgY2FuIGFkZCBuZXcgaGVhZGVycywgcmVwbGFjZSBpbnRlcm5hbCBoZWFkZXJzIGFuZCByZW1vdmUgaW50ZXJuYWwgaGVhZGVycy4gVG8gYWRkIGEgaGVhZGVyIHdpdGggbm8gY29udGVudCwgbWFrZSB0aGUgY29udGVudCBiZSB0d28gcXVvdGVzOiAiIi4gVGhlIGhlYWRlcnMgaW5jbHVkZWQgaW4gdGhlIGxpbmtlZCBsaXN0IG11c3Qgbm90IGJlIENSTEYtdGVybWluYXRlZCwgYmVjYXVzZSBjdXJsIGFkZHMgQ1JMRiBhZnRlciBlYWNoIGhlYWRlciBpdGVtLiBGYWlsdXJlIHRvIGNvbXBseSB3aXRoIHRoaXMgd2lsbCByZXN1bHQgaW4gc3RyYW5nZSBidWdzIGJlY2F1c2UgdGhlIHNlcnZlciB3aWxsIG1vc3QgbGlrZWx5IGlnbm9yZSBwYXJ0IG9mIHRoZSBoZWFkZXJzIHlvdSBzcGVjaWZpZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIGZpcnN0IGxpbmUgaW4gYSByZXF1ZXN0IChjb250YWluaW5nIHRoZSBtZXRob2QsIHVzdWFsbHkgYSBHRVQgb3IgUE9TVCkgaXMgbm90IGEgaGVhZGVyIGFuZCBjYW5ub3QgYmUgcmVwbGFjZWQgdXNpbmcgdGhpcyBvcHRpb24uIE9ubHkgdGhlIGxpbmVzIGZvbGxvd2luZyB0aGUgcmVxdWVzdC1saW5lIGFyZSBoZWFkZXJzLiBBZGRpbmcgdGhpcyBtZXRob2QgbGluZSBpbiB0aGlzIGxpc3Qgb2YgaGVhZGVycyB3aWxsIG9ubHkgY2F1c2UgeW91ciByZXF1ZXN0IHRvIHNlbmQgYW4gaW52YWxpZCBoZWFkZXIuIAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIE5VTEwgdG8gdGhpcyB0byByZXNldCBiYWNrIHRvIG5vIGN1c3RvbSBoZWFkZXJzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBtb3N0IGNvbW1vbmx5IHJlcGxhY2VkIGhlYWRlcnMgaGF2ZSAic2hvcnRjdXRzIiBpbiB0aGUgb3B0aW9ucyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUQ09PS0lFIj5DVVJMT1BUX0NPT0tJRTwvYT4sIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRVU0VSQUdFTlQiPkNVUkxPUFRfVVNFUkFHRU5UPC9hPiBhbmQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFJFRkVSRVIiPkNVUkxPUFRfUkVGRVJFUjwvYT4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEhUVFAyMDBBTElBU0VTIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfSFRUUDIwMEFMSUFTRVM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBsaW5rZWQgbGlzdCBvZiBhbGlhc2VzIHRvIGJlIHRyZWF0ZWQgYXMgdmFsaWQgSFRUUCAyMDAgcmVzcG9uc2VzLiAgU29tZSBzZXJ2ZXJzIHJlc3BvbmQgd2l0aCBhIGN1c3RvbSBoZWFkZXIgcmVzcG9uc2UgbGluZS4gIEZvciBleGFtcGxlLCBJY2VDYXN0IHNlcnZlcnMgcmVzcG9uZCB3aXRoICJJQ1kgMjAwIE9LIi4gIEJ5IGluY2x1ZGluZyB0aGlzIHN0cmluZyBpbiB5b3VyIGxpc3Qgb2YgYWxpYXNlcywgdGhlIHJlc3BvbnNlIHdpbGwgYmUgdHJlYXRlZCBhcyBhIHZhbGlkIEhUVFAgaGVhZGVyIGxpbmUgc3VjaCBhcyAiSFRUUC8xLjAgMjAwIE9LIi4gKEFkZGVkIGluIDcuMTAuMykgCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgbGlua2VkIGxpc3Qgc2hvdWxkIGJlIGEgZnVsbHkgdmFsaWQgbGlzdCBvZiBzdHJ1Y3QgY3VybF9zbGlzdCBzdHJ1Y3RzLCBhbmQgYmUgcHJvcGVybHkgZmlsbGVkIGluLiAgVXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX3NsaXN0X2FwcGVuZC5odG1sIj5jdXJsX3NsaXN0X2FwcGVuZCgzKTwvYT4gdG8gY3JlYXRlIHRoZSBsaXN0IGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9zbGlzdF9mcmVlX2FsbC5odG1sIj5jdXJsX3NsaXN0X2ZyZWVfYWxsKDMpPC9hPiB0byBjbGVhbiB1cCBhbiBlbnRpcmUgbGlzdC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgYWxpYXMgaXRzZWxmIGlzIG5vdCBwYXJzZWQgZm9yIGFueSB2ZXJzaW9uIHN0cmluZ3MuIEJlZm9yZSBsaWJjdXJsIDcuMTYuMywgTGliY3VybCB1c2VkIHRoZSB2YWx1ZSBzZXQgYnkgb3B0aW9uIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRIVFRQVkVSU0lPTiI+Q1VSTE9QVF9IVFRQX1ZFUlNJT048L2E+LCBidXQgc3RhcnRpbmcgd2l0aCA3LjE2LjMgdGhlIHByb3RvY29sIGlzIGFzc3VtZWQgdG8gbWF0Y2ggSFRUUCAxLjAgd2hlbiBhbiBhbGlhcyBtYXRjaGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRDT09LSUUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DT09LSUU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGFzIHBhcmFtZXRlci4gSXQgd2lsbCBiZSB1c2VkIHRvIHNldCBhIGNvb2tpZSBpbiB0aGUgaHR0cCByZXF1ZXN0LiBUaGUgZm9ybWF0IG9mIHRoZSBzdHJpbmcgc2hvdWxkIGJlIE5BTUU9Q09OVEVOVFMsIHdoZXJlIE5BTUUgaXMgdGhlIGNvb2tpZSBuYW1lIGFuZCBDT05URU5UUyBpcyB3aGF0IHRoZSBjb29raWUgc2hvdWxkIGNvbnRhaW4uIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgeW91IG5lZWQgdG8gc2V0IG11bHRpcGxlIGNvb2tpZXMsIHlvdSBuZWVkIHRvIHNldCB0aGVtIGFsbCB1c2luZyBhIHNpbmdsZSBvcHRpb24gYW5kIHRodXMgeW91IG5lZWQgdG8gY29uY2F0ZW5hdGUgdGhlbSBhbGwgaW4gb25lIHNpbmdsZSBzdHJpbmcuIFNldCBtdWx0aXBsZSBjb29raWVzIGluIG9uZSBzdHJpbmcgbGlrZSB0aGlzOiAibmFtZTE9Y29udGVudDE7IG5hbWUyPWNvbnRlbnQyOyIgZXRjLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIHNldHMgdGhlIGNvb2tpZSBoZWFkZXIgZXhwbGljaXRseSBpbiB0aGUgb3V0Z29pbmcgcmVxdWVzdChzKS4gSWYgbXVsdGlwbGUgcmVxdWVzdHMgYXJlIGRvbmUgZHVlIHRvIGF1dGhlbnRpY2F0aW9uLCBmb2xsb3dlZCByZWRpcmVjdGlvbnMgb3Igc2ltaWxhciwgdGhleSB3aWxsIGFsbCBnZXQgdGhpcyBjb29raWUgcGFzc2VkIG9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlVzaW5nIHRoaXMgb3B0aW9uIG11bHRpcGxlIHRpbWVzIHdpbGwgb25seSBtYWtlIHRoZSBsYXRlc3Qgc3RyaW5nIG92ZXJyaWRlIHRoZSBwcmV2aW91cyBvbmVzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRDT09LSUVGSUxFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfQ09PS0lFRklMRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgYXMgcGFyYW1ldGVyLiBJdCBzaG91bGQgY29udGFpbiB0aGUgbmFtZSBvZiB5b3VyIGZpbGUgaG9sZGluZyBjb29raWUgZGF0YSB0byByZWFkLiBUaGUgY29va2llIGRhdGEgbWF5IGJlIGluIE5ldHNjYXBlIC8gTW96aWxsYSBjb29raWUgZGF0YSBmb3JtYXQgb3IganVzdCByZWd1bGFyIEhUVFAtc3R5bGUgaGVhZGVycyBkdW1wZWQgdG8gYSBmaWxlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkdpdmVuIGFuIGVtcHR5IG9yIG5vbi1leGlzdGluZyBmaWxlIG9yIGJ5IHBhc3NpbmcgdGhlIGVtcHR5IHN0cmluZyAoIiIpLCB0aGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBjb29raWVzIGZvciB0aGlzIGN1cmwgaGFuZGxlLCBtYWtpbmcgaXQgdW5kZXJzdGFuZCBhbmQgcGFyc2UgcmVjZWl2ZWQgY29va2llcyBhbmQgdGhlbiB1c2UgbWF0Y2hpbmcgY29va2llcyBpbiBmdXR1cmUgcmVxdWVzdHMuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgeW91IHVzZSB0aGlzIG9wdGlvbiBtdWx0aXBsZSB0aW1lcywgeW91IGp1c3QgYWRkIG1vcmUgZmlsZXMgdG8gcmVhZC4gU3Vic2VxdWVudCBmaWxlcyB3aWxsIGFkZCBtb3JlIGNvb2tpZXMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVENPT0tJRUpBUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0NPT0tJRUpBUjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgZmlsZSBuYW1lIGFzIGNoYXIgKiwgemVybyB0ZXJtaW5hdGVkLiBUaGlzIHdpbGwgbWFrZSBsaWJjdXJsIHdyaXRlIGFsbCBpbnRlcm5hbGx5IGtub3duIGNvb2tpZXMgdG8gdGhlIHNwZWNpZmllZCBmaWxlIHdoZW4gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9jbGVhbnVwLmh0bWwiPmN1cmxfZWFzeV9jbGVhbnVwKDMpPC9hPiBpcyBjYWxsZWQuIElmIG5vIGNvb2tpZXMgYXJlIGtub3duLCBubyBmaWxlIHdpbGwgYmUgY3JlYXRlZC4gU3BlY2lmeSAiLSIgdG8gaW5zdGVhZCBoYXZlIHRoZSBjb29raWVzIHdyaXR0ZW4gdG8gc3Rkb3V0LiBVc2luZyB0aGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgY29va2llcyBmb3IgdGhpcyBzZXNzaW9uLCBzbyBpZiB5b3UgZm9yIGV4YW1wbGUgZm9sbG93IGEgbG9jYXRpb24gaXQgd2lsbCBtYWtlIG1hdGNoaW5nIGNvb2tpZXMgZ2V0IHNlbnQgYWNjb3JkaW5nbHkuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhlIGNvb2tpZSBqYXIgZmlsZSBjYW4ndCBiZSBjcmVhdGVkIG9yIHdyaXR0ZW4gdG8gKHdoZW4gdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfY2xlYW51cC5odG1sIj5jdXJsX2Vhc3lfY2xlYW51cCgzKTwvYT4gaXMgY2FsbGVkKSwgbGliY3VybCB3aWxsIG5vdCBhbmQgY2Fubm90IHJlcG9ydCBhbiBlcnJvciBmb3IgdGhpcy4gVXNpbmcgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFZFUkJPU0UiPkNVUkxPUFRfVkVSQk9TRTwvYT4gb3IgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVERFQlVHRlVOQ1RJT04iPkNVUkxPUFRfREVCVUdGVU5DVElPTjwvYT4gd2lsbCBnZXQgYSB3YXJuaW5nIHRvIGRpc3BsYXksIGJ1dCB0aGF0IGlzIHRoZSBvbmx5IHZpc2libGUgZmVlZGJhY2sgeW91IGdldCBhYm91dCB0aGlzIHBvc3NpYmx5IGxldGhhbCBzaXR1YXRpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVENPT0tJRVNFU1NJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DT09LSUVTRVNTSU9OPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIHNldCB0byAxIHRvIG1hcmsgdGhpcyBhcyBhIG5ldyBjb29raWUgInNlc3Npb24iLiBJdCB3aWxsIGZvcmNlIGxpYmN1cmwgdG8gaWdub3JlIGFsbCBjb29raWVzIGl0IGlzIGFib3V0IHRvIGxvYWQgdGhhdCBhcmUgInNlc3Npb24gY29va2llcyIgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi4gQnkgZGVmYXVsdCwgbGliY3VybCBhbHdheXMgc3RvcmVzIGFuZCBsb2FkcyBhbGwgY29va2llcywgaW5kZXBlbmRlbnQgaWYgdGhleSBhcmUgc2Vzc2lvbiBjb29raWVzIG9yIG5vdC4gU2Vzc2lvbiBjb29raWVzIGFyZSBjb29raWVzIHdpdGhvdXQgZXhwaXJ5IGRhdGUgYW5kIHRoZXkgYXJlIG1lYW50IHRvIGJlIGFsaXZlIGFuZCBleGlzdGluZyBmb3IgdGhpcyAic2Vzc2lvbiIgb25seS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUQ09PS0lFTElTVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0NPT0tJRUxJU1Q8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGNoYXIgKiB0byBhIGNvb2tpZSBzdHJpbmcuIENvb2tpZSBjYW4gYmUgZWl0aGVyIGluIE5ldHNjYXBlIC8gTW96aWxsYSBmb3JtYXQgb3IganVzdCByZWd1bGFyIEhUVFAtc3R5bGUgaGVhZGVyIChTZXQtQ29va2llOiAuLi4pIGZvcm1hdC4gSWYgY1VSTCBjb29raWUgZW5naW5lIHdhcyBub3QgZW5hYmxlZCBpdCB3aWxsIGVuYWJsZSBpdHMgY29va2llIGVuZ2luZS4gIFBhc3NpbmcgYSBtYWdpYyBzdHJpbmcgIkFMTCIgd2lsbCBlcmFzZSBhbGwgY29va2llcyBrbm93biBieSBjVVJMLiAoQWRkZWQgaW4gNy4xNC4xKSBQYXNzaW5nIHRoZSBzcGVjaWFsIHN0cmluZyAiU0VTUyIgd2lsbCBvbmx5IGVyYXNlIGFsbCBzZXNzaW9uIGNvb2tpZXMga25vd24gYnkgY1VSTC4gKEFkZGVkIGluIDcuMTUuNCkgUGFzc2luZyB0aGUgc3BlY2lhbCBzdHJpbmcgIkZMVVNIIiB3aWxsIHdyaXRlIGFsbCBjb29raWVzIGtub3duIGJ5IGNVUkwgdG8gdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRDT09LSUVKQVIiPkNVUkxPUFRfQ09PS0lFSkFSPC9hPi4gKEFkZGVkIGluIDcuMTcuMSkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUSFRUUEdFVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0hUVFBHRVQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcuIElmIHRoZSBsb25nIGlzIDEsIHRoaXMgZm9yY2VzIHRoZSBIVFRQIHJlcXVlc3QgdG8gZ2V0IGJhY2sgdG8gR0VULiBVc2FibGUgaWYgYSBQT1NULCBIRUFELCBQVVQsIG9yIGEgY3VzdG9tIHJlcXVlc3QgaGFzIGJlZW4gdXNlZCBwcmV2aW91c2x5IHVzaW5nIHRoZSBzYW1lIGN1cmwgaGFuZGxlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gc2V0dGluZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUSFRUUEdFVCI+Q1VSTE9QVF9IVFRQR0VUPC9hPiB0byAxLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFROT0JPRFkiPkNVUkxPUFRfTk9CT0RZPC9hPiB0byAwIChzaW5jZSA3LjE0LjEpLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRIVFRQVkVSU0lPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0hUVFBfVkVSU0lPTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZywgc2V0IHRvIG9uZSBvZiB0aGUgdmFsdWVzIGRlc2NyaWJlZCBiZWxvdy4gVGhleSBmb3JjZSBsaWJjdXJsIHRvIHVzZSB0aGUgc3BlY2lmaWMgSFRUUCB2ZXJzaW9ucy4gVGhpcyBpcyBub3Qgc2Vuc2libGUgdG8gZG8gdW5sZXNzIHlvdSBoYXZlIGEgZ29vZCByZWFzb24uIAorPHAgY2xhc3M9ImxldmVsMiI+Cis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMSFRUUFZFUlNJT05OT05FIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfSFRUUF9WRVJTSU9OX05PTkU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+V2UgZG9uJ3QgY2FyZSBhYm91dCB3aGF0IHZlcnNpb24gdGhlIGxpYnJhcnkgdXNlcy4gbGliY3VybCB3aWxsIHVzZSB3aGF0ZXZlciBpdCB0aGlua3MgZml0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxIVFRQVkVSU0lPTjEwIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfSFRUUF9WRVJTSU9OXzFfMDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5FbmZvcmNlIEhUVFAgMS4wIHJlcXVlc3RzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxIVFRQVkVSU0lPTjExIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfSFRUUF9WRVJTSU9OXzFfMTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5FbmZvcmNlIEhUVFAgMS4xIHJlcXVlc3RzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVElHTk9SRUNPTlRFTlRMRU5HVEgiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9JR05PUkVfQ09OVEVOVF9MRU5HVEg8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+SWdub3JlIHRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIuIFRoaXMgaXMgdXNlZnVsIGZvciBBcGFjaGUgMS54IChhbmQgc2ltaWxhciBzZXJ2ZXJzKSB3aGljaCB3aWxsIHJlcG9ydCBpbmNvcnJlY3QgY29udGVudCBsZW5ndGggZm9yIGZpbGVzIG92ZXIgMiBnaWdhYnl0ZXMuIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQsIGN1cmwgd2lsbCBub3QgYmUgYWJsZSB0byBhY2N1cmF0ZWx5IHJlcG9ydCBwcm9ncmVzcywgYW5kIHdpbGwgc2ltcGx5IHN0b3AgdGhlIGRvd25sb2FkIHdoZW4gdGhlIHNlcnZlciBlbmRzIHRoZSBjb25uZWN0aW9uLiAoYWRkZWQgaW4gNy4xNC4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRIVFRQQ09OVEVOVERFQ09ESU5HIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfSFRUUF9DT05URU5UX0RFQ09ESU5HPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIHRvIHRlbGwgbGliY3VybCBob3cgdG8gYWN0IG9uIGNvbnRlbnQgZGVjb2RpbmcuIElmIHNldCB0byB6ZXJvLCBjb250ZW50IGRlY29kaW5nIHdpbGwgYmUgZGlzYWJsZWQuIElmIHNldCB0byAxIGl0IGlzIGVuYWJsZWQuIExpYmN1cmwgaGFzIG5vIGRlZmF1bHQgY29udGVudCBkZWNvZGluZyBidXQgcmVxdWlyZXMgeW91IHRvIHVzZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxPUFRfRU5DT0RJTkc8L3NwYW4+IGZvciB0aGF0LiAoYWRkZWQgaW4gNy4xNi4yKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRIVFRQVFJBTlNGRVJERUNPRElORyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0hUVFBfVFJBTlNGRVJfREVDT0RJTkc8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcgdG8gdGVsbCBsaWJjdXJsIGhvdyB0byBhY3Qgb24gdHJhbnNmZXIgZGVjb2RpbmcuIElmIHNldCB0byB6ZXJvLCB0cmFuc2ZlciBkZWNvZGluZyB3aWxsIGJlIGRpc2FibGVkLCBpZiBzZXQgdG8gMSBpdCBpcyBlbmFibGVkIChkZWZhdWx0KS4gbGliY3VybCBkb2VzIGNodW5rZWQgdHJhbnNmZXIgZGVjb2RpbmcgYnkgZGVmYXVsdCB1bmxlc3MgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHplcm8uIChhZGRlZCBpbiA3LjE2LjIpIDxhIG5hbWU9IlNNVFAiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNNVFAgT1BUSU9OUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRNQUlMRlJPTSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX01BSUxfRlJPTTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgYXMgcGFyYW1ldGVyLiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHNlbmRlcidzIGVtYWlsIGFkZHJlc3Mgd2hlbiBzZW5kaW5nIFNNVFAgbWFpbCB3aXRoIGxpYmN1cmwuIAorPHAgY2xhc3M9ImxldmVsMSI+QW4gb3JpZ2luYXRvciBlbWFpbCBhZGRyZXNzIHNob3VsZCBiZSBzcGVjaWZpZWQgd2l0aCBhbmdsZWQgYnJhY2tldHMgKCZsdDsmZ3Q7KSBhcm91bmQgaXQsIHdoaWNoIGlmIG5vdCBzcGVjaWZpZWQsIHdpbGwgYmUgYWRkZWQgYnkgbGliY3VybCBmcm9tIHZlcnNpb24gNy4yMS40IG9ud2FyZHMuIEZhaWxpbmcgdG8gcHJvdmlkZSBzdWNoIGJyYWNrZXRzIG1heSBjYXVzZSB0aGUgc2VydmVyIHRvIHJlamVjdCB0aGUgZW1haWwuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCB0aGVuIGFuIGVtcHR5IGFkZHJlc3Mgd2lsbCBiZSBzZW50IHRvIHRoZSBtYWlsIHNlcnZlciB3aGljaCBtYXkgb3IgbWF5IG5vdCBjYXVzZSB0aGUgZW1haWwgdG8gYmUgcmVqZWN0ZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+KEFkZGVkIGluIDcuMjAuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUTUFJTFJDUFQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9NQUlMX1JDUFQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBsaW5rZWQgbGlzdCBvZiByZWNpcGllbnRzIHRvIHBhc3MgdG8gdGhlIHNlcnZlciBpbiB5b3VyIFNNVFAgbWFpbCByZXF1ZXN0LiBUaGUgbGlua2VkIGxpc3Qgc2hvdWxkIGJlIGEgZnVsbHkgdmFsaWQgbGlzdCBvZiA8c3BhbiBjbGFzcz0iYm9sZCI+c3RydWN0IGN1cmxfc2xpc3Q8L3NwYW4+IHN0cnVjdHMgcHJvcGVybHkgZmlsbGVkIGluLiBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfc2xpc3RfYXBwZW5kLmh0bWwiPmN1cmxfc2xpc3RfYXBwZW5kKDMpPC9hPiB0byBjcmVhdGUgdGhlIGxpc3QgYW5kIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX3NsaXN0X2ZyZWVfYWxsLmh0bWwiPmN1cmxfc2xpc3RfZnJlZV9hbGwoMyk8L2E+IHRvIGNsZWFuIHVwIGFuIGVudGlyZSBsaXN0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPkVhY2ggcmVjaXBpZW50IHNob3VsZCBiZSBzcGVjaWZpZWQgd2l0aGluIGEgcGFpciBvZiBhbmdsZWQgYnJhY2tldHMgKCZsdDsmZ3Q7KSwgaG93ZXZlciwgc2hvdWxkIHlvdSBub3QgdXNlIGFuIGFuZ2xlZCBicmFja2V0IGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgbGliY3VybCB3aWxsIGFzc3VtZSB5b3UgcHJvdmlkZWQgYSBzaW5nbGUgZW1haWwgYWRkcmVzcyBhbmQgZW5jbG9zZSB0aGF0IGFkZHJlc3Mgd2l0aGluIGJyYWNrZXRzIGZvciB5b3UuIAorPHAgY2xhc3M9ImxldmVsMSI+KEFkZGVkIGluIDcuMjAuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUTUFJTEFVVEgiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9NQUlMX0FVVEg8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGFzIHBhcmFtZXRlci4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgYXV0aGVudGljYXRpb24gYWRkcmVzcyAoaWRlbnRpdHkpIG9mIGEgc3VibWl0dGVkIG1lc3NhZ2UgdGhhdCBpcyBiZWluZyByZWxheWVkIHRvIGFub3RoZXIgc2VydmVyLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIGFsbG93cyBjby1vcGVyYXRpbmcgYWdlbnRzIGluIGEgdHJ1c3RlZCBlbnZpcm9ubWVudCB0byBjb21tdW5pY2F0ZSB0aGUgYXV0aGVudGljYXRpb24gb2YgaW5kaXZpZHVhbCBtZXNzYWdlcyBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbSwgdXNpbmcgbGliY3VybCwgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGl0c2VsZiBhIG1haWwgc2VydmVyIGFjdGluZyBpbiBzdWNoIGFuIGVudmlyb25tZW50LiBJZiB0aGUgYXBwbGljYXRpb24gaXMgb3BlcmF0aW5nIGFzIHN1Y2ggYW5kIHRoZSBBVVRIIGFkZHJlc3MgaXMgbm90IGtub3duIG9yIGlzIGludmFsaWQsIHRoZW4gYW4gZW1wdHkgc3RyaW5nIHNob3VsZCBiZSB1c2VkIGZvciB0aGlzIHBhcmFtZXRlci4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Vbmxpa2UgQ1VSTE9QVF9NQUlMX0ZST00gYW5kIENVUkxPUFRfTUFJTF9SQ1BULCB0aGUgYWRkcmVzcyBzaG91bGQgbm90IGJlIHNwZWNpZmllZCB3aXRoaW4gYSBwYWlyIG9mIGFuZ2xlZCBicmFja2V0cyAoJmx0OyZndDspLiBIb3dldmVyLCBpZiBhbiBlbXB0eSBzdHJpbmcgaXMgdXNlZCB0aGVuIGEgcGFpciBvZiBicmFja2V0cyB3aWxsIGJlIHNlbnQgYnkgbGliY3VybCBhcyByZXF1aXJlZCBieSBSRkMtMjU1NC4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oQWRkZWQgaW4gNy4yNC4wKSA8YSBuYW1lPSJURlRQIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5URlRQIE9QVElPTlM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUVEZUUEJMS1NJWkUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9URlRQX0JMS1NJWkU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U3BlY2lmeSBibG9jayBzaXplIHRvIHVzZSBmb3IgVEZUUCBkYXRhIHRyYW5zbWlzc2lvbi4gVmFsaWQgcmFuZ2UgYXMgcGVyIFJGQyAyMzQ4IGlzIDgtNjU0NjQgYnl0ZXMuIFRoZSBkZWZhdWx0IG9mIDUxMiBieXRlcyB3aWxsIGJlIHVzZWQgaWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZC4gVGhlIHNwZWNpZmllZCBibG9jayBzaXplIHdpbGwgb25seSBiZSB1c2VkIHBlbmRpbmcgc3VwcG9ydCBieSB0aGUgcmVtb3RlIHNlcnZlci4gSWYgdGhlIHNlcnZlciBkb2VzIG5vdCByZXR1cm4gYW4gb3B0aW9uIGFja25vd2xlZGdlbWVudCBvciByZXR1cm5zIGFuIG9wdGlvbiBhY2tub3dsZWRnZW1lbnQgd2l0aCBubyBibGtzaXplLCB0aGUgZGVmYXVsdCBvZiA1MTIgYnl0ZXMgd2lsbCBiZSB1c2VkLiAoYWRkZWQgaW4gNy4xOS40KSA8YSBuYW1lPSJGVFAiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkZUUCBPUFRJT05TPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEZUUFBPUlQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9GVFBQT1JUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIEl0IHdpbGwgYmUgdXNlZCB0byBnZXQgdGhlIElQIGFkZHJlc3MgdG8gdXNlIGZvciB0aGUgRlRQIFBPUlQgaW5zdHJ1Y3Rpb24uIFRoZSBQT1JUIGluc3RydWN0aW9uIHRlbGxzIHRoZSByZW1vdGUgc2VydmVyIHRvIGNvbm5lY3QgdG8gb3VyIHNwZWNpZmllZCBJUCBhZGRyZXNzLiBUaGUgc3RyaW5nIG1heSBiZSBhIHBsYWluIElQIGFkZHJlc3MsIGEgaG9zdCBuYW1lLCBhIG5ldHdvcmsgaW50ZXJmYWNlIG5hbWUgKHVuZGVyIFVuaXgpIG9yIGp1c3QgYSAnLScgc3ltYm9sIHRvIGxldCB0aGUgbGlicmFyeSB1c2UgeW91ciBzeXN0ZW0ncyBkZWZhdWx0IElQIGFkZHJlc3MuIERlZmF1bHQgRlRQIG9wZXJhdGlvbnMgYXJlIHBhc3NpdmUsIGFuZCB0aHVzIHdvbid0IHVzZSBQT1JULiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBhZGRyZXNzIGNhbiBiZSBmb2xsb3dlZCBieSBhICc6JyB0byBzcGVjaWZ5IGEgcG9ydCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhICctJyB0byBzcGVjaWZ5IGEgcG9ydCByYW5nZS4gIElmIHRoZSBwb3J0IHNwZWNpZmllZCBpcyAwLCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aWxsIHBpY2sgYSBmcmVlIHBvcnQuICBJZiBhIHJhbmdlIGlzIHByb3ZpZGVkIGFuZCBhbGwgcG9ydHMgaW4gdGhlIHJhbmdlIGFyZSBub3QgYXZhaWxhYmxlLCBsaWJjdXJsIHdpbGwgcmVwb3J0IENVUkxFX0ZUUF9QT1JUX0ZBSUxFRCBmb3IgdGhlIGhhbmRsZS4gIEludmFsaWQgcG9ydC9yYW5nZSBzZXR0aW5ncyBhcmUgaWdub3JlZC4gIElQdjYgYWRkcmVzc2VzIGZvbGxvd2VkIGJ5IGEgcG9ydCBvciBwb3J0cmFuZ2UgaGF2ZSB0byBiZSBpbiBicmFja2V0cy4gIElQdjYgYWRkcmVzc2VzIHdpdGhvdXQgcG9ydC9yYW5nZSBzcGVjaWZpZXIgY2FuIGJlIGluIGJyYWNrZXRzLiAgKGFkZGVkIGluIDcuMTkuNSkgCis8cCBjbGFzcz0ibGV2ZWwxIj5FeGFtcGxlcyB3aXRoIHNwZWNpZmllZCBwb3J0czogCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDEiPiZuYnNwOyBldGgwOjAgJm5ic3A7IDE5Mi4xNjguMS4yOjMyMDAwLTMzMDAwICZuYnNwOyBjdXJsLnNlOjMyMTIzICZuYnNwOyBbOjoxXToxMjM0LTQ1NjcgCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDEiPllvdSBkaXNhYmxlIFBPUlQgYWdhaW4gYW5kIGdvIGJhY2sgdG8gdXNpbmcgdGhlIHBhc3NpdmUgdmVyc2lvbiBieSBzZXR0aW5nIHRoaXMgb3B0aW9uIHRvIE5VTEwuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFFVT1RFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfUVVPVEU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBsaW5rZWQgbGlzdCBvZiBGVFAgb3IgU0ZUUCBjb21tYW5kcyB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIgcHJpb3IgdG8geW91ciBGVFAgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIGRvbmUgYmVmb3JlIGFueSBvdGhlciBjb21tYW5kcyBhcmUgaXNzdWVkIChldmVuIGJlZm9yZSB0aGUgQ1dEIGNvbW1hbmQgZm9yIEZUUCkuIFRoZSBsaW5rZWQgbGlzdCBzaG91bGQgYmUgYSBmdWxseSB2YWxpZCBsaXN0IG9mICdzdHJ1Y3QgY3VybF9zbGlzdCcgc3RydWN0cyBwcm9wZXJseSBmaWxsZWQgaW4gd2l0aCB0ZXh0IHN0cmluZ3MuIFVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9zbGlzdF9hcHBlbmQuaHRtbCI+Y3VybF9zbGlzdF9hcHBlbmQoMyk8L2E+IHRvIGFwcGVuZCBzdHJpbmdzIChjb21tYW5kcykgdG8gdGhlIGxpc3QsIGFuZCBjbGVhciB0aGUgZW50aXJlIGxpc3QgYWZ0ZXJ3YXJkcyB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX3NsaXN0X2ZyZWVfYWxsLmh0bWwiPmN1cmxfc2xpc3RfZnJlZV9hbGwoMyk8L2E+LiBEaXNhYmxlIHRoaXMgb3BlcmF0aW9uIGFnYWluIGJ5IHNldHRpbmcgYSBOVUxMIHRvIHRoaXMgb3B0aW9uLiBXaGVuIHNwZWFraW5nIHRvIGEgRlRQIChvciBTRlRQIHNpbmNlIDcuMjQuMCkgc2VydmVyLCBwcmVmaXggdGhlIGNvbW1hbmQgd2l0aCBhbiBhc3RlcmlzayAoKikgdG8gbWFrZSBsaWJjdXJsIGNvbnRpbnVlIGV2ZW4gaWYgdGhlIGNvbW1hbmQgZmFpbHMgYXMgYnkgZGVmYXVsdCBsaWJjdXJsIHdpbGwgc3RvcCBhdCBmaXJzdCBmYWlsdXJlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBzZXQgb2YgdmFsaWQgRlRQIGNvbW1hbmRzIGRlcGVuZHMgb24gdGhlIHNlcnZlciAoc2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzk1OS50eHQiPlJGQyA5NTk8L2E+IGZvciBhIGxpc3Qgb2YgbWFuZGF0b3J5IGNvbW1hbmRzKS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgdmFsaWQgU0ZUUCBjb21tYW5kcyBhcmU6IGNoZ3JwLCBjaG1vZCwgY2hvd24sIGxuLCBta2RpciwgcHdkLCByZW5hbWUsIHJtLCBybWRpciwgc3ltbGluayAoc2VlIDxzcGFuIENsYXNzPSJtYW5wYWdlIj5jdXJsICgxKSk8L3NwYW4+IChTRlRQIHN1cHBvcnQgYWRkZWQgaW4gNy4xNi4zKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRQT1NUUVVPVEUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9QT1NUUVVPVEU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBsaW5rZWQgbGlzdCBvZiBGVFAgb3IgU0ZUUCBjb21tYW5kcyB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgeW91ciBGVFAgdHJhbnNmZXIgcmVxdWVzdC4gVGhlIGNvbW1hbmRzIHdpbGwgb25seSBiZSBydW4gaWYgbm8gZXJyb3Igb2NjdXJyZWQuIFRoZSBsaW5rZWQgbGlzdCBzaG91bGQgYmUgYSBmdWxseSB2YWxpZCBsaXN0IG9mIHN0cnVjdCBjdXJsX3NsaXN0IHN0cnVjdHMgcHJvcGVybHkgZmlsbGVkIGluIGFzIGRlc2NyaWJlZCBmb3IgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFFVT1RFIj5DVVJMT1BUX1FVT1RFPC9hPi4gRGlzYWJsZSB0aGlzIG9wZXJhdGlvbiBhZ2FpbiBieSBzZXR0aW5nIGEgTlVMTCB0byB0aGlzIG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUFJFUVVPVEUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9QUkVRVU9URTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGxpbmtlZCBsaXN0IG9mIEZUUCBjb21tYW5kcyB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgdGhlIHRyYW5zZmVyIHR5cGUgaXMgc2V0LiBUaGUgbGlua2VkIGxpc3Qgc2hvdWxkIGJlIGEgZnVsbHkgdmFsaWQgbGlzdCBvZiBzdHJ1Y3QgY3VybF9zbGlzdCBzdHJ1Y3RzIHByb3Blcmx5IGZpbGxlZCBpbiBhcyBkZXNjcmliZWQgZm9yIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRRVU9URSI+Q1VSTE9QVF9RVU9URTwvYT4uIERpc2FibGUgdGhpcyBvcGVyYXRpb24gYWdhaW4gYnkgc2V0dGluZyBhIE5VTEwgdG8gdGhpcyBvcHRpb24uIEJlZm9yZSB2ZXJzaW9uIDcuMTYuMCwgaWYgeW91IGFsc28gc2V0IDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFROT0JPRFkiPkNVUkxPUFRfTk9CT0RZPC9hPiB0byAxLCB0aGlzIG9wdGlvbiBkaWRuJ3Qgd29yay4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BURElSTElTVE9OTFkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9ESVJMSVNUT05MWTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BIHBhcmFtZXRlciBzZXQgdG8gMSB0ZWxscyB0aGUgbGlicmFyeSB0byBqdXN0IGxpc3QgdGhlIG5hbWVzIG9mIGZpbGVzIGluIGEgZGlyZWN0b3J5LCBpbnN0ZWFkIG9mIGRvaW5nIGEgZnVsbCBkaXJlY3RvcnkgbGlzdGluZyB0aGF0IHdvdWxkIGluY2x1ZGUgZmlsZSBzaXplcywgZGF0ZXMgZXRjLiBUaGlzIHdvcmtzIGZvciBGVFAgYW5kIFNGVFAgVVJMcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIGNhdXNlcyBhbiBGVFAgTkxTVCBjb21tYW5kIHRvIGJlIHNlbnQgb24gYW4gRlRQIHNlcnZlci4gIEJld2FyZSB0aGF0IHNvbWUgRlRQIHNlcnZlcnMgbGlzdCBvbmx5IGZpbGVzIGluIHRoZWlyIHJlc3BvbnNlIHRvIE5MU1Q7IHRoZXkgbWlnaHQgbm90IGluY2x1ZGUgc3ViZGlyZWN0b3JpZXMgYW5kIHN5bWJvbGljIGxpbmtzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldHRpbmcgdGhpcyBvcHRpb24gdG8gMSBhbHNvIGltcGxpZXMgYSBkaXJlY3RvcnkgbGlzdGluZyBldmVuIGlmIHRoZSBVUkwgZG9lc24ndCBlbmQgd2l0aCBhIHNsYXNoLCB3aGljaCBvdGhlcndpc2UgaXMgbmVjZXNzYXJ5LiAKKzxwIGNsYXNzPSJsZXZlbDEiPkRvIE5PVCB1c2UgdGhpcyBvcHRpb24gaWYgeW91IGFsc28gdXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRXSUxEQ0FSRE1BVENIIj5DVVJMT1BUX1dJTERDQVJETUFUQ0g8L2E+IGFzIGl0IHdpbGwgZWZmZWN0aXZlbHkgYnJlYWsgdGhhdCBmZWF0dXJlIHRoZW4uIAorPHAgY2xhc3M9ImxldmVsMSI+KFRoaXMgb3B0aW9uIHdhcyBrbm93biBhcyBDVVJMT1BUX0ZUUExJU1RPTkxZIHVwIHRvIDcuMTYuNCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUQVBQRU5EIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfQVBQRU5EPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkEgcGFyYW1ldGVyIHNldCB0byAxIHRlbGxzIHRoZSBsaWJyYXJ5IHRvIGFwcGVuZCB0byB0aGUgcmVtb3RlIGZpbGUgaW5zdGVhZCBvZiBvdmVyd3JpdGUgaXQuIFRoaXMgaXMgb25seSB1c2VmdWwgd2hlbiB1cGxvYWRpbmcgdG8gYW4gRlRQIHNpdGUuIAorPHAgY2xhc3M9ImxldmVsMSI+KFRoaXMgb3B0aW9uIHdhcyBrbm93biBhcyBDVVJMT1BUX0ZUUEFQUEVORCB1cCB0byA3LjE2LjQpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEZUUFVTRUVQUlQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9GVFBfVVNFX0VQUlQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcuIElmIHRoZSB2YWx1ZSBpcyAxLCBpdCB0ZWxscyBjdXJsIHRvIHVzZSB0aGUgRVBSVCAoYW5kIExQUlQpIGNvbW1hbmQgd2hlbiBkb2luZyBhY3RpdmUgRlRQIGRvd25sb2FkcyAod2hpY2ggaXMgZW5hYmxlZCBieSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BURlRQUE9SVCI+Q1VSTE9QVF9GVFBQT1JUPC9hPikuIFVzaW5nIEVQUlQgbWVhbnMgdGhhdCBpdCB3aWxsIGZpcnN0IGF0dGVtcHQgdG8gdXNlIEVQUlQgYW5kIHRoZW4gTFBSVCBiZWZvcmUgdXNpbmcgUE9SVCwgYnV0IGlmIHlvdSBwYXNzIHplcm8gdG8gdGhpcyBvcHRpb24sIGl0IHdpbGwgbm90IHRyeSB1c2luZyBFUFJUIG9yIExQUlQsIG9ubHkgcGxhaW4gUE9SVC4gKEFkZGVkIGluIDcuMTAuNSkgCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB0aGUgc2VydmVyIGlzIGFuIElQdjYgaG9zdCwgdGhpcyBvcHRpb24gd2lsbCBoYXZlIG5vIGVmZmVjdCBhcyBvZiA3LjEyLjMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEZUUFVTRUVQU1YiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9GVFBfVVNFX0VQU1Y8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcuIElmIHRoZSB2YWx1ZSBpcyAxLCBpdCB0ZWxscyBjdXJsIHRvIHVzZSB0aGUgRVBTViBjb21tYW5kIHdoZW4gZG9pbmcgcGFzc2l2ZSBGVFAgZG93bmxvYWRzICh3aGljaCBpdCBhbHdheXMgZG9lcyBieSBkZWZhdWx0KS4gVXNpbmcgRVBTViBtZWFucyB0aGF0IGl0IHdpbGwgZmlyc3QgYXR0ZW1wdCB0byB1c2UgRVBTViBiZWZvcmUgdXNpbmcgUEFTViwgYnV0IGlmIHlvdSBwYXNzIHplcm8gdG8gdGhpcyBvcHRpb24sIGl0IHdpbGwgbm90IHRyeSB1c2luZyBFUFNWLCBvbmx5IHBsYWluIFBBU1YuIAorPHAgY2xhc3M9ImxldmVsMSI+SWYgdGhlIHNlcnZlciBpcyBhbiBJUHY2IGhvc3QsIHRoaXMgb3B0aW9uIHdpbGwgaGF2ZSBubyBlZmZlY3QgYXMgb2YgNy4xMi4zLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRGVFBVU0VQUkVUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfRlRQX1VTRV9QUkVUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nLiBJZiB0aGUgdmFsdWUgaXMgMSwgaXQgdGVsbHMgY3VybCB0byBzZW5kIGEgUFJFVCBjb21tYW5kIGJlZm9yZSBQQVNWIChhbmQgRVBTVikuIENlcnRhaW4gRlRQIHNlcnZlcnMsIG1haW5seSBkcmZ0cGQsIHJlcXVpcmUgdGhpcyBub24tc3RhbmRhcmQgY29tbWFuZCBmb3IgZGlyZWN0b3J5IGxpc3RpbmdzIGFzIHdlbGwgYXMgdXAgYW5kIGRvd25sb2FkcyBpbiBQQVNWIG1vZGUuIEhhcyBubyBlZmZlY3Qgd2hlbiB1c2luZyB0aGUgYWN0aXZlIEZUUCB0cmFuc2ZlcnMgbW9kZS4gIChBZGRlZCBpbiA3LjIwLjApIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEZUUENSRUFURU1JU1NJTkdESVJTIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfRlRQX0NSRUFURV9NSVNTSU5HX0RJUlM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcuIElmIHRoZSB2YWx1ZSBpcyAxLCBjdXJsIHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUgYW55IHJlbW90ZSBkaXJlY3RvcnkgdGhhdCBpdCBmYWlscyB0byBDV0QgaW50by4gQ1dEIGlzIHRoZSBjb21tYW5kIHRoYXQgY2hhbmdlcyB3b3JraW5nIGRpcmVjdG9yeS4gKEFkZGVkIGluIDcuMTAuNykgCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIHNldHRpbmcgYWxzbyBhcHBsaWVzIHRvIFNGVFAtY29ubmVjdGlvbnMuIGN1cmwgd2lsbCBhdHRlbXB0IHRvIGNyZWF0ZSB0aGUgcmVtb3RlIGRpcmVjdG9yeSBpZiBpdCBjYW4ndCBvYnRhaW4gYSBoYW5kbGUgdG8gdGhlIHRhcmdldC1sb2NhdGlvbi4gVGhlIGNyZWF0aW9uIHdpbGwgZmFpbCBpZiBhIGZpbGUgb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZGlyZWN0b3J5IHRvIGNyZWF0ZSBhbHJlYWR5IGV4aXN0cyBvciBsYWNrIG9mIHBlcm1pc3Npb25zIHByZXZlbnRzIGNyZWF0aW9uLiAoQWRkZWQgaW4gNy4xNi4zKSAKKzxwIGNsYXNzPSJsZXZlbDEiPlN0YXJ0aW5nIHdpdGggNy4xOS40LCB5b3UgY2FuIGFsc28gc2V0IHRoaXMgdmFsdWUgdG8gMiwgd2hpY2ggd2lsbCBtYWtlIGxpYmN1cmwgcmV0cnkgdGhlIENXRCBjb21tYW5kIGFnYWluIGlmIHRoZSBzdWJzZXF1ZW50IE1LRCBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGlmIHlvdSdyZSBkb2luZyBtYW55IHNpbXVsdGFub2VzIGNvbm5lY3Rpb25zIGFnYWluc3QgdGhlIHNhbWUgc2VydmVyIGFuZCB0aGV5IGFsbCBoYXZlIHRoaXMgb3B0aW9uIGVuYWJsZWQsIGFzIHRoZW4gQ1dEIG1heSBmaXJzdCBmYWlsIGJ1dCB0aGVuIGFub3RoZXIgY29ubmVjdGlvbiBkb2VzIE1LRCBiZWZvcmUgdGhpcyBjb25uZWN0aW9uIGFuZCB0aHVzIE1LRCBmYWlscyBidXQgdHJ5aW5nIENXRCB3b3JrcyEgNy4xOS40IGFsc28gaW50cm9kdWNlZCB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMRlRQX0NSRUFURV9ESVI8L3NwYW4+IGFuZCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxGVFBfQ1JFQVRFX0RJUl9SRVRSWTwvc3Bhbj4gZW51bSBuYW1lcyBmb3IgdGhlc2UgYXJndW1lbnRzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkJlZm9yZSB2ZXJzaW9uIDcuMTkuNCwgbGliY3VybCB3aWxsIHNpbXBseSBpZ25vcmUgYXJndW1lbnRzIHNldCB0byAyIGFuZCBhY3QgYXMgaWYgMSB3YXMgc2VsZWN0ZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEZUUFJFU1BPTlNFVElNRU9VVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0ZUUF9SRVNQT05TRV9USU1FT1VUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nLiAgQ2F1c2VzIGN1cmwgdG8gc2V0IGEgdGltZW91dCBwZXJpb2QgKGluIHNlY29uZHMpIG9uIHRoZSBhbW91bnQgb2YgdGltZSB0aGF0IHRoZSBzZXJ2ZXIgaXMgYWxsb3dlZCB0byB0YWtlIGluIG9yZGVyIHRvIGdlbmVyYXRlIGEgcmVzcG9uc2UgbWVzc2FnZSBmb3IgYSBjb21tYW5kIGJlZm9yZSB0aGUgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGh1bmcuICBXaGlsZSBjdXJsIGlzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UsIHRoaXMgdmFsdWUgb3ZlcnJpZGVzIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRUSU1FT1VUIj5DVVJMT1BUX1RJTUVPVVQ8L2E+LiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGlmIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVElNRU9VVCI+Q1VSTE9QVF9USU1FT1VUPC9hPiwgeW91IHNldCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BURlRQUkVTUE9OU0VUSU1FT1VUIj5DVVJMT1BUX0ZUUF9SRVNQT05TRV9USU1FT1VUPC9hPiB0byBhIHZhbHVlIHNtYWxsZXIgdGhhbiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVElNRU9VVCI+Q1VSTE9QVF9USU1FT1VUPC9hPi4gIChBZGRlZCBpbiA3LjEwLjgpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEZUUEFMVEVSTkFUSVZFVE9VU0VSIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfRlRQX0FMVEVSTkFUSVZFX1RPX1VTRVI8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGNoYXIgKiBhcyBwYXJhbWV0ZXIsIHBvaW50aW5nIHRvIGEgc3RyaW5nIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBhdXRoZW50aWNhdGUgaWYgdGhlIHVzdWFsIEZUUCAiVVNFUiB1c2VyIiBhbmQgIlBBU1MgcGFzc3dvcmQiIG5lZ290aWF0aW9uIGZhaWxzLiBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IGtub3duIHRvIGJlIHJlcXVpcmVkIHdoZW4gY29ubmVjdGluZyB0byBUdW1ibGV3ZWVkJ3MgU2VjdXJlIFRyYW5zcG9ydCBGVFBTIHNlcnZlciB1c2luZyBjbGllbnQgY2VydGlmaWNhdGVzIGZvciBhdXRoZW50aWNhdGlvbi4gKEFkZGVkIGluIDcuMTUuNSkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BURlRQU0tJUFBBU1ZJUCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0ZUUF9TS0lQX1BBU1ZfSVA8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcuIElmIHNldCB0byAxLCBpdCBpbnN0cnVjdHMgbGliY3VybCB0byBub3QgdXNlIHRoZSBJUCBhZGRyZXNzIHRoZSBzZXJ2ZXIgc3VnZ2VzdHMgaW4gaXRzIDIyNy1yZXNwb25zZSB0byBsaWJjdXJsJ3MgUEFTViBjb21tYW5kIHdoZW4gbGliY3VybCBjb25uZWN0cyB0aGUgZGF0YSBjb25uZWN0aW9uLiBJbnN0ZWFkIGxpYmN1cmwgd2lsbCByZS11c2UgdGhlIHNhbWUgSVAgYWRkcmVzcyBpdCBhbHJlYWR5IHVzZXMgZm9yIHRoZSBjb250cm9sIGNvbm5lY3Rpb24uIEJ1dCBpdCB3aWxsIHVzZSB0aGUgcG9ydCBudW1iZXIgZnJvbSB0aGUgMjI3LXJlc3BvbnNlLiAoQWRkZWQgaW4gNy4xNC4yKSAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgaWYgUE9SVCwgRVBSVCBvciBFUFNWIGlzIHVzZWQgaW5zdGVhZCBvZiBQQVNWLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRGVFBTU0xBVVRIIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfRlRQU1NMQVVUSDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZyB1c2luZyBvbmUgb2YgdGhlIHZhbHVlcyBmcm9tIGJlbG93LCB0byBhbHRlciBob3cgbGliY3VybCBpc3N1ZXMgIkFVVEggVExTIiBvciAiQVVUSCBTU0wiIHdoZW4gRlRQIG92ZXIgU1NMIGlzIGFjdGl2YXRlZCAoc2VlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRVU0VTU0wiPkNVUkxPUFRfVVNFX1NTTDwvYT4pLiAoQWRkZWQgaW4gNy4xMi4yKSAKKzxwIGNsYXNzPSJsZXZlbDIiPgorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTEZUUEFVVEhERUZBVUxUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxGVFBBVVRIX0RFRkFVTFQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+QWxsb3cgbGliY3VybCB0byBkZWNpZGUuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTEZUUEFVVEhTU0wiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEZUUEFVVEhfU1NMPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRyeSAiQVVUSCBTU0wiIGZpcnN0LCBhbmQgb25seSBpZiB0aGF0IGZhaWxzIHRyeSAiQVVUSCBUTFMiLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxGVFBBVVRIVExTIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxGVFBBVVRIX1RMUzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UcnkgIkFVVEggVExTIiBmaXJzdCwgYW5kIG9ubHkgaWYgdGhhdCBmYWlscyB0cnkgIkFVVEggU1NMIi4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRGVFBTU0xDQ0MiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9GVFBfU1NMX0NDQzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiBlbmFibGVkLCB0aGlzIG9wdGlvbiBtYWtlcyBsaWJjdXJsIHVzZSBDQ0MgKENsZWFyIENvbW1hbmQgQ2hhbm5lbCkuIEl0IHNodXRzIGRvd24gdGhlIFNTTC9UTFMgbGF5ZXIgYWZ0ZXIgYXV0aGVudGljYXRpbmcuIFRoZSByZXN0IG9mIHRoZSBjb250cm9sIGNoYW5uZWwgY29tbXVuaWNhdGlvbiB3aWxsIGJlIHVuZW5jcnlwdGVkLiBUaGlzIGFsbG93cyBOQVQgcm91dGVycyB0byBmb2xsb3cgdGhlIEZUUCB0cmFuc2FjdGlvbi4gUGFzcyBhIGxvbmcgdXNpbmcgb25lIG9mIHRoZSB2YWx1ZXMgYmVsb3cuIChBZGRlZCBpbiA3LjE2LjEpIAorPHAgY2xhc3M9ImxldmVsMiI+Cis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMRlRQU1NMQ0NDTk9ORSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRlRQU1NMX0NDQ19OT05FPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPkRvbid0IGF0dGVtcHQgdG8gdXNlIENDQy4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMRlRQU1NMQ0NDUEFTU0lWRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRlRQU1NMX0NDQ19QQVNTSVZFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPkRvIG5vdCBpbml0aWF0ZSB0aGUgc2h1dGRvd24sIGJ1dCB3YWl0IGZvciB0aGUgc2VydmVyIHRvIGRvIGl0LiBEbyBub3Qgc2VuZCBhIHJlcGx5LiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxGVFBTU0xDQ0NBQ1RJVkUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEZUUFNTTF9DQ0NfQUNUSVZFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPkluaXRpYXRlIHRoZSBzaHV0ZG93biBhbmQgd2FpdCBmb3IgYSByZXBseS4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRGVFBBQ0NPVU5UIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfRlRQX0FDQ09VTlQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIChvciBOVUxMIHRvIGRpc2FibGUpLiBXaGVuIGFuIEZUUCBzZXJ2ZXIgYXNrcyBmb3IgImFjY291bnQgZGF0YSIgYWZ0ZXIgdXNlciBuYW1lIGFuZCBwYXNzd29yZCBoYXMgYmVlbiBwcm92aWRlZCwgdGhpcyBkYXRhIGlzIHNlbnQgb2ZmIHVzaW5nIHRoZSBBQ0NUIGNvbW1hbmQuIChBZGRlZCBpbiA3LjEzLjApIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEZUUEZJTEVNRVRIT0QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9GVFBfRklMRU1FVEhPRDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZyB0aGF0IHNob3VsZCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcy4gVGhpcyBvcHRpb24gY29udHJvbHMgd2hhdCBtZXRob2QgbGliY3VybCBzaG91bGQgdXNlIHRvIHJlYWNoIGEgZmlsZSBvbiBhIEZUUChTKSBzZXJ2ZXIuIFRoZSBhcmd1bWVudCBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmVzOiAKKzxwIGNsYXNzPSJsZXZlbDIiPgorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTEZUUE1FVEhPRE1VTFRJQ1dEIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxGVFBNRVRIT0RfTVVMVElDV0Q8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+bGliY3VybCBkb2VzIGEgc2luZ2xlIENXRCBvcGVyYXRpb24gZm9yIGVhY2ggcGF0aCBwYXJ0IGluIHRoZSBnaXZlbiBVUkwuIEZvciBkZWVwIGhpZXJhcmNoaWVzIHRoaXMgbWVhbnMgbWFueSBjb21tYW5kcy4gVGhpcyBpcyBob3cgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTczOC50eHQiPlJGQyAxNzM4PC9hPiBzYXlzIGl0IHNob3VsZCBiZSBkb25lLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgc2xvd2VzdCBiZWhhdmlvci4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMRlRQTUVUSE9ETk9DV0QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEZUUE1FVEhPRF9OT0NXRDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5saWJjdXJsIGRvZXMgbm8gQ1dEIGF0IGFsbC4gbGliY3VybCB3aWxsIGRvIFNJWkUsIFJFVFIsIFNUT1IgZXRjIGFuZCBnaXZlIGEgZnVsbCBwYXRoIHRvIHRoZSBzZXJ2ZXIgZm9yIGFsbCB0aGVzZSBjb21tYW5kcy4gVGhpcyBpcyB0aGUgZmFzdGVzdCBiZWhhdmlvci4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMRlRQTUVUSE9EU0lOR0xFQ1dEIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxGVFBNRVRIT0RfU0lOR0xFQ1dEPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPmxpYmN1cmwgZG9lcyBvbmUgQ1dEIHdpdGggdGhlIGZ1bGwgdGFyZ2V0IGRpcmVjdG9yeSBhbmQgdGhlbiBvcGVyYXRlcyBvbiB0aGUgZmlsZSAibm9ybWFsbHkiIChsaWtlIGluIHRoZSBtdWx0aWN3ZCBjYXNlKS4gVGhpcyBpcyBzb21ld2hhdCBtb3JlIHN0YW5kYXJkcyBjb21wbGlhbnQgdGhhbiAnbm9jd2QnIGJ1dCB3aXRob3V0IHRoZSBmdWxsIHBlbmFsdHkgb2YgJ211bHRpY3dkJy4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oQWRkZWQgaW4gNy4xNS4xKSA8YSBuYW1lPSJSVFNQIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SVFNQIE9QVElPTlM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUlRTUFJFUVVFU1QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9SVFNQX1JFUVVFU1Q8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGVsbCBsaWJjdXJsIHdoYXQga2luZCBvZiBSVFNQIHJlcXVlc3QgdG8gbWFrZS4gUGFzcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBSVFNQIGVudW0gdmFsdWVzLiBVbmxlc3Mgbm90ZWQgb3RoZXJ3aXNlLCBjb21tYW5kcyByZXF1aXJlIHRoZSBTZXNzaW9uIElEIHRvIGJlIGluaXRpYWxpemVkLiAoQWRkZWQgaW4gNy4yMC4wKSAKKzxwIGNsYXNzPSJsZXZlbDIiPgorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTFJUU1BSRVFPUFRJT05TIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfUlRTUFJFUV9PUFRJT05TPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlVzZWQgdG8gcmV0cmlldmUgdGhlIGF2YWlsYWJsZSBtZXRob2RzIG9mIHRoZSBzZXJ2ZXIuIFRoZSBhcHBsaWNhdGlvbiBpcyByZXNwb25zYmlsZSBmb3IgcGFyc2luZyBhbmQgb2JleWluZyB0aGUgcmVzcG9uc2UuIDxzcGFuIGNsYXNzPSJib2xkIj4oVGhlIHNlc3Npb24gSUQgaXMgbm90IG5lZWRlZCBmb3IgdGhpcyBtZXRob2QuKTwvc3Bhbj4gIChBZGRlZCBpbiA3LjIwLjApIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTFJUU1BSRVFERVNDUklCRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1JUU1BSRVFfREVTQ1JJQkU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VXNlZCB0byBnZXQgdGhlIGxvdyBsZXZlbCBkZXNjcmlwdGlvbiBvZiBhIHN0cmVhbS4gVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3RlIHdoYXQgZm9ybWF0cyBpdCB1bmRlcnN0YW5kcyBpbiB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj4nQWNjZXB0Oic8L3NwYW4+IGhlYWRlci4gVW5sZXNzIHNldCBtYW51YWxseSwgbGliY3VybCB3aWxsIGF1dG9tYXRpY2FsbHkgZmlsbCBpbiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPidBY2NlcHQ6IGFwcGxpY2F0aW9uL3NkcCc8L3NwYW4+LiBUaW1lLWNvbmRpdGlvbiBoZWFkZXJzIHdpbGwgYmUgYWRkZWQgdG8gRGVzY3JpYmUgcmVxdWVzdHMgaWYgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRUSU1FQ09ORElUSU9OIj5DVVJMT1BUX1RJTUVDT05ESVRJT048L2E+IG9wdGlvbiBpcyBhY3RpdmUuIDxzcGFuIGNsYXNzPSJib2xkIj4oVGhlIHNlc3Npb24gSUQgaXMgbm90IG5lZWRlZCBmb3IgdGhpcyBtZXRob2QpPC9zcGFuPiAgKEFkZGVkIGluIDcuMjAuMCkgCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMUlRTUFJFUUFOTk9VTkNFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfUlRTUFJFUV9BTk5PVU5DRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5XaGVuIHNlbnQgYnkgYSBjbGllbnQsIHRoaXMgbWV0aG9kIGNoYW5nZXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzZXNzaW9uLiBGb3IgZXhhbXBsZSwgaWYgYSBjbGllbnQgaXMgdXNpbmcgdGhlIHNlcnZlciB0byByZWNvcmQgYSBtZWV0aW5nLCB0aGUgY2xpZW50IGNhbiB1c2UgQW5ub3VuY2UgdG8gaW5mb3JtIHRoZSBzZXJ2ZXIgb2YgYWxsIHRoZSBtZXRhLWluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXNzaW9uLiAgQU5OT1VOQ0UgYWN0cyBsaWtlIGEgSFRUUCBQVVQgb3IgUE9TVCBqdXN0IGxpa2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTFJUU1BSRVFTRVRQQVJBTUVURVIiPkNVUkxfUlRTUFJFUV9TRVRfUEFSQU1FVEVSPC9hPiAoQWRkZWQgaW4gNy4yMC4wKSAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxSVFNQUkVRU0VUVVAiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9SVFNQUkVRX1NFVFVQPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlNldHVwIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdHJhbnNwb3J0IGxheWVyIGZvciB0aGUgc2Vzc2lvbi4gVGhlIGFwcGxpY2F0aW9uIG11c3Qgc2V0IHRoZSBkZXNpcmVkIFRyYW5zcG9ydCBvcHRpb25zIGZvciBhIHNlc3Npb24gYnkgdXNpbmcgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRSVFNQVFJBTlNQT1JUIj5DVVJMT1BUX1JUU1BfVFJBTlNQT1JUPC9hPiBvcHRpb24gcHJpb3IgdG8gY2FsbGluZyBzZXR1cC4gSWYgbm8gc2Vzc2lvbiBJRCBpcyBjdXJyZW50bHkgc2V0IHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFJUU1BTRVNTSU9OSUQiPkNVUkxPUFRfUlRTUF9TRVNTSU9OX0lEPC9hPiwgbGliY3VybCB3aWxsIGV4dHJhY3QgYW5kIHVzZSB0aGUgc2Vzc2lvbiBJRCBpbiB0aGUgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0LiA8c3BhbiBjbGFzcz0iYm9sZCI+KFRoZSBzZXNzaW9uIElEIGlzIG5vdCBuZWVkZWQgZm9yIHRoaXMgbWV0aG9kKS48L3NwYW4+ICAoQWRkZWQgaW4gNy4yMC4wKSAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxSVFNQUkVRUExBWSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1JUU1BSRVFfUExBWTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5TZW5kIGEgUGxheSBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIuIFVzZSB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFJBTkdFIj5DVVJMT1BUX1JBTkdFPC9hPiBvcHRpb24gdG8gbW9kaWZ5IHRoZSBwbGF5YmFjayB0aW1lIChlLmcuICducHQ9MTAtMTUnKS4gIChBZGRlZCBpbiA3LjIwLjApIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTFJUU1BSRVFQQVVTRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1JUU1BSRVFfUEFVU0U8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+U2VuZCBhIFBhdXNlIGNvbW1hbmQgdG8gdGhlIHNlcnZlci4gVXNlIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUkFOR0UiPkNVUkxPUFRfUkFOR0U8L2E+IG9wdGlvbiB3aXRoIGEgc2luZ2xlIHZhbHVlIHRvIGluZGljYXRlIHdoZW4gdGhlIHN0cmVhbSBzaG91bGQgYmUgaGFsdGVkLiAoZS5nLiBucHQ9JzI1JykgKEFkZGVkIGluIDcuMjAuMCkgCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMUlRTUFJFUVRFQVJET1dOIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfUlRTUFJFUV9URUFSRE9XTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGlzIGNvbW1hbmQgdGVybWluYXRlcyBhbiBSVFNQIHNlc3Npb24uIFNpbXBseSBjbG9zaW5nIGEgY29ubmVjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlIFJUU1Agc2Vzc2lvbiBzaW5jZSBpdCBpcyB2YWxpZCB0byBjb250cm9sIGFuIFJUU1Agc2Vzc2lvbiBvdmVyIGRpZmZlcmVudCBjb25uZWN0aW9ucy4gIChBZGRlZCBpbiA3LjIwLjApIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTFJUU1BSRVFHRVRQQVJBTUVURVIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9SVFNQUkVRX0dFVF9QQVJBTUVURVI8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+UmV0cmlldmUgYSBwYXJhbWV0ZXIgZnJvbSB0aGUgc2VydmVyLiBCeSBkZWZhdWx0LCBsaWJjdXJsIHdpbGwgYXV0b21hdGljYWxseSBpbmNsdWRlIGEgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5Db250ZW50LVR5cGU6IHRleHQvcGFyYW1ldGVyczwvc3Bhbj4gaGVhZGVyIG9uIGFsbCBub24tZW1wdHkgcmVxdWVzdHMgdW5sZXNzIGEgY3VzdG9tIG9uZSBpcyBzZXQuIEdFVF9QQVJBTUVURVIgYWN0cyBqdXN0IGxpa2UgYSBIVFRQIFBVVCBvciBQT1NUIChzZWUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTFJUU1BSRVFTRVRQQVJBTUVURVIiPkNVUkxfUlRTUFJFUV9TRVRfUEFSQU1FVEVSPC9hPikuIEFwcGxpY2F0aW9ucyB3aXNoaW5nIHRvIHNlbmQgYSBoZWFydGJlYXQgbWVzc2FnZSAoZS5nLiBpbiB0aGUgcHJlc2VuY2Ugb2YgYSBzZXJ2ZXItc3BlY2lmaWVkIHRpbWVvdXQpIHNob3VsZCBzZW5kIHVzZSBhbiBlbXB0eSBHRVRfUEFSQU1FVEVSIHJlcXVlc3QuIChBZGRlZCBpbiA3LjIwLjApIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTFJUU1BSRVFTRVRQQVJBTUVURVIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9SVFNQUkVRX1NFVF9QQVJBTUVURVI8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+U2V0IGEgcGFyYW1ldGVyIG9uIHRoZSBzZXJ2ZXIuIEJ5IGRlZmF1bHQsIGxpYmN1cmwgd2lsbCBhdXRvbWF0aWNhbGx5IGluY2x1ZGUgYSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNvbnRlbnQtVHlwZTogdGV4dC9wYXJhbWV0ZXJzPC9zcGFuPiBoZWFkZXIgdW5sZXNzIGEgY3VzdG9tIG9uZSBpcyBzZXQuIFRoZSBpbnRlcmFjdGlvbiB3aXRoIFNFVF9QQVJBTVRFUiBpcyBtdWNoIGxpa2UgYSBIVFRQIFBVVCBvciBQT1NULiBBbiBhcHBsaWNhdGlvbiBtYXkgZWl0aGVyIHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVVBMT0FEIj5DVVJMT1BUX1VQTE9BRDwvYT4gd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUkVBRERBVEEiPkNVUkxPUFRfUkVBRERBVEE8L2E+IGxpa2UgYSBIVFRQIFBVVCwgb3IgaXQgbWF5IHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUE9TVEZJRUxEUyI+Q1VSTE9QVF9QT1NURklFTERTPC9hPiBsaWtlIGEgSFRUUCBQT1NULiBObyBjaHVua2VkIHRyYW5zZmVycyBhcmUgYWxsb3dlZCwgc28gdGhlIGFwcGxpY2F0aW9uIG11c3Qgc2V0IHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUSU5GSUxFU0laRSI+Q1VSTE9QVF9JTkZJTEVTSVpFPC9hPiBpbiB0aGUgZm9ybWVyIGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUE9TVEZJRUxEU0laRSI+Q1VSTE9QVF9QT1NURklFTERTSVpFPC9hPiBpbiB0aGUgbGF0dGVyLiBBbHNvLCB0aGVyZSBpcyBubyB1c2Ugb2YgbXVsdGktcGFydCBQT1NUcyB3aXRoaW4gUlRTUC4gKEFkZGVkIGluIDcuMjAuMCkgCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMUlRTUFJFUVJFQ09SRCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1JUU1BSRVFfUkVDT1JEPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlVzZWQgdG8gdGVsbCB0aGUgc2VydmVyIHRvIHJlY29yZCBhIHNlc3Npb24uIFVzZSB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFJBTkdFIj5DVVJMT1BUX1JBTkdFPC9hPiBvcHRpb24gdG8gbW9kaWZ5IHRoZSByZWNvcmQgdGltZS4gKEFkZGVkIGluIDcuMjAuMCkgCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMUlRTUFJFUVJFQ0VJVkUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9SVFNQUkVRX1JFQ0VJVkU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VGhpcyBpcyBhIHNwZWNpYWwgcmVxdWVzdCBiZWNhdXNlIGl0IGRvZXMgbm90IHNlbmQgYW55IGRhdGEgdG8gdGhlIHNlcnZlci4gVGhlIGFwcGxpY2F0aW9uIG1heSBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gb3JkZXIgdG8gcmVjZWl2ZSBpbnRlcmxlYXZlZCBSVFAgZGF0YS4gSXQgd2lsbCByZXR1cm4gYWZ0ZXIgcHJvY2Vzc2luZyBvbmUgcmVhZCBidWZmZXIgb2YgZGF0YSBpbiBvcmRlciB0byBnaXZlIHRoZSBhcHBsaWNhdGlvbiBhIGNoYW5jZSB0byBydW4uIChBZGRlZCBpbiA3LjIwLjApIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUlRTUFNFU1NJT05JRCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1JUU1BfU0VTU0lPTl9JRDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY2hhciAqIGFzIGEgcGFyYW1ldGVyIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgUlRTUCBTZXNzaW9uIElEIGZvciB0aGUgaGFuZGxlLiBVc2VmdWwgZm9yIHJlc3VtaW5nIGFuIGluLXByb2dyZXNzIHNlc3Npb24uIE9uY2UgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gYW55IG5vbi1OVUxMIHZhbHVlLCBsaWJjdXJsIHdpbGwgcmV0dXJuIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTEVfUlRTUF9TRVNTSU9OX0VSUk9SPC9zcGFuPiBpZiBJRCByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgZG9lcyBub3QgbWF0Y2guIElmIHVuc2V0IChvciBzZXQgdG8gTlVMTCksIGxpYmN1cmwgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgSUQgdGhlIGZpcnN0IHRpbWUgdGhlIHNlcnZlciBzZXRzIGl0IGluIGEgcmVzcG9uc2UuIChBZGRlZCBpbiA3LjIwLjApIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFJUU1BTVFJFQU1VUkkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9SVFNQX1NUUkVBTV9VUkk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U2V0IHRoZSBzdHJlYW0gVVJJIHRvIG9wZXJhdGUgb24gYnkgcGFzc2luZyBhIGNoYXIgKiAuIEZvciBleGFtcGxlLCBhIHNpbmdsZSBzZXNzaW9uIG1heSBiZSBjb250cm9sbGluZyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnJ0c3A6Ly9mb28vdHdpc3Rlci9hdWRpbzwvc3Bhbj4gYW5kIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+cnRzcDovL2Zvby90d2lzdGVyL3ZpZGVvPC9zcGFuPiBhbmQgdGhlIGFwcGxpY2F0aW9uIGNhbiBzd2l0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIHN0cmVhbSB1c2luZyB0aGlzIG9wdGlvbi4gSWYgdW5zZXQsIGxpYmN1cmwgd2lsbCBkZWZhdWx0IHRvIG9wZXJhdGluZyBvbiBnZW5lcmljIHNlcnZlciBvcHRpb25zIGJ5IHBhc3NpbmcgJyonIGluIHRoZSBwbGFjZSBvZiB0aGUgUlRTUCBTdHJlYW0gVVJJLiBUaGlzIG9wdGlvbiBpcyBkaXN0aW5jdCBmcm9tIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRVUkwiPkNVUkxPUFRfVVJMPC9hPi4gV2hlbiB3b3JraW5nIHdpdGggUlRTUCwgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTE9QVF9TVFJFQU1fVVJJPC9zcGFuPiBpbmRpY2F0ZXMgd2hhdCBVUkwgdG8gc2VuZCB0byB0aGUgc2VydmVyIGluIHRoZSByZXF1ZXN0IGhlYWRlciB3aGlsZSB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFVSTCI+Q1VSTE9QVF9VUkw8L2E+IGluZGljYXRlcyB3aGVyZSB0byBtYWtlIHRoZSBjb25uZWN0aW9uIHRvLiAgKGUuZy4gdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRVUkwiPkNVUkxPUFRfVVJMPC9hPiBmb3IgdGhlIGFib3ZlIGV4YW1wbGVzIG1pZ2h0IGJlIHNldCB0byA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnJ0c3A6Ly9mb28vdHdpc3Rlcjwvc3Bhbj4gKEFkZGVkIGluIDcuMjAuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUlRTUFRSQU5TUE9SVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1JUU1BfVFJBTlNQT1JUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBjaGFyICogdG8gdGVsbCBsaWJjdXJsIHdoYXQgdG8gcGFzcyBmb3IgdGhlIFRyYW5zcG9ydDogaGVhZGVyIGZvciB0aGlzIFJUU1Agc2Vzc2lvbi4gVGhpcyBpcyBtYWlubHkgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYXZvaWQgbmVlZGluZyB0byBzZXQgYSBjdXN0b20gVHJhbnNwb3J0OiBoZWFkZXIgZm9yIGV2ZXJ5IFNFVFVQIHJlcXVlc3QuIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHNldCBhIFRyYW5zcG9ydDogaGVhZGVyIGJlZm9yZSBpc3N1aW5nIGEgU0VUVVAgcmVxdWVzdC4gKEFkZGVkIGluIDcuMjAuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUlRTUEhFQURFUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1JUU1BfSEVBREVSPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIGlzIHNpbXBseSBhbiBhbGlhcyBmb3IgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEhUVFBIRUFERVIiPkNVUkxPUFRfSFRUUF9IRUFERVI8L2E+LiBVc2UgdGhpcyB0byByZXBsYWNlIHRoZSBzdGFuZGFyZCBoZWFkZXJzIHRoYXQgUlRTUCBhbmQgSFRUUCBzaGFyZS4gSXQgaXMgYWxzbyB2YWxpZCB0byB1c2UgdGhlIHNob3J0Y3V0cyBzdWNoIGFzIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRVU0VSQUdFTlQiPkNVUkxPUFRfVVNFUkFHRU5UPC9hPi4gKEFkZGVkIGluIDcuMjAuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUlRTUENMSUVOVENTRVEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9SVFNQX0NMSUVOVF9DU0VRPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk1hbnVhbGx5IHNldCB0aGUgdGhlIENTRVEgbnVtYmVyIHRvIGlzc3VlIGZvciB0aGUgbmV4dCBSVFNQIHJlcXVlc3QuIFVzZWZ1bCBpZiB0aGUgYXBwbGljYXRpb24gaXMgcmVzdW1pbmcgYSBwcmV2aW91c2x5IGJyb2tlbiBjb25uZWN0aW9uLiBUaGUgQ1NFUSB3aWxsIGluY3JlbWVudCBmcm9tIHRoaXMgbmV3IG51bWJlciBoZW5jZWZvcnRoLiAoQWRkZWQgaW4gNy4yMC4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRSVFNQU0VSVkVSQ1NFUSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1JUU1BfU0VSVkVSX0NTRVE8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+TWFudWFsbHkgc2V0IHRoZSBDU0VRIG51bWJlciB0byBleHBlY3QgZm9yIHRoZSBuZXh0IFJUU1AgU2VydmVyLSZndDtDbGllbnQgcmVxdWVzdC4gIEF0IHRoZSBtb21lbnQsIHRoaXMgZmVhdHVyZSAobGlzdGVuaW5nIGZvciBTZXJ2ZXIgcmVxdWVzdHMpIGlzIHVuaW1wbGVtZW50ZWQuIChBZGRlZCBpbiA3LjIwLjApIDxhIG5hbWU9IlBST1RPQ09MIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5QUk9UT0NPTCBPUFRJT05TPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFRSQU5TRkVSVEVYVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1RSQU5TRkVSVEVYVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BIHBhcmFtZXRlciBzZXQgdG8gMSB0ZWxscyB0aGUgbGlicmFyeSB0byB1c2UgQVNDSUkgbW9kZSBmb3IgRlRQIHRyYW5zZmVycywgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBiaW5hcnkgdHJhbnNmZXIuIEZvciB3aW4zMiBzeXN0ZW1zIGl0IGRvZXMgbm90IHNldCB0aGUgc3Rkb3V0IHRvIGJpbmFyeSBtb2RlLiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNhYmxlIHdoZW4gdHJhbnNmZXJyaW5nIHRleHQgZGF0YSBiZXR3ZWVuIHN5c3RlbXMgd2l0aCBkaWZmZXJlbnQgdmlld3Mgb24gY2VydGFpbiBjaGFyYWN0ZXJzLCBzdWNoIGFzIG5ld2xpbmVzIG9yIHNpbWlsYXIuIAorPHAgY2xhc3M9ImxldmVsMSI+bGliY3VybCBkb2VzIG5vdCBkbyBhIGNvbXBsZXRlIEFTQ0lJIGNvbnZlcnNpb24gd2hlbiBkb2luZyBBU0NJSSB0cmFuc2ZlcnMgb3ZlciBGVFAuIFRoaXMgaXMgYSBrbm93biBsaW1pdGF0aW9uL2ZsYXcgdGhhdCBub2JvZHkgaGFzIHJlY3RpZmllZC4gbGliY3VybCBzaW1wbHkgc2V0cyB0aGUgbW9kZSB0byBBU0NJSSBhbmQgcGVyZm9ybXMgYSBzdGFuZGFyZCB0cmFuc2Zlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUFJPWFlUUkFOU0ZFUk1PREUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9QUk9YWV9UUkFOU0ZFUl9NT0RFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nLiBJZiB0aGUgdmFsdWUgaXMgc2V0IHRvIDEgKG9uZSksIGl0IHRlbGxzIGxpYmN1cmwgdG8gc2V0IHRoZSB0cmFuc2ZlciBtb2RlIChiaW5hcnkgb3IgQVNDSUkpIGZvciBGVFAgdHJhbnNmZXJzIGRvbmUgdmlhIGEgSFRUUCBwcm94eSwgYnkgYXBwZW5kaW5nIDt0eXBlPWEgb3IgO3R5cGU9aSB0byB0aGUgVVJMLiBXaXRob3V0IHRoaXMgc2V0dGluZywgb3IgaXQgYmVpbmcgc2V0IHRvIDAgKHplcm8sIHRoZSBkZWZhdWx0KSwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFRSQU5TRkVSVEVYVCI+Q1VSTE9QVF9UUkFOU0ZFUlRFWFQ8L2E+IGhhcyBubyBlZmZlY3Qgd2hlbiBkb2luZyBGVFAgdmlhIGEgcHJveHkuIEJld2FyZSB0aGF0IG5vdCBhbGwgcHJveGllcyBzdXBwb3J0IHRoaXMgZmVhdHVyZS4gIChBZGRlZCBpbiA3LjE4LjApIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVENSTEYiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DUkxGPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nLiBJZiB0aGUgdmFsdWUgaXMgc2V0IHRvIDEgKG9uZSksIGxpYmN1cmwgY29udmVydHMgVW5peCBuZXdsaW5lcyB0byBDUkxGIG5ld2xpbmVzIG9uIHRyYW5zZmVycy4gRGlzYWJsZSB0aGlzIG9wdGlvbiBhZ2FpbiBieSBzZXR0aW5nIHRoZSB2YWx1ZSB0byAwICh6ZXJvKS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUkFOR0UiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9SQU5HRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgd2hpY2ggc2hvdWxkIGNvbnRhaW4gdGhlIHNwZWNpZmllZCByYW5nZSB5b3Ugd2FudC4gSXQgc2hvdWxkIGJlIGluIHRoZSBmb3JtYXQgIlgtWSIsIHdoZXJlIFggb3IgWSBtYXkgYmUgbGVmdCBvdXQuIEhUVFAgdHJhbnNmZXJzIGFsc28gc3VwcG9ydCBzZXZlcmFsIGludGVydmFscywgc2VwYXJhdGVkIHdpdGggY29tbWFzIGFzIGluIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+IlgtWSxOLU0iPC9zcGFuPi4gVXNpbmcgdGhpcyBraW5kIG9mIG11bHRpcGxlIGludGVydmFscyB3aWxsIGNhdXNlIHRoZSBIVFRQIHNlcnZlciB0byBzZW5kIHRoZSByZXNwb25zZSBkb2N1bWVudCBpbiBwaWVjZXMgKHVzaW5nIHN0YW5kYXJkIE1JTUUgc2VwYXJhdGlvbiB0ZWNobmlxdWVzKS4gRm9yIFJUU1AsIHRoZSBmb3JtYXR0aW5nIG9mIGEgcmFuZ2Ugc2hvdWxkIGZvbGxvdyA8YSBocmVmPSJodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMzI2LnR4dCI+UkZDIDIzMjY8L2E+IFNlY3Rpb24gMTIuMjkuIEZvciBSVFNQLCBieXRlIHJhbmdlcyBhcmUgPHNwYW4gQ2xhc3M9ImJvbGQiPm5vdDwvc3Bhbj4gcGVybWl0dGVkLiBJbnN0ZWFkLCByYW5nZXMgc2hvdWxkIGJlIGdpdmVuIGluIG5wdCwgdXRjLCBvciBzbXB0ZSBmb3JtYXRzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBOVUxMIHRvIHRoaXMgb3B0aW9uIHRvIGRpc2FibGUgdGhlIHVzZSBvZiByYW5nZXMuIAorPHAgY2xhc3M9ImxldmVsMSI+UmFuZ2VzIHdvcmsgb24gSFRUUCwgRlRQLCBGSUxFIChzaW5jZSA3LjE4LjApLCBhbmQgUlRTUCAoc2luY2UgNy4yMC4wKSB0cmFuc2ZlcnMgb25seS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUkVTVU1FRlJPTSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1JFU1VNRV9GUk9NPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIGFzIHBhcmFtZXRlci4gSXQgY29udGFpbnMgdGhlIG9mZnNldCBpbiBudW1iZXIgb2YgYnl0ZXMgdGhhdCB5b3Ugd2FudCB0aGUgdHJhbnNmZXIgdG8gc3RhcnQgZnJvbS4gU2V0IHRoaXMgb3B0aW9uIHRvIDAgdG8gbWFrZSB0aGUgdHJhbnNmZXIgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIChlZmZlY3RpdmVseSBkaXNhYmxpbmcgcmVzdW1lKS4gRm9yIEZUUCwgc2V0IHRoaXMgb3B0aW9uIHRvIC0xIHRvIG1ha2UgdGhlIHRyYW5zZmVyIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgdGFyZ2V0IGZpbGUgKHVzZWZ1bCB0byBjb250aW51ZSBhbiBpbnRlcnJ1cHRlZCB1cGxvYWQpLiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gZG9pbmcgdXBsb2FkcyB3aXRoIEZUUCwgdGhlIHJlc3VtZSBwb3NpdGlvbiBpcyB3aGVyZSBpbiB0aGUgbG9jYWwvc291cmNlIGZpbGUgbGliY3VybCBzaG91bGQgdHJ5IHRvIHJlc3VtZSB0aGUgdXBsb2FkIGZyb20gYW5kIGl0IHdpbGwgdGhlbiBhcHBlbmQgdGhlIHNvdXJjZSBmaWxlIHRvIHRoZSByZW1vdGUgdGFyZ2V0IGZpbGUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFJFU1VNRUZST01MQVJHRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1JFU1VNRV9GUk9NX0xBUkdFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBjdXJsX29mZl90IGFzIHBhcmFtZXRlci4gSXQgY29udGFpbnMgdGhlIG9mZnNldCBpbiBudW1iZXIgb2YgYnl0ZXMgdGhhdCB5b3Ugd2FudCB0aGUgdHJhbnNmZXIgdG8gc3RhcnQgZnJvbS4gKEFkZGVkIGluIDcuMTEuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUQ1VTVE9NUkVRVUVTVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0NVU1RPTVJFUVVFU1Q8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGFzIHBhcmFtZXRlci4gSXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgR0VUIG9yIEhFQUQgd2hlbiBkb2luZyBhIEhUVFAgcmVxdWVzdCwgb3IgaW5zdGVhZCBvZiBMSVNUIG9yIE5MU1Qgd2hlbiBkb2luZyBhIEZUUCBkaXJlY3RvcnkgbGlzdGluZy4gVGhpcyBpcyB1c2VmdWwgZm9yIGRvaW5nIERFTEVURSBvciBvdGhlciBtb3JlIG9yIGxlc3Mgb2JzY3VyZSBIVFRQIHJlcXVlc3RzLiBEb24ndCBkbyB0aGlzIGF0IHdpbGwsIG1ha2Ugc3VyZSB5b3VyIHNlcnZlciBzdXBwb3J0cyB0aGUgY29tbWFuZCBmaXJzdC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIHlvdSBjaGFuZ2UgdGhlIHJlcXVlc3QgbWV0aG9kIGJ5IHNldHRpbmcgPGEgY2xhc3M9ImJvbGQiIGhyZWY9IiNDVVJMT1BUQ1VTVE9NUkVRVUVTVCI+Q1VSTE9QVF9DVVNUT01SRVFVRVNUPC9hPiB0byBzb21ldGhpbmcsIHlvdSBkb24ndCBhY3R1YWxseSBjaGFuZ2UgaG93IGxpYmN1cmwgYmVoYXZlcyBvciBhY3RzIGluIHJlZ2FyZHMgdG8gdGhlIHBhcnRpY3VsYXIgcmVxdWVzdCBtZXRob2QsIGl0IHdpbGwgb25seSBjaGFuZ2UgdGhlIGFjdHVhbCBzdHJpbmcgc2VudCBpbiB0aGUgcmVxdWVzdC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Gb3IgZXhhbXBsZTogaWYgeW91IHRlbGwgbGliY3VybCB0byBkbyBhIEhFQUQgcmVxdWVzdCwgYnV0IHRoZW4gY2hhbmdlIHRoZSByZXF1ZXN0IHRvIGEgIkdFVCIgd2l0aCA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iI0NVUkxPUFRDVVNUT01SRVFVRVNUIj5DVVJMT1BUX0NVU1RPTVJFUVVFU1Q8L2E+IHlvdSdsbCBzdGlsbCBzZWUgbGliY3VybCBhY3QgYXMgaWYgaXQgc2VudCBhIEhFQUQgZXZlbiB3aGVuIGl0IGRvZXMgc2VuZCBhIEdFVC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UbyBzd2l0Y2ggdG8gYSBwcm9wZXIgSEVBRCwgdXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFROT0JPRFkiPkNVUkxPUFRfTk9CT0RZPC9hPiwgdG8gc3dpdGNoIHRvIGEgcHJvcGVyIFBPU1QsIHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUE9TVCI+Q1VSTE9QVF9QT1NUPC9hPiBvciA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUUE9TVEZJRUxEUyI+Q1VSTE9QVF9QT1NURklFTERTPC9hPiBhbmQgc28gb24uIAorPHAgY2xhc3M9ImxldmVsMSI+UmVzdG9yZSB0byB0aGUgaW50ZXJuYWwgZGVmYXVsdCBieSBzZXR0aW5nIHRoaXMgdG8gTlVMTC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5NYW55IHBlb3BsZSBoYXZlIHdyb25nbHkgdXNlZCB0aGlzIG9wdGlvbiB0byByZXBsYWNlIHRoZSBlbnRpcmUgcmVxdWVzdCB3aXRoIHRoZWlyIG93biwgaW5jbHVkaW5nIG11bHRpcGxlIGhlYWRlcnMgYW5kIFBPU1QgY29udGVudHMuIFdoaWxlIHRoYXQgbWlnaHQgd29yayBpbiBtYW55IGNhc2VzLCBpdCB3aWxsIGNhdXNlIGxpYmN1cmwgdG8gc2VuZCBpbnZhbGlkIHJlcXVlc3RzIGFuZCBpdCBjb3VsZCBwb3NzaWJseSBjb25mdXNlIHRoZSByZW1vdGUgc2VydmVyIGJhZGx5LiBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFBPU1QiPkNVUkxPUFRfUE9TVDwvYT4gYW5kIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQT1NURklFTERTIj5DVVJMT1BUX1BPU1RGSUVMRFM8L2E+IHRvIHNldCBQT1NUIGRhdGEuIFVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUSFRUUEhFQURFUiI+Q1VSTE9QVF9IVFRQSEVBREVSPC9hPiB0byByZXBsYWNlIG9yIGV4dGVuZCB0aGUgc2V0IG9mIGhlYWRlcnMgc2VudCBieSBsaWJjdXJsLiBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVEhUVFBWRVJTSU9OIj5DVVJMT1BUX0hUVFBfVkVSU0lPTjwvYT4gdG8gY2hhbmdlIEhUVFAgdmVyc2lvbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BURklMRVRJTUUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9GSUxFVElNRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZy4gSWYgaXQgaXMgMSwgbGliY3VybCB3aWxsIGF0dGVtcHQgdG8gZ2V0IHRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgcmVtb3RlIGRvY3VtZW50IGluIHRoaXMgb3BlcmF0aW9uLiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIHJlbW90ZSBzZXJ2ZXIgc2VuZHMgdGhlIHRpbWUgb3IgcmVwbGllcyB0byBhIHRpbWUgcXVlcnlpbmcgY29tbWFuZC4gVGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfZ2V0aW5mby5odG1sIj5jdXJsX2Vhc3lfZ2V0aW5mbygzKTwvYT4gZnVuY3Rpb24gd2l0aCB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMSU5GT19GSUxFVElNRTwvc3Bhbj4gYXJndW1lbnQgY2FuIGJlIHVzZWQgYWZ0ZXIgYSB0cmFuc2ZlciB0byBleHRyYWN0IHRoZSByZWNlaXZlZCB0aW1lIChpZiBhbnkpLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFROT0JPRFkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9OT0JPRFk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QSBwYXJhbWV0ZXIgc2V0IHRvIDEgdGVsbHMgdGhlIGxpYnJhcnkgdG8gbm90IGluY2x1ZGUgdGhlIGJvZHktcGFydCBpbiB0aGUgb3V0cHV0LiBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHByb3RvY29scyB0aGF0IGhhdmUgc2VwYXJhdGUgaGVhZGVyIGFuZCBib2R5IHBhcnRzLiBPbiBIVFRQKFMpIHNlcnZlcnMsIHRoaXMgd2lsbCBtYWtlIGxpYmN1cmwgZG8gYSBIRUFEIHJlcXVlc3QuIAorPHAgY2xhc3M9ImxldmVsMSI+VG8gY2hhbmdlIHJlcXVlc3QgdG8gR0VULCB5b3Ugc2hvdWxkIHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUSFRUUEdFVCI+Q1VSTE9QVF9IVFRQR0VUPC9hPi4gQ2hhbmdlIHJlcXVlc3QgdG8gUE9TVCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRQT1NUIj5DVVJMT1BUX1BPU1Q8L2E+IGV0Yy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUSU5GSUxFU0laRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0lORklMRVNJWkU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+V2hlbiB1cGxvYWRpbmcgYSBmaWxlIHRvIGEgcmVtb3RlIHNpdGUsIHRoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIHRvIHRlbGwgbGliY3VybCB3aGF0IHRoZSBleHBlY3RlZCBzaXplIG9mIHRoZSBpbmZpbGUgaXMuIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHBhc3NlZCBhcyBhIGxvbmcuIFNlZSBhbHNvIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRJTkZJTEVTSVpFTEFSR0UiPkNVUkxPUFRfSU5GSUxFU0laRV9MQVJHRTwvYT4uIAorPHAgY2xhc3M9ImxldmVsMSI+Rm9yIHVwbG9hZGluZyB1c2luZyBTQ1AsIHRoaXMgb3B0aW9uIG9yIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRJTkZJTEVTSVpFTEFSR0UiPkNVUkxPUFRfSU5GSUxFU0laRV9MQVJHRTwvYT4gaXMgbWFuZGF0b3J5LiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gc2VuZGluZyBlbWFpbHMgdXNpbmcgU01UUCwgdGhpcyBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIG9wdGlvbmFsIFNJWkUgcGFyYW1ldGVyIGZvciB0aGUgTUFJTCBGUk9NIGNvbW1hbmQuIChBZGRlZCBpbiA3LjIzLjApIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gZG9lcyBub3QgbGltaXQgaG93IG11Y2ggZGF0YSBsaWJjdXJsIHdpbGwgYWN0dWFsbHkgc2VuZCwgYXMgdGhhdCBpcyBjb250cm9sbGVkIGVudGlyZWx5IGJ5IHdoYXQgdGhlIHJlYWQgY2FsbGJhY2sgcmV0dXJucy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUSU5GSUxFU0laRUxBUkdFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfSU5GSUxFU0laRV9MQVJHRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIHVwbG9hZGluZyBhIGZpbGUgdG8gYSByZW1vdGUgc2l0ZSwgdGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgdG8gdGVsbCBsaWJjdXJsIHdoYXQgdGhlIGV4cGVjdGVkIHNpemUgb2YgdGhlIGluZmlsZSBpcy4gIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHBhc3NlZCBhcyBhIGN1cmxfb2ZmX3QuIChBZGRlZCBpbiA3LjExLjApIAorPHAgY2xhc3M9ImxldmVsMSI+Rm9yIHVwbG9hZGluZyB1c2luZyBTQ1AsIHRoaXMgb3B0aW9uIG9yIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRJTkZJTEVTSVpFIj5DVVJMT1BUX0lORklMRVNJWkU8L2E+IGlzIG1hbmRhdG9yeS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBkb2VzIG5vdCBsaW1pdCBob3cgbXVjaCBkYXRhIGxpYmN1cmwgd2lsbCBhY3R1YWxseSBzZW5kLCBhcyB0aGF0IGlzIGNvbnRyb2xsZWQgZW50aXJlbHkgYnkgd2hhdCB0aGUgcmVhZCBjYWxsYmFjayByZXR1cm5zLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRVUExPQUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9VUExPQUQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QSBwYXJhbWV0ZXIgc2V0IHRvIDEgdGVsbHMgdGhlIGxpYnJhcnkgdG8gcHJlcGFyZSBmb3IgYW4gdXBsb2FkLiBUaGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFJFQUREQVRBIj5DVVJMT1BUX1JFQUREQVRBPC9hPiBhbmQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVElORklMRVNJWkUiPkNVUkxPUFRfSU5GSUxFU0laRTwvYT4gb3IgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVElORklMRVNJWkVMQVJHRSI+Q1VSTE9QVF9JTkZJTEVTSVpFX0xBUkdFPC9hPiBvcHRpb25zIGFyZSBhbHNvIGludGVyZXN0aW5nIGZvciB1cGxvYWRzLiBJZiB0aGUgcHJvdG9jb2wgaXMgSFRUUCwgdXBsb2FkaW5nIG1lYW5zIHVzaW5nIHRoZSBQVVQgcmVxdWVzdCB1bmxlc3MgeW91IHRlbGwgbGliY3VybCBvdGhlcndpc2UuIAorPHAgY2xhc3M9ImxldmVsMSI+VXNpbmcgUFVUIHdpdGggSFRUUCAxLjEgaW1wbGllcyB0aGUgdXNlIG9mIGEgIkV4cGVjdDogMTAwLWNvbnRpbnVlIiBoZWFkZXIuIFlvdSBjYW4gZGlzYWJsZSB0aGlzIGhlYWRlciB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRIVFRQSEVBREVSIj5DVVJMT1BUX0hUVFBIRUFERVI8L2E+IGFzIHVzdWFsLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHlvdSB1c2UgUFVUIHRvIGEgSFRUUCAxLjEgc2VydmVyLCB5b3UgY2FuIHVwbG9hZCBkYXRhIHdpdGhvdXQga25vd2luZyB0aGUgc2l6ZSBiZWZvcmUgc3RhcnRpbmcgdGhlIHRyYW5zZmVyIGlmIHlvdSB1c2UgY2h1bmtlZCBlbmNvZGluZy4gWW91IGVuYWJsZSB0aGlzIGJ5IGFkZGluZyBhIGhlYWRlciBsaWtlICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUSFRUUEhFQURFUiI+Q1VSTE9QVF9IVFRQSEVBREVSPC9hPi4gV2l0aCBIVFRQIDEuMCBvciB3aXRob3V0IGNodW5rZWQgdHJhbnNmZXIsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIHNpemUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVE1BWEZJTEVTSVpFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfTUFYRklMRVNJWkU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcgYXMgcGFyYW1ldGVyLiBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBzaXplIChpbiBieXRlcykgb2YgYSBmaWxlIHRvIGRvd25sb2FkLiBJZiB0aGUgZmlsZSByZXF1ZXN0ZWQgaXMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZSwgdGhlIHRyYW5zZmVyIHdpbGwgbm90IHN0YXJ0IGFuZCBDVVJMRV9GSUxFU0laRV9FWENFRURFRCB3aWxsIGJlIHJldHVybmVkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBmaWxlIHNpemUgaXMgbm90IGFsd2F5cyBrbm93biBwcmlvciB0byBkb3dubG9hZCwgYW5kIGZvciBzdWNoIGZpbGVzIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgZXZlbiBpZiB0aGUgZmlsZSB0cmFuc2ZlciBlbmRzIHVwIGJlaW5nIGxhcmdlciB0aGFuIHRoaXMgZ2l2ZW4gbGltaXQuIFRoaXMgY29uY2VybnMgYm90aCBGVFAgYW5kIEhUVFAgdHJhbnNmZXJzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRNQVhGSUxFU0laRUxBUkdFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfTUFYRklMRVNJWkVfTEFSR0U8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGN1cmxfb2ZmX3QgYXMgcGFyYW1ldGVyLiBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBzaXplIChpbiBieXRlcykgb2YgYSBmaWxlIHRvIGRvd25sb2FkLiBJZiB0aGUgZmlsZSByZXF1ZXN0ZWQgaXMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZSwgdGhlIHRyYW5zZmVyIHdpbGwgbm90IHN0YXJ0IGFuZCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxFX0ZJTEVTSVpFX0VYQ0VFREVEPC9zcGFuPiB3aWxsIGJlIHJldHVybmVkLiAoQWRkZWQgaW4gNy4xMS4wKSAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBmaWxlIHNpemUgaXMgbm90IGFsd2F5cyBrbm93biBwcmlvciB0byBkb3dubG9hZCwgYW5kIGZvciBzdWNoIGZpbGVzIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgZXZlbiBpZiB0aGUgZmlsZSB0cmFuc2ZlciBlbmRzIHVwIGJlaW5nIGxhcmdlciB0aGFuIHRoaXMgZ2l2ZW4gbGltaXQuIFRoaXMgY29uY2VybnMgYm90aCBGVFAgYW5kIEhUVFAgdHJhbnNmZXJzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRUSU1FQ09ORElUSU9OIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfVElNRUNPTkRJVElPTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZyBhcyBwYXJhbWV0ZXIuIFRoaXMgZGVmaW5lcyBob3cgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRUSU1FVkFMVUUiPkNVUkxPUFRfVElNRVZBTFVFPC9hPiB0aW1lIHZhbHVlIGlzIHRyZWF0ZWQuIFlvdSBjYW4gc2V0IHRoaXMgcGFyYW1ldGVyIHRvIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTF9USU1FQ09ORF9JRk1PRFNJTkNFPC9zcGFuPiBvciA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxfVElNRUNPTkRfSUZVTk1PRFNJTkNFPC9zcGFuPi4gVGhpcyBmZWF0dXJlIGFwcGxpZXMgdG8gSFRUUCwgRlRQLCBSVFNQLCBhbmQgRklMRS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgbGFzdCBtb2RpZmljYXRpb24gdGltZSBvZiBhIGZpbGUgaXMgbm90IGFsd2F5cyBrbm93biBhbmQgaW4gc3VjaCBpbnN0YW5jZXMgdGhpcyBmZWF0dXJlIHdpbGwgaGF2ZSBubyBlZmZlY3QgZXZlbiBpZiB0aGUgZ2l2ZW4gdGltZSBjb25kaXRpb24gd291bGQgbm90IGhhdmUgYmVlbiBtZXQuIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfZ2V0aW5mby5odG1sIj5jdXJsX2Vhc3lfZ2V0aW5mbygzKTwvYT4gd2l0aCB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMSU5GT19DT05ESVRJT05fVU5NRVQ8L3NwYW4+IG9wdGlvbiBjYW4gYmUgdXNlZCBhZnRlciBhIHRyYW5zZmVyIHRvIGxlYXJuIGlmIGEgemVyby1ieXRlIHN1Y2Nlc3NmdWwgInRyYW5zZmVyIiB3YXMgZHVlIHRvIHRoaXMgY29uZGl0aW9uIG5vdCBtYXRjaGluZy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUVElNRVZBTFVFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfVElNRVZBTFVFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIGFzIHBhcmFtZXRlci4gVGhpcyBzaG91bGQgYmUgdGhlIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSAxIEphbiAxOTcwLCBhbmQgdGhlIHRpbWUgd2lsbCBiZSB1c2VkIGluIGEgY29uZGl0aW9uIGFzIHNwZWNpZmllZCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRUSU1FQ09ORElUSU9OIj5DVVJMT1BUX1RJTUVDT05ESVRJT048L2E+LiA8YSBuYW1lPSJDT05ORUNUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5DT05ORUNUSU9OIE9QVElPTlM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUVElNRU9VVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1RJTUVPVVQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcgYXMgcGFyYW1ldGVyIGNvbnRhaW5pbmcgdGhlIG1heGltdW0gdGltZSBpbiBzZWNvbmRzIHRoYXQgeW91IGFsbG93IHRoZSBsaWJjdXJsIHRyYW5zZmVyIG9wZXJhdGlvbiB0byB0YWtlLiBOb3JtYWxseSwgbmFtZSBsb29rdXBzIGNhbiB0YWtlIGEgY29uc2lkZXJhYmxlIHRpbWUgYW5kIGxpbWl0aW5nIG9wZXJhdGlvbnMgdG8gbGVzcyB0aGFuIGEgZmV3IG1pbnV0ZXMgcmlzayBhYm9ydGluZyBwZXJmZWN0bHkgbm9ybWFsIG9wZXJhdGlvbnMuIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgY3VybCB0byB1c2UgdGhlIFNJR0FMUk0gdG8gZW5hYmxlIHRpbWUtb3V0aW5nIHN5c3RlbSBjYWxscy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JbiB1bml4LWxpa2Ugc3lzdGVtcywgdGhpcyBtaWdodCBjYXVzZSBzaWduYWxzIHRvIGJlIHVzZWQgdW5sZXNzIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFROT1NJR05BTCI+Q1VSTE9QVF9OT1NJR05BTDwvYT4gaXMgc2V0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRUSU1FT1VUTVMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9USU1FT1VUX01TPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkxpa2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFRJTUVPVVQiPkNVUkxPUFRfVElNRU9VVDwvYT4gYnV0IHRha2VzIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW5zdGVhZC4gSWYgbGliY3VybCBpcyBidWlsdCB0byB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBuYW1lIHJlc29sdmVyLCB0aGF0IHBvcnRpb24gb2YgdGhlIHRyYW5zZmVyIHdpbGwgc3RpbGwgdXNlIGZ1bGwtc2Vjb25kIHJlc29sdXRpb24gZm9yIHRpbWVvdXRzIHdpdGggYSBtaW5pbXVtIHRpbWVvdXQgYWxsb3dlZCBvZiBvbmUgc2Vjb25kLiAoQWRkZWQgaW4gNy4xNi4yKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRMT1dTUEVFRExJTUlUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfTE9XX1NQRUVEX0xJTUlUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIGFzIHBhcmFtZXRlci4gSXQgY29udGFpbnMgdGhlIHRyYW5zZmVyIHNwZWVkIGluIGJ5dGVzIHBlciBzZWNvbmQgdGhhdCB0aGUgdHJhbnNmZXIgc2hvdWxkIGJlIGJlbG93IGR1cmluZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUTE9XU1BFRURUSU1FIj5DVVJMT1BUX0xPV19TUEVFRF9USU1FPC9hPiBzZWNvbmRzIGZvciB0aGUgbGlicmFyeSB0byBjb25zaWRlciBpdCB0b28gc2xvdyBhbmQgYWJvcnQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVExPV1NQRUVEVElNRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0xPV19TUEVFRF9USU1FPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIGFzIHBhcmFtZXRlci4gSXQgY29udGFpbnMgdGhlIHRpbWUgaW4gc2Vjb25kcyB0aGF0IHRoZSB0cmFuc2ZlciBzaG91bGQgYmUgYmVsb3cgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRMT1dTUEVFRExJTUlUIj5DVVJMT1BUX0xPV19TUEVFRF9MSU1JVDwvYT4gZm9yIHRoZSBsaWJyYXJ5IHRvIGNvbnNpZGVyIGl0IHRvbyBzbG93IGFuZCBhYm9ydC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUTUFYU0VORFNQRUVETEFSR0UiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9NQVhfU0VORF9TUEVFRF9MQVJHRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY3VybF9vZmZfdCBhcyBwYXJhbWV0ZXIuICBJZiBhbiB1cGxvYWQgZXhjZWVkcyB0aGlzIHNwZWVkIChjb3VudGVkIGluIGJ5dGVzIHBlciBzZWNvbmQpIG9uIGN1bXVsYXRpdmUgYXZlcmFnZSBkdXJpbmcgdGhlIHRyYW5zZmVyLCB0aGUgdHJhbnNmZXIgd2lsbCBwYXVzZSB0byBrZWVwIHRoZSBhdmVyYWdlIHJhdGUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwYXJhbWV0ZXIgdmFsdWUuIERlZmF1bHRzIHRvIHVubGltaXRlZCBzcGVlZC4gKEFkZGVkIGluIDcuMTUuNSkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUTUFYUkVDVlNQRUVETEFSR0UiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9NQVhfUkVDVl9TUEVFRF9MQVJHRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY3VybF9vZmZfdCBhcyBwYXJhbWV0ZXIuICBJZiBhIGRvd25sb2FkIGV4Y2VlZHMgdGhpcyBzcGVlZCAoY291bnRlZCBpbiBieXRlcyBwZXIgc2Vjb25kKSBvbiBjdW11bGF0aXZlIGF2ZXJhZ2UgZHVyaW5nIHRoZSB0cmFuc2ZlciwgdGhlIHRyYW5zZmVyIHdpbGwgcGF1c2UgdG8ga2VlcCB0aGUgYXZlcmFnZSByYXRlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGFyYW1ldGVyIHZhbHVlLiBEZWZhdWx0cyB0byB1bmxpbWl0ZWQgc3BlZWQuIChBZGRlZCBpbiA3LjE1LjUpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVE1BWENPTk5FQ1RTIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfTUFYQ09OTkVDVFM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcuIFRoZSBzZXQgbnVtYmVyIHdpbGwgYmUgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBjYWNoZSBzaXplLiBUaGUgc2V0IGFtb3VudCB3aWxsIGJlIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBzaW11bHRhbmVvdXNseSBvcGVuIGNvbm5lY3Rpb25zIHRoYXQgbGliY3VybCBtYXkgY2FjaGUgaW4gdGhpcyBlYXN5IGhhbmRsZS4gRGVmYXVsdCBpcyA1LCBhbmQgdGhlcmUgaXNuJ3QgbXVjaCBwb2ludCBpbiBjaGFuZ2luZyB0aGlzIHZhbHVlIHVubGVzcyB5b3UgYXJlIHBlcmZlY3RseSBhd2FyZSBvZiBob3cgdGhpcyB3b3JrcyBhbmQgY2hhbmdlcyBsaWJjdXJsJ3MgYmVoYXZpb3VyLiBUaGlzIGNvbmNlcm5zIGNvbm5lY3Rpb25zIHVzaW5nIGFueSBvZiB0aGUgcHJvdG9jb2xzIHRoYXQgc3VwcG9ydCBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gcmVhY2hpbmcgdGhlIG1heGltdW0gbGltaXQsIGN1cmwgY2xvc2VzIHRoZSBvbGRlc3Qgb25lIGluIHRoZSBjYWNoZSB0byBwcmV2ZW50IGluY3JlYXNpbmcgdGhlIG51bWJlciBvZiBvcGVuIGNvbm5lY3Rpb25zLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHlvdSBhbHJlYWR5IGhhdmUgcGVyZm9ybWVkIHRyYW5zZmVycyB3aXRoIHRoaXMgY3VybCBoYW5kbGUsIHNldHRpbmcgYSBzbWFsbGVyIE1BWENPTk5FQ1RTIHRoYW4gYmVmb3JlIG1heSBjYXVzZSBvcGVuIGNvbm5lY3Rpb25zIHRvIGdldCBjbG9zZWQgdW5uZWNlc3NhcmlseS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3UgYWRkIHRoaXMgZWFzeSBoYW5kbGUgdG8gYSBtdWx0aSBoYW5kbGUsIHRoaXMgc2V0dGluZyBpcyBub3QgYWNrbm93bGVkZ2VkLCBhbmQgeW91IG11c3QgaW5zdGVhZCB1c2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc2V0b3B0Lmh0bWwiPmN1cmxfbXVsdGlfc2V0b3B0KDMpPC9hPiBhbmQgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTE1PUFRfTUFYQ09OTkVDVFM8L3NwYW4+IG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUQ0xPU0VQT0xJQ1kiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DTE9TRVBPTElDWTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oT2Jzb2xldGUpIFRoaXMgb3B0aW9uIGRvZXMgbm90aGluZy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BURlJFU0hDT05ORUNUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfRlJFU0hfQ09OTkVDVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZy4gU2V0IHRvIDEgdG8gbWFrZSB0aGUgbmV4dCB0cmFuc2ZlciB1c2UgYSBuZXcgKGZyZXNoKSBjb25uZWN0aW9uIGJ5IGZvcmNlLiBJZiB0aGUgY29ubmVjdGlvbiBjYWNoZSBpcyBmdWxsIGJlZm9yZSB0aGlzIGNvbm5lY3Rpb24sIG9uZSBvZiB0aGUgZXhpc3RpbmcgY29ubmVjdGlvbnMgd2lsbCBiZSBjbG9zZWQgYXMgYWNjb3JkaW5nIHRvIHRoZSBzZWxlY3RlZCBvciBkZWZhdWx0IHBvbGljeS4gVGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uIGFuZCBvbmx5IGlmIHlvdSB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcy4gU2V0IHRoaXMgdG8gMCB0byBoYXZlIGxpYmN1cmwgYXR0ZW1wdCByZS11c2luZyBhbiBleGlzdGluZyBjb25uZWN0aW9uIChkZWZhdWx0IGJlaGF2aW9yKS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BURk9SQklEUkVVU0UiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9GT1JCSURfUkVVU0U8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcuIFNldCB0byAxIHRvIG1ha2UgdGhlIG5leHQgdHJhbnNmZXIgZXhwbGljaXRseSBjbG9zZSB0aGUgY29ubmVjdGlvbiB3aGVuIGRvbmUuIE5vcm1hbGx5LCBsaWJjdXJsIGtlZXBzIGFsbCBjb25uZWN0aW9ucyBhbGl2ZSB3aGVuIGRvbmUgd2l0aCBvbmUgdHJhbnNmZXIgaW4gY2FzZSBhIHN1Y2NlZWRpbmcgb25lIGZvbGxvd3MgdGhhdCBjYW4gcmUtdXNlIHRoZW0uIFRoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbiBhbmQgb25seSBpZiB5b3UgdW5kZXJzdGFuZCB3aGF0IGl0IGRvZXMuIFNldCB0byAwIHRvIGhhdmUgbGliY3VybCBrZWVwIHRoZSBjb25uZWN0aW9uIG9wZW4gZm9yIHBvc3NpYmxlIGxhdGVyIHJlLXVzZSAoZGVmYXVsdCBiZWhhdmlvcikuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVENPTk5FQ1RUSU1FT1VUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfQ09OTkVDVFRJTUVPVVQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcuIEl0IHNob3VsZCBjb250YWluIHRoZSBtYXhpbXVtIHRpbWUgaW4gc2Vjb25kcyB0aGF0IHlvdSBhbGxvdyB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIHRvIHRha2UuICBUaGlzIG9ubHkgbGltaXRzIHRoZSBjb25uZWN0aW9uIHBoYXNlLCBvbmNlIGl0IGhhcyBjb25uZWN0ZWQsIHRoaXMgb3B0aW9uIGlzIG9mIG5vIG1vcmUgdXNlLiBTZXQgdG8gemVybyB0byBzd2l0Y2ggdG8gdGhlIGRlZmF1bHQgYnVpbHQtaW4gY29ubmVjdGlvbiB0aW1lb3V0IC0gMzAwIHNlY29uZHMuIFNlZSBhbHNvIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUVElNRU9VVCI+Q1VSTE9QVF9USU1FT1VUPC9hPiBvcHRpb24uIAorPHAgY2xhc3M9ImxldmVsMSI+SW4gdW5peC1saWtlIHN5c3RlbXMsIHRoaXMgbWlnaHQgY2F1c2Ugc2lnbmFscyB0byBiZSB1c2VkIHVubGVzcyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUTk9TSUdOQUwiPkNVUkxPUFRfTk9TSUdOQUw8L2E+IGlzIHNldC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUQ09OTkVDVFRJTUVPVVRNUyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0NPTk5FQ1RUSU1FT1VUX01TPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkxpa2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVENPTk5FQ1RUSU1FT1VUIj5DVVJMT1BUX0NPTk5FQ1RUSU1FT1VUPC9hPiBidXQgdGFrZXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW5zdGVhZC4gSWYgbGliY3VybCBpcyBidWlsdCB0byB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBuYW1lIHJlc29sdmVyLCB0aGF0IHBvcnRpb24gb2YgdGhlIGNvbm5lY3Qgd2lsbCBzdGlsbCB1c2UgZnVsbC1zZWNvbmQgcmVzb2x1dGlvbiBmb3IgdGltZW91dHMgd2l0aCBhIG1pbmltdW0gdGltZW91dCBhbGxvd2VkIG9mIG9uZSBzZWNvbmQuIChBZGRlZCBpbiA3LjE2LjIpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVElQUkVTT0xWRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0lQUkVTT0xWRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gc2VsZWN0IHdoYXQga2luZCBvZiBJUCBhZGRyZXNzZXMgdG8gdXNlIHdoZW4gcmVzb2x2aW5nIGhvc3QgbmFtZXMuIFRoaXMgaXMgb25seSBpbnRlcmVzdGluZyB3aGVuIHVzaW5nIGhvc3QgbmFtZXMgdGhhdCByZXNvbHZlIGFkZHJlc3NlcyB1c2luZyBtb3JlIHRoYW4gb25lIHZlcnNpb24gb2YgSVAuIFRoZSBhbGxvd2VkIHZhbHVlcyBhcmU6IAorPHAgY2xhc3M9ImxldmVsMiI+Cis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMSVBSRVNPTFZFV0hBVEVWRVIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9JUFJFU09MVkVfV0hBVEVWRVI8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+RGVmYXVsdCwgcmVzb2x2ZXMgYWRkcmVzc2VzIHRvIGFsbCBJUCB2ZXJzaW9ucyB0aGF0IHlvdXIgc3lzdGVtIGFsbG93cy4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMSVBSRVNPTFZFVjQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9JUFJFU09MVkVfVjQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+UmVzb2x2ZSB0byBJUHY0IGFkZHJlc3Nlcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMSVBSRVNPTFZFVjYiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9JUFJFU09MVkVfVjY8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+UmVzb2x2ZSB0byBJUHY2IGFkZHJlc3Nlcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRDT05ORUNUT05MWSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0NPTk5FQ1RfT05MWTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZy4gSWYgdGhlIHBhcmFtZXRlciBlcXVhbHMgMSwgaXQgdGVsbHMgdGhlIGxpYnJhcnkgdG8gcGVyZm9ybSBhbGwgdGhlIHJlcXVpcmVkIHByb3h5IGF1dGhlbnRpY2F0aW9uIGFuZCBjb25uZWN0aW9uIHNldHVwLCBidXQgbm8gZGF0YSB0cmFuc2Zlci4gVGhpcyBvcHRpb24gaXMgdXNlZnVsIG9ubHkgb24gSFRUUCBVUkxzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aXRoIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxJTkZPX0xBU1RTT0NLRVQ8L3NwYW4+IG9wdGlvbiB0byA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X2dldGluZm8uaHRtbCI+Y3VybF9lYXN5X2dldGluZm8oMyk8L2E+LiBUaGUgbGlicmFyeSBjYW4gc2V0IHVwIHRoZSBjb25uZWN0aW9uIGFuZCB0aGVuIHRoZSBhcHBsaWNhdGlvbiBjYW4gb2J0YWluIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgc29ja2V0IGZvciBzcGVjaWFsIGRhdGEgdHJhbnNmZXJzLiAoQWRkZWQgaW4gNy4xNS4yKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRVU0VTU0wiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9VU0VfU1NMPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIHVzaW5nIG9uZSBvZiB0aGUgdmFsdWVzIGZyb20gYmVsb3csIHRvIG1ha2UgbGliY3VybCB1c2UgeW91ciBkZXNpcmVkIGxldmVsIG9mIFNTTCBmb3IgdGhlIHRyYW5zZmVyLiAoQWRkZWQgaW4gNy4xMS4wKSAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgaXMgZm9yIGVuYWJsaW5nIFNTTC9UTFMgd2hlbiB5b3UgdXNlIEZUUCwgU01UUCwgUE9QMywgSU1BUCBldGMuIAorPHAgY2xhc3M9ImxldmVsMSI+KFRoaXMgb3B0aW9uIHdhcyBrbm93biBhcyBDVVJMT1BUX0ZUUF9TU0wgdXAgdG8gNy4xNi40LCBhbmQgdGhlIGNvbnN0YW50cyB3ZXJlIGtub3duIGFzIENVUkxGVFBTU0xfKikgCis8cCBjbGFzcz0ibGV2ZWwyIj4KKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxVU0VTU0xOT05FIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxVU0VTU0xfTk9ORTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5Eb24ndCBhdHRlbXB0IHRvIHVzZSBTU0wuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTFVTRVNTTFRSWSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMVVNFU1NMX1RSWTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UcnkgdXNpbmcgU1NMLCBwcm9jZWVkIGFzIG5vcm1hbCBvdGhlcndpc2UuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTFVTRVNTTENPTlRST0wiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTFVTRVNTTF9DT05UUk9MPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlJlcXVpcmUgU1NMIGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uIG9yIGZhaWwgd2l0aCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxFX1VTRV9TU0xfRkFJTEVEPC9zcGFuPi4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMVVNFU1NMQUxMIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxVU0VTU0xfQUxMPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlJlcXVpcmUgU1NMIGZvciBhbGwgY29tbXVuaWNhdGlvbiBvciBmYWlsIHdpdGggPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMRV9VU0VfU1NMX0ZBSUxFRDwvc3Bhbj4uIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUUkVTT0xWRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1JFU09MVkU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSBsaW5rZWQgbGlzdCBvZiBzdHJpbmdzIHdpdGggaG9zdCBuYW1lIHJlc29sdmUgaW5mb3JtYXRpb24gdG8gdXNlIGZvciByZXF1ZXN0cyB3aXRoIHRoaXMgaGFuZGxlLiBUaGUgbGlua2VkIGxpc3Qgc2hvdWxkIGJlIGEgZnVsbHkgdmFsaWQgbGlzdCBvZiA8c3BhbiBDbGFzcz0iYm9sZCI+c3RydWN0IGN1cmxfc2xpc3Q8L3NwYW4+IHN0cnVjdHMgcHJvcGVybHkgZmlsbGVkIGluLiBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfc2xpc3RfYXBwZW5kLmh0bWwiPmN1cmxfc2xpc3RfYXBwZW5kKDMpPC9hPiB0byBjcmVhdGUgdGhlIGxpc3QgYW5kIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX3NsaXN0X2ZyZWVfYWxsLmh0bWwiPmN1cmxfc2xpc3RfZnJlZV9hbGwoMyk8L2E+IHRvIGNsZWFuIHVwIGFuIGVudGlyZSBsaXN0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPkVhY2ggc2luZ2xlIG5hbWUgcmVzb2x2ZSBzdHJpbmcgc2hvdWxkIGJlIHdyaXR0ZW4gdXNpbmcgdGhlIGZvcm1hdCBIT1NUOlBPUlQ6QUREUkVTUyB3aGVyZSBIT1NUIGlzIHRoZSBuYW1lIGxpYmN1cmwgd2lsbCB0cnkgdG8gcmVzb2x2ZSwgUE9SVCBpcyB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZpY2Ugd2hlcmUgbGliY3VybCB3YW50cyB0byBjb25uZWN0IHRvIHRoZSBIT1NUIGFuZCBBRERSRVNTIGlzIHRoZSBudW1lcmljYWwgSVAgYWRkcmVzcy4gSWYgbGliY3VybCBpcyBidWlsdCB0byBzdXBwb3J0IElQdjYsIEFERFJFU1MgY2FuIG9mIGNvdXJzZSBiZSBlaXRoZXIgSVB2NCBvciBJUHY2IHN0eWxlIGFkZHJlc3NpbmcuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gZWZmZWN0aXZlbHkgcHJlLXBvcHVsYXRlcyB0aGUgRE5TIGNhY2hlIHdpdGggZW50cmllcyBmb3IgdGhlIGhvc3QrcG9ydCBwYWlyIHNvIHJlZGlyZWN0cyBhbmQgZXZlcnl0aGluZyB0aGF0IG9wZXJhdGlvbnMgYWdhaW5zdCB0aGUgSE9TVCtQT1JUIHdpbGwgaW5zdGVhZCB1c2UgeW91ciBwcm92aWRlZCBBRERSRVNTLiAKKzxwIGNsYXNzPSJsZXZlbDEiPllvdSBjYW4gcmVtb3ZlIG5hbWVzIGZyb20gdGhlIEROUyBjYWNoZSBhZ2FpbiwgdG8gc3RvcCBwcm92aWRpbmcgdGhlc2UgZmFrZSByZXNvbHZlcywgYnkgaW5jbHVkaW5nIGEgc3RyaW5nIGluIHRoZSBsaW5rZWQgbGlzdCB0aGF0IHVzZXMgdGhlIGZvcm1hdCAiLUhPU1Q6UE9SVCIuIFRoZSBob3N0IG5hbWUgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIGEgZGFzaCwgYW5kIHRoZSBob3N0IG5hbWUgYW5kIHBvcnQgbnVtYmVyIG11c3QgZXhhY3RseSBtYXRjaCB3aGF0IHdhcyBhbHJlYWR5IGFkZGVkIHByZXZpb3VzbHkuIAorPHAgY2xhc3M9ImxldmVsMSI+KEFkZGVkIGluIDcuMjEuMykgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BURE5TU0VSVkVSUyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0ROU19TRVJWRVJTPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldCB0aGUgbGlzdCBvZiBETlMgc2VydmVycyB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHN5c3RlbSBkZWZhdWx0LiBUaGUgZm9ybWF0IG9mIHRoZSBkbnMgc2VydmVycyBvcHRpb24gaXM6IAorPHAgY2xhc3M9ImxldmVsMSI+aG9zdFs6cG9ydF1bLGhvc3RbOnBvcnRdXS4uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZvciBleGFtcGxlOiAKKzxwIGNsYXNzPSJsZXZlbDEiPjE5Mi4xNjguMS4xMDAsMTkyLjE2OC4xLjEwMSwzLjQuNS42IAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gcmVxdWlyZXMgdGhhdCBsaWJjdXJsIHdhcyBidWlsdCB3aXRoIGEgcmVzb2x2ZXIgYmFja2VuZCB0aGF0IHN1cHBvcnRzIHRoaXMgb3BlcmF0aW9uLiBUaGUgYy1hcmVzIGJhY2tlbmQgaXMgdGhlIG9ubHkgc3VjaCBvbmUuIAorPHAgY2xhc3M9ImxldmVsMSI+KEFkZGVkIGluIDcuMjQuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUQUNDRVBUVElNRU9VVE1TIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfQUNDRVBUVElNRU9VVF9NUzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZyB0ZWxsaW5nIGxpYmN1cmwgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciBhIHNlcnZlciB0byBjb25uZWN0IGJhY2sgdG8gbGliY3VybCB3aGVuIGFuIGFjdGl2ZSBGVFAgY29ubmVjdGlvbiBpcyB1c2VkLiBJZiBubyB0aW1lb3V0IGlzIHNldCwgdGhlIGludGVybmFsIGRlZmF1bHQgb2YgNjAwMDAgd2lsbCBiZSB1c2VkLiAoQWRkZWQgaW4gNy4yNC4wKSA8YSBuYW1lPSJTU0wiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNTTCBhbmQgU0VDVVJJVFkgT1BUSU9OUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRTU0xDRVJUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfU1NMQ0VSVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgYXMgcGFyYW1ldGVyLiBUaGUgc3RyaW5nIHNob3VsZCBiZSB0aGUgZmlsZSBuYW1lIG9mIHlvdXIgY2VydGlmaWNhdGUuIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAiUEVNIiBhbmQgY2FuIGJlIGNoYW5nZWQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUU1NMQ0VSVFRZUEUiPkNVUkxPUFRfU1NMQ0VSVFRZUEU8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDEiPldpdGggTlNTIHRoaXMgY2FuIGFsc28gYmUgdGhlIG5pY2tuYW1lIG9mIHRoZSBjZXJ0aWZpY2F0ZSB5b3Ugd2lzaCB0byBhdXRoZW50aWNhdGUgd2l0aC4gSWYgeW91IHdhbnQgdG8gdXNlIGEgZmlsZSBmcm9tIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgcGxlYXNlIHByZWNlZGUgaXQgd2l0aCAiLi8iIHByZWZpeCwgaW4gb3JkZXIgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggYSBuaWNrbmFtZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUU1NMQ0VSVFRZUEUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9TU0xDRVJUVFlQRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgYXMgcGFyYW1ldGVyLiBUaGUgc3RyaW5nIHNob3VsZCBiZSB0aGUgZm9ybWF0IG9mIHlvdXIgY2VydGlmaWNhdGUuIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSAiUEVNIiBhbmQgIkRFUiIuICAoQWRkZWQgaW4gNy45LjMpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFNTTEtFWSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NTTEtFWTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgYXMgcGFyYW1ldGVyLiBUaGUgc3RyaW5nIHNob3VsZCBiZSB0aGUgZmlsZSBuYW1lIG9mIHlvdXIgcHJpdmF0ZSBrZXkuIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAiUEVNIiBhbmQgY2FuIGJlIGNoYW5nZWQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUU1NMS0VZVFlQRSI+Q1VSTE9QVF9TU0xLRVlUWVBFPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUU1NMS0VZVFlQRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NTTEtFWVRZUEU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGFzIHBhcmFtZXRlci4gVGhlIHN0cmluZyBzaG91bGQgYmUgdGhlIGZvcm1hdCBvZiB5b3VyIHByaXZhdGUga2V5LiBTdXBwb3J0ZWQgZm9ybWF0cyBhcmUgIlBFTSIsICJERVIiIGFuZCAiRU5HIi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgZm9ybWF0ICJFTkciIGVuYWJsZXMgeW91IHRvIGxvYWQgdGhlIHByaXZhdGUga2V5IGZyb20gYSBjcnlwdG8gZW5naW5lLiBJbiB0aGlzIGNhc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFNTTEtFWSI+Q1VSTE9QVF9TU0xLRVk8L2E+IGlzIHVzZWQgYXMgYW4gaWRlbnRpZmllciBwYXNzZWQgdG8gdGhlIGVuZ2luZS4gWW91IGhhdmUgdG8gc2V0IHRoZSBjcnlwdG8gZW5naW5lIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFNTTEVOR0lORSI+Q1VSTE9QVF9TU0xFTkdJTkU8L2E+LiAiREVSIiBmb3JtYXQga2V5IGZpbGUgY3VycmVudGx5IGRvZXMgbm90IHdvcmsgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBPcGVuU1NMLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRLRVlQQVNTV0QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9LRVlQQVNTV0Q8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGFzIHBhcmFtZXRlci4gSXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBwYXNzd29yZCByZXF1aXJlZCB0byB1c2UgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRTU0xLRVkiPkNVUkxPUFRfU1NMS0VZPC9hPiBvciA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUU1NIUFJJVkFURUtFWUZJTEUiPkNVUkxPUFRfU1NIX1BSSVZBVEVfS0VZRklMRTwvYT4gcHJpdmF0ZSBrZXkuIFlvdSBuZXZlciBuZWVkZWQgYSBwYXNzIHBocmFzZSB0byBsb2FkIGEgY2VydGlmaWNhdGUgYnV0IHlvdSBuZWVkIG9uZSB0byBsb2FkIHlvdXIgcHJpdmF0ZSBrZXkuIAorPHAgY2xhc3M9ImxldmVsMSI+KFRoaXMgb3B0aW9uIHdhcyBrbm93biBhcyBDVVJMT1BUX1NTTEtFWVBBU1NXRCB1cCB0byA3LjE2LjQgYW5kIENVUkxPUFRfU1NMQ0VSVFBBU1NXRCB1cCB0byA3LjkuMikgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUU1NMRU5HSU5FIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfU1NMRU5HSU5FPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIEl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaWRlbnRpZmllciBmb3IgdGhlIGNyeXB0byBlbmdpbmUgeW91IHdhbnQgdG8gdXNlIGZvciB5b3VyIHByaXZhdGUga2V5LiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoZSBjcnlwdG8gZGV2aWNlIGNhbm5vdCBiZSBsb2FkZWQsIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTEVfU1NMX0VOR0lORV9OT1RGT1VORDwvc3Bhbj4gaXMgcmV0dXJuZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFNTTEVOR0lORURFRkFVTFQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9TU0xFTkdJTkVfREVGQVVMVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TZXRzIHRoZSBhY3R1YWwgY3J5cHRvIGVuZ2luZSBhcyB0aGUgZGVmYXVsdCBmb3IgKGFzeW1tZXRyaWMpIGNyeXB0byBvcGVyYXRpb25zLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHRoZSBjcnlwdG8gZGV2aWNlIGNhbm5vdCBiZSBzZXQsIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTEVfU1NMX0VOR0lORV9TRVRGQUlMRUQ8L3NwYW4+IGlzIHJldHVybmVkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkV2ZW4gdGhvdWdoIHRoaXMgb3B0aW9uIGRvZXNuJ3QgbmVlZCBhbnkgcGFyYW1ldGVyLCBpbiBzb21lIGNvbmZpZ3VyYXRpb25zIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9lYXN5X3NldG9wdDwvc3Bhbj4gbWlnaHQgYmUgZGVmaW5lZCBhcyBhIG1hY3JvIHRha2luZyBleGFjdGx5IHRocmVlIGFyZ3VtZW50cy4gVGhlcmVmb3JlLCBpdCdzIHJlY29tbWVuZGVkIHRvIHBhc3MgMSBhcyBwYXJhbWV0ZXIgdG8gdGhpcyBvcHRpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFNTTFZFUlNJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9TU0xWRVJTSU9OPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIGFzIHBhcmFtZXRlciB0byBjb250cm9sIHdoYXQgdmVyc2lvbiBvZiBTU0wvVExTIHRvIGF0dGVtcHQgdG8gdXNlLiBUaGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOiAKKzxwIGNsYXNzPSJsZXZlbDIiPgorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTFNTTFZFUlNJT05ERUZBVUxUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfU1NMVkVSU0lPTl9ERUZBVUxUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRoZSBkZWZhdWx0IGFjdGlvbi4gVGhpcyB3aWxsIGF0dGVtcHQgdG8gZmlndXJlIG91dCB0aGUgcmVtb3RlIFNTTCBwcm90b2NvbCB2ZXJzaW9uLCBpLmUuIGVpdGhlciBTU0x2MyBvciBUTFN2MSAoYnV0IG5vdCBTU0x2Miwgd2hpY2ggYmVjYW1lIGRpc2FibGVkIGJ5IGRlZmF1bHQgd2l0aCA3LjE4LjEpLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxTU0xWRVJTSU9OVExTdjEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9TU0xWRVJTSU9OX1RMU3YxPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPkZvcmNlIFRMU3YxIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iQ1VSTFNTTFZFUlNJT05TU0x2MiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1NTTFZFUlNJT05fU1NMdjI8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+Rm9yY2UgU1NMdjIgCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMU1NMVkVSU0lPTlNTTHYzIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfU1NMVkVSU0lPTl9TU0x2Mzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5Gb3JjZSBTU0x2MyAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFNTTFZFUklGWVBFRVIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9TU0xfVkVSSUZZUEVFUjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZyBhcyBwYXJhbWV0ZXIuIEJ5IGRlZmF1bHQsIGN1cmwgYXNzdW1lcyBhIHZhbHVlIG9mIDEuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIGN1cmwgdmVyaWZpZXMgdGhlIGF1dGhlbnRpY2l0eSBvZiB0aGUgcGVlcidzIGNlcnRpZmljYXRlLiBBIHZhbHVlIG9mIDEgbWVhbnMgY3VybCB2ZXJpZmllczsgMCAoemVybykgbWVhbnMgaXQgZG9lc24ndC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIG5lZ290aWF0aW5nIGEgU1NMIGNvbm5lY3Rpb24sIHRoZSBzZXJ2ZXIgc2VuZHMgYSBjZXJ0aWZpY2F0ZSBpbmRpY2F0aW5nIGl0cyBpZGVudGl0eS4gIEN1cmwgdmVyaWZpZXMgd2hldGhlciB0aGUgY2VydGlmaWNhdGUgaXMgYXV0aGVudGljLCBpLmUuIHRoYXQgeW91IGNhbiB0cnVzdCB0aGF0IHRoZSBzZXJ2ZXIgaXMgd2hvIHRoZSBjZXJ0aWZpY2F0ZSBzYXlzIGl0IGlzLiAgVGhpcyB0cnVzdCBpcyBiYXNlZCBvbiBhIGNoYWluIG9mIGRpZ2l0YWwgc2lnbmF0dXJlcywgcm9vdGVkIGluIGNlcnRpZmljYXRpb24gYXV0aG9yaXR5IChDQSkgY2VydGlmaWNhdGVzIHlvdSBzdXBwbHkuICBjdXJsIHVzZXMgYSBkZWZhdWx0IGJ1bmRsZSBvZiBDQSBjZXJ0aWZpY2F0ZXMgKHRoZSBwYXRoIGZvciB0aGF0IGlzIGRldGVybWluZWQgYXQgYnVpbGQgdGltZSkgYW5kIHlvdSBjYW4gc3BlY2lmeSBhbHRlcm5hdGUgY2VydGlmaWNhdGVzIHdpdGggdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRDQUlORk8iPkNVUkxPUFRfQ0FJTkZPPC9hPiBvcHRpb24gb3IgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRDQVBBVEgiPkNVUkxPUFRfQ0FQQVRIPC9hPiBvcHRpb24uIAorPHAgY2xhc3M9ImxldmVsMSI+V2hlbiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUU1NMVkVSSUZZUEVFUiI+Q1VSTE9QVF9TU0xfVkVSSUZZUEVFUjwvYT4gaXMgbm9uemVybywgYW5kIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMgdG8gcHJvdmUgdGhhdCB0aGUgY2VydGlmaWNhdGUgaXMgYXV0aGVudGljLCB0aGUgY29ubmVjdGlvbiBmYWlscy4gIFdoZW4gdGhlIG9wdGlvbiBpcyB6ZXJvLCB0aGUgcGVlciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gc3VjY2VlZHMgcmVnYXJkbGVzcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BdXRoZW50aWNhdGluZyB0aGUgY2VydGlmaWNhdGUgaXMgbm90IGJ5IGl0c2VsZiB2ZXJ5IHVzZWZ1bC4gIFlvdSB0eXBpY2FsbHkgd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgc2VydmVyLCBhcyBhdXRoZW50aWNhbGx5IGlkZW50aWZpZWQgYnkgaXRzIGNlcnRpZmljYXRlLCBpcyB0aGUgc2VydmVyIHlvdSBtZWFuIHRvIGJlIHRhbGtpbmcgdG8uICBVc2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFNTTFZFUklGWUhPU1QiPkNVUkxPUFRfU1NMX1ZFUklGWUhPU1Q8L2E+IHRvIGNvbnRyb2wgdGhhdC4gVGhlIGNoZWNrIHRoYXQgdGhlIGhvc3QgbmFtZSBpbiB0aGUgY2VydGlmaWNhdGUgaXMgdmFsaWQgZm9yIHRoZSBob3N0IG5hbWUgeW91J3JlIGNvbm5lY3RpbmcgdG8gaXMgZG9uZSBpbmRlcGVuZGVudGx5IG9mIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUU1NMVkVSSUZZUEVFUiI+Q1VSTE9QVF9TU0xfVkVSSUZZUEVFUjwvYT4gb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRDQUlORk8iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DQUlORk88L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGNoYXIgKiB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgbmFtaW5nIGEgZmlsZSBob2xkaW5nIG9uZSBvciBtb3JlIGNlcnRpZmljYXRlcyB0byB2ZXJpZnkgdGhlIHBlZXIgd2l0aC4gIFRoaXMgbWFrZXMgc2Vuc2Ugb25seSB3aGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFNTTFZFUklGWVBFRVIiPkNVUkxPUFRfU1NMX1ZFUklGWVBFRVI8L2E+IG9wdGlvbi4gIElmIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRTU0xWRVJJRllQRUVSIj5DVVJMT1BUX1NTTF9WRVJJRllQRUVSPC9hPiBpcyB6ZXJvLCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUQ0FJTkZPIj5DVVJMT1BUX0NBSU5GTzwvYT4gbmVlZCBub3QgZXZlbiBpbmRpY2F0ZSBhbiBhY2Nlc3NpYmxlIGZpbGUuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gaXMgYnkgZGVmYXVsdCBzZXQgdG8gdGhlIHN5c3RlbSBwYXRoIHdoZXJlIGxpYmN1cmwncyBjYWNlcnQgYnVuZGxlIGlzIGFzc3VtZWQgdG8gYmUgc3RvcmVkLCBhcyBlc3RhYmxpc2hlZCBhdCBidWlsZCB0aW1lLiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gYnVpbHQgYWdhaW5zdCBOU1MsIHRoaXMgaXMgdGhlIGRpcmVjdG9yeSB0aGF0IHRoZSBOU1MgY2VydGlmaWNhdGUgZGF0YWJhc2UgcmVzaWRlcyBpbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUSVNTVUVSQ0VSVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0lTU1VFUkNFUlQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGNoYXIgKiB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgbmFtaW5nIGEgZmlsZSBob2xkaW5nIGEgQ0EgY2VydGlmaWNhdGUgaW4gUEVNIGZvcm1hdC4gSWYgdGhlIG9wdGlvbiBpcyBzZXQsIGFuIGFkZGl0aW9uYWwgY2hlY2sgYWdhaW5zdCB0aGUgcGVlciBjZXJ0aWZpY2F0ZSBpcyBwZXJmb3JtZWQgdG8gdmVyaWZ5IHRoZSBpc3N1ZXIgaXMgaW5kZWVkIHRoZSBvbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjZXJ0aWZpY2F0ZSBwcm92aWRlZCBieSB0aGUgb3B0aW9uLiBUaGlzIGFkZGl0aW9uYWwgY2hlY2sgaXMgdXNlZnVsIGluIG11bHRpLWxldmVsIFBLSSB3aGVyZSBvbmUgbmVlZHMgdG8gZW5mb3JjZSB0aGF0IHRoZSBwZWVyIGNlcnRpZmljYXRlIGlzIGZyb20gYSBzcGVjaWZpYyBicmFuY2ggb2YgdGhlIHRyZWUuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBvcHRpb24gbWFrZXMgc2Vuc2Ugb25seSB3aGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFNTTFZFUklGWVBFRVIiPkNVUkxPUFRfU1NMX1ZFUklGWVBFRVI8L2E+IG9wdGlvbi4gT3RoZXJ3aXNlLCB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjayBpcyBub3QgY29uc2lkZXJlZCBhcyBmYWlsdXJlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkEgc3BlY2lmaWMgZXJyb3IgY29kZSAoQ1VSTEVfU1NMX0lTU1VFUl9FUlJPUikgaXMgZGVmaW5lZCB3aXRoIHRoZSBvcHRpb24sIHdoaWNoIGlzIHJldHVybmVkIGlmIHRoZSBzZXR1cCBvZiB0aGUgU1NML1RMUyBzZXNzaW9uIGhhcyBmYWlsZWQgZHVlIHRvIGEgbWlzbWF0Y2ggd2l0aCB0aGUgaXNzdWVyIG9mIHBlZXIgY2VydGlmaWNhdGUgKDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRTU0xWRVJJRllQRUVSIj5DVVJMT1BUX1NTTF9WRVJJRllQRUVSPC9hPiBoYXMgdG8gYmUgc2V0IHRvbyBmb3IgdGhlIGNoZWNrIHRvIGZhaWwpLiAoQWRkZWQgaW4gNy4xOS4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRDQVBBVEgiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DQVBBVEg8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGNoYXIgKiB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgbmFtaW5nIGEgZGlyZWN0b3J5IGhvbGRpbmcgbXVsdGlwbGUgQ0EgY2VydGlmaWNhdGVzIHRvIHZlcmlmeSB0aGUgcGVlciB3aXRoLiBJZiBsaWJjdXJsIGlzIGJ1aWx0IGFnYWluc3QgT3BlblNTTCwgdGhlIGNlcnRpZmljYXRlIGRpcmVjdG9yeSBtdXN0IGJlIHByZXBhcmVkIHVzaW5nIHRoZSBvcGVuc3NsIGNfcmVoYXNoIHV0aWxpdHkuIFRoaXMgbWFrZXMgc2Vuc2Ugb25seSB3aGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFNTTFZFUklGWVBFRVIiPkNVUkxPUFRfU1NMX1ZFUklGWVBFRVI8L2E+IG9wdGlvbi4gIElmIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRTU0xWRVJJRllQRUVSIj5DVVJMT1BUX1NTTF9WRVJJRllQRUVSPC9hPiBpcyB6ZXJvLCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUQ0FQQVRIIj5DVVJMT1BUX0NBUEFUSDwvYT4gbmVlZCBub3QgZXZlbiBpbmRpY2F0ZSBhbiBhY2Nlc3NpYmxlIHBhdGguICBUaGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVENBUEFUSCI+Q1VSTE9QVF9DQVBBVEg8L2E+IGZ1bmN0aW9uIGFwcGFyZW50bHkgZG9lcyBub3Qgd29yayBpbiBXaW5kb3dzIGR1ZSB0byBzb21lIGxpbWl0YXRpb24gaW4gb3BlbnNzbC4gVGhpcyBvcHRpb24gaXMgT3BlblNTTC1zcGVjaWZpYyBhbmQgZG9lcyBub3RoaW5nIGlmIGxpYmN1cmwgaXMgYnVpbHQgdG8gdXNlIEdudVRMUy4gTlNTLXBvd2VyZWQgbGliY3VybCBwcm92aWRlcyB0aGUgb3B0aW9uIG9ubHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVENSTEZJTEUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9DUkxGSUxFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBjaGFyICogdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIG5hbWluZyBhIGZpbGUgd2l0aCB0aGUgY29uY2F0ZW5hdGlvbiBvZiBDUkwgKGluIFBFTSBmb3JtYXQpIHRvIHVzZSBpbiB0aGUgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiB0aGF0IG9jY3VycyBkdXJpbmcgdGhlIFNTTCBleGNoYW5nZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIGN1cmwgaXMgYnVpbHQgdG8gdXNlIE5TUyBvciBHbnVUTFMsIHRoZXJlIGlzIG5vIHdheSB0byBpbmZsdWVuY2UgdGhlIHVzZSBvZiBDUkwgcGFzc2VkIHRvIGhlbHAgaW4gdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBXaGVuIGxpYmN1cmwgaXMgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIFg1MDlfVl9GTEFHX0NSTF9DSEVDSyBhbmQgWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLX0FMTCBhcmUgYm90aCBzZXQsIHJlcXVpcmluZyBDUkwgY2hlY2sgYWdhaW5zdCBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiBpZiBhIENSTCBmaWxlIGlzIHBhc3NlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBtYWtlcyBzZW5zZSBvbmx5IHdoZW4gdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUU1NMVkVSSUZZUEVFUiI+Q1VSTE9QVF9TU0xfVkVSSUZZUEVFUjwvYT4gb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkEgc3BlY2lmaWMgZXJyb3IgY29kZSAoQ1VSTEVfU1NMX0NSTF9CQURGSUxFKSBpcyBkZWZpbmVkIHdpdGggdGhlIG9wdGlvbi4gSXQgaXMgcmV0dXJuZWQgd2hlbiB0aGUgU1NMIGV4Y2hhbmdlIGZhaWxzIGJlY2F1c2UgdGhlIENSTCBmaWxlIGNhbm5vdCBiZSBsb2FkZWQuIEEgZmFpbHVyZSBpbiBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZHVlIHRvIGEgcmV2b2NhdGlvbiBpbmZvcm1hdGlvbiBmb3VuZCBpbiB0aGUgQ1JMIGRvZXMgbm90IHRyaWdnZXIgdGhpcyBzcGVjaWZpYyBlcnJvci4gKEFkZGVkIGluIDcuMTkuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUU1NMVkVSSUZZSE9TVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NTTF9WRVJJRllIT1NUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIGFzIHBhcmFtZXRlci4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgbGliY3VybCB2ZXJpZmllcyB0aGF0IHRoZSBzZXJ2ZXIgY2VydCBpcyBmb3IgdGhlIHNlcnZlciBpdCBpcyBrbm93biBhcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIG5lZ290aWF0aW5nIGEgU1NMIGNvbm5lY3Rpb24sIHRoZSBzZXJ2ZXIgc2VuZHMgYSBjZXJ0aWZpY2F0ZSBpbmRpY2F0aW5nIGl0cyBpZGVudGl0eS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRTU0xWRVJJRllIT1NUIj5DVVJMT1BUX1NTTF9WRVJJRllIT1NUPC9hPiBpcyAyLCB0aGF0IGNlcnRpZmljYXRlIG11c3QgaW5kaWNhdGUgdGhhdCB0aGUgc2VydmVyIGlzIHRoZSBzZXJ2ZXIgdG8gd2hpY2ggeW91IG1lYW50IHRvIGNvbm5lY3QsIG9yIHRoZSBjb25uZWN0aW9uIGZhaWxzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkN1cmwgY29uc2lkZXJzIHRoZSBzZXJ2ZXIgdGhlIGludGVuZGVkIG9uZSB3aGVuIHRoZSBDb21tb24gTmFtZSBmaWVsZCBvciBhIFN1YmplY3QgQWx0ZXJuYXRlIE5hbWUgZmllbGQgaW4gdGhlIGNlcnRpZmljYXRlIG1hdGNoZXMgdGhlIGhvc3QgbmFtZSBpbiB0aGUgVVJMIHRvIHdoaWNoIHlvdSB0b2xkIEN1cmwgdG8gY29ubmVjdC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIHRoZSB2YWx1ZSBpcyAxLCB0aGUgY2VydGlmaWNhdGUgbXVzdCBjb250YWluIGEgQ29tbW9uIE5hbWUgZmllbGQsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IG5hbWUgaXQgc2F5cy4gIChUaGlzIGlzIG5vdCBvcmRpbmFyaWx5IGEgdXNlZnVsIHNldHRpbmcpLiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4gdGhlIHZhbHVlIGlzIDAsIHRoZSBjb25uZWN0aW9uIHN1Y2NlZWRzIHJlZ2FyZGxlc3Mgb2YgdGhlIG5hbWVzIGluIHRoZSBjZXJ0aWZpY2F0ZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBvcHRpb24gaXMgMi4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBjb250cm9scyBjaGVja2luZyB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUncyBjbGFpbWVkIGlkZW50aXR5LiBUaGUgc2VydmVyIGNvdWxkIGJlIGx5aW5nLiAgVG8gY29udHJvbCBseWluZywgc2VlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRTU0xWRVJJRllQRUVSIj5DVVJMT1BUX1NTTF9WRVJJRllQRUVSPC9hPi4gIElmIGxpYmN1cmwgaXMgYnVpbHQgYWdhaW5zdCBOU1MgYW5kIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRTU0xWRVJJRllQRUVSIj5DVVJMT1BUX1NTTF9WRVJJRllQRUVSPC9hPiBpcyB6ZXJvLCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUU1NMVkVSSUZZSE9TVCI+Q1VSTE9QVF9TU0xfVkVSSUZZSE9TVDwvYT4gaXMgaWdub3JlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRDRVJUSU5GTyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX0NFUlRJTkZPPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIHNldCB0byAxIHRvIGVuYWJsZSBsaWJjdXJsJ3MgY2VydGlmaWNhdGUgY2hhaW4gaW5mbyBnYXRoZXJlci4gV2l0aCB0aGlzIGVuYWJsZWQsIGxpYmN1cmwgKGlmIGJ1aWx0IHdpdGggT3BlblNTTCkgd2lsbCBleHRyYWN0IGxvdHMgb2YgaW5mb3JtYXRpb24gYW5kIGRhdGEgYWJvdXQgdGhlIGNlcnRpZmljYXRlcyBpbiB0aGUgY2VydGlmaWNhdGUgY2hhaW4gdXNlZCBpbiB0aGUgU1NMIGNvbm5lY3Rpb24uIFRoaXMgZGF0YSBpcyB0aGVuIHBvc3NpYmxlIHRvIGV4dHJhY3QgYWZ0ZXIgYSB0cmFuc2ZlciB1c2luZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X2dldGluZm8uaHRtbCI+Y3VybF9lYXN5X2dldGluZm8oMyk8L2E+IGFuZCBpdHMgb3B0aW9uIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTElORk9fQ0VSVElORk88L3NwYW4+LiAoQWRkZWQgaW4gNy4xOS4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRSQU5ET01GSUxFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfUkFORE9NX0ZJTEU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGNoYXIgKiB0byBhIHplcm8gdGVybWluYXRlZCBmaWxlIG5hbWUuIFRoZSBmaWxlIHdpbGwgYmUgdXNlZCB0byByZWFkIGZyb20gdG8gc2VlZCB0aGUgcmFuZG9tIGVuZ2luZSBmb3IgU1NMLiBUaGUgbW9yZSByYW5kb20gdGhlIHNwZWNpZmllZCBmaWxlIGlzLCB0aGUgbW9yZSBzZWN1cmUgdGhlIFNTTCBjb25uZWN0aW9uIHdpbGwgYmVjb21lLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRFR0RTT0NLRVQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9FR0RTT0NLRVQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGNoYXIgKiB0byB0aGUgemVybyB0ZXJtaW5hdGVkIHBhdGggbmFtZSB0byB0aGUgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldC4gSXQgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIHJhbmRvbSBlbmdpbmUgZm9yIFNTTC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUU1NMQ0lQSEVSTElTVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NTTF9DSVBIRVJfTElTVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY2hhciAqLCBwb2ludGluZyB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgaG9sZGluZyB0aGUgbGlzdCBvZiBjaXBoZXJzIHRvIHVzZSBmb3IgdGhlIFNTTCBjb25uZWN0aW9uLiBUaGUgbGlzdCBtdXN0IGJlIHN5bnRhY3RpY2FsbHkgY29ycmVjdCwgaXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgY2lwaGVyIHN0cmluZ3Mgc2VwYXJhdGVkIGJ5IGNvbG9ucy4gQ29tbWFzIG9yIHNwYWNlcyBhcmUgYWxzbyBhY2NlcHRhYmxlIHNlcGFyYXRvcnMgYnV0IGNvbG9ucyBhcmUgbm9ybWFsbHkgdXNlZCwgISwgLSBhbmQgKyBjYW4gYmUgdXNlZCBhcyBvcGVyYXRvcnMuIAorPHAgY2xhc3M9ImxldmVsMSI+Rm9yIE9wZW5TU0wgYW5kIEdudVRMUyB2YWxpZCBleGFtcGxlcyBvZiBjaXBoZXIgbGlzdHMgaW5jbHVkZSAnUkM0LVNIQScsICZhY3V0ZTtTSEExK0RFUyZhY3V0ZTssICdUTFN2MScgYW5kICdERUZBVUxUJy4gVGhlIGRlZmF1bHQgbGlzdCBpcyBub3JtYWxseSBzZXQgd2hlbiB5b3UgY29tcGlsZSBPcGVuU1NMLiAKKzxwIGNsYXNzPSJsZXZlbDEiPllvdSdsbCBmaW5kIG1vcmUgZGV0YWlscyBhYm91dCBjaXBoZXIgbGlzdHMgb24gdGhpcyBVUkw6IDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2FwcHMvY2lwaGVycy5odG1sIj5odHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvYXBwcy9jaXBoZXJzLmh0bWw8L2E+PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZvciBOU1MsIHZhbGlkIGV4YW1wbGVzIG9mIGNpcGhlciBsaXN0cyBpbmNsdWRlICdyc2FfcmM0XzEyOF9tZDUnLCAmYWN1dGU7cnNhX2Flc18xMjhfc2hhJmFjdXRlOywgZXRjLiBXaXRoIE5TUyB5b3UgZG9uJ3QgYWRkL3JlbW92ZSBjaXBoZXJzLiBJZiBvbmUgdXNlcyB0aGlzIG9wdGlvbiB0aGVuIGFsbCBrbm93biBjaXBoZXJzIGFyZSBkaXNhYmxlZCBhbmQgb25seSB0aG9zZSBwYXNzZWQgaW4gYXJlIGVuYWJsZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+WW91J2xsIGZpbmQgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBOU1MgY2lwaGVyIGxpc3RzIG9uIHRoaXMgVVJMOiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPjxhIGhyZWY9Imh0dHA6Ly9kaXJlY3RvcnkuZmVkb3JhLnJlZGhhdC5jb20vZG9jcy9tb2RfbnNzLmh0bWwiPmh0dHA6Ly9kaXJlY3RvcnkuZmVkb3JhLnJlZGhhdC5jb20vZG9jcy9tb2RfbnNzLmh0bWw8L2E+I0RpcmVjdGl2ZXM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUU1NMU0VTU0lPTklEQ0FDSEUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9TU0xfU0VTU0lPTklEX0NBQ0hFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIHNldCB0byAwIHRvIGRpc2FibGUgbGliY3VybCdzIHVzZSBvZiBTU0wgc2Vzc2lvbi1JRCBjYWNoaW5nLiBTZXQgdGhpcyB0byAxIHRvIGVuYWJsZSBpdC4gQnkgZGVmYXVsdCBhbGwgdHJhbnNmZXJzIGFyZSBkb25lIHVzaW5nIHRoZSBjYWNoZS4gV2hpbGUgbm90aGluZyBldmVyIHNob3VsZCBnZXQgaHVydCBieSBhdHRlbXB0aW5nIHRvIHJldXNlIFNTTCBzZXNzaW9uLUlEcywgdGhlcmUgc2VlbSB0byBiZSBicm9rZW4gU1NMIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgd2lsZCB0aGF0IG1heSByZXF1aXJlIHlvdSB0byBkaXNhYmxlIHRoaXMgaW4gb3JkZXIgZm9yIHlvdSB0byBzdWNjZWVkLiAoQWRkZWQgaW4gNy4xNi4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRTU0xPUFRJT05TIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfU1NMX09QVElPTlM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcgd2l0aCBhIGJpdG1hc2sgdG8gdGVsbCBsaWJjdXJsIGFib3V0IHNwZWNpZmljIFNTTCBiZWhhdmlvcnMuIAorPHAgY2xhc3M9ImxldmVsMSI+Q1VSTFNTTE9QVF9BTExPV19CRUFTVCBpcyB0aGUgb25seSBzdXBwb3J0ZWQgYml0IGFuZCBieSBzZXR0aW5nIHRoaXMgdGhlIHVzZXIgd2lsbCB0ZWxsIGxpYmN1cmwgdG8gbm90IGF0dGVtcHQgdG8gdXNlIGFueSB3b3JrLWFyb3VuZHMgZm9yIGEgc2VjdXJpdHkgZmxhdyBpbiB0aGUgU1NMMyBhbmQgVExTMS4wIHByb3RvY29scy4gIElmIHRoaXMgb3B0aW9uIGlzbid0IHVzZWQgb3IgdGhpcyBiaXQgaXMgc2V0IHRvIDAsIHRoZSBTU0wgbGF5ZXIgbGliY3VybCB1c2VzIG1heSB1c2UgYSB3b3JrLWFyb3VuZCBmb3IgdGhpcyBmbGF3IGFsdGhvdWdoIGl0IG1pZ2h0IGNhdXNlIGludGVyb3BlcmFiaWxpdHkgcHJvYmxlbXMgd2l0aCBzb21lIChvbGRlcikgU1NMIGltcGxlbWVudGF0aW9ucy4gV0FSTklORzogYXZvaWRpbmcgdGhpcyB3b3JrLWFyb3VuZCBsb29zZW5zIHRoZSBzZWN1cml0eSwgYW5kIGJ5IHNldHRpbmcgdGhpcyBvcHRpb24gdG8gMSB5b3UgYXNrIGZvciBleGFjdGx5IHRoYXQuIChBZGRlZCBpbiA3LjI1LjApIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEtSQkxFVkVMIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfS1JCTEVWRUw8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGNoYXIgKiBhcyBwYXJhbWV0ZXIuIFNldCB0aGUga2VyYmVyb3Mgc2VjdXJpdHkgbGV2ZWwgZm9yIEZUUDsgdGhpcyBhbHNvIGVuYWJsZXMga2VyYmVyb3MgYXdhcmVuZXNzLiAgVGhpcyBpcyBhIHN0cmluZywgJ2NsZWFyJywgJ3NhZmUnLCAnY29uZmlkZW50aWFsJyBvciAncHJpdmF0ZScuICBJZiB0aGUgc3RyaW5nIGlzIHNldCBidXQgZG9lc24ndCBtYXRjaCBvbmUgb2YgdGhlc2UsICdwcml2YXRlJyB3aWxsIGJlIHVzZWQuIFNldCB0aGUgc3RyaW5nIHRvIE5VTEwgdG8gZGlzYWJsZSBrZXJiZXJvcyBzdXBwb3J0IGZvciBGVFAuIAorPHAgY2xhc3M9ImxldmVsMSI+KFRoaXMgb3B0aW9uIHdhcyBrbm93biBhcyBDVVJMT1BUX0tSQjRMRVZFTCB1cCB0byA3LjE2LjMpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVEdTU0FQSURFTEVHQVRJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9HU1NBUElfREVMRUdBVElPTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TZXQgdGhlIHBhcmFtZXRlciB0byBDVVJMR1NTQVBJX0RFTEVHQVRJT05fRkxBRyB0byBhbGxvdyB1bmNvbmRpdGlvbmFsIEdTU0FQSSBjcmVkZW50aWFsIGRlbGVnYXRpb24uICBUaGUgZGVsZWdhdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IHNpbmNlIDcuMjEuNy4gU2V0IHRoZSBwYXJhbWV0ZXIgdG8gQ1VSTEdTU0FQSV9ERUxFR0FUSU9OX1BPTElDWV9GTEFHIHRvIGRlbGVnYXRlIG9ubHkgaWYgdGhlIE9LLUFTLURFTEVHQVRFIGZsYWcgaXMgc2V0IGluIHRoZSBzZXJ2aWNlIHRpY2tldCBpbiBjYXNlIHRoaXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEdTU0FQSSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIGRlZmluaXRpb24gb2YgR1NTX0NfREVMRUdfUE9MSUNZX0ZMQUcgd2FzIGF2YWlsYWJsZSBhdCBjb21waWxlLXRpbWUuIChBZGRlZCBpbiA3LjIyLjApIDxhIG5hbWU9IlNTSCI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1NIIE9QVElPTlM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUU1NIQVVUSFRZUEVTIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfU1NIX0FVVEhfVFlQRVM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcgc2V0IHRvIGEgYml0bWFzayBjb25zaXN0aW5nIG9mIG9uZSBvciBtb3JlIG9mIENVUkxTU0hfQVVUSF9QVUJMSUNLRVksIENVUkxTU0hfQVVUSF9QQVNTV09SRCwgQ1VSTFNTSF9BVVRIX0hPU1QsIENVUkxTU0hfQVVUSF9LRVlCT0FSRC4gU2V0IENVUkxTU0hfQVVUSF9BTlkgdG8gbGV0IGxpYmN1cmwgcGljayBvbmUuIEN1cnJlbnRseSBDVVJMU1NIX0FVVEhfSE9TVCBoYXMgbm8gZWZmZWN0LiAoQWRkZWQgaW4gNy4xNi4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRTU0hIT1NUUFVCTElDS0VZTUQ1Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGNoYXIgKiBwb2ludGluZyB0byBhIHN0cmluZyBjb250YWluaW5nIDMyIGhleGFkZWNpbWFsIGRpZ2l0cy4gVGhlIHN0cmluZyBzaG91bGQgYmUgdGhlIDEyOCBiaXQgTUQ1IGNoZWNrc3VtIG9mIHRoZSByZW1vdGUgaG9zdCdzIHB1YmxpYyBrZXksIGFuZCBsaWJjdXJsIHdpbGwgcmVqZWN0IHRoZSBjb25uZWN0aW9uIHRvIHRoZSBob3N0IHVubGVzcyB0aGUgbWQ1c3VtcyBtYXRjaC4gVGhpcyBvcHRpb24gaXMgb25seSBmb3IgU0NQIGFuZCBTRlRQIHRyYW5zZmVycy4gKEFkZGVkIGluIDcuMTcuMSkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUU1NIUFVCTElDS0VZRklMRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NTSF9QVUJMSUNfS0VZRklMRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgY2hhciAqIHBvaW50aW5nIHRvIGEgZmlsZSBuYW1lIGZvciB5b3VyIHB1YmxpYyBrZXkuIElmIG5vdCB1c2VkLCBsaWJjdXJsIGRlZmF1bHRzIHRvIDxzcGFuIENsYXNzPSJib2xkIj4kSE9NRS8uc3NoL2lkX2RzYS5wdWI8L3NwYW4+IGlmIHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgYW5kIGp1c3QgImlkX2RzYS5wdWIiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiBIT01FIGlzIG5vdCBzZXQuICAoQWRkZWQgaW4gNy4xNi4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRTU0hQUklWQVRFS0VZRklMRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NTSF9QUklWQVRFX0tFWUZJTEU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGNoYXIgKiBwb2ludGluZyB0byBhIGZpbGUgbmFtZSBmb3IgeW91ciBwcml2YXRlIGtleS4gSWYgbm90IHVzZWQsIGxpYmN1cmwgZGVmYXVsdHMgdG8gPHNwYW4gQ2xhc3M9ImJvbGQiPiRIT01FLy5zc2gvaWRfZHNhPC9zcGFuPiBpZiB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGFuZCBqdXN0ICJpZF9kc2EiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiBIT01FIGlzIG5vdCBzZXQuICBJZiB0aGUgZmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQsIHNldCB0aGUgcGFzc3dvcmQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUS0VZUEFTU1dEIj5DVVJMT1BUX0tFWVBBU1NXRDwvYT4uIChBZGRlZCBpbiA3LjE2LjEpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFNTSEtOT1dOSE9TVFMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9TU0hfS05PV05IT1NUUzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgaG9sZGluZyB0aGUgZmlsZSBuYW1lIG9mIHRoZSBrbm93bl9ob3N0IGZpbGUgdG8gdXNlLiAgVGhlIGtub3duX2hvc3RzIGZpbGUgc2hvdWxkIHVzZSB0aGUgT3BlblNTSCBmaWxlIGZvcm1hdCBhcyBzdXBwb3J0ZWQgYnkgbGlic3NoMi4gSWYgdGhpcyBmaWxlIGlzIHNwZWNpZmllZCwgbGliY3VybCB3aWxsIG9ubHkgYWNjZXB0IGNvbm5lY3Rpb25zIHdpdGggaG9zdHMgdGhhdCBhcmUga25vd24gYW5kIHByZXNlbnQgaW4gdGhhdCBmaWxlLCB3aXRoIGEgbWF0Y2hpbmcgcHVibGljIGtleS4gVXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRTU0hLRVlGVU5DVElPTiI+Q1VSTE9QVF9TU0hfS0VZRlVOQ1RJT048L2E+IHRvIGFsdGVyIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9uIGhvc3QgYW5kIGtleSAobWlzKW1hdGNoaW5nLiAoQWRkZWQgaW4gNy4xOS42KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRTU0hLRVlGVU5DVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NTSF9LRVlGVU5DVElPTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byBhIGN1cmxfc3Noa2V5Y2FsbGJhY2sgZnVuY3Rpb24uIEl0IGdldHMgY2FsbGVkIHdoZW4gdGhlIGtub3duX2hvc3QgbWF0Y2hpbmcgaGFzIGJlZW4gZG9uZSwgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGFjdCBhbmQgZGVjaWRlIGZvciBsaWJjdXJsIGhvdyB0byBwcm9jZWVkLiBUaGUgY2FsbGJhY2sgd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMT1BUU1NIS05PV05IT1NUUyI+Q1VSTE9QVF9TU0hfS05PV05IT1NUUzwvYT4gaXMgYWxzbyBzZXQuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIGN1cmxfc3Noa2V5Y2FsbGJhY2sgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgdGhlIENVUkwgaGFuZGxlLCB0aGUga2V5IGZyb20gdGhlIGtub3duX2hvc3RzIGZpbGUsIHRoZSBrZXkgZnJvbSB0aGUgcmVtb3RlIHNpdGUsIGluZm8gZnJvbSBsaWJjdXJsIG9uIHRoZSBtYXRjaGluZyBzdGF0dXMgYW5kIGEgY3VzdG9tIHBvaW50ZXIgKHNldCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxPUFRTU0hLRVlEQVRBIj5DVVJMT1BUX1NTSF9LRVlEQVRBPC9hPikuIEl0IE1VU1QgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJldHVybiBjb2RlcyB0byB0ZWxsIGxpYmN1cmwgaG93IHRvIGFjdDogCis8cCBjbGFzcz0ibGV2ZWwyIj4KKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxLSFNUQVRGSU5FQUREVE9GSUxFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwyIj5UaGUgaG9zdCtrZXkgaXMgYWNjZXB0ZWQgYW5kIGxpYmN1cmwgd2lsbCBhcHBlbmQgaXQgdG8gdGhlIGtub3duX2hvc3RzIGZpbGUgYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCB0aGUgY29ubmVjdGlvbi4gVGhpcyB3aWxsIGFsc28gYWRkIHRoZSBob3N0K2tleSBjb21ibyB0byB0aGUga25vd25faG9zdCBwb29sIGtlcHQgaW4gbWVtb3J5IGlmIGl0IHdhc24ndCBhbHJlYWR5IHByZXNlbnQgdGhlcmUuIFRoZSBhZGRpbmcgb2YgZGF0YSB0byB0aGUgZmlsZSBpcyBkb25lIGJ5IGNvbXBsZXRlbHkgcmVwbGFjaW5nIHRoZSBmaWxlIHdpdGggYSBuZXcgY29weSwgc28gdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBmaWxlIG11c3QgYWxsb3cgdGhpcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMS0hTVEFURklORSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMS0hTVEFUX0ZJTkU8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+VGhlIGhvc3Qra2V5IGlzIGFjY2VwdGVkIGxpYmN1cmwgd2lsbCBjb250aW51ZSB3aXRoIHRoZSBjb25uZWN0aW9uLiBUaGlzIHdpbGwgYWxzbyBhZGQgdGhlIGhvc3Qra2V5IGNvbWJvIHRvIHRoZSBrbm93bl9ob3N0IHBvb2wga2VwdCBpbiBtZW1vcnkgaWYgaXQgd2Fzbid0IGFscmVhZHkgcHJlc2VudCB0aGVyZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMS0hTVEFUUkVKRUNUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxLSFNUQVRfUkVKRUNUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRoZSBob3N0K2tleSBpcyByZWplY3RlZC4gbGliY3VybCB3aWxsIGRlbnkgdGhlIGNvbm5lY3Rpb24gdG8gY29udGludWUgYW5kIGl0IHdpbGwgYmUgY2xvc2VkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxLSFNUQVRERUZFUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMS0hTVEFUX0RFRkVSPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPlRoZSBob3N0K2tleSBpcyByZWplY3RlZCwgYnV0IHRoZSBTU0ggY29ubmVjdGlvbiBpcyBhc2tlZCB0byBiZSBrZXB0IGFsaXZlLiBUaGlzIGZlYXR1cmUgY291bGQgYmUgdXNlZCB3aGVuIHRoZSBhcHAgd2FudHMgdG8gc29tZWhvdyByZXR1cm4gYmFjayBhbmQgYWN0IG9uIHRoZSBob3N0K2tleSBzaXR1YXRpb24gYW5kIHRoZW4gcmV0cnkgd2l0aG91dCBuZWVkaW5nIHRoZSBvdmVyaGVhZCBvZiBzZXR0aW5nIGl0IHVwIGZyb20gc2NyYXRjaCBhZ2Fpbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj4mbmJzcDsoQWRkZWQgaW4gNy4xOS42KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRTU0hLRVlEQVRBIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfU1NIX0tFWURBVEE8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIHZvaWQgKiBhcyBwYXJhbWV0ZXIuIFRoaXMgcG9pbnRlciB3aWxsIGJlIHBhc3NlZCBhbG9uZyB2ZXJiYXRpbSB0byB0aGUgY2FsbGJhY2sgc2V0IHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE9QVFNTSEtFWUZVTkNUSU9OIj5DVVJMT1BUX1NTSF9LRVlGVU5DVElPTjwvYT4uIChBZGRlZCBpbiA3LjE5LjYpIDxhIG5hbWU9Ik9USEVSIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5PVEhFUiBPUFRJT05TPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVFBSSVZBVEUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE9QVF9QUklWQVRFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSB2b2lkICogYXMgcGFyYW1ldGVyLCBwb2ludGluZyB0byBkYXRhIHRoYXQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGN1cmwgaGFuZGxlLiAgVGhlIHBvaW50ZXIgY2FuIHN1YnNlcXVlbnRseSBiZSByZXRyaWV2ZWQgdXNpbmcgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9nZXRpbmZvLmh0bWwiPmN1cmxfZWFzeV9nZXRpbmZvKDMpPC9hPiB3aXRoIHRoZSBDVVJMSU5GT19QUklWQVRFIG9wdGlvbi4gbGliY3VybCBpdHNlbGYgZG9lcyBub3RoaW5nIHdpdGggdGhpcyBkYXRhLiAoQWRkZWQgaW4gNy4xMC4zKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRTSEFSRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMT1BUX1NIQVJFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBzaGFyZSBoYW5kbGUgYXMgYSBwYXJhbWV0ZXIuIFRoZSBzaGFyZSBoYW5kbGUgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfc2hhcmVfaW5pdC5odG1sIj5jdXJsX3NoYXJlX2luaXQoMyk8L2E+LiBTZXR0aW5nIHRoaXMgb3B0aW9uLCB3aWxsIG1ha2UgdGhpcyBjdXJsIGhhbmRsZSB1c2UgdGhlIGRhdGEgZnJvbSB0aGUgc2hhcmVkIGhhbmRsZSBpbnN0ZWFkIG9mIGtlZXBpbmcgdGhlIGRhdGEgdG8gaXRzZWxmLiBUaGlzIGVuYWJsZXMgc2V2ZXJhbCBjdXJsIGhhbmRsZXMgdG8gc2hhcmUgZGF0YS4gSWYgdGhlIGN1cmwgaGFuZGxlcyBhcmUgdXNlZCBzaW11bHRhbmVvdXNseSBpbiBtdWx0aXBsZSB0aHJlYWRzLCB5b3UgPHNwYW4gQ2xhc3M9ImJvbGQiPk1VU1Q8L3NwYW4+IHVzZSB0aGUgbG9ja2luZyBtZXRob2RzIGluIHRoZSBzaGFyZSBoYW5kbGUuIFNlZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9zaGFyZV9zZXRvcHQuaHRtbCI+Y3VybF9zaGFyZV9zZXRvcHQoMyk8L2E+IGZvciBkZXRhaWxzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHlvdSBhZGQgYSBzaGFyZSB0aGF0IGlzIHNldCB0byBzaGFyZSBjb29raWVzLCB5b3VyIGVhc3kgaGFuZGxlIHdpbGwgdXNlIHRoYXQgY29va2llIGNhY2hlIGFuZCBnZXQgdGhlIGNvb2tpZSBlbmdpbmUgZW5hYmxlZC4gSWYgeW91IHVuc2hhcmUgYW4gb2JqZWN0IHRoYXQgd2FzIHVzaW5nIGNvb2tpZXMgKG9yIGNoYW5nZSB0byBhbm90aGVyIG9iamVjdCB0aGF0IGRvZXNuJ3Qgc2hhcmUgY29va2llcyksIHRoZSBlYXN5IGhhbmRsZSB3aWxsIGdldCBpdHMgY29va2llIGVuZ2luZSBkaXNhYmxlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5EYXRhIHRoYXQgdGhlIHNoYXJlIG9iamVjdCBpcyBub3Qgc2V0IHRvIHNoYXJlIHdpbGwgYmUgZGVhbHQgd2l0aCB0aGUgdXN1YWwgd2F5LCBhcyBpZiBubyBzaGFyZSB3YXMgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMT1BUTkVXRklMRVBFUk1TIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfTkVXX0ZJTEVfUEVSTVM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+UGFzcyBhIGxvbmcgYXMgYSBwYXJhbWV0ZXIsIGNvbnRhaW5pbmcgdGhlIHZhbHVlIG9mIHRoZSBwZXJtaXNzaW9ucyB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gbmV3bHkgY3JlYXRlZCBmaWxlcyBvbiB0aGUgcmVtb3RlIHNlcnZlci4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+MDY0NDwvc3Bhbj4sIGJ1dCBhbnkgdmFsaWQgdmFsdWUgY2FuIGJlIHVzZWQuICBUaGUgb25seSBwcm90b2NvbHMgdGhhdCBjYW4gdXNlIHRoaXMgYXJlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+c2Z0cDovLzwvc3Bhbj4sIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+c2NwOi8vPC9zcGFuPiwgYW5kIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+ZmlsZTovLzwvc3Bhbj4uIChBZGRlZCBpbiA3LjE2LjQpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE9QVE5FV0RJUkVDVE9SWVBFUk1TIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfTkVXX0RJUkVDVE9SWV9QRVJNUzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgbG9uZyBhcyBhIHBhcmFtZXRlciwgY29udGFpbmluZyB0aGUgdmFsdWUgb2YgdGhlIHBlcm1pc3Npb25zIHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byBuZXdseSBjcmVhdGVkIGRpcmVjdG9yaWVzIG9uIHRoZSByZW1vdGUgc2VydmVyLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj4wNzU1PC9zcGFuPiwgYnV0IGFueSB2YWxpZCB2YWx1ZSBjYW4gYmUgdXNlZC4gIFRoZSBvbmx5IHByb3RvY29scyB0aGF0IGNhbiB1c2UgdGhpcyBhcmUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5zZnRwOi8vPC9zcGFuPiwgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5zY3A6Ly88L3NwYW4+LCBhbmQgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5maWxlOi8vPC9zcGFuPi4gKEFkZGVkIGluIDcuMTYuNCkgPGEgbmFtZT0iVEVMTkVUIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5URUxORVQgT1BUSU9OUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxPUFRURUxORVRPUFRJT05TIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxPUFRfVEVMTkVUT1BUSU9OUzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Qcm92aWRlIGEgcG9pbnRlciB0byBhIGN1cmxfc2xpc3Qgd2l0aCB2YXJpYWJsZXMgdG8gcGFzcyB0byB0aGUgdGVsbmV0IG5lZ290aWF0aW9ucy4gVGhlIHZhcmlhYmxlcyBzaG91bGQgYmUgaW4gdGhlIGZvcm1hdCAmbHQ7b3B0aW9uPXZhbHVlJmd0Oy4gbGliY3VybCBzdXBwb3J0cyB0aGUgb3B0aW9ucyAnVFRZUEUnLCAnWERJU1BMT0MnIGFuZCAnTkVXX0VOVicuIFNlZSB0aGUgVEVMTkVUIHN0YW5kYXJkIGZvciBkZXRhaWxzLiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5DVVJMRV9PSyAoemVybykgbWVhbnMgdGhhdCB0aGUgb3B0aW9uIHdhcyBzZXQgcHJvcGVybHksIG5vbi16ZXJvIG1lYW5zIGFuIGVycm9yIG9jY3VycmVkIGFzIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Jmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gZGVmaW5lcy4gU2VlIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmxpYmN1cmwtZXJyb3JzKDMpPC9zcGFuPiBtYW4gcGFnZSBmb3IgdGhlIGZ1bGwgbGlzdCB3aXRoIGRlc2NyaXB0aW9ucy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5JZiB5b3UgdHJ5IHRvIHNldCBhbiBvcHRpb24gdGhhdCBsaWJjdXJsIGRvZXNuJ3Qga25vdyBhYm91dCwgcGVyaGFwcyBiZWNhdXNlIHRoZSBsaWJyYXJ5IGlzIHRvbyBvbGQgdG8gc3VwcG9ydCBpdCBvciB0aGUgb3B0aW9uIHdhcyByZW1vdmVkIGluIGEgcmVjZW50IHZlcnNpb24sIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMRV9GQUlMRURfSU5JVDwvc3Bhbj4uIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9lYXN5X2luaXQuaHRtbCI+Y3VybF9lYXN5X2luaXQgKDMpPC9hPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX2Vhc3lfY2xlYW51cC5odG1sIj4gIGN1cmxfZWFzeV9jbGVhbnVwICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9lYXN5X3Jlc2V0Lmh0bWwiPiAgY3VybF9lYXN5X3Jlc2V0ICgzKTwvYT4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3NldG9wdC5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3NldG9wdC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2MGZiMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfc2V0b3B0LnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3N0cmVycm9yLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3N0cmVycm9yLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2YzljNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfc3RyZXJyb3IuMwpAQCAtMCwwICsxLDM3IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX2Vhc3lfc3RyZXJyb3IgMyAiMjYgQXByIDIwMDQiICJsaWJjdXJsIDcuMTIiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX2Vhc3lfc3RyZXJyb3IgLSByZXR1cm4gc3RyaW5nIGRlc2NyaWJpbmcgZXJyb3IgY29kZQorLlNIIFNZTk9QU0lTCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2NvbnN0IGNoYXIgKmN1cmxfZWFzeV9zdHJlcnJvcihDVVJMY29kZSBlcnJvcm51bSk7CisuU0ggREVTQ1JJUFRJT04KK1RoZSBjdXJsX2Vhc3lfc3RyZXJyb3IoKSBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIENVUkxjb2RlCitlcnJvciBjb2RlIHBhc3NlZCBpbiB0aGUgYXJndW1lbnQgXGZJZXJyb3JudW1cZlAuCisuU0ggQVZBSUxBQklMSVRZCitUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBsaWJjdXJsIDcuMTIuMAorLlNIIFJFVFVSTiBWQUxVRQorQSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZy4KKy5TSCAiU0VFIEFMU08iCisuQlIgbGliY3VybC1lcnJvcnMgIigzKSwgIiBjdXJsX211bHRpX3N0cmVycm9yICIoMyksICIgY3VybF9zaGFyZV9zdHJlcnJvciAiKDMpIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9zdHJlcnJvci5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9zdHJlcnJvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Y2IzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3N0cmVycm9yLmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfZWFzeV9zdHJlcnJvciBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX2Vhc3lfc3RyZXJyb3IgLSByZXR1cm4gc3RyaW5nIGRlc2NyaWJpbmcgZXJyb3IgY29kZSA8YSBuYW1lPSJTWU5PUFNJUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1lOT1BTSVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0OyAKKzxwIGNsYXNzPSJsZXZlbDAiPmNvbnN0IGNoYXIgKmN1cmxfZWFzeV9zdHJlcnJvcihDVVJMY29kZSBlcnJvcm51bSk7IDxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgY3VybF9lYXN5X3N0cmVycm9yKCkgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBDVVJMY29kZSBlcnJvciBjb2RlIHBhc3NlZCBpbiB0aGUgYXJndW1lbnQgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5lcnJvcm51bTwvc3Bhbj4uIDxhIG5hbWU9IkFWQUlMQUJJTElUWSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+QVZBSUxBQklMSVRZPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIGluIGxpYmN1cmwgNy4xMi4wIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPkEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcuIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPmxpYmN1cmwtZXJyb3JzICgzKTwvc3Bhbj4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9zdHJlcnJvci5odG1sIj4gIGN1cmxfbXVsdGlfc3RyZXJyb3IgKDMpPC9hPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX3NoYXJlX3N0cmVycm9yLmh0bWwiPiAgY3VybF9zaGFyZV9zdHJlcnJvciAoMyk8L2E+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9zdHJlcnJvci5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3N0cmVycm9yLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTRhYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9zdHJlcnJvci5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV91bmVzY2FwZS4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV91bmVzY2FwZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMDNmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3VuZXNjYXBlLjMKQEAgLTAsMCArMSw1MSBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCBjdXJsX2Vhc3lfdW5lc2NhcGUgMyAiNyBBcHJpbCAyMDA2IiAibGliY3VybCA3LjE1LjQiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX2Vhc3lfdW5lc2NhcGUgLSBVUkwgZGVjb2RlcyB0aGUgZ2l2ZW4gc3RyaW5nCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKy5zcAorLkJJICJjaGFyICpjdXJsX2Vhc3lfdW5lc2NhcGUoIENVUkwgKiIgY3VybCAiLCBjaGFyICoiIHVybCAiLCBpbnQgImlubGVuZ3RoCisuQkkgIiwgaW50ICoiIG91dGxlbmd0aCAiICk7IgorLmFkCisuU0ggREVTQ1JJUFRJT04KK1RoaXMgZnVuY3Rpb24gY29udmVydHMgdGhlIGdpdmVuIFVSTCBlbmNvZGVkIGlucHV0IHN0cmluZyB0byBhICJwbGFpbiBzdHJpbmciCithbmQgcmV0dXJucyB0aGF0IGluIGFuIGFsbG9jYXRlZCBtZW1vcnkgYXJlYS4gQWxsIGlucHV0IGNoYXJhY3RlcnMgdGhhdCBhcmUKK1VSTCBlbmNvZGVkICglWFggd2hlcmUgWFggaXMgYSB0d28tZGlnaXQgaGV4YWRlY2ltYWwgbnVtYmVyKSBhcmUgY29udmVydGVkIHRvCit0aGVpciBiaW5hcnkgdmVyc2lvbnMuCisKK0lmIHRoZSBcZkJsZW5ndGhcZlAgYXJndW1lbnQgaXMgc2V0IHRvIDAgKHplcm8pLCBcZkljdXJsX2Vhc3lfdW5lc2NhcGUoMylcZlAKK3dpbGwgdXNlIHN0cmxlbigpIG9uIHRoZSBpbnB1dCBcZkl1cmxcZlAgc3RyaW5nIHRvIGZpbmQgb3V0IHRoZSBzaXplLgorCitJZiBcZkJvdXRsZW5ndGhcZlAgaXMgbm9uLU5VTEwsIHRoZSBmdW5jdGlvbiB3aWxsIHdyaXRlIHRoZSBsZW5ndGggb2YgdGhlCityZXR1cm5lZCBzdHJpbmcgaW4gdGhlIGludGVnZXIgaXQgcG9pbnRzIHRvLiBUaGlzIGFsbG93cyBhbiBlc2NhcGVkIHN0cmluZworY29udGFpbmluZyAlMDAgdG8gc3RpbGwgZ2V0IHVzZWQgcHJvcGVybHkgYWZ0ZXIgdW5lc2NhcGluZy4KKworWW91IG11c3QgXGZJY3VybF9mcmVlKDMpXGZQIHRoZSByZXR1cm5lZCBzdHJpbmcgd2hlbiB5b3UncmUgZG9uZSB3aXRoIGl0LgorLlNIIEFWQUlMQUJJTElUWQorQWRkZWQgaW4gNy4xNS40IGFuZCByZXBsYWNlcyB0aGUgb2xkIFxmSWN1cmxfdW5lc2NhcGUoMylcZlAgZnVuY3Rpb24uCisuU0ggUkVUVVJOIFZBTFVFCitBIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIG9yIE5VTEwgaWYgaXQgZmFpbGVkLgorLlNIICJTRUUgQUxTTyIKKy5JIGN1cmxfZWFzeV9lc2NhcGUoMyksIGN1cmxfZnJlZSgzKSwgUkZDIDIzOTYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfdW5lc2NhcGUuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfdW5lc2NhcGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDFmMDE4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV91bmVzY2FwZS5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX2Vhc3lfdW5lc2NhcGUgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9lYXN5X3VuZXNjYXBlIC0gVVJMIGRlY29kZXMgdGhlIGdpdmVuIHN0cmluZyA8YSBuYW1lPSJTWU5PUFNJUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1lOT1BTSVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmNoYXIgKmN1cmxfZWFzeV91bmVzY2FwZSggQ1VSTCAqIGN1cmwgLCBjaGFyICogdXJsICwgaW50IGlubGVuZ3RoPC9zcGFuPiA8c3BhbiBDbGFzcz0iYm9sZCI+LCBpbnQgKiBvdXRsZW5ndGggICk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBnaXZlbiBVUkwgZW5jb2RlZCBpbnB1dCBzdHJpbmcgdG8gYSAicGxhaW4gc3RyaW5nIiBhbmQgcmV0dXJucyB0aGF0IGluIGFuIGFsbG9jYXRlZCBtZW1vcnkgYXJlYS4gQWxsIGlucHV0IGNoYXJhY3RlcnMgdGhhdCBhcmUgVVJMIGVuY29kZWQgKCVYWCB3aGVyZSBYWCBpcyBhIHR3by1kaWdpdCBoZXhhZGVjaW1hbCBudW1iZXIpIGFyZSBjb252ZXJ0ZWQgdG8gdGhlaXIgYmluYXJ5IHZlcnNpb25zLiAKKzxwIGNsYXNzPSJsZXZlbDAiPklmIHRoZSA8c3BhbiBDbGFzcz0iYm9sZCI+bGVuZ3RoPC9zcGFuPiBhcmd1bWVudCBpcyBzZXQgdG8gMCAoemVybyksIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfdW5lc2NhcGUuaHRtbCI+Y3VybF9lYXN5X3VuZXNjYXBlKDMpPC9hPiB3aWxsIHVzZSBzdHJsZW4oKSBvbiB0aGUgaW5wdXQgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj51cmw8L3NwYW4+IHN0cmluZyB0byBmaW5kIG91dCB0aGUgc2l6ZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5JZiA8c3BhbiBDbGFzcz0iYm9sZCI+b3V0bGVuZ3RoPC9zcGFuPiBpcyBub24tTlVMTCwgdGhlIGZ1bmN0aW9uIHdpbGwgd3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgc3RyaW5nIGluIHRoZSBpbnRlZ2VyIGl0IHBvaW50cyB0by4gVGhpcyBhbGxvd3MgYW4gZXNjYXBlZCBzdHJpbmcgY29udGFpbmluZyAlMDAgdG8gc3RpbGwgZ2V0IHVzZWQgcHJvcGVybHkgYWZ0ZXIgdW5lc2NhcGluZy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgbXVzdCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9mcmVlLmh0bWwiPmN1cmxfZnJlZSgzKTwvYT4gdGhlIHJldHVybmVkIHN0cmluZyB3aGVuIHlvdSdyZSBkb25lIHdpdGggaXQuIDxhIG5hbWU9IkFWQUlMQUJJTElUWSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+QVZBSUxBQklMSVRZPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPkFkZGVkIGluIDcuMTUuNCBhbmQgcmVwbGFjZXMgdGhlIG9sZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF91bmVzY2FwZS5odG1sIj5jdXJsX3VuZXNjYXBlKDMpPC9hPiBmdW5jdGlvbi4gPGEgbmFtZT0iUkVUVVJOIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SRVRVUk4gVkFMVUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+QSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBvciBOVUxMIGlmIGl0IGZhaWxlZC4gPGEgbmFtZT0iU0VFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TRUUgQUxTTzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iZW1waGFzaXMiPmN1cmxfZWFzeV9lc2NhcGUoMyksIGN1cmxfZnJlZSgzKSwgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjM5Ni50eHQiPlJGQyAyMzk2PC9hPjwvc3Bhbj4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3VuZXNjYXBlLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfdW5lc2NhcGUucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MWU3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3VuZXNjYXBlLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lc2NhcGUuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2VzY2FwZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZmQ1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lc2NhcGUuMwpAQCAtMCwwICsxLDQ4IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX2VzY2FwZSAzICI2IE1hcmNoIDIwMDIiICJsaWJjdXJsIDcuOSIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfZXNjYXBlIC0gVVJMIGVuY29kZXMgdGhlIGdpdmVuIHN0cmluZworLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+Cisuc3AKKy5CSSAiY2hhciAqY3VybF9lc2NhcGUoIGNoYXIgKiIgdXJsICIsIGludCAibGVuZ3RoICIgKTsiCisuYWQKKy5TSCBERVNDUklQVElPTgorT2Jzb2xldGUgZnVuY3Rpb24uIFVzZSBcZkljdXJsX2Vhc3lfZXNjYXBlKDMpXGZQIGluc3RlYWQhCisKK1RoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IHRoZSBnaXZlbiBpbnB1dCBzdHJpbmcgdG8gYW4gVVJMIGVuY29kZWQgc3RyaW5nIGFuZAorcmV0dXJuIHRoYXQgYXMgYSBuZXcgYWxsb2NhdGVkIHN0cmluZy4gQWxsIGlucHV0IGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGEteiwKK0EtWiBvciAwLTkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlaXIgIlVSTCBlc2NhcGVkIiB2ZXJzaW9uICglTk4gd2hlcmUgTk4gaXMgYQordHdvLWRpZ2l0IGhleGFkZWNpbWFsIG51bWJlcikuCisKK0lmIHRoZSAnbGVuZ3RoJyBhcmd1bWVudCBpcyBzZXQgdG8gMCwgY3VybF9lc2NhcGUoKSB3aWxsIHVzZSBzdHJsZW4oKSBvbiB0aGUKK2lucHV0ICd1cmwnIHN0cmluZyB0byBmaW5kIG91dCB0aGUgc2l6ZS4KKworWW91IG11c3QgY3VybF9mcmVlKCkgdGhlIHJldHVybmVkIHN0cmluZyB3aGVuIHlvdSdyZSBkb25lIHdpdGggaXQuCisuU0ggQVZBSUxBQklMSVRZCitTaW5jZSA3LjE1LjQsIFxmSWN1cmxfZWFzeV9lc2NhcGUoMylcZlAgc2hvdWxkIGJlIHVzZWQuIFRoaXMgZnVuY3Rpb24gd2lsbAorYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgorLlNIIFJFVFVSTiBWQUxVRQorQSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBvciBOVUxMIGlmIGl0IGZhaWxlZC4KKy5TSCAiU0VFIEFMU08iCisuQlIgY3VybF91bmVzY2FwZSAiKDMpLCAiIGN1cmxfZnJlZSAiKDMpLCAiIFJGQyAyMzk2CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lc2NhcGUuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2VzY2FwZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMTIwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lc2NhcGUuaHRtbApAQCAtMCwwICsxLDYxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF9lc2NhcGUgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9lc2NhcGUgLSBVUkwgZW5jb2RlcyB0aGUgZ2l2ZW4gc3RyaW5nIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Y2hhciAqY3VybF9lc2NhcGUoIGNoYXIgKiB1cmwgLCBpbnQgbGVuZ3RoICApOzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+T2Jzb2xldGUgZnVuY3Rpb24uIFVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X2VzY2FwZS5odG1sIj5jdXJsX2Vhc3lfZXNjYXBlKDMpPC9hPiBpbnN0ZWFkISAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IHRoZSBnaXZlbiBpbnB1dCBzdHJpbmcgdG8gYW4gVVJMIGVuY29kZWQgc3RyaW5nIGFuZCByZXR1cm4gdGhhdCBhcyBhIG5ldyBhbGxvY2F0ZWQgc3RyaW5nLiBBbGwgaW5wdXQgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgYS16LCBBLVogb3IgMC05IHdpbGwgYmUgY29udmVydGVkIHRvIHRoZWlyICJVUkwgZXNjYXBlZCIgdmVyc2lvbiAoJU5OIHdoZXJlIE5OIGlzIGEgdHdvLWRpZ2l0IGhleGFkZWNpbWFsIG51bWJlcikuIAorPHAgY2xhc3M9ImxldmVsMCI+SWYgdGhlICdsZW5ndGgnIGFyZ3VtZW50IGlzIHNldCB0byAwLCBjdXJsX2VzY2FwZSgpIHdpbGwgdXNlIHN0cmxlbigpIG9uIHRoZSBpbnB1dCAndXJsJyBzdHJpbmcgdG8gZmluZCBvdXQgdGhlIHNpemUuIAorPHAgY2xhc3M9ImxldmVsMCI+WW91IG11c3QgY3VybF9mcmVlKCkgdGhlIHJldHVybmVkIHN0cmluZyB3aGVuIHlvdSdyZSBkb25lIHdpdGggaXQuIDxhIG5hbWU9IkFWQUlMQUJJTElUWSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+QVZBSUxBQklMSVRZPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlNpbmNlIDcuMTUuNCwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9lc2NhcGUuaHRtbCI+Y3VybF9lYXN5X2VzY2FwZSgzKTwvYT4gc2hvdWxkIGJlIHVzZWQuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPkEgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgb3IgTlVMTCBpZiBpdCBmYWlsZWQuIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF91bmVzY2FwZS5odG1sIj5jdXJsX3VuZXNjYXBlICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9mcmVlLmh0bWwiPiAgY3VybF9mcmVlICgzKTwvYT4gPHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPiAgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjM5Ni50eHQiPlJGQyAyMzk2PC9hPjwvc3Bhbj4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9lc2NhcGUucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZXNjYXBlLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWM4ZTNhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZXNjYXBlLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mb3JtYWRkLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mb3JtYWRkLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U0ZGYxZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Zvcm1hZGQuMwpAQCAtMCwwICsxLDIzNSBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF9mb3JtYWRkIDMgIjI0IEp1bmUgMjAwMiIgImxpYmN1cmwgNy45LjgiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX2Zvcm1hZGQgLSBhZGQgYSBzZWN0aW9uIHRvIGEgbXVsdGlwYXJ0L2Zvcm1kYXRhIEhUVFAgUE9TVAorLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+Cisuc3AKKy5CSSAiQ1VSTEZPUk1jb2RlIGN1cmxfZm9ybWFkZChzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKiAiIGZpcnN0aXRlbSwKKy5CSSAic3RydWN0IGN1cmxfaHR0cHBvc3QgKiogIiBsYXN0aXRlbSwgIiAuLi4pOyIKKy5hZAorLlNIIERFU0NSSVBUSU9OCitjdXJsX2Zvcm1hZGQoKSBpcyB1c2VkIHRvIGFwcGVuZCBzZWN0aW9ucyB3aGVuIGJ1aWxkaW5nIGEgbXVsdGlwYXJ0L2Zvcm1kYXRhCitIVFRQIFBPU1QgKHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBSRkMyMzg4LXN0eWxlIHBvc3RzKS4gQXBwZW5kIG9uZSBzZWN0aW9uCithdCBhIHRpbWUgdW50aWwgeW91J3ZlIGFkZGVkIGFsbCB0aGUgc2VjdGlvbnMgeW91IHdhbnQgaW5jbHVkZWQgYW5kIHRoZW4geW91CitwYXNzIHRoZSBcZklmaXJzdGl0ZW1cZlAgcG9pbnRlciBhcyBwYXJhbWV0ZXIgdG8gXGZCQ1VSTE9QVF9IVFRQUE9TVFxmUC4KK1xmSWxhc3RpdGVtXGZQIGlzIHNldCBhZnRlciBlYWNoIFxmSWN1cmxfZm9ybWFkZCgzKVxmUCBjYWxsIGFuZCBvbiByZXBlYXRlZAoraW52b2tlcyBpdCBzaG91bGQgYmUgbGVmdCBhcyBzZXQgdG8gYWxsb3cgcmVwZWF0ZWQgaW52b2tlcyB0byBmaW5kIHRoZSBlbmQgb2YKK3RoZSBsaXN0IGZhc3Rlci4KKworQWZ0ZXIgdGhlIFxmSWxhc3RpdGVtXGZQIHBvaW50ZXIgZm9sbG93IHRoZSByZWFsIGFyZ3VtZW50cy4KKworVGhlIHBvaW50ZXJzIFxmSWZpcnN0aXRlbVxmUCBhbmQgXGZJbGFzdGl0ZW1cZlAgc2hvdWxkIGJvdGggYmUgcG9pbnRpbmcgdG8KK05VTEwgaW4gdGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4gQWxsIGxpc3QtZGF0YSB3aWxsIGJlIGFsbG9jYXRlZCBieQordGhlIGZ1bmN0aW9uIGl0c2VsZi4gWW91IG11c3QgY2FsbCBcZkljdXJsX2Zvcm1mcmVlKDMpXGZQIG9uIHRoZQorXGZJZmlyc3RpdGVtXFAgYWZ0ZXIgdGhlIGZvcm0gcG9zdCBoYXMgYmVlbiBkb25lIHRvIGZyZWUgdGhlIHJlc291cmNlcy4KKworVXNpbmcgUE9TVCB3aXRoIEhUVFAgMS4xIGltcGxpZXMgdGhlIHVzZSBvZiBhICJFeHBlY3Q6IDEwMC1jb250aW51ZSIgaGVhZGVyLgorWW91IGNhbiBkaXNhYmxlIHRoaXMgaGVhZGVyIHdpdGggXGZJQ1VSTE9QVF9IVFRQSEVBREVSXGZQIGFzIHVzdWFsLgorCitGaXJzdCwgdGhlcmUgYXJlIHNvbWUgYmFzaWNzIHlvdSBuZWVkIHRvIHVuZGVyc3RhbmQgYWJvdXQgbXVsdGlwYXJ0L2Zvcm1kYXRhCitwb3N0cy4gRWFjaCBwYXJ0IGNvbnNpc3RzIG9mIGF0IGxlYXN0IGEgTkFNRSBhbmQgYSBDT05URU5UUyBwYXJ0LiBJZiB0aGUgcGFydAoraXMgbWFkZSBmb3IgZmlsZSB1cGxvYWQsIHRoZXJlIGFyZSBhbHNvIGEgc3RvcmVkIENPTlRFTlQtVFlQRSBhbmQgYSBGSUxFTkFNRS4KK0JlbG93LCB3ZSdsbCBkaXNjdXNzIHdoYXQgb3B0aW9ucyB5b3UgdXNlIHRvIHNldCB0aGVzZSBwcm9wZXJ0aWVzIGluIHRoZQorcGFydHMgeW91IHdhbnQgdG8gYWRkIHRvIHlvdXIgcG9zdC4KKworVGhlIG9wdGlvbnMgbGlzdGVkIGZpcnN0IGFyZSBmb3IgbWFraW5nIG5vcm1hbCBwYXJ0cy4gVGhlIG9wdGlvbnMgZnJvbQorXGZJQ1VSTEZPUk1fRklMRVxmUCB0aHJvdWdoIFxmSUNVUkxGT1JNX0JVRkZFUkxFTkdUSFxmUCBhcmUgZm9yIGZpbGUgdXBsb2FkCitwYXJ0cy4KKy5TSCBPUFRJT05TCisuSVAgQ1VSTEZPUk1fQ09QWU5BTUUKK2ZvbGxvd2VkIGJ5IGEgc3RyaW5nIHdoaWNoIHByb3ZpZGVzIHRoZSBcZkluYW1lXGZQIG9mIHRoaXMgcGFydC4gbGliY3VybAorY29waWVzIHRoZSBzdHJpbmcgc28geW91ciBhcHBsaWNhdGlvbiBkb2Vzbid0IG5lZWQgdG8ga2VlcCBpdCBhcm91bmQgYWZ0ZXIKK3RoaXMgZnVuY3Rpb24gY2FsbC4gSWYgdGhlIG5hbWUgaXNuJ3QgTlVMLXRlcm1pbmF0ZWQsIG9yIGlmIHlvdSdkCitsaWtlIGl0IHRvIGNvbnRhaW4gemVybyBieXRlcywgeW91IG11c3Qgc2V0IGl0cyBsZW5ndGggd2l0aAorXGZCQ1VSTEZPUk1fTkFNRUxFTkdUSFxmUC4gVGhlIGNvcGllZCBkYXRhIHdpbGwgYmUgZnJlZWQgYnkKK1xmSWN1cmxfZm9ybWZyZWUoMylcZlAuCisuSVAgQ1VSTEZPUk1fUFRSTkFNRQorZm9sbG93ZWQgYnkgYSBzdHJpbmcgd2hpY2ggcHJvdmlkZXMgdGhlIFxmSW5hbWVcZlAgb2YgdGhpcyBwYXJ0LiBsaWJjdXJsCit3aWxsIHVzZSB0aGUgcG9pbnRlciBhbmQgcmVmZXIgdG8gdGhlIGRhdGEgaW4geW91ciBhcHBsaWNhdGlvbiwgc28geW91CittdXN0IG1ha2Ugc3VyZSBpdCByZW1haW5zIHVudGlsIGN1cmwgbm8gbG9uZ2VyIG5lZWRzIGl0LiBJZiB0aGUgbmFtZQoraXNuJ3QgTlVMLXRlcm1pbmF0ZWQsIG9yIGlmIHlvdSdkIGxpa2UgaXQgdG8gY29udGFpbiB6ZXJvCitieXRlcywgeW91IG11c3Qgc2V0IGl0cyBsZW5ndGggd2l0aCBcZkJDVVJMRk9STV9OQU1FTEVOR1RIXGZQLgorLklQIENVUkxGT1JNX0NPUFlDT05URU5UUworZm9sbG93ZWQgYnkgYSBwb2ludGVyIHRvIHRoZSBjb250ZW50cyBvZiB0aGlzIHBhcnQsIHRoZSBhY3R1YWwgZGF0YQordG8gc2VuZCBhd2F5LiBsaWJjdXJsIGNvcGllcyB0aGUgcHJvdmlkZWQgZGF0YSwgc28geW91ciBhcHBsaWNhdGlvbiBkb2Vzbid0CituZWVkIHRvIGtlZXAgaXQgYXJvdW5kIGFmdGVyIHRoaXMgZnVuY3Rpb24gY2FsbC4gSWYgdGhlIGRhdGEgaXNuJ3QgbnVsbAordGVybWluYXRlZCwgb3IgaWYgeW91J2QgbGlrZSBpdCB0byBjb250YWluIHplcm8gYnl0ZXMsIHlvdSBtdXN0CitzZXQgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSB3aXRoIFxmQkNVUkxGT1JNX0NPTlRFTlRTTEVOR1RIXGZQLiBUaGUgY29waWVkCitkYXRhIHdpbGwgYmUgZnJlZWQgYnkgXGZJY3VybF9mb3JtZnJlZSgzKVxmUC4KKy5JUCBDVVJMRk9STV9QVFJDT05URU5UUworZm9sbG93ZWQgYnkgYSBwb2ludGVyIHRvIHRoZSBjb250ZW50cyBvZiB0aGlzIHBhcnQsIHRoZSBhY3R1YWwgZGF0YQordG8gc2VuZCBhd2F5LiBsaWJjdXJsIHdpbGwgdXNlIHRoZSBwb2ludGVyIGFuZCByZWZlciB0byB0aGUgZGF0YSBpbiB5b3VyCithcHBsaWNhdGlvbiwgc28geW91IG11c3QgbWFrZSBzdXJlIGl0IHJlbWFpbnMgdW50aWwgY3VybCBubyBsb25nZXIgbmVlZHMgaXQuCitJZiB0aGUgZGF0YSBpc24ndCBOVUwtdGVybWluYXRlZCwgb3IgaWYgeW91J2QgbGlrZSBpdCB0byBjb250YWluIHplcm8gYnl0ZXMsCit5b3UgbXVzdCBzZXQgaXRzIGxlbmd0aCAgd2l0aCBcZkJDVVJMRk9STV9DT05URU5UU0xFTkdUSFxmUC4KKy5JUCBDVVJMRk9STV9DT05URU5UU0xFTkdUSAorZm9sbG93ZWQgYnkgYSBsb25nIGdpdmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBjb250ZW50cy4gTm90ZSB0aGF0IGZvcgorXGZJQ1VSTEZPUk1fU1RSRUFNXGZQIGNvbnRlbnRzLCB0aGlzIG9wdGlvbiBpcyBtYW5kYXRvcnkuCisuSVAgQ1VSTEZPUk1fRklMRUNPTlRFTlQKK2ZvbGxvd2VkIGJ5IGEgZmlsZW5hbWUsIGNhdXNlcyB0aGF0IGZpbGUgdG8gYmUgcmVhZCBhbmQgaXRzIGNvbnRlbnRzIHVzZWQKK2FzIGRhdGEgaW4gdGhpcyBwYXJ0LiBUaGlzIHBhcnQgZG9lcyBcZklub3RcZlAgYXV0b21hdGljYWxseSBiZWNvbWUgYSBmaWxlCit1cGxvYWQgcGFydCBzaW1wbHkgYmVjYXVzZSBpdHMgZGF0YSB3YXMgcmVhZCBmcm9tIGEgZmlsZS4KKy5JUCBDVVJMRk9STV9GSUxFCitmb2xsb3dlZCBieSBhIGZpbGVuYW1lLCBtYWtlcyB0aGlzIHBhcnQgYSBmaWxlIHVwbG9hZCBwYXJ0LiBJdCBzZXRzIHRoZQorXGZJZmlsZW5hbWVcZlAgZmllbGQgdG8gdGhlIGJhc2VuYW1lIG9mIHRoZSBwcm92aWRlZCBmaWxlbmFtZSwgaXQgcmVhZHMgdGhlCitjb250ZW50cyBvZiB0aGUgZmlsZSBhbmQgcGFzc2VzIHRoZW0gYXMgZGF0YSBhbmQgc2V0cyB0aGUgY29udGVudC10eXBlIGlmIHRoZQorZ2l2ZW4gZmlsZSBtYXRjaCBvbmUgb2YgdGhlIGludGVybmFsbHkga25vd24gZmlsZSBleHRlbnNpb25zLiAgRm9yCitcZkJDVVJMRk9STV9GSUxFXGZQIHRoZSB1c2VyIG1heSBzZW5kIG9uZSBvciBtb3JlIGZpbGVzIGluIG9uZSBwYXJ0IGJ5Citwcm92aWRpbmcgbXVsdGlwbGUgXGZCQ1VSTEZPUk1fRklMRVxmUCBhcmd1bWVudHMgZWFjaCBmb2xsb3dlZCBieSB0aGUgZmlsZW5hbWUKKyhhbmQgZWFjaCBcZklDVVJMRk9STV9GSUxFXGZQIGlzIGFsbG93ZWQgdG8gaGF2ZSBhCitcZklDVVJMRk9STV9DT05URU5UVFlQRVxmUCkuCisuSVAgQ1VSTEZPUk1fQ09OVEVOVFRZUEUKK2lzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBcZklDVVJMRk9STV9GSUxFXGZQLiBGb2xsb3dlZCBieSBhIHBvaW50ZXIgdG8gYQorc3RyaW5nIHdoaWNoIHByb3ZpZGVzIHRoZSBjb250ZW50LXR5cGUgZm9yIHRoaXMgcGFydCwgcG9zc2libHkgaW5zdGVhZCBvZiBhbgoraW50ZXJuYWxseSBjaG9zZW4gb25lLgorLklQIENVUkxGT1JNX0ZJTEVOQU1FCitpcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggXGZJQ1VSTEZPUk1fRklMRVxmUC4gRm9sbG93ZWQgYnkgYSBwb2ludGVyIHRvIGEKK3N0cmluZywgaXQgdGVsbHMgbGliY3VybCB0byB1c2UgdGhlIGdpdmVuIHN0cmluZyBhcyB0aGUgXGZJZmlsZW5hbWVcZlAgaW4gdGhlCitmaWxlIHVwbG9hZCBwYXJ0IGluc3RlYWQgb2YgdGhlIGFjdHVhbCBmaWxlIG5hbWUuCisuSVAgQ1VSTEZPUk1fQlVGRkVSCitpcyB1c2VkIGZvciBjdXN0b20gZmlsZSB1cGxvYWQgcGFydHMgd2l0aG91dCB1c2Ugb2YgXGZJQ1VSTEZPUk1fRklMRVxmUC4gIEl0Cit0ZWxscyBsaWJjdXJsIHRoYXQgdGhlIGZpbGUgY29udGVudHMgYXJlIGFscmVhZHkgcHJlc2VudCBpbiBhIGJ1ZmZlci4gIFRoZQorcGFyYW1ldGVyIGlzIGEgc3RyaW5nIHdoaWNoIHByb3ZpZGVzIHRoZSBcZklmaWxlbmFtZVxmUCBmaWVsZCBpbiB0aGUgY29udGVudAoraGVhZGVyLgorLklQIENVUkxGT1JNX0JVRkZFUlBUUgoraXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIFxmSUNVUkxGT1JNX0JVRkZFUlxmUC4gVGhlIHBhcmFtZXRlciBpcyBhIHBvaW50ZXIKK3RvIHRoZSBidWZmZXIgdG8gYmUgdXBsb2FkZWQuIFRoaXMgYnVmZmVyIG11c3Qgbm90IGJlIGZyZWVkIHVudGlsIGFmdGVyCitcZkljdXJsX2Vhc3lfY2xlYW51cCgzKVxmUCBpcyBjYWxsZWQuIFlvdSBtdXN0IGFsc28gdXNlCitcZklDVVJMRk9STV9CVUZGRVJMRU5HVEhcZlAgdG8gc2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlci4KKy5JUCBDVVJMRk9STV9CVUZGRVJMRU5HVEgKK2lzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBcZklDVVJMRk9STV9CVUZGRVJcZlAuIFRoZSBwYXJhbWV0ZXIgaXMgYQorbG9uZyB3aGljaCBnaXZlcyB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIuCisuSVAgQ1VSTEZPUk1fU1RSRUFNCitUZWxscyBsaWJjdXJsIHRvIHVzZSB0aGUgXGZJQ1VSTE9QVF9SRUFERlVOQ1RJT05cZlAgY2FsbGJhY2sgdG8gZ2V0IGRhdGEuIFRoZQorcGFyYW1ldGVyIHlvdSBwYXNzIHRvIFxmSUNVUkxGT1JNX1NUUkVBTVxmUCBpcyB0aGUgcG9pbnRlciBwYXNzZWQgb24gdG8gdGhlCityZWFkIGNhbGxiYWNrJ3MgZm91cnRoIGFyZ3VtZW50LiBJZiB5b3Ugd2FudCB0aGUgcGFydCB0byBsb29rIGxpa2UgYSBmaWxlCit1cGxvYWQgb25lLCBzZXQgdGhlIFxmSUNVUkxGT1JNX0ZJTEVOQU1FXGZQIHBhcmFtZXRlciBhcyB3ZWxsLiBOb3RlIHRoYXQgd2hlbgordXNpbmcgXGZJQ1VSTEZPUk1fU1RSRUFNXGZQLCBcZklDVVJMRk9STV9DT05URU5UU0xFTkdUSFxmUCBtdXN0IGFsc28gYmUgc2V0Cit3aXRoIHRoZSB0b3RhbCBleHBlY3RlZCBsZW5ndGggb2YgdGhlIHBhcnQuIChPcHRpb24gYWRkZWQgaW4gbGliY3VybCA3LjE4LjIpCisuSVAgQ1VSTEZPUk1fQVJSQVkKK0Fub3RoZXIgcG9zc2liaWxpdHkgdG8gc2VuZCBvcHRpb25zIHRvIGN1cmxfZm9ybWFkZCgpIGlzIHRoZQorXGZCQ1VSTEZPUk1fQVJSQVlcZlAgb3B0aW9uLCB0aGF0IHBhc3NlcyBhIHN0cnVjdCBjdXJsX2Zvcm1zIGFycmF5IHBvaW50ZXIgYXMKK2l0cyB2YWx1ZS4gRWFjaCBjdXJsX2Zvcm1zIHN0cnVjdHVyZSBlbGVtZW50IGhhcyBhIENVUkxmb3Jtb3B0aW9uIGFuZCBhIGNoYXIKK3BvaW50ZXIuIFRoZSBmaW5hbCBlbGVtZW50IGluIHRoZSBhcnJheSBtdXN0IGJlIGEgQ1VSTEZPUk1fRU5ELiBBbGwgYXZhaWxhYmxlCitvcHRpb25zIGNhbiBiZSB1c2VkIGluIGFuIGFycmF5LCBleGNlcHQgdGhlIENVUkxGT1JNX0FSUkFZIG9wdGlvbiBpdHNlbGYhICBUaGUKK2xhc3QgYXJndW1lbnQgaW4gc3VjaCBhbiBhcnJheSBtdXN0IGFsd2F5cyBiZSBcZkJDVVJMRk9STV9FTkRcZlAuCisuSVAgQ1VSTEZPUk1fQ09OVEVOVEhFQURFUgorc3BlY2lmaWVzIGV4dHJhIGhlYWRlcnMgZm9yIHRoZSBmb3JtIFBPU1Qgc2VjdGlvbi4gIFRoaXMgdGFrZXMgYSBjdXJsX3NsaXN0CitwcmVwYXJlZCBpbiB0aGUgdXN1YWwgd2F5IHVzaW5nIFxmQmN1cmxfc2xpc3RfYXBwZW5kXGZQIGFuZCBhcHBlbmRzIHRoZSBsaXN0CitvZiBoZWFkZXJzIHRvIHRob3NlIGxpYmN1cmwgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMuIFRoZSBsaXN0IG11c3QgZXhpc3Qgd2hpbGUKK3RoZSBQT1NUIG9jY3VycywgaWYgeW91IGZyZWUgaXQgYmVmb3JlIHRoZSBwb3N0IGNvbXBsZXRlcyB5b3UgbWF5IGV4cGVyaWVuY2UKK3Byb2JsZW1zLgorCitXaGVuIHlvdSd2ZSBwYXNzZWQgdGhlIEh0dHBQb3N0IHBvaW50ZXIgdG8gXGZJY3VybF9lYXN5X3NldG9wdCgzKVxmUCAodXNpbmcKK3RoZSBcZklDVVJMT1BUX0hUVFBQT1NUXGZQIG9wdGlvbiksIHlvdSBtdXN0IG5vdCBmcmVlIHRoZSBsaXN0IHVudGlsIGFmdGVyCit5b3UndmUgY2FsbGVkIFxmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQIGZvciB0aGUgY3VybCBoYW5kbGUuCisKK1NlZSBleGFtcGxlIGJlbG93LgorLlNIIFJFVFVSTiBWQUxVRQorMCBtZWFucyBldmVyeXRoaW5nIHdhcyBvaywgbm9uLXplcm8gbWVhbnMgYW4gZXJyb3Igb2NjdXJyZWQgY29ycmVzcG9uZGluZwordG8gYSBDVVJMX0ZPUk1BRERfKiBjb25zdGFudCBkZWZpbmVkIGluCisuSSA8Y3VybC9jdXJsLmg+CisuU0ggRVhBTVBMRQorLm5mCisKKyBzdHJ1Y3QgY3VybF9odHRwcG9zdCogcG9zdCA9IE5VTEw7Cisgc3RydWN0IGN1cmxfaHR0cHBvc3QqIGxhc3QgPSBOVUxMOworIGNoYXIgbmFtZWJ1ZmZlcltdID0gIm5hbWUgYnVmZmVyIjsKKyBsb25nIG5hbWVsZW5ndGggPSBzdHJsZW4obmFtZWJ1ZmZlcik7CisgY2hhciBidWZmZXJbXSA9ICJ0ZXN0IGJ1ZmZlciI7CisgY2hhciBodG1sYnVmZmVyW10gPSAiPEhUTUw+dGVzdCBidWZmZXI8L0hUTUw+IjsKKyBsb25nIGh0bWxidWZmZXJsZW5ndGggPSBzdHJsZW4oaHRtbGJ1ZmZlcik7Cisgc3RydWN0IGN1cmxfZm9ybXMgZm9ybXNbM107CisgY2hhciBmaWxlMVtdID0gIm15LWZhY2UuanBnIjsKKyBjaGFyIGZpbGUyW10gPSAieW91ci1mYWNlLmpwZyI7CisgLyogYWRkIG51bGwgY2hhcmFjdGVyIGludG8gaHRtbGJ1ZmZlciwgdG8gZGVtb25zdHJhdGUgdGhhdAorICAgIHRyYW5zZmVycyBvZiBidWZmZXJzIGNvbnRhaW5pbmcgbnVsbCBjaGFyYWN0ZXJzIGFjdHVhbGx5IHdvcmsKKyAqLworIGh0bWxidWZmZXJbOF0gPSAnXFwwJzsKKworIC8qIEFkZCBzaW1wbGUgbmFtZS9jb250ZW50IHNlY3Rpb24gKi8KKyBjdXJsX2Zvcm1hZGQoJnBvc3QsICZsYXN0LCBDVVJMRk9STV9DT1BZTkFNRSwgIm5hbWUiLAorICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZQ09OVEVOVFMsICJjb250ZW50IiwgQ1VSTEZPUk1fRU5EKTsKKworIC8qIEFkZCBzaW1wbGUgbmFtZS9jb250ZW50L2NvbnRlbnR0eXBlIHNlY3Rpb24gKi8KKyBjdXJsX2Zvcm1hZGQoJnBvc3QsICZsYXN0LCBDVVJMRk9STV9DT1BZTkFNRSwgImh0bWxjb2RlIiwKKyAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLCAiPEhUTUw+PC9IVE1MPiIsCisgICAgICAgICAgICAgIENVUkxGT1JNX0NPTlRFTlRUWVBFLCAidGV4dC9odG1sIiwgQ1VSTEZPUk1fRU5EKTsKKworIC8qIEFkZCBuYW1lL3B0cmNvbnRlbnQgc2VjdGlvbiAqLworIGN1cmxfZm9ybWFkZCgmcG9zdCwgJmxhc3QsIENVUkxGT1JNX0NPUFlOQU1FLCAibmFtZV9mb3JfcHRyY29udGVudCIsCisgICAgICAgICAgICAgIENVUkxGT1JNX1BUUkNPTlRFTlRTLCBidWZmZXIsIENVUkxGT1JNX0VORCk7CisKKyAvKiBBZGQgcHRybmFtZS9wdHJjb250ZW50IHNlY3Rpb24gKi8KKyBjdXJsX2Zvcm1hZGQoJnBvc3QsICZsYXN0LCBDVVJMRk9STV9QVFJOQU1FLCBuYW1lYnVmZmVyLAorICAgICAgICAgICAgICBDVVJMRk9STV9QVFJDT05URU5UUywgYnVmZmVyLCBDVVJMRk9STV9OQU1FTEVOR1RILAorICAgICAgICAgICAgICBuYW1lbGVuZ3RoLCBDVVJMRk9STV9FTkQpOworCisgLyogQWRkIG5hbWUvcHRyY29udGVudC9jb250ZW50dHlwZSBzZWN0aW9uICovCisgY3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJodG1sX2NvZGVfd2l0aF9ob2xlIiwKKyAgICAgICAgICAgICAgQ1VSTEZPUk1fUFRSQ09OVEVOVFMsIGh0bWxidWZmZXIsCisgICAgICAgICAgICAgIENVUkxGT1JNX0NPTlRFTlRTTEVOR1RILCBodG1sYnVmZmVybGVuZ3RoLAorICAgICAgICAgICAgICBDVVJMRk9STV9DT05URU5UVFlQRSwgInRleHQvaHRtbCIsIENVUkxGT1JNX0VORCk7CisKKyAvKiBBZGQgc2ltcGxlIGZpbGUgc2VjdGlvbiAqLworIGN1cmxfZm9ybWFkZCgmcG9zdCwgJmxhc3QsIENVUkxGT1JNX0NPUFlOQU1FLCAicGljdHVyZSIsCisgICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsICJteS1mYWNlLmpwZyIsIENVUkxGT1JNX0VORCk7CisKKyAvKiBBZGQgZmlsZS9jb250ZW50dHlwZSBzZWN0aW9uICovCisgY3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJwaWN0dXJlIiwKKyAgICAgICAgICAgICAgQ1VSTEZPUk1fRklMRSwgIm15LWZhY2UuanBnIiwKKyAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09OVEVOVFRZUEUsICJpbWFnZS9qcGVnIiwgQ1VSTEZPUk1fRU5EKTsKKworIC8qIEFkZCB0d28gZmlsZSBzZWN0aW9uICovCisgY3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJwaWN0dXJlcyIsCisgICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsICJteS1mYWNlLmpwZyIsCisgICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsICJ5b3VyLWZhY2UuanBnIiwgQ1VSTEZPUk1fRU5EKTsKKworIC8qIEFkZCB0d28gZmlsZSBzZWN0aW9uIHVzaW5nIENVUkxGT1JNX0FSUkFZICovCisgZm9ybXNbMF0ub3B0aW9uID0gQ1VSTEZPUk1fRklMRTsKKyBmb3Jtc1swXS52YWx1ZSAgPSBmaWxlMTsKKyBmb3Jtc1sxXS5vcHRpb24gPSBDVVJMRk9STV9GSUxFOworIGZvcm1zWzFdLnZhbHVlICA9IGZpbGUyOworIGZvcm1zWzJdLm9wdGlvbiAgPSBDVVJMRk9STV9FTkQ7CisKKyAvKiBBZGQgYSBidWZmZXIgdG8gdXBsb2FkICovCisgY3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwKKyAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJuYW1lIiwKKyAgICAgICAgICAgICAgQ1VSTEZPUk1fQlVGRkVSLCAiZGF0YSIsCisgICAgICAgICAgICAgIENVUkxGT1JNX0JVRkZFUlBUUiwgcmVjb3JkLAorICAgICAgICAgICAgICBDVVJMRk9STV9CVUZGRVJMRU5HVEgsIHJlY29yZF9sZW5ndGgsCisgICAgICAgICAgICAgIENVUkxGT1JNX0VORCk7CisKKyAvKiBubyBvcHRpb24gbmVlZGVkIGZvciB0aGUgZW5kIG1hcmtlciAqLworIGN1cmxfZm9ybWFkZCgmcG9zdCwgJmxhc3QsIENVUkxGT1JNX0NPUFlOQU1FLCAicGljdHVyZXMiLAorICAgICAgICAgICAgICBDVVJMRk9STV9BUlJBWSwgZm9ybXMsIENVUkxGT1JNX0VORCk7CisgLyogQWRkIHRoZSBjb250ZW50IG9mIGEgZmlsZSBhcyBhIG5vcm1hbCBwb3N0IHRleHQgdmFsdWUgKi8KKyBjdXJsX2Zvcm1hZGQoJnBvc3QsICZsYXN0LCBDVVJMRk9STV9DT1BZTkFNRSwgImZpbGVjb250ZW50IiwKKyAgICAgICAgICAgICAgQ1VSTEZPUk1fRklMRUNPTlRFTlQsICIuYmFzaHJjIiwgQ1VSTEZPUk1fRU5EKTsKKyAvKiBTZXQgdGhlIGZvcm0gaW5mbyAqLworIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IVFRQUE9TVCwgcG9zdCk7CisKKy5TSCAiU0VFIEFMU08iCisuQlIgY3VybF9lYXN5X3NldG9wdCAiKDMpLCAiCisuQlIgY3VybF9mb3JtZnJlZSAiKDMpIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZm9ybWFkZC5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZm9ybWFkZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YjlhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mb3JtYWRkLmh0bWwKQEAgLTAsMCArMSwxMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX2Zvcm1hZGQgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9mb3JtYWRkIC0gYWRkIGEgc2VjdGlvbiB0byBhIG11bHRpcGFydC9mb3JtZGF0YSBIVFRQIFBPU1QgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj4jaW5jbHVkZSAmbHQ7Y3VybC9jdXJsLmgmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5DVVJMRk9STWNvZGUgY3VybF9mb3JtYWRkKHN0cnVjdCBjdXJsX2h0dHBwb3N0ICoqICBmaXJzdGl0ZW0sPC9zcGFuPiA8c3BhbiBDbGFzcz0iYm9sZCI+c3RydWN0IGN1cmxfaHR0cHBvc3QgKiogIGxhc3RpdGVtLCAgLi4uKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfZm9ybWFkZCgpIGlzIHVzZWQgdG8gYXBwZW5kIHNlY3Rpb25zIHdoZW4gYnVpbGRpbmcgYSBtdWx0aXBhcnQvZm9ybWRhdGEgSFRUUCBQT1NUIChzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjM4OC50eHQiPlJGQyAyMzg4PC9hPi1zdHlsZSBwb3N0cykuIEFwcGVuZCBvbmUgc2VjdGlvbiBhdCBhIHRpbWUgdW50aWwgeW91J3ZlIGFkZGVkIGFsbCB0aGUgc2VjdGlvbnMgeW91IHdhbnQgaW5jbHVkZWQgYW5kIHRoZW4geW91IHBhc3MgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Zmlyc3RpdGVtPC9zcGFuPiBwb2ludGVyIGFzIHBhcmFtZXRlciB0byA8c3BhbiBDbGFzcz0iYm9sZCI+Q1VSTE9QVF9IVFRQUE9TVDwvc3Bhbj4uIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGFzdGl0ZW08L3NwYW4+IGlzIHNldCBhZnRlciBlYWNoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Zvcm1hZGQuaHRtbCI+Y3VybF9mb3JtYWRkKDMpPC9hPiBjYWxsIGFuZCBvbiByZXBlYXRlZCBpbnZva2VzIGl0IHNob3VsZCBiZSBsZWZ0IGFzIHNldCB0byBhbGxvdyByZXBlYXRlZCBpbnZva2VzIHRvIGZpbmQgdGhlIGVuZCBvZiB0aGUgbGlzdCBmYXN0ZXIuIAorPHAgY2xhc3M9ImxldmVsMCI+QWZ0ZXIgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGFzdGl0ZW08L3NwYW4+IHBvaW50ZXIgZm9sbG93IHRoZSByZWFsIGFyZ3VtZW50cy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgcG9pbnRlcnMgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5maXJzdGl0ZW08L3NwYW4+IGFuZCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmxhc3RpdGVtPC9zcGFuPiBzaG91bGQgYm90aCBiZSBwb2ludGluZyB0byBOVUxMIGluIHRoZSBmaXJzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uIEFsbCBsaXN0LWRhdGEgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhlIGZ1bmN0aW9uIGl0c2VsZi4gWW91IG11c3QgY2FsbCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9mb3JtZnJlZS5odG1sIj5jdXJsX2Zvcm1mcmVlKDMpPC9hPiBvbiB0aGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj5maXJzdGl0ZW1QIGFmdGVyIHRoZSBmb3JtIHBvc3QgaGFzIGJlZW4gZG9uZSB0byBmcmVlIHRoZSByZXNvdXJjZXMuIAorPHAgY2xhc3M9ImxldmVsMCI+VXNpbmcgUE9TVCB3aXRoIEhUVFAgMS4xIGltcGxpZXMgdGhlIHVzZSBvZiBhICJFeHBlY3Q6IDEwMC1jb250aW51ZSIgaGVhZGVyLiBZb3UgY2FuIGRpc2FibGUgdGhpcyBoZWFkZXIgd2l0aCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxPUFRfSFRUUEhFQURFUjwvc3Bhbj4gYXMgdXN1YWwuIAorPHAgY2xhc3M9ImxldmVsMCI+Rmlyc3QsIHRoZXJlIGFyZSBzb21lIGJhc2ljcyB5b3UgbmVlZCB0byB1bmRlcnN0YW5kIGFib3V0IG11bHRpcGFydC9mb3JtZGF0YSBwb3N0cy4gRWFjaCBwYXJ0IGNvbnNpc3RzIG9mIGF0IGxlYXN0IGEgTkFNRSBhbmQgYSBDT05URU5UUyBwYXJ0LiBJZiB0aGUgcGFydCBpcyBtYWRlIGZvciBmaWxlIHVwbG9hZCwgdGhlcmUgYXJlIGFsc28gYSBzdG9yZWQgQ09OVEVOVC1UWVBFIGFuZCBhIEZJTEVOQU1FLiBCZWxvdywgd2UnbGwgZGlzY3VzcyB3aGF0IG9wdGlvbnMgeW91IHVzZSB0byBzZXQgdGhlc2UgcHJvcGVydGllcyBpbiB0aGUgcGFydHMgeW91IHdhbnQgdG8gYWRkIHRvIHlvdXIgcG9zdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgb3B0aW9ucyBsaXN0ZWQgZmlyc3QgYXJlIGZvciBtYWtpbmcgbm9ybWFsIHBhcnRzLiBUaGUgb3B0aW9ucyBmcm9tIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxGT1JNRklMRSI+Q1VSTEZPUk1fRklMRTwvYT4gdGhyb3VnaCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMRk9STUJVRkZFUkxFTkdUSCI+Q1VSTEZPUk1fQlVGRkVSTEVOR1RIPC9hPiBhcmUgZm9yIGZpbGUgdXBsb2FkIHBhcnRzLiA8YSBuYW1lPSJPUFRJT05TIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5PUFRJT05TPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEZPUk1DT1BZTkFNRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRk9STV9DT1BZTkFNRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5mb2xsb3dlZCBieSBhIHN0cmluZyB3aGljaCBwcm92aWRlcyB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5uYW1lPC9zcGFuPiBvZiB0aGlzIHBhcnQuIGxpYmN1cmwgY29waWVzIHRoZSBzdHJpbmcgc28geW91ciBhcHBsaWNhdGlvbiBkb2Vzbid0IG5lZWQgdG8ga2VlcCBpdCBhcm91bmQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBjYWxsLiBJZiB0aGUgbmFtZSBpc24ndCBOVUwtdGVybWluYXRlZCwgb3IgaWYgeW91J2QgbGlrZSBpdCB0byBjb250YWluIHplcm8gYnl0ZXMsIHlvdSBtdXN0IHNldCBpdHMgbGVuZ3RoIHdpdGggPHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxGT1JNX05BTUVMRU5HVEg8L3NwYW4+LiBUaGUgY29waWVkIGRhdGEgd2lsbCBiZSBmcmVlZCBieSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9mb3JtZnJlZS5odG1sIj5jdXJsX2Zvcm1mcmVlKDMpPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRk9STVBUUk5BTUUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEZPUk1fUFRSTkFNRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5mb2xsb3dlZCBieSBhIHN0cmluZyB3aGljaCBwcm92aWRlcyB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5uYW1lPC9zcGFuPiBvZiB0aGlzIHBhcnQuIGxpYmN1cmwgd2lsbCB1c2UgdGhlIHBvaW50ZXIgYW5kIHJlZmVyIHRvIHRoZSBkYXRhIGluIHlvdXIgYXBwbGljYXRpb24sIHNvIHlvdSBtdXN0IG1ha2Ugc3VyZSBpdCByZW1haW5zIHVudGlsIGN1cmwgbm8gbG9uZ2VyIG5lZWRzIGl0LiBJZiB0aGUgbmFtZSBpc24ndCBOVUwtdGVybWluYXRlZCwgb3IgaWYgeW91J2QgbGlrZSBpdCB0byBjb250YWluIHplcm8gYnl0ZXMsIHlvdSBtdXN0IHNldCBpdHMgbGVuZ3RoIHdpdGggPHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxGT1JNX05BTUVMRU5HVEg8L3NwYW4+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxGT1JNQ09QWUNPTlRFTlRTIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxGT1JNX0NPUFlDT05URU5UUzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5mb2xsb3dlZCBieSBhIHBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoaXMgcGFydCwgdGhlIGFjdHVhbCBkYXRhIHRvIHNlbmQgYXdheS4gbGliY3VybCBjb3BpZXMgdGhlIHByb3ZpZGVkIGRhdGEsIHNvIHlvdXIgYXBwbGljYXRpb24gZG9lc24ndCBuZWVkIHRvIGtlZXAgaXQgYXJvdW5kIGFmdGVyIHRoaXMgZnVuY3Rpb24gY2FsbC4gSWYgdGhlIGRhdGEgaXNuJ3QgbnVsbCB0ZXJtaW5hdGVkLCBvciBpZiB5b3UnZCBsaWtlIGl0IHRvIGNvbnRhaW4gemVybyBieXRlcywgeW91IG11c3Qgc2V0IHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgd2l0aCA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iI0NVUkxGT1JNQ09OVEVOVFNMRU5HVEgiPkNVUkxGT1JNX0NPTlRFTlRTTEVOR1RIPC9hPi4gVGhlIGNvcGllZCBkYXRhIHdpbGwgYmUgZnJlZWQgYnkgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZm9ybWZyZWUuaHRtbCI+Y3VybF9mb3JtZnJlZSgzKTwvYT4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEZPUk1QVFJDT05URU5UUyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRk9STV9QVFJDT05URU5UUzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5mb2xsb3dlZCBieSBhIHBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoaXMgcGFydCwgdGhlIGFjdHVhbCBkYXRhIHRvIHNlbmQgYXdheS4gbGliY3VybCB3aWxsIHVzZSB0aGUgcG9pbnRlciBhbmQgcmVmZXIgdG8gdGhlIGRhdGEgaW4geW91ciBhcHBsaWNhdGlvbiwgc28geW91IG11c3QgbWFrZSBzdXJlIGl0IHJlbWFpbnMgdW50aWwgY3VybCBubyBsb25nZXIgbmVlZHMgaXQuIElmIHRoZSBkYXRhIGlzbid0IE5VTC10ZXJtaW5hdGVkLCBvciBpZiB5b3UnZCBsaWtlIGl0IHRvIGNvbnRhaW4gemVybyBieXRlcywgeW91IG11c3Qgc2V0IGl0cyBsZW5ndGggIHdpdGggPGEgY2xhc3M9ImJvbGQiIGhyZWY9IiNDVVJMRk9STUNPTlRFTlRTTEVOR1RIIj5DVVJMRk9STV9DT05URU5UU0xFTkdUSDwvYT4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEZPUk1DT05URU5UU0xFTkdUSCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRk9STV9DT05URU5UU0xFTkdUSDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5mb2xsb3dlZCBieSBhIGxvbmcgZ2l2aW5nIHRoZSBsZW5ndGggb2YgdGhlIGNvbnRlbnRzLiBOb3RlIHRoYXQgZm9yIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxGT1JNU1RSRUFNIj5DVVJMRk9STV9TVFJFQU08L2E+IGNvbnRlbnRzLCB0aGlzIG9wdGlvbiBpcyBtYW5kYXRvcnkuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEZPUk1GSUxFQ09OVEVOVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRk9STV9GSUxFQ09OVEVOVDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5mb2xsb3dlZCBieSBhIGZpbGVuYW1lLCBjYXVzZXMgdGhhdCBmaWxlIHRvIGJlIHJlYWQgYW5kIGl0cyBjb250ZW50cyB1c2VkIGFzIGRhdGEgaW4gdGhpcyBwYXJ0LiBUaGlzIHBhcnQgZG9lcyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPm5vdDwvc3Bhbj4gYXV0b21hdGljYWxseSBiZWNvbWUgYSBmaWxlIHVwbG9hZCBwYXJ0IHNpbXBseSBiZWNhdXNlIGl0cyBkYXRhIHdhcyByZWFkIGZyb20gYSBmaWxlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxGT1JNRklMRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRk9STV9GSUxFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPmZvbGxvd2VkIGJ5IGEgZmlsZW5hbWUsIG1ha2VzIHRoaXMgcGFydCBhIGZpbGUgdXBsb2FkIHBhcnQuIEl0IHNldHMgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+ZmlsZW5hbWU8L3NwYW4+IGZpZWxkIHRvIHRoZSBiYXNlbmFtZSBvZiB0aGUgcHJvdmlkZWQgZmlsZW5hbWUsIGl0IHJlYWRzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhbmQgcGFzc2VzIHRoZW0gYXMgZGF0YSBhbmQgc2V0cyB0aGUgY29udGVudC10eXBlIGlmIHRoZSBnaXZlbiBmaWxlIG1hdGNoIG9uZSBvZiB0aGUgaW50ZXJuYWxseSBrbm93biBmaWxlIGV4dGVuc2lvbnMuICBGb3IgPGEgY2xhc3M9ImJvbGQiIGhyZWY9IiNDVVJMRk9STUZJTEUiPkNVUkxGT1JNX0ZJTEU8L2E+IHRoZSB1c2VyIG1heSBzZW5kIG9uZSBvciBtb3JlIGZpbGVzIGluIG9uZSBwYXJ0IGJ5IHByb3ZpZGluZyBtdWx0aXBsZSA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iI0NVUkxGT1JNRklMRSI+Q1VSTEZPUk1fRklMRTwvYT4gYXJndW1lbnRzIGVhY2ggZm9sbG93ZWQgYnkgdGhlIGZpbGVuYW1lIChhbmQgZWFjaCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMRk9STUZJTEUiPkNVUkxGT1JNX0ZJTEU8L2E+IGlzIGFsbG93ZWQgdG8gaGF2ZSBhIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxGT1JNQ09OVEVOVFRZUEUiPkNVUkxGT1JNX0NPTlRFTlRUWVBFPC9hPikuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEZPUk1DT05URU5UVFlQRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRk9STV9DT05URU5UVFlQRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5pcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTEZPUk1GSUxFIj5DVVJMRk9STV9GSUxFPC9hPi4gRm9sbG93ZWQgYnkgYSBwb2ludGVyIHRvIGEgc3RyaW5nIHdoaWNoIHByb3ZpZGVzIHRoZSBjb250ZW50LXR5cGUgZm9yIHRoaXMgcGFydCwgcG9zc2libHkgaW5zdGVhZCBvZiBhbiBpbnRlcm5hbGx5IGNob3NlbiBvbmUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEZPUk1GSUxFTkFNRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRk9STV9GSUxFTkFNRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5pcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTEZPUk1GSUxFIj5DVVJMRk9STV9GSUxFPC9hPi4gRm9sbG93ZWQgYnkgYSBwb2ludGVyIHRvIGEgc3RyaW5nLCBpdCB0ZWxscyBsaWJjdXJsIHRvIHVzZSB0aGUgZ2l2ZW4gc3RyaW5nIGFzIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmZpbGVuYW1lPC9zcGFuPiBpbiB0aGUgZmlsZSB1cGxvYWQgcGFydCBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgZmlsZSBuYW1lLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxGT1JNQlVGRkVSIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxGT1JNX0JVRkZFUjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5pcyB1c2VkIGZvciBjdXN0b20gZmlsZSB1cGxvYWQgcGFydHMgd2l0aG91dCB1c2Ugb2YgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTEZPUk1GSUxFIj5DVVJMRk9STV9GSUxFPC9hPi4gIEl0IHRlbGxzIGxpYmN1cmwgdGhhdCB0aGUgZmlsZSBjb250ZW50cyBhcmUgYWxyZWFkeSBwcmVzZW50IGluIGEgYnVmZmVyLiAgVGhlIHBhcmFtZXRlciBpcyBhIHN0cmluZyB3aGljaCBwcm92aWRlcyB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5maWxlbmFtZTwvc3Bhbj4gZmllbGQgaW4gdGhlIGNvbnRlbnQgaGVhZGVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxGT1JNQlVGRkVSUFRSIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxGT1JNX0JVRkZFUlBUUjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5pcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTEZPUk1CVUZGRVIiPkNVUkxGT1JNX0JVRkZFUjwvYT4uIFRoZSBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gYmUgdXBsb2FkZWQuIFRoaXMgYnVmZmVyIG11c3Qgbm90IGJlIGZyZWVkIHVudGlsIGFmdGVyIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfY2xlYW51cC5odG1sIj5jdXJsX2Vhc3lfY2xlYW51cCgzKTwvYT4gaXMgY2FsbGVkLiBZb3UgbXVzdCBhbHNvIHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMRk9STUJVRkZFUkxFTkdUSCI+Q1VSTEZPUk1fQlVGRkVSTEVOR1RIPC9hPiB0byBzZXQgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxGT1JNQlVGRkVSTEVOR1RIIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxGT1JNX0JVRkZFUkxFTkdUSDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5pcyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTEZPUk1CVUZGRVIiPkNVUkxGT1JNX0JVRkZFUjwvYT4uIFRoZSBwYXJhbWV0ZXIgaXMgYSBsb25nIHdoaWNoIGdpdmVzIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRk9STVNUUkVBTSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRk9STV9TVFJFQU08L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGVsbHMgbGliY3VybCB0byB1c2UgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTE9QVF9SRUFERlVOQ1RJT048L3NwYW4+IGNhbGxiYWNrIHRvIGdldCBkYXRhLiBUaGUgcGFyYW1ldGVyIHlvdSBwYXNzIHRvIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxGT1JNU1RSRUFNIj5DVVJMRk9STV9TVFJFQU08L2E+IGlzIHRoZSBwb2ludGVyIHBhc3NlZCBvbiB0byB0aGUgcmVhZCBjYWxsYmFjaydzIGZvdXJ0aCBhcmd1bWVudC4gSWYgeW91IHdhbnQgdGhlIHBhcnQgdG8gbG9vayBsaWtlIGEgZmlsZSB1cGxvYWQgb25lLCBzZXQgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxGT1JNRklMRU5BTUUiPkNVUkxGT1JNX0ZJTEVOQU1FPC9hPiBwYXJhbWV0ZXIgYXMgd2VsbC4gTm90ZSB0aGF0IHdoZW4gdXNpbmcgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTEZPUk1TVFJFQU0iPkNVUkxGT1JNX1NUUkVBTTwvYT4sIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxGT1JNQ09OVEVOVFNMRU5HVEgiPkNVUkxGT1JNX0NPTlRFTlRTTEVOR1RIPC9hPiBtdXN0IGFsc28gYmUgc2V0IHdpdGggdGhlIHRvdGFsIGV4cGVjdGVkIGxlbmd0aCBvZiB0aGUgcGFydC4gKE9wdGlvbiBhZGRlZCBpbiBsaWJjdXJsIDcuMTguMikgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRk9STUFSUkFZIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxGT1JNX0FSUkFZPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFub3RoZXIgcG9zc2liaWxpdHkgdG8gc2VuZCBvcHRpb25zIHRvIGN1cmxfZm9ybWFkZCgpIGlzIHRoZSA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iI0NVUkxGT1JNQVJSQVkiPkNVUkxGT1JNX0FSUkFZPC9hPiBvcHRpb24sIHRoYXQgcGFzc2VzIGEgc3RydWN0IGN1cmxfZm9ybXMgYXJyYXkgcG9pbnRlciBhcyBpdHMgdmFsdWUuIEVhY2ggY3VybF9mb3JtcyBzdHJ1Y3R1cmUgZWxlbWVudCBoYXMgYSBDVVJMZm9ybW9wdGlvbiBhbmQgYSBjaGFyIHBvaW50ZXIuIFRoZSBmaW5hbCBlbGVtZW50IGluIHRoZSBhcnJheSBtdXN0IGJlIGEgQ1VSTEZPUk1fRU5ELiBBbGwgYXZhaWxhYmxlIG9wdGlvbnMgY2FuIGJlIHVzZWQgaW4gYW4gYXJyYXksIGV4Y2VwdCB0aGUgQ1VSTEZPUk1fQVJSQVkgb3B0aW9uIGl0c2VsZiEgIFRoZSBsYXN0IGFyZ3VtZW50IGluIHN1Y2ggYW4gYXJyYXkgbXVzdCBhbHdheXMgYmUgPHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxGT1JNX0VORDwvc3Bhbj4uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEZPUk1DT05URU5USEVBREVSIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxGT1JNX0NPTlRFTlRIRUFERVI8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+c3BlY2lmaWVzIGV4dHJhIGhlYWRlcnMgZm9yIHRoZSBmb3JtIFBPU1Qgc2VjdGlvbi4gIFRoaXMgdGFrZXMgYSBjdXJsX3NsaXN0IHByZXBhcmVkIGluIHRoZSB1c3VhbCB3YXkgdXNpbmcgPHNwYW4gQ2xhc3M9ImJvbGQiPmN1cmxfc2xpc3RfYXBwZW5kPC9zcGFuPiBhbmQgYXBwZW5kcyB0aGUgbGlzdCBvZiBoZWFkZXJzIHRvIHRob3NlIGxpYmN1cmwgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMuIFRoZSBsaXN0IG11c3QgZXhpc3Qgd2hpbGUgdGhlIFBPU1Qgb2NjdXJzLCBpZiB5b3UgZnJlZSBpdCBiZWZvcmUgdGhlIHBvc3QgY29tcGxldGVzIHlvdSBtYXkgZXhwZXJpZW5jZSBwcm9ibGVtcy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIHlvdSd2ZSBwYXNzZWQgdGhlIEh0dHBQb3N0IHBvaW50ZXIgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9zZXRvcHQuaHRtbCI+Y3VybF9lYXN5X3NldG9wdCgzKTwvYT4gKHVzaW5nIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxPUFRfSFRUUFBPU1Q8L3NwYW4+IG9wdGlvbiksIHlvdSBtdXN0IG5vdCBmcmVlIHRoZSBsaXN0IHVudGlsIGFmdGVyIHlvdSd2ZSBjYWxsZWQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9jbGVhbnVwLmh0bWwiPmN1cmxfZWFzeV9jbGVhbnVwKDMpPC9hPiBmb3IgdGhlIGN1cmwgaGFuZGxlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNlZSBleGFtcGxlIGJlbG93LiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4wIG1lYW5zIGV2ZXJ5dGhpbmcgd2FzIG9rLCBub24temVybyBtZWFucyBhbiBlcnJvciBvY2N1cnJlZCBjb3JyZXNwb25kaW5nIHRvIGEgQ1VSTF9GT1JNQUREXyogY29uc3RhbnQgZGVmaW5lZCBpbiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPiZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+IDxhIG5hbWU9IkVYQU1QTEUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkVYQU1QTEU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwO3N0cnVjdCBjdXJsX2h0dHBwb3N0KiBwb3N0ID0gTlVMTDsgJm5ic3A7c3RydWN0IGN1cmxfaHR0cHBvc3QqIGxhc3QgPSBOVUxMOyAmbmJzcDtjaGFyIG5hbWVidWZmZXJbXSA9ICJuYW1lIGJ1ZmZlciI7ICZuYnNwO2xvbmcgbmFtZWxlbmd0aCA9IHN0cmxlbihuYW1lYnVmZmVyKTsgJm5ic3A7Y2hhciBidWZmZXJbXSA9ICJ0ZXN0IGJ1ZmZlciI7ICZuYnNwO2NoYXIgaHRtbGJ1ZmZlcltdID0gIiZsdDtIVE1MJmd0O3Rlc3QgYnVmZmVyJmx0Oy9IVE1MJmd0OyI7ICZuYnNwO2xvbmcgaHRtbGJ1ZmZlcmxlbmd0aCA9IHN0cmxlbihodG1sYnVmZmVyKTsgJm5ic3A7c3RydWN0IGN1cmxfZm9ybXMgZm9ybXNbM107ICZuYnNwO2NoYXIgZmlsZTFbXSA9ICJteS1mYWNlLmpwZyI7ICZuYnNwO2NoYXIgZmlsZTJbXSA9ICJ5b3VyLWZhY2UuanBnIjsgJm5ic3A7LyogYWRkIG51bGwgY2hhcmFjdGVyIGludG8gaHRtbGJ1ZmZlciwgdG8gZGVtb25zdHJhdGUgdGhhdCAmbmJzcDsgICB0cmFuc2ZlcnMgb2YgYnVmZmVycyBjb250YWluaW5nIG51bGwgY2hhcmFjdGVycyBhY3R1YWxseSB3b3JrICZuYnNwOyovICZuYnNwO2h0bWxidWZmZXJbOF0gPSAnXDAnOyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOy8qIEFkZCBzaW1wbGUgbmFtZS9jb250ZW50IHNlY3Rpb24gKi8gJm5ic3A7Y3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJuYW1lIiwgJm5ic3A7ICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUywgImNvbnRlbnQiLCBDVVJMRk9STV9FTkQpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOy8qIEFkZCBzaW1wbGUgbmFtZS9jb250ZW50L2NvbnRlbnR0eXBlIHNlY3Rpb24gKi8gJm5ic3A7Y3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJodG1sY29kZSIsICZuYnNwOyAgICAgICAgICAgICBDVVJMRk9STV9DT1BZQ09OVEVOVFMsICImbHQ7SFRNTCZndDsmbHQ7L0hUTUwmZ3Q7IiwgJm5ic3A7ICAgICAgICAgICAgIENVUkxGT1JNX0NPTlRFTlRUWVBFLCAidGV4dC9odG1sIiwgQ1VSTEZPUk1fRU5EKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDsvKiBBZGQgbmFtZS9wdHJjb250ZW50IHNlY3Rpb24gKi8gJm5ic3A7Y3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJuYW1lX2Zvcl9wdHJjb250ZW50IiwgJm5ic3A7ICAgICAgICAgICAgIENVUkxGT1JNX1BUUkNPTlRFTlRTLCBidWZmZXIsIENVUkxGT1JNX0VORCk7IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7LyogQWRkIHB0cm5hbWUvcHRyY29udGVudCBzZWN0aW9uICovICZuYnNwO2N1cmxfZm9ybWFkZCgmcG9zdCwgJmxhc3QsIENVUkxGT1JNX1BUUk5BTUUsIG5hbWVidWZmZXIsICZuYnNwOyAgICAgICAgICAgICBDVVJMRk9STV9QVFJDT05URU5UUywgYnVmZmVyLCBDVVJMRk9STV9OQU1FTEVOR1RILCAmbmJzcDsgICAgICAgICAgICAgbmFtZWxlbmd0aCwgQ1VSTEZPUk1fRU5EKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDsvKiBBZGQgbmFtZS9wdHJjb250ZW50L2NvbnRlbnR0eXBlIHNlY3Rpb24gKi8gJm5ic3A7Y3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJodG1sX2NvZGVfd2l0aF9ob2xlIiwgJm5ic3A7ICAgICAgICAgICAgIENVUkxGT1JNX1BUUkNPTlRFTlRTLCBodG1sYnVmZmVyLCAmbmJzcDsgICAgICAgICAgICAgQ1VSTEZPUk1fQ09OVEVOVFNMRU5HVEgsIGh0bWxidWZmZXJsZW5ndGgsICZuYnNwOyAgICAgICAgICAgICBDVVJMRk9STV9DT05URU5UVFlQRSwgInRleHQvaHRtbCIsIENVUkxGT1JNX0VORCk7IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7LyogQWRkIHNpbXBsZSBmaWxlIHNlY3Rpb24gKi8gJm5ic3A7Y3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJwaWN0dXJlIiwgJm5ic3A7ICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsICJteS1mYWNlLmpwZyIsIENVUkxGT1JNX0VORCk7IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7LyogQWRkIGZpbGUvY29udGVudHR5cGUgc2VjdGlvbiAqLyAmbmJzcDtjdXJsX2Zvcm1hZGQoJnBvc3QsICZsYXN0LCBDVVJMRk9STV9DT1BZTkFNRSwgInBpY3R1cmUiLCAmbmJzcDsgICAgICAgICAgICAgQ1VSTEZPUk1fRklMRSwgIm15LWZhY2UuanBnIiwgJm5ic3A7ICAgICAgICAgICAgIENVUkxGT1JNX0NPTlRFTlRUWVBFLCAiaW1hZ2UvanBlZyIsIENVUkxGT1JNX0VORCk7IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7LyogQWRkIHR3byBmaWxlIHNlY3Rpb24gKi8gJm5ic3A7Y3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJwaWN0dXJlcyIsICZuYnNwOyAgICAgICAgICAgICBDVVJMRk9STV9GSUxFLCAibXktZmFjZS5qcGciLCAmbmJzcDsgICAgICAgICAgICAgQ1VSTEZPUk1fRklMRSwgInlvdXItZmFjZS5qcGciLCBDVVJMRk9STV9FTkQpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOy8qIEFkZCB0d28gZmlsZSBzZWN0aW9uIHVzaW5nIENVUkxGT1JNX0FSUkFZICovICZuYnNwO2Zvcm1zWzBdLm9wdGlvbiA9IENVUkxGT1JNX0ZJTEU7ICZuYnNwO2Zvcm1zWzBdLnZhbHVlICA9IGZpbGUxOyAmbmJzcDtmb3Jtc1sxXS5vcHRpb24gPSBDVVJMRk9STV9GSUxFOyAmbmJzcDtmb3Jtc1sxXS52YWx1ZSAgPSBmaWxlMjsgJm5ic3A7Zm9ybXNbMl0ub3B0aW9uICA9IENVUkxGT1JNX0VORDsgCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDsvKiBBZGQgYSBidWZmZXIgdG8gdXBsb2FkICovICZuYnNwO2N1cmxfZm9ybWFkZCgmcG9zdCwgJmxhc3QsICZuYnNwOyAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgIm5hbWUiLCAmbmJzcDsgICAgICAgICAgICAgQ1VSTEZPUk1fQlVGRkVSLCAiZGF0YSIsICZuYnNwOyAgICAgICAgICAgICBDVVJMRk9STV9CVUZGRVJQVFIsIHJlY29yZCwgJm5ic3A7ICAgICAgICAgICAgIENVUkxGT1JNX0JVRkZFUkxFTkdUSCwgcmVjb3JkX2xlbmd0aCwgJm5ic3A7ICAgICAgICAgICAgIENVUkxGT1JNX0VORCk7IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Lyogbm8gb3B0aW9uIG5lZWRlZCBmb3IgdGhlIGVuZCBtYXJrZXIgKi8gJm5ic3A7Y3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJwaWN0dXJlcyIsICZuYnNwOyAgICAgICAgICAgICBDVVJMRk9STV9BUlJBWSwgZm9ybXMsIENVUkxGT1JNX0VORCk7ICZuYnNwOy8qIEFkZCB0aGUgY29udGVudCBvZiBhIGZpbGUgYXMgYSBub3JtYWwgcG9zdCB0ZXh0IHZhbHVlICovICZuYnNwO2N1cmxfZm9ybWFkZCgmcG9zdCwgJmxhc3QsIENVUkxGT1JNX0NPUFlOQU1FLCAiZmlsZWNvbnRlbnQiLCAmbmJzcDsgICAgICAgICAgICAgQ1VSTEZPUk1fRklMRUNPTlRFTlQsICIuYmFzaHJjIiwgQ1VSTEZPUk1fRU5EKTsgJm5ic3A7LyogU2V0IHRoZSBmb3JtIGluZm8gKi8gJm5ic3A7Y3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBQT1NULCBwb3N0KTsgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9zZXRvcHQuaHRtbCI+Y3VybF9lYXN5X3NldG9wdCAoMyk8L2E+IDxzcGFuIENsYXNzPSJtYW5wYWdlIj4gPC9zcGFuPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX2Zvcm1mcmVlLmh0bWwiPmN1cmxfZm9ybWZyZWUgKDMpPC9hPiA8cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Zvcm1hZGQucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZm9ybWFkZC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3OTc0ZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Zvcm1hZGQucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Zvcm1mcmVlLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mb3JtZnJlZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MzhhMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mb3JtZnJlZS4zCkBAIC0wLDAgKzEsNDQgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGN1cmxfZm9ybWZyZWUgMyAiNiBBcHJpbCAyMDAxIiAibGliY3VybCA3LjcuMSIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfZm9ybWZyZWUgLSBmcmVlIGEgcHJldmlvdXNseSBidWlsZCBtdWx0aXBhcnQvZm9ybWRhdGEgSFRUUCBQT1NUIGNoYWluCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKy5zcAorLkJJICJ2b2lkIGN1cmxfZm9ybWZyZWUoc3RydWN0IGN1cmxfaHR0cHBvc3QgKiIgZm9ybSk7CisuYWQKKy5TSCBERVNDUklQVElPTgorY3VybF9mb3JtZnJlZSgpIGlzIHVzZWQgdG8gY2xlYW4gdXAgZGF0YSBwcmV2aW91c2x5IGJ1aWx0L2FwcGVuZGVkIHdpdGgKK1xmSWN1cmxfZm9ybWFkZCgzKVxmUC4gVGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSBkYXRhIGhhcyBiZWVuIHVzZWQsIHdoaWNoCit0eXBpY2FsbHkgbWVhbnMgYWZ0ZXIgXGZJY3VybF9lYXN5X3BlcmZvcm0oMylcZlAgaGFzIGJlZW4gY2FsbGVkLgorCitUaGUgcG9pbnRlciB0byBmcmVlIGlzIHRoZSBzYW1lIHBvaW50ZXIgeW91IHBhc3NlZCB0byB0aGUKK1xmQkNVUkxPUFRfSFRUUFBPU1RcZlAgb3B0aW9uLCB3aGljaCBpcyB0aGUgXGZJZmlyc3RpdGVtXGZQIHBvaW50ZXIgZnJvbSB0aGUKK1xmSWN1cmxfZm9ybWFkZCgzKVxmUCBpbnZva2UocykuCisKK1xmQmZvcm1cZlAgaXMgdGhlIHBvaW50ZXIgYXMgcmV0dXJuZWQgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8KK1xmSWN1cmxfZm9ybWFkZCgzKVxmUCBhbmQgbWF5IGJlIE5VTEwuCisuU0ggUkVUVVJOIFZBTFVFCitOb25lCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfZm9ybWFkZCAiKDMpICIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Zvcm1mcmVlLmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mb3JtZnJlZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTJjNzQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mb3JtZnJlZS5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX2Zvcm1mcmVlIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfZm9ybWZyZWUgLSBmcmVlIGEgcHJldmlvdXNseSBidWlsZCBtdWx0aXBhcnQvZm9ybWRhdGEgSFRUUCBQT1NUIGNoYWluIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+dm9pZCBjdXJsX2Zvcm1mcmVlKHN0cnVjdCBjdXJsX2h0dHBwb3N0ICogZm9ybSk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX2Zvcm1mcmVlKCkgaXMgdXNlZCB0byBjbGVhbiB1cCBkYXRhIHByZXZpb3VzbHkgYnVpbHQvYXBwZW5kZWQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9mb3JtYWRkLmh0bWwiPmN1cmxfZm9ybWFkZCgzKTwvYT4uIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgZGF0YSBoYXMgYmVlbiB1c2VkLCB3aGljaCB0eXBpY2FsbHkgbWVhbnMgYWZ0ZXIgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9wZXJmb3JtLmh0bWwiPmN1cmxfZWFzeV9wZXJmb3JtKDMpPC9hPiBoYXMgYmVlbiBjYWxsZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIHBvaW50ZXIgdG8gZnJlZSBpcyB0aGUgc2FtZSBwb2ludGVyIHlvdSBwYXNzZWQgdG8gdGhlIDxzcGFuIENsYXNzPSJib2xkIj5DVVJMT1BUX0hUVFBQT1NUPC9zcGFuPiBvcHRpb24sIHdoaWNoIGlzIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmZpcnN0aXRlbTwvc3Bhbj4gcG9pbnRlciBmcm9tIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9mb3JtYWRkLmh0bWwiPmN1cmxfZm9ybWFkZCgzKTwvYT4gaW52b2tlKHMpLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5mb3JtPC9zcGFuPiBpcyB0aGUgcG9pbnRlciBhcyByZXR1cm5lZCBmcm9tIGEgcHJldmlvdXMgY2FsbCB0byA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9mb3JtYWRkLmh0bWwiPmN1cmxfZm9ybWFkZCgzKTwvYT4gYW5kIG1heSBiZSBOVUxMLiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5Ob25lIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9mb3JtYWRkLmh0bWwiPmN1cmxfZm9ybWFkZCAoMykgPC9hPiA8cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Zvcm1mcmVlLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Zvcm1mcmVlLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWFhZjk0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZm9ybWZyZWUucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Zvcm1nZXQuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2Zvcm1nZXQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTI2MjIxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZm9ybWdldC4zCkBAIC0wLDAgKzEsNzAgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGN1cmxfZm9ybWdldCAzICIyMCBKdW5lIDIwMDYiICJsaWJjdXJsIDcuMTUuNSIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfZm9ybWdldCAtIHNlcmlhbGl6ZSBhIHByZXZpb3VzbHkgYnVpbHQgbXVsdGlwYXJ0L2Zvcm1kYXRhIEhUVFAgUE9TVCBjaGFpbgorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKwordm9pZCBjdXJsX2Zvcm1nZXQoc3RydWN0IGN1cmxfaHR0cHBvc3QgKiBmb3JtLCB2b2lkICp1c2VycCwKKyAgICAgICAgICAgICAgICAgIGN1cmxfZm9ybWdldF9jYWxsYmFjayBhcHBlbmQgKTsKKy5TSCBERVNDUklQVElPTgorY3VybF9mb3JtZ2V0KCkgaXMgdXNlZCB0byBzZXJpYWxpemUgZGF0YSBwcmV2aW91c2x5IGJ1aWx0L2FwcGVuZGVkIHdpdGgKK1xmSWN1cmxfZm9ybWFkZCgzKVxmUC4gQWNjZXB0cyBhIHZvaWQgcG9pbnRlciBhcyBzZWNvbmQgYXJndW1lbnQgbmFtZWQKK1xmSXVzZXJwXGZQIHdoaWNoIHdpbGwgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUKK2N1cmxfZm9ybWdldF9jYWxsYmFjayBmdW5jdGlvbi4KKworLkJJICJ0eXBlZGVmIHNpemVfdCAoKmN1cmxfZm9ybWdldF9jYWxsYmFjaykodm9pZCAqIiB1c2VycCwgIiBjb25zdCBjaGFyICoiIGJ1ZiwKKy5CSSAiIHNpemVfdCAiIGxlbiAiKTsiCisKK1RoZSBjdXJsX2Zvcm1nZXRfY2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZCBmb3IgZWFjaCBwYXJ0IG9mIHRoZSBIVFRQIFBPU1QKK2NoYWluLiBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIG11c3Qgbm90IGJlIGZyZWVkLiBUaGUKK2NhbGxiYWNrIHNob3VsZCByZXR1cm4gdGhlIGJ1ZmZlciBsZW5ndGggcGFzc2VkIHRvIGl0IG9uIHN1Y2Nlc3MuCisKK0lmIHRoZSBcZkJDVVJMRk9STV9TVFJFQU1cZlAgb3B0aW9uIGlzIHVzZWQgaW4gdGhlIGZvcm1wb3N0LCBpdCB3aWxsIHByZXZlbnQKK1xmSWN1cmxfZm9ybWdldCgzKVxmUCBmcm9tIHdvcmtpbmcgdW50aWwgeW91J3ZlIHBlcmZvcm1lZCB0aGUgYWN0dWFsIEhUVFAKK3JlcXVlc3QgYXMgb25seSB0aGVuIHdpbGwgbGliY3VybCBnZXQgdGhlIGFjdHVhbCByZWFkIGNhbGxiYWNrIHRvIHVzZSEKKy5TSCBSRVRVUk4gVkFMVUUKKzAgbWVhbnMgZXZlcnl0aGluZyB3YXMgb2ssIG5vbi16ZXJvIG1lYW5zIGFuIGVycm9yIG9jY3VycmVkCisuU0ggRVhBTVBMRQorLm5mCisKKyBzaXplX3QgcHJpbnRfaHR0cHBvc3RfY2FsbGJhY2sodm9pZCAqYXJnLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCisgeworICAgZndyaXRlKGJ1ZiwgbGVuLCAxLCBzdGRvdXQpOworICAgKCooc2l6ZV90ICopIGFyZykgKz0gbGVuOworICAgcmV0dXJuIGxlbjsKKyB9CisKKyBzaXplX3QgcHJpbnRfaHR0cHBvc3Qoc3RydWN0IGN1cmxfaHR0cHBvc3QgKnBvc3QpCisgeworICAgc2l6ZV90IHRvdGFsX3NpemUgPSAwOworICAgaWYoY3VybF9mb3JtZ2V0KHBvc3QsICZ0b3RhbF9zaXplLCBwcmludF9odHRwcG9zdF9jYWxsYmFjaykpIHsKKyAgICAgcmV0dXJuIChzaXplX3QpIC0xOworICAgfQorICAgcmV0dXJuIHRvdGFsX3NpemU7CisgfQorLlNIIEFWQUlMQUJJTElUWQorVGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gbGliY3VybCA3LjE1LjUKKy5TSCAiU0VFIEFMU08iCisuQlIgY3VybF9mb3JtYWRkICIoMykgIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZm9ybWdldC5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZm9ybWdldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzQ1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mb3JtZ2V0Lmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfZm9ybWdldCBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX2Zvcm1nZXQgLSBzZXJpYWxpemUgYSBwcmV2aW91c2x5IGJ1aWx0IG11bHRpcGFydC9mb3JtZGF0YSBIVFRQIFBPU1QgY2hhaW4gPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+dm9pZCBjdXJsX2Zvcm1nZXQoc3RydWN0IGN1cmxfaHR0cHBvc3QgKiBmb3JtLCB2b2lkICp1c2VycCwgJm5ic3A7ICAgICAgICAgICAgICAgICBjdXJsX2Zvcm1nZXRfY2FsbGJhY2sgYXBwZW5kICk7IDxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX2Zvcm1nZXQoKSBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBkYXRhIHByZXZpb3VzbHkgYnVpbHQvYXBwZW5kZWQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9mb3JtYWRkLmh0bWwiPmN1cmxfZm9ybWFkZCgzKTwvYT4uIEFjY2VwdHMgYSB2b2lkIHBvaW50ZXIgYXMgc2Vjb25kIGFyZ3VtZW50IG5hbWVkIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+dXNlcnA8L3NwYW4+IHdoaWNoIHdpbGwgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY3VybF9mb3JtZ2V0X2NhbGxiYWNrIGZ1bmN0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj50eXBlZGVmIHNpemVfdCAoKmN1cmxfZm9ybWdldF9jYWxsYmFjaykodm9pZCAqIHVzZXJwLCAgY29uc3QgY2hhciAqIGJ1Ziw8L3NwYW4+IDxzcGFuIENsYXNzPSJib2xkIj4gc2l6ZV90ICBsZW4gKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGN1cmxfZm9ybWdldF9jYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIGZvciBlYWNoIHBhcnQgb2YgdGhlIEhUVFAgUE9TVCBjaGFpbi4gVGhlIGNoYXJhY3RlciBidWZmZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBtdXN0IG5vdCBiZSBmcmVlZC4gVGhlIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gdGhlIGJ1ZmZlciBsZW5ndGggcGFzc2VkIHRvIGl0IG9uIHN1Y2Nlc3MuIAorPHAgY2xhc3M9ImxldmVsMCI+SWYgdGhlIDxzcGFuIENsYXNzPSJib2xkIj5DVVJMRk9STV9TVFJFQU08L3NwYW4+IG9wdGlvbiBpcyB1c2VkIGluIHRoZSBmb3JtcG9zdCwgaXQgd2lsbCBwcmV2ZW50IDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Zvcm1nZXQuaHRtbCI+Y3VybF9mb3JtZ2V0KDMpPC9hPiBmcm9tIHdvcmtpbmcgdW50aWwgeW91J3ZlIHBlcmZvcm1lZCB0aGUgYWN0dWFsIEhUVFAgcmVxdWVzdCBhcyBvbmx5IHRoZW4gd2lsbCBsaWJjdXJsIGdldCB0aGUgYWN0dWFsIHJlYWQgY2FsbGJhY2sgdG8gdXNlISA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4wIG1lYW5zIGV2ZXJ5dGhpbmcgd2FzIG9rLCBub24temVybyBtZWFucyBhbiBlcnJvciBvY2N1cnJlZCA8YSBuYW1lPSJFWEFNUExFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5FWEFNUExFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtzaXplX3QgcHJpbnRfaHR0cHBvc3RfY2FsbGJhY2sodm9pZCAqYXJnLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pICZuYnNwO3sgJm5ic3A7ICBmd3JpdGUoYnVmLCBsZW4sIDEsIHN0ZG91dCk7ICZuYnNwOyAgKCooc2l6ZV90ICopIGFyZykgKz0gbGVuOyAmbmJzcDsgIHJldHVybiBsZW47ICZuYnNwO30gCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtzaXplX3QgcHJpbnRfaHR0cHBvc3Qoc3RydWN0IGN1cmxfaHR0cHBvc3QgKnBvc3QpICZuYnNwO3sgJm5ic3A7ICBzaXplX3QgdG90YWxfc2l6ZSA9IDA7ICZuYnNwOyAgaWYoY3VybF9mb3JtZ2V0KHBvc3QsICZ0b3RhbF9zaXplLCBwcmludF9odHRwcG9zdF9jYWxsYmFjaykpIHsgJm5ic3A7ICAgIHJldHVybiAoc2l6ZV90KSAtMTsgJm5ic3A7ICB9ICZuYnNwOyAgcmV0dXJuIHRvdGFsX3NpemU7ICZuYnNwO30gPGEgbmFtZT0iQVZBSUxBQklMSVRZIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5BVkFJTEFCSUxJVFk8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gbGliY3VybCA3LjE1LjUgPGEgbmFtZT0iU0VFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TRUUgQUxTTzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX2Zvcm1hZGQuaHRtbCI+Y3VybF9mb3JtYWRkICgzKSA8L2E+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZm9ybWdldC5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mb3JtZ2V0LnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzNmZWYzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZm9ybWdldC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZnJlZS4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZnJlZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZWM5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mcmVlLjMKQEAgLTAsMCArMSwzNSBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF9mcmVlIDMgIjEyIEF1ZyAyMDAzIiAibGliY3VybCA3LjEwIiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9mcmVlIC0gcmVjbGFpbSBtZW1vcnkgdGhhdCBoYXMgYmVlbiBvYnRhaW5lZCB0aHJvdWdoIGEgbGliY3VybCBjYWxsCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKy5zcAorLkJJICJ2b2lkIGN1cmxfZnJlZSggY2hhciAqIiBwdHIgIiApOyIKKy5hZAorLlNIIERFU0NSSVBUSU9OCitjdXJsX2ZyZWUgcmVjbGFpbXMgbWVtb3J5IHRoYXQgaGFzIGJlZW4gb2J0YWluZWQgdGhyb3VnaCBhIGxpYmN1cmwgY2FsbC4gIFVzZQorY3VybF9mcmVlKCkgaW5zdGVhZCBvZiBmcmVlKCkgdG8gYXZvaWQgYW5vbWFsaWVzIHRoYXQgY2FuIHJlc3VsdCBmcm9tCitkaWZmZXJlbmNlcyBpbiBtZW1vcnkgbWFuYWdlbWVudCBiZXR3ZWVuIHlvdXIgYXBwbGljYXRpb24gYW5kIGxpYmN1cmwuCisuU0ggIlNFRSBBTFNPIgorLkkgY3VybF91bmVzY2FwZSgzKQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZnJlZS5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZnJlZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNzVjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mcmVlLmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfZnJlZSBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX2ZyZWUgLSByZWNsYWltIG1lbW9yeSB0aGF0IGhhcyBiZWVuIG9idGFpbmVkIHRocm91Z2ggYSBsaWJjdXJsIGNhbGwgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj4jaW5jbHVkZSAmbHQ7Y3VybC9jdXJsLmgmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj52b2lkIGN1cmxfZnJlZSggY2hhciAqIHB0ciAgKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfZnJlZSByZWNsYWltcyBtZW1vcnkgdGhhdCBoYXMgYmVlbiBvYnRhaW5lZCB0aHJvdWdoIGEgbGliY3VybCBjYWxsLiAgVXNlIGN1cmxfZnJlZSgpIGluc3RlYWQgb2YgZnJlZSgpIHRvIGF2b2lkIGFub21hbGllcyB0aGF0IGNhbiByZXN1bHQgZnJvbSBkaWZmZXJlbmNlcyBpbiBtZW1vcnkgbWFuYWdlbWVudCBiZXR3ZWVuIHlvdXIgYXBwbGljYXRpb24gYW5kIGxpYmN1cmwuIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfdW5lc2NhcGUuaHRtbCI+Y3VybF91bmVzY2FwZSgzKTwvYT4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mcmVlLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2ZyZWUucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNDdiODkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9mcmVlLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nZXRkYXRlLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nZXRkYXRlLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlZWQ5YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dldGRhdGUuMwpAQCAtMCwwICsxLDExNyBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF9nZXRkYXRlIDMgIjEyIEF1ZyAyMDA1IiAibGliY3VybCA3LjAiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX2dldGRhdGUgLSBDb252ZXJ0IGEgZGF0ZSBzdHJpbmcgdG8gbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgSmFudWFyeSAxLAorMTk3MAorLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+Cisuc3AKKy5CSSAidGltZV90IGN1cmxfZ2V0ZGF0ZShjaGFyICoiIGRhdGVzdHJpbmcgIiwgdGltZV90ICoibm93ICIgKTsiCisuYWQKKy5TSCBERVNDUklQVElPTgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDFzdCAxOTcwIGluIHRoZSBVVEMKK3RpbWUgem9uZSwgZm9yIHRoZSBkYXRlIGFuZCB0aW1lIHRoYXQgdGhlIFxmSWRhdGVzdHJpbmdcZlAgcGFyYW1ldGVyCitzcGVjaWZpZXMuIFRoZSBcZklub3dcZlAgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLCBwYXNzIGEgTlVMTCB0aGVyZS4KKworXGZCTk9URTpcZlAgVGhpcyBmdW5jdGlvbiB3YXMgcmV3cml0dGVuIGZvciB0aGUgNy4xMi4yIHJlbGVhc2UgYW5kIHRoaXMKK2RvY3VtZW50YXRpb24gY292ZXJzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBuZXcgb25lLiBUaGUgbmV3IG9uZSBpcyBub3QKK2ZlYXR1cmUtY29tcGxldGUgd2l0aCB0aGUgb2xkIG9uZSwgYnV0IG1vc3Qgb2YgdGhlIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IHRoZQorbmV3IG9uZSB3YXMgc3VwcG9ydGVkIGJ5IHRoZSBvbGQgdG9vLgorLlNIIFBBUlNJTkcgREFURVMgQU5EIFRJTUVTCitBICJkYXRlIiBpcyBhIHN0cmluZyBjb250YWluaW5nIHNldmVyYWwgaXRlbXMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuIFRoZQorb3JkZXIgb2YgdGhlIGl0ZW1zIGlzIGltbWF0ZXJpYWwuICBBIGRhdGUgc3RyaW5nIG1heSBjb250YWluIG1hbnkgZmxhdm9ycyBvZgoraXRlbXM6CisuVFAgMC44aQorLkIgY2FsZW5kYXIgZGF0ZSBpdGVtcworQ2FuIGJlIHNwZWNpZmllZCBzZXZlcmFsIHdheXMuIE1vbnRoIG5hbWVzIGNhbiBvbmx5IGJlIHRocmVlLWxldHRlciBlbmdsaXNoCithYmJyZXZpYXRpb25zLCBudW1iZXJzIGNhbiBiZSB6ZXJvLXByZWZpeGVkIGFuZCB0aGUgeWVhciBtYXkgdXNlIDIgb3IgNCBkaWdpdHMuCitFeGFtcGxlczogMDYgTm92IDE5OTQsIDA2LU5vdi05NCBhbmQgTm92LTk0IDYuCisuVFAKKy5CIHRpbWUgb2YgdGhlIGRheSBpdGVtcworVGhpcyBzdHJpbmcgc3BlY2lmaWVzIHRoZSB0aW1lIG9uIGEgZ2l2ZW4gZGF5LiBZb3UgbXVzdCBzcGVjaWZ5IGl0IHdpdGggNgorZGlnaXRzIHdpdGggdHdvIGNvbG9uczogSEg6TU06U1MuIFRvIG5vdCBpbmNsdWRlIHRoZSB0aW1lIGluIGEgZGF0ZSBzdHJpbmcsCit3aWxsIG1ha2UgdGhlIGZ1bmN0aW9uIGFzc3VtZSAwMDowMDowMC4gRXhhbXBsZTogMTg6MTk6MjEuCisuVFAKKy5CIHRpbWUgem9uZSBpdGVtcworU3BlY2lmaWVzIGludGVybmF0aW9uYWwgdGltZSB6b25lLiBUaGVyZSBhcmUgYSBmZXcgYWNyb255bXMgc3VwcG9ydGVkLCBidXQgaW4KK2dlbmVyYWwgeW91IHNob3VsZCBpbnN0ZWFkIHVzZSB0aGUgc3BlY2lmaWMgcmVsYXRpdmUgdGltZSBjb21wYXJlZCB0bworVVRDLiBTdXBwb3J0ZWQgZm9ybWF0cyBpbmNsdWRlOiAtMTIwMCwgTVNULCArMDEwMC4KKy5UUAorLkIgZGF5IG9mIHRoZSB3ZWVrIGl0ZW1zCitTcGVjaWZpZXMgYSBkYXkgb2YgdGhlIHdlZWsuIERheXMgb2YgdGhlIHdlZWsgbWF5IGJlIHNwZWxsZWQgb3V0IGluIGZ1bGwKKyh1c2luZyBlbmdsaXNoKTogYFN1bmRheScsIGBNb25kYXknLCBldGMgb3IgdGhleSBtYXkgYmUgYWJicmV2aWF0ZWQgdG8gdGhlaXIKK2ZpcnN0IHRocmVlIGxldHRlcnMuIFRoaXMgaXMgdXN1YWxseSBub3QgaW5mbyB0aGF0IGFkZHMgYW55dGhpbmcuCisuVFAKKy5CIHB1cmUgbnVtYmVycworSWYgYSBkZWNpbWFsIG51bWJlciBvZiB0aGUgZm9ybSBZWVlZTU1ERCBhcHBlYXJzLCB0aGVuIFlZWVkgaXMgcmVhZCBhcyB0aGUKK3llYXIsIE1NIGFzIHRoZSBtb250aCBudW1iZXIgYW5kIEREIGFzIHRoZSBkYXkgb2YgdGhlIG1vbnRoLCBmb3IgdGhlIHNwZWNpZmllZAorY2FsZW5kYXIgZGF0ZS4KKy5QUAorLlNIIEVYQU1QTEVTCisubmYKK1N1biwgMDYgTm92IDE5OTQgMDg6NDk6MzcgR01UCitTdW5kYXksIDA2LU5vdi05NCAwODo0OTozNyBHTVQKK1N1biBOb3YgIDYgMDg6NDk6MzcgMTk5NAorMDYgTm92IDE5OTQgMDg6NDk6MzcgR01UCiswNi1Ob3YtOTQgMDg6NDk6MzcgR01UCitOb3YgIDYgMDg6NDk6MzcgMTk5NAorMDYgTm92IDE5OTQgMDg6NDk6MzcKKzA2LU5vdi05NCAwODo0OTozNworMTk5NCBOb3YgNiAwODo0OTozNworR01UIDA4OjQ5OjM3IDA2LU5vdi05NCBTdW5kYXkKKzk0IDYgTm92IDA4OjQ5OjM3CisxOTk0IE5vdiA2CiswNi1Ob3YtOTQKK1N1biBOb3YgNiA5NAorMTk5NC5Ob3YuNgorU3VuL05vdi82Lzk0L0dNVAorU3VuLCAwNiBOb3YgMTk5NCAwODo0OTozNyBDRVQKKzA2IE5vdiAxOTk0IDA4OjQ5OjM3IEVTVAorU3VuLCAxMiBTZXAgMjAwNCAxNTowNTo1OCAtMDcwMAorU2F0LCAxMSBTZXAgMjAwNCAyMTozMjoxMSArMDIwMAorMjAwNDA5MTIgMTU6MDU6NTggLTA3MDAKKzIwMDQwOTExICswMjAwCisuZmkKKy5TSCBTVEFOREFSRFMKK1RoaXMgcGFyc2VyIHdhcyB3cml0dGVuIHRvIGhhbmRsZSBkYXRlIGZvcm1hdHMgc3BlY2lmaWVkIGluIFJGQyA4MjIgKGluY2x1ZGluZwordGhlIHVwZGF0ZSBpbiBSRkMgMTEyMykgdXNpbmcgdGltZSB6b25lIG5hbWUgb3IgdGltZSB6b25lIGRlbHRhIGFuZCBSRkMgODUwCisob2Jzb2xldGVkIGJ5IFJGQyAxMDM2KSBhbmQgQU5TSSBDJ3MgYXNjdGltZSgpIGZvcm1hdC4gVGhlc2UgZm9ybWF0cyBhcmUgdGhlCitvbmx5IG9uZXMgUkZDMjYxNiBzYXlzIEhUVFAgYXBwbGljYXRpb25zIG1heSB1c2UuCisuU0ggUkVUVVJOIFZBTFVFCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgLTEgd2hlbiBpdCBmYWlscyB0byBwYXJzZSB0aGUgZGF0ZSBzdHJpbmcuIE90aGVyd2lzZSBpdAorcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYXMgZGVzY3JpYmVkLgorCitJZiB0aGUgeWVhciBpcyBsYXJnZXIgdGhhbiAyMDM3IG9uIHN5c3RlbXMgd2l0aCAzMiBiaXQgdGltZV90LCB0aGlzIGZ1bmN0aW9uCit3aWxsIHJldHVybiAweDdmZmZmZmZmIChzaW5jZSB0aGF0IGlzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHNpZ25lZCAzMiBiaXQKK251bWJlcikuCisKK0hhdmluZyBhIDY0IGJpdCB0aW1lX3QgaXMgbm90IGEgZ3VhcmFudGVlIHRoYXQgZGF0ZXMgYmV5b25kIDAzOjE0OjA3IFVUQywKK0phbnVhcnkgMTksIDIwMzggd2lsbCB3b3JrIGZpbmUuIE9uIHN5c3RlbXMgd2l0aCBhIDY0IGJpdCB0aW1lX3QgYnV0IHdpdGggYQorY3JpcHBsZWQgbWt0aW1lKCksIFxmSWN1cmxfZ2V0ZGF0ZVxmUCB3aWxsIHJldHVybiAtMSBpbiB0aGlzIGNhc2UuCisuU0ggUkVXUklURQorVGhlIGZvcm1lciB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gd2FzIGJ1aWx0IHdpdGggeWFjYyBhbmQgd2FzIG5vdCBvbmx5IHZlcnkKK2xhcmdlLCBpdCB3YXMgYWxzbyBuZXZlciBxdWl0ZSB1bmRlcnN0b29kIGFuZCBpdCB3YXNuJ3QgcG9zc2libGUgdG8gYnVpbGQgd2l0aAorbm9uLUdOVSB0b29scyBzaW5jZSBvbmx5IEdOVSBCaXNvbiBjb3VsZCBtYWtlIGl0IHRocmVhZC1zYWZlIQorCitUaGUgcmV3cml0ZSB3YXMgZG9uZSBmb3IgNy4xMi4yLiBUaGUgbmV3IG9uZSBpcyBtdWNoIHNtYWxsZXIgYW5kIHVzZXMgc2ltcGxlcgorY29kZS4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dldGRhdGUuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dldGRhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTg5NzAyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZ2V0ZGF0ZS5odG1sCkBAIC0wLDAgKzEsNzIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX2dldGRhdGUgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9nZXRkYXRlIC0gQ29udmVydCBhIGRhdGUgc3RyaW5nIHRvIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTk3MCA8YSBuYW1lPSJTWU5PUFNJUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1lOT1BTSVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPnRpbWVfdCBjdXJsX2dldGRhdGUoY2hhciAqIGRhdGVzdHJpbmcgLCB0aW1lX3QgKm5vdyAgKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgSmFudWFyeSAxc3QgMTk3MCBpbiB0aGUgVVRDIHRpbWUgem9uZSwgZm9yIHRoZSBkYXRlIGFuZCB0aW1lIHRoYXQgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+ZGF0ZXN0cmluZzwvc3Bhbj4gcGFyYW1ldGVyIHNwZWNpZmllcy4gVGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bm93PC9zcGFuPiBwYXJhbWV0ZXIgaXMgbm90IHVzZWQsIHBhc3MgYSBOVUxMIHRoZXJlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5OT1RFOjwvc3Bhbj4gVGhpcyBmdW5jdGlvbiB3YXMgcmV3cml0dGVuIGZvciB0aGUgNy4xMi4yIHJlbGVhc2UgYW5kIHRoaXMgZG9jdW1lbnRhdGlvbiBjb3ZlcnMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG5ldyBvbmUuIFRoZSBuZXcgb25lIGlzIG5vdCBmZWF0dXJlLWNvbXBsZXRlIHdpdGggdGhlIG9sZCBvbmUsIGJ1dCBtb3N0IG9mIHRoZSBmb3JtYXRzIHN1cHBvcnRlZCBieSB0aGUgbmV3IG9uZSB3YXMgc3VwcG9ydGVkIGJ5IHRoZSBvbGQgdG9vLiA8YSBuYW1lPSJQQVJTSU5HIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5QQVJTSU5HIERBVEVTIEFORCBUSU1FUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5BICJkYXRlIiBpcyBhIHN0cmluZyBjb250YWluaW5nIHNldmVyYWwgaXRlbXMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuIFRoZSBvcmRlciBvZiB0aGUgaXRlbXMgaXMgaW1tYXRlcmlhbC4gIEEgZGF0ZSBzdHJpbmcgbWF5IGNvbnRhaW4gbWFueSBmbGF2b3JzIG9mIGl0ZW1zOiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5jYWxlbmRhciBkYXRlIGl0ZW1zPC9zcGFuPiBDYW4gYmUgc3BlY2lmaWVkIHNldmVyYWwgd2F5cy4gTW9udGggbmFtZXMgY2FuIG9ubHkgYmUgdGhyZWUtbGV0dGVyIGVuZ2xpc2ggYWJicmV2aWF0aW9ucywgbnVtYmVycyBjYW4gYmUgemVyby1wcmVmaXhlZCBhbmQgdGhlIHllYXIgbWF5IHVzZSAyIG9yIDQgZGlnaXRzLiBFeGFtcGxlczogMDYgTm92IDE5OTQsIDA2LU5vdi05NCBhbmQgTm92LTk0IDYuIAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPnRpbWUgb2YgdGhlIGRheSBpdGVtczwvc3Bhbj4gVGhpcyBzdHJpbmcgc3BlY2lmaWVzIHRoZSB0aW1lIG9uIGEgZ2l2ZW4gZGF5LiBZb3UgbXVzdCBzcGVjaWZ5IGl0IHdpdGggNiBkaWdpdHMgd2l0aCB0d28gY29sb25zOiBISDpNTTpTUy4gVG8gbm90IGluY2x1ZGUgdGhlIHRpbWUgaW4gYSBkYXRlIHN0cmluZywgd2lsbCBtYWtlIHRoZSBmdW5jdGlvbiBhc3N1bWUgMDA6MDA6MDAuIEV4YW1wbGU6IDE4OjE5OjIxLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj50aW1lIHpvbmUgaXRlbXM8L3NwYW4+IFNwZWNpZmllcyBpbnRlcm5hdGlvbmFsIHRpbWUgem9uZS4gVGhlcmUgYXJlIGEgZmV3IGFjcm9ueW1zIHN1cHBvcnRlZCwgYnV0IGluIGdlbmVyYWwgeW91IHNob3VsZCBpbnN0ZWFkIHVzZSB0aGUgc3BlY2lmaWMgcmVsYXRpdmUgdGltZSBjb21wYXJlZCB0byBVVEMuIFN1cHBvcnRlZCBmb3JtYXRzIGluY2x1ZGU6IC0xMjAwLCBNU1QsICswMTAwLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5kYXkgb2YgdGhlIHdlZWsgaXRlbXM8L3NwYW4+IFNwZWNpZmllcyBhIGRheSBvZiB0aGUgd2Vlay4gRGF5cyBvZiB0aGUgd2VlayBtYXkgYmUgc3BlbGxlZCBvdXQgaW4gZnVsbCAodXNpbmcgZW5nbGlzaCk6IGBTdW5kYXknLCBgTW9uZGF5JywgZXRjIG9yIHRoZXkgbWF5IGJlIGFiYnJldmlhdGVkIHRvIHRoZWlyIGZpcnN0IHRocmVlIGxldHRlcnMuIFRoaXMgaXMgdXN1YWxseSBub3QgaW5mbyB0aGF0IGFkZHMgYW55dGhpbmcuIAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPnB1cmUgbnVtYmVyczwvc3Bhbj4gSWYgYSBkZWNpbWFsIG51bWJlciBvZiB0aGUgZm9ybSBZWVlZTU1ERCBhcHBlYXJzLCB0aGVuIFlZWVkgaXMgcmVhZCBhcyB0aGUgeWVhciwgTU0gYXMgdGhlIG1vbnRoIG51bWJlciBhbmQgREQgYXMgdGhlIGRheSBvZiB0aGUgbW9udGgsIGZvciB0aGUgc3BlY2lmaWVkIGNhbGVuZGFyIGRhdGUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iRVhBTVBMRVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkVYQU1QTEVTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+U3VuLCAwNiBOb3YgMTk5NCAwODo0OTozNyBHTVQgU3VuZGF5LCAwNi1Ob3YtOTQgMDg6NDk6MzcgR01UIFN1biBOb3YgIDYgMDg6NDk6MzcgMTk5NCAwNiBOb3YgMTk5NCAwODo0OTozNyBHTVQgMDYtTm92LTk0IDA4OjQ5OjM3IEdNVCBOb3YgIDYgMDg6NDk6MzcgMTk5NCAwNiBOb3YgMTk5NCAwODo0OTozNyAwNi1Ob3YtOTQgMDg6NDk6MzcgMTk5NCBOb3YgNiAwODo0OTozNyBHTVQgMDg6NDk6MzcgMDYtTm92LTk0IFN1bmRheSA5NCA2IE5vdiAwODo0OTozNyAxOTk0IE5vdiA2IDA2LU5vdi05NCBTdW4gTm92IDYgOTQgMTk5NC5Ob3YuNiBTdW4vTm92LzYvOTQvR01UIFN1biwgMDYgTm92IDE5OTQgMDg6NDk6MzcgQ0VUIDA2IE5vdiAxOTk0IDA4OjQ5OjM3IEVTVCBTdW4sIDEyIFNlcCAyMDA0IDE1OjA1OjU4IC0wNzAwIFNhdCwgMTEgU2VwIDIwMDQgMjE6MzI6MTEgKzAyMDAgMjAwNDA5MTIgMTU6MDU6NTggLTA3MDAgMjAwNDA5MTEgKzAyMDAgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJTVEFOREFSRFMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNUQU5EQVJEUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIHBhcnNlciB3YXMgd3JpdHRlbiB0byBoYW5kbGUgZGF0ZSBmb3JtYXRzIHNwZWNpZmllZCBpbiA8YSBocmVmPSJodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM4MjIudHh0Ij5SRkMgODIyPC9hPiAoaW5jbHVkaW5nIHRoZSB1cGRhdGUgaW4gPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTEyMy50eHQiPlJGQyAxMTIzPC9hPikgdXNpbmcgdGltZSB6b25lIG5hbWUgb3IgdGltZSB6b25lIGRlbHRhIGFuZCBSRkMgODUwIChvYnNvbGV0ZWQgYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTAzNi50eHQiPlJGQyAxMDM2PC9hPikgYW5kIEFOU0kgQydzIGFzY3RpbWUoKSBmb3JtYXQuIFRoZXNlIGZvcm1hdHMgYXJlIHRoZSBvbmx5IG9uZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjYxNi50eHQiPlJGQyAyNjE2PC9hPiBzYXlzIEhUVFAgYXBwbGljYXRpb25zIG1heSB1c2UuIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZnVuY3Rpb24gcmV0dXJucyAtMSB3aGVuIGl0IGZhaWxzIHRvIHBhcnNlIHRoZSBkYXRlIHN0cmluZy4gT3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGFzIGRlc2NyaWJlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5JZiB0aGUgeWVhciBpcyBsYXJnZXIgdGhhbiAyMDM3IG9uIHN5c3RlbXMgd2l0aCAzMiBiaXQgdGltZV90LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDB4N2ZmZmZmZmYgKHNpbmNlIHRoYXQgaXMgdGhlIGxhcmdlc3QgcG9zc2libGUgc2lnbmVkIDMyIGJpdCBudW1iZXIpLiAKKzxwIGNsYXNzPSJsZXZlbDAiPkhhdmluZyBhIDY0IGJpdCB0aW1lX3QgaXMgbm90IGEgZ3VhcmFudGVlIHRoYXQgZGF0ZXMgYmV5b25kIDAzOjE0OjA3IFVUQywgSmFudWFyeSAxOSwgMjAzOCB3aWxsIHdvcmsgZmluZS4gT24gc3lzdGVtcyB3aXRoIGEgNjQgYml0IHRpbWVfdCBidXQgd2l0aCBhIGNyaXBwbGVkIG1rdGltZSgpLCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmN1cmxfZ2V0ZGF0ZTwvc3Bhbj4gd2lsbCByZXR1cm4gLTEgaW4gdGhpcyBjYXNlLiA8YSBuYW1lPSJSRVdSSVRFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SRVdSSVRFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBmb3JtZXIgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIHdhcyBidWlsdCB3aXRoIHlhY2MgYW5kIHdhcyBub3Qgb25seSB2ZXJ5IGxhcmdlLCBpdCB3YXMgYWxzbyBuZXZlciBxdWl0ZSB1bmRlcnN0b29kIGFuZCBpdCB3YXNuJ3QgcG9zc2libGUgdG8gYnVpbGQgd2l0aCBub24tR05VIHRvb2xzIHNpbmNlIG9ubHkgR05VIEJpc29uIGNvdWxkIG1ha2UgaXQgdGhyZWFkLXNhZmUhIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIHJld3JpdGUgd2FzIGRvbmUgZm9yIDcuMTIuMi4gVGhlIG5ldyBvbmUgaXMgbXVjaCBzbWFsbGVyIGFuZCB1c2VzIHNpbXBsZXIgY29kZS4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nZXRkYXRlLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dldGRhdGUucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMmFiZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nZXRkYXRlLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nZXRlbnYuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dldGVudi4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNTU0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nZXRlbnYuMwpAQCAtMCwwICsxLDQ5IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX2dldGVudiAzICIzMCBBcHJpbCAyMDA0IiAibGliY3VybCA3LjEyIiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9nZXRlbnYgLSByZXR1cm4gdmFsdWUgZm9yIGVudmlyb25tZW50IG5hbWUKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorLnNwCisuQkkgImNoYXIgKmN1cmxfZ2V0ZW52KGNvbnN0IGNoYXIgKiIgbmFtZSAiKTsiCisuYWQKKy5TSCBERVNDUklQVElPTgorY3VybF9nZXRlbnYoKSBpcyBhIHBvcnRhYmxlIHdyYXBwZXIgZm9yIHRoZSBnZXRlbnYoKSBmdW5jdGlvbiwgbWVhbnQgdG8KK2VtdWxhdGUgaXRzIGJlaGF2aW91ciBhbmQgcHJvdmlkZSBhbiBpZGVudGljYWwgaW50ZXJmYWNlIGZvciBhbGwgb3BlcmF0aW5nCitzeXN0ZW1zIGxpYmN1cmwgYnVpbGRzIG9uIChpbmNsdWRpbmcgd2luMzIpLgorLlNIIEFWQUlMQUJJTElUWQorVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHVibGljIGxpYmN1cmwgQVBJIGluIGEgbmVhciBmdXR1cmUuIEl0Cit3aWxsIGluc3RlYWQgYmUgbWFkZSAiYXZhaWxhYmxlIiBieSBzb3VyY2UgY29kZSBhY2Nlc3Mgb25seSwgYW5kIHRoZW4gYXMKK2N1cmx4X2dldGVudigpLgorLlNIIFJFVFVSTiBWQUxVRQorSWYgc3VjY2Vzc2Z1bCwgY3VybF9nZXRlbnYoKSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZAorZW52aXJvbm1lbnQuIFRoZSBtZW1vcnkgaXQgcmVmZXJzIHRvIGlzIG1hbGxvYygpZWQgc28gdGhlIGFwcGxpY2F0aW9uIG11c3QKK2ZyZWUoKSB0aGlzIHdoZW4gdGhlIGRhdGEgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gV2hlbiBcZkljdXJsX2dldGVudigzKVxmUCBmYWlscwordG8gZmluZCB0aGUgc3BlY2lmaWVkIG5hbWUsIGl0IHJldHVybnMgYSBudWxsIHBvaW50ZXIuCisuU0ggTk9URQorVW5kZXIgdW5peCBvcGVyYXRpbmcgc3lzdGVtcywgdGhlcmUgaXNuJ3QgYW55IHBvaW50IGluIHJldHVybmluZyBhbiBhbGxvY2F0ZWQKK21lbW9yeSwgYWx0aG91Z2ggb3RoZXIgc3lzdGVtcyB3b24ndCB3b3JrIHByb3Blcmx5IGlmIHRoaXMgaXNuJ3QgZG9uZS4gVGhlCit1bml4IGltcGxlbWVudGF0aW9uIHRodXMgaGFzIHRvIHN1ZmZlciBzbGlnaHRseSBmcm9tIHRoZSBkcmF3YmFja3Mgb2Ygb3RoZXIKK3N5c3RlbXMuCisuU0ggIlNFRSBBTFNPIgorLkJSIGdldGVudiAiKDNDKSwgIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZ2V0ZW52Lmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nZXRlbnYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2FiNGUwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZ2V0ZW52Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfZ2V0ZW52IG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfZ2V0ZW52IC0gcmV0dXJuIHZhbHVlIGZvciBlbnZpcm9ubWVudCBuYW1lIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Y2hhciAqY3VybF9nZXRlbnYoY29uc3QgY2hhciAqIG5hbWUgKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfZ2V0ZW52KCkgaXMgYSBwb3J0YWJsZSB3cmFwcGVyIGZvciB0aGUgZ2V0ZW52KCkgZnVuY3Rpb24sIG1lYW50IHRvIGVtdWxhdGUgaXRzIGJlaGF2aW91ciBhbmQgcHJvdmlkZSBhbiBpZGVudGljYWwgaW50ZXJmYWNlIGZvciBhbGwgb3BlcmF0aW5nIHN5c3RlbXMgbGliY3VybCBidWlsZHMgb24gKGluY2x1ZGluZyB3aW4zMikuIDxhIG5hbWU9IkFWQUlMQUJJTElUWSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+QVZBSUxBQklMSVRZPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHB1YmxpYyBsaWJjdXJsIEFQSSBpbiBhIG5lYXIgZnV0dXJlLiBJdCB3aWxsIGluc3RlYWQgYmUgbWFkZSAiYXZhaWxhYmxlIiBieSBzb3VyY2UgY29kZSBhY2Nlc3Mgb25seSwgYW5kIHRoZW4gYXMgY3VybHhfZ2V0ZW52KCkuIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPklmIHN1Y2Nlc3NmdWwsIGN1cmxfZ2V0ZW52KCkgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZW52aXJvbm1lbnQuIFRoZSBtZW1vcnkgaXQgcmVmZXJzIHRvIGlzIG1hbGxvYygpZWQgc28gdGhlIGFwcGxpY2F0aW9uIG11c3QgZnJlZSgpIHRoaXMgd2hlbiB0aGUgZGF0YSBpcyBubyBsb25nZXIgbmVlZGVkLiBXaGVuIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2dldGVudi5odG1sIj5jdXJsX2dldGVudigzKTwvYT4gZmFpbHMgdG8gZmluZCB0aGUgc3BlY2lmaWVkIG5hbWUsIGl0IHJldHVybnMgYSBudWxsIHBvaW50ZXIuIDxhIG5hbWU9Ik5PVEUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5PVEU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VW5kZXIgdW5peCBvcGVyYXRpbmcgc3lzdGVtcywgdGhlcmUgaXNuJ3QgYW55IHBvaW50IGluIHJldHVybmluZyBhbiBhbGxvY2F0ZWQgbWVtb3J5LCBhbHRob3VnaCBvdGhlciBzeXN0ZW1zIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgdGhpcyBpc24ndCBkb25lLiBUaGUgdW5peCBpbXBsZW1lbnRhdGlvbiB0aHVzIGhhcyB0byBzdWZmZXIgc2xpZ2h0bHkgZnJvbSB0aGUgZHJhd2JhY2tzIG9mIG90aGVyIHN5c3RlbXMuIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPmdldGVudiAoM0MpPC9zcGFuPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+IDwvc3Bhbj4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nZXRlbnYucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZ2V0ZW52LnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTA1NGY2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZ2V0ZW52LnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfY2xlYW51cC4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZ2xvYmFsX2NsZWFudXAuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2E1NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZ2xvYmFsX2NsZWFudXAuMwpAQCAtMCwwICsxLDQ5IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX2dsb2JhbF9jbGVhbnVwIDMgIjE3IEZlYiAyMDA2IiAibGliY3VybCA3LjgiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX2dsb2JhbF9jbGVhbnVwIC0gZ2xvYmFsIGxpYmN1cmwgY2xlYW51cAorLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+Cisuc3AKKy5CSSAidm9pZCBjdXJsX2dsb2JhbF9jbGVhbnVwKHZvaWQpOyIKKy5hZAorLlNIIERFU0NSSVBUSU9OCitUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHJlc291cmNlcyBhY3F1aXJlZCBieSBcZkJjdXJsX2dsb2JhbF9pbml0KDMpXGZQLgorCitZb3Ugc2hvdWxkIGNhbGwgXGZJY3VybF9nbG9iYWxfY2xlYW51cCgzKVxmUCBvbmNlIGZvciBlYWNoIGNhbGwgeW91IG1ha2UgdG8KK1xmSWN1cmxfZ2xvYmFsX2luaXQoMylcZlAsIGFmdGVyIHlvdSBhcmUgZG9uZSB1c2luZyBsaWJjdXJsLgorCitcZkJUaGlzIGZ1bmN0aW9uIGlzIG5vdCB0aHJlYWQgc2FmZS5cZlAgWW91IG11c3Qgbm90IGNhbGwgaXQgd2hlbiBhbnkgb3RoZXIKK3RocmVhZCBpbiB0aGUgcHJvZ3JhbSAoaS5lLiBhIHRocmVhZCBzaGFyaW5nIHRoZSBzYW1lIG1lbW9yeSkgaXMgcnVubmluZy4KK1RoaXMgZG9lc24ndCBqdXN0IG1lYW4gbm8gb3RoZXIgdGhyZWFkIHRoYXQgaXMgdXNpbmcgbGliY3VybC4gIEJlY2F1c2UKK1xmQmN1cmxfZ2xvYmFsX2NsZWFudXAoMylcZlAgY2FsbHMgZnVuY3Rpb25zIG9mIG90aGVyIGxpYnJhcmllcyB0aGF0IGFyZQorc2ltaWxhcmx5IHRocmVhZCB1bnNhZmUsIGl0IGNvdWxkIGNvbmZsaWN0IHdpdGggYW55IG90aGVyIHRocmVhZCB0aGF0IHVzZXMKK3RoZXNlIG90aGVyIGxpYnJhcmllcy4KKworU2VlIHRoZSBkZXNjcmlwdGlvbiBpbiBcZkJsaWJjdXJsKDMpXGZQIG9mIGdsb2JhbCBlbnZpcm9ubWVudCByZXF1aXJlbWVudHMgZm9yCitkZXRhaWxzIG9mIGhvdyB0byB1c2UgdGhpcyBmdW5jdGlvbi4KKworLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX2dsb2JhbF9pbml0ICIoMyksICIKKy5CUiBsaWJjdXJsICIoMyksICIKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZ2xvYmFsX2NsZWFudXAuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dsb2JhbF9jbGVhbnVwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlZTdiYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dsb2JhbF9jbGVhbnVwLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfZ2xvYmFsX2NsZWFudXAgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9nbG9iYWxfY2xlYW51cCAtIGdsb2JhbCBsaWJjdXJsIGNsZWFudXAgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj4jaW5jbHVkZSAmbHQ7Y3VybC9jdXJsLmgmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj52b2lkIGN1cmxfZ2xvYmFsX2NsZWFudXAodm9pZCk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHJlc291cmNlcyBhY3F1aXJlZCBieSA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iLi9jdXJsX2dsb2JhbF9pbml0Lmh0bWwiPmN1cmxfZ2xvYmFsX2luaXQoMyk8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPllvdSBzaG91bGQgY2FsbCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9nbG9iYWxfY2xlYW51cC5odG1sIj5jdXJsX2dsb2JhbF9jbGVhbnVwKDMpPC9hPiBvbmNlIGZvciBlYWNoIGNhbGwgeW91IG1ha2UgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZ2xvYmFsX2luaXQuaHRtbCI+Y3VybF9nbG9iYWxfaW5pdCgzKTwvYT4sIGFmdGVyIHlvdSBhcmUgZG9uZSB1c2luZyBsaWJjdXJsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5UaGlzIGZ1bmN0aW9uIGlzIG5vdCB0aHJlYWQgc2FmZS48L3NwYW4+IFlvdSBtdXN0IG5vdCBjYWxsIGl0IHdoZW4gYW55IG90aGVyIHRocmVhZCBpbiB0aGUgcHJvZ3JhbSAoaS5lLiBhIHRocmVhZCBzaGFyaW5nIHRoZSBzYW1lIG1lbW9yeSkgaXMgcnVubmluZy4gVGhpcyBkb2Vzbid0IGp1c3QgbWVhbiBubyBvdGhlciB0aHJlYWQgdGhhdCBpcyB1c2luZyBsaWJjdXJsLiAgQmVjYXVzZSA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iLi9jdXJsX2dsb2JhbF9jbGVhbnVwLmh0bWwiPmN1cmxfZ2xvYmFsX2NsZWFudXAoMyk8L2E+IGNhbGxzIGZ1bmN0aW9ucyBvZiBvdGhlciBsaWJyYXJpZXMgdGhhdCBhcmUgc2ltaWxhcmx5IHRocmVhZCB1bnNhZmUsIGl0IGNvdWxkIGNvbmZsaWN0IHdpdGggYW55IG90aGVyIHRocmVhZCB0aGF0IHVzZXMgdGhlc2Ugb3RoZXIgbGlicmFyaWVzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlNlZSB0aGUgZGVzY3JpcHRpb24gaW4gPGEgY2xhc3M9ImJvbGQiIGhyZWY9Ii4vbGliY3VybC5odG1sIj5saWJjdXJsKDMpPC9hPiBvZiBnbG9iYWwgZW52aXJvbm1lbnQgcmVxdWlyZW1lbnRzIGZvciBkZXRhaWxzIG9mIGhvdyB0byB1c2UgdGhpcyBmdW5jdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZ2xvYmFsX2luaXQuaHRtbCI+Y3VybF9nbG9iYWxfaW5pdCAoMyk8L2E+IDxzcGFuIENsYXNzPSJtYW5wYWdlIj4gPC9zcGFuPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9saWJjdXJsLmh0bWwiPmxpYmN1cmwgKDMpPC9hPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+IDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dsb2JhbF9jbGVhbnVwLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dsb2JhbF9jbGVhbnVwLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjBmMWQxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZ2xvYmFsX2NsZWFudXAucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dsb2JhbF9pbml0LjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfaW5pdC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZmY2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfaW5pdC4zCkBAIC0wLDAgKzEsNzYgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGN1cmxfZ2xvYmFsX2luaXQgMyAiMTEgTWF5IDIwMDQiICJsaWJjdXJsIDcuMTIiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX2dsb2JhbF9pbml0IC0gR2xvYmFsIGxpYmN1cmwgaW5pdGlhbGlzYXRpb24KKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorLnNwCisuQkkgIkNVUkxjb2RlIGN1cmxfZ2xvYmFsX2luaXQobG9uZyAiIGZsYWdzICIpOyIKKy5hZAorLlNIIERFU0NSSVBUSU9OCitUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIHByb2dyYW0gZW52aXJvbm1lbnQgdGhhdCBsaWJjdXJsIG5lZWRzLiAgVGhpbmsgb2YgaXQKK2FzIGFuIGV4dGVuc2lvbiBvZiB0aGUgbGlicmFyeSBsb2FkZXIuCisKK1RoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYXQgbGVhc3Qgb25jZSB3aXRoaW4gYSBwcm9ncmFtIChhIHByb2dyYW0gaXMgYWxsCit0aGUgY29kZSB0aGF0IHNoYXJlcyBhIG1lbW9yeSBzcGFjZSkgYmVmb3JlIHRoZSBwcm9ncmFtIGNhbGxzIGFueSBvdGhlcgorZnVuY3Rpb24gaW4gbGliY3VybC4gIFRoZSBlbnZpcm9ubWVudCBpdCBzZXRzIHVwIGlzIGNvbnN0YW50IGZvciB0aGUgbGlmZSBvZgordGhlIHByb2dyYW0gYW5kIGlzIHRoZSBzYW1lIGZvciBldmVyeSBwcm9ncmFtLCBzbyBtdWx0aXBsZSBjYWxscyBoYXZlIHRoZSBzYW1lCitlZmZlY3QgYXMgb25lIGNhbGwuCisKK1RoZSBmbGFncyBvcHRpb24gaXMgYSBiaXQgcGF0dGVybiB0aGF0IHRlbGxzIGxpYmN1cmwgZXhhY3RseSB3aGF0IGZlYXR1cmVzIHRvCitpbml0LCBhcyBkZXNjcmliZWQgYmVsb3cuIFNldCB0aGUgZGVzaXJlZCBiaXRzIGJ5IE9SaW5nIHRoZSB2YWx1ZXMgdG9nZXRoZXIuCitJbiBub3JtYWwgb3BlcmF0aW9uLCB5b3UgbXVzdCBzcGVjaWZ5IENVUkxfR0xPQkFMX0FMTC4gIERvbid0IHVzZSBhbnkgb3RoZXIKK3ZhbHVlIHVubGVzcyB5b3UgYXJlIGZhbWlsaWFyIHdpdGggaXQgYW5kIG1lYW4gdG8gY29udHJvbCBpbnRlcm5hbCBvcGVyYXRpb25zIG9mCitsaWJjdXJsLgorCitcZkJUaGlzIGZ1bmN0aW9uIGlzIG5vdCB0aHJlYWQgc2FmZS5cZlAgWW91IG11c3Qgbm90IGNhbGwgaXQgd2hlbiBhbnkgb3RoZXIKK3RocmVhZCBpbiB0aGUgcHJvZ3JhbSAoaS5lLiBhIHRocmVhZCBzaGFyaW5nIHRoZSBzYW1lIG1lbW9yeSkgaXMgcnVubmluZy4KK1RoaXMgZG9lc24ndCBqdXN0IG1lYW4gbm8gb3RoZXIgdGhyZWFkIHRoYXQgaXMgdXNpbmcgbGliY3VybC4gIEJlY2F1c2UKK1xmSWN1cmxfZ2xvYmFsX2luaXQoKVxmUCBjYWxscyBmdW5jdGlvbnMgb2Ygb3RoZXIgbGlicmFyaWVzIHRoYXQgYXJlIHNpbWlsYXJseQordGhyZWFkIHVuc2FmZSwgaXQgY291bGQgY29uZmxpY3Qgd2l0aCBhbnkgb3RoZXIgdGhyZWFkIHRoYXQgdXNlcyB0aGVzZSBvdGhlcgorbGlicmFyaWVzLgorCitTZWUgdGhlIGRlc2NyaXB0aW9uIGluIFxmQmxpYmN1cmxcZlAoMykgb2YgZ2xvYmFsIGVudmlyb25tZW50IHJlcXVpcmVtZW50cyBmb3IKK2RldGFpbHMgb2YgaG93IHRvIHVzZSB0aGlzIGZ1bmN0aW9uLgorCisuU0ggRkxBR1MKKy5UUCA1CisuQiBDVVJMX0dMT0JBTF9BTEwKK0luaXRpYWxpemUgZXZlcnl0aGluZyBwb3NzaWJsZS4gVGhpcyBzZXRzIGFsbCBrbm93biBiaXRzLgorLlRQCisuQiBDVVJMX0dMT0JBTF9TU0wKK0luaXRpYWxpemUgU1NMCisuVFAKKy5CIENVUkxfR0xPQkFMX1dJTjMyCitJbml0aWFsaXplIHRoZSBXaW4zMiBzb2NrZXQgbGlicmFyaWVzLgorLlRQCisuQiBDVVJMX0dMT0JBTF9OT1RISU5HCitJbml0aWFsaXNlIG5vdGhpbmcgZXh0cmEuIFRoaXMgc2V0cyBubyBiaXQuCisuU0ggUkVUVVJOIFZBTFVFCitJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgbm9uLXplcm8sIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB5b3UgY2Fubm90IHVzZSB0aGUKK290aGVyIGN1cmwgZnVuY3Rpb25zLgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX2dsb2JhbF9pbml0X21lbSAiKDMpLCAiCisuQlIgY3VybF9nbG9iYWxfY2xlYW51cCAiKDMpLCAiCisuQlIgY3VybF9lYXN5X2luaXQgIigzKSAiCisuQlIgbGliY3VybCAiKDMpICIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dsb2JhbF9pbml0Lmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfaW5pdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYmFkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfaW5pdC5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX2dsb2JhbF9pbml0IG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfZ2xvYmFsX2luaXQgLSBHbG9iYWwgbGliY3VybCBpbml0aWFsaXNhdGlvbiA8YSBuYW1lPSJTWU5PUFNJUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1lOT1BTSVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxjb2RlIGN1cmxfZ2xvYmFsX2luaXQobG9uZyAgZmxhZ3MgKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgcHJvZ3JhbSBlbnZpcm9ubWVudCB0aGF0IGxpYmN1cmwgbmVlZHMuICBUaGluayBvZiBpdCBhcyBhbiBleHRlbnNpb24gb2YgdGhlIGxpYnJhcnkgbG9hZGVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYXQgbGVhc3Qgb25jZSB3aXRoaW4gYSBwcm9ncmFtIChhIHByb2dyYW0gaXMgYWxsIHRoZSBjb2RlIHRoYXQgc2hhcmVzIGEgbWVtb3J5IHNwYWNlKSBiZWZvcmUgdGhlIHByb2dyYW0gY2FsbHMgYW55IG90aGVyIGZ1bmN0aW9uIGluIGxpYmN1cmwuICBUaGUgZW52aXJvbm1lbnQgaXQgc2V0cyB1cCBpcyBjb25zdGFudCBmb3IgdGhlIGxpZmUgb2YgdGhlIHByb2dyYW0gYW5kIGlzIHRoZSBzYW1lIGZvciBldmVyeSBwcm9ncmFtLCBzbyBtdWx0aXBsZSBjYWxscyBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcyBvbmUgY2FsbC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgZmxhZ3Mgb3B0aW9uIGlzIGEgYml0IHBhdHRlcm4gdGhhdCB0ZWxscyBsaWJjdXJsIGV4YWN0bHkgd2hhdCBmZWF0dXJlcyB0byBpbml0LCBhcyBkZXNjcmliZWQgYmVsb3cuIFNldCB0aGUgZGVzaXJlZCBiaXRzIGJ5IE9SaW5nIHRoZSB2YWx1ZXMgdG9nZXRoZXIuIEluIG5vcm1hbCBvcGVyYXRpb24sIHlvdSBtdXN0IHNwZWNpZnkgQ1VSTF9HTE9CQUxfQUxMLiAgRG9uJ3QgdXNlIGFueSBvdGhlciB2YWx1ZSB1bmxlc3MgeW91IGFyZSBmYW1pbGlhciB3aXRoIGl0IGFuZCBtZWFuIHRvIGNvbnRyb2wgaW50ZXJuYWwgb3BlcmF0aW9ucyBvZiBsaWJjdXJsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5UaGlzIGZ1bmN0aW9uIGlzIG5vdCB0aHJlYWQgc2FmZS48L3NwYW4+IFlvdSBtdXN0IG5vdCBjYWxsIGl0IHdoZW4gYW55IG90aGVyIHRocmVhZCBpbiB0aGUgcHJvZ3JhbSAoaS5lLiBhIHRocmVhZCBzaGFyaW5nIHRoZSBzYW1lIG1lbW9yeSkgaXMgcnVubmluZy4gVGhpcyBkb2Vzbid0IGp1c3QgbWVhbiBubyBvdGhlciB0aHJlYWQgdGhhdCBpcyB1c2luZyBsaWJjdXJsLiAgQmVjYXVzZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmN1cmxfZ2xvYmFsX2luaXQoKTwvc3Bhbj4gY2FsbHMgZnVuY3Rpb25zIG9mIG90aGVyIGxpYnJhcmllcyB0aGF0IGFyZSBzaW1pbGFybHkgdGhyZWFkIHVuc2FmZSwgaXQgY291bGQgY29uZmxpY3Qgd2l0aCBhbnkgb3RoZXIgdGhyZWFkIHRoYXQgdXNlcyB0aGVzZSBvdGhlciBsaWJyYXJpZXMuIAorPHAgY2xhc3M9ImxldmVsMCI+U2VlIHRoZSBkZXNjcmlwdGlvbiBpbiA8c3BhbiBDbGFzcz0iYm9sZCI+bGliY3VybDwvc3Bhbj4oMykgb2YgZ2xvYmFsIGVudmlyb25tZW50IHJlcXVpcmVtZW50cyBmb3IgZGV0YWlscyBvZiBob3cgdG8gdXNlIHRoaXMgZnVuY3Rpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iRkxBR1MiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkZMQUdTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxfR0xPQkFMX0FMTDwvc3Bhbj4gSW5pdGlhbGl6ZSBldmVyeXRoaW5nIHBvc3NpYmxlLiBUaGlzIHNldHMgYWxsIGtub3duIGJpdHMuIAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxfR0xPQkFMX1NTTDwvc3Bhbj4gSW5pdGlhbGl6ZSBTU0wgCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Q1VSTF9HTE9CQUxfV0lOMzI8L3NwYW4+IEluaXRpYWxpemUgdGhlIFdpbjMyIHNvY2tldCBsaWJyYXJpZXMuIAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPkNVUkxfR0xPQkFMX05PVEhJTkc8L3NwYW4+IEluaXRpYWxpc2Ugbm90aGluZyBleHRyYS4gVGhpcyBzZXRzIG5vIGJpdC4gPGEgbmFtZT0iUkVUVVJOIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SRVRVUk4gVkFMVUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+SWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvLCBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgeW91IGNhbm5vdCB1c2UgdGhlIG90aGVyIGN1cmwgZnVuY3Rpb25zLiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZ2xvYmFsX2luaXRfbWVtLmh0bWwiPmN1cmxfZ2xvYmFsX2luaXRfbWVtICgzKTwvYT4gPHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPiA8L3NwYW4+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZ2xvYmFsX2NsZWFudXAuaHRtbCI+Y3VybF9nbG9iYWxfY2xlYW51cCAoMyk8L2E+IDxzcGFuIENsYXNzPSJtYW5wYWdlIj4gPC9zcGFuPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX2Vhc3lfaW5pdC5odG1sIj5jdXJsX2Vhc3lfaW5pdCAoMykgPC9hPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9saWJjdXJsLmh0bWwiPmxpYmN1cmwgKDMpIDwvYT4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfaW5pdC5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfaW5pdC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY0MDg2NwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dsb2JhbF9pbml0LnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfaW5pdF9tZW0uMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dsb2JhbF9pbml0X21lbS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxM2ExN2MKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfaW5pdF9tZW0uMwpAQCAtMCwwICsxLDYwIEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX2dsb2JhbF9pbml0X21lbSAzICIxMCBNYXkgMjAwNCIgImxpYmN1cmwgNy4xMi4wIiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9nbG9iYWxfaW5pdF9tZW0gLSBHbG9iYWwgbGliY3VybCBpbml0aWFsaXNhdGlvbiB3aXRoIG1lbW9yeSBjYWxsYmFja3MKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorLm5mCisuQiAiQ1VSTGNvZGUgY3VybF9nbG9iYWxfaW5pdF9tZW0obG9uZyAiIGZsYWdzLAorLkIgIiBjdXJsX21hbGxvY19jYWxsYmFjayAibSwKKy5CICIgY3VybF9mcmVlX2NhbGxiYWNrICJmLAorLkIgIiBjdXJsX3JlYWxsb2NfY2FsbGJhY2sgInIsCisuQiAiIGN1cmxfc3RyZHVwX2NhbGxiYWNrICJzLAorLkIgIiBjdXJsX2NhbGxvY19jYWxsYmFjayAiYyAiKTsiCisuU0ggREVTQ1JJUFRJT04KK1RoaXMgZnVuY3Rpb24gd29ya3MgZXhhY3RseSBhcyBcZkljdXJsX2dsb2JhbF9pbml0KDMpXGZQIHdpdGggb25lIGFkZGl0aW9uOiBpdAorYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byBzZXQgY2FsbGJhY2tzIHRvIHJlcGxhY2UgdGhlIG90aGVyd2lzZSB1c2VkIGludGVybmFsCittZW1vcnkgZnVuY3Rpb25zLgorCitUaGlzIG1hbiBwYWdlIG9ubHkgYWRkcyBkb2N1bWVudGF0aW9uIGZvciB0aGUgY2FsbGJhY2tzLCBzZWUgdGhlCitcZkljdXJsX2dsb2JhbF9pbml0KDMpXGZQIG1hbiBwYWdlIGZvciBhbGwgdGhlIHJlc3QuIFdoZW4geW91IHVzZSB0aGlzCitmdW5jdGlvbiwgYWxsIGNhbGxiYWNrIGFyZ3VtZW50cyBtdXN0IGJlIHNldCB0byB2YWxpZCBmdW5jdGlvbiBwb2ludGVycy4KKworVGhlIHByb3RvdHlwZXMgZm9yIHRoZSBnaXZlbiBjYWxsYmFja3Mgc2hvdWxkIG1hdGNoIHRoZXNlOgorLklQICJ2b2lkICptYWxsb2NfY2FsbGJhY2soc2l6ZV90IHNpemUpOyIKK1RvIHJlcGxhY2UgbWFsbG9jKCkKKy5JUCAidm9pZCBmcmVlX2NhbGxiYWNrKHZvaWQgKnB0cik7IgorVG8gcmVwbGFjZSBmcmVlKCkKKy5JUCAidm9pZCAqcmVhbGxvY19jYWxsYmFjayh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsiCitUbyByZXBsYWNlIHJlYWxsb2MoKQorLklQICJjaGFyICpzdHJkdXBfY2FsbGJhY2soY29uc3QgY2hhciAqc3RyKTsiCitUbyByZXBsYWNlIHN0cmR1cCgpCisuSVAgInZvaWQgKmNhbGxvY19jYWxsYmFjayhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKTsiCitUbyByZXBsYWNlIGNhbGxvYygpCisuU0ggIkNBVVRJT04iCitNYW5pcHVsYXRpbmcgdGhlc2UgZ2l2ZXMgY29uc2lkZXJhYmxlIHBvd2VycyB0byB0aGUgYXBwbGljYXRpb24gdG8gc2V2ZXJseQorc2NyZXcgdGhpbmdzIHVwIGZvciBsaWJjdXJsLiBUYWtlIGNhcmUhCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfZ2xvYmFsX2luaXQgIigzKSwgIgorLkJSIGN1cmxfZ2xvYmFsX2NsZWFudXAgIigzKSwgIgorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfaW5pdF9tZW0uaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX2dsb2JhbF9pbml0X21lbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjVlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfaW5pdF9tZW0uaHRtbApAQCAtMCwwICsxLDY5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF9nbG9iYWxfaW5pdF9tZW0gbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9nbG9iYWxfaW5pdF9tZW0gLSBHbG9iYWwgbGliY3VybCBpbml0aWFsaXNhdGlvbiB3aXRoIG1lbW9yeSBjYWxsYmFja3MgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj4jaW5jbHVkZSAmbHQ7Y3VybC9jdXJsLmgmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5DVVJMY29kZSBjdXJsX2dsb2JhbF9pbml0X21lbShsb25nICBmbGFncyw8L3NwYW4+IDxzcGFuIENsYXNzPSJib2xkIj4gY3VybF9tYWxsb2NfY2FsbGJhY2sgbSw8L3NwYW4+IDxzcGFuIENsYXNzPSJib2xkIj4gY3VybF9mcmVlX2NhbGxiYWNrIGYsPC9zcGFuPiA8c3BhbiBDbGFzcz0iYm9sZCI+IGN1cmxfcmVhbGxvY19jYWxsYmFjayByLDwvc3Bhbj4gPHNwYW4gQ2xhc3M9ImJvbGQiPiBjdXJsX3N0cmR1cF9jYWxsYmFjayBzLDwvc3Bhbj4gPHNwYW4gQ2xhc3M9ImJvbGQiPiBjdXJsX2NhbGxvY19jYWxsYmFjayBjICk7PC9zcGFuPiA8YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhpcyBmdW5jdGlvbiB3b3JrcyBleGFjdGx5IGFzIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2dsb2JhbF9pbml0Lmh0bWwiPmN1cmxfZ2xvYmFsX2luaXQoMyk8L2E+IHdpdGggb25lIGFkZGl0aW9uOiBpdCBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIHNldCBjYWxsYmFja3MgdG8gcmVwbGFjZSB0aGUgb3RoZXJ3aXNlIHVzZWQgaW50ZXJuYWwgbWVtb3J5IGZ1bmN0aW9ucy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIG1hbiBwYWdlIG9ubHkgYWRkcyBkb2N1bWVudGF0aW9uIGZvciB0aGUgY2FsbGJhY2tzLCBzZWUgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2dsb2JhbF9pbml0Lmh0bWwiPmN1cmxfZ2xvYmFsX2luaXQoMyk8L2E+IG1hbiBwYWdlIGZvciBhbGwgdGhlIHJlc3QuIFdoZW4geW91IHVzZSB0aGlzIGZ1bmN0aW9uLCBhbGwgY2FsbGJhY2sgYXJndW1lbnRzIG11c3QgYmUgc2V0IHRvIHZhbGlkIGZ1bmN0aW9uIHBvaW50ZXJzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBwcm90b3R5cGVzIGZvciB0aGUgZ2l2ZW4gY2FsbGJhY2tzIHNob3VsZCBtYXRjaCB0aGVzZTogCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJ2b2lkIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPnZvaWQgKm1hbGxvY19jYWxsYmFjayhzaXplX3Qgc2l6ZSk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRvIHJlcGxhY2UgbWFsbG9jKCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJ2b2lkIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPnZvaWQgZnJlZV9jYWxsYmFjayh2b2lkICpwdHIpOzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UbyByZXBsYWNlIGZyZWUoKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9InZvaWQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+dm9pZCAqcmVhbGxvY19jYWxsYmFjayh2b2lkICpwdHIsIHNpemVfdCBzaXplKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VG8gcmVwbGFjZSByZWFsbG9jKCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJjaGFyIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPmNoYXIgKnN0cmR1cF9jYWxsYmFjayhjb25zdCBjaGFyICpzdHIpOzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UbyByZXBsYWNlIHN0cmR1cCgpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0idm9pZCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj52b2lkICpjYWxsb2NfY2FsbGJhY2soc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRvIHJlcGxhY2UgY2FsbG9jKCkgPGEgbmFtZT0iQ0FVVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+Q0FVVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5NYW5pcHVsYXRpbmcgdGhlc2UgZ2l2ZXMgY29uc2lkZXJhYmxlIHBvd2VycyB0byB0aGUgYXBwbGljYXRpb24gdG8gc2V2ZXJseSBzY3JldyB0aGluZ3MgdXAgZm9yIGxpYmN1cmwuIFRha2UgY2FyZSEgPGEgbmFtZT0iU0VFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TRUUgQUxTTzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX2dsb2JhbF9pbml0Lmh0bWwiPmN1cmxfZ2xvYmFsX2luaXQgKDMpPC9hPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+IDwvc3Bhbj4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9nbG9iYWxfY2xlYW51cC5odG1sIj5jdXJsX2dsb2JhbF9jbGVhbnVwICgzKTwvYT4gPHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPiA8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfaW5pdF9tZW0ucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZ2xvYmFsX2luaXRfbWVtLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzI2YTJhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfZ2xvYmFsX2luaXRfbWVtLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tcHJpbnRmLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tcHJpbnRmLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmMTBlMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX21wcmludGYuMwpAQCAtMCwwICsxLDEwOSBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF9wcmludGYgMyAiMzAgQXByaWwgMjAwNCIgImxpYmN1cmwgNy4xMiIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfbWFwcmludGYsIGN1cmxfbWZwcmludGYsIGN1cmxfbXByaW50ZiwgY3VybF9tc25wcmludGYsIGN1cmxfbXNwcmludGYKK2N1cmxfbXZhcHJpbnRmLCBjdXJsX212ZnByaW50ZiwgY3VybF9tdnByaW50ZiwgY3VybF9tdnNucHJpbnRmLAorY3VybF9tdnNwcmludGYgLSBmb3JtYXR0ZWQgb3V0cHV0IGNvbnZlcnNpb24KKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorLnNwCisuQkkgImludCBjdXJsX21wcmludGYoY29uc3QgY2hhciAqIiBmb3JtYXQgIiwgLi4uKTsiCisuYnIKKy5CSSAiaW50IGN1cmxfbWZwcmludGYoRklMRSAqIiBmZCAiLCBjb25zdCBjaGFyICoiIGZvcm1hdCAiLCAuLi4pOyIKKy5icgorLkJJICJpbnQgY3VybF9tc3ByaW50ZihjaGFyICoiIGJ1ZmZlciAiLCBjb25zdCBjaGFyICoiIGZvcm1hdCAiLCAuLi4pOyIKKy5icgorLkJJICJpbnQgY3VybF9tc25wcmludGYoY2hhciAqIiBidWZmZXIgIiwgc2l6ZV90ICIgbWF4bGVuZ3RoICIsIGNvbnN0IGNoYXIgKiIgZm9ybWF0ICIsIC4uLik7IgorLmJyCisuQkkgImludCBjdXJsX212cHJpbnRmKGNvbnN0IGNoYXIgKiIgZm9ybWF0ICIsIHZhX2xpc3QgIiBhcmdzICIpOyIKKy5icgorLkJJICJpbnQgY3VybF9tdmZwcmludGYoRklMRSAqIiBmZCAiLCBjb25zdCBjaGFyICoiIGZvcm1hdCAiLCB2YV9saXN0ICIgYXJncyAiKTsiCisuYnIKKy5CSSAiaW50IGN1cmxfbXZzcHJpbnRmKGNoYXIgKiIgYnVmZmVyICIsIGNvbnN0IGNoYXIgKiIgZm9ybWF0ICIsIHZhX2xpc3QgIiBhcmdzICIpOyIKKy5icgorLkJJICJpbnQgY3VybF9tdnNucHJpbnRmKGNoYXIgKiIgYnVmZmVyICIsIHNpemVfdCAiIG1heGxlbmd0aCAiLCBjb25zdCBjaGFyICoiIGZvcm1hdCAiLCB2YV9saXN0ICIgYXJncyAiKTsiCisuYnIKKy5CSSAiY2hhciAqY3VybF9tYXByaW50Zihjb25zdCBjaGFyICoiIGZvcm1hdCAiLCAuLi4pOyIKKy5icgorLkJJICJjaGFyICpjdXJsX212YXByaW50Zihjb25zdCBjaGFyICoiIGZvcm1hdCAiLCB2YV9saXN0ICIgYXJncyAiKTsiCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIGFyZSBhbGwgZnVuY3Rpb25zIHRoYXQgcHJvZHVjZSBvdXRwdXQgYWNjb3JkaW5nIHRvIGEgZm9ybWF0IHN0cmluZyBhbmQKK2dpdmVuIGFyZ3VtZW50cy4gVGhlc2UgYXJlIG1vc3RseSBjbG9uZXMgb2YgdGhlIHdlbGwta25vd24gQy1zdHlsZSBmdW5jdGlvbnMKK2FuZCB0aGVyZSB3aWxsIGJlIG5vIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIGFsbCBhdmFpbGFibGUgZm9ybWF0dGluZyBydWxlcworYW5kIHVzYWdlIGhlcmUuCisKK1NlZSB0aGlzIHRhYmxlIGZvciBub3RhYmxlIGV4Y2VwdGlvbnMuCisuUlMKKy5UUAorLkIgY3VybF9tcHJpbnRmKCkKK05vcm1hbCBwcmludGYoKSBjbG9uZS4KKy5UUAorLkIgY3VybF9tZnByaW50ZigpCitOb3JtYWwgZnByaW50ZigpIGNsb25lLgorLlRQCisuQiBjdXJsX21zcHJpbnRmKCkKK05vcm1hbCBzcHJpbnRmKCkgY2xvbmUuCisuVFAKKy5CIGN1cmxfbXNucHJpbnRmKCkKK3NucHJpbnRmKCkgY2xvbmUuIE1hbnkgc3lzdGVtcyBkb24ndCBoYXZlIHRoaXMuIEl0IGlzIGp1c3QgbGlrZSBcZkJzcHJpbnRmXGZQCitidXQgd2l0aCBhbiBleHRyYSBhcmd1bWVudCBhZnRlciB0aGUgYnVmZmVyIHRoYXQgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlCit0YXJnZXQgYnVmZmVyLgorLlRQCisuQiBjdXJsX212cHJpbnRmKCkKK05vcm1hbCB2cHJpbnRmKCkgY2xvbmUuCisuVFAKKy5CIGN1cmxfbXZmcHJpbnRmKCkKK05vcm1hbCB2ZnByaW50ZigpIGNsb25lLgorLlRQCisuQiBjdXJsX212c3ByaW50ZigpCitOb3JtYWwgdnNwcmludGYoKSBjbG9uZS4KKy5UUAorLkIgY3VybF9tdnNucHJpbnRmKCkKK3ZzbnByaW50ZigpIGNsb25lLiAgTWFueSBzeXN0ZW1zIGRvbid0IGhhdmUgdGhpcy4gSXQgaXMganVzdCBsaWtlCitcZkJ2c3ByaW50ZlxmUCBidXQgd2l0aCBhbiBleHRyYSBhcmd1bWVudCBhZnRlciB0aGUgYnVmZmVyIHRoYXQgc3BlY2lmaWVzIHRoZQorbGVuZ3RoIG9mIHRoZSB0YXJnZXQgYnVmZmVyLgorLlRQCisuQiBjdXJsX21hcHJpbnRmKCkKK0xpa2UgcHJpbnRmKCkgYnV0IHJldHVybnMgdGhlIG91dHB1dCBzdHJpbmcgYXMgYSBtYWxsb2MoKWVkIHN0cmluZy4gVGhlCityZXR1cm5lZCBzdHJpbmcgbXVzdCBiZSBmcmVlKCllZCBieSB0aGUgcmVjZWl2ZXIuCisuVFAKKy5CIGN1cmxfbXZhcHJpbnRmKCkKK0xpa2UgY3VybF9tYXByaW50ZigpIGJ1dCB0YWtlcyBhIHZhX2xpc3QgcG9pbnRlciBhcmd1bWVudCBpbnN0ZWFkIG9mIGEKK3ZhcmlhYmxlIGFtb3VudCBvZiBhcmd1bWVudHMuCisuUkUKKworVG8gZWFzaWx5IHVzZSBhbGwgdGhlc2UgY2xvbmVkIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgb25lcywgI2RlZmluZQorX01QUklOVEZfUkVQTEFDRSBiZWZvcmUgeW91IGluY2x1ZGUgdGhlIDxjdXJsL21wcmludGYuaD4gZmlsZS4gVGhlbiBhbGwgdGhlCitub3JtYWwgbmFtZXMgbGlrZSBwcmludGYsIGZwcmludGYsIHNwcmludGYgZXRjIHdpbGwgdXNlIHRoZSBjdXJsLWZ1bmN0aW9ucworaW5zdGVhZC4KKy5TSCBBVkFJTEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBwdWJsaWMgbGliY3VybCBBUEkgaW4gYSBuZWFyCitmdXR1cmUuIFRoZXkgd2lsbCBpbnN0ZWFkIGJlIG1hZGUgImF2YWlsYWJsZSIgYnkgc291cmNlIGNvZGUgYWNjZXNzIG9ubHksIGFuZAordGhlbiBhcyBjdXJseF8tcHJlZml4ZWQgZnVuY3Rpb25zLiBTZWUgbGliL1JFQURNRS5jdXJseCBmb3IgZnVydGhlciBkZXRhaWxzLgorLlNIIFJFVFVSTiBWQUxVRQorVGhlIFxmQmN1cmxfbWFwcmludGZcZlAgYW5kIFxmQmN1cmxfbXZhcHJpbnRmXGZQIGZ1bmN0aW9ucyByZXR1cm4gYSBwb2ludGVyIHRvCithIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcsIG9yIE5VTEwgaWYgaXQgZmFpbGVkLgorCitBbGwgb3RoZXIgZnVuY3Rpb25zIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhleSBhY3R1YWxseSBvdXRwdXR0ZWQuCisuU0ggIlNFRSBBTFNPIgorLkJSIHByaW50ZiAiKDMpLCAiIHNwcmludGYgIigzKSwgIiBmcHJpbnRmICIoMyksICIgdnByaW50ZiAiKDMpICIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX21wcmludGYuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX21wcmludGYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDUyMjg3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXByaW50Zi5odG1sCkBAIC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX3ByaW50ZiBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX21hcHJpbnRmLCBjdXJsX21mcHJpbnRmLCBjdXJsX21wcmludGYsIGN1cmxfbXNucHJpbnRmLCBjdXJsX21zcHJpbnRmIGN1cmxfbXZhcHJpbnRmLCBjdXJsX212ZnByaW50ZiwgY3VybF9tdnByaW50ZiwgY3VybF9tdnNucHJpbnRmLCBjdXJsX212c3ByaW50ZiAtIGZvcm1hdHRlZCBvdXRwdXQgY29udmVyc2lvbiA8YSBuYW1lPSJTWU5PUFNJUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1lOT1BTSVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPiNpbmNsdWRlICZsdDtjdXJsL21wcmludGYuaCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmludCBjdXJsX21wcmludGYoY29uc3QgY2hhciAqIGZvcm1hdCAsIC4uLik7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5pbnQgY3VybF9tZnByaW50ZihGSUxFICogZmQgLCBjb25zdCBjaGFyICogZm9ybWF0ICwgLi4uKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmludCBjdXJsX21zcHJpbnRmKGNoYXIgKiBidWZmZXIgLCBjb25zdCBjaGFyICogZm9ybWF0ICwgLi4uKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmludCBjdXJsX21zbnByaW50ZihjaGFyICogYnVmZmVyICwgc2l6ZV90ICBtYXhsZW5ndGggLCBjb25zdCBjaGFyICogZm9ybWF0ICwgLi4uKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmludCBjdXJsX212cHJpbnRmKGNvbnN0IGNoYXIgKiBmb3JtYXQgLCB2YV9saXN0ICBhcmdzICk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5pbnQgY3VybF9tdmZwcmludGYoRklMRSAqIGZkICwgY29uc3QgY2hhciAqIGZvcm1hdCAsIHZhX2xpc3QgIGFyZ3MgKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmludCBjdXJsX212c3ByaW50ZihjaGFyICogYnVmZmVyICwgY29uc3QgY2hhciAqIGZvcm1hdCAsIHZhX2xpc3QgIGFyZ3MgKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmludCBjdXJsX212c25wcmludGYoY2hhciAqIGJ1ZmZlciAsIHNpemVfdCAgbWF4bGVuZ3RoICwgY29uc3QgY2hhciAqIGZvcm1hdCAsIHZhX2xpc3QgIGFyZ3MgKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmNoYXIgKmN1cmxfbWFwcmludGYoY29uc3QgY2hhciAqIGZvcm1hdCAsIC4uLik7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5jaGFyICpjdXJsX212YXByaW50Zihjb25zdCBjaGFyICogZm9ybWF0ICwgdmFfbGlzdCAgYXJncyApOzwvc3Bhbj4gPGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZXNlIGFyZSBhbGwgZnVuY3Rpb25zIHRoYXQgcHJvZHVjZSBvdXRwdXQgYWNjb3JkaW5nIHRvIGEgZm9ybWF0IHN0cmluZyBhbmQgZ2l2ZW4gYXJndW1lbnRzLiBUaGVzZSBhcmUgbW9zdGx5IGNsb25lcyBvZiB0aGUgd2VsbC1rbm93biBDLXN0eWxlIGZ1bmN0aW9ucyBhbmQgdGhlcmUgd2lsbCBiZSBubyBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBhbGwgYXZhaWxhYmxlIGZvcm1hdHRpbmcgcnVsZXMgYW5kIHVzYWdlIGhlcmUuIAorPHAgY2xhc3M9ImxldmVsMCI+U2VlIHRoaXMgdGFibGUgZm9yIG5vdGFibGUgZXhjZXB0aW9ucy4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDEiPjxzcGFuIENsYXNzPSJib2xkIj5jdXJsX21wcmludGYoKTwvc3Bhbj4gTm9ybWFsIHByaW50ZigpIGNsb25lLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxzcGFuIENsYXNzPSJib2xkIj5jdXJsX21mcHJpbnRmKCk8L3NwYW4+IE5vcm1hbCBmcHJpbnRmKCkgY2xvbmUuIAorPHAgY2xhc3M9ImxldmVsMSI+PHNwYW4gQ2xhc3M9ImJvbGQiPmN1cmxfbXNwcmludGYoKTwvc3Bhbj4gTm9ybWFsIHNwcmludGYoKSBjbG9uZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj48c3BhbiBDbGFzcz0iYm9sZCI+Y3VybF9tc25wcmludGYoKTwvc3Bhbj4gc25wcmludGYoKSBjbG9uZS4gTWFueSBzeXN0ZW1zIGRvbid0IGhhdmUgdGhpcy4gSXQgaXMganVzdCBsaWtlIDxzcGFuIENsYXNzPSJib2xkIj5zcHJpbnRmPC9zcGFuPiBidXQgd2l0aCBhbiBleHRyYSBhcmd1bWVudCBhZnRlciB0aGUgYnVmZmVyIHRoYXQgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlIHRhcmdldCBidWZmZXIuIAorPHAgY2xhc3M9ImxldmVsMSI+PHNwYW4gQ2xhc3M9ImJvbGQiPmN1cmxfbXZwcmludGYoKTwvc3Bhbj4gTm9ybWFsIHZwcmludGYoKSBjbG9uZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj48c3BhbiBDbGFzcz0iYm9sZCI+Y3VybF9tdmZwcmludGYoKTwvc3Bhbj4gTm9ybWFsIHZmcHJpbnRmKCkgY2xvbmUuIAorPHAgY2xhc3M9ImxldmVsMSI+PHNwYW4gQ2xhc3M9ImJvbGQiPmN1cmxfbXZzcHJpbnRmKCk8L3NwYW4+IE5vcm1hbCB2c3ByaW50ZigpIGNsb25lLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxzcGFuIENsYXNzPSJib2xkIj5jdXJsX212c25wcmludGYoKTwvc3Bhbj4gdnNucHJpbnRmKCkgY2xvbmUuICBNYW55IHN5c3RlbXMgZG9uJ3QgaGF2ZSB0aGlzLiBJdCBpcyBqdXN0IGxpa2UgPHNwYW4gQ2xhc3M9ImJvbGQiPnZzcHJpbnRmPC9zcGFuPiBidXQgd2l0aCBhbiBleHRyYSBhcmd1bWVudCBhZnRlciB0aGUgYnVmZmVyIHRoYXQgc3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlIHRhcmdldCBidWZmZXIuIAorPHAgY2xhc3M9ImxldmVsMSI+PHNwYW4gQ2xhc3M9ImJvbGQiPmN1cmxfbWFwcmludGYoKTwvc3Bhbj4gTGlrZSBwcmludGYoKSBidXQgcmV0dXJucyB0aGUgb3V0cHV0IHN0cmluZyBhcyBhIG1hbGxvYygpZWQgc3RyaW5nLiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUgZnJlZSgpZWQgYnkgdGhlIHJlY2VpdmVyLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxzcGFuIENsYXNzPSJib2xkIj5jdXJsX212YXByaW50ZigpPC9zcGFuPiBMaWtlIGN1cmxfbWFwcmludGYoKSBidXQgdGFrZXMgYSB2YV9saXN0IHBvaW50ZXIgYXJndW1lbnQgaW5zdGVhZCBvZiBhIHZhcmlhYmxlIGFtb3VudCBvZiBhcmd1bWVudHMuIAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UbyBlYXNpbHkgdXNlIGFsbCB0aGVzZSBjbG9uZWQgZnVuY3Rpb25zIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBvbmVzLCAjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgYmVmb3JlIHlvdSBpbmNsdWRlIHRoZSAmbHQ7Y3VybC9tcHJpbnRmLmgmZ3Q7IGZpbGUuIFRoZW4gYWxsIHRoZSBub3JtYWwgbmFtZXMgbGlrZSBwcmludGYsIGZwcmludGYsIHNwcmludGYgZXRjIHdpbGwgdXNlIHRoZSBjdXJsLWZ1bmN0aW9ucyBpbnN0ZWFkLiA8YSBuYW1lPSJBVkFJTEFCSUxJVFkiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkFWQUlMQUJJTElUWTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGVzZSBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHVibGljIGxpYmN1cmwgQVBJIGluIGEgbmVhciBmdXR1cmUuIFRoZXkgd2lsbCBpbnN0ZWFkIGJlIG1hZGUgImF2YWlsYWJsZSIgYnkgc291cmNlIGNvZGUgYWNjZXNzIG9ubHksIGFuZCB0aGVuIGFzIGN1cmx4Xy1wcmVmaXhlZCBmdW5jdGlvbnMuIFNlZSBsaWIvUkVBRE1FLmN1cmx4IGZvciBmdXJ0aGVyIGRldGFpbHMuIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSA8c3BhbiBDbGFzcz0iYm9sZCI+Y3VybF9tYXByaW50Zjwvc3Bhbj4gYW5kIDxzcGFuIENsYXNzPSJib2xkIj5jdXJsX212YXByaW50Zjwvc3Bhbj4gZnVuY3Rpb25zIHJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nLCBvciBOVUxMIGlmIGl0IGZhaWxlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5BbGwgb3RoZXIgZnVuY3Rpb25zIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhleSBhY3R1YWxseSBvdXRwdXR0ZWQuIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPnByaW50ZiAoMyk8L3NwYW4+IDxzcGFuIENsYXNzPSJtYW5wYWdlIj4gIHNwcmludGYgKDMpPC9zcGFuPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+ICBmcHJpbnRmICgzKTwvc3Bhbj4gPHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPiAgdnByaW50ZiAoMykgPC9zcGFuPiA8cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX21wcmludGYucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXByaW50Zi5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlM2Q3YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX21wcmludGYucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2FkZF9oYW5kbGUuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2FkZF9oYW5kbGUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWUyYzkwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfYWRkX2hhbmRsZS4zCkBAIC0wLDAgKzEsNTcgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGN1cmxfbXVsdGlfYWRkX2hhbmRsZSAzICI0IE1hcmNoIDIwMDIiICJsaWJjdXJsIDcuOS41IiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9tdWx0aV9hZGRfaGFuZGxlIC0gYWRkIGFuIGVhc3kgaGFuZGxlIHRvIGEgbXVsdGkgc2Vzc2lvbgorLlNIIFNZTk9QU0lTCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK0NVUkxNY29kZSBjdXJsX211bHRpX2FkZF9oYW5kbGUoQ1VSTE0gKm11bHRpX2hhbmRsZSwgQ1VSTCAqZWFzeV9oYW5kbGUpOworLmFkCisuU0ggREVTQ1JJUFRJT04KK0FkZHMgYSBzdGFuZGFyZCBlYXN5IGhhbmRsZSB0byB0aGUgbXVsdGkgc3RhY2suIFRoaXMgZnVuY3Rpb24gY2FsbCB3aWxsIG1ha2UKK3RoaXMgXGZJbXVsdGlfaGFuZGxlXGZQIGNvbnRyb2wgdGhlIHNwZWNpZmllZCBcZkllYXN5X2hhbmRsZVxmUC4KK0Z1cnRoZXJtb3JlLCBsaWJjdXJsIG5vdyBpbml0aWF0ZXMgdGhlIGNvbm5lY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZQorc3BlY2lmaWVkIFxmSWVhc3lfaGFuZGxlXGZQLgorCitXaGVuIGFuIGVhc3kgaGFuZGxlIGhhcyBiZWVuIGFkZGVkIHRvIGEgbXVsdGkgc3RhY2ssIHlvdSBjYW4gbm90IGFuZCB5b3UgbXVzdAorbm90IHVzZSBcZkljdXJsX2Vhc3lfcGVyZm9ybSgzKVxmUCBvbiB0aGF0IGhhbmRsZSEKKworSWYgdGhlIGVhc3kgaGFuZGxlIGlzIG5vdCBzZXQgdG8gdXNlIGEgc2hhcmVkIChDVVJMT1BUX1NIQVJFKSBvciBnbG9iYWwgRE5TCitjYWNoZSAoQ1VSTE9QVF9ETlNfVVNFX0dMT0JBTF9DQUNIRSksIGl0IHdpbGwgYmUgbWFkZSB0byB1c2UgdGhlIEROUyBjYWNoZQordGhhdCBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgZWFzeSBoYW5kbGVzIHdpdGhpbiB0aGUgbXVsdGkgaGFuZGxlIHdoZW4KK1xmSWN1cmxfbXVsdGlfYWRkX2hhbmRsZSgzKVxmUCBpcyBjYWxsZWQuCisKK1RoZSBlYXN5IGhhbmRsZSB3aWxsIHJlbWFpbiBhZGRlZCB1bnRpbCB5b3UgcmVtb3ZlIGl0IGFnYWluIHdpdGgKK1xmSWN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgzKVxmUC4gWW91IHNob3VsZCByZW1vdmUgdGhlIGVhc3kgaGFuZGxlIGZyb20gdGhlCittdWx0aSBzdGFjayBiZWZvcmUgeW91IHRlcm1pbmF0ZSBmaXJzdCB0aGUgZWFzeSBoYW5kbGUgYW5kIHRoZW4gdGhlIG11bHRpCitoYW5kbGU6CisKKzEgLSBcZkljdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoMylcZlAKKworMiAtIFxmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQCisKKzMgLSBcZkljdXJsX211bHRpX2NsZWFudXAoMylcZlAKKy5TSCBSRVRVUk4gVkFMVUUKK0NVUkxNY29kZSB0eXBlLCBnZW5lcmFsIGxpYmN1cmwgbXVsdGkgaW50ZXJmYWNlIGVycm9yIGNvZGUuCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfbXVsdGlfY2xlYW51cCAiKDMpLCIgY3VybF9tdWx0aV9pbml0ICIoMykiCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9hZGRfaGFuZGxlLmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9hZGRfaGFuZGxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0MTM1MgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2FkZF9oYW5kbGUuaHRtbApAQCAtMCwwICsxLDYzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF9tdWx0aV9hZGRfaGFuZGxlIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfbXVsdGlfYWRkX2hhbmRsZSAtIGFkZCBhbiBlYXN5IGhhbmRsZSB0byBhIG11bHRpIHNlc3Npb24gPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDsgCis8cCBjbGFzcz0ibGV2ZWwwIj5DVVJMTWNvZGUgY3VybF9tdWx0aV9hZGRfaGFuZGxlKENVUkxNICptdWx0aV9oYW5kbGUsIENVUkwgKmVhc3lfaGFuZGxlKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+QWRkcyBhIHN0YW5kYXJkIGVhc3kgaGFuZGxlIHRvIHRoZSBtdWx0aSBzdGFjay4gVGhpcyBmdW5jdGlvbiBjYWxsIHdpbGwgbWFrZSB0aGlzIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bXVsdGlfaGFuZGxlPC9zcGFuPiBjb250cm9sIHRoZSBzcGVjaWZpZWQgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5lYXN5X2hhbmRsZTwvc3Bhbj4uIEZ1cnRoZXJtb3JlLCBsaWJjdXJsIG5vdyBpbml0aWF0ZXMgdGhlIGNvbm5lY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5lYXN5X2hhbmRsZTwvc3Bhbj4uIAorPHAgY2xhc3M9ImxldmVsMCI+V2hlbiBhbiBlYXN5IGhhbmRsZSBoYXMgYmVlbiBhZGRlZCB0byBhIG11bHRpIHN0YWNrLCB5b3UgY2FuIG5vdCBhbmQgeW91IG11c3Qgbm90IHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3BlcmZvcm0uaHRtbCI+Y3VybF9lYXN5X3BlcmZvcm0oMyk8L2E+IG9uIHRoYXQgaGFuZGxlISAKKzxwIGNsYXNzPSJsZXZlbDAiPklmIHRoZSBlYXN5IGhhbmRsZSBpcyBub3Qgc2V0IHRvIHVzZSBhIHNoYXJlZCAoQ1VSTE9QVF9TSEFSRSkgb3IgZ2xvYmFsIEROUyBjYWNoZSAoQ1VSTE9QVF9ETlNfVVNFX0dMT0JBTF9DQUNIRSksIGl0IHdpbGwgYmUgbWFkZSB0byB1c2UgdGhlIEROUyBjYWNoZSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBlYXN5IGhhbmRsZXMgd2l0aGluIHRoZSBtdWx0aSBoYW5kbGUgd2hlbiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9hZGRfaGFuZGxlLmh0bWwiPmN1cmxfbXVsdGlfYWRkX2hhbmRsZSgzKTwvYT4gaXMgY2FsbGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBlYXN5IGhhbmRsZSB3aWxsIHJlbWFpbiBhZGRlZCB1bnRpbCB5b3UgcmVtb3ZlIGl0IGFnYWluIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZS5odG1sIj5jdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoMyk8L2E+LiBZb3Ugc2hvdWxkIHJlbW92ZSB0aGUgZWFzeSBoYW5kbGUgZnJvbSB0aGUgbXVsdGkgc3RhY2sgYmVmb3JlIHlvdSB0ZXJtaW5hdGUgZmlyc3QgdGhlIGVhc3kgaGFuZGxlIGFuZCB0aGVuIHRoZSBtdWx0aSBoYW5kbGU6IAorPHAgY2xhc3M9ImxldmVsMCI+MSAtIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3JlbW92ZV9oYW5kbGUuaHRtbCI+Y3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKDMpPC9hPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjIgLSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X2NsZWFudXAuaHRtbCI+Y3VybF9lYXN5X2NsZWFudXAoMyk8L2E+IAorPHAgY2xhc3M9ImxldmVsMCI+MyAtIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX2NsZWFudXAuaHRtbCI+Y3VybF9tdWx0aV9jbGVhbnVwKDMpPC9hPiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5DVVJMTWNvZGUgdHlwZSwgZ2VuZXJhbCBsaWJjdXJsIG11bHRpIGludGVyZmFjZSBlcnJvciBjb2RlLiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfY2xlYW51cC5odG1sIj5jdXJsX211bHRpX2NsZWFudXAgKDMpPC9hPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX211bHRpX2luaXQuaHRtbCI+IGN1cmxfbXVsdGlfaW5pdCAoMyk8L2E+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfYWRkX2hhbmRsZS5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9hZGRfaGFuZGxlLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTlmYzgzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfYWRkX2hhbmRsZS5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfYXNzaWduLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9hc3NpZ24uMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjU4MGZlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfYXNzaWduLjMKQEAgLTAsMCArMSw2MyBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF9tdWx0aV9hc3NpZ24gMyAiOSBKdWwgMjAwNiIgImxpYmN1cmwgNy4xNi4wIiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9tdWx0aV9hc3NpZ24gXC0gc2V0IGRhdGEgdG8gYXNzb2NpYXRpb24gd2l0aCBhbiBpbnRlcm5hbCBzb2NrZXQKKy5TSCBTWU5PUFNJUworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitDVVJMTWNvZGUgY3VybF9tdWx0aV9hc3NpZ24oQ1VSTE0gKm11bHRpX2hhbmRsZSwgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc29ja3B0cik7CisuU0ggREVTQ1JJUFRJT04KK1RoaXMgZnVuY3Rpb24gYXNzaWducyBhbiBhc3NvY2lhdGlvbiBpbiB0aGUgbXVsdGkgaGFuZGxlIGJldHdlZW4gdGhlIGdpdmVuCitzb2NrZXQgYW5kIGEgcHJpdmF0ZSBwb2ludGVyIG9mIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBpcyAob25seSkgdXNlZnVsIGZvcgorXGZJY3VybF9tdWx0aV9zb2NrZXQoMylcZlAgdXNlcy4KKworV2hlbiBzZXQsIHRoZSBcZklzb2NrcHRyXGZQIHBvaW50ZXIgd2lsbCBiZSBwYXNzZWQgdG8gYWxsIGZ1dHVyZSBzb2NrZXQKK2NhbGxiYWNrcyBmb3IgdGhlIHNwZWNpZmljIFxmSXNvY2tmZFxmUCBzb2NrZXQuCisKK0lmIHRoZSBnaXZlbiBcZklzb2NrZmRcZlAgaXNuJ3QgYWxyZWFkeSBpbiB1c2UgYnkgbGliY3VybCwgdGhpcyBmdW5jdGlvbiB3aWxsCityZXR1cm4gYW4gZXJyb3IuCisKK2xpYmN1cmwgb25seSBrZWVwcyBvbmUgc2luZ2xlIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIGEgc29ja2V0LCBzbyBjYWxsaW5nCit0aGlzIGZ1bmN0aW9uIHNldmVyYWwgdGltZXMgZm9yIHRoZSBzYW1lIHNvY2tldCB3aWxsIG1ha2UgdGhlIGxhc3Qgc2V0IHBvaW50ZXIKK2dldCB1c2VkLgorCitUaGUgaWRlYSBoZXJlIGJlaW5nIHRoYXQgdGhpcyBhc3NvY2lhdGlvbiAoc29ja2V0IHRvIHByaXZhdGUgcG9pbnRlcikgaXMKK3NvbWV0aGluZyB0aGF0IGp1c3QgYWJvdXQgZXZlcnkgYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoaXMgQVBJIHdpbGwgbmVlZCBhbmQKK3RoZW4gbGliY3VybCBjYW4ganVzdCBhcyB3ZWxsIGRvIGl0IHNpbmNlIGl0IGFscmVhZHkgaGFzIGFuIGludGVybmFsIGhhc2gKK3RhYmxlIGxvb2t1cCBmb3IgdGhpcy4KKy5TSCAiUkVUVVJOIFZBTFVFIgorVGhlIHN0YW5kYXJkIENVUkxNY29kZSBmb3IgbXVsdGkgaW50ZXJmYWNlIGVycm9yIGNvZGVzLgorLlNIICJUWVBJQ0FMIFVTQUdFIgorSW4gYSB0eXBpY2FsIGFwcGxpY2F0aW9uIHlvdSBhbGxvY2F0ZSBhIHN0cnVjdCBvciBhdCBsZWFzdCB1c2Ugc29tZSBraW5kIG9mCitzZW1pLWR5bmFtaWMgZGF0YSBmb3IgZWFjaCBzb2NrZXQgdGhhdCB3ZSBtdXN0IHdhaXQgZm9yIGFjdGlvbiBvbiB3aGVuIHVzaW5nCit0aGUgXGZJY3VybF9tdWx0aV9zb2NrZXQoMylcZlAgYXBwcm9hY2guCisKK1doZW4gb3VyIHNvY2tldC1jYWxsYmFjayBnZXRzIGNhbGxlZCBieSBsaWJjdXJsIGFuZCB3ZSBnZXQgdG8ga25vdyBhYm91dCB5ZXQKK2Fub3RoZXIgc29ja2V0IHRvIHdhaXQgZm9yLCB3ZSBjYW4gdXNlIFxmSWN1cmxfbXVsdGlfYXNzaWduKDMpXGZQIHRvIHBvaW50IG91dAordGhlIHBhcnRpY3VsYXIgZGF0YSBzbyB0aGF0IHdoZW4gd2UgZ2V0IHVwZGF0ZXMgYWJvdXQgdGhpcyBzYW1lIHNvY2tldCBhZ2FpbiwKK3dlIGRvbid0IGhhdmUgdG8gZmluZCB0aGUgc3RydWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNvY2tldCBieSBvdXJzZWx2ZXMuCisuU0ggQVZBSUxBQklMSVRZCitUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBsaWJjdXJsIDcuMTUuNSwgYWx0aG91Z2ggbm90IGRlZW1lZCBzdGFibGUgeWV0LgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX211bHRpX3NldG9wdCAiKDMpLCAiIGN1cmxfbXVsdGlfc29ja2V0ICIoMykgIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfYXNzaWduLmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9hc3NpZ24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQ2ODA3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfYXNzaWduLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfbXVsdGlfYXNzaWduIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfbXVsdGlfYXNzaWduIC0gc2V0IGRhdGEgdG8gYXNzb2NpYXRpb24gd2l0aCBhbiBpbnRlcm5hbCBzb2NrZXQgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDsgCis8cCBjbGFzcz0ibGV2ZWwwIj5DVVJMTWNvZGUgY3VybF9tdWx0aV9hc3NpZ24oQ1VSTE0gKm11bHRpX2hhbmRsZSwgY3VybF9zb2NrZXRfdCBzb2NrZmQsICZuYnNwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNvY2twdHIpOyA8YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhpcyBmdW5jdGlvbiBhc3NpZ25zIGFuIGFzc29jaWF0aW9uIGluIHRoZSBtdWx0aSBoYW5kbGUgYmV0d2VlbiB0aGUgZ2l2ZW4gc29ja2V0IGFuZCBhIHByaXZhdGUgcG9pbnRlciBvZiB0aGUgYXBwbGljYXRpb24uIFRoaXMgaXMgKG9ubHkpIHVzZWZ1bCBmb3IgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0Lmh0bWwiPmN1cmxfbXVsdGlfc29ja2V0KDMpPC9hPiB1c2VzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gc2V0LCB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5zb2NrcHRyPC9zcGFuPiBwb2ludGVyIHdpbGwgYmUgcGFzc2VkIHRvIGFsbCBmdXR1cmUgc29ja2V0IGNhbGxiYWNrcyBmb3IgdGhlIHNwZWNpZmljIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+c29ja2ZkPC9zcGFuPiBzb2NrZXQuIAorPHAgY2xhc3M9ImxldmVsMCI+SWYgdGhlIGdpdmVuIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+c29ja2ZkPC9zcGFuPiBpc24ndCBhbHJlYWR5IGluIHVzZSBieSBsaWJjdXJsLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVycm9yLiAKKzxwIGNsYXNzPSJsZXZlbDAiPmxpYmN1cmwgb25seSBrZWVwcyBvbmUgc2luZ2xlIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIGEgc29ja2V0LCBzbyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gc2V2ZXJhbCB0aW1lcyBmb3IgdGhlIHNhbWUgc29ja2V0IHdpbGwgbWFrZSB0aGUgbGFzdCBzZXQgcG9pbnRlciBnZXQgdXNlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgaWRlYSBoZXJlIGJlaW5nIHRoYXQgdGhpcyBhc3NvY2lhdGlvbiAoc29ja2V0IHRvIHByaXZhdGUgcG9pbnRlcikgaXMgc29tZXRoaW5nIHRoYXQganVzdCBhYm91dCBldmVyeSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhpcyBBUEkgd2lsbCBuZWVkIGFuZCB0aGVuIGxpYmN1cmwgY2FuIGp1c3QgYXMgd2VsbCBkbyBpdCBzaW5jZSBpdCBhbHJlYWR5IGhhcyBhbiBpbnRlcm5hbCBoYXNoIHRhYmxlIGxvb2t1cCBmb3IgdGhpcy4gPGEgbmFtZT0iUkVUVVJOIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SRVRVUk4gVkFMVUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhlIHN0YW5kYXJkIENVUkxNY29kZSBmb3IgbXVsdGkgaW50ZXJmYWNlIGVycm9yIGNvZGVzLiA8YSBuYW1lPSJUWVBJQ0FMIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5UWVBJQ0FMIFVTQUdFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPkluIGEgdHlwaWNhbCBhcHBsaWNhdGlvbiB5b3UgYWxsb2NhdGUgYSBzdHJ1Y3Qgb3IgYXQgbGVhc3QgdXNlIHNvbWUga2luZCBvZiBzZW1pLWR5bmFtaWMgZGF0YSBmb3IgZWFjaCBzb2NrZXQgdGhhdCB3ZSBtdXN0IHdhaXQgZm9yIGFjdGlvbiBvbiB3aGVuIHVzaW5nIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9zb2NrZXQuaHRtbCI+Y3VybF9tdWx0aV9zb2NrZXQoMyk8L2E+IGFwcHJvYWNoLiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gb3VyIHNvY2tldC1jYWxsYmFjayBnZXRzIGNhbGxlZCBieSBsaWJjdXJsIGFuZCB3ZSBnZXQgdG8ga25vdyBhYm91dCB5ZXQgYW5vdGhlciBzb2NrZXQgdG8gd2FpdCBmb3IsIHdlIGNhbiB1c2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfYXNzaWduLmh0bWwiPmN1cmxfbXVsdGlfYXNzaWduKDMpPC9hPiB0byBwb2ludCBvdXQgdGhlIHBhcnRpY3VsYXIgZGF0YSBzbyB0aGF0IHdoZW4gd2UgZ2V0IHVwZGF0ZXMgYWJvdXQgdGhpcyBzYW1lIHNvY2tldCBhZ2Fpbiwgd2UgZG9uJ3QgaGF2ZSB0byBmaW5kIHRoZSBzdHJ1Y3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc29ja2V0IGJ5IG91cnNlbHZlcy4gPGEgbmFtZT0iQVZBSUxBQklMSVRZIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5BVkFJTEFCSUxJVFk8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gbGliY3VybCA3LjE1LjUsIGFsdGhvdWdoIG5vdCBkZWVtZWQgc3RhYmxlIHlldC4gPGEgbmFtZT0iU0VFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TRUUgQUxTTzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX211bHRpX3NldG9wdC5odG1sIj5jdXJsX211bHRpX3NldG9wdCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0Lmh0bWwiPiAgY3VybF9tdWx0aV9zb2NrZXQgKDMpIDwvYT4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9hc3NpZ24ucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfYXNzaWduLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjQzNDExCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfYXNzaWduLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9jbGVhbnVwLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9jbGVhbnVwLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzYzlmMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2NsZWFudXAuMwpAQCAtMCwwICsxLDQ2IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX211bHRpX2NsZWFudXAgMyAiMSBNYXJjaCAyMDAyIiAibGliY3VybCA3LjkuNSIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfbXVsdGlfY2xlYW51cCAtIGNsb3NlIGRvd24gYSBtdWx0aSBzZXNzaW9uCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKy5zcAorLkJJICJDVVJMTWNvZGUgY3VybF9tdWx0aV9jbGVhbnVwKCBDVVJMTSAqbXVsdGlfaGFuZGxlICk7IgorLmFkCisuU0ggREVTQ1JJUFRJT04KK0NsZWFucyB1cCBhbmQgcmVtb3ZlcyBhIHdob2xlIG11bHRpIHN0YWNrLiBJdCBkb2VzIG5vdCBmcmVlIG9yIHRvdWNoIGFueQoraW5kaXZpZHVhbCBlYXN5IGhhbmRsZXMgaW4gYW55IHdheSAtIHRoZXkgc3RpbGwgbmVlZCB0byBiZSBjbG9zZWQKK2luZGl2aWR1YWxseSwgdXNpbmcgdGhlIHVzdWFsIFxmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQIHdheS4gVGhlIG9yZGVyIG9mCitjbGVhbmluZyB1cCBzaG91bGQgYmU6CisKKzEgLSBcZkljdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoMylcZlAgYmVmb3JlIGFueSBlYXN5IGhhbmRsZXMgYXJlIGNsZWFuZWQgdXAKKworMiAtIFxmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQIGNhbiBub3cgYmUgY2FsbGVkIGluZGVwZW5kZW50bHkgc2luY2UgdGhlIGVhc3kKK2hhbmRsZSBpcyBubyBsb25nZXIgY29ubmVjdGVkIHRvIHRoZSBtdWx0aSBoYW5kbGUKKworMyAtIFxmSWN1cmxfbXVsdGlfY2xlYW51cCgzKVxmUCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYWxsIGVhc3kgaGFuZGxlcyBhcmUKK3JlbW92ZWQKKy5TSCBSRVRVUk4gVkFMVUUKK0NVUkxNY29kZSB0eXBlLCBnZW5lcmFsIGxpYmN1cmwgbXVsdGkgaW50ZXJmYWNlIGVycm9yIGNvZGUuCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfbXVsdGlfaW5pdCAiKDMpLCIgY3VybF9lYXN5X2NsZWFudXAgIigzKSwiIGN1cmxfZWFzeV9pbml0ICIoMykiCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9jbGVhbnVwLmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9jbGVhbnVwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExY2NiYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2NsZWFudXAuaHRtbApAQCAtMCwwICsxLDYwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF9tdWx0aV9jbGVhbnVwIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfbXVsdGlfY2xlYW51cCAtIGNsb3NlIGRvd24gYSBtdWx0aSBzZXNzaW9uIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Q1VSTE1jb2RlIGN1cmxfbXVsdGlfY2xlYW51cCggQ1VSTE0gKm11bHRpX2hhbmRsZSApOzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Q2xlYW5zIHVwIGFuZCByZW1vdmVzIGEgd2hvbGUgbXVsdGkgc3RhY2suIEl0IGRvZXMgbm90IGZyZWUgb3IgdG91Y2ggYW55IGluZGl2aWR1YWwgZWFzeSBoYW5kbGVzIGluIGFueSB3YXkgLSB0aGV5IHN0aWxsIG5lZWQgdG8gYmUgY2xvc2VkIGluZGl2aWR1YWxseSwgdXNpbmcgdGhlIHVzdWFsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfY2xlYW51cC5odG1sIj5jdXJsX2Vhc3lfY2xlYW51cCgzKTwvYT4gd2F5LiBUaGUgb3JkZXIgb2YgY2xlYW5pbmcgdXAgc2hvdWxkIGJlOiAKKzxwIGNsYXNzPSJsZXZlbDAiPjEgLSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlLmh0bWwiPmN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgzKTwvYT4gYmVmb3JlIGFueSBlYXN5IGhhbmRsZXMgYXJlIGNsZWFuZWQgdXAgCis8cCBjbGFzcz0ibGV2ZWwwIj4yIC0gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9jbGVhbnVwLmh0bWwiPmN1cmxfZWFzeV9jbGVhbnVwKDMpPC9hPiBjYW4gbm93IGJlIGNhbGxlZCBpbmRlcGVuZGVudGx5IHNpbmNlIHRoZSBlYXN5IGhhbmRsZSBpcyBubyBsb25nZXIgY29ubmVjdGVkIHRvIHRoZSBtdWx0aSBoYW5kbGUgCis8cCBjbGFzcz0ibGV2ZWwwIj4zIC0gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfY2xlYW51cC5odG1sIj5jdXJsX211bHRpX2NsZWFudXAoMyk8L2E+IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhbGwgZWFzeSBoYW5kbGVzIGFyZSByZW1vdmVkIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPkNVUkxNY29kZSB0eXBlLCBnZW5lcmFsIGxpYmN1cmwgbXVsdGkgaW50ZXJmYWNlIGVycm9yIGNvZGUuIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9pbml0Lmh0bWwiPmN1cmxfbXVsdGlfaW5pdCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9jbGVhbnVwLmh0bWwiPiBjdXJsX2Vhc3lfY2xlYW51cCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9pbml0Lmh0bWwiPiBjdXJsX2Vhc3lfaW5pdCAoMyk8L2E+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfY2xlYW51cC5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9jbGVhbnVwLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDJiOGU4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfY2xlYW51cC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfZmRzZXQuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2Zkc2V0LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RiZGM0NQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2Zkc2V0LjMKQEAgLTAsMCArMSw3MCBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF9tdWx0aV9mZHNldCAzICIyIEphbiAyMDA2IiAibGliY3VybCA3LjE2LjAiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX211bHRpX2Zkc2V0IC0gZXh0cmFjdHMgZmlsZSBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIGZyb20gYSBtdWx0aSBoYW5kbGUKKy5TSCBTWU5PUFNJUworLm5mCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK0NVUkxNY29kZSBjdXJsX211bHRpX2Zkc2V0KENVUkxNICptdWx0aV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKnJlYWRfZmRfc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICp3cml0ZV9mZF9zZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKmV4Y19mZF9zZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm1heF9mZCk7CisuYWQKKy5TSCBERVNDUklQVElPTgorVGhpcyBmdW5jdGlvbiBleHRyYWN0cyBmaWxlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gZnJvbSBhIGdpdmVuIG11bHRpX2hhbmRsZS4KK2xpYmN1cmwgcmV0dXJucyBpdHMgZmRfc2V0IHNldHMuIFRoZSBhcHBsaWNhdGlvbiBjYW4gdXNlIHRoZXNlIHRvIHNlbGVjdCgpIG9uLAorYnV0IGJlIHN1cmUgdG8gRkRfWkVSTyB0aGVtIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYXMKK1xmSWN1cmxfbXVsdGlfZmRzZXQoMylcZlAgb25seSBhZGRzIGl0cyBvd24gZGVzY3JpcHRvcnMsIGl0IGRvZXNuJ3QgemVybyBvcgorb3RoZXJ3aXNlIHJlbW92ZSBhbnkgb3RoZXJzLiBUaGUgXGZJY3VybF9tdWx0aV9wZXJmb3JtKDMpXGZQIGZ1bmN0aW9uIHNob3VsZCBiZQorY2FsbGVkIGFzIHNvb24gYXMgb25lIG9mIHRoZW0gaXMgcmVhZHkgdG8gYmUgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8uCisKK0lmIG5vIGZpbGUgZGVzY3JpcHRvcnMgYXJlIHNldCBieSBsaWJjdXJsLCBcZkltYXhfZmRcZlAgd2lsbCBjb250YWluIC0xIHdoZW4KK3RoaXMgZnVuY3Rpb24gcmV0dXJucy4gT3RoZXJ3aXNlIGl0IHdpbGwgY29udGFpbiB0aGUgaGlnaGVyIGRlc2NyaXB0b3IgbnVtYmVyCitsaWJjdXJsIHNldC4gV2hlbiBsaWJjdXJsIHJldHVybnMgLTEgaW4gXGZJbWF4X2ZkXGZQLCBpdCBpcyBiZWNhdXNlIGxpYmN1cmwKK2N1cnJlbnRseSBkb2VzIHNvbWV0aGluZyB0aGF0IGlzbid0IHBvc3NpYmxlIGZvciB5b3VyIGFwcGxpY2F0aW9uIHRvIG1vbml0b3IKK3dpdGggYSBzb2NrZXQgYW5kIHVuZm9ydHVuYXRlbHkgeW91IGNhbiB0aGVuIG5vdCBrbm93IGV4YWN0bHkgd2hlbiB0aGUgY3VycmVudAorYWN0aW9uIGlzIGNvbXBsZXRlZCB1c2luZyBzZWxlY3QoKS4gV2hlbiBtYXhfZmQgcmV0dXJucyB3aXRoIC0xLCB5b3UgbmVlZCB0bword2FpdCBhIHdoaWxlIGFuZCB0aGVuIHByb2NlZWQgYW5kIGNhbGwgXGZJY3VybF9tdWx0aV9wZXJmb3JtXGZQIGFueXdheS4gSG93Citsb25nIHRvIHdhaXQ/IEkgd291bGQgc3VnZ2VzdCAxMDAgbWlsbGlzZWNvbmRzIGF0IGxlYXN0LCBidXQgeW91IG1heSB3YW50IHRvCit0ZXN0IGl0IG91dCBpbiB5b3VyIG93biBwYXJ0aWN1bGFyIGNvbmRpdGlvbnMgdG8gZmluZCBhIHN1aXRhYmxlIHZhbHVlLgorCitXaGVuIGRvaW5nIHNlbGVjdCgpLCB5b3Ugc2hvdWxkIHVzZSBcZkJjdXJsX211bHRpX3RpbWVvdXRcZlAgdG8gZmlndXJlIG91dCBob3cKK2xvbmcgdG8gd2FpdCBmb3IgYWN0aW9uLiBDYWxsIFxmSWN1cmxfbXVsdGlfcGVyZm9ybVxmUCBldmVuIGlmIG5vIGFjdGl2aXR5IGhhcworYmVlbiBzZWVuIG9uIHRoZSBmZF9zZXRzIGFmdGVyIHRoZSB0aW1lb3V0IGV4cGlyZXMgYXMgb3RoZXJ3aXNlIGludGVybmFsCityZXRyaWVzIGFuZCB0aW1lb3V0cyBtYXkgbm90IHdvcmsgYXMgeW91J2QgdGhpbmsgYW5kIHdhbnQuCisKK0lmIG9uZSBvZiB0aGUgc29ja2V0cyB1c2VkIGJ5IGxpYmN1cmwgaGFwcGVucyB0byBiZSBsYXJnZXIgdGhhbiB3aGF0IGNhbiBiZQorc2V0IGluIGFuIGZkX3NldCwgd2hpY2ggb24gUE9TSVggc3lzdGVtcyBtZWFucyB0aGF0IHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMKK2xhcmdlciB0aGFuIEZEX1NFVFNJWkUsIHRoZW4gbGliY3VybCB3aWxsIHRyeSB0byBub3Qgc2V0IGl0LiBTZXR0aW5nIGEgdG9vCitsYXJnZSBmaWxlIGRlc2NyaXB0b3IgaW4gYW4gZmRfc2V0IGltcGxpZXMgYW4gb3V0IG9mIGJvdW5kcyB3cml0ZSB3aGljaCBjYW4KK2NhdXNlIGNyYXNoZXMsIG9yIHdvcnNlLiBUaGUgZWZmZWN0IG9mIE5PVCBzdG9yaW5nIGl0IHdpbGwgcG9zc2libHkgc2F2ZSB5b3UKK2Zyb20gdGhlIGNyYXNoLCBidXQgd2lsbCBtYWtlIHlvdXIgcHJvZ3JhbSBOT1Qgd2FpdCBmb3Igc29ja2V0cyBpdCBzaG91bGQgd2FpdAorZm9yLi4uCisuU0ggUkVUVVJOIFZBTFVFCitDVVJMTWNvZGUgdHlwZSwgZ2VuZXJhbCBsaWJjdXJsIG11bHRpIGludGVyZmFjZSBlcnJvciBjb2RlLiBTZWUKK1xmSWxpYmN1cmwtZXJyb3JzKDMpXGZQCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfbXVsdGlfY2xlYW51cCAiKDMpLCAiIGN1cmxfbXVsdGlfaW5pdCAiKDMpLCAiCisuQlIgY3VybF9tdWx0aV90aW1lb3V0ICIoMyksICIgY3VybF9tdWx0aV9wZXJmb3JtICIoMykgIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfZmRzZXQuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2Zkc2V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxMjFlMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2Zkc2V0Lmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfbXVsdGlfZmRzZXQgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9tdWx0aV9mZHNldCAtIGV4dHJhY3RzIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiBmcm9tIGEgbXVsdGkgaGFuZGxlIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDsgCis8cCBjbGFzcz0ibGV2ZWwwIj5DVVJMTWNvZGUgY3VybF9tdWx0aV9mZHNldChDVVJMTSAqbXVsdGlfaGFuZGxlLCAmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCAqcmVhZF9mZF9zZXQsICZuYnNwOyAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICp3cml0ZV9mZF9zZXQsICZuYnNwOyAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpleGNfZmRfc2V0LCAmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbWF4X2ZkKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhpcyBmdW5jdGlvbiBleHRyYWN0cyBmaWxlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gZnJvbSBhIGdpdmVuIG11bHRpX2hhbmRsZS4gbGliY3VybCByZXR1cm5zIGl0cyBmZF9zZXQgc2V0cy4gVGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlc2UgdG8gc2VsZWN0KCkgb24sIGJ1dCBiZSBzdXJlIHRvIEZEX1pFUk8gdGhlbSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFzIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX2Zkc2V0Lmh0bWwiPmN1cmxfbXVsdGlfZmRzZXQoMyk8L2E+IG9ubHkgYWRkcyBpdHMgb3duIGRlc2NyaXB0b3JzLCBpdCBkb2Vzbid0IHplcm8gb3Igb3RoZXJ3aXNlIHJlbW92ZSBhbnkgb3RoZXJzLiBUaGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfcGVyZm9ybS5odG1sIj5jdXJsX211bHRpX3BlcmZvcm0oMyk8L2E+IGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYXMgc29vbiBhcyBvbmUgb2YgdGhlbSBpcyByZWFkeSB0byBiZSByZWFkIGZyb20gb3Igd3JpdHRlbiB0by4gCis8cCBjbGFzcz0ibGV2ZWwwIj5JZiBubyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBzZXQgYnkgbGliY3VybCwgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5tYXhfZmQ8L3NwYW4+IHdpbGwgY29udGFpbiAtMSB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4gT3RoZXJ3aXNlIGl0IHdpbGwgY29udGFpbiB0aGUgaGlnaGVyIGRlc2NyaXB0b3IgbnVtYmVyIGxpYmN1cmwgc2V0LiBXaGVuIGxpYmN1cmwgcmV0dXJucyAtMSBpbiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPm1heF9mZDwvc3Bhbj4sIGl0IGlzIGJlY2F1c2UgbGliY3VybCBjdXJyZW50bHkgZG9lcyBzb21ldGhpbmcgdGhhdCBpc24ndCBwb3NzaWJsZSBmb3IgeW91ciBhcHBsaWNhdGlvbiB0byBtb25pdG9yIHdpdGggYSBzb2NrZXQgYW5kIHVuZm9ydHVuYXRlbHkgeW91IGNhbiB0aGVuIG5vdCBrbm93IGV4YWN0bHkgd2hlbiB0aGUgY3VycmVudCBhY3Rpb24gaXMgY29tcGxldGVkIHVzaW5nIHNlbGVjdCgpLiBXaGVuIG1heF9mZCByZXR1cm5zIHdpdGggLTEsIHlvdSBuZWVkIHRvIHdhaXQgYSB3aGlsZSBhbmQgdGhlbiBwcm9jZWVkIGFuZCBjYWxsIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9tdWx0aV9wZXJmb3JtPC9zcGFuPiBhbnl3YXkuIEhvdyBsb25nIHRvIHdhaXQ/IEkgd291bGQgc3VnZ2VzdCAxMDAgbWlsbGlzZWNvbmRzIGF0IGxlYXN0LCBidXQgeW91IG1heSB3YW50IHRvIHRlc3QgaXQgb3V0IGluIHlvdXIgb3duIHBhcnRpY3VsYXIgY29uZGl0aW9ucyB0byBmaW5kIGEgc3VpdGFibGUgdmFsdWUuIAorPHAgY2xhc3M9ImxldmVsMCI+V2hlbiBkb2luZyBzZWxlY3QoKSwgeW91IHNob3VsZCB1c2UgPHNwYW4gQ2xhc3M9ImJvbGQiPmN1cmxfbXVsdGlfdGltZW91dDwvc3Bhbj4gdG8gZmlndXJlIG91dCBob3cgbG9uZyB0byB3YWl0IGZvciBhY3Rpb24uIENhbGwgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jdXJsX211bHRpX3BlcmZvcm08L3NwYW4+IGV2ZW4gaWYgbm8gYWN0aXZpdHkgaGFzIGJlZW4gc2VlbiBvbiB0aGUgZmRfc2V0cyBhZnRlciB0aGUgdGltZW91dCBleHBpcmVzIGFzIG90aGVyd2lzZSBpbnRlcm5hbCByZXRyaWVzIGFuZCB0aW1lb3V0cyBtYXkgbm90IHdvcmsgYXMgeW91J2QgdGhpbmsgYW5kIHdhbnQuIAorPHAgY2xhc3M9ImxldmVsMCI+SWYgb25lIG9mIHRoZSBzb2NrZXRzIHVzZWQgYnkgbGliY3VybCBoYXBwZW5zIHRvIGJlIGxhcmdlciB0aGFuIHdoYXQgY2FuIGJlIHNldCBpbiBhbiBmZF9zZXQsIHdoaWNoIG9uIFBPU0lYIHN5c3RlbXMgbWVhbnMgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIGxhcmdlciB0aGFuIEZEX1NFVFNJWkUsIHRoZW4gbGliY3VybCB3aWxsIHRyeSB0byBub3Qgc2V0IGl0LiBTZXR0aW5nIGEgdG9vIGxhcmdlIGZpbGUgZGVzY3JpcHRvciBpbiBhbiBmZF9zZXQgaW1wbGllcyBhbiBvdXQgb2YgYm91bmRzIHdyaXRlIHdoaWNoIGNhbiBjYXVzZSBjcmFzaGVzLCBvciB3b3JzZS4gVGhlIGVmZmVjdCBvZiBOT1Qgc3RvcmluZyBpdCB3aWxsIHBvc3NpYmx5IHNhdmUgeW91IGZyb20gdGhlIGNyYXNoLCBidXQgd2lsbCBtYWtlIHlvdXIgcHJvZ3JhbSBOT1Qgd2FpdCBmb3Igc29ja2V0cyBpdCBzaG91bGQgd2FpdCBmb3IuLi4gPGEgbmFtZT0iUkVUVVJOIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SRVRVUk4gVkFMVUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Q1VSTE1jb2RlIHR5cGUsIGdlbmVyYWwgbGliY3VybCBtdWx0aSBpbnRlcmZhY2UgZXJyb3IgY29kZS4gU2VlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGliY3VybC1lcnJvcnMoMyk8L3NwYW4+IDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9jbGVhbnVwLmh0bWwiPmN1cmxfbXVsdGlfY2xlYW51cCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfaW5pdC5odG1sIj4gIGN1cmxfbXVsdGlfaW5pdCAoMyk8L2E+IDxzcGFuIENsYXNzPSJtYW5wYWdlIj4gPC9zcGFuPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX211bHRpX3RpbWVvdXQuaHRtbCI+Y3VybF9tdWx0aV90aW1lb3V0ICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9wZXJmb3JtLmh0bWwiPiAgY3VybF9tdWx0aV9wZXJmb3JtICgzKSA8L2E+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfZmRzZXQucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfZmRzZXQucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YTYwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9mZHNldC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfaW5mb19yZWFkLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9pbmZvX3JlYWQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzUxNzY0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfaW5mb19yZWFkLjMKQEAgLTAsMCArMSw3NiBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF9tdWx0aV9pbmZvX3JlYWQgMyAiMTggRGVjIDIwMDQiICJsaWJjdXJsIDcuMTAuMyIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfbXVsdGlfaW5mb19yZWFkIC0gcmVhZCBtdWx0aSBzdGFjayBpbmZvcm1hdGlvbmFscworLlNIIFNZTk9QU0lTCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK0NVUkxNc2cgKmN1cmxfbXVsdGlfaW5mb19yZWFkKCBDVVJMTSAqbXVsdGlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbXNnc19pbl9xdWV1ZSk7CisuYWQKKy5TSCBERVNDUklQVElPTgorQXNrIHRoZSBtdWx0aSBoYW5kbGUgaWYgdGhlcmUgYXJlIGFueSBtZXNzYWdlcy9pbmZvcm1hdGlvbmFscyBmcm9tIHRoZQoraW5kaXZpZHVhbCB0cmFuc2ZlcnMuIE1lc3NhZ2VzIG1heSBpbmNsdWRlIGluZm9ybWF0aW9uYWxzIHN1Y2ggYXMgYW4gZXJyb3IKK2NvZGUgZnJvbSB0aGUgdHJhbnNmZXIgb3IganVzdCB0aGUgZmFjdCB0aGF0IGEgdHJhbnNmZXIgaXMgY29tcGxldGVkLiBNb3JlCitkZXRhaWxzIG9uIHRoZXNlIHNob3VsZCBiZSB3cml0dGVuIGRvd24gYXMgd2VsbC4KKworUmVwZWF0ZWQgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIG5ldyBzdHJ1Y3QgZWFjaCB0aW1lLCB1bnRpbCBhCitOVUxMIGlzIHJldHVybmVkIGFzIGEgc2lnbmFsIHRoYXQgdGhlcmUgaXMgbm8gbW9yZSB0byBnZXQgYXQgdGhpcyBwb2ludC4gVGhlCitpbnRlZ2VyIHBvaW50ZWQgdG8gd2l0aCBcZkltc2dzX2luX3F1ZXVlXGZQIHdpbGwgY29udGFpbiB0aGUgbnVtYmVyIG9mCityZW1haW5pbmcgbWVzc2FnZXMgYWZ0ZXIgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkLgorCitXaGVuIHlvdSBmZXRjaCBhIG1lc3NhZ2UgdXNpbmcgdGhpcyBmdW5jdGlvbiwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBpbnRlcm5hbAorcXVldWUgc28gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFnYWluIHdpbGwgbm90IHJldHVybiB0aGUgc2FtZSBtZXNzYWdlCithZ2Fpbi4gSXQgd2lsbCBpbnN0ZWFkIHJldHVybiBuZXcgbWVzc2FnZXMgYXQgZWFjaCBuZXcgaW52b2tlIHVudGlsIHRoZSBxdWV1ZQoraXMgZW1wdGllZC4KKworXGZCV0FSTklORzpcZlAgVGhlIGRhdGEgdGhlIHJldHVybmVkIHBvaW50ZXIgcG9pbnRzIHRvIHdpbGwgbm90IHN1cnZpdmUKK2NhbGxpbmcgXGZJY3VybF9tdWx0aV9jbGVhbnVwKDMpXGZQLCBcZkljdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoMylcZlAgb3IKK1xmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQLgorCitUaGUgJ0NVUkxNc2cnIHN0cnVjdCBpcyB2ZXJ5IHNpbXBsZSBhbmQgb25seSBjb250YWlucyB2ZXJ5IGJhc2ljIGluZm9ybWF0aW9uLgorSWYgbW9yZSBpbnZvbHZlZCBpbmZvcm1hdGlvbiBpcyB3YW50ZWQsIHRoZSBwYXJ0aWN1bGFyICJlYXN5IGhhbmRsZSIgaW4KK3ByZXNlbnQgaW4gdGhhdCBzdHJ1Y3QgYW5kIGNhbiB0aHVzIGJlIHVzZWQgaW4gc3Vic2VxdWVudCByZWd1bGFyCitcZkljdXJsX2Vhc3lfZ2V0aW5mbygzKVxmUCBjYWxscyAob3Igc2ltaWxhcik6CisKKy5uZgorIHN0cnVjdCBDVVJMTXNnIHsKKyAgIENVUkxNU0cgbXNnOyAgICAgICAvKiB3aGF0IHRoaXMgbWVzc2FnZSBtZWFucyAqLworICAgQ1VSTCAqZWFzeV9oYW5kbGU7IC8qIHRoZSBoYW5kbGUgaXQgY29uY2VybnMgKi8KKyAgIHVuaW9uIHsKKyAgICAgdm9pZCAqd2hhdGV2ZXI7ICAgIC8qIG1lc3NhZ2Utc3BlY2lmaWMgZGF0YSAqLworICAgICBDVVJMY29kZSByZXN1bHQ7ICAgLyogcmV0dXJuIGNvZGUgZm9yIHRyYW5zZmVyICovCisgICB9IGRhdGE7CisgfTsKKy5maQorV2hlbiBcZkJtc2dcZlAgaXMgXGZJQ1VSTE1TR19ET05FXGZQLCB0aGUgbWVzc2FnZSBpZGVudGlmaWVzIGEgdHJhbnNmZXIgdGhhdAoraXMgZG9uZSwgYW5kIHRoZW4gXGZCcmVzdWx0XGZQIGNvbnRhaW5zIHRoZSByZXR1cm4gY29kZSBmb3IgdGhlIGVhc3kgaGFuZGxlCit0aGF0IGp1c3QgY29tcGxldGVkLgorCitBdCB0aGlzIHBvaW50LCB0aGVyZSBhcmUgbm8gb3RoZXIgXGZCbXNnXGZQIHR5cGVzIGRlZmluZWQuCisuU0ggIlJFVFVSTiBWQUxVRSIKK0EgcG9pbnRlciB0byBhIGZpbGxlZC1pbiBzdHJ1Y3QsIG9yIE5VTEwgaWYgaXQgZmFpbGVkIG9yIHJhbiBvdXQgb2YKK3N0cnVjdHMuIEl0IGFsc28gd3JpdGVzIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgbGVmdCBpbiB0aGUgcXVldWUgKGFmdGVyIHRoaXMKK3JlYWQpIGluIHRoZSBpbnRlZ2VyIHRoZSBzZWNvbmQgYXJndW1lbnQgcG9pbnRzIHRvLgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX211bHRpX2NsZWFudXAgIigzKSwgIiBjdXJsX211bHRpX2luaXQgIigzKSwgIiBjdXJsX211bHRpX3BlcmZvcm0gIigzKSIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2luZm9fcmVhZC5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfaW5mb19yZWFkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwZWM0MgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2luZm9fcmVhZC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX211bHRpX2luZm9fcmVhZCBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX211bHRpX2luZm9fcmVhZCAtIHJlYWQgbXVsdGkgc3RhY2sgaW5mb3JtYXRpb25hbHMgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDsgCis8cCBjbGFzcz0ibGV2ZWwwIj5DVVJMTXNnICpjdXJsX211bHRpX2luZm9fcmVhZCggQ1VSTE0gKm11bHRpX2hhbmRsZSwgJm5ic3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICptc2dzX2luX3F1ZXVlKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+QXNrIHRoZSBtdWx0aSBoYW5kbGUgaWYgdGhlcmUgYXJlIGFueSBtZXNzYWdlcy9pbmZvcm1hdGlvbmFscyBmcm9tIHRoZSBpbmRpdmlkdWFsIHRyYW5zZmVycy4gTWVzc2FnZXMgbWF5IGluY2x1ZGUgaW5mb3JtYXRpb25hbHMgc3VjaCBhcyBhbiBlcnJvciBjb2RlIGZyb20gdGhlIHRyYW5zZmVyIG9yIGp1c3QgdGhlIGZhY3QgdGhhdCBhIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4gTW9yZSBkZXRhaWxzIG9uIHRoZXNlIHNob3VsZCBiZSB3cml0dGVuIGRvd24gYXMgd2VsbC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5SZXBlYXRlZCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgbmV3IHN0cnVjdCBlYWNoIHRpbWUsIHVudGlsIGEgTlVMTCBpcyByZXR1cm5lZCBhcyBhIHNpZ25hbCB0aGF0IHRoZXJlIGlzIG5vIG1vcmUgdG8gZ2V0IGF0IHRoaXMgcG9pbnQuIFRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gd2l0aCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPm1zZ3NfaW5fcXVldWU8L3NwYW4+IHdpbGwgY29udGFpbiB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBtZXNzYWdlcyBhZnRlciB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+V2hlbiB5b3UgZmV0Y2ggYSBtZXNzYWdlIHVzaW5nIHRoaXMgZnVuY3Rpb24sIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgaW50ZXJuYWwgcXVldWUgc28gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFnYWluIHdpbGwgbm90IHJldHVybiB0aGUgc2FtZSBtZXNzYWdlIGFnYWluLiBJdCB3aWxsIGluc3RlYWQgcmV0dXJuIG5ldyBtZXNzYWdlcyBhdCBlYWNoIG5ldyBpbnZva2UgdW50aWwgdGhlIHF1ZXVlIGlzIGVtcHRpZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPldBUk5JTkc6PC9zcGFuPiBUaGUgZGF0YSB0aGUgcmV0dXJuZWQgcG9pbnRlciBwb2ludHMgdG8gd2lsbCBub3Qgc3Vydml2ZSBjYWxsaW5nIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX2NsZWFudXAuaHRtbCI+Y3VybF9tdWx0aV9jbGVhbnVwKDMpPC9hPiwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZS5odG1sIj5jdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoMyk8L2E+IG9yIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfY2xlYW51cC5odG1sIj5jdXJsX2Vhc3lfY2xlYW51cCgzKTwvYT4uIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlICdDVVJMTXNnJyBzdHJ1Y3QgaXMgdmVyeSBzaW1wbGUgYW5kIG9ubHkgY29udGFpbnMgdmVyeSBiYXNpYyBpbmZvcm1hdGlvbi4gSWYgbW9yZSBpbnZvbHZlZCBpbmZvcm1hdGlvbiBpcyB3YW50ZWQsIHRoZSBwYXJ0aWN1bGFyICJlYXN5IGhhbmRsZSIgaW4gcHJlc2VudCBpbiB0aGF0IHN0cnVjdCBhbmQgY2FuIHRodXMgYmUgdXNlZCBpbiBzdWJzZXF1ZW50IHJlZ3VsYXIgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9nZXRpbmZvLmh0bWwiPmN1cmxfZWFzeV9nZXRpbmZvKDMpPC9hPiBjYWxscyAob3Igc2ltaWxhcik6IAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtzdHJ1Y3QgQ1VSTE1zZyB7ICZuYnNwOyAgQ1VSTE1TRyBtc2c7ICAgICAgIC8qIHdoYXQgdGhpcyBtZXNzYWdlIG1lYW5zICovICZuYnNwOyAgQ1VSTCAqZWFzeV9oYW5kbGU7IC8qIHRoZSBoYW5kbGUgaXQgY29uY2VybnMgKi8gJm5ic3A7ICB1bmlvbiB7ICZuYnNwOyAgICB2b2lkICp3aGF0ZXZlcjsgICAgLyogbWVzc2FnZS1zcGVjaWZpYyBkYXRhICovICZuYnNwOyAgICBDVVJMY29kZSByZXN1bHQ7ICAgLyogcmV0dXJuIGNvZGUgZm9yIHRyYW5zZmVyICovICZuYnNwOyAgfSBkYXRhOyAmbmJzcDt9OyAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gPHNwYW4gQ2xhc3M9ImJvbGQiPm1zZzwvc3Bhbj4gaXMgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMTVNHX0RPTkU8L3NwYW4+LCB0aGUgbWVzc2FnZSBpZGVudGlmaWVzIGEgdHJhbnNmZXIgdGhhdCBpcyBkb25lLCBhbmQgdGhlbiA8c3BhbiBDbGFzcz0iYm9sZCI+cmVzdWx0PC9zcGFuPiBjb250YWlucyB0aGUgcmV0dXJuIGNvZGUgZm9yIHRoZSBlYXN5IGhhbmRsZSB0aGF0IGp1c3QgY29tcGxldGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPkF0IHRoaXMgcG9pbnQsIHRoZXJlIGFyZSBubyBvdGhlciA8c3BhbiBDbGFzcz0iYm9sZCI+bXNnPC9zcGFuPiB0eXBlcyBkZWZpbmVkLiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5BIHBvaW50ZXIgdG8gYSBmaWxsZWQtaW4gc3RydWN0LCBvciBOVUxMIGlmIGl0IGZhaWxlZCBvciByYW4gb3V0IG9mIHN0cnVjdHMuIEl0IGFsc28gd3JpdGVzIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgbGVmdCBpbiB0aGUgcXVldWUgKGFmdGVyIHRoaXMgcmVhZCkgaW4gdGhlIGludGVnZXIgdGhlIHNlY29uZCBhcmd1bWVudCBwb2ludHMgdG8uIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9jbGVhbnVwLmh0bWwiPmN1cmxfbXVsdGlfY2xlYW51cCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfaW5pdC5odG1sIj4gIGN1cmxfbXVsdGlfaW5pdCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfcGVyZm9ybS5odG1sIj4gIGN1cmxfbXVsdGlfcGVyZm9ybSAoMyk8L2E+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfaW5mb19yZWFkLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2luZm9fcmVhZC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzNzgxYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2luZm9fcmVhZC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfaW5pdC4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfaW5pdC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOTM3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9pbml0LjMKQEAgLTAsMCArMSw0MCBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF9tdWx0aV9pbml0IDMgIjEgTWFyY2ggMjAwMiIgImxpYmN1cmwgNy45LjUiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX211bHRpX2luaXQgLSBjcmVhdGUgYSBtdWx0aSBoYW5kbGUKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorLnNwCisuQkkgIkNVUkxNICpjdXJsX211bHRpX2luaXQoICk7IgorLmFkCisuU0ggREVTQ1JJUFRJT04KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyBhIENVUkxNIGhhbmRsZSB0byBiZSB1c2VkIGFzIGlucHV0IHRvIGFsbCB0aGUgb3RoZXIKK211bHRpLWZ1bmN0aW9ucywgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIGEgbXVsdGkgaGFuZGxlIGluIHNvbWUgcGxhY2VzIGluIHRoZQorZG9jdW1lbnRhdGlvbi4gVGhpcyBpbml0IGNhbGwgTVVTVCBoYXZlIGEgY29ycmVzcG9uZGluZyBjYWxsIHRvCitcZkljdXJsX211bHRpX2NsZWFudXAoMylcZlAgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLgorLlNIIFJFVFVSTiBWQUxVRQorSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwsIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB5b3UgY2Fubm90IHVzZSB0aGUKK290aGVyIGN1cmwgZnVuY3Rpb25zLgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX211bHRpX2NsZWFudXAgIigzKSwiIGN1cmxfZ2xvYmFsX2luaXQgIigzKSwiIGN1cmxfZWFzeV9pbml0ICIoMykiCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2luaXQuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2luaXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWM3MDg2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfaW5pdC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX211bHRpX2luaXQgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9tdWx0aV9pbml0IC0gY3JlYXRlIGEgbXVsdGkgaGFuZGxlIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Q1VSTE0gKmN1cmxfbXVsdGlfaW5pdCggKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIENVUkxNIGhhbmRsZSB0byBiZSB1c2VkIGFzIGlucHV0IHRvIGFsbCB0aGUgb3RoZXIgbXVsdGktZnVuY3Rpb25zLCBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgYSBtdWx0aSBoYW5kbGUgaW4gc29tZSBwbGFjZXMgaW4gdGhlIGRvY3VtZW50YXRpb24uIFRoaXMgaW5pdCBjYWxsIE1VU1QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgY2FsbCB0byA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9jbGVhbnVwLmh0bWwiPmN1cmxfbXVsdGlfY2xlYW51cCgzKTwvYT4gd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5JZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTCwgc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHlvdSBjYW5ub3QgdXNlIHRoZSBvdGhlciBjdXJsIGZ1bmN0aW9ucy4gPGEgbmFtZT0iU0VFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TRUUgQUxTTzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX211bHRpX2NsZWFudXAuaHRtbCI+Y3VybF9tdWx0aV9jbGVhbnVwICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9nbG9iYWxfaW5pdC5odG1sIj4gY3VybF9nbG9iYWxfaW5pdCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9pbml0Lmh0bWwiPiBjdXJsX2Vhc3lfaW5pdCAoMyk8L2E+IAorPHAgY2xhc3M9ImxldmVsMCI+PHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9pbml0LnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX2luaXQucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MGQ0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9pbml0LnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9wZXJmb3JtLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9wZXJmb3JtLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlYmIzNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3BlcmZvcm0uMwpAQCAtMCwwICsxLDczIEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX211bHRpX3BlcmZvcm0gMyAiMSBNYXJjaCAyMDAyIiAibGliY3VybCA3LjkuNSIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfbXVsdGlfcGVyZm9ybSAtIHJlYWRzL3dyaXRlcyBhdmFpbGFibGUgZGF0YSBmcm9tIGVhY2ggZWFzeSBoYW5kbGUKKy5TSCBTWU5PUFNJUworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitDVVJMTWNvZGUgY3VybF9tdWx0aV9wZXJmb3JtKENVUkxNICptdWx0aV9oYW5kbGUsIGludCAqcnVubmluZ19oYW5kbGVzKTsKKy5hZAorLlNIIERFU0NSSVBUSU9OCitXaGVuIHRoZSBhcHAgdGhpbmtzIHRoZXJlJ3MgZGF0YSBhdmFpbGFibGUgZm9yIHRoZSBtdWx0aV9oYW5kbGUsIGl0IHNob3VsZAorY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHJlYWQvd3JpdGUgd2hhdGV2ZXIgdGhlcmUgaXMgdG8gcmVhZCBvciB3cml0ZSByaWdodAorbm93LiBjdXJsX211bHRpX3BlcmZvcm0oKSByZXR1cm5zIGFzIHNvb24gYXMgdGhlIHJlYWRzL3dyaXRlcyBhcmUgZG9uZS4gVGhpcworZnVuY3Rpb24gZG9lcyBub3QgcmVxdWlyZSB0aGF0IHRoZXJlIGFjdHVhbGx5IGlzIGFueSBkYXRhIGF2YWlsYWJsZSBmb3IKK3JlYWRpbmcgb3IgdGhhdCBkYXRhIGNhbiBiZSB3cml0dGVuLCBpdCBjYW4gYmUgY2FsbGVkIGp1c3QgaW4gY2FzZS4gSXQgd2lsbAord3JpdGUgdGhlIG51bWJlciBvZiBoYW5kbGVzIHRoYXQgc3RpbGwgdHJhbnNmZXIgZGF0YSBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50J3MKK2ludGVnZXItcG9pbnRlci4KKworV2hlbiB5b3UgY2FsbCBjdXJsX211bHRpX3BlcmZvcm0oKSBhbmQgdGhlIGFtb3VudCBvZiBcZklydW5uaW5nX2hhbmRsZXNcZlAgaXMKK2NoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgY2FsbCAob3IgaXMgbGVzcyB0aGFuIHRoZSBhbW91bnQgb2YgZWFzeSBoYW5kbGVzCit5b3UndmUgYWRkZWQgdG8gdGhlIG11bHRpIGhhbmRsZSksIHlvdSBrbm93IHRoYXQgdGhlcmUgaXMgb25lIG9yIG1vcmUKK3RyYW5zZmVycyBsZXNzICJydW5uaW5nIi4gWW91IGNhbiB0aGVuIGNhbGwgXGZJY3VybF9tdWx0aV9pbmZvX3JlYWQoMylcZlAgdG8KK2dldCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGluZGl2aWR1YWwgY29tcGxldGVkIHRyYW5zZmVyLCBhbmQgdGhhdCByZXR1cm5lZAoraW5mbyBpbmNsdWRlcyBDVVJMY29kZSBhbmQgbW9yZS4gSWYgYW4gYWRkZWQgaGFuZGxlIGZhaWxzIHZlcnkgcXVpY2tseSwgaXQgbWF5CituZXZlciBiZSBjb3VudGVkIGFzIGEgcnVubmluZ19oYW5kbGUuCisKK1doZW4gXGZJcnVubmluZ19oYW5kbGVzXGZQIGlzIHNldCB0byB6ZXJvICgwKSBvbiB0aGUgcmV0dXJuIG9mIHRoaXMgZnVuY3Rpb24sCit0aGVyZSBpcyBubyBsb25nZXIgYW55IHRyYW5zZmVycyBpbiBwcm9ncmVzcy4KKy5TSCAiUkVUVVJOIFZBTFVFIgorQ1VSTE1jb2RlIHR5cGUsIGdlbmVyYWwgbGliY3VybCBtdWx0aSBpbnRlcmZhY2UgZXJyb3IgY29kZS4KKworQmVmb3JlIHZlcnNpb24gNy4yMC4wOiBJZiB5b3UgcmVjZWl2ZSBcZklDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk1cZlAsIHRoaXMKK2Jhc2ljYWxseSBtZWFucyB0aGF0IHlvdSBzaG91bGQgY2FsbCBcZkljdXJsX211bHRpX3BlcmZvcm1cZlAgYWdhaW4sIGJlZm9yZQoreW91IHNlbGVjdCgpIG9uIG1vcmUgYWN0aW9ucy4gWW91IGRvbid0IGhhdmUgdG8gZG8gaXQgaW1tZWRpYXRlbHksIGJ1dCB0aGUKK3JldHVybiBjb2RlIG1lYW5zIHRoYXQgbGliY3VybCBtYXkgaGF2ZSBtb3JlIGRhdGEgYXZhaWxhYmxlIHRvIHJldHVybiBvciB0aGF0Cit0aGVyZSBtYXkgYmUgbW9yZSBkYXRhIHRvIHNlbmQgb2ZmIGJlZm9yZSBpdCBpcyAic2F0aXNmaWVkIi4gRG8gbm90ZSB0aGF0CitcZkljdXJsX211bHRpX3BlcmZvcm0oMylcZlAgd2lsbCByZXR1cm4gXGZJQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNXGZQIG9ubHkKK3doZW4gaXQgd2FudHMgdG8gYmUgY2FsbGVkIGFnYWluIFxmQmltbWVkaWF0ZWx5XGZQLiBXaGVuIHRoaW5ncyBhcmUgZmluZSBhbmQKK3RoZXJlIGlzIG5vdGhpbmcgaW1tZWRpYXRlIGl0IHdhbnRzIGRvbmUsIGl0J2xsIHJldHVybiBcZklDVVJMTV9PS1xmUCBhbmQgeW91CituZWVkIHRvIHdhaXQgZm9yIFwmImFjdGlvbiIgYW5kIHRoZW4gY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluLgorCitUaGlzIGZ1bmN0aW9uIG9ubHkgcmV0dXJucyBlcnJvcnMgZXRjIHJlZ2FyZGluZyB0aGUgd2hvbGUgbXVsdGkgc3RhY2suCitQcm9ibGVtcyBzdGlsbCBtaWdodCBoYXZlIG9jY3VycmVkIG9uIGluZGl2aWR1YWwgdHJhbnNmZXJzIGV2ZW4gd2hlbiB0aGlzCitmdW5jdGlvbiByZXR1cm5zIFxmSUNVUkxNX09LXGZQLgorLlNIICJUWVBJQ0FMIFVTQUdFIgorTW9zdCBhcHBsaWNhdGlvbnMgd2lsbCB1c2UgXGZJY3VybF9tdWx0aV9mZHNldCgzKVxmUCB0byBnZXQgdGhlIG11bHRpX2hhbmRsZSdzCitmaWxlIGRlc2NyaXB0b3JzLCB0aGVuIGl0J2xsIHdhaXQgZm9yIGFjdGlvbiBvbiB0aGVtIHVzaW5nIFxmQnNlbGVjdCgzKVxmUCBhbmQKK2FzIHNvb24gYXMgb25lIG9yIG1vcmUgb2YgdGhlbSBhcmUgcmVhZHksIFxmSWN1cmxfbXVsdGlfcGVyZm9ybSgzKVxmUCBnZXRzCitjYWxsZWQuCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfbXVsdGlfY2xlYW51cCAiKDMpLCAiIGN1cmxfbXVsdGlfaW5pdCAiKDMpLCAiCisuQlIgY3VybF9tdWx0aV9mZHNldCAiKDMpLCAiIGN1cmxfbXVsdGlfaW5mb19yZWFkICIoMyksICIKKy5CUiBsaWJjdXJsLWVycm9ycyAiKDMpIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfcGVyZm9ybS5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfcGVyZm9ybS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NTliOGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9wZXJmb3JtLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfbXVsdGlfcGVyZm9ybSBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX211bHRpX3BlcmZvcm0gLSByZWFkcy93cml0ZXMgYXZhaWxhYmxlIGRhdGEgZnJvbSBlYWNoIGVhc3kgaGFuZGxlIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4jaW5jbHVkZSAmbHQ7Y3VybC9jdXJsLmgmZ3Q7IAorPHAgY2xhc3M9ImxldmVsMCI+Q1VSTE1jb2RlIGN1cmxfbXVsdGlfcGVyZm9ybShDVVJMTSAqbXVsdGlfaGFuZGxlLCBpbnQgKnJ1bm5pbmdfaGFuZGxlcyk7IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gdGhlIGFwcCB0aGlua3MgdGhlcmUncyBkYXRhIGF2YWlsYWJsZSBmb3IgdGhlIG11bHRpX2hhbmRsZSwgaXQgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB0byByZWFkL3dyaXRlIHdoYXRldmVyIHRoZXJlIGlzIHRvIHJlYWQgb3Igd3JpdGUgcmlnaHQgbm93LiBjdXJsX211bHRpX3BlcmZvcm0oKSByZXR1cm5zIGFzIHNvb24gYXMgdGhlIHJlYWRzL3dyaXRlcyBhcmUgZG9uZS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXF1aXJlIHRoYXQgdGhlcmUgYWN0dWFsbHkgaXMgYW55IGRhdGEgYXZhaWxhYmxlIGZvciByZWFkaW5nIG9yIHRoYXQgZGF0YSBjYW4gYmUgd3JpdHRlbiwgaXQgY2FuIGJlIGNhbGxlZCBqdXN0IGluIGNhc2UuIEl0IHdpbGwgd3JpdGUgdGhlIG51bWJlciBvZiBoYW5kbGVzIHRoYXQgc3RpbGwgdHJhbnNmZXIgZGF0YSBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50J3MgaW50ZWdlci1wb2ludGVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4geW91IGNhbGwgY3VybF9tdWx0aV9wZXJmb3JtKCkgYW5kIHRoZSBhbW91bnQgb2YgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5ydW5uaW5nX2hhbmRsZXM8L3NwYW4+IGlzIGNoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgY2FsbCAob3IgaXMgbGVzcyB0aGFuIHRoZSBhbW91bnQgb2YgZWFzeSBoYW5kbGVzIHlvdSd2ZSBhZGRlZCB0byB0aGUgbXVsdGkgaGFuZGxlKSwgeW91IGtub3cgdGhhdCB0aGVyZSBpcyBvbmUgb3IgbW9yZSB0cmFuc2ZlcnMgbGVzcyAicnVubmluZyIuIFlvdSBjYW4gdGhlbiBjYWxsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX2luZm9fcmVhZC5odG1sIj5jdXJsX211bHRpX2luZm9fcmVhZCgzKTwvYT4gdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGVhY2ggaW5kaXZpZHVhbCBjb21wbGV0ZWQgdHJhbnNmZXIsIGFuZCB0aGF0IHJldHVybmVkIGluZm8gaW5jbHVkZXMgQ1VSTGNvZGUgYW5kIG1vcmUuIElmIGFuIGFkZGVkIGhhbmRsZSBmYWlscyB2ZXJ5IHF1aWNrbHksIGl0IG1heSBuZXZlciBiZSBjb3VudGVkIGFzIGEgcnVubmluZ19oYW5kbGUuIAorPHAgY2xhc3M9ImxldmVsMCI+V2hlbiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnJ1bm5pbmdfaGFuZGxlczwvc3Bhbj4gaXMgc2V0IHRvIHplcm8gKDApIG9uIHRoZSByZXR1cm4gb2YgdGhpcyBmdW5jdGlvbiwgdGhlcmUgaXMgbm8gbG9uZ2VyIGFueSB0cmFuc2ZlcnMgaW4gcHJvZ3Jlc3MuIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPkNVUkxNY29kZSB0eXBlLCBnZW5lcmFsIGxpYmN1cmwgbXVsdGkgaW50ZXJmYWNlIGVycm9yIGNvZGUuIAorPHAgY2xhc3M9ImxldmVsMCI+QmVmb3JlIHZlcnNpb24gNy4yMC4wOiBJZiB5b3UgcmVjZWl2ZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxNX0NBTExfTVVMVElfUEVSRk9STTwvc3Bhbj4sIHRoaXMgYmFzaWNhbGx5IG1lYW5zIHRoYXQgeW91IHNob3VsZCBjYWxsIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9tdWx0aV9wZXJmb3JtPC9zcGFuPiBhZ2FpbiwgYmVmb3JlIHlvdSBzZWxlY3QoKSBvbiBtb3JlIGFjdGlvbnMuIFlvdSBkb24ndCBoYXZlIHRvIGRvIGl0IGltbWVkaWF0ZWx5LCBidXQgdGhlIHJldHVybiBjb2RlIG1lYW5zIHRoYXQgbGliY3VybCBtYXkgaGF2ZSBtb3JlIGRhdGEgYXZhaWxhYmxlIHRvIHJldHVybiBvciB0aGF0IHRoZXJlIG1heSBiZSBtb3JlIGRhdGEgdG8gc2VuZCBvZmYgYmVmb3JlIGl0IGlzICJzYXRpc2ZpZWQiLiBEbyBub3RlIHRoYXQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfcGVyZm9ybS5odG1sIj5jdXJsX211bHRpX3BlcmZvcm0oMyk8L2E+IHdpbGwgcmV0dXJuIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNPC9zcGFuPiBvbmx5IHdoZW4gaXQgd2FudHMgdG8gYmUgY2FsbGVkIGFnYWluIDxzcGFuIENsYXNzPSJib2xkIj5pbW1lZGlhdGVseTwvc3Bhbj4uIFdoZW4gdGhpbmdzIGFyZSBmaW5lIGFuZCB0aGVyZSBpcyBub3RoaW5nIGltbWVkaWF0ZSBpdCB3YW50cyBkb25lLCBpdCdsbCByZXR1cm4gPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMTV9PSzwvc3Bhbj4gYW5kIHlvdSBuZWVkIHRvIHdhaXQgZm9yICJhY3Rpb24iIGFuZCB0aGVuIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2Fpbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIG9ubHkgcmV0dXJucyBlcnJvcnMgZXRjIHJlZ2FyZGluZyB0aGUgd2hvbGUgbXVsdGkgc3RhY2suIFByb2JsZW1zIHN0aWxsIG1pZ2h0IGhhdmUgb2NjdXJyZWQgb24gaW5kaXZpZHVhbCB0cmFuc2ZlcnMgZXZlbiB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxNX09LPC9zcGFuPi4gPGEgbmFtZT0iVFlQSUNBTCI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+VFlQSUNBTCBVU0FHRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5Nb3N0IGFwcGxpY2F0aW9ucyB3aWxsIHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9mZHNldC5odG1sIj5jdXJsX211bHRpX2Zkc2V0KDMpPC9hPiB0byBnZXQgdGhlIG11bHRpX2hhbmRsZSdzIGZpbGUgZGVzY3JpcHRvcnMsIHRoZW4gaXQnbGwgd2FpdCBmb3IgYWN0aW9uIG9uIHRoZW0gdXNpbmcgPHNwYW4gQ2xhc3M9ImJvbGQiPnNlbGVjdCgzKTwvc3Bhbj4gYW5kIGFzIHNvb24gYXMgb25lIG9yIG1vcmUgb2YgdGhlbSBhcmUgcmVhZHksIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3BlcmZvcm0uaHRtbCI+Y3VybF9tdWx0aV9wZXJmb3JtKDMpPC9hPiBnZXRzIGNhbGxlZC4gPGEgbmFtZT0iU0VFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TRUUgQUxTTzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX211bHRpX2NsZWFudXAuaHRtbCI+Y3VybF9tdWx0aV9jbGVhbnVwICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9pbml0Lmh0bWwiPiAgY3VybF9tdWx0aV9pbml0ICgzKTwvYT4gPHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPiA8L3NwYW4+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfZmRzZXQuaHRtbCI+Y3VybF9tdWx0aV9mZHNldCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfaW5mb19yZWFkLmh0bWwiPiAgY3VybF9tdWx0aV9pbmZvX3JlYWQgKDMpPC9hPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+IDwvc3Bhbj4gPHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPmxpYmN1cmwtZXJyb3JzICgzKTwvc3Bhbj4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9wZXJmb3JtLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3BlcmZvcm0ucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZjE3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9wZXJmb3JtLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2ZDJiYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3JlbW92ZV9oYW5kbGUuMwpAQCAtMCwwICsxLDQzIEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUgMyAiNiBNYXJjaCAyMDAyIiAibGliY3VybCA3LjkuNSIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSAtIHJlbW92ZSBhbiBlYXN5IGhhbmRsZSBmcm9tIGEgbXVsdGkgc2Vzc2lvbgorLlNIIFNZTk9QU0lTCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK0NVUkxNY29kZSBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoQ1VSTE0gKm11bHRpX2hhbmRsZSwgQ1VSTCAqZWFzeV9oYW5kbGUpOworLmFkCisuU0ggREVTQ1JJUFRJT04KK1JlbW92ZXMgYSBnaXZlbiBlYXN5X2hhbmRsZSBmcm9tIHRoZSBtdWx0aV9oYW5kbGUuIFRoaXMgd2lsbCBtYWtlIHRoZQorc3BlY2lmaWVkIGVhc3kgaGFuZGxlIGJlIHJlbW92ZWQgZnJvbSB0aGlzIG11bHRpIGhhbmRsZSdzIGNvbnRyb2wuCisKK1doZW4gdGhlIGVhc3kgaGFuZGxlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBhIG11bHRpIHN0YWNrLCBpdCBpcyBhZ2FpbgorcGVyZmVjdGx5IGxlZ2FsIHRvIGludm9rZSBcZkljdXJsX2Vhc3lfcGVyZm9ybSgpXGZQIG9uIHRoaXMgZWFzeSBoYW5kbGUuCisKK1JlbW92aW5nIGFuIGVhc3kgaGFuZGxlIHdoaWxlIGJlaW5nIHVzZWQsIHdpbGwgZWZmZWN0aXZlbHkgaGFsdCB0aGUgdHJhbnNmZXIKK2luIHByb2dyZXNzIGludm9sdmluZyB0aGF0IGVhc3kgaGFuZGxlLiBBbGwgb3RoZXIgZWFzeSBoYW5kbGVzIGFuZCB0cmFuc2ZlcnMKK3dpbGwgcmVtYWluIHVuYWZmZWN0ZWQuCisuU0ggUkVUVVJOIFZBTFVFCitDVVJMTWNvZGUgdHlwZSwgZ2VuZXJhbCBsaWJjdXJsIG11bHRpIGludGVyZmFjZSBlcnJvciBjb2RlLgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX211bHRpX2NsZWFudXAgIigzKSwiIGN1cmxfbXVsdGlfaW5pdCAiKDMpIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZS5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNGM0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX211bHRpX3JlbW92ZV9oYW5kbGUgLSByZW1vdmUgYW4gZWFzeSBoYW5kbGUgZnJvbSBhIG11bHRpIHNlc3Npb24gPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDsgCis8cCBjbGFzcz0ibGV2ZWwwIj5DVVJMTWNvZGUgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKENVUkxNICptdWx0aV9oYW5kbGUsIENVUkwgKmVhc3lfaGFuZGxlKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+UmVtb3ZlcyBhIGdpdmVuIGVhc3lfaGFuZGxlIGZyb20gdGhlIG11bHRpX2hhbmRsZS4gVGhpcyB3aWxsIG1ha2UgdGhlIHNwZWNpZmllZCBlYXN5IGhhbmRsZSBiZSByZW1vdmVkIGZyb20gdGhpcyBtdWx0aSBoYW5kbGUncyBjb250cm9sLiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gdGhlIGVhc3kgaGFuZGxlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBhIG11bHRpIHN0YWNrLCBpdCBpcyBhZ2FpbiBwZXJmZWN0bHkgbGVnYWwgdG8gaW52b2tlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9lYXN5X3BlcmZvcm0oKTwvc3Bhbj4gb24gdGhpcyBlYXN5IGhhbmRsZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5SZW1vdmluZyBhbiBlYXN5IGhhbmRsZSB3aGlsZSBiZWluZyB1c2VkLCB3aWxsIGVmZmVjdGl2ZWx5IGhhbHQgdGhlIHRyYW5zZmVyIGluIHByb2dyZXNzIGludm9sdmluZyB0aGF0IGVhc3kgaGFuZGxlLiBBbGwgb3RoZXIgZWFzeSBoYW5kbGVzIGFuZCB0cmFuc2ZlcnMgd2lsbCByZW1haW4gdW5hZmZlY3RlZC4gPGEgbmFtZT0iUkVUVVJOIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SRVRVUk4gVkFMVUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Q1VSTE1jb2RlIHR5cGUsIGdlbmVyYWwgbGliY3VybCBtdWx0aSBpbnRlcmZhY2UgZXJyb3IgY29kZS4gPGEgbmFtZT0iU0VFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TRUUgQUxTTzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX211bHRpX2NsZWFudXAuaHRtbCI+Y3VybF9tdWx0aV9jbGVhbnVwICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9pbml0Lmh0bWwiPiBjdXJsX211bHRpX2luaXQgKDMpPC9hPiA8cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3JlbW92ZV9oYW5kbGUucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZS5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjNjllNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3JlbW92ZV9oYW5kbGUucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3NldG9wdC4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc2V0b3B0LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhYWFlYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3NldG9wdC4zCkBAIC0wLDAgKzEsMTAzIEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX211bHRpX3NldG9wdCAzICIxMCBPY3QgMjAwNiIgImxpYmN1cmwgNy4xNi4wIiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9tdWx0aV9zZXRvcHQgXC0gc2V0IG9wdGlvbnMgZm9yIGEgY3VybCBtdWx0aSBoYW5kbGUKKy5TSCBTWU5PUFNJUworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitDVVJMTWNvZGUgY3VybF9tdWx0aV9zZXRvcHQoQ1VSTE0gKiBtdWx0aV9oYW5kbGUsIENVUkxNb3B0aW9uIG9wdGlvbiwgcGFyYW0pOworLlNIIERFU0NSSVBUSU9OCitjdXJsX211bHRpX3NldG9wdCgpIGlzIHVzZWQgdG8gdGVsbCBhIGxpYmN1cmwgbXVsdGkgaGFuZGxlIGhvdyB0byBiZWhhdmUuIEJ5Cit1c2luZyB0aGUgYXBwcm9wcmlhdGUgb3B0aW9ucyB0byBcZkljdXJsX211bHRpX3NldG9wdCgzKVxmUCwgeW91IGNhbiBjaGFuZ2UKK2xpYmN1cmwncyBiZWhhdmlvdXIgd2hlbiB1c2luZyB0aGF0IG11bHRpIGhhbmRsZS4gIEFsbCBvcHRpb25zIGFyZSBzZXQgd2l0aAordGhlIFxmSW9wdGlvblxmUCBmb2xsb3dlZCBieSB0aGUgcGFyYW1ldGVyIFxmSXBhcmFtXGZQLiBUaGF0IHBhcmFtZXRlciBjYW4gYmUKK2EgXGZCbG9uZ1xmUCwgYSBcZkJmdW5jdGlvbiBwb2ludGVyXGZQLCBhbiBcZkJvYmplY3QgcG9pbnRlclxmUCBvciBhCitcZkJjdXJsX29mZl90XGZQIHR5cGUsIGRlcGVuZGluZyBvbiB3aGF0IHRoZSBzcGVjaWZpYyBvcHRpb24gZXhwZWN0cy4gUmVhZAordGhpcyBtYW51YWwgY2FyZWZ1bGx5IGFzIGJhZCBpbnB1dCB2YWx1ZXMgbWF5IGNhdXNlIGxpYmN1cmwgdG8gYmVoYXZlIGJhZGx5IQorWW91IGNhbiBvbmx5IHNldCBvbmUgb3B0aW9uIGluIGVhY2ggZnVuY3Rpb24gY2FsbC4KKworLlNIIE9QVElPTlMKKy5JUCBDVVJMTU9QVF9TT0NLRVRGVU5DVElPTgorUGFzcyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBtYXRjaGluZyB0aGUgXGZCY3VybF9zb2NrZXRfY2FsbGJhY2tcZlAKK3Byb3RvdHlwZS4gVGhlIFxmSWN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigzKVxmUCBmdW5jdGlvbiBpbmZvcm1zIHRoZQorYXBwbGljYXRpb24gYWJvdXQgdXBkYXRlcyBpbiB0aGUgc29ja2V0IChmaWxlIGRlc2NyaXB0b3IpIHN0YXR1cyBieSBkb2luZworbm9uZSwgb25lLCBvciBtdWx0aXBsZSBjYWxscyB0byB0aGUgY3VybF9zb2NrZXRfY2FsbGJhY2sgZ2l2ZW4gaW4gdGhlCitcZkJwYXJhbVxmUCBhcmd1bWVudC4gVGhleSB1cGRhdGUgdGhlIHN0YXR1cyB3aXRoIGNoYW5nZXMgc2luY2UgdGhlIHByZXZpb3VzCit0aW1lIGEgXGZJY3VybF9tdWx0aV9zb2NrZXQoMylcZlAgZnVuY3Rpb24gd2FzIGNhbGxlZC4gSWYgdGhlIGdpdmVuIGNhbGxiYWNrCitwb2ludGVyIGlzIE5VTEwsIG5vIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBTZXQgdGhlIGNhbGxiYWNrJ3MgXGZCdXNlcnBcZlAKK2FyZ3VtZW50IHdpdGggXGZJQ1VSTE1PUFRfU09DS0VUREFUQVxmUC4gIFNlZSBcZkljdXJsX211bHRpX3NvY2tldCgzKVxmUCBmb3IKK21vcmUgY2FsbGJhY2sgZGV0YWlscy4KKy5JUCBDVVJMTU9QVF9TT0NLRVREQVRBCitQYXNzIGEgcG9pbnRlciB0byB3aGF0ZXZlciB5b3Ugd2FudCBwYXNzZWQgdG8gdGhlIFxmQmN1cmxfc29ja2V0X2NhbGxiYWNrXGZQJ3MKK2ZvcnRoIGFyZ3VtZW50LCB0aGUgdXNlcnAgcG9pbnRlci4gVGhpcyBpcyBub3QgdXNlZCBieSBsaWJjdXJsIGJ1dCBvbmx5CitwYXNzZWQtdGhydSBhcy1pcy4gU2V0IHRoZSBjYWxsYmFjayBwb2ludGVyIHdpdGgKK1xmSUNVUkxNT1BUX1NPQ0tFVEZVTkNUSU9OXGZQLgorLklQIENVUkxNT1BUX1BJUEVMSU5JTkcKK1Bhc3MgYSBsb25nIHNldCB0byAxIHRvIGVuYWJsZSBvciAwIHRvIGRpc2FibGUuIEVuYWJsaW5nIHBpcGVsaW5pbmcgb24gYSBtdWx0aQoraGFuZGxlIHdpbGwgbWFrZSBpdCBhdHRlbXB0IHRvIHBlcmZvcm0gSFRUUCBQaXBlbGluaW5nIGFzIGZhciBhcyBwb3NzaWJsZSBmb3IKK3RyYW5zZmVycyB1c2luZyB0aGlzIGhhbmRsZS4gVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBhZGQgYSBzZWNvbmQgcmVxdWVzdCB0aGF0CitjYW4gdXNlIGFuIGFscmVhZHkgZXhpc3RpbmcgY29ubmVjdGlvbiwgdGhlIHNlY29uZCByZXF1ZXN0IHdpbGwgYmUgXCYicGlwZWQiCitvbiB0aGUgc2FtZSBjb25uZWN0aW9uIHJhdGhlciB0aGFuIGJlaW5nIGV4ZWN1dGVkIGluIHBhcmFsbGVsLiAoQWRkZWQgaW4KKzcuMTYuMCkKKy5JUCBDVVJMTU9QVF9USU1FUkZVTkNUSU9OCitQYXNzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIG1hdGNoaW5nIHRoZSBcZkJjdXJsX211bHRpX3RpbWVyX2NhbGxiYWNrXGZQCitwcm90b3R5cGUuICBUaGlzIGZ1bmN0aW9uIHdpbGwgdGhlbiBiZSBjYWxsZWQgd2hlbiB0aGUgdGltZW91dCB2YWx1ZQorY2hhbmdlcy4gVGhlIHRpbWVvdXQgdmFsdWUgaXMgYXQgd2hhdCBsYXRlc3QgdGltZSB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGNhbGwKK29uZSBvZiB0aGUgXCYicGVyZm9ybWluZyIgZnVuY3Rpb25zIG9mIHRoZSBtdWx0aSBpbnRlcmZhY2UKKyhcZkljdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMylcZlAgYW5kIFxmSWN1cmxfbXVsdGlfcGVyZm9ybSgzKVxmUCkgLSB0byBhbGxvdworbGliY3VybCB0byBrZWVwIHRpbWVvdXRzIGFuZCByZXRyaWVzIGV0YyB0byB3b3JrLiBBIHRpbWVvdXQgdmFsdWUgb2YgLTEgbWVhbnMKK3RoYXQgdGhlcmUgaXMgbm8gdGltZW91dCBhdCBhbGwsIGFuZCAwIG1lYW5zIHRoYXQgdGhlIHRpbWVvdXQgaXMgYWxyZWFkeQorcmVhY2hlZC4gTGliY3VybCBhdHRlbXB0cyB0byBsaW1pdCBjYWxsaW5nIHRoaXMgb25seSB3aGVuIHRoZSBmaXhlZCBmdXR1cmUKK3RpbWVvdXQgdGltZSBhY3R1YWxseSBjaGFuZ2VzLiBTZWUgYWxzbyBcZklDVVJMTU9QVF9USU1FUkRBVEFcZlAuIFRoaXMKK2NhbGxiYWNrIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YsIG9yIGluIGFkZGl0aW9uIHRvLAorXGZJY3VybF9tdWx0aV90aW1lb3V0KDMpXGZQLiAoQWRkZWQgaW4gNy4xNi4wKQorLklQIENVUkxNT1BUX1RJTUVSREFUQQorUGFzcyBhIHBvaW50ZXIgdG8gd2hhdGV2ZXIgeW91IHdhbnQgcGFzc2VkIHRvIHRoZQorXGZCY3VybF9tdWx0aV90aW1lcl9jYWxsYmFja1xmUCdzIHRoaXJkIGFyZ3VtZW50LCB0aGUgdXNlcnAgcG9pbnRlci4gIFRoaXMgaXMKK25vdCB1c2VkIGJ5IGxpYmN1cmwgYnV0IG9ubHkgcGFzc2VkLXRocnUgYXMtaXMuIFNldCB0aGUgY2FsbGJhY2sgcG9pbnRlciB3aXRoCitcZklDVVJMTU9QVF9USU1FUkZVTkNUSU9OXGZQLiAoQWRkZWQgaW4gNy4xNi4wKQorLklQIENVUkxNT1BUX01BWENPTk5FQ1RTCitQYXNzIGEgbG9uZy4gVGhlIHNldCBudW1iZXIgd2lsbCBiZSB1c2VkIGFzIHRoZSBtYXhpbXVtIGFtb3VudCBvZgorc2ltdWx0YW5lb3VzbHkgb3BlbiBjb25uZWN0aW9ucyB0aGF0IGxpYmN1cmwgbWF5IGNhY2hlLiBEZWZhdWx0IGlzIDEwLCBhbmQKK2xpYmN1cmwgd2lsbCBlbmxhcmdlIHRoZSBzaXplIGZvciBlYWNoIGFkZGVkIGVhc3kgaGFuZGxlIHRvIG1ha2UgaXQgZml0IDQKK3RpbWVzIHRoZSBudW1iZXIgb2YgYWRkZWQgZWFzeSBoYW5kbGVzLgorCitCeSBzZXR0aW5nIHRoaXMgb3B0aW9uLCB5b3UgY2FuIHByZXZlbnQgdGhlIGNhY2hlIHNpemUgZnJvbSBncm93aW5nIGJleW9uZCB0aGUKK2xpbWl0IHNldCBieSB5b3UuCisKK1doZW4gdGhlIGNhY2hlIGlzIGZ1bGwsIGN1cmwgY2xvc2VzIHRoZSBvbGRlc3Qgb25lIGluIHRoZSBjYWNoZSB0byBwcmV2ZW50IHRoZQorbnVtYmVyIG9mIG9wZW4gY29ubmVjdGlvbnMgZnJvbSBpbmNyZWFzaW5nLgorCitUaGlzIG9wdGlvbiBpcyBmb3IgdGhlIG11bHRpIGhhbmRsZSdzIHVzZSBvbmx5LCB3aGVuIHVzaW5nIHRoZSBlYXN5IGludGVyZmFjZQoreW91IHNob3VsZCBpbnN0ZWFkIHVzZSB0aGUgXGZJQ1VSTE9QVF9NQVhDT05ORUNUU1xmUCBvcHRpb24uCisKKyhBZGRlZCBpbiA3LjE2LjMpCisuU0ggUkVUVVJOUworVGhlIHN0YW5kYXJkIENVUkxNY29kZSBmb3IgbXVsdGkgaW50ZXJmYWNlIGVycm9yIGNvZGVzLiBOb3RlIHRoYXQgaXQgcmV0dXJucyBhCitDVVJMTV9VTktOT1dOX09QVElPTiBpZiB5b3UgdHJ5IHNldHRpbmcgYW4gb3B0aW9uIHRoYXQgdGhpcyB2ZXJzaW9uIG9mIGxpYmN1cmwKK2RvZXNuJ3Qga25vdyBvZi4KKy5TSCBBVkFJTEFCSUxJVFkKK1RoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIGluIGxpYmN1cmwgNy4xNS40LgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX211bHRpX2NsZWFudXAgIigzKSwgIiBjdXJsX211bHRpX2luaXQgIigzKSwgIgorLkJSIGN1cmxfbXVsdGlfc29ja2V0ICIoMyksICIgY3VybF9tdWx0aV9pbmZvX3JlYWQgIigzKSIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3NldG9wdC5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc2V0b3B0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgyMDYzMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3NldG9wdC5odG1sCkBAIC0wLDAgKzEsNzUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX211bHRpX3NldG9wdCBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX211bHRpX3NldG9wdCAtIHNldCBvcHRpb25zIGZvciBhIGN1cmwgbXVsdGkgaGFuZGxlIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4jaW5jbHVkZSAmbHQ7Y3VybC9jdXJsLmgmZ3Q7IAorPHAgY2xhc3M9ImxldmVsMCI+Q1VSTE1jb2RlIGN1cmxfbXVsdGlfc2V0b3B0KENVUkxNICogbXVsdGlfaGFuZGxlLCBDVVJMTW9wdGlvbiBvcHRpb24sIHBhcmFtKTsgPGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfbXVsdGlfc2V0b3B0KCkgaXMgdXNlZCB0byB0ZWxsIGEgbGliY3VybCBtdWx0aSBoYW5kbGUgaG93IHRvIGJlaGF2ZS4gQnkgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc2V0b3B0Lmh0bWwiPmN1cmxfbXVsdGlfc2V0b3B0KDMpPC9hPiwgeW91IGNhbiBjaGFuZ2UgbGliY3VybCdzIGJlaGF2aW91ciB3aGVuIHVzaW5nIHRoYXQgbXVsdGkgaGFuZGxlLiAgQWxsIG9wdGlvbnMgYXJlIHNldCB3aXRoIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPm9wdGlvbjwvc3Bhbj4gZm9sbG93ZWQgYnkgdGhlIHBhcmFtZXRlciA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnBhcmFtPC9zcGFuPi4gVGhhdCBwYXJhbWV0ZXIgY2FuIGJlIGEgPHNwYW4gQ2xhc3M9ImJvbGQiPmxvbmc8L3NwYW4+LCBhIDxzcGFuIENsYXNzPSJib2xkIj5mdW5jdGlvbiBwb2ludGVyPC9zcGFuPiwgYW4gPHNwYW4gQ2xhc3M9ImJvbGQiPm9iamVjdCBwb2ludGVyPC9zcGFuPiBvciBhIDxzcGFuIENsYXNzPSJib2xkIj5jdXJsX29mZl90PC9zcGFuPiB0eXBlLCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgc3BlY2lmaWMgb3B0aW9uIGV4cGVjdHMuIFJlYWQgdGhpcyBtYW51YWwgY2FyZWZ1bGx5IGFzIGJhZCBpbnB1dCB2YWx1ZXMgbWF5IGNhdXNlIGxpYmN1cmwgdG8gYmVoYXZlIGJhZGx5ISBZb3UgY2FuIG9ubHkgc2V0IG9uZSBvcHRpb24gaW4gZWFjaCBmdW5jdGlvbiBjYWxsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik9QVElPTlMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk9QVElPTlM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMTU9QVFNPQ0tFVEZVTkNUSU9OIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxNT1BUX1NPQ0tFVEZVTkNUSU9OPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gbWF0Y2hpbmcgdGhlIDxzcGFuIENsYXNzPSJib2xkIj5jdXJsX3NvY2tldF9jYWxsYmFjazwvc3Bhbj4gcHJvdG90eXBlLiBUaGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sIj5jdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMyk8L2E+IGZ1bmN0aW9uIGluZm9ybXMgdGhlIGFwcGxpY2F0aW9uIGFib3V0IHVwZGF0ZXMgaW4gdGhlIHNvY2tldCAoZmlsZSBkZXNjcmlwdG9yKSBzdGF0dXMgYnkgZG9pbmcgbm9uZSwgb25lLCBvciBtdWx0aXBsZSBjYWxscyB0byB0aGUgY3VybF9zb2NrZXRfY2FsbGJhY2sgZ2l2ZW4gaW4gdGhlIDxzcGFuIENsYXNzPSJib2xkIj5wYXJhbTwvc3Bhbj4gYXJndW1lbnQuIFRoZXkgdXBkYXRlIHRoZSBzdGF0dXMgd2l0aCBjaGFuZ2VzIHNpbmNlIHRoZSBwcmV2aW91cyB0aW1lIGEgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0Lmh0bWwiPmN1cmxfbXVsdGlfc29ja2V0KDMpPC9hPiBmdW5jdGlvbiB3YXMgY2FsbGVkLiBJZiB0aGUgZ2l2ZW4gY2FsbGJhY2sgcG9pbnRlciBpcyBOVUxMLCBubyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4gU2V0IHRoZSBjYWxsYmFjaydzIDxzcGFuIENsYXNzPSJib2xkIj51c2VycDwvc3Bhbj4gYXJndW1lbnQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMTU9QVFNPQ0tFVERBVEEiPkNVUkxNT1BUX1NPQ0tFVERBVEE8L2E+LiAgU2VlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3NvY2tldC5odG1sIj5jdXJsX211bHRpX3NvY2tldCgzKTwvYT4gZm9yIG1vcmUgY2FsbGJhY2sgZGV0YWlscy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMTU9QVFNPQ0tFVERBVEEiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE1PUFRfU09DS0VUREFUQTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byB3aGF0ZXZlciB5b3Ugd2FudCBwYXNzZWQgdG8gdGhlIDxzcGFuIENsYXNzPSJib2xkIj5jdXJsX3NvY2tldF9jYWxsYmFjazwvc3Bhbj4ncyBmb3J0aCBhcmd1bWVudCwgdGhlIHVzZXJwIHBvaW50ZXIuIFRoaXMgaXMgbm90IHVzZWQgYnkgbGliY3VybCBidXQgb25seSBwYXNzZWQtdGhydSBhcy1pcy4gU2V0IHRoZSBjYWxsYmFjayBwb2ludGVyIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE1PUFRTT0NLRVRGVU5DVElPTiI+Q1VSTE1PUFRfU09DS0VURlVOQ1RJT048L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxNT1BUUElQRUxJTklORyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMTU9QVF9QSVBFTElOSU5HPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nIHNldCB0byAxIHRvIGVuYWJsZSBvciAwIHRvIGRpc2FibGUuIEVuYWJsaW5nIHBpcGVsaW5pbmcgb24gYSBtdWx0aSBoYW5kbGUgd2lsbCBtYWtlIGl0IGF0dGVtcHQgdG8gcGVyZm9ybSBIVFRQIFBpcGVsaW5pbmcgYXMgZmFyIGFzIHBvc3NpYmxlIGZvciB0cmFuc2ZlcnMgdXNpbmcgdGhpcyBoYW5kbGUuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgYWRkIGEgc2Vjb25kIHJlcXVlc3QgdGhhdCBjYW4gdXNlIGFuIGFscmVhZHkgZXhpc3RpbmcgY29ubmVjdGlvbiwgdGhlIHNlY29uZCByZXF1ZXN0IHdpbGwgYmUgInBpcGVkIiBvbiB0aGUgc2FtZSBjb25uZWN0aW9uIHJhdGhlciB0aGFuIGJlaW5nIGV4ZWN1dGVkIGluIHBhcmFsbGVsLiAoQWRkZWQgaW4gNy4xNi4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxNT1BUVElNRVJGVU5DVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMTU9QVF9USU1FUkZVTkNUSU9OPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gbWF0Y2hpbmcgdGhlIDxzcGFuIENsYXNzPSJib2xkIj5jdXJsX211bHRpX3RpbWVyX2NhbGxiYWNrPC9zcGFuPiBwcm90b3R5cGUuICBUaGlzIGZ1bmN0aW9uIHdpbGwgdGhlbiBiZSBjYWxsZWQgd2hlbiB0aGUgdGltZW91dCB2YWx1ZSBjaGFuZ2VzLiBUaGUgdGltZW91dCB2YWx1ZSBpcyBhdCB3aGF0IGxhdGVzdCB0aW1lIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgY2FsbCBvbmUgb2YgdGhlICJwZXJmb3JtaW5nIiBmdW5jdGlvbnMgb2YgdGhlIG11bHRpIGludGVyZmFjZSAoPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sIj5jdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMyk8L2E+IGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9wZXJmb3JtLmh0bWwiPmN1cmxfbXVsdGlfcGVyZm9ybSgzKTwvYT4pIC0gdG8gYWxsb3cgbGliY3VybCB0byBrZWVwIHRpbWVvdXRzIGFuZCByZXRyaWVzIGV0YyB0byB3b3JrLiBBIHRpbWVvdXQgdmFsdWUgb2YgLTEgbWVhbnMgdGhhdCB0aGVyZSBpcyBubyB0aW1lb3V0IGF0IGFsbCwgYW5kIDAgbWVhbnMgdGhhdCB0aGUgdGltZW91dCBpcyBhbHJlYWR5IHJlYWNoZWQuIExpYmN1cmwgYXR0ZW1wdHMgdG8gbGltaXQgY2FsbGluZyB0aGlzIG9ubHkgd2hlbiB0aGUgZml4ZWQgZnV0dXJlIHRpbWVvdXQgdGltZSBhY3R1YWxseSBjaGFuZ2VzLiBTZWUgYWxzbyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMTU9QVFRJTUVSREFUQSI+Q1VSTE1PUFRfVElNRVJEQVRBPC9hPi4gVGhpcyBjYWxsYmFjayBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mLCBvciBpbiBhZGRpdGlvbiB0bywgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfdGltZW91dC5odG1sIj5jdXJsX211bHRpX3RpbWVvdXQoMyk8L2E+LiAoQWRkZWQgaW4gNy4xNi4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxNT1BUVElNRVJEQVRBIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxNT1BUX1RJTUVSREFUQTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QYXNzIGEgcG9pbnRlciB0byB3aGF0ZXZlciB5b3Ugd2FudCBwYXNzZWQgdG8gdGhlIDxzcGFuIENsYXNzPSJib2xkIj5jdXJsX211bHRpX3RpbWVyX2NhbGxiYWNrPC9zcGFuPidzIHRoaXJkIGFyZ3VtZW50LCB0aGUgdXNlcnAgcG9pbnRlci4gIFRoaXMgaXMgbm90IHVzZWQgYnkgbGliY3VybCBidXQgb25seSBwYXNzZWQtdGhydSBhcy1pcy4gU2V0IHRoZSBjYWxsYmFjayBwb2ludGVyIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjQ1VSTE1PUFRUSU1FUkZVTkNUSU9OIj5DVVJMTU9QVF9USU1FUkZVTkNUSU9OPC9hPi4gKEFkZGVkIGluIDcuMTYuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMTU9QVE1BWENPTk5FQ1RTIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxNT1BUX01BWENPTk5FQ1RTPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBhc3MgYSBsb25nLiBUaGUgc2V0IG51bWJlciB3aWxsIGJlIHVzZWQgYXMgdGhlIG1heGltdW0gYW1vdW50IG9mIHNpbXVsdGFuZW91c2x5IG9wZW4gY29ubmVjdGlvbnMgdGhhdCBsaWJjdXJsIG1heSBjYWNoZS4gRGVmYXVsdCBpcyAxMCwgYW5kIGxpYmN1cmwgd2lsbCBlbmxhcmdlIHRoZSBzaXplIGZvciBlYWNoIGFkZGVkIGVhc3kgaGFuZGxlIHRvIG1ha2UgaXQgZml0IDQgdGltZXMgdGhlIG51bWJlciBvZiBhZGRlZCBlYXN5IGhhbmRsZXMuIAorPHAgY2xhc3M9ImxldmVsMSI+Qnkgc2V0dGluZyB0aGlzIG9wdGlvbiwgeW91IGNhbiBwcmV2ZW50IHRoZSBjYWNoZSBzaXplIGZyb20gZ3Jvd2luZyBiZXlvbmQgdGhlIGxpbWl0IHNldCBieSB5b3UuIAorPHAgY2xhc3M9ImxldmVsMSI+V2hlbiB0aGUgY2FjaGUgaXMgZnVsbCwgY3VybCBjbG9zZXMgdGhlIG9sZGVzdCBvbmUgaW4gdGhlIGNhY2hlIHRvIHByZXZlbnQgdGhlIG51bWJlciBvZiBvcGVuIGNvbm5lY3Rpb25zIGZyb20gaW5jcmVhc2luZy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBpcyBmb3IgdGhlIG11bHRpIGhhbmRsZSdzIHVzZSBvbmx5LCB3aGVuIHVzaW5nIHRoZSBlYXN5IGludGVyZmFjZSB5b3Ugc2hvdWxkIGluc3RlYWQgdXNlIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxPUFRfTUFYQ09OTkVDVFM8L3NwYW4+IG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwxIj4oQWRkZWQgaW4gNy4xNi4zKSA8YSBuYW1lPSJSRVRVUk5TIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SRVRVUk5TPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBzdGFuZGFyZCBDVVJMTWNvZGUgZm9yIG11bHRpIGludGVyZmFjZSBlcnJvciBjb2Rlcy4gTm90ZSB0aGF0IGl0IHJldHVybnMgYSBDVVJMTV9VTktOT1dOX09QVElPTiBpZiB5b3UgdHJ5IHNldHRpbmcgYW4gb3B0aW9uIHRoYXQgdGhpcyB2ZXJzaW9uIG9mIGxpYmN1cmwgZG9lc24ndCBrbm93IG9mLiA8YSBuYW1lPSJBVkFJTEFCSUxJVFkiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkFWQUlMQUJJTElUWTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBsaWJjdXJsIDcuMTUuNC4gPGEgbmFtZT0iU0VFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TRUUgQUxTTzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX211bHRpX2NsZWFudXAuaHRtbCI+Y3VybF9tdWx0aV9jbGVhbnVwICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9pbml0Lmh0bWwiPiAgY3VybF9tdWx0aV9pbml0ICgzKTwvYT4gPHNwYW4gQ2xhc3M9Im1hbnBhZ2UiPiA8L3NwYW4+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0Lmh0bWwiPmN1cmxfbXVsdGlfc29ja2V0ICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9pbmZvX3JlYWQuaHRtbCI+ICBjdXJsX211bHRpX2luZm9fcmVhZCAoMyk8L2E+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc2V0b3B0LnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3NldG9wdC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5NjFmMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3NldG9wdC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc29ja2V0LjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9zb2NrZXQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjI2MmYyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc29ja2V0LjMKQEAgLTAsMCArMSwxNTggQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGN1cmxfbXVsdGlfc29ja2V0IDMgIjkgSnVsIDIwMDYiICJsaWJjdXJsIDcuMTYuMCIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfbXVsdGlfc29ja2V0IFwtIHJlYWRzL3dyaXRlcyBhdmFpbGFibGUgZGF0YQorLlNIIFNZTk9QU0lTCisubmYKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KK0NVUkxNY29kZSBjdXJsX211bHRpX3NvY2tldChDVVJMTSAqIG11bHRpX2hhbmRsZSwgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpydW5uaW5nX2hhbmRsZXMpOworCitDVVJMTWNvZGUgY3VybF9tdWx0aV9zb2NrZXRfYWxsKENVUkxNICptdWx0aV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcnVubmluZ19oYW5kbGVzKTsKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGVzZSBmdW5jdGlvbnMgYXJlIGRlcHJlY2F0ZWQuIERvIG5vdCB1c2UhIFNlZQorXGZJY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKDMpXGZQIGluc3RlYWQhCisKK0F0IHJldHVybiwgdGhlIGludGVnZXIgXGZCcnVubmluZ19oYW5kbGVzXGZQIHBvaW50cyB0byB3aWxsIGNvbnRhaW4gdGhlIG51bWJlcgorb2Ygc3RpbGwgcnVubmluZyBlYXN5IGhhbmRsZXMgd2l0aGluIHRoZSBtdWx0aSBoYW5kbGUuIFdoZW4gdGhpcyBudW1iZXIKK3JlYWNoZXMgemVybywgYWxsIHRyYW5zZmVycyBhcmUgY29tcGxldGUvZG9uZS4gTm90ZSB0aGF0IHdoZW4geW91IGNhbGwKK1xmSWN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigzKVxmUCBvbiBhIHNwZWNpZmljIHNvY2tldCBhbmQgdGhlIGNvdW50ZXIKK2RlY3JlYXNlcyBieSBvbmUsIGl0IERPRVMgTk9UIG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCB0aGlzIGV4YWN0IHNvY2tldC90cmFuc2ZlcgoraXMgdGhlIG9uZSB0aGF0IGNvbXBsZXRlZC4gVXNlIFxmSWN1cmxfbXVsdGlfaW5mb19yZWFkKDMpXGZQIHRvIGZpZ3VyZSBvdXQKK3doaWNoIGVhc3kgaGFuZGxlIHRoYXQgY29tcGxldGVkLgorCitUaGUgXGZCY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKDMpXGZQIGZ1bmN0aW9ucyBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIGFib3V0Cit1cGRhdGVzIGluIHRoZSBzb2NrZXQgKGZpbGUgZGVzY3JpcHRvcikgc3RhdHVzIGJ5IGRvaW5nIG5vbmUsIG9uZSwgb3IgbXVsdGlwbGUKK2NhbGxzIHRvIHRoZSBzb2NrZXQgY2FsbGJhY2sgZnVuY3Rpb24gc2V0IHdpdGggdGhlIENVUkxNT1BUX1NPQ0tFVEZVTkNUSU9OCitvcHRpb24gdG8gXGZJY3VybF9tdWx0aV9zZXRvcHQoMylcZlAuIFRoZXkgdXBkYXRlIHRoZSBzdGF0dXMgd2l0aCBjaGFuZ2VzCitzaW5jZSB0aGUgcHJldmlvdXMgdGltZSB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZC4KKworR2V0IHRoZSB0aW1lb3V0IHRpbWUgYnkgc2V0dGluZyB0aGUgXGZJQ1VSTE1PUFRfVElNRVJGVU5DVElPTlxmUCBvcHRpb24gd2l0aAorXGZJY3VybF9tdWx0aV9zZXRvcHQoMylcZlAuIFlvdXIgYXBwbGljYXRpb24gd2lsbCB0aGVuIGdldCBjYWxsZWQgd2l0aAoraW5mb3JtYXRpb24gb24gaG93IGxvbmcgdG8gd2FpdCBmb3Igc29ja2V0IGFjdGlvbnMgYXQgbW9zdCBiZWZvcmUgZG9pbmcgdGhlCit0aW1lb3V0IGFjdGlvbjogY2FsbCB0aGUgXGZCY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKDMpXGZQIGZ1bmN0aW9uIHdpdGggdGhlCitcZkJzb2NrZmRcZlAgYXJndW1lbnQgc2V0IHRvIENVUkxfU09DS0VUX1RJTUVPVVQuIFlvdSBjYW4gYWxzbyB1c2UgdGhlCitcZkljdXJsX211bHRpX3RpbWVvdXQoMylcZlAgZnVuY3Rpb24gdG8gcG9sbCB0aGUgdmFsdWUgYXQgYW55IGdpdmVuIHRpbWUsIGJ1dAorZm9yIGFuIGV2ZW50LWJhc2VkIHN5c3RlbSB1c2luZyB0aGUgY2FsbGJhY2sgaXMgZmFyIGJldHRlciB0aGFuIHJlbHlpbmcgb24KK3BvbGxpbmcgdGhlIHRpbWVvdXQgdmFsdWUuCisKK1VzYWdlIG9mIFxmSWN1cmxfbXVsdGlfc29ja2V0KDMpXGZQIGlzIGRlcHJlY2F0ZWQsIHdoZXJlYXMgdGhlIGZ1bmN0aW9uIGlzCitlcXVpdmFsZW50IHRvIFxmSWN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigzKVxmUCB3aXRoIFxmQmV2X2JpdG1hc2tcZlAgc2V0IHRvCiswLgorCitGb3JjZSBsaWJjdXJsIHRvIChyZS0pY2hlY2sgYWxsIGl0cyBpbnRlcm5hbCBzb2NrZXRzIGFuZCB0cmFuc2ZlcnMgaW5zdGVhZCBvZgoranVzdCBhIHNpbmdsZSBvbmUgYnkgY2FsbGluZyBcZkJjdXJsX211bHRpX3NvY2tldF9hbGwoMylcZlAuIE5vdGUgdGhhdCB0aGVyZQorc2hvdWxkIG5vdCBiZSBhbnkgcmVhc29uIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIQorLlNIICJDQUxMQkFDSyBERVRBSUxTIgorCitUaGUgc29ja2V0IFxmQmNhbGxiYWNrXGZQIGZ1bmN0aW9uIHVzZXMgYSBwcm90b3R5cGUgbGlrZSB0aGlzCisubmYKKworICBpbnQgY3VybF9zb2NrZXRfY2FsbGJhY2soQ1VSTCAqZWFzeSwgICAgICAvKiBlYXN5IGhhbmRsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzLCAvKiBzb2NrZXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhY3Rpb24sICAgICAgLyogc2VlIHZhbHVlcyBiZWxvdyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcnAsICAgIC8qIHByaXZhdGUgY2FsbGJhY2sgcG9pbnRlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc29ja2V0cCk7IC8qIHByaXZhdGUgc29ja2V0IHBvaW50ZXIgKi8KKworLmZpCitUaGUgY2FsbGJhY2sgTVVTVCByZXR1cm4gMC4KKworVGhlIFxmSWVhc3lcZlAgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBlYXN5IGhhbmRsZSB0aGF0IGRlYWxzIHdpdGggdGhpcworcGFydGljdWxhciBzb2NrZXQuIE5vdGUgdGhhdCBhIHNpbmdsZSBoYW5kbGUgbWF5IHdvcmsgd2l0aCBzZXZlcmFsIHNvY2tldHMKK3NpbXVsdGFuZW91c2x5LgorCitUaGUgXGZJc1xmUCBhcmd1bWVudCBpcyB0aGUgYWN0dWFsIHNvY2tldCB2YWx1ZSBhcyB5b3UgdXNlIGl0IHdpdGhpbiB5b3VyCitzeXN0ZW0uCisKK1RoZSBcZklhY3Rpb25cZlAgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIGhhcyBvbmUgb2YgZml2ZSB2YWx1ZXM6CisuUlMKKy5JUCAiQ1VSTF9QT0xMX05PTkUgKDApIgorcmVnaXN0ZXIsIG5vdCBpbnRlcmVzdGVkIGluIHJlYWRpbmVzcyAoeWV0KQorLklQICJDVVJMX1BPTExfSU4gKDEpIgorcmVnaXN0ZXIsIGludGVyZXN0ZWQgaW4gcmVhZCByZWFkaW5lc3MKKy5JUCAiQ1VSTF9QT0xMX09VVCAoMikiCityZWdpc3RlciwgaW50ZXJlc3RlZCBpbiB3cml0ZSByZWFkaW5lc3MKKy5JUCAiQ1VSTF9QT0xMX0lOT1VUICgzKSIKK3JlZ2lzdGVyLCBpbnRlcmVzdGVkIGluIGJvdGggcmVhZCBhbmQgd3JpdGUgcmVhZGluZXNzCisuSVAgIkNVUkxfUE9MTF9SRU1PVkUgKDQpIgordW5yZWdpc3RlcgorLlJFCisKK1RoZSBcZklzb2NrZXRwXGZQIGFyZ3VtZW50IGlzIGEgcHJpdmF0ZSBwb2ludGVyIHlvdSBoYXZlIHByZXZpb3VzbHkgc2V0IHdpdGgKK1xmSWN1cmxfbXVsdGlfYXNzaWduKDMpXGZQIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgXGZJc1xmUCBzb2NrZXQuIElmIG5vCitwb2ludGVyIGhhcyBiZWVuIHNldCwgc29ja2V0cCB3aWxsIGJlIE5VTEwuIFRoaXMgYXJndW1lbnQgaXMgb2YgY291cnNlIGEKK3NlcnZpY2UgdG8gYXBwbGljYXRpb25zIHRoYXQgd2FudCB0byBrZWVwIGNlcnRhaW4gZGF0YSBvciBzdHJ1Y3RzIHRoYXQgYXJlCitzdHJpY3RseSBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBzb2NrZXQuCisKK1RoZSBcZkl1c2VycFxmUCBhcmd1bWVudCBpcyBhIHByaXZhdGUgcG9pbnRlciB5b3UgaGF2ZSBwcmV2aW91c2x5IHNldCB3aXRoCitcZkljdXJsX211bHRpX3NldG9wdCgzKVxmUCBhbmQgdGhlIENVUkxNT1BUX1NPQ0tFVERBVEEgb3B0aW9uLgorLlNIICJSRVRVUk4gVkFMVUUiCitDVVJMTWNvZGUgdHlwZSwgZ2VuZXJhbCBsaWJjdXJsIG11bHRpIGludGVyZmFjZSBlcnJvciBjb2RlLgorCitMZWdhY3k6IElmIHlvdSByZWNlaXZlIFxmSUNVUkxNX0NBTExfTVVMVElfUEVSRk9STVxmUCwgdGhpcyBiYXNpY2FsbHkgbWVhbnMKK3RoYXQgeW91IHNob3VsZCBjYWxsIFxmSWN1cmxfbXVsdGlfc29ja2V0KDMpXGZQIGFnYWluLCBiZWZvcmUgeW91IHdhaXQgZm9yCittb3JlIGFjdGlvbnMgb24gbGliY3VybCdzIHNvY2tldHMuIFlvdSBkb24ndCBoYXZlIHRvIGRvIGl0IGltbWVkaWF0ZWx5LCBidXQKK3RoZSByZXR1cm4gY29kZSBtZWFucyB0aGF0IGxpYmN1cmwgbWF5IGhhdmUgbW9yZSBkYXRhIGF2YWlsYWJsZSB0byByZXR1cm4gb3IKK3RoYXQgdGhlcmUgbWF5IGJlIG1vcmUgZGF0YSB0byBzZW5kIG9mZiBiZWZvcmUgaXQgaXMgInNhdGlzZmllZCIuCisKK0luIG1vZGVybiBsaWJjdXJscywgXGZJQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNXGZQIG9yCitcZklDVVJMTV9DQUxMX01VTFRJX1NPS0NFVFxmUCBzaG91bGQgbm90IGJlIHJldHVybmVkIGFuZCBubyBhcHBsaWNhdGlvbiBuZWVkcwordG8gY2FyZSBhYm91dCB0aGVtLgorCitOT1RFIHRoYXQgdGhlIHJldHVybiBjb2RlIGlzIGZvciB0aGUgd2hvbGUgbXVsdGkgc3RhY2suIFByb2JsZW1zIHN0aWxsIG1pZ2h0IGhhdmUKK29jY3VycmVkIG9uIGluZGl2aWR1YWwgdHJhbnNmZXJzIGV2ZW4gd2hlbiBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zCityZXR1cm4gT0suCisuU0ggIlRZUElDQUwgVVNBR0UiCisxLiBDcmVhdGUgYSBtdWx0aSBoYW5kbGUKKworMi4gU2V0IHRoZSBzb2NrZXQgY2FsbGJhY2sgd2l0aCBDVVJMTU9QVF9TT0NLRVRGVU5DVElPTgorCiszLiBTZXQgdGhlIHRpbWVvdXQgY2FsbGJhY2sgd2l0aCBDVVJMTU9QVF9USU1FUkZVTkNUSU9OLCB0byBnZXQgdG8ga25vdyB3aGF0Cit0aW1lb3V0IHZhbHVlIHRvIHVzZSB3aGVuIHdhaXRpbmcgZm9yIHNvY2tldCBhY3Rpdml0aWVzLgorCis0LiBBZGQgZWFzeSBoYW5kbGVzIHdpdGggY3VybF9tdWx0aV9hZGRfaGFuZGxlKCkKKworNS4gUHJvdmlkZSBzb21lIG1lYW5zIHRvIG1hbmFnZSB0aGUgc29ja2V0cyBsaWJjdXJsIGlzIHVzaW5nLCBzbyB5b3UgY2FuIGNoZWNrCit0aGVtIGZvciBhY3Rpdml0eS4gVGhpcyBjYW4gYmUgZG9uZSB0aHJvdWdoIHlvdXIgYXBwbGljYXRpb24gY29kZSwgb3IgYnkgd2F5CitvZiBhbiBleHRlcm5hbCBsaWJyYXJ5IHN1Y2ggYXMgbGliZXZlbnQgb3IgZ2xpYi4KKworNi4gV2FpdCBmb3IgYWN0aXZpdHkgb24gYW55IG9mIGxpYmN1cmwncyBzb2NrZXRzLCB1c2UgdGhlIHRpbWVvdXQgdmFsdWUgeW91cgorY2FsbGJhY2sgaGFzIGJlZW4gdG9sZAorCis3LCBXaGVuIGFjdGl2aXR5IGlzIGRldGVjdGVkLCBjYWxsIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigpIGZvciB0aGUKK3NvY2tldChzKSB0aGF0IGdvdCBhY3Rpb24uIElmIG5vIGFjdGl2aXR5IGlzIGRldGVjdGVkIGFuZCB0aGUgdGltZW91dCBleHBpcmVzLAorY2FsbCBcZkljdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMylcZlAgd2l0aCBcZklDVVJMX1NPQ0tFVF9USU1FT1VUXGZQCisKKzguIEdvIGJhY2sgdG8gc3RlcCA2LgorLlNIIEFWQUlMQUJJTElUWQorVGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gbGliY3VybCA3LjE1LjQsIGFuZCBpcyBkZWVtZWQgc3RhYmxlIHNpbmNlCis3LjE2LjAuCisKK1xmSWN1cmxfbXVsdGlfc29ja2V0KDMpXGZQIGlzIGRlcHJlY2F0ZWQsIHVzZQorXGZJY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKDMpXGZQIGluc3RlYWQhCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfbXVsdGlfY2xlYW51cCAiKDMpLCAiIGN1cmxfbXVsdGlfaW5pdCAiKDMpLCAiCisuQlIgY3VybF9tdWx0aV9mZHNldCAiKDMpLCAiIGN1cmxfbXVsdGlfaW5mb19yZWFkICIoMyksICIKKy5CUiAidGhlIGhpcGVyZmlmby5jIGV4YW1wbGUiCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9zb2NrZXQuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3NvY2tldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MzJlNmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9zb2NrZXQuaHRtbApAQCAtMCwwICsxLDk5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF9tdWx0aV9zb2NrZXQgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9tdWx0aV9zb2NrZXQgLSByZWFkcy93cml0ZXMgYXZhaWxhYmxlIGRhdGEgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0OyBDVVJMTWNvZGUgY3VybF9tdWx0aV9zb2NrZXQoQ1VSTE0gKiBtdWx0aV9oYW5kbGUsIGN1cmxfc29ja2V0X3Qgc29ja2ZkLCAmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJ1bm5pbmdfaGFuZGxlcyk7IAorPHAgY2xhc3M9ImxldmVsMCI+Q1VSTE1jb2RlIGN1cmxfbXVsdGlfc29ja2V0X2FsbChDVVJMTSAqbXVsdGlfaGFuZGxlLCAmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpydW5uaW5nX2hhbmRsZXMpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGVzZSBmdW5jdGlvbnMgYXJlIGRlcHJlY2F0ZWQuIERvIG5vdCB1c2UhIFNlZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uLmh0bWwiPmN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigzKTwvYT4gaW5zdGVhZCEgCis8cCBjbGFzcz0ibGV2ZWwwIj5BdCByZXR1cm4sIHRoZSBpbnRlZ2VyIDxzcGFuIENsYXNzPSJib2xkIj5ydW5uaW5nX2hhbmRsZXM8L3NwYW4+IHBvaW50cyB0byB3aWxsIGNvbnRhaW4gdGhlIG51bWJlciBvZiBzdGlsbCBydW5uaW5nIGVhc3kgaGFuZGxlcyB3aXRoaW4gdGhlIG11bHRpIGhhbmRsZS4gV2hlbiB0aGlzIG51bWJlciByZWFjaGVzIHplcm8sIGFsbCB0cmFuc2ZlcnMgYXJlIGNvbXBsZXRlL2RvbmUuIE5vdGUgdGhhdCB3aGVuIHlvdSBjYWxsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3NvY2tldF9hY3Rpb24uaHRtbCI+Y3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKDMpPC9hPiBvbiBhIHNwZWNpZmljIHNvY2tldCBhbmQgdGhlIGNvdW50ZXIgZGVjcmVhc2VzIGJ5IG9uZSwgaXQgRE9FUyBOT1QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHRoaXMgZXhhY3Qgc29ja2V0L3RyYW5zZmVyIGlzIHRoZSBvbmUgdGhhdCBjb21wbGV0ZWQuIFVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9pbmZvX3JlYWQuaHRtbCI+Y3VybF9tdWx0aV9pbmZvX3JlYWQoMyk8L2E+IHRvIGZpZ3VyZSBvdXQgd2hpY2ggZWFzeSBoYW5kbGUgdGhhdCBjb21wbGV0ZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIDxhIGNsYXNzPSJib2xkIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sIj5jdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMyk8L2E+IGZ1bmN0aW9ucyBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIGFib3V0IHVwZGF0ZXMgaW4gdGhlIHNvY2tldCAoZmlsZSBkZXNjcmlwdG9yKSBzdGF0dXMgYnkgZG9pbmcgbm9uZSwgb25lLCBvciBtdWx0aXBsZSBjYWxscyB0byB0aGUgc29ja2V0IGNhbGxiYWNrIGZ1bmN0aW9uIHNldCB3aXRoIHRoZSBDVVJMTU9QVF9TT0NLRVRGVU5DVElPTiBvcHRpb24gdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc2V0b3B0Lmh0bWwiPmN1cmxfbXVsdGlfc2V0b3B0KDMpPC9hPi4gVGhleSB1cGRhdGUgdGhlIHN0YXR1cyB3aXRoIGNoYW5nZXMgc2luY2UgdGhlIHByZXZpb3VzIHRpbWUgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+R2V0IHRoZSB0aW1lb3V0IHRpbWUgYnkgc2V0dGluZyB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMTU9QVF9USU1FUkZVTkNUSU9OPC9zcGFuPiBvcHRpb24gd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9zZXRvcHQuaHRtbCI+Y3VybF9tdWx0aV9zZXRvcHQoMyk8L2E+LiBZb3VyIGFwcGxpY2F0aW9uIHdpbGwgdGhlbiBnZXQgY2FsbGVkIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGxvbmcgdG8gd2FpdCBmb3Igc29ja2V0IGFjdGlvbnMgYXQgbW9zdCBiZWZvcmUgZG9pbmcgdGhlIHRpbWVvdXQgYWN0aW9uOiBjYWxsIHRoZSA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iLi9jdXJsX211bHRpX3NvY2tldF9hY3Rpb24uaHRtbCI+Y3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKDMpPC9hPiBmdW5jdGlvbiB3aXRoIHRoZSA8c3BhbiBDbGFzcz0iYm9sZCI+c29ja2ZkPC9zcGFuPiBhcmd1bWVudCBzZXQgdG8gQ1VSTF9TT0NLRVRfVElNRU9VVC4gWW91IGNhbiBhbHNvIHVzZSB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfdGltZW91dC5odG1sIj5jdXJsX211bHRpX3RpbWVvdXQoMyk8L2E+IGZ1bmN0aW9uIHRvIHBvbGwgdGhlIHZhbHVlIGF0IGFueSBnaXZlbiB0aW1lLCBidXQgZm9yIGFuIGV2ZW50LWJhc2VkIHN5c3RlbSB1c2luZyB0aGUgY2FsbGJhY2sgaXMgZmFyIGJldHRlciB0aGFuIHJlbHlpbmcgb24gcG9sbGluZyB0aGUgdGltZW91dCB2YWx1ZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Vc2FnZSBvZiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9zb2NrZXQuaHRtbCI+Y3VybF9tdWx0aV9zb2NrZXQoMyk8L2E+IGlzIGRlcHJlY2F0ZWQsIHdoZXJlYXMgdGhlIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sIj5jdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMyk8L2E+IHdpdGggPHNwYW4gQ2xhc3M9ImJvbGQiPmV2X2JpdG1hc2s8L3NwYW4+IHNldCB0byAwLiAKKzxwIGNsYXNzPSJsZXZlbDAiPkZvcmNlIGxpYmN1cmwgdG8gKHJlLSljaGVjayBhbGwgaXRzIGludGVybmFsIHNvY2tldHMgYW5kIHRyYW5zZmVycyBpbnN0ZWFkIG9mIGp1c3QgYSBzaW5nbGUgb25lIGJ5IGNhbGxpbmcgPGEgY2xhc3M9ImJvbGQiIGhyZWY9Ii4vY3VybF9tdWx0aV9zb2NrZXRfYWxsLmh0bWwiPmN1cmxfbXVsdGlfc29ja2V0X2FsbCgzKTwvYT4uIE5vdGUgdGhhdCB0aGVyZSBzaG91bGQgbm90IGJlIGFueSByZWFzb24gdG8gdXNlIHRoaXMgZnVuY3Rpb24hIDxhIG5hbWU9IkNBTExCQUNLIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5DQUxMQkFDSyBERVRBSUxTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+VGhlIHNvY2tldCA8c3BhbiBDbGFzcz0iYm9sZCI+Y2FsbGJhY2s8L3NwYW4+IGZ1bmN0aW9uIHVzZXMgYSBwcm90b3R5cGUgbGlrZSB0aGlzIAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDsgaW50IGN1cmxfc29ja2V0X2NhbGxiYWNrKENVUkwgKmVhc3ksICAgICAgLyogZWFzeSBoYW5kbGUgKi8gJm5ic3A7ICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHMsIC8qIHNvY2tldCAqLyAmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhY3Rpb24sICAgICAgLyogc2VlIHZhbHVlcyBiZWxvdyAqLyAmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJwLCAgICAvKiBwcml2YXRlIGNhbGxiYWNrIHBvaW50ZXIgKi8gJm5ic3A7ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzb2NrZXRwKTsgLyogcHJpdmF0ZSBzb2NrZXQgcG9pbnRlciAqLyAKKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGNhbGxiYWNrIE1VU1QgcmV0dXJuIDAuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+ZWFzeTwvc3Bhbj4gYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBlYXN5IGhhbmRsZSB0aGF0IGRlYWxzIHdpdGggdGhpcyBwYXJ0aWN1bGFyIHNvY2tldC4gTm90ZSB0aGF0IGEgc2luZ2xlIGhhbmRsZSBtYXkgd29yayB3aXRoIHNldmVyYWwgc29ja2V0cyBzaW11bHRhbmVvdXNseS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5zPC9zcGFuPiBhcmd1bWVudCBpcyB0aGUgYWN0dWFsIHNvY2tldCB2YWx1ZSBhcyB5b3UgdXNlIGl0IHdpdGhpbiB5b3VyIHN5c3RlbS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5hY3Rpb248L3NwYW4+IGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFjayBoYXMgb25lIG9mIGZpdmUgdmFsdWVzOiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFBPTExOT05FIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfUE9MTF9OT05FICgwKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5yZWdpc3Rlciwgbm90IGludGVyZXN0ZWQgaW4gcmVhZGluZXNzICh5ZXQpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFBPTExJTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1BPTExfSU4gKDEpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPnJlZ2lzdGVyLCBpbnRlcmVzdGVkIGluIHJlYWQgcmVhZGluZXNzIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFBPTExPVVQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9QT0xMX09VVCAoMik8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+cmVnaXN0ZXIsIGludGVyZXN0ZWQgaW4gd3JpdGUgcmVhZGluZXNzIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFBPTExJTk9VVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1BPTExfSU5PVVQgKDMpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPnJlZ2lzdGVyLCBpbnRlcmVzdGVkIGluIGJvdGggcmVhZCBhbmQgd3JpdGUgcmVhZGluZXNzIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFBPTExSRU1PVkUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9QT0xMX1JFTU9WRSAoNCk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+dW5yZWdpc3RlciAKKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+VGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+c29ja2V0cDwvc3Bhbj4gYXJndW1lbnQgaXMgYSBwcml2YXRlIHBvaW50ZXIgeW91IGhhdmUgcHJldmlvdXNseSBzZXQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9hc3NpZ24uaHRtbCI+Y3VybF9tdWx0aV9hc3NpZ24oMyk8L2E+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5zPC9zcGFuPiBzb2NrZXQuIElmIG5vIHBvaW50ZXIgaGFzIGJlZW4gc2V0LCBzb2NrZXRwIHdpbGwgYmUgTlVMTC4gVGhpcyBhcmd1bWVudCBpcyBvZiBjb3Vyc2UgYSBzZXJ2aWNlIHRvIGFwcGxpY2F0aW9ucyB0aGF0IHdhbnQgdG8ga2VlcCBjZXJ0YWluIGRhdGEgb3Igc3RydWN0cyB0aGF0IGFyZSBzdHJpY3RseSBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBzb2NrZXQuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+dXNlcnA8L3NwYW4+IGFyZ3VtZW50IGlzIGEgcHJpdmF0ZSBwb2ludGVyIHlvdSBoYXZlIHByZXZpb3VzbHkgc2V0IHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc2V0b3B0Lmh0bWwiPmN1cmxfbXVsdGlfc2V0b3B0KDMpPC9hPiBhbmQgdGhlIENVUkxNT1BUX1NPQ0tFVERBVEEgb3B0aW9uLiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5DVVJMTWNvZGUgdHlwZSwgZ2VuZXJhbCBsaWJjdXJsIG11bHRpIGludGVyZmFjZSBlcnJvciBjb2RlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPkxlZ2FjeTogSWYgeW91IHJlY2VpdmUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMTV9DQUxMX01VTFRJX1BFUkZPUk08L3NwYW4+LCB0aGlzIGJhc2ljYWxseSBtZWFucyB0aGF0IHlvdSBzaG91bGQgY2FsbCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9zb2NrZXQuaHRtbCI+Y3VybF9tdWx0aV9zb2NrZXQoMyk8L2E+IGFnYWluLCBiZWZvcmUgeW91IHdhaXQgZm9yIG1vcmUgYWN0aW9ucyBvbiBsaWJjdXJsJ3Mgc29ja2V0cy4gWW91IGRvbid0IGhhdmUgdG8gZG8gaXQgaW1tZWRpYXRlbHksIGJ1dCB0aGUgcmV0dXJuIGNvZGUgbWVhbnMgdGhhdCBsaWJjdXJsIG1heSBoYXZlIG1vcmUgZGF0YSBhdmFpbGFibGUgdG8gcmV0dXJuIG9yIHRoYXQgdGhlcmUgbWF5IGJlIG1vcmUgZGF0YSB0byBzZW5kIG9mZiBiZWZvcmUgaXQgaXMgInNhdGlzZmllZCIuIAorPHAgY2xhc3M9ImxldmVsMCI+SW4gbW9kZXJuIGxpYmN1cmxzLCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxNX0NBTExfTVVMVElfUEVSRk9STTwvc3Bhbj4gb3IgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMTV9DQUxMX01VTFRJX1NPS0NFVDwvc3Bhbj4gc2hvdWxkIG5vdCBiZSByZXR1cm5lZCBhbmQgbm8gYXBwbGljYXRpb24gbmVlZHMgdG8gY2FyZSBhYm91dCB0aGVtLiAKKzxwIGNsYXNzPSJsZXZlbDAiPk5PVEUgdGhhdCB0aGUgcmV0dXJuIGNvZGUgaXMgZm9yIHRoZSB3aG9sZSBtdWx0aSBzdGFjay4gUHJvYmxlbXMgc3RpbGwgbWlnaHQgaGF2ZSBvY2N1cnJlZCBvbiBpbmRpdmlkdWFsIHRyYW5zZmVycyBldmVuIHdoZW4gb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gT0suIDxhIG5hbWU9IlRZUElDQUwiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlRZUElDQUwgVVNBR0U8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+MS4gQ3JlYXRlIGEgbXVsdGkgaGFuZGxlIAorPHAgY2xhc3M9ImxldmVsMCI+Mi4gU2V0IHRoZSBzb2NrZXQgY2FsbGJhY2sgd2l0aCBDVVJMTU9QVF9TT0NLRVRGVU5DVElPTiAKKzxwIGNsYXNzPSJsZXZlbDAiPjMuIFNldCB0aGUgdGltZW91dCBjYWxsYmFjayB3aXRoIENVUkxNT1BUX1RJTUVSRlVOQ1RJT04sIHRvIGdldCB0byBrbm93IHdoYXQgdGltZW91dCB2YWx1ZSB0byB1c2Ugd2hlbiB3YWl0aW5nIGZvciBzb2NrZXQgYWN0aXZpdGllcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj40LiBBZGQgZWFzeSBoYW5kbGVzIHdpdGggY3VybF9tdWx0aV9hZGRfaGFuZGxlKCkgCis8cCBjbGFzcz0ibGV2ZWwwIj41LiBQcm92aWRlIHNvbWUgbWVhbnMgdG8gbWFuYWdlIHRoZSBzb2NrZXRzIGxpYmN1cmwgaXMgdXNpbmcsIHNvIHlvdSBjYW4gY2hlY2sgdGhlbSBmb3IgYWN0aXZpdHkuIFRoaXMgY2FuIGJlIGRvbmUgdGhyb3VnaCB5b3VyIGFwcGxpY2F0aW9uIGNvZGUsIG9yIGJ5IHdheSBvZiBhbiBleHRlcm5hbCBsaWJyYXJ5IHN1Y2ggYXMgbGliZXZlbnQgb3IgZ2xpYi4gCis8cCBjbGFzcz0ibGV2ZWwwIj42LiBXYWl0IGZvciBhY3Rpdml0eSBvbiBhbnkgb2YgbGliY3VybCdzIHNvY2tldHMsIHVzZSB0aGUgdGltZW91dCB2YWx1ZSB5b3VyIGNhbGxiYWNrIGhhcyBiZWVuIHRvbGQgCis8cCBjbGFzcz0ibGV2ZWwwIj43LCBXaGVuIGFjdGl2aXR5IGlzIGRldGVjdGVkLCBjYWxsIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigpIGZvciB0aGUgc29ja2V0KHMpIHRoYXQgZ290IGFjdGlvbi4gSWYgbm8gYWN0aXZpdHkgaXMgZGV0ZWN0ZWQgYW5kIHRoZSB0aW1lb3V0IGV4cGlyZXMsIGNhbGwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sIj5jdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMyk8L2E+IHdpdGggPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMX1NPQ0tFVF9USU1FT1VUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjguIEdvIGJhY2sgdG8gc3RlcCA2LiA8YSBuYW1lPSJBVkFJTEFCSUxJVFkiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkFWQUlMQUJJTElUWTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBsaWJjdXJsIDcuMTUuNCwgYW5kIGlzIGRlZW1lZCBzdGFibGUgc2luY2UgNy4xNi4wLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3NvY2tldC5odG1sIj5jdXJsX211bHRpX3NvY2tldCgzKTwvYT4gaXMgZGVwcmVjYXRlZCwgdXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3NvY2tldF9hY3Rpb24uaHRtbCI+Y3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKDMpPC9hPiBpbnN0ZWFkISA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfY2xlYW51cC5odG1sIj5jdXJsX211bHRpX2NsZWFudXAgKDMpPC9hPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX211bHRpX2luaXQuaHRtbCI+ICBjdXJsX211bHRpX2luaXQgKDMpPC9hPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+IDwvc3Bhbj4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9mZHNldC5odG1sIj5jdXJsX211bHRpX2Zkc2V0ICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9pbmZvX3JlYWQuaHRtbCI+ICBjdXJsX211bHRpX2luZm9fcmVhZCAoMyk8L2E+IDxzcGFuIENsYXNzPSJtYW5wYWdlIj4gPC9zcGFuPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+dGhlIGhpcGVyZmlmby5jIGV4YW1wbGU8L3NwYW4+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc29ja2V0LnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3NvY2tldC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkZmY3MgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3NvY2tldC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5M2U5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uLjMKQEAgLTAsMCArMSwxNDkgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbiAzICI5IEp1bCAyMDA2IiAibGliY3VybCA3LjE2LjAiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX211bHRpX3NvY2tldF9hY3Rpb24gXC0gcmVhZHMvd3JpdGVzIGF2YWlsYWJsZSBkYXRhIGdpdmVuIGFuIGFjdGlvbgorLlNIIFNZTk9QU0lTCisubmYKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworQ1VSTE1jb2RlIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbihDVVJMTSAqIG11bHRpX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsIGludCBldl9iaXRtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJ1bm5pbmdfaGFuZGxlcyk7CisuZmkKKy5TSCBERVNDUklQVElPTgorV2hlbiB0aGUgYXBwbGljYXRpb24gaGFzIGRldGVjdGVkIGFjdGlvbiBvbiBhIHNvY2tldCBoYW5kbGVkIGJ5IGxpYmN1cmwsIGl0CitzaG91bGQgY2FsbCBcZkljdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMylcZlAgd2l0aCB0aGUgXGZCc29ja2ZkXGZQIGFyZ3VtZW50CitzZXQgdG8gdGhlIHNvY2tldCB3aXRoIHRoZSBhY3Rpb24uIFdoZW4gdGhlIGV2ZW50cyBvbiBhIHNvY2tldCBhcmUga25vd24sIHRoZXkKK2NhbiBiZSBwYXNzZWQgYXMgYW4gZXZlbnRzIGJpdG1hc2sgXGZCZXZfYml0bWFza1xmUCBieSBmaXJzdCBzZXR0aW5nCitcZkJldl9iaXRtYXNrXGZQIHRvIDAsIGFuZCB0aGVuIGFkZGluZyB1c2luZyBiaXR3aXNlIE9SICh8KSBhbnkgY29tYmluYXRpb24gb2YKK2V2ZW50cyB0byBiZSBjaG9zZW4gZnJvbSBDVVJMX0NTRUxFQ1RfSU4sIENVUkxfQ1NFTEVDVF9PVVQgb3IKK0NVUkxfQ1NFTEVDVF9FUlIuIFdoZW4gdGhlIGV2ZW50cyBvbiBhIHNvY2tldCBhcmUgdW5rbm93biwgcGFzcyAwIGluc3RlYWQsIGFuZAorbGliY3VybCB3aWxsIHRlc3QgdGhlIGRlc2NyaXB0b3IgaW50ZXJuYWxseS4KKworQXQgcmV0dXJuLCB0aGUgaW50ZWdlciBcZkJydW5uaW5nX2hhbmRsZXNcZlAgcG9pbnRzIHRvIHdpbGwgY29udGFpbiB0aGUgbnVtYmVyCitvZiBydW5uaW5nIGVhc3kgaGFuZGxlcyB3aXRoaW4gdGhlIG11bHRpIGhhbmRsZS4gV2hlbiB0aGlzIG51bWJlciByZWFjaGVzCit6ZXJvLCBhbGwgdHJhbnNmZXJzIGFyZSBjb21wbGV0ZS9kb25lLiBXaGVuIHlvdSBjYWxsCitcZkljdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMylcZlAgb24gYSBzcGVjaWZpYyBzb2NrZXQgYW5kIHRoZSBjb3VudGVyCitkZWNyZWFzZXMgYnkgb25lLCBpdCBET0VTIE5PVCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgdGhpcyBleGFjdCBzb2NrZXQvdHJhbnNmZXIKK2lzIHRoZSBvbmUgdGhhdCBjb21wbGV0ZWQuIFVzZSBcZkljdXJsX211bHRpX2luZm9fcmVhZCgzKVxmUCB0byBmaWd1cmUgb3V0Cit3aGljaCBlYXN5IGhhbmRsZSB0aGF0IGNvbXBsZXRlZC4KKworVGhlIFxmQmN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigzKVxmUCBmdW5jdGlvbnMgaW5mb3JtIHRoZSBhcHBsaWNhdGlvbiBhYm91dAordXBkYXRlcyBpbiB0aGUgc29ja2V0IChmaWxlIGRlc2NyaXB0b3IpIHN0YXR1cyBieSBkb2luZyBub25lLCBvbmUsIG9yIG11bHRpcGxlCitjYWxscyB0byB0aGUgc29ja2V0IGNhbGxiYWNrIGZ1bmN0aW9uIHNldCB3aXRoIHRoZSBDVVJMTU9QVF9TT0NLRVRGVU5DVElPTgorb3B0aW9uIHRvIFxmSWN1cmxfbXVsdGlfc2V0b3B0KDMpXGZQLiBUaGV5IHVwZGF0ZSB0aGUgc3RhdHVzIHdpdGggY2hhbmdlcworc2luY2UgdGhlIHByZXZpb3VzIHRpbWUgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuCisKK0dldCB0aGUgdGltZW91dCB0aW1lIGJ5IHNldHRpbmcgdGhlIFxmSUNVUkxNT1BUX1RJTUVSRlVOQ1RJT05cZlAgb3B0aW9uIHdpdGgKK1xmSWN1cmxfbXVsdGlfc2V0b3B0KDMpXGZQLiBZb3VyIGFwcGxpY2F0aW9uIHdpbGwgdGhlbiBnZXQgY2FsbGVkIHdpdGgKK2luZm9ybWF0aW9uIG9uIGhvdyBsb25nIHRvIHdhaXQgZm9yIHNvY2tldCBhY3Rpb25zIGF0IG1vc3QgYmVmb3JlIGRvaW5nIHRoZQordGltZW91dCBhY3Rpb246IGNhbGwgdGhlIFxmQmN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigzKVxmUCBmdW5jdGlvbiB3aXRoIHRoZQorXGZCc29ja2ZkXGZQIGFyZ3VtZW50IHNldCB0byBDVVJMX1NPQ0tFVF9USU1FT1VULiBZb3UgY2FuIGFsc28gdXNlIHRoZQorXGZJY3VybF9tdWx0aV90aW1lb3V0KDMpXGZQIGZ1bmN0aW9uIHRvIHBvbGwgdGhlIHZhbHVlIGF0IGFueSBnaXZlbiB0aW1lLCBidXQKK2ZvciBhbiBldmVudC1iYXNlZCBzeXN0ZW0gdXNpbmcgdGhlIGNhbGxiYWNrIGlzIGZhciBiZXR0ZXIgdGhhbiByZWx5aW5nIG9uCitwb2xsaW5nIHRoZSB0aW1lb3V0IHZhbHVlLgorLlNIICJDQUxMQkFDSyBERVRBSUxTIgorCitUaGUgc29ja2V0IFxmQmNhbGxiYWNrXGZQIGZ1bmN0aW9uIHVzZXMgYSBwcm90b3R5cGUgbGlrZSB0aGlzCisubmYKKworICBpbnQgY3VybF9zb2NrZXRfY2FsbGJhY2soQ1VSTCAqZWFzeSwgICAgICAvKiBlYXN5IGhhbmRsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzLCAvKiBzb2NrZXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhY3Rpb24sICAgICAgLyogc2VlIHZhbHVlcyBiZWxvdyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcnAsICAgIC8qIHByaXZhdGUgY2FsbGJhY2sgcG9pbnRlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc29ja2V0cCk7IC8qIHByaXZhdGUgc29ja2V0IHBvaW50ZXIgKi8KKworLmZpCitUaGUgY2FsbGJhY2sgTVVTVCByZXR1cm4gMC4KKworVGhlIFxmSWVhc3lcZlAgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBlYXN5IGhhbmRsZSB0aGF0IGRlYWxzIHdpdGggdGhpcworcGFydGljdWxhciBzb2NrZXQuIE5vdGUgdGhhdCBhIHNpbmdsZSBoYW5kbGUgbWF5IHdvcmsgd2l0aCBzZXZlcmFsIHNvY2tldHMKK3NpbXVsdGFuZW91c2x5LgorCitUaGUgXGZJc1xmUCBhcmd1bWVudCBpcyB0aGUgYWN0dWFsIHNvY2tldCB2YWx1ZSBhcyB5b3UgdXNlIGl0IHdpdGhpbiB5b3VyCitzeXN0ZW0uCisKK1RoZSBcZklhY3Rpb25cZlAgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIGhhcyBvbmUgb2YgZml2ZSB2YWx1ZXM6CisuUlMKKy5JUCAiQ1VSTF9QT0xMX05PTkUgKDApIgorcmVnaXN0ZXIsIG5vdCBpbnRlcmVzdGVkIGluIHJlYWRpbmVzcyAoeWV0KQorLklQICJDVVJMX1BPTExfSU4gKDEpIgorcmVnaXN0ZXIsIGludGVyZXN0ZWQgaW4gcmVhZCByZWFkaW5lc3MKKy5JUCAiQ1VSTF9QT0xMX09VVCAoMikiCityZWdpc3RlciwgaW50ZXJlc3RlZCBpbiB3cml0ZSByZWFkaW5lc3MKKy5JUCAiQ1VSTF9QT0xMX0lOT1VUICgzKSIKK3JlZ2lzdGVyLCBpbnRlcmVzdGVkIGluIGJvdGggcmVhZCBhbmQgd3JpdGUgcmVhZGluZXNzCisuSVAgIkNVUkxfUE9MTF9SRU1PVkUgKDQpIgordW5yZWdpc3RlcgorLlJFCisKK1RoZSBcZklzb2NrZXRwXGZQIGFyZ3VtZW50IGlzIGEgcHJpdmF0ZSBwb2ludGVyIHlvdSBoYXZlIHByZXZpb3VzbHkgc2V0IHdpdGgKK1xmSWN1cmxfbXVsdGlfYXNzaWduKDMpXGZQIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgXGZJc1xmUCBzb2NrZXQuIElmIG5vCitwb2ludGVyIGhhcyBiZWVuIHNldCwgc29ja2V0cCB3aWxsIGJlIE5VTEwuIFRoaXMgYXJndW1lbnQgaXMgb2YgY291cnNlIGEKK3NlcnZpY2UgdG8gYXBwbGljYXRpb25zIHRoYXQgd2FudCB0byBrZWVwIGNlcnRhaW4gZGF0YSBvciBzdHJ1Y3RzIHRoYXQgYXJlCitzdHJpY3RseSBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBzb2NrZXQuCisKK1RoZSBcZkl1c2VycFxmUCBhcmd1bWVudCBpcyBhIHByaXZhdGUgcG9pbnRlciB5b3UgaGF2ZSBwcmV2aW91c2x5IHNldCB3aXRoCitcZkljdXJsX211bHRpX3NldG9wdCgzKVxmUCBhbmQgdGhlIENVUkxNT1BUX1NPQ0tFVERBVEEgb3B0aW9uLgorLlNIICJSRVRVUk4gVkFMVUUiCitDVVJMTWNvZGUgdHlwZSwgZ2VuZXJhbCBsaWJjdXJsIG11bHRpIGludGVyZmFjZSBlcnJvciBjb2RlLgorCitCZWZvcmUgdmVyc2lvbiA3LjIwLjA6IElmIHlvdSByZWNlaXZlIFxmSUNVUkxNX0NBTExfTVVMVElfUEVSRk9STVxmUCwgdGhpcworYmFzaWNhbGx5IG1lYW5zIHRoYXQgeW91IHNob3VsZCBjYWxsIFxmSWN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigzKVxmUCBhZ2FpbgorYmVmb3JlIHlvdSB3YWl0IGZvciBtb3JlIGFjdGlvbnMgb24gbGliY3VybCdzIHNvY2tldHMuIFlvdSBkb24ndCBoYXZlIHRvIGRvIGl0CitpbW1lZGlhdGVseSwgYnV0IHRoZSByZXR1cm4gY29kZSBtZWFucyB0aGF0IGxpYmN1cmwgbWF5IGhhdmUgbW9yZSBkYXRhCithdmFpbGFibGUgdG8gcmV0dXJuIG9yIHRoYXQgdGhlcmUgbWF5IGJlIG1vcmUgZGF0YSB0byBzZW5kIG9mZiBiZWZvcmUgaXQgaXMKKyJzYXRpc2ZpZWQiLgorCitUaGUgcmV0dXJuIGNvZGUgZnJvbSB0aGlzIGZ1bmN0aW9uIGlzIGZvciB0aGUgd2hvbGUgbXVsdGkgc3RhY2suICBQcm9ibGVtcworc3RpbGwgbWlnaHQgaGF2ZSBvY2N1cnJlZCBvbiBpbmRpdmlkdWFsIHRyYW5zZmVycyBldmVuIHdoZW4gb25lIG9mIHRoZXNlCitmdW5jdGlvbnMgcmV0dXJuIE9LLgorLlNIICJUWVBJQ0FMIFVTQUdFIgorMS4gQ3JlYXRlIGEgbXVsdGkgaGFuZGxlCisKKzIuIFNldCB0aGUgc29ja2V0IGNhbGxiYWNrIHdpdGggQ1VSTE1PUFRfU09DS0VURlVOQ1RJT04KKworMy4gU2V0IHRoZSB0aW1lb3V0IGNhbGxiYWNrIHdpdGggQ1VSTE1PUFRfVElNRVJGVU5DVElPTiwgdG8gZ2V0IHRvIGtub3cgd2hhdAordGltZW91dCB2YWx1ZSB0byB1c2Ugd2hlbiB3YWl0aW5nIGZvciBzb2NrZXQgYWN0aXZpdGllcy4KKworNC4gQWRkIGVhc3kgaGFuZGxlcyB3aXRoIGN1cmxfbXVsdGlfYWRkX2hhbmRsZSgpCisKKzUuIFByb3ZpZGUgc29tZSBtZWFucyB0byBtYW5hZ2UgdGhlIHNvY2tldHMgbGliY3VybCBpcyB1c2luZywgc28geW91IGNhbiBjaGVjawordGhlbSBmb3IgYWN0aXZpdHkuIFRoaXMgY2FuIGJlIGRvbmUgdGhyb3VnaCB5b3VyIGFwcGxpY2F0aW9uIGNvZGUsIG9yIGJ5IHdheQorb2YgYW4gZXh0ZXJuYWwgbGlicmFyeSBzdWNoIGFzIGxpYmV2ZW50IG9yIGdsaWIuCisKKzYuIENhbGwgY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKCkgdG8ga2lja3N0YXJ0IGV2ZXJ5dGhpbmcuIFRvIGdldCBvbmUgb3IgbW9yZQorY2FsbGJhY2tzIGNhbGxlZC4KKworNy4gV2FpdCBmb3IgYWN0aXZpdHkgb24gYW55IG9mIGxpYmN1cmwncyBzb2NrZXRzLCB1c2UgdGhlIHRpbWVvdXQgdmFsdWUgeW91cgorY2FsbGJhY2sgaGFzIGJlZW4gdG9sZAorCis4LCBXaGVuIGFjdGl2aXR5IGlzIGRldGVjdGVkLCBjYWxsIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigpIGZvciB0aGUKK3NvY2tldChzKSB0aGF0IGdvdCBhY3Rpb24uIElmIG5vIGFjdGl2aXR5IGlzIGRldGVjdGVkIGFuZCB0aGUgdGltZW91dCBleHBpcmVzLAorY2FsbCBcZkljdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMylcZlAgd2l0aCBcZklDVVJMX1NPQ0tFVF9USU1FT1VUXGZQCisuU0ggQVZBSUxBQklMSVRZCitUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBsaWJjdXJsIDcuMTUuNCwgYW5kIGlzIGRlZW1lZCBzdGFibGUgc2luY2UgNy4xNi4wLgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX211bHRpX2NsZWFudXAgIigzKSwgIiBjdXJsX211bHRpX2luaXQgIigzKSwgIgorLkJSIGN1cmxfbXVsdGlfZmRzZXQgIigzKSwgIiBjdXJsX211bHRpX2luZm9fcmVhZCAiKDMpLCAiCisuQlIgInRoZSBoaXBlcmZpZm8uYyBleGFtcGxlIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDQ5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uLmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbiBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX211bHRpX3NvY2tldF9hY3Rpb24gLSByZWFkcy93cml0ZXMgYXZhaWxhYmxlIGRhdGEgZ2l2ZW4gYW4gYWN0aW9uIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDsgCis8cCBjbGFzcz0ibGV2ZWwwIj5DVVJMTWNvZGUgY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKENVUkxNICogbXVsdGlfaGFuZGxlLCAmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsIGludCBldl9iaXRtYXNrLCAmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpydW5uaW5nX2hhbmRsZXMpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5XaGVuIHRoZSBhcHBsaWNhdGlvbiBoYXMgZGV0ZWN0ZWQgYWN0aW9uIG9uIGEgc29ja2V0IGhhbmRsZWQgYnkgbGliY3VybCwgaXQgc2hvdWxkIGNhbGwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sIj5jdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMyk8L2E+IHdpdGggdGhlIDxzcGFuIENsYXNzPSJib2xkIj5zb2NrZmQ8L3NwYW4+IGFyZ3VtZW50IHNldCB0byB0aGUgc29ja2V0IHdpdGggdGhlIGFjdGlvbi4gV2hlbiB0aGUgZXZlbnRzIG9uIGEgc29ja2V0IGFyZSBrbm93biwgdGhleSBjYW4gYmUgcGFzc2VkIGFzIGFuIGV2ZW50cyBiaXRtYXNrIDxzcGFuIENsYXNzPSJib2xkIj5ldl9iaXRtYXNrPC9zcGFuPiBieSBmaXJzdCBzZXR0aW5nIDxzcGFuIENsYXNzPSJib2xkIj5ldl9iaXRtYXNrPC9zcGFuPiB0byAwLCBhbmQgdGhlbiBhZGRpbmcgdXNpbmcgYml0d2lzZSBPUiAofCkgYW55IGNvbWJpbmF0aW9uIG9mIGV2ZW50cyB0byBiZSBjaG9zZW4gZnJvbSBDVVJMX0NTRUxFQ1RfSU4sIENVUkxfQ1NFTEVDVF9PVVQgb3IgQ1VSTF9DU0VMRUNUX0VSUi4gV2hlbiB0aGUgZXZlbnRzIG9uIGEgc29ja2V0IGFyZSB1bmtub3duLCBwYXNzIDAgaW5zdGVhZCwgYW5kIGxpYmN1cmwgd2lsbCB0ZXN0IHRoZSBkZXNjcmlwdG9yIGludGVybmFsbHkuIAorPHAgY2xhc3M9ImxldmVsMCI+QXQgcmV0dXJuLCB0aGUgaW50ZWdlciA8c3BhbiBDbGFzcz0iYm9sZCI+cnVubmluZ19oYW5kbGVzPC9zcGFuPiBwb2ludHMgdG8gd2lsbCBjb250YWluIHRoZSBudW1iZXIgb2YgcnVubmluZyBlYXN5IGhhbmRsZXMgd2l0aGluIHRoZSBtdWx0aSBoYW5kbGUuIFdoZW4gdGhpcyBudW1iZXIgcmVhY2hlcyB6ZXJvLCBhbGwgdHJhbnNmZXJzIGFyZSBjb21wbGV0ZS9kb25lLiBXaGVuIHlvdSBjYWxsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3NvY2tldF9hY3Rpb24uaHRtbCI+Y3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKDMpPC9hPiBvbiBhIHNwZWNpZmljIHNvY2tldCBhbmQgdGhlIGNvdW50ZXIgZGVjcmVhc2VzIGJ5IG9uZSwgaXQgRE9FUyBOT1QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHRoaXMgZXhhY3Qgc29ja2V0L3RyYW5zZmVyIGlzIHRoZSBvbmUgdGhhdCBjb21wbGV0ZWQuIFVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9pbmZvX3JlYWQuaHRtbCI+Y3VybF9tdWx0aV9pbmZvX3JlYWQoMyk8L2E+IHRvIGZpZ3VyZSBvdXQgd2hpY2ggZWFzeSBoYW5kbGUgdGhhdCBjb21wbGV0ZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIDxhIGNsYXNzPSJib2xkIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sIj5jdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMyk8L2E+IGZ1bmN0aW9ucyBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIGFib3V0IHVwZGF0ZXMgaW4gdGhlIHNvY2tldCAoZmlsZSBkZXNjcmlwdG9yKSBzdGF0dXMgYnkgZG9pbmcgbm9uZSwgb25lLCBvciBtdWx0aXBsZSBjYWxscyB0byB0aGUgc29ja2V0IGNhbGxiYWNrIGZ1bmN0aW9uIHNldCB3aXRoIHRoZSBDVVJMTU9QVF9TT0NLRVRGVU5DVElPTiBvcHRpb24gdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc2V0b3B0Lmh0bWwiPmN1cmxfbXVsdGlfc2V0b3B0KDMpPC9hPi4gVGhleSB1cGRhdGUgdGhlIHN0YXR1cyB3aXRoIGNoYW5nZXMgc2luY2UgdGhlIHByZXZpb3VzIHRpbWUgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+R2V0IHRoZSB0aW1lb3V0IHRpbWUgYnkgc2V0dGluZyB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMTU9QVF9USU1FUkZVTkNUSU9OPC9zcGFuPiBvcHRpb24gd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9zZXRvcHQuaHRtbCI+Y3VybF9tdWx0aV9zZXRvcHQoMyk8L2E+LiBZb3VyIGFwcGxpY2F0aW9uIHdpbGwgdGhlbiBnZXQgY2FsbGVkIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGxvbmcgdG8gd2FpdCBmb3Igc29ja2V0IGFjdGlvbnMgYXQgbW9zdCBiZWZvcmUgZG9pbmcgdGhlIHRpbWVvdXQgYWN0aW9uOiBjYWxsIHRoZSA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iLi9jdXJsX211bHRpX3NvY2tldF9hY3Rpb24uaHRtbCI+Y3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKDMpPC9hPiBmdW5jdGlvbiB3aXRoIHRoZSA8c3BhbiBDbGFzcz0iYm9sZCI+c29ja2ZkPC9zcGFuPiBhcmd1bWVudCBzZXQgdG8gQ1VSTF9TT0NLRVRfVElNRU9VVC4gWW91IGNhbiBhbHNvIHVzZSB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfdGltZW91dC5odG1sIj5jdXJsX211bHRpX3RpbWVvdXQoMyk8L2E+IGZ1bmN0aW9uIHRvIHBvbGwgdGhlIHZhbHVlIGF0IGFueSBnaXZlbiB0aW1lLCBidXQgZm9yIGFuIGV2ZW50LWJhc2VkIHN5c3RlbSB1c2luZyB0aGUgY2FsbGJhY2sgaXMgZmFyIGJldHRlciB0aGFuIHJlbHlpbmcgb24gcG9sbGluZyB0aGUgdGltZW91dCB2YWx1ZS4gPGEgbmFtZT0iQ0FMTEJBQ0siPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkNBTExCQUNLIERFVEFJTFM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgc29ja2V0IDxzcGFuIENsYXNzPSJib2xkIj5jYWxsYmFjazwvc3Bhbj4gZnVuY3Rpb24gdXNlcyBhIHByb3RvdHlwZSBsaWtlIHRoaXMgCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOyBpbnQgY3VybF9zb2NrZXRfY2FsbGJhY2soQ1VSTCAqZWFzeSwgICAgICAvKiBlYXN5IGhhbmRsZSAqLyAmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgcywgLyogc29ja2V0ICovICZuYnNwOyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFjdGlvbiwgICAgICAvKiBzZWUgdmFsdWVzIGJlbG93ICovICZuYnNwOyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcnAsICAgIC8qIHByaXZhdGUgY2FsbGJhY2sgcG9pbnRlciAqLyAmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNvY2tldHApOyAvKiBwcml2YXRlIHNvY2tldCBwb2ludGVyICovIAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgY2FsbGJhY2sgTVVTVCByZXR1cm4gMC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5lYXN5PC9zcGFuPiBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlIGVhc3kgaGFuZGxlIHRoYXQgZGVhbHMgd2l0aCB0aGlzIHBhcnRpY3VsYXIgc29ja2V0LiBOb3RlIHRoYXQgYSBzaW5nbGUgaGFuZGxlIG1heSB3b3JrIHdpdGggc2V2ZXJhbCBzb2NrZXRzIHNpbXVsdGFuZW91c2x5LiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnM8L3NwYW4+IGFyZ3VtZW50IGlzIHRoZSBhY3R1YWwgc29ja2V0IHZhbHVlIGFzIHlvdSB1c2UgaXQgd2l0aGluIHlvdXIgc3lzdGVtLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmFjdGlvbjwvc3Bhbj4gYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIGhhcyBvbmUgb2YgZml2ZSB2YWx1ZXM6IAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMUE9MTE5PTkUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9QT0xMX05PTkUgKDApPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPnJlZ2lzdGVyLCBub3QgaW50ZXJlc3RlZCBpbiByZWFkaW5lc3MgKHlldCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMUE9MTElOIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfUE9MTF9JTiAoMSk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+cmVnaXN0ZXIsIGludGVyZXN0ZWQgaW4gcmVhZCByZWFkaW5lc3MgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMUE9MTE9VVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1BPTExfT1VUICgyKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5yZWdpc3RlciwgaW50ZXJlc3RlZCBpbiB3cml0ZSByZWFkaW5lc3MgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMUE9MTElOT1VUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfUE9MTF9JTk9VVCAoMyk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+cmVnaXN0ZXIsIGludGVyZXN0ZWQgaW4gYm90aCByZWFkIGFuZCB3cml0ZSByZWFkaW5lc3MgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMUE9MTFJFTU9WRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1BPTExfUkVNT1ZFICg0KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj51bnJlZ2lzdGVyIAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5zb2NrZXRwPC9zcGFuPiBhcmd1bWVudCBpcyBhIHByaXZhdGUgcG9pbnRlciB5b3UgaGF2ZSBwcmV2aW91c2x5IHNldCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX2Fzc2lnbi5odG1sIj5jdXJsX211bHRpX2Fzc2lnbigzKTwvYT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnM8L3NwYW4+IHNvY2tldC4gSWYgbm8gcG9pbnRlciBoYXMgYmVlbiBzZXQsIHNvY2tldHAgd2lsbCBiZSBOVUxMLiBUaGlzIGFyZ3VtZW50IGlzIG9mIGNvdXJzZSBhIHNlcnZpY2UgdG8gYXBwbGljYXRpb25zIHRoYXQgd2FudCB0byBrZWVwIGNlcnRhaW4gZGF0YSBvciBzdHJ1Y3RzIHRoYXQgYXJlIHN0cmljdGx5IGFzc29jaWF0ZWQgdG8gdGhlIGdpdmVuIHNvY2tldC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj51c2VycDwvc3Bhbj4gYXJndW1lbnQgaXMgYSBwcml2YXRlIHBvaW50ZXIgeW91IGhhdmUgcHJldmlvdXNseSBzZXQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9zZXRvcHQuaHRtbCI+Y3VybF9tdWx0aV9zZXRvcHQoMyk8L2E+IGFuZCB0aGUgQ1VSTE1PUFRfU09DS0VUREFUQSBvcHRpb24uIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPkNVUkxNY29kZSB0eXBlLCBnZW5lcmFsIGxpYmN1cmwgbXVsdGkgaW50ZXJmYWNlIGVycm9yIGNvZGUuIAorPHAgY2xhc3M9ImxldmVsMCI+QmVmb3JlIHZlcnNpb24gNy4yMC4wOiBJZiB5b3UgcmVjZWl2ZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxNX0NBTExfTVVMVElfUEVSRk9STTwvc3Bhbj4sIHRoaXMgYmFzaWNhbGx5IG1lYW5zIHRoYXQgeW91IHNob3VsZCBjYWxsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3NvY2tldF9hY3Rpb24uaHRtbCI+Y3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKDMpPC9hPiBhZ2FpbiBiZWZvcmUgeW91IHdhaXQgZm9yIG1vcmUgYWN0aW9ucyBvbiBsaWJjdXJsJ3Mgc29ja2V0cy4gWW91IGRvbid0IGhhdmUgdG8gZG8gaXQgaW1tZWRpYXRlbHksIGJ1dCB0aGUgcmV0dXJuIGNvZGUgbWVhbnMgdGhhdCBsaWJjdXJsIG1heSBoYXZlIG1vcmUgZGF0YSBhdmFpbGFibGUgdG8gcmV0dXJuIG9yIHRoYXQgdGhlcmUgbWF5IGJlIG1vcmUgZGF0YSB0byBzZW5kIG9mZiBiZWZvcmUgaXQgaXMgInNhdGlzZmllZCIuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIHJldHVybiBjb2RlIGZyb20gdGhpcyBmdW5jdGlvbiBpcyBmb3IgdGhlIHdob2xlIG11bHRpIHN0YWNrLiAgUHJvYmxlbXMgc3RpbGwgbWlnaHQgaGF2ZSBvY2N1cnJlZCBvbiBpbmRpdmlkdWFsIHRyYW5zZmVycyBldmVuIHdoZW4gb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gT0suIDxhIG5hbWU9IlRZUElDQUwiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlRZUElDQUwgVVNBR0U8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+MS4gQ3JlYXRlIGEgbXVsdGkgaGFuZGxlIAorPHAgY2xhc3M9ImxldmVsMCI+Mi4gU2V0IHRoZSBzb2NrZXQgY2FsbGJhY2sgd2l0aCBDVVJMTU9QVF9TT0NLRVRGVU5DVElPTiAKKzxwIGNsYXNzPSJsZXZlbDAiPjMuIFNldCB0aGUgdGltZW91dCBjYWxsYmFjayB3aXRoIENVUkxNT1BUX1RJTUVSRlVOQ1RJT04sIHRvIGdldCB0byBrbm93IHdoYXQgdGltZW91dCB2YWx1ZSB0byB1c2Ugd2hlbiB3YWl0aW5nIGZvciBzb2NrZXQgYWN0aXZpdGllcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj40LiBBZGQgZWFzeSBoYW5kbGVzIHdpdGggY3VybF9tdWx0aV9hZGRfaGFuZGxlKCkgCis8cCBjbGFzcz0ibGV2ZWwwIj41LiBQcm92aWRlIHNvbWUgbWVhbnMgdG8gbWFuYWdlIHRoZSBzb2NrZXRzIGxpYmN1cmwgaXMgdXNpbmcsIHNvIHlvdSBjYW4gY2hlY2sgdGhlbSBmb3IgYWN0aXZpdHkuIFRoaXMgY2FuIGJlIGRvbmUgdGhyb3VnaCB5b3VyIGFwcGxpY2F0aW9uIGNvZGUsIG9yIGJ5IHdheSBvZiBhbiBleHRlcm5hbCBsaWJyYXJ5IHN1Y2ggYXMgbGliZXZlbnQgb3IgZ2xpYi4gCis8cCBjbGFzcz0ibGV2ZWwwIj42LiBDYWxsIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigpIHRvIGtpY2tzdGFydCBldmVyeXRoaW5nLiBUbyBnZXQgb25lIG9yIG1vcmUgY2FsbGJhY2tzIGNhbGxlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj43LiBXYWl0IGZvciBhY3Rpdml0eSBvbiBhbnkgb2YgbGliY3VybCdzIHNvY2tldHMsIHVzZSB0aGUgdGltZW91dCB2YWx1ZSB5b3VyIGNhbGxiYWNrIGhhcyBiZWVuIHRvbGQgCis8cCBjbGFzcz0ibGV2ZWwwIj44LCBXaGVuIGFjdGl2aXR5IGlzIGRldGVjdGVkLCBjYWxsIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigpIGZvciB0aGUgc29ja2V0KHMpIHRoYXQgZ290IGFjdGlvbi4gSWYgbm8gYWN0aXZpdHkgaXMgZGV0ZWN0ZWQgYW5kIHRoZSB0aW1lb3V0IGV4cGlyZXMsIGNhbGwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sIj5jdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMyk8L2E+IHdpdGggPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMX1NPQ0tFVF9USU1FT1VUPC9zcGFuPiA8YSBuYW1lPSJBVkFJTEFCSUxJVFkiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkFWQUlMQUJJTElUWTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBsaWJjdXJsIDcuMTUuNCwgYW5kIGlzIGRlZW1lZCBzdGFibGUgc2luY2UgNy4xNi4wLiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfY2xlYW51cC5odG1sIj5jdXJsX211bHRpX2NsZWFudXAgKDMpPC9hPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX211bHRpX2luaXQuaHRtbCI+ICBjdXJsX211bHRpX2luaXQgKDMpPC9hPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+IDwvc3Bhbj4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9mZHNldC5odG1sIj5jdXJsX211bHRpX2Zkc2V0ICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9pbmZvX3JlYWQuaHRtbCI+ICBjdXJsX211bHRpX2luZm9fcmVhZCAoMyk8L2E+IDxzcGFuIENsYXNzPSJtYW5wYWdlIj4gPC9zcGFuPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+dGhlIGhpcGVyZmlmby5jIGV4YW1wbGU8L3NwYW4+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzgyN2I4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfc3RyZXJyb3IuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3N0cmVycm9yLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkMDk3NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3N0cmVycm9yLjMKQEAgLTAsMCArMSwzNyBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF9tdWx0aV9zdHJlcnJvciAzICIyNiBBcHIgMjAwNCIgImxpYmN1cmwgNy4xMiIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfbXVsdGlfc3RyZXJyb3IgLSByZXR1cm4gc3RyaW5nIGRlc2NyaWJpbmcgZXJyb3IgY29kZQorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKy5CSSAiY29uc3QgY2hhciAqY3VybF9tdWx0aV9zdHJlcnJvcihDVVJMTWNvZGUgIiBlcnJvcm51bSAiKTsiCisuU0ggREVTQ1JJUFRJT04KK1RoZSBjdXJsX211bHRpX3N0cmVycm9yKCkgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBDVVJMTWNvZGUKK2Vycm9yIGNvZGUgcGFzc2VkIGluIHRoZSBhcmd1bWVudCBcZkllcnJvcm51bVxmUC4KKy5TSCBBVkFJTEFCSUxJVFkKK1RoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIGluIGxpYmN1cmwgNy4xMi4wCisuU0ggUkVUVVJOIFZBTFVFCitBIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLgorLlNIICJTRUUgQUxTTyIKKy5CUiBsaWJjdXJsLWVycm9ycyAiKDMpLCAiIGN1cmxfZWFzeV9zdHJlcnJvciAiKDMpLCAiIGN1cmxfc2hhcmVfc3RyZXJyb3IgIigzKSIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3N0cmVycm9yLmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9zdHJlcnJvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGRkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9zdHJlcnJvci5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX211bHRpX3N0cmVycm9yIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfbXVsdGlfc3RyZXJyb3IgLSByZXR1cm4gc3RyaW5nIGRlc2NyaWJpbmcgZXJyb3IgY29kZSA8YSBuYW1lPSJTWU5PUFNJUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1lOT1BTSVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gPHNwYW4gQ2xhc3M9ImJvbGQiPmNvbnN0IGNoYXIgKmN1cmxfbXVsdGlfc3RyZXJyb3IoQ1VSTE1jb2RlICBlcnJvcm51bSApOzwvc3Bhbj4gPGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBjdXJsX211bHRpX3N0cmVycm9yKCkgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBDVVJMTWNvZGUgZXJyb3IgY29kZSBwYXNzZWQgaW4gdGhlIGFyZ3VtZW50IDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+ZXJyb3JudW08L3NwYW4+LiA8YSBuYW1lPSJBVkFJTEFCSUxJVFkiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkFWQUlMQUJJTElUWTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBsaWJjdXJsIDcuMTIuMCA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5BIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJtYW5wYWdlIj5saWJjdXJsLWVycm9ycyAoMyk8L3NwYW4+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfZWFzeV9zdHJlcnJvci5odG1sIj4gIGN1cmxfZWFzeV9zdHJlcnJvciAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfc2hhcmVfc3RyZXJyb3IuaHRtbCI+ICBjdXJsX3NoYXJlX3N0cmVycm9yICgzKTwvYT4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9zdHJlcnJvci5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV9zdHJlcnJvci5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI0NmZmOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3N0cmVycm9yLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV90aW1lb3V0LjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV90aW1lb3V0LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkODAwOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3RpbWVvdXQuMwpAQCAtMCwwICsxLDYzIEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX211bHRpX3RpbWVvdXQgMyAiMiBKYW4gMjAwNiIgImxpYmN1cmwgNy4xNi4wIiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9tdWx0aV90aW1lb3V0IFwtIGhvdyBsb25nIHRvIHdhaXQgZm9yIGFjdGlvbiBiZWZvcmUgcHJvY2VlZGluZworLlNIIFNZTk9QU0lTCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK0NVUkxNY29kZSBjdXJsX211bHRpX3RpbWVvdXQoQ1VSTE0gKm11bHRpX2hhbmRsZSwgbG9uZyAqdGltZW91dCk7CisuU0ggREVTQ1JJUFRJT04KKworQW4gYXBwbGljYXRpb24gdXNpbmcgdGhlIGxpYmN1cmwgbXVsdGkgaW50ZXJmYWNlIHNob3VsZCBjYWxsCitcZkJjdXJsX211bHRpX3RpbWVvdXQoMylcZlAgdG8gZmlndXJlIG91dCBob3cgbG9uZyBpdCBzaG91bGQgd2FpdCBmb3Igc29ja2V0CithY3Rpb25zIFwtIGF0IG1vc3QgXC0gYmVmb3JlIHByb2NlZWRpbmcuCisKK1Byb2NlZWRpbmcgbWVhbnMgZWl0aGVyIGRvaW5nIHRoZSBzb2NrZXQtc3R5bGUgdGltZW91dCBhY3Rpb246IGNhbGwgdGhlCitcZkJjdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMylcZlAgZnVuY3Rpb24gd2l0aCB0aGUgXGZCc29ja2ZkXGZQIGFyZ3VtZW50IHNldAordG8gQ1VSTF9TT0NLRVRfVElNRU9VVCwgb3IgY2FsbCBcZkJjdXJsX211bHRpX3BlcmZvcm0oMylcZlAgaWYgeW91J3JlIHVzaW5nCit0aGUgc2ltcGxlciBhbmQgb2xkZXIgbXVsdGkgaW50ZXJmYWNlIGFwcHJvYWNoLgorCitUaGUgdGltZW91dCB2YWx1ZSByZXR1cm5lZCBpbiB0aGUgbG9uZyBcZkJ0aW1lb3V0XGZQIHBvaW50cyB0bywgaXMgaW4gbnVtYmVyCitvZiBtaWxsaXNlY29uZHMgYXQgdGhpcyB2ZXJ5IG1vbWVudC4gSWYgMCwgaXQgbWVhbnMgeW91IHNob3VsZCBwcm9jZWVkCitpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcgZm9yIGFueXRoaW5nLiBJZiBpdCByZXR1cm5zIC0xLCB0aGVyZSdzIG5vIHRpbWVvdXQKK2F0IGFsbCBzZXQuCisKK0FuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgbXVsdGlfc29ja2V0IEFQSSBTSE9VTEQgbm90IHVzZSB0aGlzIGZ1bmN0aW9uLCBidXQKK1NIT1VMRCBpbnN0ZWFkIHVzZSBcZkljdXJsX211bHRpX3NldG9wdCgzKVxmUCBhbmQgaXRzCitcZlBDVVJMTU9QVF9USU1FUkZVTkNUSU9OXGZQIG9wdGlvbiBmb3IgcHJvcGVyIGFuZCBkZXNpcmVkIGJlaGF2aW9yLgorCitOb3RlOiBpZiBsaWJjdXJsIHJldHVybnMgYSAtMSB0aW1lb3V0IGhlcmUsIGl0IGp1c3QgbWVhbnMgdGhhdCBsaWJjdXJsCitjdXJyZW50bHkgaGFzIG5vIHN0b3JlZCB0aW1lb3V0IHZhbHVlLiBZb3UgbXVzdCBub3Qgd2FpdCB0b28gbG9uZyAobW9yZSB0aGFuIGEKK2ZldyBzZWNvbmRzIHBlcmhhcHMpIGJlZm9yZSB5b3UgY2FsbCBjdXJsX211bHRpX3BlcmZvcm0oKSBhZ2Fpbi4KKy5TSCAiUkVUVVJOIFZBTFVFIgorVGhlIHN0YW5kYXJkIENVUkxNY29kZSBmb3IgbXVsdGkgaW50ZXJmYWNlIGVycm9yIGNvZGVzLgorLlNIICJUWVBJQ0FMIFVTQUdFIgorQ2FsbCBcZkJjdXJsX211bHRpX3RpbWVvdXQoMylcZlAsIHRoZW4gd2FpdCBmb3IgYWN0aW9uIG9uIHRoZSBzb2NrZXRzLiBZb3UKK2ZpZ3VyZSBvdXQgd2hpY2ggc29ja2V0cyB0byB3YWl0IGZvciBieSBjYWxsaW5nIFxmQmN1cmxfbXVsdGlfZmRzZXQoMylcZlAgb3IKK2J5IGEgcHJldmlvdXMgY2FsbCB0byBcZkJjdXJsX211bHRpX3NvY2tldCgzKVxmUC4KKy5TSCBBVkFJTEFCSUxJVFkKK1RoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIGluIGxpYmN1cmwgNy4xNS40LgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX211bHRpX2Zkc2V0ICIoMyksICIgY3VybF9tdWx0aV9pbmZvX3JlYWQgIigzKSwgIgorLkJSIGN1cmxfbXVsdGlfc29ja2V0ICIoMyksICIgY3VybF9tdWx0aV9zZXRvcHQgIigzKSAiCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3RpbWVvdXQuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3RpbWVvdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjdjZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfbXVsdGlfdGltZW91dC5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX211bHRpX3RpbWVvdXQgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9tdWx0aV90aW1lb3V0IC0gaG93IGxvbmcgdG8gd2FpdCBmb3IgYWN0aW9uIGJlZm9yZSBwcm9jZWVkaW5nIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4jaW5jbHVkZSAmbHQ7Y3VybC9jdXJsLmgmZ3Q7IAorPHAgY2xhc3M9ImxldmVsMCI+Q1VSTE1jb2RlIGN1cmxfbXVsdGlfdGltZW91dChDVVJMTSAqbXVsdGlfaGFuZGxlLCBsb25nICp0aW1lb3V0KTsgPGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+QW4gYXBwbGljYXRpb24gdXNpbmcgdGhlIGxpYmN1cmwgbXVsdGkgaW50ZXJmYWNlIHNob3VsZCBjYWxsIDxhIGNsYXNzPSJib2xkIiBocmVmPSIuL2N1cmxfbXVsdGlfdGltZW91dC5odG1sIj5jdXJsX211bHRpX3RpbWVvdXQoMyk8L2E+IHRvIGZpZ3VyZSBvdXQgaG93IGxvbmcgaXQgc2hvdWxkIHdhaXQgZm9yIHNvY2tldCBhY3Rpb25zIC0gYXQgbW9zdCAtIGJlZm9yZSBwcm9jZWVkaW5nLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlByb2NlZWRpbmcgbWVhbnMgZWl0aGVyIGRvaW5nIHRoZSBzb2NrZXQtc3R5bGUgdGltZW91dCBhY3Rpb246IGNhbGwgdGhlIDxhIGNsYXNzPSJib2xkIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sIj5jdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMyk8L2E+IGZ1bmN0aW9uIHdpdGggdGhlIDxzcGFuIENsYXNzPSJib2xkIj5zb2NrZmQ8L3NwYW4+IGFyZ3VtZW50IHNldCB0byBDVVJMX1NPQ0tFVF9USU1FT1VULCBvciBjYWxsIDxhIGNsYXNzPSJib2xkIiBocmVmPSIuL2N1cmxfbXVsdGlfcGVyZm9ybS5odG1sIj5jdXJsX211bHRpX3BlcmZvcm0oMyk8L2E+IGlmIHlvdSdyZSB1c2luZyB0aGUgc2ltcGxlciBhbmQgb2xkZXIgbXVsdGkgaW50ZXJmYWNlIGFwcHJvYWNoLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSB0aW1lb3V0IHZhbHVlIHJldHVybmVkIGluIHRoZSBsb25nIDxzcGFuIENsYXNzPSJib2xkIj50aW1lb3V0PC9zcGFuPiBwb2ludHMgdG8sIGlzIGluIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYXQgdGhpcyB2ZXJ5IG1vbWVudC4gSWYgMCwgaXQgbWVhbnMgeW91IHNob3VsZCBwcm9jZWVkIGltbWVkaWF0ZWx5IHdpdGhvdXQgd2FpdGluZyBmb3IgYW55dGhpbmcuIElmIGl0IHJldHVybnMgLTEsIHRoZXJlJ3Mgbm8gdGltZW91dCBhdCBhbGwgc2V0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPkFuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgbXVsdGlfc29ja2V0IEFQSSBTSE9VTEQgbm90IHVzZSB0aGlzIGZ1bmN0aW9uLCBidXQgU0hPVUxEIGluc3RlYWQgdXNlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3NldG9wdC5odG1sIj5jdXJsX211bHRpX3NldG9wdCgzKTwvYT4gYW5kIGl0cyA8L3NwYW4+Q1VSTE1PUFRfVElNRVJGVU5DVElPTjwvc3Bhbj4gb3B0aW9uIGZvciBwcm9wZXIgYW5kIGRlc2lyZWQgYmVoYXZpb3IuIAorPHAgY2xhc3M9ImxldmVsMCI+Tm90ZTogaWYgbGliY3VybCByZXR1cm5zIGEgLTEgdGltZW91dCBoZXJlLCBpdCBqdXN0IG1lYW5zIHRoYXQgbGliY3VybCBjdXJyZW50bHkgaGFzIG5vIHN0b3JlZCB0aW1lb3V0IHZhbHVlLiBZb3UgbXVzdCBub3Qgd2FpdCB0b28gbG9uZyAobW9yZSB0aGFuIGEgZmV3IHNlY29uZHMgcGVyaGFwcykgYmVmb3JlIHlvdSBjYWxsIGN1cmxfbXVsdGlfcGVyZm9ybSgpIGFnYWluLiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgc3RhbmRhcmQgQ1VSTE1jb2RlIGZvciBtdWx0aSBpbnRlcmZhY2UgZXJyb3IgY29kZXMuIDxhIG5hbWU9IlRZUElDQUwiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlRZUElDQUwgVVNBR0U8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Q2FsbCA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iLi9jdXJsX211bHRpX3RpbWVvdXQuaHRtbCI+Y3VybF9tdWx0aV90aW1lb3V0KDMpPC9hPiwgdGhlbiB3YWl0IGZvciBhY3Rpb24gb24gdGhlIHNvY2tldHMuIFlvdSBmaWd1cmUgb3V0IHdoaWNoIHNvY2tldHMgdG8gd2FpdCBmb3IgYnkgY2FsbGluZyA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iLi9jdXJsX211bHRpX2Zkc2V0Lmh0bWwiPmN1cmxfbXVsdGlfZmRzZXQoMyk8L2E+IG9yIGJ5IGEgcHJldmlvdXMgY2FsbCB0byA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iLi9jdXJsX211bHRpX3NvY2tldC5odG1sIj5jdXJsX211bHRpX3NvY2tldCgzKTwvYT4uIDxhIG5hbWU9IkFWQUlMQUJJTElUWSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+QVZBSUxBQklMSVRZPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIGluIGxpYmN1cmwgNy4xNS40LiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfZmRzZXQuaHRtbCI+Y3VybF9tdWx0aV9mZHNldCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfaW5mb19yZWFkLmh0bWwiPiAgY3VybF9tdWx0aV9pbmZvX3JlYWQgKDMpPC9hPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+IDwvc3Bhbj4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9tdWx0aV9zb2NrZXQuaHRtbCI+Y3VybF9tdWx0aV9zb2NrZXQgKDMpPC9hPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX211bHRpX3NldG9wdC5odG1sIj4gIGN1cmxfbXVsdGlfc2V0b3B0ICgzKSA8L2E+IAorPHAgY2xhc3M9ImxldmVsMCI+PHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV90aW1lb3V0LnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX211bHRpX3RpbWVvdXQucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzN2U4YzEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9tdWx0aV90aW1lb3V0LnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zaGFyZV9jbGVhbnVwLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zaGFyZV9jbGVhbnVwLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmMTcwNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX2NsZWFudXAuMwpAQCAtMCwwICsxLDQwIEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX3NoYXJlX2NsZWFudXAgMyAiOCBBdWcgMjAwMyIgImxpYmN1cmwgNy4xMC43IiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9zaGFyZV9jbGVhbnVwIC0gQ2xlYW4gdXAgYSBzaGFyZWQgb2JqZWN0CisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKy5zcAorLkJJICJDVVJMU0hjb2RlIGN1cmxfc2hhcmVfY2xlYW51cChDVVJMU0ggKiIgc2hhcmVfaGFuZGxlICIpOyIKKy5hZAorLlNIIERFU0NSSVBUSU9OCitUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYSBzaGFyZWQgb2JqZWN0LiBUaGUgc2hhcmUgaGFuZGxlIGNhbm5vdCBiZSB1c2VkIGFueW1vcmUKK3doZW4gdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQuCisKKy5TSCBSRVRVUk4gVkFMVUUKK0NVUkxTSEVfT0sgKHplcm8pIG1lYW5zIHRoYXQgdGhlIG9wdGlvbiB3YXMgc2V0IHByb3Blcmx5LCBub24temVybyBtZWFucyBhbgorZXJyb3Igb2NjdXJyZWQgYXMgXGZJPGN1cmwvY3VybC5oPlxmUCBkZWZpbmVzLiBTZWUgdGhlIFxmSWxpYmN1cmwtZXJyb3JzLjNcZlAKK21hbiBwYWdlIGZvciB0aGUgZnVsbCBsaXN0IHdpdGggZGVzY3JpcHRpb25zLiBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZW4gdGhlCitzaGFyZSBvYmplY3Qgd2lsbCBub3QgYmUgZGVsZXRlZC4KKy5TSCAiU0VFIEFMU08iCisuQlIgY3VybF9zaGFyZV9pbml0ICIoMyksICIgY3VybF9zaGFyZV9zZXRvcHQgIigzKSIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX2NsZWFudXAuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX2NsZWFudXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTFlNjM3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfY2xlYW51cC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX3NoYXJlX2NsZWFudXAgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF9zaGFyZV9jbGVhbnVwIC0gQ2xlYW4gdXAgYSBzaGFyZWQgb2JqZWN0IDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Q1VSTFNIY29kZSBjdXJsX3NoYXJlX2NsZWFudXAoQ1VSTFNIICogc2hhcmVfaGFuZGxlICk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYSBzaGFyZWQgb2JqZWN0LiBUaGUgc2hhcmUgaGFuZGxlIGNhbm5vdCBiZSB1c2VkIGFueW1vcmUgd2hlbiB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5DVVJMU0hFX09LICh6ZXJvKSBtZWFucyB0aGF0IHRoZSBvcHRpb24gd2FzIHNldCBwcm9wZXJseSwgbm9uLXplcm8gbWVhbnMgYW4gZXJyb3Igb2NjdXJyZWQgYXMgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj4mbHQ7Y3VybC9jdXJsLmgmZ3Q7PC9zcGFuPiBkZWZpbmVzLiBTZWUgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGliY3VybC1lcnJvcnMuMzwvc3Bhbj4gbWFuIHBhZ2UgZm9yIHRoZSBmdWxsIGxpc3Qgd2l0aCBkZXNjcmlwdGlvbnMuIElmIGFuIGVycm9yIG9jY3VycywgdGhlbiB0aGUgc2hhcmUgb2JqZWN0IHdpbGwgbm90IGJlIGRlbGV0ZWQuIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9zaGFyZV9pbml0Lmh0bWwiPmN1cmxfc2hhcmVfaW5pdCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfc2hhcmVfc2V0b3B0Lmh0bWwiPiAgY3VybF9zaGFyZV9zZXRvcHQgKDMpPC9hPiA8cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX2NsZWFudXAucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfY2xlYW51cC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyZWEyZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX2NsZWFudXAucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX2luaXQuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX2luaXQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTAwZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfaW5pdC4zCkBAIC0wLDAgKzEsNDQgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGN1cmxfc2hhcmVfaW5pdCAzICI4IEF1ZyAyMDAzIiAibGliY3VybCA3LjEwLjciICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX3NoYXJlX2luaXQgLSBDcmVhdGUgYSBzaGFyZWQgb2JqZWN0CisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKy5zcAorLkJJICJDVVJMU0ggKmN1cmxfc2hhcmVfaW5pdCggKTsiCisuYWQKKy5TSCBERVNDUklQVElPTgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgQ1VSTFNIIGhhbmRsZSB0byBiZSB1c2VkIGFzIGlucHV0IHRvIGFsbCB0aGUgb3RoZXIKK3NoYXJlLWZ1bmN0aW9ucywgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIGEgc2hhcmUgaGFuZGxlIGluIHNvbWUgcGxhY2VzIGluIHRoZQorZG9jdW1lbnRhdGlvbi4gVGhpcyBpbml0IGNhbGwgTVVTVCBoYXZlIGEgY29ycmVzcG9uZGluZyBjYWxsIHRvCitcZkljdXJsX3NoYXJlX2NsZWFudXBcZlAgd2hlbiBhbGwgb3BlcmF0aW9ucyB1c2luZyB0aGUgc2hhcmUgYXJlIGNvbXBsZXRlLgorCitUaGlzIFxmSXNoYXJlIGhhbmRsZVxmUCBpcyB3aGF0IHlvdSBwYXNzIHRvIGN1cmwgdXNpbmcgdGhlIFxmSUNVUkxPUFRfU0hBUkVcZlAKK29wdGlvbiB3aXRoIFxmSWN1cmxfZWFzeV9zZXRvcHQoMylcZlAsIHRvIG1ha2UgdGhhdCBzcGVjaWZpYyBjdXJsIGhhbmRsZSB1c2UKK3RoZSBkYXRhIGluIHRoaXMgc2hhcmUuCisuU0ggUkVUVVJOIFZBTFVFCitJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTCwgc29tZXRoaW5nIHdlbnQgd3JvbmcgKG91dCBvZiBtZW1vcnksIGV0Yy4pCithbmQgdGhlcmVmb3JlIHRoZSBzaGFyZSBvYmplY3Qgd2FzIG5vdCBjcmVhdGVkLgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX3NoYXJlX2NsZWFudXAgIigzKSwgIiBjdXJsX3NoYXJlX3NldG9wdCAiKDMpIgorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zaGFyZV9pbml0Lmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zaGFyZV9pbml0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmNTU1YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX2luaXQuaHRtbApAQCAtMCwwICsxLDU5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF9zaGFyZV9pbml0IG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfc2hhcmVfaW5pdCAtIENyZWF0ZSBhIHNoYXJlZCBvYmplY3QgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj4jaW5jbHVkZSAmbHQ7Y3VybC9jdXJsLmgmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5DVVJMU0ggKmN1cmxfc2hhcmVfaW5pdCggKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIENVUkxTSCBoYW5kbGUgdG8gYmUgdXNlZCBhcyBpbnB1dCB0byBhbGwgdGhlIG90aGVyIHNoYXJlLWZ1bmN0aW9ucywgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIGEgc2hhcmUgaGFuZGxlIGluIHNvbWUgcGxhY2VzIGluIHRoZSBkb2N1bWVudGF0aW9uLiBUaGlzIGluaXQgY2FsbCBNVVNUIGhhdmUgYSBjb3JyZXNwb25kaW5nIGNhbGwgdG8gPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jdXJsX3NoYXJlX2NsZWFudXA8L3NwYW4+IHdoZW4gYWxsIG9wZXJhdGlvbnMgdXNpbmcgdGhlIHNoYXJlIGFyZSBjb21wbGV0ZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+c2hhcmUgaGFuZGxlPC9zcGFuPiBpcyB3aGF0IHlvdSBwYXNzIHRvIGN1cmwgdXNpbmcgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTE9QVF9TSEFSRTwvc3Bhbj4gb3B0aW9uIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9zZXRvcHQuaHRtbCI+Y3VybF9lYXN5X3NldG9wdCgzKTwvYT4sIHRvIG1ha2UgdGhhdCBzcGVjaWZpYyBjdXJsIGhhbmRsZSB1c2UgdGhlIGRhdGEgaW4gdGhpcyBzaGFyZS4gPGEgbmFtZT0iUkVUVVJOIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SRVRVUk4gVkFMVUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+SWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwsIHNvbWV0aGluZyB3ZW50IHdyb25nIChvdXQgb2YgbWVtb3J5LCBldGMuKSBhbmQgdGhlcmVmb3JlIHRoZSBzaGFyZSBvYmplY3Qgd2FzIG5vdCBjcmVhdGVkLiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfc2hhcmVfY2xlYW51cC5odG1sIj5jdXJsX3NoYXJlX2NsZWFudXAgKDMpPC9hPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX3NoYXJlX3NldG9wdC5odG1sIj4gIGN1cmxfc2hhcmVfc2V0b3B0ICgzKTwvYT4gCis8cCBjbGFzcz0ibGV2ZWwwIj48cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX2luaXQucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfaW5pdC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlNjY1MwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX2luaXQucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX3NldG9wdC4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfc2V0b3B0LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1NDIzYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX3NldG9wdC4zCkBAIC0wLDAgKzEsODUgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGN1cmxfc2hhcmVfc2V0b3B0IDMgIjggQXVnIDIwMDMiICJsaWJjdXJsIDcuMTAuNyIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfc2hhcmVfc2V0b3B0IC0gU2V0IG9wdGlvbnMgZm9yIGEgc2hhcmVkIG9iamVjdAorLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+Cisuc3AKK0NVUkxTSGNvZGUgY3VybF9zaGFyZV9zZXRvcHQoQ1VSTFNIICpzaGFyZSwgQ1VSTFNIb3B0aW9uIG9wdGlvbiwgcGFyYW1ldGVyKTsKKy5hZAorLlNIIERFU0NSSVBUSU9OCitTZXQgdGhlIFxmSW9wdGlvblxmUCB0byBcZklwYXJhbWV0ZXJcZlAgZm9yIHRoZSBnaXZlbiBcZklzaGFyZVxmUC4KKy5TSCBPUFRJT05TCisuSVAgQ1VSTFNIT1BUX0xPQ0tGVU5DCitUaGUgXGZJcGFyYW1ldGVyXGZQIG11c3QgYmUgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gbWF0Y2hpbmcgdGhlIGZvbGxvd2luZworcHJvdG90eXBlOgorCit2b2lkIGxvY2tfZnVuY3Rpb24oQ1VSTCAqaGFuZGxlLCBjdXJsX2xvY2tfZGF0YSBkYXRhLCBjdXJsX2xvY2tfYWNjZXNzIGFjY2VzcywKK3ZvaWQgKnVzZXJwdHIpOworCitcZklkYXRhXGZQIGRlZmluZXMgd2hhdCBkYXRhIGxpYmN1cmwgd2FudHMgdG8gbG9jaywgYW5kIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0Citvbmx5IG9uZSBsb2NrIGlzIGdpdmVuIGF0IGFueSB0aW1lIGZvciBlYWNoIGtpbmQgb2YgZGF0YS4KKworXGZJYWNjZXNzXGZQIGRlZmluZXMgd2hhdCBhY2Nlc3MgdHlwZSBsaWJjdXJsIHdhbnRzLCBzaGFyZWQgb3Igc2luZ2xlLgorCitcZkl1c2VycHRyXGZQIGlzIHRoZSBwb2ludGVyIHlvdSBzZXQgd2l0aCBcZklDVVJMU0hPUFRfVVNFUkRBVEFcZlAuCisuSVAgQ1VSTFNIT1BUX1VOTE9DS0ZVTkMKK1RoZSBcZklwYXJhbWV0ZXJcZlAgbXVzdCBiZSBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBtYXRjaGluZyB0aGUgZm9sbG93aW5nCitwcm90b3R5cGU6CisKK3ZvaWQgdW5sb2NrX2Z1bmN0aW9uKENVUkwgKmhhbmRsZSwgY3VybF9sb2NrX2RhdGEgZGF0YSwgdm9pZCAqdXNlcnB0cik7CisKK1xmSWRhdGFcZlAgZGVmaW5lcyB3aGF0IGRhdGEgbGliY3VybCB3YW50cyB0byB1bmxvY2ssIGFuZCB5b3UgbXVzdCBtYWtlIHN1cmUKK3RoYXQgb25seSBvbmUgbG9jayBpcyBnaXZlbiBhdCBhbnkgdGltZSBmb3IgZWFjaCBraW5kIG9mIGRhdGEuCisKK1xmSXVzZXJwdHJcZlAgaXMgdGhlIHBvaW50ZXIgeW91IHNldCB3aXRoIFxmSUNVUkxTSE9QVF9VU0VSREFUQVxmUC4KKy5JUCBDVVJMU0hPUFRfU0hBUkUKK1RoZSBcZklwYXJhbWV0ZXJcZlAgc3BlY2lmaWVzIGEgdHlwZSBvZiBkYXRhIHRoYXQgc2hvdWxkIGJlIHNoYXJlZC4gVGhpcyBtYXkKK2JlIHNldCB0byBvbmUgb2YgdGhlIHZhbHVlcyBkZXNjcmliZWQgYmVsb3cuCisuUlMKKy5JUCBDVVJMX0xPQ0tfREFUQV9DT09LSUUKK0Nvb2tpZSBkYXRhIHdpbGwgYmUgc2hhcmVkIGFjcm9zcyB0aGUgZWFzeSBoYW5kbGVzIHVzaW5nIHRoaXMgc2hhcmVkIG9iamVjdC4KKy5JUCBDVVJMX0xPQ0tfREFUQV9ETlMKK0NhY2hlZCBETlMgaG9zdHMgd2lsbCBiZSBzaGFyZWQgYWNyb3NzIHRoZSBlYXN5IGhhbmRsZXMgdXNpbmcgdGhpcyBzaGFyZWQKK29iamVjdC4gTm90ZSB0aGF0IHdoZW4geW91IHVzZSB0aGUgbXVsdGkgaW50ZXJmYWNlLCBhbGwgZWFzeSBoYW5kbGVzIGFkZGVkIHRvCit0aGUgc2FtZSBtdWx0aSBoYW5kbGUgd2lsbCBzaGFyZSBETlMgY2FjaGUgYnkgZGVmYXVsdCB3aXRob3V0IHRoaXMgaGF2aW5nIHRvCitiZSB1c2VkIQorLklQIENVUkxfTE9DS19EQVRBX1NTTF9TRVNTSU9OCitTU0wgc2Vzc2lvbiBJRHMgd2lsbCBiZSBzaGFyZWQgYWNjcm9zcyB0aGUgZWFzeSBoYW5kbGVzIHVzaW5nIHRoaXMgc2hhcmVkCitvYmplY3QuIFRoaXMgd2lsbCByZWR1Y2UgdGhlIHRpbWUgc3BlbnQgaW4gdGhlIFNTTCBoYW5kc2hha2Ugd2hlbiByZWNvbm5lY3RpbmcKK3RvIHRoZSBzYW1lIHNlcnZlci4gTm90ZSBTU0wgc2Vzc2lvbiBJRHMgYXJlIHJldXNlZCB3aXRoaW4gdGhlIHNhbWUgZWFzeSBoYW5kbGUKK2J5IGRlZmF1bHQuCisuUkUKKy5JUCBDVVJMU0hPUFRfVU5TSEFSRQorVGhpcyBvcHRpb24gZG9lcyB0aGUgb3Bwb3NpdGUgb2YgXGZJQ1VSTFNIT1BUX1NIQVJFXGZQLiBJdCBzcGVjaWZpZXMgdGhhdAordGhlIHNwZWNpZmllZCBcZklwYXJhbWV0ZXJcZlAgd2lsbCBubyBsb25nZXIgYmUgc2hhcmVkLiBWYWxpZCB2YWx1ZXMgYXJlCit0aGUgc2FtZSBhcyB0aG9zZSBmb3IgXGZJQ1VSTFNIT1BUX1NIQVJFXGZQLgorLklQIENVUkxTSE9QVF9VU0VSREFUQQorVGhlIFxmSXBhcmFtZXRlclxmUCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBwb2ludGVyIHRvIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZAordG8gdGhlIGxvY2tfZnVuY3Rpb24gYW5kIHVubG9ja19mdW5jdGlvbiBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkLgorLlNIIFJFVFVSTiBWQUxVRQorQ1VSTFNIRV9PSyAoemVybykgbWVhbnMgdGhhdCB0aGUgb3B0aW9uIHdhcyBzZXQgcHJvcGVybHksIG5vbi16ZXJvIG1lYW5zIGFuCitlcnJvciBvY2N1cnJlZCBhcyBcZkk8Y3VybC9jdXJsLmg+XGZQIGRlZmluZXMuIFNlZSB0aGUgXGZJbGliY3VybC1lcnJvcnMuM1xmUAorbWFuIHBhZ2UgZm9yIHRoZSBmdWxsIGxpc3Qgd2l0aCBkZXNjcmlwdGlvbnMuCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfc2hhcmVfY2xlYW51cCAiKDMpLCAiIGN1cmxfc2hhcmVfaW5pdCAiKDMpIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfc2V0b3B0Lmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zaGFyZV9zZXRvcHQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjdmOTdjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfc2V0b3B0Lmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfc2hhcmVfc2V0b3B0IG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfc2hhcmVfc2V0b3B0IC0gU2V0IG9wdGlvbnMgZm9yIGEgc2hhcmVkIG9iamVjdCA8YSBuYW1lPSJTWU5PUFNJUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1lOT1BTSVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+Q1VSTFNIY29kZSBjdXJsX3NoYXJlX3NldG9wdChDVVJMU0ggKnNoYXJlLCBDVVJMU0hvcHRpb24gb3B0aW9uLCBwYXJhbWV0ZXIpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5TZXQgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+b3B0aW9uPC9zcGFuPiB0byA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnBhcmFtZXRlcjwvc3Bhbj4gZm9yIHRoZSBnaXZlbiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnNoYXJlPC9zcGFuPi4gPGEgbmFtZT0iT1BUSU9OUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+T1BUSU9OUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxTSE9QVExPQ0tGVU5DIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxTSE9QVF9MT0NLRlVOQzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5wYXJhbWV0ZXI8L3NwYW4+IG11c3QgYmUgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6IAorPHAgY2xhc3M9ImxldmVsMSI+dm9pZCBsb2NrX2Z1bmN0aW9uKENVUkwgKmhhbmRsZSwgY3VybF9sb2NrX2RhdGEgZGF0YSwgY3VybF9sb2NrX2FjY2VzcyBhY2Nlc3MsIHZvaWQgKnVzZXJwdHIpOyAKKzxwIGNsYXNzPSJsZXZlbDEiPjxzcGFuIENsYXNzPSJlbXBoYXNpcyI+ZGF0YTwvc3Bhbj4gZGVmaW5lcyB3aGF0IGRhdGEgbGliY3VybCB3YW50cyB0byBsb2NrLCBhbmQgeW91IG11c3QgbWFrZSBzdXJlIHRoYXQgb25seSBvbmUgbG9jayBpcyBnaXZlbiBhdCBhbnkgdGltZSBmb3IgZWFjaCBraW5kIG9mIGRhdGEuIAorPHAgY2xhc3M9ImxldmVsMSI+PHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5hY2Nlc3M8L3NwYW4+IGRlZmluZXMgd2hhdCBhY2Nlc3MgdHlwZSBsaWJjdXJsIHdhbnRzLCBzaGFyZWQgb3Igc2luZ2xlLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxzcGFuIENsYXNzPSJlbXBoYXNpcyI+dXNlcnB0cjwvc3Bhbj4gaXMgdGhlIHBvaW50ZXIgeW91IHNldCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxTSE9QVFVTRVJEQVRBIj5DVVJMU0hPUFRfVVNFUkRBVEE8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxTSE9QVFVOTE9DS0ZVTkMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTFNIT1BUX1VOTE9DS0ZVTkM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+cGFyYW1ldGVyPC9zcGFuPiBtdXN0IGJlIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOiAKKzxwIGNsYXNzPSJsZXZlbDEiPnZvaWQgdW5sb2NrX2Z1bmN0aW9uKENVUkwgKmhhbmRsZSwgY3VybF9sb2NrX2RhdGEgZGF0YSwgdm9pZCAqdXNlcnB0cik7IAorPHAgY2xhc3M9ImxldmVsMSI+PHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5kYXRhPC9zcGFuPiBkZWZpbmVzIHdoYXQgZGF0YSBsaWJjdXJsIHdhbnRzIHRvIHVubG9jaywgYW5kIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IG9ubHkgb25lIGxvY2sgaXMgZ2l2ZW4gYXQgYW55IHRpbWUgZm9yIGVhY2gga2luZCBvZiBkYXRhLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxzcGFuIENsYXNzPSJlbXBoYXNpcyI+dXNlcnB0cjwvc3Bhbj4gaXMgdGhlIHBvaW50ZXIgeW91IHNldCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iI0NVUkxTSE9QVFVTRVJEQVRBIj5DVVJMU0hPUFRfVVNFUkRBVEE8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxTSE9QVFNIQVJFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxTSE9QVF9TSEFSRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5wYXJhbWV0ZXI8L3NwYW4+IHNwZWNpZmllcyBhIHR5cGUgb2YgZGF0YSB0aGF0IHNob3VsZCBiZSBzaGFyZWQuIFRoaXMgbWF5IGJlIHNldCB0byBvbmUgb2YgdGhlIHZhbHVlcyBkZXNjcmliZWQgYmVsb3cuIAorPHAgY2xhc3M9ImxldmVsMiI+Cis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMTE9DS0RBVEFDT09LSUUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9MT0NLX0RBVEFfQ09PS0lFPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPkNvb2tpZSBkYXRhIHdpbGwgYmUgc2hhcmVkIGFjcm9zcyB0aGUgZWFzeSBoYW5kbGVzIHVzaW5nIHRoaXMgc2hhcmVkIG9iamVjdC4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDVVJMTE9DS0RBVEFETlMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9MT0NLX0RBVEFfRE5TPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDIiPkNhY2hlZCBETlMgaG9zdHMgd2lsbCBiZSBzaGFyZWQgYWNyb3NzIHRoZSBlYXN5IGhhbmRsZXMgdXNpbmcgdGhpcyBzaGFyZWQgb2JqZWN0LiBOb3RlIHRoYXQgd2hlbiB5b3UgdXNlIHRoZSBtdWx0aSBpbnRlcmZhY2UsIGFsbCBlYXN5IGhhbmRsZXMgYWRkZWQgdG8gdGhlIHNhbWUgbXVsdGkgaGFuZGxlIHdpbGwgc2hhcmUgRE5TIGNhY2hlIGJ5IGRlZmF1bHQgd2l0aG91dCB0aGlzIGhhdmluZyB0byBiZSB1c2VkISAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkNVUkxMT0NLREFUQVNTTFNFU1NJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9MT0NLX0RBVEFfU1NMX1NFU1NJT048L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMiI+U1NMIHNlc3Npb24gSURzIHdpbGwgYmUgc2hhcmVkIGFjY3Jvc3MgdGhlIGVhc3kgaGFuZGxlcyB1c2luZyB0aGlzIHNoYXJlZCBvYmplY3QuIFRoaXMgd2lsbCByZWR1Y2UgdGhlIHRpbWUgc3BlbnQgaW4gdGhlIFNTTCBoYW5kc2hha2Ugd2hlbiByZWNvbm5lY3RpbmcgdG8gdGhlIHNhbWUgc2VydmVyLiBOb3RlIFNTTCBzZXNzaW9uIElEcyBhcmUgcmV1c2VkIHdpdGhpbiB0aGUgc2FtZSBlYXN5IGhhbmRsZSBieSBkZWZhdWx0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFNIT1BUVU5TSEFSRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMU0hPUFRfVU5TSEFSRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIG9wdGlvbiBkb2VzIHRoZSBvcHBvc2l0ZSBvZiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMU0hPUFRTSEFSRSI+Q1VSTFNIT1BUX1NIQVJFPC9hPi4gSXQgc3BlY2lmaWVzIHRoYXQgdGhlIHNwZWNpZmllZCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnBhcmFtZXRlcjwvc3Bhbj4gd2lsbCBubyBsb25nZXIgYmUgc2hhcmVkLiBWYWxpZCB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGZvciA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9IiNDVVJMU0hPUFRTSEFSRSI+Q1VSTFNIT1BUX1NIQVJFPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMU0hPUFRVU0VSREFUQSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMU0hPUFRfVVNFUkRBVEE8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+cGFyYW1ldGVyPC9zcGFuPiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBwb2ludGVyIHRvIGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbG9ja19mdW5jdGlvbiBhbmQgdW5sb2NrX2Z1bmN0aW9uIGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPkNVUkxTSEVfT0sgKHplcm8pIG1lYW5zIHRoYXQgdGhlIG9wdGlvbiB3YXMgc2V0IHByb3Blcmx5LCBub24temVybyBtZWFucyBhbiBlcnJvciBvY2N1cnJlZCBhcyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPiZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+IGRlZmluZXMuIFNlZSB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5saWJjdXJsLWVycm9ycy4zPC9zcGFuPiBtYW4gcGFnZSBmb3IgdGhlIGZ1bGwgbGlzdCB3aXRoIGRlc2NyaXB0aW9ucy4gPGEgbmFtZT0iU0VFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TRUUgQUxTTzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX3NoYXJlX2NsZWFudXAuaHRtbCI+Y3VybF9zaGFyZV9jbGVhbnVwICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9zaGFyZV9pbml0Lmh0bWwiPiAgY3VybF9zaGFyZV9pbml0ICgzKTwvYT4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zaGFyZV9zZXRvcHQucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfc2V0b3B0LnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGExYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfc2V0b3B0LnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zaGFyZV9zdHJlcnJvci4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfc3RyZXJyb3IuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWJjMzk4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfc3RyZXJyb3IuMwpAQCAtMCwwICsxLDM3IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX3NoYXJlX3N0cmVycm9yIDMgIjI2IEFwciAyMDA0IiAibGliY3VybCA3LjEyIiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9zaGFyZV9zdHJlcnJvciAtIHJldHVybiBzdHJpbmcgZGVzY3JpYmluZyBlcnJvciBjb2RlCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorLkJJICJjb25zdCBjaGFyICpjdXJsX3NoYXJlX3N0cmVycm9yKENVUkxTSGNvZGUgIiBlcnJvcm51bSAiKTsiCisuU0ggREVTQ1JJUFRJT04KK1RoZSBjdXJsX3NoYXJlX3N0cmVycm9yKCkgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBDVVJMU0hjb2RlCitlcnJvciBjb2RlIHBhc3NlZCBpbiB0aGUgYXJndW1lbnQgXGZJZXJyb3JudW1cZlAuCisuU0ggQVZBSUxBQklMSVRZCitUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBsaWJjdXJsIDcuMTIuMAorLlNIIFJFVFVSTiBWQUxVRQorQSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZy4KKy5TSCAiU0VFIEFMU08iCisuQlIgbGliY3VybC1lcnJvcnMgIigzKSwgIiBjdXJsX211bHRpX3N0cmVycm9yICIoMyksICIgY3VybF9lYXN5X3N0cmVycm9yICIoMykiCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zaGFyZV9zdHJlcnJvci5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfc3RyZXJyb3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWU4ZjhjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2hhcmVfc3RyZXJyb3IuaHRtbApAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF9zaGFyZV9zdHJlcnJvciBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX3NoYXJlX3N0cmVycm9yIC0gcmV0dXJuIHN0cmluZyBkZXNjcmliaW5nIGVycm9yIGNvZGUgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+IDxzcGFuIENsYXNzPSJib2xkIj5jb25zdCBjaGFyICpjdXJsX3NoYXJlX3N0cmVycm9yKENVUkxTSGNvZGUgIGVycm9ybnVtICk7PC9zcGFuPiA8YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGN1cmxfc2hhcmVfc3RyZXJyb3IoKSBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIENVUkxTSGNvZGUgZXJyb3IgY29kZSBwYXNzZWQgaW4gdGhlIGFyZ3VtZW50IDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+ZXJyb3JudW08L3NwYW4+LiA8YSBuYW1lPSJBVkFJTEFCSUxJVFkiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkFWQUlMQUJJTElUWTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBsaWJjdXJsIDcuMTIuMCA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5BIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJtYW5wYWdlIj5saWJjdXJsLWVycm9ycyAoMyk8L3NwYW4+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfbXVsdGlfc3RyZXJyb3IuaHRtbCI+ICBjdXJsX211bHRpX3N0cmVycm9yICgzKTwvYT4gPGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9lYXN5X3N0cmVycm9yLmh0bWwiPiAgY3VybF9lYXN5X3N0cmVycm9yICgzKTwvYT4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zaGFyZV9zdHJlcnJvci5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zaGFyZV9zdHJlcnJvci5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4OGNkYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NoYXJlX3N0cmVycm9yLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zbGlzdF9hcHBlbmQuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NsaXN0X2FwcGVuZC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOTU2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zbGlzdF9hcHBlbmQuMwpAQCAtMCwwICsxLDU2IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX3NsaXN0X2FwcGVuZCAzICIxOSBKdW4gMjAwMyIgImxpYmN1cmwgNy4xMC40IiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF9zbGlzdF9hcHBlbmQgLSBhZGQgYSBzdHJpbmcgdG8gYW4gc2xpc3QKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorLnNwCisuQkkgInN0cnVjdCBjdXJsX3NsaXN0ICpjdXJsX3NsaXN0X2FwcGVuZChzdHJ1Y3QgY3VybF9zbGlzdCAqIiBsaXN0LAorLkJJICJjb25zdCBjaGFyICogInN0cmluZyAiKTsiCisuYWQKKy5TSCBERVNDUklQVElPTgorY3VybF9zbGlzdF9hcHBlbmQoKSBhcHBlbmRzIGEgc3BlY2lmaWVkIHN0cmluZyB0byBhIGxpbmtlZCBsaXN0IG9mCitzdHJpbmdzLiBUaGUgZXhpc3RpbmcgXGZJbGlzdFxmUCBzaG91bGQgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB3aGlsZQordGhlIG5ldyBsaXN0IGlzIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbi4gVGhlIHNwZWNpZmllZCBcZklzdHJpbmdcZlAgaGFzCitiZWVuIGFwcGVuZGVkIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLiBjdXJsX3NsaXN0X2FwcGVuZCgpIGNvcGllcyB0aGUKK3N0cmluZy4KKworVGhlIGxpc3Qgc2hvdWxkIGJlIGZyZWVkIGFnYWluIChhZnRlciB1c2FnZSkgd2l0aAorXGZCY3VybF9zbGlzdF9mcmVlX2FsbCgzKVxmUC4KKy5TSCBSRVRVUk4gVkFMVUUKK0EgbnVsbCBwb2ludGVyIGlzIHJldHVybmVkIGlmIGFueXRoaW5nIHdlbnQgd3JvbmcsIG90aGVyd2lzZSB0aGUgbmV3IGxpc3QKK3BvaW50ZXIgaXMgcmV0dXJuZWQuCisuU0ggRVhBTVBMRQorLm5mCisgQ1VSTCBoYW5kbGU7Cisgc3RydWN0IGN1cmxfc2xpc3QgKnNsaXN0PU5VTEw7CisKKyBzbGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5kKHNsaXN0LCAicHJhZ21hOiIpOworIGN1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX0hUVFBIRUFERVIsIHNsaXN0KTsKKworIGN1cmxfZWFzeV9wZXJmb3JtKGhhbmRsZSk7CisKKyBjdXJsX3NsaXN0X2ZyZWVfYWxsKHNsaXN0KTsgLyogZnJlZSB0aGUgbGlzdCBhZ2FpbiAqLworLmZpCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfc2xpc3RfZnJlZV9hbGwgIigzKSwgIgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2xpc3RfYXBwZW5kLmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zbGlzdF9hcHBlbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzIyYTFlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2xpc3RfYXBwZW5kLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPjxoZWFkPgorPHRpdGxlPmN1cmxfc2xpc3RfYXBwZW5kIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfc2xpc3RfYXBwZW5kIC0gYWRkIGEgc3RyaW5nIHRvIGFuIHNsaXN0IDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+c3RydWN0IGN1cmxfc2xpc3QgKmN1cmxfc2xpc3RfYXBwZW5kKHN0cnVjdCBjdXJsX3NsaXN0ICogbGlzdCw8L3NwYW4+IDxzcGFuIENsYXNzPSJib2xkIj5jb25zdCBjaGFyICogc3RyaW5nICk7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX3NsaXN0X2FwcGVuZCgpIGFwcGVuZHMgYSBzcGVjaWZpZWQgc3RyaW5nIHRvIGEgbGlua2VkIGxpc3Qgb2Ygc3RyaW5ncy4gVGhlIGV4aXN0aW5nIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGlzdDwvc3Bhbj4gc2hvdWxkIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgd2hpbGUgdGhlIG5ldyBsaXN0IGlzIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbi4gVGhlIHNwZWNpZmllZCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnN0cmluZzwvc3Bhbj4gaGFzIGJlZW4gYXBwZW5kZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMuIGN1cmxfc2xpc3RfYXBwZW5kKCkgY29waWVzIHRoZSBzdHJpbmcuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGxpc3Qgc2hvdWxkIGJlIGZyZWVkIGFnYWluIChhZnRlciB1c2FnZSkgd2l0aCA8YSBjbGFzcz0iYm9sZCIgaHJlZj0iLi9jdXJsX3NsaXN0X2ZyZWVfYWxsLmh0bWwiPmN1cmxfc2xpc3RfZnJlZV9hbGwoMyk8L2E+LiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5BIG51bGwgcG9pbnRlciBpcyByZXR1cm5lZCBpZiBhbnl0aGluZyB3ZW50IHdyb25nLCBvdGhlcndpc2UgdGhlIG5ldyBsaXN0IHBvaW50ZXIgaXMgcmV0dXJuZWQuIDxhIG5hbWU9IkVYQU1QTEUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkVYQU1QTEU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtDVVJMIGhhbmRsZTsgJm5ic3A7c3RydWN0IGN1cmxfc2xpc3QgKnNsaXN0PU5VTEw7IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7c2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdCwgInByYWdtYToiKTsgJm5ic3A7Y3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwgc2xpc3QpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwO2N1cmxfZWFzeV9wZXJmb3JtKGhhbmRsZSk7IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Y3VybF9zbGlzdF9mcmVlX2FsbChzbGlzdCk7IC8qIGZyZWUgdGhlIGxpc3QgYWdhaW4gKi8gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfc2xpc3RfZnJlZV9hbGwuaHRtbCI+Y3VybF9zbGlzdF9mcmVlX2FsbCAoMyk8L2E+IDxzcGFuIENsYXNzPSJtYW5wYWdlIj4gPC9zcGFuPiA8cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NsaXN0X2FwcGVuZC5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zbGlzdF9hcHBlbmQucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZTNjNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zbGlzdF9hcHBlbmQucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NsaXN0X2ZyZWVfYWxsLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zbGlzdF9mcmVlX2FsbC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYjNkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zbGlzdF9mcmVlX2FsbC4zCkBAIC0wLDAgKzEsMzcgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGN1cmxfc2xpc3RfZnJlZV9hbGwgMyAiNSBNYXJjaCAyMDAxIiAibGliY3VybCA3LjAiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX3NsaXN0X2ZyZWVfYWxsIC0gZnJlZSBhbiBlbnRpcmUgY3VybF9zbGlzdCBsaXN0CisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKy5zcAorLkJJICJ2b2lkIGN1cmxfc2xpc3RfZnJlZV9hbGwoc3RydWN0IGN1cmxfc2xpc3QgKiIgbGlzdCk7CisuYWQKKy5TSCBERVNDUklQVElPTgorY3VybF9zbGlzdF9mcmVlX2FsbCgpIHJlbW92ZXMgYWxsIHRyYWNlcyBvZiBhIHByZXZpb3VzbHkgYnVpbHQgY3VybF9zbGlzdAorbGlua2VkIGxpc3QuCisuU0ggUkVUVVJOIFZBTFVFCitOb3RoaW5nLgorLlNIICJTRUUgQUxTTyIKKy5CUiBjdXJsX3NsaXN0X2FwcGVuZCAiKDMpLCAiCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NsaXN0X2ZyZWVfYWxsLmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zbGlzdF9mcmVlX2FsbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZDc0MTgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zbGlzdF9mcmVlX2FsbC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX3NsaXN0X2ZyZWVfYWxsIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfc2xpc3RfZnJlZV9hbGwgLSBmcmVlIGFuIGVudGlyZSBjdXJsX3NsaXN0IGxpc3QgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj4jaW5jbHVkZSAmbHQ7Y3VybC9jdXJsLmgmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj52b2lkIGN1cmxfc2xpc3RfZnJlZV9hbGwoc3RydWN0IGN1cmxfc2xpc3QgKiBsaXN0KTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmN1cmxfc2xpc3RfZnJlZV9hbGwoKSByZW1vdmVzIGFsbCB0cmFjZXMgb2YgYSBwcmV2aW91c2x5IGJ1aWx0IGN1cmxfc2xpc3QgbGlua2VkIGxpc3QuIDxhIG5hbWU9IlJFVFVSTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UkVUVVJOIFZBTFVFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPk5vdGhpbmcuIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9zbGlzdF9hcHBlbmQuaHRtbCI+Y3VybF9zbGlzdF9hcHBlbmQgKDMpPC9hPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+IDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NsaXN0X2ZyZWVfYWxsLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3NsaXN0X2ZyZWVfYWxsLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDUxZjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc2xpc3RfZnJlZV9hbGwucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3N0cmVxdWFsLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zdHJlcXVhbC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNTc1ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zdHJlcXVhbC4zCkBAIC0wLDAgKzEsNTEgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGN1cmxfc3RyZXF1YWwgMyAiMzAgQXByaWwgMjAwNCIgImxpYmN1cmwgNy4xMiIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfc3RyZXF1YWwsIGN1cmxfc3RybmVxdWFsIC0gY2FzZSBpbnNlbnNpdGl2ZSBzdHJpbmcgY29tcGFyaXNvbnMKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorLnNwCisuQkkgImludCBjdXJsX3N0cmVxdWFsKGNoYXIgKiIgc3RyMSAiLCBjaGFyICoiIHN0cjIgIik7IgorLnNwCisuQkkgImludCBjdXJsX3N0cmVucXVhbChjaGFyICoiIHN0cjEgIiwgY2hhciAqIiBzdHIyICIsIHNpemVfdCAiIGxlbiAiKTsiCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgY3VybF9zdHJlcXVhbCgpCitmdW5jdGlvbiBjb21wYXJlcyB0aGUgdHdvIHN0cmluZ3MgXGZJc3RyMVxmUCBhbmQgXGZJc3RyMlxmUCwgaWdub3JpbmcgdGhlIGNhc2UKK29mIHRoZSBjaGFyYWN0ZXJzLiBJdCByZXR1cm5zIGEgbm9uLXplcm8gKFRSVUUpIGludGVnZXIgaWYgdGhlIHN0cmluZ3MgYXJlCitpZGVudGljYWwuCisuc3AKK1RoZSBcZkJjdXJsX3N0cm5lcXVhbCgpXGZQIGZ1bmN0aW9uIGlzIHNpbWlsYXIsIGV4Y2VwdCBpdCBvbmx5IGNvbXBhcmVzIHRoZQorZmlyc3QgXGZJbGVuXGZQIGNoYXJhY3RlcnMgb2YgXGZJc3RyMVxmUC4KKy5zcAorVGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBieSBsaWJjdXJsIHRvIGVuYWJsZSBhcHBsaWNhdGlvbnMgdG8gY29tcGFyZQorc3RyaW5ncyBpbiBhIHRydWx5IHBvcnRhYmxlIG1hbm5lci4gVGhlcmUgYXJlIG5vIHN0YW5kYXJkIHBvcnRhYmxlIGNhc2UKK2luc2Vuc2l0aXZlIHN0cmluZyBjb21wYXJpc29uIGZ1bmN0aW9ucy4gVGhlc2UgdHdvIHdvcmsgb24gYWxsIHBsYXRmb3Jtcy4KKy5TSCBBVkFJTEFCSUxJVFkKK1RoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHVibGljIGxpYmN1cmwgQVBJIGluIGEgbmVhcgorZnV0dXJlLiBUaGV5IHdpbGwgaW5zdGVhZCBiZSBtYWRlICJhdmFpbGFibGUiIGJ5IHNvdXJjZSBjb2RlIGFjY2VzcyBvbmx5LCBhbmQKK3RoZW4gYXMgY3VybHhfc3RyZXF1YWwoKSBhbmQgY3VybHhfc3RyZW5xdWFsKCkuCisuU0ggUkVUVVJOIFZBTFVFCitOb24temVybyBpZiB0aGUgc3RyaW5ncyBhcmUgaWRlbnRpY2FsLiBaZXJvIGlmIHRoZXkncmUgbm90LgorLlNIICJTRUUgQUxTTyIKKy5CUiBzdHJjbXAgIigzKSwgIiBzdHJjYXNlY21wICIoMykiCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zdHJlcXVhbC5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc3RyZXF1YWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGY2YjU1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfc3RyZXF1YWwuaHRtbApAQCAtMCwwICsxLDYwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF9zdHJlcXVhbCBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX3N0cmVxdWFsLCBjdXJsX3N0cm5lcXVhbCAtIGNhc2UgaW5zZW5zaXRpdmUgc3RyaW5nIGNvbXBhcmlzb25zIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+aW50IGN1cmxfc3RyZXF1YWwoY2hhciAqIHN0cjEgLCBjaGFyICogc3RyMiApOzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+aW50IGN1cmxfc3RyZW5xdWFsKGNoYXIgKiBzdHIxICwgY2hhciAqIHN0cjIgLCBzaXplX3QgIGxlbiApOzwvc3Bhbj4gPGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSA8c3BhbiBDbGFzcz0iYm9sZCI+Y3VybF9zdHJlcXVhbCgpPC9zcGFuPiBmdW5jdGlvbiBjb21wYXJlcyB0aGUgdHdvIHN0cmluZ3MgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5zdHIxPC9zcGFuPiBhbmQgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5zdHIyPC9zcGFuPiwgaWdub3JpbmcgdGhlIGNhc2Ugb2YgdGhlIGNoYXJhY3RlcnMuIEl0IHJldHVybnMgYSBub24temVybyAoVFJVRSkgaW50ZWdlciBpZiB0aGUgc3RyaW5ncyBhcmUgaWRlbnRpY2FsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSA8c3BhbiBDbGFzcz0iYm9sZCI+Y3VybF9zdHJuZXF1YWwoKTwvc3Bhbj4gZnVuY3Rpb24gaXMgc2ltaWxhciwgZXhjZXB0IGl0IG9ubHkgY29tcGFyZXMgdGhlIGZpcnN0IDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGVuPC9zcGFuPiBjaGFyYWN0ZXJzIG9mIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+c3RyMTwvc3Bhbj4uIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBieSBsaWJjdXJsIHRvIGVuYWJsZSBhcHBsaWNhdGlvbnMgdG8gY29tcGFyZSBzdHJpbmdzIGluIGEgdHJ1bHkgcG9ydGFibGUgbWFubmVyLiBUaGVyZSBhcmUgbm8gc3RhbmRhcmQgcG9ydGFibGUgY2FzZSBpbnNlbnNpdGl2ZSBzdHJpbmcgY29tcGFyaXNvbiBmdW5jdGlvbnMuIFRoZXNlIHR3byB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMuIDxhIG5hbWU9IkFWQUlMQUJJTElUWSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+QVZBSUxBQklMSVRZPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHVibGljIGxpYmN1cmwgQVBJIGluIGEgbmVhciBmdXR1cmUuIFRoZXkgd2lsbCBpbnN0ZWFkIGJlIG1hZGUgImF2YWlsYWJsZSIgYnkgc291cmNlIGNvZGUgYWNjZXNzIG9ubHksIGFuZCB0aGVuIGFzIGN1cmx4X3N0cmVxdWFsKCkgYW5kIGN1cmx4X3N0cmVucXVhbCgpLiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5Ob24temVybyBpZiB0aGUgc3RyaW5ncyBhcmUgaWRlbnRpY2FsLiBaZXJvIGlmIHRoZXkncmUgbm90LiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJtYW5wYWdlIj5zdHJjbXAgKDMpPC9zcGFuPiA8c3BhbiBDbGFzcz0ibWFucGFnZSI+ICBzdHJjYXNlY21wICgzKTwvc3Bhbj4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zdHJlcXVhbC5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF9zdHJlcXVhbC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhYzk2NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3N0cmVxdWFsLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF91bmVzY2FwZS4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdW5lc2NhcGUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTI0ODY2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdW5lc2NhcGUuMwpAQCAtMCwwICsxLDQ4IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5USCBjdXJsX3VuZXNjYXBlIDMgIjIyIE1hcmNoIDIwMDEiICJsaWJjdXJsIDcuNyIgImxpYmN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmxfdW5lc2NhcGUgLSBVUkwgZGVjb2RlcyB0aGUgZ2l2ZW4gc3RyaW5nCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKy5zcAorLkJJICJjaGFyICpjdXJsX3VuZXNjYXBlKCBjaGFyICoiIHVybCAiLCBpbnQgImxlbmd0aCAiICk7IgorLmFkCisuU0ggREVTQ1JJUFRJT04KK09ic29sZXRlIGZ1bmN0aW9uLiBVc2UgXGZJY3VybF9lYXN5X3VuZXNjYXBlKDMpXGZQIGluc3RlYWQhCisKK1RoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IHRoZSBnaXZlbiBVUkwgZW5jb2RlZCBpbnB1dCBzdHJpbmcgdG8gYSAicGxhaW4KK3N0cmluZyIgYW5kIHJldHVybiB0aGF0IGFzIGEgbmV3IGFsbG9jYXRlZCBzdHJpbmcuIEFsbCBpbnB1dCBjaGFyYWN0ZXJzIHRoYXQKK2FyZSBVUkwgZW5jb2RlZCAoJVhYIHdoZXJlIFhYIGlzIGEgdHdvLWRpZ2l0IGhleGFkZWNpbWFsIG51bWJlcikgd2lsbCBiZQorY29udmVydGVkIHRvIHRoZWlyIHBsYWluIHRleHQgdmVyc2lvbnMuCisKK0lmIHRoZSAnbGVuZ3RoJyBhcmd1bWVudCBpcyBzZXQgdG8gMCwgY3VybF91bmVzY2FwZSgpIHdpbGwgdXNlIHN0cmxlbigpIG9uIHRoZQoraW5wdXQgJ3VybCcgc3RyaW5nIHRvIGZpbmQgb3V0IHRoZSBzaXplLgorCitZb3UgbXVzdCBjdXJsX2ZyZWUoKSB0aGUgcmV0dXJuZWQgc3RyaW5nIHdoZW4geW91J3JlIGRvbmUgd2l0aCBpdC4KKy5TSCBBVkFJTEFCSUxJVFkKK1NpbmNlIDcuMTUuNCwgXGZJY3VybF9lYXN5X3VuZXNjYXBlKDMpXGZQIHNob3VsZCBiZSB1c2VkLiBUaGlzIGZ1bmN0aW9uIHdpbGwKK2JlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KKy5TSCBSRVRVUk4gVkFMVUUKK0EgcG9pbnRlciB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgb3IgTlVMTCBpZiBpdCBmYWlsZWQuCisuU0ggIlNFRSBBTFNPIgorLkkgY3VybF9lYXN5X2VzY2FwZSgzKSwgY3VybF9lYXN5X3VuZXNjYXBlKDMpLCBjdXJsX2ZyZWUoMyksIFJGQyAyMzk2CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF91bmVzY2FwZS5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdW5lc2NhcGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGU0MzRjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdW5lc2NhcGUuaHRtbApAQCAtMCwwICsxLDYxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF91bmVzY2FwZSBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsX3VuZXNjYXBlIC0gVVJMIGRlY29kZXMgdGhlIGdpdmVuIHN0cmluZyA8YSBuYW1lPSJTWU5PUFNJUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1lOT1BTSVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmNoYXIgKmN1cmxfdW5lc2NhcGUoIGNoYXIgKiB1cmwgLCBpbnQgbGVuZ3RoICApOzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+T2Jzb2xldGUgZnVuY3Rpb24uIFVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3VuZXNjYXBlLmh0bWwiPmN1cmxfZWFzeV91bmVzY2FwZSgzKTwvYT4gaW5zdGVhZCEgCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCB0aGUgZ2l2ZW4gVVJMIGVuY29kZWQgaW5wdXQgc3RyaW5nIHRvIGEgInBsYWluIHN0cmluZyIgYW5kIHJldHVybiB0aGF0IGFzIGEgbmV3IGFsbG9jYXRlZCBzdHJpbmcuIEFsbCBpbnB1dCBjaGFyYWN0ZXJzIHRoYXQgYXJlIFVSTCBlbmNvZGVkICglWFggd2hlcmUgWFggaXMgYSB0d28tZGlnaXQgaGV4YWRlY2ltYWwgbnVtYmVyKSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGVpciBwbGFpbiB0ZXh0IHZlcnNpb25zLiAKKzxwIGNsYXNzPSJsZXZlbDAiPklmIHRoZSAnbGVuZ3RoJyBhcmd1bWVudCBpcyBzZXQgdG8gMCwgY3VybF91bmVzY2FwZSgpIHdpbGwgdXNlIHN0cmxlbigpIG9uIHRoZSBpbnB1dCAndXJsJyBzdHJpbmcgdG8gZmluZCBvdXQgdGhlIHNpemUuIAorPHAgY2xhc3M9ImxldmVsMCI+WW91IG11c3QgY3VybF9mcmVlKCkgdGhlIHJldHVybmVkIHN0cmluZyB3aGVuIHlvdSdyZSBkb25lIHdpdGggaXQuIDxhIG5hbWU9IkFWQUlMQUJJTElUWSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+QVZBSUxBQklMSVRZPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlNpbmNlIDcuMTUuNCwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV91bmVzY2FwZS5odG1sIj5jdXJsX2Vhc3lfdW5lc2NhcGUoMyk8L2E+IHNob3VsZCBiZSB1c2VkLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5BIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIG9yIE5VTEwgaWYgaXQgZmFpbGVkLiA8YSBuYW1lPSJTRUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNFRSBBTFNPPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9lYXN5X2VzY2FwZSgzKSwgY3VybF9lYXN5X3VuZXNjYXBlKDMpLCBjdXJsX2ZyZWUoMyksIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzIzOTYudHh0Ij5SRkMgMjM5NjwvYT48L3NwYW4+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdW5lc2NhcGUucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdW5lc2NhcGUucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NjVmOGEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF91bmVzY2FwZS5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdmVyc2lvbi4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdmVyc2lvbi4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMzMyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF92ZXJzaW9uLjMKQEAgLTAsMCArMSwzNiBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggY3VybF92ZXJzaW9uIDMgIjUgTWFyY2ggMjAwMSIgImxpYmN1cmwgNy4wIiAibGliY3VybCBNYW51YWwiCisuU0ggTkFNRQorY3VybF92ZXJzaW9uIC0gcmV0dXJucyB0aGUgbGliY3VybCB2ZXJzaW9uIHN0cmluZworLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+Cisuc3AKKy5CSSAiY2hhciAqY3VybF92ZXJzaW9uKCApOyIKKy5hZAorLlNIIERFU0NSSVBUSU9OCitSZXR1cm5zIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIHdpdGggdGhlIHZlcnNpb24gbnVtYmVyIG9mIGxpYmN1cmwgYW5kIHNvbWUgb2YKK2l0cyBpbXBvcnRhbnQgY29tcG9uZW50cyAobGlrZSBPcGVuU1NMIHZlcnNpb24pLgorLlNIIFJFVFVSTiBWQUxVRQorQSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZy4KKy5TSCAiU0VFIEFMU08iCisuQlIgY3VybF92ZXJzaW9uX2luZm8gIigzKSIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3ZlcnNpb24uaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3ZlcnNpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWNlNTMxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdmVyc2lvbi5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5jdXJsX3ZlcnNpb24gbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF92ZXJzaW9uIC0gcmV0dXJucyB0aGUgbGliY3VybCB2ZXJzaW9uIHN0cmluZyA8YSBuYW1lPSJTWU5PUFNJUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U1lOT1BTSVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPiNpbmNsdWRlICZsdDtjdXJsL2N1cmwuaCZndDs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImJvbGQiPmNoYXIgKmN1cmxfdmVyc2lvbiggKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlJldHVybnMgYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgd2l0aCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgbGliY3VybCBhbmQgc29tZSBvZiBpdHMgaW1wb3J0YW50IGNvbXBvbmVudHMgKGxpa2UgT3BlblNTTCB2ZXJzaW9uKS4gPGEgbmFtZT0iUkVUVVJOIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5SRVRVUk4gVkFMVUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+QSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZy4gPGEgbmFtZT0iU0VFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TRUUgQUxTTzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX3ZlcnNpb25faW5mby5odG1sIj5jdXJsX3ZlcnNpb25faW5mbyAoMyk8L2E+IDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdmVyc2lvbi5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF92ZXJzaW9uLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGU3ZDFmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdmVyc2lvbi5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdmVyc2lvbl9pbmZvLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF92ZXJzaW9uX2luZm8uMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2IyMDI4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdmVyc2lvbl9pbmZvLjMKQEAgLTAsMCArMSwxNTQgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuVEggY3VybF92ZXJzaW9uX2luZm8gMyAiMTAgSnVuZSAyMDA5IiAibGliY3VybCA3LjE5LjYiICJsaWJjdXJsIE1hbnVhbCIKKy5TSCBOQU1FCitjdXJsX3ZlcnNpb25faW5mbyAtIHJldHVybnMgcnVuLXRpbWUgbGliY3VybCB2ZXJzaW9uIGluZm8KKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorLnNwCisuQkkgImN1cmxfdmVyc2lvbl9pbmZvX2RhdGEgKmN1cmxfdmVyc2lvbl9pbmZvKCBDVVJMdmVyc2lvbiAidHlwZSAiKTsiCisuYWQKKy5TSCBERVNDUklQVElPTgorUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBmaWxsZWQgaW4gc3RydWN0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdmFyaW91cworcnVuLXRpbWUgZmVhdHVyZXMgaW4gbGliY3VybC4gXGZJdHlwZVxmUCBzaG91bGQgYmUgc2V0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMKK2Z1bmN0aW9uYWxpdHkgYnkgdGhlIHRpbWUgeW91IHdyaXRlIHlvdXIgcHJvZ3JhbS4gVGhpcyB3YXksIGxpYmN1cmwgd2lsbAorYWx3YXlzIHJldHVybiBhIHByb3BlciBzdHJ1Y3QgdGhhdCB5b3VyIHByb2dyYW0gdW5kZXJzdGFuZHMsIHdoaWxlIHByb2dyYW1zIGluCit0aGUgZnV0dXJlIG1pZ2h0IGdldCBhIGRpZmZlcmVudCBzdHJ1Y3QuIENVUkxWRVJTSU9OX05PVyB3aWxsIGJlIHRoZSBtb3N0CityZWNlbnQgb25lIGZvciB0aGUgbGlicmFyeSB5b3UgaGF2ZSBpbnN0YWxsZWQ6CisKKyAgICAgICAgZGF0YSA9IGN1cmxfdmVyc2lvbl9pbmZvKENVUkxWRVJTSU9OX05PVyk7CisKK0FwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8ganVkZ2UgaWYgdGhpbmdzIGFyZSBwb3NzaWJsZSB0byBkbworb3Igbm90LCBpbnN0ZWFkIG9mIHVzaW5nIGNvbXBpbGUtdGltZSBjaGVja3MsIGFzIGR5bmFtaWMvRExMIGxpYnJhcmllcyBjYW4gYmUKK2NoYW5nZWQgaW5kZXBlbmRlbnQgb2YgYXBwbGljYXRpb25zLgorCitUaGUgY3VybF92ZXJzaW9uX2luZm9fZGF0YSBzdHJ1Y3QgbG9va3MgbGlrZSB0aGlzCisKKy5uZgordHlwZWRlZiBzdHJ1Y3QgeworICBDVVJMdmVyc2lvbiBhZ2U7ICAgICAgICAgIC8qIHNlZSBkZXNjcmlwdGlvbiBiZWxvdyAqLworCisgIC8qIHdoZW4gJ2FnZScgaXMgMCBvciBoaWdoZXIsIHRoZSBtZW1iZXJzIGJlbG93IGFsc28gZXhpc3Q6ICovCisgIGNvbnN0IGNoYXIgKnZlcnNpb247ICAgICAgLyogaHVtYW4gcmVhZGFibGUgc3RyaW5nICovCisgIHVuc2lnbmVkIGludCB2ZXJzaW9uX251bTsgLyogbnVtZXJpYyByZXByZXNlbnRhdGlvbiAqLworICBjb25zdCBjaGFyICpob3N0OyAgICAgICAgIC8qIGh1bWFuIHJlYWRhYmxlIHN0cmluZyAqLworICBpbnQgZmVhdHVyZXM7ICAgICAgICAgICAgIC8qIGJpdG1hc2ssIHNlZSBiZWxvdyAqLworICBjaGFyICpzc2xfdmVyc2lvbjsgICAgICAgIC8qIGh1bWFuIHJlYWRhYmxlIHN0cmluZyAqLworICBsb25nIHNzbF92ZXJzaW9uX251bTsgICAgIC8qIG5vdCB1c2VkLCBhbHdheXMgemVybyAqLworICBjb25zdCBjaGFyICpsaWJ6X3ZlcnNpb247IC8qIGh1bWFuIHJlYWRhYmxlIHN0cmluZyAqLworICBjb25zdCBjaGFyICoqcHJvdG9jb2xzOyAgIC8qIGxpc3Qgb2YgcHJvdG9jb2xzICovCisKKyAgLyogd2hlbiAnYWdlJyBpcyAxIG9yIGhpZ2hlciwgdGhlIG1lbWJlcnMgYmVsb3cgYWxzbyBleGlzdDogKi8KKyAgY29uc3QgY2hhciAqYXJlczsgICAgICAgICAvKiBodW1hbiByZWFkYWJsZSBzdHJpbmcgKi8KKyAgaW50IGFyZXNfbnVtOyAgICAgICAgICAgICAvKiBudW1iZXIgKi8KKworICAvKiB3aGVuICdhZ2UnIGlzIDIgb3IgaGlnaGVyLCB0aGUgbWVtYmVyIGJlbG93IGFsc28gZXhpc3RzOiAqLworICBjb25zdCBjaGFyICpsaWJpZG47ICAgICAgIC8qIGh1bWFuIHJlYWRhYmxlIHN0cmluZyAqLworCisgIC8qIHdoZW4gJ2FnZScgaXMgMyBvciBoaWdoZXIsIHRoZSBtZW1iZXJzIGJlbG93IGFsc28gZXhpc3Q6ICovCisgIGludCBpY29udl92ZXJfbnVtOyAgICAgICAvKiAnX2xpYmljb252X3ZlcnNpb24nIGlmIGljb252IHN1cHBvcnQgZW5hYmxlZCAqLworCisgIGNvbnN0IGNoYXIgKmxpYnNzaF92ZXJzaW9uOyAvKiBodW1hbiByZWFkYWJsZSBzdHJpbmcgKi8KKworfSBjdXJsX3ZlcnNpb25faW5mb19kYXRhOworLmZpCisKK1xmSWFnZVxmUCBkZXNjcmliZXMgd2hhdCB0aGUgYWdlIG9mIHRoaXMgc3RydWN0IGlzLiBUaGUgbnVtYmVyIGRlcGVuZHMgb24gaG93CituZXcgdGhlIGxpYmN1cmwgeW91J3JlIHVzaW5nIGlzLiBZb3UgYXJlIGhvd2V2ZXIgZ3VhcmFudGVlZCB0byBnZXQgYSBzdHJ1Y3QgdGhhdCB5b3UKK2hhdmUgYSBtYXRjaGluZyBzdHJ1Y3QgZm9yIGluIHRoZSBoZWFkZXIsIGFzIHlvdSB0ZWxsIGxpYmN1cmwgeW91ciAiYWdlIiB3aXRoCit0aGUgaW5wdXQgYXJndW1lbnQuCisKK1xmSXZlcnNpb25cZlAgaXMganVzdCBhbiBhc2NpaSBzdHJpbmcgZm9yIHRoZSBsaWJjdXJsIHZlcnNpb24uCisKK1xmSXZlcnNpb25fbnVtXGZQIGlzIGEgMjQgYml0IG51bWJlciBjcmVhdGVkIGxpa2UgdGhpczogPDggYml0cyBtYWpvciBudW1iZXI+Cit8IDw4IGJpdHMgbWlub3IgbnVtYmVyPiB8IDw4IGJpdHMgcGF0Y2ggbnVtYmVyPi4gVmVyc2lvbiA3LjkuOCBpcyB0aGVyZWZvcmUKK3JldHVybmVkIGFzIDB4MDcwOTA4LgorCitcZklob3N0XGZQIGlzIGFuIGFzY2lpIHN0cmluZyBzaG93aW5nIHdoYXQgaG9zdCBpbmZvcm1hdGlvbiB0aGF0IHRoaXMgbGliY3VybAord2FzIGJ1aWx0IGZvci4gQXMgZGlzY292ZXJlZCBieSBhIGNvbmZpZ3VyZSBzY3JpcHQgb3Igc2V0IGJ5IHRoZSBidWlsZAorZW52aXJvbm1lbnQuCisKK1xmSWZlYXR1cmVzXGZQIGNhbiBoYXZlIG5vbmUsIG9uZSBvciBtb3JlIGJpdHMgc2V0LCBhbmQgdGhlIGN1cnJlbnRseSBkZWZpbmVkCitiaXRzIGFyZToKKy5SUworLklQIENVUkxfVkVSU0lPTl9JUFY2CitzdXBwb3J0cyBJUHY2CisuSVAgQ1VSTF9WRVJTSU9OX0tFUkJFUk9TNAorc3VwcG9ydHMga2VyYmVyb3M0ICh3aGVuIHVzaW5nIEZUUCkKKy5JUCBDVVJMX1ZFUlNJT05fU1NMCitzdXBwb3J0cyBTU0wgKEhUVFBTL0ZUUFMpIChBZGRlZCBpbiA3LjEwKQorLklQIENVUkxfVkVSU0lPTl9MSUJaCitzdXBwb3J0cyBIVFRQIGRlZmxhdGUgdXNpbmcgbGlieiAoQWRkZWQgaW4gNy4xMCkKKy5JUCBDVVJMX1ZFUlNJT05fTlRMTQorc3VwcG9ydHMgSFRUUCBOVExNIChhZGRlZCBpbiA3LjEwLjYpCisuSVAgQ1VSTF9WRVJTSU9OX0dTU05FR09USUFURQorc3VwcG9ydHMgSFRUUCBHU1MtTmVnb3RpYXRlIChhZGRlZCBpbiA3LjEwLjYpCisuSVAgQ1VSTF9WRVJTSU9OX0RFQlVHCitsaWJjdXJsIHdhcyBidWlsdCB3aXRoIGRlYnVnIGNhcGFiaWxpdGllcyAoYWRkZWQgaW4gNy4xMC42KQorLklQIENVUkxfVkVSU0lPTl9DVVJMREVCVUcKK2xpYmN1cmwgd2FzIGJ1aWx0IHdpdGggbWVtb3J5IHRyYWNraW5nIGRlYnVnIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBtYWlubHkgb2YKK2ludGVyZXN0IGZvciBsaWJjdXJsIGhhY2tlcnMuIChhZGRlZCBpbiA3LjE5LjYpCisuSVAgQ1VSTF9WRVJTSU9OX0FTWU5DSEROUworbGliY3VybCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciBhc3luY2hyb25vdXMgbmFtZSBsb29rdXBzLCB3aGljaCBhbGxvd3MKK21vcmUgZXhhY3QgdGltZW91dHMgKGV2ZW4gb24gV2luZG93cykgYW5kIGxlc3MgYmxvY2tpbmcgd2hlbiB1c2luZyB0aGUgbXVsdGkKK2ludGVyZmFjZS4gKGFkZGVkIGluIDcuMTAuNykKKy5JUCBDVVJMX1ZFUlNJT05fU1BORUdPCitsaWJjdXJsIHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIFNQTkVHTyBhdXRoZW50aWNhdGlvbiAoU2ltcGxlIGFuZCBQcm90ZWN0ZWQKK0dTUy1BUEkgTmVnb3RpYXRpb24gTWVjaGFuaXNtLCBkZWZpbmVkIGluIFJGQyAyNDc4LikgKGFkZGVkIGluIDcuMTAuOCkKKy5JUCBDVVJMX1ZFUlNJT05fTEFSR0VGSUxFCitsaWJjdXJsIHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzLiAoQWRkZWQgaW4gNy4xMS4xKQorLklQIENVUkxfVkVSU0lPTl9JRE4KK2xpYmN1cmwgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgSUROQSwgZG9tYWluIG5hbWVzIHdpdGggaW50ZXJuYXRpb25hbAorbGV0dGVycy4gKEFkZGVkIGluIDcuMTIuMCkKKy5JUCBDVVJMX1ZFUlNJT05fU1NQSQorbGliY3VybCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciBTU1BJLiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIG9uIFdpbmRvd3MgYW5kCittYWtlcyBsaWJjdXJsIHVzZSBXaW5kb3dzLXByb3ZpZGVkIGZ1bmN0aW9ucyBmb3IgTlRMTSBhdXRoZW50aWNhdGlvbi4gSXQgYWxzbworYWxsb3dzIGxpYmN1cmwgdG8gdXNlIHRoZSBjdXJyZW50IHVzZXIgYW5kIHRoZSBjdXJyZW50IHVzZXIncyBwYXNzd29yZCB3aXRob3V0Cit0aGUgYXBwIGhhdmluZyB0byBwYXNzIHRoZW0gb24uIChBZGRlZCBpbiA3LjEzLjIpCisuSVAgQ1VSTF9WRVJTSU9OX0NPTlYKK2xpYmN1cmwgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgY2hhcmFjdGVyIGNvbnZlcnNpb25zLCBhcyBwcm92aWRlZCBieSB0aGUKK0NVUkxPUFRfQ09OVl8qIGNhbGxiYWNrcy4gKEFkZGVkIGluIDcuMTUuNCkKKy5JUCBDVVJMX1ZFUlNJT05fVExTQVVUSF9TUlAKK2xpYmN1cmwgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgVExTLVNSUC4gKEFkZGVkIGluIDcuMjEuNCkKKy5JUCBDVVJMX1ZFUlNJT05fTlRMTV9XQgorbGliY3VybCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciBOVExNIGRlbGVnYXRpb24gdG8gYSB3aW5iaW5kIGhlbHBlci4KKyhBZGRlZCBpbiA3LjIyLjApCisuUkUKK1xmSXNzbF92ZXJzaW9uXGZQIGlzIGFuIEFTQ0lJIHN0cmluZyBmb3IgdGhlIE9wZW5TU0wgdmVyc2lvbiB1c2VkLiBJZiBsaWJjdXJsCitoYXMgbm8gU1NMIHN1cHBvcnQsIHRoaXMgaXMgTlVMTC4KKworXGZJc3NsX3ZlcnNpb25fbnVtXGZQIGlzIHRoZSBudW1lcmljYWwgT3BlblNTTCB2ZXJzaW9uIHZhbHVlIGFzIGRlZmluZWQgYnkgdGhlCitPcGVuU1NMIHByb2plY3QuIElmIGxpYmN1cmwgaGFzIG5vIFNTTCBzdXBwb3J0LCB0aGlzIGlzIDAuCisKK1xmSWxpYnpfdmVyc2lvblxmUCBpcyBhbiBBU0NJSSBzdHJpbmcgKHRoZXJlIGlzIG5vIG51bWVyaWNhbCB2ZXJzaW9uKS4gSWYKK2xpYmN1cmwgaGFzIG5vIGxpYnogc3VwcG9ydCwgdGhpcyBpcyBOVUxMLgorCitcZklwcm90b2NvbHNcZlAgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGNoYXIgKiBwb2ludGVycywgY29udGFpbmluZyB0aGUKK25hbWVzIHByb3RvY29scyB0aGF0IGxpYmN1cmwgc3VwcG9ydHMgKHVzaW5nIGxvd2VyY2FzZSBsZXR0ZXJzKS4gVGhlIHByb3RvY29sCituYW1lcyBhcmUgdGhlIHNhbWUgYXMgd291bGQgYmUgdXNlZCBpbiBVUkxzLiBUaGUgYXJyYXkgaXMgdGVybWluYXRlZCBieSBhIE5VTEwKK2VudHJ5LgorLlNIIFJFVFVSTiBWQUxVRQorQSBwb2ludGVyIHRvIGEgY3VybF92ZXJzaW9uX2luZm9fZGF0YSBzdHJ1Y3QuCisuU0ggIlNFRSBBTFNPIgorXGZJY3VybF92ZXJzaW9uKDMpXGZQCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3ZlcnNpb25faW5mby5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2N1cmxfdmVyc2lvbl9pbmZvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1MTdjMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3ZlcnNpb25faW5mby5odG1sCkBAIC0wLDAgKzEsMTEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+Y3VybF92ZXJzaW9uX2luZm8gbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQiPgorPFNUWUxFIHR5cGU9InRleHQvY3NzIj4KK1AubGV2ZWwwIHsKKyBwYWRkaW5nLWxlZnQ6IDJlbTsKK30KKworUC5sZXZlbDEgeworIHBhZGRpbmctbGVmdDogNGVtOworfQorCitQLmxldmVsMiB7CisgcGFkZGluZy1sZWZ0OiA2ZW07Cit9CisKK3NwYW4uZW1waGFzaXMgeworIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworc3Bhbi5ib2xkIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworc3Bhbi5tYW5wYWdlIHsKKyBmb250LXdlaWdodDogYm9sZDsKK30KKworaDIubnJvZmZzaCB7CisgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKK30KKworc3Bhbi5ucm9mZmlwIHsKKyBmb250LXdlaWdodDogYm9sZDsKKyBmb250LXNpemU6IDEyMCU7CisgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworcC5yb2ZmaXQgeworIHRleHQtYWxpZ246IGNlbnRlcjsKKyBmb250LXNpemU6IDgwJTsKK30KKzwvU1RZTEU+Cis8L2hlYWQ+PGJvZHk+CisKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ik5BTUUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk5BTUU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Y3VybF92ZXJzaW9uX2luZm8gLSByZXR1cm5zIHJ1bi10aW1lIGxpYmN1cmwgdmVyc2lvbiBpbmZvIDxhIG5hbWU9IlNZTk9QU0lTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TWU5PUFNJUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+I2luY2x1ZGUgJmx0O2N1cmwvY3VybC5oJmd0Ozwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iYm9sZCI+Y3VybF92ZXJzaW9uX2luZm9fZGF0YSAqY3VybF92ZXJzaW9uX2luZm8oIENVUkx2ZXJzaW9uIHR5cGUgKTs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlJldHVybnMgYSBwb2ludGVyIHRvIGEgZmlsbGVkIGluIHN0cnVjdCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHZhcmlvdXMgcnVuLXRpbWUgZmVhdHVyZXMgaW4gbGliY3VybC4gPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj50eXBlPC9zcGFuPiBzaG91bGQgYmUgc2V0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSBieSB0aGUgdGltZSB5b3Ugd3JpdGUgeW91ciBwcm9ncmFtLiBUaGlzIHdheSwgbGliY3VybCB3aWxsIGFsd2F5cyByZXR1cm4gYSBwcm9wZXIgc3RydWN0IHRoYXQgeW91ciBwcm9ncmFtIHVuZGVyc3RhbmRzLCB3aGlsZSBwcm9ncmFtcyBpbiB0aGUgZnV0dXJlIG1pZ2h0IGdldCBhIGRpZmZlcmVudCBzdHJ1Y3QuIENVUkxWRVJTSU9OX05PVyB3aWxsIGJlIHRoZSBtb3N0IHJlY2VudCBvbmUgZm9yIHRoZSBsaWJyYXJ5IHlvdSBoYXZlIGluc3RhbGxlZDogCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDsgICAgICAgZGF0YSA9IGN1cmxfdmVyc2lvbl9pbmZvKENVUkxWRVJTSU9OX05PVyk7IAorPHAgY2xhc3M9ImxldmVsMCI+QXBwbGljYXRpb25zIHNob3VsZCB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBqdWRnZSBpZiB0aGluZ3MgYXJlIHBvc3NpYmxlIHRvIGRvIG9yIG5vdCwgaW5zdGVhZCBvZiB1c2luZyBjb21waWxlLXRpbWUgY2hlY2tzLCBhcyBkeW5hbWljL0RMTCBsaWJyYXJpZXMgY2FuIGJlIGNoYW5nZWQgaW5kZXBlbmRlbnQgb2YgYXBwbGljYXRpb25zLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBjdXJsX3ZlcnNpb25faW5mb19kYXRhIHN0cnVjdCBsb29rcyBsaWtlIHRoaXMgCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPnR5cGVkZWYgc3RydWN0IHsgJm5ic3A7IENVUkx2ZXJzaW9uIGFnZTsgICAgICAgICAgLyogc2VlIGRlc2NyaXB0aW9uIGJlbG93ICovIAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7IC8qIHdoZW4gJ2FnZScgaXMgMCBvciBoaWdoZXIsIHRoZSBtZW1iZXJzIGJlbG93IGFsc28gZXhpc3Q6ICovICZuYnNwOyBjb25zdCBjaGFyICp2ZXJzaW9uOyAgICAgIC8qIGh1bWFuIHJlYWRhYmxlIHN0cmluZyAqLyAmbmJzcDsgdW5zaWduZWQgaW50IHZlcnNpb25fbnVtOyAvKiBudW1lcmljIHJlcHJlc2VudGF0aW9uICovICZuYnNwOyBjb25zdCBjaGFyICpob3N0OyAgICAgICAgIC8qIGh1bWFuIHJlYWRhYmxlIHN0cmluZyAqLyAmbmJzcDsgaW50IGZlYXR1cmVzOyAgICAgICAgICAgICAvKiBiaXRtYXNrLCBzZWUgYmVsb3cgKi8gJm5ic3A7IGNoYXIgKnNzbF92ZXJzaW9uOyAgICAgICAgLyogaHVtYW4gcmVhZGFibGUgc3RyaW5nICovICZuYnNwOyBsb25nIHNzbF92ZXJzaW9uX251bTsgICAgIC8qIG5vdCB1c2VkLCBhbHdheXMgemVybyAqLyAmbmJzcDsgY29uc3QgY2hhciAqbGliel92ZXJzaW9uOyAvKiBodW1hbiByZWFkYWJsZSBzdHJpbmcgKi8gJm5ic3A7IGNvbnN0IGNoYXIgKipwcm90b2NvbHM7ICAgLyogbGlzdCBvZiBwcm90b2NvbHMgKi8gCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDsgLyogd2hlbiAnYWdlJyBpcyAxIG9yIGhpZ2hlciwgdGhlIG1lbWJlcnMgYmVsb3cgYWxzbyBleGlzdDogKi8gJm5ic3A7IGNvbnN0IGNoYXIgKmFyZXM7ICAgICAgICAgLyogaHVtYW4gcmVhZGFibGUgc3RyaW5nICovICZuYnNwOyBpbnQgYXJlc19udW07ICAgICAgICAgICAgIC8qIG51bWJlciAqLyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOyAvKiB3aGVuICdhZ2UnIGlzIDIgb3IgaGlnaGVyLCB0aGUgbWVtYmVyIGJlbG93IGFsc28gZXhpc3RzOiAqLyAmbmJzcDsgY29uc3QgY2hhciAqbGliaWRuOyAgICAgICAvKiBodW1hbiByZWFkYWJsZSBzdHJpbmcgKi8gCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDsgLyogd2hlbiAnYWdlJyBpcyAzIG9yIGhpZ2hlciwgdGhlIG1lbWJlcnMgYmVsb3cgYWxzbyBleGlzdDogKi8gJm5ic3A7IGludCBpY29udl92ZXJfbnVtOyAgICAgICAvKiAnX2xpYmljb252X3ZlcnNpb24nIGlmIGljb252IHN1cHBvcnQgZW5hYmxlZCAqLyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOyBjb25zdCBjaGFyICpsaWJzc2hfdmVyc2lvbjsgLyogaHVtYW4gcmVhZGFibGUgc3RyaW5nICovIAorPHAgY2xhc3M9ImxldmVsMCI+fSBjdXJsX3ZlcnNpb25faW5mb19kYXRhOyAKKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5hZ2U8L3NwYW4+IGRlc2NyaWJlcyB3aGF0IHRoZSBhZ2Ugb2YgdGhpcyBzdHJ1Y3QgaXMuIFRoZSBudW1iZXIgZGVwZW5kcyBvbiBob3cgbmV3IHRoZSBsaWJjdXJsIHlvdSdyZSB1c2luZyBpcy4gWW91IGFyZSBob3dldmVyIGd1YXJhbnRlZWQgdG8gZ2V0IGEgc3RydWN0IHRoYXQgeW91IGhhdmUgYSBtYXRjaGluZyBzdHJ1Y3QgZm9yIGluIHRoZSBoZWFkZXIsIGFzIHlvdSB0ZWxsIGxpYmN1cmwgeW91ciAiYWdlIiB3aXRoIHRoZSBpbnB1dCBhcmd1bWVudC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iZW1waGFzaXMiPnZlcnNpb248L3NwYW4+IGlzIGp1c3QgYW4gYXNjaWkgc3RyaW5nIGZvciB0aGUgbGliY3VybCB2ZXJzaW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJlbXBoYXNpcyI+dmVyc2lvbl9udW08L3NwYW4+IGlzIGEgMjQgYml0IG51bWJlciBjcmVhdGVkIGxpa2UgdGhpczogJmx0OzggYml0cyBtYWpvciBudW1iZXImZ3Q7IHwgJmx0OzggYml0cyBtaW5vciBudW1iZXImZ3Q7IHwgJmx0OzggYml0cyBwYXRjaCBudW1iZXImZ3Q7LiBWZXJzaW9uIDcuOS44IGlzIHRoZXJlZm9yZSByZXR1cm5lZCBhcyAweDA3MDkwOC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iZW1waGFzaXMiPmhvc3Q8L3NwYW4+IGlzIGFuIGFzY2lpIHN0cmluZyBzaG93aW5nIHdoYXQgaG9zdCBpbmZvcm1hdGlvbiB0aGF0IHRoaXMgbGliY3VybCB3YXMgYnVpbHQgZm9yLiBBcyBkaXNjb3ZlcmVkIGJ5IGEgY29uZmlndXJlIHNjcmlwdCBvciBzZXQgYnkgdGhlIGJ1aWxkIGVudmlyb25tZW50LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJlbXBoYXNpcyI+ZmVhdHVyZXM8L3NwYW4+IGNhbiBoYXZlIG5vbmUsIG9uZSBvciBtb3JlIGJpdHMgc2V0LCBhbmQgdGhlIGN1cnJlbnRseSBkZWZpbmVkIGJpdHMgYXJlOiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFZFUlNJT05JUFY2Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfVkVSU0lPTl9JUFY2PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPnN1cHBvcnRzIElQdjYgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMVkVSU0lPTktFUkJFUk9TNCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1ZFUlNJT05fS0VSQkVST1M0PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPnN1cHBvcnRzIGtlcmJlcm9zNCAod2hlbiB1c2luZyBGVFApIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFZFUlNJT05TU0wiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9WRVJTSU9OX1NTTDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5zdXBwb3J0cyBTU0wgKEhUVFBTL0ZUUFMpIChBZGRlZCBpbiA3LjEwKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxWRVJTSU9OTElCWiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1ZFUlNJT05fTElCWjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5zdXBwb3J0cyBIVFRQIGRlZmxhdGUgdXNpbmcgbGlieiAoQWRkZWQgaW4gNy4xMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMVkVSU0lPTk5UTE0iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9WRVJTSU9OX05UTE08L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+c3VwcG9ydHMgSFRUUCBOVExNIChhZGRlZCBpbiA3LjEwLjYpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFZFUlNJT05HU1NORUdPVElBVEUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9WRVJTSU9OX0dTU05FR09USUFURTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5zdXBwb3J0cyBIVFRQIEdTUy1OZWdvdGlhdGUgKGFkZGVkIGluIDcuMTAuNikgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMVkVSU0lPTkRFQlVHIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfVkVSU0lPTl9ERUJVRzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5saWJjdXJsIHdhcyBidWlsdCB3aXRoIGRlYnVnIGNhcGFiaWxpdGllcyAoYWRkZWQgaW4gNy4xMC42KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxWRVJTSU9OQ1VSTERFQlVHIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfVkVSU0lPTl9DVVJMREVCVUc8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+bGliY3VybCB3YXMgYnVpbHQgd2l0aCBtZW1vcnkgdHJhY2tpbmcgZGVidWcgY2FwYWJpbGl0aWVzLiBUaGlzIGlzIG1haW5seSBvZiBpbnRlcmVzdCBmb3IgbGliY3VybCBoYWNrZXJzLiAoYWRkZWQgaW4gNy4xOS42KSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxWRVJTSU9OQVNZTkNIRE5TIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfVkVSU0lPTl9BU1lOQ0hETlM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+bGliY3VybCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciBhc3luY2hyb25vdXMgbmFtZSBsb29rdXBzLCB3aGljaCBhbGxvd3MgbW9yZSBleGFjdCB0aW1lb3V0cyAoZXZlbiBvbiBXaW5kb3dzKSBhbmQgbGVzcyBibG9ja2luZyB3aGVuIHVzaW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UuIChhZGRlZCBpbiA3LjEwLjcpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFZFUlNJT05TUE5FR08iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9WRVJTSU9OX1NQTkVHTzwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5saWJjdXJsIHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIFNQTkVHTyBhdXRoZW50aWNhdGlvbiAoU2ltcGxlIGFuZCBQcm90ZWN0ZWQgR1NTLUFQSSBOZWdvdGlhdGlvbiBNZWNoYW5pc20sIGRlZmluZWQgaW4gPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjQ3OC50eHQiPlJGQyAyNDc4PC9hPi4pIChhZGRlZCBpbiA3LjEwLjgpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFZFUlNJT05MQVJHRUZJTEUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9WRVJTSU9OX0xBUkdFRklMRTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5saWJjdXJsIHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzLiAoQWRkZWQgaW4gNy4xMS4xKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxWRVJTSU9OSUROIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfVkVSU0lPTl9JRE48L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+bGliY3VybCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciBJRE5BLCBkb21haW4gbmFtZXMgd2l0aCBpbnRlcm5hdGlvbmFsIGxldHRlcnMuIChBZGRlZCBpbiA3LjEyLjApIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFZFUlNJT05TU1BJIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfVkVSU0lPTl9TU1BJPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPmxpYmN1cmwgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgU1NQSS4gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBvbiBXaW5kb3dzIGFuZCBtYWtlcyBsaWJjdXJsIHVzZSBXaW5kb3dzLXByb3ZpZGVkIGZ1bmN0aW9ucyBmb3IgTlRMTSBhdXRoZW50aWNhdGlvbi4gSXQgYWxzbyBhbGxvd3MgbGliY3VybCB0byB1c2UgdGhlIGN1cnJlbnQgdXNlciBhbmQgdGhlIGN1cnJlbnQgdXNlcidzIHBhc3N3b3JkIHdpdGhvdXQgdGhlIGFwcCBoYXZpbmcgdG8gcGFzcyB0aGVtIG9uLiAoQWRkZWQgaW4gNy4xMy4yKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxWRVJTSU9OQ09OViI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1ZFUlNJT05fQ09OVjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5saWJjdXJsIHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIGNoYXJhY3RlciBjb252ZXJzaW9ucywgYXMgcHJvdmlkZWQgYnkgdGhlIENVUkxPUFRfQ09OVl8qIGNhbGxiYWNrcy4gKEFkZGVkIGluIDcuMTUuNCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMVkVSU0lPTlRMU0FVVEhTUlAiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTF9WRVJTSU9OX1RMU0FVVEhfU1JQPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPmxpYmN1cmwgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgVExTLVNSUC4gKEFkZGVkIGluIDcuMjEuNCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMVkVSU0lPTk5UTE1XQiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX1ZFUlNJT05fTlRMTV9XQjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5saWJjdXJsIHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIE5UTE0gZGVsZWdhdGlvbiB0byBhIHdpbmJpbmQgaGVscGVyLiAoQWRkZWQgaW4gNy4yMi4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJlbXBoYXNpcyI+c3NsX3ZlcnNpb248L3NwYW4+IGlzIGFuIEFTQ0lJIHN0cmluZyBmb3IgdGhlIE9wZW5TU0wgdmVyc2lvbiB1c2VkLiBJZiBsaWJjdXJsIGhhcyBubyBTU0wgc3VwcG9ydCwgdGhpcyBpcyBOVUxMLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJlbXBoYXNpcyI+c3NsX3ZlcnNpb25fbnVtPC9zcGFuPiBpcyB0aGUgbnVtZXJpY2FsIE9wZW5TU0wgdmVyc2lvbiB2YWx1ZSBhcyBkZWZpbmVkIGJ5IHRoZSBPcGVuU1NMIHByb2plY3QuIElmIGxpYmN1cmwgaGFzIG5vIFNTTCBzdXBwb3J0LCB0aGlzIGlzIDAuIAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5saWJ6X3ZlcnNpb248L3NwYW4+IGlzIGFuIEFTQ0lJIHN0cmluZyAodGhlcmUgaXMgbm8gbnVtZXJpY2FsIHZlcnNpb24pLiBJZiBsaWJjdXJsIGhhcyBubyBsaWJ6IHN1cHBvcnQsIHRoaXMgaXMgTlVMTC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iZW1waGFzaXMiPnByb3RvY29sczwvc3Bhbj4gaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGNoYXIgKiBwb2ludGVycywgY29udGFpbmluZyB0aGUgbmFtZXMgcHJvdG9jb2xzIHRoYXQgbGliY3VybCBzdXBwb3J0cyAodXNpbmcgbG93ZXJjYXNlIGxldHRlcnMpLiBUaGUgcHJvdG9jb2wgbmFtZXMgYXJlIHRoZSBzYW1lIGFzIHdvdWxkIGJlIHVzZWQgaW4gVVJMcy4gVGhlIGFycmF5IGlzIHRlcm1pbmF0ZWQgYnkgYSBOVUxMIGVudHJ5LiA8YSBuYW1lPSJSRVRVUk4iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlJFVFVSTiBWQUxVRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5BIHBvaW50ZXIgdG8gYSBjdXJsX3ZlcnNpb25faW5mb19kYXRhIHN0cnVjdC4gPGEgbmFtZT0iU0VFIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TRUUgQUxTTzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF92ZXJzaW9uLmh0bWwiPmN1cmxfdmVyc2lvbigzKTwvYT4gCis8cCBjbGFzcz0ibGV2ZWwwIj48cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9jdXJsX3ZlcnNpb25faW5mby5wZGYgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF92ZXJzaW9uX2luZm8ucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOTE1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvY3VybF92ZXJzaW9uX2luZm8ucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9pbmRleC5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3YTJkZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9pbmRleC5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5JbmRleCB0byBsaWJjdXJsIGRvY3VtZW50YXRpb248L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMSBhbGlnbj0iY2VudGVyIj5JbmRleCB0byBsaWJjdXJsIGRvY3VtZW50YXRpb248L2gxPgorCis8aDI+UHJvZ3JhbXM8L2gyPgorPHA+PGEgaHJlZj0iLi4vaW5kZXguaHRtbCI+Y3VybCBhbmQgdG9vbHM8L2E+CisKKzxoMj5PdmVydmlld3M8L2gyPgorPEEgSFJFRj0ibGliY3VybC5odG1sIj5saWJjdXJsPC9BPgorPGJyPjxhIGhyZWY9ImxpYmN1cmwtZWFzeS5odG1sIj5saWJjdXJsLWVhc3k8L2E+Cis8YnI+PGEgaHJlZj0ibGliY3VybC1tdWx0aS5odG1sIj5saWJjdXJsLW11bHRpPC9hPgorPGJyPjxhIGhyZWY9ImxpYmN1cmwtc2hhcmUuaHRtbCI+bGliY3VybC1zaGFyZTwvYT4KKzxicj48YSBocmVmPSJsaWJjdXJsLWVycm9ycy5odG1sIj5saWJjdXJsLWVycm9yczwvYT4KKzxicj48YSBocmVmPSJsaWJjdXJsLXR1dG9yaWFsLmh0bWwiPmxpYmN1cmwtdHV0b3JpYWw8L2E+CisKKzxIMj5MaWJyYXJ5IEZ1bmN0aW9ucyAoQS1aKTwvSDI+Cis8YSBocmVmPSJjdXJsX2Vhc3lfY2xlYW51cC5odG1sIj5jdXJsX2Vhc3lfY2xlYW51cDwvQT4KKzxicj48YSBocmVmPSJjdXJsX2Vhc3lfZHVwaGFuZGxlLmh0bWwiPmN1cmxfZWFzeV9kdXBoYW5kbGU8L0E+Cis8YnI+PGEgaHJlZj0iY3VybF9lYXN5X2dldGluZm8uaHRtbCI+Y3VybF9lYXN5X2dldGluZm88L0E+Cis8YnI+PGEgaHJlZj0iY3VybF9lYXN5X2luaXQuaHRtbCI+Y3VybF9lYXN5X2luaXQ8L0E+Cis8YnI+PGEgaHJlZj0iY3VybF9lYXN5X3BlcmZvcm0uaHRtbCI+Y3VybF9lYXN5X3BlcmZvcm08L0E+Cis8YnI+PGEgaHJlZj0iY3VybF9lYXN5X3JlY3YuaHRtbCI+Y3VybF9lYXN5X3JlY3Y8L0E+Cis8YnI+PGEgaHJlZj0iY3VybF9lYXN5X3Jlc2V0Lmh0bWwiPmN1cmxfZWFzeV9yZXNldDwvQT4KKzxicj48YSBocmVmPSJjdXJsX2Vhc3lfc2VuZC5odG1sIj5jdXJsX2Vhc3lfc2VuZDwvQT4KKzxicj48YSBocmVmPSJjdXJsX2Vhc3lfc2V0b3B0Lmh0bWwiPmN1cmxfZWFzeV9zZXRvcHQ8L0E+Cis8YnI+PGEgaHJlZj0iY3VybF9lYXN5X3N0cmVycm9yLmh0bWwiPmN1cmxfZWFzeV9zdHJlcnJvcjwvQT4KKzxicj48YSBocmVmPSJjdXJsX2VzY2FwZS5odG1sIj5jdXJsX2VzY2FwZTwvQT4KKzxicj48YSBocmVmPSJjdXJsX2Zvcm1hZGQuaHRtbCI+Y3VybF9mb3JtYWRkPC9BPgorPGJyPjxhIGhyZWY9ImN1cmxfZm9ybWZyZWUuaHRtbCI+Y3VybF9mb3JtZnJlZTwvQT4KKzxicj48YSBocmVmPSJjdXJsX2ZyZWUuaHRtbCI+Y3VybF9mcmVlPC9BPgorPGJyPjxhIGhyZWY9ImN1cmxfZ2V0ZGF0ZS5odG1sIj5jdXJsX2dldGRhdGU8L0E+Cis8YnI+PGEgaHJlZj0iY3VybF9nZXRlbnYuaHRtbCI+Y3VybF9nZXRlbnY8L0E+Cis8YnI+PGEgaHJlZj0iY3VybF9nbG9iYWxfY2xlYW51cC5odG1sIj5jdXJsX2dsb2JhbF9jbGVhbnVwPC9BPgorPGJyPjxhIGhyZWY9ImN1cmxfZ2xvYmFsX2luaXQuaHRtbCI+Y3VybF9nbG9iYWxfaW5pdDwvQT4KKzxicj48YSBocmVmPSJjdXJsX2dsb2JhbF9pbml0X21lbS5odG1sIj5jdXJsX2dsb2JhbF9pbml0X21lbTwvQT4KKzxicj48YSBocmVmPSJjdXJsX21wcmludGYuaHRtbCI+Y3VybF9tcHJpbnRmPC9BPgorPGJyPjxhIGhyZWY9ImN1cmxfbXVsdGlfYWRkX2hhbmRsZS5odG1sIj5jdXJsX211bHRpX2FkZF9oYW5kbGU8L2E+Cis8YnI+PGEgaHJlZj0iY3VybF9tdWx0aV9jbGVhbnVwLmh0bWwiPmN1cmxfbXVsdGlfY2xlYW51cDwvYT4KKzxicj48YSBocmVmPSJjdXJsX211bHRpX2Zkc2V0Lmh0bWwiPmN1cmxfbXVsdGlfZmRzZXQ8L2E+Cis8YnI+PGEgaHJlZj0iY3VybF9tdWx0aV9pbmZvX3JlYWQuaHRtbCI+Y3VybF9tdWx0aV9pbmZvX3JlYWQ8L2E+Cis8YnI+PGEgaHJlZj0iY3VybF9tdWx0aV9pbml0Lmh0bWwiPmN1cmxfbXVsdGlfaW5pdDwvYT4KKzxicj48YSBocmVmPSJjdXJsX211bHRpX3BlcmZvcm0uaHRtbCI+Y3VybF9tdWx0aV9wZXJmb3JtPC9hPgorPGJyPjxhIGhyZWY9ImN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZS5odG1sIj5jdXJsX211bHRpX3JlbW92ZV9oYW5kbGU8L2E+Cis8YnI+PGEgaHJlZj0iY3VybF9tdWx0aV9zdHJlcnJvci5odG1sIj5jdXJsX211bHRpX3N0cmVycm9yLmh0bWw8L2E+Cis8YnI+PGEgaHJlZj0iY3VybF9zaGFyZV9jbGVhbnVwLmh0bWwiPmN1cmxfc2hhcmVfY2xlYW51cDwvQT4KKzxicj48YSBocmVmPSJjdXJsX3NoYXJlX2luaXQuaHRtbCI+Y3VybF9zaGFyZV9pbml0PC9BPgorPGJyPjxhIGhyZWY9ImN1cmxfc2hhcmVfc2V0b3B0Lmh0bWwiPmN1cmxfc2hhcmVfc2V0b3B0PC9BPgorPGJyPjxhIGhyZWY9ImN1cmxfc2hhcmVfc3RyZXJyb3IuaHRtbCI+Y3VybF9zaGFyZV9zdHJlcnJvci5odG1sPC9hPgorPGJyPjxhIGhyZWY9ImN1cmxfc2xpc3RfYXBwZW5kLmh0bWwiPmN1cmxfc2xpc3RfYXBwZW5kPC9BPgorPGJyPjxhIGhyZWY9ImN1cmxfc2xpc3RfZnJlZV9hbGwuaHRtbCI+Y3VybF9zbGlzdF9mcmVlX2FsbDwvQT4KKzxicj48YSBocmVmPSJjdXJsX3N0cmVxdWFsLmh0bWwiPmN1cmxfc3RyZXF1YWwgYW5kIGN1cmxfc3RybmVxdWFsPC9BPgorPGJyPjxhIGhyZWY9ImN1cmxfdW5lc2NhcGUuaHRtbCI+Y3VybF91bmVzY2FwZTwvQT4KKzxicj48YSBocmVmPSJjdXJsX3ZlcnNpb24uaHRtbCI+Y3VybF92ZXJzaW9uPC9BPgorPGJyPjxhIGhyZWY9ImN1cmxfdmVyc2lvbl9pbmZvLmh0bWwiPmN1cmxfdmVyc2lvbl9pbmZvPC9BPgorCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtZWFzeS4zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtZWFzeS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OGE0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC1lYXN5LjMKQEAgLTAsMCArMSw0NSBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuVEggbGliY3VybCAzICIxMiBBdWcgMjAwMyIgImxpYmN1cmwgNy4xMC43IiAibGliY3VybCBlYXN5IGludGVyZmFjZSIKKy5TSCBOQU1FCitsaWJjdXJsLWVhc3kgXC0gZWFzeSBpbnRlcmZhY2Ugb3ZlcnZpZXcKKy5TSCBERVNDUklQVElPTgorV2hlbiB1c2luZyBsaWJjdXJsJ3MgImVhc3kiIGludGVyZmFjZSB5b3UgaW5pdCB5b3VyIHNlc3Npb24gYW5kIGdldCBhIGhhbmRsZQorKG9mdGVuIHJlZmVycmVkIHRvIGFzIGFuICJlYXN5IGhhbmRsZSIpLCB3aGljaCB5b3UgdXNlIGFzIGlucHV0IHRvIHRoZSBlYXN5CitpbnRlcmZhY2UgZnVuY3Rpb25zIHlvdSB1c2UuIFVzZSBcZkljdXJsX2Vhc3lfaW5pdCgzKVxmUCB0byBnZXQgdGhlIGhhbmRsZS4KKworWW91IGNvbnRpbnVlIGJ5IHNldHRpbmcgYWxsIHRoZSBvcHRpb25zIHlvdSB3YW50IGluIHRoZSB1cGNvbWluZyB0cmFuc2ZlciwgdGhlCittb3N0IGltcG9ydGFudCBhbW9uZyB0aGVtIGlzIHRoZSBVUkwgaXRzZWxmICh5b3UgY2FuJ3QgdHJhbnNmZXIgYW55dGhpbmcKK3dpdGhvdXQgYSBzcGVjaWZpZWQgVVJMIGFzIHlvdSBtYXkgaGF2ZSBmaWd1cmVkIG91dCB5b3Vyc2VsZikuIFlvdSBtaWdodCB3YW50Cit0byBzZXQgc29tZSBjYWxsYmFja3MgYXMgd2VsbCB0aGF0IHdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIGxpYnJhcnkgd2hlbiBkYXRhCitpcyBhdmFpbGFibGUgZXRjLiBcZkljdXJsX2Vhc3lfc2V0b3B0KDMpXGZQIGlzIHVzZWQgZm9yIGFsbCB0aGlzLgorCitXaGVuIGFsbCBpcyBzZXR1cCwgeW91IHRlbGwgbGliY3VybCB0byBwZXJmb3JtIHRoZSB0cmFuc2ZlciB1c2luZworXGZJY3VybF9lYXN5X3BlcmZvcm0oMylcZlAuICBJdCB3aWxsIHRoZW4gZG8gdGhlIGVudGlyZSBvcGVyYXRpb24gYW5kIHdvbid0CityZXR1cm4gdW50aWwgaXQgaXMgZG9uZSAoc3VjY2Vzc2Z1bGx5IG9yIG5vdCkuCisKK0FmdGVyIHRoZSB0cmFuc2ZlciBoYXMgYmVlbiBtYWRlLCB5b3UgY2FuIHNldCBuZXcgb3B0aW9ucyBhbmQgbWFrZSBhbm90aGVyCit0cmFuc2Zlciwgb3IgaWYgeW91J3JlIGRvbmUsIGNsZWFudXAgdGhlIHNlc3Npb24gYnkgY2FsbGluZworXGZJY3VybF9lYXN5X2NsZWFudXAoMylcZlAuIElmIHlvdSB3YW50IHBlcnNpc3RlbnQgY29ubmVjdGlvbnMsIHlvdSBkb24ndAorY2xlYW51cCBpbW1lZGlhdGVseSwgYnV0IGluc3RlYWQgcnVuIGFoZWFkIGFuZCBwZXJmb3JtIG90aGVyIHRyYW5zZmVycyB1c2luZwordGhlIHNhbWUgZWFzeSBoYW5kbGUuCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLWVhc3kuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLWVhc3kuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTA0MTFmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtZWFzeS5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5saWJjdXJsIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmxpYmN1cmwtZWFzeSAtIGVhc3kgaW50ZXJmYWNlIG92ZXJ2aWV3IDxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5XaGVuIHVzaW5nIGxpYmN1cmwncyAiZWFzeSIgaW50ZXJmYWNlIHlvdSBpbml0IHlvdXIgc2Vzc2lvbiBhbmQgZ2V0IGEgaGFuZGxlIChvZnRlbiByZWZlcnJlZCB0byBhcyBhbiAiZWFzeSBoYW5kbGUiKSwgd2hpY2ggeW91IHVzZSBhcyBpbnB1dCB0byB0aGUgZWFzeSBpbnRlcmZhY2UgZnVuY3Rpb25zIHlvdSB1c2UuIFVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X2luaXQuaHRtbCI+Y3VybF9lYXN5X2luaXQoMyk8L2E+IHRvIGdldCB0aGUgaGFuZGxlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPllvdSBjb250aW51ZSBieSBzZXR0aW5nIGFsbCB0aGUgb3B0aW9ucyB5b3Ugd2FudCBpbiB0aGUgdXBjb21pbmcgdHJhbnNmZXIsIHRoZSBtb3N0IGltcG9ydGFudCBhbW9uZyB0aGVtIGlzIHRoZSBVUkwgaXRzZWxmICh5b3UgY2FuJ3QgdHJhbnNmZXIgYW55dGhpbmcgd2l0aG91dCBhIHNwZWNpZmllZCBVUkwgYXMgeW91IG1heSBoYXZlIGZpZ3VyZWQgb3V0IHlvdXJzZWxmKS4gWW91IG1pZ2h0IHdhbnQgdG8gc2V0IHNvbWUgY2FsbGJhY2tzIGFzIHdlbGwgdGhhdCB3aWxsIGJlIGNhbGxlZCBmcm9tIHRoZSBsaWJyYXJ5IHdoZW4gZGF0YSBpcyBhdmFpbGFibGUgZXRjLiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3NldG9wdC5odG1sIj5jdXJsX2Vhc3lfc2V0b3B0KDMpPC9hPiBpcyB1c2VkIGZvciBhbGwgdGhpcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5XaGVuIGFsbCBpcyBzZXR1cCwgeW91IHRlbGwgbGliY3VybCB0byBwZXJmb3JtIHRoZSB0cmFuc2ZlciB1c2luZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3BlcmZvcm0uaHRtbCI+Y3VybF9lYXN5X3BlcmZvcm0oMyk8L2E+LiAgSXQgd2lsbCB0aGVuIGRvIHRoZSBlbnRpcmUgb3BlcmF0aW9uIGFuZCB3b24ndCByZXR1cm4gdW50aWwgaXQgaXMgZG9uZSAoc3VjY2Vzc2Z1bGx5IG9yIG5vdCkuIAorPHAgY2xhc3M9ImxldmVsMCI+QWZ0ZXIgdGhlIHRyYW5zZmVyIGhhcyBiZWVuIG1hZGUsIHlvdSBjYW4gc2V0IG5ldyBvcHRpb25zIGFuZCBtYWtlIGFub3RoZXIgdHJhbnNmZXIsIG9yIGlmIHlvdSdyZSBkb25lLCBjbGVhbnVwIHRoZSBzZXNzaW9uIGJ5IGNhbGxpbmcgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9jbGVhbnVwLmh0bWwiPmN1cmxfZWFzeV9jbGVhbnVwKDMpPC9hPi4gSWYgeW91IHdhbnQgcGVyc2lzdGVudCBjb25uZWN0aW9ucywgeW91IGRvbid0IGNsZWFudXAgaW1tZWRpYXRlbHksIGJ1dCBpbnN0ZWFkIHJ1biBhaGVhZCBhbmQgcGVyZm9ybSBvdGhlciB0cmFuc2ZlcnMgdXNpbmcgdGhlIHNhbWUgZWFzeSBoYW5kbGUuIAorPHAgY2xhc3M9ImxldmVsMCI+PHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC1lYXN5LnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLWVhc3kucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYjVjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC1lYXN5LnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC1lcnJvcnMuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLWVycm9ycy4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZDFmYWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC1lcnJvcnMuMwpAQCAtMCwwICsxLDI4NiBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCBsaWJjdXJsLWVycm9ycyAzICIxIEphbiAyMDEwIiAibGliY3VybCA3LjIwLjAiICJsaWJjdXJsIGVycm9ycyIKKy5TSCBOQU1FCitsaWJjdXJsLWVycm9ycyBcLSBlcnJvciBjb2RlcyBpbiBsaWJjdXJsCisuU0ggREVTQ1JJUFRJT04KK1RoaXMgbWFuIHBhZ2UgaW5jbHVkZXMgbW9zdCwgaWYgbm90IGFsbCwgYXZhaWxhYmxlIGVycm9yIGNvZGVzIGluIGxpYmN1cmwuCitXaHkgdGhleSBvY2N1ciBhbmQgcG9zc2libHkgd2hhdCB5b3UgY2FuIGRvIHRvIGZpeCB0aGUgcHJvYmxlbSBhcmUgYWxzbyBpbmNsdWRlZC4KKy5TSCAiQ1VSTGNvZGUiCitBbG1vc3QgYWxsICJlYXN5IiBpbnRlcmZhY2UgZnVuY3Rpb25zIHJldHVybiBhIENVUkxjb2RlIGVycm9yIGNvZGUuIE5vIG1hdHRlcgord2hhdCwgdXNpbmcgdGhlIFxmSWN1cmxfZWFzeV9zZXRvcHQoMylcZlAgb3B0aW9uIFxmSUNVUkxPUFRfRVJST1JCVUZGRVJcZlAgaXMKK2EgZ29vZCBpZGVhIGFzIGl0IHdpbGwgZ2l2ZSB5b3UgYSBodW1hbiByZWFkYWJsZSBlcnJvciBzdHJpbmcgdGhhdCBtYXkgb2ZmZXIKK21vcmUgZGV0YWlscyBhYm91dCB0aGUgY2F1c2Ugb2YgdGhlIGVycm9yIHRoYW4ganVzdCB0aGUgZXJyb3IgY29kZS4KK1xmSWN1cmxfZWFzeV9zdHJlcnJvcigzKVxmUCBjYW4gYmUgY2FsbGVkIHRvIGdldCBhbiBlcnJvciBzdHJpbmcgZnJvbSBhCitnaXZlbiBDVVJMY29kZSBudW1iZXIuCisKK0NVUkxjb2RlIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLklQICJDVVJMRV9PSyAoMCkiCitBbGwgZmluZS4gUHJvY2VlZCBhcyB1c3VhbC4KKy5JUCAiQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0wgKDEpIgorVGhlIFVSTCB5b3UgcGFzc2VkIHRvIGxpYmN1cmwgdXNlZCBhIHByb3RvY29sIHRoYXQgdGhpcyBsaWJjdXJsIGRvZXMgbm90CitzdXBwb3J0LiBUaGUgc3VwcG9ydCBtaWdodCBiZSBhIGNvbXBpbGUtdGltZSBvcHRpb24gdGhhdCB5b3UgZGlkbid0IHVzZSwgaXQKK2NhbiBiZSBhIG1pc3NwZWxsZWQgcHJvdG9jb2wgc3RyaW5nIG9yIGp1c3QgYSBwcm90b2NvbCBsaWJjdXJsIGhhcyBubyBjb2RlCitmb3IuCisuSVAgIkNVUkxFX0ZBSUxFRF9JTklUICgyKSIKK1ZlcnkgZWFybHkgaW5pdGlhbGl6YXRpb24gY29kZSBmYWlsZWQuIFRoaXMgaXMgbGlrZWx5IHRvIGJlIGFuIGludGVybmFsIGVycm9yCitvciBwcm9ibGVtLCBvciBhIHJlc291cmNlIHByb2JsZW0gd2hlcmUgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGNvdWxkbid0IGdldAorZG9uZSBhdCBpbml0IHRpbWUuCisuSVAgIkNVUkxFX1VSTF9NQUxGT1JNQVQgKDMpIgorVGhlIFVSTCB3YXMgbm90IHByb3Blcmx5IGZvcm1hdHRlZC4KKy5JUCAiQ1VSTEVfTk9UX0JVSUxUX0lOICg0KSIKK0EgcmVxdWVzdGVkIGZlYXR1cmUsIHByb3RvY29sIG9yIG9wdGlvbiB3YXMgbm90IGZvdW5kIGJ1aWx0LWluIGluIHRoaXMgbGliY3VybAorZHVlIHRvIGEgYnVpbGQtdGltZSBkZWNpc2lvbi4gVGhpcyBtZWFucyB0aGF0IGEgZmVhdHVyZSBvciBvcHRpb24gd2FzIG5vdAorZW5hYmxlZCBvciBleHBsaWNpdGx5IGRpc2FibGVkIHdoZW4gbGliY3VybCB3YXMgYnVpbHQgYW5kIGluIG9yZGVyIHRvIGdldCBpdAordG8gZnVuY3Rpb24geW91IGhhdmUgdG8gZ2V0IGEgcmVidWlsdCBsaWJjdXJsLgorLklQICJDVVJMRV9DT1VMRE5UX1JFU09MVkVfUFJPWFkgKDUpIgorQ291bGRuJ3QgcmVzb2x2ZSBwcm94eS4gVGhlIGdpdmVuIHByb3h5IGhvc3QgY291bGQgbm90IGJlIHJlc29sdmVkLgorLklQICJDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVCAoNikiCitDb3VsZG4ndCByZXNvbHZlIGhvc3QuIFRoZSBnaXZlbiByZW1vdGUgaG9zdCB3YXMgbm90IHJlc29sdmVkLgorLklQICJDVVJMRV9DT1VMRE5UX0NPTk5FQ1QgKDcpIgorRmFpbGVkIHRvIGNvbm5lY3QoKSB0byBob3N0IG9yIHByb3h5LgorLklQICJDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZICg4KSIKK0FmdGVyIGNvbm5lY3RpbmcgdG8gYSBGVFAgc2VydmVyLCBsaWJjdXJsIGV4cGVjdHMgdG8gZ2V0IGEgY2VydGFpbiByZXBseQorYmFjay4gVGhpcyBlcnJvciBjb2RlIGltcGxpZXMgdGhhdCBpdCBnb3QgYSBzdHJhbmdlIG9yIGJhZCByZXBseS4gVGhlIGdpdmVuCityZW1vdGUgc2VydmVyIGlzIHByb2JhYmx5IG5vdCBhbiBPSyBGVFAgc2VydmVyLgorLklQICJDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRCAoOSkiCitXZSB3ZXJlIGRlbmllZCBhY2Nlc3MgdG8gdGhlIHJlc291cmNlIGdpdmVuIGluIHRoZSBVUkwuICBGb3IgRlRQLCB0aGlzIG9jY3Vycword2hpbGUgdHJ5aW5nIHRvIGNoYW5nZSB0byB0aGUgcmVtb3RlIGRpcmVjdG9yeS4KKy5JUCAiQ1VSTEVfRlRQX0FDQ0VQVF9GQUlMRUQgKDEwKSIKK1doaWxlIHdhaXRpbmcgZm9yIHRoZSBzZXJ2ZXIgdG8gY29ubmVjdCBiYWNrIHdoZW4gYW4gYWN0aXZlIEZUUCBzZXNzaW9uIGlzCit1c2VkLCBhbiBlcnJvciBjb2RlIHdhcyBzZW50IG92ZXIgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBvciBzaW1pbGFyLgorLklQICJDVVJMRV9GVFBfV0VJUkRfUEFTU19SRVBMWSAoMTEpIgorQWZ0ZXIgaGF2aW5nIHNlbnQgdGhlIEZUUCBwYXNzd29yZCB0byB0aGUgc2VydmVyLCBsaWJjdXJsIGV4cGVjdHMgYSBwcm9wZXIKK3JlcGx5LiBUaGlzIGVycm9yIGNvZGUgaW5kaWNhdGVzIHRoYXQgYW4gdW5leHBlY3RlZCBjb2RlIHdhcyByZXR1cm5lZC4KKy5JUCAiQ1VSTEVfRlRQX0FDQ0VQVF9USU1FT1VUICgxMikiCitEdXJpbmcgYW4gYWN0aXZlIEZUUCBzZXNzaW9uIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBzZXJ2ZXIgdG8gY29ubmVjdCwgdGhlCitcZklDVVJMT1BUX0FDQ0VQVFRJTU9VVF9NU1xmUCAob3IgdGhlIGludGVybmFsIGRlZmF1bHQpIHRpbWVvdXQgZXhwaXJlZC4KKy5JUCAiQ1VSTEVfRlRQX1dFSVJEX1BBU1ZfUkVQTFkgKDEzKSIKK2xpYmN1cmwgZmFpbGVkIHRvIGdldCBhIHNlbnNpYmxlIHJlc3VsdCBiYWNrIGZyb20gdGhlIHNlcnZlciBhcyBhIHJlc3BvbnNlIHRvCitlaXRoZXIgYSBQQVNWIG9yIGEgRVBTViBjb21tYW5kLiBUaGUgc2VydmVyIGlzIGZsYXdlZC4KKy5JUCAiQ1VSTEVfRlRQX1dFSVJEXzIyN19GT1JNQVQgKDE0KSIKK0ZUUCBzZXJ2ZXJzIHJldHVybiBhIDIyNy1saW5lIGFzIGEgcmVzcG9uc2UgdG8gYSBQQVNWIGNvbW1hbmQuIElmIGxpYmN1cmwKK2ZhaWxzIHRvIHBhcnNlIHRoYXQgbGluZSwgdGhpcyByZXR1cm4gY29kZSBpcyBwYXNzZWQgYmFjay4KKy5JUCAiQ1VSTEVfRlRQX0NBTlRfR0VUX0hPU1QgKDE1KSIKK0FuIGludGVybmFsIGZhaWx1cmUgdG8gbG9va3VwIHRoZSBob3N0IHVzZWQgZm9yIHRoZSBuZXcgY29ubmVjdGlvbi4KKy5JUCAiQ1VSTEVfRlRQX0NPVUxETlRfU0VUX1RZUEUgKDE3KSIKK1JlY2VpdmVkIGFuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHNldCB0aGUgdHJhbnNmZXIgbW9kZSB0byBiaW5hcnkgb3IgQVNDSUkuCisuSVAgIkNVUkxFX1BBUlRJQUxfRklMRSAoMTgpIgorQSBmaWxlIHRyYW5zZmVyIHdhcyBzaG9ydGVyIG9yIGxhcmdlciB0aGFuIGV4cGVjdGVkLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUKK3NlcnZlciBmaXJzdCByZXBvcnRzIGFuIGV4cGVjdGVkIHRyYW5zZmVyIHNpemUsIGFuZCB0aGVuIGRlbGl2ZXJzIGRhdGEgdGhhdAorZG9lc24ndCBtYXRjaCB0aGUgcHJldmlvdXNseSBnaXZlbiBzaXplLgorLklQICJDVVJMRV9GVFBfQ09VTEROVF9SRVRSX0ZJTEUgKDE5KSIKK1RoaXMgd2FzIGVpdGhlciBhIHdlaXJkIHJlcGx5IHRvIGEgJ1JFVFInIGNvbW1hbmQgb3IgYSB6ZXJvIGJ5dGUgdHJhbnNmZXIKK2NvbXBsZXRlLgorLklQICJDVVJMRV9RVU9URV9FUlJPUiAoMjEpIgorV2hlbiBzZW5kaW5nIGN1c3RvbSAiUVVPVEUiIGNvbW1hbmRzIHRvIHRoZSByZW1vdGUgc2VydmVyLCBvbmUgb2YgdGhlIGNvbW1hbmRzCityZXR1cm5lZCBhbiBlcnJvciBjb2RlIHRoYXQgd2FzIDQwMCBvciBoaWdoZXIgKGZvciBGVFApIG9yIG90aGVyd2lzZQoraW5kaWNhdGVkIHVuc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZSBjb21tYW5kLgorLklQICJDVVJMRV9IVFRQX1JFVFVSTkVEX0VSUk9SICgyMikiCitUaGlzIGlzIHJldHVybmVkIGlmIENVUkxPUFRfRkFJTE9ORVJST1IgaXMgc2V0IFRSVUUgYW5kIHRoZSBIVFRQIHNlcnZlcgorcmV0dXJucyBhbiBlcnJvciBjb2RlIHRoYXQgaXMgPj0gNDAwLgorLklQICJDVVJMRV9XUklURV9FUlJPUiAoMjMpIgorQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiB3cml0aW5nIHJlY2VpdmVkIGRhdGEgdG8gYSBsb2NhbCBmaWxlLCBvciBhbiBlcnJvciB3YXMKK3JldHVybmVkIHRvIGxpYmN1cmwgZnJvbSBhIHdyaXRlIGNhbGxiYWNrLgorLklQICJDVVJMRV9VUExPQURfRkFJTEVEICgyNSkiCitGYWlsZWQgc3RhcnRpbmcgdGhlIHVwbG9hZC4gRm9yIEZUUCwgdGhlIHNlcnZlciB0eXBpY2FsbHkgZGVuaWVkIHRoZSBTVE9SCitjb21tYW5kLiBUaGUgZXJyb3IgYnVmZmVyIHVzdWFsbHkgY29udGFpbnMgdGhlIHNlcnZlcidzIGV4cGxhbmF0aW9uIGZvciB0aGlzLgorLklQICJDVVJMRV9SRUFEX0VSUk9SICgyNikiCitUaGVyZSB3YXMgYSBwcm9ibGVtIHJlYWRpbmcgYSBsb2NhbCBmaWxlIG9yIGFuIGVycm9yIHJldHVybmVkIGJ5IHRoZSByZWFkCitjYWxsYmFjay4KKy5JUCAiQ1VSTEVfT1VUX09GX01FTU9SWSAoMjcpIgorQSBtZW1vcnkgYWxsb2NhdGlvbiByZXF1ZXN0IGZhaWxlZC4gVGhpcyBpcyBzZXJpb3VzIGJhZG5lc3MgYW5kCit0aGluZ3MgYXJlIHNldmVyZWx5IHNjcmV3ZWQgdXAgaWYgdGhpcyBldmVyIG9jY3Vycy4KKy5JUCAiQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUICgyOCkiCitPcGVyYXRpb24gdGltZW91dC4gVGhlIHNwZWNpZmllZCB0aW1lLW91dCBwZXJpb2Qgd2FzIHJlYWNoZWQgYWNjb3JkaW5nIHRvIHRoZQorY29uZGl0aW9ucy4KKy5JUCAiQ1VSTEVfRlRQX1BPUlRfRkFJTEVEICgzMCkiCitUaGUgRlRQIFBPUlQgY29tbWFuZCByZXR1cm5lZCBlcnJvci4gVGhpcyBtb3N0bHkgaGFwcGVucyB3aGVuIHlvdSBoYXZlbid0CitzcGVjaWZpZWQgYSBnb29kIGVub3VnaCBhZGRyZXNzIGZvciBsaWJjdXJsIHRvIHVzZS4gU2VlIFxmSUNVUkxPUFRfRlRQUE9SVFxmUC4KKy5JUCAiQ1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1QgKDMxKSIKK1RoZSBGVFAgUkVTVCBjb21tYW5kIHJldHVybmVkIGVycm9yLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaWYgdGhlIHNlcnZlciBpcworc2FuZS4KKy5JUCAiQ1VSTEVfUkFOR0VfRVJST1IgKDMzKSIKK1RoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBvciBhY2NlcHQgcmFuZ2UgcmVxdWVzdHMuCisuSVAgIkNVUkxFX0hUVFBfUE9TVF9FUlJPUiAoMzQpIgorVGhpcyBpcyBhbiBvZGQgZXJyb3IgdGhhdCBtYWlubHkgb2NjdXJzIGR1ZSB0byBpbnRlcm5hbCBjb25mdXNpb24uCisuSVAgIkNVUkxFX1NTTF9DT05ORUNUX0VSUk9SICgzNSkiCitBIHByb2JsZW0gb2NjdXJyZWQgc29tZXdoZXJlIGluIHRoZSBTU0wvVExTIGhhbmRzaGFrZS4gWW91IHJlYWxseSB3YW50IHRoZQorZXJyb3IgYnVmZmVyIGFuZCByZWFkIHRoZSBtZXNzYWdlIHRoZXJlIGFzIGl0IHBpbnBvaW50cyB0aGUgcHJvYmxlbSBzbGlnaHRseQorbW9yZS4gQ291bGQgYmUgY2VydGlmaWNhdGVzIChmaWxlIGZvcm1hdHMsIHBhdGhzLCBwZXJtaXNzaW9ucyksIHBhc3N3b3JkcywgYW5kCitvdGhlcnMuCisuSVAgIkNVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUUgKDM2KSIKK1RoZSBkb3dubG9hZCBjb3VsZCBub3QgYmUgcmVzdW1lZCBiZWNhdXNlIHRoZSBzcGVjaWZpZWQgb2Zmc2V0IHdhcyBvdXQgb2YgdGhlCitmaWxlIGJvdW5kYXJ5LgorLklQICJDVVJMRV9GSUxFX0NPVUxETlRfUkVBRF9GSUxFICgzNykiCitBIGZpbGUgZ2l2ZW4gd2l0aCBGSUxFOi8vIGNvdWxkbid0IGJlIG9wZW5lZC4gTW9zdCBsaWtlbHkgYmVjYXVzZSB0aGUgZmlsZQorcGF0aCBkb2Vzbid0IGlkZW50aWZ5IGFuIGV4aXN0aW5nIGZpbGUuIERpZCB5b3UgY2hlY2sgZmlsZSBwZXJtaXNzaW9ucz8KKy5JUCAiQ1VSTEVfTERBUF9DQU5OT1RfQklORCAoMzgpIgorTERBUCBjYW5ub3QgYmluZC4gTERBUCBiaW5kIG9wZXJhdGlvbiBmYWlsZWQuCisuSVAgIkNVUkxFX0xEQVBfU0VBUkNIX0ZBSUxFRCAoMzkpIgorTERBUCBzZWFyY2ggZmFpbGVkLgorLklQICJDVVJMRV9GVU5DVElPTl9OT1RfRk9VTkQgKDQxKSIKK0Z1bmN0aW9uIG5vdCBmb3VuZC4gQSByZXF1aXJlZCB6bGliIGZ1bmN0aW9uIHdhcyBub3QgZm91bmQuCisuSVAgIkNVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0sgKDQyKSIKK0Fib3J0ZWQgYnkgY2FsbGJhY2suIEEgY2FsbGJhY2sgcmV0dXJuZWQgImFib3J0IiB0byBsaWJjdXJsLgorLklQICJDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQgKDQzKSIKK0ludGVybmFsIGVycm9yLiBBIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aCBhIGJhZCBwYXJhbWV0ZXIuCisuSVAgIkNVUkxFX0lOVEVSRkFDRV9GQUlMRUQgKDQ1KSIKK0ludGVyZmFjZSBlcnJvci4gQSBzcGVjaWZpZWQgb3V0Z29pbmcgaW50ZXJmYWNlIGNvdWxkIG5vdCBiZSB1c2VkLiBTZXQgd2hpY2gKK2ludGVyZmFjZSB0byB1c2UgZm9yIG91dGdvaW5nIGNvbm5lY3Rpb25zJyBzb3VyY2UgSVAgYWRkcmVzcyB3aXRoCitDVVJMT1BUX0lOVEVSRkFDRS4KKy5JUCAiQ1VSTEVfVE9PX01BTllfUkVESVJFQ1RTICg0NykiCitUb28gbWFueSByZWRpcmVjdHMuIFdoZW4gZm9sbG93aW5nIHJlZGlyZWN0cywgbGliY3VybCBoaXQgdGhlIG1heGltdW0gYW1vdW50LgorU2V0IHlvdXIgbGltaXQgd2l0aCBDVVJMT1BUX01BWFJFRElSUy4KKy5JUCAiQ1VSTEVfVU5LTk9XTl9PUFRJT04gKDQ4KSIKK0FuIG9wdGlvbiBwYXNzZWQgdG8gbGliY3VybCBpcyBub3QgcmVjb2duaXplZC9rbm93bi4gUmVmZXIgdG8gdGhlIGFwcHJvcHJpYXRlCitkb2N1bWVudGF0aW9uLiBUaGlzIGlzIG1vc3QgbGlrZWx5IGEgcHJvYmxlbSBpbiB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMKK2xpYmN1cmwuIFRoZSBlcnJvciBidWZmZXIgbWlnaHQgY29udGFpbiBtb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoCitleGFjdCBvcHRpb24gaXQgY29uY2VybnMuCisuSVAgIkNVUkxFX1RFTE5FVF9PUFRJT05fU1lOVEFYICg0OSkiCitBIHRlbG5ldCBvcHRpb24gc3RyaW5nIHdhcyBJbGxlZ2FsbHkgZm9ybWF0dGVkLgorLklQICJDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT04gKDUxKSIKK1RoZSByZW1vdGUgc2VydmVyJ3MgU1NMIGNlcnRpZmljYXRlIG9yIFNTSCBtZDUgZmluZ2VycHJpbnQgd2FzIGRlZW1lZCBub3QgT0suCisuSVAgIkNVUkxFX0dPVF9OT1RISU5HICg1MikiCitOb3RoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIsIGFuZCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcywgZ2V0dGluZworbm90aGluZyBpcyBjb25zaWRlcmVkIGFuIGVycm9yLgorLklQICJDVVJMRV9TU0xfRU5HSU5FX05PVEZPVU5EICg1MykiCitUaGUgc3BlY2lmaWVkIGNyeXB0byBlbmdpbmUgd2Fzbid0IGZvdW5kLgorLklQICJDVVJMRV9TU0xfRU5HSU5FX1NFVEZBSUxFRCAoNTQpIgorRmFpbGVkIHNldHRpbmcgdGhlIHNlbGVjdGVkIFNTTCBjcnlwdG8gZW5naW5lIGFzIGRlZmF1bHQhCisuSVAgIkNVUkxFX1NFTkRfRVJST1IgKDU1KSIKK0ZhaWxlZCBzZW5kaW5nIG5ldHdvcmsgZGF0YS4KKy5JUCAiQ1VSTEVfUkVDVl9FUlJPUiAoNTYpIgorRmFpbHVyZSB3aXRoIHJlY2VpdmluZyBuZXR3b3JrIGRhdGEuCisuSVAgIkNVUkxFX1NTTF9DRVJUUFJPQkxFTSAoNTgpIgorcHJvYmxlbSB3aXRoIHRoZSBsb2NhbCBjbGllbnQgY2VydGlmaWNhdGUuCisuSVAgIkNVUkxFX1NTTF9DSVBIRVIgKDU5KSIKK0NvdWxkbid0IHVzZSBzcGVjaWZpZWQgY2lwaGVyLgorLklQICJDVVJMRV9TU0xfQ0FDRVJUICg2MCkiCitQZWVyIGNlcnRpZmljYXRlIGNhbm5vdCBiZSBhdXRoZW50aWNhdGVkIHdpdGgga25vd24gQ0EgY2VydGlmaWNhdGVzLgorLklQICJDVVJMRV9CQURfQ09OVEVOVF9FTkNPRElORyAoNjEpIgorVW5yZWNvZ25pemVkIHRyYW5zZmVyIGVuY29kaW5nLgorLklQICJDVVJMRV9MREFQX0lOVkFMSURfVVJMICg2MikiCitJbnZhbGlkIExEQVAgVVJMLgorLklQICJDVVJMRV9GSUxFU0laRV9FWENFRURFRCAoNjMpIgorTWF4aW11bSBmaWxlIHNpemUgZXhjZWVkZWQuCisuSVAgIkNVUkxFX1VTRV9TU0xfRkFJTEVEICg2NCkiCitSZXF1ZXN0ZWQgRlRQIFNTTCBsZXZlbCBmYWlsZWQuCisuSVAgIkNVUkxFX1NFTkRfRkFJTF9SRVdJTkQgKDY1KSIKK1doZW4gZG9pbmcgYSBzZW5kIG9wZXJhdGlvbiBjdXJsIGhhZCB0byByZXdpbmQgdGhlIGRhdGEgdG8gcmV0cmFuc21pdCwgYnV0IHRoZQorcmV3aW5kaW5nIG9wZXJhdGlvbiBmYWlsZWQuCisuSVAgIkNVUkxFX1NTTF9FTkdJTkVfSU5JVEZBSUxFRCAoNjYpIgorSW5pdGlhdGluZyB0aGUgU1NMIEVuZ2luZSBmYWlsZWQuCisuSVAgIkNVUkxFX0xPR0lOX0RFTklFRCAoNjcpIgorVGhlIHJlbW90ZSBzZXJ2ZXIgZGVuaWVkIGN1cmwgdG8gbG9naW4gKEFkZGVkIGluIDcuMTMuMSkKKy5JUCAiQ1VSTEVfVEZUUF9OT1RGT1VORCAoNjgpIgorRmlsZSBub3QgZm91bmQgb24gVEZUUCBzZXJ2ZXIuCisuSVAgIkNVUkxFX1RGVFBfUEVSTSAoNjkpIgorUGVybWlzc2lvbiBwcm9ibGVtIG9uIFRGVFAgc2VydmVyLgorLklQICJDVVJMRV9SRU1PVEVfRElTS19GVUxMICg3MCkiCitPdXQgb2YgZGlzayBzcGFjZSBvbiB0aGUgc2VydmVyLgorLklQICJDVVJMRV9URlRQX0lMTEVHQUwgKDcxKSIKK0lsbGVnYWwgVEZUUCBvcGVyYXRpb24uCisuSVAgIkNVUkxFX1RGVFBfVU5LTk9XTklEICg3MikiCitVbmtub3duIFRGVFAgdHJhbnNmZXIgSUQuCisuSVAgIkNVUkxFX1JFTU9URV9GSUxFX0VYSVNUUyAoNzMpIgorRmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4uCisuSVAgIkNVUkxFX1RGVFBfTk9TVUNIVVNFUiAoNzQpIgorVGhpcyBlcnJvciBzaG91bGQgbmV2ZXIgYmUgcmV0dXJuZWQgYnkgYSBwcm9wZXJseSBmdW5jdGlvbmluZyBURlRQIHNlcnZlci4KKy5JUCAiQ1VSTEVfQ09OVl9GQUlMRUQgKDc1KSIKK0NoYXJhY3RlciBjb252ZXJzaW9uIGZhaWxlZC4KKy5JUCAiQ1VSTEVfQ09OVl9SRVFEICg3NikiCitDYWxsZXIgbXVzdCByZWdpc3RlciBjb252ZXJzaW9uIGNhbGxiYWNrcy4KKy5JUCAiQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFICg3NykiCitQcm9ibGVtIHdpdGggcmVhZGluZyB0aGUgU1NMIENBIGNlcnQgKHBhdGg/IGFjY2VzcyByaWdodHM/KQorLklQICJDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQgKDc4KSIKK1RoZSByZXNvdXJjZSByZWZlcmVuY2VkIGluIHRoZSBVUkwgZG9lcyBub3QgZXhpc3QuCisuSVAgIkNVUkxFX1NTSCAoNzkpIgorQW4gdW5zcGVjaWZpZWQgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZSBTU0ggc2Vzc2lvbi4KKy5JUCAiQ1VSTEVfU1NMX1NIVVRET1dOX0ZBSUxFRCAoODApIgorRmFpbGVkIHRvIHNodXQgZG93biB0aGUgU1NMIGNvbm5lY3Rpb24uCisuSVAgIkNVUkxFX0FHQUlOICg4MSkiCitTb2NrZXQgaXMgbm90IHJlYWR5IGZvciBzZW5kL3JlY3Ygd2FpdCB0aWxsIGl0J3MgcmVhZHkgYW5kIHRyeSBhZ2Fpbi4gVGhpcworcmV0dXJuIGNvZGUgaXMgb25seSByZXR1cm5lZCBmcm9tIFxmSWN1cmxfZWFzeV9yZWN2KDMpXGZQIGFuZAorXGZJY3VybF9lYXN5X3NlbmQoMylcZlAgKEFkZGVkIGluIDcuMTguMikKKy5JUCAiQ1VSTEVfU1NMX0NSTF9CQURGSUxFICg4MikiCitGYWlsZWQgdG8gbG9hZCBDUkwgZmlsZSAoQWRkZWQgaW4gNy4xOS4wKQorLklQICJDVVJMRV9TU0xfSVNTVUVSX0VSUk9SICg4MykiCitJc3N1ZXIgY2hlY2sgZmFpbGVkIChBZGRlZCBpbiA3LjE5LjApCisuSVAgIkNVUkxFX0ZUUF9QUkVUX0ZBSUxFRCAoODQpIgorVGhlIEZUUCBzZXJ2ZXIgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgUFJFVCBjb21tYW5kIGF0IGFsbCBvciBkb2VzIG5vdCBzdXBwb3J0Cit0aGUgZ2l2ZW4gYXJndW1lbnQuIEJlIGNhcmVmdWwgd2hlbiB1c2luZyBcZklDVVJMT1BUX0NVU1RPTVJFUVVFU1RcZlAsIGEKK2N1c3RvbSBMSVNUIGNvbW1hbmQgd2lsbCBiZSBzZW50IHdpdGggUFJFVCBDTUQgYmVmb3JlIFBBU1YgYXMgd2VsbC4gKEFkZGVkIGluCis3LjIwLjApCisuSVAgIkNVUkxFX1JUU1BfQ1NFUV9FUlJPUiAoODUpIgorTWlzbWF0Y2ggb2YgUlRTUCBDU2VxIG51bWJlcnMuCisuSVAgIkNVUkxFX1JUU1BfU0VTU0lPTl9FUlJPUiAoODYpIgorTWlzbWF0Y2ggb2YgUlRTUCBTZXNzaW9uIElkZW50aWZpZXJzLgorLklQICJDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCAoODcpIgorVW5hYmxlIHRvIHBhcnNlIEZUUCBmaWxlIGxpc3QgKGR1cmluZyBGVFAgd2lsZGNhcmQgZG93bmxvYWRpbmcpLgorLklQICJDVVJMRV9DSFVOS19GQUlMRUQgKDg4KSIKK0NodW5rIGNhbGxiYWNrIHJlcG9ydGVkIGVycm9yLgorLklQICJDVVJMRV9PQlNPTEVURSoiCitUaGVzZSBlcnJvciBjb2RlcyB3aWxsIG5ldmVyIGJlIHJldHVybmVkLiBUaGV5IHdlcmUgdXNlZCBpbiBhbiBvbGQgbGliY3VybAordmVyc2lvbiBhbmQgYXJlIGN1cnJlbnRseSB1bnVzZWQuCisuU0ggIkNVUkxNY29kZSIKK1RoaXMgaXMgdGhlIGdlbmVyaWMgcmV0dXJuIGNvZGUgdXNlZCBieSBmdW5jdGlvbnMgaW4gdGhlIGxpYmN1cmwgbXVsdGkKK2ludGVyZmFjZS4gQWxzbyBjb25zaWRlciBcZkljdXJsX211bHRpX3N0cmVycm9yKDMpXGZQLgorLklQICJDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0gKC0xKSIKK1RoaXMgaXMgbm90IHJlYWxseSBhbiBlcnJvci4gSXQgbWVhbnMgeW91IHNob3VsZCBjYWxsCitcZkljdXJsX211bHRpX3BlcmZvcm0oMylcZlAgYWdhaW4gd2l0aG91dCBkb2luZyBzZWxlY3QoKSBvciBzaW1pbGFyIGluIGJldHdlZW4uCisuSVAgIkNVUkxNX09LICgwKSIKK1RoaW5ncyBhcmUgZmluZS4KKy5JUCAiQ1VSTE1fQkFEX0hBTkRMRSAoMSkiCitUaGUgcGFzc2VkLWluIGhhbmRsZSBpcyBub3QgYSB2YWxpZCBDVVJMTSBoYW5kbGUuCisuSVAgIkNVUkxNX0JBRF9FQVNZX0hBTkRMRSAoMikiCitBbiBlYXN5IGhhbmRsZSB3YXMgbm90IGdvb2QvdmFsaWQuIEl0IGNvdWxkIG1lYW4gdGhhdCBpdCBpc24ndCBhbiBlYXN5IGhhbmRsZQorYXQgYWxsLCBvciBwb3NzaWJseSB0aGF0IHRoZSBoYW5kbGUgYWxyZWFkeSBpcyBpbiB1c2VkIGJ5IHRoaXMgb3IgYW5vdGhlcgorbXVsdGkgaGFuZGxlLgorLklQICJDVVJMTV9PVVRfT0ZfTUVNT1JZICgzKSIKK1lvdSBhcmUgZG9vbWVkLgorLklQICJDVVJMTV9JTlRFUk5BTF9FUlJPUiAoNCkiCitUaGlzIGNhbiBvbmx5IGJlIHJldHVybmVkIGlmIGxpYmN1cmwgYnVncy4gUGxlYXNlIHJlcG9ydCBpdCB0byB1cyEKKy5JUCAiQ1VSTE1fQkFEX1NPQ0tFVCAoNSkiCitUaGUgcGFzc2VkLWluIHNvY2tldCBpcyBub3QgYSB2YWxpZCBvbmUgdGhhdCBsaWJjdXJsIGFscmVhZHkga25vd3MgYWJvdXQuCisoQWRkZWQgaW4gNy4xNS40KQorLklQICJDVVJMTV9VTktOT1dOX09QVElPTiAoNikiCitjdXJsX211bHRpX3NldG9wdCgpIHdpdGggdW5zdXBwb3J0ZWQgb3B0aW9uCisoQWRkZWQgaW4gNy4xNS40KQorLlNIICJDVVJMU0hjb2RlIgorVGhlICJzaGFyZSIgaW50ZXJmYWNlIHdpbGwgcmV0dXJuIGEgQ1VSTFNIY29kZSB0byBpbmRpY2F0ZSB3aGVuIGFuIGVycm9yIGhhcworb2NjdXJyZWQuICBBbHNvIGNvbnNpZGVyIFxmSWN1cmxfc2hhcmVfc3RyZXJyb3IoMylcZlAuCisuSVAgIkNVUkxTSEVfT0sgKDApIgorQWxsIGZpbmUuIFByb2NlZWQgYXMgdXN1YWwuCisuSVAgIkNVUkxTSEVfQkFEX09QVElPTiAoMSkiCitBbiBpbnZhbGlkIG9wdGlvbiB3YXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KKy5JUCAiQ1VSTFNIRV9JTl9VU0UgKDIpIgorVGhlIHNoYXJlIG9iamVjdCBpcyBjdXJyZW50bHkgaW4gdXNlLgorLklQICJDVVJMU0hFX0lOVkFMSUQgKDMpIgorQW4gaW52YWxpZCBzaGFyZSBvYmplY3Qgd2FzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCisuSVAgIkNVUkxTSEVfTk9NRU0gKDQpIgorTm90IGVub3VnaCBtZW1vcnkgd2FzIGF2YWlsYWJsZS4KKyhBZGRlZCBpbiA3LjEyLjApCisuSVAgIkNVUkxTSEVfTk9UX0JVSUxUX0lOICg1KSIKK1RoZSByZXF1c3RlZCBzaGFyaW5nIGNvdWxkIG5vdCBiZSBkb25lIGJlY2F1c2UgdGhlIGxpYnJhcnkgeW91IHVzZSBkb24ndCBoYXZlCit0aGF0IHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkLiAoQWRkZWQgaW4gNy4yMy4wKQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtZXJyb3JzLmh0bWwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC1lcnJvcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDc4NDAxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtZXJyb3JzLmh0bWwKQEAgLTAsMCArMSwyNDQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5saWJjdXJsLWVycm9ycyBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5saWJjdXJsLWVycm9ycyAtIGVycm9yIGNvZGVzIGluIGxpYmN1cmwgPGEgbmFtZT0iREVTQ1JJUFRJT04iPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkRFU0NSSVBUSU9OPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgbWFuIHBhZ2UgaW5jbHVkZXMgbW9zdCwgaWYgbm90IGFsbCwgYXZhaWxhYmxlIGVycm9yIGNvZGVzIGluIGxpYmN1cmwuIFdoeSB0aGV5IG9jY3VyIGFuZCBwb3NzaWJseSB3aGF0IHlvdSBjYW4gZG8gdG8gZml4IHRoZSBwcm9ibGVtIGFyZSBhbHNvIGluY2x1ZGVkLiA8YSBuYW1lPSJDVVJMY29kZSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+Q1VSTGNvZGU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+QWxtb3N0IGFsbCAiZWFzeSIgaW50ZXJmYWNlIGZ1bmN0aW9ucyByZXR1cm4gYSBDVVJMY29kZSBlcnJvciBjb2RlLiBObyBtYXR0ZXIgd2hhdCwgdXNpbmcgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwiPmN1cmxfZWFzeV9zZXRvcHQoMyk8L2E+IG9wdGlvbiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxPUFRfRVJST1JCVUZGRVI8L3NwYW4+IGlzIGEgZ29vZCBpZGVhIGFzIGl0IHdpbGwgZ2l2ZSB5b3UgYSBodW1hbiByZWFkYWJsZSBlcnJvciBzdHJpbmcgdGhhdCBtYXkgb2ZmZXIgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IgdGhhbiBqdXN0IHRoZSBlcnJvciBjb2RlLiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3N0cmVycm9yLmh0bWwiPmN1cmxfZWFzeV9zdHJlcnJvcigzKTwvYT4gY2FuIGJlIGNhbGxlZCB0byBnZXQgYW4gZXJyb3Igc3RyaW5nIGZyb20gYSBnaXZlbiBDVVJMY29kZSBudW1iZXIuIAorPHAgY2xhc3M9ImxldmVsMCI+Q1VSTGNvZGUgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVPSyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9PSyAoMCk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QWxsIGZpbmUuIFByb2NlZWQgYXMgdXN1YWwuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVVTlNVUFBPUlRFRFBST1RPQ09MIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MICgxKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgVVJMIHlvdSBwYXNzZWQgdG8gbGliY3VybCB1c2VkIGEgcHJvdG9jb2wgdGhhdCB0aGlzIGxpYmN1cmwgZG9lcyBub3Qgc3VwcG9ydC4gVGhlIHN1cHBvcnQgbWlnaHQgYmUgYSBjb21waWxlLXRpbWUgb3B0aW9uIHRoYXQgeW91IGRpZG4ndCB1c2UsIGl0IGNhbiBiZSBhIG1pc3NwZWxsZWQgcHJvdG9jb2wgc3RyaW5nIG9yIGp1c3QgYSBwcm90b2NvbCBsaWJjdXJsIGhhcyBubyBjb2RlIGZvci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRUZBSUxFRElOSVQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfRkFJTEVEX0lOSVQgKDIpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlZlcnkgZWFybHkgaW5pdGlhbGl6YXRpb24gY29kZSBmYWlsZWQuIFRoaXMgaXMgbGlrZWx5IHRvIGJlIGFuIGludGVybmFsIGVycm9yIG9yIHByb2JsZW0sIG9yIGEgcmVzb3VyY2UgcHJvYmxlbSB3aGVyZSBzb21ldGhpbmcgZnVuZGFtZW50YWwgY291bGRuJ3QgZ2V0IGRvbmUgYXQgaW5pdCB0aW1lLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFVVJMTUFMRk9STUFUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1VSTF9NQUxGT1JNQVQgKDMpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBVUkwgd2FzIG5vdCBwcm9wZXJseSBmb3JtYXR0ZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVOT1RCVUlMVElOIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX05PVF9CVUlMVF9JTiAoNCk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QSByZXF1ZXN0ZWQgZmVhdHVyZSwgcHJvdG9jb2wgb3Igb3B0aW9uIHdhcyBub3QgZm91bmQgYnVpbHQtaW4gaW4gdGhpcyBsaWJjdXJsIGR1ZSB0byBhIGJ1aWxkLXRpbWUgZGVjaXNpb24uIFRoaXMgbWVhbnMgdGhhdCBhIGZlYXR1cmUgb3Igb3B0aW9uIHdhcyBub3QgZW5hYmxlZCBvciBleHBsaWNpdGx5IGRpc2FibGVkIHdoZW4gbGliY3VybCB3YXMgYnVpbHQgYW5kIGluIG9yZGVyIHRvIGdldCBpdCB0byBmdW5jdGlvbiB5b3UgaGF2ZSB0byBnZXQgYSByZWJ1aWx0IGxpYmN1cmwuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVDT1VMRE5UUkVTT0xWRVBST1hZIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX0NPVUxETlRfUkVTT0xWRV9QUk9YWSAoNSk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Q291bGRuJ3QgcmVzb2x2ZSBwcm94eS4gVGhlIGdpdmVuIHByb3h5IGhvc3QgY291bGQgbm90IGJlIHJlc29sdmVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFQ09VTEROVFJFU09MVkVIT1NUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUICg2KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Db3VsZG4ndCByZXNvbHZlIGhvc3QuIFRoZSBnaXZlbiByZW1vdGUgaG9zdCB3YXMgbm90IHJlc29sdmVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFQ09VTEROVENPTk5FQ1QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfQ09VTEROVF9DT05ORUNUICg3KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GYWlsZWQgdG8gY29ubmVjdCgpIHRvIGhvc3Qgb3IgcHJveHkuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVGVFBXRUlSRFNFUlZFUlJFUExZIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFkgKDgpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFmdGVyIGNvbm5lY3RpbmcgdG8gYSBGVFAgc2VydmVyLCBsaWJjdXJsIGV4cGVjdHMgdG8gZ2V0IGEgY2VydGFpbiByZXBseSBiYWNrLiBUaGlzIGVycm9yIGNvZGUgaW1wbGllcyB0aGF0IGl0IGdvdCBhIHN0cmFuZ2Ugb3IgYmFkIHJlcGx5LiBUaGUgZ2l2ZW4gcmVtb3RlIHNlcnZlciBpcyBwcm9iYWJseSBub3QgYW4gT0sgRlRQIHNlcnZlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVJFTU9URUFDQ0VTU0RFTklFRCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRCAoOSk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+V2Ugd2VyZSBkZW5pZWQgYWNjZXNzIHRvIHRoZSByZXNvdXJjZSBnaXZlbiBpbiB0aGUgVVJMLiAgRm9yIEZUUCwgdGhpcyBvY2N1cnMgd2hpbGUgdHJ5aW5nIHRvIGNoYW5nZSB0byB0aGUgcmVtb3RlIGRpcmVjdG9yeS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRUZUUEFDQ0VQVEZBSUxFRCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9GVFBfQUNDRVBUX0ZBSUxFRCAoMTApPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoaWxlIHdhaXRpbmcgZm9yIHRoZSBzZXJ2ZXIgdG8gY29ubmVjdCBiYWNrIHdoZW4gYW4gYWN0aXZlIEZUUCBzZXNzaW9uIGlzIHVzZWQsIGFuIGVycm9yIGNvZGUgd2FzIHNlbnQgb3ZlciB0aGUgY29udHJvbCBjb25uZWN0aW9uIG9yIHNpbWlsYXIuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVGVFBXRUlSRFBBU1NSRVBMWSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9GVFBfV0VJUkRfUEFTU19SRVBMWSAoMTEpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFmdGVyIGhhdmluZyBzZW50IHRoZSBGVFAgcGFzc3dvcmQgdG8gdGhlIHNlcnZlciwgbGliY3VybCBleHBlY3RzIGEgcHJvcGVyIHJlcGx5LiBUaGlzIGVycm9yIGNvZGUgaW5kaWNhdGVzIHRoYXQgYW4gdW5leHBlY3RlZCBjb2RlIHdhcyByZXR1cm5lZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRUZUUEFDQ0VQVFRJTUVPVVQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfRlRQX0FDQ0VQVF9USU1FT1VUICgxMik8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RHVyaW5nIGFuIGFjdGl2ZSBGVFAgc2Vzc2lvbiB3aGlsZSB3YWl0aW5nIGZvciB0aGUgc2VydmVyIHRvIGNvbm5lY3QsIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxPUFRfQUNDRVBUVElNT1VUX01TPC9zcGFuPiAob3IgdGhlIGludGVybmFsIGRlZmF1bHQpIHRpbWVvdXQgZXhwaXJlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRUZUUFdFSVJEUEFTVlJFUExZIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX0ZUUF9XRUlSRF9QQVNWX1JFUExZICgxMyk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+bGliY3VybCBmYWlsZWQgdG8gZ2V0IGEgc2Vuc2libGUgcmVzdWx0IGJhY2sgZnJvbSB0aGUgc2VydmVyIGFzIGEgcmVzcG9uc2UgdG8gZWl0aGVyIGEgUEFTViBvciBhIEVQU1YgY29tbWFuZC4gVGhlIHNlcnZlciBpcyBmbGF3ZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVGVFBXRUlSRDIyN0ZPUk1BVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9GVFBfV0VJUkRfMjI3X0ZPUk1BVCAoMTQpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZUUCBzZXJ2ZXJzIHJldHVybiBhIDIyNy1saW5lIGFzIGEgcmVzcG9uc2UgdG8gYSBQQVNWIGNvbW1hbmQuIElmIGxpYmN1cmwgZmFpbHMgdG8gcGFyc2UgdGhhdCBsaW5lLCB0aGlzIHJldHVybiBjb2RlIGlzIHBhc3NlZCBiYWNrLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFRlRQQ0FOVEdFVEhPU1QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfRlRQX0NBTlRfR0VUX0hPU1QgKDE1KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BbiBpbnRlcm5hbCBmYWlsdXJlIHRvIGxvb2t1cCB0aGUgaG9zdCB1c2VkIGZvciB0aGUgbmV3IGNvbm5lY3Rpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVGVFBDT1VMRE5UU0VUVFlQRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9GVFBfQ09VTEROVF9TRVRfVFlQRSAoMTcpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlJlY2VpdmVkIGFuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHNldCB0aGUgdHJhbnNmZXIgbW9kZSB0byBiaW5hcnkgb3IgQVNDSUkuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVQQVJUSUFMRklMRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9QQVJUSUFMX0ZJTEUgKDE4KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BIGZpbGUgdHJhbnNmZXIgd2FzIHNob3J0ZXIgb3IgbGFyZ2VyIHRoYW4gZXhwZWN0ZWQuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBzZXJ2ZXIgZmlyc3QgcmVwb3J0cyBhbiBleHBlY3RlZCB0cmFuc2ZlciBzaXplLCBhbmQgdGhlbiBkZWxpdmVycyBkYXRhIHRoYXQgZG9lc24ndCBtYXRjaCB0aGUgcHJldmlvdXNseSBnaXZlbiBzaXplLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFRlRQQ09VTEROVFJFVFJGSUxFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX0ZUUF9DT1VMRE5UX1JFVFJfRklMRSAoMTkpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgd2FzIGVpdGhlciBhIHdlaXJkIHJlcGx5IHRvIGEgJ1JFVFInIGNvbW1hbmQgb3IgYSB6ZXJvIGJ5dGUgdHJhbnNmZXIgY29tcGxldGUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVRVU9URUVSUk9SIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1FVT1RFX0VSUk9SICgyMSk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+V2hlbiBzZW5kaW5nIGN1c3RvbSAiUVVPVEUiIGNvbW1hbmRzIHRvIHRoZSByZW1vdGUgc2VydmVyLCBvbmUgb2YgdGhlIGNvbW1hbmRzIHJldHVybmVkIGFuIGVycm9yIGNvZGUgdGhhdCB3YXMgNDAwIG9yIGhpZ2hlciAoZm9yIEZUUCkgb3Igb3RoZXJ3aXNlIGluZGljYXRlZCB1bnN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGUgY29tbWFuZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRUhUVFBSRVRVUk5FREVSUk9SIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX0hUVFBfUkVUVVJORURfRVJST1IgKDIyKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIGlzIHJldHVybmVkIGlmIENVUkxPUFRfRkFJTE9ORVJST1IgaXMgc2V0IFRSVUUgYW5kIHRoZSBIVFRQIHNlcnZlciByZXR1cm5zIGFuIGVycm9yIGNvZGUgdGhhdCBpcyAmZ3Q7PSA0MDAuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVXUklURUVSUk9SIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1dSSVRFX0VSUk9SICgyMyk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QW4gZXJyb3Igb2NjdXJyZWQgd2hlbiB3cml0aW5nIHJlY2VpdmVkIGRhdGEgdG8gYSBsb2NhbCBmaWxlLCBvciBhbiBlcnJvciB3YXMgcmV0dXJuZWQgdG8gbGliY3VybCBmcm9tIGEgd3JpdGUgY2FsbGJhY2suIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVVUExPQURGQUlMRUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfVVBMT0FEX0ZBSUxFRCAoMjUpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZhaWxlZCBzdGFydGluZyB0aGUgdXBsb2FkLiBGb3IgRlRQLCB0aGUgc2VydmVyIHR5cGljYWxseSBkZW5pZWQgdGhlIFNUT1IgY29tbWFuZC4gVGhlIGVycm9yIGJ1ZmZlciB1c3VhbGx5IGNvbnRhaW5zIHRoZSBzZXJ2ZXIncyBleHBsYW5hdGlvbiBmb3IgdGhpcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVJFQURFUlJPUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9SRUFEX0VSUk9SICgyNik8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhlcmUgd2FzIGEgcHJvYmxlbSByZWFkaW5nIGEgbG9jYWwgZmlsZSBvciBhbiBlcnJvciByZXR1cm5lZCBieSB0aGUgcmVhZCBjYWxsYmFjay4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRU9VVE9GTUVNT1JZIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX09VVF9PRl9NRU1PUlkgKDI3KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BIG1lbW9yeSBhbGxvY2F0aW9uIHJlcXVlc3QgZmFpbGVkLiBUaGlzIGlzIHNlcmlvdXMgYmFkbmVzcyBhbmQgdGhpbmdzIGFyZSBzZXZlcmVseSBzY3Jld2VkIHVwIGlmIHRoaXMgZXZlciBvY2N1cnMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVPUEVSQVRJT05USU1FRE9VVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9PUEVSQVRJT05fVElNRURPVVQgKDI4KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5PcGVyYXRpb24gdGltZW91dC4gVGhlIHNwZWNpZmllZCB0aW1lLW91dCBwZXJpb2Qgd2FzIHJlYWNoZWQgYWNjb3JkaW5nIHRvIHRoZSBjb25kaXRpb25zLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFRlRQUE9SVEZBSUxFRCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9GVFBfUE9SVF9GQUlMRUQgKDMwKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgRlRQIFBPUlQgY29tbWFuZCByZXR1cm5lZCBlcnJvci4gVGhpcyBtb3N0bHkgaGFwcGVucyB3aGVuIHlvdSBoYXZlbid0IHNwZWNpZmllZCBhIGdvb2QgZW5vdWdoIGFkZHJlc3MgZm9yIGxpYmN1cmwgdG8gdXNlLiBTZWUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMT1BUX0ZUUFBPUlQ8L3NwYW4+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFRlRQQ09VTEROVFVTRVJFU1QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1QgKDMxKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgRlRQIFJFU1QgY29tbWFuZCByZXR1cm5lZCBlcnJvci4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGlmIHRoZSBzZXJ2ZXIgaXMgc2FuZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVJBTkdFRVJST1IiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfUkFOR0VfRVJST1IgKDMzKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgb3IgYWNjZXB0IHJhbmdlIHJlcXVlc3RzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFSFRUUFBPU1RFUlJPUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9IVFRQX1BPU1RfRVJST1IgKDM0KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIGlzIGFuIG9kZCBlcnJvciB0aGF0IG1haW5seSBvY2N1cnMgZHVlIHRvIGludGVybmFsIGNvbmZ1c2lvbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVNTTENPTk5FQ1RFUlJPUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9TU0xfQ09OTkVDVF9FUlJPUiAoMzUpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkEgcHJvYmxlbSBvY2N1cnJlZCBzb21ld2hlcmUgaW4gdGhlIFNTTC9UTFMgaGFuZHNoYWtlLiBZb3UgcmVhbGx5IHdhbnQgdGhlIGVycm9yIGJ1ZmZlciBhbmQgcmVhZCB0aGUgbWVzc2FnZSB0aGVyZSBhcyBpdCBwaW5wb2ludHMgdGhlIHByb2JsZW0gc2xpZ2h0bHkgbW9yZS4gQ291bGQgYmUgY2VydGlmaWNhdGVzIChmaWxlIGZvcm1hdHMsIHBhdGhzLCBwZXJtaXNzaW9ucyksIHBhc3N3b3JkcywgYW5kIG90aGVycy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRUJBRERPV05MT0FEUkVTVU1FIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUUgKDM2KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgZG93bmxvYWQgY291bGQgbm90IGJlIHJlc3VtZWQgYmVjYXVzZSB0aGUgc3BlY2lmaWVkIG9mZnNldCB3YXMgb3V0IG9mIHRoZSBmaWxlIGJvdW5kYXJ5LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFRklMRUNPVUxETlRSRUFERklMRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9GSUxFX0NPVUxETlRfUkVBRF9GSUxFICgzNyk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QSBmaWxlIGdpdmVuIHdpdGggRklMRTovLyBjb3VsZG4ndCBiZSBvcGVuZWQuIE1vc3QgbGlrZWx5IGJlY2F1c2UgdGhlIGZpbGUgcGF0aCBkb2Vzbid0IGlkZW50aWZ5IGFuIGV4aXN0aW5nIGZpbGUuIERpZCB5b3UgY2hlY2sgZmlsZSBwZXJtaXNzaW9ucz8gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRUxEQVBDQU5OT1RCSU5EIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX0xEQVBfQ0FOTk9UX0JJTkQgKDM4KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5MREFQIGNhbm5vdCBiaW5kLiBMREFQIGJpbmQgb3BlcmF0aW9uIGZhaWxlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRUxEQVBTRUFSQ0hGQUlMRUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfTERBUF9TRUFSQ0hfRkFJTEVEICgzOSk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+TERBUCBzZWFyY2ggZmFpbGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFRlVOQ1RJT05OT1RGT1VORCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9GVU5DVElPTl9OT1RfRk9VTkQgKDQxKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GdW5jdGlvbiBub3QgZm91bmQuIEEgcmVxdWlyZWQgemxpYiBmdW5jdGlvbiB3YXMgbm90IGZvdW5kLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFQUJPUlRFREJZQ0FMTEJBQ0siPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSyAoNDIpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFib3J0ZWQgYnkgY2FsbGJhY2suIEEgY2FsbGJhY2sgcmV0dXJuZWQgImFib3J0IiB0byBsaWJjdXJsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFQkFERlVOQ1RJT05BUkdVTUVOVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQgKDQzKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JbnRlcm5hbCBlcnJvci4gQSBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGggYSBiYWQgcGFyYW1ldGVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFSU5URVJGQUNFRkFJTEVEIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX0lOVEVSRkFDRV9GQUlMRUQgKDQ1KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JbnRlcmZhY2UgZXJyb3IuIEEgc3BlY2lmaWVkIG91dGdvaW5nIGludGVyZmFjZSBjb3VsZCBub3QgYmUgdXNlZC4gU2V0IHdoaWNoIGludGVyZmFjZSB0byB1c2UgZm9yIG91dGdvaW5nIGNvbm5lY3Rpb25zJyBzb3VyY2UgSVAgYWRkcmVzcyB3aXRoIENVUkxPUFRfSU5URVJGQUNFLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFVE9PTUFOWVJFRElSRUNUUyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9UT09fTUFOWV9SRURJUkVDVFMgKDQ3KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Ub28gbWFueSByZWRpcmVjdHMuIFdoZW4gZm9sbG93aW5nIHJlZGlyZWN0cywgbGliY3VybCBoaXQgdGhlIG1heGltdW0gYW1vdW50LiBTZXQgeW91ciBsaW1pdCB3aXRoIENVUkxPUFRfTUFYUkVESVJTLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFVU5LTk9XTk9QVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9VTktOT1dOX09QVElPTiAoNDgpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFuIG9wdGlvbiBwYXNzZWQgdG8gbGliY3VybCBpcyBub3QgcmVjb2duaXplZC9rbm93bi4gUmVmZXIgdG8gdGhlIGFwcHJvcHJpYXRlIGRvY3VtZW50YXRpb24uIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSBwcm9ibGVtIGluIHRoZSBwcm9ncmFtIHRoYXQgdXNlcyBsaWJjdXJsLiBUaGUgZXJyb3IgYnVmZmVyIG1pZ2h0IGNvbnRhaW4gbW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBleGFjdCBvcHRpb24gaXQgY29uY2VybnMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVURUxORVRPUFRJT05TWU5UQVgiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfVEVMTkVUX09QVElPTl9TWU5UQVggKDQ5KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BIHRlbG5ldCBvcHRpb24gc3RyaW5nIHdhcyBJbGxlZ2FsbHkgZm9ybWF0dGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFUEVFUkZBSUxFRFZFUklGSUNBVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT04gKDUxKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgcmVtb3RlIHNlcnZlcidzIFNTTCBjZXJ0aWZpY2F0ZSBvciBTU0ggbWQ1IGZpbmdlcnByaW50IHdhcyBkZWVtZWQgbm90IE9LLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFR09UTk9USElORyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9HT1RfTk9USElORyAoNTIpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk5vdGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciwgYW5kIHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzLCBnZXR0aW5nIG5vdGhpbmcgaXMgY29uc2lkZXJlZCBhbiBlcnJvci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVNTTEVOR0lORU5PVEZPVU5EIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1NTTF9FTkdJTkVfTk9URk9VTkQgKDUzKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgc3BlY2lmaWVkIGNyeXB0byBlbmdpbmUgd2Fzbid0IGZvdW5kLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFU1NMRU5HSU5FU0VURkFJTEVEIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1NTTF9FTkdJTkVfU0VURkFJTEVEICg1NCk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RmFpbGVkIHNldHRpbmcgdGhlIHNlbGVjdGVkIFNTTCBjcnlwdG8gZW5naW5lIGFzIGRlZmF1bHQhIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVTRU5ERVJST1IiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfU0VORF9FUlJPUiAoNTUpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZhaWxlZCBzZW5kaW5nIG5ldHdvcmsgZGF0YS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVJFQ1ZFUlJPUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9SRUNWX0VSUk9SICg1Nik8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RmFpbHVyZSB3aXRoIHJlY2VpdmluZyBuZXR3b3JrIGRhdGEuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVTU0xDRVJUUFJPQkxFTSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9TU0xfQ0VSVFBST0JMRU0gKDU4KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5wcm9ibGVtIHdpdGggdGhlIGxvY2FsIGNsaWVudCBjZXJ0aWZpY2F0ZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVNTTENJUEhFUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9TU0xfQ0lQSEVSICg1OSk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Q291bGRuJ3QgdXNlIHNwZWNpZmllZCBjaXBoZXIuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVTU0xDQUNFUlQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfU1NMX0NBQ0VSVCAoNjApPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlBlZXIgY2VydGlmaWNhdGUgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCBrbm93biBDQSBjZXJ0aWZpY2F0ZXMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVCQURDT05URU5URU5DT0RJTkciPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfQkFEX0NPTlRFTlRfRU5DT0RJTkcgKDYxKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5VbnJlY29nbml6ZWQgdHJhbnNmZXIgZW5jb2RpbmcuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVMREFQSU5WQUxJRFVSTCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9MREFQX0lOVkFMSURfVVJMICg2Mik8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+SW52YWxpZCBMREFQIFVSTC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRUZJTEVTSVpFRVhDRUVERUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfRklMRVNJWkVfRVhDRUVERUQgKDYzKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5NYXhpbXVtIGZpbGUgc2l6ZSBleGNlZWRlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVVTRVNTTEZBSUxFRCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9VU0VfU1NMX0ZBSUxFRCAoNjQpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlJlcXVlc3RlZCBGVFAgU1NMIGxldmVsIGZhaWxlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVNFTkRGQUlMUkVXSU5EIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1NFTkRfRkFJTF9SRVdJTkQgKDY1KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIGRvaW5nIGEgc2VuZCBvcGVyYXRpb24gY3VybCBoYWQgdG8gcmV3aW5kIHRoZSBkYXRhIHRvIHJldHJhbnNtaXQsIGJ1dCB0aGUgcmV3aW5kaW5nIG9wZXJhdGlvbiBmYWlsZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVTU0xFTkdJTkVJTklURkFJTEVEIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1NTTF9FTkdJTkVfSU5JVEZBSUxFRCAoNjYpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkluaXRpYXRpbmcgdGhlIFNTTCBFbmdpbmUgZmFpbGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFTE9HSU5ERU5JRUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfTE9HSU5fREVOSUVEICg2Nyk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIHJlbW90ZSBzZXJ2ZXIgZGVuaWVkIGN1cmwgdG8gbG9naW4gKEFkZGVkIGluIDcuMTMuMSkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVRGVFBOT1RGT1VORCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9URlRQX05PVEZPVU5EICg2OCk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RmlsZSBub3QgZm91bmQgb24gVEZUUCBzZXJ2ZXIuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVURlRQUEVSTSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9URlRQX1BFUk0gKDY5KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5QZXJtaXNzaW9uIHByb2JsZW0gb24gVEZUUCBzZXJ2ZXIuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVSRU1PVEVESVNLRlVMTCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9SRU1PVEVfRElTS19GVUxMICg3MCk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+T3V0IG9mIGRpc2sgc3BhY2Ugb24gdGhlIHNlcnZlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVRGVFBJTExFR0FMIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1RGVFBfSUxMRUdBTCAoNzEpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPklsbGVnYWwgVEZUUCBvcGVyYXRpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVURlRQVU5LTk9XTklEIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1RGVFBfVU5LTk9XTklEICg3Mik8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VW5rbm93biBURlRQIHRyYW5zZmVyIElELiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFUkVNT1RFRklMRUVYSVNUUyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9SRU1PVEVfRklMRV9FWElTVFMgKDczKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GaWxlIGFscmVhZHkgZXhpc3RzIGFuZCB3aWxsIG5vdCBiZSBvdmVyd3JpdHRlbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVRGVFBOT1NVQ0hVU0VSIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1RGVFBfTk9TVUNIVVNFUiAoNzQpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgZXJyb3Igc2hvdWxkIG5ldmVyIGJlIHJldHVybmVkIGJ5IGEgcHJvcGVybHkgZnVuY3Rpb25pbmcgVEZUUCBzZXJ2ZXIuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVDT05WRkFJTEVEIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX0NPTlZfRkFJTEVEICg3NSk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Q2hhcmFjdGVyIGNvbnZlcnNpb24gZmFpbGVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFQ09OVlJFUUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfQ09OVl9SRVFEICg3Nik8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Q2FsbGVyIG11c3QgcmVnaXN0ZXIgY29udmVyc2lvbiBjYWxsYmFja3MuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVTU0xDQUNFUlRCQURGSUxFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1NTTF9DQUNFUlRfQkFERklMRSAoNzcpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlByb2JsZW0gd2l0aCByZWFkaW5nIHRoZSBTU0wgQ0EgY2VydCAocGF0aD8gYWNjZXNzIHJpZ2h0cz8pIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVSRU1PVEVGSUxFTk9URk9VTkQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EICg3OCk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIHJlc291cmNlIHJlZmVyZW5jZWQgaW4gdGhlIFVSTCBkb2VzIG5vdCBleGlzdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRVNTSCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9TU0ggKDc5KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BbiB1bnNwZWNpZmllZCBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIFNTSCBzZXNzaW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFU1NMU0hVVERPV05GQUlMRUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfU1NMX1NIVVRET1dOX0ZBSUxFRCAoODApPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkZhaWxlZCB0byBzaHV0IGRvd24gdGhlIFNTTCBjb25uZWN0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFQUdBSU4iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfQUdBSU4gKDgxKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Tb2NrZXQgaXMgbm90IHJlYWR5IGZvciBzZW5kL3JlY3Ygd2FpdCB0aWxsIGl0J3MgcmVhZHkgYW5kIHRyeSBhZ2Fpbi4gVGhpcyByZXR1cm4gY29kZSBpcyBvbmx5IHJldHVybmVkIGZyb20gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9yZWN2Lmh0bWwiPmN1cmxfZWFzeV9yZWN2KDMpPC9hPiBhbmQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9zZW5kLmh0bWwiPmN1cmxfZWFzeV9zZW5kKDMpPC9hPiAoQWRkZWQgaW4gNy4xOC4yKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFU1NMQ1JMQkFERklMRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9TU0xfQ1JMX0JBREZJTEUgKDgyKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GYWlsZWQgdG8gbG9hZCBDUkwgZmlsZSAoQWRkZWQgaW4gNy4xOS4wKSAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFU1NMSVNTVUVSRVJST1IiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfU1NMX0lTU1VFUl9FUlJPUiAoODMpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPklzc3VlciBjaGVjayBmYWlsZWQgKEFkZGVkIGluIDcuMTkuMCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRUZUUFBSRVRGQUlMRUQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfRlRQX1BSRVRfRkFJTEVEICg4NCk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIEZUUCBzZXJ2ZXIgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgUFJFVCBjb21tYW5kIGF0IGFsbCBvciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBnaXZlbiBhcmd1bWVudC4gQmUgY2FyZWZ1bCB3aGVuIHVzaW5nIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTE9QVF9DVVNUT01SRVFVRVNUPC9zcGFuPiwgYSBjdXN0b20gTElTVCBjb21tYW5kIHdpbGwgYmUgc2VudCB3aXRoIFBSRVQgQ01EIGJlZm9yZSBQQVNWIGFzIHdlbGwuIChBZGRlZCBpbiA3LjIwLjApIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVSVFNQQ1NFUUVSUk9SIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX1JUU1BfQ1NFUV9FUlJPUiAoODUpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk1pc21hdGNoIG9mIFJUU1AgQ1NlcSBudW1iZXJzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFUlRTUFNFU1NJT05FUlJPUiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9SVFNQX1NFU1NJT05fRVJST1IgKDg2KTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5NaXNtYXRjaCBvZiBSVFNQIFNlc3Npb24gSWRlbnRpZmllcnMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEVGVFBCQURGSUxFTElTVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCAoODcpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlVuYWJsZSB0byBwYXJzZSBGVFAgZmlsZSBsaXN0IChkdXJpbmcgRlRQIHdpbGRjYXJkIGRvd25sb2FkaW5nKS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMRUNIVU5LRkFJTEVEIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxFX0NIVU5LX0ZBSUxFRCAoODgpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkNodW5rIGNhbGxiYWNrIHJlcG9ydGVkIGVycm9yLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxFT0JTT0xFVEUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTEVfT0JTT0xFVEUqPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZXNlIGVycm9yIGNvZGVzIHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQuIFRoZXkgd2VyZSB1c2VkIGluIGFuIG9sZCBsaWJjdXJsIHZlcnNpb24gYW5kIGFyZSBjdXJyZW50bHkgdW51c2VkLiA8YSBuYW1lPSJDVVJMTWNvZGUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkNVUkxNY29kZTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGlzIHRoZSBnZW5lcmljIHJldHVybiBjb2RlIHVzZWQgYnkgZnVuY3Rpb25zIGluIHRoZSBsaWJjdXJsIG11bHRpIGludGVyZmFjZS4gQWxzbyBjb25zaWRlciA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9zdHJlcnJvci5odG1sIj5jdXJsX211bHRpX3N0cmVycm9yKDMpPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMTUNBTExNVUxUSVBFUkZPUk0iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNICgtMSk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBpcyBub3QgcmVhbGx5IGFuIGVycm9yLiBJdCBtZWFucyB5b3Ugc2hvdWxkIGNhbGwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfcGVyZm9ybS5odG1sIj5jdXJsX211bHRpX3BlcmZvcm0oMyk8L2E+IGFnYWluIHdpdGhvdXQgZG9pbmcgc2VsZWN0KCkgb3Igc2ltaWxhciBpbiBiZXR3ZWVuLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxNT0siPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE1fT0sgKDApPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaW5ncyBhcmUgZmluZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMTUJBREhBTkRMRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMTV9CQURfSEFORExFICgxKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgcGFzc2VkLWluIGhhbmRsZSBpcyBub3QgYSB2YWxpZCBDVVJMTSBoYW5kbGUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE1CQURFQVNZSEFORExFIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxNX0JBRF9FQVNZX0hBTkRMRSAoMik8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QW4gZWFzeSBoYW5kbGUgd2FzIG5vdCBnb29kL3ZhbGlkLiBJdCBjb3VsZCBtZWFuIHRoYXQgaXQgaXNuJ3QgYW4gZWFzeSBoYW5kbGUgYXQgYWxsLCBvciBwb3NzaWJseSB0aGF0IHRoZSBoYW5kbGUgYWxyZWFkeSBpcyBpbiB1c2VkIGJ5IHRoaXMgb3IgYW5vdGhlciBtdWx0aSBoYW5kbGUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTE1PVVRPRk1FTU9SWSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMTV9PVVRfT0ZfTUVNT1JZICgzKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Zb3UgYXJlIGRvb21lZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMTUlOVEVSTkFMRVJST1IiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE1fSU5URVJOQUxfRVJST1IgKDQpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgY2FuIG9ubHkgYmUgcmV0dXJuZWQgaWYgbGliY3VybCBidWdzLiBQbGVhc2UgcmVwb3J0IGl0IHRvIHVzISAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxNQkFEU09DS0VUIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxNX0JBRF9TT0NLRVQgKDUpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBwYXNzZWQtaW4gc29ja2V0IGlzIG5vdCBhIHZhbGlkIG9uZSB0aGF0IGxpYmN1cmwgYWxyZWFkeSBrbm93cyBhYm91dC4gKEFkZGVkIGluIDcuMTUuNCkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMTVVOS05PV05PUFRJT04iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTE1fVU5LTk9XTl9PUFRJT04gKDYpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPmN1cmxfbXVsdGlfc2V0b3B0KCkgd2l0aCB1bnN1cHBvcnRlZCBvcHRpb24gKEFkZGVkIGluIDcuMTUuNCkgPGEgbmFtZT0iQ1VSTFNIY29kZSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+Q1VSTFNIY29kZTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgInNoYXJlIiBpbnRlcmZhY2Ugd2lsbCByZXR1cm4gYSBDVVJMU0hjb2RlIHRvIGluZGljYXRlIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VycmVkLiAgQWxzbyBjb25zaWRlciA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9zaGFyZV9zdHJlcnJvci5odG1sIj5jdXJsX3NoYXJlX3N0cmVycm9yKDMpPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDVVJMU0hFT0siPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTFNIRV9PSyAoMCk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QWxsIGZpbmUuIFByb2NlZWQgYXMgdXN1YWwuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFNIRUJBRE9QVElPTiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMU0hFX0JBRF9PUFRJT04gKDEpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFuIGludmFsaWQgb3B0aW9uIHdhcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxTSEVJTlVTRSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMU0hFX0lOX1VTRSAoMik8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIHNoYXJlIG9iamVjdCBpcyBjdXJyZW50bHkgaW4gdXNlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNVUkxTSEVJTlZBTElEIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxTSEVfSU5WQUxJRCAoMyk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QW4gaW52YWxpZCBzaGFyZSBvYmplY3Qgd2FzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFNIRU5PTUVNIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxTSEVfTk9NRU0gKDQpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk5vdCBlbm91Z2ggbWVtb3J5IHdhcyBhdmFpbGFibGUuIChBZGRlZCBpbiA3LjEyLjApIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTFNIRU5PVEJVSUxUSU4iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q1VSTFNIRV9OT1RfQlVJTFRfSU4gKDUpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSByZXF1c3RlZCBzaGFyaW5nIGNvdWxkIG5vdCBiZSBkb25lIGJlY2F1c2UgdGhlIGxpYnJhcnkgeW91IHVzZSBkb24ndCBoYXZlIHRoYXQgcGFydGljdWxhciBmZWF0dXJlIGVuYWJsZWQuIChBZGRlZCBpbiA3LjIzLjApIDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtZXJyb3JzLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLWVycm9ycy5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4ZmVlYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLWVycm9ycy5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtbXVsdGkuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLW11bHRpLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFmMDI5OQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLW11bHRpLjMKQEAgLTAsMCArMSwxNTEgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuVEggbGliY3VybC1tdWx0aSAzICIzIEZlYiAyMDA3IiAibGliY3VybCA3LjE2LjAiICJsaWJjdXJsIG11bHRpIGludGVyZmFjZSIKKy5TSCBOQU1FCitsaWJjdXJsLW11bHRpIFwtIGhvdyB0byB1c2UgdGhlIG11bHRpIGludGVyZmFjZQorLlNIIERFU0NSSVBUSU9OCitUaGlzIGlzIGFuIG92ZXJ2aWV3IG9uIGhvdyB0byB1c2UgdGhlIGxpYmN1cmwgbXVsdGkgaW50ZXJmYWNlIGluIHlvdXIgQworcHJvZ3JhbXMuIFRoZXJlIGFyZSBzcGVjaWZpYyBtYW4gcGFnZXMgZm9yIGVhY2ggZnVuY3Rpb24gbWVudGlvbmVkIGluCitoZXJlLiBUaGVyZSdzIGFsc28gdGhlIFxmSWxpYmN1cmwtdHV0b3JpYWwoMylcZlAgbWFuIHBhZ2UgZm9yIGEgY29tcGxldGUKK3R1dG9yaWFsIHRvIHByb2dyYW1taW5nIHdpdGggbGliY3VybCBhbmQgdGhlIFxmSWxpYmN1cmwtZWFzeSgzKVxmUCBtYW4gcGFnZQorZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBsaWJjdXJsIGVhc3kgaW50ZXJmYWNlLgorCitBbGwgZnVuY3Rpb25zIGluIHRoZSBtdWx0aSBpbnRlcmZhY2UgYXJlIHByZWZpeGVkIHdpdGggY3VybF9tdWx0aS4KKy5TSCAiT0JKRUNUSVZFUyIKK1RoZSBtdWx0aSBpbnRlcmZhY2Ugb2ZmZXJzIHNldmVyYWwgYWJpbGl0aWVzIHRoYXQgdGhlIGVhc3kgaW50ZXJmYWNlIGRvZXNuJ3QuCitUaGV5IGFyZSBtYWlubHk6CisKKzEuIEVuYWJsZSBhICJwdWxsIiBpbnRlcmZhY2UuIFRoZSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgbGliY3VybCBkZWNpZGVzIHdoZXJlCithbmQgd2hlbiB0byBhc2sgbGliY3VybCB0byBnZXQvc2VuZCBkYXRhLgorCisyLiBFbmFibGUgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIHRyYW5zZmVycyBpbiB0aGUgc2FtZSB0aHJlYWQgd2l0aG91dCBtYWtpbmcgaXQKK2NvbXBsaWNhdGVkIGZvciB0aGUgYXBwbGljYXRpb24uCisKKzMuIEVuYWJsZSB0aGUgYXBwbGljYXRpb24gdG8gd2FpdCBmb3IgYWN0aW9uIG9uIGl0cyBvd24gZmlsZSBkZXNjcmlwdG9ycyBhbmQKK2N1cmwncyBmaWxlIGRlc2NyaXB0b3JzIHNpbXVsdGFuZW91cyBlYXNpbHkuCisuU0ggIk9ORSBNVUxUSSBIQU5ETEUgTUFOWSBFQVNZIEhBTkRMRVMiCitUbyB1c2UgdGhlIG11bHRpIGludGVyZmFjZSwgeW91IG11c3QgZmlyc3QgY3JlYXRlIGEgJ211bHRpIGhhbmRsZScgd2l0aAorXGZJY3VybF9tdWx0aV9pbml0KDMpXGZQLiBUaGlzIGhhbmRsZSBpcyB0aGVuIHVzZWQgYXMgaW5wdXQgdG8gYWxsIGZ1cnRoZXIKK2N1cmxfbXVsdGlfKiBmdW5jdGlvbnMuCisKK0VhY2ggc2luZ2xlIHRyYW5zZmVyIGlzIGJ1aWx0IHVwIHdpdGggYW4gZWFzeSBoYW5kbGUuIFlvdSBtdXN0IGNyZWF0ZSB0aGVtLAorYW5kIHNldHVwIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGZvciBlYWNoIGVhc3kgaGFuZGxlLCBhcyBvdXRsaW5lZCBpbiB0aGUKK1xmSWxpYmN1cmwoMylcZlAgbWFuIHBhZ2UsIHVzaW5nIFxmSWN1cmxfZWFzeV9zZXRvcHQoMylcZlAuCisKK1doZW4gdGhlIGVhc3kgaGFuZGxlIGlzIHNldHVwIGZvciBhIHRyYW5zZmVyLCB0aGVuIGluc3RlYWQgb2YgdXNpbmcKK1xmSWN1cmxfZWFzeV9wZXJmb3JtKDMpXGZQIChhcyB3aGVuIHVzaW5nIHRoZSBlYXN5IGludGVyZmFjZSBmb3IgdHJhbnNmZXJzKSwKK3lvdSBzaG91bGQgaW5zdGVhZCBhZGQgdGhlIGVhc3kgaGFuZGxlIHRvIHRoZSBtdWx0aSBoYW5kbGUgdXNpbmcKK1xmSWN1cmxfbXVsdGlfYWRkX2hhbmRsZSgzKVxmUC4gVGhlIG11bHRpIGhhbmRsZSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgYQorXCdtdWx0aSBzdGFja1wnIGJlY2F1c2Ugb2YgdGhlIGZhY3QgdGhhdCBpdCBtYXkgaG9sZCBhIGxhcmdlIGFtb3VudCBvZiBlYXN5CitoYW5kbGVzLgorCitTaG91bGQgeW91IGNoYW5nZSB5b3VyIG1pbmQsIHRoZSBlYXN5IGhhbmRsZSBpcyBhZ2FpbiByZW1vdmVkIGZyb20gdGhlIG11bHRpCitzdGFjayB1c2luZyBcZkljdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoMylcZlAuIE9uY2UgcmVtb3ZlZCBmcm9tIHRoZSBtdWx0aQoraGFuZGxlLCB5b3UgY2FuIGFnYWluIHVzZSBvdGhlciBlYXN5IGludGVyZmFjZSBmdW5jdGlvbnMgbGlrZQorXGZJY3VybF9lYXN5X3BlcmZvcm0oMylcZlAgb24gdGhlIGhhbmRsZSBvciB3aGF0ZXZlciB5b3UgdGhpbmsgaXMgbmVjZXNzYXJ5LgorCitBZGRpbmcgdGhlIGVhc3kgaGFuZGxlIHRvIHRoZSBtdWx0aSBoYW5kbGUgZG9lcyBub3Qgc3RhcnQgdGhlIHRyYW5zZmVyLgorUmVtZW1iZXIgdGhhdCBvbmUgb2YgdGhlIG1haW4gaWRlYXMgd2l0aCB0aGlzIGludGVyZmFjZSBpcyB0byBsZXQgeW91cgorYXBwbGljYXRpb24gZHJpdmUuIFlvdSBkcml2ZSB0aGUgdHJhbnNmZXJzIGJ5IGludm9raW5nCitcZkljdXJsX211bHRpX3BlcmZvcm0oMylcZlAuIGxpYmN1cmwgd2lsbCB0aGVuIHRyYW5zZmVyIGRhdGEgaWYgdGhlcmUgaXMKK2FueXRoaW5nIGF2YWlsYWJsZSB0byB0cmFuc2Zlci4gSXQnbGwgdXNlIHRoZSBjYWxsYmFja3MgYW5kIGV2ZXJ5dGhpbmcgZWxzZQoreW91IGhhdmUgc2V0dXAgaW4gdGhlIGluZGl2aWR1YWwgZWFzeSBoYW5kbGVzLiBJdCdsbCB0cmFuc2ZlciBkYXRhIG9uIGFsbAorY3VycmVudCB0cmFuc2ZlcnMgaW4gdGhlIG11bHRpIHN0YWNrIHRoYXQgYXJlIHJlYWR5IHRvIHRyYW5zZmVyIGFueXRoaW5nLiBJdAorbWF5IGJlIGFsbCwgaXQgbWF5IGJlIG5vbmUuCisKK1lvdXIgYXBwbGljYXRpb24gY2FuIGFjcXVpcmUga25vd2xlZGdlIGZyb20gbGliY3VybCB3aGVuIGl0IHdvdWxkIGxpa2UgdG8gZ2V0CitpbnZva2VkIHRvIHRyYW5zZmVyIGRhdGEsIHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gYnVzeS1sb29wIGFuZCBjYWxsIHRoYXQKK1xmSWN1cmxfbXVsdGlfcGVyZm9ybSgzKVxmUCBsaWtlIGNyYXp5LiBcZkljdXJsX211bHRpX2Zkc2V0KDMpXGZQIG9mZmVycyBhbgoraW50ZXJmYWNlIHVzaW5nIHdoaWNoIHlvdSBjYW4gZXh0cmFjdCBmZF9zZXRzIGZyb20gbGliY3VybCB0byB1c2UgaW4gc2VsZWN0KCkKK29yIHBvbGwoKSBjYWxscyBpbiBvcmRlciB0byBnZXQgdG8ga25vdyB3aGVuIHRoZSB0cmFuc2ZlcnMgaW4gdGhlIG11bHRpIHN0YWNrCittaWdodCBuZWVkIGF0dGVudGlvbi4gVGhpcyBhbHNvIG1ha2VzIGl0IHZlcnkgZWFzeSBmb3IgeW91ciBwcm9ncmFtIHRvIHdhaXQKK2ZvciBpbnB1dCBvbiB5b3VyIG93biBwcml2YXRlIGZpbGUgZGVzY3JpcHRvcnMgYXQgdGhlIHNhbWUgdGltZSBvciBwZXJoYXBzCit0aW1lb3V0IGV2ZXJ5IG5vdyBhbmQgdGhlbiwgc2hvdWxkIHlvdSB3YW50IHRoYXQuCisKK1xmSWN1cmxfbXVsdGlfcGVyZm9ybSgzKVxmUCBzdG9yZXMgdGhlIG51bWJlciBvZiBzdGlsbCBydW5uaW5nIHRyYW5zZmVycyBpbgorb25lIG9mIGl0cyBpbnB1dCBhcmd1bWVudHMsIGFuZCBieSByZWFkaW5nIHRoYXQgeW91IGNhbiBmaWd1cmUgb3V0IHdoZW4gYWxsCit0aGUgdHJhbnNmZXJzIGluIHRoZSBtdWx0aSBoYW5kbGVzIGFyZSBkb25lLiAnZG9uZScgZG9lcyBub3QgbWVhbgorc3VjY2Vzc2Z1bC4gT25lIG9yIG1vcmUgb2YgdGhlIHRyYW5zZmVycyBtYXkgaGF2ZSBmYWlsZWQuIFRyYWNraW5nIHdoZW4gdGhpcworbnVtYmVyIGNoYW5nZXMsIHlvdSBrbm93IHdoZW4gb25lIG9yIG1vcmUgdHJhbnNmZXJzIGFyZSBkb25lLgorCitUbyBnZXQgaW5mb3JtYXRpb24gYWJvdXQgY29tcGxldGVkIHRyYW5zZmVycywgdG8gZmlndXJlIG91dCBzdWNjZXNzIG9yIG5vdCBhbmQKK3NpbWlsYXIsIFxmSWN1cmxfbXVsdGlfaW5mb19yZWFkKDMpXGZQIHNob3VsZCBiZSBjYWxsZWQuIEl0IGNhbiByZXR1cm4gYQorbWVzc2FnZSBhYm91dCBhIGN1cnJlbnQgb3IgcHJldmlvdXMgdHJhbnNmZXIuIFJlcGVhdGVkIGludm9rZXMgb2YgdGhlIGZ1bmN0aW9uCitnZXQgbW9yZSBtZXNzYWdlcyB1bnRpbCB0aGUgbWVzc2FnZSBxdWV1ZSBpcyBlbXB0eS4gVGhlIGluZm9ybWF0aW9uIHlvdQorcmVjZWl2ZSB0aGVyZSBpbmNsdWRlcyBhbiBlYXN5IGhhbmRsZSBwb2ludGVyIHdoaWNoIHlvdSBtYXkgdXNlIHRvIGlkZW50aWZ5Cit3aGljaCBlYXN5IGhhbmRsZSB0aGUgaW5mb3JtYXRpb24gcmVnYXJkcy4KKworV2hlbiBhIHNpbmdsZSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQsIHRoZSBlYXN5IGhhbmRsZSBpcyBzdGlsbCBsZWZ0IGFkZGVkIHRvCit0aGUgbXVsdGkgc3RhY2suIFlvdSBuZWVkIHRvIGZpcnN0IHJlbW92ZSB0aGUgZWFzeSBoYW5kbGUgd2l0aAorXGZJY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKDMpXGZQIGFuZCB0aGVuIGNsb3NlIGl0IHdpdGgKK1xmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQLCBvciBwb3NzaWJseSBzZXQgbmV3IG9wdGlvbnMgdG8gaXQgYW5kIGFkZCBpdCBhZ2Fpbgord2l0aCBcZkljdXJsX211bHRpX2FkZF9oYW5kbGUoMylcZlAgdG8gc3RhcnQgYW5vdGhlciB0cmFuc2Zlci4KKworV2hlbiBhbGwgdHJhbnNmZXJzIGluIHRoZSBtdWx0aSBzdGFjayBhcmUgZG9uZSwgY2xlYW51cCB0aGUgbXVsdGkgaGFuZGxlIHdpdGgKK1xmSWN1cmxfbXVsdGlfY2xlYW51cCgzKVxmUC4gQmUgY2FyZWZ1bCBhbmQgcGxlYXNlIG5vdGUgdGhhdCB5b3UgXGZCTVVTVFxmUAoraW52b2tlIHNlcGFyYXRlIFxmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQIGNhbGxzIG9uIGV2ZXJ5IHNpbmdsZSBlYXN5IGhhbmRsZQordG8gY2xlYW4gdGhlbSB1cCBwcm9wZXJseS4KKworSWYgeW91IHdhbnQgdG8gcmUtdXNlIGFuIGVhc3kgaGFuZGxlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBtdWx0aSBoYW5kbGUgZm9yCit0cmFuc2ZlciwgeW91IG11c3QgZmlyc3QgcmVtb3ZlIGl0IGZyb20gdGhlIG11bHRpIHN0YWNrIGFuZCB0aGVuIHJlLWFkZCBpdAorYWdhaW4gKHBvc3NpYmx5IGFmdGVyIGhhdmluZyBhbHRlcmVkIHNvbWUgb3B0aW9ucyBhdCB5b3VyIG93biBjaG9pY2UpLgorLlNIICJNVUxUSV9TT0NLRVQiCitcZkljdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMylcZlAgZnVuY3Rpb24gb2ZmZXJzIGEgd2F5IGZvciBhcHBsaWNhdGlvbnMgdG8KK25vdCBvbmx5IGF2b2lkIGJlaW5nIGZvcmNlZCB0byB1c2Ugc2VsZWN0KCksIGJ1dCBpdCBhbHNvIG9mZmVycyBhIG11Y2ggbW9yZQoraGlnaC1wZXJmb3JtYW5jZSBBUEkgdGhhdCB3aWxsIG1ha2UgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGZvciBhcHBsaWNhdGlvbnMKK3VzaW5nIGxhcmdlIG51bWJlcnMgb2Ygc2ltdWx0YW5lb3VzIGNvbm5lY3Rpb25zLgorCitcZkljdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMylcZlAgaXMgdGhlbiB1c2VkIGluc3RlYWQgb2YKK1xmSWN1cmxfbXVsdGlfcGVyZm9ybSgzKVxmUC4KKworV2hlbiB1c2luZyB0aGlzIEFQSSwgeW91IGFkZCBlYXN5IGhhbmRsZXMgdG8gdGhlIG11bHRpIGhhbmRsZSBqdXN0IGFzIHdpdGggdGhlCitub3JtYWwgbXVsdGkgaW50ZXJmYWNlLiBUaGVuIHlvdSBhbHNvIHNldCB0d28gY2FsbGJhY2tzIHdpdGggdGhlCitDVVJMTU9QVF9TT0NLRVRGVU5DVElPTiBhbmQgQ1VSTE1PUFRfVElNRVJGVU5DVElPTiBvcHRpb25zIHRvCitcZkljdXJsX211bHRpX3NldG9wdCgzKVxmUC4KKworVGhlIEFQSSBpcyB0aGVuIGRlc2lnbmVkIHRvIGluZm9ybSB5b3VyIGFwcGxpY2F0aW9uIGFib3V0IHdoaWNoIHNvY2tldHMKK2xpYmN1cmwgaXMgY3VycmVudGx5IHVzaW5nIGFuZCBmb3Igd2hhdCBhY3Rpdml0aWVzIChyZWFkIGFuZC9vciB3cml0ZSkgb24KK3Rob3NlIHNvY2tldHMgeW91ciBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZCB0byB3YWl0IGZvci4KKworWW91ciBhcHBsaWNhdGlvbiBtdXN0IHRoZW4gbWFrZSBzdXJlIHRvIHJlY2VpdmUgYWxsIHNvY2tldHMgaW5mb3JtZWQgYWJvdXQgaW4KK3RoZSBDVVJMTU9QVF9TT0NLRVRGVU5DVElPTiBjYWxsYmFjayBhbmQgbWFrZSBzdXJlIGl0IHJlYWN0cyBvbiB0aGUgZ2l2ZW4KK2FjdGl2aXR5IG9uIHRoZW0uIFdoZW4gYSBzb2NrZXQgaGFzIHRoZSBnaXZlbiBhY3Rpdml0eSwgeW91IGNhbGwKK1xmSWN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigzKVxmUCBzcGVjaWZ5aW5nIHdoaWNoIHNvY2tldCBhbmQgYWN0aW9uIHRoZXJlCithcmUuCisKK1RoZSBDVVJMTU9QVF9USU1FUkZVTkNUSU9OIGNhbGxiYWNrIGlzIGNhbGxlZCB0byBzZXQgYSB0aW1lb3V0LiBXaGVuIHRoYXQKK3RpbWVvdXQgZXhwaXJlcywgeW91ciBhcHBsaWNhdGlvbiBzaG91bGQgY2FsbCB0aGUKK1xmSWN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigzKVxmUCBmdW5jdGlvbiBzYXlpbmcgaXQgd2FzIGR1ZSB0byBhIHRpbWVvdXQuCisuU0ggIkJMT0NLSU5HIgorQSBmZXcgYXJlYXMgaW4gdGhlIGNvZGUgYXJlIHN0aWxsIHVzaW5nIGJsb2NraW5nIGNvZGUsIGV2ZW4gd2hlbiB1c2VkIGZyb20gdGhlCittdWx0aSBpbnRlcmZhY2UuIFdoaWxlIHdlIGNlcnRhaW5seSB3YW50IGFuZCBpbnRlbmQgZm9yIHRoZXNlIHRvIGdldCBmaXhlZCBpbgordGhlIGZ1dHVyZSwgeW91IHNob3VsZCBiZSBhd2FyZSBvZiB0aGUgZm9sbG93aW5nIGN1cnJlbnQgcmVzdHJpY3Rpb25zOgorCisubmYKKyAtIE5hbWUgcmVzb2x2ZXMgdW5sZXNzIHRoZSBjLWFyZXMgb3IgdGhyZWFkZWQtcmVzb2x2ZXIgYmFja2VuZHMgYXJlIHVzZWQKKyAtIE5TUyBTU0wgY29ubmVjdGlvbnMKKyAtIEhUVFAgcHJveHkgQ09OTkVDVCBvcGVyYXRpb25zCisgLSBTT0NLUyBwcm94eSBoYW5kc2hha2VzCisgLSBmaWxlOi8vIHRyYW5zZmVycworIC0gVEVMTkVUIHRyYW5zZmVycworLmZpCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC1tdWx0aS5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtbXVsdGkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmNjNTQwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtbXVsdGkuaHRtbApAQCAtMCwwICsxLDc4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+bGliY3VybC1tdWx0aSBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5saWJjdXJsLW11bHRpIC0gaG93IHRvIHVzZSB0aGUgbXVsdGkgaW50ZXJmYWNlIDxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGlzIGFuIG92ZXJ2aWV3IG9uIGhvdyB0byB1c2UgdGhlIGxpYmN1cmwgbXVsdGkgaW50ZXJmYWNlIGluIHlvdXIgQyBwcm9ncmFtcy4gVGhlcmUgYXJlIHNwZWNpZmljIG1hbiBwYWdlcyBmb3IgZWFjaCBmdW5jdGlvbiBtZW50aW9uZWQgaW4gaGVyZS4gVGhlcmUncyBhbHNvIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmxpYmN1cmwtdHV0b3JpYWwoMyk8L3NwYW4+IG1hbiBwYWdlIGZvciBhIGNvbXBsZXRlIHR1dG9yaWFsIHRvIHByb2dyYW1taW5nIHdpdGggbGliY3VybCBhbmQgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGliY3VybC1lYXN5KDMpPC9zcGFuPiBtYW4gcGFnZSBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGxpYmN1cmwgZWFzeSBpbnRlcmZhY2UuIAorPHAgY2xhc3M9ImxldmVsMCI+QWxsIGZ1bmN0aW9ucyBpbiB0aGUgbXVsdGkgaW50ZXJmYWNlIGFyZSBwcmVmaXhlZCB3aXRoIGN1cmxfbXVsdGkuIDxhIG5hbWU9Ik9CSkVDVElWRVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk9CSkVDVElWRVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhlIG11bHRpIGludGVyZmFjZSBvZmZlcnMgc2V2ZXJhbCBhYmlsaXRpZXMgdGhhdCB0aGUgZWFzeSBpbnRlcmZhY2UgZG9lc24ndC4gVGhleSBhcmUgbWFpbmx5OiAKKzxwIGNsYXNzPSJsZXZlbDAiPjEuIEVuYWJsZSBhICJwdWxsIiBpbnRlcmZhY2UuIFRoZSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgbGliY3VybCBkZWNpZGVzIHdoZXJlIGFuZCB3aGVuIHRvIGFzayBsaWJjdXJsIHRvIGdldC9zZW5kIGRhdGEuIAorPHAgY2xhc3M9ImxldmVsMCI+Mi4gRW5hYmxlIG11bHRpcGxlIHNpbXVsdGFuZW91cyB0cmFuc2ZlcnMgaW4gdGhlIHNhbWUgdGhyZWFkIHdpdGhvdXQgbWFraW5nIGl0IGNvbXBsaWNhdGVkIGZvciB0aGUgYXBwbGljYXRpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+My4gRW5hYmxlIHRoZSBhcHBsaWNhdGlvbiB0byB3YWl0IGZvciBhY3Rpb24gb24gaXRzIG93biBmaWxlIGRlc2NyaXB0b3JzIGFuZCBjdXJsJ3MgZmlsZSBkZXNjcmlwdG9ycyBzaW11bHRhbmVvdXMgZWFzaWx5LiA8YSBuYW1lPSJPTkUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk9ORSBNVUxUSSBIQU5ETEUgTUFOWSBFQVNZIEhBTkRMRVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VG8gdXNlIHRoZSBtdWx0aSBpbnRlcmZhY2UsIHlvdSBtdXN0IGZpcnN0IGNyZWF0ZSBhICdtdWx0aSBoYW5kbGUnIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfaW5pdC5odG1sIj5jdXJsX211bHRpX2luaXQoMyk8L2E+LiBUaGlzIGhhbmRsZSBpcyB0aGVuIHVzZWQgYXMgaW5wdXQgdG8gYWxsIGZ1cnRoZXIgY3VybF9tdWx0aV8qIGZ1bmN0aW9ucy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5FYWNoIHNpbmdsZSB0cmFuc2ZlciBpcyBidWlsdCB1cCB3aXRoIGFuIGVhc3kgaGFuZGxlLiBZb3UgbXVzdCBjcmVhdGUgdGhlbSwgYW5kIHNldHVwIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGZvciBlYWNoIGVhc3kgaGFuZGxlLCBhcyBvdXRsaW5lZCBpbiB0aGUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2xpYmN1cmwuaHRtbCI+bGliY3VybCgzKTwvYT4gbWFuIHBhZ2UsIHVzaW5nIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwiPmN1cmxfZWFzeV9zZXRvcHQoMyk8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gdGhlIGVhc3kgaGFuZGxlIGlzIHNldHVwIGZvciBhIHRyYW5zZmVyLCB0aGVuIGluc3RlYWQgb2YgdXNpbmcgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9wZXJmb3JtLmh0bWwiPmN1cmxfZWFzeV9wZXJmb3JtKDMpPC9hPiAoYXMgd2hlbiB1c2luZyB0aGUgZWFzeSBpbnRlcmZhY2UgZm9yIHRyYW5zZmVycyksIHlvdSBzaG91bGQgaW5zdGVhZCBhZGQgdGhlIGVhc3kgaGFuZGxlIHRvIHRoZSBtdWx0aSBoYW5kbGUgdXNpbmcgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfYWRkX2hhbmRsZS5odG1sIj5jdXJsX211bHRpX2FkZF9oYW5kbGUoMyk8L2E+LiBUaGUgbXVsdGkgaGFuZGxlIGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBhICZhY3V0ZTttdWx0aSBzdGFjayZhY3V0ZTsgYmVjYXVzZSBvZiB0aGUgZmFjdCB0aGF0IGl0IG1heSBob2xkIGEgbGFyZ2UgYW1vdW50IG9mIGVhc3kgaGFuZGxlcy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5TaG91bGQgeW91IGNoYW5nZSB5b3VyIG1pbmQsIHRoZSBlYXN5IGhhbmRsZSBpcyBhZ2FpbiByZW1vdmVkIGZyb20gdGhlIG11bHRpIHN0YWNrIHVzaW5nIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3JlbW92ZV9oYW5kbGUuaHRtbCI+Y3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKDMpPC9hPi4gT25jZSByZW1vdmVkIGZyb20gdGhlIG11bHRpIGhhbmRsZSwgeW91IGNhbiBhZ2FpbiB1c2Ugb3RoZXIgZWFzeSBpbnRlcmZhY2UgZnVuY3Rpb25zIGxpa2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9wZXJmb3JtLmh0bWwiPmN1cmxfZWFzeV9wZXJmb3JtKDMpPC9hPiBvbiB0aGUgaGFuZGxlIG9yIHdoYXRldmVyIHlvdSB0aGluayBpcyBuZWNlc3NhcnkuIAorPHAgY2xhc3M9ImxldmVsMCI+QWRkaW5nIHRoZSBlYXN5IGhhbmRsZSB0byB0aGUgbXVsdGkgaGFuZGxlIGRvZXMgbm90IHN0YXJ0IHRoZSB0cmFuc2Zlci4gUmVtZW1iZXIgdGhhdCBvbmUgb2YgdGhlIG1haW4gaWRlYXMgd2l0aCB0aGlzIGludGVyZmFjZSBpcyB0byBsZXQgeW91ciBhcHBsaWNhdGlvbiBkcml2ZS4gWW91IGRyaXZlIHRoZSB0cmFuc2ZlcnMgYnkgaW52b2tpbmcgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfcGVyZm9ybS5odG1sIj5jdXJsX211bHRpX3BlcmZvcm0oMyk8L2E+LiBsaWJjdXJsIHdpbGwgdGhlbiB0cmFuc2ZlciBkYXRhIGlmIHRoZXJlIGlzIGFueXRoaW5nIGF2YWlsYWJsZSB0byB0cmFuc2Zlci4gSXQnbGwgdXNlIHRoZSBjYWxsYmFja3MgYW5kIGV2ZXJ5dGhpbmcgZWxzZSB5b3UgaGF2ZSBzZXR1cCBpbiB0aGUgaW5kaXZpZHVhbCBlYXN5IGhhbmRsZXMuIEl0J2xsIHRyYW5zZmVyIGRhdGEgb24gYWxsIGN1cnJlbnQgdHJhbnNmZXJzIGluIHRoZSBtdWx0aSBzdGFjayB0aGF0IGFyZSByZWFkeSB0byB0cmFuc2ZlciBhbnl0aGluZy4gSXQgbWF5IGJlIGFsbCwgaXQgbWF5IGJlIG5vbmUuIAorPHAgY2xhc3M9ImxldmVsMCI+WW91ciBhcHBsaWNhdGlvbiBjYW4gYWNxdWlyZSBrbm93bGVkZ2UgZnJvbSBsaWJjdXJsIHdoZW4gaXQgd291bGQgbGlrZSB0byBnZXQgaW52b2tlZCB0byB0cmFuc2ZlciBkYXRhLCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGJ1c3ktbG9vcCBhbmQgY2FsbCB0aGF0IDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3BlcmZvcm0uaHRtbCI+Y3VybF9tdWx0aV9wZXJmb3JtKDMpPC9hPiBsaWtlIGNyYXp5LiA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9mZHNldC5odG1sIj5jdXJsX211bHRpX2Zkc2V0KDMpPC9hPiBvZmZlcnMgYW4gaW50ZXJmYWNlIHVzaW5nIHdoaWNoIHlvdSBjYW4gZXh0cmFjdCBmZF9zZXRzIGZyb20gbGliY3VybCB0byB1c2UgaW4gc2VsZWN0KCkgb3IgcG9sbCgpIGNhbGxzIGluIG9yZGVyIHRvIGdldCB0byBrbm93IHdoZW4gdGhlIHRyYW5zZmVycyBpbiB0aGUgbXVsdGkgc3RhY2sgbWlnaHQgbmVlZCBhdHRlbnRpb24uIFRoaXMgYWxzbyBtYWtlcyBpdCB2ZXJ5IGVhc3kgZm9yIHlvdXIgcHJvZ3JhbSB0byB3YWl0IGZvciBpbnB1dCBvbiB5b3VyIG93biBwcml2YXRlIGZpbGUgZGVzY3JpcHRvcnMgYXQgdGhlIHNhbWUgdGltZSBvciBwZXJoYXBzIHRpbWVvdXQgZXZlcnkgbm93IGFuZCB0aGVuLCBzaG91bGQgeW91IHdhbnQgdGhhdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9wZXJmb3JtLmh0bWwiPmN1cmxfbXVsdGlfcGVyZm9ybSgzKTwvYT4gc3RvcmVzIHRoZSBudW1iZXIgb2Ygc3RpbGwgcnVubmluZyB0cmFuc2ZlcnMgaW4gb25lIG9mIGl0cyBpbnB1dCBhcmd1bWVudHMsIGFuZCBieSByZWFkaW5nIHRoYXQgeW91IGNhbiBmaWd1cmUgb3V0IHdoZW4gYWxsIHRoZSB0cmFuc2ZlcnMgaW4gdGhlIG11bHRpIGhhbmRsZXMgYXJlIGRvbmUuICdkb25lJyBkb2VzIG5vdCBtZWFuIHN1Y2Nlc3NmdWwuIE9uZSBvciBtb3JlIG9mIHRoZSB0cmFuc2ZlcnMgbWF5IGhhdmUgZmFpbGVkLiBUcmFja2luZyB3aGVuIHRoaXMgbnVtYmVyIGNoYW5nZXMsIHlvdSBrbm93IHdoZW4gb25lIG9yIG1vcmUgdHJhbnNmZXJzIGFyZSBkb25lLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBjb21wbGV0ZWQgdHJhbnNmZXJzLCB0byBmaWd1cmUgb3V0IHN1Y2Nlc3Mgb3Igbm90IGFuZCBzaW1pbGFyLCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9pbmZvX3JlYWQuaHRtbCI+Y3VybF9tdWx0aV9pbmZvX3JlYWQoMyk8L2E+IHNob3VsZCBiZSBjYWxsZWQuIEl0IGNhbiByZXR1cm4gYSBtZXNzYWdlIGFib3V0IGEgY3VycmVudCBvciBwcmV2aW91cyB0cmFuc2Zlci4gUmVwZWF0ZWQgaW52b2tlcyBvZiB0aGUgZnVuY3Rpb24gZ2V0IG1vcmUgbWVzc2FnZXMgdW50aWwgdGhlIG1lc3NhZ2UgcXVldWUgaXMgZW1wdHkuIFRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZSB0aGVyZSBpbmNsdWRlcyBhbiBlYXN5IGhhbmRsZSBwb2ludGVyIHdoaWNoIHlvdSBtYXkgdXNlIHRvIGlkZW50aWZ5IHdoaWNoIGVhc3kgaGFuZGxlIHRoZSBpbmZvcm1hdGlvbiByZWdhcmRzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gYSBzaW5nbGUgdHJhbnNmZXIgaXMgY29tcGxldGVkLCB0aGUgZWFzeSBoYW5kbGUgaXMgc3RpbGwgbGVmdCBhZGRlZCB0byB0aGUgbXVsdGkgc3RhY2suIFlvdSBuZWVkIHRvIGZpcnN0IHJlbW92ZSB0aGUgZWFzeSBoYW5kbGUgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlLmh0bWwiPmN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgzKTwvYT4gYW5kIHRoZW4gY2xvc2UgaXQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X2NsZWFudXAuaHRtbCI+Y3VybF9lYXN5X2NsZWFudXAoMyk8L2E+LCBvciBwb3NzaWJseSBzZXQgbmV3IG9wdGlvbnMgdG8gaXQgYW5kIGFkZCBpdCBhZ2FpbiB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX2FkZF9oYW5kbGUuaHRtbCI+Y3VybF9tdWx0aV9hZGRfaGFuZGxlKDMpPC9hPiB0byBzdGFydCBhbm90aGVyIHRyYW5zZmVyLiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gYWxsIHRyYW5zZmVycyBpbiB0aGUgbXVsdGkgc3RhY2sgYXJlIGRvbmUsIGNsZWFudXAgdGhlIG11bHRpIGhhbmRsZSB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX2NsZWFudXAuaHRtbCI+Y3VybF9tdWx0aV9jbGVhbnVwKDMpPC9hPi4gQmUgY2FyZWZ1bCBhbmQgcGxlYXNlIG5vdGUgdGhhdCB5b3UgPHNwYW4gQ2xhc3M9ImJvbGQiPk1VU1Q8L3NwYW4+IGludm9rZSBzZXBhcmF0ZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X2NsZWFudXAuaHRtbCI+Y3VybF9lYXN5X2NsZWFudXAoMyk8L2E+IGNhbGxzIG9uIGV2ZXJ5IHNpbmdsZSBlYXN5IGhhbmRsZSB0byBjbGVhbiB0aGVtIHVwIHByb3Blcmx5LiAKKzxwIGNsYXNzPSJsZXZlbDAiPklmIHlvdSB3YW50IHRvIHJlLXVzZSBhbiBlYXN5IGhhbmRsZSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgbXVsdGkgaGFuZGxlIGZvciB0cmFuc2ZlciwgeW91IG11c3QgZmlyc3QgcmVtb3ZlIGl0IGZyb20gdGhlIG11bHRpIHN0YWNrIGFuZCB0aGVuIHJlLWFkZCBpdCBhZ2FpbiAocG9zc2libHkgYWZ0ZXIgaGF2aW5nIGFsdGVyZWQgc29tZSBvcHRpb25zIGF0IHlvdXIgb3duIGNob2ljZSkuIDxhIG5hbWU9Ik1VTFRJU09DS0VUIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5NVUxUSV9TT0NLRVQ8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sIj5jdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMyk8L2E+IGZ1bmN0aW9uIG9mZmVycyBhIHdheSBmb3IgYXBwbGljYXRpb25zIHRvIG5vdCBvbmx5IGF2b2lkIGJlaW5nIGZvcmNlZCB0byB1c2Ugc2VsZWN0KCksIGJ1dCBpdCBhbHNvIG9mZmVycyBhIG11Y2ggbW9yZSBoaWdoLXBlcmZvcm1hbmNlIEFQSSB0aGF0IHdpbGwgbWFrZSBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgZm9yIGFwcGxpY2F0aW9ucyB1c2luZyBsYXJnZSBudW1iZXJzIG9mIHNpbXVsdGFuZW91cyBjb25uZWN0aW9ucy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uLmh0bWwiPmN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigzKTwvYT4gaXMgdGhlbiB1c2VkIGluc3RlYWQgb2YgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfcGVyZm9ybS5odG1sIj5jdXJsX211bHRpX3BlcmZvcm0oMyk8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gdXNpbmcgdGhpcyBBUEksIHlvdSBhZGQgZWFzeSBoYW5kbGVzIHRvIHRoZSBtdWx0aSBoYW5kbGUganVzdCBhcyB3aXRoIHRoZSBub3JtYWwgbXVsdGkgaW50ZXJmYWNlLiBUaGVuIHlvdSBhbHNvIHNldCB0d28gY2FsbGJhY2tzIHdpdGggdGhlIENVUkxNT1BUX1NPQ0tFVEZVTkNUSU9OIGFuZCBDVVJMTU9QVF9USU1FUkZVTkNUSU9OIG9wdGlvbnMgdG8gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc2V0b3B0Lmh0bWwiPmN1cmxfbXVsdGlfc2V0b3B0KDMpPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgQVBJIGlzIHRoZW4gZGVzaWduZWQgdG8gaW5mb3JtIHlvdXIgYXBwbGljYXRpb24gYWJvdXQgd2hpY2ggc29ja2V0cyBsaWJjdXJsIGlzIGN1cnJlbnRseSB1c2luZyBhbmQgZm9yIHdoYXQgYWN0aXZpdGllcyAocmVhZCBhbmQvb3Igd3JpdGUpIG9uIHRob3NlIHNvY2tldHMgeW91ciBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZCB0byB3YWl0IGZvci4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3VyIGFwcGxpY2F0aW9uIG11c3QgdGhlbiBtYWtlIHN1cmUgdG8gcmVjZWl2ZSBhbGwgc29ja2V0cyBpbmZvcm1lZCBhYm91dCBpbiB0aGUgQ1VSTE1PUFRfU09DS0VURlVOQ1RJT04gY2FsbGJhY2sgYW5kIG1ha2Ugc3VyZSBpdCByZWFjdHMgb24gdGhlIGdpdmVuIGFjdGl2aXR5IG9uIHRoZW0uIFdoZW4gYSBzb2NrZXQgaGFzIHRoZSBnaXZlbiBhY3Rpdml0eSwgeW91IGNhbGwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfc29ja2V0X2FjdGlvbi5odG1sIj5jdXJsX211bHRpX3NvY2tldF9hY3Rpb24oMyk8L2E+IHNwZWNpZnlpbmcgd2hpY2ggc29ja2V0IGFuZCBhY3Rpb24gdGhlcmUgYXJlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBDVVJMTU9QVF9USU1FUkZVTkNUSU9OIGNhbGxiYWNrIGlzIGNhbGxlZCB0byBzZXQgYSB0aW1lb3V0LiBXaGVuIHRoYXQgdGltZW91dCBleHBpcmVzLCB5b3VyIGFwcGxpY2F0aW9uIHNob3VsZCBjYWxsIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uLmh0bWwiPmN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigzKTwvYT4gZnVuY3Rpb24gc2F5aW5nIGl0IHdhcyBkdWUgdG8gYSB0aW1lb3V0LiA8YSBuYW1lPSJCTE9DS0lORyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+QkxPQ0tJTkc8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+QSBmZXcgYXJlYXMgaW4gdGhlIGNvZGUgYXJlIHN0aWxsIHVzaW5nIGJsb2NraW5nIGNvZGUsIGV2ZW4gd2hlbiB1c2VkIGZyb20gdGhlIG11bHRpIGludGVyZmFjZS4gV2hpbGUgd2UgY2VydGFpbmx5IHdhbnQgYW5kIGludGVuZCBmb3IgdGhlc2UgdG8gZ2V0IGZpeGVkIGluIHRoZSBmdXR1cmUsIHlvdSBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIGZvbGxvd2luZyBjdXJyZW50IHJlc3RyaWN0aW9uczogCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOy0gTmFtZSByZXNvbHZlcyB1bmxlc3MgdGhlIGMtYXJlcyBvciB0aHJlYWRlZC1yZXNvbHZlciBiYWNrZW5kcyBhcmUgdXNlZCAmbmJzcDstIE5TUyBTU0wgY29ubmVjdGlvbnMgJm5ic3A7LSBIVFRQIHByb3h5IENPTk5FQ1Qgb3BlcmF0aW9ucyAmbmJzcDstIFNPQ0tTIHByb3h5IGhhbmRzaGFrZXMgJm5ic3A7LSBmaWxlOi8vIHRyYW5zZmVycyAmbmJzcDstIFRFTE5FVCB0cmFuc2ZlcnMgCis8cCBjbGFzcz0ibGV2ZWwwIj48cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLW11bHRpLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLW11bHRpLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDZkNTQxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtbXVsdGkucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLXNoYXJlLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC1zaGFyZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNjI0MDgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC1zaGFyZS4zCkBAIC0wLDAgKzEsNjMgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGxpYmN1cmwtc2hhcmUgMyAiOCBBdWcgMjAwMyIgImxpYmN1cmwgNy4xMC43IiAibGliY3VybCBzaGFyZSBpbnRlcmZhY2UiCisuU0ggTkFNRQorbGliY3VybC1zaGFyZSBcLSBob3cgdG8gdXNlIHRoZSBzaGFyZSBpbnRlcmZhY2UKKy5TSCBERVNDUklQVElPTgorVGhpcyBpcyBhbiBvdmVydmlldyBvbiBob3cgdG8gdXNlIHRoZSBsaWJjdXJsIHNoYXJlIGludGVyZmFjZSBpbiB5b3VyIEMKK3Byb2dyYW1zLiBUaGVyZSBhcmUgc3BlY2lmaWMgbWFuIHBhZ2VzIGZvciBlYWNoIGZ1bmN0aW9uIG1lbnRpb25lZCBpbgoraGVyZS4KKworQWxsIGZ1bmN0aW9ucyBpbiB0aGUgc2hhcmUgaW50ZXJmYWNlIGFyZSBwcmVmaXhlZCB3aXRoIGN1cmxfc2hhcmUuCisKKy5TSCAiT0JKRUNUSVZFUyIKK1RoZSBzaGFyZSBpbnRlcmZhY2Ugd2FzIGFkZGVkIHRvIGVuYWJsZSBzaGFyaW5nIG9mIGRhdGEgYmV0d2VlbiBjdXJsCitcJiJoYW5kbGVzIi4KKy5TSCAiT05FIFNFVCBPRiBEQVRBIC0gTUFOWSBUUkFOU0ZFUlMiCitZb3UgY2FuIGhhdmUgbXVsdGlwbGUgZWFzeSBoYW5kbGVzIHNoYXJlIGRhdGEgYmV0d2VlbiB0aGVtLiBIYXZlIHRoZW0gdXBkYXRlCithbmQgdXNlIHRoZSBcZkJzYW1lXGZQIGNvb2tpZSBkYXRhYmFzZSBvciBETlMgY2FjaGUhIFRoaXMgd2F5LCBlYWNoIHNpbmdsZQordHJhbnNmZXIgd2lsbCB0YWtlIGFkdmFudGFnZSBmcm9tIGRhdGEgdXBkYXRlcyBtYWRlIGJ5IHRoZSBvdGhlciB0cmFuc2ZlcihzKS4KKy5TSCAiU0hBUkUgT0JKRUNUIgorWW91IGNyZWF0ZSBhIHNoYXJlZCBvYmplY3Qgd2l0aCBcZkljdXJsX3NoYXJlX2luaXQoMylcZlAuIEl0IHJldHVybnMgYSBoYW5kbGUKK2ZvciBhIG5ld2x5IGNyZWF0ZWQgb25lLgorCitZb3UgdGVsbCB0aGUgc2hhcmVkIG9iamVjdCB3aGF0IGRhdGEgeW91IHdhbnQgaXQgdG8gc2hhcmUgYnkgdXNpbmcKK1xmSWN1cmxfc2hhcmVfc2V0b3B0KDMpXGZQLiBDdXJyZW50bHkgeW91IGNhbiBvbmx5IHNoYXJlIEROUyBhbmQvb3IgQ09PS0lFCitkYXRhLgorCitTaW5jZSB5b3UgY2FuIHVzZSB0aGlzIHNoYXJlIGZyb20gbXVsdGlwbGUgdGhyZWFkcywgYW5kIGxpYmN1cmwgaGFzIG5vCitpbnRlcm5hbCB0aHJlYWQgc3luY2hyb25pemF0aW9uLCB5b3UgbXVzdCBwcm92aWRlIG11dGV4IGNhbGxiYWNrcyBpZiB5b3UncmUKK3VzaW5nIHRoaXMgbXVsdGktdGhyZWFkZWQuIFlvdSBzZXQgbG9jayBhbmQgdW5sb2NrIGZ1bmN0aW9ucyB3aXRoCitcZkljdXJsX3NoYXJlX3NldG9wdCgzKVxmUCB0b28uCisKK1RoZW4sIHlvdSBtYWtlIGFuIGVhc3kgaGFuZGxlIHRvIHVzZSB0aGlzIHNoYXJlLCB5b3Ugc2V0IHRoZQorXGZJQ1VSTE9QVF9TSEFSRVxmUCBvcHRpb24gd2l0aCBcZkljdXJsX2Vhc3lfc2V0b3B0KDMpXGZQLCBhbmQgcGFzcyBpbiBzaGFyZQoraGFuZGxlLiBZb3UgY2FuIG1ha2UgYW55IG51bWJlciBvZiBlYXN5IGhhbmRsZXMgc2hhcmUgdGhlIHNhbWUgc2hhcmUgaGFuZGxlLgorCitUbyBtYWtlIGFuIGVhc3kgaGFuZGxlIHN0b3AgdXNpbmcgdGhhdCBwYXJ0aWN1bGFyIHNoYXJlLCB5b3Ugc2V0CitcZklDVVJMT1BUX1NIQVJFXGZQIHRvIE5VTEwgZm9yIHRoYXQgZWFzeSBoYW5kbGUuIFRvIG1ha2UgYSBoYW5kbGUgc3RvcAorc2hhcmluZyBhIHBhcnRpY3VsYXIgZGF0YSwgeW91IGNhbiBcZklDVVJMU0hPUFRfVU5TSEFSRVxmUCBpdC4KKworV2hlbiB5b3UncmUgZG9uZSB1c2luZyB0aGUgc2hhcmUsIG1ha2Ugc3VyZSB0aGF0IG5vIGVhc3kgaGFuZGxlIGlzIHN0aWxsIHVzaW5nCitpdCwgYW5kIGNhbGwgXGZJY3VybF9zaGFyZV9jbGVhbnVwKDMpXGZQIG9uIHRoZSBoYW5kbGUuCisuU0ggIlNFRSBBTFNPIgorLkJSIGN1cmxfc2hhcmVfaW5pdCAiKDMpLCAiIGN1cmxfc2hhcmVfc2V0b3B0ICIoMyksICIgY3VybF9zaGFyZV9jbGVhbnVwICIoMykiCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC1zaGFyZS5odG1sIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtc2hhcmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzRlOTI4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtc2hhcmUuaHRtbApAQCAtMCwwICsxLDYzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+bGliY3VybC1zaGFyZSBtYW4gcGFnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InJvZmZpdCI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5saWJjdXJsLXNoYXJlIC0gaG93IHRvIHVzZSB0aGUgc2hhcmUgaW50ZXJmYWNlIDxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGlzIGFuIG92ZXJ2aWV3IG9uIGhvdyB0byB1c2UgdGhlIGxpYmN1cmwgc2hhcmUgaW50ZXJmYWNlIGluIHlvdXIgQyBwcm9ncmFtcy4gVGhlcmUgYXJlIHNwZWNpZmljIG1hbiBwYWdlcyBmb3IgZWFjaCBmdW5jdGlvbiBtZW50aW9uZWQgaW4gaGVyZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5BbGwgZnVuY3Rpb25zIGluIHRoZSBzaGFyZSBpbnRlcmZhY2UgYXJlIHByZWZpeGVkIHdpdGggY3VybF9zaGFyZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJPQkpFQ1RJVkVTIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5PQkpFQ1RJVkVTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBzaGFyZSBpbnRlcmZhY2Ugd2FzIGFkZGVkIHRvIGVuYWJsZSBzaGFyaW5nIG9mIGRhdGEgYmV0d2VlbiBjdXJsICJoYW5kbGVzIi4gPGEgbmFtZT0iT05FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5PTkUgU0VUIE9GIERBVEEgLSBNQU5ZIFRSQU5TRkVSUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgY2FuIGhhdmUgbXVsdGlwbGUgZWFzeSBoYW5kbGVzIHNoYXJlIGRhdGEgYmV0d2VlbiB0aGVtLiBIYXZlIHRoZW0gdXBkYXRlIGFuZCB1c2UgdGhlIDxzcGFuIENsYXNzPSJib2xkIj5zYW1lPC9zcGFuPiBjb29raWUgZGF0YWJhc2Ugb3IgRE5TIGNhY2hlISBUaGlzIHdheSwgZWFjaCBzaW5nbGUgdHJhbnNmZXIgd2lsbCB0YWtlIGFkdmFudGFnZSBmcm9tIGRhdGEgdXBkYXRlcyBtYWRlIGJ5IHRoZSBvdGhlciB0cmFuc2ZlcihzKS4gPGEgbmFtZT0iU0hBUkUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNIQVJFIE9CSkVDVDwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgY3JlYXRlIGEgc2hhcmVkIG9iamVjdCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX3NoYXJlX2luaXQuaHRtbCI+Y3VybF9zaGFyZV9pbml0KDMpPC9hPi4gSXQgcmV0dXJucyBhIGhhbmRsZSBmb3IgYSBuZXdseSBjcmVhdGVkIG9uZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgdGVsbCB0aGUgc2hhcmVkIG9iamVjdCB3aGF0IGRhdGEgeW91IHdhbnQgaXQgdG8gc2hhcmUgYnkgdXNpbmcgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfc2hhcmVfc2V0b3B0Lmh0bWwiPmN1cmxfc2hhcmVfc2V0b3B0KDMpPC9hPi4gQ3VycmVudGx5IHlvdSBjYW4gb25seSBzaGFyZSBETlMgYW5kL29yIENPT0tJRSBkYXRhLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlNpbmNlIHlvdSBjYW4gdXNlIHRoaXMgc2hhcmUgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLCBhbmQgbGliY3VybCBoYXMgbm8gaW50ZXJuYWwgdGhyZWFkIHN5bmNocm9uaXphdGlvbiwgeW91IG11c3QgcHJvdmlkZSBtdXRleCBjYWxsYmFja3MgaWYgeW91J3JlIHVzaW5nIHRoaXMgbXVsdGktdGhyZWFkZWQuIFlvdSBzZXQgbG9jayBhbmQgdW5sb2NrIGZ1bmN0aW9ucyB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX3NoYXJlX3NldG9wdC5odG1sIj5jdXJsX3NoYXJlX3NldG9wdCgzKTwvYT4gdG9vLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZW4sIHlvdSBtYWtlIGFuIGVhc3kgaGFuZGxlIHRvIHVzZSB0aGlzIHNoYXJlLCB5b3Ugc2V0IHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxPUFRfU0hBUkU8L3NwYW4+IG9wdGlvbiB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwiPmN1cmxfZWFzeV9zZXRvcHQoMyk8L2E+LCBhbmQgcGFzcyBpbiBzaGFyZSBoYW5kbGUuIFlvdSBjYW4gbWFrZSBhbnkgbnVtYmVyIG9mIGVhc3kgaGFuZGxlcyBzaGFyZSB0aGUgc2FtZSBzaGFyZSBoYW5kbGUuIAorPHAgY2xhc3M9ImxldmVsMCI+VG8gbWFrZSBhbiBlYXN5IGhhbmRsZSBzdG9wIHVzaW5nIHRoYXQgcGFydGljdWxhciBzaGFyZSwgeW91IHNldCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxPUFRfU0hBUkU8L3NwYW4+IHRvIE5VTEwgZm9yIHRoYXQgZWFzeSBoYW5kbGUuIFRvIG1ha2UgYSBoYW5kbGUgc3RvcCBzaGFyaW5nIGEgcGFydGljdWxhciBkYXRhLCB5b3UgY2FuIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTFNIT1BUX1VOU0hBUkU8L3NwYW4+IGl0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4geW91J3JlIGRvbmUgdXNpbmcgdGhlIHNoYXJlLCBtYWtlIHN1cmUgdGhhdCBubyBlYXN5IGhhbmRsZSBpcyBzdGlsbCB1c2luZyBpdCwgYW5kIGNhbGwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfc2hhcmVfY2xlYW51cC5odG1sIj5jdXJsX3NoYXJlX2NsZWFudXAoMyk8L2E+IG9uIHRoZSBoYW5kbGUuIDxhIG5hbWU9IlNFRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U0VFIEFMU088L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9Im1hbnBhZ2UiIGhyZWY9Ii4vY3VybF9zaGFyZV9pbml0Lmh0bWwiPmN1cmxfc2hhcmVfaW5pdCAoMyk8L2E+IDxhIGNsYXNzPSJtYW5wYWdlIiBocmVmPSIuL2N1cmxfc2hhcmVfc2V0b3B0Lmh0bWwiPiAgY3VybF9zaGFyZV9zZXRvcHQgKDMpPC9hPiA8YSBjbGFzcz0ibWFucGFnZSIgaHJlZj0iLi9jdXJsX3NoYXJlX2NsZWFudXAuaHRtbCI+ICBjdXJsX3NoYXJlX2NsZWFudXAgKDMpPC9hPiA8cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLXNoYXJlLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLXNoYXJlLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWZiNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtc2hhcmUucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLXR1dG9yaWFsLjMgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC10dXRvcmlhbC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjY2EyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC10dXRvcmlhbC4zCkBAIC0wLDAgKzEsMTM2OSBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCBsaWJjdXJsLXR1dG9yaWFsIDMgIjQgTWFyIDIwMDkiICJsaWJjdXJsIiAibGliY3VybCBwcm9ncmFtbWluZyIKKy5TSCBOQU1FCitsaWJjdXJsLXR1dG9yaWFsIFwtIGxpYmN1cmwgcHJvZ3JhbW1pbmcgdHV0b3JpYWwKKy5TSCAiT2JqZWN0aXZlIgorVGhpcyBkb2N1bWVudCBhdHRlbXB0cyB0byBkZXNjcmliZSB0aGUgZ2VuZXJhbCBwcmluY2lwbGVzIGFuZCBzb21lIGJhc2ljCithcHByb2FjaGVzIHRvIGNvbnNpZGVyIHdoZW4gcHJvZ3JhbW1pbmcgd2l0aCBsaWJjdXJsLiBUaGUgdGV4dCB3aWxsIGZvY3VzCittYWlubHkgb24gdGhlIEMgaW50ZXJmYWNlIGJ1dCBtaWdodCBhcHBseSBmYWlybHkgd2VsbCBvbiBvdGhlciBpbnRlcmZhY2VzIGFzCit3ZWxsIGFzIHRoZXkgdXN1YWxseSBmb2xsb3cgdGhlIEMgb25lIHByZXR0eSBjbG9zZWx5LgorCitUaGlzIGRvY3VtZW50IHdpbGwgcmVmZXIgdG8gJ3RoZSB1c2VyJyBhcyB0aGUgcGVyc29uIHdyaXRpbmcgdGhlIHNvdXJjZSBjb2RlCit0aGF0IHVzZXMgbGliY3VybC4gVGhhdCB3b3VsZCBwcm9iYWJseSBiZSB5b3Ugb3Igc29tZW9uZSBpbiB5b3VyIHBvc2l0aW9uLgorV2hhdCB3aWxsIGJlIGdlbmVyYWxseSByZWZlcnJlZCB0byBhcyAndGhlIHByb2dyYW0nIHdpbGwgYmUgdGhlIGNvbGxlY3RlZAorc291cmNlIGNvZGUgdGhhdCB5b3Ugd3JpdGUgdGhhdCBpcyB1c2luZyBsaWJjdXJsIGZvciB0cmFuc2ZlcnMuIFRoZSBwcm9ncmFtCitpcyBvdXRzaWRlIGxpYmN1cmwgYW5kIGxpYmN1cmwgaXMgb3V0c2lkZSBvZiB0aGUgcHJvZ3JhbS4KKworVG8gZ2V0IG1vcmUgZGV0YWlscyBvbiBhbGwgb3B0aW9ucyBhbmQgZnVuY3Rpb25zIGRlc2NyaWJlZCBoZXJlaW4sIHBsZWFzZQorcmVmZXIgdG8gdGhlaXIgcmVzcGVjdGl2ZSBtYW4gcGFnZXMuCisKKy5TSCAiQnVpbGRpbmciCitUaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgd2F5cyB0byBidWlsZCBDIHByb2dyYW1zLiBUaGlzIGNoYXB0ZXIgd2lsbCBhc3N1bWUgYQorVU5JWC1zdHlsZSBidWlsZCBwcm9jZXNzLiBJZiB5b3UgdXNlIGEgZGlmZmVyZW50IGJ1aWxkIHN5c3RlbSwgeW91IGNhbiBzdGlsbAorcmVhZCB0aGlzIHRvIGdldCBnZW5lcmFsIGluZm9ybWF0aW9uIHRoYXQgbWF5IGFwcGx5IHRvIHlvdXIgZW52aXJvbm1lbnQgYXMKK3dlbGwuCisuSVAgIkNvbXBpbGluZyB0aGUgUHJvZ3JhbSIKK1lvdXIgY29tcGlsZXIgbmVlZHMgdG8ga25vdyB3aGVyZSB0aGUgbGliY3VybCBoZWFkZXJzIGFyZSBsb2NhdGVkLiBUaGVyZWZvcmUKK3lvdSBtdXN0IHNldCB5b3VyIGNvbXBpbGVyJ3MgaW5jbHVkZSBwYXRoIHRvIHBvaW50IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91CitpbnN0YWxsZWQgdGhlbS4gVGhlICdjdXJsLWNvbmZpZydbM10gdG9vbCBjYW4gYmUgdXNlZCB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbjoKKworJCBjdXJsLWNvbmZpZyAtLWNmbGFncworCisuSVAgIkxpbmtpbmcgdGhlIFByb2dyYW0gd2l0aCBsaWJjdXJsIgorV2hlbiBoYXZpbmcgY29tcGlsZWQgdGhlIHByb2dyYW0sIHlvdSBuZWVkIHRvIGxpbmsgeW91ciBvYmplY3QgZmlsZXMgdG8gY3JlYXRlCithIHNpbmdsZSBleGVjdXRhYmxlLiBGb3IgdGhhdCB0byBzdWNjZWVkLCB5b3UgbmVlZCB0byBsaW5rIHdpdGggbGliY3VybCBhbmQKK3Bvc3NpYmx5IGFsc28gd2l0aCBvdGhlciBsaWJyYXJpZXMgdGhhdCBsaWJjdXJsIGl0c2VsZiBkZXBlbmRzIG9uLiBMaWtlIHRoZQorT3BlblNTTCBsaWJyYXJpZXMsIGJ1dCBldmVuIHNvbWUgc3RhbmRhcmQgT1MgbGlicmFyaWVzIG1heSBiZSBuZWVkZWQgb24gdGhlCitjb21tYW5kIGxpbmUuIFRvIGZpZ3VyZSBvdXQgd2hpY2ggZmxhZ3MgdG8gdXNlLCBvbmNlIGFnYWluIHRoZSAnY3VybC1jb25maWcnCit0b29sIGNvbWVzIHRvIHRoZSByZXNjdWU6CisKKyQgY3VybC1jb25maWcgLS1saWJzCisKKy5JUCAiU1NMIG9yIE5vdCIKK2xpYmN1cmwgY2FuIGJlIGJ1aWx0IGFuZCBjdXN0b21pemVkIGluIG1hbnkgd2F5cy4gT25lIG9mIHRoZSB0aGluZ3MgdGhhdAordmFyaWVzIGZyb20gZGlmZmVyZW50IGxpYnJhcmllcyBhbmQgYnVpbGRzIGlzIHRoZSBzdXBwb3J0IGZvciBTU0wtYmFzZWQKK3RyYW5zZmVycywgbGlrZSBIVFRQUyBhbmQgRlRQUy4gSWYgYSBzdXBwb3J0ZWQgU1NMIGxpYnJhcnkgd2FzIGRldGVjdGVkCitwcm9wZXJseSBhdCBidWlsZC10aW1lLCBsaWJjdXJsIHdpbGwgYmUgYnVpbHQgd2l0aCBTU0wgc3VwcG9ydC4gVG8gZmlndXJlIG91dAoraWYgYW4gaW5zdGFsbGVkIGxpYmN1cmwgaGFzIGJlZW4gYnVpbHQgd2l0aCBTU0wgc3VwcG9ydCBlbmFibGVkLCB1c2UKK1wmJ2N1cmwtY29uZmlnJyBsaWtlIHRoaXM6CisKKyQgY3VybC1jb25maWcgLS1mZWF0dXJlCisKK0FuZCBpZiBTU0wgaXMgc3VwcG9ydGVkLCB0aGUga2V5d29yZCAnU1NMJyB3aWxsIGJlIHdyaXR0ZW4gdG8gc3Rkb3V0LAorcG9zc2libHkgdG9nZXRoZXIgd2l0aCBhIGZldyBvdGhlciBmZWF0dXJlcyB0aGF0IGNvdWxkIGJlIGVpdGhlciBvbiBvciBvZmYgb24KK2ZvciBkaWZmZXJlbnQgbGliY3VybHMuCisKK1NlZSBhbHNvIHRoZSAiRmVhdHVyZXMgbGliY3VybCBQcm92aWRlcyIgZnVydGhlciBkb3duLgorLklQICJhdXRvY29uZiBtYWNybyIKK1doZW4geW91IHdyaXRlIHlvdXIgY29uZmlndXJlIHNjcmlwdCB0byBkZXRlY3QgbGliY3VybCBhbmQgc2V0dXAgdmFyaWFibGVzCithY2NvcmRpbmdseSwgd2Ugb2ZmZXIgYSBwcmV3cml0dGVuIG1hY3JvIHRoYXQgcHJvYmFibHkgZG9lcyBldmVyeXRoaW5nIHlvdQorbmVlZCBpbiB0aGlzIGFyZWEuIFNlZSBkb2NzL2xpYmN1cmwvbGliY3VybC5tNCBmaWxlIC0gaXQgaW5jbHVkZXMgZG9jcyBvbiBob3cKK3RvIHVzZSBpdC4KKworLlNIICJQb3J0YWJsZSBDb2RlIGluIGEgUG9ydGFibGUgV29ybGQiCitUaGUgcGVvcGxlIGJlaGluZCBsaWJjdXJsIGhhdmUgcHV0IGEgY29uc2lkZXJhYmxlIGVmZm9ydCB0byBtYWtlIGxpYmN1cmwgd29yaworb24gYSBsYXJnZSBhbW91bnQgb2YgZGlmZmVyZW50IG9wZXJhdGluZyBzeXN0ZW1zIGFuZCBlbnZpcm9ubWVudHMuCisKK1lvdSBwcm9ncmFtIGxpYmN1cmwgdGhlIHNhbWUgd2F5IG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBsaWJjdXJsIHJ1bnMgb24uIFRoZXJlCithcmUgb25seSB2ZXJ5IGZldyBtaW5vciBjb25zaWRlcmF0aW9ucyB0aGF0IGRpZmZlci4gSWYgeW91IGp1c3QgbWFrZSBzdXJlIHRvCit3cml0ZSB5b3VyIGNvZGUgcG9ydGFibGUgZW5vdWdoLCB5b3UgbWF5IHZlcnkgd2VsbCBjcmVhdGUgeW91cnNlbGYgYSB2ZXJ5Citwb3J0YWJsZSBwcm9ncmFtLiBsaWJjdXJsIHNob3VsZG4ndCBzdG9wIHlvdSBmcm9tIHRoYXQuCisKKy5TSCAiR2xvYmFsIFByZXBhcmF0aW9uIgorVGhlIHByb2dyYW0gbXVzdCBpbml0aWFsaXplIHNvbWUgb2YgdGhlIGxpYmN1cmwgZnVuY3Rpb25hbGl0eSBnbG9iYWxseS4gVGhhdAorbWVhbnMgaXQgc2hvdWxkIGJlIGRvbmUgZXhhY3RseSBvbmNlLCBubyBtYXR0ZXIgaG93IG1hbnkgdGltZXMgeW91IGludGVuZCB0bwordXNlIHRoZSBsaWJyYXJ5LiBPbmNlIGZvciB5b3VyIHByb2dyYW0ncyBlbnRpcmUgbGlmZSB0aW1lLiBUaGlzIGlzIGRvbmUgdXNpbmcKKworIGN1cmxfZ2xvYmFsX2luaXQoKQorCithbmQgaXQgdGFrZXMgb25lIHBhcmFtZXRlciB3aGljaCBpcyBhIGJpdCBwYXR0ZXJuIHRoYXQgdGVsbHMgbGliY3VybCB3aGF0IHRvCitpbml0aWFsaXplLiBVc2luZyBcZklDVVJMX0dMT0JBTF9BTExcZlAgd2lsbCBtYWtlIGl0IGluaXRpYWxpemUgYWxsIGtub3duCitpbnRlcm5hbCBzdWIgbW9kdWxlcywgYW5kIG1pZ2h0IGJlIGEgZ29vZCBkZWZhdWx0IG9wdGlvbi4gVGhlIGN1cnJlbnQgdHdvIGJpdHMKK3RoYXQgYXJlIHNwZWNpZmllZCBhcmU6CisuUlMKKy5JUCAiQ1VSTF9HTE9CQUxfV0lOMzIiCit3aGljaCBvbmx5IGRvZXMgYW55dGhpbmcgb24gV2luZG93cyBtYWNoaW5lcy4gV2hlbiB1c2VkIG9uCithIFdpbmRvd3MgbWFjaGluZSwgaXQnbGwgbWFrZSBsaWJjdXJsIGluaXRpYWxpemUgdGhlIHdpbjMyIHNvY2tldAorc3R1ZmYuIFdpdGhvdXQgaGF2aW5nIHRoYXQgaW5pdGlhbGl6ZWQgcHJvcGVybHksIHlvdXIgcHJvZ3JhbSBjYW5ub3QgdXNlCitzb2NrZXRzIHByb3Blcmx5LiBZb3Ugc2hvdWxkIG9ubHkgZG8gdGhpcyBvbmNlIGZvciBlYWNoIGFwcGxpY2F0aW9uLCBzbyBpZgoreW91ciBwcm9ncmFtIGFscmVhZHkgZG9lcyB0aGlzIG9yIG9mIGFub3RoZXIgbGlicmFyeSBpbiB1c2UgZG9lcyBpdCwgeW91CitzaG91bGQgbm90IHRlbGwgbGliY3VybCB0byBkbyB0aGlzIGFzIHdlbGwuCisuSVAgQ1VSTF9HTE9CQUxfU1NMCit3aGljaCBvbmx5IGRvZXMgYW55dGhpbmcgb24gbGliY3VybHMgY29tcGlsZWQgYW5kIGJ1aWx0IFNTTC1lbmFibGVkLiBPbiB0aGVzZQorc3lzdGVtcywgdGhpcyB3aWxsIG1ha2UgbGliY3VybCBpbml0aWFsaXplIHRoZSBTU0wgbGlicmFyeSBwcm9wZXJseSBmb3IgdGhpcworYXBwbGljYXRpb24uIFRoaXMgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UgZm9yIGVhY2ggYXBwbGljYXRpb24gc28gaWYgeW91cgorcHJvZ3JhbSBvciBhbm90aGVyIGxpYnJhcnkgYWxyZWFkeSBkb2VzIHRoaXMsIHRoaXMgYml0IHNob3VsZCBub3QgYmUgbmVlZGVkLgorLlJFCisKK2xpYmN1cmwgaGFzIGEgZGVmYXVsdCBwcm90ZWN0aW9uIG1lY2hhbmlzbSB0aGF0IGRldGVjdHMgaWYKK1xmSWN1cmxfZ2xvYmFsX2luaXQoMylcZlAgaGFzbid0IGJlZW4gY2FsbGVkIGJ5IHRoZSB0aW1lCitcZkljdXJsX2Vhc3lfcGVyZm9ybSgzKVxmUCBpcyBjYWxsZWQgYW5kIGlmIHRoYXQgaXMgdGhlIGNhc2UsIGxpYmN1cmwgcnVucyB0aGUKK2Z1bmN0aW9uIGl0c2VsZiB3aXRoIGEgZ3Vlc3NlZCBiaXQgcGF0dGVybi4gUGxlYXNlIG5vdGUgdGhhdCBkZXBlbmRpbmcgc29sZWx5CitvbiB0aGlzIGlzIG5vdCBjb25zaWRlcmVkIG5pY2Ugbm9yIHZlcnkgZ29vZC4KKworV2hlbiB0aGUgcHJvZ3JhbSBubyBsb25nZXIgdXNlcyBsaWJjdXJsLCBpdCBzaG91bGQgY2FsbAorXGZJY3VybF9nbG9iYWxfY2xlYW51cCgzKVxmUCwgd2hpY2ggaXMgdGhlIG9wcG9zaXRlIG9mIHRoZSBpbml0IGNhbGwuIEl0IHdpbGwKK3RoZW4gZG8gdGhlIHJldmVyc2VkIG9wZXJhdGlvbnMgdG8gY2xlYW51cCB0aGUgcmVzb3VyY2VzIHRoZQorXGZJY3VybF9nbG9iYWxfaW5pdCgzKVxmUCBjYWxsIGluaXRpYWxpemVkLgorCitSZXBlYXRlZCBjYWxscyB0byBcZkljdXJsX2dsb2JhbF9pbml0KDMpXGZQIGFuZCBcZkljdXJsX2dsb2JhbF9jbGVhbnVwKDMpXGZQCitzaG91bGQgYmUgYXZvaWRlZC4gVGhleSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBlYWNoLgorCisuU0ggIkZlYXR1cmVzIGxpYmN1cmwgUHJvdmlkZXMiCitJdCBpcyBjb25zaWRlcmVkIGJlc3QtcHJhY3RpY2UgdG8gZGV0ZXJtaW5lIGxpYmN1cmwgZmVhdHVyZXMgYXQgcnVuLXRpbWUKK3JhdGhlciB0aGFuIGF0IGJ1aWxkLXRpbWUgKGlmIHBvc3NpYmxlIG9mIGNvdXJzZSkuIEJ5IGNhbGxpbmcKK1xmSWN1cmxfdmVyc2lvbl9pbmZvKDMpXGZQIGFuZCBjaGVja2luZyBvdXQgdGhlIGRldGFpbHMgb2YgdGhlIHJldHVybmVkCitzdHJ1Y3QsIHlvdXIgcHJvZ3JhbSBjYW4gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgdGhlIGN1cnJlbnRseSBydW5uaW5nIGxpYmN1cmwKK3N1cHBvcnRzLgorCisuU0ggIkhhbmRsZSB0aGUgRWFzeSBsaWJjdXJsIgorbGliY3VybCBmaXJzdCBpbnRyb2R1Y2VkIHRoZSBzbyBjYWxsZWQgZWFzeSBpbnRlcmZhY2UuIEFsbCBvcGVyYXRpb25zIGluIHRoZQorZWFzeSBpbnRlcmZhY2UgYXJlIHByZWZpeGVkIHdpdGggJ2N1cmxfZWFzeScuCisKK1JlY2VudCBsaWJjdXJsIHZlcnNpb25zIGFsc28gb2ZmZXIgdGhlIG11bHRpIGludGVyZmFjZS4gTW9yZSBhYm91dCB0aGF0CitpbnRlcmZhY2UsIHdoYXQgaXQgaXMgdGFyZ2V0ZWQgZm9yIGFuZCBob3cgdG8gdXNlIGl0IGlzIGRldGFpbGVkIGluIGEgc2VwYXJhdGUKK2NoYXB0ZXIgZnVydGhlciBkb3duLiBZb3Ugc3RpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlYXN5IGludGVyZmFjZSBmaXJzdCwKK3NvIHBsZWFzZSBjb250aW51ZSByZWFkaW5nIGZvciBiZXR0ZXIgdW5kZXJzdGFuZGluZy4KKworVG8gdXNlIHRoZSBlYXN5IGludGVyZmFjZSwgeW91IG11c3QgZmlyc3QgY3JlYXRlIHlvdXJzZWxmIGFuIGVhc3kgaGFuZGxlLiBZb3UKK25lZWQgb25lIGhhbmRsZSBmb3IgZWFjaCBlYXN5IHNlc3Npb24geW91IHdhbnQgdG8gcGVyZm9ybS4gQmFzaWNhbGx5LCB5b3UKK3Nob3VsZCB1c2Ugb25lIGhhbmRsZSBmb3IgZXZlcnkgdGhyZWFkIHlvdSBwbGFuIHRvIHVzZSBmb3IgdHJhbnNmZXJyaW5nLiBZb3UKK211c3QgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgaGFuZGxlIGluIG11bHRpcGxlIHRocmVhZHMuCisKK0dldCBhbiBlYXN5IGhhbmRsZSB3aXRoCisKKyBlYXN5aGFuZGxlID0gY3VybF9lYXN5X2luaXQoKTsKKworSXQgcmV0dXJucyBhbiBlYXN5IGhhbmRsZS4gVXNpbmcgdGhhdCB5b3UgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwOiBzZXR0aW5nCit1cCB5b3VyIHByZWZlcnJlZCBhY3Rpb25zLiBBIGhhbmRsZSBpcyBqdXN0IGEgbG9naWMgZW50aXR5IGZvciB0aGUgdXBjb21pbmcKK3RyYW5zZmVyIG9yIHNlcmllcyBvZiB0cmFuc2ZlcnMuCisKK1lvdSBzZXQgcHJvcGVydGllcyBhbmQgb3B0aW9ucyBmb3IgdGhpcyBoYW5kbGUgdXNpbmcKK1xmSWN1cmxfZWFzeV9zZXRvcHQoMylcZlAuIFRoZXkgY29udHJvbCBob3cgdGhlIHN1YnNlcXVlbnQgdHJhbnNmZXIgb3IKK3RyYW5zZmVycyB3aWxsIGJlIG1hZGUuIE9wdGlvbnMgcmVtYWluIHNldCBpbiB0aGUgaGFuZGxlIHVudGlsIHNldCBhZ2FpbiB0bworc29tZXRoaW5nIGRpZmZlcmVudC4gQWxhcywgbXVsdGlwbGUgcmVxdWVzdHMgdXNpbmcgdGhlIHNhbWUgaGFuZGxlIHdpbGwgdXNlCit0aGUgc2FtZSBvcHRpb25zLgorCitNYW55IG9mIHRoZSBvcHRpb25zIHlvdSBzZXQgaW4gbGliY3VybCBhcmUgInN0cmluZ3MiLCBwb2ludGVycyB0byBkYXRhCit0ZXJtaW5hdGVkIHdpdGggYSB6ZXJvIGJ5dGUuIFdoZW4geW91IHNldCBzdHJpbmdzIHdpdGgKK1xmSWN1cmxfZWFzeV9zZXRvcHQoMylcZlAsIGxpYmN1cmwgbWFrZXMgaXRzIG93biBjb3B5IHNvIHRoYXQgdGhleSBkb24ndAorbmVlZCB0byBiZSBrZXB0IGFyb3VuZCBpbiB5b3VyIGFwcGxpY2F0aW9uIGFmdGVyIGJlaW5nIHNldFs0XS4KKworT25lIG9mIHRoZSBtb3N0IGJhc2ljIHByb3BlcnRpZXMgdG8gc2V0IGluIHRoZSBoYW5kbGUgaXMgdGhlIFVSTC4gWW91IHNldAoreW91ciBwcmVmZXJyZWQgVVJMIHRvIHRyYW5zZmVyIHdpdGggQ1VSTE9QVF9VUkwgaW4gYSBtYW5uZXIgc2ltaWxhciB0bzoKKworLm5mCisgY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIENVUkxPUFRfVVJMLCAiaHR0cDovL2RvbWFpbi5jb20vIik7CisuZmkKKworTGV0J3MgYXNzdW1lIGZvciBhIHdoaWxlIHRoYXQgeW91IHdhbnQgdG8gcmVjZWl2ZSBkYXRhIGFzIHRoZSBVUkwgaWRlbnRpZmllcyBhCityZW1vdGUgcmVzb3VyY2UgeW91IHdhbnQgdG8gZ2V0IGhlcmUuIFNpbmNlIHlvdSB3cml0ZSBhIHNvcnQgb2YgYXBwbGljYXRpb24KK3RoYXQgbmVlZHMgdGhpcyB0cmFuc2ZlciwgSSBhc3N1bWUgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBnZXQgdGhlIGRhdGEgcGFzc2VkCit0byB5b3UgZGlyZWN0bHkgaW5zdGVhZCBvZiBzaW1wbHkgZ2V0dGluZyBpdCBwYXNzZWQgdG8gc3Rkb3V0LiBTbywgeW91IHdyaXRlCit5b3VyIG93biBmdW5jdGlvbiB0aGF0IG1hdGNoZXMgdGhpcyBwcm90b3R5cGU6CisKKyBzaXplX3Qgd3JpdGVfZGF0YSh2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnVzZXJwKTsKKworWW91IHRlbGwgbGliY3VybCB0byBwYXNzIGFsbCBkYXRhIHRvIHRoaXMgZnVuY3Rpb24gYnkgaXNzdWluZyBhIGZ1bmN0aW9uCitzaW1pbGFyIHRvIHRoaXM6CisKKyBjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgd3JpdGVfZGF0YSk7CisKK1lvdSBjYW4gY29udHJvbCB3aGF0IGRhdGEgeW91ciBjYWxsYmFjayBmdW5jdGlvbiBnZXRzIGluIHRoZSBmb3VydGggYXJndW1lbnQKK2J5IHNldHRpbmcgYW5vdGhlciBwcm9wZXJ0eToKKworIGN1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9XUklURURBVEEsICZpbnRlcm5hbF9zdHJ1Y3QpOworCitVc2luZyB0aGF0IHByb3BlcnR5LCB5b3UgY2FuIGVhc2lseSBwYXNzIGxvY2FsIGRhdGEgYmV0d2VlbiB5b3VyIGFwcGxpY2F0aW9uCithbmQgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBpbnZva2VkIGJ5IGxpYmN1cmwuIGxpYmN1cmwgaXRzZWxmIHdvbid0IHRvdWNoIHRoZQorZGF0YSB5b3UgcGFzcyB3aXRoIFxmSUNVUkxPUFRfV1JJVEVEQVRBXGZQLgorCitsaWJjdXJsIG9mZmVycyBpdHMgb3duIGRlZmF1bHQgaW50ZXJuYWwgY2FsbGJhY2sgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiB0aGUgZGF0YQoraWYgeW91IGRvbid0IHNldCB0aGUgY2FsbGJhY2sgd2l0aCBcZklDVVJMT1BUX1dSSVRFRlVOQ1RJT05cZlAuIEl0IHdpbGwgdGhlbgorc2ltcGx5IG91dHB1dCB0aGUgcmVjZWl2ZWQgZGF0YSB0byBzdGRvdXQuIFlvdSBjYW4gaGF2ZSB0aGUgZGVmYXVsdCBjYWxsYmFjaword3JpdGUgdGhlIGRhdGEgdG8gYSBkaWZmZXJlbnQgZmlsZSBoYW5kbGUgYnkgcGFzc2luZyBhICdGSUxFIConIHRvIGEgZmlsZQorb3BlbmVkIGZvciB3cml0aW5nIHdpdGggdGhlIFxmSUNVUkxPUFRfV1JJVEVEQVRBXGZQIG9wdGlvbi4KKworTm93LCB3ZSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIGhhdmUgYSBkZWVwIGJyZWF0aC4gSGVyZSdzIG9uZSBvZiB0aG9zZQorcmFyZSBwbGF0Zm9ybS1kZXBlbmRlbnQgbml0cGlja3MuIERpZCB5b3Ugc3BvdCBpdD8gT24gc29tZSBwbGF0Zm9ybXNbMl0sCitsaWJjdXJsIHdvbid0IGJlIGFibGUgdG8gb3BlcmF0ZSBvbiBmaWxlcyBvcGVuZWQgYnkgdGhlIHByb2dyYW0uIFRodXMsIGlmIHlvdQordXNlIHRoZSBkZWZhdWx0IGNhbGxiYWNrIGFuZCBwYXNzIGluIGFuIG9wZW4gZmlsZSB3aXRoCitcZklDVVJMT1BUX1dSSVRFREFUQVxmUCwgaXQgd2lsbCBjcmFzaC4gWW91IHNob3VsZCB0aGVyZWZvcmUgYXZvaWQgdGhpcyB0bworbWFrZSB5b3VyIHByb2dyYW0gcnVuIGZpbmUgdmlydHVhbGx5IGV2ZXJ5d2hlcmUuCisKKyhcZklDVVJMT1BUX1dSSVRFREFUQVxmUCB3YXMgZm9ybWVybHkga25vd24gYXMgXGZJQ1VSTE9QVF9GSUxFXGZQLiBCb3RoIG5hbWVzCitzdGlsbCB3b3JrIGFuZCBkbyB0aGUgc2FtZSB0aGluZykuCisKK0lmIHlvdSdyZSB1c2luZyBsaWJjdXJsIGFzIGEgd2luMzIgRExMLCB5b3UgTVVTVCB1c2UgdGhlCitcZklDVVJMT1BUX1dSSVRFRlVOQ1RJT05cZlAgaWYgeW91IHNldCBcZklDVVJMT1BUX1dSSVRFREFUQVxmUCAtIG9yIHlvdSB3aWxsCitleHBlcmllbmNlIGNyYXNoZXMuCisKK1RoZXJlIGFyZSBvZiBjb3Vyc2UgbWFueSBtb3JlIG9wdGlvbnMgeW91IGNhbiBzZXQsIGFuZCB3ZSdsbCBnZXQgYmFjayB0byBhIGZldworb2YgdGhlbSBsYXRlci4gTGV0J3MgaW5zdGVhZCBjb250aW51ZSB0byB0aGUgYWN0dWFsIHRyYW5zZmVyOgorCisgc3VjY2VzcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGVhc3loYW5kbGUpOworCitcZkljdXJsX2Vhc3lfcGVyZm9ybSgzKVxmUCB3aWxsIGNvbm5lY3QgdG8gdGhlIHJlbW90ZSBzaXRlLCBkbyB0aGUgbmVjZXNzYXJ5Citjb21tYW5kcyBhbmQgcmVjZWl2ZSB0aGUgdHJhbnNmZXIuIFdoZW5ldmVyIGl0IHJlY2VpdmVzIGRhdGEsIGl0IGNhbGxzIHRoZQorY2FsbGJhY2sgZnVuY3Rpb24gd2UgcHJldmlvdXNseSBzZXQuIFRoZSBmdW5jdGlvbiBtYXkgZ2V0IG9uZSBieXRlIGF0IGEgdGltZSwKK29yIGl0IG1heSBnZXQgbWFueSBraWxvYnl0ZXMgYXQgb25jZS4gbGliY3VybCBkZWxpdmVycyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFzCitvZnRlbiBhcyBwb3NzaWJsZS4gWW91ciBjYWxsYmFjayBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaXQKK1wmInRvb2sgY2FyZSBvZiIuIElmIHRoYXQgaXMgbm90IHRoZSBleGFjdCBzYW1lIGFtb3VudCBvZiBieXRlcyB0aGF0IHdhcworcGFzc2VkIHRvIGl0LCBsaWJjdXJsIHdpbGwgYWJvcnQgdGhlIG9wZXJhdGlvbiBhbmQgcmV0dXJuIHdpdGggYW4gZXJyb3IgY29kZS4KKworV2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcmV0dXJuIGNvZGUgdGhhdCBpbmZvcm1zCit5b3UgaWYgaXQgc3VjY2VlZGVkIGluIGl0cyBtaXNzaW9uIG9yIG5vdC4gSWYgYSByZXR1cm4gY29kZSBpc24ndCBlbm91Z2ggZm9yCit5b3UsIHlvdSBjYW4gdXNlIHRoZSBDVVJMT1BUX0VSUk9SQlVGRkVSIHRvIHBvaW50IGxpYmN1cmwgdG8gYSBidWZmZXIgb2YgeW91cnMKK3doZXJlIGl0J2xsIHN0b3JlIGEgaHVtYW4gcmVhZGFibGUgZXJyb3IgbWVzc2FnZSBhcyB3ZWxsLgorCitJZiB5b3UgdGhlbiB3YW50IHRvIHRyYW5zZmVyIGFub3RoZXIgZmlsZSwgdGhlIGhhbmRsZSBpcyByZWFkeSB0byBiZSB1c2VkCithZ2Fpbi4gTWluZCB5b3UsIGl0IGlzIGV2ZW4gcHJlZmVycmVkIHRoYXQgeW91IHJlLXVzZSBhbiBleGlzdGluZyBoYW5kbGUgaWYKK3lvdSBpbnRlbmQgdG8gbWFrZSBhbm90aGVyIHRyYW5zZmVyLiBsaWJjdXJsIHdpbGwgdGhlbiBhdHRlbXB0IHRvIHJlLXVzZSB0aGUKK3ByZXZpb3VzIGNvbm5lY3Rpb24uCisKK0ZvciBzb21lIHByb3RvY29scywgZG93bmxvYWRpbmcgYSBmaWxlIGNhbiBpbnZvbHZlIGEgY29tcGxpY2F0ZWQgcHJvY2VzcyBvZgorbG9nZ2luZyBpbiwgc2V0dGluZyB0aGUgdHJhbnNmZXIgbW9kZSwgY2hhbmdpbmcgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZAorZmluYWxseSB0cmFuc2ZlcnJpbmcgdGhlIGZpbGUgZGF0YS4gbGliY3VybCB0YWtlcyBjYXJlIG9mIGFsbCB0aGF0Citjb21wbGljYXRpb24gZm9yIHlvdS4gR2l2ZW4gc2ltcGx5IHRoZSBVUkwgdG8gYSBmaWxlLCBsaWJjdXJsIHdpbGwgdGFrZSBjYXJlCitvZiBhbGwgdGhlIGRldGFpbHMgbmVlZGVkIHRvIGdldCB0aGUgZmlsZSBtb3ZlZCBmcm9tIG9uZSBtYWNoaW5lIHRvIGFub3RoZXIuCisKKy5TSCAiTXVsdGktdGhyZWFkaW5nIElzc3VlcyIKK1RoZSBmaXJzdCBiYXNpYyBydWxlIGlzIHRoYXQgeW91IG11c3QgXGZCbmV2ZXJcZlAgc2ltdWx0YW5lb3VzbHkgc2hhcmUgYQorbGliY3VybCBoYW5kbGUgKGJlIGl0IGVhc3kgb3IgbXVsdGkgb3Igd2hhdGV2ZXIpIGJldHdlZW4gbXVsdGlwbGUKK3RocmVhZHMuIE9ubHkgdXNlIG9uZSBoYW5kbGUgaW4gb25lIHRocmVhZCBhdCBhbnkgdGltZS4gWW91IGNhbiBwYXNzIHRoZQoraGFuZGxlcyBhcm91bmQgYW1vbmcgdGhyZWFkcywgYnV0IHlvdSBtdXN0IG5ldmVyIHVzZSBhIHNpbmdsZSBoYW5kbGUgZnJvbSBtb3JlCit0aGFuIG9uZSB0aHJlYWQgYXQgYW55IGdpdmVuIHRpbWUuCisKK2xpYmN1cmwgaXMgY29tcGxldGVseSB0aHJlYWQgc2FmZSwgZXhjZXB0IGZvciB0d28gaXNzdWVzOiBzaWduYWxzIGFuZCBTU0wvVExTCitoYW5kbGVycy4gU2lnbmFscyBhcmUgdXNlZCBmb3IgdGltaW5nIG91dCBuYW1lIHJlc29sdmVzIChkdXJpbmcgRE5TIGxvb2t1cCkgLQord2hlbiBidWlsdCB3aXRob3V0IGMtYXJlcyBzdXBwb3J0IGFuZCBub3Qgb24gV2luZG93cy4KKworSWYgeW91IGFyZSBhY2Nlc3NpbmcgSFRUUFMgb3IgRlRQUyBVUkxzIGluIGEgbXVsdGktdGhyZWFkZWQgbWFubmVyLCB5b3UgYXJlCit0aGVuIG9mIGNvdXJzZSB1c2luZyB0aGUgdW5kZXJseWluZyBTU0wgbGlicmFyeSBtdWx0aS10aHJlYWRlZCBhbmQgdGhvc2UgbGlicworbWlnaHQgaGF2ZSB0aGVpciBvd24gcmVxdWlyZW1lbnRzIG9uIHRoaXMgaXNzdWUuIEJhc2ljYWxseSwgeW91IG5lZWQgdG8KK3Byb3ZpZGUgb25lIG9yIHR3byBmdW5jdGlvbnMgdG8gYWxsb3cgaXQgdG8gZnVuY3Rpb24gcHJvcGVybHkuIEZvciBhbGwKK2RldGFpbHMsIHNlZSB0aGlzOgorCitPcGVuU1NMCisKKyBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvY3J5cHRvL3RocmVhZHMuaHRtbCNERVNDUklQVElPTgorCitHbnVUTFMKKworIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbnV0bHMvbWFudWFsL2h0bWxfbm9kZS9NdWx0aV8wMDJkdGhyZWFkZWQtYXBwbGljYXRpb25zLmh0bWwKKworTlNTCisKKyBpcyBjbGFpbWVkIHRvIGJlIHRocmVhZC1zYWZlIGFscmVhZHkgd2l0aG91dCBhbnl0aGluZyByZXF1aXJlZC4KKworUG9sYXJTU0wKKworIFJlcXVpcmVkIGFjdGlvbnMgdW5rbm93bi4KKworeWFzc2wKKworIFJlcXVpcmVkIGFjdGlvbnMgdW5rbm93bi4KKworYXhUTFMKKworIFJlcXVpcmVkIGFjdGlvbnMgdW5rbm93bi4KKworV2hlbiB1c2luZyBtdWx0aXBsZSB0aHJlYWRzIHlvdSBzaG91bGQgc2V0IHRoZSBDVVJMT1BUX05PU0lHTkFMIG9wdGlvbiB0byAxCitmb3IgYWxsIGhhbmRsZXMuIEV2ZXJ5dGhpbmcgd2lsbCBvciBtaWdodCB3b3JrIGZpbmUgZXhjZXB0IHRoYXQgdGltZW91dHMgYXJlCitub3QgaG9ub3JlZCBkdXJpbmcgdGhlIEROUyBsb29rdXAgLSB3aGljaCB5b3UgY2FuIHdvcmsgYXJvdW5kIGJ5IGJ1aWxkaW5nCitsaWJjdXJsIHdpdGggYy1hcmVzIHN1cHBvcnQuIGMtYXJlcyBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBhc3luY2hyb25vdXMKK25hbWUgcmVzb2x2ZXMuIE9uIHNvbWUgcGxhdGZvcm1zLCBsaWJjdXJsIHNpbXBseSB3aWxsIG5vdCBmdW5jdGlvbiBwcm9wZXJseQorbXVsdGktdGhyZWFkZWQgdW5sZXNzIHRoaXMgb3B0aW9uIGlzIHNldC4KKworQWxzbywgbm90ZSB0aGF0IENVUkxPUFRfRE5TX1VTRV9HTE9CQUxfQ0FDSEUgaXMgbm90IHRocmVhZC1zYWZlLgorCisuU0ggIldoZW4gSXQgRG9lc24ndCBXb3JrIgorVGhlcmUgd2lsbCBhbHdheXMgYmUgdGltZXMgd2hlbiB0aGUgdHJhbnNmZXIgZmFpbHMgZm9yIHNvbWUgcmVhc29uLiBZb3UgbWlnaHQKK2hhdmUgc2V0IHRoZSB3cm9uZyBsaWJjdXJsIG9wdGlvbiBvciBtaXN1bmRlcnN0b29kIHdoYXQgdGhlIGxpYmN1cmwgb3B0aW9uCithY3R1YWxseSBkb2VzLCBvciB0aGUgcmVtb3RlIHNlcnZlciBtaWdodCByZXR1cm4gbm9uLXN0YW5kYXJkIHJlcGxpZXMgdGhhdAorY29uZnVzZSB0aGUgbGlicmFyeSB3aGljaCB0aGVuIGNvbmZ1c2VzIHlvdXIgcHJvZ3JhbS4KKworVGhlcmUncyBvbmUgZ29sZGVuIHJ1bGUgd2hlbiB0aGVzZSB0aGluZ3Mgb2NjdXI6IHNldCB0aGUgQ1VSTE9QVF9WRVJCT1NFCitvcHRpb24gdG8gMS4gSXQnbGwgY2F1c2UgdGhlIGxpYnJhcnkgdG8gc3BldyBvdXQgdGhlIGVudGlyZSBwcm90b2NvbAorZGV0YWlscyBpdCBzZW5kcywgc29tZSBpbnRlcm5hbCBpbmZvIGFuZCBzb21lIHJlY2VpdmVkIHByb3RvY29sIGRhdGEgYXMgd2VsbAorKGVzcGVjaWFsbHkgd2hlbiB1c2luZyBGVFApLiBJZiB5b3UncmUgdXNpbmcgSFRUUCwgYWRkaW5nIHRoZSBoZWFkZXJzIGluIHRoZQorcmVjZWl2ZWQgb3V0cHV0IHRvIHN0dWR5IGlzIGFsc28gYSBjbGV2ZXIgd2F5IHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nCit3aHkgdGhlIHNlcnZlciBiZWhhdmVzIHRoZSB3YXkgaXQgZG9lcy4gSW5jbHVkZSBoZWFkZXJzIGluIHRoZSBub3JtYWwgYm9keQorb3V0cHV0IHdpdGggQ1VSTE9QVF9IRUFERVIgc2V0IDEuCisKK09mIGNvdXJzZSwgdGhlcmUgYXJlIGJ1Z3MgbGVmdC4gV2UgbmVlZCB0byBrbm93IGFib3V0IHRoZW0gdG8gYmUgYWJsZQordG8gZml4IHRoZW0sIHNvIHdlJ3JlIHF1aXRlIGRlcGVuZGVudCBvbiB5b3VyIGJ1ZyByZXBvcnRzISBXaGVuIHlvdSBkbyByZXBvcnQKK3N1c3BlY3RlZCBidWdzIGluIGxpYmN1cmwsIHBsZWFzZSBpbmNsdWRlIGFzIG1hbnkgZGV0YWlscyBhcyB5b3UgcG9zc2libHkgY2FuOiBhCitwcm90b2NvbCBkdW1wIHRoYXQgQ1VSTE9QVF9WRVJCT1NFIHByb2R1Y2VzLCBsaWJyYXJ5IHZlcnNpb24sIGFzIG11Y2ggYXMKK3Bvc3NpYmxlIG9mIHlvdXIgY29kZSB0aGF0IHVzZXMgbGliY3VybCwgb3BlcmF0aW5nIHN5c3RlbSBuYW1lIGFuZCB2ZXJzaW9uLAorY29tcGlsZXIgbmFtZSBhbmQgdmVyc2lvbiBldGMuCisKK0lmIENVUkxPUFRfVkVSQk9TRSBpcyBub3QgZW5vdWdoLCB5b3UgaW5jcmVhc2UgdGhlIGxldmVsIG9mIGRlYnVnIGRhdGEgeW91cgorYXBwbGljYXRpb24gcmVjZWl2ZSBieSB1c2luZyB0aGUgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OLgorCitHZXR0aW5nIHNvbWUgaW4tZGVwdGgga25vd2xlZGdlIGFib3V0IHRoZSBwcm90b2NvbHMgaW52b2x2ZWQgaXMgbmV2ZXIgd3JvbmcsCithbmQgaWYgeW91J3JlIHRyeWluZyB0byBkbyBmdW5ueSB0aGluZ3MsIHlvdSBtaWdodCB2ZXJ5IHdlbGwgdW5kZXJzdGFuZAorbGliY3VybCBhbmQgaG93IHRvIHVzZSBpdCBiZXR0ZXIgaWYgeW91IHN0dWR5IHRoZSBhcHByb3ByaWF0ZSBSRkMgZG9jdW1lbnRzCithdCBsZWFzdCBicmllZmx5LgorCisuU0ggIlVwbG9hZCBEYXRhIHRvIGEgUmVtb3RlIFNpdGUiCitsaWJjdXJsIHRyaWVzIHRvIGtlZXAgYSBwcm90b2NvbCBpbmRlcGVuZGVudCBhcHByb2FjaCB0byBtb3N0IHRyYW5zZmVycywgdGh1cwordXBsb2FkaW5nIHRvIGEgcmVtb3RlIEZUUCBzaXRlIGlzIHZlcnkgc2ltaWxhciB0byB1cGxvYWRpbmcgZGF0YSB0byBhIEhUVFAKK3NlcnZlciB3aXRoIGEgUFVUIHJlcXVlc3QuCisKK09mIGNvdXJzZSwgZmlyc3QgeW91IGVpdGhlciBjcmVhdGUgYW4gZWFzeSBoYW5kbGUgb3IgeW91IHJlLXVzZSBvbmUgZXhpc3RpbmcKK29uZS4gVGhlbiB5b3Ugc2V0IHRoZSBVUkwgdG8gb3BlcmF0ZSBvbiBqdXN0IGxpa2UgYmVmb3JlLiBUaGlzIGlzIHRoZSByZW1vdGUKK1VSTCwgdGhhdCB3ZSBub3cgd2lsbCB1cGxvYWQuCisKK1NpbmNlIHdlIHdyaXRlIGFuIGFwcGxpY2F0aW9uLCB3ZSBtb3N0IGxpa2VseSB3YW50IGxpYmN1cmwgdG8gZ2V0IHRoZSB1cGxvYWQKK2RhdGEgYnkgYXNraW5nIHVzIGZvciBpdC4gVG8gbWFrZSBpdCBkbyB0aGF0LCB3ZSBzZXQgdGhlIHJlYWQgY2FsbGJhY2sgYW5kCit0aGUgY3VzdG9tIHBvaW50ZXIgbGliY3VybCB3aWxsIHBhc3MgdG8gb3VyIHJlYWQgY2FsbGJhY2suIFRoZSByZWFkIGNhbGxiYWNrCitzaG91bGQgaGF2ZSBhIHByb3RvdHlwZSBzaW1pbGFyIHRvOgorCisgc2l6ZV90IGZ1bmN0aW9uKGNoYXIgKmJ1ZnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBuaXRlbXMsIHZvaWQgKnVzZXJwKTsKKworV2hlcmUgYnVmcHRyIGlzIHRoZSBwb2ludGVyIHRvIGEgYnVmZmVyIHdlIGZpbGwgaW4gd2l0aCBkYXRhIHRvIHVwbG9hZCBhbmQKK3NpemUqbml0ZW1zIGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgYW5kIHRoZXJlZm9yZSBhbHNvIHRoZSBtYXhpbXVtIGFtb3VudAorb2YgZGF0YSB3ZSBjYW4gcmV0dXJuIHRvIGxpYmN1cmwgaW4gdGhpcyBjYWxsLiBUaGUgJ3VzZXJwJyBwb2ludGVyIGlzIHRoZQorY3VzdG9tIHBvaW50ZXIgd2Ugc2V0IHRvIHBvaW50IHRvIGEgc3RydWN0IG9mIG91cnMgdG8gcGFzcyBwcml2YXRlIGRhdGEKK2JldHdlZW4gdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgY2FsbGJhY2suCisKKyBjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfUkVBREZVTkNUSU9OLCByZWFkX2Z1bmN0aW9uKTsKKworIGN1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9SRUFEREFUQSwgJmZpbGVkYXRhKTsKKworVGVsbCBsaWJjdXJsIHRoYXQgd2Ugd2FudCB0byB1cGxvYWQ6CisKKyBjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfVVBMT0FELCAxTCk7CisKK0EgZmV3IHByb3RvY29scyB3b24ndCBiZWhhdmUgcHJvcGVybHkgd2hlbiB1cGxvYWRzIGFyZSBkb25lIHdpdGhvdXQgYW55IHByaW9yCitrbm93bGVkZ2Ugb2YgdGhlIGV4cGVjdGVkIGZpbGUgc2l6ZS4gU28sIHNldCB0aGUgdXBsb2FkIGZpbGUgc2l6ZSB1c2luZyB0aGUKK0NVUkxPUFRfSU5GSUxFU0laRV9MQVJHRSBmb3IgYWxsIGtub3duIGZpbGUgc2l6ZXMgbGlrZSB0aGlzWzFdOgorCisubmYKKyAvKiBpbiB0aGlzIGV4YW1wbGUsIGZpbGVfc2l6ZSBtdXN0IGJlIGFuIGN1cmxfb2ZmX3QgdmFyaWFibGUgKi8KKyBjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfSU5GSUxFU0laRV9MQVJHRSwgZmlsZV9zaXplKTsKKy5maQorCitXaGVuIHlvdSBjYWxsIFxmSWN1cmxfZWFzeV9wZXJmb3JtKDMpXGZQIHRoaXMgdGltZSwgaXQnbGwgcGVyZm9ybSBhbGwgdGhlCituZWNlc3Nhcnkgb3BlcmF0aW9ucyBhbmQgd2hlbiBpdCBoYXMgaW52b2tlZCB0aGUgdXBsb2FkIGl0J2xsIGNhbGwgeW91cgorc3VwcGxpZWQgY2FsbGJhY2sgdG8gZ2V0IHRoZSBkYXRhIHRvIHVwbG9hZC4gVGhlIHByb2dyYW0gc2hvdWxkIHJldHVybiBhcyBtdWNoCitkYXRhIGFzIHBvc3NpYmxlIGluIGV2ZXJ5IGludm9rZSwgYXMgdGhhdCBpcyBsaWtlbHkgdG8gbWFrZSB0aGUgdXBsb2FkIHBlcmZvcm0KK2FzIGZhc3QgYXMgcG9zc2libGUuIFRoZSBjYWxsYmFjayBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaXQgd3JvdGUKK2luIHRoZSBidWZmZXIuIFJldHVybmluZyAwIHdpbGwgc2lnbmFsIHRoZSBlbmQgb2YgdGhlIHVwbG9hZC4KKworLlNIICJQYXNzd29yZHMiCitNYW55IHByb3RvY29scyB1c2Ugb3IgZXZlbiByZXF1aXJlIHRoYXQgdXNlciBuYW1lIGFuZCBwYXNzd29yZCBhcmUgcHJvdmlkZWQKK3RvIGJlIGFibGUgdG8gZG93bmxvYWQgb3IgdXBsb2FkIHRoZSBkYXRhIG9mIHlvdXIgY2hvaWNlLiBsaWJjdXJsIG9mZmVycworc2V2ZXJhbCB3YXlzIHRvIHNwZWNpZnkgdGhlbS4KKworTW9zdCBwcm90b2NvbHMgc3VwcG9ydCB0aGF0IHlvdSBzcGVjaWZ5IHRoZSBuYW1lIGFuZCBwYXNzd29yZCBpbiB0aGUgVVJMCitpdHNlbGYuIGxpYmN1cmwgd2lsbCBkZXRlY3QgdGhpcyBhbmQgdXNlIHRoZW0gYWNjb3JkaW5nbHkuIFRoaXMgaXMgd3JpdHRlbgorbGlrZSB0aGlzOgorCisgcHJvdG9jb2w6Ly91c2VyOnBhc3N3b3JkQGV4YW1wbGUuY29tL3BhdGgvCisKK0lmIHlvdSBuZWVkIGFueSBvZGQgbGV0dGVycyBpbiB5b3VyIHVzZXIgbmFtZSBvciBwYXNzd29yZCwgeW91IHNob3VsZCBlbnRlcgordGhlbSBVUkwgZW5jb2RlZCwgYXMgJVhYIHdoZXJlIFhYIGlzIGEgdHdvLWRpZ2l0IGhleGFkZWNpbWFsIG51bWJlci4KKworbGliY3VybCBhbHNvIHByb3ZpZGVzIG9wdGlvbnMgdG8gc2V0IHZhcmlvdXMgcGFzc3dvcmRzLiBUaGUgdXNlciBuYW1lIGFuZAorcGFzc3dvcmQgYXMgc2hvd24gZW1iZWRkZWQgaW4gdGhlIFVSTCBjYW4gaW5zdGVhZCBnZXQgc2V0IHdpdGggdGhlCitDVVJMT1BUX1VTRVJQV0Qgb3B0aW9uLiBUaGUgYXJndW1lbnQgcGFzc2VkIHRvIGxpYmN1cmwgc2hvdWxkIGJlIGEgY2hhciAqIHRvCithIHN0cmluZyBpbiB0aGUgZm9ybWF0ICJ1c2VyOnBhc3N3b3JkIi4gSW4gYSBtYW5uZXIgbGlrZSB0aGlzOgorCisgY3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX1VTRVJQV0QsICJteW5hbWU6dGhlc2VjcmV0Iik7CisKK0Fub3RoZXIgY2FzZSB3aGVyZSBuYW1lIGFuZCBwYXNzd29yZCBtaWdodCBiZSBuZWVkZWQgYXQgdGltZXMsIGlzIGZvciB0aG9zZQordXNlcnMgd2hvIG5lZWQgdG8gYXV0aGVudGljYXRlIHRoZW1zZWx2ZXMgdG8gYSBwcm94eSB0aGV5IHVzZS4gbGliY3VybCBvZmZlcnMKK2Fub3RoZXIgb3B0aW9uIGZvciB0aGlzLCB0aGUgQ1VSTE9QVF9QUk9YWVVTRVJQV0QuIEl0IGlzIHVzZWQgcXVpdGUgc2ltaWxhcgordG8gdGhlIENVUkxPUFRfVVNFUlBXRCBvcHRpb24gbGlrZSB0aGlzOgorCisgY3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX1BST1hZVVNFUlBXRCwgIm15bmFtZTp0aGVzZWNyZXQiKTsKKworVGhlcmUncyBhIGxvbmcgdGltZSBVTklYICJzdGFuZGFyZCIgd2F5IG9mIHN0b3JpbmcgZnRwIHVzZXIgbmFtZXMgYW5kCitwYXNzd29yZHMsIG5hbWVseSBpbiB0aGUgJEhPTUUvLm5ldHJjIGZpbGUuIFRoZSBmaWxlIHNob3VsZCBiZSBtYWRlIHByaXZhdGUKK3NvIHRoYXQgb25seSB0aGUgdXNlciBtYXkgcmVhZCBpdCAoc2VlIGFsc28gdGhlICJTZWN1cml0eSBDb25zaWRlcmF0aW9ucyIKK2NoYXB0ZXIpLCBhcyBpdCBtaWdodCBjb250YWluIHRoZSBwYXNzd29yZCBpbiBwbGFpbiB0ZXh0LiBsaWJjdXJsIGhhcyB0aGUKK2FiaWxpdHkgdG8gdXNlIHRoaXMgZmlsZSB0byBmaWd1cmUgb3V0IHdoYXQgc2V0IG9mIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgdG8KK3VzZSBmb3IgYSBwYXJ0aWN1bGFyIGhvc3QuIEFzIGFuIGV4dGVuc2lvbiB0byB0aGUgbm9ybWFsIGZ1bmN0aW9uYWxpdHksCitsaWJjdXJsIGFsc28gc3VwcG9ydHMgdGhpcyBmaWxlIGZvciBub24tRlRQIHByb3RvY29scyBzdWNoIGFzIEhUVFAuIFRvIG1ha2UKK2N1cmwgdXNlIHRoaXMgZmlsZSwgdXNlIHRoZSBDVVJMT1BUX05FVFJDIG9wdGlvbjoKKworIGN1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9ORVRSQywgMUwpOworCitBbmQgYSB2ZXJ5IGJhc2ljIGV4YW1wbGUgb2YgaG93IHN1Y2ggYSAubmV0cmMgZmlsZSBtYXkgbG9vayBsaWtlOgorCisubmYKKyBtYWNoaW5lIG15aG9zdC5teWRvbWFpbi5jb20KKyBsb2dpbiB1c2VybG9naW4KKyBwYXNzd29yZCBzZWNyZXR3b3JkCisuZmkKKworQWxsIHRoZXNlIGV4YW1wbGVzIGhhdmUgYmVlbiBjYXNlcyB3aGVyZSB0aGUgcGFzc3dvcmQgaGFzIGJlZW4gb3B0aW9uYWwsIG9yCithdCBsZWFzdCB5b3UgY291bGQgbGVhdmUgaXQgb3V0IGFuZCBoYXZlIGxpYmN1cmwgYXR0ZW1wdCB0byBkbyBpdHMgam9iCit3aXRob3V0IGl0LiBUaGVyZSBhcmUgdGltZXMgd2hlbiB0aGUgcGFzc3dvcmQgaXNuJ3Qgb3B0aW9uYWwsIGxpa2Ugd2hlbgoreW91J3JlIHVzaW5nIGFuIFNTTCBwcml2YXRlIGtleSBmb3Igc2VjdXJlIHRyYW5zZmVycy4KKworVG8gcGFzcyB0aGUga25vd24gcHJpdmF0ZSBrZXkgcGFzc3dvcmQgdG8gbGliY3VybDoKKworIGN1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9LRVlQQVNTV0QsICJrZXlwYXNzd29yZCIpOworCisuU0ggIkhUVFAgQXV0aGVudGljYXRpb24iCitUaGUgcHJldmlvdXMgY2hhcHRlciBzaG93ZWQgaG93IHRvIHNldCB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIGZvciBnZXR0aW5nCitVUkxzIHRoYXQgcmVxdWlyZSBhdXRoZW50aWNhdGlvbi4gV2hlbiB1c2luZyB0aGUgSFRUUCBwcm90b2NvbCwgdGhlcmUgYXJlCittYW55IGRpZmZlcmVudCB3YXlzIGEgY2xpZW50IGNhbiBwcm92aWRlIHRob3NlIGNyZWRlbnRpYWxzIHRvIHRoZSBzZXJ2ZXIgYW5kCit5b3UgY2FuIGNvbnRyb2wgd2hpY2ggd2F5IGxpYmN1cmwgd2lsbCAoYXR0ZW1wdCB0bykgdXNlIHRoZW0uIFRoZSBkZWZhdWx0IEhUVFAKK2F1dGhlbnRpY2F0aW9uIG1ldGhvZCBpcyBjYWxsZWQgJ0Jhc2ljJywgd2hpY2ggaXMgc2VuZGluZyB0aGUgbmFtZSBhbmQKK3Bhc3N3b3JkIGluIGNsZWFyLXRleHQgaW4gdGhlIEhUVFAgcmVxdWVzdCwgYmFzZTY0LWVuY29kZWQuIFRoaXMgaXMgaW5zZWN1cmUuCisKK0F0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZywgbGliY3VybCBjYW4gYmUgYnVpbHQgdG8gdXNlOiBCYXNpYywgRGlnZXN0LCBOVExNLAorTmVnb3RpYXRlLCBHU1MtTmVnb3RpYXRlIGFuZCBTUE5FR08uIFlvdSBjYW4gdGVsbCBsaWJjdXJsIHdoaWNoIG9uZSB0byB1c2UKK3dpdGggQ1VSTE9QVF9IVFRQQVVUSCBhcyBpbjoKKworIGN1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfRElHRVNUKTsKKworQW5kIHdoZW4geW91IHNlbmQgYXV0aGVudGljYXRpb24gdG8gYSBwcm94eSwgeW91IGNhbiBhbHNvIHNldCBhdXRoZW50aWNhdGlvbgordHlwZSB0aGUgc2FtZSB3YXkgYnV0IGluc3RlYWQgd2l0aCBDVVJMT1BUX1BST1hZQVVUSDoKKworIGN1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9QUk9YWUFVVEgsIENVUkxBVVRIX05UTE0pOworCitCb3RoIHRoZXNlIG9wdGlvbnMgYWxsb3cgeW91IHRvIHNldCBtdWx0aXBsZSB0eXBlcyAoYnkgT1JpbmcgdGhlbSB0b2dldGhlciksCit0byBtYWtlIGxpYmN1cmwgcGljayB0aGUgbW9zdCBzZWN1cmUgb25lIG91dCBvZiB0aGUgdHlwZXMgdGhlIHNlcnZlci9wcm94eQorY2xhaW1zIHRvIHN1cHBvcnQuIFRoaXMgbWV0aG9kIGRvZXMgaG93ZXZlciBhZGQgYSByb3VuZC10cmlwIHNpbmNlIGxpYmN1cmwKK211c3QgZmlyc3QgYXNrIHRoZSBzZXJ2ZXIgd2hhdCBpdCBzdXBwb3J0czoKKworIGN1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9IVFRQQVVUSCwKKyBDVVJMQVVUSF9ESUdFU1R8Q1VSTEFVVEhfQkFTSUMpOworCitGb3IgY29udmVuaWVuY2UsIHlvdSBjYW4gdXNlIHRoZSAnQ1VSTEFVVEhfQU5ZJyBkZWZpbmUgKGluc3RlYWQgb2YgYSBsaXN0Cit3aXRoIHNwZWNpZmljIHR5cGVzKSB3aGljaCBhbGxvd3MgbGliY3VybCB0byB1c2Ugd2hhdGV2ZXIgbWV0aG9kIGl0IHdhbnRzLgorCitXaGVuIGFza2luZyBmb3IgbXVsdGlwbGUgdHlwZXMsIGxpYmN1cmwgd2lsbCBwaWNrIHRoZSBhdmFpbGFibGUgb25lIGl0Citjb25zaWRlcnMgImJlc3QiIGluIGl0cyBvd24gaW50ZXJuYWwgb3JkZXIgb2YgcHJlZmVyZW5jZS4KKworLlNIICJIVFRQIFBPU1RpbmciCitXZSBnZXQgbWFueSBxdWVzdGlvbnMgcmVnYXJkaW5nIGhvdyB0byBpc3N1ZSBIVFRQIFBPU1RzIHdpdGggbGliY3VybCB0aGUKK3Byb3BlciB3YXkuIFRoaXMgY2hhcHRlciB3aWxsIHRodXMgaW5jbHVkZSBleGFtcGxlcyB1c2luZyBib3RoIGRpZmZlcmVudAordmVyc2lvbnMgb2YgSFRUUCBQT1NUIHRoYXQgbGliY3VybCBzdXBwb3J0cy4KKworVGhlIGZpcnN0IHZlcnNpb24gaXMgdGhlIHNpbXBsZSBQT1NULCB0aGUgbW9zdCBjb21tb24gdmVyc2lvbiwgdGhhdCBtb3N0IEhUTUwKK3BhZ2VzIHVzaW5nIHRoZSA8Zm9ybT4gdGFnIHVzZXMuIFdlIHByb3ZpZGUgYSBwb2ludGVyIHRvIHRoZSBkYXRhIGFuZCB0ZWxsCitsaWJjdXJsIHRvIHBvc3QgaXQgYWxsIHRvIHRoZSByZW1vdGUgc2l0ZToKKworLm5mCisgICAgY2hhciAqZGF0YT0ibmFtZT1kYW5pZWwmcHJvamVjdD1jdXJsIjsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfUE9TVEZJRUxEUywgZGF0YSk7CisgICAgY3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly9wb3N0aGVyZS5jb20vIik7CisKKyAgICBjdXJsX2Vhc3lfcGVyZm9ybShlYXN5aGFuZGxlKTsgLyogcG9zdCBhd2F5ISAqLworLmZpCisKK1NpbXBsZSBlbm91Z2gsIGh1aD8gU2luY2UgeW91IHNldCB0aGUgUE9TVCBvcHRpb25zIHdpdGggdGhlCitDVVJMT1BUX1BPU1RGSUVMRFMsIHRoaXMgYXV0b21hdGljYWxseSBzd2l0Y2hlcyB0aGUgaGFuZGxlIHRvIHVzZSBQT1NUIGluIHRoZQordXBjb21pbmcgcmVxdWVzdC4KKworT2ssIHNvIHdoYXQgaWYgeW91IHdhbnQgdG8gcG9zdCBiaW5hcnkgZGF0YSB0aGF0IGFsc28gcmVxdWlyZXMgeW91IHRvIHNldCB0aGUKK0NvbnRlbnQtVHlwZTogaGVhZGVyIG9mIHRoZSBwb3N0PyBXZWxsLCBiaW5hcnkgcG9zdHMgcHJldmVudCBsaWJjdXJsIGZyb20KK2JlaW5nIGFibGUgdG8gZG8gc3RybGVuKCkgb24gdGhlIGRhdGEgdG8gZmlndXJlIG91dCB0aGUgc2l6ZSwgc28gdGhlcmVmb3JlIHdlCittdXN0IHRlbGwgbGliY3VybCB0aGUgc2l6ZSBvZiB0aGUgcG9zdCBkYXRhLiBTZXR0aW5nIGhlYWRlcnMgaW4gbGliY3VybAorcmVxdWVzdHMgYXJlIGRvbmUgaW4gYSBnZW5lcmljIHdheSwgYnkgYnVpbGRpbmcgYSBsaXN0IG9mIG91ciBvd24gaGVhZGVycyBhbmQKK3RoZW4gcGFzc2luZyB0aGF0IGxpc3QgdG8gbGliY3VybC4KKworLm5mCisgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnM9TlVMTDsKKyBoZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgIkNvbnRlbnQtVHlwZTogdGV4dC94bWwiKTsKKworIC8qIHBvc3QgYmluYXJ5IGRhdGEgKi8KKyBjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfUE9TVEZJRUxEUywgYmluYXJ5cHRyKTsKKworIC8qIHNldCB0aGUgc2l6ZSBvZiB0aGUgcG9zdGZpZWxkcyBkYXRhICovCisgY3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIDIzTCk7CisKKyAvKiBwYXNzIG91ciBsaXN0IG9mIGN1c3RvbSBtYWRlIGhlYWRlcnMgKi8KKyBjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwgaGVhZGVycyk7CisKKyBjdXJsX2Vhc3lfcGVyZm9ybShlYXN5aGFuZGxlKTsgLyogcG9zdCBhd2F5ISAqLworCisgY3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsgLyogZnJlZSB0aGUgaGVhZGVyIGxpc3QgKi8KKy5maQorCitXaGlsZSB0aGUgc2ltcGxlIGV4YW1wbGVzIGFib3ZlIGNvdmVyIHRoZSBtYWpvcml0eSBvZiBhbGwgY2FzZXMgd2hlcmUgSFRUUAorUE9TVCBvcGVyYXRpb25zIGFyZSByZXF1aXJlZCwgdGhleSBkb24ndCBkbyBtdWx0aS1wYXJ0IGZvcm1wb3N0cy4gTXVsdGktcGFydAorZm9ybXBvc3RzIHdlcmUgaW50cm9kdWNlZCBhcyBhIGJldHRlciB3YXkgdG8gcG9zdCAocG9zc2libHkgbGFyZ2UpIGJpbmFyeSBkYXRhCithbmQgd2VyZSBmaXJzdCBkb2N1bWVudGVkIGluIHRoZSBSRkMxODY3ICh1cGRhdGVkIGluIFJGQzIzODgpLiBUaGV5J3JlIGNhbGxlZAorbXVsdGktcGFydCBiZWNhdXNlIHRoZXkncmUgYnVpbHQgYnkgYSBjaGFpbiBvZiBwYXJ0cywgZWFjaCBwYXJ0IGJlaW5nIGEgc2luZ2xlCit1bml0IG9mIGRhdGEuIEVhY2ggcGFydCBoYXMgaXRzIG93biBuYW1lIGFuZCBjb250ZW50cy4gWW91IGNhbiBpbiBmYWN0IGNyZWF0ZQorYW5kIHBvc3QgYSBtdWx0aS1wYXJ0IGZvcm1wb3N0IHdpdGggdGhlIHJlZ3VsYXIgbGliY3VybCBQT1NUIHN1cHBvcnQgZGVzY3JpYmVkCithYm92ZSwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSB0aGF0IHlvdSBidWlsZCBhIGZvcm1wb3N0IHlvdXJzZWxmIGFuZCBwcm92aWRlCit0byBsaWJjdXJsLiBUbyBtYWtlIHRoYXQgZWFzaWVyLCBsaWJjdXJsIHByb3ZpZGVzIFxmSWN1cmxfZm9ybWFkZCgzKVxmUC4gVXNpbmcKK3RoaXMgZnVuY3Rpb24sIHlvdSBhZGQgcGFydHMgdG8gdGhlIGZvcm0uIFdoZW4geW91J3JlIGRvbmUgYWRkaW5nIHBhcnRzLCB5b3UKK3Bvc3QgdGhlIHdob2xlIGZvcm0uCisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBzZXRzIHR3byBzaW1wbGUgdGV4dCBwYXJ0cyB3aXRoIHBsYWluIHRleHR1YWwgY29udGVudHMsCithbmQgdGhlbiBhIGZpbGUgd2l0aCBiaW5hcnkgY29udGVudHMgYW5kIHVwbG9hZHMgdGhlIHdob2xlIHRoaW5nLgorCisubmYKKyBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqcG9zdD1OVUxMOworIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpsYXN0PU5VTEw7CisgY3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwKKyAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJuYW1lIiwKKyAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLCAiZGFuaWVsIiwgQ1VSTEZPUk1fRU5EKTsKKyBjdXJsX2Zvcm1hZGQoJnBvc3QsICZsYXN0LAorICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgInByb2plY3QiLAorICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZQ09OVEVOVFMsICJjdXJsIiwgQ1VSTEZPUk1fRU5EKTsKKyBjdXJsX2Zvcm1hZGQoJnBvc3QsICZsYXN0LAorICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgImxvZ290eXBlLWltYWdlIiwKKyAgICAgICAgICAgICAgQ1VSTEZPUk1fRklMRUNPTlRFTlQsICJjdXJsLnBuZyIsIENVUkxGT1JNX0VORCk7CisKKyAvKiBTZXQgdGhlIGZvcm0gaW5mbyAqLworIGN1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9IVFRQUE9TVCwgcG9zdCk7CisKKyBjdXJsX2Vhc3lfcGVyZm9ybShlYXN5aGFuZGxlKTsgLyogcG9zdCBhd2F5ISAqLworCisgLyogZnJlZSB0aGUgcG9zdCBkYXRhIGFnYWluICovCisgY3VybF9mb3JtZnJlZShwb3N0KTsKKy5maQorCitNdWx0aXBhcnQgZm9ybXBvc3RzIGFyZSBjaGFpbnMgb2YgcGFydHMgdXNpbmcgTUlNRS1zdHlsZSBzZXBhcmF0b3JzIGFuZAoraGVhZGVycy4gSXQgbWVhbnMgdGhhdCBlYWNoIG9uZSBvZiB0aGVzZSBzZXBhcmF0ZSBwYXJ0cyBnZXQgYSBmZXcgaGVhZGVycyBzZXQKK3RoYXQgZGVzY3JpYmUgdGhlIGluZGl2aWR1YWwgY29udGVudC10eXBlLCBzaXplIGV0Yy4gVG8gZW5hYmxlIHlvdXIKK2FwcGxpY2F0aW9uIHRvIGhhbmRpY3JhZnQgdGhpcyBmb3JtcG9zdCBldmVuIG1vcmUsIGxpYmN1cmwgYWxsb3dzIHlvdSB0bworc3VwcGx5IHlvdXIgb3duIHNldCBvZiBjdXN0b20gaGVhZGVycyB0byBzdWNoIGFuIGluZGl2aWR1YWwgZm9ybSBwYXJ0LiBZb3UgY2FuCitvZiBjb3Vyc2Ugc3VwcGx5IGhlYWRlcnMgdG8gYXMgbWFueSBwYXJ0cyBhcyB5b3UgbGlrZSwgYnV0IHRoaXMgbGl0dGxlIGV4YW1wbGUKK3dpbGwgc2hvdyBob3cgeW91IHNldCBoZWFkZXJzIHRvIG9uZSBzcGVjaWZpYyBwYXJ0IHdoZW4geW91IGFkZCB0aGF0IHRvIHRoZQorcG9zdCBoYW5kbGU6CisKKy5uZgorIHN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzPU5VTEw7CisgaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsICJDb250ZW50LVR5cGU6IHRleHQveG1sIik7CisKKyBjdXJsX2Zvcm1hZGQoJnBvc3QsICZsYXN0LAorICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgImxvZ290eXBlLWltYWdlIiwKKyAgICAgICAgICAgICAgQ1VSTEZPUk1fRklMRUNPTlRFTlQsICJjdXJsLnhtbCIsCisgICAgICAgICAgICAgIENVUkxGT1JNX0NPTlRFTlRIRUFERVIsIGhlYWRlcnMsCisgICAgICAgICAgICAgIENVUkxGT1JNX0VORCk7CisKKyBjdXJsX2Vhc3lfcGVyZm9ybShlYXN5aGFuZGxlKTsgLyogcG9zdCBhd2F5ISAqLworCisgY3VybF9mb3JtZnJlZShwb3N0KTsgLyogZnJlZSBwb3N0ICovCisgY3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsgLyogZnJlZSBjdXN0b20gaGVhZGVyIGxpc3QgKi8KKy5maQorCitTaW5jZSBhbGwgb3B0aW9ucyBvbiBhbiBlYXN5aGFuZGxlIGFyZSAic3RpY2t5IiwgdGhleSByZW1haW4gdGhlIHNhbWUgdW50aWwKK2NoYW5nZWQgZXZlbiBpZiB5b3UgZG8gY2FsbCBcZkljdXJsX2Vhc3lfcGVyZm9ybSgzKVxmUCwgeW91IG1heSBuZWVkIHRvIHRlbGwKK2N1cmwgdG8gZ28gYmFjayB0byBhIHBsYWluIEdFVCByZXF1ZXN0IGlmIHlvdSBpbnRlbmQgdG8gZG8gb25lIGFzIHlvdXIKK25leHQgcmVxdWVzdC4gWW91IGZvcmNlIGFuIGVhc3loYW5kbGUgdG8gZ28gYmFjayB0byBHRVQgYnkgdXNpbmcgdGhlCitDVVJMT1BUX0hUVFBHRVQgb3B0aW9uOgorCisgY3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX0hUVFBHRVQsIDFMKTsKKworSnVzdCBzZXR0aW5nIENVUkxPUFRfUE9TVEZJRUxEUyB0byAiIiBvciBOVUxMIHdpbGwgKm5vdCogc3RvcCBsaWJjdXJsIGZyb20KK2RvaW5nIGEgUE9TVC4gSXQgd2lsbCBqdXN0IG1ha2UgaXQgUE9TVCB3aXRob3V0IGFueSBkYXRhIHRvIHNlbmQhCisKKy5TSCAiU2hvd2luZyBQcm9ncmVzcyIKKworRm9yIGhpc3RvcmljYWwgYW5kIHRyYWRpdGlvbmFsIHJlYXNvbnMsIGxpYmN1cmwgaGFzIGEgYnVpbHQtaW4gcHJvZ3Jlc3MgbWV0ZXIKK3RoYXQgY2FuIGJlIHN3aXRjaGVkIG9uIGFuZCB0aGVuIG1ha2VzIGl0IHByZXNlbnQgYSBwcm9ncmVzcyBtZXRlciBpbiB5b3VyCit0ZXJtaW5hbC4KKworU3dpdGNoIG9uIHRoZSBwcm9ncmVzcyBtZXRlciBieSwgb2RkbHkgZW5vdWdoLCBzZXR0aW5nIENVUkxPUFRfTk9QUk9HUkVTUyB0bworemVyby4gVGhpcyBvcHRpb24gaXMgc2V0IHRvIDEgYnkgZGVmYXVsdC4KKworRm9yIG1vc3QgYXBwbGljYXRpb25zIGhvd2V2ZXIsIHRoZSBidWlsdC1pbiBwcm9ncmVzcyBtZXRlciBpcyB1c2VsZXNzIGFuZAord2hhdCBpbnN0ZWFkIGlzIGludGVyZXN0aW5nIGlzIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgYSBwcm9ncmVzcworY2FsbGJhY2suIFRoZSBmdW5jdGlvbiBwb2ludGVyIHlvdSBwYXNzIHRvIGxpYmN1cmwgd2lsbCB0aGVuIGJlIGNhbGxlZCBvbgoraXJyZWd1bGFyIGludGVydmFscyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHRyYW5zZmVyLgorCitTZXQgdGhlIHByb2dyZXNzIGNhbGxiYWNrIGJ5IHVzaW5nIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTi4gQW5kIHBhc3MgYQorcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgbWF0Y2hlcyB0aGlzIHByb3RvdHlwZToKKworLm5mCisgaW50IHByb2dyZXNzX2NhbGxiYWNrKHZvaWQgKmNsaWVudHAsCisgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkbHRvdGFsLAorICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGxub3csCisgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB1bHRvdGFsLAorICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdWxub3cpOworLmZpCisKK0lmIGFueSBvZiB0aGUgaW5wdXQgYXJndW1lbnRzIGlzIHVua25vd24sIGEgMCB3aWxsIGJlIHBhc3NlZC4gVGhlIGZpcnN0Cithcmd1bWVudCwgdGhlICdjbGllbnRwJyBpcyB0aGUgcG9pbnRlciB5b3UgcGFzcyB0byBsaWJjdXJsIHdpdGgKK0NVUkxPUFRfUFJPR1JFU1NEQVRBLiBsaWJjdXJsIHdvbid0IHRvdWNoIGl0LgorCisuU0ggImxpYmN1cmwgd2l0aCBDKysiCisKK1RoZXJlJ3MgYmFzaWNhbGx5IG9ubHkgb25lIHRoaW5nIHRvIGtlZXAgaW4gbWluZCB3aGVuIHVzaW5nIEMrKyBpbnN0ZWFkIG9mIEMKK3doZW4gaW50ZXJmYWNpbmcgbGliY3VybDoKKworVGhlIGNhbGxiYWNrcyBDQU5OT1QgYmUgbm9uLXN0YXRpYyBjbGFzcyBtZW1iZXIgZnVuY3Rpb25zCisKK0V4YW1wbGUgQysrIGNvZGU6CisKKy5uZgorY2xhc3MgQUNsYXNzIHsKKyAgICBzdGF0aWMgc2l6ZV90IHdyaXRlX2RhdGEodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXJwb2ludGVyKQorICAgIHsKKyAgICAgIC8qIGRvIHdoYXQgeW91IHdhbnQgd2l0aCB0aGUgZGF0YSAqLworICAgIH0KKyB9CisuZmkKKworLlNIICJQcm94aWVzIgorCitXaGF0ICJwcm94eSIgbWVhbnMgYWNjb3JkaW5nIHRvIE1lcnJpYW0tV2Vic3RlcjogImEgcGVyc29uIGF1dGhvcml6ZWQgdG8gYWN0Citmb3IgYW5vdGhlciIgYnV0IGFsc28gInRoZSBhZ2VuY3ksIGZ1bmN0aW9uLCBvciBvZmZpY2Ugb2YgYSBkZXB1dHkgd2hvIGFjdHMgYXMKK2Egc3Vic3RpdHV0ZSBmb3IgYW5vdGhlciIuCisKK1Byb3hpZXMgYXJlIGV4Y2VlZGluZ2x5IGNvbW1vbiB0aGVzZSBkYXlzLiBDb21wYW5pZXMgb2Z0ZW4gb25seSBvZmZlciBJbnRlcm5ldAorYWNjZXNzIHRvIGVtcGxveWVlcyB0aHJvdWdoIHRoZWlyIHByb3hpZXMuIE5ldHdvcmsgY2xpZW50cyBvciB1c2VyLWFnZW50cyBhc2sKK3RoZSBwcm94eSBmb3IgZG9jdW1lbnRzLCB0aGUgcHJveHkgZG9lcyB0aGUgYWN0dWFsIHJlcXVlc3QgYW5kIHRoZW4gaXQgcmV0dXJucwordGhlbS4KKworbGliY3VybCBzdXBwb3J0cyBTT0NLUyBhbmQgSFRUUCBwcm94aWVzLiBXaGVuIGEgZ2l2ZW4gVVJMIGlzIHdhbnRlZCwgbGliY3VybAord2lsbCBhc2sgdGhlIHByb3h5IGZvciBpdCBpbnN0ZWFkIG9mIHRyeWluZyB0byBjb25uZWN0IHRvIHRoZSBhY3R1YWwgaG9zdAoraWRlbnRpZmllZCBpbiB0aGUgVVJMLgorCitJZiB5b3UncmUgdXNpbmcgYSBTT0NLUyBwcm94eSwgeW91IG1heSBmaW5kIHRoYXQgbGliY3VybCBkb2Vzbid0IHF1aXRlIHN1cHBvcnQKK2FsbCBvcGVyYXRpb25zIHRocm91Z2ggaXQuCisKK0ZvciBIVFRQIHByb3hpZXM6IHRoZSBmYWN0IHRoYXQgdGhlIHByb3h5IGlzIGEgSFRUUCBwcm94eSBwdXRzIGNlcnRhaW4KK3Jlc3RyaWN0aW9ucyBvbiB3aGF0IGNhbiBhY3R1YWxseSBoYXBwZW4uIEEgcmVxdWVzdGVkIFVSTCB0aGF0IG1pZ2h0IG5vdCBiZSBhCitIVFRQIFVSTCB3aWxsIGJlIHN0aWxsIGJlIHBhc3NlZCB0byB0aGUgSFRUUCBwcm94eSB0byBkZWxpdmVyIGJhY2sgdG8KK2xpYmN1cmwuIFRoaXMgaGFwcGVucyB0cmFuc3BhcmVudGx5LCBhbmQgYW4gYXBwbGljYXRpb24gbWF5IG5vdCBuZWVkIHRvCitrbm93LiBJIHNheSAibWF5IiwgYmVjYXVzZSBhdCB0aW1lcyBpdCBpcyB2ZXJ5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQKK2FsbCBvcGVyYXRpb25zIG92ZXIgYSBIVFRQIHByb3h5IHVzZSB0aGUgSFRUUCBwcm90b2NvbC4gRm9yIGV4YW1wbGUsIHlvdQorY2FuJ3QgaW52b2tlIHlvdXIgb3duIGN1c3RvbSBGVFAgY29tbWFuZHMgb3IgZXZlbiBwcm9wZXIgRlRQIGRpcmVjdG9yeQorbGlzdGluZ3MuCisKKy5JUCAiUHJveHkgT3B0aW9ucyIKKworVG8gdGVsbCBsaWJjdXJsIHRvIHVzZSBhIHByb3h5IGF0IGEgZ2l2ZW4gcG9ydCBudW1iZXI6CisKKyBjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfUFJPWFksICJwcm94eS1ob3N0LmNvbTo4MDgwIik7CisKK1NvbWUgcHJveGllcyByZXF1aXJlIHVzZXIgYXV0aGVudGljYXRpb24gYmVmb3JlIGFsbG93aW5nIGEgcmVxdWVzdCwgYW5kIHlvdQorcGFzcyB0aGF0IGluZm9ybWF0aW9uIHNpbWlsYXIgdG8gdGhpczoKKworIGN1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9QUk9YWVVTRVJQV0QsICJ1c2VyOnBhc3N3b3JkIik7CisKK0lmIHlvdSB3YW50IHRvLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGhvc3QgbmFtZSBvbmx5IGluIHRoZSBDVVJMT1BUX1BST1hZCitvcHRpb24sIGFuZCBzZXQgdGhlIHBvcnQgbnVtYmVyIHNlcGFyYXRlbHkgd2l0aCBDVVJMT1BUX1BST1hZUE9SVC4KKworVGVsbCBsaWJjdXJsIHdoYXQga2luZCBvZiBwcm94eSBpdCBpcyB3aXRoIENVUkxPUFRfUFJPWFlUWVBFIChpZiBub3QsIGl0IHdpbGwKK2RlZmF1bHQgdG8gYXNzdW1lIGEgSFRUUCBwcm94eSk6CisKKyBjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfUFJPWFlUWVBFLCBDVVJMUFJPWFlfU09DS1M0KTsKKworLklQICJFbnZpcm9ubWVudCBWYXJpYWJsZXMiCisKK2xpYmN1cmwgYXV0b21hdGljYWxseSBjaGVja3MgYW5kIHVzZXMgYSBzZXQgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGtub3cKK3doYXQgcHJveGllcyB0byB1c2UgZm9yIGNlcnRhaW4gcHJvdG9jb2xzLiBUaGUgbmFtZXMgb2YgdGhlIHZhcmlhYmxlcyBhcmUKK2ZvbGxvd2luZyBhbiBhbmNpZW50IGRlIGZhY3RvIHN0YW5kYXJkIGFuZCBhcmUgYnVpbHQgdXAgYXMgIltwcm90b2NvbF1fcHJveHkiCisobm90ZSB0aGUgbG93ZXIgY2FzaW5nKS4gV2hpY2ggbWFrZXMgdGhlIHZhcmlhYmxlIFwmJ2h0dHBfcHJveHknIGNoZWNrZWQgZm9yIGEKK25hbWUgb2YgYSBwcm94eSB0byB1c2Ugd2hlbiB0aGUgaW5wdXQgVVJMIGlzIEhUVFAuIEZvbGxvd2luZyB0aGUgc2FtZSBydWxlLAordGhlIHZhcmlhYmxlIG5hbWVkICdmdHBfcHJveHknIGlzIGNoZWNrZWQgZm9yIEZUUCBVUkxzLiBBZ2FpbiwgdGhlIHByb3hpZXMgYXJlCithbHdheXMgSFRUUCBwcm94aWVzLCB0aGUgZGlmZmVyZW50IG5hbWVzIG9mIHRoZSB2YXJpYWJsZXMgc2ltcGx5IGFsbG93cworZGlmZmVyZW50IEhUVFAgcHJveGllcyB0byBiZSB1c2VkLgorCitUaGUgcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGUgY29udGVudHMgc2hvdWxkIGJlIGluIHRoZSBmb3JtYXQKK1wmIltwcm90b2NvbDovL11bdXNlcjpwYXNzd29yZEBdbWFjaGluZVs6cG9ydF0iLiBXaGVyZSB0aGUgcHJvdG9jb2w6Ly8gcGFydCBpcworc2ltcGx5IGlnbm9yZWQgaWYgcHJlc2VudCAoc28gaHR0cDovL3Byb3h5IGFuZCBibHVlcms6Ly9wcm94eSB3aWxsIGRvIHRoZQorc2FtZSkgYW5kIHRoZSBvcHRpb25hbCBwb3J0IG51bWJlciBzcGVjaWZpZXMgb24gd2hpY2ggcG9ydCB0aGUgcHJveHkgb3BlcmF0ZXMKK29uIHRoZSBob3N0LiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgaW50ZXJuYWwgZGVmYXVsdCBwb3J0IG51bWJlciB3aWxsIGJlIHVzZWQKK2FuZCB0aGF0IGlzIG1vc3QgbGlrZWx5ICpub3QqIHRoZSBvbmUgeW91IHdvdWxkIGxpa2UgaXQgdG8gYmUuCisKK1RoZXJlIGFyZSB0d28gc3BlY2lhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICdhbGxfcHJveHknIGlzIHdoYXQgc2V0cyBwcm94eQorZm9yIGFueSBVUkwgaW4gY2FzZSB0aGUgcHJvdG9jb2wgc3BlY2lmaWMgdmFyaWFibGUgd2Fzbid0IHNldCwgYW5kCitcJidub19wcm94eScgZGVmaW5lcyBhIGxpc3Qgb2YgaG9zdHMgdGhhdCBzaG91bGQgbm90IHVzZSBhIHByb3h5IGV2ZW4gdGhvdWdoIGEKK3ZhcmlhYmxlIG1heSBzYXkgc28uIElmICdub19wcm94eScgaXMgYSBwbGFpbiBhc3RlcmlzayAoIioiKSBpdCBtYXRjaGVzIGFsbAoraG9zdHMuCisKK1RvIGV4cGxpY2l0bHkgZGlzYWJsZSBsaWJjdXJsJ3MgY2hlY2tpbmcgZm9yIGFuZCB1c2luZyB0aGUgcHJveHkgZW52aXJvbm1lbnQKK3ZhcmlhYmxlcywgc2V0IHRoZSBwcm94eSBuYW1lIHRvICIiIC0gYW4gZW1wdHkgc3RyaW5nIC0gd2l0aCBDVVJMT1BUX1BST1hZLgorLklQICJTU0wgYW5kIFByb3hpZXMiCisKK1NTTCBpcyBmb3Igc2VjdXJlIHBvaW50LXRvLXBvaW50IGNvbm5lY3Rpb25zLiBUaGlzIGludm9sdmVzIHN0cm9uZyBlbmNyeXB0aW9uCithbmQgc2ltaWxhciB0aGluZ3MsIHdoaWNoIGVmZmVjdGl2ZWx5IG1ha2VzIGl0IGltcG9zc2libGUgZm9yIGEgcHJveHkgdG8KK29wZXJhdGUgYXMgYSAibWFuIGluIGJldHdlZW4iIHdoaWNoIHRoZSBwcm94eSdzIHRhc2sgaXMsIGFzIHByZXZpb3VzbHkKK2Rpc2N1c3NlZC4gSW5zdGVhZCwgdGhlIG9ubHkgd2F5IHRvIGhhdmUgU1NMIHdvcmsgb3ZlciBhIEhUVFAgcHJveHkgaXMgdG8gYXNrCit0aGUgcHJveHkgdG8gdHVubmVsIHRyb3VnaCBldmVyeXRoaW5nIHdpdGhvdXQgYmVpbmcgYWJsZSB0byBjaGVjayBvciBmaWRkbGUKK3dpdGggdGhlIHRyYWZmaWMuCisKK09wZW5pbmcgYW4gU1NMIGNvbm5lY3Rpb24gb3ZlciBhIEhUVFAgcHJveHkgaXMgdGhlcmVmb3IgYSBtYXR0ZXIgb2YgYXNraW5nIHRoZQorcHJveHkgZm9yIGEgc3RyYWlnaHQgY29ubmVjdGlvbiB0byB0aGUgdGFyZ2V0IGhvc3Qgb24gYSBzcGVjaWZpZWQgcG9ydC4gVGhpcworaXMgbWFkZSB3aXRoIHRoZSBIVFRQIHJlcXVlc3QgQ09OTkVDVC4gKCJwbGVhc2UgbXIgcHJveHksIGNvbm5lY3QgbWUgdG8gdGhhdAorcmVtb3RlIGhvc3QiKS4KKworQmVjYXVzZSBvZiB0aGUgbmF0dXJlIG9mIHRoaXMgb3BlcmF0aW9uLCB3aGVyZSB0aGUgcHJveHkgaGFzIG5vIGlkZWEgd2hhdCBraW5kCitvZiBkYXRhIHRoYXQgaXMgcGFzc2VkIGluIGFuZCBvdXQgdGhyb3VnaCB0aGlzIHR1bm5lbCwgdGhpcyBicmVha3Mgc29tZSBvZiB0aGUKK3ZlcnkgZmV3IGFkdmFudGFnZXMgdGhhdCBjb21lIGZyb20gdXNpbmcgYSBwcm94eSwgc3VjaCBhcyBjYWNoaW5nLiAgTWFueQorb3JnYW5pemF0aW9ucyBwcmV2ZW50IHRoaXMga2luZCBvZiB0dW5uZWxpbmcgdG8gb3RoZXIgZGVzdGluYXRpb24gcG9ydCBudW1iZXJzCit0aGFuIDQ0MyAod2hpY2ggaXMgdGhlIGRlZmF1bHQgSFRUUFMgcG9ydCBudW1iZXIpLgorCisuSVAgIlR1bm5lbGluZyBUaHJvdWdoIFByb3h5IgorQXMgZXhwbGFpbmVkIGFib3ZlLCB0dW5uZWxpbmcgaXMgcmVxdWlyZWQgZm9yIFNTTCB0byB3b3JrIGFuZCBvZnRlbiBldmVuCityZXN0cmljdGVkIHRvIHRoZSBvcGVyYXRpb24gaW50ZW5kZWQgZm9yIFNTTDsgSFRUUFMuCisKK1RoaXMgaXMgaG93ZXZlciBub3QgdGhlIG9ubHkgdGltZSBwcm94eS10dW5uZWxpbmcgbWlnaHQgb2ZmZXIgYmVuZWZpdHMgdG8KK3lvdSBvciB5b3VyIGFwcGxpY2F0aW9uLgorCitBcyB0dW5uZWxpbmcgb3BlbnMgYSBkaXJlY3QgY29ubmVjdGlvbiBmcm9tIHlvdXIgYXBwbGljYXRpb24gdG8gdGhlIHJlbW90ZQorbWFjaGluZSwgaXQgc3VkZGVubHkgYWxzbyByZS1pbnRyb2R1Y2VzIHRoZSBhYmlsaXR5IHRvIGRvIG5vbi1IVFRQCitvcGVyYXRpb25zIG92ZXIgYSBIVFRQIHByb3h5LiBZb3UgY2FuIGluIGZhY3QgdXNlIHRoaW5ncyBzdWNoIGFzIEZUUAordXBsb2FkIG9yIEZUUCBjdXN0b20gY29tbWFuZHMgdGhpcyB3YXkuCisKK0FnYWluLCB0aGlzIGlzIG9mdGVuIHByZXZlbnRlZCBieSB0aGUgYWRtaW5pc3RyYXRvcnMgb2YgcHJveGllcyBhbmQgaXMKK3JhcmVseSBhbGxvd2VkLgorCitUZWxsIGxpYmN1cmwgdG8gdXNlIHByb3h5IHR1bm5lbGluZyBsaWtlIHRoaXM6CisKKyBjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfSFRUUFBST1hZVFVOTkVMLCAxTCk7CisKK0luIGZhY3QsIHRoZXJlIG1pZ2h0IGV2ZW4gYmUgdGltZXMgd2hlbiB5b3Ugd2FudCB0byBkbyBwbGFpbiBIVFRQCitvcGVyYXRpb25zIHVzaW5nIGEgdHVubmVsIGxpa2UgdGhpcywgYXMgaXQgdGhlbiBlbmFibGVzIHlvdSB0byBvcGVyYXRlIG9uCit0aGUgcmVtb3RlIHNlcnZlciBpbnN0ZWFkIG9mIGFza2luZyB0aGUgcHJveHkgdG8gZG8gc28uIGxpYmN1cmwgd2lsbCBub3QKK3N0YW5kIGluIHRoZSB3YXkgZm9yIHN1Y2ggaW5ub3ZhdGl2ZSBhY3Rpb25zIGVpdGhlciEKKworLklQICJQcm94eSBBdXRvLUNvbmZpZyIKKworTmV0c2NhcGUgZmlyc3QgY2FtZSB1cCB3aXRoIHRoaXMuIEl0IGlzIGJhc2ljYWxseSBhIHdlYiBwYWdlICh1c3VhbGx5IHVzaW5nIGEKK1wmLnBhYyBleHRlbnNpb24pIHdpdGggYSBKYXZhc2NyaXB0IHRoYXQgd2hlbiBleGVjdXRlZCBieSB0aGUgYnJvd3NlciB3aXRoIHRoZQorcmVxdWVzdGVkIFVSTCBhcyBpbnB1dCwgcmV0dXJucyBpbmZvcm1hdGlvbiB0byB0aGUgYnJvd3NlciBvbiBob3cgdG8gY29ubmVjdAordG8gdGhlIFVSTC4gVGhlIHJldHVybmVkIGluZm9ybWF0aW9uIG1pZ2h0IGJlICJESVJFQ1QiICh3aGljaCBtZWFucyBubyBwcm94eQorc2hvdWxkIGJlIHVzZWQpLCAiUFJPWFkgaG9zdDpwb3J0IiAodG8gdGVsbCB0aGUgYnJvd3NlciB3aGVyZSB0aGUgcHJveHkgZm9yCit0aGlzIHBhcnRpY3VsYXIgVVJMIGlzKSBvciAiU09DS1MgaG9zdDpwb3J0IiAodG8gZGlyZWN0IHRoZSBicm93c2VyIHRvIGEgU09DS1MKK3Byb3h5KS4KKworbGliY3VybCBoYXMgbm8gbWVhbnMgdG8gaW50ZXJwcmV0IG9yIGV2YWx1YXRlIEphdmFzY3JpcHQgYW5kIHRodXMgaXQgZG9lc24ndAorc3VwcG9ydCB0aGlzLiBJZiB5b3UgZ2V0IHlvdXJzZWxmIGluIGEgcG9zaXRpb24gd2hlcmUgeW91IGZhY2UgdGhpcyBuYXN0eQoraW52ZW50aW9uLCB0aGUgZm9sbG93aW5nIGFkdmljZSBoYXZlIGJlZW4gbWVudGlvbmVkIGFuZCB1c2VkIGluIHRoZSBwYXN0OgorCistIERlcGVuZGluZyBvbiB0aGUgSmF2YXNjcmlwdCBjb21wbGV4aXR5LCB3cml0ZSB1cCBhIHNjcmlwdCB0aGF0IHRyYW5zbGF0ZXMgaXQKK3RvIGFub3RoZXIgbGFuZ3VhZ2UgYW5kIGV4ZWN1dGUgdGhhdC4KKworLSBSZWFkIHRoZSBKYXZhc2NyaXB0IGNvZGUgYW5kIHJld3JpdGUgdGhlIHNhbWUgbG9naWMgaW4gYW5vdGhlciBsYW5ndWFnZS4KKworLSBJbXBsZW1lbnQgYSBKYXZhc2NyaXB0IGludGVycHJldGVyOyBwZW9wbGUgaGF2ZSBzdWNjZXNzZnVsbHkgdXNlZCB0aGUKK01vemlsbGEgSmF2YXNjcmlwdCBlbmdpbmUgaW4gdGhlIHBhc3QuCisKKy0gQXNrIHlvdXIgYWRtaW5zIHRvIHN0b3AgdGhpcywgZm9yIGEgc3RhdGljIHByb3h5IHNldHVwIG9yIHNpbWlsYXIuCisKKy5TSCAiUGVyc2lzdGVuY2UgSXMgVGhlIFdheSB0byBIYXBwaW5lc3MiCisKK1JlLWN5Y2xpbmcgdGhlIHNhbWUgZWFzeSBoYW5kbGUgc2V2ZXJhbCB0aW1lcyB3aGVuIGRvaW5nIG11bHRpcGxlIHJlcXVlc3RzIGlzCit0aGUgd2F5IHRvIGdvLgorCitBZnRlciBlYWNoIHNpbmdsZSBcZkljdXJsX2Vhc3lfcGVyZm9ybSgzKVxmUCBvcGVyYXRpb24sIGxpYmN1cmwgd2lsbCBrZWVwIHRoZQorY29ubmVjdGlvbiBhbGl2ZSBhbmQgb3Blbi4gQSBzdWJzZXF1ZW50IHJlcXVlc3QgdXNpbmcgdGhlIHNhbWUgZWFzeSBoYW5kbGUgdG8KK3RoZSBzYW1lIGhvc3QgbWlnaHQganVzdCBiZSBhYmxlIHRvIHVzZSB0aGUgYWxyZWFkeSBvcGVuIGNvbm5lY3Rpb24hIFRoaXMKK3JlZHVjZXMgbmV0d29yayBpbXBhY3QgYSBsb3QuCisKK0V2ZW4gaWYgdGhlIGNvbm5lY3Rpb24gaXMgZHJvcHBlZCwgYWxsIGNvbm5lY3Rpb25zIGludm9sdmluZyBTU0wgdG8gdGhlIHNhbWUKK2hvc3QgYWdhaW4sIHdpbGwgYmVuZWZpdCBmcm9tIGxpYmN1cmwncyBzZXNzaW9uIElEIGNhY2hlIHRoYXQgZHJhc3RpY2FsbHkKK3JlZHVjZXMgcmUtY29ubmVjdGlvbiB0aW1lLgorCitGVFAgY29ubmVjdGlvbnMgdGhhdCBhcmUga2VwdCBhbGl2ZSBzYXZlIGEgbG90IG9mIHRpbWUsIGFzIHRoZSBjb21tYW5kLQorcmVzcG9uc2Ugcm91bmQtdHJpcHMgYXJlIHNraXBwZWQsIGFuZCBhbHNvIHlvdSBkb24ndCByaXNrIGdldHRpbmcgYmxvY2tlZAord2l0aG91dCBwZXJtaXNzaW9uIHRvIGxvZ2luIGFnYWluIGxpa2Ugb24gbWFueSBGVFAgc2VydmVycyBvbmx5IGFsbG93aW5nIE4KK3BlcnNvbnMgdG8gYmUgbG9nZ2VkIGluIGF0IHRoZSBzYW1lIHRpbWUuCisKK2xpYmN1cmwgY2FjaGVzIEROUyBuYW1lIHJlc29sdmluZyByZXN1bHRzLCB0byBtYWtlIGxvb2t1cHMgb2YgYSBwcmV2aW91c2x5Citsb29rZWQgdXAgbmFtZSBhIGxvdCBmYXN0ZXIuCisKK090aGVyIGludGVyZXN0aW5nIGRldGFpbHMgdGhhdCBpbXByb3ZlIHBlcmZvcm1hbmNlIGZvciBzdWJzZXF1ZW50IHJlcXVlc3RzCittYXkgYWxzbyBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgorCitFYWNoIGVhc3kgaGFuZGxlIHdpbGwgYXR0ZW1wdCB0byBrZWVwIHRoZSBsYXN0IGZldyBjb25uZWN0aW9ucyBhbGl2ZSBmb3IgYQord2hpbGUgaW4gY2FzZSB0aGV5IGFyZSB0byBiZSB1c2VkIGFnYWluLiBZb3UgY2FuIHNldCB0aGUgc2l6ZSBvZiB0aGlzICJjYWNoZSIKK3dpdGggdGhlIENVUkxPUFRfTUFYQ09OTkVDVFMgb3B0aW9uLiBEZWZhdWx0IGlzIDUuIFRoZXJlIGlzIHZlcnkgc2VsZG9tIGFueQorcG9pbnQgaW4gY2hhbmdpbmcgdGhpcyB2YWx1ZSwgYW5kIGlmIHlvdSB0aGluayBvZiBjaGFuZ2luZyB0aGlzIGl0IGlzIG9mdGVuCitqdXN0IGEgbWF0dGVyIG9mIHRoaW5raW5nIGFnYWluLgorCitUbyBmb3JjZSB5b3VyIHVwY29taW5nIHJlcXVlc3QgdG8gbm90IHVzZSBhbiBhbHJlYWR5IGV4aXN0aW5nIGNvbm5lY3Rpb24gKGl0Cit3aWxsIGV2ZW4gY2xvc2Ugb25lIGZpcnN0IGlmIHRoZXJlIGhhcHBlbnMgdG8gYmUgb25lIGFsaXZlIHRvIHRoZSBzYW1lIGhvc3QKK3lvdSdyZSBhYm91dCB0byBvcGVyYXRlIG9uKSwgeW91IGNhbiBkbyB0aGF0IGJ5IHNldHRpbmcgQ1VSTE9QVF9GUkVTSF9DT05ORUNUCit0byAxLiBJbiBhIHNpbWlsYXIgc3Bpcml0LCB5b3UgY2FuIGFsc28gZm9yYmlkIHRoZSB1cGNvbWluZyByZXF1ZXN0IHRvIGJlCisibHlpbmciIGFyb3VuZCBhbmQgcG9zc2libHkgZ2V0IHJlLXVzZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgYnkgc2V0dGluZworQ1VSTE9QVF9GT1JCSURfUkVVU0UgdG8gMS4KKworLlNIICJIVFRQIEhlYWRlcnMgVXNlZCBieSBsaWJjdXJsIgorV2hlbiB5b3UgdXNlIGxpYmN1cmwgdG8gZG8gSFRUUCByZXF1ZXN0cywgaXQnbGwgcGFzcyBhbG9uZyBhIHNlcmllcyBvZiBoZWFkZXJzCithdXRvbWF0aWNhbGx5LiBJdCBtaWdodCBiZSBnb29kIGZvciB5b3UgdG8ga25vdyBhbmQgdW5kZXJzdGFuZCB0aGVzZS4gWW91CitjYW4gcmVwbGFjZSBvciByZW1vdmUgdGhlbSBieSB1c2luZyB0aGUgQ1VSTE9QVF9IVFRQSEVBREVSIG9wdGlvbi4KKworLklQICJIb3N0IgorVGhpcyBoZWFkZXIgaXMgcmVxdWlyZWQgYnkgSFRUUCAxLjEgYW5kIGV2ZW4gbWFueSAxLjAgc2VydmVycyBhbmQgc2hvdWxkIGJlCit0aGUgbmFtZSBvZiB0aGUgc2VydmVyIHdlIHdhbnQgdG8gdGFsayB0by4gVGhpcyBpbmNsdWRlcyB0aGUgcG9ydCBudW1iZXIgaWYKK2FueXRoaW5nIGJ1dCBkZWZhdWx0LgorCisuSVAgIkFjY2VwdCIKK1wmIiovKiIuCisKKy5JUCAiRXhwZWN0IgorV2hlbiBkb2luZyBQT1NUIHJlcXVlc3RzLCBsaWJjdXJsIHNldHMgdGhpcyBoZWFkZXIgdG8gXCYiMTAwLWNvbnRpbnVlIiB0byBhc2sKK3RoZSBzZXJ2ZXIgZm9yIGFuICJPSyIgbWVzc2FnZSBiZWZvcmUgaXQgcHJvY2VlZHMgd2l0aCBzZW5kaW5nIHRoZSBkYXRhIHBhcnQKK29mIHRoZSBwb3N0LiBJZiB0aGUgUE9TVGVkIGRhdGEgYW1vdW50IGlzIGRlZW1lZCAic21hbGwiLCBsaWJjdXJsIHdpbGwgbm90IHVzZQordGhpcyBoZWFkZXIuCisKKy5TSCAiQ3VzdG9taXppbmcgT3BlcmF0aW9ucyIKK1RoZXJlIGlzIGFuIG9uZ29pbmcgZGV2ZWxvcG1lbnQgdG9kYXkgd2hlcmUgbW9yZSBhbmQgbW9yZSBwcm90b2NvbHMgYXJlIGJ1aWx0Cit1cG9uIEhUVFAgZm9yIHRyYW5zcG9ydC4gVGhpcyBoYXMgb2J2aW91cyBiZW5lZml0cyBhcyBIVFRQIGlzIGEgdGVzdGVkIGFuZAorcmVsaWFibGUgcHJvdG9jb2wgdGhhdCBpcyB3aWRlbHkgZGVwbG95ZWQgYW5kIGhhcyBleGNlbGxlbnQgcHJveHktc3VwcG9ydC4KKworV2hlbiB5b3UgdXNlIG9uZSBvZiB0aGVzZSBwcm90b2NvbHMsIGFuZCBldmVuIHdoZW4gZG9pbmcgb3RoZXIga2luZHMgb2YKK3Byb2dyYW1taW5nIHlvdSBtYXkgbmVlZCB0byBjaGFuZ2UgdGhlIHRyYWRpdGlvbmFsIEhUVFAgKG9yIEZUUCBvci4uLikKK21hbm5lcnMuIFlvdSBtYXkgbmVlZCB0byBjaGFuZ2Ugd29yZHMsIGhlYWRlcnMgb3IgdmFyaW91cyBkYXRhLgorCitsaWJjdXJsIGlzIHlvdXIgZnJpZW5kIGhlcmUgdG9vLgorCisuSVAgQ1VTVE9NUkVRVUVTVAorSWYganVzdCBjaGFuZ2luZyB0aGUgYWN0dWFsIEhUVFAgcmVxdWVzdCBrZXl3b3JkIGlzIHdoYXQgeW91IHdhbnQsIGxpa2Ugd2hlbgorR0VULCBIRUFEIG9yIFBPU1QgaXMgbm90IGdvb2QgZW5vdWdoIGZvciB5b3UsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCBpcyB0aGVyZQorZm9yIHlvdS4gSXQgaXMgdmVyeSBzaW1wbGUgdG8gdXNlOgorCisgY3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsICJNWU9XTlJFUVVFU1QiKTsKKworV2hlbiB1c2luZyB0aGUgY3VzdG9tIHJlcXVlc3QsIHlvdSBjaGFuZ2UgdGhlIHJlcXVlc3Qga2V5d29yZCBvZiB0aGUgYWN0dWFsCityZXF1ZXN0IHlvdSBhcmUgcGVyZm9ybWluZy4gVGh1cywgYnkgZGVmYXVsdCB5b3UgbWFrZSBhIEdFVCByZXF1ZXN0IGJ1dCB5b3UgY2FuCithbHNvIG1ha2UgYSBQT1NUIG9wZXJhdGlvbiAoYXMgZGVzY3JpYmVkIGJlZm9yZSkgYW5kIHRoZW4gcmVwbGFjZSB0aGUgUE9TVAora2V5d29yZCBpZiB5b3Ugd2FudCB0by4gWW91J3JlIHRoZSBib3NzLgorCisuSVAgIk1vZGlmeSBIZWFkZXJzIgorSFRUUC1saWtlIHByb3RvY29scyBwYXNzIGEgc2VyaWVzIG9mIGhlYWRlcnMgdG8gdGhlIHNlcnZlciB3aGVuIGRvaW5nIHRoZQorcmVxdWVzdCwgYW5kIHlvdSdyZSBmcmVlIHRvIHBhc3MgYW55IGFtb3VudCBvZiBleHRyYSBoZWFkZXJzIHRoYXQgeW91Cit0aGluayBmaXQuIEFkZGluZyBoZWFkZXJzIGlzIHRoaXMgZWFzeToKKworLm5mCisgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnM9TlVMTDsgLyogaW5pdCB0byBOVUxMIGlzIGltcG9ydGFudCAqLworCisgaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsICJIZXktc2VydmVyLWhleTogaG93IGFyZSB5b3U/Iik7CisgaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsICJYLXNpbGx5LWNvbnRlbnQ6IHllcyIpOworCisgLyogcGFzcyBvdXIgbGlzdCBvZiBjdXN0b20gbWFkZSBoZWFkZXJzICovCisgY3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcnMpOworCisgY3VybF9lYXN5X3BlcmZvcm0oZWFzeWhhbmRsZSk7IC8qIHRyYW5zZmVyIGh0dHAgKi8KKworIGN1cmxfc2xpc3RfZnJlZV9hbGwoaGVhZGVycyk7IC8qIGZyZWUgdGhlIGhlYWRlciBsaXN0ICovCisuZmkKKworXCYuLi4gYW5kIGlmIHlvdSB0aGluayBzb21lIG9mIHRoZSBpbnRlcm5hbGx5IGdlbmVyYXRlZCBoZWFkZXJzLCBzdWNoIGFzCitBY2NlcHQ6IG9yIEhvc3Q6IGRvbid0IGNvbnRhaW4gdGhlIGRhdGEgeW91IHdhbnQgdGhlbSB0byBjb250YWluLCB5b3UgY2FuCityZXBsYWNlIHRoZW0gYnkgc2ltcGx5IHNldHRpbmcgdGhlbSB0b286CisKKy5uZgorIGhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCAiQWNjZXB0OiBBZ2VudC0wMDciKTsKKyBoZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgIkhvc3Q6IG11bmdlZC5ob3N0LmxpbmUiKTsKKy5maQorCisuSVAgIkRlbGV0ZSBIZWFkZXJzIgorSWYgeW91IHJlcGxhY2UgYW4gZXhpc3RpbmcgaGVhZGVyIHdpdGggb25lIHdpdGggbm8gY29udGVudHMsIHlvdSB3aWxsIHByZXZlbnQKK3RoZSBoZWFkZXIgZnJvbSBiZWluZyBzZW50LiBGb3IgaW5zdGFuY2UsIGlmIHlvdSB3YW50IHRvIGNvbXBsZXRlbHkgcHJldmVudCB0aGUKK1wmIkFjY2VwdDoiIGhlYWRlciBmcm9tIGJlaW5nIHNlbnQsIHlvdSBjYW4gZGlzYWJsZSBpdCB3aXRoIGNvZGUgc2ltaWxhciB0byB0aGlzOgorCisgaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsICJBY2NlcHQ6Iik7CisKK0JvdGggcmVwbGFjaW5nIGFuZCBjYW5jZWxpbmcgaW50ZXJuYWwgaGVhZGVycyBzaG91bGQgYmUgZG9uZSB3aXRoIGNhcmVmdWwKK2NvbnNpZGVyYXRpb24gYW5kIHlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCB5b3UgbWF5IHZpb2xhdGUgdGhlIEhUVFAgcHJvdG9jb2wKK3doZW4gZG9pbmcgc28uCisKKy5JUCAiRW5mb3JjaW5nIGNodW5rZWQgdHJhbnNmZXItZW5jb2RpbmciCisKK0J5IG1ha2luZyBzdXJlIGEgcmVxdWVzdCB1c2VzIHRoZSBjdXN0b20gaGVhZGVyICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIKK3doZW4gZG9pbmcgYSBub24tR0VUIEhUVFAgb3BlcmF0aW9uLCBsaWJjdXJsIHdpbGwgc3dpdGNoIG92ZXIgdG8gImNodW5rZWQiCit1cGxvYWQsIGV2ZW4gdGhvdWdoIHRoZSBzaXplIG9mIHRoZSBkYXRhIHRvIHVwbG9hZCBtaWdodCBiZSBrbm93bi4gQnkgZGVmYXVsdCwKK2xpYmN1cmwgdXN1YWxseSBzd2l0Y2hlcyBvdmVyIHRvIGNodW5rZWQgdXBsb2FkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHVwbG9hZAorZGF0YSBzaXplIGlzIHVua25vd24uCisKKy5JUCAiSFRUUCBWZXJzaW9uIgorCitBbGwgSFRUUCByZXF1ZXN0cyBpbmNsdWRlcyB0aGUgdmVyc2lvbiBudW1iZXIgdG8gdGVsbCB0aGUgc2VydmVyIHdoaWNoIHZlcnNpb24KK3dlIHN1cHBvcnQuIGxpYmN1cmwgc3BlYWtzIEhUVFAgMS4xIGJ5IGRlZmF1bHQuIFNvbWUgdmVyeSBvbGQgc2VydmVycyBkb24ndAorbGlrZSBnZXR0aW5nIDEuMS1yZXF1ZXN0cyBhbmQgd2hlbiBkZWFsaW5nIHdpdGggc3R1YmJvcm4gb2xkIHRoaW5ncyBsaWtlIHRoYXQsCit5b3UgY2FuIHRlbGwgbGliY3VybCB0byB1c2UgMS4wIGluc3RlYWQgYnkgZG9pbmcgc29tZXRoaW5nIGxpa2UgdGhpczoKKworIGN1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9IVFRQX1ZFUlNJT04sIENVUkxfSFRUUF9WRVJTSU9OXzFfMCk7CisKKy5JUCAiRlRQIEN1c3RvbSBDb21tYW5kcyIKKworTm90IGFsbCBwcm90b2NvbHMgYXJlIEhUVFAtbGlrZSwgYW5kIHRodXMgdGhlIGFib3ZlIG1heSBub3QgaGVscCB5b3Ugd2hlbgoreW91IHdhbnQgdG8gbWFrZSwgZm9yIGV4YW1wbGUsIHlvdXIgRlRQIHRyYW5zZmVycyB0byBiZWhhdmUgZGlmZmVyZW50bHkuCisKK1NlbmRpbmcgY3VzdG9tIGNvbW1hbmRzIHRvIGEgRlRQIHNlcnZlciBtZWFucyB0aGF0IHlvdSBuZWVkIHRvIHNlbmQgdGhlCitjb21tYW5kcyBleGFjdGx5IGFzIHRoZSBGVFAgc2VydmVyIGV4cGVjdHMgdGhlbSAoUkZDOTU5IGlzIGEgZ29vZCBndWlkZQoraGVyZSksIGFuZCB5b3UgY2FuIG9ubHkgdXNlIGNvbW1hbmRzIHRoYXQgd29yayBvbiB0aGUgY29udHJvbC1jb25uZWN0aW9uCithbG9uZS4gQWxsIGtpbmRzIG9mIGNvbW1hbmRzIHRoYXQgcmVxdWlyZSBkYXRhIGludGVyY2hhbmdlIGFuZCB0aHVzIG5lZWQKK2EgZGF0YS1jb25uZWN0aW9uIG11c3QgYmUgbGVmdCB0byBsaWJjdXJsJ3Mgb3duIGp1ZGdlbWVudC4gQWxzbyBiZSBhd2FyZQordGhhdCBsaWJjdXJsIHdpbGwgZG8gaXRzIHZlcnkgYmVzdCB0byBjaGFuZ2UgZGlyZWN0b3J5IHRvIHRoZSB0YXJnZXQKK2RpcmVjdG9yeSBiZWZvcmUgZG9pbmcgYW55IHRyYW5zZmVyLCBzbyBpZiB5b3UgY2hhbmdlIGRpcmVjdG9yeSAod2l0aCBDV0QKK29yIHNpbWlsYXIpIHlvdSBtaWdodCBjb25mdXNlIGxpYmN1cmwgYW5kIHRoZW4gaXQgbWlnaHQgbm90IGF0dGVtcHQgdG8KK3RyYW5zZmVyIHRoZSBmaWxlIGluIHRoZSBjb3JyZWN0IHJlbW90ZSBkaXJlY3RvcnkuCisKK0EgbGl0dGxlIGV4YW1wbGUgdGhhdCBkZWxldGVzIGEgZ2l2ZW4gZmlsZSBiZWZvcmUgYW4gb3BlcmF0aW9uOgorCisubmYKKyBoZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgIkRFTEUgZmlsZS10by1yZW1vdmUiKTsKKworIC8qIHBhc3MgdGhlIGxpc3Qgb2YgY3VzdG9tIGNvbW1hbmRzIHRvIHRoZSBoYW5kbGUgKi8KKyBjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfUVVPVEUsIGhlYWRlcnMpOworCisgY3VybF9lYXN5X3BlcmZvcm0oZWFzeWhhbmRsZSk7IC8qIHRyYW5zZmVyIGZ0cCBkYXRhISAqLworCisgY3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsgLyogZnJlZSB0aGUgaGVhZGVyIGxpc3QgKi8KKy5maQorCitJZiB5b3Ugd291bGQgaW5zdGVhZCB3YW50IHRoaXMgb3BlcmF0aW9uIChvciBjaGFpbiBvZiBvcGVyYXRpb25zKSB0byBoYXBwZW4KK19hZnRlcl8gdGhlIGRhdGEgdHJhbnNmZXIgdG9vayBwbGFjZSB0aGUgb3B0aW9uIHRvIFxmSWN1cmxfZWFzeV9zZXRvcHQoMylcZlAKK3dvdWxkIGluc3RlYWQgYmUgY2FsbGVkIENVUkxPUFRfUE9TVFFVT1RFIGFuZCB1c2VkIHRoZSBleGFjdCBzYW1lIHdheS4KKworVGhlIGN1c3RvbSBGVFAgY29tbWFuZCB3aWxsIGJlIGlzc3VlZCB0byB0aGUgc2VydmVyIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgYXJlCithZGRlZCB0byB0aGUgbGlzdCwgYW5kIGlmIGEgY29tbWFuZCBnZXRzIGFuIGVycm9yIGNvZGUgcmV0dXJuZWQgYmFjayBmcm9tIHRoZQorc2VydmVyLCBubyBtb3JlIGNvbW1hbmRzIHdpbGwgYmUgaXNzdWVkIGFuZCBsaWJjdXJsIHdpbGwgYmFpbCBvdXQgd2l0aCBhbgorZXJyb3IgY29kZSAoQ1VSTEVfUVVPVEVfRVJST1IpLiBOb3RlIHRoYXQgaWYgeW91IHVzZSBDVVJMT1BUX1FVT1RFIHRvIHNlbmQKK2NvbW1hbmRzIGJlZm9yZSBhIHRyYW5zZmVyLCBubyB0cmFuc2ZlciB3aWxsIGFjdHVhbGx5IHRha2UgcGxhY2Ugd2hlbiBhIHF1b3RlCitjb21tYW5kIGhhcyBmYWlsZWQuCisKK0lmIHlvdSBzZXQgdGhlIENVUkxPUFRfSEVBREVSIHRvIDEsIHlvdSB3aWxsIHRlbGwgbGliY3VybCB0byBnZXQKK2luZm9ybWF0aW9uIGFib3V0IHRoZSB0YXJnZXQgZmlsZSBhbmQgb3V0cHV0ICJoZWFkZXJzIiBhYm91dCBpdC4gVGhlIGhlYWRlcnMKK3dpbGwgYmUgaW4gIkhUVFAtc3R5bGUiLCBsb29raW5nIGxpa2UgdGhleSBkbyBpbiBIVFRQLgorCitUaGUgb3B0aW9uIHRvIGVuYWJsZSBoZWFkZXJzIG9yIHRvIHJ1biBjdXN0b20gRlRQIGNvbW1hbmRzIG1heSBiZSB1c2VmdWwgdG8KK2NvbWJpbmUgd2l0aCBDVVJMT1BUX05PQk9EWS4gSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBubyBhY3R1YWwgZmlsZSBjb250ZW50Cit0cmFuc2ZlciB3aWxsIGJlIHBlcmZvcm1lZC4KKworLklQICJGVFAgQ3VzdG9tIENVU1RPTVJFUVVFU1QiCitJZiB5b3UgZG8gd2FudCB0byBsaXN0IHRoZSBjb250ZW50cyBvZiBhIEZUUCBkaXJlY3RvcnkgdXNpbmcgeW91ciBvd24gZGVmaW5lZCBGVFAKK2NvbW1hbmQsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCB3aWxsIGRvIGp1c3QgdGhhdC4gIk5MU1QiIGlzIHRoZSBkZWZhdWx0IG9uZQorZm9yIGxpc3RpbmcgZGlyZWN0b3JpZXMgYnV0IHlvdSdyZSBmcmVlIHRvIHBhc3MgaW4geW91ciBpZGVhIG9mIGEgZ29vZAorYWx0ZXJuYXRpdmUuCisKKy5TSCAiQ29va2llcyBXaXRob3V0IENob2NvbGF0ZSBDaGlwcyIKK0luIHRoZSBIVFRQIHNlbnNlLCBhIGNvb2tpZSBpcyBhIG5hbWUgd2l0aCBhbiBhc3NvY2lhdGVkIHZhbHVlLiBBIHNlcnZlciBzZW5kcwordGhlIG5hbWUgYW5kIHZhbHVlIHRvIHRoZSBjbGllbnQsIGFuZCBleHBlY3RzIGl0IHRvIGdldCBzZW50IGJhY2sgb24gZXZlcnkKK3N1YnNlcXVlbnQgcmVxdWVzdCB0byB0aGUgc2VydmVyIHRoYXQgbWF0Y2hlcyB0aGUgcGFydGljdWxhciBjb25kaXRpb25zCitzZXQuIFRoZSBjb25kaXRpb25zIGluY2x1ZGUgdGhhdCB0aGUgZG9tYWluIG5hbWUgYW5kIHBhdGggbWF0Y2ggYW5kIHRoYXQgdGhlCitjb29raWUgaGFzbid0IGJlY29tZSB0b28gb2xkLgorCitJbiByZWFsLXdvcmxkIGNhc2VzLCBzZXJ2ZXJzIHNlbmQgbmV3IGNvb2tpZXMgdG8gcmVwbGFjZSBleGlzdGluZyBvbmVzIHRvCit1cGRhdGUgdGhlbS4gU2VydmVyIHVzZSBjb29raWVzIHRvICJ0cmFjayIgdXNlcnMgYW5kIHRvIGtlZXAgInNlc3Npb25zIi4KKworQ29va2llcyBhcmUgc2VudCBmcm9tIHNlcnZlciB0byBjbGllbnRzIHdpdGggdGhlIGhlYWRlciBTZXQtQ29va2llOiBhbmQKK3RoZXkncmUgc2VudCBmcm9tIGNsaWVudHMgdG8gc2VydmVycyB3aXRoIHRoZSBDb29raWU6IGhlYWRlci4KKworVG8ganVzdCBzZW5kIHdoYXRldmVyIGNvb2tpZSB5b3Ugd2FudCB0byBhIHNlcnZlciwgeW91IGNhbiB1c2UgQ1VSTE9QVF9DT09LSUUKK3RvIHNldCBhIGNvb2tpZSBzdHJpbmcgbGlrZSB0aGlzOgorCisgY3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX0NPT0tJRSwgIm5hbWUxPXZhcjE7IG5hbWUyPXZhcjI7Iik7CisKK0luIG1hbnkgY2FzZXMsIHRoYXQgaXMgbm90IGVub3VnaC4gWW91IG1pZ2h0IHdhbnQgdG8gZHluYW1pY2FsbHkgc2F2ZQord2hhdGV2ZXIgY29va2llcyB0aGUgcmVtb3RlIHNlcnZlciBwYXNzZXMgdG8geW91LCBhbmQgbWFrZSBzdXJlIHRob3NlIGNvb2tpZXMKK2FyZSB0aGVuIHVzZWQgYWNjb3JkaW5nbHkgb24gbGF0ZXIgcmVxdWVzdHMuCisKK09uZSB3YXkgdG8gZG8gdGhpcywgaXMgdG8gc2F2ZSBhbGwgaGVhZGVycyB5b3UgcmVjZWl2ZSBpbiBhIHBsYWluIGZpbGUgYW5kCit3aGVuIHlvdSBtYWtlIGEgcmVxdWVzdCwgeW91IHRlbGwgbGliY3VybCB0byByZWFkIHRoZSBwcmV2aW91cyBoZWFkZXJzIHRvCitmaWd1cmUgb3V0IHdoaWNoIGNvb2tpZXMgdG8gdXNlLiBTZXQgdGhlIGhlYWRlciBmaWxlIHRvIHJlYWQgY29va2llcyBmcm9tIHdpdGgKK0NVUkxPUFRfQ09PS0lFRklMRS4KKworVGhlIENVUkxPUFRfQ09PS0lFRklMRSBvcHRpb24gYWxzbyBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgdGhlIGNvb2tpZSBwYXJzZXIgaW4KK2xpYmN1cmwuIFVudGlsIHRoZSBjb29raWUgcGFyc2VyIGlzIGVuYWJsZWQsIGxpYmN1cmwgd2lsbCBub3QgcGFyc2Ugb3IKK3VuZGVyc3RhbmQgaW5jb21pbmcgY29va2llcyBhbmQgdGhleSB3aWxsIGp1c3QgYmUgaWdub3JlZC4gSG93ZXZlciwgd2hlbiB0aGUKK3BhcnNlciBpcyBlbmFibGVkIHRoZSBjb29raWVzIHdpbGwgYmUgdW5kZXJzdG9vZCBhbmQgdGhlIGNvb2tpZXMgd2lsbCBiZSBrZXB0CitpbiBtZW1vcnkgYW5kIHVzZWQgcHJvcGVybHkgaW4gc3Vic2VxdWVudCByZXF1ZXN0cyB3aGVuIHRoZSBzYW1lIGhhbmRsZSBpcwordXNlZC4gTWFueSB0aW1lcyB0aGlzIGlzIGVub3VnaCwgYW5kIHlvdSBtYXkgbm90IGhhdmUgdG8gc2F2ZSB0aGUgY29va2llcyB0bworZGlzayBhdCBhbGwuIE5vdGUgdGhhdCB0aGUgZmlsZSB5b3Ugc3BlY2lmeSB0byBDVVJMT1BUX0NPT0tJRUZJTEUgZG9lc24ndCBoYXZlCit0byBleGlzdCB0byBlbmFibGUgdGhlIHBhcnNlciwgc28gYSBjb21tb24gd2F5IHRvIGp1c3QgZW5hYmxlIHRoZSBwYXJzZXIgYW5kCitub3QgcmVhZCBhbnkgY29va2llcyBpcyB0byB1c2UgdGhlIG5hbWUgb2YgYSBmaWxlIHlvdSBrbm93IGRvZXNuJ3QgZXhpc3QuCisKK0lmIHlvdSB3b3VsZCByYXRoZXIgdXNlIGV4aXN0aW5nIGNvb2tpZXMgdGhhdCB5b3UndmUgcHJldmlvdXNseSByZWNlaXZlZCB3aXRoCit5b3VyIE5ldHNjYXBlIG9yIE1vemlsbGEgYnJvd3NlcnMsIHlvdSBjYW4gbWFrZSBsaWJjdXJsIHVzZSB0aGF0IGNvb2tpZSBmaWxlCithcyBpbnB1dC4gVGhlIENVUkxPUFRfQ09PS0lFRklMRSBpcyB1c2VkIGZvciB0aGF0IHRvbywgYXMgbGliY3VybCB3aWxsCithdXRvbWF0aWNhbGx5IGZpbmQgb3V0IHdoYXQga2luZCBvZiBmaWxlIGl0IGlzIGFuZCBhY3QgYWNjb3JkaW5nbHkuCisKK1BlcmhhcHMgdGhlIG1vc3QgYWR2YW5jZWQgY29va2llIG9wZXJhdGlvbiBsaWJjdXJsIG9mZmVycywgaXMgc2F2aW5nIHRoZQorZW50aXJlIGludGVybmFsIGNvb2tpZSBzdGF0ZSBiYWNrIGludG8gYSBOZXRzY2FwZS9Nb3ppbGxhIGZvcm1hdHRlZCBjb29raWUKK2ZpbGUuIFdlIGNhbGwgdGhhdCB0aGUgY29va2llLWphci4gV2hlbiB5b3Ugc2V0IGEgZmlsZSBuYW1lIHdpdGgKK0NVUkxPUFRfQ09PS0lFSkFSLCB0aGF0IGZpbGUgbmFtZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIGFsbCByZWNlaXZlZCBjb29raWVzCit3aWxsIGJlIHN0b3JlZCBpbiBpdCB3aGVuIFxmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQIGlzIGNhbGxlZC4gVGhpcyBlbmFibGVzCitjb29raWVzIHRvIGdldCBwYXNzZWQgb24gcHJvcGVybHkgYmV0d2VlbiBtdWx0aXBsZSBoYW5kbGVzIHdpdGhvdXQgYW55CitpbmZvcm1hdGlvbiBnZXR0aW5nIGxvc3QuCisKKy5TSCAiRlRQIFBlY3VsaWFyaXRpZXMgV2UgTmVlZCIKKworRlRQIHRyYW5zZmVycyB1c2UgYSBzZWNvbmQgVENQL0lQIGNvbm5lY3Rpb24gZm9yIHRoZSBkYXRhIHRyYW5zZmVyLiBUaGlzIGlzCit1c3VhbGx5IGEgZmFjdCB5b3UgY2FuIGZvcmdldCBhbmQgaWdub3JlIGJ1dCBhdCB0aW1lcyB0aGlzIGZhY3Qgd2lsbCBjb21lCitiYWNrIHRvIGhhdW50IHlvdS4gbGliY3VybCBvZmZlcnMgc2V2ZXJhbCBkaWZmZXJlbnQgd2F5cyB0byBjdXN0b21pemUgaG93IHRoZQorc2Vjb25kIGNvbm5lY3Rpb24gaXMgYmVpbmcgbWFkZS4KKworbGliY3VybCBjYW4gZWl0aGVyIGNvbm5lY3QgdG8gdGhlIHNlcnZlciBhIHNlY29uZCB0aW1lIG9yIHRlbGwgdGhlIHNlcnZlciB0bworY29ubmVjdCBiYWNrIHRvIGl0LiBUaGUgZmlyc3Qgb3B0aW9uIGlzIHRoZSBkZWZhdWx0IGFuZCBpdCBpcyBhbHNvIHdoYXQgd29ya3MKK2Jlc3QgZm9yIGFsbCB0aGUgcGVvcGxlIGJlaGluZCBmaXJld2FsbHMsIE5BVHMgb3IgSVAtbWFzcXVlcmFkaW5nIHNldHVwcy4KK2xpYmN1cmwgdGhlbiB0ZWxscyB0aGUgc2VydmVyIHRvIG9wZW4gdXAgYSBuZXcgcG9ydCBhbmQgd2FpdCBmb3IgYSBzZWNvbmQKK2Nvbm5lY3Rpb24uIFRoaXMgaXMgYnkgZGVmYXVsdCBhdHRlbXB0ZWQgd2l0aCBFUFNWIGZpcnN0LCBhbmQgaWYgdGhhdCBkb2Vzbid0Cit3b3JrIGl0IHRyaWVzIFBBU1YgaW5zdGVhZC4gKEVQU1YgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBvcmlnaW5hbCBGVFAgc3BlYworYW5kIGRvZXMgbm90IGV4aXN0IG5vciB3b3JrIG9uIGFsbCBGVFAgc2VydmVycy4pCisKK1lvdSBjYW4gcHJldmVudCBsaWJjdXJsIGZyb20gZmlyc3QgdHJ5aW5nIHRoZSBFUFNWIGNvbW1hbmQgYnkgc2V0dGluZworQ1VSTE9QVF9GVFBfVVNFX0VQU1YgdG8gemVyby4KKworSW4gc29tZSBjYXNlcywgeW91IHdpbGwgcHJlZmVyIHRvIGhhdmUgdGhlIHNlcnZlciBjb25uZWN0IGJhY2sgdG8geW91IGZvciB0aGUKK3NlY29uZCBjb25uZWN0aW9uLiBUaGlzIG1pZ2h0IGJlIHdoZW4gdGhlIHNlcnZlciBpcyBwZXJoYXBzIGJlaGluZCBhIGZpcmV3YWxsCitvciBzb21ldGhpbmcgYW5kIG9ubHkgYWxsb3dzIGNvbm5lY3Rpb25zIG9uIGEgc2luZ2xlIHBvcnQuIGxpYmN1cmwgdGhlbgoraW5mb3JtcyB0aGUgcmVtb3RlIHNlcnZlciB3aGljaCBJUCBhZGRyZXNzIGFuZCBwb3J0IG51bWJlciB0byBjb25uZWN0IHRvLgorVGhpcyBpcyBtYWRlIHdpdGggdGhlIENVUkxPUFRfRlRQUE9SVCBvcHRpb24uIElmIHlvdSBzZXQgaXQgdG8gIi0iLCBsaWJjdXJsCit3aWxsIHVzZSB5b3VyIHN5c3RlbSdzICJkZWZhdWx0IElQIGFkZHJlc3MiLiBJZiB5b3Ugd2FudCB0byB1c2UgYSBwYXJ0aWN1bGFyCitJUCwgeW91IGNhbiBzZXQgdGhlIGZ1bGwgSVAgYWRkcmVzcywgYSBob3N0IG5hbWUgdG8gcmVzb2x2ZSB0byBhbiBJUCBhZGRyZXNzCitvciBldmVuIGEgbG9jYWwgbmV0d29yayBpbnRlcmZhY2UgbmFtZSB0aGF0IGxpYmN1cmwgd2lsbCBnZXQgdGhlIElQIGFkZHJlc3MKK2Zyb20uCisKK1doZW4gZG9pbmcgdGhlICJQT1JUIiBhcHByb2FjaCwgbGliY3VybCB3aWxsIGF0dGVtcHQgdG8gdXNlIHRoZSBFUFJUIGFuZCB0aGUKK0xQUlQgYmVmb3JlIHRyeWluZyBQT1JULCBhcyB0aGV5IHdvcmsgd2l0aCBtb3JlIHByb3RvY29scy4gWW91IGNhbiBkaXNhYmxlCit0aGlzIGJlaGF2aW9yIGJ5IHNldHRpbmcgQ1VSTE9QVF9GVFBfVVNFX0VQUlQgdG8gemVyby4KKworLlNIICJIZWFkZXJzIEVxdWFsIEZ1biIKKworU29tZSBwcm90b2NvbHMgcHJvdmlkZSAiaGVhZGVycyIsIG1ldGEtZGF0YSBzZXBhcmF0ZWQgZnJvbSB0aGUgbm9ybWFsCitkYXRhLiBUaGVzZSBoZWFkZXJzIGFyZSBieSBkZWZhdWx0IG5vdCBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGRhdGEgc3RyZWFtLAorYnV0IHlvdSBjYW4gbWFrZSB0aGVtIGFwcGVhciBpbiB0aGUgZGF0YSBzdHJlYW0gYnkgc2V0dGluZyBDVVJMT1BUX0hFQURFUiB0bworMS4KKworV2hhdCBtaWdodCBiZSBldmVuIG1vcmUgdXNlZnVsLCBpcyBsaWJjdXJsJ3MgYWJpbGl0eSB0byBzZXBhcmF0ZSB0aGUgaGVhZGVycworZnJvbSB0aGUgZGF0YSBhbmQgdGh1cyBtYWtlIHRoZSBjYWxsYmFja3MgZGlmZmVyLiBZb3UgY2FuIGZvciBleGFtcGxlIHNldCBhCitkaWZmZXJlbnQgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBvcmRpbmFyeSB3cml0ZSBjYWxsYmFjayBieSBzZXR0aW5nCitDVVJMT1BUX1dSSVRFSEVBREVSLgorCitPciwgeW91IGNhbiBzZXQgYW4gZW50aXJlbHkgc2VwYXJhdGUgZnVuY3Rpb24gdG8gcmVjZWl2ZSB0aGUgaGVhZGVycywgYnkKK3VzaW5nIENVUkxPUFRfSEVBREVSRlVOQ1RJT04uCisKK1RoZSBoZWFkZXJzIGFyZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uZSBieSBvbmUsIGFuZCB5b3UgY2FuCitkZXBlbmQgb24gdGhhdCBmYWN0LiBJdCBtYWtlcyBpdCBlYXNpZXIgZm9yIHlvdSB0byBhZGQgY3VzdG9tIGhlYWRlciBwYXJzZXJzCitldGMuCisKK1wmIkhlYWRlcnMiIGZvciBGVFAgdHJhbnNmZXJzIGVxdWFsIGFsbCB0aGUgRlRQIHNlcnZlciByZXNwb25zZXMuIFRoZXkgYXJlbid0CithY3R1YWxseSB0cnVlIGhlYWRlcnMsIGJ1dCBpbiB0aGlzIGNhc2Ugd2UgcHJldGVuZCB0aGV5IGFyZSEgOy0pCisKKy5TSCAiUG9zdCBUcmFuc2ZlciBJbmZvcm1hdGlvbiIKKworIFsgY3VybF9lYXN5X2dldGluZm8gXQorCisuU0ggIlNlY3VyaXR5IENvbnNpZGVyYXRpb25zIgorCitUaGUgbGliY3VybCBwcm9qZWN0IHRha2VzIHNlY3VyaXR5IHNlcmlvdXNseS4gIFRoZSBsaWJyYXJ5IGlzIHdyaXR0ZW4gd2l0aAorY2F1dGlvbiBhbmQgcHJlY2F1dGlvbnMgYXJlIHRha2VuIHRvIG1pdGlnYXRlIG1hbnkga2luZHMgb2Ygcmlza3MgZW5jb3VudGVyZWQKK3doaWxlIG9wZXJhdGluZyB3aXRoIHBvdGVudGlhbGx5IG1hbGljaW91cyBzZXJ2ZXJzIG9uIHRoZSBJbnRlcm5ldC4gIEl0IGlzIGEKK3Bvd2VyZnVsIGxpYnJhcnksIGhvd2V2ZXIsIHdoaWNoIGFsbG93cyBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIG1ha2UgdHJhZGUgb2ZmcworYmV0d2VlbiBlYXNlIG9mIHdyaXRpbmcgYW5kIGV4cG9zdXJlIHRvIHBvdGVudGlhbCByaXNreSBvcGVyYXRpb25zLiAgSWYKK3VzZWQgdGhlIHJpZ2h0IHdheSwgeW91IGNhbiB1c2UgbGliY3VybCB0byB0cmFuc2ZlciBkYXRhIHByZXR0eSBzYWZlbHkuCisKK01hbnkgYXBwbGljYXRpb25zIGFyZSB1c2VkIGluIGNsb3NlZCBuZXR3b3JrcyB3aGVyZSB1c2VycyBhbmQgc2VydmVycworY2FuIGJlIHRydXN0ZWQsIGJ1dCBtYW55IG90aGVycyBhcmUgdXNlZCBvbiBhcmJpdHJhcnkgc2VydmVycyBhbmQgYXJlIGZlZAoraW5wdXQgZnJvbSBwb3RlbnRpYWxseSB1bnRydXN0ZWQgdXNlcnMuICBGb2xsb3dpbmcgaXMgYSBkaXNjdXNzaW9uIGFib3V0Citzb21lIHJpc2tzIGluIHRoZSB3YXlzIGluIHdoaWNoIGFwcGxpY2F0aW9ucyBjb21tb25seSB1c2UgbGliY3VybCBhbmQKK3BvdGVudGlhbCBtaXRpZ2F0aW9ucyBvZiB0aG9zZSByaXNrcy4gSXQgaXMgYnkgbm8gbWVhbnMgY29tcHJlaGVuc2l2ZSwgYnV0CitzaG93cyBjbGFzc2VzIG9mIGF0dGFja3MgdGhhdCByb2J1c3QgYXBwbGljYXRpb25zIHNob3VsZCBjb25zaWRlci4gVGhlCitDb21tb24gV2Vha25lc3MgRW51bWVyYXRpb24gcHJvamVjdCBhdCBodHRwOi8vY3dlLm1pdHJlLm9yZy8gaXMgYSBnb29kCityZWZlcmVuY2UgZm9yIG1hbnkgb2YgdGhlc2UgYW5kIHNpbWlsYXIgdHlwZXMgb2Ygd2Vha25lc3NlcyBvZiB3aGljaAorYXBwbGljYXRpb24gd3JpdGVycyBzaG91bGQgYmUgYXdhcmUuCisKKy5JUCAiQ29tbWFuZCBMaW5lcyIKK0lmIHlvdSB1c2UgYSBjb21tYW5kIGxpbmUgdG9vbCAoc3VjaCBhcyBjdXJsKSB0aGF0IHVzZXMgbGliY3VybCwgYW5kIHlvdSBnaXZlCitvcHRpb25zIHRvIHRoZSB0b29sIG9uIHRoZSBjb21tYW5kIGxpbmUgdGhvc2Ugb3B0aW9ucyBjYW4gdmVyeSBsaWtlbHkgZ2V0IHJlYWQKK2J5IG90aGVyIHVzZXJzIG9mIHlvdXIgc3lzdGVtIHdoZW4gdGhleSB1c2UgJ3BzJyBvciBvdGhlciB0b29scyB0byBsaXN0CitjdXJyZW50bHkgcnVubmluZyBwcm9jZXNzZXMuCisKK1RvIGF2b2lkIHRoaXMgcHJvYmxlbSwgbmV2ZXIgZmVlZCBzZW5zaXRpdmUgdGhpbmdzIHRvIHByb2dyYW1zIHVzaW5nIGNvbW1hbmQKK2xpbmUgb3B0aW9ucy4gV3JpdGUgdGhlbSB0byBhIHByb3RlY3RlZCBmaWxlIGFuZCB1c2UgdGhlIFwtSyBvcHRpb24gdG8KK2F2b2lkIHRoaXMuCisKKy5JUCAiLm5ldHJjIgorXCYubmV0cmMgaXMgYSBwcmV0dHkgaGFuZHkgZmlsZS9mZWF0dXJlIHRoYXQgYWxsb3dzIHlvdSB0byBsb2dpbiBxdWlja2x5IGFuZAorYXV0b21hdGljYWxseSB0byBmcmVxdWVudGx5IHZpc2l0ZWQgc2l0ZXMuIFRoZSBmaWxlIGNvbnRhaW5zIHBhc3N3b3JkcyBpbgorY2xlYXIgdGV4dCBhbmQgaXMgYSByZWFsIHNlY3VyaXR5IHJpc2suIEluIHNvbWUgY2FzZXMsIHlvdXIgLm5ldHJjIGlzIGFsc28KK3N0b3JlZCBpbiBhIGhvbWUgZGlyZWN0b3J5IHRoYXQgaXMgTkZTIG1vdW50ZWQgb3IgdXNlZCBvbiBhbm90aGVyIG5ldHdvcmsKK2Jhc2VkIGZpbGUgc3lzdGVtLCBzbyB0aGUgY2xlYXIgdGV4dCBwYXNzd29yZCB3aWxsIGZseSB0aHJvdWdoIHlvdXIgbmV0d29yaworZXZlcnkgdGltZSBhbnlvbmUgcmVhZHMgdGhhdCBmaWxlIQorCitUbyBhdm9pZCB0aGlzIHByb2JsZW0sIGRvbid0IHVzZSAubmV0cmMgZmlsZXMgYW5kIG5ldmVyIHN0b3JlIHBhc3N3b3JkcyBpbgorcGxhaW4gdGV4dCBhbnl3aGVyZS4KKworLklQICJDbGVhciBUZXh0IFBhc3N3b3JkcyIKK01hbnkgb2YgdGhlIHByb3RvY29scyBsaWJjdXJsIHN1cHBvcnRzIHNlbmQgbmFtZSBhbmQgcGFzc3dvcmQgdW5lbmNyeXB0ZWQgYXMKK2NsZWFyIHRleHQgKEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIEZUUCwgVEVMTkVUIGV0YykuIEl0IGlzIHZlcnkgZWFzeSBmb3IKK2FueW9uZSBvbiB5b3VyIG5ldHdvcmsgb3IgYSBuZXR3b3JrIG5lYXJieSB5b3VycyB0byBqdXN0IGZpcmUgdXAgYSBuZXR3b3JrCithbmFseXplciB0b29sIGFuZCBlYXZlc2Ryb3Agb24geW91ciBwYXNzd29yZHMuIERvbid0IGxldCB0aGUgZmFjdCB0aGF0IEhUVFAKK0Jhc2ljIHVzZXMgYmFzZTY0IGVuY29kZWQgcGFzc3dvcmRzIGZvb2wgeW91LiBUaGV5IG1heSBub3QgbG9vayByZWFkYWJsZSBhdCBhCitmaXJzdCBnbGFuY2UsIGJ1dCB0aGV5IHZlcnkgZWFzaWx5ICJkZWNpcGhlcmVkIiBieSBhbnlvbmUgd2l0aGluIHNlY29uZHMuCisKK1RvIGF2b2lkIHRoaXMgcHJvYmxlbSwgdXNlIEhUVFAgYXV0aGVudGljYXRpb24gbWV0aG9kcyBvciBvdGhlciBwcm90b2NvbHMgdGhhdAorZG9uJ3QgbGV0IHNub29wZXJzIHNlZSB5b3VyIHBhc3N3b3JkOiBIVFRQIHdpdGggRGlnZXN0LCBOVExNIG9yIEdTUworYXV0aGVudGljYXRpb24sIEhUVFBTLCBGVFBTLCBTQ1AsIFNGVFAgYW5kIEZUUC1LZXJiZXJvcyBhcmUgYSBmZXcgZXhhbXBsZXMuCisKKy5JUCAiUmVkaXJlY3RzIgorVGhlIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gb3B0aW9uIGF1dG9tYXRpY2FsbHkgZm9sbG93cyBIVFRQIHJlZGlyZWN0cyBzZW50CitieSBhIHJlbW90ZSBzZXJ2ZXIuICBUaGVzZSByZWRpcmVjdHMgY2FuIHJlZmVyIHRvIGFueSBraW5kIG9mIFVSTCwgbm90IGp1c3QKK0hUVFAuICBBIHJlZGlyZWN0IHRvIGEgZmlsZTogVVJMIHdvdWxkIGNhdXNlIHRoZSBsaWJjdXJsIHRvIHJlYWQgKG9yIHdyaXRlKQorYXJiaXRyYXJ5IGZpbGVzIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0uICBJZiB0aGUgYXBwbGljYXRpb24gcmV0dXJucwordGhlIGRhdGEgYmFjayB0byB0aGUgdXNlciAoYXMgd291bGQgaGFwcGVuIGluIHNvbWUga2luZHMgb2YgQ0dJIHNjcmlwdHMpLAorYW4gYXR0YWNrZXIgY291bGQgbGV2ZXJhZ2UgdGhpcyB0byByZWFkIG90aGVyd2lzZSBmb3JiaWRkZW4gZGF0YSAoZS5nLgorZmlsZTovL2xvY2FsaG9zdC9ldGMvcGFzc3dkKS4KKworSWYgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgYXJlIHN0b3JlZCBpbiB0aGUgfi8ubmV0cmMgZmlsZSwgb3IgS2VyYmVyb3MKK2lzIGluIHVzZSwgYW55IG90aGVyIFVSTCB0eXBlIChub3QganVzdCBmaWxlOikgdGhhdCByZXF1aXJlcworYXV0aGVudGljYXRpb24gaXMgYWxzbyBhdCByaXNrLiAgQSByZWRpcmVjdCBzdWNoIGFzCitmdHA6Ly9zb21lLWludGVybmFsLXNlcnZlci9wcml2YXRlLWZpbGUgd291bGQgdGhlbiByZXR1cm4gZGF0YSBldmVuIHdoZW4KK3RoZSBzZXJ2ZXIgaXMgcGFzc3dvcmQgcHJvdGVjdGVkLgorCitJbiB0aGUgc2FtZSB3YXksIGlmIGFuIHVuZW5jcnlwdGVkIFNTSCBwcml2YXRlIGtleSBoYXMgYmVlbiBjb25maWd1cmVkIGZvcgordGhlIHVzZXIgcnVubmluZyB0aGUgbGliY3VybCBhcHBsaWNhdGlvbiwgU0NQOiBvciBTRlRQOiBVUkxzIGNvdWxkIGFjY2VzcworcGFzc3dvcmQgb3IgcHJpdmF0ZS1rZXkgcHJvdGVjdGVkIHJlc291cmNlcywKK2UuZy4gc2Z0cDovL3VzZXJAc29tZS1pbnRlcm5hbC1zZXJ2ZXIvZXRjL3Bhc3N3ZAorCitUaGUgQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFMgYW5kIENVUkxPUFRfTkVUUkMgb3B0aW9ucyBjYW4gYmUgdXNlZCB0bworbWl0aWdhdGUgYWdhaW5zdCB0aGlzIGtpbmQgb2YgYXR0YWNrLgorCitBIHJlZGlyZWN0IGNhbiBhbHNvIHNwZWNpZnkgYSBsb2NhdGlvbiBhdmFpbGFibGUgb25seSBvbiB0aGUgbWFjaGluZSBydW5uaW5nCitsaWJjdXJsLCBpbmNsdWRpbmcgc2VydmVycyBoaWRkZW4gYmVoaW5kIGEgZmlyZXdhbGwgZnJvbSB0aGUgYXR0YWNrZXIuCitlLmcuIGh0dHA6Ly8xMjcuMC4wLjEvIG9yIGh0dHA6Ly9pbnRyYW5ldC9kZWxldGUtc3R1ZmYuY2dpP2RlbGV0ZT1hbGwgb3IKK3RmdHA6Ly9ib290cC1zZXJ2ZXIvcGMtY29uZmlnLWRhdGEKKworQXBwcyBjYW4gbWl0aWdhdGUgYWdhaW5zdCB0aGlzIGJ5IGRpc2FibGluZyBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OIGFuZAoraGFuZGxpbmcgcmVkaXJlY3RzIGl0c2VsZiwgc2FuaXRpemluZyBVUkxzIGFzIG5lY2Vzc2FyeS4gQWx0ZXJuYXRlbHksIGFuCithcHAgY291bGQgbGVhdmUgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiBlbmFibGVkIGJ1dCBzZXQgQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFMKK2FuZCBpbnN0YWxsIGEgQ1VSTE9QVF9PUEVOU09DS0VURlVOQ1RJT04gY2FsbGJhY2sgZnVuY3Rpb24gaW4gd2hpY2ggYWRkcmVzc2VzCithcmUgc2FuaXRpemVkIGJlZm9yZSB1c2UuCisKKy5JUCAiUHJpdmF0ZSBSZXNvdXJjZXMiCitBIHVzZXIgd2hvIGNhbiBjb250cm9sIHRoZSBETlMgc2VydmVyIG9mIGEgZG9tYWluIGJlaW5nIHBhc3NlZCBpbiB3aXRoaW4KK2EgVVJMIGNhbiBjaGFuZ2UgdGhlIGFkZHJlc3Mgb2YgdGhlIGhvc3QgdG8gYSBsb2NhbCwgcHJpdmF0ZSBhZGRyZXNzCit3aGljaCB0aGUgbGliY3VybCBhcHBsaWNhdGlvbiB3aWxsIHRoZW4gdXNlLiBlLmcuIFRoZSBpbm5vY3VvdXMgVVJMCitodHRwOi8vZnV6enlidW5uaWVzLmV4YW1wbGUuY29tLyBjb3VsZCBhY3R1YWxseSByZXNvbHZlIHRvIHRoZSBJUCBhZGRyZXNzCitvZiBhIHNlcnZlciBiZWhpbmQgYSBmaXJld2FsbCwgc3VjaCBhcyAxMjcuMC4wLjEgb3IgMTAuMS4yLjMKK0FwcHMgY2FuIG1pdGlnYXRlIGFnYWluc3QgdGhpcyBieSBzZXR0aW5nIGEgQ1VSTE9QVF9PUEVOU09DS0VURlVOQ1RJT04KK2FuZCBjaGVja2luZyB0aGUgYWRkcmVzcyBiZWZvcmUgYSBjb25uZWN0aW9uLgorCitBbGwgdGhlIG1hbGljaW91cyBzY2VuYXJpb3MgcmVnYXJkaW5nIHJlZGlyZWN0ZWQgVVJMcyBhcHBseSBqdXN0IGFzIHdlbGwKK3RvIG5vbi1yZWRpcmVjdGVkIFVSTHMsIGlmIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gc3BlY2lmeSBhbiBhcmJpdHJhcnkgVVJMCit0aGF0IGNvdWxkIHBvaW50IHRvIGEgcHJpdmF0ZSByZXNvdXJjZS4gRm9yIGV4YW1wbGUsIGEgd2ViIGFwcCBwcm92aWRpbmcKK2EgdHJhbnNsYXRpb24gc2VydmljZSBtaWdodCBoYXBwaWx5IHRyYW5zbGF0ZSBmaWxlOi8vbG9jYWxob3N0L2V0Yy9wYXNzd2QKK2FuZCBkaXNwbGF5IHRoZSByZXN1bHQuICBBcHBzIGNhbiBtaXRpZ2F0ZSBhZ2FpbnN0IHRoaXMgd2l0aCB0aGUKK0NVUkxPUFRfUFJPVE9DT0xTIG9wdGlvbiBhcyB3ZWxsIGFzIGJ5IHNpbWlsYXIgbWl0aWdhdGlvbiB0ZWNobmlxdWVzIGZvcgorcmVkaXJlY3Rpb25zLgorCitBIG1hbGljaW91cyBGVFAgc2VydmVyIGNvdWxkIGluIHJlc3BvbnNlIHRvIHRoZSBQQVNWIGNvbW1hbmQgcmV0dXJuIGFuCitJUCBhZGRyZXNzIGFuZCBwb3J0IG51bWJlciBmb3IgYSBzZXJ2ZXIgbG9jYWwgdG8gdGhlIGFwcCBydW5uaW5nIGxpYmN1cmwKK2J1dCBiZWhpbmQgYSBmaXJld2FsbC4gIEFwcHMgY2FuIG1pdGlnYXRlIGFnYWluc3QgdGhpcyBieSB1c2luZyB0aGUKK0NVUkxPUFRfRlRQX1NLSVBfUEFTVl9JUCBvcHRpb24gb3IgQ1VSTE9QVF9GVFBQT1JULgorCisuSVAgVXBsb2FkcworV2hlbiB1cGxvYWRpbmcsIGEgcmVkaXJlY3QgY2FuIGNhdXNlIGEgbG9jYWwgKG9yIHJlbW90ZSkgZmlsZSB0byBiZQorb3ZlcndyaXR0ZW4uICBBcHBzIG11c3Qgbm90IGFsbG93IGFueSB1bnNhbml0aXplZCBVUkwgdG8gYmUgcGFzc2VkIGluCitmb3IgdXBsb2Fkcy4gIEFsc28sIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gc2hvdWxkIG5vdCBiZSB1c2VkIG9uIHVwbG9hZHMuCitJbnN0ZWFkLCB0aGUgYXBwIHNob3VsZCBoYW5kbGUgcmVkaXJlY3RzIGl0c2VsZiwgc2FuaXRpemluZyBlYWNoIFVSTCBmaXJzdC4KKworLklQIEF1dGhlbnRpY2F0aW9uCitVc2Ugb2YgQ1VSTE9QVF9VTlJFU1RSSUNURURfQVVUSCBjb3VsZCBjYXVzZSBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiB0bworYmUgc2VudCB0byBhbiB1bmtub3duIHNlY29uZCBzZXJ2ZXIuICBBcHBzIGNhbiBtaXRpZ2F0ZSBhZ2FpbnN0IHRoaXMKK2J5IGRpc2FibGluZyBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OIGFuZCBoYW5kbGluZyByZWRpcmVjdHMgaXRzZWxmLAorc2FuaXRpemluZyB3aGVyZSBuZWNlc3NhcnkuCisKK1VzZSBvZiB0aGUgQ1VSTEFVVEhfQU5ZIG9wdGlvbiB0byBDVVJMT1BUX0hUVFBBVVRIIGNvdWxkIHJlc3VsdCBpbiB1c2VyCituYW1lIGFuZCBwYXNzd29yZCBiZWluZyBzZW50IGluIGNsZWFyIHRleHQgdG8gYW4gSFRUUCBzZXJ2ZXIuICBJbnN0ZWFkLAordXNlIENVUkxBVVRIX0FOWVNBRkUgd2hpY2ggZW5zdXJlcyB0aGF0IHRoZSBwYXNzd29yZCBpcyBlbmNyeXB0ZWQgb3ZlcgordGhlIG5ldHdvcmssIG9yIGVsc2UgZmFpbCB0aGUgcmVxdWVzdC4KKworVXNlIG9mIHRoZSBDVVJMVVNFU1NMX1RSWSBvcHRpb24gdG8gQ1VSTE9QVF9VU0VfU1NMIGNvdWxkIHJlc3VsdCBpbiB1c2VyCituYW1lIGFuZCBwYXNzd29yZCBiZWluZyBzZW50IGluIGNsZWFyIHRleHQgdG8gYW4gRlRQIHNlcnZlci4gIEluc3RlYWQsCit1c2UgQ1VSTFVTRVNTTF9DT05UUk9MIHRvIGVuc3VyZSB0aGF0IGFuIGVuY3J5cHRlZCBjb25uZWN0aW9uIGlzIHVzZWQgb3IKK2Vsc2UgZmFpbCB0aGUgcmVxdWVzdC4KKworLklQIENvb2tpZXMKK0lmIGNvb2tpZXMgYXJlIGVuYWJsZWQgYW5kIGNhY2hlZCwgdGhlbiBhIHVzZXIgY291bGQgY3JhZnQgYSBVUkwgd2hpY2gKK3BlcmZvcm1zIHNvbWUgbWFsaWNpb3VzIGFjdGlvbiB0byBhIHNpdGUgd2hvc2UgYXV0aGVudGljYXRpb24gaXMgYWxyZWFkeQorc3RvcmVkIGluIGEgY29va2llLiBlLmcuIGh0dHA6Ly9tYWlsLmV4YW1wbGUuY29tL2RlbGV0ZS1zdHVmZi5jZ2k/ZGVsZXRlPWFsbAorQXBwcyBjYW4gbWl0aWdhdGUgYWdhaW5zdCB0aGlzIGJ5IGRpc2FibGluZyBjb29raWVzIG9yIGNsZWFyaW5nIHRoZW0KK2JldHdlZW4gcmVxdWVzdHMuCisKKy5JUCAiRGFuZ2Vyb3VzIFVSTHMiCitTQ1AgVVJMcyBjYW4gY29udGFpbiByYXcgY29tbWFuZHMgd2l0aGluIHRoZSBzY3A6IFVSTCwgd2hpY2ggaXMgYSBzaWRlIGVmZmVjdAorb2YgaG93IHRoZSBTQ1AgcHJvdG9jb2wgaXMgZGVzaWduZWQuIGUuZy4KK3NjcDovL3VzZXI6cGFzc0Bob3N0L2E7ZGF0ZSA+L3RtcC90ZXN0OworQXBwcyBtdXN0IG5vdCBhbGxvdyB1bnNhbml0aXplZCBTQ1A6IFVSTHMgdG8gYmUgcGFzc2VkIGluIGZvciBkb3dubG9hZHMuCisKKy5JUCAiRGVuaWFsIG9mIFNlcnZpY2UiCitBIG1hbGljaW91cyBzZXJ2ZXIgY291bGQgY2F1c2UgbGliY3VybCB0byBlZmZlY3RpdmVseSBoYW5nIGJ5IHNlbmRpbmcKK2EgdHJpY2tsZSBvZiBkYXRhIHRocm91Z2gsIG9yIGV2ZW4gbm8gZGF0YSBhdCBhbGwgYnV0IGp1c3Qga2VlcGluZyB0aGUgVENQCitjb25uZWN0aW9uIG9wZW4uICBUaGlzIGNvdWxkIHJlc3VsdCBpbiBhIGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFjay4gVGhlCitDVVJMT1BUX1RJTUVPVVQgYW5kL29yIENVUkxPUFRfTE9XX1NQRUVEX0xJTUlUIG9wdGlvbnMgY2FuIGJlIHVzZWQgdG8KK21pdGlnYXRlIGFnYWluc3QgdGhpcy4KKworQSBtYWxpY2lvdXMgc2VydmVyIGNvdWxkIGNhdXNlIGxpYmN1cmwgdG8gZWZmZWN0aXZlbHkgaGFuZyBieSBzdGFydGluZyB0bworc2VuZCBkYXRhLCB0aGVuIHNldmVyaW5nIHRoZSBjb25uZWN0aW9uIHdpdGhvdXQgY2xlYW5seSBjbG9zaW5nIHRoZQorVENQIGNvbm5lY3Rpb24uICBUaGUgYXBwIGNvdWxkIGluc3RhbGwgYSBDVVJMT1BUX1NPQ0tPUFRGVU5DVElPTiBjYWxsYmFjaworZnVuY3Rpb24gYW5kIHNldCB0aGUgVENQIFNPX0tFRVBBTElWRSBvcHRpb24gdG8gbWl0aWdhdGUgYWdhaW5zdCB0aGlzLgorU2V0dGluZyBvbmUgb2YgdGhlIHRpbWVvdXQgb3B0aW9ucyB3b3VsZCBhbHNvIHdvcmsgYWdhaW5zdCB0aGlzIGF0dGFjay4KKworQSBtYWxpY2lvdXMgc2VydmVyIGNvdWxkIGNhdXNlIGxpYmN1cmwgdG8gZG93bmxvYWQgYW4gaW5maW5pdGUgYW1vdW50IG9mCitkYXRhLCBwb3RlbnRpYWxseSBjYXVzaW5nIGFsbCBvZiBtZW1vcnkgb3IgZGlzayB0byBiZSBmaWxsZWQuIFNldHRpbmcKK3RoZSBDVVJMT1BUX01BWEZJTEVTSVpFX0xBUkdFIG9wdGlvbiBpcyBub3Qgc3VmZmljaWVudCB0byBndWFyZCBhZ2FpbnN0IHRoaXMuCitJbnN0ZWFkLCB0aGUgYXBwIHNob3VsZCBtb25pdG9yIHRoZSBhbW91bnQgb2YgZGF0YSByZWNlaXZlZCB3aXRoaW4gdGhlCit3cml0ZSBvciBwcm9ncmVzcyBjYWxsYmFjayBhbmQgYWJvcnQgb25jZSB0aGUgbGltaXQgaXMgcmVhY2hlZC4KKworQSBtYWxpY2lvdXMgSFRUUCBzZXJ2ZXIgY291bGQgY2F1c2UgYW4gaW5maW5pdGUgcmVkaXJlY3Rpb24gbG9vcCwgY2F1c2luZyBhCitkZW5pYWwtb2Ytc2VydmljZS4gVGhpcyBjYW4gYmUgbWl0aWdhdGVkIGJ5IHVzaW5nIHRoZSBDVVJMT1BUX01BWFJFRElSUworb3B0aW9uLgorCisuSVAgIkFyYml0cmFyeSBIZWFkZXJzIgorVXNlci1zdXBwbGllZCBkYXRhIG11c3QgYmUgc2FuaXRpemVkIHdoZW4gdXNlZCBpbiBvcHRpb25zIGxpa2UKK0NVUkxPUFRfVVNFUkFHRU5ULCBDVVJMT1BUX0hUVFBIRUFERVIsIENVUkxPUFRfUE9TVEZJRUxEUyBhbmQgb3RoZXJzIHRoYXQKK2FyZSB1c2VkIHRvIGdlbmVyYXRlIHN0cnVjdHVyZWQgZGF0YS4gQ2hhcmFjdGVycyBsaWtlIGVtYmVkZGVkIGNhcnJpYWdlCityZXR1cm5zIG9yIGFtcGVyc2FuZHMgY291bGQgYWxsb3cgdGhlIHVzZXIgdG8gY3JlYXRlIGFkZGl0aW9uYWwgaGVhZGVycyBvcgorZmllbGRzIHRoYXQgY291bGQgY2F1c2UgbWFsaWNpb3VzIHRyYW5zYWN0aW9ucy4KKworLklQICJTZXJ2ZXItc3VwcGxpZWQgTmFtZXMiCitBIHNlcnZlciBjYW4gc3VwcGx5IGRhdGEgd2hpY2ggdGhlIGFwcGxpY2F0aW9uIG1heSwgaW4gc29tZSBjYXNlcywgdXNlIGFzCithIGZpbGUgbmFtZS4gVGhlIGN1cmwgY29tbWFuZC1saW5lIHRvb2wgZG9lcyB0aGlzIHdpdGggLS1yZW1vdGUtaGVhZGVyLW5hbWUsCit1c2luZyB0aGUgQ29udGVudC1kaXNwb3NpdGlvbjogaGVhZGVyIHRvIGdlbmVyYXRlIGEgZmlsZSBuYW1lLiAgQW4gYXBwbGljYXRpb24KK2NvdWxkIGFsc28gdXNlIENVUkxJTkZPX0VGRkVDVElWRV9VUkwgdG8gZ2VuZXJhdGUgYSBmaWxlIG5hbWUgZnJvbSBhCitzZXJ2ZXItc3VwcGxpZWQgcmVkaXJlY3QgVVJMLiBTcGVjaWFsIGNhcmUgbXVzdCBiZSB0YWtlbiB0byBzYW5pdGl6ZSBzdWNoCituYW1lcyB0byBhdm9pZCB0aGUgcG9zc2liaWxpdHkgb2YgYSBtYWxpY2lvdXMgc2VydmVyIHN1cHBseWluZyBvbmUgbGlrZQorIi9ldGMvcGFzc3dkIiwgIlxhdXRvZXhlYy5iYXQiIG9yIGV2ZW4gIi5iYXNocmMiLgorCisuSVAgIlNlcnZlciBDZXJ0aWZpY2F0ZXMiCitBIHNlY3VyZSBhcHBsaWNhdGlvbiBzaG91bGQgbmV2ZXIgdXNlIHRoZSBDVVJMT1BUX1NTTF9WRVJJRllQRUVSIG9wdGlvbiB0bworZGlzYWJsZSBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uLiBUaGVyZSBhcmUgbnVtZXJvdXMgYXR0YWNrcyB0aGF0IGFyZSBlbmFibGVkCitieSBhcHBzIHRoYXQgZmFpbCB0byBwcm9wZXJseSB2YWxpZGF0ZSBzZXJ2ZXIgVExTL1NTTCBjZXJ0aWZpY2F0ZXMsCit0aHVzIGVuYWJsaW5nIGEgbWFsaWNpb3VzIHNlcnZlciB0byBzcG9vZiBhIGxlZ2l0aW1hdGUgb25lLiBIVFRQUyB3aXRob3V0Cit2YWxpZGF0ZWQgY2VydGlmaWNhdGVzIGlzIHBvdGVudGlhbGx5IGFzIGluc2VjdXJlIGFzIGEgcGxhaW4gSFRUUCBjb25uZWN0aW9uLgorCisuSVAgIlNob3dpbmcgV2hhdCBZb3UgRG8iCitPbiBhIHJlbGF0ZWQgaXNzdWUsIGJlIGF3YXJlIHRoYXQgZXZlbiBpbiBzaXR1YXRpb25zIGxpa2Ugd2hlbiB5b3UgaGF2ZQorcHJvYmxlbXMgd2l0aCBsaWJjdXJsIGFuZCBhc2sgc29tZW9uZSBmb3IgaGVscCwgZXZlcnl0aGluZyB5b3UgcmV2ZWFsIGluIG9yZGVyCit0byBnZXQgYmVzdCBwb3NzaWJsZSBoZWxwIG1pZ2h0IGFsc28gaW1wb3NlIGNlcnRhaW4gc2VjdXJpdHkgcmVsYXRlZAorcmlza3MuIEhvc3QgbmFtZXMsIHVzZXIgbmFtZXMsIHBhdGhzLCBvcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljcywgZXRjIChub3QgdG8KK21lbnRpb24gcGFzc3dvcmRzIG9mIGNvdXJzZSkgbWF5IGluIGZhY3QgYmUgdXNlZCBieSBpbnRydWRlcnMgdG8gZ2FpbgorYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiBhIHBvdGVudGlhbCB0YXJnZXQuCisKK1RvIGF2b2lkIHRoaXMgcHJvYmxlbSwgeW91IG11c3Qgb2YgY291cnNlIHVzZSB5b3VyIGNvbW1vbiBzZW5zZS4gT2Z0ZW4sIHlvdQorY2FuIGp1c3QgZWRpdCBvdXQgdGhlIHNlbnNpdGl2ZSBkYXRhIG9yIGp1c3Qgc2VhcmNoL3JlcGxhY2UgeW91ciB0cnVlCitpbmZvcm1hdGlvbiB3aXRoIGZha2VkIGRhdGEuCisKKy5TSCAiTXVsdGlwbGUgVHJhbnNmZXJzIFVzaW5nIHRoZSBtdWx0aSBJbnRlcmZhY2UiCisKK1RoZSBlYXN5IGludGVyZmFjZSBhcyBkZXNjcmliZWQgaW4gZGV0YWlsIGluIHRoaXMgZG9jdW1lbnQgaXMgYSBzeW5jaHJvbm91cworaW50ZXJmYWNlIHRoYXQgdHJhbnNmZXJzIG9uZSBmaWxlIGF0IGEgdGltZSBhbmQgZG9lc24ndCByZXR1cm4gdW50aWwgaXQgaXMKK2RvbmUuCisKK1RoZSBtdWx0aSBpbnRlcmZhY2UsIG9uIHRoZSBvdGhlciBoYW5kLCBhbGxvd3MgeW91ciBwcm9ncmFtIHRvIHRyYW5zZmVyCittdWx0aXBsZSBmaWxlcyBpbiBib3RoIGRpcmVjdGlvbnMgYXQgdGhlIHNhbWUgdGltZSwgd2l0aG91dCBmb3JjaW5nIHlvdQordG8gdXNlIG11bHRpcGxlIHRocmVhZHMuICBUaGUgbmFtZSBtaWdodCBtYWtlIGl0IHNlZW0gdGhhdCB0aGUgbXVsdGkKK2ludGVyZmFjZSBpcyBmb3IgbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMsIGJ1dCB0aGUgdHJ1dGggaXMgYWxtb3N0IHRoZQorcmV2ZXJzZS4gIFRoZSBtdWx0aSBpbnRlcmZhY2UgY2FuIGFsbG93IGEgc2luZ2xlLXRocmVhZGVkIGFwcGxpY2F0aW9uCit0byBwZXJmb3JtIHRoZSBzYW1lIGtpbmRzIG9mIG11bHRpcGxlLCBzaW11bHRhbmVvdXMgdHJhbnNmZXJzIHRoYXQKK211bHRpLXRocmVhZGVkIHByb2dyYW1zIGNhbiBwZXJmb3JtLiAgSXQgYWxsb3dzIG1hbnkgb2YgdGhlIGJlbmVmaXRzCitvZiBtdWx0aS10aHJlYWRlZCB0cmFuc2ZlcnMgd2l0aG91dCB0aGUgY29tcGxleGl0eSBvZiBtYW5hZ2luZyBhbmQKK3N5bmNocm9uaXppbmcgbWFueSB0aHJlYWRzLgorCitUbyB1c2UgdGhpcyBpbnRlcmZhY2UsIHlvdSBhcmUgYmV0dGVyIG9mZiBpZiB5b3UgZmlyc3QgdW5kZXJzdGFuZCB0aGUgYmFzaWNzCitvZiBob3cgdG8gdXNlIHRoZSBlYXN5IGludGVyZmFjZS4gVGhlIG11bHRpIGludGVyZmFjZSBpcyBzaW1wbHkgYSB3YXkgdG8gbWFrZQorbXVsdGlwbGUgdHJhbnNmZXJzIGF0IHRoZSBzYW1lIHRpbWUgYnkgYWRkaW5nIHVwIG11bHRpcGxlIGVhc3kgaGFuZGxlcyBpbnRvCithICJtdWx0aSBzdGFjayIuCisKK1lvdSBjcmVhdGUgdGhlIGVhc3kgaGFuZGxlcyB5b3Ugd2FudCBhbmQgeW91IHNldCBhbGwgdGhlIG9wdGlvbnMganVzdCBsaWtlIHlvdQoraGF2ZSBiZWVuIHRvbGQgYWJvdmUsIGFuZCB0aGVuIHlvdSBjcmVhdGUgYSBtdWx0aSBoYW5kbGUgd2l0aAorXGZJY3VybF9tdWx0aV9pbml0KDMpXGZQIGFuZCBhZGQgYWxsIHRob3NlIGVhc3kgaGFuZGxlcyB0byB0aGF0IG11bHRpIGhhbmRsZQord2l0aCBcZkljdXJsX211bHRpX2FkZF9oYW5kbGUoMylcZlAuCisKK1doZW4geW91J3ZlIGFkZGVkIHRoZSBoYW5kbGVzIHlvdSBoYXZlIGZvciB0aGUgbW9tZW50ICh5b3UgY2FuIHN0aWxsIGFkZCBuZXcKK29uZXMgYXQgYW55IHRpbWUpLCB5b3Ugc3RhcnQgdGhlIHRyYW5zZmVycyBieSBjYWxsaW5nCitcZkljdXJsX211bHRpX3BlcmZvcm0oMylcZlAuCisKK1xmSWN1cmxfbXVsdGlfcGVyZm9ybSgzKVxmUCBpcyBhc3luY2hyb25vdXMuIEl0IHdpbGwgb25seSBleGVjdXRlIGFzIGxpdHRsZSBhcworcG9zc2libGUgYW5kIHRoZW4gcmV0dXJuIGJhY2sgY29udHJvbCB0byB5b3VyIHByb2dyYW0uIEl0IGlzIGRlc2lnbmVkIHRvIG5ldmVyCitibG9jay4KKworVGhlIGJlc3QgdXNhZ2Ugb2YgdGhpcyBpbnRlcmZhY2UgaXMgd2hlbiB5b3UgZG8gYSBzZWxlY3QoKSBvbiBhbGwgcG9zc2libGUKK2ZpbGUgZGVzY3JpcHRvcnMgb3Igc29ja2V0cyB0byBrbm93IHdoZW4gdG8gY2FsbCBsaWJjdXJsIGFnYWluLiBUaGlzIGFsc28KK21ha2VzIGl0IGVhc3kgZm9yIHlvdSB0byB3YWl0IGFuZCByZXNwb25kIHRvIGFjdGlvbnMgb24geW91ciBvd24gYXBwbGljYXRpb24ncworc29ja2V0cy9oYW5kbGVzLiBZb3UgZmlndXJlIG91dCB3aGF0IHRvIHNlbGVjdCgpIGZvciBieSB1c2luZworXGZJY3VybF9tdWx0aV9mZHNldCgzKVxmUCwgdGhhdCBmaWxscyBpbiBhIHNldCBvZiBmZF9zZXQgdmFyaWFibGVzIGZvciB5b3UKK3dpdGggdGhlIHBhcnRpY3VsYXIgZmlsZSBkZXNjcmlwdG9ycyBsaWJjdXJsIHVzZXMgZm9yIHRoZSBtb21lbnQuCisKK1doZW4geW91IHRoZW4gY2FsbCBzZWxlY3QoKSwgaXQnbGwgcmV0dXJuIHdoZW4gb25lIG9mIHRoZSBmaWxlIGhhbmRsZXMgc2lnbmFsCithY3Rpb24gYW5kIHlvdSB0aGVuIGNhbGwgXGZJY3VybF9tdWx0aV9wZXJmb3JtKDMpXGZQIHRvIGFsbG93IGxpYmN1cmwgdG8gZG8KK3doYXQgaXQgd2FudHMgdG8gZG8uIFRha2Ugbm90ZSB0aGF0IGxpYmN1cmwgZG9lcyBhbHNvIGZlYXR1cmUgc29tZSB0aW1lLW91dAorY29kZSBzbyB3ZSBhZHZpc2UgeW91IHRvIG5ldmVyIHVzZSB2ZXJ5IGxvbmcgdGltZW91dHMgb24gc2VsZWN0KCkgYmVmb3JlIHlvdQorY2FsbCBcZkljdXJsX211bHRpX3BlcmZvcm0oMylcZlAsIHdoaWNoIHRodXMgc2hvdWxkIGJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkKK2V2ZXJ5IG5vdyBhbmQgdGhlbiBldmVuIGlmIG5vbmUgb2YgaXRzIGZpbGUgZGVzY3JpcHRvcnMgaGF2ZSBzaWduYWxlZAorcmVhZHkuIEFub3RoZXIgcHJlY2F1dGlvbiB5b3Ugc2hvdWxkIHVzZTogYWx3YXlzIGNhbGwKK1xmSWN1cmxfbXVsdGlfZmRzZXQoMylcZlAgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBzZWxlY3QoKSBjYWxsIHNpbmNlIHRoZQorY3VycmVudCBzZXQgb2YgZmlsZSBkZXNjcmlwdG9ycyBtYXkgY2hhbmdlIHdoZW4gY2FsbGluZyBhIGN1cmwgZnVuY3Rpb24uCisKK0lmIHlvdSB3YW50IHRvIHN0b3AgdGhlIHRyYW5zZmVyIG9mIG9uZSBvZiB0aGUgZWFzeSBoYW5kbGVzIGluIHRoZSBzdGFjaywgeW91CitjYW4gdXNlIFxmSWN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgzKVxmUCB0byByZW1vdmUgaW5kaXZpZHVhbCBlYXN5CitoYW5kbGVzLiBSZW1lbWJlciB0aGF0IGVhc3kgaGFuZGxlcyBzaG91bGQgYmUgXGZJY3VybF9lYXN5X2NsZWFudXAoMylcZlBlZC4KKworV2hlbiBhIHRyYW5zZmVyIHdpdGhpbiB0aGUgbXVsdGkgc3RhY2sgaGFzIGZpbmlzaGVkLCB0aGUgY291bnRlciBvZiBydW5uaW5nCit0cmFuc2ZlcnMgKGFzIGZpbGxlZCBpbiBieSBcZkljdXJsX211bHRpX3BlcmZvcm0oMylcZlApIHdpbGwgZGVjcmVhc2UuIFdoZW4KK3RoZSBudW1iZXIgcmVhY2hlcyB6ZXJvLCBhbGwgdHJhbnNmZXJzIGFyZSBkb25lLgorCitcZkljdXJsX211bHRpX2luZm9fcmVhZCgzKVxmUCBjYW4gYmUgdXNlZCB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgY29tcGxldGVkCit0cmFuc2ZlcnMuIEl0IHRoZW4gcmV0dXJucyB0aGUgQ1VSTGNvZGUgZm9yIGVhY2ggZWFzeSB0cmFuc2ZlciwgdG8gYWxsb3cgeW91Cit0byBmaWd1cmUgb3V0IHN1Y2Nlc3Mgb24gZWFjaCBpbmRpdmlkdWFsIHRyYW5zZmVyLgorCisuU0ggIlNTTCwgQ2VydGlmaWNhdGVzIGFuZCBPdGhlciBUcmlja3MiCisKKyBbIHNlZWRpbmcsIHBhc3N3b3Jkcywga2V5cywgY2VydGlmaWNhdGVzLCBFTkdJTkUsIGNhIGNlcnRzIF0KKworLlNIICJTaGFyaW5nIERhdGEgQmV0d2VlbiBFYXN5IEhhbmRsZXMiCitZb3UgY2FuIHNoYXJlIHNvbWUgZGF0YSBiZXR3ZWVuIGVhc3kgaGFuZGxlcyB3aGVuIHRoZSBlYXN5IGludGVyZmFjZSBpcyB1c2VkLAorYW5kIHNvbWUgZGF0YSBpcyBzaGFyZSBhdXRvbWF0aWNhbGx5IHdoZW4geW91IHVzZSB0aGUgbXVsdGkgaW50ZXJmYWNlLgorCitXaGVuIHlvdSBhZGQgZWFzeSBoYW5kbGVzIHRvIGEgbXVsdGkgaGFuZGxlLCB0aGVzZSBlYXN5IGhhbmRsZXMgd2lsbAorYXV0b21hdGljYWxseSBzaGFyZSBhIGxvdCBvZiB0aGUgZGF0YSB0aGF0IG90aGVyd2lzZSB3b3VsZCBiZSBrZXB0IG9uIGEKK3Blci1lYXN5IGhhbmRsZSBiYXNpcyB3aGVuIHRoZSBlYXN5IGludGVyZmFjZSBpcyB1c2VkLgorCitUaGUgRE5TIGNhY2hlIGlzIHNoYXJlZCBiZXR3ZWVuIGhhbmRsZXMgd2l0aGluIGEgbXVsdGkgaGFuZGxlLCBtYWtpbmcKK3N1YnNlcXVlbnQgbmFtZSByZXNvbHZpbmdzIGZhc3RlciBhbmQgdGhlIGNvbm5lY3Rpb24gcG9vbCB0aGF0IGlzIGtlcHQgdG8KK2JldHRlciBhbGxvdyBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zIGFuZCBjb25uZWN0aW9uIHJlLXVzZSBpcyBzaGFyZWQuIElmIHlvdSdyZQordXNpbmcgdGhlIGVhc3kgaW50ZXJmYWNlLCB5b3UgY2FuIHN0aWxsIHNoYXJlIHRoZXNlIGJldHdlZW4gc3BlY2lmaWMgZWFzeQoraGFuZGxlcyBieSB1c2luZyB0aGUgc2hhcmUgaW50ZXJmYWNlLCBzZWUgXGZJbGliY3VybC1zaGFyZSgzKVxmUC4KKworU29tZSB0aGluZ3MgYXJlIG5ldmVyIHNoYXJlZCBhdXRvbWF0aWNhbGx5LCBub3Qgd2l0aGluIG11bHRpIGhhbmRsZXMsIGxpa2UgZm9yCitleGFtcGxlIGNvb2tpZXMgc28gdGhlIG9ubHkgd2F5IHRvIHNoYXJlIHRoYXQgaXMgd2l0aCB0aGUgc2hhcmUgaW50ZXJmYWNlLgorLlNIICJGb290bm90ZXMiCisKKy5JUCAiWzFdIgorbGliY3VybCA3LjEwLjMgYW5kIGxhdGVyIGhhdmUgdGhlIGFiaWxpdHkgdG8gc3dpdGNoIG92ZXIgdG8gY2h1bmtlZAorVHJhbnNmZXItRW5jb2RpbmcgaW4gY2FzZXMgd2hlcmUgSFRUUCB1cGxvYWRzIGFyZSBkb25lIHdpdGggZGF0YSBvZiBhbiB1bmtub3duCitzaXplLgorLklQICJbMl0iCitUaGlzIGhhcHBlbnMgb24gV2luZG93cyBtYWNoaW5lcyB3aGVuIGxpYmN1cmwgaXMgYnVpbHQgYW5kIHVzZWQgYXMgYQorRExMLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIGRvIHRoaXMgb24gV2luZG93cyBpZiB5b3UgbGluayB3aXRoIGEgc3RhdGljCitsaWJyYXJ5LgorLklQICJbM10iCitUaGUgY3VybC1jb25maWcgdG9vbCBpcyBnZW5lcmF0ZWQgYXQgYnVpbGQtdGltZSAob24gVU5JWC1saWtlIHN5c3RlbXMpIGFuZAorc2hvdWxkIGJlIGluc3RhbGxlZCB3aXRoIHRoZSAnbWFrZSBpbnN0YWxsJyBvciBzaW1pbGFyIGluc3RydWN0aW9uIHRoYXQKK2luc3RhbGxzIHRoZSBsaWJyYXJ5LCBoZWFkZXIgZmlsZXMsIG1hbiBwYWdlcyBldGMuCisuSVAgIls0XSIKK1RoaXMgYmVoYXZpb3Igd2FzIGRpZmZlcmVudCBpbiB2ZXJzaW9ucyBiZWZvcmUgNy4xNy4wLCB3aGVyZSBzdHJpbmdzIGhhZCB0bworcmVtYWluIHZhbGlkIHBhc3QgdGhlIGVuZCBvZiB0aGUgXGZJY3VybF9lYXN5X3NldG9wdCgzKVxmUCBjYWxsLgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtdHV0b3JpYWwuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLXR1dG9yaWFsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiNzI4NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLXR1dG9yaWFsLmh0bWwKQEAgLTAsMCArMSw0ODQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5saWJjdXJsLXR1dG9yaWFsIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmxpYmN1cmwtdHV0b3JpYWwgLSBsaWJjdXJsIHByb2dyYW1taW5nIHR1dG9yaWFsIDxhIG5hbWU9Ik9iamVjdGl2ZSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+T2JqZWN0aXZlPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoaXMgZG9jdW1lbnQgYXR0ZW1wdHMgdG8gZGVzY3JpYmUgdGhlIGdlbmVyYWwgcHJpbmNpcGxlcyBhbmQgc29tZSBiYXNpYyBhcHByb2FjaGVzIHRvIGNvbnNpZGVyIHdoZW4gcHJvZ3JhbW1pbmcgd2l0aCBsaWJjdXJsLiBUaGUgdGV4dCB3aWxsIGZvY3VzIG1haW5seSBvbiB0aGUgQyBpbnRlcmZhY2UgYnV0IG1pZ2h0IGFwcGx5IGZhaXJseSB3ZWxsIG9uIG90aGVyIGludGVyZmFjZXMgYXMgd2VsbCBhcyB0aGV5IHVzdWFsbHkgZm9sbG93IHRoZSBDIG9uZSBwcmV0dHkgY2xvc2VseS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGRvY3VtZW50IHdpbGwgcmVmZXIgdG8gJ3RoZSB1c2VyJyBhcyB0aGUgcGVyc29uIHdyaXRpbmcgdGhlIHNvdXJjZSBjb2RlIHRoYXQgdXNlcyBsaWJjdXJsLiBUaGF0IHdvdWxkIHByb2JhYmx5IGJlIHlvdSBvciBzb21lb25lIGluIHlvdXIgcG9zaXRpb24uIFdoYXQgd2lsbCBiZSBnZW5lcmFsbHkgcmVmZXJyZWQgdG8gYXMgJ3RoZSBwcm9ncmFtJyB3aWxsIGJlIHRoZSBjb2xsZWN0ZWQgc291cmNlIGNvZGUgdGhhdCB5b3Ugd3JpdGUgdGhhdCBpcyB1c2luZyBsaWJjdXJsIGZvciB0cmFuc2ZlcnMuIFRoZSBwcm9ncmFtIGlzIG91dHNpZGUgbGliY3VybCBhbmQgbGliY3VybCBpcyBvdXRzaWRlIG9mIHRoZSBwcm9ncmFtLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRvIGdldCBtb3JlIGRldGFpbHMgb24gYWxsIG9wdGlvbnMgYW5kIGZ1bmN0aW9ucyBkZXNjcmliZWQgaGVyZWluLCBwbGVhc2UgcmVmZXIgdG8gdGhlaXIgcmVzcGVjdGl2ZSBtYW4gcGFnZXMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQnVpbGRpbmciPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkJ1aWxkaW5nPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCB3YXlzIHRvIGJ1aWxkIEMgcHJvZ3JhbXMuIFRoaXMgY2hhcHRlciB3aWxsIGFzc3VtZSBhIFVOSVgtc3R5bGUgYnVpbGQgcHJvY2Vzcy4gSWYgeW91IHVzZSBhIGRpZmZlcmVudCBidWlsZCBzeXN0ZW0sIHlvdSBjYW4gc3RpbGwgcmVhZCB0aGlzIHRvIGdldCBnZW5lcmFsIGluZm9ybWF0aW9uIHRoYXQgbWF5IGFwcGx5IHRvIHlvdXIgZW52aXJvbm1lbnQgYXMgd2VsbC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJDb21waWxpbmciPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q29tcGlsaW5nIHRoZSBQcm9ncmFtPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPllvdXIgY29tcGlsZXIgbmVlZHMgdG8ga25vdyB3aGVyZSB0aGUgbGliY3VybCBoZWFkZXJzIGFyZSBsb2NhdGVkLiBUaGVyZWZvcmUgeW91IG11c3Qgc2V0IHlvdXIgY29tcGlsZXIncyBpbmNsdWRlIHBhdGggdG8gcG9pbnQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgaW5zdGFsbGVkIHRoZW0uIFRoZSAnY3VybC1jb25maWcnWzNdIHRvb2wgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb246IAorPHAgY2xhc3M9ImxldmVsMSI+JCBjdXJsLWNvbmZpZyAtLWNmbGFncyAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTGlua2luZyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5MaW5raW5nIHRoZSBQcm9ncmFtIHdpdGggbGliY3VybDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIGhhdmluZyBjb21waWxlZCB0aGUgcHJvZ3JhbSwgeW91IG5lZWQgdG8gbGluayB5b3VyIG9iamVjdCBmaWxlcyB0byBjcmVhdGUgYSBzaW5nbGUgZXhlY3V0YWJsZS4gRm9yIHRoYXQgdG8gc3VjY2VlZCwgeW91IG5lZWQgdG8gbGluayB3aXRoIGxpYmN1cmwgYW5kIHBvc3NpYmx5IGFsc28gd2l0aCBvdGhlciBsaWJyYXJpZXMgdGhhdCBsaWJjdXJsIGl0c2VsZiBkZXBlbmRzIG9uLiBMaWtlIHRoZSBPcGVuU1NMIGxpYnJhcmllcywgYnV0IGV2ZW4gc29tZSBzdGFuZGFyZCBPUyBsaWJyYXJpZXMgbWF5IGJlIG5lZWRlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiBUbyBmaWd1cmUgb3V0IHdoaWNoIGZsYWdzIHRvIHVzZSwgb25jZSBhZ2FpbiB0aGUgJ2N1cmwtY29uZmlnJyB0b29sIGNvbWVzIHRvIHRoZSByZXNjdWU6IAorPHAgY2xhc3M9ImxldmVsMSI+JCBjdXJsLWNvbmZpZyAtLWxpYnMgCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IlNTTCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5TU0wgb3IgTm90PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPmxpYmN1cmwgY2FuIGJlIGJ1aWx0IGFuZCBjdXN0b21pemVkIGluIG1hbnkgd2F5cy4gT25lIG9mIHRoZSB0aGluZ3MgdGhhdCB2YXJpZXMgZnJvbSBkaWZmZXJlbnQgbGlicmFyaWVzIGFuZCBidWlsZHMgaXMgdGhlIHN1cHBvcnQgZm9yIFNTTC1iYXNlZCB0cmFuc2ZlcnMsIGxpa2UgSFRUUFMgYW5kIEZUUFMuIElmIGEgc3VwcG9ydGVkIFNTTCBsaWJyYXJ5IHdhcyBkZXRlY3RlZCBwcm9wZXJseSBhdCBidWlsZC10aW1lLCBsaWJjdXJsIHdpbGwgYmUgYnVpbHQgd2l0aCBTU0wgc3VwcG9ydC4gVG8gZmlndXJlIG91dCBpZiBhbiBpbnN0YWxsZWQgbGliY3VybCBoYXMgYmVlbiBidWlsdCB3aXRoIFNTTCBzdXBwb3J0IGVuYWJsZWQsIHVzZSAnY3VybC1jb25maWcnIGxpa2UgdGhpczogCis8cCBjbGFzcz0ibGV2ZWwxIj4kIGN1cmwtY29uZmlnIC0tZmVhdHVyZSAKKzxwIGNsYXNzPSJsZXZlbDEiPkFuZCBpZiBTU0wgaXMgc3VwcG9ydGVkLCB0aGUga2V5d29yZCAnU1NMJyB3aWxsIGJlIHdyaXR0ZW4gdG8gc3Rkb3V0LCBwb3NzaWJseSB0b2dldGhlciB3aXRoIGEgZmV3IG90aGVyIGZlYXR1cmVzIHRoYXQgY291bGQgYmUgZWl0aGVyIG9uIG9yIG9mZiBvbiBmb3IgZGlmZmVyZW50IGxpYmN1cmxzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNlZSBhbHNvIHRoZSAiRmVhdHVyZXMgbGliY3VybCBQcm92aWRlcyIgZnVydGhlciBkb3duLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9ImF1dG9jb25mIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPmF1dG9jb25mIG1hY3JvPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPldoZW4geW91IHdyaXRlIHlvdXIgY29uZmlndXJlIHNjcmlwdCB0byBkZXRlY3QgbGliY3VybCBhbmQgc2V0dXAgdmFyaWFibGVzIGFjY29yZGluZ2x5LCB3ZSBvZmZlciBhIHByZXdyaXR0ZW4gbWFjcm8gdGhhdCBwcm9iYWJseSBkb2VzIGV2ZXJ5dGhpbmcgeW91IG5lZWQgaW4gdGhpcyBhcmVhLiBTZWUgZG9jcy9saWJjdXJsL2xpYmN1cmwubTQgZmlsZSAtIGl0IGluY2x1ZGVzIGRvY3Mgb24gaG93IHRvIHVzZSBpdC4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJQb3J0YWJsZSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UG9ydGFibGUgQ29kZSBpbiBhIFBvcnRhYmxlIFdvcmxkPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBwZW9wbGUgYmVoaW5kIGxpYmN1cmwgaGF2ZSBwdXQgYSBjb25zaWRlcmFibGUgZWZmb3J0IHRvIG1ha2UgbGliY3VybCB3b3JrIG9uIGEgbGFyZ2UgYW1vdW50IG9mIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcyBhbmQgZW52aXJvbm1lbnRzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPllvdSBwcm9ncmFtIGxpYmN1cmwgdGhlIHNhbWUgd2F5IG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBsaWJjdXJsIHJ1bnMgb24uIFRoZXJlIGFyZSBvbmx5IHZlcnkgZmV3IG1pbm9yIGNvbnNpZGVyYXRpb25zIHRoYXQgZGlmZmVyLiBJZiB5b3UganVzdCBtYWtlIHN1cmUgdG8gd3JpdGUgeW91ciBjb2RlIHBvcnRhYmxlIGVub3VnaCwgeW91IG1heSB2ZXJ5IHdlbGwgY3JlYXRlIHlvdXJzZWxmIGEgdmVyeSBwb3J0YWJsZSBwcm9ncmFtLiBsaWJjdXJsIHNob3VsZG4ndCBzdG9wIHlvdSBmcm9tIHRoYXQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iR2xvYmFsIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5HbG9iYWwgUHJlcGFyYXRpb248L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhlIHByb2dyYW0gbXVzdCBpbml0aWFsaXplIHNvbWUgb2YgdGhlIGxpYmN1cmwgZnVuY3Rpb25hbGl0eSBnbG9iYWxseS4gVGhhdCBtZWFucyBpdCBzaG91bGQgYmUgZG9uZSBleGFjdGx5IG9uY2UsIG5vIG1hdHRlciBob3cgbWFueSB0aW1lcyB5b3UgaW50ZW5kIHRvIHVzZSB0aGUgbGlicmFyeS4gT25jZSBmb3IgeW91ciBwcm9ncmFtJ3MgZW50aXJlIGxpZmUgdGltZS4gVGhpcyBpcyBkb25lIHVzaW5nIAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Y3VybF9nbG9iYWxfaW5pdCgpIAorPHAgY2xhc3M9ImxldmVsMCI+YW5kIGl0IHRha2VzIG9uZSBwYXJhbWV0ZXIgd2hpY2ggaXMgYSBiaXQgcGF0dGVybiB0aGF0IHRlbGxzIGxpYmN1cmwgd2hhdCB0byBpbml0aWFsaXplLiBVc2luZyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxfR0xPQkFMX0FMTDwvc3Bhbj4gd2lsbCBtYWtlIGl0IGluaXRpYWxpemUgYWxsIGtub3duIGludGVybmFsIHN1YiBtb2R1bGVzLCBhbmQgbWlnaHQgYmUgYSBnb29kIGRlZmF1bHQgb3B0aW9uLiBUaGUgY3VycmVudCB0d28gYml0cyB0aGF0IGFyZSBzcGVjaWZpZWQgYXJlOiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEdMT0JBTFdJTjMyIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNVUkxfR0xPQkFMX1dJTjMyPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPndoaWNoIG9ubHkgZG9lcyBhbnl0aGluZyBvbiBXaW5kb3dzIG1hY2hpbmVzLiBXaGVuIHVzZWQgb24gYSBXaW5kb3dzIG1hY2hpbmUsIGl0J2xsIG1ha2UgbGliY3VybCBpbml0aWFsaXplIHRoZSB3aW4zMiBzb2NrZXQgc3R1ZmYuIFdpdGhvdXQgaGF2aW5nIHRoYXQgaW5pdGlhbGl6ZWQgcHJvcGVybHksIHlvdXIgcHJvZ3JhbSBjYW5ub3QgdXNlIHNvY2tldHMgcHJvcGVybHkuIFlvdSBzaG91bGQgb25seSBkbyB0aGlzIG9uY2UgZm9yIGVhY2ggYXBwbGljYXRpb24sIHNvIGlmIHlvdXIgcHJvZ3JhbSBhbHJlYWR5IGRvZXMgdGhpcyBvciBvZiBhbm90aGVyIGxpYnJhcnkgaW4gdXNlIGRvZXMgaXQsIHlvdSBzaG91bGQgbm90IHRlbGwgbGliY3VybCB0byBkbyB0aGlzIGFzIHdlbGwuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VSTEdMT0JBTFNTTCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVJMX0dMT0JBTF9TU0w8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+d2hpY2ggb25seSBkb2VzIGFueXRoaW5nIG9uIGxpYmN1cmxzIGNvbXBpbGVkIGFuZCBidWlsdCBTU0wtZW5hYmxlZC4gT24gdGhlc2Ugc3lzdGVtcywgdGhpcyB3aWxsIG1ha2UgbGliY3VybCBpbml0aWFsaXplIHRoZSBTU0wgbGlicmFyeSBwcm9wZXJseSBmb3IgdGhpcyBhcHBsaWNhdGlvbi4gVGhpcyBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSBmb3IgZWFjaCBhcHBsaWNhdGlvbiBzbyBpZiB5b3VyIHByb2dyYW0gb3IgYW5vdGhlciBsaWJyYXJ5IGFscmVhZHkgZG9lcyB0aGlzLCB0aGlzIGJpdCBzaG91bGQgbm90IGJlIG5lZWRlZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPmxpYmN1cmwgaGFzIGEgZGVmYXVsdCBwcm90ZWN0aW9uIG1lY2hhbmlzbSB0aGF0IGRldGVjdHMgaWYgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZ2xvYmFsX2luaXQuaHRtbCI+Y3VybF9nbG9iYWxfaW5pdCgzKTwvYT4gaGFzbid0IGJlZW4gY2FsbGVkIGJ5IHRoZSB0aW1lIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfcGVyZm9ybS5odG1sIj5jdXJsX2Vhc3lfcGVyZm9ybSgzKTwvYT4gaXMgY2FsbGVkIGFuZCBpZiB0aGF0IGlzIHRoZSBjYXNlLCBsaWJjdXJsIHJ1bnMgdGhlIGZ1bmN0aW9uIGl0c2VsZiB3aXRoIGEgZ3Vlc3NlZCBiaXQgcGF0dGVybi4gUGxlYXNlIG5vdGUgdGhhdCBkZXBlbmRpbmcgc29sZWx5IG9uIHRoaXMgaXMgbm90IGNvbnNpZGVyZWQgbmljZSBub3IgdmVyeSBnb29kLiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gdGhlIHByb2dyYW0gbm8gbG9uZ2VyIHVzZXMgbGliY3VybCwgaXQgc2hvdWxkIGNhbGwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZ2xvYmFsX2NsZWFudXAuaHRtbCI+Y3VybF9nbG9iYWxfY2xlYW51cCgzKTwvYT4sIHdoaWNoIGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgaW5pdCBjYWxsLiBJdCB3aWxsIHRoZW4gZG8gdGhlIHJldmVyc2VkIG9wZXJhdGlvbnMgdG8gY2xlYW51cCB0aGUgcmVzb3VyY2VzIHRoZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9nbG9iYWxfaW5pdC5odG1sIj5jdXJsX2dsb2JhbF9pbml0KDMpPC9hPiBjYWxsIGluaXRpYWxpemVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlJlcGVhdGVkIGNhbGxzIHRvIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2dsb2JhbF9pbml0Lmh0bWwiPmN1cmxfZ2xvYmFsX2luaXQoMyk8L2E+IGFuZCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9nbG9iYWxfY2xlYW51cC5odG1sIj5jdXJsX2dsb2JhbF9jbGVhbnVwKDMpPC9hPiBzaG91bGQgYmUgYXZvaWRlZC4gVGhleSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBlYWNoLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkZlYXR1cmVzIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5GZWF0dXJlcyBsaWJjdXJsIFByb3ZpZGVzPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPkl0IGlzIGNvbnNpZGVyZWQgYmVzdC1wcmFjdGljZSB0byBkZXRlcm1pbmUgbGliY3VybCBmZWF0dXJlcyBhdCBydW4tdGltZSByYXRoZXIgdGhhbiBhdCBidWlsZC10aW1lIChpZiBwb3NzaWJsZSBvZiBjb3Vyc2UpLiBCeSBjYWxsaW5nIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX3ZlcnNpb25faW5mby5odG1sIj5jdXJsX3ZlcnNpb25faW5mbygzKTwvYT4gYW5kIGNoZWNraW5nIG91dCB0aGUgZGV0YWlscyBvZiB0aGUgcmV0dXJuZWQgc3RydWN0LCB5b3VyIHByb2dyYW0gY2FuIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IHRoZSBjdXJyZW50bHkgcnVubmluZyBsaWJjdXJsIHN1cHBvcnRzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkhhbmRsZSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+SGFuZGxlIHRoZSBFYXN5IGxpYmN1cmw8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+bGliY3VybCBmaXJzdCBpbnRyb2R1Y2VkIHRoZSBzbyBjYWxsZWQgZWFzeSBpbnRlcmZhY2UuIEFsbCBvcGVyYXRpb25zIGluIHRoZSBlYXN5IGludGVyZmFjZSBhcmUgcHJlZml4ZWQgd2l0aCAnY3VybF9lYXN5Jy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5SZWNlbnQgbGliY3VybCB2ZXJzaW9ucyBhbHNvIG9mZmVyIHRoZSBtdWx0aSBpbnRlcmZhY2UuIE1vcmUgYWJvdXQgdGhhdCBpbnRlcmZhY2UsIHdoYXQgaXQgaXMgdGFyZ2V0ZWQgZm9yIGFuZCBob3cgdG8gdXNlIGl0IGlzIGRldGFpbGVkIGluIGEgc2VwYXJhdGUgY2hhcHRlciBmdXJ0aGVyIGRvd24uIFlvdSBzdGlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVhc3kgaW50ZXJmYWNlIGZpcnN0LCBzbyBwbGVhc2UgY29udGludWUgcmVhZGluZyBmb3IgYmV0dGVyIHVuZGVyc3RhbmRpbmcuIAorPHAgY2xhc3M9ImxldmVsMCI+VG8gdXNlIHRoZSBlYXN5IGludGVyZmFjZSwgeW91IG11c3QgZmlyc3QgY3JlYXRlIHlvdXJzZWxmIGFuIGVhc3kgaGFuZGxlLiBZb3UgbmVlZCBvbmUgaGFuZGxlIGZvciBlYWNoIGVhc3kgc2Vzc2lvbiB5b3Ugd2FudCB0byBwZXJmb3JtLiBCYXNpY2FsbHksIHlvdSBzaG91bGQgdXNlIG9uZSBoYW5kbGUgZm9yIGV2ZXJ5IHRocmVhZCB5b3UgcGxhbiB0byB1c2UgZm9yIHRyYW5zZmVycmluZy4gWW91IG11c3QgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgaGFuZGxlIGluIG11bHRpcGxlIHRocmVhZHMuIAorPHAgY2xhc3M9ImxldmVsMCI+R2V0IGFuIGVhc3kgaGFuZGxlIHdpdGggCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtlYXN5aGFuZGxlID0gY3VybF9lYXN5X2luaXQoKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj5JdCByZXR1cm5zIGFuIGVhc3kgaGFuZGxlLiBVc2luZyB0aGF0IHlvdSBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXA6IHNldHRpbmcgdXAgeW91ciBwcmVmZXJyZWQgYWN0aW9ucy4gQSBoYW5kbGUgaXMganVzdCBhIGxvZ2ljIGVudGl0eSBmb3IgdGhlIHVwY29taW5nIHRyYW5zZmVyIG9yIHNlcmllcyBvZiB0cmFuc2ZlcnMuIAorPHAgY2xhc3M9ImxldmVsMCI+WW91IHNldCBwcm9wZXJ0aWVzIGFuZCBvcHRpb25zIGZvciB0aGlzIGhhbmRsZSB1c2luZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3NldG9wdC5odG1sIj5jdXJsX2Vhc3lfc2V0b3B0KDMpPC9hPi4gVGhleSBjb250cm9sIGhvdyB0aGUgc3Vic2VxdWVudCB0cmFuc2ZlciBvciB0cmFuc2ZlcnMgd2lsbCBiZSBtYWRlLiBPcHRpb25zIHJlbWFpbiBzZXQgaW4gdGhlIGhhbmRsZSB1bnRpbCBzZXQgYWdhaW4gdG8gc29tZXRoaW5nIGRpZmZlcmVudC4gQWxhcywgbXVsdGlwbGUgcmVxdWVzdHMgdXNpbmcgdGhlIHNhbWUgaGFuZGxlIHdpbGwgdXNlIHRoZSBzYW1lIG9wdGlvbnMuIAorPHAgY2xhc3M9ImxldmVsMCI+TWFueSBvZiB0aGUgb3B0aW9ucyB5b3Ugc2V0IGluIGxpYmN1cmwgYXJlICJzdHJpbmdzIiwgcG9pbnRlcnMgdG8gZGF0YSB0ZXJtaW5hdGVkIHdpdGggYSB6ZXJvIGJ5dGUuIFdoZW4geW91IHNldCBzdHJpbmdzIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9zZXRvcHQuaHRtbCI+Y3VybF9lYXN5X3NldG9wdCgzKTwvYT4sIGxpYmN1cmwgbWFrZXMgaXRzIG93biBjb3B5IHNvIHRoYXQgdGhleSBkb24ndCBuZWVkIHRvIGJlIGtlcHQgYXJvdW5kIGluIHlvdXIgYXBwbGljYXRpb24gYWZ0ZXIgYmVpbmcgc2V0WzRdLiAKKzxwIGNsYXNzPSJsZXZlbDAiPk9uZSBvZiB0aGUgbW9zdCBiYXNpYyBwcm9wZXJ0aWVzIHRvIHNldCBpbiB0aGUgaGFuZGxlIGlzIHRoZSBVUkwuIFlvdSBzZXQgeW91ciBwcmVmZXJyZWQgVVJMIHRvIHRyYW5zZmVyIHdpdGggQ1VSTE9QVF9VUkwgaW4gYSBtYW5uZXIgc2ltaWxhciB0bzogCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwO2N1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX1VSTCwgIjxhIGhyZWY9Imh0dHA6Ly9kb21haW4uY29tLyI+aHR0cDovL2RvbWFpbi5jb20vPC9hPiIpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+TGV0J3MgYXNzdW1lIGZvciBhIHdoaWxlIHRoYXQgeW91IHdhbnQgdG8gcmVjZWl2ZSBkYXRhIGFzIHRoZSBVUkwgaWRlbnRpZmllcyBhIHJlbW90ZSByZXNvdXJjZSB5b3Ugd2FudCB0byBnZXQgaGVyZS4gU2luY2UgeW91IHdyaXRlIGEgc29ydCBvZiBhcHBsaWNhdGlvbiB0aGF0IG5lZWRzIHRoaXMgdHJhbnNmZXIsIEkgYXNzdW1lIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gZ2V0IHRoZSBkYXRhIHBhc3NlZCB0byB5b3UgZGlyZWN0bHkgaW5zdGVhZCBvZiBzaW1wbHkgZ2V0dGluZyBpdCBwYXNzZWQgdG8gc3Rkb3V0LiBTbywgeW91IHdyaXRlIHlvdXIgb3duIGZ1bmN0aW9uIHRoYXQgbWF0Y2hlcyB0aGlzIHByb3RvdHlwZTogCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtzaXplX3Qgd3JpdGVfZGF0YSh2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnVzZXJwKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgdGVsbCBsaWJjdXJsIHRvIHBhc3MgYWxsIGRhdGEgdG8gdGhpcyBmdW5jdGlvbiBieSBpc3N1aW5nIGEgZnVuY3Rpb24gc2ltaWxhciB0byB0aGlzOiAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwO2N1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZV9kYXRhKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgY2FuIGNvbnRyb2wgd2hhdCBkYXRhIHlvdXIgY2FsbGJhY2sgZnVuY3Rpb24gZ2V0cyBpbiB0aGUgZm91cnRoIGFyZ3VtZW50IGJ5IHNldHRpbmcgYW5vdGhlciBwcm9wZXJ0eTogCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfV1JJVEVEQVRBLCAmaW50ZXJuYWxfc3RydWN0KTsgCis8cCBjbGFzcz0ibGV2ZWwwIj5Vc2luZyB0aGF0IHByb3BlcnR5LCB5b3UgY2FuIGVhc2lseSBwYXNzIGxvY2FsIGRhdGEgYmV0d2VlbiB5b3VyIGFwcGxpY2F0aW9uIGFuZCB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGludm9rZWQgYnkgbGliY3VybC4gbGliY3VybCBpdHNlbGYgd29uJ3QgdG91Y2ggdGhlIGRhdGEgeW91IHBhc3Mgd2l0aCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxPUFRfV1JJVEVEQVRBPC9zcGFuPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj5saWJjdXJsIG9mZmVycyBpdHMgb3duIGRlZmF1bHQgaW50ZXJuYWwgY2FsbGJhY2sgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiB0aGUgZGF0YSBpZiB5b3UgZG9uJ3Qgc2V0IHRoZSBjYWxsYmFjayB3aXRoIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTE9QVF9XUklURUZVTkNUSU9OPC9zcGFuPi4gSXQgd2lsbCB0aGVuIHNpbXBseSBvdXRwdXQgdGhlIHJlY2VpdmVkIGRhdGEgdG8gc3Rkb3V0LiBZb3UgY2FuIGhhdmUgdGhlIGRlZmF1bHQgY2FsbGJhY2sgd3JpdGUgdGhlIGRhdGEgdG8gYSBkaWZmZXJlbnQgZmlsZSBoYW5kbGUgYnkgcGFzc2luZyBhICdGSUxFIConIHRvIGEgZmlsZSBvcGVuZWQgZm9yIHdyaXRpbmcgd2l0aCB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMT1BUX1dSSVRFREFUQTwvc3Bhbj4gb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDAiPk5vdywgd2UgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBoYXZlIGEgZGVlcCBicmVhdGguIEhlcmUncyBvbmUgb2YgdGhvc2UgcmFyZSBwbGF0Zm9ybS1kZXBlbmRlbnQgbml0cGlja3MuIERpZCB5b3Ugc3BvdCBpdD8gT24gc29tZSBwbGF0Zm9ybXNbMl0sIGxpYmN1cmwgd29uJ3QgYmUgYWJsZSB0byBvcGVyYXRlIG9uIGZpbGVzIG9wZW5lZCBieSB0aGUgcHJvZ3JhbS4gVGh1cywgaWYgeW91IHVzZSB0aGUgZGVmYXVsdCBjYWxsYmFjayBhbmQgcGFzcyBpbiBhbiBvcGVuIGZpbGUgd2l0aCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxPUFRfV1JJVEVEQVRBPC9zcGFuPiwgaXQgd2lsbCBjcmFzaC4gWW91IHNob3VsZCB0aGVyZWZvcmUgYXZvaWQgdGhpcyB0byBtYWtlIHlvdXIgcHJvZ3JhbSBydW4gZmluZSB2aXJ0dWFsbHkgZXZlcnl3aGVyZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj4oPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMT1BUX1dSSVRFREFUQTwvc3Bhbj4gd2FzIGZvcm1lcmx5IGtub3duIGFzIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTE9QVF9GSUxFPC9zcGFuPi4gQm90aCBuYW1lcyBzdGlsbCB3b3JrIGFuZCBkbyB0aGUgc2FtZSB0aGluZykuIAorPHAgY2xhc3M9ImxldmVsMCI+SWYgeW91J3JlIHVzaW5nIGxpYmN1cmwgYXMgYSB3aW4zMiBETEwsIHlvdSBNVVNUIHVzZSB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMT1BUX1dSSVRFRlVOQ1RJT048L3NwYW4+IGlmIHlvdSBzZXQgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5DVVJMT1BUX1dSSVRFREFUQTwvc3Bhbj4gLSBvciB5b3Ugd2lsbCBleHBlcmllbmNlIGNyYXNoZXMuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlcmUgYXJlIG9mIGNvdXJzZSBtYW55IG1vcmUgb3B0aW9ucyB5b3UgY2FuIHNldCwgYW5kIHdlJ2xsIGdldCBiYWNrIHRvIGEgZmV3IG9mIHRoZW0gbGF0ZXIuIExldCdzIGluc3RlYWQgY29udGludWUgdG8gdGhlIGFjdHVhbCB0cmFuc2ZlcjogCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtzdWNjZXNzID0gY3VybF9lYXN5X3BlcmZvcm0oZWFzeWhhbmRsZSk7IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9wZXJmb3JtLmh0bWwiPmN1cmxfZWFzeV9wZXJmb3JtKDMpPC9hPiB3aWxsIGNvbm5lY3QgdG8gdGhlIHJlbW90ZSBzaXRlLCBkbyB0aGUgbmVjZXNzYXJ5IGNvbW1hbmRzIGFuZCByZWNlaXZlIHRoZSB0cmFuc2Zlci4gV2hlbmV2ZXIgaXQgcmVjZWl2ZXMgZGF0YSwgaXQgY2FsbHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdlIHByZXZpb3VzbHkgc2V0LiBUaGUgZnVuY3Rpb24gbWF5IGdldCBvbmUgYnl0ZSBhdCBhIHRpbWUsIG9yIGl0IG1heSBnZXQgbWFueSBraWxvYnl0ZXMgYXQgb25jZS4gbGliY3VybCBkZWxpdmVycyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFzIG9mdGVuIGFzIHBvc3NpYmxlLiBZb3VyIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBpdCAidG9vayBjYXJlIG9mIi4gSWYgdGhhdCBpcyBub3QgdGhlIGV4YWN0IHNhbWUgYW1vdW50IG9mIGJ5dGVzIHRoYXQgd2FzIHBhc3NlZCB0byBpdCwgbGliY3VybCB3aWxsIGFib3J0IHRoZSBvcGVyYXRpb24gYW5kIHJldHVybiB3aXRoIGFuIGVycm9yIGNvZGUuIAorPHAgY2xhc3M9ImxldmVsMCI+V2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcmV0dXJuIGNvZGUgdGhhdCBpbmZvcm1zIHlvdSBpZiBpdCBzdWNjZWVkZWQgaW4gaXRzIG1pc3Npb24gb3Igbm90LiBJZiBhIHJldHVybiBjb2RlIGlzbid0IGVub3VnaCBmb3IgeW91LCB5b3UgY2FuIHVzZSB0aGUgQ1VSTE9QVF9FUlJPUkJVRkZFUiB0byBwb2ludCBsaWJjdXJsIHRvIGEgYnVmZmVyIG9mIHlvdXJzIHdoZXJlIGl0J2xsIHN0b3JlIGEgaHVtYW4gcmVhZGFibGUgZXJyb3IgbWVzc2FnZSBhcyB3ZWxsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPklmIHlvdSB0aGVuIHdhbnQgdG8gdHJhbnNmZXIgYW5vdGhlciBmaWxlLCB0aGUgaGFuZGxlIGlzIHJlYWR5IHRvIGJlIHVzZWQgYWdhaW4uIE1pbmQgeW91LCBpdCBpcyBldmVuIHByZWZlcnJlZCB0aGF0IHlvdSByZS11c2UgYW4gZXhpc3RpbmcgaGFuZGxlIGlmIHlvdSBpbnRlbmQgdG8gbWFrZSBhbm90aGVyIHRyYW5zZmVyLiBsaWJjdXJsIHdpbGwgdGhlbiBhdHRlbXB0IHRvIHJlLXVzZSB0aGUgcHJldmlvdXMgY29ubmVjdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Gb3Igc29tZSBwcm90b2NvbHMsIGRvd25sb2FkaW5nIGEgZmlsZSBjYW4gaW52b2x2ZSBhIGNvbXBsaWNhdGVkIHByb2Nlc3Mgb2YgbG9nZ2luZyBpbiwgc2V0dGluZyB0aGUgdHJhbnNmZXIgbW9kZSwgY2hhbmdpbmcgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBmaW5hbGx5IHRyYW5zZmVycmluZyB0aGUgZmlsZSBkYXRhLiBsaWJjdXJsIHRha2VzIGNhcmUgb2YgYWxsIHRoYXQgY29tcGxpY2F0aW9uIGZvciB5b3UuIEdpdmVuIHNpbXBseSB0aGUgVVJMIHRvIGEgZmlsZSwgbGliY3VybCB3aWxsIHRha2UgY2FyZSBvZiBhbGwgdGhlIGRldGFpbHMgbmVlZGVkIHRvIGdldCB0aGUgZmlsZSBtb3ZlZCBmcm9tIG9uZSBtYWNoaW5lIHRvIGFub3RoZXIuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTXVsdGktdGhyZWFkaW5nIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5NdWx0aS10aHJlYWRpbmcgSXNzdWVzPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBmaXJzdCBiYXNpYyBydWxlIGlzIHRoYXQgeW91IG11c3QgPHNwYW4gQ2xhc3M9ImJvbGQiPm5ldmVyPC9zcGFuPiBzaW11bHRhbmVvdXNseSBzaGFyZSBhIGxpYmN1cmwgaGFuZGxlIChiZSBpdCBlYXN5IG9yIG11bHRpIG9yIHdoYXRldmVyKSBiZXR3ZWVuIG11bHRpcGxlIHRocmVhZHMuIE9ubHkgdXNlIG9uZSBoYW5kbGUgaW4gb25lIHRocmVhZCBhdCBhbnkgdGltZS4gWW91IGNhbiBwYXNzIHRoZSBoYW5kbGVzIGFyb3VuZCBhbW9uZyB0aHJlYWRzLCBidXQgeW91IG11c3QgbmV2ZXIgdXNlIGEgc2luZ2xlIGhhbmRsZSBmcm9tIG1vcmUgdGhhbiBvbmUgdGhyZWFkIGF0IGFueSBnaXZlbiB0aW1lLiAKKzxwIGNsYXNzPSJsZXZlbDAiPmxpYmN1cmwgaXMgY29tcGxldGVseSB0aHJlYWQgc2FmZSwgZXhjZXB0IGZvciB0d28gaXNzdWVzOiBzaWduYWxzIGFuZCBTU0wvVExTIGhhbmRsZXJzLiBTaWduYWxzIGFyZSB1c2VkIGZvciB0aW1pbmcgb3V0IG5hbWUgcmVzb2x2ZXMgKGR1cmluZyBETlMgbG9va3VwKSAtIHdoZW4gYnVpbHQgd2l0aG91dCBjLWFyZXMgc3VwcG9ydCBhbmQgbm90IG9uIFdpbmRvd3MuIAorPHAgY2xhc3M9ImxldmVsMCI+SWYgeW91IGFyZSBhY2Nlc3NpbmcgSFRUUFMgb3IgRlRQUyBVUkxzIGluIGEgbXVsdGktdGhyZWFkZWQgbWFubmVyLCB5b3UgYXJlIHRoZW4gb2YgY291cnNlIHVzaW5nIHRoZSB1bmRlcmx5aW5nIFNTTCBsaWJyYXJ5IG11bHRpLXRocmVhZGVkIGFuZCB0aG9zZSBsaWJzIG1pZ2h0IGhhdmUgdGhlaXIgb3duIHJlcXVpcmVtZW50cyBvbiB0aGlzIGlzc3VlLiBCYXNpY2FsbHksIHlvdSBuZWVkIHRvIHByb3ZpZGUgb25lIG9yIHR3byBmdW5jdGlvbnMgdG8gYWxsb3cgaXQgdG8gZnVuY3Rpb24gcHJvcGVybHkuIEZvciBhbGwgZGV0YWlscywgc2VlIHRoaXM6IAorPHAgY2xhc3M9ImxldmVsMCI+T3BlblNTTCAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9jcnlwdG8vdGhyZWFkcy5odG1sIj5odHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvY3J5cHRvL3RocmVhZHMuaHRtbDwvYT4jREVTQ1JJUFRJT04gCis8cCBjbGFzcz0ibGV2ZWwwIj5HbnVUTFMgCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ251dGxzL21hbnVhbC9odG1sX25vZGUvIj5odHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ251dGxzL21hbnVhbC9odG1sX25vZGUvPC9hPk11bHRpXzAwMmR0aHJlYWRlZC1hcHBsaWNhdGlvbnMuaHRtbCAKKzxwIGNsYXNzPSJsZXZlbDAiPk5TUyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwO2lzIGNsYWltZWQgdG8gYmUgdGhyZWFkLXNhZmUgYWxyZWFkeSB3aXRob3V0IGFueXRoaW5nIHJlcXVpcmVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlBvbGFyU1NMIAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7UmVxdWlyZWQgYWN0aW9ucyB1bmtub3duLiAKKzxwIGNsYXNzPSJsZXZlbDAiPnlhc3NsIAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7UmVxdWlyZWQgYWN0aW9ucyB1bmtub3duLiAKKzxwIGNsYXNzPSJsZXZlbDAiPmF4VExTIAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7UmVxdWlyZWQgYWN0aW9ucyB1bmtub3duLiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gdXNpbmcgbXVsdGlwbGUgdGhyZWFkcyB5b3Ugc2hvdWxkIHNldCB0aGUgQ1VSTE9QVF9OT1NJR05BTCBvcHRpb24gdG8gMSBmb3IgYWxsIGhhbmRsZXMuIEV2ZXJ5dGhpbmcgd2lsbCBvciBtaWdodCB3b3JrIGZpbmUgZXhjZXB0IHRoYXQgdGltZW91dHMgYXJlIG5vdCBob25vcmVkIGR1cmluZyB0aGUgRE5TIGxvb2t1cCAtIHdoaWNoIHlvdSBjYW4gd29yayBhcm91bmQgYnkgYnVpbGRpbmcgbGliY3VybCB3aXRoIGMtYXJlcyBzdXBwb3J0LiBjLWFyZXMgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgYXN5bmNocm9ub3VzIG5hbWUgcmVzb2x2ZXMuIE9uIHNvbWUgcGxhdGZvcm1zLCBsaWJjdXJsIHNpbXBseSB3aWxsIG5vdCBmdW5jdGlvbiBwcm9wZXJseSBtdWx0aS10aHJlYWRlZCB1bmxlc3MgdGhpcyBvcHRpb24gaXMgc2V0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPkFsc28sIG5vdGUgdGhhdCBDVVJMT1BUX0ROU19VU0VfR0xPQkFMX0NBQ0hFIGlzIG5vdCB0aHJlYWQtc2FmZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJXaGVuIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5XaGVuIEl0IERvZXNuJ3QgV29yazwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGVyZSB3aWxsIGFsd2F5cyBiZSB0aW1lcyB3aGVuIHRoZSB0cmFuc2ZlciBmYWlscyBmb3Igc29tZSByZWFzb24uIFlvdSBtaWdodCBoYXZlIHNldCB0aGUgd3JvbmcgbGliY3VybCBvcHRpb24gb3IgbWlzdW5kZXJzdG9vZCB3aGF0IHRoZSBsaWJjdXJsIG9wdGlvbiBhY3R1YWxseSBkb2VzLCBvciB0aGUgcmVtb3RlIHNlcnZlciBtaWdodCByZXR1cm4gbm9uLXN0YW5kYXJkIHJlcGxpZXMgdGhhdCBjb25mdXNlIHRoZSBsaWJyYXJ5IHdoaWNoIHRoZW4gY29uZnVzZXMgeW91ciBwcm9ncmFtLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZXJlJ3Mgb25lIGdvbGRlbiBydWxlIHdoZW4gdGhlc2UgdGhpbmdzIG9jY3VyOiBzZXQgdGhlIENVUkxPUFRfVkVSQk9TRSBvcHRpb24gdG8gMS4gSXQnbGwgY2F1c2UgdGhlIGxpYnJhcnkgdG8gc3BldyBvdXQgdGhlIGVudGlyZSBwcm90b2NvbCBkZXRhaWxzIGl0IHNlbmRzLCBzb21lIGludGVybmFsIGluZm8gYW5kIHNvbWUgcmVjZWl2ZWQgcHJvdG9jb2wgZGF0YSBhcyB3ZWxsIChlc3BlY2lhbGx5IHdoZW4gdXNpbmcgRlRQKS4gSWYgeW91J3JlIHVzaW5nIEhUVFAsIGFkZGluZyB0aGUgaGVhZGVycyBpbiB0aGUgcmVjZWl2ZWQgb3V0cHV0IHRvIHN0dWR5IGlzIGFsc28gYSBjbGV2ZXIgd2F5IHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIHdoeSB0aGUgc2VydmVyIGJlaGF2ZXMgdGhlIHdheSBpdCBkb2VzLiBJbmNsdWRlIGhlYWRlcnMgaW4gdGhlIG5vcm1hbCBib2R5IG91dHB1dCB3aXRoIENVUkxPUFRfSEVBREVSIHNldCAxLiAKKzxwIGNsYXNzPSJsZXZlbDAiPk9mIGNvdXJzZSwgdGhlcmUgYXJlIGJ1Z3MgbGVmdC4gV2UgbmVlZCB0byBrbm93IGFib3V0IHRoZW0gdG8gYmUgYWJsZSB0byBmaXggdGhlbSwgc28gd2UncmUgcXVpdGUgZGVwZW5kZW50IG9uIHlvdXIgYnVnIHJlcG9ydHMhIFdoZW4geW91IGRvIHJlcG9ydCBzdXNwZWN0ZWQgYnVncyBpbiBsaWJjdXJsLCBwbGVhc2UgaW5jbHVkZSBhcyBtYW55IGRldGFpbHMgYXMgeW91IHBvc3NpYmx5IGNhbjogYSBwcm90b2NvbCBkdW1wIHRoYXQgQ1VSTE9QVF9WRVJCT1NFIHByb2R1Y2VzLCBsaWJyYXJ5IHZlcnNpb24sIGFzIG11Y2ggYXMgcG9zc2libGUgb2YgeW91ciBjb2RlIHRoYXQgdXNlcyBsaWJjdXJsLCBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgYW5kIHZlcnNpb24sIGNvbXBpbGVyIG5hbWUgYW5kIHZlcnNpb24gZXRjLiAKKzxwIGNsYXNzPSJsZXZlbDAiPklmIENVUkxPUFRfVkVSQk9TRSBpcyBub3QgZW5vdWdoLCB5b3UgaW5jcmVhc2UgdGhlIGxldmVsIG9mIGRlYnVnIGRhdGEgeW91ciBhcHBsaWNhdGlvbiByZWNlaXZlIGJ5IHVzaW5nIHRoZSBDVVJMT1BUX0RFQlVHRlVOQ1RJT04uIAorPHAgY2xhc3M9ImxldmVsMCI+R2V0dGluZyBzb21lIGluLWRlcHRoIGtub3dsZWRnZSBhYm91dCB0aGUgcHJvdG9jb2xzIGludm9sdmVkIGlzIG5ldmVyIHdyb25nLCBhbmQgaWYgeW91J3JlIHRyeWluZyB0byBkbyBmdW5ueSB0aGluZ3MsIHlvdSBtaWdodCB2ZXJ5IHdlbGwgdW5kZXJzdGFuZCBsaWJjdXJsIGFuZCBob3cgdG8gdXNlIGl0IGJldHRlciBpZiB5b3Ugc3R1ZHkgdGhlIGFwcHJvcHJpYXRlIFJGQyBkb2N1bWVudHMgYXQgbGVhc3QgYnJpZWZseS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJVcGxvYWQiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlVwbG9hZCBEYXRhIHRvIGEgUmVtb3RlIFNpdGU8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+bGliY3VybCB0cmllcyB0byBrZWVwIGEgcHJvdG9jb2wgaW5kZXBlbmRlbnQgYXBwcm9hY2ggdG8gbW9zdCB0cmFuc2ZlcnMsIHRodXMgdXBsb2FkaW5nIHRvIGEgcmVtb3RlIEZUUCBzaXRlIGlzIHZlcnkgc2ltaWxhciB0byB1cGxvYWRpbmcgZGF0YSB0byBhIEhUVFAgc2VydmVyIHdpdGggYSBQVVQgcmVxdWVzdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5PZiBjb3Vyc2UsIGZpcnN0IHlvdSBlaXRoZXIgY3JlYXRlIGFuIGVhc3kgaGFuZGxlIG9yIHlvdSByZS11c2Ugb25lIGV4aXN0aW5nIG9uZS4gVGhlbiB5b3Ugc2V0IHRoZSBVUkwgdG8gb3BlcmF0ZSBvbiBqdXN0IGxpa2UgYmVmb3JlLiBUaGlzIGlzIHRoZSByZW1vdGUgVVJMLCB0aGF0IHdlIG5vdyB3aWxsIHVwbG9hZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5TaW5jZSB3ZSB3cml0ZSBhbiBhcHBsaWNhdGlvbiwgd2UgbW9zdCBsaWtlbHkgd2FudCBsaWJjdXJsIHRvIGdldCB0aGUgdXBsb2FkIGRhdGEgYnkgYXNraW5nIHVzIGZvciBpdC4gVG8gbWFrZSBpdCBkbyB0aGF0LCB3ZSBzZXQgdGhlIHJlYWQgY2FsbGJhY2sgYW5kIHRoZSBjdXN0b20gcG9pbnRlciBsaWJjdXJsIHdpbGwgcGFzcyB0byBvdXIgcmVhZCBjYWxsYmFjay4gVGhlIHJlYWQgY2FsbGJhY2sgc2hvdWxkIGhhdmUgYSBwcm90b3R5cGUgc2ltaWxhciB0bzogCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtzaXplX3QgZnVuY3Rpb24oY2hhciAqYnVmcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5pdGVtcywgdm9pZCAqdXNlcnApOyAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZXJlIGJ1ZnB0ciBpcyB0aGUgcG9pbnRlciB0byBhIGJ1ZmZlciB3ZSBmaWxsIGluIHdpdGggZGF0YSB0byB1cGxvYWQgYW5kIHNpemUqbml0ZW1zIGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgYW5kIHRoZXJlZm9yZSBhbHNvIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHdlIGNhbiByZXR1cm4gdG8gbGliY3VybCBpbiB0aGlzIGNhbGwuIFRoZSAndXNlcnAnIHBvaW50ZXIgaXMgdGhlIGN1c3RvbSBwb2ludGVyIHdlIHNldCB0byBwb2ludCB0byBhIHN0cnVjdCBvZiBvdXJzIHRvIHBhc3MgcHJpdmF0ZSBkYXRhIGJldHdlZW4gdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgY2FsbGJhY2suIAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgcmVhZF9mdW5jdGlvbik7IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX1JFQUREQVRBLCAmZmlsZWRhdGEpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPlRlbGwgbGliY3VybCB0aGF0IHdlIHdhbnQgdG8gdXBsb2FkOiAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwO2N1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9VUExPQUQsIDFMKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj5BIGZldyBwcm90b2NvbHMgd29uJ3QgYmVoYXZlIHByb3Blcmx5IHdoZW4gdXBsb2FkcyBhcmUgZG9uZSB3aXRob3V0IGFueSBwcmlvciBrbm93bGVkZ2Ugb2YgdGhlIGV4cGVjdGVkIGZpbGUgc2l6ZS4gU28sIHNldCB0aGUgdXBsb2FkIGZpbGUgc2l6ZSB1c2luZyB0aGUgQ1VSTE9QVF9JTkZJTEVTSVpFX0xBUkdFIGZvciBhbGwga25vd24gZmlsZSBzaXplcyBsaWtlIHRoaXNbMV06IAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDsvKiBpbiB0aGlzIGV4YW1wbGUsIGZpbGVfc2l6ZSBtdXN0IGJlIGFuIGN1cmxfb2ZmX3QgdmFyaWFibGUgKi8gJm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX0lORklMRVNJWkVfTEFSR0UsIGZpbGVfc2l6ZSk7IAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5XaGVuIHlvdSBjYWxsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfcGVyZm9ybS5odG1sIj5jdXJsX2Vhc3lfcGVyZm9ybSgzKTwvYT4gdGhpcyB0aW1lLCBpdCdsbCBwZXJmb3JtIGFsbCB0aGUgbmVjZXNzYXJ5IG9wZXJhdGlvbnMgYW5kIHdoZW4gaXQgaGFzIGludm9rZWQgdGhlIHVwbG9hZCBpdCdsbCBjYWxsIHlvdXIgc3VwcGxpZWQgY2FsbGJhY2sgdG8gZ2V0IHRoZSBkYXRhIHRvIHVwbG9hZC4gVGhlIHByb2dyYW0gc2hvdWxkIHJldHVybiBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUgaW4gZXZlcnkgaW52b2tlLCBhcyB0aGF0IGlzIGxpa2VseSB0byBtYWtlIHRoZSB1cGxvYWQgcGVyZm9ybSBhcyBmYXN0IGFzIHBvc3NpYmxlLiBUaGUgY2FsbGJhY2sgc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGl0IHdyb3RlIGluIHRoZSBidWZmZXIuIFJldHVybmluZyAwIHdpbGwgc2lnbmFsIHRoZSBlbmQgb2YgdGhlIHVwbG9hZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJQYXNzd29yZHMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlBhc3N3b3JkczwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5NYW55IHByb3RvY29scyB1c2Ugb3IgZXZlbiByZXF1aXJlIHRoYXQgdXNlciBuYW1lIGFuZCBwYXNzd29yZCBhcmUgcHJvdmlkZWQgdG8gYmUgYWJsZSB0byBkb3dubG9hZCBvciB1cGxvYWQgdGhlIGRhdGEgb2YgeW91ciBjaG9pY2UuIGxpYmN1cmwgb2ZmZXJzIHNldmVyYWwgd2F5cyB0byBzcGVjaWZ5IHRoZW0uIAorPHAgY2xhc3M9ImxldmVsMCI+TW9zdCBwcm90b2NvbHMgc3VwcG9ydCB0aGF0IHlvdSBzcGVjaWZ5IHRoZSBuYW1lIGFuZCBwYXNzd29yZCBpbiB0aGUgVVJMIGl0c2VsZi4gbGliY3VybCB3aWxsIGRldGVjdCB0aGlzIGFuZCB1c2UgdGhlbSBhY2NvcmRpbmdseS4gVGhpcyBpcyB3cml0dGVuIGxpa2UgdGhpczogCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtwcm90b2NvbDovL3VzZXI6cGFzc3dvcmRAZXhhbXBsZS5jb20vcGF0aC8gCis8cCBjbGFzcz0ibGV2ZWwwIj5JZiB5b3UgbmVlZCBhbnkgb2RkIGxldHRlcnMgaW4geW91ciB1c2VyIG5hbWUgb3IgcGFzc3dvcmQsIHlvdSBzaG91bGQgZW50ZXIgdGhlbSBVUkwgZW5jb2RlZCwgYXMgJVhYIHdoZXJlIFhYIGlzIGEgdHdvLWRpZ2l0IGhleGFkZWNpbWFsIG51bWJlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj5saWJjdXJsIGFsc28gcHJvdmlkZXMgb3B0aW9ucyB0byBzZXQgdmFyaW91cyBwYXNzd29yZHMuIFRoZSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIGFzIHNob3duIGVtYmVkZGVkIGluIHRoZSBVUkwgY2FuIGluc3RlYWQgZ2V0IHNldCB3aXRoIHRoZSBDVVJMT1BUX1VTRVJQV0Qgb3B0aW9uLiBUaGUgYXJndW1lbnQgcGFzc2VkIHRvIGxpYmN1cmwgc2hvdWxkIGJlIGEgY2hhciAqIHRvIGEgc3RyaW5nIGluIHRoZSBmb3JtYXQgInVzZXI6cGFzc3dvcmQiLiBJbiBhIG1hbm5lciBsaWtlIHRoaXM6IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX1VTRVJQV0QsICJteW5hbWU6dGhlc2VjcmV0Iik7IAorPHAgY2xhc3M9ImxldmVsMCI+QW5vdGhlciBjYXNlIHdoZXJlIG5hbWUgYW5kIHBhc3N3b3JkIG1pZ2h0IGJlIG5lZWRlZCBhdCB0aW1lcywgaXMgZm9yIHRob3NlIHVzZXJzIHdobyBuZWVkIHRvIGF1dGhlbnRpY2F0ZSB0aGVtc2VsdmVzIHRvIGEgcHJveHkgdGhleSB1c2UuIGxpYmN1cmwgb2ZmZXJzIGFub3RoZXIgb3B0aW9uIGZvciB0aGlzLCB0aGUgQ1VSTE9QVF9QUk9YWVVTRVJQV0QuIEl0IGlzIHVzZWQgcXVpdGUgc2ltaWxhciB0byB0aGUgQ1VSTE9QVF9VU0VSUFdEIG9wdGlvbiBsaWtlIHRoaXM6IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX1BST1hZVVNFUlBXRCwgIm15bmFtZTp0aGVzZWNyZXQiKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGVyZSdzIGEgbG9uZyB0aW1lIFVOSVggInN0YW5kYXJkIiB3YXkgb2Ygc3RvcmluZyBmdHAgdXNlciBuYW1lcyBhbmQgcGFzc3dvcmRzLCBuYW1lbHkgaW4gdGhlICRIT01FLy5uZXRyYyBmaWxlLiBUaGUgZmlsZSBzaG91bGQgYmUgbWFkZSBwcml2YXRlIHNvIHRoYXQgb25seSB0aGUgdXNlciBtYXkgcmVhZCBpdCAoc2VlIGFsc28gdGhlICJTZWN1cml0eSBDb25zaWRlcmF0aW9ucyIgY2hhcHRlciksIGFzIGl0IG1pZ2h0IGNvbnRhaW4gdGhlIHBhc3N3b3JkIGluIHBsYWluIHRleHQuIGxpYmN1cmwgaGFzIHRoZSBhYmlsaXR5IHRvIHVzZSB0aGlzIGZpbGUgdG8gZmlndXJlIG91dCB3aGF0IHNldCBvZiB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIHRvIHVzZSBmb3IgYSBwYXJ0aWN1bGFyIGhvc3QuIEFzIGFuIGV4dGVuc2lvbiB0byB0aGUgbm9ybWFsIGZ1bmN0aW9uYWxpdHksIGxpYmN1cmwgYWxzbyBzdXBwb3J0cyB0aGlzIGZpbGUgZm9yIG5vbi1GVFAgcHJvdG9jb2xzIHN1Y2ggYXMgSFRUUC4gVG8gbWFrZSBjdXJsIHVzZSB0aGlzIGZpbGUsIHVzZSB0aGUgQ1VSTE9QVF9ORVRSQyBvcHRpb246IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX05FVFJDLCAxTCk7IAorPHAgY2xhc3M9ImxldmVsMCI+QW5kIGEgdmVyeSBiYXNpYyBleGFtcGxlIG9mIGhvdyBzdWNoIGEgLm5ldHJjIGZpbGUgbWF5IGxvb2sgbGlrZTogCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwO21hY2hpbmUgbXlob3N0Lm15ZG9tYWluLmNvbSAmbmJzcDtsb2dpbiB1c2VybG9naW4gJm5ic3A7cGFzc3dvcmQgc2VjcmV0d29yZCAKKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+QWxsIHRoZXNlIGV4YW1wbGVzIGhhdmUgYmVlbiBjYXNlcyB3aGVyZSB0aGUgcGFzc3dvcmQgaGFzIGJlZW4gb3B0aW9uYWwsIG9yIGF0IGxlYXN0IHlvdSBjb3VsZCBsZWF2ZSBpdCBvdXQgYW5kIGhhdmUgbGliY3VybCBhdHRlbXB0IHRvIGRvIGl0cyBqb2Igd2l0aG91dCBpdC4gVGhlcmUgYXJlIHRpbWVzIHdoZW4gdGhlIHBhc3N3b3JkIGlzbid0IG9wdGlvbmFsLCBsaWtlIHdoZW4geW91J3JlIHVzaW5nIGFuIFNTTCBwcml2YXRlIGtleSBmb3Igc2VjdXJlIHRyYW5zZmVycy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UbyBwYXNzIHRoZSBrbm93biBwcml2YXRlIGtleSBwYXNzd29yZCB0byBsaWJjdXJsOiAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwO2N1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9LRVlQQVNTV0QsICJrZXlwYXNzd29yZCIpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkhUVFAiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkhUVFAgQXV0aGVudGljYXRpb248L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+VGhlIHByZXZpb3VzIGNoYXB0ZXIgc2hvd2VkIGhvdyB0byBzZXQgdXNlciBuYW1lIGFuZCBwYXNzd29yZCBmb3IgZ2V0dGluZyBVUkxzIHRoYXQgcmVxdWlyZSBhdXRoZW50aWNhdGlvbi4gV2hlbiB1c2luZyB0aGUgSFRUUCBwcm90b2NvbCwgdGhlcmUgYXJlIG1hbnkgZGlmZmVyZW50IHdheXMgYSBjbGllbnQgY2FuIHByb3ZpZGUgdGhvc2UgY3JlZGVudGlhbHMgdG8gdGhlIHNlcnZlciBhbmQgeW91IGNhbiBjb250cm9sIHdoaWNoIHdheSBsaWJjdXJsIHdpbGwgKGF0dGVtcHQgdG8pIHVzZSB0aGVtLiBUaGUgZGVmYXVsdCBIVFRQIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBpcyBjYWxsZWQgJ0Jhc2ljJywgd2hpY2ggaXMgc2VuZGluZyB0aGUgbmFtZSBhbmQgcGFzc3dvcmQgaW4gY2xlYXItdGV4dCBpbiB0aGUgSFRUUCByZXF1ZXN0LCBiYXNlNjQtZW5jb2RlZC4gVGhpcyBpcyBpbnNlY3VyZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5BdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIGxpYmN1cmwgY2FuIGJlIGJ1aWx0IHRvIHVzZTogQmFzaWMsIERpZ2VzdCwgTlRMTSwgTmVnb3RpYXRlLCBHU1MtTmVnb3RpYXRlIGFuZCBTUE5FR08uIFlvdSBjYW4gdGVsbCBsaWJjdXJsIHdoaWNoIG9uZSB0byB1c2Ugd2l0aCBDVVJMT1BUX0hUVFBBVVRIIGFzIGluOiAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwO2N1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfRElHRVNUKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj5BbmQgd2hlbiB5b3Ugc2VuZCBhdXRoZW50aWNhdGlvbiB0byBhIHByb3h5LCB5b3UgY2FuIGFsc28gc2V0IGF1dGhlbnRpY2F0aW9uIHR5cGUgdGhlIHNhbWUgd2F5IGJ1dCBpbnN0ZWFkIHdpdGggQ1VSTE9QVF9QUk9YWUFVVEg6IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX1BST1hZQVVUSCwgQ1VSTEFVVEhfTlRMTSk7IAorPHAgY2xhc3M9ImxldmVsMCI+Qm90aCB0aGVzZSBvcHRpb25zIGFsbG93IHlvdSB0byBzZXQgbXVsdGlwbGUgdHlwZXMgKGJ5IE9SaW5nIHRoZW0gdG9nZXRoZXIpLCB0byBtYWtlIGxpYmN1cmwgcGljayB0aGUgbW9zdCBzZWN1cmUgb25lIG91dCBvZiB0aGUgdHlwZXMgdGhlIHNlcnZlci9wcm94eSBjbGFpbXMgdG8gc3VwcG9ydC4gVGhpcyBtZXRob2QgZG9lcyBob3dldmVyIGFkZCBhIHJvdW5kLXRyaXAgc2luY2UgbGliY3VybCBtdXN0IGZpcnN0IGFzayB0aGUgc2VydmVyIHdoYXQgaXQgc3VwcG9ydHM6IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX0hUVFBBVVRILCAmbmJzcDtDVVJMQVVUSF9ESUdFU1R8Q1VSTEFVVEhfQkFTSUMpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPkZvciBjb252ZW5pZW5jZSwgeW91IGNhbiB1c2UgdGhlICdDVVJMQVVUSF9BTlknIGRlZmluZSAoaW5zdGVhZCBvZiBhIGxpc3Qgd2l0aCBzcGVjaWZpYyB0eXBlcykgd2hpY2ggYWxsb3dzIGxpYmN1cmwgdG8gdXNlIHdoYXRldmVyIG1ldGhvZCBpdCB3YW50cy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5XaGVuIGFza2luZyBmb3IgbXVsdGlwbGUgdHlwZXMsIGxpYmN1cmwgd2lsbCBwaWNrIHRoZSBhdmFpbGFibGUgb25lIGl0IGNvbnNpZGVycyAiYmVzdCIgaW4gaXRzIG93biBpbnRlcm5hbCBvcmRlciBvZiBwcmVmZXJlbmNlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkhUVFAiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkhUVFAgUE9TVGluZzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5XZSBnZXQgbWFueSBxdWVzdGlvbnMgcmVnYXJkaW5nIGhvdyB0byBpc3N1ZSBIVFRQIFBPU1RzIHdpdGggbGliY3VybCB0aGUgcHJvcGVyIHdheS4gVGhpcyBjaGFwdGVyIHdpbGwgdGh1cyBpbmNsdWRlIGV4YW1wbGVzIHVzaW5nIGJvdGggZGlmZmVyZW50IHZlcnNpb25zIG9mIEhUVFAgUE9TVCB0aGF0IGxpYmN1cmwgc3VwcG9ydHMuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGZpcnN0IHZlcnNpb24gaXMgdGhlIHNpbXBsZSBQT1NULCB0aGUgbW9zdCBjb21tb24gdmVyc2lvbiwgdGhhdCBtb3N0IEhUTUwgcGFnZXMgdXNpbmcgdGhlICZsdDtmb3JtJmd0OyB0YWcgdXNlcy4gV2UgcHJvdmlkZSBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgYW5kIHRlbGwgbGliY3VybCB0byBwb3N0IGl0IGFsbCB0byB0aGUgcmVtb3RlIHNpdGU6IAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDsgICBjaGFyICpkYXRhPSJuYW1lPWRhbmllbCZwcm9qZWN0PWN1cmwiOyAmbmJzcDsgICBjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfUE9TVEZJRUxEUywgZGF0YSk7ICZuYnNwOyAgIGN1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9VUkwsICI8YSBocmVmPSJodHRwOi8vcG9zdGhlcmUuY29tLyI+aHR0cDovL3Bvc3RoZXJlLmNvbS88L2E+Iik7IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7ICAgY3VybF9lYXN5X3BlcmZvcm0oZWFzeWhhbmRsZSk7IC8qIHBvc3QgYXdheSEgKi8gCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPlNpbXBsZSBlbm91Z2gsIGh1aD8gU2luY2UgeW91IHNldCB0aGUgUE9TVCBvcHRpb25zIHdpdGggdGhlIENVUkxPUFRfUE9TVEZJRUxEUywgdGhpcyBhdXRvbWF0aWNhbGx5IHN3aXRjaGVzIHRoZSBoYW5kbGUgdG8gdXNlIFBPU1QgaW4gdGhlIHVwY29taW5nIHJlcXVlc3QuIAorPHAgY2xhc3M9ImxldmVsMCI+T2ssIHNvIHdoYXQgaWYgeW91IHdhbnQgdG8gcG9zdCBiaW5hcnkgZGF0YSB0aGF0IGFsc28gcmVxdWlyZXMgeW91IHRvIHNldCB0aGUgQ29udGVudC1UeXBlOiBoZWFkZXIgb2YgdGhlIHBvc3Q/IFdlbGwsIGJpbmFyeSBwb3N0cyBwcmV2ZW50IGxpYmN1cmwgZnJvbSBiZWluZyBhYmxlIHRvIGRvIHN0cmxlbigpIG9uIHRoZSBkYXRhIHRvIGZpZ3VyZSBvdXQgdGhlIHNpemUsIHNvIHRoZXJlZm9yZSB3ZSBtdXN0IHRlbGwgbGliY3VybCB0aGUgc2l6ZSBvZiB0aGUgcG9zdCBkYXRhLiBTZXR0aW5nIGhlYWRlcnMgaW4gbGliY3VybCByZXF1ZXN0cyBhcmUgZG9uZSBpbiBhIGdlbmVyaWMgd2F5LCBieSBidWlsZGluZyBhIGxpc3Qgb2Ygb3VyIG93biBoZWFkZXJzIGFuZCB0aGVuIHBhc3NpbmcgdGhhdCBsaXN0IHRvIGxpYmN1cmwuIAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycz1OVUxMOyAmbmJzcDtoZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgIkNvbnRlbnQtVHlwZTogdGV4dC94bWwiKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDsvKiBwb3N0IGJpbmFyeSBkYXRhICovICZuYnNwO2N1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9QT1NURklFTERTLCBiaW5hcnlwdHIpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOy8qIHNldCB0aGUgc2l6ZSBvZiB0aGUgcG9zdGZpZWxkcyBkYXRhICovICZuYnNwO2N1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9QT1NURklFTERTSVpFLCAyM0wpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOy8qIHBhc3Mgb3VyIGxpc3Qgb2YgY3VzdG9tIG1hZGUgaGVhZGVycyAqLyAmbmJzcDtjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwgaGVhZGVycyk7IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Y3VybF9lYXN5X3BlcmZvcm0oZWFzeWhhbmRsZSk7IC8qIHBvc3QgYXdheSEgKi8gCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtjdXJsX3NsaXN0X2ZyZWVfYWxsKGhlYWRlcnMpOyAvKiBmcmVlIHRoZSBoZWFkZXIgbGlzdCAqLyAKKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+V2hpbGUgdGhlIHNpbXBsZSBleGFtcGxlcyBhYm92ZSBjb3ZlciB0aGUgbWFqb3JpdHkgb2YgYWxsIGNhc2VzIHdoZXJlIEhUVFAgUE9TVCBvcGVyYXRpb25zIGFyZSByZXF1aXJlZCwgdGhleSBkb24ndCBkbyBtdWx0aS1wYXJ0IGZvcm1wb3N0cy4gTXVsdGktcGFydCBmb3JtcG9zdHMgd2VyZSBpbnRyb2R1Y2VkIGFzIGEgYmV0dGVyIHdheSB0byBwb3N0IChwb3NzaWJseSBsYXJnZSkgYmluYXJ5IGRhdGEgYW5kIHdlcmUgZmlyc3QgZG9jdW1lbnRlZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTg2Ny50eHQiPlJGQyAxODY3PC9hPiAodXBkYXRlZCBpbiBSRkMyMzg4KS4gVGhleSdyZSBjYWxsZWQgbXVsdGktcGFydCBiZWNhdXNlIHRoZXkncmUgYnVpbHQgYnkgYSBjaGFpbiBvZiBwYXJ0cywgZWFjaCBwYXJ0IGJlaW5nIGEgc2luZ2xlIHVuaXQgb2YgZGF0YS4gRWFjaCBwYXJ0IGhhcyBpdHMgb3duIG5hbWUgYW5kIGNvbnRlbnRzLiBZb3UgY2FuIGluIGZhY3QgY3JlYXRlIGFuZCBwb3N0IGEgbXVsdGktcGFydCBmb3JtcG9zdCB3aXRoIHRoZSByZWd1bGFyIGxpYmN1cmwgUE9TVCBzdXBwb3J0IGRlc2NyaWJlZCBhYm92ZSwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSB0aGF0IHlvdSBidWlsZCBhIGZvcm1wb3N0IHlvdXJzZWxmIGFuZCBwcm92aWRlIHRvIGxpYmN1cmwuIFRvIG1ha2UgdGhhdCBlYXNpZXIsIGxpYmN1cmwgcHJvdmlkZXMgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZm9ybWFkZC5odG1sIj5jdXJsX2Zvcm1hZGQoMyk8L2E+LiBVc2luZyB0aGlzIGZ1bmN0aW9uLCB5b3UgYWRkIHBhcnRzIHRvIHRoZSBmb3JtLiBXaGVuIHlvdSdyZSBkb25lIGFkZGluZyBwYXJ0cywgeW91IHBvc3QgdGhlIHdob2xlIGZvcm0uIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGZvbGxvd2luZyBleGFtcGxlIHNldHMgdHdvIHNpbXBsZSB0ZXh0IHBhcnRzIHdpdGggcGxhaW4gdGV4dHVhbCBjb250ZW50cywgYW5kIHRoZW4gYSBmaWxlIHdpdGggYmluYXJ5IGNvbnRlbnRzIGFuZCB1cGxvYWRzIHRoZSB3aG9sZSB0aGluZy4gCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwO3N0cnVjdCBjdXJsX2h0dHBwb3N0ICpwb3N0PU5VTEw7ICZuYnNwO3N0cnVjdCBjdXJsX2h0dHBwb3N0ICpsYXN0PU5VTEw7ICZuYnNwO2N1cmxfZm9ybWFkZCgmcG9zdCwgJmxhc3QsICZuYnNwOyAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgIm5hbWUiLCAmbmJzcDsgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLCAiZGFuaWVsIiwgQ1VSTEZPUk1fRU5EKTsgJm5ic3A7Y3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgJm5ic3A7ICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlOQU1FLCAicHJvamVjdCIsICZuYnNwOyAgICAgICAgICAgICBDVVJMRk9STV9DT1BZQ09OVEVOVFMsICJjdXJsIiwgQ1VSTEZPUk1fRU5EKTsgJm5ic3A7Y3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgJm5ic3A7ICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlOQU1FLCAibG9nb3R5cGUtaW1hZ2UiLCAmbmJzcDsgICAgICAgICAgICAgQ1VSTEZPUk1fRklMRUNPTlRFTlQsICJjdXJsLnBuZyIsIENVUkxGT1JNX0VORCk7IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7LyogU2V0IHRoZSBmb3JtIGluZm8gKi8gJm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX0hUVFBQT1NULCBwb3N0KTsgCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtjdXJsX2Vhc3lfcGVyZm9ybShlYXN5aGFuZGxlKTsgLyogcG9zdCBhd2F5ISAqLyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOy8qIGZyZWUgdGhlIHBvc3QgZGF0YSBhZ2FpbiAqLyAmbmJzcDtjdXJsX2Zvcm1mcmVlKHBvc3QpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+TXVsdGlwYXJ0IGZvcm1wb3N0cyBhcmUgY2hhaW5zIG9mIHBhcnRzIHVzaW5nIE1JTUUtc3R5bGUgc2VwYXJhdG9ycyBhbmQgaGVhZGVycy4gSXQgbWVhbnMgdGhhdCBlYWNoIG9uZSBvZiB0aGVzZSBzZXBhcmF0ZSBwYXJ0cyBnZXQgYSBmZXcgaGVhZGVycyBzZXQgdGhhdCBkZXNjcmliZSB0aGUgaW5kaXZpZHVhbCBjb250ZW50LXR5cGUsIHNpemUgZXRjLiBUbyBlbmFibGUgeW91ciBhcHBsaWNhdGlvbiB0byBoYW5kaWNyYWZ0IHRoaXMgZm9ybXBvc3QgZXZlbiBtb3JlLCBsaWJjdXJsIGFsbG93cyB5b3UgdG8gc3VwcGx5IHlvdXIgb3duIHNldCBvZiBjdXN0b20gaGVhZGVycyB0byBzdWNoIGFuIGluZGl2aWR1YWwgZm9ybSBwYXJ0LiBZb3UgY2FuIG9mIGNvdXJzZSBzdXBwbHkgaGVhZGVycyB0byBhcyBtYW55IHBhcnRzIGFzIHlvdSBsaWtlLCBidXQgdGhpcyBsaXR0bGUgZXhhbXBsZSB3aWxsIHNob3cgaG93IHlvdSBzZXQgaGVhZGVycyB0byBvbmUgc3BlY2lmaWMgcGFydCB3aGVuIHlvdSBhZGQgdGhhdCB0byB0aGUgcG9zdCBoYW5kbGU6IAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycz1OVUxMOyAmbmJzcDtoZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgIkNvbnRlbnQtVHlwZTogdGV4dC94bWwiKTsgCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtjdXJsX2Zvcm1hZGQoJnBvc3QsICZsYXN0LCAmbmJzcDsgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJsb2dvdHlwZS1pbWFnZSIsICZuYnNwOyAgICAgICAgICAgICBDVVJMRk9STV9GSUxFQ09OVEVOVCwgImN1cmwueG1sIiwgJm5ic3A7ICAgICAgICAgICAgIENVUkxGT1JNX0NPTlRFTlRIRUFERVIsIGhlYWRlcnMsICZuYnNwOyAgICAgICAgICAgICBDVVJMRk9STV9FTkQpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwO2N1cmxfZWFzeV9wZXJmb3JtKGVhc3loYW5kbGUpOyAvKiBwb3N0IGF3YXkhICovIAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Y3VybF9mb3JtZnJlZShwb3N0KTsgLyogZnJlZSBwb3N0ICovICZuYnNwO2N1cmxfc2xpc3RfZnJlZV9hbGwoaGVhZGVycyk7IC8qIGZyZWUgY3VzdG9tIGhlYWRlciBsaXN0ICovIAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5TaW5jZSBhbGwgb3B0aW9ucyBvbiBhbiBlYXN5aGFuZGxlIGFyZSAic3RpY2t5IiwgdGhleSByZW1haW4gdGhlIHNhbWUgdW50aWwgY2hhbmdlZCBldmVuIGlmIHlvdSBkbyBjYWxsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfcGVyZm9ybS5odG1sIj5jdXJsX2Vhc3lfcGVyZm9ybSgzKTwvYT4sIHlvdSBtYXkgbmVlZCB0byB0ZWxsIGN1cmwgdG8gZ28gYmFjayB0byBhIHBsYWluIEdFVCByZXF1ZXN0IGlmIHlvdSBpbnRlbmQgdG8gZG8gb25lIGFzIHlvdXIgbmV4dCByZXF1ZXN0LiBZb3UgZm9yY2UgYW4gZWFzeWhhbmRsZSB0byBnbyBiYWNrIHRvIEdFVCBieSB1c2luZyB0aGUgQ1VSTE9QVF9IVFRQR0VUIG9wdGlvbjogCis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfSFRUUEdFVCwgMUwpOyAKKzxwIGNsYXNzPSJsZXZlbDAiPkp1c3Qgc2V0dGluZyBDVVJMT1BUX1BPU1RGSUVMRFMgdG8gIiIgb3IgTlVMTCB3aWxsICpub3QqIHN0b3AgbGliY3VybCBmcm9tIGRvaW5nIGEgUE9TVC4gSXQgd2lsbCBqdXN0IG1ha2UgaXQgUE9TVCB3aXRob3V0IGFueSBkYXRhIHRvIHNlbmQhIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iU2hvd2luZyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+U2hvd2luZyBQcm9ncmVzczwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPkZvciBoaXN0b3JpY2FsIGFuZCB0cmFkaXRpb25hbCByZWFzb25zLCBsaWJjdXJsIGhhcyBhIGJ1aWx0LWluIHByb2dyZXNzIG1ldGVyIHRoYXQgY2FuIGJlIHN3aXRjaGVkIG9uIGFuZCB0aGVuIG1ha2VzIGl0IHByZXNlbnQgYSBwcm9ncmVzcyBtZXRlciBpbiB5b3VyIHRlcm1pbmFsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlN3aXRjaCBvbiB0aGUgcHJvZ3Jlc3MgbWV0ZXIgYnksIG9kZGx5IGVub3VnaCwgc2V0dGluZyBDVVJMT1BUX05PUFJPR1JFU1MgdG8gemVyby4gVGhpcyBvcHRpb24gaXMgc2V0IHRvIDEgYnkgZGVmYXVsdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Gb3IgbW9zdCBhcHBsaWNhdGlvbnMgaG93ZXZlciwgdGhlIGJ1aWx0LWluIHByb2dyZXNzIG1ldGVyIGlzIHVzZWxlc3MgYW5kIHdoYXQgaW5zdGVhZCBpcyBpbnRlcmVzdGluZyBpcyB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGEgcHJvZ3Jlc3MgY2FsbGJhY2suIFRoZSBmdW5jdGlvbiBwb2ludGVyIHlvdSBwYXNzIHRvIGxpYmN1cmwgd2lsbCB0aGVuIGJlIGNhbGxlZCBvbiBpcnJlZ3VsYXIgaW50ZXJ2YWxzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgdHJhbnNmZXIuIAorPHAgY2xhc3M9ImxldmVsMCI+U2V0IHRoZSBwcm9ncmVzcyBjYWxsYmFjayBieSB1c2luZyBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04uIEFuZCBwYXNzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgbWF0Y2hlcyB0aGlzIHByb3RvdHlwZTogCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwO2ludCBwcm9ncmVzc19jYWxsYmFjayh2b2lkICpjbGllbnRwLCAmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRsdG90YWwsICZuYnNwOyAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGxub3csICZuYnNwOyAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdWx0b3RhbCwgJm5ic3A7ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB1bG5vdyk7IAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5JZiBhbnkgb2YgdGhlIGlucHV0IGFyZ3VtZW50cyBpcyB1bmtub3duLCBhIDAgd2lsbCBiZSBwYXNzZWQuIFRoZSBmaXJzdCBhcmd1bWVudCwgdGhlICdjbGllbnRwJyBpcyB0aGUgcG9pbnRlciB5b3UgcGFzcyB0byBsaWJjdXJsIHdpdGggQ1VSTE9QVF9QUk9HUkVTU0RBVEEuIGxpYmN1cmwgd29uJ3QgdG91Y2ggaXQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0ibGliY3VybCI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+bGliY3VybCB3aXRoIEMrKzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZXJlJ3MgYmFzaWNhbGx5IG9ubHkgb25lIHRoaW5nIHRvIGtlZXAgaW4gbWluZCB3aGVuIHVzaW5nIEMrKyBpbnN0ZWFkIG9mIEMgd2hlbiBpbnRlcmZhY2luZyBsaWJjdXJsOiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBjYWxsYmFja3MgQ0FOTk9UIGJlIG5vbi1zdGF0aWMgY2xhc3MgbWVtYmVyIGZ1bmN0aW9ucyAKKzxwIGNsYXNzPSJsZXZlbDAiPkV4YW1wbGUgQysrIGNvZGU6IAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5jbGFzcyBBQ2xhc3MgeyAmbmJzcDsgICBzdGF0aWMgc2l6ZV90IHdyaXRlX2RhdGEodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCAmbmJzcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3VycG9pbnRlcikgJm5ic3A7ICAgeyAmbmJzcDsgICAgIC8qIGRvIHdoYXQgeW91IHdhbnQgd2l0aCB0aGUgZGF0YSAqLyAmbmJzcDsgICB9ICZuYnNwO30gCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IlByb3hpZXMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlByb3hpZXM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5XaGF0ICJwcm94eSIgbWVhbnMgYWNjb3JkaW5nIHRvIE1lcnJpYW0tV2Vic3RlcjogImEgcGVyc29uIGF1dGhvcml6ZWQgdG8gYWN0IGZvciBhbm90aGVyIiBidXQgYWxzbyAidGhlIGFnZW5jeSwgZnVuY3Rpb24sIG9yIG9mZmljZSBvZiBhIGRlcHV0eSB3aG8gYWN0cyBhcyBhIHN1YnN0aXR1dGUgZm9yIGFub3RoZXIiLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlByb3hpZXMgYXJlIGV4Y2VlZGluZ2x5IGNvbW1vbiB0aGVzZSBkYXlzLiBDb21wYW5pZXMgb2Z0ZW4gb25seSBvZmZlciBJbnRlcm5ldCBhY2Nlc3MgdG8gZW1wbG95ZWVzIHRocm91Z2ggdGhlaXIgcHJveGllcy4gTmV0d29yayBjbGllbnRzIG9yIHVzZXItYWdlbnRzIGFzayB0aGUgcHJveHkgZm9yIGRvY3VtZW50cywgdGhlIHByb3h5IGRvZXMgdGhlIGFjdHVhbCByZXF1ZXN0IGFuZCB0aGVuIGl0IHJldHVybnMgdGhlbS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5saWJjdXJsIHN1cHBvcnRzIFNPQ0tTIGFuZCBIVFRQIHByb3hpZXMuIFdoZW4gYSBnaXZlbiBVUkwgaXMgd2FudGVkLCBsaWJjdXJsIHdpbGwgYXNrIHRoZSBwcm94eSBmb3IgaXQgaW5zdGVhZCBvZiB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgYWN0dWFsIGhvc3QgaWRlbnRpZmllZCBpbiB0aGUgVVJMLiAKKzxwIGNsYXNzPSJsZXZlbDAiPklmIHlvdSdyZSB1c2luZyBhIFNPQ0tTIHByb3h5LCB5b3UgbWF5IGZpbmQgdGhhdCBsaWJjdXJsIGRvZXNuJ3QgcXVpdGUgc3VwcG9ydCBhbGwgb3BlcmF0aW9ucyB0aHJvdWdoIGl0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPkZvciBIVFRQIHByb3hpZXM6IHRoZSBmYWN0IHRoYXQgdGhlIHByb3h5IGlzIGEgSFRUUCBwcm94eSBwdXRzIGNlcnRhaW4gcmVzdHJpY3Rpb25zIG9uIHdoYXQgY2FuIGFjdHVhbGx5IGhhcHBlbi4gQSByZXF1ZXN0ZWQgVVJMIHRoYXQgbWlnaHQgbm90IGJlIGEgSFRUUCBVUkwgd2lsbCBiZSBzdGlsbCBiZSBwYXNzZWQgdG8gdGhlIEhUVFAgcHJveHkgdG8gZGVsaXZlciBiYWNrIHRvIGxpYmN1cmwuIFRoaXMgaGFwcGVucyB0cmFuc3BhcmVudGx5LCBhbmQgYW4gYXBwbGljYXRpb24gbWF5IG5vdCBuZWVkIHRvIGtub3cuIEkgc2F5ICJtYXkiLCBiZWNhdXNlIGF0IHRpbWVzIGl0IGlzIHZlcnkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCBhbGwgb3BlcmF0aW9ucyBvdmVyIGEgSFRUUCBwcm94eSB1c2UgdGhlIEhUVFAgcHJvdG9jb2wuIEZvciBleGFtcGxlLCB5b3UgY2FuJ3QgaW52b2tlIHlvdXIgb3duIGN1c3RvbSBGVFAgY29tbWFuZHMgb3IgZXZlbiBwcm9wZXIgRlRQIGRpcmVjdG9yeSBsaXN0aW5ncy4gCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IlByb3h5Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPlByb3h5IE9wdGlvbnM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwxIj5UbyB0ZWxsIGxpYmN1cmwgdG8gdXNlIGEgcHJveHkgYXQgYSBnaXZlbiBwb3J0IG51bWJlcjogCis8cCBjbGFzcz0ibGV2ZWwxIj4mbmJzcDtjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfUFJPWFksICJwcm94eS1ob3N0LmNvbTo4MDgwIik7IAorPHAgY2xhc3M9ImxldmVsMSI+U29tZSBwcm94aWVzIHJlcXVpcmUgdXNlciBhdXRoZW50aWNhdGlvbiBiZWZvcmUgYWxsb3dpbmcgYSByZXF1ZXN0LCBhbmQgeW91IHBhc3MgdGhhdCBpbmZvcm1hdGlvbiBzaW1pbGFyIHRvIHRoaXM6IAorPHAgY2xhc3M9ImxldmVsMSI+Jm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX1BST1hZVVNFUlBXRCwgInVzZXI6cGFzc3dvcmQiKTsgCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3Ugd2FudCB0bywgeW91IGNhbiBzcGVjaWZ5IHRoZSBob3N0IG5hbWUgb25seSBpbiB0aGUgQ1VSTE9QVF9QUk9YWSBvcHRpb24sIGFuZCBzZXQgdGhlIHBvcnQgbnVtYmVyIHNlcGFyYXRlbHkgd2l0aCBDVVJMT1BUX1BST1hZUE9SVC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UZWxsIGxpYmN1cmwgd2hhdCBraW5kIG9mIHByb3h5IGl0IGlzIHdpdGggQ1VSTE9QVF9QUk9YWVRZUEUgKGlmIG5vdCwgaXQgd2lsbCBkZWZhdWx0IHRvIGFzc3VtZSBhIEhUVFAgcHJveHkpOiAKKzxwIGNsYXNzPSJsZXZlbDEiPiZuYnNwO2N1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9QUk9YWVRZUEUsIENVUkxQUk9YWV9TT0NLUzQpOyAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iRW52aXJvbm1lbnQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMSI+bGliY3VybCBhdXRvbWF0aWNhbGx5IGNoZWNrcyBhbmQgdXNlcyBhIHNldCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8ga25vdyB3aGF0IHByb3hpZXMgdG8gdXNlIGZvciBjZXJ0YWluIHByb3RvY29scy4gVGhlIG5hbWVzIG9mIHRoZSB2YXJpYWJsZXMgYXJlIGZvbGxvd2luZyBhbiBhbmNpZW50IGRlIGZhY3RvIHN0YW5kYXJkIGFuZCBhcmUgYnVpbHQgdXAgYXMgIltwcm90b2NvbF1fcHJveHkiIChub3RlIHRoZSBsb3dlciBjYXNpbmcpLiBXaGljaCBtYWtlcyB0aGUgdmFyaWFibGUgJ2h0dHBfcHJveHknIGNoZWNrZWQgZm9yIGEgbmFtZSBvZiBhIHByb3h5IHRvIHVzZSB3aGVuIHRoZSBpbnB1dCBVUkwgaXMgSFRUUC4gRm9sbG93aW5nIHRoZSBzYW1lIHJ1bGUsIHRoZSB2YXJpYWJsZSBuYW1lZCAnZnRwX3Byb3h5JyBpcyBjaGVja2VkIGZvciBGVFAgVVJMcy4gQWdhaW4sIHRoZSBwcm94aWVzIGFyZSBhbHdheXMgSFRUUCBwcm94aWVzLCB0aGUgZGlmZmVyZW50IG5hbWVzIG9mIHRoZSB2YXJpYWJsZXMgc2ltcGx5IGFsbG93cyBkaWZmZXJlbnQgSFRUUCBwcm94aWVzIHRvIGJlIHVzZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRlbnRzIHNob3VsZCBiZSBpbiB0aGUgZm9ybWF0ICJbcHJvdG9jb2w6Ly9dW3VzZXI6cGFzc3dvcmRAXW1hY2hpbmVbOnBvcnRdIi4gV2hlcmUgdGhlIHByb3RvY29sOi8vIHBhcnQgaXMgc2ltcGx5IGlnbm9yZWQgaWYgcHJlc2VudCAoc28gPGEgaHJlZj0iaHR0cDovL3Byb3h5Ij5odHRwOi8vcHJveHk8L2E+IGFuZCBibHVlcms6Ly9wcm94eSB3aWxsIGRvIHRoZSBzYW1lKSBhbmQgdGhlIG9wdGlvbmFsIHBvcnQgbnVtYmVyIHNwZWNpZmllcyBvbiB3aGljaCBwb3J0IHRoZSBwcm94eSBvcGVyYXRlcyBvbiB0aGUgaG9zdC4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGludGVybmFsIGRlZmF1bHQgcG9ydCBudW1iZXIgd2lsbCBiZSB1c2VkIGFuZCB0aGF0IGlzIG1vc3QgbGlrZWx5ICpub3QqIHRoZSBvbmUgeW91IHdvdWxkIGxpa2UgaXQgdG8gYmUuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlcmUgYXJlIHR3byBzcGVjaWFsIGVudmlyb25tZW50IHZhcmlhYmxlcy4gJ2FsbF9wcm94eScgaXMgd2hhdCBzZXRzIHByb3h5IGZvciBhbnkgVVJMIGluIGNhc2UgdGhlIHByb3RvY29sIHNwZWNpZmljIHZhcmlhYmxlIHdhc24ndCBzZXQsIGFuZCAnbm9fcHJveHknIGRlZmluZXMgYSBsaXN0IG9mIGhvc3RzIHRoYXQgc2hvdWxkIG5vdCB1c2UgYSBwcm94eSBldmVuIHRob3VnaCBhIHZhcmlhYmxlIG1heSBzYXkgc28uIElmICdub19wcm94eScgaXMgYSBwbGFpbiBhc3RlcmlzayAoIioiKSBpdCBtYXRjaGVzIGFsbCBob3N0cy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UbyBleHBsaWNpdGx5IGRpc2FibGUgbGliY3VybCdzIGNoZWNraW5nIGZvciBhbmQgdXNpbmcgdGhlIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlcywgc2V0IHRoZSBwcm94eSBuYW1lIHRvICIiIC0gYW4gZW1wdHkgc3RyaW5nIC0gd2l0aCBDVVJMT1BUX1BST1hZLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IlNTTCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5TU0wgYW5kIFByb3hpZXM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwxIj5TU0wgaXMgZm9yIHNlY3VyZSBwb2ludC10by1wb2ludCBjb25uZWN0aW9ucy4gVGhpcyBpbnZvbHZlcyBzdHJvbmcgZW5jcnlwdGlvbiBhbmQgc2ltaWxhciB0aGluZ3MsIHdoaWNoIGVmZmVjdGl2ZWx5IG1ha2VzIGl0IGltcG9zc2libGUgZm9yIGEgcHJveHkgdG8gb3BlcmF0ZSBhcyBhICJtYW4gaW4gYmV0d2VlbiIgd2hpY2ggdGhlIHByb3h5J3MgdGFzayBpcywgYXMgcHJldmlvdXNseSBkaXNjdXNzZWQuIEluc3RlYWQsIHRoZSBvbmx5IHdheSB0byBoYXZlIFNTTCB3b3JrIG92ZXIgYSBIVFRQIHByb3h5IGlzIHRvIGFzayB0aGUgcHJveHkgdG8gdHVubmVsIHRyb3VnaCBldmVyeXRoaW5nIHdpdGhvdXQgYmVpbmcgYWJsZSB0byBjaGVjayBvciBmaWRkbGUgd2l0aCB0aGUgdHJhZmZpYy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5PcGVuaW5nIGFuIFNTTCBjb25uZWN0aW9uIG92ZXIgYSBIVFRQIHByb3h5IGlzIHRoZXJlZm9yIGEgbWF0dGVyIG9mIGFza2luZyB0aGUgcHJveHkgZm9yIGEgc3RyYWlnaHQgY29ubmVjdGlvbiB0byB0aGUgdGFyZ2V0IGhvc3Qgb24gYSBzcGVjaWZpZWQgcG9ydC4gVGhpcyBpcyBtYWRlIHdpdGggdGhlIEhUVFAgcmVxdWVzdCBDT05ORUNULiAoInBsZWFzZSBtciBwcm94eSwgY29ubmVjdCBtZSB0byB0aGF0IHJlbW90ZSBob3N0IikuIAorPHAgY2xhc3M9ImxldmVsMSI+QmVjYXVzZSBvZiB0aGUgbmF0dXJlIG9mIHRoaXMgb3BlcmF0aW9uLCB3aGVyZSB0aGUgcHJveHkgaGFzIG5vIGlkZWEgd2hhdCBraW5kIG9mIGRhdGEgdGhhdCBpcyBwYXNzZWQgaW4gYW5kIG91dCB0aHJvdWdoIHRoaXMgdHVubmVsLCB0aGlzIGJyZWFrcyBzb21lIG9mIHRoZSB2ZXJ5IGZldyBhZHZhbnRhZ2VzIHRoYXQgY29tZSBmcm9tIHVzaW5nIGEgcHJveHksIHN1Y2ggYXMgY2FjaGluZy4gIE1hbnkgb3JnYW5pemF0aW9ucyBwcmV2ZW50IHRoaXMga2luZCBvZiB0dW5uZWxpbmcgdG8gb3RoZXIgZGVzdGluYXRpb24gcG9ydCBudW1iZXJzIHRoYW4gNDQzICh3aGljaCBpcyB0aGUgZGVmYXVsdCBIVFRQUyBwb3J0IG51bWJlcikuIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJUdW5uZWxpbmciPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+VHVubmVsaW5nIFRocm91Z2ggUHJveHk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QXMgZXhwbGFpbmVkIGFib3ZlLCB0dW5uZWxpbmcgaXMgcmVxdWlyZWQgZm9yIFNTTCB0byB3b3JrIGFuZCBvZnRlbiBldmVuIHJlc3RyaWN0ZWQgdG8gdGhlIG9wZXJhdGlvbiBpbnRlbmRlZCBmb3IgU1NMOyBIVFRQUy4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIGlzIGhvd2V2ZXIgbm90IHRoZSBvbmx5IHRpbWUgcHJveHktdHVubmVsaW5nIG1pZ2h0IG9mZmVyIGJlbmVmaXRzIHRvIHlvdSBvciB5b3VyIGFwcGxpY2F0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFzIHR1bm5lbGluZyBvcGVucyBhIGRpcmVjdCBjb25uZWN0aW9uIGZyb20geW91ciBhcHBsaWNhdGlvbiB0byB0aGUgcmVtb3RlIG1hY2hpbmUsIGl0IHN1ZGRlbmx5IGFsc28gcmUtaW50cm9kdWNlcyB0aGUgYWJpbGl0eSB0byBkbyBub24tSFRUUCBvcGVyYXRpb25zIG92ZXIgYSBIVFRQIHByb3h5LiBZb3UgY2FuIGluIGZhY3QgdXNlIHRoaW5ncyBzdWNoIGFzIEZUUCB1cGxvYWQgb3IgRlRQIGN1c3RvbSBjb21tYW5kcyB0aGlzIHdheS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BZ2FpbiwgdGhpcyBpcyBvZnRlbiBwcmV2ZW50ZWQgYnkgdGhlIGFkbWluaXN0cmF0b3JzIG9mIHByb3hpZXMgYW5kIGlzIHJhcmVseSBhbGxvd2VkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRlbGwgbGliY3VybCB0byB1c2UgcHJveHkgdHVubmVsaW5nIGxpa2UgdGhpczogCis8cCBjbGFzcz0ibGV2ZWwxIj4mbmJzcDtjdXJsX2Vhc3lfc2V0b3B0KGVhc3loYW5kbGUsIENVUkxPUFRfSFRUUFBST1hZVFVOTkVMLCAxTCk7IAorPHAgY2xhc3M9ImxldmVsMSI+SW4gZmFjdCwgdGhlcmUgbWlnaHQgZXZlbiBiZSB0aW1lcyB3aGVuIHlvdSB3YW50IHRvIGRvIHBsYWluIEhUVFAgb3BlcmF0aW9ucyB1c2luZyBhIHR1bm5lbCBsaWtlIHRoaXMsIGFzIGl0IHRoZW4gZW5hYmxlcyB5b3UgdG8gb3BlcmF0ZSBvbiB0aGUgcmVtb3RlIHNlcnZlciBpbnN0ZWFkIG9mIGFza2luZyB0aGUgcHJveHkgdG8gZG8gc28uIGxpYmN1cmwgd2lsbCBub3Qgc3RhbmQgaW4gdGhlIHdheSBmb3Igc3VjaCBpbm5vdmF0aXZlIGFjdGlvbnMgZWl0aGVyISAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iUHJveHkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+UHJveHkgQXV0by1Db25maWc8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwxIj5OZXRzY2FwZSBmaXJzdCBjYW1lIHVwIHdpdGggdGhpcy4gSXQgaXMgYmFzaWNhbGx5IGEgd2ViIHBhZ2UgKHVzdWFsbHkgdXNpbmcgYSAucGFjIGV4dGVuc2lvbikgd2l0aCBhIEphdmFzY3JpcHQgdGhhdCB3aGVuIGV4ZWN1dGVkIGJ5IHRoZSBicm93c2VyIHdpdGggdGhlIHJlcXVlc3RlZCBVUkwgYXMgaW5wdXQsIHJldHVybnMgaW5mb3JtYXRpb24gdG8gdGhlIGJyb3dzZXIgb24gaG93IHRvIGNvbm5lY3QgdG8gdGhlIFVSTC4gVGhlIHJldHVybmVkIGluZm9ybWF0aW9uIG1pZ2h0IGJlICJESVJFQ1QiICh3aGljaCBtZWFucyBubyBwcm94eSBzaG91bGQgYmUgdXNlZCksICJQUk9YWSBob3N0OnBvcnQiICh0byB0ZWxsIHRoZSBicm93c2VyIHdoZXJlIHRoZSBwcm94eSBmb3IgdGhpcyBwYXJ0aWN1bGFyIFVSTCBpcykgb3IgIlNPQ0tTIGhvc3Q6cG9ydCIgKHRvIGRpcmVjdCB0aGUgYnJvd3NlciB0byBhIFNPQ0tTIHByb3h5KS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5saWJjdXJsIGhhcyBubyBtZWFucyB0byBpbnRlcnByZXQgb3IgZXZhbHVhdGUgSmF2YXNjcmlwdCBhbmQgdGh1cyBpdCBkb2Vzbid0IHN1cHBvcnQgdGhpcy4gSWYgeW91IGdldCB5b3Vyc2VsZiBpbiBhIHBvc2l0aW9uIHdoZXJlIHlvdSBmYWNlIHRoaXMgbmFzdHkgaW52ZW50aW9uLCB0aGUgZm9sbG93aW5nIGFkdmljZSBoYXZlIGJlZW4gbWVudGlvbmVkIGFuZCB1c2VkIGluIHRoZSBwYXN0OiAKKzxwIGNsYXNzPSJsZXZlbDEiPi0gRGVwZW5kaW5nIG9uIHRoZSBKYXZhc2NyaXB0IGNvbXBsZXhpdHksIHdyaXRlIHVwIGEgc2NyaXB0IHRoYXQgdHJhbnNsYXRlcyBpdCB0byBhbm90aGVyIGxhbmd1YWdlIGFuZCBleGVjdXRlIHRoYXQuIAorPHAgY2xhc3M9ImxldmVsMSI+LSBSZWFkIHRoZSBKYXZhc2NyaXB0IGNvZGUgYW5kIHJld3JpdGUgdGhlIHNhbWUgbG9naWMgaW4gYW5vdGhlciBsYW5ndWFnZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj4tIEltcGxlbWVudCBhIEphdmFzY3JpcHQgaW50ZXJwcmV0ZXI7IHBlb3BsZSBoYXZlIHN1Y2Nlc3NmdWxseSB1c2VkIHRoZSBNb3ppbGxhIEphdmFzY3JpcHQgZW5naW5lIGluIHRoZSBwYXN0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPi0gQXNrIHlvdXIgYWRtaW5zIHRvIHN0b3AgdGhpcywgZm9yIGEgc3RhdGljIHByb3h5IHNldHVwIG9yIHNpbWlsYXIuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iUGVyc2lzdGVuY2UiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlBlcnNpc3RlbmNlIElzIFRoZSBXYXkgdG8gSGFwcGluZXNzPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+UmUtY3ljbGluZyB0aGUgc2FtZSBlYXN5IGhhbmRsZSBzZXZlcmFsIHRpbWVzIHdoZW4gZG9pbmcgbXVsdGlwbGUgcmVxdWVzdHMgaXMgdGhlIHdheSB0byBnby4gCis8cCBjbGFzcz0ibGV2ZWwwIj5BZnRlciBlYWNoIHNpbmdsZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3BlcmZvcm0uaHRtbCI+Y3VybF9lYXN5X3BlcmZvcm0oMyk8L2E+IG9wZXJhdGlvbiwgbGliY3VybCB3aWxsIGtlZXAgdGhlIGNvbm5lY3Rpb24gYWxpdmUgYW5kIG9wZW4uIEEgc3Vic2VxdWVudCByZXF1ZXN0IHVzaW5nIHRoZSBzYW1lIGVhc3kgaGFuZGxlIHRvIHRoZSBzYW1lIGhvc3QgbWlnaHQganVzdCBiZSBhYmxlIHRvIHVzZSB0aGUgYWxyZWFkeSBvcGVuIGNvbm5lY3Rpb24hIFRoaXMgcmVkdWNlcyBuZXR3b3JrIGltcGFjdCBhIGxvdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5FdmVuIGlmIHRoZSBjb25uZWN0aW9uIGlzIGRyb3BwZWQsIGFsbCBjb25uZWN0aW9ucyBpbnZvbHZpbmcgU1NMIHRvIHRoZSBzYW1lIGhvc3QgYWdhaW4sIHdpbGwgYmVuZWZpdCBmcm9tIGxpYmN1cmwncyBzZXNzaW9uIElEIGNhY2hlIHRoYXQgZHJhc3RpY2FsbHkgcmVkdWNlcyByZS1jb25uZWN0aW9uIHRpbWUuIAorPHAgY2xhc3M9ImxldmVsMCI+RlRQIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGtlcHQgYWxpdmUgc2F2ZSBhIGxvdCBvZiB0aW1lLCBhcyB0aGUgY29tbWFuZC0gcmVzcG9uc2Ugcm91bmQtdHJpcHMgYXJlIHNraXBwZWQsIGFuZCBhbHNvIHlvdSBkb24ndCByaXNrIGdldHRpbmcgYmxvY2tlZCB3aXRob3V0IHBlcm1pc3Npb24gdG8gbG9naW4gYWdhaW4gbGlrZSBvbiBtYW55IEZUUCBzZXJ2ZXJzIG9ubHkgYWxsb3dpbmcgTiBwZXJzb25zIHRvIGJlIGxvZ2dlZCBpbiBhdCB0aGUgc2FtZSB0aW1lLiAKKzxwIGNsYXNzPSJsZXZlbDAiPmxpYmN1cmwgY2FjaGVzIEROUyBuYW1lIHJlc29sdmluZyByZXN1bHRzLCB0byBtYWtlIGxvb2t1cHMgb2YgYSBwcmV2aW91c2x5IGxvb2tlZCB1cCBuYW1lIGEgbG90IGZhc3Rlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj5PdGhlciBpbnRlcmVzdGluZyBkZXRhaWxzIHRoYXQgaW1wcm92ZSBwZXJmb3JtYW5jZSBmb3Igc3Vic2VxdWVudCByZXF1ZXN0cyBtYXkgYWxzbyBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPkVhY2ggZWFzeSBoYW5kbGUgd2lsbCBhdHRlbXB0IHRvIGtlZXAgdGhlIGxhc3QgZmV3IGNvbm5lY3Rpb25zIGFsaXZlIGZvciBhIHdoaWxlIGluIGNhc2UgdGhleSBhcmUgdG8gYmUgdXNlZCBhZ2Fpbi4gWW91IGNhbiBzZXQgdGhlIHNpemUgb2YgdGhpcyAiY2FjaGUiIHdpdGggdGhlIENVUkxPUFRfTUFYQ09OTkVDVFMgb3B0aW9uLiBEZWZhdWx0IGlzIDUuIFRoZXJlIGlzIHZlcnkgc2VsZG9tIGFueSBwb2ludCBpbiBjaGFuZ2luZyB0aGlzIHZhbHVlLCBhbmQgaWYgeW91IHRoaW5rIG9mIGNoYW5naW5nIHRoaXMgaXQgaXMgb2Z0ZW4ganVzdCBhIG1hdHRlciBvZiB0aGlua2luZyBhZ2Fpbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UbyBmb3JjZSB5b3VyIHVwY29taW5nIHJlcXVlc3QgdG8gbm90IHVzZSBhbiBhbHJlYWR5IGV4aXN0aW5nIGNvbm5lY3Rpb24gKGl0IHdpbGwgZXZlbiBjbG9zZSBvbmUgZmlyc3QgaWYgdGhlcmUgaGFwcGVucyB0byBiZSBvbmUgYWxpdmUgdG8gdGhlIHNhbWUgaG9zdCB5b3UncmUgYWJvdXQgdG8gb3BlcmF0ZSBvbiksIHlvdSBjYW4gZG8gdGhhdCBieSBzZXR0aW5nIENVUkxPUFRfRlJFU0hfQ09OTkVDVCB0byAxLiBJbiBhIHNpbWlsYXIgc3Bpcml0LCB5b3UgY2FuIGFsc28gZm9yYmlkIHRoZSB1cGNvbWluZyByZXF1ZXN0IHRvIGJlICJseWluZyIgYXJvdW5kIGFuZCBwb3NzaWJseSBnZXQgcmUtdXNlZCBhZnRlciB0aGUgcmVxdWVzdCBieSBzZXR0aW5nIENVUkxPUFRfRk9SQklEX1JFVVNFIHRvIDEuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iSFRUUCI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+SFRUUCBIZWFkZXJzIFVzZWQgYnkgbGliY3VybDwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5XaGVuIHlvdSB1c2UgbGliY3VybCB0byBkbyBIVFRQIHJlcXVlc3RzLCBpdCdsbCBwYXNzIGFsb25nIGEgc2VyaWVzIG9mIGhlYWRlcnMgYXV0b21hdGljYWxseS4gSXQgbWlnaHQgYmUgZ29vZCBmb3IgeW91IHRvIGtub3cgYW5kIHVuZGVyc3RhbmQgdGhlc2UuIFlvdSBjYW4gcmVwbGFjZSBvciByZW1vdmUgdGhlbSBieSB1c2luZyB0aGUgQ1VSTE9QVF9IVFRQSEVBREVSIG9wdGlvbi4gCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ikhvc3QiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+SG9zdDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGlzIGhlYWRlciBpcyByZXF1aXJlZCBieSBIVFRQIDEuMSBhbmQgZXZlbiBtYW55IDEuMCBzZXJ2ZXJzIGFuZCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIHNlcnZlciB3ZSB3YW50IHRvIHRhbGsgdG8uIFRoaXMgaW5jbHVkZXMgdGhlIHBvcnQgbnVtYmVyIGlmIGFueXRoaW5nIGJ1dCBkZWZhdWx0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQWNjZXB0Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkFjY2VwdDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4iKi8qIi4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkV4cGVjdCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5FeHBlY3Q8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+V2hlbiBkb2luZyBQT1NUIHJlcXVlc3RzLCBsaWJjdXJsIHNldHMgdGhpcyBoZWFkZXIgdG8gIjEwMC1jb250aW51ZSIgdG8gYXNrIHRoZSBzZXJ2ZXIgZm9yIGFuICJPSyIgbWVzc2FnZSBiZWZvcmUgaXQgcHJvY2VlZHMgd2l0aCBzZW5kaW5nIHRoZSBkYXRhIHBhcnQgb2YgdGhlIHBvc3QuIElmIHRoZSBQT1NUZWQgZGF0YSBhbW91bnQgaXMgZGVlbWVkICJzbWFsbCIsIGxpYmN1cmwgd2lsbCBub3QgdXNlIHRoaXMgaGVhZGVyLiAKKzxwIGNsYXNzPSJsZXZlbDEiPjxhIG5hbWU9IkN1c3RvbWl6aW5nIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5DdXN0b21pemluZyBPcGVyYXRpb25zPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZXJlIGlzIGFuIG9uZ29pbmcgZGV2ZWxvcG1lbnQgdG9kYXkgd2hlcmUgbW9yZSBhbmQgbW9yZSBwcm90b2NvbHMgYXJlIGJ1aWx0IHVwb24gSFRUUCBmb3IgdHJhbnNwb3J0LiBUaGlzIGhhcyBvYnZpb3VzIGJlbmVmaXRzIGFzIEhUVFAgaXMgYSB0ZXN0ZWQgYW5kIHJlbGlhYmxlIHByb3RvY29sIHRoYXQgaXMgd2lkZWx5IGRlcGxveWVkIGFuZCBoYXMgZXhjZWxsZW50IHByb3h5LXN1cHBvcnQuIAorPHAgY2xhc3M9ImxldmVsMCI+V2hlbiB5b3UgdXNlIG9uZSBvZiB0aGVzZSBwcm90b2NvbHMsIGFuZCBldmVuIHdoZW4gZG9pbmcgb3RoZXIga2luZHMgb2YgcHJvZ3JhbW1pbmcgeW91IG1heSBuZWVkIHRvIGNoYW5nZSB0aGUgdHJhZGl0aW9uYWwgSFRUUCAob3IgRlRQIG9yLi4uKSBtYW5uZXJzLiBZb3UgbWF5IG5lZWQgdG8gY2hhbmdlIHdvcmRzLCBoZWFkZXJzIG9yIHZhcmlvdXMgZGF0YS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5saWJjdXJsIGlzIHlvdXIgZnJpZW5kIGhlcmUgdG9vLiAKKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ1VTVE9NUkVRVUVTVCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5DVVNUT01SRVFVRVNUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIGp1c3QgY2hhbmdpbmcgdGhlIGFjdHVhbCBIVFRQIHJlcXVlc3Qga2V5d29yZCBpcyB3aGF0IHlvdSB3YW50LCBsaWtlIHdoZW4gR0VULCBIRUFEIG9yIFBPU1QgaXMgbm90IGdvb2QgZW5vdWdoIGZvciB5b3UsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCBpcyB0aGVyZSBmb3IgeW91LiBJdCBpcyB2ZXJ5IHNpbXBsZSB0byB1c2U6IAorPHAgY2xhc3M9ImxldmVsMSI+Jm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsICJNWU9XTlJFUVVFU1QiKTsgCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIHVzaW5nIHRoZSBjdXN0b20gcmVxdWVzdCwgeW91IGNoYW5nZSB0aGUgcmVxdWVzdCBrZXl3b3JkIG9mIHRoZSBhY3R1YWwgcmVxdWVzdCB5b3UgYXJlIHBlcmZvcm1pbmcuIFRodXMsIGJ5IGRlZmF1bHQgeW91IG1ha2UgYSBHRVQgcmVxdWVzdCBidXQgeW91IGNhbiBhbHNvIG1ha2UgYSBQT1NUIG9wZXJhdGlvbiAoYXMgZGVzY3JpYmVkIGJlZm9yZSkgYW5kIHRoZW4gcmVwbGFjZSB0aGUgUE9TVCBrZXl3b3JkIGlmIHlvdSB3YW50IHRvLiBZb3UncmUgdGhlIGJvc3MuIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJNb2RpZnkiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+TW9kaWZ5IEhlYWRlcnM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+SFRUUC1saWtlIHByb3RvY29scyBwYXNzIGEgc2VyaWVzIG9mIGhlYWRlcnMgdG8gdGhlIHNlcnZlciB3aGVuIGRvaW5nIHRoZSByZXF1ZXN0LCBhbmQgeW91J3JlIGZyZWUgdG8gcGFzcyBhbnkgYW1vdW50IG9mIGV4dHJhIGhlYWRlcnMgdGhhdCB5b3UgdGhpbmsgZml0LiBBZGRpbmcgaGVhZGVycyBpcyB0aGlzIGVhc3k6IAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwxIj4mbmJzcDtzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycz1OVUxMOyAvKiBpbml0IHRvIE5VTEwgaXMgaW1wb3J0YW50ICovIAorPHAgY2xhc3M9ImxldmVsMSI+Jm5ic3A7aGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsICJIZXktc2VydmVyLWhleTogaG93IGFyZSB5b3U/Iik7ICZuYnNwO2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCAiWC1zaWxseS1jb250ZW50OiB5ZXMiKTsgCis8cCBjbGFzcz0ibGV2ZWwxIj4mbmJzcDsvKiBwYXNzIG91ciBsaXN0IG9mIGN1c3RvbSBtYWRlIGhlYWRlcnMgKi8gJm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcnMpOyAKKzxwIGNsYXNzPSJsZXZlbDEiPiZuYnNwO2N1cmxfZWFzeV9wZXJmb3JtKGVhc3loYW5kbGUpOyAvKiB0cmFuc2ZlciBodHRwICovIAorPHAgY2xhc3M9ImxldmVsMSI+Jm5ic3A7Y3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsgLyogZnJlZSB0aGUgaGVhZGVyIGxpc3QgKi8gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDEiPi4uLiBhbmQgaWYgeW91IHRoaW5rIHNvbWUgb2YgdGhlIGludGVybmFsbHkgZ2VuZXJhdGVkIGhlYWRlcnMsIHN1Y2ggYXMgQWNjZXB0OiBvciBIb3N0OiBkb24ndCBjb250YWluIHRoZSBkYXRhIHlvdSB3YW50IHRoZW0gdG8gY29udGFpbiwgeW91IGNhbiByZXBsYWNlIHRoZW0gYnkgc2ltcGx5IHNldHRpbmcgdGhlbSB0b286IAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwxIj4mbmJzcDtoZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgIkFjY2VwdDogQWdlbnQtMDA3Iik7ICZuYnNwO2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCAiSG9zdDogbXVuZ2VkLmhvc3QubGluZSIpOyAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJEZWxldGUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+RGVsZXRlIEhlYWRlcnM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+SWYgeW91IHJlcGxhY2UgYW4gZXhpc3RpbmcgaGVhZGVyIHdpdGggb25lIHdpdGggbm8gY29udGVudHMsIHlvdSB3aWxsIHByZXZlbnQgdGhlIGhlYWRlciBmcm9tIGJlaW5nIHNlbnQuIEZvciBpbnN0YW5jZSwgaWYgeW91IHdhbnQgdG8gY29tcGxldGVseSBwcmV2ZW50IHRoZSAiQWNjZXB0OiIgaGVhZGVyIGZyb20gYmVpbmcgc2VudCwgeW91IGNhbiBkaXNhYmxlIGl0IHdpdGggY29kZSBzaW1pbGFyIHRvIHRoaXM6IAorPHAgY2xhc3M9ImxldmVsMSI+Jm5ic3A7aGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsICJBY2NlcHQ6Iik7IAorPHAgY2xhc3M9ImxldmVsMSI+Qm90aCByZXBsYWNpbmcgYW5kIGNhbmNlbGluZyBpbnRlcm5hbCBoZWFkZXJzIHNob3VsZCBiZSBkb25lIHdpdGggY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGFuZCB5b3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQgeW91IG1heSB2aW9sYXRlIHRoZSBIVFRQIHByb3RvY29sIHdoZW4gZG9pbmcgc28uIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJFbmZvcmNpbmciPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+RW5mb3JjaW5nIGNodW5rZWQgdHJhbnNmZXItZW5jb2Rpbmc8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwxIj5CeSBtYWtpbmcgc3VyZSBhIHJlcXVlc3QgdXNlcyB0aGUgY3VzdG9tIGhlYWRlciAiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiIHdoZW4gZG9pbmcgYSBub24tR0VUIEhUVFAgb3BlcmF0aW9uLCBsaWJjdXJsIHdpbGwgc3dpdGNoIG92ZXIgdG8gImNodW5rZWQiIHVwbG9hZCwgZXZlbiB0aG91Z2ggdGhlIHNpemUgb2YgdGhlIGRhdGEgdG8gdXBsb2FkIG1pZ2h0IGJlIGtub3duLiBCeSBkZWZhdWx0LCBsaWJjdXJsIHVzdWFsbHkgc3dpdGNoZXMgb3ZlciB0byBjaHVua2VkIHVwbG9hZCBhdXRvbWF0aWNhbGx5IGlmIHRoZSB1cGxvYWQgZGF0YSBzaXplIGlzIHVua25vd24uIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJIVFRQIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkhUVFAgVmVyc2lvbjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDEiPkFsbCBIVFRQIHJlcXVlc3RzIGluY2x1ZGVzIHRoZSB2ZXJzaW9uIG51bWJlciB0byB0ZWxsIHRoZSBzZXJ2ZXIgd2hpY2ggdmVyc2lvbiB3ZSBzdXBwb3J0LiBsaWJjdXJsIHNwZWFrcyBIVFRQIDEuMSBieSBkZWZhdWx0LiBTb21lIHZlcnkgb2xkIHNlcnZlcnMgZG9uJ3QgbGlrZSBnZXR0aW5nIDEuMS1yZXF1ZXN0cyBhbmQgd2hlbiBkZWFsaW5nIHdpdGggc3R1YmJvcm4gb2xkIHRoaW5ncyBsaWtlIHRoYXQsIHlvdSBjYW4gdGVsbCBsaWJjdXJsIHRvIHVzZSAxLjAgaW5zdGVhZCBieSBkb2luZyBzb21ldGhpbmcgbGlrZSB0aGlzOiAKKzxwIGNsYXNzPSJsZXZlbDEiPiZuYnNwO2N1cmxfZWFzeV9zZXRvcHQoZWFzeWhhbmRsZSwgQ1VSTE9QVF9IVFRQX1ZFUlNJT04sIENVUkxfSFRUUF9WRVJTSU9OXzFfMCk7IAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJGVFAiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+RlRQIEN1c3RvbSBDb21tYW5kczwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDEiPk5vdCBhbGwgcHJvdG9jb2xzIGFyZSBIVFRQLWxpa2UsIGFuZCB0aHVzIHRoZSBhYm92ZSBtYXkgbm90IGhlbHAgeW91IHdoZW4geW91IHdhbnQgdG8gbWFrZSwgZm9yIGV4YW1wbGUsIHlvdXIgRlRQIHRyYW5zZmVycyB0byBiZWhhdmUgZGlmZmVyZW50bHkuIAorPHAgY2xhc3M9ImxldmVsMSI+U2VuZGluZyBjdXN0b20gY29tbWFuZHMgdG8gYSBGVFAgc2VydmVyIG1lYW5zIHRoYXQgeW91IG5lZWQgdG8gc2VuZCB0aGUgY29tbWFuZHMgZXhhY3RseSBhcyB0aGUgRlRQIHNlcnZlciBleHBlY3RzIHRoZW0gKDxhIGhyZWY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzk1OS50eHQiPlJGQyA5NTk8L2E+IGlzIGEgZ29vZCBndWlkZSBoZXJlKSwgYW5kIHlvdSBjYW4gb25seSB1c2UgY29tbWFuZHMgdGhhdCB3b3JrIG9uIHRoZSBjb250cm9sLWNvbm5lY3Rpb24gYWxvbmUuIEFsbCBraW5kcyBvZiBjb21tYW5kcyB0aGF0IHJlcXVpcmUgZGF0YSBpbnRlcmNoYW5nZSBhbmQgdGh1cyBuZWVkIGEgZGF0YS1jb25uZWN0aW9uIG11c3QgYmUgbGVmdCB0byBsaWJjdXJsJ3Mgb3duIGp1ZGdlbWVudC4gQWxzbyBiZSBhd2FyZSB0aGF0IGxpYmN1cmwgd2lsbCBkbyBpdHMgdmVyeSBiZXN0IHRvIGNoYW5nZSBkaXJlY3RvcnkgdG8gdGhlIHRhcmdldCBkaXJlY3RvcnkgYmVmb3JlIGRvaW5nIGFueSB0cmFuc2Zlciwgc28gaWYgeW91IGNoYW5nZSBkaXJlY3RvcnkgKHdpdGggQ1dEIG9yIHNpbWlsYXIpIHlvdSBtaWdodCBjb25mdXNlIGxpYmN1cmwgYW5kIHRoZW4gaXQgbWlnaHQgbm90IGF0dGVtcHQgdG8gdHJhbnNmZXIgdGhlIGZpbGUgaW4gdGhlIGNvcnJlY3QgcmVtb3RlIGRpcmVjdG9yeS4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BIGxpdHRsZSBleGFtcGxlIHRoYXQgZGVsZXRlcyBhIGdpdmVuIGZpbGUgYmVmb3JlIGFuIG9wZXJhdGlvbjogCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDEiPiZuYnNwO2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCAiREVMRSBmaWxlLXRvLXJlbW92ZSIpOyAKKzxwIGNsYXNzPSJsZXZlbDEiPiZuYnNwOy8qIHBhc3MgdGhlIGxpc3Qgb2YgY3VzdG9tIGNvbW1hbmRzIHRvIHRoZSBoYW5kbGUgKi8gJm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX1FVT1RFLCBoZWFkZXJzKTsgCis8cCBjbGFzcz0ibGV2ZWwxIj4mbmJzcDtjdXJsX2Vhc3lfcGVyZm9ybShlYXN5aGFuZGxlKTsgLyogdHJhbnNmZXIgZnRwIGRhdGEhICovIAorPHAgY2xhc3M9ImxldmVsMSI+Jm5ic3A7Y3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsgLyogZnJlZSB0aGUgaGVhZGVyIGxpc3QgKi8gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDEiPklmIHlvdSB3b3VsZCBpbnN0ZWFkIHdhbnQgdGhpcyBvcGVyYXRpb24gKG9yIGNoYWluIG9mIG9wZXJhdGlvbnMpIHRvIGhhcHBlbiBfYWZ0ZXJfIHRoZSBkYXRhIHRyYW5zZmVyIHRvb2sgcGxhY2UgdGhlIG9wdGlvbiB0byA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3NldG9wdC5odG1sIj5jdXJsX2Vhc3lfc2V0b3B0KDMpPC9hPiB3b3VsZCBpbnN0ZWFkIGJlIGNhbGxlZCBDVVJMT1BUX1BPU1RRVU9URSBhbmQgdXNlZCB0aGUgZXhhY3Qgc2FtZSB3YXkuIAorPHAgY2xhc3M9ImxldmVsMSI+VGhlIGN1c3RvbSBGVFAgY29tbWFuZCB3aWxsIGJlIGlzc3VlZCB0byB0aGUgc2VydmVyIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSBsaXN0LCBhbmQgaWYgYSBjb21tYW5kIGdldHMgYW4gZXJyb3IgY29kZSByZXR1cm5lZCBiYWNrIGZyb20gdGhlIHNlcnZlciwgbm8gbW9yZSBjb21tYW5kcyB3aWxsIGJlIGlzc3VlZCBhbmQgbGliY3VybCB3aWxsIGJhaWwgb3V0IHdpdGggYW4gZXJyb3IgY29kZSAoQ1VSTEVfUVVPVEVfRVJST1IpLiBOb3RlIHRoYXQgaWYgeW91IHVzZSBDVVJMT1BUX1FVT1RFIHRvIHNlbmQgY29tbWFuZHMgYmVmb3JlIGEgdHJhbnNmZXIsIG5vIHRyYW5zZmVyIHdpbGwgYWN0dWFsbHkgdGFrZSBwbGFjZSB3aGVuIGEgcXVvdGUgY29tbWFuZCBoYXMgZmFpbGVkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHlvdSBzZXQgdGhlIENVUkxPUFRfSEVBREVSIHRvIDEsIHlvdSB3aWxsIHRlbGwgbGliY3VybCB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldCBmaWxlIGFuZCBvdXRwdXQgImhlYWRlcnMiIGFib3V0IGl0LiBUaGUgaGVhZGVycyB3aWxsIGJlIGluICJIVFRQLXN0eWxlIiwgbG9va2luZyBsaWtlIHRoZXkgZG8gaW4gSFRUUC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgb3B0aW9uIHRvIGVuYWJsZSBoZWFkZXJzIG9yIHRvIHJ1biBjdXN0b20gRlRQIGNvbW1hbmRzIG1heSBiZSB1c2VmdWwgdG8gY29tYmluZSB3aXRoIENVUkxPUFRfTk9CT0RZLiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIG5vIGFjdHVhbCBmaWxlIGNvbnRlbnQgdHJhbnNmZXIgd2lsbCBiZSBwZXJmb3JtZWQuIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJGVFAiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+RlRQIEN1c3RvbSBDVVNUT01SRVFVRVNUPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIHlvdSBkbyB3YW50IHRvIGxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgRlRQIGRpcmVjdG9yeSB1c2luZyB5b3VyIG93biBkZWZpbmVkIEZUUCBjb21tYW5kLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1Qgd2lsbCBkbyBqdXN0IHRoYXQuICJOTFNUIiBpcyB0aGUgZGVmYXVsdCBvbmUgZm9yIGxpc3RpbmcgZGlyZWN0b3JpZXMgYnV0IHlvdSdyZSBmcmVlIHRvIHBhc3MgaW4geW91ciBpZGVhIG9mIGEgZ29vZCBhbHRlcm5hdGl2ZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj48YSBuYW1lPSJDb29raWVzIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5Db29raWVzIFdpdGhvdXQgQ2hvY29sYXRlIENoaXBzPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPkluIHRoZSBIVFRQIHNlbnNlLCBhIGNvb2tpZSBpcyBhIG5hbWUgd2l0aCBhbiBhc3NvY2lhdGVkIHZhbHVlLiBBIHNlcnZlciBzZW5kcyB0aGUgbmFtZSBhbmQgdmFsdWUgdG8gdGhlIGNsaWVudCwgYW5kIGV4cGVjdHMgaXQgdG8gZ2V0IHNlbnQgYmFjayBvbiBldmVyeSBzdWJzZXF1ZW50IHJlcXVlc3QgdG8gdGhlIHNlcnZlciB0aGF0IG1hdGNoZXMgdGhlIHBhcnRpY3VsYXIgY29uZGl0aW9ucyBzZXQuIFRoZSBjb25kaXRpb25zIGluY2x1ZGUgdGhhdCB0aGUgZG9tYWluIG5hbWUgYW5kIHBhdGggbWF0Y2ggYW5kIHRoYXQgdGhlIGNvb2tpZSBoYXNuJ3QgYmVjb21lIHRvbyBvbGQuIAorPHAgY2xhc3M9ImxldmVsMCI+SW4gcmVhbC13b3JsZCBjYXNlcywgc2VydmVycyBzZW5kIG5ldyBjb29raWVzIHRvIHJlcGxhY2UgZXhpc3Rpbmcgb25lcyB0byB1cGRhdGUgdGhlbS4gU2VydmVyIHVzZSBjb29raWVzIHRvICJ0cmFjayIgdXNlcnMgYW5kIHRvIGtlZXAgInNlc3Npb25zIi4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Db29raWVzIGFyZSBzZW50IGZyb20gc2VydmVyIHRvIGNsaWVudHMgd2l0aCB0aGUgaGVhZGVyIFNldC1Db29raWU6IGFuZCB0aGV5J3JlIHNlbnQgZnJvbSBjbGllbnRzIHRvIHNlcnZlcnMgd2l0aCB0aGUgQ29va2llOiBoZWFkZXIuIAorPHAgY2xhc3M9ImxldmVsMCI+VG8ganVzdCBzZW5kIHdoYXRldmVyIGNvb2tpZSB5b3Ugd2FudCB0byBhIHNlcnZlciwgeW91IGNhbiB1c2UgQ1VSTE9QVF9DT09LSUUgdG8gc2V0IGEgY29va2llIHN0cmluZyBsaWtlIHRoaXM6IAorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7Y3VybF9lYXN5X3NldG9wdChlYXN5aGFuZGxlLCBDVVJMT1BUX0NPT0tJRSwgIm5hbWUxPXZhcjE7IG5hbWUyPXZhcjI7Iik7IAorPHAgY2xhc3M9ImxldmVsMCI+SW4gbWFueSBjYXNlcywgdGhhdCBpcyBub3QgZW5vdWdoLiBZb3UgbWlnaHQgd2FudCB0byBkeW5hbWljYWxseSBzYXZlIHdoYXRldmVyIGNvb2tpZXMgdGhlIHJlbW90ZSBzZXJ2ZXIgcGFzc2VzIHRvIHlvdSwgYW5kIG1ha2Ugc3VyZSB0aG9zZSBjb29raWVzIGFyZSB0aGVuIHVzZWQgYWNjb3JkaW5nbHkgb24gbGF0ZXIgcmVxdWVzdHMuIAorPHAgY2xhc3M9ImxldmVsMCI+T25lIHdheSB0byBkbyB0aGlzLCBpcyB0byBzYXZlIGFsbCBoZWFkZXJzIHlvdSByZWNlaXZlIGluIGEgcGxhaW4gZmlsZSBhbmQgd2hlbiB5b3UgbWFrZSBhIHJlcXVlc3QsIHlvdSB0ZWxsIGxpYmN1cmwgdG8gcmVhZCB0aGUgcHJldmlvdXMgaGVhZGVycyB0byBmaWd1cmUgb3V0IHdoaWNoIGNvb2tpZXMgdG8gdXNlLiBTZXQgdGhlIGhlYWRlciBmaWxlIHRvIHJlYWQgY29va2llcyBmcm9tIHdpdGggQ1VSTE9QVF9DT09LSUVGSUxFLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBDVVJMT1BUX0NPT0tJRUZJTEUgb3B0aW9uIGFsc28gYXV0b21hdGljYWxseSBlbmFibGVzIHRoZSBjb29raWUgcGFyc2VyIGluIGxpYmN1cmwuIFVudGlsIHRoZSBjb29raWUgcGFyc2VyIGlzIGVuYWJsZWQsIGxpYmN1cmwgd2lsbCBub3QgcGFyc2Ugb3IgdW5kZXJzdGFuZCBpbmNvbWluZyBjb29raWVzIGFuZCB0aGV5IHdpbGwganVzdCBiZSBpZ25vcmVkLiBIb3dldmVyLCB3aGVuIHRoZSBwYXJzZXIgaXMgZW5hYmxlZCB0aGUgY29va2llcyB3aWxsIGJlIHVuZGVyc3Rvb2QgYW5kIHRoZSBjb29raWVzIHdpbGwgYmUga2VwdCBpbiBtZW1vcnkgYW5kIHVzZWQgcHJvcGVybHkgaW4gc3Vic2VxdWVudCByZXF1ZXN0cyB3aGVuIHRoZSBzYW1lIGhhbmRsZSBpcyB1c2VkLiBNYW55IHRpbWVzIHRoaXMgaXMgZW5vdWdoLCBhbmQgeW91IG1heSBub3QgaGF2ZSB0byBzYXZlIHRoZSBjb29raWVzIHRvIGRpc2sgYXQgYWxsLiBOb3RlIHRoYXQgdGhlIGZpbGUgeW91IHNwZWNpZnkgdG8gQ1VSTE9QVF9DT09LSUVGSUxFIGRvZXNuJ3QgaGF2ZSB0byBleGlzdCB0byBlbmFibGUgdGhlIHBhcnNlciwgc28gYSBjb21tb24gd2F5IHRvIGp1c3QgZW5hYmxlIHRoZSBwYXJzZXIgYW5kIG5vdCByZWFkIGFueSBjb29raWVzIGlzIHRvIHVzZSB0aGUgbmFtZSBvZiBhIGZpbGUgeW91IGtub3cgZG9lc24ndCBleGlzdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5JZiB5b3Ugd291bGQgcmF0aGVyIHVzZSBleGlzdGluZyBjb29raWVzIHRoYXQgeW91J3ZlIHByZXZpb3VzbHkgcmVjZWl2ZWQgd2l0aCB5b3VyIE5ldHNjYXBlIG9yIE1vemlsbGEgYnJvd3NlcnMsIHlvdSBjYW4gbWFrZSBsaWJjdXJsIHVzZSB0aGF0IGNvb2tpZSBmaWxlIGFzIGlucHV0LiBUaGUgQ1VSTE9QVF9DT09LSUVGSUxFIGlzIHVzZWQgZm9yIHRoYXQgdG9vLCBhcyBsaWJjdXJsIHdpbGwgYXV0b21hdGljYWxseSBmaW5kIG91dCB3aGF0IGtpbmQgb2YgZmlsZSBpdCBpcyBhbmQgYWN0IGFjY29yZGluZ2x5LiAKKzxwIGNsYXNzPSJsZXZlbDAiPlBlcmhhcHMgdGhlIG1vc3QgYWR2YW5jZWQgY29va2llIG9wZXJhdGlvbiBsaWJjdXJsIG9mZmVycywgaXMgc2F2aW5nIHRoZSBlbnRpcmUgaW50ZXJuYWwgY29va2llIHN0YXRlIGJhY2sgaW50byBhIE5ldHNjYXBlL01vemlsbGEgZm9ybWF0dGVkIGNvb2tpZSBmaWxlLiBXZSBjYWxsIHRoYXQgdGhlIGNvb2tpZS1qYXIuIFdoZW4geW91IHNldCBhIGZpbGUgbmFtZSB3aXRoIENVUkxPUFRfQ09PS0lFSkFSLCB0aGF0IGZpbGUgbmFtZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIGFsbCByZWNlaXZlZCBjb29raWVzIHdpbGwgYmUgc3RvcmVkIGluIGl0IHdoZW4gPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9jbGVhbnVwLmh0bWwiPmN1cmxfZWFzeV9jbGVhbnVwKDMpPC9hPiBpcyBjYWxsZWQuIFRoaXMgZW5hYmxlcyBjb29raWVzIHRvIGdldCBwYXNzZWQgb24gcHJvcGVybHkgYmV0d2VlbiBtdWx0aXBsZSBoYW5kbGVzIHdpdGhvdXQgYW55IGluZm9ybWF0aW9uIGdldHRpbmcgbG9zdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJGVFAiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkZUUCBQZWN1bGlhcml0aWVzIFdlIE5lZWQ8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5GVFAgdHJhbnNmZXJzIHVzZSBhIHNlY29uZCBUQ1AvSVAgY29ubmVjdGlvbiBmb3IgdGhlIGRhdGEgdHJhbnNmZXIuIFRoaXMgaXMgdXN1YWxseSBhIGZhY3QgeW91IGNhbiBmb3JnZXQgYW5kIGlnbm9yZSBidXQgYXQgdGltZXMgdGhpcyBmYWN0IHdpbGwgY29tZSBiYWNrIHRvIGhhdW50IHlvdS4gbGliY3VybCBvZmZlcnMgc2V2ZXJhbCBkaWZmZXJlbnQgd2F5cyB0byBjdXN0b21pemUgaG93IHRoZSBzZWNvbmQgY29ubmVjdGlvbiBpcyBiZWluZyBtYWRlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPmxpYmN1cmwgY2FuIGVpdGhlciBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgYSBzZWNvbmQgdGltZSBvciB0ZWxsIHRoZSBzZXJ2ZXIgdG8gY29ubmVjdCBiYWNrIHRvIGl0LiBUaGUgZmlyc3Qgb3B0aW9uIGlzIHRoZSBkZWZhdWx0IGFuZCBpdCBpcyBhbHNvIHdoYXQgd29ya3MgYmVzdCBmb3IgYWxsIHRoZSBwZW9wbGUgYmVoaW5kIGZpcmV3YWxscywgTkFUcyBvciBJUC1tYXNxdWVyYWRpbmcgc2V0dXBzLiBsaWJjdXJsIHRoZW4gdGVsbHMgdGhlIHNlcnZlciB0byBvcGVuIHVwIGEgbmV3IHBvcnQgYW5kIHdhaXQgZm9yIGEgc2Vjb25kIGNvbm5lY3Rpb24uIFRoaXMgaXMgYnkgZGVmYXVsdCBhdHRlbXB0ZWQgd2l0aCBFUFNWIGZpcnN0LCBhbmQgaWYgdGhhdCBkb2Vzbid0IHdvcmsgaXQgdHJpZXMgUEFTViBpbnN0ZWFkLiAoRVBTViBpcyBhbiBleHRlbnNpb24gdG8gdGhlIG9yaWdpbmFsIEZUUCBzcGVjIGFuZCBkb2VzIG5vdCBleGlzdCBub3Igd29yayBvbiBhbGwgRlRQIHNlcnZlcnMuKSAKKzxwIGNsYXNzPSJsZXZlbDAiPllvdSBjYW4gcHJldmVudCBsaWJjdXJsIGZyb20gZmlyc3QgdHJ5aW5nIHRoZSBFUFNWIGNvbW1hbmQgYnkgc2V0dGluZyBDVVJMT1BUX0ZUUF9VU0VfRVBTViB0byB6ZXJvLiAKKzxwIGNsYXNzPSJsZXZlbDAiPkluIHNvbWUgY2FzZXMsIHlvdSB3aWxsIHByZWZlciB0byBoYXZlIHRoZSBzZXJ2ZXIgY29ubmVjdCBiYWNrIHRvIHlvdSBmb3IgdGhlIHNlY29uZCBjb25uZWN0aW9uLiBUaGlzIG1pZ2h0IGJlIHdoZW4gdGhlIHNlcnZlciBpcyBwZXJoYXBzIGJlaGluZCBhIGZpcmV3YWxsIG9yIHNvbWV0aGluZyBhbmQgb25seSBhbGxvd3MgY29ubmVjdGlvbnMgb24gYSBzaW5nbGUgcG9ydC4gbGliY3VybCB0aGVuIGluZm9ybXMgdGhlIHJlbW90ZSBzZXJ2ZXIgd2hpY2ggSVAgYWRkcmVzcyBhbmQgcG9ydCBudW1iZXIgdG8gY29ubmVjdCB0by4gVGhpcyBpcyBtYWRlIHdpdGggdGhlIENVUkxPUFRfRlRQUE9SVCBvcHRpb24uIElmIHlvdSBzZXQgaXQgdG8gIi0iLCBsaWJjdXJsIHdpbGwgdXNlIHlvdXIgc3lzdGVtJ3MgImRlZmF1bHQgSVAgYWRkcmVzcyIuIElmIHlvdSB3YW50IHRvIHVzZSBhIHBhcnRpY3VsYXIgSVAsIHlvdSBjYW4gc2V0IHRoZSBmdWxsIElQIGFkZHJlc3MsIGEgaG9zdCBuYW1lIHRvIHJlc29sdmUgdG8gYW4gSVAgYWRkcmVzcyBvciBldmVuIGEgbG9jYWwgbmV0d29yayBpbnRlcmZhY2UgbmFtZSB0aGF0IGxpYmN1cmwgd2lsbCBnZXQgdGhlIElQIGFkZHJlc3MgZnJvbS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5XaGVuIGRvaW5nIHRoZSAiUE9SVCIgYXBwcm9hY2gsIGxpYmN1cmwgd2lsbCBhdHRlbXB0IHRvIHVzZSB0aGUgRVBSVCBhbmQgdGhlIExQUlQgYmVmb3JlIHRyeWluZyBQT1JULCBhcyB0aGV5IHdvcmsgd2l0aCBtb3JlIHByb3RvY29scy4gWW91IGNhbiBkaXNhYmxlIHRoaXMgYmVoYXZpb3IgYnkgc2V0dGluZyBDVVJMT1BUX0ZUUF9VU0VfRVBSVCB0byB6ZXJvLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkhlYWRlcnMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPkhlYWRlcnMgRXF1YWwgRnVuPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+U29tZSBwcm90b2NvbHMgcHJvdmlkZSAiaGVhZGVycyIsIG1ldGEtZGF0YSBzZXBhcmF0ZWQgZnJvbSB0aGUgbm9ybWFsIGRhdGEuIFRoZXNlIGhlYWRlcnMgYXJlIGJ5IGRlZmF1bHQgbm90IGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZGF0YSBzdHJlYW0sIGJ1dCB5b3UgY2FuIG1ha2UgdGhlbSBhcHBlYXIgaW4gdGhlIGRhdGEgc3RyZWFtIGJ5IHNldHRpbmcgQ1VSTE9QVF9IRUFERVIgdG8gMS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5XaGF0IG1pZ2h0IGJlIGV2ZW4gbW9yZSB1c2VmdWwsIGlzIGxpYmN1cmwncyBhYmlsaXR5IHRvIHNlcGFyYXRlIHRoZSBoZWFkZXJzIGZyb20gdGhlIGRhdGEgYW5kIHRodXMgbWFrZSB0aGUgY2FsbGJhY2tzIGRpZmZlci4gWW91IGNhbiBmb3IgZXhhbXBsZSBzZXQgYSBkaWZmZXJlbnQgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBvcmRpbmFyeSB3cml0ZSBjYWxsYmFjayBieSBzZXR0aW5nIENVUkxPUFRfV1JJVEVIRUFERVIuIAorPHAgY2xhc3M9ImxldmVsMCI+T3IsIHlvdSBjYW4gc2V0IGFuIGVudGlyZWx5IHNlcGFyYXRlIGZ1bmN0aW9uIHRvIHJlY2VpdmUgdGhlIGhlYWRlcnMsIGJ5IHVzaW5nIENVUkxPUFRfSEVBREVSRlVOQ1RJT04uIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGhlYWRlcnMgYXJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gb25lIGJ5IG9uZSwgYW5kIHlvdSBjYW4gZGVwZW5kIG9uIHRoYXQgZmFjdC4gSXQgbWFrZXMgaXQgZWFzaWVyIGZvciB5b3UgdG8gYWRkIGN1c3RvbSBoZWFkZXIgcGFyc2VycyBldGMuIAorPHAgY2xhc3M9ImxldmVsMCI+IkhlYWRlcnMiIGZvciBGVFAgdHJhbnNmZXJzIGVxdWFsIGFsbCB0aGUgRlRQIHNlcnZlciByZXNwb25zZXMuIFRoZXkgYXJlbid0IGFjdHVhbGx5IHRydWUgaGVhZGVycywgYnV0IGluIHRoaXMgY2FzZSB3ZSBwcmV0ZW5kIHRoZXkgYXJlISA7LSkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJQb3N0Ij48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5Qb3N0IFRyYW5zZmVyIEluZm9ybWF0aW9uPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7WyBjdXJsX2Vhc3lfZ2V0aW5mbyBdIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iU2VjdXJpdHkiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNlY3VyaXR5IENvbnNpZGVyYXRpb25zPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGxpYmN1cmwgcHJvamVjdCB0YWtlcyBzZWN1cml0eSBzZXJpb3VzbHkuICBUaGUgbGlicmFyeSBpcyB3cml0dGVuIHdpdGggY2F1dGlvbiBhbmQgcHJlY2F1dGlvbnMgYXJlIHRha2VuIHRvIG1pdGlnYXRlIG1hbnkga2luZHMgb2Ygcmlza3MgZW5jb3VudGVyZWQgd2hpbGUgb3BlcmF0aW5nIHdpdGggcG90ZW50aWFsbHkgbWFsaWNpb3VzIHNlcnZlcnMgb24gdGhlIEludGVybmV0LiAgSXQgaXMgYSBwb3dlcmZ1bCBsaWJyYXJ5LCBob3dldmVyLCB3aGljaCBhbGxvd3MgYXBwbGljYXRpb24gd3JpdGVycyB0byBtYWtlIHRyYWRlIG9mZnMgYmV0d2VlbiBlYXNlIG9mIHdyaXRpbmcgYW5kIGV4cG9zdXJlIHRvIHBvdGVudGlhbCByaXNreSBvcGVyYXRpb25zLiAgSWYgdXNlZCB0aGUgcmlnaHQgd2F5LCB5b3UgY2FuIHVzZSBsaWJjdXJsIHRvIHRyYW5zZmVyIGRhdGEgcHJldHR5IHNhZmVseS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5NYW55IGFwcGxpY2F0aW9ucyBhcmUgdXNlZCBpbiBjbG9zZWQgbmV0d29ya3Mgd2hlcmUgdXNlcnMgYW5kIHNlcnZlcnMgY2FuIGJlIHRydXN0ZWQsIGJ1dCBtYW55IG90aGVycyBhcmUgdXNlZCBvbiBhcmJpdHJhcnkgc2VydmVycyBhbmQgYXJlIGZlZCBpbnB1dCBmcm9tIHBvdGVudGlhbGx5IHVudHJ1c3RlZCB1c2Vycy4gIEZvbGxvd2luZyBpcyBhIGRpc2N1c3Npb24gYWJvdXQgc29tZSByaXNrcyBpbiB0aGUgd2F5cyBpbiB3aGljaCBhcHBsaWNhdGlvbnMgY29tbW9ubHkgdXNlIGxpYmN1cmwgYW5kIHBvdGVudGlhbCBtaXRpZ2F0aW9ucyBvZiB0aG9zZSByaXNrcy4gSXQgaXMgYnkgbm8gbWVhbnMgY29tcHJlaGVuc2l2ZSwgYnV0IHNob3dzIGNsYXNzZXMgb2YgYXR0YWNrcyB0aGF0IHJvYnVzdCBhcHBsaWNhdGlvbnMgc2hvdWxkIGNvbnNpZGVyLiBUaGUgQ29tbW9uIFdlYWtuZXNzIEVudW1lcmF0aW9uIHByb2plY3QgYXQgPGEgaHJlZj0iaHR0cDovL2N3ZS5taXRyZS5vcmcvIj5odHRwOi8vY3dlLm1pdHJlLm9yZy88L2E+IGlzIGEgZ29vZCByZWZlcmVuY2UgZm9yIG1hbnkgb2YgdGhlc2UgYW5kIHNpbWlsYXIgdHlwZXMgb2Ygd2Vha25lc3NlcyBvZiB3aGljaCBhcHBsaWNhdGlvbiB3cml0ZXJzIHNob3VsZCBiZSBhd2FyZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNvbW1hbmQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+Q29tbWFuZCBMaW5lczwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5JZiB5b3UgdXNlIGEgY29tbWFuZCBsaW5lIHRvb2wgKHN1Y2ggYXMgY3VybCkgdGhhdCB1c2VzIGxpYmN1cmwsIGFuZCB5b3UgZ2l2ZSBvcHRpb25zIHRvIHRoZSB0b29sIG9uIHRoZSBjb21tYW5kIGxpbmUgdGhvc2Ugb3B0aW9ucyBjYW4gdmVyeSBsaWtlbHkgZ2V0IHJlYWQgYnkgb3RoZXIgdXNlcnMgb2YgeW91ciBzeXN0ZW0gd2hlbiB0aGV5IHVzZSAncHMnIG9yIG90aGVyIHRvb2xzIHRvIGxpc3QgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2Vzc2VzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgbmV2ZXIgZmVlZCBzZW5zaXRpdmUgdGhpbmdzIHRvIHByb2dyYW1zIHVzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zLiBXcml0ZSB0aGVtIHRvIGEgcHJvdGVjdGVkIGZpbGUgYW5kIHVzZSB0aGUgLUsgb3B0aW9uIHRvIGF2b2lkIHRoaXMuIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJuZXRyYyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4ubmV0cmM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+Lm5ldHJjIGlzIGEgcHJldHR5IGhhbmR5IGZpbGUvZmVhdHVyZSB0aGF0IGFsbG93cyB5b3UgdG8gbG9naW4gcXVpY2tseSBhbmQgYXV0b21hdGljYWxseSB0byBmcmVxdWVudGx5IHZpc2l0ZWQgc2l0ZXMuIFRoZSBmaWxlIGNvbnRhaW5zIHBhc3N3b3JkcyBpbiBjbGVhciB0ZXh0IGFuZCBpcyBhIHJlYWwgc2VjdXJpdHkgcmlzay4gSW4gc29tZSBjYXNlcywgeW91ciAubmV0cmMgaXMgYWxzbyBzdG9yZWQgaW4gYSBob21lIGRpcmVjdG9yeSB0aGF0IGlzIE5GUyBtb3VudGVkIG9yIHVzZWQgb24gYW5vdGhlciBuZXR3b3JrIGJhc2VkIGZpbGUgc3lzdGVtLCBzbyB0aGUgY2xlYXIgdGV4dCBwYXNzd29yZCB3aWxsIGZseSB0aHJvdWdoIHlvdXIgbmV0d29yayBldmVyeSB0aW1lIGFueW9uZSByZWFkcyB0aGF0IGZpbGUhIAorPHAgY2xhc3M9ImxldmVsMSI+VG8gYXZvaWQgdGhpcyBwcm9ibGVtLCBkb24ndCB1c2UgLm5ldHJjIGZpbGVzIGFuZCBuZXZlciBzdG9yZSBwYXNzd29yZHMgaW4gcGxhaW4gdGV4dCBhbnl3aGVyZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkNsZWFyIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkNsZWFyIFRleHQgUGFzc3dvcmRzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk1hbnkgb2YgdGhlIHByb3RvY29scyBsaWJjdXJsIHN1cHBvcnRzIHNlbmQgbmFtZSBhbmQgcGFzc3dvcmQgdW5lbmNyeXB0ZWQgYXMgY2xlYXIgdGV4dCAoSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgRlRQLCBURUxORVQgZXRjKS4gSXQgaXMgdmVyeSBlYXN5IGZvciBhbnlvbmUgb24geW91ciBuZXR3b3JrIG9yIGEgbmV0d29yayBuZWFyYnkgeW91cnMgdG8ganVzdCBmaXJlIHVwIGEgbmV0d29yayBhbmFseXplciB0b29sIGFuZCBlYXZlc2Ryb3Agb24geW91ciBwYXNzd29yZHMuIERvbid0IGxldCB0aGUgZmFjdCB0aGF0IEhUVFAgQmFzaWMgdXNlcyBiYXNlNjQgZW5jb2RlZCBwYXNzd29yZHMgZm9vbCB5b3UuIFRoZXkgbWF5IG5vdCBsb29rIHJlYWRhYmxlIGF0IGEgZmlyc3QgZ2xhbmNlLCBidXQgdGhleSB2ZXJ5IGVhc2lseSAiZGVjaXBoZXJlZCIgYnkgYW55b25lIHdpdGhpbiBzZWNvbmRzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgdXNlIEhUVFAgYXV0aGVudGljYXRpb24gbWV0aG9kcyBvciBvdGhlciBwcm90b2NvbHMgdGhhdCBkb24ndCBsZXQgc25vb3BlcnMgc2VlIHlvdXIgcGFzc3dvcmQ6IEhUVFAgd2l0aCBEaWdlc3QsIE5UTE0gb3IgR1NTIGF1dGhlbnRpY2F0aW9uLCBIVFRQUywgRlRQUywgU0NQLCBTRlRQIGFuZCBGVFAtS2VyYmVyb3MgYXJlIGEgZmV3IGV4YW1wbGVzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iUmVkaXJlY3RzIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPlJlZGlyZWN0czwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5UaGUgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiBvcHRpb24gYXV0b21hdGljYWxseSBmb2xsb3dzIEhUVFAgcmVkaXJlY3RzIHNlbnQgYnkgYSByZW1vdGUgc2VydmVyLiAgVGhlc2UgcmVkaXJlY3RzIGNhbiByZWZlciB0byBhbnkga2luZCBvZiBVUkwsIG5vdCBqdXN0IEhUVFAuICBBIHJlZGlyZWN0IHRvIGEgZmlsZTogVVJMIHdvdWxkIGNhdXNlIHRoZSBsaWJjdXJsIHRvIHJlYWQgKG9yIHdyaXRlKSBhcmJpdHJhcnkgZmlsZXMgZnJvbSB0aGUgbG9jYWwgZmlsZXN5c3RlbS4gIElmIHRoZSBhcHBsaWNhdGlvbiByZXR1cm5zIHRoZSBkYXRhIGJhY2sgdG8gdGhlIHVzZXIgKGFzIHdvdWxkIGhhcHBlbiBpbiBzb21lIGtpbmRzIG9mIENHSSBzY3JpcHRzKSwgYW4gYXR0YWNrZXIgY291bGQgbGV2ZXJhZ2UgdGhpcyB0byByZWFkIG90aGVyd2lzZSBmb3JiaWRkZW4gZGF0YSAoZS5nLiBmaWxlOi8vbG9jYWxob3N0L2V0Yy9wYXNzd2QpLiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIGFyZSBzdG9yZWQgaW4gdGhlIH4vLm5ldHJjIGZpbGUsIG9yIEtlcmJlcm9zIGlzIGluIHVzZSwgYW55IG90aGVyIFVSTCB0eXBlIChub3QganVzdCBmaWxlOikgdGhhdCByZXF1aXJlcyBhdXRoZW50aWNhdGlvbiBpcyBhbHNvIGF0IHJpc2suICBBIHJlZGlyZWN0IHN1Y2ggYXMgPGEgaHJlZj0iZnRwOi8vc29tZS1pbnRlcm5hbC1zZXJ2ZXIvcHJpdmF0ZS1maWxlIj5mdHA6Ly9zb21lLWludGVybmFsLXNlcnZlci9wcml2YXRlLWZpbGU8L2E+IHdvdWxkIHRoZW4gcmV0dXJuIGRhdGEgZXZlbiB3aGVuIHRoZSBzZXJ2ZXIgaXMgcGFzc3dvcmQgcHJvdGVjdGVkLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkluIHRoZSBzYW1lIHdheSwgaWYgYW4gdW5lbmNyeXB0ZWQgU1NIIHByaXZhdGUga2V5IGhhcyBiZWVuIGNvbmZpZ3VyZWQgZm9yIHRoZSB1c2VyIHJ1bm5pbmcgdGhlIGxpYmN1cmwgYXBwbGljYXRpb24sIFNDUDogb3IgU0ZUUDogVVJMcyBjb3VsZCBhY2Nlc3MgcGFzc3dvcmQgb3IgcHJpdmF0ZS1rZXkgcHJvdGVjdGVkIHJlc291cmNlcywgZS5nLiBzPGEgaHJlZj0iZnRwOi8vdXNlciI+ZnRwOi8vdXNlcjwvYT5Ac29tZS1pbnRlcm5hbC1zZXJ2ZXIvZXRjL3Bhc3N3ZCAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBDVVJMT1BUX1JFRElSX1BST1RPQ09MUyBhbmQgQ1VSTE9QVF9ORVRSQyBvcHRpb25zIGNhbiBiZSB1c2VkIHRvIG1pdGlnYXRlIGFnYWluc3QgdGhpcyBraW5kIG9mIGF0dGFjay4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BIHJlZGlyZWN0IGNhbiBhbHNvIHNwZWNpZnkgYSBsb2NhdGlvbiBhdmFpbGFibGUgb25seSBvbiB0aGUgbWFjaGluZSBydW5uaW5nIGxpYmN1cmwsIGluY2x1ZGluZyBzZXJ2ZXJzIGhpZGRlbiBiZWhpbmQgYSBmaXJld2FsbCBmcm9tIHRoZSBhdHRhY2tlci4gZS5nLiA8YSBocmVmPSJodHRwOi8vMTI3LjAuMC4xLyI+aHR0cDovLzEyNy4wLjAuMS88L2E+IG9yIDxhIGhyZWY9Imh0dHA6Ly9pbnRyYW5ldC9kZWxldGUtc3R1ZmYuY2dpIj5odHRwOi8vaW50cmFuZXQvZGVsZXRlLXN0dWZmLmNnaTwvYT4/ZGVsZXRlPWFsbCBvciB0PGEgaHJlZj0iZnRwOi8vYm9vdHAtc2VydmVyL3BjLWNvbmZpZy1kYXRhIj5mdHA6Ly9ib290cC1zZXJ2ZXIvcGMtY29uZmlnLWRhdGE8L2E+IAorPHAgY2xhc3M9ImxldmVsMSI+QXBwcyBjYW4gbWl0aWdhdGUgYWdhaW5zdCB0aGlzIGJ5IGRpc2FibGluZyBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OIGFuZCBoYW5kbGluZyByZWRpcmVjdHMgaXRzZWxmLCBzYW5pdGl6aW5nIFVSTHMgYXMgbmVjZXNzYXJ5LiBBbHRlcm5hdGVseSwgYW4gYXBwIGNvdWxkIGxlYXZlIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gZW5hYmxlZCBidXQgc2V0IENVUkxPUFRfUkVESVJfUFJPVE9DT0xTIGFuZCBpbnN0YWxsIGEgQ1VSTE9QVF9PUEVOU09DS0VURlVOQ1RJT04gY2FsbGJhY2sgZnVuY3Rpb24gaW4gd2hpY2ggYWRkcmVzc2VzIGFyZSBzYW5pdGl6ZWQgYmVmb3JlIHVzZS4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IlByaXZhdGUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+UHJpdmF0ZSBSZXNvdXJjZXM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QSB1c2VyIHdobyBjYW4gY29udHJvbCB0aGUgRE5TIHNlcnZlciBvZiBhIGRvbWFpbiBiZWluZyBwYXNzZWQgaW4gd2l0aGluIGEgVVJMIGNhbiBjaGFuZ2UgdGhlIGFkZHJlc3Mgb2YgdGhlIGhvc3QgdG8gYSBsb2NhbCwgcHJpdmF0ZSBhZGRyZXNzIHdoaWNoIHRoZSBsaWJjdXJsIGFwcGxpY2F0aW9uIHdpbGwgdGhlbiB1c2UuIGUuZy4gVGhlIGlubm9jdW91cyBVUkwgPGEgaHJlZj0iaHR0cDovL2Z1enp5YnVubmllcy5leGFtcGxlLmNvbS8iPmh0dHA6Ly9mdXp6eWJ1bm5pZXMuZXhhbXBsZS5jb20vPC9hPiBjb3VsZCBhY3R1YWxseSByZXNvbHZlIHRvIHRoZSBJUCBhZGRyZXNzIG9mIGEgc2VydmVyIGJlaGluZCBhIGZpcmV3YWxsLCBzdWNoIGFzIDEyNy4wLjAuMSBvciAxMC4xLjIuMyBBcHBzIGNhbiBtaXRpZ2F0ZSBhZ2FpbnN0IHRoaXMgYnkgc2V0dGluZyBhIENVUkxPUFRfT1BFTlNPQ0tFVEZVTkNUSU9OIGFuZCBjaGVja2luZyB0aGUgYWRkcmVzcyBiZWZvcmUgYSBjb25uZWN0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkFsbCB0aGUgbWFsaWNpb3VzIHNjZW5hcmlvcyByZWdhcmRpbmcgcmVkaXJlY3RlZCBVUkxzIGFwcGx5IGp1c3QgYXMgd2VsbCB0byBub24tcmVkaXJlY3RlZCBVUkxzLCBpZiB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIHNwZWNpZnkgYW4gYXJiaXRyYXJ5IFVSTCB0aGF0IGNvdWxkIHBvaW50IHRvIGEgcHJpdmF0ZSByZXNvdXJjZS4gRm9yIGV4YW1wbGUsIGEgd2ViIGFwcCBwcm92aWRpbmcgYSB0cmFuc2xhdGlvbiBzZXJ2aWNlIG1pZ2h0IGhhcHBpbHkgdHJhbnNsYXRlIGZpbGU6Ly9sb2NhbGhvc3QvZXRjL3Bhc3N3ZCBhbmQgZGlzcGxheSB0aGUgcmVzdWx0LiAgQXBwcyBjYW4gbWl0aWdhdGUgYWdhaW5zdCB0aGlzIHdpdGggdGhlIENVUkxPUFRfUFJPVE9DT0xTIG9wdGlvbiBhcyB3ZWxsIGFzIGJ5IHNpbWlsYXIgbWl0aWdhdGlvbiB0ZWNobmlxdWVzIGZvciByZWRpcmVjdGlvbnMuIAorPHAgY2xhc3M9ImxldmVsMSI+QSBtYWxpY2lvdXMgRlRQIHNlcnZlciBjb3VsZCBpbiByZXNwb25zZSB0byB0aGUgUEFTViBjb21tYW5kIHJldHVybiBhbiBJUCBhZGRyZXNzIGFuZCBwb3J0IG51bWJlciBmb3IgYSBzZXJ2ZXIgbG9jYWwgdG8gdGhlIGFwcCBydW5uaW5nIGxpYmN1cmwgYnV0IGJlaGluZCBhIGZpcmV3YWxsLiAgQXBwcyBjYW4gbWl0aWdhdGUgYWdhaW5zdCB0aGlzIGJ5IHVzaW5nIHRoZSBDVVJMT1BUX0ZUUF9TS0lQX1BBU1ZfSVAgb3B0aW9uIG9yIENVUkxPUFRfRlRQUE9SVC4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IlVwbG9hZHMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+VXBsb2Fkczwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5XaGVuIHVwbG9hZGluZywgYSByZWRpcmVjdCBjYW4gY2F1c2UgYSBsb2NhbCAob3IgcmVtb3RlKSBmaWxlIHRvIGJlIG92ZXJ3cml0dGVuLiAgQXBwcyBtdXN0IG5vdCBhbGxvdyBhbnkgdW5zYW5pdGl6ZWQgVVJMIHRvIGJlIHBhc3NlZCBpbiBmb3IgdXBsb2Fkcy4gIEFsc28sIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gc2hvdWxkIG5vdCBiZSB1c2VkIG9uIHVwbG9hZHMuIEluc3RlYWQsIHRoZSBhcHAgc2hvdWxkIGhhbmRsZSByZWRpcmVjdHMgaXRzZWxmLCBzYW5pdGl6aW5nIGVhY2ggVVJMIGZpcnN0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQXV0aGVudGljYXRpb24iPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+QXV0aGVudGljYXRpb248L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VXNlIG9mIENVUkxPUFRfVU5SRVNUUklDVEVEX0FVVEggY291bGQgY2F1c2UgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gdG8gYmUgc2VudCB0byBhbiB1bmtub3duIHNlY29uZCBzZXJ2ZXIuICBBcHBzIGNhbiBtaXRpZ2F0ZSBhZ2FpbnN0IHRoaXMgYnkgZGlzYWJsaW5nIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gYW5kIGhhbmRsaW5nIHJlZGlyZWN0cyBpdHNlbGYsIHNhbml0aXppbmcgd2hlcmUgbmVjZXNzYXJ5LiAKKzxwIGNsYXNzPSJsZXZlbDEiPlVzZSBvZiB0aGUgQ1VSTEFVVEhfQU5ZIG9wdGlvbiB0byBDVVJMT1BUX0hUVFBBVVRIIGNvdWxkIHJlc3VsdCBpbiB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIGJlaW5nIHNlbnQgaW4gY2xlYXIgdGV4dCB0byBhbiBIVFRQIHNlcnZlci4gIEluc3RlYWQsIHVzZSBDVVJMQVVUSF9BTllTQUZFIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGUgcGFzc3dvcmQgaXMgZW5jcnlwdGVkIG92ZXIgdGhlIG5ldHdvcmssIG9yIGVsc2UgZmFpbCB0aGUgcmVxdWVzdC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Vc2Ugb2YgdGhlIENVUkxVU0VTU0xfVFJZIG9wdGlvbiB0byBDVVJMT1BUX1VTRV9TU0wgY291bGQgcmVzdWx0IGluIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgYmVpbmcgc2VudCBpbiBjbGVhciB0ZXh0IHRvIGFuIEZUUCBzZXJ2ZXIuICBJbnN0ZWFkLCB1c2UgQ1VSTFVTRVNTTF9DT05UUk9MIHRvIGVuc3VyZSB0aGF0IGFuIGVuY3J5cHRlZCBjb25uZWN0aW9uIGlzIHVzZWQgb3IgZWxzZSBmYWlsIHRoZSByZXF1ZXN0LiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQ29va2llcyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5Db29raWVzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPklmIGNvb2tpZXMgYXJlIGVuYWJsZWQgYW5kIGNhY2hlZCwgdGhlbiBhIHVzZXIgY291bGQgY3JhZnQgYSBVUkwgd2hpY2ggcGVyZm9ybXMgc29tZSBtYWxpY2lvdXMgYWN0aW9uIHRvIGEgc2l0ZSB3aG9zZSBhdXRoZW50aWNhdGlvbiBpcyBhbHJlYWR5IHN0b3JlZCBpbiBhIGNvb2tpZS4gZS5nLiA8YSBocmVmPSJodHRwOi8vbWFpbC5leGFtcGxlLmNvbS9kZWxldGUtc3R1ZmYuY2dpIj5odHRwOi8vbWFpbC5leGFtcGxlLmNvbS9kZWxldGUtc3R1ZmYuY2dpPC9hPj9kZWxldGU9YWxsIEFwcHMgY2FuIG1pdGlnYXRlIGFnYWluc3QgdGhpcyBieSBkaXNhYmxpbmcgY29va2llcyBvciBjbGVhcmluZyB0aGVtIGJldHdlZW4gcmVxdWVzdHMuIAorPHAgY2xhc3M9ImxldmVsMSI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJEYW5nZXJvdXMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+RGFuZ2Vyb3VzIFVSTHM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U0NQIFVSTHMgY2FuIGNvbnRhaW4gcmF3IGNvbW1hbmRzIHdpdGhpbiB0aGUgc2NwOiBVUkwsIHdoaWNoIGlzIGEgc2lkZSBlZmZlY3Qgb2YgaG93IHRoZSBTQ1AgcHJvdG9jb2wgaXMgZGVzaWduZWQuIGUuZy4gc2NwOi8vdXNlcjpwYXNzQGhvc3QvYTtkYXRlICZndDsvdG1wL3Rlc3Q7IEFwcHMgbXVzdCBub3QgYWxsb3cgdW5zYW5pdGl6ZWQgU0NQOiBVUkxzIHRvIGJlIHBhc3NlZCBpbiBmb3IgZG93bmxvYWRzLiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iRGVuaWFsIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkRlbmlhbCBvZiBTZXJ2aWNlPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkEgbWFsaWNpb3VzIHNlcnZlciBjb3VsZCBjYXVzZSBsaWJjdXJsIHRvIGVmZmVjdGl2ZWx5IGhhbmcgYnkgc2VuZGluZyBhIHRyaWNrbGUgb2YgZGF0YSB0aHJvdWdoLCBvciBldmVuIG5vIGRhdGEgYXQgYWxsIGJ1dCBqdXN0IGtlZXBpbmcgdGhlIFRDUCBjb25uZWN0aW9uIG9wZW4uICBUaGlzIGNvdWxkIHJlc3VsdCBpbiBhIGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFjay4gVGhlIENVUkxPUFRfVElNRU9VVCBhbmQvb3IgQ1VSTE9QVF9MT1dfU1BFRURfTElNSVQgb3B0aW9ucyBjYW4gYmUgdXNlZCB0byBtaXRpZ2F0ZSBhZ2FpbnN0IHRoaXMuIAorPHAgY2xhc3M9ImxldmVsMSI+QSBtYWxpY2lvdXMgc2VydmVyIGNvdWxkIGNhdXNlIGxpYmN1cmwgdG8gZWZmZWN0aXZlbHkgaGFuZyBieSBzdGFydGluZyB0byBzZW5kIGRhdGEsIHRoZW4gc2V2ZXJpbmcgdGhlIGNvbm5lY3Rpb24gd2l0aG91dCBjbGVhbmx5IGNsb3NpbmcgdGhlIFRDUCBjb25uZWN0aW9uLiAgVGhlIGFwcCBjb3VsZCBpbnN0YWxsIGEgQ1VSTE9QVF9TT0NLT1BURlVOQ1RJT04gY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHNldCB0aGUgVENQIFNPX0tFRVBBTElWRSBvcHRpb24gdG8gbWl0aWdhdGUgYWdhaW5zdCB0aGlzLiBTZXR0aW5nIG9uZSBvZiB0aGUgdGltZW91dCBvcHRpb25zIHdvdWxkIGFsc28gd29yayBhZ2FpbnN0IHRoaXMgYXR0YWNrLiAKKzxwIGNsYXNzPSJsZXZlbDEiPkEgbWFsaWNpb3VzIHNlcnZlciBjb3VsZCBjYXVzZSBsaWJjdXJsIHRvIGRvd25sb2FkIGFuIGluZmluaXRlIGFtb3VudCBvZiBkYXRhLCBwb3RlbnRpYWxseSBjYXVzaW5nIGFsbCBvZiBtZW1vcnkgb3IgZGlzayB0byBiZSBmaWxsZWQuIFNldHRpbmcgdGhlIENVUkxPUFRfTUFYRklMRVNJWkVfTEFSR0Ugb3B0aW9uIGlzIG5vdCBzdWZmaWNpZW50IHRvIGd1YXJkIGFnYWluc3QgdGhpcy4gSW5zdGVhZCwgdGhlIGFwcCBzaG91bGQgbW9uaXRvciB0aGUgYW1vdW50IG9mIGRhdGEgcmVjZWl2ZWQgd2l0aGluIHRoZSB3cml0ZSBvciBwcm9ncmVzcyBjYWxsYmFjayBhbmQgYWJvcnQgb25jZSB0aGUgbGltaXQgaXMgcmVhY2hlZC4gCis8cCBjbGFzcz0ibGV2ZWwxIj5BIG1hbGljaW91cyBIVFRQIHNlcnZlciBjb3VsZCBjYXVzZSBhbiBpbmZpbml0ZSByZWRpcmVjdGlvbiBsb29wLCBjYXVzaW5nIGEgZGVuaWFsLW9mLXNlcnZpY2UuIFRoaXMgY2FuIGJlIG1pdGlnYXRlZCBieSB1c2luZyB0aGUgQ1VSTE9QVF9NQVhSRURJUlMgb3B0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iQXJiaXRyYXJ5Ij48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPkFyYml0cmFyeSBIZWFkZXJzPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlVzZXItc3VwcGxpZWQgZGF0YSBtdXN0IGJlIHNhbml0aXplZCB3aGVuIHVzZWQgaW4gb3B0aW9ucyBsaWtlIENVUkxPUFRfVVNFUkFHRU5ULCBDVVJMT1BUX0hUVFBIRUFERVIsIENVUkxPUFRfUE9TVEZJRUxEUyBhbmQgb3RoZXJzIHRoYXQgYXJlIHVzZWQgdG8gZ2VuZXJhdGUgc3RydWN0dXJlZCBkYXRhLiBDaGFyYWN0ZXJzIGxpa2UgZW1iZWRkZWQgY2FycmlhZ2UgcmV0dXJucyBvciBhbXBlcnNhbmRzIGNvdWxkIGFsbG93IHRoZSB1c2VyIHRvIGNyZWF0ZSBhZGRpdGlvbmFsIGhlYWRlcnMgb3IgZmllbGRzIHRoYXQgY291bGQgY2F1c2UgbWFsaWNpb3VzIHRyYW5zYWN0aW9ucy4gCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IlNlcnZlci1zdXBwbGllZCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5TZXJ2ZXItc3VwcGxpZWQgTmFtZXM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QSBzZXJ2ZXIgY2FuIHN1cHBseSBkYXRhIHdoaWNoIHRoZSBhcHBsaWNhdGlvbiBtYXksIGluIHNvbWUgY2FzZXMsIHVzZSBhcyBhIGZpbGUgbmFtZS4gVGhlIGN1cmwgY29tbWFuZC1saW5lIHRvb2wgZG9lcyB0aGlzIHdpdGggLS1yZW1vdGUtaGVhZGVyLW5hbWUsIHVzaW5nIHRoZSBDb250ZW50LWRpc3Bvc2l0aW9uOiBoZWFkZXIgdG8gZ2VuZXJhdGUgYSBmaWxlIG5hbWUuICBBbiBhcHBsaWNhdGlvbiBjb3VsZCBhbHNvIHVzZSBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMIHRvIGdlbmVyYXRlIGEgZmlsZSBuYW1lIGZyb20gYSBzZXJ2ZXItc3VwcGxpZWQgcmVkaXJlY3QgVVJMLiBTcGVjaWFsIGNhcmUgbXVzdCBiZSB0YWtlbiB0byBzYW5pdGl6ZSBzdWNoIG5hbWVzIHRvIGF2b2lkIHRoZSBwb3NzaWJpbGl0eSBvZiBhIG1hbGljaW91cyBzZXJ2ZXIgc3VwcGx5aW5nIG9uZSBsaWtlICIvZXRjL3Bhc3N3ZCIsICJhdXRvZXhlYy5iYXQiIG9yIGV2ZW4gIi5iYXNocmMiLiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iU2VydmVyIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPlNlcnZlciBDZXJ0aWZpY2F0ZXM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+QSBzZWN1cmUgYXBwbGljYXRpb24gc2hvdWxkIG5ldmVyIHVzZSB0aGUgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiBvcHRpb24gdG8gZGlzYWJsZSBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uLiBUaGVyZSBhcmUgbnVtZXJvdXMgYXR0YWNrcyB0aGF0IGFyZSBlbmFibGVkIGJ5IGFwcHMgdGhhdCBmYWlsIHRvIHByb3Blcmx5IHZhbGlkYXRlIHNlcnZlciBUTFMvU1NMIGNlcnRpZmljYXRlcywgdGh1cyBlbmFibGluZyBhIG1hbGljaW91cyBzZXJ2ZXIgdG8gc3Bvb2YgYSBsZWdpdGltYXRlIG9uZS4gSFRUUFMgd2l0aG91dCB2YWxpZGF0ZWQgY2VydGlmaWNhdGVzIGlzIHBvdGVudGlhbGx5IGFzIGluc2VjdXJlIGFzIGEgcGxhaW4gSFRUUCBjb25uZWN0aW9uLiAKKzxwIGNsYXNzPSJsZXZlbDEiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iU2hvd2luZyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5TaG93aW5nIFdoYXQgWW91IERvPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPk9uIGEgcmVsYXRlZCBpc3N1ZSwgYmUgYXdhcmUgdGhhdCBldmVuIGluIHNpdHVhdGlvbnMgbGlrZSB3aGVuIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggbGliY3VybCBhbmQgYXNrIHNvbWVvbmUgZm9yIGhlbHAsIGV2ZXJ5dGhpbmcgeW91IHJldmVhbCBpbiBvcmRlciB0byBnZXQgYmVzdCBwb3NzaWJsZSBoZWxwIG1pZ2h0IGFsc28gaW1wb3NlIGNlcnRhaW4gc2VjdXJpdHkgcmVsYXRlZCByaXNrcy4gSG9zdCBuYW1lcywgdXNlciBuYW1lcywgcGF0aHMsIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWNzLCBldGMgKG5vdCB0byBtZW50aW9uIHBhc3N3b3JkcyBvZiBjb3Vyc2UpIG1heSBpbiBmYWN0IGJlIHVzZWQgYnkgaW50cnVkZXJzIHRvIGdhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiBhIHBvdGVudGlhbCB0YXJnZXQuIAorPHAgY2xhc3M9ImxldmVsMSI+VG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB5b3UgbXVzdCBvZiBjb3Vyc2UgdXNlIHlvdXIgY29tbW9uIHNlbnNlLiBPZnRlbiwgeW91IGNhbiBqdXN0IGVkaXQgb3V0IHRoZSBzZW5zaXRpdmUgZGF0YSBvciBqdXN0IHNlYXJjaC9yZXBsYWNlIHlvdXIgdHJ1ZSBpbmZvcm1hdGlvbiB3aXRoIGZha2VkIGRhdGEuIAorPHAgY2xhc3M9ImxldmVsMSI+PGEgbmFtZT0iTXVsdGlwbGUiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPk11bHRpcGxlIFRyYW5zZmVycyBVc2luZyB0aGUgbXVsdGkgSW50ZXJmYWNlPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGVhc3kgaW50ZXJmYWNlIGFzIGRlc2NyaWJlZCBpbiBkZXRhaWwgaW4gdGhpcyBkb2N1bWVudCBpcyBhIHN5bmNocm9ub3VzIGludGVyZmFjZSB0aGF0IHRyYW5zZmVycyBvbmUgZmlsZSBhdCBhIHRpbWUgYW5kIGRvZXNuJ3QgcmV0dXJuIHVudGlsIGl0IGlzIGRvbmUuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIG11bHRpIGludGVyZmFjZSwgb24gdGhlIG90aGVyIGhhbmQsIGFsbG93cyB5b3VyIHByb2dyYW0gdG8gdHJhbnNmZXIgbXVsdGlwbGUgZmlsZXMgaW4gYm90aCBkaXJlY3Rpb25zIGF0IHRoZSBzYW1lIHRpbWUsIHdpdGhvdXQgZm9yY2luZyB5b3UgdG8gdXNlIG11bHRpcGxlIHRocmVhZHMuICBUaGUgbmFtZSBtaWdodCBtYWtlIGl0IHNlZW0gdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlIGlzIGZvciBtdWx0aS10aHJlYWRlZCBwcm9ncmFtcywgYnV0IHRoZSB0cnV0aCBpcyBhbG1vc3QgdGhlIHJldmVyc2UuICBUaGUgbXVsdGkgaW50ZXJmYWNlIGNhbiBhbGxvdyBhIHNpbmdsZS10aHJlYWRlZCBhcHBsaWNhdGlvbiB0byBwZXJmb3JtIHRoZSBzYW1lIGtpbmRzIG9mIG11bHRpcGxlLCBzaW11bHRhbmVvdXMgdHJhbnNmZXJzIHRoYXQgbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMgY2FuIHBlcmZvcm0uICBJdCBhbGxvd3MgbWFueSBvZiB0aGUgYmVuZWZpdHMgb2YgbXVsdGktdGhyZWFkZWQgdHJhbnNmZXJzIHdpdGhvdXQgdGhlIGNvbXBsZXhpdHkgb2YgbWFuYWdpbmcgYW5kIHN5bmNocm9uaXppbmcgbWFueSB0aHJlYWRzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRvIHVzZSB0aGlzIGludGVyZmFjZSwgeW91IGFyZSBiZXR0ZXIgb2ZmIGlmIHlvdSBmaXJzdCB1bmRlcnN0YW5kIHRoZSBiYXNpY3Mgb2YgaG93IHRvIHVzZSB0aGUgZWFzeSBpbnRlcmZhY2UuIFRoZSBtdWx0aSBpbnRlcmZhY2UgaXMgc2ltcGx5IGEgd2F5IHRvIG1ha2UgbXVsdGlwbGUgdHJhbnNmZXJzIGF0IHRoZSBzYW1lIHRpbWUgYnkgYWRkaW5nIHVwIG11bHRpcGxlIGVhc3kgaGFuZGxlcyBpbnRvIGEgIm11bHRpIHN0YWNrIi4gCis8cCBjbGFzcz0ibGV2ZWwwIj5Zb3UgY3JlYXRlIHRoZSBlYXN5IGhhbmRsZXMgeW91IHdhbnQgYW5kIHlvdSBzZXQgYWxsIHRoZSBvcHRpb25zIGp1c3QgbGlrZSB5b3UgaGF2ZSBiZWVuIHRvbGQgYWJvdmUsIGFuZCB0aGVuIHlvdSBjcmVhdGUgYSBtdWx0aSBoYW5kbGUgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9pbml0Lmh0bWwiPmN1cmxfbXVsdGlfaW5pdCgzKTwvYT4gYW5kIGFkZCBhbGwgdGhvc2UgZWFzeSBoYW5kbGVzIHRvIHRoYXQgbXVsdGkgaGFuZGxlIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfYWRkX2hhbmRsZS5odG1sIj5jdXJsX211bHRpX2FkZF9oYW5kbGUoMyk8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4geW91J3ZlIGFkZGVkIHRoZSBoYW5kbGVzIHlvdSBoYXZlIGZvciB0aGUgbW9tZW50ICh5b3UgY2FuIHN0aWxsIGFkZCBuZXcgb25lcyBhdCBhbnkgdGltZSksIHlvdSBzdGFydCB0aGUgdHJhbnNmZXJzIGJ5IGNhbGxpbmcgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfcGVyZm9ybS5odG1sIj5jdXJsX211bHRpX3BlcmZvcm0oMyk8L2E+LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3BlcmZvcm0uaHRtbCI+Y3VybF9tdWx0aV9wZXJmb3JtKDMpPC9hPiBpcyBhc3luY2hyb25vdXMuIEl0IHdpbGwgb25seSBleGVjdXRlIGFzIGxpdHRsZSBhcyBwb3NzaWJsZSBhbmQgdGhlbiByZXR1cm4gYmFjayBjb250cm9sIHRvIHlvdXIgcHJvZ3JhbS4gSXQgaXMgZGVzaWduZWQgdG8gbmV2ZXIgYmxvY2suIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGJlc3QgdXNhZ2Ugb2YgdGhpcyBpbnRlcmZhY2UgaXMgd2hlbiB5b3UgZG8gYSBzZWxlY3QoKSBvbiBhbGwgcG9zc2libGUgZmlsZSBkZXNjcmlwdG9ycyBvciBzb2NrZXRzIHRvIGtub3cgd2hlbiB0byBjYWxsIGxpYmN1cmwgYWdhaW4uIFRoaXMgYWxzbyBtYWtlcyBpdCBlYXN5IGZvciB5b3UgdG8gd2FpdCBhbmQgcmVzcG9uZCB0byBhY3Rpb25zIG9uIHlvdXIgb3duIGFwcGxpY2F0aW9uJ3Mgc29ja2V0cy9oYW5kbGVzLiBZb3UgZmlndXJlIG91dCB3aGF0IHRvIHNlbGVjdCgpIGZvciBieSB1c2luZyA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9mZHNldC5odG1sIj5jdXJsX211bHRpX2Zkc2V0KDMpPC9hPiwgdGhhdCBmaWxscyBpbiBhIHNldCBvZiBmZF9zZXQgdmFyaWFibGVzIGZvciB5b3Ugd2l0aCB0aGUgcGFydGljdWxhciBmaWxlIGRlc2NyaXB0b3JzIGxpYmN1cmwgdXNlcyBmb3IgdGhlIG1vbWVudC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5XaGVuIHlvdSB0aGVuIGNhbGwgc2VsZWN0KCksIGl0J2xsIHJldHVybiB3aGVuIG9uZSBvZiB0aGUgZmlsZSBoYW5kbGVzIHNpZ25hbCBhY3Rpb24gYW5kIHlvdSB0aGVuIGNhbGwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfcGVyZm9ybS5odG1sIj5jdXJsX211bHRpX3BlcmZvcm0oMyk8L2E+IHRvIGFsbG93IGxpYmN1cmwgdG8gZG8gd2hhdCBpdCB3YW50cyB0byBkby4gVGFrZSBub3RlIHRoYXQgbGliY3VybCBkb2VzIGFsc28gZmVhdHVyZSBzb21lIHRpbWUtb3V0IGNvZGUgc28gd2UgYWR2aXNlIHlvdSB0byBuZXZlciB1c2UgdmVyeSBsb25nIHRpbWVvdXRzIG9uIHNlbGVjdCgpIGJlZm9yZSB5b3UgY2FsbCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9wZXJmb3JtLmh0bWwiPmN1cmxfbXVsdGlfcGVyZm9ybSgzKTwvYT4sIHdoaWNoIHRodXMgc2hvdWxkIGJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkgZXZlcnkgbm93IGFuZCB0aGVuIGV2ZW4gaWYgbm9uZSBvZiBpdHMgZmlsZSBkZXNjcmlwdG9ycyBoYXZlIHNpZ25hbGVkIHJlYWR5LiBBbm90aGVyIHByZWNhdXRpb24geW91IHNob3VsZCB1c2U6IGFsd2F5cyBjYWxsIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX2Zkc2V0Lmh0bWwiPmN1cmxfbXVsdGlfZmRzZXQoMyk8L2E+IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgc2VsZWN0KCkgY2FsbCBzaW5jZSB0aGUgY3VycmVudCBzZXQgb2YgZmlsZSBkZXNjcmlwdG9ycyBtYXkgY2hhbmdlIHdoZW4gY2FsbGluZyBhIGN1cmwgZnVuY3Rpb24uIAorPHAgY2xhc3M9ImxldmVsMCI+SWYgeW91IHdhbnQgdG8gc3RvcCB0aGUgdHJhbnNmZXIgb2Ygb25lIG9mIHRoZSBlYXN5IGhhbmRsZXMgaW4gdGhlIHN0YWNrLCB5b3UgY2FuIHVzZSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlLmh0bWwiPmN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgzKTwvYT4gdG8gcmVtb3ZlIGluZGl2aWR1YWwgZWFzeSBoYW5kbGVzLiBSZW1lbWJlciB0aGF0IGVhc3kgaGFuZGxlcyBzaG91bGQgYmUgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9jbGVhbnVwLmh0bWwiPmN1cmxfZWFzeV9jbGVhbnVwKDMpPC9hPmVkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4gYSB0cmFuc2ZlciB3aXRoaW4gdGhlIG11bHRpIHN0YWNrIGhhcyBmaW5pc2hlZCwgdGhlIGNvdW50ZXIgb2YgcnVubmluZyB0cmFuc2ZlcnMgKGFzIGZpbGxlZCBpbiBieSA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9wZXJmb3JtLmh0bWwiPmN1cmxfbXVsdGlfcGVyZm9ybSgzKTwvYT4pIHdpbGwgZGVjcmVhc2UuIFdoZW4gdGhlIG51bWJlciByZWFjaGVzIHplcm8sIGFsbCB0cmFuc2ZlcnMgYXJlIGRvbmUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfbXVsdGlfaW5mb19yZWFkLmh0bWwiPmN1cmxfbXVsdGlfaW5mb19yZWFkKDMpPC9hPiBjYW4gYmUgdXNlZCB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgY29tcGxldGVkIHRyYW5zZmVycy4gSXQgdGhlbiByZXR1cm5zIHRoZSBDVVJMY29kZSBmb3IgZWFjaCBlYXN5IHRyYW5zZmVyLCB0byBhbGxvdyB5b3UgdG8gZmlndXJlIG91dCBzdWNjZXNzIG9uIGVhY2ggaW5kaXZpZHVhbCB0cmFuc2Zlci4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJTU0wiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNTTCwgQ2VydGlmaWNhdGVzIGFuZCBPdGhlciBUcmlja3M8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4mbmJzcDtbIHNlZWRpbmcsIHBhc3N3b3Jkcywga2V5cywgY2VydGlmaWNhdGVzLCBFTkdJTkUsIGNhIGNlcnRzIF0gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJTaGFyaW5nIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5TaGFyaW5nIERhdGEgQmV0d2VlbiBFYXN5IEhhbmRsZXM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+WW91IGNhbiBzaGFyZSBzb21lIGRhdGEgYmV0d2VlbiBlYXN5IGhhbmRsZXMgd2hlbiB0aGUgZWFzeSBpbnRlcmZhY2UgaXMgdXNlZCwgYW5kIHNvbWUgZGF0YSBpcyBzaGFyZSBhdXRvbWF0aWNhbGx5IHdoZW4geW91IHVzZSB0aGUgbXVsdGkgaW50ZXJmYWNlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPldoZW4geW91IGFkZCBlYXN5IGhhbmRsZXMgdG8gYSBtdWx0aSBoYW5kbGUsIHRoZXNlIGVhc3kgaGFuZGxlcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2hhcmUgYSBsb3Qgb2YgdGhlIGRhdGEgdGhhdCBvdGhlcndpc2Ugd291bGQgYmUga2VwdCBvbiBhIHBlci1lYXN5IGhhbmRsZSBiYXNpcyB3aGVuIHRoZSBlYXN5IGludGVyZmFjZSBpcyB1c2VkLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBETlMgY2FjaGUgaXMgc2hhcmVkIGJldHdlZW4gaGFuZGxlcyB3aXRoaW4gYSBtdWx0aSBoYW5kbGUsIG1ha2luZyBzdWJzZXF1ZW50IG5hbWUgcmVzb2x2aW5ncyBmYXN0ZXIgYW5kIHRoZSBjb25uZWN0aW9uIHBvb2wgdGhhdCBpcyBrZXB0IHRvIGJldHRlciBhbGxvdyBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zIGFuZCBjb25uZWN0aW9uIHJlLXVzZSBpcyBzaGFyZWQuIElmIHlvdSdyZSB1c2luZyB0aGUgZWFzeSBpbnRlcmZhY2UsIHlvdSBjYW4gc3RpbGwgc2hhcmUgdGhlc2UgYmV0d2VlbiBzcGVjaWZpYyBlYXN5IGhhbmRsZXMgYnkgdXNpbmcgdGhlIHNoYXJlIGludGVyZmFjZSwgc2VlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGliY3VybC1zaGFyZSgzKTwvc3Bhbj4uIAorPHAgY2xhc3M9ImxldmVsMCI+U29tZSB0aGluZ3MgYXJlIG5ldmVyIHNoYXJlZCBhdXRvbWF0aWNhbGx5LCBub3Qgd2l0aGluIG11bHRpIGhhbmRsZXMsIGxpa2UgZm9yIGV4YW1wbGUgY29va2llcyBzbyB0aGUgb25seSB3YXkgdG8gc2hhcmUgdGhhdCBpcyB3aXRoIHRoZSBzaGFyZSBpbnRlcmZhY2UuIDxhIG5hbWU9IkZvb3Rub3RlcyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+Rm9vdG5vdGVzPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSIxIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPlsxXTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5saWJjdXJsIDcuMTAuMyBhbmQgbGF0ZXIgaGF2ZSB0aGUgYWJpbGl0eSB0byBzd2l0Y2ggb3ZlciB0byBjaHVua2VkIFRyYW5zZmVyLUVuY29kaW5nIGluIGNhc2VzIHdoZXJlIEhUVFAgdXBsb2FkcyBhcmUgZG9uZSB3aXRoIGRhdGEgb2YgYW4gdW5rbm93biBzaXplLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjIiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+WzJdPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgaGFwcGVucyBvbiBXaW5kb3dzIG1hY2hpbmVzIHdoZW4gbGliY3VybCBpcyBidWlsdCBhbmQgdXNlZCBhcyBhIERMTC4gSG93ZXZlciwgeW91IGNhbiBzdGlsbCBkbyB0aGlzIG9uIFdpbmRvd3MgaWYgeW91IGxpbmsgd2l0aCBhIHN0YXRpYyBsaWJyYXJ5LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IjMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+WzNdPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoZSBjdXJsLWNvbmZpZyB0b29sIGlzIGdlbmVyYXRlZCBhdCBidWlsZC10aW1lIChvbiBVTklYLWxpa2Ugc3lzdGVtcykgYW5kIHNob3VsZCBiZSBpbnN0YWxsZWQgd2l0aCB0aGUgJ21ha2UgaW5zdGFsbCcgb3Igc2ltaWxhciBpbnN0cnVjdGlvbiB0aGF0IGluc3RhbGxzIHRoZSBsaWJyYXJ5LCBoZWFkZXIgZmlsZXMsIG1hbiBwYWdlcyBldGMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iNCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5bNF08L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+VGhpcyBiZWhhdmlvciB3YXMgZGlmZmVyZW50IGluIHZlcnNpb25zIGJlZm9yZSA3LjE3LjAsIHdoZXJlIHN0cmluZ3MgaGFkIHRvIHJlbWFpbiB2YWxpZCBwYXN0IHRoZSBlbmQgb2YgdGhlIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwiPmN1cmxfZWFzeV9zZXRvcHQoMyk8L2E+IGNhbGwuIDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtdHV0b3JpYWwucGRmIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwtdHV0b3JpYWwucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NmFlZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC10dXRvcmlhbC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwuMyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJkY2Q3OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLjMKQEAgLTAsMCArMSwyMjIgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlRIIGxpYmN1cmwgMyAiMTkgTWFyY2ggMjAwMiIgImxpYmN1cmwgNy45LjYiICJsaWJjdXJsIG92ZXJ2aWV3IgorLlNIIE5BTUUKK2xpYmN1cmwgXC0gY2xpZW50LXNpZGUgVVJMIHRyYW5zZmVycworLlNIIERFU0NSSVBUSU9OCitUaGlzIGlzIGEgc2hvcnQgb3ZlcnZpZXcgb24gaG93IHRvIHVzZSBsaWJjdXJsIGluIHlvdXIgQyBwcm9ncmFtcy4gVGhlcmUgYXJlCitzcGVjaWZpYyBtYW4gcGFnZXMgZm9yIGVhY2ggZnVuY3Rpb24gbWVudGlvbmVkIGluIGhlcmUuIFRoZXJlIGFyZSBhbHNvIHRoZQorXGZJbGliY3VybC1lYXN5KDMpXGZQIG1hbiBwYWdlLCB0aGUgXGZJbGliY3VybC1tdWx0aSgzKVxmUCBtYW4gcGFnZSwgdGhlCitcZklsaWJjdXJsLXNoYXJlKDMpXGZQIG1hbiBwYWdlIGFuZCB0aGUgXGZJbGliY3VybC10dXRvcmlhbCgzKVxmUCBtYW4gcGFnZSBmb3IKK2luLWRlcHRoIHVuZGVyc3RhbmRpbmcgb24gaG93IHRvIHByb2dyYW0gd2l0aCBsaWJjdXJsLgorCitUaGVyZSBhcmUgbW9yZSB0aGFuIHRoaXJ0eSBjdXN0b20gYmluZGluZ3MgYXZhaWxhYmxlIHRoYXQgYnJpbmcgbGliY3VybCBhY2Nlc3MKK3RvIHlvdXIgZmF2b3VyaXRlIGxhbmd1YWdlLiBMb29rIGVsc2V3aGVyZSBmb3IgZG9jdW1lbnRhdGlvbiBvbiB0aG9zZS4KKworbGliY3VybCBoYXMgYSBnbG9iYWwgY29uc3RhbnQgZW52aXJvbm1lbnQgdGhhdCB5b3UgbXVzdCBzZXQgdXAgYW5kCittYWludGFpbiB3aGlsZSB1c2luZyBsaWJjdXJsLiAgVGhpcyBlc3NlbnRpYWxseSBtZWFucyB5b3UgY2FsbAorXGZJY3VybF9nbG9iYWxfaW5pdCgzKVxmUCBhdCB0aGUgc3RhcnQgb2YgeW91ciBwcm9ncmFtIGFuZAorXGZJY3VybF9nbG9iYWxfY2xlYW51cCgzKVxmUCBhdCB0aGUgZW5kLiAgU2VlIEdMT0JBTCBDT05TVEFOVFMgYmVsb3cKK2ZvciBkZXRhaWxzLgorCitUbyB0cmFuc2ZlciBmaWxlcywgeW91IGFsd2F5cyBzZXQgdXAgYW4gImVhc3kgaGFuZGxlIiB1c2luZworXGZJY3VybF9lYXN5X2luaXQoMylcZlAsIGJ1dCB3aGVuIHlvdSB3YW50IHRoZSBmaWxlKHMpIHRyYW5zZmVycmVkIHlvdSBoYXZlCit0aGUgb3B0aW9uIG9mIHVzaW5nIHRoZSAiZWFzeSIgaW50ZXJmYWNlLCBvciB0aGUgIm11bHRpIiBpbnRlcmZhY2UuCisKK1RoZSBlYXN5IGludGVyZmFjZSBpcyBhIHN5bmNocm9ub3VzIGludGVyZmFjZSB3aXRoIHdoaWNoIHlvdSBjYWxsCitcZkljdXJsX2Vhc3lfcGVyZm9ybSgzKVxmUCBhbmQgbGV0IGl0IHBlcmZvcm0gdGhlIHRyYW5zZmVyLiBXaGVuIGl0IGlzCitjb21wbGV0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuZCB5b3UgY2FuIGNvbnRpbnVlLiBNb3JlIGRldGFpbHMgYXJlIGZvdW5kIGluCit0aGUgXGZJbGliY3VybC1lYXN5KDMpXGZQIG1hbiBwYWdlLgorCitUaGUgbXVsdGkgaW50ZXJmYWNlIG9uIHRoZSBvdGhlciBoYW5kIGlzIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UsIHRoYXQgeW91CitjYWxsIGFuZCB0aGF0IHBlcmZvcm1zIG9ubHkgYSBsaXR0bGUgcGllY2Ugb2YgdGhlIHRyYW5zZmVyIG9uIGVhY2ggaW52b2tlLiBJdAoraXMgcGVyZmVjdCBpZiB5b3Ugd2FudCB0byBkbyB0aGluZ3Mgd2hpbGUgdGhlIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzLCBvcgorc2ltaWxhci4gVGhlIG11bHRpIGludGVyZmFjZSBhbGxvd3MgeW91IHRvIHNlbGVjdCgpIG9uIGxpYmN1cmwgYWN0aW9uLCBhbmQKK2V2ZW4gdG8gZWFzaWx5IGRvd25sb2FkIG11bHRpcGxlIGZpbGVzIHNpbXVsdGFuZW91c2x5IHVzaW5nIGEgc2luZ2xlIHRocmVhZC4gU2VlIGZ1cnRoZXIgZGV0YWlscyBpbiB0aGUgXGZJbGliY3VybC1tdWx0aSgzKVxmUCBtYW4gcGFnZS4KKworWW91IGNhbiBoYXZlIG11bHRpcGxlIGVhc3kgaGFuZGxlcyBzaGFyZSBjZXJ0YWluIGRhdGEsIGV2ZW4gaWYgdGhleSBhcmUgdXNlZAoraW4gZGlmZmVyZW50IHRocmVhZHMuIFRoaXMgbWFnaWMgaXMgc2V0dXAgdXNpbmcgdGhlIHNoYXJlIGludGVyZmFjZSwgYXMKK2Rlc2NyaWJlZCBpbiB0aGUgXGZJbGliY3VybC1zaGFyZSgzKVxmUCBtYW4gcGFnZS4KKworVGhlcmUgaXMgYWxzbyBhIHNlcmllcyBvZiBvdGhlciBoZWxwZnVsIGZ1bmN0aW9ucyB0byB1c2UsIGluY2x1ZGluZyB0aGVzZToKKy5SUworLklQIGN1cmxfdmVyc2lvbl9pbmZvKCkKK2dldHMgZGV0YWlsZWQgbGliY3VybCAoYW5kIG90aGVyIHVzZWQgbGlicmFyaWVzKSB2ZXJzaW9uIGluZm8KKy5JUCBjdXJsX2dldGRhdGUoKQorY29udmVydHMgYSBkYXRlIHN0cmluZyB0byB0aW1lX3QKKy5JUCBjdXJsX2Vhc3lfZ2V0aW5mbygpCitnZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBwZXJmb3JtZWQgdHJhbnNmZXIKKy5JUCBjdXJsX2Zvcm1hZGQoKQoraGVscHMgYnVpbGRpbmcgYW4gSFRUUCBmb3JtIFBPU1QKKy5JUCBjdXJsX2Zvcm1mcmVlKCkKK2ZyZWUgYSBsaXN0IGJ1aWx0IHdpdGggXGZJY3VybF9mb3JtYWRkKDMpXGZQCisuSVAgY3VybF9zbGlzdF9hcHBlbmQoKQorYnVpbGRzIGEgbGlua2VkIGxpc3QKKy5JUCBjdXJsX3NsaXN0X2ZyZWVfYWxsKCkKK2ZyZWVzIGEgd2hvbGUgY3VybF9zbGlzdAorLlJFCisKKy5TSCAiTElOS0lORyBXSVRIIExJQkNVUkwiCitPbiB1bml4LWxpa2UgbWFjaGluZXMsIHRoZXJlJ3MgYSB0b29sIG5hbWVkIGN1cmwtY29uZmlnIHRoYXQgZ2V0cyBpbnN0YWxsZWQKK3dpdGggdGhlIHJlc3Qgb2YgdGhlIGN1cmwgc3R1ZmYgd2hlbiAnbWFrZSBpbnN0YWxsJyBpcyBwZXJmb3JtZWQuCisKK2N1cmwtY29uZmlnIGlzIGFkZGVkIHRvIG1ha2UgaXQgZWFzaWVyIGZvciBhcHBsaWNhdGlvbnMgdG8gbGluayB3aXRoIGxpYmN1cmwKK2FuZCBkZXZlbG9wZXJzIHRvIGxlYXJuIGFib3V0IGxpYmN1cmwgYW5kIGhvdyB0byB1c2UgaXQuCisKK1J1biAnY3VybC1jb25maWcgLS1saWJzJyB0byBnZXQgdGhlIChhZGRpdGlvbmFsKSBsaW5rZXIgb3B0aW9ucyB5b3UgbmVlZCB0bworbGluayB3aXRoIHRoZSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgbGliY3VybCB5b3UndmUgaW5zdGFsbGVkLiBTZWUgdGhlCitcZkljdXJsLWNvbmZpZygxKVxmUCBtYW4gcGFnZSBmb3IgZnVydGhlciBkZXRhaWxzLgorCitVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbSB0aGF0IHNoaXAgbGliY3VybCBhcyBwYXJ0IG9mIHRoZWlyIGRpc3RyaWJ1dGlvbnMKK29mdGVuIGRvbid0IHByb3ZpZGUgdGhlIGN1cmwtY29uZmlnIHRvb2wsIGJ1dCBzaW1wbHkgaW5zdGFsbCB0aGUgbGlicmFyeSBhbmQKK2hlYWRlcnMgaW4gdGhlIGNvbW1vbiBwYXRoIGZvciB0aGlzIHB1cnBvc2UuCisKKy5TSCAiTElCQ1VSTCBTWU1CT0wgTkFNRVMiCitBbGwgcHVibGljIGZ1bmN0aW9ucyBpbiB0aGUgbGliY3VybCBpbnRlcmZhY2UgYXJlIHByZWZpeGVkIHdpdGggJ2N1cmxfJyAod2l0aAorYSBsb3dlcmNhc2UgYykuIFlvdSBjYW4gZmluZCBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGxpYnJhcnkgc291cmNlIGNvZGUsIGJ1dAorb3RoZXIgcHJlZml4ZXMgaW5kaWNhdGUgdGhhdCB0aGUgZnVuY3Rpb25zIGFyZSBwcml2YXRlIGFuZCBtYXkgY2hhbmdlIHdpdGhvdXQKK2Z1cnRoZXIgbm90aWNlIGluIHRoZSBuZXh0IHJlbGVhc2UuCisKK09ubHkgdXNlIGRvY3VtZW50ZWQgZnVuY3Rpb25zIGFuZCBmdW5jdGlvbmFsaXR5IQorLlNIICJQT1JUQUJJTElUWSIKK2xpYmN1cmwgd29ya3MKKy5CIGV4YWN0bHkKK3RoZSBzYW1lLCBvbiBhbnkgb2YgdGhlIHBsYXRmb3JtcyBpdCBjb21waWxlcyBhbmQgYnVpbGRzIG9uLgorLlNIICJUSFJFQURTIgorTmV2ZXIgZXZlciBjYWxsIGN1cmwtZnVuY3Rpb25zIHNpbXVsdGFuZW91c2x5IHVzaW5nIHRoZSBzYW1lIGhhbmRsZSBmcm9tCitzZXZlcmFsIHRocmVhZHMuIGxpYmN1cmwgaXMgdGhyZWFkLXNhZmUgYW5kIGNhbiBiZSB1c2VkIGluIGFueSBudW1iZXIgb2YKK3RocmVhZHMsIGJ1dCB5b3UgbXVzdCB1c2Ugc2VwYXJhdGUgY3VybCBoYW5kbGVzIGlmIHlvdSB3YW50IHRvIHVzZSBsaWJjdXJsIGluCittb3JlIHRoYW4gb25lIHRocmVhZCBzaW11bHRhbmVvdXNseS4KKworVGhlIGdsb2JhbCBlbnZpcm9ubWVudCBmdW5jdGlvbnMgYXJlIG5vdCB0aHJlYWQtc2FmZS4gIFNlZSBHTE9CQUwgQ09OU1RBTlRTCitiZWxvdyBmb3IgZGV0YWlscy4KKworLlNIICJQRVJTSVNURU5UIENPTk5FQ1RJT05TIgorUGVyc2lzdGVudCBjb25uZWN0aW9ucyBtZWFucyB0aGF0IGxpYmN1cmwgY2FuIHJlLXVzZSB0aGUgc2FtZSBjb25uZWN0aW9uIGZvcgorc2V2ZXJhbCB0cmFuc2ZlcnMsIGlmIHRoZSBjb25kaXRpb25zIGFyZSByaWdodC4KKworbGliY3VybCB3aWxsIFxmQmFsd2F5c1xmUCBhdHRlbXB0IHRvIHVzZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLiBXaGVuZXZlciB5b3UKK3VzZSBcZkljdXJsX2Vhc3lfcGVyZm9ybSgzKVxmUCBvciBcZkljdXJsX211bHRpX3BlcmZvcm0oMylcZlAsIGxpYmN1cmwgd2lsbAorYXR0ZW1wdCB0byB1c2UgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiB0byBkbyB0aGUgdHJhbnNmZXIsIGFuZCBpZiBub25lIGV4aXN0cworaXQnbGwgb3BlbiBhIG5ldyBvbmUgdGhhdCB3aWxsIGJlIHN1YmplY3QgZm9yIHJlLXVzZSBvbiBhIHBvc3NpYmxlIGZvbGxvd2luZworY2FsbCB0byBcZkljdXJsX2Vhc3lfcGVyZm9ybSgzKVxmUCBvciBcZkljdXJsX211bHRpX3BlcmZvcm0oMylcZlAuCisKK1RvIGFsbG93IGxpYmN1cmwgdG8gdGFrZSBmdWxsIGFkdmFudGFnZSBvZiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLCB5b3Ugc2hvdWxkCitkbyBhcyBtYW55IG9mIHlvdXIgZmlsZSB0cmFuc2ZlcnMgYXMgcG9zc2libGUgdXNpbmcgdGhlIHNhbWUgY3VybCBoYW5kbGUuIFdoZW4KK3lvdSBjYWxsIFxmSWN1cmxfZWFzeV9jbGVhbnVwKDMpXGZQLCBhbGwgdGhlIHBvc3NpYmx5IG9wZW4gY29ubmVjdGlvbnMgaGVsZCBieQorbGliY3VybCB3aWxsIGJlIGNsb3NlZCBhbmQgZm9yZ290dGVuLgorCitOb3RlIHRoYXQgdGhlIG9wdGlvbnMgc2V0IHdpdGggXGZJY3VybF9lYXN5X3NldG9wdCgzKVxmUCB3aWxsIGJlIHVzZWQgb24KK2V2ZXJ5IHJlcGVhdGVkIFxmSWN1cmxfZWFzeV9wZXJmb3JtKDMpXGZQIGNhbGwuCisKKy5TSCAiR0xPQkFMIENPTlNUQU5UUyIKK1RoZXJlIGFyZSBhIHZhcmlldHkgb2YgY29uc3RhbnRzIHRoYXQgbGliY3VybCB1c2VzLCBtYWlubHkgdGhyb3VnaCBpdHMKK2ludGVybmFsIHVzZSBvZiBvdGhlciBsaWJyYXJpZXMsIHdoaWNoIGFyZSB0b28gY29tcGxpY2F0ZWQgZm9yIHRoZQorbGlicmFyeSBsb2FkZXIgdG8gc2V0IHVwLiAgVGhlcmVmb3JlLCBhIHByb2dyYW0gbXVzdCBjYWxsIGEgbGlicmFyeQorZnVuY3Rpb24gYWZ0ZXIgdGhlIHByb2dyYW0gaXMgbG9hZGVkIGFuZCBydW5uaW5nIHRvIGZpbmlzaCBzZXR0aW5nIHVwCit0aGUgbGlicmFyeSBjb2RlLiAgRm9yIGV4YW1wbGUsIHdoZW4gbGliY3VybCBpcyBidWlsdCBmb3IgU1NMCitjYXBhYmlsaXR5IHZpYSB0aGUgR05VIFRMUyBsaWJyYXJ5LCB0aGVyZSBpcyBhbiBlbGFib3JhdGUgdHJlZSBpbnNpZGUKK3RoYXQgbGlicmFyeSB0aGF0IGRlc2NyaWJlcyB0aGUgU1NMIHByb3RvY29sLgorCitcZkljdXJsX2dsb2JhbF9pbml0KClcZlAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgeW91IG11c3QgY2FsbC4gIFRoaXMgbWF5CithbGxvY2F0ZSByZXNvdXJjZXMgKGUuZy4gdGhlIG1lbW9yeSBmb3IgdGhlIEdOVSBUTFMgdHJlZSBtZW50aW9uZWQKK2Fib3ZlKSwgc28gdGhlIGNvbXBhbmlvbiBmdW5jdGlvbiBcZkljdXJsX2dsb2JhbF9jbGVhbnVwKClcZlAgcmVsZWFzZXMKK3RoZW0uCisKK1RoZSBiYXNpYyBydWxlIGZvciBjb25zdHJ1Y3RpbmcgYSBwcm9ncmFtIHRoYXQgdXNlcyBsaWJjdXJsIGlzIHRoaXM6CitDYWxsIFxmSWN1cmxfZ2xvYmFsX2luaXQoKVxmUCwgd2l0aCBhIFxmSUNVUkxfR0xPQkFMX0FMTFxmUCBhcmd1bWVudCwKK2ltbWVkaWF0ZWx5IGFmdGVyIHRoZSBwcm9ncmFtIHN0YXJ0cywgd2hpbGUgaXQgaXMgc3RpbGwgb25seSBvbmUKK3RocmVhZCBhbmQgYmVmb3JlIGl0IHVzZXMgbGliY3VybCBhdCBhbGwuICBDYWxsCitcZkljdXJsX2dsb2JhbF9jbGVhbnVwKClcZlAgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBwcm9ncmFtIGV4aXRzLCB3aGVuCit0aGUgcHJvZ3JhbSBpcyBhZ2FpbiBvbmx5IG9uZSB0aHJlYWQgYW5kIGFmdGVyIGl0cyBsYXN0IHVzZSBvZgorbGliY3VybC4KKworWW91IGNhbiBjYWxsIGJvdGggb2YgdGhlc2UgbXVsdGlwbGUgdGltZXMsIGFzIGxvbmcgYXMgYWxsIGNhbGxzIG1lZXQKK3RoZXNlIHJlcXVpcmVtZW50cyBhbmQgdGhlIG51bWJlciBvZiBjYWxscyB0byBlYWNoIGlzIHRoZSBzYW1lLgorCitJdCBpc24ndCBhY3R1YWxseSByZXF1aXJlZCB0aGF0IHRoZSBmdW5jdGlvbnMgYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcKK2FuZCBlbmQgb2YgdGhlIHByb2dyYW0gLS0gdGhhdCdzIGp1c3QgdXN1YWxseSB0aGUgZWFzaWVzdCB3YXkgdG8gZG8gaXQuCitJdCBcZklpc1xmUCByZXF1aXJlZCB0aGF0IHRoZSBmdW5jdGlvbnMgYmUgY2FsbGVkIHdoZW4gbm8gb3RoZXIgdGhyZWFkCitpbiB0aGUgcHJvZ3JhbSBpcyBydW5uaW5nLgorCitUaGVzZSBnbG9iYWwgY29uc3RhbnQgZnVuY3Rpb25zIGFyZSBcZklub3QgdGhyZWFkIHNhZmVcZlAsIHNvIHlvdSBtdXN0Citub3QgY2FsbCB0aGVtIHdoZW4gYW55IG90aGVyIHRocmVhZCBpbiB0aGUgcHJvZ3JhbSBpcyBydW5uaW5nLiAgSXQKK2lzbid0IGdvb2QgZW5vdWdoIHRoYXQgbm8gb3RoZXIgdGhyZWFkIGlzIHVzaW5nIGxpYmN1cmwgYXQgdGhlIHRpbWUsCitiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBpbnRlcm5hbGx5IGNhbGwgc2ltaWxhciBmdW5jdGlvbnMgb2Ygb3RoZXIKK2xpYnJhcmllcywgYW5kIHRob3NlIGZ1bmN0aW9ucyBhcmUgc2ltaWxhcmx5IHRocmVhZC11bnNhZmUuICBZb3UgY2FuJ3QKK2dlbmVyYWxseSBrbm93IHdoYXQgdGhlc2UgbGlicmFyaWVzIGFyZSwgb3Igd2hldGhlciBvdGhlciB0aHJlYWRzIGFyZQordXNpbmcgdGhlbS4KKworVGhlIGdsb2JhbCBjb25zdGFudCBzaXR1YXRpb24gbWVyaXRzIHNwZWNpYWwgY29uc2lkZXJhdGlvbiB3aGVuIHRoZQorY29kZSB5b3UgYXJlIHdyaXRpbmcgdG8gdXNlIGxpYmN1cmwgaXMgbm90IHRoZSBtYWluIHByb2dyYW0sIGJ1dCByYXRoZXIKK2EgbW9kdWxhciBwaWVjZSBvZiBhIHByb2dyYW0sIGUuZy4gYW5vdGhlciBsaWJyYXJ5LiAgQXMgYSBtb2R1bGUsCit5b3VyIGNvZGUgZG9lc24ndCBrbm93IGFib3V0IG90aGVyIHBhcnRzIG9mIHRoZSBwcm9ncmFtIC0tIGl0IGRvZXNuJ3QKK2tub3cgd2hldGhlciB0aGV5IHVzZSBsaWJjdXJsIG9yIG5vdC4gIEFuZCBpdHMgY29kZSBkb2Vzbid0IG5lY2Vzc2FyaWx5CitydW4gYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHdob2xlIHByb2dyYW0uCisKK0EgbW9kdWxlIGxpa2UgdGhpcyBtdXN0IGhhdmUgZ2xvYmFsIGNvbnN0YW50IGZ1bmN0aW9ucyBvZiBpdHMgb3duLAoranVzdCBsaWtlIFxmSWN1cmxfZ2xvYmFsX2luaXQoKVxmUCBhbmQgXGZJY3VybF9nbG9iYWxfY2xlYW51cCgpXGZQLgorVGhlIG1vZHVsZSB0aHVzIGhhcyBjb250cm9sIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgcHJvZ3JhbQorYW5kIGhhcyBhIHBsYWNlIHRvIGNhbGwgdGhlIGxpYmN1cmwgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGlmIG11bHRpcGxlCittb2R1bGVzIGluIHRoZSBwcm9ncmFtIHVzZSBsaWJjdXJsLCB0aGV5IGFsbCB3aWxsIHNlcGFyYXRlbHkgY2FsbCB0aGUKK2xpYmN1cmwgZnVuY3Rpb25zLCBhbmQgdGhhdCdzIE9LIGJlY2F1c2Ugb25seSB0aGUgZmlyc3QKK1xmSWN1cmxfZ2xvYmFsX2luaXQoKVxmUCBhbmQgdGhlIGxhc3QgXGZJY3VybF9nbG9iYWxfY2xlYW51cCgpXGZQIGluIGEKK3Byb2dyYW0gY2hhbmdlIGFueXRoaW5nLiAgKGxpYmN1cmwgdXNlcyBhIHJlZmVyZW5jZSBjb3VudCBpbiBzdGF0aWMKK21lbW9yeSkuCisKK0luIGEgQysrIG1vZHVsZSwgaXQgaXMgY29tbW9uIHRvIGRlYWwgd2l0aCB0aGUgZ2xvYmFsIGNvbnN0YW50CitzaXR1YXRpb24gYnkgZGVmaW5pbmcgYSBzcGVjaWFsIGNsYXNzIHRoYXQgcmVwcmVzZW50cyB0aGUgZ2xvYmFsCitjb25zdGFudCBlbnZpcm9ubWVudCBvZiB0aGUgbW9kdWxlLiAgQSBwcm9ncmFtIGFsd2F5cyBoYXMgZXhhY3RseSBvbmUKK29iamVjdCBvZiB0aGUgY2xhc3MsIGluIHN0YXRpYyBzdG9yYWdlLiAgVGhhdCB3YXksIHRoZSBwcm9ncmFtCithdXRvbWF0aWNhbGx5IGNhbGxzIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgb2JqZWN0IGFzIHRoZSBwcm9ncmFtCitzdGFydHMgdXAgYW5kIHRoZSBkZXN0cnVjdG9yIGFzIGl0IHRlcm1pbmF0ZXMuICBBcyB0aGUgYXV0aG9yIG9mIHRoaXMKK2xpYmN1cmwtdXNpbmcgbW9kdWxlLCB5b3UgY2FuIG1ha2UgdGhlIGNvbnN0cnVjdG9yIGNhbGwKK1xmSWN1cmxfZ2xvYmFsX2luaXQoKVxmUCBhbmQgdGhlIGRlc3RydWN0b3IgY2FsbAorXGZJY3VybF9nbG9iYWxfY2xlYW51cCgpXGZQIGFuZCBzYXRpc2Z5IGxpYmN1cmwncyByZXF1aXJlbWVudHMgd2l0aG91dAoreW91ciB1c2VyIGhhdmluZyB0byB0aGluayBhYm91dCBpdC4KKworXGZJY3VybF9nbG9iYWxfaW5pdCgpXGZQIGhhcyBhbiBhcmd1bWVudCB0aGF0IHRlbGxzIHdoYXQgcGFydGljdWxhcgorcGFydHMgb2YgdGhlIGdsb2JhbCBjb25zdGFudCBlbnZpcm9ubWVudCB0byBzZXQgdXAuICBJbiBvcmRlciB0bworc3VjY2Vzc2Z1bGx5IHVzZSBhbnkgdmFsdWUgZXhjZXB0IFxmSUNVUkxfR0xPQkFMX0FMTFxmUCAod2hpY2ggc2F5cyB0bworc2V0IHVwIHRoZSB3aG9sZSB0aGluZyksIHlvdSBtdXN0IGhhdmUgc3BlY2lmaWMga25vd2xlZGdlIG9mIGludGVybmFsCit3b3JraW5ncyBvZiBsaWJjdXJsIGFuZCBhbGwgb3RoZXIgcGFydHMgb2YgdGhlIHByb2dyYW0gb2Ygd2hpY2ggaXQgaXMKK3BhcnQuCisKK0Egc3BlY2lhbCBwYXJ0IG9mIHRoZSBnbG9iYWwgY29uc3RhbnQgZW52aXJvbm1lbnQgaXMgdGhlIGlkZW50aXR5IG9mCit0aGUgbWVtb3J5IGFsbG9jYXRvci4gIFxmSWN1cmxfZ2xvYmFsX2luaXQoKVxmUCBzZWxlY3RzIHRoZSBzeXN0ZW0KK2RlZmF1bHQgbWVtb3J5IGFsbG9jYXRvciwgYnV0IHlvdSBjYW4gdXNlIFxmSWN1cmxfZ2xvYmFsX2luaXRfbWVtKClcZlAKK3RvIHN1cHBseSBvbmUgb2YgeW91ciBvd24uICBIb3dldmVyLCB0aGVyZSBpcyBubyB3YXkgdG8gdXNlCitcZkljdXJsX2dsb2JhbF9pbml0X21lbSgpXGZQIGluIGEgbW9kdWxhciBwcm9ncmFtIC0tIGFsbCBtb2R1bGVzIGluCit0aGUgcHJvZ3JhbSB0aGF0IG1pZ2h0IHVzZSBsaWJjdXJsIHdvdWxkIGhhdmUgdG8gYWdyZWUgb24gb25lCithbGxvY2F0b3IuCisKK1RoZXJlIGlzIGEgZmFpbHNhZmUgaW4gbGliY3VybCB0aGF0IG1ha2VzIGl0IHVzYWJsZSBpbiBzaW1wbGUKK3NpdHVhdGlvbnMgd2l0aG91dCB5b3UgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHRoZSBnbG9iYWwgY29uc3RhbnQKK2Vudmlyb25tZW50IGF0IGFsbDogXGZJY3VybF9lYXN5X2luaXQoKVxmUCBzZXRzIHVwIHRoZSBlbnZpcm9ubWVudAoraXRzZWxmIGlmIGl0IGhhc24ndCBiZWVuIGRvbmUgeWV0LiAgVGhlIHJlc291cmNlcyBpdCBhY3F1aXJlcyB0byBkbyBzbworZ2V0IHJlbGVhc2VkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgcHJvZ3JhbQorZXhpdHMuCisKK1RoaXMgZmFpbHNhZmUgZmVhdHVyZSBleGlzdHMgbWFpbmx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGJlY2F1c2UKK3RoZXJlIHdhcyBhIHRpbWUgd2hlbiB0aGUgZ2xvYmFsIGZ1bmN0aW9ucyBkaWRuJ3QgZXhpc3QuICBCZWNhdXNlIGl0CitpcyBzdWZmaWNpZW50IG9ubHkgaW4gdGhlIHNpbXBsZXN0IG9mIHByb2dyYW1zLCBpdCBpcyBub3QgcmVjb21tZW5kZWQKK2ZvciBhbnkgcHJvZ3JhbSB0byByZWx5IG9uIGl0LgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwuaHRtbCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFjMDBmMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD48aGVhZD4KKzx0aXRsZT5saWJjdXJsIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPmxpYmN1cmwgLSBjbGllbnQtc2lkZSBVUkwgdHJhbnNmZXJzIDxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGlzIGEgc2hvcnQgb3ZlcnZpZXcgb24gaG93IHRvIHVzZSBsaWJjdXJsIGluIHlvdXIgQyBwcm9ncmFtcy4gVGhlcmUgYXJlIHNwZWNpZmljIG1hbiBwYWdlcyBmb3IgZWFjaCBmdW5jdGlvbiBtZW50aW9uZWQgaW4gaGVyZS4gVGhlcmUgYXJlIGFsc28gdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGliY3VybC1lYXN5KDMpPC9zcGFuPiBtYW4gcGFnZSwgdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGliY3VybC1tdWx0aSgzKTwvc3Bhbj4gbWFuIHBhZ2UsIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmxpYmN1cmwtc2hhcmUoMyk8L3NwYW4+IG1hbiBwYWdlIGFuZCB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5saWJjdXJsLXR1dG9yaWFsKDMpPC9zcGFuPiBtYW4gcGFnZSBmb3IgaW4tZGVwdGggdW5kZXJzdGFuZGluZyBvbiBob3cgdG8gcHJvZ3JhbSB3aXRoIGxpYmN1cmwuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlcmUgYXJlIG1vcmUgdGhhbiB0aGlydHkgY3VzdG9tIGJpbmRpbmdzIGF2YWlsYWJsZSB0aGF0IGJyaW5nIGxpYmN1cmwgYWNjZXNzIHRvIHlvdXIgZmF2b3VyaXRlIGxhbmd1YWdlLiBMb29rIGVsc2V3aGVyZSBmb3IgZG9jdW1lbnRhdGlvbiBvbiB0aG9zZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5saWJjdXJsIGhhcyBhIGdsb2JhbCBjb25zdGFudCBlbnZpcm9ubWVudCB0aGF0IHlvdSBtdXN0IHNldCB1cCBhbmQgbWFpbnRhaW4gd2hpbGUgdXNpbmcgbGliY3VybC4gIFRoaXMgZXNzZW50aWFsbHkgbWVhbnMgeW91IGNhbGwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZ2xvYmFsX2luaXQuaHRtbCI+Y3VybF9nbG9iYWxfaW5pdCgzKTwvYT4gYXQgdGhlIHN0YXJ0IG9mIHlvdXIgcHJvZ3JhbSBhbmQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZ2xvYmFsX2NsZWFudXAuaHRtbCI+Y3VybF9nbG9iYWxfY2xlYW51cCgzKTwvYT4gYXQgdGhlIGVuZC4gIFNlZSBHTE9CQUwgQ09OU1RBTlRTIGJlbG93IGZvciBkZXRhaWxzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRvIHRyYW5zZmVyIGZpbGVzLCB5b3UgYWx3YXlzIHNldCB1cCBhbiAiZWFzeSBoYW5kbGUiIHVzaW5nIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Vhc3lfaW5pdC5odG1sIj5jdXJsX2Vhc3lfaW5pdCgzKTwvYT4sIGJ1dCB3aGVuIHlvdSB3YW50IHRoZSBmaWxlKHMpIHRyYW5zZmVycmVkIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgdGhlICJlYXN5IiBpbnRlcmZhY2UsIG9yIHRoZSAibXVsdGkiIGludGVyZmFjZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgZWFzeSBpbnRlcmZhY2UgaXMgYSBzeW5jaHJvbm91cyBpbnRlcmZhY2Ugd2l0aCB3aGljaCB5b3UgY2FsbCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3BlcmZvcm0uaHRtbCI+Y3VybF9lYXN5X3BlcmZvcm0oMyk8L2E+IGFuZCBsZXQgaXQgcGVyZm9ybSB0aGUgdHJhbnNmZXIuIFdoZW4gaXQgaXMgY29tcGxldGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbmQgeW91IGNhbiBjb250aW51ZS4gTW9yZSBkZXRhaWxzIGFyZSBmb3VuZCBpbiB0aGUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5saWJjdXJsLWVhc3koMyk8L3NwYW4+IG1hbiBwYWdlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBtdWx0aSBpbnRlcmZhY2Ugb24gdGhlIG90aGVyIGhhbmQgaXMgYW4gYXN5bmNocm9ub3VzIGludGVyZmFjZSwgdGhhdCB5b3UgY2FsbCBhbmQgdGhhdCBwZXJmb3JtcyBvbmx5IGEgbGl0dGxlIHBpZWNlIG9mIHRoZSB0cmFuc2ZlciBvbiBlYWNoIGludm9rZS4gSXQgaXMgcGVyZmVjdCBpZiB5b3Ugd2FudCB0byBkbyB0aGluZ3Mgd2hpbGUgdGhlIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzLCBvciBzaW1pbGFyLiBUaGUgbXVsdGkgaW50ZXJmYWNlIGFsbG93cyB5b3UgdG8gc2VsZWN0KCkgb24gbGliY3VybCBhY3Rpb24sIGFuZCBldmVuIHRvIGVhc2lseSBkb3dubG9hZCBtdWx0aXBsZSBmaWxlcyBzaW11bHRhbmVvdXNseSB1c2luZyBhIHNpbmdsZSB0aHJlYWQuIFNlZSBmdXJ0aGVyIGRldGFpbHMgaW4gdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGliY3VybC1tdWx0aSgzKTwvc3Bhbj4gbWFuIHBhZ2UuIAorPHAgY2xhc3M9ImxldmVsMCI+WW91IGNhbiBoYXZlIG11bHRpcGxlIGVhc3kgaGFuZGxlcyBzaGFyZSBjZXJ0YWluIGRhdGEsIGV2ZW4gaWYgdGhleSBhcmUgdXNlZCBpbiBkaWZmZXJlbnQgdGhyZWFkcy4gVGhpcyBtYWdpYyBpcyBzZXR1cCB1c2luZyB0aGUgc2hhcmUgaW50ZXJmYWNlLCBhcyBkZXNjcmliZWQgaW4gdGhlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+bGliY3VybC1zaGFyZSgzKTwvc3Bhbj4gbWFuIHBhZ2UuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlcmUgaXMgYWxzbyBhIHNlcmllcyBvZiBvdGhlciBoZWxwZnVsIGZ1bmN0aW9ucyB0byB1c2UsIGluY2x1ZGluZyB0aGVzZTogCis8cCBjbGFzcz0ibGV2ZWwxIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9ImN1cmx2ZXJzaW9uaW5mbyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5jdXJsX3ZlcnNpb25faW5mbygpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPmdldHMgZGV0YWlsZWQgbGliY3VybCAoYW5kIG90aGVyIHVzZWQgbGlicmFyaWVzKSB2ZXJzaW9uIGluZm8gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJjdXJsZ2V0ZGF0ZSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5jdXJsX2dldGRhdGUoKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5jb252ZXJ0cyBhIGRhdGUgc3RyaW5nIHRvIHRpbWVfdCAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9ImN1cmxlYXN5Z2V0aW5mbyI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5jdXJsX2Vhc3lfZ2V0aW5mbygpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPmdldCBpbmZvcm1hdGlvbiBhYm91dCBhIHBlcmZvcm1lZCB0cmFuc2ZlciAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9ImN1cmxmb3JtYWRkIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPmN1cmxfZm9ybWFkZCgpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPmhlbHBzIGJ1aWxkaW5nIGFuIEhUVFAgZm9ybSBQT1NUIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iY3VybGZvcm1mcmVlIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPmN1cmxfZm9ybWZyZWUoKTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5mcmVlIGEgbGlzdCBidWlsdCB3aXRoIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX2Zvcm1hZGQuaHRtbCI+Y3VybF9mb3JtYWRkKDMpPC9hPiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9ImN1cmxzbGlzdGFwcGVuZCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5jdXJsX3NsaXN0X2FwcGVuZCgpPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPmJ1aWxkcyBhIGxpbmtlZCBsaXN0IAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iY3VybHNsaXN0ZnJlZWFsbCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj5jdXJsX3NsaXN0X2ZyZWVfYWxsKCk8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+ZnJlZXMgYSB3aG9sZSBjdXJsX3NsaXN0IAorPHAgY2xhc3M9ImxldmVsMCI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJMSU5LSU5HIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5MSU5LSU5HIFdJVEggTElCQ1VSTDwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5PbiB1bml4LWxpa2UgbWFjaGluZXMsIHRoZXJlJ3MgYSB0b29sIG5hbWVkIGN1cmwtY29uZmlnIHRoYXQgZ2V0cyBpbnN0YWxsZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY3VybCBzdHVmZiB3aGVuICdtYWtlIGluc3RhbGwnIGlzIHBlcmZvcm1lZC4gCis8cCBjbGFzcz0ibGV2ZWwwIj5jdXJsLWNvbmZpZyBpcyBhZGRlZCB0byBtYWtlIGl0IGVhc2llciBmb3IgYXBwbGljYXRpb25zIHRvIGxpbmsgd2l0aCBsaWJjdXJsIGFuZCBkZXZlbG9wZXJzIHRvIGxlYXJuIGFib3V0IGxpYmN1cmwgYW5kIGhvdyB0byB1c2UgaXQuIAorPHAgY2xhc3M9ImxldmVsMCI+UnVuICdjdXJsLWNvbmZpZyAtLWxpYnMnIHRvIGdldCB0aGUgKGFkZGl0aW9uYWwpIGxpbmtlciBvcHRpb25zIHlvdSBuZWVkIHRvIGxpbmsgd2l0aCB0aGUgcGFydGljdWxhciB2ZXJzaW9uIG9mIGxpYmN1cmwgeW91J3ZlIGluc3RhbGxlZC4gU2VlIHRoZSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmN1cmwtY29uZmlnKDEpPC9zcGFuPiBtYW4gcGFnZSBmb3IgZnVydGhlciBkZXRhaWxzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPlVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtIHRoYXQgc2hpcCBsaWJjdXJsIGFzIHBhcnQgb2YgdGhlaXIgZGlzdHJpYnV0aW9ucyBvZnRlbiBkb24ndCBwcm92aWRlIHRoZSBjdXJsLWNvbmZpZyB0b29sLCBidXQgc2ltcGx5IGluc3RhbGwgdGhlIGxpYnJhcnkgYW5kIGhlYWRlcnMgaW4gdGhlIGNvbW1vbiBwYXRoIGZvciB0aGlzIHB1cnBvc2UuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTElCQ1VSTCI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TElCQ1VSTCBTWU1CT0wgTkFNRVM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+QWxsIHB1YmxpYyBmdW5jdGlvbnMgaW4gdGhlIGxpYmN1cmwgaW50ZXJmYWNlIGFyZSBwcmVmaXhlZCB3aXRoICdjdXJsXycgKHdpdGggYSBsb3dlcmNhc2UgYykuIFlvdSBjYW4gZmluZCBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGxpYnJhcnkgc291cmNlIGNvZGUsIGJ1dCBvdGhlciBwcmVmaXhlcyBpbmRpY2F0ZSB0aGF0IHRoZSBmdW5jdGlvbnMgYXJlIHByaXZhdGUgYW5kIG1heSBjaGFuZ2Ugd2l0aG91dCBmdXJ0aGVyIG5vdGljZSBpbiB0aGUgbmV4dCByZWxlYXNlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPk9ubHkgdXNlIGRvY3VtZW50ZWQgZnVuY3Rpb25zIGFuZCBmdW5jdGlvbmFsaXR5ISA8YSBuYW1lPSJQT1JUQUJJTElUWSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UE9SVEFCSUxJVFk8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+bGliY3VybCB3b3JrcyA8c3BhbiBDbGFzcz0iYm9sZCI+ZXhhY3RseTwvc3Bhbj4gdGhlIHNhbWUsIG9uIGFueSBvZiB0aGUgcGxhdGZvcm1zIGl0IGNvbXBpbGVzIGFuZCBidWlsZHMgb24uIDxhIG5hbWU9IlRIUkVBRFMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlRIUkVBRFM8L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+TmV2ZXIgZXZlciBjYWxsIGN1cmwtZnVuY3Rpb25zIHNpbXVsdGFuZW91c2x5IHVzaW5nIHRoZSBzYW1lIGhhbmRsZSBmcm9tIHNldmVyYWwgdGhyZWFkcy4gbGliY3VybCBpcyB0aHJlYWQtc2FmZSBhbmQgY2FuIGJlIHVzZWQgaW4gYW55IG51bWJlciBvZiB0aHJlYWRzLCBidXQgeW91IG11c3QgdXNlIHNlcGFyYXRlIGN1cmwgaGFuZGxlcyBpZiB5b3Ugd2FudCB0byB1c2UgbGliY3VybCBpbiBtb3JlIHRoYW4gb25lIHRocmVhZCBzaW11bHRhbmVvdXNseS4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGUgZ2xvYmFsIGVudmlyb25tZW50IGZ1bmN0aW9ucyBhcmUgbm90IHRocmVhZC1zYWZlLiAgU2VlIEdMT0JBTCBDT05TVEFOVFMgYmVsb3cgZm9yIGRldGFpbHMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iUEVSU0lTVEVOVCI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UEVSU0lTVEVOVCBDT05ORUNUSU9OUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5QZXJzaXN0ZW50IGNvbm5lY3Rpb25zIG1lYW5zIHRoYXQgbGliY3VybCBjYW4gcmUtdXNlIHRoZSBzYW1lIGNvbm5lY3Rpb24gZm9yIHNldmVyYWwgdHJhbnNmZXJzLCBpZiB0aGUgY29uZGl0aW9ucyBhcmUgcmlnaHQuIAorPHAgY2xhc3M9ImxldmVsMCI+bGliY3VybCB3aWxsIDxzcGFuIENsYXNzPSJib2xkIj5hbHdheXM8L3NwYW4+IGF0dGVtcHQgdG8gdXNlIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuIFdoZW5ldmVyIHlvdSB1c2UgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9wZXJmb3JtLmh0bWwiPmN1cmxfZWFzeV9wZXJmb3JtKDMpPC9hPiBvciA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9tdWx0aV9wZXJmb3JtLmh0bWwiPmN1cmxfbXVsdGlfcGVyZm9ybSgzKTwvYT4sIGxpYmN1cmwgd2lsbCBhdHRlbXB0IHRvIHVzZSBhbiBleGlzdGluZyBjb25uZWN0aW9uIHRvIGRvIHRoZSB0cmFuc2ZlciwgYW5kIGlmIG5vbmUgZXhpc3RzIGl0J2xsIG9wZW4gYSBuZXcgb25lIHRoYXQgd2lsbCBiZSBzdWJqZWN0IGZvciByZS11c2Ugb24gYSBwb3NzaWJsZSBmb2xsb3dpbmcgY2FsbCB0byA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3BlcmZvcm0uaHRtbCI+Y3VybF9lYXN5X3BlcmZvcm0oMyk8L2E+IG9yIDxhIGNsYXNzPSJlbXBoYXNpcyIgaHJlZj0iLi9jdXJsX211bHRpX3BlcmZvcm0uaHRtbCI+Y3VybF9tdWx0aV9wZXJmb3JtKDMpPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UbyBhbGxvdyBsaWJjdXJsIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgcGVyc2lzdGVudCBjb25uZWN0aW9ucywgeW91IHNob3VsZCBkbyBhcyBtYW55IG9mIHlvdXIgZmlsZSB0cmFuc2ZlcnMgYXMgcG9zc2libGUgdXNpbmcgdGhlIHNhbWUgY3VybCBoYW5kbGUuIFdoZW4geW91IGNhbGwgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9jbGVhbnVwLmh0bWwiPmN1cmxfZWFzeV9jbGVhbnVwKDMpPC9hPiwgYWxsIHRoZSBwb3NzaWJseSBvcGVuIGNvbm5lY3Rpb25zIGhlbGQgYnkgbGliY3VybCB3aWxsIGJlIGNsb3NlZCBhbmQgZm9yZ290dGVuLiAKKzxwIGNsYXNzPSJsZXZlbDAiPk5vdGUgdGhhdCB0aGUgb3B0aW9ucyBzZXQgd2l0aCA8YSBjbGFzcz0iZW1waGFzaXMiIGhyZWY9Ii4vY3VybF9lYXN5X3NldG9wdC5odG1sIj5jdXJsX2Vhc3lfc2V0b3B0KDMpPC9hPiB3aWxsIGJlIHVzZWQgb24gZXZlcnkgcmVwZWF0ZWQgPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIuL2N1cmxfZWFzeV9wZXJmb3JtLmh0bWwiPmN1cmxfZWFzeV9wZXJmb3JtKDMpPC9hPiBjYWxsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9IkdMT0JBTCI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+R0xPQkFMIENPTlNUQU5UUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5UaGVyZSBhcmUgYSB2YXJpZXR5IG9mIGNvbnN0YW50cyB0aGF0IGxpYmN1cmwgdXNlcywgbWFpbmx5IHRocm91Z2ggaXRzIGludGVybmFsIHVzZSBvZiBvdGhlciBsaWJyYXJpZXMsIHdoaWNoIGFyZSB0b28gY29tcGxpY2F0ZWQgZm9yIHRoZSBsaWJyYXJ5IGxvYWRlciB0byBzZXQgdXAuICBUaGVyZWZvcmUsIGEgcHJvZ3JhbSBtdXN0IGNhbGwgYSBsaWJyYXJ5IGZ1bmN0aW9uIGFmdGVyIHRoZSBwcm9ncmFtIGlzIGxvYWRlZCBhbmQgcnVubmluZyB0byBmaW5pc2ggc2V0dGluZyB1cCB0aGUgbGlicmFyeSBjb2RlLiAgRm9yIGV4YW1wbGUsIHdoZW4gbGliY3VybCBpcyBidWlsdCBmb3IgU1NMIGNhcGFiaWxpdHkgdmlhIHRoZSBHTlUgVExTIGxpYnJhcnksIHRoZXJlIGlzIGFuIGVsYWJvcmF0ZSB0cmVlIGluc2lkZSB0aGF0IGxpYnJhcnkgdGhhdCBkZXNjcmliZXMgdGhlIFNTTCBwcm90b2NvbC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iZW1waGFzaXMiPmN1cmxfZ2xvYmFsX2luaXQoKTwvc3Bhbj4gaXMgdGhlIGZ1bmN0aW9uIHRoYXQgeW91IG11c3QgY2FsbC4gIFRoaXMgbWF5IGFsbG9jYXRlIHJlc291cmNlcyAoZS5nLiB0aGUgbWVtb3J5IGZvciB0aGUgR05VIFRMUyB0cmVlIG1lbnRpb25lZCBhYm92ZSksIHNvIHRoZSBjb21wYW5pb24gZnVuY3Rpb24gPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jdXJsX2dsb2JhbF9jbGVhbnVwKCk8L3NwYW4+IHJlbGVhc2VzIHRoZW0uIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGJhc2ljIHJ1bGUgZm9yIGNvbnN0cnVjdGluZyBhIHByb2dyYW0gdGhhdCB1c2VzIGxpYmN1cmwgaXMgdGhpczogQ2FsbCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmN1cmxfZ2xvYmFsX2luaXQoKTwvc3Bhbj4sIHdpdGggYSA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPkNVUkxfR0xPQkFMX0FMTDwvc3Bhbj4gYXJndW1lbnQsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBwcm9ncmFtIHN0YXJ0cywgd2hpbGUgaXQgaXMgc3RpbGwgb25seSBvbmUgdGhyZWFkIGFuZCBiZWZvcmUgaXQgdXNlcyBsaWJjdXJsIGF0IGFsbC4gIENhbGwgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jdXJsX2dsb2JhbF9jbGVhbnVwKCk8L3NwYW4+IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgcHJvZ3JhbSBleGl0cywgd2hlbiB0aGUgcHJvZ3JhbSBpcyBhZ2FpbiBvbmx5IG9uZSB0aHJlYWQgYW5kIGFmdGVyIGl0cyBsYXN0IHVzZSBvZiBsaWJjdXJsLiAKKzxwIGNsYXNzPSJsZXZlbDAiPllvdSBjYW4gY2FsbCBib3RoIG9mIHRoZXNlIG11bHRpcGxlIHRpbWVzLCBhcyBsb25nIGFzIGFsbCBjYWxscyBtZWV0IHRoZXNlIHJlcXVpcmVtZW50cyBhbmQgdGhlIG51bWJlciBvZiBjYWxscyB0byBlYWNoIGlzIHRoZSBzYW1lLiAKKzxwIGNsYXNzPSJsZXZlbDAiPkl0IGlzbid0IGFjdHVhbGx5IHJlcXVpcmVkIHRoYXQgdGhlIGZ1bmN0aW9ucyBiZSBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBwcm9ncmFtIC0tIHRoYXQncyBqdXN0IHVzdWFsbHkgdGhlIGVhc2llc3Qgd2F5IHRvIGRvIGl0LiBJdCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmlzPC9zcGFuPiByZXF1aXJlZCB0aGF0IHRoZSBmdW5jdGlvbnMgYmUgY2FsbGVkIHdoZW4gbm8gb3RoZXIgdGhyZWFkIGluIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlc2UgZ2xvYmFsIGNvbnN0YW50IGZ1bmN0aW9ucyBhcmUgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5ub3QgdGhyZWFkIHNhZmU8L3NwYW4+LCBzbyB5b3UgbXVzdCBub3QgY2FsbCB0aGVtIHdoZW4gYW55IG90aGVyIHRocmVhZCBpbiB0aGUgcHJvZ3JhbSBpcyBydW5uaW5nLiAgSXQgaXNuJ3QgZ29vZCBlbm91Z2ggdGhhdCBubyBvdGhlciB0aHJlYWQgaXMgdXNpbmcgbGliY3VybCBhdCB0aGUgdGltZSwgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgaW50ZXJuYWxseSBjYWxsIHNpbWlsYXIgZnVuY3Rpb25zIG9mIG90aGVyIGxpYnJhcmllcywgYW5kIHRob3NlIGZ1bmN0aW9ucyBhcmUgc2ltaWxhcmx5IHRocmVhZC11bnNhZmUuICBZb3UgY2FuJ3QgZ2VuZXJhbGx5IGtub3cgd2hhdCB0aGVzZSBsaWJyYXJpZXMgYXJlLCBvciB3aGV0aGVyIG90aGVyIHRocmVhZHMgYXJlIHVzaW5nIHRoZW0uIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIGdsb2JhbCBjb25zdGFudCBzaXR1YXRpb24gbWVyaXRzIHNwZWNpYWwgY29uc2lkZXJhdGlvbiB3aGVuIHRoZSBjb2RlIHlvdSBhcmUgd3JpdGluZyB0byB1c2UgbGliY3VybCBpcyBub3QgdGhlIG1haW4gcHJvZ3JhbSwgYnV0IHJhdGhlciBhIG1vZHVsYXIgcGllY2Ugb2YgYSBwcm9ncmFtLCBlLmcuIGFub3RoZXIgbGlicmFyeS4gIEFzIGEgbW9kdWxlLCB5b3VyIGNvZGUgZG9lc24ndCBrbm93IGFib3V0IG90aGVyIHBhcnRzIG9mIHRoZSBwcm9ncmFtIC0tIGl0IGRvZXNuJ3Qga25vdyB3aGV0aGVyIHRoZXkgdXNlIGxpYmN1cmwgb3Igbm90LiAgQW5kIGl0cyBjb2RlIGRvZXNuJ3QgbmVjZXNzYXJpbHkgcnVuIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSB3aG9sZSBwcm9ncmFtLiAKKzxwIGNsYXNzPSJsZXZlbDAiPkEgbW9kdWxlIGxpa2UgdGhpcyBtdXN0IGhhdmUgZ2xvYmFsIGNvbnN0YW50IGZ1bmN0aW9ucyBvZiBpdHMgb3duLCBqdXN0IGxpa2UgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jdXJsX2dsb2JhbF9pbml0KCk8L3NwYW4+IGFuZCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmN1cmxfZ2xvYmFsX2NsZWFudXAoKTwvc3Bhbj4uIFRoZSBtb2R1bGUgdGh1cyBoYXMgY29udHJvbCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHByb2dyYW0gYW5kIGhhcyBhIHBsYWNlIHRvIGNhbGwgdGhlIGxpYmN1cmwgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGlmIG11bHRpcGxlIG1vZHVsZXMgaW4gdGhlIHByb2dyYW0gdXNlIGxpYmN1cmwsIHRoZXkgYWxsIHdpbGwgc2VwYXJhdGVseSBjYWxsIHRoZSBsaWJjdXJsIGZ1bmN0aW9ucywgYW5kIHRoYXQncyBPSyBiZWNhdXNlIG9ubHkgdGhlIGZpcnN0IDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9nbG9iYWxfaW5pdCgpPC9zcGFuPiBhbmQgdGhlIGxhc3QgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jdXJsX2dsb2JhbF9jbGVhbnVwKCk8L3NwYW4+IGluIGEgcHJvZ3JhbSBjaGFuZ2UgYW55dGhpbmcuICAobGliY3VybCB1c2VzIGEgcmVmZXJlbmNlIGNvdW50IGluIHN0YXRpYyBtZW1vcnkpLiAKKzxwIGNsYXNzPSJsZXZlbDAiPkluIGEgQysrIG1vZHVsZSwgaXQgaXMgY29tbW9uIHRvIGRlYWwgd2l0aCB0aGUgZ2xvYmFsIGNvbnN0YW50IHNpdHVhdGlvbiBieSBkZWZpbmluZyBhIHNwZWNpYWwgY2xhc3MgdGhhdCByZXByZXNlbnRzIHRoZSBnbG9iYWwgY29uc3RhbnQgZW52aXJvbm1lbnQgb2YgdGhlIG1vZHVsZS4gIEEgcHJvZ3JhbSBhbHdheXMgaGFzIGV4YWN0bHkgb25lIG9iamVjdCBvZiB0aGUgY2xhc3MsIGluIHN0YXRpYyBzdG9yYWdlLiAgVGhhdCB3YXksIHRoZSBwcm9ncmFtIGF1dG9tYXRpY2FsbHkgY2FsbHMgdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBvYmplY3QgYXMgdGhlIHByb2dyYW0gc3RhcnRzIHVwIGFuZCB0aGUgZGVzdHJ1Y3RvciBhcyBpdCB0ZXJtaW5hdGVzLiAgQXMgdGhlIGF1dGhvciBvZiB0aGlzIGxpYmN1cmwtdXNpbmcgbW9kdWxlLCB5b3UgY2FuIG1ha2UgdGhlIGNvbnN0cnVjdG9yIGNhbGwgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jdXJsX2dsb2JhbF9pbml0KCk8L3NwYW4+IGFuZCB0aGUgZGVzdHJ1Y3RvciBjYWxsIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9nbG9iYWxfY2xlYW51cCgpPC9zcGFuPiBhbmQgc2F0aXNmeSBsaWJjdXJsJ3MgcmVxdWlyZW1lbnRzIHdpdGhvdXQgeW91ciB1c2VyIGhhdmluZyB0byB0aGluayBhYm91dCBpdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iZW1waGFzaXMiPmN1cmxfZ2xvYmFsX2luaXQoKTwvc3Bhbj4gaGFzIGFuIGFyZ3VtZW50IHRoYXQgdGVsbHMgd2hhdCBwYXJ0aWN1bGFyIHBhcnRzIG9mIHRoZSBnbG9iYWwgY29uc3RhbnQgZW52aXJvbm1lbnQgdG8gc2V0IHVwLiAgSW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5IHVzZSBhbnkgdmFsdWUgZXhjZXB0IDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Q1VSTF9HTE9CQUxfQUxMPC9zcGFuPiAod2hpY2ggc2F5cyB0byBzZXQgdXAgdGhlIHdob2xlIHRoaW5nKSwgeW91IG11c3QgaGF2ZSBzcGVjaWZpYyBrbm93bGVkZ2Ugb2YgaW50ZXJuYWwgd29ya2luZ3Mgb2YgbGliY3VybCBhbmQgYWxsIG90aGVyIHBhcnRzIG9mIHRoZSBwcm9ncmFtIG9mIHdoaWNoIGl0IGlzIHBhcnQuIAorPHAgY2xhc3M9ImxldmVsMCI+QSBzcGVjaWFsIHBhcnQgb2YgdGhlIGdsb2JhbCBjb25zdGFudCBlbnZpcm9ubWVudCBpcyB0aGUgaWRlbnRpdHkgb2YgdGhlIG1lbW9yeSBhbGxvY2F0b3IuICA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmN1cmxfZ2xvYmFsX2luaXQoKTwvc3Bhbj4gc2VsZWN0cyB0aGUgc3lzdGVtIGRlZmF1bHQgbWVtb3J5IGFsbG9jYXRvciwgYnV0IHlvdSBjYW4gdXNlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+Y3VybF9nbG9iYWxfaW5pdF9tZW0oKTwvc3Bhbj4gdG8gc3VwcGx5IG9uZSBvZiB5b3VyIG93bi4gIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIHdheSB0byB1c2UgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5jdXJsX2dsb2JhbF9pbml0X21lbSgpPC9zcGFuPiBpbiBhIG1vZHVsYXIgcHJvZ3JhbSAtLSBhbGwgbW9kdWxlcyBpbiB0aGUgcHJvZ3JhbSB0aGF0IG1pZ2h0IHVzZSBsaWJjdXJsIHdvdWxkIGhhdmUgdG8gYWdyZWUgb24gb25lIGFsbG9jYXRvci4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGVyZSBpcyBhIGZhaWxzYWZlIGluIGxpYmN1cmwgdGhhdCBtYWtlcyBpdCB1c2FibGUgaW4gc2ltcGxlIHNpdHVhdGlvbnMgd2l0aG91dCB5b3UgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHRoZSBnbG9iYWwgY29uc3RhbnQgZW52aXJvbm1lbnQgYXQgYWxsOiA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPmN1cmxfZWFzeV9pbml0KCk8L3NwYW4+IHNldHMgdXAgdGhlIGVudmlyb25tZW50IGl0c2VsZiBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIHlldC4gIFRoZSByZXNvdXJjZXMgaXQgYWNxdWlyZXMgdG8gZG8gc28gZ2V0IHJlbGVhc2VkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgcHJvZ3JhbSBleGl0cy4gCis8cCBjbGFzcz0ibGV2ZWwwIj5UaGlzIGZhaWxzYWZlIGZlYXR1cmUgZXhpc3RzIG1haW5seSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBiZWNhdXNlIHRoZXJlIHdhcyBhIHRpbWUgd2hlbiB0aGUgZ2xvYmFsIGZ1bmN0aW9ucyBkaWRuJ3QgZXhpc3QuICBCZWNhdXNlIGl0IGlzIHN1ZmZpY2llbnQgb25seSBpbiB0aGUgc2ltcGxlc3Qgb2YgcHJvZ3JhbXMsIGl0IGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgYW55IHByb2dyYW0gdG8gcmVseSBvbiBpdC4gPHAgY2xhc3M9InJvZmZpdCI+CisgVGhpcyBIVE1MIHBhZ2Ugd2FzIG1hZGUgd2l0aCA8YSBocmVmPSJodHRwOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvcm9mZml0LyI+cm9mZml0PC9hPi4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC5tNCBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDVhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvbGliY3VybC5tNApAQCAtMCwwICsxLDI1MSBAQAorIyBMSUJDVVJMX0NIRUNLX0NPTkZJRyAoW0RFRkFVTFQtQUNUSU9OXSwgW01JTklNVU0tVkVSU0lPTl0sCisjICAgICAgICAgICAgICAgICAgICAgICBbQUNUSU9OLUlGLVlFU10sIFtBQ1RJT04tSUYtTk9dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgRGF2aWQgU2hhdyA8ZHNoYXdAamFiYmVyd29ja3kuY29tPiAgIE1heS0wOS0yMDA2CisjCisjIENoZWNrcyBmb3IgbGliY3VybC4gIERFRkFVTFQtQUNUSU9OIGlzIHRoZSBzdHJpbmcgeWVzIG9yIG5vIHRvCisjIHNwZWNpZnkgd2hldGhlciB0byBkZWZhdWx0IHRvIC0td2l0aC1saWJjdXJsIG9yIC0td2l0aG91dC1saWJjdXJsLgorIyBJZiBub3Qgc3VwcGxpZWQsIERFRkFVTFQtQUNUSU9OIGlzIHllcy4gIE1JTklNVU0tVkVSU0lPTiBpcyB0aGUKKyMgbWluaW11bSB2ZXJzaW9uIG9mIGxpYmN1cmwgdG8gYWNjZXB0LiAgUGFzcyB0aGUgdmVyc2lvbiBhcyBhIHJlZ3VsYXIKKyMgdmVyc2lvbiBudW1iZXIgbGlrZSA3LjEwLjEuIElmIG5vdCBzdXBwbGllZCwgYW55IHZlcnNpb24gaXMKKyMgYWNjZXB0ZWQuICBBQ1RJT04tSUYtWUVTIGlzIGEgbGlzdCBvZiBzaGVsbCBjb21tYW5kcyB0byBydW4gaWYKKyMgbGliY3VybCB3YXMgc3VjY2Vzc2Z1bGx5IGZvdW5kIGFuZCBwYXNzZWQgdGhlIHZhcmlvdXMgdGVzdHMuCisjIEFDVElPTi1JRi1OTyBpcyBhIGxpc3Qgb2Ygc2hlbGwgY29tbWFuZHMgdGhhdCBhcmUgcnVuIG90aGVyd2lzZS4KKyMgTm90ZSB0aGF0IHVzaW5nIC0td2l0aG91dC1saWJjdXJsIGRvZXMgcnVuIEFDVElPTi1JRi1OTy4KKyMKKyMgVGhpcyBtYWNybyAjZGVmaW5lcyBIQVZFX0xJQkNVUkwgaWYgYSB3b3JraW5nIGxpYmN1cmwgc2V0dXAgaXMKKyMgZm91bmQsIGFuZCBzZXRzIEBMSUJDVVJMQCBhbmQgQExJQkNVUkxfQ1BQRkxBR1NAIHRvIHRoZSBuZWNlc3NhcnkKKyMgdmFsdWVzLiAgT3RoZXIgdXNlZnVsIGRlZmluZXMgYXJlIExJQkNVUkxfRkVBVFVSRV94eHggd2hlcmUgeHh4IGFyZQorIyB0aGUgdmFyaW91cyBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgbGliY3VybCwgYW5kIExJQkNVUkxfUFJPVE9DT0xfeXl5CisjIHdoZXJlIHl5eSBhcmUgdGhlIHZhcmlvdXMgcHJvdG9jb2xzIHN1cHBvcnRlZCBieSBsaWJjdXJsLiAgQm90aCB4eHgKKyMgYW5kIHl5eSBhcmUgY2FwaXRhbGl6ZWQuICBTZWUgdGhlIGxpc3Qgb2YgQUhfVEVNUExBVEVzIGF0IHRoZSB0b3Agb2YKKyMgdGhlIG1hY3JvIGZvciB0aGUgY29tcGxldGUgbGlzdCBvZiBwb3NzaWJsZSBkZWZpbmVzLiAgU2hlbGwKKyMgdmFyaWFibGVzICRsaWJjdXJsX2ZlYXR1cmVfeHh4IGFuZCAkbGliY3VybF9wcm90b2NvbF95eXkgYXJlIGFsc28KKyMgZGVmaW5lZCB0byAneWVzJyBmb3IgdGhvc2UgZmVhdHVyZXMgYW5kIHByb3RvY29scyB0aGF0IHdlcmUgZm91bmQuCisjIE5vdGUgdGhhdCB4eHggYW5kIHl5eSBrZWVwIHRoZSBzYW1lIGNhcGl0YWxpemF0aW9uIGFzIGluIHRoZQorIyBjdXJsLWNvbmZpZyBsaXN0IChlLmcuIGl0J3MgIkhUVFAiIGFuZCBub3QgImh0dHAiKS4KKyMKKyMgVXNlcnMgbWF5IG92ZXJyaWRlIHRoZSBkZXRlY3RlZCB2YWx1ZXMgYnkgZG9pbmcgc29tZXRoaW5nIGxpa2U6CisjIExJQkNVUkw9Ii1sY3VybCIgTElCQ1VSTF9DUFBGTEFHUz0iLUkvdXNyL215aW5jbHVkZSIgLi9jb25maWd1cmUKKyMKKyMgRm9yIHRoZSBzYWtlIG9mIHNhbml0eSwgdGhpcyBtYWNybyBhc3N1bWVzIHRoYXQgYW55IGxpYmN1cmwgdGhhdCBpcworIyBmb3VuZCBpcyBhZnRlciB2ZXJzaW9uIDcuNy4yLCB0aGUgZmlyc3QgdmVyc2lvbiB0aGF0IGluY2x1ZGVkIHRoZQorIyBjdXJsLWNvbmZpZyBzY3JpcHQuICBOb3RlIHRoYXQgaXQgaXMgdmVyeSBpbXBvcnRhbnQgZm9yIHBlb3BsZQorIyBwYWNrYWdpbmcgYmluYXJ5IHZlcnNpb25zIG9mIGxpYmN1cmwgdG8gaW5jbHVkZSB0aGlzIHNjcmlwdCEKKyMgV2l0aG91dCBjdXJsLWNvbmZpZywgd2UgY2FuIG9ubHkgZ3Vlc3Mgd2hhdCBwcm90b2NvbHMgYXJlIGF2YWlsYWJsZSwKKyMgb3IgdXNlIGN1cmxfdmVyc2lvbl9pbmZvIHRvIGZpZ3VyZSBpdCBvdXQgYXQgcnVudGltZS4KKworQUNfREVGVU4oW0xJQkNVUkxfQ0hFQ0tfQ09ORklHXSwKK1sKKyAgQUhfVEVNUExBVEUoW0xJQkNVUkxfRkVBVFVSRV9TU0xdLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgU1NMXSkKKyAgQUhfVEVNUExBVEUoW0xJQkNVUkxfRkVBVFVSRV9LUkI0XSxbRGVmaW5lZCBpZiBsaWJjdXJsIHN1cHBvcnRzIEtSQjRdKQorICBBSF9URU1QTEFURShbTElCQ1VSTF9GRUFUVVJFX0lQVjZdLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgSVB2Nl0pCisgIEFIX1RFTVBMQVRFKFtMSUJDVVJMX0ZFQVRVUkVfTElCWl0sW0RlZmluZWQgaWYgbGliY3VybCBzdXBwb3J0cyBsaWJ6XSkKKyAgQUhfVEVNUExBVEUoW0xJQkNVUkxfRkVBVFVSRV9BU1lOQ0hETlNdLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgQXN5bmNoRE5TXSkKKyAgQUhfVEVNUExBVEUoW0xJQkNVUkxfRkVBVFVSRV9JRE5dLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgSUROXSkKKyAgQUhfVEVNUExBVEUoW0xJQkNVUkxfRkVBVFVSRV9TU1BJXSxbRGVmaW5lZCBpZiBsaWJjdXJsIHN1cHBvcnRzIFNTUEldKQorICBBSF9URU1QTEFURShbTElCQ1VSTF9GRUFUVVJFX05UTE1dLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgTlRMTV0pCisKKyAgQUhfVEVNUExBVEUoW0xJQkNVUkxfUFJPVE9DT0xfSFRUUF0sW0RlZmluZWQgaWYgbGliY3VybCBzdXBwb3J0cyBIVFRQXSkKKyAgQUhfVEVNUExBVEUoW0xJQkNVUkxfUFJPVE9DT0xfSFRUUFNdLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgSFRUUFNdKQorICBBSF9URU1QTEFURShbTElCQ1VSTF9QUk9UT0NPTF9GVFBdLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgRlRQXSkKKyAgQUhfVEVNUExBVEUoW0xJQkNVUkxfUFJPVE9DT0xfRlRQU10sW0RlZmluZWQgaWYgbGliY3VybCBzdXBwb3J0cyBGVFBTXSkKKyAgQUhfVEVNUExBVEUoW0xJQkNVUkxfUFJPVE9DT0xfRklMRV0sW0RlZmluZWQgaWYgbGliY3VybCBzdXBwb3J0cyBGSUxFXSkKKyAgQUhfVEVNUExBVEUoW0xJQkNVUkxfUFJPVE9DT0xfVEVMTkVUXSxbRGVmaW5lZCBpZiBsaWJjdXJsIHN1cHBvcnRzIFRFTE5FVF0pCisgIEFIX1RFTVBMQVRFKFtMSUJDVVJMX1BST1RPQ09MX0xEQVBdLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgTERBUF0pCisgIEFIX1RFTVBMQVRFKFtMSUJDVVJMX1BST1RPQ09MX0RJQ1RdLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgRElDVF0pCisgIEFIX1RFTVBMQVRFKFtMSUJDVVJMX1BST1RPQ09MX1RGVFBdLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgVEZUUF0pCisgIEFIX1RFTVBMQVRFKFtMSUJDVVJMX1BST1RPQ09MX1JUU1BdLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgUlRTUF0pCisgIEFIX1RFTVBMQVRFKFtMSUJDVVJMX1BST1RPQ09MX1BPUDNdLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgUE9QM10pCisgIEFIX1RFTVBMQVRFKFtMSUJDVVJMX1BST1RPQ09MX0lNQVBdLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgSU1BUF0pCisgIEFIX1RFTVBMQVRFKFtMSUJDVVJMX1BST1RPQ09MX1NNVFBdLFtEZWZpbmVkIGlmIGxpYmN1cmwgc3VwcG9ydHMgU01UUF0pCisKKyAgQUNfQVJHX1dJVEgobGliY3VybCwKKyAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJjdXJsPVBSRUZJWF0sW2xvb2sgZm9yIHRoZSBjdXJsIGxpYnJhcnkgaW4gUFJFRklYL2xpYiBhbmQgaGVhZGVycyBpbiBQUkVGSVgvaW5jbHVkZV0pLAorICAgICBbX2xpYmN1cmxfd2l0aD0kd2l0aHZhbF0sW19saWJjdXJsX3dpdGg9aWZlbHNlKFskMV0sLFt5ZXNdLFskMV0pXSkKKworICBpZiB0ZXN0ICIkX2xpYmN1cmxfd2l0aCIgIT0gIm5vIiA7IHRoZW4KKworICAgICBBQ19QUk9HX0FXSworCisgICAgIF9saWJjdXJsX3ZlcnNpb25fcGFyc2U9ImV2YWwgJEFXSyAne3NwbGl0KFwkTkYsQSxcIi5cIik7IFg9MjU2KjI1NipBW1sxXV0rMjU2KkFbWzJdXStBW1szXV07IHByaW50IFg7fSciCisKKyAgICAgX2xpYmN1cmxfdHJ5X2xpbms9eWVzCisKKyAgICAgaWYgdGVzdCAtZCAiJF9saWJjdXJsX3dpdGgiIDsgdGhlbgorICAgICAgICBMSUJDVVJMX0NQUEZMQUdTPSItSSR3aXRodmFsL2luY2x1ZGUiCisgICAgICAgIF9saWJjdXJsX2xkZmxhZ3M9Ii1MJHdpdGh2YWwvbGliIgorICAgICAgICBBQ19QQVRIX1BST0coW19saWJjdXJsX2NvbmZpZ10sW2N1cmwtY29uZmlnXSxbXSwKKyAgICAgICAgICAgICAgICAgICAgIFsiJHdpdGh2YWwvYmluIl0pCisgICAgIGVsc2UKKyAgICAgICAgQUNfUEFUSF9QUk9HKFtfbGliY3VybF9jb25maWddLFtjdXJsLWNvbmZpZ10sW10sWyRQQVRIXSkKKyAgICAgZmkKKworICAgICBpZiB0ZXN0IHgkX2xpYmN1cmxfY29uZmlnICE9ICJ4IiA7IHRoZW4KKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB0aGUgdmVyc2lvbiBvZiBsaWJjdXJsXSwKKyAgICAgICAgICAgW2xpYmN1cmxfY3ZfbGliX2N1cmxfdmVyc2lvbl0sCisgICAgICAgICAgIFtsaWJjdXJsX2N2X2xpYl9jdXJsX3ZlcnNpb249YCRfbGliY3VybF9jb25maWcgLS12ZXJzaW9uIHwgJEFXSyAne3ByaW50ICRbXTJ9J2BdKQorCisgICAgICAgIF9saWJjdXJsX3ZlcnNpb249YGVjaG8gJGxpYmN1cmxfY3ZfbGliX2N1cmxfdmVyc2lvbiB8ICRfbGliY3VybF92ZXJzaW9uX3BhcnNlYAorICAgICAgICBfbGliY3VybF93YW50ZWQ9YGVjaG8gaWZlbHNlKFskMl0sLFswXSxbJDJdKSB8ICRfbGliY3VybF92ZXJzaW9uX3BhcnNlYAorCisgICAgICAgIGlmIHRlc3QgJF9saWJjdXJsX3dhbnRlZCAtZ3QgMCA7IHRoZW4KKyAgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsaWJjdXJsID49IHZlcnNpb24gJDJdLAorICAgICAgICAgICAgICBbbGliY3VybF9jdl9saWJfdmVyc2lvbl9va10sCisgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgaWYgdGVzdCAkX2xpYmN1cmxfdmVyc2lvbiAtZ2UgJF9saWJjdXJsX3dhbnRlZCA7IHRoZW4KKyAgICAgICAgICAgICAgICAgbGliY3VybF9jdl9saWJfdmVyc2lvbl9vaz15ZXMKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBsaWJjdXJsX2N2X2xpYl92ZXJzaW9uX29rPW5vCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIF0pCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAkX2xpYmN1cmxfd2FudGVkIC1lcSAwIHx8IHRlc3QgeCRsaWJjdXJsX2N2X2xpYl92ZXJzaW9uX29rID0geHllcyA7IHRoZW4KKyAgICAgICAgICAgaWYgdGVzdCB4IiRMSUJDVVJMX0NQUEZMQUdTIiA9ICJ4IiA7IHRoZW4KKyAgICAgICAgICAgICAgTElCQ1VSTF9DUFBGTEFHUz1gJF9saWJjdXJsX2NvbmZpZyAtLWNmbGFnc2AKKyAgICAgICAgICAgZmkKKyAgICAgICAgICAgaWYgdGVzdCB4IiRMSUJDVVJMIiA9ICJ4IiA7IHRoZW4KKyAgICAgICAgICAgICAgTElCQ1VSTD1gJF9saWJjdXJsX2NvbmZpZyAtLWxpYnNgCisKKyAgICAgICAgICAgICAgIyBUaGlzIGlzIHNvIHNpbGx5LCBidXQgQXBwbGUgYWN0dWFsbHkgaGFzIGEgYnVnIGluIHRoZWlyCisgICAgICAgICAgICAgICMgY3VybC1jb25maWcgc2NyaXB0LiAgRml4ZWQgaW4gVGlnZXIsIGJ1dCB0aGVyZSBhcmUgc3RpbGwKKyAgICAgICAgICAgICAgIyBsb3RzIG9mIFBhbnRoZXIgaW5zdGFsbHMgYXJvdW5kLgorICAgICAgICAgICAgICBjYXNlICIke2hvc3R9IiBpbgorICAgICAgICAgICAgICAgICBwb3dlcnBjLWFwcGxlLWRhcndpbjcqKQorICAgICAgICAgICAgICAgICAgICBMSUJDVVJMPWBlY2hvICRMSUJDVVJMIHwgc2VkIC1lICdzfC1hcmNoIGkzODZ8fGcnYAorICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgIyBBbGwgY3VybC1jb25maWcgc2NyaXB0cyBzdXBwb3J0IC0tZmVhdHVyZQorICAgICAgICAgICBfbGliY3VybF9mZWF0dXJlcz1gJF9saWJjdXJsX2NvbmZpZyAtLWZlYXR1cmVgCisKKyAgICAgICAgICAgIyBJcyBpdCBtb2Rlcm4gZW5vdWdoIHRvIGhhdmUgLS1wcm90b2NvbHM/ICg3LjEyLjQpCisgICAgICAgICAgIGlmIHRlc3QgJF9saWJjdXJsX3ZlcnNpb24gLWdlIDQ2MTgyOCA7IHRoZW4KKyAgICAgICAgICAgICAgX2xpYmN1cmxfcHJvdG9jb2xzPWAkX2xpYmN1cmxfY29uZmlnIC0tcHJvdG9jb2xzYAorICAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgIF9saWJjdXJsX3RyeV9saW5rPW5vCisgICAgICAgIGZpCisKKyAgICAgICAgdW5zZXQgX2xpYmN1cmxfd2FudGVkCisgICAgIGZpCisKKyAgICAgaWYgdGVzdCAkX2xpYmN1cmxfdHJ5X2xpbmsgPSB5ZXMgOyB0aGVuCisKKyAgICAgICAgIyB3ZSBkaWRuJ3QgZmluZCBjdXJsLWNvbmZpZywgc28gbGV0J3Mgc2VlIGlmIHRoZSB1c2VyLXN1cHBsaWVkCisgICAgICAgICMgbGluayBsaW5lIChvciBmYWlsaW5nIHRoYXQsICItbGN1cmwiKSBpcyBlbm91Z2guCisgICAgICAgIExJQkNVUkw9JHtMSUJDVVJMLSIkX2xpYmN1cmxfbGRmbGFncyAtbGN1cmwifQorCisgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGxpYmN1cmwgaXMgdXNhYmxlXSwKKyAgICAgICAgICAgW2xpYmN1cmxfY3ZfbGliX2N1cmxfdXNhYmxlXSwKKyAgICAgICAgICAgWworICAgICAgICAgICBfbGliY3VybF9zYXZlX2NwcGZsYWdzPSRDUFBGTEFHUworICAgICAgICAgICBDUFBGTEFHUz0iJExJQkNVUkxfQ1BQRkxBR1MgJENQUEZMQUdTIgorICAgICAgICAgICBfbGliY3VybF9zYXZlX2xpYnM9JExJQlMKKyAgICAgICAgICAgTElCUz0iJExJQkNVUkwgJExJQlMiCisKKyAgICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxjdXJsL2N1cmwuaD5dXSxbWworLyogVHJ5IGFuZCB1c2UgYSBmZXcgY29tbW9uIG9wdGlvbnMgdG8gZm9yY2UgYSBmYWlsdXJlIGlmIHdlIGFyZQorICAgbWlzc2luZyBzeW1ib2xzIG9yIGNhbid0IGxpbmsuICovCitpbnQgeDsKK2N1cmxfZWFzeV9zZXRvcHQoTlVMTCxDVVJMT1BUX1VSTCxOVUxMKTsKK3g9Q1VSTF9FUlJPUl9TSVpFOworeD1DVVJMT1BUX1dSSVRFRlVOQ1RJT047Cit4PUNVUkxPUFRfRklMRTsKK3g9Q1VSTE9QVF9FUlJPUkJVRkZFUjsKK3g9Q1VSTE9QVF9TVERFUlI7Cit4PUNVUkxPUFRfVkVSQk9TRTsKK2lmICh4KSA7CitdXSldLGxpYmN1cmxfY3ZfbGliX2N1cmxfdXNhYmxlPXllcyxsaWJjdXJsX2N2X2xpYl9jdXJsX3VzYWJsZT1ubykKKworICAgICAgICAgICBDUFBGTEFHUz0kX2xpYmN1cmxfc2F2ZV9jcHBmbGFncworICAgICAgICAgICBMSUJTPSRfbGliY3VybF9zYXZlX2xpYnMKKyAgICAgICAgICAgdW5zZXQgX2xpYmN1cmxfc2F2ZV9jcHBmbGFncworICAgICAgICAgICB1bnNldCBfbGliY3VybF9zYXZlX2xpYnMKKyAgICAgICAgICAgXSkKKworICAgICAgICBpZiB0ZXN0ICRsaWJjdXJsX2N2X2xpYl9jdXJsX3VzYWJsZSA9IHllcyA7IHRoZW4KKworICAgICAgICAgICAjIERvZXMgY3VybF9mcmVlKCkgZXhpc3QgaW4gdGhpcyB2ZXJzaW9uIG9mIGxpYmN1cmw/CisgICAgICAgICAgICMgSWYgbm90LCBmYWtlIGl0IHdpdGggZnJlZSgpCisKKyAgICAgICAgICAgX2xpYmN1cmxfc2F2ZV9jcHBmbGFncz0kQ1BQRkxBR1MKKyAgICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkTElCQ1VSTF9DUFBGTEFHUyIKKyAgICAgICAgICAgX2xpYmN1cmxfc2F2ZV9saWJzPSRMSUJTCisgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJDVVJMIgorCisgICAgICAgICAgIEFDX0NIRUNLX0ZVTkMoY3VybF9mcmVlLCwKKyAgICAgICAgICAgICAgQUNfREVGSU5FKGN1cmxfZnJlZSxmcmVlLAorICAgICAgICAgICAgICAgIFtEZWZpbmUgY3VybF9mcmVlKCkgYXMgZnJlZSgpIGlmIG91ciB2ZXJzaW9uIG9mIGN1cmwgbGFja3MgY3VybF9mcmVlLl0pKQorCisgICAgICAgICAgIENQUEZMQUdTPSRfbGliY3VybF9zYXZlX2NwcGZsYWdzCisgICAgICAgICAgIExJQlM9JF9saWJjdXJsX3NhdmVfbGlicworICAgICAgICAgICB1bnNldCBfbGliY3VybF9zYXZlX2NwcGZsYWdzCisgICAgICAgICAgIHVuc2V0IF9saWJjdXJsX3NhdmVfbGlicworCisgICAgICAgICAgIEFDX0RFRklORShIQVZFX0xJQkNVUkwsMSwKKyAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSBmdW5jdGlvbmFsIGN1cmwgbGlicmFyeS5dKQorICAgICAgICAgICBBQ19TVUJTVChMSUJDVVJMX0NQUEZMQUdTKQorICAgICAgICAgICBBQ19TVUJTVChMSUJDVVJMKQorCisgICAgICAgICAgIGZvciBfbGliY3VybF9mZWF0dXJlIGluICRfbGliY3VybF9mZWF0dXJlcyA7IGRvCisgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChBU19UUl9DUFAobGliY3VybF9mZWF0dXJlXyRfbGliY3VybF9mZWF0dXJlKSxbMV0pCisgICAgICAgICAgICAgIGV2YWwgQVNfVFJfU0gobGliY3VybF9mZWF0dXJlXyRfbGliY3VybF9mZWF0dXJlKT15ZXMKKyAgICAgICAgICAgZG9uZQorCisgICAgICAgICAgIGlmIHRlc3QgIngkX2xpYmN1cmxfcHJvdG9jb2xzIiA9ICJ4IiA7IHRoZW4KKworICAgICAgICAgICAgICAjIFdlIGRvbid0IGhhdmUgLS1wcm90b2NvbHMsIHNvIGp1c3QgYXNzdW1lIHRoYXQgYWxsCisgICAgICAgICAgICAgICMgcHJvdG9jb2xzIGFyZSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgX2xpYmN1cmxfcHJvdG9jb2xzPSJIVFRQIEZUUCBGSUxFIFRFTE5FVCBMREFQIERJQ1QgVEZUUCIKKworICAgICAgICAgICAgICBpZiB0ZXN0IHgkbGliY3VybF9mZWF0dXJlX1NTTCA9IHh5ZXMgOyB0aGVuCisgICAgICAgICAgICAgICAgIF9saWJjdXJsX3Byb3RvY29scz0iJF9saWJjdXJsX3Byb3RvY29scyBIVFRQUyIKKworICAgICAgICAgICAgICAgICAjIEZUUFMgd2Fzbid0IHN0YW5kYXJkcy1jb21wbGlhbnQgdW50aWwgdmVyc2lvbgorICAgICAgICAgICAgICAgICAjIDcuMTEuMCAoMHgwNzBiMDAgPT0gNDYxNTY4KQorICAgICAgICAgICAgICAgICBpZiB0ZXN0ICRfbGliY3VybF92ZXJzaW9uIC1nZSA0NjE1Njg7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgX2xpYmN1cmxfcHJvdG9jb2xzPSIkX2xpYmN1cmxfcHJvdG9jb2xzIEZUUFMiCisgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgIyBSVFNQLCBJTUFQLCBQT1AzIGFuZCBTTVRQIHdlcmUgYWRkZWQgaW4KKyAgICAgICAgICAgICAgIyA3LjIwLjAgKDB4MDcxNDAwID09IDQ2Mzg3MikKKyAgICAgICAgICAgICAgaWYgdGVzdCAkX2xpYmN1cmxfdmVyc2lvbiAtZ2UgNDYzODcyOyB0aGVuCisgICAgICAgICAgICAgICAgIF9saWJjdXJsX3Byb3RvY29scz0iJF9saWJjdXJsX3Byb3RvY29scyBSVFNQIElNQVAgUE9QMyBTTVRQIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICBmaQorCisgICAgICAgICAgIGZvciBfbGliY3VybF9wcm90b2NvbCBpbiAkX2xpYmN1cmxfcHJvdG9jb2xzIDsgZG8KKyAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEFTX1RSX0NQUChsaWJjdXJsX3Byb3RvY29sXyRfbGliY3VybF9wcm90b2NvbCksWzFdKQorICAgICAgICAgICAgICBldmFsIEFTX1RSX1NIKGxpYmN1cmxfcHJvdG9jb2xfJF9saWJjdXJsX3Byb3RvY29sKT15ZXMKKyAgICAgICAgICAgZG9uZQorICAgICAgICBlbHNlCisgICAgICAgICAgIHVuc2V0IExJQkNVUkwKKyAgICAgICAgICAgdW5zZXQgTElCQ1VSTF9DUFBGTEFHUworICAgICAgICBmaQorICAgICBmaQorCisgICAgIHVuc2V0IF9saWJjdXJsX3RyeV9saW5rCisgICAgIHVuc2V0IF9saWJjdXJsX3ZlcnNpb25fcGFyc2UKKyAgICAgdW5zZXQgX2xpYmN1cmxfY29uZmlnCisgICAgIHVuc2V0IF9saWJjdXJsX2ZlYXR1cmUKKyAgICAgdW5zZXQgX2xpYmN1cmxfZmVhdHVyZXMKKyAgICAgdW5zZXQgX2xpYmN1cmxfcHJvdG9jb2wKKyAgICAgdW5zZXQgX2xpYmN1cmxfcHJvdG9jb2xzCisgICAgIHVuc2V0IF9saWJjdXJsX3ZlcnNpb24KKyAgICAgdW5zZXQgX2xpYmN1cmxfbGRmbGFncworICBmaQorCisgIGlmIHRlc3QgeCRfbGliY3VybF93aXRoID0geG5vIHx8IHRlc3QgeCRsaWJjdXJsX2N2X2xpYl9jdXJsX3VzYWJsZSAhPSB4eWVzIDsgdGhlbgorICAgICAjIFRoaXMgaXMgdGhlIElGLU5PIHBhdGgKKyAgICAgaWZlbHNlKFskNF0sLDosWyQ0XSkKKyAgZWxzZQorICAgICAjIFRoaXMgaXMgdGhlIElGLVlFUyBwYXRoCisgICAgIGlmZWxzZShbJDNdLCw6LFskM10pCisgIGZpCisKKyAgdW5zZXQgX2xpYmN1cmxfd2l0aAorXSlkbmwKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLnBkZiBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9saWJjdXJsLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDYzYTk1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL2xpYmN1cmwucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9zeW1ib2xzLWluLXZlcnNpb25zIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL3N5bWJvbHMtaW4tdmVyc2lvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkOGEyNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2RvY3MvbGliY3VybC9zeW1ib2xzLWluLXZlcnNpb25zCkBAIC0wLDAgKzEsNjk5IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorCisgVGhpcyBkb2N1bWVudCBsaXN0cyBkZWZpbmVzIGFuZCBvdGhlciBzeW1ib2xzIHByZXNlbnQgaW4gbGliY3VybCwgdG9nZXRoZXIKKyB3aXRoIGV4YWN0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaXJzdCBsaWJjdXJsIHZlcnNpb24gdGhhdCBwcm92aWRlcyB0aGUKKyBzeW1ib2wsIHRoZSBmaXJzdCB2ZXJzaW9uIGluIHdoaWNoIHRoZSBzeW1ib2wgd2FzIG1hcmtlZCBhcyBkZXByZWNhdGVkIGFuZAorIGZvciBhIGZldyBzeW1ib2xzIHRoZSBsYXN0IHZlcnNpb24gdGhhdCBmZWF0dXJlZCBpdC4gVGhlIG5hbWVzIGFwcGVhciBpbgorIGFscGhhYmV0aWNhbCBvcmRlci4KKworIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRyb2R1Y2VkICBEZXByZWNhdGVkICBSZW1vdmVkCisKK0NVUkxBVVRIX0FOWSAgICAgICAgICAgICAgICAgICAgNy4xMC42CitDVVJMQVVUSF9BTllTQUZFICAgICAgICAgICAgICAgIDcuMTAuNgorQ1VSTEFVVEhfQkFTSUMgICAgICAgICAgICAgICAgICA3LjEwLjYKK0NVUkxBVVRIX0RJR0VTVCAgICAgICAgICAgICAgICAgNy4xMC42CitDVVJMQVVUSF9ESUdFU1RfSUUgICAgICAgICAgICAgIDcuMTkuMworQ1VSTEFVVEhfR1NTTkVHT1RJQVRFICAgICAgICAgICA3LjEwLjYKK0NVUkxBVVRIX05PTkUgICAgICAgICAgICAgICAgICAgNy4xMC42CitDVVJMQVVUSF9OVExNICAgICAgICAgICAgICAgICAgIDcuMTAuNgorQ1VSTEFVVEhfTlRMTV9XQiAgICAgICAgICAgICAgICA3LjIyLjAKK0NVUkxBVVRIX09OTFkgICAgICAgICAgICAgICAgICAgNy4yMS4zCitDVVJMQ0xPU0VQT0xJQ1lfQ0FMTEJBQ0sgICAgICAgIDcuNworQ1VSTENMT1NFUE9MSUNZX0xFQVNUX1JFQ0VOVExZX1VTRUQgNy43CitDVVJMQ0xPU0VQT0xJQ1lfTEVBU1RfVFJBRkZJQyAgIDcuNworQ1VSTENMT1NFUE9MSUNZX05PTkUgICAgICAgICAgICA3LjcKK0NVUkxDTE9TRVBPTElDWV9PTERFU1QgICAgICAgICAgNy43CitDVVJMQ0xPU0VQT0xJQ1lfU0xPV0VTVCAgICAgICAgIDcuNworQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSyAgICAgICA3LjEKK0NVUkxFX0FHQUlOICAgICAgICAgICAgICAgICAgICAgNy4xOC4yCitDVVJMRV9BTFJFQURZX0NPTVBMRVRFICAgICAgICAgIDcuNy4yCitDVVJMRV9CQURfQ0FMTElOR19PUkRFUiAgICAgICAgIDcuMSAgICAgICAgICAgNy4xNy4wCitDVVJMRV9CQURfQ09OVEVOVF9FTkNPRElORyAgICAgIDcuMTAKK0NVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUUgICAgICAgNy4xMAorQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UICAgICA3LjEKK0NVUkxFX0JBRF9QQVNTV09SRF9FTlRFUkVEICAgICAgNy40LjIgICAgICAgICA3LjE3LjAKK0NVUkxFX0NIVU5LX0ZBSUxFRCAgICAgICAgICAgICAgNy4yMS4wCitDVVJMRV9DT05WX0ZBSUxFRCAgICAgICAgICAgICAgIDcuMTUuNAorQ1VSTEVfQ09OVl9SRVFEICAgICAgICAgICAgICAgICA3LjE1LjQKK0NVUkxFX0NPVUxETlRfQ09OTkVDVCAgICAgICAgICAgNy4xCitDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVCAgICAgIDcuMQorQ1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZICAgICA3LjEKK0NVUkxFX0ZBSUxFRF9JTklUICAgICAgICAgICAgICAgNy4xCitDVVJMRV9GSUxFU0laRV9FWENFRURFRCAgICAgICAgIDcuMTAuOAorQ1VSTEVfRklMRV9DT1VMRE5UX1JFQURfRklMRSAgICA3LjEKK0NVUkxFX0ZUUF9BQ0NFUFRfRkFJTEVEICAgICAgICAgNy4yNC4wCitDVVJMRV9GVFBfQUNDRVBUX1RJTUVPVVQgICAgICAgIDcuMjQuMAorQ1VSTEVfRlRQX0FDQ0VTU19ERU5JRUQgICAgICAgICA3LjEKK0NVUkxFX0ZUUF9CQURfRE9XTkxPQURfUkVTVU1FICAgNy4xICAgICAgICAgICA3LjEKK0NVUkxFX0ZUUF9CQURfRklMRV9MSVNUICAgICAgICAgNy4yMS4wCitDVVJMRV9GVFBfQ0FOVF9HRVRfSE9TVCAgICAgICAgIDcuMQorQ1VSTEVfRlRQX0NBTlRfUkVDT05ORUNUICAgICAgICA3LjEgICAgICAgICAgIDcuMTcuMAorQ1VSTEVfRlRQX0NPVUxETlRfR0VUX1NJWkUgICAgICA3LjEgICAgICAgICAgIDcuMTcuMAorQ1VSTEVfRlRQX0NPVUxETlRfUkVUUl9GSUxFICAgICA3LjEKK0NVUkxFX0ZUUF9DT1VMRE5UX1NFVF9BU0NJSSAgICAgNy4xICAgICAgICAgICA3LjE3LjAKK0NVUkxFX0ZUUF9DT1VMRE5UX1NFVF9CSU5BUlkgICAgNy4xICAgICAgICAgICA3LjE3LjAKK0NVUkxFX0ZUUF9DT1VMRE5UX1NFVF9UWVBFICAgICAgNy4xNy4wCitDVVJMRV9GVFBfQ09VTEROVF9TVE9SX0ZJTEUgICAgIDcuMQorQ1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1QgICAgICA3LjEKK0NVUkxFX0ZUUF9QQVJUSUFMX0ZJTEUgICAgICAgICAgNy4xICAgICAgICAgICA3LjEKK0NVUkxFX0ZUUF9QT1JUX0ZBSUxFRCAgICAgICAgICAgNy4xCitDVVJMRV9GVFBfUFJFVF9GQUlMRUQgICAgICAgICAgIDcuMjAuMAorQ1VSTEVfRlRQX1FVT1RFX0VSUk9SICAgICAgICAgICA3LjEgICAgICAgICAgIDcuMTcuMAorQ1VSTEVfRlRQX1NTTF9GQUlMRUQgICAgICAgICAgICA3LjExLjAgICAgICAgIDcuMTcuMAorQ1VSTEVfRlRQX1VTRVJfUEFTU1dPUkRfSU5DT1JSRUNUIDcuMSAgICAgICAgIDcuMTcuMAorQ1VSTEVfRlRQX1dFSVJEXzIyN19GT1JNQVQgICAgICA3LjEKK0NVUkxFX0ZUUF9XRUlSRF9QQVNTX1JFUExZICAgICAgNy4xCitDVVJMRV9GVFBfV0VJUkRfUEFTVl9SRVBMWSAgICAgIDcuMQorQ1VSTEVfRlRQX1dFSVJEX1NFUlZFUl9SRVBMWSAgICA3LjEKK0NVUkxFX0ZUUF9XRUlSRF9VU0VSX1JFUExZICAgICAgNy4xICAgICAgICAgICA3LjE3LjAKK0NVUkxFX0ZUUF9XUklURV9FUlJPUiAgICAgICAgICAgNy4xICAgICAgICAgICA3LjE3LjAKK0NVUkxFX0ZVTkNUSU9OX05PVF9GT1VORCAgICAgICAgNy4xCitDVVJMRV9HT1RfTk9USElORyAgICAgICAgICAgICAgIDcuOS4xCitDVVJMRV9IVFRQX05PVF9GT1VORCAgICAgICAgICAgIDcuMQorQ1VSTEVfSFRUUF9QT1JUX0ZBSUxFRCAgICAgICAgICA3LjMgICAgICAgICAgIDcuMTIuMAorQ1VSTEVfSFRUUF9QT1NUX0VSUk9SICAgICAgICAgICA3LjEKK0NVUkxFX0hUVFBfUkFOR0VfRVJST1IgICAgICAgICAgNy4xICAgICAgICAgICA3LjE3LjAKK0NVUkxFX0hUVFBfUkVUVVJORURfRVJST1IgICAgICAgNy4xMC4zCitDVVJMRV9JTlRFUkZBQ0VfRkFJTEVEICAgICAgICAgIDcuMTIuMAorQ1VSTEVfTERBUF9DQU5OT1RfQklORCAgICAgICAgICA3LjEKK0NVUkxFX0xEQVBfSU5WQUxJRF9VUkwgICAgICAgICAgNy4xMC44CitDVVJMRV9MREFQX1NFQVJDSF9GQUlMRUQgICAgICAgIDcuMQorQ1VSTEVfTElCUkFSWV9OT1RfRk9VTkQgICAgICAgICA3LjEgICAgICAgICAgIDcuMTcuMAorQ1VSTEVfTE9HSU5fREVOSUVEICAgICAgICAgICAgICA3LjEzLjEKK0NVUkxFX01BTEZPUk1BVF9VU0VSICAgICAgICAgICAgNy4xICAgICAgICAgICA3LjE3LjAKK0NVUkxFX05PVF9CVUlMVF9JTiAgICAgICAgICAgICAgNy4yMS41CitDVVJMRV9PSyAgICAgICAgICAgICAgICAgICAgICAgIDcuMQorQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUICAgICAgICA3LjEwLjIKK0NVUkxFX09QRVJBVElPTl9USU1FT1VURUQgICAgICAgNy4xICAgICAgICAgICA3LjE3LjAKK0NVUkxFX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAgNy4xCitDVVJMRV9QQVJUSUFMX0ZJTEUgICAgICAgICAgICAgIDcuMQorQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OICA3LjE3LjEKK0NVUkxFX1FVT1RFX0VSUk9SICAgICAgICAgICAgICAgNy4xNy4wCitDVVJMRV9SQU5HRV9FUlJPUiAgICAgICAgICAgICAgIDcuMTcuMAorQ1VSTEVfUkVBRF9FUlJPUiAgICAgICAgICAgICAgICA3LjEKK0NVUkxFX1JFQ1ZfRVJST1IgICAgICAgICAgICAgICAgNy4xMAorQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQgICAgICA3LjE3LjAKK0NVUkxFX1JFTU9URV9ESVNLX0ZVTEwgICAgICAgICAgNy4xNy4wCitDVVJMRV9SRU1PVEVfRklMRV9FWElTVFMgICAgICAgIDcuMTcuMAorQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EICAgICA3LjE2LjEKK0NVUkxFX1JUU1BfQ1NFUV9FUlJPUiAgICAgICAgICAgNy4yMC4wCitDVVJMRV9SVFNQX1NFU1NJT05fRVJST1IgICAgICAgIDcuMjAuMAorQ1VSTEVfU0VORF9FUlJPUiAgICAgICAgICAgICAgICA3LjEwCitDVVJMRV9TRU5EX0ZBSUxfUkVXSU5EICAgICAgICAgIDcuMTIuMworQ1VSTEVfU0hBUkVfSU5fVVNFICAgICAgICAgICAgICA3LjkuNiAgICAgICAgIDcuMTcuMAorQ1VSTEVfU1NIICAgICAgICAgICAgICAgICAgICAgICA3LjE2LjEKK0NVUkxFX1NTTF9DQUNFUlQgICAgICAgICAgICAgICAgNy4xMAorQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFICAgICAgICA3LjE2LjAKK0NVUkxFX1NTTF9DRVJUUFJPQkxFTSAgICAgICAgICAgNy4xMAorQ1VSTEVfU1NMX0NJUEhFUiAgICAgICAgICAgICAgICA3LjEwCitDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUiAgICAgICAgIDcuMQorQ1VSTEVfU1NMX0NSTF9CQURGSUxFICAgICAgICAgICA3LjE5LjAKK0NVUkxFX1NTTF9FTkdJTkVfSU5JVEZBSUxFRCAgICAgNy4xMi4zCitDVVJMRV9TU0xfRU5HSU5FX05PVEZPVU5EICAgICAgIDcuOS4zCitDVVJMRV9TU0xfRU5HSU5FX1NFVEZBSUxFRCAgICAgIDcuOS4zCitDVVJMRV9TU0xfSVNTVUVSX0VSUk9SICAgICAgICAgIDcuMTkuMAorQ1VSTEVfU1NMX1BFRVJfQ0VSVElGSUNBVEUgICAgICA3LjggICAgICAgICAgIDcuMTcuMQorQ1VSTEVfU1NMX1NIVVRET1dOX0ZBSUxFRCAgICAgICA3LjE2LjEKK0NVUkxFX1RFTE5FVF9PUFRJT05fU1lOVEFYICAgICAgNy43CitDVVJMRV9URlRQX0RJU0tGVUxMICAgICAgICAgICAgIDcuMTUuMCAgICAgICAgNy4xNy4wCitDVVJMRV9URlRQX0VYSVNUUyAgICAgICAgICAgICAgIDcuMTUuMCAgICAgICAgNy4xNy4wCitDVVJMRV9URlRQX0lMTEVHQUwgICAgICAgICAgICAgIDcuMTUuMAorQ1VSTEVfVEZUUF9OT1NVQ0hVU0VSICAgICAgICAgICA3LjE1LjAKK0NVUkxFX1RGVFBfTk9URk9VTkQgICAgICAgICAgICAgNy4xNS4wCitDVVJMRV9URlRQX1BFUk0gICAgICAgICAgICAgICAgIDcuMTUuMAorQ1VSTEVfVEZUUF9VTktOT1dOSUQgICAgICAgICAgICA3LjE1LjAKK0NVUkxFX1RPT19NQU5ZX1JFRElSRUNUUyAgICAgICAgNy41CitDVVJMRV9VTktOT1dOX09QVElPTiAgICAgICAgICAgIDcuMjEuNQorQ1VSTEVfVU5LTk9XTl9URUxORVRfT1BUSU9OICAgICA3LjcKK0NVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MICAgICAgNy4xCitDVVJMRV9VUExPQURfRkFJTEVEICAgICAgICAgICAgIDcuMTYuMworQ1VSTEVfVVJMX01BTEZPUk1BVCAgICAgICAgICAgICA3LjEKK0NVUkxFX1VSTF9NQUxGT1JNQVRfVVNFUiAgICAgICAgNy4xICAgICAgICAgICA3LjE3LjAKK0NVUkxFX1VTRV9TU0xfRkFJTEVEICAgICAgICAgICAgNy4xNy4wCitDVVJMRV9XUklURV9FUlJPUiAgICAgICAgICAgICAgIDcuMQorQ1VSTEZJTEVUWVBFX0RFVklDRV9CTE9DSyAgICAgICA3LjIxLjAKK0NVUkxGSUxFVFlQRV9ERVZJQ0VfQ0hBUiAgICAgICAgNy4yMS4wCitDVVJMRklMRVRZUEVfRElSRUNUT1JZICAgICAgICAgIDcuMjEuMAorQ1VSTEZJTEVUWVBFX0RPT1IgICAgICAgICAgICAgICA3LjIxLjAKK0NVUkxGSUxFVFlQRV9GSUxFICAgICAgICAgICAgICAgNy4yMS4wCitDVVJMRklMRVRZUEVfTkFNRURQSVBFICAgICAgICAgIDcuMjEuMAorQ1VSTEZJTEVUWVBFX1NPQ0tFVCAgICAgICAgICAgICA3LjIxLjAKK0NVUkxGSUxFVFlQRV9TWU1MSU5LICAgICAgICAgICAgNy4yMS4wCitDVVJMRklMRVRZUEVfVU5LTk9XTiAgICAgICAgICAgIDcuMjEuMAorQ1VSTEZJTkZPRkxBR19LTk9XTl9GSUxFTkFNRSAgICA3LjIxLjAKK0NVUkxGSU5GT0ZMQUdfS05PV05fRklMRVRZUEUgICAgNy4yMS4wCitDVVJMRklORk9GTEFHX0tOT1dOX0dJRCAgICAgICAgIDcuMjEuMAorQ1VSTEZJTkZPRkxBR19LTk9XTl9ITElOS0NPVU5UICA3LjIxLjAKK0NVUkxGSU5GT0ZMQUdfS05PV05fUEVSTSAgICAgICAgNy4yMS4wCitDVVJMRklORk9GTEFHX0tOT1dOX1NJWkUgICAgICAgIDcuMjEuMAorQ1VSTEZJTkZPRkxBR19LTk9XTl9USU1FICAgICAgICA3LjIxLjAKK0NVUkxGSU5GT0ZMQUdfS05PV05fVUlEICAgICAgICAgNy4yMS4wCitDVVJMRk9STV9BUlJBWSAgICAgICAgICAgICAgICAgIDcuOS4xCitDVVJMRk9STV9BUlJBWV9FTkQgICAgICAgICAgICAgIDcuOS4xICAgICAgICAgNy45LjUgICAgICAgNy45LjYKK0NVUkxGT1JNX0FSUkFZX1NUQVJUICAgICAgICAgICAgNy45LjEgICAgICAgICA3LjkuNSAgICAgICA3LjkuNgorQ1VSTEZPUk1fQlVGRkVSICAgICAgICAgICAgICAgICA3LjkuOAorQ1VSTEZPUk1fQlVGRkVSTEVOR1RIICAgICAgICAgICA3LjkuOAorQ1VSTEZPUk1fQlVGRkVSUFRSICAgICAgICAgICAgICA3LjkuOAorQ1VSTEZPUk1fQ09OVEVOVEhFQURFUiAgICAgICAgICA3LjkuMworQ1VSTEZPUk1fQ09OVEVOVFNMRU5HVEggICAgICAgICA3LjkKK0NVUkxGT1JNX0NPTlRFTlRUWVBFICAgICAgICAgICAgNy45CitDVVJMRk9STV9DT1BZQ09OVEVOVFMgICAgICAgICAgIDcuOQorQ1VSTEZPUk1fQ09QWU5BTUUgICAgICAgICAgICAgICA3LjkKK0NVUkxGT1JNX0VORCAgICAgICAgICAgICAgICAgICAgNy45CitDVVJMRk9STV9GSUxFICAgICAgICAgICAgICAgICAgIDcuOQorQ1VSTEZPUk1fRklMRUNPTlRFTlQgICAgICAgICAgICA3LjkuMQorQ1VSTEZPUk1fRklMRU5BTUUgICAgICAgICAgICAgICA3LjkuNgorQ1VSTEZPUk1fTkFNRUxFTkdUSCAgICAgICAgICAgICA3LjkKK0NVUkxGT1JNX05PVEhJTkcgICAgICAgICAgICAgICAgNy45CitDVVJMRk9STV9QVFJDT05URU5UUyAgICAgICAgICAgIDcuOQorQ1VSTEZPUk1fUFRSTkFNRSAgICAgICAgICAgICAgICA3LjkKK0NVUkxGT1JNX1NUUkVBTSAgICAgICAgICAgICAgICAgNy4xOC4yCitDVVJMRlRQQVVUSF9ERUZBVUxUICAgICAgICAgICAgIDcuMTIuMgorQ1VSTEZUUEFVVEhfU1NMICAgICAgICAgICAgICAgICA3LjEyLjIKK0NVUkxGVFBBVVRIX1RMUyAgICAgICAgICAgICAgICAgNy4xMi4yCitDVVJMRlRQTUVUSE9EX0RFRkFVTFQgICAgICAgICAgIDcuMTUuMworQ1VSTEZUUE1FVEhPRF9NVUxUSUNXRCAgICAgICAgICA3LjE1LjMKK0NVUkxGVFBNRVRIT0RfTk9DV0QgICAgICAgICAgICAgNy4xNS4zCitDVVJMRlRQTUVUSE9EX1NJTkdMRUNXRCAgICAgICAgIDcuMTUuMworQ1VSTEZUUFNTTF9BTEwgICAgICAgICAgICAgICAgICA3LjExLjAgICAgICAgIDcuMTcuMAorQ1VSTEZUUFNTTF9DQ0NfQUNUSVZFICAgICAgICAgICA3LjE2LjIKK0NVUkxGVFBTU0xfQ0NDX05PTkUgICAgICAgICAgICAgNy4xNi4yCitDVVJMRlRQU1NMX0NDQ19QQVNTSVZFICAgICAgICAgIDcuMTYuMQorQ1VSTEZUUFNTTF9DT05UUk9MICAgICAgICAgICAgICA3LjExLjAgICAgICAgIDcuMTcuMAorQ1VSTEZUUFNTTF9OT05FICAgICAgICAgICAgICAgICA3LjExLjAgICAgICAgIDcuMTcuMAorQ1VSTEZUUFNTTF9UUlkgICAgICAgICAgICAgICAgICA3LjExLjAgICAgICAgIDcuMTcuMAorQ1VSTEZUUF9DUkVBVEVfRElSICAgICAgICAgICAgICA3LjE5LjQKK0NVUkxGVFBfQ1JFQVRFX0RJUl9OT05FICAgICAgICAgNy4xOS40CitDVVJMRlRQX0NSRUFURV9ESVJfUkVUUlkgICAgICAgIDcuMTkuNAorQ1VSTEdTU0FQSV9ERUxFR0FUSU9OX0ZMQUcgICAgICA3LjIyLjAKK0NVUkxHU1NBUElfREVMRUdBVElPTl9OT05FICAgICAgNy4yMi4wCitDVVJMR1NTQVBJX0RFTEVHQVRJT05fUE9MSUNZX0ZMQUcgNy4yMi4wCitDVVJMSU5GT19BUFBDT05ORUNUX1RJTUUgICAgICAgIDcuMTkuMAorQ1VSTElORk9fQ0VSVElORk8gICAgICAgICAgICAgICA3LjE5LjEKK0NVUkxJTkZPX0NPTkRJVElPTl9VTk1FVCAgICAgICAgNy4xOS40CitDVVJMSU5GT19DT05ORUNUX1RJTUUgICAgICAgICAgIDcuNC4xCitDVVJMSU5GT19DT05URU5UX0xFTkdUSF9ET1dOTE9BRCA3LjYuMQorQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfVVBMT0FEICA3LjYuMQorQ1VSTElORk9fQ09OVEVOVF9UWVBFICAgICAgICAgICA3LjkuNAorQ1VSTElORk9fQ09PS0lFTElTVCAgICAgICAgICAgICA3LjE0LjEKK0NVUkxJTkZPX0RBVEFfSU4gICAgICAgICAgICAgICAgNy45LjYKK0NVUkxJTkZPX0RBVEFfT1VUICAgICAgICAgICAgICAgNy45LjYKK0NVUkxJTkZPX0RPVUJMRSAgICAgICAgICAgICAgICAgNy40LjEKK0NVUkxJTkZPX0VGRkVDVElWRV9VUkwgICAgICAgICAgNy40CitDVVJMSU5GT19FTkQgICAgICAgICAgICAgICAgICAgIDcuOS42CitDVVJMSU5GT19GSUxFVElNRSAgICAgICAgICAgICAgIDcuNQorQ1VSTElORk9fRlRQX0VOVFJZX1BBVEggICAgICAgICA3LjE1LjQKK0NVUkxJTkZPX0hFQURFUl9JTiAgICAgICAgICAgICAgNy45LjYKK0NVUkxJTkZPX0hFQURFUl9PVVQgICAgICAgICAgICAgNy45LjYKK0NVUkxJTkZPX0hFQURFUl9TSVpFICAgICAgICAgICAgNy40LjEKK0NVUkxJTkZPX0hUVFBBVVRIX0FWQUlMICAgICAgICAgNy4xMC44CitDVVJMSU5GT19IVFRQX0NPREUgICAgICAgICAgICAgIDcuNC4xICAgICAgICAgNy4xMC44CitDVVJMSU5GT19IVFRQX0NPTk5FQ1RDT0RFICAgICAgIDcuMTAuNworQ1VSTElORk9fTEFTVE9ORSAgICAgICAgICAgICAgICA3LjQuMQorQ1VSTElORk9fTEFTVFNPQ0tFVCAgICAgICAgICAgICA3LjE1LjIKK0NVUkxJTkZPX0xPQ0FMX0lQICAgICAgICAgICAgICAgNy4yMS4wCitDVVJMSU5GT19MT0NBTF9QT1JUICAgICAgICAgICAgIDcuMjEuMAorQ1VSTElORk9fTE9ORyAgICAgICAgICAgICAgICAgICA3LjQuMQorQ1VSTElORk9fTUFTSyAgICAgICAgICAgICAgICAgICA3LjQuMQorQ1VSTElORk9fTkFNRUxPT0tVUF9USU1FICAgICAgICA3LjQuMQorQ1VSTElORk9fTk9ORSAgICAgICAgICAgICAgICAgICA3LjQuMQorQ1VSTElORk9fTlVNX0NPTk5FQ1RTICAgICAgICAgICA3LjEyLjMKK0NVUkxJTkZPX09TX0VSUk5PICAgICAgICAgICAgICAgNy4xMi4yCitDVVJMSU5GT19QUkVUUkFOU0ZFUl9USU1FICAgICAgIDcuNC4xCitDVVJMSU5GT19QUklNQVJZX0lQICAgICAgICAgICAgIDcuMTkuMAorQ1VSTElORk9fUFJJTUFSWV9QT1JUICAgICAgICAgICA3LjIxLjAKK0NVUkxJTkZPX1BSSVZBVEUgICAgICAgICAgICAgICAgNy4xMC4zCitDVVJMSU5GT19QUk9YWUFVVEhfQVZBSUwgICAgICAgIDcuMTAuOAorQ1VSTElORk9fUkVESVJFQ1RfQ09VTlQgICAgICAgICA3LjkuNworQ1VSTElORk9fUkVESVJFQ1RfVElNRSAgICAgICAgICA3LjkuNworQ1VSTElORk9fUkVESVJFQ1RfVVJMICAgICAgICAgICA3LjE4LjIKK0NVUkxJTkZPX1JFUVVFU1RfU0laRSAgICAgICAgICAgNy40LjEKK0NVUkxJTkZPX1JFU1BPTlNFX0NPREUgICAgICAgICAgNy4xMC44CitDVVJMSU5GT19SVFNQX0NMSUVOVF9DU0VRICAgICAgIDcuMjAuMAorQ1VSTElORk9fUlRTUF9DU0VRX1JFQ1YgICAgICAgICA3LjIwLjAKK0NVUkxJTkZPX1JUU1BfU0VSVkVSX0NTRVEgICAgICAgNy4yMC4wCitDVVJMSU5GT19SVFNQX1NFU1NJT05fSUQgICAgICAgIDcuMjAuMAorQ1VSTElORk9fU0laRV9ET1dOTE9BRCAgICAgICAgICA3LjQuMQorQ1VSTElORk9fU0laRV9VUExPQUQgICAgICAgICAgICA3LjQuMQorQ1VSTElORk9fU0xJU1QgICAgICAgICAgICAgICAgICA3LjEyLjMKK0NVUkxJTkZPX1NQRUVEX0RPV05MT0FEICAgICAgICAgNy40LjEKK0NVUkxJTkZPX1NQRUVEX1VQTE9BRCAgICAgICAgICAgNy40LjEKK0NVUkxJTkZPX1NTTF9EQVRBX0lOICAgICAgICAgICAgNy4xMi4xCitDVVJMSU5GT19TU0xfREFUQV9PVVQgICAgICAgICAgIDcuMTIuMQorQ1VSTElORk9fU1NMX0VOR0lORVMgICAgICAgICAgICA3LjEyLjMKK0NVUkxJTkZPX1NTTF9WRVJJRllSRVNVTFQgICAgICAgNy41CitDVVJMSU5GT19TVEFSVFRSQU5TRkVSX1RJTUUgICAgIDcuOS4yCitDVVJMSU5GT19TVFJJTkcgICAgICAgICAgICAgICAgIDcuNC4xCitDVVJMSU5GT19URVhUICAgICAgICAgICAgICAgICAgIDcuOS42CitDVVJMSU5GT19UT1RBTF9USU1FICAgICAgICAgICAgIDcuNC4xCitDVVJMSU5GT19UWVBFTUFTSyAgICAgICAgICAgICAgIDcuNC4xCitDVVJMSU9DTURfTk9QICAgICAgICAgICAgICAgICAgIDcuMTIuMworQ1VSTElPQ01EX1JFU1RBUlRSRUFEICAgICAgICAgICA3LjEyLjMKK0NVUkxJT0VfRkFJTFJFU1RBUlQgICAgICAgICAgICAgNy4xMi4zCitDVVJMSU9FX09LICAgICAgICAgICAgICAgICAgICAgIDcuMTIuMworQ1VSTElPRV9VTktOT1dOQ01EICAgICAgICAgICAgICA3LjEyLjMKK0NVUkxLSE1BVENIX01JU01BVENIICAgICAgICAgICAgNy4xOS42CitDVVJMS0hNQVRDSF9NSVNTSU5HICAgICAgICAgICAgIDcuMTkuNgorQ1VSTEtITUFUQ0hfT0sgICAgICAgICAgICAgICAgICA3LjE5LjYKK0NVUkxLSFNUQVRfREVGRVIgICAgICAgICAgICAgICAgNy4xOS42CitDVVJMS0hTVEFUX0ZJTkUgICAgICAgICAgICAgICAgIDcuMTkuNgorQ1VSTEtIU1RBVF9GSU5FX0FERF9UT19GSUxFICAgICA3LjE5LjYKK0NVUkxLSFNUQVRfUkVKRUNUICAgICAgICAgICAgICAgNy4xOS42CitDVVJMS0hUWVBFX0RTUyAgICAgICAgICAgICAgICAgIDcuMTkuNgorQ1VSTEtIVFlQRV9SU0EgICAgICAgICAgICAgICAgICA3LjE5LjYKK0NVUkxLSFRZUEVfUlNBMSAgICAgICAgICAgICAgICAgNy4xOS42CitDVVJMS0hUWVBFX1VOS05PV04gICAgICAgICAgICAgIDcuMTkuNgorQ1VSTE1PUFRfTUFYQ09OTkVDVFMgICAgICAgICAgICA3LjE2LjMKK0NVUkxNT1BUX1BJUEVMSU5JTkcgICAgICAgICAgICAgNy4xNi4wCitDVVJMTU9QVF9TT0NLRVREQVRBICAgICAgICAgICAgIDcuMTUuNAorQ1VSTE1PUFRfU09DS0VURlVOQ1RJT04gICAgICAgICA3LjE1LjQKK0NVUkxNT1BUX1RJTUVSREFUQSAgICAgICAgICAgICAgNy4xNi4wCitDVVJMTU9QVF9USU1FUkZVTkNUSU9OICAgICAgICAgIDcuMTYuMAorQ1VSTE1TR19ET05FICAgICAgICAgICAgICAgICAgICA3LjkuNgorQ1VSTE1TR19OT05FICAgICAgICAgICAgICAgICAgICA3LjkuNgorQ1VSTE1fQkFEX0VBU1lfSEFORExFICAgICAgICAgICA3LjkuNgorQ1VSTE1fQkFEX0hBTkRMRSAgICAgICAgICAgICAgICA3LjkuNgorQ1VSTE1fQkFEX1NPQ0tFVCAgICAgICAgICAgICAgICA3LjE1LjQKK0NVUkxNX0NBTExfTVVMVElfUEVSRk9STSAgICAgICAgNy45LjYKK0NVUkxNX0NBTExfTVVMVElfU09DS0VUICAgICAgICAgNy4xNS41CitDVVJMTV9JTlRFUk5BTF9FUlJPUiAgICAgICAgICAgIDcuOS42CitDVVJMTV9PSyAgICAgICAgICAgICAgICAgICAgICAgIDcuOS42CitDVVJMTV9PVVRfT0ZfTUVNT1JZICAgICAgICAgICAgIDcuOS42CitDVVJMTV9VTktOT1dOX09QVElPTiAgICAgICAgICAgIDcuMTUuNAorQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCAgICAgICA3LjEKK0NVUkxPUFRUWVBFX0xPTkcgICAgICAgICAgICAgICAgNy4xCitDVVJMT1BUVFlQRV9PQkpFQ1RQT0lOVCAgICAgICAgIDcuMQorQ1VSTE9QVFRZUEVfT0ZGX1QgICAgICAgICAgICAgICA3LjExLjAKK0NVUkxPUFRfQUNDRVBUVElNRU9VVF9NUyAgICAgICAgNy4yNC4wCitDVVJMT1BUX0FDQ0VQVF9FTkNPRElORyAgICAgICAgIDcuMjEuNgorQ1VSTE9QVF9BRERSRVNTX1NDT1BFICAgICAgICAgICA3LjE5LjAKK0NVUkxPUFRfQVBQRU5EICAgICAgICAgICAgICAgICAgNy4xNy4wCitDVVJMT1BUX0FVVE9SRUZFUkVSICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9CVUZGRVJTSVpFICAgICAgICAgICAgICA3LjEwCitDVVJMT1BUX0NBSU5GTyAgICAgICAgICAgICAgICAgIDcuNC4yCitDVVJMT1BUX0NBUEFUSCAgICAgICAgICAgICAgICAgIDcuOS44CitDVVJMT1BUX0NFUlRJTkZPICAgICAgICAgICAgICAgIDcuMTkuMQorQ1VSTE9QVF9DSFVOS19CR05fRlVOQ1RJT04gICAgICA3LjIxLjAKK0NVUkxPUFRfQ0hVTktfREFUQSAgICAgICAgICAgICAgNy4yMS4wCitDVVJMT1BUX0NIVU5LX0VORF9GVU5DVElPTiAgICAgIDcuMjEuMAorQ1VSTE9QVF9DTE9TRUZVTkNUSU9OICAgICAgICAgICA3LjcgICAgICAgICAgIDcuMTEuMSAgICAgIDcuMTUuNQorQ1VSTE9QVF9DTE9TRVBPTElDWSAgICAgICAgICAgICA3LjcgICAgICAgICAgIDcuMTYuMQorQ1VSTE9QVF9DTE9TRVNPQ0tFVERBVEEgICAgICAgICA3LjIxLjcKK0NVUkxPUFRfQ0xPU0VTT0NLRVRGVU5DVElPTiAgICAgNy4yMS43CitDVVJMT1BUX0NPTk5FQ1RUSU1FT1VUICAgICAgICAgIDcuNworQ1VSTE9QVF9DT05ORUNUVElNRU9VVF9NUyAgICAgICA3LjE2LjIKK0NVUkxPUFRfQ09OTkVDVF9PTkxZICAgICAgICAgICAgNy4xNS4yCitDVVJMT1BUX0NPTlZfRlJPTV9ORVRXT1JLX0ZVTkNUSU9OIDcuMTUuNAorQ1VSTE9QVF9DT05WX0ZST01fVVRGOF9GVU5DVElPTiA3LjE1LjQKK0NVUkxPUFRfQ09OVl9UT19ORVRXT1JLX0ZVTkNUSU9OIDcuMTUuNAorQ1VSTE9QVF9DT09LSUUgICAgICAgICAgICAgICAgICA3LjEKK0NVUkxPUFRfQ09PS0lFRklMRSAgICAgICAgICAgICAgNy4xCitDVVJMT1BUX0NPT0tJRUpBUiAgICAgICAgICAgICAgIDcuOQorQ1VSTE9QVF9DT09LSUVMSVNUICAgICAgICAgICAgICA3LjE0LjEKK0NVUkxPUFRfQ09PS0lFU0VTU0lPTiAgICAgICAgICAgNy45LjcKK0NVUkxPUFRfQ09QWVBPU1RGSUVMRFMgICAgICAgICAgNy4xNy4xCitDVVJMT1BUX0NSTEYgICAgICAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9DUkxGSUxFICAgICAgICAgICAgICAgICA3LjE5LjAKK0NVUkxPUFRfQ1VTVE9NUkVRVUVTVCAgICAgICAgICAgNy4xCitDVVJMT1BUX0RFQlVHREFUQSAgICAgICAgICAgICAgIDcuOS42CitDVVJMT1BUX0RFQlVHRlVOQ1RJT04gICAgICAgICAgIDcuOS42CitDVVJMT1BUX0RJUkxJU1RPTkxZICAgICAgICAgICAgIDcuMTcuMAorQ1VSTE9QVF9ETlNfQ0FDSEVfVElNRU9VVCAgICAgICA3LjkuMworQ1VSTE9QVF9ETlNfU0VSVkVSUyAgICAgICAgICAgICA3LjI0LjAKK0NVUkxPUFRfRE5TX1VTRV9HTE9CQUxfQ0FDSEUgICAgNy45LjMgICAgICAgICA3LjExLjEKK0NVUkxPUFRfRUdEU09DS0VUICAgICAgICAgICAgICAgNy43CitDVVJMT1BUX0VOQ09ESU5HICAgICAgICAgICAgICAgIDcuMTAKK0NVUkxPUFRfRVJST1JCVUZGRVIgICAgICAgICAgICAgNy4xCitDVVJMT1BUX0ZBSUxPTkVSUk9SICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9GSUxFICAgICAgICAgICAgICAgICAgICA3LjEgICAgICAgICAgIDcuOS43CitDVVJMT1BUX0ZJTEVUSU1FICAgICAgICAgICAgICAgIDcuNQorQ1VSTE9QVF9GTk1BVENIX0RBVEEgICAgICAgICAgICA3LjIxLjAKK0NVUkxPUFRfRk5NQVRDSF9GVU5DVElPTiAgICAgICAgNy4yMS4wCitDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OICAgICAgICAgIDcuMQorQ1VSTE9QVF9GT1JCSURfUkVVU0UgICAgICAgICAgICA3LjcKK0NVUkxPUFRfRlJFU0hfQ09OTkVDVCAgICAgICAgICAgNy43CitDVVJMT1BUX0ZUUEFQUEVORCAgICAgICAgICAgICAgIDcuMSAgICAgICAgICAgNy4xNi40CitDVVJMT1BUX0ZUUEFTQ0lJICAgICAgICAgICAgICAgIDcuMSAgICAgICAgICAgNy4xMS4xICAgICAgNy4xNS41CitDVVJMT1BUX0ZUUExJU1RPTkxZICAgICAgICAgICAgIDcuMSAgICAgICAgICAgNy4xNi40CitDVVJMT1BUX0ZUUFBPUlQgICAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9GVFBTU0xBVVRIICAgICAgICAgICAgICA3LjEyLjIKK0NVUkxPUFRfRlRQX0FDQ09VTlQgICAgICAgICAgICAgNy4xMy4wCitDVVJMT1BUX0ZUUF9BTFRFUk5BVElWRV9UT19VU0VSIDcuMTUuNQorQ1VSTE9QVF9GVFBfQ1JFQVRFX01JU1NJTkdfRElSUyA3LjEwLjcKK0NVUkxPUFRfRlRQX0ZJTEVNRVRIT0QgICAgICAgICAgNy4xNS4xCitDVVJMT1BUX0ZUUF9SRVNQT05TRV9USU1FT1VUICAgIDcuMTAuOAorQ1VSTE9QVF9GVFBfU0tJUF9QQVNWX0lQICAgICAgICA3LjE1LjAKK0NVUkxPUFRfRlRQX1NTTCAgICAgICAgICAgICAgICAgNy4xMS4wICAgICAgICA3LjE2LjQKK0NVUkxPUFRfRlRQX1NTTF9DQ0MgICAgICAgICAgICAgNy4xNi4xCitDVVJMT1BUX0ZUUF9VU0VfRVBSVCAgICAgICAgICAgIDcuMTAuNQorQ1VSTE9QVF9GVFBfVVNFX0VQU1YgICAgICAgICAgICA3LjkuMgorQ1VSTE9QVF9GVFBfVVNFX1BSRVQgICAgICAgICAgICA3LjIwLjAKK0NVUkxPUFRfR1NTQVBJX0RFTEVHQVRJT04gICAgICAgNy4yMi4wCitDVVJMT1BUX0hFQURFUiAgICAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9IRUFERVJEQVRBICAgICAgICAgICAgICA3LjEwCitDVVJMT1BUX0hFQURFUkZVTkNUSU9OICAgICAgICAgIDcuNy4yCitDVVJMT1BUX0hUVFAyMDBBTElBU0VTICAgICAgICAgIDcuMTAuMworQ1VSTE9QVF9IVFRQQVVUSCAgICAgICAgICAgICAgICA3LjEwLjYKK0NVUkxPUFRfSFRUUEdFVCAgICAgICAgICAgICAgICAgNy44LjEKK0NVUkxPUFRfSFRUUEhFQURFUiAgICAgICAgICAgICAgNy4xCitDVVJMT1BUX0hUVFBQT1NUICAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9IVFRQUFJPWFlUVU5ORUwgICAgICAgICA3LjMKK0NVUkxPUFRfSFRUUFJFUVVFU1QgICAgICAgICAgICAgNy4xICAgICAgICAgICAtICAgICAgICAgICA3LjE1LjUKK0NVUkxPUFRfSFRUUF9DT05URU5UX0RFQ09ESU5HICAgNy4xNi4yCitDVVJMT1BUX0hUVFBfVFJBTlNGRVJfREVDT0RJTkcgIDcuMTYuMgorQ1VSTE9QVF9IVFRQX1ZFUlNJT04gICAgICAgICAgICA3LjkuMQorQ1VSTE9QVF9JR05PUkVfQ09OVEVOVF9MRU5HVEggICA3LjE0LjEKK0NVUkxPUFRfSU5GSUxFICAgICAgICAgICAgICAgICAgNy4xICAgICAgICAgICA3LjkuNworQ1VSTE9QVF9JTkZJTEVTSVpFICAgICAgICAgICAgICA3LjEKK0NVUkxPUFRfSU5GSUxFU0laRV9MQVJHRSAgICAgICAgNy4xMS4wCitDVVJMT1BUX0lOVEVSRkFDRSAgICAgICAgICAgICAgIDcuMworQ1VSTE9QVF9JTlRFUkxFQVZFREFUQSAgICAgICAgICA3LjIwLjAKK0NVUkxPUFRfSU5URVJMRUFWRUZVTkNUSU9OICAgICAgNy4yMC4wCitDVVJMT1BUX0lPQ1RMREFUQSAgICAgICAgICAgICAgIDcuMTIuMworQ1VSTE9QVF9JT0NUTEZVTkNUSU9OICAgICAgICAgICA3LjEyLjMKK0NVUkxPUFRfSVBSRVNPTFZFICAgICAgICAgICAgICAgNy4xMC44CitDVVJMT1BUX0lTU1VFUkNFUlQgICAgICAgICAgICAgIDcuMTkuMAorQ1VSTE9QVF9LRVlQQVNTV0QgICAgICAgICAgICAgICA3LjE3LjAKK0NVUkxPUFRfS1JCNExFVkVMICAgICAgICAgICAgICAgNy4zICAgICAgICAgICA3LjE3LjAKK0NVUkxPUFRfS1JCTEVWRUwgICAgICAgICAgICAgICAgNy4xNi40CitDVVJMT1BUX0xPQ0FMUE9SVCAgICAgICAgICAgICAgIDcuMTUuMgorQ1VSTE9QVF9MT0NBTFBPUlRSQU5HRSAgICAgICAgICA3LjE1LjIKK0NVUkxPUFRfTE9XX1NQRUVEX0xJTUlUICAgICAgICAgNy4xCitDVVJMT1BUX0xPV19TUEVFRF9USU1FICAgICAgICAgIDcuMQorQ1VSTE9QVF9NQUlMX0FVVEggICAgICAgICAgICAgICA3LjI1LjAKK0NVUkxPUFRfTUFJTF9GUk9NICAgICAgICAgICAgICAgNy4yMC4wCitDVVJMT1BUX01BSUxfUkNQVCAgICAgICAgICAgICAgIDcuMjAuMAorQ1VSTE9QVF9NQVhDT05ORUNUUyAgICAgICAgICAgICA3LjcKK0NVUkxPUFRfTUFYRklMRVNJWkUgICAgICAgICAgICAgNy4xMC44CitDVVJMT1BUX01BWEZJTEVTSVpFX0xBUkdFICAgICAgIDcuMTEuMAorQ1VSTE9QVF9NQVhSRURJUlMgICAgICAgICAgICAgICA3LjUKK0NVUkxPUFRfTUFYX1JFQ1ZfU1BFRURfTEFSR0UgICAgNy4xNS41CitDVVJMT1BUX01BWF9TRU5EX1NQRUVEX0xBUkdFICAgIDcuMTUuNQorQ1VSTE9QVF9NVVRFICAgICAgICAgICAgICAgICAgICA3LjEgICAgICAgICAgIDcuOCAgICAgICAgIDcuMTUuNQorQ1VSTE9QVF9ORVRSQyAgICAgICAgICAgICAgICAgICA3LjEKK0NVUkxPUFRfTkVUUkNfRklMRSAgICAgICAgICAgICAgNy4xMS4wCitDVVJMT1BUX05FV19ESVJFQ1RPUllfUEVSTVMgICAgIDcuMTYuNAorQ1VSTE9QVF9ORVdfRklMRV9QRVJNUyAgICAgICAgICA3LjE2LjQKK0NVUkxPUFRfTk9CT0RZICAgICAgICAgICAgICAgICAgNy4xCitDVVJMT1BUX05PUFJPR1JFU1MgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9OT1BST1hZICAgICAgICAgICAgICAgICA3LjE5LjQKK0NVUkxPUFRfTk9TSUdOQUwgICAgICAgICAgICAgICAgNy4xMAorQ1VSTE9QVF9OT1RISU5HICAgICAgICAgICAgICAgICA3LjEuMSAgICAgICAgIDcuMTEuMSAgICAgIDcuMTEuMAorQ1VSTE9QVF9PUEVOU09DS0VUREFUQSAgICAgICAgICA3LjE3LjEKK0NVUkxPUFRfT1BFTlNPQ0tFVEZVTkNUSU9OICAgICAgNy4xNy4xCitDVVJMT1BUX1BBU1NXRERBVEEgICAgICAgICAgICAgIDcuNC4yICAgICAgICAgNy4xMS4xICAgICAgNy4xNS41CitDVVJMT1BUX1BBU1NXREZVTkNUSU9OICAgICAgICAgIDcuNC4yICAgICAgICAgNy4xMS4xICAgICAgNy4xNS41CitDVVJMT1BUX1BBU1NXT1JEICAgICAgICAgICAgICAgIDcuMTkuMQorQ1VSTE9QVF9QQVNWX0hPU1QgICAgICAgICAgICAgICA3LjEyLjEgICAgICAgIDcuMTYuMCAgICAgIDcuMTUuNQorQ1VSTE9QVF9QT1JUICAgICAgICAgICAgICAgICAgICA3LjEKK0NVUkxPUFRfUE9TVCAgICAgICAgICAgICAgICAgICAgNy4xCitDVVJMT1BUX1BPU1QzMDEgICAgICAgICAgICAgICAgIDcuMTcuMSAgICAgICAgNy4xOS4xCitDVVJMT1BUX1BPU1RGSUVMRFMgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9QT1NURklFTERTSVpFICAgICAgICAgICA3LjIKK0NVUkxPUFRfUE9TVEZJRUxEU0laRV9MQVJHRSAgICAgNy4xMS4xCitDVVJMT1BUX1BPU1RRVU9URSAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9QT1NUUkVESVIgICAgICAgICAgICAgICA3LjE5LjEKK0NVUkxPUFRfUFJFUVVPVEUgICAgICAgICAgICAgICAgNy45LjUKK0NVUkxPUFRfUFJJVkFURSAgICAgICAgICAgICAgICAgNy4xMC4zCitDVVJMT1BUX1BST0dSRVNTREFUQSAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OICAgICAgICA3LjEKK0NVUkxPUFRfUFJPVE9DT0xTICAgICAgICAgICAgICAgNy4xOS40CitDVVJMT1BUX1BST1hZICAgICAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9QUk9YWUFVVEggICAgICAgICAgICAgICA3LjEwLjcKK0NVUkxPUFRfUFJPWFlQQVNTV09SRCAgICAgICAgICAgNy4xOS4xCitDVVJMT1BUX1BST1hZUE9SVCAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9QUk9YWVRZUEUgICAgICAgICAgICAgICA3LjEwCitDVVJMT1BUX1BST1hZVVNFUk5BTUUgICAgICAgICAgIDcuMTkuMQorQ1VSTE9QVF9QUk9YWVVTRVJQV0QgICAgICAgICAgICA3LjEKK0NVUkxPUFRfUFJPWFlfVFJBTlNGRVJfTU9ERSAgICAgNy4xOC4wCitDVVJMT1BUX1BVVCAgICAgICAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9RVU9URSAgICAgICAgICAgICAgICAgICA3LjEKK0NVUkxPUFRfUkFORE9NX0ZJTEUgICAgICAgICAgICAgNy43CitDVVJMT1BUX1JBTkdFICAgICAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9SRUFEREFUQSAgICAgICAgICAgICAgICA3LjkuNworQ1VSTE9QVF9SRUFERlVOQ1RJT04gICAgICAgICAgICA3LjEKK0NVUkxPUFRfUkVESVJfUFJPVE9DT0xTICAgICAgICAgNy4xOS40CitDVVJMT1BUX1JFRkVSRVIgICAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9SRVNPTFZFICAgICAgICAgICAgICAgICA3LjIxLjMKK0NVUkxPUFRfUkVTVU1FX0ZST00gICAgICAgICAgICAgNy4xCitDVVJMT1BUX1JFU1VNRV9GUk9NX0xBUkdFICAgICAgIDcuMTEuMAorQ1VSTE9QVF9SVFNQSEVBREVSICAgICAgICAgICAgICA3LjIwLjAKK0NVUkxPUFRfUlRTUF9DTElFTlRfQ1NFUSAgICAgICAgNy4yMC4wCitDVVJMT1BUX1JUU1BfUkVRVUVTVCAgICAgICAgICAgIDcuMjAuMAorQ1VSTE9QVF9SVFNQX1NFUlZFUl9DU0VRICAgICAgICA3LjIwLjAKK0NVUkxPUFRfUlRTUF9TRVNTSU9OX0lEICAgICAgICAgNy4yMC4wCitDVVJMT1BUX1JUU1BfU1RSRUFNX1VSSSAgICAgICAgIDcuMjAuMAorQ1VSTE9QVF9SVFNQX1RSQU5TUE9SVCAgICAgICAgICA3LjIwLjAKK0NVUkxPUFRfU0VFS0RBVEEgICAgICAgICAgICAgICAgNy4xOC4wCitDVVJMT1BUX1NFRUtGVU5DVElPTiAgICAgICAgICAgIDcuMTguMAorQ1VSTE9QVF9TRVJWRVJfUkVTUE9OU0VfVElNRU9VVCA3LjIwLjAKK0NVUkxPUFRfU0hBUkUgICAgICAgICAgICAgICAgICAgNy4xMAorQ1VSTE9QVF9TT0NLT1BUREFUQSAgICAgICAgICAgICA3LjE2LjAKK0NVUkxPUFRfU09DS09QVEZVTkNUSU9OICAgICAgICAgNy4xNi4wCitDVVJMT1BUX1NPQ0tTNV9HU1NBUElfTkVDICAgICAgIDcuMTkuNAorQ1VSTE9QVF9TT0NLUzVfR1NTQVBJX1NFUlZJQ0UgICA3LjE5LjQKK0NVUkxPUFRfU09VUkNFX0hPU1QgICAgICAgICAgICAgNy4xMi4xICAgICAgICAtICAgICAgICAgICA3LjE1LjUKK0NVUkxPUFRfU09VUkNFX1BBVEggICAgICAgICAgICAgNy4xMi4xICAgICAgICAtICAgICAgICAgICA3LjE1LjUKK0NVUkxPUFRfU09VUkNFX1BPUlQgICAgICAgICAgICAgNy4xMi4xICAgICAgICAtICAgICAgICAgICA3LjE1LjUKK0NVUkxPUFRfU09VUkNFX1BPU1RRVU9URSAgICAgICAgNy4xMi4xICAgICAgICAtICAgICAgICAgICA3LjE1LjUKK0NVUkxPUFRfU09VUkNFX1BSRVFVT1RFICAgICAgICAgNy4xMi4xICAgICAgICAtICAgICAgICAgICA3LjE1LjUKK0NVUkxPUFRfU09VUkNFX1FVT1RFICAgICAgICAgICAgNy4xMy4wICAgICAgICAtICAgICAgICAgICA3LjE1LjUKK0NVUkxPUFRfU09VUkNFX1VSTCAgICAgICAgICAgICAgNy4xMy4wICAgICAgICAtICAgICAgICAgICA3LjE1LjUKK0NVUkxPUFRfU09VUkNFX1VTRVJQV0QgICAgICAgICAgNy4xMi4xICAgICAgICAtICAgICAgICAgICA3LjE1LjUKK0NVUkxPUFRfU1NIX0FVVEhfVFlQRVMgICAgICAgICAgNy4xNi4xCitDVVJMT1BUX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1IDcuMTcuMQorQ1VSTE9QVF9TU0hfS0VZREFUQSAgICAgICAgICAgICA3LjE5LjYKK0NVUkxPUFRfU1NIX0tFWUZVTkNUSU9OICAgICAgICAgNy4xOS42CitDVVJMT1BUX1NTSF9LTk9XTkhPU1RTICAgICAgICAgIDcuMTkuNgorQ1VSTE9QVF9TU0hfUFJJVkFURV9LRVlGSUxFICAgICA3LjE2LjEKK0NVUkxPUFRfU1NIX1BVQkxJQ19LRVlGSUxFICAgICAgNy4xNi4xCitDVVJMT1BUX1NTTENFUlQgICAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9TU0xDRVJUUEFTU1dEICAgICAgICAgICA3LjEuMSAgICAgICAgIDcuMTcuMAorQ1VSTE9QVF9TU0xDRVJUVFlQRSAgICAgICAgICAgICA3LjkuMworQ1VSTE9QVF9TU0xFTkdJTkUgICAgICAgICAgICAgICA3LjkuMworQ1VSTE9QVF9TU0xFTkdJTkVfREVGQVVMVCAgICAgICA3LjkuMworQ1VSTE9QVF9TU0xLRVkgICAgICAgICAgICAgICAgICA3LjkuMworQ1VSTE9QVF9TU0xLRVlQQVNTV0QgICAgICAgICAgICA3LjkuMyAgICAgICAgIDcuMTcuMAorQ1VSTE9QVF9TU0xLRVlUWVBFICAgICAgICAgICAgICA3LjkuMworQ1VSTE9QVF9TU0xWRVJTSU9OICAgICAgICAgICAgICA3LjEKK0NVUkxPUFRfU1NMX0NJUEhFUl9MSVNUICAgICAgICAgNy45CitDVVJMT1BUX1NTTF9DVFhfREFUQSAgICAgICAgICAgIDcuMTAuNgorQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OICAgICAgICA3LjEwLjYKK0NVUkxPUFRfU1NMX09QVElPTlMgICAgICAgICAgICAgNy4yNS4wCitDVVJMT1BUX1NTTF9TRVNTSU9OSURfQ0FDSEUgICAgIDcuMTYuMAorQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCAgICAgICAgICA3LjguMQorQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiAgICAgICAgICA3LjQuMgorQ1VSTE9QVF9TVERFUlIgICAgICAgICAgICAgICAgICA3LjEKK0NVUkxPUFRfVENQX0tFRVBBTElWRSAgICAgICAgICAgNy4yNS4wCitDVVJMT1BUX1RDUF9LRUVQSURMRSAgICAgICAgICAgIDcuMjUuMAorQ1VSTE9QVF9UQ1BfS0VFUElOVFZMICAgICAgICAgICA3LjI1LjAKK0NVUkxPUFRfVENQX05PREVMQVkgICAgICAgICAgICAgNy4xMS4yCitDVVJMT1BUX1RFTE5FVE9QVElPTlMgICAgICAgICAgIDcuNworQ1VSTE9QVF9URlRQX0JMS1NJWkUgICAgICAgICAgICA3LjE5LjQKK0NVUkxPUFRfVElNRUNPTkRJVElPTiAgICAgICAgICAgNy4xCitDVVJMT1BUX1RJTUVPVVQgICAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9USU1FT1VUX01TICAgICAgICAgICAgICA3LjE2LjIKK0NVUkxPUFRfVElNRVZBTFVFICAgICAgICAgICAgICAgNy4xCitDVVJMT1BUX1RMU0FVVEhfUEFTU1dPUkQgICAgICAgIDcuMjEuNAorQ1VSTE9QVF9UTFNBVVRIX1RZUEUgICAgICAgICAgICA3LjIxLjQKK0NVUkxPUFRfVExTQVVUSF9VU0VSTkFNRSAgICAgICAgNy4yMS40CitDVVJMT1BUX1RSQU5TRkVSVEVYVCAgICAgICAgICAgIDcuMS4xCitDVVJMT1BUX1RSQU5TRkVSX0VOQ09ESU5HICAgICAgIDcuMjEuNgorQ1VSTE9QVF9VTlJFU1RSSUNURURfQVVUSCAgICAgICA3LjEwLjQKK0NVUkxPUFRfVVBMT0FEICAgICAgICAgICAgICAgICAgNy4xCitDVVJMT1BUX1VSTCAgICAgICAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9VU0VSQUdFTlQgICAgICAgICAgICAgICA3LjEKK0NVUkxPUFRfVVNFUk5BTUUgICAgICAgICAgICAgICAgNy4xOS4xCitDVVJMT1BUX1VTRVJQV0QgICAgICAgICAgICAgICAgIDcuMQorQ1VSTE9QVF9VU0VfU1NMICAgICAgICAgICAgICAgICA3LjE3LjAKK0NVUkxPUFRfVkVSQk9TRSAgICAgICAgICAgICAgICAgNy4xCitDVVJMT1BUX1dJTERDQVJETUFUQ0ggICAgICAgICAgIDcuMjEuMAorQ1VSTE9QVF9XUklURURBVEEgICAgICAgICAgICAgICA3LjkuNworQ1VSTE9QVF9XUklURUZVTkNUSU9OICAgICAgICAgICA3LjEKK0NVUkxPUFRfV1JJVEVIRUFERVIgICAgICAgICAgICAgNy4xCitDVVJMT1BUX1dSSVRFSU5GTyAgICAgICAgICAgICAgIDcuMQorQ1VSTFBBVVNFX0FMTCAgICAgICAgICAgICAgICAgICA3LjE4LjAKK0NVUkxQQVVTRV9DT05UICAgICAgICAgICAgICAgICAgNy4xOC4wCitDVVJMUEFVU0VfUkVDViAgICAgICAgICAgICAgICAgIDcuMTguMAorQ1VSTFBBVVNFX1JFQ1ZfQ09OVCAgICAgICAgICAgICA3LjE4LjAKK0NVUkxQQVVTRV9TRU5EICAgICAgICAgICAgICAgICAgNy4xOC4wCitDVVJMUEFVU0VfU0VORF9DT05UICAgICAgICAgICAgIDcuMTguMAorQ1VSTFBST1RPX0FMTCAgICAgICAgICAgICAgICAgICA3LjE5LjQKK0NVUkxQUk9UT19ESUNUICAgICAgICAgICAgICAgICAgNy4xOS40CitDVVJMUFJPVE9fRklMRSAgICAgICAgICAgICAgICAgIDcuMTkuNAorQ1VSTFBST1RPX0ZUUCAgICAgICAgICAgICAgICAgICA3LjE5LjQKK0NVUkxQUk9UT19GVFBTICAgICAgICAgICAgICAgICAgNy4xOS40CitDVVJMUFJPVE9fR09QSEVSICAgICAgICAgICAgICAgIDcuMjEuMgorQ1VSTFBST1RPX0hUVFAgICAgICAgICAgICAgICAgICA3LjE5LjQKK0NVUkxQUk9UT19IVFRQUyAgICAgICAgICAgICAgICAgNy4xOS40CitDVVJMUFJPVE9fSU1BUCAgICAgICAgICAgICAgICAgIDcuMjAuMAorQ1VSTFBST1RPX0lNQVBTICAgICAgICAgICAgICAgICA3LjIwLjAKK0NVUkxQUk9UT19MREFQICAgICAgICAgICAgICAgICAgNy4xOS40CitDVVJMUFJPVE9fTERBUFMgICAgICAgICAgICAgICAgIDcuMTkuNAorQ1VSTFBST1RPX1BPUDMgICAgICAgICAgICAgICAgICA3LjIwLjAKK0NVUkxQUk9UT19QT1AzUyAgICAgICAgICAgICAgICAgNy4yMC4wCitDVVJMUFJPVE9fUlRNUCAgICAgICAgICAgICAgICAgIDcuMjEuMAorQ1VSTFBST1RPX1JUTVBFICAgICAgICAgICAgICAgICA3LjIxLjAKK0NVUkxQUk9UT19SVE1QUyAgICAgICAgICAgICAgICAgNy4yMS4wCitDVVJMUFJPVE9fUlRNUFQgICAgICAgICAgICAgICAgIDcuMjEuMAorQ1VSTFBST1RPX1JUTVBURSAgICAgICAgICAgICAgICA3LjIxLjAKK0NVUkxQUk9UT19SVE1QVFMgICAgICAgICAgICAgICAgNy4yMS4wCitDVVJMUFJPVE9fUlRTUCAgICAgICAgICAgICAgICAgIDcuMjAuMAorQ1VSTFBST1RPX1NDUCAgICAgICAgICAgICAgICAgICA3LjE5LjQKK0NVUkxQUk9UT19TRlRQICAgICAgICAgICAgICAgICAgNy4xOS40CitDVVJMUFJPVE9fU01UUCAgICAgICAgICAgICAgICAgIDcuMjAuMAorQ1VSTFBST1RPX1NNVFBTICAgICAgICAgICAgICAgICA3LjIwLjAKK0NVUkxQUk9UT19URUxORVQgICAgICAgICAgICAgICAgNy4xOS40CitDVVJMUFJPVE9fVEZUUCAgICAgICAgICAgICAgICAgIDcuMTkuNAorQ1VSTFBST1hZX0hUVFAgICAgICAgICAgICAgICAgICA3LjEwCitDVVJMUFJPWFlfSFRUUF8xXzAgICAgICAgICAgICAgIDcuMTkuNAorQ1VSTFBST1hZX1NPQ0tTNCAgICAgICAgICAgICAgICA3LjEwCitDVVJMUFJPWFlfU09DS1M0QSAgICAgICAgICAgICAgIDcuMTguMAorQ1VSTFBST1hZX1NPQ0tTNSAgICAgICAgICAgICAgICA3LjEwCitDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FICAgICAgIDcuMTguMAorQ1VSTFNIRV9CQURfT1BUSU9OICAgICAgICAgICAgICA3LjEwLjMKK0NVUkxTSEVfSU5WQUxJRCAgICAgICAgICAgICAgICAgNy4xMC4zCitDVVJMU0hFX0lOX1VTRSAgICAgICAgICAgICAgICAgIDcuMTAuMworQ1VSTFNIRV9OT01FTSAgICAgICAgICAgICAgICAgICA3LjEyLjAKK0NVUkxTSEVfTk9UX0JVSUxUX0lOICAgICAgICAgICAgNy4yMy4wCitDVVJMU0hFX09LICAgICAgICAgICAgICAgICAgICAgIDcuMTAuMworQ1VSTFNIT1BUX0xPQ0tGVU5DICAgICAgICAgICAgICA3LjEwLjMKK0NVUkxTSE9QVF9OT05FICAgICAgICAgICAgICAgICAgNy4xMC4zCitDVVJMU0hPUFRfU0hBUkUgICAgICAgICAgICAgICAgIDcuMTAuMworQ1VSTFNIT1BUX1VOTE9DS0ZVTkMgICAgICAgICAgICA3LjEwLjMKK0NVUkxTSE9QVF9VTlNIQVJFICAgICAgICAgICAgICAgNy4xMC4zCitDVVJMU0hPUFRfVVNFUkRBVEEgICAgICAgICAgICAgIDcuMTAuMworQ1VSTFNPQ0tUWVBFX0lQQ1hOICAgICAgICAgICAgICA3LjE2LjAKK0NVUkxTU0hfQVVUSF9BTlkgICAgICAgICAgICAgICAgNy4xNi4xCitDVVJMU1NIX0FVVEhfREVGQVVMVCAgICAgICAgICAgIDcuMTYuMQorQ1VSTFNTSF9BVVRIX0hPU1QgICAgICAgICAgICAgICA3LjE2LjEKK0NVUkxTU0hfQVVUSF9LRVlCT0FSRCAgICAgICAgICAgNy4xNi4xCitDVVJMU1NIX0FVVEhfTk9ORSAgICAgICAgICAgICAgIDcuMTYuMQorQ1VSTFNTSF9BVVRIX1BBU1NXT1JEICAgICAgICAgICA3LjE2LjEKK0NVUkxTU0hfQVVUSF9QVUJMSUNLRVkgICAgICAgICAgNy4xNi4xCitDVVJMU1NMT1BUX0FMTE9XX0JFQVNUICAgICAgICAgIDcuMjUuMAorQ1VSTFVTRVNTTF9BTEwgICAgICAgICAgICAgICAgICA3LjE3LjAKK0NVUkxVU0VTU0xfQ09OVFJPTCAgICAgICAgICAgICAgNy4xNy4wCitDVVJMVVNFU1NMX05PTkUgICAgICAgICAgICAgICAgIDcuMTcuMAorQ1VSTFVTRVNTTF9UUlkgICAgICAgICAgICAgICAgICA3LjE3LjAKK0NVUkxWRVJTSU9OX0ZJUlNUICAgICAgICAgICAgICAgNy4xMAorQ1VSTFZFUlNJT05fRk9VUlRIICAgICAgICAgICAgICA3LjE2LjEKK0NVUkxWRVJTSU9OX05PVyAgICAgICAgICAgICAgICAgNy4xMAorQ1VSTFZFUlNJT05fU0VDT05EICAgICAgICAgICAgICA3LjExLjEKK0NVUkxWRVJTSU9OX1RISVJEICAgICAgICAgICAgICAgNy4xMi4wCitDVVJMX0NIVU5LX0JHTl9GVU5DX0ZBSUwgICAgICAgIDcuMjEuMAorQ1VSTF9DSFVOS19CR05fRlVOQ19PSyAgICAgICAgICA3LjIxLjAKK0NVUkxfQ0hVTktfQkdOX0ZVTkNfU0tJUCAgICAgICAgNy4yMS4wCitDVVJMX0NIVU5LX0VORF9GVU5DX0ZBSUwgICAgICAgIDcuMjEuMAorQ1VSTF9DSFVOS19FTkRfRlVOQ19PSyAgICAgICAgICA3LjIxLjAKK0NVUkxfQ1NFTEVDVF9FUlIgICAgICAgICAgICAgICAgNy4xNi4zCitDVVJMX0NTRUxFQ1RfSU4gICAgICAgICAgICAgICAgIDcuMTYuMworQ1VSTF9DU0VMRUNUX09VVCAgICAgICAgICAgICAgICA3LjE2LjMKK0NVUkxfRUFTWV9OT05FICAgICAgICAgICAgICAgICAgNy4xNC4wICAgICAgICAtICAgICAgICAgICA3LjE1LjQKK0NVUkxfRUFTWV9USU1FT1VUICAgICAgICAgICAgICAgNy4xNC4wICAgICAgICAtICAgICAgICAgICA3LjE1LjQKK0NVUkxfRVJST1JfU0laRSAgICAgICAgICAgICAgICAgNy4xCitDVVJMX0ZOTUFUQ0hGVU5DX0ZBSUwgICAgICAgICAgIDcuMjEuMAorQ1VSTF9GTk1BVENIRlVOQ19NQVRDSCAgICAgICAgICA3LjIxLjAKK0NVUkxfRk5NQVRDSEZVTkNfTk9NQVRDSCAgICAgICAgNy4yMS4wCitDVVJMX0ZPUk1BRERfRElTQUJMRUQgICAgICAgICAgIDcuMTIuMQorQ1VSTF9GT1JNQUREX0lMTEVHQUxfQVJSQVkgICAgICA3LjkuOAorQ1VSTF9GT1JNQUREX0lOQ09NUExFVEUgICAgICAgICA3LjkuOAorQ1VSTF9GT1JNQUREX01FTU9SWSAgICAgICAgICAgICA3LjkuOAorQ1VSTF9GT1JNQUREX05VTEwgICAgICAgICAgICAgICA3LjkuOAorQ1VSTF9GT1JNQUREX09LICAgICAgICAgICAgICAgICA3LjkuOAorQ1VSTF9GT1JNQUREX09QVElPTl9UV0lDRSAgICAgICA3LjkuOAorQ1VSTF9GT1JNQUREX1VOS05PV05fT1BUSU9OICAgICA3LjkuOAorQ1VSTF9HTE9CQUxfQUxMICAgICAgICAgICAgICAgICA3LjgKK0NVUkxfR0xPQkFMX0RFRkFVTFQgICAgICAgICAgICAgNy44CitDVVJMX0dMT0JBTF9OT1RISU5HICAgICAgICAgICAgIDcuOAorQ1VSTF9HTE9CQUxfU1NMICAgICAgICAgICAgICAgICA3LjgKK0NVUkxfR0xPQkFMX1dJTjMyICAgICAgICAgICAgICAgNy44LjEKK0NVUkxfSFRUUF9WRVJTSU9OXzFfMCAgICAgICAgICAgNy45LjEKK0NVUkxfSFRUUF9WRVJTSU9OXzFfMSAgICAgICAgICAgNy45LjEKK0NVUkxfSFRUUF9WRVJTSU9OX05PTkUgICAgICAgICAgNy45LjEKK0NVUkxfSVBSRVNPTFZFX1Y0ICAgICAgICAgICAgICAgNy4xMC44CitDVVJMX0lQUkVTT0xWRV9WNiAgICAgICAgICAgICAgIDcuMTAuOAorQ1VSTF9JUFJFU09MVkVfV0hBVEVWRVIgICAgICAgICA3LjEwLjgKK0NVUkxfTE9DS19BQ0NFU1NfTk9ORSAgICAgICAgICAgNy4xMC4zCitDVVJMX0xPQ0tfQUNDRVNTX1NIQVJFRCAgICAgICAgIDcuMTAuMworQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUgICAgICAgICA3LjEwLjMKK0NVUkxfTE9DS19EQVRBX0NPTk5FQ1QgICAgICAgICAgNy4xMC4zCitDVVJMX0xPQ0tfREFUQV9DT09LSUUgICAgICAgICAgIDcuMTAuMworQ1VSTF9MT0NLX0RBVEFfRE5TICAgICAgICAgICAgICA3LjEwLjMKK0NVUkxfTE9DS19EQVRBX05PTkUgICAgICAgICAgICAgNy4xMC4zCitDVVJMX0xPQ0tfREFUQV9TSEFSRSAgICAgICAgICAgIDcuMTAuNAorQ1VSTF9MT0NLX0RBVEFfU1NMX1NFU1NJT04gICAgICA3LjEwLjMKK0NVUkxfTE9DS19UWVBFX0NPTk5FQ1QgICAgICAgICAgNy4xMCAgICAgICAgICAtICAgICAgICAgICA3LjEwLjIKK0NVUkxfTE9DS19UWVBFX0NPT0tJRSAgICAgICAgICAgNy4xMCAgICAgICAgICAtICAgICAgICAgICA3LjEwLjIKK0NVUkxfTE9DS19UWVBFX0ROUyAgICAgICAgICAgICAgNy4xMCAgICAgICAgICAtICAgICAgICAgICA3LjEwLjIKK0NVUkxfTE9DS19UWVBFX05PTkUgICAgICAgICAgICAgNy4xMCAgICAgICAgICAtICAgICAgICAgICA3LjEwLjIKK0NVUkxfTE9DS19UWVBFX1NTTF9TRVNTSU9OICAgICAgNy4xMCAgICAgICAgICAtICAgICAgICAgICA3LjEwLjIKK0NVUkxfTUFYX0hUVFBfSEVBREVSICAgICAgICAgICAgNy4xOS43CitDVVJMX01BWF9XUklURV9TSVpFICAgICAgICAgICAgIDcuOS43CitDVVJMX05FVFJDX0lHTk9SRUQgICAgICAgICAgICAgIDcuOS44CitDVVJMX05FVFJDX09QVElPTkFMICAgICAgICAgICAgIDcuOS44CitDVVJMX05FVFJDX1JFUVVJUkVEICAgICAgICAgICAgIDcuOS44CitDVVJMX1BPTExfSU4gICAgICAgICAgICAgICAgICAgIDcuMTQuMAorQ1VSTF9QT0xMX0lOT1VUICAgICAgICAgICAgICAgICA3LjE0LjAKK0NVUkxfUE9MTF9OT05FICAgICAgICAgICAgICAgICAgNy4xNC4wCitDVVJMX1BPTExfT1VUICAgICAgICAgICAgICAgICAgIDcuMTQuMAorQ1VSTF9QT0xMX1JFTU9WRSAgICAgICAgICAgICAgICA3LjE0LjAKK0NVUkxfUFJPR1JFU1NfQkFSICAgICAgICAgICAgICAgNy4xLjEgICAgICAgICAtICAgICAgICAgICA3LjQuMQorQ1VSTF9QUk9HUkVTU19TVEFUUyAgICAgICAgICAgICA3LjEuMSAgICAgICAgIC0gICAgICAgICAgIDcuNC4xCitDVVJMX1JFQURGVU5DX0FCT1JUICAgICAgICAgICAgIDcuMTIuMQorQ1VSTF9SRUFERlVOQ19QQVVTRSAgICAgICAgICAgICA3LjE4LjAKK0NVUkxfUkVESVJfR0VUX0FMTCAgICAgICAgICAgICAgNy4xOS4xCitDVVJMX1JFRElSX1BPU1RfMzAxICAgICAgICAgICAgIDcuMTkuMQorQ1VSTF9SRURJUl9QT1NUXzMwMiAgICAgICAgICAgICA3LjE5LjEKK0NVUkxfUkVESVJfUE9TVF9BTEwgICAgICAgICAgICAgNy4xOS4xCitDVVJMX1JUU1BSRVFfQU5OT1VOQ0UgICAgICAgICAgIDcuMjAuMAorQ1VSTF9SVFNQUkVRX0RFU0NSSUJFICAgICAgICAgICA3LjIwLjAKK0NVUkxfUlRTUFJFUV9HRVRfUEFSQU1FVEVSICAgICAgNy4yMC4wCitDVVJMX1JUU1BSRVFfTk9ORSAgICAgICAgICAgICAgIDcuMjAuMAorQ1VSTF9SVFNQUkVRX09QVElPTlMgICAgICAgICAgICA3LjIwLjAKK0NVUkxfUlRTUFJFUV9QQVVTRSAgICAgICAgICAgICAgNy4yMC4wCitDVVJMX1JUU1BSRVFfUExBWSAgICAgICAgICAgICAgIDcuMjAuMAorQ1VSTF9SVFNQUkVRX1JFQ0VJVkUgICAgICAgICAgICA3LjIwLjAKK0NVUkxfUlRTUFJFUV9SRUNPUkQgICAgICAgICAgICAgNy4yMC4wCitDVVJMX1JUU1BSRVFfU0VUVVAgICAgICAgICAgICAgIDcuMjAuMAorQ1VSTF9SVFNQUkVRX1NFVF9QQVJBTUVURVIgICAgICA3LjIwLjAKK0NVUkxfUlRTUFJFUV9URUFSRE9XTiAgICAgICAgICAgNy4yMC4wCitDVVJMX1NFRUtGVU5DX0NBTlRTRUVLICAgICAgICAgIDcuMTkuNQorQ1VSTF9TRUVLRlVOQ19GQUlMICAgICAgICAgICAgICA3LjE5LjUKK0NVUkxfU0VFS0ZVTkNfT0sgICAgICAgICAgICAgICAgNy4xOS41CitDVVJMX1NPQ0tFVF9CQUQgICAgICAgICAgICAgICAgIDcuMTQuMAorQ1VSTF9TT0NLRVRfVElNRU9VVCAgICAgICAgICAgICA3LjE0LjAKK0NVUkxfU09DS09QVF9BTFJFQURZX0NPTk5FQ1RFRCAgNy4yMS41CitDVVJMX1NPQ0tPUFRfRVJST1IgICAgICAgICAgICAgIDcuMjEuNQorQ1VSTF9TT0NLT1BUX09LICAgICAgICAgICAgICAgICA3LjIxLjUKK0NVUkxfU1NMVkVSU0lPTl9ERUZBVUxUICAgICAgICAgNy45LjIKK0NVUkxfU1NMVkVSU0lPTl9TU0x2MiAgICAgICAgICAgNy45LjIKK0NVUkxfU1NMVkVSU0lPTl9TU0x2MyAgICAgICAgICAgNy45LjIKK0NVUkxfU1NMVkVSU0lPTl9UTFN2MSAgICAgICAgICAgNy45LjIKK0NVUkxfVElNRUNPTkRfSUZNT0RTSU5DRSAgICAgICAgNy45LjcKK0NVUkxfVElNRUNPTkRfSUZVTk1PRFNJTkNFICAgICAgNy45LjcKK0NVUkxfVElNRUNPTkRfTEFTVE1PRCAgICAgICAgICAgNy45LjcKK0NVUkxfVElNRUNPTkRfTk9ORSAgICAgICAgICAgICAgNy45LjcKK0NVUkxfVExTQVVUSF9OT05FICAgICAgICAgICAgICAgNy4yMS40CitDVVJMX1RMU0FVVEhfU1JQICAgICAgICAgICAgICAgIDcuMjEuNAorQ1VSTF9WRVJTSU9OX0FTWU5DSEROUyAgICAgICAgICA3LjEwLjcKK0NVUkxfVkVSU0lPTl9DT05WICAgICAgICAgICAgICAgNy4xNS40CitDVVJMX1ZFUlNJT05fQ1VSTERFQlVHICAgICAgICAgIDcuMTkuNgorQ1VSTF9WRVJTSU9OX0RFQlVHICAgICAgICAgICAgICA3LjEwLjYKK0NVUkxfVkVSU0lPTl9HU1NORUdPVElBVEUgICAgICAgNy4xMC42CitDVVJMX1ZFUlNJT05fSUROICAgICAgICAgICAgICAgIDcuMTIuMAorQ1VSTF9WRVJTSU9OX0lQVjYgICAgICAgICAgICAgICA3LjEwCitDVVJMX1ZFUlNJT05fS0VSQkVST1M0ICAgICAgICAgIDcuMTAKK0NVUkxfVkVSU0lPTl9MQVJHRUZJTEUgICAgICAgICAgNy4xMS4xCitDVVJMX1ZFUlNJT05fTElCWiAgICAgICAgICAgICAgIDcuMTAKK0NVUkxfVkVSU0lPTl9OVExNICAgICAgICAgICAgICAgNy4xMC42CitDVVJMX1ZFUlNJT05fTlRMTV9XQiAgICAgICAgICAgIDcuMjIuMAorQ1VSTF9WRVJTSU9OX1NQTkVHTyAgICAgICAgICAgICA3LjEwLjgKK0NVUkxfVkVSU0lPTl9TU0wgICAgICAgICAgICAgICAgNy4xMAorQ1VSTF9WRVJTSU9OX1NTUEkgICAgICAgICAgICAgICA3LjEzLjIKK0NVUkxfVkVSU0lPTl9UTFNBVVRIX1NSUCAgICAgICAgNy4yMS40CitDVVJMX1dSSVRFRlVOQ19QQVVTRSAgICAgICAgICAgIDcuMTguMApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL3N5bWJvbHMucGwgYi9jdXJsLTcuMjUuMC9kb2NzL2xpYmN1cmwvc3ltYm9scy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMWZmN2E2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvZG9jcy9saWJjdXJsL3N5bWJvbHMucGwKQEAgLTAsMCArMSwxMDAgQEAKKyMhL3Vzci9iaW4vcGVybAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgRXhwZXJpZW5jZSBoYXMgc2hvd24gdGhhdCB0aGUgc3ltYm9scy1pbi12ZXJzaW9ucyBmaWxlIGlzIHZlcnkgdXNlZnVsIHRvCisjIGFwcGxpY2F0aW9ucyB0aGF0IHdhbnQgdG8gYnVpbGQgd2l0aCBhIHdpZGUgcmFuZ2Ugb2YgbGliY3VybCB2ZXJzaW9ucy4KKyMgSXQgaXMgaG93ZXZlciBlYXN5IHRvIGdldCBpdCB3cm9uZyBhbmQgdGhlIHNvdXJjZSBnZXRzIGEgYml0IG1lc3N5IHdpdGggYWxsCisjIHRoZSBmaXhlZCBudW1lcmljYWwgY29tcGFyaXNpb25zLgorIworIyBUaGUgcG9pbnQgb2YgdGhpcyBzY3JpcHQgaXMgdG8gcHJvdmlkZSBhbiBlYXN5LXRvLXVzZSBtYWNybyBmb3IgbGliY3VybC0KKyMgdXNpbmcgYXBwbGljYXRpb25zIHRvIGRvIHByZXByb2Nlc3NvciBjaGVja3MgZm9yIHNwZWNpZmljIGxpYmN1cmwgZGVmaW5lcywKKyMgYW5kIHlldCBtYWtlIHRoZSBjb2RlIGNsZWFybHkgc2hvdyB3aGF0IHRoZSBtYWNybyBpcyB1c2VkIGZvci4KKyMKKyMgUnVuIHRoaXMgc2NyaXB0IGFuZCBnZW5lcmF0ZSBsaWJjdXJsLXN5bWJvbHMuaCBhbmQgdGhlbiB1c2UgdGhhdCBoZWFkZXIgaW4KKyMgYSBmYXNoaW9uIHNpbWlsYXIgdG86CisjCisjICNpbmNsdWRlICJsaWJjdXJsLXN5bWJvbHMuaCIKKyMKKyMgI2lmIExJQkNVUkxfSEFTKENVUkxPUFRfTVVURSkKKyMgICBoYXMgbXV0ZQorIyAjZWxzZQorIyAgIG5vIG11dGUKKyMgI2VuZGlmCisjCisjCitvcGVuIEYsICI8c3ltYm9scy1pbi12ZXJzaW9ucyI7CisKK3N1YiBzdHIybnVtIHsKKyAgICBteSAoJHN0cik9QF87CisgICAgaWYoJHN0ciA9fiAvKFswLTldKilcLihbMC05XSopXC4qKFswLTldKikvKSB7CisgICAgICAgIHJldHVybiBzcHJpbnRmKCIweCUwNngiLCAkMTw8MTYgfCAkMiA8PCA4IHwgJDMpOworICAgIH0KK30KKworcHJpbnQgPDxFT1MKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisjZGVmaW5lIExJQkNVUkxfSEFTKHgpIFxcCisgIChkZWZpbmVkKHggIyMgX0ZJUlNUKSAmJiAoeCAjIyBfRklSU1QgPD0gTElCQ1VSTF9WRVJTSU9OX05VTSkgJiYgXFwKKyAgICghZGVmaW5lZCh4ICMjIF9MQVNUKSB8fCAoIHggIyMgX0xBU1QgPj0gTElCQ1VSTF9WRVJTSU9OX05VTSkpKQorCitFT1MKKyAgICA7CisKK3doaWxlKDxGPikgeworICAgIGlmKC9eKENVUkxbXiBdKilbIFx0XSooLiopLykgeworICAgICAgICBteSAoJHN5bSwgJHZlcnMpPSgkMSwgJDIpOworCisgICAgICAgIG15ICRpbnRyOworICAgICAgICBteSAkcm07CisgICAgICAgIG15ICRkZXA7CisKKyAgICAgICAgIyBpcyB0aGVyZSByZW1vdmVkIGluZm8/CisgICAgICAgIGlmKCR2ZXJzID1+IC8oW1xkLl0rKVsgXHQtXSsoW1xkLl0rKVsgXHRdKyhbXGQuXSspLykgeworICAgICAgICAgICAgKCRpbnRyLCAkZGVwLCAkcm0pPSgkMSwgJDIsICQzKTsKKyAgICAgICAgfQorICAgICAgICAjIGlzIGl0IGEgZGVwLW9ubHkgbGluZT8KKyAgICAgICAgZWxzaWYoJHZlcnMgPX4gLyhbXGQuXSspWyBcdC1dKyhbXGQuXSspLykgeworICAgICAgICAgICAgKCRpbnRyLCAkZGVwKT0oJDEsICQyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICRpbnRyID0gJHZlcnM7CisgICAgICAgIH0KKworICAgICAgICBteSAkaW51bSA9IHN0cjJudW0oJGludHIpOworCisgICAgICAgIHByaW50IDw8RU9TCisjZGVmaW5lICR7c3ltfV9GSVJTVCAkaW51bSAvKiBBZGRlZCBpbiAkaW50ciAqLworRU9TCis7CisgICAgICAgIG15ICRpcm0gPSBzdHIybnVtKCRybSk7CisgICAgICAgIGlmKCRybSkgeworICAgICAgICBwcmludCA8PEVPUworI2RlZmluZSAke3N5bX1fTEFTVCAkaXJtIC8qIExhc3QgZmVhdHVyZWQgaW4gJHJtICovCitFT1MKKzsKKyAgICAgICAgfQorCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvaW5jbHVkZS9NYWtlZmlsZS5hbSBiL2N1cmwtNy4yNS4wL2luY2x1ZGUvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyNDg2MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2luY2x1ZGUvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw1IEBACitTVUJESVJTID0gY3VybAorCitFWFRSQV9ESVNUID0gUkVBRE1FCisKK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduIG5vLWRlcGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvaW5jbHVkZS9NYWtlZmlsZS5pbiBiL2N1cmwtNy4yNS4wL2luY2x1ZGUvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyNWY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2luY2x1ZGUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1ODEgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAordG9wX2J1aWxkZGlyID0gLi4KK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK0lOU1RBTEwgPSBASU5TVEFMTEAKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGluY2x1ZGUKK0RJU1RfQ09NTU9OID0gUkVBRE1FICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2N1cmwtY29tcGlsZXJzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtY29uZm9wdHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1mdW5jdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vcGVuc3NsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3ZlcnJpZGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1yZWVudHJhbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1zeXN0ZW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtdHJhbnNsaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQveno1MC14Yy1vdnIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9zcmMvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK2RlcGNvbXAgPQorYW1fX2RlcGZpbGVzX21heWJlID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBcCisJcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwl1bmluc3RhbGwtcmVjdXJzaXZlCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACitBTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFID0gQEJVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFQAorQlVJTERfTElCSE9TVE5BTUVfVFJVRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9UUlVFQAorQlVJTERfVU5JVFRFU1RTX0ZBTFNFID0gQEJVSUxEX1VOSVRURVNUU19GQUxTRUAKK0JVSUxEX1VOSVRURVNUU19UUlVFID0gQEJVSUxEX1VOSVRURVNUU19UUlVFQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NPTkZJR1VSRV9PUFRJT05TID0gQENPTkZJR1VSRV9PUFRJT05TQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1JPU1NDT01QSUxJTkdfRkFMU0UgPSBAQ1JPU1NDT01QSUxJTkdfRkFMU0VACitDUk9TU0NPTVBJTElOR19UUlVFID0gQENST1NTQ09NUElMSU5HX1RSVUVACitDVVJMREVCVUdfRkFMU0UgPSBAQ1VSTERFQlVHX0ZBTFNFQAorQ1VSTERFQlVHX1RSVUUgPSBAQ1VSTERFQlVHX1RSVUVACitDVVJMVkVSU0lPTiA9IEBDVVJMVkVSU0lPTkAKK0NVUkxfQ0FfQlVORExFID0gQENVUkxfQ0FfQlVORExFQAorQ1VSTF9DRkxBR19FWFRSQVMgPSBAQ1VSTF9DRkxBR19FWFRSQVNACitDVVJMX0RJU0FCTEVfRElDVCA9IEBDVVJMX0RJU0FCTEVfRElDVEAKK0NVUkxfRElTQUJMRV9GSUxFID0gQENVUkxfRElTQUJMRV9GSUxFQAorQ1VSTF9ESVNBQkxFX0ZUUCA9IEBDVVJMX0RJU0FCTEVfRlRQQAorQ1VSTF9ESVNBQkxFX0dPUEhFUiA9IEBDVVJMX0RJU0FCTEVfR09QSEVSQAorQ1VSTF9ESVNBQkxFX0hUVFAgPSBAQ1VSTF9ESVNBQkxFX0hUVFBACitDVVJMX0RJU0FCTEVfSU1BUCA9IEBDVVJMX0RJU0FCTEVfSU1BUEAKK0NVUkxfRElTQUJMRV9MREFQID0gQENVUkxfRElTQUJMRV9MREFQQAorQ1VSTF9ESVNBQkxFX0xEQVBTID0gQENVUkxfRElTQUJMRV9MREFQU0AKK0NVUkxfRElTQUJMRV9QT1AzID0gQENVUkxfRElTQUJMRV9QT1AzQAorQ1VSTF9ESVNBQkxFX1BST1hZID0gQENVUkxfRElTQUJMRV9QUk9YWUAKK0NVUkxfRElTQUJMRV9SVFNQID0gQENVUkxfRElTQUJMRV9SVFNQQAorQ1VSTF9ESVNBQkxFX1NNVFAgPSBAQ1VSTF9ESVNBQkxFX1NNVFBACitDVVJMX0RJU0FCTEVfVEVMTkVUID0gQENVUkxfRElTQUJMRV9URUxORVRACitDVVJMX0RJU0FCTEVfVEZUUCA9IEBDVVJMX0RJU0FCTEVfVEZUUEAKK0NVUkxfTElCUyA9IEBDVVJMX0xJQlNACitDVVJMX05FVFdPUktfTElCUyA9IEBDVVJMX05FVFdPUktfTElCU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TSEFSRUQgPSBARU5BQkxFX1NIQVJFREAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfR05VVExTX1NSUCA9IEBIQVZFX0dOVVRMU19TUlBACitIQVZFX0xEQVBfU1NMID0gQEhBVkVfTERBUF9TU0xACitIQVZFX0xJQlogPSBASEFWRV9MSUJaQAorSEFWRV9MSUJaX0ZBTFNFID0gQEhBVkVfTElCWl9GQUxTRUAKK0hBVkVfTElCWl9UUlVFID0gQEhBVkVfTElCWl9UUlVFQAorSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QgPSBASEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1RACitIQVZFX1NTTEVBWV9TUlAgPSBASEFWRV9TU0xFQVlfU1JQQAorSUROX0VOQUJMRUQgPSBASUROX0VOQUJMRURACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lQVjZfRU5BQkxFRCA9IEBJUFY2X0VOQUJMRURACitLUkI0X0VOQUJMRUQgPSBAS1JCNF9FTkFCTEVEQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJDVVJMX0xJQlMgPSBATElCQ1VSTF9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQU5PUFQgPSBATUFOT1BUQAorTUlNUFVSRV9GQUxTRSA9IEBNSU1QVVJFX0ZBTFNFQAorTUlNUFVSRV9UUlVFID0gQE1JTVBVUkVfVFJVRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PX1VOREVGSU5FRF9GQUxTRSA9IEBOT19VTkRFRklORURfRkFMU0VACitOT19VTkRFRklORURfVFJVRSA9IEBOT19VTkRFRklORURfVFJVRUAKK05ST0ZGID0gQE5ST0ZGQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSCA9IEBQQVRIQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACitQS0dBRERfTkFNRSA9IEBQS0dBRERfTkFNRUAKK1BLR0FERF9QS0cgPSBAUEtHQUREX1BLR0AKK1BLR0FERF9WRU5ET1IgPSBAUEtHQUREX1ZFTkRPUkAKK1BLR0NPTkZJRyA9IEBQS0dDT05GSUdACitSQU5ET01fRklMRSA9IEBSQU5ET01fRklMRUAKK1JBTkxJQiA9IEBSQU5MSUJACitSRVFVSVJFX0xJQl9ERVBTID0gQFJFUVVJUkVfTElCX0RFUFNACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NPTkFNRV9CVU1QX0ZBTFNFID0gQFNPTkFNRV9CVU1QX0ZBTFNFQAorU09OQU1FX0JVTVBfVFJVRSA9IEBTT05BTUVfQlVNUF9UUlVFQAorU1NMX0VOQUJMRUQgPSBAU1NMX0VOQUJMRURACitTVEFUSUNMSUJfRkFMU0UgPSBAU1RBVElDTElCX0ZBTFNFQAorU1RBVElDTElCX1RSVUUgPSBAU1RBVElDTElCX1RSVUVACitTVFJJUCA9IEBTVFJJUEAKK1NVUFBPUlRfRkVBVFVSRVMgPSBAU1VQUE9SVF9GRUFUVVJFU0AKK1NVUFBPUlRfUFJPVE9DT0xTID0gQFNVUFBPUlRfUFJPVE9DT0xTQAorVEVTVF9TRVJWRVJfTElCUyA9IEBURVNUX1NFUlZFUl9MSUJTQAorVVNFX0FSRVMgPSBAVVNFX0FSRVNACitVU0VfQVhUTFMgPSBAVVNFX0FYVExTQAorVVNFX0NZQVNTTCA9IEBVU0VfQ1lBU1NMQAorVVNFX0VNQkVEREVEX0FSRVNfRkFMU0UgPSBAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VACitVU0VfRU1CRURERURfQVJFU19UUlVFID0gQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVACitVU0VfR05VVExTID0gQFVTRV9HTlVUTFNACitVU0VfR05VVExTX05FVFRMRSA9IEBVU0VfR05VVExTX05FVFRMRUAKK1VTRV9MSUJSVE1QID0gQFVTRV9MSUJSVE1QQAorVVNFX0xJQlNTSDIgPSBAVVNFX0xJQlNTSDJACitVU0VfTUFOVUFMX0ZBTFNFID0gQFVTRV9NQU5VQUxfRkFMU0VACitVU0VfTUFOVUFMX1RSVUUgPSBAVVNFX01BTlVBTF9UUlVFQAorVVNFX05TUyA9IEBVU0VfTlNTQAorVVNFX09QRU5MREFQID0gQFVTRV9PUEVOTERBUEAKK1VTRV9QT0xBUlNTTCA9IEBVU0VfUE9MQVJTU0xACitVU0VfU1NMRUFZID0gQFVTRV9TU0xFQVlACitVU0VfV0lORE9XU19TU1BJID0gQFVTRV9XSU5ET1dTX1NTUElACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9ORURfRkxBVk9VUiA9IEBWRVJTSU9ORURfRkxBVk9VUkAKK1ZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFID0gQFZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFQAorVkVSU0lPTkVEX1NZTUJPTFNfVFJVRSA9IEBWRVJTSU9ORURfU1lNQk9MU19UUlVFQAorVkVSU0lPTk5VTSA9IEBWRVJTSU9OTlVNQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbGliZXh0ID0gQGxpYmV4dEAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3ViZGlycyA9IEBzdWJkaXJzQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK1NVQkRJUlMgPSBjdXJsCitFWFRSQV9ESVNUID0gUkVBRE1FCitBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBuby1kZXBlbmRlbmNpZXMKK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgaW5jbHVkZS9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgaW5jbHVkZS9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbAordW5pbnN0YWxsLWluZm8tYW06CisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCittb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi1yZWN1cnNpdmUgXAorbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmU6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKKwkgIGVzYWM7IFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKKwkgICAgZGlyPSIvJCRkaXIiOyBcCisJICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKKwkgIGVsc2UgXAorCSAgICBkaXI9Jyc7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChta2Rpcl9wKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgICAgZGlzdGRpcj1gJChhbV9fY2QpICQoZGlzdGRpcikgJiYgcHdkYDsgXAorCSAgICB0b3BfZGlzdGRpcj1gJChhbV9fY2QpICQodG9wX2Rpc3RkaXIpICYmIHB3ZGA7IFwKKwkgICAgKGNkICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCR0b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRkaXN0ZGlyLyQkc3ViZGlyIiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQorCit1bmluc3RhbGwtaW5mbzogdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKKy5QSE9OWTogJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBcCisJY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXJlY3Vyc2l2ZSBjdGFncyBcCisJY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUgXAorCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLXJlY3Vyc2l2ZSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9pbmNsdWRlL1JFQURNRSBiL2N1cmwtNy4yNS4wL2luY2x1ZGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNTJhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9pbmNsdWRlL1JFQURNRQpAQCAtMCwwICsxLDU1IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorCitJbmNsdWRlIGZpbGVzIGZvciBsaWJjdXJsLCBleHRlcm5hbCB1c2Vycy4KKworVGhleSdyZSBhbGwgcGxhY2VkIGluIHRoZSBjdXJsIHN1YmRpcmVjdG9yeSBoZXJlIGZvciBiZXR0ZXIgZml0IGluIGFueSBraW5kCitvZiBlbnZpcm9ubWVudC4gWW91IG11c3QgaW5jbHVkZSBmaWxlcyBmcm9tIGhlcmUgdXNpbmcuLi4KKworICAgICAgICAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKy4uLiBzdHlsZSBhbmQgcG9pbnQgdGhlIGNvbXBpbGVyJ3MgaW5jbHVkZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUKK2N1cmwgc3ViZGlyZWN0b3J5LiBJdCBtYWtlcyBpdCBtb3JlIGxpa2VseSB0byBzdXJ2aXZlIGZ1dHVyZSBtb2RpZmljYXRpb25zLgorCitOT1RFIEZPUiBMSUJDVVJMIEhBQ0tFUlMKKworVGhlIGZvbGxvd2luZyBub3RlcyBhcHBseSB0byBsaWJjdXJsIHZlcnNpb24gNy4xOS4wIGFuZCBsYXRlci4KKworKiBUaGUgZGlzdHJpYnV0ZWQgY3VybC9jdXJsYnVpbGQuaCBmaWxlIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBzeXN0ZW1zCisgIHdoaWNoIGNhbiBub3QgcnVuIHRoZSBhbHNvIGRpc3RyaWJ1dGVkIGNvbmZpZ3VyZSBzY3JpcHQuCisKKyogVGhlIGRpc3RyaWJ1dGVkIGN1cmxidWlsZC5oIGZpbGUgaXMgZ2VuZXJhdGVkIGFzIGEgY29weSBvZiBjdXJsYnVpbGQuaC5kaXN0CisgIHdoZW4gdGhlIGxpYmN1cmwgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIGFyY2hpdmUgZmlsZSBpcyBvcmlnaW5hbGx5IGNyZWF0ZWQuCisKKyogSWYgeW91IGNoZWNrIG91dCBmcm9tIGdpdCBvbiBhIG5vbi1jb25maWd1cmUgcGxhdGZvcm0sIHlvdSBtdXN0IHJ1biB0aGUKKyAgYXBwcm9wcmlhdGUgYnVpbGRjb25mKiBzY3JpcHQgdG8gc2V0IHVwIGN1cmxidWlsZC5oIGFuZCBvdGhlciBsb2NhbCBmaWxlcworICBiZWZvcmUgYmVpbmcgYWJsZSBvZiBjb21waWxpbmcgdGhlIGxpYnJhcnkuCisKKyogT24gc3lzdGVtcyBjYXBhYmxlIG9mIHJ1bm5pbmcgdGhlIGNvbmZpZ3VyZSBzY3JpcHQsIHRoZSBjb25maWd1cmUgcHJvY2VzcworICB3aWxsIG92ZXJ3cml0ZSB0aGUgZGlzdHJpYnV0ZWQgaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oIGZpbGUgd2l0aCBvbmUgdGhhdAorICBpcyBzdWl0YWJsZSBhbmQgc3BlY2lmaWMgdG8gdGhlIGxpYnJhcnkgYmVpbmcgY29uZmlndXJlZCBhbmQgYnVpbHQsIHdoaWNoCisgIGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBpbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmguaW4gdGVtcGxhdGUgZmlsZS4KKworKiBJZiB5b3UgaW50ZW5kIHRvIGRpc3RyaWJ1dGUgYW4gYWxyZWFkeSBjb21waWxlZCBsaWJjdXJsIGxpYnJhcnkgeW91IF9NVVNUXworICBhbHNvIGRpc3RyaWJ1dGUgYWxvbmcgd2l0aCBpdCB0aGUgZ2VuZXJhdGVkIGN1cmwvY3VybGJ1aWxkLmggd2hpY2ggaGFzIGJlZW4KKyAgdXNlZCB0byBjb21waWxlIGl0LiBPdGhlcndpc2UgdGhlIGxpYnJhcnkgd2lsbCBiZSBvZiBubyB1c2UgZm9yIHRoZSB1c2VycyBvZgorICB0aGUgbGlicmFyeSB0aGF0IHlvdSBoYXZlIGJ1aWx0LiBJdCBpcyBfeW91cl8gcmVzcG9uc2liaWxpdHkgdG8gcHJvdmlkZSB0aGlzCisgIGZpbGUuIE5vIG9uZSBhdCB0aGUgY1VSTCBwcm9qZWN0IGNhbiBrbm93IGhvdyB5b3UgaGF2ZSBidWlsdCB0aGUgbGlicmFyeS4KKworKiBGaWxlIGN1cmwvY3VybGJ1aWxkLmggaW5jbHVkZXMgcGxhdGZvcm0gYW5kIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW50IGluZm8sCisgIGFuZCBtdXN0IG5vdCBiZSBtb2RpZmllZCBieSBhbnlvbmUuIENvbmZpZ3VyZSBzY3JpcHQgZ2VuZXJhdGVzIGl0IGZvciB5b3UuCisKKyogV2UgY2Fubm90IGFzc3VtZSBhbnl0aGluZyBlbHNlIGJ1dCB2ZXJ5IGJhc2ljIGNvbXBpbGVyIGZlYXR1cmVzIGJlaW5nCisgIHByZXNlbnQuIFdoaWxlIGxpYmN1cmwgcmVxdWlyZXMgYW4gQU5TSSBDIGNvbXBpbGVyIHRvIGJ1aWxkLCBzb21lIG9mIHRoZQorICBlYXJsaWVyIEFOU0kgY29tcGlsZXJzIGNsZWFybHkgY2FuJ3QgZGVhbCB3aXRoIHNvbWUgcHJlcHJvY2Vzc29yIG9wZXJhdG9ycy4KKworKiBOZXdsaW5lcyBtdXN0IHJlbWFpbiB1bml4LXN0eWxlIGZvciBvbGRlciBjb21waWxlcnMnIHNha2UuCisKKyogQ29tbWVudHMgbXVzdCBiZSB3cml0dGVuIGluIHRoZSBvbGQtc3R5bGUgLyogdW5uZXN0ZWQgQy1mYXNoaW9uICovCisKK1RvIGZpZ3VyZSBvdXQgaG93IHRvIGRvIGdvb2QgYW5kIHBvcnRhYmxlIGNoZWNrcyBmb3IgZmVhdHVyZXMsIG9wZXJhdGluZworc3lzdGVtcyBvciBzcGVjaWZpYyBoYXJkd2FyYXJlLCBhIHZlcnkgZ29vZCByZXNvdXJjZSBpcyBCam9ybiBSZWVzZSdzCitjb2xsZWN0aW9uIGF0IGh0dHA6Ly9wcmVkZWYuc2YubmV0LwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvaW5jbHVkZS9jdXJsL01ha2VmaWxlLmFtIGIvY3VybC03LjI1LjAvaW5jbHVkZS9jdXJsL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZThiNzgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw1MyBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitwa2dpbmNsdWRlX0hFQURFUlMgPSBcCisJY3VybC5oIGN1cmx2ZXIuaCBlYXN5LmggbXByaW50Zi5oIHN0ZGNoZWFkZXJzLmggbXVsdGkuaCBcCisJdHlwZWNoZWNrLWdjYy5oIGN1cmxidWlsZC5oIGN1cmxydWxlcy5oCisKK3BrZ2luY2x1ZGVkaXI9ICQoaW5jbHVkZWRpcikvY3VybAorCisjIGN1cmxidWlsZC5oIGRvZXMgbm90IGV4aXN0IGluIHRoZSBnaXQgdHJlZS4gV2hlbiB0aGUgb3JpZ2luYWwgbGliY3VybAorIyBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gYXJjaGl2ZSBmaWxlIGlzIGNyZWF0ZWQsIGN1cmxidWlsZC5oLmRpc3QgaXMKKyMgcmVuYW1lZCB0byBjdXJsYnVpbGQuaCBhbmQgaW5jbHVkZWQgaW4gdGhlIHRhcmJhbGwgc28gdGhhdCBpdCBjYW4gYmUKKyMgdXNlZCBkaXJlY3RseSBvbiBub24tY29uZmlndXJlIHN5c3RlbXMuCisjCisjIFRoZSBkaXN0cmlidXRlZCBjdXJsYnVpbGQuaCB3aWxsIGJlIG92ZXJ3cml0dGVuIG9uIGNvbmZpZ3VyZSBzeXN0ZW1zCisjIHdoZW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgcnVucywgd2l0aCBvbmUgdGhhdCBpcyBzdWl0YWJsZSBhbmQgc3BlY2lmaWMKKyMgdG8gdGhlIGxpYnJhcnkgYmVpbmcgY29uZmlndXJlZCBhbmQgYnVpbHQuCisjCisjIGN1cmxidWlsZC5oLmluIGlzIHRoZSBkaXN0cmlidXRlZCB0ZW1wbGF0ZSBmaWxlIGZyb20gd2hpY2ggdGhlIGNvbmZpZ3VyZQorIyBzY3JpcHQgY3JlYXRlcyBjdXJsYnVpbGQuaCBhdCBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24gdGltZSwgb3ZlcndpdGluZyB0aGUKKyMgb25lIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gYXJjaGl2ZS4KKyMKKyMgY3VybGJ1aWxkLmguZGlzdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiBhcmNoaXZlLgorCitFWFRSQV9ESVNUID0gY3VybGJ1aWxkLmguaW4KKworRElTVENMRUFORklMRVMgPSBjdXJsYnVpbGQuaAorCitjaGVja3NyYzoKKwlAQFBFUkxAICQodG9wX3NyY2RpcikvbGliL2NoZWNrc3JjLnBsIC1XY3VybGJ1aWxkLmggLUQkKHRvcF9zcmNkaXIpL2luY2x1ZGUvY3VybCAkKHBrZ2luY2x1ZGVfSEVBREVSUykgJChFWFRSQV9ESVNUKQorCitpZiBDVVJMREVCVUcKKyMgZm9yIGRlYnVnIGJ1aWxkcywgd2Ugc2NhbiB0aGUgc291cmNlcyBvbiBhbGwgcmVndWxhciBtYWtlIGludm9rZXMKK2FsbC1sb2NhbDogY2hlY2tzcmMKK2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvTWFrZWZpbGUuaW4gYi9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMxZjhiYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2luY2x1ZGUvY3VybC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDU2NSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLi8uLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gaW5jbHVkZS9jdXJsCitESVNUX0NPTU1PTiA9ICQocGtnaW5jbHVkZV9IRUFERVJTKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvY3VybGJ1aWxkLmguaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2N1cmwtY29tcGlsZXJzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtY29uZm9wdHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1mdW5jdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vcGVuc3NsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3ZlcnJpZGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1yZWVudHJhbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1zeXN0ZW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtdHJhbnNsaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQveno1MC14Yy1vdnIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9zcmMvY3VybF9jb25maWcuaCBjdXJsYnVpbGQuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwa2dpbmNsdWRlZGlyKSIKK3BrZ2luY2x1ZGVIRUFERVJTX0lOU1RBTEwgPSAkKElOU1RBTExfSEVBREVSKQorSEVBREVSUyA9ICQocGtnaW5jbHVkZV9IRUFERVJTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2N1cmwKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRUAKK0JVSUxEX0xJQkhPU1ROQU1FX1RSVUUgPSBAQlVJTERfTElCSE9TVE5BTUVfVFJVRUAKK0JVSUxEX1VOSVRURVNUU19GQUxTRSA9IEBCVUlMRF9VTklUVEVTVFNfRkFMU0VACitCVUlMRF9VTklUVEVTVFNfVFJVRSA9IEBCVUlMRF9VTklUVEVTVFNfVFJVRUAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDT05GSUdVUkVfT1BUSU9OUyA9IEBDT05GSUdVUkVfT1BUSU9OU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NST1NTQ09NUElMSU5HX0ZBTFNFID0gQENST1NTQ09NUElMSU5HX0ZBTFNFQAorQ1JPU1NDT01QSUxJTkdfVFJVRSA9IEBDUk9TU0NPTVBJTElOR19UUlVFQAorQ1VSTERFQlVHX0ZBTFNFID0gQENVUkxERUJVR19GQUxTRUAKK0NVUkxERUJVR19UUlVFID0gQENVUkxERUJVR19UUlVFQAorQ1VSTFZFUlNJT04gPSBAQ1VSTFZFUlNJT05ACitDVVJMX0NBX0JVTkRMRSA9IEBDVVJMX0NBX0JVTkRMRUAKK0NVUkxfQ0ZMQUdfRVhUUkFTID0gQENVUkxfQ0ZMQUdfRVhUUkFTQAorQ1VSTF9ESVNBQkxFX0RJQ1QgPSBAQ1VSTF9ESVNBQkxFX0RJQ1RACitDVVJMX0RJU0FCTEVfRklMRSA9IEBDVVJMX0RJU0FCTEVfRklMRUAKK0NVUkxfRElTQUJMRV9GVFAgPSBAQ1VSTF9ESVNBQkxFX0ZUUEAKK0NVUkxfRElTQUJMRV9HT1BIRVIgPSBAQ1VSTF9ESVNBQkxFX0dPUEhFUkAKK0NVUkxfRElTQUJMRV9IVFRQID0gQENVUkxfRElTQUJMRV9IVFRQQAorQ1VSTF9ESVNBQkxFX0lNQVAgPSBAQ1VSTF9ESVNBQkxFX0lNQVBACitDVVJMX0RJU0FCTEVfTERBUCA9IEBDVVJMX0RJU0FCTEVfTERBUEAKK0NVUkxfRElTQUJMRV9MREFQUyA9IEBDVVJMX0RJU0FCTEVfTERBUFNACitDVVJMX0RJU0FCTEVfUE9QMyA9IEBDVVJMX0RJU0FCTEVfUE9QM0AKK0NVUkxfRElTQUJMRV9QUk9YWSA9IEBDVVJMX0RJU0FCTEVfUFJPWFlACitDVVJMX0RJU0FCTEVfUlRTUCA9IEBDVVJMX0RJU0FCTEVfUlRTUEAKK0NVUkxfRElTQUJMRV9TTVRQID0gQENVUkxfRElTQUJMRV9TTVRQQAorQ1VSTF9ESVNBQkxFX1RFTE5FVCA9IEBDVVJMX0RJU0FCTEVfVEVMTkVUQAorQ1VSTF9ESVNBQkxFX1RGVFAgPSBAQ1VSTF9ESVNBQkxFX1RGVFBACitDVVJMX0xJQlMgPSBAQ1VSTF9MSUJTQAorQ1VSTF9ORVRXT1JLX0xJQlMgPSBAQ1VSTF9ORVRXT1JLX0xJQlNACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU0hBUkVEID0gQEVOQUJMRV9TSEFSRURACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitIQVZFX0dOVVRMU19TUlAgPSBASEFWRV9HTlVUTFNfU1JQQAorSEFWRV9MREFQX1NTTCA9IEBIQVZFX0xEQVBfU1NMQAorSEFWRV9MSUJaID0gQEhBVkVfTElCWkAKK0hBVkVfTElCWl9GQUxTRSA9IEBIQVZFX0xJQlpfRkFMU0VACitIQVZFX0xJQlpfVFJVRSA9IEBIQVZFX0xJQlpfVFJVRUAKK0hBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUID0gQEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUQAorSEFWRV9TU0xFQVlfU1JQID0gQEhBVkVfU1NMRUFZX1NSUEAKK0lETl9FTkFCTEVEID0gQElETl9FTkFCTEVEQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJUFY2X0VOQUJMRUQgPSBASVBWNl9FTkFCTEVEQAorS1JCNF9FTkFCTEVEID0gQEtSQjRfRU5BQkxFREAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQ1VSTF9MSUJTID0gQExJQkNVUkxfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUFOT1BUID0gQE1BTk9QVEAKK01JTVBVUkVfRkFMU0UgPSBATUlNUFVSRV9GQUxTRUAKK01JTVBVUkVfVFJVRSA9IEBNSU1QVVJFX1RSVUVACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitOT19VTkRFRklORURfRkFMU0UgPSBATk9fVU5ERUZJTkVEX0ZBTFNFQAorTk9fVU5ERUZJTkVEX1RSVUUgPSBATk9fVU5ERUZJTkVEX1RSVUVACitOUk9GRiA9IEBOUk9GRkAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEggPSBAUEFUSEAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTCA9IEBQRVJMQAorUEtHQUREX05BTUUgPSBAUEtHQUREX05BTUVACitQS0dBRERfUEtHID0gQFBLR0FERF9QS0dACitQS0dBRERfVkVORE9SID0gQFBLR0FERF9WRU5ET1JACitQS0dDT05GSUcgPSBAUEtHQ09ORklHQAorUkFORE9NX0ZJTEUgPSBAUkFORE9NX0ZJTEVACitSQU5MSUIgPSBAUkFOTElCQAorUkVRVUlSRV9MSUJfREVQUyA9IEBSRVFVSVJFX0xJQl9ERVBTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTT05BTUVfQlVNUF9GQUxTRSA9IEBTT05BTUVfQlVNUF9GQUxTRUAKK1NPTkFNRV9CVU1QX1RSVUUgPSBAU09OQU1FX0JVTVBfVFJVRUAKK1NTTF9FTkFCTEVEID0gQFNTTF9FTkFCTEVEQAorU1RBVElDTElCX0ZBTFNFID0gQFNUQVRJQ0xJQl9GQUxTRUAKK1NUQVRJQ0xJQl9UUlVFID0gQFNUQVRJQ0xJQl9UUlVFQAorU1RSSVAgPSBAU1RSSVBACitTVVBQT1JUX0ZFQVRVUkVTID0gQFNVUFBPUlRfRkVBVFVSRVNACitTVVBQT1JUX1BST1RPQ09MUyA9IEBTVVBQT1JUX1BST1RPQ09MU0AKK1RFU1RfU0VSVkVSX0xJQlMgPSBAVEVTVF9TRVJWRVJfTElCU0AKK1VTRV9BUkVTID0gQFVTRV9BUkVTQAorVVNFX0FYVExTID0gQFVTRV9BWFRMU0AKK1VTRV9DWUFTU0wgPSBAVVNFX0NZQVNTTEAKK1VTRV9FTUJFRERFRF9BUkVTX0ZBTFNFID0gQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQAorVVNFX0VNQkVEREVEX0FSRVNfVFJVRSA9IEBVU0VfRU1CRURERURfQVJFU19UUlVFQAorVVNFX0dOVVRMUyA9IEBVU0VfR05VVExTQAorVVNFX0dOVVRMU19ORVRUTEUgPSBAVVNFX0dOVVRMU19ORVRUTEVACitVU0VfTElCUlRNUCA9IEBVU0VfTElCUlRNUEAKK1VTRV9MSUJTU0gyID0gQFVTRV9MSUJTU0gyQAorVVNFX01BTlVBTF9GQUxTRSA9IEBVU0VfTUFOVUFMX0ZBTFNFQAorVVNFX01BTlVBTF9UUlVFID0gQFVTRV9NQU5VQUxfVFJVRUAKK1VTRV9OU1MgPSBAVVNFX05TU0AKK1VTRV9PUEVOTERBUCA9IEBVU0VfT1BFTkxEQVBACitVU0VfUE9MQVJTU0wgPSBAVVNFX1BPTEFSU1NMQAorVVNFX1NTTEVBWSA9IEBVU0VfU1NMRUFZQAorVVNFX1dJTkRPV1NfU1NQSSA9IEBVU0VfV0lORE9XU19TU1BJQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVkVSU0lPTkVEX0ZMQVZPVVIgPSBAVkVSU0lPTkVEX0ZMQVZPVVJACitWRVJTSU9ORURfU1lNQk9MU19GQUxTRSA9IEBWRVJTSU9ORURfU1lNQk9MU19GQUxTRUAKK1ZFUlNJT05FRF9TWU1CT0xTX1RSVUUgPSBAVkVSU0lPTkVEX1NZTUJPTFNfVFJVRUAKK1ZFUlNJT05OVU0gPSBAVkVSU0lPTk5VTUAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpYmV4dCA9IEBsaWJleHRACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworcGtnaW5jbHVkZV9IRUFERVJTID0gXAorCWN1cmwuaCBjdXJsdmVyLmggZWFzeS5oIG1wcmludGYuaCBzdGRjaGVhZGVycy5oIG11bHRpLmggXAorCXR5cGVjaGVjay1nY2MuaCBjdXJsYnVpbGQuaCBjdXJscnVsZXMuaAorCisKKyMgY3VybGJ1aWxkLmggZG9lcyBub3QgZXhpc3QgaW4gdGhlIGdpdCB0cmVlLiBXaGVuIHRoZSBvcmlnaW5hbCBsaWJjdXJsCisjIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiBhcmNoaXZlIGZpbGUgaXMgY3JlYXRlZCwgY3VybGJ1aWxkLmguZGlzdCBpcworIyByZW5hbWVkIHRvIGN1cmxidWlsZC5oIGFuZCBpbmNsdWRlZCBpbiB0aGUgdGFyYmFsbCBzbyB0aGF0IGl0IGNhbiBiZQorIyB1c2VkIGRpcmVjdGx5IG9uIG5vbi1jb25maWd1cmUgc3lzdGVtcy4KKyMKKyMgVGhlIGRpc3RyaWJ1dGVkIGN1cmxidWlsZC5oIHdpbGwgYmUgb3ZlcndyaXR0ZW4gb24gY29uZmlndXJlIHN5c3RlbXMKKyMgd2hlbiB0aGUgY29uZmlndXJlIHNjcmlwdCBydW5zLCB3aXRoIG9uZSB0aGF0IGlzIHN1aXRhYmxlIGFuZCBzcGVjaWZpYworIyB0byB0aGUgbGlicmFyeSBiZWluZyBjb25maWd1cmVkIGFuZCBidWlsdC4KKyMKKyMgY3VybGJ1aWxkLmguaW4gaXMgdGhlIGRpc3RyaWJ1dGVkIHRlbXBsYXRlIGZpbGUgZnJvbSB3aGljaCB0aGUgY29uZmlndXJlCisjIHNjcmlwdCBjcmVhdGVzIGN1cmxidWlsZC5oIGF0IGxpYnJhcnkgY29uZmlndXJhdGlvbiB0aW1lLCBvdmVyd2l0aW5nIHRoZQorIyBvbmUgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBhcmNoaXZlLgorIworIyBjdXJsYnVpbGQuaC5kaXN0IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIGFyY2hpdmUuCitFWFRSQV9ESVNUID0gY3VybGJ1aWxkLmguaW4KK0RJU1RDTEVBTkZJTEVTID0gY3VybGJ1aWxkLmgKK2FsbDogY3VybGJ1aWxkLmgKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGluY2x1ZGUvY3VybC9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgaW5jbHVkZS9jdXJsL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK2N1cmxidWlsZC5oOiBzdGFtcC1oMworCUBpZiB0ZXN0ICEgLWYgJEA7IHRoZW4gXAorCSAgcm0gLWYgc3RhbXAtaDM7IFwKKwkgICQoTUFLRSkgc3RhbXAtaDM7IFwKKwllbHNlIDo7IGZpCisKK3N0YW1wLWgzOiAkKHNyY2RpcikvY3VybGJ1aWxkLmguaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAcm0gLWYgc3RhbXAtaDMKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIGluY2x1ZGUvY3VybC9jdXJsYnVpbGQuaAorJChzcmNkaXIpL2N1cmxidWlsZC5oLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAKKwljZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikKKwlybSAtZiBzdGFtcC1oMworCXRvdWNoICRACisKK2Rpc3RjbGVhbi1oZHI6CisJLXJtIC1mIGN1cmxidWlsZC5oIHN0YW1wLWgzCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK2Rpc3RjbGVhbi1saWJ0b29sOgorCS1ybSAtZiBsaWJ0b29sCit1bmluc3RhbGwtaW5mby1hbToKK2luc3RhbGwtcGtnaW5jbHVkZUhFQURFUlM6ICQocGtnaW5jbHVkZV9IRUFERVJTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocGtnaW5jbHVkZWRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKHBrZ2luY2x1ZGVkaXIpIgorCUBsaXN0PSckKHBrZ2luY2x1ZGVfSEVBREVSUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiICQocGtnaW5jbHVkZUhFQURFUlNfSU5TVEFMTCkgJyQkZCQkcCcgJyQoREVTVERJUikkKHBrZ2luY2x1ZGVkaXIpLyQkZiciOyBcCisJICAkKHBrZ2luY2x1ZGVIRUFERVJTX0lOU1RBTEwpICIkJGQkJHAiICIkKERFU1RESVIpJChwa2dpbmNsdWRlZGlyKS8kJGYiOyBcCisJZG9uZQorCit1bmluc3RhbGwtcGtnaW5jbHVkZUhFQURFUlM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChwa2dpbmNsdWRlX0hFQURFUlMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChwa2dpbmNsdWRlZGlyKS8kJGYnIjsgXAorCSAgcm0gLWYgIiQoREVTVERJUikkKHBrZ2luY2x1ZGVkaXIpLyQkZiI7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSBjdXJsYnVpbGQuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBjdXJsYnVpbGQuaC5pbiAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgY3VybGJ1aWxkLmguaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgY3VybGJ1aWxkLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorQENVUkxERUJVR19GQUxTRUBhbGwtbG9jYWw6CithbGwtYW06IE1ha2VmaWxlICQoSEVBREVSUykgY3VybGJ1aWxkLmggYWxsLWxvY2FsCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChwa2dpbmNsdWRlZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKG1rZGlyX3ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLXogIiQoRElTVENMRUFORklMRVMpIiB8fCBybSAtZiAkKERJU1RDTEVBTkZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wa2dpbmNsdWRlSEVBREVSUworCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0gdW5pbnN0YWxsLXBrZ2luY2x1ZGVIRUFERVJTCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBhbGwtbG9jYWwgY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjdGFncyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBrZ2luY2x1ZGVIRUFERVJTIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCBcCisJdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1wa2dpbmNsdWRlSEVBREVSUworCisKK2NoZWNrc3JjOgorCUBAUEVSTEAgJCh0b3Bfc3JjZGlyKS9saWIvY2hlY2tzcmMucGwgLVdjdXJsYnVpbGQuaCAtRCQodG9wX3NyY2RpcikvaW5jbHVkZS9jdXJsICQocGtnaW5jbHVkZV9IRUFERVJTKSAkKEVYVFJBX0RJU1QpCisKKyMgZm9yIGRlYnVnIGJ1aWxkcywgd2Ugc2NhbiB0aGUgc291cmNlcyBvbiBhbGwgcmVndWxhciBtYWtlIGludm9rZXMKK0BDVVJMREVCVUdfVFJVRUBhbGwtbG9jYWw6IGNoZWNrc3JjCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvY3VybC5oIGIvY3VybC03LjI1LjAvaW5jbHVkZS9jdXJsL2N1cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjUwMWNkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvaW5jbHVkZS9jdXJsL2N1cmwuaApAQCAtMCwwICsxLDIyMTQgQEAKKyNpZm5kZWYgX19DVVJMX0NVUkxfSAorI2RlZmluZSBfX0NVUkxfQ1VSTF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIElmIHlvdSBoYXZlIGxpYmN1cmwgcHJvYmxlbXMsIGFsbCBkb2NzIGFuZCBkZXRhaWxzIGFyZSBmb3VuZCBoZXJlOgorICogICBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvCisgKgorICogY3VybC1saWJyYXJ5IG1haWxpbmcgbGlzdCBzdWJzY3JpcHRpb24gYW5kIHVuc3Vic2NyaXB0aW9uIHdlYiBpbnRlcmZhY2U6CisgKiAgIGh0dHA6Ly9jb29sLmhheHguc2UvbWFpbG1hbi9saXN0aW5mby9jdXJsLWxpYnJhcnkvCisgKi8KKworI2luY2x1ZGUgImN1cmx2ZXIuaCIgICAgICAgICAvKiBsaWJjdXJsIHZlcnNpb24gZGVmaW5lcyAgICovCisjaW5jbHVkZSAiY3VybGJ1aWxkLmgiICAgICAgIC8qIGxpYmN1cmwgYnVpbGQgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJjdXJscnVsZXMuaCIgICAgICAgLyogbGliY3VybCBydWxlcyBlbmZvcmNlbWVudCAqLworCisvKgorICogRGVmaW5lIFdJTjMyIHdoZW4gYnVpbGQgdGFyZ2V0IGlzIFdpbjMyIEFQSQorICovCisKKyNpZiAoZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19XSU4zMl9fKSkgJiYgXAorICAgICAhZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoX19TWU1CSUFOMzJfXykKKyNkZWZpbmUgV0lOMzIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIChfX0ZyZWVCU0RfXyA+PSAyKQorLyogTmVlZGVkIGZvciBfX0ZyZWVCU0RfdmVyc2lvbiBzeW1ib2wgZGVmaW5pdGlvbiAqLworI2luY2x1ZGUgPG9zcmVsZGF0ZS5oPgorI2VuZGlmCisKKy8qIFRoZSBpbmNsdWRlIHN0dWZmIGhlcmUgYmVsb3cgaXMgbWFpbmx5IGZvciB0aW1lX3QhICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKKyNpZiAhKGRlZmluZWQoX1dJTlNPQ0tBUElfKSB8fCBkZWZpbmVkKF9XSU5TT0NLX0gpIHx8IGRlZmluZWQoX19MV0lQX09QVF9IX18pKQorLyogVGhlIGNoZWNrIGFib3ZlIHByZXZlbnRzIHRoZSB3aW5zb2NrMiBpbmNsdXNpb24gaWYgd2luc29jay5oIGFscmVhZHkgd2FzCisgICBpbmNsdWRlZCwgc2luY2UgdGhleSBjYW4ndCBjby1leGlzdCB3aXRob3V0IHByb2JsZW1zICovCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjZW5kaWYKKworLyogSFAtVVggc3lzdGVtcyB2ZXJzaW9uIDksIDEwIGFuZCAxMSBsYWNrIHN5cy9zZWxlY3QuaCBhbmQgc28gZG9lcyBvbGRpc2gKKyAgIGxpYmM1LWJhc2VkIExpbnV4IHN5c3RlbXMuIE9ubHkgaW5jbHVkZSBpdCBvbiBzeXN0ZW1zIHRoYXQgYXJlIGtub3duIHRvCisgICByZXF1aXJlIGl0ISAqLworI2lmIGRlZmluZWQoX0FJWCkgfHwgZGVmaW5lZChfX05PVkVMTF9MSUJDX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgXAorICAgIGRlZmluZWQoX19taW5peCkgfHwgZGVmaW5lZChfX1NZTUJJQU4zMl9fKSB8fCBkZWZpbmVkKF9fSU5URUdSSVRZKSB8fCBcCisgICAgZGVmaW5lZChBTkRST0lEKSB8fCBkZWZpbmVkKF9fQU5EUk9JRF9fKSB8fCBcCisgICAoZGVmaW5lZChfX0ZyZWVCU0RfdmVyc2lvbikgJiYgKF9fRnJlZUJTRF92ZXJzaW9uIDwgODAwMDAwKSkKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChfV0lOMzJfV0NFKQorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChfX1ZYV09SS1NfXykKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKKyNpZmRlZiBfX0JFT1NfXworI2luY2x1ZGUgPHN1cHBvcnQvU3VwcG9ydERlZnMuaD4KKyNlbmRpZgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHZvaWQgQ1VSTDsKKworLyoKKyAqIERlY29yYXRlIGV4cG9ydGFibGUgZnVuY3Rpb25zIGZvciBXaW4zMiBhbmQgU3ltYmlhbiBPUyBETEwgbGlua2luZy4KKyAqIFRoaXMgYXZvaWRzIHVzaW5nIGEgLmRlZiBmaWxlIGZvciBidWlsZGluZyBsaWJjdXJsLmRsbC4KKyAqLworI2lmIChkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1NZTUJJQU4zMl9fKSkgJiYgXAorICAgICAhZGVmaW5lZChDVVJMX1NUQVRJQ0xJQikKKyNpZiBkZWZpbmVkKEJVSUxESU5HX0xJQkNVUkwpCisjZGVmaW5lIENVUkxfRVhURVJOICBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjZGVmaW5lIENVUkxfRVhURVJOICBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorI2Vsc2UKKworI2lmZGVmIENVUkxfSElEREVOX1NZTUJPTFMKKy8qCisgKiBUaGlzIGRlZmluaXRpb24gaXMgdXNlZCB0byBtYWtlIGV4dGVybmFsIGRlZmluaXRpb25zIHZpc2libGUgaW4gdGhlCisgKiBzaGFyZWQgbGlicmFyeSB3aGVuIHN5bWJvbHMgYXJlIGhpZGRlbiBieSBkZWZhdWx0LiAgSXQgbWFrZXMgbm8KKyAqIGRpZmZlcmVuY2Ugd2hlbiBjb21waWxpbmcgYXBwbGljYXRpb25zIHdoZXRoZXIgdGhpcyBpcyBzZXQgb3Igbm90LAorICogb25seSB3aGVuIGNvbXBpbGluZyB0aGUgbGlicmFyeS4KKyAqLworI2RlZmluZSBDVVJMX0VYVEVSTiBDVVJMX0VYVEVSTl9TWU1CT0wKKyNlbHNlCisjZGVmaW5lIENVUkxfRVhURVJOCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIGN1cmxfc29ja2V0X3R5cGVkZWYKKy8qIHNvY2tldCB0eXBlZGVmICovCisjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoX19MV0lQX09QVF9IX18pCit0eXBlZGVmIFNPQ0tFVCBjdXJsX3NvY2tldF90OworI2RlZmluZSBDVVJMX1NPQ0tFVF9CQUQgSU5WQUxJRF9TT0NLRVQKKyNlbHNlCit0eXBlZGVmIGludCBjdXJsX3NvY2tldF90OworI2RlZmluZSBDVVJMX1NPQ0tFVF9CQUQgLTEKKyNlbmRpZgorI2RlZmluZSBjdXJsX3NvY2tldF90eXBlZGVmCisjZW5kaWYgLyogY3VybF9zb2NrZXRfdHlwZWRlZiAqLworCitzdHJ1Y3QgY3VybF9odHRwcG9zdCB7CisgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpuZXh0OyAgICAgICAvKiBuZXh0IGVudHJ5IGluIHRoZSBsaXN0ICovCisgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGFsbG9jYXRlZCBuYW1lICovCisgIGxvbmcgbmFtZWxlbmd0aDsgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgbmFtZSBsZW5ndGggKi8KKyAgY2hhciAqY29udGVudHM7ICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYWxsb2NhdGVkIGRhdGEgY29udGVudHMgKi8KKyAgbG9uZyBjb250ZW50c2xlbmd0aDsgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjb250ZW50cyBmaWVsZCAqLworICBjaGFyICpidWZmZXI7ICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhbGxvY2F0ZWQgYnVmZmVyIGNvbnRlbnRzICovCisgIGxvbmcgYnVmZmVybGVuZ3RoOyAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgYnVmZmVyIGZpZWxkICovCisgIGNoYXIgKmNvbnRlbnR0eXBlOyAgICAgICAgICAgICAgICAvKiBDb250ZW50LVR5cGUgKi8KKyAgc3RydWN0IGN1cmxfc2xpc3QqIGNvbnRlbnRoZWFkZXI7IC8qIGxpc3Qgb2YgZXh0cmEgaGVhZGVycyBmb3IgdGhpcyBmb3JtICovCisgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICptb3JlOyAgICAgICAvKiBpZiBvbmUgZmllbGQgbmFtZSBoYXMgbW9yZSB0aGFuIG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSwgdGhpcyBsaW5rIHNob3VsZCBsaW5rIHRvIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgKi8KKyAgbG9uZyBmbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIGFzIGRlZmluZWQgYmVsb3cgKi8KKyNkZWZpbmUgSFRUUFBPU1RfRklMRU5BTUUgKDE8PDApICAgIC8qIHNwZWNpZmllZCBjb250ZW50IGlzIGEgZmlsZSBuYW1lICovCisjZGVmaW5lIEhUVFBQT1NUX1JFQURGSUxFICgxPDwxKSAgICAvKiBzcGVjaWZpZWQgY29udGVudCBpcyBhIGZpbGUgbmFtZSAqLworI2RlZmluZSBIVFRQUE9TVF9QVFJOQU1FICgxPDwyKSAgICAgLyogbmFtZSBpcyBvbmx5IHN0b3JlZCBwb2ludGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgZnJlZSBpbiBmb3JtZnJlZSAqLworI2RlZmluZSBIVFRQUE9TVF9QVFJDT05URU5UUyAoMTw8MykgLyogY29udGVudHMgaXMgb25seSBzdG9yZWQgcG9pbnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IGZyZWUgaW4gZm9ybWZyZWUgKi8KKyNkZWZpbmUgSFRUUFBPU1RfQlVGRkVSICgxPDw0KSAgICAgIC8qIHVwbG9hZCBmaWxlIGZyb20gYnVmZmVyICovCisjZGVmaW5lIEhUVFBQT1NUX1BUUkJVRkZFUiAoMTw8NSkgICAvKiB1cGxvYWQgZmlsZSBmcm9tIHBvaW50ZXIgY29udGVudHMgKi8KKyNkZWZpbmUgSFRUUFBPU1RfQ0FMTEJBQ0sgKDE8PDYpICAgIC8qIHVwbG9hZCBmaWxlIGNvbnRlbnRzIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhciByZWFkIGNhbGxiYWNrIHRvIGdldCB0aGUgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdpdmVuIHBvaW50ZXIgYXMgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyICovCisKKyAgY2hhciAqc2hvd2ZpbGVuYW1lOyAgICAgICAgICAgICAgIC8qIFRoZSBmaWxlIG5hbWUgdG8gc2hvdy4gSWYgbm90IHNldCwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgZmlsZSBuYW1lIHdpbGwgYmUgdXNlZCAoaWYgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYSBmaWxlIHBhcnQpICovCisgIHZvaWQgKnVzZXJwOyAgICAgICAgICAgICAgICAgICAgICAvKiBjdXN0b20gcG9pbnRlciB1c2VkIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFBPU1RfQ0FMTEJBQ0sgcG9zdHMgKi8KK307CisKK3R5cGVkZWYgaW50ICgqY3VybF9wcm9ncmVzc19jYWxsYmFjaykodm9pZCAqY2xpZW50cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRsdG90YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkbG5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHVsdG90YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB1bG5vdyk7CisKKyNpZm5kZWYgQ1VSTF9NQVhfV1JJVEVfU0laRQorICAvKiBUZXN0cyBoYXZlIHByb3ZlbiB0aGF0IDIwSyBpcyBhIHZlcnkgYmFkIGJ1ZmZlciBzaXplIGZvciB1cGxvYWRzIG9uCisgICAgIFdpbmRvd3MsIHdoaWxlIDE2SyBmb3Igc29tZSBvZGQgcmVhc29uIHBlcmZvcm1lZCBhIGxvdCBiZXR0ZXIuCisgICAgIFdlIGRvIHRoZSBpZm5kZWYgY2hlY2sgdG8gYWxsb3cgdGhpcyB2YWx1ZSB0byBlYXNpZXIgYmUgY2hhbmdlZCBhdCBidWlsZAorICAgICB0aW1lIGZvciB0aG9zZSB3aG8gZmVlbCBhZHZlbnR1cm91cy4gVGhlIHByYWN0aWNhbCBtaW5pbXVtIGlzIGFib3V0CisgICAgIDQwMCBieXRlcyBzaW5jZSBsaWJjdXJsIHVzZXMgYSBidWZmZXIgb2YgdGhpcyBzaXplIGFzIGEgc2NyYXRjaCBhcmVhCisgICAgICh1bnJlbGF0ZWQgdG8gbmV0d29yayBzZW5kIG9wZXJhdGlvbnMpLiAqLworI2RlZmluZSBDVVJMX01BWF9XUklURV9TSVpFIDE2Mzg0CisjZW5kaWYKKworI2lmbmRlZiBDVVJMX01BWF9IVFRQX0hFQURFUgorLyogVGhlIG9ubHkgcmVhc29uIHRvIGhhdmUgYSBtYXggbGltaXQgZm9yIHRoaXMgaXMgdG8gYXZvaWQgdGhlIHJpc2sgb2YgYSBiYWQKKyAgIHNlcnZlciBmZWVkaW5nIGxpYmN1cmwgd2l0aCBhIG5ldmVyLWVuZGluZyBoZWFkZXIgdGhhdCB3aWxsIGNhdXNlIHJlYWxsb2NzCisgICBpbmZpbml0ZWx5ICovCisjZGVmaW5lIENVUkxfTUFYX0hUVFBfSEVBREVSICgxMDAqMTAyNCkKKyNlbmRpZgorCisvKiBUaGlzIGlzIGEgbWFnaWMgcmV0dXJuIGNvZGUgZm9yIHRoZSB3cml0ZSBjYWxsYmFjayB0aGF0LCB3aGVuIHJldHVybmVkLAorICAgd2lsbCBzaWduYWwgbGliY3VybCB0byBwYXVzZSByZWNlaXZpbmcgb24gdGhlIGN1cnJlbnQgdHJhbnNmZXIuICovCisjZGVmaW5lIENVUkxfV1JJVEVGVU5DX1BBVVNFIDB4MTAwMDAwMDEKKwordHlwZWRlZiBzaXplX3QgKCpjdXJsX3dyaXRlX2NhbGxiYWNrKShjaGFyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbml0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRzdHJlYW0pOworCisKKworLyogZW51bWVyYXRpb24gb2YgZmlsZSB0eXBlcyAqLwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSTEZJTEVUWVBFX0ZJTEUgPSAwLAorICBDVVJMRklMRVRZUEVfRElSRUNUT1JZLAorICBDVVJMRklMRVRZUEVfU1lNTElOSywKKyAgQ1VSTEZJTEVUWVBFX0RFVklDRV9CTE9DSywKKyAgQ1VSTEZJTEVUWVBFX0RFVklDRV9DSEFSLAorICBDVVJMRklMRVRZUEVfTkFNRURQSVBFLAorICBDVVJMRklMRVRZUEVfU09DS0VULAorICBDVVJMRklMRVRZUEVfRE9PUiwgLyogaXMgcG9zc2libGUgb25seSBvbiBTdW4gU29sYXJpcyBub3cgKi8KKworICBDVVJMRklMRVRZUEVfVU5LTk9XTiAvKiBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KK30gY3VybGZpbGV0eXBlOworCisjZGVmaW5lIENVUkxGSU5GT0ZMQUdfS05PV05fRklMRU5BTUUgICAgKDE8PDApCisjZGVmaW5lIENVUkxGSU5GT0ZMQUdfS05PV05fRklMRVRZUEUgICAgKDE8PDEpCisjZGVmaW5lIENVUkxGSU5GT0ZMQUdfS05PV05fVElNRSAgICAgICAgKDE8PDIpCisjZGVmaW5lIENVUkxGSU5GT0ZMQUdfS05PV05fUEVSTSAgICAgICAgKDE8PDMpCisjZGVmaW5lIENVUkxGSU5GT0ZMQUdfS05PV05fVUlEICAgICAgICAgKDE8PDQpCisjZGVmaW5lIENVUkxGSU5GT0ZMQUdfS05PV05fR0lEICAgICAgICAgKDE8PDUpCisjZGVmaW5lIENVUkxGSU5GT0ZMQUdfS05PV05fU0laRSAgICAgICAgKDE8PDYpCisjZGVmaW5lIENVUkxGSU5GT0ZMQUdfS05PV05fSExJTktDT1VOVCAgKDE8PDcpCisKKy8qIENvbnRlbnQgb2YgdGhpcyBzdHJ1Y3R1cmUgZGVwZW5kcyBvbiBpbmZvcm1hdGlvbiB3aGljaCBpcyBrbm93biBhbmQgaXMKKyAgIGFjaGlldmFibGUgKGUuZy4gYnkgRlRQIExJU1QgcGFyc2luZykuIFBsZWFzZSBzZWUgdGhlIHVybF9lYXN5X3NldG9wdCgzKSBtYW4KKyAgIHBhZ2UgZm9yIGNhbGxiYWNrcyByZXR1cm5pbmcgdGhpcyBzdHJ1Y3R1cmUgLS0gc29tZSBmaWVsZHMgYXJlIG1hbmRhdG9yeSwKKyAgIHNvbWUgb3RoZXJzIGFyZSBvcHRpb25hbC4gVGhlIEZMQUcgZmllbGQgaGFzIHNwZWNpYWwgbWVhbmluZy4gKi8KK3N0cnVjdCBjdXJsX2ZpbGVpbmZvIHsKKyAgY2hhciAqZmlsZW5hbWU7CisgIGN1cmxmaWxldHlwZSBmaWxldHlwZTsKKyAgdGltZV90IHRpbWU7CisgIHVuc2lnbmVkIGludCBwZXJtOworICBpbnQgdWlkOworICBpbnQgZ2lkOworICBjdXJsX29mZl90IHNpemU7CisgIGxvbmcgaW50IGhhcmRsaW5rczsKKworICBzdHJ1Y3QgeworICAgIC8qIElmIHNvbWUgb2YgdGhlc2UgZmllbGRzIGlzIG5vdCBOVUxMLCBpdCBpcyBhIHBvaW50ZXIgdG8gYl9kYXRhLiAqLworICAgIGNoYXIgKnRpbWU7CisgICAgY2hhciAqcGVybTsKKyAgICBjaGFyICp1c2VyOworICAgIGNoYXIgKmdyb3VwOworICAgIGNoYXIgKnRhcmdldDsgLyogcG9pbnRlciB0byB0aGUgdGFyZ2V0IGZpbGVuYW1lIG9mIGEgc3ltbGluayAqLworICB9IHN0cmluZ3M7CisKKyAgdW5zaWduZWQgaW50IGZsYWdzOworCisgIC8qIHVzZWQgaW50ZXJuYWxseSAqLworICBjaGFyICogYl9kYXRhOworICBzaXplX3QgYl9zaXplOworICBzaXplX3QgYl91c2VkOworfTsKKworLyogcmV0dXJuIGNvZGVzIGZvciBDVVJMT1BUX0NIVU5LX0JHTl9GVU5DVElPTiAqLworI2RlZmluZSBDVVJMX0NIVU5LX0JHTl9GVU5DX09LICAgICAgMAorI2RlZmluZSBDVVJMX0NIVU5LX0JHTl9GVU5DX0ZBSUwgICAgMSAvKiB0ZWxsIHRoZSBsaWIgdG8gZW5kIHRoZSB0YXNrICovCisjZGVmaW5lIENVUkxfQ0hVTktfQkdOX0ZVTkNfU0tJUCAgICAyIC8qIHNraXAgdGhpcyBjaHVuayBvdmVyICovCisKKy8qIGlmIHNwbGl0dGluZyBvZiBkYXRhIHRyYW5zZmVyIGlzIGVuYWJsZWQsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGJlZm9yZQorICAgZG93bmxvYWQgb2YgYW4gaW5kaXZpZHVhbCBjaHVuayBzdGFydGVkLiBOb3RlIHRoYXQgcGFyYW1ldGVyICJyZW1haW5zIiB3b3JrcworICAgb25seSBmb3IgRlRQIHdpbGRjYXJkIGRvd25sb2FkaW5nIChmb3Igbm93KSwgb3RoZXJ3aXNlIGlzIG5vdCB1c2VkICovCit0eXBlZGVmIGxvbmcgKCpjdXJsX2NodW5rX2Jnbl9jYWxsYmFjaykoY29uc3Qgdm9pZCAqdHJhbnNmZXJfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbWFpbnMpOworCisvKiByZXR1cm4gY29kZXMgZm9yIENVUkxPUFRfQ0hVTktfRU5EX0ZVTkNUSU9OICovCisjZGVmaW5lIENVUkxfQ0hVTktfRU5EX0ZVTkNfT0sgICAgICAwCisjZGVmaW5lIENVUkxfQ0hVTktfRU5EX0ZVTkNfRkFJTCAgICAxIC8qIHRlbGwgdGhlIGxpYiB0byBlbmQgdGhlIHRhc2sgKi8KKworLyogSWYgc3BsaXR0aW5nIG9mIGRhdGEgdHJhbnNmZXIgaXMgZW5hYmxlZCB0aGlzIGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlcgorICAgZG93bmxvYWQgb2YgYW4gaW5kaXZpZHVhbCBjaHVuayBmaW5pc2hlZC4KKyAgIE5vdGUhIEFmdGVyIHRoaXMgY2FsbGJhY2sgd2FzIHNldCB0aGVuIGl0IGhhdmUgdG8gYmUgY2FsbGVkIEZPUiBBTEwgY2h1bmtzLgorICAgRXZlbiBpZiBkb3dubG9hZGluZyBvZiB0aGlzIGNodW5rIHdhcyBza2lwcGVkIGluIENIVU5LX0JHTl9GVU5DLgorICAgVGhpcyBpcyB0aGUgcmVhc29uIHdoeSB3ZSBkb24ndCBuZWVkICJ0cmFuc2Zlcl9pbmZvIiBwYXJhbWV0ZXIgaW4gdGhpcworICAgY2FsbGJhY2sgYW5kIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiAicmVtYWlucyIgcGFyYW1ldGVyIHRvby4gKi8KK3R5cGVkZWYgbG9uZyAoKmN1cmxfY2h1bmtfZW5kX2NhbGxiYWNrKSh2b2lkICpwdHIpOworCisvKiByZXR1cm4gY29kZXMgZm9yIEZOTUFUQ0hGVU5DVElPTiAqLworI2RlZmluZSBDVVJMX0ZOTUFUQ0hGVU5DX01BVENIICAgIDAgLyogc3RyaW5nIGNvcnJlc3BvbmRzIHRvIHRoZSBwYXR0ZXJuICovCisjZGVmaW5lIENVUkxfRk5NQVRDSEZVTkNfTk9NQVRDSCAgMSAvKiBwYXR0ZXJuIGRvZXNuJ3QgbWF0Y2ggdGhlIHN0cmluZyAqLworI2RlZmluZSBDVVJMX0ZOTUFUQ0hGVU5DX0ZBSUwgICAgIDIgLyogYW4gZXJyb3Igb2NjdXJyZWQgKi8KKworLyogY2FsbGJhY2sgdHlwZSBmb3Igd2lsZGNhcmQgZG93bmxvYWRpbmcgcGF0dGVybiBtYXRjaGluZy4gSWYgdGhlCisgICBzdHJpbmcgbWF0Y2hlcyB0aGUgcGF0dGVybiwgcmV0dXJuIENVUkxfRk5NQVRDSEZVTkNfTUFUQ0ggdmFsdWUsIGV0Yy4gKi8KK3R5cGVkZWYgaW50ICgqY3VybF9mbm1hdGNoX2NhbGxiYWNrKSh2b2lkICpwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcpOworCisvKiBUaGVzZSBhcmUgdGhlIHJldHVybiBjb2RlcyBmb3IgdGhlIHNlZWsgY2FsbGJhY2tzICovCisjZGVmaW5lIENVUkxfU0VFS0ZVTkNfT0sgICAgICAgMAorI2RlZmluZSBDVVJMX1NFRUtGVU5DX0ZBSUwgICAgIDEgLyogZmFpbCB0aGUgZW50aXJlIHRyYW5zZmVyICovCisjZGVmaW5lIENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUsgMiAvKiB0ZWxsIGxpYmN1cmwgc2Vla2luZyBjYW4ndCBiZSBkb25lLCBzbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliY3VybCBtaWdodCB0cnkgb3RoZXIgbWVhbnMgaW5zdGVhZCAqLwordHlwZWRlZiBpbnQgKCpjdXJsX3NlZWtfY2FsbGJhY2spKHZvaWQgKmluc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcmlnaW4pOyAvKiAnd2hlbmNlJyAqLworCisvKiBUaGlzIGlzIGEgcmV0dXJuIGNvZGUgZm9yIHRoZSByZWFkIGNhbGxiYWNrIHRoYXQsIHdoZW4gcmV0dXJuZWQsIHdpbGwKKyAgIHNpZ25hbCBsaWJjdXJsIHRvIGltbWVkaWF0ZWx5IGFib3J0IHRoZSBjdXJyZW50IHRyYW5zZmVyLiAqLworI2RlZmluZSBDVVJMX1JFQURGVU5DX0FCT1JUIDB4MTAwMDAwMDAKKy8qIFRoaXMgaXMgYSByZXR1cm4gY29kZSBmb3IgdGhlIHJlYWQgY2FsbGJhY2sgdGhhdCwgd2hlbiByZXR1cm5lZCwgd2lsbAorICAgc2lnbmFsIGxpYmN1cmwgdG8gcGF1c2Ugc2VuZGluZyBkYXRhIG9uIHRoZSBjdXJyZW50IHRyYW5zZmVyLiAqLworI2RlZmluZSBDVVJMX1JFQURGVU5DX1BBVVNFIDB4MTAwMDAwMDEKKwordHlwZWRlZiBzaXplX3QgKCpjdXJsX3JlYWRfY2FsbGJhY2spKGNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmluc3RyZWFtKTsKKwordHlwZWRlZiBlbnVtICB7CisgIENVUkxTT0NLVFlQRV9JUENYTiwgLyogc29ja2V0IGNyZWF0ZWQgZm9yIGEgc3BlY2lmaWMgSVAgY29ubmVjdGlvbiAqLworICBDVVJMU09DS1RZUEVfTEFTVCAgIC8qIG5ldmVyIHVzZSAqLworfSBjdXJsc29ja3R5cGU7CisKKy8qIFRoZSByZXR1cm4gY29kZSBmcm9tIHRoZSBzb2Nrb3B0X2NhbGxiYWNrIGNhbiBzaWduYWwgaW5mb3JtYXRpb24gYmFjaworICAgdG8gbGliY3VybDogKi8KKyNkZWZpbmUgQ1VSTF9TT0NLT1BUX09LIDAKKyNkZWZpbmUgQ1VSTF9TT0NLT1BUX0VSUk9SIDEgLyogY2F1c2VzIGxpYmN1cmwgdG8gYWJvcnQgYW5kIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLICovCisjZGVmaW5lIENVUkxfU09DS09QVF9BTFJFQURZX0NPTk5FQ1RFRCAyCisKK3R5cGVkZWYgaW50ICgqY3VybF9zb2Nrb3B0X2NhbGxiYWNrKSh2b2lkICpjbGllbnRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgY3VybGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxzb2NrdHlwZSBwdXJwb3NlKTsKKworc3RydWN0IGN1cmxfc29ja2FkZHIgeworICBpbnQgZmFtaWx5OworICBpbnQgc29ja3R5cGU7CisgIGludCBwcm90b2NvbDsKKyAgdW5zaWduZWQgaW50IGFkZHJsZW47IC8qIGFkZHJsZW4gd2FzIGEgc29ja2xlbl90IHR5cGUgYmVmb3JlIDcuMTguMCBidXQgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cm5lZCByZWFsbHkgdWdseSBhbmQgcGFpbmZ1bCBvbiB0aGUgc3lzdGVtcyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWNrIHRoaXMgdHlwZSAqLworICBzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKK307CisKK3R5cGVkZWYgY3VybF9zb2NrZXRfdAorKCpjdXJsX29wZW5zb2NrZXRfY2FsbGJhY2spKHZvaWQgKmNsaWVudHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHNvY2t0eXBlIHB1cnBvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfc29ja2FkZHIgKmFkZHJlc3MpOworCit0eXBlZGVmIGludAorKCpjdXJsX2Nsb3Nlc29ja2V0X2NhbGxiYWNrKSh2b2lkICpjbGllbnRwLCBjdXJsX3NvY2tldF90IGl0ZW0pOworCit0eXBlZGVmIGVudW0geworICBDVVJMSU9FX09LLCAgICAgICAgICAgIC8qIEkvTyBvcGVyYXRpb24gc3VjY2Vzc2Z1bCAqLworICBDVVJMSU9FX1VOS05PV05DTUQsICAgIC8qIGNvbW1hbmQgd2FzIHVua25vd24gdG8gY2FsbGJhY2sgKi8KKyAgQ1VSTElPRV9GQUlMUkVTVEFSVCwgICAvKiBmYWlsZWQgdG8gcmVzdGFydCB0aGUgcmVhZCAqLworICBDVVJMSU9FX0xBU1QgICAgICAgICAgIC8qIG5ldmVyIHVzZSAqLworfSBjdXJsaW9lcnI7CisKK3R5cGVkZWYgZW51bSAgeworICBDVVJMSU9DTURfTk9QLCAgICAgICAgIC8qIG5vIG9wZXJhdGlvbiAqLworICBDVVJMSU9DTURfUkVTVEFSVFJFQUQsIC8qIHJlc3RhcnQgdGhlIHJlYWQgc3RyZWFtIGZyb20gc3RhcnQgKi8KKyAgQ1VSTElPQ01EX0xBU1QgICAgICAgICAvKiBuZXZlciB1c2UgKi8KK30gY3VybGlvY21kOworCit0eXBlZGVmIGN1cmxpb2VyciAoKmN1cmxfaW9jdGxfY2FsbGJhY2spKENVUkwgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50cCk7CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHR5cGVkZWYncyBhcmUgc2lnbmF0dXJlcyBvZiBtYWxsb2MsIGZyZWUsIHJlYWxsb2MsIHN0cmR1cCBhbmQKKyAqIGNhbGxvYyByZXNwZWN0aXZlbHkuICBGdW5jdGlvbiBwb2ludGVycyBvZiB0aGVzZSB0eXBlcyBjYW4gYmUgcGFzc2VkIHRvIHRoZQorICogY3VybF9nbG9iYWxfaW5pdF9tZW0oKSBmdW5jdGlvbiB0byBzZXQgdXNlciBkZWZpbmVkIG1lbW9yeSBtYW5hZ2VtZW50CisgKiBjYWxsYmFjayByb3V0aW5lcy4KKyAqLwordHlwZWRlZiB2b2lkICooKmN1cmxfbWFsbG9jX2NhbGxiYWNrKShzaXplX3Qgc2l6ZSk7Cit0eXBlZGVmIHZvaWQgKCpjdXJsX2ZyZWVfY2FsbGJhY2spKHZvaWQgKnB0cik7Cit0eXBlZGVmIHZvaWQgKigqY3VybF9yZWFsbG9jX2NhbGxiYWNrKSh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKK3R5cGVkZWYgY2hhciAqKCpjdXJsX3N0cmR1cF9jYWxsYmFjaykoY29uc3QgY2hhciAqc3RyKTsKK3R5cGVkZWYgdm9pZCAqKCpjdXJsX2NhbGxvY19jYWxsYmFjaykoc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7CisKKy8qIHRoZSBraW5kIG9mIGRhdGEgdGhhdCBpcyBwYXNzZWQgdG8gaW5mb3JtYXRpb25fY2FsbGJhY2sqLwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSTElORk9fVEVYVCA9IDAsCisgIENVUkxJTkZPX0hFQURFUl9JTiwgICAgLyogMSAqLworICBDVVJMSU5GT19IRUFERVJfT1VULCAgIC8qIDIgKi8KKyAgQ1VSTElORk9fREFUQV9JTiwgICAgICAvKiAzICovCisgIENVUkxJTkZPX0RBVEFfT1VULCAgICAgLyogNCAqLworICBDVVJMSU5GT19TU0xfREFUQV9JTiwgIC8qIDUgKi8KKyAgQ1VSTElORk9fU1NMX0RBVEFfT1VULCAvKiA2ICovCisgIENVUkxJTkZPX0VORAorfSBjdXJsX2luZm90eXBlOworCit0eXBlZGVmIGludCAoKmN1cmxfZGVidWdfY2FsbGJhY2spCisgICAgICAgKENVUkwgKmhhbmRsZSwgICAgICAvKiB0aGUgaGFuZGxlL3RyYW5zZmVyIHRoaXMgY29uY2VybnMgKi8KKyAgICAgICAgY3VybF9pbmZvdHlwZSB0eXBlLCAvKiB3aGF0IGtpbmQgb2YgZGF0YSAqLworICAgICAgICBjaGFyICpkYXRhLCAgICAgICAgLyogcG9pbnRzIHRvIHRoZSBkYXRhICovCisgICAgICAgIHNpemVfdCBzaXplLCAgICAgICAvKiBzaXplIG9mIHRoZSBkYXRhIHBvaW50ZWQgdG8gKi8KKyAgICAgICAgdm9pZCAqdXNlcnB0cik7ICAgIC8qIHdoYXRldmVyIHRoZSB1c2VyIHBsZWFzZSAqLworCisvKiBBbGwgcG9zc2libGUgZXJyb3IgY29kZXMgZnJvbSBhbGwgc29ydHMgb2YgY3VybCBmdW5jdGlvbnMuIEZ1dHVyZSB2ZXJzaW9ucworICAgbWF5IHJldHVybiBvdGhlciB2YWx1ZXMsIHN0YXkgcHJlcGFyZWQuCisKKyAgIEFsd2F5cyBhZGQgbmV3IHJldHVybiBjb2RlcyBsYXN0LiBOZXZlciAqRVZFUiogcmVtb3ZlIGFueS4gVGhlIHJldHVybgorICAgY29kZXMgbXVzdCByZW1haW4gdGhlIHNhbWUhCisgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSTEVfT0sgPSAwLAorICBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTCwgICAgLyogMSAqLworICBDVVJMRV9GQUlMRURfSU5JVCwgICAgICAgICAgICAgLyogMiAqLworICBDVVJMRV9VUkxfTUFMRk9STUFULCAgICAgICAgICAgLyogMyAqLworICBDVVJMRV9OT1RfQlVJTFRfSU4sICAgICAgICAgICAgLyogNCAtIFt3YXMgb2Jzb2xldGVkIGluIEF1Z3VzdCAyMDA3IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy4xNy4wLCByZXVzZWQgaW4gQXByaWwgMjAxMSBmb3IgNy4yMS41XSAqLworICBDVVJMRV9DT1VMRE5UX1JFU09MVkVfUFJPWFksICAgLyogNSAqLworICBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVCwgICAgLyogNiAqLworICBDVVJMRV9DT1VMRE5UX0NPTk5FQ1QsICAgICAgICAgLyogNyAqLworICBDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZLCAgLyogOCAqLworICBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRCwgICAgLyogOSBhIHNlcnZpY2Ugd2FzIGRlbmllZCBieSB0aGUgc2VydmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWUgdG8gbGFjayBvZiBhY2Nlc3MgLSB3aGVuIGxvZ2luIGZhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIG5vdCByZXR1cm5lZC4gKi8KKyAgQ1VSTEVfRlRQX0FDQ0VQVF9GQUlMRUQsICAgICAgIC8qIDEwIC0gW3dhcyBvYnNvbGV0ZWQgaW4gQXByaWwgMjAwNiBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuMTUuNCwgcmV1c2VkIGluIERlYyAyMDExIGZvciA3LjI0LjBdKi8KKyAgQ1VSTEVfRlRQX1dFSVJEX1BBU1NfUkVQTFksICAgIC8qIDExICovCisgIENVUkxFX0ZUUF9BQ0NFUFRfVElNRU9VVCwgICAgICAvKiAxMiAtIHRpbWVvdXQgb2NjdXJyZWQgYWNjZXB0aW5nIHNlcnZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dhcyBvYnNvbGV0ZWQgaW4gQXVndXN0IDIwMDcgZm9yIDcuMTcuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlZCBpbiBEZWMgMjAxMSBmb3IgNy4yNC4wXSovCisgIENVUkxFX0ZUUF9XRUlSRF9QQVNWX1JFUExZLCAgICAvKiAxMyAqLworICBDVVJMRV9GVFBfV0VJUkRfMjI3X0ZPUk1BVCwgICAgLyogMTQgKi8KKyAgQ1VSTEVfRlRQX0NBTlRfR0VUX0hPU1QsICAgICAgIC8qIDE1ICovCisgIENVUkxFX09CU09MRVRFMTYsICAgICAgICAgICAgICAvKiAxNiAtIE5PVCBVU0VEICovCisgIENVUkxFX0ZUUF9DT1VMRE5UX1NFVF9UWVBFLCAgICAvKiAxNyAqLworICBDVVJMRV9QQVJUSUFMX0ZJTEUsICAgICAgICAgICAgLyogMTggKi8KKyAgQ1VSTEVfRlRQX0NPVUxETlRfUkVUUl9GSUxFLCAgIC8qIDE5ICovCisgIENVUkxFX09CU09MRVRFMjAsICAgICAgICAgICAgICAvKiAyMCAtIE5PVCBVU0VEICovCisgIENVUkxFX1FVT1RFX0VSUk9SLCAgICAgICAgICAgICAvKiAyMSAtIHF1b3RlIGNvbW1hbmQgZmFpbHVyZSAqLworICBDVVJMRV9IVFRQX1JFVFVSTkVEX0VSUk9SLCAgICAgLyogMjIgKi8KKyAgQ1VSTEVfV1JJVEVfRVJST1IsICAgICAgICAgICAgIC8qIDIzICovCisgIENVUkxFX09CU09MRVRFMjQsICAgICAgICAgICAgICAvKiAyNCAtIE5PVCBVU0VEICovCisgIENVUkxFX1VQTE9BRF9GQUlMRUQsICAgICAgICAgICAvKiAyNSAtIGZhaWxlZCB1cGxvYWQgImNvbW1hbmQiICovCisgIENVUkxFX1JFQURfRVJST1IsICAgICAgICAgICAgICAvKiAyNiAtIGNvdWxkbid0IG9wZW4vcmVhZCBmcm9tIGZpbGUgKi8KKyAgQ1VSTEVfT1VUX09GX01FTU9SWSwgICAgICAgICAgIC8qIDI3ICovCisgIC8qIE5vdGU6IENVUkxFX09VVF9PRl9NRU1PUlkgbWF5IHNvbWV0aW1lcyBpbmRpY2F0ZSBhIGNvbnZlcnNpb24gZXJyb3IKKyAgICAgICAgICAgaW5zdGVhZCBvZiBhIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIGlmIENVUkxfRE9FU19DT05WRVJTSU9OUworICAgICAgICAgICBpcyBkZWZpbmVkCisgICovCisgIENVUkxFX09QRVJBVElPTl9USU1FRE9VVCwgICAgICAvKiAyOCAtIHRoZSB0aW1lb3V0IHRpbWUgd2FzIHJlYWNoZWQgKi8KKyAgQ1VSTEVfT0JTT0xFVEUyOSwgICAgICAgICAgICAgIC8qIDI5IC0gTk9UIFVTRUQgKi8KKyAgQ1VSTEVfRlRQX1BPUlRfRkFJTEVELCAgICAgICAgIC8qIDMwIC0gRlRQIFBPUlQgb3BlcmF0aW9uIGZhaWxlZCAqLworICBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVCwgICAgLyogMzEgLSB0aGUgUkVTVCBjb21tYW5kIGZhaWxlZCAqLworICBDVVJMRV9PQlNPTEVURTMyLCAgICAgICAgICAgICAgLyogMzIgLSBOT1QgVVNFRCAqLworICBDVVJMRV9SQU5HRV9FUlJPUiwgICAgICAgICAgICAgLyogMzMgLSBSQU5HRSAiY29tbWFuZCIgZGlkbid0IHdvcmsgKi8KKyAgQ1VSTEVfSFRUUF9QT1NUX0VSUk9SLCAgICAgICAgIC8qIDM0ICovCisgIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SLCAgICAgICAvKiAzNSAtIHdyb25nIHdoZW4gY29ubmVjdGluZyB3aXRoIFNTTCAqLworICBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FLCAgICAgLyogMzYgLSBjb3VsZG4ndCByZXN1bWUgZG93bmxvYWQgKi8KKyAgQ1VSTEVfRklMRV9DT1VMRE5UX1JFQURfRklMRSwgIC8qIDM3ICovCisgIENVUkxFX0xEQVBfQ0FOTk9UX0JJTkQsICAgICAgICAvKiAzOCAqLworICBDVVJMRV9MREFQX1NFQVJDSF9GQUlMRUQsICAgICAgLyogMzkgKi8KKyAgQ1VSTEVfT0JTT0xFVEU0MCwgICAgICAgICAgICAgIC8qIDQwIC0gTk9UIFVTRUQgKi8KKyAgQ1VSTEVfRlVOQ1RJT05fTk9UX0ZPVU5ELCAgICAgIC8qIDQxICovCisgIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0ssICAgICAvKiA0MiAqLworICBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQsICAgLyogNDMgKi8KKyAgQ1VSTEVfT0JTT0xFVEU0NCwgICAgICAgICAgICAgIC8qIDQ0IC0gTk9UIFVTRUQgKi8KKyAgQ1VSTEVfSU5URVJGQUNFX0ZBSUxFRCwgICAgICAgIC8qIDQ1IC0gQ1VSTE9QVF9JTlRFUkZBQ0UgZmFpbGVkICovCisgIENVUkxFX09CU09MRVRFNDYsICAgICAgICAgICAgICAvKiA0NiAtIE5PVCBVU0VEICovCisgIENVUkxFX1RPT19NQU5ZX1JFRElSRUNUUyAsICAgICAvKiA0NyAtIGNhdGNoIGVuZGxlc3MgcmUtZGlyZWN0IGxvb3BzICovCisgIENVUkxFX1VOS05PV05fT1BUSU9OLCAgICAgICAgICAvKiA0OCAtIFVzZXIgc3BlY2lmaWVkIGFuIHVua25vd24gb3B0aW9uICovCisgIENVUkxFX1RFTE5FVF9PUFRJT05fU1lOVEFYICwgICAvKiA0OSAtIE1hbGZvcm1lZCB0ZWxuZXQgb3B0aW9uICovCisgIENVUkxFX09CU09MRVRFNTAsICAgICAgICAgICAgICAvKiA1MCAtIE5PVCBVU0VEICovCisgIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTiwgLyogNTEgLSBwZWVyJ3MgY2VydGlmaWNhdGUgb3IgZmluZ2VycHJpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNuJ3QgdmVyaWZpZWQgZmluZSAqLworICBDVVJMRV9HT1RfTk9USElORywgICAgICAgICAgICAgLyogNTIgLSB3aGVuIHRoaXMgaXMgYSBzcGVjaWZpYyBlcnJvciAqLworICBDVVJMRV9TU0xfRU5HSU5FX05PVEZPVU5ELCAgICAgLyogNTMgLSBTU0wgY3J5cHRvIGVuZ2luZSBub3QgZm91bmQgKi8KKyAgQ1VSTEVfU1NMX0VOR0lORV9TRVRGQUlMRUQsICAgIC8qIDU0IC0gY2FuIG5vdCBzZXQgU1NMIGNyeXB0byBlbmdpbmUgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgKi8KKyAgQ1VSTEVfU0VORF9FUlJPUiwgICAgICAgICAgICAgIC8qIDU1IC0gZmFpbGVkIHNlbmRpbmcgbmV0d29yayBkYXRhICovCisgIENVUkxFX1JFQ1ZfRVJST1IsICAgICAgICAgICAgICAvKiA1NiAtIGZhaWx1cmUgaW4gcmVjZWl2aW5nIG5ldHdvcmsgZGF0YSAqLworICBDVVJMRV9PQlNPTEVURTU3LCAgICAgICAgICAgICAgLyogNTcgLSBOT1QgSU4gVVNFICovCisgIENVUkxFX1NTTF9DRVJUUFJPQkxFTSwgICAgICAgICAvKiA1OCAtIHByb2JsZW0gd2l0aCB0aGUgbG9jYWwgY2VydGlmaWNhdGUgKi8KKyAgQ1VSTEVfU1NMX0NJUEhFUiwgICAgICAgICAgICAgIC8qIDU5IC0gY291bGRuJ3QgdXNlIHNwZWNpZmllZCBjaXBoZXIgKi8KKyAgQ1VSTEVfU1NMX0NBQ0VSVCwgICAgICAgICAgICAgIC8qIDYwIC0gcHJvYmxlbSB3aXRoIHRoZSBDQSBjZXJ0IChwYXRoPykgKi8KKyAgQ1VSTEVfQkFEX0NPTlRFTlRfRU5DT0RJTkcsICAgIC8qIDYxIC0gVW5yZWNvZ25pemVkL2JhZCBlbmNvZGluZyAqLworICBDVVJMRV9MREFQX0lOVkFMSURfVVJMLCAgICAgICAgLyogNjIgLSBJbnZhbGlkIExEQVAgVVJMICovCisgIENVUkxFX0ZJTEVTSVpFX0VYQ0VFREVELCAgICAgICAvKiA2MyAtIE1heGltdW0gZmlsZSBzaXplIGV4Y2VlZGVkICovCisgIENVUkxFX1VTRV9TU0xfRkFJTEVELCAgICAgICAgICAvKiA2NCAtIFJlcXVlc3RlZCBGVFAgU1NMIGxldmVsIGZhaWxlZCAqLworICBDVVJMRV9TRU5EX0ZBSUxfUkVXSU5ELCAgICAgICAgLyogNjUgLSBTZW5kaW5nIHRoZSBkYXRhIHJlcXVpcmVzIGEgcmV3aW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGZhaWxlZCAqLworICBDVVJMRV9TU0xfRU5HSU5FX0lOSVRGQUlMRUQsICAgLyogNjYgLSBmYWlsZWQgdG8gaW5pdGlhbGlzZSBFTkdJTkUgKi8KKyAgQ1VSTEVfTE9HSU5fREVOSUVELCAgICAgICAgICAgIC8qIDY3IC0gdXNlciwgcGFzc3dvcmQgb3Igc2ltaWxhciB3YXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRlZCBhbmQgd2UgZmFpbGVkIHRvIGxvZ2luICovCisgIENVUkxFX1RGVFBfTk9URk9VTkQsICAgICAgICAgICAvKiA2OCAtIGZpbGUgbm90IGZvdW5kIG9uIHNlcnZlciAqLworICBDVVJMRV9URlRQX1BFUk0sICAgICAgICAgICAgICAgLyogNjkgLSBwZXJtaXNzaW9uIHByb2JsZW0gb24gc2VydmVyICovCisgIENVUkxFX1JFTU9URV9ESVNLX0ZVTEwsICAgICAgICAvKiA3MCAtIG91dCBvZiBkaXNrIHNwYWNlIG9uIHNlcnZlciAqLworICBDVVJMRV9URlRQX0lMTEVHQUwsICAgICAgICAgICAgLyogNzEgLSBJbGxlZ2FsIFRGVFAgb3BlcmF0aW9uICovCisgIENVUkxFX1RGVFBfVU5LTk9XTklELCAgICAgICAgICAvKiA3MiAtIFVua25vd24gdHJhbnNmZXIgSUQgKi8KKyAgQ1VSTEVfUkVNT1RFX0ZJTEVfRVhJU1RTLCAgICAgIC8qIDczIC0gRmlsZSBhbHJlYWR5IGV4aXN0cyAqLworICBDVVJMRV9URlRQX05PU1VDSFVTRVIsICAgICAgICAgLyogNzQgLSBObyBzdWNoIHVzZXIgKi8KKyAgQ1VSTEVfQ09OVl9GQUlMRUQsICAgICAgICAgICAgIC8qIDc1IC0gY29udmVyc2lvbiBmYWlsZWQgKi8KKyAgQ1VSTEVfQ09OVl9SRVFELCAgICAgICAgICAgICAgIC8qIDc2IC0gY2FsbGVyIG11c3QgcmVnaXN0ZXIgY29udmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzIHVzaW5nIGN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE9QVF9DT05WX0ZST01fTkVUV09SS19GVU5DVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfQ09OVl9UT19ORVRXT1JLX0ZVTkNUSU9OLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxPUFRfQ09OVl9GUk9NX1VURjhfRlVOQ1RJT04gKi8KKyAgQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFLCAgICAgIC8qIDc3IC0gY291bGQgbm90IGxvYWQgQ0FDRVJUIGZpbGUsIG1pc3NpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHdyb25nIGZvcm1hdCAqLworICBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQsICAgLyogNzggLSByZW1vdGUgZmlsZSBub3QgZm91bmQgKi8KKyAgQ1VSTEVfU1NILCAgICAgICAgICAgICAgICAgICAgIC8qIDc5IC0gZXJyb3IgZnJvbSB0aGUgU1NIIGxheWVyLCBzb21ld2hhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpYyBzbyB0aGUgZXJyb3IgbWVzc2FnZSB3aWxsIGJlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmVzdCB3aGVuIHRoaXMgaGFzIGhhcHBlbmVkICovCisKKyAgQ1VSTEVfU1NMX1NIVVRET1dOX0ZBSUxFRCwgICAgIC8qIDgwIC0gRmFpbGVkIHRvIHNodXQgZG93biB0aGUgU1NMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uICovCisgIENVUkxFX0FHQUlOLCAgICAgICAgICAgICAgICAgICAvKiA4MSAtIHNvY2tldCBpcyBub3QgcmVhZHkgZm9yIHNlbmQvcmVjdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQgdGlsbCBpdCdzIHJlYWR5IGFuZCB0cnkgYWdhaW4gKEFkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiA3LjE4LjIpICovCisgIENVUkxFX1NTTF9DUkxfQkFERklMRSwgICAgICAgICAvKiA4MiAtIGNvdWxkIG5vdCBsb2FkIENSTCBmaWxlLCBtaXNzaW5nIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cm9uZyBmb3JtYXQgKEFkZGVkIGluIDcuMTkuMCkgKi8KKyAgQ1VSTEVfU1NMX0lTU1VFUl9FUlJPUiwgICAgICAgIC8qIDgzIC0gSXNzdWVyIGNoZWNrIGZhaWxlZC4gIChBZGRlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy4xOS4wKSAqLworICBDVVJMRV9GVFBfUFJFVF9GQUlMRUQsICAgICAgICAgLyogODQgLSBhIFBSRVQgY29tbWFuZCBmYWlsZWQgKi8KKyAgQ1VSTEVfUlRTUF9DU0VRX0VSUk9SLCAgICAgICAgIC8qIDg1IC0gbWlzbWF0Y2ggb2YgUlRTUCBDU2VxIG51bWJlcnMgKi8KKyAgQ1VSTEVfUlRTUF9TRVNTSU9OX0VSUk9SLCAgICAgIC8qIDg2IC0gbWlzbWF0Y2ggb2YgUlRTUCBTZXNzaW9uIElkcyAqLworICBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCwgICAgICAgLyogODcgLSB1bmFibGUgdG8gcGFyc2UgRlRQIGZpbGUgbGlzdCAqLworICBDVVJMRV9DSFVOS19GQUlMRUQsICAgICAgICAgICAgLyogODggLSBjaHVuayBjYWxsYmFjayByZXBvcnRlZCBlcnJvciAqLworICBDVVJMX0xBU1QgLyogbmV2ZXIgdXNlISAqLworfSBDVVJMY29kZTsKKworI2lmbmRlZiBDVVJMX05PX09MRElFUyAvKiBkZWZpbmUgdGhpcyB0byB0ZXN0IGlmIHlvdXIgYXBwIGJ1aWxkcyB3aXRoIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgb2Jzb2xldGUgc3R1ZmYgcmVtb3ZlZCEgKi8KKworLyogUHJldmlvdXNseSBvYnNvbGV0ZXMgZXJyb3IgY29kZXMgcmUtdXNlZCBpbiA3LjI0LjAgKi8KKyNkZWZpbmUgQ1VSTEVfT0JTT0xFVEUxMCBDVVJMRV9GVFBfQUNDRVBUX0ZBSUxFRAorI2RlZmluZSBDVVJMRV9PQlNPTEVURTEyIENVUkxFX0ZUUF9BQ0NFUFRfVElNRU9VVAorCisvKiAgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIG5hbWVzICovCisjZGVmaW5lIENVUkxPUFRfRU5DT0RJTkcgQ1VSTE9QVF9BQ0NFUFRfRU5DT0RJTkcKKworLyogVGhlIGZvbGxvd2luZyB3ZXJlIGFkZGVkIGluIDcuMjEuNSwgQXByaWwgMjAxMSAqLworI2RlZmluZSBDVVJMRV9VTktOT1dOX1RFTE5FVF9PUFRJT04gQ1VSTEVfVU5LTk9XTl9PUFRJT04KKworLyogVGhlIGZvbGxvd2luZyB3ZXJlIGFkZGVkIGluIDcuMTcuMSAqLworLyogVGhlc2UgYXJlIHNjaGVkdWxlZCB0byBkaXNhcHBlYXIgYnkgMjAwOSAqLworI2RlZmluZSBDVVJMRV9TU0xfUEVFUl9DRVJUSUZJQ0FURSBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT04KKworLyogVGhlIGZvbGxvd2luZyB3ZXJlIGFkZGVkIGluIDcuMTcuMCAqLworLyogVGhlc2UgYXJlIHNjaGVkdWxlZCB0byBkaXNhcHBlYXIgYnkgMjAwOSAqLworI2RlZmluZSBDVVJMRV9PQlNPTEVURSBDVVJMRV9PQlNPTEVURTUwIC8qIG5vIG9uZSBzaG91bGQgYmUgdXNpbmcgdGhpcyEgKi8KKyNkZWZpbmUgQ1VSTEVfQkFEX1BBU1NXT1JEX0VOVEVSRUQgQ1VSTEVfT0JTT0xFVEU0NgorI2RlZmluZSBDVVJMRV9CQURfQ0FMTElOR19PUkRFUiBDVVJMRV9PQlNPTEVURTQ0CisjZGVmaW5lIENVUkxFX0ZUUF9VU0VSX1BBU1NXT1JEX0lOQ09SUkVDVCBDVVJMRV9PQlNPTEVURTEwCisjZGVmaW5lIENVUkxFX0ZUUF9DQU5UX1JFQ09OTkVDVCBDVVJMRV9PQlNPTEVURTE2CisjZGVmaW5lIENVUkxFX0ZUUF9DT1VMRE5UX0dFVF9TSVpFIENVUkxFX09CU09MRVRFMzIKKyNkZWZpbmUgQ1VSTEVfRlRQX0NPVUxETlRfU0VUX0FTQ0lJIENVUkxFX09CU09MRVRFMjkKKyNkZWZpbmUgQ1VSTEVfRlRQX1dFSVJEX1VTRVJfUkVQTFkgQ1VSTEVfT0JTT0xFVEUxMgorI2RlZmluZSBDVVJMRV9GVFBfV1JJVEVfRVJST1IgQ1VSTEVfT0JTT0xFVEUyMAorI2RlZmluZSBDVVJMRV9MSUJSQVJZX05PVF9GT1VORCBDVVJMRV9PQlNPTEVURTQwCisjZGVmaW5lIENVUkxFX01BTEZPUk1BVF9VU0VSIENVUkxFX09CU09MRVRFMjQKKyNkZWZpbmUgQ1VSTEVfU0hBUkVfSU5fVVNFIENVUkxFX09CU09MRVRFNTcKKyNkZWZpbmUgQ1VSTEVfVVJMX01BTEZPUk1BVF9VU0VSIENVUkxFX05PVF9CVUlMVF9JTgorCisjZGVmaW5lIENVUkxFX0ZUUF9BQ0NFU1NfREVOSUVEIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVECisjZGVmaW5lIENVUkxFX0ZUUF9DT1VMRE5UX1NFVF9CSU5BUlkgQ1VSTEVfRlRQX0NPVUxETlRfU0VUX1RZUEUKKyNkZWZpbmUgQ1VSTEVfRlRQX1FVT1RFX0VSUk9SIENVUkxFX1FVT1RFX0VSUk9SCisjZGVmaW5lIENVUkxFX1RGVFBfRElTS0ZVTEwgQ1VSTEVfUkVNT1RFX0RJU0tfRlVMTAorI2RlZmluZSBDVVJMRV9URlRQX0VYSVNUUyBDVVJMRV9SRU1PVEVfRklMRV9FWElTVFMKKyNkZWZpbmUgQ1VSTEVfSFRUUF9SQU5HRV9FUlJPUiBDVVJMRV9SQU5HRV9FUlJPUgorI2RlZmluZSBDVVJMRV9GVFBfU1NMX0ZBSUxFRCBDVVJMRV9VU0VfU1NMX0ZBSUxFRAorCisvKiBUaGUgZm9sbG93aW5nIHdlcmUgYWRkZWQgZWFybGllciAqLworCisjZGVmaW5lIENVUkxFX09QRVJBVElPTl9USU1FT1VURUQgQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUCisKKyNkZWZpbmUgQ1VSTEVfSFRUUF9OT1RfRk9VTkQgQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUgorI2RlZmluZSBDVVJMRV9IVFRQX1BPUlRfRkFJTEVEIENVUkxFX0lOVEVSRkFDRV9GQUlMRUQKKyNkZWZpbmUgQ1VSTEVfRlRQX0NPVUxETlRfU1RPUl9GSUxFIENVUkxFX1VQTE9BRF9GQUlMRUQKKworI2RlZmluZSBDVVJMRV9GVFBfUEFSVElBTF9GSUxFIENVUkxFX1BBUlRJQUxfRklMRQorI2RlZmluZSBDVVJMRV9GVFBfQkFEX0RPV05MT0FEX1JFU1VNRSBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FCisKKy8qIFRoaXMgd2FzIHRoZSBlcnJvciBjb2RlIDUwIGluIDcuNy4zIGFuZCBhIGZldyBlYXJsaWVyIHZlcnNpb25zLCB0aGlzCisgICBpcyBubyBsb25nZXIgdXNlZCBieSBsaWJjdXJsIGJ1dCBpcyBpbnN0ZWFkICNkZWZpbmVkIGhlcmUgb25seSB0byBub3QKKyAgIG1ha2UgcHJvZ3JhbXMgYnJlYWsgKi8KKyNkZWZpbmUgQ1VSTEVfQUxSRUFEWV9DT01QTEVURSA5OTk5OQorCisjZW5kaWYgLyohQ1VSTF9OT19PTERJRVMqLworCisvKiBUaGlzIHByb3RvdHlwZSBhcHBsaWVzIHRvIGFsbCBjb252ZXJzaW9uIGNhbGxiYWNrcyAqLwordHlwZWRlZiBDVVJMY29kZSAoKmN1cmxfY29udl9jYWxsYmFjaykoY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKTsKKwordHlwZWRlZiBDVVJMY29kZSAoKmN1cmxfc3NsX2N0eF9jYWxsYmFjaykoQ1VSTCAqY3VybCwgICAgLyogZWFzeSBoYW5kbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNzbF9jdHgsIC8qIGFjdHVhbGx5IGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuU1NMIFNTTF9DVFggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJwdHIpOworCit0eXBlZGVmIGVudW0geworICBDVVJMUFJPWFlfSFRUUCA9IDAsICAgLyogYWRkZWQgaW4gNy4xMCwgbmV3IGluIDcuMTkuNCBkZWZhdWx0IGlzIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVCBIVFRQLzEuMSAqLworICBDVVJMUFJPWFlfSFRUUF8xXzAgPSAxLCAgIC8qIGFkZGVkIGluIDcuMTkuNCwgZm9yY2UgdG8gdXNlIENPTk5FQ1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQLzEuMCAgKi8KKyAgQ1VSTFBST1hZX1NPQ0tTNCA9IDQsIC8qIHN1cHBvcnQgYWRkZWQgaW4gNy4xNS4yLCBlbnVtIGV4aXN0ZWQgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gNy4xMCAqLworICBDVVJMUFJPWFlfU09DS1M1ID0gNSwgLyogYWRkZWQgaW4gNy4xMCAqLworICBDVVJMUFJPWFlfU09DS1M0QSA9IDYsIC8qIGFkZGVkIGluIDcuMTguMCAqLworICBDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FID0gNyAvKiBVc2UgdGhlIFNPQ0tTNSBwcm90b2NvbCBidXQgcGFzcyBhbG9uZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCBuYW1lIHJhdGhlciB0aGFuIHRoZSBJUCBhZGRyZXNzLiBhZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiA3LjE4LjAgKi8KK30gY3VybF9wcm94eXR5cGU7ICAvKiB0aGlzIGVudW0gd2FzIGFkZGVkIGluIDcuMTAgKi8KKworI2RlZmluZSBDVVJMQVVUSF9OT05FICAgICAgICAgMCAgICAgICAvKiBub3RoaW5nICovCisjZGVmaW5lIENVUkxBVVRIX0JBU0lDICAgICAgICAoMTw8MCkgIC8qIEJhc2ljIChkZWZhdWx0KSAqLworI2RlZmluZSBDVVJMQVVUSF9ESUdFU1QgICAgICAgKDE8PDEpICAvKiBEaWdlc3QgKi8KKyNkZWZpbmUgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFICgxPDwyKSAgLyogR1NTLU5lZ290aWF0ZSAqLworI2RlZmluZSBDVVJMQVVUSF9OVExNICAgICAgICAgKDE8PDMpICAvKiBOVExNICovCisjZGVmaW5lIENVUkxBVVRIX0RJR0VTVF9JRSAgICAoMTw8NCkgIC8qIERpZ2VzdCB3aXRoIElFIGZsYXZvdXIgKi8KKyNkZWZpbmUgQ1VSTEFVVEhfTlRMTV9XQiAgICAgICgxPDw1KSAgLyogTlRMTSBkZWxlZ2F0aW5nIHRvIHdpbmJpbmQgaGVscGVyICovCisjZGVmaW5lIENVUkxBVVRIX09OTFkgICAgICAgICAoMTw8MzEpIC8qIHVzZWQgdG9nZXRoZXIgd2l0aCBhIHNpbmdsZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIHRvIGZvcmNlIG5vIGF1dGggb3IganVzdCB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSB0eXBlICovCisjZGVmaW5lIENVUkxBVVRIX0FOWSAofkNVUkxBVVRIX0RJR0VTVF9JRSkgIC8qIGFsbCBmaW5lIHR5cGVzIHNldCAqLworI2RlZmluZSBDVVJMQVVUSF9BTllTQUZFICh+KENVUkxBVVRIX0JBU0lDfENVUkxBVVRIX0RJR0VTVF9JRSkpCisKKyNkZWZpbmUgQ1VSTFNTSF9BVVRIX0FOWSAgICAgICB+MCAgICAgLyogYWxsIHR5cGVzIHN1cHBvcnRlZCBieSB0aGUgc2VydmVyICovCisjZGVmaW5lIENVUkxTU0hfQVVUSF9OT05FICAgICAgMCAgICAgIC8qIG5vbmUgYWxsb3dlZCwgc2lsbHkgYnV0IGNvbXBsZXRlICovCisjZGVmaW5lIENVUkxTU0hfQVVUSF9QVUJMSUNLRVkgKDE8PDApIC8qIHB1YmxpYy9wcml2YXRlIGtleSBmaWxlcyAqLworI2RlZmluZSBDVVJMU1NIX0FVVEhfUEFTU1dPUkQgICgxPDwxKSAvKiBwYXNzd29yZCAqLworI2RlZmluZSBDVVJMU1NIX0FVVEhfSE9TVCAgICAgICgxPDwyKSAvKiBob3N0IGtleSBmaWxlcyAqLworI2RlZmluZSBDVVJMU1NIX0FVVEhfS0VZQk9BUkQgICgxPDwzKSAvKiBrZXlib2FyZCBpbnRlcmFjdGl2ZSAqLworI2RlZmluZSBDVVJMU1NIX0FVVEhfREVGQVVMVCBDVVJMU1NIX0FVVEhfQU5ZCisKKyNkZWZpbmUgQ1VSTEdTU0FQSV9ERUxFR0FUSU9OX05PTkUgICAgICAgIDAgICAgICAvKiBubyBkZWxlZ2F0aW9uIChkZWZhdWx0KSAqLworI2RlZmluZSBDVVJMR1NTQVBJX0RFTEVHQVRJT05fUE9MSUNZX0ZMQUcgKDE8PDApIC8qIGlmIHBlcm1pdHRlZCBieSBwb2xpY3kgKi8KKyNkZWZpbmUgQ1VSTEdTU0FQSV9ERUxFR0FUSU9OX0ZMQUcgICAgICAgICgxPDwxKSAvKiBkZWxlZ2F0ZSBhbHdheXMgKi8KKworI2RlZmluZSBDVVJMX0VSUk9SX1NJWkUgMjU2CisKK3N0cnVjdCBjdXJsX2toa2V5IHsKKyAgY29uc3QgY2hhciAqa2V5OyAvKiBwb2ludHMgdG8gYSB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5nIGVuY29kZWQgd2l0aCBiYXNlNjQKKyAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4gaXMgemVybywgb3RoZXJ3aXNlIHRvIHRoZSAicmF3IiBkYXRhICovCisgIHNpemVfdCBsZW47CisgIGVudW0gdHlwZSB7CisgICAgQ1VSTEtIVFlQRV9VTktOT1dOLAorICAgIENVUkxLSFRZUEVfUlNBMSwKKyAgICBDVVJMS0hUWVBFX1JTQSwKKyAgICBDVVJMS0hUWVBFX0RTUworICB9IGtleXR5cGU7Cit9OworCisvKiB0aGlzIGlzIHRoZSBzZXQgb2YgcmV0dXJuIHZhbHVlcyBleHBlY3RlZCBmcm9tIHRoZSBjdXJsX3NzaGtleWNhbGxiYWNrCisgICBjYWxsYmFjayAqLworZW51bSBjdXJsX2toc3RhdCB7CisgIENVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRSwKKyAgQ1VSTEtIU1RBVF9GSU5FLAorICBDVVJMS0hTVEFUX1JFSkVDVCwgLyogcmVqZWN0IHRoZSBjb25uZWN0aW9uLCByZXR1cm4gYW4gZXJyb3IgKi8KKyAgQ1VSTEtIU1RBVF9ERUZFUiwgIC8qIGRvIG5vdCBhY2NlcHQgaXQsIGJ1dCB3ZSBjYW4ndCBhbnN3ZXIgcmlnaHQgbm93IHNvCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGNhdXNlcyBhIENVUkxFX0RFRkVSIGVycm9yIGJ1dCBvdGhlcndpc2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIHdpbGwgYmUgbGVmdCBpbnRhY3QgZXRjICovCisgIENVUkxLSFNUQVRfTEFTVCAgICAvKiBub3QgZm9yIHVzZSwgb25seSBhIG1hcmtlciBmb3IgbGFzdC1pbi1saXN0ICovCit9OworCisvKiB0aGlzIGlzIHRoZSBzZXQgb2Ygc3RhdHVzIGNvZGVzIHBhc3MgaW4gdG8gdGhlIGNhbGxiYWNrICovCitlbnVtIGN1cmxfa2htYXRjaCB7CisgIENVUkxLSE1BVENIX09LLCAgICAgICAvKiBtYXRjaCAqLworICBDVVJMS0hNQVRDSF9NSVNNQVRDSCwgLyogaG9zdCBmb3VuZCwga2V5IG1pc21hdGNoISAqLworICBDVVJMS0hNQVRDSF9NSVNTSU5HLCAgLyogbm8gbWF0Y2hpbmcgaG9zdC9rZXkgZm91bmQgKi8KKyAgQ1VSTEtITUFUQ0hfTEFTVCAgICAgIC8qIG5vdCBmb3IgdXNlLCBvbmx5IGEgbWFya2VyIGZvciBsYXN0LWluLWxpc3QgKi8KK307CisKK3R5cGVkZWYgaW50CisgICgqY3VybF9zc2hrZXljYWxsYmFjaykgKENVUkwgKmVhc3ksICAgICAvKiBlYXN5IGhhbmRsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY3VybF9raGtleSAqa25vd25rZXksIC8qIGtub3duICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjdXJsX2toa2V5ICpmb3VuZGtleSwgLyogZm91bmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBjdXJsX2tobWF0Y2gsIC8qIGxpYmN1cmwncyB2aWV3IG9uIHRoZSBrZXlzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudHApOyAvKiBjdXN0b20gcG9pbnRlciBwYXNzZWQgZnJvbSBhcHAgKi8KKworLyogcGFyYW1ldGVyIGZvciB0aGUgQ1VSTE9QVF9VU0VfU1NMIG9wdGlvbiAqLwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSTFVTRVNTTF9OT05FLCAgICAvKiBkbyBub3QgYXR0ZW1wdCB0byB1c2UgU1NMICovCisgIENVUkxVU0VTU0xfVFJZLCAgICAgLyogdHJ5IHVzaW5nIFNTTCwgcHJvY2VlZCBhbnl3YXkgb3RoZXJ3aXNlICovCisgIENVUkxVU0VTU0xfQ09OVFJPTCwgLyogU1NMIGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uIG9yIGZhaWwgKi8KKyAgQ1VSTFVTRVNTTF9BTEwsICAgICAvKiBTU0wgZm9yIGFsbCBjb21tdW5pY2F0aW9uIG9yIGZhaWwgKi8KKyAgQ1VSTFVTRVNTTF9MQVNUICAgICAvKiBub3QgYW4gb3B0aW9uLCBuZXZlciB1c2UgKi8KK30gY3VybF91c2Vzc2w7CisKKy8qIERlZmluaXRpb24gb2YgYml0cyBmb3IgdGhlIENVUkxPUFRfU1NMX09QVElPTlMgYXJndW1lbnQ6ICovCisKKy8qIC0gQUxMT1dfQkVBU1QgdGVsbHMgbGliY3VybCB0byBhbGxvdyB0aGUgQkVBU1QgU1NMIHZ1bG5lcmFiaWxpdHkgaW4gdGhlCisgICBuYW1lIG9mIGltcHJvdmluZyBpbnRlcm9wZXJhYmlsaXR5IHdpdGggb2xkZXIgc2VydmVycy4gU29tZSBTU0wgbGlicmFyaWVzCisgICBoYXZlIGludHJvZHVjZWQgd29yay1hcm91bmRzIGZvciB0aGlzIGZsYXcgYnV0IHRob3NlIHdvcmstYXJvdW5kcyBzb21ldGltZXMKKyAgIG1ha2UgdGhlIFNTTCBjb21tdW5pY2F0aW9uIGZhaWwuIFRvIHJlZ2FpbiBmdW5jdGlvbmFsaXR5IHdpdGggdGhvc2UgYnJva2VuCisgICBzZXJ2ZXJzLCBhIHVzZXIgY2FuIHRoaXMgd2F5IGFsbG93IHRoZSB2dWxuZXJhYmlsaXR5IGJhY2suICovCisjZGVmaW5lIENVUkxTU0xPUFRfQUxMT1dfQkVBU1QgKDE8PDApCisKKyNpZm5kZWYgQ1VSTF9OT19PTERJRVMgLyogZGVmaW5lIHRoaXMgdG8gdGVzdCBpZiB5b3VyIGFwcCBidWlsZHMgd2l0aCBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9ic29sZXRlIHN0dWZmIHJlbW92ZWQhICovCisKKy8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgbmFtZXMgKi8KKy8qIFRoZXNlIGFyZSBzY2hlZHVsZWQgdG8gZGlzYXBwZWFyIGJ5IDIwMDkgKi8KKworI2RlZmluZSBDVVJMRlRQU1NMX05PTkUgQ1VSTFVTRVNTTF9OT05FCisjZGVmaW5lIENVUkxGVFBTU0xfVFJZIENVUkxVU0VTU0xfVFJZCisjZGVmaW5lIENVUkxGVFBTU0xfQ09OVFJPTCBDVVJMVVNFU1NMX0NPTlRST0wKKyNkZWZpbmUgQ1VSTEZUUFNTTF9BTEwgQ1VSTFVTRVNTTF9BTEwKKyNkZWZpbmUgQ1VSTEZUUFNTTF9MQVNUIENVUkxVU0VTU0xfTEFTVAorI2RlZmluZSBjdXJsX2Z0cHNzbCBjdXJsX3VzZXNzbAorI2VuZGlmIC8qIUNVUkxfTk9fT0xESUVTKi8KKworLyogcGFyYW1ldGVyIGZvciB0aGUgQ1VSTE9QVF9GVFBfU1NMX0NDQyBvcHRpb24gKi8KK3R5cGVkZWYgZW51bSB7CisgIENVUkxGVFBTU0xfQ0NDX05PTkUsICAgIC8qIGRvIG5vdCBzZW5kIENDQyAqLworICBDVVJMRlRQU1NMX0NDQ19QQVNTSVZFLCAvKiBMZXQgdGhlIHNlcnZlciBpbml0aWF0ZSB0aGUgc2h1dGRvd24gKi8KKyAgQ1VSTEZUUFNTTF9DQ0NfQUNUSVZFLCAgLyogSW5pdGlhdGUgdGhlIHNodXRkb3duICovCisgIENVUkxGVFBTU0xfQ0NDX0xBU1QgICAgIC8qIG5vdCBhbiBvcHRpb24sIG5ldmVyIHVzZSAqLworfSBjdXJsX2Z0cGNjYzsKKworLyogcGFyYW1ldGVyIGZvciB0aGUgQ1VSTE9QVF9GVFBTU0xBVVRIIG9wdGlvbiAqLwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSTEZUUEFVVEhfREVGQVVMVCwgLyogbGV0IGxpYmN1cmwgZGVjaWRlICovCisgIENVUkxGVFBBVVRIX1NTTCwgICAgIC8qIHVzZSAiQVVUSCBTU0wiICovCisgIENVUkxGVFBBVVRIX1RMUywgICAgIC8qIHVzZSAiQVVUSCBUTFMiICovCisgIENVUkxGVFBBVVRIX0xBU1QgLyogbm90IGFuIG9wdGlvbiwgbmV2ZXIgdXNlICovCit9IGN1cmxfZnRwYXV0aDsKKworLyogcGFyYW1ldGVyIGZvciB0aGUgQ1VSTE9QVF9GVFBfQ1JFQVRFX01JU1NJTkdfRElSUyBvcHRpb24gKi8KK3R5cGVkZWYgZW51bSB7CisgIENVUkxGVFBfQ1JFQVRFX0RJUl9OT05FLCAgLyogZG8gTk9UIGNyZWF0ZSBtaXNzaW5nIGRpcnMhICovCisgIENVUkxGVFBfQ1JFQVRFX0RJUiwgICAgICAgLyogKEZUUC9TRlRQKSBpZiBDV0QgZmFpbHMsIHRyeSBNS0QgYW5kIHRoZW4gQ1dECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdhaW4gaWYgTUtEIHN1Y2NlZWRlZCwgZm9yIFNGVFAgdGhpcyBkb2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltaWxhciBtYWdpYyAqLworICBDVVJMRlRQX0NSRUFURV9ESVJfUkVUUlksIC8qIChGVFAgb25seSkgaWYgQ1dEIGZhaWxzLCB0cnkgTUtEIGFuZCB0aGVuIENXRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnYWluIGV2ZW4gaWYgTUtEIGZhaWxlZCEgKi8KKyAgQ1VSTEZUUF9DUkVBVEVfRElSX0xBU1QgICAvKiBub3QgYW4gb3B0aW9uLCBuZXZlciB1c2UgKi8KK30gY3VybF9mdHBjcmVhdGVkaXI7CisKKy8qIHBhcmFtZXRlciBmb3IgdGhlIENVUkxPUFRfRlRQX0ZJTEVNRVRIT0Qgb3B0aW9uICovCit0eXBlZGVmIGVudW0geworICBDVVJMRlRQTUVUSE9EX0RFRkFVTFQsICAgLyogbGV0IGxpYmN1cmwgcGljayAqLworICBDVVJMRlRQTUVUSE9EX01VTFRJQ1dELCAgLyogc2luZ2xlIENXRCBvcGVyYXRpb24gZm9yIGVhY2ggcGF0aCBwYXJ0ICovCisgIENVUkxGVFBNRVRIT0RfTk9DV0QsICAgICAvKiBubyBDV0QgYXQgYWxsICovCisgIENVUkxGVFBNRVRIT0RfU0lOR0xFQ1dELCAvKiBvbmUgQ1dEIHRvIGZ1bGwgZGlyLCB0aGVuIHdvcmsgb24gZmlsZSAqLworICBDVVJMRlRQTUVUSE9EX0xBU1QgICAgICAgLyogbm90IGFuIG9wdGlvbiwgbmV2ZXIgdXNlICovCit9IGN1cmxfZnRwbWV0aG9kOworCisvKiBDVVJMUFJPVE9fIGRlZmluZXMgYXJlIGZvciB0aGUgQ1VSTE9QVF8qUFJPVE9DT0xTIG9wdGlvbnMgKi8KKyNkZWZpbmUgQ1VSTFBST1RPX0hUVFAgICAoMTw8MCkKKyNkZWZpbmUgQ1VSTFBST1RPX0hUVFBTICAoMTw8MSkKKyNkZWZpbmUgQ1VSTFBST1RPX0ZUUCAgICAoMTw8MikKKyNkZWZpbmUgQ1VSTFBST1RPX0ZUUFMgICAoMTw8MykKKyNkZWZpbmUgQ1VSTFBST1RPX1NDUCAgICAoMTw8NCkKKyNkZWZpbmUgQ1VSTFBST1RPX1NGVFAgICAoMTw8NSkKKyNkZWZpbmUgQ1VSTFBST1RPX1RFTE5FVCAoMTw8NikKKyNkZWZpbmUgQ1VSTFBST1RPX0xEQVAgICAoMTw8NykKKyNkZWZpbmUgQ1VSTFBST1RPX0xEQVBTICAoMTw8OCkKKyNkZWZpbmUgQ1VSTFBST1RPX0RJQ1QgICAoMTw8OSkKKyNkZWZpbmUgQ1VSTFBST1RPX0ZJTEUgICAoMTw8MTApCisjZGVmaW5lIENVUkxQUk9UT19URlRQICAgKDE8PDExKQorI2RlZmluZSBDVVJMUFJPVE9fSU1BUCAgICgxPDwxMikKKyNkZWZpbmUgQ1VSTFBST1RPX0lNQVBTICAoMTw8MTMpCisjZGVmaW5lIENVUkxQUk9UT19QT1AzICAgKDE8PDE0KQorI2RlZmluZSBDVVJMUFJPVE9fUE9QM1MgICgxPDwxNSkKKyNkZWZpbmUgQ1VSTFBST1RPX1NNVFAgICAoMTw8MTYpCisjZGVmaW5lIENVUkxQUk9UT19TTVRQUyAgKDE8PDE3KQorI2RlZmluZSBDVVJMUFJPVE9fUlRTUCAgICgxPDwxOCkKKyNkZWZpbmUgQ1VSTFBST1RPX1JUTVAgICAoMTw8MTkpCisjZGVmaW5lIENVUkxQUk9UT19SVE1QVCAgKDE8PDIwKQorI2RlZmluZSBDVVJMUFJPVE9fUlRNUEUgICgxPDwyMSkKKyNkZWZpbmUgQ1VSTFBST1RPX1JUTVBURSAoMTw8MjIpCisjZGVmaW5lIENVUkxQUk9UT19SVE1QUyAgKDE8PDIzKQorI2RlZmluZSBDVVJMUFJPVE9fUlRNUFRTICgxPDwyNCkKKyNkZWZpbmUgQ1VSTFBST1RPX0dPUEhFUiAoMTw8MjUpCisjZGVmaW5lIENVUkxQUk9UT19BTEwgICAgKH4wKSAvKiBlbmFibGUgZXZlcnl0aGluZyAqLworCisvKiBsb25nIG1heSBiZSAzMiBvciA2NCBiaXRzLCBidXQgd2Ugc2hvdWxkIG5ldmVyIGRlcGVuZCBvbiBhbnl0aGluZyBlbHNlCisgICBidXQgMzIgKi8KKyNkZWZpbmUgQ1VSTE9QVFRZUEVfTE9ORyAgICAgICAgICAwCisjZGVmaW5lIENVUkxPUFRUWVBFX09CSkVDVFBPSU5UICAgMTAwMDAKKyNkZWZpbmUgQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCAyMDAwMAorI2RlZmluZSBDVVJMT1BUVFlQRV9PRkZfVCAgICAgICAgIDMwMDAwCisKKy8qIG5hbWUgaXMgdXBwZXJjYXNlIENVUkxPUFRfPG5hbWU+LAorICAgdHlwZSBpcyBvbmUgb2YgdGhlIGRlZmluZWQgQ1VSTE9QVFRZUEVfPHR5cGU+CisgICBudW1iZXIgaXMgdW5pcXVlIGlkZW50aWZpZXIgKi8KKyNpZmRlZiBDSU5JVAorI3VuZGVmIENJTklUCisjZW5kaWYKKworI2lmZGVmIENVUkxfSVNPQ1BQCisjZGVmaW5lIENJTklUKG5hLHQsbnUpIENVUkxPUFRfICMjIG5hID0gQ1VSTE9QVFRZUEVfICMjIHQgKyBudQorI2Vsc2UKKy8qIFRoZSBtYWNybyAiIyMiIGlzIElTTyBDLCB3ZSBhc3N1bWUgcHJlLUlTTyBDIGRvZXNuJ3Qgc3VwcG9ydCBpdC4gKi8KKyNkZWZpbmUgTE9ORyAgICAgICAgICBDVVJMT1BUVFlQRV9MT05HCisjZGVmaW5lIE9CSkVDVFBPSU5UICAgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQKKyNkZWZpbmUgRlVOQ1RJT05QT0lOVCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5UCisjZGVmaW5lIE9GRl9UICAgICAgICAgQ1VSTE9QVFRZUEVfT0ZGX1QKKyNkZWZpbmUgQ0lOSVQobmFtZSx0eXBlLG51bWJlcikgQ1VSTE9QVF8vKiovbmFtZSA9IHR5cGUgKyBudW1iZXIKKyNlbmRpZgorCisvKgorICogVGhpcyBtYWNyby1tYW5pYSBiZWxvdyBzZXR1cHMgdGhlIENVUkxPUFRfW3doYXRdIGVudW0sIHRvIGJlIHVzZWQgd2l0aAorICogY3VybF9lYXN5X3NldG9wdCgpLiBUaGUgZmlyc3QgYXJndW1lbnQgaW4gdGhlIENJTklUKCkgbWFjcm8gaXMgdGhlIFt3aGF0XQorICogd29yZC4KKyAqLworCit0eXBlZGVmIGVudW0geworICAvKiBUaGlzIGlzIHRoZSBGSUxFICogb3Igdm9pZCAqIHRoZSByZWd1bGFyIG91dHB1dCBzaG91bGQgYmUgd3JpdHRlbiB0by4gKi8KKyAgQ0lOSVQoRklMRSwgT0JKRUNUUE9JTlQsIDEpLAorCisgIC8qIFRoZSBmdWxsIFVSTCB0byBnZXQvcHV0ICovCisgIENJTklUKFVSTCwgIE9CSkVDVFBPSU5ULCAyKSwKKworICAvKiBQb3J0IG51bWJlciB0byBjb25uZWN0IHRvLCBpZiBvdGhlciB0aGFuIGRlZmF1bHQuICovCisgIENJTklUKFBPUlQsIExPTkcsIDMpLAorCisgIC8qIE5hbWUgb2YgcHJveHkgdG8gdXNlLiAqLworICBDSU5JVChQUk9YWSwgT0JKRUNUUE9JTlQsIDQpLAorCisgIC8qICJuYW1lOnBhc3N3b3JkIiB0byB1c2Ugd2hlbiBmZXRjaGluZy4gKi8KKyAgQ0lOSVQoVVNFUlBXRCwgT0JKRUNUUE9JTlQsIDUpLAorCisgIC8qICJuYW1lOnBhc3N3b3JkIiB0byB1c2Ugd2l0aCBwcm94eS4gKi8KKyAgQ0lOSVQoUFJPWFlVU0VSUFdELCBPQkpFQ1RQT0lOVCwgNiksCisKKyAgLyogUmFuZ2UgdG8gZ2V0LCBzcGVjaWZpZWQgYXMgYW4gQVNDSUkgc3RyaW5nLiAqLworICBDSU5JVChSQU5HRSwgT0JKRUNUUE9JTlQsIDcpLAorCisgIC8qIG5vdCB1c2VkICovCisKKyAgLyogU3BlY2lmaWVkIGZpbGUgc3RyZWFtIHRvIHVwbG9hZCBmcm9tICh1c2UgYXMgaW5wdXQpOiAqLworICBDSU5JVChJTkZJTEUsIE9CSkVDVFBPSU5ULCA5KSwKKworICAvKiBCdWZmZXIgdG8gcmVjZWl2ZSBlcnJvciBtZXNzYWdlcyBpbiwgbXVzdCBiZSBhdCBsZWFzdCBDVVJMX0VSUk9SX1NJWkUKKyAgICogYnl0ZXMgYmlnLiBJZiB0aGlzIGlzIG5vdCB1c2VkLCBlcnJvciBtZXNzYWdlcyBnbyB0byBzdGRlcnIgaW5zdGVhZDogKi8KKyAgQ0lOSVQoRVJST1JCVUZGRVIsIE9CSkVDVFBPSU5ULCAxMCksCisKKyAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBzdG9yZSB0aGUgb3V0cHV0IChpbnN0ZWFkIG9mIGZ3cml0ZSkuIFRoZQorICAgKiBwYXJhbWV0ZXJzIHdpbGwgdXNlIGZ3cml0ZSgpIHN5bnRheCwgbWFrZSBzdXJlIHRvIGZvbGxvdyB0aGVtLiAqLworICBDSU5JVChXUklURUZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxMSksCisKKyAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byByZWFkIHRoZSBpbnB1dCAoaW5zdGVhZCBvZiBmcmVhZCkuIFRoZQorICAgKiBwYXJhbWV0ZXJzIHdpbGwgdXNlIGZyZWFkKCkgc3ludGF4LCBtYWtlIHN1cmUgdG8gZm9sbG93IHRoZW0uICovCisgIENJTklUKFJFQURGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTIpLAorCisgIC8qIFRpbWUtb3V0IHRoZSByZWFkIG9wZXJhdGlvbiBhZnRlciB0aGlzIGFtb3VudCBvZiBzZWNvbmRzICovCisgIENJTklUKFRJTUVPVVQsIExPTkcsIDEzKSwKKworICAvKiBJZiB0aGUgQ1VSTE9QVF9JTkZJTEUgaXMgdXNlZCwgdGhpcyBjYW4gYmUgdXNlZCB0byBpbmZvcm0gbGliY3VybCBhYm91dAorICAgKiBob3cgbGFyZ2UgdGhlIGZpbGUgYmVpbmcgc2VudCByZWFsbHkgaXMuIFRoYXQgYWxsb3dzIGJldHRlciBlcnJvcgorICAgKiBjaGVja2luZyBhbmQgYmV0dGVyIHZlcmlmaWVzIHRoYXQgdGhlIHVwbG9hZCB3YXMgc3VjY2Vzc2Z1bC4gLTEgbWVhbnMKKyAgICogdW5rbm93biBzaXplLgorICAgKgorICAgKiBGb3IgbGFyZ2UgZmlsZSBzdXBwb3J0LCB0aGVyZSBpcyBhbHNvIGEgX0xBUkdFIHZlcnNpb24gb2YgdGhlIGtleQorICAgKiB3aGljaCB0YWtlcyBhbiBvZmZfdCB0eXBlLCBhbGxvd2luZyBwbGF0Zm9ybXMgd2l0aCBsYXJnZXIgb2ZmX3QKKyAgICogc2l6ZXMgdG8gaGFuZGxlIGxhcmdlciBmaWxlcy4gIFNlZSBiZWxvdyBmb3IgSU5GSUxFU0laRV9MQVJHRS4KKyAgICovCisgIENJTklUKElORklMRVNJWkUsIExPTkcsIDE0KSwKKworICAvKiBQT1NUIHN0YXRpYyBpbnB1dCBmaWVsZHMuICovCisgIENJTklUKFBPU1RGSUVMRFMsIE9CSkVDVFBPSU5ULCAxNSksCisKKyAgLyogU2V0IHRoZSByZWZlcnJlciBwYWdlIChuZWVkZWQgYnkgc29tZSBDR0lzKSAqLworICBDSU5JVChSRUZFUkVSLCBPQkpFQ1RQT0lOVCwgMTYpLAorCisgIC8qIFNldCB0aGUgRlRQIFBPUlQgc3RyaW5nIChpbnRlcmZhY2UgbmFtZSwgbmFtZWQgb3IgbnVtZXJpY2FsIElQIGFkZHJlc3MpCisgICAgIFVzZSBpLmUgJy0nIHRvIHVzZSBkZWZhdWx0IGFkZHJlc3MuICovCisgIENJTklUKEZUUFBPUlQsIE9CSkVDVFBPSU5ULCAxNyksCisKKyAgLyogU2V0IHRoZSBVc2VyLUFnZW50IHN0cmluZyAoZXhhbWluZWQgYnkgc29tZSBDR0lzKSAqLworICBDSU5JVChVU0VSQUdFTlQsIE9CSkVDVFBPSU5ULCAxOCksCisKKyAgLyogSWYgdGhlIGRvd25sb2FkIHJlY2VpdmVzIGxlc3MgdGhhbiAibG93IHNwZWVkIGxpbWl0IiBieXRlcy9zZWNvbmQKKyAgICogZHVyaW5nICJsb3cgc3BlZWQgdGltZSIgc2Vjb25kcywgdGhlIG9wZXJhdGlvbnMgaXMgYWJvcnRlZC4KKyAgICogWW91IGNvdWxkIGkuZSBpZiB5b3UgaGF2ZSBhIHByZXR0eSBoaWdoIHNwZWVkIGNvbm5lY3Rpb24sIGFib3J0IGlmCisgICAqIGl0IGlzIGxlc3MgdGhhbiAyMDAwIGJ5dGVzL3NlYyBkdXJpbmcgMjAgc2Vjb25kcy4KKyAgICovCisKKyAgLyogU2V0IHRoZSAibG93IHNwZWVkIGxpbWl0IiAqLworICBDSU5JVChMT1dfU1BFRURfTElNSVQsIExPTkcsIDE5KSwKKworICAvKiBTZXQgdGhlICJsb3cgc3BlZWQgdGltZSIgKi8KKyAgQ0lOSVQoTE9XX1NQRUVEX1RJTUUsIExPTkcsIDIwKSwKKworICAvKiBTZXQgdGhlIGNvbnRpbnVhdGlvbiBvZmZzZXQuCisgICAqCisgICAqIE5vdGUgdGhlcmUgaXMgYWxzbyBhIF9MQVJHRSB2ZXJzaW9uIG9mIHRoaXMga2V5IHdoaWNoIHVzZXMKKyAgICogb2ZmX3QgdHlwZXMsIGFsbG93aW5nIGZvciBsYXJnZSBmaWxlIG9mZnNldHMgb24gcGxhdGZvcm1zIHdoaWNoCisgICAqIHVzZSBsYXJnZXItdGhhbi0zMi1iaXQgb2ZmX3Qncy4gIExvb2sgYmVsb3cgZm9yIFJFU1VNRV9GUk9NX0xBUkdFLgorICAgKi8KKyAgQ0lOSVQoUkVTVU1FX0ZST00sIExPTkcsIDIxKSwKKworICAvKiBTZXQgY29va2llIGluIHJlcXVlc3Q6ICovCisgIENJTklUKENPT0tJRSwgT0JKRUNUUE9JTlQsIDIyKSwKKworICAvKiBUaGlzIHBvaW50cyB0byBhIGxpbmtlZCBsaXN0IG9mIGhlYWRlcnMsIHN0cnVjdCBjdXJsX3NsaXN0IGtpbmQgKi8KKyAgQ0lOSVQoSFRUUEhFQURFUiwgT0JKRUNUUE9JTlQsIDIzKSwKKworICAvKiBUaGlzIHBvaW50cyB0byBhIGxpbmtlZCBsaXN0IG9mIHBvc3QgZW50cmllcywgc3RydWN0IGN1cmxfaHR0cHBvc3QgKi8KKyAgQ0lOSVQoSFRUUFBPU1QsIE9CSkVDVFBPSU5ULCAyNCksCisKKyAgLyogbmFtZSBvZiB0aGUgZmlsZSBrZWVwaW5nIHlvdXIgcHJpdmF0ZSBTU0wtY2VydGlmaWNhdGUgKi8KKyAgQ0lOSVQoU1NMQ0VSVCwgT0JKRUNUUE9JTlQsIDI1KSwKKworICAvKiBwYXNzd29yZCBmb3IgdGhlIFNTTCBvciBTU0ggcHJpdmF0ZSBrZXkgKi8KKyAgQ0lOSVQoS0VZUEFTU1dELCBPQkpFQ1RQT0lOVCwgMjYpLAorCisgIC8qIHNlbmQgVFlQRSBwYXJhbWV0ZXI/ICovCisgIENJTklUKENSTEYsIExPTkcsIDI3KSwKKworICAvKiBzZW5kIGxpbmtlZC1saXN0IG9mIFFVT1RFIGNvbW1hbmRzICovCisgIENJTklUKFFVT1RFLCBPQkpFQ1RQT0lOVCwgMjgpLAorCisgIC8qIHNlbmQgRklMRSAqIG9yIHZvaWQgKiB0byBzdG9yZSBoZWFkZXJzIHRvLCBpZiB5b3UgdXNlIGEgY2FsbGJhY2sgaXQKKyAgICAgaXMgc2ltcGx5IHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgdW5tb2RpZmllZCAqLworICBDSU5JVChXUklURUhFQURFUiwgT0JKRUNUUE9JTlQsIDI5KSwKKworICAvKiBwb2ludCB0byBhIGZpbGUgdG8gcmVhZCB0aGUgaW5pdGlhbCBjb29raWVzIGZyb20sIGFsc28gZW5hYmxlcworICAgICAiY29va2llIGF3YXJlbmVzcyIgKi8KKyAgQ0lOSVQoQ09PS0lFRklMRSwgT0JKRUNUUE9JTlQsIDMxKSwKKworICAvKiBXaGF0IHZlcnNpb24gdG8gc3BlY2lmaWNhbGx5IHRyeSB0byB1c2UuCisgICAgIFNlZSBDVVJMX1NTTFZFUlNJT04gZGVmaW5lcyBiZWxvdy4gKi8KKyAgQ0lOSVQoU1NMVkVSU0lPTiwgTE9ORywgMzIpLAorCisgIC8qIFdoYXQga2luZCBvZiBIVFRQIHRpbWUgY29uZGl0aW9uIHRvIHVzZSwgc2VlIGRlZmluZXMgKi8KKyAgQ0lOSVQoVElNRUNPTkRJVElPTiwgTE9ORywgMzMpLAorCisgIC8qIFRpbWUgdG8gdXNlIHdpdGggdGhlIGFib3ZlIGNvbmRpdGlvbi4gU3BlY2lmaWVkIGluIG51bWJlciBvZiBzZWNvbmRzCisgICAgIHNpbmNlIDEgSmFuIDE5NzAgKi8KKyAgQ0lOSVQoVElNRVZBTFVFLCBMT05HLCAzNCksCisKKyAgLyogMzUgPSBPQlNPTEVURSAqLworCisgIC8qIEN1c3RvbSByZXF1ZXN0LCBmb3IgY3VzdG9taXppbmcgdGhlIGdldCBjb21tYW5kIGxpa2UKKyAgICAgSFRUUDogREVMRVRFLCBUUkFDRSBhbmQgb3RoZXJzCisgICAgIEZUUDogdG8gdXNlIGEgZGlmZmVyZW50IGxpc3QgY29tbWFuZAorICAgICAqLworICBDSU5JVChDVVNUT01SRVFVRVNULCBPQkpFQ1RQT0lOVCwgMzYpLAorCisgIC8qIEhUVFAgcmVxdWVzdCwgZm9yIG9kZCBjb21tYW5kcyBsaWtlIERFTEVURSwgVFJBQ0UgYW5kIG90aGVycyAqLworICBDSU5JVChTVERFUlIsIE9CSkVDVFBPSU5ULCAzNyksCisKKyAgLyogMzggaXMgbm90IHVzZWQgKi8KKworICAvKiBzZW5kIGxpbmtlZC1saXN0IG9mIHBvc3QtdHJhbnNmZXIgUVVPVEUgY29tbWFuZHMgKi8KKyAgQ0lOSVQoUE9TVFFVT1RFLCBPQkpFQ1RQT0lOVCwgMzkpLAorCisgIENJTklUKFdSSVRFSU5GTywgT0JKRUNUUE9JTlQsIDQwKSwgLyogREVQUkVDQVRFRCwgZG8gbm90IHVzZSEgKi8KKworICBDSU5JVChWRVJCT1NFLCBMT05HLCA0MSksICAgICAgLyogdGFsayBhIGxvdCAqLworICBDSU5JVChIRUFERVIsIExPTkcsIDQyKSwgICAgICAgLyogdGhyb3cgdGhlIGhlYWRlciBvdXQgdG9vICovCisgIENJTklUKE5PUFJPR1JFU1MsIExPTkcsIDQzKSwgICAvKiBzaHV0IG9mZiB0aGUgcHJvZ3Jlc3MgbWV0ZXIgKi8KKyAgQ0lOSVQoTk9CT0RZLCBMT05HLCA0NCksICAgICAgIC8qIHVzZSBIRUFEIHRvIGdldCBodHRwIGRvY3VtZW50ICovCisgIENJTklUKEZBSUxPTkVSUk9SLCBMT05HLCA0NSksICAvKiBubyBvdXRwdXQgb24gaHR0cCBlcnJvciBjb2RlcyA+PSAzMDAgKi8KKyAgQ0lOSVQoVVBMT0FELCBMT05HLCA0NiksICAgICAgIC8qIHRoaXMgaXMgYW4gdXBsb2FkICovCisgIENJTklUKFBPU1QsIExPTkcsIDQ3KSwgICAgICAgICAvKiBIVFRQIFBPU1QgbWV0aG9kICovCisgIENJTklUKERJUkxJU1RPTkxZLCBMT05HLCA0OCksICAvKiBiYXJlIG5hbWVzIHdoZW4gbGlzdGluZyBkaXJlY3RvcmllcyAqLworCisgIENJTklUKEFQUEVORCwgTE9ORywgNTApLCAgICAgICAvKiBBcHBlbmQgaW5zdGVhZCBvZiBvdmVyd3JpdGUgb24gdXBsb2FkISAqLworCisgIC8qIFNwZWNpZnkgd2hldGhlciB0byByZWFkIHRoZSB1c2VyK3Bhc3N3b3JkIGZyb20gdGhlIC5uZXRyYyBvciB0aGUgVVJMLgorICAgKiBUaGlzIG11c3QgYmUgb25lIG9mIHRoZSBDVVJMX05FVFJDXyogZW51bXMgYmVsb3cuICovCisgIENJTklUKE5FVFJDLCBMT05HLCA1MSksCisKKyAgQ0lOSVQoRk9MTE9XTE9DQVRJT04sIExPTkcsIDUyKSwgIC8qIHVzZSBMb2NhdGlvbjogTHVrZSEgKi8KKworICBDSU5JVChUUkFOU0ZFUlRFWFQsIExPTkcsIDUzKSwgLyogdHJhbnNmZXIgZGF0YSBpbiB0ZXh0L0FTQ0lJIGZvcm1hdCAqLworICBDSU5JVChQVVQsIExPTkcsIDU0KSwgICAgICAgICAgLyogSFRUUCBQVVQgKi8KKworICAvKiA1NSA9IE9CU09MRVRFICovCisKKyAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIHRoZSBpbnRlcm5hbCBwcm9ncmVzcyBkaXNwbGF5CisgICAqIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBkZWZpbmVkIGFzIHRoZSBjdXJsX3Byb2dyZXNzX2NhbGxiYWNrCisgICAqIHByb3RvdHlwZSBkZWZpbmVzLiAqLworICBDSU5JVChQUk9HUkVTU0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCA1NiksCisKKyAgLyogRGF0YSBwYXNzZWQgdG8gdGhlIHByb2dyZXNzIGNhbGxiYWNrICovCisgIENJTklUKFBST0dSRVNTREFUQSwgT0JKRUNUUE9JTlQsIDU3KSwKKworICAvKiBXZSB3YW50IHRoZSByZWZlcnJlciBmaWVsZCBzZXQgYXV0b21hdGljYWxseSB3aGVuIGZvbGxvd2luZyBsb2NhdGlvbnMgKi8KKyAgQ0lOSVQoQVVUT1JFRkVSRVIsIExPTkcsIDU4KSwKKworICAvKiBQb3J0IG9mIHRoZSBwcm94eSwgY2FuIGJlIHNldCBpbiB0aGUgcHJveHkgc3RyaW5nIGFzIHdlbGwgd2l0aDoKKyAgICAgIltob3N0XTpbcG9ydF0iICovCisgIENJTklUKFBST1hZUE9SVCwgTE9ORywgNTkpLAorCisgIC8qIHNpemUgb2YgdGhlIFBPU1QgaW5wdXQgZGF0YSwgaWYgc3RybGVuKCkgaXMgbm90IGdvb2QgdG8gdXNlICovCisgIENJTklUKFBPU1RGSUVMRFNJWkUsIExPTkcsIDYwKSwKKworICAvKiB0dW5uZWwgbm9uLWh0dHAgb3BlcmF0aW9ucyB0aHJvdWdoIGEgSFRUUCBwcm94eSAqLworICBDSU5JVChIVFRQUFJPWFlUVU5ORUwsIExPTkcsIDYxKSwKKworICAvKiBTZXQgdGhlIGludGVyZmFjZSBzdHJpbmcgdG8gdXNlIGFzIG91dGdvaW5nIG5ldHdvcmsgaW50ZXJmYWNlICovCisgIENJTklUKElOVEVSRkFDRSwgT0JKRUNUUE9JTlQsIDYyKSwKKworICAvKiBTZXQgdGhlIGtyYjQvNSBzZWN1cml0eSBsZXZlbCwgdGhpcyBhbHNvIGVuYWJsZXMga3JiNC81IGF3YXJlbmVzcy4gIFRoaXMKKyAgICogaXMgYSBzdHJpbmcsICdjbGVhcicsICdzYWZlJywgJ2NvbmZpZGVudGlhbCcgb3IgJ3ByaXZhdGUnLiAgSWYgdGhlIHN0cmluZworICAgKiBpcyBzZXQgYnV0IGRvZXNuJ3QgbWF0Y2ggb25lIG9mIHRoZXNlLCAncHJpdmF0ZScgd2lsbCBiZSB1c2VkLiAgKi8KKyAgQ0lOSVQoS1JCTEVWRUwsIE9CSkVDVFBPSU5ULCA2MyksCisKKyAgLyogU2V0IGlmIHdlIHNob3VsZCB2ZXJpZnkgdGhlIHBlZXIgaW4gc3NsIGhhbmRzaGFrZSwgc2V0IDEgdG8gdmVyaWZ5LiAqLworICBDSU5JVChTU0xfVkVSSUZZUEVFUiwgTE9ORywgNjQpLAorCisgIC8qIFRoZSBDQXBhdGggb3IgQ0FmaWxlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHBlZXIgY2VydGlmaWNhdGUKKyAgICAgdGhpcyBvcHRpb24gaXMgdXNlZCBvbmx5IGlmIFNTTF9WRVJJRllQRUVSIGlzIHRydWUgKi8KKyAgQ0lOSVQoQ0FJTkZPLCBPQkpFQ1RQT0lOVCwgNjUpLAorCisgIC8qIDY2ID0gT0JTT0xFVEUgKi8KKyAgLyogNjcgPSBPQlNPTEVURSAqLworCisgIC8qIE1heGltdW0gbnVtYmVyIG9mIGh0dHAgcmVkaXJlY3RzIHRvIGZvbGxvdyAqLworICBDSU5JVChNQVhSRURJUlMsIExPTkcsIDY4KSwKKworICAvKiBQYXNzIGEgbG9uZyBzZXQgdG8gMSB0byBnZXQgdGhlIGRhdGUgb2YgdGhlIHJlcXVlc3RlZCBkb2N1bWVudCAoaWYKKyAgICAgcG9zc2libGUpISBQYXNzIGEgemVybyB0byBzaHV0IGl0IG9mZi4gKi8KKyAgQ0lOSVQoRklMRVRJTUUsIExPTkcsIDY5KSwKKworICAvKiBUaGlzIHBvaW50cyB0byBhIGxpbmtlZCBsaXN0IG9mIHRlbG5ldCBvcHRpb25zICovCisgIENJTklUKFRFTE5FVE9QVElPTlMsIE9CSkVDVFBPSU5ULCA3MCksCisKKyAgLyogTWF4IGFtb3VudCBvZiBjYWNoZWQgYWxpdmUgY29ubmVjdGlvbnMgKi8KKyAgQ0lOSVQoTUFYQ09OTkVDVFMsIExPTkcsIDcxKSwKKworICBDSU5JVChDTE9TRVBPTElDWSwgTE9ORywgNzIpLCAvKiBERVBSRUNBVEVELCBkbyBub3QgdXNlISAqLworCisgIC8qIDczID0gT0JTT0xFVEUgKi8KKworICAvKiBTZXQgdG8gZXhwbGljaXRseSB1c2UgYSBuZXcgY29ubmVjdGlvbiBmb3IgdGhlIHVwY29taW5nIHRyYW5zZmVyLgorICAgICBEbyBub3QgdXNlIHRoaXMgdW5sZXNzIHlvdSdyZSBhYnNvbHV0ZWx5IHN1cmUgb2YgdGhpcywgYXMgaXQgbWFrZXMgdGhlCisgICAgIG9wZXJhdGlvbiBzbG93ZXIgYW5kIGlzIGxlc3MgZnJpZW5kbHkgZm9yIHRoZSBuZXR3b3JrLiAqLworICBDSU5JVChGUkVTSF9DT05ORUNULCBMT05HLCA3NCksCisKKyAgLyogU2V0IHRvIGV4cGxpY2l0bHkgZm9yYmlkIHRoZSB1cGNvbWluZyB0cmFuc2ZlcidzIGNvbm5lY3Rpb24gdG8gYmUgcmUtdXNlZAorICAgICB3aGVuIGRvbmUuIERvIG5vdCB1c2UgdGhpcyB1bmxlc3MgeW91J3JlIGFic29sdXRlbHkgc3VyZSBvZiB0aGlzLCBhcyBpdAorICAgICBtYWtlcyB0aGUgb3BlcmF0aW9uIHNsb3dlciBhbmQgaXMgbGVzcyBmcmllbmRseSBmb3IgdGhlIG5ldHdvcmsuICovCisgIENJTklUKEZPUkJJRF9SRVVTRSwgTE9ORywgNzUpLAorCisgIC8qIFNldCB0byBhIGZpbGUgbmFtZSB0aGF0IGNvbnRhaW5zIHJhbmRvbSBkYXRhIGZvciBsaWJjdXJsIHRvIHVzZSB0bworICAgICBzZWVkIHRoZSByYW5kb20gZW5naW5lIHdoZW4gZG9pbmcgU1NMIGNvbm5lY3RzLiAqLworICBDSU5JVChSQU5ET01fRklMRSwgT0JKRUNUUE9JTlQsIDc2KSwKKworICAvKiBTZXQgdG8gdGhlIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vbiBzb2NrZXQgcGF0aG5hbWUgKi8KKyAgQ0lOSVQoRUdEU09DS0VULCBPQkpFQ1RQT0lOVCwgNzcpLAorCisgIC8qIFRpbWUtb3V0IGNvbm5lY3Qgb3BlcmF0aW9ucyBhZnRlciB0aGlzIGFtb3VudCBvZiBzZWNvbmRzLCBpZiBjb25uZWN0cworICAgICBhcmUgT0sgd2l0aGluIHRoaXMgdGltZSwgdGhlbiBmaW5lLi4uIFRoaXMgb25seSBhYm9ydHMgdGhlIGNvbm5lY3QKKyAgICAgcGhhc2UuIFtPbmx5IHdvcmtzIG9uIHVuaXgtc3R5bGUvU0lHQUxSTSBvcGVyYXRpbmcgc3lzdGVtc10gKi8KKyAgQ0lOSVQoQ09OTkVDVFRJTUVPVVQsIExPTkcsIDc4KSwKKworICAvKiBGdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvIHN0b3JlIGhlYWRlcnMgKGluc3RlYWQgb2YgZndyaXRlKS4gVGhlCisgICAqIHBhcmFtZXRlcnMgd2lsbCB1c2UgZndyaXRlKCkgc3ludGF4LCBtYWtlIHN1cmUgdG8gZm9sbG93IHRoZW0uICovCisgIENJTklUKEhFQURFUkZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCA3OSksCisKKyAgLyogU2V0IHRoaXMgdG8gZm9yY2UgdGhlIEhUVFAgcmVxdWVzdCB0byBnZXQgYmFjayB0byBHRVQuIE9ubHkgcmVhbGx5IHVzYWJsZQorICAgICBpZiBQT1NULCBQVVQgb3IgYSBjdXN0b20gcmVxdWVzdCBoYXZlIGJlZW4gdXNlZCBmaXJzdC4KKyAgICovCisgIENJTklUKEhUVFBHRVQsIExPTkcsIDgwKSwKKworICAvKiBTZXQgaWYgd2Ugc2hvdWxkIHZlcmlmeSB0aGUgQ29tbW9uIG5hbWUgZnJvbSB0aGUgcGVlciBjZXJ0aWZpY2F0ZSBpbiBzc2wKKyAgICogaGFuZHNoYWtlLCBzZXQgMSB0byBjaGVjayBleGlzdGVuY2UsIDIgdG8gZW5zdXJlIHRoYXQgaXQgbWF0Y2hlcyB0aGUKKyAgICogcHJvdmlkZWQgaG9zdG5hbWUuICovCisgIENJTklUKFNTTF9WRVJJRllIT1NULCBMT05HLCA4MSksCisKKyAgLyogU3BlY2lmeSB3aGljaCBmaWxlIG5hbWUgdG8gd3JpdGUgYWxsIGtub3duIGNvb2tpZXMgaW4gYWZ0ZXIgY29tcGxldGVkCisgICAgIG9wZXJhdGlvbi4gU2V0IGZpbGUgbmFtZSB0byAiLSIgKGRhc2gpIHRvIG1ha2UgaXQgZ28gdG8gc3Rkb3V0LiAqLworICBDSU5JVChDT09LSUVKQVIsIE9CSkVDVFBPSU5ULCA4MiksCisKKyAgLyogU3BlY2lmeSB3aGljaCBTU0wgY2lwaGVycyB0byB1c2UgKi8KKyAgQ0lOSVQoU1NMX0NJUEhFUl9MSVNULCBPQkpFQ1RQT0lOVCwgODMpLAorCisgIC8qIFNwZWNpZnkgd2hpY2ggSFRUUCB2ZXJzaW9uIHRvIHVzZSEgVGhpcyBtdXN0IGJlIHNldCB0byBvbmUgb2YgdGhlCisgICAgIENVUkxfSFRUUF9WRVJTSU9OKiBlbnVtcyBzZXQgYmVsb3cuICovCisgIENJTklUKEhUVFBfVkVSU0lPTiwgTE9ORywgODQpLAorCisgIC8qIFNwZWNpZmljYWxseSBzd2l0Y2ggb24gb3Igb2ZmIHRoZSBGVFAgZW5naW5lJ3MgdXNlIG9mIHRoZSBFUFNWIGNvbW1hbmQuIEJ5CisgICAgIGRlZmF1bHQsIHRoYXQgb25lIHdpbGwgYWx3YXlzIGJlIGF0dGVtcHRlZCBiZWZvcmUgdGhlIG1vcmUgdHJhZGl0aW9uYWwKKyAgICAgUEFTViBjb21tYW5kLiAqLworICBDSU5JVChGVFBfVVNFX0VQU1YsIExPTkcsIDg1KSwKKworICAvKiB0eXBlIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBTU0wtY2VydGlmaWNhdGUgKCJERVIiLCAiUEVNIiwgIkVORyIpICovCisgIENJTklUKFNTTENFUlRUWVBFLCBPQkpFQ1RQT0lOVCwgODYpLAorCisgIC8qIG5hbWUgb2YgdGhlIGZpbGUga2VlcGluZyB5b3VyIHByaXZhdGUgU1NMLWtleSAqLworICBDSU5JVChTU0xLRVksIE9CSkVDVFBPSU5ULCA4NyksCisKKyAgLyogdHlwZSBvZiB0aGUgZmlsZSBrZWVwaW5nIHlvdXIgcHJpdmF0ZSBTU0wta2V5ICgiREVSIiwgIlBFTSIsICJFTkciKSAqLworICBDSU5JVChTU0xLRVlUWVBFLCBPQkpFQ1RQT0lOVCwgODgpLAorCisgIC8qIGNyeXB0byBlbmdpbmUgZm9yIHRoZSBTU0wtc3ViIHN5c3RlbSAqLworICBDSU5JVChTU0xFTkdJTkUsIE9CSkVDVFBPSU5ULCA4OSksCisKKyAgLyogc2V0IHRoZSBjcnlwdG8gZW5naW5lIGZvciB0aGUgU1NMLXN1YiBzeXN0ZW0gYXMgZGVmYXVsdAorICAgICB0aGUgcGFyYW0gaGFzIG5vIG1lYW5pbmcuLi4KKyAgICovCisgIENJTklUKFNTTEVOR0lORV9ERUZBVUxULCBMT05HLCA5MCksCisKKyAgLyogTm9uLXplcm8gdmFsdWUgbWVhbnMgdG8gdXNlIHRoZSBnbG9iYWwgZG5zIGNhY2hlICovCisgIENJTklUKEROU19VU0VfR0xPQkFMX0NBQ0hFLCBMT05HLCA5MSksIC8qIERFUFJFQ0FURUQsIGRvIG5vdCB1c2UhICovCisKKyAgLyogRE5TIGNhY2hlIHRpbWVvdXQgKi8KKyAgQ0lOSVQoRE5TX0NBQ0hFX1RJTUVPVVQsIExPTkcsIDkyKSwKKworICAvKiBzZW5kIGxpbmtlZC1saXN0IG9mIHByZS10cmFuc2ZlciBRVU9URSBjb21tYW5kcyAqLworICBDSU5JVChQUkVRVU9URSwgT0JKRUNUUE9JTlQsIDkzKSwKKworICAvKiBzZXQgdGhlIGRlYnVnIGZ1bmN0aW9uICovCisgIENJTklUKERFQlVHRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDk0KSwKKworICAvKiBzZXQgdGhlIGRhdGEgZm9yIHRoZSBkZWJ1ZyBmdW5jdGlvbiAqLworICBDSU5JVChERUJVR0RBVEEsIE9CSkVDVFBPSU5ULCA5NSksCisKKyAgLyogbWFyayB0aGlzIGFzIHN0YXJ0IG9mIGEgY29va2llIHNlc3Npb24gKi8KKyAgQ0lOSVQoQ09PS0lFU0VTU0lPTiwgTE9ORywgOTYpLAorCisgIC8qIFRoZSBDQXBhdGggZGlyZWN0b3J5IHVzZWQgdG8gdmFsaWRhdGUgdGhlIHBlZXIgY2VydGlmaWNhdGUKKyAgICAgdGhpcyBvcHRpb24gaXMgdXNlZCBvbmx5IGlmIFNTTF9WRVJJRllQRUVSIGlzIHRydWUgKi8KKyAgQ0lOSVQoQ0FQQVRILCBPQkpFQ1RQT0lOVCwgOTcpLAorCisgIC8qIEluc3RydWN0IGxpYmN1cmwgdG8gdXNlIGEgc21hbGxlciByZWNlaXZlIGJ1ZmZlciAqLworICBDSU5JVChCVUZGRVJTSVpFLCBMT05HLCA5OCksCisKKyAgLyogSW5zdHJ1Y3QgbGliY3VybCB0byBub3QgdXNlIGFueSBzaWduYWwvYWxhcm0gaGFuZGxlcnMsIGV2ZW4gd2hlbiB1c2luZworICAgICB0aW1lb3V0cy4gVGhpcyBvcHRpb24gaXMgdXNlZnVsIGZvciBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuCisgICAgIFNlZSBsaWJjdXJsLXRoZS1ndWlkZSBmb3IgbW9yZSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uLiAqLworICBDSU5JVChOT1NJR05BTCwgTE9ORywgOTkpLAorCisgIC8qIFByb3ZpZGUgYSBDVVJMU2hhcmUgZm9yIG11dGV4aW5nIG5vbi10cyBkYXRhICovCisgIENJTklUKFNIQVJFLCBPQkpFQ1RQT0lOVCwgMTAwKSwKKworICAvKiBpbmRpY2F0ZXMgdHlwZSBvZiBwcm94eS4gYWNjZXB0ZWQgdmFsdWVzIGFyZSBDVVJMUFJPWFlfSFRUUCAoZGVmYXVsdCksCisgICAgIENVUkxQUk9YWV9TT0NLUzQsIENVUkxQUk9YWV9TT0NLUzRBIGFuZCBDVVJMUFJPWFlfU09DS1M1LiAqLworICBDSU5JVChQUk9YWVRZUEUsIExPTkcsIDEwMSksCisKKyAgLyogU2V0IHRoZSBBY2NlcHQtRW5jb2Rpbmcgc3RyaW5nLiBVc2UgdGhpcyB0byB0ZWxsIGEgc2VydmVyIHlvdSB3b3VsZCBsaWtlCisgICAgIHRoZSByZXNwb25zZSB0byBiZSBjb21wcmVzc2VkLiBCZWZvcmUgNy4yMS42LCB0aGlzIHdhcyBrbm93biBhcworICAgICBDVVJMT1BUX0VOQ09ESU5HICovCisgIENJTklUKEFDQ0VQVF9FTkNPRElORywgT0JKRUNUUE9JTlQsIDEwMiksCisKKyAgLyogU2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCisgIENJTklUKFBSSVZBVEUsIE9CSkVDVFBPSU5ULCAxMDMpLAorCisgIC8qIFNldCBhbGlhc2VzIGZvciBIVFRQIDIwMCBpbiB0aGUgSFRUUCBSZXNwb25zZSBoZWFkZXIgKi8KKyAgQ0lOSVQoSFRUUDIwMEFMSUFTRVMsIE9CSkVDVFBPSU5ULCAxMDQpLAorCisgIC8qIENvbnRpbnVlIHRvIHNlbmQgYXV0aGVudGljYXRpb24gKHVzZXIrcGFzc3dvcmQpIHdoZW4gZm9sbG93aW5nIGxvY2F0aW9ucywKKyAgICAgZXZlbiB3aGVuIGhvc3RuYW1lIGNoYW5nZWQuIFRoaXMgY2FuIHBvdGVudGlhbGx5IHNlbmQgb2ZmIHRoZSBuYW1lCisgICAgIGFuZCBwYXNzd29yZCB0byB3aGF0ZXZlciBob3N0IHRoZSBzZXJ2ZXIgZGVjaWRlcy4gKi8KKyAgQ0lOSVQoVU5SRVNUUklDVEVEX0FVVEgsIExPTkcsIDEwNSksCisKKyAgLyogU3BlY2lmaWNhbGx5IHN3aXRjaCBvbiBvciBvZmYgdGhlIEZUUCBlbmdpbmUncyB1c2Ugb2YgdGhlIEVQUlQgY29tbWFuZCAoCisgICAgIGl0IGFsc28gZGlzYWJsZXMgdGhlIExQUlQgYXR0ZW1wdCkuIEJ5IGRlZmF1bHQsIHRob3NlIG9uZXMgd2lsbCBhbHdheXMgYmUKKyAgICAgYXR0ZW1wdGVkIGJlZm9yZSB0aGUgZ29vZCBvbGQgdHJhZGl0aW9uYWwgUE9SVCBjb21tYW5kLiAqLworICBDSU5JVChGVFBfVVNFX0VQUlQsIExPTkcsIDEwNiksCisKKyAgLyogU2V0IHRoaXMgdG8gYSBiaXRtYXNrIHZhbHVlIHRvIGVuYWJsZSB0aGUgcGFydGljdWxhciBhdXRoZW50aWNhdGlvbnMKKyAgICAgbWV0aG9kcyB5b3UgbGlrZS4gVXNlIHRoaXMgaW4gY29tYmluYXRpb24gd2l0aCBDVVJMT1BUX1VTRVJQV0QuCisgICAgIE5vdGUgdGhhdCBzZXR0aW5nIG11bHRpcGxlIGJpdHMgbWF5IGNhdXNlIGV4dHJhIG5ldHdvcmsgcm91bmQtdHJpcHMuICovCisgIENJTklUKEhUVFBBVVRILCBMT05HLCAxMDcpLAorCisgIC8qIFNldCB0aGUgc3NsIGNvbnRleHQgY2FsbGJhY2sgZnVuY3Rpb24sIGN1cnJlbnRseSBvbmx5IGZvciBPcGVuU1NMIHNzbF9jdHgKKyAgICAgaW4gc2Vjb25kIGFyZ3VtZW50LiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBtYXRjaGluZyB0aGUKKyAgICAgY3VybF9zc2xfY3R4X2NhbGxiYWNrIHByb3RvLiAqLworICBDSU5JVChTU0xfQ1RYX0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxMDgpLAorCisgIC8qIFNldCB0aGUgdXNlcmRhdGEgZm9yIHRoZSBzc2wgY29udGV4dCBjYWxsYmFjayBmdW5jdGlvbidzIHRoaXJkCisgICAgIGFyZ3VtZW50ICovCisgIENJTklUKFNTTF9DVFhfREFUQSwgT0JKRUNUUE9JTlQsIDEwOSksCisKKyAgLyogRlRQIE9wdGlvbiB0aGF0IGNhdXNlcyBtaXNzaW5nIGRpcnMgdG8gYmUgY3JlYXRlZCBvbiB0aGUgcmVtb3RlIHNlcnZlci4KKyAgICAgSW4gNy4xOS40IHdlIGludHJvZHVjZWQgdGhlIGNvbnZlbmllbmNlIGVudW1zIGZvciB0aGlzIG9wdGlvbiB1c2luZyB0aGUKKyAgICAgQ1VSTEZUUF9DUkVBVEVfRElSIHByZWZpeC4KKyAgKi8KKyAgQ0lOSVQoRlRQX0NSRUFURV9NSVNTSU5HX0RJUlMsIExPTkcsIDExMCksCisKKyAgLyogU2V0IHRoaXMgdG8gYSBiaXRtYXNrIHZhbHVlIHRvIGVuYWJsZSB0aGUgcGFydGljdWxhciBhdXRoZW50aWNhdGlvbnMKKyAgICAgbWV0aG9kcyB5b3UgbGlrZS4gVXNlIHRoaXMgaW4gY29tYmluYXRpb24gd2l0aCBDVVJMT1BUX1BST1hZVVNFUlBXRC4KKyAgICAgTm90ZSB0aGF0IHNldHRpbmcgbXVsdGlwbGUgYml0cyBtYXkgY2F1c2UgZXh0cmEgbmV0d29yayByb3VuZC10cmlwcy4gKi8KKyAgQ0lOSVQoUFJPWFlBVVRILCBMT05HLCAxMTEpLAorCisgIC8qIEZUUCBvcHRpb24gdGhhdCBjaGFuZ2VzIHRoZSB0aW1lb3V0LCBpbiBzZWNvbmRzLCBhc3NvY2lhdGVkIHdpdGgKKyAgICAgZ2V0dGluZyBhIHJlc3BvbnNlLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0cmFuc2ZlciB0aW1lb3V0IHRpbWUgYW5kCisgICAgIGVzc2VudGlhbGx5IHBsYWNlcyBhIGRlbWFuZCBvbiB0aGUgRlRQIHNlcnZlciB0byBhY2tub3dsZWRnZSBjb21tYW5kcworICAgICBpbiBhIHRpbWVseSBtYW5uZXIuICovCisgIENJTklUKEZUUF9SRVNQT05TRV9USU1FT1VULCBMT05HLCAxMTIpLAorI2RlZmluZSBDVVJMT1BUX1NFUlZFUl9SRVNQT05TRV9USU1FT1VUIENVUkxPUFRfRlRQX1JFU1BPTlNFX1RJTUVPVVQKKworICAvKiBTZXQgdGhpcyBvcHRpb24gdG8gb25lIG9mIHRoZSBDVVJMX0lQUkVTT0xWRV8qIGRlZmluZXMgKHNlZSBiZWxvdykgdG8KKyAgICAgdGVsbCBsaWJjdXJsIHRvIHJlc29sdmUgbmFtZXMgdG8gdGhvc2UgSVAgdmVyc2lvbnMgb25seS4gVGhpcyBvbmx5IGhhcworICAgICBhZmZlY3Qgb24gc3lzdGVtcyB3aXRoIHN1cHBvcnQgZm9yIG1vcmUgdGhhbiBvbmUsIGkuZSBJUHY0IF9hbmRfIElQdjYuICovCisgIENJTklUKElQUkVTT0xWRSwgTE9ORywgMTEzKSwKKworICAvKiBTZXQgdGhpcyBvcHRpb24gdG8gbGltaXQgdGhlIHNpemUgb2YgYSBmaWxlIHRoYXQgd2lsbCBiZSBkb3dubG9hZGVkIGZyb20KKyAgICAgYW4gSFRUUCBvciBGVFAgc2VydmVyLgorCisgICAgIE5vdGUgdGhlcmUgaXMgYWxzbyBfTEFSR0UgdmVyc2lvbiB3aGljaCBhZGRzIGxhcmdlIGZpbGUgc3VwcG9ydCBmb3IKKyAgICAgcGxhdGZvcm1zIHdoaWNoIGhhdmUgbGFyZ2VyIG9mZl90IHNpemVzLiAgU2VlIE1BWEZJTEVTSVpFX0xBUkdFIGJlbG93LiAqLworICBDSU5JVChNQVhGSUxFU0laRSwgTE9ORywgMTE0KSwKKworICAvKiBTZWUgdGhlIGNvbW1lbnQgZm9yIElORklMRVNJWkUgYWJvdmUsIGJ1dCBpbiBzaG9ydCwgc3BlY2lmaWVzCisgICAqIHRoZSBzaXplIG9mIHRoZSBmaWxlIGJlaW5nIHVwbG9hZGVkLiAgLTEgbWVhbnMgdW5rbm93bi4KKyAgICovCisgIENJTklUKElORklMRVNJWkVfTEFSR0UsIE9GRl9ULCAxMTUpLAorCisgIC8qIFNldHMgdGhlIGNvbnRpbnVhdGlvbiBvZmZzZXQuICBUaGVyZSBpcyBhbHNvIGEgTE9ORyB2ZXJzaW9uIG9mIHRoaXM7CisgICAqIGxvb2sgYWJvdmUgZm9yIFJFU1VNRV9GUk9NLgorICAgKi8KKyAgQ0lOSVQoUkVTVU1FX0ZST01fTEFSR0UsIE9GRl9ULCAxMTYpLAorCisgIC8qIFNldHMgdGhlIG1heGltdW0gc2l6ZSBvZiBkYXRhIHRoYXQgd2lsbCBiZSBkb3dubG9hZGVkIGZyb20KKyAgICogYW4gSFRUUCBvciBGVFAgc2VydmVyLiAgU2VlIE1BWEZJTEVTSVpFIGFib3ZlIGZvciB0aGUgTE9ORyB2ZXJzaW9uLgorICAgKi8KKyAgQ0lOSVQoTUFYRklMRVNJWkVfTEFSR0UsIE9GRl9ULCAxMTcpLAorCisgIC8qIFNldCB0aGlzIG9wdGlvbiB0byB0aGUgZmlsZSBuYW1lIG9mIHlvdXIgLm5ldHJjIGZpbGUgeW91IHdhbnQgbGliY3VybAorICAgICB0byBwYXJzZSAodXNpbmcgdGhlIENVUkxPUFRfTkVUUkMgb3B0aW9uKS4gSWYgbm90IHNldCwgbGliY3VybCB3aWxsIGRvCisgICAgIGEgcG9vciBhdHRlbXB0IHRvIGZpbmQgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSBhbmQgY2hlY2sgZm9yIGEgLm5ldHJjCisgICAgIGZpbGUgaW4gdGhlcmUuICovCisgIENJTklUKE5FVFJDX0ZJTEUsIE9CSkVDVFBPSU5ULCAxMTgpLAorCisgIC8qIEVuYWJsZSBTU0wvVExTIGZvciBGVFAsIHBpY2sgb25lIG9mOgorICAgICBDVVJMRlRQU1NMX1RSWSAgICAgLSB0cnkgdXNpbmcgU1NMLCBwcm9jZWVkIGFueXdheSBvdGhlcndpc2UKKyAgICAgQ1VSTEZUUFNTTF9DT05UUk9MIC0gU1NMIGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uIG9yIGZhaWwKKyAgICAgQ1VSTEZUUFNTTF9BTEwgICAgIC0gU1NMIGZvciBhbGwgY29tbXVuaWNhdGlvbiBvciBmYWlsCisgICovCisgIENJTklUKFVTRV9TU0wsIExPTkcsIDExOSksCisKKyAgLyogVGhlIF9MQVJHRSB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZCBQT1NURklFTERTSVpFIG9wdGlvbiAqLworICBDSU5JVChQT1NURklFTERTSVpFX0xBUkdFLCBPRkZfVCwgMTIwKSwKKworICAvKiBFbmFibGUvZGlzYWJsZSB0aGUgVENQIE5hZ2xlIGFsZ29yaXRobSAqLworICBDSU5JVChUQ1BfTk9ERUxBWSwgTE9ORywgMTIxKSwKKworICAvKiAxMjIgT0JTT0xFVEUsIHVzZWQgaW4gNy4xMi4zLiBHb25lIGluIDcuMTMuMCAqLworICAvKiAxMjMgT0JTT0xFVEUuIEdvbmUgaW4gNy4xNi4wICovCisgIC8qIDEyNCBPQlNPTEVURSwgdXNlZCBpbiA3LjEyLjMuIEdvbmUgaW4gNy4xMy4wICovCisgIC8qIDEyNSBPQlNPTEVURSwgdXNlZCBpbiA3LjEyLjMuIEdvbmUgaW4gNy4xMy4wICovCisgIC8qIDEyNiBPQlNPTEVURSwgdXNlZCBpbiA3LjEyLjMuIEdvbmUgaW4gNy4xMy4wICovCisgIC8qIDEyNyBPQlNPTEVURS4gR29uZSBpbiA3LjE2LjAgKi8KKyAgLyogMTI4IE9CU09MRVRFLiBHb25lIGluIDcuMTYuMCAqLworCisgIC8qIFdoZW4gRlRQIG92ZXIgU1NML1RMUyBpcyBzZWxlY3RlZCAod2l0aCBDVVJMT1BUX1VTRV9TU0wpLCB0aGlzIG9wdGlvbgorICAgICBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgbGliY3VybCdzIGRlZmF1bHQgYWN0aW9uIHdoaWNoIGlzIHRvIGZpcnN0IHRyeQorICAgICAiQVVUSCBTU0wiIGFuZCB0aGVuICJBVVRIIFRMUyIgaW4gdGhpcyBvcmRlciwgYW5kIHByb2NlZWQgd2hlbiBhIE9LCisgICAgIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLgorCisgICAgIEF2YWlsYWJsZSBwYXJhbWV0ZXJzIGFyZToKKyAgICAgQ1VSTEZUUEFVVEhfREVGQVVMVCAtIGxldCBsaWJjdXJsIGRlY2lkZQorICAgICBDVVJMRlRQQVVUSF9TU0wgICAgIC0gdHJ5ICJBVVRIIFNTTCIgZmlyc3QsIHRoZW4gVExTCisgICAgIENVUkxGVFBBVVRIX1RMUyAgICAgLSB0cnkgIkFVVEggVExTIiBmaXJzdCwgdGhlbiBTU0wKKyAgKi8KKyAgQ0lOSVQoRlRQU1NMQVVUSCwgTE9ORywgMTI5KSwKKworICBDSU5JVChJT0NUTEZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxMzApLAorICBDSU5JVChJT0NUTERBVEEsIE9CSkVDVFBPSU5ULCAxMzEpLAorCisgIC8qIDEzMiBPQlNPTEVURS4gR29uZSBpbiA3LjE2LjAgKi8KKyAgLyogMTMzIE9CU09MRVRFLiBHb25lIGluIDcuMTYuMCAqLworCisgIC8qIHplcm8gdGVybWluYXRlZCBzdHJpbmcgZm9yIHBhc3Mgb24gdG8gdGhlIEZUUCBzZXJ2ZXIgd2hlbiBhc2tlZCBmb3IKKyAgICAgImFjY291bnQiIGluZm8gKi8KKyAgQ0lOSVQoRlRQX0FDQ09VTlQsIE9CSkVDVFBPSU5ULCAxMzQpLAorCisgIC8qIGZlZWQgY29va2llcyBpbnRvIGNvb2tpZSBlbmdpbmUgKi8KKyAgQ0lOSVQoQ09PS0lFTElTVCwgT0JKRUNUUE9JTlQsIDEzNSksCisKKyAgLyogaWdub3JlIENvbnRlbnQtTGVuZ3RoICovCisgIENJTklUKElHTk9SRV9DT05URU5UX0xFTkdUSCwgTE9ORywgMTM2KSwKKworICAvKiBTZXQgdG8gbm9uLXplcm8gdG8gc2tpcCB0aGUgSVAgYWRkcmVzcyByZWNlaXZlZCBpbiBhIDIyNyBQQVNWIEZUUCBzZXJ2ZXIKKyAgICAgcmVzcG9uc2UuIFR5cGljYWxseSB1c2VkIGZvciBGVFAtU1NMIHB1cnBvc2VzIGJ1dCBpcyBub3QgcmVzdHJpY3RlZCB0bworICAgICB0aGF0LiBsaWJjdXJsIHdpbGwgdGhlbiBpbnN0ZWFkIHVzZSB0aGUgc2FtZSBJUCBhZGRyZXNzIGl0IHVzZWQgZm9yIHRoZQorICAgICBjb250cm9sIGNvbm5lY3Rpb24uICovCisgIENJTklUKEZUUF9TS0lQX1BBU1ZfSVAsIExPTkcsIDEzNyksCisKKyAgLyogU2VsZWN0ICJmaWxlIG1ldGhvZCIgdG8gdXNlIHdoZW4gZG9pbmcgRlRQLCBzZWUgdGhlIGN1cmxfZnRwbWV0aG9kCisgICAgIGFib3ZlLiAqLworICBDSU5JVChGVFBfRklMRU1FVEhPRCwgTE9ORywgMTM4KSwKKworICAvKiBMb2NhbCBwb3J0IG51bWJlciB0byBiaW5kIHRoZSBzb2NrZXQgdG8gKi8KKyAgQ0lOSVQoTE9DQUxQT1JULCBMT05HLCAxMzkpLAorCisgIC8qIE51bWJlciBvZiBwb3J0cyB0byB0cnksIGluY2x1ZGluZyB0aGUgZmlyc3Qgb25lIHNldCB3aXRoIExPQ0FMUE9SVC4KKyAgICAgVGh1cywgc2V0dGluZyBpdCB0byAxIHdpbGwgbWFrZSBubyBhZGRpdGlvbmFsIGF0dGVtcHRzIGJ1dCB0aGUgZmlyc3QuCisgICovCisgIENJTklUKExPQ0FMUE9SVFJBTkdFLCBMT05HLCAxNDApLAorCisgIC8qIG5vIHRyYW5zZmVyLCBzZXQgdXAgY29ubmVjdGlvbiBhbmQgbGV0IGFwcGxpY2F0aW9uIHVzZSB0aGUgc29ja2V0IGJ5CisgICAgIGV4dHJhY3RpbmcgaXQgd2l0aCBDVVJMSU5GT19MQVNUU09DS0VUICovCisgIENJTklUKENPTk5FQ1RfT05MWSwgTE9ORywgMTQxKSwKKworICAvKiBGdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvIGNvbnZlcnQgZnJvbSB0aGUKKyAgICAgbmV0d29yayBlbmNvZGluZyAoaW5zdGVhZCBvZiB1c2luZyB0aGUgaWNvbnYgY2FsbHMgaW4gbGliY3VybCkgKi8KKyAgQ0lOSVQoQ09OVl9GUk9NX05FVFdPUktfRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE0MiksCisKKyAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBjb252ZXJ0IHRvIHRoZQorICAgICBuZXR3b3JrIGVuY29kaW5nIChpbnN0ZWFkIG9mIHVzaW5nIHRoZSBpY29udiBjYWxscyBpbiBsaWJjdXJsKSAqLworICBDSU5JVChDT05WX1RPX05FVFdPUktfRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE0MyksCisKKyAgLyogRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBjb252ZXJ0IGZyb20gVVRGOAorICAgICAoaW5zdGVhZCBvZiB1c2luZyB0aGUgaWNvbnYgY2FsbHMgaW4gbGliY3VybCkKKyAgICAgTm90ZSB0aGF0IHRoaXMgaXMgdXNlZCBvbmx5IGZvciBTU0wgY2VydGlmaWNhdGUgcHJvY2Vzc2luZyAqLworICBDSU5JVChDT05WX0ZST01fVVRGOF9GVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTQ0KSwKKworICAvKiBpZiB0aGUgY29ubmVjdGlvbiBwcm9jZWVkcyB0b28gcXVpY2tseSB0aGVuIG5lZWQgdG8gc2xvdyBpdCBkb3duICovCisgIC8qIGxpbWl0LXJhdGU6IG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHBlciBzZWNvbmQgdG8gc2VuZCBvciByZWNlaXZlICovCisgIENJTklUKE1BWF9TRU5EX1NQRUVEX0xBUkdFLCBPRkZfVCwgMTQ1KSwKKyAgQ0lOSVQoTUFYX1JFQ1ZfU1BFRURfTEFSR0UsIE9GRl9ULCAxNDYpLAorCisgIC8qIFBvaW50ZXIgdG8gY29tbWFuZCBzdHJpbmcgdG8gc2VuZCBpZiBVU0VSL1BBU1MgZmFpbHMuICovCisgIENJTklUKEZUUF9BTFRFUk5BVElWRV9UT19VU0VSLCBPQkpFQ1RQT0lOVCwgMTQ3KSwKKworICAvKiBjYWxsYmFjayBmdW5jdGlvbiBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyAqLworICBDSU5JVChTT0NLT1BURlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE0OCksCisgIENJTklUKFNPQ0tPUFREQVRBLCBPQkpFQ1RQT0lOVCwgMTQ5KSwKKworICAvKiBzZXQgdG8gMCB0byBkaXNhYmxlIHNlc3Npb24gSUQgcmUtdXNlIGZvciB0aGlzIHRyYW5zZmVyLCBkZWZhdWx0IGlzCisgICAgIGVuYWJsZWQgKD09IDEpICovCisgIENJTklUKFNTTF9TRVNTSU9OSURfQ0FDSEUsIExPTkcsIDE1MCksCisKKyAgLyogYWxsb3dlZCBTU0ggYXV0aGVudGljYXRpb24gbWV0aG9kcyAqLworICBDSU5JVChTU0hfQVVUSF9UWVBFUywgTE9ORywgMTUxKSwKKworICAvKiBVc2VkIGJ5IHNjcC9zZnRwIHRvIGRvIHB1YmxpYy9wcml2YXRlIGtleSBhdXRoZW50aWNhdGlvbiAqLworICBDSU5JVChTU0hfUFVCTElDX0tFWUZJTEUsIE9CSkVDVFBPSU5ULCAxNTIpLAorICBDSU5JVChTU0hfUFJJVkFURV9LRVlGSUxFLCBPQkpFQ1RQT0lOVCwgMTUzKSwKKworICAvKiBTZW5kIENDQyAoQ2xlYXIgQ29tbWFuZCBDaGFubmVsKSBhZnRlciBhdXRoZW50aWNhdGlvbiAqLworICBDSU5JVChGVFBfU1NMX0NDQywgTE9ORywgMTU0KSwKKworICAvKiBTYW1lIGFzIFRJTUVPVVQgYW5kIENPTk5FQ1RUSU1FT1VULCBidXQgd2l0aCBtcyByZXNvbHV0aW9uICovCisgIENJTklUKFRJTUVPVVRfTVMsIExPTkcsIDE1NSksCisgIENJTklUKENPTk5FQ1RUSU1FT1VUX01TLCBMT05HLCAxNTYpLAorCisgIC8qIHNldCB0byB6ZXJvIHRvIGRpc2FibGUgdGhlIGxpYmN1cmwncyBkZWNvZGluZyBhbmQgdGh1cyBwYXNzIHRoZSByYXcgYm9keQorICAgICBkYXRhIHRvIHRoZSBhcHBsaWNhdGlvbiBldmVuIHdoZW4gaXQgaXMgZW5jb2RlZC9jb21wcmVzc2VkICovCisgIENJTklUKEhUVFBfVFJBTlNGRVJfREVDT0RJTkcsIExPTkcsIDE1NyksCisgIENJTklUKEhUVFBfQ09OVEVOVF9ERUNPRElORywgTE9ORywgMTU4KSwKKworICAvKiBQZXJtaXNzaW9uIHVzZWQgd2hlbiBjcmVhdGluZyBuZXcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG9uIHRoZSByZW1vdGUKKyAgICAgc2VydmVyIGZvciBwcm90b2NvbHMgdGhhdCBzdXBwb3J0IGl0LCBTRlRQL1NDUC9GSUxFICovCisgIENJTklUKE5FV19GSUxFX1BFUk1TLCBMT05HLCAxNTkpLAorICBDSU5JVChORVdfRElSRUNUT1JZX1BFUk1TLCBMT05HLCAxNjApLAorCisgIC8qIFNldCB0aGUgYmVoYXZpb3VyIG9mIFBPU1Qgd2hlbiByZWRpcmVjdGluZy4gVmFsdWVzIG11c3QgYmUgc2V0IHRvIG9uZQorICAgICBvZiBDVVJMX1JFRElSKiBkZWZpbmVzIGJlbG93LiBUaGlzIHVzZWQgdG8gYmUgY2FsbGVkIENVUkxPUFRfUE9TVDMwMSAqLworICBDSU5JVChQT1NUUkVESVIsIExPTkcsIDE2MSksCisKKyAgLyogdXNlZCBieSBzY3Avc2Z0cCB0byB2ZXJpZnkgdGhlIGhvc3QncyBwdWJsaWMga2V5ICovCisgIENJTklUKFNTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1LCBPQkpFQ1RQT0lOVCwgMTYyKSwKKworICAvKiBDYWxsYmFjayBmdW5jdGlvbiBmb3Igb3BlbmluZyBzb2NrZXQgKGluc3RlYWQgb2Ygc29ja2V0KDIpKS4gT3B0aW9uYWxseSwKKyAgICAgY2FsbGJhY2sgaXMgYWJsZSBjaGFuZ2UgdGhlIGFkZHJlc3Mgb3IgcmVmdXNlIHRvIGNvbm5lY3QgcmV0dXJuaW5nCisgICAgIENVUkxfU09DS0VUX0JBRC4gIFRoZSBjYWxsYmFjayBzaG91bGQgaGF2ZSB0eXBlCisgICAgIGN1cmxfb3BlbnNvY2tldF9jYWxsYmFjayAqLworICBDSU5JVChPUEVOU09DS0VURlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE2MyksCisgIENJTklUKE9QRU5TT0NLRVREQVRBLCBPQkpFQ1RQT0lOVCwgMTY0KSwKKworICAvKiBQT1NUIHZvbGF0aWxlIGlucHV0IGZpZWxkcy4gKi8KKyAgQ0lOSVQoQ09QWVBPU1RGSUVMRFMsIE9CSkVDVFBPSU5ULCAxNjUpLAorCisgIC8qIHNldCB0cmFuc2ZlciBtb2RlICg7dHlwZT08YXxpPikgd2hlbiBkb2luZyBGVFAgdmlhIGFuIEhUVFAgcHJveHkgKi8KKyAgQ0lOSVQoUFJPWFlfVFJBTlNGRVJfTU9ERSwgTE9ORywgMTY2KSwKKworICAvKiBDYWxsYmFjayBmdW5jdGlvbiBmb3Igc2Vla2luZyBpbiB0aGUgaW5wdXQgc3RyZWFtICovCisgIENJTklUKFNFRUtGVU5DVElPTiwgRlVOQ1RJT05QT0lOVCwgMTY3KSwKKyAgQ0lOSVQoU0VFS0RBVEEsIE9CSkVDVFBPSU5ULCAxNjgpLAorCisgIC8qIENSTCBmaWxlICovCisgIENJTklUKENSTEZJTEUsIE9CSkVDVFBPSU5ULCAxNjkpLAorCisgIC8qIElzc3VlciBjZXJ0aWZpY2F0ZSAqLworICBDSU5JVChJU1NVRVJDRVJULCBPQkpFQ1RQT0lOVCwgMTcwKSwKKworICAvKiAoSVB2NikgQWRkcmVzcyBzY29wZSAqLworICBDSU5JVChBRERSRVNTX1NDT1BFLCBMT05HLCAxNzEpLAorCisgIC8qIENvbGxlY3QgY2VydGlmaWNhdGUgY2hhaW4gaW5mbyBhbmQgYWxsb3cgaXQgdG8gZ2V0IHJldHJpZXZhYmxlIHdpdGgKKyAgICAgQ1VSTElORk9fQ0VSVElORk8gYWZ0ZXIgdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLiAoVW5mb3J0dW5hdGVseSkgb25seQorICAgICB3b3JraW5nIHdpdGggT3BlblNTTC1wb3dlcmVkIGJ1aWxkcy4gKi8KKyAgQ0lOSVQoQ0VSVElORk8sIExPTkcsIDE3MiksCisKKyAgLyogIm5hbWUiIGFuZCAicHdkIiB0byB1c2Ugd2hlbiBmZXRjaGluZy4gKi8KKyAgQ0lOSVQoVVNFUk5BTUUsIE9CSkVDVFBPSU5ULCAxNzMpLAorICBDSU5JVChQQVNTV09SRCwgT0JKRUNUUE9JTlQsIDE3NCksCisKKyAgICAvKiAibmFtZSIgYW5kICJwd2QiIHRvIHVzZSB3aXRoIFByb3h5IHdoZW4gZmV0Y2hpbmcuICovCisgIENJTklUKFBST1hZVVNFUk5BTUUsIE9CSkVDVFBPSU5ULCAxNzUpLAorICBDSU5JVChQUk9YWVBBU1NXT1JELCBPQkpFQ1RQT0lOVCwgMTc2KSwKKworICAvKiBDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBob3N0bmFtZXMgZGVmaW5pbmcgbm8tcHJveHkgem9uZXMuIFRoZXNlIHNob3VsZAorICAgICBtYXRjaCBib3RoIGhvc3RuYW1lcyBkaXJlY3RseSwgYW5kIGhvc3RuYW1lcyB3aXRoaW4gYSBkb21haW4uIEZvcgorICAgICBleGFtcGxlLCBsb2NhbC5jb20gd2lsbCBtYXRjaCBsb2NhbC5jb20gYW5kIHd3dy5sb2NhbC5jb20sIGJ1dCBOT1QKKyAgICAgbm90bG9jYWwuY29tIG9yIHd3dy5ub3Rsb2NhbC5jb20uIEZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIKKyAgICAgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMsIC5sb2NhbC5jb20gd2lsbCBiZSBjb25zaWRlcmVkIHRvIGJlIHRoZSBzYW1lIGFzCisgICAgIGxvY2FsLmNvbS4gQSBzaW5nbGUgKiBpcyB0aGUgb25seSB2YWxpZCB3aWxkY2FyZCwgYW5kIGVmZmVjdGl2ZWx5CisgICAgIGRpc2FibGVzIHRoZSB1c2Ugb2YgcHJveHkuICovCisgIENJTklUKE5PUFJPWFksIE9CSkVDVFBPSU5ULCAxNzcpLAorCisgIC8qIGJsb2NrIHNpemUgZm9yIFRGVFAgdHJhbnNmZXJzICovCisgIENJTklUKFRGVFBfQkxLU0laRSwgTE9ORywgMTc4KSwKKworICAvKiBTb2NrcyBTZXJ2aWNlICovCisgIENJTklUKFNPQ0tTNV9HU1NBUElfU0VSVklDRSwgT0JKRUNUUE9JTlQsIDE3OSksCisKKyAgLyogU29ja3MgU2VydmljZSAqLworICBDSU5JVChTT0NLUzVfR1NTQVBJX05FQywgTE9ORywgMTgwKSwKKworICAvKiBzZXQgdGhlIGJpdG1hc2sgZm9yIHRoZSBwcm90b2NvbHMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGZvciB0aGUKKyAgICAgdHJhbnNmZXIsIHdoaWNoIHRodXMgaGVscHMgdGhlIGFwcCB3aGljaCB0YWtlcyBVUkxzIGZyb20gdXNlcnMgb3Igb3RoZXIKKyAgICAgZXh0ZXJuYWwgaW5wdXRzIGFuZCB3YW50IHRvIHJlc3RyaWN0IHdoYXQgcHJvdG9jb2wocykgdG8gZGVhbAorICAgICB3aXRoLiBEZWZhdWx0cyB0byBDVVJMUFJPVE9fQUxMLiAqLworICBDSU5JVChQUk9UT0NPTFMsIExPTkcsIDE4MSksCisKKyAgLyogc2V0IHRoZSBiaXRtYXNrIGZvciB0aGUgcHJvdG9jb2xzIHRoYXQgbGliY3VybCBpcyBhbGxvd2VkIHRvIGZvbGxvdyB0bywKKyAgICAgYXMgYSBzdWJzZXQgb2YgdGhlIENVUkxPUFRfUFJPVE9DT0xTIG9uZXMuIFRoYXQgbWVhbnMgdGhlIHByb3RvY29sIG5lZWRzCisgICAgIHRvIGJlIHNldCBpbiBib3RoIGJpdG1hc2tzIHRvIGJlIGFsbG93ZWQgdG8gZ2V0IHJlZGlyZWN0ZWQgdG8uIERlZmF1bHRzCisgICAgIHRvIGFsbCBwcm90b2NvbHMgZXhjZXB0IEZJTEUgYW5kIFNDUC4gKi8KKyAgQ0lOSVQoUkVESVJfUFJPVE9DT0xTLCBMT05HLCAxODIpLAorCisgIC8qIHNldCB0aGUgU1NIIGtub3duaG9zdCBmaWxlIG5hbWUgdG8gdXNlICovCisgIENJTklUKFNTSF9LTk9XTkhPU1RTLCBPQkpFQ1RQT0lOVCwgMTgzKSwKKworICAvKiBzZXQgdGhlIFNTSCBob3N0IGtleSBjYWxsYmFjaywgbXVzdCBwb2ludCB0byBhIGN1cmxfc3Noa2V5Y2FsbGJhY2sKKyAgICAgZnVuY3Rpb24gKi8KKyAgQ0lOSVQoU1NIX0tFWUZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxODQpLAorCisgIC8qIHNldCB0aGUgU1NIIGhvc3Qga2V5IGNhbGxiYWNrIGN1c3RvbSBwb2ludGVyICovCisgIENJTklUKFNTSF9LRVlEQVRBLCBPQkpFQ1RQT0lOVCwgMTg1KSwKKworICAvKiBzZXQgdGhlIFNNVFAgbWFpbCBvcmlnaW5hdG9yICovCisgIENJTklUKE1BSUxfRlJPTSwgT0JKRUNUUE9JTlQsIDE4NiksCisKKyAgLyogc2V0IHRoZSBTTVRQIG1haWwgcmVjZWl2ZXIocykgKi8KKyAgQ0lOSVQoTUFJTF9SQ1BULCBPQkpFQ1RQT0lOVCwgMTg3KSwKKworICAvKiBGVFA6IHNlbmQgUFJFVCBiZWZvcmUgUEFTViAqLworICBDSU5JVChGVFBfVVNFX1BSRVQsIExPTkcsIDE4OCksCisKKyAgLyogUlRTUCByZXF1ZXN0IG1ldGhvZCAoT1BUSU9OUywgU0VUVVAsIFBMQVksIGV0Yy4uLikgKi8KKyAgQ0lOSVQoUlRTUF9SRVFVRVNULCBMT05HLCAxODkpLAorCisgIC8qIFRoZSBSVFNQIHNlc3Npb24gaWRlbnRpZmllciAqLworICBDSU5JVChSVFNQX1NFU1NJT05fSUQsIE9CSkVDVFBPSU5ULCAxOTApLAorCisgIC8qIFRoZSBSVFNQIHN0cmVhbSBVUkkgKi8KKyAgQ0lOSVQoUlRTUF9TVFJFQU1fVVJJLCBPQkpFQ1RQT0lOVCwgMTkxKSwKKworICAvKiBUaGUgVHJhbnNwb3J0OiBoZWFkZXIgdG8gdXNlIGluIFJUU1AgcmVxdWVzdHMgKi8KKyAgQ0lOSVQoUlRTUF9UUkFOU1BPUlQsIE9CSkVDVFBPSU5ULCAxOTIpLAorCisgIC8qIE1hbnVhbGx5IGluaXRpYWxpemUgdGhlIGNsaWVudCBSVFNQIENTZXEgZm9yIHRoaXMgaGFuZGxlICovCisgIENJTklUKFJUU1BfQ0xJRU5UX0NTRVEsIExPTkcsIDE5MyksCisKKyAgLyogTWFudWFsbHkgaW5pdGlhbGl6ZSB0aGUgc2VydmVyIFJUU1AgQ1NlcSBmb3IgdGhpcyBoYW5kbGUgKi8KKyAgQ0lOSVQoUlRTUF9TRVJWRVJfQ1NFUSwgTE9ORywgMTk0KSwKKworICAvKiBUaGUgc3RyZWFtIHRvIHBhc3MgdG8gSU5URVJMRUFWRUZVTkNUSU9OLiAqLworICBDSU5JVChJTlRFUkxFQVZFREFUQSwgT0JKRUNUUE9JTlQsIDE5NSksCisKKyAgLyogTGV0IHRoZSBhcHBsaWNhdGlvbiBkZWZpbmUgYSBjdXN0b20gd3JpdGUgbWV0aG9kIGZvciBSVFAgZGF0YSAqLworICBDSU5JVChJTlRFUkxFQVZFRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE5NiksCisKKyAgLyogVHVybiBvbiB3aWxkY2FyZCBtYXRjaGluZyAqLworICBDSU5JVChXSUxEQ0FSRE1BVENILCBMT05HLCAxOTcpLAorCisgIC8qIERpcmVjdG9yeSBtYXRjaGluZyBjYWxsYmFjayBjYWxsZWQgYmVmb3JlIGRvd25sb2FkaW5nIG9mIGFuCisgICAgIGluZGl2aWR1YWwgZmlsZSAoY2h1bmspIHN0YXJ0ZWQgKi8KKyAgQ0lOSVQoQ0hVTktfQkdOX0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAxOTgpLAorCisgIC8qIERpcmVjdG9yeSBtYXRjaGluZyBjYWxsYmFjayBjYWxsZWQgYWZ0ZXIgdGhlIGZpbGUgKGNodW5rKQorICAgICB3YXMgZG93bmxvYWRlZCwgb3Igc2tpcHBlZCAqLworICBDSU5JVChDSFVOS19FTkRfRlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDE5OSksCisKKyAgLyogQ2hhbmdlIG1hdGNoIChmbm1hdGNoLWxpa2UpIGNhbGxiYWNrIGZvciB3aWxkY2FyZCBtYXRjaGluZyAqLworICBDSU5JVChGTk1BVENIX0ZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAyMDApLAorCisgIC8qIExldCB0aGUgYXBwbGljYXRpb24gZGVmaW5lIGN1c3RvbSBjaHVuayBkYXRhIHBvaW50ZXIgKi8KKyAgQ0lOSVQoQ0hVTktfREFUQSwgT0JKRUNUUE9JTlQsIDIwMSksCisKKyAgLyogRk5NQVRDSF9GVU5DVElPTiB1c2VyIHBvaW50ZXIgKi8KKyAgQ0lOSVQoRk5NQVRDSF9EQVRBLCBPQkpFQ1RQT0lOVCwgMjAyKSwKKworICAvKiBzZW5kIGxpbmtlZC1saXN0IG9mIG5hbWU6cG9ydDphZGRyZXNzIHNldHMgKi8KKyAgQ0lOSVQoUkVTT0xWRSwgT0JKRUNUUE9JTlQsIDIwMyksCisKKyAgLyogU2V0IGEgdXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0ZWQgVExTICovCisgIENJTklUKFRMU0FVVEhfVVNFUk5BTUUsIE9CSkVDVFBPSU5ULCAyMDQpLAorCisgIC8qIFNldCBhIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGVkIFRMUyAqLworICBDSU5JVChUTFNBVVRIX1BBU1NXT1JELCBPQkpFQ1RQT0lOVCwgMjA1KSwKKworICAvKiBTZXQgYXV0aGVudGljYXRpb24gdHlwZSBmb3IgYXV0aGVudGljYXRlZCBUTFMgKi8KKyAgQ0lOSVQoVExTQVVUSF9UWVBFLCBPQkpFQ1RQT0lOVCwgMjA2KSwKKworICAvKiBTZXQgdG8gMSB0byBlbmFibGUgdGhlICJURToiIGhlYWRlciBpbiBIVFRQIHJlcXVlc3RzIHRvIGFzayBmb3IKKyAgICAgY29tcHJlc3NlZCB0cmFuc2Zlci1lbmNvZGVkIHJlc3BvbnNlcy4gU2V0IHRvIDAgdG8gZGlzYWJsZSB0aGUgdXNlIG9mIFRFOgorICAgICBpbiBvdXRnb2luZyByZXF1ZXN0cy4gVGhlIGN1cnJlbnQgZGVmYXVsdCBpcyAwLCBidXQgaXQgbWlnaHQgY2hhbmdlIGluIGEKKyAgICAgZnV0dXJlIGxpYmN1cmwgcmVsZWFzZS4KKworICAgICBsaWJjdXJsIHdpbGwgYXNrIGZvciB0aGUgY29tcHJlc3NlZCBtZXRob2RzIGl0IGtub3dzIG9mLCBhbmQgaWYgdGhhdAorICAgICBpc24ndCBhbnksIGl0IHdpbGwgbm90IGFzayBmb3IgdHJhbnNmZXItZW5jb2RpbmcgYXQgYWxsIGV2ZW4gaWYgdGhpcworICAgICBvcHRpb24gaXMgc2V0IHRvIDEuCisKKyAgKi8KKyAgQ0lOSVQoVFJBTlNGRVJfRU5DT0RJTkcsIExPTkcsIDIwNyksCisKKyAgLyogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGNsb3Npbmcgc29ja2V0IChpbnN0ZWFkIG9mIGNsb3NlKDIpKS4gVGhlIGNhbGxiYWNrCisgICAgIHNob3VsZCBoYXZlIHR5cGUgY3VybF9jbG9zZXNvY2tldF9jYWxsYmFjayAqLworICBDSU5JVChDTE9TRVNPQ0tFVEZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCAyMDgpLAorICBDSU5JVChDTE9TRVNPQ0tFVERBVEEsIE9CSkVDVFBPSU5ULCAyMDkpLAorCisgIC8qIGFsbG93IEdTU0FQSSBjcmVkZW50aWFsIGRlbGVnYXRpb24gKi8KKyAgQ0lOSVQoR1NTQVBJX0RFTEVHQVRJT04sIExPTkcsIDIxMCksCisKKyAgLyogU2V0IHRoZSBuYW1lIHNlcnZlcnMgdG8gdXNlIGZvciBETlMgcmVzb2x1dGlvbiAqLworICBDSU5JVChETlNfU0VSVkVSUywgT0JKRUNUUE9JTlQsIDIxMSksCisKKyAgLyogVGltZS1vdXQgYWNjZXB0IG9wZXJhdGlvbnMgKGN1cnJlbnRseSBmb3IgRlRQIG9ubHkpIGFmdGVyIHRoaXMgYW1vdW50CisgICAgIG9mIG1pbGlzZWNvbmRzLiAqLworICBDSU5JVChBQ0NFUFRUSU1FT1VUX01TLCBMT05HLCAyMTIpLAorCisgIC8qIFNldCBUQ1Aga2VlcGFsaXZlICovCisgIENJTklUKFRDUF9LRUVQQUxJVkUsIExPTkcsIDIxMyksCisKKyAgLyogbm9uLXVuaXZlcnNhbCBrZWVwYWxpdmUga25vYnMgKExpbnV4LCBBSVgsIEhQLVVYLCBtb3JlKSAqLworICBDSU5JVChUQ1BfS0VFUElETEUsIExPTkcsIDIxNCksCisgIENJTklUKFRDUF9LRUVQSU5UVkwsIExPTkcsIDIxNSksCisKKyAgLyogRW5hYmxlL2Rpc2FibGUgc3BlY2lmaWMgU1NMIGZlYXR1cmVzIHdpdGggYSBiaXRtYXNrLCBzZWUgQ1VSTFNTTE9QVF8qICovCisgIENJTklUKFNTTF9PUFRJT05TLCBMT05HLCAyMTYpLAorCisgIC8qIHNldCB0aGUgU01UUCBhdXRoIG9yaWdpbmF0b3IgKi8KKyAgQ0lOSVQoTUFJTF9BVVRILCBPQkpFQ1RQT0lOVCwgMjE3KSwKKworICBDVVJMT1BUX0xBU1RFTlRSWSAvKiB0aGUgbGFzdCB1bnVzZWQgKi8KK30gQ1VSTG9wdGlvbjsKKworI2lmbmRlZiBDVVJMX05PX09MRElFUyAvKiBkZWZpbmUgdGhpcyB0byB0ZXN0IGlmIHlvdXIgYXBwIGJ1aWxkcyB3aXRoIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgb2Jzb2xldGUgc3R1ZmYgcmVtb3ZlZCEgKi8KKworLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBuYW1lcyAqLworLyogVGhlc2UgYXJlIHNjaGVkdWxlZCB0byBkaXNhcHBlYXIgYnkgMjAxMSAqLworCisvKiBUaGlzIHdhcyBhZGRlZCBpbiB2ZXJzaW9uIDcuMTkuMSAqLworI2RlZmluZSBDVVJMT1BUX1BPU1QzMDEgQ1VSTE9QVF9QT1NUUkVESVIKKworLyogVGhlc2UgYXJlIHNjaGVkdWxlZCB0byBkaXNhcHBlYXIgYnkgMjAwOSAqLworCisvKiBUaGUgZm9sbG93aW5nIHdlcmUgYWRkZWQgaW4gNy4xNy4wICovCisjZGVmaW5lIENVUkxPUFRfU1NMS0VZUEFTU1dEIENVUkxPUFRfS0VZUEFTU1dECisjZGVmaW5lIENVUkxPUFRfRlRQQVBQRU5EIENVUkxPUFRfQVBQRU5ECisjZGVmaW5lIENVUkxPUFRfRlRQTElTVE9OTFkgQ1VSTE9QVF9ESVJMSVNUT05MWQorI2RlZmluZSBDVVJMT1BUX0ZUUF9TU0wgQ1VSTE9QVF9VU0VfU1NMCisKKy8qIFRoZSBmb2xsb3dpbmcgd2VyZSBhZGRlZCBlYXJsaWVyICovCisKKyNkZWZpbmUgQ1VSTE9QVF9TU0xDRVJUUEFTU1dEIENVUkxPUFRfS0VZUEFTU1dECisjZGVmaW5lIENVUkxPUFRfS1JCNExFVkVMIENVUkxPUFRfS1JCTEVWRUwKKworI2Vsc2UKKy8qIFRoaXMgaXMgc2V0IGlmIENVUkxfTk9fT0xESUVTIGlzIGRlZmluZWQgYXQgY29tcGlsZS10aW1lICovCisjdW5kZWYgQ1VSTE9QVF9ETlNfVVNFX0dMT0JBTF9DQUNIRSAvKiBzb29uIG9ic29sZXRlICovCisjZW5kaWYKKworCisgIC8qIEJlbG93IGhlcmUgZm9sbG93cyBkZWZpbmVzIGZvciB0aGUgQ1VSTE9QVF9JUFJFU09MVkUgb3B0aW9uLiBJZiBhIGhvc3QKKyAgICAgbmFtZSByZXNvbHZlcyBhZGRyZXNzZXMgdXNpbmcgbW9yZSB0aGFuIG9uZSBJUCBwcm90b2NvbCB2ZXJzaW9uLCB0aGlzCisgICAgIG9wdGlvbiBtaWdodCBiZSBoYW5keSB0byBmb3JjZSBsaWJjdXJsIHRvIHVzZSBhIHNwZWNpZmljIElQIHZlcnNpb24uICovCisjZGVmaW5lIENVUkxfSVBSRVNPTFZFX1dIQVRFVkVSIDAgLyogZGVmYXVsdCwgcmVzb2x2ZXMgYWRkcmVzc2VzIHRvIGFsbCBJUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIHRoYXQgeW91ciBzeXN0ZW0gYWxsb3dzICovCisjZGVmaW5lIENVUkxfSVBSRVNPTFZFX1Y0ICAgICAgIDEgLyogcmVzb2x2ZSB0byBpcHY0IGFkZHJlc3NlcyAqLworI2RlZmluZSBDVVJMX0lQUkVTT0xWRV9WNiAgICAgICAyIC8qIHJlc29sdmUgdG8gaXB2NiBhZGRyZXNzZXMgKi8KKworICAvKiB0aHJlZSBjb252ZW5pZW50ICJhbGlhc2VzIiB0aGF0IGZvbGxvdyB0aGUgbmFtZSBzY2hlbWUgYmV0dGVyICovCisjZGVmaW5lIENVUkxPUFRfV1JJVEVEQVRBIENVUkxPUFRfRklMRQorI2RlZmluZSBDVVJMT1BUX1JFQUREQVRBICBDVVJMT1BUX0lORklMRQorI2RlZmluZSBDVVJMT1BUX0hFQURFUkRBVEEgQ1VSTE9QVF9XUklURUhFQURFUgorI2RlZmluZSBDVVJMT1BUX1JUU1BIRUFERVIgQ1VSTE9QVF9IVFRQSEVBREVSCisKKyAgLyogVGhlc2UgZW51bXMgYXJlIGZvciB1c2Ugd2l0aCB0aGUgQ1VSTE9QVF9IVFRQX1ZFUlNJT04gb3B0aW9uLiAqLworZW51bSB7CisgIENVUkxfSFRUUF9WRVJTSU9OX05PTkUsIC8qIHNldHRpbmcgdGhpcyBtZWFucyB3ZSBkb24ndCBjYXJlLCBhbmQgdGhhdCB3ZSdkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgdGhlIGxpYnJhcnkgdG8gY2hvb3NlIHRoZSBiZXN0IHBvc3NpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB1cyEgKi8KKyAgQ1VSTF9IVFRQX1ZFUlNJT05fMV8wLCAgLyogcGxlYXNlIHVzZSBIVFRQIDEuMCBpbiB0aGUgcmVxdWVzdCAqLworICBDVVJMX0hUVFBfVkVSU0lPTl8xXzEsICAvKiBwbGVhc2UgdXNlIEhUVFAgMS4xIGluIHRoZSByZXF1ZXN0ICovCisKKyAgQ1VSTF9IVFRQX1ZFUlNJT05fTEFTVCAvKiAqSUxMRUdBTCogaHR0cCB2ZXJzaW9uICovCit9OworCisvKgorICogUHVibGljIEFQSSBlbnVtcyBmb3IgUlRTUCByZXF1ZXN0cworICovCitlbnVtIHsKKyAgICBDVVJMX1JUU1BSRVFfTk9ORSwgLyogZmlyc3QgaW4gbGlzdCAqLworICAgIENVUkxfUlRTUFJFUV9PUFRJT05TLAorICAgIENVUkxfUlRTUFJFUV9ERVNDUklCRSwKKyAgICBDVVJMX1JUU1BSRVFfQU5OT1VOQ0UsCisgICAgQ1VSTF9SVFNQUkVRX1NFVFVQLAorICAgIENVUkxfUlRTUFJFUV9QTEFZLAorICAgIENVUkxfUlRTUFJFUV9QQVVTRSwKKyAgICBDVVJMX1JUU1BSRVFfVEVBUkRPV04sCisgICAgQ1VSTF9SVFNQUkVRX0dFVF9QQVJBTUVURVIsCisgICAgQ1VSTF9SVFNQUkVRX1NFVF9QQVJBTUVURVIsCisgICAgQ1VSTF9SVFNQUkVRX1JFQ09SRCwKKyAgICBDVVJMX1JUU1BSRVFfUkVDRUlWRSwKKyAgICBDVVJMX1JUU1BSRVFfTEFTVCAvKiBsYXN0IGluIGxpc3QgKi8KK307CisKKyAgLyogVGhlc2UgZW51bXMgYXJlIGZvciB1c2Ugd2l0aCB0aGUgQ1VSTE9QVF9ORVRSQyBvcHRpb24uICovCitlbnVtIENVUkxfTkVUUkNfT1BUSU9OIHsKKyAgQ1VSTF9ORVRSQ19JR05PUkVELCAgICAgLyogVGhlIC5uZXRyYyB3aWxsIG5ldmVyIGJlIHJlYWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQuICovCisgIENVUkxfTkVUUkNfT1BUSU9OQUwsICAgIC8qIEEgdXNlcjpwYXNzd29yZCBpbiB0aGUgVVJMIHdpbGwgYmUgcHJlZmVycmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRvIG9uZSBpbiB0aGUgLm5ldHJjLiAqLworICBDVVJMX05FVFJDX1JFUVVJUkVELCAgICAvKiBBIHVzZXI6cGFzc3dvcmQgaW4gdGhlIFVSTCB3aWxsIGJlIGlnbm9yZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFVubGVzcyBvbmUgaXMgc2V0IHByb2dyYW1tYXRpY2FsbHksIHRoZSAubmV0cmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICogd2lsbCBiZSBxdWVyaWVkLiAqLworICBDVVJMX05FVFJDX0xBU1QKK307CisKK2VudW0geworICBDVVJMX1NTTFZFUlNJT05fREVGQVVMVCwKKyAgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxLAorICBDVVJMX1NTTFZFUlNJT05fU1NMdjIsCisgIENVUkxfU1NMVkVSU0lPTl9TU0x2MywKKworICBDVVJMX1NTTFZFUlNJT05fTEFTVCAvKiBuZXZlciB1c2UsIGtlZXAgbGFzdCAqLworfTsKKworZW51bSBDVVJMX1RMU0FVVEggeworICBDVVJMX1RMU0FVVEhfTk9ORSwKKyAgQ1VSTF9UTFNBVVRIX1NSUCwKKyAgQ1VSTF9UTFNBVVRIX0xBU1QgLyogbmV2ZXIgdXNlLCBrZWVwIGxhc3QgKi8KK307CisKKy8qIHN5bWJvbHMgdG8gdXNlIHdpdGggQ1VSTE9QVF9QT1NUUkVESVIuCisgICBDVVJMX1JFRElSX1BPU1RfMzAxIGFuZCBDVVJMX1JFRElSX1BPU1RfMzAyIGNhbiBiZSBiaXR3aXNlIE9SZWQgc28gdGhhdAorICAgQ1VSTF9SRURJUl9QT1NUXzMwMSB8IENVUkxfUkVESVJfUE9TVF8zMDIgPT0gQ1VSTF9SRURJUl9QT1NUX0FMTCAqLworCisjZGVmaW5lIENVUkxfUkVESVJfR0VUX0FMTCAgMAorI2RlZmluZSBDVVJMX1JFRElSX1BPU1RfMzAxIDEKKyNkZWZpbmUgQ1VSTF9SRURJUl9QT1NUXzMwMiAyCisjZGVmaW5lIENVUkxfUkVESVJfUE9TVF9BTEwgKENVUkxfUkVESVJfUE9TVF8zMDF8Q1VSTF9SRURJUl9QT1NUXzMwMikKKwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSTF9USU1FQ09ORF9OT05FLAorCisgIENVUkxfVElNRUNPTkRfSUZNT0RTSU5DRSwKKyAgQ1VSTF9USU1FQ09ORF9JRlVOTU9EU0lOQ0UsCisgIENVUkxfVElNRUNPTkRfTEFTVE1PRCwKKworICBDVVJMX1RJTUVDT05EX0xBU1QKK30gY3VybF9UaW1lQ29uZDsKKworCisvKiBjdXJsX3N0cmVxdWFsKCkgYW5kIGN1cmxfc3RybmVxdWFsKCkgYXJlIHN1YmplY3QgZm9yIHJlbW92YWwgaW4gYSBmdXR1cmUKKyAgIGxpYmN1cmwsIHNlZSBsaWIvUkVBRE1FLmN1cmx4IGZvciBkZXRhaWxzICovCitDVVJMX0VYVEVSTiBpbnQgKGN1cmxfc3RyZXF1YWwpKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7CitDVVJMX0VYVEVSTiBpbnQgKGN1cmxfc3RybmVxdWFsKShjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBuKTsKKworLyogbmFtZSBpcyB1cHBlcmNhc2UgQ1VSTEZPUk1fPG5hbWU+ICovCisjaWZkZWYgQ0ZJTklUCisjdW5kZWYgQ0ZJTklUCisjZW5kaWYKKworI2lmZGVmIENVUkxfSVNPQ1BQCisjZGVmaW5lIENGSU5JVChuYW1lKSBDVVJMRk9STV8gIyMgbmFtZQorI2Vsc2UKKy8qIFRoZSBtYWNybyAiIyMiIGlzIElTTyBDLCB3ZSBhc3N1bWUgcHJlLUlTTyBDIGRvZXNuJ3Qgc3VwcG9ydCBpdC4gKi8KKyNkZWZpbmUgQ0ZJTklUKG5hbWUpIENVUkxGT1JNXy8qKi9uYW1lCisjZW5kaWYKKwordHlwZWRlZiBlbnVtIHsKKyAgQ0ZJTklUKE5PVEhJTkcpLCAgICAgICAgLyoqKioqKioqKiB0aGUgZmlyc3Qgb25lIGlzIHVudXNlZCAqKioqKioqKioqKiovCisKKyAgLyogICovCisgIENGSU5JVChDT1BZTkFNRSksCisgIENGSU5JVChQVFJOQU1FKSwKKyAgQ0ZJTklUKE5BTUVMRU5HVEgpLAorICBDRklOSVQoQ09QWUNPTlRFTlRTKSwKKyAgQ0ZJTklUKFBUUkNPTlRFTlRTKSwKKyAgQ0ZJTklUKENPTlRFTlRTTEVOR1RIKSwKKyAgQ0ZJTklUKEZJTEVDT05URU5UKSwKKyAgQ0ZJTklUKEFSUkFZKSwKKyAgQ0ZJTklUKE9CU09MRVRFKSwKKyAgQ0ZJTklUKEZJTEUpLAorCisgIENGSU5JVChCVUZGRVIpLAorICBDRklOSVQoQlVGRkVSUFRSKSwKKyAgQ0ZJTklUKEJVRkZFUkxFTkdUSCksCisKKyAgQ0ZJTklUKENPTlRFTlRUWVBFKSwKKyAgQ0ZJTklUKENPTlRFTlRIRUFERVIpLAorICBDRklOSVQoRklMRU5BTUUpLAorICBDRklOSVQoRU5EKSwKKyAgQ0ZJTklUKE9CU09MRVRFMiksCisKKyAgQ0ZJTklUKFNUUkVBTSksCisKKyAgQ1VSTEZPUk1fTEFTVEVOVFJZIC8qIHRoZSBsYXN0IHVudXNlZCAqLworfSBDVVJMZm9ybW9wdGlvbjsKKworI3VuZGVmIENGSU5JVCAvKiBkb25lICovCisKKy8qIHN0cnVjdHVyZSB0byBiZSB1c2VkIGFzIHBhcmFtZXRlciBmb3IgQ1VSTEZPUk1fQVJSQVkgKi8KK3N0cnVjdCBjdXJsX2Zvcm1zIHsKKyAgQ1VSTGZvcm1vcHRpb24gb3B0aW9uOworICBjb25zdCBjaGFyICAgICAqdmFsdWU7Cit9OworCisvKiB1c2UgdGhpcyBmb3IgbXVsdGlwYXJ0IGZvcm1wb3N0IGJ1aWxkaW5nICovCisvKiBSZXR1cm5zIGNvZGUgZm9yIGN1cmxfZm9ybWFkZCgpCisgKgorICogUmV0dXJuczoKKyAqIENVUkxfRk9STUFERF9PSyAgICAgICAgICAgICBvbiBzdWNjZXNzCisgKiBDVVJMX0ZPUk1BRERfTUVNT1JZICAgICAgICAgaWYgdGhlIEZvcm1JbmZvIGFsbG9jYXRpb24gZmFpbHMKKyAqIENVUkxfRk9STUFERF9PUFRJT05fVFdJQ0UgICBpZiBvbmUgb3B0aW9uIGlzIGdpdmVuIHR3aWNlIGZvciBvbmUgRm9ybQorICogQ1VSTF9GT1JNQUREX05VTEwgICAgICAgICAgIGlmIGEgbnVsbCBwb2ludGVyIHdhcyBnaXZlbiBmb3IgYSBjaGFyCisgKiBDVVJMX0ZPUk1BRERfTUVNT1JZICAgICAgICAgaWYgdGhlIGFsbG9jYXRpb24gb2YgYSBGb3JtSW5mbyBzdHJ1Y3QgZmFpbGVkCisgKiBDVVJMX0ZPUk1BRERfVU5LTk9XTl9PUFRJT04gaWYgYW4gdW5rbm93biBvcHRpb24gd2FzIHVzZWQKKyAqIENVUkxfRk9STUFERF9JTkNPTVBMRVRFICAgICBpZiB0aGUgc29tZSBGb3JtSW5mbyBpcyBub3QgY29tcGxldGUgKG9yIGVycm9yKQorICogQ1VSTF9GT1JNQUREX01FTU9SWSAgICAgICAgIGlmIGEgY3VybF9odHRwcG9zdCBzdHJ1Y3QgY2Fubm90IGJlIGFsbG9jYXRlZAorICogQ1VSTF9GT1JNQUREX01FTU9SWSAgICAgICAgIGlmIHNvbWUgYWxsb2NhdGlvbiBmb3Igc3RyaW5nIGNvcHlpbmcgZmFpbGVkLgorICogQ1VSTF9GT1JNQUREX0lMTEVHQUxfQVJSQVkgIGlmIGFuIGlsbGVnYWwgb3B0aW9uIGlzIHVzZWQgaW4gYW4gYXJyYXkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSTF9GT1JNQUREX09LLCAvKiBmaXJzdCwgbm8gZXJyb3IgKi8KKworICBDVVJMX0ZPUk1BRERfTUVNT1JZLAorICBDVVJMX0ZPUk1BRERfT1BUSU9OX1RXSUNFLAorICBDVVJMX0ZPUk1BRERfTlVMTCwKKyAgQ1VSTF9GT1JNQUREX1VOS05PV05fT1BUSU9OLAorICBDVVJMX0ZPUk1BRERfSU5DT01QTEVURSwKKyAgQ1VSTF9GT1JNQUREX0lMTEVHQUxfQVJSQVksCisgIENVUkxfRk9STUFERF9ESVNBQkxFRCwgLyogbGliY3VybCB3YXMgYnVpbHQgd2l0aCB0aGlzIGRpc2FibGVkICovCisKKyAgQ1VSTF9GT1JNQUREX0xBU1QgLyogbGFzdCAqLworfSBDVVJMRk9STWNvZGU7CisKKy8qCisgKiBOQU1FIGN1cmxfZm9ybWFkZCgpCisgKgorICogREVTQ1JJUFRJT04KKyAqCisgKiBQcmV0dHkgYWR2YW5jZWQgZnVuY3Rpb24gZm9yIGJ1aWxkaW5nIG11bHRpLXBhcnQgZm9ybXBvc3RzLiBFYWNoIGludm9rZQorICogYWRkcyBvbmUgcGFydCB0aGF0IHRvZ2V0aGVyIGNvbnN0cnVjdCBhIGZ1bGwgcG9zdC4gVGhlbiB1c2UKKyAqIENVUkxPUFRfSFRUUFBPU1QgdG8gc2VuZCBpdCBvZmYgdG8gbGliY3VybC4KKyAqLworQ1VSTF9FWFRFUk4gQ1VSTEZPUk1jb2RlIGN1cmxfZm9ybWFkZChzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKmh0dHBwb3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKmxhc3RfcG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKKworLyoKKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBjdXJsX2Zvcm1nZXQoKQorICogVGhlIHZvaWQgKmFyZyBwb2ludGVyIHdpbGwgYmUgdGhlIG9uZSBwYXNzZWQgYXMgc2Vjb25kIGFyZ3VtZW50IHRvCisgKiAgIGN1cmxfZm9ybWdldCgpLgorICogVGhlIGNoYXJhY3RlciBidWZmZXIgcGFzc2VkIHRvIGl0IG11c3Qgbm90IGJlIGZyZWVkLgorICogU2hvdWxkIHJldHVybiB0aGUgYnVmZmVyIGxlbmd0aCBwYXNzZWQgdG8gaXQgYXMgdGhlIGFyZ3VtZW50ICJsZW4iIG9uCisgKiAgIHN1Y2Nlc3MuCisgKi8KK3R5cGVkZWYgc2l6ZV90ICgqY3VybF9mb3JtZ2V0X2NhbGxiYWNrKSh2b2lkICphcmcsIGNvbnN0IGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKKworLyoKKyAqIE5BTUUgY3VybF9mb3JtZ2V0KCkKKyAqCisgKiBERVNDUklQVElPTgorICoKKyAqIFNlcmlhbGl6ZSBhIGN1cmxfaHR0cHBvc3Qgc3RydWN0IGJ1aWx0IHdpdGggY3VybF9mb3JtYWRkKCkuCisgKiBBY2NlcHRzIGEgdm9pZCBwb2ludGVyIGFzIHNlY29uZCBhcmd1bWVudCB3aGljaCB3aWxsIGJlIHBhc3NlZCB0bworICogdGhlIGN1cmxfZm9ybWdldF9jYWxsYmFjayBmdW5jdGlvbi4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCitDVVJMX0VYVEVSTiBpbnQgY3VybF9mb3JtZ2V0KHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpmb3JtLCB2b2lkICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfZm9ybWdldF9jYWxsYmFjayBhcHBlbmQpOworLyoKKyAqIE5BTUUgY3VybF9mb3JtZnJlZSgpCisgKgorICogREVTQ1JJUFRJT04KKyAqCisgKiBGcmVlIGEgbXVsdGlwYXJ0IGZvcm1wb3N0IHByZXZpb3VzbHkgYnVpbHQgd2l0aCBjdXJsX2Zvcm1hZGQoKS4KKyAqLworQ1VSTF9FWFRFUk4gdm9pZCBjdXJsX2Zvcm1mcmVlKHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpmb3JtKTsKKworLyoKKyAqIE5BTUUgY3VybF9nZXRlbnYoKQorICoKKyAqIERFU0NSSVBUSU9OCisgKgorICogUmV0dXJucyBhIG1hbGxvYygpJ2VkIHN0cmluZyB0aGF0IE1VU1QgYmUgY3VybF9mcmVlKCllZCBhZnRlciB1c2FnZSBpcworICogY29tcGxldGUuIERFUFJFQ0FURUQgLSBzZWUgbGliL1JFQURNRS5jdXJseAorICovCitDVVJMX0VYVEVSTiBjaGFyICpjdXJsX2dldGVudihjb25zdCBjaGFyICp2YXJpYWJsZSk7CisKKy8qCisgKiBOQU1FIGN1cmxfdmVyc2lvbigpCisgKgorICogREVTQ1JJUFRJT04KKyAqCisgKiBSZXR1cm5zIGEgc3RhdGljIGFzY2lpIHN0cmluZyBvZiB0aGUgbGliY3VybCB2ZXJzaW9uLgorICovCitDVVJMX0VYVEVSTiBjaGFyICpjdXJsX3ZlcnNpb24odm9pZCk7CisKKy8qCisgKiBOQU1FIGN1cmxfZWFzeV9lc2NhcGUoKQorICoKKyAqIERFU0NSSVBUSU9OCisgKgorICogRXNjYXBlcyBVUkwgc3RyaW5ncyAoY29udmVydHMgYWxsIGxldHRlcnMgY29uc2lkZXIgaWxsZWdhbCBpbiBVUkxzIHRvIHRoZWlyCisgKiAlWFggdmVyc2lvbnMpLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgYWxsb2NhdGVkIHN0cmluZyBvciBOVUxMIGlmIGFuCisgKiBlcnJvciBvY2N1cnJlZC4KKyAqLworQ1VSTF9FWFRFUk4gY2hhciAqY3VybF9lYXN5X2VzY2FwZShDVVJMICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCk7CisKKy8qIHRoZSBwcmV2aW91cyB2ZXJzaW9uOiAqLworQ1VSTF9FWFRFUk4gY2hhciAqY3VybF9lc2NhcGUoY29uc3QgY2hhciAqc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCk7CisKKworLyoKKyAqIE5BTUUgY3VybF9lYXN5X3VuZXNjYXBlKCkKKyAqCisgKiBERVNDUklQVElPTgorICoKKyAqIFVuZXNjYXBlcyBVUkwgZW5jb2RpbmcgaW4gc3RyaW5ncyAoY29udmVydHMgYWxsICVYWCBjb2RlcyB0byB0aGVpciA4Yml0CisgKiB2ZXJzaW9ucykuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBhbGxvY2F0ZWQgc3RyaW5nIG9yIE5VTEwgaWYgYW4gZXJyb3IKKyAqIG9jY3VycmVkLgorICogQ29udmVyc2lvbiBOb3RlOiBPbiBub24tQVNDSUkgcGxhdGZvcm1zIHRoZSBBU0NJSSAlWFggY29kZXMgYXJlCisgKiBjb252ZXJ0ZWQgaW50byB0aGUgaG9zdCBlbmNvZGluZy4KKyAqLworQ1VSTF9FWFRFUk4gY2hhciAqY3VybF9lYXN5X3VuZXNjYXBlKENVUkwgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm91dGxlbmd0aCk7CisKKy8qIHRoZSBwcmV2aW91cyB2ZXJzaW9uICovCitDVVJMX0VYVEVSTiBjaGFyICpjdXJsX3VuZXNjYXBlKGNvbnN0IGNoYXIgKnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCk7CisKKy8qCisgKiBOQU1FIGN1cmxfZnJlZSgpCisgKgorICogREVTQ1JJUFRJT04KKyAqCisgKiBQcm92aWRlZCBmb3IgZGUtYWxsb2NhdGlvbiBpbiB0aGUgc2FtZSB0cmFuc2xhdGlvbiB1bml0IHRoYXQgZGlkIHRoZQorICogYWxsb2NhdGlvbi4gQWRkZWQgaW4gbGliY3VybCA3LjEwCisgKi8KK0NVUkxfRVhURVJOIHZvaWQgY3VybF9mcmVlKHZvaWQgKnApOworCisvKgorICogTkFNRSBjdXJsX2dsb2JhbF9pbml0KCkKKyAqCisgKiBERVNDUklQVElPTgorICoKKyAqIGN1cmxfZ2xvYmFsX2luaXQoKSBzaG91bGQgYmUgaW52b2tlZCBleGFjdGx5IG9uY2UgZm9yIGVhY2ggYXBwbGljYXRpb24gdGhhdAorICogdXNlcyBsaWJjdXJsIGFuZCBiZWZvcmUgYW55IGNhbGwgb2Ygb3RoZXIgbGliY3VybCBmdW5jdGlvbnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBub3QgdGhyZWFkLXNhZmUhCisgKi8KK0NVUkxfRVhURVJOIENVUkxjb2RlIGN1cmxfZ2xvYmFsX2luaXQobG9uZyBmbGFncyk7CisKKy8qCisgKiBOQU1FIGN1cmxfZ2xvYmFsX2luaXRfbWVtKCkKKyAqCisgKiBERVNDUklQVElPTgorICoKKyAqIGN1cmxfZ2xvYmFsX2luaXQoKSBvciBjdXJsX2dsb2JhbF9pbml0X21lbSgpIHNob3VsZCBiZSBpbnZva2VkIGV4YWN0bHkgb25jZQorICogZm9yIGVhY2ggYXBwbGljYXRpb24gdGhhdCB1c2VzIGxpYmN1cmwuICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvCisgKiBpbml0aWFsaXplIGxpYmN1cmwgYW5kIHNldCB1c2VyIGRlZmluZWQgbWVtb3J5IG1hbmFnZW1lbnQgY2FsbGJhY2sKKyAqIGZ1bmN0aW9ucy4gIFVzZXJzIGNhbiBpbXBsZW1lbnQgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMgdG8gY2hlY2sgZm9yCisgKiBtZW1vcnkgbGVha3MsIGNoZWNrIGZvciBtaXMtdXNlIG9mIHRoZSBjdXJsIGxpYnJhcnkgZXRjLiAgVXNlciByZWdpc3RlcmVkCisgKiBjYWxsYmFjayByb3V0aW5lcyB3aXRoIGJlIGludm9rZWQgYnkgdGhpcyBsaWJyYXJ5IGluc3RlYWQgb2YgdGhlIHN5c3RlbQorICogbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMgbGlrZSBtYWxsb2MsIGZyZWUgZXRjLgorICovCitDVVJMX0VYVEVSTiBDVVJMY29kZSBjdXJsX2dsb2JhbF9pbml0X21lbShsb25nIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9tYWxsb2NfY2FsbGJhY2sgbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfZnJlZV9jYWxsYmFjayBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9yZWFsbG9jX2NhbGxiYWNrIHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3N0cmR1cF9jYWxsYmFjayBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9jYWxsb2NfY2FsbGJhY2sgYyk7CisKKy8qCisgKiBOQU1FIGN1cmxfZ2xvYmFsX2NsZWFudXAoKQorICoKKyAqIERFU0NSSVBUSU9OCisgKgorICogY3VybF9nbG9iYWxfY2xlYW51cCgpIHNob3VsZCBiZSBpbnZva2VkIGV4YWN0bHkgb25jZSBmb3IgZWFjaCBhcHBsaWNhdGlvbgorICogdGhhdCB1c2VzIGxpYmN1cmwKKyAqLworQ1VSTF9FWFRFUk4gdm9pZCBjdXJsX2dsb2JhbF9jbGVhbnVwKHZvaWQpOworCisvKiBsaW5rZWQtbGlzdCBzdHJ1Y3R1cmUgZm9yIHRoZSBDVVJMT1BUX1FVT1RFIG9wdGlvbiAoYW5kIG90aGVyKSAqLworc3RydWN0IGN1cmxfc2xpc3QgeworICBjaGFyICpkYXRhOworICBzdHJ1Y3QgY3VybF9zbGlzdCAqbmV4dDsKK307CisKKy8qCisgKiBOQU1FIGN1cmxfc2xpc3RfYXBwZW5kKCkKKyAqCisgKiBERVNDUklQVElPTgorICoKKyAqIEFwcGVuZHMgYSBzdHJpbmcgdG8gYSBsaW5rZWQgbGlzdC4gSWYgbm8gbGlzdCBleGlzdHMsIGl0IHdpbGwgYmUgY3JlYXRlZAorICogZmlyc3QuIFJldHVybnMgdGhlIG5ldyBsaXN0LCBhZnRlciBhcHBlbmRpbmcuCisgKi8KK0NVUkxfRVhURVJOIHN0cnVjdCBjdXJsX3NsaXN0ICpjdXJsX3NsaXN0X2FwcGVuZChzdHJ1Y3QgY3VybF9zbGlzdCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7CisKKy8qCisgKiBOQU1FIGN1cmxfc2xpc3RfZnJlZV9hbGwoKQorICoKKyAqIERFU0NSSVBUSU9OCisgKgorICogZnJlZSBhIHByZXZpb3VzbHkgYnVpbHQgY3VybF9zbGlzdC4KKyAqLworQ1VSTF9FWFRFUk4gdm9pZCBjdXJsX3NsaXN0X2ZyZWVfYWxsKHN0cnVjdCBjdXJsX3NsaXN0ICopOworCisvKgorICogTkFNRSBjdXJsX2dldGRhdGUoKQorICoKKyAqIERFU0NSSVBUSU9OCisgKgorICogUmV0dXJucyB0aGUgdGltZSwgaW4gc2Vjb25kcyBzaW5jZSAxIEphbiAxOTcwIG9mIHRoZSB0aW1lIHN0cmluZyBnaXZlbiBpbgorICogdGhlIGZpcnN0IGFyZ3VtZW50LiBUaGUgdGltZSBhcmd1bWVudCBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyB1bnVzZWQKKyAqIGFuZCBzaG91bGQgYmUgc2V0IHRvIE5VTEwuCisgKi8KK0NVUkxfRVhURVJOIHRpbWVfdCBjdXJsX2dldGRhdGUoY29uc3QgY2hhciAqcCwgY29uc3QgdGltZV90ICp1bnVzZWQpOworCisvKiBpbmZvIGFib3V0IHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiwgb25seSBmb3IgT3BlblNTTCBidWlsZHMuIEFza2VkCisgICBmb3Igd2l0aCBDVVJMT1BUX0NFUlRJTkZPIC8gQ1VSTElORk9fQ0VSVElORk8gKi8KK3N0cnVjdCBjdXJsX2NlcnRpbmZvIHsKKyAgaW50IG51bV9vZl9jZXJ0czsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNlcnRpZmljYXRlcyB3aXRoIGluZm9ybWF0aW9uICovCisgIHN0cnVjdCBjdXJsX3NsaXN0ICoqY2VydGluZm87IC8qIGZvciBlYWNoIGluZGV4IGluIHRoaXMgYXJyYXksIHRoZXJlJ3MgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWQgbGlzdCB3aXRoIHRleHR1YWwgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCAibmFtZTogdmFsdWUiICovCit9OworCisjZGVmaW5lIENVUkxJTkZPX1NUUklORyAgIDB4MTAwMDAwCisjZGVmaW5lIENVUkxJTkZPX0xPTkcgICAgIDB4MjAwMDAwCisjZGVmaW5lIENVUkxJTkZPX0RPVUJMRSAgIDB4MzAwMDAwCisjZGVmaW5lIENVUkxJTkZPX1NMSVNUICAgIDB4NDAwMDAwCisjZGVmaW5lIENVUkxJTkZPX01BU0sgICAgIDB4MGZmZmZmCisjZGVmaW5lIENVUkxJTkZPX1RZUEVNQVNLIDB4ZjAwMDAwCisKK3R5cGVkZWYgZW51bSB7CisgIENVUkxJTkZPX05PTkUsIC8qIGZpcnN0LCBuZXZlciB1c2UgdGhpcyAqLworICBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMICAgID0gQ1VSTElORk9fU1RSSU5HICsgMSwKKyAgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSAgICA9IENVUkxJTkZPX0xPTkcgICArIDIsCisgIENVUkxJTkZPX1RPVEFMX1RJTUUgICAgICAgPSBDVVJMSU5GT19ET1VCTEUgKyAzLAorICBDVVJMSU5GT19OQU1FTE9PS1VQX1RJTUUgID0gQ1VSTElORk9fRE9VQkxFICsgNCwKKyAgQ1VSTElORk9fQ09OTkVDVF9USU1FICAgICA9IENVUkxJTkZPX0RPVUJMRSArIDUsCisgIENVUkxJTkZPX1BSRVRSQU5TRkVSX1RJTUUgPSBDVVJMSU5GT19ET1VCTEUgKyA2LAorICBDVVJMSU5GT19TSVpFX1VQTE9BRCAgICAgID0gQ1VSTElORk9fRE9VQkxFICsgNywKKyAgQ1VSTElORk9fU0laRV9ET1dOTE9BRCAgICA9IENVUkxJTkZPX0RPVUJMRSArIDgsCisgIENVUkxJTkZPX1NQRUVEX0RPV05MT0FEICAgPSBDVVJMSU5GT19ET1VCTEUgKyA5LAorICBDVVJMSU5GT19TUEVFRF9VUExPQUQgICAgID0gQ1VSTElORk9fRE9VQkxFICsgMTAsCisgIENVUkxJTkZPX0hFQURFUl9TSVpFICAgICAgPSBDVVJMSU5GT19MT05HICAgKyAxMSwKKyAgQ1VSTElORk9fUkVRVUVTVF9TSVpFICAgICA9IENVUkxJTkZPX0xPTkcgICArIDEyLAorICBDVVJMSU5GT19TU0xfVkVSSUZZUkVTVUxUID0gQ1VSTElORk9fTE9ORyAgICsgMTMsCisgIENVUkxJTkZPX0ZJTEVUSU1FICAgICAgICAgPSBDVVJMSU5GT19MT05HICAgKyAxNCwKKyAgQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfRE9XTkxPQUQgICA9IENVUkxJTkZPX0RPVUJMRSArIDE1LAorICBDVVJMSU5GT19DT05URU5UX0xFTkdUSF9VUExPQUQgICAgID0gQ1VSTElORk9fRE9VQkxFICsgMTYsCisgIENVUkxJTkZPX1NUQVJUVFJBTlNGRVJfVElNRSA9IENVUkxJTkZPX0RPVUJMRSArIDE3LAorICBDVVJMSU5GT19DT05URU5UX1RZUEUgICAgID0gQ1VSTElORk9fU1RSSU5HICsgMTgsCisgIENVUkxJTkZPX1JFRElSRUNUX1RJTUUgICAgPSBDVVJMSU5GT19ET1VCTEUgKyAxOSwKKyAgQ1VSTElORk9fUkVESVJFQ1RfQ09VTlQgICA9IENVUkxJTkZPX0xPTkcgICArIDIwLAorICBDVVJMSU5GT19QUklWQVRFICAgICAgICAgID0gQ1VSTElORk9fU1RSSU5HICsgMjEsCisgIENVUkxJTkZPX0hUVFBfQ09OTkVDVENPREUgPSBDVVJMSU5GT19MT05HICAgKyAyMiwKKyAgQ1VSTElORk9fSFRUUEFVVEhfQVZBSUwgICA9IENVUkxJTkZPX0xPTkcgICArIDIzLAorICBDVVJMSU5GT19QUk9YWUFVVEhfQVZBSUwgID0gQ1VSTElORk9fTE9ORyAgICsgMjQsCisgIENVUkxJTkZPX09TX0VSUk5PICAgICAgICAgPSBDVVJMSU5GT19MT05HICAgKyAyNSwKKyAgQ1VSTElORk9fTlVNX0NPTk5FQ1RTICAgICA9IENVUkxJTkZPX0xPTkcgICArIDI2LAorICBDVVJMSU5GT19TU0xfRU5HSU5FUyAgICAgID0gQ1VSTElORk9fU0xJU1QgICsgMjcsCisgIENVUkxJTkZPX0NPT0tJRUxJU1QgICAgICAgPSBDVVJMSU5GT19TTElTVCAgKyAyOCwKKyAgQ1VSTElORk9fTEFTVFNPQ0tFVCAgICAgICA9IENVUkxJTkZPX0xPTkcgICArIDI5LAorICBDVVJMSU5GT19GVFBfRU5UUllfUEFUSCAgID0gQ1VSTElORk9fU1RSSU5HICsgMzAsCisgIENVUkxJTkZPX1JFRElSRUNUX1VSTCAgICAgPSBDVVJMSU5GT19TVFJJTkcgKyAzMSwKKyAgQ1VSTElORk9fUFJJTUFSWV9JUCAgICAgICA9IENVUkxJTkZPX1NUUklORyArIDMyLAorICBDVVJMSU5GT19BUFBDT05ORUNUX1RJTUUgID0gQ1VSTElORk9fRE9VQkxFICsgMzMsCisgIENVUkxJTkZPX0NFUlRJTkZPICAgICAgICAgPSBDVVJMSU5GT19TTElTVCAgKyAzNCwKKyAgQ1VSTElORk9fQ09ORElUSU9OX1VOTUVUICA9IENVUkxJTkZPX0xPTkcgICArIDM1LAorICBDVVJMSU5GT19SVFNQX1NFU1NJT05fSUQgID0gQ1VSTElORk9fU1RSSU5HICsgMzYsCisgIENVUkxJTkZPX1JUU1BfQ0xJRU5UX0NTRVEgPSBDVVJMSU5GT19MT05HICAgKyAzNywKKyAgQ1VSTElORk9fUlRTUF9TRVJWRVJfQ1NFUSA9IENVUkxJTkZPX0xPTkcgICArIDM4LAorICBDVVJMSU5GT19SVFNQX0NTRVFfUkVDViAgID0gQ1VSTElORk9fTE9ORyAgICsgMzksCisgIENVUkxJTkZPX1BSSU1BUllfUE9SVCAgICAgPSBDVVJMSU5GT19MT05HICAgKyA0MCwKKyAgQ1VSTElORk9fTE9DQUxfSVAgICAgICAgICA9IENVUkxJTkZPX1NUUklORyArIDQxLAorICBDVVJMSU5GT19MT0NBTF9QT1JUICAgICAgID0gQ1VSTElORk9fTE9ORyAgICsgNDIsCisgIC8qIEZpbGwgaW4gbmV3IGVudHJpZXMgYmVsb3cgaGVyZSEgKi8KKworICBDVVJMSU5GT19MQVNUT05FICAgICAgICAgID0gNDIKK30gQ1VSTElORk87CisKKy8qIENVUkxJTkZPX1JFU1BPTlNFX0NPREUgaXMgdGhlIG5ldyBuYW1lIGZvciB0aGUgb3B0aW9uIHByZXZpb3VzbHkga25vd24gYXMKKyAgIENVUkxJTkZPX0hUVFBfQ09ERSAqLworI2RlZmluZSBDVVJMSU5GT19IVFRQX0NPREUgQ1VSTElORk9fUkVTUE9OU0VfQ09ERQorCit0eXBlZGVmIGVudW0geworICBDVVJMQ0xPU0VQT0xJQ1lfTk9ORSwgLyogZmlyc3QsIG5ldmVyIHVzZSB0aGlzICovCisKKyAgQ1VSTENMT1NFUE9MSUNZX09MREVTVCwKKyAgQ1VSTENMT1NFUE9MSUNZX0xFQVNUX1JFQ0VOVExZX1VTRUQsCisgIENVUkxDTE9TRVBPTElDWV9MRUFTVF9UUkFGRklDLAorICBDVVJMQ0xPU0VQT0xJQ1lfU0xPV0VTVCwKKyAgQ1VSTENMT1NFUE9MSUNZX0NBTExCQUNLLAorCisgIENVUkxDTE9TRVBPTElDWV9MQVNUIC8qIGxhc3QsIG5ldmVyIHVzZSB0aGlzICovCit9IGN1cmxfY2xvc2Vwb2xpY3k7CisKKyNkZWZpbmUgQ1VSTF9HTE9CQUxfU1NMICgxPDwwKQorI2RlZmluZSBDVVJMX0dMT0JBTF9XSU4zMiAoMTw8MSkKKyNkZWZpbmUgQ1VSTF9HTE9CQUxfQUxMIChDVVJMX0dMT0JBTF9TU0x8Q1VSTF9HTE9CQUxfV0lOMzIpCisjZGVmaW5lIENVUkxfR0xPQkFMX05PVEhJTkcgMAorI2RlZmluZSBDVVJMX0dMT0JBTF9ERUZBVUxUIENVUkxfR0xPQkFMX0FMTAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2V0dXAgZGVmaW5lcywgcHJvdG9zIGV0YyBmb3IgdGhlIHNoYXJpbmcgc3R1ZmYuCisgKi8KKworLyogRGlmZmVyZW50IGRhdGEgbG9ja3MgZm9yIGEgc2luZ2xlIHNoYXJlICovCit0eXBlZGVmIGVudW0geworICBDVVJMX0xPQ0tfREFUQV9OT05FID0gMCwKKyAgLyogIENVUkxfTE9DS19EQVRBX1NIQVJFIGlzIHVzZWQgaW50ZXJuYWxseSB0byBzYXkgdGhhdAorICAgKiAgdGhlIGxvY2tpbmcgaXMganVzdCBtYWRlIHRvIGNoYW5nZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHNoYXJlCisgICAqICBpdHNlbGYuCisgICAqLworICBDVVJMX0xPQ0tfREFUQV9TSEFSRSwKKyAgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFLAorICBDVVJMX0xPQ0tfREFUQV9ETlMsCisgIENVUkxfTE9DS19EQVRBX1NTTF9TRVNTSU9OLAorICBDVVJMX0xPQ0tfREFUQV9DT05ORUNULAorICBDVVJMX0xPQ0tfREFUQV9MQVNUCit9IGN1cmxfbG9ja19kYXRhOworCisvKiBEaWZmZXJlbnQgbG9jayBhY2Nlc3MgdHlwZXMgKi8KK3R5cGVkZWYgZW51bSB7CisgIENVUkxfTE9DS19BQ0NFU1NfTk9ORSA9IDAsICAgLyogdW5zcGVjaWZpZWQgYWN0aW9uICovCisgIENVUkxfTE9DS19BQ0NFU1NfU0hBUkVEID0gMSwgLyogZm9yIHJlYWQgcGVyaGFwcyAqLworICBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSA9IDIsIC8qIGZvciB3cml0ZSBwZXJoYXBzICovCisgIENVUkxfTE9DS19BQ0NFU1NfTEFTVCAgICAgICAgLyogbmV2ZXIgdXNlICovCit9IGN1cmxfbG9ja19hY2Nlc3M7CisKK3R5cGVkZWYgdm9pZCAoKmN1cmxfbG9ja19mdW5jdGlvbikoQ1VSTCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2xvY2tfZGF0YSBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2xvY2tfYWNjZXNzIGxvY2t0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VycHRyKTsKK3R5cGVkZWYgdm9pZCAoKmN1cmxfdW5sb2NrX2Z1bmN0aW9uKShDVVJMICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9sb2NrX2RhdGEgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VycHRyKTsKKwordHlwZWRlZiB2b2lkIENVUkxTSDsKKwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSTFNIRV9PSywgIC8qIGFsbCBpcyBmaW5lICovCisgIENVUkxTSEVfQkFEX09QVElPTiwgLyogMSAqLworICBDVVJMU0hFX0lOX1VTRSwgICAgIC8qIDIgKi8KKyAgQ1VSTFNIRV9JTlZBTElELCAgICAvKiAzICovCisgIENVUkxTSEVfTk9NRU0sICAgICAgLyogNCBvdXQgb2YgbWVtb3J5ICovCisgIENVUkxTSEVfTk9UX0JVSUxUX0lOLCAvKiA1IGZlYXR1cmUgbm90IHByZXNlbnQgaW4gbGliICovCisgIENVUkxTSEVfTEFTVCAgICAgICAgLyogbmV2ZXIgdXNlICovCit9IENVUkxTSGNvZGU7CisKK3R5cGVkZWYgZW51bSB7CisgIENVUkxTSE9QVF9OT05FLCAgLyogZG9uJ3QgdXNlICovCisgIENVUkxTSE9QVF9TSEFSRSwgICAvKiBzcGVjaWZ5IGEgZGF0YSB0eXBlIHRvIHNoYXJlICovCisgIENVUkxTSE9QVF9VTlNIQVJFLCAvKiBzcGVjaWZ5IHdoaWNoIGRhdGEgdHlwZSB0byBzdG9wIHNoYXJpbmcgKi8KKyAgQ1VSTFNIT1BUX0xPQ0tGVU5DLCAgIC8qIHBhc3MgaW4gYSAnY3VybF9sb2NrX2Z1bmN0aW9uJyBwb2ludGVyICovCisgIENVUkxTSE9QVF9VTkxPQ0tGVU5DLCAvKiBwYXNzIGluIGEgJ2N1cmxfdW5sb2NrX2Z1bmN0aW9uJyBwb2ludGVyICovCisgIENVUkxTSE9QVF9VU0VSREFUQSwgICAvKiBwYXNzIGluIGEgdXNlciBkYXRhIHBvaW50ZXIgdXNlZCBpbiB0aGUgbG9jay91bmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLworICBDVVJMU0hPUFRfTEFTVCAgLyogbmV2ZXIgdXNlICovCit9IENVUkxTSG9wdGlvbjsKKworQ1VSTF9FWFRFUk4gQ1VSTFNIICpjdXJsX3NoYXJlX2luaXQodm9pZCk7CitDVVJMX0VYVEVSTiBDVVJMU0hjb2RlIGN1cmxfc2hhcmVfc2V0b3B0KENVUkxTSCAqLCBDVVJMU0hvcHRpb24gb3B0aW9uLCAuLi4pOworQ1VSTF9FWFRFUk4gQ1VSTFNIY29kZSBjdXJsX3NoYXJlX2NsZWFudXAoQ1VSTFNIICopOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU3RydWN0dXJlcyBmb3IgcXVlcnlpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cmwgbGlicmFyeSBhdCBydW50aW1lLgorICovCisKK3R5cGVkZWYgZW51bSB7CisgIENVUkxWRVJTSU9OX0ZJUlNULAorICBDVVJMVkVSU0lPTl9TRUNPTkQsCisgIENVUkxWRVJTSU9OX1RISVJELAorICBDVVJMVkVSU0lPTl9GT1VSVEgsCisgIENVUkxWRVJTSU9OX0xBU1QgLyogbmV2ZXIgYWN0dWFsbHkgdXNlIHRoaXMgKi8KK30gQ1VSTHZlcnNpb247CisKKy8qIFRoZSAnQ1VSTFZFUlNJT05fTk9XJyBpcyB0aGUgc3ltYm9saWMgbmFtZSBtZWFudCB0byBiZSB1c2VkIGJ5CisgICBiYXNpY2FsbHkgYWxsIHByb2dyYW1zIGV2ZXIgdGhhdCB3YW50IHRvIGdldCB2ZXJzaW9uIGluZm9ybWF0aW9uLiBJdCBpcworICAgbWVhbnQgdG8gYmUgYSBidWlsdC1pbiB2ZXJzaW9uIG51bWJlciBmb3Igd2hhdCBraW5kIG9mIHN0cnVjdCB0aGUgY2FsbGVyCisgICBleHBlY3RzLiBJZiB0aGUgc3RydWN0IGV2ZXIgY2hhbmdlcywgd2UgcmVkZWZpbmUgdGhlIE5PVyB0byBhbm90aGVyIGVudW0KKyAgIGZyb20gYWJvdmUuICovCisjZGVmaW5lIENVUkxWRVJTSU9OX05PVyBDVVJMVkVSU0lPTl9GT1VSVEgKKwordHlwZWRlZiBzdHJ1Y3QgeworICBDVVJMdmVyc2lvbiBhZ2U7ICAgICAgICAgIC8qIGFnZSBvZiB0aGUgcmV0dXJuZWQgc3RydWN0ICovCisgIGNvbnN0IGNoYXIgKnZlcnNpb247ICAgICAgLyogTElCQ1VSTF9WRVJTSU9OICovCisgIHVuc2lnbmVkIGludCB2ZXJzaW9uX251bTsgLyogTElCQ1VSTF9WRVJTSU9OX05VTSAqLworICBjb25zdCBjaGFyICpob3N0OyAgICAgICAgIC8qIE9TL2hvc3QvY3B1L21hY2hpbmUgd2hlbiBjb25maWd1cmVkICovCisgIGludCBmZWF0dXJlczsgICAgICAgICAgICAgLyogYml0bWFzaywgc2VlIGRlZmluZXMgYmVsb3cgKi8KKyAgY29uc3QgY2hhciAqc3NsX3ZlcnNpb247ICAvKiBodW1hbiByZWFkYWJsZSBzdHJpbmcgKi8KKyAgbG9uZyBzc2xfdmVyc2lvbl9udW07ICAgICAvKiBub3QgdXNlZCBhbnltb3JlLCBhbHdheXMgMCAqLworICBjb25zdCBjaGFyICpsaWJ6X3ZlcnNpb247IC8qIGh1bWFuIHJlYWRhYmxlIHN0cmluZyAqLworICAvKiBwcm90b2NvbHMgaXMgdGVybWluYXRlZCBieSBhbiBlbnRyeSB3aXRoIGEgTlVMTCBwcm90b25hbWUgKi8KKyAgY29uc3QgY2hhciAqIGNvbnN0ICpwcm90b2NvbHM7CisKKyAgLyogVGhlIGZpZWxkcyBiZWxvdyB0aGlzIHdlcmUgYWRkZWQgaW4gQ1VSTFZFUlNJT05fU0VDT05EICovCisgIGNvbnN0IGNoYXIgKmFyZXM7CisgIGludCBhcmVzX251bTsKKworICAvKiBUaGlzIGZpZWxkIHdhcyBhZGRlZCBpbiBDVVJMVkVSU0lPTl9USElSRCAqLworICBjb25zdCBjaGFyICpsaWJpZG47CisKKyAgLyogVGhlc2UgZmllbGQgd2VyZSBhZGRlZCBpbiBDVVJMVkVSU0lPTl9GT1VSVEggKi8KKworICAvKiBTYW1lIGFzICdfbGliaWNvbnZfdmVyc2lvbicgaWYgYnVpbHQgd2l0aCBIQVZFX0lDT05WICovCisgIGludCBpY29udl92ZXJfbnVtOworCisgIGNvbnN0IGNoYXIgKmxpYnNzaF92ZXJzaW9uOyAvKiBodW1hbiByZWFkYWJsZSBzdHJpbmcgKi8KKworfSBjdXJsX3ZlcnNpb25faW5mb19kYXRhOworCisjZGVmaW5lIENVUkxfVkVSU0lPTl9JUFY2ICAgICAgKDE8PDApICAvKiBJUHY2LWVuYWJsZWQgKi8KKyNkZWZpbmUgQ1VSTF9WRVJTSU9OX0tFUkJFUk9TNCAoMTw8MSkgIC8qIGtlcmJlcm9zIGF1dGggaXMgc3VwcG9ydGVkICovCisjZGVmaW5lIENVUkxfVkVSU0lPTl9TU0wgICAgICAgKDE8PDIpICAvKiBTU0wgb3B0aW9ucyBhcmUgcHJlc2VudCAqLworI2RlZmluZSBDVVJMX1ZFUlNJT05fTElCWiAgICAgICgxPDwzKSAgLyogbGlieiBmZWF0dXJlcyBhcmUgcHJlc2VudCAqLworI2RlZmluZSBDVVJMX1ZFUlNJT05fTlRMTSAgICAgICgxPDw0KSAgLyogTlRMTSBhdXRoIGlzIHN1cHBvcnRlZCAqLworI2RlZmluZSBDVVJMX1ZFUlNJT05fR1NTTkVHT1RJQVRFICgxPDw1KSAvKiBOZWdvdGlhdGUgYXV0aCBzdXBwb3J0ICovCisjZGVmaW5lIENVUkxfVkVSU0lPTl9ERUJVRyAgICAgKDE8PDYpICAvKiBidWlsdCB3aXRoIGRlYnVnIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSBDVVJMX1ZFUlNJT05fQVNZTkNIRE5TICgxPDw3KSAgLyogYXN5bmNocm9ub3VzIGRucyByZXNvbHZlcyAqLworI2RlZmluZSBDVVJMX1ZFUlNJT05fU1BORUdPICAgICgxPDw4KSAgLyogU1BORUdPIGF1dGggKi8KKyNkZWZpbmUgQ1VSTF9WRVJTSU9OX0xBUkdFRklMRSAoMTw8OSkgIC8qIHN1cHBvcnRzIGZpbGVzIGJpZ2dlciB0aGFuIDJHQiAqLworI2RlZmluZSBDVVJMX1ZFUlNJT05fSUROICAgICAgICgxPDwxMCkgLyogSW50ZXJuYXRpb25hbCBEb21haW4gTmFtZXMgc3VwcG9ydCAqLworI2RlZmluZSBDVVJMX1ZFUlNJT05fU1NQSSAgICAgICgxPDwxMSkgLyogU1NQSSBpcyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQ1VSTF9WRVJTSU9OX0NPTlYgICAgICAoMTw8MTIpIC8qIGNoYXJhY3RlciBjb252ZXJzaW9ucyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQ1VSTF9WRVJTSU9OX0NVUkxERUJVRyAoMTw8MTMpIC8qIGRlYnVnIG1lbW9yeSB0cmFja2luZyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQ1VSTF9WRVJTSU9OX1RMU0FVVEhfU1JQICgxPDwxNCkgLyogVExTLVNSUCBhdXRoIGlzIHN1cHBvcnRlZCAqLworI2RlZmluZSBDVVJMX1ZFUlNJT05fTlRMTV9XQiAgICgxPDwxNSkgLyogTlRMTSBkZWxlZ2F0aW5nIHRvIHdpbmJpbmQgaGVscGVyICovCisKKyAvKgorICogTkFNRSBjdXJsX3ZlcnNpb25faW5mbygpCisgKgorICogREVTQ1JJUFRJT04KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RhdGljIGNvcHkgb2YgdGhlIHZlcnNpb24gaW5mbworICogc3RydWN0LiBTZWUgYWJvdmUuCisgKi8KK0NVUkxfRVhURVJOIGN1cmxfdmVyc2lvbl9pbmZvX2RhdGEgKmN1cmxfdmVyc2lvbl9pbmZvKENVUkx2ZXJzaW9uKTsKKworLyoKKyAqIE5BTUUgY3VybF9lYXN5X3N0cmVycm9yKCkKKyAqCisgKiBERVNDUklQVElPTgorICoKKyAqIFRoZSBjdXJsX2Vhc3lfc3RyZXJyb3IgZnVuY3Rpb24gbWF5IGJlIHVzZWQgdG8gdHVybiBhIENVUkxjb2RlIHZhbHVlCisgKiBpbnRvIHRoZSBlcXVpdmFsZW50IGh1bWFuIHJlYWRhYmxlIGVycm9yIHN0cmluZy4gIFRoaXMgaXMgdXNlZnVsCisgKiBmb3IgcHJpbnRpbmcgbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlcy4KKyAqLworQ1VSTF9FWFRFUk4gY29uc3QgY2hhciAqY3VybF9lYXN5X3N0cmVycm9yKENVUkxjb2RlKTsKKworLyoKKyAqIE5BTUUgY3VybF9zaGFyZV9zdHJlcnJvcigpCisgKgorICogREVTQ1JJUFRJT04KKyAqCisgKiBUaGUgY3VybF9zaGFyZV9zdHJlcnJvciBmdW5jdGlvbiBtYXkgYmUgdXNlZCB0byB0dXJuIGEgQ1VSTFNIY29kZSB2YWx1ZQorICogaW50byB0aGUgZXF1aXZhbGVudCBodW1hbiByZWFkYWJsZSBlcnJvciBzdHJpbmcuICBUaGlzIGlzIHVzZWZ1bAorICogZm9yIHByaW50aW5nIG1lYW5pbmdmdWwgZXJyb3IgbWVzc2FnZXMuCisgKi8KK0NVUkxfRVhURVJOIGNvbnN0IGNoYXIgKmN1cmxfc2hhcmVfc3RyZXJyb3IoQ1VSTFNIY29kZSk7CisKKy8qCisgKiBOQU1FIGN1cmxfZWFzeV9wYXVzZSgpCisgKgorICogREVTQ1JJUFRJT04KKyAqCisgKiBUaGUgY3VybF9lYXN5X3BhdXNlIGZ1bmN0aW9uIHBhdXNlcyBvciB1bnBhdXNlcyB0cmFuc2ZlcnMuIFNlbGVjdCB0aGUgbmV3CisgKiBzdGF0ZSBieSBzZXR0aW5nIHRoZSBiaXRtYXNrLCB1c2UgdGhlIGNvbnZlbmllbmNlIGRlZmluZXMgYmVsb3cuCisgKgorICovCitDVVJMX0VYVEVSTiBDVVJMY29kZSBjdXJsX2Vhc3lfcGF1c2UoQ1VSTCAqaGFuZGxlLCBpbnQgYml0bWFzayk7CisKKyNkZWZpbmUgQ1VSTFBBVVNFX1JFQ1YgICAgICAoMTw8MCkKKyNkZWZpbmUgQ1VSTFBBVVNFX1JFQ1ZfQ09OVCAoMCkKKworI2RlZmluZSBDVVJMUEFVU0VfU0VORCAgICAgICgxPDwyKQorI2RlZmluZSBDVVJMUEFVU0VfU0VORF9DT05UICgwKQorCisjZGVmaW5lIENVUkxQQVVTRV9BTEwgICAgICAgKENVUkxQQVVTRV9SRUNWfENVUkxQQVVTRV9TRU5EKQorI2RlZmluZSBDVVJMUEFVU0VfQ09OVCAgICAgIChDVVJMUEFVU0VfUkVDVl9DT05UfENVUkxQQVVTRV9TRU5EX0NPTlQpCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisvKiB1bmZvcnR1bmF0ZWx5LCB0aGUgZWFzeS5oIGFuZCBtdWx0aS5oIGluY2x1ZGUgZmlsZXMgbmVlZCBvcHRpb25zIGFuZCBpbmZvCisgIHN0dWZmIGJlZm9yZSB0aGV5IGNhbiBiZSBpbmNsdWRlZCEgKi8KKyNpbmNsdWRlICJlYXN5LmgiIC8qIG5vdGhpbmcgaW4gY3VybCBpcyBmdW4gd2l0aG91dCB0aGUgZWFzeSBzdHVmZiAqLworI2luY2x1ZGUgIm11bHRpLmgiCisKKy8qIHRoZSB0eXBlY2hlY2tlciBkb2Vzbid0IHdvcmsgaW4gQysrICh5ZXQpICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0dOVUNfTUlOT1JfXykgJiYgXAorICAgICgoX19HTlVDX18gPiA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSkgJiYgXAorICAgICFkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVFlQRUNIRUNLKQorI2luY2x1ZGUgInR5cGVjaGVjay1nY2MuaCIKKyNlbHNlCisjaWYgZGVmaW5lZChfX1NURENfXykgJiYgKF9fU1REQ19fID49IDEpCisvKiBUaGlzIHByZXByb2Nlc3NvciBtYWdpYyB0aGF0IHJlcGxhY2VzIGEgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGNhbGwgaXMKKyAgIG9ubHkgZG9uZSB0byBtYWtlIHN1cmUgYXBwbGljYXRpb24gYXV0aG9ycyBwYXNzIGV4YWN0bHkgdGhyZWUgYXJndW1lbnRzCisgICB0byB0aGVzZSBmdW5jdGlvbnMuICovCisjZGVmaW5lIGN1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLG9wdCxwYXJhbSkgY3VybF9lYXN5X3NldG9wdChoYW5kbGUsb3B0LHBhcmFtKQorI2RlZmluZSBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsaW5mbyxhcmcpIGN1cmxfZWFzeV9nZXRpbmZvKGhhbmRsZSxpbmZvLGFyZykKKyNkZWZpbmUgY3VybF9zaGFyZV9zZXRvcHQoc2hhcmUsb3B0LHBhcmFtKSBjdXJsX3NoYXJlX3NldG9wdChzaGFyZSxvcHQscGFyYW0pCisjZGVmaW5lIGN1cmxfbXVsdGlfc2V0b3B0KGhhbmRsZSxvcHQscGFyYW0pIGN1cmxfbXVsdGlfc2V0b3B0KGhhbmRsZSxvcHQscGFyYW0pCisjZW5kaWYgLyogX19TVERDX18gPj0gMSAqLworI2VuZGlmIC8qIGdjYyA+PSA0LjMgJiYgIV9fY3BsdXNwbHVzICovCisKKyNlbmRpZiAvKiBfX0NVUkxfQ1VSTF9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmguY21ha2UgYi9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmguY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhNzcyZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaC5jbWFrZQpAQCAtMCwwICsxLDE4MCBAQAorI2lmbmRlZiBfX0NVUkxfQ1VSTEJVSUxEX0gKKyNkZWZpbmUgX19DVVJMX0NVUkxCVUlMRF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICBOT1RFUyBGT1IgQ09ORklHVVJFIENBUEFCTEUgU1lTVEVNUyAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogTk9URSAxOgorICogLS0tLS0tLQorICoKKyAqIE5vdGhpbmcgaW4gdGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIG1vZGlmaWVkIG9yIGFkanVzdGVkIGJ5IHRoZQorICogY3VybCBsaWJyYXJ5IHVzZXIgbm9yIGJ5IHRoZSBjdXJsIGxpYnJhcnkgYnVpbGRlci4KKyAqCisgKiBJZiB5b3UgdGhpbmsgdGhhdCBzb21ldGhpbmcgYWN0dWFsbHkgbmVlZHMgdG8gYmUgY2hhbmdlZCwgYWRqdXN0ZWQKKyAqIG9yIGZpeGVkIGluIHRoaXMgZmlsZSwgdGhlbiwgcmVwb3J0IGl0IG9uIHRoZSBsaWJjdXJsIGRldmVsb3BtZW50CisgKiBtYWlsaW5nIGxpc3Q6IGh0dHA6Ly9jb29sLmhheHguc2UvbWFpbG1hbi9saXN0aW5mby9jdXJsLWxpYnJhcnkvCisgKgorICogVGhpcyBoZWFkZXIgZmlsZSBzaGFsbCBvbmx5IGV4cG9ydCBzeW1ib2xzIHdoaWNoIGFyZSAnY3VybCcgb3IgJ0NVUkwnCisgKiBwcmVmaXhlZCwgb3RoZXJ3aXNlIHB1YmxpYyBuYW1lIHNwYWNlIHdvdWxkIGJlIHBvbGx1dGVkLgorICoKKyAqIE5PVEUgMjoKKyAqIC0tLS0tLS0KKyAqCisgKiBSaWdodCBub3cgeW91IG1pZ2h0IGJlIHN0YXJpbmcgYXQgZmlsZSBpbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmguaW4gb3IKKyAqIGF0IGZpbGUgaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oLCB0aGlzIGlzIGR1ZSB0byB0aGUgZm9sbG93aW5nIHJlYXNvbjoKKyAqCisgKiBPbiBzeXN0ZW1zIGNhcGFibGUgb2YgcnVubmluZyB0aGUgY29uZmlndXJlIHNjcmlwdCwgdGhlIGNvbmZpZ3VyZSBwcm9jZXNzCisgKiB3aWxsIG92ZXJ3cml0ZSB0aGUgZGlzdHJpYnV0ZWQgaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oIGZpbGUgd2l0aCBvbmUgdGhhdAorICogaXMgc3VpdGFibGUgYW5kIHNwZWNpZmljIHRvIHRoZSBsaWJyYXJ5IGJlaW5nIGNvbmZpZ3VyZWQgYW5kIGJ1aWx0LCB3aGljaAorICogaXMgZ2VuZXJhdGVkIGZyb20gdGhlIGluY2x1ZGUvY3VybC9jdXJsYnVpbGQuaC5pbiB0ZW1wbGF0ZSBmaWxlLgorICoKKyAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgREVGSU5JVElPTiBPRiBUSEVTRSBTWU1CT0xTIFNIQUxMIE5PVCBUQUtFIFBMQUNFIEFOWVdIRVJFIEVMU0UgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNpZmRlZiBDVVJMX1NJWkVPRl9MT05HCisjICBlcnJvciAiQ1VSTF9TSVpFT0ZfTE9ORyBzaGFsbCBub3QgYmUgZGVmaW5lZCBleGNlcHQgaW4gY3VybGJ1aWxkLmgiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfU0laRU9GX0xPTkdfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UCisjICBlcnJvciAiQ1VSTF9UWVBFT0ZfQ1VSTF9TT0NLTEVOX1Qgc2hhbGwgbm90IGJlIGRlZmluZWQgZXhjZXB0IGluIGN1cmxidWlsZC5oIgorICAgRXJyb3IgQ29tcGlsYXRpb25fYWJvcnRlZF9DVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVF9hbHJlYWR5X2RlZmluZWQKKyNlbmRpZgorCisjaWZkZWYgQ1VSTF9TSVpFT0ZfQ1VSTF9TT0NLTEVOX1QKKyMgIGVycm9yICJDVVJMX1NJWkVPRl9DVVJMX1NPQ0tMRU5fVCBzaGFsbCBub3QgYmUgZGVmaW5lZCBleGNlcHQgaW4gY3VybGJ1aWxkLmgiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfU0laRU9GX0NVUkxfU09DS0xFTl9UX2FscmVhZHlfZGVmaW5lZAorI2VuZGlmCisjaWZkZWYgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVAorIyAgZXJyb3IgIkNVUkxfVFlQRU9GX0NVUkxfT0ZGX1Qgc2hhbGwgbm90IGJlIGRlZmluZWQgZXhjZXB0IGluIGN1cmxidWlsZC5oIgorICAgRXJyb3IgQ29tcGlsYXRpb25fYWJvcnRlZF9DVVJMX1RZUEVPRl9DVVJMX09GRl9UX2FscmVhZHlfZGVmaW5lZAorI2VuZGlmCisKKyNpZmRlZiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCisjICBlcnJvciAiQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCBzaGFsbCBub3QgYmUgZGVmaW5lZCBleGNlcHQgaW4gY3VybGJ1aWxkLmgiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfRk9STUFUX0NVUkxfT0ZGX1RfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVCisjICBlcnJvciAiQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgc2hhbGwgbm90IGJlIGRlZmluZWQgZXhjZXB0IGluIGN1cmxidWlsZC5oIgorICAgRXJyb3IgQ29tcGlsYXRpb25fYWJvcnRlZF9DVVJMX0ZPUk1BVF9DVVJMX09GRl9UVV9hbHJlYWR5X2RlZmluZWQKKyNlbmRpZgorCisjaWZkZWYgQ1VSTF9GT1JNQVRfT0ZGX1QKKyMgIGVycm9yICJDVVJMX0ZPUk1BVF9PRkZfVCBzaGFsbCBub3QgYmUgZGVmaW5lZCBleGNlcHQgaW4gY3VybGJ1aWxkLmgiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfRk9STUFUX09GRl9UX2FscmVhZHlfZGVmaW5lZAorI2VuZGlmCisKKyNpZmRlZiBDVVJMX1NJWkVPRl9DVVJMX09GRl9UCisjICBlcnJvciAiQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCBzaGFsbCBub3QgYmUgZGVmaW5lZCBleGNlcHQgaW4gY3VybGJ1aWxkLmgiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfU0laRU9GX0NVUkxfT0ZGX1RfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIENVUkxfU1VGRklYX0NVUkxfT0ZGX1QKKyMgIGVycm9yICJDVVJMX1NVRkZJWF9DVVJMX09GRl9UIHNoYWxsIG5vdCBiZSBkZWZpbmVkIGV4Y2VwdCBpbiBjdXJsYnVpbGQuaCIKKyAgIEVycm9yIENvbXBpbGF0aW9uX2Fib3J0ZWRfQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVF9hbHJlYWR5X2RlZmluZWQKKyNlbmRpZgorCisjaWZkZWYgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUKKyMgIGVycm9yICJDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSBzaGFsbCBub3QgYmUgZGVmaW5lZCBleGNlcHQgaW4gY3VybGJ1aWxkLmgiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfU1VGRklYX0NVUkxfT0ZGX1RVX2FscmVhZHlfZGVmaW5lZAorI2VuZGlmCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICBFWFRFUk5BTCBJTlRFUkZBQ0UgU0VUVElOR1MgRk9SIENPTkZJR1VSRSBDQVBBQkxFIFNZU1RFTVMgT05MWSAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogQ29uZmlndXJlIHByb2Nlc3MgZGVmaW5lcyB0aGlzIHRvIDEgd2hlbiBpdCBmaW5kcyBvdXQgdGhhdCBzeXN0ZW0gICAqLworLyogaGVhZGVyIGZpbGUgc3lzL3R5cGVzLmggbXVzdCBiZSBpbmNsdWRlZCBieSB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiAqLworI2NtYWtlZGVmaW5lIENVUkxfUFVMTF9TWVNfVFlQRVNfSCAke0NVUkxfUFVMTF9TWVNfVFlQRVNfSH0KKyNpZmRlZiBDVVJMX1BVTExfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKy8qIENvbmZpZ3VyZSBwcm9jZXNzIGRlZmluZXMgdGhpcyB0byAxIHdoZW4gaXQgZmluZHMgb3V0IHRoYXQgc3lzdGVtICovCisvKiBoZWFkZXIgZmlsZSBzdGRpbnQuaCBtdXN0IGJlIGluY2x1ZGVkIGJ5IHRoZSBleHRlcm5hbCBpbnRlcmZhY2UuICAqLworI2NtYWtlZGVmaW5lIENVUkxfUFVMTF9TVERJTlRfSCAke0NVUkxfUFVMTF9TVERJTlRfSH0KKyNpZmRlZiBDVVJMX1BVTExfU1RESU5UX0gKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKy8qIENvbmZpZ3VyZSBwcm9jZXNzIGRlZmluZXMgdGhpcyB0byAxIHdoZW4gaXQgZmluZHMgb3V0IHRoYXQgc3lzdGVtICAqLworLyogaGVhZGVyIGZpbGUgaW50dHlwZXMuaCBtdXN0IGJlIGluY2x1ZGVkIGJ5IHRoZSBleHRlcm5hbCBpbnRlcmZhY2UuICovCisjY21ha2VkZWZpbmUgQ1VSTF9QVUxMX0lOVFRZUEVTX0ggJHtDVVJMX1BVTExfSU5UVFlQRVNfSH0KKyNpZmRlZiBDVVJMX1BVTExfSU5UVFlQRVNfSAorIyAgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorCisvKiBUaGUgc2l6ZSBvZiBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNjbWFrZWRlZmluZSBDVVJMX1NJWkVPRl9MT05HICR7Q1VSTF9TSVpFT0ZfTE9OR30KKworLyogSW50ZWdyYWwgZGF0YSB0eXBlIHVzZWQgZm9yIGN1cmxfc29ja2xlbl90LiAqLworI2NtYWtlZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UICR7Q1VSTF9UWVBFT0ZfQ1VSTF9TT0NLTEVOX1R9CisKKy8qIG9uIHdpbmRvd3Mgc29ja2xlbl90IGlzIGluIGhlcmUgKi8KKyNpZmRlZiBfV0lOMzIKKyMgIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjICBpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisKKy8qIERhdGEgdHlwZSBkZWZpbml0aW9uIG9mIGN1cmxfc29ja2xlbl90LiAqLwordHlwZWRlZiBDVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVCBjdXJsX3NvY2tsZW5fdDsKKworLyogVGhlIHNpemUgb2YgYGN1cmxfc29ja2xlbl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2NtYWtlZGVmaW5lIENVUkxfU0laRU9GX0NVUkxfU09DS0xFTl9UICR7Q1VSTF9TSVpFT0ZfQ1VSTF9TT0NLTEVOX1R9CisKKy8qIFNpZ25lZCBpbnRlZ3JhbCBkYXRhIHR5cGUgdXNlZCBmb3IgY3VybF9vZmZfdC4gKi8KKyNjbWFrZWRlZmluZSBDVVJMX1RZUEVPRl9DVVJMX09GRl9UICR7Q1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVH0KKworLyogRGF0YSB0eXBlIGRlZmluaXRpb24gb2YgY3VybF9vZmZfdC4gKi8KK3R5cGVkZWYgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCBjdXJsX29mZl90OworCisvKiBjdXJsX29mZl90IGZvcm1hdHRpbmcgc3RyaW5nIGRpcmVjdGl2ZSB3aXRob3V0ICIlIiBjb252ZXJzaW9uIHNwZWNpZmllci4gKi8KKyNjbWFrZWRlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICIke0NVUkxfRk9STUFUX0NVUkxfT0ZGX1R9IgorCisvKiB1bnNpZ25lZCBjdXJsX29mZl90IGZvcm1hdHRpbmcgc3RyaW5nIHdpdGhvdXQgIiUiIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAqLworI2NtYWtlZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVICIke0NVUkxfRk9STUFUX0NVUkxfT0ZGX1RVfSIKKworLyogY3VybF9vZmZfdCBmb3JtYXR0aW5nIHN0cmluZyBkaXJlY3RpdmUgd2l0aCAiJSIgY29udmVyc2lvbiBzcGVjaWZpZXIuICovCisjY21ha2VkZWZpbmUgQ1VSTF9GT1JNQVRfT0ZGX1QgIiR7Q1VSTF9GT1JNQVRfT0ZGX1R9IgorCisvKiBUaGUgc2l6ZSBvZiBgY3VybF9vZmZfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNjbWFrZWRlZmluZSBDVVJMX1NJWkVPRl9DVVJMX09GRl9UICR7Q1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVH0KKworLyogY3VybF9vZmZfdCBjb25zdGFudCBzdWZmaXguICovCisjY21ha2VkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCAke0NVUkxfU1VGRklYX0NVUkxfT0ZGX1R9CisKKy8qIHVuc2lnbmVkIGN1cmxfb2ZmX3QgY29uc3RhbnQgc3VmZml4LiAqLworI2NtYWtlZGVmaW5lIENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVICR7Q1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFV9CisKKyNlbmRpZiAvKiBfX0NVUkxfQ1VSTEJVSUxEX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaC5pbiBiL2N1cmwtNy4yNS4wL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTM0OGY0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oLmluCkBAIC0wLDAgKzEsMTkwIEBACisjaWZuZGVmIF9fQ1VSTF9DVVJMQlVJTERfSAorI2RlZmluZSBfX0NVUkxfQ1VSTEJVSUxEX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgIE5PVEVTIEZPUiBDT05GSUdVUkUgQ0FQQUJMRSBTWVNURU1TICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qCisgKiBOT1RFIDE6CisgKiAtLS0tLS0tCisgKgorICogTm90aGluZyBpbiB0aGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgbW9kaWZpZWQgb3IgYWRqdXN0ZWQgYnkgdGhlCisgKiBjdXJsIGxpYnJhcnkgdXNlciBub3IgYnkgdGhlIGN1cmwgbGlicmFyeSBidWlsZGVyLgorICoKKyAqIElmIHlvdSB0aGluayB0aGF0IHNvbWV0aGluZyBhY3R1YWxseSBuZWVkcyB0byBiZSBjaGFuZ2VkLCBhZGp1c3RlZAorICogb3IgZml4ZWQgaW4gdGhpcyBmaWxlLCB0aGVuLCByZXBvcnQgaXQgb24gdGhlIGxpYmN1cmwgZGV2ZWxvcG1lbnQKKyAqIG1haWxpbmcgbGlzdDogaHR0cDovL2Nvb2wuaGF4eC5zZS9tYWlsbWFuL2xpc3RpbmZvL2N1cmwtbGlicmFyeS8KKyAqCisgKiBUaGlzIGhlYWRlciBmaWxlIHNoYWxsIG9ubHkgZXhwb3J0IHN5bWJvbHMgd2hpY2ggYXJlICdjdXJsJyBvciAnQ1VSTCcKKyAqIHByZWZpeGVkLCBvdGhlcndpc2UgcHVibGljIG5hbWUgc3BhY2Ugd291bGQgYmUgcG9sbHV0ZWQuCisgKgorICogTk9URSAyOgorICogLS0tLS0tLQorICoKKyAqIFJpZ2h0IG5vdyB5b3UgbWlnaHQgYmUgc3RhcmluZyBhdCBmaWxlIGluY2x1ZGUvY3VybC9jdXJsYnVpbGQuaC5pbiBvcgorICogYXQgZmlsZSBpbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgsIHRoaXMgaXMgZHVlIHRvIHRoZSBmb2xsb3dpbmcgcmVhc29uOgorICoKKyAqIE9uIHN5c3RlbXMgY2FwYWJsZSBvZiBydW5uaW5nIHRoZSBjb25maWd1cmUgc2NyaXB0LCB0aGUgY29uZmlndXJlIHByb2Nlc3MKKyAqIHdpbGwgb3ZlcndyaXRlIHRoZSBkaXN0cmlidXRlZCBpbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmggZmlsZSB3aXRoIG9uZSB0aGF0CisgKiBpcyBzdWl0YWJsZSBhbmQgc3BlY2lmaWMgdG8gdGhlIGxpYnJhcnkgYmVpbmcgY29uZmlndXJlZCBhbmQgYnVpbHQsIHdoaWNoCisgKiBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oLmluIHRlbXBsYXRlIGZpbGUuCisgKgorICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICBERUZJTklUSU9OIE9GIFRIRVNFIFNZTUJPTFMgU0hBTEwgTk9UIFRBS0UgUExBQ0UgQU5ZV0hFUkUgRUxTRSAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2lmZGVmIENVUkxfU0laRU9GX0xPTkcKKyNlcnJvciAiQ1VSTF9TSVpFT0ZfTE9ORyBzaGFsbCBub3QgYmUgZGVmaW5lZCBleGNlcHQgaW4gY3VybGJ1aWxkLmgiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfU0laRU9GX0xPTkdfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UCisjZXJyb3IgIkNVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIHNoYWxsIG5vdCBiZSBkZWZpbmVkIGV4Y2VwdCBpbiBjdXJsYnVpbGQuaCIKKyAgIEVycm9yIENvbXBpbGF0aW9uX2Fib3J0ZWRfQ1VSTF9UWVBFT0ZfQ1VSTF9TT0NLTEVOX1RfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIENVUkxfU0laRU9GX0NVUkxfU09DS0xFTl9UCisjZXJyb3IgIkNVUkxfU0laRU9GX0NVUkxfU09DS0xFTl9UIHNoYWxsIG5vdCBiZSBkZWZpbmVkIGV4Y2VwdCBpbiBjdXJsYnVpbGQuaCIKKyAgIEVycm9yIENvbXBpbGF0aW9uX2Fib3J0ZWRfQ1VSTF9TSVpFT0ZfQ1VSTF9TT0NLTEVOX1RfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QKKyNlcnJvciAiQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCBzaGFsbCBub3QgYmUgZGVmaW5lZCBleGNlcHQgaW4gY3VybGJ1aWxkLmgiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfVFlQRU9GX0NVUkxfT0ZGX1RfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKKyNlcnJvciAiQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCBzaGFsbCBub3QgYmUgZGVmaW5lZCBleGNlcHQgaW4gY3VybGJ1aWxkLmgiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfRk9STUFUX0NVUkxfT0ZGX1RfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVCisjZXJyb3IgIkNVUkxfRk9STUFUX0NVUkxfT0ZGX1RVIHNoYWxsIG5vdCBiZSBkZWZpbmVkIGV4Y2VwdCBpbiBjdXJsYnVpbGQuaCIKKyAgIEVycm9yIENvbXBpbGF0aW9uX2Fib3J0ZWRfQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFVfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIENVUkxfRk9STUFUX09GRl9UCisjZXJyb3IgIkNVUkxfRk9STUFUX09GRl9UIHNoYWxsIG5vdCBiZSBkZWZpbmVkIGV4Y2VwdCBpbiBjdXJsYnVpbGQuaCIKKyAgIEVycm9yIENvbXBpbGF0aW9uX2Fib3J0ZWRfQ1VSTF9GT1JNQVRfT0ZGX1RfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIENVUkxfU0laRU9GX0NVUkxfT0ZGX1QKKyNlcnJvciAiQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCBzaGFsbCBub3QgYmUgZGVmaW5lZCBleGNlcHQgaW4gY3VybGJ1aWxkLmgiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfU0laRU9GX0NVUkxfT0ZGX1RfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIENVUkxfU1VGRklYX0NVUkxfT0ZGX1QKKyNlcnJvciAiQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCBzaGFsbCBub3QgYmUgZGVmaW5lZCBleGNlcHQgaW4gY3VybGJ1aWxkLmgiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfU1VGRklYX0NVUkxfT0ZGX1RfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVCisjZXJyb3IgIkNVUkxfU1VGRklYX0NVUkxfT0ZGX1RVIHNoYWxsIG5vdCBiZSBkZWZpbmVkIGV4Y2VwdCBpbiBjdXJsYnVpbGQuaCIKKyAgIEVycm9yIENvbXBpbGF0aW9uX2Fib3J0ZWRfQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFVfYWxyZWFkeV9kZWZpbmVkCisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogIEVYVEVSTkFMIElOVEVSRkFDRSBTRVRUSU5HUyBGT1IgQ09ORklHVVJFIENBUEFCTEUgU1lTVEVNUyBPTkxZICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiBDb25maWd1cmUgcHJvY2VzcyBkZWZpbmVzIHRoaXMgdG8gMSB3aGVuIGl0IGZpbmRzIG91dCB0aGF0IHN5c3RlbSAgKi8KKy8qIGhlYWRlciBmaWxlIHdzMnRjcGlwLmggbXVzdCBiZSBpbmNsdWRlZCBieSB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiAqLworI3VuZGVmIENVUkxfUFVMTF9XUzJUQ1BJUF9ICisjaWZkZWYgQ1VSTF9QVUxMX1dTMlRDUElQX0gKKyMgIGlmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjICAgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjICBlbmRpZgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgaW5jbHVkZSA8d2luc29jazIuaD4KKyMgIGluY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKworLyogQ29uZmlndXJlIHByb2Nlc3MgZGVmaW5lcyB0aGlzIHRvIDEgd2hlbiBpdCBmaW5kcyBvdXQgdGhhdCBzeXN0ZW0gICAqLworLyogaGVhZGVyIGZpbGUgc3lzL3R5cGVzLmggbXVzdCBiZSBpbmNsdWRlZCBieSB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiAqLworI3VuZGVmIENVUkxfUFVMTF9TWVNfVFlQRVNfSAorI2lmZGVmIENVUkxfUFVMTF9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworLyogQ29uZmlndXJlIHByb2Nlc3MgZGVmaW5lcyB0aGlzIHRvIDEgd2hlbiBpdCBmaW5kcyBvdXQgdGhhdCBzeXN0ZW0gKi8KKy8qIGhlYWRlciBmaWxlIHN0ZGludC5oIG11c3QgYmUgaW5jbHVkZWQgYnkgdGhlIGV4dGVybmFsIGludGVyZmFjZS4gICovCisjdW5kZWYgQ1VSTF9QVUxMX1NURElOVF9ICisjaWZkZWYgQ1VSTF9QVUxMX1NURElOVF9ICisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisvKiBDb25maWd1cmUgcHJvY2VzcyBkZWZpbmVzIHRoaXMgdG8gMSB3aGVuIGl0IGZpbmRzIG91dCB0aGF0IHN5c3RlbSAgKi8KKy8qIGhlYWRlciBmaWxlIGludHR5cGVzLmggbXVzdCBiZSBpbmNsdWRlZCBieSB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiAqLworI3VuZGVmIENVUkxfUFVMTF9JTlRUWVBFU19ICisjaWZkZWYgQ1VSTF9QVUxMX0lOVFRZUEVTX0gKKyMgIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKworLyogQ29uZmlndXJlIHByb2Nlc3MgZGVmaW5lcyB0aGlzIHRvIDEgd2hlbiBpdCBmaW5kcyBvdXQgdGhhdCBzeXN0ZW0gICAgKi8KKy8qIGhlYWRlciBmaWxlIHN5cy9zb2NrZXQuaCBtdXN0IGJlIGluY2x1ZGVkIGJ5IHRoZSBleHRlcm5hbCBpbnRlcmZhY2UuICovCisjdW5kZWYgQ1VSTF9QVUxMX1NZU19TT0NLRVRfSAorI2lmZGVmIENVUkxfUFVMTF9TWVNfU09DS0VUX0gKKyMgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCisvKiBUaGUgc2l6ZSBvZiBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBDVVJMX1NJWkVPRl9MT05HCisKKy8qIEludGVncmFsIGRhdGEgdHlwZSB1c2VkIGZvciBjdXJsX3NvY2tsZW5fdC4gKi8KKyN1bmRlZiBDVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVAorCisvKiBUaGUgc2l6ZSBvZiBgY3VybF9zb2NrbGVuX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgQ1VSTF9TSVpFT0ZfQ1VSTF9TT0NLTEVOX1QKKworLyogRGF0YSB0eXBlIGRlZmluaXRpb24gb2YgY3VybF9zb2NrbGVuX3QuICovCit0eXBlZGVmIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIGN1cmxfc29ja2xlbl90OworCisvKiBTaWduZWQgaW50ZWdyYWwgZGF0YSB0eXBlIHVzZWQgZm9yIGN1cmxfb2ZmX3QuICovCisjdW5kZWYgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVAorCisvKiBEYXRhIHR5cGUgZGVmaW5pdGlvbiBvZiBjdXJsX29mZl90LiAqLwordHlwZWRlZiBDVVJMX1RZUEVPRl9DVVJMX09GRl9UIGN1cmxfb2ZmX3Q7CisKKy8qIGN1cmxfb2ZmX3QgZm9ybWF0dGluZyBzdHJpbmcgZGlyZWN0aXZlIHdpdGhvdXQgIiUiIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAqLworI3VuZGVmIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKKworLyogdW5zaWduZWQgY3VybF9vZmZfdCBmb3JtYXR0aW5nIHN0cmluZyB3aXRob3V0ICIlIiBjb252ZXJzaW9uIHNwZWNpZmllci4gKi8KKyN1bmRlZiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UVQorCisvKiBjdXJsX29mZl90IGZvcm1hdHRpbmcgc3RyaW5nIGRpcmVjdGl2ZSB3aXRoICIlIiBjb252ZXJzaW9uIHNwZWNpZmllci4gKi8KKyN1bmRlZiBDVVJMX0ZPUk1BVF9PRkZfVAorCisvKiBUaGUgc2l6ZSBvZiBgY3VybF9vZmZfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBDVVJMX1NJWkVPRl9DVVJMX09GRl9UCisKKy8qIGN1cmxfb2ZmX3QgY29uc3RhbnQgc3VmZml4LiAqLworI3VuZGVmIENVUkxfU1VGRklYX0NVUkxfT0ZGX1QKKworLyogdW5zaWduZWQgY3VybF9vZmZfdCBjb25zdGFudCBzdWZmaXguICovCisjdW5kZWYgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUKKworI2VuZGlmIC8qIF9fQ1VSTF9DVVJMQlVJTERfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvaW5jbHVkZS9jdXJsL2N1cmxydWxlcy5oIGIvY3VybC03LjI1LjAvaW5jbHVkZS9jdXJsL2N1cmxydWxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYzEyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvY3VybHJ1bGVzLmgKQEAgLTAsMCArMSwyNjEgQEAKKyNpZm5kZWYgX19DVVJMX0NVUkxSVUxFU19ICisjZGVmaW5lIF9fQ1VSTF9DVVJMUlVMRVNfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICBDT01QSUxFIFRJTUUgU0FOSVRZIENIRUNLUyAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyoKKyAqIE5PVEUgMToKKyAqIC0tLS0tLS0KKyAqCisgKiBBbGwgY2hlY2tzIGRvbmUgaW4gdGhpcyBmaWxlIGFyZSBpbnRlbnRpb25hbGx5IHBsYWNlZCBpbiBhIHB1YmxpYworICogaGVhZGVyIGZpbGUgd2hpY2ggaXMgcHVsbGVkIGJ5IGN1cmwvY3VybC5oIHdoZW4gYW4gYXBwbGljYXRpb24gaXMKKyAqIGJlaW5nIGJ1aWx0IHVzaW5nIGFuIGFscmVhZHkgYnVpbHQgbGliY3VybCBsaWJyYXJ5LiBBZGRpdGlvbmFsbHkKKyAqIHRoaXMgZmlsZSBpcyBhbHNvIGluY2x1ZGVkIGFuZCB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlIGxpYnJhcnkuCisgKgorICogSWYgY29tcGlsYXRpb24gZmFpbHMgb24gdGhpcyBmaWxlIGl0IGlzIGNlcnRhaW5seSBzdXJlIHRoYXQgdGhlCisgKiBwcm9ibGVtIGlzIGVsc2V3aGVyZS4gSXQgY291bGQgYmUgYSBwcm9ibGVtIGluIHRoZSBjdXJsYnVpbGQuaAorICogaGVhZGVyIGZpbGUsIG9yIHNpbXBseSB0aGF0IHlvdSBhcmUgdXNpbmcgZGlmZmVyZW50IGNvbXBpbGF0aW9uCisgKiBzZXR0aW5ncyB0aGFuIHRob3NlIHVzZWQgdG8gYnVpbGQgdGhlIGxpYnJhcnkuCisgKgorICogTm90aGluZyBpbiB0aGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgbW9kaWZpZWQgb3IgYWRqdXN0ZWQgYnkgdGhlCisgKiBjdXJsIGxpYnJhcnkgdXNlciBub3IgYnkgdGhlIGN1cmwgbGlicmFyeSBidWlsZGVyLgorICoKKyAqIERvIG5vdCBkZWFjdGl2YXRlIGFueSBjaGVjaywgdGhlc2UgYXJlIGRvbmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgKiBsaWJyYXJ5IGlzIHByb3Blcmx5IGJ1aWx0IGFuZCB1c2VkLgorICoKKyAqIFlvdSBjYW4gZmluZCBmdXJ0aGVyIGhlbHAgb24gdGhlIGxpYmN1cmwgZGV2ZWxvcG1lbnQgbWFpbGluZyBsaXN0OgorICogaHR0cDovL2Nvb2wuaGF4eC5zZS9tYWlsbWFuL2xpc3RpbmZvL2N1cmwtbGlicmFyeS8KKyAqCisgKiBOT1RFIDIKKyAqIC0tLS0tLQorICoKKyAqIFNvbWUgb2YgdGhlIGZvbGxvd2luZyBjb21waWxlIHRpbWUgY2hlY2tzIGFyZSBiYXNlZCBvbiB0aGUgZmFjdAorICogdGhhdCB0aGUgZGltZW5zaW9uIG9mIGEgY29uc3RhbnQgYXJyYXkgY2FuIG5vdCBiZSBhIG5lZ2F0aXZlIG9uZS4KKyAqIEluIHRoaXMgd2F5IGlmIHRoZSBjb21waWxlIHRpbWUgdmVyaWZpY2F0aW9uIGZhaWxzLCB0aGUgY29tcGlsYXRpb24KKyAqIHdpbGwgZmFpbCBpc3N1aW5nIGFuIGVycm9yLiBUaGUgZXJyb3IgZGVzY3JpcHRpb24gd29yZGluZyBpcyBjb21waWxlcgorICogZGVwZW5kZW50IGJ1dCBpdCB3aWxsIGJlIHF1aXRlIHNpbWlsYXIgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgKgorICogICAibmVnYXRpdmUgc3Vic2NyaXB0IG9yIHN1YnNjcmlwdCBpcyB0b28gbGFyZ2UiCisgKiAgICJhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQiCisgKiAgICItMSBpcyBhbiBpbGxlZ2FsIGFycmF5IHNpemUiCisgKiAgICJzaXplIG9mIGFycmF5IGlzIG5lZ2F0aXZlIgorICoKKyAqIElmIHlvdSBhcmUgYnVpbGRpbmcgYW4gYXBwbGljYXRpb24gd2hpY2ggdHJpZXMgdG8gdXNlIGFuIGFscmVhZHkKKyAqIGJ1aWx0IGxpYmN1cmwgbGlicmFyeSBhbmQgeW91IGFyZSBnZXR0aW5nIHRoaXMga2luZCBvZiBlcnJvcnMgb24KKyAqIHRoaXMgZmlsZSwgaXQgaXMgYSBjbGVhciBpbmRpY2F0aW9uIHRoYXQgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuCisgKiBob3cgdGhlIGxpYnJhcnkgd2FzIGJ1aWx0IGFuZCBob3cgeW91IGFyZSB0cnlpbmcgdG8gdXNlIGl0IGZvciB5b3VyCisgKiBhcHBsaWNhdGlvbi4gWW91ciBhbHJlYWR5IGNvbXBpbGVkIG9yIGJpbmFyeSBsaWJyYXJ5IHByb3ZpZGVyIGlzIHRoZQorICogb25seSBvbmUgd2hvIGNhbiBnaXZlIHlvdSB0aGUgZGV0YWlscyB5b3UgbmVlZCB0byBwcm9wZXJseSB1c2UgaXQuCisgKi8KKworLyoKKyAqIFZlcmlmeSB0aGF0IHNvbWUgbWFjcm9zIGFyZSBhY3R1YWxseSBkZWZpbmVkLgorICovCisKKyNpZm5kZWYgQ1VSTF9TSVpFT0ZfTE9ORworIyAgZXJyb3IgIkNVUkxfU0laRU9GX0xPTkcgZGVmaW5pdGlvbiBpcyBtaXNzaW5nISIKKyAgIEVycm9yIENvbXBpbGF0aW9uX2Fib3J0ZWRfQ1VSTF9TSVpFT0ZfTE9OR19pc19taXNzaW5nCisjZW5kaWYKKworI2lmbmRlZiBDVVJMX1RZUEVPRl9DVVJMX1NPQ0tMRU5fVAorIyAgZXJyb3IgIkNVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIGRlZmluaXRpb24gaXMgbWlzc2luZyEiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UX2lzX21pc3NpbmcKKyNlbmRpZgorCisjaWZuZGVmIENVUkxfU0laRU9GX0NVUkxfU09DS0xFTl9UCisjICBlcnJvciAiQ1VSTF9TSVpFT0ZfQ1VSTF9TT0NLTEVOX1QgZGVmaW5pdGlvbiBpcyBtaXNzaW5nISIKKyAgIEVycm9yIENvbXBpbGF0aW9uX2Fib3J0ZWRfQ1VSTF9TSVpFT0ZfQ1VSTF9TT0NLTEVOX1RfaXNfbWlzc2luZworI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVAorIyAgZXJyb3IgIkNVUkxfVFlQRU9GX0NVUkxfT0ZGX1QgZGVmaW5pdGlvbiBpcyBtaXNzaW5nISIKKyAgIEVycm9yIENvbXBpbGF0aW9uX2Fib3J0ZWRfQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVF9pc19taXNzaW5nCisjZW5kaWYKKworI2lmbmRlZiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCisjICBlcnJvciAiQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCBkZWZpbml0aW9uIGlzIG1pc3NpbmchIgorICAgRXJyb3IgQ29tcGlsYXRpb25fYWJvcnRlZF9DVVJMX0ZPUk1BVF9DVVJMX09GRl9UX2lzX21pc3NpbmcKKyNlbmRpZgorCisjaWZuZGVmIENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVCisjICBlcnJvciAiQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgZGVmaW5pdGlvbiBpcyBtaXNzaW5nISIKKyAgIEVycm9yIENvbXBpbGF0aW9uX2Fib3J0ZWRfQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFVfaXNfbWlzc2luZworI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9GT1JNQVRfT0ZGX1QKKyMgIGVycm9yICJDVVJMX0ZPUk1BVF9PRkZfVCBkZWZpbml0aW9uIGlzIG1pc3NpbmchIgorICAgRXJyb3IgQ29tcGlsYXRpb25fYWJvcnRlZF9DVVJMX0ZPUk1BVF9PRkZfVF9pc19taXNzaW5nCisjZW5kaWYKKworI2lmbmRlZiBDVVJMX1NJWkVPRl9DVVJMX09GRl9UCisjICBlcnJvciAiQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCBkZWZpbml0aW9uIGlzIG1pc3NpbmchIgorICAgRXJyb3IgQ29tcGlsYXRpb25fYWJvcnRlZF9DVVJMX1NJWkVPRl9DVVJMX09GRl9UX2lzX21pc3NpbmcKKyNlbmRpZgorCisjaWZuZGVmIENVUkxfU1VGRklYX0NVUkxfT0ZGX1QKKyMgIGVycm9yICJDVVJMX1NVRkZJWF9DVVJMX09GRl9UIGRlZmluaXRpb24gaXMgbWlzc2luZyEiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0NVUkxfU1VGRklYX0NVUkxfT0ZGX1RfaXNfbWlzc2luZworI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUKKyMgIGVycm9yICJDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSBkZWZpbml0aW9uIGlzIG1pc3NpbmchIgorICAgRXJyb3IgQ29tcGlsYXRpb25fYWJvcnRlZF9DVVJMX1NVRkZJWF9DVVJMX09GRl9UVV9pc19taXNzaW5nCisjZW5kaWYKKworLyoKKyAqIE1hY3JvcyBwcml2YXRlIHRvIHRoaXMgaGVhZGVyIGZpbGUuCisgKi8KKworI2RlZmluZSBDdXJsY2hrc3pFUSh0LCBzKSBzaXplb2YodCkgPT0gcyA/IDEgOiAtMQorCisjZGVmaW5lIEN1cmxjaGtzekdFKHQxLCB0Mikgc2l6ZW9mKHQxKSA+PSBzaXplb2YodDIpID8gMSA6IC0xCisKKy8qCisgKiBWZXJpZnkgdGhhdCB0aGUgc2l6ZSBwcmV2aW91c2x5IGRlZmluZWQgYW5kIGV4cGVjdGVkIGZvciBsb25nCisgKiBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIHJlcG9ydGVkIGJ5IHNpemVvZigpIGF0IGNvbXBpbGUgdGltZS4KKyAqLworCit0eXBlZGVmIGNoYXIKKyAgX19jdXJsX3J1bGVfMDFfXworICAgIFtDdXJsY2hrc3pFUShsb25nLCBDVVJMX1NJWkVPRl9MT05HKV07CisKKy8qCisgKiBWZXJpZnkgdGhhdCB0aGUgc2l6ZSBwcmV2aW91c2x5IGRlZmluZWQgYW5kIGV4cGVjdGVkIGZvcgorICogY3VybF9vZmZfdCBpcyBhY3R1YWxseSB0aGUgdGhlIHNhbWUgYXMgdGhlIG9uZSByZXBvcnRlZAorICogYnkgc2l6ZW9mKCkgYXQgY29tcGlsZSB0aW1lLgorICovCisKK3R5cGVkZWYgY2hhcgorICBfX2N1cmxfcnVsZV8wMl9fCisgICAgW0N1cmxjaGtzekVRKGN1cmxfb2ZmX3QsIENVUkxfU0laRU9GX0NVUkxfT0ZGX1QpXTsKKworLyoKKyAqIFZlcmlmeSBhdCBjb21waWxlIHRpbWUgdGhhdCB0aGUgc2l6ZSBvZiBjdXJsX29mZl90IGFzIHJlcG9ydGVkCisgKiBieSBzaXplb2YoKSBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gdGhlIG9uZSByZXBvcnRlZCBmb3IgbG9uZworICogZm9yIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uLgorICovCisKK3R5cGVkZWYgY2hhcgorICBfX2N1cmxfcnVsZV8wM19fCisgICAgW0N1cmxjaGtzekdFKGN1cmxfb2ZmX3QsIGxvbmcpXTsKKworLyoKKyAqIFZlcmlmeSB0aGF0IHRoZSBzaXplIHByZXZpb3VzbHkgZGVmaW5lZCBhbmQgZXhwZWN0ZWQgZm9yCisgKiBjdXJsX3NvY2tsZW5fdCBpcyBhY3R1YWxseSB0aGUgdGhlIHNhbWUgYXMgdGhlIG9uZSByZXBvcnRlZAorICogYnkgc2l6ZW9mKCkgYXQgY29tcGlsZSB0aW1lLgorICovCisKK3R5cGVkZWYgY2hhcgorICBfX2N1cmxfcnVsZV8wNF9fCisgICAgW0N1cmxjaGtzekVRKGN1cmxfc29ja2xlbl90LCBDVVJMX1NJWkVPRl9DVVJMX1NPQ0tMRU5fVCldOworCisvKgorICogVmVyaWZ5IGF0IGNvbXBpbGUgdGltZSB0aGF0IHRoZSBzaXplIG9mIGN1cmxfc29ja2xlbl90IGFzIHJlcG9ydGVkCisgKiBieSBzaXplb2YoKSBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gdGhlIG9uZSByZXBvcnRlZCBmb3IgaW50IGZvcgorICogdGhlIGN1cnJlbnQgY29tcGlsYXRpb24uCisgKi8KKwordHlwZWRlZiBjaGFyCisgIF9fY3VybF9ydWxlXzA1X18KKyAgICBbQ3VybGNoa3N6R0UoY3VybF9zb2NrbGVuX3QsIGludCldOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICBFWFRFUk5BTExZIEFORCBJTlRFUk5BTExZIFZJU0lCTEUgREVGSU5JVElPTlMgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qCisgKiBDVVJMX0lTT0NQUCBhbmQgQ1VSTF9PRkZfVF9DIGRlZmluaXRpb25zIGFyZSBkb25lIGhlcmUgaW4gb3JkZXIgdG8gYWxsb3cKKyAqIHRoZXNlIHRvIGJlIHZpc2libGUgYW5kIGV4cG9ydGVkIGJ5IHRoZSBleHRlcm5hbCBsaWJjdXJsIGludGVyZmFjZSBBUEksCisgKiB3aGlsZSBhbHNvIG1ha2luZyB0aGVtIHZpc2libGUgdG8gdGhlIGxpYnJhcnkgaW50ZXJuYWxzLCBzaW1wbHkgaW5jbHVkaW5nCisgKiBzZXR1cC5oLCB3aXRob3V0IGFjdHVhbGx5IG5lZWRpbmcgdG8gaW5jbHVkZSBjdXJsLmggaW50ZXJuYWxseS4KKyAqIElmIHNvbWUgZGF5IHRoaXMgc2VjdGlvbiB3b3VsZCBncm93IGJpZyBlbm91Z2gsIGFsbCB0aGlzIHNob3VsZCBiZSBtb3ZlZAorICogdG8gaXRzIG93biBoZWFkZXIgZmlsZS4KKyAqLworCisvKgorICogRmlndXJlIG91dCBpZiB3ZSBjYW4gdXNlIHRoZSAjIyBwcmVwcm9jZXNzb3Igb3BlcmF0b3IsIHdoaWNoIGlzIHN1cHBvcnRlZAorICogYnkgSVNPL0FOU0kgQyBhbmQgQysrLiBTb21lIGNvbXBpbGVycyBzdXBwb3J0IGl0IHdpdGhvdXQgc2V0dGluZyBfX1NURENfXworICogb3IgIF9fY3BsdXNwbHVzIHNvIHdlIG5lZWQgdG8gY2FyZWZ1bGx5IGNoZWNrIGZvciB0aGVtIHRvby4KKyAqLworCisjaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgXAorICBkZWZpbmVkKF9fSFBfYUNDKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgZGVmaW5lZChfX0xDQ19fKSB8fCBcCisgIGRlZmluZWQoX19QT0NDX18pIHx8IGRlZmluZWQoX19TQUxGT1JEQ19fKSB8fCBkZWZpbmVkKF9fSElHSENfXykgfHwgXAorICBkZWZpbmVkKF9fSUxFQzQwMF9fKQorICAvKiBUaGlzIGNvbXBpbGVyIGlzIGJlbGlldmVkIHRvIGhhdmUgYW4gSVNPIGNvbXBhdGlibGUgcHJlcHJvY2Vzc29yICovCisjZGVmaW5lIENVUkxfSVNPQ1BQCisjZWxzZQorICAvKiBUaGlzIGNvbXBpbGVyIGlzIGJlbGlldmVkIE5PVCB0byBoYXZlIGFuIElTTyBjb21wYXRpYmxlIHByZXByb2Nlc3NvciAqLworI3VuZGVmIENVUkxfSVNPQ1BQCisjZW5kaWYKKworLyoKKyAqIE1hY3JvcyBmb3IgbWluaW11bS13aWR0aCBzaWduZWQgYW5kIHVuc2lnbmVkIGN1cmxfb2ZmX3QgaW50ZWdlciBjb25zdGFudHMuCisgKi8KKworI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAoX19CT1JMQU5EQ19fID09IDB4MDU1MSkKKyMgIGRlZmluZSBfX0NVUkxfT0ZGX1RfQ19ITFBSMih4KSB4CisjICBkZWZpbmUgX19DVVJMX09GRl9UX0NfSExQUjEoeCkgX19DVVJMX09GRl9UX0NfSExQUjIoeCkKKyMgIGRlZmluZSBDVVJMX09GRl9UX0MoVmFsKSAgX19DVVJMX09GRl9UX0NfSExQUjEoVmFsKSAjIyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQ1VSTF9PRkZfVF9DX0hMUFIxKENVUkxfU1VGRklYX0NVUkxfT0ZGX1QpCisjICBkZWZpbmUgQ1VSTF9PRkZfVFVfQyhWYWwpIF9fQ1VSTF9PRkZfVF9DX0hMUFIxKFZhbCkgIyMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0NVUkxfT0ZGX1RfQ19ITFBSMShDVVJMX1NVRkZJWF9DVVJMX09GRl9UVSkKKyNlbHNlCisjICBpZmRlZiBDVVJMX0lTT0NQUAorIyAgICBkZWZpbmUgX19DVVJMX09GRl9UX0NfSExQUjIoVmFsLFN1ZmZpeCkgVmFsICMjIFN1ZmZpeAorIyAgZWxzZQorIyAgICBkZWZpbmUgX19DVVJMX09GRl9UX0NfSExQUjIoVmFsLFN1ZmZpeCkgVmFsLyoqL1N1ZmZpeAorIyAgZW5kaWYKKyMgIGRlZmluZSBfX0NVUkxfT0ZGX1RfQ19ITFBSMShWYWwsU3VmZml4KSBfX0NVUkxfT0ZGX1RfQ19ITFBSMihWYWwsU3VmZml4KQorIyAgZGVmaW5lIENVUkxfT0ZGX1RfQyhWYWwpICBfX0NVUkxfT0ZGX1RfQ19ITFBSMShWYWwsQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCkKKyMgIGRlZmluZSBDVVJMX09GRl9UVV9DKFZhbCkgX19DVVJMX09GRl9UX0NfSExQUjEoVmFsLENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVKQorI2VuZGlmCisKKy8qCisgKiBHZXQgcmlkIG9mIG1hY3JvcyBwcml2YXRlIHRvIHRoaXMgaGVhZGVyIGZpbGUuCisgKi8KKworI3VuZGVmIEN1cmxjaGtzekVRCisjdW5kZWYgQ3VybGNoa3N6R0UKKworLyoKKyAqIEdldCByaWQgb2YgbWFjcm9zIG5vdCBpbnRlbmRlZCB0byBleGlzdCBiZXlvbmQgdGhpcyBwb2ludC4KKyAqLworCisjdW5kZWYgQ1VSTF9QVUxMX1dTMlRDUElQX0gKKyN1bmRlZiBDVVJMX1BVTExfU1lTX1RZUEVTX0gKKyN1bmRlZiBDVVJMX1BVTExfU1lTX1NPQ0tFVF9ICisjdW5kZWYgQ1VSTF9QVUxMX1NURElOVF9ICisjdW5kZWYgQ1VSTF9QVUxMX0lOVFRZUEVTX0gKKworI3VuZGVmIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UCisjdW5kZWYgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVAorCisjaWZkZWYgQ1VSTF9OT19PTERJRVMKKyN1bmRlZiBDVVJMX0ZPUk1BVF9PRkZfVCAvKiBub3QgcmVxdWlyZWQgc2luY2UgNy4xOS4wIC0gb2Jzb2xldGVkIGluIDcuMjAuMCAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NVUkxfQ1VSTFJVTEVTX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2luY2x1ZGUvY3VybC9jdXJsdmVyLmggYi9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvY3VybHZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNjMwYTEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvY3VybHZlci5oCkBAIC0wLDAgKzEsNjkgQEAKKyNpZm5kZWYgX19DVVJMX0NVUkxWRVJfSAorI2RlZmluZSBfX0NVUkxfQ1VSTFZFUl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyBub3RoaW5nIGJ1dCBsaWJjdXJsIHZlcnNpb24gaW5mbywgZ2VuZXJhdGVkIGJ5CisgICBhIHNjcmlwdCBhdCByZWxlYXNlLXRpbWUuIFRoaXMgd2FzIG1hZGUgaXRzIG93biBoZWFkZXIgZmlsZSBpbiA3LjExLjIgKi8KKworLyogVGhpcyBpcyB0aGUgZ2xvYmFsIHBhY2thZ2UgY29weXJpZ2h0ICovCisjZGVmaW5lIExJQkNVUkxfQ09QWVJJR0hUICIxOTk2IC0gMjAxMiBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4uIgorCisvKiBUaGlzIGlzIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbGliY3VybCBwYWNrYWdlIGZyb20gd2hpY2ggdGhpcyBoZWFkZXIKKyAgIGZpbGUgb3JpZ2luczogKi8KKyNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OICI3LjI1LjAiCisKKy8qIFRoZSBudW1lcmljIHZlcnNpb24gbnVtYmVyIGlzIGFsc28gYXZhaWxhYmxlICJpbiBwYXJ0cyIgYnkgdXNpbmcgdGhlc2UKKyAgIGRlZmluZXM6ICovCisjZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9NQUpPUiA3CisjZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9NSU5PUiAyNQorI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fUEFUQ0ggMAorCisvKiBUaGlzIGlzIHRoZSBudW1lcmljIHZlcnNpb24gb2YgdGhlIGxpYmN1cmwgdmVyc2lvbiBudW1iZXIsIG1lYW50IGZvciBlYXNpZXIKKyAgIHBhcnNpbmcgYW5kIGNvbXBhcmlvbnMgYnkgcHJvZ3JhbXMuIFRoZSBMSUJDVVJMX1ZFUlNJT05fTlVNIGRlZmluZSB3aWxsCisgICBhbHdheXMgZm9sbG93IHRoaXMgc3ludGF4OgorCisgICAgICAgICAweFhYWVlaWgorCisgICBXaGVyZSBYWCwgWVkgYW5kIFpaIGFyZSB0aGUgbWFpbiB2ZXJzaW9uLCByZWxlYXNlIGFuZCBwYXRjaCBudW1iZXJzIGluCisgICBoZXhhZGVjaW1hbCAodXNpbmcgOCBiaXRzIGVhY2gpLiBBbGwgdGhyZWUgbnVtYmVycyBhcmUgYWx3YXlzIHJlcHJlc2VudGVkCisgICB1c2luZyB0d28gZGlnaXRzLiAgMS4yIHdvdWxkIGFwcGVhciBhcyAiMHgwMTAyMDAiIHdoaWxlIHZlcnNpb24gOS4xMS43CisgICBhcHBlYXJzIGFzICIweDA5MGIwNyIuCisKKyAgIFRoaXMgNi1kaWdpdCAoMjQgYml0cykgaGV4YWRlY2ltYWwgbnVtYmVyIGRvZXMgbm90IHNob3cgcHJlLXJlbGVhc2UgbnVtYmVyLAorICAgYW5kIGl0IGlzIGFsd2F5cyBhIGdyZWF0ZXIgbnVtYmVyIGluIGEgbW9yZSByZWNlbnQgcmVsZWFzZS4gSXQgbWFrZXMKKyAgIGNvbXBhcmlzb25zIHdpdGggZ3JlYXRlciB0aGFuIGFuZCBsZXNzIHRoYW4gd29yay4KKyovCisjZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9OVU0gMHgwNzE5MDAKKworLyoKKyAqIFRoaXMgaXMgdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUgZnVsbCBzb3VyY2UgcGFja2FnZSB3YXMgY3JlYXRlZC4gVGhlCisgKiB0aW1lc3RhbXAgaXMgbm90IHN0b3JlZCBpbiBnaXQsIGFzIHRoZSB0aW1lc3RhbXAgaXMgcHJvcGVybHkgc2V0IGluIHRoZQorICogdGFyYmFsbHMgYnkgdGhlIG1ha2V0Z3ogc2NyaXB0LgorICoKKyAqIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGUgc2hvdWxkIGZvbGxvdyB0aGlzIHRlbXBsYXRlOgorICoKKyAqICJNb24gRmViIDEyIDExOjM1OjMzIFVUQyAyMDA3IgorICovCisjZGVmaW5lIExJQkNVUkxfVElNRVNUQU1QICJUaHUgTWFyIDIyIDE4OjQ5OjMyIFVUQyAyMDEyIgorCisjZW5kaWYgLyogX19DVVJMX0NVUkxWRVJfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvaW5jbHVkZS9jdXJsL2Vhc3kuaCBiL2N1cmwtNy4yNS4wL2luY2x1ZGUvY3VybC9lYXN5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlM2U3NgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2luY2x1ZGUvY3VybC9lYXN5LmgKQEAgLTAsMCArMSwxMDIgQEAKKyNpZm5kZWYgX19DVVJMX0VBU1lfSAorI2RlZmluZSBfX0NVUkxfRUFTWV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK0NVUkxfRVhURVJOIENVUkwgKmN1cmxfZWFzeV9pbml0KHZvaWQpOworQ1VSTF9FWFRFUk4gQ1VSTGNvZGUgY3VybF9lYXN5X3NldG9wdChDVVJMICpjdXJsLCBDVVJMb3B0aW9uIG9wdGlvbiwgLi4uKTsKK0NVUkxfRVhURVJOIENVUkxjb2RlIGN1cmxfZWFzeV9wZXJmb3JtKENVUkwgKmN1cmwpOworQ1VSTF9FWFRFUk4gdm9pZCBjdXJsX2Vhc3lfY2xlYW51cChDVVJMICpjdXJsKTsKKworLyoKKyAqIE5BTUUgY3VybF9lYXN5X2dldGluZm8oKQorICoKKyAqIERFU0NSSVBUSU9OCisgKgorICogUmVxdWVzdCBpbnRlcm5hbCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjdXJsIHNlc3Npb24gd2l0aCB0aGlzIGZ1bmN0aW9uLiAgVGhlCisgKiB0aGlyZCBhcmd1bWVudCBNVVNUIGJlIGEgcG9pbnRlciB0byBhIGxvbmcsIGEgcG9pbnRlciB0byBhIGNoYXIgKiBvciBhCisgKiBwb2ludGVyIHRvIGEgZG91YmxlIChhcyB0aGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMgZWxzZXdoZXJlKS4gIFRoZSBkYXRhCisgKiBwb2ludGVkIHRvIHdpbGwgYmUgZmlsbGVkIGluIGFjY29yZGluZ2x5IGFuZCBjYW4gYmUgcmVsaWVkIHVwb24gb25seSBpZiB0aGUKKyAqIGZ1bmN0aW9uIHJldHVybnMgQ1VSTEVfT0suICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGdldCB1c2VkICpBRlRFUiogYQorICogcGVyZm9ybWVkIHRyYW5zZmVyLCBhbGwgcmVzdWx0cyBmcm9tIHRoaXMgZnVuY3Rpb24gYXJlIHVuZGVmaW5lZCB1bnRpbCB0aGUKKyAqIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KKyAqLworQ1VSTF9FWFRFUk4gQ1VSTGNvZGUgY3VybF9lYXN5X2dldGluZm8oQ1VSTCAqY3VybCwgQ1VSTElORk8gaW5mbywgLi4uKTsKKworCisvKgorICogTkFNRSBjdXJsX2Vhc3lfZHVwaGFuZGxlKCkKKyAqCisgKiBERVNDUklQVElPTgorICoKKyAqIENyZWF0ZXMgYSBuZXcgY3VybCBzZXNzaW9uIGhhbmRsZSB3aXRoIHRoZSBzYW1lIG9wdGlvbnMgc2V0IGZvciB0aGUgaGFuZGxlCisgKiBwYXNzZWQgaW4uIER1cGxpY2F0aW5nIGEgaGFuZGxlIGNvdWxkIG9ubHkgYmUgYSBtYXR0ZXIgb2YgY2xvbmluZyBkYXRhIGFuZAorICogb3B0aW9ucywgaW50ZXJuYWwgc3RhdGUgaW5mbyBhbmQgdGhpbmdzIGxpa2UgcGVyc2lzdGVudCBjb25uZWN0aW9ucyBjYW5ub3QKKyAqIGJlIHRyYW5zZmVycmVkLiBJdCBpcyB1c2VmdWwgaW4gbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbnMgd2hlbiB5b3UgY2FuIHJ1bgorICogY3VybF9lYXN5X2R1cGhhbmRsZSgpIGZvciBlYWNoIG5ldyB0aHJlYWQgdG8gYXZvaWQgYSBzZXJpZXMgb2YgaWRlbnRpY2FsCisgKiBjdXJsX2Vhc3lfc2V0b3B0KCkgaW52b2tlcyBpbiBldmVyeSB0aHJlYWQuCisgKi8KK0NVUkxfRVhURVJOIENVUkwqIGN1cmxfZWFzeV9kdXBoYW5kbGUoQ1VSTCAqY3VybCk7CisKKy8qCisgKiBOQU1FIGN1cmxfZWFzeV9yZXNldCgpCisgKgorICogREVTQ1JJUFRJT04KKyAqCisgKiBSZS1pbml0aWFsaXplcyBhIENVUkwgaGFuZGxlIHRvIHRoZSBkZWZhdWx0IHZhbHVlcy4gVGhpcyBwdXRzIGJhY2sgdGhlCisgKiBoYW5kbGUgdG8gdGhlIHNhbWUgc3RhdGUgYXMgaXQgd2FzIGluIHdoZW4gaXQgd2FzIGp1c3QgY3JlYXRlZC4KKyAqCisgKiBJdCBkb2VzIGtlZXA6IGxpdmUgY29ubmVjdGlvbnMsIHRoZSBTZXNzaW9uIElEIGNhY2hlLCB0aGUgRE5TIGNhY2hlIGFuZCB0aGUKKyAqIGNvb2tpZXMuCisgKi8KK0NVUkxfRVhURVJOIHZvaWQgY3VybF9lYXN5X3Jlc2V0KENVUkwgKmN1cmwpOworCisvKgorICogTkFNRSBjdXJsX2Vhc3lfcmVjdigpCisgKgorICogREVTQ1JJUFRJT04KKyAqCisgKiBSZWNlaXZlcyBkYXRhIGZyb20gdGhlIGNvbm5lY3RlZCBzb2NrZXQuIFVzZSBhZnRlciBzdWNjZXNzZnVsCisgKiBjdXJsX2Vhc3lfcGVyZm9ybSgpIHdpdGggQ1VSTE9QVF9DT05ORUNUX09OTFkgb3B0aW9uLgorICovCitDVVJMX0VYVEVSTiBDVVJMY29kZSBjdXJsX2Vhc3lfcmVjdihDVVJMICpjdXJsLCB2b2lkICpidWZmZXIsIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm4pOworCisvKgorICogTkFNRSBjdXJsX2Vhc3lfc2VuZCgpCisgKgorICogREVTQ1JJUFRJT04KKyAqCisgKiBTZW5kcyBkYXRhIG92ZXIgdGhlIGNvbm5lY3RlZCBzb2NrZXQuIFVzZSBhZnRlciBzdWNjZXNzZnVsCisgKiBjdXJsX2Vhc3lfcGVyZm9ybSgpIHdpdGggQ1VSTE9QVF9DT05ORUNUX09OTFkgb3B0aW9uLgorICovCitDVVJMX0VYVEVSTiBDVVJMY29kZSBjdXJsX2Vhc3lfc2VuZChDVVJMICpjdXJsLCBjb25zdCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuLCBzaXplX3QgKm4pOworCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvbXByaW50Zi5oIGIvY3VybC03LjI1LjAvaW5jbHVkZS9jdXJsL21wcmludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdkZDJmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvaW5jbHVkZS9jdXJsL21wcmludGYuaApAQCAtMCwwICsxLDgxIEBACisjaWZuZGVmIF9fQ1VSTF9NUFJJTlRGX0gKKyNkZWZpbmUgX19DVVJMX01QUklOVEZfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPiAvKiBuZWVkZWQgZm9yIEZJTEUgKi8KKworI2luY2x1ZGUgImN1cmwuaCIKKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworQ1VSTF9FWFRFUk4gaW50IGN1cmxfbXByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CitDVVJMX0VYVEVSTiBpbnQgY3VybF9tZnByaW50ZihGSUxFICpmZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworQ1VSTF9FWFRFUk4gaW50IGN1cmxfbXNwcmludGYoY2hhciAqYnVmZmVyLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CitDVVJMX0VYVEVSTiBpbnQgY3VybF9tc25wcmludGYoY2hhciAqYnVmZmVyLCBzaXplX3QgbWF4bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKK0NVUkxfRVhURVJOIGludCBjdXJsX212cHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKTsKK0NVUkxfRVhURVJOIGludCBjdXJsX212ZnByaW50ZihGSUxFICpmZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworQ1VSTF9FWFRFUk4gaW50IGN1cmxfbXZzcHJpbnRmKGNoYXIgKmJ1ZmZlciwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworQ1VSTF9FWFRFUk4gaW50IGN1cmxfbXZzbnByaW50ZihjaGFyICpidWZmZXIsIHNpemVfdCBtYXhsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKTsKK0NVUkxfRVhURVJOIGNoYXIgKmN1cmxfbWFwcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworQ1VSTF9FWFRFUk4gY2hhciAqY3VybF9tdmFwcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworCisjaWZkZWYgX01QUklOVEZfUkVQTEFDRQorIyB1bmRlZiBwcmludGYKKyMgdW5kZWYgZnByaW50ZgorIyB1bmRlZiBzcHJpbnRmCisjIHVuZGVmIHZzcHJpbnRmCisjIHVuZGVmIHNucHJpbnRmCisjIHVuZGVmIHZwcmludGYKKyMgdW5kZWYgdmZwcmludGYKKyMgdW5kZWYgdnNucHJpbnRmCisjIHVuZGVmIGFwcmludGYKKyMgdW5kZWYgdmFwcmludGYKKyMgZGVmaW5lIHByaW50ZiBjdXJsX21wcmludGYKKyMgZGVmaW5lIGZwcmludGYgY3VybF9tZnByaW50ZgorI2lmZGVmIENVUkxERUJVRworLyogV2hlbiBidWlsdCB3aXRoIENVUkxERUJVRyB3ZSBkZWZpbmUgYXdheSB0aGUgc3ByaW50ZigpIGZ1bmN0aW9ucyBzaW5jZSB3ZQorICAgZG9uJ3Qgd2FudCBpbnRlcm5hbCBjb2RlIHRvIGJlIHVzaW5nIHRoZW0gKi8KKyMgZGVmaW5lIHNwcmludGYgc3ByaW50Zl93YXNfdXNlZAorIyBkZWZpbmUgdnNwcmludGYgdnNwcmludGZfd2FzX3VzZWQKKyNlbHNlCisjIGRlZmluZSBzcHJpbnRmIGN1cmxfbXNwcmludGYKKyMgZGVmaW5lIHZzcHJpbnRmIGN1cmxfbXZzcHJpbnRmCisjZW5kaWYKKyMgZGVmaW5lIHNucHJpbnRmIGN1cmxfbXNucHJpbnRmCisjIGRlZmluZSB2cHJpbnRmIGN1cmxfbXZwcmludGYKKyMgZGVmaW5lIHZmcHJpbnRmIGN1cmxfbXZmcHJpbnRmCisjIGRlZmluZSB2c25wcmludGYgY3VybF9tdnNucHJpbnRmCisjIGRlZmluZSBhcHJpbnRmIGN1cmxfbWFwcmludGYKKyMgZGVmaW5lIHZhcHJpbnRmIGN1cmxfbXZhcHJpbnRmCisjZW5kaWYKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NVUkxfTVBSSU5URl9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvbXVsdGkuaCBiL2N1cmwtNy4yNS4wL2luY2x1ZGUvY3VybC9tdWx0aS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjU2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvbXVsdGkuaApAQCAtMCwwICsxLDM0NSBAQAorI2lmbmRlZiBfX0NVUkxfTVVMVElfSAorI2RlZmluZSBfX0NVUkxfTVVMVElfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICBUaGlzIGlzIGFuICJleHRlcm5hbCIgaGVhZGVyIGZpbGUuIERvbid0IGdpdmUgYXdheSBhbnkgaW50ZXJuYWxzIGhlcmUhCisKKyAgR09BTFMKKworICBvIEVuYWJsZSBhICJwdWxsIiBpbnRlcmZhY2UuIFRoZSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgbGliY3VybCBkZWNpZGVzIHdoZXJlCisgICAgYW5kIHdoZW4gdG8gYXNrIGxpYmN1cmwgdG8gZ2V0L3NlbmQgZGF0YS4KKworICBvIEVuYWJsZSBtdWx0aXBsZSBzaW11bHRhbmVvdXMgdHJhbnNmZXJzIGluIHRoZSBzYW1lIHRocmVhZCB3aXRob3V0IG1ha2luZyBpdAorICAgIGNvbXBsaWNhdGVkIGZvciB0aGUgYXBwbGljYXRpb24uCisKKyAgbyBFbmFibGUgdGhlIGFwcGxpY2F0aW9uIHRvIHNlbGVjdCgpIG9uIGl0cyBvd24gZmlsZSBkZXNjcmlwdG9ycyBhbmQgY3VybCdzCisgICAgZmlsZSBkZXNjcmlwdG9ycyBzaW11bHRhbmVvdXMgZWFzaWx5LgorCisqLworCisvKgorICogVGhpcyBoZWFkZXIgZmlsZSBzaG91bGQgbm90IHJlYWxseSBuZWVkIHRvIGluY2x1ZGUgImN1cmwuaCIgc2luY2UgY3VybC5oCisgKiBpdHNlbGYgaW5jbHVkZXMgdGhpcyBmaWxlIGFuZCB3ZSBleHBlY3QgdXNlciBhcHBsaWNhdGlvbnMgdG8gZG8gI2luY2x1ZGUKKyAqIDxjdXJsL2N1cmwuaD4gd2l0aG91dCB0aGUgbmVlZCBmb3IgZXNwZWNpYWxseSBpbmNsdWRpbmcgbXVsdGkuaC4KKyAqCisgKiBGb3Igc29tZSByZWFzb24gd2UgYWRkZWQgdGhpcyBpbmNsdWRlIGhlcmUgYXQgb25lIHBvaW50LCBhbmQgcmF0aGVyIHRoYW4gdG8KKyAqIGJyZWFrIGV4aXN0aW5nICh3cm9uZ2x5IHdyaXR0ZW4pIGxpYmN1cmwgYXBwbGljYXRpb25zLCB3ZSBsZWF2ZSBpdCBhcy1pcworICogYnV0IHdpdGggdGhpcyB3YXJuaW5nIGF0dGFjaGVkLgorICovCisjaW5jbHVkZSAiY3VybC5oIgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIHZvaWQgQ1VSTE07CisKK3R5cGVkZWYgZW51bSB7CisgIENVUkxNX0NBTExfTVVMVElfUEVSRk9STSA9IC0xLCAvKiBwbGVhc2UgY2FsbCBjdXJsX211bHRpX3BlcmZvcm0oKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9tdWx0aV9zb2NrZXQqKCkgc29vbiAqLworICBDVVJMTV9PSywKKyAgQ1VSTE1fQkFEX0hBTkRMRSwgICAgICAvKiB0aGUgcGFzc2VkLWluIGhhbmRsZSBpcyBub3QgYSB2YWxpZCBDVVJMTSBoYW5kbGUgKi8KKyAgQ1VSTE1fQkFEX0VBU1lfSEFORExFLCAvKiBhbiBlYXN5IGhhbmRsZSB3YXMgbm90IGdvb2QvdmFsaWQgKi8KKyAgQ1VSTE1fT1VUX09GX01FTU9SWSwgICAvKiBpZiB5b3UgZXZlciBnZXQgdGhpcywgeW91J3JlIGluIGRlZXAgc2gqdCAqLworICBDVVJMTV9JTlRFUk5BTF9FUlJPUiwgIC8qIHRoaXMgaXMgYSBsaWJjdXJsIGJ1ZyAqLworICBDVVJMTV9CQURfU09DS0VULCAgICAgIC8qIHRoZSBwYXNzZWQgaW4gc29ja2V0IGFyZ3VtZW50IGRpZCBub3QgbWF0Y2ggKi8KKyAgQ1VSTE1fVU5LTk9XTl9PUFRJT04sICAvKiBjdXJsX211bHRpX3NldG9wdCgpIHdpdGggdW5zdXBwb3J0ZWQgb3B0aW9uICovCisgIENVUkxNX0xBU1QKK30gQ1VSTE1jb2RlOworCisvKiBqdXN0IHRvIG1ha2UgY29kZSBuaWNlciB3aGVuIHVzaW5nIGN1cmxfbXVsdGlfc29ja2V0KCkgeW91IGNhbiBub3cgY2hlY2sKKyAgIGZvciBDVVJMTV9DQUxMX01VTFRJX1NPQ0tFVCB0b28gaW4gdGhlIHNhbWUgc3R5bGUgaXQgd29ya3MgZm9yCisgICBjdXJsX211bHRpX3BlcmZvcm0oKSBhbmQgQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNICovCisjZGVmaW5lIENVUkxNX0NBTExfTVVMVElfU09DS0VUIENVUkxNX0NBTExfTVVMVElfUEVSRk9STQorCit0eXBlZGVmIGVudW0geworICBDVVJMTVNHX05PTkUsIC8qIGZpcnN0LCBub3QgdXNlZCAqLworICBDVVJMTVNHX0RPTkUsIC8qIFRoaXMgZWFzeSBoYW5kbGUgaGFzIGNvbXBsZXRlZC4gJ3Jlc3VsdCcgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICB0aGUgQ1VSTGNvZGUgb2YgdGhlIHRyYW5zZmVyICovCisgIENVUkxNU0dfTEFTVCAvKiBsYXN0LCBub3QgdXNlZCAqLworfSBDVVJMTVNHOworCitzdHJ1Y3QgQ1VSTE1zZyB7CisgIENVUkxNU0cgbXNnOyAgICAgICAvKiB3aGF0IHRoaXMgbWVzc2FnZSBtZWFucyAqLworICBDVVJMICplYXN5X2hhbmRsZTsgLyogdGhlIGhhbmRsZSBpdCBjb25jZXJucyAqLworICB1bmlvbiB7CisgICAgdm9pZCAqd2hhdGV2ZXI7ICAgIC8qIG1lc3NhZ2Utc3BlY2lmaWMgZGF0YSAqLworICAgIENVUkxjb2RlIHJlc3VsdDsgICAvKiByZXR1cm4gY29kZSBmb3IgdHJhbnNmZXIgKi8KKyAgfSBkYXRhOworfTsKK3R5cGVkZWYgc3RydWN0IENVUkxNc2cgQ1VSTE1zZzsKKworLyoKKyAqIE5hbWU6ICAgIGN1cmxfbXVsdGlfaW5pdCgpCisgKgorICogRGVzYzogICAgaW5pdGl0YWxpemUgbXVsdGktc3R5bGUgY3VybCB1c2FnZQorICoKKyAqIFJldHVybnM6IGEgbmV3IENVUkxNIGhhbmRsZSB0byB1c2UgaW4gYWxsICdjdXJsX211bHRpJyBmdW5jdGlvbnMuCisgKi8KK0NVUkxfRVhURVJOIENVUkxNICpjdXJsX211bHRpX2luaXQodm9pZCk7CisKKy8qCisgKiBOYW1lOiAgICBjdXJsX211bHRpX2FkZF9oYW5kbGUoKQorICoKKyAqIERlc2M6ICAgIGFkZCBhIHN0YW5kYXJkIGN1cmwgaGFuZGxlIHRvIHRoZSBtdWx0aSBzdGFjaworICoKKyAqIFJldHVybnM6IENVUkxNY29kZSB0eXBlLCBnZW5lcmFsIG11bHRpIGVycm9yIGNvZGUuCisgKi8KK0NVUkxfRVhURVJOIENVUkxNY29kZSBjdXJsX211bHRpX2FkZF9oYW5kbGUoQ1VSTE0gKm11bHRpX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTCAqY3VybF9oYW5kbGUpOworCisgLyoKKyAgKiBOYW1lOiAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoKQorICAqCisgICogRGVzYzogICAgcmVtb3ZlcyBhIGN1cmwgaGFuZGxlIGZyb20gdGhlIG11bHRpIHN0YWNrIGFnYWluCisgICoKKyAgKiBSZXR1cm5zOiBDVVJMTWNvZGUgdHlwZSwgZ2VuZXJhbCBtdWx0aSBlcnJvciBjb2RlLgorICAqLworQ1VSTF9FWFRFUk4gQ1VSTE1jb2RlIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShDVVJMTSAqbXVsdGlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMICpjdXJsX2hhbmRsZSk7CisKKyAvKgorICAqIE5hbWU6ICAgIGN1cmxfbXVsdGlfZmRzZXQoKQorICAqCisgICogRGVzYzogICAgQXNrIGN1cmwgZm9yIGl0cyBmZF9zZXQgc2V0cy4gVGhlIGFwcCBjYW4gdXNlIHRoZXNlIHRvIHNlbGVjdCgpIG9yCisgICogICAgICAgICAgcG9sbCgpIG9uLiBXZSB3YW50IGN1cmxfbXVsdGlfcGVyZm9ybSgpIGNhbGxlZCBhcyBzb29uIGFzIG9uZSBvZgorICAqICAgICAgICAgIHRoZW0gYXJlIHJlYWR5LgorICAqCisgICogUmV0dXJuczogQ1VSTE1jb2RlIHR5cGUsIGdlbmVyYWwgbXVsdGkgZXJyb3IgY29kZS4KKyAgKi8KK0NVUkxfRVhURVJOIENVUkxNY29kZSBjdXJsX211bHRpX2Zkc2V0KENVUkxNICptdWx0aV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKnJlYWRfZmRfc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICp3cml0ZV9mZF9zZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKmV4Y19mZF9zZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm1heF9mZCk7CisKKyAvKgorICAqIE5hbWU6ICAgIGN1cmxfbXVsdGlfcGVyZm9ybSgpCisgICoKKyAgKiBEZXNjOiAgICBXaGVuIHRoZSBhcHAgdGhpbmtzIHRoZXJlJ3MgZGF0YSBhdmFpbGFibGUgZm9yIGN1cmwgaXQgY2FsbHMgdGhpcworICAqICAgICAgICAgIGZ1bmN0aW9uIHRvIHJlYWQvd3JpdGUgd2hhdGV2ZXIgdGhlcmUgaXMgcmlnaHQgbm93LiBUaGlzIHJldHVybnMKKyAgKiAgICAgICAgICBhcyBzb29uIGFzIHRoZSByZWFkcyBhbmQgd3JpdGVzIGFyZSBkb25lLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90CisgICogICAgICAgICAgcmVxdWlyZSB0aGF0IHRoZXJlIGFjdHVhbGx5IGlzIGRhdGEgYXZhaWxhYmxlIGZvciByZWFkaW5nIG9yIHRoYXQKKyAgKiAgICAgICAgICBkYXRhIGNhbiBiZSB3cml0dGVuLCBpdCBjYW4gYmUgY2FsbGVkIGp1c3QgaW4gY2FzZS4gSXQgcmV0dXJucworICAqICAgICAgICAgIHRoZSBudW1iZXIgb2YgaGFuZGxlcyB0aGF0IHN0aWxsIHRyYW5zZmVyIGRhdGEgaW4gdGhlIHNlY29uZAorICAqICAgICAgICAgIGFyZ3VtZW50J3MgaW50ZWdlci1wb2ludGVyLgorICAqCisgICogUmV0dXJuczogQ1VSTE1jb2RlIHR5cGUsIGdlbmVyYWwgbXVsdGkgZXJyb3IgY29kZS4gKk5PVEUqIHRoYXQgdGhpcyBvbmx5CisgICogICAgICAgICAgcmV0dXJucyBlcnJvcnMgZXRjIHJlZ2FyZGluZyB0aGUgd2hvbGUgbXVsdGkgc3RhY2suIFRoZXJlIG1pZ2h0CisgICogICAgICAgICAgc3RpbGwgaGF2ZSBvY2N1cnJlZCBwcm9ibGVtcyBvbiBpbnZpZHVhbCB0cmFuc2ZlcnMgZXZlbiB3aGVuIHRoaXMKKyAgKiAgICAgICAgICByZXR1cm5zIE9LLgorICAqLworQ1VSTF9FWFRFUk4gQ1VSTE1jb2RlIGN1cmxfbXVsdGlfcGVyZm9ybShDVVJMTSAqbXVsdGlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJ1bm5pbmdfaGFuZGxlcyk7CisKKyAvKgorICAqIE5hbWU6ICAgIGN1cmxfbXVsdGlfY2xlYW51cCgpCisgICoKKyAgKiBEZXNjOiAgICBDbGVhbnMgdXAgYW5kIHJlbW92ZXMgYSB3aG9sZSBtdWx0aSBzdGFjay4gSXQgZG9lcyBub3QgZnJlZSBvcgorICAqICAgICAgICAgIHRvdWNoIGFueSBpbmRpdmlkdWFsIGVhc3kgaGFuZGxlcyBpbiBhbnkgd2F5LiBXZSBuZWVkIHRvIGRlZmluZQorICAqICAgICAgICAgIGluIHdoYXQgc3RhdGUgdGhvc2UgaGFuZGxlcyB3aWxsIGJlIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkCisgICogICAgICAgICAgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zZmVyLgorICAqCisgICogUmV0dXJuczogQ1VSTE1jb2RlIHR5cGUsIGdlbmVyYWwgbXVsdGkgZXJyb3IgY29kZS4KKyAgKi8KK0NVUkxfRVhURVJOIENVUkxNY29kZSBjdXJsX211bHRpX2NsZWFudXAoQ1VSTE0gKm11bHRpX2hhbmRsZSk7CisKKy8qCisgKiBOYW1lOiAgICBjdXJsX211bHRpX2luZm9fcmVhZCgpCisgKgorICogRGVzYzogICAgQXNrIHRoZSBtdWx0aSBoYW5kbGUgaWYgdGhlcmUncyBhbnkgbWVzc2FnZXMvaW5mb3JtYXRpb25hbHMgZnJvbQorICogICAgICAgICAgdGhlIGluZGl2aWR1YWwgdHJhbnNmZXJzLiBNZXNzYWdlcyBpbmNsdWRlIGluZm9ybWF0aW9uYWxzIHN1Y2ggYXMKKyAqICAgICAgICAgIGVycm9yIGNvZGUgZnJvbSB0aGUgdHJhbnNmZXIgb3IganVzdCB0aGUgZmFjdCB0aGF0IGEgdHJhbnNmZXIgaXMKKyAqICAgICAgICAgIGNvbXBsZXRlZC4gTW9yZSBkZXRhaWxzIG9uIHRoZXNlIHNob3VsZCBiZSB3cml0dGVuIGRvd24gYXMgd2VsbC4KKyAqCisgKiAgICAgICAgICBSZXBlYXRlZCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgbmV3IHN0cnVjdCBlYWNoCisgKiAgICAgICAgICB0aW1lLCB1bnRpbCBhIHNwZWNpYWwgImVuZCBvZiBtc2dzIiBzdHJ1Y3QgaXMgcmV0dXJuZWQgYXMgYSBzaWduYWwKKyAqICAgICAgICAgIHRoYXQgdGhlcmUgaXMgbm8gbW9yZSB0byBnZXQgYXQgdGhpcyBwb2ludC4KKyAqCisgKiAgICAgICAgICBUaGUgZGF0YSB0aGUgcmV0dXJuZWQgcG9pbnRlciBwb2ludHMgdG8gd2lsbCBub3Qgc3Vydml2ZSBjYWxsaW5nCisgKiAgICAgICAgICBjdXJsX211bHRpX2NsZWFudXAoKS4KKyAqCisgKiAgICAgICAgICBUaGUgJ0NVUkxNc2cnIHN0cnVjdCBpcyBtZWFudCB0byBiZSB2ZXJ5IHNpbXBsZSBhbmQgb25seSBjb250YWluCisgKiAgICAgICAgICB2ZXJ5IGJhc2ljIGluZm9ybWF0aW9ucy4gSWYgbW9yZSBpbnZvbHZlZCBpbmZvcm1hdGlvbiBpcyB3YW50ZWQsCisgKiAgICAgICAgICB3ZSB3aWxsIHByb3ZpZGUgdGhlIHBhcnRpY3VsYXIgInRyYW5zZmVyIGhhbmRsZSIgaW4gdGhhdCBzdHJ1Y3QKKyAqICAgICAgICAgIGFuZCB0aGF0IHNob3VsZC9jb3VsZC93b3VsZCBiZSB1c2VkIGluIHN1YnNlcXVlbnQKKyAqICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKCkgY2FsbHMgKG9yIHNpbWlsYXIpLiBUaGUgcG9pbnQgYmVpbmcgdGhhdCB3ZQorICogICAgICAgICAgbXVzdCBuZXZlciBleHBvc2UgY29tcGxleCBzdHJ1Y3RzIHRvIGFwcGxpY2F0aW9ucywgYXMgdGhlbiB3ZSdsbAorICogICAgICAgICAgdW5kb3VidGFibHkgZ2V0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHByb2JsZW1zIGluIHRoZSBmdXR1cmUuCisgKgorICogUmV0dXJuczogQSBwb2ludGVyIHRvIGEgZmlsbGVkLWluIHN0cnVjdCwgb3IgTlVMTCBpZiBpdCBmYWlsZWQgb3IgcmFuIG91dAorICogICAgICAgICAgb2Ygc3RydWN0cy4gSXQgYWxzbyB3cml0ZXMgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBsZWZ0IGluIHRoZQorICogICAgICAgICAgcXVldWUgKGFmdGVyIHRoaXMgcmVhZCkgaW4gdGhlIGludGVnZXIgdGhlIHNlY29uZCBhcmd1bWVudCBwb2ludHMKKyAqICAgICAgICAgIHRvLgorICovCitDVVJMX0VYVEVSTiBDVVJMTXNnICpjdXJsX211bHRpX2luZm9fcmVhZChDVVJMTSAqbXVsdGlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICptc2dzX2luX3F1ZXVlKTsKKworLyoKKyAqIE5hbWU6ICAgIGN1cmxfbXVsdGlfc3RyZXJyb3IoKQorICoKKyAqIERlc2M6ICAgIFRoZSBjdXJsX211bHRpX3N0cmVycm9yIGZ1bmN0aW9uIG1heSBiZSB1c2VkIHRvIHR1cm4gYSBDVVJMTWNvZGUKKyAqICAgICAgICAgIHZhbHVlIGludG8gdGhlIGVxdWl2YWxlbnQgaHVtYW4gcmVhZGFibGUgZXJyb3Igc3RyaW5nLiAgVGhpcyBpcworICogICAgICAgICAgdXNlZnVsIGZvciBwcmludGluZyBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2VzLgorICoKKyAqIFJldHVybnM6IEEgcG9pbnRlciB0byBhIHplcm8tdGVybWluYXRlZCBlcnJvciBtZXNzYWdlLgorICovCitDVVJMX0VYVEVSTiBjb25zdCBjaGFyICpjdXJsX211bHRpX3N0cmVycm9yKENVUkxNY29kZSk7CisKKy8qCisgKiBOYW1lOiAgICBjdXJsX211bHRpX3NvY2tldCgpIGFuZAorICogICAgICAgICAgY3VybF9tdWx0aV9zb2NrZXRfYWxsKCkKKyAqCisgKiBEZXNjOiAgICBBbiBhbHRlcm5hdGl2ZSB2ZXJzaW9uIG9mIGN1cmxfbXVsdGlfcGVyZm9ybSgpIHRoYXQgYWxsb3dzIHRoZQorICogICAgICAgICAgYXBwbGljYXRpb24gdG8gcGFzcyBpbiBvbmUgb2YgdGhlIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCBoYXZlIGJlZW4KKyAqICAgICAgICAgIGRldGVjdGVkIHRvIGhhdmUgImFjdGlvbiIgb24gdGhlbSBhbmQgbGV0IGxpYmN1cmwgcGVyZm9ybS4KKyAqICAgICAgICAgIFNlZSBtYW4gcGFnZSBmb3IgZGV0YWlscy4KKyAqLworI2RlZmluZSBDVVJMX1BPTExfTk9ORSAgIDAKKyNkZWZpbmUgQ1VSTF9QT0xMX0lOICAgICAxCisjZGVmaW5lIENVUkxfUE9MTF9PVVQgICAgMgorI2RlZmluZSBDVVJMX1BPTExfSU5PVVQgIDMKKyNkZWZpbmUgQ1VSTF9QT0xMX1JFTU9WRSA0CisKKyNkZWZpbmUgQ1VSTF9TT0NLRVRfVElNRU9VVCBDVVJMX1NPQ0tFVF9CQUQKKworI2RlZmluZSBDVVJMX0NTRUxFQ1RfSU4gICAweDAxCisjZGVmaW5lIENVUkxfQ1NFTEVDVF9PVVQgIDB4MDIKKyNkZWZpbmUgQ1VSTF9DU0VMRUNUX0VSUiAgMHgwNAorCit0eXBlZGVmIGludCAoKmN1cmxfc29ja2V0X2NhbGxiYWNrKShDVVJMICplYXN5LCAgICAgIC8qIGVhc3kgaGFuZGxlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHMsIC8qIHNvY2tldCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdoYXQsICAgICAgICAvKiBzZWUgYWJvdmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJwLCAgICAgLyogcHJpdmF0ZSBjYWxsYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzb2NrZXRwKTsgIC8qIHByaXZhdGUgc29ja2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIgKi8KKy8qCisgKiBOYW1lOiAgICBjdXJsX211bHRpX3RpbWVyX2NhbGxiYWNrCisgKgorICogRGVzYzogICAgQ2FsbGVkIGJ5IGxpYmN1cmwgd2hlbmV2ZXIgdGhlIGxpYnJhcnkgZGV0ZWN0cyBhIGNoYW5nZSBpbiB0aGUKKyAqICAgICAgICAgIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGUgYXBwIGlzIGFsbG93ZWQgdG8gd2FpdCBiZWZvcmUKKyAqICAgICAgICAgIGN1cmxfbXVsdGlfc29ja2V0KCkgb3IgY3VybF9tdWx0aV9wZXJmb3JtKCkgbXVzdCBiZSBjYWxsZWQKKyAqICAgICAgICAgICh0byBhbGxvdyBsaWJjdXJsJ3MgdGltZWQgZXZlbnRzIHRvIHRha2UgcGxhY2UpLgorICoKKyAqIFJldHVybnM6IFRoZSBjYWxsYmFjayBzaG91bGQgcmV0dXJuIHplcm8uCisgKi8KK3R5cGVkZWYgaW50ICgqY3VybF9tdWx0aV90aW1lcl9jYWxsYmFjaykoQ1VSTE0gKm11bHRpLCAgICAvKiBtdWx0aSBoYW5kbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lb3V0X21zLCAvKiBzZWUgYWJvdmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcnApOyAgICAvKiBwcml2YXRlIGNhbGxiYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlciAqLworCitDVVJMX0VYVEVSTiBDVVJMTWNvZGUgY3VybF9tdWx0aV9zb2NrZXQoQ1VSTE0gKm11bHRpX2hhbmRsZSwgY3VybF9zb2NrZXRfdCBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcnVubmluZ19oYW5kbGVzKTsKKworQ1VSTF9FWFRFUk4gQ1VSTE1jb2RlIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbihDVVJMTSAqbXVsdGlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBldl9iaXRtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJ1bm5pbmdfaGFuZGxlcyk7CisKK0NVUkxfRVhURVJOIENVUkxNY29kZSBjdXJsX211bHRpX3NvY2tldF9hbGwoQ1VSTE0gKm11bHRpX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpydW5uaW5nX2hhbmRsZXMpOworCisjaWZuZGVmIENVUkxfQUxMT1dfT0xEX01VTFRJX1NPQ0tFVAorLyogVGhpcyBtYWNybyBiZWxvdyB3YXMgYWRkZWQgaW4gNy4xNi4zIHRvIHB1c2ggdXNlcnMgd2hvIHJlY29tcGlsZSB0byB1c2UKKyAgIHRoZSBuZXcgY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKCkgaW5zdGVhZCBvZiB0aGUgb2xkIGN1cmxfbXVsdGlfc29ja2V0KCkKKyovCisjZGVmaW5lIGN1cmxfbXVsdGlfc29ja2V0KHgseSx6KSBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24oeCx5LDAseikKKyNlbmRpZgorCisvKgorICogTmFtZTogICAgY3VybF9tdWx0aV90aW1lb3V0KCkKKyAqCisgKiBEZXNjOiAgICBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIGFwcCBpcyBhbGxvd2VkIHRvCisgKiAgICAgICAgICB3YWl0IGJlZm9yZSBjdXJsX211bHRpX3NvY2tldCgpIG9yIGN1cmxfbXVsdGlfcGVyZm9ybSgpIG11c3QgYmUKKyAqICAgICAgICAgIGNhbGxlZCAodG8gYWxsb3cgbGliY3VybCdzIHRpbWVkIGV2ZW50cyB0byB0YWtlIHBsYWNlKS4KKyAqCisgKiBSZXR1cm5zOiBDVVJMTSBlcnJvciBjb2RlLgorICovCitDVVJMX0VYVEVSTiBDVVJMTWNvZGUgY3VybF9tdWx0aV90aW1lb3V0KENVUkxNICptdWx0aV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKm1pbGxpc2Vjb25kcyk7CisKKyN1bmRlZiBDSU5JVCAvKiByZS11c2luZyB0aGUgc2FtZSBuYW1lIGFzIGluIGN1cmwuaCAqLworCisjaWZkZWYgQ1VSTF9JU09DUFAKKyNkZWZpbmUgQ0lOSVQobmFtZSx0eXBlLG51bSkgQ1VSTE1PUFRfICMjIG5hbWUgPSBDVVJMT1BUVFlQRV8gIyMgdHlwZSArIG51bQorI2Vsc2UKKy8qIFRoZSBtYWNybyAiIyMiIGlzIElTTyBDLCB3ZSBhc3N1bWUgcHJlLUlTTyBDIGRvZXNuJ3Qgc3VwcG9ydCBpdC4gKi8KKyNkZWZpbmUgTE9ORyAgICAgICAgICBDVVJMT1BUVFlQRV9MT05HCisjZGVmaW5lIE9CSkVDVFBPSU5UICAgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQKKyNkZWZpbmUgRlVOQ1RJT05QT0lOVCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5UCisjZGVmaW5lIE9GRl9UICAgICAgICAgQ1VSTE9QVFRZUEVfT0ZGX1QKKyNkZWZpbmUgQ0lOSVQobmFtZSx0eXBlLG51bWJlcikgQ1VSTE1PUFRfLyoqL25hbWUgPSB0eXBlICsgbnVtYmVyCisjZW5kaWYKKwordHlwZWRlZiBlbnVtIHsKKyAgLyogVGhpcyBpcyB0aGUgc29ja2V0IGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgKi8KKyAgQ0lOSVQoU09DS0VURlVOQ1RJT04sIEZVTkNUSU9OUE9JTlQsIDEpLAorCisgIC8qIFRoaXMgaXMgdGhlIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgc29ja2V0IGNhbGxiYWNrICovCisgIENJTklUKFNPQ0tFVERBVEEsIE9CSkVDVFBPSU5ULCAyKSwKKworICAgIC8qIHNldCB0byAxIHRvIGVuYWJsZSBwaXBlbGluaW5nIGZvciB0aGlzIG11bHRpIGhhbmRsZSAqLworICBDSU5JVChQSVBFTElOSU5HLCBMT05HLCAzKSwKKworICAgLyogVGhpcyBpcyB0aGUgdGltZXIgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciAqLworICBDSU5JVChUSU1FUkZVTkNUSU9OLCBGVU5DVElPTlBPSU5ULCA0KSwKKworICAvKiBUaGlzIGlzIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIHRpbWVyIGNhbGxiYWNrICovCisgIENJTklUKFRJTUVSREFUQSwgT0JKRUNUUE9JTlQsIDUpLAorCisgIC8qIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNvbm5lY3Rpb24gY2FjaGUgKi8KKyAgQ0lOSVQoTUFYQ09OTkVDVFMsIExPTkcsIDYpLAorCisgIENVUkxNT1BUX0xBU1RFTlRSWSAvKiB0aGUgbGFzdCB1bnVzZWQgKi8KK30gQ1VSTE1vcHRpb247CisKKworLyoKKyAqIE5hbWU6ICAgIGN1cmxfbXVsdGlfc2V0b3B0KCkKKyAqCisgKiBEZXNjOiAgICBTZXRzIG9wdGlvbnMgZm9yIHRoZSBtdWx0aSBoYW5kbGUuCisgKgorICogUmV0dXJuczogQ1VSTE0gZXJyb3IgY29kZS4KKyAqLworQ1VSTF9FWFRFUk4gQ1VSTE1jb2RlIGN1cmxfbXVsdGlfc2V0b3B0KENVUkxNICptdWx0aV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE1vcHRpb24gb3B0aW9uLCAuLi4pOworCisKKy8qCisgKiBOYW1lOiAgICBjdXJsX211bHRpX2Fzc2lnbigpCisgKgorICogRGVzYzogICAgVGhpcyBmdW5jdGlvbiBzZXRzIGFuIGFzc29jaWF0aW9uIGluIHRoZSBtdWx0aSBoYW5kbGUgYmV0d2VlbiB0aGUKKyAqICAgICAgICAgIGdpdmVuIHNvY2tldCBhbmQgYSBwcml2YXRlIHBvaW50ZXIgb2YgdGhlIGFwcGxpY2F0aW9uLiBUaGlzIGlzCisgKiAgICAgICAgICAob25seSkgdXNlZnVsIGZvciBjdXJsX211bHRpX3NvY2tldCB1c2VzLgorICoKKyAqIFJldHVybnM6IENVUkxNIGVycm9yIGNvZGUuCisgKi8KK0NVUkxfRVhURVJOIENVUkxNY29kZSBjdXJsX211bHRpX2Fzc2lnbihDVVJMTSAqbXVsdGlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkLCB2b2lkICpzb2NrcCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAvKiBlbmQgb2YgZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvaW5jbHVkZS9jdXJsL3N0ZGNoZWFkZXJzLmggYi9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvc3RkY2hlYWRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDgyZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvaW5jbHVkZS9jdXJsL3N0ZGNoZWFkZXJzLmgKQEAgLTAsMCArMSwzMyBAQAorI2lmbmRlZiBfX1NURENfSEVBREVSU19ICisjZGVmaW5lIF9fU1REQ19IRUFERVJTX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3NpemVfdCBmcmVhZCAodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKK3NpemVfdCBmd3JpdGUgKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CisKK2ludCBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2ludCBzdHJuY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKworI2VuZGlmIC8qIF9fU1REQ19IRUFERVJTX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2luY2x1ZGUvY3VybC90eXBlY2hlY2stZ2NjLmggYi9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvdHlwZWNoZWNrLWdjYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNTg0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9pbmNsdWRlL2N1cmwvdHlwZWNoZWNrLWdjYy5oCkBAIC0wLDAgKzEsNjAzIEBACisjaWZuZGVmIF9fQ1VSTF9UWVBFQ0hFQ0tfR0NDX0gKKyNkZWZpbmUgX19DVVJMX1RZUEVDSEVDS19HQ0NfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHdyYXBzIGN1cmxfZWFzeV9zZXRvcHQoKSB3aXRoIHR5cGVjaGVja2luZyAqLworCisvKiBUbyBhZGQgYSBuZXcga2luZCBvZiB3YXJuaW5nLCBhZGQgYW4KKyAqICAgaWYoX2N1cmxfaXNfc29tZXR5cGVfb3B0aW9uKF9jdXJsX29wdCkpCisgKiAgICAgaWYoIV9jdXJsX2lzX3NvbWV0eXBlKHZhbHVlKSkKKyAqICAgICAgIF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zb21ldHlwZSgpOworICogYmxvY2sgYW5kIGRlZmluZSBfY3VybF9pc19zb21ldHlwZV9vcHRpb24sIF9jdXJsX2lzX3NvbWV0eXBlIGFuZAorICogX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NvbWV0eXBlIGJlbG93CisgKgorICogTk9URTogV2UgdXNlIHR3byBuZXN0ZWQgJ2lmJyBzdGF0ZW1lbnRzIGhlcmUgaW5zdGVhZCBvZiB0aGUgJiYgb3BlcmF0b3IsIGluCisgKiAgICAgICBvcmRlciB0byB3b3JrIGFyb3VuZCBnY2MgYnVnICMzMjA2MS4gIEl0IGFmZmVjdHMgb25seSBnY2MgNC4zLngvNC40LngKKyAqICAgICAgIHdoZW4gY29tcGlsaW5nIHdpdGggLVdsb2dpY2FsLW9wLgorICoKKyAqIFRvIGFkZCBhbiBvcHRpb24gdGhhdCB1c2VzIHRoZSBzYW1lIHR5cGUgYXMgYW4gZXhpc3Rpbmcgb3B0aW9uLCB5b3UnbGwganVzdAorICogbmVlZCB0byBleHRlbmQgdGhlIGFwcHJvcHJpYXRlIF9jdXJsXypfb3B0aW9uIG1hY3JvCisgKi8KKyNkZWZpbmUgY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIG9wdGlvbiwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX190eXBlb2ZfXyAob3B0aW9uKSBfY3VybF9vcHQgPSBvcHRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYoX19idWlsdGluX2NvbnN0YW50X3AoX2N1cmxfb3B0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZihfY3VybF9pc19sb25nX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19sb25nKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2xvbmcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZihfY3VybF9pc19vZmZfdF9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19vZmZfdCh2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfb2ZmX3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZihfY3VybF9pc19zdHJpbmdfb3B0aW9uKF9jdXJsX29wdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19zdHJpbmcodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3N0cmluZygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZihfY3VybF9pc193cml0ZV9jYl9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc193cml0ZV9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3dyaXRlX2NhbGxiYWNrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1JFQURGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19yZWFkX2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3JlYWRfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0lPQ1RMRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19pb2N0bF9jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2lvY3RsX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NPQ0tPUFRGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19zb2Nrb3B0X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NvY2tvcHRfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX09QRU5TT0NLRVRGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19vcGVuc29ja2V0X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX29wZW5zb2NrZXRfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19wcm9ncmVzc19jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Byb2dyZXNzX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0RFQlVHRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19kZWJ1Z19jYih2YWx1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2RlYnVnX2NiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NTTF9DVFhfRlVOQ1RJT04pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19zc2xfY3R4X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NzbF9jdHhfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZihfY3VybF9pc19jb252X2NiX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19jb252X2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NvbnZfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NFRUtGVU5DVElPTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19zZWVrX2NiKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NlZWtfY2IoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZihfY3VybF9pc19jYl9kYXRhX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19jYl9kYXRhKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NiX2RhdGEoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0VSUk9SQlVGRkVSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19lcnJvcl9idWZmZXIodmFsdWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2Vycm9yX2J1ZmZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NUREVSUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19GSUxFKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX0ZJTEUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZihfY3VybF9pc19wb3N0ZmllbGRzX29wdGlvbihfY3VybF9vcHQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19wb3N0ZmllbGRzKHZhbHVlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Bvc3RmaWVsZHMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX0hUVFBQT1NUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19hcnIoKHZhbHVlKSwgc3RydWN0IGN1cmxfaHR0cHBvc3QpKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfaHR0cG9zdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZihfY3VybF9pc19zbGlzdF9vcHRpb24oX2N1cmxfb3B0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19hcnIoKHZhbHVlKSwgc3RydWN0IGN1cmxfc2xpc3QpKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfc2xpc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZigoX2N1cmxfb3B0KSA9PSBDVVJMT1BUX1NIQVJFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmKCFfY3VybF9pc19wdHIoKHZhbHVlKSwgQ1VSTFNIKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2N1cmxfZWFzeV9zZXRvcHRfZXJyX0NVUkxTSCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY3VybF9lYXN5X3NldG9wdChoYW5kbGUsIF9jdXJsX29wdCwgdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30pCisKKy8qIHdyYXBzIGN1cmxfZWFzeV9nZXRpbmZvKCkgd2l0aCB0eXBlY2hlY2tpbmcgKi8KKy8qIEZJWE1FOiBkb24ndCBhbGxvdyBjb25zdCBwb2ludGVycyAqLworI2RlZmluZSBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIGluZm8sIGFyZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3R5cGVvZl9fIChpbmZvKSBfY3VybF9pbmZvID0gaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZihfX2J1aWx0aW5fY29uc3RhbnRfcChfY3VybF9pbmZvKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKF9jdXJsX2lzX3N0cmluZ19pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgY2hhciAqKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX3N0cmluZygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKF9jdXJsX2lzX2xvbmdfaW5mbyhfY3VybF9pbmZvKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgbG9uZykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2xvbmcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKF9jdXJsX2lzX2RvdWJsZV9pbmZvKF9jdXJsX2luZm8pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgZG91YmxlKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2RvdWJsZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKF9jdXJsX2lzX3NsaXN0X2luZm8oX2N1cmxfaW5mbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYoIV9jdXJsX2lzX2FycigoYXJnKSwgc3RydWN0IGN1cmxfc2xpc3QgKikpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc2xpc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIF9jdXJsX2luZm8sIGFyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworLyogVE9ETzogdHlwZWNoZWNraW5nIGZvciBjdXJsX3NoYXJlX3NldG9wdCgpIGFuZCBjdXJsX211bHRpX3NldG9wdCgpLAorICogZm9yIG5vdyBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoIHRocmVlCisgKiBhcmd1bWVudHMKKyAqLworI2RlZmluZSBjdXJsX3NoYXJlX3NldG9wdChzaGFyZSxvcHQscGFyYW0pIGN1cmxfc2hhcmVfc2V0b3B0KHNoYXJlLG9wdCxwYXJhbSkKKyNkZWZpbmUgY3VybF9tdWx0aV9zZXRvcHQoaGFuZGxlLG9wdCxwYXJhbSkgY3VybF9tdWx0aV9zZXRvcHQoaGFuZGxlLG9wdCxwYXJhbSkKKworCisvKiB0aGUgYWN0dWFsIHdhcm5pbmdzLCB0cmlnZ2VyZWQgYnkgY2FsbGluZyB0aGUgX2N1cmxfZWFzeV9zZXRvcHRfZXJyKgorICogZnVuY3Rpb25zICovCisKKy8qIFRvIGRlZmluZSBhIG5ldyB3YXJuaW5nLCB1c2UgX0NVUkxfV0FSTklORyhpZGVudGlmaWVyLCAibWVzc2FnZSIpICovCisjZGVmaW5lIF9DVVJMX1dBUk5JTkcoaWQsIG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKHdhcm5pbmcobWVzc2FnZSkpKSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSAgICAgICBcCisgIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgaWQodm9pZCkgeyBfX2FzbV9fKCIiKTsgfQorCitfQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9sb25nLAorICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgbG9uZyBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQorX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9vZmZfdCwKKyAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfb2ZmX3QgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKK19DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3N0cmluZywKKyAgICAgICAgICAgICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhICIKKyAgICAgICAgICAgICAgInN0cmluZyAoY2hhciogb3IgY2hhcltdKSBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iCisgICkKK19DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3dyaXRlX2NhbGxiYWNrLAorICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgY3VybF93cml0ZV9jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQorX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfcmVhZF9jYiwKKyAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfcmVhZF9jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQorX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfaW9jdGxfY2IsCisgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX2lvY3RsX2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCitfQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9zb2Nrb3B0X2NiLAorICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgY3VybF9zb2Nrb3B0X2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCitfQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9vcGVuc29ja2V0X2NiLAorICAgICAgICAgICAgICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgIgorICAgICAgICAgICAgICAiY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIKKyAgKQorX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfcHJvZ3Jlc3NfY2IsCisgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX3Byb2dyZXNzX2NhbGxiYWNrIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCitfQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9kZWJ1Z19jYiwKKyAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIGN1cmxfZGVidWdfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKK19DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NzbF9jdHhfY2IsCisgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX3NzbF9jdHhfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKK19DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NvbnZfY2IsCisgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX2NvbnZfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKK19DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3NlZWtfY2IsCisgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBjdXJsX3NlZWtfY2FsbGJhY2sgYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKK19DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2NiX2RhdGEsCisgICAgICAgICAgICAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAiCisgICAgICAgICAgICAgICJwcml2YXRlIGRhdGEgcG9pbnRlciBhcyBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQorX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfZXJyb3JfYnVmZmVyLAorICAgICAgICAgICAgICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgIgorICAgICAgICAgICAgICAiY2hhciBidWZmZXIgb2YgQ1VSTF9FUlJPUl9TSVpFIGFzIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCitfQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9GSUxFLAorICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgRklMRSogYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKK19DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3Bvc3RmaWVsZHMsCisgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSB2b2lkKiBvciBjaGFyKiBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQorX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9odHRwb3N0LAorICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgc3RydWN0IGN1cmxfaHR0cHBvc3QqIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCitfQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9jdXJsX3NsaXN0LAorICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgc3RydWN0IGN1cmxfc2xpc3QqIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCitfQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfc2V0b3B0X2Vycl9DVVJMU0gsCisgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBDVVJMU0gqIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCisKK19DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9nZXRpbmZvX2Vycl9zdHJpbmcsCisgICJjdXJsX2Vhc3lfZ2V0aW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byBjaGFyICogZm9yIHRoaXMgaW5mbyIpCitfQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfbG9uZywKKyAgImN1cmxfZWFzeV9nZXRpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIGxvbmcgZm9yIHRoaXMgaW5mbyIpCitfQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfZG91YmxlLAorICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gZG91YmxlIGZvciB0aGlzIGluZm8iKQorX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc2xpc3QsCisgICJjdXJsX2Vhc3lfZ2V0aW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byBzdHJ1Y3QgY3VybF9zbGlzdCAqIGZvciB0aGlzIGluZm8iKQorCisvKiBncm91cHMgb2YgY3VybF9lYXN5X3NldG9wcyBvcHRpb25zIHRoYXQgdGFrZSB0aGUgc2FtZSB0eXBlIG9mIGFyZ3VtZW50ICovCisKKy8qIFRvIGFkZCBhIG5ldyBvcHRpb24gdG8gb25lIG9mIHRoZSBncm91cHMsIGp1c3QgYWRkCisgKiAgIChvcHRpb24pID09IENVUkxPUFRfU09NRVRISU5HCisgKiB0byB0aGUgb3ItZXhwcmVzc2lvbi4gSWYgdGhlIG9wdGlvbiB0YWtlcyBhIGxvbmcgb3IgY3VybF9vZmZfdCwgeW91IGRvbid0CisgKiBoYXZlIHRvIGRvIGFueXRoaW5nCisgKi8KKworLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgb3B0aW9uIHRha2VzIGEgbG9uZyBhcmd1bWVudCAqLworI2RlZmluZSBfY3VybF9pc19sb25nX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoMCA8IChvcHRpb24pICYmIChvcHRpb24pIDwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQpCisKKyNkZWZpbmUgX2N1cmxfaXNfb2ZmX3Rfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKChvcHRpb24pID4gQ1VSTE9QVFRZUEVfT0ZGX1QpCisKKy8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIG9wdGlvbiB0YWtlcyBhIGNoYXIqIGFyZ3VtZW50ICovCisjZGVmaW5lIF9jdXJsX2lzX3N0cmluZ19vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgob3B0aW9uKSA9PSBDVVJMT1BUX1VSTCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BST1hZIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0lOVEVSRkFDRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX05FVFJDX0ZJTEUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1VTRVJQV0QgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1VTRVJOQU1FIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BBU1NXT1JEIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BST1hZVVNFUlBXRCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BST1hZVVNFUk5BTUUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BST1hZUEFTU1dPUkQgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX05PUFJPWFkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0FDQ0VQVF9FTkNPRElORyB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JFRkVSRVIgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1VTRVJBR0VOVCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPT0tJRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPT0tJRUZJTEUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPT0tJRUpBUiB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPT0tJRUxJU1QgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0ZUUFBPUlQgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0ZUUF9BTFRFUk5BVElWRV9UT19VU0VSIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0ZUUF9BQ0NPVU5UIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JBTkdFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NVU1RPTVJFUVVFU1QgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NTTENFUlQgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NTTENFUlRUWVBFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NTTEtFWSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NTTEtFWVRZUEUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0tFWVBBU1NXRCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NTTEVOR0lORSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NBSU5GTyB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NBUEFUSCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JBTkRPTV9GSUxFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0VHRFNPQ0tFVCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NTTF9DSVBIRVJfTElTVCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0tSQkxFVkVMIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1IHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NTSF9QVUJMSUNfS0VZRklMRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NTSF9QUklWQVRFX0tFWUZJTEUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NSTEZJTEUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0lTU1VFUkNFUlQgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NPQ0tTNV9HU1NBUElfU0VSVklDRSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1NTSF9LTk9XTkhPU1RTIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX01BSUxfRlJPTSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JUU1BfU0VTU0lPTl9JRCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JUU1BfU1RSRUFNX1VSSSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1JUU1BfVFJBTlNQT1JUIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAwKQorCisvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBvcHRpb24gdGFrZXMgYSBjdXJsX3dyaXRlX2NhbGxiYWNrIGFyZ3VtZW50ICovCisjZGVmaW5lIF9jdXJsX2lzX3dyaXRlX2NiX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgob3B0aW9uKSA9PSBDVVJMT1BUX0hFQURFUkZVTkNUSU9OIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1dSSVRFRlVOQ1RJT04pCisKKy8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIG9wdGlvbiB0YWtlcyBhIGN1cmxfY29udl9jYWxsYmFjayBhcmd1bWVudCAqLworI2RlZmluZSBfY3VybF9pc19jb252X2NiX29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKG9wdGlvbikgPT0gQ1VSTE9QVF9DT05WX1RPX05FVFdPUktfRlVOQ1RJT04gfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9DT05WX0ZST01fTkVUV09SS19GVU5DVElPTiB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKG9wdGlvbikgPT0gQ1VSTE9QVF9DT05WX0ZST01fVVRGOF9GVU5DVElPTikKKworLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgb3B0aW9uIHRha2VzIGEgZGF0YSBhcmd1bWVudCB0byBwYXNzIHRvIGEgY2FsbGJhY2sgKi8KKyNkZWZpbmUgX2N1cmxfaXNfY2JfZGF0YV9vcHRpb24ob3B0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKChvcHRpb24pID09IENVUkxPUFRfV1JJVEVEQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfUkVBRERBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfSU9DVExEQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfU09DS09QVERBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfT1BFTlNPQ0tFVERBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfUFJPR1JFU1NEQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfV1JJVEVIRUFERVIgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfREVCVUdEQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfU1NMX0NUWF9EQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfU0VFS0RBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfUFJJVkFURSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfU1NIX0tFWURBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfSU5URVJMRUFWRURBVEEgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfQ0hVTktfREFUQSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIChvcHRpb24pID09IENVUkxPUFRfRk5NQVRDSF9EQVRBIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIDApCisKKy8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIG9wdGlvbiB0YWtlcyBhIFBPU1QgZGF0YSBhcmd1bWVudCAodm9pZCogb3IgY2hhciopICovCisjZGVmaW5lIF9jdXJsX2lzX3Bvc3RmaWVsZHNfb3B0aW9uKG9wdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgob3B0aW9uKSA9PSBDVVJMT1BUX1BPU1RGSUVMRFMgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0NPUFlQT1NURklFTERTIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAwKQorCisvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBvcHRpb24gdGFrZXMgYSBzdHJ1Y3QgY3VybF9zbGlzdCAqIGFyZ3VtZW50ICovCisjZGVmaW5lIF9jdXJsX2lzX3NsaXN0X29wdGlvbihvcHRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgob3B0aW9uKSA9PSBDVVJMT1BUX0hUVFBIRUFERVIgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX0hUVFAyMDBBTElBU0VTIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1FVT1RFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BPU1RRVU9URSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1BSRVFVT1RFIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX1RFTE5FVE9QVElPTlMgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAob3B0aW9uKSA9PSBDVVJMT1BUX01BSUxfUkNQVCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAwKQorCisvKiBncm91cHMgb2YgY3VybF9lYXN5X2dldGluZm8gaW5mb3MgdGhhdCB0YWtlIHRoZSBzYW1lIHR5cGUgb2YgYXJndW1lbnQgKi8KKworLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgaW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byBjaGFyICogYXJndW1lbnQgKi8KKyNkZWZpbmUgX2N1cmxfaXNfc3RyaW5nX2luZm8oaW5mbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKENVUkxJTkZPX1NUUklORyA8IChpbmZvKSAmJiAoaW5mbykgPCBDVVJMSU5GT19MT05HKQorCisvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIGxvbmcgYXJndW1lbnQgKi8KKyNkZWZpbmUgX2N1cmxfaXNfbG9uZ19pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKENVUkxJTkZPX0xPTkcgPCAoaW5mbykgJiYgKGluZm8pIDwgQ1VSTElORk9fRE9VQkxFKQorCisvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIGRvdWJsZSBhcmd1bWVudCAqLworI2RlZmluZSBfY3VybF9pc19kb3VibGVfaW5mbyhpbmZvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoQ1VSTElORk9fRE9VQkxFIDwgKGluZm8pICYmIChpbmZvKSA8IENVUkxJTkZPX1NMSVNUKQorCisvKiB0cnVlIGlmIGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3RydWN0IGN1cmxfc2xpc3QgKiBhcmd1bWVudCAqLworI2RlZmluZSBfY3VybF9pc19zbGlzdF9pbmZvKGluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoQ1VSTElORk9fU0xJU1QgPCAoaW5mbykpCisKKworLyogdHlwZWNoZWNrIGhlbHBlcnMgLS0gY2hlY2sgd2hldGhlciBnaXZlbiBleHByZXNzaW9uIGhhcyByZXF1ZXN0ZWQgdHlwZSovCisKKy8qIEZvciBwb2ludGVycywgeW91IGNhbiB1c2UgdGhlIF9jdXJsX2lzX3B0ci9fY3VybF9pc19hcnIgbWFjcm9zLAorICogb3RoZXJ3aXNlIGRlZmluZSBhIG5ldyBtYWNyby4gU2VhcmNoIGZvciBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wCisgKiBpbiB0aGUgR0NDIG1hbnVhbC4KKyAqIE5PVEU6IHRoZXNlIG1hY3JvcyBNVVNUIE5PVCBFVkFMVUFURSB0aGVpciBhcmd1bWVudHMhIFRoZSBhcmd1bWVudCBpcworICogdGhlIGFjdHVhbCBleHByZXNzaW9uIHBhc3NlZCB0byB0aGUgY3VybF9lYXN5X3NldG9wdCBtYWNyby4gVGhpcworICogbWVhbnMgdGhhdCB5b3UgY2FuIG9ubHkgYXBwbHkgdGhlIHNpemVvZiBhbmQgX190eXBlb2ZfXyBvcGVyYXRvcnMsIG5vCisgKiA9PSBvciB3aGF0c29ldmVyLgorICovCisKKy8qIFhYWDogc2hvdWxkIGV2YWx1YXRlIHRvIHRydWUgaWZmIGV4cHIgaXMgYSBwb2ludGVyICovCisjZGVmaW5lIF9jdXJsX2lzX2FueV9wdHIoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChzaXplb2YoZXhwcikgPT0gc2l6ZW9mKHZvaWQqKSkKKworLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBOVUxMICovCisvKiBYWFg6IG11c3Qgbm90IGV2YWx1YXRlIGV4cHIsIHNvIHRoaXMgY2hlY2sgaXMgbm90IGFjY3VyYXRlICovCisjZGVmaW5lIF9jdXJsX2lzX05VTEwoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIF9fdHlwZW9mX18oTlVMTCkpKQorCisvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIHR5cGUqLCBjb25zdCB0eXBlKiBvciBOVUxMICovCisjZGVmaW5lIF9jdXJsX2lzX3B0cihleHByLCB0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIHR5cGUgKikgfHwgICAgICAgICAgICAgICAgICBcCisgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGNvbnN0IHR5cGUgKikpCisKKy8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb25lIG9mIHR5cGVbXSwgdHlwZSosIE5VTEwgb3IgY29uc3QgdHlwZSogKi8KKyNkZWZpbmUgX2N1cmxfaXNfYXJyKGV4cHIsIHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9jdXJsX2lzX3B0cigoZXhwciksIHR5cGUpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgdHlwZSBbXSkpCisKKy8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgYSBzdHJpbmcgKi8KKyNkZWZpbmUgX2N1cmxfaXNfc3RyaW5nKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9jdXJsX2lzX2FycigoZXhwciksIGNoYXIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2lzX2FycigoZXhwciksIHNpZ25lZCBjaGFyKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2lzX2FycigoZXhwciksIHVuc2lnbmVkIGNoYXIpKQorCisvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIGEgbG9uZyAobm8gbWF0dGVyIHRoZSBzaWduZWRuZXNzKQorICogWFhYOiBmb3Igbm93LCBpbnQgaXMgYWxzbyBhY2NlcHRlZCAoYW5kIHRoZXJlZm9yZSBzaG9ydCBhbmQgY2hhciwgd2hpY2gKKyAqIGFyZSBwcm9tb3RlZCB0byBpbnQgd2hlbiBwYXNzZWQgdG8gYSB2YXJpYWRpYyBmdW5jdGlvbikgKi8KKyNkZWZpbmUgX2N1cmxfaXNfbG9uZyhleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgbG9uZykgfHwgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgc2lnbmVkIGxvbmcpIHx8ICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgdW5zaWduZWQgbG9uZykgfHwgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgaW50KSB8fCAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgc2lnbmVkIGludCkgfHwgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgdW5zaWduZWQgaW50KSB8fCAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgc2hvcnQpIHx8ICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgc2lnbmVkIHNob3J0KSB8fCAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgdW5zaWduZWQgc2hvcnQpIHx8ICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgY2hhcikgfHwgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgc2lnbmVkIGNoYXIpIHx8ICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgdW5zaWduZWQgY2hhcikpCisKKy8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX29mZl90ICovCisjZGVmaW5lIF9jdXJsX2lzX29mZl90KGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGN1cmxfb2ZmX3QpKQorCisvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIGFidWZmZXIgc3VpdGFibGUgZm9yIENVUkxPUFRfRVJST1JCVUZGRVIgKi8KKy8qIFhYWDogYWxzbyBjaGVjayBzaXplIG9mIGFuIGNoYXJbXSBhcnJheT8gKi8KKyNkZWZpbmUgX2N1cmxfaXNfZXJyb3JfYnVmZmVyKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgY2hhciAqKSB8fCAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgY2hhcltdKSkKKworLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIChjb25zdCkgdm9pZCogb3IgKGNvbnN0KSBGSUxFKiAqLworI2lmIDAKKyNkZWZpbmUgX2N1cmxfaXNfY2JfZGF0YShleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9jdXJsX2lzX3B0cigoZXhwciksIHZvaWQpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2lzX3B0cigoZXhwciksIEZJTEUpKQorI2Vsc2UgLyogYmUgbGVzcyBzdHJpY3QgKi8KKyNkZWZpbmUgX2N1cmxfaXNfY2JfZGF0YShleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX2N1cmxfaXNfYW55X3B0cihleHByKQorI2VuZGlmCisKKy8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBGSUxFKiAqLworI2RlZmluZSBfY3VybF9pc19GSUxFKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBGSUxFICopKQorCisvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGNhbiBiZSBwYXNzZWQgYXMgUE9TVCBkYXRhICh2b2lkKiBvciBjaGFyKikgKi8KKyNkZWZpbmUgX2N1cmxfaXNfcG9zdGZpZWxkcyhleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9jdXJsX2lzX3B0cigoZXhwciksIHZvaWQpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2lzX2FycigoZXhwciksIGNoYXIpKQorCisvKiBGSVhNRTogdGhlIHdob2xlIGNhbGxiYWNrIGNoZWNraW5nIGlzIG1lc3N5Li4uCisgKiBUaGUgaWRlYSBpcyB0byB0b2xlcmF0ZSBjaGFyIHZzLiB2b2lkIGFuZCBjb25zdCB2cy4gbm90IGNvbnN0CisgKiBwb2ludGVycyBpbiBhcmd1bWVudHMgYXQgbGVhc3QKKyAqLworLyogaGVscGVyOiBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBmdW5jdGlvbnMgYW5kCisgKiBmdW5jdGlvbiBwb2ludGVycywgaGlkZSBpdCAqLworI2RlZmluZSBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKGZ1bmMsIHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGZ1bmMpLCB0eXBlKSB8fCAgICAgICAgICAgICAgICAgICAgXAorICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGZ1bmMpLCB0eXBlKikpCisKKy8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX3JlYWRfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCisjZGVmaW5lIF9jdXJsX2lzX3JlYWRfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIF9fdHlwZW9mX18oZnJlYWQpKSB8fCAgICAgICBcCisgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGN1cmxfcmVhZF9jYWxsYmFjaykgfHwgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazEpIHx8ICAgICAgICAgICAgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazQpIHx8ICAgICAgICAgICAgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazUpIHx8ICAgICAgICAgICAgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfcmVhZF9jYWxsYmFjazYpKQordHlwZWRlZiBzaXplX3QgKF9jdXJsX3JlYWRfY2FsbGJhY2sxKShjaGFyICosIHNpemVfdCwgc2l6ZV90LCB2b2lkKik7Cit0eXBlZGVmIHNpemVfdCAoX2N1cmxfcmVhZF9jYWxsYmFjazIpKGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsIGNvbnN0IHZvaWQqKTsKK3R5cGVkZWYgc2l6ZV90IChfY3VybF9yZWFkX2NhbGxiYWNrMykoY2hhciAqLCBzaXplX3QsIHNpemVfdCwgRklMRSopOwordHlwZWRlZiBzaXplX3QgKF9jdXJsX3JlYWRfY2FsbGJhY2s0KSh2b2lkICosIHNpemVfdCwgc2l6ZV90LCB2b2lkKik7Cit0eXBlZGVmIHNpemVfdCAoX2N1cmxfcmVhZF9jYWxsYmFjazUpKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIGNvbnN0IHZvaWQqKTsKK3R5cGVkZWYgc2l6ZV90IChfY3VybF9yZWFkX2NhbGxiYWNrNikodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSopOworCisvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF93cml0ZV9jYWxsYmFjayBvciAic2ltaWxhciIgKi8KKyNkZWZpbmUgX2N1cmxfaXNfd3JpdGVfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9jdXJsX2lzX3JlYWRfY2IoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgX190eXBlb2ZfXyhmd3JpdGUpKSB8fCAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgY3VybF93cml0ZV9jYWxsYmFjaykgfHwgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF93cml0ZV9jYWxsYmFjazEpIHx8ICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF93cml0ZV9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF93cml0ZV9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF93cml0ZV9jYWxsYmFjazQpIHx8ICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF93cml0ZV9jYWxsYmFjazUpIHx8ICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF93cml0ZV9jYWxsYmFjazYpKQordHlwZWRlZiBzaXplX3QgKF9jdXJsX3dyaXRlX2NhbGxiYWNrMSkoY29uc3QgY2hhciAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCopOwordHlwZWRlZiBzaXplX3QgKF9jdXJsX3dyaXRlX2NhbGxiYWNrMikoY29uc3QgY2hhciAqLCBzaXplX3QsIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqKTsKK3R5cGVkZWYgc2l6ZV90IChfY3VybF93cml0ZV9jYWxsYmFjazMpKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUqKTsKK3R5cGVkZWYgc2l6ZV90IChfY3VybF93cml0ZV9jYWxsYmFjazQpKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQqKTsKK3R5cGVkZWYgc2l6ZV90IChfY3VybF93cml0ZV9jYWxsYmFjazUpKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKik7Cit0eXBlZGVmIHNpemVfdCAoX2N1cmxfd3JpdGVfY2FsbGJhY2s2KShjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFKik7CisKKy8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX2lvY3RsX2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLworI2RlZmluZSBfY3VybF9pc19pb2N0bF9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBjdXJsX2lvY3RsX2NhbGxiYWNrKSB8fCAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2lvY3RsX2NhbGxiYWNrMSkgfHwgICAgICAgICAgICAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2lvY3RsX2NhbGxiYWNrMikgfHwgICAgICAgICAgICAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2lvY3RsX2NhbGxiYWNrMykgfHwgICAgICAgICAgICAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2lvY3RsX2NhbGxiYWNrNCkpCit0eXBlZGVmIGN1cmxpb2VyciAoX2N1cmxfaW9jdGxfY2FsbGJhY2sxKShDVVJMICosIGludCwgdm9pZCopOwordHlwZWRlZiBjdXJsaW9lcnIgKF9jdXJsX2lvY3RsX2NhbGxiYWNrMikoQ1VSTCAqLCBpbnQsIGNvbnN0IHZvaWQqKTsKK3R5cGVkZWYgY3VybGlvZXJyIChfY3VybF9pb2N0bF9jYWxsYmFjazMpKENVUkwgKiwgY3VybGlvY21kLCB2b2lkKik7Cit0eXBlZGVmIGN1cmxpb2VyciAoX2N1cmxfaW9jdGxfY2FsbGJhY2s0KShDVVJMICosIGN1cmxpb2NtZCwgY29uc3Qgdm9pZCopOworCisvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9zb2Nrb3B0X2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLworI2RlZmluZSBfY3VybF9pc19zb2Nrb3B0X2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBjdXJsX3NvY2tvcHRfY2FsbGJhY2spIHx8ICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NvY2tvcHRfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3NvY2tvcHRfY2FsbGJhY2syKSkKK3R5cGVkZWYgaW50IChfY3VybF9zb2Nrb3B0X2NhbGxiYWNrMSkodm9pZCAqLCBjdXJsX3NvY2tldF90LCBjdXJsc29ja3R5cGUpOwordHlwZWRlZiBpbnQgKF9jdXJsX3NvY2tvcHRfY2FsbGJhY2syKShjb25zdCB2b2lkICosIGN1cmxfc29ja2V0X3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxzb2NrdHlwZSk7CisKKy8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX29wZW5zb2NrZXRfY2FsbGJhY2sgb3IKKyAgICJzaW1pbGFyIiAqLworI2RlZmluZSBfY3VybF9pc19vcGVuc29ja2V0X2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBjdXJsX29wZW5zb2NrZXRfY2FsbGJhY2spIHx8XAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2syKSB8fCAgICAgICAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2szKSB8fCAgICAgICAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2s0KSkKK3R5cGVkZWYgY3VybF9zb2NrZXRfdCAoX2N1cmxfb3BlbnNvY2tldF9jYWxsYmFjazEpCisgICh2b2lkICosIGN1cmxzb2NrdHlwZSwgc3RydWN0IGN1cmxfc29ja2FkZHIgKik7Cit0eXBlZGVmIGN1cmxfc29ja2V0X3QgKF9jdXJsX29wZW5zb2NrZXRfY2FsbGJhY2syKQorICAodm9pZCAqLCBjdXJsc29ja3R5cGUsIGNvbnN0IHN0cnVjdCBjdXJsX3NvY2thZGRyICopOwordHlwZWRlZiBjdXJsX3NvY2tldF90IChfY3VybF9vcGVuc29ja2V0X2NhbGxiYWNrMykKKyAgKGNvbnN0IHZvaWQgKiwgY3VybHNvY2t0eXBlLCBzdHJ1Y3QgY3VybF9zb2NrYWRkciAqKTsKK3R5cGVkZWYgY3VybF9zb2NrZXRfdCAoX2N1cmxfb3BlbnNvY2tldF9jYWxsYmFjazQpCisgIChjb25zdCB2b2lkICosIGN1cmxzb2NrdHlwZSwgY29uc3Qgc3RydWN0IGN1cmxfc29ja2FkZHIgKik7CisKKy8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX3Byb2dyZXNzX2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLworI2RlZmluZSBfY3VybF9pc19wcm9ncmVzc19jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBjdXJsX3Byb2dyZXNzX2NhbGxiYWNrKSB8fCAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3Byb2dyZXNzX2NhbGxiYWNrMSkgfHwgICAgICAgICAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX3Byb2dyZXNzX2NhbGxiYWNrMikpCit0eXBlZGVmIGludCAoX2N1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sxKSh2b2lkICosCisgICAgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsKK3R5cGVkZWYgaW50IChfY3VybF9wcm9ncmVzc19jYWxsYmFjazIpKGNvbnN0IHZvaWQgKiwKKyAgICBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOworCisvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9kZWJ1Z19jYWxsYmFjayBvciAic2ltaWxhciIgKi8KKyNkZWZpbmUgX2N1cmxfaXNfZGVidWdfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgY3VybF9kZWJ1Z19jYWxsYmFjaykgfHwgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazEpIHx8ICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazIpIHx8ICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazMpIHx8ICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazQpIHx8ICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazUpIHx8ICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazYpIHx8ICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazcpIHx8ICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9kZWJ1Z19jYWxsYmFjazgpKQordHlwZWRlZiBpbnQgKF9jdXJsX2RlYnVnX2NhbGxiYWNrMSkgKENVUkwgKiwKKyAgICBjdXJsX2luZm90eXBlLCBjaGFyICosIHNpemVfdCwgdm9pZCAqKTsKK3R5cGVkZWYgaW50IChfY3VybF9kZWJ1Z19jYWxsYmFjazIpIChDVVJMICosCisgICAgY3VybF9pbmZvdHlwZSwgY2hhciAqLCBzaXplX3QsIGNvbnN0IHZvaWQgKik7Cit0eXBlZGVmIGludCAoX2N1cmxfZGVidWdfY2FsbGJhY2szKSAoQ1VSTCAqLAorICAgIGN1cmxfaW5mb3R5cGUsIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCB2b2lkICopOwordHlwZWRlZiBpbnQgKF9jdXJsX2RlYnVnX2NhbGxiYWNrNCkgKENVUkwgKiwKKyAgICBjdXJsX2luZm90eXBlLCBjb25zdCBjaGFyICosIHNpemVfdCwgY29uc3Qgdm9pZCAqKTsKK3R5cGVkZWYgaW50IChfY3VybF9kZWJ1Z19jYWxsYmFjazUpIChDVVJMICosCisgICAgY3VybF9pbmZvdHlwZSwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QsIHZvaWQgKik7Cit0eXBlZGVmIGludCAoX2N1cmxfZGVidWdfY2FsbGJhY2s2KSAoQ1VSTCAqLAorICAgIGN1cmxfaW5mb3R5cGUsIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90LCBjb25zdCB2b2lkICopOwordHlwZWRlZiBpbnQgKF9jdXJsX2RlYnVnX2NhbGxiYWNrNykgKENVUkwgKiwKKyAgICBjdXJsX2luZm90eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCwgdm9pZCAqKTsKK3R5cGVkZWYgaW50IChfY3VybF9kZWJ1Z19jYWxsYmFjazgpIChDVVJMICosCisgICAgY3VybF9pbmZvdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBzaXplX3QsIGNvbnN0IHZvaWQgKik7CisKKy8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX3NzbF9jdHhfY2FsbGJhY2sgb3IgInNpbWlsYXIiICovCisvKiB0aGlzIGlzIGdldHRpbmcgZXZlbiBtZXNzaWVyLi4uICovCisjZGVmaW5lIF9jdXJsX2lzX3NzbF9jdHhfY2IoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChfY3VybF9pc19OVUxMKGV4cHIpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGN1cmxfc3NsX2N0eF9jYWxsYmFjaykgfHwgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazEpIHx8ICAgICAgICAgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazQpIHx8ICAgICAgICAgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazUpIHx8ICAgICAgICAgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazYpIHx8ICAgICAgICAgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazcpIHx8ICAgICAgICAgICAgICBcCisgICBfY3VybF9jYWxsYmFja19jb21wYXRpYmxlKChleHByKSwgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazgpKQordHlwZWRlZiBDVVJMY29kZSAoX2N1cmxfc3NsX2N0eF9jYWxsYmFjazEpKENVUkwgKiwgdm9pZCAqLCB2b2lkICopOwordHlwZWRlZiBDVVJMY29kZSAoX2N1cmxfc3NsX2N0eF9jYWxsYmFjazIpKENVUkwgKiwgdm9pZCAqLCBjb25zdCB2b2lkICopOwordHlwZWRlZiBDVVJMY29kZSAoX2N1cmxfc3NsX2N0eF9jYWxsYmFjazMpKENVUkwgKiwgY29uc3Qgdm9pZCAqLCB2b2lkICopOwordHlwZWRlZiBDVVJMY29kZSAoX2N1cmxfc3NsX2N0eF9jYWxsYmFjazQpKENVUkwgKiwgY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworI2lmZGVmIEhFQURFUl9TU0xfSAorLyogaGFjazogaWYgd2UgaW5jbHVkZWQgT3BlblNTTCdzIHNzbC5oLCB3ZSBrbm93IGFib3V0IFNTTF9DVFgKKyAqIHRoaXMgd2lsbCBvZiBjb3Vyc2UgYnJlYWsgaWYgd2UncmUgaW5jbHVkZWQgYmVmb3JlIE9wZW5TU0wgaGVhZGVycy4uLgorICovCit0eXBlZGVmIENVUkxjb2RlIChfY3VybF9zc2xfY3R4X2NhbGxiYWNrNSkoQ1VSTCAqLCBTU0xfQ1RYLCB2b2lkICopOwordHlwZWRlZiBDVVJMY29kZSAoX2N1cmxfc3NsX2N0eF9jYWxsYmFjazYpKENVUkwgKiwgU1NMX0NUWCwgY29uc3Qgdm9pZCAqKTsKK3R5cGVkZWYgQ1VSTGNvZGUgKF9jdXJsX3NzbF9jdHhfY2FsbGJhY2s3KShDVVJMICosIGNvbnN0IFNTTF9DVFgsIHZvaWQgKik7Cit0eXBlZGVmIENVUkxjb2RlIChfY3VybF9zc2xfY3R4X2NhbGxiYWNrOCkoQ1VSTCAqLCBjb25zdCBTU0xfQ1RYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKik7CisjZWxzZQordHlwZWRlZiBfY3VybF9zc2xfY3R4X2NhbGxiYWNrMSBfY3VybF9zc2xfY3R4X2NhbGxiYWNrNTsKK3R5cGVkZWYgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazEgX2N1cmxfc3NsX2N0eF9jYWxsYmFjazY7Cit0eXBlZGVmIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2sxIF9jdXJsX3NzbF9jdHhfY2FsbGJhY2s3OwordHlwZWRlZiBfY3VybF9zc2xfY3R4X2NhbGxiYWNrMSBfY3VybF9zc2xfY3R4X2NhbGxiYWNrODsKKyNlbmRpZgorCisvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9jb252X2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLworI2RlZmluZSBfY3VybF9pc19jb252X2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX2N1cmxfaXNfTlVMTChleHByKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBjdXJsX2NvbnZfY2FsbGJhY2spIHx8ICAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2NvbnZfY2FsbGJhY2sxKSB8fCAgICAgICAgICAgICAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2NvbnZfY2FsbGJhY2syKSB8fCAgICAgICAgICAgICAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2NvbnZfY2FsbGJhY2szKSB8fCAgICAgICAgICAgICAgICAgXAorICAgX2N1cmxfY2FsbGJhY2tfY29tcGF0aWJsZSgoZXhwciksIF9jdXJsX2NvbnZfY2FsbGJhY2s0KSkKK3R5cGVkZWYgQ1VSTGNvZGUgKCpfY3VybF9jb252X2NhbGxiYWNrMSkoY2hhciAqLCBzaXplX3QgbGVuZ3RoKTsKK3R5cGVkZWYgQ1VSTGNvZGUgKCpfY3VybF9jb252X2NhbGxiYWNrMikoY29uc3QgY2hhciAqLCBzaXplX3QgbGVuZ3RoKTsKK3R5cGVkZWYgQ1VSTGNvZGUgKCpfY3VybF9jb252X2NhbGxiYWNrMykodm9pZCAqLCBzaXplX3QgbGVuZ3RoKTsKK3R5cGVkZWYgQ1VSTGNvZGUgKCpfY3VybF9jb252X2NhbGxiYWNrNCkoY29uc3Qgdm9pZCAqLCBzaXplX3QgbGVuZ3RoKTsKKworLyogZXZhbHVhdGVzIHRvIHRydWUgaWYgZXhwciBpcyBvZiB0eXBlIGN1cmxfc2Vla19jYWxsYmFjayBvciAic2ltaWxhciIgKi8KKyNkZWZpbmUgX2N1cmxfaXNfc2Vla19jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9jdXJsX2lzX05VTEwoZXhwcikgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhleHByKSwgY3VybF9zZWVrX2NhbGxiYWNrKSB8fCAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zZWVrX2NhbGxiYWNrMSkgfHwgICAgICAgICAgICAgICAgIFwKKyAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9zZWVrX2NhbGxiYWNrMikpCit0eXBlZGVmIENVUkxjb2RlICgqX2N1cmxfc2Vla19jYWxsYmFjazEpKHZvaWQgKiwgY3VybF9vZmZfdCwgaW50KTsKK3R5cGVkZWYgQ1VSTGNvZGUgKCpfY3VybF9zZWVrX2NhbGxiYWNrMikoY29uc3Qgdm9pZCAqLCBjdXJsX29mZl90LCBpbnQpOworCisKKyNlbmRpZiAvKiBfX0NVUkxfVFlQRUNIRUNLX0dDQ19IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9pbnN0YWxsLXNoIGIvY3VybC03LjI1LjAvaW5zdGFsbC1zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hODVjMjAyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvaW5zdGFsbC1zaApAQCAtMCwwICsxLDI1MCBAQAorIyEvYmluL3NoCisjCisjIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQorIyBUaGlzIGNvbWVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCkuCisjCisjIENvcHlyaWdodCAxOTkxIGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAorIyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyMgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworIyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyMgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorIyB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZQorIyBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyMgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisjCisjIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50CisjIGBtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CisjIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KKyMgZnJvbSBzY3JhdGNoLiAgSXQgY2FuIG9ubHkgaW5zdGFsbCBvbmUgZmlsZSBhdCBhIHRpbWUsIGEgcmVzdHJpY3Rpb24KKyMgc2hhcmVkIHdpdGggbWFueSBPUydzIGluc3RhbGwgcHJvZ3JhbXMuCisKKworIyBzZXQgRE9JVFBST0cgdG8gZWNobyB0byB0ZXN0IHRoaXMgc2NyaXB0CisKKyMgRG9uJ3QgdXNlIDotIHNpbmNlIDQuM0JTRCBhbmQgZWFybGllciBzaGVsbHMgZG9uJ3QgbGlrZSBpdC4KK2RvaXQ9IiR7RE9JVFBST0ctfSIKKworCisjIHB1dCBpbiBhYnNvbHV0ZSBwYXRocyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtIGluIHlvdXIgcGF0aDsgb3IgdXNlIGVudi4gdmFycy4KKworbXZwcm9nPSIke01WUFJPRy1tdn0iCitjcHByb2c9IiR7Q1BQUk9HLWNwfSIKK2NobW9kcHJvZz0iJHtDSE1PRFBST0ctY2htb2R9IgorY2hvd25wcm9nPSIke0NIT1dOUFJPRy1jaG93bn0iCitjaGdycHByb2c9IiR7Q0hHUlBQUk9HLWNoZ3JwfSIKK3N0cmlwcHJvZz0iJHtTVFJJUFBST0ctc3RyaXB9Igorcm1wcm9nPSIke1JNUFJPRy1ybX0iCitta2RpcnByb2c9IiR7TUtESVJQUk9HLW1rZGlyfSIKKwordHJhbnNmb3JtYmFzZW5hbWU9IiIKK3RyYW5zZm9ybV9hcmc9IiIKK2luc3RjbWQ9IiRtdnByb2ciCitjaG1vZGNtZD0iJGNobW9kcHJvZyAwNzU1IgorY2hvd25jbWQ9IiIKK2NoZ3JwY21kPSIiCitzdHJpcGNtZD0iIgorcm1jbWQ9IiRybXByb2cgLWYiCittdmNtZD0iJG12cHJvZyIKK3NyYz0iIgorZHN0PSIiCitkaXJfYXJnPSIiCisKK3doaWxlIFsgeCIkMSIgIT0geCBdOyBkbworICAgIGNhc2UgJDEgaW4KKwktYykgaW5zdGNtZD0iJGNwcHJvZyIKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLWQpIGRpcl9hcmc9dHJ1ZQorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktbSkgY2htb2RjbWQ9IiRjaG1vZHByb2cgJDIiCisJICAgIHNoaWZ0CisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKKwkgICAgc2hpZnQKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgorCSAgICBzaGlmdAorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktcykgc3RyaXBjbWQ9IiRzdHJpcHByb2ciCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS10PSopIHRyYW5zZm9ybWFyZz1gZWNobyAkMSB8IHNlZCAncy8tdD0vLydgCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1iPSopIHRyYW5zZm9ybWJhc2VuYW1lPWBlY2hvICQxIHwgc2VkICdzLy1iPS8vJ2AKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJKikgIGlmIFsgeCIkc3JjIiA9IHggXQorCSAgICB0aGVuCisJCXNyYz0kMQorCSAgICBlbHNlCisJCSMgdGhpcyBjb2xvbiBpcyB0byB3b3JrIGFyb3VuZCBhIDM4NkJTRCAvYmluL3NoIGJ1ZworCQk6CisJCWRzdD0kMQorCSAgICBmaQorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisgICAgZXNhYworZG9uZQorCitpZiBbIHgiJHNyYyIgPSB4IF0KK3RoZW4KKwllY2hvICJpbnN0YWxsOglubyBpbnB1dCBmaWxlIHNwZWNpZmllZCIKKwlleGl0IDEKK2Vsc2UKKwl0cnVlCitmaQorCitpZiBbIHgiJGRpcl9hcmciICE9IHggXTsgdGhlbgorCWRzdD0kc3JjCisJc3JjPSIiCisJCisJaWYgWyAtZCAkZHN0IF07IHRoZW4KKwkJaW5zdGNtZD06CisJZWxzZQorCQlpbnN0Y21kPW1rZGlyCisJZmkKK2Vsc2UKKworIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGluc3RjbWQgJHNyYyAkZHN0dG1wIiBjb21tYW5kCisjIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkCisjIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KKworCWlmIFsgLWYgJHNyYyAtbyAtZCAkc3JjIF0KKwl0aGVuCisJCXRydWUKKwllbHNlCisJCWVjaG8gImluc3RhbGw6ICAkc3JjIGRvZXMgbm90IGV4aXN0IgorCQlleGl0IDEKKwlmaQorCQorCWlmIFsgeCIkZHN0IiA9IHggXQorCXRoZW4KKwkJZWNobyAiaW5zdGFsbDoJbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkIgorCQlleGl0IDEKKwllbHNlCisJCXRydWUKKwlmaQorCisjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyBpZiB5b3VyIHN5c3RlbQorIyBkb2VzIG5vdCBsaWtlIGRvdWJsZSBzbGFzaGVzIGluIGZpbGVuYW1lcywgeW91IG1heSBuZWVkIHRvIGFkZCBzb21lIGxvZ2ljCisKKwlpZiBbIC1kICRkc3QgXQorCXRoZW4KKwkJZHN0PSIkZHN0Ii9gYmFzZW5hbWUgJHNyY2AKKwllbHNlCisJCXRydWUKKwlmaQorZmkKKworIyMgdGhpcyBzZWQgY29tbWFuZCBlbXVsYXRlcyB0aGUgZGlybmFtZSBjb21tYW5kCitkc3RkaXI9YGVjaG8gJGRzdCB8IHNlZCAtZSAncyxbXi9dKiQsLDtzLC8kLCw7cyxeJCwuLCdgCisKKyMgTWFrZSBzdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBleGlzdHMuCisjICB0aGlzIHBhcnQgaXMgdGFrZW4gZnJvbSBOb2FoIEZyaWVkbWFuJ3MgbWtpbnN0YWxsZGlycyBzY3JpcHQKKworIyBTa2lwIGxvdHMgb2Ygc3RhdCBjYWxscyBpbiB0aGUgdXN1YWwgY2FzZS4KK2lmIFsgISAtZCAiJGRzdGRpciIgXTsgdGhlbgorZGVmYXVsdElGUz0nCQorJworSUZTPSIke0lGUy0ke2RlZmF1bHRJRlN9fSIKKworb0lGUz0iJHtJRlN9IgorIyBTb21lIHNoJ3MgY2FuJ3QgaGFuZGxlIElGUz0vIGZvciBzb21lIHJlYXNvbi4KK0lGUz0nJScKK3NldCAtIGBlY2hvICR7ZHN0ZGlyfSB8IHNlZCAtZSAnc0AvQCVAZycgLWUgJ3NAXiVAL0AnYAorSUZTPSIke29JRlN9IgorCitwYXRoY29tcD0nJworCit3aGlsZSBbICQjIC1uZSAwIF0gOyBkbworCXBhdGhjb21wPSIke3BhdGhjb21wfSR7MX0iCisJc2hpZnQKKworCWlmIFsgISAtZCAiJHtwYXRoY29tcH0iIF0gOworICAgICAgICB0aGVuCisJCSRta2RpcnByb2cgIiR7cGF0aGNvbXB9IgorCWVsc2UKKwkJdHJ1ZQorCWZpCisKKwlwYXRoY29tcD0iJHtwYXRoY29tcH0vIgorZG9uZQorZmkKKworaWYgWyB4IiRkaXJfYXJnIiAhPSB4IF0KK3RoZW4KKwkkZG9pdCAkaW5zdGNtZCAkZHN0ICYmCisKKwlpZiBbIHgiJGNob3duY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNob3duY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpICYmCisJaWYgWyB4IiRjaGdycGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaGdycGNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaSAmJgorCWlmIFsgeCIkc3RyaXBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkc3RyaXBjbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkgJiYKKwlpZiBbIHgiJGNobW9kY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNobW9kY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpCitlbHNlCisKKyMgSWYgd2UncmUgZ29pbmcgdG8gcmVuYW1lIHRoZSBmaW5hbCBleGVjdXRhYmxlLCBkZXRlcm1pbmUgdGhlIG5hbWUgbm93LgorCisJaWYgWyB4IiR0cmFuc2Zvcm1hcmciID0geCBdCisJdGhlbgorCQlkc3RmaWxlPWBiYXNlbmFtZSAkZHN0YAorCWVsc2UKKwkJZHN0ZmlsZT1gYmFzZW5hbWUgJGRzdCAkdHJhbnNmb3JtYmFzZW5hbWUgfAorCQkJc2VkICR0cmFuc2Zvcm1hcmdgJHRyYW5zZm9ybWJhc2VuYW1lCisJZmkKKworIyBkb24ndCBhbGxvdyB0aGUgc2VkIGNvbW1hbmQgdG8gY29tcGxldGVseSBlbGltaW5hdGUgdGhlIGZpbGVuYW1lCisKKwlpZiBbIHgiJGRzdGZpbGUiID0geCBdCisJdGhlbgorCQlkc3RmaWxlPWBiYXNlbmFtZSAkZHN0YAorCWVsc2UKKwkJdHJ1ZQorCWZpCisKKyMgTWFrZSBhIHRlbXAgZmlsZSBuYW1lIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgorCisJZHN0dG1wPSRkc3RkaXIvI2luc3QuJCQjCisKKyMgTW92ZSBvciBjb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZQorCisJJGRvaXQgJGluc3RjbWQgJHNyYyAkZHN0dG1wICYmCisKKwl0cmFwICJybSAtZiAke2RzdHRtcH0iIDAgJiYKKworIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzCisKKyMgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGFib3J0IHRoZSB3aG9sZSB0aGluZy4gIElmIHdlIHdhbnQgdG8KKyMgaWdub3JlIGVycm9ycyBmcm9tIGFueSBvZiB0aGVzZSwganVzdCBtYWtlIHN1cmUgbm90IHRvIGlnbm9yZQorIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRpbnN0Y21kICRzcmMgJGRzdHRtcCIgY29tbWFuZC4KKworCWlmIFsgeCIkY2hvd25jbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hvd25jbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCisJaWYgWyB4IiRjaGdycGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaGdycGNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYKKwlpZiBbIHgiJHN0cmlwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJHN0cmlwY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgorCWlmIFsgeCIkY2htb2RjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2htb2RjbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCisKKyMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKworCSRkb2l0ICRybWNtZCAtZiAkZHN0ZGlyLyRkc3RmaWxlICYmCisJJGRvaXQgJG12Y21kICRkc3R0bXAgJGRzdGRpci8kZHN0ZmlsZQorCitmaSAmJgorCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL0NNYWtlTGlzdHMudHh0IGIvY3VybC03LjI1LjAvbGliL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Yjk3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMjYgQEAKK3NldChMSUJfTkFNRSBsaWJjdXJsKQorCitjb25maWd1cmVfZmlsZSgke0NVUkxfU09VUkNFX0RJUn0vaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oLmNtYWtlCisgICR7Q1VSTF9CSU5BUllfRElSfS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgpCitjb25maWd1cmVfZmlsZShjdXJsX2NvbmZpZy5oLmNtYWtlCisgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jdXJsX2NvbmZpZy5oKQorCit0cmFuc2Zvcm1fbWFrZWZpbGVfaW5jKCJNYWtlZmlsZS5pbmMiICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTWFrZWZpbGUuaW5jLmNtYWtlIikKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L01ha2VmaWxlLmluYy5jbWFrZSkKKworbGlzdChBUFBFTkQgSEhFQURFUlMKKyAgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2N1cmxfY29uZmlnLmgKKyAgJHtDVVJMX0JJTkFSWV9ESVJ9L2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaAorICApCisKK2lmKE1TVkMpCisgIGxpc3QoQVBQRU5EIENTT1VSQ0VTIGxpYmN1cmwucmMpCitlbmRpZigpCisKKyMgU0VUKENTT1VSQ0VTCisjICMgIG1lbWRlYnVnLmMgLW5vdCB1c2VkCisjICMgbndsaWIuYyAtIE5vdCB1c2VkCisjICMgc3RydG9rLmMgLSBzcGVjaWZ5IGxhdGVyCisjICMgc3RydG9vZmZ0LmMgLSBzcGVjaWZ5IGxhdGVyCisjICkKKworIyAjIGlmIHdlIGhhdmUgS2VyYmVyb3MgNCwgcmlnaHQgbm93IHRoaXMgaXMgbmV2ZXIgb24KKyMgI09QVElPTihDVVJMX0tSQjQgIlVzZSBLZXJiZXJvcyA0IiBPRkYpCisjIElGKENVUkxfS1JCNCkKKyMgU0VUKENTT1VSQ0VTICR7Q1NPVVJDRVN9CisjIGtyYjQuYworIyBzZWN1cml0eS5jCisjICkKKyMgRU5ESUYoQ1VSTF9LUkI0KQorCisjICNPUFRJT04oQ1VSTF9NQUxMT0NfREVCVUcgIkRlYnVnIG1hbGxvY3MgaW4gQ3VybCIgT0ZGKQorIyBNQVJLX0FTX0FEVkFOQ0VEKENVUkxfTUFMTE9DX0RFQlVHKQorIyBJRihDVVJMX01BTExPQ19ERUJVRykKKyMgU0VUKENTT1VSQ0VTICR7Q1NPVVJDRVN9CisjIG1lbWRlYnVnLmMKKyMgKQorIyBFTkRJRihDVVJMX01BTExPQ19ERUJVRykKKworIyAjIG9ubHkgYnVpbGQgY29tcGF0IHN0cnRvb2ZmdCBpZiB3ZSBuZWVkIHRvCisjIElGKE5PVCBIQVZFX1NUUlRPTEwgQU5EIE5PVCBIQVZFX19TVFJUT0k2NCkKKyMgU0VUKENTT1VSQ0VTICR7Q1NPVVJDRVN9CisjIHN0cnRvb2ZmdC5jCisjICkKKyMgRU5ESUYoTk9UIEhBVkVfU1RSVE9MTCBBTkQgTk9UIEhBVkVfX1NUUlRPSTY0KQorCitpZihIQVZFX0ZFQVRVUkVTX0gpCisgIHNldF9zb3VyY2VfZmlsZXNfcHJvcGVydGllcygKKyAgICBjb29raWUuYworICAgIGVhc3kuYworICAgIGZvcm1kYXRhLmMKKyAgICBnZXRlbnYuYworICAgIG5vbmJsb2NrLmMKKyAgICBoYXNoLmMKKyAgICBodHRwLmMKKyAgICBpZjJpcC5jCisgICAgbXByaW50Zi5jCisgICAgbXVsdGkuYworICAgIHNlbmRmLmMKKyAgICB0ZWxuZXQuYworICAgIHRyYW5zZmVyLmMKKyAgICB1cmwuYworICAgIENPTVBJTEVfRkxBR1MgLURfQlNEX1NPVVJDRSkKK2VuZGlmKEhBVkVfRkVBVFVSRVNfSCkKKworCisjIFRoZSByZXN0IG9mIHRoZSBidWlsZAorCitpbmNsdWRlX2RpcmVjdG9yaWVzKCR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8uLi9pbmNsdWRlKQoraW5jbHVkZV9kaXJlY3Rvcmllcygke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4pCitpbmNsdWRlX2RpcmVjdG9yaWVzKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi9pbmNsdWRlKQoraW5jbHVkZV9kaXJlY3Rvcmllcygke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vLi4pCitpbmNsdWRlX2RpcmVjdG9yaWVzKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9KQoraWYoQ1VSTF9VU0VfQVJFUykKKyAgaW5jbHVkZV9kaXJlY3Rvcmllcygke0NBUkVTX0lOQ0xVREVfRElSfSkKK2VuZGlmKCkKKworaWYoQ1VSTF9TVEFUSUNMSUIpCisgICMgU3RhdGljIGxpYgorICBzZXQoQ1VSTF9VU0VSX0RFRklORURfRFlOQU1JQ19PUl9TVEFUSUMgU1RBVElDKQorZWxzZSgpCisgICMgRExMIC8gc28gZHluYW1pYyBsaWIKKyAgc2V0KENVUkxfVVNFUl9ERUZJTkVEX0RZTkFNSUNfT1JfU1RBVElDIFNIQVJFRCkKK2VuZGlmKCkKKworYWRkX2xpYnJhcnkoCisgICR7TElCX05BTUV9CisgICR7Q1VSTF9VU0VSX0RFRklORURfRFlOQU1JQ19PUl9TVEFUSUN9CisgICR7SEhFQURFUlN9ICR7Q1NPVVJDRVN9CisgICkKKwordGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7TElCX05BTUV9ICR7Q1VSTF9MSUJTfSkKKworaWYoV0lOMzIpCisgIGFkZF9kZWZpbml0aW9ucyggLURfVVNSRExMICkKK2VuZGlmKCkKKworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCX05BTUV9IFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUyBCVUlMRElOR19MSUJDVVJMKQorCitzZXR1cF9jdXJsX2RlcGVuZGVuY2llcygke0xJQl9OQU1FfSkKKworIyBSZW1vdmUgdGhlICJsaWIiIHByZWZpeCBzaW5jZSB0aGUgbGlicmFyeSBpcyBhbHJlYWR5IG5hbWVkICJsaWJjdXJsIi4KK3NldF90YXJnZXRfcHJvcGVydGllcygke0xJQl9OQU1FfSBQUk9QRVJUSUVTIFBSRUZJWCAiIikKK3NldF90YXJnZXRfcHJvcGVydGllcygke0xJQl9OQU1FfSBQUk9QRVJUSUVTIElNUE9SVF9QUkVGSVggIiIpCisKK2lmKE1TVkMpCisgIGlmKE5PVCBCVUlMRF9SRUxFQVNFX0RFQlVHX0RJUlMpCisgICAgIyBVZ2x5IHdvcmthcm91bmQgdG8gcmVtb3ZlIHRoZSAiL2RlYnVnIiBvciAiL3JlbGVhc2UiIGluIGVhY2ggb3V0cHV0CisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCX05BTUV9IFBST1BFUlRJRVMgUFJFRklYICIuLi8iKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke0xJQl9OQU1FfSBQUk9QRVJUSUVTIElNUE9SVF9QUkVGSVggIi4uLyIpCisgIGVuZGlmKCkKK2VuZGlmKCkKKworaWYoV0lOMzIpCisgIGlmKE5PVCBDVVJMX1NUQVRJQ0xJQikKKyAgICAjIEFkZCAiX2ltcCIgYXMgYSBzdWZmaXggYmVmb3JlIHRoZSBleHRlbnNpb24gdG8gYXZvaWQgY29uZmxpY3Rpbmcgd2l0aCB0aGUgc3RhdGljYWxseSBsaW5rZWQgImxpYmN1cmwubGliIgorICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke0xJQl9OQU1FfSBQUk9QRVJUSUVTIElNUE9SVF9TVUZGSVggIl9pbXAubGliIikKKyAgZW5kaWYoKQorZW5kaWYoKQorCitpbnN0YWxsKFRBUkdFVFMgJHtMSUJfTkFNRX0gREVTVElOQVRJT04gbGliKQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLldhdGNvbSBiL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS5XYXRjb20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5MDZjOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS5XYXRjb20KQEAgLTAsMCArMSwyNTEgQEAKKyMKKyMgIFdhdGNvbSAvIE9wZW5XYXRjb20gLyBXaW4zMiBtYWtlZmlsZSBmb3IgbGliY3VybC4KKyMgIEcuIFZhbmVtIDxndmFuZW1AYnJvYWRwYXJrLm5vPgorIworCishaWZuZGVmICV3YXRjb20KKyFlcnJvciBXQVRDT00gZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IHNldCEKKyFlbmRpZgorCishaWZkZWYgJWxpYm5hbWUKK0xJQk5BTUUgPSAkKCVsaWJuYW1lKQorIWVsc2UKK0xJQk5BTUUgPSBsaWJjdXJsCishZW5kaWYKK1RBUkdFVFMgPSAkKExJQk5BTUUpLmRsbCAkKExJQk5BTUUpX2ltcC5saWIgJChMSUJOQU1FKS5saWIKKworQ0MgPSB3Y2MzODYKK0xEID0gd2xpbmsKK0FSID0gd2xpYgorUkMgPSB3cmMKKworIWlmZGVmIF9fTE9BRERMTF9fCishICBsb2FkZGxsIHdjYzM4NiAgd2NjZDM4NgorISAgbG9hZGRsbCB3cHAzODYgIHdwcGQzODYKKyEgIGxvYWRkbGwgd2xpYiAgICB3bGliZAorISAgaWYgJChfX1ZFUlNJT05fXykgPiAxMjcwCishICAgIGxvYWRkbGwgd2xpbmsgICB3bGlua2QKKyEgIGVsc2UKKyEgICAgbG9hZGRsbCB3bGluayAgIHdsaW5rCishICBlbmRpZgorIWVuZGlmCisKKyFpZmRlZiBfX0xJTlVYX18KK0RTID0gLworQ1AgPSBjcAorTUQgPSBta2RpciAtcAorUkQgPSBybWRpciAtcAorUk0gPSBybSAtZgorIWVsc2UKK0RTID0gJChYKVwkKFgpCitDUCA9IGNvcHkgMj5OVUwKK01EID0gbWtkaXIKK1JEID0gcm1kaXIgL3EgL3MgMj5OVUwKKyFpZiAkKF9fVkVSU0lPTl9fKSA8IDEyNTAKK1JNID0gZGVsIC9xIC9mIDI+TlVMCishZWxzZQorUk0gPSBybSAtZgorIWVuZGlmCishZW5kaWYKKworU1lTX0lOQ0wgPSAtSSQoJXdhdGNvbSkkKERTKWgkKERTKW50IC1JJCgld2F0Y29tKSQoRFMpaAorU1lTX0xJQlMgPSAkKCV3YXRjb20pJChEUylsaWIzODYkKERTKW50OyQoJXdhdGNvbSkkKERTKWxpYjM4NgorCitDRkxBR1MgPSAtM3IgLW1mIC1oYyAtemZmIC16Z2YgLXpxIC16bSAtemMgLXMgLWZyPWNvbiAtdzIgLWZwaSAtb2lscnRmbSAmCisgICAgICAgICAtd2NkPTIwMSAtYnQ9bnQgLWQrIC1kV0lOMzIgLWRDVVJMX1dBTlRTX0NBX0JVTkRMRV9FTlYgICAgICAgICAmCisgICAgICAgICAtZEJVSUxESU5HX0xJQkNVUkwgLWRIQVZFX1NQTkVHTz0xIC1JLiAtSS4uJChEUylpbmNsdWRlICQoU1lTX0lOQ0wpCisKKyFpZmRlZiAlZGVidWcKK0RFQlVHICA9IC1kREVCVUc9MSAtZERFQlVHQlVJTEQKK0NGTEFHUyArPSAtZDMgJChERUJVRykKKyFlbHNlCitDRkxBR1MgKz0gLWQwCishZW5kaWYKKworIWlmZGVmICV1c2VfaXB2NgorQ0ZMQUdTICs9IC1kX1dJTjMyX1dJTk5UPTB4MDUwMSAtZEVOQUJMRV9JUFY2CishZW5kaWYKKworIWlmZGVmICV1c2Vfc3NwaQorQ0ZMQUdTICs9IC1kVVNFX1dJTkRPV1NfU1NQSQorIWVuZGlmCisKKyFpZmRlZiAldXNlX3dpbmlkbgorQ0ZMQUdTICs9IC1kV0lOVkVSPTB4MDYwMCAtZFVTRV9XSU4zMl9JRE4KKyEgIGlmICQoX19WRVJTSU9OX18pIDw9IDEyOTAKK0NGTEFHUyArPSAtZFdBTlRfSUROX1BST1RPVFlQRVMKKyEgIGVuZGlmCishZW5kaWYKKworIworIyBDaGFuZ2UgdG8gc3VpdGUuCisjCishaWZkZWYgJXpsaWJfcm9vdAorWkxJQl9ST09UID0gJCglemxpYl9yb290KQorIWVsc2UKK1pMSUJfUk9PVCA9IC4uJChEUykuLiQoRFMpemxpYi0xLjIuNQorIWVuZGlmCisKKyFpZmRlZiAlbGlic3NoMl9yb290CitMSUJTU0gyX1JPT1QgPSAkKCVsaWJzc2gyX3Jvb3QpCishZWxzZQorTElCU1NIMl9ST09UID0gLi4kKERTKS4uJChEUylsaWJzc2gyLTEuMy4wCishZW5kaWYKKworIWlmZGVmICVsaWJydG1wX3Jvb3QKK0xJQlJUTVBfUk9PVCA9ICQoJWxpYnJ0bXBfcm9vdCkKKyFlbHNlCitMSUJSVE1QX1JPT1QgPSAuLiQoRFMpLi4kKERTKXJ0bXBkdW1wLTIuMworIWVuZGlmCisKKyFpZmRlZiAlb3BlbnNzbF9yb290CitPUEVOU1NMX1JPT1QgPSAkKCVvcGVuc3NsX3Jvb3QpCishZWxzZQorT1BFTlNTTF9ST09UID0gLi4kKERTKS4uJChEUylvcGVuc3NsLTAuOS44cgorIWVuZGlmCisKKyFpZmRlZiAlYXJlc19yb290CitBUkVTX1JPT1QgPSAkKCVhcmVzX3Jvb3QpCishZWxzZQorQVJFU19ST09UID0gLi4kKERTKWFyZXMKKyFlbmRpZgorCishaWZkZWYgJXVzZV96bGliCitDRkxBR1MgKz0gLWRIQVZFX1pMSUJfSCAtZEhBVkVfTElCWiAtSSQoWkxJQl9ST09UKQorIWVuZGlmCisKKyFpZmRlZiAldXNlX3J0bXAKK0NGTEFHUyArPSAtZFVTRV9MSUJSVE1QIC1JJChMSUJSVE1QX1JPT1QpCishZW5kaWYKKworIWlmZGVmICV1c2Vfc3NoMgorQ0ZMQUdTICs9IC1EVVNFX0xJQlNTSDIgLURIQVZFX0xJQlNTSDJfSCAtSSQoTElCU1NIMl9ST09UKSQoRFMpaW5jbHVkZSAtSSQoTElCU1NIMl9ST09UKSQoRFMpd2luMzIKKyFlbmRpZgorCishaWZkZWYgJXVzZV9zc2wKK0NGTEFHUyArPSAtd2NkPTEzOCAtZFVTRV9PUEVOU1NMIC1kVVNFX1NTTEVBWSAtSSQoT1BFTlNTTF9ST09UKSQoRFMpaW5jMzIKKyFlbmRpZgorCishaWZkZWYgJXVzZV9hcmVzCitDRkxBR1MgKz0gLWRVU0VfQVJFUyAtSSQoQVJFU19ST09UKQorIWVuZGlmCisKKyFpZmRlZiAldXNlX3dhdHQzMgorQ0ZMQUdTICs9IC1kVVNFX1dBVFQzMiAtSSQoJXdhdHRfcm9vdCkkKERTKWluYworIWVuZGlmCisKK09CSl9CQVNFID0gV0NfV2luMzIub2JqCitMSU5LX0FSRyA9ICQoT0JKX0JBU0UpJChEUylkeW4kKERTKXdsaW5rLmFyZworTElCX0FSRyAgPSAkKE9CSl9CQVNFKSQoRFMpc3RhdCQoRFMpd2xpYi5hcmcKKworIyBJbiBvcmRlciB0byBwcm9jZXNzIE1ha2VmaWxlLmluYyB3bWFrZSBtdXN0IGJlIGNhbGxlZCB3aXRoIC11IHN3aXRjaCEKKyFpZm5kZWYgJU1BS0VGTEFHUworIWVycm9yIFlvdSBNVVNUIGNhbGwgd21ha2Ugd2l0aCB0aGUgLXUgc3dpdGNoIQorIWVsc2UKKyFpbmNsdWRlIE1ha2VmaWxlLmluYworIWVuZGlmCisKK09CSlMgPSAkKENTT1VSQ0VTOi5jPS5vYmopCishaWZkZWYgX19MSU5VWF9fCitPQkpTID0gJE9CSl9ESVIvJChPQkpTOiA9ICRPQkpfRElSLykKKworIWVsc2UKK09CSlMgPSAkT0JKX0RJUlwkKE9CSlM6ID0gJE9CSl9ESVJcKQorIWVuZGlmCisKKyMKKyMgVXNlICQoT0JKUykgYXMgYSB0ZW1wbGF0ZSB0byBnZW5lcmF0ZSAkKE9CSlNfU1RBVCkgYW5kICQoT0JKU19EWU4pLgorIworT0JKX0RJUiAgICA9ICQoT0JKX0JBU0UpJChEUylzdGF0CitPQkpTX1NUQVQgID0gJCsgJChPQkpTKSAkLQorCitPQkpfRElSICAgID0gJChPQkpfQkFTRSkkKERTKWR5bgorT0JKU19EWU4gICA9ICQrICQoT0JKUykgJC0KKworQ1VSTEJVSUxESCA9IC4uJChEUylpbmNsdWRlJChEUyljdXJsJChEUyljdXJsYnVpbGQuaAorUkVTT1VSQ0UgICA9ICQoT0JKX0JBU0UpJChEUylkeW4kKERTKWxpYmN1cmwucmVzCisKK2FsbDogJChDVVJMQlVJTERIKSAkKE9CSl9CQVNFKSAkKFRBUkdFVFMpIC5TWU1CT0xJQworCUBlY2hvIFdlbGNvbWUgdG8gbGliY3VybAorCitjbGVhbjogLlNZTUJPTElDCisJLSQoUk0pICQoT0JKU19TVEFUKQorCS0kKFJNKSAkKE9CSlNfRFlOKQorCS0kKFJNKSAkKFJFU09VUkNFKSAkKExJTktfQVJHKSAkKExJQl9BUkcpCisKK3ZjbGVhbiBkaXN0Y2xlYW46IGNsZWFuIC5TWU1CT0xJQworCS0kKFJNKSAkKFRBUkdFVFMpICQoTElCTkFNRSkubWFwICQoTElCTkFNRSkuc3ltCisJLSQoUkQpICQoT0JKX0JBU0UpJChEUylzdGF0CisJLSQoUkQpICQoT0JKX0JBU0UpJChEUylkeW4KKwktJChSRCkgJChPQkpfQkFTRSkKKworJChPQkpfQkFTRSk6CisJLSQoTUQpICReQAorCS0kKE1EKSAkXkAkKERTKXN0YXQKKwktJChNRCkgJF5AJChEUylkeW4KKworJChDVVJMQlVJTERIKTogLkVYSVNUU09OTFkKKwkkKENQKSAkXkAuZGlzdCAkXkAKKworJChMSUJOQU1FKS5kbGw6ICQoT0JKU19EWU4pICQoUkVTT1VSQ0UpICQoTElOS19BUkcpCisJJChMRCkgbmFtZSAkXkAgQCRdQAorCiskKExJQk5BTUUpLmxpYjogJChPQkpTX1NUQVQpICQoTElCX0FSRykKKwkkKEFSKSAtcSAtYiAtYyAkXkAgQCRdQAorCisuRVJBU0UKKyQoUkVTT1VSQ0UpOiBsaWJjdXJsLnJjCisJJChSQykgJChERUJVRykgLXEgLXIgLXptIC1idD1udCAtSS4uJChEUylpbmNsdWRlICQoU1lTX0lOQ0wpICRbQCAtZm89JF5ACisKKy5FUkFTRQorLmN7JChPQkpfQkFTRSkkKERTKWR5bn0ub2JqOgorCSQoQ0MpICQoQ0ZMQUdTKSAtYmQgLWJyICRbQCAtZm89JF5ACisKKy5FUkFTRQorLmN7JChPQkpfQkFTRSkkKERTKXN0YXR9Lm9iajoKKwkkKENDKSAkKENGTEFHUykgLURDVVJMX1NUQVRJQ0xJQiAkW0AgLWZvPSReQAorCiskKExJTktfQVJHKTogJChfX01BS0VGSUxFU19fKQorCSVjcmVhdGUgJF5ACisJQCVhcHBlbmQgJF5AIHN5c3RlbSBudCBkbGwKKwlAJWFwcGVuZCAkXkAgZmlsZSB7ICQoT0JKU19EWU4pIH0KKyFpZmRlZiAlZGVidWcKKwlAJWFwcGVuZCAkXkAgZGVidWcgYWxsCisJQCVhcHBlbmQgJF5AIG9wdGlvbiBzeW1maWxlCishZW5kaWYKKwlAJWFwcGVuZCAkXkAgb3B0aW9uIHF1aWV0LCBtYXAsIGNhc2VleGFjdCwgZWxpbWluYXRlLCBpbXBsaWI9JChMSUJOQU1FKV9pbXAubGliLAorCUAlYXBwZW5kICReQCByZXM9JChSRVNPVVJDRSkgbGlicGF0aCAkKFNZU19MSUJTKQorCUAlYXBwZW5kICReQCBsaWJyYXJ5IHdsZGFwMzIubGliCishaWZkZWYgJXVzZV93YXR0MzIKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSAkKCV3YXR0X3Jvb3QpJChEUylsaWIkKERTKXdhdHRjcHdfaW1wLmxpYgorIWVsc2UKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSB3czJfMzIubGliCishZW5kaWYKKyFpZmRlZiAldXNlX3psaWIKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSAkKFpMSUJfUk9PVCkkKERTKXpsaWIubGliCishZW5kaWYKKyFpZmRlZiAldXNlX3J0bXAKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSAkKExJQlJUTVBfUk9PVCkkKERTKWxpYnJ0bXAkKERTKWxpYnJ0bXAubGliCishZW5kaWYKKyFpZmRlZiAldXNlX3NzaDIKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSAkKExJQlNTSDJfUk9PVCkkKERTKXdpbjMyJChEUylsaWJzc2gyLmxpYgorIWVuZGlmCishaWZkZWYgJXVzZV9zc2wKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSAkKE9QRU5TU0xfUk9PVCkkKERTKW91dDMyJChEUylsaWJlYXkzMi5saWIsICQoT1BFTlNTTF9ST09UKSQoRFMpb3V0MzIkKERTKXNzbGVheTMyLmxpYgorIWVuZGlmCishaWZkZWYgJXVzZV9hcmVzCisJQCVhcHBlbmQgJF5AIGxpYnJhcnkgJChBUkVTX1JPT1QpJChEUyljYXJlcy5saWIKKyFlbmRpZgorIWlmZGVmICV1c2Vfd2luaWRuCishICBpZiAkKF9fVkVSU0lPTl9fKSA+IDEyOTAKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSBub3JtYWxpei5saWIKKyEgIGVsc2UKKwlAJWFwcGVuZCAkXkAgaW1wb3J0ICdfSWRuVG9Bc2NpaUAyMCcgJ05PUk1BTElaLkRMTCcuJ0lkblRvQXNjaWknCisJQCVhcHBlbmQgJF5AIGltcG9ydCAnX0lkblRvVW5pY29kZUAyMCcgJ05PUk1BTElaLkRMTCcuJ0lkblRvVW5pY29kZScKKyEgIGVuZGlmCishZW5kaWYKKworJChMSUJfQVJHKTogJChfX01BS0VGSUxFU19fKQorCSVjcmVhdGUgJF5ACisJQGZvciAlZiBpbiAoJChPQkpTX1NUQVQpKSBkbyBAJWFwcGVuZCAkXkAgKy0gJWYKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLmFtIGIvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NjQyNzQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxOTkgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm9zdGRpbmMKKworRFNQID0gdmM2bGliY3VybC5kc3AKK1ZDUFJPSiA9IGxpYmN1cmwudmNwcm9qCisKK0RPQ1MgPSBSRUFETUUuZW5jb2RpbmcgUkVBRE1FLm1lbW9yeWxlYWsgUkVBRE1FLmFyZXMgUkVBRE1FLmN1cmx4CVwKKyBSRUFETUUuaG9zdGlwIFJFQURNRS5tdWx0aV9zb2NrZXQgUkVBRE1FLmh0dHBhdXRoIFJFQURNRS5waXBlbGluaW5nICAgIFwKKyBSRUFETUUuY3VybF9vZmZfdCBSRUFETUUucGluZ3BvbmcKKworQ01BS0VfRElTVCA9IENNYWtlTGlzdHMudHh0IGN1cmxfY29uZmlnLmguY21ha2UKKworRVhUUkFfRElTVCA9IE1ha2VmaWxlLmIzMiBNYWtlZmlsZS5tMzIgTWFrZWZpbGUudmM2ICQoRFNQKSAgICAgICAgICAgICAgICAgXAorIHZjNmxpYmN1cmwuZHN3IGNvbmZpZy13aW4zMi5oIGNvbmZpZy13aW4zMmNlLmggY29uZmlnLXJpc2Nvcy5oICAgICAgICAgICAgXAorIGNvbmZpZy1tYWMuaCBjdXJsX2NvbmZpZy5oLmluIG1ha2VmaWxlLmRqIGNvbmZpZy1kb3MuaCBsaWJjdXJsLnBsaXN0ICAgICAgXAorIGxpYmN1cmwucmMgY29uZmlnLWFtaWdhb3MuaCBhbWlnYW9zLmMgYW1pZ2Fvcy5oIG1ha2VmaWxlLmFtaWdhCQkgICBcCisgTWFrZWZpbGUubmV0d2FyZSBud2xpYi5jIG53b3MuYyBsaWJjdXJsLmltcCBtc3ZjcHJvai5oZWFkIG1zdmNwcm9qLmZvb3QgICBcCisgY29uZmlnLXdpbjMyY2UuaCBjb25maWctb3M0MDAuaCBzZXR1cC1vczQwMC5oIGNvbmZpZy1zeW1iaWFuLmgJCSAgIFwKKyBNYWtlZmlsZS5XYXRjb20gY29uZmlnLXRwZi5oICQoRE9DUykgJChWQ1BST0opIG1rLWNhLWJ1bmRsZS5wbAkJICAgXAorIG1rLWNhLWJ1bmRsZS52YnMgZmlyZWZveC1kYjJwZW0uc2ggJChDTUFLRV9ESVNUKSBjb25maWctdnh3b3Jrcy5oCSAgIFwKKyBNYWtlZmlsZS52eHdvcmtzIGNvbmZpZy12bXMuaCBjaGVja3NyYy5wbAorCitDTEVBTkZJTEVTID0gJChEU1ApICQoVkNQUk9KKQorCitsaWJfTFRMSUJSQVJJRVMgPSBsaWJjdXJsLmxhCitMSUJDVVJMX0xJQlMgPSBATElCQ1VSTF9MSUJTQAorCisjIFRoaXMgbWlnaHQgaG9sZCAtV2Vycm9yCitDRkxBR1MgKz0gQENVUkxfQ0ZMQUdfRVhUUkFTQAorCisjIFNwZWNpZnkgb3VyIGluY2x1ZGUgcGF0aHMgaGVyZSwgYW5kIGRvIGl0IHJlbGF0aXZlIHRvICQodG9wX3NyY2RpcikgYW5kCisjICQodG9wX2J1aWxkZGlyKSwgdG8gZW5zdXJlIHRoYXQgdGhlc2UgcGF0aHMgd2hpY2ggYmVsb25nIHRvIHRoZSBsaWJyYXJ5CisjIGJlaW5nIGN1cnJlbnRseSBidWlsdCBhbmQgdGVzdGVkIGFyZSBzZWFyY2hlZCBiZWZvcmUgdGhlIGxpYnJhcnkgd2hpY2gKKyMgbWlnaHQgcG9zc2libHkgYWxyZWFkeSBiZSBpbnN0YWxsZWQgaW4gdGhlIHN5c3RlbS4KKyMKKyMgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBmb3IgZ2VuZXJhdGVkIGN1cmxidWlsZC5oIGluY2x1ZGVkIGZyb20gY3VybC5oCisjICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlIGZvciBnZW5lcmF0ZWQgY3VybGJ1aWxkLmggaW5jbHVkZWQgZnJvbSBsaWIvc2V0dXAuaAorIyAkKHRvcF9zcmNkaXIpL2luY2x1ZGUgaXMgZm9yIGxpYmN1cmwncyBleHRlcm5hbCBpbmNsdWRlIGZpbGVzCisjICQodG9wX2J1aWxkZGlyKS9saWIgaXMgZm9yIGxpYmN1cmwncyBnZW5lcmF0ZWQgbGliL2N1cmxfY29uZmlnLmggZmlsZQorIyAkKHRvcF9zcmNkaXIpL2xpYiBpcyBmb3IgbGliY3VybCdzIGxpYi9zZXR1cC5oIGFuZCBvdGhlciAicHJpdmF0ZSIgZmlsZXMKKyMgJCh0b3BfYnVpbGRkaXIpL2FyZXMgaXMgZm9yIGluLXRyZWUgYy1hcmVzJ3MgZ2VuZXJhdGVkIGFyZXNfYnVpbGQuaCBmaWxlCisjICQodG9wX3NyY2RpcikvYXJlcyBpcyBmb3IgaW4tdHJlZSBjLWFyZXMncyBleHRlcm5hbCBpbmNsdWRlIGZpbGVzCisKK2lmIFVTRV9FTUJFRERFRF9BUkVTCitJTkNMVURFUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2xpYiAgICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9saWIgICAgICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2FyZXMgICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9hcmVzCitlbHNlCitJTkNMVURFUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2xpYiAgICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9saWIKK2VuZGlmCisKK2lmIFNPTkFNRV9CVU1QCisjCisjIEJ1bXBpbmcgb2YgU09OQU1FIGNvbmRpdGlvbmFsbHkgbWF5IHNlZW0gbGlrZSBhIHdlaXJkIHRoaW5nIHRvIGRvLCBhbmQgeWVhaAorIyBpdCBpcy4gVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSB0cnkgdG8gYXZvaWQgdGhlIGJ1bXAgYXMgaGFyZCBhcyBwb3NzaWJsZSwgYnV0CisjIHlldCBpdCBpcyBzdGlsbCBuZWNlc3NhcnkgZm9yIGEgZmV3IHJhcmUgc2l0dWF0aW9ucy4gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgd2lsbAorIyBhdHRlbXB0IHRvIGZpZ3VyZSBvdXQgdGhlc2Ugc2l0dWF0aW9ucywgYW5kIGl0IGNhbiBiZSBmb3JjZWQgdG8gY29uc2lkZXIgdGhpcworIyB0byBiZSBzdWNoIGEgY2FzZSEgU2VlIFJFQURNRS5jdXJsX29mZl90IGZvciBmdXJ0aGVyIGRldGFpbHMuCisjCisjIFRoaXMgY29uZGl0aW9uYWwgc29uYW1lIGJ1bXAgU0hPVUxEIGJlIHJlbW92ZWQgYXQgbmV4dCAicHJvcGVyIiBidW1wLgorIworVkVSU0lPTklORk89LXZlcnNpb24taW5mbyA3OjA6MgorZWxzZQorVkVSU0lPTklORk89LXZlcnNpb24taW5mbyA2OjA6MgorZW5kaWYKKworIyBUaGlzIGZsYWcgYWNjZXB0cyBhbiBhcmd1bWVudCBvZiB0aGUgZm9ybSBjdXJyZW50WzpyZXZpc2lvbls6YWdlXV0uIFNvLAorIyBwYXNzaW5nIC12ZXJzaW9uLWluZm8gMzoxMjoxIHNldHMgY3VycmVudCB0byAzLCByZXZpc2lvbiB0byAxMiwgYW5kIGFnZSB0bworIyAxLgorIworIyBIZXJlJ3MgdGhlIHNpbXBsaWZpZWQgcnVsZSBndWlkZSBvbiBob3cgdG8gY2hhbmdlIC12ZXJzaW9uLWluZm86CisjIChjdXJyZW50IHZlcnNpb24gaXMgQzpSOkEpCisjCisjIDEuIGlmIHRoZXJlIGFyZSBvbmx5IHNvdXJjZSBjaGFuZ2VzLCB1c2UgQzpSKzE6QQorIyAyLiBpZiBpbnRlcmZhY2VzIHdlcmUgYWRkZWQgdXNlIEMrMTowOkErMQorIyAzLiBpZiBpbnRlcmZhY2VzIHdlcmUgcmVtb3ZlZCwgdGhlbiB1c2UgQysxOjA6MAorIworIyBGb3IgdGhlIGZ1bGwgZ3VpZGUgb24gbGliY3VybCBBQkkgcnVsZXMsIHNlZSBkb2NzL2xpYmN1cmwvQUJJCisKK2lmIE5PX1VOREVGSU5FRAorIyBUaGUgLW5vLXVuZGVmaW5lZCBmbGFnIGlzIGNydWNpYWwgdG8gYnVpbGQgZmluZSBvbiBzb21lIHBsYXRmb3JtcworVU5ERUYgPSAtbm8tdW5kZWZpbmVkCitlbmRpZgorCitpZiBNSU1QVVJFCisjIFRoaXMgaXMgZm9yIGdjYyBvbiBTb2xhcmlzICg4KyA/KSB0byBhdm9pZCAicmVsb2NhdGlvbnMgcmVtYWluIGFnYWluc3QKKyMgYWxsb2NhdGFibGUgYnV0IG5vbi13cml0YWJsZSBzZWN0aW9ucyIgcHJvYmxlbXMuCitNSU1QVVJFID0gLW1pbXB1cmUtdGV4dAorZW5kaWYKKworaWYgVkVSU0lPTkVEX1NZTUJPTFMKK1ZFUlNJT05FRF9TWU1CT0xTID0gLVdsLC0tdmVyc2lvbi1zY3JpcHQ9bGliY3VybC52ZXJzCitlbmRpZgorCitsaWJjdXJsX2xhX0xERkxBR1MgPSAkKFVOREVGKSAkKFZFUlNJT05JTkZPKSAkKE1JTVBVUkUpICQoVkVSU0lPTkVEX1NZTUJPTFMpICQoTElCQ1VSTF9MSUJTKQorCisjIHVuaXQgdGVzdGluZyBzdGF0aWMgbGlicmFyeSBidWlsdCBvbmx5IGFsb25nIHdpdGggdW5pdCB0ZXN0cworaWYgQlVJTERfVU5JVFRFU1RTCitub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJjdXJsdS5sYQorZWxzZQorbm9pbnN0X0xUTElCUkFSSUVTID0KK2VuZGlmCisKK2xpYmN1cmx1X2xhX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURVTklUVEVTVFMKK2xpYmN1cmx1X2xhX0xERkxBR1MgPSAtc3RhdGljICQoTElCQ1VSTF9MSUJTKQorCisjIE1ha2VmaWxlLmluYyBwcm92aWRlcyB0aGUgQ1NPVVJDRVMgYW5kIEhIRUFERVJTIGRlZmluZXMKK2luY2x1ZGUgTWFrZWZpbGUuaW5jCisKK2xpYmN1cmxfbGFfU09VUkNFUyA9ICQoQ1NPVVJDRVMpICQoSEhFQURFUlMpCitsaWJjdXJsdV9sYV9TT1VSQ0VTID0gJChDU09VUkNFUykgJChISEVBREVSUykKKworV0lOMzJTT1VSQ0VTID0gJChDU09VUkNFUykKK1dJTjMySEVBREVSUyA9ICQoSEhFQURFUlMpIGNvbmZpZy13aW4zMi5oCisKK0RTUE9VVCA9IHwgYXdrICd7cHJpbnRmKCIlc1xyXG4iLCAkJDApfScgPj4gJChEU1ApCitWQ1BST0pPVVQgPSB8IGF3ayAne3ByaW50ZigiJXNcclxuIiwgJCQwKX0nID4+ICQoVkNQUk9KKQorCiskKERTUCk6IG1zdmNwcm9qLmhlYWQgbXN2Y3Byb2ouZm9vdCBNYWtlZmlsZS5hbQorCWVjaG8gImNyZWF0aW5nICQoRFNQKSIKKwlAKGNwICQoc3JjZGlyKS9tc3ZjcHJvai5oZWFkICQoRFNQKTsgXAorCWVjaG8gIiMgQmVnaW4gR3JvdXAgXCJTb3VyY2UgRmlsZXNcIiIgJChEU1BPVVQpOyBcCisgICAgICAgIGVjaG8gIiIgJChEU1BPVVQpOyBcCisgICAgICAgIGVjaG8gIiMgUFJPUCBEZWZhdWx0X0ZpbHRlciBcIlwiIiAkKERTUE9VVCk7IFwKKyAgICAgICAgd2luMzJfc3Jjcz0nJChXSU4zMlNPVVJDRVMpJzsgXAorICAgICAgICBzb3J0ZWRfc3Jjcz1gZm9yIGZpbGUgaW4gJCR3aW4zMl9zcmNzOyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IHNvcnRgOyBcCisgICAgICAgIGZvciBmaWxlIGluICQkc29ydGVkX3NyY3M7IGRvIFwKKwllY2hvICIjIEJlZ2luIFNvdXJjZSBGaWxlIiAkKERTUE9VVCk7IFwKKwllY2hvICIiICQoRFNQT1VUKTsgXAorCWVjaG8gIlNPVVJDRT0uXFwiJCRmaWxlICQoRFNQT1VUKTsgXAorCWVjaG8gIiMgRW5kIFNvdXJjZSBGaWxlIiAkKERTUE9VVCk7IFwKKwlkb25lOyBcCisJZWNobyAiIyBFbmQgR3JvdXAiICQoRFNQT1VUKTsgXAorCWVjaG8gIiMgQmVnaW4gR3JvdXAgXCJIZWFkZXIgRmlsZXNcIiIgJChEU1BPVVQpOyBcCisgICAgICAgIGVjaG8gIiIgJChEU1BPVVQpOyBcCisgICAgICAgIGVjaG8gIiMgUFJPUCBEZWZhdWx0X0ZpbHRlciBcIlwiIiAkKERTUE9VVCk7IFwKKyAgICAgICAgd2luMzJfaGRycz0nJChXSU4zMkhFQURFUlMpJzsgXAorICAgICAgICBzb3J0ZWRfaGRycz1gZm9yIGZpbGUgaW4gJCR3aW4zMl9oZHJzOyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IHNvcnRgOyBcCisgICAgICAgIGZvciBmaWxlIGluICQkc29ydGVkX2hkcnM7IGRvIFwKKwllY2hvICIjIEJlZ2luIFNvdXJjZSBGaWxlIiAkKERTUE9VVCk7IFwKKwllY2hvICIiICQoRFNQT1VUKTsgXAorCWVjaG8gIlNPVVJDRT0uXFwiJCRmaWxlICQoRFNQT1VUKTsgXAorCWVjaG8gIiMgRW5kIFNvdXJjZSBGaWxlIiAkKERTUE9VVCk7IFwKKwlkb25lOyBcCisJZWNobyAiIyBFbmQgR3JvdXAiICQoRFNQT1VUKTsgXAorCWNhdCAkKHNyY2RpcikvbXN2Y3Byb2ouZm9vdCAkKERTUE9VVCkgKQorCiskKFZDUFJPSik6IHZjOHByb2ouaGVhZCB2Yzhwcm9qLmZvb3QgTWFrZWZpbGUuYW0KKwllY2hvICJjcmVhdGluZyAkKFZDUFJPSikiCisJQChjcCAkKHNyY2RpcikvdmM4cHJvai5oZWFkICQoVkNQUk9KKTsgXAorICAgICAgICB3aW4zMl9zcmNzPSckKFdJTjMyU09VUkNFUyknOyBcCisgICAgICAgIHNvcnRlZF9zcmNzPWBmb3IgZmlsZSBpbiAkJHdpbjMyX3NyY3M7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgc29ydGA7IFwKKyAgICAgICAgZm9yIGZpbGUgaW4gJCRzb3J0ZWRfc3JjczsgZG8gXAorCWVjaG8gIjxGaWxlIFJlbGF0aXZlUGF0aD1cIiIkJGZpbGUiXCI+PC9GaWxlPiIgJChWQ1BST0pPVVQpOyBcCisJZG9uZTsgXAorCWVjaG8gIjwvRmlsdGVyPjxGaWx0ZXIJTmFtZT1cIkhlYWRlciBGaWxlc1wiPiIgJChWQ1BST0pPVVQpOyBcCisgICAgICAgIHdpbjMyX2hkcnM9JyQoV0lOMzJIRUFERVJTKSc7IFwKKyAgICAgICAgc29ydGVkX2hkcnM9YGZvciBmaWxlIGluICQkd2luMzJfaGRyczsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBzb3J0YDsgXAorICAgICAgICBmb3IgZmlsZSBpbiAkJHNvcnRlZF9oZHJzOyBkbyBcCisJZWNobyAiPEZpbGUgUmVsYXRpdmVQYXRoPVwiIiQkZmlsZSJcIj48L0ZpbGU+IiAkKFZDUFJPSk9VVCk7IFwKKwlkb25lOyBcCisJY2F0ICQoc3JjZGlyKS92Yzhwcm9qLmZvb3QgJChWQ1BST0pPVVQpICkKKworCitjaGVja3NyYzoKKwlAQFBFUkxAICQodG9wX3NyY2RpcikvbGliL2NoZWNrc3JjLnBsIC1EJCh0b3Bfc3JjZGlyKS9saWIgJChDU09VUkNFUykgJChISEVBREVSUykKKworaWYgQ1VSTERFQlVHCisjIGZvciBkZWJ1ZyBidWlsZHMsIHdlIHNjYW4gdGhlIHNvdXJjZXMgb24gYWxsIHJlZ3VsYXIgbWFrZSBpbnZva2VzCithbGwtbG9jYWw6IGNoZWNrc3JjCitlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLmIzMiBiL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS5iMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg3OTkzYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS5iMzIKQEAgLTAsMCArMSwxMjkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgTWFrZWZpbGUuYjMyIC0gQm9ybGFuZCdzIEMrKyBDb21waWxlciA1LlgKKyMKKyMgICdsaWInIGRpcmVjdG9yeQorIworIyAgJ0JDQ0RJUicgaGFzIHRvIGJlIHNldCB1cCB0byBwb2ludCB0byB0aGUgYmFzZSBkaXJlY3RvcnkKKyMgIG9mIHRoZSBjb21waWxlciwgaS5lLiBTRVQgQkNDRElSID0gYzpcQm9ybGFuZFxCQ0M1NQorIworIyAgSW5pdGlhbGx5IHdyaXR0ZW4gYnkgSmFlcGlsIEtpbSwgcGl0QHBhcmFkaXNlLm5ldC5uegorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyFpZiAiJChfX01BS0VfXykiID09ICIiCishZXJyb3IgX19NQUtFX18gbm90IGRlZmluZWQuIFVzZSBCb3JsYW5kcydzIE1BS0UgdG8gcHJvY2VzcyB0aGlzIG1ha2VmaWxlLgorIWVuZGlmCisKKyMgQm9ybGFuZCdzICQoTUFLRURJUikgZXhwYW5kcyB0byB0aGUgcGF0aCB3aGVyZSBtYWtlLmV4ZSBpcyBsb2NhdGVkLAorIyB1c2UgdGhpcyBmZWF0dXJlIHRvIGRlZmluZSBCQ0NESVIgd2hlbiB1c2VyIGhhcyBub3QgZGVmaW5lZCBCQ0NESVIuCishaWZuZGVmIEJDQ0RJUgorQkNDRElSID0gJChNQUtFRElSKVwuLgorIWVuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIFpsaWIgc291cmNlcy4KKyFpZm5kZWYgWkxJQl9QQVRICitaTElCX1BBVEggPSAuLlwuLlx6bGliLTEuMi41CishZW5kaWYKKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgT3BlblNTTCBwYWNrYWdlLgorIWlmbmRlZiBPUEVOU1NMX1BBVEgKK09QRU5TU0xfUEFUSCA9IC4uXC4uXG9wZW5zc2wtMC45LjhxCishZW5kaWYKKworIyBTZXQgbGliY3VybCBzdGF0aWMgbGliLCBkbGwgYW5kIGltcG9ydCBsaWIKK0xJQkNVUkxfTElCICAgID0gbGliY3VybC5saWIKK0xJQkNVUkxfRExMICAgID0gbGliY3VybC5kbGwKK0xJQkNVUkxfSU1QTElCID0gbGliY3VybF9pbXAubGliCisKKyMgU2V0dXAgZW52aXJvbm1lbnQKK1BQX0NNRCAgID0gY3BwMzIgLXEgLVAtCitDQ19DTUQgICA9IGJjYzMyIC1xIC1jCitMRCAgICAgICA9IGJjYzMyCitSTSAgICAgICA9IGRlbCAyPk5VTAorTUtESVIgICAgPSBtZAorUk1ESVIgICAgPSByZCAvcQorTElCICAgICAgPSB0bGliCitJTVBMSUIgICA9IGltcGxpYgorCitDQ19GTEFHUyA9IC01IC1PMiAtdFdNIC13IC13LWF1cyAtdy1jY2MgLXctZHVwIC13LXByYyAtdy1wcm8gLXctcmNoIC13LXNpZyAtdy1zcGEgLXctaW5sIC13LXBpYSAtdy1waW4gLURpbmxpbmU9X19pbmxpbmUKK0xJQkZMQUdTID0gL0MgL1AzMgorTERGTEFHUyAgPSAtcSAtbHEgLWxhYSAtdFdECisKK1NSQ0RJUiAgID0gLgorT0JKRElSICAgPSAuXEJDQ19vYmpzCitJTkNESVJTICA9IC1JLjsuLlxpbmNsdWRlCitMSU5LTElCICA9ICQoQkNDRElSKVxsaWJcY3czMm10LmxpYgorREVGSU5FUyAgPSAtRE5ERUJVRyAtRFdJTjMyIC1EQlVJTERJTkdfTElCQ1VSTAorCisjIEJ5IGRlZmF1bHQgU1NQSSBzdXBwb3J0IGlzIGVuYWJsZWQgZm9yIEJDQworIWlmbmRlZiBESVNBQkxFX1NTUEkKK0RFRklORVMgID0gJChERUZJTkVTKSAtRFVTRV9XSU5ET1dTX1NTUEkKKyFlbmRpZgorCisjIEJ5IGRlZmF1bHQgTERBUCBzdXBwb3J0IGlzIGRpc2FibGVkIGZvciBCQ0MKKyFpZm5kZWYgV0lUSF9MREFQCitERUZJTkVTICA9ICQoREVGSU5FUykgLURDVVJMX0RJU0FCTEVfTERBUAorIWVuZGlmCisKKyMgWkxJQiBzdXBwb3J0IGlzIGVuYWJsZWQgc2V0dGluZyBXSVRIX1pMSUI9MQorIWlmZGVmIFdJVEhfWkxJQgorREVGSU5FUyAgPSAkKERFRklORVMpIC1ESEFWRV9MSUJaIC1ESEFWRV9aTElCX0gKK0lOQ0RJUlMgID0gJChJTkNESVJTKTskKFpMSUJfUEFUSCkKK0xJTktMSUIgID0gJChMSU5LTElCKSAkKFpMSUJfUEFUSClcemxpYi5saWIKKyFlbmRpZgorCisjIFNTTCBzdXBwb3J0IGlzIGVuYWJsZWQgc2V0dGluZyBXSVRIX1NTTD0xCishaWZkZWYgV0lUSF9TU0wKK0RFRklORVMgID0gJChERUZJTkVTKSAtRFVTRV9TU0xFQVkKK0lOQ0RJUlMgID0gJChJTkNESVJTKTskKE9QRU5TU0xfUEFUSClcaW5jMzI7JChPUEVOU1NMX1BBVEgpXGluYzMyXG9wZW5zc2wKK0xJTktMSUIgID0gJChMSU5LTElCKSAkKE9QRU5TU0xfUEFUSClcb3V0MzJcc3NsZWF5MzIubGliICQoT1BFTlNTTF9QQVRIKVxvdXQzMlxsaWJlYXkzMi5saWIKKyFlbmRpZgorCisuYXV0b2RlcGVuZAorCisucGF0aC5jICAgPSAkKFNSQ0RJUikKKy5wYXRoLm9iaiA9ICQoT0JKRElSKQorLnBhdGguaW50ID0gJChPQkpESVIpCisKKyMgTWFrZWZpbGUuaW5jIHByb3ZpZGVzIHRoZSBDU09VUkNFUyBhbmQgSEhFQURFUlMgZGVmaW5lcworIWluY2x1ZGUgTWFrZWZpbGUuaW5jCisKK09CSkVDVFMgPSAkKENTT1VSQ0VTOi5jPS5vYmopCitQUkVQUk9DRVNTRUQgPSAkKENTT1VSQ0VTOi5jPS5pbnQpCisKKy5jLm9iajoKKwlALSQoUk0pICQoQFIpLmludAorCSQoUFBfQ01EKSAkKENDX0ZMQUdTKSAkKElOQ0RJUlMpICQoREVGSU5FUykgLW8kKEBSKS5pbnQgJCg8KQorCSQoQ0NfQ01EKSAkKENDX0ZMQUdTKSAtbyQoQCkgJChAUikuaW50CisKK2FsbDoJJChPQkpESVIpICQoTElCQ1VSTF9MSUIpICQoTElCQ1VSTF9ETEwpCisKK2NsZWFuOgorCWNkICQoT0JKRElSKQorCUAtJChSTSkgJChPQkpFQ1RTKQorCUAtJChSTSkgJChQUkVQUk9DRVNTRUQpCisJY2QgLi4KKwlALSQoUk1ESVIpICQoT0JKRElSKQorCUAtJChSTSkgJChMSUJDVVJMX0xJQikKKwlALSQoUk0pICQoTElCQ1VSTF9JTVBMSUIpCisJQC0kKFJNKSBsaWJjdXJsLnRkcworCiskKE9CSkRJUik6CisJQC0kKFJNRElSKSAkKE9CSkRJUikKKwlALSQoTUtESVIpICQoT0JKRElSKQorCiskKExJQkNVUkxfTElCKTogJChPQkpFQ1RTKQorCUAtJChSTSkgJChMSUJDVVJMX0xJQikKKwkkKExJQikgJChMSUJGTEFHUykgJEAgQCYmIQorKyQoKio6ID0gJl4KKyspCishCisKKyQoTElCQ1VSTF9ETEwpICQoTElCQ1VSTF9JTVBMSUIpOiAkKE9CSkVDVFMpICQoTElOS0xJQikKKwlALSQoUk0pICQoTElCQ1VSTF9ETEwpCisJQC0kKFJNKSAkKExJQkNVUkxfSU1QTElCKQorCSQoTEQpICQoTERGTEFHUykgLWUkKExJQkNVUkxfRExMKSAkKioKKwkkKElNUExJQikgJChMSUJDVVJMX0lNUExJQikgJChMSUJDVVJMX0RMTCkKKworCisjIEVuZCBvZiBNYWtlZmlsZS5iMzIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS5pbiBiL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGZkNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTc3NyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIC4vbGliL01ha2VmaWxlLmluYworIyBVc2luZyB0aGUgYmFja3NsYXNoIGFzIGxpbmUgY29udGludWF0aW9uIGNoYXJhY3RlciBtaWdodCBiZSBwcm9ibGVtYXRpYworIyB3aXRoIHNvbWUgbWFrZSBmbGF2b3VycywgYXMgV2F0Y29tJ3Mgd21ha2Ugc2hvd2VkIHVzIGFscmVhZHkuIElmIHdlCisjIGV2ZXIgd2FudCB0byBjaGFuZ2UgdGhpcyBpbiBhIHBvcnRhYmxlIG1hbm5lciB0aGVuIHdlIHNob3VsZCBjb25zaWRlcgorIyB0aGlzIGlkZWEgKHBvc3RlZCB0byB0aGUgbGliY3VybCBsaXN0IGJ5IEFkYW0gS2VsbGFzKToKKyMgQ1NSQzEgPSBmaWxlMS5jIGZpbGUyLmMgZmlsZTMuYworIyBDU1JDMiA9IGZpbGU0LmMgZmlsZTUuYyBmaWxlNi5jCisjIENTT1VSQ0VTID0gJChDU1JDMSkgJChDU1JDMikKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW5jICQoc3JjZGlyKS9jdXJsX2NvbmZpZy5oLmluIFwKKwkkKHNyY2RpcikvbGliY3VybC52ZXJzLmluCitzdWJkaXIgPSBsaWIKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2N1cmwtY29tcGlsZXJzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtY29uZm9wdHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1mdW5jdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vcGVuc3NsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3ZlcnJpZGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1yZWVudHJhbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1zeXN0ZW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtdHJhbnNsaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQveno1MC14Yy1vdnIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSBjdXJsX2NvbmZpZy5oICQodG9wX2J1aWxkZGlyKS9zcmMvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0gbGliY3VybC52ZXJzCithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBgZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIKK2xpYkxUTElCUkFSSUVTX0lOU1RBTEwgPSAkKElOU1RBTEwpCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKSAkKG5vaW5zdF9MVExJQlJBUklFUykKK2xpYmN1cmxfbGFfTElCQUREID0KK2FtX19vYmplY3RzXzEgPSBmaWxlLmxvIHRpbWV2YWwubG8gYmFzZTY0LmxvIGhvc3RpcC5sbyBwcm9ncmVzcy5sbyBcCisJZm9ybWRhdGEubG8gY29va2llLmxvIGh0dHAubG8gc2VuZGYubG8gZnRwLmxvIHVybC5sbyBkaWN0LmxvIFwKKwlpZjJpcC5sbyBzcGVlZGNoZWNrLmxvIGxkYXAubG8gc3NsdXNlLmxvIHZlcnNpb24ubG8gZ2V0ZW52LmxvIFwKKwllc2NhcGUubG8gbXByaW50Zi5sbyB0ZWxuZXQubG8gbmV0cmMubG8gZ2V0aW5mby5sbyB0cmFuc2Zlci5sbyBcCisJc3RyZXF1YWwubG8gZWFzeS5sbyBzZWN1cml0eS5sbyBrcmI0LmxvIGN1cmxfZm5tYXRjaC5sbyBcCisJZmlsZWluZm8ubG8gZnRwbGlzdHBhcnNlci5sbyB3aWxkY2FyZC5sbyBrcmI1LmxvIG1lbWRlYnVnLmxvIFwKKwlodHRwX2NodW5rcy5sbyBzdHJ0b2subG8gY29ubmVjdC5sbyBsbGlzdC5sbyBoYXNoLmxvIG11bHRpLmxvIFwKKwljb250ZW50X2VuY29kaW5nLmxvIHNoYXJlLmxvIGh0dHBfZGlnZXN0LmxvIG1kNC5sbyBtZDUubG8gXAorCWN1cmxfcmFuZC5sbyBodHRwX25lZ290aWF0ZS5sbyBpbmV0X3B0b24ubG8gc3RydG9vZmZ0LmxvIFwKKwlzdHJlcnJvci5sbyBob3N0YXN5bi5sbyBob3N0aXA0LmxvIGhvc3RpcDYubG8gaG9zdHN5bi5sbyBcCisJaW5ldF9udG9wLmxvIHBhcnNlZGF0ZS5sbyBzZWxlY3QubG8gZ3Rscy5sbyBzc2xnZW4ubG8gdGZ0cC5sbyBcCisJc3BsYXkubG8gc3RyZHVwLmxvIHNvY2tzLmxvIHNzaC5sbyBuc3MubG8gcXNzbC5sbyByYXdzdHIubG8gXAorCWN1cmxfYWRkcmluZm8ubG8gc29ja3NfZ3NzYXBpLmxvIHNvY2tzX3NzcGkubG8gY3VybF9zc3BpLmxvIFwKKwlzbGlzdC5sbyBub25ibG9jay5sbyBjdXJsX21lbXJjaHIubG8gaW1hcC5sbyBwb3AzLmxvIHNtdHAubG8gXAorCXBpbmdwb25nLmxvIHJ0c3AubG8gY3VybF90aHJlYWRzLmxvIHdhcm5sZXNzLmxvIGhtYWMubG8gXAorCXBvbGFyc3NsLmxvIGN1cmxfcnRtcC5sbyBvcGVubGRhcC5sbyBjdXJsX2dldGhvc3RuYW1lLmxvIFwKKwlnb3BoZXIubG8gYXh0bHMubG8gaWRuX3dpbjMyLmxvIGh0dHBfbmVnb3RpYXRlX3NzcGkubG8gXAorCWN5YXNzbC5sbyBodHRwX3Byb3h5LmxvIG5vbi1hc2NpaS5sbyBhc3luLWFyZXMubG8gXAorCWFzeW4tdGhyZWFkLmxvIGN1cmxfZ3NzYXBpLmxvIGN1cmxfbnRsbS5sbyBjdXJsX250bG1fd2IubG8gXAorCWN1cmxfbnRsbV9jb3JlLmxvIGN1cmxfbnRsbV9tc2dzLmxvCithbV9fb2JqZWN0c18yID0KK2FtX2xpYmN1cmxfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKQorbGliY3VybF9sYV9PQkpFQ1RTID0gJChhbV9saWJjdXJsX2xhX09CSkVDVFMpCitsaWJjdXJsdV9sYV9MSUJBREQgPQorYW1fX29iamVjdHNfMyA9IGxpYmN1cmx1X2xhLWZpbGUubG8gbGliY3VybHVfbGEtdGltZXZhbC5sbyBcCisJbGliY3VybHVfbGEtYmFzZTY0LmxvIGxpYmN1cmx1X2xhLWhvc3RpcC5sbyBcCisJbGliY3VybHVfbGEtcHJvZ3Jlc3MubG8gbGliY3VybHVfbGEtZm9ybWRhdGEubG8gXAorCWxpYmN1cmx1X2xhLWNvb2tpZS5sbyBsaWJjdXJsdV9sYS1odHRwLmxvIGxpYmN1cmx1X2xhLXNlbmRmLmxvIFwKKwlsaWJjdXJsdV9sYS1mdHAubG8gbGliY3VybHVfbGEtdXJsLmxvIGxpYmN1cmx1X2xhLWRpY3QubG8gXAorCWxpYmN1cmx1X2xhLWlmMmlwLmxvIGxpYmN1cmx1X2xhLXNwZWVkY2hlY2subG8gXAorCWxpYmN1cmx1X2xhLWxkYXAubG8gbGliY3VybHVfbGEtc3NsdXNlLmxvIFwKKwlsaWJjdXJsdV9sYS12ZXJzaW9uLmxvIGxpYmN1cmx1X2xhLWdldGVudi5sbyBcCisJbGliY3VybHVfbGEtZXNjYXBlLmxvIGxpYmN1cmx1X2xhLW1wcmludGYubG8gXAorCWxpYmN1cmx1X2xhLXRlbG5ldC5sbyBsaWJjdXJsdV9sYS1uZXRyYy5sbyBcCisJbGliY3VybHVfbGEtZ2V0aW5mby5sbyBsaWJjdXJsdV9sYS10cmFuc2Zlci5sbyBcCisJbGliY3VybHVfbGEtc3RyZXF1YWwubG8gbGliY3VybHVfbGEtZWFzeS5sbyBcCisJbGliY3VybHVfbGEtc2VjdXJpdHkubG8gbGliY3VybHVfbGEta3JiNC5sbyBcCisJbGliY3VybHVfbGEtY3VybF9mbm1hdGNoLmxvIGxpYmN1cmx1X2xhLWZpbGVpbmZvLmxvIFwKKwlsaWJjdXJsdV9sYS1mdHBsaXN0cGFyc2VyLmxvIGxpYmN1cmx1X2xhLXdpbGRjYXJkLmxvIFwKKwlsaWJjdXJsdV9sYS1rcmI1LmxvIGxpYmN1cmx1X2xhLW1lbWRlYnVnLmxvIFwKKwlsaWJjdXJsdV9sYS1odHRwX2NodW5rcy5sbyBsaWJjdXJsdV9sYS1zdHJ0b2subG8gXAorCWxpYmN1cmx1X2xhLWNvbm5lY3QubG8gbGliY3VybHVfbGEtbGxpc3QubG8gXAorCWxpYmN1cmx1X2xhLWhhc2gubG8gbGliY3VybHVfbGEtbXVsdGkubG8gXAorCWxpYmN1cmx1X2xhLWNvbnRlbnRfZW5jb2RpbmcubG8gbGliY3VybHVfbGEtc2hhcmUubG8gXAorCWxpYmN1cmx1X2xhLWh0dHBfZGlnZXN0LmxvIGxpYmN1cmx1X2xhLW1kNC5sbyBcCisJbGliY3VybHVfbGEtbWQ1LmxvIGxpYmN1cmx1X2xhLWN1cmxfcmFuZC5sbyBcCisJbGliY3VybHVfbGEtaHR0cF9uZWdvdGlhdGUubG8gbGliY3VybHVfbGEtaW5ldF9wdG9uLmxvIFwKKwlsaWJjdXJsdV9sYS1zdHJ0b29mZnQubG8gbGliY3VybHVfbGEtc3RyZXJyb3IubG8gXAorCWxpYmN1cmx1X2xhLWhvc3Rhc3luLmxvIGxpYmN1cmx1X2xhLWhvc3RpcDQubG8gXAorCWxpYmN1cmx1X2xhLWhvc3RpcDYubG8gbGliY3VybHVfbGEtaG9zdHN5bi5sbyBcCisJbGliY3VybHVfbGEtaW5ldF9udG9wLmxvIGxpYmN1cmx1X2xhLXBhcnNlZGF0ZS5sbyBcCisJbGliY3VybHVfbGEtc2VsZWN0LmxvIGxpYmN1cmx1X2xhLWd0bHMubG8gXAorCWxpYmN1cmx1X2xhLXNzbGdlbi5sbyBsaWJjdXJsdV9sYS10ZnRwLmxvIGxpYmN1cmx1X2xhLXNwbGF5LmxvIFwKKwlsaWJjdXJsdV9sYS1zdHJkdXAubG8gbGliY3VybHVfbGEtc29ja3MubG8gbGliY3VybHVfbGEtc3NoLmxvIFwKKwlsaWJjdXJsdV9sYS1uc3MubG8gbGliY3VybHVfbGEtcXNzbC5sbyBsaWJjdXJsdV9sYS1yYXdzdHIubG8gXAorCWxpYmN1cmx1X2xhLWN1cmxfYWRkcmluZm8ubG8gbGliY3VybHVfbGEtc29ja3NfZ3NzYXBpLmxvIFwKKwlsaWJjdXJsdV9sYS1zb2Nrc19zc3BpLmxvIGxpYmN1cmx1X2xhLWN1cmxfc3NwaS5sbyBcCisJbGliY3VybHVfbGEtc2xpc3QubG8gbGliY3VybHVfbGEtbm9uYmxvY2subG8gXAorCWxpYmN1cmx1X2xhLWN1cmxfbWVtcmNoci5sbyBsaWJjdXJsdV9sYS1pbWFwLmxvIFwKKwlsaWJjdXJsdV9sYS1wb3AzLmxvIGxpYmN1cmx1X2xhLXNtdHAubG8gXAorCWxpYmN1cmx1X2xhLXBpbmdwb25nLmxvIGxpYmN1cmx1X2xhLXJ0c3AubG8gXAorCWxpYmN1cmx1X2xhLWN1cmxfdGhyZWFkcy5sbyBsaWJjdXJsdV9sYS13YXJubGVzcy5sbyBcCisJbGliY3VybHVfbGEtaG1hYy5sbyBsaWJjdXJsdV9sYS1wb2xhcnNzbC5sbyBcCisJbGliY3VybHVfbGEtY3VybF9ydG1wLmxvIGxpYmN1cmx1X2xhLW9wZW5sZGFwLmxvIFwKKwlsaWJjdXJsdV9sYS1jdXJsX2dldGhvc3RuYW1lLmxvIGxpYmN1cmx1X2xhLWdvcGhlci5sbyBcCisJbGliY3VybHVfbGEtYXh0bHMubG8gbGliY3VybHVfbGEtaWRuX3dpbjMyLmxvIFwKKwlsaWJjdXJsdV9sYS1odHRwX25lZ290aWF0ZV9zc3BpLmxvIGxpYmN1cmx1X2xhLWN5YXNzbC5sbyBcCisJbGliY3VybHVfbGEtaHR0cF9wcm94eS5sbyBsaWJjdXJsdV9sYS1ub24tYXNjaWkubG8gXAorCWxpYmN1cmx1X2xhLWFzeW4tYXJlcy5sbyBsaWJjdXJsdV9sYS1hc3luLXRocmVhZC5sbyBcCisJbGliY3VybHVfbGEtY3VybF9nc3NhcGkubG8gbGliY3VybHVfbGEtY3VybF9udGxtLmxvIFwKKwlsaWJjdXJsdV9sYS1jdXJsX250bG1fd2IubG8gbGliY3VybHVfbGEtY3VybF9udGxtX2NvcmUubG8gXAorCWxpYmN1cmx1X2xhLWN1cmxfbnRsbV9tc2dzLmxvCithbV9saWJjdXJsdV9sYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c18zKSAkKGFtX19vYmplY3RzXzIpCitsaWJjdXJsdV9sYV9PQkpFQ1RTID0gJChhbV9saWJjdXJsdV9sYV9PQkpFQ1RTKQorQEJVSUxEX1VOSVRURVNUU19UUlVFQGFtX2xpYmN1cmx1X2xhX3JwYXRoID0KK0RFRkFVTFRfSU5DTFVERVMgPSAKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGxpYmN1cmxfbGFfU09VUkNFUykgJChsaWJjdXJsdV9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJjdXJsX2xhX1NPVVJDRVMpICQobGliY3VybHVfbGFfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQlVJTERfTElCSE9TVE5BTUVfRkFMU0UgPSBAQlVJTERfTElCSE9TVE5BTUVfRkFMU0VACitCVUlMRF9MSUJIT1NUTkFNRV9UUlVFID0gQEJVSUxEX0xJQkhPU1ROQU1FX1RSVUVACitCVUlMRF9VTklUVEVTVFNfRkFMU0UgPSBAQlVJTERfVU5JVFRFU1RTX0ZBTFNFQAorQlVJTERfVU5JVFRFU1RTX1RSVUUgPSBAQlVJTERfVU5JVFRFU1RTX1RSVUVACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACisKKyMgVGhpcyBtaWdodCBob2xkIC1XZXJyb3IKK0NGTEFHUyA9IEBDRkxBR1NAIEBDVVJMX0NGTEFHX0VYVFJBU0AKK0NPTkZJR1VSRV9PUFRJT05TID0gQENPTkZJR1VSRV9PUFRJT05TQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1JPU1NDT01QSUxJTkdfRkFMU0UgPSBAQ1JPU1NDT01QSUxJTkdfRkFMU0VACitDUk9TU0NPTVBJTElOR19UUlVFID0gQENST1NTQ09NUElMSU5HX1RSVUVACitDVVJMREVCVUdfRkFMU0UgPSBAQ1VSTERFQlVHX0ZBTFNFQAorQ1VSTERFQlVHX1RSVUUgPSBAQ1VSTERFQlVHX1RSVUVACitDVVJMVkVSU0lPTiA9IEBDVVJMVkVSU0lPTkAKK0NVUkxfQ0FfQlVORExFID0gQENVUkxfQ0FfQlVORExFQAorQ1VSTF9DRkxBR19FWFRSQVMgPSBAQ1VSTF9DRkxBR19FWFRSQVNACitDVVJMX0RJU0FCTEVfRElDVCA9IEBDVVJMX0RJU0FCTEVfRElDVEAKK0NVUkxfRElTQUJMRV9GSUxFID0gQENVUkxfRElTQUJMRV9GSUxFQAorQ1VSTF9ESVNBQkxFX0ZUUCA9IEBDVVJMX0RJU0FCTEVfRlRQQAorQ1VSTF9ESVNBQkxFX0dPUEhFUiA9IEBDVVJMX0RJU0FCTEVfR09QSEVSQAorQ1VSTF9ESVNBQkxFX0hUVFAgPSBAQ1VSTF9ESVNBQkxFX0hUVFBACitDVVJMX0RJU0FCTEVfSU1BUCA9IEBDVVJMX0RJU0FCTEVfSU1BUEAKK0NVUkxfRElTQUJMRV9MREFQID0gQENVUkxfRElTQUJMRV9MREFQQAorQ1VSTF9ESVNBQkxFX0xEQVBTID0gQENVUkxfRElTQUJMRV9MREFQU0AKK0NVUkxfRElTQUJMRV9QT1AzID0gQENVUkxfRElTQUJMRV9QT1AzQAorQ1VSTF9ESVNBQkxFX1BST1hZID0gQENVUkxfRElTQUJMRV9QUk9YWUAKK0NVUkxfRElTQUJMRV9SVFNQID0gQENVUkxfRElTQUJMRV9SVFNQQAorQ1VSTF9ESVNBQkxFX1NNVFAgPSBAQ1VSTF9ESVNBQkxFX1NNVFBACitDVVJMX0RJU0FCTEVfVEVMTkVUID0gQENVUkxfRElTQUJMRV9URUxORVRACitDVVJMX0RJU0FCTEVfVEZUUCA9IEBDVVJMX0RJU0FCTEVfVEZUUEAKK0NVUkxfTElCUyA9IEBDVVJMX0xJQlNACitDVVJMX05FVFdPUktfTElCUyA9IEBDVVJMX05FVFdPUktfTElCU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TSEFSRUQgPSBARU5BQkxFX1NIQVJFREAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfR05VVExTX1NSUCA9IEBIQVZFX0dOVVRMU19TUlBACitIQVZFX0xEQVBfU1NMID0gQEhBVkVfTERBUF9TU0xACitIQVZFX0xJQlogPSBASEFWRV9MSUJaQAorSEFWRV9MSUJaX0ZBTFNFID0gQEhBVkVfTElCWl9GQUxTRUAKK0hBVkVfTElCWl9UUlVFID0gQEhBVkVfTElCWl9UUlVFQAorSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QgPSBASEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1RACitIQVZFX1NTTEVBWV9TUlAgPSBASEFWRV9TU0xFQVlfU1JQQAorSUROX0VOQUJMRUQgPSBASUROX0VOQUJMRURACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lQVjZfRU5BQkxFRCA9IEBJUFY2X0VOQUJMRURACitLUkI0X0VOQUJMRUQgPSBAS1JCNF9FTkFCTEVEQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJDVVJMX0xJQlMgPSBATElCQ1VSTF9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQU5PUFQgPSBATUFOT1BUQAorTUlNUFVSRV9GQUxTRSA9IEBNSU1QVVJFX0ZBTFNFQAorTUlNUFVSRV9UUlVFID0gQE1JTVBVUkVfVFJVRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PX1VOREVGSU5FRF9GQUxTRSA9IEBOT19VTkRFRklORURfRkFMU0VACitOT19VTkRFRklORURfVFJVRSA9IEBOT19VTkRFRklORURfVFJVRUAKK05ST0ZGID0gQE5ST0ZGQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSCA9IEBQQVRIQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACitQS0dBRERfTkFNRSA9IEBQS0dBRERfTkFNRUAKK1BLR0FERF9QS0cgPSBAUEtHQUREX1BLR0AKK1BLR0FERF9WRU5ET1IgPSBAUEtHQUREX1ZFTkRPUkAKK1BLR0NPTkZJRyA9IEBQS0dDT05GSUdACitSQU5ET01fRklMRSA9IEBSQU5ET01fRklMRUAKK1JBTkxJQiA9IEBSQU5MSUJACitSRVFVSVJFX0xJQl9ERVBTID0gQFJFUVVJUkVfTElCX0RFUFNACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NPTkFNRV9CVU1QX0ZBTFNFID0gQFNPTkFNRV9CVU1QX0ZBTFNFQAorU09OQU1FX0JVTVBfVFJVRSA9IEBTT05BTUVfQlVNUF9UUlVFQAorU1NMX0VOQUJMRUQgPSBAU1NMX0VOQUJMRURACitTVEFUSUNMSUJfRkFMU0UgPSBAU1RBVElDTElCX0ZBTFNFQAorU1RBVElDTElCX1RSVUUgPSBAU1RBVElDTElCX1RSVUVACitTVFJJUCA9IEBTVFJJUEAKK1NVUFBPUlRfRkVBVFVSRVMgPSBAU1VQUE9SVF9GRUFUVVJFU0AKK1NVUFBPUlRfUFJPVE9DT0xTID0gQFNVUFBPUlRfUFJPVE9DT0xTQAorVEVTVF9TRVJWRVJfTElCUyA9IEBURVNUX1NFUlZFUl9MSUJTQAorVVNFX0FSRVMgPSBAVVNFX0FSRVNACitVU0VfQVhUTFMgPSBAVVNFX0FYVExTQAorVVNFX0NZQVNTTCA9IEBVU0VfQ1lBU1NMQAorVVNFX0VNQkVEREVEX0FSRVNfRkFMU0UgPSBAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VACitVU0VfRU1CRURERURfQVJFU19UUlVFID0gQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVACitVU0VfR05VVExTID0gQFVTRV9HTlVUTFNACitVU0VfR05VVExTX05FVFRMRSA9IEBVU0VfR05VVExTX05FVFRMRUAKK1VTRV9MSUJSVE1QID0gQFVTRV9MSUJSVE1QQAorVVNFX0xJQlNTSDIgPSBAVVNFX0xJQlNTSDJACitVU0VfTUFOVUFMX0ZBTFNFID0gQFVTRV9NQU5VQUxfRkFMU0VACitVU0VfTUFOVUFMX1RSVUUgPSBAVVNFX01BTlVBTF9UUlVFQAorVVNFX05TUyA9IEBVU0VfTlNTQAorVVNFX09QRU5MREFQID0gQFVTRV9PUEVOTERBUEAKK1VTRV9QT0xBUlNTTCA9IEBVU0VfUE9MQVJTU0xACitVU0VfU1NMRUFZID0gQFVTRV9TU0xFQVlACitVU0VfV0lORE9XU19TU1BJID0gQFVTRV9XSU5ET1dTX1NTUElACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9ORURfRkxBVk9VUiA9IEBWRVJTSU9ORURfRkxBVk9VUkAKK1ZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFID0gQFZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFQAorVkVSU0lPTkVEX1NZTUJPTFNfVFJVRSA9IEBWRVJTSU9ORURfU1lNQk9MU19UUlVFQAorVkVSU0lPTk5VTSA9IEBWRVJTSU9OTlVNQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbGliZXh0ID0gQGxpYmV4dEAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3ViZGlycyA9IEBzdWJkaXJzQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBub3N0ZGluYworRFNQID0gdmM2bGliY3VybC5kc3AKK1ZDUFJPSiA9IGxpYmN1cmwudmNwcm9qCitET0NTID0gUkVBRE1FLmVuY29kaW5nIFJFQURNRS5tZW1vcnlsZWFrIFJFQURNRS5hcmVzIFJFQURNRS5jdXJseAlcCisgUkVBRE1FLmhvc3RpcCBSRUFETUUubXVsdGlfc29ja2V0IFJFQURNRS5odHRwYXV0aCBSRUFETUUucGlwZWxpbmluZyAgICBcCisgUkVBRE1FLmN1cmxfb2ZmX3QgUkVBRE1FLnBpbmdwb25nCisKK0NNQUtFX0RJU1QgPSBDTWFrZUxpc3RzLnR4dCBjdXJsX2NvbmZpZy5oLmNtYWtlCitFWFRSQV9ESVNUID0gTWFrZWZpbGUuYjMyIE1ha2VmaWxlLm0zMiBNYWtlZmlsZS52YzYgJChEU1ApICAgICAgICAgICAgICAgICBcCisgdmM2bGliY3VybC5kc3cgY29uZmlnLXdpbjMyLmggY29uZmlnLXdpbjMyY2UuaCBjb25maWctcmlzY29zLmggICAgICAgICAgICBcCisgY29uZmlnLW1hYy5oIGN1cmxfY29uZmlnLmguaW4gbWFrZWZpbGUuZGogY29uZmlnLWRvcy5oIGxpYmN1cmwucGxpc3QgICAgICBcCisgbGliY3VybC5yYyBjb25maWctYW1pZ2Fvcy5oIGFtaWdhb3MuYyBhbWlnYW9zLmggbWFrZWZpbGUuYW1pZ2EJCSAgIFwKKyBNYWtlZmlsZS5uZXR3YXJlIG53bGliLmMgbndvcy5jIGxpYmN1cmwuaW1wIG1zdmNwcm9qLmhlYWQgbXN2Y3Byb2ouZm9vdCAgIFwKKyBjb25maWctd2luMzJjZS5oIGNvbmZpZy1vczQwMC5oIHNldHVwLW9zNDAwLmggY29uZmlnLXN5bWJpYW4uaAkJICAgXAorIE1ha2VmaWxlLldhdGNvbSBjb25maWctdHBmLmggJChET0NTKSAkKFZDUFJPSikgbWstY2EtYnVuZGxlLnBsCQkgICBcCisgbWstY2EtYnVuZGxlLnZicyBmaXJlZm94LWRiMnBlbS5zaCAkKENNQUtFX0RJU1QpIGNvbmZpZy12eHdvcmtzLmgJICAgXAorIE1ha2VmaWxlLnZ4d29ya3MgY29uZmlnLXZtcy5oIGNoZWNrc3JjLnBsCisKK0NMRUFORklMRVMgPSAkKERTUCkgJChWQ1BST0opCitsaWJfTFRMSUJSQVJJRVMgPSBsaWJjdXJsLmxhCitAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VASU5DTFVERVMgPSAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwgXAorQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQCAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19GQUxTRUAgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICBcCitAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9saWIgICAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQCAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2xpYgorCisKKyMgU3BlY2lmeSBvdXIgaW5jbHVkZSBwYXRocyBoZXJlLCBhbmQgZG8gaXQgcmVsYXRpdmUgdG8gJCh0b3Bfc3JjZGlyKSBhbmQKKyMgJCh0b3BfYnVpbGRkaXIpLCB0byBlbnN1cmUgdGhhdCB0aGVzZSBwYXRocyB3aGljaCBiZWxvbmcgdG8gdGhlIGxpYnJhcnkKKyMgYmVpbmcgY3VycmVudGx5IGJ1aWx0IGFuZCB0ZXN0ZWQgYXJlIHNlYXJjaGVkIGJlZm9yZSB0aGUgbGlicmFyeSB3aGljaAorIyBtaWdodCBwb3NzaWJseSBhbHJlYWR5IGJlIGluc3RhbGxlZCBpbiB0aGUgc3lzdGVtLgorIworIyAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIGZvciBnZW5lcmF0ZWQgY3VybGJ1aWxkLmggaW5jbHVkZWQgZnJvbSBjdXJsLmgKKyMgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgZm9yIGdlbmVyYXRlZCBjdXJsYnVpbGQuaCBpbmNsdWRlZCBmcm9tIGxpYi9zZXR1cC5oCisjICQodG9wX3NyY2RpcikvaW5jbHVkZSBpcyBmb3IgbGliY3VybCdzIGV4dGVybmFsIGluY2x1ZGUgZmlsZXMKKyMgJCh0b3BfYnVpbGRkaXIpL2xpYiBpcyBmb3IgbGliY3VybCdzIGdlbmVyYXRlZCBsaWIvY3VybF9jb25maWcuaCBmaWxlCisjICQodG9wX3NyY2RpcikvbGliIGlzIGZvciBsaWJjdXJsJ3MgbGliL3NldHVwLmggYW5kIG90aGVyICJwcml2YXRlIiBmaWxlcworIyAkKHRvcF9idWlsZGRpcikvYXJlcyBpcyBmb3IgaW4tdHJlZSBjLWFyZXMncyBnZW5lcmF0ZWQgYXJlc19idWlsZC5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS9hcmVzIGlzIGZvciBpbi10cmVlIGMtYXJlcydzIGV4dGVybmFsIGluY2x1ZGUgZmlsZXMKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQElOQ0xVREVTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIFwKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQCAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQCAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQCAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvbGliICAgICAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQCAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2xpYiAgICAgICAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQCAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvYXJlcyAgICAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQCAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2FyZXMKKworQFNPTkFNRV9CVU1QX0ZBTFNFQFZFUlNJT05JTkZPID0gLXZlcnNpb24taW5mbyA2OjA6MgorCisjCisjIEJ1bXBpbmcgb2YgU09OQU1FIGNvbmRpdGlvbmFsbHkgbWF5IHNlZW0gbGlrZSBhIHdlaXJkIHRoaW5nIHRvIGRvLCBhbmQgeWVhaAorIyBpdCBpcy4gVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSB0cnkgdG8gYXZvaWQgdGhlIGJ1bXAgYXMgaGFyZCBhcyBwb3NzaWJsZSwgYnV0CisjIHlldCBpdCBpcyBzdGlsbCBuZWNlc3NhcnkgZm9yIGEgZmV3IHJhcmUgc2l0dWF0aW9ucy4gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgd2lsbAorIyBhdHRlbXB0IHRvIGZpZ3VyZSBvdXQgdGhlc2Ugc2l0dWF0aW9ucywgYW5kIGl0IGNhbiBiZSBmb3JjZWQgdG8gY29uc2lkZXIgdGhpcworIyB0byBiZSBzdWNoIGEgY2FzZSEgU2VlIFJFQURNRS5jdXJsX29mZl90IGZvciBmdXJ0aGVyIGRldGFpbHMuCisjCisjIFRoaXMgY29uZGl0aW9uYWwgc29uYW1lIGJ1bXAgU0hPVUxEIGJlIHJlbW92ZWQgYXQgbmV4dCAicHJvcGVyIiBidW1wLgorIworQFNPTkFNRV9CVU1QX1RSVUVAVkVSU0lPTklORk8gPSAtdmVyc2lvbi1pbmZvIDc6MDoyCisKKyMgVGhpcyBmbGFnIGFjY2VwdHMgYW4gYXJndW1lbnQgb2YgdGhlIGZvcm0gY3VycmVudFs6cmV2aXNpb25bOmFnZV1dLiBTbywKKyMgcGFzc2luZyAtdmVyc2lvbi1pbmZvIDM6MTI6MSBzZXRzIGN1cnJlbnQgdG8gMywgcmV2aXNpb24gdG8gMTIsIGFuZCBhZ2UgdG8KKyMgMS4KKyMKKyMgSGVyZSdzIHRoZSBzaW1wbGlmaWVkIHJ1bGUgZ3VpZGUgb24gaG93IHRvIGNoYW5nZSAtdmVyc2lvbi1pbmZvOgorIyAoY3VycmVudCB2ZXJzaW9uIGlzIEM6UjpBKQorIworIyAxLiBpZiB0aGVyZSBhcmUgb25seSBzb3VyY2UgY2hhbmdlcywgdXNlIEM6UisxOkEKKyMgMi4gaWYgaW50ZXJmYWNlcyB3ZXJlIGFkZGVkIHVzZSBDKzE6MDpBKzEKKyMgMy4gaWYgaW50ZXJmYWNlcyB3ZXJlIHJlbW92ZWQsIHRoZW4gdXNlIEMrMTowOjAKKyMKKyMgRm9yIHRoZSBmdWxsIGd1aWRlIG9uIGxpYmN1cmwgQUJJIHJ1bGVzLCBzZWUgZG9jcy9saWJjdXJsL0FCSQorCisjIFRoZSAtbm8tdW5kZWZpbmVkIGZsYWcgaXMgY3J1Y2lhbCB0byBidWlsZCBmaW5lIG9uIHNvbWUgcGxhdGZvcm1zCitATk9fVU5ERUZJTkVEX1RSVUVAVU5ERUYgPSAtbm8tdW5kZWZpbmVkCisKKyMgVGhpcyBpcyBmb3IgZ2NjIG9uIFNvbGFyaXMgKDgrID8pIHRvIGF2b2lkICJyZWxvY2F0aW9ucyByZW1haW4gYWdhaW5zdAorIyBhbGxvY2F0YWJsZSBidXQgbm9uLXdyaXRhYmxlIHNlY3Rpb25zIiBwcm9ibGVtcy4KK0BNSU1QVVJFX1RSVUVATUlNUFVSRSA9IC1taW1wdXJlLXRleHQKK0BWRVJTSU9ORURfU1lNQk9MU19UUlVFQFZFUlNJT05FRF9TWU1CT0xTID0gLVdsLC0tdmVyc2lvbi1zY3JpcHQ9bGliY3VybC52ZXJzCitsaWJjdXJsX2xhX0xERkxBR1MgPSAkKFVOREVGKSAkKFZFUlNJT05JTkZPKSAkKE1JTVBVUkUpICQoVkVSU0lPTkVEX1NZTUJPTFMpICQoTElCQ1VSTF9MSUJTKQorQEJVSUxEX1VOSVRURVNUU19GQUxTRUBub2luc3RfTFRMSUJSQVJJRVMgPSAKKworIyB1bml0IHRlc3Rpbmcgc3RhdGljIGxpYnJhcnkgYnVpbHQgb25seSBhbG9uZyB3aXRoIHVuaXQgdGVzdHMKK0BCVUlMRF9VTklUVEVTVFNfVFJVRUBub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJjdXJsdS5sYQorbGliY3VybHVfbGFfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRFVOSVRURVNUUworbGliY3VybHVfbGFfTERGTEFHUyA9IC1zdGF0aWMgJChMSUJDVVJMX0xJQlMpCitDU09VUkNFUyA9IGZpbGUuYyB0aW1ldmFsLmMgYmFzZTY0LmMgaG9zdGlwLmMgcHJvZ3Jlc3MuYyBmb3JtZGF0YS5jCVwKKyAgY29va2llLmMgaHR0cC5jIHNlbmRmLmMgZnRwLmMgdXJsLmMgZGljdC5jIGlmMmlwLmMgc3BlZWRjaGVjay5jCVwKKyAgbGRhcC5jIHNzbHVzZS5jIHZlcnNpb24uYyBnZXRlbnYuYyBlc2NhcGUuYyBtcHJpbnRmLmMgdGVsbmV0LmMJXAorICBuZXRyYy5jIGdldGluZm8uYyB0cmFuc2Zlci5jIHN0cmVxdWFsLmMgZWFzeS5jIHNlY3VyaXR5LmMga3JiNC5jCVwKKyAgY3VybF9mbm1hdGNoLmMgZmlsZWluZm8uYyBmdHBsaXN0cGFyc2VyLmMgd2lsZGNhcmQuYyBrcmI1LmMJCVwKKyAgbWVtZGVidWcuYyBodHRwX2NodW5rcy5jIHN0cnRvay5jIGNvbm5lY3QuYyBsbGlzdC5jIGhhc2guYyBtdWx0aS5jCVwKKyAgY29udGVudF9lbmNvZGluZy5jIHNoYXJlLmMgaHR0cF9kaWdlc3QuYyBtZDQuYyBtZDUuYyBjdXJsX3JhbmQuYwlcCisgIGh0dHBfbmVnb3RpYXRlLmMgaW5ldF9wdG9uLmMgc3RydG9vZmZ0LmMgc3RyZXJyb3IuYwkJCVwKKyAgaG9zdGFzeW4uYyBob3N0aXA0LmMgaG9zdGlwNi5jIGhvc3RzeW4uYyBpbmV0X250b3AuYyBwYXJzZWRhdGUuYwlcCisgIHNlbGVjdC5jIGd0bHMuYyBzc2xnZW4uYyB0ZnRwLmMgc3BsYXkuYyBzdHJkdXAuYyBzb2Nrcy5jIHNzaC5jIG5zcy5jCVwKKyAgcXNzbC5jIHJhd3N0ci5jIGN1cmxfYWRkcmluZm8uYyBzb2Nrc19nc3NhcGkuYyBzb2Nrc19zc3BpLmMJCVwKKyAgY3VybF9zc3BpLmMgc2xpc3QuYyBub25ibG9jay5jIGN1cmxfbWVtcmNoci5jIGltYXAuYyBwb3AzLmMgc210cC5jCVwKKyAgcGluZ3BvbmcuYyBydHNwLmMgY3VybF90aHJlYWRzLmMgd2Fybmxlc3MuYyBobWFjLmMgcG9sYXJzc2wuYwkJXAorICBjdXJsX3J0bXAuYyBvcGVubGRhcC5jIGN1cmxfZ2V0aG9zdG5hbWUuYyBnb3BoZXIuYyBheHRscy5jCQlcCisgIGlkbl93aW4zMi5jIGh0dHBfbmVnb3RpYXRlX3NzcGkuYyBjeWFzc2wuYyBodHRwX3Byb3h5LmMgbm9uLWFzY2lpLmMJXAorICBhc3luLWFyZXMuYyBhc3luLXRocmVhZC5jIGN1cmxfZ3NzYXBpLmMgY3VybF9udGxtLmMgY3VybF9udGxtX3diLmMJXAorICBjdXJsX250bG1fY29yZS5jIGN1cmxfbnRsbV9tc2dzLmMKKworSEhFQURFUlMgPSBhcnBhX3RlbG5ldC5oIG5ldHJjLmggZmlsZS5oIHRpbWV2YWwuaCBxc3NsLmggaG9zdGlwLmgJXAorICBwcm9ncmVzcy5oIGZvcm1kYXRhLmggY29va2llLmggaHR0cC5oIHNlbmRmLmggZnRwLmggdXJsLmggZGljdC5oCVwKKyAgaWYyaXAuaCBzcGVlZGNoZWNrLmggdXJsZGF0YS5oIGN1cmxfbGRhcC5oIHNzbHVzZS5oIGVzY2FwZS5oIHRlbG5ldC5oCVwKKyAgZ2V0aW5mby5oIHN0cmVxdWFsLmgga3JiNC5oIG1lbWRlYnVnLmggaHR0cF9jaHVua3MuaCBjdXJsX3JhbmQuaAlcCisgIGN1cmxfZm5tYXRjaC5oIHdpbGRjYXJkLmggZmlsZWluZm8uaCBmdHBsaXN0cGFyc2VyLmggc3RydG9rLmgJCVwKKyAgY29ubmVjdC5oIGxsaXN0LmggaGFzaC5oIGNvbnRlbnRfZW5jb2RpbmcuaCBzaGFyZS5oIGN1cmxfbWQ0LmgJXAorICBjdXJsX21kNS5oIGh0dHBfZGlnZXN0LmggaHR0cF9uZWdvdGlhdGUuaCBpbmV0X3B0b24uaAkJCVwKKyAgc3RydG9vZmZ0Lmggc3RyZXJyb3IuaCBpbmV0X250b3AuaCBjdXJseC5oIGN1cmxfbWVtb3J5Lmggc2V0dXAuaAlcCisgIHRyYW5zZmVyLmggc2VsZWN0LmggZWFzeWlmLmggbXVsdGlpZi5oIHBhcnNlZGF0ZS5oIHNzbGdlbi5oIGd0bHMuaAlcCisgIHRmdHAuaCBzb2NrYWRkci5oIHNwbGF5Lmggc3RyZHVwLmggc2V0dXBfb25jZS5oIHNvY2tzLmggc3NoLmggbnNzZy5oCVwKKyAgY3VybF9iYXNlNjQuaCByYXdzdHIuaCBjdXJsX2FkZHJpbmZvLmggY3VybF9zc3BpLmggc2xpc3QuaCBub25ibG9jay5oCVwKKyAgY3VybF9tZW1yY2hyLmggaW1hcC5oIHBvcDMuaCBzbXRwLmggcGluZ3BvbmcuaCBydHNwLmggY3VybF90aHJlYWRzLmgJXAorICB3YXJubGVzcy5oIGN1cmxfaG1hYy5oIHBvbGFyc3NsLmggY3VybF9ydG1wLmggY3VybF9nZXRob3N0bmFtZS5oCVwKKyAgZ29waGVyLmggYXh0bHMuaCBjeWFzc2wuaCBodHRwX3Byb3h5Lmggbm9uLWFzY2lpLmggYXN5bi5oIGN1cmxfbnRsbS5oIFwKKyAgY3VybF9nc3NhcGkuaCBjdXJsX250bG1fd2IuaCBjdXJsX250bG1fY29yZS5oIGN1cmxfbnRsbV9tc2dzLmgKKworCisjIE1ha2VmaWxlLmluYyBwcm92aWRlcyB0aGUgQ1NPVVJDRVMgYW5kIEhIRUFERVJTIGRlZmluZXMKK2xpYmN1cmxfbGFfU09VUkNFUyA9ICQoQ1NPVVJDRVMpICQoSEhFQURFUlMpCitsaWJjdXJsdV9sYV9TT1VSQ0VTID0gJChDU09VUkNFUykgJChISEVBREVSUykKK1dJTjMyU09VUkNFUyA9ICQoQ1NPVVJDRVMpCitXSU4zMkhFQURFUlMgPSAkKEhIRUFERVJTKSBjb25maWctd2luMzIuaAorRFNQT1VUID0gfCBhd2sgJ3twcmludGYoIiVzXHJcbiIsICQkMCl9JyA+PiAkKERTUCkKK1ZDUFJPSk9VVCA9IHwgYXdrICd7cHJpbnRmKCIlc1xyXG4iLCAkJDApfScgPj4gJChWQ1BST0opCithbGw6IGN1cmxfY29uZmlnLmgKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW5jICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBsaWIvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIGxpYi9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCitjdXJsX2NvbmZpZy5oOiBzdGFtcC1oMQorCUBpZiB0ZXN0ICEgLWYgJEA7IHRoZW4gXAorCSAgcm0gLWYgc3RhbXAtaDE7IFwKKwkgICQoTUFLRSkgc3RhbXAtaDE7IFwKKwllbHNlIDo7IGZpCisKK3N0YW1wLWgxOiAkKHNyY2RpcikvY3VybF9jb25maWcuaC5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBybSAtZiBzdGFtcC1oMQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgbGliL2N1cmxfY29uZmlnLmgKKyQoc3JjZGlyKS9jdXJsX2NvbmZpZy5oLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAKKwljZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikKKwlybSAtZiBzdGFtcC1oMQorCXRvdWNoICRACisKK2Rpc3RjbGVhbi1oZHI6CisJLXJtIC1mIGN1cmxfY29uZmlnLmggc3RhbXAtaDEKK2xpYmN1cmwudmVyczogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2xpYmN1cmwudmVycy5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACitpbnN0YWxsLWxpYkxUTElCUkFSSUVTOiAkKGxpYl9MVExJQlJBUklFUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGxpYmRpcikiIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKGxpYmRpcikiCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAorCSAgICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCSAgICBlY2hvICIgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKGxpYkxUTElCUkFSSUVTX0lOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAnJCRwJyAnJChERVNURElSKSQobGliZGlyKS8kJGYnIjsgXAorCSAgICAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQobGliTFRMSUJSQVJJRVNfSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICIkJHAiICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lCisKK3VuaW5zdGFsbC1saWJMVExJQlJBUklFUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBzZXQgLXg7IGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgcD0kKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRwJyI7IFwKKwkgICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJHAiOyBcCisJZG9uZQorCitjbGVhbi1saWJMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChsaWJfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKGxpYl9MVExJQlJBUklFUykKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCisKK2NsZWFuLW5vaW5zdExUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKG5vaW5zdF9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xUTElCUkFSSUVTKQorCUBsaXN0PSckKG5vaW5zdF9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmN1cmwubGE6ICQobGliY3VybF9sYV9PQkpFQ1RTKSAkKGxpYmN1cmxfbGFfREVQRU5ERU5DSUVTKSAKKwkkKExJTkspIC1ycGF0aCAkKGxpYmRpcikgJChsaWJjdXJsX2xhX0xERkxBR1MpICQobGliY3VybF9sYV9PQkpFQ1RTKSAkKGxpYmN1cmxfbGFfTElCQUREKSAkKExJQlMpCitsaWJjdXJsdS5sYTogJChsaWJjdXJsdV9sYV9PQkpFQ1RTKSAkKGxpYmN1cmx1X2xhX0RFUEVOREVOQ0lFUykgCisJJChMSU5LKSAkKGFtX2xpYmN1cmx1X2xhX3JwYXRoKSAkKGxpYmN1cmx1X2xhX0xERkxBR1MpICQobGliY3VybHVfbGFfT0JKRUNUUykgJChsaWJjdXJsdV9sYV9MSUJBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FzeW4tYXJlcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FzeW4tdGhyZWFkLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXh0bHMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9iYXNlNjQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jb25uZWN0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY29udGVudF9lbmNvZGluZy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Nvb2tpZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2N1cmxfYWRkcmluZm8uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jdXJsX2ZubWF0Y2guUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jdXJsX2dldGhvc3RuYW1lLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY3VybF9nc3NhcGkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jdXJsX21lbXJjaHIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jdXJsX250bG0uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jdXJsX250bG1fY29yZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2N1cmxfbnRsbV9tc2dzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY3VybF9udGxtX3diLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY3VybF9yYW5kLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY3VybF9ydG1wLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY3VybF9zc3BpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY3VybF90aHJlYWRzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY3lhc3NsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGljdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Vhc3kuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9lc2NhcGUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9maWxlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmlsZWluZm8uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mb3JtZGF0YS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Z0cC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Z0cGxpc3RwYXJzZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nZXRlbnYuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nZXRpbmZvLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ29waGVyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3Rscy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2hhc2guUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9obWFjLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaG9zdGFzeW4uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ob3N0aXAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ob3N0aXA0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaG9zdGlwNi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2hvc3RzeW4uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9odHRwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaHR0cF9jaHVua3MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9odHRwX2RpZ2VzdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2h0dHBfbmVnb3RpYXRlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaHR0cF9uZWdvdGlhdGVfc3NwaS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2h0dHBfcHJveHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pZG5fd2luMzIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pZjJpcC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ltYXAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pbmV0X250b3AuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pbmV0X3B0b24uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9rcmI0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikva3JiNS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xkYXAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1hc3luLWFyZXMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1hc3luLXRocmVhZC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWF4dGxzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtYmFzZTY0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtY29ubmVjdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWNvbnRlbnRfZW5jb2RpbmcuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1jb29raWUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX2FkZHJpbmZvLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtY3VybF9mbm1hdGNoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtY3VybF9nZXRob3N0bmFtZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfZ3NzYXBpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtY3VybF9tZW1yY2hyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtY3VybF9udGxtLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtY3VybF9udGxtX2NvcmUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX250bG1fbXNncy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfbnRsbV93Yi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfcmFuZC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfcnRtcC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfc3NwaS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfdGhyZWFkcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWN5YXNzbC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWRpY3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1lYXN5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtZXNjYXBlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtZmlsZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWZpbGVpbmZvLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtZm9ybWRhdGEuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1mdHAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1mdHBsaXN0cGFyc2VyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtZ2V0ZW52LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtZ2V0aW5mby5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWdvcGhlci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWd0bHMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1oYXNoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtaG1hYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWhvc3Rhc3luLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtaG9zdGlwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtaG9zdGlwNC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWhvc3RpcDYuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1ob3N0c3luLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtaHR0cC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWh0dHBfY2h1bmtzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9kaWdlc3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1odHRwX25lZ290aWF0ZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWh0dHBfbmVnb3RpYXRlX3NzcGkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1odHRwX3Byb3h5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtaWRuX3dpbjMyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtaWYyaXAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1pbWFwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtaW5ldF9udG9wLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtaW5ldF9wdG9uLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEta3JiNC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLWtyYjUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1sZGFwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtbGxpc3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1tZDQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1tZDUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1tZW1kZWJ1Zy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLW1wcmludGYuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1tdWx0aS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLW5ldHJjLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtbm9uLWFzY2lpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtbm9uYmxvY2suUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1uc3MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1vcGVubGRhcC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXBhcnNlZGF0ZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXBpbmdwb25nLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtcG9sYXJzc2wuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1wb3AzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtcHJvZ3Jlc3MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1xc3NsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtcmF3c3RyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtcnRzcC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXNlY3VyaXR5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtc2VsZWN0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtc2VuZGYuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1zaGFyZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXNsaXN0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtc210cC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXNvY2tzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtc29ja3NfZ3NzYXBpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtc29ja3Nfc3NwaS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXNwZWVkY2hlY2suUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1zcGxheS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXNzaC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXNzbGdlbi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXNzbHVzZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXN0cmR1cC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXN0cmVxdWFsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtc3RyZXJyb3IuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1zdHJ0b2suUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS1zdHJ0b29mZnQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS10ZWxuZXQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjdXJsdV9sYS10ZnRwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtdGltZXZhbC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXRyYW5zZmVyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtdXJsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtdmVyc2lvbi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmN1cmx1X2xhLXdhcm5sZXNzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY3VybHVfbGEtd2lsZGNhcmQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sbGlzdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21kNC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21kNS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21lbWRlYnVnLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXByaW50Zi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL211bHRpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbmV0cmMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ub24tYXNjaWkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ub25ibG9jay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL25zcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wZW5sZGFwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGFyc2VkYXRlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGluZ3BvbmcuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wb2xhcnNzbC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BvcDMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wcm9ncmVzcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Fzc2wuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yYXdzdHIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ydHNwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2VjdXJpdHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zZWxlY3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zZW5kZi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NoYXJlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2xpc3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zbXRwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc29ja3MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zb2Nrc19nc3NhcGkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zb2Nrc19zc3BpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3BlZWRjaGVjay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NwbGF5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3NoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3NsZ2VuLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3NsdXNlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RyZHVwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RyZXF1YWwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJlcnJvci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cnRvay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cnRvb2ZmdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3RlbG5ldC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3RmdHAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90aW1ldmFsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdHJhbnNmZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS91cmwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS92ZXJzaW9uLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvd2Fybmxlc3MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93aWxkY2FyZC5QbG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbGliY3VybHVfbGEtZmlsZS5sbzogZmlsZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1maWxlLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtZmlsZS5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWZpbGUubG8gYHRlc3QgLWYgJ2ZpbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlsZS5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZmlsZS5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtZmlsZS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZmlsZS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdmaWxlLmMnIG9iamVjdD0nbGliY3VybHVfbGEtZmlsZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtZmlsZS5sbyBgdGVzdCAtZiAnZmlsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmaWxlLmMKKworbGliY3VybHVfbGEtdGltZXZhbC5sbzogdGltZXZhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS10aW1ldmFsLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtdGltZXZhbC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLXRpbWV2YWwubG8gYHRlc3QgLWYgJ3RpbWV2YWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGltZXZhbC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtdGltZXZhbC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtdGltZXZhbC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtdGltZXZhbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd0aW1ldmFsLmMnIG9iamVjdD0nbGliY3VybHVfbGEtdGltZXZhbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtdGltZXZhbC5sbyBgdGVzdCAtZiAndGltZXZhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aW1ldmFsLmMKKworbGliY3VybHVfbGEtYmFzZTY0LmxvOiBiYXNlNjQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtYmFzZTY0LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtYmFzZTY0LlRwbyIgLWMgLW8gbGliY3VybHVfbGEtYmFzZTY0LmxvIGB0ZXN0IC1mICdiYXNlNjQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYmFzZTY0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1iYXNlNjQuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWJhc2U2NC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtYmFzZTY0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2Jhc2U2NC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWJhc2U2NC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtYmFzZTY0LmxvIGB0ZXN0IC1mICdiYXNlNjQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYmFzZTY0LmMKKworbGliY3VybHVfbGEtaG9zdGlwLmxvOiBob3N0aXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtaG9zdGlwLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdGlwLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtaG9zdGlwLmxvIGB0ZXN0IC1mICdob3N0aXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaG9zdGlwLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1ob3N0aXAuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWhvc3RpcC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdGlwLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2hvc3RpcC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWhvc3RpcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaG9zdGlwLmxvIGB0ZXN0IC1mICdob3N0aXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaG9zdGlwLmMKKworbGliY3VybHVfbGEtcHJvZ3Jlc3MubG86IHByb2dyZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXByb2dyZXNzLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtcHJvZ3Jlc3MuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1wcm9ncmVzcy5sbyBgdGVzdCAtZiAncHJvZ3Jlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHJvZ3Jlc3MuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXByb2dyZXNzLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1wcm9ncmVzcy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtcHJvZ3Jlc3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncHJvZ3Jlc3MuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1wcm9ncmVzcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtcHJvZ3Jlc3MubG8gYHRlc3QgLWYgJ3Byb2dyZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHByb2dyZXNzLmMKKworbGliY3VybHVfbGEtZm9ybWRhdGEubG86IGZvcm1kYXRhLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWZvcm1kYXRhLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtZm9ybWRhdGEuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1mb3JtZGF0YS5sbyBgdGVzdCAtZiAnZm9ybWRhdGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZm9ybWRhdGEuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWZvcm1kYXRhLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1mb3JtZGF0YS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZm9ybWRhdGEuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZm9ybWRhdGEuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1mb3JtZGF0YS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtZm9ybWRhdGEubG8gYHRlc3QgLWYgJ2Zvcm1kYXRhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZvcm1kYXRhLmMKKworbGliY3VybHVfbGEtY29va2llLmxvOiBjb29raWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtY29va2llLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY29va2llLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtY29va2llLmxvIGB0ZXN0IC1mICdjb29raWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29va2llLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jb29raWUuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWNvb2tpZS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY29va2llLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2Nvb2tpZS5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWNvb2tpZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY29va2llLmxvIGB0ZXN0IC1mICdjb29raWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29va2llLmMKKworbGliY3VybHVfbGEtaHR0cC5sbzogaHR0cC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1odHRwLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWh0dHAubG8gYHRlc3QgLWYgJ2h0dHAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaHR0cC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdodHRwLmMnIG9iamVjdD0nbGliY3VybHVfbGEtaHR0cC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaHR0cC5sbyBgdGVzdCAtZiAnaHR0cC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BodHRwLmMKKworbGliY3VybHVfbGEtc2VuZGYubG86IHNlbmRmLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXNlbmRmLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc2VuZGYuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1zZW5kZi5sbyBgdGVzdCAtZiAnc2VuZGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2VuZGYuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXNlbmRmLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zZW5kZi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc2VuZGYuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc2VuZGYuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1zZW5kZi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc2VuZGYubG8gYHRlc3QgLWYgJ3NlbmRmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNlbmRmLmMKKworbGliY3VybHVfbGEtZnRwLmxvOiBmdHAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtZnRwLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtZnRwLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtZnRwLmxvIGB0ZXN0IC1mICdmdHAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZnRwLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1mdHAuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWZ0cC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZnRwLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2Z0cC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWZ0cC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtZnRwLmxvIGB0ZXN0IC1mICdmdHAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZnRwLmMKKworbGliY3VybHVfbGEtdXJsLmxvOiB1cmwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtdXJsLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtdXJsLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtdXJsLmxvIGB0ZXN0IC1mICd1cmwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdXJsLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS11cmwuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXVybC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtdXJsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3VybC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLXVybC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtdXJsLmxvIGB0ZXN0IC1mICd1cmwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdXJsLmMKKworbGliY3VybHVfbGEtZGljdC5sbzogZGljdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1kaWN0LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtZGljdC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWRpY3QubG8gYHRlc3QgLWYgJ2RpY3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGljdC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZGljdC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtZGljdC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZGljdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdkaWN0LmMnIG9iamVjdD0nbGliY3VybHVfbGEtZGljdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtZGljdC5sbyBgdGVzdCAtZiAnZGljdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkaWN0LmMKKworbGliY3VybHVfbGEtaWYyaXAubG86IGlmMmlwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWlmMmlwLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaWYyaXAuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1pZjJpcC5sbyBgdGVzdCAtZiAnaWYyaXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaWYyaXAuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWlmMmlwLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1pZjJpcC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaWYyaXAuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0naWYyaXAuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1pZjJpcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaWYyaXAubG8gYHRlc3QgLWYgJ2lmMmlwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGlmMmlwLmMKKworbGliY3VybHVfbGEtc3BlZWRjaGVjay5sbzogc3BlZWRjaGVjay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1zcGVlZGNoZWNrLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc3BlZWRjaGVjay5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLXNwZWVkY2hlY2subG8gYHRlc3QgLWYgJ3NwZWVkY2hlY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3BlZWRjaGVjay5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc3BlZWRjaGVjay5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtc3BlZWRjaGVjay5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc3BlZWRjaGVjay5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdzcGVlZGNoZWNrLmMnIG9iamVjdD0nbGliY3VybHVfbGEtc3BlZWRjaGVjay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc3BlZWRjaGVjay5sbyBgdGVzdCAtZiAnc3BlZWRjaGVjay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcGVlZGNoZWNrLmMKKworbGliY3VybHVfbGEtbGRhcC5sbzogbGRhcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1sZGFwLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtbGRhcC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWxkYXAubG8gYHRlc3QgLWYgJ2xkYXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGRhcC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbGRhcC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtbGRhcC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbGRhcC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsZGFwLmMnIG9iamVjdD0nbGliY3VybHVfbGEtbGRhcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtbGRhcC5sbyBgdGVzdCAtZiAnbGRhcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsZGFwLmMKKworbGliY3VybHVfbGEtc3NsdXNlLmxvOiBzc2x1c2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtc3NsdXNlLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc3NsdXNlLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtc3NsdXNlLmxvIGB0ZXN0IC1mICdzc2x1c2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3NsdXNlLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zc2x1c2UuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXNzbHVzZS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc3NsdXNlLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3NzbHVzZS5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLXNzbHVzZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc3NsdXNlLmxvIGB0ZXN0IC1mICdzc2x1c2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3NsdXNlLmMKKworbGliY3VybHVfbGEtdmVyc2lvbi5sbzogdmVyc2lvbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS12ZXJzaW9uLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtdmVyc2lvbi5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLXZlcnNpb24ubG8gYHRlc3QgLWYgJ3ZlcnNpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgdmVyc2lvbi5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtdmVyc2lvbi5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtdmVyc2lvbi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtdmVyc2lvbi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd2ZXJzaW9uLmMnIG9iamVjdD0nbGliY3VybHVfbGEtdmVyc2lvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtdmVyc2lvbi5sbyBgdGVzdCAtZiAndmVyc2lvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B2ZXJzaW9uLmMKKworbGliY3VybHVfbGEtZ2V0ZW52LmxvOiBnZXRlbnYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtZ2V0ZW52LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtZ2V0ZW52LlRwbyIgLWMgLW8gbGliY3VybHVfbGEtZ2V0ZW52LmxvIGB0ZXN0IC1mICdnZXRlbnYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2V0ZW52LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1nZXRlbnYuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWdldGVudi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZ2V0ZW52LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dldGVudi5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWdldGVudi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtZ2V0ZW52LmxvIGB0ZXN0IC1mICdnZXRlbnYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2V0ZW52LmMKKworbGliY3VybHVfbGEtZXNjYXBlLmxvOiBlc2NhcGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtZXNjYXBlLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtZXNjYXBlLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtZXNjYXBlLmxvIGB0ZXN0IC1mICdlc2NhcGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZXNjYXBlLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1lc2NhcGUuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWVzY2FwZS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZXNjYXBlLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2VzY2FwZS5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWVzY2FwZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtZXNjYXBlLmxvIGB0ZXN0IC1mICdlc2NhcGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZXNjYXBlLmMKKworbGliY3VybHVfbGEtbXByaW50Zi5sbzogbXByaW50Zi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1tcHJpbnRmLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtbXByaW50Zi5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLW1wcmludGYubG8gYHRlc3QgLWYgJ21wcmludGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbXByaW50Zi5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbXByaW50Zi5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtbXByaW50Zi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbXByaW50Zi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdtcHJpbnRmLmMnIG9iamVjdD0nbGliY3VybHVfbGEtbXByaW50Zi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtbXByaW50Zi5sbyBgdGVzdCAtZiAnbXByaW50Zi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtcHJpbnRmLmMKKworbGliY3VybHVfbGEtdGVsbmV0LmxvOiB0ZWxuZXQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtdGVsbmV0LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtdGVsbmV0LlRwbyIgLWMgLW8gbGliY3VybHVfbGEtdGVsbmV0LmxvIGB0ZXN0IC1mICd0ZWxuZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVsbmV0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS10ZWxuZXQuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXRlbG5ldC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtdGVsbmV0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3RlbG5ldC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLXRlbG5ldC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtdGVsbmV0LmxvIGB0ZXN0IC1mICd0ZWxuZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVsbmV0LmMKKworbGliY3VybHVfbGEtbmV0cmMubG86IG5ldHJjLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLW5ldHJjLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtbmV0cmMuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1uZXRyYy5sbyBgdGVzdCAtZiAnbmV0cmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbmV0cmMuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLW5ldHJjLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1uZXRyYy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbmV0cmMuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbmV0cmMuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1uZXRyYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtbmV0cmMubG8gYHRlc3QgLWYgJ25ldHJjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG5ldHJjLmMKKworbGliY3VybHVfbGEtZ2V0aW5mby5sbzogZ2V0aW5mby5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1nZXRpbmZvLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtZ2V0aW5mby5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWdldGluZm8ubG8gYHRlc3QgLWYgJ2dldGluZm8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2V0aW5mby5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZ2V0aW5mby5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtZ2V0aW5mby5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZ2V0aW5mby5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnZXRpbmZvLmMnIG9iamVjdD0nbGliY3VybHVfbGEtZ2V0aW5mby5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtZ2V0aW5mby5sbyBgdGVzdCAtZiAnZ2V0aW5mby5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZXRpbmZvLmMKKworbGliY3VybHVfbGEtdHJhbnNmZXIubG86IHRyYW5zZmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXRyYW5zZmVyLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtdHJhbnNmZXIuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS10cmFuc2Zlci5sbyBgdGVzdCAtZiAndHJhbnNmZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdHJhbnNmZXIuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXRyYW5zZmVyLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS10cmFuc2Zlci5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtdHJhbnNmZXIuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ndHJhbnNmZXIuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS10cmFuc2Zlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtdHJhbnNmZXIubG8gYHRlc3QgLWYgJ3RyYW5zZmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRyYW5zZmVyLmMKKworbGliY3VybHVfbGEtc3RyZXF1YWwubG86IHN0cmVxdWFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXN0cmVxdWFsLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc3RyZXF1YWwuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1zdHJlcXVhbC5sbyBgdGVzdCAtZiAnc3RyZXF1YWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RyZXF1YWwuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXN0cmVxdWFsLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zdHJlcXVhbC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc3RyZXF1YWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc3RyZXF1YWwuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1zdHJlcXVhbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc3RyZXF1YWwubG8gYHRlc3QgLWYgJ3N0cmVxdWFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHN0cmVxdWFsLmMKKworbGliY3VybHVfbGEtZWFzeS5sbzogZWFzeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1lYXN5LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtZWFzeS5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWVhc3kubG8gYHRlc3QgLWYgJ2Vhc3kuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWFzeS5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZWFzeS5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtZWFzeS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZWFzeS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlYXN5LmMnIG9iamVjdD0nbGliY3VybHVfbGEtZWFzeS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtZWFzeS5sbyBgdGVzdCAtZiAnZWFzeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlYXN5LmMKKworbGliY3VybHVfbGEtc2VjdXJpdHkubG86IHNlY3VyaXR5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXNlY3VyaXR5LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc2VjdXJpdHkuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1zZWN1cml0eS5sbyBgdGVzdCAtZiAnc2VjdXJpdHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2VjdXJpdHkuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXNlY3VyaXR5LlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zZWN1cml0eS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc2VjdXJpdHkuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc2VjdXJpdHkuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1zZWN1cml0eS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc2VjdXJpdHkubG8gYHRlc3QgLWYgJ3NlY3VyaXR5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNlY3VyaXR5LmMKKworbGliY3VybHVfbGEta3JiNC5sbzoga3JiNC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1rcmI0LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEta3JiNC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWtyYjQubG8gYHRlc3QgLWYgJ2tyYjQuYycgfHwgZWNobyAnJChzcmNkaXIpLydga3JiNC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEta3JiNC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEta3JiNC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEta3JiNC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdrcmI0LmMnIG9iamVjdD0nbGliY3VybHVfbGEta3JiNC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEta3JiNC5sbyBgdGVzdCAtZiAna3JiNC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BrcmI0LmMKKworbGliY3VybHVfbGEtY3VybF9mbm1hdGNoLmxvOiBjdXJsX2ZubWF0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtY3VybF9mbm1hdGNoLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9mbm1hdGNoLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtY3VybF9mbm1hdGNoLmxvIGB0ZXN0IC1mICdjdXJsX2ZubWF0Y2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9mbm1hdGNoLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX2ZubWF0Y2guVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfZm5tYXRjaC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9mbm1hdGNoLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2N1cmxfZm5tYXRjaC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWN1cmxfZm5tYXRjaC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF9mbm1hdGNoLmxvIGB0ZXN0IC1mICdjdXJsX2ZubWF0Y2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9mbm1hdGNoLmMKKworbGliY3VybHVfbGEtZmlsZWluZm8ubG86IGZpbGVpbmZvLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWZpbGVpbmZvLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtZmlsZWluZm8uVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1maWxlaW5mby5sbyBgdGVzdCAtZiAnZmlsZWluZm8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlsZWluZm8uYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWZpbGVpbmZvLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1maWxlaW5mby5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZmlsZWluZm8uVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZmlsZWluZm8uYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1maWxlaW5mby5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtZmlsZWluZm8ubG8gYHRlc3QgLWYgJ2ZpbGVpbmZvLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZpbGVpbmZvLmMKKworbGliY3VybHVfbGEtZnRwbGlzdHBhcnNlci5sbzogZnRwbGlzdHBhcnNlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1mdHBsaXN0cGFyc2VyLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtZnRwbGlzdHBhcnNlci5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWZ0cGxpc3RwYXJzZXIubG8gYHRlc3QgLWYgJ2Z0cGxpc3RwYXJzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZnRwbGlzdHBhcnNlci5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZnRwbGlzdHBhcnNlci5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtZnRwbGlzdHBhcnNlci5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZnRwbGlzdHBhcnNlci5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdmdHBsaXN0cGFyc2VyLmMnIG9iamVjdD0nbGliY3VybHVfbGEtZnRwbGlzdHBhcnNlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtZnRwbGlzdHBhcnNlci5sbyBgdGVzdCAtZiAnZnRwbGlzdHBhcnNlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmdHBsaXN0cGFyc2VyLmMKKworbGliY3VybHVfbGEtd2lsZGNhcmQubG86IHdpbGRjYXJkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXdpbGRjYXJkLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtd2lsZGNhcmQuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS13aWxkY2FyZC5sbyBgdGVzdCAtZiAnd2lsZGNhcmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgd2lsZGNhcmQuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXdpbGRjYXJkLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS13aWxkY2FyZC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtd2lsZGNhcmQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nd2lsZGNhcmQuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS13aWxkY2FyZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtd2lsZGNhcmQubG8gYHRlc3QgLWYgJ3dpbGRjYXJkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHdpbGRjYXJkLmMKKworbGliY3VybHVfbGEta3JiNS5sbzoga3JiNS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1rcmI1LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEta3JiNS5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWtyYjUubG8gYHRlc3QgLWYgJ2tyYjUuYycgfHwgZWNobyAnJChzcmNkaXIpLydga3JiNS5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEta3JiNS5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEta3JiNS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEta3JiNS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdrcmI1LmMnIG9iamVjdD0nbGliY3VybHVfbGEta3JiNS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEta3JiNS5sbyBgdGVzdCAtZiAna3JiNS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BrcmI1LmMKKworbGliY3VybHVfbGEtbWVtZGVidWcubG86IG1lbWRlYnVnLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLW1lbWRlYnVnLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtbWVtZGVidWcuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1tZW1kZWJ1Zy5sbyBgdGVzdCAtZiAnbWVtZGVidWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWVtZGVidWcuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLW1lbWRlYnVnLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1tZW1kZWJ1Zy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbWVtZGVidWcuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbWVtZGVidWcuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1tZW1kZWJ1Zy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtbWVtZGVidWcubG8gYHRlc3QgLWYgJ21lbWRlYnVnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1lbWRlYnVnLmMKKworbGliY3VybHVfbGEtaHR0cF9jaHVua3MubG86IGh0dHBfY2h1bmtzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWh0dHBfY2h1bmtzLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9jaHVua3MuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1odHRwX2NodW5rcy5sbyBgdGVzdCAtZiAnaHR0cF9jaHVua3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaHR0cF9jaHVua3MuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWh0dHBfY2h1bmtzLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1odHRwX2NodW5rcy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9jaHVua3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0naHR0cF9jaHVua3MuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1odHRwX2NodW5rcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaHR0cF9jaHVua3MubG8gYHRlc3QgLWYgJ2h0dHBfY2h1bmtzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGh0dHBfY2h1bmtzLmMKKworbGliY3VybHVfbGEtc3RydG9rLmxvOiBzdHJ0b2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtc3RydG9rLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc3RydG9rLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtc3RydG9rLmxvIGB0ZXN0IC1mICdzdHJ0b2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RydG9rLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zdHJ0b2suVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXN0cnRvay5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc3RydG9rLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3N0cnRvay5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLXN0cnRvay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc3RydG9rLmxvIGB0ZXN0IC1mICdzdHJ0b2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RydG9rLmMKKworbGliY3VybHVfbGEtY29ubmVjdC5sbzogY29ubmVjdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1jb25uZWN0LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY29ubmVjdC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWNvbm5lY3QubG8gYHRlc3QgLWYgJ2Nvbm5lY3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29ubmVjdC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY29ubmVjdC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtY29ubmVjdC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY29ubmVjdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdjb25uZWN0LmMnIG9iamVjdD0nbGliY3VybHVfbGEtY29ubmVjdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY29ubmVjdC5sbyBgdGVzdCAtZiAnY29ubmVjdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb25uZWN0LmMKKworbGliY3VybHVfbGEtbGxpc3QubG86IGxsaXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWxsaXN0LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtbGxpc3QuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1sbGlzdC5sbyBgdGVzdCAtZiAnbGxpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGxpc3QuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWxsaXN0LlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1sbGlzdC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbGxpc3QuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGxpc3QuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1sbGlzdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtbGxpc3QubG8gYHRlc3QgLWYgJ2xsaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxsaXN0LmMKKworbGliY3VybHVfbGEtaGFzaC5sbzogaGFzaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1oYXNoLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaGFzaC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWhhc2gubG8gYHRlc3QgLWYgJ2hhc2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgaGFzaC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaGFzaC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtaGFzaC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaGFzaC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdoYXNoLmMnIG9iamVjdD0nbGliY3VybHVfbGEtaGFzaC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaGFzaC5sbyBgdGVzdCAtZiAnaGFzaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BoYXNoLmMKKworbGliY3VybHVfbGEtbXVsdGkubG86IG11bHRpLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLW11bHRpLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtbXVsdGkuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1tdWx0aS5sbyBgdGVzdCAtZiAnbXVsdGkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbXVsdGkuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLW11bHRpLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1tdWx0aS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbXVsdGkuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbXVsdGkuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1tdWx0aS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtbXVsdGkubG8gYHRlc3QgLWYgJ211bHRpLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG11bHRpLmMKKworbGliY3VybHVfbGEtY29udGVudF9lbmNvZGluZy5sbzogY29udGVudF9lbmNvZGluZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1jb250ZW50X2VuY29kaW5nLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY29udGVudF9lbmNvZGluZy5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWNvbnRlbnRfZW5jb2RpbmcubG8gYHRlc3QgLWYgJ2NvbnRlbnRfZW5jb2RpbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29udGVudF9lbmNvZGluZy5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY29udGVudF9lbmNvZGluZy5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtY29udGVudF9lbmNvZGluZy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY29udGVudF9lbmNvZGluZy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdjb250ZW50X2VuY29kaW5nLmMnIG9iamVjdD0nbGliY3VybHVfbGEtY29udGVudF9lbmNvZGluZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY29udGVudF9lbmNvZGluZy5sbyBgdGVzdCAtZiAnY29udGVudF9lbmNvZGluZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb250ZW50X2VuY29kaW5nLmMKKworbGliY3VybHVfbGEtc2hhcmUubG86IHNoYXJlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXNoYXJlLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc2hhcmUuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1zaGFyZS5sbyBgdGVzdCAtZiAnc2hhcmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2hhcmUuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXNoYXJlLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zaGFyZS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc2hhcmUuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc2hhcmUuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1zaGFyZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc2hhcmUubG8gYHRlc3QgLWYgJ3NoYXJlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNoYXJlLmMKKworbGliY3VybHVfbGEtaHR0cF9kaWdlc3QubG86IGh0dHBfZGlnZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWh0dHBfZGlnZXN0LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9kaWdlc3QuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1odHRwX2RpZ2VzdC5sbyBgdGVzdCAtZiAnaHR0cF9kaWdlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaHR0cF9kaWdlc3QuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWh0dHBfZGlnZXN0LlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1odHRwX2RpZ2VzdC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9kaWdlc3QuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0naHR0cF9kaWdlc3QuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1odHRwX2RpZ2VzdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaHR0cF9kaWdlc3QubG8gYHRlc3QgLWYgJ2h0dHBfZGlnZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGh0dHBfZGlnZXN0LmMKKworbGliY3VybHVfbGEtbWQ0LmxvOiBtZDQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtbWQ0LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtbWQ0LlRwbyIgLWMgLW8gbGliY3VybHVfbGEtbWQ0LmxvIGB0ZXN0IC1mICdtZDQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWQ0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1tZDQuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLW1kNC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbWQ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J21kNC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLW1kNC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtbWQ0LmxvIGB0ZXN0IC1mICdtZDQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWQ0LmMKKworbGliY3VybHVfbGEtbWQ1LmxvOiBtZDUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtbWQ1LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtbWQ1LlRwbyIgLWMgLW8gbGliY3VybHVfbGEtbWQ1LmxvIGB0ZXN0IC1mICdtZDUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWQ1LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1tZDUuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLW1kNS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbWQ1LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J21kNS5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLW1kNS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtbWQ1LmxvIGB0ZXN0IC1mICdtZDUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWQ1LmMKKworbGliY3VybHVfbGEtY3VybF9yYW5kLmxvOiBjdXJsX3JhbmQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtY3VybF9yYW5kLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9yYW5kLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtY3VybF9yYW5kLmxvIGB0ZXN0IC1mICdjdXJsX3JhbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9yYW5kLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX3JhbmQuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfcmFuZC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9yYW5kLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2N1cmxfcmFuZC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWN1cmxfcmFuZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF9yYW5kLmxvIGB0ZXN0IC1mICdjdXJsX3JhbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9yYW5kLmMKKworbGliY3VybHVfbGEtaHR0cF9uZWdvdGlhdGUubG86IGh0dHBfbmVnb3RpYXRlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWh0dHBfbmVnb3RpYXRlLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9uZWdvdGlhdGUuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1odHRwX25lZ290aWF0ZS5sbyBgdGVzdCAtZiAnaHR0cF9uZWdvdGlhdGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaHR0cF9uZWdvdGlhdGUuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWh0dHBfbmVnb3RpYXRlLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1odHRwX25lZ290aWF0ZS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9uZWdvdGlhdGUuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0naHR0cF9uZWdvdGlhdGUuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1odHRwX25lZ290aWF0ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaHR0cF9uZWdvdGlhdGUubG8gYHRlc3QgLWYgJ2h0dHBfbmVnb3RpYXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGh0dHBfbmVnb3RpYXRlLmMKKworbGliY3VybHVfbGEtaW5ldF9wdG9uLmxvOiBpbmV0X3B0b24uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtaW5ldF9wdG9uLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaW5ldF9wdG9uLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtaW5ldF9wdG9uLmxvIGB0ZXN0IC1mICdpbmV0X3B0b24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgaW5ldF9wdG9uLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1pbmV0X3B0b24uVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWluZXRfcHRvbi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaW5ldF9wdG9uLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2luZXRfcHRvbi5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWluZXRfcHRvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaW5ldF9wdG9uLmxvIGB0ZXN0IC1mICdpbmV0X3B0b24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgaW5ldF9wdG9uLmMKKworbGliY3VybHVfbGEtc3RydG9vZmZ0LmxvOiBzdHJ0b29mZnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtc3RydG9vZmZ0LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc3RydG9vZmZ0LlRwbyIgLWMgLW8gbGliY3VybHVfbGEtc3RydG9vZmZ0LmxvIGB0ZXN0IC1mICdzdHJ0b29mZnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RydG9vZmZ0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zdHJ0b29mZnQuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXN0cnRvb2ZmdC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc3RydG9vZmZ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3N0cnRvb2ZmdC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLXN0cnRvb2ZmdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc3RydG9vZmZ0LmxvIGB0ZXN0IC1mICdzdHJ0b29mZnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RydG9vZmZ0LmMKKworbGliY3VybHVfbGEtc3RyZXJyb3IubG86IHN0cmVycm9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXN0cmVycm9yLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc3RyZXJyb3IuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1zdHJlcnJvci5sbyBgdGVzdCAtZiAnc3RyZXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RyZXJyb3IuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXN0cmVycm9yLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zdHJlcnJvci5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc3RyZXJyb3IuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc3RyZXJyb3IuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1zdHJlcnJvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc3RyZXJyb3IubG8gYHRlc3QgLWYgJ3N0cmVycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHN0cmVycm9yLmMKKworbGliY3VybHVfbGEtaG9zdGFzeW4ubG86IGhvc3Rhc3luLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWhvc3Rhc3luLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdGFzeW4uVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1ob3N0YXN5bi5sbyBgdGVzdCAtZiAnaG9zdGFzeW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgaG9zdGFzeW4uYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWhvc3Rhc3luLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1ob3N0YXN5bi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdGFzeW4uVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0naG9zdGFzeW4uYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1ob3N0YXN5bi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaG9zdGFzeW4ubG8gYHRlc3QgLWYgJ2hvc3Rhc3luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGhvc3Rhc3luLmMKKworbGliY3VybHVfbGEtaG9zdGlwNC5sbzogaG9zdGlwNC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1ob3N0aXA0LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdGlwNC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWhvc3RpcDQubG8gYHRlc3QgLWYgJ2hvc3RpcDQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaG9zdGlwNC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdGlwNC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdGlwNC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdGlwNC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdob3N0aXA0LmMnIG9iamVjdD0nbGliY3VybHVfbGEtaG9zdGlwNC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaG9zdGlwNC5sbyBgdGVzdCAtZiAnaG9zdGlwNC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bob3N0aXA0LmMKKworbGliY3VybHVfbGEtaG9zdGlwNi5sbzogaG9zdGlwNi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1ob3N0aXA2LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdGlwNi5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWhvc3RpcDYubG8gYHRlc3QgLWYgJ2hvc3RpcDYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaG9zdGlwNi5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdGlwNi5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdGlwNi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdGlwNi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdob3N0aXA2LmMnIG9iamVjdD0nbGliY3VybHVfbGEtaG9zdGlwNi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaG9zdGlwNi5sbyBgdGVzdCAtZiAnaG9zdGlwNi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bob3N0aXA2LmMKKworbGliY3VybHVfbGEtaG9zdHN5bi5sbzogaG9zdHN5bi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1ob3N0c3luLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdHN5bi5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWhvc3RzeW4ubG8gYHRlc3QgLWYgJ2hvc3RzeW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgaG9zdHN5bi5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdHN5bi5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdHN5bi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaG9zdHN5bi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdob3N0c3luLmMnIG9iamVjdD0nbGliY3VybHVfbGEtaG9zdHN5bi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaG9zdHN5bi5sbyBgdGVzdCAtZiAnaG9zdHN5bi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bob3N0c3luLmMKKworbGliY3VybHVfbGEtaW5ldF9udG9wLmxvOiBpbmV0X250b3AuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtaW5ldF9udG9wLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaW5ldF9udG9wLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtaW5ldF9udG9wLmxvIGB0ZXN0IC1mICdpbmV0X250b3AuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaW5ldF9udG9wLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1pbmV0X250b3AuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWluZXRfbnRvcC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaW5ldF9udG9wLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2luZXRfbnRvcC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWluZXRfbnRvcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaW5ldF9udG9wLmxvIGB0ZXN0IC1mICdpbmV0X250b3AuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaW5ldF9udG9wLmMKKworbGliY3VybHVfbGEtcGFyc2VkYXRlLmxvOiBwYXJzZWRhdGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtcGFyc2VkYXRlLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtcGFyc2VkYXRlLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtcGFyc2VkYXRlLmxvIGB0ZXN0IC1mICdwYXJzZWRhdGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGFyc2VkYXRlLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1wYXJzZWRhdGUuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXBhcnNlZGF0ZS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtcGFyc2VkYXRlLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3BhcnNlZGF0ZS5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLXBhcnNlZGF0ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtcGFyc2VkYXRlLmxvIGB0ZXN0IC1mICdwYXJzZWRhdGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGFyc2VkYXRlLmMKKworbGliY3VybHVfbGEtc2VsZWN0LmxvOiBzZWxlY3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtc2VsZWN0LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc2VsZWN0LlRwbyIgLWMgLW8gbGliY3VybHVfbGEtc2VsZWN0LmxvIGB0ZXN0IC1mICdzZWxlY3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2VsZWN0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zZWxlY3QuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXNlbGVjdC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc2VsZWN0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3NlbGVjdC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLXNlbGVjdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc2VsZWN0LmxvIGB0ZXN0IC1mICdzZWxlY3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2VsZWN0LmMKKworbGliY3VybHVfbGEtZ3Rscy5sbzogZ3Rscy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1ndGxzLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtZ3Rscy5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWd0bHMubG8gYHRlc3QgLWYgJ2d0bHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3Rscy5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZ3Rscy5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtZ3Rscy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZ3Rscy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdndGxzLmMnIG9iamVjdD0nbGliY3VybHVfbGEtZ3Rscy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtZ3Rscy5sbyBgdGVzdCAtZiAnZ3Rscy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BndGxzLmMKKworbGliY3VybHVfbGEtc3NsZ2VuLmxvOiBzc2xnZW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtc3NsZ2VuLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc3NsZ2VuLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtc3NsZ2VuLmxvIGB0ZXN0IC1mICdzc2xnZW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3NsZ2VuLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zc2xnZW4uVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXNzbGdlbi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc3NsZ2VuLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3NzbGdlbi5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLXNzbGdlbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc3NsZ2VuLmxvIGB0ZXN0IC1mICdzc2xnZW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3NsZ2VuLmMKKworbGliY3VybHVfbGEtdGZ0cC5sbzogdGZ0cC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS10ZnRwLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtdGZ0cC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLXRmdHAubG8gYHRlc3QgLWYgJ3RmdHAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGZ0cC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtdGZ0cC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtdGZ0cC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtdGZ0cC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd0ZnRwLmMnIG9iamVjdD0nbGliY3VybHVfbGEtdGZ0cC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtdGZ0cC5sbyBgdGVzdCAtZiAndGZ0cC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZnRwLmMKKworbGliY3VybHVfbGEtc3BsYXkubG86IHNwbGF5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXNwbGF5LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc3BsYXkuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1zcGxheS5sbyBgdGVzdCAtZiAnc3BsYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3BsYXkuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXNwbGF5LlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zcGxheS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc3BsYXkuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc3BsYXkuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1zcGxheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc3BsYXkubG8gYHRlc3QgLWYgJ3NwbGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNwbGF5LmMKKworbGliY3VybHVfbGEtc3RyZHVwLmxvOiBzdHJkdXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtc3RyZHVwLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc3RyZHVwLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtc3RyZHVwLmxvIGB0ZXN0IC1mICdzdHJkdXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RyZHVwLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zdHJkdXAuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXN0cmR1cC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc3RyZHVwLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3N0cmR1cC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLXN0cmR1cC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc3RyZHVwLmxvIGB0ZXN0IC1mICdzdHJkdXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RyZHVwLmMKKworbGliY3VybHVfbGEtc29ja3MubG86IHNvY2tzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXNvY2tzLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc29ja3MuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1zb2Nrcy5sbyBgdGVzdCAtZiAnc29ja3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc29ja3MuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXNvY2tzLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zb2Nrcy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc29ja3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc29ja3MuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1zb2Nrcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc29ja3MubG8gYHRlc3QgLWYgJ3NvY2tzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNvY2tzLmMKKworbGliY3VybHVfbGEtc3NoLmxvOiBzc2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtc3NoLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc3NoLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtc3NoLmxvIGB0ZXN0IC1mICdzc2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3NoLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zc2guVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXNzaC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc3NoLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3NzaC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLXNzaC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc3NoLmxvIGB0ZXN0IC1mICdzc2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3NoLmMKKworbGliY3VybHVfbGEtbnNzLmxvOiBuc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtbnNzLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtbnNzLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtbnNzLmxvIGB0ZXN0IC1mICduc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbnNzLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1uc3MuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLW5zcy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbnNzLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J25zcy5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLW5zcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtbnNzLmxvIGB0ZXN0IC1mICduc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbnNzLmMKKworbGliY3VybHVfbGEtcXNzbC5sbzogcXNzbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1xc3NsLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtcXNzbC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLXFzc2wubG8gYHRlc3QgLWYgJ3Fzc2wuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcXNzbC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtcXNzbC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtcXNzbC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtcXNzbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdxc3NsLmMnIG9iamVjdD0nbGliY3VybHVfbGEtcXNzbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtcXNzbC5sbyBgdGVzdCAtZiAncXNzbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bxc3NsLmMKKworbGliY3VybHVfbGEtcmF3c3RyLmxvOiByYXdzdHIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtcmF3c3RyLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtcmF3c3RyLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtcmF3c3RyLmxvIGB0ZXN0IC1mICdyYXdzdHIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcmF3c3RyLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1yYXdzdHIuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXJhd3N0ci5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtcmF3c3RyLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3Jhd3N0ci5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLXJhd3N0ci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtcmF3c3RyLmxvIGB0ZXN0IC1mICdyYXdzdHIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcmF3c3RyLmMKKworbGliY3VybHVfbGEtY3VybF9hZGRyaW5mby5sbzogY3VybF9hZGRyaW5mby5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1jdXJsX2FkZHJpbmZvLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9hZGRyaW5mby5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWN1cmxfYWRkcmluZm8ubG8gYHRlc3QgLWYgJ2N1cmxfYWRkcmluZm8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9hZGRyaW5mby5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9hZGRyaW5mby5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9hZGRyaW5mby5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9hZGRyaW5mby5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdjdXJsX2FkZHJpbmZvLmMnIG9iamVjdD0nbGliY3VybHVfbGEtY3VybF9hZGRyaW5mby5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF9hZGRyaW5mby5sbyBgdGVzdCAtZiAnY3VybF9hZGRyaW5mby5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjdXJsX2FkZHJpbmZvLmMKKworbGliY3VybHVfbGEtc29ja3NfZ3NzYXBpLmxvOiBzb2Nrc19nc3NhcGkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtc29ja3NfZ3NzYXBpLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc29ja3NfZ3NzYXBpLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtc29ja3NfZ3NzYXBpLmxvIGB0ZXN0IC1mICdzb2Nrc19nc3NhcGkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc29ja3NfZ3NzYXBpLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zb2Nrc19nc3NhcGkuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXNvY2tzX2dzc2FwaS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc29ja3NfZ3NzYXBpLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3NvY2tzX2dzc2FwaS5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLXNvY2tzX2dzc2FwaS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc29ja3NfZ3NzYXBpLmxvIGB0ZXN0IC1mICdzb2Nrc19nc3NhcGkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc29ja3NfZ3NzYXBpLmMKKworbGliY3VybHVfbGEtc29ja3Nfc3NwaS5sbzogc29ja3Nfc3NwaS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1zb2Nrc19zc3BpLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc29ja3Nfc3NwaS5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLXNvY2tzX3NzcGkubG8gYHRlc3QgLWYgJ3NvY2tzX3NzcGkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc29ja3Nfc3NwaS5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc29ja3Nfc3NwaS5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtc29ja3Nfc3NwaS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc29ja3Nfc3NwaS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdzb2Nrc19zc3BpLmMnIG9iamVjdD0nbGliY3VybHVfbGEtc29ja3Nfc3NwaS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc29ja3Nfc3NwaS5sbyBgdGVzdCAtZiAnc29ja3Nfc3NwaS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bzb2Nrc19zc3BpLmMKKworbGliY3VybHVfbGEtY3VybF9zc3BpLmxvOiBjdXJsX3NzcGkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtY3VybF9zc3BpLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9zc3BpLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtY3VybF9zc3BpLmxvIGB0ZXN0IC1mICdjdXJsX3NzcGkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9zc3BpLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX3NzcGkuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfc3NwaS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9zc3BpLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2N1cmxfc3NwaS5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWN1cmxfc3NwaS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF9zc3BpLmxvIGB0ZXN0IC1mICdjdXJsX3NzcGkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9zc3BpLmMKKworbGliY3VybHVfbGEtc2xpc3QubG86IHNsaXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXNsaXN0LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc2xpc3QuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1zbGlzdC5sbyBgdGVzdCAtZiAnc2xpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2xpc3QuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXNsaXN0LlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1zbGlzdC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc2xpc3QuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc2xpc3QuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1zbGlzdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc2xpc3QubG8gYHRlc3QgLWYgJ3NsaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNsaXN0LmMKKworbGliY3VybHVfbGEtbm9uYmxvY2subG86IG5vbmJsb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLW5vbmJsb2NrLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtbm9uYmxvY2suVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1ub25ibG9jay5sbyBgdGVzdCAtZiAnbm9uYmxvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgbm9uYmxvY2suYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLW5vbmJsb2NrLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1ub25ibG9jay5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbm9uYmxvY2suVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbm9uYmxvY2suYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1ub25ibG9jay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtbm9uYmxvY2subG8gYHRlc3QgLWYgJ25vbmJsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG5vbmJsb2NrLmMKKworbGliY3VybHVfbGEtY3VybF9tZW1yY2hyLmxvOiBjdXJsX21lbXJjaHIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtY3VybF9tZW1yY2hyLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9tZW1yY2hyLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtY3VybF9tZW1yY2hyLmxvIGB0ZXN0IC1mICdjdXJsX21lbXJjaHIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9tZW1yY2hyLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX21lbXJjaHIuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfbWVtcmNoci5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9tZW1yY2hyLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2N1cmxfbWVtcmNoci5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWN1cmxfbWVtcmNoci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF9tZW1yY2hyLmxvIGB0ZXN0IC1mICdjdXJsX21lbXJjaHIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9tZW1yY2hyLmMKKworbGliY3VybHVfbGEtaW1hcC5sbzogaW1hcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1pbWFwLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaW1hcC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWltYXAubG8gYHRlc3QgLWYgJ2ltYXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaW1hcC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaW1hcC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtaW1hcC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaW1hcC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdpbWFwLmMnIG9iamVjdD0nbGliY3VybHVfbGEtaW1hcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaW1hcC5sbyBgdGVzdCAtZiAnaW1hcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpbWFwLmMKKworbGliY3VybHVfbGEtcG9wMy5sbzogcG9wMy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1wb3AzLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtcG9wMy5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLXBvcDMubG8gYHRlc3QgLWYgJ3BvcDMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcG9wMy5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtcG9wMy5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtcG9wMy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtcG9wMy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdwb3AzLmMnIG9iamVjdD0nbGliY3VybHVfbGEtcG9wMy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtcG9wMy5sbyBgdGVzdCAtZiAncG9wMy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bwb3AzLmMKKworbGliY3VybHVfbGEtc210cC5sbzogc210cC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1zbXRwLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtc210cC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLXNtdHAubG8gYHRlc3QgLWYgJ3NtdHAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc210cC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc210cC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtc210cC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtc210cC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdzbXRwLmMnIG9iamVjdD0nbGliY3VybHVfbGEtc210cC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtc210cC5sbyBgdGVzdCAtZiAnc210cC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzbXRwLmMKKworbGliY3VybHVfbGEtcGluZ3BvbmcubG86IHBpbmdwb25nLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXBpbmdwb25nLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtcGluZ3BvbmcuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1waW5ncG9uZy5sbyBgdGVzdCAtZiAncGluZ3BvbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGluZ3BvbmcuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXBpbmdwb25nLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1waW5ncG9uZy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtcGluZ3BvbmcuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncGluZ3BvbmcuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1waW5ncG9uZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtcGluZ3BvbmcubG8gYHRlc3QgLWYgJ3Bpbmdwb25nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBpbmdwb25nLmMKKworbGliY3VybHVfbGEtcnRzcC5sbzogcnRzcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1ydHNwLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtcnRzcC5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLXJ0c3AubG8gYHRlc3QgLWYgJ3J0c3AuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcnRzcC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtcnRzcC5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtcnRzcC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtcnRzcC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdydHNwLmMnIG9iamVjdD0nbGliY3VybHVfbGEtcnRzcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtcnRzcC5sbyBgdGVzdCAtZiAncnRzcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BydHNwLmMKKworbGliY3VybHVfbGEtY3VybF90aHJlYWRzLmxvOiBjdXJsX3RocmVhZHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtY3VybF90aHJlYWRzLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF90aHJlYWRzLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtY3VybF90aHJlYWRzLmxvIGB0ZXN0IC1mICdjdXJsX3RocmVhZHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF90aHJlYWRzLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX3RocmVhZHMuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfdGhyZWFkcy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF90aHJlYWRzLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2N1cmxfdGhyZWFkcy5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWN1cmxfdGhyZWFkcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF90aHJlYWRzLmxvIGB0ZXN0IC1mICdjdXJsX3RocmVhZHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF90aHJlYWRzLmMKKworbGliY3VybHVfbGEtd2Fybmxlc3MubG86IHdhcm5sZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXdhcm5sZXNzLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtd2Fybmxlc3MuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS13YXJubGVzcy5sbyBgdGVzdCAtZiAnd2Fybmxlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgd2Fybmxlc3MuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXdhcm5sZXNzLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS13YXJubGVzcy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtd2Fybmxlc3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nd2Fybmxlc3MuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS13YXJubGVzcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtd2Fybmxlc3MubG8gYHRlc3QgLWYgJ3dhcm5sZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHdhcm5sZXNzLmMKKworbGliY3VybHVfbGEtaG1hYy5sbzogaG1hYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1obWFjLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaG1hYy5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWhtYWMubG8gYHRlc3QgLWYgJ2htYWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaG1hYy5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaG1hYy5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtaG1hYy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaG1hYy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdobWFjLmMnIG9iamVjdD0nbGliY3VybHVfbGEtaG1hYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaG1hYy5sbyBgdGVzdCAtZiAnaG1hYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BobWFjLmMKKworbGliY3VybHVfbGEtcG9sYXJzc2wubG86IHBvbGFyc3NsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLXBvbGFyc3NsLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtcG9sYXJzc2wuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1wb2xhcnNzbC5sbyBgdGVzdCAtZiAncG9sYXJzc2wuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcG9sYXJzc2wuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLXBvbGFyc3NsLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1wb2xhcnNzbC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtcG9sYXJzc2wuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncG9sYXJzc2wuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1wb2xhcnNzbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtcG9sYXJzc2wubG8gYHRlc3QgLWYgJ3BvbGFyc3NsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBvbGFyc3NsLmMKKworbGliY3VybHVfbGEtY3VybF9ydG1wLmxvOiBjdXJsX3J0bXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtY3VybF9ydG1wLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9ydG1wLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtY3VybF9ydG1wLmxvIGB0ZXN0IC1mICdjdXJsX3J0bXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9ydG1wLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX3J0bXAuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfcnRtcC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9ydG1wLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2N1cmxfcnRtcC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWN1cmxfcnRtcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF9ydG1wLmxvIGB0ZXN0IC1mICdjdXJsX3J0bXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9ydG1wLmMKKworbGliY3VybHVfbGEtb3BlbmxkYXAubG86IG9wZW5sZGFwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLW9wZW5sZGFwLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtb3BlbmxkYXAuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1vcGVubGRhcC5sbyBgdGVzdCAtZiAnb3BlbmxkYXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgb3BlbmxkYXAuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLW9wZW5sZGFwLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1vcGVubGRhcC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtb3BlbmxkYXAuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nb3BlbmxkYXAuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1vcGVubGRhcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtb3BlbmxkYXAubG8gYHRlc3QgLWYgJ29wZW5sZGFwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG9wZW5sZGFwLmMKKworbGliY3VybHVfbGEtY3VybF9nZXRob3N0bmFtZS5sbzogY3VybF9nZXRob3N0bmFtZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1jdXJsX2dldGhvc3RuYW1lLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9nZXRob3N0bmFtZS5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWN1cmxfZ2V0aG9zdG5hbWUubG8gYHRlc3QgLWYgJ2N1cmxfZ2V0aG9zdG5hbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9nZXRob3N0bmFtZS5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9nZXRob3N0bmFtZS5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9nZXRob3N0bmFtZS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9nZXRob3N0bmFtZS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdjdXJsX2dldGhvc3RuYW1lLmMnIG9iamVjdD0nbGliY3VybHVfbGEtY3VybF9nZXRob3N0bmFtZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF9nZXRob3N0bmFtZS5sbyBgdGVzdCAtZiAnY3VybF9nZXRob3N0bmFtZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjdXJsX2dldGhvc3RuYW1lLmMKKworbGliY3VybHVfbGEtZ29waGVyLmxvOiBnb3BoZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtZ29waGVyLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtZ29waGVyLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtZ29waGVyLmxvIGB0ZXN0IC1mICdnb3BoZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ29waGVyLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1nb3BoZXIuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWdvcGhlci5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtZ29waGVyLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dvcGhlci5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWdvcGhlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtZ29waGVyLmxvIGB0ZXN0IC1mICdnb3BoZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ29waGVyLmMKKworbGliY3VybHVfbGEtYXh0bHMubG86IGF4dGxzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWF4dGxzLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtYXh0bHMuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1heHRscy5sbyBgdGVzdCAtZiAnYXh0bHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXh0bHMuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWF4dGxzLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1heHRscy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtYXh0bHMuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nYXh0bHMuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1heHRscy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtYXh0bHMubG8gYHRlc3QgLWYgJ2F4dGxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF4dGxzLmMKKworbGliY3VybHVfbGEtaWRuX3dpbjMyLmxvOiBpZG5fd2luMzIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtaWRuX3dpbjMyLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaWRuX3dpbjMyLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtaWRuX3dpbjMyLmxvIGB0ZXN0IC1mICdpZG5fd2luMzIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaWRuX3dpbjMyLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1pZG5fd2luMzIuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWlkbl93aW4zMi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaWRuX3dpbjMyLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2lkbl93aW4zMi5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWlkbl93aW4zMi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaWRuX3dpbjMyLmxvIGB0ZXN0IC1mICdpZG5fd2luMzIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaWRuX3dpbjMyLmMKKworbGliY3VybHVfbGEtaHR0cF9uZWdvdGlhdGVfc3NwaS5sbzogaHR0cF9uZWdvdGlhdGVfc3NwaS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1odHRwX25lZ290aWF0ZV9zc3BpLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9uZWdvdGlhdGVfc3NwaS5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWh0dHBfbmVnb3RpYXRlX3NzcGkubG8gYHRlc3QgLWYgJ2h0dHBfbmVnb3RpYXRlX3NzcGkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaHR0cF9uZWdvdGlhdGVfc3NwaS5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9uZWdvdGlhdGVfc3NwaS5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9uZWdvdGlhdGVfc3NwaS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9uZWdvdGlhdGVfc3NwaS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdodHRwX25lZ290aWF0ZV9zc3BpLmMnIG9iamVjdD0nbGliY3VybHVfbGEtaHR0cF9uZWdvdGlhdGVfc3NwaS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaHR0cF9uZWdvdGlhdGVfc3NwaS5sbyBgdGVzdCAtZiAnaHR0cF9uZWdvdGlhdGVfc3NwaS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BodHRwX25lZ290aWF0ZV9zc3BpLmMKKworbGliY3VybHVfbGEtY3lhc3NsLmxvOiBjeWFzc2wuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtY3lhc3NsLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3lhc3NsLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtY3lhc3NsLmxvIGB0ZXN0IC1mICdjeWFzc2wuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3lhc3NsLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jeWFzc2wuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWN5YXNzbC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3lhc3NsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2N5YXNzbC5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWN5YXNzbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3lhc3NsLmxvIGB0ZXN0IC1mICdjeWFzc2wuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3lhc3NsLmMKKworbGliY3VybHVfbGEtaHR0cF9wcm94eS5sbzogaHR0cF9wcm94eS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYmN1cmx1X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjdXJsdV9sYS1odHRwX3Byb3h5LmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9wcm94eS5UcG8iIC1jIC1vIGxpYmN1cmx1X2xhLWh0dHBfcHJveHkubG8gYHRlc3QgLWYgJ2h0dHBfcHJveHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaHR0cF9wcm94eS5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9wcm94eS5UcG8iICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9wcm94eS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtaHR0cF9wcm94eS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdodHRwX3Byb3h5LmMnIG9iamVjdD0nbGliY3VybHVfbGEtaHR0cF9wcm94eS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtaHR0cF9wcm94eS5sbyBgdGVzdCAtZiAnaHR0cF9wcm94eS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BodHRwX3Byb3h5LmMKKworbGliY3VybHVfbGEtbm9uLWFzY2lpLmxvOiBub24tYXNjaWkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtbm9uLWFzY2lpLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtbm9uLWFzY2lpLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtbm9uLWFzY2lpLmxvIGB0ZXN0IC1mICdub24tYXNjaWkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbm9uLWFzY2lpLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1ub24tYXNjaWkuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLW5vbi1hc2NpaS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtbm9uLWFzY2lpLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J25vbi1hc2NpaS5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLW5vbi1hc2NpaS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtbm9uLWFzY2lpLmxvIGB0ZXN0IC1mICdub24tYXNjaWkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbm9uLWFzY2lpLmMKKworbGliY3VybHVfbGEtYXN5bi1hcmVzLmxvOiBhc3luLWFyZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtYXN5bi1hcmVzLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtYXN5bi1hcmVzLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtYXN5bi1hcmVzLmxvIGB0ZXN0IC1mICdhc3luLWFyZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXN5bi1hcmVzLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1hc3luLWFyZXMuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWFzeW4tYXJlcy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtYXN5bi1hcmVzLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2FzeW4tYXJlcy5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWFzeW4tYXJlcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtYXN5bi1hcmVzLmxvIGB0ZXN0IC1mICdhc3luLWFyZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXN5bi1hcmVzLmMKKworbGliY3VybHVfbGEtYXN5bi10aHJlYWQubG86IGFzeW4tdGhyZWFkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWFzeW4tdGhyZWFkLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtYXN5bi10aHJlYWQuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1hc3luLXRocmVhZC5sbyBgdGVzdCAtZiAnYXN5bi10aHJlYWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXN5bi10aHJlYWQuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWFzeW4tdGhyZWFkLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1hc3luLXRocmVhZC5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtYXN5bi10aHJlYWQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nYXN5bi10aHJlYWQuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1hc3luLXRocmVhZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtYXN5bi10aHJlYWQubG8gYHRlc3QgLWYgJ2FzeW4tdGhyZWFkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFzeW4tdGhyZWFkLmMKKworbGliY3VybHVfbGEtY3VybF9nc3NhcGkubG86IGN1cmxfZ3NzYXBpLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWN1cmxfZ3NzYXBpLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9nc3NhcGkuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1jdXJsX2dzc2FwaS5sbyBgdGVzdCAtZiAnY3VybF9nc3NhcGkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9nc3NhcGkuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfZ3NzYXBpLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX2dzc2FwaS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9nc3NhcGkuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nY3VybF9nc3NhcGkuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1jdXJsX2dzc2FwaS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF9nc3NhcGkubG8gYHRlc3QgLWYgJ2N1cmxfZ3NzYXBpLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGN1cmxfZ3NzYXBpLmMKKworbGliY3VybHVfbGEtY3VybF9udGxtLmxvOiBjdXJsX250bG0uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtY3VybF9udGxtLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9udGxtLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtY3VybF9udGxtLmxvIGB0ZXN0IC1mICdjdXJsX250bG0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9udGxtLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX250bG0uVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfbnRsbS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9udGxtLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2N1cmxfbnRsbS5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWN1cmxfbnRsbS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF9udGxtLmxvIGB0ZXN0IC1mICdjdXJsX250bG0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9udGxtLmMKKworbGliY3VybHVfbGEtY3VybF9udGxtX3diLmxvOiBjdXJsX250bG1fd2IuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJjdXJsdV9sYV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY3VybHVfbGEtY3VybF9udGxtX3diLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9udGxtX3diLlRwbyIgLWMgLW8gbGliY3VybHVfbGEtY3VybF9udGxtX3diLmxvIGB0ZXN0IC1mICdjdXJsX250bG1fd2IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9udGxtX3diLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX250bG1fd2IuVHBvIiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfbnRsbV93Yi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9udGxtX3diLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2N1cmxfbnRsbV93Yi5jJyBvYmplY3Q9J2xpYmN1cmx1X2xhLWN1cmxfbnRsbV93Yi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF9udGxtX3diLmxvIGB0ZXN0IC1mICdjdXJsX250bG1fd2IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9udGxtX3diLmMKKworbGliY3VybHVfbGEtY3VybF9udGxtX2NvcmUubG86IGN1cmxfbnRsbV9jb3JlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWN1cmxfbnRsbV9jb3JlLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9udGxtX2NvcmUuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1jdXJsX250bG1fY29yZS5sbyBgdGVzdCAtZiAnY3VybF9udGxtX2NvcmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9udGxtX2NvcmUuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfbnRsbV9jb3JlLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX250bG1fY29yZS5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9udGxtX2NvcmUuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nY3VybF9udGxtX2NvcmUuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1jdXJsX250bG1fY29yZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF9udGxtX2NvcmUubG8gYHRlc3QgLWYgJ2N1cmxfbnRsbV9jb3JlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGN1cmxfbnRsbV9jb3JlLmMKKworbGliY3VybHVfbGEtY3VybF9udGxtX21zZ3MubG86IGN1cmxfbnRsbV9tc2dzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmN1cmx1X2xhLWN1cmxfbnRsbV9tc2dzLmxvIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9udGxtX21zZ3MuVHBvIiAtYyAtbyBsaWJjdXJsdV9sYS1jdXJsX250bG1fbXNncy5sbyBgdGVzdCAtZiAnY3VybF9udGxtX21zZ3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3VybF9udGxtX21zZ3MuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYmN1cmx1X2xhLWN1cmxfbnRsbV9tc2dzLlRwbyIgIiQoREVQRElSKS9saWJjdXJsdV9sYS1jdXJsX250bG1fbXNncy5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliY3VybHVfbGEtY3VybF9udGxtX21zZ3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nY3VybF9udGxtX21zZ3MuYycgb2JqZWN0PSdsaWJjdXJsdV9sYS1jdXJsX250bG1fbXNncy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliY3VybHVfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY3VybHVfbGEtY3VybF9udGxtX21zZ3MubG8gYHRlc3QgLWYgJ2N1cmxfbnRsbV9tc2dzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGN1cmxfbnRsbV9tc2dzLmMKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgY3VybF9jb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBjdXJsX2NvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSBjdXJsX2NvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGN1cmxfY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorQENVUkxERUJVR19GQUxTRUBhbGwtbG9jYWw6CithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpIGN1cmxfY29uZmlnLmggYWxsLWxvY2FsCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQobWtkaXJfcCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIFwKKwljbGVhbi1ub2luc3RMVExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0gdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBhbGwtbG9jYWwgY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBcCisJY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCisJaW5zdGFsbC1saWJMVExJQlJBUklFUyBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtIFwKKwl1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworCiskKERTUCk6IG1zdmNwcm9qLmhlYWQgbXN2Y3Byb2ouZm9vdCBNYWtlZmlsZS5hbQorCWVjaG8gImNyZWF0aW5nICQoRFNQKSIKKwlAKGNwICQoc3JjZGlyKS9tc3ZjcHJvai5oZWFkICQoRFNQKTsgXAorCWVjaG8gIiMgQmVnaW4gR3JvdXAgXCJTb3VyY2UgRmlsZXNcIiIgJChEU1BPVVQpOyBcCisgICAgICAgIGVjaG8gIiIgJChEU1BPVVQpOyBcCisgICAgICAgIGVjaG8gIiMgUFJPUCBEZWZhdWx0X0ZpbHRlciBcIlwiIiAkKERTUE9VVCk7IFwKKyAgICAgICAgd2luMzJfc3Jjcz0nJChXSU4zMlNPVVJDRVMpJzsgXAorICAgICAgICBzb3J0ZWRfc3Jjcz1gZm9yIGZpbGUgaW4gJCR3aW4zMl9zcmNzOyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IHNvcnRgOyBcCisgICAgICAgIGZvciBmaWxlIGluICQkc29ydGVkX3NyY3M7IGRvIFwKKwllY2hvICIjIEJlZ2luIFNvdXJjZSBGaWxlIiAkKERTUE9VVCk7IFwKKwllY2hvICIiICQoRFNQT1VUKTsgXAorCWVjaG8gIlNPVVJDRT0uXFwiJCRmaWxlICQoRFNQT1VUKTsgXAorCWVjaG8gIiMgRW5kIFNvdXJjZSBGaWxlIiAkKERTUE9VVCk7IFwKKwlkb25lOyBcCisJZWNobyAiIyBFbmQgR3JvdXAiICQoRFNQT1VUKTsgXAorCWVjaG8gIiMgQmVnaW4gR3JvdXAgXCJIZWFkZXIgRmlsZXNcIiIgJChEU1BPVVQpOyBcCisgICAgICAgIGVjaG8gIiIgJChEU1BPVVQpOyBcCisgICAgICAgIGVjaG8gIiMgUFJPUCBEZWZhdWx0X0ZpbHRlciBcIlwiIiAkKERTUE9VVCk7IFwKKyAgICAgICAgd2luMzJfaGRycz0nJChXSU4zMkhFQURFUlMpJzsgXAorICAgICAgICBzb3J0ZWRfaGRycz1gZm9yIGZpbGUgaW4gJCR3aW4zMl9oZHJzOyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IHNvcnRgOyBcCisgICAgICAgIGZvciBmaWxlIGluICQkc29ydGVkX2hkcnM7IGRvIFwKKwllY2hvICIjIEJlZ2luIFNvdXJjZSBGaWxlIiAkKERTUE9VVCk7IFwKKwllY2hvICIiICQoRFNQT1VUKTsgXAorCWVjaG8gIlNPVVJDRT0uXFwiJCRmaWxlICQoRFNQT1VUKTsgXAorCWVjaG8gIiMgRW5kIFNvdXJjZSBGaWxlIiAkKERTUE9VVCk7IFwKKwlkb25lOyBcCisJZWNobyAiIyBFbmQgR3JvdXAiICQoRFNQT1VUKTsgXAorCWNhdCAkKHNyY2RpcikvbXN2Y3Byb2ouZm9vdCAkKERTUE9VVCkgKQorCiskKFZDUFJPSik6IHZjOHByb2ouaGVhZCB2Yzhwcm9qLmZvb3QgTWFrZWZpbGUuYW0KKwllY2hvICJjcmVhdGluZyAkKFZDUFJPSikiCisJQChjcCAkKHNyY2RpcikvdmM4cHJvai5oZWFkICQoVkNQUk9KKTsgXAorICAgICAgICB3aW4zMl9zcmNzPSckKFdJTjMyU09VUkNFUyknOyBcCisgICAgICAgIHNvcnRlZF9zcmNzPWBmb3IgZmlsZSBpbiAkJHdpbjMyX3NyY3M7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgc29ydGA7IFwKKyAgICAgICAgZm9yIGZpbGUgaW4gJCRzb3J0ZWRfc3JjczsgZG8gXAorCWVjaG8gIjxGaWxlIFJlbGF0aXZlUGF0aD1cIiIkJGZpbGUiXCI+PC9GaWxlPiIgJChWQ1BST0pPVVQpOyBcCisJZG9uZTsgXAorCWVjaG8gIjwvRmlsdGVyPjxGaWx0ZXIJTmFtZT1cIkhlYWRlciBGaWxlc1wiPiIgJChWQ1BST0pPVVQpOyBcCisgICAgICAgIHdpbjMyX2hkcnM9JyQoV0lOMzJIRUFERVJTKSc7IFwKKyAgICAgICAgc29ydGVkX2hkcnM9YGZvciBmaWxlIGluICQkd2luMzJfaGRyczsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBzb3J0YDsgXAorICAgICAgICBmb3IgZmlsZSBpbiAkJHNvcnRlZF9oZHJzOyBkbyBcCisJZWNobyAiPEZpbGUgUmVsYXRpdmVQYXRoPVwiIiQkZmlsZSJcIj48L0ZpbGU+IiAkKFZDUFJPSk9VVCk7IFwKKwlkb25lOyBcCisJY2F0ICQoc3JjZGlyKS92Yzhwcm9qLmZvb3QgJChWQ1BST0pPVVQpICkKKworY2hlY2tzcmM6CisJQEBQRVJMQCAkKHRvcF9zcmNkaXIpL2xpYi9jaGVja3NyYy5wbCAtRCQodG9wX3NyY2RpcikvbGliICQoQ1NPVVJDRVMpICQoSEhFQURFUlMpCisKKyMgZm9yIGRlYnVnIGJ1aWxkcywgd2Ugc2NhbiB0aGUgc291cmNlcyBvbiBhbGwgcmVndWxhciBtYWtlIGludm9rZXMKK0BDVVJMREVCVUdfVFJVRUBhbGwtbG9jYWw6IGNoZWNrc3JjCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvTWFrZWZpbGUuaW5jIGIvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzdmNTA1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLmluYwpAQCAtMCwwICsxLDQyIEBACisjIC4vbGliL01ha2VmaWxlLmluYworIyBVc2luZyB0aGUgYmFja3NsYXNoIGFzIGxpbmUgY29udGludWF0aW9uIGNoYXJhY3RlciBtaWdodCBiZSBwcm9ibGVtYXRpYworIyB3aXRoIHNvbWUgbWFrZSBmbGF2b3VycywgYXMgV2F0Y29tJ3Mgd21ha2Ugc2hvd2VkIHVzIGFscmVhZHkuIElmIHdlCisjIGV2ZXIgd2FudCB0byBjaGFuZ2UgdGhpcyBpbiBhIHBvcnRhYmxlIG1hbm5lciB0aGVuIHdlIHNob3VsZCBjb25zaWRlcgorIyB0aGlzIGlkZWEgKHBvc3RlZCB0byB0aGUgbGliY3VybCBsaXN0IGJ5IEFkYW0gS2VsbGFzKToKKyMgQ1NSQzEgPSBmaWxlMS5jIGZpbGUyLmMgZmlsZTMuYworIyBDU1JDMiA9IGZpbGU0LmMgZmlsZTUuYyBmaWxlNi5jCisjIENTT1VSQ0VTID0gJChDU1JDMSkgJChDU1JDMikKKworQ1NPVVJDRVMgPSBmaWxlLmMgdGltZXZhbC5jIGJhc2U2NC5jIGhvc3RpcC5jIHByb2dyZXNzLmMgZm9ybWRhdGEuYwlcCisgIGNvb2tpZS5jIGh0dHAuYyBzZW5kZi5jIGZ0cC5jIHVybC5jIGRpY3QuYyBpZjJpcC5jIHNwZWVkY2hlY2suYwlcCisgIGxkYXAuYyBzc2x1c2UuYyB2ZXJzaW9uLmMgZ2V0ZW52LmMgZXNjYXBlLmMgbXByaW50Zi5jIHRlbG5ldC5jCVwKKyAgbmV0cmMuYyBnZXRpbmZvLmMgdHJhbnNmZXIuYyBzdHJlcXVhbC5jIGVhc3kuYyBzZWN1cml0eS5jIGtyYjQuYwlcCisgIGN1cmxfZm5tYXRjaC5jIGZpbGVpbmZvLmMgZnRwbGlzdHBhcnNlci5jIHdpbGRjYXJkLmMga3JiNS5jCQlcCisgIG1lbWRlYnVnLmMgaHR0cF9jaHVua3MuYyBzdHJ0b2suYyBjb25uZWN0LmMgbGxpc3QuYyBoYXNoLmMgbXVsdGkuYwlcCisgIGNvbnRlbnRfZW5jb2RpbmcuYyBzaGFyZS5jIGh0dHBfZGlnZXN0LmMgbWQ0LmMgbWQ1LmMgY3VybF9yYW5kLmMJXAorICBodHRwX25lZ290aWF0ZS5jIGluZXRfcHRvbi5jIHN0cnRvb2ZmdC5jIHN0cmVycm9yLmMJCQlcCisgIGhvc3Rhc3luLmMgaG9zdGlwNC5jIGhvc3RpcDYuYyBob3N0c3luLmMgaW5ldF9udG9wLmMgcGFyc2VkYXRlLmMJXAorICBzZWxlY3QuYyBndGxzLmMgc3NsZ2VuLmMgdGZ0cC5jIHNwbGF5LmMgc3RyZHVwLmMgc29ja3MuYyBzc2guYyBuc3MuYwlcCisgIHFzc2wuYyByYXdzdHIuYyBjdXJsX2FkZHJpbmZvLmMgc29ja3NfZ3NzYXBpLmMgc29ja3Nfc3NwaS5jCQlcCisgIGN1cmxfc3NwaS5jIHNsaXN0LmMgbm9uYmxvY2suYyBjdXJsX21lbXJjaHIuYyBpbWFwLmMgcG9wMy5jIHNtdHAuYwlcCisgIHBpbmdwb25nLmMgcnRzcC5jIGN1cmxfdGhyZWFkcy5jIHdhcm5sZXNzLmMgaG1hYy5jIHBvbGFyc3NsLmMJCVwKKyAgY3VybF9ydG1wLmMgb3BlbmxkYXAuYyBjdXJsX2dldGhvc3RuYW1lLmMgZ29waGVyLmMgYXh0bHMuYwkJXAorICBpZG5fd2luMzIuYyBodHRwX25lZ290aWF0ZV9zc3BpLmMgY3lhc3NsLmMgaHR0cF9wcm94eS5jIG5vbi1hc2NpaS5jCVwKKyAgYXN5bi1hcmVzLmMgYXN5bi10aHJlYWQuYyBjdXJsX2dzc2FwaS5jIGN1cmxfbnRsbS5jIGN1cmxfbnRsbV93Yi5jCVwKKyAgY3VybF9udGxtX2NvcmUuYyBjdXJsX250bG1fbXNncy5jCisKK0hIRUFERVJTID0gYXJwYV90ZWxuZXQuaCBuZXRyYy5oIGZpbGUuaCB0aW1ldmFsLmggcXNzbC5oIGhvc3RpcC5oCVwKKyAgcHJvZ3Jlc3MuaCBmb3JtZGF0YS5oIGNvb2tpZS5oIGh0dHAuaCBzZW5kZi5oIGZ0cC5oIHVybC5oIGRpY3QuaAlcCisgIGlmMmlwLmggc3BlZWRjaGVjay5oIHVybGRhdGEuaCBjdXJsX2xkYXAuaCBzc2x1c2UuaCBlc2NhcGUuaCB0ZWxuZXQuaAlcCisgIGdldGluZm8uaCBzdHJlcXVhbC5oIGtyYjQuaCBtZW1kZWJ1Zy5oIGh0dHBfY2h1bmtzLmggY3VybF9yYW5kLmgJXAorICBjdXJsX2ZubWF0Y2guaCB3aWxkY2FyZC5oIGZpbGVpbmZvLmggZnRwbGlzdHBhcnNlci5oIHN0cnRvay5oCQlcCisgIGNvbm5lY3QuaCBsbGlzdC5oIGhhc2guaCBjb250ZW50X2VuY29kaW5nLmggc2hhcmUuaCBjdXJsX21kNC5oCVwKKyAgY3VybF9tZDUuaCBodHRwX2RpZ2VzdC5oIGh0dHBfbmVnb3RpYXRlLmggaW5ldF9wdG9uLmgJCQlcCisgIHN0cnRvb2ZmdC5oIHN0cmVycm9yLmggaW5ldF9udG9wLmggY3VybHguaCBjdXJsX21lbW9yeS5oIHNldHVwLmgJXAorICB0cmFuc2Zlci5oIHNlbGVjdC5oIGVhc3lpZi5oIG11bHRpaWYuaCBwYXJzZWRhdGUuaCBzc2xnZW4uaCBndGxzLmgJXAorICB0ZnRwLmggc29ja2FkZHIuaCBzcGxheS5oIHN0cmR1cC5oIHNldHVwX29uY2UuaCBzb2Nrcy5oIHNzaC5oIG5zc2cuaAlcCisgIGN1cmxfYmFzZTY0LmggcmF3c3RyLmggY3VybF9hZGRyaW5mby5oIGN1cmxfc3NwaS5oIHNsaXN0Lmggbm9uYmxvY2suaAlcCisgIGN1cmxfbWVtcmNoci5oIGltYXAuaCBwb3AzLmggc210cC5oIHBpbmdwb25nLmggcnRzcC5oIGN1cmxfdGhyZWFkcy5oCVwKKyAgd2Fybmxlc3MuaCBjdXJsX2htYWMuaCBwb2xhcnNzbC5oIGN1cmxfcnRtcC5oIGN1cmxfZ2V0aG9zdG5hbWUuaAlcCisgIGdvcGhlci5oIGF4dGxzLmggY3lhc3NsLmggaHR0cF9wcm94eS5oIG5vbi1hc2NpaS5oIGFzeW4uaCBjdXJsX250bG0uaCBcCisgIGN1cmxfZ3NzYXBpLmggY3VybF9udGxtX3diLmggY3VybF9udGxtX2NvcmUuaCBjdXJsX250bG1fbXNncy5oCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvTWFrZWZpbGUubTMyIGIvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLm0zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTY2NTJkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLm0zMgpAQCAtMCwwICsxLDI0OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgbGliY3VybC5hIHdpdGggTWluZ1cgKEdDQy0zLjIgb3IgbGF0ZXIpCisjIyBhbmQgb3B0aW9uYWxseSBPcGVuU1NMICgwLjkuOCksIGxpYnNzaDIgKDEuMyksIHpsaWIgKDEuMi41KSwgbGlicnRtcCAoMi4zKQorIyMKKyMjIFVzYWdlOiAgIG1pbmd3MzItbWFrZSAtZiBNYWtlZmlsZS5tMzIgQ0ZHPS1mZWF0dXJlMVstZmVhdHVyZTJdWy1mZWF0dXJlM11bLi4uXQorIyMgRXhhbXBsZTogbWluZ3czMi1tYWtlIC1mIE1ha2VmaWxlLm0zMiBDRkc9LXpsaWItc3NsLXNzcGktd2luaWRuCisjIworIyMgSGludDogeW91IGNhbiBhbHNvIHNldCBlbnZpcm9ubWVudCB2YXJzIHRvIGNvbnRyb2wgdGhlIGJ1aWxkLCBmLmUuOgorIyMgc2V0IFpMSUJfUEFUSD1jOi96bGliLTEuMi41CisjIyBzZXQgWkxJQj0xCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgWmxpYiBzb3VyY2VzLgoraWZuZGVmIFpMSUJfUEFUSAorWkxJQl9QQVRIID0gLi4vLi4vemxpYi0xLjIuNQorZW5kaWYKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIE9wZW5TU0wgcGFja2FnZS4KK2lmbmRlZiBPUEVOU1NMX1BBVEgKK09QRU5TU0xfUEFUSCA9IC4uLy4uL29wZW5zc2wtMC45LjhyCitlbmRpZgoraWZuZGVmIE9QRU5TU0xfSU5DTFVERQorT1BFTlNTTF9JTkNMVURFID0gJChPUEVOU1NMX1BBVEgpL291dGluYworZW5kaWYKK2lmbmRlZiBPUEVOU1NMX0xJQlBBVEgKK09QRU5TU0xfTElCUEFUSCA9ICQoT1BFTlNTTF9QQVRIKS9vdXQKK2VuZGlmCitpZm5kZWYgT1BFTlNTTF9MSUJTCitPUEVOU1NMX0xJQlMgPSAtbGVheTMyIC1sc3NsMzIKK2VuZGlmCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBMaWJTU0gyIHBhY2thZ2UuCitpZm5kZWYgTElCU1NIMl9QQVRICitMSUJTU0gyX1BBVEggPSAuLi8uLi9saWJzc2gyLTEuMy4wCitlbmRpZgorIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgbGlicnRtcCBwYWNrYWdlLgoraWZuZGVmIExJQlJUTVBfUEFUSAorTElCUlRNUF9QQVRIID0gLi4vLi4vbGlicnRtcC0yLjMKK2VuZGlmCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBsaWJpZG4gcGFja2FnZS4KK2lmbmRlZiBMSUJJRE5fUEFUSAorTElCSUROX1BBVEggPSAuLi8uLi9saWJpZG4tMS4xOAorZW5kaWYKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIE1TIElETiBwYWNrYWdlLgorIyBNaWNyb3NvZnQgSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIChJRE4pIE1pdGlnYXRpb24gQVBJcyAxLjEKKyMgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2Rvd25sb2Fkcy9lbi9kZXRhaWxzLmFzcHg/RmFtaWx5SUQ9YWQ2MTU4ZDctZGRiYS00MTZhLTkxMDktMDc2MDc0MjVhODE1CitpZm5kZWYgV0lOSUROX1BBVEgKK1dJTklETl9QQVRIID0gLi4vLi4vTWljcm9zb2Z0IElETiBNaXRpZ2F0aW9uIEFQSXMKK2VuZGlmCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBOb3ZlbGwgTERBUCBOREsuCitpZm5kZWYgTERBUF9TREsKK0xEQVBfU0RLID0gYzovbm92ZWxsL25kay9jbGRhcHNkay93aW4zMgorZW5kaWYKKworUFJPT1QgPSAuLgorCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBjLWFyZXMgcGFja2FnZS4KK2lmbmRlZiBMSUJDQVJFU19QQVRICitMSUJDQVJFU19QQVRIID0gJChQUk9PVCkvYXJlcworZW5kaWYKKworIyBFZGl0IHRoZSB2YXIgYmVsb3cgdG8gc2V0IHRvIHlvdXIgYXJjaGl0ZWN0dXJlIG9yIHNldCBlbnZpcm9ubWVudCB2YXIuCitpZm5kZWYgQVJDSAorQVJDSCA9IHczMgorZW5kaWYKKworQ0MgPSBnY2MKK0NGTEFHUyA9IC1nIC1PMiAtV2FsbAorQ0ZMQUdTICs9IC1mbm8tc3RyaWN0LWFsaWFzaW5nCitpZmVxICgkKEFSQ0gpLHc2NCkKK0NGTEFHUyArPSAtRF9BTUQ2NF8KK2VuZGlmCisjIGNvbW1lbnQgTERGTEFHUyBiZWxvdyB0byBrZWVwIGRlYnVnIGluZm8KK0xERkxBR1MgPSAtcworQVIgPSBhcgorUkFOTElCID0gcmFubGliCitSQyA9IHdpbmRyZXMKK1JDRkxBR1MgPSAtLWluY2x1ZGUtZGlyPSQoUFJPT1QpL2luY2x1ZGUgLURERUJVR0JVSUxEPTAgLU8gQ09GRiAtaQorU1RSSVAgPSBzdHJpcCAtZworCitSTSA9IGRlbCAvcSAvZiAyPk5VTAorQ1AgPSBjb3B5CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBOb3RoaW5nIG1vcmUgdG8gZG8gYmVsb3cgdGhpcyBsaW5lIQorCitpZmVxICgkKGZpbmRzdHJpbmcgLWR5biwkKENGRykpLC1keW4pCitEWU4gPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1hcmVzLCQoQ0ZHKSksLWFyZXMpCitBUkVTID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtcnRtcCwkKENGRykpLC1ydG1wKQorUlRNUCA9IDEKK1NTTCA9IDEKK1pMSUIgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1zc2gyLCQoQ0ZHKSksLXNzaDIpCitTU0gyID0gMQorU1NMID0gMQorWkxJQiA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLXNzbCwkKENGRykpLC1zc2wpCitTU0wgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC16bGliLCQoQ0ZHKSksLXpsaWIpCitaTElCID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtaWRuLCQoQ0ZHKSksLWlkbikKK0lETiA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLXdpbmlkbiwkKENGRykpLC13aW5pZG4pCitXSU5JRE4gPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1zc3BpLCQoQ0ZHKSksLXNzcGkpCitTU1BJID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtc3BuZWdvLCQoQ0ZHKSksLXNwbmVnbykKK1NQTkVHTyA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLWxkYXBzLCQoQ0ZHKSksLWxkYXBzKQorTERBUFMgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1pcHY2LCQoQ0ZHKSksLWlwdjYpCitJUFY2ID0gMQorZW5kaWYKKworSU5DTFVERVMgPSAtSS4gLUkuLi9pbmNsdWRlCitDRkxBR1MgKz0gLURCVUlMRElOR19MSUJDVVJMCisKK2lmZGVmIEFSRVMKKyAgSU5DTFVERVMgKz0gLUkiJChMSUJDQVJFU19QQVRIKSIKKyAgQ0ZMQUdTICs9IC1EVVNFX0FSRVMKKyAgRExMX0xJQlMgKz0gLUwiJChMSUJDQVJFU19QQVRIKSIgLWxjYXJlcworICBsaWJjdXJsX2RsbF9ERVBFTkRFTkNJRVMgPSAkKExJQkNBUkVTX1BBVEgpL2xpYmNhcmVzLmEKK2VuZGlmCitpZmRlZiBSVE1QCisgIElOQ0xVREVTICs9IC1JIiQoTElCUlRNUF9QQVRIKSIKKyAgQ0ZMQUdTICs9IC1EVVNFX0xJQlJUTVAKKyAgRExMX0xJQlMgKz0gLUwiJChMSUJSVE1QX1BBVEgpL2xpYnJ0bXAiIC1scnRtcCAtbHdpbm1tCitlbmRpZgoraWZkZWYgU1NIMgorICBJTkNMVURFUyArPSAtSSIkKExJQlNTSDJfUEFUSCkvaW5jbHVkZSIgLUkiJChMSUJTU0gyX1BBVEgpL3dpbjMyIgorICBDRkxBR1MgKz0gLURVU0VfTElCU1NIMiAtREhBVkVfTElCU1NIMl9ICisgIERMTF9MSUJTICs9IC1MIiQoTElCU1NIMl9QQVRIKS93aW4zMiIgLWxzc2gyCitlbmRpZgoraWZkZWYgU1NMCisgIElOQ0xVREVTICs9IC1JIiQoT1BFTlNTTF9JTkNMVURFKSIKKyAgQ0ZMQUdTICs9IC1EVVNFX1NTTEVBWSAtRFVTRV9PUEVOU1NMIC1ESEFWRV9PUEVOU1NMX0VOR0lORV9IIC1ESEFWRV9PUEVOU1NMX1BLQ1MxMl9IIFwKKyAgICAgICAgICAgIC1ESEFWRV9FTkdJTkVfTE9BRF9CVUlMVElOX0VOR0lORVMgLURPUEVOU1NMX05PX0tSQjUgXAorICAgICAgICAgICAgLURDVVJMX1dBTlRTX0NBX0JVTkRMRV9FTlYKKyAgRExMX0xJQlMgKz0gLUwiJChPUEVOU1NMX0xJQlBBVEgpIiAkKE9QRU5TU0xfTElCUykKK2VuZGlmCitpZmRlZiBaTElCCisgIElOQ0xVREVTICs9IC1JIiQoWkxJQl9QQVRIKSIKKyAgQ0ZMQUdTICs9IC1ESEFWRV9MSUJaIC1ESEFWRV9aTElCX0gKKyAgRExMX0xJQlMgKz0gLUwiJChaTElCX1BBVEgpIiAtbHoKK2VuZGlmCitpZmRlZiBJRE4KKyAgSU5DTFVERVMgKz0gLUkiJChMSUJJRE5fUEFUSCkvaW5jbHVkZSIKKyAgQ0ZMQUdTICs9IC1EVVNFX0xJQklETgorICBETExfTElCUyArPSAtTCIkKExJQklETl9QQVRIKS9saWIiIC1saWRuCitlbHNlCitpZmRlZiBXSU5JRE4KKyAgQ0ZMQUdTICs9IC1EVVNFX1dJTjMyX0lETgorICBDRkxBR1MgKz0gLURXQU5UX0lETl9QUk9UT1RZUEVTCisgIERMTF9MSUJTICs9IC1MIiQoV0lOSUROX1BBVEgpIiAtbG5vcm1hbGl6CitlbmRpZgorZW5kaWYKK2lmZGVmIFNTUEkKKyAgQ0ZMQUdTICs9IC1EVVNFX1dJTkRPV1NfU1NQSQorZW5kaWYKK2lmZGVmIFNQTkVHTworICBDRkxBR1MgKz0gLURIQVZFX1NQTkVHTworZW5kaWYKK2lmZGVmIElQVjYKKyAgQ0ZMQUdTICs9IC1ERU5BQkxFX0lQVjYgLURfV0lOMzJfV0lOTlQ9MHgwNTAxCitlbmRpZgoraWZkZWYgTERBUFMKKyAgQ0ZMQUdTICs9IC1ESEFWRV9MREFQX1NTTAorZW5kaWYKK2lmZGVmIFVTRV9MREFQX05PVkVMTAorICBJTkNMVURFUyArPSAtSSIkKExEQVBfU0RLKS9pbmMiCisgIENGTEFHUyArPSAtRENVUkxfSEFTX05PVkVMTF9MREFQU0RLCisgIERMTF9MSUJTICs9IC1MIiQoTERBUF9TREspL2xpYi9tc2N2YyIgLWxsZGFwc2RrIC1sbGRhcHNzbCAtbGxkYXB4CitlbmRpZgoraWZkZWYgVVNFX0xEQVBfT1BFTkxEQVAKKyAgSU5DTFVERVMgKz0gLUkiJChMREFQX1NESykvaW5jbHVkZSIKKyAgQ0ZMQUdTICs9IC1EQ1VSTF9IQVNfT1BFTkxEQVBfTERBUFNESworICBETExfTElCUyArPSAtTCIkKExEQVBfU0RLKS9saWIiIC1sbGRhcCAtbGxiZXIKK2VuZGlmCitpZm5kZWYgVVNFX0xEQVBfTk9WRUxMCitpZm5kZWYgVVNFX0xEQVBfT1BFTkxEQVAKKyAgRExMX0xJQlMgKz0gLWx3bGRhcDMyCitlbmRpZgorZW5kaWYKK0RMTF9MSUJTICs9IC1sd3MyXzMyCisKKyMgTWFrZWZpbGUuaW5jIHByb3ZpZGVzIHRoZSBDU09VUkNFUyBhbmQgSEhFQURFUlMgZGVmaW5lcworaW5jbHVkZSBNYWtlZmlsZS5pbmMKKworbGliY3VybF9kbGxfTElCUkFSWSA9IGxpYmN1cmwuZGxsCitsaWJjdXJsX2RsbF9hX0xJQlJBUlkgPSBsaWJjdXJsZGxsLmEKK2xpYmN1cmxfYV9MSUJSQVJZID0gbGliY3VybC5hCisKK2xpYmN1cmxfYV9PQkpFQ1RTIDo9ICQocGF0c3Vic3QgJS5jLCUubywkKHN0cmlwICQoQ1NPVVJDRVMpKSkKK2xpYmN1cmxfYV9ERVBFTkRFTkNJRVMgOj0gJChzdHJpcCAkKENTT1VSQ0VTKSAkKEhIRUFERVJTKSkKKworUkVTT1VSQ0UgPSBsaWJjdXJsLnJlcworCisKK2FsbDogJChsaWJjdXJsX2FfTElCUkFSWSkgJChsaWJjdXJsX2RsbF9MSUJSQVJZKQorCiskKGxpYmN1cmxfYV9MSUJSQVJZKTogJChsaWJjdXJsX2FfT0JKRUNUUykgJChsaWJjdXJsX2FfREVQRU5ERU5DSUVTKQorCS0kKFJNKSAkQAorCSQoQVIpIGNydSAkQCAkKGxpYmN1cmxfYV9PQkpFQ1RTKQorCSQoUkFOTElCKSAkQAorCSQoU1RSSVApICRACisKKyMgcmVtb3ZlIHRoZSBsYXN0IGxpbmUgYWJvdmUgdG8ga2VlcCBkZWJ1ZyBpbmZvCisKKyQobGliY3VybF9kbGxfTElCUkFSWSk6ICQobGliY3VybF9hX09CSkVDVFMpICQoUkVTT1VSQ0UpICQobGliY3VybF9kbGxfREVQRU5ERU5DSUVTKQorCS0kKFJNKSAkQAorCSQoQ0MpICQoTERGTEFHUykgLXNoYXJlZCAtV2wsLS1vdXQtaW1wbGliLCQobGliY3VybF9kbGxfYV9MSUJSQVJZKSBcCisJICAtbyAkQCAkKGxpYmN1cmxfYV9PQkpFQ1RTKSAkKFJFU09VUkNFKSAkKERMTF9MSUJTKQorCislLm86ICUuYyAkKFBST09UKS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgKKwkkKENDKSAkKElOQ0xVREVTKSAkKENGTEFHUykgLWMgJDwKKworJS5yZXM6ICUucmMKKwkkKFJDKSAkKFJDRkxBR1MpICQ8IC1vICRACisKK2NsZWFuOgoraWZlcSAiJCh3aWxkY2FyZCAkKFBST09UKS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmguZGlzdCkiICIkKFBST09UKS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmguZGlzdCIKKwktJChSTSkgJChzdWJzdCAvLFwsJChQUk9PVCkvaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oKQorZW5kaWYKKwktJChSTSkgJChsaWJjdXJsX2FfT0JKRUNUUykgJChSRVNPVVJDRSkKKworZGlzdGNsZWFuIHZjbGVhbjogY2xlYW4KKwktJChSTSkgJChsaWJjdXJsX2FfTElCUkFSWSkgJChsaWJjdXJsX2RsbF9MSUJSQVJZKSAkKGxpYmN1cmxfZGxsX2FfTElCUkFSWSkKKworJChMSUJDQVJFU19QQVRIKS9saWJjYXJlcy5hOgorCSQoTUFLRSkgLUMgJChMSUJDQVJFU19QQVRIKSAtZiBNYWtlZmlsZS5tMzIKKworJChQUk9PVCkvaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oOgorCUBlY2hvIENyZWF0aW5nICRACisJQCQoQ1ApICQoc3Vic3QgLyxcLCRAKS5kaXN0ICQoc3Vic3QgLyxcLCRAKQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvTWFrZWZpbGUubmV0d2FyZSBiL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS5uZXR3YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZmFlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvTWFrZWZpbGUubmV0d2FyZQpAQCAtMCwwICsxLDc0MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMjIE1ha2VmaWxlIGZvciBidWlsZGluZyBsaWJjdXJsLm5sbSAoTmV0V2FyZSB2ZXJzaW9uIC0gZ251IG1ha2UpCisjIyBVc2U6IG1ha2UgLWYgTWFrZWZpbGUubmV0d2FyZQorIyMKKyMjIENvbW1lbnRzIHRvOiBHdWVudGVyIEtuYXVmIGh0dHA6Ly93d3cuZ2tudy5uZXQvcGhwYmIKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIE5vdmVsbCBOREsuCitpZm5kZWYgTkRLQkFTRQorTkRLQkFTRQk9IGM6L25vdmVsbAorZW5kaWYKKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgWmxpYiBzb3VyY2VzLgoraWZuZGVmIFpMSUJfUEFUSAorWkxJQl9QQVRIID0gLi4vLi4vemxpYi0xLjIuNQorZW5kaWYKKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgT3BlblNTTCBwYWNrYWdlLgoraWZuZGVmIE9QRU5TU0xfUEFUSAorT1BFTlNTTF9QQVRIID0gLi4vLi4vb3BlbnNzbC0wLjkuOHIKK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIExpYlNTSDIgcGFja2FnZS4KK2lmbmRlZiBMSUJTU0gyX1BBVEgKK0xJQlNTSDJfUEFUSCA9IC4uLy4uL2xpYnNzaDItMS4zLjAKK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIGF4VExTIHBhY2thZ2UuCitpZm5kZWYgQVhUTFNfUEFUSAorQVhUTFNfUEFUSCA9IC4uLy4uL2F4VExTLTEuMi43CitlbmRpZgorCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBsaWJpZG4gcGFja2FnZS4KK2lmbmRlZiBMSUJJRE5fUEFUSAorTElCSUROX1BBVEggPSAuLi8uLi9saWJpZG4tMS4xOAorZW5kaWYKKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgbGlicnRtcCBwYWNrYWdlLgoraWZuZGVmIExJQlJUTVBfUEFUSAorTElCUlRNUF9QQVRIID0gLi4vLi4vbGlicnRtcC0yLjMKK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIGZib3BlbnNzbCBwYWNrYWdlLgoraWZuZGVmIEZCT1BFTlNTTF9QQVRICitGQk9QRU5TU0xfUEFUSCA9IC4uLy4uL2Zib3BlbnNzbC0wLjQKK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIGMtYXJlcyBwYWNrYWdlLgoraWZuZGVmIExJQkNBUkVTX1BBVEgKK0xJQkNBUkVTX1BBVEggPSAuLi9hcmVzCitlbmRpZgorCitpZm5kZWYgSU5TVERJUgorSU5TVERJUgk9IC4uJChEUyljdXJsLSQoTElCQ1VSTF9WRVJTSU9OX1NUUiktYmluLW53CitlbmRpZgorCisjIEVkaXQgdGhlIHZhcnMgYmVsb3cgdG8gY2hhbmdlIE5MTSB0YXJnZXQgc2V0dGluZ3MuCitUQVJHRVQgID0gbGliY3VybAorVkVSU0lPTgk9ICQoTElCQ1VSTF9WRVJTSU9OKQorQ09QWVIJPSBDb3B5cmlnaHQgKEMpICQoTElCQ1VSTF9DT1BZUklHSFRfU1RSKQorREVTQ1IJPSBjVVJMIGxpYmN1cmwgJChMSUJDVVJMX1ZFUlNJT05fU1RSKSAoJChMSUJBUkNIKSkgLSBodHRwOi8vY3VybC5oYXh4LnNlCitNVFNBRkUJPSBZRVMKK1NUQUNLCT0gNjQwMDAKK1NDUkVFTgk9IG5vbmUKK0VYUE9SVFMJPSBAbGliY3VybC5pbXAKKworIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBlbmFibGUgbGlua2luZyB3aXRoIFBPU0lYIHNlbWFudGljcy4KKyMgUE9TSVhGTCA9IDEKKworIyBFZGl0IHRoZSB2YXIgYmVsb3cgdG8gcG9pbnQgdG8geW91ciBsaWIgYXJjaGl0ZWN0dXJlLgoraWZuZGVmIExJQkFSQ0gKK0xJQkFSQ0ggPSBMSUJDCitlbmRpZgorCisjIG11c3QgYmUgZXF1YWwgdG8gTkRFQlVHIG9yIERFQlVHLCBDVVJMREVCVUcKK2lmbmRlZiBEQgorREIJPSBOREVCVUcKK2VuZGlmCisjIE9wdGltaXphdGlvbjogLU88bj4gb3IgZGVidWdnaW5nOiAtZworaWZlcSAoJChEQiksTkRFQlVHKQorCU9QVAk9IC1PMgorCU9CSkRJUgk9IHJlbGVhc2UKK2Vsc2UKKwlPUFQJPSAtZworCU9CSkRJUgk9IGRlYnVnCitlbmRpZgorCisjIFRoZSBmb2xsb3dpbmcgbGluZXMgZGVmaW5lcyB5b3VyIGNvbXBpbGVyLgoraWZkZWYgQ1dGb2xkZXIKKwlNRVRST1dFUktTID0gJChDV0ZvbGRlcikKK2VuZGlmCitpZmRlZiBNRVRST1dFUktTCisJIyBNV0NXX1BBVEggPSAkKHN1YnN0IFwsLywkKE1FVFJPV0VSS1MpKS9Ob3ZlbGwgU3VwcG9ydAorCU1XQ1dfUEFUSCA9ICQoc3Vic3QgXCwvLCQoTUVUUk9XRVJLUykpL05vdmVsbCBTdXBwb3J0L01ldHJvd2Vya3MgU3VwcG9ydAorCUNDID0gbXdjY25sbQorZWxzZQorCUNDID0gZ2NjCitlbmRpZgorUEVSTAk9IHBlcmwKKyMgSGVyZSB5b3UgY2FuIGZpbmQgYSBuYXRpdmUgV2luMzIgYmluYXJ5IG9mIHRoZSBvcmlnaW5hbCBhd2s6CisjIGh0dHA6Ly93d3cuZ2tudy5uZXQvZGV2ZWxvcG1lbnQvcHJndG9vbHMvYXdrLTIwMTAwNTIzLnppcAorQVdLCT0gYXdrCitDUAk9IGNwIC1hZnYKK01LRElSCT0gbWtkaXIKKyMgUk0JPSBybSAtZgorIyBJZiB5b3Ugd2FudCB0byBtYXJrIHRoZSB0YXJnZXQgYXMgTVRTQUZFIHlvdSB3aWxsIG5lZWQgYSB0b29sIGZvcgorIyBnZW5lcmF0aW5nIHRoZSB4ZGMgZGF0YSBmb3IgdGhlIGxpbmtlcjsgaGVyZSdzIGEgbWluaW1hbCB0b29sOgorIyBodHRwOi8vd3d3LmdrbncubmV0L2RldmVsb3BtZW50L3ByZ3Rvb2xzL21reGRjLnppcAorTVBLWERDCT0gbWt4ZGMKKworIyBMSUJBUkNIX1UgPSAkKHNoZWxsICQoQVdLKSAnQkVHSU4ge3ByaW50IHRvdXBwZXIoQVJHVlsxXSl9JyAkKExJQkFSQ0gpKQorTElCQVJDSF9MID0gJChzaGVsbCAkKEFXSykgJ0JFR0lOIHtwcmludCB0b2xvd2VyKEFSR1ZbMV0pfScgJChMSUJBUkNIKSkKKworIyBJbmNsdWRlIHRoZSB2ZXJzaW9uIGluZm8gcmV0cmlldmVkIGZyb20gY3VybHZlci5oCistaW5jbHVkZSAkKE9CSkRJUikvdmVyc2lvbi5pbmMKKworIyBHbG9iYWwgZmxhZ3MgZm9yIGFsbCBjb21waWxlcnMKK0NGTEFHUwkrPSAkKE9QVCkgLUQkKERCKSAtRE5FVFdBUkUgLURIQVZFX0NPTkZJR19IIC1ub3N0ZGluYworCitpZmVxICgkKENDKSxtd2NjbmxtKQorTEQJPSBtd2xkbmxtCitMREZMQUdTCT0gLW5vc3RkbGliICQoUFJFTFVERSkgJChPQkpMKSAtbyAkQCAtY29tbWFuZGZpbGUKK0FSCT0gbXdsZG5sbQorQVJGTEFHUwk9IC1ub3N0ZGxpYiAtdHlwZSBsaWJyYXJ5IC1vCitMSUJFWFQJPSBsaWIKKyNSQU5MSUIJPQorQ0ZMQUdTCSs9IC1tc2dzdHlsZSBnY2MgLWdjY2luYyAtaW5saW5lIG9mZiAtb3B0IG5vaW50cmluc2ljcyAtcHJvYyA1ODYKK0NGTEFHUwkrPSAtcmVsYXhfcG9pbnRlcnMKKyNDRkxBR1MJKz0gLXcgb24KK2lmZXEgKCQoTElCQVJDSCksTElCQykKK2lmZXEgKCQoUE9TSVhGTCksMSkKKwlQUkVMVURFID0gJChOREtfTElCQykvaW1wb3J0cy9wb3NpeHByZS5vCitlbHNlCisJUFJFTFVERSA9ICQoTkRLX0xJQkMpL2ltcG9ydHMvbGliY3ByZS5vCitlbmRpZgorCUNGTEFHUyArPSAtYWxpZ24gNAorZWxzZQorCSMgUFJFTFVERSA9ICQoTkRLX0NMSUIpL2ltcG9ydHMvY2xpYnByZS5vCisJIyB0byBhdm9pZCB0aGUgX19pbml0XyogLyBfX2RlaW5pdF8qIHdob2VzIGRvbnQgdXNlIHByZWx1ZGUgZnJvbSBOREsKKwlQUkVMVURFID0gIiQoTVdDV19QQVRIKS9saWJyYXJpZXMvcnVudGltZS9wcmVsdWRlLm9iaiIKKwkjIENGTEFHUyArPSAtaW5jbHVkZSAiJChNV0NXX1BBVEgpL2hlYWRlcnMvbmxtX2NsaWJfcHJlZml4LmgiCisJQ0ZMQUdTICs9IC1hbGlnbiAxCitlbmRpZgorZWxzZQorTEQJPSBubG1jb252CitMREZMQUdTCT0gLVQKK0FSCT0gYXIKK0FSRkxBR1MJPSAtY3EKK0xJQkVYVAk9IGEKK1JBTkxJQgk9IHJhbmxpYgorQ0ZMQUdTICArPSAtbTMyCitDRkxBR1MJKz0gLWZuby1idWlsdGluIC1mbm8tc3RyaWN0LWFsaWFzaW5nCitpZmVxICgkKGZpbmRzdHJpbmcgZ2NjLCQoQ0MpKSxnY2MpCitDRkxBR1MJKz0gLWZwY2Mtc3RydWN0LXJldHVybgorZW5kaWYKK0NGTEFHUwkrPSAtV2FsbCAjIC1wZWRhbnRpYworaWZlcSAoJChMSUJBUkNIKSxMSUJDKQoraWZlcSAoJChQT1NJWEZMKSwxKQorCVBSRUxVREUgPSAkKE5ES19MSUJDKS9pbXBvcnRzL3Bvc2l4cHJlLmdjYy5vCitlbHNlCisJUFJFTFVERSA9ICQoTkRLX0xJQkMpL2ltcG9ydHMvbGliY3ByZS5nY2MubworZW5kaWYKK2Vsc2UKKwlQUkVMVURFID0gJChOREtfQ0xJQikvaW1wb3J0cy9jbGlicHJlLmdjYy5vCisJIyB0byBhdm9pZCB0aGUgX19pbml0XyogLyBfX2RlaW5pdF8qIHdob2VzIGRvbnQgdXNlIHByZWx1ZGUgZnJvbSBOREsKKwkjIGh0dHA6Ly93d3cuZ2tudy5uZXQvZGV2ZWxvcG1lbnQvbWtfbmxtL2djY19wcmUuemlwCisJIyBQUkVMVURFID0gJChOREtfUk9PVCkvcHJlL3ByZWx1ZGUubworCUNGTEFHUyArPSAtaW5jbHVkZSAkKE5ES0JBU0UpL25sbWNvbnYvZ2VubG0uaAorZW5kaWYKK2VuZGlmCisKK05ES19ST09UID0gJChOREtCQVNFKS9uZGsKK2lmbmRlZiBOREtfQ0xJQgorTkRLX0NMSUIgPSAkKE5ES19ST09UKS9ud3NkaworZW5kaWYKK2lmbmRlZiBOREtfTElCQworTkRLX0xJQkMgPSAkKE5ES19ST09UKS9saWJjCitlbmRpZgoraWZuZGVmIE5ES19MREFQCitOREtfTERBUCA9ICQoTkRLX1JPT1QpL2NsZGFwc2RrL25ldHdhcmUKK2VuZGlmCitDVVJMX0lOQyA9IC4uL2luY2x1ZGUKK0NVUkxfTElCID0gLi4vbGliCisKK0lOQ0xVREVTID0gLUkkKENVUkxfSU5DKSAtSSQoQ1VSTF9MSUIpCisKK2lmZXEgKCQoZmluZHN0cmluZyAtc3RhdGljLCQoQ0ZHKSksLXN0YXRpYykKK0xJTktfU1RBVElDID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtYXJlcywkKENGRykpLC1hcmVzKQorV0lUSF9BUkVTID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtcnRtcCwkKENGRykpLC1ydG1wKQorV0lUSF9SVE1QID0gMQorV0lUSF9TU0wgPSAxCitXSVRIX1pMSUIgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1zc2gyLCQoQ0ZHKSksLXNzaDIpCitXSVRIX1NTSDIgPSAxCitXSVRIX1NTTCA9IDEKK1dJVEhfWkxJQiA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLWF4dGxzLCQoQ0ZHKSksLWF4dGxzKQorV0lUSF9BWFRMUyA9IDEKK1dJVEhfU1NMID0KK2Vsc2UKK2lmZXEgKCQoZmluZHN0cmluZyAtc3NsLCQoQ0ZHKSksLXNzbCkKK1dJVEhfU1NMID0gMQorZW5kaWYKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLXpsaWIsJChDRkcpKSwtemxpYikKK1dJVEhfWkxJQiA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLWlkbiwkKENGRykpLC1pZG4pCitXSVRIX0lETiA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLXNwbmVnbywkKENGRykpLC1zcG5lZ28pCitXSVRIX1NQTkVHTyA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLWlwdjYsJChDRkcpKSwtaXB2NikKK0VOQUJMRV9JUFY2ID0gMQorZW5kaWYKKworaWZkZWYgV0lUSF9BUkVTCisJSU5DTFVERVMgKz0gLUkkKExJQkNBUkVTX1BBVEgpCisJTERMSUJTICs9ICQoTElCQ0FSRVNfUEFUSCkvbGliY2FyZXMuJChMSUJFWFQpCitlbmRpZgoraWZkZWYgV0lUSF9TU0gyCisJSU5DTFVERVMgKz0gLUkkKExJQlNTSDJfUEFUSCkvaW5jbHVkZQoraWZkZWYgTElOS19TVEFUSUMKKwlMRExJQlMgKz0gJChMSUJTU0gyX1BBVEgpL253L2xpYnNzaDIuJChMSUJFWFQpCitlbHNlCisJTU9EVUxFUyArPSBsaWJzc2gyLm5sbQorCUlNUE9SVFMgKz0gQCQoTElCU1NIMl9QQVRIKS9udy9saWJzc2gyLmltcAorZW5kaWYKK2VuZGlmCitpZmRlZiBXSVRIX1JUTVAKKwlJTkNMVURFUyArPSAtSSQoTElCUlRNUF9QQVRIKQorCUxETElCUyArPSAkKExJQlJUTVBfUEFUSCkvbGlicnRtcC9saWJydG1wLiQoTElCRVhUKQorZW5kaWYKK2lmZGVmIFdJVEhfU1NMCisJSU5DTFVERVMgKz0gLUkkKE9QRU5TU0xfUEFUSCkvb3V0aW5jX253XyQoTElCQVJDSF9MKQorCUxETElCUyArPSAkKE9QRU5TU0xfUEFUSCkvb3V0X253XyQoTElCQVJDSF9MKS9zc2wuJChMSUJFWFQpCisJTERMSUJTICs9ICQoT1BFTlNTTF9QQVRIKS9vdXRfbndfJChMSUJBUkNIX0wpL2NyeXB0by4kKExJQkVYVCkKKwlJTVBPUlRTICs9IEdldFByb2Nlc3NTd2l0Y2hDb3VudCBSdW5uaW5nUHJvY2VzcworCUlOU1RERVAgKz0gY2EtYnVuZGxlLmNydAoraWZkZWYgV0lUSF9TUE5FR08KKwlJTkNMVURFUyArPSAtSSQoRkJPUEVOU1NMX1BBVEgpL2luY2x1ZGUKKwlMRExJQlMgKz0gJChGQk9QRU5TU0xfUEFUSCkvbncvZmJvcGVuc3NsLiQoTElCRVhUKQorZW5kaWYKK2Vsc2UKK2lmZGVmIFdJVEhfQVhUTFMKKwlJTkNMVURFUyArPSAtSSQoQVhUTFNfUEFUSCkvaW5jCitpZmRlZiBMSU5LX1NUQVRJQworCUxETElCUyArPSAkKEFYVExTX1BBVEgpL2xpYi9saWJheHRscy4kKExJQkVYVCkKK2Vsc2UKKwlNT0RVTEVTICs9IGxpYmF4dGxzLm5sbQorCUlNUE9SVFMgKz0gJChBWFRMU19QQVRIKS9saWIvbGliYXh0bHMuaW1wCitlbmRpZgorCUlOU1RERVAgKz0gY2EtYnVuZGxlLmNydAorZW5kaWYKK2VuZGlmCitpZmRlZiBXSVRIX1pMSUIKKwlJTkNMVURFUyArPSAtSSQoWkxJQl9QQVRIKQoraWZkZWYgTElOS19TVEFUSUMKKwlMRExJQlMgKz0gJChaTElCX1BBVEgpL253LyQoTElCQVJDSCkvbGliei4kKExJQkVYVCkKK2Vsc2UKKwlNT0RVTEVTICs9IGxpYnoubmxtCisJSU1QT1JUUyArPSBAJChaTElCX1BBVEgpL253LyQoTElCQVJDSCkvbGliei5pbXAKK2VuZGlmCitlbmRpZgoraWZkZWYgV0lUSF9JRE4KKwlJTkNMVURFUyArPSAtSSQoTElCSUROX1BBVEgpL2luY2x1ZGUKKwlMRExJQlMgKz0gJChMSUJJRE5fUEFUSCkvbGliL2xpYmlkbi4kKExJQkVYVCkKK2VuZGlmCisKK2lmZXEgKCQoTElCQVJDSCksTElCQykKKwlJTkNMVURFUyArPSAtSSQoTkRLX0xJQkMpL2luY2x1ZGUKKwkjIElOQ0xVREVTICs9IC1JJChOREtfTElCQykvaW5jbHVkZS9ua3MKKwkjIElOQ0xVREVTICs9IC1JJChOREtfTElCQykvaW5jbHVkZS93aW5zb2NrCisJQ0ZMQUdTICs9IC1EX1BPU0lYX1NPVVJDRQorZWxzZQorCUlOQ0xVREVTICs9IC1JJChOREtfQ0xJQikvaW5jbHVkZS9ubG0KKwkjIElOQ0xVREVTICs9IC1JJChOREtfQ0xJQikvaW5jbHVkZS9ubG0vb2Jzb2xldGUKKwkjIElOQ0xVREVTICs9IC1JJChOREtfQ0xJQikvaW5jbHVkZQorZW5kaWYKK2lmbmRlZiBESVNBQkxFX0xEQVAKKwlJTkNMVURFUyArPSAtSSQoTkRLX0xEQVApLyQoTElCQVJDSF9MKS9pbmMKK2VuZGlmCitDRkxBR1MJKz0gJChJTkNMVURFUykKKworaWZlcSAoJChNVFNBRkUpLFlFUykKKwlYRENPUFQgPSAtbgorZW5kaWYKK2lmZXEgKCQoTVRTQUZFKSxOTykKKwlYRENPUFQgPSAtdQorZW5kaWYKK2lmZGVmIFhEQ09QVAorCVhEQ0RBVEEgPSAkKE9CSkRJUikvJChUQVJHRVQpLnhkYworZW5kaWYKKworaWZlcSAoJChmaW5kc3RyaW5nIC9zaCwkKFNIRUxMKSksL3NoKQorREwJPSAnCitEUwk9IC8KK1BDVAk9ICUKKyMtaW5jbHVkZSAkKE5ES0JBU0UpL25sbWNvbnYvbmNwZnMuaW5jCitlbHNlCitEUwk9IFxcCitQQ1QJPSAlJQorZW5kaWYKKworIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgdGhlIENTT1VSQ0VTIGFuZCBISEVBREVSUyBkZWZpbmVzCitpbmNsdWRlIE1ha2VmaWxlLmluYworCitPQkpTCTo9ICQocGF0c3Vic3QgJS5jLCQoT0JKRElSKS8lLm8sJChzdHJpcCAkKENTT1VSQ0VTKSkpICQoT0JKRElSKS9ud29zLm8KKworT0JKTAk9ICQoT0JKUykgJChPQkpESVIpL253bGliLm8gJChMRExJQlMpCisKK2FsbDogbGliIG5sbQorCitubG06IHByZWJ1aWxkICQoVEFSR0VUKS5ubG0KKworbGliOiBwcmVidWlsZCAkKFRBUkdFVCkuJChMSUJFWFQpCisKK3ByZWJ1aWxkOiAkKE9CSkRJUikgJChDVVJMX0lOQykvY3VybC9jdXJsYnVpbGQuaCAkKE9CSkRJUikvdmVyc2lvbi5pbmMgY3VybF9jb25maWcuaAorCiskKE9CSkRJUikvJS5vOiAlLmMKKyMJQGVjaG8gQ29tcGlsaW5nICQ8CisJJChDQykgJChDRkxBR1MpIC1jICQ8IC1vICRACisKKyQoT0JKRElSKS92ZXJzaW9uLmluYzogLi4vaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaCAkKE9CSkRJUikKKwlAZWNobyBDcmVhdGluZyAkQAorCUAkKEFXSykgLWYgLi4vcGFja2FnZXMvTmV0V2FyZS9nZXRfdmVyLmF3ayAkPCA+ICRACisKK2luc3RhbGw6ICQoSU5TVERJUikgYWxsICQoSU5TVERFUCkKKwlAJChDUCkgJChUQVJHRVQpLm5sbSAkKElOU1RESVIpCisJQCQoQ1ApICQoVEFSR0VUKS4kKExJQkVYVCkgJChJTlNURElSKQorCUAkKENQKSAuLi9DSEFOR0VTICQoSU5TVERJUikKKwlAJChDUCkgLi4vQ09QWUlORyAkKElOU1RESVIpCisJQCQoQ1ApIC4uL1JFQURNRSAkKElOU1RESVIpCisJQCQoQ1ApIC4uL1JFTEVBU0UtTk9URVMgJChJTlNURElSKQoraWZkZWYgV0lUSF9TU0wKKwlALSQoQ1ApIGNhLWJ1bmRsZS5jcnQgJChJTlNURElSKS9jYS1idW5kbGUuY3J0CitlbmRpZgorCitjbGVhbjoKKwktJChSTSkgY3VybF9jb25maWcuaAorCS0kKFJNKSAtciAkKE9CSkRJUikKKworZGlzdGNsZWFuIHZjbGVhbjogY2xlYW4KKwktJChSTSkgJChUQVJHRVQpLiQoTElCRVhUKSAkKFRBUkdFVCkubmxtCisJLSQoUk0pIGNlcnRkYXRhLnR4dCBjYS1idW5kbGUuY3J0CisKKyQoT0JKRElSKSAkKElOU1RESVIpOgorCUAkKE1LRElSKSAkQAorCiskKFRBUkdFVCkuJChMSUJFWFQpOiAkKE9CSlMpCisJQGVjaG8gQ3JlYXRpbmcgJEAKKwlALSQoUk0pICRACisJQCQoQVIpICQoQVJGTEFHUykgJEAgJF4KK2lmZGVmIFJBTkxJQgorCUAkKFJBTkxJQikgJEAKK2VuZGlmCisKKyQoVEFSR0VUKS5ubG06ICQoT0JKRElSKS8kKFRBUkdFVCkuZGVmICQoT0JKTCkgJChYRENEQVRBKQorCUBlY2hvIExpbmtpbmcgJEAKKwlALSQoUk0pICRACisJQCQoTEQpICQoTERGTEFHUykgJDwKKworJChPQkpESVIpLyUueGRjOiBNYWtlZmlsZS5uZXR3YXJlCisJQGVjaG8gQ3JlYXRpbmcgJEAKKwlAJChNUEtYREMpICQoWERDT1BUKSAkQAorCiskKE9CSkRJUikvJS5kZWY6IE1ha2VmaWxlLm5ldHdhcmUKKwlAZWNobyAkKERMKSMgREVGIGZpbGUgZm9yIGxpbmtpbmcgd2l0aCAkKExEKSQoREwpID4gJEAKKwlAZWNobyAkKERMKSMgRG8gbm90IGVkaXQgdGhpcyBmaWxlIC0gaXQgaXMgY3JlYXRlZCBieSBtYWtlISQoREwpID4+ICRACisJQGVjaG8gJChETCkjIEFsbCB5b3VyIGNoYW5nZXMgd2lsbCBiZSBsb3N0ISEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpIyQoREwpID4+ICRACisJQGVjaG8gJChETCljb3B5cmlnaHQgIiQoQ09QWVIpIiQoREwpID4+ICRACisJQGVjaG8gJChETClkZXNjcmlwdGlvbiAiJChERVNDUikiJChETCkgPj4gJEAKKwlAZWNobyAkKERMKXZlcnNpb24gJChWRVJTSU9OKSQoREwpID4+ICRACitpZmRlZiBOTE1UWVBFCisJQGVjaG8gJChETCl0eXBlICQoTkxNVFlQRSkkKERMKSA+PiAkQAorZW5kaWYKK2lmZGVmIFNUQUNLCisJQGVjaG8gJChETClzdGFjayAkKFNUQUNLKSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgU0NSRUVOCisJQGVjaG8gJChETClzY3JlZW5uYW1lICIkKFNDUkVFTikiJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKXNjcmVlbm5hbWUgIkRFRkFVTFQiJChETCkgPj4gJEAKK2VuZGlmCitpZm5lcSAoJChEQiksTkRFQlVHKQorCUBlY2hvICQoREwpZGVidWckKERMKSA+PiAkQAorZW5kaWYKKwlAZWNobyAkKERMKXRocmVhZG5hbWUgIiQoVEFSR0VUKSIkKERMKSA+PiAkQAoraWZkZWYgWERDREFUQQorCUBlY2hvICQoREwpeGRjZGF0YSAkKFhEQ0RBVEEpJChETCkgPj4gJEAKK2VuZGlmCisJQGVjaG8gJChETClmbGFnX29uIDY0JChETCkgPj4gJEAKK2lmZXEgKCQoTElCQVJDSCksQ0xJQikKKwlAZWNobyAkKERMKXN0YXJ0IF9QcmVsdWRlJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWV4aXQgX1N0b3AkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19DTElCKS9pbXBvcnRzL2NsaWIuaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfQ0xJQikvaW1wb3J0cy90aHJlYWRzLmltcCQoREwpID4+ICRACisJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0NMSUIpL2ltcG9ydHMvbmxtbGliLmltcCQoREwpID4+ICRACisJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0NMSUIpL2ltcG9ydHMvc29ja2xpYi5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpbW9kdWxlIGNsaWIkKERMKSA+PiAkQAoraWZuZGVmIERJU0FCTEVfTERBUAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19MREFQKS9jbGliL2ltcG9ydHMvbGRhcHNkay5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19MREFQKS9jbGliL2ltcG9ydHMvbGRhcHNzbC5pbXAkKERMKSA+PiAkQAorIwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfTERBUCkvY2xpYi9pbXBvcnRzL2xkYXB4LmltcCQoREwpID4+ICRACisJQGVjaG8gJChETCltb2R1bGUgbGRhcHNkayBsZGFwc3NsJChETCkgPj4gJEAKK2VuZGlmCitlbHNlCitpZmVxICgkKFBPU0lYRkwpLDEpCisJQGVjaG8gJChETClmbGFnX29uIDQxOTQzMDQkKERMKSA+PiAkQAorZW5kaWYKKwlAZWNobyAkKERMKXBzZXVkb3ByZWVtcHRpb24kKERMKSA+PiAkQAoraWZlcSAoJChmaW5kc3RyaW5nIHBvc2l4cHJlLCQoUFJFTFVERSkpLHBvc2l4cHJlKQorCUBlY2hvICQoREwpc3RhcnQgUE9TSVhfU3RhcnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpZXhpdCBQT1NJWF9TdG9wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWNoZWNrIFBPU0lYX0NoZWNrVW5sb2FkJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKXN0YXJ0IF9MaWJDUHJlbHVkZSQoREwpID4+ICRACisJQGVjaG8gJChETClleGl0IF9MaWJDUG9zdGx1ZGUkKERMKSA+PiAkQAorCUBlY2hvICQoREwpY2hlY2sgX0xpYkNDaGVja1VubG9hZCQoREwpID4+ICRACitlbmRpZgorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19MSUJDKS9pbXBvcnRzL2xpYmMuaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfTElCQykvaW1wb3J0cy9uZXR3YXJlLmltcCQoREwpID4+ICRACisJQGVjaG8gJChETCltb2R1bGUgbGliYyQoREwpID4+ICRACitpZm5kZWYgRElTQUJMRV9MREFQCisJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0xEQVApL2xpYmMvaW1wb3J0cy9sbGRhcHNkay5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19MREFQKS9saWJjL2ltcG9ydHMvbGxkYXBzc2wuaW1wJChETCkgPj4gJEAKKyMJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0xEQVApL2xpYmMvaW1wb3J0cy9sbGRhcHguaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKW1vZHVsZSBsbGRhcHNkayBsbGRhcHNzbCQoREwpID4+ICRACitlbmRpZgorZW5kaWYKK2lmZGVmIE1PRFVMRVMKKwlAZWNobyAkKERMKW1vZHVsZSAkKE1PRFVMRVMpJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBFWFBPUlRTCisJQGVjaG8gJChETClleHBvcnQgJChFWFBPUlRTKSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgSU1QT1JUUworCUBlY2hvICQoREwpaW1wb3J0ICQoSU1QT1JUUykkKERMKSA+PiAkQAorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyBubG1jb252LCQoTEQpKSxubG1jb252KQorCUBlY2hvICQoREwpaW5wdXQgJChQUkVMVURFKSQoREwpID4+ICRACisJQGVjaG8gJChETClpbnB1dCAkKE9CSkwpJChETCkgPj4gJEAKKyNpZmRlZiBMRExJQlMKKyMJQGVjaG8gJChETClpbnB1dCAkKExETElCUykkKERMKSA+PiAkQAorI2VuZGlmCisJQGVjaG8gJChETClvdXRwdXQgJChUQVJHRVQpLm5sbSQoREwpID4+ICRACitlbmRpZgorCitjdXJsX2NvbmZpZy5oOiBNYWtlZmlsZS5uZXR3YXJlCisJQGVjaG8gQ3JlYXRpbmcgJEAKKwlAZWNobyAkKERMKS8qICRAIGZvciBOZXRXYXJlIHRhcmdldC4kKERMKSA+ICRACisJQGVjaG8gJChETCkqKiBEbyBub3QgZWRpdCB0aGlzIGZpbGUgLSBpdCBpcyBjcmVhdGVkIGJ5IG1ha2UhJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSoqIEFsbCB5b3VyIGNoYW5nZXMgd2lsbCBiZSBsb3N0ISEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpKi8kKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2lmbmRlZiBORVRXQVJFJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNlcnJvciBUaGlzICQobm90ZGlyICRAKSBpcyBjcmVhdGVkIGZvciBOZXRXYXJlIHBsYXRmb3JtISQoREwpID4+ICRACisJQGVjaG8gJChETCkjZW5kaWYkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBWRVJTSU9OICIkKExJQkNVUkxfVkVSU0lPTl9TVFIpIiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJhIHN1aXRhYmxlIGN1cmwgbWFpbGluZyBsaXN0ID0+IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC8iJChETCkgPj4gJEAKK2lmZXEgKCQoTElCQVJDSCksQ0xJQikKKwlAZWNobyAkKERMKSNkZWZpbmUgT1MgImk1ODYtcGMtY2xpYi1OZXRXYXJlIiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIE5FVERCX1VTRV9JTlRFUk5FVCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJJQ01QIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUk5JQ01QIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfQVJHMSBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfQVJHMiBjaGFyICokKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfQVJHMyBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfQVJHNCBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfUkVUViBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyIGNoYXIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzMgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc0IGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSBzdHJ1Y3Qgc29ja2FkZHIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzYgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9SRVRWIGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfUVVBTF9BUkcyJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX0FSRzEgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX0FSRzIgY2hhciAqJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX0FSRzMgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX0FSRzQgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX1JFVFYgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0laRU9GX1NJWkVfVCA0JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgcHJlc3NhbnlrZXkgUHJlc3NBbnlLZXlUb0NvbnRpbnVlJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKSNkZWZpbmUgT1MgImk1ODYtcGMtbGliYy1OZXRXYXJlIiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfRlRSVU5DQVRFIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xPTkdMT05HIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NURElOVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSTENBVCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJMQ1BZIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUlRPTEwgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1BBUkFNX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1RFUk1JT1NfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzEgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzIgdm9pZCAqJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzMgc2l6ZV90JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzQgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX1JFVFYgc3NpemVfdCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzIgdm9pZCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBzaXplX3QkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkciQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBzaXplX3QkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX1JFVFYgc3NpemVfdCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMl9JU19WT0lEIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTRU5EX1FVQUxfQVJHMiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkcxIGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkcyIHZvaWQgKiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkczIHNpemVfdCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkc0IGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9SRVRWIHNzaXplX3QkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTSVpFT0ZfT0ZGX1QgOCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNJWkVPRl9TSVpFX1QgOCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIF9MQVJHRUZJTEUgMSQoREwpID4+ICRACitpZmRlZiBFTkFCTEVfSVBWNgorCUBlY2hvICQoREwpI2RlZmluZSBFTkFCTEVfSVBWNiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9BRl9JTkVUNiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9QRl9JTkVUNiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9GUkVFQUREUklORk8gMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSVUNUX0FERFJJTkZPIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUlVDVF9JTjZfQUREUiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42IDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTSVpFT0ZfU1RSVUNUX0lONl9BRERSIDE2JChETCkgPj4gJEAKK2VuZGlmCitlbmRpZgorCUBlY2hvICQoREwpI2RlZmluZSBVU0VfTUFOVUFMIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0FTU0VSVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0VSUk5PX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfRVJSX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfRkNOVExfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfR0VUUFJPVE9CWU5BTUUgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfR01USU1FX1IgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfSU5FVF9BRERSIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0lPQ1RMIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0lPQ1RMX0ZJT05CSU8gMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTElNSVRTX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTEwgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTE9DQUxUSU1FX1IgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTUFMTE9DX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1JFQ1YgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfUkVDVkZST00gMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU0VMRUNUIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NFTkQgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU0VUSk1QX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NJR05BTCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1QgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU09DS0VUIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NURExJQl9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUkRVUCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJGVElNRSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJTVFIgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX0lPQ1RMX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1RJTUVfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9VTkFNRSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9VTklTVERfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9VVElNRSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9VVElNRV9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1dSSVRFViAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0laRU9GX0lOVCA0JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0laRU9GX1NIT1JUIDIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTSVpFT0ZfU1RSVUNUX0lOX0FERFIgNCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNURENfSEVBREVSUyAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEkKERMKSA+PiAkQAoraWZkZWYgRElTQUJMRV9MREFQCisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfRElTQUJMRV9MREFQIDEkKERMKSA+PiAkQAorZWxzZQorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX0hBU19OT1ZFTExfTERBUFNESyAxJChETCkgPj4gJEAKK2lmbmRlZiBESVNBQkxFX0xEQVBTCisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTERBUF9TU0wgMSQoREwpID4+ICRACitlbmRpZgorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xEQVBfU1NMX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTERBUF9VUkxfUEFSU0UgMSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgTldfV0lOU09DSworCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0NMT1NFU09DS0VUIDEkKERMKSA+PiAkQAorZWxzZQorCUBlY2hvICQoREwpI2RlZmluZSBVU0VfQlNEX1NPQ0tFVFMgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NZU19TT0NLSU9fSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9ORVREQl9IIDEkKERMKSA+PiAkQAorZW5kaWYKK2lmZGVmIFdJVEhfQVJFUworCUBlY2hvICQoREwpI2RlZmluZSBVU0VfQVJFUyAxJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBXSVRIX1pMSUIKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9aTElCX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTElCWiAxJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBXSVRIX1NTTAorCUBlY2hvICQoREwpI2RlZmluZSBVU0VfU1NMRUFZIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBVU0VfT1BFTlNTTCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9PUEVOU1NMX1g1MDlfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9PUEVOU1NMX1NTTF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX09QRU5TU0xfUlNBX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfT1BFTlNTTF9QRU1fSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9PUEVOU1NMX0VSUl9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX09QRU5TU0xfQ1JZUFRPX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfT1BFTlNTTF9FTkdJTkVfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9MSUJTU0wgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTElCQ1JZUFRPIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBPUEVOU1NMX05PX0tSQjUgMSQoREwpID4+ICRACitpZmRlZiBXSVRIX1NQTkVHTworCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NQTkVHTyAxJChETCkgPj4gJEAKK2VuZGlmCitlbHNlCitpZmRlZiBXSVRIX0FYVExTCisJQGVjaG8gJChETCkjZGVmaW5lIFVTRV9BWFRMUyAxJChETCkgPj4gJEAKK2VuZGlmCitlbmRpZgoraWZkZWYgV0lUSF9TU0gyCisJQGVjaG8gJChETCkjZGVmaW5lIFVTRV9MSUJTU0gyIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xJQlNTSDJfSCAxJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBXSVRIX0lETgorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xJQklETiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9UTERfSCAxJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBXSVRIX1JUTVAKKwlAZWNobyAkKERMKSNkZWZpbmUgVVNFX0xJQlJUTVAgMSQoREwpID4+ICRACitlbmRpZgorCUBlY2hvICQoREwpI2lmZGVmIF9fR05VQ19fJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfR0NDIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2Vsc2UkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1ZBUklBRElDX01BQ1JPU19DOTkgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZW5kaWYkKERMKSA+PiAkQAoraWZkZWYgQ0FCVU5ETEUKKwlAZWNobyAkKERMKSNkZWZpbmUgQ1VSTF9DQV9CVU5ETEUgIiQoQ0FCVU5ETEUpIiQoREwpID4+ICRACitlbHNlCisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfQ0FfQlVORExFIGdldGVudigiQ1VSTF9DQV9CVU5ETEUiKSQoREwpID4+ICRACitlbmRpZgorCitGT1JDRTogOworCitpbmZvOiAkKE9CSkRJUikvdmVyc2lvbi5pbmMKKwlAZWNobyBDb25maWd1cmVkIHRvIGJ1aWxkICQoVEFSR0VUKSB3aXRoIHRoZXNlIG9wdGlvbnM6CisJQGVjaG8gbGliYXJjaGl0ZWN0dXJlOiAkKExJQkFSQ0gpCisJQGVjaG8gY3VybCB2ZXJzaW9uOiAgICAkKExJQkNVUkxfVkVSU0lPTl9TVFIpCisJQGVjaG8gY29tcGlsZXIvbGlua2VyOiAkKENDKSAvICQoTEQpCitpZmRlZiBDQUJVTkRMRQorCUBlY2hvIGNhLWJ1bmRsZSBwYXRoOiAgJChDQUJVTkRMRSkKK2VuZGlmCitpZmRlZiBXSVRIX1NTTAorCUBlY2hvIFNTTCBzdXBwb3J0OiAgICAgZW5hYmxlZCAoT3BlblNTTCkKK2Vsc2UKKwlAZWNobyBTU0wgc3VwcG9ydDogICAgIG5vCitlbmRpZgoraWZkZWYgV0lUSF9TU0gyCisJQGVjaG8gU1NIMiBzdXBwb3J0OiAgICBlbmFibGVkIChsaWJzc2gyKQorZWxzZQorCUBlY2hvIFNTSDIgc3VwcG9ydDogICAgbm8KK2VuZGlmCitpZmRlZiBXSVRIX1pMSUIKKwlAZWNobyB6bGliIHN1cHBvcnQ6ICAgIGVuYWJsZWQKK2Vsc2UKKwlAZWNobyB6bGliIHN1cHBvcnQ6ICAgIG5vCitlbmRpZgoraWZkZWYgV0lUSF9BUkVTCisJQGVjaG8gYy1hcmVzIHN1cHBvcnQ6ICBlbmFibGVkCitlbHNlCisJQGVjaG8gYy1hcmVzIHN1cHBvcnQ6ICBubworZW5kaWYKK2lmZGVmIEVOQUJMRV9JUFY2CisJQGVjaG8gaXB2NiBzdXBwb3J0OiAgICBlbmFibGVkCitlbHNlCisJQGVjaG8gaXB2NiBzdXBwb3J0OiAgICBubworZW5kaWYKKworJChMSUJDQVJFU19QQVRIKS9saWJjYXJlcy4kKExJQkVYVCk6CisJJChNQUtFKSAtQyAkKExJQkNBUkVTX1BBVEgpIC1mIE1ha2VmaWxlLm5ldHdhcmUgbGliCisKK2NhLWJ1bmRsZS5jcnQ6IG1rLWNhLWJ1bmRsZS5wbAorCUBlY2hvIENyZWF0aW5nICRACisJQC0kKFBFUkwpICQ8IC1iIC1uICRACisKKyQoQ1VSTF9JTkMpL2N1cmwvY3VybGJ1aWxkLmg6IE1ha2VmaWxlLm5ldHdhcmUgRk9SQ0UKKwlAZWNobyBDcmVhdGluZyAkQAorCUBlY2hvICQoREwpLyogJEAgaW50ZW5kZWQgZm9yIE5ldFdhcmUgdGFyZ2V0LiQoREwpID4gJEAKKwlAZWNobyAkKERMKSoqIERvIG5vdCBlZGl0IHRoaXMgZmlsZSAtIGl0IGlzIGNyZWF0ZWQgYnkgbWFrZSEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpKiogQWxsIHlvdXIgY2hhbmdlcyB3aWxsIGJlIGxvc3QhISQoREwpID4+ICRACisJQGVjaG8gJChETCkqLyQoREwpID4+ICRACisJQGVjaG8gJChETCkjaWZuZGVmIE5FVFdBUkUkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2Vycm9yIFRoaXMgJChub3RkaXIgJEApIGlzIGNyZWF0ZWQgZm9yIE5ldFdhcmUgcGxhdGZvcm0hJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNlbmRpZiQoREwpID4+ICRACisJQGVjaG8gJChETCkjaWZuZGVmIF9fQ1VSTF9DVVJMQlVJTERfSCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIF9fQ1VSTF9DVVJMQlVJTERfSCQoREwpID4+ICRACitpZmVxICgkKExJQkFSQ0gpLExJQkMpCisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfU0laRU9GX0xPTkcgNCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIHVuc2lnbmVkIGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfU0laRU9GX0NVUkxfU09DS0xFTl9UIDQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX1RZUEVPRl9DVVJMX09GRl9UIGxvbmcgbG9uZyQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgImxsZCIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UVSAibGx1IiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfRk9STUFUX09GRl9UICIkKFBDVClsbGQiJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCA4JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCBMTCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVIFVMTCQoREwpID4+ICRACitlbHNlCisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfU0laRU9GX0xPTkcgNCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfU0laRU9GX0NVUkxfU09DS0xFTl9UIDQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX1RZUEVPRl9DVVJMX09GRl9UIGxvbmckKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICJsZCIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UVSAibHUiJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgQ1VSTF9GT1JNQVRfT0ZGX1QgIiQoUENUKWxkIiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgNCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfU1VGRklYX0NVUkxfT0ZGX1QgTCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVIFVMJChETCkgPj4gJEAKK2VuZGlmCisJQGVjaG8gJChETCl0eXBlZGVmIENVUkxfVFlQRU9GX0NVUkxfU09DS0xFTl9UIGN1cmxfc29ja2xlbl90OyQoREwpID4+ICRACisJQGVjaG8gJChETCl0eXBlZGVmIENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QgY3VybF9vZmZfdDskKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2VuZGlmIC8qIF9fQ1VSTF9DVVJMQlVJTERfSCAqLyQoREwpID4+ICRACisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS52YzEwIGIvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLnZjMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYzOWU5YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS52YzEwCkBAIC0wLDAgKzEsNjI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfDQorIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfA0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wNCisjDQorIyBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoDQorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zDQorIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLg0KKyMNCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbA0KKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIw0KKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisjIEFsbCBmaWxlcyBpbiB0aGUgTWFrZWZpbGUudmMqIHNlcmllcyBhcmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUNCisjIG9uZSBtYWRlIGZvciBNU1ZDIHZlcnNpb24gNi4gQWxhcywgaWYgeW91IHdhbnQgdG8gZG8gY2hhbmdlcyB0byBhbnkgb2YgdGhlDQorIyBmaWVscyBhbmQgc2VuZCBiYWNrIHRvIHRoZSBwcm9qZWN0LCBlZGl0IHRoZSB2ZXJzaW9uIHNpeCwgbWFrZSB5b3VyIGRpZmYgYW5kDQorIyBtYWlsIGN1cmwtbGlicmFyeS4NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjDQorIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgbGliY3VybCB3aXRoIE1TVkMxMA0KKyMNCisjIFVzYWdlOiBzZWUgdXNhZ2UgbWVzc2FnZSBiZWxvdw0KKyMgICAgICAgIFNob3VsZCBiZSBpbnZva2VkIGZyb20gXGxpYiBkaXJlY3RvcnkNCisjICAgICAgICBFZGl0IHRoZSBwYXRocyBhbmQgZGVzaXJlZCBsaWJyYXJ5IG5hbWUNCisjICAgICAgICBTU0wgcGF0aCBpcyBvbmx5IHJlcXVpcmVkIGlmIHlvdSBpbnRlbmQgY29tcGlsaW5nDQorIyAgICAgICAgd2l0aCBTU0wuDQorIw0KKyMgVGhpcyBtYWtlIGZpbGUgbGVhdmVzIHRoZSByZXN1bHQgZWl0aGVyIGEgLmxpYiBvciAuZGxsIGZpbGUNCisjIGluIHRoZSBcbGliIGRpcmVjdG9yeS4gSXQgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBcbGliDQorIyBkaXJlY3RvcnkuDQorIw0KKyMgQW4gb3B0aW9uIHdvdWxkIGhhdmUgYmVlbiB0byBhbGxvdyB0aGUgc291cmNlIGRpcmVjdG9yeSB0bw0KKyMgYmUgc3BlY2lmaWVkLCBidXQgSSBzYXcgbm8gcmVxdWlyZW1lbnQuDQorIw0KKyMgQW5vdGhlciBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGxlYXZlIHRoZSAubGliIGFuZCAuZGxsDQorIyBmaWxlcyBpbiB0aGUgImNmZyIgZGlyZWN0b3J5LCBidXQgdGhlbiB0aGUgbWFrZSBmaWxlDQorIyBpbiBcc3JjIHdvdWxkIG5lZWQgdG8gYmUgY2hhbmdlZC4NCisjDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIFZlcmlmeSB0aGF0IGN1cnJlbnQgc3ViZGlyIGlzIGxpYmN1cmwncyAnbGliJw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyFJRiAhIEVYSVNUKC5cY3VybF9hZGRyaW5mby5jKQ0KKyEgIE1FU1NBR0UgQ2FuIG5vdCBwcm9jZXNzIHRoaXMgbWFrZWZpbGUgZnJvbSBvdXRzaWRlIG9mIGxpYmN1cmwncyAnbGliJyBzdWJkaXJlY3RvcnkuDQorISAgTUVTU0FHRSBDaGFuZ2UgdG8gbGliY3VybCdzICdsaWInIHN1YmRpcmVjdG9yeSwgYW5kIHRyeSBhZ2Fpbi4NCishICBFUlJPUiAgIFNlZSBwcmV2aW91cyBtZXNzYWdlLg0KKyFFTkRJRg0KKw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyBNYWtlZmlsZS5tc3ZjLm5hbWVzIHByb3ZpZGVzIGxpYmN1cmwgZmlsZSBuYW1lcw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorIUlOQ0xVREUgLi5cTWFrZWZpbGUubXN2Yy5uYW1lcw0KKw0KKyFJRk5ERUYgT1BFTlNTTF9QQVRIDQorT1BFTlNTTF9QQVRIICAgPSAuLi8uLi9vcGVuc3NsLTAuOS44cg0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgTElCU1NIMl9QQVRIDQorTElCU1NIMl9QQVRIICAgPSAuLi8uLi9saWJzc2gyLTEuMi44DQorIUVORElGDQorDQorIUlGTkRFRiBaTElCX1BBVEgNCitaTElCX1BBVEggID0gLi4vLi4vemxpYi0xLjIuNQ0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgTUFDSElORQ0KK01BQ0hJTkUgID0gWDg2DQorIUVORElGDQorDQorIyBVU0VfV0lORE9XU19TU1BJIHVzZXMgd2luZG93cyBsaWJyYXJpZXMgdG8gYWxsb3cgTlRMTSBhdXRoZW50aWNhdGlvbg0KKyMgd2l0aG91dCBhbiBvcGVuc3NsIGluc3RhbGxhdGlvbiBhbmQgb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGF1dGhlbnRpY2F0ZQ0KKyMgdXNpbmcgdGhlICJjdXJyZW50IGxvZ2dlZCBpbiB1c2VyIi4gU2luY2UgYXQgbGVhc3Qgd2l0aCBNU1ZDMTAgdGhlIHNzcGkuaA0KKyMgaGVhZGVyIGlzIGJyb2tlbiBpdCBpcyBlaXRoZXIgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgV2luZG93cyBTREssDQorIyBvciB0byBmaXggc3NwaS5oIHdpdGggYWRkaW5nIHRoaXMgZGVmaW5lIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3NwaS5oOg0KKyMgI2RlZmluZSBGcmVlQ3JlZGVudGlhbEhhbmRsZSBGcmVlQ3JlZGVudGlhbHNIYW5kbGUNCisjDQorIyBJZiwgZm9yIHNvbWUgcmVhc29uIHRoZSBXaW5kb3dzIFNESyBpcyBpbnN0YWxsZWQgYnV0IG5vdCBpbnN0YWxsZWQNCisjIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uLCB5b3UgY2FuIHNwZWNpZnkgV0lORE9XU19TREtfUEFUSC4NCisjIEl0IGNhbiBiZSBkb3dubG9hZGVkIGZyb206DQorIyBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbXNkb3dubG9hZC9wbGF0Zm9ybXNkay9zZGt1cGRhdGUvDQorDQorIyBXSU5ET1dTX1NTUEkgPSAxDQorDQorIUlGREVGIFdJTkRPV1NfU1NQSQ0KKyFJRk5ERUYgV0lORE9XU19TREtfUEFUSA0KK1dJTkRPV1NfU0RLX1BBVEggPSAiJChQUk9HUkFNRklMRVMpXE1pY3Jvc29mdCBTREsiDQorIUVORElGDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMjIE5vdGhpbmcgbW9yZSB0byBkbyBiZWxvdyB0aGlzIGxpbmUhDQorDQorQ0NOT0RCRyAgICA9IGNsLmV4ZSAvTzIgL0ROREVCVUcNCitDQ0RFQlVHICAgID0gY2wuZXhlIC9PZCAvR20gL1ppIC9EX0RFQlVHIC9SVEMxDQorQ0ZMQUdTU1NMICA9IC9EVVNFX1NTTEVBWSAvSSAiJChPUEVOU1NMX1BBVEgpL2luYzMyIiAvSSAiJChPUEVOU1NMX1BBVEgpL2luYzMyL29wZW5zc2wiDQorQ0ZMQUdTU1NIMiA9IC9EVVNFX0xJQlNTSDIgL0RDVVJMX0RJU0FCTEVfTERBUCAvREhBVkVfTElCU1NIMiAvREhBVkVfTElCU1NIMl9IIC9ETElCU1NIMl9XSU4zMiAvRExJQlNTSDJfTElCUkFSWSAvSSAiJChMSUJTU0gyX1BBVEgpL2luY2x1ZGUiDQorQ0ZMQUdTWkxJQiA9IC9ESEFWRV9aTElCX0ggL0RIQVZFX1pMSUIgL0RIQVZFX0xJQlogL0kgIiQoWkxJQl9QQVRIKSINCitDRkxBR1MgICAgID0gL0kuIC9JLi4vaW5jbHVkZSAvbm9sb2dvIC9XMyAvRUhzYyAvRFdJTjMyIC9GRCAvYyAvREJVSUxESU5HX0xJQkNVUkwgL0RfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OPTENCitDRkxBR1NMSUIgID0gL0RDVVJMX1NUQVRJQ0xJQg0KK0xOS0RMTCAgICAgPSBsaW5rLmV4ZSAvRExMDQorTE5LTElCICAgICA9IGxpbmsuZXhlIC9saWINCitMRkxBR1MgICAgID0gL25vbG9nbyAvbWFjaGluZTokKE1BQ0hJTkUpDQorU1NMTElCUyAgICA9IGxpYmVheTMyLmxpYiBzc2xlYXkzMi5saWINCitaTElCTElCU0RMTD0gemRsbC5saWINCitaTElCTElCUyAgID0gemxpYi5saWINCitXSU5MSUJTICAgID0gd3MyXzMyLmxpYiB3bGRhcDMyLmxpYg0KK0NGTEFHUyAgICAgPSAkKENGTEFHUykNCisNCitDRkdTRVQgICAgID0gRkFMU0UNCisNCishSUZERUYgV0lORE9XU19TU1BJDQorQ0ZMQUdTID0gJChDRkxBR1MpIC9EVVNFX1dJTkRPV1NfU1NQSSAvSSQoV0lORE9XU19TREtfUEFUSClcaW5jbHVkZQ0KKyFFTkRJRg0KKw0KKyFJRkRFRiBVU0VfSVBWNg0KK0NGTEFHUyA9ICQoQ0ZMQUdTKSAvRFVTRV9JUFY2DQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIFJ1bnRpbWUgbGlicmFyeSBjb25maWd1cmF0aW9uDQorDQorUlRMSUIgICA9IC9NRA0KK1JUTElCRCAgPSAvTURkDQorDQorIUlGICIkKFJUTElCQ0ZHKSIgPT0gInN0YXRpYyINCitSVExJQiAgPSAvTVQNCitSVExJQkQgPSAvTVRkDQorIUVORElGDQorDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZQ0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSINCitUQVJHRVQgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Utc3NsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzIiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS16bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Utc3NsLXpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXNzbC1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoTEZMQUdTU1NMKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wtc3NoMi16bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC1zc2gyLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzIiDQorTEZMQUdTU1NIMiA9ICIvTElCUEFUSDokKExJQlNTSDJfUEFUSCkiDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChMRkxBR1NTU0wpICQoTEZMQUdTU1NIMikgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTU1NIMikgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoTElCU1NIMl9QQVRIKS9SZWxlYXNlL3NyYy9saWJzc2gyLmxpYiAkKFpMSUJfUEFUSCkvemxpYi5saWINCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtc3NoMi16bGliDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wtc3NoMi16bGliIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0gyID0gIi9MSUJQQVRIOiQoTElCU1NIMl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoWkxJQkxJQlMpICQoTEZMQUdTU1NMKSAkKExGTEFHU1NTSDIpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NTU0gyKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChMSUJTU0gyX1BBVEgpL1JlbGVhc2Uvc3JjL2xpYnNzaDIubGliICQoWkxJQl9QQVRIKS96bGliLmxpYg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbCINCitUQVJHRVQgPSAkKExJQkNVUkxfRFlOX0xJQl9SRUwpDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktETEwpICQoV0lOTElCUykgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX1JFTCkNCitDQyAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpDQorQ0ZHU0VUID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1kbGwtc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9EWU5fTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoTEZMQUdTU1NMKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChMSUJDVVJMX0lNUF9MSUJfUkVMKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9EWU5fTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChMSUJDVVJMX0lNUF9MSUJfUkVMKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1pMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX0RZTl9MSUJfUkVMKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NTU0wpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX1JFTCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1ZyINCitUQVJHRVQgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXNzbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzIiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctc3NsLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoWkxJQkxJQlMpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9IC9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbA0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wtZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NTU0wpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLWRsbCINCitUQVJHRVQgPSAkKExJQkNVUkxfRFlOX0xJQl9EQkcpDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktETEwpICQoV0lOTElCUykgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9EQkcpIC9QREI6JChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX1BEQikNCitDQyAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSANCitDRkdTRVQgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1kbGwtc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctZGxsLXNzbC1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfRFlOX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9EQkcpIC9QREI6JChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX1BEQikNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfRFlOX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9EQkcpIC9QREI6JChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX1BEQikNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLWRsbC1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1kbGwtc3NsLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9EWU5fTElCX0RCRykNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChMSUJDVVJMX0lNUF9MSUJfREJHKSAvUERCOiQoRElST0JKKVwkKExJQkNVUkxfRFlOX0xJQl9QREIpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIFVzYWdlDQorIw0KKyFJRiAiJChDRkdTRVQpIiA9PSAiRkFMU0UiICYmICIkKENGRykiICE9ICIiDQorIU1FU1NBR0UgVXNhZ2U6IG5tYWtlIC9mIG1ha2VmaWxlLnZjMTAgQ0ZHPTxjb25maWc+IDx0YXJnZXQ+DQorIU1FU1NBR0Ugd2hlcmUgPGNvbmZpZz4gaXMgb25lIG9mOg0KKyFNRVNTQUdFICAgcmVsZWFzZSAgICAgICAgICAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkNCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsICAgICAgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsDQorIU1FU1NBR0UgICByZWxlYXNlLXpsaWIgICAgICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsLXpsaWIgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsIGFuZCB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLXNzbC1zc2gyLXpsaWIgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIHNzbCwgc3NoMiBhbmQgemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wtZGxsICAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKyFNRVNTQUdFICAgcmVsZWFzZS16bGliLWRsbCAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsLWRsbC16bGliLWRsbCAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wgYW5kIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1kbGwgICAgICAgICAgICAgICAgICAtIHJlbGVhc2UgZHluYW1pYyBsaWJyYXJ5DQorIU1FU1NBR0UgICByZWxlYXNlLWRsbC1zc2wtZGxsICAgICAgICAgIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKyFNRVNTQUdFICAgcmVsZWFzZS1kbGwtemxpYi1kbGwgICAgICAgICAtIHJlbGVhc2UgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICBkZWJ1Zy1zc2wtc3NoMi16bGliICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wsIHNzaDIgYW5kIHpsaWINCishTUVTU0FHRSAgIGRlYnVnICAgICAgICAgICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeQ0KKyFNRVNTQUdFICAgZGVidWctc3NsICAgICAgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsDQorIU1FU1NBR0UgICBkZWJ1Zy16bGliICAgICAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCB6bGliDQorIU1FU1NBR0UgICBkZWJ1Zy1zc2wtemxpYiAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wgYW5kIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC1kbGwgICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICBkZWJ1Zy16bGliLWRsbCAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC1kbGwtemxpYi1kbGwgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLWRsbCAgICAgICAgICAgICAgICAgICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkNCishTUVTU0FHRSAgIGRlYnVnLWRsbC1zc2wtZGxsICAgICAgICAgICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKyFNRVNTQUdFICAgZGVidWctZGxsLXpsaWItZGxsICAgICAgICAgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYjENCishTUVTU0FHRSAgIGRlYnVnLWRsbC1zc2wtZGxsLXpsaWItZGxsICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorIU1FU1NBR0UgPHRhcmdldD4gY2FuIGJlIGxlZnQgYmxhbmsgaW4gd2hpY2ggY2FzZSBhbGwgaXMgYXNzdW1lZA0KKyFFUlJPUiBwbGVhc2UgY2hvb3NlIGEgdmFsaWQgY29uZmlndXJhdGlvbiAiJChDRkcpIg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBPbmx5IHRoZSBjbGVhbiB0YXJnZXQgY2FuIGJlIHVzZWQgaWYgYSBjb25maWcgd2FzIG5vdCBwcm92aWRlZC4NCisjDQorIUlGICIkKENGR1NFVCkiID09ICJGQUxTRSINCitjbGVhbjoNCisJQC1lcmFzZSAvcyAqLmRsbCAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLmV4cCAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLmlkYiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLmxpYiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLm9iaiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLnBjaCAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLnBkYiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLnJlcyAyPiBOVUwNCishRUxTRQ0KKyMgQSBjb25maWcgd2FzIHByb3ZpZGVkLCBzbyB0aGUgbGlicmFyeSBjYW4gYmUgYnVpbHQuDQorIw0KK1hfT0JKUz0gXA0KKwkkKERJUk9CSilcYXN5bi1hcmVzLm9iaiBcDQorCSQoRElST0JKKVxhc3luLXRocmVhZC5vYmogXA0KKwkkKERJUk9CSilcYmFzZTY0Lm9iaiBcDQorCSQoRElST0JKKVxjb25uZWN0Lm9iaiBcDQorCSQoRElST0JKKVxjb250ZW50X2VuY29kaW5nLm9iaiBcDQorCSQoRElST0JKKVxjb29raWUub2JqIFwNCisJJChESVJPQkopXGN1cmxfYWRkcmluZm8ub2JqIFwNCisJJChESVJPQkopXGN1cmxfZm5tYXRjaC5vYmogXA0KKwkkKERJUk9CSilcY3VybF9nZXRob3N0bmFtZS5vYmogXA0KKwkkKERJUk9CSilcY3VybF9tZW1yY2hyLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX250bG0ub2JqIFwNCisJJChESVJPQkopXGN1cmxfbnRsbV9jb3JlLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX250bG1fbXNncy5vYmogXA0KKwkkKERJUk9CSilcY3VybF9udGxtX3diLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX3JhbmQub2JqIFwNCisJJChESVJPQkopXGN1cmxfcnRtcC5vYmogXA0KKwkkKERJUk9CSilcY3VybF9zc3BpLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX3RocmVhZHMub2JqIFwNCisJJChESVJPQkopXGRpY3Qub2JqIFwNCisJJChESVJPQkopXGVhc3kub2JqIFwNCisJJChESVJPQkopXGVzY2FwZS5vYmogXA0KKwkkKERJUk9CSilcZmlsZWluZm8ub2JqIFwNCisJJChESVJPQkopXGZpbGUub2JqIFwNCisJJChESVJPQkopXGZvcm1kYXRhLm9iaiBcDQorCSQoRElST0JKKVxmdHBsaXN0cGFyc2VyLm9iaiBcDQorCSQoRElST0JKKVxmdHAub2JqIFwNCisJJChESVJPQkopXGdldGVudi5vYmogXA0KKwkkKERJUk9CSilcZ2V0aW5mby5vYmogXA0KKwkkKERJUk9CSilcZ29waGVyLm9iaiBcDQorCSQoRElST0JKKVxndGxzLm9iaiBcDQorCSQoRElST0JKKVxoYXNoLm9iaiBcDQorCSQoRElST0JKKVxobWFjLm9iaiBcDQorCSQoRElST0JKKVxob3N0YXN5bi5vYmogXA0KKwkkKERJUk9CSilcaG9zdGlwNC5vYmogXA0KKwkkKERJUk9CSilcaG9zdGlwNi5vYmogXA0KKwkkKERJUk9CSilcaG9zdGlwLm9iaiBcDQorCSQoRElST0JKKVxob3N0c3luLm9iaiBcDQorCSQoRElST0JKKVxodHRwX2NodW5rcy5vYmogXA0KKwkkKERJUk9CSilcaHR0cF9kaWdlc3Qub2JqIFwNCisJJChESVJPQkopXGh0dHBfbmVnb3RpYXRlLm9iaiBcDQorICAgICAgICAkKERJUk9CSilcaHR0cF9uZWdvdGlhdGVfc3NwaS5vYmogXA0KKwkkKERJUk9CSilcaHR0cC5vYmogXA0KKwkkKERJUk9CSilcaHR0cF9wcm94eS5vYmogXA0KKwkkKERJUk9CSilcaWYyaXAub2JqIFwNCisJJChESVJPQkopXGltYXAub2JqIFwNCisJJChESVJPQkopXGluZXRfbnRvcC5vYmogXA0KKwkkKERJUk9CSilcaW5ldF9wdG9uLm9iaiBcDQorCSQoRElST0JKKVxsZGFwLm9iaiBcDQorCSQoRElST0JKKVxsbGlzdC5vYmogXA0KKwkkKERJUk9CSilcbWQ0Lm9iaiBcDQorCSQoRElST0JKKVxtZDUub2JqIFwNCisJJChESVJPQkopXG1lbWRlYnVnLm9iaiBcDQorCSQoRElST0JKKVxtcHJpbnRmLm9iaiBcDQorCSQoRElST0JKKVxtdWx0aS5vYmogXA0KKwkkKERJUk9CSilcbmV0cmMub2JqIFwNCisJJChESVJPQkopXG5vbmJsb2NrLm9iaiBcDQorCSQoRElST0JKKVxvcGVubGRhcC5vYmogXA0KKwkkKERJUk9CSilccGFyc2VkYXRlLm9iaiBcDQorCSQoRElST0JKKVxwaW5ncG9uZy5vYmogXA0KKwkkKERJUk9CSilccG9sYXJzc2wub2JqIFwNCisJJChESVJPQkopXHBvcDMub2JqIFwNCisJJChESVJPQkopXHByb2dyZXNzLm9iaiBcDQorCSQoRElST0JKKVxyYXdzdHIub2JqIFwNCisJJChESVJPQkopXHJ0c3Aub2JqIFwNCisJJChESVJPQkopXHNlbGVjdC5vYmogXA0KKwkkKERJUk9CSilcc2VuZGYub2JqIFwNCisJJChESVJPQkopXHNoYXJlLm9iaiBcDQorCSQoRElST0JKKVxzbGlzdC5vYmogXA0KKwkkKERJUk9CSilcc210cC5vYmogXA0KKwkkKERJUk9CSilcc29ja3NfZ3NzYXBpLm9iaiBcDQorCSQoRElST0JKKVxzb2Nrcy5vYmogXA0KKwkkKERJUk9CSilcc29ja3Nfc3NwaS5vYmogXA0KKwkkKERJUk9CSilcc3BlZWRjaGVjay5vYmogXA0KKwkkKERJUk9CSilcc3BsYXkub2JqIFwNCisJJChESVJPQkopXHNzaC5vYmogXA0KKwkkKERJUk9CSilcc3NsZ2VuLm9iaiBcDQorCSQoRElST0JKKVxzc2x1c2Uub2JqIFwNCisJJChESVJPQkopXHN0cmVxdWFsLm9iaiBcDQorCSQoRElST0JKKVxzdHJlcnJvci5vYmogXA0KKwkkKERJUk9CSilcc3RydG9rLm9iaiBcDQorCSQoRElST0JKKVxzdHJ0b29mZnQub2JqIFwNCisJJChESVJPQkopXHRlbG5ldC5vYmogXA0KKwkkKERJUk9CSilcdGZ0cC5vYmogXA0KKwkkKERJUk9CSilcdGltZXZhbC5vYmogXA0KKwkkKERJUk9CSilcdHJhbnNmZXIub2JqIFwNCisJJChESVJPQkopXHVybC5vYmogXA0KKwkkKERJUk9CSilcdmVyc2lvbi5vYmogXA0KKwkkKERJUk9CSilcd2Fybmxlc3Mub2JqIFwNCisJJChESVJPQkopXHdpbGRjYXJkLm9iaiBcDQorCSQoUkVTT1VSQ0UpDQorDQorYWxsIDogJChUQVJHRVQpDQorDQorJChUQVJHRVQpOiAkKFhfT0JKUykNCisJJChMTkspICQoTEZMQUdTKSAkKFhfT0JKUykNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQkNVUkxfU1RBX0xJQl9SRUwpIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQkNVUkxfU1RBX0xJQl9EQkcpIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQkNVUkxfRFlOX0xJQl9SRUwpIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQkNVUkxfRFlOX0xJQl9EQkcpIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9SRUwpIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9EQkcpIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwqLmV4cCAgICAgICAgICAgICAgICAgIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwqLnBkYiAgICAgICAgICAgICAgICAgIC4gL3kNCisNCiskKFhfT0JKUyk6ICQoRElST0JKKQ0KKw0KKyQoRElST0JKKToNCisJQGlmIG5vdCBleGlzdCAiJChESVJPQkopIiBta2RpciAkKERJUk9CSikNCisNCisuU1VGRklYRVM6IC5jIC5vYmogLnJlcw0KKw0KK3suXH0uY3skKERJUk9CSilcfS5vYmo6DQorCSQoQ0MpICQoQ0ZMQUdTKSAvRm8iJEAiICAkPA0KKw0KK2RlYnVnLWRsbFxsaWJjdXJsLnJlcyBcDQorZGVidWctZGxsLXNzbC1kbGxcbGliY3VybC5yZXMgXA0KK2RlYnVnLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlcyBcDQorZGVidWctZGxsLXNzbC1kbGwtemxpYi1kbGxcbGliY3VybC5yZXM6IGxpYmN1cmwucmMNCisJcmMgL2RERUJVR0JVSUxEPTEgL0ZvICRAIGxpYmN1cmwucmMNCisNCityZWxlYXNlLWRsbFxsaWJjdXJsLnJlcyBcDQorcmVsZWFzZS1kbGwtc3NsLWRsbFxsaWJjdXJsLnJlcyBcDQorcmVsZWFzZS1kbGwtemxpYi1kbGxcbGliY3VybC5yZXMgXA0KK3JlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGxcbGliY3VybC5yZXM6IGxpYmN1cmwucmMNCisJcmMgL2RERUJVR0JVSUxEPTAgL0ZvICRAIGxpYmN1cmwucmMNCishRU5ESUYgICMgRW5kIG9mIGNhc2Ugd2hlcmUgYSBjb25maWcgd2FzIHByb3ZpZGVkLg0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS52YzYgYi9jdXJsLTcuMjUuMC9saWIvTWFrZWZpbGUudmM2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzU2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvTWFrZWZpbGUudmM2CkBAIC0wLDAgKzEsNjI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfDQorIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfA0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wNCisjDQorIyBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoDQorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zDQorIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLg0KKyMNCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbA0KKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIw0KKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisjIEFsbCBmaWxlcyBpbiB0aGUgTWFrZWZpbGUudmMqIHNlcmllcyBhcmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUNCisjIG9uZSBtYWRlIGZvciBNU1ZDIHZlcnNpb24gNi4gQWxhcywgaWYgeW91IHdhbnQgdG8gZG8gY2hhbmdlcyB0byBhbnkgb2YgdGhlDQorIyBmaWVscyBhbmQgc2VuZCBiYWNrIHRvIHRoZSBwcm9qZWN0LCBlZGl0IHRoZSB2ZXJzaW9uIHNpeCwgbWFrZSB5b3VyIGRpZmYgYW5kDQorIyBtYWlsIGN1cmwtbGlicmFyeS4NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjDQorIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgbGliY3VybCB3aXRoIE1TVkM2DQorIw0KKyMgVXNhZ2U6IHNlZSB1c2FnZSBtZXNzYWdlIGJlbG93DQorIyAgICAgICAgU2hvdWxkIGJlIGludm9rZWQgZnJvbSBcbGliIGRpcmVjdG9yeQ0KKyMgICAgICAgIEVkaXQgdGhlIHBhdGhzIGFuZCBkZXNpcmVkIGxpYnJhcnkgbmFtZQ0KKyMgICAgICAgIFNTTCBwYXRoIGlzIG9ubHkgcmVxdWlyZWQgaWYgeW91IGludGVuZCBjb21waWxpbmcNCisjICAgICAgICB3aXRoIFNTTC4NCisjDQorIyBUaGlzIG1ha2UgZmlsZSBsZWF2ZXMgdGhlIHJlc3VsdCBlaXRoZXIgYSAubGliIG9yIC5kbGwgZmlsZQ0KKyMgaW4gdGhlIFxsaWIgZGlyZWN0b3J5LiBJdCBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIFxsaWINCisjIGRpcmVjdG9yeS4NCisjDQorIyBBbiBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGFsbG93IHRoZSBzb3VyY2UgZGlyZWN0b3J5IHRvDQorIyBiZSBzcGVjaWZpZWQsIGJ1dCBJIHNhdyBubyByZXF1aXJlbWVudC4NCisjDQorIyBBbm90aGVyIG9wdGlvbiB3b3VsZCBoYXZlIGJlZW4gdG8gbGVhdmUgdGhlIC5saWIgYW5kIC5kbGwNCisjIGZpbGVzIGluIHRoZSAiY2ZnIiBkaXJlY3RvcnksIGJ1dCB0aGVuIHRoZSBtYWtlIGZpbGUNCisjIGluIFxzcmMgd291bGQgbmVlZCB0byBiZSBjaGFuZ2VkLg0KKyMNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMgVmVyaWZ5IHRoYXQgY3VycmVudCBzdWJkaXIgaXMgbGliY3VybCdzICdsaWInDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorIUlGICEgRVhJU1QoLlxjdXJsX2FkZHJpbmZvLmMpDQorISAgTUVTU0FHRSBDYW4gbm90IHByb2Nlc3MgdGhpcyBtYWtlZmlsZSBmcm9tIG91dHNpZGUgb2YgbGliY3VybCdzICdsaWInIHN1YmRpcmVjdG9yeS4NCishICBNRVNTQUdFIENoYW5nZSB0byBsaWJjdXJsJ3MgJ2xpYicgc3ViZGlyZWN0b3J5LCBhbmQgdHJ5IGFnYWluLg0KKyEgIEVSUk9SICAgU2VlIHByZXZpb3VzIG1lc3NhZ2UuDQorIUVORElGDQorDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIE1ha2VmaWxlLm1zdmMubmFtZXMgcHJvdmlkZXMgbGliY3VybCBmaWxlIG5hbWVzDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCishSU5DTFVERSAuLlxNYWtlZmlsZS5tc3ZjLm5hbWVzDQorDQorIUlGTkRFRiBPUEVOU1NMX1BBVEgNCitPUEVOU1NMX1BBVEggICA9IC4uLy4uL29wZW5zc2wtMC45LjhyDQorIUVORElGDQorDQorIUlGTkRFRiBMSUJTU0gyX1BBVEgNCitMSUJTU0gyX1BBVEggICA9IC4uLy4uL2xpYnNzaDItMS4yLjgNCishRU5ESUYNCisNCishSUZOREVGIFpMSUJfUEFUSA0KK1pMSUJfUEFUSCAgPSAuLi8uLi96bGliLTEuMi41DQorIUVORElGDQorDQorIUlGTkRFRiBNQUNISU5FDQorTUFDSElORSAgPSBYODYNCishRU5ESUYNCisNCisjIFVTRV9XSU5ET1dTX1NTUEkgdXNlcyB3aW5kb3dzIGxpYnJhcmllcyB0byBhbGxvdyBOVExNIGF1dGhlbnRpY2F0aW9uDQorIyB3aXRob3V0IGFuIG9wZW5zc2wgaW5zdGFsbGF0aW9uIGFuZCBvZmZlcnMgdGhlIGFiaWxpdHkgdG8gYXV0aGVudGljYXRlDQorIyB1c2luZyB0aGUgImN1cnJlbnQgbG9nZ2VkIGluIHVzZXIiLiBTaW5jZSBhdCBsZWFzdCB3aXRoIE1TVkM2IHRoZSBzc3BpLmgNCisjIGhlYWRlciBpcyBicm9rZW4gaXQgaXMgZWl0aGVyIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIFdpbmRvd3MgU0RLLA0KKyMgb3IgdG8gZml4IHNzcGkuaCB3aXRoIGFkZGluZyB0aGlzIGRlZmluZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHNzcGkuaDoNCisjICNkZWZpbmUgRnJlZUNyZWRlbnRpYWxIYW5kbGUgRnJlZUNyZWRlbnRpYWxzSGFuZGxlDQorIw0KKyMgSWYsIGZvciBzb21lIHJlYXNvbiB0aGUgV2luZG93cyBTREsgaXMgaW5zdGFsbGVkIGJ1dCBub3QgaW5zdGFsbGVkDQorIyBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiwgeW91IGNhbiBzcGVjaWZ5IFdJTkRPV1NfU0RLX1BBVEguDQorIyBJdCBjYW4gYmUgZG93bmxvYWRlZCBmcm9tOg0KKyMgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL21zZG93bmxvYWQvcGxhdGZvcm1zZGsvc2RrdXBkYXRlLw0KKw0KKyMgV0lORE9XU19TU1BJID0gMQ0KKw0KKyFJRkRFRiBXSU5ET1dTX1NTUEkNCishSUZOREVGIFdJTkRPV1NfU0RLX1BBVEgNCitXSU5ET1dTX1NES19QQVRIID0gIiQoUFJPR1JBTUZJTEVTKVxNaWNyb3NvZnQgU0RLIg0KKyFFTkRJRg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIyBOb3RoaW5nIG1vcmUgdG8gZG8gYmVsb3cgdGhpcyBsaW5lIQ0KKw0KK0NDTk9EQkcgICAgPSBjbC5leGUgL08yIC9ETkRFQlVHDQorQ0NERUJVRyAgICA9IGNsLmV4ZSAvT2QgL0dtIC9aaSAvRF9ERUJVRyAvR1oNCitDRkxBR1NTU0wgID0gL0RVU0VfU1NMRUFZIC9JICIkKE9QRU5TU0xfUEFUSCkvaW5jMzIiIC9JICIkKE9QRU5TU0xfUEFUSCkvaW5jMzIvb3BlbnNzbCINCitDRkxBR1NTU0gyID0gL0RVU0VfTElCU1NIMiAvRENVUkxfRElTQUJMRV9MREFQIC9ESEFWRV9MSUJTU0gyIC9ESEFWRV9MSUJTU0gyX0ggL0RMSUJTU0gyX1dJTjMyIC9ETElCU1NIMl9MSUJSQVJZIC9JICIkKExJQlNTSDJfUEFUSCkvaW5jbHVkZSINCitDRkxBR1NaTElCID0gL0RIQVZFX1pMSUJfSCAvREhBVkVfWkxJQiAvREhBVkVfTElCWiAvSSAiJChaTElCX1BBVEgpIg0KK0NGTEFHUyAgICAgPSAvSS4gL0kuLi9pbmNsdWRlIC9ub2xvZ28gL1czIC9HWCAvRFdJTjMyIC9ZWCAvRkQgL2MgL0RCVUlMRElOR19MSUJDVVJMIC9EX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTj0xDQorQ0ZMQUdTTElCICA9IC9EQ1VSTF9TVEFUSUNMSUINCitMTktETEwgICAgID0gbGluay5leGUgL0RMTA0KK0xOS0xJQiAgICAgPSBsaW5rLmV4ZSAvbGliDQorTEZMQUdTICAgICA9IC9ub2xvZ28gL21hY2hpbmU6JChNQUNISU5FKQ0KK1NTTExJQlMgICAgPSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliDQorWkxJQkxJQlNETEw9IHpkbGwubGliDQorWkxJQkxJQlMgICA9IHpsaWIubGliDQorV0lOTElCUyAgICA9IHdzMl8zMi5saWIgd2xkYXAzMi5saWINCitDRkxBR1MgICAgID0gJChDRkxBR1MpDQorDQorQ0ZHU0VUICAgICA9IEZBTFNFDQorDQorIUlGREVGIFdJTkRPV1NfU1NQSQ0KK0NGTEFHUyA9ICQoQ0ZMQUdTKSAvRFVTRV9XSU5ET1dTX1NTUEkgL0kkKFdJTkRPV1NfU0RLX1BBVEgpXGluY2x1ZGUNCishRU5ESUYNCisNCishSUZERUYgVVNFX0lQVjYNCitDRkxBR1MgPSAkKENGTEFHUykgL0RVU0VfSVBWNg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBSdW50aW1lIGxpYnJhcnkgY29uZmlndXJhdGlvbg0KKw0KK1JUTElCICAgPSAvTUQNCitSVExJQkQgID0gL01EZA0KKw0KKyFJRiAiJChSVExJQkNGRykiID09ICJzdGF0aWMiDQorUlRMSUIgID0gL01UDQorUlRMSUJEID0gL01UZA0KKyFFTkRJRg0KKw0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiDQorVEFSR0VUID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKQ0KK0RJUk9CSiA9ICQoQ0ZHKQ0KK0xOSyAgICA9ICQoTE5LTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXNzbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1zc2wiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoTEZMQUdTU1NMKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS16bGliIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChaTElCTElCUykgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXNzbC16bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC16bGliIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMiINCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wtZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Utc3NsLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1zc2wtZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NTU0wpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Utc3NsLXNzaDItemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1zc2wtc3NoMi16bGliIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRSkubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xGTEFHU1NTSDIgPSAiL0xJQlBBVEg6JChMSUJTU0gyX1BBVEgpIg0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoTEZMQUdTU1NMKSAkKExGTEFHU1NTSDIpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU1NTSDIpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKExJQlNTSDJfUEFUSCkvUmVsZWFzZS9zcmMvbGlic3NoMi5saWIgJChaTElCX1BBVEgpL3psaWIubGliDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctc3NsLXNzaDItemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctc3NsLXNzaDItemxpYiINCitUQVJHRVQgICA9ICQoTElCX05BTUVfREVCVUcpLmxpYg0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NIMiA9ICIvTElCUEFUSDokKExJQlNTSDJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMiINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1NTTCkgJChMRkxBR1NTU0gyKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTU1NIMikgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoTElCU1NIMl9QQVRIKS9SZWxlYXNlL3NyYy9saWJzc2gyLmxpYiAkKFpMSUJfUEFUSCkvemxpYi5saWINCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwiDQorVEFSR0VUID0gJChMSUJDVVJMX0RZTl9MSUJfUkVMKQ0KK0RJUk9CSiA9ICQoQ0ZHKQ0KK0xOSyAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9SRUwpDQorQ0MgICAgID0gJChDQ05PREJHKSAkKFJUTElCKQ0KK0NGR1NFVCA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsLXNzbC1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtZGxsLXNzbC1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfRFlOX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX1JFTCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfRFlOX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX1JFTCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NaTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9EWU5fTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9SRUwpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU1pMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zw0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWciDQorVEFSR0VUID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKQ0KK0RJUk9CSiA9ICQoQ0ZHKQ0KK0xOSyAgICA9ICQoTE5LTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU0xJQikNCitDRkdTRVQgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctc3NsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoTEZMQUdTU1NMKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy16bGliDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy16bGliIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChaTElCTElCUykgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctc3NsLXpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXNzbC16bGliIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMiINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXNzbC1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXNzbC1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwNCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctc3NsLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctc3NsLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1kbGwiDQorVEFSR0VUID0gJChMSUJDVVJMX0RZTl9MSUJfREJHKQ0KK0RJUk9CSiA9ICQoQ0ZHKQ0KK0xOSyAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChMSUJDVVJMX0lNUF9MSUJfREJHKSAvUERCOiQoRElST0JKKVwkKExJQkNVUkxfRFlOX0xJQl9QREIpDQorQ0MgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgDQorQ0ZHU0VUID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctZGxsLXNzbC1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLWRsbC1zc2wtZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX0RZTl9MSUJfREJHKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChMRkxBR1NTU0wpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChMSUJDVVJMX0lNUF9MSUJfREJHKSAvUERCOiQoRElST0JKKVwkKExJQkNVUkxfRFlOX0xJQl9QREIpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX0RZTl9MSUJfREJHKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1pMSUIpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChMSUJDVVJMX0lNUF9MSUJfREJHKSAvUERCOiQoRElST0JKKVwkKExJQkNVUkxfRFlOX0xJQl9QREIpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1pMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1kbGwtc3NsLWRsbC16bGliLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctZGxsLXNzbC1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfRFlOX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvREVCVUcgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX0RCRykgL1BEQjokKERJUk9CSilcJChMSUJDVVJMX0RZTl9MSUJfUERCKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBVc2FnZQ0KKyMNCishSUYgIiQoQ0ZHU0VUKSIgPT0gIkZBTFNFIiAmJiAiJChDRkcpIiAhPSAiIg0KKyFNRVNTQUdFIFVzYWdlOiBubWFrZSAvZiBtYWtlZmlsZS52YzYgQ0ZHPTxjb25maWc+IDx0YXJnZXQ+DQorIU1FU1NBR0Ugd2hlcmUgPGNvbmZpZz4gaXMgb25lIG9mOg0KKyFNRVNTQUdFICAgcmVsZWFzZSAgICAgICAgICAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkNCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsICAgICAgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsDQorIU1FU1NBR0UgICByZWxlYXNlLXpsaWIgICAgICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsLXpsaWIgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsIGFuZCB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLXNzbC1zc2gyLXpsaWIgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIHNzbCwgc3NoMiBhbmQgemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wtZGxsICAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKyFNRVNTQUdFICAgcmVsZWFzZS16bGliLWRsbCAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsLWRsbC16bGliLWRsbCAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wgYW5kIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1kbGwgICAgICAgICAgICAgICAgICAtIHJlbGVhc2UgZHluYW1pYyBsaWJyYXJ5DQorIU1FU1NBR0UgICByZWxlYXNlLWRsbC1zc2wtZGxsICAgICAgICAgIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKyFNRVNTQUdFICAgcmVsZWFzZS1kbGwtemxpYi1kbGwgICAgICAgICAtIHJlbGVhc2UgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICBkZWJ1Zy1zc2wtc3NoMi16bGliICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wsIHNzaDIgYW5kIHpsaWINCishTUVTU0FHRSAgIGRlYnVnICAgICAgICAgICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeQ0KKyFNRVNTQUdFICAgZGVidWctc3NsICAgICAgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsDQorIU1FU1NBR0UgICBkZWJ1Zy16bGliICAgICAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCB6bGliDQorIU1FU1NBR0UgICBkZWJ1Zy1zc2wtemxpYiAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wgYW5kIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC1kbGwgICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICBkZWJ1Zy16bGliLWRsbCAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC1kbGwtemxpYi1kbGwgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLWRsbCAgICAgICAgICAgICAgICAgICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkNCishTUVTU0FHRSAgIGRlYnVnLWRsbC1zc2wtZGxsICAgICAgICAgICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKyFNRVNTQUdFICAgZGVidWctZGxsLXpsaWItZGxsICAgICAgICAgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYjENCishTUVTU0FHRSAgIGRlYnVnLWRsbC1zc2wtZGxsLXpsaWItZGxsICAgLSBkZWJ1ZyBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorIU1FU1NBR0UgPHRhcmdldD4gY2FuIGJlIGxlZnQgYmxhbmsgaW4gd2hpY2ggY2FzZSBhbGwgaXMgYXNzdW1lZA0KKyFFUlJPUiBwbGVhc2UgY2hvb3NlIGEgdmFsaWQgY29uZmlndXJhdGlvbiAiJChDRkcpIg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBPbmx5IHRoZSBjbGVhbiB0YXJnZXQgY2FuIGJlIHVzZWQgaWYgYSBjb25maWcgd2FzIG5vdCBwcm92aWRlZC4NCisjDQorIUlGICIkKENGR1NFVCkiID09ICJGQUxTRSINCitjbGVhbjoNCisJQC1lcmFzZSAvcyAqLmRsbCAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLmV4cCAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLmlkYiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLmxpYiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLm9iaiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLnBjaCAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLnBkYiAyPiBOVUwNCisJQC1lcmFzZSAvcyAqLnJlcyAyPiBOVUwNCishRUxTRQ0KKyMgQSBjb25maWcgd2FzIHByb3ZpZGVkLCBzbyB0aGUgbGlicmFyeSBjYW4gYmUgYnVpbHQuDQorIw0KK1hfT0JKUz0gXA0KKwkkKERJUk9CSilcYXN5bi1hcmVzLm9iaiBcDQorCSQoRElST0JKKVxhc3luLXRocmVhZC5vYmogXA0KKwkkKERJUk9CSilcYmFzZTY0Lm9iaiBcDQorCSQoRElST0JKKVxjb25uZWN0Lm9iaiBcDQorCSQoRElST0JKKVxjb250ZW50X2VuY29kaW5nLm9iaiBcDQorCSQoRElST0JKKVxjb29raWUub2JqIFwNCisJJChESVJPQkopXGN1cmxfYWRkcmluZm8ub2JqIFwNCisJJChESVJPQkopXGN1cmxfZm5tYXRjaC5vYmogXA0KKwkkKERJUk9CSilcY3VybF9nZXRob3N0bmFtZS5vYmogXA0KKwkkKERJUk9CSilcY3VybF9tZW1yY2hyLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX250bG0ub2JqIFwNCisJJChESVJPQkopXGN1cmxfbnRsbV9jb3JlLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX250bG1fbXNncy5vYmogXA0KKwkkKERJUk9CSilcY3VybF9udGxtX3diLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX3JhbmQub2JqIFwNCisJJChESVJPQkopXGN1cmxfcnRtcC5vYmogXA0KKwkkKERJUk9CSilcY3VybF9zc3BpLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX3RocmVhZHMub2JqIFwNCisJJChESVJPQkopXGRpY3Qub2JqIFwNCisJJChESVJPQkopXGVhc3kub2JqIFwNCisJJChESVJPQkopXGVzY2FwZS5vYmogXA0KKwkkKERJUk9CSilcZmlsZWluZm8ub2JqIFwNCisJJChESVJPQkopXGZpbGUub2JqIFwNCisJJChESVJPQkopXGZvcm1kYXRhLm9iaiBcDQorCSQoRElST0JKKVxmdHBsaXN0cGFyc2VyLm9iaiBcDQorCSQoRElST0JKKVxmdHAub2JqIFwNCisJJChESVJPQkopXGdldGVudi5vYmogXA0KKwkkKERJUk9CSilcZ2V0aW5mby5vYmogXA0KKwkkKERJUk9CSilcZ29waGVyLm9iaiBcDQorCSQoRElST0JKKVxndGxzLm9iaiBcDQorCSQoRElST0JKKVxoYXNoLm9iaiBcDQorCSQoRElST0JKKVxobWFjLm9iaiBcDQorCSQoRElST0JKKVxob3N0YXN5bi5vYmogXA0KKwkkKERJUk9CSilcaG9zdGlwNC5vYmogXA0KKwkkKERJUk9CSilcaG9zdGlwNi5vYmogXA0KKwkkKERJUk9CSilcaG9zdGlwLm9iaiBcDQorCSQoRElST0JKKVxob3N0c3luLm9iaiBcDQorCSQoRElST0JKKVxodHRwX2NodW5rcy5vYmogXA0KKwkkKERJUk9CSilcaHR0cF9kaWdlc3Qub2JqIFwNCisJJChESVJPQkopXGh0dHBfbmVnb3RpYXRlLm9iaiBcDQorICAgICAgICAkKERJUk9CSilcaHR0cF9uZWdvdGlhdGVfc3NwaS5vYmogXA0KKwkkKERJUk9CSilcaHR0cC5vYmogXA0KKwkkKERJUk9CSilcaHR0cF9wcm94eS5vYmogXA0KKwkkKERJUk9CSilcaWYyaXAub2JqIFwNCisJJChESVJPQkopXGltYXAub2JqIFwNCisJJChESVJPQkopXGluZXRfbnRvcC5vYmogXA0KKwkkKERJUk9CSilcaW5ldF9wdG9uLm9iaiBcDQorCSQoRElST0JKKVxsZGFwLm9iaiBcDQorCSQoRElST0JKKVxsbGlzdC5vYmogXA0KKwkkKERJUk9CSilcbWQ0Lm9iaiBcDQorCSQoRElST0JKKVxtZDUub2JqIFwNCisJJChESVJPQkopXG1lbWRlYnVnLm9iaiBcDQorCSQoRElST0JKKVxtcHJpbnRmLm9iaiBcDQorCSQoRElST0JKKVxtdWx0aS5vYmogXA0KKwkkKERJUk9CSilcbmV0cmMub2JqIFwNCisJJChESVJPQkopXG5vbmJsb2NrLm9iaiBcDQorCSQoRElST0JKKVxvcGVubGRhcC5vYmogXA0KKwkkKERJUk9CSilccGFyc2VkYXRlLm9iaiBcDQorCSQoRElST0JKKVxwaW5ncG9uZy5vYmogXA0KKwkkKERJUk9CSilccG9sYXJzc2wub2JqIFwNCisJJChESVJPQkopXHBvcDMub2JqIFwNCisJJChESVJPQkopXHByb2dyZXNzLm9iaiBcDQorCSQoRElST0JKKVxyYXdzdHIub2JqIFwNCisJJChESVJPQkopXHJ0c3Aub2JqIFwNCisJJChESVJPQkopXHNlbGVjdC5vYmogXA0KKwkkKERJUk9CSilcc2VuZGYub2JqIFwNCisJJChESVJPQkopXHNoYXJlLm9iaiBcDQorCSQoRElST0JKKVxzbGlzdC5vYmogXA0KKwkkKERJUk9CSilcc210cC5vYmogXA0KKwkkKERJUk9CSilcc29ja3NfZ3NzYXBpLm9iaiBcDQorCSQoRElST0JKKVxzb2Nrcy5vYmogXA0KKwkkKERJUk9CSilcc29ja3Nfc3NwaS5vYmogXA0KKwkkKERJUk9CSilcc3BlZWRjaGVjay5vYmogXA0KKwkkKERJUk9CSilcc3BsYXkub2JqIFwNCisJJChESVJPQkopXHNzaC5vYmogXA0KKwkkKERJUk9CSilcc3NsZ2VuLm9iaiBcDQorCSQoRElST0JKKVxzc2x1c2Uub2JqIFwNCisJJChESVJPQkopXHN0cmVxdWFsLm9iaiBcDQorCSQoRElST0JKKVxzdHJlcnJvci5vYmogXA0KKwkkKERJUk9CSilcc3RydG9rLm9iaiBcDQorCSQoRElST0JKKVxzdHJ0b29mZnQub2JqIFwNCisJJChESVJPQkopXHRlbG5ldC5vYmogXA0KKwkkKERJUk9CSilcdGZ0cC5vYmogXA0KKwkkKERJUk9CSilcdGltZXZhbC5vYmogXA0KKwkkKERJUk9CSilcdHJhbnNmZXIub2JqIFwNCisJJChESVJPQkopXHVybC5vYmogXA0KKwkkKERJUk9CSilcdmVyc2lvbi5vYmogXA0KKwkkKERJUk9CSilcd2Fybmxlc3Mub2JqIFwNCisJJChESVJPQkopXHdpbGRjYXJkLm9iaiBcDQorCSQoUkVTT1VSQ0UpDQorDQorYWxsIDogJChUQVJHRVQpDQorDQorJChUQVJHRVQpOiAkKFhfT0JKUykNCisJJChMTkspICQoTEZMQUdTKSAkKFhfT0JKUykNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQkNVUkxfU1RBX0xJQl9SRUwpIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQkNVUkxfU1RBX0xJQl9EQkcpIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQkNVUkxfRFlOX0xJQl9SRUwpIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQkNVUkxfRFlOX0xJQl9EQkcpIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9SRUwpIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9EQkcpIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwqLmV4cCAgICAgICAgICAgICAgICAgIC4gL3kNCisJLXhjb3B5ICQoRElST0JKKVwqLnBkYiAgICAgICAgICAgICAgICAgIC4gL3kNCisNCiskKFhfT0JKUyk6ICQoRElST0JKKQ0KKw0KKyQoRElST0JKKToNCisJQGlmIG5vdCBleGlzdCAiJChESVJPQkopIiBta2RpciAkKERJUk9CSikNCisNCisuU1VGRklYRVM6IC5jIC5vYmogLnJlcw0KKw0KK3suXH0uY3skKERJUk9CSilcfS5vYmo6DQorCSQoQ0MpICQoQ0ZMQUdTKSAvRm8iJEAiICAkPA0KKw0KK2RlYnVnLWRsbFxsaWJjdXJsLnJlcyBcDQorZGVidWctZGxsLXNzbC1kbGxcbGliY3VybC5yZXMgXA0KK2RlYnVnLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlcyBcDQorZGVidWctZGxsLXNzbC1kbGwtemxpYi1kbGxcbGliY3VybC5yZXM6IGxpYmN1cmwucmMNCisJcmMgL2RERUJVR0JVSUxEPTEgL0ZvICRAIGxpYmN1cmwucmMNCisNCityZWxlYXNlLWRsbFxsaWJjdXJsLnJlcyBcDQorcmVsZWFzZS1kbGwtc3NsLWRsbFxsaWJjdXJsLnJlcyBcDQorcmVsZWFzZS1kbGwtemxpYi1kbGxcbGliY3VybC5yZXMgXA0KK3JlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGxcbGliY3VybC5yZXM6IGxpYmN1cmwucmMNCisJcmMgL2RERUJVR0JVSUxEPTAgL0ZvICRAIGxpYmN1cmwucmMNCishRU5ESUYgICMgRW5kIG9mIGNhc2Ugd2hlcmUgYSBjb25maWcgd2FzIHByb3ZpZGVkLg0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS52YzggYi9jdXJsLTcuMjUuMC9saWIvTWFrZWZpbGUudmM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NDRhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvTWFrZWZpbGUudmM4CkBAIC0wLDAgKzEsNjI0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfDQorIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfA0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wNCisjDQorIyBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoDQorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zDQorIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLg0KKyMNCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbA0KKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIw0KKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisjIEFsbCBmaWxlcyBpbiB0aGUgTWFrZWZpbGUudmMqIHNlcmllcyBhcmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUNCisjIG9uZSBtYWRlIGZvciBNU1ZDIHZlcnNpb24gNi4gQWxhcywgaWYgeW91IHdhbnQgdG8gZG8gY2hhbmdlcyB0byBhbnkgb2YgdGhlDQorIyBmaWVscyBhbmQgc2VuZCBiYWNrIHRvIHRoZSBwcm9qZWN0LCBlZGl0IHRoZSB2ZXJzaW9uIHNpeCwgbWFrZSB5b3VyIGRpZmYgYW5kDQorIyBtYWlsIGN1cmwtbGlicmFyeS4NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjDQorIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgbGliY3VybCB3aXRoIE1TVkM4DQorIw0KKyMgVXNhZ2U6IHNlZSB1c2FnZSBtZXNzYWdlIGJlbG93DQorIyAgICAgICAgU2hvdWxkIGJlIGludm9rZWQgZnJvbSBcbGliIGRpcmVjdG9yeQ0KKyMgICAgICAgIEVkaXQgdGhlIHBhdGhzIGFuZCBkZXNpcmVkIGxpYnJhcnkgbmFtZQ0KKyMgICAgICAgIFNTTCBwYXRoIGlzIG9ubHkgcmVxdWlyZWQgaWYgeW91IGludGVuZCBjb21waWxpbmcNCisjICAgICAgICB3aXRoIFNTTC4NCisjDQorIyBUaGlzIG1ha2UgZmlsZSBsZWF2ZXMgdGhlIHJlc3VsdCBlaXRoZXIgYSAubGliIG9yIC5kbGwgZmlsZQ0KKyMgaW4gdGhlIFxsaWIgZGlyZWN0b3J5LiBJdCBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIFxsaWINCisjIGRpcmVjdG9yeS4NCisjDQorIyBBbiBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGFsbG93IHRoZSBzb3VyY2UgZGlyZWN0b3J5IHRvDQorIyBiZSBzcGVjaWZpZWQsIGJ1dCBJIHNhdyBubyByZXF1aXJlbWVudC4NCisjDQorIyBBbm90aGVyIG9wdGlvbiB3b3VsZCBoYXZlIGJlZW4gdG8gbGVhdmUgdGhlIC5saWIgYW5kIC5kbGwNCisjIGZpbGVzIGluIHRoZSAiY2ZnIiBkaXJlY3RvcnksIGJ1dCB0aGVuIHRoZSBtYWtlIGZpbGUNCisjIGluIFxzcmMgd291bGQgbmVlZCB0byBiZSBjaGFuZ2VkLg0KKyMNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMgVmVyaWZ5IHRoYXQgY3VycmVudCBzdWJkaXIgaXMgbGliY3VybCdzICdsaWInDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorIUlGICEgRVhJU1QoLlxjdXJsX2FkZHJpbmZvLmMpDQorISAgTUVTU0FHRSBDYW4gbm90IHByb2Nlc3MgdGhpcyBtYWtlZmlsZSBmcm9tIG91dHNpZGUgb2YgbGliY3VybCdzICdsaWInIHN1YmRpcmVjdG9yeS4NCishICBNRVNTQUdFIENoYW5nZSB0byBsaWJjdXJsJ3MgJ2xpYicgc3ViZGlyZWN0b3J5LCBhbmQgdHJ5IGFnYWluLg0KKyEgIEVSUk9SICAgU2VlIHByZXZpb3VzIG1lc3NhZ2UuDQorIUVORElGDQorDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIE1ha2VmaWxlLm1zdmMubmFtZXMgcHJvdmlkZXMgbGliY3VybCBmaWxlIG5hbWVzDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCishSU5DTFVERSAuLlxNYWtlZmlsZS5tc3ZjLm5hbWVzDQorDQorIUlGTkRFRiBPUEVOU1NMX1BBVEgNCitPUEVOU1NMX1BBVEggICA9IC4uLy4uL29wZW5zc2wtMC45LjhyDQorIUVORElGDQorDQorIUlGTkRFRiBMSUJTU0gyX1BBVEgNCitMSUJTU0gyX1BBVEggICA9IC4uLy4uL2xpYnNzaDItMS4yLjgNCishRU5ESUYNCisNCishSUZOREVGIFpMSUJfUEFUSA0KK1pMSUJfUEFUSCAgPSAuLi8uLi96bGliLTEuMi41DQorIUVORElGDQorDQorIUlGTkRFRiBNQUNISU5FDQorTUFDSElORSAgPSBYODYNCishRU5ESUYNCisNCisjIFVTRV9XSU5ET1dTX1NTUEkgdXNlcyB3aW5kb3dzIGxpYnJhcmllcyB0byBhbGxvdyBOVExNIGF1dGhlbnRpY2F0aW9uDQorIyB3aXRob3V0IGFuIG9wZW5zc2wgaW5zdGFsbGF0aW9uIGFuZCBvZmZlcnMgdGhlIGFiaWxpdHkgdG8gYXV0aGVudGljYXRlDQorIyB1c2luZyB0aGUgImN1cnJlbnQgbG9nZ2VkIGluIHVzZXIiLiBTaW5jZSBhdCBsZWFzdCB3aXRoIE1TVkM4IHRoZSBzc3BpLmgNCisjIGhlYWRlciBpcyBicm9rZW4gaXQgaXMgZWl0aGVyIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIFdpbmRvd3MgU0RLLA0KKyMgb3IgdG8gZml4IHNzcGkuaCB3aXRoIGFkZGluZyB0aGlzIGRlZmluZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHNzcGkuaDoNCisjICNkZWZpbmUgRnJlZUNyZWRlbnRpYWxIYW5kbGUgRnJlZUNyZWRlbnRpYWxzSGFuZGxlDQorIw0KKyMgSWYsIGZvciBzb21lIHJlYXNvbiB0aGUgV2luZG93cyBTREsgaXMgaW5zdGFsbGVkIGJ1dCBub3QgaW5zdGFsbGVkDQorIyBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiwgeW91IGNhbiBzcGVjaWZ5IFdJTkRPV1NfU0RLX1BBVEguDQorIyBJdCBjYW4gYmUgZG93bmxvYWRlZCBmcm9tOg0KKyMgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL21zZG93bmxvYWQvcGxhdGZvcm1zZGsvc2RrdXBkYXRlLw0KKw0KKyMgV0lORE9XU19TU1BJID0gMQ0KKw0KKyFJRkRFRiBXSU5ET1dTX1NTUEkNCishSUZOREVGIFdJTkRPV1NfU0RLX1BBVEgNCitXSU5ET1dTX1NES19QQVRIID0gIiQoUFJPR1JBTUZJTEVTKVxNaWNyb3NvZnQgU0RLIg0KKyFFTkRJRg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIyBOb3RoaW5nIG1vcmUgdG8gZG8gYmVsb3cgdGhpcyBsaW5lIQ0KKw0KK0NDTk9EQkcgICAgPSBjbC5leGUgL08yIC9ETkRFQlVHDQorQ0NERUJVRyAgICA9IGNsLmV4ZSAvT2QgL0dtIC9aaSAvRF9ERUJVRyAvUlRDMQ0KK0NGTEFHU1NTTCAgPSAvRFVTRV9TU0xFQVkgL0kgIiQoT1BFTlNTTF9QQVRIKS9pbmMzMiIgL0kgIiQoT1BFTlNTTF9QQVRIKS9pbmMzMi9vcGVuc3NsIg0KK0NGTEFHU1NTSDIgPSAvRFVTRV9MSUJTU0gyIC9EQ1VSTF9ESVNBQkxFX0xEQVAgL0RIQVZFX0xJQlNTSDIgL0RIQVZFX0xJQlNTSDJfSCAvRExJQlNTSDJfV0lOMzIgL0RMSUJTU0gyX0xJQlJBUlkgL0kgIiQoTElCU1NIMl9QQVRIKS9pbmNsdWRlIg0KK0NGTEFHU1pMSUIgPSAvREhBVkVfWkxJQl9IIC9ESEFWRV9aTElCIC9ESEFWRV9MSUJaIC9JICIkKFpMSUJfUEFUSCkiDQorQ0ZMQUdTICAgICA9IC9JLiAvSS4uL2luY2x1ZGUgL25vbG9nbyAvVzMgL0VIc2MgL0RXSU4zMiAvRkQgL2MgL0RCVUlMRElOR19MSUJDVVJMIC9EX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTj0xDQorQ0ZMQUdTTElCICA9IC9EQ1VSTF9TVEFUSUNMSUINCitMTktETEwgICAgID0gbGluay5leGUgL0RMTA0KK0xOS0xJQiAgICAgPSBsaW5rLmV4ZSAvbGliDQorTEZMQUdTICAgICA9IC9ub2xvZ28gL21hY2hpbmU6JChNQUNISU5FKQ0KK1NTTExJQlMgICAgPSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliDQorWkxJQkxJQlNETEw9IHpkbGwubGliDQorWkxJQkxJQlMgICA9IHpsaWIubGliDQorV0lOTElCUyAgICA9IHdzMl8zMi5saWIgYnVmZmVyb3ZlcmZsb3d1LmxpYiB3bGRhcDMyLmxpYg0KK0NGTEFHUyAgICAgPSAkKENGTEFHUykNCisNCitDRkdTRVQgICAgID0gRkFMU0UNCisNCishSUZERUYgV0lORE9XU19TU1BJDQorQ0ZMQUdTID0gJChDRkxBR1MpIC9EVVNFX1dJTkRPV1NfU1NQSSAvSSQoV0lORE9XU19TREtfUEFUSClcaW5jbHVkZQ0KKyFFTkRJRg0KKw0KKyFJRkRFRiBVU0VfSVBWNg0KK0NGTEFHUyA9ICQoQ0ZMQUdTKSAvRFVTRV9JUFY2DQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIFJ1bnRpbWUgbGlicmFyeSBjb25maWd1cmF0aW9uDQorDQorUlRMSUIgICA9IC9NRA0KK1JUTElCRCAgPSAvTURkDQorDQorIUlGICIkKFJUTElCQ0ZHKSIgPT0gInN0YXRpYyINCitSVExJQiAgPSAvTVQNCitSVExJQkQgPSAvTVRkDQorIUVORElGDQorDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZQ0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSINCitUQVJHRVQgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Utc3NsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzIiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS16bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Utc3NsLXpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXNzbC1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoTEZMQUdTU1NMKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wtc3NoMi16bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC1zc2gyLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzIiDQorTEZMQUdTU1NIMiA9ICIvTElCUEFUSDokKExJQlNTSDJfUEFUSCkiDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChMRkxBR1NTU0wpICQoTEZMQUdTU1NIMikgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTU1NIMikgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoTElCU1NIMl9QQVRIKS9SZWxlYXNlL3NyYy9saWJzc2gyLmxpYiAkKFpMSUJfUEFUSCkvemxpYi5saWINCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtc3NoMi16bGliDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wtc3NoMi16bGliIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0gyID0gIi9MSUJQQVRIOiQoTElCU1NIMl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoWkxJQkxJQlMpICQoTEZMQUdTU1NMKSAkKExGTEFHU1NTSDIpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NTU0gyKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChMSUJTU0gyX1BBVEgpL1JlbGVhc2Uvc3JjL2xpYnNzaDIubGliICQoWkxJQl9QQVRIKS96bGliLmxpYg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbCINCitUQVJHRVQgPSAkKExJQkNVUkxfRFlOX0xJQl9SRUwpDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktETEwpICQoV0lOTElCUykgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX1JFTCkNCitDQyAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpDQorQ0ZHU0VUID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1kbGwtc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9EWU5fTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoTEZMQUdTU1NMKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChMSUJDVVJMX0lNUF9MSUJfUkVMKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9EWU5fTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChMSUJDVVJMX0lNUF9MSUJfUkVMKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1pMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX0RZTl9MSUJfUkVMKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NTU0wpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX1JFTCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1ZyINCitUQVJHRVQgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXNzbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzIiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctc3NsLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoWkxJQkxJQlMpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9IC9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbA0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wtZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NTU0wpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLWRsbCINCitUQVJHRVQgPSAkKExJQkNVUkxfRFlOX0xJQl9EQkcpDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktETEwpICQoV0lOTElCUykgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9EQkcpIC9QREI6JChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX1BEQikNCitDQyAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSANCitDRkdTRVQgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1kbGwtc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctZGxsLXNzbC1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfRFlOX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9EQkcpIC9QREI6JChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX1BEQikNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfRFlOX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9EQkcpIC9QREI6JChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX1BEQikNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLWRsbC1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1kbGwtc3NsLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9EWU5fTElCX0RCRykNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChMSUJDVVJMX0lNUF9MSUJfREJHKSAvUERCOiQoRElST0JKKVwkKExJQkNVUkxfRFlOX0xJQl9QREIpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIFVzYWdlDQorIw0KKyFJRiAiJChDRkdTRVQpIiA9PSAiRkFMU0UiICYmICIkKENGRykiICE9ICIiDQorIU1FU1NBR0UgVXNhZ2U6IG5tYWtlIC9mIG1ha2VmaWxlLnZjNiBDRkc9PGNvbmZpZz4gPHRhcmdldD4NCishTUVTU0FHRSB3aGVyZSA8Y29uZmlnPiBpcyBvbmUgb2Y6DQorIU1FU1NBR0UgICByZWxlYXNlICAgICAgICAgICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeQ0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wgICAgICAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wNCishTUVTU0FHRSAgIHJlbGVhc2UtemxpYiAgICAgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wtemxpYiAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wgYW5kIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsLXNzaDItemxpYiAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsLCBzc2gyIGFuZCB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLXNzbC1kbGwgICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICByZWxlYXNlLXpsaWItZGxsICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wtZGxsLXpsaWItZGxsICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLWRsbCAgICAgICAgICAgICAgICAgIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkNCishTUVTU0FHRSAgIHJlbGVhc2UtZGxsLXNzbC1kbGwgICAgICAgICAgLSByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICByZWxlYXNlLWRsbC16bGliLWRsbCAgICAgICAgIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGwgLSByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC1zc2gyLXpsaWIgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIHNzbCwgc3NoMiBhbmQgemxpYg0KKyFNRVNTQUdFICAgZGVidWcgICAgICAgICAgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5DQorIU1FU1NBR0UgICBkZWJ1Zy1zc2wgICAgICAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wNCishTUVTU0FHRSAgIGRlYnVnLXpsaWIgICAgICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC16bGliICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIHNzbCBhbmQgemxpYg0KKyFNRVNTQUdFICAgZGVidWctc3NsLWRsbCAgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wNCishTUVTU0FHRSAgIGRlYnVnLXpsaWItZGxsICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgZGVidWctc3NsLWRsbC16bGliLWRsbCAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wgYW5kIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgZGVidWctZGxsICAgICAgICAgICAgICAgICAgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeQ0KKyFNRVNTQUdFICAgZGVidWctZGxsLXNzbC1kbGwgICAgICAgICAgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICBkZWJ1Zy1kbGwtemxpYi1kbGwgICAgICAgICAgIC0gZGVidWcgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyB6bGliMQ0KKyFNRVNTQUdFICAgZGVidWctZGxsLXNzbC1kbGwtemxpYi1kbGwgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCishTUVTU0FHRSA8dGFyZ2V0PiBjYW4gYmUgbGVmdCBibGFuayBpbiB3aGljaCBjYXNlIGFsbCBpcyBhc3N1bWVkDQorIUVSUk9SIHBsZWFzZSBjaG9vc2UgYSB2YWxpZCBjb25maWd1cmF0aW9uICIkKENGRykiDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIE9ubHkgdGhlIGNsZWFuIHRhcmdldCBjYW4gYmUgdXNlZCBpZiBhIGNvbmZpZyB3YXMgbm90IHByb3ZpZGVkLg0KKyMNCishSUYgIiQoQ0ZHU0VUKSIgPT0gIkZBTFNFIg0KK2NsZWFuOg0KKwlALWVyYXNlIC9zICouZGxsIDI+IE5VTA0KKwlALWVyYXNlIC9zICouZXhwIDI+IE5VTA0KKwlALWVyYXNlIC9zICouaWRiIDI+IE5VTA0KKwlALWVyYXNlIC9zICoubGliIDI+IE5VTA0KKwlALWVyYXNlIC9zICoub2JqIDI+IE5VTA0KKwlALWVyYXNlIC9zICoucGNoIDI+IE5VTA0KKwlALWVyYXNlIC9zICoucGRiIDI+IE5VTA0KKwlALWVyYXNlIC9zICoucmVzIDI+IE5VTA0KKyFFTFNFDQorIyBBIGNvbmZpZyB3YXMgcHJvdmlkZWQsIHNvIHRoZSBsaWJyYXJ5IGNhbiBiZSBidWlsdC4NCisjDQorWF9PQkpTPSBcDQorCSQoRElST0JKKVxhc3luLWFyZXMub2JqIFwNCisJJChESVJPQkopXGFzeW4tdGhyZWFkLm9iaiBcDQorCSQoRElST0JKKVxiYXNlNjQub2JqIFwNCisJJChESVJPQkopXGNvbm5lY3Qub2JqIFwNCisJJChESVJPQkopXGNvbnRlbnRfZW5jb2Rpbmcub2JqIFwNCisJJChESVJPQkopXGNvb2tpZS5vYmogXA0KKwkkKERJUk9CSilcY3VybF9hZGRyaW5mby5vYmogXA0KKwkkKERJUk9CSilcY3VybF9mbm1hdGNoLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX2dldGhvc3RuYW1lLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX21lbXJjaHIub2JqIFwNCisJJChESVJPQkopXGN1cmxfbnRsbS5vYmogXA0KKwkkKERJUk9CSilcY3VybF9udGxtX2NvcmUub2JqIFwNCisJJChESVJPQkopXGN1cmxfbnRsbV9tc2dzLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX250bG1fd2Iub2JqIFwNCisJJChESVJPQkopXGN1cmxfcmFuZC5vYmogXA0KKwkkKERJUk9CSilcY3VybF9ydG1wLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX3NzcGkub2JqIFwNCisJJChESVJPQkopXGN1cmxfdGhyZWFkcy5vYmogXA0KKwkkKERJUk9CSilcZGljdC5vYmogXA0KKwkkKERJUk9CSilcZWFzeS5vYmogXA0KKwkkKERJUk9CSilcZXNjYXBlLm9iaiBcDQorCSQoRElST0JKKVxmaWxlaW5mby5vYmogXA0KKwkkKERJUk9CSilcZmlsZS5vYmogXA0KKwkkKERJUk9CSilcZm9ybWRhdGEub2JqIFwNCisJJChESVJPQkopXGZ0cGxpc3RwYXJzZXIub2JqIFwNCisJJChESVJPQkopXGZ0cC5vYmogXA0KKwkkKERJUk9CSilcZ2V0ZW52Lm9iaiBcDQorCSQoRElST0JKKVxnZXRpbmZvLm9iaiBcDQorCSQoRElST0JKKVxnb3BoZXIub2JqIFwNCisJJChESVJPQkopXGd0bHMub2JqIFwNCisJJChESVJPQkopXGhhc2gub2JqIFwNCisJJChESVJPQkopXGhtYWMub2JqIFwNCisJJChESVJPQkopXGhvc3Rhc3luLm9iaiBcDQorCSQoRElST0JKKVxob3N0aXA0Lm9iaiBcDQorCSQoRElST0JKKVxob3N0aXA2Lm9iaiBcDQorCSQoRElST0JKKVxob3N0aXAub2JqIFwNCisJJChESVJPQkopXGhvc3RzeW4ub2JqIFwNCisJJChESVJPQkopXGh0dHBfY2h1bmtzLm9iaiBcDQorCSQoRElST0JKKVxodHRwX2RpZ2VzdC5vYmogXA0KKwkkKERJUk9CSilcaHR0cF9uZWdvdGlhdGUub2JqIFwNCisgICAgICAgICQoRElST0JKKVxodHRwX25lZ290aWF0ZV9zc3BpLm9iaiBcDQorCSQoRElST0JKKVxodHRwLm9iaiBcDQorCSQoRElST0JKKVxodHRwX3Byb3h5Lm9iaiBcDQorCSQoRElST0JKKVxpZjJpcC5vYmogXA0KKwkkKERJUk9CSilcaW1hcC5vYmogXA0KKwkkKERJUk9CSilcaW5ldF9udG9wLm9iaiBcDQorCSQoRElST0JKKVxpbmV0X3B0b24ub2JqIFwNCisJJChESVJPQkopXGxkYXAub2JqIFwNCisJJChESVJPQkopXGxsaXN0Lm9iaiBcDQorCSQoRElST0JKKVxtZDQub2JqIFwNCisJJChESVJPQkopXG1kNS5vYmogXA0KKwkkKERJUk9CSilcbWVtZGVidWcub2JqIFwNCisJJChESVJPQkopXG1wcmludGYub2JqIFwNCisJJChESVJPQkopXG11bHRpLm9iaiBcDQorCSQoRElST0JKKVxuZXRyYy5vYmogXA0KKwkkKERJUk9CSilcbm9uYmxvY2sub2JqIFwNCisJJChESVJPQkopXG9wZW5sZGFwLm9iaiBcDQorCSQoRElST0JKKVxwYXJzZWRhdGUub2JqIFwNCisJJChESVJPQkopXHBpbmdwb25nLm9iaiBcDQorCSQoRElST0JKKVxwb2xhcnNzbC5vYmogXA0KKwkkKERJUk9CSilccG9wMy5vYmogXA0KKwkkKERJUk9CSilccHJvZ3Jlc3Mub2JqIFwNCisJJChESVJPQkopXHJhd3N0ci5vYmogXA0KKwkkKERJUk9CSilccnRzcC5vYmogXA0KKwkkKERJUk9CSilcc2VsZWN0Lm9iaiBcDQorCSQoRElST0JKKVxzZW5kZi5vYmogXA0KKwkkKERJUk9CSilcc2hhcmUub2JqIFwNCisJJChESVJPQkopXHNsaXN0Lm9iaiBcDQorCSQoRElST0JKKVxzbXRwLm9iaiBcDQorCSQoRElST0JKKVxzb2Nrc19nc3NhcGkub2JqIFwNCisJJChESVJPQkopXHNvY2tzLm9iaiBcDQorCSQoRElST0JKKVxzb2Nrc19zc3BpLm9iaiBcDQorCSQoRElST0JKKVxzcGVlZGNoZWNrLm9iaiBcDQorCSQoRElST0JKKVxzcGxheS5vYmogXA0KKwkkKERJUk9CSilcc3NoLm9iaiBcDQorCSQoRElST0JKKVxzc2xnZW4ub2JqIFwNCisJJChESVJPQkopXHNzbHVzZS5vYmogXA0KKwkkKERJUk9CSilcc3RyZXF1YWwub2JqIFwNCisJJChESVJPQkopXHN0cmVycm9yLm9iaiBcDQorCSQoRElST0JKKVxzdHJ0b2sub2JqIFwNCisJJChESVJPQkopXHN0cnRvb2ZmdC5vYmogXA0KKwkkKERJUk9CSilcdGVsbmV0Lm9iaiBcDQorCSQoRElST0JKKVx0ZnRwLm9iaiBcDQorCSQoRElST0JKKVx0aW1ldmFsLm9iaiBcDQorCSQoRElST0JKKVx0cmFuc2Zlci5vYmogXA0KKwkkKERJUk9CSilcdXJsLm9iaiBcDQorCSQoRElST0JKKVx2ZXJzaW9uLm9iaiBcDQorCSQoRElST0JKKVx3YXJubGVzcy5vYmogXA0KKwkkKERJUk9CSilcd2lsZGNhcmQub2JqIFwNCisJJChSRVNPVVJDRSkNCisNCithbGwgOiAkKFRBUkdFVCkNCisNCiskKFRBUkdFVCk6ICQoWF9PQkpTKQ0KKwkkKExOSykgJChMRkxBR1MpICQoWF9PQkpTKQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCQ1VSTF9TVEFfTElCX1JFTCkgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCQ1VSTF9TVEFfTElCX0RCRykgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX1JFTCkgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX0RCRykgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX1JFTCkgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX0RCRykgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCouZXhwICAgICAgICAgICAgICAgICAgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCoucGRiICAgICAgICAgICAgICAgICAgLiAveQ0KKw0KKyQoWF9PQkpTKTogJChESVJPQkopDQorDQorJChESVJPQkopOg0KKwlAaWYgbm90IGV4aXN0ICIkKERJUk9CSikiIG1rZGlyICQoRElST0JKKQ0KKw0KKy5TVUZGSVhFUzogLmMgLm9iaiAucmVzDQorDQorey5cfS5jeyQoRElST0JKKVx9Lm9iajoNCisJJChDQykgJChDRkxBR1MpIC9GbyIkQCIgICQ8DQorDQorZGVidWctZGxsXGxpYmN1cmwucmVzIFwNCitkZWJ1Zy1kbGwtc3NsLWRsbFxsaWJjdXJsLnJlcyBcDQorZGVidWctZGxsLXpsaWItZGxsXGxpYmN1cmwucmVzIFwNCitkZWJ1Zy1kbGwtc3NsLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlczogbGliY3VybC5yYw0KKwlyYyAvZERFQlVHQlVJTEQ9MSAvRm8gJEAgbGliY3VybC5yYw0KKw0KK3JlbGVhc2UtZGxsXGxpYmN1cmwucmVzIFwNCityZWxlYXNlLWRsbC1zc2wtZGxsXGxpYmN1cmwucmVzIFwNCityZWxlYXNlLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlcyBcDQorcmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlczogbGliY3VybC5yYw0KKwlyYyAvZERFQlVHQlVJTEQ9MCAvRm8gJEAgbGliY3VybC5yYw0KKyFFTkRJRiAgIyBFbmQgb2YgY2FzZSB3aGVyZSBhIGNvbmZpZyB3YXMgcHJvdmlkZWQuDQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLnZjOSBiL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS52YzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0YTNkNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9NYWtlZmlsZS52YzkKQEAgLTAsMCArMSw2MjQgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8NCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8DQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfA0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18NCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffA0KKyMNCisjIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuDQorIw0KKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gNCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMNCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuDQorIw0KKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsDQorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuDQorIw0KKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisjDQorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyMgQWxsIGZpbGVzIGluIHRoZSBNYWtlZmlsZS52Yyogc2VyaWVzIGFyZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZQ0KKyMgb25lIG1hZGUgZm9yIE1TVkMgdmVyc2lvbiA2LiBBbGFzLCBpZiB5b3Ugd2FudCB0byBkbyBjaGFuZ2VzIHRvIGFueSBvZiB0aGUNCisjIGZpZWxzIGFuZCBzZW5kIGJhY2sgdG8gdGhlIHByb2plY3QsIGVkaXQgdGhlIHZlcnNpb24gc2l4LCBtYWtlIHlvdXIgZGlmZiBhbmQNCisjIG1haWwgY3VybC1saWJyYXJ5Lg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMNCisjIE1ha2VmaWxlIGZvciBidWlsZGluZyBsaWJjdXJsIHdpdGggTVNWQzkNCisjDQorIyBVc2FnZTogc2VlIHVzYWdlIG1lc3NhZ2UgYmVsb3cNCisjICAgICAgICBTaG91bGQgYmUgaW52b2tlZCBmcm9tIFxsaWIgZGlyZWN0b3J5DQorIyAgICAgICAgRWRpdCB0aGUgcGF0aHMgYW5kIGRlc2lyZWQgbGlicmFyeSBuYW1lDQorIyAgICAgICAgU1NMIHBhdGggaXMgb25seSByZXF1aXJlZCBpZiB5b3UgaW50ZW5kIGNvbXBpbGluZw0KKyMgICAgICAgIHdpdGggU1NMLg0KKyMNCisjIFRoaXMgbWFrZSBmaWxlIGxlYXZlcyB0aGUgcmVzdWx0IGVpdGhlciBhIC5saWIgb3IgLmRsbCBmaWxlDQorIyBpbiB0aGUgXGxpYiBkaXJlY3RvcnkuIEl0IHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgXGxpYg0KKyMgZGlyZWN0b3J5Lg0KKyMNCisjIEFuIG9wdGlvbiB3b3VsZCBoYXZlIGJlZW4gdG8gYWxsb3cgdGhlIHNvdXJjZSBkaXJlY3RvcnkgdG8NCisjIGJlIHNwZWNpZmllZCwgYnV0IEkgc2F3IG5vIHJlcXVpcmVtZW50Lg0KKyMNCisjIEFub3RoZXIgb3B0aW9uIHdvdWxkIGhhdmUgYmVlbiB0byBsZWF2ZSB0aGUgLmxpYiBhbmQgLmRsbA0KKyMgZmlsZXMgaW4gdGhlICJjZmciIGRpcmVjdG9yeSwgYnV0IHRoZW4gdGhlIG1ha2UgZmlsZQ0KKyMgaW4gXHNyYyB3b3VsZCBuZWVkIHRvIGJlIGNoYW5nZWQuDQorIw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyBWZXJpZnkgdGhhdCBjdXJyZW50IHN1YmRpciBpcyBsaWJjdXJsJ3MgJ2xpYicNCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCishSUYgISBFWElTVCguXGN1cmxfYWRkcmluZm8uYykNCishICBNRVNTQUdFIENhbiBub3QgcHJvY2VzcyB0aGlzIG1ha2VmaWxlIGZyb20gb3V0c2lkZSBvZiBsaWJjdXJsJ3MgJ2xpYicgc3ViZGlyZWN0b3J5Lg0KKyEgIE1FU1NBR0UgQ2hhbmdlIHRvIGxpYmN1cmwncyAnbGliJyBzdWJkaXJlY3RvcnksIGFuZCB0cnkgYWdhaW4uDQorISAgRVJST1IgICBTZWUgcHJldmlvdXMgbWVzc2FnZS4NCishRU5ESUYNCisNCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMgTWFrZWZpbGUubXN2Yy5uYW1lcyBwcm92aWRlcyBsaWJjdXJsIGZpbGUgbmFtZXMNCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyFJTkNMVURFIC4uXE1ha2VmaWxlLm1zdmMubmFtZXMNCisNCishSUZOREVGIE9QRU5TU0xfUEFUSA0KK09QRU5TU0xfUEFUSCAgID0gLi4vLi4vb3BlbnNzbC0wLjkuOHINCishRU5ESUYNCisNCishSUZOREVGIExJQlNTSDJfUEFUSA0KK0xJQlNTSDJfUEFUSCAgID0gLi4vLi4vbGlic3NoMi0xLjIuOA0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgWkxJQl9QQVRIDQorWkxJQl9QQVRIICA9IC4uLy4uL3psaWItMS4yLjUNCishRU5ESUYNCisNCishSUZOREVGIE1BQ0hJTkUNCitNQUNISU5FICA9IFg4Ng0KKyFFTkRJRg0KKw0KKyMgVVNFX1dJTkRPV1NfU1NQSSB1c2VzIHdpbmRvd3MgbGlicmFyaWVzIHRvIGFsbG93IE5UTE0gYXV0aGVudGljYXRpb24NCisjIHdpdGhvdXQgYW4gb3BlbnNzbCBpbnN0YWxsYXRpb24gYW5kIG9mZmVycyB0aGUgYWJpbGl0eSB0byBhdXRoZW50aWNhdGUNCisjIHVzaW5nIHRoZSAiY3VycmVudCBsb2dnZWQgaW4gdXNlciIuIFNpbmNlIGF0IGxlYXN0IHdpdGggTVNWQzkgdGhlIHNzcGkuaA0KKyMgaGVhZGVyIGlzIGJyb2tlbiBpdCBpcyBlaXRoZXIgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgV2luZG93cyBTREssDQorIyBvciB0byBmaXggc3NwaS5oIHdpdGggYWRkaW5nIHRoaXMgZGVmaW5lIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3NwaS5oOg0KKyMgI2RlZmluZSBGcmVlQ3JlZGVudGlhbEhhbmRsZSBGcmVlQ3JlZGVudGlhbHNIYW5kbGUNCisjDQorIyBJZiwgZm9yIHNvbWUgcmVhc29uIHRoZSBXaW5kb3dzIFNESyBpcyBpbnN0YWxsZWQgYnV0IG5vdCBpbnN0YWxsZWQNCisjIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uLCB5b3UgY2FuIHNwZWNpZnkgV0lORE9XU19TREtfUEFUSC4NCisjIEl0IGNhbiBiZSBkb3dubG9hZGVkIGZyb206DQorIyBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbXNkb3dubG9hZC9wbGF0Zm9ybXNkay9zZGt1cGRhdGUvDQorDQorIyBXSU5ET1dTX1NTUEkgPSAxDQorDQorIUlGREVGIFdJTkRPV1NfU1NQSQ0KKyFJRk5ERUYgV0lORE9XU19TREtfUEFUSA0KK1dJTkRPV1NfU0RLX1BBVEggPSAiJChQUk9HUkFNRklMRVMpXE1pY3Jvc29mdCBTREsiDQorIUVORElGDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMjIE5vdGhpbmcgbW9yZSB0byBkbyBiZWxvdyB0aGlzIGxpbmUhDQorDQorQ0NOT0RCRyAgICA9IGNsLmV4ZSAvTzIgL0ROREVCVUcNCitDQ0RFQlVHICAgID0gY2wuZXhlIC9PZCAvR20gL1ppIC9EX0RFQlVHIC9SVEMxDQorQ0ZMQUdTU1NMICA9IC9EVVNFX1NTTEVBWSAvSSAiJChPUEVOU1NMX1BBVEgpL2luYzMyIiAvSSAiJChPUEVOU1NMX1BBVEgpL2luYzMyL29wZW5zc2wiDQorQ0ZMQUdTU1NIMiA9IC9EVVNFX0xJQlNTSDIgL0RDVVJMX0RJU0FCTEVfTERBUCAvREhBVkVfTElCU1NIMiAvREhBVkVfTElCU1NIMl9IIC9ETElCU1NIMl9XSU4zMiAvRExJQlNTSDJfTElCUkFSWSAvSSAiJChMSUJTU0gyX1BBVEgpL2luY2x1ZGUiDQorQ0ZMQUdTWkxJQiA9IC9ESEFWRV9aTElCX0ggL0RIQVZFX1pMSUIgL0RIQVZFX0xJQlogL0kgIiQoWkxJQl9QQVRIKSINCitDRkxBR1MgICAgID0gL0kuIC9JLi4vaW5jbHVkZSAvbm9sb2dvIC9XMyAvRUhzYyAvRFdJTjMyIC9GRCAvYyAvREJVSUxESU5HX0xJQkNVUkwgL0RfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OPTENCitDRkxBR1NMSUIgID0gL0RDVVJMX1NUQVRJQ0xJQg0KK0xOS0RMTCAgICAgPSBsaW5rLmV4ZSAvRExMDQorTE5LTElCICAgICA9IGxpbmsuZXhlIC9saWINCitMRkxBR1MgICAgID0gL25vbG9nbyAvbWFjaGluZTokKE1BQ0hJTkUpDQorU1NMTElCUyAgICA9IGxpYmVheTMyLmxpYiBzc2xlYXkzMi5saWINCitaTElCTElCU0RMTD0gemRsbC5saWINCitaTElCTElCUyAgID0gemxpYi5saWINCitXSU5MSUJTICAgID0gd3MyXzMyLmxpYiB3bGRhcDMyLmxpYg0KK0NGTEFHUyAgICAgPSAkKENGTEFHUykNCisNCitDRkdTRVQgICAgID0gRkFMU0UNCisNCishSUZERUYgV0lORE9XU19TU1BJDQorQ0ZMQUdTID0gJChDRkxBR1MpIC9EVVNFX1dJTkRPV1NfU1NQSSAvSSQoV0lORE9XU19TREtfUEFUSClcaW5jbHVkZQ0KKyFFTkRJRg0KKw0KKyFJRkRFRiBVU0VfSVBWNg0KK0NGTEFHUyA9ICQoQ0ZMQUdTKSAvRFVTRV9JUFY2DQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIFJ1bnRpbWUgbGlicmFyeSBjb25maWd1cmF0aW9uDQorDQorUlRMSUIgICA9IC9NRA0KK1JUTElCRCAgPSAvTURkDQorDQorIUlGICIkKFJUTElCQ0ZHKSIgPT0gInN0YXRpYyINCitSVExJQiAgPSAvTVQNCitSVExJQkQgPSAvTVRkDQorIUVORElGDQorDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZQ0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSINCitUQVJHRVQgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Utc3NsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzIiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS16bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Utc3NsLXpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLXNzbC1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoTEZMQUdTU1NMKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1NTTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1zc2wtc3NoMi16bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC1zc2gyLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQl9OQU1FKS5saWINCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzIiDQorTEZMQUdTU1NIMiA9ICIvTElCUEFUSDokKExJQlNTSDJfUEFUSCkiDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChMRkxBR1NTU0wpICQoTEZMQUdTU1NIMikgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTU1NIMikgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoTElCU1NIMl9QQVRIKS9SZWxlYXNlL3NyYy9saWJzc2gyLmxpYiAkKFpMSUJfUEFUSCkvemxpYi5saWINCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtc3NoMi16bGliDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wtc3NoMi16bGliIg0KK1RBUkdFVCAgID0gJChMSUJfTkFNRV9ERUJVRykubGliDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0gyID0gIi9MSUJQQVRIOiQoTElCU1NIMl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoWkxJQkxJQlMpICQoTEZMQUdTU1NMKSAkKExGTEFHU1NTSDIpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NTU0gyKSAkKENGTEFHU1pMSUIpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChMSUJTU0gyX1BBVEgpL1JlbGVhc2Uvc3JjL2xpYnNzaDIubGliICQoWkxJQl9QQVRIKS96bGliLmxpYg0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbCINCitUQVJHRVQgPSAkKExJQkNVUkxfRFlOX0xJQl9SRUwpDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktETEwpICQoV0lOTElCUykgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX1JFTCkNCitDQyAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpDQorQ0ZHU0VUID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZS1kbGwtc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9EWU5fTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoTEZMQUdTU1NMKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChMSUJDVVJMX0lNUF9MSUJfUkVMKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1NTTCkNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9EWU5fTElCX1JFTCkNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NaTElCKSAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChMSUJDVVJMX0lNUF9MSUJfUkVMKQ0KK0NDICAgICAgID0gJChDQ05PREJHKSAkKFJUTElCKSAkKENGTEFHU1pMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX0RZTl9MSUJfUkVMKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NTU0wpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpIC9JTVBMSUI6JChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX1JFTCkNCitDQyAgICAgICA9ICQoQ0NOT0RCRykgJChSVExJQikgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1ZyINCitUQVJHRVQgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXNzbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzIiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChMRkxBR1NTU0wpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLXpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFpMSUJMSUJTKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctc3NsLXpsaWIiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyIg0KK0xOSyAgICAgID0gJChMTktMSUIpICQoWkxJQkxJQlMpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NTU0wpICQoQ0ZMQUdTWkxJQikgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctc3NsLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1NTTCA9IC9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbA0KK0xOSyAgICAgID0gJChMTktMSUIpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NMSUIpDQorQ0ZHU0VUICAgPSBUUlVFDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctemxpYi1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFpMSUJMSUJTRExMKSAkKExGTEFHU1pMSUIpIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKQ0KK0NDICAgICAgID0gJChDQ0RFQlVHKSAkKFJUTElCRCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1zc2wtZGxsLXpsaWItZGxsIg0KK1RBUkdFVCAgID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKQ0KK0RJUk9CSiAgID0gJChDRkcpDQorTEZMQUdTWkxJQiA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorTEZMQUdTU1NMID0gIi9MSUJQQVRIOiQoT1BFTlNTTF9QQVRIKVxvdXQzMmRsbCINCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTkxJQlMpICQoU1NMTElCUykgJChaTElCTElCU0RMTCkgJChMRkxBR1NTU0wpICQoTEZMQUdTWkxJQikgL291dDokKERJUk9CSilcJChUQVJHRVQpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKSAkKENGTEFHU0xJQikNCitDRkdTRVQgICA9IFRSVUUNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1kbGwNCisNCishSUYgIiQoQ0ZHKSIgPT0gImRlYnVnLWRsbCINCitUQVJHRVQgPSAkKExJQkNVUkxfRFlOX0xJQl9EQkcpDQorRElST0JKID0gJChDRkcpDQorTE5LICAgID0gJChMTktETEwpICQoV0lOTElCUykgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9EQkcpIC9QREI6JChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX1BEQikNCitDQyAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSANCitDRkdTRVQgPSBUUlVFDQorUkVTT1VSQ0UgPSAkKERJUk9CSilcbGliY3VybC5yZXMNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBkZWJ1Zy1kbGwtc3NsLWRsbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAiZGVidWctZGxsLXNzbC1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfRFlOX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NTU0wgPSAiL0xJQlBBVEg6JChPUEVOU1NMX1BBVEgpXG91dDMyZGxsIg0KK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOTElCUykgJChTU0xMSUJTKSAkKExGTEFHU1NTTCkgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9EQkcpIC9QREI6JChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX1BEQikNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTU1NMKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgZGVidWctZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1kbGwtemxpYi1kbGwiDQorVEFSR0VUICAgPSAkKExJQkNVUkxfRFlOX0xJQl9EQkcpDQorRElST0JKICAgPSAkKENGRykNCitMRkxBR1NaTElCID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitMTksgICAgICA9ICQoTE5LRExMKSAkKFdJTkxJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTWkxJQikgL0RFQlVHIC9vdXQ6JChESVJPQkopXCQoVEFSR0VUKSAvSU1QTElCOiQoRElST0JKKVwkKExJQkNVUkxfSU1QX0xJQl9EQkcpIC9QREI6JChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX1BEQikNCitDQyAgICAgICA9ICQoQ0NERUJVRykgJChSVExJQkQpICQoQ0ZMQUdTWkxJQikNCitDRkdTRVQgICA9IFRSVUUNCitSRVNPVVJDRSA9ICQoRElST0JKKVxsaWJjdXJsLnJlcw0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIGRlYnVnLWRsbC1zc2wtZGxsLXpsaWItZGxsDQorDQorIUlGICIkKENGRykiID09ICJkZWJ1Zy1kbGwtc3NsLWRsbC16bGliLWRsbCINCitUQVJHRVQgICA9ICQoTElCQ1VSTF9EWU5fTElCX0RCRykNCitESVJPQkogICA9ICQoQ0ZHKQ0KK0xGTEFHU1pMSUIgPSAiL0xJQlBBVEg6JChaTElCX1BBVEgpIg0KK0xGTEFHU1NTTCA9ICIvTElCUEFUSDokKE9QRU5TU0xfUEFUSClcb3V0MzJkbGwiDQorTE5LICAgICAgPSAkKExOS0RMTCkgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlNETEwpICQoTEZMQUdTU1NMKSAkKExGTEFHU1pMSUIpIC9ERUJVRyAvb3V0OiQoRElST0JKKVwkKFRBUkdFVCkgL0lNUExJQjokKERJUk9CSilcJChMSUJDVVJMX0lNUF9MSUJfREJHKSAvUERCOiQoRElST0JKKVwkKExJQkNVUkxfRFlOX0xJQl9QREIpDQorQ0MgICAgICAgPSAkKENDREVCVUcpICQoUlRMSUJEKSAkKENGTEFHU1NTTCkgJChDRkxBR1NaTElCKQ0KK0NGR1NFVCAgID0gVFJVRQ0KK1JFU09VUkNFID0gJChESVJPQkopXGxpYmN1cmwucmVzDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIFVzYWdlDQorIw0KKyFJRiAiJChDRkdTRVQpIiA9PSAiRkFMU0UiICYmICIkKENGRykiICE9ICIiDQorIU1FU1NBR0UgVXNhZ2U6IG5tYWtlIC9mIG1ha2VmaWxlLnZjOSBDRkc9PGNvbmZpZz4gPHRhcmdldD4NCishTUVTU0FHRSB3aGVyZSA8Y29uZmlnPiBpcyBvbmUgb2Y6DQorIU1FU1NBR0UgICByZWxlYXNlICAgICAgICAgICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeQ0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wgICAgICAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wNCishTUVTU0FHRSAgIHJlbGVhc2UtemxpYiAgICAgICAgICAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wtemxpYiAgICAgICAgICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wgYW5kIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2Utc3NsLXNzaDItemxpYiAgICAgICAgLSByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsLCBzc2gyIGFuZCB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLXNzbC1kbGwgICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICByZWxlYXNlLXpsaWItZGxsICAgICAgICAgICAgIC0gcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgcmVsZWFzZS1zc2wtZGxsLXpsaWItZGxsICAgICAtIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorIU1FU1NBR0UgICByZWxlYXNlLWRsbCAgICAgICAgICAgICAgICAgIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkNCishTUVTU0FHRSAgIHJlbGVhc2UtZGxsLXNzbC1kbGwgICAgICAgICAgLSByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICByZWxlYXNlLWRsbC16bGliLWRsbCAgICAgICAgIC0gcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIHJlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGwgLSByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC1zc2gyLXpsaWIgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIHNzbCwgc3NoMiBhbmQgemxpYg0KKyFNRVNTQUdFICAgZGVidWcgICAgICAgICAgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5DQorIU1FU1NBR0UgICBkZWJ1Zy1zc2wgICAgICAgICAgICAgICAgICAgIC0gZGVidWcgc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wNCishTUVTU0FHRSAgIGRlYnVnLXpsaWIgICAgICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIHpsaWINCishTUVTU0FHRSAgIGRlYnVnLXNzbC16bGliICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIHNzbCBhbmQgemxpYg0KKyFNRVNTQUdFICAgZGVidWctc3NsLWRsbCAgICAgICAgICAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wNCishTUVTU0FHRSAgIGRlYnVnLXpsaWItZGxsICAgICAgICAgICAgICAgLSBkZWJ1ZyBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgZGVidWctc3NsLWRsbC16bGliLWRsbCAgICAgICAtIGRlYnVnIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wgYW5kIGR5bmFtaWMgemxpYg0KKyFNRVNTQUdFICAgZGVidWctZGxsICAgICAgICAgICAgICAgICAgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeQ0KKyFNRVNTQUdFICAgZGVidWctZGxsLXNzbC1kbGwgICAgICAgICAgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorIU1FU1NBR0UgICBkZWJ1Zy1kbGwtemxpYi1kbGwgICAgICAgICAgIC0gZGVidWcgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyB6bGliMQ0KKyFNRVNTQUdFICAgZGVidWctZGxsLXNzbC1kbGwtemxpYi1kbGwgICAtIGRlYnVnIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCishTUVTU0FHRSA8dGFyZ2V0PiBjYW4gYmUgbGVmdCBibGFuayBpbiB3aGljaCBjYXNlIGFsbCBpcyBhc3N1bWVkDQorIUVSUk9SIHBsZWFzZSBjaG9vc2UgYSB2YWxpZCBjb25maWd1cmF0aW9uICIkKENGRykiDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIE9ubHkgdGhlIGNsZWFuIHRhcmdldCBjYW4gYmUgdXNlZCBpZiBhIGNvbmZpZyB3YXMgbm90IHByb3ZpZGVkLg0KKyMNCishSUYgIiQoQ0ZHU0VUKSIgPT0gIkZBTFNFIg0KK2NsZWFuOg0KKwlALWVyYXNlIC9zICouZGxsIDI+IE5VTA0KKwlALWVyYXNlIC9zICouZXhwIDI+IE5VTA0KKwlALWVyYXNlIC9zICouaWRiIDI+IE5VTA0KKwlALWVyYXNlIC9zICoubGliIDI+IE5VTA0KKwlALWVyYXNlIC9zICoub2JqIDI+IE5VTA0KKwlALWVyYXNlIC9zICoucGNoIDI+IE5VTA0KKwlALWVyYXNlIC9zICoucGRiIDI+IE5VTA0KKwlALWVyYXNlIC9zICoucmVzIDI+IE5VTA0KKyFFTFNFDQorIyBBIGNvbmZpZyB3YXMgcHJvdmlkZWQsIHNvIHRoZSBsaWJyYXJ5IGNhbiBiZSBidWlsdC4NCisjDQorWF9PQkpTPSBcDQorCSQoRElST0JKKVxhc3luLWFyZXMub2JqIFwNCisJJChESVJPQkopXGFzeW4tdGhyZWFkLm9iaiBcDQorCSQoRElST0JKKVxiYXNlNjQub2JqIFwNCisJJChESVJPQkopXGNvbm5lY3Qub2JqIFwNCisJJChESVJPQkopXGNvbnRlbnRfZW5jb2Rpbmcub2JqIFwNCisJJChESVJPQkopXGNvb2tpZS5vYmogXA0KKwkkKERJUk9CSilcY3VybF9hZGRyaW5mby5vYmogXA0KKwkkKERJUk9CSilcY3VybF9mbm1hdGNoLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX2dldGhvc3RuYW1lLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX21lbXJjaHIub2JqIFwNCisJJChESVJPQkopXGN1cmxfbnRsbS5vYmogXA0KKwkkKERJUk9CSilcY3VybF9udGxtX2NvcmUub2JqIFwNCisJJChESVJPQkopXGN1cmxfbnRsbV9tc2dzLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX250bG1fd2Iub2JqIFwNCisJJChESVJPQkopXGN1cmxfcmFuZC5vYmogXA0KKwkkKERJUk9CSilcY3VybF9ydG1wLm9iaiBcDQorCSQoRElST0JKKVxjdXJsX3NzcGkub2JqIFwNCisJJChESVJPQkopXGN1cmxfdGhyZWFkcy5vYmogXA0KKwkkKERJUk9CSilcZGljdC5vYmogXA0KKwkkKERJUk9CSilcZWFzeS5vYmogXA0KKwkkKERJUk9CSilcZXNjYXBlLm9iaiBcDQorCSQoRElST0JKKVxmaWxlaW5mby5vYmogXA0KKwkkKERJUk9CSilcZmlsZS5vYmogXA0KKwkkKERJUk9CSilcZm9ybWRhdGEub2JqIFwNCisJJChESVJPQkopXGZ0cGxpc3RwYXJzZXIub2JqIFwNCisJJChESVJPQkopXGZ0cC5vYmogXA0KKwkkKERJUk9CSilcZ2V0ZW52Lm9iaiBcDQorCSQoRElST0JKKVxnZXRpbmZvLm9iaiBcDQorCSQoRElST0JKKVxnb3BoZXIub2JqIFwNCisJJChESVJPQkopXGd0bHMub2JqIFwNCisJJChESVJPQkopXGhhc2gub2JqIFwNCisJJChESVJPQkopXGhtYWMub2JqIFwNCisJJChESVJPQkopXGhvc3Rhc3luLm9iaiBcDQorCSQoRElST0JKKVxob3N0aXA0Lm9iaiBcDQorCSQoRElST0JKKVxob3N0aXA2Lm9iaiBcDQorCSQoRElST0JKKVxob3N0aXAub2JqIFwNCisJJChESVJPQkopXGhvc3RzeW4ub2JqIFwNCisJJChESVJPQkopXGh0dHBfY2h1bmtzLm9iaiBcDQorCSQoRElST0JKKVxodHRwX2RpZ2VzdC5vYmogXA0KKwkkKERJUk9CSilcaHR0cF9uZWdvdGlhdGUub2JqIFwNCisgICAgICAgICQoRElST0JKKVxodHRwX25lZ290aWF0ZV9zc3BpLm9iaiBcDQorCSQoRElST0JKKVxodHRwLm9iaiBcDQorCSQoRElST0JKKVxodHRwX3Byb3h5Lm9iaiBcDQorCSQoRElST0JKKVxpZjJpcC5vYmogXA0KKwkkKERJUk9CSilcaW1hcC5vYmogXA0KKwkkKERJUk9CSilcaW5ldF9udG9wLm9iaiBcDQorCSQoRElST0JKKVxpbmV0X3B0b24ub2JqIFwNCisJJChESVJPQkopXGxkYXAub2JqIFwNCisJJChESVJPQkopXGxsaXN0Lm9iaiBcDQorCSQoRElST0JKKVxtZDQub2JqIFwNCisJJChESVJPQkopXG1kNS5vYmogXA0KKwkkKERJUk9CSilcbWVtZGVidWcub2JqIFwNCisJJChESVJPQkopXG1wcmludGYub2JqIFwNCisJJChESVJPQkopXG11bHRpLm9iaiBcDQorCSQoRElST0JKKVxuZXRyYy5vYmogXA0KKwkkKERJUk9CSilcbm9uYmxvY2sub2JqIFwNCisJJChESVJPQkopXG9wZW5sZGFwLm9iaiBcDQorCSQoRElST0JKKVxwYXJzZWRhdGUub2JqIFwNCisJJChESVJPQkopXHBpbmdwb25nLm9iaiBcDQorCSQoRElST0JKKVxwb2xhcnNzbC5vYmogXA0KKwkkKERJUk9CSilccG9wMy5vYmogXA0KKwkkKERJUk9CSilccHJvZ3Jlc3Mub2JqIFwNCisJJChESVJPQkopXHJhd3N0ci5vYmogXA0KKwkkKERJUk9CSilccnRzcC5vYmogXA0KKwkkKERJUk9CSilcc2VsZWN0Lm9iaiBcDQorCSQoRElST0JKKVxzZW5kZi5vYmogXA0KKwkkKERJUk9CSilcc2hhcmUub2JqIFwNCisJJChESVJPQkopXHNsaXN0Lm9iaiBcDQorCSQoRElST0JKKVxzbXRwLm9iaiBcDQorCSQoRElST0JKKVxzb2Nrc19nc3NhcGkub2JqIFwNCisJJChESVJPQkopXHNvY2tzLm9iaiBcDQorCSQoRElST0JKKVxzb2Nrc19zc3BpLm9iaiBcDQorCSQoRElST0JKKVxzcGVlZGNoZWNrLm9iaiBcDQorCSQoRElST0JKKVxzcGxheS5vYmogXA0KKwkkKERJUk9CSilcc3NoLm9iaiBcDQorCSQoRElST0JKKVxzc2xnZW4ub2JqIFwNCisJJChESVJPQkopXHNzbHVzZS5vYmogXA0KKwkkKERJUk9CSilcc3RyZXF1YWwub2JqIFwNCisJJChESVJPQkopXHN0cmVycm9yLm9iaiBcDQorCSQoRElST0JKKVxzdHJ0b2sub2JqIFwNCisJJChESVJPQkopXHN0cnRvb2ZmdC5vYmogXA0KKwkkKERJUk9CSilcdGVsbmV0Lm9iaiBcDQorCSQoRElST0JKKVx0ZnRwLm9iaiBcDQorCSQoRElST0JKKVx0aW1ldmFsLm9iaiBcDQorCSQoRElST0JKKVx0cmFuc2Zlci5vYmogXA0KKwkkKERJUk9CSilcdXJsLm9iaiBcDQorCSQoRElST0JKKVx2ZXJzaW9uLm9iaiBcDQorCSQoRElST0JKKVx3YXJubGVzcy5vYmogXA0KKwkkKERJUk9CSilcd2lsZGNhcmQub2JqIFwNCisJJChSRVNPVVJDRSkNCisNCithbGwgOiAkKFRBUkdFVCkNCisNCiskKFRBUkdFVCk6ICQoWF9PQkpTKQ0KKwkkKExOSykgJChMRkxBR1MpICQoWF9PQkpTKQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCQ1VSTF9TVEFfTElCX1JFTCkgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCQ1VSTF9TVEFfTElCX0RCRykgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX1JFTCkgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCQ1VSTF9EWU5fTElCX0RCRykgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX1JFTCkgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCQoTElCQ1VSTF9JTVBfTElCX0RCRykgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCouZXhwICAgICAgICAgICAgICAgICAgLiAveQ0KKwkteGNvcHkgJChESVJPQkopXCoucGRiICAgICAgICAgICAgICAgICAgLiAveQ0KKw0KKyQoWF9PQkpTKTogJChESVJPQkopDQorDQorJChESVJPQkopOg0KKwlAaWYgbm90IGV4aXN0ICIkKERJUk9CSikiIG1rZGlyICQoRElST0JKKQ0KKw0KKy5TVUZGSVhFUzogLmMgLm9iaiAucmVzDQorDQorey5cfS5jeyQoRElST0JKKVx9Lm9iajoNCisJJChDQykgJChDRkxBR1MpIC9GbyIkQCIgICQ8DQorDQorZGVidWctZGxsXGxpYmN1cmwucmVzIFwNCitkZWJ1Zy1kbGwtc3NsLWRsbFxsaWJjdXJsLnJlcyBcDQorZGVidWctZGxsLXpsaWItZGxsXGxpYmN1cmwucmVzIFwNCitkZWJ1Zy1kbGwtc3NsLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlczogbGliY3VybC5yYw0KKwlyYyAvZERFQlVHQlVJTEQ9MSAvRm8gJEAgbGliY3VybC5yYw0KKw0KK3JlbGVhc2UtZGxsXGxpYmN1cmwucmVzIFwNCityZWxlYXNlLWRsbC1zc2wtZGxsXGxpYmN1cmwucmVzIFwNCityZWxlYXNlLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlcyBcDQorcmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbFxsaWJjdXJsLnJlczogbGliY3VybC5yYw0KKwlyYyAvZERFQlVHQlVJTEQ9MCAvRm8gJEAgbGliY3VybC5yYw0KKyFFTkRJRiAgIyBFbmQgb2YgY2FzZSB3aGVyZSBhIGNvbmZpZyB3YXMgcHJvdmlkZWQuDQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLnZ4d29ya3MgYi9jdXJsLTcuMjUuMC9saWIvTWFrZWZpbGUudnh3b3JrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWEzNmNjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL01ha2VmaWxlLnZ4d29ya3MKQEAgLTAsMCArMSwxNzcgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIworIworI0ZpbGVuYW1lICAgOiBNYWtlZmlsZS52eHdvcmtzCisjRGVzY3JpcHRpb246IG1ha2VmaWxlIHRvIGJlIHVzZWQgaW4gb3JkZXIgdG8gY29tcGlsZSBsaWJjdXJsIGZvciBWeFdvb3JrcyA2LjMuCisjCisjSG93IHRvIHVzZToKKyMgICAgICAgICAgICAgMS4gQWRqdXN0IGVudmlyb25tZW50IHZhcmlhYmxlcyBhdCB0aGUgZmlsZSBiZWdpbm5pbmcKKyMgICAgICAgICAgICAgMi4gT3BlbiB0aGUgQ29tbWFuZCBQcm9tcHQgd2luZG93IGFuZCBjaGFuZ2UgZGlyZWN0b3J5ICgnY2QnKQorIyAgICAgICAgICAgICAgICBpbnRvIHRoZSAnbGliJyBmb2xkZXIKKyMgICAgICAgICAgICAgMy4gQWRkIDxDWUdXSU4+L2JpbiBmb2xkZXIgdG8gdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgdHlwZSAnc2V0IFBBVEg9QzovZW1iZWRkZWQvY3lnd2luL2JpbjslUEFUSCUnCisjICAgICAgICAgICAgIDQuIEJ1aWxkIHRoZSBsaWJyYXJ5IGJ5IHR5cGluZyAnbWFrZSAtZiAuL01ha2VmaWxlLnZ4d29ya3MnCisjICAgICAgICAgICAgIEFzIGEgcmVzdWx0IHRoZSBsaWJjdXJsLmEgc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlICdsaWInIGZvbGRlci4KKyMgICAgICAgICAgICAgVG8gY2xlYW4gcGFja2FnZSB1c2UgJ21ha2UgLWYgLi9NYWtlZmlsZS52eHdvcmtzIGNsZWFuJworI1JlcXVpcmVtZW50czoKKyMgICAgICAgICAgICAgMS4gV2luWFAgbWFjaGluZQorIyAgICAgICAgICAgICAyLiBGdWxsIENZR1dJTiBpbnN0YWxsYXRpb24gKG9wZW4gc291cmNlKSB3aXRoIEdOVSBtYWtlIHZlcnNpb24KKyMgICAgICAgICAgICAgICAgdjMuNzggb3IgaGlnaGVyCisjICAgICAgICAgICAgIDMuIFdpbmRSaXZlciBXb3JrYmVuY2ggd2l0aCB2eFdvcmtzIDYuMyAoY29tbWVyY2lhbCkKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW52aXJvbm1lbnQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitleHBvcnQgV0lORF9IT01FIDo9IEM6L2VtYmVkZGVkL1dvcmtiZW5jaDIuNS4wLjEKK2V4cG9ydCBXSU5EX0JBU0UgOj0gJChXSU5EX0hPTUUpL3Z4d29ya3MtNi4zCitleHBvcnQgV0lORF9IT1NUX1RZUEUgOj0geDg2LXdpbjMyCisKKyMgQlVJTERfVFlFOj0gPGRlYnVnPnw8cmVsZWFzZT4gKGJ1aWxkIHdpdGggZGVidWdnaW5nIGluZm8gb3Igb3B0aW1pemVkKQorQlVJTERfVFlQRSA6PSBkZWJ1ZworVVNFUl9DRkxBR1M6PQorCisjIGRpcmVjdG9yaWVzIHdoZXJlIHRvIHNlZWsgZm9yIGluY2x1ZGVzIGFuZCBsaWJyYXJpZXMKK09QRU5TU0xfSU5DIDo9IEQ6L2xpYnJhcmllcy9vcGVuc3NsL29wZW5zc2wtMC45LjhhLXZ4V29ya3M2LjMvaW5jbHVkZQorT1BFTlNTTF9MSUIgOj0gRDovbGlicmFyaWVzL29wZW5zc2wvb3BlbnNzbC0wLjkuOGEtdnhXb3JrczYuMworWkxJQl9JTkMgICAgOj0gRDovbGlicmFyaWVzL3psaWIvemxpYi0xLjIuMy1WeFdvcmtzNi4zL3psaWItMS4yLjMKK1pMSUJfTElCICAgIDo9IEQ6L2xpYnJhcmllcy96bGliL3psaWItMS4yLjMtVnhXb3JrczYuMy9iaW5hcmllcy92eHdvcmtzXzMuMV9nbnUvRGVidWcvbGliCitBUkVTX0lOQyAgICA6PQorQVJFU19MSUIgICAgOj0KKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGlsZXIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDQyA6PSBjY3BwYworQVIgOj0gYXJwcGMKK0xJTksgOj0gY2NwcGMKK0NGTEFHUyA6PSAtRF9fR05VQ19fIC1EX19wcGNfXyAtbXNvZnQtZmxvYXQgLWZuby1idWlsdGluIC1tY3B1PTYwNCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzYwNCAtRF9HTlVfVE9PTCAtV2FsbCAtVyAtV2lubGluZSAkKFVTRVJfQ0ZMQUdTKQorTERGTEFHUyA6PSAtbm9zdGRsaWIgLVdsLC1pIC1XbCwtWAorSU5DTFVERV9GTEFHIDo9IC1JCitDX0RFQlVHRkxBRyA6PSAtZworQ19PUFRGTEFHIDo9IC1PMgorQ09NUElMRV9PTkxZX0ZMQUcgOj0gLWMKK09CSl9FWFRFTlNJT04gOj0gLm8KK0NDX09CSl9PVVRQVVQgPSAtbyAkQAorQVJGTEFHUyA6PSAtcmMKK0xJQlNfRkxBRyA6PSAtbAorTElCU19ESVJGTEFHOj0gLUwKK0xEX0RFQlVHRkxBRyA6PSAkKENfREVCVUdGTEFHKQorRVhFQ1VURV9FWFRFTlNJT04gOj0gLm91dAorVE9PTF9DSEFJTl9CSU4gOj0gJChXSU5EX0hPTUUpL2dudS8zLjQuNC12eHdvcmtzLTYuMy8kKFdJTkRfSE9TVF9UWVBFKS9iaW4vCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEFkZCAtRElORVQ2IGlmIHRoZSBPUyBrZXJuZWwgaW1hZ2Ugd2FzIGJ1aWx0IHdpdGggSVB2NiBzdXBwb3J0CisjIENGTEFHUyArPSAtRElORVQ2CisKKyMgU2V0IHVwIGNvbXBpbGVyIGFuZCBsaW5rZXIgZmxhZ3MgZm9yIGRlYnVnIG9yIG9wdGltaXphdGlvbgoraWZlcSAoJChCVUlMRF9UWVBFKSwgZGVidWcpCitDRkxBR1MgKz0gJChDX0RFQlVHRkxBRykKK0xERkxBR1MgKz0gJChMRF9ERUJVR0ZMQUcpCitlbHNlCitDRkxBR1MgKz0gJChDX09QVEZMQUcpCitlbmRpZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBNYWluIE1ha2VmaWxlIGFuZCBwb3NzaWJsZSBzdWItbWFrZSBmaWxlcworTUFLRUZJTEVTIDo9IE1ha2VmaWxlLnZ4d29ya3MKKworIyBMaXN0IG9mIGV4dGVybmFsIGluY2x1ZGUgZGlyZWN0b3JpZXMKKyMtLS0tLQorIyBJTVBPUlRBTlQ6IGluY2x1ZGUgT1BFTlNTTCBkaXJlY3RvcmllcyBiZWZvcmUgc3lzdGVtCisjICAgICAgICAgICAgaW4gb3JkZXIgdG8gcHJldmVudCBXaW5kUml2ZXIgT3BlblNTTCB0byBiZSB1c2VkLgorIy0tLS0tCitJTkNMVURFX0RJUlMgOj0gLi4vaW5jbHVkZSAkKE9QRU5TU0xfSU5DKSAkKFpMSUJfSU5DKSAkKEFSRVNfSU5DKSAkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAKKworIyBMaXN0IG9mIGV4dGVybmFsIGxpYnJhcmllcyBhbmQgdGhlaXIgZGlyZWN0b3JpZXMKK0xJQlNfTElTVCA6PSAuCitMSUJfRElSUyAgOj0gLgoraWZuZXEgKCQoT1BFTlNTTF9MSUIpLCApCitMSUJTX0xJU1QgKz0gY3J5cHRvIHNzbAorTElCX0RJUlMgICs9ICQoT1BFTlNTTF9MSUIpCitlbmRpZgoraWZuZXEgKCQoWkxJQl9MSUIpLCApCitMSUJTX0xJU1QgKz0gegorTElCX0RJUlMgICs9ICQoWkxJQl9MSUIpCitlbmRpZgoraWZuZXEgKCQoQVJFU19MSUIpLCApCitMSUJTX0xJU1QgKz0gYXJlcworTElCX0RJUlMgICs9ICQoQVJFU19MSUIpCitlbmRpZgorCisjIEFkZCBpbmNsdWRlIGFuZCBsaWJyYXJ5IGRpcmVjdG9yaWVzIGFuZCBsaWJyYXJpZXMKK0NGTEFHUyArPSAkKElOQ0xVREVfRElSUzolPSQoSU5DTFVERV9GTEFHKSUpCitMREZMQUdTICs9ICQoTElCX0RJUlM6JT0kKExJQlNfRElSRkxBRyklKQorCisjIExpc3Qgb2YgdGFyZ2V0cyB0byBtYWtlIGZvciBsaWJzIHRhcmdldAorTElCU19UQVJHRVRfTElTVCA6PSBsaWJjdXJsLmEKKworIyBMaXN0IG9mIGV4ZWN1YXRibGUgYXBwbGljYXRpb25zIHRvIG1ha2UgaW4gYWRkaXRpb24gdG8gbGlicyBmb3IgYWxsIHRhcmdldAorRVhFX1RBUkdFVF9MSVNUIDo9CisKKyMgU3VwcG9ydCBmb3IgZWNob2luZyBydWxlcworIyBJZiBFQ0hPUlVMRVMgdmFyaWFibGUgd2FzIHNldCAoZm9yIGV4YW1wbGUsIHVzaW5nICdtYWtlJyBjb21tYW5kIGxpbmUpCisjICBzb21lIHNoZWxsIGNvbW1hbmRzIGluIHRoZSBydWxlcyB3aWxsIGJlIGVjaG9lZAoraWZuZXEgKCQoc3RyaXAgJChmaW5kc3RyaW5nICQoRUNIT1JVTEVTKSwgeWVzIFlFUyAxIHRydWUgVFJVRSkpLCkKK19AXyA6PQorZWxzZQorX0BfIDo9IEAKK2VuZGlmCisKKyMgRGlyZWN0b3J5IHRvIGhvbGQgY29tcGlsYXRpb24gaW50ZXJtZWRpYXRlIGZpbGVzCitUTVBfRElSIDo9IHRtcAorCisjIEdldCBzb3VyY2VzIGFuZCBoZWFkZXJzIHRvIGJlIGNvbXBpbGVkCitpbmNsdWRlIE1ha2VmaWxlLmluYworCisjIExpc3Qgb2YgaGVhZGVycworSU5DTFVERV9GSUxFUyA6PSAkKEhIRUFERVJTKQorSU5DTFVERV9GSUxFUyArPSAkKHNoZWxsIGZpbmQgLi4vaW5jbHVkZSAtbmFtZSBcKi5oKQorCisjIExpc3Qgb2Ygc291cmNlcworT0JKTElTVCA6PSAkKENTT1VSQ0VTOiUuYz0kKFRNUF9ESVIpLyUkKE9CSl9FWFRFTlNJT04pKQorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIyMjIGRlZmF1bHQgcnVsZQorIyBJdCBzaG91bGQgYmUgZmlyc3QgcnVsZSBpbiB0aGlzIGZpbGUKKy5QSE9OWTogZGVmYXVsdAorZGVmYXVsdDogbGliY3VybC5hCisKKyMjIyMgQ29tcGlsaW5nIEMgZmlsZXMKKyQoVE1QX0RJUikvJSQoT0JKX0VYVEVOU0lPTik6ICUuYyAkKE1BS0VGSUxFUykKKwlAZWNobyBDb21waWxpbmcgQyBmaWxlICQ8ICQoRUNIT19TVERPVVQpCisJQFsgLWQgJChARCkgXSB8fCBta2RpciAtcCAkKEBEKQorCSQoX0BfKSAkKFRPT0xfQ0hBSU5fQklOKSQoQ0MpICQoQ09NUElMRV9PTkxZX0ZMQUcpICQoQ0ZMQUdTKSAkPCAkKENDX09CSl9PVVRQVVQpCisKKyMjIyMgQ3JlYXRpbmcgbGlicmFyeQorJChMSUJTX1RBUkdFVF9MSVNUKTogJChJTkNMVURFX0ZJTEVTKSAkKE1BS0VGSUxFUykgJChPQkpMSVNUKQorCUBlY2hvIENyZWF0aW5nIGxpYnJhcnkgJEAgJChFQ0hPX1NURE9VVCkKKwkkKF9AXykgWyAtZCAkKEBEKSBdIHx8IG1rZGlyIC1wICQoQEQpCisJJChfQF8pIHJtIC1mICRACisJJChfQF8pICQoVE9PTF9DSEFJTl9CSU4pJChBUikgJChBUkZMQUdTKSAkQCAkKGZpbHRlciAlJChPQkpfRVhURU5TSU9OKSwgJF4pCisKKyMjIyMgQ3JlYXRpbmcgYXBwbGljYXRpb24KKyQoRVhFX1RBUkdFVF9MSVNUKTogJChJTkNMVURFX0ZJTEVTKSAkKE1BS0VGSUxFUykgJChMSUJTX1RBUkdFVF9MSVNUKQorCUBlY2hvIENyZWF0aW5nIGFwcGxpY2F0aW9uICRACisJQFsgLWQgJChARCkgXSB8fCBta2RpciAtcCAkKEBEKQorCSQoX0BfKSAkKFRPT0xfQ0hBSU5fQklOKSQoTElOSykgJChDQ19PQkpfT1VUUFVUKSAkKCQoQClfRVhFX09CSl9MSVNUKSAkKExERkxBR1MpICQoJChAKV9FWEVfTElCU19ORUVERUQ6JT0kKExJQlNfRkxBRyklKSAkKExJQlNfTElTVDolPSQoTElCU19GTEFHKSUpICQoVVNFUl9MSUJTX0xJU1QpICQoVVNFUl9MSUJTX0xJU1QpCisKKyMjIyMgTWFzdGVyIFRhcmdldHMKK2xpYnM6ICQoTElCU19UQVJHRVRfTElTVCkKKwlAZWNobyBBbGwgbGlicyBtYWRlLgorCithbGw6ICQoTElCU19UQVJHRVRfTElTVCkgJChFWEVfVEFSR0VUX0xJU1QpICQoSU5DTFVERV9UQVJHRVRfTElTVCkKKwlAZWNobyBBbGwgdGFyZ2V0cyBtYWRlLgorCisjIENsZWFuIHVwCisuUEhPTlk6IGNsZWFuCitjbGVhbjoKKwkkKF9AXykgcm0gLXJmICQoVE1QX0RJUikKKwlAZWNobyBsaWJjdXJsIHdhcyBjbGVhbmVkLgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL1JFQURNRS5hcmVzIGIvY3VybC03LjI1LjAvbGliL1JFQURNRS5hcmVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNzc5MzcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvUkVBRE1FLmFyZXMKQEAgLTAsMCArMSw2OSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKworICAgICAgICAgIEhvdyBUbyBCdWlsZCBsaWJjdXJsIHRvIFVzZSBjLWFyZXMgRm9yIEFzeW5jaCBOYW1lIFJlc29sdmVzCisgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworYy1hcmVzOgorICBodHRwOi8vYy1hcmVzLmhheHguc2UvCisKK05PVEUKKyAgVGhlIGxhdGVzdCBsaWJjdXJsIHZlcnNpb24gcmVxdWlyZXMgYy1hcmVzIDEuNi4wIG9yIGxhdGVyLgorCisgIE9uY2UgdXBvbiB0aGUgdGltZSBsaWJjdXJsIGJ1aWx0IGZpbmUgd2l0aCB0aGUgIm9yaWdpbmFsIiBhcmVzLiBUaGF0IGlzIG5vCisgIGxvbmdlciB0cnVlLiBZb3UgbmVlZCB0byB1c2UgYy1hcmVzLgorCitCdWlsZCBjLWFyZXMKKz09PT09PT09PT09PQorCisxLiB1bnBhY2sgdGhlIGMtYXJlcyBhcmNoaXZlCisyLiBjZCBjLWFyZXMtZGlyCiszLiAuL2NvbmZpZ3VyZQorNC4gbWFrZQorNS4gbWFrZSBpbnN0YWxsCisKK0J1aWxkIGxpYmN1cmwgdG8gdXNlIGMtYXJlcyBpbiB0aGUgY3VybCBzb3VyY2UgdHJlZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuIG5hbWUgb3Igc3ltbGluayB0aGUgYy1hcmVzIHNvdXJjZSBkaXJlY3RvcnkgJ2FyZXMnIGluIHRoZSBjdXJsIHNvdXJjZQorICAgZGlyZWN0b3J5CisyLiAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1hcmVzCisKKyAgT3B0aW9uYWxseSwgeW91IGNhbiBwb2ludCBvdXQgdGhlIGMtYXJlcyBpbnN0YWxsIHRyZWUgcm9vdCB3aXRoIHRoZSB0aGUKKyAgLS1lbmFibGUtYXJlcyBvcHRpb24uCisKKzMuIG1ha2UKKworQnVpbGQgbGliY3VybCB0byB1c2UgYW4gaW5zdGFsbGVkIGMtYXJlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1hcmVzPS9wYXRoL3RvL2FyZXMvaW5zdGFsbAorMi4gbWFrZQorCitjLWFyZXMgb24gd2luMzIKKz09PT09PT09PT09PT09PQorKGRlc2NyaXB0aW9uIGJyb3VnaHQgYnkgRG9taW5pY2sgTWVnbGlvKQorCitGaXJzdCBJIGNvbXBpbGVkIGMtYXJlcy4gSSBjaGFuZ2VkIHRoZSBkZWZhdWx0IEMgcnVudGltZSBsaWJyYXJ5IHRvIGJlIHRoZQorc2luZ2xlLXRocmVhZGVkIHJhdGhlciB0aGFuIHRoZSBtdWx0aS10aHJlYWRlZCAodGhpcyBzZWVtcyB0byBiZSByZXF1aXJlZCB0bworcHJldmVudCBsaW5raW5nIGVycm9ycyBsYXRlciBvbikuIFRoZW4gSSBzaW1wbHkgYnVpbGQgdGhlIGFyZXNsaWIgcHJvamVjdCAodGhlCitvdGhlciBwcm9qZWN0cyBhZGlnL2Fob3N0IHNlZW0gdG8gZmFpbCB1bmRlciBNU1ZDKS4KKworTmV4dCB3YXMgbGliY3VybC4gSSBvcGVuZWQgbGliL2NvbmZpZy13aW4zMi5oIGFuZCBJIGFkZGVkIGE6CisgI2RlZmluZSBVU0VfQVJFUyAxCisKK05leHQgdGhpbmcgSSBkaWQgd2FzIEkgYWRkZWQgdGhlIHBhdGggZm9yIHRoZSBhcmVzIGluY2x1ZGVzIHRvIHRoZSBpbmNsdWRlCitwYXRoLCBhbmQgdGhlIGxpYmFyZXMubGliIHRvIHRoZSBsaWJyYXJpZXMuCisKK0xhc3RseSwgSSBhbHNvIGNoYW5nZWQgbGliY3VybCB0byBiZSBzaW5nbGUtdGhyZWFkZWQgcmF0aGVyIHRoYW4KK211bHRpLXRocmVhZGVkLCBhZ2FpbiB0aGlzIHdhcyB0byBwcmV2ZW50IHNvbWUgZHVwbGljYXRlIHN5bWJvbCBlcnJvcnMuIEknbQorbm90IHN1cmUgd2h5IEkgbmVlZGVkIHRvIGNoYW5nZSBldmVyeXRoaW5nIHRvIHNpbmdsZS10aHJlYWRlZCwgYnV0IHdoZW4gSQorZGlkbid0IEkgZ290IHJlZGVmaW5pdGlvbiBlcnJvcnMgZm9yIHNldmVyYWwgQ1JUIGZ1bmN0aW9ucyAobWFsbG9jLCBzdHJpY21wLAorZXRjLikKKworSSB3b3VsZCBoYXZlIG1vZGlmaWVkIHRoZSBNU1ZDKysgcHJvamVjdCBmaWxlcywgYnV0IEkgb25seSBoYXZlIFZDLk5FVCBhbmQgaXQKK3VzZXMgYSBkaWZmZXJlbnQgZm9ybWF0IHRoYW4gVkM2LjAgc28gSSBkaWRuJ3Qgd2FudCB0byBnbyBhbmQgY2hhbmdlCitldmVyeXRoaW5nIGFuZCByZW1vdmUgVkM2LjAgc3VwcG9ydCBmcm9tIGxpYmN1cmwuCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvUkVBRE1FLmN1cmxfb2ZmX3QgYi9jdXJsLTcuMjUuMC9saWIvUkVBRE1FLmN1cmxfb2ZmX3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzYjI3NwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9SRUFETUUuY3VybF9vZmZfdApAQCAtMCwwICsxLDY4IEBACisKKyAgIGN1cmxfb2ZmX3QgZXhwbGFpbmVkCisgICA9PT09PT09PT09PT09PT09PT09PQorCitjdXJsX29mZl90IGlzIGEgZGF0YSB0eXBlIHByb3ZpZGVkIGJ5IHRoZSBleHRlcm5hbCBsaWJjdXJsIGluY2x1ZGUgaGVhZGVycy4gSXQKK2lzIHRoZSB0eXBlIG1lYW50IHRvIGJlIHVzZWQgZm9yIHRoZSBjdXJsX2Vhc3lfc2V0b3B0KCkgb3B0aW9ucyB0aGF0IGVuZCB3aXRoCitMQVJHRS4gVGhlIHR5cGUgaXMgNjRiaXQgbGFyZ2Ugb24gbW9zdCBtb2Rlcm4gcGxhdGZvcm1zLgorCitUcmFuc2l0aW9uIGZyb20gPCA3LjE5LjAgdG8gPj0gNy4xOS4wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FwcGxpY2F0aW9ucyB0aGF0IHVzZWQgbGliY3VybCBiZWZvcmUgNy4xOS4wIHRoYXQgYXJlIHJlYnVpbHQgd2l0aCBhIGxpYmN1cmwKK3RoYXQgaXMgNy4xOS4wIG9yIGxhdGVyIG1heSBvciBtYXkgbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgYW55dGhpbmcgb2YKK3RoaXMuIFdlIGhhdmUgbWFkZSBhIHNpZ25pZmljYW50IGVmZm9ydCB0byBtYWtlIHRoZSB0cmFuc2l0aW9uIHJlYWxseSBzZWFtbGVzcworYW5kIHRyYW5zcGFyZW50LgorCitZb3UgaGF2ZSBoYXZlIHRvIHRha2Ugbm90aWNlIGlmIHlvdSBhcmUgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uczoKKworbyBZb3VyIGFwcCBpcyB1c2luZyBvciB3aWxsIGFmdGVyIHRoZSB0cmFuc2l0aW9uIHVzZSBhIGxpYmN1cmwgdGhhdCBpcyBidWlsdAorICB3aXRoIExGUyAobGFyZ2UgZmlsZSBzdXBwb3J0KSBkaXNhYmxlZCBldmVuIHRob3VnaCB5b3VyIHN5c3RlbSBvdGhlcndpc2UKKyAgc3VwcG9ydHMgaXQuCisKK28gWW91ciBhcHAgaXMgdXNpbmcgb3Igd2lsbCBhZnRlciB0aGUgdHJhbnNpdGlvbiB1c2UgYSBsaWJjdXJsIHRoYXQgZG9lc24ndAorICBzdXBwb3J0IExGUyBhdCBhbGwsIGJ1dCB5b3VyIHN5c3RlbSBhbmQgY29tcGlsZXIgc3VwcG9ydCA2NGJpdCBkYXRhIHR5cGVzLgorCitJbiBib3RoIHRoZXNlIGNhc2VzLCB0aGUgY3VybF9vZmZfdCB0eXBlIHdpbGwgbm93IChhZnRlciB0aGUgdHJhbnNpdGlvbikgYmUKKzY0Yml0IHdoZXJlIGl0IHByZXZpb3VzbHkgd2FzIDMyYml0LiBUaGlzIHdpbGwgY2F1c2UgYSBiaW5hcnkgaW5jb21wYXRpYmlsaXR5Cit0aGF0IHlvdSBNQVkgbmVlZCB0byBkZWFsIHdpdGguCisKK0JlbmVmaXRzCistLS0tLS0tLQorCitUaGlzIG5ldyB3YXkgaGFzIHNldmVyYWwgYmVuZWZpdHM6CisKK28gUGxhdGZvcm1zIHdpdGhvdXQgTEZTIHN1cHBvcnQgY2FuIHN0aWxsIHVzZSBsaWJjdXJsIHRvIGRvID4zMiBiaXQgZmlsZQorICB0cmFuc2ZlcnMgYW5kIHJhbmdlIG9wZXJhdGlvbnMgZXRjIGFzIGxvbmcgYXMgdGhleSBoYXZlID4zMiBiaXQgZGF0YS10eXBlcworICBzdXBwb3J0ZWQuCisKK28gQXBwbGljYXRpb25zIHdpbGwgbm8gbG9uZ2VyIGVhc2lseSBidWlsZCB3aXRoIHRoZSBjdXJsX29mZl90IHNpemUKKyAgbWlzbWF0Y2hlZCwgd2hpY2ggaGFzIGJlZW4gYSB2ZXJ5IGZyZXF1ZW50IChhbmQgYW5ub3lpbmcpIHByb2JsZW0gd2l0aAorICBsaWJjdXJsIDw9IDcuMTguMgorCitIaXN0b3JpY2FsbHkKKy0tLS0tLS0tLS0tLQorCitQcmV2aW91c2x5LCBiZWZvcmUgNy4xOS4wLCB0aGUgY3VybF9vZmZfdCB0eXBlIHdvdWxkIGJlIHJhdGhlciBzdHJvbmdseQorY29ubmVjdGVkIHRvIHRoZSBzaXplIG9mIHRoZSBzeXN0ZW0gb2ZmX3QgdHlwZSwgd2hlcmUgY3VycmVudGx5IGN1cmxfb2ZmX3QgaXMKK2luZGVwZW5kZW50IG9mIHRoYXQuCisKK1RoZSBzdHJvbmcgY29ubmVjdGlvbiB0byBvZmZfdCBtYWRlIGl0IHRyb3VibGVzb21lIGZvciBhcHBsaWNhdGlvbiBhdXRob3JzCitzaW5jZSB3aGVuIHRoZXkgZGlkIG1pc3Rha2VzLCB0aGV5IGNvdWxkIGdldCBjdXJsX29mZl90IHR5cGUgb2YgZGlmZmVyZW50CitzaXplcyBpbiB0aGUgYXBwIHZzIGxpYmN1cmwsIGFuZCB0aGF0IGNhdXNlZCBzdHJhbmdlIGVmZmVjdHMgdGhhdCB3ZXJlIGhhcmQgdG8KK3RyYWNrIGFuZCBkZXRlY3QgYnkgdXNlcnMgb2YgbGliY3VybC4KKworU09OQU1FCistLS0tLS0KKworV2Ugb3B0ZWQgdG8gbm90IGJ1bXAgdGhlIHNvbmFtZSBmb3IgdGhlIGxpYnJhcnkgdW5jb25kaXRpb25hbGx5LCBzaW1wbHkKK2JlY2F1c2Ugc29uYW1lIGJ1bXBpbmcgaXMgY2F1c2luZyBhIGxvdCBvZiBncmllZiBhbmQgbW9hbmluZyBhbGwgb3ZlciB0aGUKK2NvbW11bml0eSBzbyB3ZSB0cnkgdG8ga2VlcCB0aGF0IGF0IG1pbmltdW0uIEFsc28sIG91ciBzZWxlY3RlZCBkZXNpZ24gcGF0aAorc2hvdWxkIGJlIDEwMCUgYmFja3dhcmRzIGNvbXBhdGlibGUgZm9yIHRoZSB2YXN0IG1ham9yaXR5IG9mIGFsbCBsaWJjdXJsCit1c2Vycy4KKworRW5mb3JjZSBTT05BTUUgYnVtcAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBjb25maWd1cmUgZG9lc24ndCBkZXRlY3QgeW91ciBjYXNlIHdoZXJlIGEgYnVtcCBpcyBuZWNlc3NhcnksIHJlLXJ1biBpdAord2l0aCB0aGUgLS1lbmFibGUtc29uYW1lLWJ1bXAgY29tbWFuZCBsaW5lIG9wdGlvbiEKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9SRUFETUUuY3VybHggYi9jdXJsLTcuMjUuMC9saWIvUkVBRE1FLmN1cmx4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNzViMGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvUkVBRE1FLmN1cmx4CkBAIC0wLDAgKzEsNjEgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisKKyAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBDb2RlIEZ1bmN0aW9ucyBBcHBzIE1pZ2h0IFVzZQorICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBsaWJjdXJsIHNvdXJjZSBjb2RlIG9mZmVycyBhIGZldyBmdW5jdGlvbnMgYnkgc291cmNlIG9ubHkuIFRoZXkgYXJlIG5vdAorcGFydCBvZiB0aGUgb2ZmaWNpYWwgbGliY3VybCBBUEksIGJ1dCB0aGUgc291cmNlIGZpbGVzIG1pZ2h0IGJlIHVzZWZ1bCBmb3IKK290aGVycyBzbyBhcHBzIGNhbiBvcHRpb25hbGx5IGNvbXBpbGUvYnVpbGQgd2l0aCB0aGVzZSBzb3VyY2VzIHRvIGdhaW4KK2FkZGl0aW9uYWwgZnVuY3Rpb25zLgorCitXZSBwcm92aWRlIHRoZW0gdGhyb3VnaCBhIHNpbmdsZSBoZWFkZXIgZmlsZSBmb3IgZWFzeSBhY2Nlc3MgZm9yIGFwcHM6CisiY3VybHguaCIKKworIGN1cmx4X3N0cnRvb2ZmdCgpCisKKyAgIEEgbWFjcm8gdGhhdCBjb252ZXJ0cyBhIHN0cmluZyBjb250YWluaW5nIGEgbnVtYmVyIHRvIGEgY3VybF9vZmZfdCBudW1iZXIuCisgICBUaGlzIG1pZ2h0IHVzZSB0aGUgY3VybHhfc3RydG9sbCgpIGZ1bmN0aW9uIHdoaWNoIGlzIHByb3ZpZGVkIGFzIHNvdXJjZQorICAgY29kZSBpbiBzdHJ0b29mZnQuYy4gTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBpcyBvbmx5IHByb3ZpZGVkIGlmIG5vCisgICBzdHJ0b2xsKCkgKG9yIGVxdWl2YWxlbnQpIGZ1bmN0aW9uIGV4aXN0IG9uIHlvdXIgcGxhdGZvcm0uIElmIGN1cmxfb2ZmX3QKKyAgIGlzIG9ubHkgYSAzMiBiaXQgbnVtYmVyIG9uIHlvdXIgcGxhdGZvcm0sIHRoaXMgbWFjcm8gdXNlcyBzdHJ0b2woKS4KKworIGN1cmx4X3R2bm93KCkKKworICAgcmV0dXJucyBhIHN0cnVjdCB0aW1ldmFsIGZvciB0aGUgY3VycmVudCB0aW1lLgorCisgY3VybHhfdHZkaWZmKCkKKworICAgcmV0dXJucyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byB0aW1ldmFsIHN0cnVjdHMsIGluIG51bWJlciBvZgorICAgbWlsbGlzZWNvbmRzLgorCisgY3VybHhfdHZkaWZmX3NlY3MoKQorCisgICByZXR1cm5zIHRoZSBzYW1lIGFzIGN1cmx4X3R2ZGlmZiBidXQgd2l0aCBmdWxsIHVzZWMgcmVzb2x1dGlvbiAoYXMgYQorICAgZG91YmxlKQorCitGVVRVUkUKKz09PT09PQorCisgU2V2ZXJhbCBmdW5jdGlvbnMgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHB1YmxpYyBjdXJsXyBuYW1lIHNwYWNlIGluIGEKKyBmdXR1cmUgbGliY3VybCByZWxlYXNlLiBUaGV5IHdpbGwgdGhlbiBvbmx5IGJlY29tZSBhdmFpbGFibGUgYXMgY3VybHhfCisgZnVuY3Rpb25zIGluc3RlYWQuIFRvIG1ha2UgdGhlIHRyYW5zaXRpb24gZWFzaWVyLCB3ZSBhbHJlYWR5IHRvZGF5IHByb3ZpZGUKKyB0aGVzZSBmdW5jdGlvbnMgd2l0aCB0aGUgY3VybHhfIHByZWZpeCB0byBhbGxvdyBzb3VyY2VzIHRvIGdldCBidWlsdCBwcm9wZXJseQorIHdpdGggdGhlIG5ldyBmdW5jdGlvbiBuYW1lcy4gVGhlIGZ1bmN0aW9ucyB0aGlzIGNvbmNlcm5zIGFyZToKKworICAgICAgY3VybHhfZ2V0ZW52CisgICAgICBjdXJseF9zdHJlcXVhbAorICAgICAgY3VybHhfc3RybmVxdWFsCisgICAgICBjdXJseF9tdnNucHJpbnRmCisgICAgICBjdXJseF9tc25wcmludGYKKyAgICAgIGN1cmx4X21hcHJpbnRmCisgICAgICBjdXJseF9tdmFwcmludGYKKyAgICAgIGN1cmx4X21zcHJpbnRmCisgICAgICBjdXJseF9tcHJpbnRmCisgICAgICBjdXJseF9tZnByaW50ZgorICAgICAgY3VybHhfbXZzcHJpbnRmCisgICAgICBjdXJseF9tdnByaW50ZgorICAgICAgY3VybHhfbXZmcHJpbnRmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvUkVBRE1FLmVuY29kaW5nIGIvY3VybC03LjI1LjAvbGliL1JFQURNRS5lbmNvZGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDEyYmI5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL1JFQURNRS5lbmNvZGluZwpAQCAtMCwwICsxLDYwIEBACisKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudCBFbmNvZGluZyBTdXBwb3J0IGZvciBsaWJjdXJsCisKKyogQWJvdXQgY29udGVudCBlbmNvZGluZ3M6CisKK0hUVFAvMS4xIFtSRkMgMjYxNl0gc3BlY2lmaWVzIHRoYXQgYSBjbGllbnQgbWF5IHJlcXVlc3QgdGhhdCBhIHNlcnZlciBlbmNvZGUKK2l0cyByZXNwb25zZS4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgdG8gY29tcHJlc3MgYSByZXNwb25zZSB1c2luZyBvbmUgb2YgYSBzZXQKK29mIGNvbW1vbmx5IGF2YWlsYWJsZSBjb21wcmVzc2lvbiB0ZWNobmlxdWVzLiBUaGVzZSBzY2hlbWVzIGFyZSBgZGVmbGF0ZScgKHRoZQoremxpYiBhbGdvcml0aG0pLCBgZ3ppcCcgYW5kIGBjb21wcmVzcycgW3NlYyAzLjUsIFJGQyAyNjE2XS4gQSBjbGllbnQgcmVxdWVzdHMKK3RoYXQgdGhlIHNldmVyIHBlcmZvcm0gYW4gZW5jb2RpbmcgYnkgaW5jbHVkaW5nIGFuIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIgaW4KK3RoZSByZXF1ZXN0IGRvY3VtZW50LiBUaGUgdmFsdWUgb2YgdGhlIGhlYWRlciBzaG91bGQgYmUgb25lIG9mIHRoZSByZWNvZ25pemVkCit0b2tlbnMgYGRlZmxhdGUnLCAuLi4gKHRoZXJlJ3MgYSB3YXkgdG8gcmVnaXN0ZXIgbmV3IHNjaGVtZXMvdG9rZW5zLCBzZWUgc2VjCiszLjUgb2YgdGhlIHNwZWMpLiBBIHNlcnZlciBNQVkgaG9ub3IgdGhlIGNsaWVudCdzIGVuY29kaW5nIHJlcXVlc3QuIFdoZW4gYQorcmVzcG9uc2UgaXMgZW5jb2RlZCwgdGhlIHNlcnZlciBpbmNsdWRlcyBhIENvbnRlbnQtRW5jb2RpbmcgaGVhZGVyIGluIHRoZQorcmVzcG9uc2UuIFRoZSB2YWx1ZSBvZiB0aGUgQ29udGVudC1FbmNvZGluZyBoZWFkZXIgaW5kaWNhdGVzIHdoaWNoIHNjaGVtZSB3YXMKK3VzZWQgdG8gZW5jb2RlIHRoZSBkYXRhLgorCitBIGNsaWVudCBtYXkgdGVsbCBhIHNlcnZlciB0aGF0IGl0IGNhbiB1bmRlcnN0YW5kIHNldmVyYWwgZGlmZmVyZW50IGVuY29kaW5nCitzY2hlbWVzLiBJbiB0aGlzIGNhc2UgdGhlIHNlcnZlciBtYXkgY2hvb3NlIGFueSBvbmUgb2YgdGhvc2UgYW5kIHVzZSBpdCB0bworZW5jb2RlIHRoZSByZXNwb25zZSAoaW5kaWNhdGluZyB3aGljaCBvbmUgdXNpbmcgdGhlIENvbnRlbnQtRW5jb2RpbmcgaGVhZGVyKS4KK0l0J3MgYWxzbyBwb3NzaWJsZSBmb3IgYSBjbGllbnQgdG8gYXR0YWNoIHByaW9yaXRpZXMgdG8gZGlmZmVyZW50IHNjaGVtZXMgc28KK3RoYXQgdGhlIHNlcnZlciBrbm93cyB3aGljaCBpdCBwcmVmZXJzLiBTZWUgc2VjIDE0LjMgb2YgUkZDIDI2MTYgZm9yIG1vcmUKK2luZm9ybWF0aW9uIG9uIHRoZSBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyLgorCisqIEN1cnJlbnQgc3VwcG9ydCBmb3IgY29udGVudCBlbmNvZGluZzoKKworU3VwcG9ydCBmb3IgdGhlICdkZWZsYXRlJyBhbmQgJ2d6aXAnIGNvbnRlbnQgZW5jb2RpbmcgYXJlIHN1cHBvcnRlZCBieQorbGliY3VybC4gQm90aCByZWd1bGFyIGFuZCBjaHVua2VkIHRyYW5zZmVycyBzaG91bGQgd29yayBmaW5lLiAgVGhlIGxpYnJhcnkKK3psaWIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZmVhdHVyZS4gJ2RlZmxhdGUnIHN1cHBvcnQgd2FzIGFkZGVkIGJ5IEphbWVzCitHYWxsYWdoZXIsIGFuZCBzdXBwb3J0IGZvciB0aGUgJ2d6aXAnIGVuY29kaW5nIHdhcyBhZGRlZCBieSBEYW4gRmFuZHJpY2guCisKKyogVGhlIGxpYmN1cmwgaW50ZXJmYWNlOgorCitUbyBjYXVzZSBsaWJjdXJsIHRvIHJlcXVlc3QgYSBjb250ZW50IGVuY29kaW5nIHVzZToKKworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9BQ0NFUFRfRU5DT0RJTkcsIDxzdHJpbmc+KQorCit3aGVyZSA8c3RyaW5nPiBpcyB0aGUgaW50ZW5kZWQgdmFsdWUgb2YgdGhlIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIuCisKK0N1cnJlbnRseSwgbGliY3VybCBvbmx5IHVuZGVyc3RhbmRzIGhvdyB0byBwcm9jZXNzIHJlc3BvbnNlcyB0aGF0IHVzZSB0aGUKKyJkZWZsYXRlIiBvciAiZ3ppcCIgQ29udGVudC1FbmNvZGluZywgc28gdGhlIG9ubHkgdmFsdWVzIGZvcgorQ1VSTE9QVF9BQ0NFUFRfRU5DT0RJTkcgdGhhdCB3aWxsIHdvcmsgKGJlc2lkZXMgImlkZW50aXR5LCIgd2hpY2ggZG9lcworbm90aGluZykgYXJlICJkZWZsYXRlIiBhbmQgImd6aXAiIElmIGEgcmVzcG9uc2UgaXMgZW5jb2RlZCB1c2luZyB0aGUKKyJjb21wcmVzcyIgb3IgbWV0aG9kcywgbGliY3VybCB3aWxsIHJldHVybiBhbiBlcnJvciBpbmRpY2F0aW5nIHRoYXQgdGhlCityZXNwb25zZSBjb3VsZCBub3QgYmUgZGVjb2RlZC4gIElmIDxzdHJpbmc+IGlzIE5VTEwgbm8gQWNjZXB0LUVuY29kaW5nIGhlYWRlcgoraXMgZ2VuZXJhdGVkLiAgSWYgPHN0cmluZz4gaXMgYSB6ZXJvLWxlbmd0aCBzdHJpbmcsIHRoZW4gYW4gQWNjZXB0LUVuY29kaW5nCitoZWFkZXIgY29udGFpbmluZyBhbGwgc3VwcG9ydGVkIGVuY29kaW5ncyB3aWxsIGJlIGdlbmVyYXRlZC4KKworVGhlIENVUkxPUFRfQUNDRVBUX0VOQ09ESU5HIG11c3QgYmUgc2V0IHRvIGFueSBub24tTlVMTCB2YWx1ZSBmb3IgY29udGVudCB0bworYmUgYXV0b21hdGljYWxseSBkZWNvZGVkLiAgSWYgaXQgaXMgbm90IHNldCBhbmQgdGhlIHNlcnZlciBzdGlsbCBzZW5kcyBlbmNvZGVkCitjb250ZW50IChkZXNwaXRlIG5vdCBoYXZpbmcgYmVlbiBhc2tlZCksIHRoZSBkYXRhIGlzIHJldHVybmVkIGluIGl0cyByYXcgZm9ybQorYW5kIHRoZSBDb250ZW50LUVuY29kaW5nIHR5cGUgaXMgbm90IGNoZWNrZWQuCisKKyogVGhlIGN1cmwgaW50ZXJmYWNlOgorCitVc2UgdGhlIC0tY29tcHJlc3NlZCBvcHRpb24gd2l0aCBjdXJsIHRvIGNhdXNlIGl0IHRvIGFzayBzZXJ2ZXJzIHRvIGNvbXByZXNzCityZXNwb25zZXMgdXNpbmcgYW55IGZvcm1hdCBzdXBwb3J0ZWQgYnkgY3VybC4KKworSmFtZXMgR2FsbGFnaGVyIDxqZ2FsbGFnaGVyQGdzby51cmkuZWR1PgorRGFuIEZhbmRyaWNoIDxkYW5AY29uZWhhcnZlc3RlcnMuY29tPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL1JFQURNRS5ob3N0aXAgYi9jdXJsLTcuMjUuMC9saWIvUkVBRE1FLmhvc3RpcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzIzYjkzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL1JFQURNRS5ob3N0aXAKQEAgLTAsMCArMSwzNSBAQAorIGhvc3RpcC5jIGV4cGxhaW5lZAorID09PT09PT09PT09PT09PT09PQorCisgVGhlIG1haW4gQ09NUElMRS1USU1FIERFRklORVMgdG8ga2VlcCBpbiBtaW5kIHdoZW4gcmVhZGluZyB0aGUgaG9zdCouYworIHNvdXJjZSBmaWxlIGFyZSB0aGVzZToKKworIENVUkxSRVNfSVBWNiAtIHRoaXMgaG9zdCBoYXMgZ2V0YWRkcmluZm8oKSBhbmQgZmFtaWx5LCBhbmQgdGh1cyB3ZSB1c2UKKyB0aGF0LiBUaGUgaG9zdCBtYXkgbm90IGJlIGFibGUgdG8gcmVzb2x2ZSBJUHY2LCBidXQgd2UgZG9uJ3QgcmVhbGx5IGhhdmUgdG8KKyB0YWtlIHRoYXQgaW50byBhY2NvdW50LiBIb3N0cyB0aGF0IGFyZW4ndCBJUHY2LWVuYWJsZWQgaGF2ZSBDVVJMUkVTX0lQVjQKKyBkZWZpbmVkLgorCisgQ1VSTFJFU19BUkVTIC0gaXMgZGVmaW5lZCBpZiBsaWJjdXJsIGlzIGJ1aWx0IHRvIHVzZSBjLWFyZXMgZm9yIGFzeW5jaHJvbm91cworIG5hbWUgcmVzb2x2ZXMuIEl0IGNhbm5vdCBoYXZlIEVOQUJMRV9JUFY2IGRlZmluZWQgYXQgdGhlIHNhbWUgdGltZSwgYXMgYy1hcmVzCisgaGFzIG5vIGlwdjYgc3VwcG9ydC4gVGhpcyBjYW4gYmUgV2luZG93cyBvciAqbml4LgorCisgQ1VSTFJFU19USFJFQURFRCAtIGlzIGRlZmluZWQgaWYgbGliY3VybCBpcyBidWlsdCB0byBydW4gdW5kZXIgKG5hdGl2ZSkKKyBXaW5kb3dzLCBhbmQgdGhlbiB0aGUgbmFtZSByZXNvbHZlIHdpbGwgYmUgZG9uZSBpbiBhIG5ldyB0aHJlYWQsIGFuZCB0aGUKKyBzdXBwb3J0ZWQgYXN5bmNoIEFQSSB3aWxsIGJlIHRoZSBzYW1lIGFzIGZvciBhcmVzLWJ1aWxkcy4KKworIElmIGFueSBvZiB0aGUgdHdvIHByZXZpb3VzIGFyZSBkZWZpbmVkLCBDVVJMUkVTX0FTWU5DSCBpcyBkZWZpbmVkIHRvby4gSWYKKyBsaWJjdXJsIGlzIG5vdCBidWlsdCB0byB1c2UgYW4gYXN5bmNocm9ub3VzIHJlc29sdmVyLCBDVVJMUkVTX1NZTkNIIGlzCisgZGVmaW5lZC4KKworIFRoZSBob3N0Ki5jIHNvdXJjZXMgZmlsZXMgYXJlIHNwbGl0IHVwIGxpa2UgdGhpczoKKworIGhvc3RpcC5jICAgLSBtZXRob2QtaW5kZXBlbmRlbnQgcmVzb2x2ZXIgZnVuY3Rpb25zIGFuZCB1dGlsaXR5IGZ1bmN0aW9ucworIGhvc3Rhc3luLmMgLSBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBuYW1lIHJlc29sdmVzCisgaG9zdHN5bi5jICAtIGZ1bmN0aW9ucyBmb3Igc3luY2hyb25vdXMgbmFtZSByZXNvbHZlcworIGhvc3RhcmVzLmMgLSBmdW5jdGlvbnMgZm9yIGFyZXMtdXNpbmcgbmFtZSByZXNvbHZlcworIGhvc3R0aHJlLmMgLSBmdW5jdGlvbnMgZm9yIHRocmVhZGVkIG5hbWUgcmVzb2x2ZXMKKyBob3N0aXA0LmMgIC0gaXB2NC1zcGVjaWZpYyBmdW5jdGlvbnMKKyBob3N0aXA2LmMgIC0gaXB2Ni1zcGVjaWZpYyBmdW5jdGlvbnMKKworIFRoZSBob3N0aXAuaCBpcyB0aGUgc2luZ2xlIHVuaXRlZCBoZWFkZXIgZmlsZSBmb3IgYWxsIHRoaXMuIEl0IGRlZmluZXMgdGhlCisgQ1VSTFJFU18qIGRlZmluZXMgYmFzZWQgb24gdGhlIGNvbmZpZyouaCBhbmQgc2V0dXAuaCBkZWZpbmVzLgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL1JFQURNRS5odHRwYXV0aCBiL2N1cmwtNy4yNS4wL2xpYi9SRUFETUUuaHR0cGF1dGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYwNTA0NQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9SRUFETUUuaHR0cGF1dGgKQEAgLTAsMCArMSw3NCBAQAorCisxLiBQVVQvUE9TVCB3aXRob3V0IGEga25vd24gYXV0aCB0byB1c2UgKHBvc3NpYmx5IG5vIGF1dGggcmVxdWlyZWQpOgorCisgICAoV2hlbiBleHBsaWNpdGx5IHNldCB0byB1c2UgYSBtdWx0aS1wYXNzIGF1dGggd2hlbiBkb2luZyBhIFBPU1QvUFVULAorICAgbGliY3VybCBzaG91bGQgaW1tZWRpYXRlbHkgZ28gdGhlIENvbnRlbnQtTGVuZ3RoOiAwIGJ5dGVzIHJvdXRlIHRvIGF2b2lkCisgICB0aGUgZmlyc3Qgc2VuZCBhbGwgZGF0YSBwaGFzZSwgc3RlcCAyLiBJZiB0b2xkIHRvIHVzZSBhIHNpbmdsZS1wYXNzIGF1dGgsCisgICBnb3RvIHN0ZXAgMy4pCisKKyAgIElzc3VlIHRoZSBwcm9wZXIgUFVUL1BPU1QgcmVxdWVzdCBpbW1lZGlhdGVseSwgd2l0aCB0aGUgY29ycmVjdAorICAgQ29udGVudC1MZW5ndGggYW5kIEV4cGVjdDogaGVhZGVycy4KKworICAgSWYgYSAxMDAgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgb3IgdGhlIHdhaXQgZm9yIG9uZSB0aW1lcyBvdXQsIHN0YXJ0IHNlbmRpbmcKKyAgIHRoZSByZXF1ZXN0LWJvZHkuCisKKyAgIElmIGEgNDAxIChvciA0MDcgd2hlbiB0YWxraW5nIHRocm91Z2ggYSBwcm94eSkgaXMgcmVjZWl2ZWQsIHRoZW46CisKKyAgIElmIHdlIGhhdmUgIm1vcmUgdGhhbiBqdXN0IGEgbGl0dGxlIiBkYXRhIGxlZnQgdG8gc2VuZCwgY2xvc2UgdGhlCisgICBjb25uZWN0aW9uLiBFeGFjdGx5IHdoYXQgIm1vcmUgdGhhbiBqdXN0IGEgbGl0dGxlIiBtZWFucyB3aWxsIGhhdmUgdG8gYmUKKyAgIGRldGVybWluZWQuIFBvc3NpYmx5IHRoZSBjdXJyZW50IHRyYW5zZmVyIHNwZWVkIHNob3VsZCBiZSB0YWtlbiBpbnRvCisgICBhY2NvdW50IGFzIHdlbGwuCisKKyAgIE5PVEU6IGlmIHRoZSBzaXplIG9mIHRoZSBQT1NUIGRhdGEgaXMgbGVzcyB0aGFuIE1BWF9JTklUSUFMX1BPU1RfU0laRSAod2hlbgorICAgQ1VSTE9QVF9QT1NURklFTERTIGlzIHVzZWQpLCBsaWJjdXJsIHdpbGwgc2VuZCBldmVyeXRoaW5nIGluIG9uZSBzaW5nbGUKKyAgIHdyaXRlKCkgKGFsbCByZXF1ZXN0LWhlYWRlcnMgYW5kIHJlcXVlc3QtYm9keSkgYW5kIHRodXMgaXQgd2lsbAorICAgdW5jb25kaXRpb25hbGx5IHNlbmQgdGhlIGZ1bGwgcG9zdCBkYXRhIGhlcmUuCisKKzIuIFBVVC9QT1NUIHdpdGggbXVsdGktcGFzcyBhdXRoIGJ1dCBub3QgeWV0IGNvbXBsZXRlbHkgbmVnb3RpYXRlZDoKKworICAgU2VuZCBhIFBVVC9QT1NUIHJlcXVlc3QsIHdlIGtub3cgdGhhdCBpdCB3aWxsIGJlIHJlamVjdGVkIGFuZCB0aHVzIHdlIGNsYWltCisgICBDb250ZW50LUxlbmd0aCB6ZXJvIHRvIGF2b2lkIGhhdmluZyB0byBzZW5kIHRoZSByZXF1ZXN0LWJvZHkuIChUaGlzIHNlZW1zCisgICB0byBiZSB3aGF0IElFIGRvZXMuKQorCiszLiBQVVQvUE9TVCBhcyB0aGUgbGFzdCBzdGVwIGluIHRoZSBhdXRoIG5lZ290aWF0aW9uLCB0aGF0IGlzIHdoZW4gd2UgaGF2ZQorICAgd2hhdCB3ZSBiZWxpZXZlIGlzIGEgY29tcGxldGVkIG5lZ290aWF0aW9uOgorCisgICBTZW5kIGEgZnVsbCBhbmQgcHJvcGVyIFBVVC9QT1NUIHJlcXVlc3QgKGFnYWluKSB3aXRoIHRoZSBwcm9wZXIKKyAgIENvbnRlbnQtTGVuZ3RoIGFuZCBhIGZvbGxvd2luZyByZXF1ZXN0LWJvZHkuCisKKyAgIE5PVEU6IHRoaXMgbWF5IHZlcnkgd2VsbCBiZSB0aGUgc2Vjb25kIChvciBldmVuIHRoaXJkKSB0aW1lIHRoZSB3aG9sZSBvciBhdAorICAgbGVhc3QgcGFydHMgb2YgdGhlIHJlcXVlc3QgYm9keSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuIFNpbmNlIHRoZSBkYXRhIG1heQorICAgYmUgcHJvdmlkZWQgdG8gbGliY3VybCB3aXRoIGEgY2FsbGJhY2ssIHdlIG5lZWQgYSB3YXkgdG8gdGVsbCB0aGUgYXBwIHRoYXQKKyAgIHRoZSB1cGxvYWQgaXMgdG8gYmUgcmVzdGFydGVkIHNvIHRoYXQgdGhlIGNhbGxiYWNrIHdpbGwgcHJvdmlkZSBkYXRhIGZyb20KKyAgIHRoZSBzdGFydCBhZ2Fpbi4gIFRoaXMgcmVxdWlyZXMgYW4gQVBJIG1ldGhvZC9tZWNoYW5pc20gdGhhdCBsaWJjdXJsCisgICBkb2Vzbid0IGhhdmUgdG9kYXkuIFNlZSBiZWxvdy4KKworRGF0YSBSZXdpbmQKKworICAgSXQgd2lsbCBiZSB0cm91Ymxlc29tZSBmb3Igc29tZSBhcHBzIHRvIGRlYWwgd2l0aCBhIHJld2luZCBsaWtlIHRoaXMgaW4gYWxsCisgICBjaXJjdW1zdGFuY2VzLiBJJ20gdGhpbmtpbmcgZm9yIGV4YW1wbGUgd2hlbiB1c2luZyAnY3VybCcgdG8gdXBsb2FkIGRhdGEKKyAgIGZyb20gc3RkaW4uIElmIGxpYmN1cmwgZW5kcyB1cCBoYXZpbmcgdG8gcmV3aW5kIHRoZSByZWFkaW5nIGZvciBhIHJlcXVlc3QKKyAgIHRvIHN1Y2NlZWQsIG9mIGNvdXJzZSBhIGxhY2sgb2YgdGhpcyBjYWxsYmFjayBvciBpZiBpdCByZXR1cm5zIGZhaWx1cmUsIHdpbGwKKyAgIGNhdXNlIHRoZSByZXF1ZXN0IHRvIGZhaWwgY29tcGxldGVseS4KKworICAgVGhlIG5ldyBjYWxsYmFjayBpcyBzZXQgd2l0aCBDVVJMT1BUX0lPQ1RMRlVOQ1RJT04gKGluIGFuIGF0dGVtcHQgdG8gYWRkIGEKKyAgIG1vcmUgZ2VuZXJpYyBmdW5jdGlvbiB0aGF0IG1pZ2h0IGJlIHVzZWQgZm9yIG90aGVyIElPLXJlbGF0ZWQgY29udHJvbHMgaW4KKyAgIHRoZSBmdXR1cmUpOgorCisgICAgIGN1cmxpb2VyciBjdXJsX2lvY3RsKENVUkwgKmhhbmRsZSwgY3VybGlvY21kIGNtZCwgdm9pZCAqY2xpZW50cCk7CisKKyAgIEFuZCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgcmVhZCBpcyB0byBiZSByZXdpbmRlZCwgaXQgd291bGQgYmUgY2FsbGVkIHdpdGggYQorICAgY21kIG5hbWVkIENVUkxJT0NNRF9SRVNUQVJUUkVBRC4gVGhlIGNhbGxiYWNrIHdvdWxkIHRoZW4gcmV0dXJuIENVUkxJT0VfT0ssCisgICBpZiB0aGluZ3MgYXJlIGZpbmUsIG9yIENVUkxJT0VfRkFJTFJFU1RBUlQgaWYgbm90LgorCitCYWNrd2FyZHMgQ29tcGF0aWJpbGl0eQorCisgICBUaGUgYXBwcm9hY2ggdXNlZCB1bnRpbCBub3csIHRoYXQgaXNzdWVzIGEgSEVBRCBvbiB0aGUgZ2l2ZW4gVVJMIHRvIHRyaWdnZXIKKyAgIHRoZSBhdXRoIG5lZ290aWF0aW9uIGNvdWxkIHN0aWxsIGJlIHN1cHBvcnRlZCBhbmQgZW5jb3VyYWdlZCwgYnV0IGl0IHdvdWxkCisgICBiZSB1cCB0byB0aGUgYXBwIHRvIGZpcnN0IGZldGNoIGEgVVJMIHdpdGggR0VUL0hFQUQgdG8gbmVnb3RpYXRlIG9uLCBzaW5jZQorICAgdGhlbiBhIGZvbGxvd2luZyBQVVQvUE9TVCB3b3VsZG4ndCBuZWVkIHRvIG5lZ290aWF0ZSBhdXRoZW50aWNhdGlvbiBhbmQKKyAgIHRodXMgYXZvaWQgZG91YmxlLXNlbmRpbmcgZGF0YS4KKworICAgT3B0aW9uYWxseSwgd2Uga2VlcCB0aGUgY3VycmVudCBhcHByb2FjaCBpZiBzb21lIG9wdGlvbiBpcyBzZXQKKyAgIChDVVJMT1BUX0hFQURCRUZPUkVBVVRIIG9yIHNpbWlsYXIpLCBzaW5jZSBpdCBzZWVtcyB0byB3b3JrIGZhaXJseSB3ZWxsIGZvcgorICAgUE9TVCBvbiBtb3N0IHNlcnZlcnMuCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvUkVBRE1FLm1lbW9yeWxlYWsgYi9jdXJsLTcuMjUuMC9saWIvUkVBRE1FLm1lbW9yeWxlYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2MTc3NwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9SRUFETUUubWVtb3J5bGVhawpAQCAtMCwwICsxLDU1IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorCisgICAgICAgICAgICAgSG93IFRvIFRyYWNrIERvd24gU3VzcGVjdGVkIE1lbW9yeSBMZWFrcyBpbiBsaWJjdXJsCisgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NpbmdsZS10aHJlYWRlZAorCisgIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBtZW1vcnkgbGVhayBzeXN0ZW0gaXMgbm90IGFkanVzdGVkIHRvIHdvcmsgaW4gbW9yZQorICB0aGFuIG9uZSB0aHJlYWQuIElmIHlvdSB3YW50L25lZWQgdG8gdXNlIGl0IGluIGEgbXVsdGktdGhyZWFkZWQgYXBwLiBQbGVhc2UKKyAgYWRqdXN0IGFjY29yZGluZ2x5LgorCisKK0J1aWxkCisKKyAgUmVidWlsZCBsaWJjdXJsIHdpdGggLURDVVJMREVCVUcgKHVzdWFsbHksIHJlcnVubmluZyBjb25maWd1cmUgd2l0aAorICAtLWVuYWJsZS1kZWJ1ZyBmaXhlcyB0aGlzKS4gJ21ha2UgY2xlYW4nIGZpcnN0LCB0aGVuICdtYWtlJyBzbyB0aGF0IGFsbAorICBmaWxlcyBhY3R1YWxseSBhcmUgcmVidWlsdCBwcm9wZXJseS4gSXQgd2lsbCBhbHNvIG1ha2Ugc2Vuc2UgdG8gYnVpbGQKKyAgbGliY3VybCB3aXRoIHRoZSBkZWJ1ZyBvcHRpb24gKHVzdWFsbHkgLWcgdG8gdGhlIGNvbXBpbGVyKSBzbyB0aGF0IGRlYnVnZ2luZworICBpdCB3aWxsIGJlIGVhc2llciBpZiB5b3UgYWN0dWFsbHkgZG8gZmluZCBhIGxlYWsgaW4gdGhlIGxpYnJhcnkuCisKKyAgVGhpcyB3aWxsIGNyZWF0ZSBhIGxpYnJhcnkgdGhhdCBoYXMgbWVtb3J5IGRlYnVnZ2luZyBlbmFibGVkLgorCitNb2RpZnkgWW91ciBBcHBsaWNhdGlvbgorCisgIEFkZCBhIGxpbmUgaW4geW91ciBhcHBsaWNhdGlvbiBjb2RlOgorCisgICAgICAgY3VybF9tZW1kZWJ1ZygiZHVtcCIpOworCisgIFRoaXMgd2lsbCBtYWtlIHRoZSBtYWxsb2MgZGVidWcgc3lzdGVtIG91dHB1dCBhIGZ1bGwgdHJhY2Ugb2YgYWxsIHJlc291cmNlCisgIHVzaW5nIGZ1bmN0aW9ucyB0byB0aGUgZ2l2ZW4gZmlsZSBuYW1lLiBNYWtlIHN1cmUgeW91IHJlYnVpbGQgeW91ciBwcm9ncmFtCisgIGFuZCB0aGF0IHlvdSBsaW5rIHdpdGggdGhlIHNhbWUgbGliY3VybCB5b3UgYnVpbHQgZm9yIHRoaXMgcHVycG9zZSBhcworICBkZXNjcmliZWQgYWJvdmUuCisKK1J1biBZb3VyIEFwcGxpY2F0aW9uCisKKyAgUnVuIHlvdXIgcHJvZ3JhbSBhcyB1c3VhbC4gV2F0Y2ggdGhlIHNwZWNpZmllZCBtZW1vcnkgdHJhY2UgZmlsZSBncm93LgorCisgIE1ha2UgeW91ciBwcm9ncmFtIGV4aXQgYW5kIHVzZSB0aGUgcHJvcGVyIGxpYmN1cmwgY2xlYW51cCBmdW5jdGlvbnMgZXRjLiBTbworICB0aGF0IGFsbCBub24tbGVha3MgYXJlIHJldHVybmVkL2ZyZWVkIHByb3Blcmx5LgorCitBbmFseXplIHRoZSBGbG93CisKKyAgVXNlIHRoZSB0ZXN0cy9tZW1hbmFseXplLnBsIHBlcmwgc2NyaXB0IHRvIGFuYWx5emUgdGhlIGR1bXAgZmlsZToKKworICAgIHRlc3RzL21lbWFuYWx5emUucGwgZHVtcAorCisgIFRoaXMgbm93IG91dHB1dHMgYSByZXBvcnQgb24gd2hhdCByZXNvdXJjZXMgdGhhdCB3ZXJlIGFsbG9jYXRlZCBidXQgbmV2ZXIKKyAgZnJlZWQgZXRjLiBUaGlzIHJlcG9ydCBpcyB2ZXJ5IGZpbmUgZm9yIHBvc3RpbmcgdG8gdGhlIGxpc3QhCisKKyAgSWYgdGhpcyBkb2Vzbid0IHByb2R1Y2UgYW55IG91dHB1dCwgbm8gbGVhayB3YXMgZGV0ZWN0ZWQgaW4gbGliY3VybC4gVGhlbgorICB0aGUgbGVhayBpcyBtb3N0bHkgbGlrZWx5IHRvIGJlIGluIHlvdXIgY29kZS4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9SRUFETUUubXVsdGlfc29ja2V0IGIvY3VybC03LjI1LjAvbGliL1JFQURNRS5tdWx0aV9zb2NrZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxZTFkOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9SRUFETUUubXVsdGlfc29ja2V0CkBAIC0wLDAgKzEsNTMgQEAKK0ltcGxlbWVudGF0aW9uIG9mIHRoZSBjdXJsX211bHRpX3NvY2tldCBBUEkKKworICBUaGUgbWFpbiBpZGVhcyBvZiB0aGUgbmV3IEFQSSBhcmUgc2ltcGx5OgorCisgICAxIC0gVGhlIGFwcGxpY2F0aW9uIGNhbiB1c2Ugd2hhdGV2ZXIgZXZlbnQgc3lzdGVtIGl0IGxpa2VzIGFzIGl0IGdldHMgaW5mbworICAgICAgIGZyb20gbGliY3VybCBhYm91dCB3aGF0IGZpbGUgZGVzY3JpcHRvcnMgbGliY3VybCB3YWl0cyBmb3Igd2hhdCBhY3Rpb24KKyAgICAgICBvbi4gKFRoZSBwcmV2aW91cyBBUEkgcmV0dXJucyBmZF9zZXRzIHdoaWNoIGlzIHZlcnkgc2VsZWN0KCktY2VudHJpYykuCisKKyAgIDIgLSBXaGVuIHRoZSBhcHBsaWNhdGlvbiBkaXNjb3ZlcnMgYWN0aW9uIG9uIGEgc2luZ2xlIHNvY2tldCwgaXQgY2FsbHMKKyAgICAgICBsaWJjdXJsIGFuZCBpbmZvcm1zIHRoYXQgdGhlcmUgd2FzIGFjdGlvbiBvbiB0aGlzIHBhcnRpY3VsYXIgc29ja2V0IGFuZAorICAgICAgIGxpYmN1cmwgY2FuIHRoZW4gYWN0IG9uIHRoYXQgc29ja2V0L3RyYW5zZmVyIG9ubHkgYW5kIG5vdCBjYXJlIGFib3V0CisgICAgICAgYW55IG90aGVyIHRyYW5zZmVycy4gKFRoZSBwcmV2aW91cyBBUEkgYWx3YXlzIGhhZCB0byBzY2FuIHRocm91Z2ggYWxsCisgICAgICAgdGhlIGV4aXN0aW5nIHRyYW5zZmVycy4pCisKKyAgVGhlIGlkZWEgaXMgdGhhdCBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24oKSBjYWxscyBhIGdpdmVuIGNhbGxiYWNrIHdpdGgKKyAgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBzb2NrZXQgdG8gd2FpdCBmb3Igd2hhdCBhY3Rpb24gb24sIGFuZCB0aGUgY2FsbGJhY2sKKyAgb25seSBnZXRzIGNhbGxlZCBpZiB0aGUgc3RhdHVzIG9mIHRoYXQgc29ja2V0IGhhcyBjaGFuZ2VkLgorCisgIFdlIGFsc28gYWRkZWQgYSB0aW1lciBjYWxsYmFjayB0aGF0IG1ha2VzIGxpYmN1cmwgY2FsbCB0aGUgYXBwbGljYXRpb24gd2hlbgorICB0aGUgdGltZW91dCB2YWx1ZSBjaGFuZ2VzLCBhbmQgeW91IHNldCB0aGF0IHdpdGggY3VybF9tdWx0aV9zZXRvcHQoKSBhbmQgdGhlCisgIENVUkxNT1BUX1RJTUVSRlVOQ1RJT04gb3B0aW9uLiBUbyBnZXQgdGhpcyB0byB3b3JrLCBJbnRlcm5hbGx5LCB0aGVyZSdzIGFuCisgIGFkZGVkIGEgc3RydWN0IHRvIGVhY2ggZWFzeSBoYW5kbGUgaW4gd2hpY2ggd2Ugc3RvcmUgYW4gImV4cGlyZSB0aW1lIiAoaWYKKyAgYW55KS4gVGhlIHN0cnVjdHMgYXJlIHRoZW4gInNwbGF5IHNvcnRlZCIgc28gdGhhdCB3ZSBjYW4gYWRkIGFuZCByZW1vdmUKKyAgdGltZXMgZnJvbSB0aGUgbGlua2VkIGxpc3QgYW5kIHlldCBzb21ld2hhdCBzd2lmdGx5IGZpZ3VyZSBvdXQgYm90aCBob3cgbG9uZworICB0aW1lIHRoZXJlIGlzIHVudGlsIHRoZSBuZXh0IG5lYXJlc3QgdGltZXIgZXhwaXJlcyBhbmQgd2hpY2ggdGltZXIgKGhhbmRsZSkKKyAgd2Ugc2hvdWxkIHRha2UgY2FyZSBvZiBub3cuIE9mIGNvdXJzZSwgdGhlIHVwc2lkZSBvZiBhbGwgdGhpcyBpcyB0aGF0IHdlIGdldAorICBhIGN1cmxfbXVsdGlfdGltZW91dCgpIHRoYXQgc2hvdWxkIGFsc28gd29yayB3aXRoIG9sZC1zdHlsZSBhcHBsaWNhdGlvbnMKKyAgdGhhdCB1c2UgY3VybF9tdWx0aV9wZXJmb3JtKCkuCisKKyAgV2UgY3JlYXRlZCBhbiBpbnRlcm5hbCAic29ja2V0IHRvIGVhc3kgaGFuZGxlcyIgaGFzaCB0YWJsZSB0aGF0IGdpdmVuCisgIGEgc29ja2V0IChmaWxlIGRlc2NyaXB0b3IpIHJldHVybiB0aGUgZWFzeSBoYW5kbGUgdGhhdCB3YWl0cyBmb3IgYWN0aW9uIG9uCisgIHRoYXQgc29ja2V0LiAgVGhpcyBoYXNoIGlzIG1hZGUgdXNpbmcgdGhlIGFscmVhZHkgZXhpc3RpbmcgaGFzaCBjb2RlCisgIChwcmV2aW91c2x5IG9ubHkgdXNlZCBmb3IgdGhlIEROUyBjYWNoZSkuCisKKyAgVG8gbWFrZSBsaWJjdXJsIGFibGUgdG8gcmVwb3J0IHBsYWluIHNvY2tldHMgaW4gdGhlIHNvY2tldCBjYWxsYmFjaywgd2UgaGFkCisgIHRvIHJlLW9yZ2FuaXplIHRoZSBpbnRlcm5hbHMgb2YgdGhlIGN1cmxfbXVsdGlfZmRzZXQoKSBldGMgc28gdGhhdCB0aGUKKyAgY29udmVyc2lvbiBmcm9tIHNvY2tldHMgdG8gZmRfc2V0cyBmb3IgdGhhdCBmdW5jdGlvbiBpcyBvbmx5IGRvbmUgaW4gdGhlCisgIGxhc3Qgc3RlcCBiZWZvcmUgdGhlIGRhdGEgaXMgcmV0dXJuZWQuIEkgYWxzbyBoYWQgdG8gZXh0ZW5kIGMtYXJlcyB0byBnZXQgYQorICBmdW5jdGlvbiB0aGF0IGNhbiByZXR1cm4gcGxhaW4gc29ja2V0cywgYXMgdGhhdCBsaWJyYXJ5IHRvbyByZXR1cm5lZCBvbmx5CisgIGZkX3NldHMgYW5kIHRoYXQgaXMgbm8gbG9uZ2VyIGdvb2QgZW5vdWdoLiBUaGUgY2hhbmdlcyBkb25lIHRvIGMtYXJlcyBhcmUKKyAgYXZhaWxhYmxlIGluIGMtYXJlcyAxLjMuMSBhbmQgbGF0ZXIuCisKKyAgV2UgaGF2ZSBkb25lIGEgdGVzdCBydW5zIHdpdGggdXAgdG8gOTAwMCBjb25uZWN0aW9ucyAod2l0aCBhIHNpbmdsZSBhY3RpdmUKKyAgb25lKS4gVGhlIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigpIGludm9rZSB0aGVuIHRha2VzIGxlc3MgdGhhbiAxMAorICBtaWNyb3NlY29uZHMgaW4gYXZlcmFnZSAodXNpbmcgdGhlIHJlYWQtb25seS0xLWJ5dGUtYXQtYS10aW1lIGhhY2spLiAgV2UgYXJlCisgIG5vdyBiZWxvdyB0aGUgNjAgbWljcm9zZWNvbmRzICJwZXIgc29ja2V0IGFjdGlvbiIgZ29hbCAodGhlIGV4dHJhIDUwIGlzIHRoZQorICB0aW1lIGxpYmV2ZW50IG5lZWRzKS4KKworRG9jdW1lbnRhdGlvbgorCisgICAgaHR0cDovL2N1cmwuaGF4eC5zZS9saWJjdXJsL2MvY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uLmh0bWwKKyAgICBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9jdXJsX211bHRpX3RpbWVvdXQuaHRtbAorICAgIGh0dHA6Ly9jdXJsLmhheHguc2UvbGliY3VybC9jL2N1cmxfbXVsdGlfc2V0b3B0Lmh0bWwKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9SRUFETUUucGluZ3BvbmcgYi9jdXJsLTcuMjUuMC9saWIvUkVBRE1FLnBpbmdwb25nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YmE5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvUkVBRE1FLnBpbmdwb25nCkBAIC0wLDAgKzEsMzAgQEAKK0RhdGU6IERlY2VtYmVyIDUsIDIwMDkKKworUGluZ3BvbmcKKz09PT09PT09CisKKyBQaW5ncG9uZyBpcyBqdXN0IG15IChEYW5pZWwncykgamVzdGZ1bCBjb2xsZWN0aXZlIG5hbWUgb24gdGhlIHByb3RvY29scyB0aGF0Cisgc2hhcmUgYSB2ZXJ5IHNpbWlsYXIga2luZCBvZiBiYWNrLWFuZC1mb3J0aCBwcm9jZWR1cmUgd2l0aCBjb21tYW5kIGFuZAorIHJlc3BvbnNlcyB0byBhbmQgZnJvbSB0aGUgc2VydmVyLiBGVFAgd2FzIHByZXZpb3VzbHkgdGhlIG9ubHkgcHJvdG9jb2wgaW4KKyB0aGF0IGZhbWlseSB0aGF0IGxpYmN1cmwgc3VwcG9ydGVkLCBidXQgd2hlbiBQT1AzLCBJTUFQIGFuZCBTTVRQIGpvaW5lZCB0aGUKKyB0ZWFtIEkgbW92ZWQgc29tZSBvZiB0aGUgaW50ZXJuYWxzIGludG8gYSBzZXBhcmF0ZSBwaW5ncG9uZyBtb2R1bGUgdG8gYmUKKyBlYXNpZXIgdG8gZ2V0IHVzZWQgYnkgYWxsIHRoZXNlIHByb3RvY29scyB0byByZWR1Y2UgY29kZSBkdXBsaWNhdGlvbiBhbmQgZWFzZQorIGNvZGUgcmUtdXNlIGJldHdlZW4gdGhlc2UgcHJvdG9jb2xzLgorCitGVFAKKworIEluIDcuMjAuMCB3ZSBjb252ZXJ0ZWQgY29kZSB0byB1c2UgdGhlIG5ldyBwaW5ncG9uZyBjb2RlIGZyb20gcHJldmlvdXNseQorIGhhdmluZyBiZWVuIGFsbCAibmF0aXZlIiBGVFAgY29kZS4KKworUE9QMworCisgVGhlcmUncyBubyBzdXBwb3J0IGluIHRoZSBkb2N1bWVudGVkIFVSTCBmb3JtYXQgdG8gc3BlY2lmeSB0aGUgZXhhY3QgbWFpbCB0bworIGdldCwgYnV0IHdlIHN1cHBvcnQgdGhhdCBhcyB0aGUgcGF0aCBzcGVjaWZpZWQgaW4gdGhlIFVSTC4KKworSU1BUAorCitTTVRQCisKKyBUaGVyZSdzIG5vIG9mZmljaWFsIFVSTCBzeW50YXggZGVmaW5lZCBmb3IgU01UUCwgYnV0IHdlIHVzZSBvbmx5IHRoZSBnZW5lcmljCisgb25lIGFuZCB3ZSBwcm92aWRlIHR3byBhZGRpdGlvbmFsIGxpYmN1cmwgb3B0aW9ucyB0byBzcGVjaWZ5IHJlY2VpdmVycyBhbmQKKyBzZW5kZXIgb2YgdGhlIGFjdHVhbCBtYWlsLgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL1JFQURNRS5waXBlbGluaW5nIGIvY3VybC03LjI1LjAvbGliL1JFQURNRS5waXBlbGluaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YjQ2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvUkVBRE1FLnBpcGVsaW5pbmcKQEAgLTAsMCArMSw1MSBAQAorSFRUUCBQaXBlbGluaW5nIHdpdGggbGliY3VybAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrZ3JvdW5kCisKK1NpbmNlIHBpcGVsaW5pbmcgaW1wbGllcyB0aGF0IG9uZSBvciBtb3JlIHJlcXVlc3RzIGFyZSBzZW50IHRvIGEgc2VydmVyIGJlZm9yZQordGhlIHByZXZpb3VzIHJlc3BvbnNlKHMpIGhhdmUgYmVlbiByZWNlaXZlZCwgd2Ugb25seSBzdXBwb3J0IGl0IGZvciBtdWx0aQoraW50ZXJmYWNlIHVzZS4KKworQ29uc2lkZXJhdGlvbnMKKworV2hlbiB1c2luZyB0aGUgbXVsdGkgaW50ZXJmYWNlLCB5b3UgY3JlYXRlIG9uZSBlYXN5IGhhbmRsZSBmb3IgZWFjaCB0cmFuc2Zlci4KK0Jhc2NpYWxseSBhbnkgbnVtYmVyIG9mIGhhbmRsZXMgY2FuIGJlIGNyZWF0ZWQsIGFkZGVkIGFuZCB1c2VkIHdpdGggdGhlIG11bHRpCitpbnRlcmZhY2UgLSBzaW11bHRhbmVvdXNseS4gSXQgaXMgYW4gaW50ZXJmYWNlIGRlc2lnbmVkIHRvIGFsbG93IG1hbnkKK3NpbXVsdGFuZW91cyB0cmFuc2ZlcnMgd2hpbGUgc3RpbGwgdXNpbmcgYSBzaW5nbGUgdGhyZWFkLiBQaXBlbGluaW5nIGRvZXMgbm90CitjaGFuZ2UgYW55IG9mIHRoZXNlIGRldGFpbHMuCisKK0FQSQorCitXZSd2ZSBhZGRlZCBhIG5ldyBvcHRpb24gdG8gY3VybF9tdWx0aV9zZXRvcHQoKSBjYWxsZWQgQ1VSTE1PUFRfUElQRUxJTklORwordGhhdCBlbmFibGVzICJhdHRlbXB0ZWQgcGlwZWxpbmluZyIgYW5kIHRoZW4gYWxsIGVhc3kgaGFuZGxlcyB1c2VkIG9uIHRoYXQKK2hhbmRsZSB3aWxsIGF0dGVtcHQgdG8gdXNlIGFuIGV4aXN0aW5nIHBpcGVsaW5lLgorCitEZXRhaWxzCisKKy0gQSBwaXBlbGluZSBpcyBvbmx5IGNyZWF0ZWQgaWYgYSBwcmV2aW91cyBjb25uZWN0aW9uIGV4aXN0cyB0byB0aGUgc2FtZSBJUAorICBhZGRyZXNzIHRoYXQgdGhlIG5ldyByZXF1ZXN0IGlzIGJlaW5nIG1hZGUgdG8gdXNlLgorCistIFBpcGVsaW5lcyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIEhUVFAoUykgYXMgbm8gb3RoZXIgY3VycmVudGx5IHN1cHBvcnRlZAorICBwcm90b2NvbCBoYXMgZmVhdHVyZXMgcmVzZW1lbWJsaW5nIHRoaXMsIGJ1dCB3ZSBzdGlsbCBuYW1lIHRoaXMgZmVhdHVyZQorICBwbGFpbiAncGlwZWxpbmluZycgdG8gcG9zc2libHkgb25lIGRheSBzdXBwb3J0IGl0IGZvciBvdGhlciBwcm90b2NvbHMgYXMKKyAgd2VsbC4KKworLSBIVFRQIFBpcGVsaW5pbmcgaXMgZm9yIEdFVCBhbmQgSEVBRCByZXF1ZXN0cyBvbmx5LgorCistIFdoZW4gYSBwaXBlbGluZSBpcyBpbiB1c2UsIHdlIG11c3QgdGFrZSBwcmVjYXV0aW9ucyBzbyB0aGF0IHdoZW4gdXNlZCBlYXN5CisgIGhhbmRsZXMgKGkuZSB0aG9zZSB3aG8gc3RpbGwgd2FpdCBmb3IgYSByZXNwb25zZSkgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbXVsdGkKKyAgaGFuZGxlLCB3ZSBtdXN0IGRlYWwgd2l0aCB0aGUgb3V0c3RhbmRpbmcgcmVzcG9uc2UgbmljZWx5LgorCistIEV4cGxpY2l0bHkgYXNraW5nIGZvciBwaXBlbGluaW5nIGhhbmRsZSBYIGFuZCBoYW5kbGUgWSB3b24ndCBiZSBzdXBwb3J0ZWQuCisgIEl0IGlzbid0IGVhc3kgZm9yIGFuIGFwcCB0byBkbyB0aGlzIGFzc29jaWF0aW9uLiBUaGUgbGliIHNob3VsZCBwcm9iYWJseQorICBzdGlsbCByZXNvbHZlIHRoZSBzZWNvbmQgb25lIHByb3Blcmx5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYWN0dWFsbHkgX2Nhbl8KKyAgYmUgY29uc2lkZXJlZCBmb3IgcGlwZWxpbmluZy4gQWxzbywgYXNraW5nIGZvciBleHBsaWNpdCBwaXBlbGluaW5nIG9uIGhhbmRsZQorICBYIG1heSBiZSB0cmlja3kgd2hlbiBoYW5kbGUgWCBnZXQgYSBjbG9zZWQgY29ubmVjdGlvbi4KKworLSBXZSBuZWVkIG9wdGlvbnMgdG8gY29udHJvbCBtYXggcGlwZWxpbmUgbGVuZ3RoLCBhbmQgcHJvYmFibHkgaG93IHRvIGJlaGF2ZQorICBpZiB3ZSByZWFjaCB0aGF0IGxpbWl0LiBBcyB3YXMgZGlzY3Vzc2VkIG9uIHRoZSBsaXN0LCBpdCBjYW4gcHJvYmFibHkgYmUKKyAgbWFkZSB2ZXJ5IGNvbXBsaWNhdGVkLCBzbyBwZXJoYXBzIHdlIGNhbiB0aGluayBvZiBhIHdheSB0byBwYXNzIGFsbAorICB2YXJpYWJsZXMgaW52b2x2ZWQgdG8gYSBjYWxsYmFjayBhbmQgbGV0IHRoZSBhcHBsaWNhdGlvbiBkZWNpZGUgaG93IHRvIGFjdAorICBpbiBzcGVjaWZpYyBzaXR1YXRpb25zLiBFaXRoZXIgd2F5LCB0aGVzZSBmYW5jeSBvcHRpb25zIGFyZSBvbmx5IGludGVyZXN0aW5nCisgIHRvIHdvcmsgb24gd2hlbiBldmVyeXRoaW5nIGlzIHdvcmtpbmcgYW5kIHdlIGhhdmUgd29ya2luZyBhcHBzIHRvIHRlc3Qgd2l0aC4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9hbWlnYW9zLmMgYi9jdXJsLTcuMjUuMC9saWIvYW1pZ2Fvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNTUxMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvYW1pZ2Fvcy5jCkBAIC0wLDAgKzEsODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgX19BTUlHQV9fIC8qIEFueSBBbWlnYU9TIGZsYXZvdXIgKi8KKworI2luY2x1ZGUgImFtaWdhb3MuaCIKKyNpbmNsdWRlIDxhbWl0Y3Avc29ja2V0YmFzZXRhZ3MuaD4KKworc3RydWN0IExpYnJhcnkgKlNvY2tldEJhc2UgPSBOVUxMOworZXh0ZXJuIGludCBlcnJubywgaF9lcnJubzsKKworI2lmZGVmIF9fbGlibml4X18KKyNpbmNsdWRlIDxzdGFicy5oPgordm9pZCBfX3JlcXVlc3QoY29uc3QgY2hhciAqbXNnKTsKKyNlbHNlCisjIGRlZmluZSBfX3JlcXVlc3QoIG1zZyApICAgICAgIFByaW50ZiggbXNnICJcblxhIikKKyNlbmRpZgorCit2b2lkIGFtaWdhX2NsZWFudXAoKQoreworICBpZihTb2NrZXRCYXNlKSB7CisgICAgQ2xvc2VMaWJyYXJ5KFNvY2tldEJhc2UpOworICAgIFNvY2tldEJhc2UgPSBOVUxMOworICB9Cit9CisKK0JPT0wgYW1pZ2FfaW5pdCgpCit7CisgIGlmKCFTb2NrZXRCYXNlKQorICAgIFNvY2tldEJhc2UgPSBPcGVuTGlicmFyeSgiYnNkc29ja2V0LmxpYnJhcnkiLCA0KTsKKworICBpZighU29ja2V0QmFzZSkgeworICAgIF9fcmVxdWVzdCgiTm8gVENQL0lQIFN0YWNrIHJ1bm5pbmchIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgaWYoU29ja2V0QmFzZVRhZ3MoU0JUTV9TRVRWQUwoU0JUQ19FUlJOT1BUUihzaXplb2YoZXJybm8pKSksIChVTE9ORykgJmVycm5vLAorICAgICAgICAgICAgICAgICAgICBTQlRNX1NFVFZBTChTQlRDX0xPR1RBR1BUUiksIChVTE9ORykgImNVUkwiLAorICAgICAgICAgICAgICAgICAgICBUQUdfRE9ORSkpIHsKKyAgICBfX3JlcXVlc3QoIlNvY2tldEJhc2VUYWdzIEVSUk9SIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyNpZm5kZWYgX19saWJuaXhfXworICBhdGV4aXQoYW1pZ2FfY2xlYW51cCk7CisjZW5kaWYKKworICByZXR1cm4gVFJVRTsKK30KKworI2lmZGVmIF9fbGlibml4X18KK0FERDJFWElUKGFtaWdhX2NsZWFudXAsLTUwKTsKKyNlbmRpZgorCisjZWxzZSAvKiBfX0FNSUdBX18gKi8KKworI2lmZGVmIF9fUE9DQ19fCisjICBwcmFnbWEgd2FybihkaXNhYmxlOjIwMjQpICAvKiBEaXNhYmxlIHdhcm5pbmcgIzIwMjQ6IEVtcHR5IGlucHV0IGZpbGUgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogX19BTUlHQV9fICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvYW1pZ2Fvcy5oIGIvY3VybC03LjI1LjAvbGliL2FtaWdhb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmZmMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2FtaWdhb3MuaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIExJQkNVUkxfQU1JR0FPU19ICisjZGVmaW5lIExJQkNVUkxfQU1JR0FPU19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIF9fQU1JR0FfXyAvKiBBbnkgQW1pZ2FPUyBmbGF2b3VyICovCisKKyNpZm5kZWYgX19peGVtdWxfXworCisjaW5jbHVkZSA8ZXhlYy90eXBlcy5oPgorI2luY2x1ZGUgPGV4ZWMvZXhlY2Jhc2UuaD4KKworI2luY2x1ZGUgPHByb3RvL2V4ZWMuaD4KKyNpbmNsdWRlIDxwcm90by9kb3MuaD4KKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgImNvbmZpZy1hbWlnYW9zLmgiCisKKyNpZm5kZWYgc2VsZWN0CisjIGRlZmluZSBzZWxlY3QoYXJncy4uLikgV2FpdFNlbGVjdCggYXJncywgTlVMTCkKKyNlbmRpZgorI2lmbmRlZiBpb2N0bAorIyBkZWZpbmUgaW9jdGwoYSxiLGMsZCkgIElvY3RsU29ja2V0KCAoTE9ORylhLCAoVUxPTkcpYiwgKGNoYXIqKWMpCisjZW5kaWYKKyNkZWZpbmUgX0FNSUdBU0YgICAgICAgIDEKKworZXh0ZXJuIHZvaWQgYW1pZ2FfY2xlYW51cCgpOworZXh0ZXJuIEJPT0wgYW1pZ2FfaW5pdCgpOworCisjZWxzZSAvKiBfX2l4ZW11bF9fICovCisKKyN3YXJuaW5nIGNvbXBpbGluZyB3aXRoIGl4ZW11bC4uLgorCisjZW5kaWYgLyogX19peGVtdWxfXyAqLworI2VuZGlmIC8qIF9fQU1JR0FfXyAqLworI2VuZGlmIC8qIExJQkNVUkxfQU1JR0FPU19IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9hcnBhX3RlbG5ldC5oIGIvY3VybC03LjI1LjAvbGliL2FycGFfdGVsbmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4ZDlhOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9hcnBhX3RlbG5ldC5oCkBAIC0wLDAgKzEsMTA0IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0FSUEFfVEVMTkVUX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfQVJQQV9URUxORVRfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIENVUkxfRElTQUJMRV9URUxORVQKKy8qCisgKiBUZWxuZXQgb3B0aW9uIGRlZmluZXMuIEFkZCBtb3JlIGhlcmUgaWYgaW4gbmVlZC4KKyAqLworI2RlZmluZSBDVVJMX1RFTE9QVF9CSU5BUlkgICAwICAvKiBiaW5hcnkgOGJpdCBkYXRhICovCisjZGVmaW5lIENVUkxfVEVMT1BUX0VDSE8gICAgIDEgIC8qIGp1c3QgZWNobyEgKi8KKyNkZWZpbmUgQ1VSTF9URUxPUFRfU0dBICAgICAgMyAgLyogU3VwcHJlc3MgR28gQWhlYWQgKi8KKyNkZWZpbmUgQ1VSTF9URUxPUFRfRVhPUEwgIDI1NSAgLyogRVh0ZW5kZWQgT1B0aW9ucyBMaXN0ICovCisjZGVmaW5lIENVUkxfVEVMT1BUX1RUWVBFICAgMjQgIC8qIFRlcm1pbmFsIFRZUEUgKi8KKyNkZWZpbmUgQ1VSTF9URUxPUFRfTkFXUyAgICAzMSAgLyogTmVnb3RpYXRlIEFib3V0IFdpbmRvdyBTaXplICovCisjZGVmaW5lIENVUkxfVEVMT1BUX1hESVNQTE9DIDM1IC8qIFggRElTUGxheSBMT0NhdGlvbiAqLworCisjZGVmaW5lIENVUkxfVEVMT1BUX05FV19FTlZJUk9OIDM5ICAvKiBORVcgRU5WSVJPTm1lbnQgdmFyaWFibGVzICovCisjZGVmaW5lIENVUkxfTkVXX0VOVl9WQVIgICAwCisjZGVmaW5lIENVUkxfTkVXX0VOVl9WQUxVRSAxCisKKy8qCisgKiBUaGUgdGVsbmV0IG9wdGlvbnMgcmVwcmVzZW50ZWQgYXMgc3RyaW5ncworICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRlbG5ldG9wdGlvbnNbXT0KK3sKKyAgIkJJTkFSWSIsICAgICAgIkVDSE8iLCAgICAgICAgICAgIlJDUCIsICAgICAgICAgICAiU1VQUFJFU1MgR08gQUhFQUQiLAorICAiTkFNRSIsICAgICAgICAiU1RBVFVTIiwgICAgICAgICAiVElNSU5HIE1BUksiLCAgICJSQ1RFIiwKKyAgIk5BT0wiLCAgICAgICAgIk5BT1AiLCAgICAgICAgICAgIk5BT0NSRCIsICAgICAgICAiTkFPSFRTIiwKKyAgIk5BT0hURCIsICAgICAgIk5BT0ZGRCIsICAgICAgICAgIk5BT1ZUUyIsICAgICAgICAiTkFPVlREIiwKKyAgIk5BT0xGRCIsICAgICAgIkVYVEVORCBBU0NJSSIsICAgIkxPR09VVCIsICAgICAgICAiQllURSBNQUNSTyIsCisgICJERSBURVJNSU5BTCIsICJTVVBEVVAiLCAgICAgICAgICJTVVBEVVAgT1VUUFVUIiwgIlNFTkQgTE9DQVRJT04iLAorICAiVEVSTSBUWVBFIiwgICAiRU5EIE9GIFJFQ09SRCIsICAiVEFDQUNTIFVJRCIsICAgICJPVVRQVVQgTUFSS0lORyIsCisgICJUVFlMT0MiLCAgICAgICIzMjcwIFJFR0lNRSIsICAgICJYMyBQQUQiLCAgICAgICAgIk5BV1MiLAorICAiVEVSTSBTUEVFRCIsICAiTEZMT1ciLCAgICAgICAgICAiTElORU1PREUiLCAgICAgICJYRElTUExPQyIsCisgICJPTEQtRU5WSVJPTiIsICJBVVRIRU5USUNBVElPTiIsICJFTkNSWVBUIiwgICAgICAgIk5FVy1FTlZJUk9OIgorfTsKKworI2RlZmluZSBDVVJMX1RFTE9QVF9NQVhJTVVNIENVUkxfVEVMT1BUX05FV19FTlZJUk9OCisKKyNkZWZpbmUgQ1VSTF9URUxPUFRfT0soeCkgKCh4KSA8PSBDVVJMX1RFTE9QVF9NQVhJTVVNKQorI2RlZmluZSBDVVJMX1RFTE9QVCh4KSAgICB0ZWxuZXRvcHRpb25zW3hdCisKKyNkZWZpbmUgQ1VSTF9OVEVMT1BUUyA0MAorCisvKgorICogRmlyc3Qgc29tZSBkZWZpbmVzCisgKi8KKyNkZWZpbmUgQ1VSTF94RU9GIDIzNiAvKiBFbmQgT2YgRmlsZSAqLworI2RlZmluZSBDVVJMX1NFICAgMjQwIC8qIFN1YiBuZWdvdGlhdGlvbiBFbmQgKi8KKyNkZWZpbmUgQ1VSTF9OT1AgIDI0MSAvKiBObyBPUGVyYXRpb24gKi8KKyNkZWZpbmUgQ1VSTF9ETSAgIDI0MiAvKiBEYXRhIE1hcmsgKi8KKyNkZWZpbmUgQ1VSTF9HQSAgIDI0OSAvKiBHbyBBaGVhZCwgcmV2ZXJzZSB0aGUgbGluZSAqLworI2RlZmluZSBDVVJMX1NCICAgMjUwIC8qIFN1Qm5lZ290aWF0aW9uICovCisjZGVmaW5lIENVUkxfV0lMTCAyNTEgLyogT3VyIHNpZGUgV0lMTCB1c2UgdGhpcyBvcHRpb24gKi8KKyNkZWZpbmUgQ1VSTF9XT05UIDI1MiAvKiBPdXIgc2lkZSBXT04nVCB1c2UgdGhpcyBvcHRpb24gKi8KKyNkZWZpbmUgQ1VSTF9ETyAgIDI1MyAvKiBETyB1c2UgdGhpcyBvcHRpb24hICovCisjZGVmaW5lIENVUkxfRE9OVCAyNTQgLyogRE9OJ1QgdXNlIHRoaXMgb3B0aW9uISAqLworI2RlZmluZSBDVVJMX0lBQyAgMjU1IC8qIEludGVycHJldCBBcyBDb21tYW5kICovCisKKy8qCisgKiBUaGVuIHRob3NlIG51bWJlcnMgcmVwcmVzZW50ZWQgYXMgc3RyaW5nczoKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0ZWxuZXRjbWRzW109Cit7CisgICJFT0YiLCAgIlNVU1AiLCAgIkFCT1JUIiwgIkVPUiIsICAiU0UiLAorICAiTk9QIiwgICJETUFSSyIsICJCUksiLCAgICJJUCIsICAgIkFPIiwKKyAgIkFZVCIsICAiRUMiLCAgICAiRUwiLCAgICAiR0EiLCAgICJTQiIsCisgICJXSUxMIiwgIldPTlQiLCAgIkRPIiwgICAgIkRPTlQiLCAiSUFDIgorfTsKKworI2RlZmluZSBDVVJMX1RFTENNRF9NSU5JTVVNIENVUkxfeEVPRiAvKiB0aGUgZmlyc3Qgb25lICovCisjZGVmaW5lIENVUkxfVEVMQ01EX01BWElNVU0gQ1VSTF9JQUMgIC8qIHN1cnByaXNlLCAyNTUgaXMgdGhlIGxhc3Qgb25lISA7LSkgKi8KKworI2RlZmluZSBDVVJMX1RFTFFVQUxfSVMgICAwCisjZGVmaW5lIENVUkxfVEVMUVVBTF9TRU5EIDEKKyNkZWZpbmUgQ1VSTF9URUxRVUFMX0lORk8gMgorI2RlZmluZSBDVVJMX1RFTFFVQUxfTkFNRSAzCisKKyNkZWZpbmUgQ1VSTF9URUxDTURfT0soeCkgKCAoKHVuc2lnbmVkIGludCkoeCkgPj0gQ1VSTF9URUxDTURfTUlOSU1VTSkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludCkoeCkgPD0gQ1VSTF9URUxDTURfTUFYSU1VTSkgKQorI2RlZmluZSBDVVJMX1RFTENNRCh4KSAgICB0ZWxuZXRjbWRzWyh4KS1DVVJMX1RFTENNRF9NSU5JTVVNXQorCisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1RFTE5FVCAqLworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfQVJQQV9URUxORVRfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2FzeW4tYXJlcy5jIGIvY3VybC03LjI1LjAvbGliL2FzeW4tYXJlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNzYwMTIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvYXN5bi1hcmVzLmMKQEAgLTAsMCArMSw2NDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfTElNSVRTX0gKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgLyogZm9yIHRoZSBjbG9zZSgpIHByb3RvICovCisjZW5kaWYKKyNpZmRlZiBfX1ZNUworI2luY2x1ZGUgPGluLmg+CisjaW5jbHVkZSA8aW5ldC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BST0NFU1NfSAorI2luY2x1ZGUgPHByb2Nlc3MuaD4KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoTkVUV0FSRSkgJiYgZGVmaW5lZChfX05PVkVMTF9MSUJDX18pKQorI3VuZGVmIGluX2FkZHJfdAorI2RlZmluZSBpbl9hZGRyX3QgdW5zaWduZWQgbG9uZworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogT25seSBmb3IgYXJlcy1lbmFibGVkIGJ1aWxkcworICogQW5kIG9ubHkgZm9yIGZ1bmN0aW9ucyB0aGF0IGZ1bGZpbGwgdGhlIGFzeW5jaCByZXNvbHZlciBiYWNrZW5kIEFQSQorICogYXMgZGVmaW5lZCBpbiBhc3luLmgsIG5vdGhpbmcgZWxzZSBiZWxvbmdzIGluIHRoaXMgZmlsZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgQ1VSTFJFU19BUkVTCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJob3N0aXAuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAic2hhcmUuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJpbmV0X3B0b24uaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworIyAgaWYgZGVmaW5lZChDVVJMX1NUQVRJQ0xJQikgJiYgIWRlZmluZWQoQ0FSRVNfU1RBVElDTElCKSAmJiBcCisgICAgIChkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1NZTUJJQU4zMl9fKSkKKyMgICAgZGVmaW5lIENBUkVTX1NUQVRJQ0xJQgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPGFyZXMuaD4KKworI2lmIEFSRVNfVkVSU0lPTiA+PSAweDAxMDUwMAorLyogYy1hcmVzIDEuNS4wIG9yIGxhdGVyLCB0aGUgY2FsbGJhY2sgcHJvdG8gaXMgbW9kaWZpZWQgKi8KKyNkZWZpbmUgSEFWRV9DQVJFU19DQUxMQkFDS19USU1FT1VUUyAxCisjZW5kaWYKKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitzdHJ1Y3QgUmVzb2x2ZXJSZXN1bHRzIHsKKyAgaW50IG51bV9wZW5kaW5nOyAvKiBudW1iZXIgb2YgYXJlc19nZXRob3N0YnluYW1lKCkgcmVxdWVzdHMgKi8KKyAgQ3VybF9hZGRyaW5mbyAqdGVtcF9haTsgLyogaW50ZXJtZWRpYXJ5IHJlc3VsdCB3aGlsZSBmZXRjaGluZyBjLWFyZXMgcGFydHMgKi8KKyAgaW50IGxhc3Rfc3RhdHVzOworfTsKKworLyoKKyAqIEN1cmxfcmVzb2x2ZXJfZ2xvYmFsX2luaXQoKSAtIHRoZSBnZW5lcmljIGxvdy1sZXZlbCBhc3luY2hyb25vdXMgbmFtZQorICogcmVzb2x2ZSBBUEkuICBDYWxsZWQgZnJvbSBjdXJsX2dsb2JhbF9pbml0KCkgdG8gaW5pdGlhbGl6ZSBnbG9iYWwgcmVzb2x2ZXIKKyAqIGVudmlyb25tZW50LiAgSW5pdGlhbGl6ZXMgYXJlcyBsaWJyYXJ5LgorICovCitpbnQgQ3VybF9yZXNvbHZlcl9nbG9iYWxfaW5pdCh2b2lkKQoreworI2lmZGVmIENBUkVTX0hBVkVfQVJFU19MSUJSQVJZX0lOSVQKKyAgaWYoYXJlc19saWJyYXJ5X2luaXQoQVJFU19MSUJfSU5JVF9BTEwpKSB7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisjZW5kaWYKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogQ3VybF9yZXNvbHZlcl9nbG9iYWxfY2xlYW51cCgpCisgKgorICogQ2FsbGVkIGZyb20gY3VybF9nbG9iYWxfY2xlYW51cCgpIHRvIGRlc3Ryb3kgZ2xvYmFsIHJlc29sdmVyIGVudmlyb25tZW50LgorICogRGVpbml0aWFsaXplcyBhcmVzIGxpYnJhcnkuCisgKi8KK3ZvaWQgQ3VybF9yZXNvbHZlcl9nbG9iYWxfY2xlYW51cCh2b2lkKQoreworI2lmZGVmIENBUkVTX0hBVkVfQVJFU19MSUJSQVJZX0NMRUFOVVAKKyAgYXJlc19saWJyYXJ5X2NsZWFudXAoKTsKKyNlbmRpZgorfQorCisvKgorICogQ3VybF9yZXNvbHZlcl9pbml0KCkKKyAqCisgKiBDYWxsZWQgZnJvbSBjdXJsX2Vhc3lfaW5pdCgpIC0+IEN1cmxfb3BlbigpIHRvIGluaXRpYWxpemUgcmVzb2x2ZXIKKyAqIFVSTC1zdGF0ZSBzcGVjaWZpYyBlbnZpcm9ubWVudCAoJ3Jlc29sdmVyJyBtZW1iZXIgb2YgdGhlIFVybFN0YXRlCisgKiBzdHJ1Y3R1cmUpLiAgRmlsbHMgdGhlIHBhc3NlZCBwb2ludGVyIGJ5IHRoZSBpbml0aWFsaXplZCBhcmVzX2NoYW5uZWwuCisgKi8KK0NVUkxjb2RlIEN1cmxfcmVzb2x2ZXJfaW5pdCh2b2lkICoqcmVzb2x2ZXIpCit7CisgIGludCBzdGF0dXMgPSBhcmVzX2luaXQoKGFyZXNfY2hhbm5lbCopcmVzb2x2ZXIpOworICBpZihzdGF0dXMgIT0gQVJFU19TVUNDRVNTKSB7CisgICAgaWYoc3RhdHVzID09IEFSRVNfRU5PTUVNKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZWxzZQorICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKKyAgLyogbWFrZSBzdXJlIHRoYXQgYWxsIG90aGVyIHJldHVybnMgZnJvbSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBkZXN0cm95IHRoZQorICAgICBhcmVzIGNoYW5uZWwgYmVmb3JlIHJldHVybmluZyBlcnJvciEgKi8KK30KKworLyoKKyAqIEN1cmxfcmVzb2x2ZXJfY2xlYW51cCgpCisgKgorICogQ2FsbGVkIGZyb20gY3VybF9lYXN5X2NsZWFudXAoKSAtPiBDdXJsX2Nsb3NlKCkgdG8gY2xlYW51cCByZXNvbHZlcgorICogVVJMLXN0YXRlIHNwZWNpZmljIGVudmlyb25tZW50ICgncmVzb2x2ZXInIG1lbWJlciBvZiB0aGUgVXJsU3RhdGUKKyAqIHN0cnVjdHVyZSkuICBEZXN0cm95cyB0aGUgYXJlcyBjaGFubmVsLgorICovCit2b2lkIEN1cmxfcmVzb2x2ZXJfY2xlYW51cCh2b2lkICpyZXNvbHZlcikKK3sKKyAgYXJlc19kZXN0cm95KChhcmVzX2NoYW5uZWwpcmVzb2x2ZXIpOworfQorCisvKgorICogQ3VybF9yZXNvbHZlcl9kdXBoYW5kbGUoKQorICoKKyAqIENhbGxlZCBmcm9tIGN1cmxfZWFzeV9kdXBoYW5kbGUoKSB0byBkdXBsaWNhdGUgcmVzb2x2ZXIgVVJMLXN0YXRlIHNwZWNpZmljCisgKiBlbnZpcm9ubWVudCAoJ3Jlc29sdmVyJyBtZW1iZXIgb2YgdGhlIFVybFN0YXRlIHN0cnVjdHVyZSkuICBEdXBsaWNhdGVzIHRoZQorICogJ2Zyb20nIGFyZXMgY2hhbm5lbCBhbmQgcGFzc2VzIHRoZSByZXN1bHRpbmcgY2hhbm5lbCB0byB0aGUgJ3RvJyBwb2ludGVyLgorICovCitpbnQgQ3VybF9yZXNvbHZlcl9kdXBoYW5kbGUodm9pZCAqKnRvLCB2b2lkICpmcm9tKQoreworICAvKiBDbG9uZSB0aGUgYXJlcyBjaGFubmVsIGZvciB0aGUgbmV3IGhhbmRsZSAqLworICBpZihBUkVTX1NVQ0NFU1MgIT0gYXJlc19kdXAoKGFyZXNfY2hhbm5lbCopdG8sKGFyZXNfY2hhbm5lbClmcm9tKSkKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9hc3luY19kYXRhIChzdHJ1Y3QgQ3VybF9hc3luYyAqYXN5bmMpOworCisvKgorICogQ2FuY2VsIGFsbCBwb3NzaWJseSBzdGlsbCBvbi1nb2luZyByZXNvbHZlcyBmb3IgdGhpcyBjb25uZWN0aW9uLgorICovCit2b2lkIEN1cmxfcmVzb2x2ZXJfY2FuY2VsKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaWYoY29ubiAmJiBjb25uLT5kYXRhICYmIGNvbm4tPmRhdGEtPnN0YXRlLnJlc29sdmVyKQorICAgIGFyZXNfY2FuY2VsKChhcmVzX2NoYW5uZWwpY29ubi0+ZGF0YS0+c3RhdGUucmVzb2x2ZXIpOworICBkZXN0cm95X2FzeW5jX2RhdGEoJmNvbm4tPmFzeW5jKTsKK30KKworLyoKKyAqIGRlc3Ryb3lfYXN5bmNfZGF0YSgpIGNsZWFucyB1cCBhc3luYyByZXNvbHZlciBkYXRhLgorICovCitzdGF0aWMgdm9pZCBkZXN0cm95X2FzeW5jX2RhdGEgKHN0cnVjdCBDdXJsX2FzeW5jICphc3luYykKK3sKKyAgaWYoYXN5bmMtPmhvc3RuYW1lKQorICAgIGZyZWUoYXN5bmMtPmhvc3RuYW1lKTsKKworICBpZihhc3luYy0+b3Nfc3BlY2lmaWMpIHsKKyAgICBzdHJ1Y3QgUmVzb2x2ZXJSZXN1bHRzICpyZXMgPSAoc3RydWN0IFJlc29sdmVyUmVzdWx0cyAqKWFzeW5jLT5vc19zcGVjaWZpYzsKKyAgICBpZihyZXMpIHsKKyAgICAgIGlmKHJlcy0+dGVtcF9haSkgeworICAgICAgICBDdXJsX2ZyZWVhZGRyaW5mbyhyZXMtPnRlbXBfYWkpOworICAgICAgICByZXMtPnRlbXBfYWkgPSBOVUxMOworICAgICAgfQorICAgICAgZnJlZShyZXMpOworICAgIH0KKyAgICBhc3luYy0+b3Nfc3BlY2lmaWMgPSBOVUxMOworICB9CisKKyAgYXN5bmMtPmhvc3RuYW1lID0gTlVMTDsKK30KKworLyoKKyAqIEN1cmxfcmVzb2x2ZXJfZmRzZXQoKSBpcyBjYWxsZWQgd2hlbiBzb21lb25lIGZyb20gdGhlIG91dHNpZGUgd29ybGQgKHVzaW5nCisgKiBjdXJsX211bHRpX2Zkc2V0KCkpIHdhbnRzIHRvIGdldCBvdXIgZmRfc2V0IHNldHVwIGFuZCB3ZSdyZSB0YWxraW5nIHdpdGgKKyAqIGFyZXMuIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gd2UKKyAqIGhhdmUgYSB3b3JraW5nIGFyZXMgY2hhbm5lbC4KKyAqCisgKiBSZXR1cm5zOiBDVVJMRV9PSyBhbHdheXMhCisgKi8KKworaW50IEN1cmxfcmVzb2x2ZXJfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCisKK3sKKyAgc3RydWN0IHRpbWV2YWwgbWF4dGltZTsKKyAgc3RydWN0IHRpbWV2YWwgdGltZWJ1ZjsKKyAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQ7CisgIGxvbmcgbWlsbGk7CisgIGludCBtYXggPSBhcmVzX2dldHNvY2soKGFyZXNfY2hhbm5lbCljb25uLT5kYXRhLT5zdGF0ZS5yZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYXJlc19zb2NrZXRfdCAqKXNvY2tzLCBudW1zb2Nrcyk7CisKKyAgbWF4dGltZS50dl9zZWMgPSBDVVJMX1RJTUVPVVRfUkVTT0xWRTsKKyAgbWF4dGltZS50dl91c2VjID0gMDsKKworICB0aW1lb3V0ID0gYXJlc190aW1lb3V0KChhcmVzX2NoYW5uZWwpY29ubi0+ZGF0YS0+c3RhdGUucmVzb2x2ZXIsICZtYXh0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICZ0aW1lYnVmKTsKKyAgbWlsbGkgPSAodGltZW91dC0+dHZfc2VjICogMTAwMCkgKyAodGltZW91dC0+dHZfdXNlYy8xMDAwKTsKKyAgaWYobWlsbGkgPT0gMCkKKyAgICBtaWxsaSArPSAxMDsKKyAgQ3VybF9leHBpcmUoY29ubi0+ZGF0YSwgbWlsbGkpOworCisgIHJldHVybiBtYXg7Cit9CisKKy8qCisgKiB3YWl0cGVyZm9ybSgpCisgKgorICogMSkgQXNrIGFyZXMgd2hhdCBzb2NrZXRzIGl0IGN1cnJlbnRseSBwbGF5cyB3aXRoLCB0aGVuCisgKiAyKSB3YWl0IGZvciB0aGUgdGltZW91dCBwZXJpb2QgdG8gY2hlY2sgZm9yIGFjdGlvbiBvbiBhcmVzJyBzb2NrZXRzLgorICogMykgdGVsbCBhcmVzIHRvIGFjdCBvbiBhbGwgdGhlIHNvY2tldHMgbWFya2VkIGFzICJ3aXRoIGFjdGlvbiIKKyAqCisgKiByZXR1cm4gbnVtYmVyIG9mIHNvY2tldHMgaXQgd29ya2VkIG9uCisgKi8KKworc3RhdGljIGludCB3YWl0cGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCB0aW1lb3V0X21zKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGludCBuZmRzOworICBpbnQgYml0bWFzazsKKyAgYXJlc19zb2NrZXRfdCBzb2Nrc1tBUkVTX0dFVFNPQ0tfTUFYTlVNXTsKKyAgc3RydWN0IHBvbGxmZCBwZmRbQVJFU19HRVRTT0NLX01BWE5VTV07CisgIGludCBpOworICBpbnQgbnVtID0gMDsKKworICBiaXRtYXNrID0gYXJlc19nZXRzb2NrKChhcmVzX2NoYW5uZWwpZGF0YS0+c3RhdGUucmVzb2x2ZXIsIHNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFSRVNfR0VUU09DS19NQVhOVU0pOworCisgIGZvcihpPTA7IGkgPCBBUkVTX0dFVFNPQ0tfTUFYTlVNOyBpKyspIHsKKyAgICBwZmRbaV0uZXZlbnRzID0gMDsKKyAgICBwZmRbaV0ucmV2ZW50cyA9IDA7CisgICAgaWYoQVJFU19HRVRTT0NLX1JFQURBQkxFKGJpdG1hc2ssIGkpKSB7CisgICAgICBwZmRbaV0uZmQgPSBzb2Nrc1tpXTsKKyAgICAgIHBmZFtpXS5ldmVudHMgfD0gUE9MTFJETk9STXxQT0xMSU47CisgICAgfQorICAgIGlmKEFSRVNfR0VUU09DS19XUklUQUJMRShiaXRtYXNrLCBpKSkgeworICAgICAgcGZkW2ldLmZkID0gc29ja3NbaV07CisgICAgICBwZmRbaV0uZXZlbnRzIHw9IFBPTExXUk5PUk18UE9MTE9VVDsKKyAgICB9CisgICAgaWYocGZkW2ldLmV2ZW50cyAhPSAwKQorICAgICAgbnVtKys7CisgICAgZWxzZQorICAgICAgYnJlYWs7CisgIH0KKworICBpZihudW0pCisgICAgbmZkcyA9IEN1cmxfcG9sbChwZmQsIG51bSwgdGltZW91dF9tcyk7CisgIGVsc2UKKyAgICBuZmRzID0gMDsKKworICBpZighbmZkcykKKyAgICAvKiBDYWxsIGFyZXNfcHJvY2VzcygpIHVuY29uZGl0b25hbGx5IGhlcmUsIGV2ZW4gaWYgd2Ugc2ltcGx5IHRpbWVkIG91dAorICAgICAgIGFib3ZlLCBhcyBvdGhlcndpc2UgdGhlIGFyZXMgbmFtZSByZXNvbHZlIHdvbid0IHRpbWVvdXQhICovCisgICAgYXJlc19wcm9jZXNzX2ZkKChhcmVzX2NoYW5uZWwpZGF0YS0+c3RhdGUucmVzb2x2ZXIsIEFSRVNfU09DS0VUX0JBRCwKKyAgICAgICAgICAgICAgICAgICAgQVJFU19TT0NLRVRfQkFEKTsKKyAgZWxzZSB7CisgICAgLyogbW92ZSB0aHJvdWdoIHRoZSBkZXNjcmlwdG9ycyBhbmQgYXNrIGZvciBwcm9jZXNzaW5nIG9uIHRoZW0gKi8KKyAgICBmb3IoaT0wOyBpIDwgbnVtOyBpKyspCisgICAgICBhcmVzX3Byb2Nlc3NfZmQoKGFyZXNfY2hhbm5lbClkYXRhLT5zdGF0ZS5yZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICBwZmRbaV0ucmV2ZW50cyAmIChQT0xMUkROT1JNfFBPTExJTik/CisgICAgICAgICAgICAgICAgICAgICAgcGZkW2ldLmZkOkFSRVNfU09DS0VUX0JBRCwKKyAgICAgICAgICAgICAgICAgICAgICBwZmRbaV0ucmV2ZW50cyAmIChQT0xMV1JOT1JNfFBPTExPVVQpPworICAgICAgICAgICAgICAgICAgICAgIHBmZFtpXS5mZDpBUkVTX1NPQ0tFVF9CQUQpOworICB9CisgIHJldHVybiBuZmRzOworfQorCisvKgorICogQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZCgpIGlzIGNhbGxlZCByZXBlYXRlZGx5IHRvIGNoZWNrIGlmIGEgcHJldmlvdXMKKyAqIG5hbWUgcmVzb2x2ZSByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuIEl0IHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byB0aW1lLW91dCBpZgorICogdGhlIG9wZXJhdGlvbiBzZWVtcyB0byB0YWtlIHRvbyBsb25nLgorICoKKyAqIFJldHVybnMgbm9ybWFsIENVUkxjb2RlIGVycm9ycy4KKyAqLworQ1VSTGNvZGUgQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmRucykKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgUmVzb2x2ZXJSZXN1bHRzICpyZXMgPSAoc3RydWN0IFJlc29sdmVyUmVzdWx0cyAqKQorICAgIGNvbm4tPmFzeW5jLm9zX3NwZWNpZmljOworCisgICpkbnMgPSBOVUxMOworCisgIHdhaXRwZXJmb3JtKGNvbm4sIDApOworCisgIGlmKHJlcyAmJiAhcmVzLT5udW1fcGVuZGluZykgeworICAgICh2b2lkKUN1cmxfYWRkcmluZm9fY2FsbGJhY2soY29ubiwgcmVzLT5sYXN0X3N0YXR1cywgcmVzLT50ZW1wX2FpKTsKKyAgICAvKiB0ZW1wX2FpIG93bmVyc2hpcCBpcyBtb3ZlZCB0byB0aGUgY29ubmVjdGlvbiwgc28gd2UgbmVlZCBub3QgZnJlZS11cAorICAgICAgIHRoZW0gKi8KKyAgICByZXMtPnRlbXBfYWkgPSBOVUxMOworICAgIGRlc3Ryb3lfYXN5bmNfZGF0YSgmY29ubi0+YXN5bmMpOworICAgIGlmKCFjb25uLT5hc3luYy5kbnMpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgcmVzb2x2ZSAlczogJXMgKCVzKSIsCisgICAgICAgICAgICBjb25uLT5iaXRzLnByb3h5PyJwcm94eSI6Imhvc3QiLAorICAgICAgICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZSwKKyAgICAgICAgICAgIGFyZXNfc3RyZXJyb3IoY29ubi0+YXN5bmMuc3RhdHVzKSk7CisgICAgICByZXR1cm4gY29ubi0+Yml0cy5wcm94eT9DVVJMRV9DT1VMRE5UX1JFU09MVkVfUFJPWFk6CisgICAgICAgIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOworICAgIH0KKyAgICAqZG5zID0gY29ubi0+YXN5bmMuZG5zOworICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogQ3VybF9yZXNvbHZlcl93YWl0X3Jlc29sdigpCisgKgorICogd2FpdHMgZm9yIGEgcmVzb2x2ZSB0byBmaW5pc2guIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGF2b2lkZWQgc2luY2UgdXNpbmcKKyAqIHRoaXMgcmlzayBnZXR0aW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gImhhbmciLgorICoKKyAqIElmICdlbnRyeScgaXMgbm9uLU5VTEwsIG1ha2UgaXQgcG9pbnQgdG8gdGhlIHJlc29sdmVkIGRucyBlbnRyeQorICoKKyAqIFJldHVybnMgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1QgaWYgdGhlIGhvc3Qgd2FzIG5vdCByZXNvbHZlZCwgYW5kCisgKiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQgaWYgYSB0aW1lLW91dCBvY2N1cnJlZC4KKyAqLworQ1VSTGNvZGUgQ3VybF9yZXNvbHZlcl93YWl0X3Jlc29sdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmVudHJ5KQoreworICBDVVJMY29kZSByYz1DVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBsb25nIHRpbWVvdXQ7CisgIHN0cnVjdCB0aW1ldmFsIG5vdyA9IEN1cmxfdHZub3coKTsKKyAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICp0ZW1wX2VudHJ5OworCisgIHRpbWVvdXQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsICZub3csIFRSVUUpOworICBpZighdGltZW91dCkKKyAgICB0aW1lb3V0ID0gQ1VSTF9USU1FT1VUX1JFU09MVkUgKiAxMDAwOyAvKiBkZWZhdWx0IG5hbWUgcmVzb2x2ZSB0aW1lb3V0ICovCisKKyAgLyogV2FpdCBmb3IgdGhlIG5hbWUgcmVzb2x2ZSBxdWVyeSB0byBjb21wbGV0ZS4gKi8KKyAgZm9yKDs7KSB7CisgICAgc3RydWN0IHRpbWV2YWwgKnR2cCwgdHYsIHN0b3JlOworICAgIGxvbmcgdGltZWRpZmY7CisgICAgaW50IGl0aW1lb3V0OworICAgIGludCB0aW1lb3V0X21zOworCisgICAgaXRpbWVvdXQgPSAodGltZW91dCA+IChsb25nKUlOVF9NQVgpID8gSU5UX01BWCA6IChpbnQpdGltZW91dDsKKworICAgIHN0b3JlLnR2X3NlYyA9IGl0aW1lb3V0LzEwMDA7CisgICAgc3RvcmUudHZfdXNlYyA9IChpdGltZW91dCUxMDAwKSoxMDAwOworCisgICAgdHZwID0gYXJlc190aW1lb3V0KChhcmVzX2NoYW5uZWwpZGF0YS0+c3RhdGUucmVzb2x2ZXIsICZzdG9yZSwgJnR2KTsKKworICAgIC8qIHVzZSB0aGUgdGltZW91dCBwZXJpb2QgYXJlcyByZXR1cm5lZCB0byB1cyBhYm92ZSBpZiBsZXNzIHRoYW4gb25lCisgICAgICAgc2Vjb25kIGlzIGxlZnQsIG90aGVyd2lzZSBqdXN0IHVzZSAxMDAwbXMgdG8gbWFrZSBzdXJlIHRoZSBwcm9ncmVzcworICAgICAgIGNhbGxiYWNrIGdldHMgY2FsbGVkIGZyZXF1ZW50IGVub3VnaCAqLworICAgIGlmKCF0dnAtPnR2X3NlYykKKyAgICAgIHRpbWVvdXRfbXMgPSAoaW50KSh0dnAtPnR2X3VzZWMvMTAwMCk7CisgICAgZWxzZQorICAgICAgdGltZW91dF9tcyA9IDEwMDA7CisKKyAgICB3YWl0cGVyZm9ybShjb25uLCB0aW1lb3V0X21zKTsKKyAgICBDdXJsX3Jlc29sdmVyX2lzX3Jlc29sdmVkKGNvbm4sJnRlbXBfZW50cnkpOworCisgICAgaWYoY29ubi0+YXN5bmMuZG9uZSkKKyAgICAgIGJyZWFrOworCisgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKSB7CisgICAgICByYyA9IENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisgICAgICB0aW1lb3V0ID0gLTE7IC8qIHRyaWdnZXIgdGhlIGNhbmNlbCBiZWxvdyAqLworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN0cnVjdCB0aW1ldmFsIG5vdzIgPSBDdXJsX3R2bm93KCk7CisgICAgICB0aW1lZGlmZiA9IEN1cmxfdHZkaWZmKG5vdzIsIG5vdyk7IC8qIHNwZW50IHRpbWUgKi8KKyAgICAgIHRpbWVvdXQgLT0gdGltZWRpZmY/dGltZWRpZmY6MTsgLyogYWx3YXlzIGRlZHVjdCBhdCBsZWFzdCAxICovCisgICAgICBub3cgPSBub3cyOyAvKiBmb3IgbmV4dCBsb29wICovCisgICAgfQorICAgIGlmKHRpbWVvdXQgPCAwKSB7CisgICAgICAvKiBvdXIgdGltZW91dCwgc28gd2UgY2FuY2VsIHRoZSBhcmVzIG9wZXJhdGlvbiAqLworICAgICAgYXJlc19jYW5jZWwoKGFyZXNfY2hhbm5lbClkYXRhLT5zdGF0ZS5yZXNvbHZlcik7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICAvKiBPcGVyYXRpb24gY29tcGxldGUsIGlmIHRoZSBsb29rdXAgd2FzIHN1Y2Nlc3NmdWwgd2Ugbm93IGhhdmUgdGhlIGVudHJ5CisgICAgIGluIHRoZSBjYWNoZS4gKi8KKworICBpZihlbnRyeSkKKyAgICAqZW50cnkgPSBjb25uLT5hc3luYy5kbnM7CisKKyAgaWYoIWNvbm4tPmFzeW5jLmRucykgeworICAgIC8qIGEgbmFtZSB3YXMgbm90IHJlc29sdmVkICovCisgICAgaWYoKHRpbWVvdXQgPCAwKSB8fCAoY29ubi0+YXN5bmMuc3RhdHVzID09IEFSRVNfRVRJTUVPVVQpKSB7CisgICAgICBpZihjb25uLT5iaXRzLnByb3h5KSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJSZXNvbHZpbmcgcHJveHkgdGltZWQgb3V0OiAlcyIsIGNvbm4tPnByb3h5LmRpc3BuYW1lKTsKKyAgICAgICAgcmMgPSBDVVJMRV9DT1VMRE5UX1JFU09MVkVfUFJPWFk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlJlc29sdmluZyBob3N0IHRpbWVkIG91dDogJXMiLCBjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgICAgICAgcmMgPSBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZihjb25uLT5hc3luYy5kb25lKSB7CisgICAgICBpZihjb25uLT5iaXRzLnByb3h5KSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3QgcmVzb2x2ZSBwcm94eTogJXMgKCVzKSIsIGNvbm4tPnByb3h5LmRpc3BuYW1lLAorICAgICAgICAgICAgICBhcmVzX3N0cmVycm9yKGNvbm4tPmFzeW5jLnN0YXR1cykpOworICAgICAgICByYyA9IENVUkxFX0NPVUxETlRfUkVTT0xWRV9QUk9YWTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IHJlc29sdmUgaG9zdDogJXMgKCVzKSIsIGNvbm4tPmhvc3QuZGlzcG5hbWUsCisgICAgICAgICAgICAgIGFyZXNfc3RyZXJyb3IoY29ubi0+YXN5bmMuc3RhdHVzKSk7CisgICAgICAgIHJjID0gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJjID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworCisgICAgLyogY2xvc2UgdGhlIGNvbm5lY3Rpb24sIHNpbmNlIHdlIGNhbid0IHJldHVybiBmYWlsdXJlIGhlcmUgd2l0aG91dAorICAgICAgIGNsZWFuaW5nIHVwIHRoaXMgY29ubmVjdGlvbiBwcm9wZXJseSAqLworICAgIGNvbm4tPmJpdHMuY2xvc2UgPSBUUlVFOworICB9CisKKyAgcmV0dXJuIHJjOworfQorCisvKiBDb25uZWN0cyByZXN1bHRzIHRvIHRoZSBsaXN0ICovCitzdGF0aWMgdm9pZCBjb21wb3VuZF9yZXN1bHRzKHN0cnVjdCBSZXNvbHZlclJlc3VsdHMgKnJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9hZGRyaW5mbyAqYWkpCit7CisgIEN1cmxfYWRkcmluZm8gKmFpX3RhaWw7CisgIGlmKCFhaSkKKyAgICByZXR1cm47CisgIGFpX3RhaWwgPSBhaTsKKworICB3aGlsZShhaV90YWlsLT5haV9uZXh0KQorICAgIGFpX3RhaWwgPSBhaV90YWlsLT5haV9uZXh0OworCisgIC8qIEFkZCB0aGUgbmV3IHJlc3VsdHMgdG8gdGhlIGxpc3Qgb2Ygb2xkIHJlc3VsdHMuICovCisgIGFpX3RhaWwtPmFpX25leHQgPSByZXMtPnRlbXBfYWk7CisgIHJlcy0+dGVtcF9haSA9IGFpOworfQorCisvKgorICogYXJlc19xdWVyeV9jb21wbGV0ZWRfY2IoKSBpcyB0aGUgY2FsbGJhY2sgdGhhdCBhcmVzIHdpbGwgY2FsbCB3aGVuCisgKiB0aGUgaG9zdCBxdWVyeSBpbml0aWF0ZWQgYnkgYXJlc19nZXRob3N0YnluYW1lKCkgZnJvbSBDdXJsX2dldGFkZHJpbmZvKCksCisgKiB3aGVuIHVzaW5nIGFyZXMsIGlzIGNvbXBsZXRlZCBlaXRoZXIgc3VjY2Vzc2Z1bGx5IG9yIHdpdGggZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQgcXVlcnlfY29tcGxldGVkX2NiKHZvaWQgKmFyZywgIC8qIChzdHJ1Y3QgY29ubmVjdGRhdGEgKikgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzLAorI2lmZGVmIEhBVkVfQ0FSRVNfQ0FMTEJBQ0tfVElNRU9VVFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dHMsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaG9zdGVudCkKK3sKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gKHN0cnVjdCBjb25uZWN0ZGF0YSAqKWFyZzsKKyAgc3RydWN0IFJlc29sdmVyUmVzdWx0cyAqcmVzOworCisjaWZkZWYgSEFWRV9DQVJFU19DQUxMQkFDS19USU1FT1VUUworICAodm9pZCl0aW1lb3V0czsgLyogaWdub3JlZCAqLworI2VuZGlmCisKKyAgaWYoQVJFU19FREVTVFJVQ1RJT04gPT0gc3RhdHVzKQorICAgIC8qIHdoZW4gdGhpcyBhcmVzIGhhbmRsZSBpcyBnZXR0aW5nIGRlc3Ryb3llZCwgdGhlICdhcmcnIHBvaW50ZXIgbWF5IG5vdAorICAgICAgIGJlIHZhbGlkIHNvIG9ubHkgZGVmZXIgaXQgd2hlbiB3ZSBrbm93IHRoZSAnc3RhdHVzJyBzYXlzIGl0cyBmaW5lISAqLworICAgIHJldHVybjsKKworICByZXMgPSAoc3RydWN0IFJlc29sdmVyUmVzdWx0cyAqKWNvbm4tPmFzeW5jLm9zX3NwZWNpZmljOworICByZXMtPm51bV9wZW5kaW5nLS07CisKKyAgaWYoQ1VSTF9BU1lOQ19TVUNDRVNTID09IHN0YXR1cykgeworICAgIEN1cmxfYWRkcmluZm8gKmFpID0gQ3VybF9oZTJhaShob3N0ZW50LCBjb25uLT5hc3luYy5wb3J0KTsKKyAgICBpZihhaSkgeworICAgICAgY29tcG91bmRfcmVzdWx0cyhyZXMsIGFpKTsKKyAgICB9CisgIH0KKyAgLyogQSBzdWNjZXNzZnVsIHJlc3VsdCBvdmVyd3JpdGVzIGFueSBwcmV2aW91cyBlcnJvciAqLworICBpZihyZXMtPmxhc3Rfc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKKyAgICByZXMtPmxhc3Rfc3RhdHVzID0gc3RhdHVzOworfQorCisvKgorICogQ3VybF9yZXNvbHZlcl9nZXRhZGRyaW5mbygpIC0gd2hlbiB1c2luZyBhcmVzCisgKgorICogUmV0dXJucyBuYW1lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiBob3N0bmFtZSBhbmQgcG9ydCBudW1iZXIuIElmCisgKiBzdWNjZXNzZnVsLCB0aGUgJ2hvc3RlbnQnIGlzIHJldHVybmVkIGFuZCB0aGUgZm9ydGggYXJndW1lbnQgd2lsbCBwb2ludCB0bworICogbWVtb3J5IHdlIG5lZWQgdG8gZnJlZSBhZnRlciB1c2UuIFRoYXQgbWVtb3J5ICpNVVNUKiBiZSBmcmVlZCB3aXRoCisgKiBDdXJsX2ZyZWVhZGRyaW5mbygpLCBub3RoaW5nIGVsc2UuCisgKi8KK0N1cmxfYWRkcmluZm8gKkN1cmxfcmVzb2x2ZXJfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApCit7CisgIGNoYXIgKmJ1ZnA7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IGluX2FkZHIgaW47CisgIGludCBmYW1pbHkgPSBQRl9JTkVUOworI2lmZGVmIEVOQUJMRV9JUFY2IC8qIENVUkxSRVNfSVBWNiAqLworICBzdHJ1Y3QgaW42X2FkZHIgaW42OworI2VuZGlmIC8qIENVUkxSRVNfSVBWNiAqLworCisgICp3YWl0cCA9IDA7IC8qIGRlZmF1bHQgdG8gc3luY2hyb25vdXMgcmVzcG9uc2UgKi8KKworICAvKiBGaXJzdCBjaGVjayBpZiB0aGlzIGlzIGFuIElQdjQgYWRkcmVzcyBzdHJpbmcgKi8KKyAgaWYoQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgaG9zdG5hbWUsICZpbikgPiAwKSB7CisgICAgLyogVGhpcyBpcyBhIGRvdHRlZCBJUCBhZGRyZXNzIDEyMy4xMjMuMTIzLjEyMy1zdHlsZSAqLworICAgIHJldHVybiBDdXJsX2lwMmFkZHIoQUZfSU5FVCwgJmluLCBob3N0bmFtZSwgcG9ydCk7CisgIH0KKworI2lmZGVmIEVOQUJMRV9JUFY2IC8qIENVUkxSRVNfSVBWNiAqLworICAvKiBPdGhlcndpc2UsIGNoZWNrIGlmIHRoaXMgaXMgYW4gSVB2NiBhZGRyZXNzIHN0cmluZyAqLworICBpZihDdXJsX2luZXRfcHRvbiAoQUZfSU5FVDYsIGhvc3RuYW1lLCAmaW42KSA+IDApCisgICAgLyogVGhpcyBtdXN0IGJlIGFuIElQdjYgYWRkcmVzcyBsaXRlcmFsLiAgKi8KKyAgICByZXR1cm4gQ3VybF9pcDJhZGRyKEFGX0lORVQ2LCAmaW42LCBob3N0bmFtZSwgcG9ydCk7CisKKyAgc3dpdGNoKGNvbm4tPmlwX3ZlcnNpb24pIHsKKyAgZGVmYXVsdDoKKyNpZiBBUkVTX1ZFUlNJT04gPj0gMHgwMTA2MDEKKyAgICBmYW1pbHkgPSBQRl9VTlNQRUM7IC8qIHN1cHBvcnRlZCBieSBjLWFyZXMgc2luY2UgMS42LjEsIHNvIGZvciBvbGRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgYy1hcmVzIHZlcnNpb25zIHRoaXMganVzdCBmYWxscyB0aHJvdWdoIGFuZCBkZWZhdWx0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gUEZfSU5FVCAqLworICAgIGJyZWFrOworI2VuZGlmCisgIGNhc2UgQ1VSTF9JUFJFU09MVkVfVjQ6CisgICAgZmFtaWx5ID0gUEZfSU5FVDsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX0lQUkVTT0xWRV9WNjoKKyAgICBmYW1pbHkgPSBQRl9JTkVUNjsKKyAgICBicmVhazsKKyAgfQorI2VuZGlmIC8qIENVUkxSRVNfSVBWNiAqLworCisgIGJ1ZnAgPSBzdHJkdXAoaG9zdG5hbWUpOworICBpZihidWZwKSB7CisgICAgc3RydWN0IFJlc29sdmVyUmVzdWx0cyAqcmVzID0gTlVMTDsKKyAgICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFzeW5jLmhvc3RuYW1lKTsKKyAgICBjb25uLT5hc3luYy5ob3N0bmFtZSA9IGJ1ZnA7CisgICAgY29ubi0+YXN5bmMucG9ydCA9IHBvcnQ7CisgICAgY29ubi0+YXN5bmMuZG9uZSA9IEZBTFNFOyAgIC8qIG5vdCBkb25lICovCisgICAgY29ubi0+YXN5bmMuc3RhdHVzID0gMDsgICAgIC8qIGNsZWFyICovCisgICAgY29ubi0+YXN5bmMuZG5zID0gTlVMTDsgICAgIC8qIGNsZWFyICovCisgICAgcmVzID0gY2FsbG9jKHNpemVvZihzdHJ1Y3QgUmVzb2x2ZXJSZXN1bHRzKSwxKTsKKyAgICBpZighcmVzKSB7CisgICAgICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFzeW5jLmhvc3RuYW1lKTsKKyAgICAgIGNvbm4tPmFzeW5jLmhvc3RuYW1lID0gTlVMTDsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBjb25uLT5hc3luYy5vc19zcGVjaWZpYyA9IHJlczsKKworICAgIC8qIGluaXRpYWwgc3RhdHVzIC0gZmFpbGVkICovCisgICAgcmVzLT5sYXN0X3N0YXR1cyA9IEFSRVNfRU5PVEZPVU5EOworI2lmZGVmIEVOQUJMRV9JUFY2IC8qIENVUkxSRVNfSVBWNiAqLworICAgIGlmKGZhbWlseSA9PSBQRl9VTlNQRUMpIHsKKyAgICAgIGlmKEN1cmxfaXB2NndvcmtzKCkpIHsKKyAgICAgICAgcmVzLT5udW1fcGVuZGluZyA9IDI7CisKKyAgICAgICAgLyogYXJlc2NoYW5uZWwgaXMgYWxyZWFkeSBzZXR1cCBpbiB0aGUgQ3VybF9vcGVuKCkgZnVuY3Rpb24gKi8KKyAgICAgICAgYXJlc19nZXRob3N0YnluYW1lKChhcmVzX2NoYW5uZWwpZGF0YS0+c3RhdGUucmVzb2x2ZXIsIGhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGX0lORVQsIHF1ZXJ5X2NvbXBsZXRlZF9jYiwgY29ubik7CisgICAgICAgIGFyZXNfZ2V0aG9zdGJ5bmFtZSgoYXJlc19jaGFubmVsKWRhdGEtPnN0YXRlLnJlc29sdmVyLCBob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRl9JTkVUNiwgcXVlcnlfY29tcGxldGVkX2NiLCBjb25uKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICByZXMtPm51bV9wZW5kaW5nID0gMTsKKworICAgICAgICAvKiBhcmVzY2hhbm5lbCBpcyBhbHJlYWR5IHNldHVwIGluIHRoZSBDdXJsX29wZW4oKSBmdW5jdGlvbiAqLworICAgICAgICBhcmVzX2dldGhvc3RieW5hbWUoKGFyZXNfY2hhbm5lbClkYXRhLT5zdGF0ZS5yZXNvbHZlciwgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZfSU5FVCwgcXVlcnlfY29tcGxldGVkX2NiLCBjb25uKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIENVUkxSRVNfSVBWNiAqLworICAgIHsKKyAgICAgIHJlcy0+bnVtX3BlbmRpbmcgPSAxOworCisgICAgICAvKiBhcmVzY2hhbm5lbCBpcyBhbHJlYWR5IHNldHVwIGluIHRoZSBDdXJsX29wZW4oKSBmdW5jdGlvbiAqLworICAgICAgYXJlc19nZXRob3N0YnluYW1lKChhcmVzX2NoYW5uZWwpZGF0YS0+c3RhdGUucmVzb2x2ZXIsIGhvc3RuYW1lLCBmYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfY29tcGxldGVkX2NiLCBjb25uKTsKKyAgICB9CisKKyAgICAqd2FpdHAgPSAxOyAvKiBleHBlY3QgYXN5bmNocm9ub3VzIHJlc3BvbnNlICovCisgIH0KKyAgcmV0dXJuIE5VTEw7IC8qIG5vIHN0cnVjdCB5ZXQgKi8KK30KKworQ1VSTGNvZGUgQ3VybF9zZXRfZG5zX3NlcnZlcnMoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzZXJ2ZXJzKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9OT1RfQlVJTFRfSU47CisjaWYgKEFSRVNfVkVSU0lPTiA+PSAweDAxMDcwNCkKKyAgaW50IGFyZXNfcmVzdWx0ID0gYXJlc19zZXRfc2VydmVyc19jc3YoZGF0YS0+c3RhdGUucmVzb2x2ZXIsIHNlcnZlcnMpOworICBzd2l0Y2goYXJlc19yZXN1bHQpIHsKKyAgY2FzZSBBUkVTX1NVQ0NFU1M6CisgICAgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICAgYnJlYWs7CisgIGNhc2UgQVJFU19FTk9NRU06CisgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBicmVhazsKKyAgY2FzZSBBUkVTX0VOT1RJTklUSUFMSVpFRDoKKyAgY2FzZSBBUkVTX0VOT0RBVEE6CisgIGNhc2UgQVJFU19FQkFEU1RSOgorICBkZWZhdWx0OgorICAgIHJlc3VsdCA9IENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKKyAgICBicmVhazsKKyAgfQorI2Vsc2UgLyogdG9vIG9sZCBjLWFyZXMgdmVyc2lvbiEgKi8KKyAgKHZvaWQpZGF0YTsKKyAgKHZvaWQpc2VydmVyczsKKyNlbmRpZgorICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmIC8qIENVUkxSRVNfQVJFUyAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2FzeW4tdGhyZWFkLmMgYi9jdXJsLTcuMjUuMC9saWIvYXN5bi10aHJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDI3MTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2FzeW4tdGhyZWFkLmMKQEAgLTAsMCArMSw2ODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgLyogZm9yIHRoZSBjbG9zZSgpIHByb3RvICovCisjZW5kaWYKKyNpZmRlZiBfX1ZNUworI2luY2x1ZGUgPGluLmg+CisjaW5jbHVkZSA8aW5ldC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKQorIyAgaWZkZWYgSEFWRV9QVEhSRUFEX0gKKyMgICAgaW5jbHVkZSA8cHRocmVhZC5oPgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpCisjICBpZmRlZiBIQVZFX1BST0NFU1NfSAorIyAgICBpbmNsdWRlIDxwcm9jZXNzLmg+CisjICBlbmRpZgorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChORVRXQVJFKSAmJiBkZWZpbmVkKF9fTk9WRUxMX0xJQkNfXykpCisjdW5kZWYgaW5fYWRkcl90CisjZGVmaW5lIGluX2FkZHJfdCB1bnNpZ25lZCBsb25nCisjZW5kaWYKKworI2lmZGVmIEhBVkVfR0VUQUREUklORk8KKyMgIGRlZmluZSBSRVNPTFZFUl9FTk9NRU0gIEVBSV9NRU1PUlkKKyNlbHNlCisjICBkZWZpbmUgUkVTT0xWRVJfRU5PTUVNICBFTk9NRU0KKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaG9zdGlwLmgiCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgInNoYXJlLmgiCisjaW5jbHVkZSAic3RyZXJyb3IuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJtdWx0aWlmLmgiCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisjaW5jbHVkZSAiY3VybF90aHJlYWRzLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBPbmx5IGZvciB0aHJlYWRlZCBuYW1lIHJlc29sdmVzIGJ1aWxkcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgQ1VSTFJFU19USFJFQURFRAorCisvKgorICogQ3VybF9yZXNvbHZlcl9nbG9iYWxfaW5pdCgpCisgKiBDYWxsZWQgZnJvbSBjdXJsX2dsb2JhbF9pbml0KCkgdG8gaW5pdGlhbGl6ZSBnbG9iYWwgcmVzb2x2ZXIgZW52aXJvbm1lbnQuCisgKiBEb2VzIG5vdGhpbmcgaGVyZS4KKyAqLworaW50IEN1cmxfcmVzb2x2ZXJfZ2xvYmFsX2luaXQodm9pZCkKK3sKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogQ3VybF9yZXNvbHZlcl9nbG9iYWxfY2xlYW51cCgpCisgKiBDYWxsZWQgZnJvbSBjdXJsX2dsb2JhbF9jbGVhbnVwKCkgdG8gZGVzdHJveSBnbG9iYWwgcmVzb2x2ZXIgZW52aXJvbm1lbnQuCisgKiBEb2VzIG5vdGhpbmcgaGVyZS4KKyAqLwordm9pZCBDdXJsX3Jlc29sdmVyX2dsb2JhbF9jbGVhbnVwKHZvaWQpCit7Cit9CisKKy8qCisgKiBDdXJsX3Jlc29sdmVyX2luaXQoKQorICogQ2FsbGVkIGZyb20gY3VybF9lYXN5X2luaXQoKSAtPiBDdXJsX29wZW4oKSB0byBpbml0aWFsaXplIHJlc29sdmVyCisgKiBVUkwtc3RhdGUgc3BlY2lmaWMgZW52aXJvbm1lbnQgKCdyZXNvbHZlcicgbWVtYmVyIG9mIHRoZSBVcmxTdGF0ZQorICogc3RydWN0dXJlKS4gIERvZXMgbm90aGluZyBoZXJlLgorICovCitDVVJMY29kZSBDdXJsX3Jlc29sdmVyX2luaXQodm9pZCAqKnJlc29sdmVyKQoreworICAodm9pZClyZXNvbHZlcjsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogQ3VybF9yZXNvbHZlcl9jbGVhbnVwKCkKKyAqIENhbGxlZCBmcm9tIGN1cmxfZWFzeV9jbGVhbnVwKCkgLT4gQ3VybF9jbG9zZSgpIHRvIGNsZWFudXAgcmVzb2x2ZXIKKyAqIFVSTC1zdGF0ZSBzcGVjaWZpYyBlbnZpcm9ubWVudCAoJ3Jlc29sdmVyJyBtZW1iZXIgb2YgdGhlIFVybFN0YXRlCisgKiBzdHJ1Y3R1cmUpLiAgRG9lcyBub3RoaW5nIGhlcmUuCisgKi8KK3ZvaWQgQ3VybF9yZXNvbHZlcl9jbGVhbnVwKHZvaWQgKnJlc29sdmVyKQoreworICAodm9pZClyZXNvbHZlcjsKK30KKworLyoKKyAqIEN1cmxfcmVzb2x2ZXJfZHVwaGFuZGxlKCkKKyAqIENhbGxlZCBmcm9tIGN1cmxfZWFzeV9kdXBoYW5kbGUoKSB0byBkdXBsaWNhdGUgcmVzb2x2ZXIgVVJMIHN0YXRlLXNwZWNpZmljCisgKiBlbnZpcm9ubWVudCAoJ3Jlc29sdmVyJyBtZW1iZXIgb2YgdGhlIFVybFN0YXRlIHN0cnVjdHVyZSkuICBEb2VzIG5vdGhpbmcKKyAqIGhlcmUuCisgKi8KK2ludCBDdXJsX3Jlc29sdmVyX2R1cGhhbmRsZSh2b2lkICoqdG8sIHZvaWQgKmZyb20pCit7CisgICh2b2lkKXRvOworICAodm9pZClmcm9tOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfYXN5bmNfZGF0YShzdHJ1Y3QgQ3VybF9hc3luYyAqKTsKKworLyoKKyAqIENhbmNlbCBhbGwgcG9zc2libHkgc3RpbGwgb24tZ29pbmcgcmVzb2x2ZXMgZm9yIHRoaXMgY29ubmVjdGlvbi4KKyAqLwordm9pZCBDdXJsX3Jlc29sdmVyX2NhbmNlbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGRlc3Ryb3lfYXN5bmNfZGF0YSgmY29ubi0+YXN5bmMpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdCBhIHRocmVhZGVkIHJlc29sdmUgKi8KK3N0YXRpYyBib29sIGluaXRfcmVzb2x2ZV90aHJlYWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMpOworCisKKy8qIERhdGEgZm9yIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHJlc29sdmVyIHRocmVhZCBhbmQgaXRzIHBhcmVudCAqLworc3RydWN0IHRocmVhZF9zeW5jX2RhdGEgeworICBjdXJsX211dGV4X3QgKiBtdHg7CisgIGludCBkb25lOworCisgIGNoYXIgKiBob3N0bmFtZTsgICAgICAgIC8qIGhvc3RuYW1lIHRvIHJlc29sdmUsIEN1cmxfYXN5bmMuaG9zdG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVwbGljYXRlICovCisgIGludCBwb3J0OworICBpbnQgc29ja19lcnJvcjsKKyAgQ3VybF9hZGRyaW5mbyAqcmVzOworI2lmZGVmIEhBVkVfR0VUQUREUklORk8KKyAgc3RydWN0IGFkZHJpbmZvIGhpbnRzOworI2VuZGlmCit9OworCitzdHJ1Y3QgdGhyZWFkX2RhdGEgeworICBjdXJsX3RocmVhZF90IHRocmVhZF9obmQ7CisgIHVuc2lnbmVkIGludCBwb2xsX2ludGVydmFsOworICBpbnQgaW50ZXJ2YWxfZW5kOworICBzdHJ1Y3QgdGhyZWFkX3N5bmNfZGF0YSB0c2Q7Cit9OworCitzdGF0aWMgc3RydWN0IHRocmVhZF9zeW5jX2RhdGEgKmNvbm5fdGhyZWFkX3N5bmNfZGF0YShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHJldHVybiAmKCgoc3RydWN0IHRocmVhZF9kYXRhICopY29ubi0+YXN5bmMub3Nfc3BlY2lmaWMpLT50c2QpOworfQorCisjZGVmaW5lIENPTk5fVEhSRUFEX1NZTkNfREFUQShjb25uKSAmKCgoY29ubiktPmFzeW5jLm9zX3NwZWNpZmljKS0+dHNkKTsKKworLyogRGVzdHJveSByZXNvbHZlciB0aHJlYWQgc3luY2hyb25pemF0aW9uIGRhdGEgKi8KK3N0YXRpYwordm9pZCBkZXN0cm95X3RocmVhZF9zeW5jX2RhdGEoc3RydWN0IHRocmVhZF9zeW5jX2RhdGEgKiB0c2QpCit7CisgIGlmKHRzZC0+bXR4KSB7CisgICAgQ3VybF9tdXRleF9kZXN0cm95KHRzZC0+bXR4KTsKKyAgICBmcmVlKHRzZC0+bXR4KTsKKyAgfQorCisgIGlmKHRzZC0+aG9zdG5hbWUpCisgICAgZnJlZSh0c2QtPmhvc3RuYW1lKTsKKworICBpZih0c2QtPnJlcykKKyAgICBDdXJsX2ZyZWVhZGRyaW5mbyh0c2QtPnJlcyk7CisKKyAgbWVtc2V0KHRzZCwwLHNpemVvZigqdHNkKSk7Cit9CisKKy8qIEluaXRpYWxpemUgcmVzb2x2ZXIgdGhyZWFkIHN5bmNocm9uaXphdGlvbiBkYXRhICovCitzdGF0aWMKK2ludCBpbml0X3RocmVhZF9zeW5jX2RhdGEoc3RydWN0IHRocmVhZF9zeW5jX2RhdGEgKiB0c2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMpCit7CisgIG1lbXNldCh0c2QsIDAsIHNpemVvZigqdHNkKSk7CisKKyAgdHNkLT5wb3J0ID0gcG9ydDsKKyNpZmRlZiBDVVJMUkVTX0lQVjYKKyAgREVCVUdBU1NFUlQoaGludHMpOworICB0c2QtPmhpbnRzID0gKmhpbnRzOworI2Vsc2UKKyAgKHZvaWQpIGhpbnRzOworI2VuZGlmCisKKyAgdHNkLT5tdHggPSBtYWxsb2Moc2l6ZW9mKGN1cmxfbXV0ZXhfdCkpOworICBpZih0c2QtPm10eCA9PSBOVUxMKQorICAgIGdvdG8gZXJyX2V4aXQ7CisKKyAgQ3VybF9tdXRleF9pbml0KHRzZC0+bXR4KTsKKworICB0c2QtPnNvY2tfZXJyb3IgPSBDVVJMX0FTWU5DX1NVQ0NFU1M7CisKKyAgLyogQ29weWluZyBob3N0bmFtZSBzdHJpbmcgYmVjYXVzZSBvcmlnaW5hbCBjYW4gYmUgZGVzdHJveWVkIGJ5IHBhcmVudAorICAgKiB0aHJlYWQgZHVyaW5nIGdldGhvc3RieW5hbWUgZXhlY3V0aW9uLgorICAgKi8KKyAgdHNkLT5ob3N0bmFtZSA9IHN0cmR1cChob3N0bmFtZSk7CisgIGlmKCF0c2QtPmhvc3RuYW1lKQorICAgIGdvdG8gZXJyX2V4aXQ7CisKKyAgcmV0dXJuIDE7CisKKyBlcnJfZXhpdDoKKyAgLyogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkICovCisgIGRlc3Ryb3lfdGhyZWFkX3N5bmNfZGF0YSh0c2QpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRhZGRyaW5mb19jb21wbGV0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCB0aHJlYWRfc3luY19kYXRhICp0c2QgPSBjb25uX3RocmVhZF9zeW5jX2RhdGEoY29ubik7CisgIGludCByYzsKKworICByYyA9IEN1cmxfYWRkcmluZm9fY2FsbGJhY2soY29ubiwgdHNkLT5zb2NrX2Vycm9yLCB0c2QtPnJlcyk7CisgIC8qIFRoZSB0c2QtPnJlcyBzdHJ1Y3R1cmUgaGFzIGJlZW4gY29waWVkIHRvIGFzeW5jLmRucyBhbmQgcGVyaGFwcyB0aGUgRE5TCisgICAgIGNhY2hlLiAgU2V0IG91ciBjb3B5IHRvIE5VTEwgc28gZGVzdHJveV90aHJlYWRfc3luY19kYXRhIGRvZXNuJ3QgZnJlZSBpdC4KKyAgKi8KKyAgdHNkLT5yZXMgPSBOVUxMOworCisgIHJldHVybiByYzsKK30KKworCisjaWZkZWYgSEFWRV9HRVRBRERSSU5GTworCisvKgorICogZ2V0YWRkcmluZm9fdGhyZWFkKCkgcmVzb2x2ZXMgYSBuYW1lIGFuZCB0aGVuIGV4aXRzLgorICoKKyAqIEZvciBidWlsZHMgd2l0aG91dCBBUkVTLCBidXQgd2l0aCBFTkFCTEVfSVBWNiwgY3JlYXRlIGEgcmVzb2x2ZXIgdGhyZWFkCisgKiBhbmQgd2FpdCBvbiBpdC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBDVVJMX1NURENBTEwgZ2V0YWRkcmluZm9fdGhyZWFkICh2b2lkICphcmcpCit7CisgIHN0cnVjdCB0aHJlYWRfc3luY19kYXRhICp0c2QgPSAoc3RydWN0IHRocmVhZF9zeW5jX2RhdGEqKWFyZzsKKyAgY2hhciAgIHNlcnZpY2UgW05JX01BWFNFUlZdOworICBpbnQgcmM7CisKKyAgc25wcmludGYoc2VydmljZSwgc2l6ZW9mKHNlcnZpY2UpLCAiJWQiLCB0c2QtPnBvcnQpOworCisgIHJjID0gQ3VybF9nZXRhZGRyaW5mb19leCh0c2QtPmhvc3RuYW1lLCBzZXJ2aWNlLCAmdHNkLT5oaW50cywgJnRzZC0+cmVzKTsKKworICBpZihyYyAhPSAwKSB7CisgICAgdHNkLT5zb2NrX2Vycm9yID0gU09DS0VSUk5PP1NPQ0tFUlJOTzpyYzsKKyAgICBpZih0c2QtPnNvY2tfZXJyb3IgPT0gMCkKKyAgICAgIHRzZC0+c29ja19lcnJvciA9IFJFU09MVkVSX0VOT01FTTsKKyAgfQorCisgIEN1cmxfbXV0ZXhfYWNxdWlyZSh0c2QtPm10eCk7CisgIHRzZC0+ZG9uZSA9IDE7CisgIEN1cmxfbXV0ZXhfcmVsZWFzZSh0c2QtPm10eCk7CisKKyAgcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qIEhBVkVfR0VUQUREUklORk8gKi8KKworLyoKKyAqIGdldGhvc3RieW5hbWVfdGhyZWFkKCkgcmVzb2x2ZXMgYSBuYW1lIGFuZCB0aGVuIGV4aXRzLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IENVUkxfU1REQ0FMTCBnZXRob3N0YnluYW1lX3RocmVhZCAodm9pZCAqYXJnKQoreworICBzdHJ1Y3QgdGhyZWFkX3N5bmNfZGF0YSAqdHNkID0gKHN0cnVjdCB0aHJlYWRfc3luY19kYXRhICopYXJnOworCisgIHRzZC0+cmVzID0gQ3VybF9pcHY0X3Jlc29sdmVfcih0c2QtPmhvc3RuYW1lLCB0c2QtPnBvcnQpOworCisgIGlmKCF0c2QtPnJlcykgeworICAgIHRzZC0+c29ja19lcnJvciA9IFNPQ0tFUlJOTzsKKyAgICBpZih0c2QtPnNvY2tfZXJyb3IgPT0gMCkKKyAgICAgIHRzZC0+c29ja19lcnJvciA9IFJFU09MVkVSX0VOT01FTTsKKyAgfQorCisgIEN1cmxfbXV0ZXhfYWNxdWlyZSh0c2QtPm10eCk7CisgIHRzZC0+ZG9uZSA9IDE7CisgIEN1cmxfbXV0ZXhfcmVsZWFzZSh0c2QtPm10eCk7CisKKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBIQVZFX0dFVEFERFJJTkZPICovCisKKy8qCisgKiBkZXN0cm95X2FzeW5jX2RhdGEoKSBjbGVhbnMgdXAgYXN5bmMgcmVzb2x2ZXIgZGF0YSBhbmQgdGhyZWFkIGhhbmRsZS4KKyAqLworc3RhdGljIHZvaWQgZGVzdHJveV9hc3luY19kYXRhIChzdHJ1Y3QgQ3VybF9hc3luYyAqYXN5bmMpCit7CisgIGlmKGFzeW5jLT5ob3N0bmFtZSkKKyAgICBmcmVlKGFzeW5jLT5ob3N0bmFtZSk7CisKKyAgaWYoYXN5bmMtPm9zX3NwZWNpZmljKSB7CisgICAgc3RydWN0IHRocmVhZF9kYXRhICp0ZCA9IChzdHJ1Y3QgdGhyZWFkX2RhdGEqKSBhc3luYy0+b3Nfc3BlY2lmaWM7CisKKyAgICBpZih0ZC0+dGhyZWFkX2huZCAhPSBjdXJsX3RocmVhZF90X251bGwpCisgICAgICBDdXJsX3RocmVhZF9qb2luKCZ0ZC0+dGhyZWFkX2huZCk7CisKKyAgICBkZXN0cm95X3RocmVhZF9zeW5jX2RhdGEoJnRkLT50c2QpOworCisgICAgZnJlZShhc3luYy0+b3Nfc3BlY2lmaWMpOworICB9CisgIGFzeW5jLT5ob3N0bmFtZSA9IE5VTEw7CisgIGFzeW5jLT5vc19zcGVjaWZpYyA9IE5VTEw7Cit9CisKKy8qCisgKiBpbml0X3Jlc29sdmVfdGhyZWFkKCkgc3RhcnRzIGEgbmV3IHRocmVhZCB0aGF0IHBlcmZvcm1zIHRoZSBhY3R1YWwKKyAqIHJlc29sdmUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBiZWZvcmUgdGhlIHJlc29sdmUgaXMgZG9uZS4KKyAqCisgKiBSZXR1cm5zIEZBTFNFIGluIGNhc2Ugb2YgZmFpbHVyZSwgb3RoZXJ3aXNlIFRSVUUuCisgKi8KK3N0YXRpYyBib29sIGluaXRfcmVzb2x2ZV90aHJlYWQgKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLCBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMpCit7CisgIHN0cnVjdCB0aHJlYWRfZGF0YSAqdGQgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB0aHJlYWRfZGF0YSkpOworICBpbnQgZXJyID0gUkVTT0xWRVJfRU5PTUVNOworCisgIGNvbm4tPmFzeW5jLm9zX3NwZWNpZmljID0gKHZvaWQqKSB0ZDsKKyAgaWYoIXRkKQorICAgIGdvdG8gZXJyX2V4aXQ7CisKKyAgY29ubi0+YXN5bmMucG9ydCA9IHBvcnQ7CisgIGNvbm4tPmFzeW5jLmRvbmUgPSBGQUxTRTsKKyAgY29ubi0+YXN5bmMuc3RhdHVzID0gMDsKKyAgY29ubi0+YXN5bmMuZG5zID0gTlVMTDsKKyAgdGQtPnRocmVhZF9obmQgPSBjdXJsX3RocmVhZF90X251bGw7CisKKyAgaWYoIWluaXRfdGhyZWFkX3N5bmNfZGF0YSgmdGQtPnRzZCwgaG9zdG5hbWUsIHBvcnQsIGhpbnRzKSkKKyAgICBnb3RvIGVycl9leGl0OworCisgIEN1cmxfc2FmZWZyZWUoY29ubi0+YXN5bmMuaG9zdG5hbWUpOworICBjb25uLT5hc3luYy5ob3N0bmFtZSA9IHN0cmR1cChob3N0bmFtZSk7CisgIGlmKCFjb25uLT5hc3luYy5ob3N0bmFtZSkKKyAgICBnb3RvIGVycl9leGl0OworCisjaWZkZWYgSEFWRV9HRVRBRERSSU5GTworICB0ZC0+dGhyZWFkX2huZCA9IEN1cmxfdGhyZWFkX2NyZWF0ZShnZXRhZGRyaW5mb190aHJlYWQsICZ0ZC0+dHNkKTsKKyNlbHNlCisgIHRkLT50aHJlYWRfaG5kID0gQ3VybF90aHJlYWRfY3JlYXRlKGdldGhvc3RieW5hbWVfdGhyZWFkLCAmdGQtPnRzZCk7CisjZW5kaWYKKworICBpZighdGQtPnRocmVhZF9obmQpIHsKKyNpZm5kZWYgX1dJTjMyX1dDRQorICAgIGVyciA9IGVycm5vOworI2VuZGlmCisgICAgZ290byBlcnJfZXhpdDsKKyAgfQorCisgIHJldHVybiBUUlVFOworCisgZXJyX2V4aXQ6CisgIGRlc3Ryb3lfYXN5bmNfZGF0YSgmY29ubi0+YXN5bmMpOworCisgIFNFVF9FUlJOTyhlcnIpOworCisgIHJldHVybiBGQUxTRTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykgJiYgIWRlZmluZWQoSEFWRV9HQUlfU1RSRVJST1IpICYmICFkZWZpbmVkKFdJTjMyKQorLyogTmV0V2FyZSBoYXMgZ2V0YWRkcmluZm8gYnV0IGxhY2tzIGdhaV9zdHJlcnJvci4KKyAgIFdpbmRvd3MgaGFzIGEgZ2FpX3N0cmVycm9yIGJ1dCBpdCBpcyBiYWQgKG5vdCB0aHJlYWQtc2FmZSkgYW5kIHRoZSBnZW5lcmljCisgICBzb2NrZXQgZXJyb3Igc3RyaW5nIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGZvciB0aGlzIHB1cG9zZS4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICpnYWlfc3RyZXJyb3IoaW50IGVjb2RlKQoreworICBzd2l0Y2ggKGVjb2RlKSB7CisgIGNhc2UgRUFJX0FHQUlOOgorICAgIHJldHVybiAiVGhlIG5hbWUgY291bGQgbm90IGJlIHJlc29sdmVkIGF0IHRoaXMgdGltZSI7CisgIGNhc2UgRUFJX0JBREZMQUdTOgorICAgIHJldHVybiAiVGhlIGZsYWdzIHBhcmFtZXRlciBoYWQgYW4gaW52YWxpZCB2YWx1ZSI7CisgIGNhc2UgRUFJX0ZBSUw6CisgICAgcmV0dXJuICJBIG5vbi1yZWNvdmVyYWJsZSBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gIgorICAgICAgInJlc29sdmUgdGhlIG5hbWUiOworICBjYXNlIEVBSV9GQU1JTFk6CisgICAgcmV0dXJuICJUaGUgYWRkcmVzcyBmYW1pbHkgd2FzIG5vdCByZWNvZ25pemVkIjsKKyAgY2FzZSBFQUlfTUVNT1JZOgorICAgIHJldHVybiAiT3V0IG9mIG1lbW9yeSI7CisgIGNhc2UgRUFJX05PTkFNRToKKyAgICByZXR1cm4gIlRoZSBuYW1lIGRvZXMgbm90IHJlc29sdmUgZm9yIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzIjsKKyAgY2FzZSBFQUlfU0VSVklDRToKKyAgICByZXR1cm4gIlRoZSBzZXJ2aWNlIHBhc3NlZCB3YXMgbm90IHJlY29nbml6ZWQgZm9yIHRoZSAiCisgICAgICAic3BlY2lmaWVkIHNvY2tldCB0eXBlIgorICBjYXNlIEVBSV9TT0NLVFlQRToKKyAgICByZXR1cm4gIlRoZSBpbnRlbmRlZCBzb2NrZXQgdHlwZSB3YXMgbm90IHJlY29nbml6ZWQiCisgIGNhc2UgRUFJX1NZU1RFTToKKyAgICByZXR1cm4gIkEgc3lzdGVtIGVycm9yIG9jY3VycmVkIjsKKyAgY2FzZSBFQUlfT1ZFUkZMT1c6CisgICAgcmV0dXJuICJBbiBhcmd1bWVudCBidWZmZXIgb3ZlcmZsb3dlZCI7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuICJVbmtub3duIGVycm9yIjsKKworLyogZGVmaW5lIHRoaXMgbm93IGFzIHRoaXMgaXMgYSBwcml2YXRlIGltcGxlbWVudGF0aW9uIG9mIHNhaWQgZnVuY3Rpb24gKi8KKyNkZWZpbmUgSEFWRV9HQUlfU1RSRVJST1IKK30KKyNlbmRpZgorCisKKy8qCisgKiByZXNvbHZlcl9lcnJvcigpIGNhbGxzIGZhaWxmKCkgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbWVzc2FnZSBhZnRlciBhIHJlc29sdmUKKyAqIGVycm9yCisgKi8KKworc3RhdGljIHZvaWQgcmVzb2x2ZXJfZXJyb3Ioc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICpob3N0X29yX3Byb3h5KQoreworICBmYWlsZihjb25uLT5kYXRhLCAiQ291bGQgbm90IHJlc29sdmUgJXM6ICVzOyAlcyIsIGhvc3Rfb3JfcHJveHksCisgICAgICAgIGNvbm4tPmFzeW5jLmhvc3RuYW1lLAorI2lmZGVmIEhBVkVfR0FJX1NUUkVSUk9SCisgICAgICAgIC8qIE5ldFdhcmUgZG9lc24ndCBoYXZlIGdhaV9zdHJlcnJvciBhbmQgb24gV2luZG93cyBpdCBpc24ndCBkZWVtZWQKKyAgICAgICAgICAgdGhyZWFkLXNhZmUgKi8KKyAgICAgICAgZ2FpX3N0cmVycm9yKGNvbm4tPmFzeW5jLnN0YXR1cykKKyNlbHNlCisgICAgICAgIEN1cmxfc3RyZXJyb3IoY29ubiwgY29ubi0+YXN5bmMuc3RhdHVzKQorI2VuZGlmCisgICAgKTsKK30KKworLyoKKyAqIEN1cmxfcmVzb2x2ZXJfd2FpdF9yZXNvbHYoKQorICoKKyAqIHdhaXRzIGZvciBhIHJlc29sdmUgdG8gZmluaXNoLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBhdm9pZGVkIHNpbmNlIHVzaW5nCisgKiB0aGlzIHJpc2sgZ2V0dGluZyB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvICJoYW5nIi4KKyAqCisgKiBJZiAnZW50cnknIGlzIG5vbi1OVUxMLCBtYWtlIGl0IHBvaW50IHRvIHRoZSByZXNvbHZlZCBkbnMgZW50cnkKKyAqCisgKiBUaGlzIGlzIHRoZSB2ZXJzaW9uIGZvciByZXNvbHZlcy1pbi1hLXRocmVhZC4KKyAqLworQ1VSTGNvZGUgQ3VybF9yZXNvbHZlcl93YWl0X3Jlc29sdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmVudHJ5KQoreworICBzdHJ1Y3QgdGhyZWFkX2RhdGEgICAqdGQgPSAoc3RydWN0IHRocmVhZF9kYXRhKikgY29ubi0+YXN5bmMub3Nfc3BlY2lmaWM7CisgIENVUkxjb2RlIHJjID0gQ1VSTEVfT0s7CisKKyAgREVCVUdBU1NFUlQoY29ubiAmJiB0ZCk7CisKKyAgLyogd2FpdCBmb3IgdGhlIHRocmVhZCB0byByZXNvbHZlIHRoZSBuYW1lICovCisgIGlmKEN1cmxfdGhyZWFkX2pvaW4oJnRkLT50aHJlYWRfaG5kKSkKKyAgICByYyA9IGdldGFkZHJpbmZvX2NvbXBsZXRlKGNvbm4pOworICBlbHNlCisgICAgREVCVUdBU1NFUlQoMCk7CisKKyAgY29ubi0+YXN5bmMuZG9uZSA9IFRSVUU7CisKKyAgaWYoZW50cnkpCisgICAgKmVudHJ5ID0gY29ubi0+YXN5bmMuZG5zOworCisgIGlmKCFjb25uLT5hc3luYy5kbnMpIHsKKyAgICAvKiBhIG5hbWUgd2FzIG5vdCByZXNvbHZlZCAqLworICAgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KSB7CisgICAgICByZXNvbHZlcl9lcnJvcihjb25uLCAicHJveHkiKTsKKyAgICAgIHJjID0gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlc29sdmVyX2Vycm9yKGNvbm4sICJob3N0Iik7CisgICAgICByYyA9IENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOworICAgIH0KKyAgfQorCisgIGRlc3Ryb3lfYXN5bmNfZGF0YSgmY29ubi0+YXN5bmMpOworCisgIGlmKCFjb25uLT5hc3luYy5kbnMpCisgICAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7CisKKyAgcmV0dXJuIChyYyk7Cit9CisKKy8qCisgKiBDdXJsX3Jlc29sdmVyX2lzX3Jlc29sdmVkKCkgaXMgY2FsbGVkIHJlcGVhdGVkbHkgdG8gY2hlY2sgaWYgYSBwcmV2aW91cworICogbmFtZSByZXNvbHZlIHJlcXVlc3QgaGFzIGNvbXBsZXRlZC4gSXQgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRvIHRpbWUtb3V0IGlmCisgKiB0aGUgb3BlcmF0aW9uIHNlZW1zIHRvIHRha2UgdG9vIGxvbmcuCisgKi8KK0NVUkxjb2RlIEN1cmxfcmVzb2x2ZXJfaXNfcmVzb2x2ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKiplbnRyeSkKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgdGhyZWFkX2RhdGEgICAqdGQgPSAoc3RydWN0IHRocmVhZF9kYXRhKikgY29ubi0+YXN5bmMub3Nfc3BlY2lmaWM7CisgIGludCBkb25lID0gMDsKKworICAqZW50cnkgPSBOVUxMOworCisgIGlmKCF0ZCkgeworICAgIERFQlVHQVNTRVJUKHRkKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CisgIH0KKworICBDdXJsX211dGV4X2FjcXVpcmUodGQtPnRzZC5tdHgpOworICBkb25lID0gdGQtPnRzZC5kb25lOworICBDdXJsX211dGV4X3JlbGVhc2UodGQtPnRzZC5tdHgpOworCisgIGlmKGRvbmUpIHsKKyAgICBnZXRhZGRyaW5mb19jb21wbGV0ZShjb25uKTsKKyAgICBkZXN0cm95X2FzeW5jX2RhdGEoJmNvbm4tPmFzeW5jKTsKKworICAgIGlmKCFjb25uLT5hc3luYy5kbnMpIHsKKyAgICAgIHJlc29sdmVyX2Vycm9yKGNvbm4sICJob3N0Iik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CisgICAgfQorICAgICplbnRyeSA9IGNvbm4tPmFzeW5jLmRuczsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBwb2xsIGZvciBuYW1lIGxvb2t1cCBkb25lIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiB1cCB0byAyNTBtcyAqLworICAgIGludCBlbGFwc2VkID0gQ3VybF90dmRpZmYoQ3VybF90dm5vdygpLCBkYXRhLT5wcm9ncmVzcy50X3N0YXJ0c2luZ2xlKTsKKyAgICBpZihlbGFwc2VkIDwgMCkKKyAgICAgIGVsYXBzZWQgPSAwOworCisgICAgaWYodGQtPnBvbGxfaW50ZXJ2YWwgPT0gMCkKKyAgICAgIC8qIFN0YXJ0IGF0IDFtcyBwb2xsIGludGVydmFsICovCisgICAgICB0ZC0+cG9sbF9pbnRlcnZhbCA9IDE7CisgICAgZWxzZSBpZihlbGFwc2VkID49IHRkLT5pbnRlcnZhbF9lbmQpCisgICAgICAvKiBCYWNrLW9mZiBleHBvbmVudGlhbGx5IGlmIGxhc3QgaW50ZXJ2YWwgZXhwaXJlZCAgKi8KKyAgICAgIHRkLT5wb2xsX2ludGVydmFsICo9IDI7CisKKyAgICBpZih0ZC0+cG9sbF9pbnRlcnZhbCA+IDI1MCkKKyAgICAgIHRkLT5wb2xsX2ludGVydmFsID0gMjUwOworCisgICAgdGQtPmludGVydmFsX2VuZCA9IGVsYXBzZWQgKyB0ZC0+cG9sbF9pbnRlcnZhbDsKKyAgICBDdXJsX2V4cGlyZShjb25uLT5kYXRhLCB0ZC0+cG9sbF9pbnRlcnZhbCk7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK2ludCBDdXJsX3Jlc29sdmVyX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQoreworICAodm9pZCljb25uOworICAodm9pZClzb2NrczsKKyAgKHZvaWQpbnVtc29ja3M7CisgIHJldHVybiAwOworfQorCisjaWZuZGVmIEhBVkVfR0VUQUREUklORk8KKy8qCisgKiBDdXJsX2dldGFkZHJpbmZvKCkgLSBmb3IgcGxhdGZvcm1zIHdpdGhvdXQgZ2V0YWRkcmluZm8KKyAqLworQ3VybF9hZGRyaW5mbyAqQ3VybF9yZXNvbHZlcl9nZXRhZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKK3sKKyAgc3RydWN0IGluX2FkZHIgaW47CisKKyAgKndhaXRwID0gMDsgLyogZGVmYXVsdCB0byBzeW5jaHJvbm91cyByZXNwb25zZSAqLworCisgIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmaW4pID4gMCkKKyAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCisgICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVULCAmaW4sIGhvc3RuYW1lLCBwb3J0KTsKKworICAvKiBmaXJlIHVwIGEgbmV3IHJlc29sdmVyIHRocmVhZCEgKi8KKyAgaWYoaW5pdF9yZXNvbHZlX3RocmVhZChjb25uLCBob3N0bmFtZSwgcG9ydCwgTlVMTCkpIHsKKyAgICAqd2FpdHAgPSAxOyAvKiBleHBlY3QgYXN5bmNocm9ub3VzIHJlc3BvbnNlICovCisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICAvKiBmYWxsLWJhY2sgdG8gYmxvY2tpbmcgdmVyc2lvbiAqLworICByZXR1cm4gQ3VybF9pcHY0X3Jlc29sdmVfcihob3N0bmFtZSwgcG9ydCk7Cit9CisKKyNlbHNlIC8qICFIQVZFX0dFVEFERFJJTkZPICovCisKKy8qCisgKiBDdXJsX3Jlc29sdmVyX2dldGFkZHJpbmZvKCkgLSBmb3IgZ2V0YWRkcmluZm8KKyAqLworQ3VybF9hZGRyaW5mbyAqQ3VybF9yZXNvbHZlcl9nZXRhZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCkKK3sKKyAgc3RydWN0IGFkZHJpbmZvIGhpbnRzOworICBzdHJ1Y3QgaW5fYWRkciBpbjsKKyAgQ3VybF9hZGRyaW5mbyAqcmVzOworICBpbnQgZXJyb3I7CisgIGNoYXIgc2J1ZltOSV9NQVhTRVJWXTsKKyAgaW50IHBmID0gUEZfSU5FVDsKKyNpZmRlZiBDVVJMUkVTX0lQVjYKKyAgc3RydWN0IGluNl9hZGRyIGluNjsKKyNlbmRpZiAvKiBDVVJMUkVTX0lQVjYgKi8KKworICAqd2FpdHAgPSAwOyAvKiBkZWZhdWx0IHRvIHN5bmNocm9ub3VzIHJlc3BvbnNlICovCisKKyAgLyogRmlyc3QgY2hlY2sgaWYgdGhpcyBpcyBhbiBJUHY0IGFkZHJlc3Mgc3RyaW5nICovCisgIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmaW4pID4gMCkKKyAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCisgICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVULCAmaW4sIGhvc3RuYW1lLCBwb3J0KTsKKworI2lmZGVmIENVUkxSRVNfSVBWNgorICAvKiBjaGVjayBpZiB0aGlzIGlzIGFuIElQdjYgYWRkcmVzcyBzdHJpbmcgKi8KKyAgaWYoQ3VybF9pbmV0X3B0b24gKEFGX0lORVQ2LCBob3N0bmFtZSwgJmluNikgPiAwKQorICAgIC8qIFRoaXMgaXMgYW4gSVB2NiBhZGRyZXNzIGxpdGVyYWwgKi8KKyAgICByZXR1cm4gQ3VybF9pcDJhZGRyKEFGX0lORVQ2LCAmaW42LCBob3N0bmFtZSwgcG9ydCk7CisKKyAgLyoKKyAgICogQ2hlY2sgaWYgYSBsaW1pdGVkIG5hbWUgcmVzb2x2ZSBoYXMgYmVlbiByZXF1ZXN0ZWQuCisgICAqLworICBzd2l0Y2goY29ubi0+aXBfdmVyc2lvbikgeworICBjYXNlIENVUkxfSVBSRVNPTFZFX1Y0OgorICAgIHBmID0gUEZfSU5FVDsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX0lQUkVTT0xWRV9WNjoKKyAgICBwZiA9IFBGX0lORVQ2OworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIHBmID0gUEZfVU5TUEVDOworICAgIGJyZWFrOworICB9CisKKyAgaWYoKHBmICE9IFBGX0lORVQpICYmICFDdXJsX2lwdjZ3b3JrcygpKQorICAgIC8qIHRoZSBzdGFjayBzZWVtcyB0byBiZSBhIG5vbi1pcHY2IG9uZSAqLworICAgIHBmID0gUEZfSU5FVDsKKworI2VuZGlmIC8qIENVUkxSRVNfSVBWNiAqLworCisgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworICBoaW50cy5haV9mYW1pbHkgPSBwZjsKKyAgaGludHMuYWlfc29ja3R5cGUgPSBjb25uLT5zb2NrdHlwZTsKKworICBzbnByaW50ZihzYnVmLCBzaXplb2Yoc2J1ZiksICIlZCIsIHBvcnQpOworCisgIC8qIGZpcmUgdXAgYSBuZXcgcmVzb2x2ZXIgdGhyZWFkISAqLworICBpZihpbml0X3Jlc29sdmVfdGhyZWFkKGNvbm4sIGhvc3RuYW1lLCBwb3J0LCAmaGludHMpKSB7CisgICAgKndhaXRwID0gMTsgLyogZXhwZWN0IGFzeW5jaHJvbm91cyByZXNwb25zZSAqLworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgLyogZmFsbC1iYWNrIHRvIGJsb2NraW5nIHZlcnNpb24gKi8KKyAgaW5mb2YoY29ubi0+ZGF0YSwgImluaXRfcmVzb2x2ZV90aHJlYWQoKSBmYWlsZWQgZm9yICVzOyAlc1xuIiwKKyAgICAgICAgaG9zdG5hbWUsIEN1cmxfc3RyZXJyb3IoY29ubiwgRVJSTk8pKTsKKworICBlcnJvciA9IEN1cmxfZ2V0YWRkcmluZm9fZXgoaG9zdG5hbWUsIHNidWYsICZoaW50cywgJnJlcyk7CisgIGlmKGVycm9yKSB7CisgICAgaW5mb2YoY29ubi0+ZGF0YSwgImdldGFkZHJpbmZvKCkgZmFpbGVkIGZvciAlczolZDsgJXNcbiIsCisgICAgICAgICAgaG9zdG5hbWUsIHBvcnQsIEN1cmxfc3RyZXJyb3IoY29ubiwgU09DS0VSUk5PKSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgcmV0dXJuIHJlczsKK30KKworI2VuZGlmIC8qICFIQVZFX0dFVEFERFJJTkZPICovCisKK0NVUkxjb2RlIEN1cmxfc2V0X2Ruc19zZXJ2ZXJzKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc2VydmVycykKK3sKKyAgKHZvaWQpZGF0YTsKKyAgKHZvaWQpc2VydmVyczsKKyAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKKworfQorCisjZW5kaWYgLyogQ1VSTFJFU19USFJFQURFRCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2FzeW4uaCBiL2N1cmwtNy4yNS4wL2xpYi9hc3luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdjMWI4OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9hc3luLmgKQEAgLTAsMCArMSwxNjggQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfQVNZTl9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0FTWU5fSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorI2luY2x1ZGUgImN1cmxfYWRkcmluZm8uaCIKKworc3RydWN0IGFkZHJpbmZvOworc3RydWN0IGhvc3RlbnQ7CitzdHJ1Y3QgU2Vzc2lvbkhhbmRsZTsKK3N0cnVjdCBjb25uZWN0ZGF0YTsKK3N0cnVjdCBDdXJsX2Ruc19lbnRyeTsKKworLyoKKyAqIFRoaXMgaGVhZGVyIGRlZmluZXMgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgaW50ZXJuYWwgYXN5bmNoIHJlc29sdmVyIGludGVyZmFjZS4KKyAqIEFsbCBhc3luY2ggcmVzb2x2ZXJzIG5lZWQgdG8gcHJvdmlkZSB0aGVzZSBmdW5jdGlvbnMuCisgKiBhc3luLWFyZXMuYyBhbmQgYXN5bi10aHJlYWQuYyBhcmUgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIGFzeW5jaAorICogcmVzb2x2ZXIgYmFja2VuZHMuCisgKi8KKworLyoKKyAqIEN1cmxfcmVzb2x2ZXJfZ2xvYmFsX2luaXQoKQorICoKKyAqIENhbGxlZCBmcm9tIGN1cmxfZ2xvYmFsX2luaXQoKSB0byBpbml0aWFsaXplIGdsb2JhbCByZXNvbHZlciBlbnZpcm9ubWVudC4KKyAqIFJldHVybmluZyBhbnl0aGluZyBlbHNlIHRoYW4gQ1VSTEVfT0sgZmFpbHMgY3VybF9nbG9iYWxfaW5pdCgpLgorICovCitpbnQgQ3VybF9yZXNvbHZlcl9nbG9iYWxfaW5pdCh2b2lkKTsKKworLyoKKyAqIEN1cmxfcmVzb2x2ZXJfZ2xvYmFsX2NsZWFudXAoKQorICogQ2FsbGVkIGZyb20gY3VybF9nbG9iYWxfY2xlYW51cCgpIHRvIGRlc3Ryb3kgZ2xvYmFsIHJlc29sdmVyIGVudmlyb25tZW50LgorICovCit2b2lkIEN1cmxfcmVzb2x2ZXJfZ2xvYmFsX2NsZWFudXAodm9pZCk7CisKKy8qCisgKiBDdXJsX3Jlc29sdmVyX2luaXQoKQorICogQ2FsbGVkIGZyb20gY3VybF9lYXN5X2luaXQoKSAtPiBDdXJsX29wZW4oKSB0byBpbml0aWFsaXplIHJlc29sdmVyCisgKiBVUkwtc3RhdGUgc3BlY2lmaWMgZW52aXJvbm1lbnQgKCdyZXNvbHZlcicgbWVtYmVyIG9mIHRoZSBVcmxTdGF0ZQorICogc3RydWN0dXJlKS4gIFNob3VsZCBmaWxsIHRoZSBwYXNzZWQgcG9pbnRlciBieSB0aGUgaW5pdGlhbGl6ZWQgaGFuZGxlci4KKyAqIFJldHVybmluZyBhbnl0aGluZyBlbHNlIHRoYW4gQ1VSTEVfT0sgZmFpbHMgY3VybF9lYXN5X2luaXQoKSB3aXRoIHRoZQorICogY29ycmVzcG9uZGVudCBjb2RlLgorICovCitDVVJMY29kZSBDdXJsX3Jlc29sdmVyX2luaXQodm9pZCAqKnJlc29sdmVyKTsKKworLyoKKyAqIEN1cmxfcmVzb2x2ZXJfY2xlYW51cCgpCisgKiBDYWxsZWQgZnJvbSBjdXJsX2Vhc3lfY2xlYW51cCgpIC0+IEN1cmxfY2xvc2UoKSB0byBjbGVhbnVwIHJlc29sdmVyCisgKiBVUkwtc3RhdGUgc3BlY2lmaWMgZW52aXJvbm1lbnQgKCdyZXNvbHZlcicgbWVtYmVyIG9mIHRoZSBVcmxTdGF0ZQorICogc3RydWN0dXJlKS4gIFNob3VsZCBkZXN0cm95IHRoZSBoYW5kbGVyIGFuZCBmcmVlIGFsbCByZXNvdXJjZXMgY29ubmVjdGVkIHRvCisgKiBpdC4KKyAqLwordm9pZCBDdXJsX3Jlc29sdmVyX2NsZWFudXAodm9pZCAqcmVzb2x2ZXIpOworCisvKgorICogQ3VybF9yZXNvbHZlcl9kdXBoYW5kbGUoKQorICogQ2FsbGVkIGZyb20gY3VybF9lYXN5X2R1cGhhbmRsZSgpIHRvIGR1cGxpY2F0ZSByZXNvbHZlciBVUkwtc3RhdGUgc3BlY2lmaWMKKyAqIGVudmlyb25tZW50ICgncmVzb2x2ZXInIG1lbWJlciBvZiB0aGUgVXJsU3RhdGUgc3RydWN0dXJlKS4gIFNob3VsZAorICogZHVwbGljYXRlIHRoZSAnZnJvbScgaGFuZGxlIGFuZCBwYXNzIHRoZSByZXN1bHRpbmcgaGFuZGxlIHRvIHRoZSAndG8nCisgKiBwb2ludGVyLiAgUmV0dXJuaW5nIGFueXRoaW5nIGVsc2UgdGhhbiBDVVJMRV9PSyBjYXVzZXMgZmFpbGVkCisgKiBjdXJsX2Vhc3lfZHVwaGFuZGxlKCkgY2FsbC4KKyAqLworaW50IEN1cmxfcmVzb2x2ZXJfZHVwaGFuZGxlKHZvaWQgKip0bywgdm9pZCAqZnJvbSk7CisKKy8qCisgKiBDdXJsX3Jlc29sdmVyX2NhbmNlbCgpLgorICoKKyAqIEl0IGlzIGNhbGxlZCBmcm9tIGluc2lkZSBvdGhlciBmdW5jdGlvbnMgdG8gY2FuY2VsIGN1cnJlbnRseSBwZXJmb3JtaW5nCisgKiByZXNvbHZlciByZXF1ZXN0LiBTaG91bGQgYWxzbyBmcmVlIGFueSB0ZW1wb3JhcnkgcmVzb3VyY2VzIGFsbG9jYXRlZCB0bworICogcGVyZm9ybSBhIHJlcXVlc3QuCisgKi8KK3ZvaWQgQ3VybF9yZXNvbHZlcl9jYW5jZWwoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKworLyogQ3VybF9yZXNvbHZlcl9nZXRzb2NrKCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBtdWx0aV9nZXRzb2NrKCkgZnVuY3Rpb24uICAnc29jaycgaXMgYQorICogcG9pbnRlciB0byBhbiBhcnJheSB0byBob2xkIHRoZSBmaWxlIGRlc2NyaXB0b3JzLCB3aXRoICdudW1zb2NrJyBiZWluZyB0aGUKKyAqIHNpemUgb2YgdGhhdCBhcnJheSAoaW4gbnVtYmVyIG9mIGVudHJpZXMpLiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvCisgKiByZXR1cm4gYml0bWFzayBpbmRpY2F0aW5nIHdoYXQgZmlsZSBkZXNjcmlwdG9ycyAocmVmZXJyaW5nIHRvIGFycmF5IGluZGV4ZXMKKyAqIGluIHRoZSAnc29jaycgYXJyYXkpIHRvIHdhaXQgZm9yLCByZWFkL3dyaXRlLgorICovCitpbnQgQ3VybF9yZXNvbHZlcl9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKworLyoKKyAqIEN1cmxfcmVzb2x2ZXJfaXNfcmVzb2x2ZWQoKQorICoKKyAqIENhbGxlZCByZXBlYXRlZGx5IHRvIGNoZWNrIGlmIGEgcHJldmlvdXMgbmFtZSByZXNvbHZlIHJlcXVlc3QgaGFzCisgKiBjb21wbGV0ZWQuIEl0IHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0byB0aW1lLW91dCBpZiB0aGUgb3BlcmF0aW9uIHNlZW1zIHRvCisgKiB0YWtlIHRvbyBsb25nLgorICoKKyAqIFJldHVybnMgbm9ybWFsIENVUkxjb2RlIGVycm9ycy4KKyAqLworQ1VSTGNvZGUgQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmRucyk7CisKKy8qCisgKiBDdXJsX3Jlc29sdmVyX3dhaXRfcmVzb2x2KCkKKyAqCisgKiB3YWl0cyBmb3IgYSByZXNvbHZlIHRvIGZpbmlzaC4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgYXZvaWRlZCBzaW5jZSB1c2luZworICogdGhpcyByaXNrIGdldHRpbmcgdGhlIG11bHRpIGludGVyZmFjZSB0byAiaGFuZyIuCisgKgorICogSWYgJ2VudHJ5JyBpcyBub24tTlVMTCwgbWFrZSBpdCBwb2ludCB0byB0aGUgcmVzb2x2ZWQgZG5zIGVudHJ5CisgKgorICogUmV0dXJucyBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVCBpZiB0aGUgaG9zdCB3YXMgbm90IHJlc29sdmVkLCBhbmQKKyAqIENVUkxFX09QRVJBVElPTl9USU1FRE9VVCBpZiBhIHRpbWUtb3V0IG9jY3VycmVkLgorCisgKi8KK0NVUkxjb2RlIEN1cmxfcmVzb2x2ZXJfd2FpdF9yZXNvbHYoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKipkbnNlbnRyeSk7CisKKy8qCisgKiBDdXJsX3Jlc29sdmVyX2dldGFkZHJpbmZvKCkgLSB3aGVuIHVzaW5nIHRoaXMgcmVzb2x2ZXIKKyAqCisgKiBSZXR1cm5zIG5hbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIGhvc3RuYW1lIGFuZCBwb3J0IG51bWJlci4gSWYKKyAqIHN1Y2Nlc3NmdWwsIHRoZSAnaG9zdGVudCcgaXMgcmV0dXJuZWQgYW5kIHRoZSBmb3J0aCBhcmd1bWVudCB3aWxsIHBvaW50IHRvCisgKiBtZW1vcnkgd2UgbmVlZCB0byBmcmVlIGFmdGVyIHVzZS4gVGhhdCBtZW1vcnkgKk1VU1QqIGJlIGZyZWVkIHdpdGgKKyAqIEN1cmxfZnJlZWFkZHJpbmZvKCksIG5vdGhpbmcgZWxzZS4KKyAqCisgKiBFYWNoIHJlc29sdmVyIGJhY2tlbmQgbXVzdCBvZiBjb3Vyc2UgbWFrZSBzdXJlIHRvIHJldHVybiBkYXRhIGluIHRoZQorICogY29ycmVjdCBmb3JtYXQgdG8gY29tcGx5IHdpdGggdGhpcy4KKyAqLworQ3VybF9hZGRyaW5mbyAqQ3VybF9yZXNvbHZlcl9nZXRhZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3YWl0cCk7CisKKyNpZm5kZWYgQ1VSTFJFU19BU1lOQ0gKKy8qIGNvbnZlcnQgdGhlc2UgZnVuY3Rpb25zIGlmIGFuIGFzeW5jaCByZXNvbHZlciBpc24ndCB1c2VkICovCisjZGVmaW5lIEN1cmxfcmVzb2x2ZXJfY2FuY2VsKHgpIEN1cmxfbm9wX3N0bXQKKyNkZWZpbmUgQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZCh4LHkpIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUCisjZGVmaW5lIEN1cmxfcmVzb2x2ZXJfd2FpdF9yZXNvbHYoeCx5KSBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVAorI2RlZmluZSBDdXJsX3Jlc29sdmVyX2dldHNvY2soeCx5LHopIDAKKyNkZWZpbmUgQ3VybF9yZXNvbHZlcl9kdXBoYW5kbGUoeCx5KSBDVVJMRV9PSworI2RlZmluZSBDdXJsX3Jlc29sdmVyX2luaXQoeCkgQ1VSTEVfT0sKKyNkZWZpbmUgQ3VybF9yZXNvbHZlcl9nbG9iYWxfaW5pdCgpIENVUkxFX09LCisjZGVmaW5lIEN1cmxfcmVzb2x2ZXJfZ2xvYmFsX2NsZWFudXAoKSBDdXJsX25vcF9zdG10CisjZGVmaW5lIEN1cmxfcmVzb2x2ZXJfY2xlYW51cCh4KSBDdXJsX25vcF9zdG10CisjZW5kaWYKKworI2lmZGVmIENVUkxSRVNfQVNZTkNICisjZGVmaW5lIEN1cmxfcmVzb2x2ZXJfYXN5bmNoKCkgMQorI2Vsc2UKKyNkZWZpbmUgQ3VybF9yZXNvbHZlcl9hc3luY2goKSAwCisjZW5kaWYKKworCisvKioqKioqKioqKiBlbmQgb2YgZ2VuZXJpYyByZXNvbHZlciBpbnRlcmZhY2UgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqLworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0FTWU5fSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2F4dGxzLmMgYi9jdXJsLTcuMjUuMC9saWIvYXh0bHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzdhZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2F4dGxzLmMKQEAgLTAsMCArMSw0OTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRGlyZWNUVgorICogY29udGFjdDogRXJpYyBIdSA8ZWh1QGRpcmVjdHYuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFNvdXJjZSBmaWxlIGZvciBhbGwgYXhUTFMtc3BlY2lmaWMgY29kZSBmb3IgdGhlIFRMUy9TU0wgbGF5ZXIuIE5vIGNvZGUKKyAqIGJ1dCBzc2xnZW4uYyBzaG91bGQgZXZlciBjYWxsIG9yIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfQVhUTFMKKyNpbmNsdWRlIDxheFRMUy9zc2wuaD4KKyNpbmNsdWRlICJheHRscy5oIgorCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisjaW5jbHVkZSAic3NsZ2VuLmgiCisjaW5jbHVkZSAicGFyc2VkYXRlLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLworI2luY2x1ZGUgInNlbGVjdC5oIgorI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogU1NMX3JlYWQgaXMgb3BpZWQgZnJvbSBheFRMUyBjb21wYXQgbGF5ZXIgKi8KK3N0YXRpYyBpbnQgU1NMX3JlYWQoU1NMICpzc2wsIHZvaWQgKmJ1ZiwgaW50IG51bSkKK3sKKyAgdWludDhfdCAqcmVhZF9idWY7CisgIGludCByZXQ7CisKKyAgd2hpbGUoKHJldCA9IHNzbF9yZWFkKHNzbCwgJnJlYWRfYnVmKSkgPT0gU1NMX09LKTsKKworICBpZihyZXQgPiBTU0xfT0spIHsKKyAgICBtZW1jcHkoYnVmLCByZWFkX2J1ZiwgcmV0ID4gbnVtID8gbnVtIDogcmV0KTsKKyAgfQorCisgIHJldHVybiByZXQ7Cit9CisKKy8qIEdsb2JhbCBheFRMUyBpbml0LCBjYWxsZWQgZnJvbSBDdXJsX3NzbF9pbml0KCkgKi8KK2ludCBDdXJsX2F4dGxzX2luaXQodm9pZCkKK3sKKy8qIGF4VExTIGhhcyBubyBnbG9iYWwgaW5pdC4gIEV2ZXJ5dGhpbmcgaXMgZG9uZSB0aHJvdWdoIFNTTCBhbmQgU1NMX0NUWAorICogc3RydWN0cyBzdG9yZWQgaW4gY29ubmVjdGRhdGEgc3RydWN0dXJlLiAgUGVyaGFwcyBjYW4gbW92ZSB0byBheHRscy5oLgorICovCisgIHJldHVybiAxOworfQorCitpbnQgQ3VybF9heHRsc19jbGVhbnVwKHZvaWQpCit7CisgIC8qIGF4VExTIGhhcyBubyBnbG9iYWwgY2xlYW51cC4gIFBlcmhhcHMgY2FuIG1vdmUgdGhpcyB0byBheHRscy5oLiAqLworICByZXR1cm4gMTsKK30KKworc3RhdGljIENVUkxjb2RlIG1hcF9lcnJvcl90b19jdXJsKGludCBheHRsc19lcnIpCit7CisgIHN3aXRjaCAoYXh0bHNfZXJyKSB7CisgIGNhc2UgU1NMX0VSUk9SX05PVF9TVVBQT1JURUQ6CisgIGNhc2UgU1NMX0VSUk9SX0lOVkFMSURfVkVSU0lPTjoKKyAgY2FzZSAtNzA6ICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCB2ZXJzaW9uIGFsZXJ0IGZyb20gc2VydmVyICovCisgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOworICAgIGJyZWFrOworICBjYXNlIFNTTF9FUlJPUl9OT19DSVBIRVI6CisgICAgcmV0dXJuIENVUkxFX1NTTF9DSVBIRVI7CisgICAgYnJlYWs7CisgIGNhc2UgU1NMX0VSUk9SX0JBRF9DRVJUSUZJQ0FURTogLyogdGhpcyBtYXkgYmUgYmFkIHNlcnZlciBjZXJ0IHRvbyAqLworICBjYXNlIFNTTF9FUlJPUl9OT19DRVJUX0RFRklORUQ6CisgIGNhc2UgLTQyOiAgICAgICAgICAgICAgICAgICAgICAgLyogYmFkIGNlcnRpZmljYXRlIGFsZXJ0IGZyb20gc2VydmVyICovCisgIGNhc2UgLTQzOiAgICAgICAgICAgICAgICAgICAgICAgLyogdW5zdXBwb3J0ZWQgY2VydCBhbGVydCBmcm9tIHNlcnZlciAqLworICBjYXNlIC00NDogICAgICAgICAgICAgICAgICAgICAgIC8qIGNlcnQgcmV2b2tlZCBhbGVydCBmcm9tIHNlcnZlciAqLworICBjYXNlIC00NTogICAgICAgICAgICAgICAgICAgICAgIC8qIGNlcnQgZXhwaXJlZCBhbGVydCBmcm9tIHNlcnZlciAqLworICBjYXNlIC00NjogICAgICAgICAgICAgICAgICAgICAgIC8qIGNlcnQgdW5rbm93biBhbGVydCBmcm9tIHNlcnZlciAqLworICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CisgICAgYnJlYWs7CisgIGNhc2UgU1NMX1g1MDlfRVJST1IoWDUwOV9OT1RfT0spOgorICBjYXNlIFNTTF9YNTA5X0VSUk9SKFg1MDlfVkZZX0VSUk9SX05PX1RSVVNURURfQ0VSVCk6CisgIGNhc2UgU1NMX1g1MDlfRVJST1IoWDUwOV9WRllfRVJST1JfQkFEX1NJR05BVFVSRSk6CisgIGNhc2UgU1NMX1g1MDlfRVJST1IoWDUwOV9WRllfRVJST1JfTk9UX1lFVF9WQUxJRCk6CisgIGNhc2UgU1NMX1g1MDlfRVJST1IoWDUwOV9WRllfRVJST1JfRVhQSVJFRCk6CisgIGNhc2UgU1NMX1g1MDlfRVJST1IoWDUwOV9WRllfRVJST1JfU0VMRl9TSUdORUQpOgorICBjYXNlIFNTTF9YNTA5X0VSUk9SKFg1MDlfVkZZX0VSUk9SX0lOVkFMSURfQ0hBSU4pOgorICBjYXNlIFNTTF9YNTA5X0VSUk9SKFg1MDlfVkZZX0VSUk9SX1VOU1VQUE9SVEVEX0RJR0VTVCk6CisgIGNhc2UgU1NMX1g1MDlfRVJST1IoWDUwOV9JTlZBTElEX1BSSVZfS0VZKToKKyAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworICAgIGJyZWFrOworICBjYXNlIC00ODogICAgICAgICAgICAgICAgICAgICAgIC8qIHVua25vd24gY2EgYWxlcnQgZnJvbSBzZXJ2ZXIgKi8KKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVDsKKyAgICBicmVhazsKKyAgY2FzZSAtNDk6ICAgICAgICAgICAgICAgICAgICAgICAvKiBhY2Nlc3MgZGVuaWVkIGFsZXJ0IGZyb20gc2VydmVyICovCisgICAgcmV0dXJuIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOworICAgIGJyZWFrOworICBjYXNlIFNTTF9FUlJPUl9DT05OX0xPU1Q6CisgIGNhc2UgU1NMX0VSUk9SX1NPQ0tfU0VUVVBfRkFJTFVSRToKKyAgY2FzZSBTU0xfRVJST1JfSU5WQUxJRF9IQU5EU0hBS0U6CisgIGNhc2UgU1NMX0VSUk9SX0lOVkFMSURfUFJPVF9NU0c6CisgIGNhc2UgU1NMX0VSUk9SX0lOVkFMSURfSE1BQzoKKyAgY2FzZSBTU0xfRVJST1JfSU5WQUxJRF9TRVNTSU9OOgorICBjYXNlIFNTTF9FUlJPUl9JTlZBTElEX0tFWTogICAgIC8qIGl0J3MgdG9vIGJhZCB0aGlzIGRvZXNuJ3QgbWFwIGJldHRlciAqLworICBjYXNlIFNTTF9FUlJPUl9GSU5JU0hFRF9JTlZBTElEOgorICBjYXNlIFNTTF9FUlJPUl9OT19DTElFTlRfUkVOT0c6CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyBDdXJsX3JlY3YgYXh0bHNfcmVjdjsKK3N0YXRpYyBDdXJsX3NlbmQgYXh0bHNfc2VuZDsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBUQ1AgY29ubmVjdCBoYXMgY29tcGxldGVkLiBTZXR1cCB0aGUgVExTCisgKiBsYXllciBhbmQgZG8gYWxsIG5lY2Vzc2FyeSBtYWdpYy4KKyAqLworQ1VSTGNvZGUKK0N1cmxfYXh0bHNfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQorCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgU1NMX0NUWCAqc3NsX2N0eDsKKyAgU1NMICpzc2w7CisgIGludCBjZXJ0X3R5cGVzW10gPSB7U1NMX09CSl9YNTA5X0NFUlQsIFNTTF9PQkpfUEtDUzEyLCAwfTsKKyAgaW50IGtleV90eXBlc1tdID0ge1NTTF9PQkpfUlNBX0tFWSwgU1NMX09CSl9QS0NTOCwgU1NMX09CSl9QS0NTMTIsIDB9OworICBpbnQgaSwgc3NsX2Zjbl9yZXR1cm47CisgIGNvbnN0IHVpbnQ4X3QgKnNzbF9zZXNzaW9uaWQ7CisgIHNpemVfdCBzc2xfaWRzaXplOworICBjb25zdCBjaGFyICp4NTA5OworCisgIC8qIEFzc3VtaW5nIHVzZXJzIHdpbGwgbm90IGNvbXBpbGUgaW4gY3VzdG9tIGtleS9jZXJ0IHRvIGF4VExTICovCisgIHVpbnQzMl90IGNsaWVudF9vcHRpb24gPSBTU0xfTk9fREVGQVVMVF9LRVl8U1NMX1NFUlZFUl9WRVJJRllfTEFURVI7CisKKyAgaWYoY29ubi0+c3NsW3NvY2tpbmRleF0uc3RhdGUgPT0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUpCisgICAgLyogdG8gbWFrZSB1cyB0b2xlcmFudCBhZ2FpbnN0IGJlaW5nIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBmb3IgdGhlCisgICAgICAgc2FtZSBjb25uZWN0aW9uICovCisgICAgcmV0dXJuIENVUkxFX09LOworCisgIC8qIGF4VExTIG9ubHkgc3VwcG9ydHMgVExTdjEgKi8KKyAgLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIGJlZW4gdG9sZCB0byB1c2UgYW4gZXhwbGljaXQgU1NML1RMUyB2ZXJzaW9uICovCisgIHN3aXRjaChkYXRhLT5zZXQuc3NsLnZlcnNpb24pIHsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgZmFpbGYoZGF0YSwgImF4VExTIG9ubHkgc3VwcG9ydHMgVExTdjEiKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKworI2lmZGVmICBBWFRMU0RFQlVHCisgIGNsaWVudF9vcHRpb24gfD0gU1NMX0RJU1BMQVlfU1RBVEVTIHwgU1NMX0RJU1BMQVlfUlNBIHwgU1NMX0RJU1BMQVlfQ0VSVFM7CisjZW5kaWYgLyogQVhUTFNERUJVRyAqLworCisgIC8qIEFsbG9jYXRlIGFuIFNTTF9DVFggc3RydWN0ICovCisgIHNzbF9jdHggPSBzc2xfY3R4X25ldyhjbGllbnRfb3B0aW9uLCBTU0xfREVGQVVMVF9DTE5UX1NFU1MpOworICBpZihzc2xfY3R4ID09IE5VTEwpIHsKKyAgICBmYWlsZihkYXRhLCAidW5hYmxlIHRvIGNyZWF0ZSBjbGllbnQgU1NMIGNvbnRleHQiKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICAvKiBMb2FkIHRoZSB0cnVzdGVkIENBIGNlcnQgYnVuZGxlIGZpbGUgKi8KKyAgaWYoZGF0YS0+c2V0LnNzbC5DQWZpbGUpIHsKKyAgICBpZihzc2xfb2JqX2xvYWQoc3NsX2N0eCwgU1NMX09CSl9YNTA5X0NBQ0VSVCwgZGF0YS0+c2V0LnNzbC5DQWZpbGUsIE5VTEwpCisgICAgICAgIT0gU1NMX09LKSB7CisgICAgICBpbmZvZihkYXRhLCAiZXJyb3IgcmVhZGluZyBjYSBjZXJ0IGZpbGUgJXMgXG4iLAorICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5DQWZpbGUpOworICAgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgICAgIEN1cmxfYXh0bHNfY2xvc2UoY29ubiwgc29ja2luZGV4KTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgaW5mb2YoZGF0YSwgImZvdW5kIGNlcnRpZmljYXRlcyBpbiAlc1xuIiwgZGF0YS0+c2V0LnNzbC5DQWZpbGUpOworICB9CisKKyAgLyogZ3Rscy5jIHRhc2tzIHdlJ3JlIHNraXBwaW5nIGZvciBub3c6CisgICAqIDEpIGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdCBjaGVja2luZworICAgKiAyKSBkbnMgbmFtZSBhc3NpZ25tZW50IHRvIGhvc3QKKyAgICogMykgc2V0IHByb3RvY29sIHByaW9yaXR5LiAgYXhUTFMgaXMgVExTdjEgb25seSwgc28gY2FuIHByb2JhYmx5IGlnbm9yZQorICAgKiA0KSBzZXQgY2VydGlmaWNhdGUgcHJpb3JpdHkuICBheFRMUyBpZ25vcmVzIHR5cGUgYW5kIHNlbmRzIGNlcnRzIGluCisgICAqICBvcmRlciBhZGRlZC4gIGNhbiBwcm9iYWJseSBpZ25vcmUgdGhpcy4KKyAgICovCisKKyAgLyogTG9hZCBjbGllbnQgY2VydGlmaWNhdGUgKi8KKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0pIHsKKyAgICBpPTA7CisgICAgLyogSW5zdGVhZCBvZiB0cnlpbmcgdG8gYW5hbHl6ZSBjZXJ0IHR5cGUgaGVyZSwgbGV0IGF4VExTIHRyeSB0aGVtIGFsbC4gKi8KKyAgICB3aGlsZShjZXJ0X3R5cGVzW2ldICE9IDApIHsKKyAgICAgIHNzbF9mY25fcmV0dXJuID0gc3NsX29ial9sb2FkKHNzbF9jdHgsIGNlcnRfdHlwZXNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSwgTlVMTCk7CisgICAgICBpZihzc2xfZmNuX3JldHVybiA9PSBTU0xfT0spIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgInN1Y2Nlc3NmdWxseSByZWFkIGNlcnQgZmlsZSAlcyBcbiIsCisgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpKys7CisgICAgfQorICAgIC8qIFRyaWVkIGFsbCBjZXJ0IHR5cGVzLCBub25lIHdvcmtlZC4gKi8KKyAgICBpZihjZXJ0X3R5cGVzW2ldID09IDApIHsKKyAgICAgIGZhaWxmKGRhdGEsICIlcyBpcyBub3QgeDUwOSBvciBwa2NzMTIgZm9ybWF0IiwKKyAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdKTsKKyAgICAgIEN1cmxfYXh0bHNfY2xvc2UoY29ubiwgc29ja2luZGV4KTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CisgICAgfQorICB9CisKKyAgLyogTG9hZCBjbGllbnQga2V5LgorICAgICBJZiBhIHBrY3MxMiBmaWxlIHN1Y2Nlc3NmdWxseSBsb2FkZWQgYSBjZXJ0LCB0aGVuIHRoZXJlJ3Mgbm90aGluZyB0byBkbworICAgICBiZWNhdXNlIHRoZSBrZXkgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuICovCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0gJiYgY2VydF90eXBlc1tpXSAhPSBTU0xfT0JKX1BLQ1MxMikgeworICAgIGk9MDsKKyAgICAvKiBJbnN0ZWFkIG9mIHRyeWluZyB0byBhbmFseXplIGtleSB0eXBlIGhlcmUsIGxldCBheFRMUyB0cnkgdGhlbSBhbGwuICovCisgICAgd2hpbGUoa2V5X3R5cGVzW2ldICE9IDApIHsKKyAgICAgIHNzbF9mY25fcmV0dXJuID0gc3NsX29ial9sb2FkKHNzbF9jdHgsIGtleV90eXBlc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0sIE5VTEwpOworICAgICAgaWYoc3NsX2Zjbl9yZXR1cm4gPT0gU1NMX09LKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJzdWNjZXNzZnVsbHkgcmVhZCBrZXkgZmlsZSAlcyBcbiIsCisgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0pOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGkrKzsKKyAgICB9CisgICAgLyogVHJpZWQgYWxsIGtleSB0eXBlcywgbm9uZSB3b3JrZWQuICovCisgICAgaWYoa2V5X3R5cGVzW2ldID09IDApIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlOiAlcyBpcyBub3QgYSBzdXBwb3J0ZWQga2V5IGZpbGUiLAorICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSk7CisgICAgICBDdXJsX2F4dGxzX2Nsb3NlKGNvbm4sIHNvY2tpbmRleCk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorICB9CisKKyAgLyogZ3Rscy5jIGRvZXMgbW9yZSBoZXJlIHRoYXQgaXMgYmVpbmcgbGVmdCBvdXQgZm9yIG5vdworICAgKiAxKSBzZXQgc2Vzc2lvbiBjcmVkZW50aWFscy4gIGNhbiBwcm9iYWJseSBpZ25vcmUgc2luY2UgYXh0bHMgcHV0cyB0aGlzCisgICAqICAgIGluZm8gaW4gdGhlIHNzbF9jdHggc3RydWN0CisgICAqIDIpIHNldHRpbmcgdXAgY2FsbGJhY2tzLiAgdGhlc2Ugc2VlbSBnbnV0bHMgc3BlY2lmaWMKKyAgICovCisKKyAgLyogSW4gYXhUTFMsIGhhbmRzaGFraW5nIGhhcHBlbnMgaW5zaWRlIHNzbF9jbGllbnRfbmV3LiAqLworICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICh2b2lkICoqKSAmc3NsX3Nlc3Npb25pZCwgJnNzbF9pZHNpemUpKSB7CisgICAgLyogd2UgZ290IGEgc2Vzc2lvbiBpZCwgdXNlIGl0ISAqLworICAgIGluZm9mIChkYXRhLCAiU1NMIHJlLXVzaW5nIHNlc3Npb24gSURcbiIpOworICAgIHNzbCA9IHNzbF9jbGllbnRfbmV3KHNzbF9jdHgsIGNvbm4tPnNvY2tbc29ja2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfc2Vzc2lvbmlkLCAodWludDhfdClzc2xfaWRzaXplKTsKKyAgfQorICBlbHNlCisgICAgc3NsID0gc3NsX2NsaWVudF9uZXcoc3NsX2N0eCwgY29ubi0+c29ja1tzb2NraW5kZXhdLCBOVUxMLCAwKTsKKworICAvKiBDaGVjayB0byBtYWtlIHN1cmUgaGFuZHNoYWtlIHdhcyBvay4gKi8KKyAgc3NsX2Zjbl9yZXR1cm4gPSBzc2xfaGFuZHNoYWtlX3N0YXR1cyhzc2wpOworICBpZihzc2xfZmNuX3JldHVybiAhPSBTU0xfT0spIHsKKyAgICBDdXJsX2F4dGxzX2Nsb3NlKGNvbm4sIHNvY2tpbmRleCk7CisgICAgc3NsX2Rpc3BsYXlfZXJyb3Ioc3NsX2Zjbl9yZXR1cm4pOyAvKiBnb2VzIHRvIHN0ZG91dC4gKi8KKyAgICByZXR1cm4gbWFwX2Vycm9yX3RvX2N1cmwoc3NsX2Zjbl9yZXR1cm4pOworICB9CisgIGluZm9mIChkYXRhLCAiaGFuZHNoYWtlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiIpOworCisgIC8qIEhlcmUsIGd0bHMuYyBnZXRzIHRoZSBwZWVyIGNlcnRpZmljYXRlcyBhbmQgZmFpbHMgb3V0IGRlcGVuZGluZyBvbgorICAgKiBzZXR0aW5ncyBpbiAiZGF0YS4iICBheFRMUyBhcGkgZG9lc24ndCBoYXZlIGdldCBjZXJ0IGNoYWluIGZjbiwgc28gb21pdD8KKyAgICovCisKKyAgLyogVmVyaWZ5IHNlcnZlcidzIGNlcnRpZmljYXRlICovCisgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICAgIGlmKHNzbF92ZXJpZnlfY2VydChzc2wpICE9IFNTTF9PSykgeworICAgICAgQ3VybF9heHRsc19jbG9zZShjb25uLCBzb2NraW5kZXgpOworICAgICAgZmFpbGYoZGF0YSwgInNlcnZlciBjZXJ0IHZlcmlmeSBmYWlsZWQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisgIH0KKyAgZWxzZQorICAgIGluZm9mKGRhdGEsICJcdCBzZXJ2ZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIFNLSVBQRURcbiIpOworCisgIC8qIEhlcmUsIGd0bHMuYyBkb2VzIGlzc3VlciB2ZXJpZmljYXRpb24uIGF4VExTIGhhcyBubyBzdHJhaWdodGZvcndhcmQKKyAgICogZXF1aXZhbGVudCwgc28gb21pdHRpbmcgZm9yIG5vdy4qLworCisgIC8qIFNlZSBpZiBjb21tb24gbmFtZSB3YXMgc2V0IGluIHNlcnZlciBjZXJ0aWZpY2F0ZSAqLworICB4NTA5ID0gc3NsX2dldF9jZXJ0X2RuKHNzbCwgU1NMX1g1MDlfQ0VSVF9DT01NT05fTkFNRSk7CisgIGlmKHg1MDkgPT0gTlVMTCkKKyAgICBpbmZvZihkYXRhLCAiZXJyb3IgZmV0Y2hpbmcgQ04gZnJvbSBjZXJ0XG4iKTsKKworICAvKiBIZXJlLCBndGxzLmMgZG9lcyB0aGUgZm9sbG93aW5nCisgICAqIDEpIHg1MDkgaG9zdG5hbWUgY2hlY2tpbmcgcGVyIFJGQzI4MTguICBheFRMUyBkb2Vzbid0IHN1cHBvcnQgdGhpcywgYnV0CisgICAqICAgIGl0IHNlZW1zIHVzZWZ1bC4gIE9taXR0aW5nIGZvciBub3cuCisgICAqIDIpIGNoZWNrcyBjZXJ0IHZhbGlkaXR5IGJhc2VkIG9uIHRpbWUuICBheFRMUyBkb2VzIHRoaXMgaW4gc3NsX3ZlcmlmeV9jZXJ0CisgICAqIDMpIGRpc3BsYXlzIGEgYnVuY2ggb2YgY2VydCBpbmZvcm1hdGlvbi4gIGF4VExTIGRvZXNuJ3Qgc3VwcG9ydCBtb3N0IG9mCisgICAqICAgIHRoaXMsIGJ1dCBhIGNvdXBsZSBmaWVsZHMgYXJlIGF2YWlsYWJsZS4KKyAgICovCisKKyAgLyogR2VuZXJhbCBob3VzZWtlZXBpbmcgKi8KKyAgY29ubi0+c3NsW3NvY2tpbmRleF0uc3RhdGUgPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZTsKKyAgY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsID0gc3NsOworICBjb25uLT5zc2xbc29ja2luZGV4XS5zc2xfY3R4ID0gc3NsX2N0eDsKKyAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gYXh0bHNfcmVjdjsKKyAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gYXh0bHNfc2VuZDsKKworICAvKiBQdXQgb3VyIGZyZXNobHkgbWludGVkIFNTTCBzZXNzaW9uIGluIGNhY2hlICovCisgIHNzbF9pZHNpemUgPSBzc2xfZ2V0X3Nlc3Npb25faWRfc2l6ZShzc2wpOworICBzc2xfc2Vzc2lvbmlkID0gc3NsX2dldF9zZXNzaW9uX2lkKHNzbCk7CisgIGlmKEN1cmxfc3NsX2FkZHNlc3Npb25pZChjb25uLCAodm9pZCAqKSBzc2xfc2Vzc2lvbmlkLCBzc2xfaWRzaXplKQorICAgICAhPSBDVVJMRV9PSykKKyAgICBpbmZvZiAoZGF0YSwgImZhaWxlZCB0byBhZGQgc2Vzc2lvbiB0byBjYWNoZVxuIik7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKKy8qIHJldHVybiBudW1iZXIgb2Ygc2VudCAobm9uLVNTTCkgYnl0ZXMgKi8KK3N0YXRpYyBzc2l6ZV90IGF4dGxzX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICplcnIpCit7CisgIC8qIHNzbF93cml0ZSgpIHJldHVybnMgJ2ludCcgd2hpbGUgd3JpdGUoKSBhbmQgc2VuZCgpIHJldHVybnMgJ3NpemVfdCcgKi8KKyAgaW50IHJjID0gc3NsX3dyaXRlKGNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbCwgbWVtLCAoaW50KWxlbik7CisKKyAgaW5mb2YoY29ubi0+ZGF0YSwgIiAgYXh0bHNfc2VuZFxuIik7CisKKyAgaWYocmMgPCAwICkgeworICAgICplcnIgPSBtYXBfZXJyb3JfdG9fY3VybChyYyk7CisgICAgcmMgPSAtMTsgLyogZ2VuZXJpYyBlcnJvciBjb2RlIGZvciBzZW5kIGZhaWx1cmUgKi8KKyAgfQorCisgICplcnIgPSBDVVJMRV9PSzsKKyAgcmV0dXJuIHJjOworfQorCit2b2lkIEN1cmxfYXh0bHNfY2xvc2VfYWxsKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICAodm9pZClkYXRhOworICBpbmZvZihkYXRhLCAiICBDdXJsX2F4dGxzX2Nsb3NlX2FsbFxuIik7Cit9CisKK3ZvaWQgQ3VybF9heHRsc19jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworCisgIGluZm9mKGNvbm4tPmRhdGEsICIgIEN1cmxfYXh0bHNfY2xvc2VcbiIpOworICBpZihjb25uc3NsLT5zc2wpIHsKKyAgICAvKiBsaW5lIGZyb20gc3NsdXNlLmM6ICh2b2lkKVNTTF9zaHV0ZG93bihjb25uc3NsLT5zc2wpOworICAgICAgIGF4VExTIGNvbXBhdCBsYXllciBkb2VzIG5vdGhpbmcgZm9yIFNTTF9zaHV0ZG93biAqLworCisgICAgLyogVGhlIGZvbGxvd2luZyBsaW5lIGlzIGZyb20gc3NsdXNlLmMuICBUaGVyZSBzZWVtcyB0byBiZSBubyBheFRMUworICAgICAgIGVxdWl2YWxlbnQuICBzc2xfZnJlZSBhbmQgc3NsX2N0eF9mcmVlIGNsb3NlIHRoaW5ncy4KKyAgICAgICBTU0xfc2V0X2Nvbm5lY3Rfc3RhdGUoY29ubnNzbC0+aGFuZGxlKTsgKi8KKworICAgIHNzbF9mcmVlIChjb25uc3NsLT5zc2wpOworICAgIGNvbm5zc2wtPnNzbCA9IE5VTEw7CisgIH0KKyAgaWYoY29ubnNzbC0+c3NsX2N0eCkgeworICAgIHNzbF9jdHhfZnJlZSAoY29ubnNzbC0+c3NsX2N0eCk7CisgICAgY29ubnNzbC0+c3NsX2N0eCA9IE5VTEw7CisgIH0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHNodXQgZG93biB0aGUgU1NMIGxheWVyIGJ1dCBrZWVwIHRoZQorICogc29ja2V0IG9wZW4gKENDQyAtIENsZWFyIENvbW1hbmQgQ2hhbm5lbCkKKyAqLworaW50IEN1cmxfYXh0bHNfc2h1dGRvd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICAvKiBPdXRsaW5lIHRha2VuIGZyb20gc3NsdXNlLmMgc2luY2UgZnVuY3Rpb25zIGFyZSBpbiBheFRMUyBjb21wYXQgbGF5ZXIuCisgICAgIGF4VExTJ3MgZXJyb3Igc2V0IGlzIG11Y2ggc21hbGxlciwgc28gYSBsb3Qgb2YgZXJyb3ItaGFuZGxpbmcgd2FzIHJlbW92ZWQuCisgICAqLworICBpbnQgcmV0dmFsID0gMDsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgY2hhciBidWZbMTIwXTsgLyogV2Ugd2lsbCB1c2UgdGhpcyBmb3IgdGhlIE9wZW5TU0wgZXJyb3IgYnVmZmVyLCBzbyBpdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgYXQgbGVhc3QgMTIwIGJ5dGVzIGxvbmcuICovCisgIHNzaXplX3QgbnJlYWQ7CisKKyAgaW5mb2YoY29ubi0+ZGF0YSwgIiAgQ3VybF9heHRsc19zaHV0ZG93blxuIik7CisKKyAgLyogVGhpcyBoYXMgb25seSBiZWVuIHRlc3RlZCBvbiB0aGUgcHJvZnRwZCBzZXJ2ZXIsIGFuZCB0aGUgbW9kX3RscyBjb2RlCisgICAgIHNlbmRzIGEgY2xvc2Ugbm90aWZ5IGFsZXJ0IHdpdGhvdXQgd2FpdGluZyBmb3IgYSBjbG9zZSBub3RpZnkgYWxlcnQgaW4KKyAgICAgcmVzcG9uc2UuIFRodXMgd2Ugd2FpdCBmb3IgYSBjbG9zZSBub3RpZnkgYWxlcnQgZnJvbSB0aGUgc2VydmVyLCBidXQKKyAgICAgd2UgZG8gbm90IHNlbmQgb25lLiBMZXQncyBob3BlIG90aGVyIHNlcnZlcnMgZG8gdGhlIHNhbWUuLi4gKi8KKworICAvKiBheFRMUyBjb21wYXQgbGF5ZXIgZG9lcyBub3RoaW5nIGZvciBTU0xfc2h1dGRvd24sIHNvIHdlIGRvIG5vdGhpbmcgdG9vCisgIGlmKGRhdGEtPnNldC5mdHBfY2NjID09IENVUkxGVFBTU0xfQ0NDX0FDVElWRSkKKyAgICAgICh2b2lkKVNTTF9zaHV0ZG93bihjb25uc3NsLT5zc2wpOworICAqLworCisgIGlmKGNvbm5zc2wtPnNzbCkgeworICAgIGludCB3aGF0ID0gQ3VybF9zb2NrZXRfcmVhZHkoY29ubi0+c29ja1tzb2NraW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTF9TT0NLRVRfQkFELCBTU0xfU0hVVERPV05fVElNRU9VVCk7CisgICAgaWYod2hhdCA+IDApIHsKKyAgICAgIC8qIFNvbWV0aGluZyB0byByZWFkLCBsZXQncyBkbyBpdCBhbmQgaG9wZSB0aGF0IGl0IGlzIHRoZSBjbG9zZQorICAgICAgICAgbm90aWZ5IGFsZXJ0IGZyb20gdGhlIHNlcnZlciAqLworICAgICAgbnJlYWQgPSAoc3NpemVfdClTU0xfcmVhZChjb25uLT5zc2xbc29ja2luZGV4XS5zc2wsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJ1ZikpOworCisgICAgICBpZihucmVhZCA8IFNTTF9PSykgeworICAgICAgICBmYWlsZihkYXRhLCAiY2xvc2Ugbm90aWZ5IGFsZXJ0IG5vdCByZWNlaXZlZCBkdXJpbmcgc2h1dGRvd24iKTsKKyAgICAgICAgcmV0dmFsID0gLTE7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoMCA9PSB3aGF0KSB7CisgICAgICAvKiB0aW1lb3V0ICovCisgICAgICBmYWlsZihkYXRhLCAiU1NMIHNodXRkb3duIHRpbWVvdXQiKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBhbnl0aGluZyB0aGF0IGdldHMgaGVyZSBpcyBmYXRhbGx5IGJhZCAqLworICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CisgICAgICByZXR2YWwgPSAtMTsKKyAgICB9CisKKyAgICBzc2xfZnJlZSAoY29ubnNzbC0+c3NsKTsKKyAgICBjb25uc3NsLT5zc2wgPSBOVUxMOworICB9CisgIHJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGF4dGxzX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSwgICAgICAgICAgICAgICAgICAvKiBzb2NrZXRpbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsICAgICAgICAgICAgICAgIC8qIHN0b3JlIHJlYWQgZGF0YSBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLCAgICAgICAgLyogbWF4IGFtb3VudCB0byByZWFkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICplcnIpCit7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtudW1dOworICBzc2l6ZV90IHJldCA9IDA7CisKKyAgaW5mb2YoY29ubi0+ZGF0YSwgIiAgYXh0bHNfcmVjdlxuIik7CisKKyAgaWYoY29ubnNzbCkgeworICAgIHJldCA9IChzc2l6ZV90KVNTTF9yZWFkKGNvbm4tPnNzbFtudW1dLnNzbCwgYnVmLCAoaW50KWJ1ZmZlcnNpemUpOworCisgICAgLyogYXhUTFMgaXNuJ3QgdGVycmlibHkgZ2VuZXJvdXMgYWJvdXQgZXJyb3IgcmVwb3J0aW5nICovCisgICAgLyogV2l0aCBwYXRjaGVkIGF4VExTLCBTU0xfQ0xPU0VfTk9USUZZPS0zLiAgSGFyZC1jb2RpbmcgdW50aWwgYXhUTFMKKyAgICAgICB0ZWFtIGFwcHJvdmVzIHByb3Bvc2VkIGZpeC4gKi8KKyAgICBpZihyZXQgPT0gLTMgKSB7CisgICAgICBDdXJsX2F4dGxzX2Nsb3NlKGNvbm4sIG51bSk7CisgICAgfQorICAgIGVsc2UgaWYocmV0IDwgMCkgeworICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgImF4VExTIHJlY3YgZXJyb3IgKCVkKSIsIChpbnQpcmV0KTsKKyAgICAgICplcnIgPSBtYXBfZXJyb3JfdG9fY3VybChyZXQpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorCisgICplcnIgPSBDVVJMRV9PSzsKKyAgcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHVybiBjb2RlczoKKyAqICAgICAxIG1lYW5zIHRoZSBjb25uZWN0aW9uIGlzIHN0aWxsIGluIHBsYWNlCisgKiAgICAgMCBtZWFucyB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQKKyAqICAgIC0xIG1lYW5zIHRoZSBjb25uZWN0aW9uIHN0YXR1cyBpcyB1bmtub3duCisgKi8KK2ludCBDdXJsX2F4dGxzX2NoZWNrX2N4bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIC8qIHNzbHVzZS5jIGxpbmU6IHJjID0gU1NMX3BlZWsoY29ubi0+c3NsW0ZJUlNUU09DS0VUXS5zc2wsICh2b2lkKikmYnVmLCAxKTsKKyAgICAgYXhUTFMgY29tcGF0IGxheWVyIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IGFyZ3VtZW50LCBzbyBjb25uZWN0aW9uIGlzCisgICAgIGFsd2F5cyBhbGl2ZT8gKi8KKworICBpbmZvZihjb25uLT5kYXRhLCAiICBDdXJsX2F4dGxzX2NoZWNrX2N4blxuIik7CisgICByZXR1cm4gMTsgLyogY29ubmVjdGlvbiBzdGlsbCBpbiBwbGFjZSAqLworfQorCit2b2lkIEN1cmxfYXh0bHNfc2Vzc2lvbl9mcmVlKHZvaWQgKnB0cikKK3sKKyAgKHZvaWQpcHRyOworICAvKiBmcmVlIHRoZSBJRCAqLworICAvKiBib3RoIHNzbHVzZS5jIGFuZCBndGxzLmMgZG8gc29tZXRoaW5nIGhlcmUsIGJ1dCBheFRMUydzIE9wZW5TU0wKKyAgICAgY29tcGF0aWJpbGl0eSBsYXllciBkb2VzIG5vdGhpbmcsIHNvIHdlIGRvIG5vdGhpbmcgdG9vLiAqLworfQorCitzaXplX3QgQ3VybF9heHRsc192ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisgIHJldHVybiBzbnByaW50ZihidWZmZXIsIHNpemUsICJheFRMUy8lcyIsIHNzbF92ZXJzaW9uKCkpOworfQorCisjZW5kaWYgLyogVVNFX0FYVExTICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvYXh0bHMuaCBiL2N1cmwtNy4yNS4wL2xpYi9heHRscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2N2Y5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvYXh0bHMuaApAQCAtMCwwICsxLDYyIEBACisjaWZuZGVmIF9fQVhUTFNfSAorI2RlZmluZSBfX0FYVExTX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRGlyZWNUVgorICogY29udGFjdDogRXJpYyBIdSA8ZWh1QGRpcmVjdHYuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIFVTRV9BWFRMUworI2luY2x1ZGUgImN1cmwvY3VybC5oIgorI2luY2x1ZGUgInVybGRhdGEuaCIKKworaW50IEN1cmxfYXh0bHNfaW5pdCh2b2lkKTsKK2ludCBDdXJsX2F4dGxzX2NsZWFudXAodm9pZCk7CitDVVJMY29kZSBDdXJsX2F4dGxzX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KTsKKworLyogdGVsbCBheFRMUyB0byBjbG9zZSBkb3duIGFsbCBvcGVuIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb25uZWN0aW9ucyAoYW5kCisgICB0aHVzIHNlc3Npb24gSUQgY2FjaGluZyBldGMpICovCit2b2lkIEN1cmxfYXh0bHNfY2xvc2VfYWxsKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKTsKKworIC8qIGNsb3NlIGEgU1NMIGNvbm5lY3Rpb24gKi8KK3ZvaWQgQ3VybF9heHRsc19jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpOworCit2b2lkIEN1cmxfYXh0bHNfc2Vzc2lvbl9mcmVlKHZvaWQgKnB0cik7CitzaXplX3QgQ3VybF9heHRsc192ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworaW50IEN1cmxfYXh0bHNfc2h1dGRvd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KTsKK2ludCBDdXJsX2F4dGxzX2NoZWNrX2N4bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCisvKiBBUEkgc2V0dXAgZm9yIGF4VExTICovCisjZGVmaW5lIGN1cmxzc2xfaW5pdCBDdXJsX2F4dGxzX2luaXQKKyNkZWZpbmUgY3VybHNzbF9jbGVhbnVwIEN1cmxfYXh0bHNfY2xlYW51cAorI2RlZmluZSBjdXJsc3NsX2Nvbm5lY3QgQ3VybF9heHRsc19jb25uZWN0CisjZGVmaW5lIGN1cmxzc2xfc2Vzc2lvbl9mcmVlKHgpICBDdXJsX2F4dGxzX3Nlc3Npb25fZnJlZSh4KQorI2RlZmluZSBjdXJsc3NsX2Nsb3NlX2FsbCBDdXJsX2F4dGxzX2Nsb3NlX2FsbAorI2RlZmluZSBjdXJsc3NsX2Nsb3NlIEN1cmxfYXh0bHNfY2xvc2UKKyNkZWZpbmUgY3VybHNzbF9zaHV0ZG93bih4LHkpIEN1cmxfYXh0bHNfc2h1dGRvd24oeCx5KQorI2RlZmluZSBjdXJsc3NsX3NldF9lbmdpbmUoeCx5KSAoeD14LCB5PXksIENVUkxFX05PVF9CVUlMVF9JTikKKyNkZWZpbmUgY3VybHNzbF9zZXRfZW5naW5lX2RlZmF1bHQoeCkgKHg9eCwgQ1VSTEVfTk9UX0JVSUxUX0lOKQorI2RlZmluZSBjdXJsc3NsX2VuZ2luZXNfbGlzdCh4KSAoeD14LCAoc3RydWN0IGN1cmxfc2xpc3QgKilOVUxMKQorI2RlZmluZSBjdXJsc3NsX3ZlcnNpb24gQ3VybF9heHRsc192ZXJzaW9uCisjZGVmaW5lIGN1cmxzc2xfY2hlY2tfY3huKHgpIEN1cmxfYXh0bHNfY2hlY2tfY3huKHgpCisjZGVmaW5lIGN1cmxzc2xfZGF0YV9wZW5kaW5nKHgseSkgKHg9eCwgeT15LCAwKQorCisjZW5kaWYgLyogVVNFX0FYVExTICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9iYXNlNjQuYyBiL2N1cmwtNy4yNS4wL2xpYi9iYXNlNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQ2YzA5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2Jhc2U2NC5jCkBAIC0wLDAgKzEsMjQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nICovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAidXJsZGF0YS5oIiAvKiBmb3IgdGhlIFNlc3Npb25IYW5kbGUgZGVmaW5pdGlvbiAqLworI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAiY3VybF9iYXNlNjQuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgIm5vbi1hc2NpaS5oIgorCisvKiBpbmNsdWRlIG1lbWRlYnVnLmggbGFzdCAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qIC0tLS0gQmFzZTY0IEVuY29kaW5nL0RlY29kaW5nIFRhYmxlIC0tLSAqLworc3RhdGljIGNvbnN0IGNoYXIgdGFibGU2NFtdPQorICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CisKK3N0YXRpYyB2b2lkIGRlY29kZVF1YW50dW0odW5zaWduZWQgY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKQoreworICBjb25zdCBjaGFyICpzLCAqcDsKKyAgdW5zaWduZWQgbG9uZyBpLCB2LCB4ID0gMDsKKworICBmb3IoaSA9IDAsIHMgPSBzcmM7IGkgPCA0OyBpKyssIHMrKykgeworICAgIHYgPSAwOworICAgIHAgPSB0YWJsZTY0OworICAgIHdoaWxlKCpwICYmICgqcCAhPSAqcykpIHsKKyAgICAgIHYrKzsKKyAgICAgIHArKzsKKyAgICB9CisgICAgaWYoKnAgPT0gKnMpCisgICAgICB4ID0gKHggPDwgNikgKyB2OworICAgIGVsc2UgaWYoKnMgPT0gJz0nKQorICAgICAgeCA9ICh4IDw8IDYpOworICB9CisKKyAgZGVzdFsyXSA9IGN1cmx4X3VsdG91Yyh4ICYgMHhGRlVMKTsKKyAgeCA+Pj0gODsKKyAgZGVzdFsxXSA9IGN1cmx4X3VsdG91Yyh4ICYgMHhGRlVMKTsKKyAgeCA+Pj0gODsKKyAgZGVzdFswXSA9IGN1cmx4X3VsdG91Yyh4ICYgMHhGRlVMKTsKK30KKworLyoKKyAqIEN1cmxfYmFzZTY0X2RlY29kZSgpCisgKgorICogR2l2ZW4gYSBiYXNlNjQgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGF0IHNyYywgZGVjb2RlIGl0IGFuZCByZXR1cm4gYQorICogcG9pbnRlciBpbiAqb3V0cHRyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBhcmVhIGhvbGRpbmcgZGVjb2RlZAorICogZGF0YS4gU2l6ZSBvZiBkZWNvZGVkIGRhdGEgaXMgcmV0dXJuZWQgaW4gdmFyaWFibGUgcG9pbnRlZCBieSBvdXRsZW4uCisgKgorICogUmV0dXJucyBDVVJMRV9PSyBvbiBzdWNjZXNzLCBvdGhlcndpc2Ugc3BlY2lmaWMgZXJyb3IgY29kZS4gRnVuY3Rpb24KKyAqIG91dHB1dCBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB2YWxpZCB1bmxlc3MgQ1VSTEVfT0sgaXMgcmV0dXJuZWQuCisgKgorICogV2hlbiBkZWNvZGVkIGRhdGEgbGVuZ3RoIGlzIDAsIHJldHVybnMgTlVMTCBpbiAqb3V0cHRyLgorICoKKyAqIEB1bml0dGVzdDogMTMwMgorICovCitDVVJMY29kZSBDdXJsX2Jhc2U2NF9kZWNvZGUoY29uc3QgY2hhciAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXRwdHIsIHNpemVfdCAqb3V0bGVuKQoreworICBzaXplX3QgbGVuZ3RoID0gMDsKKyAgc2l6ZV90IGVxdWFsc1Rlcm0gPSAwOworICBzaXplX3QgaTsKKyAgc2l6ZV90IG51bVF1YW50dW1zOworICB1bnNpZ25lZCBjaGFyIGxhc3RRdWFudHVtWzNdOworICBzaXplX3QgcmF3bGVuID0gMDsKKyAgdW5zaWduZWQgY2hhciAqbmV3c3RyOworCisgICpvdXRwdHIgPSBOVUxMOworICAqb3V0bGVuID0gMDsKKworICB3aGlsZSgoc3JjW2xlbmd0aF0gIT0gJz0nKSAmJiBzcmNbbGVuZ3RoXSkKKyAgICBsZW5ndGgrKzsKKyAgLyogQSBtYXhpbXVtIG9mIHR3byA9IHBhZGRpbmcgY2hhcmFjdGVycyBpcyBhbGxvd2VkICovCisgIGlmKHNyY1tsZW5ndGhdID09ICc9JykgeworICAgIGVxdWFsc1Rlcm0rKzsKKyAgICBpZihzcmNbbGVuZ3RoK2VxdWFsc1Rlcm1dID09ICc9JykKKyAgICAgIGVxdWFsc1Rlcm0rKzsKKyAgfQorICBudW1RdWFudHVtcyA9IChsZW5ndGggKyBlcXVhbHNUZXJtKSAvIDQ7CisKKyAgLyogRG9uJ3QgYWxsb2NhdGUgYSBidWZmZXIgaWYgdGhlIGRlY29kZWQgbGVuZ3RoIGlzIDAgKi8KKyAgaWYobnVtUXVhbnR1bXMgPT0gMCkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgcmF3bGVuID0gKG51bVF1YW50dW1zICogMykgLSBlcXVhbHNUZXJtOworCisgIC8qIFRoZSBidWZmZXIgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gbWFrZSByb29tIGZvciB0aGUgbGFzdCBxdWFudHVtCisgICh3aGljaCBtYXkgYmUgcGFydGlhbGx5IHRocm93biBvdXQpIGFuZCB0aGUgemVybyB0ZXJtaW5hdG9yLiAqLworICBuZXdzdHIgPSBtYWxsb2MocmF3bGVuKzQpOworICBpZighbmV3c3RyKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgICpvdXRwdHIgPSBuZXdzdHI7CisKKyAgLyogRGVjb2RlIGFsbCBidXQgdGhlIGxhc3QgcXVhbnR1bSAod2hpY2ggbWF5IG5vdCBkZWNvZGUgdG8gYQorICBtdWx0aXBsZSBvZiAzIGJ5dGVzKSAqLworICBmb3IoaSA9IDA7IGkgPCBudW1RdWFudHVtcyAtIDE7IGkrKykgeworICAgIGRlY29kZVF1YW50dW0obmV3c3RyLCBzcmMpOworICAgIG5ld3N0ciArPSAzOyBzcmMgKz0gNDsKKyAgfQorCisgIC8qIFRoaXMgZmluYWwgZGVjb2RlIG1heSBhY3R1YWxseSByZWFkIHNsaWdodGx5IHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyCisgIGlmIHRoZSBpbnB1dCBzdHJpbmcgaXMgbWlzc2luZyBwYWQgYnl0ZXMuICBUaGlzIHdpbGwgYWxtb3N0IGFsd2F5cyBiZQorICBoYXJtbGVzcy4gKi8KKyAgZGVjb2RlUXVhbnR1bShsYXN0UXVhbnR1bSwgc3JjKTsKKyAgZm9yKGkgPSAwOyBpIDwgMyAtIGVxdWFsc1Rlcm07IGkrKykKKyAgICBuZXdzdHJbaV0gPSBsYXN0UXVhbnR1bVtpXTsKKworICBuZXdzdHJbaV0gPSAnXDAnOyAvKiB6ZXJvIHRlcm1pbmF0ZSAqLworCisgICpvdXRsZW4gPSByYXdsZW47IC8qIHJldHVybiBzaXplIG9mIGRlY29kZWQgZGF0YSAqLworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIEN1cmxfYmFzZTY0X2VuY29kZSgpCisgKgorICogR2l2ZW4gYSBwb2ludGVyIHRvIGFuIGlucHV0IGJ1ZmZlciBhbmQgYW4gaW5wdXQgc2l6ZSwgZW5jb2RlIGl0IGFuZAorICogcmV0dXJuIGEgcG9pbnRlciBpbiAqb3V0cHRyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBhcmVhIGhvbGRpbmcKKyAqIGVuY29kZWQgZGF0YS4gU2l6ZSBvZiBlbmNvZGVkIGRhdGEgaXMgcmV0dXJuZWQgaW4gdmFyaWFibGUgcG9pbnRlZCBieQorICogb3V0bGVuLgorICoKKyAqIElucHV0IGxlbmd0aCBvZiAwIGluZGljYXRlcyBpbnB1dCBidWZmZXIgaG9sZHMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcuCisgKgorICogUmV0dXJucyBDVVJMRV9PSyBvbiBzdWNjZXNzLCBvdGhlcndpc2Ugc3BlY2lmaWMgZXJyb3IgY29kZS4gRnVuY3Rpb24KKyAqIG91dHB1dCBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB2YWxpZCB1bmxlc3MgQ1VSTEVfT0sgaXMgcmV0dXJuZWQuCisgKgorICogV2hlbiBlbmNvZGVkIGRhdGEgbGVuZ3RoIGlzIDAsIHJldHVybnMgTlVMTCBpbiAqb3V0cHRyLgorICoKKyAqIEB1bml0dGVzdDogMTMwMgorICovCitDVVJMY29kZSBDdXJsX2Jhc2U2NF9lbmNvZGUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wdXRidWZmLCBzaXplX3QgaW5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvdXRwdHIsIHNpemVfdCAqb3V0bGVuKQoreworICBDVVJMY29kZSBlcnJvcjsKKyAgdW5zaWduZWQgY2hhciBpYnVmWzNdOworICB1bnNpZ25lZCBjaGFyIG9idWZbNF07CisgIGludCBpOworICBpbnQgaW5wdXRwYXJ0czsKKyAgY2hhciAqb3V0cHV0OworICBjaGFyICpiYXNlNjRkYXRhOworICBjaGFyICpjb252YnVmID0gTlVMTDsKKworICBjb25zdCBjaGFyICppbmRhdGEgPSBpbnB1dGJ1ZmY7CisKKyAgKm91dHB0ciA9IE5VTEw7CisgICpvdXRsZW4gPSAwOworCisgIGlmKDAgPT0gaW5zaXplKQorICAgIGluc2l6ZSA9IHN0cmxlbihpbmRhdGEpOworCisgIGJhc2U2NGRhdGEgPSBvdXRwdXQgPSBtYWxsb2MoaW5zaXplKjQvMys0KTsKKyAgaWYoTlVMTCA9PSBvdXRwdXQpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgLyoKKyAgICogVGhlIGJhc2U2NCBkYXRhIG5lZWRzIHRvIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIG5ldHdvcmsgZW5jb2RpbmcKKyAgICogbm90IHRoZSBob3N0IGVuY29kaW5nLiAgQW5kIHdlIGNhbid0IGNoYW5nZSB0aGUgYWN0dWFsIGlucHV0CisgICAqIHNvIHdlIGNvcHkgaXQgdG8gYSBidWZmZXIsIHRyYW5zbGF0ZSBpdCwgYW5kIHVzZSB0aGF0IGluc3RlYWQuCisgICAqLworICBlcnJvciA9IEN1cmxfY29udmVydF9jbG9uZShkYXRhLCBpbmRhdGEsIGluc2l6ZSwgJmNvbnZidWYpOworICBpZihlcnJvcikgeworICAgIGZyZWUob3V0cHV0KTsKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworICBpZihjb252YnVmKQorICAgIGluZGF0YSA9IChjaGFyICopY29udmJ1ZjsKKworICB3aGlsZShpbnNpemUgPiAwKSB7CisgICAgZm9yKGkgPSBpbnB1dHBhcnRzID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgaWYoaW5zaXplID4gMCkgeworICAgICAgICBpbnB1dHBhcnRzKys7CisgICAgICAgIGlidWZbaV0gPSAodW5zaWduZWQgY2hhcikgKmluZGF0YTsKKyAgICAgICAgaW5kYXRhKys7CisgICAgICAgIGluc2l6ZS0tOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBpYnVmW2ldID0gMDsKKyAgICB9CisKKyAgICBvYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICAoKGlidWZbMF0gJiAweEZDKSA+PiAyKTsKKyAgICBvYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgoKGlidWZbMF0gJiAweDAzKSA8PCA0KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGlidWZbMV0gJiAweEYwKSA+PiA0KSk7CisgICAgb2J1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKChpYnVmWzFdICYgMHgwRikgPDwgMikgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpYnVmWzJdICYgMHhDMCkgPj4gNikpOworICAgIG9idWZbM10gPSAodW5zaWduZWQgY2hhcikgICAoaWJ1ZlsyXSAmIDB4M0YpOworCisgICAgc3dpdGNoKGlucHV0cGFydHMpIHsKKyAgICBjYXNlIDE6IC8qIG9ubHkgb25lIGJ5dGUgcmVhZCAqLworICAgICAgc25wcmludGYob3V0cHV0LCA1LCAiJWMlYz09IiwKKyAgICAgICAgICAgICAgIHRhYmxlNjRbb2J1ZlswXV0sCisgICAgICAgICAgICAgICB0YWJsZTY0W29idWZbMV1dKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjogLyogdHdvIGJ5dGVzIHJlYWQgKi8KKyAgICAgIHNucHJpbnRmKG91dHB1dCwgNSwgIiVjJWMlYz0iLAorICAgICAgICAgICAgICAgdGFibGU2NFtvYnVmWzBdXSwKKyAgICAgICAgICAgICAgIHRhYmxlNjRbb2J1ZlsxXV0sCisgICAgICAgICAgICAgICB0YWJsZTY0W29idWZbMl1dKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBzbnByaW50ZihvdXRwdXQsIDUsICIlYyVjJWMlYyIsCisgICAgICAgICAgICAgICB0YWJsZTY0W29idWZbMF1dLAorICAgICAgICAgICAgICAgdGFibGU2NFtvYnVmWzFdXSwKKyAgICAgICAgICAgICAgIHRhYmxlNjRbb2J1ZlsyXV0sCisgICAgICAgICAgICAgICB0YWJsZTY0W29idWZbM11dICk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgb3V0cHV0ICs9IDQ7CisgIH0KKyAgKm91dHB1dCA9ICdcMCc7CisgICpvdXRwdHIgPSBiYXNlNjRkYXRhOyAvKiByZXR1cm4gcG9pbnRlciB0byBuZXcgZGF0YSwgYWxsb2NhdGVkIG1lbW9yeSAqLworCisgIGlmKGNvbnZidWYpCisgICAgZnJlZShjb252YnVmKTsKKworICAqb3V0bGVuID0gc3RybGVuKGJhc2U2NGRhdGEpOyAvKiByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgbmV3IGRhdGEgKi8KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisvKiAtLS0tIEVuZCBvZiBCYXNlNjQgRW5jb2RpbmcgLS0tLSAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2NoZWNrc3JjLnBsIGIvY3VybC03LjI1LjAvbGliL2NoZWNrc3JjLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlmNTA1OGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY2hlY2tzcmMucGwKQEAgLTAsMCArMSwxOTggQEAKKyMhL3Vzci9iaW4vcGVybAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbXkgJG1heF9jb2x1bW4gPSA3OTsKK215ICRpbmRlbnQgPSAyOworCitteSAkd2FybmluZ3M7CitteSAkZXJyb3JzOworbXkgJGZpbGU7CitteSAkZGlyPSIuIjsKK215ICR3bGlzdDsKKworc3ViIGNoZWNrd2FybiB7CisgICAgbXkgKCRudW0sICRjb2wsICRmaWxlLCAkbGluZSwgJG1zZywgJGVycm9yKSA9IEBfOworCisgICAgbXkgJHc9JGVycm9yPyJlcnJvciI6Indhcm5pbmciOworCisgICAgaWYoJHcpIHsKKyAgICAgICAgJHdhcm5pbmdzKys7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAkZXJyb3JzKys7CisgICAgfQorCisgICAgJGNvbCsrOworICAgIHByaW50ICIkZmlsZTokbnVtOiRjb2w6ICR3OiAkbXNnXG4iOworICAgIHByaW50ICIgJGxpbmVcbiI7CisKKyAgICBpZigkY29sIDwgODApIHsKKyAgICAgICAgbXkgJHByZWYgPSAoJyAnIHggJGNvbCk7CisgICAgICAgIHByaW50ICIke3ByZWZ9XlxuIjsKKyAgICB9Cit9CisKKyRmaWxlID0gc2hpZnQgQEFSR1Y7CisKK3doaWxlKDEpIHsKKworICAgIGlmKCRmaWxlID1+IC8tRCguKikvKSB7CisgICAgICAgICRkaXIgPSAkMTsKKyAgICAgICAgJGZpbGUgPSBzaGlmdCBAQVJHVjsKKyAgICAgICAgbmV4dDsKKyAgICB9CisgICAgZWxzaWYoJGZpbGUgPX4gLy1XKC4qKS8pIHsKKyAgICAgICAgJHdsaXN0IC49ICIgJDEgIjsKKyAgICAgICAgJGZpbGUgPSBzaGlmdCBAQVJHVjsKKyAgICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBsYXN0OworfQorCitpZighJGZpbGUpIHsKKyAgICBwcmludCAiY2hlY2tzcmMucGwgW29wdGlvbl0gPGZpbGUxPiBbZmlsZTJdIC4uLlxuIjsKKyAgICBwcmludCAiIE9wdGlvbnM6XG4iOworICAgIHByaW50ICIgIC1EW0RJUl0gICBEaXJlY3RvcnkgdG8gcHJlcGVuZCBmaWxlIG5hbWVzXG4iOworICAgIHByaW50ICIgIC1XW2ZpbGVdICBXaGl0ZWxpc3QgdGhlIGdpdmVuIGZpbGUgLSBpZ25vcmUgYWxsIGl0cyBmbGF3c1xuIjsKKyAgICBleGl0OworfQorCitkbyB7CisgICAgaWYoIiR3bGlzdCIgIX4gLyAkZmlsZSAvKSB7CisgICAgICAgIG15ICRmdWxsbmFtZSA9ICRmaWxlOworICAgICAgICAkZnVsbG5hbWUgPSAiJGRpci8kZmlsZSIgaWYgKCRmdWxsbmFtZSAhfiAnXlwuP1wuPy8nKTsKKyAgICAgICAgc2NhbmZpbGUoJGZ1bGxuYW1lKTsKKyAgICB9CisgICAgJGZpbGUgPSBzaGlmdCBAQVJHVjsKKworfSB3aGlsZSgkZmlsZSk7CisKKworc3ViIHNjYW5maWxlIHsKKyAgICBteSAoJGZpbGUpID0gQF87CisKKyAgICBteSAkbGluZSA9IDE7CisgICAgbXkgJHByZXZsOworICAgIG15ICRsOworICAgIG9wZW4oUiwgIjwkZmlsZSIpIHx8IGRpZSAiZmFpbGVkIHRvIG9wZW4gJGZpbGUiOworCisgICAgbXkgJGNvcHlyaWdodD0wOworCisgICAgd2hpbGUoPFI+KSB7CisgICAgICAgIGNob21wOworICAgICAgICBteSAkbCA9ICRfOworICAgICAgICBteSAkY29sdW1uID0gMDsKKworICAgICAgICAjIGNoZWNrIGZvciBhIGNvcHlyaWdodCBzdGF0ZW1lbnQKKyAgICAgICAgaWYoISRjb3B5cmlnaHQgJiYgKCRsID1+IC9jb3B5cmlnaHQgLiogXGRcZFxkXGQvaSkpIHsKKyAgICAgICAgICAgICRjb3B5cmlnaHQ9MTsKKyAgICAgICAgfQorCisgICAgICAgICMgZGV0ZWN0IGxvbmcgbGluZXMKKyAgICAgICAgaWYobGVuZ3RoKCRsKSA+ICRtYXhfY29sdW1uKSB7CisgICAgICAgICAgICBjaGVja3dhcm4oJGxpbmUsIGxlbmd0aCgkbCksICRmaWxlLCAkbCwgIkxvbmdlciB0aGFuICRtYXhfY29sdW1uIGNvbHVtbnMiKTsKKyAgICAgICAgfQorICAgICAgICAjIGRldGVjdCBUQUIgY2hhcmFjdGVycworICAgICAgICBpZigkbCA9fiAvXiguKilcdC8pIHsKKyAgICAgICAgICAgIGNoZWNrd2FybigkbGluZSwgbGVuZ3RoKCQxKSwgJGZpbGUsICRsLCAiQ29udGFpbnMgVEFCIGNoYXJhY3RlciIsIDEpOworICAgICAgICB9CisgICAgICAgICMgZGV0ZWN0IHRyYWlsaW5nIHdoaXRlIHNwYWNlCisgICAgICAgIGlmKCRsID1+IC9eKC4qKVsgXHRdK1x6LykgeworICAgICAgICAgICAgY2hlY2t3YXJuKCRsaW5lLCBsZW5ndGgoJDEpLCAkZmlsZSwgJGwsICJUcmFpbGluZyB3aGl0ZXNwYWNlIik7CisgICAgICAgIH0KKworICAgICAgICAjIGNoZWNrIHNwYWNlcyBhZnRlciBmb3IvaWYvd2hpbGUKKyAgICAgICAgaWYoJGwgPX4gL14oLiopKGZvcnxpZnx3aGlsZSkgXCgvKSB7CisgICAgICAgICAgICBpZigkMSA9fiAvICpcIy8pIHsKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgYSAjaWYsIHRyZWF0IGl0IGRpZmZlcmVudGx5CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjaGVja3dhcm4oJGxpbmUsIGxlbmd0aCgkMSkrbGVuZ3RoKCQyKSwgJGZpbGUsICRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJDIgd2l0aCBzcGFjZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgIyBjaGVjayBzcGFjZXMgYWZ0ZXIgb3BlbiBwYXJlbiBhZnRlciBmb3IvaWYvd2hpbGUKKyAgICAgICAgaWYoJGwgPX4gL14oLiopKGZvcnxpZnx3aGlsZSlcKCAvKSB7CisgICAgICAgICAgICBpZigkMSA9fiAvICpcIy8pIHsKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgYSAjaWYsIHRyZWF0IGl0IGRpZmZlcmVudGx5CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjaGVja3dhcm4oJGxpbmUsIGxlbmd0aCgkMSkrbGVuZ3RoKCQyKSsxLCAkZmlsZSwgJGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIkMiB3aXRoIHNwYWNlIGZpcnN0IGluIGNvbmRpdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgIyBjaGVjayBmb3IgIn0gZWxzZSIKKyAgICAgICAgaWYoJGwgPX4gL14oLiopXH0gKmVsc2UvKSB7CisgICAgICAgICAgICBjaGVja3dhcm4oJGxpbmUsIGxlbmd0aCgkMSksICRmaWxlLCAkbCwgImVsc2UgYWZ0ZXIgY2xvc2luZyBicmFjZSBvbiBzYW1lIGxpbmUiKTsKKyAgICAgICAgfQorICAgICAgICAjIGNoZWNrIGZvciAiKXsiCisgICAgICAgIGlmKCRsID1+IC9eKC4qKVwpXHsvKSB7CisgICAgICAgICAgICBjaGVja3dhcm4oJGxpbmUsIGxlbmd0aCgkMSkrMSwgJGZpbGUsICRsLCAibWlzc2luZyBzcGFjZSBhZnRlciBjbG9zZSBwYXJlbiIpOworICAgICAgICB9CisKKyAgICAgICAgIyBjaGVjayBmb3Igb3BlbiBicmFjZSBmaXJzdCBvbiBsaW5lIGJ1dCBub3QgZmlyc3QgY29sdW1uCisgICAgICAgICMgb25seSBhbGVydCBpZiBwcmV2aW91cyBsaW5lIGVuZGVkIHdpdGggYSBjbG9zZSBwYXJlbiBhbmQgd2Fzbid0IGEgY3BwCisgICAgICAgICMgbGluZQorICAgICAgICBpZigoKCRwcmV2bCA9fiAvXClcei8pICYmICgkcHJldmwgIX4gL14gKiMvKSkgJiYgKCRsID1+IC9eKCArKVx7LykpIHsKKyAgICAgICAgICAgIGNoZWNrd2FybigkbGluZSwgbGVuZ3RoKCQxKSwgJGZpbGUsICRsLCAiYmFkbHkgcGxhY2VkIG9wZW4gYnJhY2UiKTsKKyAgICAgICAgfQorCisgICAgICAgICMgaWYgdGhlIHByZXZpb3VzIGxpbmUgc3RhcnRzIHdpdGggaWYvd2hpbGUvZm9yIEFORCBlbmRzIHdpdGggYW4gb3BlbgorICAgICAgICAjIGJyYWNlLCBjaGVjayB0aGF0IHRoaXMgbGluZSBpcyBpbmRlbnRlZCAkaW5kZW50IG1vcmUgc3RlcHMsIGlmIG5vdAorICAgICAgICAjIGEgY3BwIGxpbmUKKyAgICAgICAgaWYoJHByZXZsID1+IC9eKCAqKShpZnx3aGlsZXxmb3IpXCguKlx7XHovKSB7CisgICAgICAgICAgICBteSAkZmlyc3QgPSBsZW5ndGgoJDEpOworCisgICAgICAgICAgICAjIHRoaXMgbGluZSBoYXMgc29tZSBjaGFyYWN0ZXIgYmVzaWRlcyBzcGFjZXMKKyAgICAgICAgICAgIGlmKCgkbCAhfiAvXiAqIy8pICYmICgkbCA9fiAvXiggKilbXiBdLykpIHsKKyAgICAgICAgICAgICAgICBteSAkc2Vjb25kID0gbGVuZ3RoKCQxKTsKKyAgICAgICAgICAgICAgICBteSAkZXhwZWN0ID0gJGZpcnN0KyRpbmRlbnQ7CisgICAgICAgICAgICAgICAgaWYoJGV4cGVjdCAhPSAkc2Vjb25kKSB7CisgICAgICAgICAgICAgICAgICAgIG15ICRkaWZmID0gJHNlY29uZCAtICRmaXJzdDsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2t3YXJuKCRsaW5lLCBsZW5ndGgoJDEpLCAkZmlsZSwgJGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGluZGVudGVkICRpbmRlbnQgc3RlcHMsIHVzZXMgJGRpZmYpIik7CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAkbGluZSsrOworICAgICAgICAkcHJldmwgPSAkbDsKKyAgICB9CisKKyAgICBpZighJGNvcHlyaWdodCkgeworICAgICAgICBjaGVja3dhcm4oMSwgMCwgJGZpbGUsICIiLCAiTWlzc2luZyBjb3B5cmlnaHQgc3RhdGVtZW50IiwgMSk7CisgICAgfQorCisgICAgY2xvc2UoUik7CisKK30KKworCitpZigkZXJyb3JzIHx8ICR3YXJuaW5ncykgeworICAgIHByaW50ZiAiY2hlY2tzcmM6ICVkIGVycm9ycyBhbmQgJWQgd2FybmluZ3NcbiIsICRlcnJvcnMsICR3YXJuaW5nczsKKyAgICBleGl0IDU7ICMgcmV0dXJuIGZhaWx1cmUKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jb25maWctYW1pZ2Fvcy5oIGIvY3VybC03LjI1LjAvbGliL2NvbmZpZy1hbWlnYW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ3NGJhOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jb25maWctYW1pZ2Fvcy5oCkBAIC0wLDAgKzEsMTUzIEBACisjaWZuZGVmIExJQkNVUkxfQ09ORklHX0FNSUdBT1NfSAorI2RlZmluZSBMSUJDVVJMX0NPTkZJR19BTUlHQU9TX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgX19BTUlHQV9fIC8qIEFueSBBbWlnYU9TIGZsYXZvdXIgKi8KKworI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9IIDEKKyNkZWZpbmUgSEFWRV9DTE9TRVNPQ0tFVF9DQU1FTCAxCisjZGVmaW5lIEhBVkVfRVJSTk9fSCAxCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxCisjZGVmaW5lIEhBVkVfSU5FVF9BRERSIDEKKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTCAxCisjZGVmaW5lIEhBVkVfSU9DVExTT0NLRVRfQ0FNRUxfRklPTkJJTyAxCisjZGVmaW5lIEhBVkVfTElCQ1JZUFRPIDEKKyNkZWZpbmUgSEFWRV9MSUJTU0wgMQorI2RlZmluZSBIQVZFX0xJQlogMQorI2RlZmluZSBIQVZFX0xPTkdMT05HIDEKKyNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCisjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQorI2RlZmluZSBIQVZFX05FVERCX0ggMQorI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAxCisjZGVmaW5lIEhBVkVfTkVUX0lGX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfQ1JZUFRPX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfRVJSX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfUEVNX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfUlNBX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfU1NMX0ggMQorI2RlZmluZSBIQVZFX09QRU5TU0xfWDUwOV9IIDEKKyNkZWZpbmUgSEFWRV9QRVJST1IgMQorI2RlZmluZSBIQVZFX1BXRF9IIDEKKyNkZWZpbmUgSEFWRV9SQU5EX0VHRCAxCisjZGVmaW5lIEhBVkVfUkFORF9TVEFUVVMgMQorI2RlZmluZSBIQVZFX1NFTEVDVCAxCisjZGVmaW5lIEhBVkVfU0VUSk1QX0ggMQorI2RlZmluZSBIQVZFX1NHVFRZX0ggMQorI2RlZmluZSBIQVZFX1NJR05BTCAxCisjZGVmaW5lIEhBVkVfU0lHTkFMX0ggMQorI2RlZmluZSBIQVZFX1NJR19BVE9NSUNfVCAxCisjZGVmaW5lIEhBVkVfU09DS0VUIDEKKyNkZWZpbmUgSEFWRV9TVFJDQVNFQ01QIDEKKyNkZWZpbmUgSEFWRV9TVFJEVVAgMQorI2RlZmluZSBIQVZFX1NUUkZUSU1FIDEKKyNkZWZpbmUgSEFWRV9TVFJJQ01QIDEKKyNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorI2RlZmluZSBIQVZFX1NUUklOR19IIDEKKyNkZWZpbmUgSEFWRV9TVFJTVFIgMQorI2RlZmluZSBIQVZFX1NUUlVDVF9USU1FVkFMIDEKKyNkZWZpbmUgSEFWRV9TWVNfUEFSQU1fSCAxCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEKKyNkZWZpbmUgSEFWRV9TWVNfU09DS0lPX0ggMQorI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQorI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKKyNkZWZpbmUgSEFWRV9URVJNSU9TX0ggMQorI2RlZmluZSBIQVZFX1RFUk1JT19IIDEKKyNkZWZpbmUgSEFWRV9USU1FX0ggMQorI2RlZmluZSBIQVZFX1VOQU1FIDEKKyNkZWZpbmUgSEFWRV9VTklTVERfSCAxCisjZGVmaW5lIEhBVkVfVVRJTUUgMQorI2RlZmluZSBIQVZFX1VUSU1FX0ggMQorI2RlZmluZSBIQVZFX1dSSVRBQkxFX0FSR1YgMQorI2RlZmluZSBIQVZFX1pMSUJfSCAxCisjZGVmaW5lIEhBVkVfU1lTX0lPQ1RMX0ggMQorCisjZGVmaW5lIE5FRURfTUFMTE9DX0ggMQorCisjZGVmaW5lIFNJWkVPRl9JTlQgNAorI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgorI2RlZmluZSBTSVpFT0ZfU0laRV9UIDQKKworI2RlZmluZSBVU0VfT1BFTlNTTCAxCisjZGVmaW5lIFVTRV9TU0xFQVkgMQorI2RlZmluZSBDVVJMX0RJU0FCTEVfTERBUCAxCisKKworI2RlZmluZSBPUyAiQW1pZ2FPUyIKKworI2RlZmluZSBQQUNLQUdFICJjdXJsIgorI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiY3VybC1idWdAaGF4eC5zZSIKKyNkZWZpbmUgUEFDS0FHRV9OQU1FICJjdXJsIgorI2RlZmluZSBQQUNLQUdFX1NUUklORyAiY3VybCAtIgorI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImN1cmwiCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiLSIKKyNkZWZpbmUgQ1VSTF9DQV9CVU5ETEUgInM6Y3VybC1jYS1idW5kbGUuY3J0IgorCisjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAorI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcxIGludAorI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcyMzQgKGZkX3NldCAqKQorI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkc1IChzdHJ1Y3QgdGltZXZhbCAqKQorCisjZGVmaW5lIFNURENfSEVBREVSUyAxCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCisKKyNkZWZpbmUgaW5fYWRkcl90IGludAorCisjaWZuZGVmIE9fUkRPTkxZCisjIGRlZmluZSBPX1JET05MWSAweDAwMDAKKyNlbmRpZgorCisjZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8gMQorI2RlZmluZSBHRVROQU1FSU5GT19RVUFMX0FSRzEgY29uc3QKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcxIHN0cnVjdCBzb2NrYWRkciAqCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHMiBpbnQKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBzaXplX3QKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc3IGludAorCisjZGVmaW5lIEhBVkVfUkVDViAxCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxIGxvbmcKKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzIgY2hhciAqCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkczIGxvbmcKKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzQgbG9uZworI2RlZmluZSBSRUNWX1RZUEVfUkVUViBsb25nCisKKyNkZWZpbmUgSEFWRV9SRUNWRlJPTSAxCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBsb25nCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMiBjaGFyCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBsb25nCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNCBsb25nCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSBzdHJ1Y3Qgc29ja2FkZHIKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc2IGxvbmcKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9SRVRWIGxvbmcKKworI2RlZmluZSBIQVZFX1NFTkQgMQorI2RlZmluZSBTRU5EX1RZUEVfQVJHMSBpbnQKKyNkZWZpbmUgU0VORF9RVUFMX0FSRzIgY29uc3QKKyNkZWZpbmUgU0VORF9UWVBFX0FSRzIgY2hhciAqCisjZGVmaW5lIFNFTkRfVFlQRV9BUkczIGludAorI2RlZmluZSBTRU5EX1RZUEVfQVJHNCBpbnQKKyNkZWZpbmUgU0VORF9UWVBFX1JFVFYgaW50CisKKyNlbmRpZiAvKiBfX0FNSUdBX18gKi8KKyNlbmRpZiAvKiBMSUJDVVJMX0NPTkZJR19BTUlHQU9TX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jb25maWctZG9zLmggYi9jdXJsLTcuMjUuMC9saWIvY29uZmlnLWRvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YzQyMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY29uZmlnLWRvcy5oCkBAIC0wLDAgKzEsMTg4IEBACisjaWZuZGVmIEhFQURFUl9DT05GSUdfRE9TX0gKKyNkZWZpbmUgSEVBREVSX0NPTkZJR19ET1NfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgbGliL2NvbmZpZy1kb3MuaCAtIEhhbmQgY3JhZnRlZCBjb25maWcgZmlsZSBmb3IgRE9TICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjaWYgZGVmaW5lZChESkdQUCkKKyAgI2RlZmluZSBPUyAgIk1TRE9TL2RqZ3BwIgorI2VsaWYgZGVmaW5lZChfX0hJR0hDX18pCisgICNkZWZpbmUgT1MgICJNU0RPUy9IaWdoQyIKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisgICNkZWZpbmUgT1MgICJNU0RPUy9XYXRjb20iCisjZWxzZQorICAjZGVmaW5lIE9TICAiTVNET1MvPyIKKyNlbmRpZgorCisjZGVmaW5lIFBBQ0tBR0UgICJjdXJsIgorCisjZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0ggICAgICAgMQorI2RlZmluZSBIQVZFX0VSUk5PX0ggICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9GQ05UTF9IICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gICAgICAgMQorI2RlZmluZSBIQVZFX0dFVE5BTUVJTkZPICAgICAgIDEKKyNkZWZpbmUgSEFWRV9HRVRQUk9UT0JZTkFNRSAgICAxCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZICAgICAgMQorI2RlZmluZSBIQVZFX0lPX0ggICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9JT0NUTCAgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfSU9DVExfRklPTkJJTyAgICAgMQorI2RlZmluZSBIQVZFX0lPQ1RMU09DS0VUICAgICAgIDEKKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPICAgMQorI2RlZmluZSBIQVZFX0xJTUlUU19IICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9MT0NBTEVfSCAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfTE9OR0xPTkcgICAgICAgICAgMQorI2RlZmluZSBIQVZFX01FTU9SWV9IICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9ORVREQl9IICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IICAgICAgMQorI2RlZmluZSBIQVZFX05FVElORVRfVENQX0ggICAgIDEKKyNkZWZpbmUgSEFWRV9ORVRfSUZfSCAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfUFJPQ0VTU19IICAgICAgICAgMQorI2RlZmluZSBIQVZFX1JFQ1YgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9SRUNWRlJPTSAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU0VMRUNUICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NFTkQgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TRVRKTVBfSCAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU0VUTE9DQUxFICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NFVE1PREUgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TSUdOQUwgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU09DS0VUICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NQTkVHTyAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TVFJEVVAgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU1RSSUNNUCAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NUUlRPTEwgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVZBTCAgICAxCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lONl9BRERSICAgMQorI2RlZmluZSBIQVZFX1NZU19JT0NUTF9IICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0ggICAgICAxCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAgICAgICAgMQorI2RlZmluZSBIQVZFX1NZU19UWVBFU19IICAgICAgIDEKKyNkZWZpbmUgSEFWRV9URVJNSU9TX0ggICAgICAgICAxCisjZGVmaW5lIEhBVkVfVElNRV9IICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1VOSVNURF9IICAgICAgICAgIDEKKworI2RlZmluZSBORUVEX01BTExPQ19IICAgICAgICAgIDEKKworI2RlZmluZSBSRVRTSUdUWVBFICAgICAgICAgICAgIHZvaWQKKyNkZWZpbmUgU0laRU9GX0lOVCAgICAgICAgICAgICA0CisjZGVmaW5lIFNJWkVPRl9MT05HX0RPVUJMRSAgICAgMTYKKyNkZWZpbmUgU0laRU9GX1NIT1JUICAgICAgICAgICAyCisjZGVmaW5lIFNJWkVPRl9TSVpFX1QgICAgICAgICAgNAorI2RlZmluZSBTVERDX0hFQURFUlMgICAgICAgICAgIDEKKyNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FICAgICAxCisKKy8qIFF1YWxpZmllcnMgZm9yIHNlbmQoKSwgcmVjdigpLCByZWN2ZnJvbSgpIGFuZCBnZXRuYW1laW5mbygpLiAqLworCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcxICAgICAgICAgaW50CisjZGVmaW5lIFNFTkRfUVVBTF9BUkcyICAgICAgICAgY29uc3QKKyNkZWZpbmUgU0VORF9UWVBFX0FSRzIgICAgICAgICB2b2lkICoKKyNkZWZpbmUgU0VORF9UWVBFX0FSRzMgICAgICAgICBpbnQKKyNkZWZpbmUgU0VORF9UWVBFX0FSRzQgICAgICAgICBpbnQKKyNkZWZpbmUgU0VORF9UWVBFX1JFVFYgICAgICAgICBpbnQKKworI2RlZmluZSBSRUNWX1RZUEVfQVJHMSAgICAgICAgIGludAorI2RlZmluZSBSRUNWX1RZUEVfQVJHMiAgICAgICAgIHZvaWQgKgorI2RlZmluZSBSRUNWX1RZUEVfQVJHMyAgICAgICAgIGludAorI2RlZmluZSBSRUNWX1RZUEVfQVJHNCAgICAgICAgIGludAorI2RlZmluZSBSRUNWX1RZUEVfUkVUViAgICAgICAgIGludAorCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSAgICAgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMiAgICAgdm9pZAorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzMgICAgIGludAorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgICAgIGludAorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzUgICAgIHN0cnVjdCBzb2NrYWRkcgorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzYgICAgIGludAorI2RlZmluZSBSRUNWRlJPTV9UWVBFX1JFVFYgICAgIGludAorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzJfSVNfVk9JRCAxCisKKyNkZWZpbmUgR0VUTkFNRUlORk9fUVVBTF9BUkcxICBjb25zdAorI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzEgIHN0cnVjdCBzb2NrYWRkciAqCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHMiAgaW50CisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYgaW50CisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNyAgaW50CisKKyNkZWZpbmUgQlNECisKKy8qIENVUkxERUJVRyBkZWZpbml0aW9uIGVuYWJsZXMgbWVtb3J5IHRyYWNraW5nICovCisvKiAjZGVmaW5lIENVUkxERUJVRyAqLworCisvKiBVU0VfWkxJQiBvbiBjbWQtbGluZSAqLworI2lmZGVmIFVTRV9aTElCCisgICNkZWZpbmUgSEFWRV9aTElCX0ggICAgICAgICAgICAxCisgICNkZWZpbmUgSEFWRV9MSUJaICAgICAgICAgICAgICAxCisjZW5kaWYKKworLyogVVNFX1NTTEVBWSBvbiBjbWQtbGluZSAqLworI2lmZGVmIFVTRV9TU0xFQVkKKyAgI2RlZmluZSBIQVZFX0NSWVBUT19DTEVBTlVQX0FMTF9FWF9EQVRBIDEKKyAgI2RlZmluZSBIQVZFX09QRU5TU0xfRU5HSU5FX0ggIDEKKyAgI2RlZmluZSBPUEVOU1NMX05PX0tSQjUgICAgICAgIDEKKyAgI2RlZmluZSBVU0VfT1BFTlNTTCAgICAgICAgICAgIDEKKyNlbmRpZgorCisvKiB0byBkaXNhYmxlIExEQVAgKi8KKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVAgICAgICAgIDEKKworI2RlZmluZSBpbl9hZGRyX3QgIHVfbG9uZworCisjaWYgZGVmaW5lZChfX0hJR0hDX18pIHx8IFwKKyAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fIDwgNCkpCisjZGVmaW5lIHNzaXplX3QgICAgaW50CisjZW5kaWYKKworI2RlZmluZSBDVVJMX0NBX0JVTkRMRSAgZ2V0ZW52KCJDVVJMX0NBX0JVTkRMRSIpCisKKy8qIFRhcmdldCBIQVZFX3ggc2VjdGlvbiAqLworCisjaWYgZGVmaW5lZChESkdQUCkKKyAgI2RlZmluZSBIQVZFX0JBU0VOQU1FICAgMQorICAjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxCisgICNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gIDEKKyAgI2RlZmluZSBIQVZFX1NJR1NFVEpNUCAgMQorICAjZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAxCisgICNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfR0NDIDEKKworICAvKiBCZWNhdXNlIGRqZ3BwIDw9IDIuMDMgZG9lc24ndCBoYXZlIHNucHJpbnRmKCkgZXRjLiAqLworICAjaWYgKERKR1BQX01JTk9SIDwgNCkKKyAgICAjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisgICNkZWZpbmUgSEFWRV9TVFJDQVNFQ01QIDEKKworI2VsaWYgZGVmaW5lZChfX0hJR0hDX18pCisgICNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKKyNlbmRpZgorCisjaWZkZWYgTVNET1MgIC8qIFdhdHQtMzIgKi8KKyAgI2RlZmluZSBIQVZFX0NMT1NFU09DS0VUX0NBTUVMICAxCisgICNkZWZpbmUgQ2xvc2VTb2NrZXQocykgICAgICAgICAgY2xvc2VfcygocykpCisjZW5kaWYKKworI3VuZGVmIHdvcmQKKyN1bmRlZiBieXRlCisKKyNlbmRpZiAvKiBIRUFERVJfQ09ORklHX0RPU19IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jb25maWctbWFjLmggYi9jdXJsLTcuMjUuMC9saWIvY29uZmlnLW1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTgyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY29uZmlnLW1hYy5oCkBAIC0wLDAgKzEsMTIzIEBACisjaWZuZGVmIF9fTElCX0NPTkZJR19NQUNfSAorI2RlZmluZSBfX0xJQl9DT05GSUdfTUFDX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgIGxpYi9jb25maWctbWFjLmggLSBIYW5kIGNyYWZ0ZWQgY29uZmlnIGZpbGUgZm9yIE1hYyBPUyA5ICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgT24gTWFjIE9TIFggeW91IG11c3QgcnVuIGNvbmZpZ3VyZSB0byBnZW5lcmF0ZSBjdXJsX2NvbmZpZy5oIGZpbGUgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgT1MgIm1hYyIKKworI2RlZmluZSBIQVZFX0VSUk5PX0ggICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0ggICAgICAgMQorI2RlZmluZSBIQVZFX1NZU19TRUxFQ1RfSCAgICAgICAxCisjZGVmaW5lIEhBVkVfTkVUREJfSCAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9BUlBBX0lORVRfSCAgICAgICAgMQorI2RlZmluZSBIQVZFX1VOSVNURF9IICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfTkVUX0lGX0ggICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAgICAgICAgMQorI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAgICAgICAxCisjZGVmaW5lIEhBVkVfRkNOVExfSCAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IICAgICAgICAgMQorI2RlZmluZSBIQVZFX0FMTE9DQV9IICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfVElNRV9IICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TVERMSUJfSCAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1VUSU1FX0ggICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAgICAgICAgIDEKKworI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgICAgICAxCisKKyNkZWZpbmUgSEFWRV9BTEFSTSAgICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NUUkRVUCAgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfVVRJTUUgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TRVRWQlVGICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NUUkZUSU1FICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfSU5FVF9BRERSICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9NRU1DUFkgICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NFTEVDVCAgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU09DS0VUICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVZBTCAgICAgMQorCisvLyNkZWZpbmUgSEFWRV9TVFJJQ01QICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NJR05BTF9IICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UICAgICAgIDEKKworI2lmZGVmIE1BQ09TX1NTTF9TVVBQT1JUCisjICAgICAgIGRlZmluZSBVU0VfU1NMRUFZICAgICAgIDEKKyMgICAgICAgZGVmaW5lIFVTRV9PUEVOU1NMICAgICAgMQorI2VuZGlmCisKKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVAgICAgICAgMQorCisjZGVmaW5lIEhBVkVfUkFORF9TVEFUVVMgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9SQU5EX0VHRCAgICAgICAgICAgMQorCisjZGVmaW5lIEhBVkVfSU9DVEwgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9JT0NUTF9GSU9OQklPICAgICAgMQorCisjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAorCisjZGVmaW5lIFNJWkVPRl9JTlQgICAgICAgICAgICAgIDQKKyNkZWZpbmUgU0laRU9GX1NIT1JUICAgICAgICAgICAgMgorI2RlZmluZSBTSVpFT0ZfU0laRV9UICAgICAgICAgICA0CisKKyNkZWZpbmUgSEFWRV9HRVROQU1FSU5GTyAxCisjZGVmaW5lIEdFVE5BTUVJTkZPX1FVQUxfQVJHMSBjb25zdAorI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzEgc3RydWN0IHNvY2thZGRyICoKKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcyIHNvY2tsZW5fdAorI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzQ2IHNpemVfdAorI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzcgaW50CisKKyNkZWZpbmUgSEFWRV9SRUNWIDEKKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzEgaW50CisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyIHZvaWQgKgorI2RlZmluZSBSRUNWX1RZUEVfQVJHMyBzaXplX3QKKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzQgaW50CisjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWIHNzaXplX3QKKworI2RlZmluZSBIQVZFX1JFQ1ZGUk9NIDEKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcxIGludAorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzIgdm9pZAorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzMgc2l6ZV90CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNCBpbnQKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkcgorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzYgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViBzc2l6ZV90CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMl9JU19WT0lEIDEKKworI2RlZmluZSBIQVZFX1NFTkQgMQorI2RlZmluZSBTRU5EX1RZUEVfQVJHMSBpbnQKKyNkZWZpbmUgU0VORF9RVUFMX0FSRzIgY29uc3QKKyNkZWZpbmUgU0VORF9UWVBFX0FSRzIgdm9pZCAqCisjZGVmaW5lIFNFTkRfVFlQRV9BUkczIHNpemVfVAorI2RlZmluZSBTRU5EX1RZUEVfQVJHNCBpbnQKKyNkZWZpbmUgU0VORF9UWVBFX1JFVFYgc3NpemVfdAorCisjZGVmaW5lIEhBVkVfRVhUUkFfU1RSSUNNUF9IIDEKKyNkZWZpbmUgSEFWRV9FWFRSQV9TVFJEVVBfSCAgMQorCisjZW5kaWYgLyogX19MSUJfQ09ORklHX01BQ19IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY29uZmlnLW9zNDAwLmggYi9jdXJsLTcuMjUuMC9saWIvY29uZmlnLW9zNDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiODY5YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jb25maWctb3M0MDAuaApAQCAtMCwwICsxLDU0MSBAQAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgbGliL2NvbmZpZy1vczQwMC5oIC0gSGFuZCBjcmFmdGVkIGNvbmZpZyBmaWxlIGZvciBPUy80MDAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNwcmFnbWEgZW51bShpbnQpCisKKyN1bmRlZiBQQUNLQUdFCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgYXJjaGl2ZS4gKi8KKyN1bmRlZiBWRVJTSU9OCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGFzcyBmdW5jdGlvbi4gICovCisjdW5kZWYgSEFWRV9HRVRQQVNTCisKKy8qIERlZmluZSBjcHUtbWFjaGluZS1PUyAqLworI2RlZmluZSBPUyAiT1MvNDAwIgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHJfcigpIGZ1bmN0aW9uIHdpdGggNSBhcmd1bWVudHMgKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSX1JfNQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHJfcigpIGZ1bmN0aW9uIHdpdGggNyBhcmd1bWVudHMgKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUl83CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkcl9yKCkgZnVuY3Rpb24gd2l0aCA4IGFyZ3VtZW50cyAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZQUREUl9SXzgKKworLyogT1M0MDAgc3VwcG9ydHMgYSAzLWFyZ3VtZW50IEFTQ0lJIHZlcnNpb24gb2YgZ2V0aG9zdGJ5YWRkcl9yKCksIGJ1dCBpdHMKKyAqICBwcm90b3R5cGUgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlICJzdGFuZGFyZCIgb25lICgxc3QgYXJndW1lbnQgaXMgbm90CisgKiAgY29uc3QpLiBIb3dldmVyLCBnZXRhZGRyaW5mbygpIGlzIHN1cHBvcnRlZCAoQVNDSUkgdmVyc2lvbiBkZWZpbmVkIGFzCisgKiAgYSBsb2NhbCB3cmFwcGVyIGluIHNldHVwLW9zNDAwLmgpIGluIGEgdGhyZWFkc2FmZSB3YXk6IHdlIGNhbiB0aGVuCisgKiAgY29uZmlndXJlIGdldGFkZHJpbmZvKCkgYXMgc3VjaCBhbmQgZ2V0IHJpZCBvZiBnZXRob3N0YnluYW1lX3IoKSB3aXRob3V0CisgKiAgbG9zcyBvZiB0aHJlYWRzYWZlbmVzcy4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUgorI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzMKKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl81CisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNgorI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPCisjZGVmaW5lIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRQorCisvKiBEZWZpbmUgaWYgeW91IG5lZWQgdGhlIF9SRUVOVFJBTlQgZGVmaW5lIGZvciBzb21lIGZ1bmN0aW9ucyAqLworI3VuZGVmIE5FRURfUkVFTlRSQU5UCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgS2VyYmVyb3M0IGxpYnJhcmllcyAoaW5jbHVkaW5nIC1sZGVzKSAqLworI3VuZGVmIEhBVkVfS1JCNAorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydCAqLworI2RlZmluZSBFTkFCTEVfSVBWNgorCisvKiBEZWZpbmUgaWYgc3RydWN0IHNvY2thZGRyX2luNiBoYXMgdGhlIHNpbjZfc2NvcGVfaWQgbWVtYmVyICovCisjZGVmaW5lIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgMQorCisvKiBEZWZpbmUgdGhpcyB0byAnaW50JyBpZiBzc2l6ZV90IGlzIG5vdCBhbiBhdmFpbGFibGUgdHlwZWRlZmVkIHR5cGUgKi8KKyN1bmRlZiBzc2l6ZV90CisKKy8qIERlZmluZSB0aGlzIGFzIGEgc3VpdGFibGUgZmlsZSB0byByZWFkIHJhbmRvbSBkYXRhIGZyb20gKi8KKyN1bmRlZiBSQU5ET01fRklMRQorCisvKiBEZWZpbmUgdGhpcyB0byB5b3VyIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vbiBzb2NrZXQgcGF0aG5hbWUgKi8KKyN1bmRlZiBFR0RfU09DS0VUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBhbGFybSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9BTEFSTSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGFsbG9jYS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0FMTE9DQV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9BUlBBX0lORVRfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBjbG9zZXNvY2tldCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DTE9TRVNPQ0tFVAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxjcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9DUllQVE9fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxkZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ERVNfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxlcnJuby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9FUlJOT19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGVyci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VSUl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0ZDTlRMX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0ZXVpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VURVVJRAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0YnlhZGRyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RieWFkZHJfcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUl9SCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RuYW1lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUTkFNRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxnZXRvcHQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9HRVRPUFRfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRwYXNzX3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUUEFTU19SCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldHB3dWlkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRQV1VJRAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRzZXJ2YnluYW1lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRTRVJWQllOQU1FCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldHRpbWVvZmRheScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHRpbWV2YWwnIHN0cnVjdC4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVZBTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBpbmV0X2FkZHInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lORVRfQUREUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGlvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSU9fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBrcmJfZ2V0X291cl9pcF9mb3JfcmVhbG0nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfS1JCX0dFVF9PVVJfSVBfRk9SX1JFQUxNCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGtyYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0tSQl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGNyeXB0bycgbGlicmFyeSAoLWxjcnlwdG8pLiAqLworI3VuZGVmIEhBVkVfTElCQ1JZUFRPCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYG5zbCcgbGlicmFyeSAoLWxuc2wpLiAqLworI3VuZGVmIEhBVkVfTElCTlNMCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHJlc29sdicgbGlicmFyeSAoLWxyZXNvbHYpLiAqLworI3VuZGVmIEhBVkVfTElCUkVTT0xWCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHJlc29sdmUnIGxpYnJhcnkgKC1scmVzb2x2ZSkuICovCisjdW5kZWYgSEFWRV9MSUJSRVNPTFZFCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHNvY2tldCcgbGlicmFyeSAoLWxzb2NrZXQpLiAqLworI3VuZGVmIEhBVkVfTElCU09DS0VUCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHNzbCcgbGlicmFyeSAoLWxzc2wpLiAqLworI3VuZGVmIEhBVkVfTElCU1NMCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBHU1MgQVBJLiAqLworI2RlZmluZSBIQVZFX0dTU0FQSQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGB1Y2InIGxpYnJhcnkgKC1sdWNiKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlVDQgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBsb2NhbHRpbWVfcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTE9DQUxUSU1FX1IKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bWFsbG9jLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX01BTExPQ19ICisKKy8qIERlZmluZSBpZiB5b3UgbmVlZCB0aGUgbWFsbG9jLmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIHN0ZGxpYi5oICAqLworLyogI2RlZmluZSBORUVEX01BTExPQ19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTUVNT1JZX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bmV0ZGIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUREJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2lmX2V0aGVyLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUSU5FVF9JRl9FVEhFUl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9pZi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVRfSUZfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2NyeXB0by5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfQ1JZUFRPX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9lcnIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9PUEVOU1NMX0VSUl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcGVtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9QRU1fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3JzYS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfUlNBX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9zc2wuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9PUEVOU1NMX1NTTF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wveDUwOS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfWDUwOV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHBlbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1BFTV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHBlcnJvcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUEVSUk9SCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHB3ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9QV0RfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBSQU5EX2VnZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SQU5EX0VHRAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBSQU5EX3NjcmVlbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SQU5EX1NDUkVFTgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBSQU5EX3N0YXR1cycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SQU5EX1NUQVRVUworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxyc2EuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9SU0FfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzZWxlY3QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFTEVDVAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzZXR2YnVmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRWQlVGCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNndHR5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU0dUVFlfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzaWdhY3Rpb24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NJR0FDVElPTgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzaWduYWwnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0lHTkFMCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNpZ25hbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TSUdOQUxfSAorCisvKiBEZWZpbmUgaWYgc2lnX2F0b21pY190IGlzIGFuIGF2YWlsYWJsZSB0eXBlZGVmLiAqLworI2RlZmluZSBIQVZFX1NJR19BVE9NSUNfVAorCisvKiBEZWZpbmUgaWYgc2lnX2F0b21pY190IGlzIGFscmVhZHkgZGVmaW5lZCBhcyB2b2xhdGlsZS4gKi8KKyN1bmRlZiBIQVZFX1NJR19BVE9NSUNfVF9WT0xBVElMRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NPQ0tFVAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzc2wuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TU0xfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RETElCX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZWNtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJDQVNFQ01QCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNtcGknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSQ01QSQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSRFVQCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmZ0aW1lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJGVElNRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJpY21wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUklDTVAKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdTX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NUUklOR19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjcHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTENQWQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJvcHRzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RST1BUU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnN0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSU1RSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRva19yJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJUT0tfUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b2xsJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUlRPTEwgICAgICAgICAgICAgLyogQWxsb3dzIEFTQ0lJIGNvbXBpbGUgb24gVjVSMS4gKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19QQVJBTV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU0VMRUNUX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TT0NLSU9fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19UWVBFU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91bi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVU5fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW9jdGwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX0lPQ1RMX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgdGNnZXRhdHRyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1RDR0VUQVRUUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGB0Y3NldGF0dHInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVENTRVRBVFRSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9URVJNSU9TX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVEVSTUlPX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9USU1FX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgdW5hbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVU5BTUUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1VOSVNURF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2suaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XSU5TT0NLX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8eDUwOS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1g1MDlfSAorCisvKiBOYW1lIG9mIHBhY2thZ2UgKi8KKyN1bmRlZiBQQUNLQUdFCisKKy8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChgaW50JyBvciBgdm9pZCcpLiAqLworI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKKworLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0lOVCAgICAgICAgICAgICAgNAorCisvKiBUaGUgc2l6ZSBvZiBhIGBsb25nIGRvdWJsZScsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFICAgICAgOAorCisvKiBEZWZpbmUgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAnbG9uZyBsb25nJyBkYXRhIHR5cGUuICovCisjZGVmaW5lIEhBVkVfTE9OR0xPTkcKKworLyogVGhlIHNpemUgb2YgYSBgbG9uZyBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HICAgICAgICA4CisKKy8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1NIT1JUICAgICAgICAgICAgMgorCisvKiBUaGUgc2l6ZSBvZiBgc2l6ZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfU0laRV9UICAgICAgICAgICA4CisKKy8qIFdoZXRoZXIgbG9uZyBsb25nIGNvbnN0YW50cyBtdXN0IGJlIHN1ZmZpeGVkIGJ5IExMLiAqLworCisjZGVmaW5lIEhBVkVfTEwKKworLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIFNURENfSEVBREVSUworCisvKiBEZWZpbmUgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRQorCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjdW5kZWYgVkVSU0lPTgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLworI3VuZGVmIF9GSUxFX09GRlNFVF9CSVRTCisKKy8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyNkZWZpbmUgX0xBUkdFX0ZJTEVTCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworI3VuZGVmIGNvbnN0CisKKy8qIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIGluX2FkZHJfdCBpZiBub3QgZGVmaW5lZCAqLworI2RlZmluZSBpbl9hZGRyX3QgICAgICAgdW5zaWduZWQgbG9uZworCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBzaXplX3QKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpb2N0bCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3RsIEZJT05CSU8gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU9DVExfRklPTkJJTworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3RsIFNJT0NHSUZBRERSIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lPQ1RMX1NJT0NHSUZBRERSCisKKy8qIFRvIGRpc2FibGUgTERBUCAqLworI3VuZGVmIENVUkxfRElTQUJMRV9MREFQCisKKy8qIFRvIGF2b2lkIGV4dGVybmFsIHVzZSBvZiBsaWJyYXJ5IGhpZGRlbiBzeW1ib2xzICovCisjZGVmaW5lIENVUkxfSElEREVOX1NZTUJPTFMKKworLyogRXh0ZXJuYWwgc3ltYm9scyBuZWVkIG5vIHNwZWNpYWwga2V5d29yZC4gKi8KKyNkZWZpbmUgQ1VSTF9FWFRFUk5fU1lNQk9MCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbGRhcF91cmxfcGFyc2UgcHJvY2VkdXJlLiAqLworLyogI2RlZmluZSBIQVZFX0xEQVBfVVJMX1BBUlNFICovICAgIC8qIERpc2FibGVkIGJlY2F1c2Ugb2YgYW4gSUJNIGJ1Zy4gKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRuYW1laW5mbyBmdW5jdGlvbi4gKi8KKy8qIE9TNDAwIGhhcyBubyBBU0NJSSB2ZXJzaW9uIG9mIHRoaXMgcHJvY2VkdXJlOiB3cmFwcGVkIGluIHNldHVwLW9zNDAwLmguICovCisjZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1FVQUxfQVJHMSBjb25zdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzEgc3RydWN0IHNvY2thZGRyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcyIHNvY2tsZW5fdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyA0IGFuZCA2IGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBzb2NrbGVuX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA3IGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc3IGludAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHJlY3YgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDVgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyIGNoYXIgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSByZWN2ZnJvbSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUNWRlJPTQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyIGNoYXIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA1IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkcgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZW5kIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFTkQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMSBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9RVUFMX0FSRzIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMiBjaGFyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMyBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX1JFVFYgaW50CisKKy8qIERlZmluZSB0byB1c2UgdGhlIFFzb1NTTCBwYWNrYWdlLiAqLworI2RlZmluZSBVU0VfUVNPU1NMCisKKy8qIFVzZSB0aGUgc3lzdGVtIGtleXJpbmcgYXMgdGhlIGRlZmF1bHQgQ0EgYnVuZGxlLiAqLworI2RlZmluZSBDVVJMX0NBX0JVTkRMRSAgIi9RSUJNL1VzZXJEYXRhL0lDU1MvQ2VydC9TZXJ2ZXIvREVGQVVMVC5LREIiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICBBRERJVElPTkFMIERFRklOSVRJT05TICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhlIGZvbGxvd2luZyBtdXN0IGJlIGRlZmluZWQgQkVGT1JFIHN5c3RlbSBoZWFkZXIgZmlsZXMgaW5jbHVzaW9uLiAqLworCisjZGVmaW5lIF9fcHRyMTI4ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyB0ZXJhc3BhY2UuICovCisjZGVmaW5lIHFhZHJ0X3VzZV9mcHV0Y19pbmxpbmUgICAgICAgICAvKiBHZW5lcmF0ZSBmcHV0YygpIHdyYXBwZXIgaW5saW5lLiAqLworI2RlZmluZSBxYWRydF91c2VfZnJlYWRfaW5saW5lICAgICAgICAgLyogR2VuZXJhdGUgZnJlYWQoKSB3cmFwcGVyIGlubGluZS4gKi8KKyNkZWZpbmUgcWFkcnRfdXNlX2Z3cml0ZV9pbmxpbmUgICAgICAgIC8qIEdlbmVyYXRlIGZ3cml0ZSgpIHdyYXBwZXIgaW5saW5lLiAqLworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY29uZmlnLXJpc2Nvcy5oIGIvY3VybC03LjI1LjAvbGliL2NvbmZpZy1yaXNjb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmI5MjM5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2NvbmZpZy1yaXNjb3MuaApAQCAtMCwwICsxLDQ5OSBAQAorLyogY3VybF9jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gY29uZmlndXJlLmluIGJ5IGF1dG9oZWFkZXIuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICovCisvKiBOYW1lIG9mIHRoaXMgcGFja2FnZSEgKi8KKyN1bmRlZiBQQUNLQUdFCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgYXJjaGl2ZS4gKi8KKyN1bmRlZiBWRVJTSU9OCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGFzcyBmdW5jdGlvbi4gICovCisjdW5kZWYgSEFWRV9HRVRQQVNTCisKKy8qIERlZmluZSBjcHUtbWFjaGluZS1PUyAqLworI2RlZmluZSBPUyAiQVJNLVJJU0MgT1MiCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkcl9yKCkgZnVuY3Rpb24gd2l0aCA1IGFyZ3VtZW50cyAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZQUREUl9SXzUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnlhZGRyX3IoKSBmdW5jdGlvbiB3aXRoIDcgYXJndW1lbnRzICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllBRERSX1JfNworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHJfcigpIGZ1bmN0aW9uIHdpdGggOCBhcmd1bWVudHMgKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUl84CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5bmFtZV9yKCkgZnVuY3Rpb24gd2l0aCAzIGFyZ3VtZW50cyAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzMKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnluYW1lX3IoKSBmdW5jdGlvbiB3aXRoIDUgYXJndW1lbnRzICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWVfcigpIGZ1bmN0aW9uIHdpdGggNiBhcmd1bWVudHMgKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl82CisKKy8qIERlZmluZSBpZiB5b3UgbmVlZCB0aGUgX1JFRU5UUkFOVCBkZWZpbmUgZm9yIHNvbWUgZnVuY3Rpb25zICovCisjdW5kZWYgTkVFRF9SRUVOVFJBTlQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBLZXJiZXJvczQgbGlicmFyaWVzIChpbmNsdWRpbmcgLWxkZXMpICovCisjdW5kZWYgSEFWRV9LUkI0CisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgSVB2NiBzdXBwb3J0ICovCisjdW5kZWYgRU5BQkxFX0lQVjYKKworLyogRGVmaW5lIGlmIHN0cnVjdCBzb2NrYWRkcl9pbjYgaGFzIHRoZSBzaW42X3Njb3BlX2lkIG1lbWJlciAqLworI2RlZmluZSBIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEIDEKKworLyogRGVmaW5lIHRoaXMgdG8gJ2ludCcgaWYgc3NpemVfdCBpcyBub3QgYW4gYXZhaWxhYmxlIHR5cGVkZWZlZCB0eXBlICovCisjdW5kZWYgc3NpemVfdAorCisvKiBEZWZpbmUgdGhpcyBhcyBhIHN1aXRhYmxlIGZpbGUgdG8gcmVhZCByYW5kb20gZGF0YSBmcm9tICovCisjdW5kZWYgUkFORE9NX0ZJTEUKKworLyogRGVmaW5lIHRoaXMgdG8geW91ciBFbnRyb3B5IEdhdGhlcmluZyBEYWVtb24gc29ja2V0IHBhdGhuYW1lICovCisjdW5kZWYgRUdEX1NPQ0tFVAorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydCAqLworI3VuZGVmIEVOQUJMRV9JUFY2CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBhbGFybSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9BTEFSTSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGFsbG9jYS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9BTExPQ0FfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxhcnBhL2luZXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgY2xvc2Vzb2NrZXQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQ0xPU0VTT0NLRVQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8Y3J5cHRvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfQ1JZUFRPX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfREVTX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfRVJSTk9fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxlcnIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9FUlJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9GQ05UTF9ICisKKy8qIERlZmluZSBpZiBnZXRhZGRyaW5mbyBleGlzdHMgYW5kIHdvcmtzICovCisjZGVmaW5lIEhBVkVfR0VUQUREUklORk8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0ZXVpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRFVUlECisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RieWFkZHInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFIKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdGJ5YWRkcl9yJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0YnluYW1lX3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RuYW1lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUTkFNRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxnZXRvcHQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfR0VUT1BUX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGFzc19yJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBBU1NfUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRwd3VpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRQV1VJRAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRzZXJ2YnluYW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFNFUlZCWU5BTUUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dGltZW9mZGF5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgdGltZXZhbCcgc3RydWN0LiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9USU1FVkFMCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGluZXRfYWRkcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JTkVUX0FERFIKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9JT19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGtyYl9nZXRfb3VyX2lwX2Zvcl9yZWFsbScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9LUkJfR0VUX09VUl9JUF9GT1JfUkVBTE0KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8a3JiLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfS1JCX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgY3J5cHRvJyBsaWJyYXJ5ICgtbGNyeXB0bykuICovCisjdW5kZWYgSEFWRV9MSUJDUllQVE8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgbnNsJyBsaWJyYXJ5ICgtbG5zbCkuICovCisjdW5kZWYgSEFWRV9MSUJOU0wKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgcmVzb2x2JyBsaWJyYXJ5ICgtbHJlc29sdikuICovCisjdW5kZWYgSEFWRV9MSUJSRVNPTFYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgcmVzb2x2ZScgbGlicmFyeSAoLWxyZXNvbHZlKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlJFU09MVkUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBsaWJyYXJ5ICgtbHNvY2tldCkuICovCisjdW5kZWYgSEFWRV9MSUJTT0NLRVQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3NsJyBsaWJyYXJ5ICgtbHNzbCkuICovCisjdW5kZWYgSEFWRV9MSUJTU0wKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgdWNiJyBsaWJyYXJ5ICgtbHVjYikuICovCisjdW5kZWYgSEFWRV9MSUJVQ0IKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgbG9jYWx0aW1lX3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTE9DQUxUSU1FX1IKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bWFsbG9jLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX01BTExPQ19ICisKKy8qIERlZmluZSBpZiB5b3UgbmVlZCB0aGUgbWFsbG9jLmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIHN0ZGxpYi5oICAqLworLyogI2RlZmluZSBORUVEX01BTExPQ19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTUVNT1JZX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bmV0ZGIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUREJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2lmX2V0aGVyLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUSU5FVF9JRl9FVEhFUl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9pZi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVRfSUZfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2NyeXB0by5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfQ1JZUFRPX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9lcnIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9PUEVOU1NMX0VSUl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcGVtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9QRU1fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3JzYS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfUlNBX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9zc2wuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9PUEVOU1NMX1NTTF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wveDUwOS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfWDUwOV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHBlbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1BFTV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHBlcnJvcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QRVJST1IKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8cHdkLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUFdEX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9lZ2QnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkFORF9FR0QKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9zY3JlZW4nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkFORF9TQ1JFRU4KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9zdGF0dXMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkFORF9TVEFUVVMKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8cnNhLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUlNBX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc2VsZWN0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRUxFQ1QKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc2V0dmJ1ZicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRWQlVGCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNndHR5Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NHVFRZX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc2lnYWN0aW9uJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NJR0FDVElPTgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzaWduYWwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NJR05BTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU0lHTkFMX0gKKworLyogRGVmaW5lIGlmIHNpZ19hdG9taWNfdCBpcyBhbiBhdmFpbGFibGUgdHlwZWRlZi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1QKKworLyogRGVmaW5lIGlmIHNpZ19hdG9taWNfdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgdm9sYXRpbGUuICovCisjdW5kZWYgSEFWRV9TSUdfQVRPTUlDX1RfVk9MQVRJTEUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TT0NLRVQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3NsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1NMX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU5UX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNhc2VjbXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSQ0FTRUNNUAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJjbXBpJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkNNUEkKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJEVVAKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RyZnRpbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkZUSU1FCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmljbXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUklDTVAKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR1NfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNweScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJMQ1BZCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnN0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSU1RSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRva19yJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUlRPS19SCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvbGwnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSVE9MTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfUEFSQU1fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NraW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU09DS0lPX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19UWVBFU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHRjZ2V0YXR0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVENHRVRBVFRSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHRjc2V0YXR0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVENTRVRBVFRSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVEVSTUlPU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pby5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1RFUk1JT19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9USU1FX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgdW5hbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VOQU1FCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV0lOU09DS19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHg1MDkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9YNTA5X0gKKworLyogTmFtZSBvZiBwYWNrYWdlICovCisjdW5kZWYgUEFDS0FHRQorCisvKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoYGludCcgb3IgYHZvaWQnKS4gKi8KKyNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCisKKy8qIFRoZSBzaXplIG9mIGBpbnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9JTlQgNAorCisvKiBUaGUgc2l6ZSBvZiBgbG9uZyBkb3VibGUnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0xPTkdfRE9VQkxFCisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0xPTkdfTE9ORworCisvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9TSE9SVCAyCisKKy8qIFRoZSBzaXplIG9mIGBzaXplX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9TSVpFX1QgNAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjdW5kZWYgU1REQ19IRUFERVJTCisKKy8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KKyN1bmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworI3VuZGVmIFZFUlNJT04KKworLyogRGVmaW5lIGlmIG9uIEFJWCAzLgorICAgU3lzdGVtIGhlYWRlcnMgc29tZXRpbWVzIGRlZmluZSB0aGlzLgorICAgV2UganVzdCB3YW50IHRvIGF2b2lkIGEgcmVkZWZpbml0aW9uIGVycm9yIG1lc3NhZ2UuICAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyB1bmRlZiBfQUxMX1NPVVJDRQorI2VuZGlmCisKKy8qIE51bWJlciBvZiBiaXRzIGluIGEgZmlsZSBvZmZzZXQsIG9uIGhvc3RzIHdoZXJlIHRoaXMgaXMgc2V0dGFibGUuICovCisjdW5kZWYgX0ZJTEVfT0ZGU0VUX0JJVFMKKworLyogRGVmaW5lIGZvciBsYXJnZSBmaWxlcywgb24gQUlYLXN0eWxlIGhvc3RzLiAqLworI3VuZGVmIF9MQVJHRV9GSUxFUworCisvKiBEZWZpbmUgdG8gZW1wdHkgaWYgYGNvbnN0JyBkb2VzIG5vdCBjb25mb3JtIHRvIEFOU0kgQy4gKi8KKyN1bmRlZiBjb25zdAorCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBzaXplX3QKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHNzaXplX3QKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpb2N0bCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3RsIEZJT05CSU8gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU9DVExfRklPTkJJTworCisvKiB0byBkaXNhYmxlIExEQVAgKi8KKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVAKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRuYW1laW5mbyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVROQU1FSU5GTyAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19RVUFMX0FSRzEgY29uc3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcxIHN0cnVjdCBzb2NrYWRkciAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHMiBzb2NrbGVuX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZ3MgNCBhbmQgNiBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYgc2l6ZV90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNyBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNyBpbnQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSByZWN2IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1JFQ1YgMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyIHZvaWQgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkczIHNpemVfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfUkVUViBzc2l6ZV90CisKKy8qIERlZmluZSAxIGlmIHlvdSBoYXZlIHRoZSByZWN2ZnJvbSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUNWRlJPTSAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDIgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzIgdm9pZAorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbSBpcyB2b2lkLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzJfSVNfVk9JRCAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBzaXplX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSBzdHJ1Y3Qgc29ja2FkZHIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDYgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzYgaW50CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX1JFVFYgc3NpemVfdAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNlbmQgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VORCAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzEgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDIgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfUVVBTF9BUkcyIGNvbnN0CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzIgdm9pZCAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzMgc2l6ZV90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9SRVRWIHNzaXplX3QKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jb25maWctc3ltYmlhbi5oIGIvY3VybC03LjI1LjAvbGliL2NvbmZpZy1zeW1iaWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1YWI1YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jb25maWctc3ltYmlhbi5oCkBAIC0wLDAgKzEsODI5IEBACisvKiBjb25maWctc3ltYmlhbi5oLiAgTWFudWFsbHkgZ2VuZXJhdGVkLiAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiB3aGVuIGJ1aWxkaW5nIGxpYmN1cmwgaXRzZWxmICovCisvKiAjdW5kZWYgQlVJTERJTkdfTElCQ1VSTCAqLworCisvKiBMb2NhdGlvbiBvZiBkZWZhdWx0IGNhIGJ1bmRsZSAqLworLyogI2RlZmluZSBDVVJMX0NBX0JVTkRMRSAiL2V0Yy9wa2kvdGxzL2NlcnRzL2NhLWJ1bmRsZS5jcnQiKi8KKworLyogTG9jYXRpb24gb2YgZGVmYXVsdCBjYSBwYXRoICovCisvKiAjdW5kZWYgQ1VSTF9DQV9QQVRIICovCisKKy8qIHRvIGRpc2FibGUgY29va2llcyBzdXBwb3J0ICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX0NPT0tJRVMgKi8KKworLyogdG8gZGlzYWJsZSBjcnlwdG9ncmFwaGljIGF1dGhlbnRpY2F0aW9uICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIICovCisKKy8qIHRvIGRpc2FibGUgRElDVCAqLworLyogI3VuZGVmIENVUkxfRElTQUJMRV9ESUNUICovCisKKy8qIHRvIGRpc2FibGUgRklMRSAqLworLyogI3VuZGVmIENVUkxfRElTQUJMRV9GSUxFICovCisKKy8qIHRvIGRpc2FibGUgRlRQICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX0ZUUCAqLworCisvKiB0byBkaXNhYmxlIEhUVFAgKi8KKy8qICN1bmRlZiBDVVJMX0RJU0FCTEVfSFRUUCAqLworCisvKiB0byBkaXNhYmxlIExEQVAgKi8KKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVAgMQorCisvKiB0byBkaXNhYmxlIExEQVBTICovCisjZGVmaW5lIENVUkxfRElTQUJMRV9MREFQUyAxCisKKy8qIHRvIGRpc2FibGUgVEVMTkVUICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX1RFTE5FVCAqLworCisvKiB0byBkaXNhYmxlIFRGVFAgKi8KKy8qICN1bmRlZiBDVVJMX0RJU0FCTEVfVEZUUCAqLworCisvKiB0byBkaXNhYmxlIHZlcmJvc2Ugc3RyaW5ncyAqLworLyogI2RlZmluZSBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTIDEqLworCisvKiB0byBtYWtlIGEgc3ltYm9sIHZpc2libGUgKi8KKy8qI2RlZmluZSBDVVJMX0VYVEVSTl9TWU1CT0wgIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSovCisKKy8qIHRvIGVuYWJsZSBoaWRkZW4gc3ltYm9scyAqLworLyojZGVmaW5lIENVUkxfSElEREVOX1NZTUJPTFMgMSovCisKKy8qIFVzZSBXaW5kb3dzIExEQVAgaW1wbGVtZW50YXRpb24gKi8KKy8qICN1bmRlZiBDVVJMX0xEQVBfV0lOICovCisKKy8qIHdoZW4gbm90IGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgKi8KKy8qICN1bmRlZiBDVVJMX1NUQVRJQ0xJQiAqLworCisvKiB5b3VyIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vbiBzb2NrZXQgcGF0aG5hbWUgKi8KKy8qICN1bmRlZiBFR0RfU09DS0VUICovCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgSVB2NiBzdXBwb3J0ICovCisjZGVmaW5lIEVOQUJMRV9JUFY2IDEKKworLyogRGVmaW5lIGlmIHN0cnVjdCBzb2NrYWRkcl9pbjYgaGFzIHRoZSBzaW42X3Njb3BlX2lkIG1lbWJlciAqLworI2RlZmluZSBIQVZFX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1FVQUxfQVJHMSBjb25zdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzEgc3RydWN0IHNvY2thZGRyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcyIHNvY2tsZW5fdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyA0IGFuZCA2IGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBzaXplX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA3IGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc3IGludAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFsbG9jYS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qI2RlZmluZSBIQVZFX0FMTE9DQV9IIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9BUlBBX0lORVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXJwYS90ZnRwLmg+IGhlYWRlciBmaWxlLiAqLworLyojZGVmaW5lIEhBVkVfQVJQQV9URlRQX0ggMSovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXNzZXJ0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0FTU0VSVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiYXNlbmFtZScgZnVuY3Rpb24uICovCisvKiNkZWZpbmUgSEFWRV9CQVNFTkFNRSAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgYm9vbCBpcyBhbiBhdmFpbGFibGUgdHlwZS4gKi8KKy8qI2RlZmluZSBIQVZFX0JPT0xfVCAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9zZXNvY2tldCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9DTE9TRVNPQ0tFVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYENSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhJyBmdW5jdGlvbi4gKi8KKy8qI2RlZmluZSBIQVZFX0NSWVBUT19DTEVBTlVQX0FMTF9FWF9EQVRBIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGNyeXB0by5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0NSWVBUT19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGVzLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfREVTX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXMnIGZ1bmN0aW9uLiAqLworLyojZGVmaW5lIEhBVkVfRU5HSU5FX0xPQURfQlVJTFRJTl9FTkdJTkVTIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0VSUk5PX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVyci5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9FUlJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfRkNOVExfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmY250bCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GQ05UTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBmY250bCBPX05PTkJMT0NLIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZDTlRMX09fTk9OQkxPQ0sgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZvcmsnIGZ1bmN0aW9uLiAqLworLyojZGVmaW5lIEhBVkVfRk9SSyAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmdHJ1bmNhdGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAxCisKKy8qIERlZmluZSBpZiBnZXRhZGRyaW5mbyBleGlzdHMgYW5kIHdvcmtzICovCisjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGV1aWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEVVSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RieWFkZHInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFIgMQorCisvKiBJZiB5b3UgaGF2ZSBnZXRob3N0YnluYW1lICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdGJ5bmFtZV9yJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUiAqLworCisvKiBnZXRob3N0YnluYW1lX3IoKSB0YWtlcyAzIGFyZ3MgKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zICovCisKKy8qIGdldGhvc3RieW5hbWVfcigpIHRha2VzIDUgYXJncyAqLworLyogI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzUgKi8KKworLyogZ2V0aG9zdGJ5bmFtZV9yKCkgdGFrZXMgNiBhcmdzICovCisvKiAjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0bmFtZWluZm8gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBhc3NfcicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9HRVRQQVNTX1IgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwcGlkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRQUElEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwcm90b2J5bmFtZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUUFJPVE9CWU5BTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHB3dWlkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRQV1VJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cmxpbWl0JyBmdW5jdGlvbi4gKi8KKy8qI2RlZmluZSBIQVZFX0dFVFJMSU1JVCAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCisKKy8qIHdlIGhhdmUgYSBnbGliYy1zdHlsZSBzdHJlcnJvcl9yKCkgKi8KKy8qICN1bmRlZiBIQVZFX0dMSUJDX1NUUkVSUk9SX1IgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnbXRpbWVfcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR01USU1FX1IgMQorCisvKiBpZiB5b3UgaGF2ZSB0aGUgZ3NzYXBpIGxpYnJhcmllcyAqLworLyogI3VuZGVmIEhBVkVfR1NTQVBJICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Z3NzYXBpL2dzc2FwaV9nZW5lcmljLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfR1NTQVBJX0dTU0FQSV9HRU5FUklDX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnc3NhcGkvZ3NzYXBpLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfR1NTQVBJX0dTU0FQSV9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Z3NzYXBpL2dzc2FwaV9rcmI1Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfR1NTQVBJX0dTU0FQSV9LUkI1X0ggKi8KKworLyogaWYgeW91IGhhdmUgdGhlIEdOVSBnc3NhcGkgbGlicmFyaWVzICovCisvKiAjdW5kZWYgSEFWRV9HU1NHTlUgKi8KKworLyogaWYgeW91IGhhdmUgdGhlIEhlaW1kYWwgZ3NzYXBpIGxpYnJhcmllcyAqLworLyogI3VuZGVmIEhBVkVfR1NTSEVJTURBTCAqLworCisvKiBpZiB5b3UgaGF2ZSB0aGUgTUlUIGdzc2FwaSBsaWJyYXJpZXMgKi8KKy8qICN1bmRlZiBIQVZFX0dTU01JVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlkbmFfc3RyZXJyb3InIGZ1bmN0aW9uLiAqLworLyojZGVmaW5lIEhBVkVfSUROQV9TVFJFUlJPUiAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZG5fZnJlZScgZnVuY3Rpb24uICovCisvKiNkZWZpbmUgSEFWRV9JRE5fRlJFRSAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpZG4tZnJlZS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qI2RlZmluZSBIQVZFX0lETl9GUkVFX0ggMSovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9hZGRyJyBmdW5jdGlvbi4gKi8KKy8qI2RlZmluZSBIQVZFX0lORVRfQUREUiAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSBJUHY2IGNhcGFibGUgd29ya2luZyBpbmV0X250b3AgZnVuY3Rpb24uICovCisvKiNkZWZpbmUgSEFWRV9JTkVUX05UT1AgMSovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgSVB2NiBjYXBhYmxlIHdvcmtpbmcgaW5ldF9wdG9uIGZ1bmN0aW9uLiAqLworLyojZGVmaW5lIEhBVkVfSU5FVF9QVE9OIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW9jdGwgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU9DVEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGwgRklPTkJJTyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTF9GSU9OQklPIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGlvY3Rsc29ja2V0IGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSU9DVExTT0NLRVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3Rsc29ja2V0IEZJT05CSU8gZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBJb2N0bFNvY2tldCBjYW1lbCBjYXNlIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSU9DVExTT0NLRVRfQ0FNRUwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIElvY3RsU29ja2V0IGNhbWVsIGNhc2UgRklPTkJJTyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMX0ZJT05CSU8gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0lPX0ggKi8KKworLyogaWYgeW91IGhhdmUgdGhlIEtlcmJlcm9zNCBsaWJyYXJpZXMgKGluY2x1ZGluZyAtbGRlcykgKi8KKy8qICN1bmRlZiBIQVZFX0tSQjQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrcmJfZ2V0X291cl9pcF9mb3JfcmVhbG0nIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfS1JCX0dFVF9PVVJfSVBfRk9SX1JFQUxNICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8a3JiLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfS1JCX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGxiZXIuaCBoZWFkZXIgZmlsZS4gKi8KKy8qI2RlZmluZSBIQVZFX0xCRVJfSCAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGxkYXBzc2wuaCBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0xEQVBTU0xfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbGRhcC5oIGhlYWRlciBmaWxlLiAqLworLyojZGVmaW5lIEhBVkVfTERBUF9IIDEqLworCisvKiBVc2UgTERBUFMgaW1wbGVtZW50YXRpb24gKi8KKy8qI2RlZmluZSBIQVZFX0xEQVBfU1NMIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbGRhcF9zc2wuaCBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0xEQVBfU1NMX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsZGFwX3VybF9wYXJzZScgZnVuY3Rpb24uICovCisvKiNkZWZpbmUgSEFWRV9MREFQX1VSTF9QQVJTRSAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJnZW4uaD4gaGVhZGVyIGZpbGUuICovCisvKiNkZWZpbmUgSEFWRV9MSUJHRU5fSCAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZG4nIGxpYnJhcnkgKC1saWRuKS4gKi8KKy8qI2RlZmluZSBIQVZFX0xJQklETiAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZXNvbHYnIGxpYnJhcnkgKC1scmVzb2x2KS4gKi8KKy8qICN1bmRlZiBIQVZFX0xJQlJFU09MViAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlc29sdmUnIGxpYnJhcnkgKC1scmVzb2x2ZSkuICovCisvKiAjdW5kZWYgSEFWRV9MSUJSRVNPTFZFICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBsaWJyYXJ5ICgtbHNvY2tldCkuICovCisvKiAjdW5kZWYgSEFWRV9MSUJTT0NLRVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzc2gyJyBsaWJyYXJ5ICgtbHNzaDIpLiAqLworLyojZGVmaW5lIEhBVkVfTElCU1NIMiAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJzc2gyLmg+IGhlYWRlciBmaWxlLiAqLworLyojZGVmaW5lIEhBVkVfTElCU1NIMl9IIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNzbCcgbGlicmFyeSAoLWxzc2wpLiAqLworLyojZGVmaW5lIEhBVkVfTElCU1NMIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCisKKy8qIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgTEwgKi8KKyNkZWZpbmUgSEFWRV9MTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bG9jYWxlLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsb2NhbHRpbWVfcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTE9DQUxUSU1FX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlICdsb25nIGxvbmcnIGRhdGEgdHlwZS4gKi8KKyNkZWZpbmUgSEFWRV9MT05HTE9ORyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBtYWxsb2MuaCBoZWFkZXIgZmlsZS4gKi8KKy8qI2RlZmluZSBIQVZFX01BTExPQ19IIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNU0dfTk9TSUdOQUwgZmxhZy4gKi8KKy8qI2RlZmluZSBIQVZFX01TR19OT1NJR05BTCAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRkYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVREQl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC90Y3AuaD4gaGVhZGVyIGZpbGUuICovCisvKiNkZWZpbmUgSEFWRV9ORVRJTkVUX1RDUF9IIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9pZi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVRfSUZfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIE5JX1dJVEhTQ09QRUlEIGV4aXN0cyBhbmQgd29ya3MuICovCisvKiNkZWZpbmUgSEFWRV9OSV9XSVRIU0NPUEVJRCAxKi8KKworLyogd2UgaGF2ZSBubyBzdHJlcnJvcl9yKCkgcHJvdG8gKi8KKy8qICN1bmRlZiBIQVZFX05PX1NUUkVSUk9SX1JfREVDTCAqLworCisvKiBpZiB5b3UgaGF2ZSBhbiBvbGQgTUlUIGdzc2FwaSBsaWJyYXJ5LCBsYWNraW5nIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFCisgICAqLworLyogI3VuZGVmIEhBVkVfT0xEX0dTU01JVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvY3J5cHRvLmg+IGhlYWRlciBmaWxlLiAqLworLyojZGVmaW5lIEhBVkVfT1BFTlNTTF9DUllQVE9fSCAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2VuZ2luZS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qI2RlZmluZSBIQVZFX09QRU5TU0xfRU5HSU5FX0ggMSovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9lcnIuaD4gaGVhZGVyIGZpbGUuICovCisvKiNkZWZpbmUgSEFWRV9PUEVOU1NMX0VSUl9IIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcGVtLmg+IGhlYWRlciBmaWxlLiAqLworLyojZGVmaW5lIEhBVkVfT1BFTlNTTF9QRU1fSCAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3BrY3MxMi5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qI2RlZmluZSBIQVZFX09QRU5TU0xfUEtDUzEyX0ggMSovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9yc2EuaD4gaGVhZGVyIGZpbGUuICovCisvKiNkZWZpbmUgSEFWRV9PUEVOU1NMX1JTQV9IIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvc3NsLmg+IGhlYWRlciBmaWxlLiAqLworLyojZGVmaW5lIEhBVkVfT1BFTlNTTF9TU0xfSCAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3g1MDkuaD4gaGVhZGVyIGZpbGUuICovCisvKiNkZWZpbmUgSEFWRV9PUEVOU1NMX1g1MDlfSCAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwZW0uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9QRU1fSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBlcnJvcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUEVSUk9SIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwaXBlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QSVBFIDEKKworLyogaWYgeW91IGhhdmUgdGhlIGZ1bmN0aW9uIFBLMTFfQ3JlYXRlR2VuZXJpY09iamVjdCAqLworLyogI3VuZGVmIEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9sbCcgZnVuY3Rpb24uICovCisvKiNkZWZpbmUgSEFWRV9QT0xMIDEqLworCisvKiBJZiB5b3UgaGF2ZSBhIGZpbmUgcG9sbCAqLworLyojZGVmaW5lIEhBVkVfUE9MTF9GSU5FIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBvbGwuaD4gaGVhZGVyIGZpbGUuICovCisvKiNkZWZpbmUgSEFWRV9QT0xMX0ggMSovCisKKy8qIHdlIGhhdmUgYSBQT1NJWC1zdHlsZSBzdHJlcnJvcl9yKCkgKi8KKyNkZWZpbmUgSEFWRV9QT1NJWF9TVFJFUlJPUl9SIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwd2QuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfUFdEX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfZWdkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SQU5EX0VHRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9zY3JlZW4nIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfUkFORF9TQ1JFRU4gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBSQU5EX3N0YXR1cycgZnVuY3Rpb24uICovCisvKiNkZWZpbmUgSEFWRV9SQU5EX1NUQVRVUyAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHJlY3YgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDViAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSByZWN2ZnJvbSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUNWRlJPTSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cnNhLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfUlNBX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNlbGVjdCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRUxFQ1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2VuZCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRU5EIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZXRqbXAuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU0VUSk1QX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGxvY2FsZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRtb2RlJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1NFVE1PREUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRybGltaXQnIGZ1bmN0aW9uLiAqLworLyojZGVmaW5lIEhBVkVfU0VUUkxJTUlUIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2V0c29ja29wdCBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1NFVFNPQ0tPUFQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIHNldHNvY2tvcHQgU09fTk9OQkxPQ0sgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TRVRTT0NLT1BUX1NPX05PTkJMT0NLICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2d0dHkuaD4gaGVhZGVyIGZpbGUuICovCisvKiNkZWZpbmUgSEFWRV9TR1RUWV9IIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2FjdGlvbicgZnVuY3Rpb24uICovCisvKiNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gMSovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnaW50ZXJydXB0JyBmdW5jdGlvbi4gKi8KKy8qI2RlZmluZSBIQVZFX1NJR0lOVEVSUlVQVCAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWduYWwnIGZ1bmN0aW9uLiAqLworLyojZGVmaW5lIEhBVkVfU0lHTkFMIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNpZ25hbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxCisKKy8qIElmIHlvdSBoYXZlIHNpZ3NldGptcCAqLworLyojZGVmaW5lIEhBVkVfU0lHU0VUSk1QIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiBzaWdfYXRvbWljX3QgaXMgYW4gYXZhaWxhYmxlIHR5cGVkZWYuICovCisvKiNkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1QgMSovCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ19hdG9taWNfdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgdm9sYXRpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TSUdfQVRPTUlDX1RfVk9MQVRJTEUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NPQ0tFVCAxCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSBTUE5FR08gbGlicmFyeSBmYm9wZW5zc2wgKi8KKy8qICN1bmRlZiBIQVZFX1NQTkVHTyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFNTTF9nZXRfc2h1dGRvd24nIGZ1bmN0aW9uLiAqLworLyojZGVmaW5lIEhBVkVfU1NMX0dFVF9TSFVURE9XTiAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzc2wuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TU0xfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGJvb2wuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGlvLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURElPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZWNtcCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZXN0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSQ0FTRVNUUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY21waScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJDTVBJICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJEVVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmVycm9yX3InIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkVSUk9SX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmljbXAnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU1RSSUNNUCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjcHknIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkxDUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnN0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSU1RSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b2tfcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSVE9LX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvbGwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUlRPTEwgMQorCisvKiBpZiBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBpcyBkZWZpbmVkICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgdGltZXZhbCBzdHJ1Y3QuICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9maWxpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfRklMSU9fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2lvY3RsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19JT0NUTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1BBUkFNX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wb2xsLmg+IGhlYWRlciBmaWxlLiAqLworLyojZGVmaW5lIEhBVkVfU1lTX1BPTExfSCAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcmVzb3VyY2UuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1JFU09VUkNFX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU09DS0lPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX1VUSU1FX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW9zLmg+IGhlYWRlciBmaWxlLiAqLworLyojZGVmaW5lIEhBVkVfVEVSTUlPU19IIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pby5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qI2RlZmluZSBIQVZFX1RFUk1JT19IIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVElNRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0bGQuaD4gaGVhZGVyIGZpbGUuICovCisvKiNkZWZpbmUgSEFWRV9UTERfSCAxKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0bGRfc3RyZXJyb3InIGZ1bmN0aW9uLiAqLworLyojZGVmaW5lIEhBVkVfVExEX1NUUkVSUk9SIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVuYW1lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9VTkFNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1dGltZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVVRJTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHV0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1VUSU1FX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiBjb21waWxlciBzdXBwb3J0cyBDOTkgdmFyaWFkaWMgbWFjcm8gc3R5bGUuICovCisjZGVmaW5lIEhBVkVfVkFSSUFESUNfTUFDUk9TX0M5OSAxCisKKy8qIERlZmluZSB0byAxIGlmIGNvbXBpbGVyIHN1cHBvcnRzIG9sZCBnY2MgdmFyaWFkaWMgbWFjcm8gc3R5bGUuICovCisvKiNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfR0NDIDEqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd2luYmVyLmggaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9XSU5CRVJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd2luZG93cy5oIGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfV0lORE9XU19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5sZGFwLmggaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9XSU5MREFQX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbnNvY2syLmggaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9XSU5TT0NLMl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5zb2NrLmggaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9XSU5TT0NLX0ggKi8KKworLyogRGVmaW5lIHRoaXMgc3ltYm9sIGlmIHlvdXIgT1Mgc3VwcG9ydHMgY2hhbmdpbmcgdGhlIGNvbnRlbnRzIG9mIGFyZ3YgKi8KKy8qI2RlZmluZSBIQVZFX1dSSVRBQkxFX0FSR1YgMSovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3czJ0Y3BpcC5oIGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfV1MyVENQSVBfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHg1MDkuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9YNTA5X0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGFyZSBidWlsZGluZyBhIG5hdGl2ZSBXaW5kb3dzIHRhcmdldC4gKi8KKy8qICN1bmRlZiBOQVRJVkVfV0lORE9XUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0aGUgbGJlci5oIGhlYWRlciBmaWxlIGV2ZW4gd2l0aCBsZGFwLmggKi8KKy8qICN1bmRlZiBORUVEX0xCRVJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0aGUgbWFsbG9jLmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIHN0ZGxpYi5oICovCisvKiAjdW5kZWYgTkVFRF9NQUxMT0NfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBfUkVFTlRSQU5UIHByZXByb2Nlc3NvciBzeW1ib2wgbXVzdCBiZSBkZWZpbmVkLiAqLworLyogI3VuZGVmIE5FRURfUkVFTlRSQU5UICovCisKKy8qIERlZmluZSB0byAxIGlmIF9USFJFQURfU0FGRSBwcmVwcm9jZXNzb3Igc3ltYm9sIG11c3QgYmUgZGVmaW5lZC4gKi8KKy8qICN1bmRlZiBORUVEX1RIUkVBRF9TQUZFICovCisKKy8qIGNwdS1tYWNoaW5lLU9TICovCisjaWZkZWYgX19XSU5TX18KKyNkZWZpbmUgT1MgImkzODYtcGMtZXBvYzMyIgorI2VsaWYgX19NQVJNX18KKyNkZWZpbmUgT1MgImFybS11bmtub3duLWVwb2MzMiIKKyNlbHNlCisvKiBUaGlzIHdvbid0IGhhcHBlbiBvbiBhbnkgY3VycmVudCBTeW1iaWFuIHZlcnNpb24gKi8KKyNkZWZpbmUgT1MgInVua25vd24tdW5rbm93bi1lcG9jMzIiCisjZW5kaWYKKworLyogTmFtZSBvZiBwYWNrYWdlICovCisvKiNkZWZpbmUgUEFDS0FHRSAiY3VybCIqLworCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKy8qI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiYSBzdWl0YWJsZSBjdXJsIG1haWxpbmcgbGlzdCA9PiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvIiovCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKy8qI2RlZmluZSBQQUNLQUdFX05BTUUgImN1cmwiKi8KKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworLyojZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJjdXJsIC0iKi8KKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworLyojZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiY3VybCIqLworCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworLyojZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiLSIqLworCisvKiBhIHN1aXRhYmxlIGZpbGUgdG8gcmVhZCByYW5kb20gZGF0YSBmcm9tICovCisvKiNkZWZpbmUgUkFORE9NX0ZJTEUgIi9kZXYvdXJhbmRvbSIqLworCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxIGludAorI2RlZmluZSBSRUNWX1RZUEVfQVJHMiB2b2lkKgorI2RlZmluZSBSRUNWX1RZUEVfQVJHMyBzaXplX3QKKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzQgaW50CisjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWIHNzaXplX3QKKworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgaW50CisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMiB2b2lkCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBzaXplX3QKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc0IGludAorI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzUgc3RydWN0IHNvY2thZGRyCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBzaXplX3QKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9SRVRWIHNzaXplX3QKKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyX0lTX1ZPSUQgMQorCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcxIGludAorI2RlZmluZSBTRU5EX1FVQUxfQVJHMiBjb25zdAorI2RlZmluZSBTRU5EX1RZUEVfQVJHMiB2b2lkKgorI2RlZmluZSBTRU5EX1RZUEVfQVJHMyBzaXplX3QKKyNkZWZpbmUgU0VORF9UWVBFX0FSRzQgaW50CisjZGVmaW5lIFNFTkRfVFlQRV9SRVRWIHNzaXplX3QKKworCisvKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoYGludCcgb3IgYHZvaWQnKS4gKi8KKy8qI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQqLworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIGBzZWxlY3QnLiAqLworI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcxIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyAyLCAzIGFuZCA0IGZvciBgc2VsZWN0Jy4gKi8KKyNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHMjM0IChmZF9zZXQgKikKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA1IGZvciBgc2VsZWN0Jy4gKi8KKyNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHNSAoc3RydWN0IHRpbWV2YWwgKikKKworLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0lOVCA0CisKKy8qIFRoZSBzaXplIG9mIGBvZmZfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX09GRl9UIDgKKworLyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgorCisvKiBUaGUgc2l6ZSBvZiBgc2l6ZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfU0laRV9UIDQKKworLyogVGhlIHNpemUgb2YgYHRpbWVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1RJTUVfVCA0CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI2RlZmluZSBTVERDX0hFQURFUlMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KKyNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBjLWFyZXMgc3VwcG9ydCAqLworLyogI3VuZGVmIFVTRV9BUkVTICovCisKKy8qIERlZmluZSB0byBkaXNhYmxlIG5vbi1ibG9ja2luZyBzb2NrZXRzICovCisvKiAjdW5kZWYgVVNFX0JMT0NLSU5HX1NPQ0tFVFMgKi8KKworLyogaWYgR251VExTIGlzIGVuYWJsZWQgKi8KKy8qICN1bmRlZiBVU0VfR05VVExTICovCisKKy8qIGlmIGxpYlNTSDIgaXMgaW4gdXNlICovCisvKiNkZWZpbmUgVVNFX0xJQlNTSDIgMSovCisKKy8qIElmIHlvdSB3YW50IHRvIGJ1aWxkIGN1cmwgd2l0aCB0aGUgYnVpbHQtaW4gbWFudWFsICovCisvKiNkZWZpbmUgVVNFX01BTlVBTCAxKi8KKworLyogaWYgTlNTIGlzIGVuYWJsZWQgKi8KKy8qICN1bmRlZiBVU0VfTlNTICovCisKKy8qIHRvIGVuYWJsZSBTU1BJIHN1cHBvcnQgKi8KKy8qICN1bmRlZiBVU0VfV0lORE9XU19TU1BJICovCisKKy8qIERlZmluZSB0byAxIGlmIHVzaW5nIHlhU1NMIGluIE9wZW5TU0wgY29tcGF0aWJpbGl0eSBtb2RlLiAqLworLyogI3VuZGVmIFVTRV9ZQVNTTEVNVUwgKi8KKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworLyojZGVmaW5lIFZFUlNJT04gIjcuMTguMi1DVlMiKi8KKworLyogRGVmaW5lIHRvIGF2b2lkIGF1dG9tYXRpYyBpbmNsdXNpb24gb2Ygd2luc29jay5oICovCisvKiAjdW5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBvbiBBSVggMy4KKyAgIFN5c3RlbSBoZWFkZXJzIHNvbWV0aW1lcyBkZWZpbmUgdGhpcy4KKyAgIFdlIGp1c3Qgd2FudCB0byBhdm9pZCBhIHJlZGVmaW5pdGlvbiBlcnJvciBtZXNzYWdlLiAgKi8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UKKy8qICMgdW5kZWYgX0FMTF9TT1VSQ0UgKi8KKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLworI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorCisvKiBEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuICovCisvKiAjdW5kZWYgX0xBUkdFX0ZJTEVTICovCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworLyogI3VuZGVmIGNvbnN0ICovCisKKy8qIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIGluX2FkZHJfdCBpZiBub3QgZGVmaW5lZCAqLworLyogI3VuZGVmIGluX2FkZHJfdCAqLworCisvKiBEZWZpbmUgdG8gYF9faW5saW5lX18nIG9yIGBfX2lubGluZScgaWYgdGhhdCdzIHdoYXQgdGhlIEMgY29tcGlsZXIKKyAgIGNhbGxzIGl0LCBvciB0byBub3RoaW5nIGlmICdpbmxpbmUnIGlzIG5vdCBzdXBwb3J0ZWQgdW5kZXIgYW55IG5hbWUuICAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKy8qIERlZmluZSB0byBgdW5zaWduZWQgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKy8qICN1bmRlZiBzaXplX3QgKi8KKworLyogdGhlIHNpZ25lZCB2ZXJzaW9uIG9mIHNpemVfdCAqLworLyogI3VuZGVmIHNzaXplX3QgKi8KKworLyogRW5hYmxpbmcgY3VybCBkZWJ1ZyBtb2RlIHdoZW4gYnVpbGRpbmcgaW4gU3ltYmlhbiBkZWJ1ZyBtb2RlIHdvdWxkIHdvcmsgKi8KKy8qIGV4Y2VwdCB0aGF0IGRlYnVnIG1vZGUgaW50cm9kdWNlcyBuZXcgZXhwb3J0cyB0aGF0IG11c3QgYmUgZnJvemVuLiAqLworI2lmZGVmIF9ERUJVRworLyogI2RlZmluZSBDVVJMREVCVUcgKi8KKyNlbmRpZgorCisvKiBzeXMvY2RlZnMuaCBmYWlscyB0byBkZWZpbmUgdGhpcyBmb3IgV0lOU0NXIHByaW9yIHRvIFN5bWJpYW4gT1MgdmVyLiA5LjQgKi8KKyNpZm5kZWYgX19MT05HX0xPTkdfU1VQUE9SVEVECisjZGVmaW5lIF9fTE9OR19MT05HX1NVUFBPUlRFRAorI2VuZGlmCisKKy8qIEVuYWJsZSBhcHByb3ByaWF0ZSBoZWFkZXIgb25seSB3aGVuIHpsaWIgc3VwcG9ydCBpcyBlbmFibGVkICovCisjaWZkZWYgSEFWRV9MSUJaCisjZGVmaW5lIEhBVkVfWkxJQl9IIDEKKyNlbmRpZgorCisvKiBFbmFibGUgYXBwcm9wcmlhdGUgZGVmaW5pdGlvbnMgb25seSB3aGVuIE9wZW5TU0wgc3VwcG9ydCBpcyBlbmFibGVkICovCisjaWZkZWYgVVNFX1NTTEVBWQorLyogaWYgT3BlblNTTCBpcyBpbiB1c2UgKi8KKyNkZWZpbmUgVVNFX09QRU5TU0wKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2NvbmZpZy10cGYuaCBiL2N1cmwtNy4yNS4wL2xpYi9jb25maWctdHBmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNhMjE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jb25maWctdHBmLmgKQEAgLTAsMCArMSw3NzkgQEAKKyNpZm5kZWYgX19MSUJDT05GSUdUUEZfSAorI2RlZmluZSBfX0xJQkNPTkZJR1RQRl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgbGliL2NvbmZpZy10cGYuaCAtIEhhbmQgY3JhZnRlZCBjb25maWcgZmlsZSBmb3IgVFBGICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgIEZFQVRVUkVTLCBGVU5DVElPTlMsIGFuZCBERUZJTklUSU9OUyAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE5PVEU6IFJlZmVyIGFsc28gdG8gdGhlIC5tYWsgZmlsZSBmb3Igc29tZSBvZiB0aGUgZmxhZ3MgYmVsb3cgKi8KKworLyogd2hlbiBidWlsZGluZyBsaWJjdXJsIGl0c2VsZiAqLworLyogI3VuZGVmIEJVSUxESU5HX0xJQkNVUkwgKi8KKworLyogdG8gZGlzYWJsZSBjb29raWVzIHN1cHBvcnQgKi8KKy8qICN1bmRlZiBDVVJMX0RJU0FCTEVfQ09PS0lFUyAqLworCisvKiB0byBkaXNhYmxlIGNyeXB0b2dyYXBoaWMgYXV0aGVudGljYXRpb24gKi8KKy8qICN1bmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEggKi8KKworLyogdG8gZGlzYWJsZSBESUNUICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX0RJQ1QgKi8KKworLyogdG8gZGlzYWJsZSBGSUxFICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX0ZJTEUgKi8KKworLyogdG8gZGlzYWJsZSBGVFAgKi8KKy8qICN1bmRlZiBDVVJMX0RJU0FCTEVfRlRQICovCisKKy8qIHRvIGRpc2FibGUgSFRUUCAqLworLyogI3VuZGVmIENVUkxfRElTQUJMRV9IVFRQICovCisKKy8qIHRvIGRpc2FibGUgTERBUCAqLworLyogI3VuZGVmIENVUkxfRElTQUJMRV9MREFQICovCisKKy8qIHRvIGRpc2FibGUgVEVMTkVUICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX1RFTE5FVCAqLworCisvKiB0byBkaXNhYmxlIFRGVFAgKi8KKy8qICN1bmRlZiBDVVJMX0RJU0FCTEVfVEZUUCAqLworCisvKiB0byBkaXNhYmxlIHZlcmJvc2Ugc3RyaW5ncyAqLworLyogI3VuZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MgKi8KKworLyogd2hlbiBub3QgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSAqLworLyogI3VuZGVmIENVUkxfU1RBVElDTElCICovCisKKy8qIGxiZXIgZHluYW1pYyBsaWJyYXJ5IGZpbGUgKi8KKy8qICN1bmRlZiBETF9MQkVSX0ZJTEUgKi8KKworLyogbGRhcCBkeW5hbWljIGxpYnJhcnkgZmlsZSAqLworLyogI3VuZGVmIERMX0xEQVBfRklMRSAqLworCisvKiB5b3VyIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vbiBzb2NrZXQgcGF0aG5hbWUgKi8KKy8qICN1bmRlZiBFR0RfU09DS0VUICovCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgSVB2NiBzdXBwb3J0ICovCisvKiAjdW5kZWYgRU5BQkxFX0lQVjYgKi8KKworLyogRGVmaW5lIGlmIHN0cnVjdCBzb2NrYWRkcl9pbjYgaGFzIHRoZSBzaW42X3Njb3BlX2lkIG1lbWJlciAqLworLyogI3VuZGVmIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgKi8KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBnZXRuYW1laW5mby4gKi8KKy8qICN1bmRlZiBHRVROQU1FSU5GT19UWVBFX0FSRzEgKi8KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBnZXRuYW1laW5mby4gKi8KKy8qICN1bmRlZiBHRVROQU1FSU5GT19UWVBFX0FSRzIgKi8KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZ3MgNCBhbmQgNiBmb3IgZ2V0bmFtZWluZm8uICovCisvKiAjdW5kZWYgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiAqLworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDcgZm9yIGdldG5hbWVpbmZvLiAqLworLyogI3VuZGVmIEdFVE5BTUVJTkZPX1RZUEVfQVJHNyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYWxhcm0gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQUxBUk0gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9BUlBBX0lORVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXJwYS90ZnRwLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfQVJQQV9URlRQX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhc3NlcnQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQVNTRVJUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJhc2VuYW1lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9CQVNFTkFNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvc2Vzb2NrZXQnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfQ0xPU0VTT0NLRVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBDUllQVE9fY2xlYW51cF9hbGxfZXhfZGF0YScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9DUllQVE9fQ0xFQU5VUF9BTExfRVhfREFUQSAqLworI2RlZmluZSBIQVZFX0NSWVBUT19DTEVBTlVQX0FMTF9FWF9EQVRBIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9DUllQVE9fSCAqLworI2RlZmluZSBIQVZFX0NSWVBUT19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkZXMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9ERVNfSCAqLworI2RlZmluZSBIQVZFX0RFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXMnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfRU5HSU5FX0xPQURfQlVJTFRJTl9FTkdJTkVTICovCisjZGVmaW5lIEhBVkVfRU5HSU5FX0xPQURfQlVJTFRJTl9FTkdJTkVTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlcnJuby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9FUlJOT19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlcnIuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9FUlJfSCAqLworI2RlZmluZSBIQVZFX0VSUl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9GQ05UTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZjbnRsIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZDTlRMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGZjbnRsIE9fTk9OQkxPQ0sgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkNOVExfT19OT05CTE9DSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZm9yaycgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9GT1JLICovCisjZGVmaW5lIEhBVkVfRk9SSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnRydW5jYXRlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GVFJVTkNBVEUgMQorCisvKiBEZWZpbmUgaWYgZ2V0YWRkcmluZm8gZXhpc3RzIGFuZCB3b3JrcyAqLworLyogI3VuZGVmIEhBVkVfR0VUQUREUklORk8gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRldWlkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRFVUlEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0YnlhZGRyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSIDEKKworLyogSWYgeW91IGhhdmUgZ2V0aG9zdGJ5bmFtZSAqLworI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RieW5hbWVfcicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1IgKi8KKworLyogZ2V0aG9zdGJ5bmFtZV9yKCkgdGFrZXMgMyBhcmdzICovCisvKiAjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfMyAqLworCisvKiBnZXRob3N0YnluYW1lX3IoKSB0YWtlcyA1IGFyZ3MgKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl81ICovCisKKy8qIGdldGhvc3RieW5hbWVfcigpIHRha2VzIDYgYXJncyAqLworLyogI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzYgMSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0bmFtZWluZm8gZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9HRVROQU1FSU5GTyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBhc3NfcicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9HRVRQQVNTX1IgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwcm90b2J5bmFtZScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9HRVRQUk9UT0JZTkFNRSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHB3dWlkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRQV1VJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cmxpbWl0JyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVFJMSU1JVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHRpbWVvZmRheScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKKworLyogd2UgaGF2ZSBhIGdsaWJjLXN0eWxlIHN0cmVycm9yX3IoKSAqLworLyogI3VuZGVmIEhBVkVfR0xJQkNfU1RSRVJST1JfUiAqLworI2RlZmluZSBIQVZFX0dMSUJDX1NUUkVSUk9SX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdtdGltZV9yJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HTVRJTUVfUiAxCisKKy8qIGlmIHlvdSBoYXZlIHRoZSBnc3NhcGkgbGlicmFyaWVzICovCisvKiAjdW5kZWYgSEFWRV9HU1NBUEkgKi8KKworLyogaWYgeW91IGhhdmUgdGhlIEdOVSBnc3NhcGkgbGlicmFyaWVzICovCisvKiAjdW5kZWYgSEFWRV9HU1NHTlUgKi8KKworLyogaWYgeW91IGhhdmUgdGhlIEhlaW1kYWwgZ3NzYXBpIGxpYnJhcmllcyAqLworLyogI3VuZGVmIEhBVkVfR1NTSEVJTURBTCAqLworCisvKiBpZiB5b3UgaGF2ZSB0aGUgTUlUIGdzc2FwaSBsaWJyYXJpZXMgKi8KKy8qICN1bmRlZiBIQVZFX0dTU01JVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGljb252JyBmdW5jdGlvbnMuICovCisjZGVmaW5lIEhBVkVfSUNPTlYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlkbmFfc3RyZXJyb3InIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSUROQV9TVFJFUlJPUiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlkbl9mcmVlJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lETl9GUkVFICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aWRuLWZyZWUuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9JRE5fRlJFRV9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9hZGRyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JTkVUX0FERFIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfbnRvcCBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lORVRfTlRPUCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfcHRvbiBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lORVRfUFRPTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW9jdGwgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU9DVEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGwgRklPTkJJTyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTF9GSU9OQklPIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGlvY3Rsc29ja2V0IGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSU9DVExTT0NLRVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3Rsc29ja2V0IEZJT05CSU8gZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBJb2N0bFNvY2tldCBjYW1lbCBjYXNlIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSU9DVExTT0NLRVRfQ0FNRUwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIElvY3RsU29ja2V0IGNhbWVsIGNhc2UgRklPTkJJTyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMX0ZJT05CSU8gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0lPX0ggKi8KKworLyogaWYgeW91IGhhdmUgdGhlIEtlcmJlcm9zNCBsaWJyYXJpZXMgKGluY2x1ZGluZyAtbGRlcykgKi8KKy8qICN1bmRlZiBIQVZFX0tSQjQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrcmJfZ2V0X291cl9pcF9mb3JfcmVhbG0nIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfS1JCX0dFVF9PVVJfSVBfRk9SX1JFQUxNICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8a3JiLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfS1JCX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJnZW4uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9MSUJHRU5fSCAxICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRuJyBsaWJyYXJ5ICgtbGlkbikuICovCisvKiAjdW5kZWYgSEFWRV9MSUJJRE4gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZXNvbHYnIGxpYnJhcnkgKC1scmVzb2x2KS4gKi8KKy8qICN1bmRlZiBIQVZFX0xJQlJFU09MViAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlc29sdmUnIGxpYnJhcnkgKC1scmVzb2x2ZSkuICovCisvKiAjdW5kZWYgSEFWRV9MSUJSRVNPTFZFICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBsaWJyYXJ5ICgtbHNvY2tldCkuICovCisvKiAjdW5kZWYgSEFWRV9MSUJTT0NLRVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzc2wnIGxpYnJhcnkgKC1sc3NsKS4gKi8KKy8qICN1bmRlZiBIQVZFX0xJQlNTTCAqLworI2RlZmluZSBIQVZFX0xJQlNTTCAxCisKKy8qIGlmIHpsaWIgaXMgYXZhaWxhYmxlICovCisvKiAjdW5kZWYgSEFWRV9MSUJaICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGltaXRzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xJTUlUU19IIDEKKworLyogaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBMTCAqLworI2RlZmluZSBIQVZFX0xMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsb2NhbGUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvY2FsdGltZV9yJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9MT0NBTFRJTUVfUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgJ2xvbmcgbG9uZycgZGF0YSB0eXBlLiAqLworI2RlZmluZSBIQVZFX0xPTkdMT05HIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdGhlIG1hbGxvYy5oIGhlYWRlciBmaWxlIGV2ZW4gd2l0aCBzdGRsaWIuaCAgKi8KKy8qICN1bmRlZiBORUVEX01BTExPQ19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRkYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVREQl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC90Y3AuaD4gaGVhZGVyIGZpbGUuICovCisvKiB1bmRlZiBIQVZFX05FVElORVRfVENQX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUX0lGX0ggMQorCisvKiBEZWZpbmUgaWYgTklfV0lUSFNDT1BFSUQgZXhpc3RzIGFuZCB3b3JrcyAqLworLyogI3VuZGVmIEhBVkVfTklfV0lUSFNDT1BFSUQgKi8KKworLyogd2UgaGF2ZSBubyBzdHJlcnJvcl9yKCkgcHJvdG8gKi8KKy8qICN1bmRlZiBIQVZFX05PX1NUUkVSUk9SX1JfREVDTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvY3J5cHRvLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfT1BFTlNTTF9DUllQVE9fSCAqLworI2RlZmluZSBIQVZFX09QRU5TU0xfQ1JZUFRPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZW5naW5lLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfT1BFTlNTTF9FTkdJTkVfSCAqLworI2RlZmluZSBIQVZFX09QRU5TU0xfRU5HSU5FX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZXJyLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfT1BFTlNTTF9FUlJfSCAqLworI2RlZmluZSBIQVZFX09QRU5TU0xfRVJSX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcGVtLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfT1BFTlNTTF9QRU1fSCAqLworI2RlZmluZSBIQVZFX09QRU5TU0xfUEVNX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcGtjczEyLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfT1BFTlNTTF9QS0NTMTJfSCAqLworI2RlZmluZSBIQVZFX09QRU5TU0xfUEtDUzEyX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcnNhLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfT1BFTlNTTF9SU0FfSCAqLworI2RlZmluZSBIQVZFX09QRU5TU0xfUlNBX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvc3NsLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfT1BFTlNTTF9TU0xfSCAqLworI2RlZmluZSBIQVZFX09QRU5TU0xfU1NMX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wveDUwOS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX09QRU5TU0xfWDUwOV9IICovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9YNTA5X0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBlbS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1BFTV9IICovCisjZGVmaW5lIEhBVkVfUEVNX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBlcnJvcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUEVSUk9SIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwaXBlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QSVBFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb2xsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1BPTEwgKi8KKworLyogSWYgeW91IGhhdmUgYSBmaW5lIHBvbGwgKi8KKy8qICN1bmRlZiBIQVZFX1BPTExfRklORSAqLworCisvKiB3ZSBoYXZlIGEgUE9TSVgtc3R5bGUgc3RyZXJyb3JfcigpICovCisvKiAjdW5kZWYgSEFWRV9QT1NJWF9TVFJFUlJPUl9SICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHdkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1BXRF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBSQU5EX2VnZCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9SQU5EX0VHRCAqLworI2RlZmluZSBIQVZFX1JBTkRfRUdEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBSQU5EX3NjcmVlbicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9SQU5EX1NDUkVFTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfc3RhdHVzJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1JBTkRfU1RBVFVTICovCisjZGVmaW5lIEhBVkVfUkFORF9TVEFUVVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHJzYS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1JTQV9IICovCisjZGVmaW5lIEhBVkVfUlNBX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbGVjdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VMRUNUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZXRqbXAuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU0VUSk1QX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGxvY2FsZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRybGltaXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVFJMSU1JVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzZXRzb2Nrb3B0IGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU0VUU09DS09QVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgc2V0c29ja29wdCBTT19OT05CTE9DSyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1NFVFNPQ0tPUFRfU09fTk9OQkxPQ0sgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZ3R0eS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NHVFRZX0ggMSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2FjdGlvbicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHQUNUSU9OIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWdpbnRlcnJ1cHQnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU0lHSU5URVJSVVBUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnbmFsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdOQUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNpZ25hbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ19hdG9taWNfdCBpcyBhbiBhdmFpbGFibGUgdHlwZWRlZi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBzaWdfYXRvbWljX3QgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIHZvbGF0aWxlLiAqLworLyogI3VuZGVmIEhBVkVfU0lHX0FUT01JQ19UX1ZPTEFUSUxFICovCisKKy8qIElmIHlvdSBoYXZlIHNpZ3NldGptcCAqLworLyogI3VuZGVmIEhBVkVfU0lHU0VUSk1QICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TT0NLRVQgMQorCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgU1BORUdPIGxpYnJhcnkgZmJvcGVuc3NsICovCisvKiAjdW5kZWYgSEFWRV9TUE5FR08gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzc2wuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TU0xfSCAqLworI2RlZmluZSBIQVZFX1NTTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZWNtcCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY21waScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJDTVBJICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJEVVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmVycm9yX3InIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkVSUk9SX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmljbXAnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU1RSSUNNUCAqLworI2RlZmluZSBIQVZFX1NUUklDTVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjcHknIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU1RSTENQWSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnN0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSU1RSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b2tfcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSVE9LX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvbGwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUlRPTEwgMQorCisvKiBpZiBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBpcyBkZWZpbmVkICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRSAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBzdHJ1Y3QgdGltZXZhbCAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9USU1FVkFMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZmlsaW8uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX0ZJTElPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pb2N0bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfSU9DVExfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19QT0xMX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcmVzb3VyY2UuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1JFU09VUkNFX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tpby5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19TT0NLSU9fSCAqLworI2RlZmluZSBIQVZFX1NZU19TT0NLSU9fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdXRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfVVRJTUVfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9URVJNSU9TX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW8uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9URVJNSU9fSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVElNRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0bGQuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9UTERfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRsZF9zdHJlcnJvcicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9UTERfU1RSRVJST1IgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHV0aW1lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9VVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVVRJTUVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jazIuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9XSU5TT0NLMl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jay5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1dJTlNPQ0tfSCAqLworCisvKiBEZWZpbmUgdGhpcyBzeW1ib2wgaWYgeW91ciBPUyBzdXBwb3J0cyBjaGFuZ2luZyB0aGUgY29udGVudHMgb2YgYXJndiAqLworLyogI3VuZGVmIEhBVkVfV1JJVEFCTEVfQVJHViAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd3MydGNwaXAuaCBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1dTMlRDUElQX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx4NTA5Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfWDUwOV9IICovCisKKy8qIGlmIHlvdSBoYXZlIHRoZSB6bGliLmggaGVhZGVyIGZpbGUgKi8KKy8qICN1bmRlZiBIQVZFX1pMSUJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBfUkVFTlRSQU5UIHByZXByb2Nlc3NvciBzeW1ib2wgbXVzdCBiZSBkZWZpbmVkLiAqLworLyogI3VuZGVmIE5FRURfUkVFTlRSQU5UICovCisKKy8qIERlZmluZSB0byAxIGlmIF9USFJFQURfU0FGRSBwcmVwcm9jZXNzb3Igc3ltYm9sIG11c3QgYmUgZGVmaW5lZC4gKi8KKy8qICN1bmRlZiBORUVEX1RIUkVBRF9TQUZFICovCisKKy8qIGNwdS1tYWNoaW5lLU9TICovCisjZGVmaW5lIE9TICJzMzkweC1pYm0tdHBmIgorCisvKiBOYW1lIG9mIHBhY2thZ2UgKi8KKyNkZWZpbmUgUEFDS0FHRSAiY3VybCIKKworLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJhIHN1aXRhYmxlIGN1cmwgbWFpbGluZyBsaXN0ID0+IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC8iCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9OQU1FICJjdXJsIgorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJjdXJsIC0iCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJjdXJsIgorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIi0iCisKKy8qIGEgc3VpdGFibGUgZmlsZSB0byByZWFkIHJhbmRvbSBkYXRhIGZyb20gKi8KKy8qICN1bmRlZiBSQU5ET01fRklMRSAqLworCisvKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoYGludCcgb3IgYHZvaWQnKS4gKi8KKyNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgYHNlbGVjdCcuICovCisjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzEgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDIsIDMgYW5kIDQgZm9yIGBzZWxlY3QnLiAqLworI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcyMzQgKGZkX3NldCAqKQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDUgZm9yIGBzZWxlY3QnLiAqLworI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkc1IChzdHJ1Y3QgdGltZXZhbCAqKQorCisvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfSU5UIDQKKworLyogVGhlIHNpemUgb2YgYG9mZl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfT0ZGX1QgOAorCisvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9TSE9SVCAyCisKKy8qIFRoZSBzaXplIG9mIGBzaXplX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9TSVpFX1QgOAorCisvKiBUaGUgc2l6ZSBvZiBgdGltZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfVElNRV9UIDgKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIFNURENfSEVBREVSUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLworI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGFyZXMgc3VwcG9ydCAqLworLyogI3VuZGVmIFVTRV9BUkVTICovCisKKy8qIERlZmluZSB0byBkaXNhYmxlIG5vbi1ibG9ja2luZyBzb2NrZXRzICovCisvKiAjdW5kZWYgVVNFX0JMT0NLSU5HX1NPQ0tFVFMgKi8KKworLyogaWYgR251VExTIGlzIGVuYWJsZWQgKi8KKy8qICN1bmRlZiBVU0VfR05VVExTICovCisKKy8qIElmIHlvdSB3YW50IHRvIGJ1aWxkIGN1cmwgd2l0aCB0aGUgYnVpbHQtaW4gbWFudWFsICovCisvKiAjdW5kZWYgVVNFX01BTlVBTCAqLworCisvKiBpZiBPcGVuU1NMIGlzIGluIHVzZSAqLworLyogI3VuZGVmIFVTRV9PUEVOU1NMICovCisKKy8qIGlmIFNTTCBpcyBlbmFibGVkICovCisvKiAjdW5kZWYgVVNFX1NTTEVBWSAqLworCisvKiB0byBlbmFibGUgU1NQSSBzdXBwb3J0ICovCisvKiAjdW5kZWYgVVNFX1dJTkRPV1NfU1NQSSAqLworCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjZGVmaW5lIFZFUlNJT04gIm5vdC11c2VkIgorCisvKiBEZWZpbmUgdG8gYXZvaWQgYXV0b21hdGljIGluY2x1c2lvbiBvZiB3aW5zb2NrLmggKi8KKy8qICN1bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOICovCisKKy8qIERlZmluZSB0byAxIGlmIG9uIEFJWCAzLgorICAgU3lzdGVtIGhlYWRlcnMgc29tZXRpbWVzIGRlZmluZSB0aGlzLgorICAgV2UganVzdCB3YW50IHRvIGF2b2lkIGEgcmVkZWZpbml0aW9uIGVycm9yIG1lc3NhZ2UuICAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorLyogIyB1bmRlZiBfQUxMX1NPVVJDRSAqLworI2VuZGlmCisKKy8qIE51bWJlciBvZiBiaXRzIGluIGEgZmlsZSBvZmZzZXQsIG9uIGhvc3RzIHdoZXJlIHRoaXMgaXMgc2V0dGFibGUuICovCisvKiAjdW5kZWYgX0ZJTEVfT0ZGU0VUX0JJVFMgKi8KKworLyogRGVmaW5lIGZvciBsYXJnZSBmaWxlcywgb24gQUlYLXN0eWxlIGhvc3RzLiAqLworLyogI3VuZGVmIF9MQVJHRV9GSUxFUyAqLworCisvKiBEZWZpbmUgdG8gZW1wdHkgaWYgYGNvbnN0JyBkb2VzIG5vdCBjb25mb3JtIHRvIEFOU0kgQy4gKi8KKy8qICN1bmRlZiBjb25zdCAqLworCisvKiB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBpbl9hZGRyX3QgaWYgbm90IGRlZmluZWQgKi8KKy8qICN1bmRlZiBpbl9hZGRyX3QgKi8KKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgc2l6ZV90ICovCisKKy8qIHRoZSBzaWduZWQgdmVyc2lvbiBvZiBzaXplX3QgKi8KKy8qICN1bmRlZiBzc2l6ZV90ICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRuYW1laW5mbyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVE5BTUVJTkZPIDEgKi8KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisvKiAjdW5kZWYgR0VUTkFNRUlORk9fUVVBTF9BUkcxIGNvbnN0ICovCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisvKiAjdW5kZWYgR0VUTkFNRUlORk9fVFlQRV9BUkcxIHN0cnVjdCBzb2NrYWRkciAqICovCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgZ2V0bmFtZWluZm8uICovCisvKiAjdW5kZWYgR0VUTkFNRUlORk9fVFlQRV9BUkcyIHNvY2tsZW5fdCAqLworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyA0IGFuZCA2IGZvciBnZXRuYW1laW5mby4gKi8KKy8qICN1bmRlZiBHRVROQU1FSU5GT19UWVBFX0FSRzQ2IHNpemVfdCAqLworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDcgZm9yIGdldG5hbWVpbmZvLiAqLworLyogI3VuZGVmIEdFVE5BTUVJTkZPX1RZUEVfQVJHNyBpbnQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHJlY3YgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDViAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzEgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzIgY2hhciAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzMgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWIGludAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgcmVjdmZyb20gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDVkZST00gMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyIGNoYXIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA1IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkcgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNlbmQgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VORCAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzEgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDIgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfUVVBTF9BUkcyIGNvbnN0CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzIgY2hhciAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzMgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9SRVRWIGludAorCisjZGVmaW5lIENVUkxfRE9FU19DT05WRVJTSU9OUworI2lmbmRlZiBDVVJMX0lDT05WX0NPREVTRVRfT0ZfSE9TVAorI2RlZmluZSBDVVJMX0lDT05WX0NPREVTRVRfT0ZfSE9TVCAiSUJNLTEwNDciCisjZW5kaWYKKworCisjZW5kaWYgLyogX19MSUJDT05GSUdUUEZfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2NvbmZpZy12bXMuaCBiL2N1cmwtNy4yNS4wL2xpYi9jb25maWctdm1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjNzdkMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jb25maWctdm1zLmgKQEAgLTAsMCArMSwzOTggQEAKKyNpZm5kZWYgSEVBREVSX0NPTkZJR19WTVNfSAorI2RlZmluZSBIRUFERVJfQ09ORklHX1ZNU19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIE1TSywgMDIvMDUvMDQsIEhhbmQgZWRpdGVkIGZvciB0cmFpbCBidWlsZCBvbiBBbHBoYSBWNy4zLCBERUMgQyA2LjUtMDAzICovCisvKiBNU0ssIDAzLzA5LzA0LCBTZWVtcyB0byB3b3JrIGZvciBhbGwgcGxhdGZvcm1zIEkndmUgYnVpbHQgb24gc28gZmFyLiAgICAqLworLyogICAgICBBZGRlZCBIQVZFX1NZU19JT0NUTF9IIGRlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFRFUywgMTAvMDYvMDQsIEFkZGVkIE1BWF9JTklUSUFMX1BPU1RfU0laRSwgSEFWRV9CQVNFTkFNRSAgICAgICAgICAgICAgICovCisvKiBNU0ssIDAyLzAyLzA1LCBDaGFuZ2VkIEhBVkVfVEVSTUlPU19IIHRvIGFuIHVuZGVmIHNpbmNlIHRoZSBjaGFuZ2UgaW4gICAqLworLyogICAgICAgICAgICAgICAgZ2V0cGFzcy5jIG5vIGxvbmdlciB1bmRlZidkIGl0IGR1cmluZyBjb21waWxlLiAgICAgICAgICAgKi8KKy8qIE1TSywgMDIvMDgvMDUsIHR1cm5lZCB0d28gY29uZmlnLXZtcyBmaWxlcyBpbnRvIG9uZSBieSB1c2luZyBVU0VfU1NMRUFZICovCisvKiBNUFosIDEyLzI4LzA1LCBjaGFuZ2VkIEhBVkVfU1RSVE9LX1IgZGVmaW5lIHRvIHVzZSBDUlRMX1ZFUiAgICAgICAgICAgICAqLworLyogTVNLLCAwMS8yNy8wNywgbmVlZGVkIHRvIGFkZCBIQVZFX1NUUlVDVF9USU1FVkFMIGRlZmluZSAgICAgICAgICAgICAgICAgKi8KKworLyogRGVmaW5lIGNwdS1tYWNoaW5lLU9TICovCisjaWYgZGVmaW5lZChfX2FscGhhKQorIyAgZGVmaW5lIE9TICJBTFBIQS1IUC1WTVMiCisjZWxpZiBkZWZpbmVkKF9fdmF4KQorIyAgZGVmaW5lIE9TICJWQVgtSFAtVk1TIgorI2VsaWYgZGVmaW5lZChfX2lhNjQpCisjICBkZWZpbmUgT1MgIklBNjQtSFAtVk1TIgorI2Vsc2UKKyMgIGRlZmluZSBPUyAiVU5LTk9XTi1IUC1WTVMiCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAgKi8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogRGVmaW5lIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAgKi8KKyNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKKworLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0lOVCA0CisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGRvdWJsZScsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFIDgKKworLyogVGhlIHNpemUgb2YgYGxvbmcgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4CisKKy8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1NIT1JUIDIKKworLyogVGhlIHNpemUgb2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1NJWkVfVCA0CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYWxhcm0gZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX0FMQVJNIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRldWlkIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9HRVRFVUlEIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBiYXNlbmFtZSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9CQVNFTkFNRSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkciBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdG5hbWUgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX0dFVEhPU1ROQU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwd3VpZCBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfR0VUUFdVSUQgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHNlcnZieW5hbWUgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX0dFVFNFUlZCWU5BTUUgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHRpbWVvZmRheSBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpbmV0X2FkZHIgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX0lORVRfQUREUiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaW9jdGwgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU9DVEwgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3RsIEZJT05CSU8gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU9DVExfRklPTkJJTyAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGwgU0lPQ0dJRkFERFIgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU9DVExfU0lPQ0dJRkFERFIgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHBlcnJvciBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfUEVSUk9SIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZWxlY3QgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX1NFTEVDVCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0dmJ1ZiBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfU0VUVkJVRiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2lnYWN0aW9uIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNpZ25hbCBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfU0lHTkFMIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzb2NrZXQgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX1NPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyY2FzZWNtcCBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyY21waSBmdW5jdGlvbi4gICovCisvKiAjZGVmaW5lIEhBVkVfU1RSQ01QSSAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyZHVwIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9TVFJEVVAgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmZ0aW1lIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9TVFJGVElNRSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyaWNtcCBmdW5jdGlvbi4gICovCisvKiAjZGVmaW5lIEhBVkVfU1RSSUNNUCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3Ryc3RyIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9TVFJTVFIgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZ0cnVuY2F0ZSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GVFJVTkNBVEUgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHVuYW1lIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9VTkFNRSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9FUlJOT19IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZXJyLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9FUlJfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9GQ05UTF9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8Z2V0b3B0Lmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9HRVRPUFRfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG1hbGxvYy5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfTUFMTE9DX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IG5lZWQgdGhlIG1hbGxvYy5oIGhlYWRlciBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmggICovCisvKiAjZGVmaW5lIE5FRURfTUFMTE9DX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX05FVF9JRl9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bmV0ZGIuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX05FVERCX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2lmX2V0aGVyLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9ORVRJTkVUX0lGX0VUSEVSX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9ORVRJTkVUX0lOX0ggMQorCisvKiBPcGVuU1NMIHNlY3Rpb24gc3RhcnRzIGhlcmUgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIGEgd29ya2luZyBPcGVuU1NMIGluc3RhbGxhdGlvbiAqLworI2lmZGVmIFVTRV9TU0xFQVkKKworLyogaWYgT3BlblNTTCBpcyBpbiB1c2UgKi8KKyNkZWZpbmUgVVNFX09QRU5TU0wgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGNyeXB0byBsaWJyYXJ5ICgtbGNyeXB0bykuICAqLworI2RlZmluZSBIQVZFX0xJQkNSWVBUTyAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3NsIGxpYnJhcnkgKC1sc3NsKS4gICovCisjZGVmaW5lIEhBVkVfTElCU1NMIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9jcnlwdG8uaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX09QRU5TU0xfQ1JZUFRPX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2Vyci5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9FUlJfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcGVtLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9PUEVOU1NMX1BFTV9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9yc2EuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX09QRU5TU0xfUlNBX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3NzbC5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9TU0xfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wveDUwOS5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9YNTA5X0ggMQorCisvKgorICogVGhpcyBuZWVkcyB0byBiZSBkZWZpbmVkIGZvciBPcGVuU1NMIDAuOS43IGFuZCBvdGhlciB2ZXJzaW9ucyB0aGF0IGhhdmUgdGhlCisgKiBFTkdJTkUgc3R1ZmYgc3VwcG9ydGVkLiBJZiBhbiBpbmNsdWRlIG9mICJvcGVuc3NsL2VuZ2luZS5oIiBmYWlscywgdGhlbgorICogdW5kZWZpbmUgdGhlIGRlZmluZSBiZWxvdy4KKyovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9FTkdJTkVfSCAxCisKKyNlbmRpZiAvKiBVU0VfU1NMRUFZICovCisvKiBPcGVuU1NMIHNlY3Rpb24gZW5kcyBoZXJlICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHB3ZC5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfUFdEX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzZ3R0eS5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfU0dUVFlfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZpbGUuICAqLworI3VuZGVmIEhBVkVfVEVSTUlPU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1RJTUVfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHJlc29sdiBsaWJyYXJ5ICgtbHJlc29sdikuICAqLworI2RlZmluZSBIQVZFX0xJQlJFU09MViAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc29ja2V0IGxpYnJhcnkgKC1sc29ja2V0KS4gICovCisjZGVmaW5lIEhBVkVfTElCU09DS0VUIDEKKworLyogRGVmaW5lIGlmIGdldGFkZHJpbmZvIGV4aXN0cyBhbmQgd29ya3MgKi8KKyNkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWV2YWwuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1RJTUVWQUxfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdGltZXZhbCBzdHJ1Y3QuICAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9USU1FVkFMIDEKKworLyogTmFtZSBvZiB0aGlzIHBhY2thZ2UhICovCisjZGVmaW5lIFBBQ0tBR0UgIm5vdC11c2VkIgorCisvKiBWZXJzaW9uIG51bWJlciBvZiB0aGlzIGFyY2hpdmUuICovCisjZGVmaW5lIFZFUlNJT04gIm5vdC11c2VkIgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBhc3MgZnVuY3Rpb24uICAqLworI3VuZGVmIEhBVkVfR0VUUEFTUworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b2tfcicgZnVuY3Rpb24uICAqLworLyogQ29uZGl0aW9uIGxpZnRlZCBmcm9tIDxzdHJpbmcuaD4gICAgICAgICAgICAgKi8KKyNpZiBfX0NSVExfVkVSID49IDcwMzAxMDAwCisjICBkZWZpbmUgSEFWRV9TVFJUT0tfUiAxCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RydG9sbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSVE9MTCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRoZSBtZW1vcnkuaCBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmggKi8KKyNkZWZpbmUgTkVFRF9NRU1PUllfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3NldGptcCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHU0VUSk1QIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZXRqbXAuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU0VUSk1QX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2lvY3RsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19JT0NUTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJvcHRzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NUUk9QVFNfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0bmFtZWluZm8gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8gMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyAxIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fUVVBTF9BUkcxIGNvbnN0CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHMSBzdHJ1Y3Qgc29ja2FkZHIgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzIgc2l6ZV90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDQgYW5kIDYgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzQ2IHNpemVfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDcgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzcgaW50CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcmVjdiBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUNWIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMSBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMiB2b2lkICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMyBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX1JFVFYgaW50CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcmVjdmZyb20gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDVkZST00gMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyIHZvaWQKKworLyogRGVmaW5lIGlmIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDIgZm9yIHJlY3Zmcm9tIGlzIHZvaWQuICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMl9JU19WT0lEIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA1IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkcgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZW5kIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFTkQgMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcxIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1FVQUxfQVJHMiBjb25zdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcyIHZvaWQgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIHRvIGhpZGUgZG9sbGFyIHNpZ24gZnJvbSBjb21waWxlcnMgaW4gc3RyaWN0IGFuc2kgbW9kZS4gKi8KKyNkZWZpbmUgZGVjY190cmFuc2xhdGVfdm1zKF9fcykgZGVjYyR0cmFuc2xhdGVfdm1zKF9fcykKKworI2VuZGlmIC8qIEhFQURFUl9DT05GSUdfVk1TX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jb25maWctdnh3b3Jrcy5oIGIvY3VybC03LjI1LjAvbGliL2NvbmZpZy12eHdvcmtzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI3ZTdjMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jb25maWctdnh3b3Jrcy5oCkBAIC0wLDAgKzEsOTUyIEBACisjaWZuZGVmIF9fTElCX0NPTkZJR19WWFdPUktTX0gKKyNkZWZpbmUgX19MSUJfQ09ORklHX1ZYV09SS1NfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICBsaWIvY29uZmlnLXZ4d29ya3MuaCAtIEhhbmQgY3JhZnRlZCBjb25maWcgZmlsZSBmb3IgVnhXb3JrcyAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogd2hlbiBidWlsZGluZyBsaWJjdXJsIGl0c2VsZiAqLworLyogI3VuZGVmIEJVSUxESU5HX0xJQkNVUkwgKi8KKworLyogTG9jYXRpb24gb2YgZGVmYXVsdCBjYSBidW5kbGUgKi8KKy8qICN1bmRlZiBDVVJMX0NBX0JVTkRMRSAqLworCisvKiBMb2NhdGlvbiBvZiBkZWZhdWx0IGNhIHBhdGggKi8KKy8qICN1bmRlZiBDVVJMX0NBX1BBVEggKi8KKworLyogdG8gZGlzYWJsZSBjb29raWVzIHN1cHBvcnQgKi8KKy8qICN1bmRlZiBDVVJMX0RJU0FCTEVfQ09PS0lFUyAqLworCisvKiB0byBkaXNhYmxlIGNyeXB0b2dyYXBoaWMgYXV0aGVudGljYXRpb24gKi8KKy8qICN1bmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEggKi8KKworLyogdG8gZGlzYWJsZSBESUNUICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX0RJQ1QgKi8KKworLyogdG8gZGlzYWJsZSBGSUxFICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX0ZJTEUgKi8KKworLyogdG8gZGlzYWJsZSBGVFAgKi8KKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX0ZUUCAxCisKKy8qIHRvIGRpc2FibGUgSFRUUCAqLworLyogI3VuZGVmIENVUkxfRElTQUJMRV9IVFRQICovCisKKy8qIHRvIGRpc2FibGUgTERBUCAqLworI2RlZmluZSBDVVJMX0RJU0FCTEVfTERBUCAxCisKKy8qIHRvIGRpc2FibGUgTERBUFMgKi8KKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVBTIDEKKworLyogdG8gZGlzYWJsZSBOVExNIGF1dGhlbnRpY2F0aW9uICovCisjZGVmaW5lIENVUkxfRElTQUJMRV9OVExNIDEKKworLyogdG8gZGlzYWJsZSBwcm94aWVzICovCisvKiAjdW5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZICovCisKKy8qIHRvIGRpc2FibGUgVEVMTkVUICovCisjZGVmaW5lIENVUkxfRElTQUJMRV9URUxORVQgMQorCisvKiB0byBkaXNhYmxlIFRGVFAgKi8KKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX1RGVFAgMQorCisvKiB0byBkaXNhYmxlIHZlcmJvc2Ugc3RyaW5ncyAqLworLyogI3VuZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MgKi8KKworLyogdG8gbWFrZSBhIHN5bWJvbCB2aXNpYmxlICovCisvKiAjdW5kZWYgQ1VSTF9FWFRFUk5fU1lNQk9MICovCisKKy8qIHRvIGVuYWJsZSBoaWRkZW4gc3ltYm9scyAqLworLyogI3VuZGVmIENVUkxfSElEREVOX1NZTUJPTFMgKi8KKworLyogVXNlIFdpbmRvd3MgTERBUCBpbXBsZW1lbnRhdGlvbiAqLworLyogI3VuZGVmIENVUkxfTERBUF9XSU4gKi8KKworLyogd2hlbiBub3QgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSAqLworLyogI3VuZGVmIENVUkxfU1RBVElDTElCICovCisKKy8qIHlvdXIgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldCBwYXRobmFtZSAqLworLyogI3VuZGVmIEVHRF9TT0NLRVQgKi8KKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBJUHY2IHN1cHBvcnQgKi8KKyNkZWZpbmUgRU5BQkxFX0lQVjYgMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyAxIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fUVVBTF9BUkcxIGNvbnN0CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHMSBzdHJ1Y3Qgc29ja2FkZHIgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzIgc29ja2xlbl90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDQgYW5kIDYgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzQ2IHNpemVfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDcgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzcgdW5zaWduZWQgaW50CisKKy8qIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBnZXRzZXJ2Ynlwb3J0X3IgKi8KKyNkZWZpbmUgR0VUU0VSVkJZUE9SVF9SX0FSR1MgNgorCisvKiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byBwYXNzIHRvIGdldHNlcnZieXBvcnRfciAqLworI2RlZmluZSBHRVRTRVJWQllQT1JUX1JfQlVGU0laRSA0MDk2CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBhbGFybSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9BTEFSTSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YWxsb2NhLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0FMTE9DQV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhcnBhL2luZXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvdGZ0cC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0FSUEFfVEZUUF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXNzZXJ0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0FTU0VSVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiYXNlbmFtZScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9CQVNFTkFNRSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBib29sIGlzIGFuIGF2YWlsYWJsZSB0eXBlLiAqLworI2RlZmluZSBIQVZFX0JPT0xfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBjbG9ja19nZXR0aW1lIGZ1bmN0aW9uIGFuZCBtb25vdG9uaWMgdGltZXIuICovCisvKiAjdW5kZWYgSEFWRV9DTE9DS19HRVRUSU1FX01PTk9UT05JQyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNsb3Nlc29ja2V0JyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0NMT1NFU09DS0VUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NSWVBUT19DTEVBTlVQX0FMTF9FWF9EQVRBIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9DUllQVE9fSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0RFU19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfRExGQ05fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9FTkdJTkVfTE9BRF9CVUlMVElOX0VOR0lORVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0VSUk5PX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVyci5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0VSUl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmY250bCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GQ05UTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfRkNOVExfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBmY250bCBPX05PTkJMT0NLIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZDTlRMX09fTk9OQkxPQ0sgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZmRvcGVuIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZET1BFTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZm9yaycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRk9SSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmcmVlYWRkcmluZm8gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRlJFRUFERFJJTkZPIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZyZWVpZmFkZHJzIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZSRUVJRkFERFJTIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZ0cnVuY2F0ZSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GVFJVTkNBVEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ2V0YWRkcmluZm8gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGV1aWQnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfR0VURVVJRCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkciBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHJfciBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSX1IgMQorCisvKiBnZXRob3N0YnlhZGRyX3IoKSB0YWtlcyA1IGFyZ3MgKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUl81ICovCisKKy8qIGdldGhvc3RieWFkZHJfcigpIHRha2VzIDcgYXJncyAqLworLyogI3VuZGVmIEhBVkVfR0VUSE9TVEJZQUREUl9SXzcgKi8KKworLyogZ2V0aG9zdGJ5YWRkcl9yKCkgdGFrZXMgOCBhcmdzICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUl9SXzggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5bmFtZSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWVfciBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUiAqLworCisvKiBnZXRob3N0YnluYW1lX3IoKSB0YWtlcyAzIGFyZ3MgKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zICovCisKKy8qIGdldGhvc3RieW5hbWVfcigpIHRha2VzIDUgYXJncyAqLworLyogI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzUgKi8KKworLyogZ2V0aG9zdGJ5bmFtZV9yKCkgdGFrZXMgNiBhcmdzICovCisvKiAjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdG5hbWUgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVE5BTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ2V0aWZhZGRycyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVElGQUREUlMgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldG5hbWVpbmZvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVE5BTUVJTkZPIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwYXNzX3InIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfR0VUUEFTU19SICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHBpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUUFBJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHJvdG9ieW5hbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFBST1RPQllOQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwd3VpZCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9HRVRQV1VJRCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHJsaW1pdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUUkxJTUlUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldHNlcnZieXBvcnRfciBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVFNFUlZCWVBPUlRfUiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHRpbWVvZmRheScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9HRVRUSU1FT0ZEQVkgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGdsaWJjLXN0eWxlIHN0cmVycm9yX3IgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9HTElCQ19TVFJFUlJPUl9SICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBnbXRpbWVfciBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HTVRJTUVfUiAxCisKKy8qIGlmIHlvdSBoYXZlIHRoZSBnc3NhcGkgbGlicmFyaWVzICovCisvKiAjdW5kZWYgSEFWRV9HU1NBUEkgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnc3NhcGkvZ3NzYXBpX2dlbmVyaWMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9HU1NBUElfR1NTQVBJX0dFTkVSSUNfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGdzc2FwaS9nc3NhcGkuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9HU1NBUElfR1NTQVBJX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnc3NhcGkvZ3NzYXBpX2tyYjUuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9HU1NBUElfR1NTQVBJX0tSQjVfSCAqLworCisvKiBpZiB5b3UgaGF2ZSB0aGUgR05VIGdzc2FwaSBsaWJyYXJpZXMgKi8KKy8qICN1bmRlZiBIQVZFX0dTU0dOVSAqLworCisvKiBpZiB5b3UgaGF2ZSB0aGUgSGVpbWRhbCBnc3NhcGkgbGlicmFyaWVzICovCisvKiAjdW5kZWYgSEFWRV9HU1NIRUlNREFMICovCisKKy8qIGlmIHlvdSBoYXZlIHRoZSBNSVQgZ3NzYXBpIGxpYnJhcmllcyAqLworLyogI3VuZGVmIEhBVkVfR1NTTUlUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRuYV9zdHJlcnJvcicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9JRE5BX1NUUkVSUk9SICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRuX2ZyZWUnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfSUROX0ZSRUUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpZG4tZnJlZS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0lETl9GUkVFX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpZmFkZHJzLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfSUZBRERSU19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9hZGRyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JTkVUX0FERFIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW5ldF9udG9hX3IgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9JTkVUX05UT0FfUiAqLworCisvKiBpbmV0X250b2FfcigpIHRha2VzIDIgYXJncyAqLworLyogI3VuZGVmIEhBVkVfSU5FVF9OVE9BX1JfMiAqLworCisvKiBpbmV0X250b2FfcigpIHRha2VzIDMgYXJncyAqLworLyogI3VuZGVmIEhBVkVfSU5FVF9OVE9BX1JfMyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfbnRvcCBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lORVRfTlRPUCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfcHRvbiBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lORVRfUFRPTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW9jdGwgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU9DVEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW9jdGxzb2NrZXQgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgSW9jdGxTb2NrZXQgY2FtZWwgY2FzZSBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBJb2N0bFNvY2tldCBjYW1lbCBjYXNlIEZJT05CSU8gZnVuY3Rpb24uCisgICAqLworLyogI3VuZGVmIEhBVkVfSU9DVExTT0NLRVRfQ0FNRUxfRklPTkJJTyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGxzb2NrZXQgRklPTkJJTyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU8gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3RsIEZJT05CSU8gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU9DVExfRklPTkJJTyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBpb2N0bCBTSU9DR0lGQUREUiBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTF9TSU9DR0lGQUREUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW8uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfSU9fSCAxCisKKy8qIGlmIHlvdSBoYXZlIHRoZSBLZXJiZXJvczQgbGlicmFyaWVzIChpbmNsdWRpbmcgLWxkZXMpICovCisvKiAjdW5kZWYgSEFWRV9LUkI0ICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3JiX2dldF9vdXJfaXBfZm9yX3JlYWxtJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0tSQl9HRVRfT1VSX0lQX0ZPUl9SRUFMTSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGtyYi5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0tSQl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBsYmVyLmggaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9MQkVSX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGxkYXBzc2wuaCBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0xEQVBTU0xfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbGRhcC5oIGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfTERBUF9IICovCisKKy8qIFVzZSBMREFQUyBpbXBsZW1lbnRhdGlvbiAqLworLyogI3VuZGVmIEhBVkVfTERBUF9TU0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGxkYXBfc3NsLmggaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9MREFQX1NTTF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGRhcF91cmxfcGFyc2UnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfTERBUF9VUkxfUEFSU0UgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJnZW4uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9MSUJHRU5fSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlkbicgbGlicmFyeSAoLWxpZG4pLiAqLworLyogI3VuZGVmIEhBVkVfTElCSUROICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVzb2x2JyBsaWJyYXJ5ICgtbHJlc29sdikuICovCisvKiAjdW5kZWYgSEFWRV9MSUJSRVNPTFYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZXNvbHZlJyBsaWJyYXJ5ICgtbHJlc29sdmUpLiAqLworLyogI3VuZGVmIEhBVkVfTElCUkVTT0xWRSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNvY2tldCcgbGlicmFyeSAoLWxzb2NrZXQpLiAqLworLyogI3VuZGVmIEhBVkVfTElCU09DS0VUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3NoMicgbGlicmFyeSAoLWxzc2gyKS4gKi8KKy8qICN1bmRlZiBIQVZFX0xJQlNTSDIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJzc2gyLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfTElCU1NIMl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGlic3NoMl92ZXJzaW9uJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0xJQlNTSDJfVkVSU0lPTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNzbCcgbGlicmFyeSAoLWxzc2wpLiAqLworI2RlZmluZSBIQVZFX0xJQlNTTCAxCisKKy8qIGlmIHpsaWIgaXMgYXZhaWxhYmxlICovCisjZGVmaW5lIEhBVkVfTElCWiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGltaXRzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xJTUlUU19IIDEKKworLyogaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBMTCAqLworI2RlZmluZSBIQVZFX0xMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsb2NhbGUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgbG9jYWx0aW1lX3IgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTE9DQUxUSU1FX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlICdsb25nIGxvbmcnIGRhdGEgdHlwZS4gKi8KKyNkZWZpbmUgSEFWRV9MT05HTE9ORyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBtYWxsb2MuaCBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBtZW1vcnkuaCBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNU0dfTk9TSUdOQUwgZmxhZy4gKi8KKy8qICN1bmRlZiBIQVZFX01TR19OT1NJR05BTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGRiLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX05FVERCX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L3RjcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVRJTkVUX1RDUF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUX0lGX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiBOSV9XSVRIU0NPUEVJRCBleGlzdHMgYW5kIHdvcmtzLiAqLworLyogI3VuZGVmIEhBVkVfTklfV0lUSFNDT1BFSUQgKi8KKworLyogaWYgeW91IGhhdmUgYW4gb2xkIE1JVCBnc3NhcGkgbGlicmFyeSwgbGFja2luZyBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRQorICAgKi8KKy8qICN1bmRlZiBIQVZFX09MRF9HU1NNSVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2NyeXB0by5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9PUEVOU1NMX0NSWVBUT19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2VuZ2luZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9PUEVOU1NMX0VOR0lORV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2Vyci5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9PUEVOU1NMX0VSUl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3BlbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9PUEVOU1NMX1BFTV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3BrY3MxMi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9PUEVOU1NMX1BLQ1MxMl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3JzYS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9PUEVOU1NMX1JTQV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3NzbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9PUEVOU1NMX1NTTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3g1MDkuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfT1BFTlNTTF9YNTA5X0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBlbS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1BFTV9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGVycm9yJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QRVJST1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBpcGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BJUEUgMQorCisvKiBpZiB5b3UgaGF2ZSB0aGUgZnVuY3Rpb24gUEsxMV9DcmVhdGVHZW5lcmljT2JqZWN0ICovCisvKiAjdW5kZWYgSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIHBvbGwgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9QT0xMICovCisKKy8qIElmIHlvdSBoYXZlIGEgZmluZSBwb2xsICovCisvKiAjdW5kZWYgSEFWRV9QT0xMX0ZJTkUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwb2xsLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfUE9MTF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBQT1NJWC1zdHlsZSBzdHJlcnJvcl9yIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfUE9TSVhfU1RSRVJST1JfUiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB3ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1BXRF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9lZ2QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1JBTkRfRUdEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBSQU5EX3NjcmVlbicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9SQU5EX1NDUkVFTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfc3RhdHVzJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SQU5EX1NUQVRVUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSByZWN2IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1JFQ1YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgcmVjdmZyb20gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDVkZST00gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHJzYS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1JTQV9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzZWxlY3QgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VMRUNUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNlbmQgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VORCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2V0am1wLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NFVEpNUF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRsb2NhbGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVExPQ0FMRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bW9kZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VUTU9ERSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmxpbWl0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRSTElNSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2V0c29ja29wdCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRTT0NLT1BUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIHNldHNvY2tvcHQgU09fTk9OQkxPQ0sgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TRVRTT0NLT1BUX1NPX05PTkJMT0NLICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2d0dHkuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TR1RUWV9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzaWdhY3Rpb24gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHQUNUSU9OIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNpZ2ludGVycnVwdCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdJTlRFUlJVUFQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2lnbmFsIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NJR05BTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NJR05BTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNpZ3NldGptcCBmdW5jdGlvbiBvciBtYWNyby4gKi8KKy8qICN1bmRlZiBIQVZFX1NJR1NFVEpNUCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBzaWdfYXRvbWljX3QgaXMgYW4gYXZhaWxhYmxlIHR5cGVkZWYuICovCisjZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgc2lnX2F0b21pY190IGlzIGFscmVhZHkgZGVmaW5lZCBhcyB2b2xhdGlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NJR19BVE9NSUNfVF9WT0xBVElMRSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc29ja2FkZHJfaW42IGhhcyB0aGUgc2luNl9zY29wZV9pZCBtZW1iZXIgKi8KKyNkZWZpbmUgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TT0NLRVQgMQorCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgU1BORUdPIGxpYnJhcnkgZmJvcGVuc3NsICovCisvKiAjdW5kZWYgSEFWRV9TUE5FR08gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBTU0xfZ2V0X3NodXRkb3duJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TU0xfR0VUX1NIVVRET1dOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzc2wuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TU0xfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGJvb2wuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TVERJTlRfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGlvLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURElPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJjYXNlY21wIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyY2FzZXN0ciBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1NUUkNBU0VTVFIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmNtcGkgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJDTVBJICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJkdXAgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSRFVQIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmVycm9yX3IgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSRVJST1JfUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJpY21wIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU1RSSUNNUCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjcHknIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU1RSTENQWSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmNhc2VjbXAgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSTkNBU0VDTVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmNtcGkgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJOQ01QSSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmljbXAgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJOSUNNUCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cm9wdHMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TVFJPUFRTX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cnN0ciBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJTVFIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RydG9rX3IgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSVE9LX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RydG9sbCBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlRPTEwgKi8KKworLyogaWYgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgaXMgZGVmaW5lZCAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHRpbWV2YWwgc3RydWN0LiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9USU1FVkFMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZmlsaW8uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfRklMSU9fSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pb2N0bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfSU9DVExfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX1BBUkFNX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19QT0xMX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcmVzb3VyY2UuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1JFU09VUkNFX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfU0VMRUNUX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tpby5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19TT0NLSU9fSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX1RJTUVfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Vpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVUlPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91bi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVU5fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19VVElNRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW9zLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1RFUk1JT1NfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1RFUk1JT19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1RJTUVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGxkLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfVExEX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0bGRfc3RyZXJyb3InIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfVExEX1NUUkVSUk9SICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5hbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VOQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHV0aW1lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9VVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVVRJTUVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIGNvbXBpbGVyIHN1cHBvcnRzIEM5OSB2YXJpYWRpYyBtYWNybyBzdHlsZS4gKi8KKyNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfQzk5IDEKKworLyogRGVmaW5lIHRvIDEgaWYgY29tcGlsZXIgc3VwcG9ydHMgb2xkIGdjYyB2YXJpYWRpYyBtYWNybyBzdHlsZS4gKi8KKyNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfR0NDIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIHZ4d29ya3Mtc3R5bGUgc3RyZXJyb3JfciBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9WWFdPUktTX1NUUkVSUk9SX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd2luYmVyLmggaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9XSU5CRVJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd2luZG93cy5oIGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfV0lORE9XU19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5sZGFwLmggaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9XSU5MREFQX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbnNvY2syLmggaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9XSU5TT0NLMl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5zb2NrLmggaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9XSU5TT0NLX0ggKi8KKworLyogRGVmaW5lIHRoaXMgc3ltYm9sIGlmIHlvdXIgT1Mgc3VwcG9ydHMgY2hhbmdpbmcgdGhlIGNvbnRlbnRzIG9mIGFyZ3YgKi8KKyNkZWZpbmUgSEFWRV9XUklUQUJMRV9BUkdWIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdyaXRldiBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9XUklURVYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd3MydGNwaXAuaCBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1dTMlRDUElQX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx4NTA5Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfWDUwOV9IICovCisKKy8qIGlmIHlvdSBoYXZlIHRoZSB6bGliLmggaGVhZGVyIGZpbGUgKi8KKyNkZWZpbmUgSEFWRV9aTElCX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgbmF0aXZlIFdpbmRvd3MgdGFyZ2V0LiAqLworLyogI3VuZGVmIE5BVElWRV9XSU5ET1dTICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRoZSBsYmVyLmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIGxkYXAuaCAqLworLyogI3VuZGVmIE5FRURfTEJFUl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRoZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmggKi8KKy8qICN1bmRlZiBORUVEX01BTExPQ19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRoZSBtZW1vcnkuaCBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmggKi8KKy8qICN1bmRlZiBORUVEX01FTU9SWV9IICovCisKKy8qIERlZmluZSB0byAxIGlmIF9SRUVOVFJBTlQgcHJlcHJvY2Vzc29yIHN5bWJvbCBtdXN0IGJlIGRlZmluZWQuICovCisvKiAjdW5kZWYgTkVFRF9SRUVOVFJBTlQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgX1RIUkVBRF9TQUZFIHByZXByb2Nlc3NvciBzeW1ib2wgbXVzdCBiZSBkZWZpbmVkLiAqLworLyogI3VuZGVmIE5FRURfVEhSRUFEX1NBRkUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIG9wZW4gZnVuY3Rpb24gcmVxdWlyZXMgdGhyZWUgYXJndW1lbnRzLiAqLworI2RlZmluZSBPUEVOX05FRURTX0FSRzMgMQorCisvKiBjcHUtbWFjaGluZS1PUyAqLworI2RlZmluZSBPUyAidW5rbm93bi11bmtub3duLXZ4d29ya3MiCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFICJjdXJsIgorCisvKiBhIHN1aXRhYmxlIGZpbGUgdG8gcmVhZCByYW5kb20gZGF0YSBmcm9tICovCisjZGVmaW5lIFJBTkRPTV9GSUxFICIvZGV2L3VyYW5kb20iCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDIgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzIgdm9pZAorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbSBpcyB2b2lkLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzJfSVNfVk9JRCAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBzaXplX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSBzdHJ1Y3Qgc29ja2FkZHIKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNSBmb3IgcmVjdmZyb20gaXMgdm9pZC4gKi8KKy8qICN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzVfSVNfVk9JRCAqLworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBzb2NrbGVuX3QKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20gaXMgdm9pZC4gKi8KKy8qICN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzZfSVNfVk9JRCAqLworCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9SRVRWIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyIHZvaWQgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkczIHNpemVfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIGFzIHRoZSByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMgKGBpbnQnIG9yIGB2b2lkJykuICovCisjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyA1IGZvciBzZWxlY3QuICovCisjZGVmaW5lIFNFTEVDVF9RVUFMX0FSRzUKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZWxlY3QuICovCisjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzEgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDIsIDMgYW5kIDQgZm9yIHNlbGVjdC4gKi8KKyNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHMjM0IGZkX3NldCAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNSBmb3Igc2VsZWN0LiAqLworI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkc1IHN0cnVjdCB0aW1ldmFsICoKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3Igc2VsZWN0LiAqLworI2RlZmluZSBTRUxFQ1RfVFlQRV9SRVRWIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1FVQUxfQVJHMiBjb25zdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcxIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcyIHZvaWQgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkczIHNpemVfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfUkVUViBpbnQKKworLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0lOVCA0CisKKy8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfTE9ORyA0CisKKy8qIFRoZSBzaXplIG9mIGBvZmZfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX09GRl9UIDgKKworLyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgorCisvKiBUaGUgc2l6ZSBvZiBgc2l6ZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfU0laRV9UIDQKKworLyogVGhlIHNpemUgb2YgYHRpbWVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1RJTUVfVCA0CisKKy8qIFRoZSBzaXplIG9mIGB2b2lkKicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1ZPSURQIDQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIFNURENfSEVBREVSUyAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3Igc3RyZXJyb3Jfci4gKi8KKy8qICN1bmRlZiBTVFJFUlJPUl9SX1RZUEVfQVJHMyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KKy8qICN1bmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUgKi8KKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBjLWFyZXMgc3VwcG9ydCAqLworLyogI3VuZGVmIFVTRV9BUkVTICovCisKKy8qIERlZmluZSB0byBkaXNhYmxlIG5vbi1ibG9ja2luZyBzb2NrZXRzLiAqLworLyogI3VuZGVmIFVTRV9CTE9DS0lOR19TT0NLRVRTICovCisKKy8qIGlmIEdudVRMUyBpcyBlbmFibGVkICovCisvKiAjdW5kZWYgVVNFX0dOVVRMUyAqLworCisvKiBpZiBsaWJTU0gyIGlzIGluIHVzZSAqLworLyogI3VuZGVmIFVTRV9MSUJTU0gyICovCisKKy8qIElmIHlvdSB3YW50IHRvIGJ1aWxkIGN1cmwgd2l0aCB0aGUgYnVpbHQtaW4gbWFudWFsICovCisjZGVmaW5lIFVTRV9NQU5VQUwgMQorCisvKiBpZiBOU1MgaXMgZW5hYmxlZCAqLworLyogI3VuZGVmIFVTRV9OU1MgKi8KKworLyogaWYgT3BlblNTTCBpcyBpbiB1c2UgKi8KKyNkZWZpbmUgVVNFX09QRU5TU0wgMQorCisvKiBpZiBTU0wgaXMgZW5hYmxlZCAqLworI2RlZmluZSBVU0VfU1NMRUFZIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGFyZSBidWlsZGluZyBhIFdpbmRvd3MgdGFyZ2V0IHdpdGhvdXQgbGFyZ2UgZmlsZQorICAgc3VwcG9ydC4gKi8KKy8qICN1bmRlZiBVU0VfV0lOMzJfTEFSR0VfRklMRVMgKi8KKworLyogdG8gZW5hYmxlIFNTUEkgc3VwcG9ydCAqLworLyogI3VuZGVmIFVTRV9XSU5ET1dTX1NTUEkgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgdXNpbmcgeWFTU0wgaW4gT3BlblNTTCBjb21wYXRpYmlsaXR5IG1vZGUuICovCisvKiAjdW5kZWYgVVNFX1lBU1NMRU1VTCAqLworCisvKiBEZWZpbmUgdG8gYXZvaWQgYXV0b21hdGljIGluY2x1c2lvbiBvZiB3aW5zb2NrLmggKi8KKy8qICN1bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOICovCisKKy8qIERlZmluZSB0byAxIGlmIE9TIGlzIEFJWC4gKi8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UKKy8qICMgIHVuZGVmIF9BTExfU09VUkNFICovCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBmaWxlIG9mZnNldCwgb24gaG9zdHMgd2hlcmUgdGhpcyBpcyBzZXR0YWJsZS4gKi8KKy8qICN1bmRlZiBfRklMRV9PRkZTRVRfQklUUyAqLworCisvKiBEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuICovCisvKiAjdW5kZWYgX0xBUkdFX0ZJTEVTICovCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworLyogI3VuZGVmIGNvbnN0ICovCisKKy8qIFR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIGluX2FkZHJfdCB3aGVuIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIGl0LiAqLworLyogI3VuZGVmIGluX2FkZHJfdCAqLworCisvKiBEZWZpbmUgdG8gYF9faW5saW5lX18nIG9yIGBfX2lubGluZScgaWYgdGhhdCdzIHdoYXQgdGhlIEMgY29tcGlsZXIKKyAgIGNhbGxzIGl0LCBvciB0byBub3RoaW5nIGlmICdpbmxpbmUnIGlzIG5vdCBzdXBwb3J0ZWQgdW5kZXIgYW55IG5hbWUuICAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKy8qIERlZmluZSB0byBgdW5zaWduZWQgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKy8qICN1bmRlZiBzaXplX3QgKi8KKworLyogdGhlIHNpZ25lZCB2ZXJzaW9uIG9mIHNpemVfdCAqLworLyogI3VuZGVmIHNzaXplX3QgKi8KKworI2VuZGlmIC8qIF9fTElCX0NPTkZJR19WWFdPUktTX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jb25maWctd2luMzIuaCBiL2N1cmwtNy4yNS4wL2xpYi9jb25maWctd2luMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmJjYTljCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2NvbmZpZy13aW4zMi5oCkBAIC0wLDAgKzEsNjc0IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0NPTkZJR19XSU4zMl9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0NPTkZJR19XSU4zMl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICBIYW5kIGNyYWZ0ZWQgY29uZmlnIGZpbGUgZm9yIFdpbmRvd3MgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgSEVBREVSIEZJTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICNkZWZpbmUgSEFWRV9BUlBBX0lORVRfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGFzc2VydC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9BU1NFUlRfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGNyeXB0by5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICNkZWZpbmUgSEFWRV9DUllQVE9fSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0VSUk5PX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxlcnIuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjZGVmaW5lIEhBVkVfRVJSX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9GQ05UTF9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8Z2V0b3B0Lmg+IGhlYWRlciBmaWxlLiAqLworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX19QT0NDX18pCisjZGVmaW5lIEhBVkVfR0VUT1BUX0ggMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGlvLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0lPX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTElNSVRTX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxsb2NhbGUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IG5lZWQgPG1hbGxvYy5oPiBoZWFkZXIgZXZlbiB3aXRoIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjaWYgIWRlZmluZWQoX19TQUxGT1JEQ19fKSAmJiAhZGVmaW5lZChfX1BPQ0NfXykKKyNkZWZpbmUgTkVFRF9NQUxMT0NfSCAxCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bmV0ZGIuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjZGVmaW5lIEhBVkVfTkVUREJfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgX19TQUxGT1JEQ19fCisjZGVmaW5lIEhBVkVfUFJPQ0VTU19IIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU0lHTkFMX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzZ3R0eS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICNkZWZpbmUgSEFWRV9TR1RUWV9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3NsLmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX1NTTF9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbGVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICNkZWZpbmUgSEFWRV9TWVNfU0VMRUNUX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NraW8uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjZGVmaW5lIEhBVkVfU1lTX1NPQ0tJT19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdXRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIF9fQk9STEFORENfXworI2RlZmluZSBIQVZFX1NZU19VVElNRV9IIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW8uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjZGVmaW5lIEhBVkVfVEVSTUlPX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW9zLmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX1RFUk1JT1NfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVElNRV9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pIHx8IGRlZmluZWQoX19MQ0NfXykgfHwgXAorICAgIGRlZmluZWQoX19QT0NDX18pCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbmRvd3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfV0lORE9XU19IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jay5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9XSU5TT0NLX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrMi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgX19TQUxGT1JEQ19fCisjZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8d3MydGNwaXAuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIF9fU0FMRk9SRENfXworI2RlZmluZSBIQVZFX1dTMlRDUElQX0ggMQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgT1RIRVIgSEVBREVSIElORk8gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRGVmaW5lIGlmIHNpZ19hdG9taWNfdCBpcyBhbiBhdmFpbGFibGUgdHlwZWRlZi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1QgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIFNURENfSEVBREVSUyAxCisKKy8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KKy8qICNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGNsb3Nlc29ja2V0IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NMT1NFU09DS0VUIDEKKworLyogRGVmaW5lIGlmIHlvdSBkb24ndCBoYXZlIHZwcmludGYgYnV0IGRvIGhhdmUgX2RvcHJudC4gKi8KKy8qICNkZWZpbmUgSEFWRV9ET1BSTlQgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZ0cnVuY2F0ZSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GVFJVTkNBVEUgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHIgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdG5hbWUgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVE5BTUUgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBhc3MgZnVuY3Rpb24uICovCisvKiAjZGVmaW5lIEhBVkVfR0VUUEFTUyAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0c2VydmJ5bmFtZSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRTRVJWQllOQU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwcm90b2J5bmFtZSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRQUk9UT0JZTkFNRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHRpbWVvZmRheSBmdW5jdGlvbi4gKi8KKy8qICNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGluZXRfYWRkciBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JTkVUX0FERFIgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGlvY3Rsc29ja2V0IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lPQ1RMU09DS0VUIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIGEgd29ya2luZyBpb2N0bHNvY2tldCBGSU9OQklPIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU8gMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHBlcnJvciBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QRVJST1IgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIFJBTkRfc2NyZWVuIGZ1bmN0aW9uIHdoZW4gdXNpbmcgU1NMLiAqLworI2RlZmluZSBIQVZFX1JBTkRfU0NSRUVOIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9zdGF0dXMnIGZ1bmN0aW9uIHdoZW4gdXNpbmcgU1NMLiAqLworI2RlZmluZSBIQVZFX1JBTkRfU1RBVFVTIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEnIGZ1bmN0aW9uLgorICAgVGhpcyBpcyBwcmVzZW50IGluIE9wZW5TU0wgdmVyc2lvbnMgYWZ0ZXIgMC45LjZiICovCisjZGVmaW5lIEhBVkVfQ1JZUFRPX0NMRUFOVVBfQUxMX0VYX0RBVEEgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNlbGVjdCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRUxFQ1QgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldGxvY2FsZSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldG1vZGUgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VUTU9ERSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0dmJ1ZiBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRWQlVGIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzb2NrZXQgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU09DS0VUIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJjYXNlY21wIGZ1bmN0aW9uLiAqLworLyogI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmR1cCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJEVVAgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmZ0aW1lIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkZUSU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJpY21wIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUklDTVAgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cm5jYXNlY21wIGZ1bmN0aW9uLiAqLworLyogI2RlZmluZSBIQVZFX1NUUk5DQVNFQ01QIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJuaWNtcCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJOSUNNUCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3Ryc3RyIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUlNUUiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RydG9sbCBmdW5jdGlvbi4gKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fUE9DQ19fKQorI2RlZmluZSBIQVZFX1NUUlRPTEwgMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdGNnZXRhdHRyIGZ1bmN0aW9uLiAqLworLyogI2RlZmluZSBIQVZFX1RDR0VUQVRUUiAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdGNzZXRhdHRyIGZ1bmN0aW9uLiAqLworLyogI2RlZmluZSBIQVZFX1RDU0VUQVRUUiAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdXRpbWUgZnVuY3Rpb24uICovCisjaWZuZGVmIF9fQk9STEFORENfXworI2RlZmluZSBIQVZFX1VUSU1FIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyAxIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fUVVBTF9BUkcxIGNvbnN0CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHMSBzdHJ1Y3Qgc29ja2FkZHIgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzIgc29ja2xlbl90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDQgYW5kIDYgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzQ2IERXT1JECisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNyBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNyBpbnQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSByZWN2IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1JFQ1YgMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxIFNPQ0tFVAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyIGNoYXIgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSByZWN2ZnJvbSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUNWRlJPTSAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBTT0NLRVQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDIgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzIgY2hhcgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzMgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzUgc3RydWN0IHNvY2thZGRyCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA2IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc2IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9SRVRWIGludAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNlbmQgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VORCAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzEgU09DS0VUCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDIgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfUVVBTF9BUkcyIGNvbnN0CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzIgY2hhciAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzMgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9SRVRWIGludAorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgVFlQRURFRiBSRVBMQUNFTUVOVFMgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBpZiBpbl9hZGRyX3QgaXMgbm90IGFuIGF2YWlsYWJsZSAndHlwZWRlZmVkJyB0eXBlLiAqLworI2RlZmluZSBpbl9hZGRyX3QgdW5zaWduZWQgbG9uZworCisvKiBEZWZpbmUgdG8gdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoaW50IG9yIHZvaWQpLiAqLworI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKKworLyogRGVmaW5lIGlmIHNzaXplX3QgaXMgbm90IGFuIGF2YWlsYWJsZSAndHlwZWRlZmVkJyB0eXBlLiAqLworI2lmbmRlZiBfU1NJWkVfVF9ERUZJTkVECisjICBpZiAoZGVmaW5lZChfX1dBVENPTUNfXykgJiYgKF9fV0FUQ09NQ19fID49IDEyNDApKSB8fCBcCisgICAgICBkZWZpbmVkKF9fUE9DQ19fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fTUlOR1czMl9fKQorIyAgZWxpZiBkZWZpbmVkKF9XSU42NCkKKyMgICAgZGVmaW5lIF9TU0laRV9UX0RFRklORUQKKyMgICAgZGVmaW5lIHNzaXplX3QgX19pbnQ2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgX1NTSVpFX1RfREVGSU5FRAorIyAgICBkZWZpbmUgc3NpemVfdCBpbnQKKyMgIGVuZGlmCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVFlQRSBTSVpFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgdG8gdGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0lOVCA0CisKKy8qIERlZmluZSB0byB0aGUgc2l6ZSBvZiBgbG9uZyBkb3VibGUnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0RPVUJMRSAxNgorCisvKiBEZWZpbmUgdG8gdGhlIHNpemUgb2YgYGxvbmcgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKy8qICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4ICovCisKKy8qIERlZmluZSB0byB0aGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9TSE9SVCAyCisKKy8qIERlZmluZSB0byB0aGUgc2l6ZSBvZiBgc2l6ZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2lmIGRlZmluZWQoX1dJTjY0KQorIyAgZGVmaW5lIFNJWkVPRl9TSVpFX1QgOAorI2Vsc2UKKyMgIGRlZmluZSBTSVpFT0ZfU0laRV9UIDQKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSVUNUIFJFTEFURUQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZS4gKi8KKyNpZiAhZGVmaW5lZChfX1NBTEZPUkRDX18pICYmICFkZWZpbmVkKF9fQk9STEFORENfXykKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRSAxCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHN0cnVjdCB0aW1ldmFsLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9USU1FVkFMIDEKKworLyogRGVmaW5lIGlmIHN0cnVjdCBzb2NrYWRkcl9pbjYgaGFzIHRoZSBzaW42X3Njb3BlX2lkIG1lbWJlci4gKi8KKyNkZWZpbmUgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrIFNQRUNJRklDICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRGVmaW5lIHRvIHVzZSBCU0Qtc3R5bGUgbHdJUCBUQ1AvSVAgc3RhY2suICovCisvKiAjZGVmaW5lIFVTRV9MV0lQU09DSyAxICovCisKKyNpZmRlZiBVU0VfTFdJUFNPQ0sKKyMgIHVuZGVmIFVTRV9XSU5TT0NLCisjICB1bmRlZiBIQVZFX1dJTlNPQ0tfSAorIyAgdW5kZWYgSEFWRV9XSU5TT0NLMl9ICisjICB1bmRlZiBIQVZFX1dTMlRDUElQX0gKKyMgIHVuZGVmIEhBVkVfRVJSTk9fSAorIyAgdW5kZWYgSEFWRV9HRVRIT1NUTkFNRQorIyAgdW5kZWYgSEFWRV9HRVROQU1FSU5GTworIyAgdW5kZWYgTFdJUF9QT1NJWF9TT0NLRVRTX0lPX05BTUVTCisjICB1bmRlZiBSRUNWX1RZUEVfQVJHMQorIyAgdW5kZWYgUkVDVl9UWVBFX0FSRzMKKyMgIHVuZGVmIFNFTkRfVFlQRV9BUkcxCisjICB1bmRlZiBTRU5EX1RZUEVfQVJHMworIyAgZGVmaW5lIEhBVkVfRlJFRUFERFJJTkZPCisjICBkZWZpbmUgSEFWRV9HRVRBRERSSU5GTworIyAgZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRQorIyAgZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SCisjICBkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1JfNgorIyAgZGVmaW5lIExXSVBfUE9TSVhfU09DS0VUU19JT19OQU1FUyAwCisjICBkZWZpbmUgUkVDVl9UWVBFX0FSRzEgaW50CisjICBkZWZpbmUgUkVDVl9UWVBFX0FSRzMgc2l6ZV90CisjICBkZWZpbmUgU0VORF9UWVBFX0FSRzEgaW50CisjICBkZWZpbmUgU0VORF9UWVBFX0FSRzMgc2l6ZV90CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICBXYXR0LTMyIHRjcC9pcCBTUEVDSUZJQyAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgVVNFX1dBVFQzMgorICAjaW5jbHVkZSA8dGNwLmg+CisgICN1bmRlZiBieXRlCisgICN1bmRlZiB3b3JkCisgICN1bmRlZiBVU0VfV0lOU09DSworICAjdW5kZWYgSEFWRV9XSU5TT0NLX0gKKyAgI3VuZGVmIEhBVkVfV0lOU09DSzJfSAorICAjdW5kZWYgSEFWRV9XUzJUQ1BJUF9ICisgICNkZWZpbmUgSEFWRV9HRVRBRERSSU5GTworICAjZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8KKyAgI2RlZmluZSBIQVZFX1NZU19JT0NUTF9ICisgICNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0gKKyAgI2RlZmluZSBIQVZFX05FVElORVRfSU5fSAorICAjZGVmaW5lIEhBVkVfTkVUREJfSAorICAjZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0gKKyAgI2RlZmluZSBIQVZFX0ZSRUVBRERSSU5GTworICAjZGVmaW5lIFNPQ0tFVCBpbnQKKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgQ09NUElMRVIgU1BFQ0lGSUMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRGVmaW5lIHRvIG5vdGhpbmcgaWYgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCAnY29uc3QnIHF1YWxpZmllci4gKi8KKy8qICNkZWZpbmUgY29uc3QgKi8KKworLyogRGVmaW5lIHRvIG5vdGhpbmcgaWYgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCAndm9sYXRpbGUnIHF1YWxpZmllci4gKi8KKy8qICNkZWZpbmUgdm9sYXRpbGUgKi8KKworLyogV2luZG93cyBzaG91bGQgbm90IGhhdmUgSEFWRV9HTVRJTUVfUiBkZWZpbmVkICovCisvKiAjdW5kZWYgSEFWRV9HTVRJTUVfUiAqLworCisvKiBEZWZpbmUgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIEM5OSB2YXJpYWRpYyBtYWNybyBzdHlsZS4gKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTQwMCkKKyNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfQzk5IDEKKyNlbmRpZgorCisvKiBEZWZpbmUgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAnbG9uZyBsb25nJyBkYXRhIHR5cGUuICovCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX1dBVENPTUNfXykKKyNkZWZpbmUgSEFWRV9MT05HTE9ORyAxCisjZW5kaWYKKworLyogRGVmaW5lIHRvIGF2b2lkIFZTMjAwNSBjb21wbGFpbmluZyBhYm91dCBwb3J0YWJsZSBDIGZ1bmN0aW9ucy4gKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTQwMCkKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyNkZWZpbmUgX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSAxCisjZW5kaWYKKworLyogVlMyMDA1IGFuZCBsYXRlciBkYWZhdWx0IHNpemUgZm9yIHRpbWVfdCBpcyA2NC1iaXQsIHVubGVzcworICAgX1VTRV8zMkJJVF9USU1FX1QgaGFzIGJlZW4gZGVmaW5lZCB0byBnZXQgYSAzMi1iaXQgdGltZV90LiAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNDAwKQorIyAgaWZuZGVmIF9VU0VfMzJCSVRfVElNRV9UCisjICAgIGRlZmluZSBTSVpFT0ZfVElNRV9UIDgKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFNJWkVPRl9USU1FX1QgNAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBPZmZpY2lhbGx5LCBNaWNyb3NvZnQncyBXaW5kb3dzIFNESyB2ZXJzaW9ucyA2LlggZG8gbm90IHN1cHBvcnQgV2luZG93cworICAgMjAwMCBhcyBhIHN1cHBvcnRlZCBidWlsZCB0YXJnZXQuIFZTMjAwOCBkZWZhdWx0IGluc3RhbGxhdGlvbnMgcHJvdmlkZQorICAgYW4gZW1iZWRkZWQgV2luZG93cyBTREsgdjYuMEEgYWxvbmcgd2l0aCB0aGUgY2xhaW0gdGhhdCBXaW5kb3dzIDIwMDAgaXMKKyAgIGEgdmFsaWQgYnVpbGQgdGFyZ2V0IGZvciBWUzIwMDguIFBvcHVsYXIgYmVsaWVmIGlzIHRoYXQgYmluYXJpZXMgYnVpbHQKKyAgIHdpdGggVlMyMDA4IHVzaW5nIFdpbmRvd3MgU0RLIHZlcnNpb25zIDYuWCBhbmQgV2luZG93cyAyMDAwIGFzIGEgYnVpbGQKKyAgIHRhcmdldCBhcmUgZnVuY3Rpb25hbC4gKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTUwMCkKKyMgIGRlZmluZSBWUzIwMDhfTUlOX1RBUkdFVCAweDA1MDAKKyNlbmRpZgorCisvKiBXaGVuIG5vIGJ1aWxkIHRhcmdldCBpcyBzcGVjaWZpZWQgVlMyMDA4IGRlZmF1bHQgYnVpbGQgdGFyZ2V0IGlzIFdpbmRvd3MKKyAgIFZpc3RhLCB3aGljaCBsZWF2ZXMgb3V0IGV2ZW4gV2luc293cyBYUC4gSWYgbm8gYnVpbGQgdGFyZ2V0IGhhcyBiZWVuIGdpdmVuCisgICBmb3IgVlMyMDA4IHdlIHdpbGwgdGFyZ2V0IHRoZSBtaW5pbXVtIE9mZmljaWFsbHkgc3VwcG9ydGVkIGJ1aWxkIHRhcmdldCwKKyAgIHdoaWNoIGhhcHBlbnMgdG8gYmUgV2luZG93cyBYUC4gKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTUwMCkKKyMgIGRlZmluZSBWUzIwMDhfREVGX1RBUkdFVCAgMHgwNTAxCisjZW5kaWYKKworLyogVlMyMDA4IGRlZmF1bHQgdGFyZ2V0IHNldHRpbmdzIGFuZCBtaW5pbXVtIGJ1aWxkIHRhcmdldCBjaGVjay4gKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTUwMCkKKyMgIGlmbmRlZiBfV0lOMzJfV0lOTlQKKyMgICAgZGVmaW5lIF9XSU4zMl9XSU5OVCBWUzIwMDhfREVGX1RBUkdFVAorIyAgZW5kaWYKKyMgIGlmbmRlZiBXSU5WRVIKKyMgICAgZGVmaW5lIFdJTlZFUiBWUzIwMDhfREVGX1RBUkdFVAorIyAgZW5kaWYKKyMgIGlmIChfV0lOMzJfV0lOTlQgPCBWUzIwMDhfTUlOX1RBUkdFVCkgfHwgKFdJTlZFUiA8IFZTMjAwOF9NSU5fVEFSR0VUKQorIyAgICBlcnJvciBWUzIwMDggZG9lcyBub3Qgc3VwcG9ydCBXaW5kb3dzIGJ1aWxkIHRhcmdldHMgcHJpb3IgdG8gV2luZG93cyAyMDAwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gbm8gYnVpbGQgdGFyZ2V0IGlzIHNwZWNpZmllZCBQZWxsZXMgQyA1LjAwIGFuZCBsYXRlciBkZWZhdWx0IGJ1aWxkCisgICB0YXJnZXQgaXMgV2luZG93cyBWaXN0YS4gV2Ugb3ZlcnJpZGUgZGVmYXVsdCB0YXJnZXQgdG8gYmUgV2luZG93cyAyMDAwLiAqLworI2lmIGRlZmluZWQoX19QT0NDX18pICYmIChfX1BPQ0NfXyA+PSA1MDApCisjICBpZm5kZWYgX1dJTjMyX1dJTk5UCisjICAgIGRlZmluZSBfV0lOMzJfV0lOTlQgMHgwNTAwCisjICBlbmRpZgorIyAgaWZuZGVmIFdJTlZFUgorIyAgICBkZWZpbmUgV0lOVkVSIDB4MDUwMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBBdmFpbGFiaWxpdHkgb2YgZnJlZWFkZHJpbmZvLCBnZXRhZGRyaW5mbyBhbmQgZ2V0bmFtZWluZm8gZnVuY3Rpb25zIGlzCisgICBxdWl0ZSBjb252b2x1dGVkLCBjb21waWxlciBkZXBlbmRlbnQgYW5kIGV2ZW4gYnVpbGQgdGFyZ2V0IGRlcGVuZGVudC4gKi8KKyNpZiBkZWZpbmVkKEhBVkVfV1MyVENQSVBfSCkKKyMgIGlmIGRlZmluZWQoX19QT0NDX18pCisjICAgIGRlZmluZSBIQVZFX0ZSRUVBRERSSU5GTyAgICAgICAgICAgMQorIyAgICBkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAgICAgICAgICAgIDEKKyMgICAgZGVmaW5lIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSAxCisjICAgIGRlZmluZSBIQVZFX0dFVE5BTUVJTkZPICAgICAgICAgICAgMQorIyAgZWxpZiBkZWZpbmVkKF9XSU4zMl9XSU5OVCkgJiYgKF9XSU4zMl9XSU5OVCA+PSAweDA1MDEpCisjICAgIGRlZmluZSBIQVZFX0ZSRUVBRERSSU5GTyAgICAgICAgICAgMQorIyAgICBkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAgICAgICAgICAgIDEKKyMgICAgZGVmaW5lIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSAxCisjICAgIGRlZmluZSBIQVZFX0dFVE5BTUVJTkZPICAgICAgICAgICAgMQorIyAgZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTIwMCkKKyMgICAgZGVmaW5lIEhBVkVfRlJFRUFERFJJTkZPICAgICAgICAgICAxCisjICAgIGRlZmluZSBIQVZFX0dFVEFERFJJTkZPICAgICAgICAgICAgMQorIyAgICBkZWZpbmUgSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFIDEKKyMgICAgZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8gICAgICAgICAgICAxCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fUE9DQ19fKQorIyAgaWZuZGVmIF9NU0NfVkVSCisjICAgIGVycm9yIE1pY3Jvc29mdCBleHRlbnNpb25zIC9aZSBjb21waWxlciBvcHRpb24gaXMgcmVxdWlyZWQKKyMgIGVuZGlmCisjICBpZm5kZWYgX19QT0NDX19PTEROQU1FUworIyAgICBlcnJvciBDb21wYXRpYmlsaXR5IG5hbWVzIC9HbyBjb21waWxlciBvcHRpb24gaXMgcmVxdWlyZWQKKyMgIGVuZGlmCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICBMQVJHRSBGSUxFIFNVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkKKyMgIGlmIChfTVNDX1ZFUiA+PSA5MDApICYmIChfSU5URUdSQUxfTUFYX0JJVFMgPj0gNjQpCisjICAgIGRlZmluZSBVU0VfV0lOMzJfTEFSR0VfRklMRVMKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFVTRV9XSU4zMl9TTUFMTF9GSUxFUworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykgJiYgIWRlZmluZWQoVVNFX1dJTjMyX0xBUkdFX0ZJTEVTKQorIyAgZGVmaW5lIFVTRV9XSU4zMl9MQVJHRV9GSUxFUworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChVU0VfV0lOMzJfTEFSR0VfRklMRVMpCisjICBkZWZpbmUgVVNFX1dJTjMyX0xBUkdFX0ZJTEVTCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19QT0NDX18pCisjICB1bmRlZiBVU0VfV0lOMzJfTEFSR0VfRklMRVMKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoVVNFX1dJTjMyX0xBUkdFX0ZJTEVTKSAmJiAhZGVmaW5lZChVU0VfV0lOMzJfU01BTExfRklMRVMpCisjICBkZWZpbmUgVVNFX1dJTjMyX1NNQUxMX0ZJTEVTCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgIEROUyBSRVNPTFZFUiBTUEVDSUFMVFkgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVW5kZWZpbmUgYm90aCBVU0VfQVJFUyBhbmQgVVNFX1RIUkVBRFNfV0lOMzIgZm9yIHN5bmNocm9ub3VzIEROUy4KKyAqLworCisvKiBEZWZpbmUgdG8gZW5hYmxlIGMtYXJlcyBhc3luY2hyb25vdXMgRE5TIGxvb2t1cHMuICovCisvKiAjZGVmaW5lIFVTRV9BUkVTIDEgKi8KKworLyogRGVmaW5lIHRvIGVuYWJsZSB0aHJlYWRlZCBhc3luY2hyb25vdXMgRE5TIGxvb2t1cHMuICovCisjZGVmaW5lIFVTRV9USFJFQURTX1dJTjMyIDEKKworI2lmIGRlZmluZWQoVVNFX0FSRVMpICYmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpCisjICBlcnJvciAiT25seSBvbmUgRE5TIGxvb2t1cCBzcGVjaWFsdHkgbWF5IGJlIGRlZmluZWQgYXQgbW9zdCIKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVAgU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENVUkxfSEFTX05PVkVMTF9MREFQU0RLKSB8fCBkZWZpbmVkKENVUkxfSEFTX01PWklMTEFfTERBUFNESykKKyN1bmRlZiBDVVJMX0xEQVBfV0lOCisjZGVmaW5lIEhBVkVfTERBUF9TU0xfSCAxCisjZGVmaW5lIEhBVkVfTERBUF9VUkxfUEFSU0UgMQorI2VsaWYgZGVmaW5lZChDVVJMX0hBU19PUEVOTERBUF9MREFQU0RLKQorI3VuZGVmIENVUkxfTERBUF9XSU4KKyNkZWZpbmUgSEFWRV9MREFQX1VSTF9QQVJTRSAxCisjZWxzZQorI3VuZGVmIEhBVkVfTERBUF9VUkxfUEFSU0UKKyNkZWZpbmUgQ1VSTF9MREFQX1dJTiAxCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmIGRlZmluZWQoQ1VSTF9MREFQX1dJTikKKyNpZiBfX1dBVENPTUNfXyA8IDEyODAKKyNkZWZpbmUgV0lOQkVSQVBJICBfX2RlY2xzcGVjKGNkZWNsKQorI2RlZmluZSBXSU5MREFQQVBJIF9fZGVjbHNwZWMoY2RlY2wpCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1BPQ0NfXykgJiYgZGVmaW5lZChDVVJMX0xEQVBfV0lOKQorIyAgZGVmaW5lIENVUkxfRElTQUJMRV9MREFQIDEKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgQURESVRJT05BTCBERUZJTklUSU9OUyAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBjcHUtbWFjaGluZS1PUyAqLworI3VuZGVmIE9TCisjaWYgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKSAvKiB4ODYgKE1TVkMgb3IgZ2NjKSAqLworI2RlZmluZSBPUyAiaTM4Ni1wYy13aW4zMiIKKyNlbGlmIGRlZmluZWQoX01fWDY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIC8qIHg4Nl82NCAoTVNWQyA+PTIwMDUgb3IgZ2NjKSAqLworI2RlZmluZSBPUyAieDg2XzY0LXBjLXdpbjMyIgorI2VsaWYgZGVmaW5lZChfTV9JQTY0KSAvKiBJdGFuaXVtICovCisjZGVmaW5lIE9TICJpYTY0LXBjLXdpbjMyIgorI2Vsc2UKKyNkZWZpbmUgT1MgInVua25vd24tcGMtd2luMzIiCisjZW5kaWYKKworLyogTmFtZSBvZiBwYWNrYWdlICovCisjZGVmaW5lIFBBQ0tBR0UgImN1cmwiCisKKy8qIElmIHlvdSB3YW50IHRvIGJ1aWxkIGN1cmwgd2l0aCB0aGUgYnVpbHQtaW4gbWFudWFsICovCisjZGVmaW5lIFVTRV9NQU5VQUwgMQorCisjaWYgZGVmaW5lZChfX1BPQ0NfXykgfHwgKFVTRV9JUFY2KQorIyAgZGVmaW5lIEVOQUJMRV9JUFY2IDEKKyNlbmRpZgorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfQ09ORklHX1dJTjMyX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jb25maWctd2luMzJjZS5oIGIvY3VybC03LjI1LjAvbGliL2NvbmZpZy13aW4zMmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFkZTgzZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jb25maWctd2luMzJjZS5oCkBAIC0wLDAgKzEsNDQwIEBACisjaWZuZGVmIF9fTElCX0NPTkZJR19XSU4zMkNFX0gKKyNkZWZpbmUgX19MSUJfQ09ORklHX1dJTjMyQ0VfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICBsaWIvY29uZmlnLXdpbjMyY2UuaCAtIEhhbmQgY3JhZnRlZCBjb25maWcgZmlsZSBmb3Igd2luZG93cyBjZSAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgIEhFQURFUiBGSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxhcnBhL2luZXQuaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8YXNzZXJ0Lmg+IGhlYWRlciBmaWxlLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9BU1NFUlRfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGNyeXB0by5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfQ1JZUFRPX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxlcnJuby5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfRVJSTk9fSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGVyci5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfRVJSX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfRkNOVExfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGdldG9wdC5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfR0VUT1BUX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfSU9fSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfTElNSVRTX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IG5lZWQgdGhlIG1hbGxvYy5oIGhlYWRlciBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmggICovCisjZGVmaW5lIE5FRURfTUFMTE9DX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXRkYi5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfTkVUREJfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNpZ25hbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNndHR5Lmg+IGhlYWRlciBmaWxlLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9TR1RUWV9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3NsLmg+IGhlYWRlciBmaWxlLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9TU0xfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxwcm9jZXNzLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNkZWZpbmUgSEFWRV9QUk9DRVNTX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbGVjdC5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tpby5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfU1lTX1NPQ0tJT19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZSAqLworLyogI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0aW1lLmg+IGhlYWRlciBmaWxlICovCisjZGVmaW5lIEhBVkVfU1lTX1VUSU1FX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW8uaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX1RFUk1JT19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvcy5oPiBoZWFkZXIgZmlsZS4gICovCisvKiAjZGVmaW5lIEhBVkVfVEVSTUlPU19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGltZS5oPiBoZWFkZXIgZmlsZS4gICovCisjZGVmaW5lIEhBVkVfVElNRV9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAgKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fTENDX18pCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbmRvd3MuaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1dJTkRPV1NfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2suaD4gaGVhZGVyIGZpbGUuICAqLworI2RlZmluZSBIQVZFX1dJTlNPQ0tfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2syLmg+IGhlYWRlciBmaWxlLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9XSU5TT0NLMl9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8d3MydGNwaXAuaD4gaGVhZGVyIGZpbGUuICAqLworLyogI2RlZmluZSBIQVZFX1dTMlRDUElQX0ggMSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIE9USEVSIEhFQURFUiBJTkZPICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBpZiBzaWdfYXRvbWljX3QgaXMgYW4gYXZhaWxhYmxlIHR5cGVkZWYuICovCisjZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAgKi8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogRGVmaW5lIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAgKi8KKy8qICNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGNsb3Nlc29ja2V0IGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9DTE9TRVNPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgZG9uJ3QgaGF2ZSB2cHJpbnRmIGJ1dCBkbyBoYXZlIF9kb3BybnQuICAqLworLyogI2RlZmluZSBIQVZFX0RPUFJOVCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkciBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdG5hbWUgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX0dFVEhPU1ROQU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwYXNzIGZ1bmN0aW9uLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9HRVRQQVNTIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRzZXJ2YnluYW1lIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9HRVRTRVJWQllOQU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXR0aW1lb2ZkYXkgZnVuY3Rpb24uICAqLworLyogICNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGluZXRfYWRkciBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfSU5FVF9BRERSIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpb2N0bHNvY2tldCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGxzb2NrZXQgRklPTkJJTyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwZXJyb3IgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX1BFUlJPUiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgUkFORF9zY3JlZW4gZnVuY3Rpb24gd2hlbiB1c2luZyBTU0wgICovCisjZGVmaW5lIEhBVkVfUkFORF9TQ1JFRU4gMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBSQU5EX3N0YXR1cycgZnVuY3Rpb24gd2hlbiB1c2luZyBTU0wuICovCisjZGVmaW5lIEhBVkVfUkFORF9TVEFUVVMgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNlbGVjdCBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfU0VMRUNUIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXR2YnVmIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9TRVRWQlVGIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzb2NrZXQgZnVuY3Rpb24uICAqLworI2RlZmluZSBIQVZFX1NPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyY2FzZWNtcCBmdW5jdGlvbi4gICovCisvKiAjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyZHVwIGZ1bmN0aW9uLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJEVVAgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmZ0aW1lIGZ1bmN0aW9uLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJGVElNRSAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyaWNtcCBmdW5jdGlvbi4gKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJJQ01QIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJuY2FzZWNtcCBmdW5jdGlvbi4gKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJOQ0FTRUNNUCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RybmljbXAgZnVuY3Rpb24uICovCisvKiAjZGVmaW5lIEhBVkVfU1RSTklDTVAgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cnN0ciBmdW5jdGlvbi4gICovCisjZGVmaW5lIEhBVkVfU1RSU1RSIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJ0b2xsIGZ1bmN0aW9uLiAgKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKQorI2RlZmluZSBIQVZFX1NUUlRPTEwgMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdGNnZXRhdHRyIGZ1bmN0aW9uLiAgKi8KKy8qICNkZWZpbmUgSEFWRV9UQ0dFVEFUVFIgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHRjc2V0YXR0ciBmdW5jdGlvbi4gICovCisvKiAjZGVmaW5lIEhBVkVfVENTRVRBVFRSIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB1dGltZSBmdW5jdGlvbiAqLworI2RlZmluZSBIQVZFX1VUSU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRuYW1laW5mbyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVROQU1FSU5GTyAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19RVUFMX0FSRzEgY29uc3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcxIHN0cnVjdCBzb2NrYWRkciAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHMiBzb2NrbGVuX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZ3MgNCBhbmQgNiBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYgRFdPUkQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA3IGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc3IGludAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHJlY3YgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDViAxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzEgU09DS0VUCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzIgY2hhciAqCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzMgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHJlY3YuICovCisjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWIGludAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHJlY3Zmcm9tIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1JFQ1ZGUk9NIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcxIFNPQ0tFVAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgMiBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMiBjaGFyCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSBzdHJ1Y3Qgc29ja2FkZHIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDYgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzYgaW50CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX1JFVFYgaW50CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2VuZCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRU5EIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMSBTT0NLRVQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9RVUFMX0FSRzIgY29uc3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMiBjaGFyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHMyBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3Igc2VuZC4gKi8KKyNkZWZpbmUgU0VORF9UWVBFX1JFVFYgaW50CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICBUWVBFREVGIFJFUExBQ0VNRU5UUyAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRGVmaW5lIHRoaXMgaWYgaW5fYWRkcl90IGlzIG5vdCBhbiBhdmFpbGFibGUgJ3R5cGVkZWZlZCcgdHlwZSAqLworI2RlZmluZSBpbl9hZGRyX3QgdW5zaWduZWQgbG9uZworCisvKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoaW50IG9yIHZvaWQpLiAgKi8KKyNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCisKKy8qIERlZmluZSBzc2l6ZV90IGlmIGl0IGlzIG5vdCBhbiBhdmFpbGFibGUgJ3R5cGVkZWZlZCcgdHlwZSAqLworI2lmIChkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAoX19XQVRDT01DX18gPj0gMTI0MCkpIHx8IGRlZmluZWQoX19QT0NDX18pCisjZWxpZiBkZWZpbmVkKF9XSU42NCkKKyNkZWZpbmUgc3NpemVfdCBfX2ludDY0CisjZWxzZQorI2RlZmluZSBzc2l6ZV90IGludAorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRZUEUgU0laRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0lOVCA0CisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGRvdWJsZScsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFIDE2CisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOCAqLworCisvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9TSE9SVCAyCisKKy8qIFRoZSBzaXplIG9mIGBzaXplX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjaWYgZGVmaW5lZChfV0lONjQpCisjICBkZWZpbmUgU0laRU9GX1NJWkVfVCA4CisjZWxzZQorIyAgZGVmaW5lIFNJWkVPRl9TSVpFX1QgNAorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJVQ1QgUkVMQVRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRSAxICovCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHN0cnVjdCB0aW1ldmFsICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwgMQorCisvKiBEZWZpbmUgdGhpcyBpZiBzdHJ1Y3Qgc29ja2FkZHJfaW42IGhhcyB0aGUgc2luNl9zY29wZV9pZCBtZW1iZXIgKi8KKyNkZWZpbmUgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgQ09NUElMRVIgU1BFQ0lGSUMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVW5kZWYga2V5d29yZCAnY29uc3QnIGlmIGl0IGRvZXMgbm90IHdvcmsuICAqLworLyogI3VuZGVmIGNvbnN0ICovCisKKy8qIERlZmluZSB0byBhdm9pZCBWUzIwMDUgY29tcGxhaW5pbmcgYWJvdXQgcG9ydGFibGUgQyBmdW5jdGlvbnMgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTQwMCkKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyNkZWZpbmUgX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSAxCisjZW5kaWYKKworLyogVlMyMDA1IGFuZCBsYXRlciBkYWZhdWx0IHNpemUgZm9yIHRpbWVfdCBpcyA2NC1iaXQsIHVubGVzcyAqLworLyogX1VTRV8zMkJJVF9USU1FX1QgaGFzIGJlZW4gZGVmaW5lZCB0byBnZXQgYSAzMi1iaXQgdGltZV90LiAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNDAwKQorIyAgaWZuZGVmIF9VU0VfMzJCSVRfVElNRV9UCisjICAgIGRlZmluZSBTSVpFT0ZfVElNRV9UIDgKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFNJWkVPRl9USU1FX1QgNAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIExBUkdFIEZJTEUgU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfV0lOMzJfV0NFKQorIyAgaWYgKF9NU0NfVkVSID49IDkwMCkgJiYgKF9JTlRFR1JBTF9NQVhfQklUUyA+PSA2NCkKKyMgICAgZGVmaW5lIFVTRV9XSU4zMl9MQVJHRV9GSUxFUworIyAgZWxzZQorIyAgICBkZWZpbmUgVVNFX1dJTjMyX1NNQUxMX0ZJTEVTCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChVU0VfV0lOMzJfTEFSR0VfRklMRVMpICYmICFkZWZpbmVkKFVTRV9XSU4zMl9TTUFMTF9GSUxFUykKKyMgIGRlZmluZSBVU0VfV0lOMzJfU01BTExfRklMRVMKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVAgU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQ1VSTF9MREFQX1dJTiAxCisjdW5kZWYgSEFWRV9MREFQX1VSTF9QQVJTRQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgQURESVRJT05BTCBERUZJTklUSU9OUyAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBjcHUtbWFjaGluZS1PUyAqLworI3VuZGVmIE9TCisjZGVmaW5lIE9TICJpMzg2LXBjLXdpbjMyY2UiCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFICJjdXJsIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgV2luQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX0ZJTEUgMQorI2RlZmluZSBDVVJMX0RJU0FCTEVfVEVMTkVUIDEKKyNkZWZpbmUgQ1VSTF9ESVNBQkxFX0xEQVAgMQorCisjZGVmaW5lIEVOT1NQQyAxCisjZGVmaW5lIEVOT01FTSAyCisjZGVmaW5lIEVBR0FJTiAzCisKK2V4dGVybiBpbnQgc3RhdChjb25zdCBjaGFyICpwYXRoLHN0cnVjdCBzdGF0ICpidWZmZXIgKTsKKworI2VuZGlmIC8qIF9fTElCX0NPTkZJR19XSU4zMkNFX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jb25uZWN0LmMgYi9jdXJsLTcuMjUuMC9saWIvY29ubmVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZjY4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY29ubmVjdC5jCkBAIC0wLDAgKzEsMTI0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4gLyogPG5ldGluZXQvdGNwLmg+IG1heSBuZWVkIGl0ICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19VTl9ICisjaW5jbHVkZSA8c3lzL3VuLmg+IC8qIGZvciBzb2NrYWRkcl91biAqLworI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4gLyogZm9yIFRDUF9OT0RFTEFZICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoSEFWRV9JT0NUTF9GSU9OQklPKSAmJiBkZWZpbmVkKE5FVFdBUkUpKQorI2luY2x1ZGUgPHN5cy9maWxpby5oPgorI2VuZGlmCisjaWZkZWYgTkVUV0FSRQorI3VuZGVmIGluX2FkZHJfdAorI2RlZmluZSBpbl9hZGRyX3QgdW5zaWduZWQgbG9uZworI2VuZGlmCisjaWZkZWYgX19WTVMKKyNpbmNsdWRlIDxpbi5oPgorI2luY2x1ZGUgPGluZXQuaD4KKyNlbmRpZgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaWYyaXAuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgInVybC5oIiAvKiBmb3IgQ3VybF9zYWZlZnJlZSgpICovCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgInNvY2thZGRyLmgiIC8qIHJlcXVpcmVkIGZvciBDdXJsX3NvY2thZGRyX3N0b3JhZ2UgKi8KKyNpbmNsdWRlICJpbmV0X250b3AuaCIKKyNpbmNsdWRlICJpbmV0X3B0b24uaCIKKyNpbmNsdWRlICJzc2xnZW4uaCIgLyogZm9yIEN1cmxfc3NsX2NoZWNrX2N4bigpICovCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjaWZkZWYgX19TWU1CSUFOMzJfXworLyogVGhpcyBpc24ndCBhY3R1YWxseSBzdXBwb3J0ZWQgdW5kZXIgU3ltYmlhbiBPUyAqLworI3VuZGVmIFNPX05PU0lHUElQRQorI2VuZGlmCisKK3N0YXRpYyBib29sIHZlcmlmeWNvbm5lY3QoY3VybF9zb2NrZXRfdCBzb2NrZmQsIGludCAqZXJyb3IpOworCitzdGF0aWMgdm9pZAordGNwa2VlcGFsaXZlKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkKQoreworICBpbnQgb3B0dmFsID0gZGF0YS0+c2V0LnRjcF9rZWVwYWxpdmU/MTowOworCisgIC8qIG9ubHkgc2V0IElETEUgYW5kIElOVFZMIGlmIHNldHRpbmcgS0VFUEFMSVZFIGlzIHN1Y2Nlc3NmdWwgKi8KKyAgaWYoc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwKKyAgICAgICAgKHZvaWQgKikmb3B0dmFsLCBzaXplb2Yob3B0dmFsKSkgPCAwKSB7CisgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBzZXQgU09fS0VFUEFMSVZFIG9uIGZkICVkXG4iLCBzb2NrZmQpOworICB9CisgIGVsc2UgeworI2lmZGVmIFRDUF9LRUVQSURMRQorICAgIG9wdHZhbCA9IGN1cmx4X3NsdG9zaShkYXRhLT5zZXQudGNwX2tlZXBpZGxlKTsKKyAgICBpZihzZXRzb2Nrb3B0KHNvY2tmZCwgSVBQUk9UT19UQ1AsIFRDUF9LRUVQSURMRSwKKyAgICAgICAgICAodm9pZCAqKSZvcHR2YWwsIHNpemVvZihvcHR2YWwpKSA8IDApIHsKKyAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gc2V0IFRDUF9LRUVQSURMRSBvbiBmZCAlZFxuIiwgc29ja2ZkKTsKKyAgICB9CisjZW5kaWYKKyNpZmRlZiBUQ1BfS0VFUElOVFZMCisgICAgb3B0dmFsID0gY3VybHhfc2x0b3NpKGRhdGEtPnNldC50Y3Bfa2VlcGludHZsKTsKKyAgICBpZihzZXRzb2Nrb3B0KHNvY2tmZCwgSVBQUk9UT19UQ1AsIFRDUF9LRUVQSU5UVkwsCisgICAgICAgICAgKHZvaWQgKikmb3B0dmFsLCBzaXplb2Yob3B0dmFsKSkgPCAwKSB7CisgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIHNldCBUQ1BfS0VFUElOVFZMIG9uIGZkICVkXG4iLCBzb2NrZmQpOworICAgIH0KKyNlbmRpZgorICB9Cit9CisKK3N0YXRpYyBDVVJMY29kZQorc2luZ2xlaXBjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICBjb25zdCBDdXJsX2FkZHJpbmZvICphaSwgLyogc3RhcnQgY29ubmVjdGluZyB0byB0aGlzICovCisgICAgICAgICAgICAgICAgbG9uZyB0aW1lb3V0X21zLAorICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssCisgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkKTsKKworLyoKKyAqIEN1cmxfdGltZWxlZnQoKSByZXR1cm5zIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGxlZnQgYWxsb3dlZCBmb3IgdGhlCisgKiB0cmFuc2Zlci9jb25uZWN0aW9uLiBJZiB0aGUgdmFsdWUgaXMgbmVnYXRpdmUsIHRoZSB0aW1lb3V0IHRpbWUgaGFzIGFscmVhZHkKKyAqIGVsYXBzZWQuCisgKgorICogVGhlIHN0YXJ0IHRpbWUgaXMgc3RvcmVkIGluIHByb2dyZXNzLnRfc3RhcnRzaW5nbGUgLSBhcyBzZXQgd2l0aAorICogQ3VybF9wZ3JzVGltZSguLi4sIFRJTUVSX1NUQVJUU0lOR0xFKTsKKyAqCisgKiBJZiAnbm93cCcgaXMgbm9uLU5VTEwsIGl0IHBvaW50cyB0byB0aGUgY3VycmVudCB0aW1lLgorICogJ2R1cmluZ2Nvbm5lY3QnIGlzIEZBTFNFIGlmIG5vdCBkdXJpbmcgYSBjb25uZWN0LCBhcyB0aGVuIG9mIGNvdXJzZSB0aGUKKyAqIGNvbm5lY3QgdGltZW91dCBpcyBub3QgdGFrZW4gaW50byBhY2NvdW50IQorICoKKyAqIEB1bml0dGVzdDogMTMwMworICovCitsb25nIEN1cmxfdGltZWxlZnQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKm5vd3AsCisgICAgICAgICAgICAgICAgICAgYm9vbCBkdXJpbmdjb25uZWN0KQoreworICBpbnQgdGltZW91dF9zZXQgPSAwOworICBsb25nIHRpbWVvdXRfbXMgPSBkdXJpbmdjb25uZWN0P0RFRkFVTFRfQ09OTkVDVF9USU1FT1VUOjA7CisgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKworICAvKiBpZiBhIHRpbWVvdXQgaXMgc2V0LCB1c2UgdGhlIG1vc3QgcmVzdHJpY3RpdmUgb25lICovCisKKyAgaWYoZGF0YS0+c2V0LnRpbWVvdXQgPiAwKQorICAgIHRpbWVvdXRfc2V0IHw9IDE7CisgIGlmKGR1cmluZ2Nvbm5lY3QgJiYgKGRhdGEtPnNldC5jb25uZWN0dGltZW91dCA+IDApKQorICAgIHRpbWVvdXRfc2V0IHw9IDI7CisKKyAgc3dpdGNoICh0aW1lb3V0X3NldCkgeworICBjYXNlIDE6CisgICAgdGltZW91dF9tcyA9IGRhdGEtPnNldC50aW1lb3V0OworICAgIGJyZWFrOworICBjYXNlIDI6CisgICAgdGltZW91dF9tcyA9IGRhdGEtPnNldC5jb25uZWN0dGltZW91dDsKKyAgICBicmVhazsKKyAgY2FzZSAzOgorICAgIGlmKGRhdGEtPnNldC50aW1lb3V0IDwgZGF0YS0+c2V0LmNvbm5lY3R0aW1lb3V0KQorICAgICAgdGltZW91dF9tcyA9IGRhdGEtPnNldC50aW1lb3V0OworICAgIGVsc2UKKyAgICAgIHRpbWVvdXRfbXMgPSBkYXRhLT5zZXQuY29ubmVjdHRpbWVvdXQ7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgLyogdXNlIHRoZSBkZWZhdWx0ICovCisgICAgaWYoIWR1cmluZ2Nvbm5lY3QpCisgICAgICAvKiBpZiB3ZSdyZSBub3QgZHVyaW5nIGNvbm5lY3QsIHRoZXJlJ3Mgbm8gZGVmYXVsdCB0aW1lb3V0IHNvIGlmIHdlJ3JlCisgICAgICAgICBhdCB6ZXJvIHdlIGJldHRlciBqdXN0IHJldHVybiB6ZXJvIGFuZCBub3QgbWFrZSBpdCBhIG5lZ2F0aXZlIG51bWJlcgorICAgICAgICAgYnkgdGhlIG1hdGggYmVsb3cgKi8KKyAgICAgIHJldHVybiAwOworICAgIGJyZWFrOworICB9CisKKyAgaWYoIW5vd3ApIHsKKyAgICBub3cgPSBDdXJsX3R2bm93KCk7CisgICAgbm93cCA9ICZub3c7CisgIH0KKworICAvKiBzdWJ0cmFjdCBlbGFwc2VkIHRpbWUgKi8KKyAgdGltZW91dF9tcyAtPSBDdXJsX3R2ZGlmZigqbm93cCwgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZSk7CisgIGlmKCF0aW1lb3V0X21zKQorICAgIC8qIGF2b2lkIHJldHVybmluZyAwIGFzIHRoYXQgbWVhbnMgbm8gdGltZW91dCEgKi8KKyAgICByZXR1cm4gLTE7CisKKyAgcmV0dXJuIHRpbWVvdXRfbXM7Cit9CisKKy8qCisgKiB3YWl0Y29ubmVjdCgpIHdhaXRzIGZvciBhIFRDUCBjb25uZWN0IG9uIHRoZSBnaXZlbiBzb2NrZXQgZm9yIHRoZSBzcGVjaWZpZWQKKyAqIG51bWJlciBpZiBtaWxsaXNlY29uZHMuIEl0IHJldHVybnM6CisgKi8KKworI2RlZmluZSBXQUlUQ09OTl9DT05ORUNURUQgICAgIDAKKyNkZWZpbmUgV0FJVENPTk5fU0VMRUNUX0VSUk9SIC0xCisjZGVmaW5lIFdBSVRDT05OX1RJTUVPVVQgICAgICAgMQorI2RlZmluZSBXQUlUQ09OTl9GRFNFVF9FUlJPUiAgIDIKKyNkZWZpbmUgV0FJVENPTk5fQUJPUlRFRCAgICAgICAzCisKK3N0YXRpYworaW50IHdhaXRjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tmZCwgLyogc29ja2V0ICovCisgICAgICAgICAgICAgICAgbG9uZyB0aW1lb3V0X21zZWMpCit7CisgIGludCByYzsKKyNpZmRlZiBtcGVpeAorICAvKiBDYWxsIHRoaXMgZnVuY3Rpb24gb25jZSBub3csIGFuZCBpZ25vcmUgdGhlIHJlc3VsdHMuIFdlIGRvIHRoaXMgdG8KKyAgICAgImNsZWFyIiB0aGUgZXJyb3Igc3RhdGUgb24gdGhlIHNvY2tldCBzbyB0aGF0IHdlIGNhbiBsYXRlciByZWFkIGl0CisgICAgIHJlbGlhYmx5LiBUaGlzIGlzIHJlcG9ydGVkIG5lY2Vzc2FyeSBvbiB0aGUgTVBFL2lYIG9wZXJhdGluZyBzeXN0ZW0uICovCisgICh2b2lkKXZlcmlmeWNvbm5lY3Qoc29ja2ZkLCBOVUxMKTsKKyNlbmRpZgorCisgIGZvcig7OykgeworCisgICAgLyogbm93IHNlbGVjdCgpIHVudGlsIHdlIGdldCBjb25uZWN0IG9yIHRpbWVvdXQgKi8KKyAgICByYyA9IEN1cmxfc29ja2V0X3JlYWR5KENVUkxfU09DS0VUX0JBRCwgc29ja2ZkLCB0aW1lb3V0X21zZWM+MTAwMD8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDA6dGltZW91dF9tc2VjKTsKKyAgICBpZihDdXJsX3BncnNVcGRhdGUoY29ubikpCisgICAgICByZXR1cm4gV0FJVENPTk5fQUJPUlRFRDsKKworICAgIGlmKC0xID09IHJjKQorICAgICAgLyogZXJyb3IsIG5vIGNvbm5lY3QgaGVyZSwgdHJ5IG5leHQgKi8KKyAgICAgIHJldHVybiBXQUlUQ09OTl9TRUxFQ1RfRVJST1I7CisKKyAgICBlbHNlIGlmKDAgPT0gcmMpIHsKKyAgICAgIC8qIHRpbWVvdXQgKi8KKyAgICAgIHRpbWVvdXRfbXNlYyAtPSAxMDAwOworICAgICAgaWYodGltZW91dF9tc2VjIDw9IDApCisgICAgICAgIHJldHVybiBXQUlUQ09OTl9USU1FT1VUOworCisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZihyYyAmIENVUkxfQ1NFTEVDVF9FUlIpCisgICAgICAvKiBlcnJvciBjb25kaXRpb24gY2F1Z2h0ICovCisgICAgICByZXR1cm4gV0FJVENPTk5fRkRTRVRfRVJST1I7CisKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gV0FJVENPTk5fQ09OTkVDVEVEOworfQorCitzdGF0aWMgQ1VSTGNvZGUgYmluZGxvY2FsKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsIGludCBhZikKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2Ugc2E7CisgIHN0cnVjdCBzb2NrYWRkciAqc29jayA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2E7ICAvKiBiaW5kIHRvIHRoaXMgYWRkcmVzcyAqLworICBjdXJsX3NvY2tsZW5fdCBzaXplb2Zfc2EgPSAwOyAvKiBzaXplIG9mIHRoZSBkYXRhIHNvY2sgcG9pbnRzIHRvICovCisgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2k0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzYTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaTYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZzYTsKKyNlbmRpZgorCisgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqaD1OVUxMOworICB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gZGF0YS0+c2V0LmxvY2FscG9ydDsgLyogdXNlIHRoaXMgcG9ydCBudW1iZXIsIDAgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmFuZG9tIiAqLworICAvKiBob3cgbWFueSBwb3J0IG51bWJlcnMgdG8gdHJ5IHRvIGJpbmQgdG8sIGluY3JlYXNpbmcgb25lIGF0IGEgdGltZSAqLworICBpbnQgcG9ydG51bSA9IGRhdGEtPnNldC5sb2NhbHBvcnRyYW5nZTsKKyAgY29uc3QgY2hhciAqZGV2ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfREVWSUNFXTsKKyAgaW50IGVycm9yOworICBjaGFyIG15aG9zdFsyNTZdID0gIiI7CisgIGludCBkb25lID0gMDsgLyogLTEgZm9yIGVycm9yLCAxIGZvciBhZGRyZXNzIGZvdW5kICovCisgIGJvb2wgaXNfaW50ZXJmYWNlID0gRkFMU0U7CisgIGJvb2wgaXNfaG9zdCA9IEZBTFNFOworICBzdGF0aWMgY29uc3QgY2hhciAqaWZfcHJlZml4ID0gImlmISI7CisgIHN0YXRpYyBjb25zdCBjaGFyICpob3N0X3ByZWZpeCA9ICJob3N0ISI7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogU2VsZWN0IGRldmljZSB0byBiaW5kIHNvY2tldCB0bworICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgaWYoIWRldiAmJiAhcG9ydCkKKyAgICAvKiBubyBsb2NhbCBraW5kIG9mIGJpbmRpbmcgd2FzIHJlcXVlc3RlZCAqLworICAgIHJldHVybiBDVVJMRV9PSzsKKworICBtZW1zZXQoJnNhLCAwLCBzaXplb2Yoc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSkpOworCisgIGlmKGRldiAmJiAoc3RybGVuKGRldik8MjU1KSApIHsKKyAgICBpZihzdHJuY21wKGlmX3ByZWZpeCwgZGV2LCBzdHJsZW4oaWZfcHJlZml4KSkgPT0gMCkgeworICAgICAgZGV2ICs9IHN0cmxlbihpZl9wcmVmaXgpOworICAgICAgaXNfaW50ZXJmYWNlID0gVFJVRTsKKyAgICB9CisgICAgZWxzZSBpZihzdHJuY21wKGhvc3RfcHJlZml4LCBkZXYsIHN0cmxlbihob3N0X3ByZWZpeCkpID09IDApIHsKKyAgICAgIGRldiArPSBzdHJsZW4oaG9zdF9wcmVmaXgpOworICAgICAgaXNfaG9zdCA9IFRSVUU7CisgICAgfQorCisgICAgLyogaW50ZXJmYWNlICovCisgICAgaWYoIWlzX2hvc3QgJiYgKGlzX2ludGVyZmFjZSB8fCBDdXJsX2lmX2lzX2ludGVyZmFjZV9uYW1lKGRldikpKSB7CisgICAgICBpZihDdXJsX2lmMmlwKGFmLCBkZXYsIG15aG9zdCwgc2l6ZW9mKG15aG9zdCkpID09IE5VTEwpCisgICAgICAgIHJldHVybiBDVVJMRV9JTlRFUkZBQ0VfRkFJTEVEOworCisgICAgICAvKgorICAgICAgICogV2Ugbm93IGhhdmUgdGhlIG51bWVyaWNhbCBJUCBhZGRyZXNzIGluIHRoZSAnbXlob3N0JyBidWZmZXIKKyAgICAgICAqLworICAgICAgaW5mb2YoZGF0YSwgIkxvY2FsIEludGVyZmFjZSAlcyBpcyBpcCAlcyB1c2luZyBhZGRyZXNzIGZhbWlseSAlaVxuIiwKKyAgICAgICAgICAgIGRldiwgbXlob3N0LCBhZik7CisgICAgICBkb25lID0gMTsKKworI2lmZGVmIFNPX0JJTkRUT0RFVklDRQorICAgICAgLyogSSBhbSBub3Qgc3VyZSBhbnkgb3RoZXIgT1NzIHRoYW4gTGludXggdGhhdCBwcm92aWRlIHRoaXMgZmVhdHVyZSwgYW5kCisgICAgICAgKiBhdCB0aGUgbGVhc3QgSSBjYW5ub3QgdGVzdC4gLS1CZW4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGZlYXR1cmUgYWxsb3dzIG9uZSB0byB0aWdodGx5IGJpbmQgdGhlIGxvY2FsIHNvY2tldCB0byBhCisgICAgICAgKiBwYXJ0aWN1bGFyIGludGVyZmFjZS4gIFRoaXMgd2lsbCBmb3JjZSBldmVuIHJlcXVlc3RzIHRvIG90aGVyIGxvY2FsCisgICAgICAgKiBpbnRlcmZhY2VzIHRvIGdvIG91dCB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLgorICAgICAgICoKKyAgICAgICAqCisgICAgICAgKiBPbmx5IGJpbmQgdG8gdGhlIGludGVyZmFjZSB3aGVuIHNwZWNpZmllZCBhcyBpbnRlcmZhY2UsIG5vdCBqdXN0IGFzIGEKKyAgICAgICAqIGhvc3RuYW1lIG9yIGlwIGFkZHJlc3MuCisgICAgICAgKi8KKyAgICAgIGlmKHNldHNvY2tvcHQoc29ja2ZkLCBTT0xfU09DS0VULCBTT19CSU5EVE9ERVZJQ0UsCisgICAgICAgICAgICAgICAgICAgIGRldiwgKGN1cmxfc29ja2xlbl90KXN0cmxlbihkZXYpKzEpICE9IDApIHsKKyAgICAgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgICAgIGluZm9mKGRhdGEsICJTT19CSU5EVE9ERVZJQ0UgJXMgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzOyIKKyAgICAgICAgICAgICAgIiB3aWxsIGRvIHJlZ3VsYXIgYmluZFxuIiwKKyAgICAgICAgICAgICAgZGV2LCBlcnJvciwgQ3VybF9zdHJlcnJvcihjb25uLCBlcnJvcikpOworICAgICAgICAvKiBUaGlzIGlzIHR5cGljYWxseSAiZXJybm8gMSwgZXJyb3I6IE9wZXJhdGlvbiBub3QgcGVybWl0dGVkIiBpZgorICAgICAgICAgICB5b3UncmUgbm90IHJ1bm5pbmcgYXMgcm9vdCBvciBhbm90aGVyIHN1aXRhYmxlIHByaXZpbGVnZWQgdXNlciAqLworICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIGVsc2UgeworICAgICAgLyoKKyAgICAgICAqIFRoaXMgd2FzIG5vdCBhbiBpbnRlcmZhY2UsIHJlc29sdmUgdGhlIG5hbWUgYXMgYSBob3N0IG5hbWUKKyAgICAgICAqIG9yIElQIG51bWJlcgorICAgICAgICoKKyAgICAgICAqIFRlbXBvcmFyaWx5IGZvcmNlIG5hbWUgcmVzb2x1dGlvbiB0byB1c2Ugb25seSB0aGUgYWRkcmVzcyB0eXBlCisgICAgICAgKiBvZiB0aGUgY29ubmVjdGlvbi4gVGhlIHJlc29sdmUgZnVuY3Rpb25zIHNob3VsZCByZWFsbHkgYmUgY2hhbmdlZAorICAgICAgICogdG8gdGFrZSBhIHR5cGUgcGFyYW1ldGVyIGluc3RlYWQuCisgICAgICAgKi8KKyAgICAgIGxvbmcgaXB2ZXIgPSBjb25uLT5pcF92ZXJzaW9uOworICAgICAgaW50IHJjOworCisgICAgICBpZihhZiA9PSBBRl9JTkVUKQorICAgICAgICBjb25uLT5pcF92ZXJzaW9uID0gQ1VSTF9JUFJFU09MVkVfVjQ7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgIGVsc2UgaWYoYWYgPT0gQUZfSU5FVDYpCisgICAgICAgIGNvbm4tPmlwX3ZlcnNpb24gPSBDVVJMX0lQUkVTT0xWRV9WNjsKKyNlbmRpZgorCisgICAgICByYyA9IEN1cmxfcmVzb2x2KGNvbm4sIGRldiwgMCwgJmgpOworICAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKQorICAgICAgICAodm9pZClDdXJsX3Jlc29sdmVyX3dhaXRfcmVzb2x2KGNvbm4sICZoKTsKKyAgICAgIGNvbm4tPmlwX3ZlcnNpb24gPSBpcHZlcjsKKworICAgICAgaWYoaCkgeworICAgICAgICAvKiBjb252ZXJ0IHRoZSByZXNvbHZlZCBhZGRyZXNzLCBzaXplb2YgbXlob3N0ID49IElORVRfQUREUlNUUkxFTiAqLworICAgICAgICBDdXJsX3ByaW50YWJsZV9hZGRyZXNzKGgtPmFkZHIsIG15aG9zdCwgc2l6ZW9mKG15aG9zdCkpOworICAgICAgICBpbmZvZihkYXRhLCAiTmFtZSAnJXMnIGZhbWlseSAlaSByZXNvbHZlZCB0byAnJXMnIGZhbWlseSAlaVxuIiwKKyAgICAgICAgICAgICAgZGV2LCBhZiwgbXlob3N0LCBoLT5hZGRyLT5haV9mYW1pbHkpOworICAgICAgICBDdXJsX3Jlc29sdl91bmxvY2soZGF0YSwgaCk7CisgICAgICAgIGRvbmUgPSAxOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHByb3ZpZGVkIGRldiB3YXMgbm8gaW50ZXJmYWNlIChvciBpbnRlcmZhY2VzIGFyZSBub3Qgc3VwcG9ydGVkCisgICAgICAgICAqIGUuZy4gc29sYXJpcykgbm8gaXAgYWRkcmVzcyBhbmQgbm8gZG9tYWluIHdlIGZhaWwgaGVyZQorICAgICAgICAgKi8KKyAgICAgICAgZG9uZSA9IC0xOworICAgICAgfQorICAgIH0KKworICAgIGlmKGRvbmUgPiAwKSB7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgIC8qIGlwdjYgYWRkcmVzcyAqLworICAgICAgaWYoKGFmID09IEFGX0lORVQ2KSAmJgorICAgICAgICAgKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBteWhvc3QsICZzaTYtPnNpbjZfYWRkcikgPiAwKSkgeworICAgICAgICBzaTYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIHNpNi0+c2luNl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgICAgIHNpemVvZl9zYSA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgLyogaXB2NCBhZGRyZXNzICovCisgICAgICBpZigoYWYgPT0gQUZfSU5FVCkgJiYKKyAgICAgICAgIChDdXJsX2luZXRfcHRvbihBRl9JTkVULCBteWhvc3QsICZzaTQtPnNpbl9hZGRyKSA+IDApKSB7CisgICAgICAgIHNpNC0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIHNpNC0+c2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAgICAgc2l6ZW9mX3NhID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgICB9CisgICAgfQorCisgICAgaWYoZG9uZSA8IDEpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJDb3VsZG4ndCBiaW5kIHRvICclcyciLCBkZXYpOworICAgICAgcmV0dXJuIENVUkxFX0lOVEVSRkFDRV9GQUlMRUQ7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qIG5vIGRldmljZSB3YXMgZ2l2ZW4sIHByZXBhcmUgc2EgdG8gbWF0Y2ggYWYncyBuZWVkcyAqLworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgaWYoYWYgPT0gQUZfSU5FVDYpIHsKKyAgICAgIHNpNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgIHNpNi0+c2luNl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgICBzaXplb2Zfc2EgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIGlmKGFmID09IEFGX0lORVQpIHsKKyAgICAgIHNpNC0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICBzaTQtPnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgICBzaXplb2Zfc2EgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgICB9CisgIH0KKworICBmb3IoOzspIHsKKyAgICBpZihiaW5kKHNvY2tmZCwgc29jaywgc2l6ZW9mX3NhKSA+PSAwKSB7CisgICAgICAvKiB3ZSBzdWNjZWVkZWQgdG8gYmluZCAqLworICAgICAgc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSBhZGQ7CisgICAgICBjdXJsX3NvY2tsZW5fdCBzaXplID0gc2l6ZW9mKGFkZCk7CisgICAgICBtZW1zZXQoJmFkZCwgMCwgc2l6ZW9mKHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2UpKTsKKyAgICAgIGlmKGdldHNvY2tuYW1lKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkLCAmc2l6ZSkgPCAwKSB7CisgICAgICAgIGRhdGEtPnN0YXRlLm9zX2Vycm5vID0gZXJyb3IgPSBTT0NLRVJSTk87CisgICAgICAgIGZhaWxmKGRhdGEsICJnZXRzb2NrbmFtZSgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCisgICAgICAgICAgICAgIGVycm9yLCBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7CisgICAgICAgIHJldHVybiBDVVJMRV9JTlRFUkZBQ0VfRkFJTEVEOworICAgICAgfQorICAgICAgaW5mb2YoZGF0YSwgIkxvY2FsIHBvcnQ6ICVodVxuIiwgcG9ydCk7CisgICAgICBjb25uLT5iaXRzLmJvdW5kID0gVFJVRTsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisKKyAgICBpZigtLXBvcnRudW0gPiAwKSB7CisgICAgICBpbmZvZihkYXRhLCAiQmluZCB0byBsb2NhbCBwb3J0ICVodSBmYWlsZWQsIHRyeWluZyBuZXh0XG4iLCBwb3J0KTsKKyAgICAgIHBvcnQrKzsgLyogdHJ5IG5leHQgcG9ydCAqLworICAgICAgLyogV2UgcmUtdXNlL2Nsb2JiZXIgdGhlIHBvcnQgdmFyaWFibGUgaGVyZSBiZWxvdyAqLworICAgICAgaWYoc29jay0+c2FfZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIHNpNC0+c2luX3BvcnQgPSBudG9ocyhwb3J0KTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgICAgZWxzZQorICAgICAgICBzaTYtPnNpbjZfcG9ydCA9IG50b2hzKHBvcnQpOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICAgIGJyZWFrOworICB9CisKKyAgZGF0YS0+c3RhdGUub3NfZXJybm8gPSBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgZmFpbGYoZGF0YSwgImJpbmQgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgZXJyb3IsIEN1cmxfc3RyZXJyb3IoY29ubiwgZXJyb3IpKTsKKworICByZXR1cm4gQ1VSTEVfSU5URVJGQUNFX0ZBSUxFRDsKK30KKworLyoKKyAqIHZlcmlmeWNvbm5lY3QoKSByZXR1cm5zIFRSVUUgaWYgdGhlIGNvbm5lY3QgcmVhbGx5IGhhcyBoYXBwZW5lZC4KKyAqLworc3RhdGljIGJvb2wgdmVyaWZ5Y29ubmVjdChjdXJsX3NvY2tldF90IHNvY2tmZCwgaW50ICplcnJvcikKK3sKKyAgYm9vbCByYyA9IFRSVUU7CisjaWZkZWYgU09fRVJST1IKKyAgaW50IGVyciA9IDA7CisgIGN1cmxfc29ja2xlbl90IGVyclNpemUgPSBzaXplb2YoZXJyKTsKKworI2lmZGVmIFdJTjMyCisgIC8qCisgICAqIEluIE9jdG9iZXIgMjAwMyB3ZSBlZmZlY3RpdmVseSBudWxsaWZpZWQgdGhpcyBmdW5jdGlvbiBvbiBXaW5kb3dzIGR1ZSB0bworICAgKiBwcm9ibGVtcyB3aXRoIGl0IHVzaW5nIGFsbCBDUFUgaW4gbXVsdGktdGhyZWFkZWQgY2FzZXMuCisgICAqCisgICAqIEluIE1heSAyMDA0LCB3ZSBicmluZyBpdCBiYWNrIHRvIG9mZmVyIG1vcmUgaW5mbyBiYWNrIG9uIGNvbm5lY3QgZmFpbHVyZXMuCisgICAqIEdpc2xlIFZhbmVtIGNvdWxkIHJlcHJvZHVjZSB0aGUgZm9ybWVyIHByb2JsZW1zIHdpdGggdGhpcyBmdW5jdGlvbiwgYnV0CisgICAqIGNvdWxkIGF2b2lkIHRoZW0gYnkgYWRkaW5nIHRoaXMgU2xlZXBFeCgpIGNhbGwgYmVsb3c6CisgICAqCisgICAqICAgICJJIGRvbid0IGhhdmUgUmF0aW9uYWwgUXVhbnRpZnksIGJ1dCB0aGUgaGludCBmcm9tIGhpcyBwb3N0IHdhcworICAgKiAgICBudGRsbDo6TnRSZW1vdmVJb0NvbXBsZXRpb24oKS4gU28gSSdkIGFzc3VtZSB0aGUgU2xlZXBFeCAob3IgbWF5YmUKKyAgICogICAganVzdCBTbGVlcCgwKSB3b3VsZCBiZSBlbm91Z2g/KSB3b3VsZCByZWxlYXNlIHdoYXRldmVyCisgICAqICAgIG11dGV4L2NyaXRpY2FsLXNlY3Rpb24gdGhlIG50ZGxsIGNhbGwgaXMgd2FpdGluZyBvbi4KKyAgICoKKyAgICogICAgU29tZW9uZSBnb3QgdG8gdmVyaWZ5IHRoaXMgb24gV2luLU5UIDQuMCwgMjAwMC4iCisgICAqLworCisjaWZkZWYgX1dJTjMyX1dDRQorICBTbGVlcCgwKTsKKyNlbHNlCisgIFNsZWVwRXgoMCwgRkFMU0UpOworI2VuZGlmCisKKyNlbmRpZgorCisgIGlmKDAgIT0gZ2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX0VSUk9SLCAodm9pZCAqKSZlcnIsICZlcnJTaXplKSkKKyAgICBlcnIgPSBTT0NLRVJSTk87CisjaWZkZWYgX1dJTjMyX1dDRQorICAvKiBPbGQgV2luQ0UgdmVyc2lvbnMgZG9uJ3Qgc3VwcG9ydCBTT19FUlJPUiAqLworICBpZihXU0FFTk9QUk9UT09QVCA9PSBlcnIpIHsKKyAgICBTRVRfU09DS0VSUk5PKDApOworICAgIGVyciA9IDA7CisgIH0KKyNlbmRpZgorI2lmZGVmIF9fbWluaXgKKyAgLyogTWluaXggMy4xLnggZG9lc24ndCBzdXBwb3J0IGdldHNvY2tvcHQgb24gVURQIHNvY2tldHMgKi8KKyAgaWYoRUJBRElPQ1RMID09IGVycikgeworICAgIFNFVF9TT0NLRVJSTk8oMCk7CisgICAgZXJyID0gMDsKKyAgfQorI2VuZGlmCisgIGlmKCgwID09IGVycikgfHwgKEVJU0NPTk4gPT0gZXJyKSkKKyAgICAvKiB3ZSBhcmUgY29ubmVjdGVkLCBhd2Vzb21lISAqLworICAgIHJjID0gVFJVRTsKKyAgZWxzZQorICAgIC8qIFRoaXMgd2Fzbid0IGEgc3VjY2Vzc2Z1bCBjb25uZWN0ICovCisgICAgcmMgPSBGQUxTRTsKKyAgaWYoZXJyb3IpCisgICAgKmVycm9yID0gZXJyOworI2Vsc2UKKyAgKHZvaWQpc29ja2ZkOworICBpZihlcnJvcikKKyAgICAqZXJyb3IgPSBTT0NLRVJSTk87CisjZW5kaWYKKyAgcmV0dXJuIHJjOworfQorCisvKiBVc2VkIHdpdGhpbiB0aGUgbXVsdGkgaW50ZXJmYWNlLiBUcnkgbmV4dCBJUCBhZGRyZXNzLCByZXR1cm4gVFJVRSBpZiBubworICAgbW9yZSBhZGRyZXNzIGV4aXN0cyBvciBlcnJvciAqLworc3RhdGljIENVUkxjb2RlIHRyeW5leHRpcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCkKK3sKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQ7CisgIEN1cmxfYWRkcmluZm8gKmFpOworCisgIC8qIEZpcnN0IGNsZWFuIHVwIGFmdGVyIHRoZSBmYWlsZWQgc29ja2V0LgorICAgICBEb24ndCBjbG9zZSBpdCB5ZXQgdG8gZW5zdXJlIHRoYXQgdGhlIG5leHQgSVAncyBzb2NrZXQgZ2V0cyBhIGRpZmZlcmVudAorICAgICBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIGNhbiBwcmV2ZW50IGJ1Z3Mgd2hlbiB0aGUgY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uCisgICAgIGludGVyZmFjZSBpcyB1c2VkIHdpdGggY2VydGFpbiBzZWxlY3QoKSByZXBsYWNlbWVudHMgc3VjaCBhcyBrcXVldWUuICovCisgIGN1cmxfc29ja2V0X3QgZmRfdG9fY2xvc2UgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIGNvbm4tPnNvY2tbc29ja2luZGV4XSA9IENVUkxfU09DS0VUX0JBRDsKKyAgKmNvbm5lY3RlZCA9IEZBTFNFOworCisgIGlmKHNvY2tpbmRleCAhPSBGSVJTVFNPQ0tFVCkgeworICAgIEN1cmxfY2xvc2Vzb2NrZXQoY29ubiwgZmRfdG9fY2xvc2UpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7IC8qIG5vIG5leHQgKi8KKyAgfQorCisgIC8qIHRyeSB0aGUgbmV4dCBhZGRyZXNzICovCisgIGFpID0gY29ubi0+aXBfYWRkci0+YWlfbmV4dDsKKworICB3aGlsZShhaSkgeworICAgIENVUkxjb2RlIHJlcyA9IHNpbmdsZWlwY29ubmVjdChjb25uLCBhaSwgMEwsICZzb2NrZmQsIGNvbm5lY3RlZCk7CisgICAgaWYocmVzKQorICAgICAgcmV0dXJuIHJlczsKKyAgICBpZihzb2NrZmQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICAvKiBzdG9yZSB0aGUgbmV3IHNvY2tldCBkZXNjcmlwdG9yICovCisgICAgICBjb25uLT5zb2NrW3NvY2tpbmRleF0gPSBzb2NrZmQ7CisgICAgICBjb25uLT5pcF9hZGRyID0gYWk7CisgICAgICBDdXJsX2Nsb3Nlc29ja2V0KGNvbm4sIGZkX3RvX2Nsb3NlKTsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisgICAgYWkgPSBhaS0+YWlfbmV4dDsKKyAgfQorICBDdXJsX2Nsb3Nlc29ja2V0KGNvbm4sIGZkX3RvX2Nsb3NlKTsKKyAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKK30KKworLyogQ29waWVzIGNvbm5lY3Rpb24gaW5mbyBpbnRvIHRoZSBzZXNzaW9uIGhhbmRsZSB0byBtYWtlIGl0IGF2YWlsYWJsZQorICAgd2hlbiB0aGUgc2Vzc2lvbiBoYW5kbGUgaXMgbm8gbG9uZ2VyIGFzc29jaWF0ZWQgd2l0aCBhIGNvbm5lY3Rpb24uICovCit2b2lkIEN1cmxfcGVyc2lzdGNvbm5pbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgbWVtY3B5KGNvbm4tPmRhdGEtPmluZm8uY29ubl9wcmltYXJ5X2lwLCBjb25uLT5wcmltYXJ5X2lwLCBNQVhfSVBBRFJfTEVOKTsKKyAgbWVtY3B5KGNvbm4tPmRhdGEtPmluZm8uY29ubl9sb2NhbF9pcCwgY29ubi0+bG9jYWxfaXAsIE1BWF9JUEFEUl9MRU4pOworICBjb25uLT5kYXRhLT5pbmZvLmNvbm5fcHJpbWFyeV9wb3J0ID0gY29ubi0+cHJpbWFyeV9wb3J0OworICBjb25uLT5kYXRhLT5pbmZvLmNvbm5fbG9jYWxfcG9ydCA9IGNvbm4tPmxvY2FsX3BvcnQ7Cit9CisKKy8qIHJldHJpZXZlcyBpcCBhZGRyZXNzIGFuZCBwb3J0IGZyb20gYSBzb2NrYWRkciBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBib29sIGdldGFkZHJlc3NpbmZvKHN0cnVjdCBzb2NrYWRkciogc2EsIGNoYXIqIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKiBwb3J0KQoreworICB1bnNpZ25lZCBzaG9ydCB1c19wb3J0OworICBzdHJ1Y3Qgc29ja2FkZHJfaW4qIHNpID0gTlVMTDsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBzdHJ1Y3Qgc29ja2FkZHJfaW42KiBzaTYgPSBOVUxMOworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX1NZU19VTl9IKSAmJiBkZWZpbmVkKEFGX1VOSVgpCisgIHN0cnVjdCBzb2NrYWRkcl91biogc3UgPSBOVUxMOworI2VuZGlmCisKKyAgc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisgICAgY2FzZSBBRl9JTkVUOgorICAgICAgc2kgPSAoc3RydWN0IHNvY2thZGRyX2luKikgc2E7CisgICAgICBpZihDdXJsX2luZXRfbnRvcChzYS0+c2FfZmFtaWx5LCAmc2ktPnNpbl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkciwgTUFYX0lQQURSX0xFTikpIHsKKyAgICAgICAgdXNfcG9ydCA9IG50b2hzKHNpLT5zaW5fcG9ydCk7CisgICAgICAgICpwb3J0ID0gdXNfcG9ydDsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICB9CisgICAgICBicmVhazsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICBzaTYgPSAoc3RydWN0IHNvY2thZGRyX2luNiopc2E7CisgICAgICBpZihDdXJsX2luZXRfbnRvcChzYS0+c2FfZmFtaWx5LCAmc2k2LT5zaW42X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyLCBNQVhfSVBBRFJfTEVOKSkgeworICAgICAgICB1c19wb3J0ID0gbnRvaHMoc2k2LT5zaW42X3BvcnQpOworICAgICAgICAqcG9ydCA9IHVzX3BvcnQ7CisgICAgICAgIHJldHVybiBUUlVFOworICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfU1lTX1VOX0gpICYmIGRlZmluZWQoQUZfVU5JWCkKKyAgICBjYXNlIEFGX1VOSVg6CisgICAgICBzdSA9IChzdHJ1Y3Qgc29ja2FkZHJfdW4qKXNhOworICAgICAgc25wcmludGYoYWRkciwgTUFYX0lQQURSX0xFTiwgIiVzIiwgc3UtPnN1bl9wYXRoKTsKKyAgICAgICpwb3J0ID0gMDsKKyAgICAgIHJldHVybiBUUlVFOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgYWRkclswXSA9ICdcMCc7CisgICpwb3J0ID0gMDsKKworICByZXR1cm4gRkFMU0U7Cit9CisKKy8qIHJldHJpZXZlcyB0aGUgc3RhcnQvZW5kIHBvaW50IGluZm9ybWF0aW9uIG9mIGEgc29ja2V0IG9mIGFuIGVzdGFibGlzaGVkCisgICBjb25uZWN0aW9uICovCit2b2lkIEN1cmxfdXBkYXRlY29ubmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90IHNvY2tmZCkKK3sKKyAgaW50IGVycm9yOworICBjdXJsX3NvY2tsZW5fdCBsZW47CisgIHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2Ugc3NyZW07CisgIHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2Ugc3Nsb2M7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICBpZighY29ubi0+Yml0cy5yZXVzZSkgeworCisgICAgbGVuID0gc2l6ZW9mKHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2UpOworICAgIGlmKGdldHBlZXJuYW1lKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciopICZzc3JlbSwgJmxlbikpIHsKKyAgICAgIGVycm9yID0gU09DS0VSUk5POworICAgICAgZmFpbGYoZGF0YSwgImdldHBlZXJuYW1lKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgICAgIGVycm9yLCBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgbGVuID0gc2l6ZW9mKHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2UpOworICAgIGlmKGdldHNvY2tuYW1lKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciopICZzc2xvYywgJmxlbikpIHsKKyAgICAgIGVycm9yID0gU09DS0VSUk5POworICAgICAgZmFpbGYoZGF0YSwgImdldHNvY2tuYW1lKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgICAgIGVycm9yLCBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYoIWdldGFkZHJlc3NpbmZvKChzdHJ1Y3Qgc29ja2FkZHIqKSZzc3JlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnByaW1hcnlfaXAsICZjb25uLT5wcmltYXJ5X3BvcnQpKSB7CisgICAgICBlcnJvciA9IEVSUk5POworICAgICAgZmFpbGYoZGF0YSwgInNzcmVtIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCisgICAgICAgICAgICBlcnJvciwgQ3VybF9zdHJlcnJvcihjb25uLCBlcnJvcikpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmKCFnZXRhZGRyZXNzaW5mbygoc3RydWN0IHNvY2thZGRyKikmc3Nsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmxvY2FsX2lwLCAmY29ubi0+bG9jYWxfcG9ydCkpIHsKKyAgICAgIGVycm9yID0gRVJSTk87CisgICAgICBmYWlsZihkYXRhLCAic3Nsb2MgaW5ldF9udG9wKCkgZmFpbGVkIHdpdGggZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgICAgIGVycm9yLCBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIH0KKworICAvKiBwZXJzaXN0IGNvbm5lY3Rpb24gaW5mbyBpbiBzZXNzaW9uIGhhbmRsZSAqLworICBDdXJsX3BlcnNpc3Rjb25uaW5mbyhjb25uKTsKK30KKworLyoKKyAqIEN1cmxfaXNfY29ubmVjdGVkKCkgaXMgdXNlZCBmcm9tIHRoZSBtdWx0aSBpbnRlcmZhY2UgdG8gY2hlY2sgaWYgdGhlCisgKiBmaXJzdHNvY2tldCBoYXMgY29ubmVjdGVkLgorICovCisKK0NVUkxjb2RlIEN1cmxfaXNfY29ubmVjdGVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQpCit7CisgIGludCByYzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBDVVJMY29kZSBjb2RlID0gQ1VSTEVfT0s7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBsb25nIGFsbG93ID0gREVGQVVMVF9DT05ORUNUX1RJTUVPVVQ7CisgIGludCBlcnJvciA9IDA7CisgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKworICBERUJVR0FTU0VSVChzb2NraW5kZXggPj0gRklSU1RTT0NLRVQgJiYgc29ja2luZGV4IDw9IFNFQ09OREFSWVNPQ0tFVCk7CisKKyAgKmNvbm5lY3RlZCA9IEZBTFNFOyAvKiBhIHZlcnkgbmVnYXRpdmUgd29ybGQgdmlldyBpcyBiZXN0ICovCisKKyAgaWYoY29ubi0+Yml0cy50Y3Bjb25uZWN0W3NvY2tpbmRleF0pIHsKKyAgICAvKiB3ZSBhcmUgY29ubmVjdGVkIGFscmVhZHkhICovCisgICAgKmNvbm5lY3RlZCA9IFRSVUU7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgbm93ID0gQ3VybF90dm5vdygpOworCisgIC8qIGZpZ3VyZSBvdXQgaG93IGxvbmcgdGltZSB3ZSBoYXZlIGxlZnQgdG8gY29ubmVjdCAqLworICBhbGxvdyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgJm5vdywgVFJVRSk7CisKKyAgaWYoYWxsb3cgPCAwKSB7CisgICAgLyogdGltZS1vdXQsIGJhaWwgb3V0LCBnbyBob21lICovCisgICAgZmFpbGYoZGF0YSwgIkNvbm5lY3Rpb24gdGltZS1vdXQiKTsKKyAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICB9CisKKyAgLyogY2hlY2sgZm9yIGNvbm5lY3Qgd2l0aG91dCB0aW1lb3V0IGFzIHdlIHdhbnQgdG8gcmV0dXJuIGltbWVkaWF0ZWx5ICovCisgIHJjID0gd2FpdGNvbm5lY3QoY29ubiwgc29ja2ZkLCAwKTsKKyAgaWYoV0FJVENPTk5fVElNRU9VVCA9PSByYykgeworICAgIGlmKGN1cmx4X3R2ZGlmZihub3csIGNvbm4tPmNvbm5lY3R0aW1lKSA+PSBjb25uLT50aW1lb3V0bXNfcGVyX2FkZHIpIHsKKyAgICAgIGluZm9mKGRhdGEsICJBZnRlciAlbGRtcyBjb25uZWN0IHRpbWUsIG1vdmUgb24hXG4iLAorICAgICAgICAgICAgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyKTsKKyAgICAgIGdvdG8gbmV4dDsKKyAgICB9CisKKyAgICAvKiBub3QgYW4gZXJyb3IsIGJ1dCBhbHNvIG5vIGNvbm5lY3Rpb24geWV0ICovCisgICAgcmV0dXJuIGNvZGU7CisgIH0KKworICBpZihXQUlUQ09OTl9DT05ORUNURUQgPT0gcmMpIHsKKyAgICBpZih2ZXJpZnljb25uZWN0KHNvY2tmZCwgJmVycm9yKSkgeworICAgICAgLyogd2UgYXJlIGNvbm5lY3RlZCB3aXRoIFRDUCwgYXdlc29tZSEgKi8KKworICAgICAgLyogc2VlIGlmIHdlIG5lZWQgdG8gZG8gYW55IHByb3h5IG1hZ2ljIGZpcnN0IG9uY2Ugd2UgY29ubmVjdGVkICovCisgICAgICBjb2RlID0gQ3VybF9jb25uZWN0ZWRfcHJveHkoY29ubik7CisgICAgICBpZihjb2RlKQorICAgICAgICByZXR1cm4gY29kZTsKKworICAgICAgY29ubi0+Yml0cy50Y3Bjb25uZWN0W3NvY2tpbmRleF0gPSBUUlVFOworICAgICAgKmNvbm5lY3RlZCA9IFRSVUU7CisgICAgICBpZihzb2NraW5kZXggPT0gRklSU1RTT0NLRVQpCisgICAgICAgIEN1cmxfcGdyc1RpbWUoZGF0YSwgVElNRVJfQ09OTkVDVCk7IC8qIGNvbm5lY3QgZG9uZSAqLworICAgICAgQ3VybF92ZXJib3NlY29ubmVjdChjb25uKTsKKyAgICAgIEN1cmxfdXBkYXRlY29ubmluZm8oY29ubiwgc29ja2ZkKTsKKworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICAvKiBub3BlLCBub3QgY29ubmVjdGVkIGZvciByZWFsICovCisgIH0KKyAgZWxzZSB7CisgICAgLyogbm9wZSwgbm90IGNvbm5lY3RlZCAgKi8KKyAgICBpZihXQUlUQ09OTl9GRFNFVF9FUlJPUiA9PSByYykgeworICAgICAgKHZvaWQpdmVyaWZ5Y29ubmVjdChzb2NrZmQsICZlcnJvcik7CisgICAgICBpbmZvZihkYXRhLCAiJXNcbiIsQ3VybF9zdHJlcnJvcihjb25uLCBlcnJvcikpOworICAgIH0KKyAgICBlbHNlCisgICAgICBpbmZvZihkYXRhLCAiQ29ubmVjdGlvbiBmYWlsZWRcbiIpOworICB9CisKKyAgLyoKKyAgICogVGhlIGNvbm5lY3Rpb24gZmFpbGVkIGhlcmUsIHdlIHNob3VsZCBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhlICJuZXh0CisgICAqIGFkZHJlc3MiIGZvciB0aGUgZ2l2ZW4gaG9zdC4gQnV0IGZpcnN0IHJlbWVtYmVyIHRoZSBsYXRlc3QgZXJyb3IuCisgICAqLworICBpZihlcnJvcikgeworICAgIGRhdGEtPnN0YXRlLm9zX2Vycm5vID0gZXJyb3I7CisgICAgU0VUX1NPQ0tFUlJOTyhlcnJvcik7CisgIH0KKyAgbmV4dDoKKworICBjb25uLT50aW1lb3V0bXNfcGVyX2FkZHIgPSBjb25uLT5pcF9hZGRyLT5haV9uZXh0ID09IE5VTEwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyA6IGFsbG93IC8gMjsKKyAgY29kZSA9IHRyeW5leHRpcChjb25uLCBzb2NraW5kZXgsIGNvbm5lY3RlZCk7CisKKyAgaWYoY29kZSkgeworICAgIGVycm9yID0gU09DS0VSUk5POworICAgIGRhdGEtPnN0YXRlLm9zX2Vycm5vID0gZXJyb3I7CisgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBjb25uZWN0IHRvICVzOiVsZDsgJXMiLAorICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwgY29ubi0+cG9ydCwgQ3VybF9zdHJlcnJvcihjb25uLCBlcnJvcikpOworICB9CisKKyAgcmV0dXJuIGNvZGU7Cit9CisKK3N0YXRpYyB2b2lkIHRjcG5vZGVsYXkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tmZCkKK3sKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YT0gY29ubi0+ZGF0YTsKKyAgY3VybF9zb2NrbGVuX3Qgb25vZmYgPSAoY3VybF9zb2NrbGVuX3QpIGRhdGEtPnNldC50Y3Bfbm9kZWxheTsKKyAgaW50IGxldmVsID0gSVBQUk9UT19UQ1A7CisKKyNpZiAwCisgIC8qIFRoZSB1c2Ugb2YgZ2V0cHJvdG9ieW5hbWUoKSBpcyBkaXNhYmxlZCBzaW5jZSBpdCBpc24ndCB0aHJlYWQtc2FmZSBvbgorICAgICBudW1lcm91cyBzeXN0ZW1zLiBPbiB0aGVzZSBnZXRwcm90b2J5bmFtZV9yKCkgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCwgYnV0CisgICAgIHRoYXQgZXhpc3RzIGluIGF0IGxlYXN0IG9uZSA0IGFyZyB2ZXJzaW9uIGFuZCBvbmUgNSBhcmcgdmVyc2lvbiwgYW5kCisgICAgIHNpbmNlIHRoZSBwcm90byBudW1iZXIgcmFyZWx5IGNoYW5nZXMgYW55d2F5IHdlIG5vdyBqdXN0IHVzZSB0aGUgaGFyZAorICAgICBjb2RlZCBudW1iZXIuIFRoZSAicHJvcGVyIiBmaXggd291bGQgbmVlZCBhIGNvbmZpZ3VyZSBjaGVjayBmb3IgdGhlCisgICAgIGNvcnJlY3QgZnVuY3Rpb24gbXVjaCBpbiB0aGUgc2FtZSBzdHlsZSB0aGUgZ2V0aG9zdGJ5bmFtZV9yIHZlcnNpb25zIGFyZQorICAgICBkZXRlY3RlZC4gKi8KKyAgc3RydWN0IHByb3RvZW50ICpwZSA9IGdldHByb3RvYnluYW1lKCJ0Y3AiKTsKKyAgaWYocGUpCisgICAgbGV2ZWwgPSBwZS0+cF9wcm90bzsKKyNlbmRpZgorCisgIGlmKHNldHNvY2tvcHQoc29ja2ZkLCBsZXZlbCwgVENQX05PREVMQVksICh2b2lkICopJm9ub2ZmLAorICAgICAgICAgICAgICAgIHNpemVvZihvbm9mZikpIDwgMCkKKyAgICBpbmZvZihkYXRhLCAiQ291bGQgbm90IHNldCBUQ1BfTk9ERUxBWTogJXNcbiIsCisgICAgICAgICAgQ3VybF9zdHJlcnJvcihjb25uLCBTT0NLRVJSTk8pKTsKKyAgZWxzZQorICAgIGluZm9mKGRhdGEsIlRDUF9OT0RFTEFZIHNldFxuIik7CisjZWxzZQorICAodm9pZCljb25uOworICAodm9pZClzb2NrZmQ7CisjZW5kaWYKK30KKworI2lmZGVmIFNPX05PU0lHUElQRQorLyogVGhlIHByZWZlcnJlZCBtZXRob2Qgb24gTWFjIE9TIFggKDEwLjIgYW5kIGxhdGVyKSB0byBwcmV2ZW50IFNJR1BJUEVzIHdoZW4KKyAgIHNlbmRpbmcgZGF0YSB0byBhIGRlYWQgcGVlciAoaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSA0dGggYXJndW1lbnQgdG8gc2VuZAorICAgYmVpbmcgTVNHX05PU0lHTkFMKS4gUG9zc2libHkgYWxzbyBleGlzdGluZyBhbmQgaW4gdXNlIG9uIG90aGVyIEJTRAorICAgc3lzdGVtcz8gKi8KK3N0YXRpYyB2b2lkIG5vc2lncGlwZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQpCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPSBjb25uLT5kYXRhOworICBpbnQgb25vZmYgPSAxOworICBpZihzZXRzb2Nrb3B0KHNvY2tmZCwgU09MX1NPQ0tFVCwgU09fTk9TSUdQSVBFLCAodm9pZCAqKSZvbm9mZiwKKyAgICAgICAgICAgICAgICBzaXplb2Yob25vZmYpKSA8IDApCisgICAgaW5mb2YoZGF0YSwgIkNvdWxkIG5vdCBzZXQgU09fTk9TSUdQSVBFOiAlc1xuIiwKKyAgICAgICAgICBDdXJsX3N0cmVycm9yKGNvbm4sIFNPQ0tFUlJOTykpOworfQorI2Vsc2UKKyNkZWZpbmUgbm9zaWdwaXBlKHgseSkgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKKyNpZmRlZiBVU0VfV0lOU09DSworLyogV2hlbiB5b3UgcnVuIGEgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIFdpbmRvd3MgU29ja2V0cyBBUEksIHlvdSBtYXkKKyAgIGV4cGVyaWVuY2Ugc2xvdyBwZXJmb3JtYW5jZSB3aGVuIHlvdSBjb3B5IGRhdGEgdG8gYSBUQ1Agc2VydmVyLgorCisgICBodHRwOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2tiLzgyMzc2NAorCisgICBXb3JrLWFyb3VuZDogTWFrZSB0aGUgU29ja2V0IFNlbmQgQnVmZmVyIFNpemUgTGFyZ2VyIFRoYW4gdGhlIFByb2dyYW0gU2VuZAorICAgQnVmZmVyIFNpemUKKworKi8KK3ZvaWQgQ3VybF9zbmRidWZzZXQoY3VybF9zb2NrZXRfdCBzb2NrZmQpCit7CisgIGludCB2YWwgPSBDVVJMX01BWF9XUklURV9TSVpFICsgMzI7CisgIGludCBjdXJ2YWwgPSAwOworICBpbnQgY3VybGVuID0gc2l6ZW9mKGN1cnZhbCk7CisKKyAgaWYoZ2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgKGNoYXIgKikmY3VydmFsLCAmY3VybGVuKSA9PSAwKQorICAgIGlmKGN1cnZhbCA+IHZhbCkKKyAgICAgIHJldHVybjsKKworICBzZXRzb2Nrb3B0KHNvY2tmZCwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAoY29uc3QgY2hhciAqKSZ2YWwsIHNpemVvZih2YWwpKTsKK30KKyNlbmRpZgorCisKKy8qCisgKiBzaW5nbGVpcGNvbm5lY3QoKQorICoKKyAqIE5vdGUgdGhhdCBldmVuIG9uIGNvbm5lY3QgZmFpbCBpdCByZXR1cm5zIENVUkxFX09LLCBidXQgd2l0aCAnc29jaycgc2V0IHRvCisgKiBDVVJMX1NPQ0tFVF9CQUQuIE90aGVyIGVycm9ycyB3aWxsIGhvd2V2ZXIgcmV0dXJuIHByb3BlciBlcnJvcnMuCisgKgorICogc2luZ2xlaXBjb25uZWN0KCkgY29ubmVjdHMgdG8gdGhlIGdpdmVuIElQIG9ubHksIGFuZCBpdCBtYXkgcmV0dXJuIHdpdGhvdXQKKyAqIGhhdmluZyBjb25uZWN0ZWQgaWYgdXNlZCBmcm9tIHRoZSBtdWx0aSBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBDVVJMY29kZQorc2luZ2xlaXBjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICBjb25zdCBDdXJsX2FkZHJpbmZvICphaSwKKyAgICAgICAgICAgICAgICBsb25nIHRpbWVvdXRfbXMsCisgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3AsCisgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkKQoreworICBzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9leCBhZGRyOworICBpbnQgcmM7CisgIGludCBlcnJvciA9IDA7CisgIGJvb2wgaXNjb25uZWN0ZWQgPSBGQUxTRTsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBjdXJsX3NvY2tldF90IHNvY2tmZDsKKyAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7CisKKyAgKnNvY2twID0gQ1VSTF9TT0NLRVRfQkFEOworICAqY29ubmVjdGVkID0gRkFMU0U7IC8qIGRlZmF1bHQgaXMgbm90IGNvbm5lY3RlZCAqLworCisgIHJlcyA9IEN1cmxfc29ja2V0KGNvbm4sIGFpLCAmYWRkciwgJnNvY2tmZCk7CisgIGlmKHJlcykKKyAgICByZXR1cm4gcmVzOworCisgIC8qIHN0b3JlIHJlbW90ZSBhZGRyZXNzIGFuZCBwb3J0IHVzZWQgaW4gdGhpcyBjb25uZWN0aW9uIGF0dGVtcHQgKi8KKyAgaWYoIWdldGFkZHJlc3NpbmZvKChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLnNhX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICBjb25uLT5wcmltYXJ5X2lwLCAmY29ubi0+cHJpbWFyeV9wb3J0KSkgeworICAgIC8qIG1hbGZvcm1lZCBhZGRyZXNzIG9yIGJ1ZyBpbiBpbmV0X250b3AsIHRyeSBuZXh0IGFkZHJlc3MgKi8KKyAgICBlcnJvciA9IEVSUk5POworICAgIGZhaWxmKGRhdGEsICJzYV9hZGRyIGluZXRfbnRvcCgpIGZhaWxlZCB3aXRoIGVycm5vICVkOiAlcyIsCisgICAgICAgICAgZXJyb3IsIEN1cmxfc3RyZXJyb3IoY29ubiwgZXJyb3IpKTsKKyAgICBDdXJsX2Nsb3Nlc29ja2V0KGNvbm4sIHNvY2tmZCk7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisgIG1lbWNweShjb25uLT5pcF9hZGRyX3N0ciwgY29ubi0+cHJpbWFyeV9pcCwgTUFYX0lQQURSX0xFTik7CisgIGluZm9mKGRhdGEsICIgIFRyeWluZyAlcy4uLlxuIiwgY29ubi0+aXBfYWRkcl9zdHIpOworCisgIEN1cmxfcGVyc2lzdGNvbm5pbmZvKGNvbm4pOworCisgIGlmKGRhdGEtPnNldC50Y3Bfbm9kZWxheSkKKyAgICB0Y3Bub2RlbGF5KGNvbm4sIHNvY2tmZCk7CisKKyAgbm9zaWdwaXBlKGNvbm4sIHNvY2tmZCk7CisKKyAgQ3VybF9zbmRidWZzZXQoc29ja2ZkKTsKKworICBpZihkYXRhLT5zZXQudGNwX2tlZXBhbGl2ZSkKKyAgICB0Y3BrZWVwYWxpdmUoZGF0YSwgc29ja2ZkKTsKKworICBpZihkYXRhLT5zZXQuZnNvY2tvcHQpIHsKKyAgICAvKiBhY3RpdmF0ZSBjYWxsYmFjayBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyAqLworICAgIGVycm9yID0gZGF0YS0+c2V0LmZzb2Nrb3B0KGRhdGEtPnNldC5zb2Nrb3B0X2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTFNPQ0tUWVBFX0lQQ1hOKTsKKworICAgIGlmKGVycm9yID09IENVUkxfU09DS09QVF9BTFJFQURZX0NPTk5FQ1RFRCkKKyAgICAgIGlzY29ubmVjdGVkID0gVFJVRTsKKyAgICBlbHNlIGlmKGVycm9yKSB7CisgICAgICBDdXJsX2Nsb3Nlc29ja2V0KGNvbm4sIHNvY2tmZCk7IC8qIGNsb3NlIHRoZSBzb2NrZXQgYW5kIGJhaWwgb3V0ICovCisgICAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKyAgICB9CisgIH0KKworICAvKiBwb3NzaWJseSBiaW5kIHRoZSBsb2NhbCBlbmQgdG8gYW4gSVAsIGludGVyZmFjZSBvciBwb3J0ICovCisgIHJlcyA9IGJpbmRsb2NhbChjb25uLCBzb2NrZmQsIGFkZHIuZmFtaWx5KTsKKyAgaWYocmVzKSB7CisgICAgQ3VybF9jbG9zZXNvY2tldChjb25uLCBzb2NrZmQpOyAvKiBjbG9zZSBzb2NrZXQgYW5kIGJhaWwgb3V0ICovCisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIHNldCBzb2NrZXQgbm9uLWJsb2NraW5nICovCisgIGN1cmx4X25vbmJsb2NrKHNvY2tmZCwgVFJVRSk7CisKKyAgLyogQ29ubmVjdCBUQ1Agc29ja2V0cywgYmluZCBVRFAgKi8KKyAgaWYoIWlzY29ubmVjdGVkICYmIChjb25uLT5zb2NrdHlwZSA9PSBTT0NLX1NUUkVBTSkpIHsKKyAgICByYyA9IGNvbm5lY3Qoc29ja2ZkLCAmYWRkci5zYV9hZGRyLCBhZGRyLmFkZHJsZW4pOworICAgIGlmKC0xID09IHJjKQorICAgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgY29ubi0+Y29ubmVjdHRpbWUgPSBDdXJsX3R2bm93KCk7CisgICAgaWYoY29ubi0+bnVtX2FkZHIgPiAxKQorICAgICAgQ3VybF9leHBpcmUoZGF0YSwgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyKTsKKyAgfQorICBlbHNlCisgICAgcmMgPSAwOworCisgIGlmKC0xID09IHJjKSB7CisgICAgc3dpdGNoIChlcnJvcikgeworICAgIGNhc2UgRUlOUFJPR1JFU1M6CisgICAgY2FzZSBFV09VTERCTE9DSzoKKyNpZiBkZWZpbmVkKEVBR0FJTikKKyNpZiAoRUFHQUlOKSAhPSAoRVdPVUxEQkxPQ0spCisgICAgICAvKiBPbiBzb21lIHBsYXRmb3JtcyBFQUdBSU4gYW5kIEVXT1VMREJMT0NLIGFyZSB0aGUKKyAgICAgICAqIHNhbWUgdmFsdWUsIGFuZCBvbiBvdGhlcnMgdGhleSBhcmUgZGlmZmVyZW50LCBoZW5jZQorICAgICAgICogdGhlIG9kZCAjaWYKKyAgICAgICAqLworICAgIGNhc2UgRUFHQUlOOgorI2VuZGlmCisjZW5kaWYKKyAgICAgIHJjID0gd2FpdGNvbm5lY3QoY29ubiwgc29ja2ZkLCB0aW1lb3V0X21zKTsKKyAgICAgIGlmKFdBSVRDT05OX0FCT1JURUQgPT0gcmMpIHsKKyAgICAgICAgQ3VybF9jbG9zZXNvY2tldChjb25uLCBzb2NrZmQpOworICAgICAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvKiB1bmtub3duIGVycm9yLCBmYWxsdGhyb3VnaCBhbmQgdHJ5IGFub3RoZXIgYWRkcmVzcyEgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gY29ubmVjdCB0byAlczogJXMiLAorICAgICAgICAgICAgY29ubi0+aXBfYWRkcl9zdHIsIEN1cmxfc3RyZXJyb3IoY29ubixlcnJvcikpOworICAgICAgZGF0YS0+c3RhdGUub3NfZXJybm8gPSBlcnJvcjsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIC8qIFRoZSAnV0FJVENPTk5fVElNRU9VVCA9PSByYycgY29tZXMgZnJvbSB0aGUgd2FpdGNvbm5lY3QoKSwgYW5kIG5vdCBmcm9tCisgICAgIGNvbm5lY3QoKS4gV2UgY2FuIGJlIHN1cmUgb2YgdGhpcyBzaW5jZSBjb25uZWN0KCkgY2Fubm90IHJldHVybiAxLiAqLworICBpZigoV0FJVENPTk5fVElNRU9VVCA9PSByYykgJiYKKyAgICAgKGRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID09IEN1cmxfaWZfbXVsdGkpKSB7CisgICAgLyogVGltZW91dCB3aGVuIHJ1bm5pbmcgdGhlIG11bHRpIGludGVyZmFjZSAqLworICAgICpzb2NrcCA9IHNvY2tmZDsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKworICBpZighaXNjb25uZWN0ZWQpCisgICAgaXNjb25uZWN0ZWQgPSB2ZXJpZnljb25uZWN0KHNvY2tmZCwgJmVycm9yKTsKKworICBpZighcmMgJiYgaXNjb25uZWN0ZWQpIHsKKyAgICAvKiB3ZSBhcmUgY29ubmVjdGVkLCBhd2Vzb21lISAqLworICAgICpjb25uZWN0ZWQgPSBUUlVFOyAvKiB0aGlzIGlzIGEgdHJ1ZSBjb25uZWN0ICovCisgICAgaW5mb2YoZGF0YSwgImNvbm5lY3RlZFxuIik7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBjb25uLT5iaXRzLmlwdjYgPSAoYWRkci5mYW1pbHkgPT0gQUZfSU5FVDYpP1RSVUU6RkFMU0U7CisjZW5kaWYKKworICAgIEN1cmxfdXBkYXRlY29ubmluZm8oY29ubiwgc29ja2ZkKTsKKyAgICAqc29ja3AgPSBzb2NrZmQ7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisgIGVsc2UgaWYoV0FJVENPTk5fVElNRU9VVCA9PSByYykKKyAgICBpbmZvZihkYXRhLCAiVGltZW91dFxuIik7CisgIGVsc2UgeworICAgIGRhdGEtPnN0YXRlLm9zX2Vycm5vID0gZXJyb3I7CisgICAgaW5mb2YoZGF0YSwgIiVzXG4iLCBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7CisgIH0KKworICAvKiBjb25uZWN0IGZhaWxlZCBvciB0aW1lZCBvdXQgKi8KKyAgQ3VybF9jbG9zZXNvY2tldChjb25uLCBzb2NrZmQpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIFRDUCBjb25uZWN0IHRvIHRoZSBnaXZlbiBob3N0IHdpdGggdGltZW91dCwgcHJveHkgb3IgcmVtb3RlIGRvZXNuJ3QgbWF0dGVyLgorICogVGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZSBJUCBhZGRyZXNzIHRvIHRyeSBvdXQuIEZpbGwgaW4gdGhlIHBhc3NlZAorICogcG9pbnRlciB3aXRoIHRoZSBjb25uZWN0ZWQgc29ja2V0LgorICovCisKK0NVUkxjb2RlIEN1cmxfY29ubmVjdGhvc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAgLyogY29udGV4dCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKnJlbW90ZWhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tjb25uLCAgIC8qIHRoZSBjb25uZWN0ZWQgc29ja2V0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfYWRkcmluZm8gKiphZGRyLCAgICAgIC8qIHRoZSBvbmUgd2UgdXNlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQpICAgICAgICAgICAvKiByZWFsbHkgY29ubmVjdGVkPyAqLworeworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gQ1VSTF9TT0NLRVRfQkFEOworICBDdXJsX2FkZHJpbmZvICphaTsKKyAgQ3VybF9hZGRyaW5mbyAqY3Vycl9hZGRyOworCisgIHN0cnVjdCB0aW1ldmFsIGFmdGVyOworICBzdHJ1Y3QgdGltZXZhbCBiZWZvcmUgPSBDdXJsX3R2bm93KCk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogRmlndXJlIG91dCB3aGF0IG1heGltdW0gdGltZSB3ZSBoYXZlIGxlZnQKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIGxvbmcgdGltZW91dF9tczsKKworICBERUJVR0FTU0VSVChzb2NrY29ubik7CisgICpjb25uZWN0ZWQgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBub3QgY29ubmVjdGVkICovCisKKyAgLyogZ2V0IHRoZSB0aW1lb3V0IGxlZnQgKi8KKyAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgJmJlZm9yZSwgVFJVRSk7CisKKyAgaWYodGltZW91dF9tcyA8IDApIHsKKyAgICAvKiBhIHByZWNhdXRpb24sIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGltZSBhbHJlYWR5IGlzIHVwICovCisgICAgZmFpbGYoZGF0YSwgIkNvbm5lY3Rpb24gdGltZS1vdXQiKTsKKyAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICB9CisKKyAgY29ubi0+bnVtX2FkZHIgPSBDdXJsX251bV9hZGRyZXNzZXMocmVtb3RlaG9zdC0+YWRkcik7CisKKyAgYWkgPSByZW1vdGVob3N0LT5hZGRyOworCisgIC8qIEJlbG93IGlzIHRoZSBsb29wIHRoYXQgYXR0ZW1wdHMgdG8gY29ubmVjdCB0byBhbGwgSVAtYWRkcmVzc2VzIHdlCisgICAqIGtub3cgZm9yIHRoZSBnaXZlbiBob3N0LiBPbmUgYnkgb25lIHVudGlsIG9uZSBJUCBzdWNjZWVkcy4KKyAgICovCisKKyAgLyoKKyAgICogQ29ubmVjdGluZyB3aXRoIGEgQ3VybF9hZGRyaW5mbyBjaGFpbgorICAgKi8KKyAgZm9yKGN1cnJfYWRkciA9IGFpOyBjdXJyX2FkZHI7IGN1cnJfYWRkciA9IGN1cnJfYWRkci0+YWlfbmV4dCkgeworICAgIENVUkxjb2RlIHJlczsKKworICAgIC8qIE1heCB0aW1lIGZvciB0aGUgbmV4dCBhZGRyZXNzICovCisgICAgY29ubi0+dGltZW91dG1zX3Blcl9hZGRyID0gY3Vycl9hZGRyLT5haV9uZXh0ID09IE5VTEwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXMgOiB0aW1lb3V0X21zIC8gMjsKKworICAgIC8qIHN0YXJ0IGNvbm5lY3RpbmcgdG8gdGhlIElQIGN1cnJfYWRkciBwb2ludHMgdG8gKi8KKyAgICByZXMgPSBzaW5nbGVpcGNvbm5lY3QoY29ubiwgY3Vycl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb24ndCBoYW5nIHdoZW4gZG9pbmcgbXVsdGkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID09IEN1cmxfaWZfbXVsdGkpPzA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnRpbWVvdXRtc19wZXJfYWRkciwgJnNvY2tmZCwgY29ubmVjdGVkKTsKKyAgICBpZihyZXMpCisgICAgICByZXR1cm4gcmVzOworCisgICAgaWYoc29ja2ZkICE9IENVUkxfU09DS0VUX0JBRCkKKyAgICAgIGJyZWFrOworCisgICAgLyogZ2V0IGEgbmV3IHRpbWVvdXQgZm9yIG5leHQgYXR0ZW1wdCAqLworICAgIGFmdGVyID0gQ3VybF90dm5vdygpOworICAgIHRpbWVvdXRfbXMgLT0gQ3VybF90dmRpZmYoYWZ0ZXIsIGJlZm9yZSk7CisgICAgaWYodGltZW91dF9tcyA8IDApIHsKKyAgICAgIGZhaWxmKGRhdGEsICJjb25uZWN0KCkgdGltZWQgb3V0ISIpOworICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICB9CisgICAgYmVmb3JlID0gYWZ0ZXI7CisgIH0gIC8qIGVuZCBvZiBjb25uZWN0LXRvLWVhY2gtYWRkcmVzcyBsb29wICovCisKKyAgKnNvY2tjb25uID0gc29ja2ZkOyAgICAvKiB0aGUgc29ja2V0IGRlc2NyaXB0b3Igd2UndmUgY29ubmVjdGVkICovCisKKyAgaWYoc29ja2ZkID09IENVUkxfU09DS0VUX0JBRCkgeworICAgIC8qIG5vIGdvb2QgY29ubmVjdCB3YXMgbWFkZSAqLworICAgIGZhaWxmKGRhdGEsICJjb3VsZG4ndCBjb25uZWN0IHRvIGhvc3QiKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisKKyAgLyogbGVhdmUgdGhlIHNvY2tldCBpbiBub24tYmxvY2tpbmcgbW9kZSAqLworCisgIC8qIHN0b3JlIHRoZSBhZGRyZXNzIHdlIHVzZSAqLworICBpZihhZGRyKQorICAgICphZGRyID0gY3Vycl9hZGRyOworCisgIGRhdGEtPmluZm8ubnVtY29ubmVjdHMrKzsgLyogdG8gdHJhY2sgdGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyBtYWRlICovCisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogVXNlZCB0byBleHRyYWN0IHNvY2tldCBhbmQgY29ubmVjdGRhdGEgc3RydWN0IGZvciB0aGUgbW9zdCByZWNlbnQKKyAqIHRyYW5zZmVyIG9uIHRoZSBnaXZlbiBTZXNzaW9uSGFuZGxlLgorICoKKyAqIFRoZSByZXR1cm5lZCBzb2NrZXQgd2lsbCBiZSBDVVJMX1NPQ0tFVF9CQUQgaW4gY2FzZSBvZiBmYWlsdXJlIQorICovCitjdXJsX3NvY2tldF90IEN1cmxfZ2V0Y29ubmVjdGluZm8oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICoqY29ubnApCit7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkOworCisgIERFQlVHQVNTRVJUKGRhdGEpOworCisgIGlmKChkYXRhLT5zdGF0ZS5sYXN0Y29ubmVjdCAhPSAtMSkgJiYKKyAgICAgKGRhdGEtPnN0YXRlLmNvbm5jLT5jb25uZWN0c1tkYXRhLT5zdGF0ZS5sYXN0Y29ubmVjdF0gIT0gTlVMTCkpIHsKKyAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmMgPQorICAgICAgZGF0YS0+c3RhdGUuY29ubmMtPmNvbm5lY3RzW2RhdGEtPnN0YXRlLmxhc3Rjb25uZWN0XTsKKyAgICBpZihjb25ucCkKKyAgICAgIC8qIG9ubHkgc3RvcmUgdGhpcyBpZiB0aGUgY2FsbGVyIGNhcmVzIGZvciBpdCAqLworICAgICAgKmNvbm5wID0gYzsKKyAgICBzb2NrZmQgPSBjLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgICAvKiB3ZSBoYXZlIGEgc29ja2V0IGNvbm5lY3RlZCwgbGV0J3MgZGV0ZXJtaW5lIGlmIHRoZSBzZXJ2ZXIgc2h1dCBkb3duICovCisgICAgLyogZGV0ZXJtaW5lIGlmIHNzbCAqLworICAgIGlmKGMtPnNzbFtGSVJTVFNPQ0tFVF0udXNlKSB7CisgICAgICAvKiB1c2UgdGhlIFNTTCBjb250ZXh0ICovCisgICAgICBpZighQ3VybF9zc2xfY2hlY2tfY3huKGMpKQorICAgICAgICByZXR1cm4gQ1VSTF9TT0NLRVRfQkFEOyAgIC8qIEZJTiByZWNlaXZlZCAqLworICAgIH0KKy8qIE1pbml4IDMuMSBkb2Vzbid0IHN1cHBvcnQgYW55IGZsYWdzIG9uIHJlY3Y7IGp1c3QgYXNzdW1lIHNvY2tldCBpcyBPSyAqLworI2lmZGVmIE1TR19QRUVLCisgICAgZWxzZSB7CisgICAgICAvKiB1c2UgdGhlIHNvY2tldCAqLworICAgICAgY2hhciBidWY7CisgICAgICBpZihyZWN2KChSRUNWX1RZUEVfQVJHMSljLT5zb2NrW0ZJUlNUU09DS0VUXSwgKFJFQ1ZfVFlQRV9BUkcyKSZidWYsCisgICAgICAgICAgICAgIChSRUNWX1RZUEVfQVJHMykxLCAoUkVDVl9UWVBFX0FSRzQpTVNHX1BFRUspID09IDApIHsKKyAgICAgICAgcmV0dXJuIENVUkxfU09DS0VUX0JBRDsgICAvKiBGSU4gcmVjZWl2ZWQgKi8KKyAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgfQorICBlbHNlCisgICAgcmV0dXJuIENVUkxfU09DS0VUX0JBRDsKKworICByZXR1cm4gc29ja2ZkOworfQorCisvKgorICogQ2xvc2UgYSBzb2NrZXQuCisgKgorICogJ2Nvbm4nIGNhbiBiZSBOVUxMLCBiZXdhcmUhCisgKi8KK2ludCBDdXJsX2Nsb3Nlc29ja2V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29jaykKK3sKKyAgaWYoY29ubiAmJiBjb25uLT5mY2xvc2Vzb2NrZXQpIHsKKyAgICBpZigoc29jayA9PSBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pICYmCisgICAgICAgY29ubi0+c29ja19hY2NlcHRlZFtTRUNPTkRBUllTT0NLRVRdKQorICAgICAgLyogaWYgdGhpcyBzb2NrZXQgbWF0Y2hlcyB0aGUgc2Vjb25kIHNvY2tldCwgYW5kIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aAorICAgICAgICAgYWNjZXB0LCB0aGVuIHdlIE1VU1QgTk9UIGNhbGwgdGhlIGNhbGxiYWNrIGJ1dCBjbGVhciB0aGUgYWNjZXB0ZWQKKyAgICAgICAgIHN0YXR1cyAqLworICAgICAgY29ubi0+c29ja19hY2NlcHRlZFtTRUNPTkRBUllTT0NLRVRdID0gRkFMU0U7CisgICAgZWxzZQorICAgICAgcmV0dXJuIGNvbm4tPmZjbG9zZXNvY2tldChjb25uLT5jbG9zZXNvY2tldF9jbGllbnQsIHNvY2spOworICB9CisgIHJldHVybiBzY2xvc2Uoc29jayk7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBzb2NrZXQgYmFzZWQgb24gaW5mbyBmcm9tICdjb25uJyBhbmQgJ2FpJy4KKyAqCisgKiAnYWRkcicgc2hvdWxkIGJlIGEgcG9pbnRlciB0byB0aGUgY29ycmVjdCBzdHJ1Y3QgdG8gZ2V0IGRhdGEgYmFjaywgb3IgTlVMTC4KKyAqICdzb2NrZmQnIG11c3QgYmUgYSBwb2ludGVyIHRvIGEgc29ja2V0IGRlc2NyaXB0b3IuCisgKgorICogSWYgdGhlIG9wZW4gc29ja2V0IGNhbGxiYWNrIGlzIHNldCwgdXNlZCB0aGF0IQorICoKKyAqLworQ1VSTGNvZGUgQ3VybF9zb2NrZXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ3VybF9hZGRyaW5mbyAqYWksCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9leCAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tmZCkKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgQ3VybF9zb2NrYWRkcl9leCBkdW1teTsKKworICBpZighYWRkcikKKyAgICAvKiBpZiB0aGUgY2FsbGVyIGRvZXNuJ3Qgd2FudCBpbmZvIGJhY2ssIHVzZSBhIGxvY2FsIHRlbXAgY29weSAqLworICAgIGFkZHIgPSAmZHVtbXk7CisKKyAgLyoKKyAgICogVGhlIEN1cmxfc29ja2FkZHJfZXggc3RydWN0dXJlIGlzIGJhc2ljYWxseSBsaWJjdXJsJ3MgZXh0ZXJuYWwgQVBJCisgICAqIGN1cmxfc29ja2FkZHIgc3RydWN0dXJlIHdpdGggZW5vdWdoIHNwYWNlIGF2YWlsYWJsZSB0byBkaXJlY3RseSBob2xkCisgICAqIGFueSBwcm90b2NvbC1zcGVjaWZpYyBhZGRyZXNzIHN0cnVjdHVyZXMuIFRoZSB2YXJpYWJsZSBkZWNsYXJlZCBoZXJlCisgICAqIHdpbGwgYmUgdXNlZCB0byBwYXNzIC8gcmVjZWl2ZSBkYXRhIHRvL2Zyb20gdGhlIGZvcGVuc29ja2V0IGNhbGxiYWNrCisgICAqIGlmIHRoaXMgaGFzIGJlZW4gc2V0LCBiZWZvcmUgdGhhdCwgaXQgaXMgaW5pdGlhbGl6ZWQgZnJvbSBwYXJhbWV0ZXJzLgorICAgKi8KKworICBhZGRyLT5mYW1pbHkgPSBhaS0+YWlfZmFtaWx5OworICBhZGRyLT5zb2NrdHlwZSA9IGNvbm4tPnNvY2t0eXBlOworICBhZGRyLT5wcm90b2NvbCA9IGNvbm4tPnNvY2t0eXBlPT1TT0NLX0RHUkFNP0lQUFJPVE9fVURQOmFpLT5haV9wcm90b2NvbDsKKyAgYWRkci0+YWRkcmxlbiA9IGFpLT5haV9hZGRybGVuOworCisgIGlmKGFkZHItPmFkZHJsZW4gPiBzaXplb2Yoc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSkpCisgICAgIGFkZHItPmFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSk7CisgIG1lbWNweSgmYWRkci0+c2FfYWRkciwgYWktPmFpX2FkZHIsIGFkZHItPmFkZHJsZW4pOworCisgIGlmKGRhdGEtPnNldC5mb3BlbnNvY2tldCkKKyAgIC8qCisgICAgKiBJZiB0aGUgb3BlbnNvY2tldCBjYWxsYmFjayBpcyBzZXQsIGFsbCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcworICAgICogaW5mb3JtYXRpb24gaXMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay4gRGVwZW5kaW5nIG9uIHRoaXMgaW5mb3JtYXRpb24gdGhlCisgICAgKiBjYWxsYmFjayBtYXkgb3B0IHRvIGFib3J0IHRoZSBjb25uZWN0aW9uLCB0aGlzIGlzIGluZGljYXRlZCByZXR1cm5pbmcKKyAgICAqIENVUkxfU09DS0VUX0JBRDsgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIGEgbm90LWNvbm5lY3RlZCBzb2NrZXQuIFdoZW4KKyAgICAqIHRoZSBjYWxsYmFjayByZXR1cm5zIGEgdmFsaWQgc29ja2V0IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGluZm9ybWF0aW9uCisgICAgKiBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZCBhbmQgdGhpcyAnbmV3JyBhZGRyZXNzIHdpbGwgYWN0dWFsbHkgYmUgdXNlZAorICAgICogaGVyZSB0byBjb25uZWN0LgorICAgICovCisgICAgKnNvY2tmZCA9IGRhdGEtPnNldC5mb3BlbnNvY2tldChkYXRhLT5zZXQub3BlbnNvY2tldF9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMU09DS1RZUEVfSVBDWE4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGN1cmxfc29ja2FkZHIgKilhZGRyKTsKKyAgZWxzZQorICAgIC8qIG9wZW5zb2NrZXQgY2FsbGJhY2sgbm90IHNldCwgc28gc2ltcGx5IGNyZWF0ZSB0aGUgc29ja2V0IG5vdyAqLworICAgICpzb2NrZmQgPSBzb2NrZXQoYWRkci0+ZmFtaWx5LCBhZGRyLT5zb2NrdHlwZSwgYWRkci0+cHJvdG9jb2wpOworCisgIGlmKCpzb2NrZmQgPT0gQ1VSTF9TT0NLRVRfQkFEKQorICAgIC8qIG5vIHNvY2tldCwgbm8gY29ubmVjdGlvbiAqLworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKworI2lmIGRlZmluZWQoRU5BQkxFX0lQVjYpICYmIGRlZmluZWQoSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCkKKyAgaWYoY29ubi0+c2NvcGUgJiYgKGFkZHItPmZhbWlseSA9PSBBRl9JTkVUNikpIHsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICogY29uc3Qgc2E2ID0gKHZvaWQgKikmYWRkci0+c2FfYWRkcjsKKyAgICBzYTYtPnNpbjZfc2NvcGVfaWQgPSBjb25uLT5zY29wZTsKKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIENVUkxFX09LOworCit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY29ubmVjdC5oIGIvY3VybC03LjI1LjAvbGliL2Nvbm5lY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODQzNjFmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2Nvbm5lY3QuaApAQCAtMCwwICsxLDEwNyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9DT05ORUNUX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfQ09OTkVDVF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSAibm9uYmxvY2suaCIgLyogZm9yIGN1cmx4X25vbmJsb2NrKCksIGZvcm1lcmx5IEN1cmxfbm9uYmxvY2soKSAqLworI2luY2x1ZGUgInNvY2thZGRyLmgiCisKK0NVUkxjb2RlIEN1cmxfaXNfY29ubmVjdGVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQpOworCitDVVJMY29kZSBDdXJsX2Nvbm5lY3Rob3N0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpob3N0LCAvKiBjb25uZWN0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrY29ubiwgLyogbm90IHNldCBpZiBlcnJvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX2FkZHJpbmZvICoqYWRkciwgLyogdGhlIG9uZSB3ZSB1c2VkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCk7IC8qIHRydWx5IGNvbm5lY3RlZD8gKi8KKworLyogZ2VuZXJpYyBmdW5jdGlvbiB0aGF0IHJldHVybnMgaG93IG11Y2ggdGltZSB0aGVyZSdzIGxlZnQgdG8gcnVuLCBhY2NvcmRpbmcKKyAgIHRvIHRoZSB0aW1lb3V0cyBzZXQgKi8KK2xvbmcgQ3VybF90aW1lbGVmdChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqbm93cCwKKyAgICAgICAgICAgICAgICAgICBib29sIGR1cmluZ2Nvbm5lY3QpOworCisjZGVmaW5lIERFRkFVTFRfQ09OTkVDVF9USU1FT1VUIDMwMDAwMCAvKiBtaWxsaXNlY29uZHMgPT0gZml2ZSBtaW51dGVzICovCisKKy8qCisgKiBVc2VkIHRvIGV4dHJhY3Qgc29ja2V0IGFuZCBjb25uZWN0ZGF0YSBzdHJ1Y3QgZm9yIHRoZSBtb3N0IHJlY2VudAorICogdHJhbnNmZXIgb24gdGhlIGdpdmVuIFNlc3Npb25IYW5kbGUuCisgKgorICogVGhlIHJldHVybmVkIHNvY2tldCB3aWxsIGJlIENVUkxfU09DS0VUX0JBRCBpbiBjYXNlIG9mIGZhaWx1cmUhCisgKi8KK2N1cmxfc29ja2V0X3QgQ3VybF9nZXRjb25uZWN0aW5mbyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKipjb25ucCk7CisKKyNpZmRlZiBVU0VfV0lOU09DSworLyogV2hlbiB5b3UgcnVuIGEgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIFdpbmRvd3MgU29ja2V0cyBBUEksIHlvdSBtYXkKKyAgIGV4cGVyaWVuY2Ugc2xvdyBwZXJmb3JtYW5jZSB3aGVuIHlvdSBjb3B5IGRhdGEgdG8gYSBUQ1Agc2VydmVyLgorCisgICBodHRwOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2tiLzgyMzc2NAorCisgICBXb3JrLWFyb3VuZDogTWFrZSB0aGUgU29ja2V0IFNlbmQgQnVmZmVyIFNpemUgTGFyZ2VyIFRoYW4gdGhlIFByb2dyYW0gU2VuZAorICAgQnVmZmVyIFNpemUKKworKi8KK3ZvaWQgQ3VybF9zbmRidWZzZXQoY3VybF9zb2NrZXRfdCBzb2NrZmQpOworI2Vsc2UKKyNkZWZpbmUgQ3VybF9zbmRidWZzZXQoeSkgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKK3ZvaWQgQ3VybF91cGRhdGVjb25uaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3Qgc29ja2ZkKTsKK3ZvaWQgQ3VybF9wZXJzaXN0Y29ubmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK2ludCBDdXJsX2Nsb3Nlc29ja2V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCBzb2NrKTsKKworLyoKKyAqIFRoZSBDdXJsX3NvY2thZGRyX2V4IHN0cnVjdHVyZSBpcyBiYXNpY2FsbHkgbGliY3VybCdzIGV4dGVybmFsIEFQSQorICogY3VybF9zb2NrYWRkciBzdHJ1Y3R1cmUgd2l0aCBlbm91Z2ggc3BhY2UgYXZhaWxhYmxlIHRvIGRpcmVjdGx5IGhvbGQgYW55CisgKiBwcm90b2NvbC1zcGVjaWZpYyBhZGRyZXNzIHN0cnVjdHVyZXMuIFRoZSB2YXJpYWJsZSBkZWNsYXJlZCBoZXJlIHdpbGwgYmUKKyAqIHVzZWQgdG8gcGFzcyAvIHJlY2VpdmUgZGF0YSB0by9mcm9tIHRoZSBmb3BlbnNvY2tldCBjYWxsYmFjayBpZiB0aGlzIGhhcworICogYmVlbiBzZXQsIGJlZm9yZSB0aGF0LCBpdCBpcyBpbml0aWFsaXplZCBmcm9tIHBhcmFtZXRlcnMuCisgKi8KK3N0cnVjdCBDdXJsX3NvY2thZGRyX2V4IHsKKyAgaW50IGZhbWlseTsKKyAgaW50IHNvY2t0eXBlOworICBpbnQgcHJvdG9jb2w7CisgIHVuc2lnbmVkIGludCBhZGRybGVuOworICB1bmlvbiB7CisgICAgc3RydWN0IHNvY2thZGRyIGFkZHI7CisgICAgc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSBidWZmOworICB9IF9zYV9leF91OworfTsKKyNkZWZpbmUgc2FfYWRkciBfc2FfZXhfdS5hZGRyCisKKy8qCisgKiBDcmVhdGUgYSBzb2NrZXQgYmFzZWQgb24gaW5mbyBmcm9tICdjb25uJyBhbmQgJ2FpJy4KKyAqCisgKiBGaWxsIGluICdhZGRyJyBhbmQgJ3NvY2tmZCcgYWNjb3JkaW5nbHkgaWYgT0sgaXMgcmV0dXJuZWQuIElmIHRoZSBvcGVuCisgKiBzb2NrZXQgY2FsbGJhY2sgaXMgc2V0LCB1c2VkIHRoYXQhCisgKgorICovCitDVVJMY29kZSBDdXJsX3NvY2tldChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBDdXJsX2FkZHJpbmZvICphaSwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX3NvY2thZGRyX2V4ICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja2ZkKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0NPTk5FQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2NvbnRlbnRfZW5jb2RpbmcuYyBiL2N1cmwtNy4yNS4wL2xpYi9jb250ZW50X2VuY29kaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3NmVmOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jb250ZW50X2VuY29kaW5nLmMKQEAgLTAsMCArMSw0MzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfTElCWgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiY29udGVudF9lbmNvZGluZy5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKiBDb21tZW50IHRoaXMgb3V0IGlmIHpsaWIgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGF0IGxlYXN0IHZlci4gMS4yLjAuNAorICAgKGRvaW5nIHNvIHdpbGwgcmVkdWNlIGNvZGUgc2l6ZSBzbGlnaHRseSkuICovCisjZGVmaW5lIE9MRF9aTElCX1NVUFBPUlQgMQorCisjZGVmaW5lIERTSVogQ1VSTF9NQVhfV1JJVEVfU0laRSAvKiBidWZmZXIgc2l6ZSBmb3IgZGVjb21wcmVzc2VkIGRhdGEgKi8KKworI2RlZmluZSBHWklQX01BR0lDXzAgMHgxZgorI2RlZmluZSBHWklQX01BR0lDXzEgMHg4YgorCisvKiBnemlwIGZsYWcgYnl0ZSAqLworI2RlZmluZSBBU0NJSV9GTEFHICAgMHgwMSAvKiBiaXQgMCBzZXQ6IGZpbGUgcHJvYmFibHkgYXNjaWkgdGV4dCAqLworI2RlZmluZSBIRUFEX0NSQyAgICAgMHgwMiAvKiBiaXQgMSBzZXQ6IGhlYWRlciBDUkMgcHJlc2VudCAqLworI2RlZmluZSBFWFRSQV9GSUVMRCAgMHgwNCAvKiBiaXQgMiBzZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KKyNkZWZpbmUgT1JJR19OQU1FICAgIDB4MDggLyogYml0IDMgc2V0OiBvcmlnaW5hbCBmaWxlIG5hbWUgcHJlc2VudCAqLworI2RlZmluZSBDT01NRU5UICAgICAgMHgxMCAvKiBiaXQgNCBzZXQ6IGZpbGUgY29tbWVudCBwcmVzZW50ICovCisjZGVmaW5lIFJFU0VSVkVEICAgICAweEUwIC8qIGJpdHMgNS4uNzogcmVzZXJ2ZWQgKi8KKworc3RhdGljIHZvaWRwZgoremFsbG9jX2NiKHZvaWRwZiBvcGFxdWUsIHVuc2lnbmVkIGludCBpdGVtcywgdW5zaWduZWQgaW50IHNpemUpCit7CisgICh2b2lkKSBvcGFxdWU7CisgIC8qIG5vdCBhIHR5cG8sIGtlZXAgaXQgY2FsbG9jKCkgKi8KKyAgcmV0dXJuICh2b2lkcGYpIGNhbGxvYyhpdGVtcywgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCit6ZnJlZV9jYih2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKQoreworICAodm9pZCkgb3BhcXVlOworICBmcmVlKHB0cik7Cit9CisKK3N0YXRpYyBDVVJMY29kZQorcHJvY2Vzc196bGliX2Vycm9yKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgel9zdHJlYW0gKnopCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgaWYoei0+bXNnKQorICAgIGZhaWxmIChkYXRhLCAiRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBjb250ZW50IHVuZW5jb2Rpbmc6ICVzIiwKKyAgICAgICAgICAgei0+bXNnKTsKKyAgZWxzZQorICAgIGZhaWxmIChkYXRhLCAiRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBjb250ZW50IHVuZW5jb2Rpbmc6ICIKKyAgICAgICAgICAgIlVua25vd24gZmFpbHVyZSB3aXRoaW4gZGVjb21wcmVzc2lvbiBzb2Z0d2FyZS4iKTsKKworICByZXR1cm4gQ1VSTEVfQkFEX0NPTlRFTlRfRU5DT0RJTkc7Cit9CisKK3N0YXRpYyBDVVJMY29kZQorZXhpdF96bGliKHpfc3RyZWFtICp6LCB6bGliSW5pdFN0YXRlICp6bGliX2luaXQsIENVUkxjb2RlIHJlc3VsdCkKK3sKKyAgaW5mbGF0ZUVuZCh6KTsKKyAgKnpsaWJfaW5pdCA9IFpMSUJfVU5JTklUOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUKK2luZmxhdGVfc3RyZWFtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprKQoreworICBpbnQgYWxsb3dfcmVzdGFydCA9IDE7CisgIHpfc3RyZWFtICp6ID0gJmstPno7ICAgICAgICAgIC8qIHpsaWIgc3RhdGUgc3RydWN0dXJlICovCisgIHVJbnQgbnJlYWQgPSB6LT5hdmFpbF9pbjsKKyAgQnl0ZWYgKm9yaWdfaW4gPSB6LT5uZXh0X2luOworICBpbnQgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAvKiB6bGliIHN0YXR1cyAqLworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsgICAvKiBDdXJsX2NsaWVudF93cml0ZSBzdGF0dXMgKi8KKyAgY2hhciAqZGVjb21wOyAgICAgICAgICAgICAgICAgLyogUHV0IHRoZSBkZWNvbXByZXNzZWQgZGF0YSBoZXJlLiAqLworCisgIC8qIER5bmFtaWNhbGx5IGFsbG9jYXRlIGEgYnVmZmVyIGZvciBkZWNvbXByZXNzaW9uIGJlY2F1c2UgaXQncyB1bmNvbW1vbmx5CisgICAgIGxhcmdlIHRvIGhvbGQgb24gdGhlIHN0YWNrICovCisgIGRlY29tcCA9IG1hbGxvYyhEU0laKTsKKyAgaWYoZGVjb21wID09IE5VTEwpIHsKKyAgICByZXR1cm4gZXhpdF96bGliKHosICZrLT56bGliX2luaXQsIENVUkxFX09VVF9PRl9NRU1PUlkpOworICB9CisKKyAgLyogYmVjYXVzZSB0aGUgYnVmZmVyIHNpemUgaXMgZml4ZWQsIGl0ZXJhdGl2ZWx5IGRlY29tcHJlc3MgYW5kIHRyYW5zZmVyIHRvCisgICAgIHRoZSBjbGllbnQgdmlhIGNsaWVudF93cml0ZS4gKi8KKyAgZm9yKDs7KSB7CisgICAgLyogKHJlKXNldCBidWZmZXIgZm9yIGRlY29tcHJlc3NlZCBvdXRwdXQgZm9yIGV2ZXJ5IGl0ZXJhdGlvbiAqLworICAgIHotPm5leHRfb3V0ID0gKEJ5dGVmICopZGVjb21wOworICAgIHotPmF2YWlsX291dCA9IERTSVo7CisKKyAgICBzdGF0dXMgPSBpbmZsYXRlKHosIFpfU1lOQ19GTFVTSCk7CisgICAgaWYoc3RhdHVzID09IFpfT0sgfHwgc3RhdHVzID09IFpfU1RSRUFNX0VORCkgeworICAgICAgYWxsb3dfcmVzdGFydCA9IDA7CisgICAgICBpZigoRFNJWiAtIHotPmF2YWlsX291dCkgJiYgKCFrLT5pZ25vcmVib2R5KSkgeworICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCBkZWNvbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTSVogLSB6LT5hdmFpbF9vdXQpOworICAgICAgICAvKiBpZiAhQ1VSTEVfT0ssIGNsZWFuIHVwLCByZXR1cm4gKi8KKyAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgZnJlZShkZWNvbXApOworICAgICAgICAgIHJldHVybiBleGl0X3psaWIoeiwgJmstPnpsaWJfaW5pdCwgcmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBEb25lPyBjbGVhbiB1cCwgcmV0dXJuICovCisgICAgICBpZihzdGF0dXMgPT0gWl9TVFJFQU1fRU5EKSB7CisgICAgICAgIGZyZWUoZGVjb21wKTsKKyAgICAgICAgaWYoaW5mbGF0ZUVuZCh6KSA9PSBaX09LKQorICAgICAgICAgIHJldHVybiBleGl0X3psaWIoeiwgJmstPnpsaWJfaW5pdCwgcmVzdWx0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBleGl0X3psaWIoeiwgJmstPnpsaWJfaW5pdCwgcHJvY2Vzc196bGliX2Vycm9yKGNvbm4sIHopKTsKKyAgICAgIH0KKworICAgICAgLyogRG9uZSB3aXRoIHRoZXNlIGJ5dGVzLCBleGl0ICovCisKKyAgICAgIC8qIHN0YXR1cyBpcyBhbHdheXMgWl9PSyBhdCB0aGlzIHBvaW50ISAqLworICAgICAgaWYoei0+YXZhaWxfaW4gPT0gMCkgeworICAgICAgICBmcmVlKGRlY29tcCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoYWxsb3dfcmVzdGFydCAmJiBzdGF0dXMgPT0gWl9EQVRBX0VSUk9SKSB7CisgICAgICAvKiBzb21lIHNlcnZlcnMgc2VlbSB0byBub3QgZ2VuZXJhdGUgemxpYiBoZWFkZXJzLCBzbyB0aGlzIGlzIGFuIGF0dGVtcHQKKyAgICAgICAgIHRvIGZpeCBhbmQgY29udGludWUgYW55d2F5ICovCisKKyAgICAgICh2b2lkKSBpbmZsYXRlRW5kKHopOyAgICAgLyogZG9uJ3QgY2FyZSBhYm91dCB0aGUgcmV0dXJuIGNvZGUgKi8KKyAgICAgIGlmKGluZmxhdGVJbml0Mih6LCAtTUFYX1dCSVRTKSAhPSBaX09LKSB7CisgICAgICAgIGZyZWUoZGVjb21wKTsKKyAgICAgICAgcmV0dXJuIGV4aXRfemxpYih6LCAmay0+emxpYl9pbml0LCBwcm9jZXNzX3psaWJfZXJyb3IoY29ubiwgeikpOworICAgICAgfQorICAgICAgei0+bmV4dF9pbiA9IG9yaWdfaW47CisgICAgICB6LT5hdmFpbF9pbiA9IG5yZWFkOworICAgICAgYWxsb3dfcmVzdGFydCA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yOyBleGl0IGxvb3AsIGhhbmRsZSBiZWxvdyAqLworICAgICAgZnJlZShkZWNvbXApOworICAgICAgcmV0dXJuIGV4aXRfemxpYih6LCAmay0+emxpYl9pbml0LCBwcm9jZXNzX3psaWJfZXJyb3IoY29ubiwgeikpOworICAgIH0KKyAgfQorICAvKiBXaWxsIG5ldmVyIGdldCBoZXJlICovCit9CisKK0NVUkxjb2RlCitDdXJsX3VuZW5jb2RlX2RlZmxhdGVfd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgbnJlYWQpCit7CisgIHpfc3RyZWFtICp6ID0gJmstPno7ICAgICAgICAgIC8qIHpsaWIgc3RhdGUgc3RydWN0dXJlICovCisKKyAgLyogSW5pdGlhbGl6ZSB6bGliPyAqLworICBpZihrLT56bGliX2luaXQgPT0gWkxJQl9VTklOSVQpIHsKKyAgICBtZW1zZXQoeiwgMCwgc2l6ZW9mKHpfc3RyZWFtKSk7CisgICAgei0+emFsbG9jID0gKGFsbG9jX2Z1bmMpemFsbG9jX2NiOworICAgIHotPnpmcmVlID0gKGZyZWVfZnVuYyl6ZnJlZV9jYjsKKworICAgIGlmKGluZmxhdGVJbml0KHopICE9IFpfT0spCisgICAgICByZXR1cm4gcHJvY2Vzc196bGliX2Vycm9yKGNvbm4sIHopOworICAgIGstPnpsaWJfaW5pdCA9IFpMSUJfSU5JVDsKKyAgfQorCisgIC8qIFNldCB0aGUgY29tcHJlc3NlZCBpbnB1dCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkICovCisgIHotPm5leHRfaW4gPSAoQnl0ZWYgKilrLT5zdHI7CisgIHotPmF2YWlsX2luID0gKHVJbnQpbnJlYWQ7CisKKyAgLyogTm93IHVuY29tcHJlc3MgdGhlIGRhdGEgKi8KKyAgcmV0dXJuIGluZmxhdGVfc3RyZWFtKGNvbm4sIGspOworfQorCisjaWZkZWYgT0xEX1pMSUJfU1VQUE9SVAorLyogU2tpcCBvdmVyIHRoZSBnemlwIGhlYWRlciAqLworc3RhdGljIGVudW0geworICBHWklQX09LLAorICBHWklQX0JBRCwKKyAgR1pJUF9VTkRFUkZMT1cKK30gY2hlY2tfZ3ppcF9oZWFkZXIodW5zaWduZWQgY2hhciBjb25zdCAqZGF0YSwgc3NpemVfdCBsZW4sIHNzaXplX3QgKmhlYWRlcmxlbikKK3sKKyAgaW50IG1ldGhvZCwgZmxhZ3M7CisgIGNvbnN0IHNzaXplX3QgdG90YWxsZW4gPSBsZW47CisKKyAgLyogVGhlIHNob3J0ZXN0IGhlYWRlciBpcyAxMCBieXRlcyAqLworICBpZihsZW4gPCAxMCkKKyAgICByZXR1cm4gR1pJUF9VTkRFUkZMT1c7CisKKyAgaWYoKGRhdGFbMF0gIT0gR1pJUF9NQUdJQ18wKSB8fCAoZGF0YVsxXSAhPSBHWklQX01BR0lDXzEpKQorICAgIHJldHVybiBHWklQX0JBRDsKKworICBtZXRob2QgPSBkYXRhWzJdOworICBmbGFncyA9IGRhdGFbM107CisKKyAgaWYobWV0aG9kICE9IFpfREVGTEFURUQgfHwgKGZsYWdzICYgUkVTRVJWRUQpICE9IDApIHsKKyAgICAvKiBDYW4ndCBoYW5kbGUgdGhpcyBjb21wcmVzc2lvbiBtZXRob2Qgb3IgdW5rbm93biBmbGFnICovCisgICAgcmV0dXJuIEdaSVBfQkFEOworICB9CisKKyAgLyogU2tpcCBvdmVyIHRpbWUsIHhmbGFncywgT1MgY29kZSBhbmQgYWxsIHByZXZpb3VzIGJ5dGVzICovCisgIGxlbiAtPSAxMDsKKyAgZGF0YSArPSAxMDsKKworICBpZihmbGFncyAmIEVYVFJBX0ZJRUxEKSB7CisgICAgc3NpemVfdCBleHRyYV9sZW47CisKKyAgICBpZihsZW4gPCAyKQorICAgICAgcmV0dXJuIEdaSVBfVU5ERVJGTE9XOworCisgICAgZXh0cmFfbGVuID0gKGRhdGFbMV0gPDwgOCkgfCBkYXRhWzBdOworCisgICAgaWYobGVuIDwgKGV4dHJhX2xlbisyKSkKKyAgICAgIHJldHVybiBHWklQX1VOREVSRkxPVzsKKworICAgIGxlbiAtPSAoZXh0cmFfbGVuICsgMik7CisgICAgZGF0YSArPSAoZXh0cmFfbGVuICsgMik7CisgIH0KKworICBpZihmbGFncyAmIE9SSUdfTkFNRSkgeworICAgIC8qIFNraXAgb3ZlciBOVUwtdGVybWluYXRlZCBmaWxlIG5hbWUgKi8KKyAgICB3aGlsZShsZW4gJiYgKmRhdGEpIHsKKyAgICAgIC0tbGVuOworICAgICAgKytkYXRhOworICAgIH0KKyAgICBpZighbGVuIHx8ICpkYXRhKQorICAgICAgcmV0dXJuIEdaSVBfVU5ERVJGTE9XOworCisgICAgLyogU2tpcCBvdmVyIHRoZSBOVUwgKi8KKyAgICAtLWxlbjsKKyAgICArK2RhdGE7CisgIH0KKworICBpZihmbGFncyAmIENPTU1FTlQpIHsKKyAgICAvKiBTa2lwIG92ZXIgTlVMLXRlcm1pbmF0ZWQgY29tbWVudCAqLworICAgIHdoaWxlKGxlbiAmJiAqZGF0YSkgeworICAgICAgLS1sZW47CisgICAgICArK2RhdGE7CisgICAgfQorICAgIGlmKCFsZW4gfHwgKmRhdGEpCisgICAgICByZXR1cm4gR1pJUF9VTkRFUkZMT1c7CisKKyAgICAvKiBTa2lwIG92ZXIgdGhlIE5VTCAqLworICAgIC0tbGVuOworICB9CisKKyAgaWYoZmxhZ3MgJiBIRUFEX0NSQykgeworICAgIGlmKGxlbiA8IDIpCisgICAgICByZXR1cm4gR1pJUF9VTkRFUkZMT1c7CisKKyAgICBsZW4gLT0gMjsKKyAgfQorCisgICpoZWFkZXJsZW4gPSB0b3RhbGxlbiAtIGxlbjsKKyAgcmV0dXJuIEdaSVBfT0s7Cit9CisjZW5kaWYKKworQ1VSTGNvZGUKK0N1cmxfdW5lbmNvZGVfZ3ppcF93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmssCisgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBucmVhZCkKK3sKKyAgel9zdHJlYW0gKnogPSAmay0+ejsgICAgICAgICAgLyogemxpYiBzdGF0ZSBzdHJ1Y3R1cmUgKi8KKworICAvKiBJbml0aWFsaXplIHpsaWI/ICovCisgIGlmKGstPnpsaWJfaW5pdCA9PSBaTElCX1VOSU5JVCkgeworICAgIG1lbXNldCh6LCAwLCBzaXplb2Yoel9zdHJlYW0pKTsKKyAgICB6LT56YWxsb2MgPSAoYWxsb2NfZnVuYyl6YWxsb2NfY2I7CisgICAgei0+emZyZWUgPSAoZnJlZV9mdW5jKXpmcmVlX2NiOworCisgICAgaWYoc3RyY21wKHpsaWJWZXJzaW9uKCksICIxLjIuMC40IikgPj0gMCkgeworICAgICAgLyogemxpYiB2ZXIuID49IDEuMi4wLjQgc3VwcG9ydHMgdHJhbnNwYXJlbnQgZ3ppcCBkZWNvbXByZXNzaW5nICovCisgICAgICBpZihpbmZsYXRlSW5pdDIoeiwgTUFYX1dCSVRTKzMyKSAhPSBaX09LKSB7CisgICAgICAgIHJldHVybiBwcm9jZXNzX3psaWJfZXJyb3IoY29ubiwgeik7CisgICAgICB9CisgICAgICBrLT56bGliX2luaXQgPSBaTElCX0lOSVRfR1pJUDsgLyogVHJhbnNwYXJlbnQgZ3ppcCBkZWNvbXByZXNzIHN0YXRlICovCisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogd2UgbXVzdCBwYXJzZSB0aGUgZ3ppcCBoZWFkZXIgb3Vyc2VsdmVzICovCisgICAgICBpZihpbmZsYXRlSW5pdDIoeiwgLU1BWF9XQklUUykgIT0gWl9PSykgeworICAgICAgICByZXR1cm4gcHJvY2Vzc196bGliX2Vycm9yKGNvbm4sIHopOworICAgICAgfQorICAgICAgay0+emxpYl9pbml0ID0gWkxJQl9JTklUOyAgIC8qIEluaXRpYWwgY2FsbCBzdGF0ZSAqLworICAgIH0KKyAgfQorCisgIGlmKGstPnpsaWJfaW5pdCA9PSBaTElCX0lOSVRfR1pJUCkgeworICAgIC8qIExldCB6bGliIGhhbmRsZSB0aGUgZ3ppcCBkZWNvbXByZXNzaW9uIGVudGlyZWx5ICovCisgICAgei0+bmV4dF9pbiA9IChCeXRlZiAqKWstPnN0cjsKKyAgICB6LT5hdmFpbF9pbiA9ICh1SW50KW5yZWFkOworICAgIC8qIE5vdyB1bmNvbXByZXNzIHRoZSBkYXRhICovCisgICAgcmV0dXJuIGluZmxhdGVfc3RyZWFtKGNvbm4sIGspOworICB9CisKKyNpZm5kZWYgT0xEX1pMSUJfU1VQUE9SVAorICAvKiBTdXBwb3J0IGZvciBvbGQgemxpYiB2ZXJzaW9ucyBpcyBjb21waWxlZCBhd2F5IGFuZCB3ZSBhcmUgcnVubmluZyB3aXRoCisgICAgIGFuIG9sZCB2ZXJzaW9uLCBzbyByZXR1cm4gYW4gZXJyb3IuICovCisgIHJldHVybiBleGl0X3psaWIoeiwgJmstPnpsaWJfaW5pdCwgQ1VSTEVfRlVOQ1RJT05fTk9UX0ZPVU5EKTsKKworI2Vsc2UKKyAgLyogVGhpcyBuZXh0IG1lc3MgaXMgdG8gZ2V0IGFyb3VuZCB0aGUgcG90ZW50aWFsIGNhc2Ugd2hlcmUgdGhlcmUgaXNuJ3QKKyAgICogZW5vdWdoIGRhdGEgcGFzc2VkIGluIHRvIHNraXAgb3ZlciB0aGUgZ3ppcCBoZWFkZXIuICBJZiB0aGF0IGhhcHBlbnMsIHdlCisgICAqIG1hbGxvYyBhIGJsb2NrIGFuZCBjb3B5IHdoYXQgd2UgaGF2ZSB0aGVuIHdhaXQgZm9yIHRoZSBuZXh0IGNhbGwuICBJZgorICAgKiB0aGVyZSBzdGlsbCBpc24ndCBlbm91Z2ggKHRoaXMgaXMgZGVmaW5pdGVseSBhIHdvcnN0LWNhc2Ugc2NlbmFyaW8pLCB3ZQorICAgKiBtYWtlIHRoZSBibG9jayBiaWdnZXIsIGNvcHkgdGhlIG5leHQgcGFydCBpbiBhbmQga2VlcCB3YWl0aW5nLgorICAgKgorICAgKiBUaGlzIGlzIG9ubHkgcmVxdWlyZWQgd2l0aCB6bGliIHZlcnNpb25zIDwgMS4yLjAuNCBhcyBuZXdlciB2ZXJzaW9ucworICAgKiBjYW4gaGFuZGxlIHRoZSBnemlwIGhlYWRlciB0aGVtc2VsdmVzLgorICAgKi8KKworICBzd2l0Y2ggKGstPnpsaWJfaW5pdCkgeworICAvKiBTa2lwIG92ZXIgZ3ppcCBoZWFkZXI/ICovCisgIGNhc2UgWkxJQl9JTklUOgorICB7CisgICAgLyogSW5pdGlhbCBjYWxsIHN0YXRlICovCisgICAgc3NpemVfdCBobGVuOworCisgICAgc3dpdGNoIChjaGVja19nemlwX2hlYWRlcigodW5zaWduZWQgY2hhciAqKWstPnN0ciwgbnJlYWQsICZobGVuKSkgeworICAgIGNhc2UgR1pJUF9PSzoKKyAgICAgIHotPm5leHRfaW4gPSAoQnl0ZWYgKilrLT5zdHIgKyBobGVuOworICAgICAgei0+YXZhaWxfaW4gPSAodUludCkobnJlYWQgLSBobGVuKTsKKyAgICAgIGstPnpsaWJfaW5pdCA9IFpMSUJfR1pJUF9JTkZMQVRJTkc7IC8qIEluZmxhdGluZyBzdHJlYW0gc3RhdGUgKi8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHWklQX1VOREVSRkxPVzoKKyAgICAgIC8qIFdlIG5lZWQgbW9yZSBkYXRhIHNvIHdlIGNhbiBmaW5kIHRoZSBlbmQgb2YgdGhlIGd6aXAgaGVhZGVyLiAgSXQncworICAgICAgICogcG9zc2libGUgdGhhdCB0aGUgbWVtb3J5IGJsb2NrIHdlIG1hbGxvYyBoZXJlIHdpbGwgbmV2ZXIgYmUgZnJlZWQgaWYKKyAgICAgICAqIHRoZSB0cmFuc2ZlciBhYnJ1cHRseSBhYm9ydHMgYWZ0ZXIgdGhpcyBwb2ludC4gIFNpbmNlIGl0J3MgdW5saWtlbHkKKyAgICAgICAqIHRoYXQgY2lyY3Vtc3RhbmNlcyB3aWxsIGJlIHJpZ2h0IGZvciB0aGlzIGNvZGUgcGF0aCB0byBiZSBmb2xsb3dlZCBpbgorICAgICAgICogdGhlIGZpcnN0IHBsYWNlLCBhbmQgaXQncyBldmVuIG1vcmUgdW5saWtlbHkgZm9yIGEgdHJhbnNmZXIgdG8gZmFpbAorICAgICAgICogaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcywgaXQgc2hvdWxkIHNlbGRvbSBiZSBhIHByb2JsZW0uCisgICAgICAgKi8KKyAgICAgIHotPmF2YWlsX2luID0gKHVJbnQpbnJlYWQ7CisgICAgICB6LT5uZXh0X2luID0gbWFsbG9jKHotPmF2YWlsX2luKTsKKyAgICAgIGlmKHotPm5leHRfaW4gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gZXhpdF96bGliKHosICZrLT56bGliX2luaXQsIENVUkxFX09VVF9PRl9NRU1PUlkpOworICAgICAgfQorICAgICAgbWVtY3B5KHotPm5leHRfaW4sIGstPnN0ciwgei0+YXZhaWxfaW4pOworICAgICAgay0+emxpYl9pbml0ID0gWkxJQl9HWklQX0hFQURFUjsgICAvKiBOZWVkIG1vcmUgZ3ppcCBoZWFkZXIgZGF0YSBzdGF0ZSAqLworICAgICAgLyogV2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSB0byBpbmZsYXRlIHlldCAqLworICAgICAgcmV0dXJuIENVUkxFX09LOworCisgICAgY2FzZSBHWklQX0JBRDoKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGV4aXRfemxpYih6LCAmay0+emxpYl9pbml0LCBwcm9jZXNzX3psaWJfZXJyb3IoY29ubiwgeikpOworICAgIH0KKworICB9CisgIGJyZWFrOworCisgIGNhc2UgWkxJQl9HWklQX0hFQURFUjoKKyAgeworICAgIC8qIE5lZWQgbW9yZSBnemlwIGhlYWRlciBkYXRhIHN0YXRlICovCisgICAgc3NpemVfdCBobGVuOworICAgIHVuc2lnbmVkIGNoYXIgKm9sZGJsb2NrID0gei0+bmV4dF9pbjsKKworICAgIHotPmF2YWlsX2luICs9ICh1SW50KW5yZWFkOworICAgIHotPm5leHRfaW4gPSByZWFsbG9jKHotPm5leHRfaW4sIHotPmF2YWlsX2luKTsKKyAgICBpZih6LT5uZXh0X2luID09IE5VTEwpIHsKKyAgICAgIGZyZWUob2xkYmxvY2spOworICAgICAgcmV0dXJuIGV4aXRfemxpYih6LCAmay0+emxpYl9pbml0LCBDVVJMRV9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAgLyogQXBwZW5kIHRoZSBuZXcgYmxvY2sgb2YgZGF0YSB0byB0aGUgcHJldmlvdXMgb25lICovCisgICAgbWVtY3B5KHotPm5leHRfaW4gKyB6LT5hdmFpbF9pbiAtIG5yZWFkLCBrLT5zdHIsIG5yZWFkKTsKKworICAgIHN3aXRjaCAoY2hlY2tfZ3ppcF9oZWFkZXIoei0+bmV4dF9pbiwgei0+YXZhaWxfaW4sICZobGVuKSkgeworICAgIGNhc2UgR1pJUF9PSzoKKyAgICAgIC8qIFRoaXMgaXMgdGhlIHpsaWIgc3RyZWFtIGRhdGEgKi8KKyAgICAgIGZyZWUoei0+bmV4dF9pbik7CisgICAgICAvKiBEb24ndCBwb2ludCBpbnRvIHRoZSBtYWxsb2NlZCBibG9jayBzaW5jZSB3ZSBqdXN0IGZyZWVkIGl0ICovCisgICAgICB6LT5uZXh0X2luID0gKEJ5dGVmICopay0+c3RyICsgaGxlbiArIG5yZWFkIC0gei0+YXZhaWxfaW47CisgICAgICB6LT5hdmFpbF9pbiA9ICh1SW50KSh6LT5hdmFpbF9pbiAtIGhsZW4pOworICAgICAgay0+emxpYl9pbml0ID0gWkxJQl9HWklQX0lORkxBVElORzsgICAvKiBJbmZsYXRpbmcgc3RyZWFtIHN0YXRlICovCisgICAgICBicmVhazsKKworICAgIGNhc2UgR1pJUF9VTkRFUkZMT1c6CisgICAgICAvKiBXZSBzdGlsbCBkb24ndCBoYXZlIGFueSBkYXRhIHRvIGluZmxhdGUhICovCisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgICBjYXNlIEdaSVBfQkFEOgorICAgIGRlZmF1bHQ6CisgICAgICBmcmVlKHotPm5leHRfaW4pOworICAgICAgcmV0dXJuIGV4aXRfemxpYih6LCAmay0+emxpYl9pbml0LCBwcm9jZXNzX3psaWJfZXJyb3IoY29ubiwgeikpOworICAgIH0KKworICB9CisgIGJyZWFrOworCisgIGNhc2UgWkxJQl9HWklQX0lORkxBVElORzoKKyAgZGVmYXVsdDoKKyAgICAvKiBJbmZsYXRpbmcgc3RyZWFtIHN0YXRlICovCisgICAgei0+bmV4dF9pbiA9IChCeXRlZiAqKWstPnN0cjsKKyAgICB6LT5hdmFpbF9pbiA9ICh1SW50KW5yZWFkOworICAgIGJyZWFrOworICB9CisKKyAgaWYoei0+YXZhaWxfaW4gPT0gMCkgeworICAgIC8qIFdlIGRvbid0IGhhdmUgYW55IGRhdGEgdG8gaW5mbGF0ZTsgd2FpdCB1bnRpbCBuZXh0IHRpbWUgKi8KKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKworICAvKiBXZSd2ZSBwYXJzZWQgdGhlIGhlYWRlciwgbm93IHVuY29tcHJlc3MgdGhlIGRhdGEgKi8KKyAgcmV0dXJuIGluZmxhdGVfc3RyZWFtKGNvbm4sIGspOworI2VuZGlmCit9CisKK3ZvaWQgQ3VybF91bmVuY29kZV9jbGVhbnVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7CisgIHpfc3RyZWFtICp6ID0gJmstPno7CisgIGlmKGstPnpsaWJfaW5pdCAhPSBaTElCX1VOSU5JVCkKKyAgICAodm9pZCkgZXhpdF96bGliKHosICZrLT56bGliX2luaXQsIENVUkxFX09LKTsKK30KKworI2VuZGlmIC8qIEhBVkVfTElCWiAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2NvbnRlbnRfZW5jb2RpbmcuaCBiL2N1cmwtNy4yNS4wL2xpYi9jb250ZW50X2VuY29kaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyZGE0YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jb250ZW50X2VuY29kaW5nLmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9DT05URU5UX0VOQ09ESU5HX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfQ09OVEVOVF9FTkNPRElOR19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisvKgorICogQ29tbWEtc2VwYXJhdGVkIGxpc3QgYWxsIHN1cHBvcnRlZCBDb250ZW50LUVuY29kaW5ncyAoJ2lkZW50aXR5JyBpcyBpbXBsaWVkKQorICovCisjaWZkZWYgSEFWRV9MSUJaCisjZGVmaW5lIEFMTF9DT05URU5UX0VOQ09ESU5HUyAiZGVmbGF0ZSwgZ3ppcCIKKy8qIGZvcmNlIGEgY2xlYW51cCAqLwordm9pZCBDdXJsX3VuZW5jb2RlX2NsZWFudXAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKyNlbHNlCisjZGVmaW5lIEFMTF9DT05URU5UX0VOQ09ESU5HUyAiaWRlbnRpdHkiCisjZGVmaW5lIEN1cmxfdW5lbmNvZGVfY2xlYW51cCh4KSBDdXJsX25vcF9zdG10CisjZW5kaWYKKworQ1VSTGNvZGUgQ3VybF91bmVuY29kZV9kZWZsYXRlX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgbnJlYWQpOworCitDVVJMY29kZQorQ3VybF91bmVuY29kZV9nemlwX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IG5yZWFkKTsKKworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfQ09OVEVOVF9FTkNPRElOR19IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY29va2llLmMgYi9jdXJsLTcuMjUuMC9saWIvY29va2llLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFjY2RiZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jb29raWUuYwpAQCAtMCwwICsxLDExNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqCisKKworUkVDRUlWSU5HIENPT0tJRSBJTkZPUk1BVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzdHJ1Y3QgQ29va2llSW5mbyAqY29va2llX2luaXQoY2hhciAqZmlsZSk7CisKKyAgICAgICAgSW5pdHMgYSBjb29raWUgc3RydWN0IHRvIHN0b3JlIGRhdGEgaW4gYSBsb2NhbCBmaWxlLiBUaGlzIGlzIGFsd2F5cworICAgICAgICBjYWxsZWQgYmVmb3JlIGFueSBjb29raWVzIGFyZSBzZXQuCisKK2ludCBjb29raWVzX3NldChzdHJ1Y3QgQ29va2llSW5mbyAqY29va2llLCBjaGFyICpjb29raWVfbGluZSk7CisKKyAgICAgICAgVGhlICdjb29raWVfbGluZScgcGFyYW1ldGVyIGlzIGEgZnVsbCAiU2V0LWNvb2tpZToiIGxpbmUgYXMKKyAgICAgICAgcmVjZWl2ZWQgZnJvbSBhIHNlcnZlci4KKworICAgICAgICBUaGUgZnVuY3Rpb24gbmVlZCB0byByZXBsYWNlIHByZXZpb3VzbHkgc3RvcmVkIGxpbmVzIHRoYXQgdGhpcyBuZXcKKyAgICAgICAgbGluZSBzdXBlcmNlZWRzLgorCisgICAgICAgIEl0IG1heSByZW1vdmUgbGluZXMgdGhhdCBhcmUgZXhwaXJlZC4KKworICAgICAgICBJdCBzaG91bGQgcmV0dXJuIGFuIGluZGljYXRpb24gb2Ygc3VjY2Vzcy9lcnJvci4KKworCitTRU5ESU5HIENPT0tJRSBJTkZPUk1BVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3RydWN0IENvb2tpZXMgKmNvb2tpZV9nZXRsaXN0KHN0cnVjdCBDb29raWVJbmZvICpjb29raWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaG9zdCwgY2hhciAqcGF0aCwgYm9vbCBzZWN1cmUpOworCisgICAgICAgIEZvciBhIGdpdmVuIGhvc3QgYW5kIHBhdGgsIHJldHVybiBhIGxpbmtlZCBsaXN0IG9mIGNvb2tpZXMgdGhhdAorICAgICAgICB0aGUgY2xpZW50IHNob3VsZCBzZW5kIHRvIHRoZSBzZXJ2ZXIgaWYgdXNlZCBub3cuIFRoZSBzZWN1cmUKKyAgICAgICAgYm9vbGVhbiBpbmZvcm1zIHRoZSBjb29raWUgaWYgYSBzZWN1cmUgY29ubmVjdGlvbiBpcyBhY2hpZXZlZCBvcgorICAgICAgICBub3QuCisKKyAgICAgICAgSXQgc2hhbGwgb25seSByZXR1cm4gY29va2llcyB0aGF0IGhhdmVuJ3QgZXhwaXJlZC4KKworCitFeGFtcGxlIHNldCBvZiBjb29raWVzOgorCisgICAgU2V0LWNvb2tpZTogUFJPRFVDVElORk89d2VieHByZXNzOyBkb21haW49LmZpZGVsaXR5LmNvbTsgcGF0aD0vOyBzZWN1cmUKKyAgICBTZXQtY29va2llOiBQRVJTT05BTElaRT1ub25lO2V4cGlyZXM9TW9uZGF5LCAxMy1KdW4tMTk4OCAwMzowNDo1NSBHTVQ7CisgICAgZG9tYWluPS5maWRlbGl0eS5jb207IHBhdGg9L2Z0Z3c7IHNlY3VyZQorICAgIFNldC1jb29raWU6IEZpZEhpc3Q9bm9uZTtleHBpcmVzPU1vbmRheSwgMTMtSnVuLTE5ODggMDM6MDQ6NTUgR01UOworICAgIGRvbWFpbj0uZmlkZWxpdHkuY29tOyBwYXRoPS87IHNlY3VyZQorICAgIFNldC1jb29raWU6IEZpZE9yZGVyPW5vbmU7ZXhwaXJlcz1Nb25kYXksIDEzLUp1bi0xOTg4IDAzOjA0OjU1IEdNVDsKKyAgICBkb21haW49LmZpZGVsaXR5LmNvbTsgcGF0aD0vOyBzZWN1cmUKKyAgICBTZXQtY29va2llOiBEaXNQZW5kPW5vbmU7ZXhwaXJlcz1Nb25kYXksIDEzLUp1bi0xOTg4IDAzOjA0OjU1IEdNVDsKKyAgICBkb21haW49LmZpZGVsaXR5LmNvbTsgcGF0aD0vOyBzZWN1cmUKKyAgICBTZXQtY29va2llOiBGaWREaXM9bm9uZTtleHBpcmVzPU1vbmRheSwgMTMtSnVuLTE5ODggMDM6MDQ6NTUgR01UOworICAgIGRvbWFpbj0uZmlkZWxpdHkuY29tOyBwYXRoPS87IHNlY3VyZQorICAgIFNldC1jb29raWU6CisgICAgU2Vzc2lvbl9LZXlANjc5MWE5ZTAtOTAxYS0xMWQwLWExYzgtOWIwMTJjODhhYTc3PW5vbmU7ZXhwaXJlcz1Nb25kYXksCisgICAgMTMtSnVuLTE5ODggMDM6MDQ6NTUgR01UOyBkb21haW49LmZpZGVsaXR5LmNvbTsgcGF0aD0vOyBzZWN1cmUKKyoqKiovCisKKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NPT0tJRVMpCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRQorI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgImNvb2tpZS5oIgorI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic3RydG9rLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgInNoYXJlLmgiCisjaW5jbHVkZSAic3RydG9vZmZ0LmgiCisjaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAiY3VybF9tZW1yY2hyLmgiCisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0YXRpYyB2b2lkIGZyZWVjb29raWUoc3RydWN0IENvb2tpZSAqY28pCit7CisgIGlmKGNvLT5leHBpcmVzdHIpCisgICAgZnJlZShjby0+ZXhwaXJlc3RyKTsKKyAgaWYoY28tPmRvbWFpbikKKyAgICBmcmVlKGNvLT5kb21haW4pOworICBpZihjby0+cGF0aCkKKyAgICBmcmVlKGNvLT5wYXRoKTsKKyAgaWYoY28tPm5hbWUpCisgICAgZnJlZShjby0+bmFtZSk7CisgIGlmKGNvLT52YWx1ZSkKKyAgICBmcmVlKGNvLT52YWx1ZSk7CisgIGlmKGNvLT5tYXhhZ2UpCisgICAgZnJlZShjby0+bWF4YWdlKTsKKyAgaWYoY28tPnZlcnNpb24pCisgICAgZnJlZShjby0+dmVyc2lvbik7CisKKyAgZnJlZShjbyk7Cit9CisKK3N0YXRpYyBib29sIHRhaWxtYXRjaChjb25zdCBjaGFyICpsaXR0bGUsIGNvbnN0IGNoYXIgKmJpZ29uZSkKK3sKKyAgc2l6ZV90IGxpdHRsZWxlbiA9IHN0cmxlbihsaXR0bGUpOworICBzaXplX3QgYmlnbGVuID0gc3RybGVuKGJpZ29uZSk7CisKKyAgaWYobGl0dGxlbGVuID4gYmlnbGVuKQorICAgIHJldHVybiBGQUxTRTsKKworICByZXR1cm4gQ3VybF9yYXdfZXF1YWwobGl0dGxlLCBiaWdvbmUrYmlnbGVuLWxpdHRsZWxlbikgPyBUUlVFIDogRkFMU0U7Cit9CisKKy8qCisgKiBMb2FkIGNvb2tpZXMgZnJvbSBhbGwgZ2l2ZW4gY29va2llIGZpbGVzIChDVVJMT1BUX0NPT0tJRUZJTEUpLgorICovCit2b2lkIEN1cmxfY29va2llX2xvYWRmaWxlcyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKK3sKKyAgc3RydWN0IGN1cmxfc2xpc3QgKmxpc3QgPSBkYXRhLT5jaGFuZ2UuY29va2llbGlzdDsKKyAgaWYobGlzdCkgeworICAgIEN1cmxfc2hhcmVfbG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUsIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKTsKKyAgICB3aGlsZShsaXN0KSB7CisgICAgICBkYXRhLT5jb29raWVzID0gQ3VybF9jb29raWVfaW5pdChkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNvb2tpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuY29va2llc2Vzc2lvbik7CisgICAgICBsaXN0ID0gbGlzdC0+bmV4dDsKKyAgICB9CisgICAgY3VybF9zbGlzdF9mcmVlX2FsbChkYXRhLT5jaGFuZ2UuY29va2llbGlzdCk7IC8qIGNsZWFuIHVwIGxpc3QgKi8KKyAgICBkYXRhLT5jaGFuZ2UuY29va2llbGlzdCA9IE5VTEw7IC8qIGRvbid0IGRvIHRoaXMgYWdhaW4hICovCisgICAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFKTsKKyAgfQorfQorCisvKgorICogc3Ryc3RvcmUoKSBtYWtlcyBhIHN0cmR1cCgpIG9uIHRoZSAnbmV3c3RyJyBhbmQgaWYgJypzdHInIGlzIG5vbi1OVUxMCisgKiB0aGF0IHdpbGwgYmUgZnJlZWQgYmVmb3JlIHRoZSBhbGxvY2F0ZWQgc3RyaW5nIGlzIHN0b3JlZCB0aGVyZS4KKyAqCisgKiBJdCBpcyBtZWFudCB0byBlYXNpbHkgcmVwbGFjZSBzdHJkdXAoKQorICovCitzdGF0aWMgdm9pZCBzdHJzdG9yZShjaGFyICoqc3RyLCBjb25zdCBjaGFyICpuZXdzdHIpCit7CisgIGlmKCpzdHIpCisgICAgZnJlZSgqc3RyKTsKKyAgKnN0ciA9IHN0cmR1cChuZXdzdHIpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ3VybF9jb29raWVfYWRkKCkKKyAqCisgKiBBZGQgYSBzaW5nbGUgY29va2llIGxpbmUgdG8gdGhlIGNvb2tpZSBrZWVwaW5nIG9iamVjdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgQ29va2llICoKK0N1cmxfY29va2llX2FkZChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAvKiBUaGUgJ2RhdGEnIHBvaW50ZXIgaGVyZSBtYXkgYmUgTlVMTCBhdCB0aW1lcywgYW5kIHRodXMKKyAgICAgICAgICAgICAgICAgICBtdXN0IG9ubHkgYmUgdXNlZCB2ZXJ5IGNhcmVmdWxseSBmb3IgdGhpbmdzIHRoYXQgY2FuIGRlYWwKKyAgICAgICAgICAgICAgICAgICB3aXRoIGRhdGEgYmVpbmcgTlVMTC4gU3VjaCBhcyBpbmZvZigpIGFuZCBzaW1pbGFyICovCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgQ29va2llSW5mbyAqYywKKyAgICAgICAgICAgICAgICBib29sIGh0dHBoZWFkZXIsIC8qIFRSVUUgaWYgSFRUUCBoZWFkZXItc3R5bGUgbGluZSAqLworICAgICAgICAgICAgICAgIGNoYXIgKmxpbmVwdHIsICAgLyogZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBsaW5lICovCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCAvKiBkZWZhdWx0IGRvbWFpbiAqLworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgpICAgLyogZnVsbCBwYXRoIHVzZWQgd2hlbiB0aGlzIGNvb2tpZSBpcyBzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGdldCBkZWZhdWx0IHBhdGggZm9yIHRoZSBjb29raWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubGVzcyBzZXQgKi8KK3sKKyAgc3RydWN0IENvb2tpZSAqY2xpc3Q7CisgIGNoYXIgbmFtZVtNQVhfTkFNRV07CisgIHN0cnVjdCBDb29raWUgKmNvOworICBzdHJ1Y3QgQ29va2llICpsYXN0Yz1OVUxMOworICB0aW1lX3Qgbm93ID0gdGltZShOVUxMKTsKKyAgYm9vbCByZXBsYWNlX29sZCA9IEZBTFNFOworICBib29sIGJhZGNvb2tpZSA9IEZBTFNFOyAvKiBjb29raWVzIGFyZSBnb29kIGJ5IGRlZmF1bHQuIG1tbW1tIHl1bW15ICovCisKKyNpZmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCisgICh2b2lkKWRhdGE7CisjZW5kaWYKKworICAvKiBGaXJzdCwgYWxsb2MgYW5kIGluaXQgYSBuZXcgc3RydWN0IGZvciBpdCAqLworICBjbyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IENvb2tpZSkpOworICBpZighY28pCisgICAgcmV0dXJuIE5VTEw7IC8qIGJhaWwgb3V0IGlmIHdlJ3JlIHRoaXMgbG93IG9uIG1lbW9yeSAqLworCisgIGlmKGh0dHBoZWFkZXIpIHsKKyAgICAvKiBUaGlzIGxpbmUgd2FzIHJlYWQgb2ZmIGEgSFRUUC1oZWFkZXIgKi8KKyAgICBjb25zdCBjaGFyICpwdHI7CisgICAgY29uc3QgY2hhciAqc2VtaXB0cjsKKyAgICBjaGFyICp3aGF0OworCisgICAgd2hhdCA9IG1hbGxvYyhNQVhfQ09PS0lFX0xJTkUpOworICAgIGlmKCF3aGF0KSB7CisgICAgICBmcmVlKGNvKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbWlwdHI9c3RyY2hyKGxpbmVwdHIsICc7Jyk7IC8qIGZpcnN0LCBmaW5kIGEgc2VtaWNvbG9uICovCisKKyAgICB3aGlsZSgqbGluZXB0ciAmJiBJU0JMQU5LKCpsaW5lcHRyKSkKKyAgICAgIGxpbmVwdHIrKzsKKworICAgIHB0ciA9IGxpbmVwdHI7CisgICAgZG8geworICAgICAgLyogd2UgaGF2ZSBhIDx3aGF0Pj08dGhpcz4gcGFpciBvciBhIHN0YW5kLWFsb25lIHdvcmQgaGVyZSAqLworICAgICAgbmFtZVswXT13aGF0WzBdPTA7IC8qIGluaXQgdGhlIGJ1ZmZlcnMgKi8KKyAgICAgIGlmKDEgPD0gc3NjYW5mKHB0ciwgIiUiIE1BWF9OQU1FX1RYVCAiW147XHJcbiA9XT0lIgorICAgICAgICAgICAgICAgICAgICAgTUFYX0NPT0tJRV9MSU5FX1RYVCAiW147XHJcbl0iLAorICAgICAgICAgICAgICAgICAgICAgbmFtZSwgd2hhdCkpIHsKKyAgICAgICAgLyogVXNlIHN0cnN0b3JlKCkgYmVsb3cgdG8gcHJvcGVybHkgZGVhbCB3aXRoIHJlY2VpdmVkIGNvb2tpZQorICAgICAgICAgICBoZWFkZXJzIHRoYXQgaGF2ZSB0aGUgc2FtZSBzdHJpbmcgcHJvcGVydHkgc2V0IG1vcmUgdGhhbiBvbmNlLAorICAgICAgICAgICBhbmQgdGhlbiB3ZSB1c2UgdGhlIGxhc3Qgb25lLiAqLworICAgICAgICBjb25zdCBjaGFyICp3aGF0cHRyOworICAgICAgICBib29sIGRvbmUgPSBGQUxTRTsKKyAgICAgICAgYm9vbCBzZXA7CisgICAgICAgIHNpemVfdCBsZW49c3RybGVuKHdoYXQpOworICAgICAgICBjb25zdCBjaGFyICplbmRvZm4gPSAmcHRyWyBzdHJsZW4obmFtZSkgXTsKKworICAgICAgICAvKiBza2lwIHRyYWlsaW5nIHNwYWNlcyBpbiBuYW1lICovCisgICAgICAgIHdoaWxlKCplbmRvZm4gJiYgSVNCTEFOSygqZW5kb2ZuKSkKKyAgICAgICAgICBlbmRvZm4rKzsKKworICAgICAgICAvKiBuYW1lIGVuZHMgd2l0aCBhICc9JyA/ICovCisgICAgICAgIHNlcCA9ICgqZW5kb2ZuID09ICc9Jyk/VFJVRTpGQUxTRTsKKworICAgICAgICAvKiBTdHJpcCBvZmYgdHJhaWxpbmcgd2hpdGVzcGFjZSBmcm9tIHRoZSAnd2hhdCcgKi8KKyAgICAgICAgd2hpbGUobGVuICYmIElTQkxBTksod2hhdFtsZW4tMV0pKSB7CisgICAgICAgICAgd2hhdFtsZW4tMV09MDsKKyAgICAgICAgICBsZW4tLTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlIGZyb20gdGhlICd3aGF0JyAqLworICAgICAgICB3aGF0cHRyPXdoYXQ7CisgICAgICAgIHdoaWxlKCp3aGF0cHRyICYmIElTQkxBTksoKndoYXRwdHIpKQorICAgICAgICAgIHdoYXRwdHIrKzsKKworICAgICAgICBpZighbGVuKSB7CisgICAgICAgICAgLyogdGhpcyB3YXMgYSAiPG5hbWU+PSIgd2l0aCBubyBjb250ZW50LCBhbmQgd2UgbXVzdCBhbGxvdworICAgICAgICAgICAgICdzZWN1cmUnIGFuZCAnaHR0cG9ubHknIHNwZWNpZmllZCB0aGlzIHdlaXJkbHkgKi8KKyAgICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgICBpZihDdXJsX3Jhd19lcXVhbCgic2VjdXJlIiwgbmFtZSkpCisgICAgICAgICAgICBjby0+c2VjdXJlID0gVFJVRTsKKyAgICAgICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKCJodHRwb25seSIsIG5hbWUpKQorICAgICAgICAgICAgY28tPmh0dHBvbmx5ID0gVFJVRTsKKyAgICAgICAgICBlbHNlIGlmKHNlcCkKKyAgICAgICAgICAgIC8qIHRoZXJlIHdhcyBhICc9JyBzbyB3ZSdyZSBub3QgZG9uZSBwYXJzaW5nIHRoaXMgZmllbGQgKi8KKyAgICAgICAgICAgIGRvbmUgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZihkb25lKQorICAgICAgICAgIDsKKyAgICAgICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbCgicGF0aCIsIG5hbWUpKSB7CisgICAgICAgICAgc3Ryc3RvcmUoJmNvLT5wYXRoLCB3aGF0cHRyKTsKKyAgICAgICAgICBpZighY28tPnBhdGgpIHsKKyAgICAgICAgICAgIGJhZGNvb2tpZSA9IFRSVUU7IC8qIG91dCBvZiBtZW1vcnkgYmFkICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbCgiZG9tYWluIiwgbmFtZSkpIHsKKyAgICAgICAgICAvKiBub3RlIHRoYXQgdGhpcyBuYW1lIG1heSBvciBtYXkgbm90IGhhdmUgYSBwcmVjZWRpbmcgZG90LCBidXQKKyAgICAgICAgICAgICB3ZSBkb24ndCBjYXJlIGFib3V0IHRoYXQsIHdlIHRyZWF0IHRoZSBuYW1lcyB0aGUgc2FtZSBhbnl3YXkgKi8KKworICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbXB0cj13aGF0cHRyOworICAgICAgICAgIGNvbnN0IGNoYXIgKm5leHRwdHI7CisgICAgICAgICAgaW50IGRvdGNvdW50PTE7CisKKyAgICAgICAgICAvKiBDb3VudCB0aGUgZG90cywgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmUgZW5vdWdoCisgICAgICAgICAgICAgb2YgdGhlbS4gKi8KKworICAgICAgICAgIGlmKCcuJyA9PSB3aGF0cHRyWzBdKQorICAgICAgICAgICAgLyogZG9uJ3QgY291bnQgdGhlIGluaXRpYWwgZG90LCBhc3N1bWUgaXQgKi8KKyAgICAgICAgICAgIGRvbXB0cisrOworCisgICAgICAgICAgZG8geworICAgICAgICAgICAgbmV4dHB0ciA9IHN0cmNocihkb21wdHIsICcuJyk7CisgICAgICAgICAgICBpZihuZXh0cHRyKSB7CisgICAgICAgICAgICAgIGlmKGRvbXB0ciAhPSBuZXh0cHRyKQorICAgICAgICAgICAgICAgIGRvdGNvdW50Kys7CisgICAgICAgICAgICAgIGRvbXB0ciA9IG5leHRwdHIrMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IHdoaWxlKG5leHRwdHIpOworCisgICAgICAgICAgLyogVGhlIG9yaWdpbmFsIE5ldHNjYXBlIGNvb2tpZSBzcGVjIGRlZmluZWQgdGhhdCB0aGlzIGRvbWFpbiBuYW1lCisgICAgICAgICAgICAgTVVTVCBoYXZlIHRocmVlIGRvdHMgKG9yIHR3byBpZiBvbmUgb2YgdGhlIHNldmVuIGhvbHkgVExEcyksCisgICAgICAgICAgICAgYnV0IGl0IHNlZW1zIHRoYXQgdGhlc2Uga2luZHMgb2YgY29va2llcyBhcmUgaW4gdXNlICJvdXQgdGhlcmUiCisgICAgICAgICAgICAgc28gd2UgY2Fubm90IGJlIHRoYXQgc3RyaWN0LiBJJ3ZlIHRoZXJlZm9yZSBsb3dlcmVkIHRoZSBjaGVjaworICAgICAgICAgICAgIHRvIG5vdCBhbGxvdyBsZXNzIHRoYW4gdHdvIGRvdHMuICovCisKKyAgICAgICAgICBpZihkb3Rjb3VudCA8IDIpIHsKKyAgICAgICAgICAgIC8qIFJlY2VpdmVkIGFuZCBza2lwcGVkIGEgY29va2llIHdpdGggYSBkb21haW4gdXNpbmcgdG9vIGZldworICAgICAgICAgICAgICAgZG90cy4gKi8KKyAgICAgICAgICAgIGJhZGNvb2tpZT1UUlVFOyAvKiBtYXJrIHRoaXMgYXMgYSBiYWQgY29va2llICovCisgICAgICAgICAgICBpbmZvZihkYXRhLCAic2tpcHBlZCBjb29raWUgd2l0aCBpbGxlZ2FsIGRvdGNvdW50IGRvbWFpbjogJXNcbiIsCisgICAgICAgICAgICAgICAgICB3aGF0cHRyKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBOb3csIHdlIG1ha2Ugc3VyZSB0aGF0IG91ciBob3N0IGlzIHdpdGhpbiB0aGUgZ2l2ZW4gZG9tYWluLAorICAgICAgICAgICAgICAgb3IgdGhlIGdpdmVuIGRvbWFpbiBpcyBub3QgdmFsaWQgYW5kIHRodXMgY2Fubm90IGJlIHNldC4gKi8KKworICAgICAgICAgICAgaWYoJy4nID09IHdoYXRwdHJbMF0pCisgICAgICAgICAgICAgIHdoYXRwdHIrKzsgLyogaWdub3JlIHByZWNlZGluZyBkb3QgKi8KKworICAgICAgICAgICAgaWYoIWRvbWFpbiB8fCB0YWlsbWF0Y2god2hhdHB0ciwgZG9tYWluKSkgeworICAgICAgICAgICAgICBjb25zdCBjaGFyICp0YWlscHRyPXdoYXRwdHI7CisgICAgICAgICAgICAgIGlmKHRhaWxwdHJbMF0gPT0gJy4nKQorICAgICAgICAgICAgICAgIHRhaWxwdHIrKzsKKyAgICAgICAgICAgICAgc3Ryc3RvcmUoJmNvLT5kb21haW4sIHRhaWxwdHIpOyAvKiBkb24ndCBwcmVmaXggdy9kb3RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxseSAqLworICAgICAgICAgICAgICBpZighY28tPmRvbWFpbikgeworICAgICAgICAgICAgICAgIGJhZGNvb2tpZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgY28tPnRhaWxtYXRjaD1UUlVFOyAvKiB3ZSBhbHdheXMgZG8gdGhhdCBpZiB0aGUgZG9tYWluIG5hbWUgd2FzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAvKiB3ZSBkaWQgbm90IGdldCBhIHRhaWxtYXRjaCBhbmQgdGhlbiB0aGUgYXR0ZW1wdGVkIHNldCBkb21haW4KKyAgICAgICAgICAgICAgICAgaXMgbm90IGEgZG9tYWluIHRvIHdoaWNoIHRoZSBjdXJyZW50IGhvc3QgYmVsb25ncy4gTWFyayBhcworICAgICAgICAgICAgICAgICBiYWQuICovCisgICAgICAgICAgICAgIGJhZGNvb2tpZT1UUlVFOworICAgICAgICAgICAgICBpbmZvZihkYXRhLCAic2tpcHBlZCBjb29raWUgd2l0aCBiYWQgdGFpbG1hdGNoIGRvbWFpbjogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHdoYXRwdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKCJ2ZXJzaW9uIiwgbmFtZSkpIHsKKyAgICAgICAgICBzdHJzdG9yZSgmY28tPnZlcnNpb24sIHdoYXRwdHIpOworICAgICAgICAgIGlmKCFjby0+dmVyc2lvbikgeworICAgICAgICAgICAgYmFkY29va2llID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKCJtYXgtYWdlIiwgbmFtZSkpIHsKKyAgICAgICAgICAvKiBEZWZpbmVkIGluIFJGQzIxMDk6CisKKyAgICAgICAgICAgICBPcHRpb25hbC4gIFRoZSBNYXgtQWdlIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBsaWZldGltZSBvZiB0aGUKKyAgICAgICAgICAgICBjb29raWUsIGluIHNlY29uZHMuICBUaGUgZGVsdGEtc2Vjb25kcyB2YWx1ZSBpcyBhIGRlY2ltYWwgbm9uLQorICAgICAgICAgICAgIG5lZ2F0aXZlIGludGVnZXIuICBBZnRlciBkZWx0YS1zZWNvbmRzIHNlY29uZHMgZWxhcHNlLCB0aGUKKyAgICAgICAgICAgICBjbGllbnQgc2hvdWxkIGRpc2NhcmQgdGhlIGNvb2tpZS4gIEEgdmFsdWUgb2YgemVybyBtZWFucyB0aGUKKyAgICAgICAgICAgICBjb29raWUgc2hvdWxkIGJlIGRpc2NhcmRlZCBpbW1lZGlhdGVseS4KKworICAgICAgICAgICovCisgICAgICAgICAgc3Ryc3RvcmUoJmNvLT5tYXhhZ2UsIHdoYXRwdHIpOworICAgICAgICAgIGlmKCFjby0+bWF4YWdlKSB7CisgICAgICAgICAgICBiYWRjb29raWUgPSBUUlVFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGNvLT5leHBpcmVzID0KKyAgICAgICAgICAgIHN0cnRvbCgoKmNvLT5tYXhhZ2U9PSdcIicpPyZjby0+bWF4YWdlWzFdOiZjby0+bWF4YWdlWzBdLE5VTEwsMTApCisgICAgICAgICAgICArIChsb25nKW5vdzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKCJleHBpcmVzIiwgbmFtZSkpIHsKKyAgICAgICAgICBzdHJzdG9yZSgmY28tPmV4cGlyZXN0ciwgd2hhdHB0cik7CisgICAgICAgICAgaWYoIWNvLT5leHBpcmVzdHIpIHsKKyAgICAgICAgICAgIGJhZGNvb2tpZSA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogTm90ZSB0aGF0IGlmIHRoZSBkYXRlIGNvdWxkbid0IGdldCBwYXJzZWQgZm9yIHdoYXRldmVyIHJlYXNvbiwKKyAgICAgICAgICAgICB0aGUgY29va2llIHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNlc3Npb24gY29va2llICovCisgICAgICAgICAgY28tPmV4cGlyZXMgPSBjdXJsX2dldGRhdGUod2hhdCwgJm5vdyk7CisKKyAgICAgICAgICAvKiBTZXNzaW9uIGNvb2tpZXMgaGF2ZSBleHBpcmVzIHNldCB0byAwIHNvIGlmIHdlIGdldCB0aGF0IGJhY2sKKyAgICAgICAgICAgICBmcm9tIHRoZSBkYXRlIHBhcnNlciBsZXQncyBhZGQgYSBzZWNvbmQgdG8gbWFrZSBpdCBhCisgICAgICAgICAgICAgbm9uLXNlc3Npb24gY29va2llICovCisgICAgICAgICAgaWYoY28tPmV4cGlyZXMgPT0gMCkKKyAgICAgICAgICAgIGNvLT5leHBpcmVzID0gMTsKKyAgICAgICAgICBlbHNlIGlmKGNvLT5leHBpcmVzIDwgMCkKKyAgICAgICAgICAgIGNvLT5leHBpcmVzID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCFjby0+bmFtZSkgeworICAgICAgICAgIGNvLT5uYW1lID0gc3RyZHVwKG5hbWUpOworICAgICAgICAgIGNvLT52YWx1ZSA9IHN0cmR1cCh3aGF0cHRyKTsKKyAgICAgICAgICBpZighY28tPm5hbWUgfHwgIWNvLT52YWx1ZSkgeworICAgICAgICAgICAgYmFkY29va2llID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKgorICAgICAgICAgIGVsc2UgdGhpcyBpcyB0aGUgc2Vjb25kIChvciBtb3JlKSBuYW1lIHdlIGRvbid0IGtub3cKKyAgICAgICAgICBhYm91dCEgKi8KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiB0aGlzIGlzIGFuICJpbGxlZ2FsIiA8d2hhdD49PHRoaXM+IHBhaXIgKi8KKyAgICAgIH0KKworICAgICAgaWYoIXNlbWlwdHIgfHwgISpzZW1pcHRyKSB7CisgICAgICAgIC8qIHdlIGFscmVhZHkga25vdyB0aGVyZSBhcmUgbm8gbW9yZSBjb29raWVzICovCisgICAgICAgIHNlbWlwdHIgPSBOVUxMOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgcHRyPXNlbWlwdHIrMTsKKyAgICAgIHdoaWxlKCpwdHIgJiYgSVNCTEFOSygqcHRyKSkKKyAgICAgICAgcHRyKys7CisgICAgICBzZW1pcHRyPXN0cmNocihwdHIsICc7Jyk7IC8qIG5vdywgZmluZCB0aGUgbmV4dCBzZW1pY29sb24gKi8KKworICAgICAgaWYoIXNlbWlwdHIgJiYgKnB0cikKKyAgICAgICAgLyogVGhlcmUgYXJlIG5vIG1vcmUgc2VtaWNvbG9ucywgYnV0IHRoZXJlJ3MgYSBmaW5hbCBuYW1lPXZhbHVlIHBhaXIKKyAgICAgICAgICAgY29taW5nIHVwICovCisgICAgICAgIHNlbWlwdHI9c3RyY2hyKHB0ciwgJ1wwJyk7CisgICAgfSB3aGlsZShzZW1pcHRyKTsKKworICAgIGlmKCFiYWRjb29raWUgJiYgIWNvLT5kb21haW4pIHsKKyAgICAgIGlmKGRvbWFpbikgeworICAgICAgICAvKiBubyBkb21haW4gd2FzIGdpdmVuIGluIHRoZSBoZWFkZXIgbGluZSwgc2V0IHRoZSBkZWZhdWx0ICovCisgICAgICAgIGNvLT5kb21haW49c3RyZHVwKGRvbWFpbik7CisgICAgICAgIGlmKCFjby0+ZG9tYWluKQorICAgICAgICAgIGJhZGNvb2tpZSA9IFRSVUU7CisgICAgICB9CisgICAgfQorCisgICAgaWYoIWJhZGNvb2tpZSAmJiAhY28tPnBhdGggJiYgcGF0aCkgeworICAgICAgLyogTm8gcGF0aCB3YXMgZ2l2ZW4gaW4gdGhlIGhlYWRlciBsaW5lLCBzZXQgdGhlIGRlZmF1bHQuCisgICAgICAgICBOb3RlIHRoYXQgdGhlIHBhc3NlZC1pbiBwYXRoIHRvIHRoaXMgZnVuY3Rpb24gTUFZIGhhdmUgYSAnPycgYW5kCisgICAgICAgICBmb2xsb3dpbmcgcGFydCB0aGF0IE1VU1Qgbm90IGJlIHN0b3JlZCBhcyBwYXJ0IG9mIHRoZSBwYXRoLiAqLworICAgICAgY2hhciAqcXVlcnlwID0gc3RyY2hyKHBhdGgsICc/Jyk7CisKKyAgICAgIC8qIHF1ZXJ5cCBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgcGFydCBvZiB0aGUgcGF0aCBlbmRzLCBzbyBub3cgd2UKKyAgICAgICAgIHdhbnQgdG8gdGhlIGZpbmQgdGhlIGxhc3QgKi8KKyAgICAgIGNoYXIgKmVuZHNsYXNoOworICAgICAgaWYoIXF1ZXJ5cCkKKyAgICAgICAgZW5kc2xhc2ggPSBzdHJyY2hyKHBhdGgsICcvJyk7CisgICAgICBlbHNlCisgICAgICAgIGVuZHNsYXNoID0gbWVtcmNocihwYXRoLCAnLycsIChzaXplX3QpKHF1ZXJ5cCAtIHBhdGgpKTsKKyAgICAgIGlmKGVuZHNsYXNoKSB7CisgICAgICAgIHNpemVfdCBwYXRobGVuID0gKHNpemVfdCkoZW5kc2xhc2gtcGF0aCsxKTsgLyogaW5jbHVkZSBlbmRpbmcgc2xhc2ggKi8KKyAgICAgICAgY28tPnBhdGg9bWFsbG9jKHBhdGhsZW4rMSk7IC8qIG9uZSBleHRyYSBmb3IgdGhlIHplcm8gYnl0ZSAqLworICAgICAgICBpZihjby0+cGF0aCkgeworICAgICAgICAgIG1lbWNweShjby0+cGF0aCwgcGF0aCwgcGF0aGxlbik7CisgICAgICAgICAgY28tPnBhdGhbcGF0aGxlbl09MDsgLyogemVybyB0ZXJtaW5hdGUgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgYmFkY29va2llID0gVFJVRTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmcmVlKHdoYXQpOworCisgICAgaWYoYmFkY29va2llIHx8ICFjby0+bmFtZSkgeworICAgICAgLyogd2UgZGlkbid0IGdldCBhIGNvb2tpZSBuYW1lIG9yIGEgYmFkIG9uZSwKKyAgICAgICAgIHRoaXMgaXMgYW4gaWxsZWdhbCBsaW5lLCBiYWlsIG91dCAqLworICAgICAgZnJlZWNvb2tpZShjbyk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGlzIGxpbmUgaXMgTk9UIGEgSFRUUCBoZWFkZXIgc3R5bGUgbGluZSwgd2UgZG8gb2ZmZXIgc3VwcG9ydCBmb3IKKyAgICAgICByZWFkaW5nIHRoZSBvZGQgbmV0c2NhcGUgY29va2llcy1maWxlIGZvcm1hdCBoZXJlICovCisgICAgY2hhciAqcHRyOworICAgIGNoYXIgKmZpcnN0cHRyOworICAgIGNoYXIgKnRva19idWY9TlVMTDsKKyAgICBpbnQgZmllbGRzOworCisgICAgLyogSUUgaW50cm9kdWNlZCBIVFRQLW9ubHkgY29va2llcyB0byBwcmV2ZW50IFhTUyBhdHRhY2tzLiBDb29raWVzCisgICAgICAgbWFya2VkIHdpdGggaHR0cE9ubHkgYWZ0ZXIgdGhlIGRvbWFpbiBuYW1lIGFyZSBub3QgYWNjZXNzaWJsZQorICAgICAgIGZyb20gamF2YXNjcmlwdHMsIGJ1dCBzaW5jZSBjdXJsIGRvZXMgbm90IG9wZXJhdGUgYXQgamF2YXNjcmlwdAorICAgICAgIGxldmVsLCB3ZSBpbmNsdWRlIHRoZW0gYW55d2F5LiBJbiBGaXJlZm94J3MgY29va2llIGZpbGVzLCB0aGVzZQorICAgICAgIGxpbmVzIGFyZSBwcmVjZWRlZCB3aXRoICNIdHRwT25seV8gYW5kIHRoZW4gZXZlcnl0aGluZyBpcworICAgICAgIGFzIHVzdWFsLCBzbyB3ZSBza2lwIDEwIGNoYXJhY3RlcnMgb2YgdGhlIGxpbmUuLgorICAgICovCisgICAgaWYoc3RybmNtcChsaW5lcHRyLCAiI0h0dHBPbmx5XyIsIDEwKSA9PSAwKSB7CisgICAgICBsaW5lcHRyICs9IDEwOworICAgICAgY28tPmh0dHBvbmx5ID0gVFJVRTsKKyAgICB9CisKKyAgICBpZihsaW5lcHRyWzBdPT0nIycpIHsKKyAgICAgIC8qIGRvbid0IGV2ZW4gdHJ5IHRoZSBjb21tZW50cyAqLworICAgICAgZnJlZShjbyk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgLyogc3RyaXAgb2ZmIHRoZSBwb3NzaWJsZSBlbmQtb2YtbGluZSBjaGFyYWN0ZXJzICovCisgICAgcHRyPXN0cmNocihsaW5lcHRyLCAnXHInKTsKKyAgICBpZihwdHIpCisgICAgICAqcHRyPTA7IC8qIGNsZWFyIGl0ICovCisgICAgcHRyPXN0cmNocihsaW5lcHRyLCAnXG4nKTsKKyAgICBpZihwdHIpCisgICAgICAqcHRyPTA7IC8qIGNsZWFyIGl0ICovCisKKyAgICBmaXJzdHB0cj1zdHJ0b2tfcihsaW5lcHRyLCAiXHQiLCAmdG9rX2J1Zik7IC8qIHRva2VuaXplIGl0IG9uIHRoZSBUQUIgKi8KKworICAgIC8qIEhlcmUncyBhIHF1aWNrIGNoZWNrIHRvIGVsaW1pbmF0ZSBub3JtYWwgSFRUUC1oZWFkZXJzIGZyb20gdGhpcyAqLworICAgIGlmKCFmaXJzdHB0ciB8fCBzdHJjaHIoZmlyc3RwdHIsICc6JykpIHsKKyAgICAgIGZyZWUoY28pOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogTm93IGxvb3AgdGhyb3VnaCB0aGUgZmllbGRzIGFuZCBpbml0IHRoZSBzdHJ1Y3Qgd2UgYWxyZWFkeSBoYXZlCisgICAgICAgYWxsb2NhdGVkICovCisgICAgZm9yKHB0cj1maXJzdHB0ciwgZmllbGRzPTA7IHB0ciAmJiAhYmFkY29va2llOworICAgICAgICBwdHI9c3RydG9rX3IoTlVMTCwgIlx0IiwgJnRva19idWYpLCBmaWVsZHMrKykgeworICAgICAgc3dpdGNoKGZpZWxkcykgeworICAgICAgY2FzZSAwOgorICAgICAgICBpZihwdHJbMF09PScuJykgLyogc2tpcCBwcmVjZWRpbmcgZG90cyAqLworICAgICAgICAgIHB0cisrOworICAgICAgICBjby0+ZG9tYWluID0gc3RyZHVwKHB0cik7CisgICAgICAgIGlmKCFjby0+ZG9tYWluKQorICAgICAgICAgIGJhZGNvb2tpZSA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxOgorICAgICAgICAvKiBUaGlzIGZpZWxkIGdvdCBpdHMgZXhwbGFuYXRpb24gb24gdGhlIDIzcmQgb2YgTWF5IDIwMDEgYnkKKyAgICAgICAgICAgQW5kculzIEdhcmPtYToKKworICAgICAgICAgICBmbGFnOiBBIFRSVUUvRkFMU0UgdmFsdWUgaW5kaWNhdGluZyBpZiBhbGwgbWFjaGluZXMgd2l0aGluIGEgZ2l2ZW4KKyAgICAgICAgICAgZG9tYWluIGNhbiBhY2Nlc3MgdGhlIHZhcmlhYmxlLiBUaGlzIHZhbHVlIGlzIHNldCBhdXRvbWF0aWNhbGx5IGJ5CisgICAgICAgICAgIHRoZSBicm93c2VyLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIHlvdSBzZXQgZm9yIHRoZSBkb21haW4uCisKKyAgICAgICAgICAgQXMgZmFyIGFzIEkgY2FuIHNlZSwgaXQgaXMgc2V0IHRvIHRydWUgd2hlbiB0aGUgY29va2llIHNheXMKKyAgICAgICAgICAgLmRvbWFpbi5jb20gYW5kIHRvIGZhbHNlIHdoZW4gdGhlIGRvbWFpbiBpcyBjb21wbGV0ZSB3d3cuZG9tYWluLmNvbQorICAgICAgICAqLworICAgICAgICBjby0+dGFpbG1hdGNoID0gQ3VybF9yYXdfZXF1YWwocHRyLCAiVFJVRSIpP1RSVUU6RkFMU0U7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAyOgorICAgICAgICAvKiBJdCB0dXJucyBvdXQsIHRoYXQgc29tZXRpbWVzIHRoZSBmaWxlIGZvcm1hdCBhbGxvd3MgdGhlIHBhdGgKKyAgICAgICAgICAgZmllbGQgdG8gcmVtYWluIG5vdCBmaWxsZWQgaW4sIHdlIHRyeSB0byBkZXRlY3QgdGhpcyBhbmQgd29yaworICAgICAgICAgICBhcm91bmQgaXQhIEFuZHLpcyBHYXJj7WEgbWFkZSB1cyBhd2FyZSBvZiB0aGlzLi4uICovCisgICAgICAgIGlmKHN0cmNtcCgiVFJVRSIsIHB0cikgJiYgc3RyY21wKCJGQUxTRSIsIHB0cikpIHsKKyAgICAgICAgICAvKiBvbmx5IGlmIHRoZSBwYXRoIGRvZXNuJ3QgbG9vayBsaWtlIGEgYm9vbGVhbiBvcHRpb24hICovCisgICAgICAgICAgY28tPnBhdGggPSBzdHJkdXAocHRyKTsKKyAgICAgICAgICBpZighY28tPnBhdGgpCisgICAgICAgICAgICBiYWRjb29raWUgPSBUUlVFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8qIHRoaXMgZG9lc24ndCBsb29rIGxpa2UgYSBwYXRoLCBtYWtlIG9uZSB1cCEgKi8KKyAgICAgICAgY28tPnBhdGggPSBzdHJkdXAoIi8iKTsKKyAgICAgICAgaWYoIWNvLT5wYXRoKQorICAgICAgICAgIGJhZGNvb2tpZSA9IFRSVUU7CisgICAgICAgIGZpZWxkcysrOyAvKiBhZGQgYSBmaWVsZCBhbmQgZmFsbCBkb3duIHRvIHNlY3VyZSAqLworICAgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgICAgY2FzZSAzOgorICAgICAgICBjby0+c2VjdXJlID0gQ3VybF9yYXdfZXF1YWwocHRyLCAiVFJVRSIpP1RSVUU6RkFMU0U7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSA0OgorICAgICAgICBjby0+ZXhwaXJlcyA9IGN1cmx4X3N0cnRvb2ZmdChwdHIsIE5VTEwsIDEwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDU6CisgICAgICAgIGNvLT5uYW1lID0gc3RyZHVwKHB0cik7CisgICAgICAgIGlmKCFjby0+bmFtZSkKKyAgICAgICAgICBiYWRjb29raWUgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgNjoKKyAgICAgICAgY28tPnZhbHVlID0gc3RyZHVwKHB0cik7CisgICAgICAgIGlmKCFjby0+dmFsdWUpCisgICAgICAgICAgYmFkY29va2llID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGlmKDYgPT0gZmllbGRzKSB7CisgICAgICAvKiB3ZSBnb3QgYSBjb29raWUgd2l0aCBibGFuayBjb250ZW50cywgZml4IGl0ICovCisgICAgICBjby0+dmFsdWUgPSBzdHJkdXAoIiIpOworICAgICAgaWYoIWNvLT52YWx1ZSkKKyAgICAgICAgYmFkY29va2llID0gVFJVRTsKKyAgICAgIGVsc2UKKyAgICAgICAgZmllbGRzKys7CisgICAgfQorCisgICAgaWYoIWJhZGNvb2tpZSAmJiAoNyAhPSBmaWVsZHMpKQorICAgICAgLyogd2UgZGlkIG5vdCBmaW5kIHRoZSBzdWZmaWNpZW50IG51bWJlciBvZiBmaWVsZHMgKi8KKyAgICAgIGJhZGNvb2tpZSA9IFRSVUU7CisKKyAgICBpZihiYWRjb29raWUpIHsKKyAgICAgIGZyZWVjb29raWUoY28pOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIH0KKworICBpZighYy0+cnVubmluZyAmJiAgICAvKiByZWFkIGZyb20gYSBmaWxlICovCisgICAgIGMtPm5ld3Nlc3Npb24gJiYgIC8qIGNsZWFuIHNlc3Npb24gY29va2llcyAqLworICAgICAhY28tPmV4cGlyZXMpIHsgICAvKiB0aGlzIGlzIGEgc2Vzc2lvbiBjb29raWUgc2luY2UgaXQgZG9lc24ndCBleHBpcmUhICovCisgICAgZnJlZWNvb2tpZShjbyk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBjby0+bGl2ZWNvb2tpZSA9IGMtPnJ1bm5pbmc7CisKKyAgLyogbm93LCB3ZSBoYXZlIHBhcnNlZCB0aGUgaW5jb21pbmcgbGluZSwgd2UgbXVzdCBub3cgY2hlY2sgaWYgdGhpcworICAgICBzdXBlcmNlZWRzIGFuIGFscmVhZHkgZXhpc3RpbmcgY29va2llLCB3aGljaCBpdCBtYXkgaWYgdGhlIHByZXZpb3VzIGhhdmUKKyAgICAgdGhlIHNhbWUgZG9tYWluIGFuZCBwYXRoIGFzIHRoaXMgKi8KKworICBjbGlzdCA9IGMtPmNvb2tpZXM7CisgIHJlcGxhY2Vfb2xkID0gRkFMU0U7CisgIHdoaWxlKGNsaXN0KSB7CisgICAgaWYoQ3VybF9yYXdfZXF1YWwoY2xpc3QtPm5hbWUsIGNvLT5uYW1lKSkgeworICAgICAgLyogdGhlIG5hbWVzIGFyZSBpZGVudGljYWwgKi8KKworICAgICAgaWYoY2xpc3QtPmRvbWFpbiAmJiBjby0+ZG9tYWluKSB7CisgICAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKGNsaXN0LT5kb21haW4sIGNvLT5kb21haW4pKQorICAgICAgICAgIC8qIFRoZSBkb21haW5zIGFyZSBpZGVudGljYWwgKi8KKyAgICAgICAgICByZXBsYWNlX29sZD1UUlVFOworICAgICAgfQorICAgICAgZWxzZSBpZighY2xpc3QtPmRvbWFpbiAmJiAhY28tPmRvbWFpbikKKyAgICAgICAgcmVwbGFjZV9vbGQgPSBUUlVFOworCisgICAgICBpZihyZXBsYWNlX29sZCkgeworICAgICAgICAvKiB0aGUgZG9tYWlucyB3ZXJlIGlkZW50aWNhbCAqLworCisgICAgICAgIGlmKGNsaXN0LT5wYXRoICYmIGNvLT5wYXRoKSB7CisgICAgICAgICAgaWYoQ3VybF9yYXdfZXF1YWwoY2xpc3QtPnBhdGgsIGNvLT5wYXRoKSkgeworICAgICAgICAgICAgcmVwbGFjZV9vbGQgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBsYWNlX29sZCA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIWNsaXN0LT5wYXRoICYmICFjby0+cGF0aCkKKyAgICAgICAgICByZXBsYWNlX29sZCA9IFRSVUU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXBsYWNlX29sZCA9IEZBTFNFOworCisgICAgICB9CisKKyAgICAgIGlmKHJlcGxhY2Vfb2xkICYmICFjby0+bGl2ZWNvb2tpZSAmJiBjbGlzdC0+bGl2ZWNvb2tpZSkgeworICAgICAgICAvKiBCb3RoIGNvb2tpZXMgbWF0Y2hlZCBmaW5lLCBleGNlcHQgdGhhdCB0aGUgYWxyZWFkeSBwcmVzZW50CisgICAgICAgICAgIGNvb2tpZSBpcyAibGl2ZSIsIHdoaWNoIG1lYW5zIGl0IHdhcyBzZXQgZnJvbSBhIGhlYWRlciwgd2hpbGUKKyAgICAgICAgICAgdGhlIG5ldyBvbmUgaXNuJ3QgImxpdmUiIGFuZCB0aHVzIG9ubHkgcmVhZCBmcm9tIGEgZmlsZS4gV2UgbGV0CisgICAgICAgICAgIGxpdmUgY29va2llcyBzdGF5IGFsaXZlICovCisKKyAgICAgICAgLyogRnJlZSB0aGUgbmV3Y29tZXIgYW5kIGdldCBvdXQgb2YgaGVyZSEgKi8KKyAgICAgICAgZnJlZWNvb2tpZShjbyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorCisgICAgICBpZihyZXBsYWNlX29sZCkgeworICAgICAgICBjby0+bmV4dCA9IGNsaXN0LT5uZXh0OyAvKiBnZXQgdGhlIG5leHQtcG9pbnRlciBmaXJzdCAqLworCisgICAgICAgIC8qIHRoZW4gZnJlZSBhbGwgdGhlIG9sZCBwb2ludGVycyAqLworICAgICAgICBmcmVlKGNsaXN0LT5uYW1lKTsKKyAgICAgICAgaWYoY2xpc3QtPnZhbHVlKQorICAgICAgICAgIGZyZWUoY2xpc3QtPnZhbHVlKTsKKyAgICAgICAgaWYoY2xpc3QtPmRvbWFpbikKKyAgICAgICAgICBmcmVlKGNsaXN0LT5kb21haW4pOworICAgICAgICBpZihjbGlzdC0+cGF0aCkKKyAgICAgICAgICBmcmVlKGNsaXN0LT5wYXRoKTsKKyAgICAgICAgaWYoY2xpc3QtPmV4cGlyZXN0cikKKyAgICAgICAgICBmcmVlKGNsaXN0LT5leHBpcmVzdHIpOworCisgICAgICAgIGlmKGNsaXN0LT52ZXJzaW9uKQorICAgICAgICAgIGZyZWUoY2xpc3QtPnZlcnNpb24pOworICAgICAgICBpZihjbGlzdC0+bWF4YWdlKQorICAgICAgICAgIGZyZWUoY2xpc3QtPm1heGFnZSk7CisKKyAgICAgICAgKmNsaXN0ID0gKmNvOyAgLyogdGhlbiBzdG9yZSBhbGwgdGhlIG5ldyBkYXRhICovCisKKyAgICAgICAgZnJlZShjbyk7ICAgLyogZnJlZSB0aGUgbmV3bHkgYWxsb2NlZCBtZW1vcnkgKi8KKyAgICAgICAgY28gPSBjbGlzdDsgLyogcG9pbnQgdG8gdGhlIHByZXZpb3VzIHN0cnVjdCBpbnN0ZWFkICovCisKKyAgICAgICAgLyogV2UgaGF2ZSByZXBsYWNlZCBhIGNvb2tpZSwgbm93IHNraXAgdGhlIHJlc3Qgb2YgdGhlIGxpc3QgYnV0CisgICAgICAgICAgIG1ha2Ugc3VyZSB0aGUgJ2xhc3RjJyBwb2ludGVyIGlzIHByb3Blcmx5IHNldCAqLworICAgICAgICBkbyB7CisgICAgICAgICAgbGFzdGMgPSBjbGlzdDsKKyAgICAgICAgICBjbGlzdCA9IGNsaXN0LT5uZXh0OworICAgICAgICB9IHdoaWxlKGNsaXN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGxhc3RjID0gY2xpc3Q7CisgICAgY2xpc3QgPSBjbGlzdC0+bmV4dDsKKyAgfQorCisgIGlmKGMtPnJ1bm5pbmcpCisgICAgLyogT25seSBzaG93IHRoaXMgd2hlbiBOT1QgcmVhZGluZyB0aGUgY29va2llcyBmcm9tIGEgZmlsZSAqLworICAgIGluZm9mKGRhdGEsICIlcyBjb29raWUgJXM9XCIlc1wiIGZvciBkb21haW4gJXMsIHBhdGggJXMsICIKKyAgICAgICAgICAiZXhwaXJlICUiIEZPUk1BVF9PRkZfVCAiXG4iLAorICAgICAgICAgIHJlcGxhY2Vfb2xkPyJSZXBsYWNlZCI6IkFkZGVkIiwgY28tPm5hbWUsIGNvLT52YWx1ZSwKKyAgICAgICAgICBjby0+ZG9tYWluLCBjby0+cGF0aCwgY28tPmV4cGlyZXMpOworCisgIGlmKCFyZXBsYWNlX29sZCkgeworICAgIC8qIHRoZW4gbWFrZSB0aGUgbGFzdCBpdGVtIHBvaW50IG9uIHRoaXMgbmV3IG9uZSAqLworICAgIGlmKGxhc3RjKQorICAgICAgbGFzdGMtPm5leHQgPSBjbzsKKyAgICBlbHNlCisgICAgICBjLT5jb29raWVzID0gY287CisgIH0KKworICBjLT5udW1jb29raWVzKys7IC8qIG9uZSBtb3JlIGNvb2tpZSBpbiB0aGUgamFyICovCisgIHJldHVybiBjbzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ3VybF9jb29raWVfaW5pdCgpCisgKgorICogSW5pdHMgYSBjb29raWUgc3RydWN0IHRvIHJlYWQgZGF0YSBmcm9tIGEgbG9jYWwgZmlsZS4gVGhpcyBpcyBhbHdheXMKKyAqIGNhbGxlZCBiZWZvcmUgYW55IGNvb2tpZXMgYXJlIHNldC4gRmlsZSBtYXkgYmUgTlVMTC4KKyAqCisgKiBJZiAnbmV3c2Vzc2lvbicgaXMgVFJVRSwgZGlzY2FyZCBhbGwgInNlc3Npb24gY29va2llcyIgb24gcmVhZCBmcm9tIGZpbGUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgQ29va2llSW5mbyAqQ3VybF9jb29raWVfaW5pdChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ29va2llSW5mbyAqaW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBuZXdzZXNzaW9uKQoreworICBzdHJ1Y3QgQ29va2llSW5mbyAqYzsKKyAgRklMRSAqZnA7CisgIGJvb2wgZnJvbWZpbGU9VFJVRTsKKworICBpZihOVUxMID09IGluYykgeworICAgIC8qIHdlIGRpZG4ndCBnZXQgYSBzdHJ1Y3QsIGNyZWF0ZSBvbmUgKi8KKyAgICBjID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgQ29va2llSW5mbykpOworICAgIGlmKCFjKQorICAgICAgcmV0dXJuIE5VTEw7IC8qIGZhaWxlZCB0byBnZXQgbWVtb3J5ICovCisgICAgYy0+ZmlsZW5hbWUgPSBzdHJkdXAoZmlsZT9maWxlOiJub25lIik7IC8qIGNvcHkgdGhlIG5hbWUganVzdCBpbiBjYXNlICovCisgIH0KKyAgZWxzZSB7CisgICAgLyogd2UgZ290IGFuIGFscmVhZHkgZXhpc3Rpbmcgb25lLCB1c2UgdGhhdCAqLworICAgIGMgPSBpbmM7CisgIH0KKyAgYy0+cnVubmluZyA9IEZBTFNFOyAvKiB0aGlzIGlzIG5vdCBydW5uaW5nLCB0aGlzIGlzIGluaXQgKi8KKworICBpZihmaWxlICYmIHN0cmVxdWFsKGZpbGUsICItIikpIHsKKyAgICBmcCA9IHN0ZGluOworICAgIGZyb21maWxlPUZBTFNFOworICB9CisgIGVsc2UgaWYoZmlsZSAmJiAhKmZpbGUpIHsKKyAgICAvKiBwb2ludHMgdG8gYSAiIiBzdHJpbmcgKi8KKyAgICBmcCA9IE5VTEw7CisgIH0KKyAgZWxzZQorICAgIGZwID0gZmlsZT9mb3BlbihmaWxlLCAiciIpOk5VTEw7CisKKyAgYy0+bmV3c2Vzc2lvbiA9IG5ld3Nlc3Npb247IC8qIG5ldyBzZXNzaW9uPyAqLworCisgIGlmKGZwKSB7CisgICAgY2hhciAqbGluZXB0cjsKKyAgICBib29sIGhlYWRlcmxpbmU7CisKKyAgICBjaGFyICpsaW5lID0gbWFsbG9jKE1BWF9DT09LSUVfTElORSk7CisgICAgaWYobGluZSkgeworICAgICAgd2hpbGUoZmdldHMobGluZSwgTUFYX0NPT0tJRV9MSU5FLCBmcCkpIHsKKyAgICAgICAgaWYoY2hlY2twcmVmaXgoIlNldC1Db29raWU6IiwgbGluZSkpIHsKKyAgICAgICAgICAvKiBUaGlzIGlzIGEgY29va2llIGxpbmUsIGdldCBpdCEgKi8KKyAgICAgICAgICBsaW5lcHRyPSZsaW5lWzExXTsKKyAgICAgICAgICBoZWFkZXJsaW5lPVRSVUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgbGluZXB0cj1saW5lOworICAgICAgICAgIGhlYWRlcmxpbmU9RkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUoKmxpbmVwdHIgJiYgSVNCTEFOSygqbGluZXB0cikpCisgICAgICAgICAgbGluZXB0cisrOworCisgICAgICAgIEN1cmxfY29va2llX2FkZChkYXRhLCBjLCBoZWFkZXJsaW5lLCBsaW5lcHRyLCBOVUxMLCBOVUxMKTsKKyAgICAgIH0KKyAgICAgIGZyZWUobGluZSk7IC8qIGZyZWUgdGhlIGxpbmUgYnVmZmVyICovCisgICAgfQorICAgIGlmKGZyb21maWxlKQorICAgICAgZmNsb3NlKGZwKTsKKyAgfQorCisgIGMtPnJ1bm5pbmcgPSBUUlVFOyAgICAgICAgICAvKiBub3csIHdlJ3JlIHJ1bm5pbmcgKi8KKworICByZXR1cm4gYzsKK30KKworLyogc29ydCB0aGlzIHNvIHRoYXQgdGhlIGxvbmdlc3QgcGF0aCBnZXRzIGJlZm9yZSB0aGUgc2hvcnRlciBwYXRoICovCitzdGF0aWMgaW50IGNvb2tpZV9zb3J0KGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sKKyAgc3RydWN0IENvb2tpZSAqYzEgPSAqKHN0cnVjdCBDb29raWUgKiopcDE7CisgIHN0cnVjdCBDb29raWUgKmMyID0gKihzdHJ1Y3QgQ29va2llICoqKXAyOworCisgIHNpemVfdCBsMSA9IGMxLT5wYXRoP3N0cmxlbihjMS0+cGF0aCk6MDsKKyAgc2l6ZV90IGwyID0gYzItPnBhdGg/c3RybGVuKGMyLT5wYXRoKTowOworCisgIHJldHVybiAobDIgPiBsMSkgPyAxIDogKGwyIDwgbDEpID8gLTEgOiAwIDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ3VybF9jb29raWVfZ2V0bGlzdCgpCisgKgorICogRm9yIGEgZ2l2ZW4gaG9zdCBhbmQgcGF0aCwgcmV0dXJuIGEgbGlua2VkIGxpc3Qgb2YgY29va2llcyB0aGF0IHRoZQorICogY2xpZW50IHNob3VsZCBzZW5kIHRvIHRoZSBzZXJ2ZXIgaWYgdXNlZCBub3cuIFRoZSBzZWN1cmUgYm9vbGVhbiBpbmZvcm1zCisgKiB0aGUgY29va2llIGlmIGEgc2VjdXJlIGNvbm5lY3Rpb24gaXMgYWNoaWV2ZWQgb3Igbm90LgorICoKKyAqIEl0IHNoYWxsIG9ubHkgcmV0dXJuIGNvb2tpZXMgdGhhdCBoYXZlbid0IGV4cGlyZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBDb29raWUgKkN1cmxfY29va2llX2dldGxpc3Qoc3RydWN0IENvb2tpZUluZm8gKmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VjdXJlKQoreworICBzdHJ1Y3QgQ29va2llICpuZXdjbzsKKyAgc3RydWN0IENvb2tpZSAqY287CisgIHRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOworICBzdHJ1Y3QgQ29va2llICptYWluY289TlVMTDsKKyAgc2l6ZV90IG1hdGNoZXMgPSAwOworCisgIGlmKCFjIHx8ICFjLT5jb29raWVzKQorICAgIHJldHVybiBOVUxMOyAvKiBubyBjb29raWUgc3RydWN0IG9yIG5vIGNvb2tpZXMgaW4gdGhlIHN0cnVjdCAqLworCisgIGNvID0gYy0+Y29va2llczsKKworICB3aGlsZShjbykgeworICAgIC8qIG9ubHkgcHJvY2VzcyB0aGlzIGNvb2tpZSBpZiBpdCBpcyBub3QgZXhwaXJlZCBvciBoYWQgbm8gZXhwaXJlCisgICAgICAgZGF0ZSBBTkQgdGhhdCBpZiB0aGUgY29va2llIHJlcXVpcmVzIHdlJ3JlIHNlY3VyZSB3ZSBtdXN0IG9ubHkKKyAgICAgICBjb250aW51ZSBpZiB3ZSBhcmUhICovCisgICAgaWYoKCFjby0+ZXhwaXJlcyB8fCAoY28tPmV4cGlyZXMgPiBub3cpKSAmJgorICAgICAgIChjby0+c2VjdXJlP3NlY3VyZTpUUlVFKSkgeworCisgICAgICAvKiBub3cgY2hlY2sgaWYgdGhlIGRvbWFpbiBpcyBjb3JyZWN0ICovCisgICAgICBpZighY28tPmRvbWFpbiB8fAorICAgICAgICAgKGNvLT50YWlsbWF0Y2ggJiYgdGFpbG1hdGNoKGNvLT5kb21haW4sIGhvc3QpKSB8fAorICAgICAgICAgKCFjby0+dGFpbG1hdGNoICYmIEN1cmxfcmF3X2VxdWFsKGhvc3QsIGNvLT5kb21haW4pKSApIHsKKyAgICAgICAgLyogdGhlIHJpZ2h0IHBhcnQgb2YgdGhlIGhvc3QgbWF0Y2hlcyB0aGUgZG9tYWluIHN0dWZmIGluIHRoZQorICAgICAgICAgICBjb29raWUgZGF0YSAqLworCisgICAgICAgIC8qIG5vdyBjaGVjayB0aGUgbGVmdCBwYXJ0IG9mIHRoZSBwYXRoIHdpdGggdGhlIGNvb2tpZXMgcGF0aAorICAgICAgICAgICByZXF1aXJlbWVudCAqLworICAgICAgICBpZighY28tPnBhdGggfHwKKyAgICAgICAgICAgLyogbm90IHVzaW5nIGNoZWNrcHJlZml4KCkgYmVjYXVzZSBtYXRjaGluZyBzaG91bGQgYmUKKyAgICAgICAgICAgICAgY2FzZS1zZW5zaXRpdmUgKi8KKyAgICAgICAgICAgIXN0cm5jbXAoY28tPnBhdGgsIHBhdGgsIHN0cmxlbihjby0+cGF0aCkpICkgeworCisgICAgICAgICAgLyogYW5kIG5vdywgd2Uga25vdyB0aGlzIGlzIGEgbWF0Y2ggYW5kIHdlIHNob3VsZCBjcmVhdGUgYW4KKyAgICAgICAgICAgICBlbnRyeSBmb3IgdGhlIHJldHVybi1saW5rZWQtbGlzdCAqLworCisgICAgICAgICAgbmV3Y28gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBDb29raWUpKTsKKyAgICAgICAgICBpZihuZXdjbykgeworICAgICAgICAgICAgLyogZmlyc3QsIGNvcHkgdGhlIHdob2xlIHNvdXJjZSBjb29raWU6ICovCisgICAgICAgICAgICBtZW1jcHkobmV3Y28sIGNvLCBzaXplb2Yoc3RydWN0IENvb2tpZSkpOworCisgICAgICAgICAgICAvKiB0aGVuIG1vZGlmeSBvdXIgbmV4dCAqLworICAgICAgICAgICAgbmV3Y28tPm5leHQgPSBtYWluY287CisKKyAgICAgICAgICAgIC8qIHBvaW50IHRoZSBtYWluIHRvIHVzICovCisgICAgICAgICAgICBtYWluY28gPSBuZXdjbzsKKworICAgICAgICAgICAgbWF0Y2hlcysrOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZhaWw6CisgICAgICAgICAgICAvKiBmYWlsdXJlLCBjbGVhciB1cCB0aGUgYWxsb2NhdGVkIGNoYWluIGFuZCByZXR1cm4gTlVMTCAqLworICAgICAgICAgICAgd2hpbGUobWFpbmNvKSB7CisgICAgICAgICAgICAgIGNvID0gbWFpbmNvLT5uZXh0OworICAgICAgICAgICAgICBmcmVlKG1haW5jbyk7CisgICAgICAgICAgICAgIG1haW5jbyA9IGNvOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgY28gPSBjby0+bmV4dDsKKyAgfQorCisgIGlmKG1hdGNoZXMpIHsKKyAgICAvKiBOb3cgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpZiB0aGVyZSBpcyBhIG5hbWUgYXBwZWFyaW5nIG1vcmUgdGhhbgorICAgICAgIG9uY2UsIHRoZSBsb25nZXN0IHNwZWNpZmllZCBwYXRoIHZlcnNpb24gY29tZXMgZmlyc3QuIFRvIG1ha2UgdGhpcworICAgICAgIHRoZSBzd2lmdGVzdCB3YXksIHdlIGp1c3Qgc29ydCB0aGVtIGFsbCBiYXNlZCBvbiBwYXRoIGxlbmd0aC4gKi8KKyAgICBzdHJ1Y3QgQ29va2llICoqYXJyYXk7CisgICAgc2l6ZV90IGk7CisKKyAgICAvKiBhbGxvYyBhbiBhcnJheSBhbmQgc3RvcmUgYWxsIGNvb2tpZSBwb2ludGVycyAqLworICAgIGFycmF5ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgQ29va2llICopICogbWF0Y2hlcyk7CisgICAgaWYoIWFycmF5KQorICAgICAgZ290byBmYWlsOworCisgICAgY28gPSBtYWluY287CisKKyAgICBmb3IoaT0wOyBjbzsgY28gPSBjby0+bmV4dCkKKyAgICAgIGFycmF5W2krK10gPSBjbzsKKworICAgIC8qIG5vdyBzb3J0IHRoZSBjb29raWUgcG9pbnRlcnMgaW4gcGF0aCBsZW50aCBvcmRlciAqLworICAgIHFzb3J0KGFycmF5LCBtYXRjaGVzLCBzaXplb2Yoc3RydWN0IENvb2tpZSAqKSwgY29va2llX3NvcnQpOworCisgICAgLyogcmVtYWtlIHRoZSBsaW5rZWQgbGlzdCBvcmRlciBhY2NvcmRpbmcgdG8gdGhlIG5ldyBvcmRlciAqLworCisgICAgbWFpbmNvID0gYXJyYXlbMF07IC8qIHN0YXJ0IGhlcmUgKi8KKyAgICBmb3IoaT0wOyBpPG1hdGNoZXMtMTsgaSsrKQorICAgICAgYXJyYXlbaV0tPm5leHQgPSBhcnJheVtpKzFdOworICAgIGFycmF5W21hdGNoZXMtMV0tPm5leHQgPSBOVUxMOyAvKiB0ZXJtaW5hdGUgdGhlIGxpc3QgKi8KKworICAgIGZyZWUoYXJyYXkpOyAvKiByZW1vdmUgdGhlIHRlbXBvcmFyeSBkYXRhIGFnYWluICovCisgIH0KKworICByZXR1cm4gbWFpbmNvOyAvKiByZXR1cm4gdGhlIG5ldyBsaXN0ICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEN1cmxfY29va2llX2NsZWFyYWxsKCkKKyAqCisgKiBDbGVhciBhbGwgZXhpc3RpbmcgY29va2llcyBhbmQgcmVzZXQgdGhlIGNvdW50ZXIuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIEN1cmxfY29va2llX2NsZWFyYWxsKHN0cnVjdCBDb29raWVJbmZvICpjb29raWVzKQoreworICBpZihjb29raWVzKSB7CisgICAgQ3VybF9jb29raWVfZnJlZWxpc3QoY29va2llcy0+Y29va2llcywgVFJVRSk7CisgICAgY29va2llcy0+Y29va2llcyA9IE5VTEw7CisgICAgY29va2llcy0+bnVtY29va2llcyA9IDA7CisgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ3VybF9jb29raWVfZnJlZWxpc3QoKQorICoKKyAqIEZyZWUgYSBsaXN0IG9mIGNvb2tpZXMgcHJldmlvdXNseSByZXR1cm5lZCBieSBDdXJsX2Nvb2tpZV9nZXRsaXN0KCk7CisgKgorICogVGhlICdjb29raWVzdG9vJyBhcmd1bWVudCB0ZWxscyB0aGlzIGZ1bmN0aW9uIHdoZXRoZXIgdG8ganVzdCBmcmVlIHRoZQorICogbGlzdCBvciBhY3R1YWxseSBhbHNvIGZyZWUgYWxsIGNvb2tpZXMgd2l0aGluIHRoZSBsaXN0IGFzIHdlbGwuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgQ3VybF9jb29raWVfZnJlZWxpc3Qoc3RydWN0IENvb2tpZSAqY28sIGJvb2wgY29va2llc3RvbykKK3sKKyAgc3RydWN0IENvb2tpZSAqbmV4dDsKKyAgaWYoY28pIHsKKyAgICB3aGlsZShjbykgeworICAgICAgbmV4dCA9IGNvLT5uZXh0OworICAgICAgaWYoY29va2llc3RvbykKKyAgICAgICAgZnJlZWNvb2tpZShjbyk7CisgICAgICBlbHNlCisgICAgICAgIGZyZWUoY28pOyAvKiB3ZSBvbmx5IGZyZWUgdGhlIHN0cnVjdCBzaW5jZSB0aGUgIm1lbWJlcnMiIGFyZSBhbGwganVzdAorICAgICAgICAgICAgICAgICAgICAgcG9pbnRlZCBvdXQgaW4gdGhlIG1haW4gY29va2llIGxpc3QhICovCisgICAgICBjbyA9IG5leHQ7CisgICAgfQorICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ3VybF9jb29raWVfY2xlYXJzZXNzKCkKKyAqCisgKiBGcmVlIGFsbCBzZXNzaW9uIGNvb2tpZXMgaW4gdGhlIGNvb2tpZXMgbGlzdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgQ3VybF9jb29raWVfY2xlYXJzZXNzKHN0cnVjdCBDb29raWVJbmZvICpjb29raWVzKQoreworICBzdHJ1Y3QgQ29va2llICpmaXJzdCwgKmN1cnIsICpuZXh0LCAqcHJldiA9IE5VTEw7CisKKyAgaWYoIWNvb2tpZXMgfHwgIWNvb2tpZXMtPmNvb2tpZXMpCisgICAgcmV0dXJuOworCisgIGZpcnN0ID0gY3VyciA9IHByZXYgPSBjb29raWVzLT5jb29raWVzOworCisgIGZvcig7IGN1cnI7IGN1cnIgPSBuZXh0KSB7CisgICAgbmV4dCA9IGN1cnItPm5leHQ7CisgICAgaWYoIWN1cnItPmV4cGlyZXMpIHsKKyAgICAgIGlmKGZpcnN0ID09IGN1cnIpCisgICAgICAgIGZpcnN0ID0gbmV4dDsKKworICAgICAgaWYocHJldiA9PSBjdXJyKQorICAgICAgICBwcmV2ID0gbmV4dDsKKyAgICAgIGVsc2UKKyAgICAgICAgcHJldi0+bmV4dCA9IG5leHQ7CisKKyAgICAgIGZyZWVjb29raWUoY3Vycik7CisgICAgICBjb29raWVzLT5udW1jb29raWVzLS07CisgICAgfQorICAgIGVsc2UKKyAgICAgIHByZXYgPSBjdXJyOworICB9CisKKyAgY29va2llcy0+Y29va2llcyA9IGZpcnN0OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEN1cmxfY29va2llX2NsZWFudXAoKQorICoKKyAqIEZyZWUgYSAiY29va2llIG9iamVjdCIgcHJldmlvdXMgY3JlYXRlZCB3aXRoIGNvb2tpZV9pbml0KCkuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIEN1cmxfY29va2llX2NsZWFudXAoc3RydWN0IENvb2tpZUluZm8gKmMpCit7CisgIHN0cnVjdCBDb29raWUgKmNvOworICBzdHJ1Y3QgQ29va2llICpuZXh0OworICBpZihjKSB7CisgICAgaWYoYy0+ZmlsZW5hbWUpCisgICAgICBmcmVlKGMtPmZpbGVuYW1lKTsKKyAgICBjbyA9IGMtPmNvb2tpZXM7CisKKyAgICB3aGlsZShjbykgeworICAgICAgbmV4dCA9IGNvLT5uZXh0OworICAgICAgZnJlZWNvb2tpZShjbyk7CisgICAgICBjbyA9IG5leHQ7CisgICAgfQorICAgIGZyZWUoYyk7IC8qIGZyZWUgdGhlIGJhc2Ugc3RydWN0IGFzIHdlbGwgKi8KKyAgfQorfQorCisvKiBnZXRfbmV0c2NhcGVfZm9ybWF0KCkKKyAqCisgKiBGb3JtYXRzIGEgc3RyaW5nIGZvciBOZXRzY2FwZSBvdXRwdXQgZmlsZSwgdy9vIGEgbmV3bGluZSBhdCB0aGUgZW5kLgorICoKKyAqIEZ1bmN0aW9uIHJldHVybnMgYSBjaGFyICogdG8gYSBmb3JtYXR0ZWQgbGluZS4gSGFzIHRvIGJlIGZyZWUoKWQKKyovCitzdGF0aWMgY2hhciAqZ2V0X25ldHNjYXBlX2Zvcm1hdChjb25zdCBzdHJ1Y3QgQ29va2llICpjbykKK3sKKyAgcmV0dXJuIGFwcmludGYoCisgICAgIiVzIiAgICAgLyogaHR0cG9ubHkgcHJlYW1ibGUgKi8KKyAgICAiJXMlc1x0IiAvKiBkb21haW4gKi8KKyAgICAiJXNcdCIgICAvKiB0YWlsbWF0Y2ggKi8KKyAgICAiJXNcdCIgICAvKiBwYXRoICovCisgICAgIiVzXHQiICAgLyogc2VjdXJlICovCisgICAgIiUiIEZPUk1BVF9PRkZfVCAiXHQiICAgLyogZXhwaXJlcyAqLworICAgICIlc1x0IiAgIC8qIG5hbWUgKi8KKyAgICAiJXMiLCAgICAvKiB2YWx1ZSAqLworICAgIGNvLT5odHRwb25seT8iI0h0dHBPbmx5XyI6IiIsCisgICAgLyogTWFrZSBzdXJlIGFsbCBkb21haW5zIGFyZSBwcmVmaXhlZCB3aXRoIGEgZG90IGlmIHRoZXkgYWxsb3cKKyAgICAgICB0YWlsbWF0Y2hpbmcuIFRoaXMgaXMgTW96aWxsYS1zdHlsZS4gKi8KKyAgICAoY28tPnRhaWxtYXRjaCAmJiBjby0+ZG9tYWluICYmIGNvLT5kb21haW5bMF0gIT0gJy4nKT8gIi4iOiIiLAorICAgIGNvLT5kb21haW4/Y28tPmRvbWFpbjoidW5rbm93biIsCisgICAgY28tPnRhaWxtYXRjaD8iVFJVRSI6IkZBTFNFIiwKKyAgICBjby0+cGF0aD9jby0+cGF0aDoiLyIsCisgICAgY28tPnNlY3VyZT8iVFJVRSI6IkZBTFNFIiwKKyAgICBjby0+ZXhwaXJlcywKKyAgICBjby0+bmFtZSwKKyAgICBjby0+dmFsdWU/Y28tPnZhbHVlOiIiKTsKK30KKworLyoKKyAqIGNvb2tpZV9vdXRwdXQoKQorICoKKyAqIFdyaXRlcyBhbGwgaW50ZXJuYWxseSBrbm93biBjb29raWVzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gU3BlY2lmeQorICogIi0iIGFzIGZpbGUgbmFtZSB0byB3cml0ZSB0byBzdGRvdXQuCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgbm9uLXplcm8gb24gd3JpdGUgZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBjb29raWVfb3V0cHV0KHN0cnVjdCBDb29raWVJbmZvICpjLCBjb25zdCBjaGFyICpkdW1waGVyZSkKK3sKKyAgc3RydWN0IENvb2tpZSAqY287CisgIEZJTEUgKm91dDsKKyAgYm9vbCB1c2Vfc3Rkb3V0PUZBTFNFOworCisgIGlmKChOVUxMID09IGMpIHx8ICgwID09IGMtPm51bWNvb2tpZXMpKQorICAgIC8qIElmIHRoZXJlIGFyZSBubyBrbm93biBjb29raWVzLCB3ZSBkb24ndCB3cml0ZSBvciBldmVuIGNyZWF0ZSBhbnkKKyAgICAgICBkZXN0aW5hdGlvbiBmaWxlICovCisgICAgcmV0dXJuIDA7CisKKyAgaWYoc3RyZXF1YWwoIi0iLCBkdW1waGVyZSkpIHsKKyAgICAvKiB1c2Ugc3Rkb3V0ICovCisgICAgb3V0ID0gc3Rkb3V0OworICAgIHVzZV9zdGRvdXQ9VFJVRTsKKyAgfQorICBlbHNlIHsKKyAgICBvdXQgPSBmb3BlbihkdW1waGVyZSwgInciKTsKKyAgICBpZighb3V0KQorICAgICAgcmV0dXJuIDE7IC8qIGZhaWx1cmUgKi8KKyAgfQorCisgIGlmKGMpIHsKKyAgICBjaGFyICpmb3JtYXRfcHRyOworCisgICAgZnB1dHMoIiMgTmV0c2NhcGUgSFRUUCBDb29raWUgRmlsZVxuIgorICAgICAgICAgICIjIGh0dHA6Ly9jdXJsLmhheHguc2UvcmZjL2Nvb2tpZV9zcGVjLmh0bWxcbiIKKyAgICAgICAgICAiIyBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBsaWJjdXJsISBFZGl0IGF0IHlvdXIgb3duIHJpc2suXG5cbiIsCisgICAgICAgICAgb3V0KTsKKyAgICBjbyA9IGMtPmNvb2tpZXM7CisKKyAgICB3aGlsZShjbykgeworICAgICAgZm9ybWF0X3B0ciA9IGdldF9uZXRzY2FwZV9mb3JtYXQoY28pOworICAgICAgaWYoZm9ybWF0X3B0ciA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYob3V0LCAiI1xuIyBGYXRhbCBsaWJjdXJsIGVycm9yXG4iKTsKKyAgICAgICAgaWYoIXVzZV9zdGRvdXQpCisgICAgICAgICAgZmNsb3NlKG91dCk7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgZnByaW50ZihvdXQsICIlc1xuIiwgZm9ybWF0X3B0cik7CisgICAgICBmcmVlKGZvcm1hdF9wdHIpOworICAgICAgY289Y28tPm5leHQ7CisgICAgfQorICB9CisKKyAgaWYoIXVzZV9zdGRvdXQpCisgICAgZmNsb3NlKG91dCk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjdXJsX3NsaXN0ICpDdXJsX2Nvb2tpZV9saXN0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBzdHJ1Y3QgY3VybF9zbGlzdCAqbGlzdCA9IE5VTEw7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpiZWc7CisgIHN0cnVjdCBDb29raWUgKmM7CisgIGNoYXIgKmxpbmU7CisKKyAgaWYoKGRhdGEtPmNvb2tpZXMgPT0gTlVMTCkgfHwKKyAgICAgIChkYXRhLT5jb29raWVzLT5udW1jb29raWVzID09IDApKQorICAgIHJldHVybiBOVUxMOworCisgIGMgPSBkYXRhLT5jb29raWVzLT5jb29raWVzOworCisgIHdoaWxlKGMpIHsKKyAgICAvKiBmaWxsIHRoZSBsaXN0IHdpdGggX2FsbF8gdGhlIGNvb2tpZXMgd2Uga25vdyAqLworICAgIGxpbmUgPSBnZXRfbmV0c2NhcGVfZm9ybWF0KGMpOworICAgIGlmKCFsaW5lKSB7CisgICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGxpc3QpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGJlZyA9IGN1cmxfc2xpc3RfYXBwZW5kKGxpc3QsIGxpbmUpOworICAgIGZyZWUobGluZSk7CisgICAgaWYoIWJlZykgeworICAgICAgY3VybF9zbGlzdF9mcmVlX2FsbChsaXN0KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBsaXN0ID0gYmVnOworICAgIGMgPSBjLT5uZXh0OworICB9CisKKyAgcmV0dXJuIGxpc3Q7Cit9CisKK3ZvaWQgQ3VybF9mbHVzaF9jb29raWVzKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBpbnQgY2xlYW51cCkKK3sKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQ09PS0lFSkFSXSkgeworICAgIGlmKGRhdGEtPmNoYW5nZS5jb29raWVsaXN0KSB7CisgICAgICAvKiBJZiB0aGVyZSBpcyBhIGxpc3Qgb2YgY29va2llIGZpbGVzIHRvIHJlYWQsIGRvIGl0IGZpcnN0IHNvIHRoYXQKKyAgICAgICAgIHdlIGhhdmUgYWxsIHRoZSB0b2xkIGZpbGVzIHJlYWQgYmVmb3JlIHdlIHdyaXRlIHRoZSBuZXcgamFyLgorICAgICAgICAgQ3VybF9jb29raWVfbG9hZGZpbGVzKCkgTE9DS1MgYW5kIFVOTE9DS1MgdGhlIHNoYXJlIGl0c2VsZiEgKi8KKyAgICAgIEN1cmxfY29va2llX2xvYWRmaWxlcyhkYXRhKTsKKyAgICB9CisKKyAgICBDdXJsX3NoYXJlX2xvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFLCBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7CisKKyAgICAvKiBpZiB3ZSBoYXZlIGEgZGVzdGluYXRpb24gZmlsZSBmb3IgYWxsIHRoZSBjb29raWVzIHRvIGdldCBkdW1wZWQgdG8gKi8KKyAgICBpZihjb29raWVfb3V0cHV0KGRhdGEtPmNvb2tpZXMsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NPT0tJRUpBUl0pKQorICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBzYXZlIGNvb2tpZXMgaW4gJXNcbiIsCisgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19DT09LSUVKQVJdKTsKKyAgfQorICBlbHNlIHsKKyAgICBpZihjbGVhbnVwICYmIGRhdGEtPmNoYW5nZS5jb29raWVsaXN0KSB7CisgICAgICAvKiBzaW5jZSBub3RoaW5nIGlzIHdyaXR0ZW4sIHdlIGNhbiBqdXN0IGZyZWUgdGhlIGxpc3Qgb2YgY29va2llIGZpbGUKKyAgICAgICAgIG5hbWVzICovCisgICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdGEtPmNoYW5nZS5jb29raWVsaXN0KTsgLyogY2xlYW4gdXAgbGlzdCAqLworICAgICAgZGF0YS0+Y2hhbmdlLmNvb2tpZWxpc3QgPSBOVUxMOworICAgIH0KKyAgICBDdXJsX3NoYXJlX2xvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFLCBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7CisgIH0KKworICBpZihjbGVhbnVwICYmICghZGF0YS0+c2hhcmUgfHwgKGRhdGEtPmNvb2tpZXMgIT0gZGF0YS0+c2hhcmUtPmNvb2tpZXMpKSkgeworICAgIEN1cmxfY29va2llX2NsZWFudXAoZGF0YS0+Y29va2llcyk7CisgIH0KKyAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFKTsKK30KKworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9IVFRQIHx8IENVUkxfRElTQUJMRV9DT09LSUVTICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY29va2llLmggYi9jdXJsLTcuMjUuMC9saWIvY29va2llLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5N2U0NgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jb29raWUuaApAQCAtMCwwICsxLDEwMyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9DT09LSUVfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9DT09LSUVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitzdHJ1Y3QgQ29va2llIHsKKyAgc3RydWN0IENvb2tpZSAqbmV4dDsgLyogbmV4dCBpbiB0aGUgY2hhaW4gKi8KKyAgY2hhciAqbmFtZTsgICAgICAgIC8qIDx0aGlzPiA9IHZhbHVlICovCisgIGNoYXIgKnZhbHVlOyAgICAgICAvKiBuYW1lID0gPHRoaXM+ICovCisgIGNoYXIgKnBhdGg7ICAgICAgICAgLyogcGF0aCA9IDx0aGlzPiAqLworICBjaGFyICpkb21haW47ICAgICAgLyogZG9tYWluID0gPHRoaXM+ICovCisgIGN1cmxfb2ZmX3QgZXhwaXJlczsgIC8qIGV4cGlyZXMgPSA8dGhpcz4gKi8KKyAgY2hhciAqZXhwaXJlc3RyOyAgIC8qIHRoZSBwbGFpbiB0ZXh0IHZlcnNpb24gKi8KKyAgYm9vbCB0YWlsbWF0Y2g7ICAgIC8qIHdlYXRoZXIgd2UgZG8gdGFpbC1tYXRjaG5pbmcgb2YgdGhlIGRvbWFpbiBuYW1lICovCisKKyAgLyogUkZDIDIxMDkga2V5d29yZHMuIFZlcnNpb249MSBtZWFucyAyMTA5LWNvbXBsaWFudCBjb29raWUgc2VuZGluZyAqLworICBjaGFyICp2ZXJzaW9uOyAgICAgLyogVmVyc2lvbiA9IDx2YWx1ZT4gKi8KKyAgY2hhciAqbWF4YWdlOyAgICAgIC8qIE1heC1BZ2UgPSA8dmFsdWU+ICovCisKKyAgYm9vbCBzZWN1cmU7ICAgICAgIC8qIHdoZXRoZXIgdGhlICdzZWN1cmUnIGtleXdvcmQgd2FzIHVzZWQgKi8KKyAgYm9vbCBsaXZlY29va2llOyAgIC8qIHVwZGF0ZWQgZnJvbSBhIHNlcnZlciwgbm90IGEgc3RvcmVkIGZpbGUgKi8KKyAgYm9vbCBodHRwb25seTsgICAgIC8qIHRydWUgaWYgdGhlIGh0dHBvbmx5IGRpcmVjdGl2ZSBpcyBwcmVzZW50ICovCit9OworCitzdHJ1Y3QgQ29va2llSW5mbyB7CisgIC8qIGxpbmtlZCBsaXN0IG9mIGNvb2tpZXMgd2Uga25vdyBvZiAqLworICBzdHJ1Y3QgQ29va2llICpjb29raWVzOworCisgIGNoYXIgKmZpbGVuYW1lOyAgLyogZmlsZSB3ZSByZWFkIGZyb20vd3JpdGUgdG8gKi8KKyAgYm9vbCBydW5uaW5nOyAgICAvKiBzdGF0ZSBpbmZvLCBmb3IgY29va2llIGFkZGluZyBpbmZvcm1hdGlvbiAqLworICBsb25nIG51bWNvb2tpZXM7IC8qIG51bWJlciBvZiBjb29raWVzIGluIHRoZSAiamFyIiAqLworICBib29sIG5ld3Nlc3Npb247IC8qIG5ldyBzZXNzaW9uLCBkaXNjYXJkIHNlc3Npb24gY29va2llcyBvbiBsb2FkICovCit9OworCisvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIHdlIGFjY2VwdCBmb3IgYSBjb29raWUgbGluZS4gUkZDIDIxMDkKKyAgIHNlY3Rpb24gNi4zIHNheXM6CisKKyAgICJhdCBsZWFzdCA0MDk2IGJ5dGVzIHBlciBjb29raWUgKGFzIG1lYXN1cmVkIGJ5IHRoZSBzaXplIG9mIHRoZSBjaGFyYWN0ZXJzCisgICB0aGF0IGNvbXByaXNlIHRoZSBjb29raWUgbm9uLXRlcm1pbmFsIGluIHRoZSBzeW50YXggZGVzY3JpcHRpb24gb2YgdGhlCisgICBTZXQtQ29va2llIGhlYWRlcikiCisKKyovCisjZGVmaW5lIE1BWF9DT09LSUVfTElORSA1MDAwCisjZGVmaW5lIE1BWF9DT09LSUVfTElORV9UWFQgIjQ5OTkiCisKKy8qIFRoaXMgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29va2llIG5hbWUgd2UgZGVhbCB3aXRoOiAqLworI2RlZmluZSBNQVhfTkFNRSAxMDI0CisjZGVmaW5lIE1BWF9OQU1FX1RYVCAiMTAyMyIKKworc3RydWN0IFNlc3Npb25IYW5kbGU7CisvKgorICogQWRkIGEgY29va2llIHRvIHRoZSBpbnRlcm5hbCBsaXN0IG9mIGNvb2tpZXMuIFRoZSBkb21haW4gYW5kIHBhdGggYXJndW1lbnRzCisgKiBhcmUgb25seSB1c2VkIGlmIHRoZSBoZWFkZXIgYm9vbGVhbiBpcyBUUlVFLgorICovCisKK3N0cnVjdCBDb29raWUgKkN1cmxfY29va2llX2FkZChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ29va2llSW5mbyAqLCBib29sIGhlYWRlciwgY2hhciAqbGluZXB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIGNvbnN0IGNoYXIgKnBhdGgpOworCitzdHJ1Y3QgQ29va2llICpDdXJsX2Nvb2tpZV9nZXRsaXN0KHN0cnVjdCBDb29raWVJbmZvICosIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBib29sKTsKK3ZvaWQgQ3VybF9jb29raWVfZnJlZWxpc3Qoc3RydWN0IENvb2tpZSAqY29va2llcywgYm9vbCBjb29raWVzdG9vKTsKK3ZvaWQgQ3VybF9jb29raWVfY2xlYXJhbGwoc3RydWN0IENvb2tpZUluZm8gKmNvb2tpZXMpOwordm9pZCBDdXJsX2Nvb2tpZV9jbGVhcnNlc3Moc3RydWN0IENvb2tpZUluZm8gKmNvb2tpZXMpOworCisjaWYgZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgfHwgZGVmaW5lZChDVVJMX0RJU0FCTEVfQ09PS0lFUykKKyNkZWZpbmUgQ3VybF9jb29raWVfbGlzdCh4KSBOVUxMCisjZGVmaW5lIEN1cmxfY29va2llX2xvYWRmaWxlcyh4KSBDdXJsX25vcF9zdG10CisjZGVmaW5lIEN1cmxfY29va2llX2luaXQoeCx5LHosdykgTlVMTAorI2RlZmluZSBDdXJsX2Nvb2tpZV9jbGVhbnVwKHgpIEN1cmxfbm9wX3N0bXQKKyNkZWZpbmUgQ3VybF9mbHVzaF9jb29raWVzKHgseSkgQ3VybF9ub3Bfc3RtdAorI2Vsc2UKK3ZvaWQgQ3VybF9mbHVzaF9jb29raWVzKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBpbnQgY2xlYW51cCk7Cit2b2lkIEN1cmxfY29va2llX2NsZWFudXAoc3RydWN0IENvb2tpZUluZm8gKik7CitzdHJ1Y3QgQ29va2llSW5mbyAqQ3VybF9jb29raWVfaW5pdChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgc3RydWN0IENvb2tpZUluZm8gKiwgYm9vbCk7CitzdHJ1Y3QgY3VybF9zbGlzdCAqQ3VybF9jb29raWVfbGlzdChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7Cit2b2lkIEN1cmxfY29va2llX2xvYWRmaWxlcyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0NPT0tJRV9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybF9hZGRyaW5mby5jIGIvY3VybC03LjI1LjAvbGliL2N1cmxfYWRkcmluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWU0MDNmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2N1cmxfYWRkcmluZm8uYwpAQCAtMCwwICsxLDUzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisKKyNpZmRlZiBfX1ZNUworIyAgaW5jbHVkZSA8aW4uaD4KKyMgIGluY2x1ZGUgPGluZXQuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChORVRXQVJFKSAmJiBkZWZpbmVkKF9fTk9WRUxMX0xJQkNfXykKKyMgIHVuZGVmICBpbl9hZGRyX3QKKyMgIGRlZmluZSBpbl9hZGRyX3QgdW5zaWduZWQgbG9uZworI2VuZGlmCisKKyNpbmNsdWRlICJjdXJsX2FkZHJpbmZvLmgiCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisKKy8qCisgKiBDdXJsX2ZyZWVhZGRyaW5mbygpCisgKgorICogVGhpcyBpcyB1c2VkIHRvIGZyZWUgYSBsaW5rZWQgbGlzdCBvZiBDdXJsX2FkZHJpbmZvIHN0cnVjdHMgYWxvbmcKKyAqIHdpdGggYWxsIGl0cyBhc3NvY2lhdGVkIGFsbG9jYXRlZCBzdG9yYWdlLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZQorICogY2FsbGVkIG9uY2UgZm9yIGVhY2ggc3VjY2Vzc2Z1bCBjYWxsIHRvIEN1cmxfZ2V0YWRkcmluZm9fZXgoKSBvciB0bworICogYW55IGZ1bmN0aW9uIGNhbGwgd2hpY2ggYWN0dWFsbHkgYWxsb2NhdGVzIGEgQ3VybF9hZGRyaW5mbyBzdHJ1Y3QuCisgKi8KKworI2lmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgKF9fSU5URUxfQ09NUElMRVIgPT0gOTEwKSAmJiBcCisgICAgZGVmaW5lZChfX09QVElNSVpFX18pICYmIGRlZmluZWQoX191bml4X18pICYmICBkZWZpbmVkKF9faTM4Nl9fKQorICAvKiB3b3JrYXJvdW5kIGljYyA5LjEgb3B0aW1pemVyIGlzc3VlICovCisjIGRlZmluZSB2cXVhbGlmaWVyIHZvbGF0aWxlCisjZWxzZQorIyBkZWZpbmUgdnF1YWxpZmllcgorI2VuZGlmCisKK3ZvaWQKK0N1cmxfZnJlZWFkZHJpbmZvKEN1cmxfYWRkcmluZm8gKmNhaGVhZCkKK3sKKyAgQ3VybF9hZGRyaW5mbyAqdnF1YWxpZmllciBjYW5leHQ7CisgIEN1cmxfYWRkcmluZm8gKmNhOworCisgIGZvcihjYSA9IGNhaGVhZDsgY2EgIT0gTlVMTDsgY2EgPSBjYW5leHQpIHsKKworICAgIGlmKGNhLT5haV9hZGRyKQorICAgICAgZnJlZShjYS0+YWlfYWRkcik7CisKKyAgICBpZihjYS0+YWlfY2Fub25uYW1lKQorICAgICAgZnJlZShjYS0+YWlfY2Fub25uYW1lKTsKKworICAgIGNhbmV4dCA9IGNhLT5haV9uZXh0OworCisgICAgZnJlZShjYSk7CisgIH0KK30KKworCisjaWZkZWYgSEFWRV9HRVRBRERSSU5GTworLyoKKyAqIEN1cmxfZ2V0YWRkcmluZm9fZXgoKQorICoKKyAqIFRoaXMgaXMgYSB3cmFwcGVyIGZ1bmN0aW9uIGFyb3VuZCBzeXN0ZW0ncyBnZXRhZGRyaW5mbygpLCB3aXRoCisgKiB0aGUgb25seSBkaWZmZXJlbmNlIHRoYXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYSBsaW5rZWQgbGlzdCBvZgorICogYWRkcmluZm8gc3RydWN0cyB0aGlzIG9uZSByZXR1cm5zIGEgbGlua2VkIGxpc3Qgb2YgQ3VybF9hZGRyaW5mbworICogb25lcy4gVGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhpcyBmdW5jdGlvbiAqTVVTVCogYmUgZnJlZSdkIHdpdGgKKyAqIEN1cmxfZnJlZWFkZHJpbmZvKCkuICBGb3IgZWFjaCBzdWNjZXNzZnVsIGNhbGwgdG8gdGhpcyBmdW5jdGlvbgorICogdGhlcmUgbXVzdCBiZSBhbiBhc3NvY2lhdGVkIGNhbGwgbGF0ZXIgdG8gQ3VybF9mcmVlYWRkcmluZm8oKS4KKyAqCisgKiBUaGVyZSBzaG91bGQgYmUgbm8gc2luZ2xlIGNhbGwgdG8gc3lzdGVtJ3MgZ2V0YWRkcmluZm8oKSBpbiB0aGUKKyAqIHdob2xlIGxpYnJhcnksIGFueSBzdWNoIGNhbGwgc2hvdWxkIGJlICdyb3V0ZWQnIHRocm91Z2ggdGhpcyBvbmUuCisgKi8KKworaW50CitDdXJsX2dldGFkZHJpbmZvX2V4KGNvbnN0IGNoYXIgKm5vZGVuYW1lLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZXJ2bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywKKyAgICAgICAgICAgICAgICAgICAgQ3VybF9hZGRyaW5mbyAqKnJlc3VsdCkKK3sKKyAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICphaTsKKyAgc3RydWN0IGFkZHJpbmZvICphaWhlYWQ7CisgIEN1cmxfYWRkcmluZm8gKmNhZmlyc3QgPSBOVUxMOworICBDdXJsX2FkZHJpbmZvICpjYWxhc3QgPSBOVUxMOworICBDdXJsX2FkZHJpbmZvICpjYTsKKyAgc2l6ZV90IHNzX3NpemU7CisgIGludCBlcnJvcjsKKworICAqcmVzdWx0ID0gTlVMTDsgLyogYXNzdW1lIGZhaWx1cmUgKi8KKworICBlcnJvciA9IGdldGFkZHJpbmZvKG5vZGVuYW1lLCBzZXJ2bmFtZSwgaGludHMsICZhaWhlYWQpOworICBpZihlcnJvcikKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgLyogdHJhdmVyc2UgdGhlIGFkZHJpbmZvIGxpc3QgKi8KKworICBmb3IoYWkgPSBhaWhlYWQ7IGFpICE9IE5VTEw7IGFpID0gYWktPmFpX25leHQpIHsKKworICAgIC8qIGlnbm9yZSBlbGVtZW50cyB3aXRoIHVuc3VwcG9ydGVkIGFkZHJlc3MgZmFtaWx5LCAqLworICAgIC8qIHNldHRsZSBmYW1pbHktc3BlY2lmaWMgc29ja2FkZHIgc3RydWN0dXJlIHNpemUuICAqLworICAgIGlmKGFpLT5haV9mYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgIHNzX3NpemUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIGVsc2UgaWYoYWktPmFpX2ZhbWlseSA9PSBBRl9JTkVUNikKKyAgICAgIHNzX3NpemUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKyAgICBlbHNlCisgICAgICBjb250aW51ZTsKKworICAgIC8qIGlnbm9yZSBlbGVtZW50cyB3aXRob3V0IHJlcXVpcmVkIGFkZHJlc3MgaW5mbyAqLworICAgIGlmKChhaS0+YWlfYWRkciA9PSBOVUxMKSB8fCAhKGFpLT5haV9hZGRybGVuID4gMCkpCisgICAgICBjb250aW51ZTsKKworICAgIC8qIGlnbm9yZSBlbGVtZW50cyB3aXRoIGJvZ3VzIGFkZHJlc3Mgc2l6ZSAqLworICAgIGlmKChzaXplX3QpYWktPmFpX2FkZHJsZW4gPCBzc19zaXplKQorICAgICAgY29udGludWU7CisKKyAgICBpZigoY2EgPSBtYWxsb2Moc2l6ZW9mKEN1cmxfYWRkcmluZm8pKSkgPT0gTlVMTCkgeworICAgICAgZXJyb3IgPSBFQUlfTUVNT1JZOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogY29weSBlYWNoIHN0cnVjdHVyZSBtZW1iZXIgaW5kaXZpZHVhbGx5LCBtZW1iZXIgb3JkZXJpbmcsICovCisgICAgLyogc2l6ZSwgb3IgcGFkZGluZyBtaWdodCBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggcGxhdGZvcm0uICAgICovCisKKyAgICBjYS0+YWlfZmxhZ3MgICAgID0gYWktPmFpX2ZsYWdzOworICAgIGNhLT5haV9mYW1pbHkgICAgPSBhaS0+YWlfZmFtaWx5OworICAgIGNhLT5haV9zb2NrdHlwZSAgPSBhaS0+YWlfc29ja3R5cGU7CisgICAgY2EtPmFpX3Byb3RvY29sICA9IGFpLT5haV9wcm90b2NvbDsKKyAgICBjYS0+YWlfYWRkcmxlbiAgID0gKGN1cmxfc29ja2xlbl90KXNzX3NpemU7CisgICAgY2EtPmFpX2FkZHIgICAgICA9IE5VTEw7CisgICAgY2EtPmFpX2Nhbm9ubmFtZSA9IE5VTEw7CisgICAgY2EtPmFpX25leHQgICAgICA9IE5VTEw7CisKKyAgICBpZigoY2EtPmFpX2FkZHIgPSBtYWxsb2Moc3Nfc2l6ZSkpID09IE5VTEwpIHsKKyAgICAgIGVycm9yID0gRUFJX01FTU9SWTsKKyAgICAgIGZyZWUoY2EpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIG1lbWNweShjYS0+YWlfYWRkciwgYWktPmFpX2FkZHIsIHNzX3NpemUpOworCisgICAgaWYoYWktPmFpX2Nhbm9ubmFtZSAhPSBOVUxMKSB7CisgICAgICBpZigoY2EtPmFpX2Nhbm9ubmFtZSA9IHN0cmR1cChhaS0+YWlfY2Fub25uYW1lKSkgPT0gTlVMTCkgeworICAgICAgICBlcnJvciA9IEVBSV9NRU1PUlk7CisgICAgICAgIGZyZWUoY2EtPmFpX2FkZHIpOworICAgICAgICBmcmVlKGNhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgLyogaWYgdGhlIHJldHVybiBsaXN0IGlzIGVtcHR5LCB0aGlzIGJlY29tZXMgdGhlIGZpcnN0IGVsZW1lbnQgKi8KKyAgICBpZighY2FmaXJzdCkKKyAgICAgIGNhZmlyc3QgPSBjYTsKKworICAgIC8qIGFkZCB0aGlzIGVsZW1lbnQgbGFzdCBpbiB0aGUgcmV0dXJuIGxpc3QgKi8KKyAgICBpZihjYWxhc3QpCisgICAgICBjYWxhc3QtPmFpX25leHQgPSBjYTsKKyAgICBjYWxhc3QgPSBjYTsKKworICB9CisKKyAgLyogZGVzdHJveSB0aGUgYWRkcmluZm8gbGlzdCAqLworICBpZihhaWhlYWQpCisgICAgZnJlZWFkZHJpbmZvKGFpaGVhZCk7CisKKyAgLyogaWYgd2UgZmFpbGVkLCBhbHNvIGRlc3Ryb3kgdGhlIEN1cmxfYWRkcmluZm8gbGlzdCAqLworICBpZihlcnJvcikgeworICAgIEN1cmxfZnJlZWFkZHJpbmZvKGNhZmlyc3QpOworICAgIGNhZmlyc3QgPSBOVUxMOworICB9CisgIGVsc2UgaWYoIWNhZmlyc3QpIHsKKyNpZmRlZiBFQUlfTk9OQU1FCisgICAgLyogcmZjMzQ5MyBjb25mb3JtYW50ICovCisgICAgZXJyb3IgPSBFQUlfTk9OQU1FOworI2Vsc2UKKyAgICAvKiByZmMzNDkzIG9ic29sZXRlZCAqLworICAgIGVycm9yID0gRUFJX05PREFUQTsKKyNlbmRpZgorI2lmZGVmIFVTRV9XSU5TT0NLCisgICAgU0VUX1NPQ0tFUlJOTyhlcnJvcik7CisjZW5kaWYKKyAgfQorCisgICpyZXN1bHQgPSBjYWZpcnN0OworCisgIC8qIFRoaXMgaXMgbm90IGEgQ1VSTGNvZGUgKi8KKyAgcmV0dXJuIGVycm9yOworfQorI2VuZGlmIC8qIEhBVkVfR0VUQUREUklORk8gKi8KKworCisvKgorICogQ3VybF9oZTJhaSgpCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIG5ld2x5IGFsbG9jYXRlZAorICogQ3VybF9hZGRyaW5mbyBzdHJ1Y3QgbGlua2VkIGxpc3QgZmlsbGVkIHdpdGggdGhlIGRhdGEgb2YgYSBnaXZlbiBob3N0ZW50LgorICogQ3VybF9hZGRyaW5mbyBpcyBtZWFudCB0byB3b3JrIGxpa2UgdGhlIGFkZHJpbmZvIHN0cnVjdCBkb2VzIGZvciBhIElQdjYKKyAqIHN0YWNrLCBidXQgdXNhYmxlIGFsc28gZm9yIElQdjQsIGFsbCBob3N0cyBhbmQgZW52aXJvbm1lbnRzLgorICoKKyAqIFRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gKk1VU1QqIGJlIGZyZWUnZCBsYXRlciBvbiBjYWxsaW5nCisgKiBDdXJsX2ZyZWVhZGRyaW5mbygpLiAgRm9yIGVhY2ggc3VjY2Vzc2Z1bCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gdGhlcmUKKyAqIG11c3QgYmUgYW4gYXNzb2NpYXRlZCBjYWxsIGxhdGVyIHRvIEN1cmxfZnJlZWFkZHJpbmZvKCkuCisgKgorICogICBDdXJsX2FkZHJpbmZvIGRlZmluZWQgaW4gImxpYi9jdXJsX2FkZHJpbmZvLmgiCisgKgorICogICAgIHN0cnVjdCBDdXJsX2FkZHJpbmZvIHsKKyAqICAgICAgIGludCAgICAgICAgICAgICAgICAgICBhaV9mbGFnczsKKyAqICAgICAgIGludCAgICAgICAgICAgICAgICAgICBhaV9mYW1pbHk7CisgKiAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgYWlfc29ja3R5cGU7CisgKiAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgYWlfcHJvdG9jb2w7CisgKiAgICAgICBjdXJsX3NvY2tsZW5fdCAgICAgICAgYWlfYWRkcmxlbjsgICAqIEZvbGxvdyByZmMzNDkzIHN0cnVjdCBhZGRyaW5mbyAqCisgKiAgICAgICBjaGFyICAgICAgICAgICAgICAgICAqYWlfY2Fub25uYW1lOworICogICAgICAgc3RydWN0IHNvY2thZGRyICAgICAgKmFpX2FkZHI7CisgKiAgICAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWlfbmV4dDsKKyAqICAgICB9OworICogICAgIHR5cGVkZWYgc3RydWN0IEN1cmxfYWRkcmluZm8gQ3VybF9hZGRyaW5mbzsKKyAqCisgKiAgIGhvc3RlbnQgZGVmaW5lZCBpbiA8bmV0ZGIuaD4KKyAqCisgKiAgICAgc3RydWN0IGhvc3RlbnQgeworICogICAgICAgY2hhciAgICAqaF9uYW1lOworICogICAgICAgY2hhciAgICAqKmhfYWxpYXNlczsKKyAqICAgICAgIGludCAgICAgaF9hZGRydHlwZTsKKyAqICAgICAgIGludCAgICAgaF9sZW5ndGg7CisgKiAgICAgICBjaGFyICAgICoqaF9hZGRyX2xpc3Q7CisgKiAgICAgfTsKKyAqCisgKiAgIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorICoKKyAqICAgICAjZGVmaW5lIGhfYWRkciAgaF9hZGRyX2xpc3RbMF0KKyAqLworCitDdXJsX2FkZHJpbmZvICoKK0N1cmxfaGUyYWkoY29uc3Qgc3RydWN0IGhvc3RlbnQgKmhlLCBpbnQgcG9ydCkKK3sKKyAgQ3VybF9hZGRyaW5mbyAqYWk7CisgIEN1cmxfYWRkcmluZm8gKnByZXZhaSA9IE5VTEw7CisgIEN1cmxfYWRkcmluZm8gKmZpcnN0YWkgPSBOVUxMOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHI7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjY7CisjZW5kaWYKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGludCBpOworICBjaGFyICpjdXJyOworCisgIGlmKCFoZSkKKyAgICAvKiBubyBpbnB1dCA9PSBubyBvdXRwdXQhICovCisgICAgcmV0dXJuIE5VTEw7CisKKyAgREVCVUdBU1NFUlQoKGhlLT5oX25hbWUgIT0gTlVMTCkgJiYgKGhlLT5oX2FkZHJfbGlzdCAhPSBOVUxMKSk7CisKKyAgZm9yKGk9MDsgKGN1cnIgPSBoZS0+aF9hZGRyX2xpc3RbaV0pICE9IE5VTEw7IGkrKykgeworCisgICAgc2l6ZV90IHNzX3NpemU7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBpZihoZS0+aF9hZGRydHlwZSA9PSBBRl9JTkVUNikKKyAgICAgIHNzX3NpemUgPSBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgc3Nfc2l6ZSA9IHNpemVvZiAoc3RydWN0IHNvY2thZGRyX2luKTsKKworICAgIGlmKChhaSA9IGNhbGxvYygxLCBzaXplb2YoQ3VybF9hZGRyaW5mbykpKSA9PSBOVUxMKSB7CisgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmKChhaS0+YWlfY2Fub25uYW1lID0gc3RyZHVwKGhlLT5oX25hbWUpKSA9PSBOVUxMKSB7CisgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgZnJlZShhaSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYoKGFpLT5haV9hZGRyID0gY2FsbG9jKDEsIHNzX3NpemUpKSA9PSBOVUxMKSB7CisgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgZnJlZShhaS0+YWlfY2Fub25uYW1lKTsKKyAgICAgIGZyZWUoYWkpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYoIWZpcnN0YWkpCisgICAgICAvKiBzdG9yZSB0aGUgcG9pbnRlciB3ZSB3YW50IHRvIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24gKi8KKyAgICAgIGZpcnN0YWkgPSBhaTsKKworICAgIGlmKHByZXZhaSkKKyAgICAgIC8qIG1ha2UgdGhlIHByZXZpb3VzIGVudHJ5IHBvaW50IHRvIHRoaXMgKi8KKyAgICAgIHByZXZhaS0+YWlfbmV4dCA9IGFpOworCisgICAgYWktPmFpX2ZhbWlseSA9IGhlLT5oX2FkZHJ0eXBlOworCisgICAgLyogd2UgcmV0dXJuIGFsbCBuYW1lcyBhcyBTVFJFQU0sIHNvIHdoZW4gdXNpbmcgdGhpcyBhZGRyZXNzIGZvciBURlRQCisgICAgICAgdGhlIHR5cGUgbXVzdCBiZSBpZ25vcmVkIGFuZCBjb25uLT5zb2NrdHlwZSBiZSB1c2VkIGluc3RlYWQhICovCisgICAgYWktPmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisKKyAgICBhaS0+YWlfYWRkcmxlbiA9IChjdXJsX3NvY2tsZW5fdClzc19zaXplOworCisgICAgLyogbGVhdmUgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdCBmaWxsZWQgd2l0aCB6ZXJvICovCisKKyAgICBzd2l0Y2ggKGFpLT5haV9mYW1pbHkpIHsKKyAgICBjYXNlIEFGX0lORVQ6CisgICAgICBhZGRyID0gKHZvaWQgKilhaS0+YWlfYWRkcjsgLyogc3RvcmFnZSBhcmVhIGZvciB0aGlzIGluZm8gKi8KKworICAgICAgbWVtY3B5KCZhZGRyLT5zaW5fYWRkciwgY3Vyciwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisgICAgICBhZGRyLT5zaW5fZmFtaWx5ID0gKHVuc2lnbmVkIHNob3J0KShoZS0+aF9hZGRydHlwZSk7CisgICAgICBhZGRyLT5zaW5fcG9ydCA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydClwb3J0KTsKKyAgICAgIGJyZWFrOworCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgYWRkcjYgPSAodm9pZCAqKWFpLT5haV9hZGRyOyAvKiBzdG9yYWdlIGFyZWEgZm9yIHRoaXMgaW5mbyAqLworCisgICAgICBtZW1jcHkoJmFkZHI2LT5zaW42X2FkZHIsIGN1cnIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKyAgICAgIGFkZHI2LT5zaW42X2ZhbWlseSA9ICh1bnNpZ25lZCBzaG9ydCkoaGUtPmhfYWRkcnR5cGUpOworICAgICAgYWRkcjYtPnNpbjZfcG9ydCA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydClwb3J0KTsKKyAgICAgIGJyZWFrOworI2VuZGlmCisgICAgfQorCisgICAgcHJldmFpID0gYWk7CisgIH0KKworICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spIHsKKyAgICBDdXJsX2ZyZWVhZGRyaW5mbyhmaXJzdGFpKTsKKyAgICBmaXJzdGFpID0gTlVMTDsKKyAgfQorCisgIHJldHVybiBmaXJzdGFpOworfQorCisKK3N0cnVjdCBuYW1lYnVmZiB7CisgIHN0cnVjdCBob3N0ZW50IGhvc3RlbnRyeTsKKyAgdW5pb24geworICAgIHN0cnVjdCBpbl9hZGRyICBpbmE0OworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgc3RydWN0IGluNl9hZGRyIGluYTY7CisjZW5kaWYKKyAgfSBhZGRyZW50cnk7CisgIGNoYXIgKmhfYWRkcl9saXN0WzJdOworfTsKKworCisvKgorICogQ3VybF9pcDJhZGRyKCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIGludGVybmV0IGFkZHJlc3MsIGluIGJpbmFyeSBmb3JtLCBhcyBpbnB1dCBwYXJhbWV0ZXIKKyAqIGFsb25nIHdpdGggaXRzIGFkZHJlc3MgZmFtaWx5IGFuZCB0aGUgc3RyaW5nIHZlcnNpb24gb2YgdGhlIGFkZHJlc3MsIGFuZCBpdAorICogcmV0dXJucyBhIEN1cmxfYWRkcmluZm8gY2hhaW4gZmlsbGVkIGluIGNvcnJlY3RseSB3aXRoIGluZm9ybWF0aW9uIGZvciB0aGUKKyAqIGdpdmVuIGFkZHJlc3MvaG9zdAorICovCisKK0N1cmxfYWRkcmluZm8gKgorQ3VybF9pcDJhZGRyKGludCBhZiwgY29uc3Qgdm9pZCAqaW5hZGRyLCBjb25zdCBjaGFyICpob3N0bmFtZSwgaW50IHBvcnQpCit7CisgIEN1cmxfYWRkcmluZm8gKmFpOworCisjaWYgZGVmaW5lZChfX1ZNUykgJiYgXAorICAgIGRlZmluZWQoX19JTklUSUFMX1BPSU5URVJfU0laRSkgJiYgKF9fSU5JVElBTF9QT0lOVEVSX1NJWkUgPT0gNjQpCisjcHJhZ21hIHBvaW50ZXJfc2l6ZSBzYXZlCisjcHJhZ21hIHBvaW50ZXJfc2l6ZSBzaG9ydAorI3ByYWdtYSBtZXNzYWdlIGRpc2FibGUgUFRSTUlTTUFUQ0gKKyNlbmRpZgorCisgIHN0cnVjdCBob3N0ZW50ICAqaDsKKyAgc3RydWN0IG5hbWVidWZmICpidWY7CisgIGNoYXIgICphZGRyZW50cnk7CisgIGNoYXIgICpob3N0c3RyOworICBzaXplX3QgYWRkcnNpemU7CisKKyAgREVCVUdBU1NFUlQoaW5hZGRyICYmIGhvc3RuYW1lKTsKKworICBidWYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBuYW1lYnVmZikpOworICBpZighYnVmKQorICAgIHJldHVybiBOVUxMOworCisgIGhvc3RzdHIgPSBzdHJkdXAoaG9zdG5hbWUpOworICBpZighaG9zdHN0cikgeworICAgIGZyZWUoYnVmKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHN3aXRjaChhZikgeworICBjYXNlIEFGX0lORVQ6CisgICAgYWRkcnNpemUgPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOworICAgIGFkZHJlbnRyeSA9ICh2b2lkICopJmJ1Zi0+YWRkcmVudHJ5LmluYTQ7CisgICAgbWVtY3B5KGFkZHJlbnRyeSwgaW5hZGRyLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKyAgICBicmVhazsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBjYXNlIEFGX0lORVQ2OgorICAgIGFkZHJzaXplID0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CisgICAgYWRkcmVudHJ5ID0gKHZvaWQgKikmYnVmLT5hZGRyZW50cnkuaW5hNjsKKyAgICBtZW1jcHkoYWRkcmVudHJ5LCBpbmFkZHIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKyAgICBicmVhazsKKyNlbmRpZgorICBkZWZhdWx0OgorICAgIGZyZWUoaG9zdHN0cik7CisgICAgZnJlZShidWYpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgaCA9ICZidWYtPmhvc3RlbnRyeTsKKyAgaC0+aF9uYW1lID0gaG9zdHN0cjsKKyAgaC0+aF9hbGlhc2VzID0gTlVMTDsKKyAgaC0+aF9hZGRydHlwZSA9IChzaG9ydClhZjsKKyAgaC0+aF9sZW5ndGggPSAoc2hvcnQpYWRkcnNpemU7CisgIGgtPmhfYWRkcl9saXN0ID0gJmJ1Zi0+aF9hZGRyX2xpc3RbMF07CisgIGgtPmhfYWRkcl9saXN0WzBdID0gYWRkcmVudHJ5OworICBoLT5oX2FkZHJfbGlzdFsxXSA9IE5VTEw7IC8qIHRlcm1pbmF0ZSBsaXN0IG9mIGVudHJpZXMgKi8KKworI2lmIGRlZmluZWQoX19WTVMpICYmIFwKKyAgICBkZWZpbmVkKF9fSU5JVElBTF9QT0lOVEVSX1NJWkUpICYmIChfX0lOSVRJQUxfUE9JTlRFUl9TSVpFID09IDY0KQorI3ByYWdtYSBwb2ludGVyX3NpemUgcmVzdG9yZQorI3ByYWdtYSBtZXNzYWdlIGVuYWJsZSBQVFJNSVNNQVRDSAorI2VuZGlmCisKKyAgYWkgPSBDdXJsX2hlMmFpKGgsIHBvcnQpOworCisgIGZyZWUoaG9zdHN0cik7CisgIGZyZWUoYnVmKTsKKworICByZXR1cm4gYWk7Cit9CisKKy8qCisgKiBHaXZlbiBhbiBJUHY0IG9yIElQdjYgZG90dGVkIHN0cmluZyBhZGRyZXNzLCB0aGlzIGNvbnZlcnRzIGl0IHRvIGEgcHJvcGVyCisgKiBhbGxvY2F0ZWQgQ3VybF9hZGRyaW5mbyBzdHJ1Y3QgYW5kIHJldHVybnMgaXQuCisgKi8KK0N1cmxfYWRkcmluZm8gKkN1cmxfc3RyMmFkZHIoY2hhciAqYWRkcmVzcywgaW50IHBvcnQpCit7CisgIHN0cnVjdCBpbl9hZGRyIGluOworICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBhZGRyZXNzLCAmaW4pID4gMCkKKyAgICAvKiBUaGlzIGlzIGEgZG90dGVkIElQIGFkZHJlc3MgMTIzLjEyMy4xMjMuMTIzLXN0eWxlICovCisgICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVULCAmaW4sIGFkZHJlc3MsIHBvcnQpOworI2lmZGVmIEVOQUJMRV9JUFY2CisgIGVsc2UgeworICAgIHN0cnVjdCBpbjZfYWRkciBpbjY7CisgICAgaWYoQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGFkZHJlc3MsICZpbjYpID4gMCkKKyAgICAgIC8qIFRoaXMgaXMgYSBkb3R0ZWQgSVB2NiBhZGRyZXNzIDo6MS1zdHlsZSAqLworICAgICAgcmV0dXJuIEN1cmxfaXAyYWRkcihBRl9JTkVUNiwgJmluNiwgYWRkcmVzcywgcG9ydCk7CisgIH0KKyNlbmRpZgorICByZXR1cm4gTlVMTDsgLyogYmFkIGlucHV0IGZvcm1hdCAqLworfQorCisjaWYgZGVmaW5lZChDVVJMREVCVUcpICYmIGRlZmluZWQoSEFWRV9GUkVFQUREUklORk8pCisvKgorICogY3VybF9kb2ZyZWVhZGRyaW5mbygpCisgKgorICogVGhpcyBpcyBzdHJpY3RseSBmb3IgbWVtb3J5IHRyYWNpbmcgYW5kIGFyZSB1c2luZyB0aGUgc2FtZSBzdHlsZSBhcyB0aGUKKyAqIGZhbWlseSBvdGhlcndpc2UgcHJlc2VudCBpbiBtZW1kZWJ1Zy5jLiBJIHB1dCB0aGVzZSBvbmVzIGhlcmUgc2luY2UgdGhleQorICogcmVxdWlyZSBhIGJ1bmNoIG9mIHN0cnVjdHMgSSBkaWRuJ3Qgd2FudCB0byBpbmNsdWRlIGluIG1lbWRlYnVnLmMKKyAqLworCit2b2lkCitjdXJsX2RvZnJlZWFkZHJpbmZvKHN0cnVjdCBhZGRyaW5mbyAqZnJlZXRoaXMsCisgICAgICAgICAgICAgICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICpzb3VyY2UpCit7CisgIChmcmVlYWRkcmluZm8pKGZyZWV0aGlzKTsKKyAgY3VybF9tZW1sb2coIkFERFIgJXM6JWQgZnJlZWFkZHJpbmZvKCVwKVxuIiwKKyAgICAgICAgICAgICAgc291cmNlLCBsaW5lLCAodm9pZCAqKWZyZWV0aGlzKTsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKENVUkxERUJVRykgJiYgZGVmaW5lZChIQVZFX0ZSRUVBRERSSU5GTykgKi8KKworCisjaWYgZGVmaW5lZChDVVJMREVCVUcpICYmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykKKy8qCisgKiBjdXJsX2RvZ2V0YWRkcmluZm8oKQorICoKKyAqIFRoaXMgaXMgc3RyaWN0bHkgZm9yIG1lbW9yeSB0cmFjaW5nIGFuZCBhcmUgdXNpbmcgdGhlIHNhbWUgc3R5bGUgYXMgdGhlCisgKiBmYW1pbHkgb3RoZXJ3aXNlIHByZXNlbnQgaW4gbWVtZGVidWcuYy4gSSBwdXQgdGhlc2Ugb25lcyBoZXJlIHNpbmNlIHRoZXkKKyAqIHJlcXVpcmUgYSBidW5jaCBvZiBzdHJ1Y3RzIEkgZGlkbid0IHdhbnQgdG8gaW5jbHVkZSBpbiBtZW1kZWJ1Zy5jCisgKi8KKworaW50CitjdXJsX2RvZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2VydmljZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICBpbnQgbGluZSwgY29uc3QgY2hhciAqc291cmNlKQoreworICBpbnQgcmVzPShnZXRhZGRyaW5mbykoaG9zdG5hbWUsIHNlcnZpY2UsIGhpbnRzLCByZXN1bHQpOworICBpZigwID09IHJlcykKKyAgICAvKiBzdWNjZXNzICovCisgICAgY3VybF9tZW1sb2coIkFERFIgJXM6JWQgZ2V0YWRkcmluZm8oKSA9ICVwXG4iLAorICAgICAgICAgICAgICAgIHNvdXJjZSwgbGluZSwgKHZvaWQgKikqcmVzdWx0KTsKKyAgZWxzZQorICAgIGN1cmxfbWVtbG9nKCJBRERSICVzOiVkIGdldGFkZHJpbmZvKCkgZmFpbGVkXG4iLAorICAgICAgICAgICAgICAgIHNvdXJjZSwgbGluZSk7CisgIHJldHVybiByZXM7Cit9CisjZW5kaWYgLyogZGVmaW5lZChDVVJMREVCVUcpICYmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykgKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2N1cmxfYWRkcmluZm8uaCBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2FkZHJpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjMzM5NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2FkZHJpbmZvLmgKQEAgLTAsMCArMSwxMDAgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfQUREUklORk9fSAorI2RlZmluZSBIRUFERVJfQ1VSTF9BRERSSU5GT19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisKKyNpZmRlZiBfX1ZNUworIyAgaW5jbHVkZSA8aW4uaD4KKyMgIGluY2x1ZGUgPGluZXQuaD4KKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKKworLyoKKyAqIEN1cmxfYWRkcmluZm8gaXMgb3VyIGludGVybmFsIHN0cnVjdCBkZWZpbml0aW9uIHRoYXQgd2UgdXNlIHRvIGFsbG93CisgKiBjb25zaXN0ZW50IGludGVybmFsIGhhbmRsaW5nIG9mIHRoaXMgZGF0YS4gV2UgdXNlIHRoaXMgZXZlbiB3aGVuIHRoZQorICogc3lzdGVtIHByb3ZpZGVzIGFuIGFkZHJpbmZvIHN0cnVjdHVyZSBkZWZpbml0aW9uLiBBbmQgd2UgdXNlIHRoaXMgZm9yCisgKiBhbGwgc29ydHMgb2YgSVB2NCBhbmQgSVBWNiBidWlsZHMuCisgKi8KKworc3RydWN0IEN1cmxfYWRkcmluZm8geworICBpbnQgICAgICAgICAgICAgICAgICAgYWlfZmxhZ3M7CisgIGludCAgICAgICAgICAgICAgICAgICBhaV9mYW1pbHk7CisgIGludCAgICAgICAgICAgICAgICAgICBhaV9zb2NrdHlwZTsKKyAgaW50ICAgICAgICAgICAgICAgICAgIGFpX3Byb3RvY29sOworICBjdXJsX3NvY2tsZW5fdCAgICAgICAgYWlfYWRkcmxlbjsgICAvKiBGb2xsb3cgcmZjMzQ5MyBzdHJ1Y3QgYWRkcmluZm8gKi8KKyAgY2hhciAgICAgICAgICAgICAgICAgKmFpX2Nhbm9ubmFtZTsKKyAgc3RydWN0IHNvY2thZGRyICAgICAgKmFpX2FkZHI7CisgIHN0cnVjdCBDdXJsX2FkZHJpbmZvICphaV9uZXh0OworfTsKK3R5cGVkZWYgc3RydWN0IEN1cmxfYWRkcmluZm8gQ3VybF9hZGRyaW5mbzsKKwordm9pZAorQ3VybF9mcmVlYWRkcmluZm8oQ3VybF9hZGRyaW5mbyAqY2FoZWFkKTsKKworI2lmZGVmIEhBVkVfR0VUQUREUklORk8KK2ludAorQ3VybF9nZXRhZGRyaW5mb19leChjb25zdCBjaGFyICpub2RlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2Vydm5hbWUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsCisgICAgICAgICAgICAgICAgICAgIEN1cmxfYWRkcmluZm8gKipyZXN1bHQpOworI2VuZGlmCisKK0N1cmxfYWRkcmluZm8gKgorQ3VybF9oZTJhaShjb25zdCBzdHJ1Y3QgaG9zdGVudCAqaGUsIGludCBwb3J0KTsKKworQ3VybF9hZGRyaW5mbyAqCitDdXJsX2lwMmFkZHIoaW50IGFmLCBjb25zdCB2b2lkICppbmFkZHIsIGNvbnN0IGNoYXIgKmhvc3RuYW1lLCBpbnQgcG9ydCk7CisKK0N1cmxfYWRkcmluZm8gKkN1cmxfc3RyMmFkZHIoY2hhciAqZG90dGVkLCBpbnQgcG9ydCk7CisKKyNpZiBkZWZpbmVkKENVUkxERUJVRykgJiYgZGVmaW5lZChIQVZFX0ZSRUVBRERSSU5GTykKK3ZvaWQKK2N1cmxfZG9mcmVlYWRkcmluZm8oc3RydWN0IGFkZHJpbmZvICpmcmVldGhpcywKKyAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnNvdXJjZSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ1VSTERFQlVHKSAmJiBkZWZpbmVkKEhBVkVfR0VUQUREUklORk8pCitpbnQKK2N1cmxfZG9nZXRhZGRyaW5mbyhjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IGFkZHJpbmZvICoqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICpzb3VyY2UpOworI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9BRERSSU5GT19IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybF9iYXNlNjQuaCBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2Jhc2U2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMjAwZDIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY3VybF9iYXNlNjQuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0JBU0U2NF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0JBU0U2NF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQ1VSTGNvZGUgQ3VybF9iYXNlNjRfZW5jb2RlKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0YnVmZiwgc2l6ZV90IGluc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0cHRyLCBzaXplX3QgKm91dGxlbik7CisKK0NVUkxjb2RlIEN1cmxfYmFzZTY0X2RlY29kZShjb25zdCBjaGFyICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKm91dHB0ciwgc2l6ZV90ICpvdXRsZW4pOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfQkFTRTY0X0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2NvbmZpZy5oLmNtYWtlIGIvY3VybC03LjI1LjAvbGliL2N1cmxfY29uZmlnLmguY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyMTMwMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2NvbmZpZy5oLmNtYWtlCkBAIC0wLDAgKzEsOTUwIEBACisvKiBsaWIvY3VybF9jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKworLyogd2hlbiBidWlsZGluZyBsaWJjdXJsIGl0c2VsZiAqLworI2NtYWtlZGVmaW5lIEJVSUxESU5HX0xJQkNVUkwgJHtCVUlMRElOR19MSUJDVVJMfQorCisvKiBMb2NhdGlvbiBvZiBkZWZhdWx0IGNhIGJ1bmRsZSAqLworI2NtYWtlZGVmaW5lIENVUkxfQ0FfQlVORExFICR7Q1VSTF9DQV9CVU5ETEV9CisKKy8qIExvY2F0aW9uIG9mIGRlZmF1bHQgY2EgcGF0aCAqLworI2NtYWtlZGVmaW5lIENVUkxfQ0FfUEFUSCAke0NVUkxfQ0FfUEFUSH0KKworLyogdG8gZGlzYWJsZSBjb29raWVzIHN1cHBvcnQgKi8KKyNjbWFrZWRlZmluZSBDVVJMX0RJU0FCTEVfQ09PS0lFUyAke0NVUkxfRElTQUJMRV9DT09LSUVTfQorCisvKiB0byBkaXNhYmxlIGNyeXB0b2dyYXBoaWMgYXV0aGVudGljYXRpb24gKi8KKyNjbWFrZWRlZmluZSBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEggJHtDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEh9CisKKy8qIHRvIGRpc2FibGUgRElDVCAqLworI2NtYWtlZGVmaW5lIENVUkxfRElTQUJMRV9ESUNUICR7Q1VSTF9ESVNBQkxFX0RJQ1R9CisKKy8qIHRvIGRpc2FibGUgRklMRSAqLworI2NtYWtlZGVmaW5lIENVUkxfRElTQUJMRV9GSUxFICR7Q1VSTF9ESVNBQkxFX0ZJTEV9CisKKy8qIHRvIGRpc2FibGUgRlRQICovCisjY21ha2VkZWZpbmUgQ1VSTF9ESVNBQkxFX0ZUUCAke0NVUkxfRElTQUJMRV9GVFB9CisKKy8qIHRvIGRpc2FibGUgSFRUUCAqLworI2NtYWtlZGVmaW5lIENVUkxfRElTQUJMRV9IVFRQICR7Q1VSTF9ESVNBQkxFX0hUVFB9CisKKy8qIHRvIGRpc2FibGUgTERBUCAqLworI2NtYWtlZGVmaW5lIENVUkxfRElTQUJMRV9MREFQICR7Q1VSTF9ESVNBQkxFX0xEQVB9CisKKy8qIHRvIGRpc2FibGUgTERBUFMgKi8KKyNjbWFrZWRlZmluZSBDVVJMX0RJU0FCTEVfTERBUFMgJHtDVVJMX0RJU0FCTEVfTERBUFN9CisKKy8qIHRvIGRpc2FibGUgcHJveGllcyAqLworI2NtYWtlZGVmaW5lIENVUkxfRElTQUJMRV9QUk9YWSAke0NVUkxfRElTQUJMRV9QUk9YWX0KKworLyogdG8gZGlzYWJsZSBURUxORVQgKi8KKyNjbWFrZWRlZmluZSBDVVJMX0RJU0FCTEVfVEVMTkVUICR7Q1VSTF9ESVNBQkxFX1RFTE5FVH0KKworLyogdG8gZGlzYWJsZSBURlRQICovCisjY21ha2VkZWZpbmUgQ1VSTF9ESVNBQkxFX1RGVFAgJHtDVVJMX0RJU0FCTEVfVEZUUH0KKworLyogdG8gZGlzYWJsZSB2ZXJib3NlIHN0cmluZ3MgKi8KKyNjbWFrZWRlZmluZSBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTICR7Q1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HU30KKworLyogdG8gbWFrZSBhIHN5bWJvbCB2aXNpYmxlICovCisjY21ha2VkZWZpbmUgQ1VSTF9FWFRFUk5fU1lNQk9MICR7Q1VSTF9FWFRFUk5fU1lNQk9MfQorLyogRW5zdXJlIHVzaW5nIENVUkxfRVhURVJOX1NZTUJPTCBpcyBwb3NzaWJsZSAqLworI2lmbmRlZiBDVVJMX0VYVEVSTl9TWU1CT0wKKyNkZWZpbmUgQ1VSTF9FWFRFUk5fU1lNQk9MCisjZW5kaWYKKworLyogdG8gZW5hYmxlIGhpZGRlbiBzeW1ib2xzICovCisjY21ha2VkZWZpbmUgQ1VSTF9ISURERU5fU1lNQk9MUyAke0NVUkxfSElEREVOX1NZTUJPTFN9CisKKy8qIFVzZSBXaW5kb3dzIExEQVAgaW1wbGVtZW50YXRpb24gKi8KKyNjbWFrZWRlZmluZSBDVVJMX0xEQVBfV0lOICR7Q1VSTF9MREFQX1dJTn0KKworLyogd2hlbiBub3QgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSAqLworI2NtYWtlZGVmaW5lIENVUkxfU1RBVElDTElCICR7Q1VSTF9TVEFUSUNMSUJ9CisKKy8qIFNldCB0byBleHBsaWNpdGx5IHNwZWNpZnkgd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhyZWFkLXNhZmUgZnVuY3Rpb25zICovCisjY21ha2VkZWZpbmUgRElTQUJMRURfVEhSRUFEU0FGRSAke0RJU0FCTEVEX1RIUkVBRFNBRkV9CisKKy8qIHlvdXIgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldCBwYXRobmFtZSAqLworI2NtYWtlZGVmaW5lIEVHRF9TT0NLRVQgJHtFR0RfU09DS0VUfQorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydCAqLworI2NtYWtlZGVmaW5lIEVOQUJMRV9JUFY2ICR7RU5BQkxFX0lQVjZ9CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI2NtYWtlZGVmaW5lIEdFVE5BTUVJTkZPX1FVQUxfQVJHMSAke0dFVE5BTUVJTkZPX1FVQUxfQVJHMX0KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBnZXRuYW1laW5mby4gKi8KKyNjbWFrZWRlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzEgJHtHRVROQU1FSU5GT19UWVBFX0FSRzF9CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgZ2V0bmFtZWluZm8uICovCisjY21ha2VkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcyICR7R0VUTkFNRUlORk9fVFlQRV9BUkcyfQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyA0IGFuZCA2IGZvciBnZXRuYW1laW5mby4gKi8KKyNjbWFrZWRlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzQ2ICR7R0VUTkFNRUlORk9fVFlQRV9BUkc0Nn0KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA3IGZvciBnZXRuYW1laW5mby4gKi8KKyNjbWFrZWRlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzcgJHtHRVROQU1FSU5GT19UWVBFX0FSRzd9CisKKy8qIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBnZXRzZXJ2Ynlwb3J0X3IgKi8KKyNjbWFrZWRlZmluZSBHRVRTRVJWQllQT1JUX1JfQVJHUyAke0dFVFNFUlZCWVBPUlRfUl9BUkdTfQorCisvKiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byBwYXNzIHRvIGdldHNlcnZieXBvcnRfciAqLworI2NtYWtlZGVmaW5lIEdFVFNFUlZCWVBPUlRfUl9CVUZTSVpFICR7R0VUU0VSVkJZUE9SVF9SX0JVRlNJWkV9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBhbGFybSBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0FMQVJNICR7SEFWRV9BTEFSTX0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhbGxvY2EuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9BTExPQ0FfSCAke0hBVkVfQUxMT0NBX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXJwYS9pbmV0Lmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0ggJHtIQVZFX0FSUEFfSU5FVF9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvdGZ0cC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0FSUEFfVEZUUF9IICR7SEFWRV9BUlBBX1RGVFBfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhc3NlcnQuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9BU1NFUlRfSCAke0hBVkVfQVNTRVJUX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmFzZW5hbWUnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfQkFTRU5BTUUgJHtIQVZFX0JBU0VOQU1FfQorCisvKiBEZWZpbmUgdG8gMSBpZiBib29sIGlzIGFuIGF2YWlsYWJsZSB0eXBlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfQk9PTF9UICR7SEFWRV9CT09MX1R9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBjbG9ja19nZXR0aW1lIGZ1bmN0aW9uIGFuZCBtb25vdG9uaWMgdGltZXIuICovCisjY21ha2VkZWZpbmUgSEFWRV9DTE9DS19HRVRUSU1FX01PTk9UT05JQyAke0hBVkVfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUN9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvc2Vzb2NrZXQnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfQ0xPU0VTT0NLRVQgJHtIQVZFX0NMT1NFU09DS0VUfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYENSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0NSWVBUT19DTEVBTlVQX0FMTF9FWF9EQVRBICR7SEFWRV9DUllQVE9fQ0xFQU5VUF9BTExfRVhfREFUQX0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9DUllQVE9fSCAke0hBVkVfQ1JZUFRPX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfREVTX0ggJHtIQVZFX0RFU19IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfRExGQ05fSCAke0hBVkVfRExGQ05fSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXMnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfRU5HSU5FX0xPQURfQlVJTFRJTl9FTkdJTkVTICR7SEFWRV9FTkdJTkVfTE9BRF9CVUlMVElOX0VOR0lORVN9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9FUlJOT19IICR7SEFWRV9FUlJOT19IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVyci5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0VSUl9IICR7SEFWRV9FUlJfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZjbnRsIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfRkNOVEwgJHtIQVZFX0ZDTlRMfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfRkNOVExfSCAke0hBVkVfRkNOVExfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGZjbnRsIE9fTk9OQkxPQ0sgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9GQ05UTF9PX05PTkJMT0NLICR7SEFWRV9GQ05UTF9PX05PTkJMT0NLfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZmRvcGVuIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfRkRPUEVOICR7SEFWRV9GRE9QRU59CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZm9yaycgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9GT1JLICR7SEFWRV9GT1JLfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZnJlZWFkZHJpbmZvIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfRlJFRUFERFJJTkZPICR7SEFWRV9GUkVFQUREUklORk99CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmcmVlaWZhZGRycyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0ZSRUVJRkFERFJTICR7SEFWRV9GUkVFSUZBRERSU30KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZ0cnVuY2F0ZSBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0ZUUlVOQ0FURSAke0hBVkVfRlRSVU5DQVRFfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ2V0YWRkcmluZm8gZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAke0hBVkVfR0VUQUREUklORk99CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0ZXVpZCcgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9HRVRFVUlEICR7SEFWRV9HRVRFVUlEfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkciBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0dFVEhPU1RCWUFERFIgJHtIQVZFX0dFVEhPU1RCWUFERFJ9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnlhZGRyX3IgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSX1IgJHtIQVZFX0dFVEhPU1RCWUFERFJfUn0KKworLyogZ2V0aG9zdGJ5YWRkcl9yKCkgdGFrZXMgNSBhcmdzICovCisjY21ha2VkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSX1JfNSAke0hBVkVfR0VUSE9TVEJZQUREUl9SXzV9CisKKy8qIGdldGhvc3RieWFkZHJfcigpIHRha2VzIDcgYXJncyAqLworI2NtYWtlZGVmaW5lIEhBVkVfR0VUSE9TVEJZQUREUl9SXzcgJHtIQVZFX0dFVEhPU1RCWUFERFJfUl83fQorCisvKiBnZXRob3N0YnlhZGRyX3IoKSB0YWtlcyA4IGFyZ3MgKi8KKyNjbWFrZWRlZmluZSBIQVZFX0dFVEhPU1RCWUFERFJfUl84ICR7SEFWRV9HRVRIT1NUQllBRERSX1JfOH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWUgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FICR7SEFWRV9HRVRIT1NUQllOQU1FfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5bmFtZV9yIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SICR7SEFWRV9HRVRIT1NUQllOQU1FX1J9CisKKy8qIGdldGhvc3RieW5hbWVfcigpIHRha2VzIDMgYXJncyAqLworI2NtYWtlZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzMgJHtIQVZFX0dFVEhPU1RCWU5BTUVfUl8zfQorCisvKiBnZXRob3N0YnluYW1lX3IoKSB0YWtlcyA1IGFyZ3MgKi8KKyNjbWFrZWRlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUl81ICR7SEFWRV9HRVRIT1NUQllOQU1FX1JfNX0KKworLyogZ2V0aG9zdGJ5bmFtZV9yKCkgdGFrZXMgNiBhcmdzICovCisjY21ha2VkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1JfNiAke0hBVkVfR0VUSE9TVEJZTkFNRV9SXzZ9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0bmFtZSBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0dFVEhPU1ROQU1FICR7SEFWRV9HRVRIT1NUTkFNRX0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGdldGlmYWRkcnMgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9HRVRJRkFERFJTICR7SEFWRV9HRVRJRkFERFJTfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0bmFtZWluZm8gZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9HRVROQU1FSU5GTyAke0hBVkVfR0VUTkFNRUlORk99CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGFzc19yJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0dFVFBBU1NfUiAke0hBVkVfR0VUUEFTU19SfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBwaWQnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfR0VUUFBJRCAke0hBVkVfR0VUUFBJRH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwcm90b2J5bmFtZScgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9HRVRQUk9UT0JZTkFNRSAke0hBVkVfR0VUUFJPVE9CWU5BTUV9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHd1aWQnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfR0VUUFdVSUQgJHtIQVZFX0dFVFBXVUlEfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHJsaW1pdCcgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9HRVRSTElNSVQgJHtIQVZFX0dFVFJMSU1JVH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldHNlcnZieXBvcnRfciBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0dFVFNFUlZCWVBPUlRfUiAke0hBVkVfR0VUU0VSVkJZUE9SVF9SfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHRpbWVvZmRheScgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgJHtIQVZFX0dFVFRJTUVPRkRBWX0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGdsaWJjLXN0eWxlIHN0cmVycm9yX3IgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9HTElCQ19TVFJFUlJPUl9SICR7SEFWRV9HTElCQ19TVFJFUlJPUl9SfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ210aW1lX3IgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9HTVRJTUVfUiAke0hBVkVfR01USU1FX1J9CisKKy8qIGlmIHlvdSBoYXZlIHRoZSBnc3NhcGkgbGlicmFyaWVzICovCisjY21ha2VkZWZpbmUgSEFWRV9HU1NBUEkgJHtIQVZFX0dTU0FQSX0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnc3NhcGkvZ3NzYXBpX2dlbmVyaWMuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9HU1NBUElfR1NTQVBJX0dFTkVSSUNfSCAke0hBVkVfR1NTQVBJX0dTU0FQSV9HRU5FUklDX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Z3NzYXBpL2dzc2FwaS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0dTU0FQSV9HU1NBUElfSCAke0hBVkVfR1NTQVBJX0dTU0FQSV9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGdzc2FwaS9nc3NhcGlfa3JiNS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0dTU0FQSV9HU1NBUElfS1JCNV9IICR7SEFWRV9HU1NBUElfR1NTQVBJX0tSQjVfSH0KKworLyogaWYgeW91IGhhdmUgdGhlIEdOVSBnc3NhcGkgbGlicmFyaWVzICovCisjY21ha2VkZWZpbmUgSEFWRV9HU1NHTlUgJHtIQVZFX0dTU0dOVX0KKworLyogaWYgeW91IGhhdmUgdGhlIEhlaW1kYWwgZ3NzYXBpIGxpYnJhcmllcyAqLworI2NtYWtlZGVmaW5lIEhBVkVfR1NTSEVJTURBTCAke0hBVkVfR1NTSEVJTURBTH0KKworLyogaWYgeW91IGhhdmUgdGhlIE1JVCBnc3NhcGkgbGlicmFyaWVzICovCisjY21ha2VkZWZpbmUgSEFWRV9HU1NNSVQgJHtIQVZFX0dTU01JVH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZG5hX3N0cmVycm9yJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0lETkFfU1RSRVJST1IgJHtIQVZFX0lETkFfU1RSRVJST1J9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRuX2ZyZWUnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfSUROX0ZSRUUgJHtIQVZFX0lETl9GUkVFfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGlkbi1mcmVlLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfSUROX0ZSRUVfSCAke0hBVkVfSUROX0ZSRUVfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpZmFkZHJzLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfSUZBRERSU19IICR7SEFWRV9JRkFERFJTX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9hZGRyJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0lORVRfQUREUiAke0hBVkVfSU5FVF9BRERSfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW5ldF9udG9hX3IgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9JTkVUX05UT0FfUiAke0hBVkVfSU5FVF9OVE9BX1J9CisKKy8qIGluZXRfbnRvYV9yKCkgdGFrZXMgMiBhcmdzICovCisjY21ha2VkZWZpbmUgSEFWRV9JTkVUX05UT0FfUl8yICR7SEFWRV9JTkVUX05UT0FfUl8yfQorCisvKiBpbmV0X250b2FfcigpIHRha2VzIDMgYXJncyAqLworI2NtYWtlZGVmaW5lIEhBVkVfSU5FVF9OVE9BX1JfMyAke0hBVkVfSU5FVF9OVE9BX1JfM30KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSBJUHY2IGNhcGFibGUgd29ya2luZyBpbmV0X250b3AgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9JTkVUX05UT1AgJHtIQVZFX0lORVRfTlRPUH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSBJUHY2IGNhcGFibGUgd29ya2luZyBpbmV0X3B0b24gZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9JTkVUX1BUT04gJHtIQVZFX0lORVRfUFRPTn0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0lOVFRZUEVTX0ggJHtIQVZFX0lOVFRZUEVTX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBpb2N0bCBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0lPQ1RMICR7SEFWRV9JT0NUTH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGlvY3Rsc29ja2V0IGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfSU9DVExTT0NLRVQgJHtIQVZFX0lPQ1RMU09DS0VUfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgSW9jdGxTb2NrZXQgY2FtZWwgY2FzZSBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMICR7SEFWRV9JT0NUTFNPQ0tFVF9DQU1FTH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIElvY3RsU29ja2V0IGNhbWVsIGNhc2UgRklPTkJJTyBmdW5jdGlvbi4KKyAgICovCisjY21ha2VkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTF9GSU9OQklPICR7SEFWRV9JT0NUTFNPQ0tFVF9DQU1FTF9GSU9OQklPfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGxzb2NrZXQgRklPTkJJTyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU8gJHtIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU99CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBpb2N0bCBGSU9OQklPIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfSU9DVExfRklPTkJJTyAke0hBVkVfSU9DVExfRklPTkJJT30KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3RsIFNJT0NHSUZBRERSIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfSU9DVExfU0lPQ0dJRkFERFIgJHtIQVZFX0lPQ1RMX1NJT0NHSUZBRERSfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGlvLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfSU9fSCAke0hBVkVfSU9fSH0KKworLyogaWYgeW91IGhhdmUgdGhlIEtlcmJlcm9zNCBsaWJyYXJpZXMgKGluY2x1ZGluZyAtbGRlcykgKi8KKyNjbWFrZWRlZmluZSBIQVZFX0tSQjQgJHtIQVZFX0tSQjR9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3JiX2dldF9vdXJfaXBfZm9yX3JlYWxtJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0tSQl9HRVRfT1VSX0lQX0ZPUl9SRUFMTSAke0hBVkVfS1JCX0dFVF9PVVJfSVBfRk9SX1JFQUxNfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGtyYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0tSQl9IICR7SEFWRV9LUkJfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGxiZXIuaCBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0xCRVJfSCAke0hBVkVfTEJFUl9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbGRhcHNzbC5oIGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfTERBUFNTTF9IICR7SEFWRV9MREFQU1NMX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBsZGFwLmggaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9MREFQX0ggJHtIQVZFX0xEQVBfSH0KKworLyogVXNlIExEQVBTIGltcGxlbWVudGF0aW9uICovCisjY21ha2VkZWZpbmUgSEFWRV9MREFQX1NTTCAke0hBVkVfTERBUF9TU0x9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBsZGFwX3NzbC5oIGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfTERBUF9TU0xfSCAke0hBVkVfTERBUF9TU0xfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsZGFwX3VybF9wYXJzZScgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9MREFQX1VSTF9QQVJTRSAke0hBVkVfTERBUF9VUkxfUEFSU0V9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGliZ2VuLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfTElCR0VOX0ggJHtIQVZFX0xJQkdFTl9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlkbicgbGlicmFyeSAoLWxpZG4pLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfTElCSUROICR7SEFWRV9MSUJJRE59CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVzb2x2JyBsaWJyYXJ5ICgtbHJlc29sdikuICovCisjY21ha2VkZWZpbmUgSEFWRV9MSUJSRVNPTFYgJHtIQVZFX0xJQlJFU09MVn0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZXNvbHZlJyBsaWJyYXJ5ICgtbHJlc29sdmUpLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfTElCUkVTT0xWRSAke0hBVkVfTElCUkVTT0xWRX0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGxpYnJhcnkgKC1sc29ja2V0KS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0xJQlNPQ0tFVCAke0hBVkVfTElCU09DS0VUfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNzaDInIGxpYnJhcnkgKC1sc3NoMikuICovCisjY21ha2VkZWZpbmUgSEFWRV9MSUJTU0gyICR7SEFWRV9MSUJTU0gyfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpYnNzaDIuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9MSUJTU0gyX0ggJHtIQVZFX0xJQlNTSDJfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzc2wnIGxpYnJhcnkgKC1sc3NsKS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0xJQlNTTCAke0hBVkVfTElCU1NMfQorCisvKiBpZiB6bGliIGlzIGF2YWlsYWJsZSAqLworI2NtYWtlZGVmaW5lIEhBVkVfTElCWiAke0hBVkVfTElCWn0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9MSU1JVFNfSCAke0hBVkVfTElNSVRTX0h9CisKKy8qIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgTEwgKi8KKyNjbWFrZWRlZmluZSBIQVZFX0xMICR7SEFWRV9MTH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsb2NhbGUuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9MT0NBTEVfSCAke0hBVkVfTE9DQUxFX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBsb2NhbHRpbWVfciBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0xPQ0FMVElNRV9SICR7SEFWRV9MT0NBTFRJTUVfUn0KKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAnbG9uZyBsb25nJyBkYXRhIHR5cGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9MT05HTE9ORyAke0hBVkVfTE9OR0xPTkd9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBtYWxsb2MuaCBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX01BTExPQ19IICR7SEFWRV9NQUxMT0NfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9NRU1PUllfSCAke0hBVkVfTUVNT1JZX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNU0dfTk9TSUdOQUwgZmxhZy4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX01TR19OT1NJR05BTCAke0hBVkVfTVNHX05PU0lHTkFMfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGRiLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfTkVUREJfSCAke0hBVkVfTkVUREJfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IICR7SEFWRV9ORVRJTkVUX0lOX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC90Y3AuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9ORVRJTkVUX1RDUF9IICR7SEFWRV9ORVRJTkVUX1RDUF9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9pZi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX05FVF9JRl9IICR7SEFWRV9ORVRfSUZfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgTklfV0lUSFNDT1BFSUQgZXhpc3RzIGFuZCB3b3Jrcy4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX05JX1dJVEhTQ09QRUlEICR7SEFWRV9OSV9XSVRIU0NPUEVJRH0KKworLyogaWYgeW91IGhhdmUgYW4gb2xkIE1JVCBnc3NhcGkgbGlicmFyeSwgbGFja2luZyBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRQorICAgKi8KKyNjbWFrZWRlZmluZSBIQVZFX09MRF9HU1NNSVQgJHtIQVZFX09MRF9HU1NNSVR9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9jcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9PUEVOU1NMX0NSWVBUT19IICR7SEFWRV9PUEVOU1NMX0NSWVBUT19IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZW5naW5lLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfT1BFTlNTTF9FTkdJTkVfSCAke0hBVkVfT1BFTlNTTF9FTkdJTkVfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2Vyci5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX09QRU5TU0xfRVJSX0ggJHtIQVZFX09QRU5TU0xfRVJSX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9wZW0uaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9PUEVOU1NMX1BFTV9IICR7SEFWRV9PUEVOU1NMX1BFTV9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcGtjczEyLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfT1BFTlNTTF9QS0NTMTJfSCAke0hBVkVfT1BFTlNTTF9QS0NTMTJfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3JzYS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX09QRU5TU0xfUlNBX0ggJHtIQVZFX09QRU5TU0xfUlNBX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9zc2wuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9PUEVOU1NMX1NTTF9IICR7SEFWRV9PUEVOU1NMX1NTTF9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wveDUwOS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX09QRU5TU0xfWDUwOV9IICR7SEFWRV9PUEVOU1NMX1g1MDlfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwZW0uaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9QRU1fSCAke0hBVkVfUEVNX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGVycm9yJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1BFUlJPUiAke0hBVkVfUEVSUk9SfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBpcGUnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfUElQRSAke0hBVkVfUElQRX0KKworLyogaWYgeW91IGhhdmUgdGhlIGZ1bmN0aW9uIFBLMTFfQ3JlYXRlR2VuZXJpY09iamVjdCAqLworI2NtYWtlZGVmaW5lIEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUICR7SEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1R9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBwb2xsIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfUE9MTCAke0hBVkVfUE9MTH0KKworLyogSWYgeW91IGhhdmUgYSBmaW5lIHBvbGwgKi8KKyNjbWFrZWRlZmluZSBIQVZFX1BPTExfRklORSAke0hBVkVfUE9MTF9GSU5FfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBvbGwuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9QT0xMX0ggJHtIQVZFX1BPTExfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIFBPU0lYLXN0eWxlIHN0cmVycm9yX3IgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9QT1NJWF9TVFJFUlJPUl9SICR7SEFWRV9QT1NJWF9TVFJFUlJPUl9SfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB3ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1BXRF9IICR7SEFWRV9QV0RfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBSQU5EX2VnZCcgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9SQU5EX0VHRCAke0hBVkVfUkFORF9FR0R9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9zY3JlZW4nIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfUkFORF9TQ1JFRU4gJHtIQVZFX1JBTkRfU0NSRUVOfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfc3RhdHVzJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1JBTkRfU1RBVFVTICR7SEFWRV9SQU5EX1NUQVRVU30KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHJlY3YgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9SRUNWICR7SEFWRV9SRUNWfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgcmVjdmZyb20gZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9SRUNWRlJPTSAke0hBVkVfUkVDVkZST019CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cnNhLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfUlNBX0ggJHtIQVZFX1JTQV9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2VsZWN0IGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU0VMRUNUICR7SEFWRV9TRUxFQ1R9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzZW5kIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU0VORCAke0hBVkVfU0VORH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZXRqbXAuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TRVRKTVBfSCAke0hBVkVfU0VUSk1QX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NFVExPQ0FMRSAke0hBVkVfU0VUTE9DQUxFfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldG1vZGUnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU0VUTU9ERSAke0hBVkVfU0VUTU9ERX0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRybGltaXQnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU0VUUkxJTUlUICR7SEFWRV9TRVRSTElNSVR9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzZXRzb2Nrb3B0IGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU0VUU09DS09QVCAke0hBVkVfU0VUU09DS09QVH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIHNldHNvY2tvcHQgU09fTk9OQkxPQ0sgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9TRVRTT0NLT1BUX1NPX05PTkJMT0NLICR7SEFWRV9TRVRTT0NLT1BUX1NPX05PTkJMT0NLfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNndHR5Lmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU0dUVFlfSCAke0hBVkVfU0dUVFlfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNpZ2FjdGlvbiBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NJR0FDVElPTiAke0hBVkVfU0lHQUNUSU9OfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2lnaW50ZXJydXB0IGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU0lHSU5URVJSVVBUICR7SEFWRV9TSUdJTlRFUlJVUFR9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzaWduYWwgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9TSUdOQUwgJHtIQVZFX1NJR05BTH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TSUdOQUxfSCAke0hBVkVfU0lHTkFMX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzaWdzZXRqbXAgZnVuY3Rpb24gb3IgbWFjcm8uICovCisjY21ha2VkZWZpbmUgSEFWRV9TSUdTRVRKTVAgJHtIQVZFX1NJR1NFVEpNUH0KKworLyogRGVmaW5lIHRvIDEgaWYgc2lnX2F0b21pY190IGlzIGFuIGF2YWlsYWJsZSB0eXBlZGVmLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UICR7SEFWRV9TSUdfQVRPTUlDX1R9CisKKy8qIERlZmluZSB0byAxIGlmIHNpZ19hdG9taWNfdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgdm9sYXRpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1RfVk9MQVRJTEUgJHtIQVZFX1NJR19BVE9NSUNfVF9WT0xBVElMRX0KKworLyogRGVmaW5lIHRvIDEgaWYgc3RydWN0IHNvY2thZGRyX2luNiBoYXMgdGhlIHNpbjZfc2NvcGVfaWQgbWVtYmVyICovCisjY21ha2VkZWZpbmUgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAke0hBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUR9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NPQ0tFVCAke0hBVkVfU09DS0VUfQorCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgU1BORUdPIGxpYnJhcnkgZmJvcGVuc3NsICovCisjY21ha2VkZWZpbmUgSEFWRV9TUE5FR08gJHtIQVZFX1NQTkVHT30KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBTU0xfZ2V0X3NodXRkb3duJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NTTF9HRVRfU0hVVERPV04gJHtIQVZFX1NTTF9HRVRfU0hVVERPV059CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3NsLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1NMX0ggJHtIQVZFX1NTTF9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGJvb2wuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TVERCT09MX0ggJHtIQVZFX1NUREJPT0xfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TVERJTlRfSCAke0hBVkVfU1RESU5UX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW8uaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TVERJT19IICR7SEFWRV9TVERJT19IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NURExJQl9IICR7SEFWRV9TVERMSUJfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmNhc2VjbXAgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9TVFJDQVNFQ01QICR7SEFWRV9TVFJDQVNFQ01QfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyY2FzZXN0ciBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NUUkNBU0VTVFIgJHtIQVZFX1NUUkNBU0VTVFJ9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJjbXBpIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1RSQ01QSSAke0hBVkVfU1RSQ01QSX0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmR1cCBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NUUkRVUCAke0hBVkVfU1RSRFVQfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyZXJyb3JfciBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NUUkVSUk9SX1IgJHtIQVZFX1NUUkVSUk9SX1J9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJpY21wIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1RSSUNNUCAke0hBVkVfU1RSSUNNUH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1RSSU5HU19IICR7SEFWRV9TVFJJTkdTX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1RSSU5HX0ggJHtIQVZFX1NUUklOR19IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybGNhdCBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NUUkxDQVQgJHtIQVZFX1NUUkxDQVR9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNweScgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9TVFJMQ1BZICR7SEFWRV9TVFJMQ1BZfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmNhc2VjbXAgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9TVFJOQ0FTRUNNUCAke0hBVkVfU1RSTkNBU0VDTVB9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJuY21waSBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NUUk5DTVBJICR7SEFWRV9TVFJOQ01QSX0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cm5pY21wIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1RSTklDTVAgJHtIQVZFX1NUUk5JQ01QfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cm9wdHMuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TVFJPUFRTX0ggJHtIQVZFX1NUUk9QVFNfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cnN0ciBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NUUlNUUiAke0hBVkVfU1RSU1RSfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RydG9rX3IgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9TVFJUT0tfUiAke0hBVkVfU1RSVE9LX1J9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJ0b2xsIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1RSVE9MTCAke0hBVkVfU1RSVE9MTH0KKworLyogaWYgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgaXMgZGVmaW5lZCAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgJHtIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgdGltZXZhbCBzdHJ1Y3QuICovCisjY21ha2VkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVZBTCAke0hBVkVfU1RSVUNUX1RJTUVWQUx9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGlvLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1lTX0ZJTElPX0ggJHtIQVZFX1NZU19GSUxJT19IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pb2N0bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NZU19JT0NUTF9IICR7SEFWRV9TWVNfSU9DVExfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TWVNfUEFSQU1fSCAke0hBVkVfU1lTX1BBUkFNX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BvbGwuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TWVNfUE9MTF9IICR7SEFWRV9TWVNfUE9MTF9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9yZXNvdXJjZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NZU19SRVNPVVJDRV9IICR7SEFWRV9TWVNfUkVTT1VSQ0VfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IICR7SEFWRV9TWVNfU0VMRUNUX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAke0hBVkVfU1lTX1NPQ0tFVF9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NraW8uaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TWVNfU09DS0lPX0ggJHtIQVZFX1NZU19TT0NLSU9fSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NZU19TVEFUX0ggJHtIQVZFX1NZU19TVEFUX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9TWVNfVElNRV9IICR7SEFWRV9TWVNfVElNRV9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NZU19UWVBFU19IICR7SEFWRV9TWVNfVFlQRVNfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdWlvLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1lTX1VJT19IICR7SEFWRV9TWVNfVUlPX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3VuLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1lTX1VOX0ggJHtIQVZFX1NZU19VTl9IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1NZU19VVElNRV9IICR7SEFWRV9TWVNfVVRJTUVfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW9zLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfVEVSTUlPU19IICR7SEFWRV9URVJNSU9TX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfVEVSTUlPX0ggJHtIQVZFX1RFUk1JT19IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9USU1FX0ggJHtIQVZFX1RJTUVfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0bGQuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9UTERfSCAke0hBVkVfVExEX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGxkX3N0cmVycm9yJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1RMRF9TVFJFUlJPUiAke0hBVkVfVExEX1NUUkVSUk9SfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVuYW1lJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1VOQU1FICR7SEFWRV9VTkFNRX0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjY21ha2VkZWZpbmUgSEFWRV9VTklTVERfSCAke0hBVkVfVU5JU1REX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXRpbWUnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfVVRJTUUgJHtIQVZFX1VUSU1FfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHV0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfVVRJTUVfSCAke0hBVkVfVVRJTUVfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgY29tcGlsZXIgc3VwcG9ydHMgQzk5IHZhcmlhZGljIG1hY3JvIHN0eWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfVkFSSUFESUNfTUFDUk9TX0M5OSAke0hBVkVfVkFSSUFESUNfTUFDUk9TX0M5OX0KKworLyogRGVmaW5lIHRvIDEgaWYgY29tcGlsZXIgc3VwcG9ydHMgb2xkIGdjYyB2YXJpYWRpYyBtYWNybyBzdHlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1ZBUklBRElDX01BQ1JPU19HQ0MgJHtIQVZFX1ZBUklBRElDX01BQ1JPU19HQ0N9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5iZXIuaCBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1dJTkJFUl9IICR7SEFWRV9XSU5CRVJfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbmRvd3MuaCBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1dJTkRPV1NfSCAke0hBVkVfV0lORE9XU19IfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd2lubGRhcC5oIGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfV0lOTERBUF9IICR7SEFWRV9XSU5MREFQX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5zb2NrMi5oIGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAke0hBVkVfV0lOU09DSzJfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbnNvY2suaCBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1dJTlNPQ0tfSCAke0hBVkVfV0lOU09DS19IfQorCisvKiBEZWZpbmUgdGhpcyBzeW1ib2wgaWYgeW91ciBPUyBzdXBwb3J0cyBjaGFuZ2luZyB0aGUgY29udGVudHMgb2YgYXJndiAqLworI2NtYWtlZGVmaW5lIEhBVkVfV1JJVEFCTEVfQVJHViAke0hBVkVfV1JJVEFCTEVfQVJHVn0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdyaXRldiBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1dSSVRFViAke0hBVkVfV1JJVEVWfQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd3MydGNwaXAuaCBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1dTMlRDUElQX0ggJHtIQVZFX1dTMlRDUElQX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8eDUwOS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1g1MDlfSCAke0hBVkVfWDUwOV9IfQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxwcm9jZXNzLmg+IGhlYWRlciBmaWxlLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfUFJPQ0VTU19IICR7SEFWRV9QUk9DRVNTX0h9CisKKy8qIGlmIHlvdSBoYXZlIHRoZSB6bGliLmggaGVhZGVyIGZpbGUgKi8KKyNjbWFrZWRlZmluZSBIQVZFX1pMSUJfSCAke0hBVkVfWkxJQl9IfQorCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgorICAgKi8KKyNjbWFrZWRlZmluZSBMVF9PQkpESVIgJHtMVF9PQkpESVJ9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBuYXRpdmUgV2luZG93cyB0YXJnZXQuICovCisjY21ha2VkZWZpbmUgTkFUSVZFX1dJTkRPV1MgJHtOQVRJVkVfV0lORE9XU30KKworLyogSWYgeW91IGxhY2sgYSBmaW5lIGJhc2VuYW1lKCkgcHJvdG90eXBlICovCisjY21ha2VkZWZpbmUgTkVFRF9CQVNFTkFNRV9QUk9UTyAke05FRURfQkFTRU5BTUVfUFJPVE99CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRoZSBsYmVyLmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIGxkYXAuaCAqLworI2NtYWtlZGVmaW5lIE5FRURfTEJFUl9IICR7TkVFRF9MQkVSX0h9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRoZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmggKi8KKyNjbWFrZWRlZmluZSBORUVEX01BTExPQ19IICR7TkVFRF9NQUxMT0NfSH0KKworLyogRGVmaW5lIHRvIDEgaWYgX1JFRU5UUkFOVCBwcmVwcm9jZXNzb3Igc3ltYm9sIG11c3QgYmUgZGVmaW5lZC4gKi8KKyNjbWFrZWRlZmluZSBORUVEX1JFRU5UUkFOVCAke05FRURfUkVFTlRSQU5UfQorCisvKiBjcHUtbWFjaGluZS1PUyAqLworI2NtYWtlZGVmaW5lIE9TICR7T1N9CisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI2NtYWtlZGVmaW5lIFBBQ0tBR0UgJHtQQUNLQUdFfQorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyNjbWFrZWRlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAke1BBQ0tBR0VfQlVHUkVQT1JUfQorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjY21ha2VkZWZpbmUgUEFDS0FHRV9OQU1FICR7UEFDS0FHRV9OQU1FfQorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjY21ha2VkZWZpbmUgUEFDS0FHRV9TVFJJTkcgJHtQQUNLQUdFX1NUUklOR30KKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2NtYWtlZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAke1BBQ0tBR0VfVEFSTkFNRX0KKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNjbWFrZWRlZmluZSBQQUNLQUdFX1ZFUlNJT04gJHtQQUNLQUdFX1ZFUlNJT059CisKKy8qIGEgc3VpdGFibGUgZmlsZSB0byByZWFkIHJhbmRvbSBkYXRhIGZyb20gKi8KKyNjbWFrZWRlZmluZSBSQU5ET01fRklMRSAiJHtSQU5ET01fRklMRX0iCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdmZyb20uICovCisjY21ha2VkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcxICR7UkVDVkZST01fVFlQRV9BUkcxfQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgMiBmb3IgcmVjdmZyb20uICovCisjY21ha2VkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyICR7UkVDVkZST01fVFlQRV9BUkcyfQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbSBpcyB2b2lkLiAqLworI2NtYWtlZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMl9JU19WT0lEICR7UkVDVkZST01fVFlQRV9BUkcyX0lTX1ZPSUR9CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdmZyb20uICovCisjY21ha2VkZWZpbmUgUkVDVkZST01fVFlQRV9BUkczICR7UkVDVkZST01fVFlQRV9BUkczfQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3Zmcm9tLiAqLworI2NtYWtlZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNCAke1JFQ1ZGUk9NX1RZUEVfQVJHNH0KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tLiAqLworI2NtYWtlZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSAke1JFQ1ZGUk9NX1RZUEVfQVJHNX0KKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNSBmb3IgcmVjdmZyb20gaXMgdm9pZC4gKi8KKyNjbWFrZWRlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzVfSVNfVk9JRCAke1JFQ1ZGUk9NX1RZUEVfQVJHNV9JU19WT0lEfQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20uICovCisjY21ha2VkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc2ICR7UkVDVkZST01fVFlQRV9BUkc2fQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA2IGZvciByZWN2ZnJvbSBpcyB2b2lkLiAqLworI2NtYWtlZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNl9JU19WT0lEICR7UkVDVkZST01fVFlQRV9BUkc2X0lTX1ZPSUR9CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHJlY3Zmcm9tLiAqLworI2NtYWtlZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViAke1JFQ1ZGUk9NX1RZUEVfUkVUVn0KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2LiAqLworI2NtYWtlZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxICR7UkVDVl9UWVBFX0FSRzF9CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgcmVjdi4gKi8KKyNjbWFrZWRlZmluZSBSRUNWX1RZUEVfQVJHMiAke1JFQ1ZfVFlQRV9BUkcyfQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3YuICovCisjY21ha2VkZWZpbmUgUkVDVl9UWVBFX0FSRzMgJHtSRUNWX1RZUEVfQVJHM30KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2LiAqLworI2NtYWtlZGVmaW5lIFJFQ1ZfVFlQRV9BUkc0ICR7UkVDVl9UWVBFX0FSRzR9CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHJlY3YuICovCisjY21ha2VkZWZpbmUgUkVDVl9UWVBFX1JFVFYgJHtSRUNWX1RZUEVfUkVUVn0KKworLyogRGVmaW5lIGFzIHRoZSByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMgKGBpbnQnIG9yIGB2b2lkJykuICovCisjY21ha2VkZWZpbmUgUkVUU0lHVFlQRSAke1JFVFNJR1RZUEV9CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDUgZm9yIHNlbGVjdC4gKi8KKyNjbWFrZWRlZmluZSBTRUxFQ1RfUVVBTF9BUkc1ICR7U0VMRUNUX1FVQUxfQVJHNX0KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZWxlY3QuICovCisjY21ha2VkZWZpbmUgU0VMRUNUX1RZUEVfQVJHMSAke1NFTEVDVF9UWVBFX0FSRzF9CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDIsIDMgYW5kIDQgZm9yIHNlbGVjdC4gKi8KKyNjbWFrZWRlZmluZSBTRUxFQ1RfVFlQRV9BUkcyMzQgJHtTRUxFQ1RfVFlQRV9BUkcyMzR9CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNSBmb3Igc2VsZWN0LiAqLworI2NtYWtlZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzUgJHtTRUxFQ1RfVFlQRV9BUkc1fQorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciBzZWxlY3QuICovCisjY21ha2VkZWZpbmUgU0VMRUNUX1RZUEVfUkVUViAke1NFTEVDVF9UWVBFX1JFVFZ9CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDIgZm9yIHNlbmQuICovCisjY21ha2VkZWZpbmUgU0VORF9RVUFMX0FSRzIgJHtTRU5EX1FVQUxfQVJHMn0KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZW5kLiAqLworI2NtYWtlZGVmaW5lIFNFTkRfVFlQRV9BUkcxICR7U0VORF9UWVBFX0FSRzF9CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyNjbWFrZWRlZmluZSBTRU5EX1RZUEVfQVJHMiAke1NFTkRfVFlQRV9BUkcyfQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHNlbmQuICovCisjY21ha2VkZWZpbmUgU0VORF9UWVBFX0FSRzMgJHtTRU5EX1RZUEVfQVJHM30KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciBzZW5kLiAqLworI2NtYWtlZGVmaW5lIFNFTkRfVFlQRV9BUkc0ICR7U0VORF9UWVBFX0FSRzR9CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHNlbmQuICovCisjY21ha2VkZWZpbmUgU0VORF9UWVBFX1JFVFYgJHtTRU5EX1RZUEVfUkVUVn0KKworLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNjbWFrZWRlZmluZSBTSVpFT0ZfSU5UICR7U0laRU9GX0lOVH0KKworLyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2NtYWtlZGVmaW5lIFNJWkVPRl9TSE9SVCAke1NJWkVPRl9TSE9SVH0KKworLyogVGhlIHNpemUgb2YgYGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjY21ha2VkZWZpbmUgU0laRU9GX0xPTkcgJHtTSVpFT0ZfTE9OR30KKworLyogVGhlIHNpemUgb2YgYG9mZl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2NtYWtlZGVmaW5lIFNJWkVPRl9PRkZfVCAke1NJWkVPRl9PRkZfVH0KKworLyogVGhlIHNpemUgb2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNjbWFrZWRlZmluZSBTSVpFT0ZfU0laRV9UICR7U0laRU9GX1NJWkVfVH0KKworLyogVGhlIHNpemUgb2YgYHRpbWVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNjbWFrZWRlZmluZSBTSVpFT0ZfVElNRV9UICR7U0laRU9GX1RJTUVfVH0KKworLyogVGhlIHNpemUgb2YgYHZvaWQqJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2NtYWtlZGVmaW5lIFNJWkVPRl9WT0lEUCAke1NJWkVPRl9WT0lEUH0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjY21ha2VkZWZpbmUgU1REQ19IRUFERVJTICR7U1REQ19IRUFERVJTfQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHN0cmVycm9yX3IuICovCisjY21ha2VkZWZpbmUgU1RSRVJST1JfUl9UWVBFX0FSRzMgJHtTVFJFUlJPUl9SX1RZUEVfQVJHM30KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCisjY21ha2VkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FICR7VElNRV9XSVRIX1NZU19USU1FfQorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGMtYXJlcyBzdXBwb3J0ICovCisjY21ha2VkZWZpbmUgVVNFX0FSRVMgJHtVU0VfQVJFU30KKworLyogRGVmaW5lIHRvIGRpc2FibGUgbm9uLWJsb2NraW5nIHNvY2tldHMuICovCisjY21ha2VkZWZpbmUgVVNFX0JMT0NLSU5HX1NPQ0tFVFMgJHtVU0VfQkxPQ0tJTkdfU09DS0VUU30KKworLyogaWYgR251VExTIGlzIGVuYWJsZWQgKi8KKyNjbWFrZWRlZmluZSBVU0VfR05VVExTICR7VVNFX0dOVVRMU30KKworLyogaWYgUG9sYXJTU0wgaXMgZW5hYmxlZCAqLworI2NtYWtlZGVmaW5lIFVTRV9QT0xBUlNTTCAke1VTRV9QT0xBUlNTTH0KKworLyogaWYgbGliU1NIMiBpcyBpbiB1c2UgKi8KKyNjbWFrZWRlZmluZSBVU0VfTElCU1NIMiAke1VTRV9MSUJTU0gyfQorCisvKiBJZiB5b3Ugd2FudCB0byBidWlsZCBjdXJsIHdpdGggdGhlIGJ1aWx0LWluIG1hbnVhbCAqLworI2NtYWtlZGVmaW5lIFVTRV9NQU5VQUwgJHtVU0VfTUFOVUFMfQorCisvKiBpZiBOU1MgaXMgZW5hYmxlZCAqLworI2NtYWtlZGVmaW5lIFVTRV9OU1MgJHtVU0VfTlNTfQorCisvKiBpZiBPcGVuU1NMIGlzIGluIHVzZSAqLworI2NtYWtlZGVmaW5lIFVTRV9PUEVOU1NMICR7VVNFX09QRU5TU0x9CisKKy8qIGlmIFNTTCBpcyBlbmFibGVkICovCisjY21ha2VkZWZpbmUgVVNFX1NTTEVBWSAke1VTRV9TU0xFQVl9CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBXaW5kb3dzIHRhcmdldCB3aXRob3V0IGxhcmdlIGZpbGUKKyAgIHN1cHBvcnQuICovCisjY21ha2VkZWZpbmUgVVNFX1dJTjMyX0xBUkdFX0ZJTEVTICR7VVNFX1dJTjMyX0xBUkdFX0ZJTEVTfQorCisvKiB0byBlbmFibGUgU1NQSSBzdXBwb3J0ICovCisjY21ha2VkZWZpbmUgVVNFX1dJTkRPV1NfU1NQSSAke1VTRV9XSU5ET1dTX1NTUEl9CisKKy8qIERlZmluZSB0byAxIGlmIHVzaW5nIHlhU1NMIGluIE9wZW5TU0wgY29tcGF0aWJpbGl0eSBtb2RlLiAqLworI2NtYWtlZGVmaW5lIFVTRV9ZQVNTTEVNVUwgJHtVU0VfWUFTU0xFTVVMfQorCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjY21ha2VkZWZpbmUgVkVSU0lPTiAke1ZFUlNJT059CisKKy8qIERlZmluZSB0byBhdm9pZCBhdXRvbWF0aWMgaW5jbHVzaW9uIG9mIHdpbnNvY2suaCAqLworI2NtYWtlZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gJHtXSU4zMl9MRUFOX0FORF9NRUFOfQorCisvKiBEZWZpbmUgdG8gMSBpZiBPUyBpcyBBSVguICovCisjaWZuZGVmIF9BTExfU09VUkNFCisjICB1bmRlZiBfQUxMX1NPVVJDRQorI2VuZGlmCisKKy8qIE51bWJlciBvZiBiaXRzIGluIGEgZmlsZSBvZmZzZXQsIG9uIGhvc3RzIHdoZXJlIHRoaXMgaXMgc2V0dGFibGUuICovCisjY21ha2VkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgJHtfRklMRV9PRkZTRVRfQklUU30KKworLyogRGVmaW5lIGZvciBsYXJnZSBmaWxlcywgb24gQUlYLXN0eWxlIGhvc3RzLiAqLworI2NtYWtlZGVmaW5lIF9MQVJHRV9GSUxFUyAke19MQVJHRV9GSUxFU30KKworLyogZGVmaW5lIHRoaXMgaWYgeW91IG5lZWQgaXQgdG8gY29tcGlsZSB0aHJlYWQtc2FmZSBjb2RlICovCisjY21ha2VkZWZpbmUgX1RIUkVBRF9TQUZFICR7X1RIUkVBRF9TQUZFfQorCisvKiBEZWZpbmUgdG8gZW1wdHkgaWYgYGNvbnN0JyBkb2VzIG5vdCBjb25mb3JtIHRvIEFOU0kgQy4gKi8KKyNjbWFrZWRlZmluZSBjb25zdCAke2NvbnN0fQorCisvKiBUeXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBpbl9hZGRyX3Qgd2hlbiBzeXN0ZW0gZG9lcyBub3QgcHJvdmlkZSBpdC4gKi8KKyNjbWFrZWRlZmluZSBpbl9hZGRyX3QgJHtpbl9hZGRyX3R9CisKKy8qIERlZmluZSB0byBgX19pbmxpbmVfXycgb3IgYF9faW5saW5lJyBpZiB0aGF0J3Mgd2hhdCB0aGUgQyBjb21waWxlcgorICAgY2FsbHMgaXQsIG9yIHRvIG5vdGhpbmcgaWYgJ2lubGluZScgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBhbnkgbmFtZS4gICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjdW5kZWYgaW5saW5lCisjZW5kaWYKKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI2NtYWtlZGVmaW5lIHNpemVfdCAke3NpemVfdH0KKworLyogdGhlIHNpZ25lZCB2ZXJzaW9uIG9mIHNpemVfdCAqLworI2NtYWtlZGVmaW5lIHNzaXplX3QgJHtzc2l6ZV90fQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2N1cmxfY29uZmlnLmguaW4gYi9jdXJsLTcuMjUuMC9saWIvY3VybF9jb25maWcuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODIzOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2N1cmxfY29uZmlnLmguaW4KQEAgLTAsMCArMSwxMDY3IEBACisvKiBsaWIvY3VybF9jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKworLyogd2hlbiBidWlsZGluZyBsaWJjdXJsIGl0c2VsZiAqLworI3VuZGVmIEJVSUxESU5HX0xJQkNVUkwKKworLyogTG9jYXRpb24gb2YgZGVmYXVsdCBjYSBidW5kbGUgKi8KKyN1bmRlZiBDVVJMX0NBX0JVTkRMRQorCisvKiBMb2NhdGlvbiBvZiBkZWZhdWx0IGNhIHBhdGggKi8KKyN1bmRlZiBDVVJMX0NBX1BBVEgKKworLyogdG8gZGlzYWJsZSBjb29raWVzIHN1cHBvcnQgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfQ09PS0lFUworCisvKiB0byBkaXNhYmxlIGNyeXB0b2dyYXBoaWMgYXV0aGVudGljYXRpb24gKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgKKworLyogdG8gZGlzYWJsZSBESUNUICovCisjdW5kZWYgQ1VSTF9ESVNBQkxFX0RJQ1QKKworLyogdG8gZGlzYWJsZSBGSUxFICovCisjdW5kZWYgQ1VSTF9ESVNBQkxFX0ZJTEUKKworLyogdG8gZGlzYWJsZSBGVFAgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfRlRQCisKKy8qIHRvIGRpc2FibGUgR29waGVyICovCisjdW5kZWYgQ1VSTF9ESVNBQkxFX0dPUEhFUgorCisvKiB0byBkaXNhYmxlIEhUVFAgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorCisvKiB0byBkaXNhYmxlIElNQVAgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfSU1BUAorCisvKiB0byBkaXNhYmxlIExEQVAgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfTERBUAorCisvKiB0byBkaXNhYmxlIExEQVBTICovCisjdW5kZWYgQ1VSTF9ESVNBQkxFX0xEQVBTCisKKy8qIHRvIGRpc2FibGUgLS1saWJjdXJsIEMgY29kZSBnZW5lcmF0aW9uIG9wdGlvbiAqLworI3VuZGVmIENVUkxfRElTQUJMRV9MSUJDVVJMX09QVElPTgorCisvKiB0byBkaXNhYmxlIFBPUDMgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfUE9QMworCisvKiB0byBkaXNhYmxlIHByb3hpZXMgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKworLyogdG8gZGlzYWJsZSBSVFNQICovCisjdW5kZWYgQ1VSTF9ESVNBQkxFX1JUU1AKKworLyogdG8gZGlzYWJsZSBTTVRQICovCisjdW5kZWYgQ1VSTF9ESVNBQkxFX1NNVFAKKworLyogdG8gZGlzYWJsZSBURUxORVQgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfVEVMTkVUCisKKy8qIHRvIGRpc2FibGUgVEZUUCAqLworI3VuZGVmIENVUkxfRElTQUJMRV9URlRQCisKKy8qIHRvIGRpc2FibGUgVExTLVNSUCBhdXRoZW50aWNhdGlvbiAqLworI3VuZGVmIENVUkxfRElTQUJMRV9UTFNfU1JQCisKKy8qIHRvIGRpc2FibGUgdmVyYm9zZSBzdHJpbmdzICovCisjdW5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUworCisvKiB0byBtYWtlIGEgc3ltYm9sIHZpc2libGUgKi8KKyN1bmRlZiBDVVJMX0VYVEVSTl9TWU1CT0wKKworLyogdG8gZW5hYmxlIGhpZGRlbiBzeW1ib2xzICovCisjdW5kZWYgQ1VSTF9ISURERU5fU1lNQk9MUworCisvKiBVc2UgV2luZG93cyBMREFQIGltcGxlbWVudGF0aW9uICovCisjdW5kZWYgQ1VSTF9MREFQX1dJTgorCisvKiB3aGVuIG5vdCBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5ICovCisjdW5kZWYgQ1VSTF9TVEFUSUNMSUIKKworLyogeW91ciBFbnRyb3B5IEdhdGhlcmluZyBEYWVtb24gc29ja2V0IHBhdGhuYW1lICovCisjdW5kZWYgRUdEX1NPQ0tFVAorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydCAqLworI3VuZGVmIEVOQUJMRV9JUFY2CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBxdWFsaWZpZXIgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI3VuZGVmIEdFVE5BTUVJTkZPX1FVQUxfQVJHMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI3VuZGVmIEdFVE5BTUVJTkZPX1RZUEVfQVJHMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIGdldG5hbWVpbmZvLiAqLworI3VuZGVmIEdFVE5BTUVJTkZPX1RZUEVfQVJHMgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyA0IGFuZCA2IGZvciBnZXRuYW1laW5mby4gKi8KKyN1bmRlZiBHRVROQU1FSU5GT19UWVBFX0FSRzQ2CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNyBmb3IgZ2V0bmFtZWluZm8uICovCisjdW5kZWYgR0VUTkFNRUlORk9fVFlQRV9BUkc3CisKKy8qIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBnZXRzZXJ2Ynlwb3J0X3IgKi8KKyN1bmRlZiBHRVRTRVJWQllQT1JUX1JfQVJHUworCisvKiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byBwYXNzIHRvIGdldHNlcnZieXBvcnRfciAqLworI3VuZGVmIEdFVFNFUlZCWVBPUlRfUl9CVUZTSVpFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBhbGFybSBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0FMQVJNCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YWxsb2NhLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfQUxMT0NBX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhcnBhL2luZXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9BUlBBX0lORVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvdGZ0cC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0FSUEFfVEZUUF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXNzZXJ0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfQVNTRVJUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGJhc2VuYW1lIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQkFTRU5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgYm9vbCBpcyBhbiBhdmFpbGFibGUgdHlwZS4gKi8KKyN1bmRlZiBIQVZFX0JPT0xfVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgY2xvY2tfZ2V0dGltZSBmdW5jdGlvbiBhbmQgbW9ub3RvbmljIHRpbWVyLiAqLworI3VuZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGNsb3Nlc29ja2V0IGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQ0xPU0VTT0NLRVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIENsb3NlU29ja2V0IGNhbWVsIGNhc2UgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DTE9TRVNPQ0tFVF9DQU1FTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgY29ubmVjdCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NPTk5FQ1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBDUllQVE9fY2xlYW51cF9hbGxfZXhfZGF0YScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DUllQVE9fQ0xFQU5VUF9BTExfRVhfREFUQQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGNyeXB0by5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0NSWVBUT19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfREVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0RMRkNOX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBFTkdJTkVfY2xlYW51cCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9FTkdJTkVfQ0xFQU5VUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9FTkdJTkVfTE9BRF9CVUlMVElOX0VOR0lORVMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlcnJuby5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VSUk5PX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlcnIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9FUlJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZmNudGwgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GQ05UTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRkNOVExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZmNudGwgT19OT05CTE9DSyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZDTlRMX09fTk9OQkxPQ0sKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZkb3BlbiBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZET1BFTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZvcmsnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRk9SSworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZnJlZWFkZHJpbmZvIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRlJFRUFERFJJTkZPCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmcmVlaWZhZGRycyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZSRUVJRkFERFJTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmc2V0eGF0dHIgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GU0VUWEFUVFIKKworLyogZnNldHhhdHRyKCkgdGFrZXMgNSBhcmdzICovCisjdW5kZWYgSEFWRV9GU0VUWEFUVFJfNQorCisvKiBmc2V0eGF0dHIoKSB0YWtlcyA2IGFyZ3MgKi8KKyN1bmRlZiBIQVZFX0ZTRVRYQVRUUl82CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmdHJ1bmNhdGUgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GVFJVTkNBVEUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdhaV9zdHJlcnJvciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dBSV9TVFJFUlJPUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ2V0YWRkcmluZm8gZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRBRERSSU5GTworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgZ2V0YWRkcmluZm8gZnVuY3Rpb24gaXMgdGhyZWFkc2FmZS4gKi8KKyN1bmRlZiBIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRldWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEVVSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHIgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllBRERSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnlhZGRyX3IgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllBRERSX1IKKworLyogZ2V0aG9zdGJ5YWRkcl9yKCkgdGFrZXMgNSBhcmdzICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllBRERSX1JfNQorCisvKiBnZXRob3N0YnlhZGRyX3IoKSB0YWtlcyA3IGFyZ3MgKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUl83CisKKy8qIGdldGhvc3RieWFkZHJfcigpIHRha2VzIDggYXJncyAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZQUREUl9SXzgKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWUgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnluYW1lX3IgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1IKKworLyogZ2V0aG9zdGJ5bmFtZV9yKCkgdGFrZXMgMyBhcmdzICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfMworCisvKiBnZXRob3N0YnluYW1lX3IoKSB0YWtlcyA1IGFyZ3MgKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl81CisKKy8qIGdldGhvc3RieW5hbWVfcigpIHRha2VzIDYgYXJncyAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RuYW1lIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUSE9TVE5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGdldGlmYWRkcnMgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRJRkFERFJTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRuYW1laW5mbyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVE5BTUVJTkZPCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGFzc19yJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBBU1NfUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBwaWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUUFBJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHByb3RvYnluYW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBST1RPQllOQU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHd1aWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUUFdVSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRybGltaXQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUUkxJTUlUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRzZXJ2Ynlwb3J0X3IgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRTRVJWQllQT1JUX1IKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUVElNRU9GREFZCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBnbGliYy1zdHlsZSBzdHJlcnJvcl9yIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0xJQkNfU1RSRVJST1JfUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ210aW1lX3IgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HTVRJTUVfUgorCisvKiBpZiB5b3UgaGF2ZSB0aGUgZnVuY3Rpb24gZ251dGxzX3NycF92ZXJpZmllciAqLworI3VuZGVmIEhBVkVfR05VVExTX1NSUAorCisvKiBpZiB5b3UgaGF2ZSB0aGUgZ3NzYXBpIGxpYnJhcmllcyAqLworI3VuZGVmIEhBVkVfR1NTQVBJCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Z3NzYXBpL2dzc2FwaV9nZW5lcmljLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfR1NTQVBJX0dTU0FQSV9HRU5FUklDX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnc3NhcGkvZ3NzYXBpLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfR1NTQVBJX0dTU0FQSV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Z3NzYXBpL2dzc2FwaV9rcmI1Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfR1NTQVBJX0dTU0FQSV9LUkI1X0gKKworLyogaWYgeW91IGhhdmUgdGhlIEdOVSBnc3NhcGkgbGlicmFyaWVzICovCisjdW5kZWYgSEFWRV9HU1NHTlUKKworLyogaWYgeW91IGhhdmUgdGhlIEhlaW1kYWwgZ3NzYXBpIGxpYnJhcmllcyAqLworI3VuZGVmIEhBVkVfR1NTSEVJTURBTAorCisvKiBpZiB5b3UgaGF2ZSB0aGUgTUlUIGdzc2FwaSBsaWJyYXJpZXMgKi8KKyN1bmRlZiBIQVZFX0dTU01JVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlkbmFfc3RyZXJyb3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSUROQV9TVFJFUlJPUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlkbl9mcmVlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lETl9GUkVFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aWRuLWZyZWUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JRE5fRlJFRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aWZhZGRycy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lGQUREUlNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGluZXRfYWRkcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JTkVUX0FERFIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGluZXRfbnRvYV9yIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSU5FVF9OVE9BX1IKKworLyogaW5ldF9udG9hX3IoKSB0YWtlcyAyIGFyZ3MgKi8KKyN1bmRlZiBIQVZFX0lORVRfTlRPQV9SXzIKKworLyogaW5ldF9udG9hX3IoKSB0YWtlcyAzIGFyZ3MgKi8KKyN1bmRlZiBIQVZFX0lORVRfTlRPQV9SXzMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSBJUHY2IGNhcGFibGUgd29ya2luZyBpbmV0X250b3AgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JTkVUX05UT1AKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSBJUHY2IGNhcGFibGUgd29ya2luZyBpbmV0X3B0b24gZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JTkVUX1BUT04KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGlvY3RsIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSU9DVEwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGlvY3Rsc29ja2V0IGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSU9DVExTT0NLRVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIElvY3RsU29ja2V0IGNhbWVsIGNhc2UgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgSW9jdGxTb2NrZXQgY2FtZWwgY2FzZSBGSU9OQklPIGZ1bmN0aW9uLgorICAgKi8KKyN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMX0ZJT05CSU8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3Rsc29ja2V0IEZJT05CSU8gZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBpb2N0bCBGSU9OQklPIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSU9DVExfRklPTkJJTworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGwgU0lPQ0dJRkFERFIgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JT0NUTF9TSU9DR0lGQUREUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGlvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSU9fSAorCisvKiBpZiB5b3UgaGF2ZSB0aGUgS2VyYmVyb3M0IGxpYnJhcmllcyAoaW5jbHVkaW5nIC1sZGVzKSAqLworI3VuZGVmIEhBVkVfS1JCNAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGtyYl9nZXRfb3VyX2lwX2Zvcl9yZWFsbScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9LUkJfR0VUX09VUl9JUF9GT1JfUkVBTE0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxrcmIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9LUkJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbGJlci5oIGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTEJFUl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBsZGFwc3NsLmggaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MREFQU1NMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGxkYXAuaCBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xEQVBfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxkYXBfaW5pdF9mZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9MREFQX0lOSVRfRkQKKworLyogVXNlIExEQVBTIGltcGxlbWVudGF0aW9uICovCisjdW5kZWYgSEFWRV9MREFQX1NTTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbGRhcF9zc2wuaCBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xEQVBfU1NMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsZGFwX3VybF9wYXJzZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9MREFQX1VSTF9QQVJTRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpYmdlbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJQkdFTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRuJyBsaWJyYXJ5ICgtbGlkbikuICovCisjdW5kZWYgSEFWRV9MSUJJRE4KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZXNvbHYnIGxpYnJhcnkgKC1scmVzb2x2KS4gKi8KKyN1bmRlZiBIQVZFX0xJQlJFU09MVgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlc29sdmUnIGxpYnJhcnkgKC1scmVzb2x2ZSkuICovCisjdW5kZWYgSEFWRV9MSUJSRVNPTFZFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGlicnRtcC9ydG1wLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTElCUlRNUF9SVE1QX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzc2gyJyBsaWJyYXJ5ICgtbHNzaDIpLiAqLworI3VuZGVmIEhBVkVfTElCU1NIMgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxpYnNzaDJfZXhpdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9MSUJTU0gyX0VYSVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJzc2gyLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTElCU1NIMl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGlic3NoMl9pbml0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xJQlNTSDJfSU5JVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxpYnNzaDJfc2NwX3NlbmQ2NCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9MSUJTU0gyX1NDUF9TRU5ENjQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsaWJzc2gyX3Nlc3Npb25faGFuZHNoYWtlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xJQlNTSDJfU0VTU0lPTl9IQU5EU0hBS0UKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsaWJzc2gyX3ZlcnNpb24nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTElCU1NIMl9WRVJTSU9OCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3NsJyBsaWJyYXJ5ICgtbHNzbCkuICovCisjdW5kZWYgSEFWRV9MSUJTU0wKKworLyogaWYgemxpYiBpcyBhdmFpbGFibGUgKi8KKyN1bmRlZiBIQVZFX0xJQloKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSU1JVFNfSAorCisvKiBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIExMICovCisjdW5kZWYgSEFWRV9MTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxvY2FsZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xPQ0FMRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBsb2NhbHRpbWVfciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xPQ0FMVElNRV9SCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgJ2xvbmcgbG9uZycgZGF0YSB0eXBlLiAqLworI3VuZGVmIEhBVkVfTE9OR0xPTkcKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIG1hbGxvYy5oIGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTUFMTE9DX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIG1lbW9yeS5oIGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTUVNT1JZX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIG1lbXJjaHIgZnVuY3Rpb24gb3IgbWFjcm8uICovCisjdW5kZWYgSEFWRV9NRU1SQ0hSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNU0dfTk9TSUdOQUwgZmxhZy4gKi8KKyN1bmRlZiBIQVZFX01TR19OT1NJR05BTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGRiLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUREJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRJTkVUX0lOX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L3RjcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVElORVRfVENQX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRfSUZfSAorCisvKiBEZWZpbmUgdG8gMSBpZiBOSV9XSVRIU0NPUEVJRCBleGlzdHMgYW5kIHdvcmtzLiAqLworI3VuZGVmIEhBVkVfTklfV0lUSFNDT1BFSUQKKworLyogaWYgeW91IGhhdmUgYW4gb2xkIE1JVCBnc3NhcGkgbGlicmFyeSwgbGFja2luZyBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRQorICAgKi8KKyN1bmRlZiBIQVZFX09MRF9HU1NNSVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2NyeXB0by5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfQ1JZUFRPX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2VuZ2luZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfRU5HSU5FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL2Vyci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfRVJSX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3BlbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfUEVNX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3BrY3MxMi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfUEtDUzEyX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3JzYS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfUlNBX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3NzbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfU1NMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3g1MDkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9PUEVOU1NMX1g1MDlfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBlbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1BFTV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGVycm9yJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BFUlJPUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBpcGUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUElQRQorCisvKiBpZiB5b3UgaGF2ZSB0aGUgZnVuY3Rpb24gUEsxMV9DcmVhdGVHZW5lcmljT2JqZWN0ICovCisjdW5kZWYgSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIHBvbGwgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QT0xMCisKKy8qIElmIHlvdSBoYXZlIGEgZmluZSBwb2xsICovCisjdW5kZWYgSEFWRV9QT0xMX0ZJTkUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwb2xsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUE9MTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBQT1NJWC1zdHlsZSBzdHJlcnJvcl9yIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUE9TSVhfU1RSRVJST1JfUgorCisvKiBpZiB5b3UgaGF2ZSA8cHRocmVhZC5oPiAqLworI3VuZGVmIEhBVkVfUFRIUkVBRF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHdkLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUFdEX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBSQU5EX2VnZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SQU5EX0VHRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfc2NyZWVuJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1JBTkRfU0NSRUVOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9zdGF0dXMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkFORF9TVEFUVVMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHJlY3YgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SRUNWCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSByZWN2ZnJvbSBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1JFQ1ZGUk9NCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cnNhLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUlNBX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNlbGVjdCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFTEVDVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2VuZCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFTkQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZXRqbXAuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TRVRKTVBfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGxvY2FsZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRMT0NBTEUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRtb2RlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVE1PREUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRybGltaXQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUUkxJTUlUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzZXRzb2Nrb3B0IGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUU09DS09QVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgc2V0c29ja29wdCBTT19OT05CTE9DSyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVFNPQ0tPUFRfU09fTk9OQkxPQ0sKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZ3R0eS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NHVFRZX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNpZ2FjdGlvbiBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NJR0FDVElPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2lnaW50ZXJydXB0IGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0lHSU5URVJSVVBUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzaWduYWwgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TSUdOQUwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TSUdOQUxfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2lnc2V0am1wIGZ1bmN0aW9uIG9yIG1hY3JvLiAqLworI3VuZGVmIEhBVkVfU0lHU0VUSk1QCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ19hdG9taWNfdCBpcyBhbiBhdmFpbGFibGUgdHlwZWRlZi4gKi8KKyN1bmRlZiBIQVZFX1NJR19BVE9NSUNfVAorCisvKiBEZWZpbmUgdG8gMSBpZiBzaWdfYXRvbWljX3QgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIHZvbGF0aWxlLiAqLworI3VuZGVmIEhBVkVfU0lHX0FUT01JQ19UX1ZPTEFUSUxFCisKKy8qIERlZmluZSB0byAxIGlmIHN0cnVjdCBzb2NrYWRkcl9pbjYgaGFzIHRoZSBzaW42X3Njb3BlX2lkIG1lbWJlciAqLworI3VuZGVmIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNvY2tldCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NPQ0tFVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc29ja2V0cGFpciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NPQ0tFVFBBSVIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TT0NLRVRfSAorCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgU1BORUdPIGxpYnJhcnkgZmJvcGVuc3NsICovCisjdW5kZWYgSEFWRV9TUE5FR08KKworLyogaWYgeW91IGhhdmUgdGhlIGZ1bmN0aW9uIFNSUF9DYWxjX2NsaWVudF9rZXkgKi8KKyN1bmRlZiBIQVZFX1NTTEVBWV9TUlAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBTU0x2Ml9jbGllbnRfbWV0aG9kJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NTTFYyX0NMSUVOVF9NRVRIT0QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBTU0xfZ2V0X3NodXRkb3duJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NTTF9HRVRfU0hVVERPV04KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzc2wuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TU0xfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGJvb2wuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERCT09MX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGlvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU9fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJjYXNlY21wIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSQ0FTRUNNUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyY2FzZXN0ciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkNBU0VTVFIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmNtcGkgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJDTVBJCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJkdXAgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJEVVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmVycm9yX3IgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJFUlJPUl9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJpY21wIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSSUNNUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJJTkdTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJJTkdfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybGNhdCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkxDQVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJsY3B5JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkxDUFkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cm5jYXNlY21wIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTkNBU0VDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cm5jbXBpIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTkNNUEkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cm5pY21wIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTklDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJvcHRzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RST1BUU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJzdHIgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJTVFIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cnRva19yIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSVE9LX1IKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cnRvbGwgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJUT0xMCisKKy8qIGlmIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGlzIGRlZmluZWQgKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB0aW1ldmFsIHN0cnVjdC4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9USU1FVkFMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGlvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX0ZJTElPX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW9jdGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfSU9DVExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19QQVJBTV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BvbGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfUE9MTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Jlc291cmNlLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1JFU09VUkNFX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TT0NLRVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NraW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU09DS0lPX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TVEFUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91aW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVUlPX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdW4uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVU5fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19VVElNRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfV0FJVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3hhdHRyLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1hBVFRSX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW9zLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVEVSTUlPU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVEVSTUlPX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVElNRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGxkLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVExEX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0bGRfc3RyZXJyb3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVExEX1NUUkVSUk9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5hbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVU5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHV0aW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1VUSU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VVElNRV9ICisKKy8qIERlZmluZSB0byAxIGlmIGNvbXBpbGVyIHN1cHBvcnRzIEM5OSB2YXJpYWRpYyBtYWNybyBzdHlsZS4gKi8KKyN1bmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPU19DOTkKKworLyogRGVmaW5lIHRvIDEgaWYgY29tcGlsZXIgc3VwcG9ydHMgb2xkIGdjYyB2YXJpYWRpYyBtYWNybyBzdHlsZS4gKi8KKyN1bmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPU19HQ0MKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbmJlci5oIGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV0lOQkVSX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbmRvd3MuaCBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dJTkRPV1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd2lubGRhcC5oIGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV0lOTERBUF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5zb2NrMi5oIGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV0lOU09DSzJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd2luc29jay5oIGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV0lOU09DS19ICisKKy8qIERlZmluZSB0aGlzIHN5bWJvbCBpZiB5b3VyIE9TIHN1cHBvcnRzIGNoYW5naW5nIHRoZSBjb250ZW50cyBvZiBhcmd2ICovCisjdW5kZWYgSEFWRV9XUklUQUJMRV9BUkdWCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3cml0ZXYgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9XUklURVYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdzMnRjcGlwLmggaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XUzJUQ1BJUF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8eDUwOS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1g1MDlfSAorCisvKiBpZiB5b3UgaGF2ZSB0aGUgemxpYi5oIGhlYWRlciBmaWxlICovCisjdW5kZWYgSEFWRV9aTElCX0gKKworLyogRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4KKyAgICovCisjdW5kZWYgTFRfT0JKRElSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBuYXRpdmUgV2luZG93cyB0YXJnZXQuICovCisjdW5kZWYgTkFUSVZFX1dJTkRPV1MKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdGhlIGxiZXIuaCBoZWFkZXIgZmlsZSBldmVuIHdpdGggbGRhcC5oICovCisjdW5kZWYgTkVFRF9MQkVSX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdGhlIG1hbGxvYy5oIGhlYWRlciBmaWxlIGV2ZW4gd2l0aCBzdGRsaWIuaCAqLworI3VuZGVmIE5FRURfTUFMTE9DX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdGhlIG1lbW9yeS5oIGhlYWRlciBmaWxlIGV2ZW4gd2l0aCBzdGRsaWIuaCAqLworI3VuZGVmIE5FRURfTUVNT1JZX0gKKworLyogRGVmaW5lIHRvIDEgaWYgX1JFRU5UUkFOVCBwcmVwcm9jZXNzb3Igc3ltYm9sIG11c3QgYmUgZGVmaW5lZC4gKi8KKyN1bmRlZiBORUVEX1JFRU5UUkFOVAorCisvKiBEZWZpbmUgdG8gMSBpZiBfVEhSRUFEX1NBRkUgcHJlcHJvY2Vzc29yIHN5bWJvbCBtdXN0IGJlIGRlZmluZWQuICovCisjdW5kZWYgTkVFRF9USFJFQURfU0FGRQorCisvKiBEZWZpbmUgdG8gZW5hYmxlIE5UTE0gZGVsZWdhdGlvbiB0byB3aW5iaW5kJ3MgbnRsbV9hdXRoIGhlbHBlci4gKi8KKyN1bmRlZiBOVExNX1dCX0VOQUJMRUQKKworLyogRGVmaW5lIGFic29sdXRlIGZpbGVuYW1lIGZvciB3aW5iaW5kJ3MgbnRsbV9hdXRoIGhlbHBlci4gKi8KKyN1bmRlZiBOVExNX1dCX0ZJTEUKKworLyogY3B1LW1hY2hpbmUtT1MgKi8KKyN1bmRlZiBPUworCisvKiBOYW1lIG9mIHBhY2thZ2UgKi8KKyN1bmRlZiBQQUNLQUdFCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX05BTUUKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1VSTAorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgorCisvKiBhIHN1aXRhYmxlIGZpbGUgdG8gcmVhZCByYW5kb20gZGF0YSBmcm9tICovCisjdW5kZWYgUkFORE9NX0ZJTEUKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBwb2ludGVkIGJ5IGFyZyA1IGZvciByZWN2ZnJvbS4gKi8KKyN1bmRlZiBSRUNWRlJPTV9RVUFMX0FSRzUKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2ZnJvbS4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDIgZm9yIHJlY3Zmcm9tLiAqLworI3VuZGVmIFJFQ1ZGUk9NX1RZUEVfQVJHMgorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbSBpcyB2b2lkLiAqLworI3VuZGVmIFJFQ1ZGUk9NX1RZUEVfQVJHMl9JU19WT0lECisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3IgcmVjdmZyb20uICovCisjdW5kZWYgUkVDVkZST01fVFlQRV9BUkczCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3IgcmVjdmZyb20uICovCisjdW5kZWYgUkVDVkZST01fVFlQRV9BUkc0CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA1IGZvciByZWN2ZnJvbS4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzUKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNSBmb3IgcmVjdmZyb20gaXMgdm9pZC4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzVfSVNfVk9JRAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20uICovCisjdW5kZWYgUkVDVkZST01fVFlQRV9BUkc2CisKKy8qIERlZmluZSB0byAxIGlmIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDYgZm9yIHJlY3Zmcm9tIGlzIHZvaWQuICovCisjdW5kZWYgUkVDVkZST01fVFlQRV9BUkc2X0lTX1ZPSUQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20uICovCisjdW5kZWYgUkVDVkZST01fVFlQRV9SRVRWCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgcmVjdi4gKi8KKyN1bmRlZiBSRUNWX1RZUEVfQVJHMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHJlY3YuICovCisjdW5kZWYgUkVDVl9UWVBFX0FSRzIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2LiAqLworI3VuZGVmIFJFQ1ZfVFlQRV9BUkczCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3IgcmVjdi4gKi8KKyN1bmRlZiBSRUNWX1RZUEVfQVJHNAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2LiAqLworI3VuZGVmIFJFQ1ZfVFlQRV9SRVRWCisKKy8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChgaW50JyBvciBgdm9pZCcpLiAqLworI3VuZGVmIFJFVFNJR1RZUEUKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgNSBmb3Igc2VsZWN0LiAqLworI3VuZGVmIFNFTEVDVF9RVUFMX0FSRzUKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBzZWxlY3QuICovCisjdW5kZWYgU0VMRUNUX1RZUEVfQVJHMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyAyLCAzIGFuZCA0IGZvciBzZWxlY3QuICovCisjdW5kZWYgU0VMRUNUX1RZUEVfQVJHMjM0CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNSBmb3Igc2VsZWN0LiAqLworI3VuZGVmIFNFTEVDVF9UWVBFX0FSRzUKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3Igc2VsZWN0LiAqLworI3VuZGVmIFNFTEVDVF9UWVBFX1JFVFYKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMiBmb3Igc2VuZC4gKi8KKyN1bmRlZiBTRU5EX1FVQUxfQVJHMgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHNlbmQuICovCisjdW5kZWYgU0VORF9UWVBFX0FSRzEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI3VuZGVmIFNFTkRfVFlQRV9BUkcyCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMyBmb3Igc2VuZC4gKi8KKyN1bmRlZiBTRU5EX1RZUEVfQVJHMworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHNlbmQuICovCisjdW5kZWYgU0VORF9UWVBFX0FSRzQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3Igc2VuZC4gKi8KKyN1bmRlZiBTRU5EX1RZUEVfUkVUVgorCisvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9JTlQKKworLyogVGhlIHNpemUgb2YgYGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0xPTkcKKworLyogVGhlIHNpemUgb2YgYG9mZl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9PRkZfVAorCisvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX1NIT1JUCisKKy8qIFRoZSBzaXplIG9mIGBzaXplX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX1NJWkVfVAorCisvKiBUaGUgc2l6ZSBvZiBgdGltZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9USU1FX1QKKworLyogVGhlIHNpemUgb2YgYHZvaWQqJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9WT0lEUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KKyN1bmRlZiBTVERDX0hFQURFUlMKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzdHJlcnJvcl9yLiAqLworI3VuZGVmIFNUUkVSUk9SX1JfVFlQRV9BUkczCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLworI3VuZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorCisvKiBEZWZpbmUgdG8gZW5hYmxlIGMtYXJlcyBzdXBwb3J0ICovCisjdW5kZWYgVVNFX0FSRVMKKworLyogaWYgYXhUTFMgaXMgZW5hYmxlZCAqLworI3VuZGVmIFVTRV9BWFRMUworCisvKiBEZWZpbmUgdG8gZGlzYWJsZSBub24tYmxvY2tpbmcgc29ja2V0cy4gKi8KKyN1bmRlZiBVU0VfQkxPQ0tJTkdfU09DS0VUUworCisvKiBpZiBDeWFTU0wgaXMgZW5hYmxlZCAqLworI3VuZGVmIFVTRV9DWUFTU0wKKworLyogaWYgR251VExTIGlzIGVuYWJsZWQgKi8KKyN1bmRlZiBVU0VfR05VVExTCisKKy8qIGlmIEdudVRMUyB1c2VzIG5ldHRsZSBhcyBjcnlwdG8gYmFja2VuZCAqLworI3VuZGVmIFVTRV9HTlVUTFNfTkVUVExFCisKKy8qIGlmIGxpYnJ0bXAgaXMgaW4gdXNlICovCisjdW5kZWYgVVNFX0xJQlJUTVAKKworLyogaWYgbGliU1NIMiBpcyBpbiB1c2UgKi8KKyN1bmRlZiBVU0VfTElCU1NIMgorCisvKiBJZiB5b3Ugd2FudCB0byBidWlsZCBjdXJsIHdpdGggdGhlIGJ1aWx0LWluIG1hbnVhbCAqLworI3VuZGVmIFVTRV9NQU5VQUwKKworLyogaWYgTlNTIGlzIGVuYWJsZWQgKi8KKyN1bmRlZiBVU0VfTlNTCisKKy8qIFVzZSBPcGVuTERBUC1zcGVjaWZpYyBjb2RlICovCisjdW5kZWYgVVNFX09QRU5MREFQCisKKy8qIGlmIE9wZW5TU0wgaXMgaW4gdXNlICovCisjdW5kZWYgVVNFX09QRU5TU0wKKworLyogaWYgUG9sYXJTU0wgaXMgZW5hYmxlZCAqLworI3VuZGVmIFVTRV9QT0xBUlNTTAorCisvKiBpZiBTU0wgaXMgZW5hYmxlZCAqLworI3VuZGVmIFVTRV9TU0xFQVkKKworLyogaWYgeW91IHdhbnQgUE9TSVggdGhyZWFkZWQgRE5TIGxvb2t1cCAqLworI3VuZGVmIFVTRV9USFJFQURTX1BPU0lYCisKKy8qIFVzZSBUTFMtU1JQIGF1dGhlbnRpY2F0aW9uICovCisjdW5kZWYgVVNFX1RMU19TUlAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGFyZSBidWlsZGluZyBhIFdpbmRvd3MgdGFyZ2V0IHdpdGggbGFyZ2UgZmlsZSBzdXBwb3J0LgorICAgKi8KKyN1bmRlZiBVU0VfV0lOMzJfTEFSR0VfRklMRVMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGFyZSBidWlsZGluZyBhIFdpbmRvd3MgdGFyZ2V0IHdpdGhvdXQgbGFyZ2UgZmlsZQorICAgc3VwcG9ydC4gKi8KKyN1bmRlZiBVU0VfV0lOMzJfU01BTExfRklMRVMKKworLyogdG8gZW5hYmxlIFNTUEkgc3VwcG9ydCAqLworI3VuZGVmIFVTRV9XSU5ET1dTX1NTUEkKKworLyogRGVmaW5lIHRvIDEgaWYgdXNpbmcgeWFTU0wgaW4gT3BlblNTTCBjb21wYXRpYmlsaXR5IG1vZGUuICovCisjdW5kZWYgVVNFX1lBU1NMRU1VTAorCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjdW5kZWYgVkVSU0lPTgorCisvKiBEZWZpbmUgdG8gYXZvaWQgYXV0b21hdGljIGluY2x1c2lvbiBvZiB3aW5zb2NrLmggKi8KKyN1bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisKKy8qIERlZmluZSB0byAxIGlmIE9TIGlzIEFJWC4gKi8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UKKyMgIHVuZGVmIF9BTExfU09VUkNFCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBmaWxlIG9mZnNldCwgb24gaG9zdHMgd2hlcmUgdGhpcyBpcyBzZXR0YWJsZS4gKi8KKyN1bmRlZiBfRklMRV9PRkZTRVRfQklUUworCisvKiBEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuICovCisjdW5kZWYgX0xBUkdFX0ZJTEVTCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworI3VuZGVmIGNvbnN0CisKKy8qIFR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIGluX2FkZHJfdCB3aGVuIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIGl0LiAqLworI3VuZGVmIGluX2FkZHJfdAorCisvKiBEZWZpbmUgdG8gYF9faW5saW5lX18nIG9yIGBfX2lubGluZScgaWYgdGhhdCdzIHdoYXQgdGhlIEMgY29tcGlsZXIKKyAgIGNhbGxzIGl0LCBvciB0byBub3RoaW5nIGlmICdpbmxpbmUnIGlzIG5vdCBzdXBwb3J0ZWQgdW5kZXIgYW55IG5hbWUuICAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworI3VuZGVmIGlubGluZQorI2VuZGlmCisKKy8qIERlZmluZSB0byBgdW5zaWduZWQgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBzaXplX3QKKworLyogdGhlIHNpZ25lZCB2ZXJzaW9uIG9mIHNpemVfdCAqLworI3VuZGVmIHNzaXplX3QKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2ZubWF0Y2guYyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2ZubWF0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMThmNTJlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2N1cmxfZm5tYXRjaC5jCkBAIC0wLDAgKzEsNDI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlICJjdXJsX2ZubWF0Y2guaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjZGVmaW5lIENVUkxGTk1fQ0hBUlNFVF9MRU4gKHNpemVvZihjaGFyKSAqIDI1NikKKyNkZWZpbmUgQ1VSTEZOTV9DSFNFVF9TSVpFIChDVVJMRk5NX0NIQVJTRVRfTEVOICsgMTUpCisKKyNkZWZpbmUgQ1VSTEZOTV9ORUdBVEUgIENVUkxGTk1fQ0hBUlNFVF9MRU4KKworI2RlZmluZSBDVVJMRk5NX0FMTlVNICAgKENVUkxGTk1fQ0hBUlNFVF9MRU4gKyAxKQorI2RlZmluZSBDVVJMRk5NX0RJR0lUICAgKENVUkxGTk1fQ0hBUlNFVF9MRU4gKyAyKQorI2RlZmluZSBDVVJMRk5NX1hESUdJVCAgKENVUkxGTk1fQ0hBUlNFVF9MRU4gKyAzKQorI2RlZmluZSBDVVJMRk5NX0FMUEhBICAgKENVUkxGTk1fQ0hBUlNFVF9MRU4gKyA0KQorI2RlZmluZSBDVVJMRk5NX1BSSU5UICAgKENVUkxGTk1fQ0hBUlNFVF9MRU4gKyA1KQorI2RlZmluZSBDVVJMRk5NX0JMQU5LICAgKENVUkxGTk1fQ0hBUlNFVF9MRU4gKyA2KQorI2RlZmluZSBDVVJMRk5NX0xPV0VSICAgKENVUkxGTk1fQ0hBUlNFVF9MRU4gKyA3KQorI2RlZmluZSBDVVJMRk5NX0dSQVBIICAgKENVUkxGTk1fQ0hBUlNFVF9MRU4gKyA4KQorI2RlZmluZSBDVVJMRk5NX1NQQUNFICAgKENVUkxGTk1fQ0hBUlNFVF9MRU4gKyA5KQorI2RlZmluZSBDVVJMRk5NX1VQUEVSICAgKENVUkxGTk1fQ0hBUlNFVF9MRU4gKyAxMCkKKwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSTEZOTV9MT09QX0RFRkFVTFQgPSAwLAorICBDVVJMRk5NX0xPT1BfQkFDS1NMQVNICit9IGxvb3Bfc3RhdGU7CisKK3R5cGVkZWYgZW51bSB7CisgIENVUkxGTk1fU0NIU19ERUZBVUxUID0gMCwKKyAgQ1VSTEZOTV9TQ0hTX01BWVJBTkdFLAorICBDVVJMRk5NX1NDSFNfTUFZUkFOR0UyLAorICBDVVJMRk5NX1NDSFNfUklHSFRCUiwKKyAgQ1VSTEZOTV9TQ0hTX1JJR0hUQlJMRUZUQlIKK30gc2V0Y2hhcnNldF9zdGF0ZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSTEZOTV9QS1dfSU5JVCA9IDAsCisgIENVUkxGTk1fUEtXX0RET1QKK30gcGFyc2VrZXlfc3RhdGU7CisKKyNkZWZpbmUgU0VUQ0hBUlNFVF9PSyAgICAgMQorI2RlZmluZSBTRVRDSEFSU0VUX0ZBSUwgICAwCisKK3N0YXRpYyBpbnQgcGFyc2VrZXl3b3JkKHVuc2lnbmVkIGNoYXIgKipwYXR0ZXJuLCB1bnNpZ25lZCBjaGFyICpjaGFyc2V0KQoreworICBwYXJzZWtleV9zdGF0ZSBzdGF0ZSA9IENVUkxGTk1fUEtXX0lOSVQ7CisjZGVmaW5lIEtFWUxFTiAxMAorICBjaGFyIGtleXdvcmRbS0VZTEVOXSA9IHsgMCB9OworICBpbnQgZm91bmQgPSBGQUxTRTsKKyAgaW50IGk7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSAqcGF0dGVybjsKKyAgZm9yKGkgPSAwOyAhZm91bmQ7IGkrKykgeworICAgIGNoYXIgYyA9ICpwKys7CisgICAgaWYoaSA+PSBLRVlMRU4pCisgICAgICByZXR1cm4gU0VUQ0hBUlNFVF9GQUlMOworICAgIHN3aXRjaChzdGF0ZSkgeworICAgIGNhc2UgQ1VSTEZOTV9QS1dfSU5JVDoKKyAgICAgIGlmKElTQUxQSEEoYykgJiYgSVNMT1dFUihjKSkKKyAgICAgICAga2V5d29yZFtpXSA9IGM7CisgICAgICBlbHNlIGlmKGMgPT0gJzonKQorICAgICAgICBzdGF0ZSA9IENVUkxGTk1fUEtXX0RET1Q7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMRk5NX1BLV19ERE9UOgorICAgICAgaWYoYyA9PSAnXScpCisgICAgICAgIGZvdW5kID0gVFJVRTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFNFVENIQVJTRVRfRkFJTDsKKyAgICB9CisgIH0KKyN1bmRlZiBLRVlMRU4KKworICAqcGF0dGVybiA9IHA7IC8qIG1vdmUgY2FsbGVyJ3MgcGF0dGVybiBwb2ludGVyICovCisgIGlmKHN0cmNtcChrZXl3b3JkLCAiZGlnaXQiKSA9PSAwKQorICAgIGNoYXJzZXRbQ1VSTEZOTV9ESUdJVF0gPSAxOworICBlbHNlIGlmKHN0cmNtcChrZXl3b3JkLCAiYWxudW0iKSA9PSAwKQorICAgIGNoYXJzZXRbQ1VSTEZOTV9BTE5VTV0gPSAxOworICBlbHNlIGlmKHN0cmNtcChrZXl3b3JkLCAiYWxwaGEiKSA9PSAwKQorICAgIGNoYXJzZXRbQ1VSTEZOTV9BTFBIQV0gPSAxOworICBlbHNlIGlmKHN0cmNtcChrZXl3b3JkLCAieGRpZ2l0IikgPT0gMCkKKyAgICBjaGFyc2V0W0NVUkxGTk1fWERJR0lUXSA9IDE7CisgIGVsc2UgaWYoc3RyY21wKGtleXdvcmQsICJwcmludCIpID09IDApCisgICAgY2hhcnNldFtDVVJMRk5NX1BSSU5UXSA9IDE7CisgIGVsc2UgaWYoc3RyY21wKGtleXdvcmQsICJncmFwaCIpID09IDApCisgICAgY2hhcnNldFtDVVJMRk5NX0dSQVBIXSA9IDE7CisgIGVsc2UgaWYoc3RyY21wKGtleXdvcmQsICJzcGFjZSIpID09IDApCisgICAgY2hhcnNldFtDVVJMRk5NX1NQQUNFXSA9IDE7CisgIGVsc2UgaWYoc3RyY21wKGtleXdvcmQsICJibGFuayIpID09IDApCisgICAgY2hhcnNldFtDVVJMRk5NX0JMQU5LXSA9IDE7CisgIGVsc2UgaWYoc3RyY21wKGtleXdvcmQsICJ1cHBlciIpID09IDApCisgICAgY2hhcnNldFtDVVJMRk5NX1VQUEVSXSA9IDE7CisgIGVsc2UgaWYoc3RyY21wKGtleXdvcmQsICJsb3dlciIpID09IDApCisgICAgY2hhcnNldFtDVVJMRk5NX0xPV0VSXSA9IDE7CisgIGVsc2UKKyAgICByZXR1cm4gU0VUQ0hBUlNFVF9GQUlMOworICByZXR1cm4gU0VUQ0hBUlNFVF9PSzsKK30KKworLyogcmV0dXJucyAxICh0cnVlKSBpZiBwYXR0ZXJuIGlzIE9LLCAwIGlmIGlzIGJhZCAoInAiIGlzIHBhdHRlcm4gcG9pbnRlcikgKi8KK3N0YXRpYyBpbnQgc2V0Y2hhcnNldCh1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqY2hhcnNldCkKK3sKKyAgc2V0Y2hhcnNldF9zdGF0ZSBzdGF0ZSA9IENVUkxGTk1fU0NIU19ERUZBVUxUOworICB1bnNpZ25lZCBjaGFyIHJhbmdlc3RhcnQgPSAwOworICB1bnNpZ25lZCBjaGFyIGxhc3RjaGFyICAgPSAwOworICBib29sIHNvbWV0aGluZ19mb3VuZCA9IEZBTFNFOworICB1bnNpZ25lZCBjaGFyIGM7CisgIGZvcig7OykgeworICAgIGMgPSAqKnA7CisgICAgc3dpdGNoKHN0YXRlKSB7CisgICAgY2FzZSBDVVJMRk5NX1NDSFNfREVGQVVMVDoKKyAgICAgIGlmKElTQUxOVU0oYykpIHsgLyogQVNDSUkgdmFsdWUgKi8KKyAgICAgICAgcmFuZ2VzdGFydCA9IGM7CisgICAgICAgIGNoYXJzZXRbY10gPSAxOworICAgICAgICAoKnApKys7CisgICAgICAgIHN0YXRlID0gQ1VSTEZOTV9TQ0hTX01BWVJBTkdFOworICAgICAgICBzb21ldGhpbmdfZm91bmQgPSBUUlVFOworICAgICAgfQorICAgICAgZWxzZSBpZihjID09ICddJykgeworICAgICAgICBpZihzb21ldGhpbmdfZm91bmQpCisgICAgICAgICAgcmV0dXJuIFNFVENIQVJTRVRfT0s7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzb21ldGhpbmdfZm91bmQgPSBUUlVFOworICAgICAgICBzdGF0ZSA9IENVUkxGTk1fU0NIU19SSUdIVEJSOworICAgICAgICBjaGFyc2V0W2NdID0gMTsKKyAgICAgICAgKCpwKSsrOworICAgICAgfQorICAgICAgZWxzZSBpZihjID09ICdbJykgeworICAgICAgICBjaGFyIGMyID0gKigoKnApKzEpOworICAgICAgICBpZihjMiA9PSAnOicpIHsgLyogdGhlcmUgaGFzIHRvIGJlIGEga2V5d29yZCAqLworICAgICAgICAgICgqcCkgKz0gMjsKKyAgICAgICAgICBpZihwYXJzZWtleXdvcmQocCwgY2hhcnNldCkpIHsKKyAgICAgICAgICAgIHN0YXRlID0gQ1VSTEZOTV9TQ0hTX0RFRkFVTFQ7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX0ZBSUw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgY2hhcnNldFtjXSA9IDE7CisgICAgICAgICAgKCpwKSsrOworICAgICAgICB9CisgICAgICAgIHNvbWV0aGluZ19mb3VuZCA9IFRSVUU7CisgICAgICB9CisgICAgICBlbHNlIGlmKGMgPT0gJz8nIHx8IGMgPT0gJyonKSB7CisgICAgICAgIHNvbWV0aGluZ19mb3VuZCA9IFRSVUU7CisgICAgICAgIGNoYXJzZXRbY10gPSAxOworICAgICAgICAoKnApKys7CisgICAgICB9CisgICAgICBlbHNlIGlmKGMgPT0gJ14nIHx8IGMgPT0gJyEnKSB7CisgICAgICAgIGlmKCFzb21ldGhpbmdfZm91bmQpIHsKKyAgICAgICAgICBpZihjaGFyc2V0W0NVUkxGTk1fTkVHQVRFXSkgeworICAgICAgICAgICAgY2hhcnNldFtjXSA9IDE7CisgICAgICAgICAgICBzb21ldGhpbmdfZm91bmQgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBjaGFyc2V0W0NVUkxGTk1fTkVHQVRFXSA9IDE7IC8qIG5lZ2F0ZSBjaGFyc2V0ICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGNoYXJzZXRbY10gPSAxOworICAgICAgICAoKnApKys7CisgICAgICB9CisgICAgICBlbHNlIGlmKGMgPT0gJ1xcJykgeworICAgICAgICBjID0gKigrKygqcCkpOworICAgICAgICBpZihJU1BSSU5UKChjKSkpIHsKKyAgICAgICAgICBzb21ldGhpbmdfZm91bmQgPSBUUlVFOworICAgICAgICAgIHN0YXRlID0gQ1VSTEZOTV9TQ0hTX01BWVJBTkdFOworICAgICAgICAgIGNoYXJzZXRbY10gPSAxOworICAgICAgICAgIHJhbmdlc3RhcnQgPSBjOworICAgICAgICAgICgqcCkrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIFNFVENIQVJTRVRfRkFJTDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoYyA9PSAnXDAnKSB7CisgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX0ZBSUw7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY2hhcnNldFtjXSA9IDE7CisgICAgICAgICgqcCkrKzsKKyAgICAgICAgc29tZXRoaW5nX2ZvdW5kID0gVFJVRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTEZOTV9TQ0hTX01BWVJBTkdFOgorICAgICAgaWYoYyA9PSAnLScpIHsKKyAgICAgICAgY2hhcnNldFtjXSA9IDE7CisgICAgICAgICgqcCkrKzsKKyAgICAgICAgbGFzdGNoYXIgPSAnLSc7CisgICAgICAgIHN0YXRlID0gQ1VSTEZOTV9TQ0hTX01BWVJBTkdFMjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoYyA9PSAnWycpIHsKKyAgICAgICAgc3RhdGUgPSBDVVJMRk5NX1NDSFNfREVGQVVMVDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoSVNBTE5VTShjKSkgeworICAgICAgICBjaGFyc2V0W2NdID0gMTsKKyAgICAgICAgKCpwKSsrOworICAgICAgfQorICAgICAgZWxzZSBpZihjID09ICdcXCcpIHsKKyAgICAgICAgYyA9ICooKysoKnApKTsKKyAgICAgICAgaWYoSVNQUklOVChjKSkgeworICAgICAgICAgIGNoYXJzZXRbY10gPSAxOworICAgICAgICAgICgqcCkrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIFNFVENIQVJTRVRfRkFJTDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoYyA9PSAnXScpIHsKKyAgICAgICAgcmV0dXJuIFNFVENIQVJTRVRfT0s7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX0ZBSUw7CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxGTk1fU0NIU19NQVlSQU5HRTI6CisgICAgICBpZihjID09ICdcXCcpIHsKKyAgICAgICAgYyA9ICooKysoKnApKTsKKyAgICAgICAgaWYoIUlTUFJJTlQoYykpCisgICAgICAgICAgcmV0dXJuIFNFVENIQVJTRVRfRkFJTDsKKyAgICAgIH0KKyAgICAgIGlmKGMgPT0gJ10nKSB7CisgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX09LOworICAgICAgfQorICAgICAgZWxzZSBpZihjID09ICdcXCcpIHsKKyAgICAgICAgYyA9ICooKysoKnApKTsKKyAgICAgICAgaWYoSVNQUklOVChjKSkgeworICAgICAgICAgIGNoYXJzZXRbY10gPSAxOworICAgICAgICAgIHN0YXRlID0gQ1VSTEZOTV9TQ0hTX0RFRkFVTFQ7CisgICAgICAgICAgKCpwKSsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gU0VUQ0hBUlNFVF9GQUlMOworICAgICAgfQorICAgICAgaWYoYyA+PSByYW5nZXN0YXJ0KSB7CisgICAgICAgIGlmKChJU0xPV0VSKGMpICYmIElTTE9XRVIocmFuZ2VzdGFydCkpIHx8CisgICAgICAgICAgIChJU0RJR0lUKGMpICYmIElTRElHSVQocmFuZ2VzdGFydCkpIHx8CisgICAgICAgICAgIChJU1VQUEVSKGMpICYmIElTVVBQRVIocmFuZ2VzdGFydCkpKSB7CisgICAgICAgICAgY2hhcnNldFtsYXN0Y2hhcl0gPSAwOworICAgICAgICAgIHJhbmdlc3RhcnQrKzsKKyAgICAgICAgICB3aGlsZShyYW5nZXN0YXJ0KysgPD0gYykKKyAgICAgICAgICAgIGNoYXJzZXRbcmFuZ2VzdGFydC0xXSA9IDE7CisgICAgICAgICAgKCpwKSsrOworICAgICAgICAgIHN0YXRlID0gQ1VSTEZOTV9TQ0hTX0RFRkFVTFQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX0ZBSUw7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxGTk1fU0NIU19SSUdIVEJSOgorICAgICAgaWYoYyA9PSAnWycpIHsKKyAgICAgICAgc3RhdGUgPSBDVVJMRk5NX1NDSFNfUklHSFRCUkxFRlRCUjsKKyAgICAgICAgY2hhcnNldFtjXSA9IDE7CisgICAgICAgICgqcCkrKzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoYyA9PSAnXScpIHsKKyAgICAgICAgcmV0dXJuIFNFVENIQVJTRVRfT0s7CisgICAgICB9CisgICAgICBlbHNlIGlmKGMgPT0gJ1wwJykgeworICAgICAgICByZXR1cm4gU0VUQ0hBUlNFVF9GQUlMOworICAgICAgfQorICAgICAgZWxzZSBpZihJU1BSSU5UKGMpKSB7CisgICAgICAgIGNoYXJzZXRbY10gPSAxOworICAgICAgICAoKnApKys7CisgICAgICAgIHN0YXRlID0gQ1VSTEZOTV9TQ0hTX0RFRkFVTFQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIC8qIHVzZWQgJ2dvdG8gZmFpbCcgaW5zdGVhZCBvZiAncmV0dXJuIFNFVENIQVJTRVRfRkFJTCcgdG8gYXZvaWQgYQorICAgICAgICAgKiBub25zZW5zZSB3YXJuaW5nICdzdGF0ZW1lbnQgbm90IHJlYWNoZWQnIGF0IGVuZCBvZiB0aGUgZm5jIHdoZW4KKyAgICAgICAgICogY29tcGlsaW5nIG9uIFNvbGFyaXMgKi8KKyAgICAgICAgZ290byBmYWlsOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMRk5NX1NDSFNfUklHSFRCUkxFRlRCUjoKKyAgICAgIGlmKGMgPT0gJ10nKSB7CisgICAgICAgIHJldHVybiBTRVRDSEFSU0VUX09LOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlICA9IENVUkxGTk1fU0NIU19ERUZBVUxUOworICAgICAgICBjaGFyc2V0W2NdID0gMTsKKyAgICAgICAgKCpwKSsrOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CitmYWlsOgorICByZXR1cm4gU0VUQ0hBUlNFVF9GQUlMOworfQorCitzdGF0aWMgaW50IGxvb3AoY29uc3QgdW5zaWduZWQgY2hhciAqcGF0dGVybiwgY29uc3QgdW5zaWduZWQgY2hhciAqc3RyaW5nKQoreworICBsb29wX3N0YXRlIHN0YXRlID0gQ1VSTEZOTV9MT09QX0RFRkFVTFQ7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKXBhdHRlcm47CisgIHVuc2lnbmVkIGNoYXIgKnMgPSAodW5zaWduZWQgY2hhciAqKXN0cmluZzsKKyAgdW5zaWduZWQgY2hhciBjaGFyc2V0W0NVUkxGTk1fQ0hTRVRfU0laRV0gPSB7IDAgfTsKKyAgaW50IHJjID0gMDsKKworICBmb3IoOzspIHsKKyAgICBzd2l0Y2goc3RhdGUpIHsKKyAgICBjYXNlIENVUkxGTk1fTE9PUF9ERUZBVUxUOgorICAgICAgaWYoKnAgPT0gJyonKSB7CisgICAgICAgIHdoaWxlKCoocCsxKSA9PSAnKicpIC8qIGVsaW1pbmF0ZSBtdWx0aXBsZSBzdGFycyAqLworICAgICAgICAgIHArKzsKKyAgICAgICAgaWYoKnMgPT0gJ1wwJyAmJiAqKHArMSkgPT0gJ1wwJykKKyAgICAgICAgICByZXR1cm4gQ1VSTF9GTk1BVENIX01BVENIOworICAgICAgICByYyA9IGxvb3AocCArIDEsIHMpOyAvKiAqLnR4dCBtYXRjaGVzIC50eHQgPD0+IC50eHQgbWF0Y2hlcyAudHh0ICovCisgICAgICAgIGlmKHJjID09IENVUkxfRk5NQVRDSF9NQVRDSCkKKyAgICAgICAgICByZXR1cm4gQ1VSTF9GTk1BVENIX01BVENIOworICAgICAgICBpZigqcykgLyogbGV0IHRoZSBzdGFyIGVhdCB1cCBvbmUgY2hhcmFjdGVyICovCisgICAgICAgICAgcysrOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIENVUkxfRk5NQVRDSF9OT01BVENIOworICAgICAgfQorICAgICAgZWxzZSBpZigqcCA9PSAnPycpIHsKKyAgICAgICAgaWYoSVNQUklOVCgqcykpIHsKKyAgICAgICAgICBzKys7CisgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoKnMgPT0gJ1wwJykKKyAgICAgICAgICByZXR1cm4gQ1VSTF9GTk1BVENIX05PTUFUQ0g7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gQ1VSTF9GTk1BVENIX0ZBSUw7IC8qIGNhbm5vdCBkZWFsIHdpdGggb3RoZXIgY2hhcmFjdGVyICovCisgICAgICB9CisgICAgICBlbHNlIGlmKCpwID09ICdcMCcpIHsKKyAgICAgICAgaWYoKnMgPT0gJ1wwJykKKyAgICAgICAgICByZXR1cm4gQ1VSTF9GTk1BVENIX01BVENIOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIENVUkxfRk5NQVRDSF9OT01BVENIOworICAgICAgfQorICAgICAgZWxzZSBpZigqcCA9PSAnXFwnKSB7CisgICAgICAgIHN0YXRlID0gQ1VSTEZOTV9MT09QX0JBQ0tTTEFTSDsKKyAgICAgICAgcCsrOworICAgICAgfQorICAgICAgZWxzZSBpZigqcCA9PSAnWycpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqcHAgPSBwKzE7IC8qIGNhbm5vdCBoYW5kbGUgd2l0aCBwb2ludGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgIGlmKHNldGNoYXJzZXQoJnBwLCBjaGFyc2V0KSkgeworICAgICAgICAgIGludCBmb3VuZCA9IEZBTFNFOworICAgICAgICAgIGlmKGNoYXJzZXRbKHVuc2lnbmVkIGludCkqc10pCisgICAgICAgICAgICBmb3VuZCA9IFRSVUU7CisgICAgICAgICAgZWxzZSBpZihjaGFyc2V0W0NVUkxGTk1fQUxOVU1dKQorICAgICAgICAgICAgZm91bmQgPSBJU0FMTlVNKCpzKTsKKyAgICAgICAgICBlbHNlIGlmKGNoYXJzZXRbQ1VSTEZOTV9BTFBIQV0pCisgICAgICAgICAgICBmb3VuZCA9IElTQUxQSEEoKnMpOworICAgICAgICAgIGVsc2UgaWYoY2hhcnNldFtDVVJMRk5NX0RJR0lUXSkKKyAgICAgICAgICAgIGZvdW5kID0gSVNESUdJVCgqcyk7CisgICAgICAgICAgZWxzZSBpZihjaGFyc2V0W0NVUkxGTk1fWERJR0lUXSkKKyAgICAgICAgICAgIGZvdW5kID0gSVNYRElHSVQoKnMpOworICAgICAgICAgIGVsc2UgaWYoY2hhcnNldFtDVVJMRk5NX1BSSU5UXSkKKyAgICAgICAgICAgIGZvdW5kID0gSVNQUklOVCgqcyk7CisgICAgICAgICAgZWxzZSBpZihjaGFyc2V0W0NVUkxGTk1fU1BBQ0VdKQorICAgICAgICAgICAgZm91bmQgPSBJU1NQQUNFKCpzKTsKKyAgICAgICAgICBlbHNlIGlmKGNoYXJzZXRbQ1VSTEZOTV9VUFBFUl0pCisgICAgICAgICAgICBmb3VuZCA9IElTVVBQRVIoKnMpOworICAgICAgICAgIGVsc2UgaWYoY2hhcnNldFtDVVJMRk5NX0xPV0VSXSkKKyAgICAgICAgICAgIGZvdW5kID0gSVNMT1dFUigqcyk7CisgICAgICAgICAgZWxzZSBpZihjaGFyc2V0W0NVUkxGTk1fQkxBTktdKQorICAgICAgICAgICAgZm91bmQgPSBJU0JMQU5LKCpzKTsKKyAgICAgICAgICBlbHNlIGlmKGNoYXJzZXRbQ1VSTEZOTV9HUkFQSF0pCisgICAgICAgICAgICBmb3VuZCA9IElTR1JBUEgoKnMpOworCisgICAgICAgICAgaWYoY2hhcnNldFtDVVJMRk5NX05FR0FURV0pCisgICAgICAgICAgICBmb3VuZCA9ICFmb3VuZDsKKworICAgICAgICAgIGlmKGZvdW5kKSB7CisgICAgICAgICAgICBwID0gcHArMTsKKyAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgIG1lbXNldChjaGFyc2V0LCAwLCBDVVJMRk5NX0NIU0VUX1NJWkUpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gQ1VSTF9GTk1BVENIX05PTUFUQ0g7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBDVVJMX0ZOTUFUQ0hfRkFJTDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZigqcCsrICE9ICpzKyspCisgICAgICAgICAgcmV0dXJuIENVUkxfRk5NQVRDSF9OT01BVENIOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMRk5NX0xPT1BfQkFDS1NMQVNIOgorICAgICAgaWYoSVNQUklOVCgqcCkpIHsKKyAgICAgICAgaWYoKnArKyA9PSAqcysrKQorICAgICAgICAgIHN0YXRlID0gQ1VSTEZOTV9MT09QX0RFRkFVTFQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gQ1VSTF9GTk1BVENIX05PTUFUQ0g7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBDVVJMX0ZOTUFUQ0hfRkFJTDsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorfQorCisvKgorICogQHVuaXR0ZXN0OiAxMzA3CisgKi8KK2ludCBDdXJsX2ZubWF0Y2godm9pZCAqcHRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisgICh2b2lkKXB0cjsgLyogdGhlIGFyZ3VtZW50IGlzIHNwZWNpZmllZCBieSB0aGUgY3VybF9mbm1hdGNoX2NhbGxiYWNrCisgICAgICAgICAgICAgICAgcHJvdG90eXBlLCBidXQgbm90IHVzZWQgYnkgQ3VybF9mbm1hdGNoKCkgKi8KKyAgaWYoIXBhdHRlcm4gfHwgIXN0cmluZykgeworICAgIHJldHVybiBDVVJMX0ZOTUFUQ0hfRkFJTDsKKyAgfQorICByZXR1cm4gbG9vcCgodW5zaWduZWQgY2hhciAqKXBhdHRlcm4sICh1bnNpZ25lZCBjaGFyICopc3RyaW5nKTsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2ZubWF0Y2guaCBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2ZubWF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzM1ZDAzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2N1cmxfZm5tYXRjaC5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfRk5NQVRDSF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0ZOTUFUQ0hfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQ1VSTF9GTk1BVENIX01BVENIICAgIDAKKyNkZWZpbmUgQ1VSTF9GTk1BVENIX05PTUFUQ0ggIDEKKyNkZWZpbmUgQ1VSTF9GTk1BVENIX0ZBSUwgICAgIDIKKworLyogZGVmYXVsdCBwYXR0ZXJuIG1hdGNoaW5nIGZ1bmN0aW9uCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEltcGxlbWVudGVkIHdpdGggcmVjdXJzaXZlIGJhY2t0cmFja2luZywgaWYgeW91IHdhbnQgdG8gdXNlIEN1cmxfZm5tYXRjaCwKKyAqIHBsZWFzZSBub3RlIHRoYXQgdGhlcmUgaXMgbm90IGltcGxlbWVudGVkIFVURi9VTklDT0RFIHN1cHBvcnQuCisgKgorICogSW1wbGVtZW50ZWQgZmVhdHVyZXM6CisgKiAnPycgbm90YXRpb24sIGRvZXMgbm90IG1hdGNoIFVURiBjaGFyYWN0ZXJzCisgKiAnKicgY2FuIGFsc28gd29yayB3aXRoIFVURiBzdHJpbmcKKyAqIFthLXpBLVowLTldIGVudW1lcmF0aW9uIHN1cHBvcnQKKyAqCisgKiBrZXl3b3JkczogYWxudW0sIGRpZ2l0LCB4ZGlnaXQsIGFscGhhLCBwcmludCwgYmxhbmssIGxvd2VyLCBncmFwaCwgc3BhY2UKKyAqICAgICAgICAgICBhbmQgdXBwZXIgKHVzZSBhcyAiW1s6YWxudW06XV0iKQorICovCitpbnQgQ3VybF9mbm1hdGNoKHZvaWQgKnB0ciwgY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0ZOTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2N1cmxfZ2V0aG9zdG5hbWUuYyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2dldGhvc3RuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFmYTQ1YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2dldGhvc3RuYW1lLmMKQEAgLTAsMCArMSwxMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJjdXJsX2dldGhvc3RuYW1lLmgiCisKKy8qCisgKiBDdXJsX2dldGhvc3RuYW1lKCkgaXMgYSB3cmFwcGVyIGFyb3VuZCBnZXRob3N0bmFtZSgpIHdoaWNoIGFsbG93cworICogb3ZlcnJpZGluZyB0aGUgaG9zdCBuYW1lIHRoYXQgdGhlIGZ1bmN0aW9uIHdvdWxkIG5vcm1hbGx5IHJldHVybi4KKyAqIFRoaXMgY2FwYWJpbGl0eSBpcyB1c2VkIGJ5IHRoZSB0ZXN0IHN1aXRlIHRvIHZlcmlmeSBleGFjdCBtYXRjaGluZworICogb2YgTlRMTSBhdXRoZW50aWNhdGlvbiwgd2hpY2ggZXhlcmNpc2VzIGxpYmN1cmwncyBNRDQgYW5kIERFUyBjb2RlCisgKiBhcyB3ZWxsIGFzIGJ5IHRoZSBTTVRQIG1vZHVsZSB3aGVuIGEgaG9zdG5hbWUgaXMgbm90IHByb3ZpZGVkLgorICoKKyAqIEZvciBsaWJjdXJsIGRlYnVnIGVuYWJsZWQgYnVpbGRzIGhvc3QgbmFtZSBvdmVycmlkaW5nIHRha2VzIHBsYWNlCisgKiB3aGVuIGVudmlyb25tZW50IHZhcmlhYmxlIENVUkxfR0VUSE9TVE5BTUUgaXMgc2V0LCB1c2luZyB0aGUgdmFsdWUKKyAqIGhlbGQgYnkgdGhlIHZhcmlhYmxlIHRvIG92ZXJyaWRlIHJldHVybmVkIGhvc3QgbmFtZS4KKyAqCisgKiBOb3RlOiBUaGUgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgdGhlIHVuLXF1YWxpZmllZCBob3N0bmFtZSByYXRoZXIKKyAqIHRoYW4gYmVpbmcgcHJvdmlkZXIgZGVwZW5kZW50LgorICoKKyAqIEZvciBsaWJjdXJsIHNoYXJlZCBsaWJyYXJ5IHJlbGVhc2UgYnVpbGRzIHRoZSB0ZXN0IHN1aXRlIHByZWxvYWRzCisgKiBhbm90aGVyIHNoYXJlZCBsaWJyYXJ5IG5hbWVkIGxpYmhvc3RuYW1lIHVzaW5nIHRoZSBMRF9QUkVMT0FECisgKiBtZWNoYW5pc20gd2hpY2ggaW50ZXJjZXB0cywgYW5kIG1pZ2h0IG92ZXJyaWRlLCB0aGUgZ2V0aG9zdG5hbWUoKQorICogZnVuY3Rpb24gY2FsbC4gSW4gdGhpcyBjYXNlIGEgZ2l2ZW4gcGxhdGZvcm0gbXVzdCBzdXBwb3J0IHRoZQorICogTERfUFJFTE9BRCBtZWNoYW5pc20gYW5kIGFkZGl0aW9uYWxseSBoYXZlIGVudmlyb25tZW50IHZhcmlhYmxlCisgKiBDVVJMX0dFVEhPU1ROQU1FIHNldCBpbiBvcmRlciB0byBvdmVycmlkZSB0aGUgcmV0dXJuZWQgaG9zdCBuYW1lLgorICoKKyAqIEZvciBsaWJjdXJsIHN0YXRpYyBsaWJyYXJ5IHJlbGVhc2UgYnVpbGRzIG5vIG92ZXJyaWRpbmcgdGFrZXMgcGxhY2UuCisgKi8KKworaW50IEN1cmxfZ2V0aG9zdG5hbWUoY2hhciAqbmFtZSwgR0VUSE9TVE5BTUVfVFlQRV9BUkcyIG5hbWVsZW4pIHsKKworI2lmbmRlZiBIQVZFX0dFVEhPU1ROQU1FCisKKyAgLyogQWxsb3cgY29tcGlsYXRpb24gYW5kIHJldHVybiBmYWlsdXJlIHdoZW4gdW5hdmFpbGFibGUgKi8KKyAgKHZvaWQpIG5hbWU7CisgICh2b2lkKSBuYW1lbGVuOworICByZXR1cm4gLTE7CisKKyNlbHNlCisgIGludCBlcnI7CisgIGNoYXIqIGRvdDsKKworI2lmZGVmIERFQlVHQlVJTEQKKworICAvKiBPdmVycmlkZSBob3N0IG5hbWUgd2hlbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBDVVJMX0dFVEhPU1ROQU1FIGlzIHNldCAqLworICBjb25zdCBjaGFyICpmb3JjZV9ob3N0bmFtZSA9IGdldGVudigiQ1VSTF9HRVRIT1NUTkFNRSIpOworICBpZihmb3JjZV9ob3N0bmFtZSkgeworICAgIHN0cm5jcHkobmFtZSwgZm9yY2VfaG9zdG5hbWUsIG5hbWVsZW4pOworICAgIGVyciA9IDA7CisgIH0KKyAgZWxzZSB7CisgICAgbmFtZVswXSA9ICdcMCc7CisgICAgZXJyID0gZ2V0aG9zdG5hbWUobmFtZSwgbmFtZWxlbik7CisgIH0KKworI2Vsc2UgLyogREVCVUdCVUlMRCAqLworCisgIC8qIFRoZSBjYWxsIHRvIHN5c3RlbSdzIGdldGhvc3RuYW1lKCkgbWlnaHQgZ2V0IGludGVyY2VwdGVkIGJ5IHRoZQorICAgICBsaWJob3N0bmFtZSBsaWJyYXJ5IHdoZW4gbGliY3VybCBpcyBidWlsdCBhcyBhIG5vbi1kZWJ1ZyBzaGFyZWQKKyAgICAgbGlicmFyeSB3aGVuIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUuICovCisgIG5hbWVbMF0gPSAnXDAnOworICBlcnIgPSBnZXRob3N0bmFtZShuYW1lLCBuYW1lbGVuKTsKKworI2VuZGlmCisKKyAgbmFtZVtuYW1lbGVuIC0gMV0gPSAnXDAnOworCisgIGlmKGVycikKKyAgICByZXR1cm4gZXJyOworCisgIC8qIFRydW5jYXRlIGRvbWFpbiwgbGVhdmUgb25seSBtYWNoaW5lIG5hbWUgKi8KKyAgZG90ID0gc3RyY2hyKG5hbWUsICcuJyk7CisgIGlmKGRvdCkKKyAgICAqZG90ID0gJ1wwJzsKKworICByZXR1cm4gMDsKKyNlbmRpZgorCit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybF9nZXRob3N0bmFtZS5oIGIvY3VybC03LjI1LjAvbGliL2N1cmxfZ2V0aG9zdG5hbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODc0MGY2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2N1cmxfZ2V0aG9zdG5hbWUuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0dFVEhPU1ROQU1FX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfR0VUSE9TVE5BTUVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEhvc3RuYW1lIGJ1ZmZlciBzaXplICovCisjZGVmaW5lIEhPU1ROQU1FX01BWCAxMDI0CisKKy8qIFRoaXMgcmV0dXJucyB0aGUgbG9jYWwgbWFjaGluZSdzIHVuLXF1YWxpZmllZCBob3N0bmFtZSAqLworaW50IEN1cmxfZ2V0aG9zdG5hbWUoY2hhciAqbmFtZSwgR0VUSE9TVE5BTUVfVFlQRV9BUkcyIG5hbWVsZW4pOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfR0VUSE9TVE5BTUVfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2N1cmxfZ3NzYXBpLmMgYi9jdXJsLTcuMjUuMC9saWIvY3VybF9nc3NhcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWM4YWQwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2N1cmxfZ3NzYXBpLmMKQEAgLTAsMCArMSw2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX0dTU0FQSQorCisjaW5jbHVkZSAiY3VybF9nc3NhcGkuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorCitPTV91aW50MzIgQ3VybF9nc3NfaW5pdF9zZWNfY29udGV4dCgKKyAgICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICBPTV91aW50MzIgKiBtaW5vcl9zdGF0dXMsCisgICAgZ3NzX2N0eF9pZF90ICogY29udGV4dCwKKyAgICBnc3NfbmFtZV90IHRhcmdldF9uYW1lLAorICAgIGdzc19jaGFubmVsX2JpbmRpbmdzX3QgaW5wdXRfY2hhbl9iaW5kaW5ncywKKyAgICBnc3NfYnVmZmVyX3QgaW5wdXRfdG9rZW4sCisgICAgZ3NzX2J1ZmZlcl90IG91dHB1dF90b2tlbiwKKyAgICBPTV91aW50MzIgKiByZXRfZmxhZ3MpCit7CisgIE9NX3VpbnQzMiByZXFfZmxhZ3MgPSBHU1NfQ19NVVRVQUxfRkxBRyB8IEdTU19DX1JFUExBWV9GTEFHOworCisgIGlmKGRhdGEtPnNldC5nc3NhcGlfZGVsZWdhdGlvbiAmIENVUkxHU1NBUElfREVMRUdBVElPTl9QT0xJQ1lfRkxBRykgeworI2lmZGVmIEdTU19DX0RFTEVHX1BPTElDWV9GTEFHCisgICAgcmVxX2ZsYWdzIHw9IEdTU19DX0RFTEVHX1BPTElDWV9GTEFHOworI2Vsc2UKKyAgICBpbmZvZihkYXRhLCAid2FybmluZzogc3VwcG9ydCBmb3IgQ1VSTEdTU0FQSV9ERUxFR0FUSU9OX1BPTElDWV9GTEFHIG5vdCAiCisgICAgICAgICJjb21waWxlZCBpblxuIik7CisjZW5kaWYKKyAgfQorCisgIGlmKGRhdGEtPnNldC5nc3NhcGlfZGVsZWdhdGlvbiAmIENVUkxHU1NBUElfREVMRUdBVElPTl9GTEFHKQorICAgIHJlcV9mbGFncyB8PSBHU1NfQ19ERUxFR19GTEFHOworCisgIHJldHVybiBnc3NfaW5pdF9zZWNfY29udGV4dChtaW5vcl9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19OT19DUkVERU5USUFMLCAvKiBjcmVkX2hhbmRsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfTk9fT0lELCAvKiBtZWNoX3R5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIHRpbWVfcmVxICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9jaGFuX2JpbmRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBhY3R1YWxfbWVjaF90eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMIC8qIHRpbWVfcmVjICovKTsKK30KKworI2VuZGlmIC8qIEhBVkVfR1NTQVBJICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybF9nc3NhcGkuaCBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2dzc2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNDU5NmIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY3VybF9nc3NhcGkuaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0dTU0FQSV9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0dTU0FQSV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisKKyNpZmRlZiBIQVZFX0dTU0FQSQorCisjaWZkZWYgSEFWRV9HU1NHTlUKKyMgIGluY2x1ZGUgPGdzcy5oPgorI2VsaWYgZGVmaW5lZCBIQVZFX0dTU01JVAorICAgLyogTUlUIHN0eWxlICovCisjICBpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpLmg+CisjICBpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2dlbmVyaWMuaD4KKyMgIGluY2x1ZGUgPGdzc2FwaS9nc3NhcGlfa3JiNS5oPgorI2Vsc2UKKyAgIC8qIEhlaW1kYWwtc3R5bGUgKi8KKyMgIGluY2x1ZGUgPGdzc2FwaS5oPgorI2VuZGlmCisKKworLyogQ29tbW9uIG1ldGhvZCBmb3IgdXNpbmcgZ3NzIGFwaSAqLworCitPTV91aW50MzIgQ3VybF9nc3NfaW5pdF9zZWNfY29udGV4dCgKKyAgICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICBPTV91aW50MzIgKiBtaW5vcl9zdGF0dXMsCisgICAgZ3NzX2N0eF9pZF90ICogY29udGV4dCwKKyAgICBnc3NfbmFtZV90IHRhcmdldF9uYW1lLAorICAgIGdzc19jaGFubmVsX2JpbmRpbmdzX3QgaW5wdXRfY2hhbl9iaW5kaW5ncywKKyAgICBnc3NfYnVmZmVyX3QgaW5wdXRfdG9rZW4sCisgICAgZ3NzX2J1ZmZlcl90IG91dHB1dF90b2tlbiwKKyAgICBPTV91aW50MzIgKiByZXRfZmxhZ3MpOworCisjZW5kaWYgLyogSEFWRV9HU1NBUEkgKi8KKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0dTU0FQSV9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybF9obWFjLmggYi9jdXJsLTcuMjUuMC9saWIvY3VybF9obWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2NWM4YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2htYWMuaApAQCAtMCwwICsxLDY3IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0hNQUNfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9ITUFDX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSAorCit0eXBlZGVmIHZvaWQgICAgKCogSE1BQ19oaW5pdF9mdW5jKSh2b2lkICogY29udGV4dCk7Cit0eXBlZGVmIHZvaWQgICAgKCogSE1BQ19odXBkYXRlX2Z1bmMpKHZvaWQgKiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbik7Cit0eXBlZGVmIHZvaWQgICAgKCogSE1BQ19oZmluYWxfZnVuYykodW5zaWduZWQgY2hhciAqIHJlc3VsdCwgdm9pZCAqIGNvbnRleHQpOworCisKKy8qIFBlci1oYXNoIGZ1bmN0aW9uIEhNQUMgcGFyYW1ldGVycy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBITUFDX2hpbml0X2Z1bmMgICAgICAgaG1hY19oaW5pdDsgICAgIC8qIEluaXRpYWxpemUgY29udGV4dCBwcm9jZWR1cmUuICovCisgIEhNQUNfaHVwZGF0ZV9mdW5jICAgICBobWFjX2h1cGRhdGU7ICAgLyogVXBkYXRlIGNvbnRleHQgd2l0aCBkYXRhLiAqLworICBITUFDX2hmaW5hbF9mdW5jICAgICAgaG1hY19oZmluYWw7ICAgIC8qIEdldCBmaW5hbCByZXN1bHQgcHJvY2VkdXJlLiAqLworICB1bnNpZ25lZCBpbnQgICAgICAgICAgaG1hY19jdHh0c2l6ZTsgIC8qIENvbnRleHQgc3RydWN0dXJlIHNpemUuICovCisgIHVuc2lnbmVkIGludCAgICAgICAgICBobWFjX21heGtleWxlbjsgLyogTWF4aW11bSBrZXkgbGVuZ3RoIChieXRlcykuICovCisgIHVuc2lnbmVkIGludCAgICAgICAgICBobWFjX3Jlc3VsdGxlbjsgLyogUmVzdWx0IGxlbmd0aCAoYnl0ZXMpLiAqLworfSBITUFDX3BhcmFtczsKKworCisvKiBITUFDIGNvbXB1dGF0aW9uIGNvbnRleHQuICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgSE1BQ19wYXJhbXMgKiAgIGhtYWNfaGFzaDsgICAgICAvKiBIYXNoIGZ1bmN0aW9uIGRlZmluaXRpb24uICovCisgIHZvaWQgKiAgICAgICAgICAgICAgICBobWFjX2hhc2hjdHh0MTsgLyogSGFzaCBmdW5jdGlvbiBjb250ZXh0IDEuICovCisgIHZvaWQgKiAgICAgICAgICAgICAgICBobWFjX2hhc2hjdHh0MjsgLyogSGFzaCBmdW5jdGlvbiBjb250ZXh0IDIuICovCit9IEhNQUNfY29udGV4dDsKKworCisvKiBQcm90b3R5cGVzLiAqLworCitITUFDX2NvbnRleHQgKiBDdXJsX0hNQUNfaW5pdChjb25zdCBITUFDX3BhcmFtcyAqIGhhc2hwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbik7CitpbnQgQ3VybF9ITUFDX3VwZGF0ZShITUFDX2NvbnRleHQgKiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKTsKK2ludCBDdXJsX0hNQUNfZmluYWwoSE1BQ19jb250ZXh0ICogY29udGV4dCwgdW5zaWduZWQgY2hhciAqIHJlc3VsdCk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfSE1BQ19IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybF9sZGFwLmggYi9jdXJsLTcuMjUuMC9saWIvY3VybF9sZGFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkMTNjZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX2xkYXAuaApAQCAtMCwwICsxLDM1IEBACisjaWZuZGVmIF9fQ1VSTF9MREFQX0gKKyNkZWZpbmUgX19DVVJMX0xEQVBfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0xEQVAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9sZGFwOworCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0xEQVBTKSAmJiBcCisgICAgKChkZWZpbmVkKFVTRV9PUEVOTERBUCkgJiYgZGVmaW5lZChVU0VfU1NMKSkgfHwgXAorICAgICAoIWRlZmluZWQoVVNFX09QRU5MREFQKSAmJiBkZWZpbmVkKEhBVkVfTERBUF9TU0wpKSkKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9sZGFwczsKKyNlbmRpZgorCisjZW5kaWYKKyNlbmRpZiAvKiBfX0NVUkxfTERBUF9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybF9tZDQuaCBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX21kNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNmMxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY3VybF9tZDQuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX01ENF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX01ENF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKy8qIE5TUyBjcnlwdG8gbGlicmFyeSBkb2VzIG5vdCBwcm92aWRlIHRoZSBNRDQgaGFzaCBhbGdvcml0aG0sIHNvIHRoYXQgd2UgaGF2ZQorICogYSBsb2NhbCBpbXBsZW1lbnRhdGlvbiBvZiBpdCAqLworI2lmZGVmIFVTRV9OU1MKK3ZvaWQgQ3VybF9tZDRpdCh1bnNpZ25lZCBjaGFyICpvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgbGVuKTsKKyNlbmRpZiAvKiBVU0VfTlNTICovCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9NRDRfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2N1cmxfbWQ1LmggYi9jdXJsLTcuMjUuMC9saWIvY3VybF9tZDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGM2MWUzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2N1cmxfbWQ1LmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9NRDVfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9NRDVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRICisjaW5jbHVkZSAiY3VybF9obWFjLmgiCisKK2V4dGVybiBjb25zdCBITUFDX3BhcmFtcyBDdXJsX0hNQUNfTUQ1WzFdOworCit2b2lkIEN1cmxfbWQ1aXQodW5zaWduZWQgY2hhciAqb3V0cHV0LAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0KTsKKyNlbmRpZgorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfTUQ1X0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jdXJsX21lbW9yeS5oIGIvY3VybC03LjI1LjAvbGliL2N1cmxfbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExOTQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX21lbW9yeS5oCkBAIC0wLDAgKzEsNDkgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfTUVNT1JZX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfTUVNT1JZX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+IC8qIGZvciB0aGUgdHlwZWRlZnMgKi8KKworZXh0ZXJuIGN1cmxfbWFsbG9jX2NhbGxiYWNrIEN1cmxfY21hbGxvYzsKK2V4dGVybiBjdXJsX2ZyZWVfY2FsbGJhY2sgQ3VybF9jZnJlZTsKK2V4dGVybiBjdXJsX3JlYWxsb2NfY2FsbGJhY2sgQ3VybF9jcmVhbGxvYzsKK2V4dGVybiBjdXJsX3N0cmR1cF9jYWxsYmFjayBDdXJsX2NzdHJkdXA7CitleHRlcm4gY3VybF9jYWxsb2NfY2FsbGJhY2sgQ3VybF9jY2FsbG9jOworCisjaWZuZGVmIENVUkxERUJVRworLyogT25seSBkbyB0aGlzIGRlZmluZS1tYW5pYSBpZiB3ZSdyZSBub3QgdXNpbmcgdGhlIG1lbWRlYnVnIHN5c3RlbSwgYXMgdGhhdAorICAgaGFzIHByZWZlcmVuY2Ugb24gdGhpcyBtYWdpYy4gKi8KKyN1bmRlZiBzdHJkdXAKKyNkZWZpbmUgc3RyZHVwKHB0cikgQ3VybF9jc3RyZHVwKHB0cikKKyN1bmRlZiBtYWxsb2MKKyNkZWZpbmUgbWFsbG9jKHNpemUpIEN1cmxfY21hbGxvYyhzaXplKQorI3VuZGVmIGNhbGxvYworI2RlZmluZSBjYWxsb2MobmJlbGVtLHNpemUpIEN1cmxfY2NhbGxvYyhuYmVsZW0sIHNpemUpCisjdW5kZWYgcmVhbGxvYworI2RlZmluZSByZWFsbG9jKHB0cixzaXplKSBDdXJsX2NyZWFsbG9jKHB0ciwgc2l6ZSkKKyN1bmRlZiBmcmVlCisjZGVmaW5lIGZyZWUocHRyKSBDdXJsX2NmcmVlKHB0cikKKworI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9NRU1PUllfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2N1cmxfbWVtcmNoci5jIGIvY3VybC03LjI1LjAvbGliL2N1cmxfbWVtcmNoci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OWFmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY3VybF9tZW1yY2hyLmMKQEAgLTAsMCArMSw2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSAiY3VybF9tZW1yY2hyLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2lmbmRlZiBIQVZFX01FTVJDSFIKKworLyoKKyAqIEN1cmxfbWVtcmNocigpCisgKgorICogT3VyIG1lbXJjaHIoKSBmdW5jdGlvbiBjbG9uZSBmb3Igc3lzdGVtcyB3aGljaCBsYWNrIHRoaXMgZnVuY3Rpb24uIFRoZQorICogbWVtcmNocigpIGZ1bmN0aW9uIGlzIGxpa2UgdGhlIG1lbWNocigpIGZ1bmN0aW9uLCBleGNlcHQgdGhhdCBpdCBzZWFyY2hlcworICogYmFja3dhcmRzIGZyb20gdGhlIGVuZCBvZiB0aGUgbiBieXRlcyBwb2ludGVkIHRvIGJ5IHMgaW5zdGVhZCBvZiBmb3J3YXJkCisgKiBmcm9tIHRoZSBiZWdpbm5pbmcuCisgKi8KKwordm9pZCAqCitDdXJsX21lbXJjaHIoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gczsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcSA9IHM7CisKKyAgcCArPSBuIC0gMTsKKworICB3aGlsZShwID49IHEpIHsKKyAgICBpZigqcCA9PSAodW5zaWduZWQgY2hhciljKQorICAgICAgcmV0dXJuICh2b2lkICopcDsKKyAgICBwLS07CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworI2VuZGlmIC8qIEhBVkVfTUVNUkNIUiAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2N1cmxfbWVtcmNoci5oIGIvY3VybC03LjI1LjAvbGliL2N1cmxfbWVtcmNoci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MDYxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY3VybF9tZW1yY2hyLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9NRU1SQ0hSX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfTUVNUkNIUl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX01FTVJDSFIKKworI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyMgIGluY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyMgIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorCisjZWxzZSAvKiBIQVZFX01FTVJDSFIgKi8KKwordm9pZCAqQ3VybF9tZW1yY2hyKGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CisKKyNkZWZpbmUgbWVtcmNocih4LHkseikgQ3VybF9tZW1yY2hyKCh4KSwoeSksKHopKQorCisjZW5kaWYgLyogSEFWRV9NRU1SQ0hSICovCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9NRU1SQ0hSX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jdXJsX250bG0uYyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX250bG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2Q2N2EwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2N1cmxfbnRsbS5jCkBAIC0wLDAgKzEsMjM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfTlRMTQorCisvKgorICogTlRMTSBkZXRhaWxzOgorICoKKyAqIGh0dHA6Ly9kYXZlbnBvcnQuc291cmNlZm9yZ2UubmV0L250bG0uaHRtbAorICogaHR0cDovL3d3dy5pbm5vdmF0aW9uLmNoL2phdmEvbnRsbS5odG1sCisgKi8KKworI2RlZmluZSBERUJVR19NRSAwCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJjdXJsX250bG0uaCIKKyNpbmNsdWRlICJjdXJsX250bG1fbXNncy5oIgorI2luY2x1ZGUgImN1cmxfbnRsbV93Yi5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpZiBkZWZpbmVkKFVTRV9OU1MpCisjaW5jbHVkZSAibnNzZy5oIgorI2VsaWYgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQorI2luY2x1ZGUgImN1cmxfc3NwaS5oIgorI2VuZGlmCisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZiBERUJVR19NRQorIyBkZWZpbmUgREVCVUdfT1VUKHgpIHgKKyNlbHNlCisjIGRlZmluZSBERUJVR19PVVQoeCkgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKK0NVUkxjb2RlIEN1cmxfaW5wdXRfbnRsbShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcm94eSwgICAgICAgICAvKiBpZiBwcm94eSBvciBub3QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpoZWFkZXIpIC8qIHJlc3Qgb2YgdGhlIHd3dy1hdXRoZW50aWNhdGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgKi8KK3sKKyAgLyogcG9pbnQgdG8gdGhlIGNvcnJlY3Qgc3RydWN0IHdpdGggdGhpcyAqLworICBzdHJ1Y3QgbnRsbWRhdGEgKm50bG07CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisjaWZkZWYgVVNFX05TUworICByZXN1bHQgPSBDdXJsX25zc19mb3JjZV9pbml0KGNvbm4tPmRhdGEpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorCisgIG50bG0gPSBwcm94eSA/ICZjb25uLT5wcm94eW50bG0gOiAmY29ubi0+bnRsbTsKKworICAvKiBza2lwIGluaXRpYWwgd2hpdGVzcGFjZXMgKi8KKyAgd2hpbGUoKmhlYWRlciAmJiBJU1NQQUNFKCpoZWFkZXIpKQorICAgIGhlYWRlcisrOworCisgIGlmKGNoZWNrcHJlZml4KCJOVExNIiwgaGVhZGVyKSkgeworICAgIGhlYWRlciArPSBzdHJsZW4oIk5UTE0iKTsKKworICAgIHdoaWxlKCpoZWFkZXIgJiYgSVNTUEFDRSgqaGVhZGVyKSkKKyAgICAgIGhlYWRlcisrOworCisgICAgaWYoKmhlYWRlcikgeworICAgICAgcmVzdWx0ID0gQ3VybF9udGxtX2RlY29kZV90eXBlMl9tZXNzYWdlKGNvbm4tPmRhdGEsIGhlYWRlciwgbnRsbSk7CisgICAgICBpZihDVVJMRV9PSyAhPSByZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgIG50bG0tPnN0YXRlID0gTlRMTVNUQVRFX1RZUEUyOyAvKiBXZSBnb3QgYSB0eXBlLTIgbWVzc2FnZSAqLworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmKG50bG0tPnN0YXRlID49IE5UTE1TVEFURV9UWVBFMSkgeworICAgICAgICBpbmZvZihjb25uLT5kYXRhLCAiTlRMTSBoYW5kc2hha2UgZmFpbHVyZSAoaW50ZXJuYWwgZXJyb3IpXG4iKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOworICAgICAgfQorCisgICAgICBudGxtLT5zdGF0ZSA9IE5UTE1TVEFURV9UWVBFMTsgLyogV2Ugc2hvdWxkIHNlbmQgYXdheSBhIHR5cGUtMSAqLworICAgIH0KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIGZvciBjcmVhdGluZyBudGxtIGhlYWRlciBvdXRwdXQKKyAqLworQ1VSTGNvZGUgQ3VybF9vdXRwdXRfbnRsbShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJveHkpCit7CisgIGNoYXIgKmJhc2U2NCA9IE5VTEw7CisgIHNpemVfdCBsZW4gPSAwOworICBDVVJMY29kZSBlcnJvcjsKKworICAvKiBwb2ludCB0byB0aGUgYWRkcmVzcyBvZiB0aGUgcG9pbnRlciB0aGF0IGhvbGRzIHRoZSBzdHJpbmcgdG8gc2VuZCB0byB0aGUKKyAgICAgc2VydmVyLCB3aGljaCBpcyBmb3IgYSBwbGFpbiBob3N0IG9yIGZvciBhIEhUVFAgcHJveHkgKi8KKyAgY2hhciAqKmFsbG9jdXNlcnB3ZDsKKworICAvKiBwb2ludCB0byB0aGUgbmFtZSBhbmQgcGFzc3dvcmQgZm9yIHRoaXMgKi8KKyAgY29uc3QgY2hhciAqdXNlcnA7CisgIGNvbnN0IGNoYXIgKnBhc3N3ZHA7CisKKyAgLyogcG9pbnQgdG8gdGhlIGNvcnJlY3Qgc3RydWN0IHdpdGggdGhpcyAqLworICBzdHJ1Y3QgbnRsbWRhdGEgKm50bG07CisgIHN0cnVjdCBhdXRoICphdXRocDsKKworICBERUJVR0FTU0VSVChjb25uKTsKKyAgREVCVUdBU1NFUlQoY29ubi0+ZGF0YSk7CisKKyNpZmRlZiBVU0VfTlNTCisgIGlmKENVUkxFX09LICE9IEN1cmxfbnNzX2ZvcmNlX2luaXQoY29ubi0+ZGF0YSkpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisjZW5kaWYKKworICBpZihwcm94eSkgeworICAgIGFsbG9jdXNlcnB3ZCA9ICZjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2Q7CisgICAgdXNlcnAgPSBjb25uLT5wcm94eXVzZXI7CisgICAgcGFzc3dkcCA9IGNvbm4tPnByb3h5cGFzc3dkOworICAgIG50bG0gPSAmY29ubi0+cHJveHludGxtOworICAgIGF1dGhwID0gJmNvbm4tPmRhdGEtPnN0YXRlLmF1dGhwcm94eTsKKyAgfQorICBlbHNlIHsKKyAgICBhbGxvY3VzZXJwd2QgPSAmY29ubi0+YWxsb2NwdHIudXNlcnB3ZDsKKyAgICB1c2VycCA9IGNvbm4tPnVzZXI7CisgICAgcGFzc3dkcCA9IGNvbm4tPnBhc3N3ZDsKKyAgICBudGxtID0gJmNvbm4tPm50bG07CisgICAgYXV0aHAgPSAmY29ubi0+ZGF0YS0+c3RhdGUuYXV0aGhvc3Q7CisgIH0KKyAgYXV0aHAtPmRvbmUgPSBGQUxTRTsKKworICAvKiBub3Qgc2V0IG1lYW5zIGVtcHR5ICovCisgIGlmKCF1c2VycCkKKyAgICB1c2VycCA9ICIiOworCisgIGlmKCFwYXNzd2RwKQorICAgIHBhc3N3ZHAgPSAiIjsKKworI2lmZGVmIFVTRV9XSU5ET1dTX1NTUEkKKyAgaWYoc19oU2VjRGxsID09IE5VTEwpIHsKKyAgICAvKiBub3QgdGhyZWFkIHNhZmUgYW5kIGxlYWtzIC0gdXNlIGN1cmxfZ2xvYmFsX2luaXQoKSB0byBhdm9pZCAqLworICAgIENVUkxjb2RlIGVyciA9IEN1cmxfc3NwaV9nbG9iYWxfaW5pdCgpOworICAgIGlmKHNfaFNlY0RsbCA9PSBOVUxMKQorICAgICAgcmV0dXJuIGVycjsKKyAgfQorI2VuZGlmCisKKyAgc3dpdGNoKG50bG0tPnN0YXRlKSB7CisgIGNhc2UgTlRMTVNUQVRFX1RZUEUxOgorICBkZWZhdWx0OiAvKiBmb3IgdGhlIHdlaXJkIGNhc2VzIHdlIChyZSlzdGFydCBoZXJlICovCisgICAgLyogQ3JlYXRlIGEgdHlwZS0xIG1lc3NhZ2UgKi8KKyAgICBlcnJvciA9IEN1cmxfbnRsbV9jcmVhdGVfdHlwZTFfbWVzc2FnZSh1c2VycCwgcGFzc3dkcCwgbnRsbSwgJmJhc2U2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuKTsKKworICAgIGlmKGVycm9yKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgaWYoYmFzZTY0KSB7CisgICAgICBDdXJsX3NhZmVmcmVlKCphbGxvY3VzZXJwd2QpOworICAgICAgKmFsbG9jdXNlcnB3ZCA9IGFwcmludGYoIiVzQXV0aG9yaXphdGlvbjogTlRMTSAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHkgPyAiUHJveHktIiA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0KTsKKyAgICAgIERFQlVHX09VVChmcHJpbnRmKHN0ZGVyciwgIioqKiogSGVhZGVyICVzXG4gIiwgKmFsbG9jdXNlcnB3ZCkpOworICAgICAgZnJlZShiYXNlNjQpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIE5UTE1TVEFURV9UWVBFMjoKKyAgICAvKiBXZSBhbHJlYWR5IHJlY2VpdmVkIHRoZSB0eXBlLTIgbWVzc2FnZSwgY3JlYXRlIGEgdHlwZS0zIG1lc3NhZ2UgKi8KKyAgICBlcnJvciA9IEN1cmxfbnRsbV9jcmVhdGVfdHlwZTNfbWVzc2FnZShjb25uLT5kYXRhLCB1c2VycCwgcGFzc3dkcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudGxtLCAmYmFzZTY0LCAmbGVuKTsKKyAgICBpZihlcnJvcikKKyAgICAgIHJldHVybiBlcnJvcjsKKworICAgIGlmKGJhc2U2NCkgeworICAgICAgQ3VybF9zYWZlZnJlZSgqYWxsb2N1c2VycHdkKTsKKyAgICAgICphbGxvY3VzZXJwd2QgPSBhcHJpbnRmKCIlc0F1dGhvcml6YXRpb246IE5UTE0gJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5ID8gIlByb3h5LSIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NCk7CisgICAgICBERUJVR19PVVQoZnByaW50ZihzdGRlcnIsICIqKioqICVzXG4gIiwgKmFsbG9jdXNlcnB3ZCkpOworICAgICAgZnJlZShiYXNlNjQpOworCisgICAgICBudGxtLT5zdGF0ZSA9IE5UTE1TVEFURV9UWVBFMzsgLyogd2Ugc2VuZCBhIHR5cGUtMyAqLworICAgICAgYXV0aHAtPmRvbmUgPSBUUlVFOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIE5UTE1TVEFURV9UWVBFMzoKKyAgICAvKiBjb25uZWN0aW9uIGlzIGFscmVhZHkgYXV0aGVudGljYXRlZCwKKyAgICAgKiBkb24ndCBzZW5kIGEgaGVhZGVyIGluIGZ1dHVyZSByZXF1ZXN0cyAqLworICAgIGlmKCphbGxvY3VzZXJwd2QpIHsKKyAgICAgIGZyZWUoKmFsbG9jdXNlcnB3ZCk7CisgICAgICAqYWxsb2N1c2VycHdkID0gTlVMTDsKKyAgICB9CisgICAgYXV0aHAtPmRvbmUgPSBUUlVFOworICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCit2b2lkIEN1cmxfaHR0cF9udGxtX2NsZWFudXAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworI2lmZGVmIFVTRV9XSU5ET1dTX1NTUEkKKyAgQ3VybF9udGxtX3NzcGlfY2xlYW51cCgmY29ubi0+bnRsbSk7CisgIEN1cmxfbnRsbV9zc3BpX2NsZWFudXAoJmNvbm4tPnByb3h5bnRsbSk7CisjZWxpZiBkZWZpbmVkKE5UTE1fV0JfRU5BQkxFRCkKKyAgQ3VybF9udGxtX3diX2NsZWFudXAoY29ubik7CisjZWxzZQorICAodm9pZCljb25uOworI2VuZGlmCit9CisKKyNlbmRpZiAvKiBVU0VfTlRMTSAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2N1cmxfbnRsbS5oIGIvY3VybC03LjI1LjAvbGliL2N1cmxfbnRsbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNzgzNzcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY3VybF9udGxtLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9OVExNX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfTlRMTV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfTlRMTQorCisvKiB0aGlzIGlzIGZvciBudGxtIGhlYWRlciBpbnB1dCAqLworQ1VSTGNvZGUgQ3VybF9pbnB1dF9udGxtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBwcm94eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpoZWFkZXIpOworCisvKiB0aGlzIGlzIGZvciBjcmVhdGluZyBudGxtIGhlYWRlciBvdXRwdXQgKi8KK0NVUkxjb2RlIEN1cmxfb3V0cHV0X250bG0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIHByb3h5KTsKKwordm9pZCBDdXJsX2h0dHBfbnRsbV9jbGVhbnVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CisKKyNlbHNlCisKKyNkZWZpbmUgQ3VybF9odHRwX250bG1fY2xlYW51cChhKSBDdXJsX25vcF9zdG10CisKKyNlbmRpZgorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfTlRMTV9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybF9udGxtX2NvcmUuYyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX250bG1fY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OTUyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY3VybF9udGxtX2NvcmUuYwpAQCAtMCwwICsxLDQxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWYgZGVmaW5lZChVU0VfTlRMTSkgJiYgIWRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKworLyoKKyAqIE5UTE0gZGV0YWlsczoKKyAqCisgKiBodHRwOi8vZGF2ZW5wb3J0LnNvdXJjZWZvcmdlLm5ldC9udGxtLmh0bWwKKyAqIGh0dHA6Ly93d3cuaW5ub3ZhdGlvbi5jaC9qYXZhL250bG0uaHRtbAorICovCisKKyNpZmRlZiBVU0VfU1NMRUFZCisKKyMgIGlmZGVmIFVTRV9PUEVOU1NMCisjICAgIGluY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisjICAgIGlmbmRlZiBPUEVOU1NMX05PX01ENAorIyAgICAgIGluY2x1ZGUgPG9wZW5zc2wvbWQ0Lmg+CisjICAgIGVuZGlmCisjICAgIGluY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+CisjICAgIGluY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjICAgIGluY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxkZXMuaD4KKyMgICAgaWZuZGVmIE9QRU5TU0xfTk9fTUQ0CisjICAgICAgaW5jbHVkZSA8bWQ0Lmg+CisjICAgIGVuZGlmCisjICAgIGluY2x1ZGUgPG1kNS5oPgorIyAgICBpbmNsdWRlIDxzc2wuaD4KKyMgICAgaW5jbHVkZSA8cmFuZC5oPgorIyAgZW5kaWYKKyMgIGlmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgwMDkwNzAwMUwpCisjICAgIGRlZmluZSBERVNfa2V5X3NjaGVkdWxlIGRlc19rZXlfc2NoZWR1bGUKKyMgICAgZGVmaW5lIERFU19jYmxvY2sgZGVzX2NibG9jaworIyAgICBkZWZpbmUgREVTX3NldF9vZGRfcGFyaXR5IGRlc19zZXRfb2RkX3Bhcml0eQorIyAgICBkZWZpbmUgREVTX3NldF9rZXkgZGVzX3NldF9rZXkKKyMgICAgZGVmaW5lIERFU19lY2JfZW5jcnlwdCBkZXNfZWNiX2VuY3J5cHQKKyMgICAgZGVmaW5lIERFU0tFWSh4KSB4CisjICAgIGRlZmluZSBERVNLRVlBUkcoeCkgeAorIyAgZWxzZQorIyAgICBkZWZpbmUgREVTS0VZQVJHKHgpICp4CisjICAgIGRlZmluZSBERVNLRVkoeCkgJngKKyMgIGVuZGlmCisKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCisKKyMgIGluY2x1ZGUgPG5ldHRsZS9kZXMuaD4KKyMgIGluY2x1ZGUgPG5ldHRsZS9tZDQuaD4KKworI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQorCisjICBpbmNsdWRlIDxnY3J5cHQuaD4KKyMgIGRlZmluZSBNRDVfRElHRVNUX0xFTkdUSCAxNgorIyAgZGVmaW5lIE1ENF9ESUdFU1RfTEVOR1RIIDE2CisKKyNlbGlmIGRlZmluZWQoVVNFX05TUykKKworIyAgaW5jbHVkZSA8bnNzLmg+CisjICBpbmNsdWRlIDxwazExcHViLmg+CisjICBpbmNsdWRlIDxoYXNodC5oPgorIyAgaW5jbHVkZSAiY3VybF9tZDQuaCIKKyMgIGRlZmluZSBNRDVfRElHRVNUX0xFTkdUSCBNRDVfTEVOR1RICisKKyNlbHNlCisjICBlcnJvciAiQ2FuJ3QgY29tcGlsZSBOVExNIHN1cHBvcnQgd2l0aG91dCBhIGNyeXB0byBsaWJyYXJ5LiIKKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgIm5vbi1hc2NpaS5oIgorI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAiY3VybF9udGxtX2NvcmUuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2lmZGVmIFVTRV9TU0xFQVkKKy8qCisgKiBUdXJucyBhIDU2IGJpdCBrZXkgaW50byB0aGUgNjQgYml0LCBvZGQgcGFyaXR5IGtleSBhbmQgc2V0cyB0aGUga2V5LiAgVGhlCisgKiBrZXkgc2NoZWR1bGUga3MgaXMgYWxzbyBzZXQuCisgKi8KK3N0YXRpYyB2b2lkIHNldHVwX2Rlc19rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5XzU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICBERVNfa2V5X3NjaGVkdWxlIERFU0tFWUFSRyhrcykpCit7CisgIERFU19jYmxvY2sga2V5OworCisgIGtleVswXSA9IGtleV81NlswXTsKKyAga2V5WzFdID0gKHVuc2lnbmVkIGNoYXIpKCgoa2V5XzU2WzBdIDw8IDcpICYgMHhGRikgfCAoa2V5XzU2WzFdID4+IDEpKTsKKyAga2V5WzJdID0gKHVuc2lnbmVkIGNoYXIpKCgoa2V5XzU2WzFdIDw8IDYpICYgMHhGRikgfCAoa2V5XzU2WzJdID4+IDIpKTsKKyAga2V5WzNdID0gKHVuc2lnbmVkIGNoYXIpKCgoa2V5XzU2WzJdIDw8IDUpICYgMHhGRikgfCAoa2V5XzU2WzNdID4+IDMpKTsKKyAga2V5WzRdID0gKHVuc2lnbmVkIGNoYXIpKCgoa2V5XzU2WzNdIDw8IDQpICYgMHhGRikgfCAoa2V5XzU2WzRdID4+IDQpKTsKKyAga2V5WzVdID0gKHVuc2lnbmVkIGNoYXIpKCgoa2V5XzU2WzRdIDw8IDMpICYgMHhGRikgfCAoa2V5XzU2WzVdID4+IDUpKTsKKyAga2V5WzZdID0gKHVuc2lnbmVkIGNoYXIpKCgoa2V5XzU2WzVdIDw8IDIpICYgMHhGRikgfCAoa2V5XzU2WzZdID4+IDYpKTsKKyAga2V5WzddID0gKHVuc2lnbmVkIGNoYXIpICgoa2V5XzU2WzZdIDw8IDEpICYgMHhGRik7CisKKyAgREVTX3NldF9vZGRfcGFyaXR5KCZrZXkpOworICBERVNfc2V0X2tleSgma2V5LCBrcyk7Cit9CisKKyNlbHNlIC8qIGRlZmluZWQoVVNFX1NTTEVBWSkgKi8KKworLyoKKyAqIFR1cm5zIGEgNTYgYml0IGtleSBpbnRvIHRoZSA2NCBiaXQsIG9kZCBwYXJpdHkga2V5LiAgVXNlZCBieSBHbnVUTFMgYW5kIE5TUy4KKyAqLworc3RhdGljIHZvaWQgZXh0ZW5kX2tleV81Nl90b182NChjb25zdCB1bnNpZ25lZCBjaGFyICprZXlfNTYsIGNoYXIgKmtleSkKK3sKKyAga2V5WzBdID0ga2V5XzU2WzBdOworICBrZXlbMV0gPSAodW5zaWduZWQgY2hhcikoKChrZXlfNTZbMF0gPDwgNykgJiAweEZGKSB8IChrZXlfNTZbMV0gPj4gMSkpOworICBrZXlbMl0gPSAodW5zaWduZWQgY2hhcikoKChrZXlfNTZbMV0gPDwgNikgJiAweEZGKSB8IChrZXlfNTZbMl0gPj4gMikpOworICBrZXlbM10gPSAodW5zaWduZWQgY2hhcikoKChrZXlfNTZbMl0gPDwgNSkgJiAweEZGKSB8IChrZXlfNTZbM10gPj4gMykpOworICBrZXlbNF0gPSAodW5zaWduZWQgY2hhcikoKChrZXlfNTZbM10gPDwgNCkgJiAweEZGKSB8IChrZXlfNTZbNF0gPj4gNCkpOworICBrZXlbNV0gPSAodW5zaWduZWQgY2hhcikoKChrZXlfNTZbNF0gPDwgMykgJiAweEZGKSB8IChrZXlfNTZbNV0gPj4gNSkpOworICBrZXlbNl0gPSAodW5zaWduZWQgY2hhcikoKChrZXlfNTZbNV0gPDwgMikgJiAweEZGKSB8IChrZXlfNTZbNl0gPj4gNikpOworICBrZXlbN10gPSAodW5zaWduZWQgY2hhcikgKChrZXlfNTZbNl0gPDwgMSkgJiAweEZGKTsKK30KKworI2lmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCisKK3N0YXRpYyB2b2lkIHNldHVwX2Rlc19rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5XzU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGVzX2N0eCAqZGVzKQoreworICBjaGFyIGtleVs4XTsKKyAgZXh0ZW5kX2tleV81Nl90b182NChrZXlfNTYsIGtleSk7CisgIGRlc19zZXRfa2V5KGRlcywga2V5KTsKK30KKworI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQorCisvKgorICogVHVybnMgYSA1NiBiaXQga2V5IGludG8gdGhlIDY0IGJpdCwgb2RkIHBhcml0eSBrZXkgYW5kIHNldHMgdGhlIGtleS4KKyAqLworc3RhdGljIHZvaWQgc2V0dXBfZGVzX2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXlfNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdjcnlfY2lwaGVyX2hkX3QgKmRlcykKK3sKKyAgY2hhciBrZXlbOF07CisgIGV4dGVuZF9rZXlfNTZfdG9fNjQoa2V5XzU2LCBrZXkpOworICBnY3J5X2NpcGhlcl9zZXRrZXkoKmRlcywga2V5LCA4KTsKK30KKworI2VsaWYgZGVmaW5lZChVU0VfTlNTKQorCisvKgorICogRXhwYW5kcyBhIDU2IGJpdCBrZXkgS0VZXzU2IHRvIDY0IGJpdCBhbmQgZW5jcnlwdHMgNjQgYml0IG9mIGRhdGEsIHVzaW5nCisgKiB0aGUgZXhwYW5kZWQga2V5LiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZ2l2aW5nIDY0IGJpdCBvZiB2YWxpZAorICogZGF0YSBpcyBJTiBhbmQgKGF0IGxlYXN0KSA2NCBiaXQgbGFyZ2UgYnVmZmVyIGFzIE9VVC4KKyAqLworc3RhdGljIGJvb2wgZW5jcnlwdF9kZXMoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV81NikKK3sKKyAgY29uc3QgQ0tfTUVDSEFOSVNNX1RZUEUgbWVjaCA9IENLTV9ERVNfRUNCOyAvKiBERVMgY2lwaGVyIGluIEVDQiBtb2RlICovCisgIFBLMTFTbG90SW5mbyAqc2xvdCA9IE5VTEw7CisgIGNoYXIga2V5WzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhwYW5kZWQgNjQgYml0IGtleSAqLworICBTRUNJdGVtIGtleV9pdGVtOworICBQSzExU3ltS2V5ICpzeW1rZXkgPSBOVUxMOworICBTRUNJdGVtICpwYXJhbSA9IE5VTEw7CisgIFBLMTFDb250ZXh0ICpjdHggPSBOVUxMOworICBpbnQgb3V0X2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCB1c2VkLCByZXF1aXJlZCBieSBOU1MgKi8KKyAgYm9vbCBydiA9IEZBTFNFOworCisgIC8qIHVzZSBpbnRlcm5hbCBzbG90IGZvciBERVMgZW5jcnlwdGlvbiAocmVxdWlyZXMgTlNTIHRvIGJlIGluaXRpYWxpemVkKSAqLworICBzbG90ID0gUEsxMV9HZXRJbnRlcm5hbEtleVNsb3QoKTsKKyAgaWYoIXNsb3QpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIGV4cGFuZCB0aGUgNTYgYml0IGtleSB0byA2NCBiaXQgYW5kIHdyYXAgYnkgTlNTICovCisgIGV4dGVuZF9rZXlfNTZfdG9fNjQoa2V5XzU2LCBrZXkpOworICBrZXlfaXRlbS5kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilrZXk7CisgIGtleV9pdGVtLmxlbiA9IC8qIGhhcmQtd2lyZWQgKi8gODsKKyAgc3lta2V5ID0gUEsxMV9JbXBvcnRTeW1LZXkoc2xvdCwgbWVjaCwgUEsxMV9PcmlnaW5VbndyYXAsIENLQV9FTkNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5X2l0ZW0sIE5VTEwpOworICBpZighc3lta2V5KQorICAgIGdvdG8gZmFpbDsKKworICAvKiBjcmVhdGUgREVTIGVuY3J5cHRpb24gY29udGV4dCAqLworICBwYXJhbSA9IFBLMTFfUGFyYW1Gcm9tSVYobWVjaCwgLyogbm8gSVYgaW4gRUNCIG1vZGUgKi8gTlVMTCk7CisgIGlmKCFwYXJhbSkKKyAgICBnb3RvIGZhaWw7CisgIGN0eCA9IFBLMTFfQ3JlYXRlQ29udGV4dEJ5U3ltS2V5KG1lY2gsIENLQV9FTkNSWVBULCBzeW1rZXksIHBhcmFtKTsKKyAgaWYoIWN0eCkKKyAgICBnb3RvIGZhaWw7CisKKyAgLyogcGVyZm9ybSB0aGUgZW5jcnlwdGlvbiAqLworICBpZihTRUNTdWNjZXNzID09IFBLMTFfQ2lwaGVyT3AoY3R4LCBvdXQsICZvdXRfbGVuLCAvKiBvdXRidWZsZW4gKi8gOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopaW4sIC8qIGluYnVmbGVuICovIDgpCisgICAgICAmJiBTRUNTdWNjZXNzID09IFBLMTFfRmluYWxpemUoY3R4KSkKKyAgICBydiA9IC8qIGFsbCBPSyAqLyBUUlVFOworCitmYWlsOgorICAvKiBjbGVhbnVwICovCisgIGlmKGN0eCkKKyAgICBQSzExX0Rlc3Ryb3lDb250ZXh0KGN0eCwgUFJfVFJVRSk7CisgIGlmKHN5bWtleSkKKyAgICBQSzExX0ZyZWVTeW1LZXkoc3lta2V5KTsKKyAgaWYocGFyYW0pCisgICAgU0VDSVRFTV9GcmVlSXRlbShwYXJhbSwgUFJfVFJVRSk7CisgIFBLMTFfRnJlZVNsb3Qoc2xvdCk7CisgIHJldHVybiBydjsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoVVNFX05TUykgKi8KKworI2VuZGlmIC8qIGRlZmluZWQoVVNFX1NTTEVBWSkgKi8KKworIC8qCisgICogdGFrZXMgYSAyMSBieXRlIGFycmF5IGFuZCB0cmVhdHMgaXQgYXMgMyA1Ni1iaXQgREVTIGtleXMuIFRoZQorICAqIDggYnl0ZSBwbGFpbnRleHQgaXMgZW5jcnlwdGVkIHdpdGggZWFjaCBrZXkgYW5kIHRoZSByZXN1bHRpbmcgMjQKKyAgKiBieXRlcyBhcmUgc3RvcmVkIGluIHRoZSByZXN1bHRzIGFycmF5LgorICAqLwordm9pZCBDdXJsX250bG1fY29yZV9sbV9yZXNwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnJlc3VsdHMpCit7CisjaWZkZWYgVVNFX1NTTEVBWQorICBERVNfa2V5X3NjaGVkdWxlIGtzOworCisgIHNldHVwX2Rlc19rZXkoa2V5cywgREVTS0VZKGtzKSk7CisgIERFU19lY2JfZW5jcnlwdCgoREVTX2NibG9jayopIHBsYWludGV4dCwgKERFU19jYmxvY2sqKSByZXN1bHRzLAorICAgICAgICAgICAgICAgICAgREVTS0VZKGtzKSwgREVTX0VOQ1JZUFQpOworCisgIHNldHVwX2Rlc19rZXkoa2V5cyArIDcsIERFU0tFWShrcykpOworICBERVNfZWNiX2VuY3J5cHQoKERFU19jYmxvY2sqKSBwbGFpbnRleHQsIChERVNfY2Jsb2NrKikgKHJlc3VsdHMgKyA4KSwKKyAgICAgICAgICAgICAgICAgIERFU0tFWShrcyksIERFU19FTkNSWVBUKTsKKworICBzZXR1cF9kZXNfa2V5KGtleXMgKyAxNCwgREVTS0VZKGtzKSk7CisgIERFU19lY2JfZW5jcnlwdCgoREVTX2NibG9jayopIHBsYWludGV4dCwgKERFU19jYmxvY2sqKSAocmVzdWx0cyArIDE2KSwKKyAgICAgICAgICAgICAgICAgIERFU0tFWShrcyksIERFU19FTkNSWVBUKTsKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCisgIHN0cnVjdCBkZXNfY3R4IGRlczsKKyAgc2V0dXBfZGVzX2tleShrZXlzLCAmZGVzKTsKKyAgZGVzX2VuY3J5cHQoJmRlcywgOCwgcmVzdWx0cywgcGxhaW50ZXh0KTsKKyAgc2V0dXBfZGVzX2tleShrZXlzICsgNywgJmRlcyk7CisgIGRlc19lbmNyeXB0KCZkZXMsIDgsIHJlc3VsdHMgKyA4LCBwbGFpbnRleHQpOworICBzZXR1cF9kZXNfa2V5KGtleXMgKyAxNCwgJmRlcyk7CisgIGRlc19lbmNyeXB0KCZkZXMsIDgsIHJlc3VsdHMgKyAxNiwgcGxhaW50ZXh0KTsKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKKyAgZ2NyeV9jaXBoZXJfaGRfdCBkZXM7CisKKyAgZ2NyeV9jaXBoZXJfb3BlbigmZGVzLCBHQ1JZX0NJUEhFUl9ERVMsIEdDUllfQ0lQSEVSX01PREVfRUNCLCAwKTsKKyAgc2V0dXBfZGVzX2tleShrZXlzLCAmZGVzKTsKKyAgZ2NyeV9jaXBoZXJfZW5jcnlwdChkZXMsIHJlc3VsdHMsIDgsIHBsYWludGV4dCwgOCk7CisgIGdjcnlfY2lwaGVyX2Nsb3NlKGRlcyk7CisKKyAgZ2NyeV9jaXBoZXJfb3BlbigmZGVzLCBHQ1JZX0NJUEhFUl9ERVMsIEdDUllfQ0lQSEVSX01PREVfRUNCLCAwKTsKKyAgc2V0dXBfZGVzX2tleShrZXlzICsgNywgJmRlcyk7CisgIGdjcnlfY2lwaGVyX2VuY3J5cHQoZGVzLCByZXN1bHRzICsgOCwgOCwgcGxhaW50ZXh0LCA4KTsKKyAgZ2NyeV9jaXBoZXJfY2xvc2UoZGVzKTsKKworICBnY3J5X2NpcGhlcl9vcGVuKCZkZXMsIEdDUllfQ0lQSEVSX0RFUywgR0NSWV9DSVBIRVJfTU9ERV9FQ0IsIDApOworICBzZXR1cF9kZXNfa2V5KGtleXMgKyAxNCwgJmRlcyk7CisgIGdjcnlfY2lwaGVyX2VuY3J5cHQoZGVzLCByZXN1bHRzICsgMTYsIDgsIHBsYWludGV4dCwgOCk7CisgIGdjcnlfY2lwaGVyX2Nsb3NlKGRlcyk7CisjZWxpZiBkZWZpbmVkKFVTRV9OU1MpCisgIGVuY3J5cHRfZGVzKHBsYWludGV4dCwgcmVzdWx0cywga2V5cyk7CisgIGVuY3J5cHRfZGVzKHBsYWludGV4dCwgcmVzdWx0cyArIDgsIGtleXMgKyA3KTsKKyAgZW5jcnlwdF9kZXMocGxhaW50ZXh0LCByZXN1bHRzICsgMTYsIGtleXMgKyAxNCk7CisjZW5kaWYKK30KKworLyoKKyAqIFNldCB1cCBsYW5tYW5hZ2VyIGhhc2hlZCBwYXNzd29yZAorICovCit2b2lkIEN1cmxfbnRsbV9jb3JlX21rX2xtX2hhc2goc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqbG1idWZmZXIgLyogMjEgYnl0ZXMgKi8pCit7CisgIENVUkxjb2RlIHJlczsKKyAgdW5zaWduZWQgY2hhciBwd1sxNF07CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1hZ2ljW10gPSB7CisgICAgMHg0QiwgMHg0NywgMHg1MywgMHgyMSwgMHg0MCwgMHgyMywgMHgyNCwgMHgyNSAvKiBpLmUuIEtHUyFAIyQlICovCisgIH07CisgIHNpemVfdCBsZW4gPSBDVVJMTUlOKHN0cmxlbihwYXNzd29yZCksIDE0KTsKKworICBDdXJsX3N0cm50b3VwcGVyKChjaGFyICopcHcsIHBhc3N3b3JkLCBsZW4pOworICBtZW1zZXQoJnB3W2xlbl0sIDAsIDE0IC0gbGVuKTsKKworICAvKgorICAgKiBUaGUgTGFuTWFuYWdlciBoYXNoZWQgcGFzc3dvcmQgbmVlZHMgdG8gYmUgY3JlYXRlZCB1c2luZyB0aGUKKyAgICogcGFzc3dvcmQgaW4gdGhlIG5ldHdvcmsgZW5jb2Rpbmcgbm90IHRoZSBob3N0IGVuY29kaW5nLgorICAgKi8KKyAgcmVzID0gQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsoZGF0YSwgKGNoYXIgKilwdywgMTQpOworICBpZihyZXMpCisgICAgcmV0dXJuOworCisgIHsKKyAgICAvKiBDcmVhdGUgTGFuTWFuYWdlciBoYXNoZWQgcGFzc3dvcmQuICovCisKKyNpZmRlZiBVU0VfU1NMRUFZCisgICAgREVTX2tleV9zY2hlZHVsZSBrczsKKworICAgIHNldHVwX2Rlc19rZXkocHcsIERFU0tFWShrcykpOworICAgIERFU19lY2JfZW5jcnlwdCgoREVTX2NibG9jayAqKW1hZ2ljLCAoREVTX2NibG9jayAqKWxtYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICBERVNLRVkoa3MpLCBERVNfRU5DUllQVCk7CisKKyAgICBzZXR1cF9kZXNfa2V5KHB3ICsgNywgREVTS0VZKGtzKSk7CisgICAgREVTX2VjYl9lbmNyeXB0KChERVNfY2Jsb2NrICopbWFnaWMsIChERVNfY2Jsb2NrICopKGxtYnVmZmVyICsgOCksCisgICAgICAgICAgICAgICAgICAgIERFU0tFWShrcyksIERFU19FTkNSWVBUKTsKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCisgICAgc3RydWN0IGRlc19jdHggZGVzOworICAgIHNldHVwX2Rlc19rZXkocHcsICZkZXMpOworICAgIGRlc19lbmNyeXB0KCZkZXMsIDgsIGxtYnVmZmVyLCBtYWdpYyk7CisgICAgc2V0dXBfZGVzX2tleShwdyArIDcsICZkZXMpOworICAgIGRlc19lbmNyeXB0KCZkZXMsIDgsIGxtYnVmZmVyICsgOCwgbWFnaWMpOworI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQorICAgIGdjcnlfY2lwaGVyX2hkX3QgZGVzOworCisgICAgZ2NyeV9jaXBoZXJfb3BlbigmZGVzLCBHQ1JZX0NJUEhFUl9ERVMsIEdDUllfQ0lQSEVSX01PREVfRUNCLCAwKTsKKyAgICBzZXR1cF9kZXNfa2V5KHB3LCAmZGVzKTsKKyAgICBnY3J5X2NpcGhlcl9lbmNyeXB0KGRlcywgbG1idWZmZXIsIDgsIG1hZ2ljLCA4KTsKKyAgICBnY3J5X2NpcGhlcl9jbG9zZShkZXMpOworCisgICAgZ2NyeV9jaXBoZXJfb3BlbigmZGVzLCBHQ1JZX0NJUEhFUl9ERVMsIEdDUllfQ0lQSEVSX01PREVfRUNCLCAwKTsKKyAgICBzZXR1cF9kZXNfa2V5KHB3ICsgNywgJmRlcyk7CisgICAgZ2NyeV9jaXBoZXJfZW5jcnlwdChkZXMsIGxtYnVmZmVyICsgOCwgOCwgbWFnaWMsIDgpOworICAgIGdjcnlfY2lwaGVyX2Nsb3NlKGRlcyk7CisjZWxpZiBkZWZpbmVkKFVTRV9OU1MpCisgICAgZW5jcnlwdF9kZXMobWFnaWMsIGxtYnVmZmVyLCBwdyk7CisgICAgZW5jcnlwdF9kZXMobWFnaWMsIGxtYnVmZmVyICsgOCwgcHcgKyA3KTsKKyNlbmRpZgorCisgICAgbWVtc2V0KGxtYnVmZmVyICsgMTYsIDAsIDIxIC0gMTYpOworICB9Cit9CisKKyNpZiBVU0VfTlRSRVNQT05TRVMKK3N0YXRpYyB2b2lkIGFzY2lpX3RvX3VuaWNvZGVfbGUodW5zaWduZWQgY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3JjbGVuKQoreworICBzaXplX3QgaTsKKyAgZm9yKGkgPSAwOyBpIDwgc3JjbGVuOyBpKyspIHsKKyAgICBkZXN0WzIgKiBpXSA9ICh1bnNpZ25lZCBjaGFyKXNyY1tpXTsKKyAgICBkZXN0WzIgKiBpICsgMV0gPSAnXDAnOworICB9Cit9CisKKy8qCisgKiBTZXQgdXAgbnQgaGFzaGVkIHBhc3N3b3JkcworICovCitDVVJMY29kZSBDdXJsX250bG1fY29yZV9ta19udF9oYXNoKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqbnRidWZmZXIgLyogMjEgYnl0ZXMgKi8pCit7CisgIHNpemVfdCBsZW4gPSBzdHJsZW4ocGFzc3dvcmQpOworICB1bnNpZ25lZCBjaGFyICpwdyA9IG1hbGxvYyhsZW4gKiAyKTsKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBpZighcHcpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgYXNjaWlfdG9fdW5pY29kZV9sZShwdywgcGFzc3dvcmQsIGxlbik7CisKKyAgLyoKKyAgICogVGhlIE5UIGhhc2hlZCBwYXNzd29yZCBuZWVkcyB0byBiZSBjcmVhdGVkIHVzaW5nIHRoZSBwYXNzd29yZCBpbiB0aGUKKyAgICogbmV0d29yayBlbmNvZGluZyBub3QgdGhlIGhvc3QgZW5jb2RpbmcuCisgICAqLworICByZXN1bHQgPSBDdXJsX2NvbnZlcnRfdG9fbmV0d29yayhkYXRhLCAoY2hhciAqKXB3LCBsZW4gKiAyKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgeworICAgIC8qIENyZWF0ZSBOVCBoYXNoZWQgcGFzc3dvcmQuICovCisjaWZkZWYgVVNFX1NTTEVBWQorICAgIE1ENF9DVFggTUQ0cHc7CisgICAgTUQ0X0luaXQoJk1ENHB3KTsKKyAgICBNRDRfVXBkYXRlKCZNRDRwdywgcHcsIDIgKiBsZW4pOworICAgIE1ENF9GaW5hbChudGJ1ZmZlciwgJk1ENHB3KTsKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCisgICAgc3RydWN0IG1kNF9jdHggTUQ0cHc7CisgICAgbWQ0X2luaXQoJk1ENHB3KTsKKyAgICBtZDRfdXBkYXRlKCZNRDRwdywgMiAqIGxlbiwgcHcpOworICAgIG1kNF9kaWdlc3QoJk1ENHB3LCBNRDRfRElHRVNUX1NJWkUsIG50YnVmZmVyKTsKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKKyAgICBnY3J5X21kX2hkX3QgTUQ0cHc7CisgICAgZ2NyeV9tZF9vcGVuKCZNRDRwdywgR0NSWV9NRF9NRDQsIDApOworICAgIGdjcnlfbWRfd3JpdGUoTUQ0cHcsIHB3LCAyICogbGVuKTsKKyAgICBtZW1jcHkgKG50YnVmZmVyLCBnY3J5X21kX3JlYWQgKE1ENHB3LCAwKSwgTUQ0X0RJR0VTVF9MRU5HVEgpOworICAgIGdjcnlfbWRfY2xvc2UoTUQ0cHcpOworI2VsaWYgZGVmaW5lZChVU0VfTlNTKQorICAgIEN1cmxfbWQ0aXQobnRidWZmZXIsIHB3LCAyICogbGVuKTsKKyNlbmRpZgorCisgICAgbWVtc2V0KG50YnVmZmVyICsgMTYsIDAsIDIxIC0gMTYpOworICB9CisKKyAgZnJlZShwdyk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorI2VuZGlmIC8qIFVTRV9OVFJFU1BPTlNFUyAqLworCisjZW5kaWYgLyogVVNFX05UTE0gJiYgIVVTRV9XSU5ET1dTX1NTUEkgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jdXJsX250bG1fY29yZS5oIGIvY3VybC03LjI1LjAvbGliL2N1cmxfbnRsbV9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYxNWIzNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX250bG1fY29yZS5oCkBAIC0wLDAgKzEsNjggQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfTlRMTV9DT1JFX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfTlRMTV9DT1JFX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmIGRlZmluZWQoVVNFX05UTE0pICYmICFkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCisKKyNpZmRlZiBVU0VfU1NMRUFZCisjICBpZiAhZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSKSAmJiBcCisgICAgICAhZGVmaW5lZChIRUFERVJfU1NMX0gpICYmICFkZWZpbmVkKEhFQURFUl9NRDVfSCkKKyMgICAgZXJyb3IgImN1cmxfbnRsbV9jb3JlLmggc2hhbGwgbm90IGJlIGluY2x1ZGVkIGJlZm9yZSBPcGVuU1NMIGhlYWRlcnMuIgorIyAgZW5kaWYKKyMgIGlmZGVmIE9QRU5TU0xfTk9fTUQ0CisjICAgIGRlZmluZSBVU0VfTlRSRVNQT05TRVMgMAorIyAgICBkZWZpbmUgVVNFX05UTE0yU0VTU0lPTiAwCisjICBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBEZWZpbmUgVVNFX05UUkVTUE9OU0VTIHRvIDEgaW4gb3JkZXIgdG8gbWFrZSB0aGUgdHlwZS0zIG1lc3NhZ2UgaW5jbHVkZQorICogdGhlIE5UIHJlc3BvbnNlIG1lc3NhZ2UuIERlZmluZSBVU0VfTlRMTTJTRVNTSU9OIHRvIDEgaW4gb3JkZXIgdG8gbWFrZQorICogdGhlIHR5cGUtMyBtZXNzYWdlIGluY2x1ZGUgdGhlIE5UTE0yU2Vzc2lvbiByZXNwb25zZSBtZXNzYWdlLCByZXF1aXJlcworICogVVNFX05UUkVTUE9OU0VTIGRlZmluZWQgdG8gMS4KKyAqLworCisjaWZuZGVmIFVTRV9OVFJFU1BPTlNFUworIyAgZGVmaW5lIFVTRV9OVFJFU1BPTlNFUyAxCisjICBkZWZpbmUgVVNFX05UTE0yU0VTU0lPTiAxCisjZW5kaWYKKwordm9pZCBDdXJsX250bG1fY29yZV9sbV9yZXNwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnJlc3VsdHMpOworCit2b2lkIEN1cmxfbnRsbV9jb3JlX21rX2xtX2hhc2goc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqbG1idWZmZXIgLyogMjEgYnl0ZXMgKi8pOworCisjaWYgVVNFX05UUkVTUE9OU0VTCitDVVJMY29kZSBDdXJsX250bG1fY29yZV9ta19udF9oYXNoKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqbnRidWZmZXIgLyogMjEgYnl0ZXMgKi8pOworI2VuZGlmCisKKyNlbmRpZiAvKiBVU0VfTlRMTSAmJiAhVVNFX1dJTkRPV1NfU1NQSSAqLworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfTlRMTV9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jdXJsX250bG1fbXNncy5jIGIvY3VybC03LjI1LjAvbGliL2N1cmxfbnRsbV9tc2dzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4ZDk4YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX250bG1fbXNncy5jCkBAIC0wLDAgKzEsOTcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfTlRMTQorCisvKgorICogTlRMTSBkZXRhaWxzOgorICoKKyAqIGh0dHA6Ly9kYXZlbnBvcnQuc291cmNlZm9yZ2UubmV0L250bG0uaHRtbAorICogaHR0cDovL3d3dy5pbm5vdmF0aW9uLmNoL2phdmEvbnRsbS5odG1sCisgKi8KKworI2RlZmluZSBERUJVR19NRSAwCisKKyNpZmRlZiBVU0VfU1NMRUFZCisKKyMgIGlmZGVmIFVTRV9PUEVOU1NMCisjICAgIGluY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisjICAgIGlmbmRlZiBPUEVOU1NMX05PX01ENAorIyAgICAgIGluY2x1ZGUgPG9wZW5zc2wvbWQ0Lmg+CisjICAgIGVuZGlmCisjICAgIGluY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+CisjICAgIGluY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjICAgIGluY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxkZXMuaD4KKyMgICAgaWZuZGVmIE9QRU5TU0xfTk9fTUQ0CisjICAgICAgaW5jbHVkZSA8bWQ0Lmg+CisjICAgIGVuZGlmCisjICAgIGluY2x1ZGUgPG1kNS5oPgorIyAgICBpbmNsdWRlIDxzc2wuaD4KKyMgICAgaW5jbHVkZSA8cmFuZC5oPgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgInNzbHVzZS5oIgorCisjZWxpZiBkZWZpbmVkKFVTRV9HTlVUTFNfTkVUVExFKQorCisjICBpbmNsdWRlIDxuZXR0bGUvbWQ1Lmg+CisjICBpbmNsdWRlIDxnbnV0bHMvZ251dGxzLmg+CisjICBpbmNsdWRlIDxnbnV0bHMvY3J5cHRvLmg+CisjICBkZWZpbmUgTUQ1X0RJR0VTVF9MRU5HVEggMTYKKworI2VsaWYgZGVmaW5lZChVU0VfR05VVExTKQorCisjICBpbmNsdWRlIDxnY3J5cHQuaD4KKyMgIGluY2x1ZGUgImd0bHMuaCIKKyMgIGRlZmluZSBNRDVfRElHRVNUX0xFTkdUSCAxNgorIyAgZGVmaW5lIE1ENF9ESUdFU1RfTEVOR1RIIDE2CisKKyNlbGlmIGRlZmluZWQoVVNFX05TUykKKworIyAgaW5jbHVkZSA8bnNzLmg+CisjICBpbmNsdWRlIDxwazExcHViLmg+CisjICBpbmNsdWRlIDxoYXNodC5oPgorIyAgaW5jbHVkZSAibnNzZy5oIgorIyAgaW5jbHVkZSAiY3VybF9tZDQuaCIKKyMgIGRlZmluZSBNRDVfRElHRVNUX0xFTkdUSCBNRDVfTEVOR1RICisKKyNlbGlmIGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyMgIGluY2x1ZGUgImN1cmxfc3NwaS5oIgorI2Vsc2UKKyMgIGVycm9yICJDYW4ndCBjb21waWxlIE5UTE0gc3VwcG9ydCB3aXRob3V0IGEgY3J5cHRvIGxpYnJhcnkuIgorI2VuZGlmCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAibm9uLWFzY2lpLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJjdXJsX2Jhc2U2NC5oIgorI2luY2x1ZGUgImN1cmxfbnRsbV9jb3JlLmgiCisjaW5jbHVkZSAiY3VybF9nZXRob3N0bmFtZS5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisKKyNkZWZpbmUgQlVJTERJTkdfQ1VSTF9OVExNX01TR1NfQworI2luY2x1ZGUgImN1cmxfbnRsbV9tc2dzLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qICJOVExNU1NQIiBzaWduYXR1cmUgaXMgYWx3YXlzIGluIEFTQ0lJIHJlZ2FyZGxlc3Mgb2YgdGhlIHBsYXRmb3JtICovCisjZGVmaW5lIE5UTE1TU1BfU0lHTkFUVVJFICJceDRlXHg1NFx4NGNceDRkXHg1M1x4NTNceDUwIgorCisjZGVmaW5lIFNIT1JUUEFJUih4KSAoKHgpICYgMHhmZiksICgoKHgpID4+IDgpICYgMHhmZikKKyNkZWZpbmUgTE9OR1FVQVJURVQoeCkgKCh4KSAmIDB4ZmYpLCAoKCh4KSA+PiA4KSAmIDB4ZmYpLCBcCisgICgoKHgpID4+IDE2KSAmIDB4ZmYpLCAoKCh4KSA+PiAyNCkgJiAweGZmKQorCisjaWYgREVCVUdfTUUKKyMgZGVmaW5lIERFQlVHX09VVCh4KSB4CitzdGF0aWMgdm9pZCBudGxtX3ByaW50X2ZsYWdzKEZJTEUgKmhhbmRsZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKyAgaWYoZmxhZ3MgJiBOVExNRkxBR19ORUdPVElBVEVfVU5JQ09ERSkKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX05FR09USUFURV9VTklDT0RFICIpOworICBpZihmbGFncyAmIE5UTE1GTEFHX05FR09USUFURV9PRU0pCisgICAgZnByaW50ZihoYW5kbGUsICJOVExNRkxBR19ORUdPVElBVEVfT0VNICIpOworICBpZihmbGFncyAmIE5UTE1GTEFHX1JFUVVFU1RfVEFSR0VUKQorICAgIGZwcmludGYoaGFuZGxlLCAiTlRMTUZMQUdfUkVRVUVTVF9UQVJHRVQgIik7CisgIGlmKGZsYWdzICYgKDE8PDMpKQorICAgIGZwcmludGYoaGFuZGxlLCAiTlRMTUZMQUdfVU5LTk9XTl8zICIpOworICBpZihmbGFncyAmIE5UTE1GTEFHX05FR09USUFURV9TSUdOKQorICAgIGZwcmludGYoaGFuZGxlLCAiTlRMTUZMQUdfTkVHT1RJQVRFX1NJR04gIik7CisgIGlmKGZsYWdzICYgTlRMTUZMQUdfTkVHT1RJQVRFX1NFQUwpCisgICAgZnByaW50ZihoYW5kbGUsICJOVExNRkxBR19ORUdPVElBVEVfU0VBTCAiKTsKKyAgaWYoZmxhZ3MgJiBOVExNRkxBR19ORUdPVElBVEVfREFUQUdSQU1fU1RZTEUpCisgICAgZnByaW50ZihoYW5kbGUsICJOVExNRkxBR19ORUdPVElBVEVfREFUQUdSQU1fU1RZTEUgIik7CisgIGlmKGZsYWdzICYgTlRMTUZMQUdfTkVHT1RJQVRFX0xNX0tFWSkKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX05FR09USUFURV9MTV9LRVkgIik7CisgIGlmKGZsYWdzICYgTlRMTUZMQUdfTkVHT1RJQVRFX05FVFdBUkUpCisgICAgZnByaW50ZihoYW5kbGUsICJOVExNRkxBR19ORUdPVElBVEVfTkVUV0FSRSAiKTsKKyAgaWYoZmxhZ3MgJiBOVExNRkxBR19ORUdPVElBVEVfTlRMTV9LRVkpCisgICAgZnByaW50ZihoYW5kbGUsICJOVExNRkxBR19ORUdPVElBVEVfTlRMTV9LRVkgIik7CisgIGlmKGZsYWdzICYgKDE8PDEwKSkKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX1VOS05PV05fMTAgIik7CisgIGlmKGZsYWdzICYgTlRMTUZMQUdfTkVHT1RJQVRFX0FOT05ZTU9VUykKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX05FR09USUFURV9BTk9OWU1PVVMgIik7CisgIGlmKGZsYWdzICYgTlRMTUZMQUdfTkVHT1RJQVRFX0RPTUFJTl9TVVBQTElFRCkKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX05FR09USUFURV9ET01BSU5fU1VQUExJRUQgIik7CisgIGlmKGZsYWdzICYgTlRMTUZMQUdfTkVHT1RJQVRFX1dPUktTVEFUSU9OX1NVUFBMSUVEKQorICAgIGZwcmludGYoaGFuZGxlLCAiTlRMTUZMQUdfTkVHT1RJQVRFX1dPUktTVEFUSU9OX1NVUFBMSUVEICIpOworICBpZihmbGFncyAmIE5UTE1GTEFHX05FR09USUFURV9MT0NBTF9DQUxMKQorICAgIGZwcmludGYoaGFuZGxlLCAiTlRMTUZMQUdfTkVHT1RJQVRFX0xPQ0FMX0NBTEwgIik7CisgIGlmKGZsYWdzICYgTlRMTUZMQUdfTkVHT1RJQVRFX0FMV0FZU19TSUdOKQorICAgIGZwcmludGYoaGFuZGxlLCAiTlRMTUZMQUdfTkVHT1RJQVRFX0FMV0FZU19TSUdOICIpOworICBpZihmbGFncyAmIE5UTE1GTEFHX1RBUkdFVF9UWVBFX0RPTUFJTikKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX1RBUkdFVF9UWVBFX0RPTUFJTiAiKTsKKyAgaWYoZmxhZ3MgJiBOVExNRkxBR19UQVJHRVRfVFlQRV9TRVJWRVIpCisgICAgZnByaW50ZihoYW5kbGUsICJOVExNRkxBR19UQVJHRVRfVFlQRV9TRVJWRVIgIik7CisgIGlmKGZsYWdzICYgTlRMTUZMQUdfVEFSR0VUX1RZUEVfU0hBUkUpCisgICAgZnByaW50ZihoYW5kbGUsICJOVExNRkxBR19UQVJHRVRfVFlQRV9TSEFSRSAiKTsKKyAgaWYoZmxhZ3MgJiBOVExNRkxBR19ORUdPVElBVEVfTlRMTTJfS0VZKQorICAgIGZwcmludGYoaGFuZGxlLCAiTlRMTUZMQUdfTkVHT1RJQVRFX05UTE0yX0tFWSAiKTsKKyAgaWYoZmxhZ3MgJiBOVExNRkxBR19SRVFVRVNUX0lOSVRfUkVTUE9OU0UpCisgICAgZnByaW50ZihoYW5kbGUsICJOVExNRkxBR19SRVFVRVNUX0lOSVRfUkVTUE9OU0UgIik7CisgIGlmKGZsYWdzICYgTlRMTUZMQUdfUkVRVUVTVF9BQ0NFUFRfUkVTUE9OU0UpCisgICAgZnByaW50ZihoYW5kbGUsICJOVExNRkxBR19SRVFVRVNUX0FDQ0VQVF9SRVNQT05TRSAiKTsKKyAgaWYoZmxhZ3MgJiBOVExNRkxBR19SRVFVRVNUX05PTk5UX1NFU1NJT05fS0VZKQorICAgIGZwcmludGYoaGFuZGxlLCAiTlRMTUZMQUdfUkVRVUVTVF9OT05OVF9TRVNTSU9OX0tFWSAiKTsKKyAgaWYoZmxhZ3MgJiBOVExNRkxBR19ORUdPVElBVEVfVEFSR0VUX0lORk8pCisgICAgZnByaW50ZihoYW5kbGUsICJOVExNRkxBR19ORUdPVElBVEVfVEFSR0VUX0lORk8gIik7CisgIGlmKGZsYWdzICYgKDE8PDI0KSkKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX1VOS05PV05fMjQgIik7CisgIGlmKGZsYWdzICYgKDE8PDI1KSkKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX1VOS05PV05fMjUgIik7CisgIGlmKGZsYWdzICYgKDE8PDI2KSkKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX1VOS05PV05fMjYgIik7CisgIGlmKGZsYWdzICYgKDE8PDI3KSkKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX1VOS05PV05fMjcgIik7CisgIGlmKGZsYWdzICYgKDE8PDI4KSkKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX1VOS05PV05fMjggIik7CisgIGlmKGZsYWdzICYgTlRMTUZMQUdfTkVHT1RJQVRFXzEyOCkKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX05FR09USUFURV8xMjggIik7CisgIGlmKGZsYWdzICYgTlRMTUZMQUdfTkVHT1RJQVRFX0tFWV9FWENIQU5HRSkKKyAgICBmcHJpbnRmKGhhbmRsZSwgIk5UTE1GTEFHX05FR09USUFURV9LRVlfRVhDSEFOR0UgIik7CisgIGlmKGZsYWdzICYgTlRMTUZMQUdfTkVHT1RJQVRFXzU2KQorICAgIGZwcmludGYoaGFuZGxlLCAiTlRMTUZMQUdfTkVHT1RJQVRFXzU2ICIpOworfQorCitzdGF0aWMgdm9pZCBudGxtX3ByaW50X2hleChGSUxFICpoYW5kbGUsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKyAgY29uc3QgY2hhciAqcCA9IGJ1ZjsKKyAgKHZvaWQpaGFuZGxlOworICBmcHJpbnRmKHN0ZGVyciwgIjB4Iik7CisgIHdoaWxlKGxlbi0tID4gMCkKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiUwMi4yeCIsICh1bnNpZ25lZCBpbnQpKnArKyk7Cit9CisjZWxzZQorIyBkZWZpbmUgREVCVUdfT1VUKHgpIEN1cmxfbm9wX3N0bXQKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9XSU5ET1dTX1NTUEkKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGZyb20gdGhlIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHVzZWQgaW4gdGhlCisgKiBpbmNvbWluZyBwYWNrYWdlIHRvIHdoYXRldmVyIGVuZGlhbiBmb3JtYXQgd2UncmUgdXNpbmcgbmF0aXZlbHkuCisgKiBBcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gYSA0IGJ5dGUgYnVmZmVyLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHJlYWRpbnRfbGUodW5zaWduZWQgY2hhciAqYnVmKQoreworICByZXR1cm4gKCh1bnNpZ25lZCBpbnQpYnVmWzBdKSB8ICgodW5zaWduZWQgaW50KWJ1ZlsxXSA8PCA4KSB8CisgICAgKCh1bnNpZ25lZCBpbnQpYnVmWzJdIDw8IDE2KSB8ICgodW5zaWduZWQgaW50KWJ1ZlszXSA8PCAyNCk7Cit9CisjZW5kaWYKKworLyoKKyAgTlRMTSBtZXNzYWdlIHN0cnVjdHVyZSBub3RlczoKKworICBBICdzaG9ydCcgaXMgYSAnbmV0d29yayBzaG9ydCcsIGEgbGl0dGxlLWVuZGlhbiAxNi1iaXQgdW5zaWduZWQgdmFsdWUuCisKKyAgQSAnbG9uZycgaXMgYSAnbmV0d29yayBsb25nJywgYSBsaXR0bGUtZW5kaWFuLCAzMi1iaXQgdW5zaWduZWQgdmFsdWUuCisKKyAgQSAnc2VjdXJpdHkgYnVmZmVyJyByZXByZXNlbnRzIGEgdHJpcGxldCB1c2VkIHRvIHBvaW50IHRvIGEgYnVmZmVyLAorICBjb25zaXN0aW5nIG9mIHR3byBzaG9ydHMgYW5kIG9uZSBsb25nOgorCisgICAgMS4gQSAnc2hvcnQnIGNvbnRhaW5pbmcgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGNvbnRlbnQgaW4gYnl0ZXMuCisgICAgMi4gQSAnc2hvcnQnIGNvbnRhaW5pbmcgdGhlIGFsbG9jYXRlZCBzcGFjZSBmb3IgdGhlIGJ1ZmZlciBpbiBieXRlcy4KKyAgICAzLiBBICdsb25nJyBjb250YWluaW5nIHRoZSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMsCisgICAgICAgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBOVExNIG1lc3NhZ2UuCisqLworCisvKgorICogQ3VybF9udGxtX2RlY29kZV90eXBlMl9tZXNzYWdlKCkKKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gZGVjb2RlIGEgbnRsbSB0eXBlLTIgbWVzc2FnZSByZWNlaXZlZCBmcm9tIGE6IEhUVFAsIFNNVFAKKyAqIG9yIFBPUDMgc2VydmVyLiBUaGUgbWVzc2FnZSBpcyBmaXJzdCBkZWNvZGVkIGZyb20gYSBiYXNlNjQgc3RyaW5nIGludG8gYQorICogcmF3IG50bG0gbWVzc2FnZSBhbmQgY2hlY2tlZCBmb3IgdmFsaWRpdHkgYmVmb3JlIHRoZSBhcHByb3ByaWF0ZSBkYXRhIGZvcgorICogY3JlYXRpbmcgYSB0eXBlLTMgbWVzc2FnZSBpcyB3cml0dGVuIHRvIHRoZSBnaXZlbiBudGxtIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKgorICogZGF0YSAgICBbaW5dICAgICAtIFBvaW50ZXIgdG8gc2Vzc2lvbiBoYW5kbGUuCisgKiBoZWFkZXIgIFtpbl0gICAgIC0gUG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyLgorICogbnRsbSAgICBbaW5dICAgICAtIFBvaW50ZXIgdG8gbnRsbSBkYXRhIHN0cnVjdCBiZWluZyB1c2VkIGFuZCBtb2RpZmllZC4KKyAqCisgKiBSZXR1cm5zIENVUkxFX09LIG9uIHN1Y2Nlc3MuCisgKi8KK0NVUkxjb2RlIEN1cmxfbnRsbV9kZWNvZGVfdHlwZTJfbWVzc2FnZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG50bG1kYXRhKiBudGxtKQoreworI2lmbmRlZiBVU0VfV0lORE9XU19TU1BJCisgIHN0YXRpYyBjb25zdCBjaGFyIHR5cGUyX21hcmtlcltdID0geyAweDAyLCAweDAwLCAweDAwLCAweDAwIH07CisjZW5kaWYKKworICAvKiBOVExNIHR5cGUtMiBtZXNzYWdlIHN0cnVjdHVyZToKKworICAgICAgICAgIEluZGV4ICBEZXNjcmlwdGlvbiAgICAgICAgICAgIENvbnRlbnQKKyAgICAgICAgICAgIDAgICAgTlRMTVNTUCBTaWduYXR1cmUgICAgICBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgIk5UTE1TU1AiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NGU1NDRjNGQ1MzUzNTAwMCkKKyAgICAgICAgICAgIDggICAgTlRMTSBNZXNzYWdlIFR5cGUgICAgICBsb25nICgweDAyMDAwMDAwKQorICAgICAgICAgICAxMiAgICBUYXJnZXQgTmFtZSAgICAgICAgICAgIHNlY3VyaXR5IGJ1ZmZlcgorICAgICAgICAgICAyMCAgICBGbGFncyAgICAgICAgICAgICAgICAgIGxvbmcKKyAgICAgICAgICAgMjQgICAgQ2hhbGxlbmdlICAgICAgICAgICAgICA4IGJ5dGVzCisgICAgICAgICAgKDMyKSAgIENvbnRleHQgICAgICAgICAgICAgICAgOCBieXRlcyAodHdvIGNvbnNlY3V0aXZlIGxvbmdzKSAoKikKKyAgICAgICAgICAoNDApICAgVGFyZ2V0IEluZm9ybWF0aW9uICAgICBzZWN1cml0eSBidWZmZXIgKCopCisgICAgICAgICAgKDQ4KSAgIE9TIFZlcnNpb24gU3RydWN0dXJlICAgOCBieXRlcyAoKikKKyAgMzIgKDQ4KSAoNTYpICAgU3RhcnQgb2YgZGF0YSBibG9jayAgICAoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKikgLT4gT3B0aW9uYWwKKyAgKi8KKworICBzaXplX3Qgc2l6ZSA9IDA7CisgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IE5VTEw7CisgIENVUkxjb2RlIGVycm9yOworCisjaWYgZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCisgICh2b2lkKWRhdGE7CisjZW5kaWYKKworICBlcnJvciA9IEN1cmxfYmFzZTY0X2RlY29kZShoZWFkZXIsICZidWZmZXIsICZzaXplKTsKKyAgaWYoZXJyb3IpCisgICAgcmV0dXJuIGVycm9yOworCisgIGlmKCFidWZmZXIpIHsKKyAgICBpbmZvZihkYXRhLCAiTlRMTSBoYW5kc2hha2UgZmFpbHVyZSAodW5oYW5kbGVkIGNvbmRpdGlvbilcbiIpOworICAgIHJldHVybiBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRDsKKyAgfQorCisjaWZkZWYgVVNFX1dJTkRPV1NfU1NQSQorICBudGxtLT50eXBlXzIgPSBtYWxsb2Moc2l6ZSArIDEpOworICBpZihudGxtLT50eXBlXzIgPT0gTlVMTCkgeworICAgIGZyZWUoYnVmZmVyKTsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorICBudGxtLT5uX3R5cGVfMiA9ICh1bnNpZ25lZCBsb25nKXNpemU7CisgIG1lbWNweShudGxtLT50eXBlXzIsIGJ1ZmZlciwgc2l6ZSk7CisjZWxzZQorICBudGxtLT5mbGFncyA9IDA7CisKKyAgaWYoKHNpemUgPCAzMikgfHwKKyAgICAgKG1lbWNtcChidWZmZXIsIE5UTE1TU1BfU0lHTkFUVVJFLCA4KSAhPSAwKSB8fAorICAgICAobWVtY21wKGJ1ZmZlciArIDgsIHR5cGUyX21hcmtlciwgc2l6ZW9mKHR5cGUyX21hcmtlcikpICE9IDApKSB7CisgICAgLyogVGhpcyB3YXMgbm90IGEgZ29vZCBlbm91Z2ggdHlwZS0yIG1lc3NhZ2UgKi8KKyAgICBmcmVlKGJ1ZmZlcik7CisgICAgaW5mb2YoZGF0YSwgIk5UTE0gaGFuZHNoYWtlIGZhaWx1cmUgKGJhZCB0eXBlLTIgbWVzc2FnZSlcbiIpOworICAgIHJldHVybiBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRDsKKyAgfQorCisgIG50bG0tPmZsYWdzID0gcmVhZGludF9sZSgmYnVmZmVyWzIwXSk7CisgIG1lbWNweShudGxtLT5ub25jZSwgJmJ1ZmZlclsyNF0sIDgpOworCisgIERFQlVHX09VVCh7CisgICAgZnByaW50ZihzdGRlcnIsICIqKioqIFRZUEUyIGhlYWRlciBmbGFncz0weCUwOC44bHggIiwgbnRsbS0+ZmxhZ3MpOworICAgIG50bG1fcHJpbnRfZmxhZ3Moc3RkZXJyLCBudGxtLT5mbGFncyk7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiAgICAgICAgICAgICAgICAgIG5vbmNlPSIpOworICAgIG50bG1fcHJpbnRfaGV4KHN0ZGVyciwgKGNoYXIgKiludGxtLT5ub25jZSwgOCk7CisgICAgZnByaW50ZihzdGRlcnIsICJcbioqKipcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiKioqKiBIZWFkZXIgJXNcbiAiLCBoZWFkZXIpOworICB9KTsKKyNlbmRpZgorICBmcmVlKGJ1ZmZlcik7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisjaWZkZWYgVVNFX1dJTkRPV1NfU1NQSQordm9pZCBDdXJsX250bG1fc3NwaV9jbGVhbnVwKHN0cnVjdCBudGxtZGF0YSAqbnRsbSkKK3sKKyAgaWYobnRsbS0+dHlwZV8yKSB7CisgICAgZnJlZShudGxtLT50eXBlXzIpOworICAgIG50bG0tPnR5cGVfMiA9IE5VTEw7CisgIH0KKyAgaWYobnRsbS0+aGFzX2hhbmRsZXMpIHsKKyAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZudGxtLT5jX2hhbmRsZSk7CisgICAgc19wU2VjRm4tPkZyZWVDcmVkZW50aWFsc0hhbmRsZSgmbnRsbS0+aGFuZGxlKTsKKyAgICBudGxtLT5oYXNfaGFuZGxlcyA9IDA7CisgIH0KKyAgaWYobnRsbS0+cF9pZGVudGl0eSkgeworICAgIGlmKG50bG0tPmlkZW50aXR5LlVzZXIpIGZyZWUobnRsbS0+aWRlbnRpdHkuVXNlcik7CisgICAgaWYobnRsbS0+aWRlbnRpdHkuUGFzc3dvcmQpIGZyZWUobnRsbS0+aWRlbnRpdHkuUGFzc3dvcmQpOworICAgIGlmKG50bG0tPmlkZW50aXR5LkRvbWFpbikgZnJlZShudGxtLT5pZGVudGl0eS5Eb21haW4pOworICAgIG50bG0tPnBfaWRlbnRpdHkgPSBOVUxMOworICB9Cit9CisjZW5kaWYKKworI2lmbmRlZiBVU0VfV0lORE9XU19TU1BJCisvKiBjb3B5IHRoZSBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uIGFuZCBmaWxsIGluIHplcm9lcyBpbiBldmVyeQorICAgb3RoZXIgZGVzdGluYXRpb24gYnl0ZSEgKi8KK3N0YXRpYyB2b2lkIHVuaWNvZGVjcHkodW5zaWduZWQgY2hhciAqZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuZ3RoKQoreworICBzaXplX3QgaTsKKyAgZm9yKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICBkZXN0WzIgKiBpXSA9ICh1bnNpZ25lZCBjaGFyKXNyY1tpXTsKKyAgICBkZXN0WzIgKiBpICsgMV0gPSAnXDAnOworICB9Cit9CisjZW5kaWYKKworLyoKKyAqIEN1cmxfbnRsbV9jcmVhdGVfdHlwZTFfbWVzc2FnZSgpCisgKgorICogVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIGFuIGFscmVhZHkgZW5jb2RlZCBOVExNIHR5cGUtMSBtZXNzYWdlIHJlYWR5CisgKiBmb3Igc2VuZGluZyB0byB0aGUgcmVjaXBpZW50LCBiZSBpdCBhOiBIVFRQLCBTTVRQIG9yIFBPUDMgc2VydmVyLAorICogdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbXBpbGUgdGltZSBjcnlwbyBBUEkuCisgKgorICogUGFyYW1ldGVyczoKKyAqCisgKiB1c2VycCAgIFtpbl0gICAgIC0gVGhlIHVzZXIgbmFtZSBpbiB0aGUgZm9ybWF0IFVzZXIgb3IgRG9tYWluXFVzZXIuCisgKiBwYXNzZHdwIFtpbl0gICAgIC0gVGhlIHVzZXIncyBwYXNzd29yZC4KKyAqIG50bG0gICAgW2luL291dF0gLSBUaGUgbnRsbSBkYXRhIHN0cnVjdCBiZWluZyB1c2VkIGFuZCBtb2RpZmllZC4KKyAqIG91dHB0ciAgW2luL291dF0gLSBUaGUgYWRyZXNzIHdoZXJlIGEgcG9pbnRlciB0byBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5CisgKiAgICAgICAgICAgICAgICAgICAgaG9sZGluZyB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIHVwb24gY29tcGxldGlvbi4KKyAqIG91dGxlbiAgW291dF0gICAgLSBUaGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgbWVzc2FnZS4KKyAqCisgKiBSZXR1cm5zIENVUkxFX09LIG9uIHN1Y2Nlc3MuCisgKi8KK0NVUkxjb2RlIEN1cmxfbnRsbV9jcmVhdGVfdHlwZTFfbWVzc2FnZShjb25zdCBjaGFyICp1c2VycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXNzd2RwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBudGxtZGF0YSAqbnRsbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb3V0bGVuKQoreworICAvKiBOVExNIHR5cGUtMSBtZXNzYWdlIHN0cnVjdHVyZToKKworICAgICAgIEluZGV4ICBEZXNjcmlwdGlvbiAgICAgICAgICAgIENvbnRlbnQKKyAgICAgICAgIDAgICAgTlRMTVNTUCBTaWduYXR1cmUgICAgICBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgIk5UTE1TU1AiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NGU1NDRjNGQ1MzUzNTAwMCkKKyAgICAgICAgIDggICAgTlRMTSBNZXNzYWdlIFR5cGUgICAgICBsb25nICgweDAxMDAwMDAwKQorICAgICAgICAxMiAgICBGbGFncyAgICAgICAgICAgICAgICAgIGxvbmcKKyAgICAgICAoMTYpICAgU3VwcGxpZWQgRG9tYWluICAgICAgICBzZWN1cml0eSBidWZmZXIgKCopCisgICAgICAgKDI0KSAgIFN1cHBsaWVkIFdvcmtzdGF0aW9uICAgc2VjdXJpdHkgYnVmZmVyICgqKQorICAgICAgICgzMikgICBPUyBWZXJzaW9uIFN0cnVjdHVyZSAgIDggYnl0ZXMgKCopCisgICgzMikgKDQwKSAgIFN0YXJ0IG9mIGRhdGEgYmxvY2sgICAgKCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCopIC0+IE9wdGlvbmFsCisgICovCisKKyAgdW5zaWduZWQgY2hhciBudGxtYnVmW05UTE1fQlVGU0laRV07CisgIHNpemVfdCBzaXplOworCisjaWZkZWYgVVNFX1dJTkRPV1NfU1NQSQorCisgIFNlY0J1ZmZlciBidWY7CisgIFNlY0J1ZmZlckRlc2MgZGVzYzsKKyAgU0VDVVJJVFlfU1RBVFVTIHN0YXR1czsKKyAgVUxPTkcgYXR0cnM7CisgIGNvbnN0IGNoYXIgKmRlc3QgPSAiIjsKKyAgY29uc3QgY2hhciAqdXNlcjsKKyAgY29uc3QgY2hhciAqZG9tYWluID0gIiI7CisgIHNpemVfdCB1c2VybGVuID0gMDsKKyAgc2l6ZV90IGRvbWxlbiA9IDA7CisgIHNpemVfdCBwYXNzd2RsZW4gPSAwOworICBUaW1lU3RhbXAgdHNEdW1teTsgLyogRm9yIFdpbmRvd3MgOXggY29tcGF0aWJpbGl0eSBvZiBTU1BJIGNhbGxzICovCisKKyAgQ3VybF9udGxtX3NzcGlfY2xlYW51cChudGxtKTsKKworICB1c2VyID0gc3RyY2hyKHVzZXJwLCAnXFwnKTsKKyAgaWYoIXVzZXIpCisgICAgdXNlciA9IHN0cmNocih1c2VycCwgJy8nKTsKKworICBpZih1c2VyKSB7CisgICAgZG9tYWluID0gdXNlcnA7CisgICAgZG9tbGVuID0gdXNlciAtIHVzZXJwOworICAgIHVzZXIrKzsKKyAgfQorICBlbHNlIHsKKyAgICB1c2VyID0gdXNlcnA7CisgICAgZG9tYWluID0gIiI7CisgICAgZG9tbGVuID0gMDsKKyAgfQorCisgIGlmKHVzZXIpCisgICAgdXNlcmxlbiA9IHN0cmxlbih1c2VyKTsKKworICBpZihwYXNzd2RwKQorICAgIHBhc3N3ZGxlbiA9IHN0cmxlbihwYXNzd2RwKTsKKworICBpZih1c2VybGVuID4gMCkgeworICAgIC8qIG5vdGU6IGluaXRpYWxpemUgYWxsIG9mIHRoaXMgYmVmb3JlIGRvaW5nIHRoZSBtYWxsb2NzIHNvIHRoYXQKKyAgICAgKiBpdCBjYW4gYmUgY2xlYW5lZCB1cCBsYXRlciB3aXRob3V0IGxlYWtpbmcgbWVtb3J5LgorICAgICAqLworICAgIG50bG0tPnBfaWRlbnRpdHkgPSAmbnRsbS0+aWRlbnRpdHk7CisgICAgbWVtc2V0KG50bG0tPnBfaWRlbnRpdHksIDAsIHNpemVvZigqbnRsbS0+cF9pZGVudGl0eSkpOworICAgIGlmKChudGxtLT5pZGVudGl0eS5Vc2VyID0gKHVuc2lnbmVkIGNoYXIgKilzdHJkdXAodXNlcikpID09IE5VTEwpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIG50bG0tPmlkZW50aXR5LlVzZXJMZW5ndGggPSAodW5zaWduZWQgbG9uZyl1c2VybGVuOworICAgIGlmKChudGxtLT5pZGVudGl0eS5QYXNzd29yZCA9ICh1bnNpZ25lZCBjaGFyICopc3RyZHVwKHBhc3N3ZHApKSA9PSBOVUxMKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICBudGxtLT5pZGVudGl0eS5QYXNzd29yZExlbmd0aCA9ICh1bnNpZ25lZCBsb25nKXN0cmxlbihwYXNzd2RwKTsKKyAgICBpZigobnRsbS0+aWRlbnRpdHkuRG9tYWluID0gbWFsbG9jKGRvbWxlbiArIDEpKSA9PSBOVUxMKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICBzdHJuY3B5KChjaGFyICopbnRsbS0+aWRlbnRpdHkuRG9tYWluLCBkb21haW4sIGRvbWxlbik7CisgICAgbnRsbS0+aWRlbnRpdHkuRG9tYWluW2RvbWxlbl0gPSAnXDAnOworICAgIG50bG0tPmlkZW50aXR5LkRvbWFpbkxlbmd0aCA9ICh1bnNpZ25lZCBsb25nKWRvbWxlbjsKKyAgICBudGxtLT5pZGVudGl0eS5GbGFncyA9IFNFQ19XSU5OVF9BVVRIX0lERU5USVRZX0FOU0k7CisgIH0KKyAgZWxzZQorICAgIG50bG0tPnBfaWRlbnRpdHkgPSBOVUxMOworCisgIHN0YXR1cyA9IHNfcFNlY0ZuLT5BY3F1aXJlQ3JlZGVudGlhbHNIYW5kbGVBKE5VTEwsICh2b2lkICopIk5UTE0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUNQS0dfQ1JFRF9PVVRCT1VORCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRsbS0+cF9pZGVudGl0eSwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm50bG0tPmhhbmRsZSwgJnRzRHVtbXkpOworICBpZihzdGF0dXMgIT0gU0VDX0VfT0spCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgZGVzYy51bFZlcnNpb24gPSBTRUNCVUZGRVJfVkVSU0lPTjsKKyAgZGVzYy5jQnVmZmVycyAgPSAxOworICBkZXNjLnBCdWZmZXJzICA9ICZidWY7CisgIGJ1Zi5jYkJ1ZmZlciAgID0gTlRMTV9CVUZTSVpFOworICBidWYuQnVmZmVyVHlwZSA9IFNFQ0JVRkZFUl9UT0tFTjsKKyAgYnVmLnB2QnVmZmVyICAgPSBudGxtYnVmOworCisgIHN0YXR1cyA9IHNfcFNlY0ZuLT5Jbml0aWFsaXplU2VjdXJpdHlDb250ZXh0QSgmbnRsbS0+aGFuZGxlLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNDX1JFUV9DT05GSURFTlRJQUxJVFkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNDX1JFUV9SRVBMQVlfREVURUNUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTQ19SRVFfQ09OTkVDVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFNFQ1VSSVRZX05FVFdPUktfRFJFUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnRsbS0+Y19oYW5kbGUsICZkZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF0dHJzLCAmdHNEdW1teSk7CisKKyAgaWYoc3RhdHVzID09IFNFQ19JX0NPTVBMRVRFX0FORF9DT05USU5VRSB8fAorICAgICBzdGF0dXMgPT0gU0VDX0lfQ09OVElOVUVfTkVFREVEKQorICAgIHNfcFNlY0ZuLT5Db21wbGV0ZUF1dGhUb2tlbigmbnRsbS0+Y19oYW5kbGUsICZkZXNjKTsKKyAgZWxzZSBpZihzdGF0dXMgIT0gU0VDX0VfT0spIHsKKyAgICBzX3BTZWNGbi0+RnJlZUNyZWRlbnRpYWxzSGFuZGxlKCZudGxtLT5oYW5kbGUpOworICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICB9CisKKyAgbnRsbS0+aGFzX2hhbmRsZXMgPSAxOworICBzaXplID0gYnVmLmNiQnVmZmVyOworCisjZWxzZQorCisgIGNvbnN0IGNoYXIgKmhvc3QgPSAiIjsgICAgICAgICAgICAgIC8qIGVtcHR5ICovCisgIGNvbnN0IGNoYXIgKmRvbWFpbiA9ICIiOyAgICAgICAgICAgIC8qIGVtcHR5ICovCisgIHNpemVfdCBob3N0bGVuID0gMDsKKyAgc2l6ZV90IGRvbWxlbiA9IDA7CisgIHNpemVfdCBob3N0b2ZmID0gMDsKKyAgc2l6ZV90IGRvbW9mZiA9IGhvc3RvZmYgKyBob3N0bGVuOyAgLyogVGhpcyBpcyAwOiByZW1lbWJlciB0aGF0IGhvc3QgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiBhcmUgZW1wdHkgKi8KKyAgKHZvaWQpdXNlcnA7CisgICh2b2lkKXBhc3N3ZHA7CisgICh2b2lkKW50bG07CisKKyNpZiBVU0VfTlRMTTJTRVNTSU9OCisjZGVmaW5lIE5UTE0yRkxBRyBOVExNRkxBR19ORUdPVElBVEVfTlRMTTJfS0VZCisjZWxzZQorI2RlZmluZSBOVExNMkZMQUcgMAorI2VuZGlmCisgIHNucHJpbnRmKChjaGFyICopbnRsbWJ1ZiwgTlRMTV9CVUZTSVpFLAorICAgICAgICAgICBOVExNU1NQX1NJR05BVFVSRSAiJWMiCisgICAgICAgICAgICJceDAxJWMlYyVjIiAvKiAzMi1iaXQgdHlwZSA9IDEgKi8KKyAgICAgICAgICAgIiVjJWMlYyVjIiAgIC8qIDMyLWJpdCBOVExNIGZsYWcgZmllbGQgKi8KKyAgICAgICAgICAgIiVjJWMiICAgICAgIC8qIGRvbWFpbiBsZW5ndGggKi8KKyAgICAgICAgICAgIiVjJWMiICAgICAgIC8qIGRvbWFpbiBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgICAgICAgICAgIiVjJWMiICAgICAgIC8qIGRvbWFpbiBuYW1lIG9mZnNldCAqLworICAgICAgICAgICAiJWMlYyIgICAgICAgLyogMiB6ZXJvZXMgKi8KKyAgICAgICAgICAgIiVjJWMiICAgICAgIC8qIGhvc3QgbGVuZ3RoICovCisgICAgICAgICAgICIlYyVjIiAgICAgICAvKiBob3N0IGFsbG9jYXRlZCBzcGFjZSAqLworICAgICAgICAgICAiJWMlYyIgICAgICAgLyogaG9zdCBuYW1lIG9mZnNldCAqLworICAgICAgICAgICAiJWMlYyIgICAgICAgLyogMiB6ZXJvZXMgKi8KKyAgICAgICAgICAgIiVzIiAgICAgICAgIC8qIGhvc3QgbmFtZSAqLworICAgICAgICAgICAiJXMiLCAgICAgICAgLyogZG9tYWluIHN0cmluZyAqLworICAgICAgICAgICAwLCAgICAgICAgICAgLyogdHJhaWxpbmcgemVybyAqLworICAgICAgICAgICAwLCAwLCAwLCAgICAgLyogcGFydCBvZiB0eXBlLTEgbG9uZyAqLworCisgICAgICAgICAgIExPTkdRVUFSVEVUKE5UTE1GTEFHX05FR09USUFURV9PRU0gfAorICAgICAgICAgICAgICAgICAgICAgICBOVExNRkxBR19SRVFVRVNUX1RBUkdFVCB8CisgICAgICAgICAgICAgICAgICAgICAgIE5UTE1GTEFHX05FR09USUFURV9OVExNX0tFWSB8CisgICAgICAgICAgICAgICAgICAgICAgIE5UTE0yRkxBRyB8CisgICAgICAgICAgICAgICAgICAgICAgIE5UTE1GTEFHX05FR09USUFURV9BTFdBWVNfU0lHTiksCisgICAgICAgICAgIFNIT1JUUEFJUihkb21sZW4pLAorICAgICAgICAgICBTSE9SVFBBSVIoZG9tbGVuKSwKKyAgICAgICAgICAgU0hPUlRQQUlSKGRvbW9mZiksCisgICAgICAgICAgIDAsIDAsCisgICAgICAgICAgIFNIT1JUUEFJUihob3N0bGVuKSwKKyAgICAgICAgICAgU0hPUlRQQUlSKGhvc3RsZW4pLAorICAgICAgICAgICBTSE9SVFBBSVIoaG9zdG9mZiksCisgICAgICAgICAgIDAsIDAsCisgICAgICAgICAgIGhvc3QsICAvKiB0aGlzIGlzIGVtcHR5ICovCisgICAgICAgICAgIGRvbWFpbiAvKiB0aGlzIGlzIGVtcHR5ICovKTsKKworICAvKiBJbml0aWFsIHBhY2tldCBsZW5ndGggKi8KKyAgc2l6ZSA9IDMyICsgaG9zdGxlbiArIGRvbWxlbjsKKworI2VuZGlmCisKKyAgREVCVUdfT1VUKHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiogVFlQRTEgaGVhZGVyIGZsYWdzPTB4JTAyLjJ4JTAyLjJ4JTAyLjJ4JTAyLjJ4ICIKKyAgICAgICAgICAgICIweCUwOC44eCAiLAorICAgICAgICAgICAgTE9OR1FVQVJURVQoTlRMTUZMQUdfTkVHT1RJQVRFX09FTSB8CisgICAgICAgICAgICAgICAgICAgICAgICBOVExNRkxBR19SRVFVRVNUX1RBUkdFVCB8CisgICAgICAgICAgICAgICAgICAgICAgICBOVExNRkxBR19ORUdPVElBVEVfTlRMTV9LRVkgfAorICAgICAgICAgICAgICAgICAgICAgICAgTlRMTTJGTEFHIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5UTE1GTEFHX05FR09USUFURV9BTFdBWVNfU0lHTiksCisgICAgICAgICAgICBOVExNRkxBR19ORUdPVElBVEVfT0VNIHwKKyAgICAgICAgICAgIE5UTE1GTEFHX1JFUVVFU1RfVEFSR0VUIHwKKyAgICAgICAgICAgIE5UTE1GTEFHX05FR09USUFURV9OVExNX0tFWSB8CisgICAgICAgICAgICBOVExNMkZMQUcgfAorICAgICAgICAgICAgTlRMTUZMQUdfTkVHT1RJQVRFX0FMV0FZU19TSUdOKTsKKyAgICBudGxtX3ByaW50X2ZsYWdzKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgIE5UTE1GTEFHX05FR09USUFURV9PRU0gfAorICAgICAgICAgICAgICAgICAgICAgTlRMTUZMQUdfUkVRVUVTVF9UQVJHRVQgfAorICAgICAgICAgICAgICAgICAgICAgTlRMTUZMQUdfTkVHT1RJQVRFX05UTE1fS0VZIHwKKyAgICAgICAgICAgICAgICAgICAgIE5UTE0yRkxBRyB8CisgICAgICAgICAgICAgICAgICAgICBOVExNRkxBR19ORUdPVElBVEVfQUxXQVlTX1NJR04pOworICAgIGZwcmludGYoc3RkZXJyLCAiXG4qKioqXG4iKTsKKyAgfSk7CisKKyAgLyogUmV0dXJuIHdpdGggYmluYXJ5IGJsb2IgZW5jb2RlZCBpbnRvIGJhc2U2NCAqLworICByZXR1cm4gQ3VybF9iYXNlNjRfZW5jb2RlKE5VTEwsIChjaGFyICopbnRsbWJ1Ziwgc2l6ZSwgb3V0cHRyLCBvdXRsZW4pOworfQorCisvKgorICogQ3VybF9udGxtX2NyZWF0ZV90eXBlM19tZXNzYWdlKCkKKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYW4gYWxyZWFkeSBlbmNvZGVkIE5UTE0gdHlwZS0zIG1lc3NhZ2UgcmVhZHkKKyAqIGZvciBzZW5kaW5nIHRvIHRoZSByZWNpcGllbnQsIGJlIGl0IGE6IEhUVFAsIFNNVFAgb3IgUE9QMyBzZXJ2ZXIsCisgKiB1c2luZyB0aGUgYXBwcm9wcmlhdGUgY29tcGlsZSB0aW1lIGNyeXBvIEFQSS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIGRhdGEgICAgW2luXSAgICAgLSBUaGUgc2Vzc2lvbiBoYW5kbGUuCisgKiB1c2VycCAgIFtpbl0gICAgIC0gVGhlIHVzZXIgbmFtZSBpbiB0aGUgZm9ybWF0IFVzZXIgb3IgRG9tYWluXFVzZXIuCisgKiBwYXNzZHdwIFtpbl0gICAgIC0gVGhlIHVzZXIncyBwYXNzd29yZC4KKyAqIG50bG0gICAgW2luL291dF0gLSBUaGUgbnRsbSBkYXRhIHN0cnVjdCBiZWluZyB1c2VkIGFuZCBtb2RpZmllZC4KKyAqIG91dHB0ciAgW2luL291dF0gLSBUaGUgYWRyZXNzIHdoZXJlIGEgcG9pbnRlciB0byBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5CisgKiAgICAgICAgICAgICAgICAgICAgaG9sZGluZyB0aGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIHVwb24gY29tcGxldGlvbi4KKyAqIG91dGxlbiAgW291dF0gICAgLSBUaGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgbWVzc2FnZS4KKyAqCisgKiBSZXR1cm5zIENVUkxFX09LIG9uIHN1Y2Nlc3MuCisgKi8KK0NVUkxjb2RlIEN1cmxfbnRsbV9jcmVhdGVfdHlwZTNfbWVzc2FnZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1c2VycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXNzd2RwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBudGxtZGF0YSAqbnRsbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqb3V0bGVuKQoreworICAvKiBOVExNIHR5cGUtMyBtZXNzYWdlIHN0cnVjdHVyZToKKworICAgICAgICAgIEluZGV4ICBEZXNjcmlwdGlvbiAgICAgICAgICAgIENvbnRlbnQKKyAgICAgICAgICAgIDAgICAgTlRMTVNTUCBTaWduYXR1cmUgICAgICBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgIk5UTE1TU1AiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NGU1NDRjNGQ1MzUzNTAwMCkKKyAgICAgICAgICAgIDggICAgTlRMTSBNZXNzYWdlIFR5cGUgICAgICBsb25nICgweDAzMDAwMDAwKQorICAgICAgICAgICAxMiAgICBMTS9MTXYyIFJlc3BvbnNlICAgICAgIHNlY3VyaXR5IGJ1ZmZlcgorICAgICAgICAgICAyMCAgICBOVExNL05UTE12MiBSZXNwb25zZSAgIHNlY3VyaXR5IGJ1ZmZlcgorICAgICAgICAgICAyOCAgICBUYXJnZXQgTmFtZSAgICAgICAgICAgIHNlY3VyaXR5IGJ1ZmZlcgorICAgICAgICAgICAzNiAgICBVc2VyIE5hbWUgICAgICAgICAgICAgIHNlY3VyaXR5IGJ1ZmZlcgorICAgICAgICAgICA0NCAgICBXb3Jrc3RhdGlvbiBOYW1lICAgICAgIHNlY3VyaXR5IGJ1ZmZlcgorICAgICAgICAgICg1MikgICBTZXNzaW9uIEtleSAgICAgICAgICAgIHNlY3VyaXR5IGJ1ZmZlciAoKikKKyAgICAgICAgICAoNjApICAgRmxhZ3MgICAgICAgICAgICAgICAgICBsb25nICgqKQorICAgICAgICAgICg2NCkgICBPUyBWZXJzaW9uIFN0cnVjdHVyZSAgIDggYnl0ZXMgKCopCisgIDUyICg2NCkgKDcyKSAgIFN0YXJ0IG9mIGRhdGEgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKSAtPiBPcHRpb25hbAorICAqLworCisgIHVuc2lnbmVkIGNoYXIgbnRsbWJ1ZltOVExNX0JVRlNJWkVdOworICBzaXplX3Qgc2l6ZTsKKworI2lmZGVmIFVTRV9XSU5ET1dTX1NTUEkKKyAgY29uc3QgY2hhciAqZGVzdCA9ICIiOworICBTZWNCdWZmZXIgdHlwZV8yOworICBTZWNCdWZmZXIgdHlwZV8zOworICBTZWNCdWZmZXJEZXNjIHR5cGVfMl9kZXNjOworICBTZWNCdWZmZXJEZXNjIHR5cGVfM19kZXNjOworICBTRUNVUklUWV9TVEFUVVMgc3RhdHVzOworICBVTE9ORyBhdHRyczsKKyAgVGltZVN0YW1wIHRzRHVtbXk7IC8qIEZvciBXaW5kb3dzIDl4IGNvbXBhdGliaWxpdHkgb2YgU1NQSSBjYWxscyAqLworCisgICh2b2lkKXBhc3N3ZHA7CisgICh2b2lkKXVzZXJwOworICAodm9pZClkYXRhOworCisgIHR5cGVfMl9kZXNjLnVsVmVyc2lvbiA9IHR5cGVfM19kZXNjLnVsVmVyc2lvbiAgPSBTRUNCVUZGRVJfVkVSU0lPTjsKKyAgdHlwZV8yX2Rlc2MuY0J1ZmZlcnMgID0gdHlwZV8zX2Rlc2MuY0J1ZmZlcnMgICA9IDE7CisgIHR5cGVfMl9kZXNjLnBCdWZmZXJzICA9ICZ0eXBlXzI7CisgIHR5cGVfM19kZXNjLnBCdWZmZXJzICA9ICZ0eXBlXzM7CisKKyAgdHlwZV8yLkJ1ZmZlclR5cGUgPSBTRUNCVUZGRVJfVE9LRU47CisgIHR5cGVfMi5wdkJ1ZmZlciAgID0gbnRsbS0+dHlwZV8yOworICB0eXBlXzIuY2JCdWZmZXIgICA9IG50bG0tPm5fdHlwZV8yOworICB0eXBlXzMuQnVmZmVyVHlwZSA9IFNFQ0JVRkZFUl9UT0tFTjsKKyAgdHlwZV8zLnB2QnVmZmVyICAgPSBudGxtYnVmOworICB0eXBlXzMuY2JCdWZmZXIgICA9IE5UTE1fQlVGU0laRTsKKworICBzdGF0dXMgPSBzX3BTZWNGbi0+SW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dEEoJm50bG0tPmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudGxtLT5jX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTQ19SRVFfQ09ORklERU5USUFMSVRZIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTQ19SRVFfUkVQTEFZX0RFVEVDVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU0NfUkVRX0NPTk5FQ1RJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBTRUNVUklUWV9ORVRXT1JLX0RSRVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHlwZV8yX2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAmbnRsbS0+Y19oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHlwZV8zX2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXR0cnMsICZ0c0R1bW15KTsKKyAgaWYoc3RhdHVzICE9IFNFQ19FX09LKQorICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworCisgIHNpemUgPSB0eXBlXzMuY2JCdWZmZXI7CisKKyAgQ3VybF9udGxtX3NzcGlfY2xlYW51cChudGxtKTsKKworI2Vsc2UKKyAgaW50IGxtcmVzcG9mZjsKKyAgdW5zaWduZWQgY2hhciBsbXJlc3BbMjRdOyAvKiBmaXhlZC1zaXplICovCisjaWYgVVNFX05UUkVTUE9OU0VTCisgIGludCBudHJlc3BvZmY7CisgIHVuc2lnbmVkIGNoYXIgbnRyZXNwWzI0XTsgLyogZml4ZWQtc2l6ZSAqLworI2VuZGlmCisgIGJvb2wgdW5pY29kZSA9IChudGxtLT5mbGFncyAmIE5UTE1GTEFHX05FR09USUFURV9VTklDT0RFKSA/IFRSVUUgOiBGQUxTRTsKKyAgY2hhciBob3N0W0hPU1ROQU1FX01BWCArIDFdID0gIiI7CisgIGNvbnN0IGNoYXIgKnVzZXI7CisgIGNvbnN0IGNoYXIgKmRvbWFpbiA9ICIiOworICBzaXplX3QgaG9zdG9mZiA9IDA7CisgIHNpemVfdCB1c2Vyb2ZmID0gMDsKKyAgc2l6ZV90IGRvbW9mZiA9IDA7CisgIHNpemVfdCBob3N0bGVuID0gMDsKKyAgc2l6ZV90IHVzZXJsZW4gPSAwOworICBzaXplX3QgZG9tbGVuID0gMDsKKyAgQ1VSTGNvZGUgcmVzOworCisgIHVzZXIgPSBzdHJjaHIodXNlcnAsICdcXCcpOworICBpZighdXNlcikKKyAgICB1c2VyID0gc3RyY2hyKHVzZXJwLCAnLycpOworCisgIGlmKHVzZXIpIHsKKyAgICBkb21haW4gPSB1c2VycDsKKyAgICBkb21sZW4gPSAodXNlciAtIGRvbWFpbik7CisgICAgdXNlcisrOworICB9CisgIGVsc2UKKyAgICB1c2VyID0gdXNlcnA7CisKKyAgaWYodXNlcikKKyAgICB1c2VybGVuID0gc3RybGVuKHVzZXIpOworCisgIC8qIEdldCB0aGUgbWFjaGluZSdzIHVuLXF1YWxpZmllZCBob3N0IG5hbWUgYXMgTlRMTSBkb2Vzbid0IGxpa2UgdGhlIGZ1bGx5CisgICAgIHF1YWxpZmllZCBkb21haW4gbmFtZSAqLworICBpZihDdXJsX2dldGhvc3RuYW1lKGhvc3QsIHNpemVvZihob3N0KSkpIHsKKyAgICBpbmZvZihkYXRhLCAiZ2V0aG9zdG5hbWUoKSBmYWlsZWQsIGNvbnRpbnVpbmcgd2l0aG91dCFcbiIpOworICAgIGhvc3RsZW4gPSAwOworICB9CisgIGVsc2UgeworICAgIGhvc3RsZW4gPSBzdHJsZW4oaG9zdCk7CisgIH0KKworICBpZih1bmljb2RlKSB7CisgICAgZG9tbGVuID0gZG9tbGVuICogMjsKKyAgICB1c2VybGVuID0gdXNlcmxlbiAqIDI7CisgICAgaG9zdGxlbiA9IGhvc3RsZW4gKiAyOworICB9CisKKyNpZiBVU0VfTlRMTTJTRVNTSU9OCisgIC8qIFdlIGRvbid0IHN1cHBvcnQgTlRMTTIgaWYgd2UgZG9uJ3QgaGF2ZSBVU0VfTlRSRVNQT05TRVMgKi8KKyAgaWYobnRsbS0+ZmxhZ3MgJiBOVExNRkxBR19ORUdPVElBVEVfTlRMTTJfS0VZKSB7CisgICAgdW5zaWduZWQgY2hhciBudGJ1ZmZlclsweDE4XTsKKyAgICB1bnNpZ25lZCBjaGFyIHRtcFsweDE4XTsKKyAgICB1bnNpZ25lZCBjaGFyIG1kNXN1bVtNRDVfRElHRVNUX0xFTkdUSF07CisgICAgdW5zaWduZWQgY2hhciBlbnRyb3B5WzhdOworCisgICAgLyogTmVlZCB0byBjcmVhdGUgOCBieXRlcyByYW5kb20gZGF0YSAqLworI2lmZGVmIFVTRV9TU0xFQVkKKyAgICBNRDVfQ1RYIE1ENXB3OworICAgIEN1cmxfb3NzbF9zZWVkKGRhdGEpOyAvKiBJbml0aWF0ZSB0aGUgc2VlZCBpZiBub3QgYWxyZWFkeSBkb25lICovCisgICAgUkFORF9ieXRlcyhlbnRyb3B5LCA4KTsKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMU19ORVRUTEUpCisgICAgc3RydWN0IG1kNV9jdHggTUQ1cHc7CisgICAgZ251dGxzX3JuZChHTlVUTFNfUk5EX1JBTkRPTSwgZW50cm9weSwgOCk7CisjZWxpZiBkZWZpbmVkKFVTRV9HTlVUTFMpCisgICAgZ2NyeV9tZF9oZF90IE1ENXB3OworICAgIEN1cmxfZ3Rsc19zZWVkKGRhdGEpOyAvKiBJbml0aWF0ZSB0aGUgc2VlZCBpZiBub3QgYWxyZWFkeSBkb25lICovCisgICAgZ2NyeV9yYW5kb21pemUoZW50cm9weSwgOCwgR0NSWV9TVFJPTkdfUkFORE9NKTsKKyNlbGlmIGRlZmluZWQoVVNFX05TUykKKyAgICBQSzExQ29udGV4dCAqTUQ1cHc7CisgICAgdW5zaWduZWQgaW50IE1ENWxlbjsKKyAgICBDdXJsX25zc19zZWVkKGRhdGEpOyAgLyogSW5pdGlhdGUgdGhlIHNlZWQgaWYgbm90IGFscmVhZHkgZG9uZSAqLworICAgIFBLMTFfR2VuZXJhdGVSYW5kb20oZW50cm9weSwgOCk7CisjZW5kaWYKKworICAgIC8qIDggYnl0ZXMgcmFuZG9tIGRhdGEgYXMgY2hhbGxlbmdlIGluIGxtcmVzcCAqLworICAgIG1lbWNweShsbXJlc3AsIGVudHJvcHksIDgpOworCisgICAgLyogUGFkIHdpdGggemVyb3MgKi8KKyAgICBtZW1zZXQobG1yZXNwICsgOCwgMCwgMHgxMCk7CisKKyAgICAvKiBGaWxsIHRtcCB3aXRoIGNoYWxsZW5nZShub25jZT8pICsgZW50cm9weSAqLworICAgIG1lbWNweSh0bXAsICZudGxtLT5ub25jZVswXSwgOCk7CisgICAgbWVtY3B5KHRtcCArIDgsIGVudHJvcHksIDgpOworCisjaWZkZWYgVVNFX1NTTEVBWQorICAgIE1ENV9Jbml0KCZNRDVwdyk7CisgICAgTUQ1X1VwZGF0ZSgmTUQ1cHcsIHRtcCwgMTYpOworICAgIE1ENV9GaW5hbChtZDVzdW0sICZNRDVwdyk7CisjZWxpZiBkZWZpbmVkKFVTRV9HTlVUTFNfTkVUVExFKQorICAgIG1kNV9pbml0KCZNRDVwdyk7CisgICAgbWQ1X3VwZGF0ZSgmTUQ1cHcsIDE2LCB0bXApOworICAgIG1kNV9kaWdlc3QoJk1ENXB3LCAxNiwgbWQ1c3VtKTsKKyNlbGlmIGRlZmluZWQoVVNFX0dOVVRMUykKKyAgICBnY3J5X21kX29wZW4oJk1ENXB3LCBHQ1JZX01EX01ENSwgMCk7CisgICAgZ2NyeV9tZF93cml0ZShNRDVwdywgdG1wLCBNRDVfRElHRVNUX0xFTkdUSCk7CisgICAgbWVtY3B5KG1kNXN1bSwgZ2NyeV9tZF9yZWFkIChNRDVwdywgMCksIE1ENV9ESUdFU1RfTEVOR1RIKTsKKyAgICBnY3J5X21kX2Nsb3NlKE1ENXB3KTsKKyNlbGlmIGRlZmluZWQoVVNFX05TUykKKyAgICBNRDVwdyA9IFBLMTFfQ3JlYXRlRGlnZXN0Q29udGV4dChTRUNfT0lEX01ENSk7CisgICAgUEsxMV9EaWdlc3RPcChNRDVwdywgdG1wLCAxNik7CisgICAgUEsxMV9EaWdlc3RGaW5hbChNRDVwdywgbWQ1c3VtLCAmTUQ1bGVuLCBNRDVfRElHRVNUX0xFTkdUSCk7CisgICAgUEsxMV9EZXN0cm95Q29udGV4dChNRDVwdywgUFJfVFJVRSk7CisjZW5kaWYKKworICAgIC8qIFdlIHNoYWxsIG9ubHkgdXNlIHRoZSBmaXJzdCA4IGJ5dGVzIG9mIG1kNXN1bSwgYnV0IHRoZSBkZXMKKyAgICAgICBjb2RlIGluIEN1cmxfbnRsbV9jb3JlX2xtX3Jlc3Agb25seSBlbmNyeXB0IHRoZSBmaXJzdCA4IGJ5dGVzICovCisgICAgaWYoQ1VSTEVfT1VUX09GX01FTU9SWSA9PQorICAgICAgIEN1cmxfbnRsbV9jb3JlX21rX250X2hhc2goZGF0YSwgcGFzc3dkcCwgbnRidWZmZXIpKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgQ3VybF9udGxtX2NvcmVfbG1fcmVzcChudGJ1ZmZlciwgbWQ1c3VtLCBudHJlc3ApOworCisgICAgLyogRW5kIG9mIE5UTE0yIFNlc3Npb24gY29kZSAqLworICB9CisgIGVsc2UKKyNlbmRpZgorICB7CisKKyNpZiBVU0VfTlRSRVNQT05TRVMKKyAgICB1bnNpZ25lZCBjaGFyIG50YnVmZmVyWzB4MThdOworI2VuZGlmCisgICAgdW5zaWduZWQgY2hhciBsbWJ1ZmZlclsweDE4XTsKKworI2lmIFVTRV9OVFJFU1BPTlNFUworICAgIGlmKENVUkxFX09VVF9PRl9NRU1PUlkgPT0KKyAgICAgICBDdXJsX250bG1fY29yZV9ta19udF9oYXNoKGRhdGEsIHBhc3N3ZHAsIG50YnVmZmVyKSkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIEN1cmxfbnRsbV9jb3JlX2xtX3Jlc3AobnRidWZmZXIsICZudGxtLT5ub25jZVswXSwgbnRyZXNwKTsKKyNlbmRpZgorCisgICAgQ3VybF9udGxtX2NvcmVfbWtfbG1faGFzaChkYXRhLCBwYXNzd2RwLCBsbWJ1ZmZlcik7CisgICAgQ3VybF9udGxtX2NvcmVfbG1fcmVzcChsbWJ1ZmZlciwgJm50bG0tPm5vbmNlWzBdLCBsbXJlc3ApOworICAgIC8qIEEgc2FmZXIgYnV0IGxlc3MgY29tcGF0aWJsZSBhbHRlcm5hdGl2ZSBpczoKKyAgICAgKiAgIEN1cmxfbnRsbV9jb3JlX2xtX3Jlc3AobnRidWZmZXIsICZudGxtLT5ub25jZVswXSwgbG1yZXNwKTsKKyAgICAgKiBTZWUgaHR0cDovL2RhdmVucG9ydC5zb3VyY2Vmb3JnZS5uZXQvbnRsbS5odG1sI250bG1WZXJzaW9uMiAqLworICB9CisKKyAgbG1yZXNwb2ZmID0gNjQ7IC8qIHNpemUgb2YgdGhlIG1lc3NhZ2UgaGVhZGVyICovCisjaWYgVVNFX05UUkVTUE9OU0VTCisgIG50cmVzcG9mZiA9IGxtcmVzcG9mZiArIDB4MTg7CisgIGRvbW9mZiA9IG50cmVzcG9mZiArIDB4MTg7CisjZWxzZQorICBkb21vZmYgPSBsbXJlc3BvZmYgKyAweDE4OworI2VuZGlmCisgIHVzZXJvZmYgPSBkb21vZmYgKyBkb21sZW47CisgIGhvc3RvZmYgPSB1c2Vyb2ZmICsgdXNlcmxlbjsKKworICAvKiBDcmVhdGUgdGhlIGJpZyB0eXBlLTMgbWVzc2FnZSBiaW5hcnkgYmxvYiAqLworICBzaXplID0gc25wcmludGYoKGNoYXIgKiludGxtYnVmLCBOVExNX0JVRlNJWkUsCisgICAgICAgICAgICAgICAgICBOVExNU1NQX1NJR05BVFVSRSAiJWMiCisgICAgICAgICAgICAgICAgICAiXHgwMyVjJWMlYyIgIC8qIDMyLWJpdCB0eXBlID0gMyAqLworCisgICAgICAgICAgICAgICAgICAiJWMlYyIgIC8qIExhbk1hbmFnZXIgbGVuZ3RoICovCisgICAgICAgICAgICAgICAgICAiJWMlYyIgIC8qIExhbk1hbmFnZXIgYWxsb2NhdGVkIHNwYWNlICovCisgICAgICAgICAgICAgICAgICAiJWMlYyIgIC8qIExhbk1hbmFnZXIgb2Zmc2V0ICovCisgICAgICAgICAgICAgICAgICAiJWMlYyIgIC8qIDIgemVyb2VzICovCisKKyAgICAgICAgICAgICAgICAgICIlYyVjIiAgLyogTlQtcmVzcG9uc2UgbGVuZ3RoICovCisgICAgICAgICAgICAgICAgICAiJWMlYyIgIC8qIE5ULXJlc3BvbnNlIGFsbG9jYXRlZCBzcGFjZSAqLworICAgICAgICAgICAgICAgICAgIiVjJWMiICAvKiBOVC1yZXNwb25zZSBvZmZzZXQgKi8KKyAgICAgICAgICAgICAgICAgICIlYyVjIiAgLyogMiB6ZXJvZXMgKi8KKworICAgICAgICAgICAgICAgICAgIiVjJWMiICAvKiBkb21haW4gbGVuZ3RoICovCisgICAgICAgICAgICAgICAgICAiJWMlYyIgIC8qIGRvbWFpbiBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgICAgICAgICAgICAgICAgICIlYyVjIiAgLyogZG9tYWluIG5hbWUgb2Zmc2V0ICovCisgICAgICAgICAgICAgICAgICAiJWMlYyIgIC8qIDIgemVyb2VzICovCisKKyAgICAgICAgICAgICAgICAgICIlYyVjIiAgLyogdXNlciBsZW5ndGggKi8KKyAgICAgICAgICAgICAgICAgICIlYyVjIiAgLyogdXNlciBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgICAgICAgICAgICAgICAgICIlYyVjIiAgLyogdXNlciBvZmZzZXQgKi8KKyAgICAgICAgICAgICAgICAgICIlYyVjIiAgLyogMiB6ZXJvZXMgKi8KKworICAgICAgICAgICAgICAgICAgIiVjJWMiICAvKiBob3N0IGxlbmd0aCAqLworICAgICAgICAgICAgICAgICAgIiVjJWMiICAvKiBob3N0IGFsbG9jYXRlZCBzcGFjZSAqLworICAgICAgICAgICAgICAgICAgIiVjJWMiICAvKiBob3N0IG9mZnNldCAqLworICAgICAgICAgICAgICAgICAgIiVjJWMiICAvKiAyIHplcm9lcyAqLworCisgICAgICAgICAgICAgICAgICAiJWMlYyIgIC8qIHNlc3Npb24ga2V5IGxlbmd0aCAodW5rbm93biBwdXJwb3NlKSAqLworICAgICAgICAgICAgICAgICAgIiVjJWMiICAvKiBzZXNzaW9uIGtleSBhbGxvY2F0ZWQgc3BhY2UgKHVua25vd24gcHVycG9zZSkgKi8KKyAgICAgICAgICAgICAgICAgICIlYyVjIiAgLyogc2Vzc2lvbiBrZXkgb2Zmc2V0ICh1bmtub3duIHB1cnBvc2UpICovCisgICAgICAgICAgICAgICAgICAiJWMlYyIgIC8qIDIgemVyb2VzICovCisKKyAgICAgICAgICAgICAgICAgICIlYyVjJWMlYyIsICAvKiBmbGFncyAqLworCisgICAgICAgICAgICAgICAgICAvKiBkb21haW4gc3RyaW5nICovCisgICAgICAgICAgICAgICAgICAvKiB1c2VyIHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgLyogaG9zdCBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICAgIC8qIExhbk1hbmFnZXIgcmVzcG9uc2UgKi8KKyAgICAgICAgICAgICAgICAgIC8qIE5UIHJlc3BvbnNlICovCisKKyAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgIC8qIHplcm8gdGVybWluYXRpb24gKi8KKyAgICAgICAgICAgICAgICAgIDAsIDAsIDAsICAgICAgICAgIC8qIHR5cGUtMyBsb25nLCB0aGUgMjQgdXBwZXIgYml0cyAqLworCisgICAgICAgICAgICAgICAgICBTSE9SVFBBSVIoMHgxOCksICAvKiBMYW5NYW5hZ2VyIHJlc3BvbnNlIGxlbmd0aCwgdHdpY2UgKi8KKyAgICAgICAgICAgICAgICAgIFNIT1JUUEFJUigweDE4KSwKKyAgICAgICAgICAgICAgICAgIFNIT1JUUEFJUihsbXJlc3BvZmYpLAorICAgICAgICAgICAgICAgICAgMHgwLCAweDAsCisKKyNpZiBVU0VfTlRSRVNQT05TRVMKKyAgICAgICAgICAgICAgICAgIFNIT1JUUEFJUigweDE4KSwgIC8qIE5ULXJlc3BvbnNlIGxlbmd0aCwgdHdpY2UgKi8KKyAgICAgICAgICAgICAgICAgIFNIT1JUUEFJUigweDE4KSwKKyAgICAgICAgICAgICAgICAgIFNIT1JUUEFJUihudHJlc3BvZmYpLAorICAgICAgICAgICAgICAgICAgMHgwLCAweDAsCisjZWxzZQorICAgICAgICAgICAgICAgICAgMHgwLCAweDAsCisgICAgICAgICAgICAgICAgICAweDAsIDB4MCwKKyAgICAgICAgICAgICAgICAgIDB4MCwgMHgwLAorICAgICAgICAgICAgICAgICAgMHgwLCAweDAsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgIFNIT1JUUEFJUihkb21sZW4pLAorICAgICAgICAgICAgICAgICAgU0hPUlRQQUlSKGRvbWxlbiksCisgICAgICAgICAgICAgICAgICBTSE9SVFBBSVIoZG9tb2ZmKSwKKyAgICAgICAgICAgICAgICAgIDB4MCwgMHgwLAorCisgICAgICAgICAgICAgICAgICBTSE9SVFBBSVIodXNlcmxlbiksCisgICAgICAgICAgICAgICAgICBTSE9SVFBBSVIodXNlcmxlbiksCisgICAgICAgICAgICAgICAgICBTSE9SVFBBSVIodXNlcm9mZiksCisgICAgICAgICAgICAgICAgICAweDAsIDB4MCwKKworICAgICAgICAgICAgICAgICAgU0hPUlRQQUlSKGhvc3RsZW4pLAorICAgICAgICAgICAgICAgICAgU0hPUlRQQUlSKGhvc3RsZW4pLAorICAgICAgICAgICAgICAgICAgU0hPUlRQQUlSKGhvc3RvZmYpLAorICAgICAgICAgICAgICAgICAgMHgwLCAweDAsCisKKyAgICAgICAgICAgICAgICAgIDB4MCwgMHgwLAorICAgICAgICAgICAgICAgICAgMHgwLCAweDAsCisgICAgICAgICAgICAgICAgICAweDAsIDB4MCwKKyAgICAgICAgICAgICAgICAgIDB4MCwgMHgwLAorCisgICAgICAgICAgICAgICAgICBMT05HUVVBUlRFVChudGxtLT5mbGFncykpOworCisgIERFQlVHQVNTRVJUKHNpemUgPT0gNjQpOworICBERUJVR0FTU0VSVChzaXplID09IChzaXplX3QpbG1yZXNwb2ZmKTsKKworICAvKiBXZSBhcHBlbmQgdGhlIGJpbmFyeSBoYXNoZXMgKi8KKyAgaWYoc2l6ZSA8IChOVExNX0JVRlNJWkUgLSAweDE4KSkgeworICAgIG1lbWNweSgmbnRsbWJ1ZltzaXplXSwgbG1yZXNwLCAweDE4KTsKKyAgICBzaXplICs9IDB4MTg7CisgIH0KKworICBERUJVR19PVVQoeworICAgIGZwcmludGYoc3RkZXJyLCAiKioqKiBUWVBFMyBoZWFkZXIgbG1yZXNwPSIpOworICAgIG50bG1fcHJpbnRfaGV4KHN0ZGVyciwgKGNoYXIgKikmbnRsbWJ1ZltsbXJlc3BvZmZdLCAweDE4KTsKKyAgfSk7CisKKyNpZiBVU0VfTlRSRVNQT05TRVMKKyAgaWYoc2l6ZSA8IChOVExNX0JVRlNJWkUgLSAweDE4KSkgeworICAgIERFQlVHQVNTRVJUKHNpemUgPT0gKHNpemVfdCludHJlc3BvZmYpOworICAgIG1lbWNweSgmbnRsbWJ1ZltzaXplXSwgbnRyZXNwLCAweDE4KTsKKyAgICBzaXplICs9IDB4MTg7CisgIH0KKworICBERUJVR19PVVQoeworICAgIGZwcmludGYoc3RkZXJyLCAiXG4gICBudHJlc3A9Iik7CisgICAgbnRsbV9wcmludF9oZXgoc3RkZXJyLCAoY2hhciAqKSZudGxtYnVmW250cmVzcG9mZl0sIDB4MTgpOworICB9KTsKKworI2VuZGlmCisKKyAgREVCVUdfT1VUKHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuICAgZmxhZ3M9MHglMDIuMnglMDIuMnglMDIuMnglMDIuMnggMHglMDguOHggIiwKKyAgICAgICAgICAgIExPTkdRVUFSVEVUKG50bG0tPmZsYWdzKSwgbnRsbS0+ZmxhZ3MpOworICAgIG50bG1fcHJpbnRfZmxhZ3Moc3RkZXJyLCBudGxtLT5mbGFncyk7CisgICAgZnByaW50ZihzdGRlcnIsICJcbioqKipcbiIpOworICB9KTsKKworICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgZG9tYWluLCB1c2VyIGFuZCBob3N0IHN0cmluZ3MgZml0IGluIHRoZQorICAgICBidWZmZXIgYmVmb3JlIHdlIGNvcHkgdGhlbSB0aGVyZS4gKi8KKyAgaWYoc2l6ZSArIHVzZXJsZW4gKyBkb21sZW4gKyBob3N0bGVuID49IE5UTE1fQlVGU0laRSkgeworICAgIGZhaWxmKGRhdGEsICJ1c2VyICsgZG9tYWluICsgaG9zdCBuYW1lIHRvbyBiaWciKTsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIERFQlVHQVNTRVJUKHNpemUgPT0gZG9tb2ZmKTsKKyAgaWYodW5pY29kZSkKKyAgICB1bmljb2RlY3B5KCZudGxtYnVmW3NpemVdLCBkb21haW4sIGRvbWxlbiAvIDIpOworICBlbHNlCisgICAgbWVtY3B5KCZudGxtYnVmW3NpemVdLCBkb21haW4sIGRvbWxlbik7CisKKyAgc2l6ZSArPSBkb21sZW47CisKKyAgREVCVUdBU1NFUlQoc2l6ZSA9PSB1c2Vyb2ZmKTsKKyAgaWYodW5pY29kZSkKKyAgICB1bmljb2RlY3B5KCZudGxtYnVmW3NpemVdLCB1c2VyLCB1c2VybGVuIC8gMik7CisgIGVsc2UKKyAgICBtZW1jcHkoJm50bG1idWZbc2l6ZV0sIHVzZXIsIHVzZXJsZW4pOworCisgIHNpemUgKz0gdXNlcmxlbjsKKworICBERUJVR0FTU0VSVChzaXplID09IGhvc3RvZmYpOworICBpZih1bmljb2RlKQorICAgIHVuaWNvZGVjcHkoJm50bG1idWZbc2l6ZV0sIGhvc3QsIGhvc3RsZW4gLyAyKTsKKyAgZWxzZQorICAgIG1lbWNweSgmbnRsbWJ1ZltzaXplXSwgaG9zdCwgaG9zdGxlbik7CisKKyAgc2l6ZSArPSBob3N0bGVuOworCisgIC8qIENvbnZlcnQgZG9tYWluLCB1c2VyLCBhbmQgaG9zdCB0byBBU0NJSSBidXQgbGVhdmUgdGhlIHJlc3QgYXMtaXMgKi8KKyAgcmVzID0gQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsoZGF0YSwgKGNoYXIgKikmbnRsbWJ1Zltkb21vZmZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIC0gZG9tb2ZmKTsKKyAgaWYocmVzKQorICAgIHJldHVybiBDVVJMRV9DT05WX0ZBSUxFRDsKKworI2VuZGlmCisKKyAgLyogUmV0dXJuIHdpdGggYmluYXJ5IGJsb2IgZW5jb2RlZCBpbnRvIGJhc2U2NCAqLworICByZXR1cm4gQ3VybF9iYXNlNjRfZW5jb2RlKE5VTEwsIChjaGFyICopbnRsbWJ1Ziwgc2l6ZSwgb3V0cHRyLCBvdXRsZW4pOworfQorCisjZW5kaWYgLyogVVNFX05UTE0gKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jdXJsX250bG1fbXNncy5oIGIvY3VybC03LjI1LjAvbGliL2N1cmxfbnRsbV9tc2dzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjZjcyMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX250bG1fbXNncy5oCkBAIC0wLDAgKzEsMTcwIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX05UTE1fTVNHU19ICisjZGVmaW5lIEhFQURFUl9DVVJMX05UTE1fTVNHU19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfTlRMTQorCisvKiBUaGlzIGlzIHRvIGdlbmVyYXRlIGEgYmFzZTY0IGVuY29kZWQgTlRMTSB0eXBlLTEgbWVzc2FnZSAqLworQ1VSTGNvZGUgQ3VybF9udGxtX2NyZWF0ZV90eXBlMV9tZXNzYWdlKGNvbnN0IGNoYXIgKnVzZXJwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhc3N3ZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG50bG1kYXRhICpudGxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvdXRwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvdXRsZW4pOworCisvKiBUaGlzIGlzIHRvIGdlbmVyYXRlIGEgYmFzZTY0IGVuY29kZWQgTlRMTSB0eXBlLTMgbWVzc2FnZSAqLworQ1VSTGNvZGUgQ3VybF9udGxtX2NyZWF0ZV90eXBlM19tZXNzYWdlKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVzZXJwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhc3N3ZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG50bG1kYXRhICpudGxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvdXRwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpvdXRsZW4pOworCisvKiBUaGlzIGlzIHRvIGRlY29kZSBhIE5UTE0gdHlwZS0yIG1lc3NhZ2UgKi8KK0NVUkxjb2RlIEN1cmxfbnRsbV9kZWNvZGVfdHlwZTJfbWVzc2FnZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG50bG1kYXRhKiBudGxtKTsKKworLyogVGhpcyBpcyB0byBjbGVhbiB1cCB0aGUgbnRsbSBkYXRhIHN0cnVjdHVyZSAqLworI2lmZGVmIFVTRV9XSU5ET1dTX1NTUEkKK3ZvaWQgQ3VybF9udGxtX3NzcGlfY2xlYW51cChzdHJ1Y3QgbnRsbWRhdGEgKm50bG0pOworI2Vsc2UKKyNkZWZpbmUgQ3VybF9udGxtX3NzcGlfY2xlYW51cCh4KQorI2VuZGlmCisKKy8qIE5UTE0gYnVmZmVyIGZpeGVkIHNpemUsIGxhcmdlIGVub3VnaCBmb3IgbG9uZyB1c2VyICsgaG9zdCArIGRvbWFpbiAqLworI2RlZmluZSBOVExNX0JVRlNJWkUgMTAyNAorCisvKiBTdHVmZiBvbmx5IHJlcXVpcmVkIGZvciBjdXJsX250bG1fbXNncy5jICovCisjaWZkZWYgQlVJTERJTkdfQ1VSTF9OVExNX01TR1NfQworCisvKiBGbGFnIGJpdHMgZGVmaW5pdGlvbnMgYmFzZWQgb24gaHR0cDovL2RhdmVucG9ydC5zb3VyY2Vmb3JnZS5uZXQvbnRsbS5odG1sICovCisKKyNkZWZpbmUgTlRMTUZMQUdfTkVHT1RJQVRFX1VOSUNPREUgICAgICAgICAgICAgICAoMTw8MCkKKy8qIEluZGljYXRlcyB0aGF0IFVuaWNvZGUgc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciB1c2UgaW4gc2VjdXJpdHkgYnVmZmVyCisgICBkYXRhLiAqLworCisjZGVmaW5lIE5UTE1GTEFHX05FR09USUFURV9PRU0gICAgICAgICAgICAgICAgICAgKDE8PDEpCisvKiBJbmRpY2F0ZXMgdGhhdCBPRU0gc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciB1c2UgaW4gc2VjdXJpdHkgYnVmZmVyIGRhdGEuICovCisKKyNkZWZpbmUgTlRMTUZMQUdfUkVRVUVTVF9UQVJHRVQgICAgICAgICAgICAgICAgICAoMTw8MikKKy8qIFJlcXVlc3RzIHRoYXQgdGhlIHNlcnZlcidzIGF1dGhlbnRpY2F0aW9uIHJlYWxtIGJlIGluY2x1ZGVkIGluIHRoZSBUeXBlIDIKKyAgIG1lc3NhZ2UuICovCisKKy8qIHVua25vd24gKDE8PDMpICovCisjZGVmaW5lIE5UTE1GTEFHX05FR09USUFURV9TSUdOICAgICAgICAgICAgICAgICAgKDE8PDQpCisvKiBTcGVjaWZpZXMgdGhhdCBhdXRoZW50aWNhdGVkIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIKKyAgIHNob3VsZCBjYXJyeSBhIGRpZ2l0YWwgc2lnbmF0dXJlIChtZXNzYWdlIGludGVncml0eSkuICovCisKKyNkZWZpbmUgTlRMTUZMQUdfTkVHT1RJQVRFX1NFQUwgICAgICAgICAgICAgICAgICAoMTw8NSkKKy8qIFNwZWNpZmllcyB0aGF0IGF1dGhlbnRpY2F0ZWQgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlcgorICAgc2hvdWxkIGJlIGVuY3J5cHRlZCAobWVzc2FnZSBjb25maWRlbnRpYWxpdHkpLiAqLworCisjZGVmaW5lIE5UTE1GTEFHX05FR09USUFURV9EQVRBR1JBTV9TVFlMRSAgICAgICAgKDE8PDYpCisvKiBJbmRpY2F0ZXMgdGhhdCBkYXRhZ3JhbSBhdXRoZW50aWNhdGlvbiBpcyBiZWluZyB1c2VkLiAqLworCisjZGVmaW5lIE5UTE1GTEFHX05FR09USUFURV9MTV9LRVkgICAgICAgICAgICAgICAgKDE8PDcpCisvKiBJbmRpY2F0ZXMgdGhhdCB0aGUgTEFOIE1hbmFnZXIgc2Vzc2lvbiBrZXkgc2hvdWxkIGJlIHVzZWQgZm9yIHNpZ25pbmcgYW5kCisgICBzZWFsaW5nIGF1dGhlbnRpY2F0ZWQgY29tbXVuaWNhdGlvbnMuICovCisKKyNkZWZpbmUgTlRMTUZMQUdfTkVHT1RJQVRFX05FVFdBUkUgICAgICAgICAgICAgICAoMTw8OCkKKy8qIHVua25vd24gcHVycG9zZSAqLworCisjZGVmaW5lIE5UTE1GTEFHX05FR09USUFURV9OVExNX0tFWSAgICAgICAgICAgICAgKDE8PDkpCisvKiBJbmRpY2F0ZXMgdGhhdCBOVExNIGF1dGhlbnRpY2F0aW9uIGlzIGJlaW5nIHVzZWQuICovCisKKy8qIHVua25vd24gKDE8PDEwKSAqLworCisjZGVmaW5lIE5UTE1GTEFHX05FR09USUFURV9BTk9OWU1PVVMgICAgICAgICAgICAgKDE8PDExKQorLyogU2VudCBieSB0aGUgY2xpZW50IGluIHRoZSBUeXBlIDMgbWVzc2FnZSB0byBpbmRpY2F0ZSB0aGF0IGFuIGFub255bW91cworICAgY29udGV4dCBoYXMgYmVlbiBlc3RhYmxpc2hlZC4gVGhpcyBhbHNvIGFmZmVjdHMgdGhlIHJlc3BvbnNlIGZpZWxkcy4gKi8KKworI2RlZmluZSBOVExNRkxBR19ORUdPVElBVEVfRE9NQUlOX1NVUFBMSUVEICAgICAgICgxPDwxMikKKy8qIFNlbnQgYnkgdGhlIGNsaWVudCBpbiB0aGUgVHlwZSAxIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhhdCBhIGRlc2lyZWQKKyAgIGF1dGhlbnRpY2F0aW9uIHJlYWxtIGlzIGluY2x1ZGVkIGluIHRoZSBtZXNzYWdlLiAqLworCisjZGVmaW5lIE5UTE1GTEFHX05FR09USUFURV9XT1JLU1RBVElPTl9TVVBQTElFRCAgKDE8PDEzKQorLyogU2VudCBieSB0aGUgY2xpZW50IGluIHRoZSBUeXBlIDEgbWVzc2FnZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjbGllbnQKKyAgIHdvcmtzdGF0aW9uJ3MgbmFtZSBpcyBpbmNsdWRlZCBpbiB0aGUgbWVzc2FnZS4gKi8KKworI2RlZmluZSBOVExNRkxBR19ORUdPVElBVEVfTE9DQUxfQ0FMTCAgICAgICAgICAgICgxPDwxNCkKKy8qIFNlbnQgYnkgdGhlIHNlcnZlciB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzZXJ2ZXIgYW5kIGNsaWVudCBhcmUgb24gdGhlIHNhbWUKKyAgIG1hY2hpbmUuIEltcGxpZXMgdGhhdCB0aGUgY2xpZW50IG1heSB1c2UgYSBwcmUtZXN0YWJsaXNoZWQgbG9jYWwgc2VjdXJpdHkKKyAgIGNvbnRleHQgcmF0aGVyIHRoYW4gcmVzcG9uZGluZyB0byB0aGUgY2hhbGxlbmdlLiAqLworCisjZGVmaW5lIE5UTE1GTEFHX05FR09USUFURV9BTFdBWVNfU0lHTiAgICAgICAgICAgKDE8PDE1KQorLyogSW5kaWNhdGVzIHRoYXQgYXV0aGVudGljYXRlZCBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyCisgICBzaG91bGQgYmUgc2lnbmVkIHdpdGggYSAiZHVtbXkiIHNpZ25hdHVyZS4gKi8KKworI2RlZmluZSBOVExNRkxBR19UQVJHRVRfVFlQRV9ET01BSU4gICAgICAgICAgICAgICgxPDwxNikKKy8qIFNlbnQgYnkgdGhlIHNlcnZlciBpbiB0aGUgVHlwZSAyIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdGFyZ2V0CisgICBhdXRoZW50aWNhdGlvbiByZWFsbSBpcyBhIGRvbWFpbi4gKi8KKworI2RlZmluZSBOVExNRkxBR19UQVJHRVRfVFlQRV9TRVJWRVIgICAgICAgICAgICAgICgxPDwxNykKKy8qIFNlbnQgYnkgdGhlIHNlcnZlciBpbiB0aGUgVHlwZSAyIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdGFyZ2V0CisgICBhdXRoZW50aWNhdGlvbiByZWFsbSBpcyBhIHNlcnZlci4gKi8KKworI2RlZmluZSBOVExNRkxBR19UQVJHRVRfVFlQRV9TSEFSRSAgICAgICAgICAgICAgICgxPDwxOCkKKy8qIFNlbnQgYnkgdGhlIHNlcnZlciBpbiB0aGUgVHlwZSAyIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdGFyZ2V0CisgICBhdXRoZW50aWNhdGlvbiByZWFsbSBpcyBhIHNoYXJlLiBQcmVzdW1hYmx5LCB0aGlzIGlzIGZvciBzaGFyZS1sZXZlbAorICAgYXV0aGVudGljYXRpb24uIFVzYWdlIGlzIHVuY2xlYXIuICovCisKKyNkZWZpbmUgTlRMTUZMQUdfTkVHT1RJQVRFX05UTE0yX0tFWSAgICAgICAgICAgICAoMTw8MTkpCisvKiBJbmRpY2F0ZXMgdGhhdCB0aGUgTlRMTTIgc2lnbmluZyBhbmQgc2VhbGluZyBzY2hlbWUgc2hvdWxkIGJlIHVzZWQgZm9yCisgICBwcm90ZWN0aW5nIGF1dGhlbnRpY2F0ZWQgY29tbXVuaWNhdGlvbnMuICovCisKKyNkZWZpbmUgTlRMTUZMQUdfUkVRVUVTVF9JTklUX1JFU1BPTlNFICAgICAgICAgICAoMTw8MjApCisvKiB1bmtub3duIHB1cnBvc2UgKi8KKworI2RlZmluZSBOVExNRkxBR19SRVFVRVNUX0FDQ0VQVF9SRVNQT05TRSAgICAgICAgICgxPDwyMSkKKy8qIHVua25vd24gcHVycG9zZSAqLworCisjZGVmaW5lIE5UTE1GTEFHX1JFUVVFU1RfTk9OTlRfU0VTU0lPTl9LRVkgICAgICAgKDE8PDIyKQorLyogdW5rbm93biBwdXJwb3NlICovCisKKyNkZWZpbmUgTlRMTUZMQUdfTkVHT1RJQVRFX1RBUkdFVF9JTkZPICAgICAgICAgICAoMTw8MjMpCisvKiBTZW50IGJ5IHRoZSBzZXJ2ZXIgaW4gdGhlIFR5cGUgMiBtZXNzYWdlIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgaW5jbHVkaW5nIGEKKyAgIFRhcmdldCBJbmZvcm1hdGlvbiBibG9jayBpbiB0aGUgbWVzc2FnZS4gKi8KKworLyogdW5rbm93biAoMTwyNCkgKi8KKy8qIHVua25vd24gKDE8MjUpICovCisvKiB1bmtub3duICgxPDI2KSAqLworLyogdW5rbm93biAoMTwyNykgKi8KKy8qIHVua25vd24gKDE8MjgpICovCisKKyNkZWZpbmUgTlRMTUZMQUdfTkVHT1RJQVRFXzEyOCAgICAgICAgICAgICAgICAgICAoMTw8MjkpCisvKiBJbmRpY2F0ZXMgdGhhdCAxMjgtYml0IGVuY3J5cHRpb24gaXMgc3VwcG9ydGVkLiAqLworCisjZGVmaW5lIE5UTE1GTEFHX05FR09USUFURV9LRVlfRVhDSEFOR0UgICAgICAgICAgKDE8PDMwKQorLyogSW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCB3aWxsIHByb3ZpZGUgYW4gZW5jcnlwdGVkIG1hc3RlciBrZXkgaW4KKyAgIHRoZSAiU2Vzc2lvbiBLZXkiIGZpZWxkIG9mIHRoZSBUeXBlIDMgbWVzc2FnZS4gKi8KKworI2RlZmluZSBOVExNRkxBR19ORUdPVElBVEVfNTYgICAgICAgICAgICAgICAgICAgICgxPDwzMSkKKy8qIEluZGljYXRlcyB0aGF0IDU2LWJpdCBlbmNyeXB0aW9uIGlzIHN1cHBvcnRlZC4gKi8KKworI2VuZGlmIC8qIEJVSUxESU5HX0NVUkxfTlRMTV9NU0dTX0MgKi8KKworI2VuZGlmIC8qIFVTRV9OVExNICovCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9OVExNX01TR1NfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2N1cmxfbnRsbV93Yi5jIGIvY3VybC03LjI1LjAvbGliL2N1cmxfbnRsbV93Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZDBkMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY3VybF9udGxtX3diLmMKQEAgLTAsMCArMSwzOTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmIGRlZmluZWQoVVNFX05UTE0pICYmIGRlZmluZWQoTlRMTV9XQl9FTkFCTEVEKQorCisvKgorICogTlRMTSBkZXRhaWxzOgorICoKKyAqIGh0dHA6Ly9kYXZlbnBvcnQuc291cmNlZm9yZ2UubmV0L250bG0uaHRtbAorICogaHR0cDovL3d3dy5pbm5vdmF0aW9uLmNoL2phdmEvbnRsbS5odG1sCisgKi8KKworI2RlZmluZSBERUJVR19NRSAwCisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19XQUlUX0gKKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJjdXJsX250bG1fd2IuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZiBERUJVR19NRQorIyBkZWZpbmUgREVCVUdfT1VUKHgpIHgKKyNlbHNlCisjIGRlZmluZSBERUJVR19PVVQoeCkgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKKy8qIFBvcnRhYmxlICdzY2xvc2Vfbm9sb2cnIHVzZWQgb25seSBpbiBjaGlsZCBwcm9jZXNzIGluc3RlYWQgb2YgJ3NjbG9zZScKKyAgIHRvIGF2b2lkIGZvb2xpbmcgdGhlIHNvY2tldCBsZWFrIGRldGVjdG9yICovCisjaWYgZGVmaW5lZChIQVZFX0NMT1NFU09DS0VUKQorIyAgZGVmaW5lIHNjbG9zZV9ub2xvZyh4KSAgY2xvc2Vzb2NrZXQoKHgpKQorI2VsaWYgZGVmaW5lZChIQVZFX0NMT1NFU09DS0VUX0NBTUVMKQorIyAgZGVmaW5lIHNjbG9zZV9ub2xvZyh4KSAgQ2xvc2VTb2NrZXQoKHgpKQorI2Vsc2UKKyMgIGRlZmluZSBzY2xvc2Vfbm9sb2coeCkgIGNsb3NlKCh4KSkKKyNlbmRpZgorCit2b2lkIEN1cmxfbnRsbV93Yl9jbGVhbnVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaWYoY29ubi0+bnRsbV9hdXRoX2hscHJfc29ja2V0ICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgIHNjbG9zZShjb25uLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQpOworICAgIGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCA9IENVUkxfU09DS0VUX0JBRDsKKyAgfQorCisgIGlmKGNvbm4tPm50bG1fYXV0aF9obHByX3BpZCkgeworICAgIGludCBpOworICAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgcGlkX3QgcmV0ID0gd2FpdHBpZChjb25uLT5udGxtX2F1dGhfaGxwcl9waWQsIE5VTEwsIFdOT0hBTkcpOworICAgICAgaWYocmV0ID09IGNvbm4tPm50bG1fYXV0aF9obHByX3BpZCB8fCBlcnJubyA9PSBFQ0hJTEQpCisgICAgICAgIGJyZWFrOworICAgICAgc3dpdGNoKGkpIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAga2lsbChjb25uLT5udGxtX2F1dGhfaGxwcl9waWQsIFNJR1RFUk0pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMToKKyAgICAgICAgLyogR2l2ZSB0aGUgcHJvY2VzcyBhbm90aGVyIG1vbWVudCB0byBzaHV0IGRvd24gY2xlYW5seSBiZWZvcmUKKyAgICAgICAgICAgYnJpbmdpbmcgZG93biB0aGUgYXhlICovCisgICAgICAgIEN1cmxfd2FpdF9tcygxKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDI6CisgICAgICAgIGtpbGwoY29ubi0+bnRsbV9hdXRoX2hscHJfcGlkLCBTSUdLSUxMKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDM6CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBjb25uLT5udGxtX2F1dGhfaGxwcl9waWQgPSAwOworICB9CisKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5jaGFsbGVuZ2VfaGVhZGVyKTsKKyAgY29ubi0+Y2hhbGxlbmdlX2hlYWRlciA9IE5VTEw7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+cmVzcG9uc2VfaGVhZGVyKTsKKyAgY29ubi0+cmVzcG9uc2VfaGVhZGVyID0gTlVMTDsKK30KKworc3RhdGljIENVUkxjb2RlIG50bG1fd2JfaW5pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJwKQoreworICBjdXJsX3NvY2tldF90IHNvY2tmZHNbMl07CisgIHBpZF90IGNoaWxkX3BpZDsKKyAgY29uc3QgY2hhciAqdXNlcm5hbWU7CisgIGNoYXIgKnNsYXNoLCAqZG9tYWluID0gTlVMTDsKKyAgY29uc3QgY2hhciAqbnRsbV9hdXRoID0gTlVMTDsKKyAgY2hhciAqbnRsbV9hdXRoX2FsbG9jID0gTlVMTDsKKyAgaW50IGVycm9yOworCisgIC8qIFJldHVybiBpZiBjb21tdW5pY2F0aW9uIHdpdGggbnRsbV9hdXRoIGFscmVhZHkgc2V0IHVwICovCisgIGlmKGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCAhPSBDVVJMX1NPQ0tFVF9CQUQgfHwKKyAgICAgY29ubi0+bnRsbV9hdXRoX2hscHJfcGlkKQorICAgIHJldHVybiBDVVJMRV9PSzsKKworICB1c2VybmFtZSA9IHVzZXJwOworICBzbGFzaCA9IHN0cnBicmsodXNlcm5hbWUsICJcXC8iKTsKKyAgaWYoc2xhc2gpIHsKKyAgICBpZigoZG9tYWluID0gc3RyZHVwKHVzZXJuYW1lKSkgPT0gTlVMTCkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIHNsYXNoID0gZG9tYWluICsgKHNsYXNoIC0gdXNlcm5hbWUpOworICAgICpzbGFzaCA9ICdcMCc7CisgICAgdXNlcm5hbWUgPSB1c2VybmFtZSArIChzbGFzaCAtIGRvbWFpbikgKyAxOworICB9CisKKyAgLyogRm9yIHRlc3RpbmcgcHVycG9zZXMsIHdoZW4gREVCVUdCVUlMRCBpcyBkZWZpbmVkIGFuZCBlbnZpcm9ubWVudAorICAgICB2YXJpYWJsZSBDVVJMX05UTE1fV0JfRklMRSBpcyBzZXQgYSBmYWtlX250bG0gaXMgdXNlZCB0byBwZXJmb3JtCisgICAgIE5UTE0gY2hhbGxlbmdlL3Jlc3BvbnNlIHdoaWNoIG9ubHkgYWNjZXB0cyBjb21tYW5kcyBhbmQgb3V0cHV0CisgICAgIHN0cmluZ3MgcHJlLXdyaXR0ZW4gaW4gdGVzdCBjYXNlIGRlZmluaXRpb25zICovCisjaWZkZWYgREVCVUdCVUlMRAorICBudGxtX2F1dGhfYWxsb2MgPSBjdXJsX2dldGVudigiQ1VSTF9OVExNX1dCX0ZJTEUiKTsKKyAgaWYobnRsbV9hdXRoX2FsbG9jKQorICAgIG50bG1fYXV0aCA9IG50bG1fYXV0aF9hbGxvYzsKKyAgZWxzZQorI2VuZGlmCisgICAgbnRsbV9hdXRoID0gTlRMTV9XQl9GSUxFOworCisgIGlmKGFjY2VzcyhudGxtX2F1dGgsIFhfT0spICE9IDApIHsKKyAgICBlcnJvciA9IEVSUk5POworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJDb3VsZCBub3QgYWNjZXNzIG50bG1fYXV0aDogJXMgZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgICBudGxtX2F1dGgsIGVycm9yLCBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7CisgICAgZ290byBkb25lOworICB9CisKKyAgaWYoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2ZkcykpIHsKKyAgICBlcnJvciA9IEVSUk5POworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJDb3VsZCBub3Qgb3BlbiBzb2NrZXQgcGFpci4gZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgICBlcnJvciwgQ3VybF9zdHJlcnJvcihjb25uLCBlcnJvcikpOworICAgIGdvdG8gZG9uZTsKKyAgfQorCisgIGNoaWxkX3BpZCA9IGZvcmsoKTsKKyAgaWYoY2hpbGRfcGlkID09IC0xKSB7CisgICAgZXJyb3IgPSBFUlJOTzsKKyAgICBzY2xvc2Uoc29ja2Zkc1swXSk7CisgICAgc2Nsb3NlKHNvY2tmZHNbMV0pOworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJDb3VsZCBub3QgZm9yay4gZXJybm8gJWQ6ICVzIiwKKyAgICAgICAgICBlcnJvciwgQ3VybF9zdHJlcnJvcihjb25uLCBlcnJvcikpOworICAgIGdvdG8gZG9uZTsKKyAgfQorICBlbHNlIGlmKCFjaGlsZF9waWQpIHsKKyAgICAvKgorICAgICAqIGNoaWxkIHByb2Nlc3MKKyAgICAgKi8KKworICAgIC8qIERvbid0IHVzZSBzY2xvc2UgaW4gdGhlIGNoaWxkIHNpbmNlIGl0IGZvb2xzIHRoZSBzb2NrZXQgbGVhayBkZXRlY3RvciAqLworICAgIHNjbG9zZV9ub2xvZyhzb2NrZmRzWzBdKTsKKyAgICBpZihkdXAyKHNvY2tmZHNbMV0sIFNURElOX0ZJTEVOTykgPT0gLTEpIHsKKyAgICAgIGVycm9yID0gRVJSTk87CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiQ291bGQgbm90IHJlZGlyZWN0IGNoaWxkIHN0ZGluLiBlcnJubyAlZDogJXMiLAorICAgICAgICAgICAgZXJyb3IsIEN1cmxfc3RyZXJyb3IoY29ubiwgZXJyb3IpKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgaWYoZHVwMihzb2NrZmRzWzFdLCBTVERPVVRfRklMRU5PKSA9PSAtMSkgeworICAgICAgZXJyb3IgPSBFUlJOTzsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJDb3VsZCBub3QgcmVkaXJlY3QgY2hpbGQgc3Rkb3V0LiBlcnJubyAlZDogJXMiLAorICAgICAgICAgICAgZXJyb3IsIEN1cmxfc3RyZXJyb3IoY29ubiwgZXJyb3IpKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgaWYoZG9tYWluKQorICAgICAgZXhlY2wobnRsbV9hdXRoLCBudGxtX2F1dGgsCisgICAgICAgICAgICAiLS1oZWxwZXItcHJvdG9jb2wiLCAibnRsbXNzcC1jbGllbnQtMSIsCisgICAgICAgICAgICAiLS11c2UtY2FjaGVkLWNyZWRzIiwKKyAgICAgICAgICAgICItLXVzZXJuYW1lIiwgdXNlcm5hbWUsCisgICAgICAgICAgICAiLS1kb21haW4iLCBkb21haW4sCisgICAgICAgICAgICBOVUxMKTsKKyAgICBlbHNlCisgICAgICBleGVjbChudGxtX2F1dGgsIG50bG1fYXV0aCwKKyAgICAgICAgICAgICItLWhlbHBlci1wcm90b2NvbCIsICJudGxtc3NwLWNsaWVudC0xIiwKKyAgICAgICAgICAgICItLXVzZS1jYWNoZWQtY3JlZHMiLAorICAgICAgICAgICAgIi0tdXNlcm5hbWUiLCB1c2VybmFtZSwKKyAgICAgICAgICAgIE5VTEwpOworCisgICAgZXJyb3IgPSBFUlJOTzsKKyAgICBzY2xvc2Vfbm9sb2coc29ja2Zkc1sxXSk7CisgICAgZmFpbGYoY29ubi0+ZGF0YSwgIkNvdWxkIG5vdCBleGVjbCgpLiBlcnJubyAlZDogJXMiLAorICAgICAgICAgIGVycm9yLCBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIHNjbG9zZShzb2NrZmRzWzFdKTsKKyAgY29ubi0+bnRsbV9hdXRoX2hscHJfc29ja2V0ID0gc29ja2Zkc1swXTsKKyAgY29ubi0+bnRsbV9hdXRoX2hscHJfcGlkID0gY2hpbGRfcGlkOworICBDdXJsX3NhZmVmcmVlKGRvbWFpbik7CisgIEN1cmxfc2FmZWZyZWUobnRsbV9hdXRoX2FsbG9jKTsKKyAgcmV0dXJuIENVUkxFX09LOworCitkb25lOgorICBDdXJsX3NhZmVmcmVlKGRvbWFpbik7CisgIEN1cmxfc2FmZWZyZWUobnRsbV9hdXRoX2FsbG9jKTsKKyAgcmV0dXJuIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOworfQorCitzdGF0aWMgQ1VSTGNvZGUgbnRsbV93Yl9yZXNwb25zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnB1dCwgY3VybG50bG0gc3RhdGUpCit7CisgIHNzaXplX3Qgc2l6ZTsKKyAgY2hhciBidWZbMjAwXTsgLyogZW5vdWdoLCB0eXBlIDEsIDMgbWVzc2FnZSBsZW5ndGggaXMgbGVzcyB0aGVuIDIwMCAqLworICBjaGFyICp0bXBidWYgPSBidWY7CisgIHNpemVfdCBsZW5faW4gPSBzdHJsZW4oaW5wdXQpLCBsZW5fb3V0ID0gc2l6ZW9mKGJ1Zik7CisKKyAgd2hpbGUobGVuX2luID4gMCkgeworICAgIHNzaXplX3Qgd3JpdHRlbiA9IHN3cml0ZShjb25uLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQsIGlucHV0LCBsZW5faW4pOworICAgIGlmKHdyaXR0ZW4gPT0gLTEpIHsKKyAgICAgIC8qIEludGVycnVwdGVkIGJ5IGEgc2lnbmFsLCByZXRyeSBpdCAqLworICAgICAgaWYoZXJybm8gPT0gRUlOVFIpCisgICAgICAgIGNvbnRpbnVlOworICAgICAgLyogd3JpdGUgZmFpbGVkIGlmIG90aGVyIGVycm9ycyBoYXBwZW4gKi8KKyAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgaW5wdXQgKz0gd3JpdHRlbjsKKyAgICBsZW5faW4gLT0gd3JpdHRlbjsKKyAgfQorICAvKiBSZWFkIG9uZSBsaW5lICovCisgIHdoaWxlKGxlbl9vdXQgPiAwKSB7CisgICAgc2l6ZSA9IHNyZWFkKGNvbm4tPm50bG1fYXV0aF9obHByX3NvY2tldCwgdG1wYnVmLCBsZW5fb3V0KTsKKyAgICBpZihzaXplID09IC0xKSB7CisgICAgICBpZihlcnJubyA9PSBFSU5UUikKKyAgICAgICAgY29udGludWU7CisgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGVsc2UgaWYoc2l6ZSA9PSAwKQorICAgICAgZ290byBkb25lOworICAgIGVsc2UgaWYodG1wYnVmW3NpemUgLSAxXSA9PSAnXG4nKSB7CisgICAgICB0bXBidWZbc2l6ZSAtIDFdID0gJ1wwJzsKKyAgICAgIGdvdG8gd3JmaW5pc2g7CisgICAgfQorICAgIHRtcGJ1ZiArPSBzaXplOworICAgIGxlbl9vdXQgLT0gc2l6ZTsKKyAgfQorICBnb3RvIGRvbmU7Cit3cmZpbmlzaDoKKyAgLyogU2FtYmEvd2luYmluZCBpbnN0YWxsZWQgYnV0IG5vdCBjb25maWd1cmVkICovCisgIGlmKHN0YXRlID09IE5UTE1TVEFURV9UWVBFMSAmJgorICAgICBzaXplID09IDMgJiYKKyAgICAgYnVmWzBdID09ICdQJyAmJiBidWZbMV0gPT0gJ1cnKQorICAgIHJldHVybiBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRDsKKyAgLyogaW52YWxpZCByZXNwb25zZSAqLworICBpZihzaXplIDwgNCkKKyAgICBnb3RvIGRvbmU7CisgIGlmKHN0YXRlID09IE5UTE1TVEFURV9UWVBFMSAmJgorICAgICAoYnVmWzBdIT0nWScgfHwgYnVmWzFdIT0nUicgfHwgYnVmWzJdIT0nICcpKQorICAgIGdvdG8gZG9uZTsKKyAgaWYoc3RhdGUgPT0gTlRMTVNUQVRFX1RZUEUyICYmCisgICAgIChidWZbMF0hPSdLJyB8fCBidWZbMV0hPSdLJyB8fCBidWZbMl0hPScgJykgJiYKKyAgICAgKGJ1ZlswXSE9J0EnIHx8IGJ1ZlsxXSE9J0YnIHx8IGJ1ZlsyXSE9JyAnKSkKKyAgICBnb3RvIGRvbmU7CisKKyAgY29ubi0+cmVzcG9uc2VfaGVhZGVyID0gYXByaW50ZigiTlRMTSAlLipzIiwgc2l6ZSAtIDQsIGJ1ZiArIDMpOworICByZXR1cm4gQ1VSTEVfT0s7Citkb25lOgorICByZXR1cm4gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIGZvciBjcmVhdGluZyBudGxtIGhlYWRlciBvdXRwdXQgYnkgZGVsZWdhdGluZyBjaGFsbGVuZ2UvcmVzcG9uc2UKKyAqIHRvIFNhbWJhJ3Mgd2luYmluZCBkYWVtb24gaGVscGVyIG50bG1fYXV0aC4KKyAqLworQ1VSTGNvZGUgQ3VybF9vdXRwdXRfbnRsbV93YihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByb3h5KQoreworICAvKiBwb2ludCB0byB0aGUgYWRkcmVzcyBvZiB0aGUgcG9pbnRlciB0aGF0IGhvbGRzIHRoZSBzdHJpbmcgdG8gc2VuZCB0byB0aGUKKyAgICAgc2VydmVyLCB3aGljaCBpcyBmb3IgYSBwbGFpbiBob3N0IG9yIGZvciBhIEhUVFAgcHJveHkgKi8KKyAgY2hhciAqKmFsbG9jdXNlcnB3ZDsKKyAgLyogcG9pbnQgdG8gdGhlIG5hbWUgYW5kIHBhc3N3b3JkIGZvciB0aGlzICovCisgIGNvbnN0IGNoYXIgKnVzZXJwOworICAvKiBwb2ludCB0byB0aGUgY29ycmVjdCBzdHJ1Y3Qgd2l0aCB0aGlzICovCisgIHN0cnVjdCBudGxtZGF0YSAqbnRsbTsKKyAgc3RydWN0IGF1dGggKmF1dGhwOworCisgIENVUkxjb2RlIHJlcyA9IENVUkxFX09LOworICBjaGFyICppbnB1dDsKKworICBERUJVR0FTU0VSVChjb25uKTsKKyAgREVCVUdBU1NFUlQoY29ubi0+ZGF0YSk7CisKKyAgaWYocHJveHkpIHsKKyAgICBhbGxvY3VzZXJwd2QgPSAmY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOworICAgIHVzZXJwID0gY29ubi0+cHJveHl1c2VyOworICAgIG50bG0gPSAmY29ubi0+cHJveHludGxtOworICAgIGF1dGhwID0gJmNvbm4tPmRhdGEtPnN0YXRlLmF1dGhwcm94eTsKKyAgfQorICBlbHNlIHsKKyAgICBhbGxvY3VzZXJwd2QgPSAmY29ubi0+YWxsb2NwdHIudXNlcnB3ZDsKKyAgICB1c2VycCA9IGNvbm4tPnVzZXI7CisgICAgbnRsbSA9ICZjb25uLT5udGxtOworICAgIGF1dGhwID0gJmNvbm4tPmRhdGEtPnN0YXRlLmF1dGhob3N0OworICB9CisgIGF1dGhwLT5kb25lID0gRkFMU0U7CisKKyAgLyogbm90IHNldCBtZWFucyBlbXB0eSAqLworICBpZighdXNlcnApCisgICAgdXNlcnA9IiI7CisKKyAgc3dpdGNoKG50bG0tPnN0YXRlKSB7CisgIGNhc2UgTlRMTVNUQVRFX1RZUEUxOgorICBkZWZhdWx0OgorICAgIC8qIFVzZSBTYW1iYSdzICd3aW5iaW5kJyBkYWVtb24gdG8gc3VwcG9ydCBOVExNIGF1dGhlbnRpY2F0aW9uLAorICAgICAqIGJ5IGRlbGVnYXRpbmcgdGhlIE5UTE0gY2hhbGxlbmdlL3Jlc3BvbnNlIHByb3RvY2FsIHRvIGEgaGVscGVyCisgICAgICogaW4gbnRsbV9hdXRoLgorICAgICAqIGh0dHA6Ly9kZXZlbC5zcXVpZC1jYWNoZS5vcmcvbnRsbS9zcXVpZF9oZWxwZXJfcHJvdG9jb2wuaHRtbAorICAgICAqIGh0dHA6Ly93d3cuc2FtYmEub3JnL3NhbWJhL2RvY3MvbWFuL21hbnBhZ2VzLTMvd2luYmluZGQuOC5odG1sCisgICAgICogaHR0cDovL3d3dy5zYW1iYS5vcmcvc2FtYmEvZG9jcy9tYW4vbWFucGFnZXMtMy9udGxtX2F1dGguMS5odG1sCisgICAgICogUHJlcHJvY2Vzc29yIHN5bWJvbCAnTlRMTV9XQl9FTkFCTEVEJyBpcyBkZWZpbmVkIHdoZW4gdGhpcworICAgICAqIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgJ05UTE1fV0JfRklMRScgc3ltYm9sIGhvbGRzIGFic29sdXRlCisgICAgICogZmlsZW5hbWUgb2YgbnRsbV9hdXRoIGhlbHBlci4KKyAgICAgKiBJZiBOVExNIGF1dGhlbnRpY2F0aW9uIHVzaW5nIHdpbmJpbmQgZmFpbHMsIGdvIGJhY2sgdG8gb3JpZ2luYWwKKyAgICAgKiByZXF1ZXN0IGhhbmRsaW5nIHByb2Nlc3MuCisgICAgICovCisgICAgLyogQ3JlYXRlIGNvbW11bmljYXRpb24gd2l0aCBudGxtX2F1dGggKi8KKyAgICByZXMgPSBudGxtX3diX2luaXQoY29ubiwgdXNlcnApOworICAgIGlmKHJlcykKKyAgICAgIHJldHVybiByZXM7CisgICAgcmVzID0gbnRsbV93Yl9yZXNwb25zZShjb25uLCAiWVJcbiIsIG50bG0tPnN0YXRlKTsKKyAgICBpZihyZXMpCisgICAgICByZXR1cm4gcmVzOworCisgICAgQ3VybF9zYWZlZnJlZSgqYWxsb2N1c2VycHdkKTsKKyAgICAqYWxsb2N1c2VycHdkID0gYXByaW50ZigiJXNBdXRob3JpemF0aW9uOiAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5ID8gIlByb3h5LSIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5yZXNwb25zZV9oZWFkZXIpOworICAgIERFQlVHX09VVChmcHJpbnRmKHN0ZGVyciwgIioqKiogSGVhZGVyICVzXG4gIiwgKmFsbG9jdXNlcnB3ZCkpOworICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+cmVzcG9uc2VfaGVhZGVyKTsKKyAgICBjb25uLT5yZXNwb25zZV9oZWFkZXIgPSBOVUxMOworICAgIGJyZWFrOworICBjYXNlIE5UTE1TVEFURV9UWVBFMjoKKyAgICBpbnB1dCA9IGFwcmludGYoIlRUICVzIiwgY29ubi0+Y2hhbGxlbmdlX2hlYWRlcik7CisgICAgaWYoIWlucHV0KQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgcmVzID0gbnRsbV93Yl9yZXNwb25zZShjb25uLCBpbnB1dCwgbnRsbS0+c3RhdGUpOworICAgIGZyZWUoaW5wdXQpOworICAgIGlucHV0ID0gTlVMTDsKKyAgICBpZihyZXMpCisgICAgICByZXR1cm4gcmVzOworCisgICAgQ3VybF9zYWZlZnJlZSgqYWxsb2N1c2VycHdkKTsKKyAgICAqYWxsb2N1c2VycHdkID0gYXByaW50ZigiJXNBdXRob3JpemF0aW9uOiAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5ID8gIlByb3h5LSIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5yZXNwb25zZV9oZWFkZXIpOworICAgIERFQlVHX09VVChmcHJpbnRmKHN0ZGVyciwgIioqKiogJXNcbiAiLCAqYWxsb2N1c2VycHdkKSk7CisgICAgbnRsbS0+c3RhdGUgPSBOVExNU1RBVEVfVFlQRTM7IC8qIHdlIHNlbnQgYSB0eXBlLTMgKi8KKyAgICBhdXRocC0+ZG9uZSA9IFRSVUU7CisgICAgQ3VybF9udGxtX3diX2NsZWFudXAoY29ubik7CisgICAgYnJlYWs7CisgIGNhc2UgTlRMTVNUQVRFX1RZUEUzOgorICAgIC8qIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBhdXRoZW50aWNhdGVkLAorICAgICAqIGRvbid0IHNlbmQgYSBoZWFkZXIgaW4gZnV0dXJlIHJlcXVlc3RzICovCisgICAgaWYoKmFsbG9jdXNlcnB3ZCkgeworICAgICAgZnJlZSgqYWxsb2N1c2VycHdkKTsKKyAgICAgICphbGxvY3VzZXJwd2Q9TlVMTDsKKyAgICB9CisgICAgYXV0aHAtPmRvbmUgPSBUUlVFOworICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisjZW5kaWYgLyogVVNFX05UTE0gJiYgTlRMTV9XQl9FTkFCTEVEICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybF9udGxtX3diLmggYi9jdXJsLTcuMjUuMC9saWIvY3VybF9udGxtX3diLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNlYWZmZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX250bG1fd2IuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX05UTE1fV0JfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9OVExNX1dCX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmIGRlZmluZWQoVVNFX05UTE0pICYmIGRlZmluZWQoTlRMTV9XQl9FTkFCTEVEKQorCisvKiB0aGlzIGlzIGZvciBjcmVhdGluZyBudGxtIGhlYWRlciBvdXRwdXQgYnkgZGVsZWdhdGluZyBjaGFsbGVuZ2UvcmVzcG9uc2UKKyAgIHRvIFNhbWJhJ3Mgd2luYmluZCBkYWVtb24gaGVscGVyIG50bG1fYXV0aCAqLworQ1VSTGNvZGUgQ3VybF9vdXRwdXRfbnRsbV93YihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgcHJveHkpOworCit2b2lkIEN1cmxfbnRsbV93Yl9jbGVhbnVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CisKKyNlbmRpZiAvKiBVU0VfTlRMTSAmJiBOVExNX1dCX0VOQUJMRUQgKi8KKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX05UTE1fV0JfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2N1cmxfcmFuZC5jIGIvY3VybC03LjI1LjAvbGliL2N1cmxfcmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0N2I3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY3VybF9yYW5kLmMKQEAgLTAsMCArMSw2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpbmNsdWRlICJjdXJsX3JhbmQuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKiBQcml2YXRlIHBzZXVkby1yYW5kb20gbnVtYmVyIHNlZWQuIFVuc2lnbmVkIGludGVnZXIgPj0gMzJiaXQuIFRocmVhZHMKKyAgIG11dHVhbCBleGNsdXNpb24gaXMgbm90IGltcGxlbWVudGVkIHRvIGFjZXNzIGl0IHNpbmNlIHdlIGRvIG5vdCByZXF1aXJlCisgICBoaWdoIHF1YWxpdHkgcmFuZG9tIG51bWJlcnMgKG9ubHkgdXNlZCBpbiBmb3JtIGJvdWRhcnkgZ2VuZXJhdGlvbikuICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmFuZHNlZWQ7CisKKy8qIFBzZXVkby1yYW5kb20gbnVtYmVyIHN1cHBvcnQuICovCisKK3Vuc2lnbmVkIGludCBDdXJsX3JhbmQodm9pZCkKK3sKKyAgdW5zaWduZWQgaW50IHI7CisgIC8qIFJldHVybiBhbiB1bnNpZ25lZCAzMi1iaXQgcHNldWRvLXJhbmRvbSBudW1iZXIuICovCisgIHIgPSByYW5kc2VlZCA9IHJhbmRzZWVkICogMTEwMzUxNTI0NSArIDEyMzQ1OworICByZXR1cm4gKHIgPDwgMTYpIHwgKChyID4+IDE2KSAmIDB4RkZGRik7Cit9CisKK3ZvaWQgQ3VybF9zcmFuZCh2b2lkKQoreworICAvKiBSYW5kb21pemUgcHNldWRvLXJhbmRvbSBudW1iZXIgc2VxdWVuY2UuICovCisKKyAgcmFuZHNlZWQgPSAodW5zaWduZWQgaW50KSB0aW1lKE5VTEwpOworICBDdXJsX3JhbmQoKTsKKyAgQ3VybF9yYW5kKCk7CisgIEN1cmxfcmFuZCgpOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybF9yYW5kLmggYi9jdXJsLTcuMjUuMC9saWIvY3VybF9yYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjZmI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX3JhbmQuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1JBTkRfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9SQU5EX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIEN1cmxfc3JhbmQodm9pZCk7CisKK3Vuc2lnbmVkIGludCBDdXJsX3JhbmQodm9pZCk7CisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9SQU5EX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jdXJsX3J0bXAuYyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX3J0bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjViOGY5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2N1cmxfcnRtcC5jCkBAIC0wLDAgKzEsMzA5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEhvd2FyZCBDaHUsIDxoeWNAaGlnaGxhbmRzdW4uY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfTElCUlRNUAorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgIm5vbmJsb2NrLmgiIC8qIGZvciBjdXJseF9ub25ibG9jayAqLworI2luY2x1ZGUgInByb2dyZXNzLmgiIC8qIGZvciBDdXJsX3BncnNTZXRVcGxvYWRTaXplICovCisjaW5jbHVkZSAidHJhbnNmZXIuaCIKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlIDxsaWJydG1wL3J0bXAuaD4KKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIHNldHNvY2tvcHQoYSxiLGMsZCxlKSAoc2V0c29ja29wdCkoYSxiLGMsKGNvbnN0IGNoYXIgKilkLChpbnQpZSkKKyNkZWZpbmUgU0VUX1JDVlRJTUVPKHR2LHMpICAgaW50IHR2ID0gcyoxMDAwCisjZWxzZQorI2RlZmluZSBTRVRfUkNWVElNRU8odHYscykgICBzdHJ1Y3QgdGltZXZhbCB0diA9IHtzLDB9CisjZW5kaWYKKworI2RlZmluZSBERUZfQlVGVElNRSAgICAoMio2MCo2MCoxMDAwKSAgICAvKiAyIGhvdXJzICovCisKK3N0YXRpYyBDVVJMY29kZSBydG1wX3NldHVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CitzdGF0aWMgQ1VSTGNvZGUgcnRtcF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIHJ0bXBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitzdGF0aWMgQ1VSTGNvZGUgcnRtcF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgcnRtcF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKKworc3RhdGljIEN1cmxfcmVjdiBydG1wX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIHJ0bXBfc2VuZDsKKworLyoKKyAqIFJUTVAgcHJvdG9jb2wgaGFuZGxlci5oLCBiYXNlZCBvbiBodHRwOi8vcnRtcGR1bXAubXBsYXllcmhxLmh1CisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfcnRtcCA9IHsKKyAgIlJUTVAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgcnRtcF9zZXR1cCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIHJ0bXBfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgcnRtcF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBydG1wX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHJ0bXBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBQT1JUX1JUTVAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1JUTVAsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzKi8KK307CisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3J0bXB0ID0geworICAiUlRNUFQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBydG1wX3NldHVwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgcnRtcF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBydG1wX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHJ0bXBfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgcnRtcF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFBPUlRfUlRNUFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fUlRNUFQsICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MqLworfTsKKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfcnRtcGUgPSB7CisgICJSVE1QRSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIHJ0bXBfc2V0dXAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBydG1wX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIHJ0bXBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgcnRtcF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBydG1wX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9SVE1QLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19SVE1QRSwgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyovCit9OworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9ydG1wdGUgPSB7CisgICJSVE1QVEUiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIHJ0bXBfc2V0dXAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBydG1wX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIHJ0bXBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgcnRtcF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBydG1wX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9SVE1QVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19SVE1QVEUsICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyovCit9OworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9ydG1wcyA9IHsKKyAgIlJUTVBTIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgcnRtcF9zZXR1cCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIHJ0bXBfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgcnRtcF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBydG1wX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHJ0bXBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBQT1JUX1JUTVBTLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1JUTVBTLCAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzKi8KK307CisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3J0bXB0cyA9IHsKKyAgIlJUTVBUUyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgcnRtcF9zZXR1cCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIHJ0bXBfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgcnRtcF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBydG1wX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHJ0bXBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBQT1JUX1JUTVBTLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1JUTVBUUywgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzKi8KK307CisKK3N0YXRpYyBDVVJMY29kZSBydG1wX3NldHVwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgUlRNUCAqciA9IFJUTVBfQWxsb2MoKTsKKworICBpZighcikKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICBSVE1QX0luaXQocik7CisgIFJUTVBfU2V0QnVmZmVyTVMociwgREVGX0JVRlRJTUUpOworICBpZighUlRNUF9TZXR1cFVSTChyLCBjb25uLT5kYXRhLT5jaGFuZ2UudXJsKSkgeworICAgIFJUTVBfRnJlZShyKTsKKyAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKKyAgfQorICBjb25uLT5wcm90by5nZW5lcmljID0gcjsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgcnRtcF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgUlRNUCAqciA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgIFNFVF9SQ1ZUSU1FTyh0diwxMCk7CisKKyAgci0+bV9zYi5zYl9zb2NrZXQgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKworICAvKiBXZSBoYXZlIHRvIGtub3cgaWYgaXQncyBhIHdyaXRlIGJlZm9yZSB3ZSBzZW5kIHRoZQorICAgKiBjb25uZWN0IHJlcXVlc3QgcGFja2V0CisgICAqLworICBpZihjb25uLT5kYXRhLT5zZXQudXBsb2FkKQorICAgIHItPkxpbmsucHJvdG9jb2wgfD0gUlRNUF9GRUFUVVJFX1dSSVRFOworCisgIC8qIEZvciBwbGFpbiBzdHJlYW1zLCB1c2UgdGhlIGJ1ZmZlciB0b2dnbGUgdHJpY2sgdG8ga2VlcCBkYXRhIGZsb3dpbmcgKi8KKyAgaWYoIShyLT5MaW5rLmxGbGFncyAmIFJUTVBfTEZfTElWRSkgJiYKKyAgICAgIShyLT5MaW5rLnByb3RvY29sICYgUlRNUF9GRUFUVVJFX0hUVFApKQorICAgIHItPkxpbmsubEZsYWdzIHw9IFJUTVBfTEZfQlVGWDsKKworICBjdXJseF9ub25ibG9jayhyLT5tX3NiLnNiX3NvY2tldCwgRkFMU0UpOworICBzZXRzb2Nrb3B0KHItPm1fc2Iuc2Jfc29ja2V0LCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywKKyAgICAgICAgICAgICAoY2hhciAqKSZ0diwgc2l6ZW9mKHR2KSk7CisKKyAgaWYoIVJUTVBfQ29ubmVjdDEociwgTlVMTCkpCisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworCisgIC8qIENsaWVudHMgbXVzdCBzZW5kIGEgcGVyaW9kaWMgQnl0ZXNSZWNlaXZlZCByZXBvcnQgdG8gdGhlIHNlcnZlciAqLworICByLT5tX2JTZW5kQ291bnRlciA9IHRydWU7CisKKyAgKmRvbmUgPSBUUlVFOworICBjb25uLT5yZWN2W0ZJUlNUU09DS0VUXSA9IHJ0bXBfcmVjdjsKKyAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSBydG1wX3NlbmQ7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIHJ0bXBfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKworICBpZighUlRNUF9Db25uZWN0U3RyZWFtKHIsIDApKQorICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKworICBpZihjb25uLT5kYXRhLT5zZXQudXBsb2FkKSB7CisgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShjb25uLT5kYXRhLCBjb25uLT5kYXRhLT5zZXQuaW5maWxlc2l6ZSk7CisgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCBGSVJTVFNPQ0tFVCwgTlVMTCk7CisgIH0KKyAgZWxzZQorICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOworICAqZG9uZSA9IFRSVUU7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIHJ0bXBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCit7CisgICh2b2lkKWNvbm47IC8qIHVudXNlZCAqLworICAodm9pZClzdGF0dXM7IC8qIHVudXNlZCAqLworICAodm9pZClwcmVtYXR1cmU7IC8qIHVudXNlZCAqLworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIHJ0bXBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uKQoreworICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgKHZvaWQpZGVhZF9jb25uZWN0aW9uOworICBpZihyKSB7CisgICAgY29ubi0+cHJvdG8uZ2VuZXJpYyA9IE5VTEw7CisgICAgUlRNUF9DbG9zZShyKTsKKyAgICBSVE1QX0ZyZWUocik7CisgIH0KKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgc3NpemVfdCBydG1wX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgUlRNUCAqciA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgIHNzaXplX3QgbnJlYWQ7CisKKyAgKHZvaWQpc29ja2luZGV4OyAvKiB1bnVzZWQgKi8KKworICBucmVhZCA9IFJUTVBfUmVhZChyLCBidWYsIGxlbik7CisgIGlmKG5yZWFkIDwgMCkgeworICAgIGlmKHItPm1fcmVhZC5zdGF0dXMgPT0gUlRNUF9SRUFEX0NPTVBMRVRFIHx8CisgICAgICAgIHItPm1fcmVhZC5zdGF0dXMgPT0gUlRNUF9SRUFEX0VPRikgeworICAgICAgY29ubi0+ZGF0YS0+cmVxLnNpemUgPSBjb25uLT5kYXRhLT5yZXEuYnl0ZWNvdW50OworICAgICAgbnJlYWQgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgICAqZXJyID0gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgfQorICByZXR1cm4gbnJlYWQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJ0bXBfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBSVE1QICpyID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgc3NpemVfdCBudW07CisKKyAgKHZvaWQpc29ja2luZGV4OyAvKiB1bnVzZWQgKi8KKworICBudW0gPSBSVE1QX1dyaXRlKHIsIChjaGFyICopYnVmLCBsZW4pOworICBpZihudW0gPCAwKQorICAgICplcnIgPSBDVVJMRV9TRU5EX0VSUk9SOworCisgIHJldHVybiBudW07Cit9CisjZW5kaWYgIC8qIFVTRV9MSUJSVE1QICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybF9ydG1wLmggYi9jdXJsLTcuMjUuMC9saWIvY3VybF9ydG1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5ZTllNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX3J0bXAuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1JUTVBfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9SVE1QX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgSG93YXJkIENodSwgPGh5Y0BoaWdobGFuZHN1bi5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIFVTRV9MSUJSVE1QCitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfcnRtcDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9ydG1wdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9ydG1wZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9ydG1wdGU7CitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfcnRtcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfcnRtcHRzOworI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9SVE1QX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jdXJsX3NzcGkuYyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX3NzcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTg1ZGJjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2N1cmxfc3NwaS5jCkBAIC0wLDAgKzEsMTIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfV0lORE9XU19TU1BJCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2luY2x1ZGUgImN1cmxfc3NwaS5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKworLyogV2UgdXNlIG91ciBvd24gdHlwZWRlZiBoZXJlIHNpbmNlIHNvbWUgaGVhZGVycyBtaWdodCBsYWNrIHRoZXNlICovCit0eXBlZGVmIFBTZWN1cml0eUZ1bmN0aW9uVGFibGVBIChBUElFTlRSWSAqSU5JVFNFQ1VSSVRZSU5URVJGQUNFX0ZOX0EpKFZPSUQpOworCisvKiBIYW5kbGUgb2Ygc2VjdXJpdHkuZGxsIG9yIHNlY3VyMzIuZGxsLCBkZXBlbmRpbmcgb24gV2luZG93cyB2ZXJzaW9uICovCitITU9EVUxFIHNfaFNlY0RsbCA9IE5VTEw7CisKKy8qIFBvaW50ZXIgdG8gU1NQSSBkaXNwYXRjaCB0YWJsZSAqLworUFNlY3VyaXR5RnVuY3Rpb25UYWJsZUEgc19wU2VjRm4gPSBOVUxMOworCisKKy8qCisgKiBDdXJsX3NzcGlfZ2xvYmFsX2luaXQoKQorICoKKyAqIFRoaXMgaXMgdXNlZCB0byBsb2FkIHRoZSBTZWN1cml0eSBTZXJ2aWNlIFByb3ZpZGVyIEludGVyZmFjZSAoU1NQSSkKKyAqIGR5bmFtaWMgbGluayBsaWJyYXJ5IHBvcnRhYmx5IGFjcm9zcyBhbGwgV2luZG93cyB2ZXJzaW9ucywgd2l0aG91dAorICogdGhlIG5lZWQgdG8gZGlyZWN0bHkgbGluayBsaWJjdXJsLCBub3IgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIGl0LCBhdAorICogYnVpbGQgdGltZS4KKyAqCisgKiBPbmNlIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gZXhlY3V0ZWQsIFdpbmRvd3MgU1NQSSBmdW5jdGlvbnMgY2FuIGJlCisgKiBjYWxsZWQgdGhyb3VnaCB0aGUgU2VjdXJpdHkgU2VydmljZSBQcm92aWRlciBJbnRlcmZhY2UgZGlzcGF0Y2ggdGFibGUuCisgKi8KKworQ1VSTGNvZGUKK0N1cmxfc3NwaV9nbG9iYWxfaW5pdCh2b2lkKQoreworICBPU1ZFUlNJT05JTkZPIG9zdmVyOworICBJTklUU0VDVVJJVFlJTlRFUkZBQ0VfRk5fQSBwSW5pdFNlY3VyaXR5SW50ZXJmYWNlOworCisgIC8qIElmIHNlY3VyaXR5IGludGVyZmFjZSBpcyBub3QgeWV0IGluaXRpYWxpemVkIHRyeSB0byBkbyB0aGlzICovCisgIGlmKHNfaFNlY0RsbCA9PSBOVUxMKSB7CisKKyAgICAvKiBGaW5kIG91dCBXaW5kb3dzIHZlcnNpb24gKi8KKyAgICBtZW1zZXQoJm9zdmVyLCAwLCBzaXplb2Yob3N2ZXIpKTsKKyAgICBvc3Zlci5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKG9zdmVyKTsKKyAgICBpZighIEdldFZlcnNpb25FeCgmb3N2ZXIpKQorICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworCisgICAgLyogU2VjdXJpdHkgU2VydmljZSBQcm92aWRlciBJbnRlcmZhY2UgKFNTUEkpIGZ1bmN0aW9ucyBhcmUgbG9jYXRlZCBpbgorICAgICAqIHNlY3VyaXR5LmRsbCBvbiBXaW5OVCA0LjAgYW5kIGluIHNlY3VyMzIuZGxsIG9uIFdpbjl4LiBXaW4ySyBhbmQgWFAKKyAgICAgKiBoYXZlIGJvdGggdGhlc2UgRExMcyAoc2VjdXJpdHkuZGxsIGZvcndhcmRzIGNhbGxzIHRvIHNlY3VyMzIuZGxsKSAqLworCisgICAgLyogTG9hZCBTU1BJIGRsbCBpbnRvIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MgKi8KKyAgICBpZihvc3Zlci5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UCisgICAgICAmJiBvc3Zlci5kd01ham9yVmVyc2lvbiA9PSA0KQorICAgICAgc19oU2VjRGxsID0gTG9hZExpYnJhcnkoInNlY3VyaXR5LmRsbCIpOworICAgIGVsc2UKKyAgICAgIHNfaFNlY0RsbCA9IExvYWRMaWJyYXJ5KCJzZWN1cjMyLmRsbCIpOworICAgIGlmKCEgc19oU2VjRGxsKQorICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworCisgICAgLyogR2V0IGFkZHJlc3Mgb2YgdGhlIEluaXRTZWN1cml0eUludGVyZmFjZUEgZnVuY3Rpb24gZnJvbSB0aGUgU1NQSSBkbGwgKi8KKyAgICBwSW5pdFNlY3VyaXR5SW50ZXJmYWNlID0gKElOSVRTRUNVUklUWUlOVEVSRkFDRV9GTl9BKQorICAgICAgR2V0UHJvY0FkZHJlc3Moc19oU2VjRGxsLCAiSW5pdFNlY3VyaXR5SW50ZXJmYWNlQSIpOworICAgIGlmKCEgcEluaXRTZWN1cml0eUludGVyZmFjZSkKKyAgICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKworICAgIC8qIEdldCBwb2ludGVyIHRvIFNlY3VyaXR5IFNlcnZpY2UgUHJvdmlkZXIgSW50ZXJmYWNlIGRpc3BhdGNoIHRhYmxlICovCisgICAgc19wU2VjRm4gPSBwSW5pdFNlY3VyaXR5SW50ZXJmYWNlKCk7CisgICAgaWYoISBzX3BTZWNGbikKKyAgICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworCisvKgorICogQ3VybF9zc3BpX2dsb2JhbF9jbGVhbnVwKCkKKyAqCisgKiBUaGlzIGRlaW5pdGlhbGl6ZXMgdGhlIFNlY3VyaXR5IFNlcnZpY2UgUHJvdmlkZXIgSW50ZXJmYWNlIGZyb20gbGliY3VybC4KKyAqLworCit2b2lkCitDdXJsX3NzcGlfZ2xvYmFsX2NsZWFudXAodm9pZCkKK3sKKyAgaWYoc19oU2VjRGxsKSB7CisgICAgRnJlZUxpYnJhcnkoc19oU2VjRGxsKTsKKyAgICBzX2hTZWNEbGwgPSBOVUxMOworICAgIHNfcFNlY0ZuID0gTlVMTDsKKyAgfQorfQorCisjZW5kaWYgLyogVVNFX1dJTkRPV1NfU1NQSSAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2N1cmxfc3NwaS5oIGIvY3VybC03LjI1LjAvbGliL2N1cmxfc3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZTRmMzYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY3VybF9zc3BpLmgKQEAgLTAsMCArMSw3MyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9TU1BJX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfU1NQSV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfV0lORE9XU19TU1BJCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworLyoKKyAqIFdoZW4gaW5jbHVkaW5nIHRoZSBmb2xsb3dpbmcgdGhyZWUgaGVhZGVycywgaXQgaXMgbWFuZGF0b3J5IHRvIGRlZmluZSBlaXRoZXIKKyAqIFNFQ1VSSVRZX1dJTjMyIG9yIFNFQ1VSSVRZX0tFUk5FTCwgaW5kaWNhdGluZyB3aG8gaXMgY29tcGlsaW5nIHRoZSBjb2RlLgorICovCisKKyN1bmRlZiBTRUNVUklUWV9XSU4zMgorI3VuZGVmIFNFQ1VSSVRZX0tFUk5FTAorI2RlZmluZSBTRUNVUklUWV9XSU4zMiAxCisjaW5jbHVkZSA8c2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxzc3BpLmg+CisjaW5jbHVkZSA8cnBjLmg+CisKKy8qIFByb3ZpZGUgc29tZSBkZWZpbml0aW9ucyBtaXNzaW5nIGluIE1pbkdXJ3MgaGVhZGVycyAqLworCisjaWZuZGVmIFNFQ19JX0NPTlRFWFRfRVhQSVJFRAorIyBkZWZpbmUgU0VDX0lfQ09OVEVYVF9FWFBJUkVEICgoSFJFU1VMVCkweDAwMDkwMzE3TCkKKyNlbmRpZgorI2lmbmRlZiBTRUNfRV9CVUZGRVJfVE9PX1NNQUxMCisjIGRlZmluZSBTRUNfRV9CVUZGRVJfVE9PX1NNQUxMICgoSFJFU1VMVCkweDgwMDkwMzIxTCkKKyNlbmRpZgorI2lmbmRlZiBTRUNfRV9DT05URVhUX0VYUElSRUQKKyMgZGVmaW5lIFNFQ19FX0NPTlRFWFRfRVhQSVJFRCAoKEhSRVNVTFQpMHg4MDA5MDMxN0wpCisjZW5kaWYKKyNpZm5kZWYgU0VDX0VfQ1JZUFRPX1NZU1RFTV9JTlZBTElECisjIGRlZmluZSBTRUNfRV9DUllQVE9fU1lTVEVNX0lOVkFMSUQgKChIUkVTVUxUKTB4ODAwOTAzMzdMKQorI2VuZGlmCisjaWZuZGVmIFNFQ19FX01FU1NBR0VfQUxURVJFRAorIyBkZWZpbmUgU0VDX0VfTUVTU0FHRV9BTFRFUkVEICgoSFJFU1VMVCkweDgwMDkwMzBGTCkKKyNlbmRpZgorI2lmbmRlZiBTRUNfRV9PVVRfT0ZfU0VRVUVOQ0UKKyMgZGVmaW5lIFNFQ19FX09VVF9PRl9TRVFVRU5DRSAoKEhSRVNVTFQpMHg4MDA5MDMxMEwpCisjZW5kaWYKKworQ1VSTGNvZGUgQ3VybF9zc3BpX2dsb2JhbF9pbml0KHZvaWQpOwordm9pZCBDdXJsX3NzcGlfZ2xvYmFsX2NsZWFudXAodm9pZCk7CisKKy8qIEZvcndhcmQtZGVjbGFyYXRpb24gb2YgZ2xvYmFsIHZhcmlhYmxlcyBkZWZpbmVkIGluIGN1cmxfc3NwaS5jICovCisKK2V4dGVybiBITU9EVUxFIHNfaFNlY0RsbDsKK2V4dGVybiBQU2VjdXJpdHlGdW5jdGlvblRhYmxlQSBzX3BTZWNGbjsKKworI2VuZGlmIC8qIFVTRV9XSU5ET1dTX1NTUEkgKi8KKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9TU1BJX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jdXJsX3RocmVhZHMuYyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX3RocmVhZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTFjY2M4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2N1cmxfdGhyZWFkcy5jCkBAIC0wLDAgKzEsMTI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKQorIyAgaWZkZWYgSEFWRV9QVEhSRUFEX0gKKyMgICAgaW5jbHVkZSA8cHRocmVhZC5oPgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpCisjICBpZmRlZiBIQVZFX1BST0NFU1NfSAorIyAgICBpbmNsdWRlIDxwcm9jZXNzLmg+CisjICBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlICJjdXJsX3RocmVhZHMuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjaWYgZGVmaW5lZChVU0VfVEhSRUFEU19QT1NJWCkKKworc3RydWN0IGN1cmxfYWN0dWFsX2NhbGwgeworICB1bnNpZ25lZCBpbnQgKCpmdW5jKSh2b2lkICopOworICB2b2lkICphcmc7Cit9OworCitzdGF0aWMgdm9pZCAqY3VybF90aHJlYWRfY3JlYXRlX3RodW5rKHZvaWQgKmFyZykKK3sKKyAgc3RydWN0IGN1cmxfYWN0dWFsX2NhbGwgKiBhYyA9IGFyZzsKKyAgdW5zaWduZWQgaW50ICgqZnVuYykodm9pZCAqKSA9IGFjLT5mdW5jOworICB2b2lkICpyZWFsX2FyZyA9IGFjLT5hcmc7CisKKyAgZnJlZShhYyk7CisKKyAgKCpmdW5jKShyZWFsX2FyZyk7CisKKyAgcmV0dXJuIDA7Cit9CisKK2N1cmxfdGhyZWFkX3QgQ3VybF90aHJlYWRfY3JlYXRlKHVuc2lnbmVkIGludCAoKmZ1bmMpICh2b2lkKiksIHZvaWQgKmFyZykKK3sKKyAgY3VybF90aHJlYWRfdCB0OworICBzdHJ1Y3QgY3VybF9hY3R1YWxfY2FsbCAqYWMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjdXJsX2FjdHVhbF9jYWxsKSk7CisgIGlmKCFhYykKKyAgICByZXR1cm4gY3VybF90aHJlYWRfdF9udWxsOworCisgIGFjLT5mdW5jID0gZnVuYzsKKyAgYWMtPmFyZyA9IGFyZzsKKworICBpZihwdGhyZWFkX2NyZWF0ZSgmdCwgTlVMTCwgY3VybF90aHJlYWRfY3JlYXRlX3RodW5rLCBhYykgIT0gMCkgeworICAgIGZyZWUoYWMpOworICAgIHJldHVybiBjdXJsX3RocmVhZF90X251bGw7CisgIH0KKworICByZXR1cm4gdDsKK30KKwordm9pZCBDdXJsX3RocmVhZF9kZXN0cm95KGN1cmxfdGhyZWFkX3QgaG5kKQoreworICBpZihobmQgIT0gY3VybF90aHJlYWRfdF9udWxsKQorICAgIHB0aHJlYWRfZGV0YWNoKGhuZCk7Cit9CisKK2ludCBDdXJsX3RocmVhZF9qb2luKGN1cmxfdGhyZWFkX3QgKmhuZCkKK3sKKyAgaW50IHJldCA9IChwdGhyZWFkX2pvaW4oKmhuZCwgTlVMTCkgPT0gMCk7CisKKyAgKmhuZCA9IGN1cmxfdGhyZWFkX3RfbnVsbDsKKworICByZXR1cm4gcmV0OworfQorCisjZWxpZiBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKQorCitjdXJsX3RocmVhZF90IEN1cmxfdGhyZWFkX2NyZWF0ZSh1bnNpZ25lZCBpbnQgKENVUkxfU1REQ0FMTCAqZnVuYykgKHZvaWQqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykKK3sKKyNpZmRlZiBfV0lOMzJfV0NFCisgIHJldHVybiBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgZnVuYywgYXJnLCAwLCBOVUxMKTsKKyNlbHNlCisgIGN1cmxfdGhyZWFkX3QgdDsKKyAgdCA9IChjdXJsX3RocmVhZF90KV9iZWdpbnRocmVhZGV4KE5VTEwsIDAsIGZ1bmMsIGFyZywgMCwgTlVMTCk7CisgIGlmKCh0ID09IDApIHx8ICh0ID09IChjdXJsX3RocmVhZF90KS0xTCkpCisgICAgcmV0dXJuIGN1cmxfdGhyZWFkX3RfbnVsbDsKKyAgcmV0dXJuIHQ7CisjZW5kaWYKK30KKwordm9pZCBDdXJsX3RocmVhZF9kZXN0cm95KGN1cmxfdGhyZWFkX3QgaG5kKQoreworICBDbG9zZUhhbmRsZShobmQpOworfQorCitpbnQgQ3VybF90aHJlYWRfam9pbihjdXJsX3RocmVhZF90ICpobmQpCit7CisgIGludCByZXQgPSAoV2FpdEZvclNpbmdsZU9iamVjdCgqaG5kLCBJTkZJTklURSkgPT0gV0FJVF9PQkpFQ1RfMCk7CisKKyAgQ3VybF90aHJlYWRfZGVzdHJveSgqaG5kKTsKKworICAqaG5kID0gY3VybF90aHJlYWRfdF9udWxsOworCisgIHJldHVybiByZXQ7Cit9CisKKyNlbmRpZiAvKiBVU0VfVEhSRUFEU18qICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybF90aHJlYWRzLmggYi9jdXJsLTcuMjUuMC9saWIvY3VybF90aHJlYWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE4MTA1NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9jdXJsX3RocmVhZHMuaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RIUkVBRFNfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9USFJFQURTX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKQorIyAgZGVmaW5lIENVUkxfU1REQ0FMTAorIyAgZGVmaW5lIGN1cmxfbXV0ZXhfdCAgICAgICAgICAgcHRocmVhZF9tdXRleF90CisjICBkZWZpbmUgY3VybF90aHJlYWRfdCAgICAgICAgICBwdGhyZWFkX3QKKyMgIGRlZmluZSBjdXJsX3RocmVhZF90X251bGwgICAgIChwdGhyZWFkX3QpMAorIyAgZGVmaW5lIEN1cmxfbXV0ZXhfaW5pdChtKSAgICAgcHRocmVhZF9tdXRleF9pbml0KG0sIE5VTEwpCisjICBkZWZpbmUgQ3VybF9tdXRleF9hY3F1aXJlKG0pICBwdGhyZWFkX211dGV4X2xvY2sobSkKKyMgIGRlZmluZSBDdXJsX211dGV4X3JlbGVhc2UobSkgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKG0pCisjICBkZWZpbmUgQ3VybF9tdXRleF9kZXN0cm95KG0pICBwdGhyZWFkX211dGV4X2Rlc3Ryb3kobSkKKyNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpCisjICBkZWZpbmUgQ1VSTF9TVERDQUxMICAgICAgICAgICBfX3N0ZGNhbGwKKyMgIGRlZmluZSBjdXJsX211dGV4X3QgICAgICAgICAgIENSSVRJQ0FMX1NFQ1RJT04KKyMgIGRlZmluZSBjdXJsX3RocmVhZF90ICAgICAgICAgIEhBTkRMRQorIyAgZGVmaW5lIGN1cmxfdGhyZWFkX3RfbnVsbCAgICAgKEhBTkRMRSkwCisjICBkZWZpbmUgQ3VybF9tdXRleF9pbml0KG0pICAgICBJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKG0pCisjICBkZWZpbmUgQ3VybF9tdXRleF9hY3F1aXJlKG0pICBFbnRlckNyaXRpY2FsU2VjdGlvbihtKQorIyAgZGVmaW5lIEN1cmxfbXV0ZXhfcmVsZWFzZShtKSAgTGVhdmVDcml0aWNhbFNlY3Rpb24obSkKKyMgIGRlZmluZSBDdXJsX211dGV4X2Rlc3Ryb3kobSkgIERlbGV0ZUNyaXRpY2FsU2VjdGlvbihtKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSB8fCBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKQorCitjdXJsX3RocmVhZF90IEN1cmxfdGhyZWFkX2NyZWF0ZSh1bnNpZ25lZCBpbnQgKENVUkxfU1REQ0FMTCAqZnVuYykgKHZvaWQqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyk7CisKK3ZvaWQgQ3VybF90aHJlYWRfZGVzdHJveShjdXJsX3RocmVhZF90IGhuZCk7CisKK2ludCBDdXJsX3RocmVhZF9qb2luKGN1cmxfdGhyZWFkX3QgKmhuZCk7CisKKyNlbmRpZiAvKiBVU0VfVEhSRUFEU19QT1NJWCB8fCBVU0VfVEhSRUFEU19XSU4zMiAqLworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVEhSRUFEU19IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvY3VybHguaCBiL2N1cmwtNy4yNS4wL2xpYi9jdXJseC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZGY2NjkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY3VybHguaApAQCAtMCwwICsxLDExOCBAQAorI2lmbmRlZiBfX0NVUkxYX0gKKyNkZWZpbmUgX19DVVJMWF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIERlZmluZXMgcHJvdG9zIGFuZCBpbmNsdWRlcyBhbGwgaGVhZGVyIGZpbGVzIHRoYXQgcHJvdmlkZSB0aGUgY3VybHhfKgorICogZnVuY3Rpb25zLiBUaGUgY3VybHhfKiBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBsaWJjdXJsIEFQSSwgYnV0IGFyZQorICogc3RhbmQtYWxvbmUgZnVuY3Rpb25zIHdob3NlIHNvdXJjZXMgY2FuIGJlIGJ1aWx0IGFuZCBsaW5rZWQgYnkgYXBwcyBpZiBuZWVkCisgKiBiZS4KKyAqLworCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisvKiB0aGlzIGlzIHN0aWxsIGEgcHVibGljIGhlYWRlciBmaWxlIHRoYXQgcHJvdmlkZXMgdGhlIGN1cmxfbXByaW50ZigpCisgICBmdW5jdGlvbnMgd2hpbGUgdGhleSBzdGlsbCBhcmUgb2ZmZXJlZCBwdWJsaWNseS4gVGhleSB3aWxsIGJlIG1hZGUgbGlicmFyeS0KKyAgIHByaXZhdGUgb25lIGRheSAqLworCisjaW5jbHVkZSAic3RyZXF1YWwuaCIKKy8qICJzdHJlcXVhbC5oIiBwcm92aWRlcyB0aGUgc3RyZXF1YWwgcHJvdG9zICovCisKKyNpbmNsdWRlICJzdHJ0b29mZnQuaCIKKy8qICJzdHJ0b29mZnQuaCIgcHJvdmlkZXMgdGhpcyBmdW5jdGlvbjogY3VybHhfc3RydG9vZmZ0KCksIHJldHVybnMgYQorICAgY3VybF9vZmZfdCBudW1iZXIgZnJvbSBhIGdpdmVuIHN0cmluZy4KKyovCisKKyNpbmNsdWRlICJ0aW1ldmFsLmgiCisvKgorICAidGltZXZhbC5oIiBzZXRzIHVwIGEgJ3N0cnVjdCB0aW1ldmFsJyBldmVuIGZvciBwbGF0Zm9ybXMgdGhhdCBvdGhlcndpc2UKKyAgZG9uJ3QgaGF2ZSBvbmUgYW5kIGhhcyBwcm90b3MgZm9yIHRoZXNlIGZ1bmN0aW9uczoKKworICBjdXJseF90dm5vdygpCisgIGN1cmx4X3R2ZGlmZigpCisgIGN1cmx4X3R2ZGlmZl9zZWNzKCkKKyovCisKKyNpbmNsdWRlICJub25ibG9jay5oIgorLyogIm5vbmJsb2NrLmgiIHByb3ZpZGVzIGN1cmx4X25vbmJsb2NrKCkgKi8KKworI2luY2x1ZGUgIndhcm5sZXNzLmgiCisvKiAid2Fybmxlc3MuaCIgcHJvdmlkZXMgZnVuY3Rpb25zOgorCisgIGN1cmx4X3VsdG91cygpCisgIGN1cmx4X3VsdG91YygpCisgIGN1cmx4X3V6dG9zaSgpCisqLworCisvKiBOb3cgc2V0dXAgY3VybHhfICogbmFtZXMgZm9yIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgdG8gYmVjb21lIGN1cmx4XyBhbmQKKyAgIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSBsaWJjdXJsIG9mZmljaWFsIEFQSToKKyAgIGN1cmx4X2dldGVudgorICAgY3VybHhfbXByaW50ZiAoYW5kIGl0cyB2YXJpYXRpb25zKQorICAgY3VybHhfc3RyZXF1YWwKKyAgIGN1cmx4X3N0cm5lcXVhbAorCisqLworCisjZGVmaW5lIGN1cmx4X2dldGVudiBjdXJsX2dldGVudgorI2RlZmluZSBjdXJseF9zdHJlcXVhbCBjdXJsX3N0cmVxdWFsCisjZGVmaW5lIGN1cmx4X3N0cm5lcXVhbCBjdXJsX3N0cm5lcXVhbAorI2RlZmluZSBjdXJseF9yYXdfZXF1YWwgQ3VybF9yYXdfZXF1YWwKKyNkZWZpbmUgY3VybHhfbXZzbnByaW50ZiBjdXJsX212c25wcmludGYKKyNkZWZpbmUgY3VybHhfbXNucHJpbnRmIGN1cmxfbXNucHJpbnRmCisjZGVmaW5lIGN1cmx4X21hcHJpbnRmIGN1cmxfbWFwcmludGYKKyNkZWZpbmUgY3VybHhfbXZhcHJpbnRmIGN1cmxfbXZhcHJpbnRmCisjZGVmaW5lIGN1cmx4X21zcHJpbnRmIGN1cmxfbXNwcmludGYKKyNkZWZpbmUgY3VybHhfbXByaW50ZiBjdXJsX21wcmludGYKKyNkZWZpbmUgY3VybHhfbWZwcmludGYgY3VybF9tZnByaW50ZgorI2RlZmluZSBjdXJseF9tdnNwcmludGYgY3VybF9tdnNwcmludGYKKyNkZWZpbmUgY3VybHhfbXZwcmludGYgY3VybF9tdnByaW50ZgorI2RlZmluZSBjdXJseF9tdmZwcmludGYgY3VybF9tdmZwcmludGYKKworI2lmZGVmIEVOQUJMRV9DVVJMWF9QUklOVEYKKy8qIElmIHRoaXMgZGVmaW5lIGlzIHNldCwgd2UgZGVmaW5lIGFsbCAic3RhbmRhcmQiIHByaW50ZigpIGZ1bmN0aW9ucyB0byB1c2UKKyAgIHRoZSBjdXJseF8qIHZlcnNpb24gaW5zdGVhZC4gSXQgbWFrZXMgdGhlIHNvdXJjZSBjb2RlIHRyYW5zcGFyZW50IGFuZAorICAgZWFzaWVyIHRvIHVuZGVyc3RhbmQvcGF0Y2guIFVuZGVmaW5lIHRoZW0gZmlyc3QgaW4gY2FzZSBfTVBSSU5URl9SRVBMQUNFCisgICBpcyBzZXQuICovCisjIHVuZGVmIHByaW50ZgorIyB1bmRlZiBmcHJpbnRmCisjIHVuZGVmIHNwcmludGYKKyMgdW5kZWYgc25wcmludGYKKyMgdW5kZWYgdnByaW50ZgorIyB1bmRlZiB2ZnByaW50ZgorIyB1bmRlZiB2c3ByaW50ZgorIyB1bmRlZiB2c25wcmludGYKKyMgdW5kZWYgYXByaW50ZgorIyB1bmRlZiB2YXByaW50ZgorCisjIGRlZmluZSBwcmludGYgY3VybHhfbXByaW50ZgorIyBkZWZpbmUgZnByaW50ZiBjdXJseF9tZnByaW50ZgorIyBkZWZpbmUgc3ByaW50ZiBjdXJseF9tc3ByaW50ZgorIyBkZWZpbmUgc25wcmludGYgY3VybHhfbXNucHJpbnRmCisjIGRlZmluZSB2cHJpbnRmIGN1cmx4X212cHJpbnRmCisjIGRlZmluZSB2ZnByaW50ZiBjdXJseF9tdmZwcmludGYKKyMgZGVmaW5lIHZzcHJpbnRmIGN1cmx4X212c3ByaW50ZgorIyBkZWZpbmUgdnNucHJpbnRmIGN1cmx4X212c25wcmludGYKKyMgZGVmaW5lIGFwcmludGYgY3VybHhfbWFwcmludGYKKyMgZGVmaW5lIHZhcHJpbnRmIGN1cmx4X212YXByaW50ZgorI2VuZGlmIC8qIEVOQUJMRV9DVVJMWF9QUklOVEYgKi8KKworI2VuZGlmIC8qIF9fQ1VSTFhfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2N5YXNzbC5jIGIvY3VybC03LjI1LjAvbGliL2N5YXNzbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NTJlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvY3lhc3NsLmMKQEAgLTAsMCArMSw1NzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogU291cmNlIGZpbGUgZm9yIGFsbCBDeWFTU0wtc3BlY2lmaWMgY29kZSBmb3IgdGhlIFRMUy9TU0wgbGF5ZXIuIE5vIGNvZGUKKyAqIGJ1dCBzc2xnZW4uYyBzaG91bGQgZXZlciBjYWxsIG9yIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKgorICovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgVVNFX0NZQVNTTAorCisjaWZkZWYgSEFWRV9MSU1JVFNfSAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisjaW5jbHVkZSAiY3lhc3NsLmgiCisjaW5jbHVkZSAic3NsZ2VuLmgiCisjaW5jbHVkZSAicGFyc2VkYXRlLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLworI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgInJhd3N0ci5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisKK3N0YXRpYyBDdXJsX3JlY3YgY3lhc3NsX3JlY3Y7CitzdGF0aWMgQ3VybF9zZW5kIGN5YXNzbF9zZW5kOworCisKK3N0YXRpYyBpbnQgZG9fZmlsZV90eXBlKGNvbnN0IGNoYXIgKnR5cGUpCit7CisgIGlmKCF0eXBlIHx8ICF0eXBlWzBdKQorICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEVNOworICBpZihDdXJsX3Jhd19lcXVhbCh0eXBlLCAiUEVNIikpCisgICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9QRU07CisgIGlmKEN1cmxfcmF3X2VxdWFsKHR5cGUsICJERVIiKSkKKyAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX0FTTjE7CisgIHJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbG9hZHMgYWxsIHRoZSBjbGllbnQvQ0EgY2VydGlmaWNhdGVzIGFuZCBDUkxzLiBTZXR1cCB0aGUgVExTCisgKiBsYXllciBhbmQgZG8gYWxsIG5lY2Vzc2FyeSBtYWdpYy4KKyAqLworc3RhdGljIENVUkxjb2RlCitjeWFzc2xfY29ubmVjdF9zdGVwMShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhKiBjb25zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIFNTTF9NRVRIT0QqIHJlcV9tZXRob2QgPSBOVUxMOworICB2b2lkKiBzc2xfc2Vzc2lvbmlkID0gTlVMTDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisKKyAgaWYoY29uc3NsLT5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgLyogQ3lhU1NMIGRvZXNuJ3Qgc3VwcG9ydCBTU0x2MiAqLworICBpZihkYXRhLT5zZXQuc3NsLnZlcnNpb24gPT0gQ1VSTF9TU0xWRVJTSU9OX1NTTHYyKSB7CisgICAgZmFpbGYoZGF0YSwgIkN5YVNTTCBkb2VzIG5vdCBzdXBwb3J0IFNTTHYyIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICB9CisKKyAgLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIGJlZW4gdG9sZCB0byB1c2UgYW4gZXhwbGljaXQgU1NML1RMUyB2ZXJzaW9uICovCisgIHN3aXRjaChkYXRhLT5zZXQuc3NsLnZlcnNpb24pIHsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKKyAgICAvKiB3ZSB0cnkgdG8gZmlndXJlIG91dCB2ZXJzaW9uICovCisgICAgcmVxX21ldGhvZCA9IFNTTHYyM19jbGllbnRfbWV0aG9kKCk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgorICAgIHJlcV9tZXRob2QgPSBUTFN2MV9jbGllbnRfbWV0aG9kKCk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgorICAgIHJlcV9tZXRob2QgPSBTU0x2M19jbGllbnRfbWV0aG9kKCk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgcmVxX21ldGhvZCA9IFRMU3YxX2NsaWVudF9tZXRob2QoKTsKKyAgfQorCisgIGlmKCFyZXFfbWV0aG9kKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogY291bGRuJ3QgY3JlYXRlIGEgbWV0aG9kISIpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgaWYoY29uc3NsLT5jdHgpCisgICAgU1NMX0NUWF9mcmVlKGNvbnNzbC0+Y3R4KTsKKyAgY29uc3NsLT5jdHggPSBTU0xfQ1RYX25ldyhyZXFfbWV0aG9kKTsKKworICBpZighY29uc3NsLT5jdHgpIHsKKyAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBjcmVhdGUgYSBjb250ZXh0ISIpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyNpZm5kZWYgTk9fRklMRVNZU1RFTQorICAvKiBsb2FkIHRydXN0ZWQgY2FjZXJ0ICovCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdKSB7CisgICAgaWYoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGNvbnNzbC0+Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF0pKSB7CisgICAgICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpIHsKKyAgICAgICAgLyogRmFpbCBpZiB3ZSBpbnNpc3RlIG9uIHN1Y2Nlc3NmdWxseSB2ZXJpZnlpbmcgdGhlIHNlcnZlci4gKi8KKyAgICAgICAgZmFpbGYoZGF0YSwiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIgorICAgICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4gIENBcGF0aDogJXNcbiIsCisgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdPworICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXTogIm5vbmUiLAorICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIXT8KKyAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF0gOiAibm9uZSIpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIEp1c3QgY29udGludWUgd2l0aCBhIHdhcm5pbmcgaWYgbm8gc3RyaWN0ICBjZXJ0aWZpY2F0ZQorICAgICAgICAgICB2ZXJpZmljYXRpb24gaXMgcmVxdWlyZWQuICovCisgICAgICAgIGluZm9mKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnMsIgorICAgICAgICAgICAgICAiIGNvbnRpbnVpbmcgYW55d2F5OlxuIik7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogRXZlcnl0aGluZyBpcyBmaW5lLiAqLworICAgICAgaW5mb2YoZGF0YSwgInN1Y2Nlc3NmdWxseSBzZXQgY2VydGlmaWNhdGUgdmVyaWZ5IGxvY2F0aW9uczpcbiIpOworICAgIH0KKyAgICBpbmZvZihkYXRhLAorICAgICAgICAgICIgIENBZmlsZTogJXNcbiIKKyAgICAgICAgICAiICBDQXBhdGg6ICVzXG4iLAorICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdID8gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV06CisgICAgICAgICAgIm5vbmUiLAorICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdID8gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF06CisgICAgICAgICAgIm5vbmUiKTsKKyAgfQorCisgIC8qIExvYWQgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSwgYW5kIHByaXZhdGUga2V5ICovCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdICYmIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0pIHsKKyAgICBpbnQgZmlsZV90eXBlID0gZG9fZmlsZV90eXBlKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfVFlQRV0pOworCisgICAgaWYoU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZShjb25zc2wtPmN0eCwgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV90eXBlKSAhPSAxKSB7CisgICAgICBmYWlsZihkYXRhLCAidW5hYmxlIHRvIHVzZSBjbGllbnQgY2VydGlmaWNhdGUgKG5vIGtleSBvciB3cm9uZyBwYXNzIgorICAgICAgICAgICAgIiBwaHJhc2U/KSIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKworICAgIGZpbGVfdHlwZSA9IGRvX2ZpbGVfdHlwZShkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfVFlQRV0pOworICAgIGlmKFNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShjb25zc2wtPmN0eCwgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdHlwZSkgIT0gMSkgeworICAgICAgZmFpbGYoZGF0YSwgInVuYWJsZSB0byBzZXQgcHJpdmF0ZSBrZXkiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisgIH0KKyNlbHNlCisgIGlmKEN5YVNTTF9ub19maWxlc3lzdGVtX3ZlcmlmeShjb25zc2wtPmN0eCkhPSBTU0xfU1VDQ0VTUykgeworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorI2VuZGlmIC8qIE5PX0ZJTEVTWVNURU0gKi8KKworICAvKiBTU0wgYWx3YXlzIHRyaWVzIHRvIHZlcmlmeSB0aGUgcGVlciwgdGhpcyBvbmx5IHNheXMgd2hldGhlciBpdCBzaG91bGQKKyAgICogZmFpbCB0byBjb25uZWN0IGlmIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMsIG9yIGlmIGl0IHNob3VsZCBjb250aW51ZQorICAgKiBhbnl3YXkuIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgcmVzdWx0IG9mIHRoZSB2ZXJpZmljYXRpb24gaXMgY2hlY2tlZCB3aXRoCisgICAqIFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdCgpIGJlbG93LiAqLworICBTU0xfQ1RYX3NldF92ZXJpZnkoY29uc3NsLT5jdHgsCisgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXI/U1NMX1ZFUklGWV9QRUVSOlNTTF9WRVJJRllfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgIC8qIExldCdzIG1ha2UgYW4gU1NMIHN0cnVjdHVyZSAqLworICBpZihjb25zc2wtPmhhbmRsZSkKKyAgICBTU0xfZnJlZShjb25zc2wtPmhhbmRsZSk7CisgIGNvbnNzbC0+aGFuZGxlID0gU1NMX25ldyhjb25zc2wtPmN0eCk7CisgIGlmKCFjb25zc2wtPmhhbmRsZSkgeworICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvdWxkbid0IGNyZWF0ZSBhIGNvbnRleHQgKGhhbmRsZSkhIik7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICAvKiBDaGVjayBpZiB0aGVyZSdzIGEgY2FjaGVkIElEIHdlIGNhbi9zaG91bGQgdXNlIGhlcmUhICovCisgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJnNzbF9zZXNzaW9uaWQsIE5VTEwpKSB7CisgICAgLyogd2UgZ290IGEgc2Vzc2lvbiBpZCwgdXNlIGl0ISAqLworICAgIGlmKCFTU0xfc2V0X3Nlc3Npb24oY29uc3NsLT5oYW5kbGUsIHNzbF9zZXNzaW9uaWQpKSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xfc2V0X3Nlc3Npb24gZmFpbGVkOiAlcyIsCisgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKFNTTF9nZXRfZXJyb3IoY29uc3NsLT5oYW5kbGUsIDApLE5VTEwpKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisgICAgLyogSW5mb3JtYXRpb25hbCBtZXNzYWdlICovCisgICAgaW5mb2YgKGRhdGEsICJTU0wgcmUtdXNpbmcgc2Vzc2lvbiBJRFxuIik7CisgIH0KKworICAvKiBwYXNzIHRoZSByYXcgc29ja2V0IGludG8gdGhlIFNTTCBsYXllciAqLworICBpZighU1NMX3NldF9mZChjb25zc2wtPmhhbmRsZSwgKGludClzb2NrZmQpKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogU1NMX3NldF9mZCBmYWlsZWQiKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICBjb25zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8yOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKworc3RhdGljIENVUkxjb2RlCitjeWFzc2xfY29ubmVjdF9zdGVwMihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQoreworICBpbnQgcmV0ID0gLTE7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEqIGNvbnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKworICBpbmZvZihkYXRhLCAiQ3lhU1NMOiBDb25uZWN0aW5nIHRvICVzOiVkXG4iLAorICAgICAgICBjb25uLT5ob3N0Lm5hbWUsIGNvbm4tPnJlbW90ZV9wb3J0KTsKKworICBjb25uLT5yZWN2W3NvY2tpbmRleF0gPSBjeWFzc2xfcmVjdjsKKyAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gY3lhc3NsX3NlbmQ7CisKKyAgcmV0ID0gU1NMX2Nvbm5lY3QoY29uc3NsLT5oYW5kbGUpOworICBpZihyZXQgIT0gMSkgeworICAgIGNoYXIgZXJyb3JfYnVmZmVyWzgwXTsKKyAgICBpbnQgIGRldGFpbCA9IFNTTF9nZXRfZXJyb3IoY29uc3NsLT5oYW5kbGUsIHJldCk7CisKKyAgICBpZihTU0xfRVJST1JfV0FOVF9SRUFEID09IGRldGFpbCkgeworICAgICAgY29uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKworICAgIGlmKFNTTF9FUlJPUl9XQU5UX1dSSVRFID09IGRldGFpbCkgeworICAgICAgY29uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMl93cml0aW5nOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKworICAgIGZhaWxmKGRhdGEsICJTU0xfY29ubmVjdCBmYWlsZWQgd2l0aCBlcnJvciAlZDogJXMiLCBkZXRhaWwsCisgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhkZXRhaWwsIGVycm9yX2J1ZmZlcikpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorCisgIGNvbnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzM7CisgIGluZm9mKGRhdGEsICJTU0wgY29ubmVjdGVkXG4iKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKworc3RhdGljIENVUkxjb2RlCitjeWFzc2xfY29ubmVjdF9zdGVwMyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQoreworICBDVVJMY29kZSByZXRjb2RlID0gQ1VSTEVfT0s7CisgIHZvaWQgKm9sZF9zc2xfc2Vzc2lvbmlkPU5VTEw7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIGludCBpbmNhY2hlOworICBTU0xfU0VTU0lPTiAqb3VyX3NzbF9zZXNzaW9uaWQ7CisKKyAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKKworICBvdXJfc3NsX3Nlc3Npb25pZCA9IFNTTF9nZXRfc2Vzc2lvbihjb25uc3NsLT5oYW5kbGUpOworCisgIGluY2FjaGUgPSAhKEN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmb2xkX3NzbF9zZXNzaW9uaWQsIE5VTEwpKTsKKyAgaWYoaW5jYWNoZSkgeworICAgIGlmKG9sZF9zc2xfc2Vzc2lvbmlkICE9IG91cl9zc2xfc2Vzc2lvbmlkKSB7CisgICAgICBpbmZvZihkYXRhLCAib2xkIFNTTCBzZXNzaW9uIElEIGlzIHN0YWxlLCByZW1vdmluZ1xuIik7CisgICAgICBDdXJsX3NzbF9kZWxzZXNzaW9uaWQoY29ubiwgb2xkX3NzbF9zZXNzaW9uaWQpOworICAgICAgaW5jYWNoZSA9IEZBTFNFOworICAgIH0KKyAgfQorICBpZighaW5jYWNoZSkgeworICAgIHJldGNvZGUgPSBDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgb3VyX3NzbF9zZXNzaW9uaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIHVua25vd24gc2l6ZSAqLyk7CisgICAgaWYocmV0Y29kZSkgeworICAgICAgZmFpbGYoZGF0YSwgImZhaWxlZCB0byBzdG9yZSBzc2wgc2Vzc2lvbiIpOworICAgICAgcmV0dXJuIHJldGNvZGU7CisgICAgfQorICB9CisKKyAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0X2RvbmU7CisKKyAgcmV0dXJuIHJldGNvZGU7Cit9CisKKworc3RhdGljIHNzaXplX3QgY3lhc3NsX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCit7CisgIGNoYXIgZXJyb3JfYnVmZmVyWzgwXTsKKyAgaW50ICBtZW1sZW4gPSAobGVuID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWxlbjsKKyAgaW50ICByYyAgICAgPSBTU0xfd3JpdGUoY29ubi0+c3NsW3NvY2tpbmRleF0uaGFuZGxlLCBtZW0sIG1lbWxlbik7CisKKyAgaWYocmMgPCAwKSB7CisgICAgaW50IGVyciA9IFNTTF9nZXRfZXJyb3IoY29ubi0+c3NsW3NvY2tpbmRleF0uaGFuZGxlLCByYyk7CisKKyAgICBzd2l0Y2goZXJyKSB7CisgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAvKiB0aGVyZSdzIGRhdGEgcGVuZGluZywgcmUtaW52b2tlIFNTTF93cml0ZSgpICovCisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKKyAgICAgIHJldHVybiAtMTsKKyAgICBkZWZhdWx0OgorICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNTTCB3cml0ZTogJXMsIGVycm5vICVkIiwKKyAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoZXJyLCBlcnJvcl9idWZmZXIpLAorICAgICAgICAgICAgU09DS0VSUk5PKTsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisgIHJldHVybiByYzsKK30KKwordm9pZCBDdXJsX2N5YXNzbF9jbG9zZV9hbGwoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgICh2b2lkKWRhdGE7Cit9CisKK3ZvaWQgQ3VybF9jeWFzc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworCisgIGlmKGNvbnNzbC0+aGFuZGxlKSB7CisgICAgKHZvaWQpU1NMX3NodXRkb3duKGNvbnNzbC0+aGFuZGxlKTsKKyAgICBTU0xfZnJlZSAoY29uc3NsLT5oYW5kbGUpOworICAgIGNvbnNzbC0+aGFuZGxlID0gTlVMTDsKKyAgfQorICBpZihjb25zc2wtPmN0eCkgeworICAgIFNTTF9DVFhfZnJlZSAoY29uc3NsLT5jdHgpOworICAgIGNvbnNzbC0+Y3R4ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgc3NpemVfdCBjeWFzc2xfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCit7CisgIGNoYXIgZXJyb3JfYnVmZmVyWzgwXTsKKyAgaW50ICBidWZmc2l6ZSA9IChidWZmZXJzaXplID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWJ1ZmZlcnNpemU7CisgIGludCAgbnJlYWQgICAgPSBTU0xfcmVhZChjb25uLT5zc2xbbnVtXS5oYW5kbGUsIGJ1ZiwgYnVmZnNpemUpOworCisgIGlmKG5yZWFkIDwgMCkgeworICAgIGludCBlcnIgPSBTU0xfZ2V0X2Vycm9yKGNvbm4tPnNzbFtudW1dLmhhbmRsZSwgbnJlYWQpOworCisgICAgc3dpdGNoKGVycikgeworICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOiAvKiBubyBtb3JlIGRhdGEgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAgLyogdGhlcmUncyBkYXRhIHBlbmRpbmcsIHJlLWludm9rZSBTU0xfcmVhZCgpICovCisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKKyAgICAgIHJldHVybiAtMTsKKyAgICBkZWZhdWx0OgorICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNTTCByZWFkOiAlcywgZXJybm8gJWQiLAorICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhlcnIsIGVycm9yX2J1ZmZlciksCisgICAgICAgICAgICBTT0NLRVJSTk8pOworICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG5yZWFkOworfQorCisKK3ZvaWQgQ3VybF9jeWFzc2xfc2Vzc2lvbl9mcmVlKHZvaWQgKnB0cikKK3sKKyAgKHZvaWQpcHRyOworICAvKiBDeWFTU0wgcmV1c2VzIHNlc3Npb25zIG9uIG93biwgbm8gZnJlZSAqLworfQorCisKK3NpemVfdCBDdXJsX2N5YXNzbF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisjaWZkZWYgQ1lBU1NMX1ZFUlNJT04KKyAgcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIkN5YVNTTC8lcyIsIENZQVNTTF9WRVJTSU9OKTsKKyNlbHNlCisgIHJldHVybiBzbnByaW50ZihidWZmZXIsIHNpemUsICJDeWFTU0wvJXMiLCAiPDEuOC44Iik7CisjZW5kaWYKK30KKworCitpbnQgQ3VybF9jeWFzc2xfaW5pdCh2b2lkKQoreworICBpZihDeWFTU0xfSW5pdCgpID09IDApCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIC0xOworfQorCisKK2Jvb2wgQ3VybF9jeWFzc2xfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSogY29ubiwgaW50IGNvbm5pbmRleCkKK3sKKyAgaWYoY29ubi0+c3NsW2Nvbm5pbmRleF0uaGFuZGxlKSAgIC8qIFNTTCBpcyBpbiB1c2UgKi8KKyAgICByZXR1cm4gKDAgIT0gU1NMX3BlbmRpbmcoY29ubi0+c3NsW2Nvbm5pbmRleF0uaGFuZGxlKSkgPyBUUlVFIDogRkFMU0U7CisgIGVsc2UKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHNodXQgZG93biB0aGUgU1NMIGxheWVyIGJ1dCBrZWVwIHRoZQorICogc29ja2V0IG9wZW4gKENDQyAtIENsZWFyIENvbW1hbmQgQ2hhbm5lbCkKKyAqLworaW50IEN1cmxfY3lhc3NsX3NodXRkb3duKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKK3sKKyAgaW50IHJldHZhbCA9IDA7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworCisgIGlmKGNvbm5zc2wtPmhhbmRsZSkgeworICAgIFNTTF9mcmVlIChjb25uc3NsLT5oYW5kbGUpOworICAgIGNvbm5zc2wtPmhhbmRsZSA9IE5VTEw7CisgIH0KKyAgcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgQ1VSTGNvZGUKK2N5YXNzbF9jb25uZWN0X2NvbW1vbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sIG5vbmJsb2NraW5nLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJldGNvZGU7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBsb25nIHRpbWVvdXRfbXM7CisgIGludCB3aGF0OworCisgIC8qIGNoZWNrIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQgKi8KKyAgaWYoc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgPT0gY29ubnNzbC0+c3RhdGUpIHsKKyAgICAqZG9uZSA9IFRSVUU7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgaWYoc3NsX2Nvbm5lY3RfMT09Y29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworICAgIC8qIEZpbmQgb3V0IGhvdyBtdWNoIG1vcmUgdGltZSB3ZSdyZSBhbGxvd2VkICovCisgICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisKKyAgICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgICAgLyogbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aW1lIGFscmVhZHkgaXMgdXAgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgIH0KKyAgICByZXRjb2RlID0gY3lhc3NsX2Nvbm5lY3Rfc3RlcDEoY29ubiwgc29ja2luZGV4KTsKKyAgICBpZihyZXRjb2RlKQorICAgICAgcmV0dXJuIHJldGNvZGU7CisgIH0KKworICB3aGlsZShzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKKyAgICAgICAgc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgfHwKKyAgICAgICAgc3NsX2Nvbm5lY3RfMl93cml0aW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKworICAgIC8qIGNoZWNrIGFsbG93ZWQgdGltZSBsZWZ0ICovCisgICAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CisKKyAgICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgICAgLyogbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aW1lIGFscmVhZHkgaXMgdXAgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgIH0KKworICAgIC8qIGlmIHNzbCBpcyBleHBlY3Rpbmcgc29tZXRoaW5nLCBjaGVjayBpZiBpdCdzIGF2YWlsYWJsZS4gKi8KKyAgICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfcmVhZGluZworICAgICAgIHx8IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl93cml0aW5nKSB7CisKKyAgICAgIGN1cmxfc29ja2V0X3Qgd3JpdGVmZCA9IHNzbF9jb25uZWN0XzJfd3JpdGluZz09CisgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKKyAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nPT0KKyAgICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZT9zb2NrZmQ6Q1VSTF9TT0NLRVRfQkFEOworCisgICAgICB3aGF0ID0gQ3VybF9zb2NrZXRfcmVhZHkocmVhZGZkLCB3cml0ZWZkLCBub25ibG9ja2luZz8wOnRpbWVvdXRfbXMpOworICAgICAgaWYod2hhdCA8IDApIHsKKyAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KKyAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoMCA9PSB3aGF0KSB7CisgICAgICAgIGlmKG5vbmJsb2NraW5nKSB7CisgICAgICAgICAgKmRvbmUgPSBGQUxTRTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogdGltZW91dCAqLworICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogc29ja2V0IGlzIHJlYWRhYmxlIG9yIHdyaXRhYmxlICovCisgICAgfQorCisgICAgLyogUnVuIHRyYW5zYWN0aW9uLCBhbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIgaWYgaXQgZmFpbGVkIG9yIGlmCisgICAgICogdGhpcyBjb25uZWN0aW9uIGlzIHBhcnQgb2YgYSBtdWx0aSBoYW5kbGUgYW5kIHRoaXMgbG9vcCB3b3VsZAorICAgICAqIGV4ZWN1dGUgYWdhaW4uIFRoaXMgcGVybWl0cyB0aGUgb3duZXIgb2YgYSBtdWx0aSBoYW5kbGUgdG8KKyAgICAgKiBhYm9ydCBhIGNvbm5lY3Rpb24gYXR0ZW1wdCBiZWZvcmUgc3RlcDIgaGFzIGNvbXBsZXRlZCB3aGlsZQorICAgICAqIGVuc3VyaW5nIHRoYXQgYSBjbGllbnQgdXNpbmcgc2VsZWN0KCkgb3IgZXBvbGwoKSB3aWxsIGFsd2F5cworICAgICAqIGhhdmUgYSB2YWxpZCBmZHNldCB0byB3YWl0IG9uLgorICAgICAqLworICAgIHJldGNvZGUgPSBjeWFzc2xfY29ubmVjdF9zdGVwMihjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJldGNvZGUgfHwgKG5vbmJsb2NraW5nICYmCisgICAgICAgICAgICAgICAgICAgKHNzbF9jb25uZWN0XzIgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAorICAgICAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAorICAgICAgICAgICAgICAgICAgICBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkpKQorICAgICAgcmV0dXJuIHJldGNvZGU7CisKKyAgfSAvKiByZXBlYXQgc3RlcDIgdW50aWwgYWxsIHRyYW5zYWN0aW9ucyBhcmUgZG9uZS4gKi8KKworICBpZihzc2xfY29ubmVjdF8zPT1jb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisgICAgcmV0Y29kZSA9IGN5YXNzbF9jb25uZWN0X3N0ZXAzKGNvbm4sIHNvY2tpbmRleCk7CisgICAgaWYocmV0Y29kZSkKKyAgICAgIHJldHVybiByZXRjb2RlOworICB9CisKKyAgaWYoc3NsX2Nvbm5lY3RfZG9uZT09Y29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworICAgIGNvbm5zc2wtPnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7CisgICAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gY3lhc3NsX3JlY3Y7CisgICAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gY3lhc3NsX3NlbmQ7CisgICAgKmRvbmUgPSBUUlVFOworICB9CisgIGVsc2UKKyAgICAqZG9uZSA9IEZBTFNFOworCisgIC8qIFJlc2V0IG91ciBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KKyAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzE7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKK0NVUkxjb2RlCitDdXJsX2N5YXNzbF9jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKK3sKKyAgcmV0dXJuIGN5YXNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIFRSVUUsIGRvbmUpOworfQorCisKK0NVUkxjb2RlCitDdXJsX2N5YXNzbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKK3sKKyAgQ1VSTGNvZGUgcmV0Y29kZTsKKyAgYm9vbCBkb25lID0gRkFMU0U7CisKKyAgcmV0Y29kZSA9IGN5YXNzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIEZBTFNFLCAmZG9uZSk7CisgIGlmKHJldGNvZGUpCisgICAgcmV0dXJuIHJldGNvZGU7CisKKyAgREVCVUdBU1NFUlQoZG9uZSk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9jeWFzc2wuaCBiL2N1cmwtNy4yNS4wL2xpYi9jeWFzc2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmQ2ODA2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2N5YXNzbC5oCkBAIC0wLDAgKzEsNjQgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfQ1lBU1NMX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfQ1lBU1NMX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfQ1lBU1NMCisKK0NVUkxjb2RlIEN1cmxfY3lhc3NsX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KTsKK2Jvb2wgQ3VybF9jeWFzc2xfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSogY29ubixpbnQgY29ubmluZGV4KTsKK2ludCBDdXJsX2N5YXNzbF9zaHV0ZG93bihzdHJ1Y3QgY29ubmVjdGRhdGEqIGNvbm4sIGludCBzb2NraW5kZXgpOworCisvKiB0ZWxsIEN5YVNTTCB0byBjbG9zZSBkb3duIGFsbCBvcGVuIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb25uZWN0aW9ucyAoYW5kCisgICB0aHVzIHNlc3Npb24gSUQgY2FjaGluZyBldGMpICovCit2b2lkIEN1cmxfY3lhc3NsX2Nsb3NlX2FsbChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisKKyAvKiBjbG9zZSBhIFNTTCBjb25uZWN0aW9uICovCit2b2lkIEN1cmxfY3lhc3NsX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCk7CisKK3ZvaWQgQ3VybF9jeWFzc2xfc2Vzc2lvbl9mcmVlKHZvaWQgKnB0cik7CitzaXplX3QgQ3VybF9jeWFzc2xfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKK2ludCBDdXJsX2N5YXNzbF9zaHV0ZG93bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpOworaW50IEN1cmxfY3lhc3NsX2luaXQodm9pZCk7CitDVVJMY29kZSBDdXJsX2N5YXNzbF9jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSk7CisKKy8qIEFQSSBzZXR1cCBmb3IgQ3lhU1NMICovCisjZGVmaW5lIGN1cmxzc2xfaW5pdCBDdXJsX2N5YXNzbF9pbml0CisjZGVmaW5lIGN1cmxzc2xfY2xlYW51cCgpIEN1cmxfbm9wX3N0bXQKKyNkZWZpbmUgY3VybHNzbF9jb25uZWN0IEN1cmxfY3lhc3NsX2Nvbm5lY3QKKyNkZWZpbmUgY3VybHNzbF9jb25uZWN0X25vbmJsb2NraW5nIEN1cmxfY3lhc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcKKyNkZWZpbmUgY3VybHNzbF9zZXNzaW9uX2ZyZWUoeCkgIEN1cmxfY3lhc3NsX3Nlc3Npb25fZnJlZSh4KQorI2RlZmluZSBjdXJsc3NsX2Nsb3NlX2FsbCBDdXJsX2N5YXNzbF9jbG9zZV9hbGwKKyNkZWZpbmUgY3VybHNzbF9jbG9zZSBDdXJsX2N5YXNzbF9jbG9zZQorI2RlZmluZSBjdXJsc3NsX3NodXRkb3duKHgseSkgQ3VybF9jeWFzc2xfc2h1dGRvd24oeCx5KQorI2RlZmluZSBjdXJsc3NsX3NldF9lbmdpbmUoeCx5KSAoeD14LCB5PXksIENVUkxFX05PVF9CVUlMVF9JTikKKyNkZWZpbmUgY3VybHNzbF9zZXRfZW5naW5lX2RlZmF1bHQoeCkgKHg9eCwgQ1VSTEVfTk9UX0JVSUxUX0lOKQorI2RlZmluZSBjdXJsc3NsX2VuZ2luZXNfbGlzdCh4KSAoeD14LCAoc3RydWN0IGN1cmxfc2xpc3QgKilOVUxMKQorI2RlZmluZSBjdXJsc3NsX3ZlcnNpb24gQ3VybF9jeWFzc2xfdmVyc2lvbgorI2RlZmluZSBjdXJsc3NsX2NoZWNrX2N4bih4KSAoeD14LCAtMSkKKyNkZWZpbmUgY3VybHNzbF9kYXRhX3BlbmRpbmcoeCx5KSBDdXJsX2N5YXNzbF9kYXRhX3BlbmRpbmcoeCx5KQorCisjZW5kaWYgLyogVVNFX0NZQVNTTCAqLworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0NZQVNTTF9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvZGljdC5jIGIvY3VybC03LjI1LjAvbGliL2RpY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzA4MzczCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2RpY3QuYwpAQCAtMCwwICsxLDI5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZuZGVmIENVUkxfRElTQUJMRV9ESUNUCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInRyYW5zZmVyLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKworI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAic3RyZXF1YWwuaCIKKyNpbmNsdWRlICJkaWN0LmgiCisjaW5jbHVkZSAicmF3c3RyLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKworLyoKKyAqIEZvcndhcmQgZGVjbGFyYXRpb25zLgorICovCisKK3N0YXRpYyBDVVJMY29kZSBkaWN0X2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CisKKy8qCisgKiBESUNUIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfZGljdCA9IHsKKyAgIkRJQ1QiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIGRpY3RfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBQT1JUX0RJQ1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX0RJQ1QsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX05PTkUgfCBQUk9UT1BUX05PVVJMUVVFUlkgICAgICAvKiBmbGFncyAqLworfTsKKworc3RhdGljIGNoYXIgKnVuZXNjYXBlX3dvcmQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIGNvbnN0IGNoYXIgKmlucHV0YnVmZikKK3sKKyAgY2hhciAqbmV3cDsKKyAgY2hhciAqZGljdHA7CisgIGNoYXIgKnB0cjsKKyAgaW50IGxlbjsKKyAgY2hhciBieXRlOworICBpbnQgb2xlbj0wOworCisgIG5ld3AgPSBjdXJsX2Vhc3lfdW5lc2NhcGUoZGF0YSwgaW5wdXRidWZmLCAwLCAmbGVuKTsKKyAgaWYoIW5ld3ApCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZGljdHAgPSBtYWxsb2MoKChzaXplX3QpbGVuKSoyICsgMSk7IC8qIGFkZCBvbmUgZm9yIHRlcm1pbmF0aW5nIHplcm8gKi8KKyAgaWYoZGljdHApIHsKKyAgICAvKiBBY2NvcmRpbmcgdG8gUkZDMjIyOSBzZWN0aW9uIDIuMiwgdGhlc2UgbGV0dGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgd2l0aAorICAgICAgIFxbbGV0dGVyXSAqLworICAgIGZvcihwdHIgPSBuZXdwOworICAgICAgICAoYnl0ZSA9ICpwdHIpICE9IDA7CisgICAgICAgIHB0cisrKSB7CisgICAgICBpZigoYnl0ZSA8PSAzMikgfHwgKGJ5dGUgPT0gMTI3KSB8fAorICAgICAgICAgIChieXRlID09ICdcJycpIHx8IChieXRlID09ICdcIicpIHx8IChieXRlID09ICdcXCcpKSB7CisgICAgICAgIGRpY3RwW29sZW4rK10gPSAnXFwnOworICAgICAgfQorICAgICAgZGljdHBbb2xlbisrXSA9IGJ5dGU7CisgICAgfQorICAgIGRpY3RwW29sZW5dPTA7CisKKyAgICBmcmVlKG5ld3ApOworICB9CisgIHJldHVybiBkaWN0cDsKK30KKworc3RhdGljIENVUkxjb2RlIGRpY3RfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBjaGFyICp3b3JkOworICBjaGFyICpld29yZDsKKyAgY2hhciAqcHBhdGg7CisgIGNoYXIgKmRhdGFiYXNlID0gTlVMTDsKKyAgY2hhciAqc3RyYXRlZ3kgPSBOVUxMOworICBjaGFyICpudGhkZWYgPSBOVUxMOyAvKiBUaGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSBwcm90b2NvbCwgYnV0IHJlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IFJGQyAyMjI5ICovCisgIENVUkxjb2RlIHJlc3VsdD1DVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9Y29ubi0+ZGF0YTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKworICBjaGFyICpwYXRoID0gZGF0YS0+c3RhdGUucGF0aDsKKyAgY3VybF9vZmZfdCAqYnl0ZWNvdW50ID0gJmRhdGEtPnJlcS5ieXRlY291bnQ7CisKKyAgKmRvbmUgPSBUUlVFOyAvKiB1bmNvbmRpdGlvbmFsbHkgKi8KKworICBpZihjb25uLT5iaXRzLnVzZXJfcGFzc3dkKSB7CisgICAgLyogQVVUSCBpcyBtaXNzaW5nICovCisgIH0KKworICBpZihDdXJsX3Jhd19uZXF1YWwocGF0aCwgRElDVF9NQVRDSCwgc2l6ZW9mKERJQ1RfTUFUQ0gpLTEpIHx8CisgICAgICBDdXJsX3Jhd19uZXF1YWwocGF0aCwgRElDVF9NQVRDSDIsIHNpemVvZihESUNUX01BVENIMiktMSkgfHwKKyAgICAgIEN1cmxfcmF3X25lcXVhbChwYXRoLCBESUNUX01BVENIMywgc2l6ZW9mKERJQ1RfTUFUQ0gzKS0xKSkgeworCisgICAgd29yZCA9IHN0cmNocihwYXRoLCAnOicpOworICAgIGlmKHdvcmQpIHsKKyAgICAgIHdvcmQrKzsKKyAgICAgIGRhdGFiYXNlID0gc3RyY2hyKHdvcmQsICc6Jyk7CisgICAgICBpZihkYXRhYmFzZSkgeworICAgICAgICAqZGF0YWJhc2UrKyA9IChjaGFyKTA7CisgICAgICAgIHN0cmF0ZWd5ID0gc3RyY2hyKGRhdGFiYXNlLCAnOicpOworICAgICAgICBpZihzdHJhdGVneSkgeworICAgICAgICAgICpzdHJhdGVneSsrID0gKGNoYXIpMDsKKyAgICAgICAgICBudGhkZWYgPSBzdHJjaHIoc3RyYXRlZ3ksICc6Jyk7CisgICAgICAgICAgaWYobnRoZGVmKSB7CisgICAgICAgICAgICAqbnRoZGVmID0gKGNoYXIpMDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpZigod29yZCA9PSBOVUxMKSB8fCAoKndvcmQgPT0gKGNoYXIpMCkpIHsKKyAgICAgIGluZm9mKGRhdGEsICJsb29rdXAgd29yZCBpcyBtaXNzaW5nXG4iKTsKKyAgICAgIHdvcmQ9KGNoYXIgKikiZGVmYXVsdCI7CisgICAgfQorICAgIGlmKChkYXRhYmFzZSA9PSBOVUxMKSB8fCAoKmRhdGFiYXNlID09IChjaGFyKTApKSB7CisgICAgICBkYXRhYmFzZSA9IChjaGFyICopIiEiOworICAgIH0KKyAgICBpZigoc3RyYXRlZ3kgPT0gTlVMTCkgfHwgKCpzdHJhdGVneSA9PSAoY2hhcikwKSkgeworICAgICAgc3RyYXRlZ3kgPSAoY2hhciAqKSIuIjsKKyAgICB9CisKKyAgICBld29yZCA9IHVuZXNjYXBlX3dvcmQoZGF0YSwgd29yZCk7CisgICAgaWYoIWV3b3JkKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICByZXN1bHQgPSBDdXJsX3NlbmRmKHNvY2tmZCwgY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDTElFTlQgIiBMSUJDVVJMX05BTUUgIiAiIExJQkNVUkxfVkVSU0lPTiAiXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJNQVRDSCAiCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMgIiAgICAvKiBkYXRhYmFzZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIiVzICIgICAgLyogc3RyYXRlZ3kgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICIlc1xyXG4iIC8qIHdvcmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICJRVUlUXHJcbiIsCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3ksCisgICAgICAgICAgICAgICAgICAgICAgICBld29yZAorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIGZyZWUoZXdvcmQpOworCisgICAgaWYocmVzdWx0KSB7CisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgRElDVCByZXF1ZXN0Iik7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgRkFMU0UsIGJ5dGVjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBOVUxMKTsgLyogbm8gdXBsb2FkICovCisgIH0KKyAgZWxzZSBpZihDdXJsX3Jhd19uZXF1YWwocGF0aCwgRElDVF9ERUZJTkUsIHNpemVvZihESUNUX0RFRklORSktMSkgfHwKKyAgICAgICAgICAgQ3VybF9yYXdfbmVxdWFsKHBhdGgsIERJQ1RfREVGSU5FMiwgc2l6ZW9mKERJQ1RfREVGSU5FMiktMSkgfHwKKyAgICAgICAgICAgQ3VybF9yYXdfbmVxdWFsKHBhdGgsIERJQ1RfREVGSU5FMywgc2l6ZW9mKERJQ1RfREVGSU5FMyktMSkpIHsKKworICAgIHdvcmQgPSBzdHJjaHIocGF0aCwgJzonKTsKKyAgICBpZih3b3JkKSB7CisgICAgICB3b3JkKys7CisgICAgICBkYXRhYmFzZSA9IHN0cmNocih3b3JkLCAnOicpOworICAgICAgaWYoZGF0YWJhc2UpIHsKKyAgICAgICAgKmRhdGFiYXNlKysgPSAoY2hhcikwOworICAgICAgICBudGhkZWYgPSBzdHJjaHIoZGF0YWJhc2UsICc6Jyk7CisgICAgICAgIGlmKG50aGRlZikgeworICAgICAgICAgICpudGhkZWYgPSAoY2hhcikwOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYoKHdvcmQgPT0gTlVMTCkgfHwgKCp3b3JkID09IChjaGFyKTApKSB7CisgICAgICBpbmZvZihkYXRhLCAibG9va3VwIHdvcmQgaXMgbWlzc2luZ1xuIik7CisgICAgICB3b3JkPShjaGFyICopImRlZmF1bHQiOworICAgIH0KKyAgICBpZigoZGF0YWJhc2UgPT0gTlVMTCkgfHwgKCpkYXRhYmFzZSA9PSAoY2hhcikwKSkgeworICAgICAgZGF0YWJhc2UgPSAoY2hhciAqKSIhIjsKKyAgICB9CisKKyAgICBld29yZCA9IHVuZXNjYXBlX3dvcmQoZGF0YSwgd29yZCk7CisgICAgaWYoIWV3b3JkKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICByZXN1bHQgPSBDdXJsX3NlbmRmKHNvY2tmZCwgY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDTElFTlQgIiBMSUJDVVJMX05BTUUgIiAiIExJQkNVUkxfVkVSU0lPTiAiXHJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJERUZJTkUgIgorICAgICAgICAgICAgICAgICAgICAgICAgIiVzICIgICAgIC8qIGRhdGFiYXNlICovCisgICAgICAgICAgICAgICAgICAgICAgICAiJXNcclxuIiAgLyogd29yZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgIlFVSVRcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZXdvcmQpOworCisgICAgZnJlZShld29yZCk7CisKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgc2VuZGluZyBESUNUIHJlcXVlc3QiKTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBGQUxTRSwgYnl0ZWNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgLTEsIE5VTEwpOyAvKiBubyB1cGxvYWQgKi8KKyAgfQorICBlbHNlIHsKKworICAgIHBwYXRoID0gc3RyY2hyKHBhdGgsICcvJyk7CisgICAgaWYocHBhdGgpIHsKKyAgICAgIGludCBpOworCisgICAgICBwcGF0aCsrOworICAgICAgZm9yKGkgPSAwOyBwcGF0aFtpXTsgaSsrKSB7CisgICAgICAgIGlmKHBwYXRoW2ldID09ICc6JykKKyAgICAgICAgICBwcGF0aFtpXSA9ICcgJzsKKyAgICAgIH0KKyAgICAgIHJlc3VsdCA9IEN1cmxfc2VuZGYoc29ja2ZkLCBjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiQ0xJRU5UICIgTElCQ1VSTF9OQU1FICIgIiBMSUJDVVJMX1ZFUlNJT04gIlxyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICIlc1xyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICJRVUlUXHJcbiIsIHBwYXRoKTsKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgRElDVCByZXF1ZXN0Iik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisKKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBGQUxTRSwgYnl0ZWNvdW50LCAtMSwgTlVMTCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorI2VuZGlmIC8qQ1VSTF9ESVNBQkxFX0RJQ1QqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2RpY3QuaCBiL2N1cmwtNy4yNS4wL2xpYi9kaWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmZDlkNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9kaWN0LmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9ESUNUX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfRElDVF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfRElDVAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2RpY3Q7CisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0RJQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2Vhc3kuYyBiL2N1cmwtNy4yNS4wL2xpYi9lYXN5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhNTVlZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9lYXN5LmMKQEAgLTAsMCArMSw5MDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInRyYW5zZmVyLmgiCisjaW5jbHVkZSAic3NsZ2VuLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAiZ2V0aW5mby5oIgorI2luY2x1ZGUgImhvc3RpcC5oIgorI2luY2x1ZGUgInNoYXJlLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImVhc3lpZi5oIgorI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgInNlbmRmLmgiIC8qIGZvciBmYWlsZiBmdW5jdGlvbiBwcm90b3R5cGUgKi8KKyNpbmNsdWRlICJjdXJsX250bG0uaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiIC8qIGZvciBDdXJsX2dldGNvbm5lY3RpbmZvICovCisjaW5jbHVkZSAic2xpc3QuaCIKKyNpbmNsdWRlICJjdXJsX3JhbmQuaCIKKyNpbmNsdWRlICJub24tYXNjaWkuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKiB3aW4zMl9jbGVhbnVwKCkgaXMgZm9yIHdpbjMyIHNvY2tldCBjbGVhbnVwIGZ1bmN0aW9uYWxpdHksIHRoZSBvcHBvc2l0ZQorICAgb2Ygd2luMzJfaW5pdCgpICovCitzdGF0aWMgdm9pZCB3aW4zMl9jbGVhbnVwKHZvaWQpCit7CisjaWZkZWYgVVNFX1dJTlNPQ0sKKyAgV1NBQ2xlYW51cCgpOworI2VuZGlmCisjaWZkZWYgVVNFX1dJTkRPV1NfU1NQSQorICBDdXJsX3NzcGlfZ2xvYmFsX2NsZWFudXAoKTsKKyNlbmRpZgorfQorCisvKiB3aW4zMl9pbml0KCkgcGVyZm9ybXMgd2luMzIgc29ja2V0IGluaXRpYWxpemF0aW9uIHRvIHByb3Blcmx5IHNldHVwIHRoZQorICAgc3RhY2sgdG8gYWxsb3cgbmV0d29ya2luZyAqLworc3RhdGljIENVUkxjb2RlIHdpbjMyX2luaXQodm9pZCkKK3sKKyNpZmRlZiBVU0VfV0lOU09DSworICBXT1JEIHdWZXJzaW9uUmVxdWVzdGVkOworICBXU0FEQVRBIHdzYURhdGE7CisgIGludCByZXM7CisKKyNpZiBkZWZpbmVkKEVOQUJMRV9JUFY2KSAmJiAoVVNFX1dJTlNPQ0sgPCAyKQorICBFcnJvciBJUFY2X3JlcXVpcmVzX3dpbnNvY2syCisjZW5kaWYKKworICB3VmVyc2lvblJlcXVlc3RlZCA9IE1BS0VXT1JEKFVTRV9XSU5TT0NLLCBVU0VfV0lOU09DSyk7CisKKyAgcmVzID0gV1NBU3RhcnR1cCh3VmVyc2lvblJlcXVlc3RlZCwgJndzYURhdGEpOworCisgIGlmKHJlcyAhPSAwKQorICAgIC8qIFRlbGwgdGhlIHVzZXIgdGhhdCB3ZSBjb3VsZG4ndCBmaW5kIGEgdXNlYWJsZSAqLworICAgIC8qIHdpbnNvY2suZGxsLiAgICAgKi8KKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisKKyAgLyogQ29uZmlybSB0aGF0IHRoZSBXaW5kb3dzIFNvY2tldHMgRExMIHN1cHBvcnRzIHdoYXQgd2UgbmVlZC4qLworICAvKiBOb3RlIHRoYXQgaWYgdGhlIERMTCBzdXBwb3J0cyB2ZXJzaW9ucyBncmVhdGVyICovCisgIC8qIHRoYW4gd1ZlcnNpb25SZXF1ZXN0ZWQsIGl0IHdpbGwgc3RpbGwgcmV0dXJuICovCisgIC8qIHdWZXJzaW9uUmVxdWVzdGVkIGluIHdWZXJzaW9uLiB3SGlnaFZlcnNpb24gY29udGFpbnMgdGhlICovCisgIC8qIGhpZ2hlc3Qgc3VwcG9ydGVkIHZlcnNpb24uICovCisKKyAgaWYoTE9CWVRFKCB3c2FEYXRhLndWZXJzaW9uICkgIT0gTE9CWVRFKHdWZXJzaW9uUmVxdWVzdGVkKSB8fAorICAgICBISUJZVEUoIHdzYURhdGEud1ZlcnNpb24gKSAhPSBISUJZVEUod1ZlcnNpb25SZXF1ZXN0ZWQpICkgeworICAgIC8qIFRlbGwgdGhlIHVzZXIgdGhhdCB3ZSBjb3VsZG4ndCBmaW5kIGEgdXNlYWJsZSAqLworCisgICAgLyogd2luc29jay5kbGwuICovCisgICAgV1NBQ2xlYW51cCgpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorICAvKiBUaGUgV2luZG93cyBTb2NrZXRzIERMTCBpcyBhY2NlcHRhYmxlLiBQcm9jZWVkLiAqLworI2VsaWYgZGVmaW5lZChVU0VfTFdJUFNPQ0spCisgIGx3aXBfaW5pdCgpOworI2VuZGlmCisKKyNpZmRlZiBVU0VfV0lORE9XU19TU1BJCisgIHsKKyAgICBDVVJMY29kZSBlcnIgPSBDdXJsX3NzcGlfZ2xvYmFsX2luaXQoKTsKKyAgICBpZihlcnIgIT0gQ1VSTEVfT0spCisgICAgICByZXR1cm4gZXJyOworICB9CisjZW5kaWYKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKyNpZmRlZiBVU0VfTElCSUROCisvKgorICogSW5pdGlhbGlzZSB1c2Ugb2YgSUROQSBsaWJyYXJ5LgorICogSXQgZmFsbHMgYmFjayB0byBBU0NJSSBpZiAkQ0hBUlNFVCBpc24ndCBkZWZpbmVkLiBUaGlzIGRvZXNuJ3Qgd29yayBmb3IKKyAqIGlkbmFfdG9fYXNjaWlfbHooKS4KKyAqLworc3RhdGljIHZvaWQgaWRuYV9pbml0ICh2b2lkKQoreworI2lmZGVmIFdJTjMyCisgIGNoYXIgYnVmWzYwXTsKKyAgVUlOVCBjcCA9IEdldEFDUCgpOworCisgIGlmKCFnZXRlbnYoIkNIQVJTRVQiKSAmJiBjcCA+IDApIHsKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiQ0hBUlNFVD1jcCV1IiwgY3ApOworICAgIHB1dGVudihidWYpOworICB9CisjZWxzZQorICAvKiB0byBkbz8gKi8KKyNlbmRpZgorfQorI2VuZGlmICAvKiBVU0VfTElCSUROICovCisKKy8qIHRydWUgZ2xvYmFscyAtLSBmb3IgY3VybF9nbG9iYWxfaW5pdCgpIGFuZCBjdXJsX2dsb2JhbF9jbGVhbnVwKCkgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgIGluaXRpYWxpemVkOworc3RhdGljIGxvbmcgICAgICAgICAgaW5pdF9mbGFnczsKKworLyoKKyAqIHN0cmR1cCAoYW5kIG90aGVyIG1lbW9yeSBmdW5jdGlvbnMpIGlzIHJlZGVmaW5lZCBpbiBjb21wbGljYXRlZAorICogd2F5cywgYnV0IGF0IHRoaXMgcG9pbnQgaXQgbXVzdCBiZSBkZWZpbmVkIGFzIHRoZSBzeXN0ZW0tc3VwcGxpZWQgc3RyZHVwCisgKiBzbyB0aGUgY2FsbGJhY2sgcG9pbnRlciBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuCisgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCisjZGVmaW5lIHN5c3RlbV9zdHJkdXAgX3N0cmR1cAorI2VsaWYgIWRlZmluZWQoSEFWRV9TVFJEVVApCisjZGVmaW5lIHN5c3RlbV9zdHJkdXAgY3VybHhfc3RyZHVwCisjZWxzZQorI2RlZmluZSBzeXN0ZW1fc3RyZHVwIHN0cmR1cAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9ETEwpICYmICFkZWZpbmVkKF9fUE9DQ19fKQorIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjMyKSAvKiBNU1ZDIGV4dGVuc2lvbiwgZGxsaW1wb3J0IGlkZW50aXR5ICovCisjZW5kaWYKKworI2lmbmRlZiBfX1NZTUJJQU4zMl9fCisvKgorICogSWYgYSBtZW1vcnktdXNpbmcgZnVuY3Rpb24gKGxpa2UgY3VybF9nZXRlbnYpIGlzIHVzZWQgYmVmb3JlCisgKiBjdXJsX2dsb2JhbF9pbml0KCkgaXMgY2FsbGVkLCB3ZSBuZWVkIHRvIGhhdmUgdGhlc2UgcG9pbnRlcnMgc2V0IGFscmVhZHkuCisgKi8KK2N1cmxfbWFsbG9jX2NhbGxiYWNrIEN1cmxfY21hbGxvYyA9IChjdXJsX21hbGxvY19jYWxsYmFjayltYWxsb2M7CitjdXJsX2ZyZWVfY2FsbGJhY2sgQ3VybF9jZnJlZSA9IChjdXJsX2ZyZWVfY2FsbGJhY2spZnJlZTsKK2N1cmxfcmVhbGxvY19jYWxsYmFjayBDdXJsX2NyZWFsbG9jID0gKGN1cmxfcmVhbGxvY19jYWxsYmFjaylyZWFsbG9jOworY3VybF9zdHJkdXBfY2FsbGJhY2sgQ3VybF9jc3RyZHVwID0gKGN1cmxfc3RyZHVwX2NhbGxiYWNrKXN5c3RlbV9zdHJkdXA7CitjdXJsX2NhbGxvY19jYWxsYmFjayBDdXJsX2NjYWxsb2MgPSAoY3VybF9jYWxsb2NfY2FsbGJhY2spY2FsbG9jOworI2Vsc2UKKy8qCisgKiBTeW1iaWFuIE9TIGRvZXNuJ3Qgc3VwcG9ydCBpbml0aWFsaXphdGlvbiB0byBjb2RlIGluIHdyaXRlYWJsZSBzdGF0aWMgZGF0YS4KKyAqIEluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIgaW4gdGhlIGN1cmxfZ2xvYmFsX2luaXQoKSBjYWxsLgorICovCitjdXJsX21hbGxvY19jYWxsYmFjayBDdXJsX2NtYWxsb2M7CitjdXJsX2ZyZWVfY2FsbGJhY2sgQ3VybF9jZnJlZTsKK2N1cmxfcmVhbGxvY19jYWxsYmFjayBDdXJsX2NyZWFsbG9jOworY3VybF9zdHJkdXBfY2FsbGJhY2sgQ3VybF9jc3RyZHVwOworY3VybF9jYWxsb2NfY2FsbGJhY2sgQ3VybF9jY2FsbG9jOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9ETEwpICYmICFkZWZpbmVkKF9fUE9DQ19fKQorIyAgcHJhZ21hIHdhcm5pbmcoZGVmYXVsdDo0MjMyKSAvKiBNU1ZDIGV4dGVuc2lvbiwgZGxsaW1wb3J0IGlkZW50aXR5ICovCisjZW5kaWYKKworLyoqCisgKiBjdXJsX2dsb2JhbF9pbml0KCkgZ2xvYmFsbHkgaW5pdGlhbGl6ZXMgY1VSTCBnaXZlbiBhIGJpdHdpc2Ugc2V0IG9mIHRoZQorICogZGlmZmVyZW50IGZlYXR1cmVzIG9mIHdoYXQgdG8gaW5pdGlhbGl6ZS4KKyAqLworQ1VSTGNvZGUgY3VybF9nbG9iYWxfaW5pdChsb25nIGZsYWdzKQoreworICBpZihpbml0aWFsaXplZCsrKQorICAgIHJldHVybiBDVVJMRV9PSzsKKworICAvKiBTZXR1cCB0aGUgZGVmYXVsdCBtZW1vcnkgZnVuY3Rpb25zIGhlcmUgKGFnYWluKSAqLworICBDdXJsX2NtYWxsb2MgPSAoY3VybF9tYWxsb2NfY2FsbGJhY2spbWFsbG9jOworICBDdXJsX2NmcmVlID0gKGN1cmxfZnJlZV9jYWxsYmFjaylmcmVlOworICBDdXJsX2NyZWFsbG9jID0gKGN1cmxfcmVhbGxvY19jYWxsYmFjaylyZWFsbG9jOworICBDdXJsX2NzdHJkdXAgPSAoY3VybF9zdHJkdXBfY2FsbGJhY2spc3lzdGVtX3N0cmR1cDsKKyAgQ3VybF9jY2FsbG9jID0gKGN1cmxfY2FsbG9jX2NhbGxiYWNrKWNhbGxvYzsKKworICBpZihmbGFncyAmIENVUkxfR0xPQkFMX1NTTCkKKyAgICBpZighQ3VybF9zc2xfaW5pdCgpKSB7CisgICAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogQ3VybF9zc2xfaW5pdCBmYWlsZWRcbiIpKTsKKyAgICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICB9CisKKyAgaWYoZmxhZ3MgJiBDVVJMX0dMT0JBTF9XSU4zMikKKyAgICBpZih3aW4zMl9pbml0KCkgIT0gQ1VSTEVfT0spIHsKKyAgICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiB3aW4zMl9pbml0IGZhaWxlZFxuIikpOworICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIH0KKworI2lmZGVmIF9fQU1JR0FfXworICBpZighYW1pZ2FfaW5pdCgpKSB7CisgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGFtaWdhX2luaXQgZmFpbGVkXG4iKSk7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisjZW5kaWYKKworI2lmZGVmIE5FVFdBUkUKKyAgaWYobmV0d2FyZV9pbml0KCkpIHsKKyAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBMT05HIG5hbWVzcGFjZSBub3QgYXZhaWxhYmxlXG4iKSk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgVVNFX0xJQklETgorICBpZG5hX2luaXQoKTsKKyNlbmRpZgorCisgIGlmKEN1cmxfcmVzb2x2ZXJfZ2xvYmFsX2luaXQoKSAhPSBDVVJMRV9PSykgeworICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiByZXNvbHZlcl9nbG9iYWxfaW5pdCBmYWlsZWRcbiIpKTsKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIH0KKworI2lmIGRlZmluZWQoVVNFX0xJQlNTSDIpICYmIGRlZmluZWQoSEFWRV9MSUJTU0gyX0lOSVQpCisgIGlmKGxpYnNzaDJfaW5pdCgwKSkgeworICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBsaWJzc2gyX2luaXQgZmFpbGVkXG4iKSk7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisjZW5kaWYKKworICBpbml0X2ZsYWdzICA9IGZsYWdzOworCisgIC8qIFByZXNldCBwc2V1ZG8tcmFuZG9tIG51bWJlciBzZXF1ZW5jZS4gKi8KKworICBDdXJsX3NyYW5kKCk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogY3VybF9nbG9iYWxfaW5pdF9tZW0oKSBnbG9iYWxseSBpbml0aWFsaXplcyBjVVJMIGFuZCBhbHNvIHJlZ2lzdGVycyB0aGUKKyAqIHVzZXIgcHJvdmlkZWQgY2FsbGJhY2sgcm91dGluZXMuCisgKi8KK0NVUkxjb2RlIGN1cmxfZ2xvYmFsX2luaXRfbWVtKGxvbmcgZmxhZ3MsIGN1cmxfbWFsbG9jX2NhbGxiYWNrIG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2ZyZWVfY2FsbGJhY2sgZiwgY3VybF9yZWFsbG9jX2NhbGxiYWNrIHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3N0cmR1cF9jYWxsYmFjayBzLCBjdXJsX2NhbGxvY19jYWxsYmFjayBjKQoreworICBDVVJMY29kZSBjb2RlID0gQ1VSTEVfT0s7CisKKyAgLyogSW52YWxpZCBpbnB1dCwgcmV0dXJuIGltbWVkaWF0ZWx5ICovCisgIGlmKCFtIHx8ICFmIHx8ICFyIHx8ICFzIHx8ICFjKQorICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKworICAvKiBBbHJlYWR5IGluaXRpYWxpemVkLCBkb24ndCBkbyBpdCBhZ2FpbiAqLworICBpZihpbml0aWFsaXplZCkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgLyogQ2FsbCB0aGUgYWN0dWFsIGluaXQgZnVuY3Rpb24gZmlyc3QgKi8KKyAgY29kZSA9IGN1cmxfZ2xvYmFsX2luaXQoZmxhZ3MpOworICBpZihjb2RlID09IENVUkxFX09LKSB7CisgICAgQ3VybF9jbWFsbG9jID0gbTsKKyAgICBDdXJsX2NmcmVlID0gZjsKKyAgICBDdXJsX2NzdHJkdXAgPSBzOworICAgIEN1cmxfY3JlYWxsb2MgPSByOworICAgIEN1cmxfY2NhbGxvYyA9IGM7CisgIH0KKworICByZXR1cm4gY29kZTsKK30KKworLyoqCisgKiBjdXJsX2dsb2JhbF9jbGVhbnVwKCkgZ2xvYmFsbHkgY2xlYW51cHMgY1VSTCwgdXNlcyB0aGUgdmFsdWUgb2YKKyAqICJpbml0X2ZsYWdzIiB0byBkZXRlcm1pbmUgd2hhdCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIGFuZCB3aGF0IGRvZXNuJ3QuCisgKi8KK3ZvaWQgY3VybF9nbG9iYWxfY2xlYW51cCh2b2lkKQoreworICBpZighaW5pdGlhbGl6ZWQpCisgICAgcmV0dXJuOworCisgIGlmKC0taW5pdGlhbGl6ZWQpCisgICAgcmV0dXJuOworCisgIEN1cmxfZ2xvYmFsX2hvc3RfY2FjaGVfZHRvcigpOworCisgIGlmKGluaXRfZmxhZ3MgJiBDVVJMX0dMT0JBTF9TU0wpCisgICAgQ3VybF9zc2xfY2xlYW51cCgpOworCisgIEN1cmxfcmVzb2x2ZXJfZ2xvYmFsX2NsZWFudXAoKTsKKworICBpZihpbml0X2ZsYWdzICYgQ1VSTF9HTE9CQUxfV0lOMzIpCisgICAgd2luMzJfY2xlYW51cCgpOworCisjaWZkZWYgX19BTUlHQV9fCisgIGFtaWdhX2NsZWFudXAoKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChVU0VfTElCU1NIMikgJiYgZGVmaW5lZChIQVZFX0xJQlNTSDJfRVhJVCkKKyAgKHZvaWQpbGlic3NoMl9leGl0KCk7CisjZW5kaWYKKworICBpbml0X2ZsYWdzICA9IDA7Cit9CisKKy8qCisgKiBjdXJsX2Vhc3lfaW5pdCgpIGlzIHRoZSBleHRlcm5hbCBpbnRlcmZhY2UgdG8gYWxsb2MsIHNldHVwIGFuZCBpbml0IGFuCisgKiBlYXN5IGhhbmRsZSB0aGF0IGlzIHJldHVybmVkLiBJZiBhbnl0aGluZyBnb2VzIHdyb25nLCBOVUxMIGlzIHJldHVybmVkLgorICovCitDVVJMICpjdXJsX2Vhc3lfaW5pdCh2b2lkKQoreworICBDVVJMY29kZSByZXM7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhOworCisgIC8qIE1ha2Ugc3VyZSB3ZSBpbml0ZWQgdGhlIGdsb2JhbCBTU0wgc3R1ZmYgKi8KKyAgaWYoIWluaXRpYWxpemVkKSB7CisgICAgcmVzID0gY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9ERUZBVUxUKTsKKyAgICBpZihyZXMpIHsKKyAgICAgIC8qIHNvbWV0aGluZyBpbiB0aGUgZ2xvYmFsIGluaXQgZmFpbGVkLCByZXR1cm4gbm90aGluZyAqLworICAgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGN1cmxfZ2xvYmFsX2luaXQgZmFpbGVkXG4iKSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0KKworICAvKiBXZSB1c2UgY3VybF9vcGVuKCkgd2l0aCB1bmRlZmluZWQgVVJMIHNvIGZhciAqLworICByZXMgPSBDdXJsX29wZW4oJmRhdGEpOworICBpZihyZXMgIT0gQ1VSTEVfT0spIHsKKyAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogQ3VybF9vcGVuIGZhaWxlZFxuIikpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgcmV0dXJuIGRhdGE7Cit9CisKKy8qCisgKiBjdXJsX2Vhc3lfc2V0b3B0KCkgaXMgdGhlIGV4dGVybmFsIGludGVyZmFjZSBmb3Igc2V0dGluZyBvcHRpb25zIG9uIGFuCisgKiBlYXN5IGhhbmRsZS4KKyAqLworCisjdW5kZWYgY3VybF9lYXN5X3NldG9wdAorQ1VSTGNvZGUgY3VybF9lYXN5X3NldG9wdChDVVJMICpjdXJsLCBDVVJMb3B0aW9uIHRhZywgLi4uKQoreworICB2YV9saXN0IGFyZzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjdXJsOworICBDVVJMY29kZSByZXQ7CisKKyAgaWYoIWN1cmwpCisgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKKworICB2YV9zdGFydChhcmcsIHRhZyk7CisKKyAgcmV0ID0gQ3VybF9zZXRvcHQoZGF0YSwgdGFnLCBhcmcpOworCisgIHZhX2VuZChhcmcpOworICByZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ1VSTF9NVUxUSUVBU1kKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZnVuY3Rpb24gaXMgc3RpbGwgb25seSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gSXQgbWFrZXMgYSBncmVhdCB3YXkKKyAqIHRvIHJ1biB0aGUgZnVsbCB0ZXN0IHN1aXRlIG9uIHRoZSBtdWx0aSBpbnRlcmZhY2UgaW5zdGVhZCBvZiB0aGUgZWFzeSBvbmUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhlICpuZXcqIGN1cmxfZWFzeV9wZXJmb3JtKCkgaXMgdGhlIGV4dGVybmFsIGludGVyZmFjZSB0aGF0IHBlcmZvcm1zIGEKKyAqIHRyYW5zZmVyIHByZXZpb3VzbHkgc2V0dXAuCisgKgorICogV3JhcHBlci1mdW5jdGlvbiB0aGF0OiBjcmVhdGVzIGEgbXVsdGkgaGFuZGxlLCBhZGRzIHRoZSBlYXN5IGhhbmRsZSB0byBpdCwKKyAqIHJ1bnMgY3VybF9tdWx0aV9wZXJmb3JtKCkgdW50aWwgdGhlIHRyYW5zZmVyIGlzIGRvbmUsIHRoZW4gZGV0YWNoZXMgdGhlCisgKiBlYXN5IGhhbmRsZSwgZGVzdHJveXMgdGhlIG11bHRpIGhhbmRsZSBhbmQgcmV0dXJucyB0aGUgZWFzeSBoYW5kbGUncyByZXR1cm4KKyAqIGNvZGUuIFRoaXMgd2lsbCBtYWtlIGV2ZXJ5dGhpbmcgaW50ZXJuYWxseSB1c2UgYW5kIGFzc3VtZSBtdWx0aSBpbnRlcmZhY2UuCisgKi8KK0NVUkxjb2RlIGN1cmxfZWFzeV9wZXJmb3JtKENVUkwgKmVhc3kpCit7CisgIENVUkxNICptdWx0aTsKKyAgQ1VSTE1jb2RlIG1jb2RlOworICBDVVJMY29kZSBjb2RlID0gQ1VSTEVfT0s7CisgIGludCBzdGlsbF9ydW5uaW5nOworICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICBpbnQgcmM7CisgIENVUkxNc2cgKm1zZzsKKyAgZmRfc2V0IGZkcmVhZDsKKyAgZmRfc2V0IGZkd3JpdGU7CisgIGZkX3NldCBmZGV4Y2VwOworICBpbnQgbWF4ZmQ7CisKKyAgaWYoIWVhc3kpCisgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKKworICBtdWx0aSA9IGN1cmxfbXVsdGlfaW5pdCgpOworICBpZighbXVsdGkpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgbWNvZGUgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUobXVsdGksIGVhc3kpOworICBpZihtY29kZSkgeworICAgIGN1cmxfbXVsdGlfY2xlYW51cChtdWx0aSk7CisgICAgaWYobWNvZGUgPT0gQ1VSTE1fT1VUX09GX01FTU9SWSkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGVsc2UKKyAgICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorCisgIC8qIHdlIHN0YXJ0IHNvbWUgYWN0aW9uIGJ5IGNhbGxpbmcgcGVyZm9ybSByaWdodCBhd2F5ICovCisKKyAgZG8geworICAgIHdoaWxlKENVUkxNX0NBTExfTVVMVElfUEVSRk9STSA9PQorICAgICAgICAgIGN1cmxfbXVsdGlfcGVyZm9ybShtdWx0aSwgJnN0aWxsX3J1bm5pbmcpKTsKKworICAgIGlmKCFzdGlsbF9ydW5uaW5nKQorICAgICAgYnJlYWs7CisKKyAgICBGRF9aRVJPKCZmZHJlYWQpOworICAgIEZEX1pFUk8oJmZkd3JpdGUpOworICAgIEZEX1pFUk8oJmZkZXhjZXApOworCisgICAgLyogdGltZW91dCBvbmNlIHBlciBzZWNvbmQgKi8KKyAgICB0aW1lb3V0LnR2X3NlYyA9IDE7CisgICAgdGltZW91dC50dl91c2VjID0gMDsKKworICAgIC8qIE9sZCBkZXByZWNhdGVkIHN0eWxlOiBnZXQgZmlsZSBkZXNjcmlwdG9ycyBmcm9tIHRoZSB0cmFuc2ZlcnMgKi8KKyAgICBjdXJsX211bHRpX2Zkc2V0KG11bHRpLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZtYXhmZCk7CisgICAgcmMgPSBDdXJsX3NlbGVjdChtYXhmZCsxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZ0aW1lb3V0KTsKKworICAgIC8qIFRoZSB3YXkgaXMgdG8gZXh0cmFjdCB0aGUgc29ja2V0cyBhbmQgd2FpdCBmb3IgdGhlbSB3aXRob3V0IHVzaW5nCisgICAgICAgc2VsZWN0LiBUaGlzIHdob2xlIGFsdGVybmF0aXZlIHZlcnNpb24gc2hvdWxkIHByb2JhYmx5IHJhdGhlciB1c2UgdGhlCisgICAgICAgY3VybF9tdWx0aV9zb2NrZXQoKSBhcHByb2FjaC4gKi8KKworICAgIGlmKHJjID09IC0xKQorICAgICAgLyogc2VsZWN0IGVycm9yICovCisgICAgICBicmVhazsKKworICAgIC8qIHRpbWVvdXQgb3IgZGF0YSB0byBzZW5kL3JlY2VpdmUgPT4gbG9vcCEgKi8KKyAgfSB3aGlsZShzdGlsbF9ydW5uaW5nKTsKKworICBtc2cgPSBjdXJsX211bHRpX2luZm9fcmVhZChtdWx0aSwgJnJjKTsKKyAgaWYobXNnKQorICAgIGNvZGUgPSBtc2ctPmRhdGEucmVzdWx0OworCisgIG1jb2RlID0gY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKG11bHRpLCBlYXN5KTsKKyAgLyogd2hhdCB0byBkbyBpZiBpdCBmYWlscz8gKi8KKworICBtY29kZSA9IGN1cmxfbXVsdGlfY2xlYW51cChtdWx0aSk7CisgIC8qIHdoYXQgdG8gZG8gaWYgaXQgZmFpbHM/ICovCisKKyAgcmV0dXJuIGNvZGU7Cit9CisjZWxzZQorLyoKKyAqIGN1cmxfZWFzeV9wZXJmb3JtKCkgaXMgdGhlIGV4dGVybmFsIGludGVyZmFjZSB0aGF0IHBlcmZvcm1zIGEgdHJhbnNmZXIKKyAqIHByZXZpb3VzbHkgc2V0dXAuCisgKi8KK0NVUkxjb2RlIGN1cmxfZWFzeV9wZXJmb3JtKENVUkwgKmN1cmwpCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gKHN0cnVjdCBTZXNzaW9uSGFuZGxlICopY3VybDsKKworICBpZighZGF0YSkKKyAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworCisgIGlmKCEgKGRhdGEtPnNoYXJlICYmIGRhdGEtPnNoYXJlLT5ob3N0Y2FjaGUpKSB7CisgICAgLyogdGhpcyBoYW5kbGUgaXMgbm90IHVzaW5nIGEgc2hhcmVkIGRucyBjYWNoZSAqLworCisgICAgaWYoZGF0YS0+c2V0Lmdsb2JhbF9kbnNfY2FjaGUgJiYKKyAgICAgICAoZGF0YS0+ZG5zLmhvc3RjYWNoZXR5cGUgIT0gSENBQ0hFX0dMT0JBTCkpIHsKKyAgICAgIC8qIGdsb2JhbCBkbnMgY2FjaGUgd2FzIHJlcXVlc3RlZCBidXQgc3RpbGwgaXNuJ3QgKi8KKyAgICAgIHN0cnVjdCBjdXJsX2hhc2ggKnB0cjsKKworICAgICAgaWYoZGF0YS0+ZG5zLmhvc3RjYWNoZXR5cGUgPT0gSENBQ0hFX1BSSVZBVEUpIHsKKyAgICAgICAgLyogaWYgdGhlIGN1cnJlbnQgY2FjaGUgaXMgcHJpdmF0ZSwga2lsbCBpdCBmaXJzdCAqLworICAgICAgICBDdXJsX2hhc2hfZGVzdHJveShkYXRhLT5kbnMuaG9zdGNhY2hlKTsKKyAgICAgICAgZGF0YS0+ZG5zLmhvc3RjYWNoZXR5cGUgPSBIQ0FDSEVfTk9ORTsKKyAgICAgICAgZGF0YS0+ZG5zLmhvc3RjYWNoZSA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIHB0ciA9IEN1cmxfZ2xvYmFsX2hvc3RfY2FjaGVfaW5pdCgpOworICAgICAgaWYocHRyKSB7CisgICAgICAgIC8qIG9ubHkgZG8gdGhpcyBpZiB0aGUgZ2xvYmFsIGNhY2hlIGluaXQgd29ya3MgKi8KKyAgICAgICAgZGF0YS0+ZG5zLmhvc3RjYWNoZSA9IHB0cjsKKyAgICAgICAgZGF0YS0+ZG5zLmhvc3RjYWNoZXR5cGUgPSBIQ0FDSEVfR0xPQkFMOworICAgICAgfQorICAgIH0KKworICAgIGlmKCFkYXRhLT5kbnMuaG9zdGNhY2hlKSB7CisgICAgICBkYXRhLT5kbnMuaG9zdGNhY2hldHlwZSA9IEhDQUNIRV9QUklWQVRFOworICAgICAgZGF0YS0+ZG5zLmhvc3RjYWNoZSA9IEN1cmxfbWtfZG5zY2FjaGUoKTsKKworICAgICAgaWYoIWRhdGEtPmRucy5ob3N0Y2FjaGUpCisgICAgICAgIC8qIFdoaWxlIHdlIHBvc3NpYmx5IGNvdWxkIHN1cnZpdmUgYW5kIGRvIGdvb2Qgd2l0aG91dCBhIGhvc3QgY2FjaGUsCisgICAgICAgICAgIHRoZSBmYWN0IHRoYXQgY3JlYXRpbmcgaXQgZmFpbGVkIGluZGljYXRlcyB0aGF0IHRoaW5ncyBhcmUgdHJ1bHkKKyAgICAgICAgICAgc2NyZXdlZCB1cCBhbmQgd2Ugc2hvdWxkIGJhaWwgb3V0ISAqLworICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisKKyAgfQorCisgIGlmKCFkYXRhLT5zdGF0ZS5jb25uYykgeworICAgIC8qIG9vcHMsIG5vIGNvbm5lY3Rpb24gY2FjaGUsIG1ha2Ugb25lIHVwICovCisgICAgZGF0YS0+c3RhdGUuY29ubmMgPSBDdXJsX21rX2Nvbm5jKENPTk5DQUNIRV9QUklWQVRFLCAtMUwpOworICAgIGlmKCFkYXRhLT5zdGF0ZS5jb25uYykKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgcmV0dXJuIEN1cmxfcGVyZm9ybShkYXRhKTsKK30KKyNlbmRpZgorCisvKgorICogY3VybF9lYXN5X2NsZWFudXAoKSBpcyB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlIHRvIGNsZWFuaW5nL2ZyZWVpbmcgdGhlIGdpdmVuCisgKiBlYXN5IGhhbmRsZS4KKyAqLwordm9pZCBjdXJsX2Vhc3lfY2xlYW51cChDVVJMICpjdXJsKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqKWN1cmw7CisKKyAgaWYoIWRhdGEpCisgICAgcmV0dXJuOworCisgIEN1cmxfY2xvc2UoZGF0YSk7Cit9CisKKy8qCisgKiBTdG9yZSBhIHBvaW50ZWQgdG8gdGhlIG11bHRpIGhhbmRsZSB3aXRoaW4gdGhlIGVhc3kgaGFuZGxlJ3MgZGF0YSBzdHJ1Y3QuCisgKi8KK3ZvaWQgQ3VybF9lYXN5X2FkZG11bHRpKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbXVsdGkpCit7CisgIGRhdGEtPm11bHRpID0gbXVsdGk7CisgIGlmKG11bHRpID09IE5VTEwpCisgICAgLyogdGhlIGFzc29jaWF0aW9uIGlzIGNsZWFyZWQsIG1hcmsgdGhlIGVhc3kgaGFuZGxlIGFzIG5vdCB1c2VkIGJ5IGFuCisgICAgICAgaW50ZXJmYWNlICovCisgICAgZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgPSBDdXJsX2lmX25vbmU7Cit9CisKK3ZvaWQgQ3VybF9lYXN5X2luaXRIYW5kbGVEYXRhKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICAgIG1lbXNldCgmZGF0YS0+cmVxLCAwLCBzaXplb2Yoc3RydWN0IFNpbmdsZVJlcXVlc3QpKTsKKworICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IC0xOworfQorCisvKgorICogY3VybF9lYXN5X2dldGluZm8oKSBpcyBhbiBleHRlcm5hbCBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgYW4gYXBwIHRvIHJldHJpZXZlCisgKiBpbmZvcm1hdGlvbiBmcm9tIGEgcGVyZm9ybWVkIHRyYW5zZmVyIGFuZCBzaW1pbGFyLgorICovCisjdW5kZWYgY3VybF9lYXN5X2dldGluZm8KK0NVUkxjb2RlIGN1cmxfZWFzeV9nZXRpbmZvKENVUkwgKmN1cmwsIENVUkxJTkZPIGluZm8sIC4uLikKK3sKKyAgdmFfbGlzdCBhcmc7CisgIHZvaWQgKnBhcmFtcDsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSAoc3RydWN0IFNlc3Npb25IYW5kbGUgKiljdXJsOworCisgIHZhX3N0YXJ0KGFyZywgaW5mbyk7CisgIHBhcmFtcCA9IHZhX2FyZyhhcmcsIHZvaWQgKik7CisKKyAgcmV0dXJuIEN1cmxfZ2V0aW5mbyhkYXRhLCBpbmZvLCBwYXJhbXApOworfQorCisvKgorICogY3VybF9lYXN5X2R1cGhhbmRsZSgpIGlzIGFuIGV4dGVybmFsIGludGVyZmFjZSB0byBhbGxvdyBkdXBsaWNhdGlvbiBvZiBhCisgKiBnaXZlbiBpbnB1dCBlYXN5IGhhbmRsZS4gVGhlIHJldHVybmVkIGhhbmRsZSB3aWxsIGJlIGEgbmV3IHdvcmtpbmcgaGFuZGxlCisgKiB3aXRoIGFsbCBvcHRpb25zIHNldCBleGFjdGx5IGFzIHRoZSBpbnB1dCBzb3VyY2UgaGFuZGxlLgorICovCitDVVJMICpjdXJsX2Vhc3lfZHVwaGFuZGxlKENVUkwgKmluY3VybCkKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9KHN0cnVjdCBTZXNzaW9uSGFuZGxlICopaW5jdXJsOworCisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpvdXRjdXJsID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSkpOworICBpZihOVUxMID09IG91dGN1cmwpCisgICAgZ290byBmYWlsOworCisgIC8qCisgICAqIFdlIHNldHVwIGEgZmV3IGJ1ZmZlcnMgd2UgbmVlZC4gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhlbQorICAgKiBnZXQgc2V0dXAgb24tZGVtYW5kIGluIHRoZSBjb2RlLCBhcyB0aGF0IHdvdWxkIHByb2JhYmx5IGRlY3JlYXNlCisgICAqIHRoZSBsaWtlbGluZXNzIG9mIHVzIGZvcmdldHRpbmcgdG8gaW5pdCBhIGJ1ZmZlciBoZXJlIGluIHRoZSBmdXR1cmUuCisgICAqLworICBvdXRjdXJsLT5zdGF0ZS5oZWFkZXJidWZmID0gbWFsbG9jKEhFQURFUlNJWkUpOworICBpZighb3V0Y3VybC0+c3RhdGUuaGVhZGVyYnVmZikKKyAgICBnb3RvIGZhaWw7CisgIG91dGN1cmwtPnN0YXRlLmhlYWRlcnNpemUgPSBIRUFERVJTSVpFOworCisgIC8qIGNvcHkgYWxsIHVzZXJkZWZpbmVkIHZhbHVlcyAqLworICBpZihDdXJsX2R1cHNldChvdXRjdXJsLCBkYXRhKSAhPSBDVVJMRV9PSykKKyAgICBnb3RvIGZhaWw7CisKKyAgLyogdGhlIGNvbm5lY3Rpb24gY2FjaGUgaXMgc2V0dXAgb24gZGVtYW5kICovCisgIG91dGN1cmwtPnN0YXRlLmNvbm5jID0gTlVMTDsKKworICBvdXRjdXJsLT5zdGF0ZS5sYXN0Y29ubmVjdCA9IC0xOworCisgIG91dGN1cmwtPnByb2dyZXNzLmZsYWdzICAgID0gZGF0YS0+cHJvZ3Jlc3MuZmxhZ3M7CisgIG91dGN1cmwtPnByb2dyZXNzLmNhbGxiYWNrID0gZGF0YS0+cHJvZ3Jlc3MuY2FsbGJhY2s7CisKKyAgaWYoZGF0YS0+Y29va2llcykgeworICAgIC8qIElmIGNvb2tpZXMgYXJlIGVuYWJsZWQgaW4gdGhlIHBhcmVudCBoYW5kbGUsIHdlIGVuYWJsZSB0aGVtCisgICAgICAgaW4gdGhlIGNsb25lIGFzIHdlbGwhICovCisgICAgb3V0Y3VybC0+Y29va2llcyA9IEN1cmxfY29va2llX2luaXQoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5jb29raWVzLT5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRjdXJsLT5jb29raWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5jb29raWVzZXNzaW9uKTsKKyAgICBpZighb3V0Y3VybC0+Y29va2llcykKKyAgICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIC8qIGR1cGxpY2F0ZSBhbGwgdmFsdWVzIGluICdjaGFuZ2UnICovCisgIGlmKGRhdGEtPmNoYW5nZS5jb29raWVsaXN0KSB7CisgICAgb3V0Y3VybC0+Y2hhbmdlLmNvb2tpZWxpc3QgPQorICAgICAgQ3VybF9zbGlzdF9kdXBsaWNhdGUoZGF0YS0+Y2hhbmdlLmNvb2tpZWxpc3QpOworICAgIGlmKCFvdXRjdXJsLT5jaGFuZ2UuY29va2llbGlzdCkKKyAgICAgIGdvdG8gZmFpbDsKKyAgfQorCisgIGlmKGRhdGEtPmNoYW5nZS51cmwpIHsKKyAgICBvdXRjdXJsLT5jaGFuZ2UudXJsID0gc3RyZHVwKGRhdGEtPmNoYW5nZS51cmwpOworICAgIGlmKCFvdXRjdXJsLT5jaGFuZ2UudXJsKQorICAgICAgZ290byBmYWlsOworICAgIG91dGN1cmwtPmNoYW5nZS51cmxfYWxsb2MgPSBUUlVFOworICB9CisKKyAgaWYoZGF0YS0+Y2hhbmdlLnJlZmVyZXIpIHsKKyAgICBvdXRjdXJsLT5jaGFuZ2UucmVmZXJlciA9IHN0cmR1cChkYXRhLT5jaGFuZ2UucmVmZXJlcik7CisgICAgaWYoIW91dGN1cmwtPmNoYW5nZS5yZWZlcmVyKQorICAgICAgZ290byBmYWlsOworICAgIG91dGN1cmwtPmNoYW5nZS5yZWZlcmVyX2FsbG9jID0gVFJVRTsKKyAgfQorCisgIC8qIENsb25lIHRoZSByZXNvbHZlciBoYW5kbGUsIGlmIHByZXNlbnQsIGZvciB0aGUgbmV3IGhhbmRsZSAqLworICBpZihDdXJsX3Jlc29sdmVyX2R1cGhhbmRsZSgmb3V0Y3VybC0+c3RhdGUucmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc29sdmVyKSAhPSBDVVJMRV9PSykKKyAgICBnb3RvIGZhaWw7CisKKyAgQ3VybF9jb252ZXJ0X3NldHVwKG91dGN1cmwpOworCisgIEN1cmxfZWFzeV9pbml0SGFuZGxlRGF0YShvdXRjdXJsKTsKKworICBvdXRjdXJsLT5tYWdpYyA9IENVUkxFQVNZX01BR0lDX05VTUJFUjsKKworICAvKiB3ZSByZWFjaCB0aGlzIHBvaW50IGFuZCB0aHVzIHdlIGFyZSBPSyAqLworCisgIHJldHVybiBvdXRjdXJsOworCisgIGZhaWw6CisKKyAgaWYob3V0Y3VybCkgeworICAgIGlmKG91dGN1cmwtPnN0YXRlLmNvbm5jICYmCisgICAgICAgKG91dGN1cmwtPnN0YXRlLmNvbm5jLT50eXBlID09IENPTk5DQUNIRV9QUklWQVRFKSkgeworICAgICAgQ3VybF9ybV9jb25uYyhvdXRjdXJsLT5zdGF0ZS5jb25uYyk7CisgICAgICBvdXRjdXJsLT5zdGF0ZS5jb25uYyA9IE5VTEw7CisgICAgfQorICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwob3V0Y3VybC0+Y2hhbmdlLmNvb2tpZWxpc3QpOworICAgIG91dGN1cmwtPmNoYW5nZS5jb29raWVsaXN0ID0gTlVMTDsKKyAgICBDdXJsX3NhZmVmcmVlKG91dGN1cmwtPnN0YXRlLmhlYWRlcmJ1ZmYpOworICAgIEN1cmxfc2FmZWZyZWUob3V0Y3VybC0+Y2hhbmdlLnVybCk7CisgICAgQ3VybF9zYWZlZnJlZShvdXRjdXJsLT5jaGFuZ2UucmVmZXJlcik7CisgICAgQ3VybF9mcmVlc2V0KG91dGN1cmwpOworICAgIGZyZWUob3V0Y3VybCk7CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGN1cmxfZWFzeV9yZXNldCgpIGlzIGFuIGV4dGVybmFsIGludGVyZmFjZSB0aGF0IGFsbG93cyBhbiBhcHAgdG8gcmUtCisgKiBpbml0aWFsaXplIGEgc2Vzc2lvbiBoYW5kbGUgdG8gdGhlIGRlZmF1bHQgdmFsdWVzLgorICovCit2b2lkIGN1cmxfZWFzeV9yZXNldChDVVJMICpjdXJsKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqKWN1cmw7CisKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5wYXRoYnVmZmVyKTsKKworICBkYXRhLT5zdGF0ZS5wYXRoID0gTlVMTDsKKworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLnByb3RvLmdlbmVyaWMpOworCisgIC8qIHplcm8gb3V0IFVzZXJEZWZpbmVkIGRhdGE6ICovCisgIEN1cmxfZnJlZXNldChkYXRhKTsKKyAgbWVtc2V0KCZkYXRhLT5zZXQsIDAsIHNpemVvZihzdHJ1Y3QgVXNlckRlZmluZWQpKTsKKyAgKHZvaWQpQ3VybF9pbml0X3VzZXJkZWZpbmVkKCZkYXRhLT5zZXQpOworCisgIC8qIHplcm8gb3V0IFByb2dyZXNzIGRhdGE6ICovCisgIG1lbXNldCgmZGF0YS0+cHJvZ3Jlc3MsIDAsIHNpemVvZihzdHJ1Y3QgUHJvZ3Jlc3MpKTsKKworICAvKiBpbml0IEhhbmRsZSBkYXRhICovCisgIEN1cmxfZWFzeV9pbml0SGFuZGxlRGF0YShkYXRhKTsKKworICBkYXRhLT5wcm9ncmVzcy5mbGFncyB8PSBQR1JTX0hJREU7CisgIGRhdGEtPnN0YXRlLmN1cnJlbnRfc3BlZWQgPSAtMTsgLyogaW5pdCB0byBuZWdhdGl2ZSA9PSBpbXBvc3NpYmxlICovCit9CisKKy8qCisgKiBjdXJsX2Vhc3lfcGF1c2UoKSBhbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gcGF1c2Ugb3IgdW5wYXVzZSBhIHNwZWNpZmljCisgKiB0cmFuc2ZlciBhbmQgZGlyZWN0aW9uLiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGZ1bGwgbmV3IHN0YXRlIGZvciB0aGUKKyAqIGN1cnJlbnQgY29ubmVjdGlvbiB0aGlzIGVhc3kgaGFuZGxlIG9wZXJhdGVzIG9uLgorICoKKyAqIE5PVEU6IGlmIHlvdSBoYXZlIHRoZSByZWNlaXZpbmcgcGF1c2VkIGFuZCB5b3UgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHJlbW92ZQorICogdGhlIHBhdXNpbmcsIHlvdSBtYXkgZ2V0IHlvdXIgd3JpdGUgY2FsbGJhY2sgY2FsbGVkIGF0IHRoaXMgcG9pbnQuCisgKgorICogQWN0aW9uIGlzIGEgYml0bWFzayBjb25zaXN0aW5nIG9mIENVUkxQQVVTRV8qIGJpdHMgaW4gY3VybC9jdXJsLmgKKyAqLworQ1VSTGNvZGUgY3VybF9lYXN5X3BhdXNlKENVUkwgKmN1cmwsIGludCBhY3Rpb24pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gKHN0cnVjdCBTZXNzaW9uSGFuZGxlICopY3VybDsKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmZGF0YS0+cmVxOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKworICAvKiBmaXJzdCBzd2l0Y2ggb2ZmIGJvdGggcGF1c2UgYml0cyAqLworICBpbnQgbmV3c3RhdGUgPSBrLT5rZWVwb24gJn4gKEtFRVBfUkVDVl9QQVVTRXwgS0VFUF9TRU5EX1BBVVNFKTsKKworICAvKiBzZXQgdGhlIG5ldyBkZXNpcmVkIHBhdXNlIGJpdHMgKi8KKyAgbmV3c3RhdGUgfD0gKChhY3Rpb24gJiBDVVJMUEFVU0VfUkVDVik/S0VFUF9SRUNWX1BBVVNFOjApIHwKKyAgICAoKGFjdGlvbiAmIENVUkxQQVVTRV9TRU5EKT9LRUVQX1NFTkRfUEFVU0U6MCk7CisKKyAgLyogcHV0IGl0IGJhY2sgaW4gdGhlIGtlZXBvbiAqLworICBrLT5rZWVwb24gPSBuZXdzdGF0ZTsKKworICBpZighKG5ld3N0YXRlICYgS0VFUF9SRUNWX1BBVVNFKSAmJiBkYXRhLT5zdGF0ZS50ZW1wd3JpdGUpIHsKKyAgICAvKiB3ZSBoYXZlIGEgYnVmZmVyIGZvciBzZW5kaW5nIHRoYXQgd2Ugbm93IHNlZW0gdG8gYmUgYWJsZSB0byBkZWxpdmVyCisgICAgICAgc2luY2UgdGhlIHJlY2VpdmUgcGF1c2luZyBpcyBsaWZ0ZWQhICovCisKKyAgICAvKiBnZXQgdGhlIHBvaW50ZXIsIHR5cGUgYW5kIGxlbmd0aCBpbiBsb2NhbCBjb3BpZXMgc2luY2UgdGhlIGZ1bmN0aW9uIG1heQorICAgICAgIHJldHVybiBQQVVTRSBhZ2FpbiBhbmQgdGhlbiB3ZSdsbCBnZXQgYSBuZXcgY29weSBhbGxvY3RlZCBhbmQgc3RvcmVkIGluCisgICAgICAgdGhlIHRlbXB3cml0ZSB2YXJpYWJsZXMgKi8KKyAgICBjaGFyICp0ZW1wd3JpdGUgPSBkYXRhLT5zdGF0ZS50ZW1wd3JpdGU7CisgICAgY2hhciAqZnJlZXdyaXRlID0gdGVtcHdyaXRlOyAvKiBzdG9yZSB0aGlzIHBvaW50ZXIgdG8gZnJlZSBpdCBsYXRlciAqLworICAgIHNpemVfdCB0ZW1wc2l6ZSA9IGRhdGEtPnN0YXRlLnRlbXB3cml0ZXNpemU7CisgICAgaW50IHRlbXB0eXBlID0gZGF0YS0+c3RhdGUudGVtcHdyaXRldHlwZTsKKyAgICBzaXplX3QgY2h1bmtsZW47CisKKyAgICAvKiBjbGVhciB0ZW1wd3JpdGUgaGVyZSBqdXN0IHRvIG1ha2Ugc3VyZSBpdCBnZXRzIGNsZWFyZWQgaWYgdGhlcmUncyBubworICAgICAgIGZ1cnRoZXIgdXNlIG9mIGl0LCBhbmQgbWFrZSBzdXJlIHdlIGRvbid0IGNsZWFyIGl0IGFmdGVyIHRoZSBmdW5jdGlvbgorICAgICAgIGludm9rZSBhcyBpdCBtYXkgaGF2ZSBiZWVuIHNldCB0byBhIG5ldyB2YWx1ZSBieSB0aGVuICovCisgICAgZGF0YS0+c3RhdGUudGVtcHdyaXRlID0gTlVMTDsKKworICAgIC8qIHNpbmNlIHRoZSB3cml0ZSBjYWxsYmFjayBBUEkgaXMgZGVmaW5lIHRvIG5ldmVyIGV4Y2VlZAorICAgICAgIENVUkxfTUFYX1dSSVRFX1NJWkUgYnl0ZXMgaW4gYSBzaW5nbGUgY2FsbCwgYW5kIHNpbmNlIHdlIG1heSBpbiBmYWN0CisgICAgICAgaGF2ZSBtb3JlIGRhdGEgdGhhbiB0aGF0IGluIG91ciBidWZmZXIgaGVyZSwgd2UgbXVzdCBsb29wIHNlbmRpbmcgdGhlCisgICAgICAgZGF0YSBpbiBtdWx0aXBsZSBjYWxscyB1bnRpbCB0aGVyZSdzIG5vIGRhdGEgbGVmdCBvciB3ZSBnZXQgYW5vdGhlcgorICAgICAgIHBhdXNlIHJldHVybmVkLgorCisgICAgICAgQSB0cmlja3kgcGFydCBpcyB0aGF0IHRoZSBmdW5jdGlvbiB3ZSBjYWxsIHdpbGwgImJ1ZmZlciIgdGhlIGRhdGEKKyAgICAgICBpdHNlbGYgd2hlbiBpdCBwYXVzZXMgb24gYSBwYXJ0aWN1bGFyIGJ1ZmZlciwgc28gd2UgbWF5IG5lZWQgdG8gZG8gc29tZQorICAgICAgIGV4dHJhIHRyaWNrZXJ5IGlmIHdlIGdldCBhIHBhdXNlIHJldHVybiBoZXJlLgorICAgICovCisgICAgZG8geworICAgICAgY2h1bmtsZW4gPSAodGVtcHNpemUgPiBDVVJMX01BWF9XUklURV9TSVpFKT9DVVJMX01BWF9XUklURV9TSVpFOnRlbXBzaXplOworCisgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShkYXRhLT5zdGF0ZS5jdXJyZW50X2Nvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHlwZSwgdGVtcHdyaXRlLCBjaHVua2xlbik7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIC8qIGZhaWx1cmVzIGFib3J0IHRoZSBsb29wIGF0IG9uY2UgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGlmKGRhdGEtPnN0YXRlLnRlbXB3cml0ZSAmJiAodGVtcHNpemUgLSBjaHVua2xlbikpIHsKKyAgICAgICAgLyogT3VjaCwgdGhlIHJlYWRpbmcgaXMgYWdhaW4gcGF1c2VkIGFuZCB0aGUgYmxvY2sgd2Ugc2VuZCBpcyBub3cKKyAgICAgICAgICAgImNhY2hlZCIuIElmIHRoaXMgaXMgdGhlIGZpbmFsIGNodW5rIHdlIGNhbiBsZWF2ZSBpdCBsaWtlIHRoaXMsIGJ1dAorICAgICAgICAgICBpZiB3ZSBoYXZlIG1vcmUgY2h1bmtzIHRoYXQgYXJlIGNhY2hlZCBhZnRlciB0aGlzLCB3ZSBuZWVkIHRvIGZyZWUKKyAgICAgICAgICAgdGhlIG5ld2x5IGNhY2hlZCBvbmUgYW5kIHB1dCBiYWNrIGEgdmVyc2lvbiB0aGF0IGlzIHRydWx5IHRoZSBlbnRpcmUKKyAgICAgICAgICAgY29udGVudHMgdGhhdCBpcyBzYXZlZCBmb3IgbGF0ZXIKKyAgICAgICAgKi8KKyAgICAgICAgY2hhciAqbmV3cHRyOworCisgICAgICAgIC8qIG5vdGUgdGhhdCB0ZW1wc2l6ZSBpcyBzdGlsbCB0aGUgc2l6ZSBhcyBiZWZvcmUgdGhlIGNhbGxiYWNrIHdhcworICAgICAgICAgICB1c2VkLCBhbmQgdGh1cyB0aGUgd2hvbGUgcGllY2Ugb2YgZGF0YSB0byBrZWVwICovCisgICAgICAgIG5ld3B0ciA9IHJlYWxsb2MoZGF0YS0+c3RhdGUudGVtcHdyaXRlLCB0ZW1wc2l6ZSk7CisKKyAgICAgICAgaWYoIW5ld3B0cikgeworICAgICAgICAgIGZyZWUoZGF0YS0+c3RhdGUudGVtcHdyaXRlKTsgLyogZnJlZSBvbGQgYXJlYSAqLworICAgICAgICAgIGRhdGEtPnN0YXRlLnRlbXB3cml0ZSA9IE5VTEw7CisgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAvKiB0ZW1wd3JpdGUgd2lsbCBiZSBmcmVlZCBmdXJ0aGVyIGRvd24gKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkYXRhLT5zdGF0ZS50ZW1wd3JpdGUgPSBuZXdwdHI7IC8qIHN0b3JlIG5ldyBwb2ludGVyICovCisgICAgICAgIG1lbWNweShuZXdwdHIsIHRlbXB3cml0ZSwgdGVtcHNpemUpOworICAgICAgICBkYXRhLT5zdGF0ZS50ZW1wd3JpdGVzaXplID0gdGVtcHNpemU7IC8qIHN0b3JlIG5ldyBzaXplICovCisgICAgICAgIC8qIHRlbXB3cml0ZSB3aWxsIGJlIGZyZWVkIGZ1cnRoZXIgZG93biAqLworICAgICAgICBicmVhazsgLyogZ28gYmFjayB0byBwYXVzaW5nIHVudGlsIGZ1cnRoZXIgbm90aWNlICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgdGVtcHNpemUgLT0gY2h1bmtsZW47ICAvKiBsZWZ0IGFmdGVyIHRoZSBjYWxsIGFib3ZlICovCisgICAgICAgIHRlbXB3cml0ZSArPSBjaHVua2xlbjsgLyogYWR2YW5jZSB0aGUgcG9pbnRlciAqLworICAgICAgfQorCisgICAgfSB3aGlsZSgocmVzdWx0ID09IENVUkxFX09LKSAmJiB0ZW1wc2l6ZSk7CisKKyAgICBmcmVlKGZyZWV3cml0ZSk7IC8qIHRoaXMgaXMgdW5jb25kaXRpb25hbGx5IG5vIGxvbmdlciB1c2VkICovCisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBDVVJMY29kZSBlYXN5X2Nvbm5lY3Rpb24oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICoqY29ubnApCit7CisgIGlmKGRhdGEgPT0gTlVMTCkKKyAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworCisgIC8qIG9ubHkgYWxsb3cgdGhlc2UgdG8gYmUgY2FsbGVkIG9uIGhhbmRsZXMgd2l0aCBDVVJMT1BUX0NPTk5FQ1RfT05MWSAqLworICBpZighZGF0YS0+c2V0LmNvbm5lY3Rfb25seSkgeworICAgIGZhaWxmKGRhdGEsICJDT05ORUNUX09OTFkgaXMgcmVxdWlyZWQhIik7CisgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOworICB9CisKKyAgKnNmZCA9IEN1cmxfZ2V0Y29ubmVjdGluZm8oZGF0YSwgY29ubnApOworCisgIGlmKCpzZmQgPT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBnZXQgcmVjZW50IHNvY2tldCIpOworICAgIHJldHVybiBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTDsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIFJlY2VpdmVzIGRhdGEgZnJvbSB0aGUgY29ubmVjdGVkIHNvY2tldC4gVXNlIGFmdGVyIHN1Y2Nlc3NmdWwKKyAqIGN1cmxfZWFzeV9wZXJmb3JtKCkgd2l0aCBDVVJMT1BUX0NPTk5FQ1RfT05MWSBvcHRpb24uCisgKiBSZXR1cm5zIENVUkxFX09LIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZXJyb3IuCisgKi8KK0NVUkxjb2RlIGN1cmxfZWFzeV9yZWN2KENVUkwgKmN1cmwsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1Zmxlbiwgc2l6ZV90ICpuKQoreworICBjdXJsX3NvY2tldF90IHNmZDsKKyAgQ1VSTGNvZGUgcmV0OworICBzc2l6ZV90IG4xOworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmM7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gKHN0cnVjdCBTZXNzaW9uSGFuZGxlICopY3VybDsKKworICByZXQgPSBlYXN5X2Nvbm5lY3Rpb24oZGF0YSwgJnNmZCwgJmMpOworICBpZihyZXQpCisgICAgcmV0dXJuIHJldDsKKworICAqbiA9IDA7CisgIHJldCA9IEN1cmxfcmVhZChjLCBzZmQsIGJ1ZmZlciwgYnVmbGVuLCAmbjEpOworCisgIGlmKHJldCAhPSBDVVJMRV9PSykKKyAgICByZXR1cm4gcmV0OworCisgICpuID0gKHNpemVfdCluMTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBTZW5kcyBkYXRhIG92ZXIgdGhlIGNvbm5lY3RlZCBzb2NrZXQuIFVzZSBhZnRlciBzdWNjZXNzZnVsCisgKiBjdXJsX2Vhc3lfcGVyZm9ybSgpIHdpdGggQ1VSTE9QVF9DT05ORUNUX09OTFkgb3B0aW9uLgorICovCitDVVJMY29kZSBjdXJsX2Vhc3lfc2VuZChDVVJMICpjdXJsLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm4pCit7CisgIGN1cmxfc29ja2V0X3Qgc2ZkOworICBDVVJMY29kZSByZXQ7CisgIHNzaXplX3QgbjE7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqYyA9IE5VTEw7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gKHN0cnVjdCBTZXNzaW9uSGFuZGxlICopY3VybDsKKworICByZXQgPSBlYXN5X2Nvbm5lY3Rpb24oZGF0YSwgJnNmZCwgJmMpOworICBpZihyZXQpCisgICAgcmV0dXJuIHJldDsKKworICAqbiA9IDA7CisgIHJldCA9IEN1cmxfd3JpdGUoYywgc2ZkLCBidWZmZXIsIGJ1ZmxlbiwgJm4xKTsKKworICBpZihuMSA9PSAtMSkKKyAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKworICAvKiBkZXRlY3QgRUFHQUlOICovCisgIGlmKChDVVJMRV9PSyA9PSByZXQpICYmICgwID09IG4xKSkKKyAgICByZXR1cm4gQ1VSTEVfQUdBSU47CisKKyAgKm4gPSAoc2l6ZV90KW4xOworCisgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvZWFzeWlmLmggYi9jdXJsLTcuMjUuMC9saWIvZWFzeWlmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1YjdkNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9lYXN5aWYuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9fRUFTWUlGX0gKKyNkZWZpbmUgX19FQVNZSUZfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBQcm90b3R5cGVzIGZvciBsaWJyYXJ5LXdpZGUgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGVhc3kuYworICovCit2b2lkIEN1cmxfZWFzeV9hZGRtdWx0aShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgdm9pZCAqbXVsdGkpOworCit2b2lkIEN1cmxfZWFzeV9pbml0SGFuZGxlRGF0YShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisKKyNlbmRpZiAvKiBfX0VBU1lJRl9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvZXNjYXBlLmMgYi9jdXJsLTcuMjUuMC9saWIvZXNjYXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkNWExZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9lc2NhcGUuYwpAQCAtMCwwICsxLDIzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEVzY2FwZSBhbmQgdW5lc2NhcGUgVVJMIGVuY29kaW5nIGluIHN0cmluZ3MuIFRoZSBmdW5jdGlvbnMgcmV0dXJuIGEgbmV3CisgKiBhbGxvY2F0ZWQgc3RyaW5nIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuICAqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKyNpbmNsdWRlICJub24tYXNjaWkuaCIKKyNpbmNsdWRlICJlc2NhcGUuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogUG9ydGFibGUgY2hhcmFjdGVyIGNoZWNrIChyZW1lbWJlciBFQkNESUMpLiBEbyBub3QgdXNlIGlzYWxudW0oKSBiZWNhdXNlCisgICBpdHMgYmVoYXZpb3IgaXMgYWx0ZXJlZCBieSB0aGUgY3VycmVudCBsb2NhbGUuCisgICBTZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIuMworKi8KK3N0YXRpYyBib29sIEN1cmxfaXN1bnJlc2VydmVkKHVuc2lnbmVkIGNoYXIgaW4pCit7CisgIHN3aXRjaCAoaW4pIHsKKyAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorICAgIGNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzoKKyAgICBjYXNlICdmJzogY2FzZSAnZyc6IGNhc2UgJ2gnOiBjYXNlICdpJzogY2FzZSAnaic6CisgICAgY2FzZSAnayc6IGNhc2UgJ2wnOiBjYXNlICdtJzogY2FzZSAnbic6IGNhc2UgJ28nOgorICAgIGNhc2UgJ3AnOiBjYXNlICdxJzogY2FzZSAncic6IGNhc2UgJ3MnOiBjYXNlICd0JzoKKyAgICBjYXNlICd1JzogY2FzZSAndic6IGNhc2UgJ3cnOiBjYXNlICd4JzogY2FzZSAneSc6IGNhc2UgJ3onOgorICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKKyAgICBjYXNlICdGJzogY2FzZSAnRyc6IGNhc2UgJ0gnOiBjYXNlICdJJzogY2FzZSAnSic6CisgICAgY2FzZSAnSyc6IGNhc2UgJ0wnOiBjYXNlICdNJzogY2FzZSAnTic6IGNhc2UgJ08nOgorICAgIGNhc2UgJ1AnOiBjYXNlICdRJzogY2FzZSAnUic6IGNhc2UgJ1MnOiBjYXNlICdUJzoKKyAgICBjYXNlICdVJzogY2FzZSAnVic6IGNhc2UgJ1cnOiBjYXNlICdYJzogY2FzZSAnWSc6IGNhc2UgJ1onOgorICAgIGNhc2UgJy0nOiBjYXNlICcuJzogY2FzZSAnXyc6IGNhc2UgJ34nOgorICAgICAgcmV0dXJuIFRSVUU7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisgIHJldHVybiBGQUxTRTsKK30KKworLyogZm9yIEFCSS1jb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbnMgKi8KK2NoYXIgKmN1cmxfZXNjYXBlKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGlubGVuZ3RoKQoreworICByZXR1cm4gY3VybF9lYXN5X2VzY2FwZShOVUxMLCBzdHJpbmcsIGlubGVuZ3RoKTsKK30KKworLyogZm9yIEFCSS1jb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbnMgKi8KK2NoYXIgKmN1cmxfdW5lc2NhcGUoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgbGVuZ3RoKQoreworICByZXR1cm4gY3VybF9lYXN5X3VuZXNjYXBlKE5VTEwsIHN0cmluZywgbGVuZ3RoLCBOVUxMKTsKK30KKworY2hhciAqY3VybF9lYXN5X2VzY2FwZShDVVJMICpoYW5kbGUsIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGlubGVuZ3RoKQoreworICBzaXplX3QgYWxsb2MgPSAoaW5sZW5ndGg/KHNpemVfdClpbmxlbmd0aDpzdHJsZW4oc3RyaW5nKSkrMTsKKyAgY2hhciAqbnM7CisgIGNoYXIgKnRlc3RpbmdfcHRyID0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciBpbjsgLyogd2UgbmVlZCB0byB0cmVhdCB0aGUgY2hhcmFjdGVycyB1bnNpZ25lZCAqLworICBzaXplX3QgbmV3bGVuID0gYWxsb2M7CisgIHNpemVfdCBzdHJpbmRleD0wOworICBzaXplX3QgbGVuZ3RoOworICBDVVJMY29kZSByZXM7CisKKyAgbnMgPSBtYWxsb2MoYWxsb2MpOworICBpZighbnMpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgbGVuZ3RoID0gYWxsb2MtMTsKKyAgd2hpbGUobGVuZ3RoLS0pIHsKKyAgICBpbiA9ICpzdHJpbmc7CisKKyAgICBpZihDdXJsX2lzdW5yZXNlcnZlZChpbikpCisgICAgICAvKiBqdXN0IGNvcHkgdGhpcyAqLworICAgICAgbnNbc3RyaW5kZXgrK109aW47CisgICAgZWxzZSB7CisgICAgICAvKiBlbmNvZGUgaXQgKi8KKyAgICAgIG5ld2xlbiArPSAyOyAvKiB0aGUgc2l6ZSBncm93cyB3aXRoIHR3bywgc2luY2UgdGhpcydsbCBiZWNvbWUgYSAlWFggKi8KKyAgICAgIGlmKG5ld2xlbiA+IGFsbG9jKSB7CisgICAgICAgIGFsbG9jICo9IDI7CisgICAgICAgIHRlc3RpbmdfcHRyID0gcmVhbGxvYyhucywgYWxsb2MpOworICAgICAgICBpZighdGVzdGluZ19wdHIpIHsKKyAgICAgICAgICBmcmVlKCBucyApOworICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIG5zID0gdGVzdGluZ19wdHI7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmVzID0gQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsoaGFuZGxlLCAmaW4sIDEpOworICAgICAgaWYocmVzKSB7CisgICAgICAgIC8qIEN1cmxfY29udmVydF90b19uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLworICAgICAgICBmcmVlKG5zKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisKKyAgICAgIHNucHJpbnRmKCZuc1tzdHJpbmRleF0sIDQsICIlJSUwMlgiLCBpbik7CisKKyAgICAgIHN0cmluZGV4Kz0zOworICAgIH0KKyAgICBzdHJpbmcrKzsKKyAgfQorICBuc1tzdHJpbmRleF09MDsgLyogdGVybWluYXRlIGl0ICovCisgIHJldHVybiBuczsKK30KKworLyoKKyAqIEN1cmxfdXJsZGVjb2RlKCkgVVJMIGRlY29kZXMgdGhlIGdpdmVuIHN0cmluZy4KKyAqCisgKiBPcHRpb25hbGx5IGRldGVjdHMgY29udHJvbCBjaGFyYWN0ZXJzIChieXRlIGNvZGVzIGxvd2VyIHRoYW4gMzIpIGluIHRoZQorICogZGF0YSBhbmQgcmVqZWN0cyBzdWNoIGRhdGEuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBtYWxsb2NlZCBzdHJpbmcgaW4gKm9zdHJpbmcgd2l0aCBsZW5ndGggZ2l2ZW4gaW4KKyAqICpvbGVuLiBJZiBsZW5ndGggPT0gMCwgdGhlIGxlbmd0aCBpcyBhc3N1bWVkIHRvIGJlIHN0cmxlbihzdHJpbmcpLgorICoKKyAqLworQ1VSTGNvZGUgQ3VybF91cmxkZWNvZGUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3N0cmluZywgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWplY3RfY3RybCkKK3sKKyAgc2l6ZV90IGFsbG9jID0gKGxlbmd0aD9sZW5ndGg6c3RybGVuKHN0cmluZykpKzE7CisgIGNoYXIgKm5zID0gbWFsbG9jKGFsbG9jKTsKKyAgdW5zaWduZWQgY2hhciBpbjsKKyAgc2l6ZV90IHN0cmluZGV4PTA7CisgIHVuc2lnbmVkIGxvbmcgaGV4OworICBDVVJMY29kZSByZXM7CisKKyAgaWYoIW5zKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHdoaWxlKC0tYWxsb2MgPiAwKSB7CisgICAgaW4gPSAqc3RyaW5nOworICAgIGlmKCgnJScgPT0gaW4pICYmIElTWERJR0lUKHN0cmluZ1sxXSkgJiYgSVNYRElHSVQoc3RyaW5nWzJdKSkgeworICAgICAgLyogdGhpcyBpcyB0d28gaGV4YWRlY2ltYWwgZGlnaXRzIGZvbGxvd2luZyBhICclJyAqLworICAgICAgY2hhciBoZXhzdHJbM107CisgICAgICBjaGFyICpwdHI7CisgICAgICBoZXhzdHJbMF0gPSBzdHJpbmdbMV07CisgICAgICBoZXhzdHJbMV0gPSBzdHJpbmdbMl07CisgICAgICBoZXhzdHJbMl0gPSAwOworCisgICAgICBoZXggPSBzdHJ0b3VsKGhleHN0ciwgJnB0ciwgMTYpOworCisgICAgICBpbiA9IGN1cmx4X3VsdG91YyhoZXgpOyAvKiB0aGlzIGxvbmcgaXMgbmV2ZXIgYmlnZ2VyIHRoYW4gMjU1IGFueXdheSAqLworCisgICAgICByZXMgPSBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrKGRhdGEsICZpbiwgMSk7CisgICAgICBpZihyZXMpIHsKKyAgICAgICAgLyogQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayBjYWxscyBmYWlsZiBpZiB1bnN1Y2Nlc3NmdWwgKi8KKyAgICAgICAgZnJlZShucyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgICB9CisKKyAgICAgIHN0cmluZys9MjsKKyAgICAgIGFsbG9jLT0yOworICAgIH0KKyAgICBpZihyZWplY3RfY3RybCAmJiAoaW4gPCAweDIwKSkgeworICAgICAgZnJlZShucyk7CisgICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKKyAgICB9CisKKyAgICBuc1tzdHJpbmRleCsrXSA9IGluOworICAgIHN0cmluZysrOworICB9CisgIG5zW3N0cmluZGV4XT0wOyAvKiB0ZXJtaW5hdGUgaXQgKi8KKworICBpZihvbGVuKQorICAgIC8qIHN0b3JlIG91dHB1dCBzaXplICovCisgICAgKm9sZW4gPSBzdHJpbmRleDsKKworICBpZihvc3RyaW5nKQorICAgIC8qIHN0b3JlIG91dHB1dCBzdHJpbmcgKi8KKyAgICAqb3N0cmluZyA9IG5zOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIFVuZXNjYXBlcyB0aGUgZ2l2ZW4gVVJMIGVzY2FwZWQgc3RyaW5nIG9mIGdpdmVuIGxlbmd0aC4gUmV0dXJucyBhCisgKiBwb2ludGVyIHRvIGEgbWFsbG9jZWQgc3RyaW5nIHdpdGggbGVuZ3RoIGdpdmVuIGluICpvbGVuLgorICogSWYgbGVuZ3RoID09IDAsIHRoZSBsZW5ndGggaXMgYXNzdW1lZCB0byBiZSBzdHJsZW4oc3RyaW5nKS4KKyAqIElmIG9sZW4gPT0gTlVMTCwgbm8gb3V0cHV0IGxlbmd0aCBpcyBzdG9yZWQuCisgKi8KK2NoYXIgKmN1cmxfZWFzeV91bmVzY2FwZShDVVJMICpoYW5kbGUsIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm9sZW4pCit7CisgIGNoYXIgKnN0ciA9IE5VTEw7CisgIHNpemVfdCBpbnB1dGxlbiA9IGxlbmd0aDsKKyAgc2l6ZV90IG91dHB1dGxlbjsKKyAgQ1VSTGNvZGUgcmVzID0gQ3VybF91cmxkZWNvZGUoaGFuZGxlLCBzdHJpbmcsIGlucHV0bGVuLCAmc3RyLCAmb3V0cHV0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSk7CisgIGlmKHJlcykKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYob2xlbikKKyAgICAqb2xlbiA9IGN1cmx4X3V6dG9zaShvdXRwdXRsZW4pOworICByZXR1cm4gc3RyOworfQorCisvKiBGb3Igb3BlcmF0aW5nIHN5c3RlbXMvZW52aXJvbm1lbnRzIHRoYXQgdXNlIGRpZmZlcmVudCBtYWxsb2MvZnJlZQorICAgc3lzdGVtcyBmb3IgdGhlIGFwcCBhbmQgZm9yIHRoaXMgbGlicmFyeSwgd2UgcHJvdmlkZSBhIGZyZWUgdGhhdCB1c2VzCisgICB0aGUgbGlicmFyeSdzIG1lbW9yeSBzeXN0ZW0gKi8KK3ZvaWQgY3VybF9mcmVlKHZvaWQgKnApCit7CisgIGlmKHApCisgICAgZnJlZShwKTsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9lc2NhcGUuaCBiL2N1cmwtNy4yNS4wL2xpYi9lc2NhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzdmODQxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2VzY2FwZS5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfRVNDQVBFX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfRVNDQVBFX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFc2NhcGUgYW5kIHVuZXNjYXBlIFVSTCBlbmNvZGluZyBpbiBzdHJpbmdzLiBUaGUgZnVuY3Rpb25zIHJldHVybiBhIG5ldworICogYWxsb2NhdGVkIHN0cmluZyBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkLiAgKi8KKworQ1VSTGNvZGUgQ3VybF91cmxkZWNvZGUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3N0cmluZywgc2l6ZV90ICpvbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWplY3RfY3JsZik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2ZpbGUuYyBiL2N1cmwtNy4yNS4wL2xpYi9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0N2M3MwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9maWxlLmMKQEAgLTAsMCArMSw2MDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfRklMRQorCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic3RydG9vZmZ0LmgiCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJlc2NhcGUuaCIKKyNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAic3BlZWRjaGVjay5oIgorI2luY2x1ZGUgImdldGluZm8uaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAicGFyc2VkYXRlLmgiIC8qIGZvciB0aGUgd2VlayBkYXkgYW5kIG1vbnRoIG5hbWVzICovCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2lmIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoX19FTVhfXykgfHwgXAorICBkZWZpbmVkKF9fU1lNQklBTjMyX18pCisjZGVmaW5lIERPU19GSUxFU1lTVEVNIDEKKyNlbmRpZgorCisjaWZkZWYgT1BFTl9ORUVEU19BUkczCisjICBkZWZpbmUgb3Blbl9yZWFkb25seShwLGYpIG9wZW4oKHApLChmKSwoMCkpCisjZWxzZQorIyAgZGVmaW5lIG9wZW5fcmVhZG9ubHkocCxmKSBvcGVuKChwKSwoZikpCisjZW5kaWYKKworLyoKKyAqIEZvcndhcmQgZGVjbGFyYXRpb25zLgorICovCisKK3N0YXRpYyBDVVJMY29kZSBmaWxlX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSBmaWxlX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSBzdGF0dXMsIGJvb2wgcHJlbWF0dXJlKTsKK3N0YXRpYyBDVVJMY29kZSBmaWxlX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSBmaWxlX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlYWRfY29ubmVjdGlvbik7CisKKworLyoKKyAqIEZJTEUgc2NoZW1lIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfZmlsZSA9IHsKKyAgIkZJTEUiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIGZpbGVfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgZmlsZV9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBmaWxlX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIGZpbGVfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX0ZJTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX05PTkVUV09SSyB8IFBST1RPUFRfTk9VUkxRVUVSWSAvKiBmbGFncyAqLworfTsKKworCisgLyoKKyAgQ2hlY2sgaWYgdGhpcyBpcyBhIHJhbmdlIGRvd25sb2FkLCBhbmQgaWYgc28sIHNldCB0aGUgaW50ZXJuYWwgdmFyaWFibGVzCisgIHByb3Blcmx5LiBUaGlzIGNvZGUgaXMgY29waWVkIGZyb20gdGhlIEZUUCBpbXBsZW1lbnRhdGlvbiBhbmQgbWlnaHQgYXMKKyAgd2VsbCBiZSBmYWN0b3JlZCBvdXQuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBmaWxlX3JhbmdlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgY3VybF9vZmZfdCBmcm9tLCB0bzsKKyAgY3VybF9vZmZfdCB0b3RhbHNpemU9LTE7CisgIGNoYXIgKnB0cjsKKyAgY2hhciAqcHRyMjsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIGlmKGRhdGEtPnN0YXRlLnVzZV9yYW5nZSAmJiBkYXRhLT5zdGF0ZS5yYW5nZSkgeworICAgIGZyb209Y3VybHhfc3RydG9vZmZ0KGRhdGEtPnN0YXRlLnJhbmdlLCAmcHRyLCAwKTsKKyAgICB3aGlsZSgqcHRyICYmIChJU1NQQUNFKCpwdHIpIHx8ICgqcHRyPT0nLScpKSkKKyAgICAgIHB0cisrOworICAgIHRvPWN1cmx4X3N0cnRvb2ZmdChwdHIsICZwdHIyLCAwKTsKKyAgICBpZihwdHIgPT0gcHRyMikgeworICAgICAgLyogd2UgZGlkbid0IGdldCBhbnkgZGlnaXQgKi8KKyAgICAgIHRvPS0xOworICAgIH0KKyAgICBpZigoLTEgPT0gdG8pICYmIChmcm9tPj0wKSkgeworICAgICAgLyogWCAtICovCisgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IGZyb207CisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlJBTkdFICUiIEZPUk1BVF9PRkZfVCAiIHRvIGVuZCBvZiBmaWxlXG4iLAorICAgICAgICAgICAgICAgICAgIGZyb20pKTsKKyAgICB9CisgICAgZWxzZSBpZihmcm9tIDwgMCkgeworICAgICAgLyogLVkgKi8KKyAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IC1mcm9tOworICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSBmcm9tOworICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJSQU5HRSB0aGUgbGFzdCAlIiBGT1JNQVRfT0ZGX1QgIiBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAtZnJvbSkpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFgtWSAqLworICAgICAgdG90YWxzaXplID0gdG8tZnJvbTsKKyAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHRvdGFsc2l6ZSsxOyAvKiBpbmNsdWRlIGxhc3QgYnl0ZSAqLworICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSBmcm9tOworICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJSQU5HRSBmcm9tICUiIEZPUk1BVF9PRkZfVAorICAgICAgICAgICAgICAgICAgICIgZ2V0dGluZyAlIiBGT1JNQVRfT0ZGX1QgIiBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBmcm9tLCBkYXRhLT5yZXEubWF4ZG93bmxvYWQpKTsKKyAgICB9CisgICAgREVCVUdGKGluZm9mKGRhdGEsICJyYW5nZS1kb3dubG9hZCBmcm9tICUiIEZPUk1BVF9PRkZfVAorICAgICAgICAgICAgICAgICAiIHRvICUiIEZPUk1BVF9PRkZfVCAiLCB0b3RhbGx5ICUiIEZPUk1BVF9PRkZfVCAiIGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgICBmcm9tLCB0bywgZGF0YS0+cmVxLm1heGRvd25sb2FkKSk7CisgIH0KKyAgZWxzZQorICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IC0xOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBmaWxlX2Nvbm5lY3QoKSBnZXRzIGNhbGxlZCBmcm9tIEN1cmxfcHJvdG9jb2xfY29ubmVjdCgpIHRvIGFsbG93IHVzIHRvCisgKiBkbyBwcm90b2NvbC1zcGVjaWZpYyBhY3Rpb25zIGF0IGNvbm5lY3QtdGltZS4gIFdlIGVtdWxhdGUgYQorICogY29ubmVjdC10aGVuLXRyYW5zZmVyIHByb3RvY29sIGFuZCAiY29ubmVjdCIgdG8gdGhlIGZpbGUgaGVyZQorICovCitzdGF0aWMgQ1VSTGNvZGUgZmlsZV9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBjaGFyICpyZWFsX3BhdGg7CisgIHN0cnVjdCBGSUxFUFJPVE8gKmZpbGU7CisgIGludCBmZDsKKyNpZmRlZiBET1NfRklMRVNZU1RFTQorICBpbnQgaTsKKyAgY2hhciAqYWN0dWFsX3BhdGg7CisjZW5kaWYKKworICAvKiBJZiB0aGVyZSBhbHJlYWR5IGlzIGEgcHJvdG9jb2wtc3BlY2lmaWMgc3RydWN0IGFsbG9jYXRlZCBmb3IgdGhpcworICAgICBzZXNzaW9uaGFuZGxlLCBkZWFsIHdpdGggaXQgKi8KKyAgQ3VybF9yZXNldF9yZXFwcm90byhjb25uKTsKKworICByZWFsX3BhdGggPSBjdXJsX2Vhc3lfdW5lc2NhcGUoZGF0YSwgZGF0YS0+c3RhdGUucGF0aCwgMCwgTlVMTCk7CisgIGlmKCFyZWFsX3BhdGgpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgaWYoIWRhdGEtPnN0YXRlLnByb3RvLmZpbGUpIHsKKyAgICBmaWxlID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgRklMRVBST1RPKSk7CisgICAgaWYoIWZpbGUpIHsKKyAgICAgIGZyZWUocmVhbF9wYXRoKTsKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKyAgICBkYXRhLT5zdGF0ZS5wcm90by5maWxlID0gZmlsZTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBmaWxlIGlzIG5vdCBhIHByb3RvY29sIHRoYXQgY2FuIGRlYWwgd2l0aCAicGVyc2lzdGFuY3kiICovCisgICAgZmlsZSA9IGRhdGEtPnN0YXRlLnByb3RvLmZpbGU7CisgICAgQ3VybF9zYWZlZnJlZShmaWxlLT5mcmVlcGF0aCk7CisgICAgZmlsZS0+cGF0aCA9IE5VTEw7CisgICAgaWYoZmlsZS0+ZmQgIT0gLTEpCisgICAgICBjbG9zZShmaWxlLT5mZCk7CisgICAgZmlsZS0+ZmQgPSAtMTsKKyAgfQorCisjaWZkZWYgRE9TX0ZJTEVTWVNURU0KKyAgLyogSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyBhIHNsYXNoLCBhbmQgdGhlcmUncworICAgICBzb21ldGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgZHJpdmUgYXQgdGhlIGJlZ2lubmluZyBvZgorICAgICB0aGUgcGF0aCwgc2tpcCB0aGUgc2xhc2guICBJZiB3ZSByZW1vdmUgdGhlIGluaXRpYWwKKyAgICAgc2xhc2ggaW4gYWxsIGNhc2VzLCBwYXRocyB3aXRob3V0IGRyaXZlIGxldHRlcnMgZW5kIHVwCisgICAgIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGljaCBpc24ndCBob3cKKyAgICAgYnJvd3NlcnMgd29yay4KKworICAgICBTb21lIGJyb3dzZXJzIGFjY2VwdCB8IGluc3RlYWQgb2YgOiBhcyB0aGUgZHJpdmUgbGV0dGVyCisgICAgIHNlcGFyYXRvciwgc28gd2UgZG8gdG9vLgorCisgICAgIE9uIG90aGVyIHBsYXRmb3Jtcywgd2UgbmVlZCB0aGUgc2xhc2ggdG8gaW5kaWNhdGUgYW4KKyAgICAgYWJzb2x1dGUgcGF0aG5hbWUuICBPbiBXaW5kb3dzLCBhYnNvbHV0ZSBwYXRocyBzdGFydAorICAgICB3aXRoIGEgZHJpdmUgbGV0dGVyLgorICAqLworICBhY3R1YWxfcGF0aCA9IHJlYWxfcGF0aDsKKyAgaWYoKGFjdHVhbF9wYXRoWzBdID09ICcvJykgJiYKKyAgICAgIGFjdHVhbF9wYXRoWzFdICYmCisgICAgIChhY3R1YWxfcGF0aFsyXSA9PSAnOicgfHwgYWN0dWFsX3BhdGhbMl0gPT0gJ3wnKSkgeworICAgIGFjdHVhbF9wYXRoWzJdID0gJzonOworICAgIGFjdHVhbF9wYXRoKys7CisgIH0KKworICAvKiBjaGFuZ2UgcGF0aCBzZXBhcmF0b3JzIGZyb20gJy8nIHRvICdcXCcgZm9yIERPUywgV2luZG93cyBhbmQgT1MvMiAqLworICBmb3IoaT0wOyBhY3R1YWxfcGF0aFtpXSAhPSAnXDAnOyArK2kpCisgICAgaWYoYWN0dWFsX3BhdGhbaV0gPT0gJy8nKQorICAgICAgYWN0dWFsX3BhdGhbaV0gPSAnXFwnOworCisgIGZkID0gb3Blbl9yZWFkb25seShhY3R1YWxfcGF0aCwgT19SRE9OTFl8T19CSU5BUlkpOworICBmaWxlLT5wYXRoID0gYWN0dWFsX3BhdGg7CisjZWxzZQorICBmZCA9IG9wZW5fcmVhZG9ubHkocmVhbF9wYXRoLCBPX1JET05MWSk7CisgIGZpbGUtPnBhdGggPSByZWFsX3BhdGg7CisjZW5kaWYKKyAgZmlsZS0+ZnJlZXBhdGggPSByZWFsX3BhdGg7IC8qIGZyZWUgdGhpcyB3aGVuIGRvbmUgKi8KKworICBmaWxlLT5mZCA9IGZkOworICBpZighZGF0YS0+c2V0LnVwbG9hZCAmJiAoZmQgPT0gLTEpKSB7CisgICAgZmFpbGYoZGF0YSwgIkNvdWxkbid0IG9wZW4gZmlsZSAlcyIsIGRhdGEtPnN0YXRlLnBhdGgpOworICAgIGZpbGVfZG9uZShjb25uLCBDVVJMRV9GSUxFX0NPVUxETlRfUkVBRF9GSUxFLCBGQUxTRSk7CisgICAgcmV0dXJuIENVUkxFX0ZJTEVfQ09VTEROVF9SRUFEX0ZJTEU7CisgIH0KKyAgKmRvbmUgPSBUUlVFOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIGZpbGVfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgc3RhdHVzLCBib29sIHByZW1hdHVyZSkKK3sKKyAgc3RydWN0IEZJTEVQUk9UTyAqZmlsZSA9IGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLmZpbGU7CisgICh2b2lkKXN0YXR1czsgLyogbm90IHVzZWQgKi8KKyAgKHZvaWQpcHJlbWF0dXJlOyAvKiBub3QgdXNlZCAqLworCisgIGlmKGZpbGUpIHsKKyAgICBDdXJsX3NhZmVmcmVlKGZpbGUtPmZyZWVwYXRoKTsKKyAgICBmaWxlLT5wYXRoID0gTlVMTDsKKyAgICBpZihmaWxlLT5mZCAhPSAtMSkKKyAgICAgIGNsb3NlKGZpbGUtPmZkKTsKKyAgICBmaWxlLT5mZCA9IC0xOworICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgZmlsZV9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCit7CisgIHN0cnVjdCBGSUxFUFJPVE8gKmZpbGUgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5maWxlOworICAodm9pZClkZWFkX2Nvbm5lY3Rpb247IC8qIG5vdCB1c2VkICovCisKKyAgaWYoZmlsZSkgeworICAgIEN1cmxfc2FmZWZyZWUoZmlsZS0+ZnJlZXBhdGgpOworICAgIGZpbGUtPnBhdGggPSBOVUxMOworICAgIGlmKGZpbGUtPmZkICE9IC0xKQorICAgICAgY2xvc2UoZmlsZS0+ZmQpOworICAgIGZpbGUtPmZkID0gLTE7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKyNpZmRlZiBET1NfRklMRVNZU1RFTQorI2RlZmluZSBESVJTRVAgJ1xcJworI2Vsc2UKKyNkZWZpbmUgRElSU0VQICcvJworI2VuZGlmCisKK3N0YXRpYyBDVVJMY29kZSBmaWxlX3VwbG9hZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBGSUxFUFJPVE8gKmZpbGUgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5maWxlOworICBjb25zdCBjaGFyICpkaXIgPSBzdHJjaHIoZmlsZS0+cGF0aCwgRElSU0VQKTsKKyAgRklMRSAqZnA7CisgIENVUkxjb2RlIHJlcz1DVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBjaGFyICpidWYgPSBkYXRhLT5zdGF0ZS5idWZmZXI7CisgIHNpemVfdCBucmVhZDsKKyAgc2l6ZV90IG53cml0ZTsKKyAgY3VybF9vZmZfdCBieXRlY291bnQgPSAwOworICBzdHJ1Y3QgdGltZXZhbCBub3cgPSBDdXJsX3R2bm93KCk7CisgIHN0cnVjdF9zdGF0IGZpbGVfc3RhdDsKKyAgY29uc3QgY2hhciogYnVmMjsKKworICAvKgorICAgKiBTaW5jZSBGSUxFOiBkb2Vzbid0IGRvIHRoZSBmdWxsIGluaXQsIHdlIG5lZWQgdG8gcHJvdmlkZSBzb21lIGV4dHJhCisgICAqIGFzc2lnbm1lbnRzIGhlcmUuCisgICAqLworICBjb25uLT5mcmVhZF9mdW5jID0gZGF0YS0+c2V0LmZyZWFkX2Z1bmM7CisgIGNvbm4tPmZyZWFkX2luID0gZGF0YS0+c2V0LmluOworICBjb25uLT5kYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlID0gYnVmOworCisgIGlmKCFkaXIpCisgICAgcmV0dXJuIENVUkxFX0ZJTEVfQ09VTEROVF9SRUFEX0ZJTEU7IC8qIGZpeDogYmV0dGVyIGVycm9yIGNvZGUgKi8KKworICBpZighZGlyWzFdKQorICAgICByZXR1cm4gQ1VSTEVfRklMRV9DT1VMRE5UX1JFQURfRklMRTsgLyogZml4OiBiZXR0ZXIgZXJyb3IgY29kZSAqLworCisgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKQorICAgIGZwID0gZm9wZW4oIGZpbGUtPnBhdGgsICJhYiIgKTsKKyAgZWxzZSB7CisgICAgaW50IGZkOworCisjaWZkZWYgRE9TX0ZJTEVTWVNURU0KKyAgICBmZCA9IG9wZW4oZmlsZS0+cGF0aCwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DfE9fQklOQVJZLAorICAgICAgICAgICAgICBjb25uLT5kYXRhLT5zZXQubmV3X2ZpbGVfcGVybXMpOworI2Vsc2UKKyAgICBmZCA9IG9wZW4oZmlsZS0+cGF0aCwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLAorICAgICAgICAgICAgICBjb25uLT5kYXRhLT5zZXQubmV3X2ZpbGVfcGVybXMpOworI2VuZGlmCisgICAgaWYoZmQgPCAwKSB7CisgICAgICBmYWlsZihkYXRhLCAiQ2FuJ3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIsIGZpbGUtPnBhdGgpOworICAgICAgcmV0dXJuIENVUkxFX1dSSVRFX0VSUk9SOworICAgIH0KKyAgICBjbG9zZShmZCk7CisgICAgZnAgPSBmb3BlbihmaWxlLT5wYXRoLCAid2IiKTsKKyAgfQorCisgIGlmKCFmcCkgeworICAgIGZhaWxmKGRhdGEsICJDYW4ndCBvcGVuICVzIGZvciB3cml0aW5nIiwgZmlsZS0+cGF0aCk7CisgICAgcmV0dXJuIENVUkxFX1dSSVRFX0VSUk9SOworICB9CisKKyAgaWYoLTEgIT0gZGF0YS0+c2V0LmluZmlsZXNpemUpCisgICAgLyoga25vd24gc2l6ZSBvZiBkYXRhIHRvICJ1cGxvYWQiICovCisgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBkYXRhLT5zZXQuaW5maWxlc2l6ZSk7CisKKyAgLyogdHJlYXQgdGhlIG5lZ2F0aXZlIHJlc3VtZSBvZmZzZXQgdmFsdWUgYXMgdGhlIGNhc2Ugb2YgIi0iICovCisgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIDwgMCkgeworICAgIGlmKGZzdGF0KGZpbGVubyhmcCksICZmaWxlX3N0YXQpKSB7CisgICAgICBmY2xvc2UoZnApOworICAgICAgZmFpbGYoZGF0YSwgIkNhbid0IGdldCB0aGUgc2l6ZSBvZiAlcyIsIGZpbGUtPnBhdGgpOworICAgICAgcmV0dXJuIENVUkxFX1dSSVRFX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IChjdXJsX29mZl90KWZpbGVfc3RhdC5zdF9zaXplOworICB9CisKKyAgd2hpbGUocmVzID09IENVUkxFX09LKSB7CisgICAgaW50IHJlYWRjb3VudDsKKyAgICByZXMgPSBDdXJsX2ZpbGxyZWFkYnVmZmVyKGNvbm4sIEJVRlNJWkUsICZyZWFkY291bnQpOworICAgIGlmKHJlcykKKyAgICAgIGJyZWFrOworCisgICAgaWYocmVhZGNvdW50IDw9IDApICAvKiBmaXggcXVlc3Rpb25hYmxlIGNvbXBhcmUgZXJyb3IuIGN1cmx2bXMgKi8KKyAgICAgIGJyZWFrOworCisgICAgbnJlYWQgPSAoc2l6ZV90KXJlYWRjb3VudDsKKworICAgIC8qc2tpcCBieXRlcyBiZWZvcmUgcmVzdW1lIHBvaW50Ki8KKyAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgaWYoKGN1cmxfb2ZmX3QpbnJlYWQgPD0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gKSB7CisgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIC09IG5yZWFkOworICAgICAgICBucmVhZCA9IDA7CisgICAgICAgIGJ1ZjIgPSBidWY7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgYnVmMiA9IGJ1ZiArIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgICBucmVhZCAtPSAoc2l6ZV90KWRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgIGJ1ZjIgPSBidWY7CisKKyAgICAvKiB3cml0ZSB0aGUgZGF0YSB0byB0aGUgdGFyZ2V0ICovCisgICAgbndyaXRlID0gZndyaXRlKGJ1ZjIsIDEsIG5yZWFkLCBmcCk7CisgICAgaWYobndyaXRlICE9IG5yZWFkKSB7CisgICAgICByZXMgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYnl0ZWNvdW50ICs9IG5yZWFkOworCisgICAgQ3VybF9wZ3JzU2V0VXBsb2FkQ291bnRlcihkYXRhLCBieXRlY291bnQpOworCisgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKQorICAgICAgcmVzID0gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKyAgICBlbHNlCisgICAgICByZXMgPSBDdXJsX3NwZWVkY2hlY2soZGF0YSwgbm93KTsKKyAgfQorICBpZighcmVzICYmIEN1cmxfcGdyc1VwZGF0ZShjb25uKSkKKyAgICByZXMgPSBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworCisgIGZjbG9zZShmcCk7CisKKyAgcmV0dXJuIHJlczsKK30KKworLyoKKyAqIGZpbGVfZG8oKSBpcyB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgZnVuY3Rpb24gZm9yIHRoZSBkby1waGFzZSwgc2VwYXJhdGVkCisgKiBmcm9tIHRoZSBjb25uZWN0LXBoYXNlIGFib3ZlLiBPdGhlciBwcm90b2NvbHMgbWVyZWx5IHNldHVwIHRoZSB0cmFuc2ZlciBpbgorICogdGhlIGRvLXBoYXNlLCB0byBoYXZlIGl0IGRvbmUgaW4gdGhlIG1haW4gdHJhbnNmZXIgbG9vcCBidXQgc2luY2Ugc29tZQorICogcGxhdGZvcm1zIHdlIHN1cHBvcnQgZG9uJ3QgYWxsb3cgc2VsZWN0KClpbmcgZXRjIG9uIGZpbGUgaGFuZGxlcyAoYXMKKyAqIG9wcG9zZWQgdG8gc29ja2V0cykgd2UgaW5zdGVhZCBwZXJmb3JtIHRoZSB3aG9sZSBkby1vcGVyYXRpb24gaW4gdGhpcworICogZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBDVVJMY29kZSBmaWxlX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgLyogVGhpcyBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSBob3N0IG5hbWUgaW4gY29uZm9ybWFuY2Ugd2l0aAorICAgICBSRkMgMTczOC4gT25seSBsb2NhbCBmaWxlcyAocmVhY2hhYmxlIHZpYSB0aGUgc3RhbmRhcmQgZmlsZSBzeXN0ZW0pCisgICAgIGFyZSBzdXBwb3J0ZWQuIFRoaXMgbWVhbnMgdGhhdCBmaWxlcyBvbiByZW1vdGVseSBtb3VudGVkIGRpcmVjdG9yaWVzCisgICAgICh2aWEgTkZTLCBTYW1iYSwgTlQgc2hhcmluZykgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggYSBmaWxlOi8vIFVSTAorICAqLworICBDVVJMY29kZSByZXMgPSBDVVJMRV9PSzsKKyAgc3RydWN0X3N0YXQgc3RhdGJ1ZjsgLyogc3RydWN0X3N0YXQgaW5zdGVhZCBvZiBzdHJ1Y3Qgc3RhdCBqdXN0IHRvIGFsbG93IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3dzIHZlcnNpb24gdG8gaGF2ZSBhIGRpZmZlcmVudCBzdHJ1Y3Qgd2l0aG91dAorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZpbmcgdG8gcmVkZWZpbmUgdGhlIHNpbXBsZSB3b3JkICdzdGF0JyAqLworICBjdXJsX29mZl90IGV4cGVjdGVkX3NpemU9MDsKKyAgYm9vbCBmc3RhdGVkPUZBTFNFOworICBzc2l6ZV90IG5yZWFkOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGNoYXIgKmJ1ZiA9IGRhdGEtPnN0YXRlLmJ1ZmZlcjsKKyAgY3VybF9vZmZfdCBieXRlY291bnQgPSAwOworICBpbnQgZmQ7CisgIHN0cnVjdCB0aW1ldmFsIG5vdyA9IEN1cmxfdHZub3coKTsKKworICAqZG9uZSA9IFRSVUU7IC8qIHVuY29uZGl0aW9uYWxseSAqLworCisgIEN1cmxfaW5pdGluZm8oZGF0YSk7CisgIEN1cmxfcGdyc1N0YXJ0Tm93KGRhdGEpOworCisgIGlmKGRhdGEtPnNldC51cGxvYWQpCisgICAgcmV0dXJuIGZpbGVfdXBsb2FkKGNvbm4pOworCisgIC8qIGdldCB0aGUgZmQgZnJvbSB0aGUgY29ubmVjdGlvbiBwaGFzZSAqLworICBmZCA9IGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLmZpbGUtPmZkOworCisgIC8qIFZNUzogVGhpcyBvbmx5IHdvcmtzIHJlbGlhYmxlIGZvciBTVFJFQU1MRiBmaWxlcyAqLworICBpZigtMSAhPSBmc3RhdChmZCwgJnN0YXRidWYpKSB7CisgICAgLyogd2UgY291bGQgc3RhdCBpdCwgdGhlbiByZWFkIG91dCB0aGUgc2l6ZSAqLworICAgIGV4cGVjdGVkX3NpemUgPSBzdGF0YnVmLnN0X3NpemU7CisgICAgLyogYW5kIHN0b3JlIHRoZSBtb2RpZmljYXRpb24gdGltZSAqLworICAgIGRhdGEtPmluZm8uZmlsZXRpbWUgPSAobG9uZylzdGF0YnVmLnN0X210aW1lOworICAgIGZzdGF0ZWQgPSBUUlVFOworICB9CisKKyAgaWYoZnN0YXRlZCAmJiAhZGF0YS0+c3RhdGUucmFuZ2UgJiYgZGF0YS0+c2V0LnRpbWVjb25kaXRpb24pIHsKKyAgICBpZighQ3VybF9tZWV0c190aW1lY29uZGl0aW9uKGRhdGEsICh0aW1lX3QpZGF0YS0+aW5mby5maWxldGltZSkpIHsKKyAgICAgICpkb25lID0gVFJVRTsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisgIH0KKworICAvKiBJZiB3ZSBoYXZlIHNlbGVjdGVkIE5PQk9EWSBhbmQgSEVBREVSLCBpdCBtZWFucyB0aGF0IHdlIG9ubHkgd2FudCBmaWxlCisgICAgIGluZm9ybWF0aW9uLiBXaGljaCBmb3IgRklMRSBjYW4ndCBiZSBtdWNoIG1vcmUgdGhhbiB0aGUgZmlsZSBzaXplIGFuZAorICAgICBkYXRlLiAqLworICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkgJiYgZGF0YS0+c2V0LmluY2x1ZGVfaGVhZGVyICYmIGZzdGF0ZWQpIHsKKyAgICBDVVJMY29kZSByZXN1bHQ7CisgICAgc25wcmludGYoYnVmLCBzaXplb2YoZGF0YS0+c3RhdGUuYnVmZmVyKSwKKyAgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6ICUiIEZPUk1BVF9PRkZfVCAiXHJcbiIsIGV4cGVjdGVkX3NpemUpOworICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPVEgsIGJ1ZiwgMCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiQWNjZXB0LXJhbmdlczogYnl0ZXNcclxuIiwgMCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmKGZzdGF0ZWQpIHsKKyAgICAgIHRpbWVfdCBmaWxldGltZSA9ICh0aW1lX3Qpc3RhdGJ1Zi5zdF9tdGltZTsKKyAgICAgIHN0cnVjdCB0bSBidWZmZXI7CisgICAgICBjb25zdCBzdHJ1Y3QgdG0gKnRtID0gJmJ1ZmZlcjsKKyAgICAgIHJlc3VsdCA9IEN1cmxfZ210aW1lKGZpbGV0aW1lLCAmYnVmZmVyKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgLyogZm9ybWF0OiAiVHVlLCAxNSBOb3YgMTk5NCAxMjo0NToyNiBHTVQiICovCisgICAgICBzbnByaW50ZihidWYsIEJVRlNJWkUtMSwKKyAgICAgICAgICAgICAgICJMYXN0LU1vZGlmaWVkOiAlcywgJTAyZCAlcyAlNGQgJTAyZDolMDJkOiUwMmQgR01UXHJcbiIsCisgICAgICAgICAgICAgICBDdXJsX3drZGF5W3RtLT50bV93ZGF5P3RtLT50bV93ZGF5LTE6Nl0sCisgICAgICAgICAgICAgICB0bS0+dG1fbWRheSwKKyAgICAgICAgICAgICAgIEN1cmxfbW9udGhbdG0tPnRtX21vbl0sCisgICAgICAgICAgICAgICB0bS0+dG1feWVhciArIDE5MDAsCisgICAgICAgICAgICAgICB0bS0+dG1faG91ciwKKyAgICAgICAgICAgICAgIHRtLT50bV9taW4sCisgICAgICAgICAgICAgICB0bS0+dG1fc2VjKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPVEgsIGJ1ZiwgMCk7CisgICAgfQorICAgIC8qIGlmIHdlIGZzdGF0KCllZCB0aGUgZmlsZSwgc2V0IHRoZSBmaWxlIHNpemUgdG8gbWFrZSBpdCBhdmFpbGFibGUgcG9zdC0KKyAgICAgICB0cmFuc2ZlciAqLworICAgIGlmKGZzdGF0ZWQpCisgICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgZXhwZWN0ZWRfc2l6ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIC8qIENoZWNrIHdoZXRoZXIgZmlsZSByYW5nZSBoYXMgYmVlbiBzcGVjaWZpZWQgKi8KKyAgZmlsZV9yYW5nZShjb25uKTsKKworICAvKiBBZGp1c3QgdGhlIHN0YXJ0IG9mZnNldCBpbiBjYXNlIHdlIHdhbnQgdG8gZ2V0IHRoZSBOIGxhc3QgYnl0ZXMKKyAgICogb2YgdGhlIHN0cmVhbSBpZmYgdGhlIGZpbGVzaXplIGNvdWxkIGJlIGRldGVybWluZWQgKi8KKyAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPCAwKSB7CisgICAgaWYoIWZzdGF0ZWQpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJDYW4ndCBnZXQgdGhlIHNpemUgb2YgZmlsZS4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9SRUFEX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSArPSAoY3VybF9vZmZfdClzdGF0YnVmLnN0X3NpemU7CisgIH0KKworICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8PSBleHBlY3RlZF9zaXplKQorICAgIGV4cGVjdGVkX3NpemUgLT0gZGF0YS0+c3RhdGUucmVzdW1lX2Zyb207CisgIGVsc2UgeworICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgdG8gcmVzdW1lIGZpbGU6Ly8gdHJhbnNmZXIiKTsKKyAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgfQorCisgIC8qIEEgaGlnaCB3YXRlciBtYXJrIGhhcyBiZWVuIHNwZWNpZmllZCBzbyB3ZSBvYmV5Li4uICovCisgIGlmKGRhdGEtPnJlcS5tYXhkb3dubG9hZCA+IDApCisgICAgZXhwZWN0ZWRfc2l6ZSA9IGRhdGEtPnJlcS5tYXhkb3dubG9hZDsKKworICBpZihmc3RhdGVkICYmIChleHBlY3RlZF9zaXplID09IDApKQorICAgIHJldHVybiBDVVJMRV9PSzsKKworICAvKiBUaGUgZm9sbG93aW5nIGlzIGEgc2hvcnRjdXQgaW1wbGVtZW50YXRpb24gb2YgZmlsZSByZWFkaW5nCisgICAgIHRoaXMgaXMgYm90aCBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBmb3JtZXIgY2FsbCB0byBkb3dubG9hZCgpIGFuZAorICAgICBpdCBhdm9pZHMgcHJvYmxlbXMgd2l0aCBzZWxlY3QoKSBhbmQgcmVjdigpIG9uIGZpbGUgZGVzY3JpcHRvcnMKKyAgICAgaW4gV2luc29jayAqLworICBpZihmc3RhdGVkKQorICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBleHBlY3RlZF9zaXplKTsKKworICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICE9CisgICAgICAgbHNlZWsoZmQsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLCBTRUVLX1NFVCkpCisgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgfQorCisgIEN1cmxfcGdyc1RpbWUoZGF0YSwgVElNRVJfU1RBUlRUUkFOU0ZFUik7CisKKyAgd2hpbGUocmVzID09IENVUkxFX09LKSB7CisgICAgLyogRG9uJ3QgZmlsbCBhIHdob2xlIGJ1ZmZlciBpZiB3ZSB3YW50IGxlc3MgdGhhbiBhbGwgZGF0YSAqLworICAgIHNpemVfdCBieXRlc3RvcmVhZCA9CisgICAgICAoZXhwZWN0ZWRfc2l6ZSA8IENVUkxfT0ZGX1RfQyhCVUZTSVpFKSAtIENVUkxfT0ZGX1RfQygxKSkgPworICAgICAgY3VybHhfc290b3V6KGV4cGVjdGVkX3NpemUpIDogQlVGU0laRSAtIDE7CisKKyAgICBucmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnl0ZXN0b3JlYWQpOworCisgICAgaWYobnJlYWQgPiAwKQorICAgICAgYnVmW25yZWFkXSA9IDA7CisKKyAgICBpZihucmVhZCA8PSAwIHx8IGV4cGVjdGVkX3NpemUgPT0gMCkKKyAgICAgIGJyZWFrOworCisgICAgYnl0ZWNvdW50ICs9IG5yZWFkOworICAgIGV4cGVjdGVkX3NpemUgLT0gbnJlYWQ7CisKKyAgICByZXMgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCBidWYsIG5yZWFkKTsKKyAgICBpZihyZXMpCisgICAgICByZXR1cm4gcmVzOworCisgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRDb3VudGVyKGRhdGEsIGJ5dGVjb3VudCk7CisKKyAgICBpZihDdXJsX3BncnNVcGRhdGUoY29ubikpCisgICAgICByZXMgPSBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworICAgIGVsc2UKKyAgICAgIHJlcyA9IEN1cmxfc3BlZWRjaGVjayhkYXRhLCBub3cpOworICB9CisgIGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkKKyAgICByZXMgPSBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworCisgIHJldHVybiByZXM7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2ZpbGUuaCBiL2N1cmwtNy4yNS4wL2xpYi9maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzYmQ3NQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9maWxlLmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBfX0ZJTEVfSAorI2RlZmluZSBfX0ZJTEVfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRklMRSB1bmlxdWUgc2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgRklMRVBST1RPIHsKKyAgY2hhciAqcGF0aDsgLyogdGhlIHBhdGggd2Ugb3BlcmF0ZSBvbiAqLworICBjaGFyICpmcmVlcGF0aDsgLyogcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGJsb2NrIHdlIG11c3QgZnJlZSwgdGhpcyBtaWdodAorICAgICAgICAgICAgICAgICAgICAgZGlmZmVyIGZyb20gdGhlICdwYXRoJyBwb2ludGVyICovCisgIGludCBmZDsgICAgIC8qIG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRvIHJlYWQgZnJvbSEgKi8KK307CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZJTEUKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9maWxlOworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9maWxlaW5mby5jIGIvY3VybC03LjI1LjAvbGliL2ZpbGVpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZmY2JiZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9maWxlaW5mby5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlICJzdHJkdXAuaCIKKyNpbmNsdWRlICJmaWxlaW5mby5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0cnVjdCBjdXJsX2ZpbGVpbmZvICpDdXJsX2ZpbGVpbmZvX2FsbG9jKHZvaWQpCit7CisgIHN0cnVjdCBjdXJsX2ZpbGVpbmZvICp0bXAgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjdXJsX2ZpbGVpbmZvKSk7CisgIGlmKCF0bXApCisgICAgcmV0dXJuIE5VTEw7CisgIG1lbXNldCh0bXAsIDAsIHNpemVvZihzdHJ1Y3QgY3VybF9maWxlaW5mbykpOworICByZXR1cm4gdG1wOworfQorCit2b2lkIEN1cmxfZmlsZWluZm9fZHRvcih2b2lkICp1c2VyLCB2b2lkICplbGVtZW50KQoreworICBzdHJ1Y3QgY3VybF9maWxlaW5mbyAqZmluZm8gPSBlbGVtZW50OworICAodm9pZCkgdXNlcjsKKyAgaWYoIWZpbmZvKQorICAgIHJldHVybjsKKworICBDdXJsX3NhZmVmcmVlKGZpbmZvLT5iX2RhdGEpOworCisgIGZyZWUoZmluZm8pOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2ZpbGVpbmZvLmggYi9jdXJsLTcuMjUuMC9saWIvZmlsZWluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGU1ZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2ZpbGVpbmZvLmgKQEAgLTAsMCArMSwzMyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9GSUxFSU5GT19ICisjZGVmaW5lIEhFQURFUl9DVVJMX0ZJTEVJTkZPX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworc3RydWN0IGN1cmxfZmlsZWluZm8gKkN1cmxfZmlsZWluZm9fYWxsb2Modm9pZCk7CisKK3ZvaWQgQ3VybF9maWxlaW5mb19kdG9yKHZvaWQgKiwgdm9pZCAqKTsKKworc3RydWN0IGN1cmxfZmlsZWluZm8gKkN1cmxfZmlsZWluZm9fZHVwKGNvbnN0IHN0cnVjdCBjdXJsX2ZpbGVpbmZvICpzcmMpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfRklMRUlORk9fSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2ZpcmVmb3gtZGIycGVtLnNoIGIvY3VybC03LjI1LjAvbGliL2ZpcmVmb3gtZGIycGVtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YWM1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvZmlyZWZveC1kYjJwZW0uc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMgKgorIyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjICoKKyMgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIyAqCisjICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMgKgorIyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBUaGlzIHNoZWxsIHNjcmlwdCBjcmVhdGVzIGEgZnJlc2ggY2EtYnVuZGxlLmNydCBmaWxlIGZvciB1c2Ugd2l0aCBsaWJjdXJsLgorIyBJdCBleHRyYWN0cyBhbGwgY2EgY2VydHMgaXQgZmluZHMgaW4gdGhlIGxvY2FsIEZpcmVmb3ggZGF0YWJhc2UgYW5kIGNvbnZlcnRzCisjIHRoZW0gYWxsIGludG8gUEVNIGZvcm1hdC4KKyMKK2RiPWBscyAtMWQgJEhPTUUvLm1vemlsbGEvZmlyZWZveC8qZGVmYXVsdGAKK291dD0kMQorCitpZiB0ZXN0IC16ICIkb3V0IjsgdGhlbgorICBvdXQ9ImNhLWJ1bmRsZS5jcnQiICMgdXNlIGEgc2Vuc2libGUgZGVmYXVsdAorZmkKKworY3VycmVudGRhdGU9YGRhdGVgCisKK2NhdCA+JG91dCA8PEVPRgorIyMKKyMjIEJ1bmRsZSBvZiBDQSBSb290IENlcnRpZmljYXRlcworIyMKKyMjIENvbnZlcnRlZCBhdDogJHtjdXJyZW50ZGF0ZX0KKyMjIFRoZXNlIHdlcmUgY29udmVydGVkIGZyb20gdGhlIGxvY2FsIEZpcmVmb3ggZGlyZWN0b3J5IGJ5IHRoZSBkYjJwZW0gc2NyaXB0LgorIyMKK0VPRgorCisKK2NlcnR1dGlsIC1MIC1oICdCdWlsdGluIE9iamVjdCBUb2tlbicgLWQgJGRiIHwgXAorZ3JlcCAnICpbQ2NHVFBwdV0qLFtDY0dUUHB1XSosW0NjR1RQcHVdKiAqJCcgfCBcCitzZWQgLWUgJ3MvICpbQ2NHVFBwdV0qLFtDY0dUUHB1XSosW0NjR1RQcHVdKiAqJC8vJyAtZSAncy9cKC4qXCkvIlwxIi8nIHwgXAorc29ydCB8IFwKK3doaWxlIHJlYWQgbmlja25hbWU7IFwKKyBkbyBlY2hvICRuaWNrbmFtZSB8IHNlZCAtZSAicy9CdWlsdGluIE9iamVjdCBUb2tlbjovL2ciOyBcCitldmFsIGNlcnR1dGlsIC1kICRkYiAtTCAtbiAiJG5pY2tuYW1lIiAtYSA7IFwKK2RvbmUgPj4gJG91dAorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvZm9ybWRhdGEuYyBiL2N1cmwtNy4yNS4wL2xpYi9mb3JtZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNDkxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvZm9ybWRhdGEuYwpAQCAtMCwwICsxLDE0OTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisvKiBMZW5ndGggb2YgdGhlIHJhbmRvbSBib3VuZGFyeSBzdHJpbmcuICovCisjZGVmaW5lIEJPVU5EQVJZX0xFTkdUSCA0MAorCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApIHx8IGRlZmluZWQoVVNFX1NTTEVBWSkKKworI2lmIGRlZmluZWQoSEFWRV9MSUJHRU5fSCkgJiYgZGVmaW5lZChIQVZFX0JBU0VOQU1FKQorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiIC8qIGZvciBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqLworI2luY2x1ZGUgImZvcm1kYXRhLmgiCisjaW5jbHVkZSAiY3VybF9yYW5kLmgiCisjaW5jbHVkZSAic3RyZXF1YWwuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNlbmRpZiAgLyogIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApIHx8IGRlZmluZWQoVVNFX1NTTEVBWSkgKi8KKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorCisjaWZuZGVmIEhBVkVfQkFTRU5BTUUKK3N0YXRpYyBjaGFyICpDdXJsX2Jhc2VuYW1lKGNoYXIgKnBhdGgpOworI2RlZmluZSBiYXNlbmFtZSh4KSAgQ3VybF9iYXNlbmFtZSgoeCkpCisjZW5kaWYKKworc3RhdGljIHNpemVfdCByZWFkZnJvbWZpbGUoc3RydWN0IEZvcm0gKmZvcm0sIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworCisvKiBXaGF0IGtpbmQgb2YgQ29udGVudC1UeXBlIHRvIHVzZSBvbiB1bi1zcGVjaWZpZWQgZmlsZXMgd2l0aCB1bnJlY29nbml6ZWQKKyAgIGV4dGVuc2lvbnMuICovCisjZGVmaW5lIEhUVFBQT1NUX0NPTlRFTlRUWVBFX0RFRkFVTFQgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIKKworI2RlZmluZSBGT1JNX0ZJTEVfU0VQQVJBVE9SICcsJworI2RlZmluZSBGT1JNX1RZUEVfU0VQQVJBVE9SICc7JworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQWRkSHR0cFBvc3QoKQorICoKKyAqIEFkZHMgYSBIdHRwUG9zdCBzdHJ1Y3R1cmUgdG8gdGhlIGxpc3QsIGlmIHBhcmVudF9wb3N0IGlzIGdpdmVuIGJlY29tZXMKKyAqIGEgc3VicG9zdCBvZiBwYXJlbnRfcG9zdCBpbnN0ZWFkIG9mIGEgZGlyZWN0IGxpc3QgZWxlbWVudC4KKyAqCisgKiBSZXR1cm5zIG5ld2x5IGFsbG9jYXRlZCBIdHRwUG9zdCBvbiBzdWNjZXNzIGFuZCBOVUxMIGlmIG1hbGxvYyBmYWlsZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqCitBZGRIdHRwUG9zdChjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbmd0aCwKKyAgICAgICAgICAgIGNoYXIgKnZhbHVlLCBzaXplX3QgY29udGVudHNsZW5ndGgsCisgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJsZW5ndGgsCisgICAgICAgICAgICBjaGFyICpjb250ZW50dHlwZSwKKyAgICAgICAgICAgIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCogY29udGVudEhlYWRlciwKKyAgICAgICAgICAgIGNoYXIgKnNob3dmaWxlbmFtZSwgY2hhciAqdXNlcnAsCisgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqcGFyZW50X3Bvc3QsCisgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKmh0dHBwb3N0LAorICAgICAgICAgICAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKipsYXN0X3Bvc3QpCit7CisgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpwb3N0OworICBwb3N0ID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY3VybF9odHRwcG9zdCkpOworICBpZihwb3N0KSB7CisgICAgcG9zdC0+bmFtZSA9IG5hbWU7CisgICAgcG9zdC0+bmFtZWxlbmd0aCA9IChsb25nKShuYW1lPyhuYW1lbGVuZ3RoP25hbWVsZW5ndGg6c3RybGVuKG5hbWUpKTowKTsKKyAgICBwb3N0LT5jb250ZW50cyA9IHZhbHVlOworICAgIHBvc3QtPmNvbnRlbnRzbGVuZ3RoID0gKGxvbmcpY29udGVudHNsZW5ndGg7CisgICAgcG9zdC0+YnVmZmVyID0gYnVmZmVyOworICAgIHBvc3QtPmJ1ZmZlcmxlbmd0aCA9IChsb25nKWJ1ZmZlcmxlbmd0aDsKKyAgICBwb3N0LT5jb250ZW50dHlwZSA9IGNvbnRlbnR0eXBlOworICAgIHBvc3QtPmNvbnRlbnRoZWFkZXIgPSBjb250ZW50SGVhZGVyOworICAgIHBvc3QtPnNob3dmaWxlbmFtZSA9IHNob3dmaWxlbmFtZTsKKyAgICBwb3N0LT51c2VycCA9IHVzZXJwLAorICAgIHBvc3QtPmZsYWdzID0gZmxhZ3M7CisgIH0KKyAgZWxzZQorICAgIHJldHVybiBOVUxMOworCisgIGlmKHBhcmVudF9wb3N0KSB7CisgICAgLyogbm93LCBwb2ludCBvdXIgJ21vcmUnIHRvIHRoZSBvcmlnaW5hbCAnbW9yZScgKi8KKyAgICBwb3N0LT5tb3JlID0gcGFyZW50X3Bvc3QtPm1vcmU7CisKKyAgICAvKiB0aGVuIG1vdmUgdGhlIG9yaWdpbmFsICdtb3JlJyB0byBwb2ludCB0byBvdXJzZWx2ZXMgKi8KKyAgICBwYXJlbnRfcG9zdC0+bW9yZSA9IHBvc3Q7CisgIH0KKyAgZWxzZSB7CisgICAgLyogbWFrZSB0aGUgcHJldmlvdXMgcG9pbnQgdG8gdGhpcyAqLworICAgIGlmKCpsYXN0X3Bvc3QpCisgICAgICAoKmxhc3RfcG9zdCktPm5leHQgPSBwb3N0OworICAgIGVsc2UKKyAgICAgICgqaHR0cHBvc3QpID0gcG9zdDsKKworICAgICgqbGFzdF9wb3N0KSA9IHBvc3Q7CisgIH0KKyAgcmV0dXJuIHBvc3Q7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBBZGRGb3JtSW5mbygpCisgKgorICogQWRkcyBhIEZvcm1JbmZvIHN0cnVjdHVyZSB0byB0aGUgbGlzdCBwcmVzZW50ZWQgYnkgcGFyZW50X2Zvcm1faW5mby4KKyAqCisgKiBSZXR1cm5zIG5ld2x5IGFsbG9jYXRlZCBGb3JtSW5mbyBvbiBzdWNjZXNzIGFuZCBOVUxMIGlmIG1hbGxvYyBmYWlsZWQvCisgKiBwYXJlbnRfZm9ybV9pbmZvIGlzIE5VTEwuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBGb3JtSW5mbyAqIEFkZEZvcm1JbmZvKGNoYXIgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY29udGVudHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtSW5mbyAqcGFyZW50X2Zvcm1faW5mbykKK3sKKyAgRm9ybUluZm8gKmZvcm1faW5mbzsKKyAgZm9ybV9pbmZvID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgRm9ybUluZm8pKTsKKyAgaWYoZm9ybV9pbmZvKSB7CisgICAgaWYodmFsdWUpCisgICAgICBmb3JtX2luZm8tPnZhbHVlID0gdmFsdWU7CisgICAgaWYoY29udGVudHR5cGUpCisgICAgICBmb3JtX2luZm8tPmNvbnRlbnR0eXBlID0gY29udGVudHR5cGU7CisgICAgZm9ybV9pbmZvLT5mbGFncyA9IEhUVFBQT1NUX0ZJTEVOQU1FOworICB9CisgIGVsc2UKKyAgICByZXR1cm4gTlVMTDsKKworICBpZihwYXJlbnRfZm9ybV9pbmZvKSB7CisgICAgLyogbm93LCBwb2ludCBvdXIgJ21vcmUnIHRvIHRoZSBvcmlnaW5hbCAnbW9yZScgKi8KKyAgICBmb3JtX2luZm8tPm1vcmUgPSBwYXJlbnRfZm9ybV9pbmZvLT5tb3JlOworCisgICAgLyogdGhlbiBtb3ZlIHRoZSBvcmlnaW5hbCAnbW9yZScgdG8gcG9pbnQgdG8gb3Vyc2VsdmVzICovCisgICAgcGFyZW50X2Zvcm1faW5mby0+bW9yZSA9IGZvcm1faW5mbzsKKyAgfQorCisgIHJldHVybiBmb3JtX2luZm87Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb250ZW50VHlwZUZvckZpbGVuYW1lKCkKKyAqCisgKiBQcm92aWRlcyBjb250ZW50IHR5cGUgZm9yIGZpbGVuYW1lIGlmIG9uZSBvZiB0aGUga25vd24gdHlwZXMgKGVsc2UKKyAqIChlaXRoZXIgdGhlIHByZXZ0eXBlIG9yIHRoZSBkZWZhdWx0IGlzIHJldHVybmVkKS4KKyAqCisgKiBSZXR1cm5zIHNvbWUgdmFsaWQgY29udGVudHR5cGUgZm9yIGZpbGVuYW1lLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY29uc3QgY2hhciAqIENvbnRlbnRUeXBlRm9yRmlsZW5hbWUgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcmV2dHlwZSkKK3sKKyAgY29uc3QgY2hhciAqY29udGVudHR5cGUgPSBOVUxMOworICB1bnNpZ25lZCBpbnQgaTsKKyAgLyoKKyAgICogTm8gdHlwZSB3YXMgc3BlY2lmaWVkLCB3ZSBzY2FuIHRocm91Z2ggYSBmZXcgd2VsbC1rbm93bgorICAgKiBleHRlbnNpb25zIGFuZCBwaWNrIHRoZSBmaXJzdCB3ZSBtYXRjaCEKKyAgICovCisgIHN0cnVjdCBDb250ZW50VHlwZSB7CisgICAgY2hhciBleHRlbnNpb25bNl07CisgICAgY29uc3QgY2hhciAqdHlwZTsKKyAgfTsKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb250ZW50VHlwZSBjdHRzW109eworICAgIHsiLmdpZiIsICAiaW1hZ2UvZ2lmIn0sCisgICAgeyIuanBnIiwgICJpbWFnZS9qcGVnIn0sCisgICAgeyIuanBlZyIsICJpbWFnZS9qcGVnIn0sCisgICAgeyIudHh0IiwgICJ0ZXh0L3BsYWluIn0sCisgICAgeyIuaHRtbCIsICJ0ZXh0L2h0bWwifSwKKyAgICB7Ii54bWwiLCAiYXBwbGljYXRpb24veG1sIn0KKyAgfTsKKworICBpZihwcmV2dHlwZSkKKyAgICAvKiBkZWZhdWx0IHRvIHRoZSBwcmV2aW91c2x5IHNldC91c2VkISAqLworICAgIGNvbnRlbnR0eXBlID0gcHJldnR5cGU7CisgIGVsc2UKKyAgICBjb250ZW50dHlwZSA9IEhUVFBQT1NUX0NPTlRFTlRUWVBFX0RFRkFVTFQ7CisKKyAgaWYoZmlsZW5hbWUpIHsgLyogaW4gY2FzZSBhIE5VTEwgd2FzIHBhc3NlZCBpbiAqLworICAgIGZvcihpPTA7IGk8c2l6ZW9mKGN0dHMpL3NpemVvZihjdHRzWzBdKTsgaSsrKSB7CisgICAgICBpZihzdHJsZW4oZmlsZW5hbWUpID49IHN0cmxlbihjdHRzW2ldLmV4dGVuc2lvbikpIHsKKyAgICAgICAgaWYoc3RyZXF1YWwoZmlsZW5hbWUgKworICAgICAgICAgICAgICAgICAgICBzdHJsZW4oZmlsZW5hbWUpIC0gc3RybGVuKGN0dHNbaV0uZXh0ZW5zaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgY3R0c1tpXS5leHRlbnNpb24pKSB7CisgICAgICAgICAgY29udGVudHR5cGUgPSBjdHRzW2ldLnR5cGU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgLyogd2UgaGF2ZSBhIGNvbnRlbnR0eXBlIGJ5IG5vdyAqLworICByZXR1cm4gY29udGVudHR5cGU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBtZW1kdXAoKQorICoKKyAqIENvcGllcyB0aGUgJ3NvdXJjZScgZGF0YSB0byBhIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgYnVmZmVyICh0aGF0IGlzCisgKiByZXR1cm5lZCkuIFVzZXMgYnVmZmVyX2xlbmd0aCBpZiBub3QgbnVsbCwgZWxzZSB1c2VzIHN0cmxlbiB0byBkZXRlcm1pbmUKKyAqIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciB0byBiZSBjb3BpZWQKKyAqCisgKiBSZXR1cm5zIHRoZSBuZXcgcG9pbnRlciBvciBOVUxMIG9uIGZhaWx1cmUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBjaGFyICptZW1kdXAoY29uc3QgY2hhciAqc3JjLCBzaXplX3QgYnVmZmVyX2xlbmd0aCkKK3sKKyAgc2l6ZV90IGxlbmd0aDsKKyAgYm9vbCBhZGQgPSBGQUxTRTsKKyAgY2hhciAqYnVmZmVyOworCisgIGlmKGJ1ZmZlcl9sZW5ndGgpCisgICAgbGVuZ3RoID0gYnVmZmVyX2xlbmd0aDsKKyAgZWxzZSBpZihzcmMpIHsKKyAgICBsZW5ndGggPSBzdHJsZW4oc3JjKTsKKyAgICBhZGQgPSBUUlVFOworICB9CisgIGVsc2UKKyAgICAvKiBubyBsZW5ndGggYW5kIGEgTlVMTCBzcmMgcG9pbnRlciEgKi8KKyAgICByZXR1cm4gc3RyZHVwKCIiKTsKKworICBidWZmZXIgPSBtYWxsb2MobGVuZ3RoK2FkZCk7CisgIGlmKCFidWZmZXIpCisgICAgcmV0dXJuIE5VTEw7IC8qIGZhaWwgKi8KKworICBtZW1jcHkoYnVmZmVyLCBzcmMsIGxlbmd0aCk7CisKKyAgLyogaWYgbGVuZ3RoIHVua25vd24gZG8gbnVsbCB0ZXJtaW5hdGlvbiAqLworICBpZihhZGQpCisgICAgYnVmZmVyW2xlbmd0aF0gPSAnXDAnOworCisgIHJldHVybiBidWZmZXI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGb3JtQWRkKCkKKyAqCisgKiBTdG9yZXMgYSBmb3JtcG9zdCBwYXJhbWV0ZXIgYW5kIGJ1aWxkcyB0aGUgYXBwcm9wcmlhdGUgbGlua2VkIGxpc3QuCisgKgorICogSGFzIHR3byBwcmluY2lwYWwgZnVuY3Rpb25hbGl0aWVzOiB1c2luZyBmaWxlcyBhbmQgYnl0ZSBhcnJheXMgYXMKKyAqIHBvc3QgcGFydHMuIEJ5dGUgYXJyYXlzIGFyZSBlaXRoZXIgY29waWVkIG9yIGp1c3QgdGhlIHBvaW50ZXIgaXMgc3RvcmVkCisgKiAoYXMgdGhlIHVzZXIgcmVxdWVzdHMpIHdoaWxlIGZvciBmaWxlcyBvbmx5IHRoZSBmaWxlbmFtZSBhbmQgbm90IHRoZQorICogY29udGVudCBpcyBzdG9yZWQuCisgKgorICogV2hpbGUgeW91IG1heSBoYXZlIG9ubHkgb25lIGJ5dGUgYXJyYXkgZm9yIGVhY2ggbmFtZSwgbXVsdGlwbGUgZmlsZW5hbWVzCisgKiBhcmUgYWxsb3dlZCAoYW5kIGJlY2F1c2Ugb2YgdGhpcyBmZWF0dXJlIENVUkxGT1JNX0VORCBpcyBuZWVkZWQgYWZ0ZXIKKyAqIHVzaW5nIENVUkxGT1JNX0ZJTEUpLgorICoKKyAqIEV4YW1wbGVzOgorICoKKyAqIFNpbXBsZSBuYW1lL3ZhbHVlIHBhaXIgd2l0aCBjb3BpZWQgY29udGVudHM6CisgKiBjdXJsX2Zvcm1hZGQgKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJuYW1lIiwKKyAqIENVUkxGT1JNX0NPUFlDT05URU5UUywgInZhbHVlIiwgQ1VSTEZPUk1fRU5EKTsKKyAqCisgKiBuYW1lL3ZhbHVlIHBhaXIgd2hlcmUgb25seSB0aGUgY29udGVudCBwb2ludGVyIGlzIHJlbWVtYmVyZWQ6CisgKiBjdXJsX2Zvcm1hZGQgKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJuYW1lIiwKKyAqIENVUkxGT1JNX1BUUkNPTlRFTlRTLCBwdHIsIENVUkxGT1JNX0NPTlRFTlRTTEVOR1RILCAxMCwgQ1VSTEZPUk1fRU5EKTsKKyAqIChpZiBDVVJMRk9STV9DT05URU5UU0xFTkdUSCBpcyBtaXNzaW5nIHN0cmxlbiAoKSBpcyB1c2VkKQorICoKKyAqIHN0b3JpbmcgYSBmaWxlbmFtZSAoQ09OVEVOVFRZUEUgaXMgb3B0aW9uYWwhKToKKyAqIGN1cmxfZm9ybWFkZCAoJnBvc3QsICZsYXN0LCBDVVJMRk9STV9DT1BZTkFNRSwgIm5hbWUiLAorICogQ1VSTEZPUk1fRklMRSwgImZpbGVuYW1lMSIsIENVUkxGT1JNX0NPTlRFTlRUWVBFLCAicGxhaW4vdGV4dCIsCisgKiBDVVJMRk9STV9FTkQpOworICoKKyAqIHN0b3JpbmcgbXVsdGlwbGUgZmlsZW5hbWVzOgorICogY3VybF9mb3JtYWRkICgmcG9zdCwgJmxhc3QsIENVUkxGT1JNX0NPUFlOQU1FLCAibmFtZSIsCisgKiBDVVJMRk9STV9GSUxFLCAiZmlsZW5hbWUxIiwgQ1VSTEZPUk1fRklMRSwgImZpbGVuYW1lMiIsIENVUkxGT1JNX0VORCk7CisgKgorICogUmV0dXJuczoKKyAqIENVUkxfRk9STUFERF9PSyAgICAgICAgICAgICBvbiBzdWNjZXNzCisgKiBDVVJMX0ZPUk1BRERfTUVNT1JZICAgICAgICAgaWYgdGhlIEZvcm1JbmZvIGFsbG9jYXRpb24gZmFpbHMKKyAqIENVUkxfRk9STUFERF9PUFRJT05fVFdJQ0UgICBpZiBvbmUgb3B0aW9uIGlzIGdpdmVuIHR3aWNlIGZvciBvbmUgRm9ybQorICogQ1VSTF9GT1JNQUREX05VTEwgICAgICAgICAgIGlmIGEgbnVsbCBwb2ludGVyIHdhcyBnaXZlbiBmb3IgYSBjaGFyCisgKiBDVVJMX0ZPUk1BRERfTUVNT1JZICAgICAgICAgaWYgdGhlIGFsbG9jYXRpb24gb2YgYSBGb3JtSW5mbyBzdHJ1Y3QgZmFpbGVkCisgKiBDVVJMX0ZPUk1BRERfVU5LTk9XTl9PUFRJT04gaWYgYW4gdW5rbm93biBvcHRpb24gd2FzIHVzZWQKKyAqIENVUkxfRk9STUFERF9JTkNPTVBMRVRFICAgICBpZiB0aGUgc29tZSBGb3JtSW5mbyBpcyBub3QgY29tcGxldGUgKG9yIGVycm9yKQorICogQ1VSTF9GT1JNQUREX01FTU9SWSAgICAgICAgIGlmIGEgSHR0cFBvc3Qgc3RydWN0IGNhbm5vdCBiZSBhbGxvY2F0ZWQKKyAqIENVUkxfRk9STUFERF9NRU1PUlkgICAgICAgICBpZiBzb21lIGFsbG9jYXRpb24gZm9yIHN0cmluZyBjb3B5aW5nIGZhaWxlZC4KKyAqIENVUkxfRk9STUFERF9JTExFR0FMX0FSUkFZICBpZiBhbiBpbGxlZ2FsIG9wdGlvbiBpcyB1c2VkIGluIGFuIGFycmF5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljCitDVVJMRk9STWNvZGUgRm9ybUFkZChzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKmh0dHBwb3N0LAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKipsYXN0X3Bvc3QsCisgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IHBhcmFtcykKK3sKKyAgRm9ybUluZm8gKmZpcnN0X2Zvcm0sICpjdXJyZW50X2Zvcm0sICpmb3JtID0gTlVMTDsKKyAgQ1VSTEZPUk1jb2RlIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9PSzsKKyAgY29uc3QgY2hhciAqcHJldnR5cGUgPSBOVUxMOworICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqcG9zdCA9IE5VTEw7CisgIENVUkxmb3Jtb3B0aW9uIG9wdGlvbjsKKyAgc3RydWN0IGN1cmxfZm9ybXMgKmZvcm1zID0gTlVMTDsKKyAgY2hhciAqYXJyYXlfdmFsdWU9TlVMTDsgLyogdmFsdWUgcmVhZCBmcm9tIGFuIGFycmF5ICovCisKKyAgLyogVGhpcyBpcyBhIHN0YXRlIHZhcmlhYmxlLCB0aGF0IGlmIFRSVUUgbWVhbnMgdGhhdCB3ZSdyZSBwYXJzaW5nIGFuCisgICAgIGFycmF5IHRoYXQgd2UgZ290IHBhc3NlZCB0byB1cy4gSWYgRkFMU0Ugd2UncmUgcGFyc2luZyB0aGUgaW5wdXQKKyAgICAgdmFfbGlzdCBhcmd1bWVudHMuICovCisgIGJvb2wgYXJyYXlfc3RhdGUgPSBGQUxTRTsKKworICAvKgorICAgKiBXZSBuZWVkIHRvIGFsbG9jYXRlIHRoZSBmaXJzdCBzdHJ1Y3QgdG8gZmlsbCBpbi4KKyAgICovCisgIGZpcnN0X2Zvcm0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBGb3JtSW5mbykpOworICBpZighZmlyc3RfZm9ybSkKKyAgICByZXR1cm4gQ1VSTF9GT1JNQUREX01FTU9SWTsKKworICBjdXJyZW50X2Zvcm0gPSBmaXJzdF9mb3JtOworCisgIC8qCisgICAqIExvb3AgdGhyb3VnaCBhbGwgdGhlIG9wdGlvbnMgc2V0LiBCcmVhayBpZiB3ZSBoYXZlIGFuIGVycm9yIHRvIHJlcG9ydC4KKyAgICovCisgIHdoaWxlKHJldHVybl92YWx1ZSA9PSBDVVJMX0ZPUk1BRERfT0spIHsKKworICAgIC8qIGZpcnN0IHNlZSBpZiB3ZSBoYXZlIG1vcmUgcGFydHMgb2YgdGhlIGFycmF5IHBhcmFtICovCisgICAgaWYoYXJyYXlfc3RhdGUgJiYgZm9ybXMpIHsKKyAgICAgIC8qIGdldCB0aGUgdXBjb21pbmcgb3B0aW9uIGZyb20gdGhlIGdpdmVuIGFycmF5ICovCisgICAgICBvcHRpb24gPSBmb3Jtcy0+b3B0aW9uOworICAgICAgYXJyYXlfdmFsdWUgPSAoY2hhciAqKWZvcm1zLT52YWx1ZTsKKworICAgICAgZm9ybXMrKzsgLyogYWR2YW5jZSB0aGlzIHRvIG5leHQgZW50cnkgKi8KKyAgICAgIGlmKENVUkxGT1JNX0VORCA9PSBvcHRpb24pIHsKKyAgICAgICAgLyogZW5kIG9mIGFycmF5IHN0YXRlICovCisgICAgICAgIGFycmF5X3N0YXRlID0gRkFMU0U7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFRoaXMgaXMgbm90IGFycmF5LXN0YXRlLCBnZXQgbmV4dCBvcHRpb24gKi8KKyAgICAgIG9wdGlvbiA9IHZhX2FyZyhwYXJhbXMsIENVUkxmb3Jtb3B0aW9uKTsKKyAgICAgIGlmKENVUkxGT1JNX0VORCA9PSBvcHRpb24pCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAob3B0aW9uKSB7CisgICAgY2FzZSBDVVJMRk9STV9BUlJBWToKKyAgICAgIGlmKGFycmF5X3N0YXRlKQorICAgICAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IGFuIGFycmF5IGZyb20gd2l0aGluIGFuIGFycmF5ICovCisgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9JTExFR0FMX0FSUkFZOworICAgICAgZWxzZSB7CisgICAgICAgIGZvcm1zID0gdmFfYXJnKHBhcmFtcywgc3RydWN0IGN1cmxfZm9ybXMgKik7CisgICAgICAgIGlmKGZvcm1zKQorICAgICAgICAgIGFycmF5X3N0YXRlID0gVFJVRTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9OVUxMOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qCisgICAgICAgKiBTZXQgdGhlIE5hbWUgcHJvcGVydHkuCisgICAgICAgKi8KKyAgICBjYXNlIENVUkxGT1JNX1BUUk5BTUU6CisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgICAgICAvKiBUcmVhdCBDVVJMRk9STV9QVFIgbGlrZSBDVVJMRk9STV9DT1BZTkFNRSBzbyB0aGF0IGxpYmN1cmwgd2lsbCBjb3B5CisgICAgICAgKiB0aGUgZGF0YSBpbiBhbGwgY2FzZXMgc28gdGhhdCB3ZSdsbCBoYXZlIHNhZmUgbWVtb3J5IGZvciB0aGUgZXZlbnR1YWwKKyAgICAgICAqIGNvbnZlcnNpb24uCisgICAgICAgKi8KKyNlbHNlCisgICAgICBjdXJyZW50X2Zvcm0tPmZsYWdzIHw9IEhUVFBQT1NUX1BUUk5BTUU7IC8qIGZhbGwgdGhyb3VnaCAqLworI2VuZGlmCisgICAgY2FzZSBDVVJMRk9STV9DT1BZTkFNRToKKyAgICAgIGlmKGN1cnJlbnRfZm9ybS0+bmFtZSkKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX09QVElPTl9UV0lDRTsKKyAgICAgIGVsc2UgeworICAgICAgICBjaGFyICpuYW1lID0gYXJyYXlfc3RhdGU/CisgICAgICAgICAgYXJyYXlfdmFsdWU6dmFfYXJnKHBhcmFtcywgY2hhciAqKTsKKyAgICAgICAgaWYobmFtZSkKKyAgICAgICAgICBjdXJyZW50X2Zvcm0tPm5hbWUgPSBuYW1lOyAvKiBzdG9yZSBmb3IgdGhlIG1vbWVudCAqLworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX05VTEw7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxGT1JNX05BTUVMRU5HVEg6CisgICAgICBpZihjdXJyZW50X2Zvcm0tPm5hbWVsZW5ndGgpCisgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9PUFRJT05fVFdJQ0U7CisgICAgICBlbHNlCisgICAgICAgIGN1cnJlbnRfZm9ybS0+bmFtZWxlbmd0aCA9CisgICAgICAgICAgYXJyYXlfc3RhdGU/KHNpemVfdClhcnJheV92YWx1ZTooc2l6ZV90KXZhX2FyZyhwYXJhbXMsIGxvbmcpOworICAgICAgYnJlYWs7CisKKyAgICAgIC8qCisgICAgICAgKiBTZXQgdGhlIGNvbnRlbnRzIHByb3BlcnR5LgorICAgICAgICovCisgICAgY2FzZSBDVVJMRk9STV9QVFJDT05URU5UUzoKKyAgICAgIGN1cnJlbnRfZm9ybS0+ZmxhZ3MgfD0gSFRUUFBPU1RfUFRSQ09OVEVOVFM7IC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTOgorICAgICAgaWYoY3VycmVudF9mb3JtLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX09QVElPTl9UV0lDRTsKKyAgICAgIGVsc2UgeworICAgICAgICBjaGFyICp2YWx1ZSA9CisgICAgICAgICAgYXJyYXlfc3RhdGU/YXJyYXlfdmFsdWU6dmFfYXJnKHBhcmFtcywgY2hhciAqKTsKKyAgICAgICAgaWYodmFsdWUpCisgICAgICAgICAgY3VycmVudF9mb3JtLT52YWx1ZSA9IHZhbHVlOyAvKiBzdG9yZSBmb3IgdGhlIG1vbWVudCAqLworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX05VTEw7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxGT1JNX0NPTlRFTlRTTEVOR1RIOgorICAgICAgaWYoY3VycmVudF9mb3JtLT5jb250ZW50c2xlbmd0aCkKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX09QVElPTl9UV0lDRTsKKyAgICAgIGVsc2UKKyAgICAgICAgY3VycmVudF9mb3JtLT5jb250ZW50c2xlbmd0aCA9CisgICAgICAgICAgYXJyYXlfc3RhdGU/KHNpemVfdClhcnJheV92YWx1ZTooc2l6ZV90KXZhX2FyZyhwYXJhbXMsIGxvbmcpOworICAgICAgYnJlYWs7CisKKyAgICAgIC8qIEdldCBjb250ZW50cyBmcm9tIGEgZ2l2ZW4gZmlsZSBuYW1lICovCisgICAgY2FzZSBDVVJMRk9STV9GSUxFQ09OVEVOVDoKKyAgICAgIGlmKGN1cnJlbnRfZm9ybS0+ZmxhZ3MgIT0gMCkKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX09QVElPTl9UV0lDRTsKKyAgICAgIGVsc2UgeworICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IGFycmF5X3N0YXRlPworICAgICAgICAgIGFycmF5X3ZhbHVlOnZhX2FyZyhwYXJhbXMsIGNoYXIgKik7CisgICAgICAgIGlmKGZpbGVuYW1lKSB7CisgICAgICAgICAgY3VycmVudF9mb3JtLT52YWx1ZSA9IHN0cmR1cChmaWxlbmFtZSk7CisgICAgICAgICAgaWYoIWN1cnJlbnRfZm9ybS0+dmFsdWUpCisgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBDVVJMX0ZPUk1BRERfTUVNT1JZOworICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY3VycmVudF9mb3JtLT5mbGFncyB8PSBIVFRQUE9TVF9SRUFERklMRTsKKyAgICAgICAgICAgIGN1cnJlbnRfZm9ybS0+dmFsdWVfYWxsb2MgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX05VTEw7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyogV2UgdXBsb2FkIGEgZmlsZSAqLworICAgIGNhc2UgQ1VSTEZPUk1fRklMRToKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBhcnJheV9zdGF0ZT9hcnJheV92YWx1ZToKKyAgICAgICAgICB2YV9hcmcocGFyYW1zLCBjaGFyICopOworCisgICAgICAgIGlmKGN1cnJlbnRfZm9ybS0+dmFsdWUpIHsKKyAgICAgICAgICBpZihjdXJyZW50X2Zvcm0tPmZsYWdzICYgSFRUUFBPU1RfRklMRU5BTUUpIHsKKyAgICAgICAgICAgIGlmKGZpbGVuYW1lKSB7CisgICAgICAgICAgICAgIGNoYXIgKmZuYW1lID0gc3RyZHVwKGZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgaWYoIWZuYW1lKQorICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9NRU1PUlk7CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGZvcm0gPSBBZGRGb3JtSW5mbyhmbmFtZSwgTlVMTCwgY3VycmVudF9mb3JtKTsKKyAgICAgICAgICAgICAgICBpZighZm9ybSkgeworICAgICAgICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShmbmFtZSk7CisgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBDVVJMX0ZPUk1BRERfTUVNT1JZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIGZvcm0tPnZhbHVlX2FsbG9jID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZm9ybSA9IGZvcm07CisgICAgICAgICAgICAgICAgICBmb3JtID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX05VTEw7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9PUFRJT05fVFdJQ0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgaWYoZmlsZW5hbWUpIHsKKyAgICAgICAgICAgIGN1cnJlbnRfZm9ybS0+dmFsdWUgPSBzdHJkdXAoZmlsZW5hbWUpOworICAgICAgICAgICAgaWYoIWN1cnJlbnRfZm9ybS0+dmFsdWUpCisgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9NRU1PUlk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgY3VycmVudF9mb3JtLT5mbGFncyB8PSBIVFRQUE9TVF9GSUxFTkFNRTsKKyAgICAgICAgICAgICAgY3VycmVudF9mb3JtLT52YWx1ZV9hbGxvYyA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9OVUxMOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBDVVJMRk9STV9CVUZGRVJQVFI6CisgICAgICBjdXJyZW50X2Zvcm0tPmZsYWdzIHw9IEhUVFBQT1NUX1BUUkJVRkZFUnxIVFRQUE9TVF9CVUZGRVI7CisgICAgICBpZihjdXJyZW50X2Zvcm0tPmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX09QVElPTl9UV0lDRTsKKyAgICAgIGVsc2UgeworICAgICAgICBjaGFyICpidWZmZXIgPQorICAgICAgICAgIGFycmF5X3N0YXRlP2FycmF5X3ZhbHVlOnZhX2FyZyhwYXJhbXMsIGNoYXIgKik7CisgICAgICAgIGlmKGJ1ZmZlcikgeworICAgICAgICAgIGN1cnJlbnRfZm9ybS0+YnVmZmVyID0gYnVmZmVyOyAvKiBzdG9yZSBmb3IgdGhlIG1vbWVudCAqLworICAgICAgICAgIGN1cnJlbnRfZm9ybS0+dmFsdWUgPSBidWZmZXI7IC8qIG1ha2UgaXQgbm9uLU5VTEwgdG8gYmUgYWNjZXB0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBmaW5lICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9OVUxMOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxGT1JNX0JVRkZFUkxFTkdUSDoKKyAgICAgIGlmKGN1cnJlbnRfZm9ybS0+YnVmZmVybGVuZ3RoKQorICAgICAgICByZXR1cm5fdmFsdWUgPSBDVVJMX0ZPUk1BRERfT1BUSU9OX1RXSUNFOworICAgICAgZWxzZQorICAgICAgICBjdXJyZW50X2Zvcm0tPmJ1ZmZlcmxlbmd0aCA9CisgICAgICAgICAgYXJyYXlfc3RhdGU/KHNpemVfdClhcnJheV92YWx1ZTooc2l6ZV90KXZhX2FyZyhwYXJhbXMsIGxvbmcpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxGT1JNX1NUUkVBTToKKyAgICAgIGN1cnJlbnRfZm9ybS0+ZmxhZ3MgfD0gSFRUUFBPU1RfQ0FMTEJBQ0s7CisgICAgICBpZihjdXJyZW50X2Zvcm0tPnVzZXJwKQorICAgICAgICByZXR1cm5fdmFsdWUgPSBDVVJMX0ZPUk1BRERfT1BUSU9OX1RXSUNFOworICAgICAgZWxzZSB7CisgICAgICAgIGNoYXIgKnVzZXJwID0KKyAgICAgICAgICBhcnJheV9zdGF0ZT9hcnJheV92YWx1ZTp2YV9hcmcocGFyYW1zLCBjaGFyICopOworICAgICAgICBpZih1c2VycCkgeworICAgICAgICAgIGN1cnJlbnRfZm9ybS0+dXNlcnAgPSB1c2VycDsKKyAgICAgICAgICBjdXJyZW50X2Zvcm0tPnZhbHVlID0gdXNlcnA7IC8qIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgdHJ1ZSBidXQgd2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcml2ZSBhIHZhbHVlIGZyb20gdGhpcyBsYXRlciBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdlIG5lZWQgdGhpcyBub24tTlVMTCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQgYXMgYSBmaW5lIGZvcm0gcGFydCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm5fdmFsdWUgPSBDVVJMX0ZPUk1BRERfTlVMTDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMRk9STV9DT05URU5UVFlQRToKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqY29udGVudHR5cGUgPQorICAgICAgICAgIGFycmF5X3N0YXRlP2FycmF5X3ZhbHVlOnZhX2FyZyhwYXJhbXMsIGNoYXIgKik7CisgICAgICAgIGlmKGN1cnJlbnRfZm9ybS0+Y29udGVudHR5cGUpIHsKKyAgICAgICAgICBpZihjdXJyZW50X2Zvcm0tPmZsYWdzICYgSFRUUFBPU1RfRklMRU5BTUUpIHsKKyAgICAgICAgICAgIGlmKGNvbnRlbnR0eXBlKSB7CisgICAgICAgICAgICAgIGNoYXIgKnR5cGUgPSBzdHJkdXAoY29udGVudHR5cGUpOworICAgICAgICAgICAgICBpZighdHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBDVVJMX0ZPUk1BRERfTUVNT1JZOworICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3JtID0gQWRkRm9ybUluZm8oTlVMTCwgdHlwZSwgY3VycmVudF9mb3JtKTsKKyAgICAgICAgICAgICAgICBpZighZm9ybSkgeworICAgICAgICAgICAgICAgICAgQ3VybF9zYWZlZnJlZSh0eXBlKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9NRU1PUlk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgZm9ybS0+Y29udGVudHR5cGVfYWxsb2MgPSBUUlVFOworICAgICAgICAgICAgICAgICAgY3VycmVudF9mb3JtID0gZm9ybTsKKyAgICAgICAgICAgICAgICAgIGZvcm0gPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBDVVJMX0ZPUk1BRERfTlVMTDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX09QVElPTl9UV0lDRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBpZihjb250ZW50dHlwZSkgeworICAgICAgICAgICAgY3VycmVudF9mb3JtLT5jb250ZW50dHlwZSA9IHN0cmR1cChjb250ZW50dHlwZSk7CisgICAgICAgICAgICBpZighY3VycmVudF9mb3JtLT5jb250ZW50dHlwZSkKKyAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX01FTU9SWTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgY3VycmVudF9mb3JtLT5jb250ZW50dHlwZV9hbGxvYyA9IFRSVUU7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9OVUxMOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIGNhc2UgQ1VSTEZPUk1fQ09OVEVOVEhFQURFUjoKKyAgICAgIHsKKyAgICAgICAgLyogdGhpcyAiY2FzdCBpbmNyZWFzZXMgcmVxdWlyZWQgYWxpZ25tZW50IG9mIHRhcmdldCB0eXBlIiBidXQKKyAgICAgICAgICAgd2UgY29uc2lkZXIgaXQgT0sgYW55d2F5ICovCisgICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBsaXN0ID0gYXJyYXlfc3RhdGU/CisgICAgICAgICAgKHN0cnVjdCBjdXJsX3NsaXN0KilhcnJheV92YWx1ZToKKyAgICAgICAgICB2YV9hcmcocGFyYW1zLCBzdHJ1Y3QgY3VybF9zbGlzdCopOworCisgICAgICAgIGlmKGN1cnJlbnRfZm9ybS0+Y29udGVudGhlYWRlcikKKyAgICAgICAgICByZXR1cm5fdmFsdWUgPSBDVVJMX0ZPUk1BRERfT1BUSU9OX1RXSUNFOworICAgICAgICBlbHNlCisgICAgICAgICAgY3VycmVudF9mb3JtLT5jb250ZW50aGVhZGVyID0gbGlzdDsKKworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICBjYXNlIENVUkxGT1JNX0ZJTEVOQU1FOgorICAgIGNhc2UgQ1VSTEZPUk1fQlVGRkVSOgorICAgICAgeworICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IGFycmF5X3N0YXRlP2FycmF5X3ZhbHVlOgorICAgICAgICAgIHZhX2FyZyhwYXJhbXMsIGNoYXIgKik7CisgICAgICAgIGlmKGN1cnJlbnRfZm9ybS0+c2hvd2ZpbGVuYW1lKQorICAgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9PUFRJT05fVFdJQ0U7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGN1cnJlbnRfZm9ybS0+c2hvd2ZpbGVuYW1lID0gc3RyZHVwKGZpbGVuYW1lKTsKKyAgICAgICAgICBpZighY3VycmVudF9mb3JtLT5zaG93ZmlsZW5hbWUpCisgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBDVVJMX0ZPUk1BRERfTUVNT1JZOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN1cnJlbnRfZm9ybS0+c2hvd2ZpbGVuYW1lX2FsbG9jID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX1VOS05PV05fT1BUSU9OOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgaWYoQ1VSTF9GT1JNQUREX09LICE9IHJldHVybl92YWx1ZSkgeworICAgIC8qIE9uIGVycm9yLCBmcmVlIGFsbG9jYXRlZCBmaWVsZHMgZm9yIGFsbCBub2RlcyBvZiB0aGUgRm9ybUluZm8gbGlua2VkCisgICAgICAgbGlzdCB3aXRob3V0IGRlYWxsb2NhdGluZyBub2Rlcy4gTGlzdCBub2RlcyBhcmUgZGVhbGxvY2F0ZWQgbGF0ZXIgb24gKi8KKyAgICBGb3JtSW5mbyAqcHRyOworICAgIGZvcihwdHIgPSBmaXJzdF9mb3JtOyBwdHIgIT0gTlVMTDsgcHRyID0gcHRyLT5tb3JlKSB7CisgICAgICBpZihwdHItPm5hbWVfYWxsb2MpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShwdHItPm5hbWUpOworICAgICAgICBwdHItPm5hbWVfYWxsb2MgPSBGQUxTRTsKKyAgICAgIH0KKyAgICAgIGlmKHB0ci0+dmFsdWVfYWxsb2MpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShwdHItPnZhbHVlKTsKKyAgICAgICAgcHRyLT52YWx1ZV9hbGxvYyA9IEZBTFNFOworICAgICAgfQorICAgICAgaWYocHRyLT5jb250ZW50dHlwZV9hbGxvYykgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHB0ci0+Y29udGVudHR5cGUpOworICAgICAgICBwdHItPmNvbnRlbnR0eXBlX2FsbG9jID0gRkFMU0U7CisgICAgICB9CisgICAgICBpZihwdHItPnNob3dmaWxlbmFtZV9hbGxvYykgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHB0ci0+c2hvd2ZpbGVuYW1lKTsKKyAgICAgICAgcHRyLT5zaG93ZmlsZW5hbWVfYWxsb2MgPSBGQUxTRTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZihDVVJMX0ZPUk1BRERfT0sgPT0gcmV0dXJuX3ZhbHVlKSB7CisgICAgLyogZ28gdGhyb3VnaCB0aGUgbGlzdCwgY2hlY2sgZm9yIGNvbXBsZXRlbmVzcyBhbmQgaWYgZXZlcnl0aGluZyBpcworICAgICAqIGFscmlnaHQgYWRkIHRoZSBIdHRwUG9zdCBpdGVtIG90aGVyd2lzZSBzZXQgcmV0dXJuX3ZhbHVlIGFjY29yZGluZ2x5ICovCisKKyAgICBwb3N0ID0gTlVMTDsKKyAgICBmb3IoZm9ybSA9IGZpcnN0X2Zvcm07CisgICAgICAgIGZvcm0gIT0gTlVMTDsKKyAgICAgICAgZm9ybSA9IGZvcm0tPm1vcmUpIHsKKyAgICAgIGlmKCgoIWZvcm0tPm5hbWUgfHwgIWZvcm0tPnZhbHVlKSAmJiAhcG9zdCkgfHwKKyAgICAgICAgICggKGZvcm0tPmNvbnRlbnRzbGVuZ3RoKSAmJgorICAgICAgICAgICAoZm9ybS0+ZmxhZ3MgJiBIVFRQUE9TVF9GSUxFTkFNRSkgKSB8fAorICAgICAgICAgKCAoZm9ybS0+ZmxhZ3MgJiBIVFRQUE9TVF9GSUxFTkFNRSkgJiYKKyAgICAgICAgICAgKGZvcm0tPmZsYWdzICYgSFRUUFBPU1RfUFRSQ09OVEVOVFMpICkgfHwKKworICAgICAgICAgKCAoIWZvcm0tPmJ1ZmZlcikgJiYKKyAgICAgICAgICAgKGZvcm0tPmZsYWdzICYgSFRUUFBPU1RfQlVGRkVSKSAmJgorICAgICAgICAgICAoZm9ybS0+ZmxhZ3MgJiBIVFRQUE9TVF9QVFJCVUZGRVIpICkgfHwKKworICAgICAgICAgKCAoZm9ybS0+ZmxhZ3MgJiBIVFRQUE9TVF9SRUFERklMRSkgJiYKKyAgICAgICAgICAgKGZvcm0tPmZsYWdzICYgSFRUUFBPU1RfUFRSQ09OVEVOVFMpICkKKyAgICAgICAgKSB7CisgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9JTkNPTVBMRVRFOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZigoKGZvcm0tPmZsYWdzICYgSFRUUFBPU1RfRklMRU5BTUUpIHx8CisgICAgICAgICAgICAoZm9ybS0+ZmxhZ3MgJiBIVFRQUE9TVF9CVUZGRVIpKSAmJgorICAgICAgICAgICAhZm9ybS0+Y29udGVudHR5cGUgKSB7CisgICAgICAgICAgLyogb3VyIGNvbnRlbnR0eXBlIGlzIG1pc3NpbmcgKi8KKyAgICAgICAgICBmb3JtLT5jb250ZW50dHlwZQorICAgICAgICAgICAgPSBzdHJkdXAoQ29udGVudFR5cGVGb3JGaWxlbmFtZShmb3JtLT52YWx1ZSwgcHJldnR5cGUpKTsKKyAgICAgICAgICBpZighZm9ybS0+Y29udGVudHR5cGUpIHsKKyAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9NRU1PUlk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgZm9ybS0+Y29udGVudHR5cGVfYWxsb2MgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIGlmKCEoZm9ybS0+ZmxhZ3MgJiBIVFRQUE9TVF9QVFJOQU1FKSAmJgorICAgICAgICAgICAoZm9ybSA9PSBmaXJzdF9mb3JtKSApIHsKKyAgICAgICAgICAvKiBOb3RlIHRoYXQgdGhlcmUncyBzbWFsbCByaXNrIHRoYXQgZm9ybS0+bmFtZSBpcyBOVUxMIGhlcmUgaWYgdGhlCisgICAgICAgICAgICAgYXBwIHBhc3NlZCBpbiBhIGJhZCBjb21ibywgc28gd2UgYmV0dGVyIGNoZWNrIGZvciB0aGF0IGZpcnN0LiAqLworICAgICAgICAgIGlmKGZvcm0tPm5hbWUpCisgICAgICAgICAgICAvKiBjb3B5IG5hbWUgKHdpdGhvdXQgc3RyZHVwOyBwb3NzaWJseSBjb250YWlucyBudWxsIGNoYXJhY3RlcnMpICovCisgICAgICAgICAgICBmb3JtLT5uYW1lID0gbWVtZHVwKGZvcm0tPm5hbWUsIGZvcm0tPm5hbWVsZW5ndGgpOworICAgICAgICAgIGlmKCFmb3JtLT5uYW1lKSB7CisgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBDVVJMX0ZPUk1BRERfTUVNT1JZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGZvcm0tPm5hbWVfYWxsb2MgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIGlmKCEoZm9ybS0+ZmxhZ3MgJiAoSFRUUFBPU1RfRklMRU5BTUUgfCBIVFRQUE9TVF9SRUFERklMRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFBPU1RfUFRSQ09OVEVOVFMgfCBIVFRQUE9TVF9QVFJCVUZGRVIgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBQT1NUX0NBTExCQUNLKSkgKSB7CisgICAgICAgICAgLyogY29weSB2YWx1ZSAod2l0aG91dCBzdHJkdXA7IHBvc3NpYmx5IGNvbnRhaW5zIG51bGwgY2hhcmFjdGVycykgKi8KKyAgICAgICAgICBmb3JtLT52YWx1ZSA9IG1lbWR1cChmb3JtLT52YWx1ZSwgZm9ybS0+Y29udGVudHNsZW5ndGgpOworICAgICAgICAgIGlmKCFmb3JtLT52YWx1ZSkgeworICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX01FTU9SWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBmb3JtLT52YWx1ZV9hbGxvYyA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgcG9zdCA9IEFkZEh0dHBQb3N0KGZvcm0tPm5hbWUsIGZvcm0tPm5hbWVsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLT52YWx1ZSwgZm9ybS0+Y29udGVudHNsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLT5idWZmZXIsIGZvcm0tPmJ1ZmZlcmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0tPmNvbnRlbnR0eXBlLCBmb3JtLT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0tPmNvbnRlbnRoZWFkZXIsIGZvcm0tPnNob3dmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0tPnVzZXJwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdCwgaHR0cHBvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Bvc3QpOworCisgICAgICAgIGlmKCFwb3N0KSB7CisgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gQ1VSTF9GT1JNQUREX01FTU9SWTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmKGZvcm0tPmNvbnRlbnR0eXBlKQorICAgICAgICAgIHByZXZ0eXBlID0gZm9ybS0+Y29udGVudHR5cGU7CisgICAgICB9CisgICAgfQorICAgIGlmKENVUkxfRk9STUFERF9PSyAhPSByZXR1cm5fdmFsdWUpIHsKKyAgICAgIC8qIE9uIGVycm9yLCBmcmVlIGFsbG9jYXRlZCBmaWVsZHMgZm9yIG5vZGVzIG9mIHRoZSBGb3JtSW5mbyBsaW5rZWQKKyAgICAgICAgIGxpc3Qgd2hpY2ggYXJlIG5vdCBhbHJlYWR5IG93bmVkIGJ5IHRoZSBodHRwcG9zdCBsaW5rZWQgbGlzdAorICAgICAgICAgd2l0aG91dCBkZWFsbG9jYXRpbmcgbm9kZXMuIExpc3Qgbm9kZXMgYXJlIGRlYWxsb2NhdGVkIGxhdGVyIG9uICovCisgICAgICBGb3JtSW5mbyAqcHRyOworICAgICAgZm9yKHB0ciA9IGZvcm07IHB0ciAhPSBOVUxMOyBwdHIgPSBwdHItPm1vcmUpIHsKKyAgICAgICAgaWYocHRyLT5uYW1lX2FsbG9jKSB7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShwdHItPm5hbWUpOworICAgICAgICAgIHB0ci0+bmFtZV9hbGxvYyA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmKHB0ci0+dmFsdWVfYWxsb2MpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHB0ci0+dmFsdWUpOworICAgICAgICAgIHB0ci0+dmFsdWVfYWxsb2MgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZihwdHItPmNvbnRlbnR0eXBlX2FsbG9jKSB7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShwdHItPmNvbnRlbnR0eXBlKTsKKyAgICAgICAgICBwdHItPmNvbnRlbnR0eXBlX2FsbG9jID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYocHRyLT5zaG93ZmlsZW5hbWVfYWxsb2MpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHB0ci0+c2hvd2ZpbGVuYW1lKTsKKyAgICAgICAgICBwdHItPnNob3dmaWxlbmFtZV9hbGxvYyA9IEZBTFNFOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogQWx3YXlzIGRlYWxsb2NhdGUgRm9ybUluZm8gbGlua2VkIGxpc3Qgbm9kZXMgd2l0aG91dCB0b3VjaGluZyBub2RlCisgICAgIGZpZWxkcyBnaXZlbiB0aGF0IHRoZXNlIGhhdmUgZWl0aGVyIGJlZW4gZGVhbGxvY2F0ZWQgb3IgYXJlIG93bmVkCisgICAgIG5vdyBieSB0aGUgaHR0cHBvc3QgbGlua2VkIGxpc3QgKi8KKyAgd2hpbGUoZmlyc3RfZm9ybSkgeworICAgIEZvcm1JbmZvICpwdHIgPSBmaXJzdF9mb3JtLT5tb3JlOworICAgIEN1cmxfc2FmZWZyZWUoZmlyc3RfZm9ybSk7CisgICAgZmlyc3RfZm9ybSA9IHB0cjsKKyAgfQorCisgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKy8qCisgKiBjdXJsX2Zvcm1hZGQoKSBpcyBhIHB1YmxpYyBBUEkgdG8gYWRkIGEgc2VjdGlvbiB0byB0aGUgbXVsdGlwYXJ0IGZvcm1wb3N0LgorICoKKyAqIEB1bml0dGVzdDogMTMwOAorICovCisKK0NVUkxGT1JNY29kZSBjdXJsX2Zvcm1hZGQoc3RydWN0IGN1cmxfaHR0cHBvc3QgKipodHRwcG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKipsYXN0X3Bvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikKK3sKKyAgdmFfbGlzdCBhcmc7CisgIENVUkxGT1JNY29kZSByZXN1bHQ7CisgIHZhX3N0YXJ0KGFyZywgbGFzdF9wb3N0KTsKKyAgcmVzdWx0ID0gRm9ybUFkZChodHRwcG9zdCwgbGFzdF9wb3N0LCBhcmcpOworICB2YV9lbmQoYXJnKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEFkZEZvcm1EYXRhKCkgYWRkcyBhIGNodW5rIG9mIGRhdGEgdG8gdGhlIEZvcm1EYXRhIGxpbmtlZCBsaXN0LgorICoKKyAqIHNpemUgaXMgaW5jcmVtZW50ZWQgYnkgdGhlIGNodW5rIGxlbmd0aCwgdW5sZXNzIGl0IGlzIE5VTEwKKyAqLworc3RhdGljIENVUkxjb2RlIEFkZEZvcm1EYXRhKHN0cnVjdCBGb3JtRGF0YSAqKmZvcm1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZm9ybXR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9vZmZfdCAqc2l6ZSkKK3sKKyAgc3RydWN0IEZvcm1EYXRhICpuZXdmb3JtID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgRm9ybURhdGEpKTsKKyAgaWYoIW5ld2Zvcm0pCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIG5ld2Zvcm0tPm5leHQgPSBOVUxMOworCisgIGlmKHR5cGUgPD0gRk9STV9DT05URU5UKSB7CisgICAgLyogd2UgbWFrZSBpdCBlYXNpZXIgZm9yIHBsYWluIHN0cmluZ3M6ICovCisgICAgaWYoIWxlbmd0aCkKKyAgICAgIGxlbmd0aCA9IHN0cmxlbigoY2hhciAqKWxpbmUpOworCisgICAgbmV3Zm9ybS0+bGluZSA9IG1hbGxvYyhsZW5ndGgrMSk7CisgICAgaWYoIW5ld2Zvcm0tPmxpbmUpIHsKKyAgICAgIGZyZWUobmV3Zm9ybSk7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgICAgbWVtY3B5KG5ld2Zvcm0tPmxpbmUsIGxpbmUsIGxlbmd0aCk7CisgICAgbmV3Zm9ybS0+bGVuZ3RoID0gbGVuZ3RoOworICAgIG5ld2Zvcm0tPmxpbmVbbGVuZ3RoXT0wOyAvKiB6ZXJvIHRlcm1pbmF0ZSBmb3IgZWFzaWVyIGRlYnVnZ2luZyAqLworICB9CisgIGVsc2UKKyAgICAvKiBGb3IgY2FsbGJhY2tzIGFuZCBmaWxlcyB3ZSBkb24ndCBoYXZlIGFueSBhY3R1YWwgZGF0YSBzbyB3ZSBqdXN0IGtlZXAgYQorICAgICAgIHBvaW50ZXIgdG8gd2hhdGV2ZXIgdGhpcyBwb2ludHMgdG8gKi8KKyAgICBuZXdmb3JtLT5saW5lID0gKGNoYXIgKilsaW5lOworCisgIG5ld2Zvcm0tPnR5cGUgPSB0eXBlOworCisgIGlmKCpmb3JtcCkgeworICAgICgqZm9ybXApLT5uZXh0ID0gbmV3Zm9ybTsKKyAgICAqZm9ybXAgPSBuZXdmb3JtOworICB9CisgIGVsc2UKKyAgICAqZm9ybXAgPSBuZXdmb3JtOworCisgIGlmKHNpemUpIHsKKyAgICBpZih0eXBlICE9IEZPUk1fRklMRSkKKyAgICAgIC8qIGZvciBzdGF0aWMgY29udGVudCBhcyB3ZWxsIGFzIGNhbGxiYWNrIGRhdGEgd2UgYWRkIHRoZSBzaXplIGdpdmVuCisgICAgICAgICBhcyBpbnB1dCBhcmd1bWVudCAqLworICAgICAgKnNpemUgKz0gbGVuZ3RoOworICAgIGVsc2UgeworICAgICAgLyogU2luY2UgdGhpcyBpcyBhIGZpbGUgdG8gYmUgdXBsb2FkZWQgaGVyZSwgYWRkIHRoZSBzaXplIG9mIHRoZSBhY3R1YWwKKyAgICAgICAgIGZpbGUgKi8KKyAgICAgIGlmKCFzdHJlcXVhbCgiLSIsIG5ld2Zvcm0tPmxpbmUpKSB7CisgICAgICAgIHN0cnVjdF9zdGF0IGZpbGU7CisgICAgICAgIGlmKCFzdGF0KG5ld2Zvcm0tPmxpbmUsICZmaWxlKSkgeworICAgICAgICAgICpzaXplICs9IGZpbGUuc3Rfc2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBBZGRGb3JtRGF0YWYoKSBhZGRzIHByaW50ZigpLXN0eWxlIGZvcm1hdHRlZCBkYXRhIHRvIHRoZSBmb3JtZGF0YSBjaGFpbi4KKyAqLworCitzdGF0aWMgQ1VSTGNvZGUgQWRkRm9ybURhdGFmKHN0cnVjdCBGb3JtRGF0YSAqKmZvcm1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX29mZl90ICpzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgY2hhciBzWzQwOTZdOworICB2YV9saXN0IGFwOworICB2YV9zdGFydChhcCwgZm10KTsKKyAgdnNucHJpbnRmKHMsIHNpemVvZihzKSwgZm10LCBhcCk7CisgIHZhX2VuZChhcCk7CisKKyAgcmV0dXJuIEFkZEZvcm1EYXRhKGZvcm1wLCBGT1JNX0RBVEEsIHMsIDAsIHNpemUpOworfQorCisvKgorICogQ3VybF9mb3JtY2xlYW4oKSBpcyB1c2VkIGZyb20gaHR0cC5jLCB0aGlzIGNsZWFucyBhIGJ1aWx0IEZvcm1EYXRhIGxpbmtlZAorICogbGlzdAorICovCit2b2lkIEN1cmxfZm9ybWNsZWFuKHN0cnVjdCBGb3JtRGF0YSAqKmZvcm1fcHRyKQoreworICBzdHJ1Y3QgRm9ybURhdGEgKm5leHQsICpmb3JtOworCisgIGZvcm0gPSAqZm9ybV9wdHI7CisgIGlmKCFmb3JtKQorICAgIHJldHVybjsKKworICBkbyB7CisgICAgbmV4dD1mb3JtLT5uZXh0OyAgLyogdGhlIGZvbGxvd2luZyBmb3JtIGxpbmUgKi8KKyAgICBpZihmb3JtLT50eXBlIDw9IEZPUk1fQ09OVEVOVCkKKyAgICAgIGZyZWUoZm9ybS0+bGluZSk7IC8qIGZyZWUgdGhlIGxpbmUgKi8KKyAgICBmcmVlKGZvcm0pOyAgICAgICAvKiBmcmVlIHRoZSBzdHJ1Y3QgKi8KKworICB9IHdoaWxlKChmb3JtID0gbmV4dCkgIT0gTlVMTCk7IC8qIGNvbnRpbnVlICovCisKKyAgKmZvcm1fcHRyID0gTlVMTDsKK30KKworLyoKKyAqIGN1cmxfZm9ybWdldCgpCisgKiBTZXJpYWxpemUgYSBjdXJsX2h0dHBwb3N0IHN0cnVjdC4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICoKKyAqIEB1bml0dGVzdDogMTMwOAorICovCitpbnQgY3VybF9mb3JtZ2V0KHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpmb3JtLCB2b2lkICphcmcsCisgICAgICAgICAgICAgICAgIGN1cmxfZm9ybWdldF9jYWxsYmFjayBhcHBlbmQpCit7CisgIENVUkxjb2RlIHJjOworICBjdXJsX29mZl90IHNpemU7CisgIHN0cnVjdCBGb3JtRGF0YSAqZGF0YSwgKnB0cjsKKworICByYyA9IEN1cmxfZ2V0Zm9ybWRhdGEoTlVMTCwgJmRhdGEsIGZvcm0sIE5VTEwsICZzaXplKTsKKyAgaWYocmMgIT0gQ1VSTEVfT0spCisgICAgcmV0dXJuIChpbnQpcmM7CisKKyAgZm9yKHB0ciA9IGRhdGE7IHB0cjsgcHRyID0gcHRyLT5uZXh0KSB7CisgICAgaWYoKHB0ci0+dHlwZSA9PSBGT1JNX0ZJTEUpIHx8IChwdHItPnR5cGUgPT0gRk9STV9DQUxMQkFDSykpIHsKKyAgICAgIGNoYXIgYnVmZmVyWzgxOTJdOworICAgICAgc2l6ZV90IG5yZWFkOworICAgICAgc3RydWN0IEZvcm0gdGVtcDsKKworICAgICAgQ3VybF9Gb3JtSW5pdCgmdGVtcCwgcHRyKTsKKworICAgICAgZG8geworICAgICAgICBucmVhZCA9IHJlYWRmcm9tZmlsZSgmdGVtcCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgICAgICAgIGlmKChucmVhZCA9PSAoc2l6ZV90KSAtMSkgfHwKKyAgICAgICAgICAgKG5yZWFkID4gc2l6ZW9mKGJ1ZmZlcikpIHx8CisgICAgICAgICAgIChucmVhZCAhPSBhcHBlbmQoYXJnLCBidWZmZXIsIG5yZWFkKSkpIHsKKyAgICAgICAgICBpZih0ZW1wLmZwKQorICAgICAgICAgICAgZmNsb3NlKHRlbXAuZnApOworICAgICAgICAgIEN1cmxfZm9ybWNsZWFuKCZkYXRhKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIH0gd2hpbGUobnJlYWQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmKHB0ci0+bGVuZ3RoICE9IGFwcGVuZChhcmcsIHB0ci0+bGluZSwgcHRyLT5sZW5ndGgpKSB7CisgICAgICAgIEN1cmxfZm9ybWNsZWFuKCZkYXRhKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorICAgIH0KKyAgfQorICBDdXJsX2Zvcm1jbGVhbigmZGF0YSk7CisgIHJldHVybiAwOworfQorCisvKgorICogY3VybF9mb3JtZnJlZSgpIGlzIGFuIGV4dGVybmFsIGZ1bmN0aW9uIHRvIGZyZWUgdXAgYSB3aG9sZSBmb3JtIHBvc3QKKyAqIGNoYWluCisgKi8KK3ZvaWQgY3VybF9mb3JtZnJlZShzdHJ1Y3QgY3VybF9odHRwcG9zdCAqZm9ybSkKK3sKKyAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKm5leHQ7CisKKyAgaWYoIWZvcm0pCisgICAgLyogbm8gZm9ybSB0byBmcmVlLCBqdXN0IGdldCBvdXQgb2YgdGhpcyAqLworICAgIHJldHVybjsKKworICBkbyB7CisgICAgbmV4dD1mb3JtLT5uZXh0OyAgLyogdGhlIGZvbGxvd2luZyBmb3JtIGxpbmUgKi8KKworICAgIC8qIHJlY3Vyc2UgdG8gc3ViLWNvbnRlbnRzICovCisgICAgaWYoZm9ybS0+bW9yZSkKKyAgICAgIGN1cmxfZm9ybWZyZWUoZm9ybS0+bW9yZSk7CisKKyAgICBpZighKGZvcm0tPmZsYWdzICYgSFRUUFBPU1RfUFRSTkFNRSkgJiYgZm9ybS0+bmFtZSkKKyAgICAgIGZyZWUoZm9ybS0+bmFtZSk7IC8qIGZyZWUgdGhlIG5hbWUgKi8KKyAgICBpZighKGZvcm0tPmZsYWdzICYKKyAgICAgICAgIChIVFRQUE9TVF9QVFJDT05URU5UU3xIVFRQUE9TVF9CVUZGRVJ8SFRUUFBPU1RfQ0FMTEJBQ0spKSAmJgorICAgICAgIGZvcm0tPmNvbnRlbnRzKQorICAgICAgZnJlZShmb3JtLT5jb250ZW50cyk7IC8qIGZyZWUgdGhlIGNvbnRlbnRzICovCisgICAgaWYoZm9ybS0+Y29udGVudHR5cGUpCisgICAgICBmcmVlKGZvcm0tPmNvbnRlbnR0eXBlKTsgLyogZnJlZSB0aGUgY29udGVudCB0eXBlICovCisgICAgaWYoZm9ybS0+c2hvd2ZpbGVuYW1lKQorICAgICAgZnJlZShmb3JtLT5zaG93ZmlsZW5hbWUpOyAvKiBmcmVlIHRoZSBmYWtlZCBmaWxlIG5hbWUgKi8KKyAgICBmcmVlKGZvcm0pOyAgICAgICAvKiBmcmVlIHRoZSBzdHJ1Y3QgKi8KKworICB9IHdoaWxlKChmb3JtID0gbmV4dCkgIT0gTlVMTCk7IC8qIGNvbnRpbnVlICovCit9CisKKyNpZm5kZWYgSEFWRV9CQVNFTkFNRQorLyoKKyAgKFF1b3RlIGZyb20gVGhlIE9wZW4gR3JvdXAgQmFzZSBTcGVjaWZpY2F0aW9ucyBJc3N1ZSA2IElFRUUgU3RkIDEwMDMuMSwgMjAwNAorICBFZGl0aW9uKQorCisgIFRoZSBiYXNlbmFtZSgpIGZ1bmN0aW9uIHNoYWxsIHRha2UgdGhlIHBhdGhuYW1lIHBvaW50ZWQgdG8gYnkgcGF0aCBhbmQKKyAgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmluYWwgY29tcG9uZW50IG9mIHRoZSBwYXRobmFtZSwgZGVsZXRpbmcgYW55CisgIHRyYWlsaW5nICcvJyBjaGFyYWN0ZXJzLgorCisgIElmIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSBwYXRoIGNvbnNpc3RzIGVudGlyZWx5IG9mIHRoZSAnLycgY2hhcmFjdGVyLAorICBiYXNlbmFtZSgpIHNoYWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHN0cmluZyAiLyIuIElmIHRoZSBzdHJpbmcgcG9pbnRlZAorICB0byBieSBwYXRoIGlzIGV4YWN0bHkgIi8vIiwgaXQgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCB3aGV0aGVyICcvJyBvciAiLy8iCisgIGlzIHJldHVybmVkLgorCisgIElmIHBhdGggaXMgYSBudWxsIHBvaW50ZXIgb3IgcG9pbnRzIHRvIGFuIGVtcHR5IHN0cmluZywgYmFzZW5hbWUoKSBzaGFsbAorICByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgIi4iLgorCisgIFRoZSBiYXNlbmFtZSgpIGZ1bmN0aW9uIG1heSBtb2RpZnkgdGhlIHN0cmluZyBwb2ludGVkIHRvIGJ5IHBhdGgsIGFuZCBtYXkKKyAgcmV0dXJuIGEgcG9pbnRlciB0byBzdGF0aWMgc3RvcmFnZSB0aGF0IG1heSB0aGVuIGJlIG92ZXJ3cml0dGVuIGJ5IGEKKyAgc3Vic2VxdWVudCBjYWxsIHRvIGJhc2VuYW1lKCkuCisKKyAgVGhlIGJhc2VuYW1lKCkgZnVuY3Rpb24gbmVlZCBub3QgYmUgcmVlbnRyYW50LiBBIGZ1bmN0aW9uIHRoYXQgaXMgbm90CisgIHJlcXVpcmVkIHRvIGJlIHJlZW50cmFudCBpcyBub3QgcmVxdWlyZWQgdG8gYmUgdGhyZWFkLXNhZmUuCisKKyovCitzdGF0aWMgY2hhciAqQ3VybF9iYXNlbmFtZShjaGFyICpwYXRoKQoreworICAvKiBJZ25vcmUgYWxsIHRoZSBkZXRhaWxzIGFib3ZlIGZvciBub3cgYW5kIG1ha2UgYSBxdWljayBhbmQgc2ltcGxlCisgICAgIGltcGxlbWVudGFpb24gaGVyZSAqLworICBjaGFyICpzMTsKKyAgY2hhciAqczI7CisKKyAgczE9c3RycmNocihwYXRoLCAnLycpOworICBzMj1zdHJyY2hyKHBhdGgsICdcXCcpOworCisgIGlmKHMxICYmIHMyKSB7CisgICAgcGF0aCA9IChzMSA+IHMyPyBzMSA6IHMyKSsxOworICB9CisgIGVsc2UgaWYoczEpCisgICAgcGF0aCA9IHMxICsgMTsKKyAgZWxzZSBpZihzMikKKyAgICBwYXRoID0gczIgKyAxOworCisgIHJldHVybiBwYXRoOworfQorI2VuZGlmCisKK3N0YXRpYyBjaGFyICpzdHJpcHBhdGgoY29uc3QgY2hhciAqZnVsbGZpbGUpCit7CisgIGNoYXIgKmZpbGVuYW1lOworICBjaGFyICpiYXNlOworICBmaWxlbmFtZSA9IHN0cmR1cChmdWxsZmlsZSk7IC8qIGR1cGxpY2F0ZSBzaW5jZSBiYXNlbmFtZSgpIG1heSBydWluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBpdCB3b3JrcyBvbiAqLworICBpZighZmlsZW5hbWUpCisgICAgcmV0dXJuIE5VTEw7CisgIGJhc2UgPSBzdHJkdXAoYmFzZW5hbWUoZmlsZW5hbWUpKTsKKworICBmcmVlKGZpbGVuYW1lKTsgLyogZnJlZSB0ZW1wb3JhcnkgYnVmZmVyICovCisKKyAgcmV0dXJuIGJhc2U7IC8qIHJldHVybnMgYW4gYWxsb2NhdGVkIHN0cmluZyBvciBOVUxMICEgKi8KK30KKworLyoKKyAqIEN1cmxfZ2V0Zm9ybWRhdGEoKSBjb252ZXJ0cyBhIGxpbmtlZCBsaXN0IG9mICJtZXRhIGRhdGEiIGludG8gYSBjb21wbGV0ZQorICogKHBvc3NpYmx5IGh1Z2UpIG11bHRpcGFydCBmb3JtZGF0YS4gVGhlIGlucHV0IGxpc3QgaXMgaW4gJ3Bvc3QnLCB3aGlsZSB0aGUKKyAqIG91dHB1dCByZXN1bHRpbmcgbGlua2VkIGxpc3RzIGdldHMgc3RvcmVkIGluICcqZmluYWxmb3JtJy4gKnNpemVwIHdpbGwgZ2V0CisgKiB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgd2hvbGUgUE9TVC4KKyAqIEEgbXVsdGlwYXJ0L2Zvcm1fZGF0YSBjb250ZW50LXR5cGUgaXMgYnVpbHQsIHVubGVzcyBhIGN1c3RvbSBjb250ZW50LXR5cGUKKyAqIGlzIHBhc3NlZCBpbiAnY3VzdG9tX2NvbnRlbnRfdHlwZScuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBkbyBhIGZhaWxmKCkgZm9yIHRoZSBwb3RlbnRpYWwgbWVtb3J5IGZhaWx1cmVzIGJ1dAorICogc2hvdWxkIGZvciBhbGwgb3RoZXIgZXJyb3JzIGl0IHNwb3RzLiBKdXN0IG5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIE1BWSBnZXQKKyAqIGEgTlVMTCBwb2ludGVyIGluIHRoZSAnZGF0YScgYXJndW1lbnQuCisgKi8KKworQ1VSTGNvZGUgQ3VybF9nZXRmb3JtZGF0YShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEZvcm1EYXRhICoqZmluYWxmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqcG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3VzdG9tX2NvbnRlbnRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9vZmZfdCAqc2l6ZXApCit7CisgIHN0cnVjdCBGb3JtRGF0YSAqZm9ybSA9IE5VTEw7CisgIHN0cnVjdCBGb3JtRGF0YSAqZmlyc3Rmb3JtOworICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqZmlsZTsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgY3VybF9vZmZfdCBzaXplID0gMDsgLyogc3VwcG9ydCBwb3RlbnRpYWxseSBFTk9STU9VUyBmb3JtcG9zdHMgKi8KKyAgY2hhciAqYm91bmRhcnk7CisgIGNoYXIgKmZpbGVib3VuZGFyeSA9IE5VTEw7CisgIHN0cnVjdCBjdXJsX3NsaXN0KiBjdXJMaXN0OworCisgICpmaW5hbGZvcm0gPSBOVUxMOyAvKiBkZWZhdWx0IGZvcm0gaXMgZW1wdHkgKi8KKworICBpZighcG9zdCkKKyAgICByZXR1cm4gcmVzdWx0OyAvKiBubyBpbnB1dCA9PiBubyBvdXRwdXQhICovCisKKyAgYm91bmRhcnkgPSBDdXJsX0Zvcm1Cb3VuZGFyeSgpOworICBpZighYm91bmRhcnkpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgLyogTWFrZSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgb3V0cHV0ICovCisgIHJlc3VsdCA9IEFkZEZvcm1EYXRhZigmZm9ybSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlczsgYm91bmRhcnk9JXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbV9jb250ZW50X3R5cGU/Y3VzdG9tX2NvbnRlbnRfdHlwZToKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IG11bHRpcGFydC9mb3JtLWRhdGEiLAorICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkpOworCisgIGlmKHJlc3VsdCkgeworICAgIEN1cmxfc2FmZWZyZWUoYm91bmRhcnkpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgLyogd2UgRE8gTk9UIGluY2x1ZGUgdGhhdCBsaW5lIGluIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBQT1NULCBzaW5jZSBpdCdsbCBiZQorICAgICBwYXJ0IG9mIHRoZSBoZWFkZXIhICovCisKKyAgZmlyc3Rmb3JtID0gZm9ybTsKKworICBkbyB7CisKKyAgICBpZihzaXplKSB7CisgICAgICByZXN1bHQgPSBBZGRGb3JtRGF0YWYoJmZvcm0sICZzaXplLCAiXHJcbiIpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBib3VuZGFyeSAqLworICAgIHJlc3VsdCA9IEFkZEZvcm1EYXRhZigmZm9ybSwgJnNpemUsICItLSVzXHJcbiIsIGJvdW5kYXJ5KTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKworICAgIC8qIE1heWJlIGxhdGVyIHRoaXMgc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gYSBjdXN0b21fY29udGVudF90eXBlIGlzCisgICAgICAgcGFzc2VkLCBzaW5jZSBDb250ZW50LURpc3Bvc2l0aW9uIGlzIG5vdCBtZWFuaW5nZnVsIGZvciBhbGwgbXVsdGlwYXJ0CisgICAgICAgdHlwZXMuCisgICAgKi8KKyAgICByZXN1bHQgPSBBZGRGb3JtRGF0YWYoJmZvcm0sICZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiIik7CisgICAgaWYocmVzdWx0KQorICAgICAgYnJlYWs7CisKKyAgICByZXN1bHQgPSBBZGRGb3JtRGF0YSgmZm9ybSwgRk9STV9EQVRBLCBwb3N0LT5uYW1lLCBwb3N0LT5uYW1lbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICZzaXplKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKworICAgIHJlc3VsdCA9IEFkZEZvcm1EYXRhZigmZm9ybSwgJnNpemUsICJcIiIpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIGJyZWFrOworCisgICAgaWYocG9zdC0+bW9yZSkgeworICAgICAgLyogSWYgdXNlZCwgdGhpcyBpcyBhIGxpbmsgdG8gbW9yZSBmaWxlIG5hbWVzLCB3ZSBtdXN0IHRoZW4gZG8KKyAgICAgICAgIHRoZSBtYWdpYyB0byBpbmNsdWRlIHNldmVyYWwgZmlsZXMgd2l0aCB0aGUgc2FtZSBmaWVsZCBuYW1lICovCisKKyAgICAgIEN1cmxfc2FmZWZyZWUoZmlsZWJvdW5kYXJ5KTsKKyAgICAgIGZpbGVib3VuZGFyeSA9IEN1cmxfRm9ybUJvdW5kYXJ5KCk7CisgICAgICBpZighZmlsZWJvdW5kYXJ5KSB7CisgICAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXN1bHQgPSBBZGRGb3JtRGF0YWYoJmZvcm0sICZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcclxuQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYm91bmRhcnk9JXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlYm91bmRhcnkpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBmaWxlID0gcG9zdDsKKworICAgIGRvIHsKKworICAgICAgLyogSWYgJ3Nob3dmaWxlbmFtZScgaXMgc2V0LCB0aGF0IGlzIGEgZmFrZWQgbmFtZSBwYXNzZWQgb24gdG8gdXMKKyAgICAgICAgIHRvIHVzZSB0byBpbiB0aGUgZm9ybXBvc3QuIElmIHRoYXQgaXMgbm90IHNldCwgdGhlIGFjdHVhbGx5IHVzZWQKKyAgICAgICAgIGxvY2FsIGZpbGUgbmFtZSBzaG91bGQgYmUgYWRkZWQuICovCisKKyAgICAgIGlmKHBvc3QtPm1vcmUpIHsKKyAgICAgICAgLyogaWYgbXVsdGlwbGUtZmlsZSAqLworICAgICAgICBjaGFyICpmaWxlYmFzZW5hbWUgPSBOVUxMOworICAgICAgICBpZighZmlsZS0+c2hvd2ZpbGVuYW1lKSB7CisgICAgICAgICAgZmlsZWJhc2VuYW1lID0gc3RyaXBwYXRoKGZpbGUtPmNvbnRlbnRzKTsKKyAgICAgICAgICBpZighZmlsZWJhc2VuYW1lKSB7CisgICAgICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gQWRkRm9ybURhdGFmKCZmb3JtLCAmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcclxuLS0lc1xyXG5Db250ZW50LURpc3Bvc2l0aW9uOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXR0YWNobWVudDsgZmlsZW5hbWU9XCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVib3VuZGFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlLT5zaG93ZmlsZW5hbWU/ZmlsZS0+c2hvd2ZpbGVuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGViYXNlbmFtZSkpOworICAgICAgICBDdXJsX3NhZmVmcmVlKGZpbGViYXNlbmFtZSk7CisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocG9zdC0+ZmxhZ3MgJiAoSFRUUFBPU1RfRklMRU5BTUV8SFRUUFBPU1RfQlVGRkVSfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQUE9TVF9DQUxMQkFDSykpIHsKKyAgICAgICAgLyogaXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgZm9yIHRoZSBIVFRQUE9TVF9GSUxFTkFNRSBhbmQKKyAgICAgICAgICAgSFRUUFBPU1RfQ0FMTEJBQ0sgY2FzZXMgdGhlIC0+c2hvd2ZpbGVuYW1lIHN0cnVjdCBtZW1iZXIgaXMgYWx3YXlzCisgICAgICAgICAgIGFzc2lnbmVkIGF0IHRoaXMgcG9pbnQgKi8KKyAgICAgICAgaWYocG9zdC0+c2hvd2ZpbGVuYW1lIHx8IChwb3N0LT5mbGFncyAmIEhUVFBQT1NUX0ZJTEVOQU1FKSkgeworICAgICAgICAgIGNoYXIgKmZpbGViYXNlbmFtZT0KKyAgICAgICAgICAgICghcG9zdC0+c2hvd2ZpbGVuYW1lKT9zdHJpcHBhdGgocG9zdC0+Y29udGVudHMpOk5VTEw7CisKKyAgICAgICAgICByZXN1bHQgPSBBZGRGb3JtRGF0YWYoJmZvcm0sICZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOyBmaWxlbmFtZT1cIiVzXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9zdC0+c2hvd2ZpbGVuYW1lP3Bvc3QtPnNob3dmaWxlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGViYXNlbmFtZSkpOworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoZmlsZWJhc2VuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYoZmlsZS0+Y29udGVudHR5cGUpIHsKKyAgICAgICAgLyogd2UgaGF2ZSBhIHNwZWNpZmllZCB0eXBlICovCisgICAgICAgIHJlc3VsdCA9IEFkZEZvcm1EYXRhZigmZm9ybSwgJnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHJcbkNvbnRlbnQtVHlwZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS0+Y29udGVudHR5cGUpOworICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGN1ckxpc3QgPSBmaWxlLT5jb250ZW50aGVhZGVyOworICAgICAgd2hpbGUoY3VyTGlzdCkgeworICAgICAgICAvKiBQcm9jZXNzIHRoZSBhZGRpdGlvbmFsIGhlYWRlcnMgc3BlY2lmaWVkIGZvciB0aGlzIGZvcm0gKi8KKyAgICAgICAgcmVzdWx0ID0gQWRkRm9ybURhdGFmKCAmZm9ybSwgJnNpemUsICJcclxuJXMiLCBjdXJMaXN0LT5kYXRhICk7CisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY3VyTGlzdCA9IGN1ckxpc3QtPm5leHQ7CisgICAgICB9CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIGJyZWFrOworCisgICAgICByZXN1bHQgPSBBZGRGb3JtRGF0YWYoJmZvcm0sICZzaXplLCAiXHJcblxyXG4iKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGlmKChwb3N0LT5mbGFncyAmIEhUVFBQT1NUX0ZJTEVOQU1FKSB8fAorICAgICAgICAgKHBvc3QtPmZsYWdzICYgSFRUUFBPU1RfUkVBREZJTEUpKSB7CisgICAgICAgIC8qIHdlIHNob3VsZCBpbmNsdWRlIHRoZSBjb250ZW50cyBmcm9tIHRoZSBzcGVjaWZpZWQgZmlsZSAqLworICAgICAgICBGSUxFICpmaWxlcmVhZDsKKworICAgICAgICBmaWxlcmVhZCA9IHN0cmVxdWFsKCItIiwgZmlsZS0+Y29udGVudHMpPworICAgICAgICAgIHN0ZGluOmZvcGVuKGZpbGUtPmNvbnRlbnRzLCAicmIiKTsgLyogYmluYXJ5IHJlYWQgZm9yIHdpbjMyICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIFZNUzogVGhpcyBvbmx5IGFsbG93cyBmb3Igc3RyZWFtIGZpbGVzIG9uIFZNUy4gIFN0cmVhbSBmaWxlcyBhcmUKKyAgICAgICAgICogT0ssIGFzIGFyZSBGSVhFRCAmIFZBUiBmaWxlcyBXSVRIT1VUIGltcGxpZWQgQ0MgRm9yIGltcGxpZWQgQ0MsCisgICAgICAgICAqIGV2ZXJ5IHJlY29yZCBuZWVkcyB0byBoYXZlIGEgXG4gYXBwZW5kZWQgJiAxIGFkZGVkIHRvIFNJWkUKKyAgICAgICAgICovCisKKyAgICAgICAgaWYoZmlsZXJlYWQpIHsKKyAgICAgICAgICBpZihmaWxlcmVhZCAhPSBzdGRpbikgeworICAgICAgICAgICAgLyogY2xvc2UgdGhlIGZpbGUgKi8KKyAgICAgICAgICAgIGZjbG9zZShmaWxlcmVhZCk7CisgICAgICAgICAgICAvKiBhZGQgdGhlIGZpbGUgbmFtZSBvbmx5IC0gZm9yIGxhdGVyIHJlYWRpbmcgZnJvbSB0aGlzICovCisgICAgICAgICAgICByZXN1bHQgPSBBZGRGb3JtRGF0YSgmZm9ybSwgRk9STV9GSUxFLCBmaWxlLT5jb250ZW50cywgMCwgJnNpemUpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIFdoZW4gdXBsb2FkaW5nIGZyb20gc3RkaW4sIHdlIGNhbid0IGtub3cgdGhlIHNpemUgb2YgdGhlIGZpbGUsCisgICAgICAgICAgICAgKiB0aHVzIG11c3QgcmVhZCB0aGUgZnVsbCBmaWxlIGFzIGJlZm9yZS4gV2UgKmNvdWxkKiB1c2UgY2h1bmtlZAorICAgICAgICAgICAgICogdHJhbnNmZXItZW5jb2RpbmcsIGJ1dCB0aGF0IG9ubHkgd29ya3MgZm9yIEhUVFAgMS4xIGFuZCB3ZQorICAgICAgICAgICAgICogY2FuJ3QgYmUgc3VyZSB3ZSB3b3JrIHdpdGggc3VjaCBhIHNlcnZlci4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc2l6ZV90IG5yZWFkOworICAgICAgICAgICAgY2hhciBidWZmZXJbNTEyXTsKKyAgICAgICAgICAgIHdoaWxlKChucmVhZCA9IGZyZWFkKGJ1ZmZlciwgMSwgc2l6ZW9mKGJ1ZmZlciksIGZpbGVyZWFkKSkgIT0gMCkgeworICAgICAgICAgICAgICByZXN1bHQgPSBBZGRGb3JtRGF0YSgmZm9ybSwgRk9STV9DT05URU5ULCBidWZmZXIsIG5yZWFkLCAmc2l6ZSk7CisgICAgICAgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgaWYoZGF0YSkKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJjb3VsZG4ndCBvcGVuIGZpbGUgXCIlc1wiXG4iLCBmaWxlLT5jb250ZW50cyk7CisgICAgICAgICAgKmZpbmFsZm9ybSA9IE5VTEw7CisgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfUkVBRF9FUlJPUjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZihwb3N0LT5mbGFncyAmIEhUVFBQT1NUX0JVRkZFUikKKyAgICAgICAgLyogaW5jbHVkZSBjb250ZW50cyBvZiBidWZmZXIgKi8KKyAgICAgICAgcmVzdWx0ID0gQWRkRm9ybURhdGEoJmZvcm0sIEZPUk1fQ09OVEVOVCwgcG9zdC0+YnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0LT5idWZmZXJsZW5ndGgsICZzaXplKTsKKyAgICAgIGVsc2UgaWYocG9zdC0+ZmxhZ3MgJiBIVFRQUE9TVF9DQUxMQkFDSykKKyAgICAgICAgLyogdGhlIGNvbnRlbnRzIHNob3VsZCBiZSByZWFkIHdpdGggdGhlIGNhbGxiYWNrIGFuZCB0aGUgc2l6ZQorICAgICAgICAgICBpcyBzZXQgd2l0aCB0aGUgY29udGVudHNsZW5ndGggKi8KKyAgICAgICAgcmVzdWx0ID0gQWRkRm9ybURhdGEoJmZvcm0sIEZPUk1fQ0FMTEJBQ0ssIHBvc3QtPnVzZXJwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0LT5jb250ZW50c2xlbmd0aCwgJnNpemUpOworICAgICAgZWxzZQorICAgICAgICAvKiBpbmNsdWRlIHRoZSBjb250ZW50cyB3ZSBnb3QgKi8KKyAgICAgICAgcmVzdWx0ID0gQWRkRm9ybURhdGEoJmZvcm0sIEZPUk1fQ09OVEVOVCwgcG9zdC0+Y29udGVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3QtPmNvbnRlbnRzbGVuZ3RoLCAmc2l6ZSk7CisKKyAgICAgIGZpbGUgPSBmaWxlLT5tb3JlOworICAgIH0gd2hpbGUoZmlsZSAmJiAhcmVzdWx0KTsgLyogZm9yIGVhY2ggc3BlY2lmaWVkIGZpbGUgZm9yIHRoaXMgZmllbGQgKi8KKworICAgIGlmKHJlc3VsdCkKKyAgICAgIGJyZWFrOworCisgICAgaWYocG9zdC0+bW9yZSkgeworICAgICAgLyogdGhpcyB3YXMgYSBtdWx0aXBsZS1maWxlIGluY2x1c2lvbiwgbWFrZSBhIHRlcm1pbmF0aW9uIGZpbGUKKyAgICAgICAgIGJvdW5kYXJ5OiAqLworICAgICAgcmVzdWx0ID0gQWRkRm9ybURhdGFmKCZmb3JtLCAmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJcclxuLS0lcy0tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVib3VuZGFyeSk7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIGJyZWFrOworICAgIH0KKworICB9IHdoaWxlKChwb3N0ID0gcG9zdC0+bmV4dCkgIT0gTlVMTCk7IC8qIGZvciBlYWNoIGZpZWxkICovCisKKyAgLyogZW5kLWJvdW5kYXJ5IGZvciBldmVyeXRoaW5nICovCisgIGlmKENVUkxFX09LID09IHJlc3VsdCkKKyAgICByZXN1bHQgPSBBZGRGb3JtRGF0YWYoJmZvcm0sICZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHJcbi0tJXMtLVxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSk7CisKKyAgaWYocmVzdWx0KSB7CisgICAgQ3VybF9mb3JtY2xlYW4oJmZpcnN0Zm9ybSk7CisgICAgQ3VybF9zYWZlZnJlZShmaWxlYm91bmRhcnkpOworICAgIEN1cmxfc2FmZWZyZWUoYm91bmRhcnkpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICAqc2l6ZXAgPSBzaXplOworCisgIEN1cmxfc2FmZWZyZWUoZmlsZWJvdW5kYXJ5KTsKKyAgQ3VybF9zYWZlZnJlZShib3VuZGFyeSk7CisKKyAgKmZpbmFsZm9ybSA9IGZpcnN0Zm9ybTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ3VybF9Gb3JtSW5pdCgpIGluaXRzIHRoZSBzdHJ1Y3QgJ2Zvcm0nIHBvaW50cyB0byB3aXRoIHRoZSAnZm9ybWRhdGEnCisgKiBhbmQgcmVzZXRzIHRoZSAnc2VudCcgY291bnRlci4KKyAqLworaW50IEN1cmxfRm9ybUluaXQoc3RydWN0IEZvcm0gKmZvcm0sIHN0cnVjdCBGb3JtRGF0YSAqZm9ybWRhdGEgKQoreworICBpZighZm9ybWRhdGEpCisgICAgcmV0dXJuIDE7IC8qIGVycm9yICovCisKKyAgZm9ybS0+ZGF0YSA9IGZvcm1kYXRhOworICBmb3JtLT5zZW50ID0gMDsKKyAgZm9ybS0+ZnAgPSBOVUxMOworICBmb3JtLT5mcmVhZF9mdW5jID0gWkVST19OVUxMOworCisgIHJldHVybiAwOworfQorCisvKgorICogcmVhZGZyb21maWxlKCkKKyAqCisgKiBUaGUgcmVhZCBjYWxsYmFjayB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IHVzZSBjYW4gcmV0dXJuIGEgdmFsdWUgbGFyZ2VyIHRoYW4KKyAqICdzaXplJyAod2hpY2ggdGhlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMpIHRoYXQgaW5kaWNhdGVzIGEgcHJvYmxlbSBhbmQgaXQKKyAqIG11c3QgYmUgcHJvcGVybHkgZGVhbHQgd2l0aAorICovCitzdGF0aWMgc2l6ZV90IHJlYWRmcm9tZmlsZShzdHJ1Y3QgRm9ybSAqZm9ybSwgY2hhciAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpCit7CisgIHNpemVfdCBucmVhZDsKKyAgYm9vbCBjYWxsYmFjayA9IChmb3JtLT5kYXRhLT50eXBlID09IEZPUk1fQ0FMTEJBQ0spP1RSVUU6RkFMU0U7CisKKyAgaWYoY2FsbGJhY2spIHsKKyAgICBpZihmb3JtLT5mcmVhZF9mdW5jID09IFpFUk9fTlVMTCkKKyAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgIG5yZWFkID0gZm9ybS0+ZnJlYWRfZnVuYyhidWZmZXIsIDEsIHNpemUsIGZvcm0tPmRhdGEtPmxpbmUpOworICB9CisgIGVsc2UgeworICAgIGlmKCFmb3JtLT5mcCkgeworICAgICAgLyogdGhpcyBmaWxlIGhhc24ndCB5ZXQgYmVlbiBvcGVuZWQgKi8KKyAgICAgIGZvcm0tPmZwID0gZm9wZW4oZm9ybS0+ZGF0YS0+bGluZSwgInJiIik7IC8qIGIgaXMgZm9yIGJpbmFyeSAqLworICAgICAgaWYoIWZvcm0tPmZwKQorICAgICAgICByZXR1cm4gKHNpemVfdCktMTsgLyogZmFpbHVyZSAqLworICAgIH0KKyAgICBucmVhZCA9IGZyZWFkKGJ1ZmZlciwgMSwgc2l6ZSwgZm9ybS0+ZnApOworICB9CisgIGlmKCFucmVhZCkgeworICAgIC8qIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmsgZnJvbSB0aGUgZmlsZSwgbW92ZSBvbiAqLworICAgIGlmKGZvcm0tPmZwKSB7CisgICAgICBmY2xvc2UoZm9ybS0+ZnApOworICAgICAgZm9ybS0+ZnAgPSBOVUxMOworICAgIH0KKyAgICBmb3JtLT5kYXRhID0gZm9ybS0+ZGF0YS0+bmV4dDsKKyAgfQorCisgIHJldHVybiBucmVhZDsKK30KKworLyoKKyAqIEN1cmxfRm9ybVJlYWRlcigpIGlzIHRoZSBmcmVhZCgpIGVtdWxhdGlvbiBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0bworICogZGVsaXZlciB0aGUgZm9ybWRhdGEgdG8gdGhlIHRyYW5zZmVyIGxvb3AgYW5kIHRoZW4gc2VudCBhd2F5IHRvIHRoZSBwZWVyLgorICovCitzaXplX3QgQ3VybF9Gb3JtUmVhZGVyKGNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKm15ZGF0YSkKK3sKKyAgc3RydWN0IEZvcm0gKmZvcm07CisgIHNpemVfdCB3YW50ZWRzaXplOworICBzaXplX3QgZ290c2l6ZSA9IDA7CisKKyAgZm9ybT0oc3RydWN0IEZvcm0gKilteWRhdGE7CisKKyAgd2FudGVkc2l6ZSA9IHNpemUgKiBuaXRlbXM7CisKKyAgaWYoIWZvcm0tPmRhdGEpCisgICAgcmV0dXJuIDA7IC8qIG5vdGhpbmcsIGVycm9yLCBlbXB0eSAqLworCisgIGlmKChmb3JtLT5kYXRhLT50eXBlID09IEZPUk1fRklMRSkgfHwKKyAgICAgKGZvcm0tPmRhdGEtPnR5cGUgPT0gRk9STV9DQUxMQkFDSykpIHsKKyAgICBnb3RzaXplID0gcmVhZGZyb21maWxlKGZvcm0sIGJ1ZmZlciwgd2FudGVkc2l6ZSk7CisKKyAgICBpZihnb3RzaXplKQorICAgICAgLyogSWYgcG9zaXRpdmUgb3IgLTEsIHJldHVybi4gSWYgemVybywgY29udGludWUhICovCisgICAgICByZXR1cm4gZ290c2l6ZTsKKyAgfQorICBkbyB7CisKKyAgICBpZigoZm9ybS0+ZGF0YS0+bGVuZ3RoIC0gZm9ybS0+c2VudCApID4gd2FudGVkc2l6ZSAtIGdvdHNpemUpIHsKKworICAgICAgbWVtY3B5KGJ1ZmZlciArIGdvdHNpemUgLCBmb3JtLT5kYXRhLT5saW5lICsgZm9ybS0+c2VudCwKKyAgICAgICAgICAgICB3YW50ZWRzaXplIC0gZ290c2l6ZSk7CisKKyAgICAgIGZvcm0tPnNlbnQgKz0gd2FudGVkc2l6ZS1nb3RzaXplOworCisgICAgICByZXR1cm4gd2FudGVkc2l6ZTsKKyAgICB9CisKKyAgICBtZW1jcHkoYnVmZmVyK2dvdHNpemUsCisgICAgICAgICAgIGZvcm0tPmRhdGEtPmxpbmUgKyBmb3JtLT5zZW50LAorICAgICAgICAgICAoZm9ybS0+ZGF0YS0+bGVuZ3RoIC0gZm9ybS0+c2VudCkgKTsKKyAgICBnb3RzaXplICs9IGZvcm0tPmRhdGEtPmxlbmd0aCAtIGZvcm0tPnNlbnQ7CisKKyAgICBmb3JtLT5zZW50ID0gMDsKKworICAgIGZvcm0tPmRhdGEgPSBmb3JtLT5kYXRhLT5uZXh0OyAvKiBhZHZhbmNlICovCisKKyAgfSB3aGlsZShmb3JtLT5kYXRhICYmIChmb3JtLT5kYXRhLT50eXBlIDwgRk9STV9DQUxMQkFDSykpOworICAvKiBJZiB3ZSBnb3QgYW4gZW1wdHkgbGluZSBhbmQgd2UgaGF2ZSBtb3JlIGRhdGEsIHdlIHByb2NlZWQgdG8gdGhlIG5leHQKKyAgICAgbGluZSBpbW1lZGlhdGVseSB0byBhdm9pZCByZXR1cm5pbmcgemVybyBiZWZvcmUgd2UndmUgcmVhY2hlZCB0aGUgZW5kLiAqLworCisgIHJldHVybiBnb3RzaXplOworfQorCisvKgorICogQ3VybF9mb3JtcG9zdGhlYWRlcigpIHJldHVybnMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZvcm1wb3N0LCB0aGUKKyAqIHJlcXVlc3QtaGVhZGVyIHBhcnQgKHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoZSByZXF1ZXN0LWJvZHkgbGlrZSB0aGUgcmVzdCBvZgorICogdGhlIHBvc3QpLgorICovCitjaGFyICpDdXJsX2Zvcm1wb3N0aGVhZGVyKHZvaWQgKmZvcm1wLCBzaXplX3QgKmxlbikKK3sKKyAgY2hhciAqaGVhZGVyOworICBzdHJ1Y3QgRm9ybSAqZm9ybT0oc3RydWN0IEZvcm0gKilmb3JtcDsKKworICBpZighZm9ybS0+ZGF0YSkKKyAgICByZXR1cm4gMDsgLyogbm90aGluZywgRVJST1IhICovCisKKyAgaGVhZGVyID0gZm9ybS0+ZGF0YS0+bGluZTsKKyAgKmxlbiA9IGZvcm0tPmRhdGEtPmxlbmd0aDsKKworICBmb3JtLT5kYXRhID0gZm9ybS0+ZGF0YS0+bmV4dDsgLyogYWR2YW5jZSAqLworCisgIHJldHVybiBoZWFkZXI7Cit9CisKKyNlbHNlICAvKiBDVVJMX0RJU0FCTEVfSFRUUCAqLworQ1VSTEZPUk1jb2RlIGN1cmxfZm9ybWFkZChzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKmh0dHBwb3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKmxhc3RfcG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQoreworICAodm9pZClodHRwcG9zdDsKKyAgKHZvaWQpbGFzdF9wb3N0OworICByZXR1cm4gQ1VSTF9GT1JNQUREX0RJU0FCTEVEOworfQorCitpbnQgY3VybF9mb3JtZ2V0KHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpmb3JtLCB2b2lkICphcmcsCisgICAgICAgICAgICAgICAgIGN1cmxfZm9ybWdldF9jYWxsYmFjayBhcHBlbmQpCit7CisgICh2b2lkKSBmb3JtOworICAodm9pZCkgYXJnOworICAodm9pZCkgYXBwZW5kOworICByZXR1cm4gQ1VSTF9GT1JNQUREX0RJU0FCTEVEOworfQorCit2b2lkIGN1cmxfZm9ybWZyZWUoc3RydWN0IGN1cmxfaHR0cHBvc3QgKmZvcm0pCit7CisgICh2b2lkKWZvcm07CisgIC8qIGRvZXMgbm90aGluZyBIVFRQIGlzIGRpc2FibGVkICovCit9CisKKyNlbmRpZiAgLyogQ1VSTF9ESVNBQkxFX0hUVFAgKi8KKworI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9IVFRQKSB8fCBkZWZpbmVkKFVTRV9TU0xFQVkpCisKKy8qCisgKiBDdXJsX0Zvcm1Cb3VuZGFyeSgpIGNyZWF0ZXMgYSBzdWl0YWJsZSBib3VuZGFyeSBzdHJpbmcgYW5kIHJldHVybnMgYW4KKyAqIGFsbG9jYXRlZCBvbmUuIFRoaXMgaXMgYWxzbyB1c2VkIGJ5IFNTTC1jb2RlIHNvIGl0IG11c3QgYmUgcHJlc2VudCBldmVuCisgKiBpZiBIVFRQIGlzIGRpc2FibGVkIQorICovCitjaGFyICpDdXJsX0Zvcm1Cb3VuZGFyeSh2b2lkKQoreworICBjaGFyICpyZXRzdHJpbmc7CisgIHNpemVfdCBpOworCisgIHN0YXRpYyBjb25zdCBjaGFyIHRhYmxlMTZbXT0iMDEyMzQ1Njc4OWFiY2RlZiI7CisKKyAgcmV0c3RyaW5nID0gbWFsbG9jKEJPVU5EQVJZX0xFTkdUSCsxKTsKKworICBpZighcmV0c3RyaW5nKQorICAgIHJldHVybiBOVUxMOyAvKiBmYWlsZWQgKi8KKworICBzdHJjcHkocmV0c3RyaW5nLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworCisgIGZvcihpPXN0cmxlbihyZXRzdHJpbmcpOyBpPEJPVU5EQVJZX0xFTkdUSDsgaSsrKQorICAgIHJldHN0cmluZ1tpXSA9IHRhYmxlMTZbQ3VybF9yYW5kKCklMTZdOworCisgIC8qIDI4IGRhc2hlcyBhbmQgMTIgaGV4YWRlY2ltYWwgZGlnaXRzIG1ha2VzIDEyXjE2ICgxODQ4ODQyNTg4OTUwMzY0MTYpCisgICAgIGNvbWJpbmF0aW9ucyAqLworICByZXRzdHJpbmdbQk9VTkRBUllfTEVOR1RIXT0wOyAvKiB6ZXJvIHRlcm1pbmF0ZSAqLworCisgIHJldHVybiByZXRzdHJpbmc7Cit9CisKKyNlbmRpZiAgLyogIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApIHx8IGRlZmluZWQoVVNFX1NTTEVBWSkgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9mb3JtZGF0YS5oIGIvY3VybC03LjI1LjAvbGliL2Zvcm1kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJmNTA0YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9mb3JtZGF0YS5oCkBAIC0wLDAgKzEsOTggQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfRk9STURBVEFfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9GT1JNREFUQV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZW51bSBmb3JtdHlwZSB7CisgIEZPUk1fREFUQSwgICAgLyogZm9ybSBtZXRhZGF0YSAoY29udmVydCB0byBuZXR3b3JrIGVuY29kaW5nIGlmIG5lY2Vzc2FyeSkgKi8KKyAgRk9STV9DT05URU5ULCAvKiBmb3JtIGNvbnRlbnQgIChuZXZlciBjb252ZXJ0KSAqLworICBGT1JNX0NBTExCQUNLLCAvKiAnbGluZScgcG9pbnRzIHRvIHRoZSBjdXN0b20gcG9pbnRlciB3ZSBwYXNzIHRvIHRoZSBjYWxsYmFjaworICAgICAgICAgICAgICAgICAgKi8KKyAgRk9STV9GSUxFICAgICAvKiAnbGluZScgcG9pbnRzIHRvIGEgZmlsZSBuYW1lIHdlIHNob3VsZCByZWFkIGZyb20KKyAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgdGhlIGZvcm0gZGF0YSAobmV2ZXIgY29udmVydCkgKi8KK307CisKKy8qIHBsYWluIGFuZCBzaW1wbGUgbGlua2VkIGxpc3Qgd2l0aCBsaW5lcyB0byBzZW5kICovCitzdHJ1Y3QgRm9ybURhdGEgeworICBzdHJ1Y3QgRm9ybURhdGEgKm5leHQ7CisgIGVudW0gZm9ybXR5cGUgdHlwZTsKKyAgY2hhciAqbGluZTsKKyAgc2l6ZV90IGxlbmd0aDsKK307CisKK3N0cnVjdCBGb3JtIHsKKyAgc3RydWN0IEZvcm1EYXRhICpkYXRhOyAvKiBjdXJyZW50IGZvcm0gbGluZSB0byBzZW5kICovCisgIHNpemVfdCBzZW50OyAgICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSBjdXJyZW50IGxpbmUgdGhhdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGJlZW4gc2VudCBpbiBhIHByZXZpb3VzIGludm9rZSAqLworICBGSUxFICpmcDsgICAgICAgICAgICAgIC8qIGZpbGUgdG8gcmVhZCBmcm9tICovCisgIGN1cmxfcmVhZF9jYWxsYmFjayBmcmVhZF9mdW5jOyAvKiBmcmVhZCBjYWxsYmFjayBwb2ludGVyICovCit9OworCisvKiB1c2VkIGJ5IEZvcm1BZGQgZm9yIHRlbXBvcmFyeSBzdG9yYWdlICovCit0eXBlZGVmIHN0cnVjdCBGb3JtSW5mbyB7CisgIGNoYXIgKm5hbWU7CisgIGJvb2wgbmFtZV9hbGxvYzsKKyAgc2l6ZV90IG5hbWVsZW5ndGg7CisgIGNoYXIgKnZhbHVlOworICBib29sIHZhbHVlX2FsbG9jOworICBzaXplX3QgY29udGVudHNsZW5ndGg7CisgIGNoYXIgKmNvbnRlbnR0eXBlOworICBib29sIGNvbnRlbnR0eXBlX2FsbG9jOworICBsb25nIGZsYWdzOworICBjaGFyICpidWZmZXI7ICAgICAgLyogcG9pbnRlciB0byBleGlzdGluZyBidWZmZXIgdXNlZCBmb3IgZmlsZSB1cGxvYWQgKi8KKyAgc2l6ZV90IGJ1ZmZlcmxlbmd0aDsKKyAgY2hhciAqc2hvd2ZpbGVuYW1lOyAvKiBUaGUgZmlsZSBuYW1lIHRvIHNob3cuIElmIG5vdCBzZXQsIHRoZSBhY3R1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIG5hbWUgd2lsbCBiZSB1c2VkICovCisgIGJvb2wgc2hvd2ZpbGVuYW1lX2FsbG9jOworICBjaGFyICp1c2VycDsgICAgICAgIC8qIHBvaW50ZXIgZm9yIHRoZSByZWFkIGNhbGxiYWNrICovCisgIHN0cnVjdCBjdXJsX3NsaXN0KiBjb250ZW50aGVhZGVyOworICBzdHJ1Y3QgRm9ybUluZm8gKm1vcmU7Cit9IEZvcm1JbmZvOworCitpbnQgQ3VybF9Gb3JtSW5pdChzdHJ1Y3QgRm9ybSAqZm9ybSwgc3RydWN0IEZvcm1EYXRhICpmb3JtZGF0YSApOworCitDVVJMY29kZSBDdXJsX2dldGZvcm1kYXRhKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgRm9ybURhdGEgKiosCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpwb3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjdXN0b21fY29udGVudHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3QgKnNpemUpOworCisvKiBmcmVhZCgpIGVtdWxhdGlvbiAqLworc2l6ZV90IEN1cmxfRm9ybVJlYWRlcihjaGFyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbml0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpteWRhdGEpOworCisvKgorICogQ3VybF9mb3JtcG9zdGhlYWRlcigpIHJldHVybnMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZvcm1wb3N0LCB0aGUKKyAqIHJlcXVlc3QtaGVhZGVyIHBhcnQgKHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoZSByZXF1ZXN0LWJvZHkgbGlrZSB0aGUgcmVzdCBvZgorICogdGhlIHBvc3QpLgorICovCitjaGFyICpDdXJsX2Zvcm1wb3N0aGVhZGVyKHZvaWQgKmZvcm1wLCBzaXplX3QgKmxlbik7CisKK2NoYXIgKkN1cmxfRm9ybUJvdW5kYXJ5KHZvaWQpOworCit2b2lkIEN1cmxfZm9ybWNsZWFuKHN0cnVjdCBGb3JtRGF0YSAqKik7CisKK0NVUkxjb2RlIEN1cmxfZm9ybWNvbnZlcnQoc3RydWN0IFNlc3Npb25IYW5kbGUgKiwgc3RydWN0IEZvcm1EYXRhICopOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfRk9STURBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2Z0cC5jIGIvY3VybC03LjI1LjAvbGliL2Z0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNTgzZDAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvZnRwLmMKQEAgLTAsMCArMSw0NTM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAorCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VVFNOQU1FX0gKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIF9fVk1TCisjaW5jbHVkZSA8aW4uaD4KKyNpbmNsdWRlIDxpbmV0Lmg+CisjZW5kaWYKKworI2lmIChkZWZpbmVkKE5FVFdBUkUpICYmIGRlZmluZWQoX19OT1ZFTExfTElCQ19fKSkKKyN1bmRlZiBpbl9hZGRyX3QKKyNkZWZpbmUgaW5fYWRkcl90IHVuc2lnbmVkIGxvbmcKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaWYyaXAuaCIKKyNpbmNsdWRlICJob3N0aXAuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInRyYW5zZmVyLmgiCisjaW5jbHVkZSAiZXNjYXBlLmgiCisjaW5jbHVkZSAiaHR0cC5oIiAvKiBmb3IgSFRUUCBwcm94eSB0dW5uZWwgc3R1ZmYgKi8KKyNpbmNsdWRlICJzb2Nrcy5oIgorI2luY2x1ZGUgImZ0cC5oIgorI2luY2x1ZGUgImZpbGVpbmZvLmgiCisjaW5jbHVkZSAiZnRwbGlzdHBhcnNlci5oIgorCisjaWYgZGVmaW5lZChIQVZFX0tSQjQpIHx8IGRlZmluZWQoSEFWRV9HU1NBUEkpCisjaW5jbHVkZSAia3JiNC5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJzdHJ0b29mZnQuaCIKKyNpbmNsdWRlICJzdHJlcXVhbC5oIgorI2luY2x1ZGUgInNzbGdlbi5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgImluZXRfbnRvcC5oIgorI2luY2x1ZGUgImluZXRfcHRvbi5oIgorI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgInBhcnNlZGF0ZS5oIiAvKiBmb3IgdGhlIHdlZWsgZGF5IGFuZCBtb250aCBuYW1lcyAqLworI2luY2x1ZGUgInNvY2thZGRyLmgiIC8qIHJlcXVpcmVkIGZvciBDdXJsX3NvY2thZGRyX3N0b3JhZ2UgKi8KKyNpbmNsdWRlICJtdWx0aWlmLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAic3BlZWRjaGVjay5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAiaHR0cF9wcm94eS5oIgorI2luY2x1ZGUgIm5vbi1hc2NpaS5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZm5kZWYgTklfTUFYSE9TVAorI2RlZmluZSBOSV9NQVhIT1NUIDEwMjUKKyNlbmRpZgorI2lmbmRlZiBJTkVUX0FERFJTVFJMRU4KKyNkZWZpbmUgSU5FVF9BRERSU1RSTEVOIDE2CisjZW5kaWYKKworI2lmZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKKyNkZWZpbmUgZnRwX3Bhc3ZfdmVyYm9zZShhLGIsYyxkKSAgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKKy8qIExvY2FsIEFQSSBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIHN0YXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgIGZ0cHN0YXRlIG5ld3N0YXRlKTsKK3N0YXRpYyBDVVJMY29kZSBmdHBfc2VuZHF1b3RlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0ICpxdW90ZSk7CitzdGF0aWMgQ1VSTGNvZGUgZnRwX3F1aXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3N0YXRpYyBDVVJMY29kZSBmdHBfcGFyc2VfdXJsX3BhdGgoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3N0YXRpYyBDVVJMY29kZSBmdHBfcmVndWxhcl90cmFuc2ZlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCitzdGF0aWMgdm9pZCBmdHBfcGFzdl92ZXJib3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9hZGRyaW5mbyAqYWksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5ld2hvc3QsIC8qIGFzY2lpIHZlcnNpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQpOworI2VuZGlmCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3N0YXRlX3Bvc3RfcmVzdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9wb3N0X2N3ZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9xdW90ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5pdCwgZnRwc3RhdGUgaW5zdGF0ZSk7CitzdGF0aWMgQ1VSTGNvZGUgZnRwX25iX3R5cGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNjaWksIGZ0cHN0YXRlIG5ld3N0YXRlKTsKK3N0YXRpYyBpbnQgZnRwX25lZWRfdHlwZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhc2NpaSk7CitzdGF0aWMgQ1VSTGNvZGUgZnRwX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitzdGF0aWMgQ1VSTGNvZGUgZnRwX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSBmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKTsKK3N0YXRpYyBDVVJMY29kZSBmdHBfZG9fbW9yZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmNvbXBsZXRlZCk7CitzdGF0aWMgQ1VSTGNvZGUgZnRwX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIGludCBmdHBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworc3RhdGljIGludCBmdHBfZG9tb3JlX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitzdGF0aWMgQ1VSTGNvZGUgZnRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKK3N0YXRpYyBDVVJMY29kZSBmdHBfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKiBjb25uKTsKKworc3RhdGljIENVUkxjb2RlIGluaXRfd2NfZGF0YShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworc3RhdGljIENVUkxjb2RlIHdjX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCitzdGF0aWMgdm9pZCB3Y19kYXRhX2R0b3Iodm9pZCAqcHRyKTsKKworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9wb3N0X3JldHJfc2l6ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3QgZmlsZXNpemUpOworCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3JlYWRyZXNwKGN1cmxfc29ja2V0X3Qgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGluZ3BvbmcgKnBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmZ0cGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqc2l6ZSk7CisKKy8qIGVhc3ktdG8tdXNlIG1hY3JvOiAqLworI2RlZmluZSBGVFBTRU5ERih4LHkseikgICAgaWYoKHJlc3VsdCA9IEN1cmxfZnRwc2VuZGYoeCx5LHopKSAhPSBDVVJMRV9PSykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorI2RlZmluZSBQUFNFTkRGKHgseSx6KSAgaWYoKHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoeCx5LHopKSAhPSBDVVJMRV9PSykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisKKy8qCisgKiBGVFAgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9mdHAgPSB7CisgICJGVFAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBmdHBfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIGZ0cF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIGZ0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgZnRwX2RvX21vcmUsICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBmdHBfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIGZ0cF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgZnRwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgZnRwX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBmdHBfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIGZ0cF9kb21vcmVfZ2V0c29jaywgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBmdHBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBQT1JUX0ZUUCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19GVFAsICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfRFVBTCB8IFBST1RPUFRfQ0xPU0VBQ1RJT04gfCBQUk9UT1BUX05FRURTUFdECisgIHwgUFJPVE9QVF9OT1VSTFFVRVJZIC8qIGZsYWdzICovCit9OworCisKKyNpZmRlZiBVU0VfU1NMCisvKgorICogRlRQUyBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2Z0cHMgPSB7CisgICJGVFBTIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBmdHBfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIGZ0cF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIGZ0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgZnRwX2RvX21vcmUsICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBmdHBfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIGZ0cF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgZnRwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgZnRwX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBmdHBfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIGZ0cF9kb21vcmVfZ2V0c29jaywgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBmdHBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBQT1JUX0ZUUFMsICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19GVFAgfCBDVVJMUFJPVE9fRlRQUywgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfU1NMIHwgUFJPVE9QVF9EVUFMIHwgUFJPVE9QVF9DTE9TRUFDVElPTiB8CisgIFBST1RPUFRfTkVFRFNQV0QgfCBQUk9UT1BUX05PVVJMUVVFUlkgLyogZmxhZ3MgKi8KK307CisjZW5kaWYKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorLyoKKyAqIEhUVFAtcHJveHllZCBGVFAgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfZnRwX3Byb3h5ID0geworICAiRlRQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgQ3VybF9odHRwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBDdXJsX2h0dHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFBPUlRfRlRQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fSFRUUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisKKworI2lmZGVmIFVTRV9TU0wKKy8qCisgKiBIVFRQLXByb3h5ZWQgRlRQUyBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9mdHBzX3Byb3h5ID0geworICAiRlRQUyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgQ3VybF9odHRwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBDdXJsX2h0dHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFBPUlRfRlRQUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fSFRUUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisjZW5kaWYKKyNlbmRpZgorCisKKy8qCisgKiBOT1RFOiBiYWNrIGluIHRoZSBvbGQgZGF5cywgd2UgYWRkZWQgY29kZSBpbiB0aGUgRlRQIGNvZGUgdGhhdCBtYWRlIE5PQk9EWQorICogcmVxdWVzdHMgb24gZmlsZXMgcmVzcG9uZCB3aXRoIGhlYWRlcnMgcGFzc2VkIHRvIHRoZSBjbGllbnQvc3Rkb3V0IHRoYXQKKyAqIGxvb2tlZCBsaWtlIEhUVFAgb25lcy4KKyAqCisgKiBUaGlzIGFwcHJvYWNoIGlzIG5vdCB2ZXJ5IGVsZWdhbnQsIGl0IGNhdXNlcyBjb25mdXNpb24gYW5kIGlzIGVycm9yLXByb25lLgorICogSXQgaXMgc3ViamVjdCBmb3IgcmVtb3ZhbCBhdCB0aGUgbmV4dCAob3IgYXQgbGVhc3QgYSBmdXR1cmUpIHNvbmFtZSBidW1wLgorICogVW50aWwgdGhlbiB5b3UgY2FuIHRlc3QgdGhlIGVmZmVjdHMgb2YgdGhlIHJlbW92YWwgYnkgdW5kZWZpbmluZyB0aGUKKyAqIGZvbGxvd2luZyBkZWZpbmUgbmFtZWQgQ1VSTF9GVFBfSFRUUFNUWUxFX0hFQUQuCisgKi8KKyNkZWZpbmUgQ1VSTF9GVFBfSFRUUFNUWUxFX0hFQUQgMQorCitzdGF0aWMgdm9pZCBmcmVlZGlycyhzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMpCit7CisgIGludCBpOworICBpZihmdHBjLT5kaXJzKSB7CisgICAgZm9yKGk9MDsgaSA8IGZ0cGMtPmRpcmRlcHRoOyBpKyspIHsKKyAgICAgIGlmKGZ0cGMtPmRpcnNbaV0pIHsKKyAgICAgICAgZnJlZShmdHBjLT5kaXJzW2ldKTsKKyAgICAgICAgZnRwYy0+ZGlyc1tpXT1OVUxMOworICAgICAgfQorICAgIH0KKyAgICBmcmVlKGZ0cGMtPmRpcnMpOworICAgIGZ0cGMtPmRpcnMgPSBOVUxMOworICAgIGZ0cGMtPmRpcmRlcHRoID0gMDsKKyAgfQorICBpZihmdHBjLT5maWxlKSB7CisgICAgZnJlZShmdHBjLT5maWxlKTsKKyAgICBmdHBjLT5maWxlID0gTlVMTDsKKyAgfQorfQorCisvKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSBnaXZlbiBzdHJpbmcgY29udGFpbnMgQ1IgKFxyKSBvciBMRiAoXG4pLAorICAgd2hpY2ggYXJlIG5vdCBhbGxvd2VkIHdpdGhpbiBSRkMgOTU5IDxzdHJpbmc+LgorICAgTm90ZTogVGhlIGlucHV0IHN0cmluZyBpcyBpbiB0aGUgY2xpZW50J3MgZW5jb2Rpbmcgd2hpY2ggbWlnaHQKKyAgIG5vdCBiZSBBU0NJSSwgc28gZXNjYXBlIHNlcXVlbmNlcyBcciAmIFxuIG11c3QgYmUgdXNlZCBpbnN0ZWFkCisgICBvZiBoZXggdmFsdWVzIDB4MGQgJiAweDBhLgorKi8KK3N0YXRpYyBib29sIGlzQmFkRnRwU3RyaW5nKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgcmV0dXJuICgoTlVMTCAhPSBzdHJjaHIoc3RyaW5nLCAnXHInKSkgfHwKKyAgICAgICAgICAoTlVMTCAhPSBzdHJjaHIoc3RyaW5nLCAnXG4nKSkpID8gVFJVRSA6IEZBTFNFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBBY2NlcHRTZXJ2ZXJDb25uZWN0KCkKKyAqCisgKiBBZnRlciBjb25uZWN0aW9uIHJlcXVlc3QgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIHRoaXMgZnVuY3Rpb24gaXMKKyAqIGNhbGxlZCB0byBhY2NlcHQgdGhlIGNvbm5lY3Rpb24gYW5kIGNsb3NlIHRoZSBsaXN0ZW5pbmcgc29ja2V0CisgKgorICovCitzdGF0aWMgQ1VSTGNvZGUgQWNjZXB0U2VydmVyQ29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdOworICBjdXJsX3NvY2tldF90IHMgPSBDVVJMX1NPQ0tFVF9CQUQ7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSBhZGQ7CisjZWxzZQorICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkOworI2VuZGlmCisgIGN1cmxfc29ja2xlbl90IHNpemUgPSAoY3VybF9zb2NrbGVuX3QpIHNpemVvZihhZGQpOworCisgIGlmKDAgPT0gZ2V0c29ja25hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkLCAmc2l6ZSkpIHsKKyAgICBzaXplID0gc2l6ZW9mKGFkZCk7CisKKyAgICBzPWFjY2VwdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZhZGQsICZzaXplKTsKKyAgfQorICBDdXJsX2Nsb3Nlc29ja2V0KGNvbm4sIHNvY2spOyAvKiBjbG9zZSB0aGUgZmlyc3Qgc29ja2V0ICovCisKKyAgaWYoQ1VSTF9TT0NLRVRfQkFEID09IHMpIHsKKyAgICBmYWlsZihkYXRhLCAiRXJyb3IgYWNjZXB0KClpbmcgc2VydmVyIGNvbm5lY3QiKTsKKyAgICByZXR1cm4gQ1VSTEVfRlRQX1BPUlRfRkFJTEVEOworICB9CisgIGluZm9mKGRhdGEsICJDb25uZWN0aW9uIGFjY2VwdGVkIGZyb20gc2VydmVyXG4iKTsKKworICBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0gPSBzOworICBjdXJseF9ub25ibG9jayhzLCBUUlVFKTsgLyogZW5hYmxlIG5vbi1ibG9ja2luZyAqLworICBjb25uLT5zb2NrX2FjY2VwdGVkW1NFQ09OREFSWVNPQ0tFVF0gPSBUUlVFOworICByZXR1cm4gQ1VSTEVfT0s7CisKK30KKworLyoKKyAqIGZ0cF90aW1lbGVmdF9hY2NlcHQoKSByZXR1cm5zIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGxlZnQgYWxsb3dlZCBmb3IKKyAqIHdhaXRpbmcgc2VydmVyIHRvIGNvbm5lY3QuIElmIHRoZSB2YWx1ZSBpcyBuZWdhdGl2ZSwgdGhlIHRpbWVvdXQgdGltZSBoYXMKKyAqIGFscmVhZHkgZWxhcHNlZC4KKyAqCisgKiBUaGUgc3RhcnQgdGltZSBpcyBzdG9yZWQgaW4gcHJvZ3Jlc3MudF9hY2NlcHRkYXRhIC0gYXMgc2V0IHdpdGgKKyAqIEN1cmxfcGdyc1RpbWUoLi4uLCBUSU1FUl9TVEFSVEFDQ0VQVCk7CisgKgorICovCitzdGF0aWMgbG9uZyBmdHBfdGltZWxlZnRfYWNjZXB0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBsb25nIHRpbWVvdXRfbXMgPSBERUZBVUxUX0FDQ0VQVF9USU1FT1VUOworICBsb25nIG90aGVyOworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisKKyAgaWYoZGF0YS0+c2V0LmFjY2VwdHRpbWVvdXQgPiAwKQorICAgIHRpbWVvdXRfbXMgPSBkYXRhLT5zZXQuYWNjZXB0dGltZW91dDsKKworICBub3cgPSBDdXJsX3R2bm93KCk7CisKKyAgLyogY2hlY2sgaWYgdGhlIGdlbmVyaWMgdGltZW91dCBwb3NzaWJseSBpcyBzZXQgc2hvcnRlciAqLworICBvdGhlciA9ICBDdXJsX3RpbWVsZWZ0KGRhdGEsICZub3csIEZBTFNFKTsKKyAgaWYob3RoZXIgJiYgKG90aGVyIDwgdGltZW91dF9tcykpCisgICAgLyogbm90ZSB0aGF0IHRoaXMgYWxzbyB3b3JrcyBmaW5lIGZvciB3aGVuIG90aGVyIGhhcHBlbnMgdG8gYmUgbmVnYXRpdmUKKyAgICAgICBkdWUgdG8gaXQgYWxyZWFkeSBoYXZpbmcgZWxhcHNlZCAqLworICAgIHRpbWVvdXRfbXMgPSBvdGhlcjsKKyAgZWxzZSB7CisgICAgLyogc3VidHJhY3QgZWxhcHNlZCB0aW1lICovCisgICAgdGltZW91dF9tcyAtPSBDdXJsX3R2ZGlmZihub3csIGRhdGEtPnByb2dyZXNzLnRfYWNjZXB0ZGF0YSk7CisgICAgaWYoIXRpbWVvdXRfbXMpCisgICAgICAvKiBhdm9pZCByZXR1cm5pbmcgMCBhcyB0aGF0IG1lYW5zIG5vIHRpbWVvdXQhICovCisgICAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gdGltZW91dF9tczsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBSZWNlaXZlZFNlcnZlckNvbm5lY3QoKQorICoKKyAqIEFmdGVyIGFsbG93aW5nIHNlcnZlciB0byBjb25uZWN0IHRvIHVzIGZyb20gZGF0YSBwb3J0LCB0aGlzIGZ1bmN0aW9uCisgKiBjaGVja3MgYm90aCBkYXRhIGNvbm5lY3Rpb24gZm9yIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgY3RybAorICogY29ubmVjdGlvbiBmb3IgYSBuZWdhdGl2ZSByZXNwb25zZSByZWdhcmRpbmcgYSBmYWlsdXJlIGluIGNvbm5lY3RpbmcKKyAqCisgKi8KK3N0YXRpYyBDVVJMY29kZSBSZWNlaXZlZFNlcnZlckNvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhKiBjb25uLCBib29sKiByZWNlaXZlZCkKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBjdXJsX3NvY2tldF90IGN0cmxfc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICBjdXJsX3NvY2tldF90IGRhdGFfc29jayA9IGNvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXTsKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisgIHN0cnVjdCBwaW5ncG9uZyAqcHAgPSAmZnRwYy0+cHA7CisgIGludCByZXN1bHQ7CisgIGxvbmcgdGltZW91dF9tczsKKyAgc3NpemVfdCBucmVhZDsKKyAgaW50IGZ0cGNvZGU7CisKKyAgKnJlY2VpdmVkID0gRkFMU0U7CisKKyAgdGltZW91dF9tcyA9IGZ0cF90aW1lbGVmdF9hY2NlcHQoZGF0YSk7CisgIGluZm9mKGRhdGEsICJDaGVja2luZyBmb3Igc2VydmVyIGNvbm5lY3RcbiIpOworICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgIC8qIGlmIGEgdGltZW91dCB3YXMgYWxyZWFkeSByZWFjaGVkLCBiYWlsIG91dCAqLworICAgIGZhaWxmKGRhdGEsICJBY2NlcHQgdGltZW91dCBvY2N1cnJlZCB3aGlsZSB3YWl0aW5nIHNlcnZlciBjb25uZWN0Iik7CisgICAgcmV0dXJuIENVUkxFX0ZUUF9BQ0NFUFRfVElNRU9VVDsKKyAgfQorCisgIC8qIEZpcnN0IGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYSBjYWNoZWQgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgKi8KKyAgaWYocHAtPmNhY2hlX3NpemUgJiYgcHAtPmNhY2hlICYmIHBwLT5jYWNoZVswXSA+ICczJykgeworICAgIC8qIERhdGEgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIGxldCdzIHJldHVybiAqLworICAgIGluZm9mKGRhdGEsICJUaGVyZSBpcyBuZWdhdGl2ZSByZXNwb25zZSBpbiBjYWNoZSB3aGlsZSBzZXJ2IGNvbm5lY3RcbiIpOworICAgIEN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCAmZnRwY29kZSk7CisgICAgcmV0dXJuIENVUkxFX0ZUUF9BQ0NFUFRfRkFJTEVEOworICB9CisKKyAgcmVzdWx0ID0gQ3VybF9zb2NrZXRfY2hlY2soY3RybF9zb2NrLCBkYXRhX3NvY2ssIENVUkxfU09DS0VUX0JBRCwgMCk7CisKKyAgLyogc2VlIGlmIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QgaXMgYWxyZWFkeSBoZXJlICovCisgIHN3aXRjaCAocmVzdWx0KSB7CisgIGNhc2UgLTE6IC8qIGVycm9yICovCisgICAgLyogbGV0J3MgZGllIGhlcmUgKi8KKyAgICBmYWlsZihkYXRhLCAiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3Igc2VydmVyIGNvbm5lY3QiKTsKKyAgICByZXR1cm4gQ1VSTEVfRlRQX0FDQ0VQVF9GQUlMRUQ7CisgIGNhc2UgMDogIC8qIFNlcnZlciBjb25uZWN0IGlzIG5vdCByZWNlaXZlZCB5ZXQgKi8KKyAgICBicmVhazsgLyogbG9vcCAqLworICBkZWZhdWx0OgorCisgICAgaWYocmVzdWx0ICYgQ1VSTF9DU0VMRUNUX0lOMikgeworICAgICAgaW5mb2YoZGF0YSwgIlJlYWR5IHRvIGFjY2VwdCBkYXRhIGNvbm5lY3Rpb24gZnJvbSBzZXJ2ZXJcbiIpOworICAgICAgKnJlY2VpdmVkID0gVFJVRTsKKyAgICB9CisgICAgZWxzZSBpZihyZXN1bHQgJiBDVVJMX0NTRUxFQ1RfSU4pIHsKKyAgICAgIGluZm9mKGRhdGEsICJDdHJsIGNvbm4gaGFzIGRhdGEgd2hpbGUgd2FpdGluZyBmb3IgZGF0YSBjb25uXG4iKTsKKyAgICAgIEN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCAmZnRwY29kZSk7CisKKyAgICAgIGlmKGZ0cGNvZGUvMTAwID4gMykKKyAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9BQ0NFUFRfRkFJTEVEOworCisgICAgICByZXR1cm4gQ1VSTEVfRlRQX1dFSVJEX1NFUlZFUl9SRVBMWTsKKyAgICB9CisKKyAgICBicmVhazsKKyAgfSAvKiBzd2l0Y2goKSAqLworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBJbml0aWF0ZVRyYW5zZmVyKCkKKyAqCisgKiBBZnRlciBjb25uZWN0aW9uIGZyb20gc2VydmVyIGlzIGFjY2VwdGVkIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvCisgKiBzZXR1cCB0cmFuc2ZlciBwYXJhbWV0ZXJzIGFuZCBpbml0aWF0ZSB0aGUgZGF0YSB0cmFuc2Zlci4KKyAqCisgKi8KK3N0YXRpYyBDVVJMY29kZSBJbml0aWF0ZVRyYW5zZmVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgRlRQICpmdHAgPSBkYXRhLT5zdGF0ZS5wcm90by5mdHA7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIGlmKGNvbm4tPnNzbFtTRUNPTkRBUllTT0NLRVRdLnVzZSkgeworICAgIC8qIHNpbmNlIHdlIG9ubHkgaGF2ZSBhIHBsYWludGV4dCBUQ1AgY29ubmVjdGlvbiBoZXJlLCB3ZSBtdXN0IG5vdworICAgICAqIGRvIHRoZSBUTFMgc3R1ZmYgKi8KKyAgICBpbmZvZihkYXRhLCAiRG9pbmcgdGhlIFNTTC9UTFMgaGFuZHNoYWtlIG9uIHRoZSBkYXRhIHN0cmVhbVxuIik7CisgICAgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdChjb25uLCBTRUNPTkRBUllTT0NLRVQpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBpZihjb25uLT5wcm90by5mdHBjLnN0YXRlX3NhdmVkID09IEZUUF9TVE9SKSB7CisgICAgKihmdHAtPmJ5dGVjb3VudHApPTA7CisKKyAgICAvKiBXaGVuIHdlIGtub3cgd2UncmUgdXBsb2FkaW5nIGEgc3BlY2lmaWVkIGZpbGUsIHdlIGNhbiBnZXQgdGhlIGZpbGUKKyAgICAgICBzaXplIHByaW9yIHRvIHRoZSBhY3R1YWwgdXBsb2FkLiAqLworCisgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBkYXRhLT5zZXQuaW5maWxlc2l6ZSk7CisKKyAgICAvKiBzZXQgdGhlIFNPX1NOREJVRiBmb3IgdGhlIHNlY29uZGFyeSBzb2NrZXQgZm9yIHRob3NlIHdobyBuZWVkIGl0ICovCisgICAgQ3VybF9zbmRidWZzZXQoY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdKTsKKworICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLyogbm8gZG93bmxvYWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIFNFQ09OREFSWVNPQ0tFVCwgZnRwLT5ieXRlY291bnRwKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBGVFAgZG93bmxvYWQ6ICovCisgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBTRUNPTkRBUllTT0NLRVQsCisgICAgICAgIGNvbm4tPnByb3RvLmZ0cGMucmV0cl9zaXplX3NhdmVkLCBGQUxTRSwKKyAgICAgICAgZnRwLT5ieXRlY291bnRwLCAtMSwgTlVMTCk7IC8qIG5vIHVwbG9hZCBoZXJlICovCisgIH0KKworICBjb25uLT5wcm90by5mdHBjLnBwLnBlbmRpbmdfcmVzcCA9IFRSVUU7IC8qIGV4cGVjdCBzZXJ2ZXIgcmVzcG9uc2UgKi8KKyAgc3RhdGUoY29ubiwgRlRQX1NUT1ApOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQWxsb3dTZXJ2ZXJDb25uZWN0KCkKKyAqCisgKiBXaGVuIHdlJ3ZlIGlzc3VlIHRoZSBQT1JUIGNvbW1hbmQsIHdlIGhhdmUgdG9sZCB0aGUgc2VydmVyIHRvIGNvbm5lY3QKKyAqIHRvIHVzLiBUaGlzIGZ1bmN0aW9uCisgKiAgIC0gd2lsbCBzaXQgYW5kIHdhaXQgaGVyZSB1bnRpbCB0aGUgc2VydmVyIGhhcyBjb25uZWN0ZWQgZm9yIGVhc3kgaW50ZXJmYWNlCisgKiAgIC0gd2lsbCBjaGVjayB3aGV0aGVyIGRhdGEgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBpZiBzbyBpdCBpcyBhY2NlcHRlZAorICogICBmb3IgbXVsdGkgaW50ZXJmYWNlCisgKgorICovCitzdGF0aWMgQ1VSTGNvZGUgQWxsb3dTZXJ2ZXJDb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqY29ubmVjdGVkKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGxvbmcgdGltZW91dF9tczsKKyAgbG9uZyBpbnRlcnZhbF9tczsKKyAgQ1VSTGNvZGUgcmV0ID0gQ1VSTEVfT0s7CisKKyAgKmNvbm5lY3RlZCA9IEZBTFNFOworICBpbmZvZihkYXRhLCAiUHJlcGFyaW5nIGZvciBhY2NlcHRpbmcgc2VydmVyIG9uIGRhdGEgcG9ydFxuIik7CisKKyAgLyogU2F2ZSB0aGUgdGltZSB3ZSBzdGFydCBhY2NlcHRpbmcgc2VydmVyIGNvbm5lY3QgKi8KKyAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9TVEFSVEFDQ0VQVCk7CisKKyAgZm9yKDs7KSB7CisgICAgdGltZW91dF9tcyA9IGZ0cF90aW1lbGVmdF9hY2NlcHQoZGF0YSk7CisgICAgaWYodGltZW91dF9tcyA8IDApIHsKKyAgICAgIC8qIGlmIGEgdGltZW91dCB3YXMgYWxyZWFkeSByZWFjaGVkLCBiYWlsIG91dCAqLworICAgICAgZmFpbGYoZGF0YSwgIkFjY2VwdCB0aW1lb3V0IG9jY3VycmVkIHdoaWxlIHdhaXRpbmcgc2VydmVyIGNvbm5lY3QiKTsKKyAgICAgIHJldHVybiBDVVJMRV9GVFBfQUNDRVBUX1RJTUVPVVQ7CisgICAgfQorCisgICAgLyogc2VlIGlmIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QgaXMgYWxyZWFkeSBoZXJlICovCisgICAgcmV0ID0gUmVjZWl2ZWRTZXJ2ZXJDb25uZWN0KGNvbm4sIGNvbm5lY3RlZCk7CisgICAgaWYocmV0KQorICAgICAgcmV0dXJuIHJldDsKKworICAgIGlmKCpjb25uZWN0ZWQpIHsKKyAgICAgIHJldCA9IEFjY2VwdFNlcnZlckNvbm5lY3QoY29ubik7CisgICAgICBpZihyZXQpCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgIHJldCA9IEluaXRpYXRlVHJhbnNmZXIoY29ubik7CisgICAgICBpZihyZXQpCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgIGJyZWFrOyAvKiBjb25uZWN0aW9uIGlzIGFjY2VwdGVkLCBicmVhayB0aGUgbG9vcCAqLworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmKGRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID09IEN1cmxfaWZfZWFzeSkgeworICAgICAgICBpbnRlcnZhbF9tcyA9IDEwMDA7CisgICAgICAgIGlmKHRpbWVvdXRfbXMgPCBpbnRlcnZhbF9tcykKKyAgICAgICAgICBpbnRlcnZhbF9tcyA9IHRpbWVvdXRfbXM7CisKKyAgICAgICAgLyogc2xlZXAgZm9yIDEgc2Vjb25kIGFuZCB0aGVuIGNvbnRpbnVlICovCisgICAgICAgIEN1cmxfc29ja2V0X3JlYWR5KENVUkxfU09DS0VUX0JBRCwgQ1VSTF9TT0NLRVRfQkFELCBpbnRlcnZhbF9tcyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogQWRkIHRpbWVvdXQgdG8gbXVsdGkgaGFuZGxlIGFuZCBicmVhayBvdXQgb2YgdGhlIGxvb3AgKi8KKyAgICAgICAgaWYocmV0ID09IENVUkxFX09LICYmICpjb25uZWN0ZWQgPT0gRkFMU0UpIHsKKyAgICAgICAgICBpZihkYXRhLT5zZXQuYWNjZXB0dGltZW91dCA+IDApCisgICAgICAgICAgICBDdXJsX2V4cGlyZShkYXRhLCBkYXRhLT5zZXQuYWNjZXB0dGltZW91dCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgQ3VybF9leHBpcmUoZGF0YSwgREVGQVVMVF9BQ0NFUFRfVElNRU9VVCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsgLyogY29ubmVjdGlvbiB3YXMgbm90IGFjY2VwdGVkIGltbWVkaWF0ZWx5ICovCisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworLyogbWFjcm8gdG8gY2hlY2sgZm9yIGEgdGhyZWUtZGlnaXQgZnRwIHN0YXR1cyBjb2RlIGF0IHRoZSBzdGFydCBvZiB0aGUKKyAgIGdpdmVuIHN0cmluZyAqLworI2RlZmluZSBTVEFUVVNDT0RFKGxpbmUpIChJU0RJR0lUKGxpbmVbMF0pICYmIElTRElHSVQobGluZVsxXSkgJiYgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBJU0RJR0lUKGxpbmVbMl0pKQorCisvKiBtYWNybyB0byBjaGVjayBmb3IgdGhlIGxhc3QgbGluZSBpbiBhbiBGVFAgc2VydmVyIHJlc3BvbnNlICovCisjZGVmaW5lIExBU1RMSU5FKGxpbmUpIChTVEFUVVNDT0RFKGxpbmUpICYmICgnICcgPT0gbGluZVszXSkpCisKK3N0YXRpYyBpbnQgZnRwX2VuZG9mcmVzcChzdHJ1Y3QgcGluZ3BvbmcgKnBwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY29kZSkKK3sKKyAgY2hhciAqbGluZSA9IHBwLT5saW5lc3RhcnRfcmVzcDsKKyAgc2l6ZV90IGxlbiA9IHBwLT5ucmVhZF9yZXNwOworCisgIGlmKChsZW4gPiAzKSAmJiBMQVNUTElORShsaW5lKSkgeworICAgICpjb2RlID0gY3VybHhfc2x0b3NpKHN0cnRvbChsaW5lLCBOVUxMLCAxMCkpOworICAgIHJldHVybiAxOworICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3JlYWRyZXNwKGN1cmxfc29ja2V0X3Qgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGluZ3BvbmcgKnBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmZ0cGNvZGUsIC8qIHJldHVybiB0aGUgZnRwLWNvZGUgaWYgZG9uZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnNpemUpIC8qIHNpemUgb2YgdGhlIHJlc3BvbnNlICovCit7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IHBwLT5jb25uOworI2lmIGRlZmluZWQoSEFWRV9LUkI0KSB8fCBkZWZpbmVkKEhBVkVfR1NTQVBJKQorICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGNoYXIgKiBjb25zdCBidWYgPSBkYXRhLT5zdGF0ZS5idWZmZXI7CisjZW5kaWYKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGludCBjb2RlOworCisgIHJlc3VsdCA9IEN1cmxfcHBfcmVhZHJlc3Aoc29ja2ZkLCBwcCwgJmNvZGUsIHNpemUpOworCisjaWYgZGVmaW5lZChIQVZFX0tSQjQpIHx8IGRlZmluZWQoSEFWRV9HU1NBUEkpCisgIC8qIGhhbmRsZSB0aGUgc2VjdXJpdHktb3JpZW50ZWQgcmVzcG9uc2VzIDZ4eCAqKiovCisgIC8qIEZJWE1FOiBzb21lIGVycm9yY2hlY2tpbmcgcGVyaGFwcy4uLiAqKiovCisgIHN3aXRjaChjb2RlKSB7CisgIGNhc2UgNjMxOgorICAgIGNvZGUgPSBDdXJsX3NlY19yZWFkX21zZyhjb25uLCBidWYsIFBST1RfU0FGRSk7CisgICAgYnJlYWs7CisgIGNhc2UgNjMyOgorICAgIGNvZGUgPSBDdXJsX3NlY19yZWFkX21zZyhjb25uLCBidWYsIFBST1RfUFJJVkFURSk7CisgICAgYnJlYWs7CisgIGNhc2UgNjMzOgorICAgIGNvZGUgPSBDdXJsX3NlY19yZWFkX21zZyhjb25uLCBidWYsIFBST1RfQ09ORklERU5USUFMKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICAvKiBub3JtYWwgZnRwIHN0dWZmIHdlIHBhc3MgdGhyb3VnaCEgKi8KKyAgICBicmVhazsKKyAgfQorI2VuZGlmCisKKyAgLyogc3RvcmUgdGhlIGxhdGVzdCBjb2RlIGZvciBsYXRlciByZXRyaWV2YWwgKi8KKyAgY29ubi0+ZGF0YS0+aW5mby5odHRwY29kZT1jb2RlOworCisgIGlmKGZ0cGNvZGUpCisgICAgKmZ0cGNvZGUgPSBjb2RlOworCisgIGlmKDQyMSA9PSBjb2RlKQorICAgIC8qIDQyMSBtZWFucyAiU2VydmljZSBub3QgYXZhaWxhYmxlLCBjbG9zaW5nIGNvbnRyb2wgY29ubmVjdGlvbi4iIGFuZCBGVFAKKyAgICAgKiBzZXJ2ZXJzIHVzZSBpdCB0byBzaWduYWwgdGhhdCBpZGxlIHNlc3Npb24gdGltZW91dCBoYXMgYmVlbiBleGNlZWRlZC4KKyAgICAgKiBJZiB3ZSBpZ25vcmVkIHRoZSByZXNwb25zZSwgaXQgY291bGQgZW5kIHVwIGhhbmdpbmcgaW4gc29tZSBjYXNlcy4gKi8KKyAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIC0tLSBwYXJzZSBGVFAgc2VydmVyIHJlc3BvbnNlcyAtLS0gKi8KKworLyoKKyAqIEN1cmxfR2V0RlRQUmVzcG9uc2UoKSBpcyBhIEJMT0NLSU5HIGZ1bmN0aW9uIHRvIHJlYWQgdGhlIGZ1bGwgcmVzcG9uc2UKKyAqIGZyb20gYSBzZXJ2ZXIgYWZ0ZXIgYSBjb21tYW5kLgorICoKKyAqLworCitDVVJMY29kZSBDdXJsX0dldEZUUFJlc3BvbnNlKHNzaXplX3QgKm5yZWFkcCwgLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpmdHBjb2RlKSAvKiByZXR1cm4gdGhlIGZ0cC1jb2RlICovCit7CisgIC8qCisgICAqIFdlIGNhbm5vdCByZWFkIGp1c3Qgb25lIGJ5dGUgcGVyIHJlYWQoKSBhbmQgdGhlbiBnbyBiYWNrIHRvIHNlbGVjdCgpIGFzCisgICAqIHRoZSBPcGVuU1NMIHJlYWQoKSBkb2Vzbid0IGdyb2sgdGhhdCBwcm9wZXJseS4KKyAgICoKKyAgICogQWxhcywgcmVhZCBhcyBtdWNoIGFzIHBvc3NpYmxlLCBzcGxpdCB1cCBpbnRvIGxpbmVzLCB1c2UgdGhlIGVuZGluZworICAgKiBsaW5lIGluIGEgcmVzcG9uc2Ugb3IgY29udGludWUgcmVhZGluZy4gICovCisKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgbG9uZyB0aW1lb3V0OyAgICAgICAgICAgICAgLyogdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KKyAgbG9uZyBpbnRlcnZhbF9tczsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisgIHN0cnVjdCBwaW5ncG9uZyAqcHAgPSAmZnRwYy0+cHA7CisgIHNpemVfdCBucmVhZDsKKyAgaW50IGNhY2hlX3NraXA9MDsKKyAgaW50IHZhbHVlX3RvX2JlX2lnbm9yZWQ9MDsKKworICBpZihmdHBjb2RlKQorICAgICpmdHBjb2RlID0gMDsgLyogMCBmb3IgZXJyb3JzICovCisgIGVsc2UKKyAgICAvKiBtYWtlIHRoZSBwb2ludGVyIHBvaW50IHRvIHNvbWV0aGluZyBmb3IgdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiAqLworICAgIGZ0cGNvZGUgPSAmdmFsdWVfdG9fYmVfaWdub3JlZDsKKworICAqbnJlYWRwPTA7CisKKyAgd2hpbGUoISpmdHBjb2RlICYmICFyZXN1bHQpIHsKKyAgICAvKiBjaGVjayBhbmQgcmVzZXQgdGltZW91dCB2YWx1ZSBldmVyeSBsYXAgKi8KKyAgICB0aW1lb3V0ID0gQ3VybF9wcF9zdGF0ZV90aW1lb3V0KHBwKTsKKworICAgIGlmKHRpbWVvdXQgPD0wICkgeworICAgICAgZmFpbGYoZGF0YSwgIkZUUCByZXNwb25zZSB0aW1lb3V0Iik7CisgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOyAvKiBhbHJlYWR5IHRvbyBsaXR0bGUgdGltZSAqLworICAgIH0KKworICAgIGludGVydmFsX21zID0gMTAwMDsgIC8qIHVzZSAxIHNlY29uZCB0aW1lb3V0IGludGVydmFscyAqLworICAgIGlmKHRpbWVvdXQgPCBpbnRlcnZhbF9tcykKKyAgICAgIGludGVydmFsX21zID0gdGltZW91dDsKKworICAgIC8qCisgICAgICogU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBibG9ja2luZywgd2UgbmVlZCB0byB3YWl0IGhlcmUgZm9yIGlucHV0IG9uIHRoZQorICAgICAqIGNvbm5lY3Rpb24gYW5kIG9ubHkgdGhlbiB3ZSBjYWxsIHRoZSByZXNwb25zZSByZWFkaW5nIGZ1bmN0aW9uLiBXZSBkbworICAgICAqIHRpbWVvdXQgYXQgbGVhc3QgZXZlcnkgc2Vjb25kIHRvIG1ha2UgdGhlIHRpbWVvdXQgY2hlY2sgcnVuLgorICAgICAqCisgICAgICogQSBjYXV0aW9uIGhlcmUgaXMgdGhhdCB0aGUgZnRwX3JlYWRyZXNwKCkgZnVuY3Rpb24gaGFzIGEgY2FjaGUgdGhhdCBtYXkKKyAgICAgKiBjb250YWluIHBpZWNlcyBvZiBhIHJlc3BvbnNlIGZyb20gdGhlIHByZXZpb3VzIGludm9rZSBhbmQgd2UgbmVlZCB0bworICAgICAqIG1ha2Ugc3VyZSB3ZSBkb24ndCBqdXN0IHdhaXQgZm9yIGlucHV0IHdoaWxlIHRoZXJlIGlzIHVuaGFuZGxlZCBkYXRhIGluCisgICAgICogdGhhdCBjYWNoZS4gQnV0IGFsc28sIGlmIHRoZSBjYWNoZSBpcyB0aGVyZSwgd2UgY2FsbCBmdHBfcmVhZHJlc3AoKSBhbmQKKyAgICAgKiB0aGUgY2FjaGUgd2Fzbid0IGdvb2QgZW5vdWdoIHRvIGNvbnRpbnVlIHdlIG11c3Qgbm90IGp1c3QgYnVzeS1sb29wCisgICAgICogYXJvdW5kIHRoaXMgZnVuY3Rpb24uCisgICAgICoKKyAgICAgKi8KKworICAgIGlmKHBwLT5jYWNoZSAmJiAoY2FjaGVfc2tpcCA8IDIpKSB7CisgICAgICAvKgorICAgICAgICogVGhlcmUncyBhIGNhY2hlIGxlZnQgc2luY2UgYmVmb3JlLiBXZSB0aGVuIHNraXBwaW5nIHRoZSB3YWl0IGZvcgorICAgICAgICogc29ja2V0IGFjdGlvbiwgdW5sZXNzIHRoaXMgaXMgdGhlIHNhbWUgY2FjaGUgbGlrZSB0aGUgcHJldmlvdXMgcm91bmQKKyAgICAgICAqIGFzIHRoZW4gdGhlIGNhY2hlIHdhcyBkZWVtZWQgbm90IGVub3VnaCB0byBhY3Qgb24gYW5kIHdlIHRoZW4gbmVlZCB0bworICAgICAgICogd2FpdCBmb3IgbW9yZSBkYXRhIGFueXdheS4KKyAgICAgICAqLworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN3aXRjaCAoQ3VybF9zb2NrZXRfcmVhZHkoc29ja2ZkLCBDVVJMX1NPQ0tFVF9CQUQsIGludGVydmFsX21zKSkgeworICAgICAgY2FzZSAtMTogLyogc2VsZWN0KCkgZXJyb3IsIHN0b3AgcmVhZGluZyAqLworICAgICAgICBmYWlsZihkYXRhLCAiRlRQIHJlc3BvbnNlIGFib3J0ZWQgZHVlIHRvIHNlbGVjdC9wb2xsIGVycm9yOiAlZCIsCisgICAgICAgICAgICAgIFNPQ0tFUlJOTyk7CisgICAgICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworCisgICAgICBjYXNlIDA6IC8qIHRpbWVvdXQgKi8KKyAgICAgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKQorICAgICAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworICAgICAgICBjb250aW51ZTsgLyoganVzdCBjb250aW51ZSBpbiBvdXIgbG9vcCBmb3IgdGhlIHRpbWVvdXQgZHVyYXRpb24gKi8KKworICAgICAgZGVmYXVsdDogLyogZm9yIGNsYXJpdHkgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIHJlc3VsdCA9IGZ0cF9yZWFkcmVzcChzb2NrZmQsIHBwLCBmdHBjb2RlLCAmbnJlYWQpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIGJyZWFrOworCisgICAgaWYoIW5yZWFkICYmIHBwLT5jYWNoZSkKKyAgICAgIC8qIGJ1bXAgY2FjaGUgc2tpcCBjb3VudGVyIGFzIG9uIHJlcGVhdGVkIHNraXBzIHdlIG11c3Qgd2FpdCBmb3IgbW9yZQorICAgICAgICAgZGF0YSAqLworICAgICAgY2FjaGVfc2tpcCsrOworICAgIGVsc2UKKyAgICAgIC8qIHdoZW4gd2UgZ290IGRhdGEgb3IgdGhlcmUgaXMgbm8gY2FjaGUgbGVmdCwgd2UgcmVzZXQgdGhlIGNhY2hlIHNraXAKKyAgICAgICAgIGNvdW50ZXIgKi8KKyAgICAgIGNhY2hlX3NraXA9MDsKKworICAgICpucmVhZHAgKz0gbnJlYWQ7CisKKyAgfSAvKiB3aGlsZSB0aGVyZSdzIGJ1ZmZlciBsZWZ0IGFuZCBsb29wIGlzIHJlcXVlc3RlZCAqLworCisgIHBwLT5wZW5kaW5nX3Jlc3AgPSBGQUxTRTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBUaGlzIGlzIHRoZSBPTkxZIHdheSB0byBjaGFuZ2UgRlRQIHN0YXRlISAqLworc3RhdGljIHZvaWQgc3RhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgZnRwc3RhdGUgbmV3c3RhdGUpCit7CisjaWYgZGVmaW5lZChERUJVR0JVSUxEKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorICAvKiBmb3IgZGVidWcgcHVycG9zZXMgKi8KKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lc1tdPXsKKyAgICAiU1RPUCIsCisgICAgIldBSVQyMjAiLAorICAgICJBVVRIIiwKKyAgICAiVVNFUiIsCisgICAgIlBBU1MiLAorICAgICJBQ0NUIiwKKyAgICAiUEJTWiIsCisgICAgIlBST1QiLAorICAgICJDQ0MiLAorICAgICJQV0QiLAorICAgICJTWVNUIiwKKyAgICAiTkFNRUZNVCIsCisgICAgIlFVT1RFIiwKKyAgICAiUkVUUl9QUkVRVU9URSIsCisgICAgIlNUT1JfUFJFUVVPVEUiLAorICAgICJQT1NUUVVPVEUiLAorICAgICJDV0QiLAorICAgICJNS0QiLAorICAgICJNRFRNIiwKKyAgICAiVFlQRSIsCisgICAgIkxJU1RfVFlQRSIsCisgICAgIlJFVFJfVFlQRSIsCisgICAgIlNUT1JfVFlQRSIsCisgICAgIlNJWkUiLAorICAgICJSRVRSX1NJWkUiLAorICAgICJTVE9SX1NJWkUiLAorICAgICJSRVNUIiwKKyAgICAiUkVUUl9SRVNUIiwKKyAgICAiUE9SVCIsCisgICAgIlBSRVQiLAorICAgICJQQVNWIiwKKyAgICAiTElTVCIsCisgICAgIlJFVFIiLAorICAgICJTVE9SIiwKKyAgICAiUVVJVCIKKyAgfTsKKyNlbmRpZgorICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKyNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCisgIGlmKGZ0cGMtPnN0YXRlICE9IG5ld3N0YXRlKQorICAgIGluZm9mKGNvbm4tPmRhdGEsICJGVFAgJXAgc3RhdGUgY2hhbmdlIGZyb20gJXMgdG8gJXNcbiIsCisgICAgICAgICAgZnRwYywgbmFtZXNbZnRwYy0+c3RhdGVdLCBuYW1lc1tuZXdzdGF0ZV0pOworI2VuZGlmCisgIGZ0cGMtPnN0YXRlID0gbmV3c3RhdGU7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBmdHBfc3RhdGVfdXNlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgc3RydWN0IEZUUCAqZnRwID0gY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8uZnRwOworICAvKiBzZW5kIFVTRVIgKi8KKyAgUFBTRU5ERigmY29ubi0+cHJvdG8uZnRwYy5wcCwgIlVTRVIgJXMiLCBmdHAtPnVzZXI/ZnRwLT51c2VyOiIiKTsKKworICBzdGF0ZShjb25uLCBGVFBfVVNFUik7CisgIGNvbm4tPmRhdGEtPnN0YXRlLmZ0cF90cnlpbmdfYWx0ZXJuYXRpdmUgPSBGQUxTRTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBmdHBfc3RhdGVfcHdkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworCisgIC8qIHNlbmQgUFdEIHRvIGRpc2NvdmVyIG91ciBlbnRyeSBwb2ludCAqLworICBQUFNFTkRGKCZjb25uLT5wcm90by5mdHBjLnBwLCAiUFdEIiwgTlVMTCk7CisgIHN0YXRlKGNvbm4sIEZUUF9QV0QpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyogRm9yIHRoZSBGVFAgInByb3RvY29sIGNvbm5lY3QiIGFuZCAiZG9pbmciIHBoYXNlcyBvbmx5ICovCitzdGF0aWMgaW50IGZ0cF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3sKKyAgcmV0dXJuIEN1cmxfcHBfZ2V0c29jaygmY29ubi0+cHJvdG8uZnRwYy5wcCwgc29ja3MsIG51bXNvY2tzKTsKK30KKworLyogRm9yIHRoZSBGVFAgIkRPX01PUkUiIHBoYXNlIG9ubHkgKi8KK3N0YXRpYyBpbnQgZnRwX2RvbW9yZV9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCit7CisgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOworCisgIGlmKCFudW1zb2NrcykKKyAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKKworICAvKiBXaGVuIGluIERPX01PUkUgc3RhdGUsIHdlIGNvdWxkIGJlIGVpdGhlciB3YWl0aW5nIGZvciB1cyB0byBjb25uZWN0IHRvIGEKKyAgICAgcmVtb3RlIHNpdGUsIG9yIHdlIGNvdWxkIHdhaXQgZm9yIHRoYXQgc2l0ZSB0byBjb25uZWN0IHRvIHVzLiBPciBqdXN0CisgICAgIGhhbmRsZSBvcmRpbmFyeSBjb21tYW5kcy4KKworICAgICBXaGVuIHdhaXRpbmcgZm9yIGEgY29ubmVjdCwgd2Ugd2lsbCBiZSBpbiBGVFBfU1RPUCBzdGF0ZSBhbmQgdGhlbiB3ZSB3YWl0CisgICAgIGZvciB0aGUgc2Vjb25kYXJ5IHNvY2tldCB0byBiZWNvbWUgd3JpdGVhYmxlLiBJZiB3ZSdyZSBpbiBhbm90aGVyIHN0YXRlLAorICAgICB3ZSdyZSBzdGlsbCBoYW5kbGluZyBjb21tYW5kcyBvbiB0aGUgY29udHJvbCAocHJpbWFyeSkgY29ubmVjdGlvbi4KKworICAqLworCisgIHN3aXRjaChmdHBjLT5zdGF0ZSkgeworICBjYXNlIEZUUF9TVE9QOgorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLmZ0cGMucHAsIHNvY2tzLCBudW1zb2Nrcyk7CisgIH0KKworICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXTsKKyAgaWYoZnRwYy0+d2FpdF9kYXRhX2Nvbm4pIHsKKyAgICBzb2Nrc1sxXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICAgIHJldHVybiBHRVRTT0NLX1JFQURTT0NLKDApIHwgR0VUU09DS19SRUFEU09DSygxKTsKKyAgfQorCisgIHJldHVybiBHRVRTT0NLX1JFQURTT0NLKDApOworfQorCisvKiBUaGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgRlRQX1FVT1RFIHN0YXRlIGlzIHBhc3NlZC4KKworICAgZnRwX3N0YXRlX2N3ZCgpIHNlbmRzIHRoZSByYW5nZSBvZiBDV0QgY29tbWFuZHMgdG8gdGhlIHNlcnZlciB0byBjaGFuZ2UgdG8KKyAgIHRoZSBjb3JyZWN0IGRpcmVjdG9yeS4gSXQgbWF5IGFsc28gbmVlZCB0byBzZW5kIE1LRCBjb21tYW5kcyB0byBjcmVhdGUKKyAgIG1pc3Npbmcgb25lcywgaWYgdGhhdCBvcHRpb24gaXMgZW5hYmxlZC4KKyovCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3N0YXRlX2N3ZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKworICBpZihmdHBjLT5jd2Rkb25lKQorICAgIC8qIGFscmVhZHkgZG9uZSBhbmQgZmluZSAqLworICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9wb3N0X2N3ZChjb25uKTsKKyAgZWxzZSB7CisgICAgZnRwYy0+Y291bnQyID0gMDsgLyogY291bnQyIGNvdW50cyBmYWlsZWQgQ1dEcyAqLworCisgICAgLyogY291bnQzIGlzIHNldCB0byBhbGxvdyBhIE1LRCB0byBmYWlsIG9uY2UuIEluIHRoZSBjYXNlIHdoZW4gZmlyc3QgQ1dECisgICAgICAgZmFpbHMgYW5kIHRoZW4gTUtEIGZhaWxzIChkdWUgdG8gYW5vdGhlciBzZXNzaW9uIHJhY2VkIGl0IHRvIGNyZWF0ZSB0aGUKKyAgICAgICBkaXIpIHRoaXMgdGhlbiBhbGxvd3MgZm9yIGEgc2Vjb25kIHRyeSB0byBDV0QgdG8gaXQgKi8KKyAgICBmdHBjLT5jb3VudDMgPSAoY29ubi0+ZGF0YS0+c2V0LmZ0cF9jcmVhdGVfbWlzc2luZ19kaXJzPT0yKT8xOjA7CisKKyAgICBpZihjb25uLT5iaXRzLnJldXNlICYmIGZ0cGMtPmVudHJ5cGF0aCkgeworICAgICAgLyogVGhpcyBpcyBhIHJlLXVzZWQgY29ubmVjdGlvbi4gU2luY2Ugd2UgY2hhbmdlIGRpcmVjdG9yeSB0byB3aGVyZSB0aGUKKyAgICAgICAgIHRyYW5zZmVyIGlzIHRha2luZyBwbGFjZSwgd2UgbXVzdCBmaXJzdCBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgZGlyCisgICAgICAgICB3aGVyZSB3ZSBlbmRlZCB1cCBhZnRlciBsb2dpbjogKi8KKyAgICAgIGZ0cGMtPmNvdW50MSA9IDA7IC8qIHdlIGNvdW50IHRoaXMgYXMgdGhlIGZpcnN0IHBhdGgsIHRoZW4gd2UgYWRkIG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIHVwY29taW5nIG9uZXMgaW4gdGhlIGZ0cC0+ZGlyc1tdIGFycmF5ICovCisgICAgICBQUFNFTkRGKCZjb25uLT5wcm90by5mdHBjLnBwLCAiQ1dEICVzIiwgZnRwYy0+ZW50cnlwYXRoKTsKKyAgICAgIHN0YXRlKGNvbm4sIEZUUF9DV0QpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmKGZ0cGMtPmRpcmRlcHRoKSB7CisgICAgICAgIGZ0cGMtPmNvdW50MSA9IDE7CisgICAgICAgIC8qIGlzc3VlIHRoZSBmaXJzdCBDV0QsIHRoZSByZXN0IGlzIHNlbnQgd2hlbiB0aGUgQ1dEIHJlc3BvbnNlcyBhcmUKKyAgICAgICAgICAgcmVjZWl2ZWQuLi4gKi8KKyAgICAgICAgUFBTRU5ERigmY29ubi0+cHJvdG8uZnRwYy5wcCwgIkNXRCAlcyIsIGZ0cGMtPmRpcnNbZnRwYy0+Y291bnQxIC0xXSk7CisgICAgICAgIHN0YXRlKGNvbm4sIEZUUF9DV0QpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIE5vIENXRCBuZWNlc3NhcnkgKi8KKyAgICAgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3Bvc3RfY3dkKGNvbm4pOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCit0eXBlZGVmIGVudW0geworICBFUFJULAorICBQT1JULAorICBET05FCit9IGZ0cHBvcnQ7CisKK3N0YXRpYyBDVVJMY29kZSBmdHBfc3RhdGVfdXNlX3BvcnQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBwb3J0IGZjbWQpIC8qIHN0YXJ0IHdpdGggdGhpcyAqLworCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9Y29ubi0+ZGF0YTsKKyAgY3VybF9zb2NrZXRfdCBwb3J0c29jaz0gQ1VSTF9TT0NLRVRfQkFEOworICBjaGFyIG15aG9zdFsyNTZdID0gIiI7CisKKyAgc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSBzczsKKyAgQ3VybF9hZGRyaW5mbyAqcmVzLCAqYWk7CisgIGN1cmxfc29ja2xlbl90IHNzbGVuOworICBjaGFyIGhidWZbTklfTUFYSE9TVF07CisgIHN0cnVjdCBzb2NrYWRkciAqc2E9KHN0cnVjdCBzb2NrYWRkciAqKSZzczsKKyAgc3RydWN0IHNvY2thZGRyX2luICogY29uc3Qgc2E0ID0gKHZvaWQgKilzYTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICogY29uc3Qgc2E2ID0gKHZvaWQgKilzYTsKKyNlbmRpZgorICBjaGFyIHRtcFsxMDI0XTsKKyAgc3RhdGljIGNvbnN0IGNoYXIgbW9kZVtdWzVdID0geyAiRVBSVCIsICJQT1JUIiB9OworICBpbnQgcmM7CisgIGludCBlcnJvcjsKKyAgY2hhciAqaG9zdCA9IE5VTEw7CisgIGNoYXIgKnN0cmluZ19mdHBwb3J0ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfRlRQUE9SVF07CisgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqaD1OVUxMOworICB1bnNpZ25lZCBzaG9ydCBwb3J0X21pbiA9IDA7CisgIHVuc2lnbmVkIHNob3J0IHBvcnRfbWF4ID0gMDsKKyAgdW5zaWduZWQgc2hvcnQgcG9ydDsKKyAgYm9vbCBwb3NzaWJseV9ub25fbG9jYWwgPSBUUlVFOworCisgIGNoYXIgKmFkZHIgPSBOVUxMOworCisgIC8qIFN0ZXAgMSwgZmlndXJlIG91dCB3aGF0IGlzIHJlcXVlc3RlZCwKKyAgICogYWNjZXB0ZWQgZm9ybWF0IDoKKyAgICogKGlwdjR8aXB2Nnxkb21haW58aW50ZXJmYWNlKT8oOnBvcnQoLXJhbmdlKT8pPworICAgKi8KKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19GVFBQT1JUXSAmJgorICAgICAoc3RybGVuKGRhdGEtPnNldC5zdHJbU1RSSU5HX0ZUUFBPUlRdKSA+IDEpKSB7CisKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIHNpemVfdCBhZGRybGVuID0gSU5FVDZfQUREUlNUUkxFTiA+IHN0cmxlbihzdHJpbmdfZnRwcG9ydCkgPworICAgICAgSU5FVDZfQUREUlNUUkxFTiA6IHN0cmxlbihzdHJpbmdfZnRwcG9ydCk7CisjZWxzZQorICAgIHNpemVfdCBhZGRybGVuID0gSU5FVF9BRERSU1RSTEVOID4gc3RybGVuKHN0cmluZ19mdHBwb3J0KSA/CisgICAgICBJTkVUX0FERFJTVFJMRU4gOiBzdHJsZW4oc3RyaW5nX2Z0cHBvcnQpOworI2VuZGlmCisgICAgY2hhciAqaXBfc3RhcnQgPSBzdHJpbmdfZnRwcG9ydDsKKyAgICBjaGFyICppcF9lbmQgPSBOVUxMOworICAgIGNoYXIgKnBvcnRfc3RhcnQgPSBOVUxMOworICAgIGNoYXIgKnBvcnRfc2VwID0gTlVMTDsKKworICAgIGFkZHIgPSBjYWxsb2MoYWRkcmxlbisxLCAxKTsKKyAgICBpZighYWRkcikKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBpZigqc3RyaW5nX2Z0cHBvcnQgPT0gJ1snKSB7CisgICAgICAvKiBbaXB2Nl06cG9ydCgtcmFuZ2UpICovCisgICAgICBpcF9zdGFydCA9IHN0cmluZ19mdHBwb3J0ICsgMTsKKyAgICAgIGlmKChpcF9lbmQgPSBzdHJjaHIoc3RyaW5nX2Z0cHBvcnQsICddJykpICE9IE5VTEwgKQorICAgICAgICBzdHJuY3B5KGFkZHIsIGlwX3N0YXJ0LCBpcF9lbmQgLSBpcF9zdGFydCk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgICAgaWYoKnN0cmluZ19mdHBwb3J0ID09ICc6JykgeworICAgICAgICAvKiA6cG9ydCAqLworICAgICAgICBpcF9lbmQgPSBzdHJpbmdfZnRwcG9ydDsKKyAgICB9CisgICAgZWxzZSBpZigoaXBfZW5kID0gc3RyY2hyKHN0cmluZ19mdHBwb3J0LCAnOicpKSAhPSBOVUxMKSB7CisgICAgICAgIC8qIGVpdGhlciBpcHY2IG9yIChpcHY0fGRvbWFpbnxpbnRlcmZhY2UpOnBvcnQoLXJhbmdlKSAqLworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgc3RyaW5nX2Z0cHBvcnQsIHNhNikgPT0gMSkgeworICAgICAgICAvKiBpcHY2ICovCisgICAgICAgIHBvcnRfbWluID0gcG9ydF9tYXggPSAwOworICAgICAgICBzdHJjcHkoYWRkciwgc3RyaW5nX2Z0cHBvcnQpOworICAgICAgICBpcF9lbmQgPSBOVUxMOyAvKiB0aGlzIGdvdCBubyBwb3J0ICEgKi8KKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAvKiAoaXB2NHxkb21haW58aW50ZXJmYWNlKTpwb3J0KC1yYW5nZSkgKi8KKyAgICAgICAgc3RybmNweShhZGRyLCBzdHJpbmdfZnRwcG9ydCwgaXBfZW5kIC0gaXBfc3RhcnQgKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgLyogaXB2NHxpbnRlcmZhY2UgKi8KKyAgICAgIHN0cmNweShhZGRyLCBzdHJpbmdfZnRwcG9ydCk7CisKKyAgICAvKiBwYXJzZSB0aGUgcG9ydCAqLworICAgIGlmKGlwX2VuZCAhPSBOVUxMKSB7CisgICAgICBpZigocG9ydF9zdGFydCA9IHN0cmNocihpcF9lbmQsICc6JykpICE9IE5VTEwpIHsKKyAgICAgICAgcG9ydF9taW4gPSBjdXJseF91bHRvdXMoc3RydG91bChwb3J0X3N0YXJ0KzEsIE5VTEwsIDEwKSk7CisgICAgICAgIGlmKChwb3J0X3NlcCA9IHN0cmNocihwb3J0X3N0YXJ0LCAnLScpKSAhPSBOVUxMKSB7CisgICAgICAgICAgcG9ydF9tYXggPSBjdXJseF91bHRvdXMoc3RydG91bChwb3J0X3NlcCArIDEsIE5VTEwsIDEwKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHBvcnRfbWF4ID0gcG9ydF9taW47CisgICAgICB9CisgICAgfQorCisgICAgLyogY29ycmVjdCBlcnJvcnMgbGlrZToKKyAgICAgKiAgOjEyMzQtMTIzMAorICAgICAqICA6LTQ3MTEgLCBpbiB0aGlzIGNhc2UgcG9ydF9taW4gaXMgKHVuc2lnbmVkKS0xLAorICAgICAqICAgICAgICAgICB0aGVyZWZvcmUgcG9ydF9taW4gPiBwb3J0X21heCBmb3IgYWxsIGNhc2VzCisgICAgICogICAgICAgICAgIGJ1dCBwb3J0X21heCA9ICh1bnNpZ25lZCktMQorICAgICAqLworICAgIGlmKHBvcnRfbWluID4gcG9ydF9tYXggKQorICAgICAgcG9ydF9taW4gPSBwb3J0X21heCA9IDA7CisKKworICAgIGlmKCphZGRyICE9ICdcMCcpIHsKKyAgICAgIC8qIGF0dGVtcHQgdG8gZ2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBnaXZlbiBpbnRlcmZhY2UgbmFtZSAqLworICAgICAgaWYoIUN1cmxfaWYyaXAoY29ubi0+aXBfYWRkci0+YWlfZmFtaWx5LCBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgaGJ1Ziwgc2l6ZW9mKGhidWYpKSkKKyAgICAgICAgLyogbm90IGFuIGludGVyZmFjZSwgdXNlIHRoZSBnaXZlbiBzdHJpbmcgYXMgaG9zdCBuYW1lIGluc3RlYWQgKi8KKyAgICAgICAgaG9zdCA9IGFkZHI7CisgICAgICBlbHNlCisgICAgICAgIGhvc3QgPSBoYnVmOyAvKiB1c2UgdGhlIGhidWYgZm9yIGhvc3QgbmFtZSAqLworICAgIH0KKyAgICBlbHNlCisgICAgICAvKiB0aGVyZSB3YXMgb25seSBhIHBvcnQoLXJhbmdlKSBnaXZlbiwgZGVmYXVsdCB0aGUgaG9zdCAqLworICAgICAgaG9zdCA9IE5VTEw7CisgIH0gLyogZGF0YS0+c2V0LmZ0cHBvcnQgKi8KKworICBpZighaG9zdCkgeworICAgIC8qIG5vdCBhbiBpbnRlcmZhY2UgYW5kIG5vdCBhIGhvc3QgbmFtZSwgZ2V0IGRlZmF1bHQgYnkgZXh0cmFjdGluZworICAgICAgIHRoZSBJUCBmcm9tIHRoZSBjb250cm9sIGNvbm5lY3Rpb24gKi8KKworICAgIHNzbGVuID0gc2l6ZW9mKHNzKTsKKyAgICBpZihnZXRzb2NrbmFtZShjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSwgc2EsICZzc2xlbikpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJnZXRzb2NrbmFtZSgpIGZhaWxlZDogJXMiLAorICAgICAgICAgIEN1cmxfc3RyZXJyb3IoY29ubiwgU09DS0VSUk5PKSApOworICAgICAgQ3VybF9zYWZlZnJlZShhZGRyKTsKKyAgICAgIHJldHVybiBDVVJMRV9GVFBfUE9SVF9GQUlMRUQ7CisgICAgfQorICAgIHN3aXRjaChzYS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgQ3VybF9pbmV0X250b3Aoc2EtPnNhX2ZhbWlseSwgJnNhNi0+c2luNl9hZGRyLCBoYnVmLCBzaXplb2YoaGJ1ZikpOworICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgQ3VybF9pbmV0X250b3Aoc2EtPnNhX2ZhbWlseSwgJnNhNC0+c2luX2FkZHIsIGhidWYsIHNpemVvZihoYnVmKSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaG9zdCA9IGhidWY7IC8qIHVzZSB0aGlzIGhvc3QgbmFtZSAqLworICAgIHBvc3NpYmx5X25vbl9sb2NhbCA9IEZBTFNFOyAvKiB3ZSBrbm93IGl0IGlzIGxvY2FsIG5vdyAqLworICB9CisKKyAgLyogcmVzb2x2IGlwL2hvc3QgdG8gaXAgKi8KKyAgcmMgPSBDdXJsX3Jlc29sdihjb25uLCBob3N0LCAwLCAmaCk7CisgIGlmKHJjID09IENVUkxSRVNPTFZfUEVORElORykKKyAgICAodm9pZClDdXJsX3Jlc29sdmVyX3dhaXRfcmVzb2x2KGNvbm4sICZoKTsKKyAgaWYoaCkgeworICAgIHJlcyA9IGgtPmFkZHI7CisgICAgLyogd2hlbiB3ZSByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCB3ZSBjYW4gZm9yZ2V0IGFib3V0IHRoaXMgZW50cnkKKyAgICAgICB0byB3ZSBjYW4gdW5sb2NrIGl0IG5vdyBhbHJlYWR5ICovCisgICAgQ3VybF9yZXNvbHZfdW5sb2NrKGRhdGEsIGgpOworICB9IC8qIChoKSAqLworICBlbHNlCisgICAgcmVzID0gTlVMTDsgLyogZmFpbHVyZSEgKi8KKworICBpZihyZXMgPT0gTlVMTCkgeworICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgdG8gcmVzb2x2ZSB0aGUgYWRkcmVzcyBwcm92aWRlZCB0byBQT1JUOiAlcyIsIGhvc3QpOworICAgIEN1cmxfc2FmZWZyZWUoYWRkcik7CisgICAgcmV0dXJuIENVUkxFX0ZUUF9QT1JUX0ZBSUxFRDsKKyAgfQorCisgIEN1cmxfc2FmZWZyZWUoYWRkcik7CisgIGhvc3QgPSBOVUxMOworCisgIC8qIHN0ZXAgMiwgY3JlYXRlIGEgc29ja2V0IGZvciB0aGUgcmVxdWVzdGVkIGFkZHJlc3MgKi8KKworICBwb3J0c29jayA9IENVUkxfU09DS0VUX0JBRDsKKyAgZXJyb3IgPSAwOworICBmb3IoYWkgPSByZXM7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7CisgICAgcmVzdWx0ID0gQ3VybF9zb2NrZXQoY29ubiwgYWksIE5VTEwsICZwb3J0c29jayk7CisgICAgaWYocmVzdWx0KSB7CisgICAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBicmVhazsKKyAgfQorICBpZighYWkpIHsKKyAgICBmYWlsZihkYXRhLCAic29ja2V0IGZhaWx1cmU6ICVzIiwgQ3VybF9zdHJlcnJvcihjb25uLCBlcnJvcikpOworICAgIHJldHVybiBDVVJMRV9GVFBfUE9SVF9GQUlMRUQ7CisgIH0KKworICAvKiBzdGVwIDMsIGJpbmQgdG8gYSBzdWl0YWJsZSBsb2NhbCBhZGRyZXNzICovCisKKyAgbWVtY3B5KHNhLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pOworICBzc2xlbiA9IGFpLT5haV9hZGRybGVuOworCisgIGZvcihwb3J0ID0gcG9ydF9taW47IHBvcnQgPD0gcG9ydF9tYXg7KSB7CisgICAgaWYoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgc2E0LT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgZWxzZQorICAgICAgc2E2LT5zaW42X3BvcnQgPSBodG9ucyhwb3J0KTsKKyNlbmRpZgorICAgIC8qIFRyeSBiaW5kaW5nIHRoZSBnaXZlbiBhZGRyZXNzLiAqLworICAgIGlmKGJpbmQocG9ydHNvY2ssIHNhLCBzc2xlbikgKSB7CisgICAgICAvKiBJdCBmYWlsZWQuICovCisgICAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICAgIGlmKHBvc3NpYmx5X25vbl9sb2NhbCAmJiAoZXJyb3IgPT0gRUFERFJOT1RBVkFJTCkpIHsKKyAgICAgICAgLyogVGhlIHJlcXVlc3RlZCBiaW5kIGFkZHJlc3MgaXMgbm90IGxvY2FsLiAgVXNlIHRoZSBhZGRyZXNzIHVzZWQgZm9yCisgICAgICAgICAqIHRoZSBjb250cm9sIGNvbm5lY3Rpb24gaW5zdGVhZCBhbmQgcmVzdGFydCB0aGUgcG9ydCBsb29wCisgICAgICAgICAqLworCisgICAgICAgIGluZm9mKGRhdGEsICJiaW5kKHBvcnQ9JWh1KSBvbiBub24tbG9jYWwgYWRkcmVzcyBmYWlsZWQ6ICVzXG4iLCBwb3J0LAorICAgICAgICAgICAgICBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSApOworCisgICAgICAgIHNzbGVuID0gc2l6ZW9mKHNzKTsKKyAgICAgICAgaWYoZ2V0c29ja25hbWUoY29ubi0+c29ja1tGSVJTVFNPQ0tFVF0sIHNhLCAmc3NsZW4pKSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgImdldHNvY2tuYW1lKCkgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgQ3VybF9zdHJlcnJvcihjb25uLCBTT0NLRVJSTk8pICk7CisgICAgICAgICAgQ3VybF9jbG9zZXNvY2tldChjb25uLCBwb3J0c29jayk7CisgICAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9QT1JUX0ZBSUxFRDsKKyAgICAgICAgfQorICAgICAgICBwb3J0ID0gcG9ydF9taW47CisgICAgICAgIHBvc3NpYmx5X25vbl9sb2NhbCA9IEZBTFNFOyAvKiBkb24ndCB0cnkgdGhpcyBhZ2FpbiAqLworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoZXJyb3IgIT0gRUFERFJJTlVTRSAmJiBlcnJvciAhPSBFQUNDRVMpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgImJpbmQocG9ydD0laHUpIGZhaWxlZDogJXMiLCBwb3J0LAorICAgICAgICAgICAgICBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSApOworICAgICAgICBDdXJsX2Nsb3Nlc29ja2V0KGNvbm4sIHBvcnRzb2NrKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9QT1JUX0ZBSUxFRDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgYnJlYWs7CisKKyAgICBwb3J0Kys7CisgIH0KKworICAvKiBtYXliZSBhbGwgcG9ydHMgd2VyZSBpbiB1c2UgYWxyZWFkeSovCisgIGlmKHBvcnQgPiBwb3J0X21heCkgeworICAgIGZhaWxmKGRhdGEsICJiaW5kKCkgZmFpbGVkLCB3ZSByYW4gb3V0IG9mIHBvcnRzISIpOworICAgIEN1cmxfY2xvc2Vzb2NrZXQoY29ubiwgcG9ydHNvY2spOworICAgIHJldHVybiBDVVJMRV9GVFBfUE9SVF9GQUlMRUQ7CisgIH0KKworICAvKiBnZXQgdGhlIG5hbWUgYWdhaW4gYWZ0ZXIgdGhlIGJpbmQoKSBzbyB0aGF0IHdlIGNhbiBleHRyYWN0IHRoZQorICAgICBwb3J0IG51bWJlciBpdCB1c2VzIG5vdyAqLworICBzc2xlbiA9IHNpemVvZihzcyk7CisgIGlmKGdldHNvY2tuYW1lKHBvcnRzb2NrLCAoc3RydWN0IHNvY2thZGRyICopc2EsICZzc2xlbikpIHsKKyAgICBmYWlsZihkYXRhLCAiZ2V0c29ja25hbWUoKSBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICBDdXJsX3N0cmVycm9yKGNvbm4sIFNPQ0tFUlJOTykgKTsKKyAgICBDdXJsX2Nsb3Nlc29ja2V0KGNvbm4sIHBvcnRzb2NrKTsKKyAgICByZXR1cm4gQ1VSTEVfRlRQX1BPUlRfRkFJTEVEOworICB9CisKKyAgLyogc3RlcCA0LCBsaXN0ZW4gb24gdGhlIHNvY2tldCAqLworCisgIGlmKGxpc3Rlbihwb3J0c29jaywgMSkpIHsKKyAgICBmYWlsZihkYXRhLCAic29ja2V0IGZhaWx1cmU6ICVzIiwgQ3VybF9zdHJlcnJvcihjb25uLCBTT0NLRVJSTk8pKTsKKyAgICBDdXJsX2Nsb3Nlc29ja2V0KGNvbm4sIHBvcnRzb2NrKTsKKyAgICByZXR1cm4gQ1VSTEVfRlRQX1BPUlRfRkFJTEVEOworICB9CisKKyAgLyogc3RlcCA1LCBzZW5kIHRoZSBwcm9wZXIgRlRQIGNvbW1hbmQgKi8KKworICAvKiBnZXQgYSBwbGFpbiBwcmludGFibGUgdmVyc2lvbiBvZiB0aGUgbnVtZXJpY2FsIGFkZHJlc3MgdG8gd29yayB3aXRoCisgICAgIGJlbG93ICovCisgIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoYWksIG15aG9zdCwgc2l6ZW9mKG15aG9zdCkpOworCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgaWYoIWNvbm4tPmJpdHMuZnRwX3VzZV9lcHJ0ICYmIGNvbm4tPmJpdHMuaXB2NikKKyAgICAvKiBFUFJUIGlzIGRpc2FibGVkIGJ1dCB3ZSBhcmUgY29ubmVjdGVkIHRvIGEgSVB2NiBob3N0LCBzbyB3ZSBpZ25vcmUgdGhlCisgICAgICAgcmVxdWVzdCBhbmQgZW5hYmxlIEVQUlQgYWdhaW4hICovCisgICAgY29ubi0+Yml0cy5mdHBfdXNlX2VwcnQgPSBUUlVFOworI2VuZGlmCisKKyAgZm9yKDsgZmNtZCAhPSBET05FOyBmY21kKyspIHsKKworICAgIGlmKCFjb25uLT5iaXRzLmZ0cF91c2VfZXBydCAmJiAoRVBSVCA9PSBmY21kKSkKKyAgICAgIC8qIGlmIGRpc2FibGVkLCBnb3RvIG5leHQgKi8KKyAgICAgIGNvbnRpbnVlOworCisgICAgaWYoKFBPUlQgPT0gZmNtZCkgJiYgc2EtPnNhX2ZhbWlseSAhPSBBRl9JTkVUKQorICAgICAgLyogUE9SVCBpcyBpcHY0IG9ubHkgKi8KKyAgICAgIGNvbnRpbnVlOworCisgICAgc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisgICAgY2FzZSBBRl9JTkVUOgorICAgICAgcG9ydCA9IG50b2hzKHNhNC0+c2luX3BvcnQpOworICAgICAgYnJlYWs7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgcG9ydCA9IG50b2hzKHNhNi0+c2luNl9wb3J0KTsKKyAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgIGNvbnRpbnVlOyAvKiBtaWdodCBhcyB3ZWxsIHNraXAgdGhpcyAqLworICAgIH0KKworICAgIGlmKEVQUlQgPT0gZmNtZCkgeworICAgICAgLyoKKyAgICAgICAqIFR3byBmaW5lIGV4YW1wbGVzIGZyb20gUkZDMjQyODsKKyAgICAgICAqCisgICAgICAgKiBFUFJUIHwxfDEzMi4yMzUuMS4yfDYyNzV8CisgICAgICAgKgorICAgICAgICogRVBSVCB8MnwxMDgwOjo4OjgwMDoyMDBDOjQxN0F8NTI4MnwKKyAgICAgICAqLworCisgICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZmdHBjLT5wcCwgIiVzIHwlZHwlc3wlaHV8IiwgbW9kZVtmY21kXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUPzE6MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlob3N0LCBwb3J0KTsKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBzZW5kaW5nIEVQUlQgY29tbWFuZDogJXMiLAorICAgICAgICAgICAgICBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzdWx0KSk7CisgICAgICAgIEN1cmxfY2xvc2Vzb2NrZXQoY29ubiwgcG9ydHNvY2spOworICAgICAgICAvKiBkb24ndCByZXRyeSB1c2luZyBQT1JUICovCisgICAgICAgIGZ0cGMtPmNvdW50MSA9IFBPUlQ7CisgICAgICAgIC8qIGJhaWwgb3V0ICovCisgICAgICAgIHN0YXRlKGNvbm4sIEZUUF9TVE9QKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBlbHNlIGlmKFBPUlQgPT0gZmNtZCkgeworICAgICAgY2hhciAqc291cmNlID0gbXlob3N0OworICAgICAgY2hhciAqZGVzdCA9IHRtcDsKKworICAgICAgLyogdHJhbnNsYXRlIHgueC54LnggdG8geCx4LHgseCAqLworICAgICAgd2hpbGUoc291cmNlICYmICpzb3VyY2UpIHsKKyAgICAgICAgaWYoKnNvdXJjZSA9PSAnLicpCisgICAgICAgICAgKmRlc3Q9JywnOworICAgICAgICBlbHNlCisgICAgICAgICAgKmRlc3QgPSAqc291cmNlOworICAgICAgICBkZXN0Kys7CisgICAgICAgIHNvdXJjZSsrOworICAgICAgfQorICAgICAgKmRlc3QgPSAwOworICAgICAgc25wcmludGYoZGVzdCwgMjAsICIsJWQsJWQiLCAoaW50KShwb3J0Pj44KSwgKGludCkocG9ydCYweGZmKSk7CisKKyAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmZ0cGMtPnBwLCAiJXMgJXMiLCBtb2RlW2ZjbWRdLCB0bXApOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlIHNlbmRpbmcgUE9SVCBjb21tYW5kOiAlcyIsCisgICAgICAgICAgICAgIGN1cmxfZWFzeV9zdHJlcnJvcihyZXN1bHQpKTsKKyAgICAgICAgQ3VybF9jbG9zZXNvY2tldChjb25uLCBwb3J0c29jayk7CisgICAgICAgIC8qIGJhaWwgb3V0ICovCisgICAgICAgIHN0YXRlKGNvbm4sIEZUUF9TVE9QKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIC8qIHN0b3JlIHdoaWNoIGNvbW1hbmQgd2FzIHNlbnQgKi8KKyAgZnRwYy0+Y291bnQxID0gZmNtZDsKKworICAvKiB3ZSBzZXQgdGhlIHNlY29uZGFyeSBzb2NrZXQgdmFyaWFibGUgdG8gdGhpcyBmb3Igbm93LCBpdCBpcyBvbmx5IHNvIHRoYXQKKyAgICAgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBjbG9zZSBpdCBpbiBjYXNlIHdlIGZhaWwgYmVmb3JlIHRoZSB0cnVlCisgICAgIHNlY29uZGFyeSBzdHVmZiBpcyBtYWRlICovCisgIGlmKENVUkxfU09DS0VUX0JBRCAhPSBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pCisgICAgQ3VybF9jbG9zZXNvY2tldChjb25uLCBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pOworICBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0gPSBwb3J0c29jazsKKworICAvKiB0aGlzIHRjcGNvbm5lY3QgYXNzaWdubWVudCBiZWxvdyBpcyBhIGhhY2tpc2ggd29yay1hcm91bmQgdG8gbWFrZSB0aGUKKyAgICAgbXVsdGkgaW50ZXJmYWNlIHdpdGggYWN0aXZlIEZUUCB3b3JrIC0gYXMgaXQgd2lsbCBub3Qgd2FpdCBmb3IgYQorICAgICAocGFzc2l2ZSkgY29ubmVjdCBpbiBDdXJsX2lzX2Nvbm5lY3RlZCgpLgorCisgICAgIFRoZSAqcHJvcGVyKiBmaXggaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGFjdGl2ZSBjb25uZWN0aW9uIGZyb20gdGhlCisgICAgIHNlcnZlciBpcyBkb25lIGluIGEgbm9uLWJsb2NraW5nIHdheS4gQ3VycmVudGx5LCBpdCBpcyBzdGlsbCBCTE9DS0lORy4KKyAgKi8KKyAgY29ubi0+Yml0cy50Y3Bjb25uZWN0W1NFQ09OREFSWVNPQ0tFVF0gPSBUUlVFOworCisgIHN0YXRlKGNvbm4sIEZUUF9QT1JUKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV91c2VfcGFzdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgLyoKKyAgICBIZXJlJ3MgdGhlIGV4Y2VjdXRpdmUgc3VtbWFyeSBvbiB3aGF0IHRvIGRvOgorCisgICAgUEFTViBpcyBSRkM5NTksIGV4cGVjdDoKKyAgICAyMjcgRW50ZXJpbmcgUGFzc2l2ZSBNb2RlIChhMSxhMixhMyxhNCxwMSxwMikKKworICAgIExQU1YgaXMgUkZDMTYzOSwgZXhwZWN0OgorICAgIDIyOCBFbnRlcmluZyBMb25nIFBhc3NpdmUgTW9kZSAoNCw0LGExLGEyLGEzLGE0LDIscDEscDIpCisKKyAgICBFUFNWIGlzIFJGQzI0MjgsIGV4cGVjdDoKKyAgICAyMjkgRW50ZXJpbmcgRXh0ZW5kZWQgUGFzc2l2ZSBNb2RlICh8fHxwb3J0fCkKKworICAqLworCisgIHN0YXRpYyBjb25zdCBjaGFyIG1vZGVbXVs1XSA9IHsgIkVQU1YiLCAiUEFTViIgfTsKKyAgaW50IG1vZGVvZmY7CisKKyNpZmRlZiBQRl9JTkVUNgorICBpZighY29ubi0+Yml0cy5mdHBfdXNlX2Vwc3YgJiYgY29ubi0+Yml0cy5pcHY2KQorICAgIC8qIEVQU1YgaXMgZGlzYWJsZWQgYnV0IHdlIGFyZSBjb25uZWN0ZWQgdG8gYSBJUHY2IGhvc3QsIHNvIHdlIGlnbm9yZSB0aGUKKyAgICAgICByZXF1ZXN0IGFuZCBlbmFibGUgRVBTViBhZ2FpbiEgKi8KKyAgICBjb25uLT5iaXRzLmZ0cF91c2VfZXBzdiA9IFRSVUU7CisjZW5kaWYKKworICBtb2Rlb2ZmID0gY29ubi0+Yml0cy5mdHBfdXNlX2Vwc3Y/MDoxOworCisgIFBQU0VOREYoJmZ0cGMtPnBwLCAiJXMiLCBtb2RlW21vZGVvZmZdKTsKKworICBmdHBjLT5jb3VudDEgPSBtb2Rlb2ZmOworICBzdGF0ZShjb25uLCBGVFBfUEFTVik7CisgIGluZm9mKGNvbm4tPmRhdGEsICJDb25uZWN0IGRhdGEgc3RyZWFtIHBhc3NpdmVseVxuIik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogUkVTVCBpcyB0aGUgbGFzdCBjb21tYW5kIGluIHRoZSBjaGFpbiBvZiBjb21tYW5kcyB3aGVuIGEgImhlYWQiLWxpa2UKKyAgIHJlcXVlc3QgaXMgbWFkZS4gVGh1cywgaWYgYW4gYWN0dWFsIHRyYW5zZmVyIGlzIHRvIGJlIG1hZGUgdGhpcyBpcyB3aGVyZQorICAgd2UgdGFrZSBvZmYgZm9yIHJlYWwuICovCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3N0YXRlX3Bvc3RfcmVzdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgRlRQICpmdHAgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5mdHA7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICBpZihmdHAtPnRyYW5zZmVyICE9IEZUUFRSQU5TRkVSX0JPRFkpIHsKKyAgICAvKiBkb2Vzbid0IHRyYW5zZmVyIGFueSBkYXRhICovCisKKyAgICAvKiBzdGlsbCBwb3NzaWJseSBkbyBQUkUgUVVPVEUgam9icyAqLworICAgIHN0YXRlKGNvbm4sIEZUUF9SRVRSX1BSRVFVT1RFKTsKKyAgICByZXN1bHQgPSBmdHBfc3RhdGVfcXVvdGUoY29ubiwgVFJVRSwgRlRQX1JFVFJfUFJFUVVPVEUpOworICB9CisgIGVsc2UgaWYoZGF0YS0+c2V0LmZ0cF91c2VfcG9ydCkgeworICAgIC8qIFdlIGhhdmUgY2hvc2VuIHRvIHVzZSB0aGUgUE9SVCAob3Igc2ltaWxhcikgY29tbWFuZCAqLworICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV91c2VfcG9ydChjb25uLCBFUFJUKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBXZSBoYXZlIGNob3NlbiAodGhpcyBpcyBkZWZhdWx0KSB0byB1c2UgdGhlIFBBU1YgKG9yIHNpbWlsYXIpIGNvbW1hbmQgKi8KKyAgICBpZihkYXRhLT5zZXQuZnRwX3VzZV9wcmV0KSB7CisgICAgICAvKiBUaGUgdXNlciBoYXMgcmVxdWVzdGVkIHRoYXQgd2Ugc2VuZCBhIFBSRVQgY29tbWFuZAorICAgICAgICAgdG8gcHJlcGFyZSB0aGUgc2VydmVyIGZvciB0aGUgdXBjb21pbmcgUEFTViAqLworICAgICAgaWYoIWNvbm4tPnByb3RvLmZ0cGMuZmlsZSkgeworICAgICAgICBQUFNFTkRGKCZjb25uLT5wcm90by5mdHBjLnBwLCAiUFJFVCAlcyIsCisgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ1VTVE9NUkVRVUVTVF0/CisgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ1VTVE9NUkVRVUVTVF06CisgICAgICAgICAgICAgICAgKGRhdGEtPnNldC5mdHBfbGlzdF9vbmx5PyJOTFNUIjoiTElTVCIpKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoZGF0YS0+c2V0LnVwbG9hZCkgeworICAgICAgICBQUFNFTkRGKCZjb25uLT5wcm90by5mdHBjLnBwLCAiUFJFVCBTVE9SICVzIiwgY29ubi0+cHJvdG8uZnRwYy5maWxlKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBQUFNFTkRGKCZjb25uLT5wcm90by5mdHBjLnBwLCAiUFJFVCBSRVRSICVzIiwgY29ubi0+cHJvdG8uZnRwYy5maWxlKTsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIEZUUF9QUkVUKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZXN1bHQgPSBmdHBfc3RhdGVfdXNlX3Bhc3YoY29ubik7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBmdHBfc3RhdGVfcG9zdF9zaXplKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBGVFAgKmZ0cCA9IGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLmZ0cDsKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisKKyAgaWYoKGZ0cC0+dHJhbnNmZXIgIT0gRlRQVFJBTlNGRVJfQk9EWSkgJiYgZnRwYy0+ZmlsZSkgeworICAgIC8qIGlmIGEgImhlYWQiLWxpa2UgcmVxdWVzdCBpcyBiZWluZyBtYWRlIChvbiBhIGZpbGUpICovCisKKyAgICAvKiBEZXRlcm1pbmUgaWYgc2VydmVyIGNhbiByZXNwb25kIHRvIFJFU1QgY29tbWFuZCBhbmQgdGhlcmVmb3JlCisgICAgICAgd2hldGhlciBpdCBzdXBwb3J0cyByYW5nZSAqLworICAgIFBQU0VOREYoJmNvbm4tPnByb3RvLmZ0cGMucHAsICJSRVNUICVkIiwgMCk7CisKKyAgICBzdGF0ZShjb25uLCBGVFBfUkVTVCk7CisgIH0KKyAgZWxzZQorICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9wb3N0X3Jlc3QoY29ubik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9wb3N0X3R5cGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEZUUCAqZnRwID0gY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8uZnRwOworICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKworICBpZigoZnRwLT50cmFuc2ZlciA9PSBGVFBUUkFOU0ZFUl9JTkZPKSAmJiBmdHBjLT5maWxlKSB7CisgICAgLyogaWYgYSAiaGVhZCItbGlrZSByZXF1ZXN0IGlzIGJlaW5nIG1hZGUgKG9uIGEgZmlsZSkgKi8KKworICAgIC8qIHdlIGtub3cgZnRwYy0+ZmlsZSBpcyBhIHZhbGlkIHBvaW50ZXIgdG8gYSBmaWxlIG5hbWUgKi8KKyAgICBQUFNFTkRGKCZmdHBjLT5wcCwgIlNJWkUgJXMiLCBmdHBjLT5maWxlKTsKKworICAgIHN0YXRlKGNvbm4sIEZUUF9TSVpFKTsKKyAgfQorICBlbHNlCisgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3Bvc3Rfc2l6ZShjb25uKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3N0YXRlX3Bvc3RfbGlzdHR5cGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIC8qIElmIHRoaXMgb3V0cHV0IGlzIHRvIGJlIG1hY2hpbmUtcGFyc2VkLCB0aGUgTkxTVCBjb21tYW5kIG1pZ2h0IGJlIGJldHRlcgorICAgICB0byB1c2UsIHNpbmNlIHRoZSBMSVNUIGNvbW1hbmQgb3V0cHV0IGlzIG5vdCBzcGVjaWZpZWQgb3Igc3RhbmRhcmQgaW4gYW55CisgICAgIHdheS4gSXQgaGFzIHR1cm5lZCBvdXQgdGhhdCB0aGUgTkxTVCBsaXN0IG91dHB1dCBpcyBub3QgdGhlIHNhbWUgb24gYWxsCisgICAgIHNlcnZlcnMgZWl0aGVyLi4uICovCisKKyAgLyoKKyAgICAgaWYgRlRQRklMRV9OT0NXRCB3YXMgc3BlY2lmaWVkLCB3ZSBhcmUgY3VycmVudGx5IGluCisgICAgIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIHNvIHdlIHNob3VsZCBhZGQgdGhlIHBhdGgKKyAgICAgYXMgYXJndW1lbnQgZm9yIHRoZSBMSVNUIC8gTkxTVCAvIG9yIGN1c3RvbSBjb21tYW5kLgorICAgICBXaGV0aGVyIHRoZSBzZXJ2ZXIgd2lsbCBzdXBwb3J0IHRoaXMsIGlzIHVuY2VydGFpbi4KKworICAgICBUaGUgb3RoZXIgZnRwX2ZpbGVtZXRob2RzIHdpbGwgQ1dEIGludG8gZGlyL2Rpci8gZmlyc3QgYW5kCisgICAgIHRoZW4ganVzdCBkbyBMSVNUIChpbiB0aGF0IGNhc2U6IG5vdGhpbmcgdG8gZG8gaGVyZSkKKyAgKi8KKyAgY2hhciAqY21kLCpsc3RBcmcsKnNsYXNoUG9zOworCisgIGxzdEFyZyA9IE5VTEw7CisgIGlmKChkYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPT0gRlRQRklMRV9OT0NXRCkgJiYKKyAgICAgZGF0YS0+c3RhdGUucGF0aCAmJgorICAgICBkYXRhLT5zdGF0ZS5wYXRoWzBdICYmCisgICAgIHN0cmNocihkYXRhLT5zdGF0ZS5wYXRoLCcvJykpIHsKKworICAgIGxzdEFyZyA9IHN0cmR1cChkYXRhLT5zdGF0ZS5wYXRoKTsKKyAgICBpZighbHN0QXJnKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICAvKiBDaGVjayBpZiBwYXRoIGRvZXMgbm90IGVuZCB3aXRoIC8sIGFzIHRoZW4gd2UgY3V0IG9mZiB0aGUgZmlsZSBwYXJ0ICovCisgICAgaWYobHN0QXJnW3N0cmxlbihsc3RBcmcpIC0gMV0gIT0gJy8nKSAgeworCisgICAgICAvKiBjaG9wIG9mZiB0aGUgZmlsZSBwYXJ0IGlmIGZvcm1hdCBpcyBkaXIvZGlyL2ZpbGUgKi8KKyAgICAgIHNsYXNoUG9zID0gc3RycmNocihsc3RBcmcsJy8nKTsKKyAgICAgIGlmKHNsYXNoUG9zKQorICAgICAgICAqKHNsYXNoUG9zKzEpID0gJ1wwJzsKKyAgICB9CisgIH0KKworICBjbWQgPSBhcHJpbnRmKCAiJXMlcyVzIiwKKyAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ1VTVE9NUkVRVUVTVF0/CisgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NVU1RPTVJFUVVFU1RdOgorICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LmZ0cF9saXN0X29ubHk/Ik5MU1QiOiJMSVNUIiksCisgICAgICAgICAgICAgICAgIGxzdEFyZz8gIiAiOiAiIiwKKyAgICAgICAgICAgICAgICAgbHN0QXJnPyBsc3RBcmc6ICIiICk7CisKKyAgaWYoIWNtZCkgeworICAgIGlmKGxzdEFyZykKKyAgICAgIGZyZWUobHN0QXJnKTsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLmZ0cGMucHAsICIlcyIsIGNtZCk7CisKKyAgaWYobHN0QXJnKQorICAgIGZyZWUobHN0QXJnKTsKKworICBmcmVlKGNtZCk7CisKKyAgaWYocmVzdWx0ICE9IENVUkxFX09LKQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgc3RhdGUoY29ubiwgRlRQX0xJU1QpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBmdHBfc3RhdGVfcG9zdF9yZXRydHlwZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIC8qIFdlJ3ZlIHNlbnQgdGhlIFRZUEUsIG5vdyB3ZSBtdXN0IHNlbmQgdGhlIGxpc3Qgb2YgcHJlcXVvdGUgc3RyaW5ncyAqLworCisgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9xdW90ZShjb25uLCBUUlVFLCBGVFBfUkVUUl9QUkVRVU9URSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9wb3N0X3N0b3J0eXBlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgLyogV2UndmUgc2VudCB0aGUgVFlQRSwgbm93IHdlIG11c3Qgc2VuZCB0aGUgbGlzdCBvZiBwcmVxdW90ZSBzdHJpbmdzICovCisKKyAgcmVzdWx0ID0gZnRwX3N0YXRlX3F1b3RlKGNvbm4sIFRSVUUsIEZUUF9TVE9SX1BSRVFVT1RFKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3N0YXRlX3Bvc3RfbWR0bShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgRlRQICpmdHAgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5mdHA7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisKKyAgLyogSWYgd2UgaGF2ZSBzZWxlY3RlZCBOT0JPRFkgYW5kIEhFQURFUiwgaXQgbWVhbnMgdGhhdCB3ZSBvbmx5IHdhbnQgZmlsZQorICAgICBpbmZvcm1hdGlvbi4gV2hpY2ggaW4gRlRQIGNhbid0IGJlIG11Y2ggbW9yZSB0aGFuIHRoZSBmaWxlIHNpemUgYW5kCisgICAgIGRhdGUuICovCisgIGlmKGRhdGEtPnNldC5vcHRfbm9fYm9keSAmJiBmdHBjLT5maWxlICYmCisgICAgIGZ0cF9uZWVkX3R5cGUoY29ubiwgZGF0YS0+c2V0LnByZWZlcl9hc2NpaSkpIHsKKyAgICAvKiBUaGUgU0laRSBjb21tYW5kIGlzIF9ub3RfIFJGQyA5NTkgc3BlY2lmaWVkLCBhbmQgdGhlcmVmb3IgbWFueSBzZXJ2ZXJzCisgICAgICAgbWF5IG5vdCBzdXBwb3J0IGl0ISBJdCBpcyBob3dldmVyIHRoZSBvbmx5IHdheSB3ZSBoYXZlIHRvIGdldCBhIGZpbGUncworICAgICAgIHNpemUhICovCisKKyAgICBmdHAtPnRyYW5zZmVyID0gRlRQVFJBTlNGRVJfSU5GTzsKKyAgICAvKiB0aGlzIG1lYW5zIG5vIGFjdHVhbCB0cmFuc2ZlciB3aWxsIGJlIG1hZGUgKi8KKworICAgIC8qIFNvbWUgc2VydmVycyByZXR1cm4gZGlmZmVyZW50IHNpemVzIGZvciBkaWZmZXJlbnQgbW9kZXMsIGFuZCB0aHVzIHdlCisgICAgICAgbXVzdCBzZXQgdGhlIHByb3BlciB0eXBlIGJlZm9yZSB3ZSBjaGVjayB0aGUgc2l6ZSAqLworICAgIHJlc3VsdCA9IGZ0cF9uYl90eXBlKGNvbm4sIGRhdGEtPnNldC5wcmVmZXJfYXNjaWksIEZUUF9UWVBFKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisgIGVsc2UKKyAgICByZXN1bHQgPSBmdHBfc3RhdGVfcG9zdF90eXBlKGNvbm4pOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHRoZSBDV0QgY29tbWFuZHMgaGF2ZSBiZWVuIGRvbmUgaW4gdGhlIGJlZ2lubmluZyBvZgorICAgdGhlIERPIHBoYXNlICovCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3N0YXRlX3Bvc3RfY3dkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisKKyAgLyogUmVxdWVzdGVkIHRpbWUgb2YgZmlsZSBvciB0aW1lLWRlcGVuZGVkIHRyYW5zZmVyPyAqLworICBpZigoZGF0YS0+c2V0LmdldF9maWxldGltZSB8fCBkYXRhLT5zZXQudGltZWNvbmRpdGlvbikgJiYgZnRwYy0+ZmlsZSkgeworCisgICAgLyogd2UgaGF2ZSByZXF1ZXN0ZWQgdG8gZ2V0IHRoZSBtb2RpZmllZC10aW1lIG9mIHRoZSBmaWxlLCB0aGlzIGlzIGEgd2hpdGUKKyAgICAgICBzcG90IGFzIHRoZSBNRFRNIGlzIG5vdCBtZW50aW9uZWQgaW4gUkZDOTU5ICovCisgICAgUFBTRU5ERigmZnRwYy0+cHAsICJNRFRNICVzIiwgZnRwYy0+ZmlsZSk7CisKKyAgICBzdGF0ZShjb25uLCBGVFBfTURUTSk7CisgIH0KKyAgZWxzZQorICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9wb3N0X21kdG0oY29ubik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiBUaGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgVFlQRSBhbmQgcG9zc2libGUgcXVvdGUgY29tbWFuZHMgaGF2ZSBiZWVuIHNlbnQgKi8KK3N0YXRpYyBDVVJMY29kZSBmdHBfc3RhdGVfdWxfc2V0dXAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNpemVjaGVja2VkKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEZUUCAqZnRwID0gY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8uZnRwOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOworICBpbnQgc2Vla2VyciA9IENVUkxfU0VFS0ZVTkNfT0s7CisKKyAgaWYoKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICYmICFzaXplY2hlY2tlZCkgfHwKKyAgICAgKChkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA+IDApICYmIHNpemVjaGVja2VkKSkgeworICAgIC8qIHdlJ3JlIGFib3V0IHRvIGNvbnRpbnVlIHRoZSB1cGxvYWRpbmcgb2YgYSBmaWxlICovCisgICAgLyogMS4gZ2V0IGFscmVhZHkgZXhpc3RpbmcgZmlsZSdzIHNpemUuIFdlIHVzZSB0aGUgU0laRSBjb21tYW5kIGZvciB0aGlzCisgICAgICAgd2hpY2ggbWF5IG5vdCBleGlzdCBpbiB0aGUgc2VydmVyISAgVGhlIFNJWkUgY29tbWFuZCBpcyBub3QgaW4KKyAgICAgICBSRkM5NTkuICovCisKKyAgICAvKiAyLiBUaGlzIHVzZWQgdG8gc2V0IFJFU1QuIEJ1dCBzaW5jZSB3ZSBjYW4gZG8gYXBwZW5kLCB3ZQorICAgICAgIGRvbid0IGFub3RoZXIgZnRwIGNvbW1hbmQuIFdlIGp1c3Qgc2tpcCB0aGUgc291cmNlIGZpbGUKKyAgICAgICBvZmZzZXQgYW5kIHRoZW4gd2UgQVBQRU5EIHRoZSByZXN0IG9uIHRoZSBmaWxlIGluc3RlYWQgKi8KKworICAgIC8qIDMuIHBhc3MgZmlsZS1zaXplIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc291cmNlIGZpbGUgKi8KKyAgICAvKiA0LiBsb3dlciB0aGUgaW5maWxlc2l6ZSBjb3VudGVyICovCisgICAgLyogPT4gdHJhbnNmZXIgYXMgdXN1YWwgKi8KKworICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIDwgMCApIHsKKyAgICAgIC8qIEdvdCBubyBnaXZlbiBzaXplIHRvIHN0YXJ0IGZyb20sIGZpZ3VyZSBpdCBvdXQgKi8KKyAgICAgIFBQU0VOREYoJmZ0cGMtPnBwLCAiU0laRSAlcyIsIGZ0cGMtPmZpbGUpOworICAgICAgc3RhdGUoY29ubiwgRlRQX1NUT1JfU0laRSk7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIGVuYWJsZSBhcHBlbmQgKi8KKyAgICBkYXRhLT5zZXQuZnRwX2FwcGVuZCA9IFRSVUU7CisKKyAgICAvKiBMZXQncyByZWFkIG9mZiB0aGUgcHJvcGVyIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBpbnB1dC4gKi8KKyAgICBpZihjb25uLT5zZWVrX2Z1bmMpIHsKKyAgICAgIHNlZWtlcnIgPSBjb25uLT5zZWVrX2Z1bmMoY29ubi0+c2Vla19jbGllbnQsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUVLX1NFVCk7CisgICAgfQorCisgICAgaWYoc2Vla2VyciAhPSBDVVJMX1NFRUtGVU5DX09LKSB7CisgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUspIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBzZWVrIHN0cmVhbSIpOworICAgICAgICByZXR1cm4gQ1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1Q7CisgICAgICB9CisgICAgICAvKiBzZWVrZXJyID09IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUsgKGNhbid0IHNlZWsgdG8gb2Zmc2V0KSAqLworICAgICAgZWxzZSB7CisgICAgICAgIGN1cmxfb2ZmX3QgcGFzc2VkPTA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICBzaXplX3QgcmVhZHRoaXNhbW91bnRub3cgPQorICAgICAgICAgICAgKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIC0gcGFzc2VkID4gQ1VSTF9PRkZfVF9DKEJVRlNJWkUpKSA/CisgICAgICAgICAgICBCVUZTSVpFIDogY3VybHhfc290b3V6KGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIC0gcGFzc2VkKTsKKworICAgICAgICAgIHNpemVfdCBhY3R1YWxseXJlYWQgPQorICAgICAgICAgICAgY29ubi0+ZnJlYWRfZnVuYyhkYXRhLT5zdGF0ZS5idWZmZXIsIDEsIHJlYWR0aGlzYW1vdW50bm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5mcmVhZF9pbik7CisKKyAgICAgICAgICBwYXNzZWQgKz0gYWN0dWFsbHlyZWFkOworICAgICAgICAgIGlmKChhY3R1YWxseXJlYWQgPT0gMCkgfHwgKGFjdHVhbGx5cmVhZCA+IHJlYWR0aGlzYW1vdW50bm93KSkgeworICAgICAgICAgICAgLyogdGhpcyBjaGVja3MgZm9yIGdyZWF0ZXItdGhhbiBvbmx5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgQ1VSTF9SRUFERlVOQ19BQk9SVCByZXR1cm4gY29kZSBzdGlsbCBhYm9ydHMgKi8KKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBkYXRhIik7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1Q7CisgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlKHBhc3NlZCA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgIH0KKyAgICB9CisgICAgLyogbm93LCBkZWNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcmVhZCAqLworICAgIGlmKGRhdGEtPnNldC5pbmZpbGVzaXplPjApIHsKKyAgICAgIGRhdGEtPnNldC5pbmZpbGVzaXplIC09IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworCisgICAgICBpZihkYXRhLT5zZXQuaW5maWxlc2l6ZSA8PSAwKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJGaWxlIGFscmVhZHkgY29tcGxldGVseSB1cGxvYWRlZFxuIik7CisKKyAgICAgICAgLyogbm8gZGF0YSB0byB0cmFuc2ZlciAqLworICAgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKworICAgICAgICAvKiBTZXQgLT50cmFuc2ZlciBzbyB0aGF0IHdlIHdvbid0IGdldCBhbnkgZXJyb3IgaW4KKyAgICAgICAgICogZnRwX2RvbmUoKSBiZWNhdXNlIHdlIGRpZG4ndCB0cmFuc2ZlciBhbnl0aGluZyEgKi8KKyAgICAgICAgZnRwLT50cmFuc2ZlciA9IEZUUFRSQU5TRkVSX05PTkU7CisKKyAgICAgICAgc3RhdGUoY29ubiwgRlRQX1NUT1ApOworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICB9CisgICAgfQorICAgIC8qIHdlJ3ZlIHBhc3NlZCwgcHJvY2VlZCBhcyBub3JtYWwgKi8KKyAgfSAvKiByZXN1bWVfZnJvbSAqLworCisgIFBQU0VOREYoJmZ0cGMtPnBwLCBkYXRhLT5zZXQuZnRwX2FwcGVuZD8iQVBQRSAlcyI6IlNUT1IgJXMiLAorICAgICAgICAgIGZ0cGMtPmZpbGUpOworCisgIHN0YXRlKGNvbm4sIEZUUF9TVE9SKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3N0YXRlX3F1b3RlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBzdGF0ZSBpbnN0YXRlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgRlRQICpmdHAgPSBkYXRhLT5zdGF0ZS5wcm90by5mdHA7CisgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOworICBib29sIHF1b3RlPUZBTFNFOworICBzdHJ1Y3QgY3VybF9zbGlzdCAqaXRlbTsKKworICBzd2l0Y2goaW5zdGF0ZSkgeworICBjYXNlIEZUUF9RVU9URToKKyAgZGVmYXVsdDoKKyAgICBpdGVtID0gZGF0YS0+c2V0LnF1b3RlOworICAgIGJyZWFrOworICBjYXNlIEZUUF9SRVRSX1BSRVFVT1RFOgorICBjYXNlIEZUUF9TVE9SX1BSRVFVT1RFOgorICAgIGl0ZW0gPSBkYXRhLT5zZXQucHJlcXVvdGU7CisgICAgYnJlYWs7CisgIGNhc2UgRlRQX1BPU1RRVU9URToKKyAgICBpdGVtID0gZGF0YS0+c2V0LnBvc3RxdW90ZTsKKyAgICBicmVhazsKKyAgfQorCisgIC8qCisgICAqIFRoaXMgc3RhdGUgdXNlczoKKyAgICogJ2NvdW50MScgdG8gaXRlcmF0ZSBvdmVyIHRoZSBjb21tYW5kcyB0byBzZW5kCisgICAqICdjb3VudDInIHRvIHN0b3JlIHdldGhlciB0byBhbGxvdyBjb21tYW5kcyB0byBmYWlsCisgICAqLworCisgIGlmKGluaXQpCisgICAgZnRwYy0+Y291bnQxID0gMDsKKyAgZWxzZQorICAgIGZ0cGMtPmNvdW50MSsrOworCisgIGlmKGl0ZW0pIHsKKyAgICBpbnQgaSA9IDA7CisKKyAgICAvKiBTa2lwIGNvdW50MSBpdGVtcyBpbiB0aGUgbGlua2VkIGxpc3QgKi8KKyAgICB3aGlsZSgoaTwgZnRwYy0+Y291bnQxKSAmJiBpdGVtKSB7CisgICAgICBpdGVtID0gaXRlbS0+bmV4dDsKKyAgICAgIGkrKzsKKyAgICB9CisgICAgaWYoaXRlbSkgeworICAgICAgY2hhciAqY21kID0gaXRlbS0+ZGF0YTsKKyAgICAgIGlmKGNtZFswXSA9PSAnKicpIHsKKyAgICAgICAgY21kKys7CisgICAgICAgIGZ0cGMtPmNvdW50MiA9IDE7IC8qIHRoZSBzZW50IGNvbW1hbmQgaXMgYWxsb3dlZCB0byBmYWlsICovCisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGZ0cGMtPmNvdW50MiA9IDA7IC8qIGZhaWx1cmUgbWVhbnMgY2FuY2VsIG9wZXJhdGlvbiAqLworCisgICAgICBQUFNFTkRGKCZmdHBjLT5wcCwgIiVzIiwgY21kKTsKKyAgICAgIHN0YXRlKGNvbm4sIGluc3RhdGUpOworICAgICAgcXVvdGUgPSBUUlVFOworICAgIH0KKyAgfQorCisgIGlmKCFxdW90ZSkgeworICAgIC8qIE5vIG1vcmUgcXVvdGUgdG8gc2VuZCwgY29udGludWUgdG8gLi4uICovCisgICAgc3dpdGNoKGluc3RhdGUpIHsKKyAgICBjYXNlIEZUUF9RVU9URToKKyAgICBkZWZhdWx0OgorICAgICAgcmVzdWx0ID0gZnRwX3N0YXRlX2N3ZChjb25uKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlRQX1JFVFJfUFJFUVVPVEU6CisgICAgICBpZihmdHAtPnRyYW5zZmVyICE9IEZUUFRSQU5TRkVSX0JPRFkpCisgICAgICAgIHN0YXRlKGNvbm4sIEZUUF9TVE9QKTsKKyAgICAgIGVsc2UgeworICAgICAgICBpZihmdHBjLT5rbm93bl9maWxlc2l6ZSAhPSAtMSkgeworICAgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBmdHBjLT5rbm93bl9maWxlc2l6ZSk7CisgICAgICAgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3Bvc3RfcmV0cl9zaXplKGNvbm4sIGZ0cGMtPmtub3duX2ZpbGVzaXplKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBQUFNFTkRGKCZmdHBjLT5wcCwgIlNJWkUgJXMiLCBmdHBjLT5maWxlKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBGVFBfUkVUUl9TSVpFKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBGVFBfU1RPUl9QUkVRVU9URToKKyAgICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV91bF9zZXR1cChjb25uLCBGQUxTRSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZUUF9QT1NUUVVPVEU6CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3N0YXRlX3Bhc3ZfcmVzcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnRwY29kZSkKK3sKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9Y29ubi0+ZGF0YTsKKyAgQ3VybF9hZGRyaW5mbyAqY29ubmluZm87CisgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqYWRkcj1OVUxMOworICBpbnQgcmM7CisgIHVuc2lnbmVkIHNob3J0IGNvbm5lY3Rwb3J0OyAvKiB0aGUgbG9jYWwgcG9ydCBjb25uZWN0KCkgc2hvdWxkIHVzZSEgKi8KKyAgdW5zaWduZWQgc2hvcnQgbmV3cG9ydD0wOyAvKiByZW1vdGUgcG9ydCAqLworICBib29sIGNvbm5lY3RlZDsKKworICAvKiBuZXdob3N0IG11c3QgYmUgYWJsZSB0byBob2xkIGEgZnVsbCBJUC1zdHlsZSBhZGRyZXNzIGluIEFTQ0lJLCB3aGljaAorICAgICBpbiB0aGUgSVB2NiBjYXNlIG1lYW5zIDUqOC0xID0gMzkgbGV0dGVycyAqLworI2RlZmluZSBORVdIT1NUX0JVRlNJWkUgNDgKKyAgY2hhciBuZXdob3N0W05FV0hPU1RfQlVGU0laRV07CisgIGNoYXIgKnN0cj0mZGF0YS0+c3RhdGUuYnVmZmVyWzRdOyAgLyogc3RhcnQgb24gdGhlIGZpcnN0IGxldHRlciAqLworCisgIGlmKChmdHBjLT5jb3VudDEgPT0gMCkgJiYKKyAgICAgKGZ0cGNvZGUgPT0gMjI5KSkgeworICAgIC8qIHBvc2l0aXZlIEVQU1YgcmVzcG9uc2UgKi8KKyAgICBjaGFyICpwdHIgPSBzdHJjaHIoc3RyLCAnKCcpOworICAgIGlmKHB0cikgeworICAgICAgdW5zaWduZWQgaW50IG51bTsKKyAgICAgIGNoYXIgc2VwYXJhdG9yWzRdOworICAgICAgcHRyKys7CisgICAgICBpZig1ICA9PSBzc2NhbmYocHRyLCAiJWMlYyVjJXUlYyIsCisgICAgICAgICAgICAgICAgICAgICAgJnNlcGFyYXRvclswXSwKKyAgICAgICAgICAgICAgICAgICAgICAmc2VwYXJhdG9yWzFdLAorICAgICAgICAgICAgICAgICAgICAgICZzZXBhcmF0b3JbMl0sCisgICAgICAgICAgICAgICAgICAgICAgJm51bSwKKyAgICAgICAgICAgICAgICAgICAgICAmc2VwYXJhdG9yWzNdKSkgeworICAgICAgICBjb25zdCBjaGFyIHNlcDEgPSBzZXBhcmF0b3JbMF07CisgICAgICAgIGludCBpOworCisgICAgICAgIC8qIFRoZSBmb3VyIHNlcGFyYXRvcnMgc2hvdWxkIGJlIGlkZW50aWNhbCwgb3IgZWxzZSB0aGlzIGlzIGFuIG9kZGx5CisgICAgICAgICAgIGZvcm1hdHRlZCByZXBseSBhbmQgd2UgYmFpbCBvdXQgaW1tZWRpYXRlbHkuICovCisgICAgICAgIGZvcihpPTE7IGk8NDsgaSsrKSB7CisgICAgICAgICAgaWYoc2VwYXJhdG9yW2ldICE9IHNlcDEpIHsKKyAgICAgICAgICAgIHB0cj1OVUxMOyAvKiBzZXQgdG8gTlVMTCB0byBzaWduYWwgZXJyb3IgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZihwdHIpIHsKKyAgICAgICAgICBuZXdwb3J0ID0gKHVuc2lnbmVkIHNob3J0KShudW0gJiAweGZmZmYpOworCisgICAgICAgICAgaWYoY29ubi0+Yml0cy50dW5uZWxfcHJveHkgfHwKKyAgICAgICAgICAgICBjb25uLT5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX1NPQ0tTNSB8fAorICAgICAgICAgICAgIGNvbm4tPnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FIHx8CisgICAgICAgICAgICAgY29ubi0+cHJveHl0eXBlID09IENVUkxQUk9YWV9TT0NLUzQgfHwKKyAgICAgICAgICAgICBjb25uLT5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX1NPQ0tTNEEpCisgICAgICAgICAgICAvKiBwcm94eSB0dW5uZWwgLT4gdXNlIG90aGVyIGhvc3QgaW5mbyBiZWNhdXNlIGlwX2FkZHJfc3RyIGlzIHRoZQorICAgICAgICAgICAgICAgcHJveHkgYWRkcmVzcyBub3QgdGhlIGZ0cCBob3N0ICovCisgICAgICAgICAgICBzbnByaW50ZihuZXdob3N0LCBzaXplb2YobmV3aG9zdCksICIlcyIsIGNvbm4tPmhvc3QubmFtZSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgLyogdXNlIHRoZSBzYW1lIElQIHdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCB0byAqLworICAgICAgICAgICAgc25wcmludGYobmV3aG9zdCwgTkVXSE9TVF9CVUZTSVpFLCAiJXMiLCBjb25uLT5pcF9hZGRyX3N0cik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcHRyPU5VTEw7CisgICAgfQorICAgIGlmKCFwdHIpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJXZWlyZGx5IGZvcm1hdHRlZCBFUFNWIHJlcGx5Iik7CisgICAgICByZXR1cm4gQ1VSTEVfRlRQX1dFSVJEX1BBU1ZfUkVQTFk7CisgICAgfQorICB9CisgIGVsc2UgaWYoKGZ0cGMtPmNvdW50MSA9PSAxKSAmJgorICAgICAgICAgIChmdHBjb2RlID09IDIyNykpIHsKKyAgICAvKiBwb3NpdGl2ZSBQQVNWIHJlc3BvbnNlICovCisgICAgaW50IGlwWzRdOworICAgIGludCBwb3J0WzJdOworCisgICAgLyoKKyAgICAgKiBTY2FuIGZvciBhIHNlcXVlbmNlIG9mIHNpeCBjb21tYS1zZXBhcmF0ZWQgbnVtYmVycyBhbmQgdXNlIHRoZW0gYXMKKyAgICAgKiBJUCtwb3J0IGluZGljYXRvcnMuCisgICAgICoKKyAgICAgKiBGb3VuZCByZXBseS1zdHJpbmdzIGluY2x1ZGU6CisgICAgICogIjIyNyBFbnRlcmluZyBQYXNzaXZlIE1vZGUgKDEyNywwLDAsMSw0LDUxKSIKKyAgICAgKiAiMjI3IERhdGEgdHJhbnNmZXIgd2lsbCBwYXNzaXZlbHkgbGlzdGVuIHRvIDEyNywwLDAsMSw0LDUxIgorICAgICAqICIyMjcgRW50ZXJpbmcgcGFzc2l2ZSBtb2RlLiAxMjcsMCwwLDEsNCw1MSIKKyAgICAgKi8KKyAgICB3aGlsZSgqc3RyKSB7CisgICAgICBpZig2ID09IHNzY2FuZihzdHIsICIlZCwlZCwlZCwlZCwlZCwlZCIsCisgICAgICAgICAgICAgICAgICAgICAgJmlwWzBdLCAmaXBbMV0sICZpcFsyXSwgJmlwWzNdLAorICAgICAgICAgICAgICAgICAgICAgICZwb3J0WzBdLCAmcG9ydFsxXSkpCisgICAgICAgIGJyZWFrOworICAgICAgc3RyKys7CisgICAgfQorCisgICAgaWYoISpzdHIpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJDb3VsZG4ndCBpbnRlcnByZXQgdGhlIDIyNy1yZXNwb25zZSIpOworICAgICAgcmV0dXJuIENVUkxFX0ZUUF9XRUlSRF8yMjdfRk9STUFUOworICAgIH0KKworICAgIC8qIHdlIGdvdCBPSyBmcm9tIHNlcnZlciAqLworICAgIGlmKGRhdGEtPnNldC5mdHBfc2tpcF9pcCkgeworICAgICAgLyogdG9sZCB0byBpZ25vcmUgdGhlIHJlbW90ZWx5IGdpdmVuIElQIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgb25lIHdlIHVzZWQKKyAgICAgICAgIGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uICovCisgICAgICBpbmZvZihkYXRhLCAiU2tpcHMgJWQuJWQuJWQuJWQgZm9yIGRhdGEgY29ubmVjdGlvbiwgdXNlcyAlcyBpbnN0ZWFkXG4iLAorICAgICAgICAgICAgaXBbMF0sIGlwWzFdLCBpcFsyXSwgaXBbM10sCisgICAgICAgICAgICBjb25uLT5pcF9hZGRyX3N0cik7CisgICAgICBpZihjb25uLT5iaXRzLnR1bm5lbF9wcm94eSB8fAorICAgICAgICAgY29ubi0+cHJveHl0eXBlID09IENVUkxQUk9YWV9TT0NLUzUgfHwKKyAgICAgICAgIGNvbm4tPnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FIHx8CisgICAgICAgICBjb25uLT5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX1NPQ0tTNCB8fAorICAgICAgICAgY29ubi0+cHJveHl0eXBlID09IENVUkxQUk9YWV9TT0NLUzRBKQorICAgICAgICAvKiBwcm94eSB0dW5uZWwgLT4gdXNlIG90aGVyIGhvc3QgaW5mbyBiZWNhdXNlIGlwX2FkZHJfc3RyIGlzIHRoZQorICAgICAgICAgICBwcm94eSBhZGRyZXNzIG5vdCB0aGUgZnRwIGhvc3QgKi8KKyAgICAgICAgc25wcmludGYobmV3aG9zdCwgc2l6ZW9mKG5ld2hvc3QpLCAiJXMiLCBjb25uLT5ob3N0Lm5hbWUpOworICAgICAgZWxzZQorICAgICAgICBzbnByaW50ZihuZXdob3N0LCBzaXplb2YobmV3aG9zdCksICIlcyIsIGNvbm4tPmlwX2FkZHJfc3RyKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgc25wcmludGYobmV3aG9zdCwgc2l6ZW9mKG5ld2hvc3QpLAorICAgICAgICAgICAgICAgIiVkLiVkLiVkLiVkIiwgaXBbMF0sIGlwWzFdLCBpcFsyXSwgaXBbM10pOworICAgIG5ld3BvcnQgPSAodW5zaWduZWQgc2hvcnQpKCgocG9ydFswXTw8OCkgKyBwb3J0WzFdKSAmIDB4ZmZmZik7CisgIH0KKyAgZWxzZSBpZihmdHBjLT5jb3VudDEgPT0gMCkgeworICAgIC8qIEVQU1YgZmFpbGVkLCBtb3ZlIG9uIHRvIFBBU1YgKi8KKworICAgIC8qIGRpc2FibGUgaXQgZm9yIG5leHQgdHJhbnNmZXIgKi8KKyAgICBjb25uLT5iaXRzLmZ0cF91c2VfZXBzdiA9IEZBTFNFOworICAgIGluZm9mKGRhdGEsICJkaXNhYmxpbmcgRVBTViB1c2FnZVxuIik7CisKKyAgICBQUFNFTkRGKCZmdHBjLT5wcCwgIlBBU1YiLCBOVUxMKTsKKyAgICBmdHBjLT5jb3VudDErKzsKKyAgICAvKiByZW1haW4gaW4gdGhlIEZUUF9QQVNWIHN0YXRlICovCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBlbHNlIHsKKyAgICBmYWlsZihkYXRhLCAiQmFkIFBBU1YvRVBTViByZXNwb25zZTogJTAzZCIsIGZ0cGNvZGUpOworICAgIHJldHVybiBDVVJMRV9GVFBfV0VJUkRfUEFTVl9SRVBMWTsKKyAgfQorCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZXSAmJiAqZGF0YS0+c2V0LnN0cltTVFJJTkdfUFJPWFldKSB7CisgICAgLyoKKyAgICAgKiBUaGlzIGlzIGEgdHVubmVsIHRocm91Z2ggYSBodHRwIHByb3h5IGFuZCB3ZSBuZWVkIHRvIGNvbm5lY3QgdG8gdGhlCisgICAgICogcHJveHkgYWdhaW4gaGVyZS4KKyAgICAgKgorICAgICAqIFdlIGRvbid0IHdhbnQgdG8gcmVseSBvbiBhIGZvcm1lciBob3N0IGxvb2t1cCB0aGF0IG1pZ2h0J3ZlIGV4cGlyZWQKKyAgICAgKiBub3csIGluc3RlYWQgd2UgcmVtYWtlIHRoZSBsb29rdXAgaGVyZSBhbmQgbm93IQorICAgICAqLworICAgIHJjID0gQ3VybF9yZXNvbHYoY29ubiwgY29ubi0+cHJveHkubmFtZSwgKGludCljb25uLT5wb3J0LCAmYWRkcik7CisgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKQorICAgICAgLyogQkxPQ0tJTkcsIGlnbm9yZXMgdGhlIHJldHVybiBjb2RlIGJ1dCAnYWRkcicgd2lsbCBiZSBOVUxMIGluCisgICAgICAgICBjYXNlIG9mIGZhaWx1cmUgKi8KKyAgICAgICh2b2lkKUN1cmxfcmVzb2x2ZXJfd2FpdF9yZXNvbHYoY29ubiwgJmFkZHIpOworCisgICAgY29ubmVjdHBvcnQgPQorICAgICAgKHVuc2lnbmVkIHNob3J0KWNvbm4tPnBvcnQ7IC8qIHdlIGNvbm5lY3QgdG8gdGhlIHByb3h5J3MgcG9ydCAqLworCisgICAgaWYoIWFkZHIpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJDYW4ndCByZXNvbHZlIHByb3h5IGhvc3QgJXM6JWh1IiwKKyAgICAgICAgICAgIGNvbm4tPnByb3h5Lm5hbWUsIGNvbm5lY3Rwb3J0KTsKKyAgICAgIHJldHVybiBDVVJMRV9GVFBfQ0FOVF9HRVRfSE9TVDsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogbm9ybWFsLCBkaXJlY3QsIGZ0cCBjb25uZWN0aW9uICovCisgICAgcmMgPSBDdXJsX3Jlc29sdihjb25uLCBuZXdob3N0LCBuZXdwb3J0LCAmYWRkcik7CisgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKQorICAgICAgLyogQkxPQ0tJTkcgKi8KKyAgICAgICh2b2lkKUN1cmxfcmVzb2x2ZXJfd2FpdF9yZXNvbHYoY29ubiwgJmFkZHIpOworCisgICAgY29ubmVjdHBvcnQgPSBuZXdwb3J0OyAvKiB3ZSBjb25uZWN0IHRvIHRoZSByZW1vdGUgcG9ydCAqLworCisgICAgaWYoIWFkZHIpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJDYW4ndCByZXNvbHZlIG5ldyBob3N0ICVzOiVodSIsIG5ld2hvc3QsIGNvbm5lY3Rwb3J0KTsKKyAgICAgIHJldHVybiBDVVJMRV9GVFBfQ0FOVF9HRVRfSE9TVDsKKyAgICB9CisgIH0KKworICByZXN1bHQgPSBDdXJsX2Nvbm5lY3Rob3N0KGNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubmVjdGVkKTsKKworICBDdXJsX3Jlc29sdl91bmxvY2soZGF0YSwgYWRkcik7IC8qIHdlJ3JlIGRvbmUgdXNpbmcgdGhpcyBhZGRyZXNzICovCisKKyAgaWYocmVzdWx0ICYmIGZ0cGMtPmNvdW50MSA9PSAwICYmIGZ0cGNvZGUgPT0gMjI5KSB7CisgICAgaW5mb2YoZGF0YSwgImdvdCBwb3NpdGl2ZSBFUFNWIHJlc3BvbnNlLCBidXQgY2FuJ3QgY29ubmVjdC4gIgorICAgICAgICAgICJEaXNhYmxpbmcgRVBTVlxuIik7CisgICAgLyogZGlzYWJsZSBpdCBmb3IgbmV4dCB0cmFuc2ZlciAqLworICAgIGNvbm4tPmJpdHMuZnRwX3VzZV9lcHN2ID0gRkFMU0U7CisgICAgZGF0YS0+c3RhdGUuZXJyb3JidWYgPSBGQUxTRTsgLyogYWxsb3cgZXJyb3IgbWVzc2FnZSB0byBnZXQgcmV3cml0dGVuICovCisgICAgUFBTRU5ERigmZnRwYy0+cHAsICJQQVNWIiwgTlVMTCk7CisgICAgZnRwYy0+Y291bnQxKys7CisgICAgLyogcmVtYWluIGluIHRoZSBGVFBfUEFTViBzdGF0ZSAqLworICAgIHJldHVybiByZXN1bHQ7CisgfQorCisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIGNvbm4tPmJpdHMudGNwY29ubmVjdFtTRUNPTkRBUllTT0NLRVRdID0gY29ubmVjdGVkOworCisgIC8qCisgICAqIFdoZW4gdGhpcyBpcyB1c2VkIGZyb20gdGhlIG11bHRpIGludGVyZmFjZSwgdGhpcyBtaWdodCd2ZSByZXR1cm5lZCB3aXRoCisgICAqIHRoZSAnY29ubmVjdGVkJyBzZXQgdG8gRkFMU0UgYW5kIHRodXMgd2UgYXJlIG5vdyBhd2FpdGluZyBhIG5vbi1ibG9ja2luZworICAgKiBjb25uZWN0IHRvIGNvbm5lY3QgYW5kIHdlIHNob3VsZCBub3QgYmUgImhhbmdpbmciIGhlcmUgd2FpdGluZy4KKyAgICovCisKKyAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpCisgICAgLyogdGhpcyBqdXN0IGR1bXBzIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgc2Vjb25kIGNvbm5lY3Rpb24gKi8KKyAgICBmdHBfcGFzdl92ZXJib3NlKGNvbm4sIGNvbm5pbmZvLCBuZXdob3N0LCBjb25uZWN0cG9ydCk7CisKKyAgc3dpdGNoKGNvbm4tPnByb3h5dHlwZSkgeworICAgIC8qIEZJWDogdGhpcyBNVVNUIHdhaXQgZm9yIGEgcHJvcGVyIGNvbm5lY3QgZmlyc3QgaWYgJ2Nvbm5lY3RlZCcgaXMKKyAgICAgKiBGQUxTRSAqLworICBjYXNlIENVUkxQUk9YWV9TT0NLUzU6CisgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRToKKyAgICByZXN1bHQgPSBDdXJsX1NPQ0tTNShjb25uLT5wcm94eXVzZXIsIGNvbm4tPnByb3h5cGFzc3dkLCBuZXdob3N0LCBuZXdwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ09OREFSWVNPQ0tFVCwgY29ubik7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNDoKKyAgICByZXN1bHQgPSBDdXJsX1NPQ0tTNChjb25uLT5wcm94eXVzZXIsIG5ld2hvc3QsIG5ld3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgU0VDT05EQVJZU09DS0VULCBjb25uLCBGQUxTRSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNEE6CisgICAgcmVzdWx0ID0gQ3VybF9TT0NLUzQoY29ubi0+cHJveHl1c2VyLCBuZXdob3N0LCBuZXdwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ09OREFSWVNPQ0tFVCwgY29ubiwgVFJVRSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTFBST1hZX0hUVFA6CisgIGNhc2UgQ1VSTFBST1hZX0hUVFBfMV8wOgorICAgIC8qIGRvIG5vdGhpbmcgaGVyZS4gaGFuZGxlZCBsYXRlci4gKi8KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBmYWlsZihkYXRhLCAidW5rbm93biBwcm94eXR5cGUgb3B0aW9uIGdpdmVuIik7CisgICAgcmVzdWx0ID0gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIGJyZWFrOworICB9CisKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgaWYoY29ubi0+Yml0cy50dW5uZWxfcHJveHkgJiYgY29ubi0+Yml0cy5odHRwcHJveHkpIHsKKyAgICAvKiBGSVg6IHRoaXMgTVVTVCB3YWl0IGZvciBhIHByb3BlciBjb25uZWN0IGZpcnN0IGlmICdjb25uZWN0ZWQnIGlzCisgICAgICogRkFMU0UgKi8KKworICAgIC8qIEJMT0NLSU5HICovCisgICAgLyogV2Ugd2FudCAic2VhbWxlc3MiIEZUUCBvcGVyYXRpb25zIHRocm91Z2ggSFRUUCBwcm94eSB0dW5uZWwgKi8KKworICAgIC8qIEN1cmxfcHJveHlDT05ORUNUIGlzIGJhc2VkIG9uIGEgcG9pbnRlciB0byBhIHN0cnVjdCBIVFRQIGF0IHRoZSBtZW1iZXIKKyAgICAgKiBjb25uLT5wcm90by5odHRwOyB3ZSB3YW50IEZUUCB0aHJvdWdoIEhUVFAgYW5kIHdlIGhhdmUgdG8gY2hhbmdlIHRoZQorICAgICAqIG1lbWJlciB0ZW1wb3JhcmlseSBmb3IgY29ubmVjdGluZyB0byB0aGUgSFRUUCBwcm94eS4gQWZ0ZXIKKyAgICAgKiBDdXJsX3Byb3h5Q09OTkVDVCB3ZSBoYXZlIHRvIHNldCBiYWNrIHRoZSBtZW1iZXIgdG8gdGhlIG9yaWdpbmFsIHN0cnVjdAorICAgICAqIEZUUCBwb2ludGVyCisgICAgICovCisgICAgc3RydWN0IEhUVFAgaHR0cF9wcm94eTsKKyAgICBzdHJ1Y3QgRlRQICpmdHBfc2F2ZSA9IGRhdGEtPnN0YXRlLnByb3RvLmZ0cDsKKyAgICBtZW1zZXQoJmh0dHBfcHJveHksIDAsIHNpemVvZihodHRwX3Byb3h5KSk7CisgICAgZGF0YS0+c3RhdGUucHJvdG8uaHR0cCA9ICZodHRwX3Byb3h5OworCisgICAgcmVzdWx0ID0gQ3VybF9wcm94eUNPTk5FQ1QoY29ubiwgU0VDT05EQVJZU09DS0VULCBuZXdob3N0LCBuZXdwb3J0KTsKKworICAgIGRhdGEtPnN0YXRlLnByb3RvLmZ0cCA9IGZ0cF9zYXZlOworCisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGNvbm4tPmJpdHMudGNwY29ubmVjdFtTRUNPTkRBUllTT0NLRVRdID0gVFJVRTsKKworICBzdGF0ZShjb25uLCBGVFBfU1RPUCk7IC8qIHRoaXMgcGhhc2UgaXMgY29tcGxldGVkICovCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9wb3J0X3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZ0cGNvZGUpCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisgIGZ0cHBvcnQgZmNtZCA9IChmdHBwb3J0KWZ0cGMtPmNvdW50MTsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgaWYoZnRwY29kZSAhPSAyMDApIHsKKyAgICAvKiB0aGUgY29tbWFuZCBmYWlsZWQgKi8KKworICAgIGlmKEVQUlQgPT0gZmNtZCkgeworICAgICAgaW5mb2YoZGF0YSwgImRpc2FibGluZyBFUFJUIHVzYWdlXG4iKTsKKyAgICAgIGNvbm4tPmJpdHMuZnRwX3VzZV9lcHJ0ID0gRkFMU0U7CisgICAgfQorICAgIGZjbWQrKzsKKworICAgIGlmKGZjbWQgPT0gRE9ORSkgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBkbyBQT1JUIik7CisgICAgICByZXN1bHQgPSBDVVJMRV9GVFBfUE9SVF9GQUlMRUQ7CisgICAgfQorICAgIGVsc2UKKyAgICAgIC8qIHRyeSBuZXh0ICovCisgICAgICByZXN1bHQgPSBmdHBfc3RhdGVfdXNlX3BvcnQoY29ubiwgZmNtZCk7CisgIH0KKyAgZWxzZSB7CisgICAgaW5mb2YoZGF0YSwgIkNvbm5lY3QgZGF0YSBzdHJlYW0gYWN0aXZlbHlcbiIpOworICAgIHN0YXRlKGNvbm4sIEZUUF9TVE9QKTsgLyogZW5kIG9mIERPIHBoYXNlICovCisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3N0YXRlX21kdG1fcmVzcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnRwY29kZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisgIHN0cnVjdCBGVFAgKmZ0cCA9IGRhdGEtPnN0YXRlLnByb3RvLmZ0cDsKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisKKyAgc3dpdGNoKGZ0cGNvZGUpIHsKKyAgY2FzZSAyMTM6CisgICAgeworICAgICAgLyogd2UgZ290IGEgdGltZS4gRm9ybWF0IHNob3VsZCBiZTogIllZWVlNTURESEhNTVNTWy5zc3NdIiB3aGVyZSB0aGUKKyAgICAgICAgIGxhc3QgLnNzcyBwYXJ0IGlzIG9wdGlvbmFsIGFuZCBtZWFucyBmcmFjdGlvbnMgb2YgYSBzZWNvbmQgKi8KKyAgICAgIGludCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZDsKKyAgICAgIGNoYXIgKmJ1ZiA9IGRhdGEtPnN0YXRlLmJ1ZmZlcjsKKyAgICAgIGlmKDYgPT0gc3NjYW5mKGJ1Zis0LCAiJTA0ZCUwMmQlMDJkJTAyZCUwMmQlMDJkIiwKKyAgICAgICAgICAgICAgICAgICAgICZ5ZWFyLCAmbW9udGgsICZkYXksICZob3VyLCAmbWludXRlLCAmc2Vjb25kKSkgeworICAgICAgICAvKiB3ZSBoYXZlIGEgdGltZSwgcmVmb3JtYXQgaXQgKi8KKyAgICAgICAgdGltZV90IHNlY3M9dGltZShOVUxMKTsKKyAgICAgICAgLyogdXNpbmcgdGhlIGdvb2Qgb2xkIHlhY2MvYmlzb24geXVjayAqLworICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihjb25uLT5kYXRhLT5zdGF0ZS5idWZmZXIpLAorICAgICAgICAgICAgICAgICAiJTA0ZCUwMmQlMDJkICUwMmQ6JTAyZDolMDJkIEdNVCIsCisgICAgICAgICAgICAgICAgIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKTsKKyAgICAgICAgLyogbm93LCBjb252ZXJ0IHRoaXMgaW50byBhIHRpbWUoKSB2YWx1ZTogKi8KKyAgICAgICAgZGF0YS0+aW5mby5maWxldGltZSA9IChsb25nKWN1cmxfZ2V0ZGF0ZShidWYsICZzZWNzKTsKKyAgICAgIH0KKworI2lmZGVmIENVUkxfRlRQX0hUVFBTVFlMRV9IRUFECisgICAgICAvKiBJZiB3ZSBhc2tlZCBmb3IgYSB0aW1lIG9mIHRoZSBmaWxlIGFuZCB3ZSBhY3R1YWxseSBnb3Qgb25lIGFzIHdlbGwsCisgICAgICAgICB3ZSAiZW11bGF0ZSIgYSBIVFRQLXN0eWxlIGhlYWRlciBpbiBvdXIgb3V0cHV0LiAqLworCisgICAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkgJiYKKyAgICAgICAgIGZ0cGMtPmZpbGUgJiYKKyAgICAgICAgIGRhdGEtPnNldC5nZXRfZmlsZXRpbWUgJiYKKyAgICAgICAgIChkYXRhLT5pbmZvLmZpbGV0aW1lPj0wKSApIHsKKyAgICAgICAgdGltZV90IGZpbGV0aW1lID0gKHRpbWVfdClkYXRhLT5pbmZvLmZpbGV0aW1lOworICAgICAgICBzdHJ1Y3QgdG0gYnVmZmVyOworICAgICAgICBjb25zdCBzdHJ1Y3QgdG0gKnRtID0gJmJ1ZmZlcjsKKworICAgICAgICByZXN1bHQgPSBDdXJsX2dtdGltZShmaWxldGltZSwgJmJ1ZmZlcik7CisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgIC8qIGZvcm1hdDogIlR1ZSwgMTUgTm92IDE5OTQgMTI6NDU6MjYiICovCisgICAgICAgIHNucHJpbnRmKGJ1ZiwgQlVGU0laRS0xLAorICAgICAgICAgICAgICAgICAiTGFzdC1Nb2RpZmllZDogJXMsICUwMmQgJXMgJTRkICUwMmQ6JTAyZDolMDJkIEdNVFxyXG4iLAorICAgICAgICAgICAgICAgICBDdXJsX3drZGF5W3RtLT50bV93ZGF5P3RtLT50bV93ZGF5LTE6Nl0sCisgICAgICAgICAgICAgICAgIHRtLT50bV9tZGF5LAorICAgICAgICAgICAgICAgICBDdXJsX21vbnRoW3RtLT50bV9tb25dLAorICAgICAgICAgICAgICAgICB0bS0+dG1feWVhciArIDE5MDAsCisgICAgICAgICAgICAgICAgIHRtLT50bV9ob3VyLAorICAgICAgICAgICAgICAgICB0bS0+dG1fbWluLAorICAgICAgICAgICAgICAgICB0bS0+dG1fc2VjKTsKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9USCwgYnVmLCAwKTsKKyAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9IC8qIGVuZCBvZiBhIHJpZGljdWxvdXMgYW1vdW50IG9mIGNvbmRpdGlvbmFscyAqLworI2VuZGlmCisgICAgfQorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGluZm9mKGRhdGEsICJ1bnN1cHBvcnRlZCBNRFRNIHJlcGx5IGZvcm1hdFxuIik7CisgICAgYnJlYWs7CisgIGNhc2UgNTUwOiAvKiAiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIgKi8KKyAgICBmYWlsZihkYXRhLCAiR2l2ZW4gZmlsZSBkb2VzIG5vdCBleGlzdCIpOworICAgIHJlc3VsdCA9IENVUkxFX0ZUUF9DT1VMRE5UX1JFVFJfRklMRTsKKyAgICBicmVhazsKKyAgfQorCisgIGlmKGRhdGEtPnNldC50aW1lY29uZGl0aW9uKSB7CisgICAgaWYoKGRhdGEtPmluZm8uZmlsZXRpbWUgPiAwKSAmJiAoZGF0YS0+c2V0LnRpbWV2YWx1ZSA+IDApKSB7CisgICAgICBzd2l0Y2goZGF0YS0+c2V0LnRpbWVjb25kaXRpb24pIHsKKyAgICAgIGNhc2UgQ1VSTF9USU1FQ09ORF9JRk1PRFNJTkNFOgorICAgICAgZGVmYXVsdDoKKyAgICAgICAgaWYoZGF0YS0+aW5mby5maWxldGltZSA8PSBkYXRhLT5zZXQudGltZXZhbHVlKSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIlRoZSByZXF1ZXN0ZWQgZG9jdW1lbnQgaXMgbm90IG5ldyBlbm91Z2hcbiIpOworICAgICAgICAgIGZ0cC0+dHJhbnNmZXIgPSBGVFBUUkFOU0ZFUl9OT05FOyAvKiBtYXJrIHRvIG5vdCB0cmFuc2ZlciBkYXRhICovCisgICAgICAgICAgZGF0YS0+aW5mby50aW1lY29uZCA9IFRSVUU7CisgICAgICAgICAgc3RhdGUoY29ubiwgRlRQX1NUT1ApOworICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ1VSTF9USU1FQ09ORF9JRlVOTU9EU0lOQ0U6CisgICAgICAgIGlmKGRhdGEtPmluZm8uZmlsZXRpbWUgPiBkYXRhLT5zZXQudGltZXZhbHVlKSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIlRoZSByZXF1ZXN0ZWQgZG9jdW1lbnQgaXMgbm90IG9sZCBlbm91Z2hcbiIpOworICAgICAgICAgIGZ0cC0+dHJhbnNmZXIgPSBGVFBUUkFOU0ZFUl9OT05FOyAvKiBtYXJrIHRvIG5vdCB0cmFuc2ZlciBkYXRhICovCisgICAgICAgICAgZGF0YS0+aW5mby50aW1lY29uZCA9IFRSVUU7CisgICAgICAgICAgc3RhdGUoY29ubiwgRlRQX1NUT1ApOworICAgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0gLyogc3dpdGNoICovCisgICAgfQorICAgIGVsc2UgeworICAgICAgaW5mb2YoZGF0YSwgIlNraXBwaW5nIHRpbWUgY29tcGFyaXNvblxuIik7CisgICAgfQorICB9CisKKyAgaWYoIXJlc3VsdCkKKyAgICByZXN1bHQgPSBmdHBfc3RhdGVfcG9zdF9tZHRtKGNvbm4pOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBmdHBfc3RhdGVfdHlwZV9yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmdHBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisKKyAgaWYoZnRwY29kZS8xMDAgIT0gMikgeworICAgIC8qICJzYXNzZXJmdHBkIiBhbmQgIih1KXIoeClib3QgZnRwZCIgYm90aCByZXNwb25kcyB3aXRoIDIyNiBhZnRlciBhCisgICAgICAgc3VjY2Vzc2Z1bCAnVFlQRSBJJy4gV2hpbGUgdGhhdCBpcyBub3QgYXMgUkZDOTU5IHNheXMsIGl0IGlzIHN0aWxsIGEKKyAgICAgICBwb3NpdGl2ZSByZXNwb25zZSBjb2RlIGFuZCB3ZSBhbGxvdyB0aGF0LiAqLworICAgIGZhaWxmKGRhdGEsICJDb3VsZG4ndCBzZXQgZGVzaXJlZCBtb2RlIik7CisgICAgcmV0dXJuIENVUkxFX0ZUUF9DT1VMRE5UX1NFVF9UWVBFOworICB9CisgIGlmKGZ0cGNvZGUgIT0gMjAwKQorICAgIGluZm9mKGRhdGEsICJHb3QgYSAlMDNkIHJlc3BvbnNlIGNvZGUgaW5zdGVhZCBvZiB0aGUgYXNzdW1lZCAyMDBcbiIsCisgICAgICAgICAgZnRwY29kZSk7CisKKyAgaWYoaW5zdGF0ZSA9PSBGVFBfVFlQRSkKKyAgICByZXN1bHQgPSBmdHBfc3RhdGVfcG9zdF90eXBlKGNvbm4pOworICBlbHNlIGlmKGluc3RhdGUgPT0gRlRQX0xJU1RfVFlQRSkKKyAgICByZXN1bHQgPSBmdHBfc3RhdGVfcG9zdF9saXN0dHlwZShjb25uKTsKKyAgZWxzZSBpZihpbnN0YXRlID09IEZUUF9SRVRSX1RZUEUpCisgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3Bvc3RfcmV0cnR5cGUoY29ubik7CisgIGVsc2UgaWYoaW5zdGF0ZSA9PSBGVFBfU1RPUl9UWVBFKQorICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9wb3N0X3N0b3J0eXBlKGNvbm4pOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBmdHBfc3RhdGVfcG9zdF9yZXRyX3NpemUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX29mZl90IGZpbGVzaXplKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9Y29ubi0+ZGF0YTsKKyAgc3RydWN0IEZUUCAqZnRwID0gZGF0YS0+c3RhdGUucHJvdG8uZnRwOworICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKworICBpZihkYXRhLT5zZXQubWF4X2ZpbGVzaXplICYmIChmaWxlc2l6ZSA+IGRhdGEtPnNldC5tYXhfZmlsZXNpemUpKSB7CisgICAgZmFpbGYoZGF0YSwgIk1heGltdW0gZmlsZSBzaXplIGV4Y2VlZGVkIik7CisgICAgcmV0dXJuIENVUkxFX0ZJTEVTSVpFX0VYQ0VFREVEOworICB9CisgIGZ0cC0+ZG93bmxvYWRzaXplID0gZmlsZXNpemU7CisKKyAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKKyAgICAvKiBXZSBhbHdheXMgKGF0dGVtcHQgdG8pIGdldCB0aGUgc2l6ZSBvZiBkb3dubG9hZHMsIHNvIGl0IGlzIGRvbmUgYmVmb3JlCisgICAgICAgdGhpcyBldmVuIHdoZW4gbm90IGRvaW5nIHJlc3VtZXMuICovCisgICAgaWYoZmlsZXNpemUgPT0gLTEpIHsKKyAgICAgIGluZm9mKGRhdGEsICJmdHAgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBTSVpFXG4iKTsKKyAgICAgIC8qIFdlIGNvdWxkbid0IGdldCB0aGUgc2l6ZSBhbmQgdGhlcmVmb3JlIHdlIGNhbid0IGtub3cgaWYgdGhlcmUgcmVhbGx5CisgICAgICAgICBpcyBhIHBhcnQgb2YgdGhlIGZpbGUgbGVmdCB0byBnZXQsIGFsdGhvdWdoIHRoZSBzZXJ2ZXIgd2lsbCBqdXN0CisgICAgICAgICBjbG9zZSB0aGUgY29ubmVjdGlvbiB3aGVuIHdlIHN0YXJ0IHRoZSBjb25uZWN0aW9uIHNvIGl0IHdvbid0IGNhdXNlCisgICAgICAgICB1cyBhbnkgaGFybSwganVzdCBub3QgbWFrZSB1cyBleGl0IGFzIG5pY2VseS4gKi8KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBXZSBnb3QgYSBmaWxlIHNpemUgcmVwb3J0LCBzbyB3ZSBjaGVjayB0aGF0IHRoZXJlIGFjdHVhbGx5IGlzIGEKKyAgICAgICAgIHBhcnQgb2YgdGhlIGZpbGUgbGVmdCB0byBnZXQsIG9yIGVsc2Ugd2UgZ28gaG9tZS4gICovCisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTwgMCkgeworICAgICAgICAvKiBXZSdyZSBzdXBwb3NlZCB0byBkb3dubG9hZCB0aGUgbGFzdCBhYnMoZnJvbSkgYnl0ZXMgKi8KKyAgICAgICAgaWYoZmlsZXNpemUgPCAtZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiT2Zmc2V0ICglIiBGT1JNQVRfT0ZGX1QKKyAgICAgICAgICAgICAgICAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIgRk9STUFUX09GRl9UICIpIiwKKyAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwgZmlsZXNpemUpOworICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICB9CisgICAgICAgIC8qIGNvbnZlcnQgdG8gc2l6ZSB0byBkb3dubG9hZCAqLworICAgICAgICBmdHAtPmRvd25sb2Fkc2l6ZSA9IC1kYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTsKKyAgICAgICAgLyogZG93bmxvYWQgZnJvbSB3aGVyZT8gKi8KKyAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSBmaWxlc2l6ZSAtIGZ0cC0+ZG93bmxvYWRzaXplOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGlmKGZpbGVzaXplIDwgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiT2Zmc2V0ICglIiBGT1JNQVRfT0ZGX1QKKyAgICAgICAgICAgICAgICAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIgRk9STUFUX09GRl9UICIpIiwKKyAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSwgZmlsZXNpemUpOworICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICB9CisgICAgICAgIC8qIE5vdyBzdG9yZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGFyZSBleHBlY3RlZCB0byBkb3dubG9hZCAqLworICAgICAgICBmdHAtPmRvd25sb2Fkc2l6ZSA9IGZpbGVzaXplLWRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgfQorICAgIH0KKworICAgIGlmKGZ0cC0+ZG93bmxvYWRzaXplID09IDApIHsKKyAgICAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOworICAgICAgaW5mb2YoZGF0YSwgIkZpbGUgYWxyZWFkeSBjb21wbGV0ZWx5IGRvd25sb2FkZWRcbiIpOworCisgICAgICAvKiBTZXQgLT50cmFuc2ZlciBzbyB0aGF0IHdlIHdvbid0IGdldCBhbnkgZXJyb3IgaW4gZnRwX2RvbmUoKQorICAgICAgICogYmVjYXVzZSB3ZSBkaWRuJ3QgdHJhbnNmZXIgdGhlIGFueSBmaWxlICovCisgICAgICBmdHAtPnRyYW5zZmVyID0gRlRQVFJBTlNGRVJfTk9ORTsKKyAgICAgIHN0YXRlKGNvbm4sIEZUUF9TVE9QKTsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisKKyAgICAvKiBTZXQgcmVzdW1lIGZpbGUgdHJhbnNmZXIgb2Zmc2V0ICovCisgICAgaW5mb2YoZGF0YSwgIkluc3RydWN0cyBzZXJ2ZXIgdG8gcmVzdW1lIGZyb20gb2Zmc2V0ICUiIEZPUk1BVF9PRkZfVAorICAgICAgICAgICJcbiIsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKworICAgIFBQU0VOREYoJmZ0cGMtPnBwLCAiUkVTVCAlIiBGT1JNQVRfT0ZGX1QsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKworICAgIHN0YXRlKGNvbm4sIEZUUF9SRVRSX1JFU1QpOworCisgIH0KKyAgZWxzZSB7CisgICAgLyogbm8gcmVzdW1lICovCisgICAgUFBTRU5ERigmZnRwYy0+cHAsICJSRVRSICVzIiwgZnRwYy0+ZmlsZSk7CisgICAgc3RhdGUoY29ubiwgRlRQX1JFVFIpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9zaXplX3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZ0cGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBzdGF0ZSBpbnN0YXRlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9Y29ubi0+ZGF0YTsKKyAgY3VybF9vZmZfdCBmaWxlc2l6ZTsKKyAgY2hhciAqYnVmID0gZGF0YS0+c3RhdGUuYnVmZmVyOworCisgIC8qIGdldCB0aGUgc2l6ZSBmcm9tIHRoZSBhc2NpaSBzdHJpbmc6ICovCisgIGZpbGVzaXplID0gKGZ0cGNvZGUgPT0gMjEzKT9jdXJseF9zdHJ0b29mZnQoYnVmKzQsIE5VTEwsIDApOi0xOworCisgIGlmKGluc3RhdGUgPT0gRlRQX1NJWkUpIHsKKyNpZmRlZiBDVVJMX0ZUUF9IVFRQU1RZTEVfSEVBRAorICAgIGlmKC0xICE9IGZpbGVzaXplKSB7CisgICAgICBzbnByaW50ZihidWYsIHNpemVvZihkYXRhLT5zdGF0ZS5idWZmZXIpLAorICAgICAgICAgICAgICAgIkNvbnRlbnQtTGVuZ3RoOiAlIiBGT1JNQVRfT0ZGX1QgIlxyXG4iLCBmaWxlc2l6ZSk7CisgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT1RILCBidWYsIDApOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbmRpZgorICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBmaWxlc2l6ZSk7CisgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3Bvc3Rfc2l6ZShjb25uKTsKKyAgfQorICBlbHNlIGlmKGluc3RhdGUgPT0gRlRQX1JFVFJfU0laRSkgeworICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBmaWxlc2l6ZSk7CisgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3Bvc3RfcmV0cl9zaXplKGNvbm4sIGZpbGVzaXplKTsKKyAgfQorICBlbHNlIGlmKGluc3RhdGUgPT0gRlRQX1NUT1JfU0laRSkgeworICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gZmlsZXNpemU7CisgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3VsX3NldHVwKGNvbm4sIFRSVUUpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9yZXN0X3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZ0cGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBzdGF0ZSBpbnN0YXRlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisKKyAgc3dpdGNoKGluc3RhdGUpIHsKKyAgY2FzZSBGVFBfUkVTVDoKKyAgZGVmYXVsdDoKKyNpZmRlZiBDVVJMX0ZUUF9IVFRQU1RZTEVfSEVBRAorICAgIGlmKGZ0cGNvZGUgPT0gMzUwKSB7CisgICAgICBjaGFyIGJ1ZmZlclsyNF09IHsgIkFjY2VwdC1yYW5nZXM6IGJ5dGVzXHJcbiIgfTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPVEgsIGJ1ZmZlciwgMCk7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorI2VuZGlmCisgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3Bvc3RfcmVzdChjb25uKTsKKyAgICBicmVhazsKKworICBjYXNlIEZUUF9SRVRSX1JFU1Q6CisgICAgaWYoZnRwY29kZSAhPSAzNTApIHsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJDb3VsZG4ndCB1c2UgUkVTVCIpOworICAgICAgcmVzdWx0ID0gQ1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1Q7CisgICAgfQorICAgIGVsc2UgeworICAgICAgUFBTRU5ERigmZnRwYy0+cHAsICJSRVRSICVzIiwgZnRwYy0+ZmlsZSk7CisgICAgICBzdGF0ZShjb25uLCBGVFBfUkVUUik7CisgICAgfQorICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV9zdG9yX3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZ0cGNvZGUsIGZ0cHN0YXRlIGluc3RhdGUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgaWYoZnRwY29kZT49NDAwKSB7CisgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBGVFAgdXBsb2FkOiAlMGQiLCBmdHBjb2RlKTsKKyAgICAvKiBvb3BzLCB3ZSBuZXZlciBjbG9zZSB0aGUgc29ja2V0cyEgKi8KKyAgICByZXR1cm4gQ1VSTEVfVVBMT0FEX0ZBSUxFRDsKKyAgfQorCisgIGNvbm4tPnByb3RvLmZ0cGMuc3RhdGVfc2F2ZWQgPSBpbnN0YXRlOworCisgIC8qIFBPUlQgbWVhbnMgd2UgYXJlIG5vdyBhd2FpdGluZyB0aGUgc2VydmVyIHRvIGNvbm5lY3QgdG8gdXMuICovCisgIGlmKGRhdGEtPnNldC5mdHBfdXNlX3BvcnQpIHsKKyAgICBib29sIGNvbm5lY3RlZDsKKworICAgIHJlc3VsdCA9IEFsbG93U2VydmVyQ29ubmVjdChjb25uLCAmY29ubmVjdGVkKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgaWYoIWNvbm5lY3RlZCkgeworICAgICAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisgICAgICBpbmZvZihkYXRhLCAiRGF0YSBjb25uIHdhcyBub3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5XG4iKTsKKyAgICAgIC8qIGFzIHRoZXJlJ3Mgbm90IG5lY2Vzc2FyaWx5IGFuIGltbWVkaWF0ZSBhY3Rpb24gb24gdGhlIGNvbnRyb2wKKyAgICAgICAgIGNvbm5lY3Rpb24gbm93LCB3ZSBoYWx0IHRoZSBzdGF0ZSBtYWNoaW5lICovCisgICAgICBzdGF0ZShjb25uLCBGVFBfU1RPUCk7CisgICAgICBmdHBjLT53YWl0X2RhdGFfY29ubiA9IFRSVUU7CisgICAgfQorCisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisgIGVsc2UKKyAgICByZXR1cm4gSW5pdGlhdGVUcmFuc2Zlcihjb25uKTsKK30KKworLyogZm9yIExJU1QgYW5kIFJFVFIgcmVzcG9uc2VzICovCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3N0YXRlX2dldF9yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmdHBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IEZUUCAqZnRwID0gZGF0YS0+c3RhdGUucHJvdG8uZnRwOworICBjaGFyICpidWYgPSBkYXRhLT5zdGF0ZS5idWZmZXI7CisKKyAgaWYoKGZ0cGNvZGUgPT0gMTUwKSB8fCAoZnRwY29kZSA9PSAxMjUpKSB7CisKKyAgICAvKgorICAgICAgQTsKKyAgICAgIDE1MCBPcGVuaW5nIEJJTkFSWSBtb2RlIGRhdGEgY29ubmVjdGlvbiBmb3IgL2V0Yy9wYXNzd2QgKDIyNDEKKyAgICAgIGJ5dGVzKS4gIChvaywgdGhlIGZpbGUgaXMgYmVpbmcgdHJhbnNmZXJyZWQpCisKKyAgICAgIEI6CisgICAgICAxNTAgT3BlbmluZyBBU0NJSSBtb2RlIGRhdGEgY29ubmVjdGlvbiBmb3IgL2Jpbi9scworCisgICAgICBDOgorICAgICAgMTUwIEFTQ0lJIGRhdGEgY29ubmVjdGlvbiBmb3IgL2Jpbi9scyAoMTM3LjE2Ny4xMDQuOTEsMzc0NDUpICgwIGJ5dGVzKS4KKworICAgICAgRDoKKyAgICAgIDE1MCBPcGVuaW5nIEFTQ0lJIG1vZGUgZGF0YSBjb25uZWN0aW9uIGZvciBbZmlsZV0gKDAuMC4wLjAsMCkgKDU0NSBieXRlcykKKworICAgICAgRToKKyAgICAgIDEyNSBEYXRhIGNvbm5lY3Rpb24gYWxyZWFkeSBvcGVuOyBUcmFuc2ZlciBzdGFydGluZy4gKi8KKworICAgIGN1cmxfb2ZmX3Qgc2l6ZT0tMTsgLyogZGVmYXVsdCB1bmtub3duIHNpemUgKi8KKworCisgICAgLyoKKyAgICAgKiBJdCBhcHBlYXJzIHRoYXQgdGhlcmUgYXJlIEZUUC1zZXJ2ZXJzIHRoYXQgcmV0dXJuIHNpemUgMCBmb3IgZmlsZXMgd2hlbgorICAgICAqIFNJWkUgaXMgdXNlZCBvbiB0aGUgZmlsZSB3aGlsZSBiZWluZyBpbiBCSU5BUlkgbW9kZS4gVG8gd29yayBhcm91bmQKKyAgICAgKiB0aGF0IChzdHVwaWQpIGJlaGF2aW9yLCB3ZSBhdHRlbXB0IHRvIHBhcnNlIHRoZSBSRVRSIHJlc3BvbnNlIGV2ZW4gaWYKKyAgICAgKiB0aGUgU0laRSByZXR1cm5lZCBzaXplIHplcm8uCisgICAgICoKKyAgICAgKiBEZWJ1Z2dpbmcgaGVscCBmcm9tIFNhbHZhdG9yZSBTb3JyZW50aW5vIG9uIEZlYnJ1YXJ5IDI2LCAyMDAzLgorICAgICAqLworCisgICAgaWYoKGluc3RhdGUgIT0gRlRQX0xJU1QpICYmCisgICAgICAgIWRhdGEtPnNldC5wcmVmZXJfYXNjaWkgJiYKKyAgICAgICAoZnRwLT5kb3dubG9hZHNpemUgPCAxKSkgeworICAgICAgLyoKKyAgICAgICAqIEl0IHNlZW1zIGRpcmVjdG9yeSBsaXN0aW5ncyBlaXRoZXIgZG9uJ3Qgc2hvdyB0aGUgc2l6ZSBvciB2ZXJ5CisgICAgICAgKiBvZnRlbiB1c2VzIHNpemUgMCBhbnl3YXkuIEFTQ0lJIHRyYW5zZmVycyBtYXkgdmVyeSB3ZWxsIHR1cm4gb3V0CisgICAgICAgKiB0aGF0IHRoZSB0cmFuc2ZlcnJlZCBhbW91bnQgb2YgZGF0YSBpcyBub3QgdGhlIHNhbWUgYXMgdGhpcyBsaW5lCisgICAgICAgKiB0ZWxscywgd2h5IHVzaW5nIHRoaXMgbnVtYmVyIGluIHRob3NlIGNhc2VzIG9ubHkgY29uZnVzZXMgdXMuCisgICAgICAgKgorICAgICAgICogRXhhbXBsZSBEIGFib3ZlIG1ha2VzIHRoaXMgcGFyc2luZyBhIGxpdHRsZSB0cmlja3kgKi8KKyAgICAgIGNoYXIgKmJ5dGVzOworICAgICAgYnl0ZXM9c3Ryc3RyKGJ1ZiwgIiBieXRlcyIpOworICAgICAgaWYoYnl0ZXMtLSkgeworICAgICAgICBsb25nIGluPShsb25nKShieXRlcy1idWYpOworICAgICAgICAvKiB0aGlzIGlzIGEgaGludCB0aGVyZSBpcyBzaXplIGluZm9ybWF0aW9uIGluIHRoZXJlISA7LSkgKi8KKyAgICAgICAgd2hpbGUoLS1pbikgeworICAgICAgICAgIC8qIHNjYW4gZm9yIHRoZSBsZWZ0IHBhcmVudGhlc2lzIGFuZCBicmVhayB0aGVyZSAqLworICAgICAgICAgIGlmKCcoJyA9PSAqYnl0ZXMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAvKiBza2lwIG9ubHkgZGlnaXRzICovCisgICAgICAgICAgaWYoIUlTRElHSVQoKmJ5dGVzKSkgeworICAgICAgICAgICAgYnl0ZXM9TlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICAvKiBvbmUgbW9yZSBlc3RlcCBiYWNrd2FyZHMgKi8KKyAgICAgICAgICBieXRlcy0tOworICAgICAgICB9CisgICAgICAgIC8qIGlmIHdlIGhhdmUgbm90aGluZyBidXQgZGlnaXRzOiAqLworICAgICAgICBpZihieXRlcysrKSB7CisgICAgICAgICAgLyogZ2V0IHRoZSBudW1iZXIhICovCisgICAgICAgICAgc2l6ZSA9IGN1cmx4X3N0cnRvb2ZmdChieXRlcywgTlVMTCwgMCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZihmdHAtPmRvd25sb2Fkc2l6ZSA+IC0xKQorICAgICAgc2l6ZSA9IGZ0cC0+ZG93bmxvYWRzaXplOworCisgICAgaWYoc2l6ZSA+IGRhdGEtPnJlcS5tYXhkb3dubG9hZCAmJiBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPiAwKQorICAgICAgc2l6ZSA9IGRhdGEtPnJlcS5zaXplID0gZGF0YS0+cmVxLm1heGRvd25sb2FkOworICAgIGVsc2UgaWYoKGluc3RhdGUgIT0gRlRQX0xJU1QpICYmIChkYXRhLT5zZXQucHJlZmVyX2FzY2lpKSkKKyAgICAgIHNpemUgPSAtMTsgLyoga2x1ZGdlIGZvciBzZXJ2ZXJzIHRoYXQgdW5kZXJzdGF0ZSBBU0NJSSBtb2RlIGZpbGUgc2l6ZSAqLworCisgICAgaW5mb2YoZGF0YSwgIk1heGRvd25sb2FkID0gJSIgRk9STUFUX09GRl9UICJcbiIsIGRhdGEtPnJlcS5tYXhkb3dubG9hZCk7CisKKyAgICBpZihpbnN0YXRlICE9IEZUUF9MSVNUKQorICAgICAgaW5mb2YoZGF0YSwgIkdldHRpbmcgZmlsZSB3aXRoIHNpemU6ICUiIEZPUk1BVF9PRkZfVCAiXG4iLCBzaXplKTsKKworICAgIC8qIEZUUCBkb3dubG9hZDogKi8KKyAgICBjb25uLT5wcm90by5mdHBjLnN0YXRlX3NhdmVkID0gaW5zdGF0ZTsKKyAgICBjb25uLT5wcm90by5mdHBjLnJldHJfc2l6ZV9zYXZlZCA9IHNpemU7CisKKyAgICBpZihkYXRhLT5zZXQuZnRwX3VzZV9wb3J0KSB7CisgICAgICBib29sIGNvbm5lY3RlZDsKKworICAgICAgcmVzdWx0ID0gQWxsb3dTZXJ2ZXJDb25uZWN0KGNvbm4sICZjb25uZWN0ZWQpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICBpZighY29ubmVjdGVkKSB7CisgICAgICAgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOworICAgICAgICBpbmZvZihkYXRhLCAiRGF0YSBjb25uIHdhcyBub3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5XG4iKTsKKyAgICAgICAgc3RhdGUoY29ubiwgRlRQX1NUT1ApOworICAgICAgICBmdHBjLT53YWl0X2RhdGFfY29ubiA9IFRSVUU7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJldHVybiBJbml0aWF0ZVRyYW5zZmVyKGNvbm4pOworICB9CisgIGVsc2UgeworICAgIGlmKChpbnN0YXRlID09IEZUUF9MSVNUKSAmJiAoZnRwY29kZSA9PSA0NTApKSB7CisgICAgICAvKiBzaW1wbHkgbm8gbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIGRpciBsaXN0aW5nICovCisgICAgICBmdHAtPnRyYW5zZmVyID0gRlRQVFJBTlNGRVJfTk9ORTsgLyogZG9uJ3QgZG93bmxvYWQgYW55dGhpbmcgKi8KKyAgICAgIHN0YXRlKGNvbm4sIEZUUF9TVE9QKTsgLyogdGhpcyBwaGFzZSBpcyBvdmVyICovCisgICAgfQorICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIlJFVFIgcmVzcG9uc2U6ICUwM2QiLCBmdHBjb2RlKTsKKyAgICAgIHJldHVybiBpbnN0YXRlID09IEZUUF9SRVRSICYmIGZ0cGNvZGUgPT0gNTUwPworICAgICAgICBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQ6CisgICAgICAgIENVUkxFX0ZUUF9DT1VMRE5UX1JFVFJfRklMRTsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBhZnRlciBVU0VSLCBQQVNTIGFuZCBBQ0NUICovCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3N0YXRlX2xvZ2dlZGluKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyNpZmRlZiBIQVZFX0tSQjQKKyAgaWYoY29ubi0+ZGF0YS0+c2V0LmtyYikgeworICAgIC8qIFdlIG1heSBuZWVkIHRvIGlzc3VlIGEgS0FVVEggaGVyZSB0byBoYXZlIGFjY2VzcyB0byB0aGUgZmlsZXMKKyAgICAgKiBkbyBpdCBpZiB1c2VyIHN1cHBsaWVkIGEgcGFzc3dvcmQKKyAgICAgKi8KKyAgICBpZihjb25uLT5wYXNzd2QgJiYgKmNvbm4tPnBhc3N3ZCkgeworICAgICAgLyogQkxPQ0tJTkcgKi8KKyAgICAgIHJlc3VsdCA9IEN1cmxfa3JiX2thdXRoKGNvbm4pOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgfQorI2VuZGlmCisgIGlmKGNvbm4tPnNzbFtGSVJTVFNPQ0tFVF0udXNlKSB7CisgICAgLyogUEJTWiA9IFBST1RFQ1RJT04gQlVGRkVSIFNJWkUuCisKKyAgICBUaGUgJ2RyYWZ0LW11cnJheS1hdXRoLWZ0cC1zc2wnIChkcmFmdCAxMiwgcGFnZSA3KSBzYXlzOgorCisgICAgU3BlY2lmaWNhbGx5LCB0aGUgUFJPVCBjb21tYW5kIE1VU1QgYmUgcHJlY2VkZWQgYnkgYSBQQlNaCisgICAgY29tbWFuZCBhbmQgYSBQQlNaIGNvbW1hbmQgTVVTVCBiZSBwcmVjZWRlZCBieSBhIHN1Y2Nlc3NmdWwKKyAgICBzZWN1cml0eSBkYXRhIGV4Y2hhbmdlICh0aGUgVExTIG5lZ290aWF0aW9uIGluIHRoaXMgY2FzZSkKKworICAgIC4uLiAoYW5kIG9uIHBhZ2UgOCk6CisKKyAgICBUaHVzIHRoZSBQQlNaIGNvbW1hbmQgbXVzdCBzdGlsbCBiZSBpc3N1ZWQsIGJ1dCBtdXN0IGhhdmUgYQorICAgIHBhcmFtZXRlciBvZiAnMCcgdG8gaW5kaWNhdGUgdGhhdCBubyBidWZmZXJpbmcgaXMgdGFraW5nIHBsYWNlCisgICAgYW5kIHRoZSBkYXRhIGNvbm5lY3Rpb24gc2hvdWxkIG5vdCBiZSBlbmNhcHN1bGF0ZWQuCisgICAgKi8KKyAgICBQUFNFTkRGKCZjb25uLT5wcm90by5mdHBjLnBwLCAiUEJTWiAlZCIsIDApOworICAgIHN0YXRlKGNvbm4sIEZUUF9QQlNaKTsKKyAgfQorICBlbHNlIHsKKyAgICByZXN1bHQgPSBmdHBfc3RhdGVfcHdkKGNvbm4pOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGZvciBVU0VSIGFuZCBQQVNTIHJlc3BvbnNlcyAqLworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZV91c2VyX3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZ0cGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBzdGF0ZSBpbnN0YXRlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgRlRQICpmdHAgPSBkYXRhLT5zdGF0ZS5wcm90by5mdHA7CisgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOworICAodm9pZClpbnN0YXRlOyAvKiBubyB1c2UgZm9yIHRoaXMgeWV0ICovCisKKyAgLyogc29tZSBuZWVkIHBhc3N3b3JkIGFueXdheSwgYW5kIG90aGVycyBqdXN0IHJldHVybiAyeHggaWdub3JlZCAqLworICBpZigoZnRwY29kZSA9PSAzMzEpICYmIChmdHBjLT5zdGF0ZSA9PSBGVFBfVVNFUikpIHsKKyAgICAvKiAzMzEgUGFzc3dvcmQgcmVxdWlyZWQgZm9yIC4uLgorICAgICAgICh0aGUgc2VydmVyIHJlcXVpcmVzIHRvIHNlbmQgdGhlIHVzZXIncyBwYXNzd29yZCB0b28pICovCisgICAgUFBTRU5ERigmZnRwYy0+cHAsICJQQVNTICVzIiwgZnRwLT5wYXNzd2Q/ZnRwLT5wYXNzd2Q6IiIpOworICAgIHN0YXRlKGNvbm4sIEZUUF9QQVNTKTsKKyAgfQorICBlbHNlIGlmKGZ0cGNvZGUvMTAwID09IDIpIHsKKyAgICAvKiAyMzAgVXNlciAuLi4gbG9nZ2VkIGluLgorICAgICAgICh0aGUgdXNlciBsb2dnZWQgaW4gd2l0aCBvciB3aXRob3V0IHBhc3N3b3JkKSAqLworICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9sb2dnZWRpbihjb25uKTsKKyAgfQorICBlbHNlIGlmKGZ0cGNvZGUgPT0gMzMyKSB7CisgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfRlRQX0FDQ09VTlRdKSB7CisgICAgICBQUFNFTkRGKCZmdHBjLT5wcCwgIkFDQ1QgJXMiLCBkYXRhLT5zZXQuc3RyW1NUUklOR19GVFBfQUNDT1VOVF0pOworICAgICAgc3RhdGUoY29ubiwgRlRQX0FDQ1QpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGZhaWxmKGRhdGEsICJBQ0NUIHJlcXVlc3RlZCBidXQgbm9uZSBhdmFpbGFibGUiKTsKKyAgICAgIHJlc3VsdCA9IENVUkxFX0xPR0lOX0RFTklFRDsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogQWxsIG90aGVyIHJlc3BvbnNlIGNvZGVzLCBsaWtlOgorCisgICAgNTMwIFVzZXIgLi4uIGFjY2VzcyBkZW5pZWQKKyAgICAodGhlIHNlcnZlciBkZW5pZXMgdG8gbG9nIHRoZSBzcGVjaWZpZWQgdXNlcikgKi8KKworICAgIGlmKGNvbm4tPmRhdGEtPnNldC5zdHJbU1RSSU5HX0ZUUF9BTFRFUk5BVElWRV9UT19VU0VSXSAmJgorICAgICAgICAhY29ubi0+ZGF0YS0+c3RhdGUuZnRwX3RyeWluZ19hbHRlcm5hdGl2ZSkgeworICAgICAgLyogT2ssIFVTRVIgZmFpbGVkLiAgTGV0J3MgdHJ5IHRoZSBzdXBwbGllZCBjb21tYW5kLiAqLworICAgICAgUFBTRU5ERigmY29ubi0+cHJvdG8uZnRwYy5wcCwgIiVzIiwKKyAgICAgICAgICAgICAgY29ubi0+ZGF0YS0+c2V0LnN0cltTVFJJTkdfRlRQX0FMVEVSTkFUSVZFX1RPX1VTRVJdKTsKKyAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLmZ0cF90cnlpbmdfYWx0ZXJuYXRpdmUgPSBUUlVFOworICAgICAgc3RhdGUoY29ubiwgRlRQX1VTRVIpOworICAgICAgcmVzdWx0ID0gQ1VSTEVfT0s7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIkFjY2VzcyBkZW5pZWQ6ICUwM2QiLCBmdHBjb2RlKTsKKyAgICAgIHJlc3VsdCA9IENVUkxFX0xPR0lOX0RFTklFRDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogZm9yIEFDQ1QgcmVzcG9uc2UgKi8KK3N0YXRpYyBDVVJMY29kZSBmdHBfc3RhdGVfYWNjdF9yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmdHBjb2RlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBpZihmdHBjb2RlICE9IDIzMCkgeworICAgIGZhaWxmKGRhdGEsICJBQ0NUIHJlamVjdGVkIGJ5IHNlcnZlcjogJTAzZCIsIGZ0cGNvZGUpOworICAgIHJlc3VsdCA9IENVUkxFX0ZUUF9XRUlSRF9QQVNTX1JFUExZOyAvKiBGSVggKi8KKyAgfQorICBlbHNlCisgICAgcmVzdWx0ID0gZnRwX3N0YXRlX2xvZ2dlZGluKGNvbm4pOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIENVUkxjb2RlIGZ0cF9zdGF0ZW1hY2hfYWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9Y29ubi0+ZGF0YTsKKyAgaW50IGZ0cGNvZGU7CisgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOworICBzdHJ1Y3QgcGluZ3BvbmcgKnBwID0gJmZ0cGMtPnBwOworICBzdGF0aWMgY29uc3QgY2hhciBmdHBhdXRoW11bNF0gID0geyAiU1NMIiwgIlRMUyIgfTsKKyAgc2l6ZV90IG5yZWFkID0gMDsKKworICBpZihwcC0+c2VuZGxlZnQpCisgICAgcmV0dXJuIEN1cmxfcHBfZmx1c2hzZW5kKHBwKTsKKworICByZXN1bHQgPSBmdHBfcmVhZHJlc3Aoc29jaywgcHAsICZmdHBjb2RlLCAmbnJlYWQpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBpZihmdHBjb2RlKSB7CisgICAgLyogd2UgaGF2ZSBub3cgcmVjZWl2ZWQgYSBmdWxsIEZUUCBzZXJ2ZXIgcmVzcG9uc2UgKi8KKyAgICBzd2l0Y2goZnRwYy0+c3RhdGUpIHsKKyAgICBjYXNlIEZUUF9XQUlUMjIwOgorICAgICAgaWYoZnRwY29kZSAhPSAyMjApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkdvdCBhICUwM2QgZnRwLXNlcnZlciByZXNwb25zZSB3aGVuIDIyMCB3YXMgZXhwZWN0ZWQiLAorICAgICAgICAgICAgICBmdHBjb2RlKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFk7CisgICAgICB9CisKKyAgICAgIC8qIFdlIGhhdmUgcmVjZWl2ZWQgYSAyMjAgcmVzcG9uc2UgZmluZSwgbm93IHdlIHByb2NlZWQuICovCisjaWYgZGVmaW5lZChIQVZFX0tSQjQpIHx8IGRlZmluZWQoSEFWRV9HU1NBUEkpCisgICAgICBpZihkYXRhLT5zZXQua3JiKSB7CisgICAgICAgIC8qIElmIG5vdCBhbm9ueW1vdXMgbG9naW4sIHRyeSBhIHNlY3VyZSBsb2dpbi4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgICAgcHJvY2VkdXJlIGlzIHN0aWxsIEJMT0NLSU5HLiAqLworCisgICAgICAgIEN1cmxfc2VjX3JlcXVlc3RfcHJvdChjb25uLCAicHJpdmF0ZSIpOworICAgICAgICAvKiBXZSBzZXQgcHJpdmF0ZSBmaXJzdCBhcyBkZWZhdWx0LCBpbiBjYXNlIHRoZSBsaW5lIGJlbG93IGZhaWxzIHRvCisgICAgICAgICAgIHNldCBhIHZhbGlkIGxldmVsICovCisgICAgICAgIEN1cmxfc2VjX3JlcXVlc3RfcHJvdChjb25uLCBkYXRhLT5zZXQuc3RyW1NUUklOR19LUkJfTEVWRUxdKTsKKworICAgICAgICBpZihDdXJsX3NlY19sb2dpbihjb25uKSAhPSBDVVJMRV9PSykKKyAgICAgICAgICBpbmZvZihkYXRhLCAiTG9nZ2luZyBpbiB3aXRoIHBhc3N3b3JkIGluIGNsZWFydGV4dCFcbiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIGlmKGRhdGEtPnNldC51c2Vfc3NsICYmICFjb25uLT5zc2xbRklSU1RTT0NLRVRdLnVzZSkgeworICAgICAgICAvKiBXZSBkb24ndCBoYXZlIGEgU1NML1RMUyBjb25uZWN0aW9uIHlldCwgYnV0IEZUUFMgaXMKKyAgICAgICAgICAgcmVxdWVzdGVkLiBUcnkgYSBGVFBTIGNvbm5lY3Rpb24gbm93ICovCisKKyAgICAgICAgZnRwYy0+Y291bnQzPTA7CisgICAgICAgIHN3aXRjaChkYXRhLT5zZXQuZnRwc3NsYXV0aCkgeworICAgICAgICBjYXNlIENVUkxGVFBBVVRIX0RFRkFVTFQ6CisgICAgICAgIGNhc2UgQ1VSTEZUUEFVVEhfU1NMOgorICAgICAgICAgIGZ0cGMtPmNvdW50MiA9IDE7IC8qIGFkZCBvbmUgdG8gZ2V0IG5leHQgKi8KKyAgICAgICAgICBmdHBjLT5jb3VudDEgPSAwOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENVUkxGVFBBVVRIX1RMUzoKKyAgICAgICAgICBmdHBjLT5jb3VudDIgPSAtMTsgLyogc3VidHJhY3Qgb25lIHRvIGdldCBuZXh0ICovCisgICAgICAgICAgZnRwYy0+Y291bnQxID0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBmYWlsZihkYXRhLCAidW5zdXBwb3J0ZWQgcGFyYW1ldGVyIHRvIENVUkxPUFRfRlRQU1NMQVVUSDogJWQiLAorICAgICAgICAgICAgICAgIChpbnQpZGF0YS0+c2V0LmZ0cHNzbGF1dGgpOworICAgICAgICAgIHJldHVybiBDVVJMRV9VTktOT1dOX09QVElPTjsgLyogd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvICovCisgICAgICAgIH0KKyAgICAgICAgUFBTRU5ERigmZnRwYy0+cHAsICJBVVRIICVzIiwgZnRwYXV0aFtmdHBjLT5jb3VudDFdKTsKKyAgICAgICAgc3RhdGUoY29ubiwgRlRQX0FVVEgpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV91c2VyKGNvbm4pOworICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUUF9BVVRIOgorICAgICAgLyogd2UgaGF2ZSBnb3R0ZW4gdGhlIHJlc3BvbnNlIHRvIGEgcHJldmlvdXMgQVVUSCBjb21tYW5kICovCisKKyAgICAgIC8qIFJGQzIyMjggKHBhZ2UgNSkgc2F5czoKKyAgICAgICAqCisgICAgICAgKiBJZiB0aGUgc2VydmVyIGlzIHdpbGxpbmcgdG8gYWNjZXB0IHRoZSBuYW1lZCBzZWN1cml0eSBtZWNoYW5pc20sCisgICAgICAgKiBhbmQgZG9lcyBub3QgcmVxdWlyZSBhbnkgc2VjdXJpdHkgZGF0YSwgaXQgbXVzdCByZXNwb25kIHdpdGgKKyAgICAgICAqIHJlcGx5IGNvZGUgMjM0LzMzNC4KKyAgICAgICAqLworCisgICAgICBpZigoZnRwY29kZSA9PSAyMzQpIHx8IChmdHBjb2RlID09IDMzNCkpIHsKKyAgICAgICAgLyogQ3VybF9zc2xfY29ubmVjdCBpcyBCTE9DS0lORyAqLworICAgICAgICByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0KGNvbm4sIEZJUlNUU09DS0VUKTsKKyAgICAgICAgaWYoQ1VSTEVfT0sgPT0gcmVzdWx0KSB7CisgICAgICAgICAgY29ubi0+c3NsW1NFQ09OREFSWVNPQ0tFVF0udXNlID0gRkFMU0U7IC8qIGNsZWFyLXRleHQgZGF0YSAqLworICAgICAgICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV91c2VyKGNvbm4pOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmKGZ0cGMtPmNvdW50MyA8IDEpIHsKKyAgICAgICAgZnRwYy0+Y291bnQzKys7CisgICAgICAgIGZ0cGMtPmNvdW50MSArPSBmdHBjLT5jb3VudDI7IC8qIGdldCBuZXh0IGF0dGVtcHQgKi8KKyAgICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmZnRwYy0+cHAsICJBVVRIICVzIiwgZnRwYXV0aFtmdHBjLT5jb3VudDFdKTsKKyAgICAgICAgLyogcmVtYWluIGluIHRoaXMgc2FtZSBzdGF0ZSAqLworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGlmKGRhdGEtPnNldC51c2Vfc3NsID4gQ1VSTFVTRVNTTF9UUlkpCisgICAgICAgICAgLyogd2UgZmFpbGVkIGFuZCBDVVJMVVNFU1NMX0NPTlRST0wgb3IgQ1VSTFVTRVNTTF9BTEwgaXMgc2V0ICovCisgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfVVNFX1NTTF9GQUlMRUQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAvKiBpZ25vcmUgdGhlIGZhaWx1cmUgYW5kIGNvbnRpbnVlICovCisgICAgICAgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3VzZXIoY29ubik7CisgICAgICB9CisKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVFBfVVNFUjoKKyAgICBjYXNlIEZUUF9QQVNTOgorICAgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3VzZXJfcmVzcChjb25uLCBmdHBjb2RlLCBmdHBjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRQX0FDQ1Q6CisgICAgICByZXN1bHQgPSBmdHBfc3RhdGVfYWNjdF9yZXNwKGNvbm4sIGZ0cGNvZGUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUUF9QQlNaOgorICAgICAgUFBTRU5ERigmZnRwYy0+cHAsICJQUk9UICVjIiwKKyAgICAgICAgICAgICAgZGF0YS0+c2V0LnVzZV9zc2wgPT0gQ1VSTFVTRVNTTF9DT05UUk9MID8gJ0MnIDogJ1AnKTsKKyAgICAgIHN0YXRlKGNvbm4sIEZUUF9QUk9UKTsKKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUUF9QUk9UOgorICAgICAgaWYoZnRwY29kZS8xMDAgPT0gMikKKyAgICAgICAgLyogV2UgaGF2ZSBlbmFibGVkIFNTTCBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbiEgKi8KKyAgICAgICAgY29ubi0+c3NsW1NFQ09OREFSWVNPQ0tFVF0udXNlID0KKyAgICAgICAgICAoZGF0YS0+c2V0LnVzZV9zc2wgIT0gQ1VSTFVTRVNTTF9DT05UUk9MKSA/IFRSVUUgOiBGQUxTRTsKKyAgICAgIC8qIEZUUCBzZXJ2ZXJzIHR5cGljYWxseSByZXNwb25kcyB3aXRoIDUwMCBpZiB0aGV5IGRlY2lkZSB0byByZWplY3QKKyAgICAgICAgIG91ciAnUCcgcmVxdWVzdCAqLworICAgICAgZWxzZSBpZihkYXRhLT5zZXQudXNlX3NzbCA+IENVUkxVU0VTU0xfQ09OVFJPTCkKKyAgICAgICAgLyogd2UgZmFpbGVkIGFuZCBiYWlscyBvdXQgKi8KKyAgICAgICAgcmV0dXJuIENVUkxFX1VTRV9TU0xfRkFJTEVEOworCisgICAgICBpZihkYXRhLT5zZXQuZnRwX2NjYykgeworICAgICAgICAvKiBDQ0MgLSBDbGVhciBDb21tYW5kIENoYW5uZWwKKyAgICAgICAgICovCisgICAgICAgIFBQU0VOREYoJmZ0cGMtPnBwLCAiQ0NDIiwgTlVMTCk7CisgICAgICAgIHN0YXRlKGNvbm4sIEZUUF9DQ0MpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9wd2QoY29ubik7CisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUUF9DQ0M6CisgICAgICBpZihmdHBjb2RlIDwgNTAwKSB7CisgICAgICAgIC8qIEZpcnN0IHNodXQgZG93biB0aGUgU1NMIGxheWVyIChub3RlOiB0aGlzIGNhbGwgd2lsbCBibG9jaykgKi8KKyAgICAgICAgcmVzdWx0ID0gQ3VybF9zc2xfc2h1dGRvd24oY29ubiwgRklSU1RTT0NLRVQpOworCisgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJGYWlsZWQgdG8gY2xlYXIgdGhlIGNvbW1hbmQgY2hhbm5lbCAoQ0NDKSIpOworICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogVGhlbiBjb250aW51ZSBhcyBub3JtYWwgKi8KKyAgICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9wd2QoY29ubik7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRQX1BXRDoKKyAgICAgIGlmKGZ0cGNvZGUgPT0gMjU3KSB7CisgICAgICAgIGNoYXIgKnB0cj0mZGF0YS0+c3RhdGUuYnVmZmVyWzRdOyAgLyogc3RhcnQgb24gdGhlIGZpcnN0IGxldHRlciAqLworICAgICAgICBjaGFyICpkaXI7CisgICAgICAgIGNoYXIgKnN0b3JlOworCisgICAgICAgIGRpciA9IG1hbGxvYyhucmVhZCArIDEpOworICAgICAgICBpZighZGlyKQorICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgICAgICAgIC8qIFJlcGx5IGZvcm1hdCBpcyBsaWtlCisgICAgICAgICAgIDI1NzxzcGFjZT4iPGRpcmVjdG9yeS1uYW1lPiI8c3BhY2U+PGNvbW1lbnRhcnk+IGFuZCB0aGUgUkZDOTU5CisgICAgICAgICAgIHNheXMKKworICAgICAgICAgICBUaGUgZGlyZWN0b3J5IG5hbWUgY2FuIGNvbnRhaW4gYW55IGNoYXJhY3RlcjsgZW1iZWRkZWQKKyAgICAgICAgICAgZG91YmxlLXF1b3RlcyBzaG91bGQgYmUgZXNjYXBlZCBieSBkb3VibGUtcXVvdGVzICh0aGUKKyAgICAgICAgICAgInF1b3RlLWRvdWJsaW5nIiBjb252ZW50aW9uKS4KKyAgICAgICAgKi8KKyAgICAgICAgaWYoJ1wiJyA9PSAqcHRyKSB7CisgICAgICAgICAgLyogaXQgc3RhcnRlZCBnb29kICovCisgICAgICAgICAgcHRyKys7CisgICAgICAgICAgZm9yKHN0b3JlID0gZGlyOyAqcHRyOykgeworICAgICAgICAgICAgaWYoJ1wiJyA9PSAqcHRyKSB7CisgICAgICAgICAgICAgIGlmKCdcIicgPT0gcHRyWzFdKSB7CisgICAgICAgICAgICAgICAgLyogInF1b3RlLWRvdWJsaW5nIiAqLworICAgICAgICAgICAgICAgICpzdG9yZSA9IHB0clsxXTsKKyAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBlbmQgb2YgcGF0aCAqLworICAgICAgICAgICAgICAgICpzdG9yZSA9ICdcMCc7IC8qIHplcm8gdGVybWluYXRlICovCisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGdldCBvdXQgb2YgdGhpcyBsb29wICovCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgKnN0b3JlID0gKnB0cjsKKyAgICAgICAgICAgIHN0b3JlKys7CisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBJZiB0aGUgcGF0aCBuYW1lIGRvZXMgbm90IGxvb2sgbGlrZSBhbiBhYnNvbHV0ZSBwYXRoIChpLmUuOiBpdAorICAgICAgICAgICAgIGRvZXMgbm90IHN0YXJ0IHdpdGggYSAnLycpLCB3ZSBwcm9iYWJseSBuZWVkIHNvbWUgc2VydmVyLWRlcGVuZGVudAorICAgICAgICAgICAgIGFkanVzdG1lbnRzLiBGb3IgZXhhbXBsZSwgdGhpcyBpcyB0aGUgY2FzZSB3aGVuIGNvbm5lY3RpbmcgdG8KKyAgICAgICAgICAgICBhbiBPUzQwMCBGVFAgc2VydmVyOiB0aGlzIHNlcnZlciBzdXBwb3J0cyB0d28gbmFtZSBzeW50YXhlcywKKyAgICAgICAgICAgICB0aGUgZGVmYXVsdCBvbmUgYmVpbmcgaW5jb21wYXRpYmxlIHdpdGggc3RhbmRhcmQgcGF0aGVzLiBJbgorICAgICAgICAgICAgIGFkZGl0aW9uLCB0aGlzIHNlcnZlciBzd2l0Y2hlcyBhdXRvbWF0aWNhbGx5IHRvIHRoZSByZWd1bGFyIHBhdGgKKyAgICAgICAgICAgICBzeW50YXggd2hlbiBvbmUgaXMgZW5jb3VudGVyZWQgaW4gYSBjb21tYW5kOiB0aGlzIHJlc3VsdHMgaW4KKyAgICAgICAgICAgICBoYXZpbmcgYW4gZW50cnlwYXRoIGluIHRoZSB3cm9uZyBzeW50YXggd2hlbiBsYXRlciB1c2VkIGluIENXRC4KKyAgICAgICAgICAgICAgIFRoZSBtZXRob2QgdXNlZCBoZXJlIGlzIHRvIGNoZWNrIHRoZSBzZXJ2ZXIgT1M6IHdlIGRvIGl0IG9ubHkKKyAgICAgICAgICAgICBpZiB0aGUgcGF0aCBuYW1lIGxvb2tzIHN0cmFuZ2UgdG8gbWluaW1pemUgb3ZlcmhlYWQgb24gb3RoZXIKKyAgICAgICAgICAgICBzeXN0ZW1zLiAqLworCisgICAgICAgICAgaWYoIWZ0cGMtPnNlcnZlcl9vcyAmJiBkaXJbMF0gIT0gJy8nKSB7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmZ0cGMtPnBwLCAiU1lTVCIsIE5VTEwpOworICAgICAgICAgICAgaWYocmVzdWx0ICE9IENVUkxFX09LKSB7CisgICAgICAgICAgICAgIGZyZWUoZGlyKTsKKyAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoZnRwYy0+ZW50cnlwYXRoKTsKKyAgICAgICAgICAgIGZ0cGMtPmVudHJ5cGF0aCA9IGRpcjsgLyogcmVtZW1iZXIgdGhpcyAqLworICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkVudHJ5IHBhdGggaXMgJyVzJ1xuIiwgZnRwYy0+ZW50cnlwYXRoKTsKKyAgICAgICAgICAgIC8qIGFsc28gc2F2ZSBpdCB3aGVyZSBnZXRpbmZvIGNhbiBhY2Nlc3MgaXQ6ICovCisgICAgICAgICAgICBkYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gZnRwYy0+ZW50cnlwYXRoOworICAgICAgICAgICAgc3RhdGUoY29ubiwgRlRQX1NZU1QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgQ3VybF9zYWZlZnJlZShmdHBjLT5lbnRyeXBhdGgpOworICAgICAgICAgIGZ0cGMtPmVudHJ5cGF0aCA9IGRpcjsgLyogcmVtZW1iZXIgdGhpcyAqLworICAgICAgICAgIGluZm9mKGRhdGEsICJFbnRyeSBwYXRoIGlzICclcydcbiIsIGZ0cGMtPmVudHJ5cGF0aCk7CisgICAgICAgICAgLyogYWxzbyBzYXZlIGl0IHdoZXJlIGdldGluZm8gY2FuIGFjY2VzcyBpdDogKi8KKyAgICAgICAgICBkYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gZnRwYy0+ZW50cnlwYXRoOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIC8qIGNvdWxkbid0IGdldCB0aGUgcGF0aCAqLworICAgICAgICAgIGZyZWUoZGlyKTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGZpZ3VyZSBvdXQgcGF0aFxuIik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIEZUUF9TVE9QKTsgLyogd2UgYXJlIGRvbmUgd2l0aCB0aGUgQ09OTkVDVCBwaGFzZSEgKi8KKyAgICAgIERFQlVHRihpbmZvZihkYXRhLCAicHJvdG9jb2wgY29ubmVjdCBwaGFzZSBET05FXG4iKSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRQX1NZU1Q6CisgICAgICBpZihmdHBjb2RlID09IDIxNSkgeworICAgICAgICBjaGFyICpwdHI9JmRhdGEtPnN0YXRlLmJ1ZmZlcls0XTsgIC8qIHN0YXJ0IG9uIHRoZSBmaXJzdCBsZXR0ZXIgKi8KKyAgICAgICAgY2hhciAqb3M7CisgICAgICAgIGNoYXIgKnN0b3JlOworCisgICAgICAgIG9zID0gbWFsbG9jKG5yZWFkICsgMSk7CisgICAgICAgIGlmKCFvcykKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgICAgICAvKiBSZXBseSBmb3JtYXQgaXMgbGlrZQorICAgICAgICAgICAyMTU8c3BhY2U+PE9TLW5hbWU+PHNwYWNlPjxjb21tZW50YXJ5PgorICAgICAgICAqLworICAgICAgICB3aGlsZSgqcHRyID09ICcgJykKKyAgICAgICAgICBwdHIrKzsKKyAgICAgICAgZm9yKHN0b3JlID0gb3M7ICpwdHIgJiYgKnB0ciAhPSAnICc7KQorICAgICAgICAgICpzdG9yZSsrID0gKnB0cisrOworICAgICAgICAqc3RvcmUgPSAnXDAnOyAvKiB6ZXJvIHRlcm1pbmF0ZSAqLworCisgICAgICAgIC8qIENoZWNrIGZvciBzcGVjaWFsIHNlcnZlcnMgaGVyZS4gKi8KKworICAgICAgICBpZihzdHJlcXVhbChvcywgIk9TLzQwMCIpKSB7CisgICAgICAgICAgLyogRm9yY2UgT1M0MDAgbmFtZSBmb3JtYXQgMS4gKi8KKyAgICAgICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZmdHBjLT5wcCwgIlNJVEUgTkFNRUZNVCAxIiwgTlVMTCk7CisgICAgICAgICAgaWYocmVzdWx0ICE9IENVUkxFX09LKSB7CisgICAgICAgICAgICBmcmVlKG9zKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIHJlbWVtYmVyIHRhcmdldCBzZXJ2ZXIgT1MgKi8KKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKGZ0cGMtPnNlcnZlcl9vcyk7CisgICAgICAgICAgZnRwYy0+c2VydmVyX29zID0gb3M7CisgICAgICAgICAgc3RhdGUoY29ubiwgRlRQX05BTUVGTVQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIC8qIE5vdGhpbmcgc3BlY2lhbCBmb3IgdGhlIHRhcmdldCBzZXJ2ZXIuICovCisgICAgICAgICAgLyogcmVtZW1iZXIgdGFyZ2V0IHNlcnZlciBPUyAqLworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoZnRwYy0+c2VydmVyX29zKTsKKyAgICAgICAgICBmdHBjLT5zZXJ2ZXJfb3MgPSBvczsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIENhbm5vdCBpZGVudGlmeSBzZXJ2ZXIgT1MuIENvbnRpbnVlIGFueXdheSBhbmQgY3Jvc3MgZmluZ2Vycy4gKi8KKyAgICAgIH0KKworICAgICAgc3RhdGUoY29ubiwgRlRQX1NUT1ApOyAvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBDT05ORUNUIHBoYXNlISAqLworICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJwcm90b2NvbCBjb25uZWN0IHBoYXNlIERPTkVcbiIpKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVFBfTkFNRUZNVDoKKyAgICAgIGlmKGZ0cGNvZGUgPT0gMjUwKSB7CisgICAgICAgIC8qIE5hbWUgZm9ybWF0IGNoYW5nZSBzdWNjZXNzZnVsOiByZWxvYWQgaW5pdGlhbCBwYXRoLiAqLworICAgICAgICBmdHBfc3RhdGVfcHdkKGNvbm4pOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgc3RhdGUoY29ubiwgRlRQX1NUT1ApOyAvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBDT05ORUNUIHBoYXNlISAqLworICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJwcm90b2NvbCBjb25uZWN0IHBoYXNlIERPTkVcbiIpKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVFBfUVVPVEU6CisgICAgY2FzZSBGVFBfUE9TVFFVT1RFOgorICAgIGNhc2UgRlRQX1JFVFJfUFJFUVVPVEU6CisgICAgY2FzZSBGVFBfU1RPUl9QUkVRVU9URToKKyAgICAgIGlmKChmdHBjb2RlID49IDQwMCkgJiYgIWZ0cGMtPmNvdW50MikgeworICAgICAgICAvKiBmYWlsdXJlIHJlc3BvbnNlIGNvZGUsIGFuZCBub3QgYWxsb3dlZCB0byBmYWlsICovCisgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJRVU9UIGNvbW1hbmQgZmFpbGVkIHdpdGggJTAzZCIsIGZ0cGNvZGUpOworICAgICAgICByZXR1cm4gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICB9CisgICAgICByZXN1bHQgPSBmdHBfc3RhdGVfcXVvdGUoY29ubiwgRkFMU0UsIGZ0cGMtPnN0YXRlKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUUF9DV0Q6CisgICAgICBpZihmdHBjb2RlLzEwMCAhPSAyKSB7CisgICAgICAgIC8qIGZhaWx1cmUgdG8gQ1dEIHRoZXJlICovCisgICAgICAgIGlmKGNvbm4tPmRhdGEtPnNldC5mdHBfY3JlYXRlX21pc3NpbmdfZGlycyAmJgorICAgICAgICAgICBmdHBjLT5jb3VudDEgJiYgIWZ0cGMtPmNvdW50MikgeworICAgICAgICAgIC8qIHRyeSBtYWtpbmcgaXQgKi8KKyAgICAgICAgICBmdHBjLT5jb3VudDIrKzsgLyogY291bnRlciB0byBwcmV2ZW50IENXRC1NS0QgbG9vcHMgKi8KKyAgICAgICAgICBQUFNFTkRGKCZmdHBjLT5wcCwgIk1LRCAlcyIsIGZ0cGMtPmRpcnNbZnRwYy0+Y291bnQxIC0gMV0pOworICAgICAgICAgIHN0YXRlKGNvbm4sIEZUUF9NS0QpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIC8qIHJldHVybiBmYWlsdXJlICovCisgICAgICAgICAgZmFpbGYoZGF0YSwgIlNlcnZlciBkZW5pZWQgeW91IHRvIGNoYW5nZSB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5Iik7CisgICAgICAgICAgZnRwYy0+Y3dkZmFpbCA9IFRSVUU7IC8qIGRvbid0IHJlbWVtYmVyIHRoaXMgcGF0aCBhcyB3ZSBmYWlsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZW50ZXIgaXQgKi8KKyAgICAgICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBzdWNjZXNzICovCisgICAgICAgIGZ0cGMtPmNvdW50Mj0wOworICAgICAgICBpZigrK2Z0cGMtPmNvdW50MSA8PSBmdHBjLT5kaXJkZXB0aCkgeworICAgICAgICAgIC8qIHNlbmQgbmV4dCBDV0QgKi8KKyAgICAgICAgICBQUFNFTkRGKCZmdHBjLT5wcCwgIkNXRCAlcyIsIGZ0cGMtPmRpcnNbZnRwYy0+Y291bnQxIC0gMV0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9wb3N0X2N3ZChjb25uKTsKKyAgICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRQX01LRDoKKyAgICAgIGlmKChmdHBjb2RlLzEwMCAhPSAyKSAmJiAhZnRwYy0+Y291bnQzLS0pIHsKKyAgICAgICAgLyogZmFpbHVyZSB0byBNS0QgdGhlIGRpciAqLworICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIE1LRCBkaXI6ICUwM2QiLCBmdHBjb2RlKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgRlRQX0NXRCk7CisgICAgICAvKiBzZW5kIENXRCAqLworICAgICAgUFBTRU5ERigmZnRwYy0+cHAsICJDV0QgJXMiLCBmdHBjLT5kaXJzW2Z0cGMtPmNvdW50MSAtIDFdKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVFBfTURUTToKKyAgICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9tZHRtX3Jlc3AoY29ubiwgZnRwY29kZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRQX1RZUEU6CisgICAgY2FzZSBGVFBfTElTVF9UWVBFOgorICAgIGNhc2UgRlRQX1JFVFJfVFlQRToKKyAgICBjYXNlIEZUUF9TVE9SX1RZUEU6CisgICAgICByZXN1bHQgPSBmdHBfc3RhdGVfdHlwZV9yZXNwKGNvbm4sIGZ0cGNvZGUsIGZ0cGMtPnN0YXRlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVFBfU0laRToKKyAgICBjYXNlIEZUUF9SRVRSX1NJWkU6CisgICAgY2FzZSBGVFBfU1RPUl9TSVpFOgorICAgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3NpemVfcmVzcChjb25uLCBmdHBjb2RlLCBmdHBjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRQX1JFU1Q6CisgICAgY2FzZSBGVFBfUkVUUl9SRVNUOgorICAgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3Jlc3RfcmVzcChjb25uLCBmdHBjb2RlLCBmdHBjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRQX1BSRVQ6CisgICAgICBpZihmdHBjb2RlICE9IDIwMCkgeworICAgICAgICAvKiB0aGVyZSBvbmx5IGlzIHRoaXMgb25lIHN0YW5kYXJkIE9LIHJldHVybiBjb2RlLiAqLworICAgICAgICBmYWlsZihkYXRhLCAiUFJFVCBjb21tYW5kIG5vdCBhY2NlcHRlZDogJTAzZCIsIGZ0cGNvZGUpOworICAgICAgICByZXR1cm4gQ1VSTEVfRlRQX1BSRVRfRkFJTEVEOworICAgICAgfQorICAgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3VzZV9wYXN2KGNvbm4pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZUUF9QQVNWOgorICAgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3Bhc3ZfcmVzcChjb25uLCBmdHBjb2RlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVFBfUE9SVDoKKyAgICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9wb3J0X3Jlc3AoY29ubiwgZnRwY29kZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRQX0xJU1Q6CisgICAgY2FzZSBGVFBfUkVUUjoKKyAgICAgIHJlc3VsdCA9IGZ0cF9zdGF0ZV9nZXRfcmVzcChjb25uLCBmdHBjb2RlLCBmdHBjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRQX1NUT1I6CisgICAgICByZXN1bHQgPSBmdHBfc3RhdGVfc3Rvcl9yZXNwKGNvbm4sIGZ0cGNvZGUsIGZ0cGMtPnN0YXRlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVFBfUVVJVDoKKyAgICAgIC8qIGZhbGx0aHJvdWdoLCBqdXN0IHN0b3AhICovCisgICAgZGVmYXVsdDoKKyAgICAgIC8qIGludGVybmFsIGVycm9yICovCisgICAgICBzdGF0ZShjb25uLCBGVFBfU1RPUCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0gLyogaWYoZnRwY29kZSkgKi8KKworICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qIGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGRvbmUgZnJvbSBtdWx0aS5jICovCitzdGF0aWMgQ1VSTGNvZGUgZnRwX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9wcF9tdWx0aV9zdGF0ZW1hY2goJmZ0cGMtPnBwKTsKKworICAvKiBDaGVjayBmb3IgdGhlIHN0YXRlIG91dHNpZGUgb2YgdGhlIEN1cmxfc29ja2V0X3JlYWR5KCkgcmV0dXJuIGNvZGUgY2hlY2tzCisgICAgIHNpbmNlIGF0IHRpbWVzIHdlIGFyZSBpbiBmYWN0IGFscmVhZHkgaW4gdGhpcyBzdGF0ZSB3aGVuIHRoaXMgZnVuY3Rpb24KKyAgICAgZ2V0cyBjYWxsZWQuICovCisgICpkb25lID0gKGZ0cGMtPnN0YXRlID09IEZUUF9TVE9QKSA/IFRSVUUgOiBGQUxTRTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgZnRwX2Vhc3lfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisgIHN0cnVjdCBwaW5ncG9uZyAqcHAgPSAmZnRwYy0+cHA7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIHdoaWxlKGZ0cGMtPnN0YXRlICE9IEZUUF9TVE9QKSB7CisgICAgcmVzdWx0ID0gQ3VybF9wcF9lYXN5X3N0YXRlbWFjaChwcCk7CisgICAgaWYocmVzdWx0KQorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIHN0cnVjdCBGVFAgZm9yIHRoZSBjdXJyZW50IFNlc3Npb25IYW5kbGUuICBJZgorICogbmVlZCBiZS4KKyAqLworCisjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSAmJiAoX19JTlRFTF9DT01QSUxFUiA9PSA5MTApICYmIFwKKyAgICBkZWZpbmVkKF9fT1BUSU1JWkVfXykgJiYgZGVmaW5lZChfX3VuaXhfXykgJiYgZGVmaW5lZChfX2kzODZfXykKKyAgLyogd29ya2Fyb3VuZCBpY2MgOS4xIG9wdGltaXplciBpc3N1ZSAqLworI3ByYWdtYSBvcHRpbWl6ZSgiIiwgb2ZmKQorI2VuZGlmCisKK3N0YXRpYyBDVVJMY29kZSBmdHBfaW5pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBGVFAgKmZ0cDsKKworICBpZihOVUxMID09IGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLmZ0cCkgeworICAgIGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLmZ0cCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IEZUUCkpOworICAgIGlmKE5VTEwgPT0gY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8uZnRwKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICBmdHAgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5mdHA7CisKKyAgLyogZ2V0IHNvbWUgaW5pdGlhbCBkYXRhIGludG8gdGhlIGZ0cCBzdHJ1Y3QgKi8KKyAgZnRwLT5ieXRlY291bnRwID0gJmNvbm4tPmRhdGEtPnJlcS5ieXRlY291bnQ7CisgIGZ0cC0+dHJhbnNmZXIgPSBGVFBUUkFOU0ZFUl9CT0RZOworICBmdHAtPmRvd25sb2Fkc2l6ZSA9IDA7CisKKyAgLyogTm8gbmVlZCB0byBkdXBsaWNhdGUgdXNlcitwYXNzd29yZCwgdGhlIGNvbm5lY3RkYXRhIHN0cnVjdCB3b24ndCBjaGFuZ2UKKyAgICAgZHVyaW5nIGEgc2Vzc2lvbiwgYnV0IHdlIHJlLWluaXQgdGhlbSBoZXJlIHNpbmNlIG9uIHN1YnNlcXVlbnQgaW5pdHMKKyAgICAgc2luY2UgdGhlIGNvbm4gc3RydWN0IG1heSBoYXZlIGNoYW5nZWQgb3IgYmVlbiByZXBsYWNlZC4KKyAgKi8KKyAgZnRwLT51c2VyID0gY29ubi0+dXNlcjsKKyAgZnRwLT5wYXNzd2QgPSBjb25uLT5wYXNzd2Q7CisgIGlmKGlzQmFkRnRwU3RyaW5nKGZ0cC0+dXNlcikpCisgICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7CisgIGlmKGlzQmFkRnRwU3RyaW5nKGZ0cC0+cGFzc3dkKSkKKyAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKKworICBjb25uLT5wcm90by5mdHBjLmtub3duX2ZpbGVzaXplID0gLTE7IC8qIHVua25vd24gc2l6ZSBmb3Igbm93ICovCisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSAmJiAoX19JTlRFTF9DT01QSUxFUiA9PSA5MTApICYmIFwKKyAgICBkZWZpbmVkKF9fT1BUSU1JWkVfXykgJiYgZGVmaW5lZChfX3VuaXhfXykgJiYgZGVmaW5lZChfX2kzODZfXykKKyAgLyogd29ya2Fyb3VuZCBpY2MgOS4xIG9wdGltaXplciBpc3N1ZSAqLworI3ByYWdtYSBvcHRpbWl6ZSgiIiwgb24pCisjZW5kaWYKKworLyoKKyAqIGZ0cF9jb25uZWN0KCkgc2hvdWxkIGRvIGV2ZXJ5dGhpbmcgdGhhdCBpcyB0byBiZSBjb25zaWRlcmVkIGEgcGFydCBvZgorICogdGhlIGNvbm5lY3Rpb24gcGhhc2UuCisgKgorICogVGhlIHZhcmlhYmxlICdkb25lJyBwb2ludHMgdG8gd2lsbCBiZSBUUlVFIGlmIHRoZSBwcm90b2NvbC1sYXllciBjb25uZWN0CisgKiBwaGFzZSBpcyBkb25lIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBvciBGQUxTRSBpcyBub3QuIFdoZW4gY2FsbGVkIGFzCisgKiBhIHBhcnQgb2YgdGhlIGVhc3kgaW50ZXJmYWNlLCBpdCB3aWxsIGFsd2F5cyBiZSBUUlVFLgorICovCitzdGF0aWMgQ1VSTGNvZGUgZnRwX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkgLyogc2VlIGRlc2NyaXB0aW9uIGFib3ZlICovCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisgIHN0cnVjdCBwaW5ncG9uZyAqcHAgPSAmZnRwYy0+cHA7CisKKyAgKmRvbmUgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBJZiB0aGVyZSBhbHJlYWR5IGlzIGEgcHJvdG9jb2wtc3BlY2lmaWMgc3RydWN0IGFsbG9jYXRlZCBmb3IgdGhpcworICAgICBzZXNzaW9uaGFuZGxlLCBkZWFsIHdpdGggaXQgKi8KKyAgQ3VybF9yZXNldF9yZXFwcm90byhjb25uKTsKKworICByZXN1bHQgPSBmdHBfaW5pdChjb25uKTsKKyAgaWYoQ1VSTEVfT0sgIT0gcmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgLyogV2UgYWx3YXlzIHN1cHBvcnQgcGVyc2lzdGVudCBjb25uZWN0aW9ucyBvbiBmdHAgKi8KKyAgY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOworCisgIHBwLT5yZXNwb25zZV90aW1lID0gUkVTUF9USU1FT1VUOyAvKiBzZXQgZGVmYXVsdCByZXNwb25zZSB0aW1lLW91dCAqLworICBwcC0+c3RhdGVtYWNoX2FjdCA9IGZ0cF9zdGF0ZW1hY2hfYWN0OworICBwcC0+ZW5kb2ZyZXNwID0gZnRwX2VuZG9mcmVzcDsKKyAgcHAtPmNvbm4gPSBjb25uOworCisgIGlmKGNvbm4tPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9TU0wpIHsKKyAgICAvKiBCTE9DS0lORyAqLworICAgIHJlc3VsdCA9IEN1cmxfc3NsX2Nvbm5lY3QoY29ubiwgRklSU1RTT0NLRVQpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBDdXJsX3BwX2luaXQocHApOyAvKiBpbml0IHRoZSBnZW5lcmljIHBpbmdwb25nIGRhdGEgKi8KKworICAvKiBXaGVuIHdlIGNvbm5lY3QsIHdlIHN0YXJ0IGluIHRoZSBzdGF0ZSB3aGVyZSB3ZSBhd2FpdCB0aGUgMjIwCisgICAgIHJlc3BvbnNlICovCisgIHN0YXRlKGNvbm4sIEZUUF9XQUlUMjIwKTsKKworICBpZihkYXRhLT5zdGF0ZS51c2VkX2ludGVyZmFjZSA9PSBDdXJsX2lmX211bHRpKQorICAgIHJlc3VsdCA9IGZ0cF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9uZSk7CisgIGVsc2UgeworICAgIHJlc3VsdCA9IGZ0cF9lYXN5X3N0YXRlbWFjaChjb25uKTsKKyAgICBpZighcmVzdWx0KQorICAgICAgKmRvbmUgPSBUUlVFOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRwX2RvbmUoKQorICoKKyAqIFRoZSBET05FIGZ1bmN0aW9uLiBUaGlzIGRvZXMgd2hhdCBuZWVkcyB0byBiZSBkb25lIGFmdGVyIGEgc2luZ2xlIERPIGhhcworICogcGVyZm9ybWVkLgorICoKKyAqIElucHV0IGFyZ3VtZW50IGlzIGFscmVhZHkgY2hlY2tlZCBmb3IgdmFsaWRpdHkuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBGVFAgKmZ0cCA9IGRhdGEtPnN0YXRlLnByb3RvLmZ0cDsKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisgIHN0cnVjdCBwaW5ncG9uZyAqcHAgPSAmZnRwYy0+cHA7CisgIHNzaXplX3QgbnJlYWQ7CisgIGludCBmdHBjb2RlOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgYm9vbCB3YXNfY3RsX3ZhbGlkID0gZnRwYy0+Y3RsX3ZhbGlkOworICBjaGFyICpwYXRoOworICBjb25zdCBjaGFyICpwYXRoX3RvX3VzZSA9IGRhdGEtPnN0YXRlLnBhdGg7CisKKyAgaWYoIWZ0cCkKKyAgICAvKiBXaGVuIHRoZSBlYXN5IGhhbmRsZSBpcyByZW1vdmVkIGZyb20gdGhlIG11bHRpIHdoaWxlIGxpYmN1cmwgaXMgc3RpbGwKKyAgICAgKiB0cnlpbmcgdG8gcmVzb2x2ZSB0aGUgaG9zdCBuYW1lLCBpdCBzZWVtcyB0aGF0IHRoZSBmdHAgc3RydWN0IGlzIG5vdAorICAgICAqIHlldCBpbml0aWFsaXplZCwgYnV0IHRoZSByZW1vdmFsIGFjdGlvbiBjYWxscyBDdXJsX2RvbmUoKSB3aGljaCBjYWxscworICAgICAqIHRoaXMgZnVuY3Rpb24uIFNvIHdlIHNpbXBseSByZXR1cm4gc3VjY2VzcyBpZiBubyBmdHAgcG9pbnRlciBpcyBzZXQuCisgICAgICovCisgICAgcmV0dXJuIENVUkxFX09LOworCisgIHN3aXRjaChzdGF0dXMpIHsKKyAgY2FzZSBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOgorICBjYXNlIENVUkxFX0ZUUF9XRUlSRF9QQVNWX1JFUExZOgorICBjYXNlIENVUkxFX0ZUUF9QT1JUX0ZBSUxFRDoKKyAgY2FzZSBDVVJMRV9GVFBfQUNDRVBUX0ZBSUxFRDoKKyAgY2FzZSBDVVJMRV9GVFBfQUNDRVBUX1RJTUVPVVQ6CisgIGNhc2UgQ1VSTEVfRlRQX0NPVUxETlRfU0VUX1RZUEU6CisgIGNhc2UgQ1VSTEVfRlRQX0NPVUxETlRfUkVUUl9GSUxFOgorICBjYXNlIENVUkxFX1BBUlRJQUxfRklMRToKKyAgY2FzZSBDVVJMRV9VUExPQURfRkFJTEVEOgorICBjYXNlIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOgorICBjYXNlIENVUkxFX0ZJTEVTSVpFX0VYQ0VFREVEOgorICBjYXNlIENVUkxFX1JFTU9URV9GSUxFX05PVF9GT1VORDoKKyAgY2FzZSBDVVJMRV9XUklURV9FUlJPUjoKKyAgICAvKiB0aGUgY29ubmVjdGlvbiBzdGF5cyBhbGl2ZSBmaW5lIGV2ZW4gdGhvdWdoIHRoaXMgaGFwcGVuZWQgKi8KKyAgICAvKiBmYWxsLXRocm91Z2ggKi8KKyAgY2FzZSBDVVJMRV9PSzogLyogZG9lc24ndCBhZmZlY3QgdGhlIGNvbnRyb2wgY29ubmVjdGlvbidzIHN0YXR1cyAqLworICAgIGlmKCFwcmVtYXR1cmUpIHsKKyAgICAgIGZ0cGMtPmN0bF92YWxpZCA9IHdhc19jdGxfdmFsaWQ7CisgICAgICBicmVhazsKKyAgICB9CisgICAgLyogdW50aWwgd2UgY29wZSBiZXR0ZXIgd2l0aCBwcmVtYXR1cmVseSBlbmRlZCByZXF1ZXN0cywgbGV0IHRoZW0KKyAgICAgKiBmYWxsYmFjayBhcyBpZiBpbiBjb21wbGV0ZSBmYWlsdXJlICovCisgIGRlZmF1bHQ6ICAgICAgIC8qIGJ5IGRlZmF1bHQsIGFuIGVycm9yIG1lYW5zIHRoZSBjb250cm9sIGNvbm5lY3Rpb24gaXMKKyAgICAgICAgICAgICAgICAgICAgd2VkZ2VkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZSAqLworICAgIGZ0cGMtPmN0bF92YWxpZCA9IEZBTFNFOworICAgIGZ0cGMtPmN3ZGZhaWwgPSBUUlVFOyAvKiBzZXQgdGhpcyBUUlVFIHRvIHByZXZlbnQgdXMgdG8gcmVtZW1iZXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgcGF0aCwgYXMgdGhpcyBjb25uZWN0aW9uIGlzIGdvaW5nICovCisgICAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7IC8qIG1hcmtlZCBmb3IgY2xvc3VyZSAqLworICAgIHJlc3VsdCA9IHN0YXR1czsgICAgICAvKiB1c2UgdGhlIGFscmVhZHkgc2V0IGVycm9yIGNvZGUgKi8KKyAgICBicmVhazsKKyAgfQorCisgIC8qIG5vdyBzdG9yZSBhIGNvcHkgb2YgdGhlIGRpcmVjdG9yeSB3ZSBhcmUgaW4gKi8KKyAgaWYoZnRwYy0+cHJldnBhdGgpCisgICAgZnJlZShmdHBjLT5wcmV2cGF0aCk7CisKKyAgaWYoZGF0YS0+c2V0LndpbGRjYXJkbWF0Y2gpIHsKKyAgICBpZihkYXRhLT5zZXQuY2h1bmtfZW5kICYmIGZ0cGMtPmZpbGUpIHsKKyAgICAgIGRhdGEtPnNldC5jaHVua19lbmQoZGF0YS0+d2lsZGNhcmQuY3VzdG9tcHRyKTsKKyAgICB9CisgICAgZnRwYy0+a25vd25fZmlsZXNpemUgPSAtMTsKKyAgfQorCisgIC8qIGdldCB0aGUgInJhdyIgcGF0aCAqLworICBwYXRoID0gY3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsIHBhdGhfdG9fdXNlLCAwLCBOVUxMKTsKKyAgaWYoIXBhdGgpIHsKKyAgICAvKiBvdXQgb2YgbWVtb3J5LCBidXQgd2UgY2FuIGxpbXAgYWxvbmcgYW55d2F5IChhbmQgc2hvdWxkIHRyeSB0bworICAgICAqIHNpbmNlIHdlIG1heSBhbHJlYWR5IGJlIGluIHRoZSBvdXQgb2YgbWVtb3J5IGNsZWFudXAgcGF0aCkgKi8KKyAgICBpZighcmVzdWx0KQorICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBmdHBjLT5jdGxfdmFsaWQgPSBGQUxTRTsgLyogbWFyayBjb250cm9sIGNvbm5lY3Rpb24gYXMgYmFkICovCisgICAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7IC8qIG1hcmsgZm9yIGNvbm5lY3Rpb24gY2xvc3VyZSAqLworICAgIGZ0cGMtPnByZXZwYXRoID0gTlVMTDsgLyogbm8gcGF0aCByZW1lbWJlcmluZyAqLworICB9CisgIGVsc2UgeworICAgIHNpemVfdCBmbGVuID0gZnRwYy0+ZmlsZT9zdHJsZW4oZnRwYy0+ZmlsZSk6MDsgLyogZmlsZSBpcyAicmF3IiBhbHJlYWR5ICovCisgICAgc2l6ZV90IGRsZW4gPSBzdHJsZW4ocGF0aCktZmxlbjsKKyAgICBpZighZnRwYy0+Y3dkZmFpbCkgeworICAgICAgaWYoZGxlbiAmJiAoZGF0YS0+c2V0LmZ0cF9maWxlbWV0aG9kICE9IEZUUEZJTEVfTk9DV0QpKSB7CisgICAgICAgIGZ0cGMtPnByZXZwYXRoID0gcGF0aDsKKyAgICAgICAgaWYoZmxlbikKKyAgICAgICAgICAvKiBpZiAncGF0aCcgaXMgbm90IHRoZSB3aG9sZSBzdHJpbmcgKi8KKyAgICAgICAgICBmdHBjLT5wcmV2cGF0aFtkbGVuXT0wOyAvKiB0ZXJtaW5hdGUgKi8KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiB3ZSBuZXZlciBjaGFuZ2VkIGRpciAqLworICAgICAgICBmdHBjLT5wcmV2cGF0aD1zdHJkdXAoIiIpOworICAgICAgICBmcmVlKHBhdGgpOworICAgICAgfQorICAgICAgaWYoZnRwYy0+cHJldnBhdGgpCisgICAgICAgIGluZm9mKGRhdGEsICJSZW1lbWJlcmluZyB3ZSBhcmUgaW4gZGlyIFwiJXNcIlxuIiwgZnRwYy0+cHJldnBhdGgpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGZ0cGMtPnByZXZwYXRoID0gTlVMTDsgLyogbm8gcGF0aCAqLworICAgICAgZnJlZShwYXRoKTsKKyAgICB9CisgIH0KKyAgLyogZnJlZSB0aGUgZGlyIHRyZWUgYW5kIGZpbGUgcGFydHMgKi8KKyAgZnJlZWRpcnMoZnRwYyk7CisKKyAgLyogc2h1dCBkb3duIHRoZSBzb2NrZXQgdG8gaW5mb3JtIHRoZSBzZXJ2ZXIgd2UncmUgZG9uZSAqLworCisjaWZkZWYgX1dJTjMyX1dDRQorICBzaHV0ZG93bihjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0sMik7ICAvKiBTRF9CT1RIICovCisjZW5kaWYKKworICBpZihjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgaWYoIXJlc3VsdCAmJiBmdHBjLT5kb250X2NoZWNrICYmIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA+IDApCisgICAgICAvKiBwYXJ0aWFsIGRvd25sb2FkIGNvbXBsZXRlZCAqLworICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZihwcCwgIkFCT1IiKTsKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBmYWlsZihkYXRhLCAiRmFpbHVyZSBzZW5kaW5nIEFCT1IgY29tbWFuZDogJXMiLAorICAgICAgICAgICAgICBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzdWx0KSk7CisgICAgICAgIGZ0cGMtPmN0bF92YWxpZCA9IEZBTFNFOyAvKiBtYXJrIGNvbnRyb2wgY29ubmVjdGlvbiBhcyBiYWQgKi8KKyAgICAgICAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7IC8qIG1hcmsgZm9yIGNvbm5lY3Rpb24gY2xvc3VyZSAqLworICAgICAgfQorCisgICAgaWYoY29ubi0+c3NsW1NFQ09OREFSWVNPQ0tFVF0udXNlKSB7CisgICAgICAvKiBUaGUgc2Vjb25kYXJ5IHNvY2tldCBpcyB1c2luZyBTU0wgc28gd2UgbXVzdCBjbG9zZSBkb3duIHRoYXQgcGFydAorICAgICAgICAgZmlyc3QgYmVmb3JlIHdlIGNsb3NlIHRoZSBzb2NrZXQgZm9yIHJlYWwgKi8KKyAgICAgIEN1cmxfc3NsX2Nsb3NlKGNvbm4sIFNFQ09OREFSWVNPQ0tFVCk7CisKKyAgICAgIC8qIE5vdGUgdGhhdCB3ZSBrZWVwICJ1c2UiIHNldCB0byBUUlVFIHNpbmNlIHRoYXQgKG5leHQpIGNvbm5lY3Rpb24gaXMKKyAgICAgICAgIHN0aWxsIHJlcXVlc3RlZCB0byB1c2UgU1NMICovCisgICAgfQorICAgIGlmKENVUkxfU09DS0VUX0JBRCAhPSBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pIHsKKyAgICAgIEN1cmxfY2xvc2Vzb2NrZXQoY29ubiwgY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdKTsKKyAgICAgIGNvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgIGNvbm4tPmJpdHMudGNwY29ubmVjdFtTRUNPTkRBUllTT0NLRVRdID0gRkFMU0U7CisgICAgfQorICB9CisKKyAgaWYoIXJlc3VsdCAmJiAoZnRwLT50cmFuc2ZlciA9PSBGVFBUUkFOU0ZFUl9CT0RZKSAmJiBmdHBjLT5jdGxfdmFsaWQgJiYKKyAgICAgcHAtPnBlbmRpbmdfcmVzcCAmJiAhcHJlbWF0dXJlKSB7CisgICAgLyoKKyAgICAgKiBMZXQncyBzZWUgd2hhdCB0aGUgc2VydmVyIHNheXMgYWJvdXQgdGhlIHRyYW5zZmVyIHdlIGp1c3QgcGVyZm9ybWVkLAorICAgICAqIGJ1dCBsb3dlciB0aGUgdGltZW91dCBhcyBzb21ldGltZXMgdGhpcyBjb25uZWN0aW9uIGhhcyBkaWVkIHdoaWxlIHRoZQorICAgICAqIGRhdGEgaGFzIGJlZW4gdHJhbnNmZXJyZWQuIFRoaXMgaGFwcGVucyB3aGVuIGRvaW5nIHRocm91Z2ggTkFUcyBldGMgdGhhdAorICAgICAqIGFiYW5kb24gb2xkIHNpbGVudCBjb25uZWN0aW9ucy4KKyAgICAgKi8KKyAgICBsb25nIG9sZF90aW1lID0gcHAtPnJlc3BvbnNlX3RpbWU7CisKKyAgICBwcC0+cmVzcG9uc2VfdGltZSA9IDYwKjEwMDA7IC8qIGdpdmUgaXQgb25seSBhIG1pbnV0ZSBmb3Igbm93ICovCisgICAgcHAtPnJlc3BvbnNlID0gQ3VybF90dm5vdygpOyAvKiB0aW1lb3V0IHJlbGF0aXZlIG5vdyAqLworCisgICAgcmVzdWx0ID0gQ3VybF9HZXRGVFBSZXNwb25zZSgmbnJlYWQsIGNvbm4sICZmdHBjb2RlKTsKKworICAgIHBwLT5yZXNwb25zZV90aW1lID0gb2xkX3RpbWU7IC8qIHNldCB0aGlzIGJhY2sgdG8gcHJldmlvdXMgdmFsdWUgKi8KKworICAgIGlmKCFucmVhZCAmJiAoQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUID09IHJlc3VsdCkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJjb250cm9sIGNvbm5lY3Rpb24gbG9va3MgZGVhZCIpOworICAgICAgZnRwYy0+Y3RsX3ZhbGlkID0gRkFMU0U7IC8qIG1hcmsgY29udHJvbCBjb25uZWN0aW9uIGFzIGJhZCAqLworICAgICAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7IC8qIG1hcmsgZm9yIGNsb3N1cmUgKi8KKyAgICB9CisKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgaWYoZnRwYy0+ZG9udF9jaGVjayAmJiBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPiAwKSB7CisgICAgICAvKiB3ZSBoYXZlIGp1c3Qgc2VudCBBQk9SIGFuZCB0aGVyZSBpcyBubyByZWxpYWJsZSB3YXkgdG8gY2hlY2sgaWYgaXQgd2FzCisgICAgICAgKiBzdWNjZXNzZnVsIG9yIG5vdDsgd2UgaGF2ZSB0byBjbG9zZSB0aGUgY29ubmVjdGlvbiBub3cgKi8KKyAgICAgIGluZm9mKGRhdGEsICJwYXJ0aWFsIGRvd25sb2FkIGNvbXBsZXRlZCwgY2xvc2luZyBjb25uZWN0aW9uXG4iKTsKKyAgICAgIGNvbm4tPmJpdHMuY2xvc2UgPSBUUlVFOyAvKiBtYXJrIGZvciBjbG9zdXJlICovCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGlmKCFmdHBjLT5kb250X2NoZWNrKSB7CisgICAgICAvKiAyMjYgVHJhbnNmZXIgY29tcGxldGUsIDI1MCBSZXF1ZXN0ZWQgZmlsZSBhY3Rpb24gb2theSwgY29tcGxldGVkLiAqLworICAgICAgaWYoKGZ0cGNvZGUgIT0gMjI2KSAmJiAoZnRwY29kZSAhPSAyNTApKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJzZXJ2ZXIgZGlkIG5vdCByZXBvcnQgT0ssIGdvdCAlZCIsIGZ0cGNvZGUpOworICAgICAgICByZXN1bHQgPSBDVVJMRV9QQVJUSUFMX0ZJTEU7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYocmVzdWx0IHx8IHByZW1hdHVyZSkKKyAgICAvKiB0aGUgcmVzcG9uc2UgY29kZSBmcm9tIHRoZSB0cmFuc2ZlciBzaG93ZWQgYW4gZXJyb3IgYWxyZWFkeSBzbyBubworICAgICAgIHVzZSBjaGVja2luZyBmdXJ0aGVyICovCisgICAgOworICBlbHNlIGlmKGRhdGEtPnNldC51cGxvYWQpIHsKKyAgICBpZigoLTEgIT0gZGF0YS0+c2V0LmluZmlsZXNpemUpICYmCisgICAgICAgKGRhdGEtPnNldC5pbmZpbGVzaXplICE9ICpmdHAtPmJ5dGVjb3VudHApICYmCisgICAgICAgIWRhdGEtPnNldC5jcmxmICYmCisgICAgICAgKGZ0cC0+dHJhbnNmZXIgPT0gRlRQVFJBTlNGRVJfQk9EWSkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJVcGxvYWRlZCB1bmFsaWduZWQgZmlsZSBzaXplICglIiBGT1JNQVRfT0ZGX1QKKyAgICAgICAgICAgICIgb3V0IG9mICUiIEZPUk1BVF9PRkZfVCAiIGJ5dGVzKSIsCisgICAgICAgICAgICAqZnRwLT5ieXRlY291bnRwLCBkYXRhLT5zZXQuaW5maWxlc2l6ZSk7CisgICAgICByZXN1bHQgPSBDVVJMRV9QQVJUSUFMX0ZJTEU7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGlmKCgtMSAhPSBkYXRhLT5yZXEuc2l6ZSkgJiYKKyAgICAgICAoZGF0YS0+cmVxLnNpemUgIT0gKmZ0cC0+Ynl0ZWNvdW50cCkgJiYKKyNpZmRlZiBDVVJMX0RPX0xJTkVFTkRfQ09OVgorICAgICAgIC8qIE1vc3QgRlRQIHNlcnZlcnMgZG9uJ3QgYWRqdXN0IHRoZWlyIGZpbGUgU0laRSByZXNwb25zZSBmb3IgQ1JMRnMsIHNvCisgICAgICAgICogd2UnbGwgY2hlY2sgdG8gc2VlIGlmIHRoZSBkaXNjcmVwYW5jeSBjYW4gYmUgZXhwbGFpbmVkIGJ5IHRoZSBudW1iZXIKKyAgICAgICAgKiBvZiBDUkxGcyB3ZSd2ZSBjaGFuZ2VkIHRvIExGcy4KKyAgICAgICAgKi8KKyAgICAgICAoKGRhdGEtPnJlcS5zaXplICsgZGF0YS0+c3RhdGUuY3JsZl9jb252ZXJzaW9ucykgIT0KKyAgICAgICAgKmZ0cC0+Ynl0ZWNvdW50cCkgJiYKKyNlbmRpZiAvKiBDVVJMX0RPX0xJTkVFTkRfQ09OViAqLworICAgICAgIChkYXRhLT5yZXEubWF4ZG93bmxvYWQgIT0gKmZ0cC0+Ynl0ZWNvdW50cCkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJSZWNlaXZlZCBvbmx5IHBhcnRpYWwgZmlsZTogJSIgRk9STUFUX09GRl9UICIgYnl0ZXMiLAorICAgICAgICAgICAgKmZ0cC0+Ynl0ZWNvdW50cCk7CisgICAgICByZXN1bHQgPSBDVVJMRV9QQVJUSUFMX0ZJTEU7CisgICAgfQorICAgIGVsc2UgaWYoIWZ0cGMtPmRvbnRfY2hlY2sgJiYKKyAgICAgICAgICAgICEqZnRwLT5ieXRlY291bnRwICYmCisgICAgICAgICAgICAoZGF0YS0+cmVxLnNpemU+MCkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJObyBkYXRhIHdhcyByZWNlaXZlZCEiKTsKKyAgICAgIHJlc3VsdCA9IENVUkxFX0ZUUF9DT1VMRE5UX1JFVFJfRklMRTsKKyAgICB9CisgIH0KKworICAvKiBjbGVhciB0aGVzZSBmb3IgbmV4dCBjb25uZWN0aW9uICovCisgIGZ0cC0+dHJhbnNmZXIgPSBGVFBUUkFOU0ZFUl9CT0RZOworICBmdHBjLT5kb250X2NoZWNrID0gRkFMU0U7CisKKyAgLyogU2VuZCBhbnkgcG9zdC10cmFuc2ZlciBRVU9URSBzdHJpbmdzPyAqLworICBpZighc3RhdHVzICYmICFyZXN1bHQgJiYgIXByZW1hdHVyZSAmJiBkYXRhLT5zZXQucG9zdHF1b3RlKQorICAgIHJlc3VsdCA9IGZ0cF9zZW5kcXVvdGUoY29ubiwgZGF0YS0+c2V0LnBvc3RxdW90ZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRwX3NlbmRxdW90ZSgpCisgKgorICogV2hlcmUgYSAncXVvdGUnIG1lYW5zIGEgbGlzdCBvZiBjdXN0b20gY29tbWFuZHMgdG8gc2VuZCB0byB0aGUgc2VydmVyLgorICogVGhlIHF1b3RlIGxpc3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LgorICoKKyAqIEJMT0NLSU5HCisgKi8KKworc3RhdGljCitDVVJMY29kZSBmdHBfc2VuZHF1b3RlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgc3RydWN0IGN1cmxfc2xpc3QgKnF1b3RlKQoreworICBzdHJ1Y3QgY3VybF9zbGlzdCAqaXRlbTsKKyAgc3NpemVfdCBucmVhZDsKKyAgaW50IGZ0cGNvZGU7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisgIHN0cnVjdCBwaW5ncG9uZyAqcHAgPSAmZnRwYy0+cHA7CisKKyAgaXRlbSA9IHF1b3RlOworICB3aGlsZShpdGVtKSB7CisgICAgaWYoaXRlbS0+ZGF0YSkgeworICAgICAgY2hhciAqY21kID0gaXRlbS0+ZGF0YTsKKyAgICAgIGJvb2wgYWNjZXB0ZmFpbCA9IEZBTFNFOworCisgICAgICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgRlRQIGNvbW1hbmQgbmV2ZXIKKyAgICAgICAgIGNhbiwgdGhlIGNvbW1hbmQgd2lsbCBiZSBhbGxvd2VkIHRvIGZhaWwgd2l0aG91dCBpdCBjYXVzaW5nIGFueQorICAgICAgICAgYWJvcnRzIG9yIGNhbmNlbHMgZXRjLiBJdCB3aWxsIGNhdXNlIGxpYmN1cmwgdG8gYWN0IGFzIGlmIHRoZSBjb21tYW5kCisgICAgICAgICBpcyBzdWNjZXNzZnVsLCB3aGF0ZXZlciB0aGUgc2VydmVyIHJlcG9uZHMuICovCisKKyAgICAgIGlmKGNtZFswXSA9PSAnKicpIHsKKyAgICAgICAgY21kKys7CisgICAgICAgIGFjY2VwdGZhaWwgPSBUUlVFOworICAgICAgfQorCisgICAgICBGVFBTRU5ERihjb25uLCAiJXMiLCBjbWQpOworCisgICAgICBwcC0+cmVzcG9uc2UgPSBDdXJsX3R2bm93KCk7IC8qIHRpbWVvdXQgcmVsYXRpdmUgbm93ICovCisKKyAgICAgIHJlc3VsdCA9IEN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCAmZnRwY29kZSk7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgIGlmKCFhY2NlcHRmYWlsICYmIChmdHBjb2RlID49IDQwMCkpIHsKKyAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlFVT1Qgc3RyaW5nIG5vdCBhY2NlcHRlZDogJXMiLCBjbWQpOworICAgICAgICByZXR1cm4gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICB9CisgICAgfQorCisgICAgaXRlbSA9IGl0ZW0tPm5leHQ7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0cF9uZWVkX3R5cGUoKQorICoKKyAqIFJldHVybnMgVFJVRSBpZiB3ZSBpbiB0aGUgY3VycmVudCBzaXR1YXRpb24gc2hvdWxkIHNlbmQgVFlQRQorICovCitzdGF0aWMgaW50IGZ0cF9uZWVkX3R5cGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNjaWlfd2FudGVkKQoreworICByZXR1cm4gY29ubi0+cHJvdG8uZnRwYy50cmFuc2ZlcnR5cGUgIT0gKGFzY2lpX3dhbnRlZD8nQSc6J0knKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRwX25iX3R5cGUoKQorICoKKyAqIFNldCBUWVBFLiBXZSBvbmx5IGRlYWwgd2l0aCBBU0NJSSBvciBCSU5BUlkgc28gdGhpcyBmdW5jdGlvbgorICogc2V0cyBvbmUgb2YgdGhlbS4KKyAqIElmIHRoZSB0cmFuc2ZlciB0eXBlIGlzIG5vdCBzZW50LCBzaW11bGF0ZSBvbiBPSyByZXNwb25zZSBpbiBuZXdzdGF0ZQorICovCitzdGF0aWMgQ1VSTGNvZGUgZnRwX25iX3R5cGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXNjaWksIGZ0cHN0YXRlIG5ld3N0YXRlKQoreworICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBjaGFyIHdhbnQgPSAoY2hhcikoYXNjaWk/J0EnOidJJyk7CisKKyAgaWYoZnRwYy0+dHJhbnNmZXJ0eXBlID09IHdhbnQpIHsKKyAgICBzdGF0ZShjb25uLCBuZXdzdGF0ZSk7CisgICAgcmV0dXJuIGZ0cF9zdGF0ZV90eXBlX3Jlc3AoY29ubiwgMjAwLCBuZXdzdGF0ZSk7CisgIH0KKworICBQUFNFTkRGKCZmdHBjLT5wcCwgIlRZUEUgJWMiLCB3YW50KTsKKyAgc3RhdGUoY29ubiwgbmV3c3RhdGUpOworCisgIC8qIGtlZXAgdHJhY2sgb2Ygb3VyIGN1cnJlbnQgdHJhbnNmZXIgdHlwZSAqLworICBmdHBjLT50cmFuc2ZlcnR5cGUgPSB3YW50OworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHBfcGFzdl92ZXJib3NlKCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgb3V0cHV0cyBzb21lIGluZm9ybWF0aW9uYWxzIGFib3V0IHRoaXMgc2Vjb25kIGNvbm5lY3Rpb24KKyAqIHdoZW4gd2UndmUgaXNzdWVkIGEgUEFTViBjb21tYW5kIGJlZm9yZSBhbmQgdGh1cyB3ZSBoYXZlIGNvbm5lY3RlZCB0byBhCisgKiBwb3NzaWJseSBuZXcgSVAgYWRkcmVzcy4KKyAqCisgKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUworc3RhdGljIHZvaWQKK2Z0cF9wYXN2X3ZlcmJvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICBDdXJsX2FkZHJpbmZvICphaSwKKyAgICAgICAgICAgICAgICAgY2hhciAqbmV3aG9zdCwgLyogYXNjaWkgdmVyc2lvbiAqLworICAgICAgICAgICAgICAgICBpbnQgcG9ydCkKK3sKKyAgY2hhciBidWZbMjU2XTsKKyAgQ3VybF9wcmludGFibGVfYWRkcmVzcyhhaSwgYnVmLCBzaXplb2YoYnVmKSk7CisgIGluZm9mKGNvbm4tPmRhdGEsICJDb25uZWN0aW5nIHRvICVzICglcykgcG9ydCAlZFxuIiwgbmV3aG9zdCwgYnVmLCBwb3J0KTsKK30KKyNlbmRpZgorCisvKgorICBDaGVjayBpZiB0aGlzIGlzIGEgcmFuZ2UgZG93bmxvYWQsIGFuZCBpZiBzbywgc2V0IHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMKKyAgcHJvcGVybHkuCisgKi8KKworc3RhdGljIENVUkxjb2RlIGZ0cF9yYW5nZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGN1cmxfb2ZmX3QgZnJvbSwgdG87CisgIGNoYXIgKnB0cjsKKyAgY2hhciAqcHRyMjsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKworICBpZihkYXRhLT5zdGF0ZS51c2VfcmFuZ2UgJiYgZGF0YS0+c3RhdGUucmFuZ2UpIHsKKyAgICBmcm9tPWN1cmx4X3N0cnRvb2ZmdChkYXRhLT5zdGF0ZS5yYW5nZSwgJnB0ciwgMCk7CisgICAgd2hpbGUoKnB0ciAmJiAoSVNTUEFDRSgqcHRyKSB8fCAoKnB0cj09Jy0nKSkpCisgICAgICBwdHIrKzsKKyAgICB0bz1jdXJseF9zdHJ0b29mZnQocHRyLCAmcHRyMiwgMCk7CisgICAgaWYocHRyID09IHB0cjIpIHsKKyAgICAgIC8qIHdlIGRpZG4ndCBnZXQgYW55IGRpZ2l0ICovCisgICAgICB0bz0tMTsKKyAgICB9CisgICAgaWYoKC0xID09IHRvKSAmJiAoZnJvbT49MCkpIHsKKyAgICAgIC8qIFggLSAqLworICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSBmcm9tOworICAgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJGVFAgUkFOR0UgJSIgRk9STUFUX09GRl9UICIgdG8gZW5kIG9mIGZpbGVcbiIsCisgICAgICAgICAgICAgICAgICAgZnJvbSkpOworICAgIH0KKyAgICBlbHNlIGlmKGZyb20gPCAwKSB7CisgICAgICAvKiAtWSAqLworICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLWZyb207CisgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IGZyb207CisgICAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkZUUCBSQU5HRSB0aGUgbGFzdCAlIiBGT1JNQVRfT0ZGX1QgIiBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAtZnJvbSkpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFgtWSAqLworICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gKHRvLWZyb20pKzE7IC8qIGluY2x1ZGUgbGFzdCBieXRlICovCisgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IGZyb207CisgICAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkZUUCBSQU5HRSBmcm9tICUiIEZPUk1BVF9PRkZfVAorICAgICAgICAgICAgICAgICAgICIgZ2V0dGluZyAlIiBGT1JNQVRfT0ZGX1QgIiBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBmcm9tLCBkYXRhLT5yZXEubWF4ZG93bmxvYWQpKTsKKyAgICB9CisgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJyYW5nZS1kb3dubG9hZCBmcm9tICUiIEZPUk1BVF9PRkZfVAorICAgICAgICAgICAgICAgICAiIHRvICUiIEZPUk1BVF9PRkZfVCAiLCB0b3RhbGx5ICUiIEZPUk1BVF9PRkZfVCAiIGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgICBmcm9tLCB0bywgZGF0YS0+cmVxLm1heGRvd25sb2FkKSk7CisgICAgZnRwYy0+ZG9udF9jaGVjayA9IFRSVUU7IC8qIGRvbnQgY2hlY2sgZm9yIHN1Y2Nlc3NmdWwgdHJhbnNmZXIgKi8KKyAgfQorICBlbHNlCisgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworCisvKgorICogZnRwX2RvX21vcmUoKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hhbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHNlY29uZCBGVFAgKGRhdGEpIGNvbm5lY3Rpb24gaXMKKyAqIGNvbm5lY3RlZC4KKyAqLworCitzdGF0aWMgQ1VSTGNvZGUgZnRwX2RvX21vcmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpjb21wbGV0ZSkKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9Y29ubi0+ZGF0YTsKKyAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBib29sIGNvbm5lY3RlZCA9IEZBTFNFOworCisgIC8qIHRoZSBmdHAgc3RydWN0IGlzIGluaXRlZCBpbiBmdHBfY29ubmVjdCgpICovCisgIHN0cnVjdCBGVFAgKmZ0cCA9IGRhdGEtPnN0YXRlLnByb3RvLmZ0cDsKKworICAvKiBpZiB0aGUgc2Vjb25kIGNvbm5lY3Rpb24gaXNuJ3QgZG9uZSB5ZXQsIHdhaXQgZm9yIGl0ICovCisgIGlmKCFjb25uLT5iaXRzLnRjcGNvbm5lY3RbU0VDT05EQVJZU09DS0VUXSkgeworICAgIHJlc3VsdCA9IEN1cmxfaXNfY29ubmVjdGVkKGNvbm4sIFNFQ09OREFSWVNPQ0tFVCwgJmNvbm5lY3RlZCk7CisKKyAgICAvKiBSZWFkeSB0byBkbyBtb3JlPyAqLworICAgIGlmKGNvbm5lY3RlZCkgeworICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJETy1NT1JFIGNvbm5lY3RlZCBwaGFzZSBzdGFydHNcbiIpKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGlmKGZ0cC0+dHJhbnNmZXIgPD0gRlRQVFJBTlNGRVJfSU5GTykgeworICAgIC8qIGEgdHJhbnNmZXIgaXMgYWJvdXQgdG8gdGFrZSBwbGFjZSwgb3IgaWYgbm90IGEgZmlsZSBuYW1lIHdhcyBnaXZlbgorICAgICAgIHNvIHdlJ2xsIGRvIGEgU0laRSBvbiBpdCBsYXRlciBhbmQgdGhlbiB3ZSBuZWVkIHRoZSByaWdodCBUWVBFIGZpcnN0ICovCisKKyAgICBpZihmdHBjLT53YWl0X2RhdGFfY29ubiA9PSBUUlVFKSB7CisgICAgICBib29sIHNlcnZfY29ubmVkOworCisgICAgICByZXN1bHQgPSBSZWNlaXZlZFNlcnZlckNvbm5lY3QoY29ubiwgJnNlcnZfY29ubmVkKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsgLyogRmFpbGVkIHRvIGFjY2VwdCBkYXRhIGNvbm5lY3Rpb24gKi8KKworICAgICAgaWYoc2Vydl9jb25uZWQpIHsKKyAgICAgICAgLyogSXQgbG9va3MgZGF0YSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkICovCisgICAgICAgIHJlc3VsdCA9IEFjY2VwdFNlcnZlckNvbm5lY3QoY29ubik7CisgICAgICAgIGZ0cGMtPndhaXRfZGF0YV9jb25uID0gRkFMU0U7CisgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PSykKKyAgICAgICAgICByZXN1bHQgPSBJbml0aWF0ZVRyYW5zZmVyKGNvbm4pOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKGRhdGEtPnNldC51cGxvYWQpIHsKKyAgICAgIHJlc3VsdCA9IGZ0cF9uYl90eXBlKGNvbm4sIGRhdGEtPnNldC5wcmVmZXJfYXNjaWksIEZUUF9TVE9SX1RZUEUpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIGRvd25sb2FkICovCisgICAgICBmdHAtPmRvd25sb2Fkc2l6ZSA9IC0xOyAvKiB1bmtub3duIGFzIG9mIHlldCAqLworCisgICAgICByZXN1bHQgPSBmdHBfcmFuZ2UoY29ubik7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIDsKKyAgICAgIGVsc2UgaWYoZGF0YS0+c2V0LmZ0cF9saXN0X29ubHkgfHwgIWZ0cGMtPmZpbGUpIHsKKyAgICAgICAgLyogVGhlIHNwZWNpZmllZCBwYXRoIGVuZHMgd2l0aCBhIHNsYXNoLCBhbmQgdGhlcmVmb3JlIHdlIHRoaW5rIHRoaXMKKyAgICAgICAgICAgaXMgYSBkaXJlY3RvcnkgdGhhdCBpcyByZXF1ZXN0ZWQsIHVzZSBMSVNULiBCdXQgYmVmb3JlIHRoYXQgd2UKKyAgICAgICAgICAgbmVlZCB0byBzZXQgQVNDSUkgdHJhbnNmZXIgbW9kZS4gKi8KKworICAgICAgICAvKiBCdXQgb25seSBpZiBhIGJvZHkgdHJhbnNmZXIgd2FzIHJlcXVlc3RlZC4gKi8KKyAgICAgICAgaWYoZnRwLT50cmFuc2ZlciA9PSBGVFBUUkFOU0ZFUl9CT0RZKSB7CisgICAgICAgICAgcmVzdWx0ID0gZnRwX25iX3R5cGUoY29ubiwgVFJVRSwgRlRQX0xJU1RfVFlQRSk7CisgICAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAvKiBvdGhlcndpc2UganVzdCBmYWxsIHRocm91Z2ggKi8KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICByZXN1bHQgPSBmdHBfbmJfdHlwZShjb25uLCBkYXRhLT5zZXQucHJlZmVyX2FzY2lpLCBGVFBfUkVUUl9UWVBFKTsKKyAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgfQorICAgIHJlc3VsdCA9IGZ0cF9lYXN5X3N0YXRlbWFjaChjb25uKTsKKyAgfQorCisgIGlmKChyZXN1bHQgPT0gQ1VSTEVfT0spICYmIChmdHAtPnRyYW5zZmVyICE9IEZUUFRSQU5TRkVSX0JPRFkpKQorICAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIuIEZJWDogaXQgZmVlbHMgbGlrZSBhIGtsdWRnZSB0byBoYXZlIHRoaXMgaGVyZQorICAgICAgIHRvbyEgKi8KKyAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKworICBpZighZnRwYy0+d2FpdF9kYXRhX2Nvbm4pIHsKKyAgICAvKiBubyB3YWl0aW5nIGZvciB0aGUgZGF0YSBjb25uZWN0aW9uIHNvIHRoaXMgaXMgbm93IGNvbXBsZXRlICovCisgICAgKmNvbXBsZXRlID0gVFJVRTsKKyAgICBERUJVR0YoaW5mb2YoZGF0YSwgIkRPLU1PUkUgcGhhc2UgZW5kcyB3aXRoICVkXG4iLCAoaW50KXJlc3VsdCkpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0cF9wZXJmb3JtKCkKKyAqCisgKiBUaGlzIGlzIHRoZSBhY3R1YWwgRE8gZnVuY3Rpb24gZm9yIEZUUC4gR2V0IGEgZmlsZS9kaXJlY3RvcnkgYWNjb3JkaW5nIHRvCisgKiB0aGUgb3B0aW9ucyBwcmV2aW91c2x5IHNldHVwLgorICovCisKK3N0YXRpYworQ1VSTGNvZGUgZnRwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLCAgLyogY29ubmVjdCBzdGF0dXMgYWZ0ZXIgUEFTViAvIFBPUlQgKi8KKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgLyogdGhpcyBpcyBGVFAgYW5kIG5vIHByb3h5ICovCisgIENVUkxjb2RlIHJlc3VsdD1DVVJMRV9PSzsKKworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIHN0YXJ0c1xuIikpOworCisgIGlmKGNvbm4tPmRhdGEtPnNldC5vcHRfbm9fYm9keSkgeworICAgIC8qIHJlcXVlc3RlZCBubyBib2R5IG1lYW5zIG5vIHRyYW5zZmVyLi4uICovCisgICAgc3RydWN0IEZUUCAqZnRwID0gY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8uZnRwOworICAgIGZ0cC0+dHJhbnNmZXIgPSBGVFBUUkFOU0ZFUl9JTkZPOworICB9CisKKworICAqZG9waGFzZV9kb25lID0gRkFMU0U7IC8qIG5vdCBkb25lIHlldCAqLworCisgIC8qIHN0YXJ0IHRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBETyBwaGFzZSAqLworICByZXN1bHQgPSBmdHBfc3RhdGVfcXVvdGUoY29ubiwgVFJVRSwgRlRQX1FVT1RFKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCisgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID09IEN1cmxfaWZfbXVsdGkpCisgICAgcmVzdWx0ID0gZnRwX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworICBlbHNlIHsKKyAgICByZXN1bHQgPSBmdHBfZWFzeV9zdGF0ZW1hY2goY29ubik7CisgICAgKmRvcGhhc2VfZG9uZSA9IFRSVUU7IC8qIHdpdGggdGhlIGVhc3kgaW50ZXJmYWNlIHdlIGFyZSBkb25lIGhlcmUgKi8KKyAgfQorICAqY29ubmVjdGVkID0gY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXTsKKworICBpZigqZG9waGFzZV9kb25lKQorICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCB3Y19kYXRhX2R0b3Iodm9pZCAqcHRyKQoreworICBzdHJ1Y3QgZnRwX3djX3RtcGRhdGEgKnRtcCA9IHB0cjsKKyAgaWYodG1wKQorICAgIEN1cmxfZnRwX3BhcnNlbGlzdF9kYXRhX2ZyZWUoJnRtcC0+cGFyc2VyKTsKKyAgQ3VybF9zYWZlZnJlZSh0bXApOworfQorCitzdGF0aWMgQ1VSTGNvZGUgaW5pdF93Y19kYXRhKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgY2hhciAqbGFzdF9zbGFzaDsKKyAgY2hhciAqcGF0aCA9IGNvbm4tPmRhdGEtPnN0YXRlLnBhdGg7CisgIHN0cnVjdCBXaWxkY2FyZERhdGEgKndpbGRjYXJkID0gJihjb25uLT5kYXRhLT53aWxkY2FyZCk7CisgIENVUkxjb2RlIHJldCA9IENVUkxFX09LOworICBzdHJ1Y3QgZnRwX3djX3RtcGRhdGEgKmZ0cF90bXA7CisKKyAgbGFzdF9zbGFzaCA9IHN0cnJjaHIoY29ubi0+ZGF0YS0+c3RhdGUucGF0aCwgJy8nKTsKKyAgaWYobGFzdF9zbGFzaCkgeworICAgIGxhc3Rfc2xhc2grKzsKKyAgICBpZihsYXN0X3NsYXNoWzBdID09ICdcMCcpIHsKKyAgICAgIHdpbGRjYXJkLT5zdGF0ZSA9IENVUkxXQ19DTEVBTjsKKyAgICAgIHJldCA9IGZ0cF9wYXJzZV91cmxfcGF0aChjb25uKTsKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgd2lsZGNhcmQtPnBhdHRlcm4gPSBzdHJkdXAobGFzdF9zbGFzaCk7CisgICAgICBpZighd2lsZGNhcmQtPnBhdHRlcm4pCisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgbGFzdF9zbGFzaFswXSA9ICdcMCc7IC8qIGN1dCBmaWxlIGZyb20gcGF0aCAqLworICAgIH0KKyAgfQorICBlbHNlIHsgLyogdGhlcmUgaXMgb25seSAnd2lsZGNhcmQgcGF0dGVybicgb3Igbm90aGluZyAqLworICAgIGlmKHBhdGhbMF0pIHsKKyAgICAgIHdpbGRjYXJkLT5wYXR0ZXJuID0gc3RyZHVwKHBhdGgpOworICAgICAgaWYoIXdpbGRjYXJkLT5wYXR0ZXJuKQorICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIHBhdGhbMF0gPSAnXDAnOworICAgIH0KKyAgICBlbHNlIHsgLyogb25seSBsaXN0ICovCisgICAgICB3aWxkY2FyZC0+c3RhdGUgPSBDVVJMV0NfQ0xFQU47CisgICAgICByZXQgPSBmdHBfcGFyc2VfdXJsX3BhdGgoY29ubik7CisgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgfQorCisgIC8qIHByb2dyYW0gY29udGludWVzIG9ubHkgaWYgVVJMIGlzIG5vdCBlbmRpbmcgd2l0aCBzbGFzaCwgYWxsb2NhdGUgbmVlZGVkCisgICAgIHJlc291cmNlcyBmb3Igd2lsZGNhcmQgdHJhbnNmZXIgKi8KKworICAvKiBhbGxvY2F0ZSBmdHAgcHJvdG9jb2wgc3BlY2lmaWMgdGVtcG9yYXJ5IHdpbGRjYXJkIGRhdGEgKi8KKyAgZnRwX3RtcCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGZ0cF93Y190bXBkYXRhKSk7CisgIGlmKCFmdHBfdG1wKSB7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICAvKiBJTklUSUFMSVpFIHBhcnNlbGlzdCBzdHJ1Y3R1cmUgKi8KKyAgZnRwX3RtcC0+cGFyc2VyID0gQ3VybF9mdHBfcGFyc2VsaXN0X2RhdGFfYWxsb2MoKTsKKyAgaWYoIWZ0cF90bXAtPnBhcnNlcikgeworICAgIGZyZWUoZnRwX3RtcCk7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICB3aWxkY2FyZC0+dG1wID0gZnRwX3RtcDsgLyogcHV0IGl0IHRvIHRoZSBXaWxkY2FyZERhdGEgdG1wIHBvaW50ZXIgKi8KKyAgd2lsZGNhcmQtPnRtcF9kdG9yID0gd2NfZGF0YV9kdG9yOworCisgIC8qIHdpbGRjYXJkIGRvZXMgbm90IHN1cHBvcnQgTk9DV0Qgb3B0aW9uIChhc3NlcnQgaXQ/KSAqLworICBpZihjb25uLT5kYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPT0gRlRQRklMRV9OT0NXRCkKKyAgICBjb25uLT5kYXRhLT5zZXQuZnRwX2ZpbGVtZXRob2QgPSBGVFBGSUxFX01VTFRJQ1dEOworCisgIC8qIHRyeSB0byBwYXJzZSBmdHAgdXJsICovCisgIHJldCA9IGZ0cF9wYXJzZV91cmxfcGF0aChjb25uKTsKKyAgaWYocmV0KSB7CisgICAgcmV0dXJuIHJldDsKKyAgfQorCisgIC8qIGJhY2t1cCBvbGQgd3JpdGVfZnVuY3Rpb24gKi8KKyAgZnRwX3RtcC0+YmFja3VwLndyaXRlX2Z1bmN0aW9uID0gY29ubi0+ZGF0YS0+c2V0LmZ3cml0ZV9mdW5jOworICAvKiBwYXJzaW5nIHdyaXRlIGZ1bmN0aW9uICovCisgIGNvbm4tPmRhdGEtPnNldC5md3JpdGVfZnVuYyA9IEN1cmxfZnRwX3BhcnNlbGlzdDsKKyAgLyogYmFja3VwIG9sZCBmaWxlIGRlc2NyaXB0b3IgKi8KKyAgZnRwX3RtcC0+YmFja3VwLmZpbGVfZGVzY3JpcHRvciA9IGNvbm4tPmRhdGEtPnNldC5vdXQ7CisgIC8qIGxldCB0aGUgd3JpdGVmdW5jIGNhbGxiYWNrIGtub3cgd2hhdCBjdXJsIHBvaW50ZXIgaXMgd29ya2luZyB3aXRoICovCisgIGNvbm4tPmRhdGEtPnNldC5vdXQgPSBjb25uOworCisgIHdpbGRjYXJkLT5wYXRoID0gc3RyZHVwKGNvbm4tPmRhdGEtPnN0YXRlLnBhdGgpOworICBpZighd2lsZGNhcmQtPnBhdGgpIHsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIGluZm9mKGNvbm4tPmRhdGEsICJXaWxkY2FyZCAtIFBhcnNpbmcgc3RhcnRlZFxuIik7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyogVGhpcyBpcyBjYWxsZWQgcmVjdXJzaXZlbHkgKi8KK3N0YXRpYyBDVVJMY29kZSB3Y19zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgV2lsZGNhcmREYXRhICogY29uc3Qgd2lsZGNhcmQgPSAmKGNvbm4tPmRhdGEtPndpbGRjYXJkKTsKKyAgQ1VSTGNvZGUgcmV0ID0gQ1VSTEVfT0s7CisKKyAgc3dpdGNoICh3aWxkY2FyZC0+c3RhdGUpIHsKKyAgY2FzZSBDVVJMV0NfSU5JVDoKKyAgICByZXQgPSBpbml0X3djX2RhdGEoY29ubik7CisgICAgaWYod2lsZGNhcmQtPnN0YXRlID09IENVUkxXQ19DTEVBTikKKyAgICAgIC8qIG9ubHkgbGlzdGluZyEgKi8KKyAgICAgIGJyZWFrOworICAgIGVsc2UKKyAgICAgIHdpbGRjYXJkLT5zdGF0ZSA9IHJldCA/IENVUkxXQ19FUlJPUiA6IENVUkxXQ19NQVRDSElORzsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxXQ19NQVRDSElORzogeworICAgIC8qIEluIHRoaXMgc3RhdGUgaXMgTElTVCByZXNwb25zZSBzdWNjZXNzZnVsbHkgcGFyc2VkLCBzbyBsZXRzIHJlc3RvcmUKKyAgICAgICBwcmV2aW91cyBXUklURUZVTkNUSU9OIGNhbGxiYWNrIGFuZCBXUklURURBVEEgcG9pbnRlciAqLworICAgIHN0cnVjdCBmdHBfd2NfdG1wZGF0YSAqZnRwX3RtcCA9IHdpbGRjYXJkLT50bXA7CisgICAgY29ubi0+ZGF0YS0+c2V0LmZ3cml0ZV9mdW5jID0gZnRwX3RtcC0+YmFja3VwLndyaXRlX2Z1bmN0aW9uOworICAgIGNvbm4tPmRhdGEtPnNldC5vdXQgPSBmdHBfdG1wLT5iYWNrdXAuZmlsZV9kZXNjcmlwdG9yOworICAgIHdpbGRjYXJkLT5zdGF0ZSA9IENVUkxXQ19ET1dOTE9BRElORzsKKworICAgIGlmKEN1cmxfZnRwX3BhcnNlbGlzdF9nZXRlcnJvcihmdHBfdG1wLT5wYXJzZXIpKSB7CisgICAgICAvKiBlcnJvciBmb3VuZCBpbiBMSVNUIHBhcnNpbmcgKi8KKyAgICAgIHdpbGRjYXJkLT5zdGF0ZSA9IENVUkxXQ19DTEVBTjsKKyAgICAgIHJldHVybiB3Y19zdGF0ZW1hY2goY29ubik7CisgICAgfQorICAgIGVsc2UgaWYod2lsZGNhcmQtPmZpbGVsaXN0LT5zaXplID09IDApIHsKKyAgICAgIC8qIG5vIGNvcnJlc3BvbmRpbmcgZmlsZSAqLworICAgICAgd2lsZGNhcmQtPnN0YXRlID0gQ1VSTFdDX0NMRUFOOworICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9GSUxFX05PVF9GT1VORDsKKyAgICB9CisgICAgcmV0dXJuIHdjX3N0YXRlbWFjaChjb25uKTsKKyAgfQorCisgIGNhc2UgQ1VSTFdDX0RPV05MT0FESU5HOiB7CisgICAgLyogZmlsZWxpc3QgaGFzIGF0IGxlYXN0IG9uZSBmaWxlLCBsZXRzIGdldCBmaXJzdCBvbmUgKi8KKyAgICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKyAgICBzdHJ1Y3QgY3VybF9maWxlaW5mbyAqZmluZm8gPSB3aWxkY2FyZC0+ZmlsZWxpc3QtPmhlYWQtPnB0cjsKKyAgICBjaGFyICp0bXBfcGF0aCA9IG1hbGxvYyhzdHJsZW4oY29ubi0+ZGF0YS0+c3RhdGUucGF0aCkgKworICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihmaW5mby0+ZmlsZW5hbWUpICsgMSk7CisgICAgaWYoIXRtcF9wYXRoKSB7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisKKyAgICB0bXBfcGF0aFswXSA9IDA7CisgICAgLyogbWFrZSBmdWxsIHBhdGggdG8gbWF0Y2hlZCBmaWxlICovCisgICAgc3RyY2F0KHRtcF9wYXRoLCB3aWxkY2FyZC0+cGF0aCk7CisgICAgc3RyY2F0KHRtcF9wYXRoLCBmaW5mby0+ZmlsZW5hbWUpOworICAgIC8qIHN3aXRjaCBkZWZhdWx0ICJzdGF0ZS5wYXRoYnVmZmVyIiBhbmQgdG1wX3BhdGgsIGdvb2QgdG8gc2VlCisgICAgICAgZnRwX3BhcnNlX3VybF9wYXRoIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhpcyB0cmljayAqLworICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+ZGF0YS0+c3RhdGUucGF0aGJ1ZmZlcik7CisgICAgY29ubi0+ZGF0YS0+c3RhdGUucGF0aGJ1ZmZlciA9IHRtcF9wYXRoOworICAgIGNvbm4tPmRhdGEtPnN0YXRlLnBhdGggPSB0bXBfcGF0aDsKKworICAgIGluZm9mKGNvbm4tPmRhdGEsICJXaWxkY2FyZCAtIFNUQVJUIG9mIFwiJXNcIlxuIiwgZmluZm8tPmZpbGVuYW1lKTsKKyAgICBpZihjb25uLT5kYXRhLT5zZXQuY2h1bmtfYmduKSB7CisgICAgICBsb25nIHVzZXJyZXNwb25zZSA9IGNvbm4tPmRhdGEtPnNldC5jaHVua19iZ24oCisgICAgICAgICAgZmluZm8sIHdpbGRjYXJkLT5jdXN0b21wdHIsIChpbnQpd2lsZGNhcmQtPmZpbGVsaXN0LT5zaXplKTsKKyAgICAgIHN3aXRjaCh1c2VycmVzcG9uc2UpIHsKKyAgICAgIGNhc2UgQ1VSTF9DSFVOS19CR05fRlVOQ19TS0lQOgorICAgICAgICBpbmZvZihjb25uLT5kYXRhLCAiV2lsZGNhcmQgLSBcIiVzXCIgc2tpcHBlZCBieSB1c2VyXG4iLAorICAgICAgICAgICAgICBmaW5mby0+ZmlsZW5hbWUpOworICAgICAgICB3aWxkY2FyZC0+c3RhdGUgPSBDVVJMV0NfU0tJUDsKKyAgICAgICAgcmV0dXJuIHdjX3N0YXRlbWFjaChjb25uKTsKKyAgICAgIGNhc2UgQ1VSTF9DSFVOS19CR05fRlVOQ19GQUlMOgorICAgICAgICByZXR1cm4gQ1VSTEVfQ0hVTktfRkFJTEVEOworICAgICAgfQorICAgIH0KKworICAgIGlmKGZpbmZvLT5maWxldHlwZSAhPSBDVVJMRklMRVRZUEVfRklMRSkgeworICAgICAgd2lsZGNhcmQtPnN0YXRlID0gQ1VSTFdDX1NLSVA7CisgICAgICByZXR1cm4gd2Nfc3RhdGVtYWNoKGNvbm4pOworICAgIH0KKworICAgIGlmKGZpbmZvLT5mbGFncyAmIENVUkxGSU5GT0ZMQUdfS05PV05fU0laRSkKKyAgICAgIGZ0cGMtPmtub3duX2ZpbGVzaXplID0gZmluZm8tPnNpemU7CisKKyAgICByZXQgPSBmdHBfcGFyc2VfdXJsX3BhdGgoY29ubik7CisgICAgaWYocmV0KSB7CisgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIC8qIHdlIGRvbid0IG5lZWQgdGhlIEN1cmxfZmlsZWluZm8gb2YgZmlyc3QgZmlsZSBhbnltb3JlICovCisgICAgQ3VybF9sbGlzdF9yZW1vdmUod2lsZGNhcmQtPmZpbGVsaXN0LCB3aWxkY2FyZC0+ZmlsZWxpc3QtPmhlYWQsIE5VTEwpOworCisgICAgaWYod2lsZGNhcmQtPmZpbGVsaXN0LT5zaXplID09IDApIHsgLyogcmVtYWlucyBvbmx5IG9uZSBmaWxlIHRvIGRvd24uICovCisgICAgICB3aWxkY2FyZC0+c3RhdGUgPSBDVVJMV0NfQ0xFQU47CisgICAgICAvKiBhZnRlciB0aGF0IHdpbGwgYmUgZnRwX2RvIGNhbGxlZCBvbmNlIGFnYWluIGFuZCBubyB0cmFuc2ZlcgorICAgICAgICAgd2lsbCBiZSBkb25lIGJlY2F1c2Ugb2YgQ1VSTFdDX0NMRUFOIHN0YXRlICovCisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgfQorICB9IGJyZWFrOworCisgIGNhc2UgQ1VSTFdDX1NLSVA6IHsKKyAgICBpZihjb25uLT5kYXRhLT5zZXQuY2h1bmtfZW5kKQorICAgICAgY29ubi0+ZGF0YS0+c2V0LmNodW5rX2VuZChjb25uLT5kYXRhLT53aWxkY2FyZC5jdXN0b21wdHIpOworICAgIEN1cmxfbGxpc3RfcmVtb3ZlKHdpbGRjYXJkLT5maWxlbGlzdCwgd2lsZGNhcmQtPmZpbGVsaXN0LT5oZWFkLCBOVUxMKTsKKyAgICB3aWxkY2FyZC0+c3RhdGUgPSAod2lsZGNhcmQtPmZpbGVsaXN0LT5zaXplID09IDApID8KKyAgICAgICAgICAgICAgICAgICAgICBDVVJMV0NfQ0xFQU4gOiBDVVJMV0NfRE9XTkxPQURJTkc7CisgICAgcmV0dXJuIHdjX3N0YXRlbWFjaChjb25uKTsKKyAgfQorCisgIGNhc2UgQ1VSTFdDX0NMRUFOOiB7CisgICAgc3RydWN0IGZ0cF93Y190bXBkYXRhICpmdHBfdG1wID0gd2lsZGNhcmQtPnRtcDsKKyAgICByZXQgPSBDVVJMRV9PSzsKKyAgICBpZihmdHBfdG1wKSB7CisgICAgICByZXQgPSBDdXJsX2Z0cF9wYXJzZWxpc3RfZ2V0ZXJyb3IoZnRwX3RtcC0+cGFyc2VyKTsKKyAgICB9CisgICAgd2lsZGNhcmQtPnN0YXRlID0gcmV0ID8gQ1VSTFdDX0VSUk9SIDogQ1VSTFdDX0RPTkU7CisgIH0gYnJlYWs7CisKKyAgY2FzZSBDVVJMV0NfRE9ORToKKyAgY2FzZSBDVVJMV0NfRVJST1I6CisgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdHBfZG8oKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCBhcyAnY3VybF9kbycgZnVuY3Rpb24uIEl0IGRlY29kZXMgdGhlIHBhdGgKKyAqIHBhcnRzIGV0YyBhcyBhIHdyYXBwZXIgdG8gdGhlIGFjdHVhbCBETyBmdW5jdGlvbiAoZnRwX3BlcmZvcm0pLgorICoKKyAqIFRoZSBpbnB1dCBhcmd1bWVudCBpcyBhbHJlYWR5IGNoZWNrZWQgZm9yIHZhbGlkaXR5LgorICovCitzdGF0aWMgQ1VSTGNvZGUgZnRwX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmV0Y29kZSA9IENVUkxFX09LOworICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKworICAqZG9uZSA9IEZBTFNFOyAvKiBkZWZhdWx0IHRvIGZhbHNlICovCisgIGZ0cGMtPndhaXRfZGF0YV9jb25uID0gRkFMU0U7IC8qIGRlZmF1bHQgdG8gbm8gc3VjaCB3YWl0ICovCisKKyAgLyoKKyAgICBTaW5jZSBjb25uZWN0aW9ucyBjYW4gYmUgcmUtdXNlZCBiZXR3ZWVuIFNlc3Npb25IYW5kbGVzLCB0aGlzIG1pZ2h0IGJlIGEKKyAgICBjb25uZWN0aW9uIGFscmVhZHkgZXhpc3RpbmcgYnV0IG9uIGEgZnJlc2ggU2Vzc2lvbkhhbmRsZSBzdHJ1Y3Qgc28gd2UgbXVzdAorICAgIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgZ29vZCAnc3RydWN0IEZUUCcgdG8gcGxheSB3aXRoLiBGb3IgbmV3IGNvbm5lY3Rpb25zLAorICAgIHRoZSBzdHJ1Y3QgRlRQIGlzIGFsbG9jYXRlZCBhbmQgc2V0dXAgaW4gdGhlIGZ0cF9jb25uZWN0KCkgZnVuY3Rpb24uCisgICovCisgIEN1cmxfcmVzZXRfcmVxcHJvdG8oY29ubik7CisgIHJldGNvZGUgPSBmdHBfaW5pdChjb25uKTsKKyAgaWYocmV0Y29kZSkKKyAgICByZXR1cm4gcmV0Y29kZTsKKworICBpZihjb25uLT5kYXRhLT5zZXQud2lsZGNhcmRtYXRjaCkgeworICAgIHJldGNvZGUgPSB3Y19zdGF0ZW1hY2goY29ubik7CisgICAgaWYoY29ubi0+ZGF0YS0+d2lsZGNhcmQuc3RhdGUgPT0gQ1VSTFdDX1NLSVAgfHwKKyAgICAgIGNvbm4tPmRhdGEtPndpbGRjYXJkLnN0YXRlID09IENVUkxXQ19ET05FKSB7CisgICAgICAvKiBkbyBub3QgY2FsbCBmdHBfcmVndWxhcl90cmFuc2ZlciAqLworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICBpZihyZXRjb2RlKSAvKiBlcnJvciwgbG9vcCBvciBza2lwcGluZyB0aGUgZmlsZSAqLworICAgICAgcmV0dXJuIHJldGNvZGU7CisgIH0KKyAgZWxzZSB7IC8qIG5vIHdpbGRjYXJkIEZTTSBuZWVkZWQgKi8KKyAgICByZXRjb2RlID0gZnRwX3BhcnNlX3VybF9wYXRoKGNvbm4pOworICAgIGlmKHJldGNvZGUpCisgICAgICByZXR1cm4gcmV0Y29kZTsKKyAgfQorCisgIHJldGNvZGUgPSBmdHBfcmVndWxhcl90cmFuc2Zlcihjb25uLCBkb25lKTsKKworICByZXR1cm4gcmV0Y29kZTsKK30KKworCitDVVJMY29kZSBDdXJsX2Z0cHNlbmRmKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHNzaXplX3QgYnl0ZXNfd3JpdHRlbjsKKyNkZWZpbmUgU0JVRl9TSVpFIDEwMjQKKyAgY2hhciBzW1NCVUZfU0laRV07CisgIHNpemVfdCB3cml0ZV9sZW47CisgIGNoYXIgKnNwdHI9czsKKyAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7CisjaWYgZGVmaW5lZChIQVZFX0tSQjQpIHx8IGRlZmluZWQoSEFWRV9HU1NBUEkpCisgIGVudW0gcHJvdGVjdGlvbl9sZXZlbCBkYXRhX3NlYyA9IGNvbm4tPmRhdGFfcHJvdDsKKyNlbmRpZgorCisgIHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0KGFwLCBmbXQpOworICB2c25wcmludGYocywgU0JVRl9TSVpFLTMsIGZtdCwgYXApOworICB2YV9lbmQoYXApOworCisgIHN0cmNhdChzLCAiXHJcbiIpOyAvKiBhcHBlbmQgYSB0cmFpbGluZyBDUkxGICovCisKKyAgYnl0ZXNfd3JpdHRlbj0wOworICB3cml0ZV9sZW4gPSBzdHJsZW4ocyk7CisKKyAgcmVzID0gQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsoY29ubi0+ZGF0YSwgcywgd3JpdGVfbGVuKTsKKyAgLyogQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsgY2FsbHMgZmFpbGYgaWYgdW5zdWNjZXNzZnVsICovCisgIGlmKHJlcykKKyAgICByZXR1cm4ocmVzKTsKKworICBmb3IoOzspIHsKKyNpZiBkZWZpbmVkKEhBVkVfS1JCNCkgfHwgZGVmaW5lZChIQVZFX0dTU0FQSSkKKyAgICBjb25uLT5kYXRhX3Byb3QgPSBQUk9UX0NNRDsKKyNlbmRpZgorICAgIHJlcyA9IEN1cmxfd3JpdGUoY29ubiwgY29ubi0+c29ja1tGSVJTVFNPQ0tFVF0sIHNwdHIsIHdyaXRlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICZieXRlc193cml0dGVuKTsKKyNpZiBkZWZpbmVkKEhBVkVfS1JCNCkgfHwgZGVmaW5lZChIQVZFX0dTU0FQSSkKKyAgICBERUJVR0FTU0VSVChkYXRhX3NlYyA+IFBST1RfTk9ORSAmJiBkYXRhX3NlYyA8IFBST1RfTEFTVCk7CisgICAgY29ubi0+ZGF0YV9wcm90ID0gZGF0YV9zZWM7CisjZW5kaWYKKworICAgIGlmKENVUkxFX09LICE9IHJlcykKKyAgICAgIGJyZWFrOworCisgICAgaWYoY29ubi0+ZGF0YS0+c2V0LnZlcmJvc2UpCisgICAgICBDdXJsX2RlYnVnKGNvbm4tPmRhdGEsIENVUkxJTkZPX0hFQURFUl9PVVQsCisgICAgICAgICAgICAgICAgIHNwdHIsIChzaXplX3QpYnl0ZXNfd3JpdHRlbiwgY29ubik7CisKKyAgICBpZihieXRlc193cml0dGVuICE9IChzc2l6ZV90KXdyaXRlX2xlbikgeworICAgICAgd3JpdGVfbGVuIC09IGJ5dGVzX3dyaXR0ZW47CisgICAgICBzcHRyICs9IGJ5dGVzX3dyaXR0ZW47CisgICAgfQorICAgIGVsc2UKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHJlczsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRwX3F1aXQoKQorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBzY2xvc2UoKSBvbiBhbiBmdHAgY29udHJvbCBjb25uZWN0aW9uCisgKiAobm90IGRhdGEgY29ubmVjdGlvbnMpLiBXZSBzaG91bGQgdGhlbiB3YWl0IGZvciB0aGUgcmVzcG9uc2UgZnJvbSB0aGUKKyAqIHNlcnZlciBiZWZvcmUgcmV0dXJuaW5nLiBUaGUgY2FsbGluZyBjb2RlIHNob3VsZCB0aGVuIHRyeSB0byBjbG9zZSB0aGUKKyAqIGNvbm5lY3Rpb24uCisgKgorICovCitzdGF0aWMgQ1VSTGNvZGUgZnRwX3F1aXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKworICBpZihjb25uLT5wcm90by5mdHBjLmN0bF92YWxpZCkgeworICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLmZ0cGMucHAsICJRVUlUIiwgTlVMTCk7CisgICAgaWYocmVzdWx0KSB7CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiRmFpbHVyZSBzZW5kaW5nIFFVSVQgY29tbWFuZDogJXMiLAorICAgICAgICAgICAgY3VybF9lYXN5X3N0cmVycm9yKHJlc3VsdCkpOworICAgICAgY29ubi0+cHJvdG8uZnRwYy5jdGxfdmFsaWQgPSBGQUxTRTsgLyogbWFyayBjb250cm9sIGNvbm5lY3Rpb24gYXMgYmFkICovCisgICAgICBjb25uLT5iaXRzLmNsb3NlID0gVFJVRTsgLyogbWFyayBmb3IgY29ubmVjdGlvbiBjbG9zdXJlICovCisgICAgICBzdGF0ZShjb25uLCBGVFBfU1RPUCk7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRlKGNvbm4sIEZUUF9RVUlUKTsKKworICAgIHJlc3VsdCA9IGZ0cF9lYXN5X3N0YXRlbWFjaChjb25uKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZ0cF9kaXNjb25uZWN0KCkKKyAqCisgKiBEaXNjb25uZWN0IGZyb20gYW4gRlRQIHNlcnZlci4gQ2xlYW51cCBwcm90b2NvbC1zcGVjaWZpYyBwZXItY29ubmVjdGlvbgorICogcmVzb3VyY2VzLiBCTE9DS0lORy4KKyAqLworc3RhdGljIENVUkxjb2RlIGZ0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCit7CisgIHN0cnVjdCBmdHBfY29ubiAqZnRwYz0gJmNvbm4tPnByb3RvLmZ0cGM7CisgIHN0cnVjdCBwaW5ncG9uZyAqcHAgPSAmZnRwYy0+cHA7CisKKyAgLyogV2UgY2Fubm90IHNlbmQgcXVpdCB1bmNvbmRpdGlvbmFsbHkuIElmIHRoaXMgY29ubmVjdGlvbiBpcyBzdGFsZSBvcgorICAgICBiYWQgaW4gYW55IHdheSwgc2VuZGluZyBxdWl0IGFuZCB3YWl0aW5nIGFyb3VuZCBoZXJlIHdpbGwgbWFrZSB0aGUKKyAgICAgZGlzY29ubmVjdCB3YWl0IGluIHZhaW4gYW5kIGNhdXNlIG1vcmUgcHJvYmxlbXMgdGhhbiB3ZSBuZWVkIHRvLgorCisgICAgIGZ0cF9xdWl0KCkgd2lsbCBjaGVjayB0aGUgc3RhdGUgb2YgZnRwLT5jdGxfdmFsaWQuIElmIGl0J3Mgb2sgaXQKKyAgICAgd2lsbCB0cnkgdG8gc2VuZCB0aGUgUVVJVCBjb21tYW5kLCBvdGhlcndpc2UgaXQgd2lsbCBqdXN0IHJldHVybi4KKyAgKi8KKyAgaWYoZGVhZF9jb25uZWN0aW9uKQorICAgIGZ0cGMtPmN0bF92YWxpZCA9IEZBTFNFOworCisgIC8qIFRoZSBGVFAgc2Vzc2lvbiBtYXkgb3IgbWF5IG5vdCBoYXZlIGJlZW4gYWxsb2NhdGVkL3NldHVwIGF0IHRoaXMgcG9pbnQhICovCisgICh2b2lkKWZ0cF9xdWl0KGNvbm4pOyAvKiBpZ25vcmUgZXJyb3JzIG9uIHRoZSBRVUlUICovCisKKyAgaWYoZnRwYy0+ZW50cnlwYXRoKSB7CisgICAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICAgIGlmKGRhdGEtPnN0YXRlLm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGggPT0gZnRwYy0+ZW50cnlwYXRoKSB7CisgICAgICBkYXRhLT5zdGF0ZS5tb3N0X3JlY2VudF9mdHBfZW50cnlwYXRoID0gTlVMTDsKKyAgICB9CisgICAgZnJlZShmdHBjLT5lbnRyeXBhdGgpOworICAgIGZ0cGMtPmVudHJ5cGF0aCA9IE5VTEw7CisgIH0KKworICBmcmVlZGlycyhmdHBjKTsKKyAgaWYoZnRwYy0+cHJldnBhdGgpIHsKKyAgICBmcmVlKGZ0cGMtPnByZXZwYXRoKTsKKyAgICBmdHBjLT5wcmV2cGF0aCA9IE5VTEw7CisgIH0KKyAgaWYoZnRwYy0+c2VydmVyX29zKSB7CisgICAgZnJlZShmdHBjLT5zZXJ2ZXJfb3MpOworICAgIGZ0cGMtPnNlcnZlcl9vcyA9IE5VTEw7CisgIH0KKworICBDdXJsX3BwX2Rpc2Nvbm5lY3QocHApOworCisjaWYgZGVmaW5lZChIQVZFX0tSQjQpIHx8IGRlZmluZWQoSEFWRV9HU1NBUEkpCisgIEN1cmxfc2VjX2VuZChjb25uKTsKKyNlbmRpZgorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRwX3BhcnNlX3VybF9wYXRoKCkKKyAqCisgKiBQYXJzZSB0aGUgVVJMIHBhdGggaW50byBzZXBhcmF0ZSBwYXRoIGNvbXBvbmVudHMuCisgKgorICovCitzdGF0aWMKK0NVUkxjb2RlIGZ0cF9wYXJzZV91cmxfcGF0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgLyogdGhlIGZ0cCBzdHJ1Y3QgaXMgYWxyZWFkeSBpbml0ZWQgaW4gZnRwX2Nvbm5lY3QoKSAqLworICBzdHJ1Y3QgRlRQICpmdHAgPSBkYXRhLT5zdGF0ZS5wcm90by5mdHA7CisgIHN0cnVjdCBmdHBfY29ubiAqZnRwYyA9ICZjb25uLT5wcm90by5mdHBjOworICBjb25zdCBjaGFyICpzbGFzaF9wb3M7ICAvKiBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgJy8nIGNoYXIgaW4gY3VycG9zICovCisgIGNvbnN0IGNoYXIgKnBhdGhfdG9fdXNlID0gZGF0YS0+c3RhdGUucGF0aDsKKyAgY29uc3QgY2hhciAqY3VyX3BvczsKKyAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBOVUxMOworCisgIGN1cl9wb3MgPSBwYXRoX3RvX3VzZTsgLyogY3VycmVudCBwb3NpdGlvbiBpbiBwYXRoLiBwb2ludCBhdCB0aGUgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBuZXh0IHBhdGggY29tcG9uZW50ICovCisKKyAgZnRwYy0+Y3RsX3ZhbGlkID0gRkFMU0U7CisgIGZ0cGMtPmN3ZGZhaWwgPSBGQUxTRTsKKworICBzd2l0Y2goZGF0YS0+c2V0LmZ0cF9maWxlbWV0aG9kKSB7CisgIGNhc2UgRlRQRklMRV9OT0NXRDoKKyAgICAvKiBmYXN0ZXN0LCBidXQgbGVzcyBzdGFuZGFyZC1jb21wbGlhbnQgKi8KKworICAgIC8qCisgICAgICBUaGUgYmVzdCB0aW1lIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHBhdGggaXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBpcyByaWdodAorICAgICAgaGVyZS4gc286CisKKyAgICAgIHRoZSBmaXJzdCBjb25kaXRpb24gaW4gdGhlIGlmKCkgcmlnaHQgaGVyZSwgaXMgdGhlcmUganVzdCBpbiBjYXNlCisgICAgICBzb21lb25lIGRlY2lkZXMgdG8gc2V0IHBhdGggdG8gTlVMTCBvbmUgZGF5CisgICAqLworICAgIGlmKGRhdGEtPnN0YXRlLnBhdGggJiYKKyAgICAgICBkYXRhLT5zdGF0ZS5wYXRoWzBdICYmCisgICAgICAgKGRhdGEtPnN0YXRlLnBhdGhbc3RybGVuKGRhdGEtPnN0YXRlLnBhdGgpIC0gMV0gIT0gJy8nKSApCisgICAgICBmaWxlbmFtZSA9IGRhdGEtPnN0YXRlLnBhdGg7ICAvKiB0aGlzIGlzIGEgZnVsbCBmaWxlIHBhdGggKi8KKyAgICAgIC8qCisgICAgICAgIGZ0cGMtPmZpbGUgaXMgbm90IHVzZWQgYW55d2hlcmUgb3RoZXIgdGhhbiBmb3Igb3BlcmF0aW9ucyBvbiBhIGZpbGUuCisgICAgICAgIEluIG90aGVyIHdvcmRzLCBuZXZlciBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuCisgICAgICAgIFNvIHdlIGNhbiBzYWZlbHkgbGVhdmUgZmlsZW5hbWUgYXMgTlVMTCBoZXJlIGFuZCB1c2UgaXQgYXMgYQorICAgICAgICBhcmd1bWVudCBpbiBkaXIvZmlsZSBkZWNpc2lvbnMuCisgICAgICAqLworICAgIGJyZWFrOworCisgIGNhc2UgRlRQRklMRV9TSU5HTEVDV0Q6CisgICAgLyogZ2V0IHRoZSBsYXN0IHNsYXNoICovCisgICAgaWYoIXBhdGhfdG9fdXNlWzBdKSB7CisgICAgICAvKiBubyBkaXIsIG5vIGZpbGUgKi8KKyAgICAgIGZ0cGMtPmRpcmRlcHRoID0gMDsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBzbGFzaF9wb3M9c3RycmNocihjdXJfcG9zLCAnLycpOworICAgIGlmKHNsYXNoX3BvcyB8fCAhKmN1cl9wb3MpIHsKKyAgICAgIGZ0cGMtPmRpcnMgPSBjYWxsb2MoMSwgc2l6ZW9mKGZ0cGMtPmRpcnNbMF0pKTsKKyAgICAgIGlmKCFmdHBjLT5kaXJzKQorICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgICAgZnRwYy0+ZGlyc1swXSA9IGN1cmxfZWFzeV91bmVzY2FwZShjb25uLT5kYXRhLCBzbGFzaF9wb3MgPyBjdXJfcG9zIDogIi8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGFzaF9wb3MgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF9zenRvc2koc2xhc2hfcG9zLWN1cl9wb3MpIDogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICBpZighZnRwYy0+ZGlyc1swXSkgeworICAgICAgICBmcmVlZGlycyhmdHBjKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICB9CisgICAgICBmdHBjLT5kaXJkZXB0aCA9IDE7IC8qIHdlIGNvbnNpZGVyIGl0IHRvIGJlIGEgc2luZ2xlIGRpciAqLworICAgICAgZmlsZW5hbWUgPSBzbGFzaF9wb3MgPyBzbGFzaF9wb3MrMSA6IGN1cl9wb3M7IC8qIHJlc3QgaXMgZmlsZSBuYW1lICovCisgICAgfQorICAgIGVsc2UKKyAgICAgIGZpbGVuYW1lID0gY3VyX3BvczsgIC8qIHRoaXMgaXMgYSBmaWxlIG5hbWUgb25seSAqLworICAgIGJyZWFrOworCisgIGRlZmF1bHQ6IC8qIGFsbG93IHByZXR0eSBtdWNoIGFueXRoaW5nICovCisgIGNhc2UgRlRQRklMRV9NVUxUSUNXRDoKKyAgICBmdHBjLT5kaXJkZXB0aCA9IDA7CisgICAgZnRwYy0+ZGlyYWxsb2MgPSA1OyAvKiBkZWZhdWx0IGRpciBkZXB0aCB0byBhbGxvY2F0ZSAqLworICAgIGZ0cGMtPmRpcnMgPSBjYWxsb2MoZnRwYy0+ZGlyYWxsb2MsIHNpemVvZihmdHBjLT5kaXJzWzBdKSk7CisgICAgaWYoIWZ0cGMtPmRpcnMpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIC8qIHdlIGhhdmUgYSBzcGVjaWFsIGNhc2UgZm9yIGxpc3RpbmcgdGhlIHJvb3QgZGlyIG9ubHkgKi8KKyAgICBpZihzdHJlcXVhbChwYXRoX3RvX3VzZSwgIi8iKSkgeworICAgICAgY3VyX3BvcysrOyAvKiBtYWtlIGl0IHBvaW50IHRvIHRoZSB6ZXJvIGJ5dGUgKi8KKyAgICAgIGZ0cGMtPmRpcnNbMF0gPSBzdHJkdXAoIi8iKTsKKyAgICAgIGZ0cGMtPmRpcmRlcHRoKys7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogcGFyc2UgdGhlIFVSTCBwYXRoIGludG8gc2VwYXJhdGUgcGF0aCBjb21wb25lbnRzICovCisgICAgICB3aGlsZSgoc2xhc2hfcG9zID0gc3RyY2hyKGN1cl9wb3MsICcvJykpICE9IE5VTEwpIHsKKyAgICAgICAgLyogMSBvciAwIHBvaW50ZXIgb2Zmc2V0IHRvIGluZGljYXRlIGFic29sdXRlIGRpcmVjdG9yeSAqLworICAgICAgICBzc2l6ZV90IGFic29sdXRlX2RpciA9ICgoY3VyX3BvcyAtIGRhdGEtPnN0YXRlLnBhdGggPiAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnRwYy0+ZGlyZGVwdGggPT0gMCkpPzE6MDsKKworICAgICAgICAvKiBzZWVrIG91dCB0aGUgbmV4dCBwYXRoIGNvbXBvbmVudCAqLworICAgICAgICBpZihzbGFzaF9wb3MtY3VyX3BvcykgeworICAgICAgICAgIC8qIHdlIHNraXAgZW1wdHkgcGF0aCBjb21wb25lbnRzLCBsaWtlICJ4Ly95IiBzaW5jZSB0aGUgRlRQIGNvbW1hbmQKKyAgICAgICAgICAgICBDV0QgcmVxdWlyZXMgYSBwYXJhbWV0ZXIgYW5kIGEgbm9uLWV4aXN0ZW50IHBhcmFtZXRlciBhKSBkb2Vzbid0CisgICAgICAgICAgICAgd29yayBvbiBtYW55IHNlcnZlcnMgYW5kIGIpIGhhcyBubyBlZmZlY3Qgb24gdGhlIG90aGVycy4gKi8KKyAgICAgICAgICBpbnQgbGVuID0gY3VybHhfc3p0b3NpKHNsYXNoX3BvcyAtIGN1cl9wb3MgKyBhYnNvbHV0ZV9kaXIpOworICAgICAgICAgIGZ0cGMtPmRpcnNbZnRwYy0+ZGlyZGVwdGhdID0KKyAgICAgICAgICAgIGN1cmxfZWFzeV91bmVzY2FwZShjb25uLT5kYXRhLCBjdXJfcG9zIC0gYWJzb2x1dGVfZGlyLCBsZW4sIE5VTEwpOworICAgICAgICAgIGlmKCFmdHBjLT5kaXJzW2Z0cGMtPmRpcmRlcHRoXSkgeyAvKiBydW4gb3V0IG9mIG1lbW9yeSAuLi4gKi8KKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJubyBtZW1vcnkiKTsKKyAgICAgICAgICAgIGZyZWVkaXJzKGZ0cGMpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKGlzQmFkRnRwU3RyaW5nKGZ0cGMtPmRpcnNbZnRwYy0+ZGlyZGVwdGhdKSkgeworICAgICAgICAgICAgZnJlZShmdHBjLT5kaXJzW2Z0cGMtPmRpcmRlcHRoXSk7CisgICAgICAgICAgICBmcmVlZGlycyhmdHBjKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9VUkxfTUFMRk9STUFUOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBjdXJfcG9zID0gc2xhc2hfcG9zICsgMTsgLyoganVtcCB0byB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nICovCisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjdXJfcG9zID0gc2xhc2hfcG9zICsgMTsgLyoganVtcCB0byB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nICovCisgICAgICAgIGlmKCsrZnRwYy0+ZGlyZGVwdGggPj0gZnRwYy0+ZGlyYWxsb2MpIHsKKyAgICAgICAgICAvKiBlbmxhcmdlIGFycmF5ICovCisgICAgICAgICAgY2hhciAqKmJpZ2dlcjsKKyAgICAgICAgICBmdHBjLT5kaXJhbGxvYyAqPSAyOyAvKiBkb3VibGUgdGhlIHNpemUgZWFjaCB0aW1lICovCisgICAgICAgICAgYmlnZ2VyID0gcmVhbGxvYyhmdHBjLT5kaXJzLCBmdHBjLT5kaXJhbGxvYyAqIHNpemVvZihmdHBjLT5kaXJzWzBdKSk7CisgICAgICAgICAgaWYoIWJpZ2dlcikgeworICAgICAgICAgICAgZnJlZWRpcnMoZnRwYyk7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICB9CisgICAgICAgICAgZnRwYy0+ZGlycyA9IGJpZ2dlcjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBmaWxlbmFtZSA9IGN1cl9wb3M7ICAvKiB0aGUgcmVzdCBpcyB0aGUgZmlsZSBuYW1lICovCisgICAgYnJlYWs7CisgIH0gLyogc3dpdGNoICovCisKKyAgaWYoZmlsZW5hbWUgJiYgKmZpbGVuYW1lKSB7CisgICAgZnRwYy0+ZmlsZSA9IGN1cmxfZWFzeV91bmVzY2FwZShjb25uLT5kYXRhLCBmaWxlbmFtZSwgMCwgTlVMTCk7CisgICAgaWYoTlVMTCA9PSBmdHBjLT5maWxlKSB7CisgICAgICBmcmVlZGlycyhmdHBjKTsKKyAgICAgIGZhaWxmKGRhdGEsICJubyBtZW1vcnkiKTsKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKyAgICBpZihpc0JhZEZ0cFN0cmluZyhmdHBjLT5maWxlKSkgeworICAgICAgZnJlZWRpcnMoZnRwYyk7CisgICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKKyAgICB9CisgIH0KKyAgZWxzZQorICAgIGZ0cGMtPmZpbGU9TlVMTDsgLyogaW5zdGVhZCBvZiBwb2ludCB0byBhIHplcm8gYnl0ZSwgd2UgbWFrZSBpdCBhIE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlciAqLworCisgIGlmKGRhdGEtPnNldC51cGxvYWQgJiYgIWZ0cGMtPmZpbGUgJiYgKGZ0cC0+dHJhbnNmZXIgPT0gRlRQVFJBTlNGRVJfQk9EWSkpIHsKKyAgICAvKiBXZSBuZWVkIGEgZmlsZSBuYW1lIHdoZW4gdXBsb2FkaW5nLiBSZXR1cm4gZXJyb3IhICovCisgICAgZmFpbGYoZGF0YSwgIlVwbG9hZGluZyB0byBhIFVSTCB3aXRob3V0IGEgZmlsZSBuYW1lISIpOworICAgIHJldHVybiBDVVJMRV9VUkxfTUFMRk9STUFUOworICB9CisKKyAgZnRwYy0+Y3dkZG9uZSA9IEZBTFNFOyAvKiBkZWZhdWx0IHRvIG5vdCBkb25lICovCisKKyAgaWYoZnRwYy0+cHJldnBhdGgpIHsKKyAgICAvKiBwcmV2cGF0aCBpcyAicmF3IiBzbyB3ZSBjb252ZXJ0IHRoZSBpbnB1dCBwYXRoIGJlZm9yZSB3ZSBjb21wYXJlIHRoZQorICAgICAgIHN0cmluZ3MgKi8KKyAgICBpbnQgZGxlbjsKKyAgICBjaGFyICpwYXRoID0gY3VybF9lYXN5X3VuZXNjYXBlKGNvbm4tPmRhdGEsIGRhdGEtPnN0YXRlLnBhdGgsIDAsICZkbGVuKTsKKyAgICBpZighcGF0aCkgeworICAgICAgZnJlZWRpcnMoZnRwYyk7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisKKyAgICBkbGVuIC09IGZ0cGMtPmZpbGU/Y3VybHhfdXp0b3NpKHN0cmxlbihmdHBjLT5maWxlKSk6MDsKKyAgICBpZigoZGxlbiA9PSBjdXJseF91enRvc2koc3RybGVuKGZ0cGMtPnByZXZwYXRoKSkpICYmCisgICAgICAgc3RybmVxdWFsKHBhdGgsIGZ0cGMtPnByZXZwYXRoLCBkbGVuKSkgeworICAgICAgaW5mb2YoZGF0YSwgIlJlcXVlc3QgaGFzIHNhbWUgcGF0aCBhcyBwcmV2aW91cyB0cmFuc2ZlclxuIik7CisgICAgICBmdHBjLT5jd2Rkb25lID0gVFJVRTsKKyAgICB9CisgICAgZnJlZShwYXRoKTsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyogY2FsbCB0aGlzIHdoZW4gdGhlIERPIHBoYXNlIGhhcyBjb21wbGV0ZWQgKi8KK3N0YXRpYyBDVVJMY29kZSBmdHBfZG9waGFzZV9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29ubmVjdGVkKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IEZUUCAqZnRwID0gY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8uZnRwOworICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKworICBpZihjb25uZWN0ZWQpIHsKKyAgICBib29sIGNvbXBsZXRlZDsKKyAgICByZXN1bHQgPSBmdHBfZG9fbW9yZShjb25uLCAmY29tcGxldGVkKTsKKyAgfQorCisgIGlmKHJlc3VsdCAmJiAoY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdICE9IENVUkxfU09DS0VUX0JBRCkpIHsKKyAgICAvKiBGYWlsdXJlIGRldGVjdGVkLCBjbG9zZSB0aGUgc2Vjb25kIHNvY2tldCBpZiBpdCB3YXMgY3JlYXRlZCBhbHJlYWR5ICovCisgICAgQ3VybF9jbG9zZXNvY2tldChjb25uLCBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pOworICAgIGNvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgaWYoZnRwLT50cmFuc2ZlciAhPSBGVFBUUkFOU0ZFUl9CT0RZKQorICAgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KKyAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKyAgZWxzZSBpZighY29ubmVjdGVkKQorICAgIC8qIHNpbmNlIHdlIGRpZG4ndCBjb25uZWN0IG5vdywgd2Ugd2FudCBkb19tb3JlIHRvIGdldCBjYWxsZWQgKi8KKyAgICBjb25uLT5iaXRzLmRvX21vcmUgPSBUUlVFOworCisgIGZ0cGMtPmN0bF92YWxpZCA9IFRSVUU7IC8qIHNlZW1zIGdvb2QgKi8KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCitzdGF0aWMgQ1VSTGNvZGUgZnRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQgPSBmdHBfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgaWYocmVzdWx0KQorICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgZmFpbGVkXG4iKSk7CisgIGVsc2UgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIHJlc3VsdCA9IGZ0cF9kb3BoYXNlX2RvbmUoY29ubiwgRkFMU0UgLyogbm90IGNvbm5lY3RlZCAqLyk7CisKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZnRwX3JlZ3VsYXJfdHJhbnNmZXIoKQorICoKKyAqIFRoZSBpbnB1dCBhcmd1bWVudCBpcyBhbHJlYWR5IGNoZWNrZWQgZm9yIHZhbGlkaXR5LgorICoKKyAqIFBlcmZvcm1zIGFsbCBjb21tYW5kcyBkb25lIGJlZm9yZSBhIHJlZ3VsYXIgdHJhbnNmZXIgYmV0d2VlbiBhIGxvY2FsIGFuZCBhCisgKiByZW1vdGUgaG9zdC4KKyAqCisgKiBmdHAtPmN0bF92YWxpZCBzdGFydHMgb3V0IGFzIEZBTFNFLCBhbmQgZ2V0cyBzZXQgdG8gVFJVRSBpZiB3ZSByZWFjaCB0aGUKKyAqIGZ0cF9kb25lKCkgZnVuY3Rpb24gd2l0aG91dCBmaW5kaW5nIGFueSBtYWpvciBwcm9ibGVtLgorICovCitzdGF0aWMKK0NVUkxjb2RlIGZ0cF9yZWd1bGFyX3RyYW5zZmVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0PUNVUkxFX09LOworICBib29sIGNvbm5lY3RlZD1GQUxTRTsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKKyAgZGF0YS0+cmVxLnNpemUgPSAtMTsgLyogbWFrZSBzdXJlIHRoaXMgaXMgdW5rbm93biBhdCB0aGlzIHBvaW50ICovCisKKyAgQ3VybF9wZ3JzU2V0VXBsb2FkQ291bnRlcihkYXRhLCAwKTsKKyAgQ3VybF9wZ3JzU2V0RG93bmxvYWRDb3VudGVyKGRhdGEsIDApOworICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIDApOworICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgMCk7CisKKyAgZnRwYy0+Y3RsX3ZhbGlkID0gVFJVRTsgLyogc3RhcnRzIGdvb2QgKi8KKworICByZXN1bHQgPSBmdHBfcGVyZm9ybShjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAmY29ubmVjdGVkLCAvKiBoYXZlIHdlIGNvbm5lY3RlZCBhZnRlciBQQVNWL1BPUlQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgZG9waGFzZV9kb25lKTsgLyogYWxsIGNvbW1hbmRzIGluIHRoZSBETy1waGFzZSBkb25lPyAqLworCisgIGlmKENVUkxFX09LID09IHJlc3VsdCkgeworCisgICAgaWYoISpkb3BoYXNlX2RvbmUpCisgICAgICAvKiB0aGUgRE8gcGhhc2UgaGFzIG5vdCBjb21wbGV0ZWQgeWV0ICovCisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgICByZXN1bHQgPSBmdHBfZG9waGFzZV9kb25lKGNvbm4sIGNvbm5lY3RlZCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBlbHNlCisgICAgZnJlZWRpcnMoZnRwYyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIGZ0cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgY2hhciAqIHR5cGU7CisgIGNoYXIgY29tbWFuZDsKKworICBpZihjb25uLT5iaXRzLmh0dHBwcm94eSAmJiAhZGF0YS0+c2V0LnR1bm5lbF90aHJ1X2h0dHBwcm94eSkgeworICAgIC8qIFVubGVzcyB3ZSBoYXZlIGFza2VkIHRvIHR1bm5lbCBmdHAgb3BlcmF0aW9ucyB0aHJvdWdoIHRoZSBwcm94eSwgd2UKKyAgICAgICBzd2l0Y2ggYW5kIHVzZSBIVFRQIG9wZXJhdGlvbnMgb25seSAqLworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorICAgIGlmKGNvbm4tPmhhbmRsZXIgPT0gJkN1cmxfaGFuZGxlcl9mdHApCisgICAgICBjb25uLT5oYW5kbGVyID0gJkN1cmxfaGFuZGxlcl9mdHBfcHJveHk7CisgICAgZWxzZSB7CisjaWZkZWYgVVNFX1NTTAorICAgICAgY29ubi0+aGFuZGxlciA9ICZDdXJsX2hhbmRsZXJfZnRwc19wcm94eTsKKyNlbHNlCisgICAgICBmYWlsZihkYXRhLCAiRlRQUyBub3Qgc3VwcG9ydGVkISIpOworICAgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOworI2VuZGlmCisgICAgfQorICAgIC8qCisgICAgICogV2UgZXhwbGljaXRseSBtYXJrIHRoaXMgY29ubmVjdGlvbiBhcyBwZXJzaXN0ZW50IGhlcmUgYXMgd2UncmUgZG9pbmcKKyAgICAgKiBGVFAgb3ZlciBIVFRQIGFuZCB0aHVzIHdlIGFjY2lkZW50YWxseSBhdm9pZCBzZXR0aW5nIHRoaXMgdmFsdWUKKyAgICAgKiBvdGhlcndpc2UuCisgICAgICovCisgICAgY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOworI2Vsc2UKKyAgICBmYWlsZihkYXRhLCAiRlRQIG92ZXIgaHR0cCBwcm94eSByZXF1aXJlcyBIVFRQIHN1cHBvcnQgYnVpbHQtaW4hIik7CisgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOworI2VuZGlmCisgIH0KKworICBkYXRhLT5zdGF0ZS5wYXRoKys7ICAgLyogZG9uJ3QgaW5jbHVkZSB0aGUgaW5pdGlhbCBzbGFzaCAqLworICBkYXRhLT5zdGF0ZS5zbGFzaF9yZW1vdmVkID0gVFJVRTsgLyogd2UndmUgc2tpcHBlZCB0aGUgc2xhc2ggKi8KKworICAvKiBGVFAgVVJMcyBzdXBwb3J0IGFuIGV4dGVuc2lvbiBsaWtlICI7dHlwZT08dHlwZWNvZGU+IiB0aGF0CisgICAqIHdlJ2xsIHRyeSB0byBnZXQgbm93ISAqLworICB0eXBlID0gc3Ryc3RyKGRhdGEtPnN0YXRlLnBhdGgsICI7dHlwZT0iKTsKKworICBpZighdHlwZSkKKyAgICB0eXBlID0gc3Ryc3RyKGNvbm4tPmhvc3QucmF3YWxsb2MsICI7dHlwZT0iKTsKKworICBpZih0eXBlKSB7CisgICAgKnR5cGUgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIGl0IHdhcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBob3N0bmFtZSAqLworICAgIGNvbW1hbmQgPSBDdXJsX3Jhd190b3VwcGVyKHR5cGVbNl0pOworICAgIGNvbm4tPmJpdHMudHlwZV9zZXQgPSBUUlVFOworCisgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgY2FzZSAnQSc6IC8qIEFTQ0lJIG1vZGUgKi8KKyAgICAgIGRhdGEtPnNldC5wcmVmZXJfYXNjaWkgPSBUUlVFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdEJzogLyogZGlyZWN0b3J5IG1vZGUgKi8KKyAgICAgIGRhdGEtPnNldC5mdHBfbGlzdF9vbmx5ID0gVFJVRTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnSSc6IC8qIGJpbmFyeSBtb2RlICovCisgICAgZGVmYXVsdDoKKyAgICAgIC8qIHN3aXRjaCBvZmYgQVNDSUkgKi8KKyAgICAgIGRhdGEtPnNldC5wcmVmZXJfYXNjaWkgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9GVFAgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9mdHAuaCBiL2N1cmwtNy4yNS4wL2xpYi9mdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzU5ZjI4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2Z0cC5oCkBAIC0wLDAgKzEsMTYxIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0ZUUF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0ZUUF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInBpbmdwb25nLmgiCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2Z0cDsKKworI2lmZGVmIFVTRV9TU0wKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9mdHBzOworI2VuZGlmCisKK0NVUkxjb2RlIEN1cmxfZnRwc2VuZGYoc3RydWN0IGNvbm5lY3RkYXRhICosIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK0NVUkxjb2RlIEN1cmxfR2V0RlRQUmVzcG9uc2Uoc3NpemVfdCAqbnJlYWQsIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpmdHBjb2RlKTsKKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfRlRQICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGVFAgdW5pcXVlIHNldHVwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKyAgRlRQX1NUT1AsICAgIC8qIGRvIG5vdGhpbmcgc3RhdGUsIHN0b3BzIHRoZSBzdGF0ZSBtYWNoaW5lICovCisgIEZUUF9XQUlUMjIwLCAvKiB3YWl0aW5nIGZvciB0aGUgaW5pdGlhbCAyMjAgcmVzcG9uc2UgaW1tZWRpYXRlbHkgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgIGEgY29ubmVjdCAqLworICBGVFBfQVVUSCwKKyAgRlRQX1VTRVIsCisgIEZUUF9QQVNTLAorICBGVFBfQUNDVCwKKyAgRlRQX1BCU1osCisgIEZUUF9QUk9ULAorICBGVFBfQ0NDLAorICBGVFBfUFdELAorICBGVFBfU1lTVCwKKyAgRlRQX05BTUVGTVQsCisgIEZUUF9RVU9URSwgLyogd2FpdGluZyBmb3IgYSByZXNwb25zZSB0byBhIGNvbW1hbmQgc2VudCBpbiBhIHF1b3RlIGxpc3QgKi8KKyAgRlRQX1JFVFJfUFJFUVVPVEUsCisgIEZUUF9TVE9SX1BSRVFVT1RFLAorICBGVFBfUE9TVFFVT1RFLAorICBGVFBfQ1dELCAgLyogY2hhbmdlIGRpciAqLworICBGVFBfTUtELCAgLyogaWYgdGhlIGRpciBkaWRuJ3QgZXhpc3QgKi8KKyAgRlRQX01EVE0sIC8qIHRvIGZpZ3VyZSBvdXQgdGhlIGRhdGVzdGFtcCAqLworICBGVFBfVFlQRSwgLyogdG8gc2V0IHR5cGUgd2hlbiBkb2luZyBhIGhlYWQtbGlrZSByZXF1ZXN0ICovCisgIEZUUF9MSVNUX1RZUEUsIC8qIHNldCB0eXBlIHdoZW4gYWJvdXQgdG8gZG8gYSBkaXIgbGlzdCAqLworICBGVFBfUkVUUl9UWVBFLCAvKiBzZXQgdHlwZSB3aGVuIGFib3V0IHRvIFJFVFIgYSBmaWxlICovCisgIEZUUF9TVE9SX1RZUEUsIC8qIHNldCB0eXBlIHdoZW4gYWJvdXQgdG8gU1RPUiBhIGZpbGUgKi8KKyAgRlRQX1NJWkUsIC8qIGdldCB0aGUgcmVtb3RlIGZpbGUncyBzaXplIGZvciBoZWFkLWxpa2UgcmVxdWVzdCAqLworICBGVFBfUkVUUl9TSVpFLCAvKiBnZXQgdGhlIHJlbW90ZSBmaWxlJ3Mgc2l6ZSBmb3IgUkVUUiAqLworICBGVFBfU1RPUl9TSVpFLCAvKiBnZXQgdGhlIHNpemUgZm9yIFNUT1IgKi8KKyAgRlRQX1JFU1QsIC8qIHdoZW4gdXNlZCB0byBjaGVjayBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIGl0IGluIGhlYWQtbGlrZSAqLworICBGVFBfUkVUUl9SRVNULCAvKiB3aGVuIGFza2luZyBmb3IgInJlc3VtZSIgaW4gZm9yIFJFVFIgKi8KKyAgRlRQX1BPUlQsIC8qIGdlbmVyaWMgc3RhdGUgZm9yIFBPUlQsIExQUlQgYW5kIEVQUlQsIGNoZWNrIGNvdW50MSAqLworICBGVFBfUFJFVCwgLyogZ2VuZXJpYyBzdGF0ZSBmb3IgUFJFVCBSRVRSLCBQUkVUIFNUT1IgYW5kIFBSRVQgTElTVC9OTFNUICovCisgIEZUUF9QQVNWLCAvKiBnZW5lcmljIHN0YXRlIGZvciBQQVNWIGFuZCBFUFNWLCBjaGVjayBjb3VudDEgKi8KKyAgRlRQX0xJU1QsIC8qIGdlbmVyaWMgc3RhdGUgZm9yIExJU1QsIE5MU1Qgb3IgYSBjdXN0b20gbGlzdCBjb21tYW5kICovCisgIEZUUF9SRVRSLAorICBGVFBfU1RPUiwgLyogZ2VuZXJpYyBzdGF0ZSBmb3IgU1RPUiBhbmQgQVBQRSAqLworICBGVFBfUVVJVCwKKyAgRlRQX0xBU1QgIC8qIG5ldmVyIHVzZWQgKi8KK30gZnRwc3RhdGU7CisKK3N0cnVjdCBmdHBfcGFyc2VsaXN0X2RhdGE7IC8qIGRlZmluZWQgbGF0ZXIgaW4gZnRwbGlzdHBhcnNlci5jICovCisKK3N0cnVjdCBmdHBfd2NfdG1wZGF0YSB7CisgIHN0cnVjdCBmdHBfcGFyc2VsaXN0X2RhdGEgKnBhcnNlcjsKKworICBzdHJ1Y3QgeworICAgIGN1cmxfd3JpdGVfY2FsbGJhY2sgd3JpdGVfZnVuY3Rpb247CisgICAgRklMRSAqZmlsZV9kZXNjcmlwdG9yOworICB9IGJhY2t1cDsKK307CisKK3R5cGVkZWYgZW51bSB7CisgIEZUUEZJTEVfTVVMVElDV0QgID0gMSwgLyogYXMgZGVmaW5lZCBieSBSRkMxNzM4ICovCisgIEZUUEZJTEVfTk9DV0QgICAgID0gMiwgLyogdXNlIFNJWkUgLyBSRVRSIC8gU1RPUiBvbiB0aGUgZnVsbCBwYXRoICovCisgIEZUUEZJTEVfU0lOR0xFQ1dEID0gMyAgLyogbWFrZSBvbmUgQ1dELCB0aGVuIFNJWkUgLyBSRVRSIC8gU1RPUiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlICovCit9IGN1cmxfZnRwZmlsZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgRlRQVFJBTlNGRVJfQk9EWSwgLyogeWVzIGRvIHRyYW5zZmVyIGEgYm9keSAqLworICBGVFBUUkFOU0ZFUl9JTkZPLCAvKiBkbyBzdGlsbCBnbyB0aHJvdWdoIHRvIGdldCBpbmZvL2hlYWRlcnMgKi8KKyAgRlRQVFJBTlNGRVJfTk9ORSwgLyogZG9uJ3QgZ2V0IGFueXRoaW5nIGFuZCBkb24ndCBnZXQgaW5mbyAqLworICBGVFBUUkFOU0ZFUl9MQVNUICAvKiBlbmQgb2YgbGlzdCBtYXJrZXIsIG5ldmVyIHVzZWQgKi8KK30gY3VybF9mdHB0cmFuc2ZlcjsKKworLyogVGhpcyBGVFAgc3RydWN0IGlzIHVzZWQgaW4gdGhlIFNlc3Npb25IYW5kbGUuIEFsbCBGVFAgZGF0YSB0aGF0IGlzCisgICBjb25uZWN0aW9uLW9yaWVudGVkIG11c3QgYmUgaW4gRlRQX2Nvbm4gdG8gcHJvcGVybHkgZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQKKyAgIHBlcmhhcHMgdGhlIFNlc3Npb25IYW5kbGUgaXMgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0aW1lcyB0aGUgY29ubmVjdGlvbiBpcworICAgdXNlZC4gKi8KK3N0cnVjdCBGVFAgeworICBjdXJsX29mZl90ICpieXRlY291bnRwOworICBjaGFyICp1c2VyOyAgICAvKiB1c2VyIG5hbWUgc3RyaW5nICovCisgIGNoYXIgKnBhc3N3ZDsgIC8qIHBhc3N3b3JkIHN0cmluZyAqLworCisgIC8qIHRyYW5zZmVyIGEgZmlsZS9ib2R5IG9yIG5vdCwgZG9uZSBhcyBhIHR5cGVkZWZlZCBlbnVtIGp1c3QgdG8gbWFrZQorICAgICBkZWJ1Z2dlcnMgZGlzcGxheSB0aGUgZnVsbCBzeW1ib2wgYW5kIG5vdCBqdXN0IHRoZSBudW1lcmljYWwgdmFsdWUgKi8KKyAgY3VybF9mdHB0cmFuc2ZlciB0cmFuc2ZlcjsKKyAgY3VybF9vZmZfdCBkb3dubG9hZHNpemU7Cit9OworCisKKy8qIGZ0cF9jb25uIGlzIHVzZWQgZm9yIHN0cnVjdCBjb25uZWN0aW9uLW9yaWVudGVkIGRhdGEgaW4gdGhlIGNvbm5lY3RkYXRhCisgICBzdHJ1Y3QgKi8KK3N0cnVjdCBmdHBfY29ubiB7CisgIHN0cnVjdCBwaW5ncG9uZyBwcDsKKyAgY2hhciAqZW50cnlwYXRoOyAvKiB0aGUgUFdEIHJlcGx5IHdoZW4gd2UgbG9nZ2VkIG9uICovCisgIGNoYXIgKipkaXJzOyAgIC8qIHJlYWxsb2MoKWVkIGFycmF5IGZvciBwYXRoIGNvbXBvbmVudHMgKi8KKyAgaW50IGRpcmRlcHRoOyAgLyogbnVtYmVyIG9mIGVudHJpZXMgdXNlZCBpbiB0aGUgJ2RpcnMnIGFycmF5ICovCisgIGludCBkaXJhbGxvYzsgIC8qIG51bWJlciBvZiBlbnRyaWVzIGFsbG9jYXRlZCBmb3IgdGhlICdkaXJzJyBhcnJheSAqLworICBjaGFyICpmaWxlOyAgICAvKiBkZWNvZGVkIGZpbGUgKi8KKyAgYm9vbCBkb250X2NoZWNrOyAgLyogU2V0IHRvIFRSVUUgdG8gcHJldmVudCB0aGUgZmluYWwgKHBvc3QtdHJhbnNmZXIpCisgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc2l6ZSBhbmQgMjI2LzI1MCBzdGF0dXMgY2hlY2suIEl0IHNob3VsZCBzdGlsbAorICAgICAgICAgICAgICAgICAgICAgICByZWFkIHRoZSBsaW5lLCBqdXN0IGlnbm9yZSB0aGUgcmVzdWx0LiAqLworICBib29sIGN0bF92YWxpZDsgICAvKiBUZWxscyBDdXJsX2Z0cF9xdWl0KCkgd2hldGhlciBvciBub3QgdG8gZG8gYW55dGhpbmcuIElmCisgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25uZWN0aW9uIGhhcyB0aW1lZCBvdXQgb3IgYmVlbiBjbG9zZWQsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIEZBTFNFIHdoZW4gaXQgZ2V0cyB0byBDdXJsX2Z0cF9xdWl0KCkgKi8KKyAgYm9vbCBjd2Rkb25lOyAgICAgLyogaWYgaXQgaGFzIGJlZW4gZGV0ZXJtaW5lZCB0aGF0IHRoZSBwcm9wZXIgQ1dEIGNvbWJvCisgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgaGFzIGJlZW4gZG9uZSAqLworICBib29sIGN3ZGZhaWw7ICAgICAvKiBzZXQgVFJVRSBpZiBhIENXRCBjb21tYW5kIGZhaWxzLCBhcyB0aGVuIHdlIG11c3QgcHJldmVudAorICAgICAgICAgICAgICAgICAgICAgICBjYWNoaW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAqLworICBib29sIHdhaXRfZGF0YV9jb25uOyAvKiB0aGlzIGlzIHNldCBUUlVFIGlmIGRhdGEgY29ubmVjdGlvbiBpcyB3YWl0ZWQgKi8KKyAgY2hhciAqcHJldnBhdGg7ICAgLyogY29ubi0+cGF0aCBmcm9tIHRoZSBwcmV2aW91cyB0cmFuc2ZlciAqLworICBjaGFyIHRyYW5zZmVydHlwZTsgLyogc2V0IGJ5IGZ0cF90cmFuc2ZlcnR5cGUgZm9yIHVzZSBieSBDdXJsX2NsaWVudF93cml0ZSgpYQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVycyAoQS9JIG9yIHplcm8pICovCisgIGludCBjb3VudDE7IC8qIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyIGZvciB0aGUgc3RhdGUgbWFjaGluZSAqLworICBpbnQgY291bnQyOyAvKiBnZW5lcmFsIHB1cnBvc2UgY291bnRlciBmb3IgdGhlIHN0YXRlIG1hY2hpbmUgKi8KKyAgaW50IGNvdW50MzsgLyogZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIgZm9yIHRoZSBzdGF0ZSBtYWNoaW5lICovCisgIGZ0cHN0YXRlIHN0YXRlOyAvKiBhbHdheXMgdXNlIGZ0cC5jOnN0YXRlKCkgdG8gY2hhbmdlIHN0YXRlISAqLworICBmdHBzdGF0ZSBzdGF0ZV9zYXZlZDsgLyogdHJhbnNmZXIgdHlwZSBzYXZlZCB0byBiZSByZWxvYWRlZCBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkICovCisgIGN1cmxfb2ZmX3QgcmV0cl9zaXplX3NhdmVkOyAvKiBTaXplIG9mIHJldHJpZXZlZCBmaWxlIHNhdmVkICovCisgIGNoYXIgKiBzZXJ2ZXJfb3M7ICAgICAvKiBUaGUgdGFyZ2V0IHNlcnZlciBvcGVyYXRpbmcgc3lzdGVtLiAqLworICBjdXJsX29mZl90IGtub3duX2ZpbGVzaXplOyAvKiBmaWxlIHNpemUgaXMgZGlmZmVyZW50IGZyb20gLTEsIGlmIHdpbGRjYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJU1QgcGFyc2luZyB3YXMgZG9uZSBhbmQgd2Nfc3RhdGVtYWNoIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCAqLworfTsKKworI2RlZmluZSBERUZBVUxUX0FDQ0VQVF9USU1FT1VUICAgNjAwMDAgLyogbWlsbGlzZWNvbmRzID09IG9uZSBtaW51dGUgKi8KKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0ZUUF9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvZnRwbGlzdHBhcnNlci5jIGIvY3VybC03LjI1LjAvbGliL2Z0cGxpc3RwYXJzZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmY2ZTllCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2Z0cGxpc3RwYXJzZXIuYwpAQCAtMCwwICsxLDEwNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIE5vdyBpbXBsZW1lbnRlZDoKKyAqCisgKiAxKSBVTklYIHZlcnNpb24gMQorICogZHJ3eHIteHIteCAxIHVzZXIwMSBmdHAgIDUxMiBKYW4gMjkgMjM6MzIgcHJvZworICogMikgVU5JWCB2ZXJzaW9uIDIKKyAqIGRyd3hyLXhyLXggMSB1c2VyMDEgZnRwICA1MTIgSmFuIDI5IDE5OTcgIHByb2cKKyAqIDMpIFVOSVggdmVyc2lvbiAzCisgKiBkcnd4ci14ci14IDEgICAgICAxICAgMSAgNTEyIEphbiAyOSAyMzozMiBwcm9nCisgKiA0KSBVTklYIHN5bWxpbmsKKyAqIGxyd3hyLXhyLXggMSB1c2VyMDEgZnRwICA1MTIgSmFuIDI5IDIzOjMyIHByb2cgLT4gcHJvZzIwMDAKKyAqIDUpIERPUyBzdHlsZQorICogMDEtMjktOTcgMTE6MzJQTSA8RElSPiBwcm9nCisgKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlICJmdHBsaXN0cGFyc2VyLmgiCisjaW5jbHVkZSAiY3VybF9mbm1hdGNoLmgiCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAiZnRwLmgiCisjaW5jbHVkZSAiZmlsZWluZm8uaCIKKyNpbmNsdWRlICJsbGlzdC5oIgorI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgorI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgImZ0cC5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qIGFsbG9jcyBidWZmZXIgd2hpY2ggd2lsbCBjb250YWluIG9uZSBsaW5lIG9mIExJU1QgY29tbWFuZCByZXNwb25zZSAqLworI2RlZmluZSBGVFBfQlVGRkVSX0FMTE9DU0laRSAxNjAKKwordHlwZWRlZiBlbnVtIHsKKyAgUExfVU5JWF9UT1RBTFNJWkUgPSAwLAorICBQTF9VTklYX0ZJTEVUWVBFLAorICBQTF9VTklYX1BFUk1JU1NJT04sCisgIFBMX1VOSVhfSExJTktTLAorICBQTF9VTklYX1VTRVIsCisgIFBMX1VOSVhfR1JPVVAsCisgIFBMX1VOSVhfU0laRSwKKyAgUExfVU5JWF9USU1FLAorICBQTF9VTklYX0ZJTEVOQU1FLAorICBQTF9VTklYX1NZTUxJTksKK30gcGxfdW5peF9tYWluc3RhdGU7CisKK3R5cGVkZWYgdW5pb24geworICBlbnVtIHsKKyAgICBQTF9VTklYX1RPVEFMU0laRV9JTklUID0gMCwKKyAgICBQTF9VTklYX1RPVEFMU0laRV9SRUFESU5HCisgIH0gdG90YWxfZGlyc2l6ZTsKKworICBlbnVtIHsKKyAgICBQTF9VTklYX0hMSU5LU19QUkVTUEFDRSA9IDAsCisgICAgUExfVU5JWF9ITElOS1NfTlVNQkVSCisgIH0gaGxpbmtzOworCisgIGVudW0geworICAgIFBMX1VOSVhfVVNFUl9QUkVTUEFDRSA9IDAsCisgICAgUExfVU5JWF9VU0VSX1BBUlNJTkcKKyAgfSB1c2VyOworCisgIGVudW0geworICAgIFBMX1VOSVhfR1JPVVBfUFJFU1BBQ0UgPSAwLAorICAgIFBMX1VOSVhfR1JPVVBfTkFNRQorICB9IGdyb3VwOworCisgIGVudW0geworICAgIFBMX1VOSVhfU0laRV9QUkVTUEFDRSA9IDAsCisgICAgUExfVU5JWF9TSVpFX05VTUJFUgorICB9IHNpemU7CisKKyAgZW51bSB7CisgICAgUExfVU5JWF9USU1FX1BSRVBBUlQxID0gMCwKKyAgICBQTF9VTklYX1RJTUVfUEFSVDEsCisgICAgUExfVU5JWF9USU1FX1BSRVBBUlQyLAorICAgIFBMX1VOSVhfVElNRV9QQVJUMiwKKyAgICBQTF9VTklYX1RJTUVfUFJFUEFSVDMsCisgICAgUExfVU5JWF9USU1FX1BBUlQzCisgIH0gdGltZTsKKworICBlbnVtIHsKKyAgICBQTF9VTklYX0ZJTEVOQU1FX1BSRVNQQUNFID0gMCwKKyAgICBQTF9VTklYX0ZJTEVOQU1FX05BTUUsCisgICAgUExfVU5JWF9GSUxFTkFNRV9XSU5ET1dTRU9MCisgIH0gZmlsZW5hbWU7CisKKyAgZW51bSB7CisgICAgUExfVU5JWF9TWU1MSU5LX1BSRVNQQUNFID0gMCwKKyAgICBQTF9VTklYX1NZTUxJTktfTkFNRSwKKyAgICBQTF9VTklYX1NZTUxJTktfUFJFVEFSR0VUMSwKKyAgICBQTF9VTklYX1NZTUxJTktfUFJFVEFSR0VUMiwKKyAgICBQTF9VTklYX1NZTUxJTktfUFJFVEFSR0VUMywKKyAgICBQTF9VTklYX1NZTUxJTktfUFJFVEFSR0VUNCwKKyAgICBQTF9VTklYX1NZTUxJTktfVEFSR0VULAorICAgIFBMX1VOSVhfU1lNTElOS19XSU5ET1dTRU9MCisgIH0gc3ltbGluazsKK30gcGxfdW5peF9zdWJzdGF0ZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgUExfV0lOTlRfREFURSA9IDAsCisgIFBMX1dJTk5UX1RJTUUsCisgIFBMX1dJTk5UX0RJUk9SU0laRSwKKyAgUExfV0lOTlRfRklMRU5BTUUKK30gcGxfd2luTlRfbWFpbnN0YXRlOworCit0eXBlZGVmIHVuaW9uIHsKKyAgZW51bSB7CisgICAgUExfV0lOTlRfVElNRV9QUkVTUEFDRSA9IDAsCisgICAgUExfV0lOTlRfVElNRV9USU1FCisgIH0gdGltZTsKKyAgZW51bSB7CisgICAgUExfV0lOTlRfRElST1JTSVpFX1BSRVNQQUNFID0gMCwKKyAgICBQTF9XSU5OVF9ESVJPUlNJWkVfQ09OVEVOVAorICB9IGRpcm9yc2l6ZTsKKyAgZW51bSB7CisgICAgUExfV0lOTlRfRklMRU5BTUVfUFJFU1BBQ0UgPSAwLAorICAgIFBMX1dJTk5UX0ZJTEVOQU1FX0NPTlRFTlQsCisgICAgUExfV0lOTlRfRklMRU5BTUVfV0lORU9MCisgIH0gZmlsZW5hbWU7Cit9IHBsX3dpbk5UX3N1YnN0YXRlOworCisvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIGluIHdpbGRjYXJkIGRvd25sb2FkaW5nIC0gZm9yIHBhcnNpbmcgTElTVCByZXNwb25zZSAqLworc3RydWN0IGZ0cF9wYXJzZWxpc3RfZGF0YSB7CisgIGVudW0geworICAgIE9TX1RZUEVfVU5LTk9XTiA9IDAsCisgICAgT1NfVFlQRV9VTklYLAorICAgIE9TX1RZUEVfV0lOX05UCisgIH0gb3NfdHlwZTsKKworICB1bmlvbiB7CisgICAgc3RydWN0IHsKKyAgICAgIHBsX3VuaXhfbWFpbnN0YXRlIG1haW47CisgICAgICBwbF91bml4X3N1YnN0YXRlIHN1YjsKKyAgICB9IFVOSVg7CisKKyAgICBzdHJ1Y3QgeworICAgICAgcGxfd2luTlRfbWFpbnN0YXRlIG1haW47CisgICAgICBwbF93aW5OVF9zdWJzdGF0ZSBzdWI7CisgICAgfSBOVDsKKyAgfSBzdGF0ZTsKKworICBDVVJMY29kZSBlcnJvcjsKKyAgc3RydWN0IGN1cmxfZmlsZWluZm8gKmZpbGVfZGF0YTsKKyAgdW5zaWduZWQgaW50IGl0ZW1fbGVuZ3RoOworICBzaXplX3QgaXRlbV9vZmZzZXQ7CisgIHN0cnVjdCB7CisgICAgc2l6ZV90IGZpbGVuYW1lOworICAgIHNpemVfdCB1c2VyOworICAgIHNpemVfdCBncm91cDsKKyAgICBzaXplX3QgdGltZTsKKyAgICBzaXplX3QgcGVybTsKKyAgICBzaXplX3Qgc3ltbGlua190YXJnZXQ7CisgIH0gb2Zmc2V0czsKK307CisKK3N0cnVjdCBmdHBfcGFyc2VsaXN0X2RhdGEgKkN1cmxfZnRwX3BhcnNlbGlzdF9kYXRhX2FsbG9jKHZvaWQpCit7CisgIHJldHVybiBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBmdHBfcGFyc2VsaXN0X2RhdGEpKTsKK30KKworCit2b2lkIEN1cmxfZnRwX3BhcnNlbGlzdF9kYXRhX2ZyZWUoc3RydWN0IGZ0cF9wYXJzZWxpc3RfZGF0YSAqKnBsX2RhdGEpCit7CisgIGlmKCpwbF9kYXRhKQorICAgIGZyZWUoKnBsX2RhdGEpOworICAqcGxfZGF0YSA9IE5VTEw7Cit9CisKKworQ1VSTGNvZGUgQ3VybF9mdHBfcGFyc2VsaXN0X2dldGVycm9yKHN0cnVjdCBmdHBfcGFyc2VsaXN0X2RhdGEgKnBsX2RhdGEpCit7CisgIHJldHVybiBwbF9kYXRhLT5lcnJvcjsKK30KKworCisjZGVmaW5lIEZUUF9MUF9NQUxGT1JNQVRFRF9QRVJNIDB4MDEwMDAwMDAKKworc3RhdGljIGludCBmdHBfcGxfZ2V0X3Blcm1pc3Npb24oY29uc3QgY2hhciAqc3RyKQoreworICBpbnQgcGVybWlzc2lvbnMgPSAwOworICAvKiBVU0VSICovCisgIGlmKHN0clswXSA9PSAncicpCisgICAgcGVybWlzc2lvbnMgfD0gMSA8PCA4OworICBlbHNlIGlmKHN0clswXSAhPSAnLScpCisgICAgcGVybWlzc2lvbnMgfD0gRlRQX0xQX01BTEZPUk1BVEVEX1BFUk07CisgIGlmKHN0clsxXSA9PSAndycpCisgICAgcGVybWlzc2lvbnMgfD0gMSA8PCA3OworICBlbHNlIGlmKHN0clsxXSAhPSAnLScpCisgICAgcGVybWlzc2lvbnMgfD0gRlRQX0xQX01BTEZPUk1BVEVEX1BFUk07CisKKyAgaWYoc3RyWzJdID09ICd4JykKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDY7CisgIGVsc2UgaWYoc3RyWzJdID09ICdzJykgeworICAgIHBlcm1pc3Npb25zIHw9IDEgPDwgNjsKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDExOworICB9CisgIGVsc2UgaWYoc3RyWzJdID09ICdTJykKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDExOworICBlbHNlIGlmKHN0clsyXSAhPSAnLScpCisgICAgcGVybWlzc2lvbnMgfD0gRlRQX0xQX01BTEZPUk1BVEVEX1BFUk07CisgIC8qIEdST1VQICovCisgIGlmKHN0clszXSA9PSAncicpCisgICAgcGVybWlzc2lvbnMgfD0gMSA8PCA1OworICBlbHNlIGlmKHN0clszXSAhPSAnLScpCisgICAgcGVybWlzc2lvbnMgfD0gRlRQX0xQX01BTEZPUk1BVEVEX1BFUk07CisgIGlmKHN0cls0XSA9PSAndycpCisgICAgcGVybWlzc2lvbnMgfD0gMSA8PCA0OworICBlbHNlIGlmKHN0cls0XSAhPSAnLScpCisgICAgcGVybWlzc2lvbnMgfD0gRlRQX0xQX01BTEZPUk1BVEVEX1BFUk07CisgIGlmKHN0cls1XSA9PSAneCcpCisgICAgcGVybWlzc2lvbnMgfD0gMSA8PCAzOworICBlbHNlIGlmKHN0cls1XSA9PSAncycpIHsKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDM7CisgICAgcGVybWlzc2lvbnMgfD0gMSA8PCAxMDsKKyAgfQorICBlbHNlIGlmKHN0cls1XSA9PSAnUycpCisgICAgcGVybWlzc2lvbnMgfD0gMSA8PCAxMDsKKyAgZWxzZSBpZihzdHJbNV0gIT0gJy0nKQorICAgIHBlcm1pc3Npb25zIHw9IEZUUF9MUF9NQUxGT1JNQVRFRF9QRVJNOworICAvKiBvdGhlcnMgKi8KKyAgaWYoc3RyWzZdID09ICdyJykKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDI7CisgIGVsc2UgaWYoc3RyWzZdICE9ICctJykKKyAgICBwZXJtaXNzaW9ucyB8PSBGVFBfTFBfTUFMRk9STUFURURfUEVSTTsKKyAgaWYoc3RyWzddID09ICd3JykKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDE7CisgIGVsc2UgaWYoc3RyWzddICE9ICctJykKKyAgICAgIHBlcm1pc3Npb25zIHw9IEZUUF9MUF9NQUxGT1JNQVRFRF9QRVJNOworICBpZihzdHJbOF0gPT0gJ3gnKQorICAgIHBlcm1pc3Npb25zIHw9IDE7CisgIGVsc2UgaWYoc3RyWzhdID09ICd0JykgeworICAgIHBlcm1pc3Npb25zIHw9IDE7CisgICAgcGVybWlzc2lvbnMgfD0gMSA8PCA5OworICB9CisgIGVsc2UgaWYoc3RyWzhdID09ICdUJykKKyAgICBwZXJtaXNzaW9ucyB8PSAxIDw8IDk7CisgIGVsc2UgaWYoc3RyWzhdICE9ICctJykKKyAgICBwZXJtaXNzaW9ucyB8PSBGVFBfTFBfTUFMRk9STUFURURfUEVSTTsKKworICByZXR1cm4gcGVybWlzc2lvbnM7Cit9CisKK3N0YXRpYyB2b2lkIFBMX0VSUk9SKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgZXJyKQoreworICBzdHJ1Y3QgZnRwX3djX3RtcGRhdGEgKnRtcGRhdGEgPSBjb25uLT5kYXRhLT53aWxkY2FyZC50bXA7CisgIHN0cnVjdCBmdHBfcGFyc2VsaXN0X2RhdGEgKnBhcnNlciA9IHRtcGRhdGEtPnBhcnNlcjsKKyAgaWYocGFyc2VyLT5maWxlX2RhdGEpCisgICAgQ3VybF9maWxlaW5mb19kdG9yKE5VTEwsIHBhcnNlci0+ZmlsZV9kYXRhKTsKKyAgcGFyc2VyLT5maWxlX2RhdGEgPSBOVUxMOworICBwYXJzZXItPmVycm9yID0gZXJyOworfQorCitzdGF0aWMgYm9vbCBmdHBfcGxfZ2V0dGltZShzdHJ1Y3QgZnRwX3BhcnNlbGlzdF9kYXRhICpwYXJzZXIsIGNoYXIgKnN0cmluZykKK3sKKyAgKHZvaWQpcGFyc2VyOworICAodm9pZClzdHJpbmc7CisgIC8qIFRPRE8KKyAgICogVGhlcmUgY291bGQgYmUgcG9zc2libGUgcGFyc2UgdGltZXN0YW1wIGZyb20gc2VydmVyLiBMZWF2aW5nIHVuaW1wbGVtZW50ZWQKKyAgICogZm9yIG5vdy4KKyAgICogSWYgeW91IHdhbnQgaW1wbGVtZW50IHRoaXMsIHBsZWFzZSBhZGQgQ1VSTEZJTkZPRkxBR19LTk9XTl9USU1FIGZsYWcgdG8KKyAgICogcGFyc2VyLT5maWxlX2RhdGEtPmZsYWdzCisgICAqCisgICAqIEZ0cCBzZXJ2ZXJzIGFyZSBnaXZpbmcgdXN1YWxseSB0aGVzZSBmb3JtYXRzOgorICAgKiAgQXByIDExICAxOTk4ICh1bmtub3duIHRpbWUuLiBzZXQgaXQgdG8gMDA6MDA6MDA/KQorICAgKiAgQXByIDExIDEyOjIxICh1bmtub3duIHllYXIgLT4gc2V0IGl0IHRvIE5PVygpIHRpbWU/KQorICAgKiAgMDgtMDUtMDkgIDAyOjQ5UE0gIChtcy1kb3MgZm9ybWF0KQorICAgKiAgMjAxMDA0MjEwOTI1MzggLT4gZm9yIE1MU1QvTUxTRCByZXNwb25zZQorICAgKi8KKworICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBmdHBfcGxfaW5zZXJ0X2ZpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX2ZpbGVpbmZvICpmaW5mbykKK3sKKyAgY3VybF9mbm1hdGNoX2NhbGxiYWNrIGNvbXBhcmU7CisgIHN0cnVjdCBXaWxkY2FyZERhdGEgKndjID0gJmNvbm4tPmRhdGEtPndpbGRjYXJkOworICBzdHJ1Y3QgZnRwX3djX3RtcGRhdGEgKnRtcGRhdGEgPSB3Yy0+dG1wOworICBzdHJ1Y3QgY3VybF9sbGlzdCAqbGxpc3QgPSB3Yy0+ZmlsZWxpc3Q7CisgIHN0cnVjdCBmdHBfcGFyc2VsaXN0X2RhdGEgKnBhcnNlciA9IHRtcGRhdGEtPnBhcnNlcjsKKyAgYm9vbCBhZGQgPSBUUlVFOworCisgIC8qIG1vdmUgZmluZm8gcG9pbnRlcnMgdG8gYl9kYXRhICovCisgIGNoYXIgKnN0ciA9IGZpbmZvLT5iX2RhdGE7CisgIGZpbmZvLT5maWxlbmFtZSAgICAgICA9IHN0ciArIHBhcnNlci0+b2Zmc2V0cy5maWxlbmFtZTsKKyAgZmluZm8tPnN0cmluZ3MuZ3JvdXAgID0gcGFyc2VyLT5vZmZzZXRzLmdyb3VwID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICsgcGFyc2VyLT5vZmZzZXRzLmdyb3VwIDogTlVMTDsKKyAgZmluZm8tPnN0cmluZ3MucGVybSAgID0gcGFyc2VyLT5vZmZzZXRzLnBlcm0gPworICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKyBwYXJzZXItPm9mZnNldHMucGVybSA6IE5VTEw7CisgIGZpbmZvLT5zdHJpbmdzLnRhcmdldCA9IHBhcnNlci0+b2Zmc2V0cy5zeW1saW5rX3RhcmdldCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArIHBhcnNlci0+b2Zmc2V0cy5zeW1saW5rX3RhcmdldCA6IE5VTEw7CisgIGZpbmZvLT5zdHJpbmdzLnRpbWUgICA9IHN0ciArIHBhcnNlci0+b2Zmc2V0cy50aW1lOworICBmaW5mby0+c3RyaW5ncy51c2VyICAgPSBwYXJzZXItPm9mZnNldHMudXNlciA/CisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArIHBhcnNlci0+b2Zmc2V0cy51c2VyIDogTlVMTDsKKworICAvKiBnZXQgY29ycmVjdCBmbm1hdGNoIGNhbGxiYWNrICovCisgIGNvbXBhcmUgPSBjb25uLT5kYXRhLT5zZXQuZm5tYXRjaDsKKyAgaWYoIWNvbXBhcmUpCisgICAgY29tcGFyZSA9IEN1cmxfZm5tYXRjaDsKKworICAvKiBmaWx0ZXIgcGF0dGVybi1jb3JyZXNwb25kaW5nIGZpbGVuYW1lcyAqLworICBpZihjb21wYXJlKGNvbm4tPmRhdGEtPnNldC5mbm1hdGNoX2RhdGEsIHdjLT5wYXR0ZXJuLAorICAgICAgICAgICAgIGZpbmZvLT5maWxlbmFtZSkgPT0gMCkgeworICAgIC8qIGRpc2NhcmQgc3ltbGluayB3aGljaCBpcyBjb250YWluaW5nIG11bHRpcGxlICIgLT4gIiAqLworICAgIGlmKChmaW5mby0+ZmlsZXR5cGUgPT0gQ1VSTEZJTEVUWVBFX1NZTUxJTkspICYmIGZpbmZvLT5zdHJpbmdzLnRhcmdldCAmJgorICAgICAgIChzdHJzdHIoZmluZm8tPnN0cmluZ3MudGFyZ2V0LCAiIC0+ICIpKSkgeworICAgICAgYWRkID0gRkFMU0U7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGFkZCA9IEZBTFNFOworICB9CisKKyAgaWYoYWRkKSB7CisgICAgaWYoIUN1cmxfbGxpc3RfaW5zZXJ0X25leHQobGxpc3QsIGxsaXN0LT50YWlsLCBmaW5mbykpIHsKKyAgICAgIEN1cmxfZmlsZWluZm9fZHRvcihOVUxMLCBmaW5mbyk7CisgICAgICB0bXBkYXRhLT5wYXJzZXItPmZpbGVfZGF0YSA9IE5VTEw7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgQ3VybF9maWxlaW5mb19kdG9yKE5VTEwsIGZpbmZvKTsKKyAgfQorCisgIHRtcGRhdGEtPnBhcnNlci0+ZmlsZV9kYXRhID0gTlVMTDsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzaXplX3QgQ3VybF9mdHBfcGFyc2VsaXN0KGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29ubnB0cikKK3sKKyAgc2l6ZV90IGJ1ZmZsZW4gPSBzaXplKm5tZW1iOworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSAoc3RydWN0IGNvbm5lY3RkYXRhICopY29ubnB0cjsKKyAgc3RydWN0IGZ0cF93Y190bXBkYXRhICp0bXBkYXRhID0gY29ubi0+ZGF0YS0+d2lsZGNhcmQudG1wOworICBzdHJ1Y3QgZnRwX3BhcnNlbGlzdF9kYXRhICpwYXJzZXIgPSB0bXBkYXRhLT5wYXJzZXI7CisgIHN0cnVjdCBjdXJsX2ZpbGVpbmZvICpmaW5mbzsKKyAgdW5zaWduZWQgbG9uZyBpID0gMDsKKyAgQ1VSTGNvZGUgcmM7CisKKyAgaWYocGFyc2VyLT5lcnJvcikgeyAvKiBlcnJvciBpbiBwcmV2aW91cyBjYWxsICovCisgICAgLyogc2NlbmFyaW86CisgICAgICogMS4gY2FsbCA9PiBPSy4uCisgICAgICogMi4gY2FsbCA9PiBPVVRfT0ZfTUVNT1JZIChvciBvdGhlciBlcnJvcikKKyAgICAgKiAzLiAobGFzdCkgY2FsbCA9PiBpcyBza2lwcGVkIFJJR0hUIEhFUkUgYW5kIHRoZSBlcnJvciBpcyBoYWRsZWQgbGF0ZXIKKyAgICAgKiAgICBpbiB3Y19zdGF0ZW1hY2goKQorICAgICAqLworICAgIHJldHVybiBidWZmbGVuOworICB9CisKKyAgaWYocGFyc2VyLT5vc190eXBlID09IE9TX1RZUEVfVU5LTk9XTiAmJiBidWZmbGVuID4gMCkgeworICAgIC8qIGNvbnNpZGVyaW5nIGluZm8gYWJvdXQgRklMRSByZXNwb25zZSBmb3JtYXQgKi8KKyAgICBwYXJzZXItPm9zX3R5cGUgPSAoYnVmZmVyWzBdID49ICcwJyAmJiBidWZmZXJbMF0gPD0gJzknKSA/CisgICAgICAgICAgICAgICAgICAgICAgIE9TX1RZUEVfV0lOX05UIDogT1NfVFlQRV9VTklYOworICB9CisKKyAgd2hpbGUoaSA8IGJ1ZmZsZW4pIHsgLyogRlNNICovCisKKyAgICBjaGFyIGMgPSBidWZmZXJbaV07CisgICAgaWYoIXBhcnNlci0+ZmlsZV9kYXRhKSB7IC8qIHRtcCBmaWxlIGRhdGEgaXMgbm90IGFsbG9jYXRlZCB5ZXQgKi8KKyAgICAgIHBhcnNlci0+ZmlsZV9kYXRhID0gQ3VybF9maWxlaW5mb19hbGxvYygpOworICAgICAgaWYoIXBhcnNlci0+ZmlsZV9kYXRhKSB7CisgICAgICAgIHBhcnNlci0+ZXJyb3IgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgIH0KKyAgICAgIHBhcnNlci0+ZmlsZV9kYXRhLT5iX2RhdGEgPSBtYWxsb2MoRlRQX0JVRkZFUl9BTExPQ1NJWkUpOworICAgICAgaWYoIXBhcnNlci0+ZmlsZV9kYXRhLT5iX2RhdGEpIHsKKyAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfT1VUX09GX01FTU9SWSk7CisgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgfQorICAgICAgcGFyc2VyLT5maWxlX2RhdGEtPmJfc2l6ZSA9IEZUUF9CVUZGRVJfQUxMT0NTSVpFOworICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IDA7CisgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICBmaW5mbyA9IHBhcnNlci0+ZmlsZV9kYXRhOworICAgIGZpbmZvLT5iX2RhdGFbZmluZm8tPmJfdXNlZCsrXSA9IGM7CisKKyAgICBpZihmaW5mby0+Yl91c2VkID49IGZpbmZvLT5iX3NpemUgLSAxKSB7CisgICAgICAvKiBpZiBpdCBpcyBpbXBvcnRhbnQsIGV4dGVuZCBidWZmZXIgc3BhY2UgZm9yIGZpbGUgZGF0YSAqLworICAgICAgY2hhciAqdG1wID0gcmVhbGxvYyhmaW5mby0+Yl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5mby0+Yl9zaXplICsgRlRQX0JVRkZFUl9BTExPQ1NJWkUpOworICAgICAgaWYodG1wKSB7CisgICAgICAgIGZpbmZvLT5iX3NpemUgKz0gRlRQX0JVRkZFUl9BTExPQ1NJWkU7CisgICAgICAgIGZpbmZvLT5iX2RhdGEgPSB0bXA7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgQ3VybF9maWxlaW5mb19kdG9yKE5VTEwsIHBhcnNlci0+ZmlsZV9kYXRhKTsKKyAgICAgICAgcGFyc2VyLT5maWxlX2RhdGEgPSBOVUxMOworICAgICAgICBwYXJzZXItPmVycm9yID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfT1VUX09GX01FTU9SWSk7CisgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAocGFyc2VyLT5vc190eXBlKSB7CisgICAgY2FzZSBPU19UWVBFX1VOSVg6CisgICAgICBzd2l0Y2ggKHBhcnNlci0+c3RhdGUuVU5JWC5tYWluKSB7CisgICAgICBjYXNlIFBMX1VOSVhfVE9UQUxTSVpFOgorICAgICAgICBzd2l0Y2gocGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi50b3RhbF9kaXJzaXplKSB7CisgICAgICAgIGNhc2UgUExfVU5JWF9UT1RBTFNJWkVfSU5JVDoKKyAgICAgICAgICBpZihjID09ICd0JykgeworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi50b3RhbF9kaXJzaXplID0gUExfVU5JWF9UT1RBTFNJWkVfUkVBRElORzsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVgubWFpbiA9IFBMX1VOSVhfRklMRVRZUEU7CisgICAgICAgICAgICAvKiBzdGFydCBGU00gYWdhaW4gbm90IGNvbnNpZGVyaW5nIHNpemUgb2YgZGlyZWN0b3J5ICovCisgICAgICAgICAgICBmaW5mby0+Yl91c2VkID0gMDsKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9UT1RBTFNJWkVfUkVBRElORzoKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyA9PSAnXHInKSB7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoLS07CisgICAgICAgICAgICBmaW5mby0+Yl91c2VkLS07CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoYyA9PSAnXG4nKSB7CisgICAgICAgICAgICBmaW5mby0+Yl9kYXRhW3BhcnNlci0+aXRlbV9sZW5ndGggLSAxXSA9IDA7CisgICAgICAgICAgICBpZihzdHJuY21wKCJ0b3RhbCAiLCBmaW5mby0+Yl9kYXRhLCA2KSA9PSAwKSB7CisgICAgICAgICAgICAgIGNoYXIgKmVuZHB0ciA9IGZpbmZvLT5iX2RhdGErNjsKKyAgICAgICAgICAgICAgLyogaGVyZSB3ZSBjYW4gZGVhbCB3aXRoIGRpcmVjdG9yeSBzaXplICovCisgICAgICAgICAgICAgIHdoaWxlKElTU1BBQ0UoKmVuZHB0cikpCisgICAgICAgICAgICAgICAgZW5kcHRyKys7CisgICAgICAgICAgICAgIGlmKCplbmRwdHIgIT0gMCkgeworICAgICAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVgubWFpbiA9IFBMX1VOSVhfRklMRVRZUEU7CisgICAgICAgICAgICAgICAgZmluZm8tPmJfdXNlZCA9IDA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUExfVU5JWF9GSUxFVFlQRToKKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgIGZpbmZvLT5maWxldHlwZSA9IENVUkxGSUxFVFlQRV9GSUxFOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICBmaW5mby0+ZmlsZXR5cGUgPSBDVVJMRklMRVRZUEVfRElSRUNUT1JZOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdsJzoKKyAgICAgICAgICBmaW5mby0+ZmlsZXR5cGUgPSBDVVJMRklMRVRZUEVfU1lNTElOSzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgZmluZm8tPmZpbGV0eXBlID0gQ1VSTEZJTEVUWVBFX05BTUVEUElQRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgZmluZm8tPmZpbGV0eXBlID0gQ1VSTEZJTEVUWVBFX1NPQ0tFVDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgZmluZm8tPmZpbGV0eXBlID0gQ1VSTEZJTEVUWVBFX0RFVklDRV9DSEFSOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICBmaW5mby0+ZmlsZXR5cGUgPSBDVVJMRklMRVRZUEVfREVWSUNFX0JMT0NLOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdEJzoKKyAgICAgICAgICBmaW5mby0+ZmlsZXR5cGUgPSBDVVJMRklMRVRZUEVfRE9PUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLm1haW4gPSBQTF9VTklYX1BFUk1JU1NJT047CisgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAwOworICAgICAgICBwYXJzZXItPml0ZW1fb2Zmc2V0ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFBMX1VOSVhfUEVSTUlTU0lPTjoKKyAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCsrOworICAgICAgICBpZihwYXJzZXItPml0ZW1fbGVuZ3RoIDw9IDkpIHsKKyAgICAgICAgICBpZighc3RyY2hyKCJyd3gtdFRzUyIsIGMpKSB7CisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihwYXJzZXItPml0ZW1fbGVuZ3RoID09IDEwKSB7CisgICAgICAgICAgdW5zaWduZWQgaW50IHBlcm07CisgICAgICAgICAgaWYoYyAhPSAnICcpIHsKKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBmaW5mby0+Yl9kYXRhWzEwXSA9IDA7IC8qIHRlcm1pbmF0ZSBwZXJtaXNzaW9ucyAqLworICAgICAgICAgIHBlcm0gPSBmdHBfcGxfZ2V0X3Blcm1pc3Npb24oZmluZm8tPmJfZGF0YSArIHBhcnNlci0+aXRlbV9vZmZzZXQpOworICAgICAgICAgIGlmKHBlcm0gJiBGVFBfTFBfTUFMRk9STUFURURfUEVSTSkgeworICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgfQorICAgICAgICAgIHBhcnNlci0+ZmlsZV9kYXRhLT5mbGFncyB8PSBDVVJMRklORk9GTEFHX0tOT1dOX1BFUk07CisgICAgICAgICAgcGFyc2VyLT5maWxlX2RhdGEtPnBlcm0gPSBwZXJtOworICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy5wZXJtID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKworICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAwOworICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5tYWluID0gUExfVU5JWF9ITElOS1M7CisgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi5obGlua3MgPSBQTF9VTklYX0hMSU5LU19QUkVTUEFDRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUExfVU5JWF9ITElOS1M6CisgICAgICAgIHN3aXRjaChwYXJzZXItPnN0YXRlLlVOSVguc3ViLmhsaW5rcykgeworICAgICAgICBjYXNlIFBMX1VOSVhfSExJTktTX1BSRVNQQUNFOgorICAgICAgICAgIGlmKGMgIT0gJyAnKSB7CisgICAgICAgICAgICBpZihjID49ICcwJyAmJiBjIDw9ICc5JykgeworICAgICAgICAgICAgICBwYXJzZXItPml0ZW1fb2Zmc2V0ID0gZmluZm8tPmJfdXNlZCAtIDE7CisgICAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAxOworICAgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLmhsaW5rcyA9IFBMX1VOSVhfSExJTktTX05VTUJFUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9VTklYX0hMSU5LU19OVU1CRVI6CisgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCArKzsKKyAgICAgICAgICBpZihjID09ICcgJykgeworICAgICAgICAgICAgY2hhciAqcDsKKyAgICAgICAgICAgIGxvbmcgaW50IGhsaW5rczsKKyAgICAgICAgICAgIGZpbmZvLT5iX2RhdGFbcGFyc2VyLT5pdGVtX29mZnNldCArIHBhcnNlci0+aXRlbV9sZW5ndGggLSAxXSA9IDA7CisgICAgICAgICAgICBobGlua3MgPSBzdHJ0b2woZmluZm8tPmJfZGF0YSArIHBhcnNlci0+aXRlbV9vZmZzZXQsICZwLCAxMCk7CisgICAgICAgICAgICBpZihwWzBdID09ICdcMCcgJiYgaGxpbmtzICE9IExPTkdfTUFYICYmIGhsaW5rcyAhPSBMT05HX01JTikgeworICAgICAgICAgICAgICBwYXJzZXItPmZpbGVfZGF0YS0+ZmxhZ3MgfD0gQ1VSTEZJTkZPRkxBR19LTk9XTl9ITElOS0NPVU5UOworICAgICAgICAgICAgICBwYXJzZXItPmZpbGVfZGF0YS0+aGFyZGxpbmtzID0gaGxpbmtzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCA9IDA7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5tYWluID0gUExfVU5JWF9VU0VSOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi51c2VyID0gUExfVU5JWF9VU0VSX1BSRVNQQUNFOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGMgPCAnMCcgfHwgYyA+ICc5JykgeworICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQTF9VTklYX1VTRVI6CisgICAgICAgIHN3aXRjaChwYXJzZXItPnN0YXRlLlVOSVguc3ViLnVzZXIpIHsKKyAgICAgICAgY2FzZSBQTF9VTklYX1VTRVJfUFJFU1BBQ0U6CisgICAgICAgICAgaWYoYyAhPSAnICcpIHsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9vZmZzZXQgPSBmaW5mby0+Yl91c2VkIC0gMTsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAxOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi51c2VyID0gUExfVU5JWF9VU0VSX1BBUlNJTkc7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1VOSVhfVVNFUl9QQVJTSU5HOgorICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgICBpZihjID09ICcgJykgeworICAgICAgICAgICAgZmluZm8tPmJfZGF0YVtwYXJzZXItPml0ZW1fb2Zmc2V0ICsgcGFyc2VyLT5pdGVtX2xlbmd0aCAtIDFdID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy51c2VyID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5tYWluID0gUExfVU5JWF9HUk9VUDsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuZ3JvdXAgPSBQTF9VTklYX0dST1VQX1BSRVNQQUNFOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IDA7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFBMX1VOSVhfR1JPVVA6CisgICAgICAgIHN3aXRjaChwYXJzZXItPnN0YXRlLlVOSVguc3ViLmdyb3VwKSB7CisgICAgICAgIGNhc2UgUExfVU5JWF9HUk9VUF9QUkVTUEFDRToKKyAgICAgICAgICBpZihjICE9ICcgJykgeworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IGZpbmZvLT5iX3VzZWQgLSAxOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCA9IDE7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLmdyb3VwID0gUExfVU5JWF9HUk9VUF9OQU1FOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9VTklYX0dST1VQX05BTUU6CisgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCsrOworICAgICAgICAgIGlmKGMgPT0gJyAnKSB7CisgICAgICAgICAgICBmaW5mby0+Yl9kYXRhW3BhcnNlci0+aXRlbV9vZmZzZXQgKyBwYXJzZXItPml0ZW1fbGVuZ3RoIC0gMV0gPSAwOworICAgICAgICAgICAgcGFyc2VyLT5vZmZzZXRzLmdyb3VwID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5tYWluID0gUExfVU5JWF9TSVpFOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi5zaXplID0gUExfVU5JWF9TSVpFX1BSRVNQQUNFOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IDA7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFBMX1VOSVhfU0laRToKKyAgICAgICAgc3dpdGNoKHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc2l6ZSkgeworICAgICAgICBjYXNlIFBMX1VOSVhfU0laRV9QUkVTUEFDRToKKyAgICAgICAgICBpZihjICE9ICcgJykgeworICAgICAgICAgICAgaWYoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKKyAgICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IGZpbmZvLT5iX3VzZWQgLSAxOworICAgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMTsKKyAgICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi5zaXplID0gUExfVU5JWF9TSVpFX05VTUJFUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9VTklYX1NJWkVfTlVNQkVSOgorICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgICBpZihjID09ICcgJykgeworICAgICAgICAgICAgY2hhciAqcDsKKyAgICAgICAgICAgIGN1cmxfb2ZmX3QgZnNpemU7CisgICAgICAgICAgICBmaW5mby0+Yl9kYXRhW3BhcnNlci0+aXRlbV9vZmZzZXQgKyBwYXJzZXItPml0ZW1fbGVuZ3RoIC0gMV0gPSAwOworICAgICAgICAgICAgZnNpemUgPSBjdXJseF9zdHJ0b29mZnQoZmluZm8tPmJfZGF0YStwYXJzZXItPml0ZW1fb2Zmc2V0LCAmcCwgMTApOworICAgICAgICAgICAgaWYocFswXSA9PSAnXDAnICYmIGZzaXplICE9IENVUkxfT0ZGX1RfTUFYICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNpemUgIT0gQ1VSTF9PRkZfVF9NSU4pIHsKKyAgICAgICAgICAgICAgcGFyc2VyLT5maWxlX2RhdGEtPmZsYWdzIHw9IENVUkxGSU5GT0ZMQUdfS05PV05fU0laRTsKKyAgICAgICAgICAgICAgcGFyc2VyLT5maWxlX2RhdGEtPnNpemUgPSBmc2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAwOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IDA7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVgubWFpbiA9IFBMX1VOSVhfVElNRTsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIudGltZSA9IFBMX1VOSVhfVElNRV9QUkVQQVJUMTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZighSVNESUdJVChjKSkgeworICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQTF9VTklYX1RJTUU6CisgICAgICAgIHN3aXRjaChwYXJzZXItPnN0YXRlLlVOSVguc3ViLnRpbWUpIHsKKyAgICAgICAgY2FzZSBQTF9VTklYX1RJTUVfUFJFUEFSVDE6CisgICAgICAgICAgaWYoYyAhPSAnICcpIHsKKyAgICAgICAgICAgIGlmKElTQUxOVU0oYykpIHsKKyAgICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IGZpbmZvLT5iX3VzZWQgLTE7CisgICAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAxOworICAgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLnRpbWUgPSBQTF9VTklYX1RJTUVfUEFSVDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9USU1FX1BBUlQxOgorICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgICBpZihjID09ICcgJykgeworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi50aW1lID0gUExfVU5JWF9USU1FX1BSRVBBUlQyOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKCFJU0FMTlVNKGMpICYmIGMgIT0gJy4nKSB7CisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9USU1FX1BSRVBBUlQyOgorICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgICBpZihjICE9ICcgJykgeworICAgICAgICAgICAgaWYoSVNBTE5VTShjKSkgeworICAgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLnRpbWUgPSBQTF9VTklYX1RJTUVfUEFSVDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9USU1FX1BBUlQyOgorICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgICBpZihjID09ICcgJykgeworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi50aW1lID0gUExfVU5JWF9USU1FX1BSRVBBUlQzOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKCFJU0FMTlVNKGMpICYmIGMgIT0gJy4nKSB7CisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9USU1FX1BSRVBBUlQzOgorICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgICBpZihjICE9ICcgJykgeworICAgICAgICAgICAgaWYoSVNBTE5VTShjKSkgeworICAgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLnRpbWUgPSBQTF9VTklYX1RJTUVfUEFSVDM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9USU1FX1BBUlQzOgorICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgICBpZihjID09ICcgJykgeworICAgICAgICAgICAgZmluZm8tPmJfZGF0YVtwYXJzZXItPml0ZW1fb2Zmc2V0ICsgcGFyc2VyLT5pdGVtX2xlbmd0aCAtMV0gPSAwOworICAgICAgICAgICAgcGFyc2VyLT5vZmZzZXRzLnRpbWUgPSBwYXJzZXItPml0ZW1fb2Zmc2V0OworICAgICAgICAgICAgaWYoZnRwX3BsX2dldHRpbWUocGFyc2VyLCBmaW5mby0+Yl9kYXRhICsgcGFyc2VyLT5pdGVtX29mZnNldCkpIHsKKyAgICAgICAgICAgICAgcGFyc2VyLT5maWxlX2RhdGEtPmZsYWdzIHw9IENVUkxGSU5GT0ZMQUdfS05PV05fVElNRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGZpbmZvLT5maWxldHlwZSA9PSBDVVJMRklMRVRZUEVfU1lNTElOSykgeworICAgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVgubWFpbiA9IFBMX1VOSVhfU1lNTElOSzsKKyAgICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi5zeW1saW5rID0gUExfVU5JWF9TWU1MSU5LX1BSRVNQQUNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5tYWluID0gUExfVU5JWF9GSUxFTkFNRTsKKyAgICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi5maWxlbmFtZSA9IFBMX1VOSVhfRklMRU5BTUVfUFJFU1BBQ0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoIUlTQUxOVU0oYykgJiYgYyAhPSAnLicgJiYgYyAhPSAnOicpIHsKKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUExfVU5JWF9GSUxFTkFNRToKKyAgICAgICAgc3dpdGNoKHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuZmlsZW5hbWUpIHsKKyAgICAgICAgY2FzZSBQTF9VTklYX0ZJTEVOQU1FX1BSRVNQQUNFOgorICAgICAgICAgIGlmKGMgIT0gJyAnKSB7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fb2Zmc2V0ID0gZmluZm8tPmJfdXNlZCAtIDE7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMTsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuZmlsZW5hbWUgPSBQTF9VTklYX0ZJTEVOQU1FX05BTUU7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1VOSVhfRklMRU5BTUVfTkFNRToKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyA9PSAnXHInKSB7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoLS07CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVguc3ViLmZpbGVuYW1lID0gUExfVU5JWF9GSUxFTkFNRV9XSU5ET1dTRU9MOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGMgPT0gJ1xuJykgeworICAgICAgICAgICAgZmluZm8tPmJfZGF0YVtwYXJzZXItPml0ZW1fb2Zmc2V0ICsgcGFyc2VyLT5pdGVtX2xlbmd0aCAtIDFdID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy5maWxlbmFtZSA9IHBhcnNlci0+aXRlbV9vZmZzZXQ7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLlVOSVgubWFpbiA9IFBMX1VOSVhfRklMRVRZUEU7CisgICAgICAgICAgICByYyA9IGZ0cF9wbF9pbnNlcnRfZmluZm8oY29ubiwgZmluZm8pOworICAgICAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICAgICAgUExfRVJST1IoY29ubiwgcmMpOworICAgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9GSUxFTkFNRV9XSU5ET1dTRU9MOgorICAgICAgICAgIGlmKGMgPT0gJ1xuJykgeworICAgICAgICAgICAgZmluZm8tPmJfZGF0YVtwYXJzZXItPml0ZW1fb2Zmc2V0ICsgcGFyc2VyLT5pdGVtX2xlbmd0aF0gPSAwOworICAgICAgICAgICAgcGFyc2VyLT5vZmZzZXRzLmZpbGVuYW1lID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5tYWluID0gUExfVU5JWF9GSUxFVFlQRTsKKyAgICAgICAgICAgIHJjID0gZnRwX3BsX2luc2VydF9maW5mbyhjb25uLCBmaW5mbyk7CisgICAgICAgICAgICBpZihyYykgeworICAgICAgICAgICAgICBQTF9FUlJPUihjb25uLCByYyk7CisgICAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUExfVU5JWF9TWU1MSU5LOgorICAgICAgICBzd2l0Y2gocGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi5zeW1saW5rKSB7CisgICAgICAgIGNhc2UgUExfVU5JWF9TWU1MSU5LX1BSRVNQQUNFOgorICAgICAgICAgIGlmKGMgIT0gJyAnKSB7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fb2Zmc2V0ID0gZmluZm8tPmJfdXNlZCAtIDE7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMTsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc3ltbGluayA9IFBMX1VOSVhfU1lNTElOS19OQU1FOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9VTklYX1NZTUxJTktfTkFNRToKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyA9PSAnICcpIHsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc3ltbGluayA9IFBMX1VOSVhfU1lNTElOS19QUkVUQVJHRVQxOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGMgPT0gJ1xyJyB8fCBjID09ICdcbicpIHsKKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9VTklYX1NZTUxJTktfUFJFVEFSR0VUMToKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyA9PSAnLScpIHsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc3ltbGluayA9IFBMX1VOSVhfU1lNTElOS19QUkVUQVJHRVQyOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGMgPT0gJ1xyJyB8fCBjID09ICdcbicpIHsKKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc3ltbGluayA9IFBMX1VOSVhfU1lNTElOS19OQU1FOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9VTklYX1NZTUxJTktfUFJFVEFSR0VUMjoKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyA9PSAnPicpIHsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc3ltbGluayA9IFBMX1VOSVhfU1lNTElOS19QUkVUQVJHRVQzOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGMgPT0gJ1xyJyB8fCBjID09ICdcbicpIHsKKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc3ltbGluayA9IFBMX1VOSVhfU1lNTElOS19OQU1FOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9VTklYX1NZTUxJTktfUFJFVEFSR0VUMzoKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoKys7CisgICAgICAgICAgaWYoYyA9PSAnICcpIHsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc3ltbGluayA9IFBMX1VOSVhfU1lNTElOS19QUkVUQVJHRVQ0OworICAgICAgICAgICAgLyogbm93IHBsYWNlIHdoZXJlIGlzIHN5bWxpbmsgZm9sbG93aW5nICovCisgICAgICAgICAgICBmaW5mby0+Yl9kYXRhW3BhcnNlci0+aXRlbV9vZmZzZXQgKyBwYXJzZXItPml0ZW1fbGVuZ3RoIC0gNF0gPSAwOworICAgICAgICAgICAgcGFyc2VyLT5vZmZzZXRzLmZpbGVuYW1lID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAwOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX29mZnNldCA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoYyA9PSAnXHInIHx8IGMgPT0gJ1xuJykgeworICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLnN1Yi5zeW1saW5rID0gUExfVU5JWF9TWU1MSU5LX05BTUU7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1VOSVhfU1lNTElOS19QUkVUQVJHRVQ0OgorICAgICAgICAgIGlmKGMgIT0gJ1xyJyAmJiBjICE9ICdcbicpIHsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc3ltbGluayA9IFBMX1VOSVhfU1lNTElOS19UQVJHRVQ7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fb2Zmc2V0ID0gZmluZm8tPmJfdXNlZCAtIDE7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoID0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9TWU1MSU5LX1RBUkdFVDoKKyAgICAgICAgICBwYXJzZXItPml0ZW1fbGVuZ3RoICsrOworICAgICAgICAgIGlmKGMgPT0gJ1xyJykgeworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCAtLTsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5zdWIuc3ltbGluayA9IFBMX1VOSVhfU1lNTElOS19XSU5ET1dTRU9MOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGMgPT0gJ1xuJykgeworICAgICAgICAgICAgZmluZm8tPmJfZGF0YVtwYXJzZXItPml0ZW1fb2Zmc2V0ICsgcGFyc2VyLT5pdGVtX2xlbmd0aCAtIDFdID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy5zeW1saW5rX3RhcmdldCA9IHBhcnNlci0+aXRlbV9vZmZzZXQ7CisgICAgICAgICAgICByYyA9IGZ0cF9wbF9pbnNlcnRfZmluZm8oY29ubiwgZmluZm8pOworICAgICAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICAgICAgUExfRVJST1IoY29ubiwgcmMpOworICAgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuVU5JWC5tYWluID0gUExfVU5JWF9GSUxFVFlQRTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUExfVU5JWF9TWU1MSU5LX1dJTkRPV1NFT0w6CisgICAgICAgICAgaWYoYyA9PSAnXG4nKSB7CisgICAgICAgICAgICBmaW5mby0+Yl9kYXRhW3BhcnNlci0+aXRlbV9vZmZzZXQgKyBwYXJzZXItPml0ZW1fbGVuZ3RoIC0gMV0gPSAwOworICAgICAgICAgICAgcGFyc2VyLT5vZmZzZXRzLnN5bWxpbmtfdGFyZ2V0ID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKyAgICAgICAgICAgIHJjID0gZnRwX3BsX2luc2VydF9maW5mbyhjb25uLCBmaW5mbyk7CisgICAgICAgICAgICBpZihyYykgeworICAgICAgICAgICAgICBQTF9FUlJPUihjb25uLCByYyk7CisgICAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5VTklYLm1haW4gPSBQTF9VTklYX0ZJTEVUWVBFOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1NfVFlQRV9XSU5fTlQ6CisgICAgICBzd2l0Y2gocGFyc2VyLT5zdGF0ZS5OVC5tYWluKSB7CisgICAgICBjYXNlIFBMX1dJTk5UX0RBVEU6CisgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgaWYocGFyc2VyLT5pdGVtX2xlbmd0aCA8IDkpIHsKKyAgICAgICAgICBpZighc3RyY2hyKCIwMTIzNDU2Nzg5LSIsIGMpKSB7IC8qIG9ubHkgc2ltcGxlIGNvbnRyb2wgKi8KKyAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHBhcnNlci0+aXRlbV9sZW5ndGggPT0gOSkgeworICAgICAgICAgIGlmKGMgPT0gJyAnKSB7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLk5ULm1haW4gPSBQTF9XSU5OVF9USU1FOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5OVC5zdWIudGltZSA9IFBMX1dJTk5UX1RJTUVfUFJFU1BBQ0U7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIENVUkxFX0ZUUF9CQURfRklMRV9MSVNUKTsKKyAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUExfV0lOTlRfVElNRToKKyAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCsrOworICAgICAgICBzd2l0Y2gocGFyc2VyLT5zdGF0ZS5OVC5zdWIudGltZSkgeworICAgICAgICBjYXNlIFBMX1dJTk5UX1RJTUVfUFJFU1BBQ0U6CisgICAgICAgICAgaWYoIUlTU1BBQ0UoYykpIHsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuTlQuc3ViLnRpbWUgPSBQTF9XSU5OVF9USU1FX1RJTUU7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1dJTk5UX1RJTUVfVElNRToKKyAgICAgICAgICBpZihjID09ICcgJykgeworICAgICAgICAgICAgcGFyc2VyLT5vZmZzZXRzLnRpbWUgPSBwYXJzZXItPml0ZW1fb2Zmc2V0OworICAgICAgICAgICAgZmluZm8tPmJfZGF0YVtwYXJzZXItPml0ZW1fb2Zmc2V0ICsgcGFyc2VyLT5pdGVtX2xlbmd0aCAtMV0gPSAwOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5OVC5tYWluID0gUExfV0lOTlRfRElST1JTSVpFOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5OVC5zdWIuZGlyb3JzaXplID0gUExfV0lOTlRfRElST1JTSVpFX1BSRVNQQUNFOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoIXN0cmNocigiQVBNMDEyMzQ1Njc4OToiLCBjKSkgeworICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQTF9XSU5OVF9ESVJPUlNJWkU6CisgICAgICAgIHN3aXRjaChwYXJzZXItPnN0YXRlLk5ULnN1Yi5kaXJvcnNpemUpIHsKKyAgICAgICAgY2FzZSBQTF9XSU5OVF9ESVJPUlNJWkVfUFJFU1BBQ0U6CisgICAgICAgICAgaWYoYyA9PSAnICcpIHsKKworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9vZmZzZXQgPSBmaW5mby0+Yl91c2VkIC0gMTsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAxOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5OVC5zdWIuZGlyb3JzaXplID0gUExfV0lOTlRfRElST1JTSVpFX0NPTlRFTlQ7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBMX1dJTk5UX0RJUk9SU0laRV9DT05URU5UOgorICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggKys7CisgICAgICAgICAgaWYoYyA9PSAnICcpIHsKKyAgICAgICAgICAgIGZpbmZvLT5iX2RhdGFbcGFyc2VyLT5pdGVtX29mZnNldCArIHBhcnNlci0+aXRlbV9sZW5ndGggLSAxXSA9IDA7CisgICAgICAgICAgICBpZihzdHJjbXAoIjxESVI+IiwgZmluZm8tPmJfZGF0YSArIHBhcnNlci0+aXRlbV9vZmZzZXQpID09IDApIHsKKyAgICAgICAgICAgICAgZmluZm8tPmZpbGV0eXBlID0gQ1VSTEZJTEVUWVBFX0RJUkVDVE9SWTsKKyAgICAgICAgICAgICAgZmluZm8tPnNpemUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIGNoYXIgKmVuZHB0cjsKKyAgICAgICAgICAgICAgZmluZm8tPnNpemUgPSBjdXJseF9zdHJ0b29mZnQoZmluZm8tPmJfZGF0YSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+aXRlbV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmRwdHIsIDEwKTsKKyAgICAgICAgICAgICAgaWYoISplbmRwdHIpIHsKKyAgICAgICAgICAgICAgICBpZihmaW5mby0+c2l6ZSA9PSBDVVJMX09GRl9UX01BWCB8fAorICAgICAgICAgICAgICAgICAgIGZpbmZvLT5zaXplID09IENVUkxfT0ZGX1RfTUlOKSB7CisgICAgICAgICAgICAgICAgICBpZihlcnJubyA9PSBFUkFOR0UpIHsKKyAgICAgICAgICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUExfRVJST1IoY29ubiwgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QpOworICAgICAgICAgICAgICAgIHJldHVybiBidWZmbGVuOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIC8qIGNvcnJlY3QgZmlsZSB0eXBlICovCisgICAgICAgICAgICAgIHBhcnNlci0+ZmlsZV9kYXRhLT5maWxldHlwZSA9IENVUkxGSUxFVFlQRV9GSUxFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJzZXItPmZpbGVfZGF0YS0+ZmxhZ3MgfD0gQ1VSTEZJTkZPRkxBR19LTk9XTl9TSVpFOworICAgICAgICAgICAgcGFyc2VyLT5pdGVtX2xlbmd0aCA9IDA7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLk5ULm1haW4gPSBQTF9XSU5OVF9GSUxFTkFNRTsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuTlQuc3ViLmZpbGVuYW1lID0gUExfV0lOTlRfRklMRU5BTUVfUFJFU1BBQ0U7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQTF9XSU5OVF9GSUxFTkFNRToKKyAgICAgICAgc3dpdGNoIChwYXJzZXItPnN0YXRlLk5ULnN1Yi5maWxlbmFtZSkgeworICAgICAgICBjYXNlIFBMX1dJTk5UX0ZJTEVOQU1FX1BSRVNQQUNFOgorICAgICAgICAgIGlmKGMgIT0gJyAnKSB7CisgICAgICAgICAgICBwYXJzZXItPml0ZW1fb2Zmc2V0ID0gZmluZm8tPmJfdXNlZCAtMTsKKyAgICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGggPSAxOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5OVC5zdWIuZmlsZW5hbWUgPSBQTF9XSU5OVF9GSUxFTkFNRV9DT05URU5UOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9XSU5OVF9GSUxFTkFNRV9DT05URU5UOgorICAgICAgICAgIHBhcnNlci0+aXRlbV9sZW5ndGgrKzsKKyAgICAgICAgICBpZihjID09ICdccicpIHsKKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuTlQuc3ViLmZpbGVuYW1lID0gUExfV0lOTlRfRklMRU5BTUVfV0lORU9MOworICAgICAgICAgICAgZmluZm8tPmJfZGF0YVtmaW5mby0+Yl91c2VkIC0gMV0gPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGMgPT0gJ1xuJykgeworICAgICAgICAgICAgcGFyc2VyLT5vZmZzZXRzLmZpbGVuYW1lID0gcGFyc2VyLT5pdGVtX29mZnNldDsKKyAgICAgICAgICAgIGZpbmZvLT5iX2RhdGFbZmluZm8tPmJfdXNlZCAtIDFdID0gMDsKKyAgICAgICAgICAgIHBhcnNlci0+b2Zmc2V0cy5maWxlbmFtZSA9IHBhcnNlci0+aXRlbV9vZmZzZXQ7CisgICAgICAgICAgICByYyA9IGZ0cF9wbF9pbnNlcnRfZmluZm8oY29ubiwgZmluZm8pOworICAgICAgICAgICAgaWYocmMpIHsKKyAgICAgICAgICAgICAgUExfRVJST1IoY29ubiwgcmMpOworICAgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcnNlci0+c3RhdGUuTlQubWFpbiA9IFBMX1dJTk5UX0RBVEU7CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLk5ULnN1Yi5maWxlbmFtZSA9IFBMX1dJTk5UX0ZJTEVOQU1FX1BSRVNQQUNFOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQTF9XSU5OVF9GSUxFTkFNRV9XSU5FT0w6CisgICAgICAgICAgaWYoYyA9PSAnXG4nKSB7CisgICAgICAgICAgICBwYXJzZXItPm9mZnNldHMuZmlsZW5hbWUgPSBwYXJzZXItPml0ZW1fb2Zmc2V0OworICAgICAgICAgICAgcmMgPSBmdHBfcGxfaW5zZXJ0X2ZpbmZvKGNvbm4sIGZpbmZvKTsKKyAgICAgICAgICAgIGlmKHJjKSB7CisgICAgICAgICAgICAgIFBMX0VSUk9SKGNvbm4sIHJjKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJzZXItPnN0YXRlLk5ULm1haW4gPSBQTF9XSU5OVF9EQVRFOworICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5OVC5zdWIuZmlsZW5hbWUgPSBQTF9XSU5OVF9GSUxFTkFNRV9QUkVTUEFDRTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQTF9FUlJPUihjb25uLCBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVCk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmxlbjsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGJ1ZmZsZW4rMTsKKyAgICB9CisKKyAgICBpKys7CisgIH0KKworICByZXR1cm4gYnVmZmxlbjsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9mdHBsaXN0cGFyc2VyLmggYi9jdXJsLTcuMjUuMC9saWIvZnRwbGlzdHBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YTA2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvZnRwbGlzdHBhcnNlci5oCkBAIC0wLDAgKzEsMzkgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfRlRQTElTVFBBUlNFUl9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0ZUUExJU1RQQVJTRVJfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworLyogV1JJVEVGVU5DVElPTiBjYWxsYmFjayBmb3IgcGFyc2luZyBMSVNUIHJlc3BvbnNlcyAqLworc2l6ZV90IEN1cmxfZnRwX3BhcnNlbGlzdChjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvbm5wdHIpOworCitzdHJ1Y3QgZnRwX3BhcnNlbGlzdF9kYXRhOyAvKiBkZWZpbmVkIGluc2lkZSBmdHBsaWJwYXJzZXIuYyAqLworCitDVVJMY29kZSBDdXJsX2Z0cF9wYXJzZWxpc3RfZ2V0ZXJyb3Ioc3RydWN0IGZ0cF9wYXJzZWxpc3RfZGF0YSAqcGxfZGF0YSk7CisKK3N0cnVjdCBmdHBfcGFyc2VsaXN0X2RhdGEgKkN1cmxfZnRwX3BhcnNlbGlzdF9kYXRhX2FsbG9jKHZvaWQpOworCit2b2lkIEN1cmxfZnRwX3BhcnNlbGlzdF9kYXRhX2ZyZWUoc3RydWN0IGZ0cF9wYXJzZWxpc3RfZGF0YSAqKnBsX2RhdGEpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfRlRQTElTVFBBUlNFUl9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvZ2V0ZW52LmMgYi9jdXJsLTcuMjUuMC9saWIvZ2V0ZW52LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0MGRkNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9nZXRlbnYuYwpAQCAtMCwwICsxLDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBfX1ZNUworI2luY2x1ZGUgPHVuaXhsaWIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0YXRpYworY2hhciAqR2V0RW52KGNvbnN0IGNoYXIgKnZhcmlhYmxlKQoreworI2lmZGVmIF9XSU4zMl9XQ0UKKyAgcmV0dXJuIE5VTEw7CisjZWxzZQorI2lmZGVmIFdJTjMyCisgIGNoYXIgZW52W01BWF9QQVRIXTsgLyogTUFYX1BBVEggaXMgZnJvbSB3aW5kZWYuaCAqLworICBjaGFyICp0ZW1wID0gZ2V0ZW52KHZhcmlhYmxlKTsKKyAgZW52WzBdID0gJ1wwJzsKKyAgaWYodGVtcCAhPSBOVUxMKQorICAgIEV4cGFuZEVudmlyb25tZW50U3RyaW5ncyh0ZW1wLCBlbnYsIHNpemVvZihlbnYpKTsKKyAgcmV0dXJuIChlbnZbMF0gIT0gJ1wwJyk/c3RyZHVwKGVudik6TlVMTDsKKyNlbHNlCisgIGNoYXIgKmVudiA9IGdldGVudih2YXJpYWJsZSk7CisjaWZkZWYgX19WTVMKKyAgaWYoZW52ICYmIHN0cmNtcCgiSE9NRSIsdmFyaWFibGUpID09IDApCisgICAgZW52ID0gZGVjY190cmFuc2xhdGVfdm1zKGVudik7CisjZW5kaWYKKyAgcmV0dXJuIChlbnYgJiYgZW52WzBdKT9zdHJkdXAoZW52KTpOVUxMOworI2VuZGlmCisjZW5kaWYKK30KKworY2hhciAqY3VybF9nZXRlbnYoY29uc3QgY2hhciAqdikKK3sKKyAgcmV0dXJuIEdldEVudih2KTsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9nZXRpbmZvLmMgYi9jdXJsLTcuMjUuMC9saWIvZ2V0aW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyOGUxOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvZ2V0aW5mby5jCkBAIC0wLDAgKzEsMjgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJnZXRpbmZvLmgiCisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgInNzbGdlbi5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIgLyogQ3VybF9nZXRjb25uZWN0aW5mbygpICovCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKworLyogTWFrZSB0aGlzIHRoZSBsYXN0ICNpbmNsdWRlICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyoKKyAqIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIGluIHRoZSBiZWdpbm5pbmcgb2YgYSBwZXJmb3JtKCkgc2Vzc2lvbgorICogYW5kIHNob3VsZCByZXNldCBhbGwgc2Vzc2lvbi1pbmZvIHZhcmlhYmxlcworICovCitDVVJMY29kZSBDdXJsX2luaXRpbmZvKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBzdHJ1Y3QgUHJvZ3Jlc3MgKnBybyA9ICZkYXRhLT5wcm9ncmVzczsKKyAgc3RydWN0IFB1cmVJbmZvICppbmZvID0mZGF0YS0+aW5mbzsKKworICBwcm8tPnRfbnNsb29rdXAgPSAwOworICBwcm8tPnRfY29ubmVjdCA9IDA7CisgIHByby0+dF9hcHBjb25uZWN0ID0gMDsKKyAgcHJvLT50X3ByZXRyYW5zZmVyID0gMDsKKyAgcHJvLT50X3N0YXJ0dHJhbnNmZXIgPSAwOworICBwcm8tPnRpbWVzcGVudCA9IDA7CisgIHByby0+dF9yZWRpcmVjdCA9IDA7CisKKyAgaW5mby0+aHR0cGNvZGUgPSAwOworICBpbmZvLT5odHRwdmVyc2lvbj0wOworICBpbmZvLT5maWxldGltZT0tMTsgLyogLTEgaXMgYW4gaWxsZWdhbCB0aW1lIGFuZCB0aHVzIG1lYW5zIHVua25vd24gKi8KKworICBpZihpbmZvLT5jb250ZW50dHlwZSkKKyAgICBmcmVlKGluZm8tPmNvbnRlbnR0eXBlKTsKKyAgaW5mby0+Y29udGVudHR5cGUgPSBOVUxMOworCisgIGluZm8tPmhlYWRlcl9zaXplID0gMDsKKyAgaW5mby0+cmVxdWVzdF9zaXplID0gMDsKKyAgaW5mby0+bnVtY29ubmVjdHMgPSAwOworCisgIGluZm8tPmNvbm5fcHJpbWFyeV9pcFswXSA9ICdcMCc7CisgIGluZm8tPmNvbm5fbG9jYWxfaXBbMF0gPSAnXDAnOworICBpbmZvLT5jb25uX3ByaW1hcnlfcG9ydCA9IDA7CisgIGluZm8tPmNvbm5fbG9jYWxfcG9ydCA9IDA7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitDVVJMY29kZSBDdXJsX2dldGluZm8oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIENVUkxJTkZPIGluZm8sIC4uLikKK3sKKyAgdmFfbGlzdCBhcmc7CisgIGxvbmcgKnBhcmFtX2xvbmdwPU5VTEw7CisgIGRvdWJsZSAqcGFyYW1fZG91YmxlcD1OVUxMOworICBjaGFyICoqcGFyYW1fY2hhcnA9TlVMTDsKKyAgc3RydWN0IGN1cmxfc2xpc3QgKipwYXJhbV9zbGlzdHA9TlVMTDsKKyAgaW50IHR5cGU7CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkOworCisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgY3VybF9jZXJ0aW5mbyAqIHRvX2NlcnRpbmZvOworICAgIHN0cnVjdCBjdXJsX3NsaXN0ICAgICogdG9fc2xpc3Q7CisgIH0gcHRyOworCisgIGlmKCFkYXRhKQorICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisKKyAgdmFfc3RhcnQoYXJnLCBpbmZvKTsKKworICB0eXBlID0gQ1VSTElORk9fVFlQRU1BU0sgJiAoaW50KWluZm87CisgIHN3aXRjaCh0eXBlKSB7CisgIGNhc2UgQ1VSTElORk9fU1RSSU5HOgorICAgIHBhcmFtX2NoYXJwID0gdmFfYXJnKGFyZywgY2hhciAqKik7CisgICAgaWYoTlVMTCA9PSBwYXJhbV9jaGFycCkKKyAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fTE9ORzoKKyAgICBwYXJhbV9sb25ncCA9IHZhX2FyZyhhcmcsIGxvbmcgKik7CisgICAgaWYoTlVMTCA9PSBwYXJhbV9sb25ncCkKKyAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fRE9VQkxFOgorICAgIHBhcmFtX2RvdWJsZXAgPSB2YV9hcmcoYXJnLCBkb3VibGUgKik7CisgICAgaWYoTlVMTCA9PSBwYXJhbV9kb3VibGVwKQorICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19TTElTVDoKKyAgICBwYXJhbV9zbGlzdHAgPSB2YV9hcmcoYXJnLCBzdHJ1Y3QgY3VybF9zbGlzdCAqKik7CisgICAgaWYoTlVMTCA9PSBwYXJhbV9zbGlzdHApCisgICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgIH0KKworICBzd2l0Y2goaW5mbykgeworICBjYXNlIENVUkxJTkZPX0VGRkVDVElWRV9VUkw6CisgICAgKnBhcmFtX2NoYXJwID0gZGF0YS0+Y2hhbmdlLnVybD9kYXRhLT5jaGFuZ2UudXJsOihjaGFyICopIiI7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fUkVTUE9OU0VfQ09ERToKKyAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5pbmZvLmh0dHBjb2RlOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0hUVFBfQ09OTkVDVENPREU6CisgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby5odHRwcHJveHljb2RlOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0ZJTEVUSU1FOgorICAgICpwYXJhbV9sb25ncCA9IGRhdGEtPmluZm8uZmlsZXRpbWU7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fSEVBREVSX1NJWkU6CisgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby5oZWFkZXJfc2l6ZTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19SRVFVRVNUX1NJWkU6CisgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby5yZXF1ZXN0X3NpemU7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fVE9UQUxfVElNRToKKyAgICAqcGFyYW1fZG91YmxlcCA9IGRhdGEtPnByb2dyZXNzLnRpbWVzcGVudDsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19OQU1FTE9PS1VQX1RJTUU6CisgICAgKnBhcmFtX2RvdWJsZXAgPSBkYXRhLT5wcm9ncmVzcy50X25zbG9va3VwOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0NPTk5FQ1RfVElNRToKKyAgICAqcGFyYW1fZG91YmxlcCA9IGRhdGEtPnByb2dyZXNzLnRfY29ubmVjdDsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19BUFBDT05ORUNUX1RJTUU6CisgICAgKnBhcmFtX2RvdWJsZXAgPSBkYXRhLT5wcm9ncmVzcy50X2FwcGNvbm5lY3Q7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fUFJFVFJBTlNGRVJfVElNRToKKyAgICAqcGFyYW1fZG91YmxlcCA9ICBkYXRhLT5wcm9ncmVzcy50X3ByZXRyYW5zZmVyOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX1NUQVJUVFJBTlNGRVJfVElNRToKKyAgICAqcGFyYW1fZG91YmxlcCA9IGRhdGEtPnByb2dyZXNzLnRfc3RhcnR0cmFuc2ZlcjsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19TSVpFX1VQTE9BRDoKKyAgICAqcGFyYW1fZG91YmxlcCA9ICAoZG91YmxlKWRhdGEtPnByb2dyZXNzLnVwbG9hZGVkOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX1NJWkVfRE9XTkxPQUQ6CisgICAgKnBhcmFtX2RvdWJsZXAgPSAoZG91YmxlKWRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQ7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fU1BFRURfRE9XTkxPQUQ6CisgICAgKnBhcmFtX2RvdWJsZXAgPSAgKGRvdWJsZSlkYXRhLT5wcm9ncmVzcy5kbHNwZWVkOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX1NQRUVEX1VQTE9BRDoKKyAgICAqcGFyYW1fZG91YmxlcCA9IChkb3VibGUpZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZDsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19TU0xfVkVSSUZZUkVTVUxUOgorICAgICpwYXJhbV9sb25ncCA9IGRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19DT05URU5UX0xFTkdUSF9ET1dOTE9BRDoKKyAgICAqcGFyYW1fZG91YmxlcCA9IChkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfRExfU0laRV9LTk9XTik/CisgICAgICAoZG91YmxlKWRhdGEtPnByb2dyZXNzLnNpemVfZGw6LTE7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfVVBMT0FEOgorICAgICpwYXJhbV9kb3VibGVwID0gKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19VTF9TSVpFX0tOT1dOKT8KKyAgICAgIChkb3VibGUpZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bDotMTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19SRURJUkVDVF9USU1FOgorICAgICpwYXJhbV9kb3VibGVwID0gIGRhdGEtPnByb2dyZXNzLnRfcmVkaXJlY3Q7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fUkVESVJFQ1RfQ09VTlQ6CisgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+c2V0LmZvbGxvd2xvY2F0aW9uOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0NPTlRFTlRfVFlQRToKKyAgICAqcGFyYW1fY2hhcnAgPSBkYXRhLT5pbmZvLmNvbnRlbnR0eXBlOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX1BSSVZBVEU6CisgICAgKnBhcmFtX2NoYXJwID0gKGNoYXIgKikgZGF0YS0+c2V0LnByaXZhdGVfZGF0YTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19IVFRQQVVUSF9BVkFJTDoKKyAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5pbmZvLmh0dHBhdXRoYXZhaWw7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fUFJPWFlBVVRIX0FWQUlMOgorICAgICpwYXJhbV9sb25ncCA9IGRhdGEtPmluZm8ucHJveHlhdXRoYXZhaWw7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fT1NfRVJSTk86CisgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+c3RhdGUub3NfZXJybm87CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fTlVNX0NPTk5FQ1RTOgorICAgICpwYXJhbV9sb25ncCA9IGRhdGEtPmluZm8ubnVtY29ubmVjdHM7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fU1NMX0VOR0lORVM6CisgICAgKnBhcmFtX3NsaXN0cCA9IEN1cmxfc3NsX2VuZ2luZXNfbGlzdChkYXRhKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19DT09LSUVMSVNUOgorICAgICpwYXJhbV9zbGlzdHAgPSBDdXJsX2Nvb2tpZV9saXN0KGRhdGEpOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0ZUUF9FTlRSWV9QQVRIOgorICAgIC8qIFJldHVybiB0aGUgZW50cnlwYXRoIHN0cmluZyBmcm9tIHRoZSBtb3N0IHJlY2VudCBjb25uZWN0aW9uLgorICAgICAgIFRoaXMgcG9pbnRlciB3YXMgY29waWVkIGZyb20gdGhlIGNvbm5lY3RkYXRhIHN0cnVjdHVyZSBieSBGVFAuCisgICAgICAgVGhlIGFjdHVhbCBzdHJpbmcgbWF5IGJlIGZyZWUoKWVkIGJ5IHN1YnNlcXVlbnQgbGliY3VybCBjYWxscyBzbworICAgICAgIGl0IG11c3QgYmUgY29waWVkIHRvIGEgc2FmZXIgYXJlYSBiZWZvcmUgdGhlIG5leHQgbGliY3VybCBjYWxsLgorICAgICAgIENhbGxlcnMgbXVzdCBuZXZlciBmcmVlIGl0IHRoZW1zZWx2ZXMuICovCisgICAgKnBhcmFtX2NoYXJwID0gZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aDsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19MQVNUU09DS0VUOgorICAgIHNvY2tmZCA9IEN1cmxfZ2V0Y29ubmVjdGluZm8oZGF0YSwgTlVMTCk7CisKKyAgICAvKiBub3RlOiB0aGlzIGlzIG5vdCBhIGdvb2QgY29udmVyc2lvbiBmb3Igc3lzdGVtcyB3aXRoIDY0IGJpdCBzb2NrZXRzIGFuZAorICAgICAgIDMyIGJpdCBsb25ncyAqLworICAgIGlmKHNvY2tmZCAhPSBDVVJMX1NPQ0tFVF9CQUQpCisgICAgICAqcGFyYW1fbG9uZ3AgPSAobG9uZylzb2NrZmQ7CisgICAgZWxzZQorICAgICAgLyogdGhpcyBpbnRlcmZhY2UgaXMgZG9jdW1lbnRlZCB0byByZXR1cm4gLTEgaW4gY2FzZSBvZiBiYWRuZXNzLCB3aGljaAorICAgICAgICAgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgQ1VSTF9TT0NLRVRfQkFEIHZhbHVlICovCisgICAgICAqcGFyYW1fbG9uZ3AgPSAtMTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19SRURJUkVDVF9VUkw6CisgICAgLyogUmV0dXJuIHRoZSBVUkwgdGhpcyByZXF1ZXN0IHdvdWxkIGhhdmUgYmVlbiByZWRpcmVjdGVkIHRvIGlmIHRoYXQKKyAgICAgICBvcHRpb24gaGFkIGJlZW4gZW5hYmxlZCEgKi8KKyAgICAqcGFyYW1fY2hhcnAgPSBkYXRhLT5pbmZvLndvdWxkcmVkaXJlY3Q7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fUFJJTUFSWV9JUDoKKyAgICAvKiBSZXR1cm4gdGhlIGlwIGFkZHJlc3Mgb2YgdGhlIG1vc3QgcmVjZW50IChwcmltYXJ5KSBjb25uZWN0aW9uICovCisgICAgKnBhcmFtX2NoYXJwID0gZGF0YS0+aW5mby5jb25uX3ByaW1hcnlfaXA7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fUFJJTUFSWV9QT1JUOgorICAgIC8qIFJldHVybiB0aGUgKHJlbW90ZSkgcG9ydCBvZiB0aGUgbW9zdCByZWNlbnQgKHByaW1hcnkpIGNvbm5lY3Rpb24gKi8KKyAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5pbmZvLmNvbm5fcHJpbWFyeV9wb3J0OworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0xPQ0FMX0lQOgorICAgIC8qIFJldHVybiB0aGUgc291cmNlL2xvY2FsIGlwIGFkZHJlc3Mgb2YgdGhlIG1vc3QgcmVjZW50IChwcmltYXJ5KQorICAgICAgIGNvbm5lY3Rpb24gKi8KKyAgICAqcGFyYW1fY2hhcnAgPSBkYXRhLT5pbmZvLmNvbm5fbG9jYWxfaXA7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fTE9DQUxfUE9SVDoKKyAgICAvKiBSZXR1cm4gdGhlIGxvY2FsIHBvcnQgb2YgdGhlIG1vc3QgcmVjZW50IChwcmltYXJ5KSBjb25uZWN0aW9uICovCisgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+aW5mby5jb25uX2xvY2FsX3BvcnQ7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fQ0VSVElORk86CisgICAgLyogUmV0dXJuIHRoZSBhIHBvaW50ZXIgdG8gdGhlIGNlcnRpbmZvIHN0cnVjdC4gTm90IHJlYWxseSBhbiBzbGlzdAorICAgICAgIHBvaW50ZXIgYnV0IHdlIGNhbiBwcmV0ZW5kIGl0IGlzIGhlcmUgKi8KKyAgICBwdHIudG9fY2VydGluZm8gPSAmZGF0YS0+aW5mby5jZXJ0czsKKyAgICAqcGFyYW1fc2xpc3RwID0gcHRyLnRvX3NsaXN0OworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0NPTkRJVElPTl9VTk1FVDoKKyAgICAvKiByZXR1cm4gaWYgdGhlIGNvbmRpdGlvbiBwcmV2ZW50ZWQgdGhlIGRvY3VtZW50IHRvIGdldCB0cmFuc2ZlcnJlZCAqLworICAgICpwYXJhbV9sb25ncCA9IGRhdGEtPmluZm8udGltZWNvbmQ7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fUlRTUF9TRVNTSU9OX0lEOgorICAgICpwYXJhbV9jaGFycCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1JUU1BfU0VTU0lPTl9JRF07CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fUlRTUF9DTElFTlRfQ1NFUToKKyAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5zdGF0ZS5ydHNwX25leHRfY2xpZW50X0NTZXE7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fUlRTUF9TRVJWRVJfQ1NFUToKKyAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5zdGF0ZS5ydHNwX25leHRfc2VydmVyX0NTZXE7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fUlRTUF9DU0VRX1JFQ1Y6CisgICAgKnBhcmFtX2xvbmdwID0gZGF0YS0+c3RhdGUucnRzcF9DU2VxX3JlY3Y7CisgICAgYnJlYWs7CisKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9nZXRpbmZvLmggYi9jdXJsLTcuMjUuMC9saWIvZ2V0aW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NzlmZjcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvZ2V0aW5mby5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfR0VUSU5GT19ICisjZGVmaW5lIEhFQURFUl9DVVJMX0dFVElORk9fSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitDVVJMY29kZSBDdXJsX2dldGluZm8oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIENVUkxJTkZPIGluZm8sIC4uLik7CitDVVJMY29kZSBDdXJsX2luaXRpbmZvKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0dFVElORk9fSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2dvcGhlci5jIGIvY3VybC03LjI1LjAvbGliL2dvcGhlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZWZhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvZ29waGVyLmMKQEAgLTAsMCArMSwxOTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfR09QSEVSCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInRyYW5zZmVyLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKworI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAic3RyZXF1YWwuaCIKKyNpbmNsdWRlICJnb3BoZXIuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAqLworCitzdGF0aWMgQ1VSTGNvZGUgZ29waGVyX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CisKKy8qCisgKiBHb3BoZXIgcHJvdG9jb2wgaGFuZGxlci4KKyAqIFRoaXMgaXMgYWxzbyBhIG5pY2Ugc2ltcGxlIHRlbXBsYXRlIHRvIGJ1aWxkIG9mZiBmb3Igc2ltcGxlCisgKiBjb25uZWN0LWNvbW1hbmQtZG93bmxvYWQgcHJvdG9jb2xzLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2dvcGhlciA9IHsKKyAgIkdPUEhFUiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIGdvcGhlcl9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBQT1JUX0dPUEhFUiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX0dPUEhFUiwgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCit9OworCitzdGF0aWMgQ1VSTGNvZGUgZ29waGVyX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0PUNVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YT1jb25uLT5kYXRhOworICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworCisgIGN1cmxfb2ZmX3QgKmJ5dGVjb3VudCA9ICZkYXRhLT5yZXEuYnl0ZWNvdW50OworICBjaGFyICpwYXRoID0gZGF0YS0+c3RhdGUucGF0aDsKKyAgY2hhciAqc2VsOworICBjaGFyICpzZWxfb3JnID0gTlVMTDsKKyAgc3NpemVfdCBhbW91bnQsIGs7CisKKyAgKmRvbmUgPSBUUlVFOyAvKiB1bmNvbmRpdGlvbmFsbHkgKi8KKworICAvKiBDcmVhdGUgc2VsZWN0b3IuIERlZ2VuZXJhdGUgY2FzZXM6IC8gYW5kIC8xID0+IGNvbnZlcnQgdG8gIiIgKi8KKyAgaWYoc3RybGVuKHBhdGgpIDw9IDIpCisgICAgc2VsID0gKGNoYXIgKikiIjsKKyAgZWxzZSB7CisgICAgY2hhciAqbmV3cDsKKyAgICBzaXplX3QgaiwgaTsKKyAgICBpbnQgbGVuOworCisgICAgLyogT3RoZXJ3aXNlLCBkcm9wIC8gYW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXIgKGkuZS4sIGl0ZW0gdHlwZSkgLi4uICovCisgICAgbmV3cCA9IHBhdGg7CisgICAgbmV3cCs9MjsKKworICAgIC8qIC4uLiB0aGVuIHR1cm4gPyBpbnRvIFRBQiBmb3Igc2VhcmNoIHNlcnZlcnMsIFZlcm9uaWNhLCBldGMuIC4uLiAqLworICAgIGogPSBzdHJsZW4obmV3cCk7CisgICAgZm9yKGk9MDsgaTxqOyBpKyspCisgICAgICBpZihuZXdwW2ldID09ICc/JykKKyAgICAgICAgbmV3cFtpXSA9ICdceDA5JzsKKworICAgIC8qIC4uLiBhbmQgZmluYWxseSB1bmVzY2FwZSAqLworICAgIHNlbCA9IGN1cmxfZWFzeV91bmVzY2FwZShkYXRhLCBuZXdwLCAwLCAmbGVuKTsKKyAgICBpZighc2VsKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgc2VsX29yZyA9IHNlbDsKKyAgfQorCisgIC8qIFdlIHVzZSBDdXJsX3dyaXRlIGluc3RlYWQgb2YgQ3VybF9zZW5kZiB0byBtYWtlIHN1cmUgdGhlIGVudGlyZSBidWZmZXIgaXMKKyAgICAgc2VudCwgd2hpY2ggY291bGQgYmUgc2l6ZWFibGUgd2l0aCBsb25nIHNlbGVjdG9ycy4gKi8KKyAgayA9IGN1cmx4X3V6dG9zeihzdHJsZW4oc2VsKSk7CisKKyAgZm9yKDs7KSB7CisgICAgcmVzdWx0ID0gQ3VybF93cml0ZShjb25uLCBzb2NrZmQsIHNlbCwgaywgJmFtb3VudCk7CisgICAgaWYoQ1VSTEVfT0sgPT0gcmVzdWx0KSB7IC8qIFdoaWNoIG1heSBub3QgaGF2ZSB3cml0dGVuIGl0IGFsbCEgKi8KKyAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgc2VsLCBhbW91bnQpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc2VsX29yZyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgICBrIC09IGFtb3VudDsKKyAgICAgIHNlbCArPSBhbW91bnQ7CisgICAgICBpZihrIDwgMSkKKyAgICAgICAgYnJlYWs7IC8qIGJ1dCBpdCBkaWQgd3JpdGUgaXQgYWxsICovCisgICAgfQorICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIEdvcGhlciByZXF1ZXN0Iik7CisgICAgICBDdXJsX3NhZmVmcmVlKHNlbF9vcmcpOworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgLyogRG9uJ3QgYnVzeWxvb3AuIFRoZSBlbnRpcmUgbG9vcCB0aGluZyBpcyBhIHdvcmstYXJvdW5kIGFzIGl0IGNhdXNlcyBhCisgICAgICAgQkxPQ0tJTkcgYmVoYXZpb3Igd2hpY2ggaXMgYSBOTy1OTy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgcmF0aGVyIGJlCisgICAgICAgc3BsaXQgdXAgaW4gYSBkbyBhbmQgYSBkb2luZyBwaWVjZSB3aGVyZSB0aGUgcGllY2VzIHRoYXQgYXJlbid0CisgICAgICAgcG9zc2libGUgdG8gc2VuZCBub3cgd2lsbCBiZSBzZW50IGluIHRoZSBkb2luZyBmdW5jdGlvbiByZXBlYXRlZGx5CisgICAgICAgdW50aWwgdGhlIGVudGlyZSByZXF1ZXN0IGlzIHNlbnQuCisKKyAgICAgICBXYWl0IGEgd2hpbGUgZm9yIHRoZSBzb2NrZXQgdG8gYmUgd3JpdGFibGUuIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QKKyAgICAgICBhY2tub3dsZWRnZSB0aGUgdGltZW91dC4KKyAgICAqLworICAgIEN1cmxfc29ja2V0X3JlYWR5KENVUkxfU09DS0VUX0JBRCwgc29ja2ZkLCAxMDApOworICB9CisKKyAgQ3VybF9zYWZlZnJlZShzZWxfb3JnKTsKKworICAvKiBXZSBjYW4gdXNlIEN1cmxfc2VuZGYgdG8gc2VuZCB0aGUgdGVybWluYWwgXHJcbiByZWxhdGl2ZWx5IHNhZmVseSBhbmQKKyAgICAgc2F2ZSBhbGxvY2luZyBhbm90aGVyIHN0cmluZy9kb2luZyBhbm90aGVyIF93cml0ZSBsb29wLiAqLworICByZXN1bHQgPSBDdXJsX3NlbmRmKHNvY2tmZCwgY29ubiwgIlxyXG4iKTsKKyAgaWYocmVzdWx0ICE9IENVUkxFX09LKSB7CisgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIEdvcGhlciByZXF1ZXN0Iik7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9IRUFERVIsIChjaGFyICopIlxyXG4iLCAyKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIEZBTFNFLCBieXRlY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgLTEsIE5VTEwpOyAvKiBubyB1cGxvYWQgKi8KKyAgcmV0dXJuIENVUkxFX09LOworfQorI2VuZGlmIC8qQ1VSTF9ESVNBQkxFX0dPUEhFUiovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvZ29waGVyLmggYi9jdXJsLTcuMjUuMC9saWIvZ29waGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiYmM0YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9nb3BoZXIuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0dPUEhFUl9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0dPUEhFUl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfR09QSEVSCitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfZ29waGVyOworI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9HT1BIRVJfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2d0bHMuYyBiL2N1cmwtNy4yNS4wL2xpYi9ndGxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI0ZTdhOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9ndGxzLmMKQEAgLTAsMCArMSwxMDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFNvdXJjZSBmaWxlIGZvciBhbGwgR251VExTLXNwZWNpZmljIGNvZGUgZm9yIHRoZSBUTFMvU1NMIGxheWVyLiBObyBjb2RlCisgKiBidXQgc3NsZ2VuLmMgc2hvdWxkIGV2ZXIgY2FsbCBvciB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICoKKyAqIE5vdGU6IGRvbid0IHVzZSB0aGUgR251VExTJyAqX3QgdmFyaWFibGUgdHlwZSBuYW1lcyBpbiB0aGlzIHNvdXJjZSBjb2RlLAorICogc2luY2UgdGhleSB3ZXJlIG5vdCBwcmVzZW50IGluIDEuMC5YLgorICovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgVVNFX0dOVVRMUworCisjaW5jbHVkZSA8Z251dGxzL2dudXRscy5oPgorI2luY2x1ZGUgPGdudXRscy94NTA5Lmg+CisjaWZuZGVmIFVTRV9HTlVUTFNfTkVUVExFCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJpbmV0X3B0b24uaCIKKyNpbmNsdWRlICJndGxzLmgiCisjaW5jbHVkZSAic3NsZ2VuLmgiCisjaW5jbHVkZSAicGFyc2VkYXRlLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLworI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgInJhd3N0ci5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKgorIFNvbWUgaGFja2lzaCBjYXN0IG1hY3JvcyBiYXNlZCBvbjoKKyBodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVR5cGUtQ29udmVyc2lvbi1NYWNyb3MuaHRtbAorKi8KKyNpZm5kZWYgR05VVExTX1BPSU5URVJfVE9fSU5UX0NBU1QKKyNkZWZpbmUgR05VVExTX1BPSU5URVJfVE9fSU5UX0NBU1QocCkgKChpbnQpIChsb25nKSAocCkpCisjZW5kaWYKKyNpZm5kZWYgR05VVExTX0lOVF9UT19QT0lOVEVSX0NBU1QKKyNkZWZpbmUgR05VVExTX0lOVF9UT19QT0lOVEVSX0NBU1QoaSkgKCh2b2lkKikgKGxvbmcpIChpKSkKKyNlbmRpZgorCisvKiBFbmFibGUgR251VExTIGRlYnVnZ2luZyBieSBkZWZpbmluZyBHVExTREVCVUcgKi8KKy8qI2RlZmluZSBHVExTREVCVUcgKi8KKworI2lmZGVmIEdUTFNERUJVRworc3RhdGljIHZvaWQgdGxzX2xvZ19mdW5jKGludCBsZXZlbCwgY29uc3QgY2hhciAqc3RyKQoreworICAgIGZwcmludGYoc3RkZXJyLCAifDwlZD58ICVzIiwgbGV2ZWwsIHN0cik7Cit9CisjZW5kaWYKK3N0YXRpYyBib29sIGd0bHNfaW5pdGVkID0gRkFMU0U7CisKKyNpZiBkZWZpbmVkKEdOVVRMU19WRVJTSU9OX05VTUJFUikKKyMgIGlmIChHTlVUTFNfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMjBjMDApCisjICAgIHVuZGVmIGdudXRsc190cmFuc3BvcnRfc2V0X2xvd2F0CisjICAgIGRlZmluZSBnbnV0bHNfdHJhbnNwb3J0X3NldF9sb3dhdChBLEIpIEN1cmxfbm9wX3N0bXQKKyMgICAgZGVmaW5lIFVTRV9HTlVUTFNfUFJJT1JJVFlfU0VUX0RJUkVDVCAxCisjICBlbmRpZgorIyAgaWYgKEdOVVRMU19WRVJTSU9OX05VTUJFUiA+PSAweDAyMGMwMykKKyMgICAgZGVmaW5lIEdOVVRMU19NQVBTX1dJTlNPQ0tfRVJST1JTIDEKKyMgIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIEN1c3RvbSBwdXNoIGFuZCBwdWxsIGNhbGxiYWNrIGZ1bmN0aW9ucyB1c2VkIGJ5IEdOVSBUTFMgdG8gcmVhZCBhbmQgd3JpdGUKKyAqIHRvIHRoZSBzb2NrZXQuICBUaGVzZSBmdW5jdGlvbnMgYXJlIHNpbXBsZSB3cmFwcGVycyB0byBzZW5kKCkgYW5kIHJlY3YoKQorICogKGFsdGhvdWdoIGhlcmUgdXNpbmcgdGhlIHNyZWFkL3N3cml0ZSBtYWNyb3MgYXMgZGVmaW5lZCBieSBzZXR1cF9vbmNlLmgpLgorICogV2UgdXNlIGN1c3RvbSBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gdGhlIEdOVSBUTFMgZGVmYXVsdHMgYmVjYXVzZSBpdCBhbGxvd3MKKyAqIHVzIHRvIGdldCBzcGVjaWZpYyBhYm91dCB0aGUgZm91cnRoICJmbGFncyIgYXJndW1lbnQsIGFuZCB0byB1c2UgYXJiaXRyYXJ5CisgKiBwcml2YXRlIGRhdGEgd2l0aCBnbnV0bHNfdHJhbnNwb3J0X3NldF9wdHIgaWYgd2Ugd2lzaC4KKyAqCisgKiBXaGVuIHRoZXNlIGN1c3RvbSBwdXNoIGFuZCBwdWxsIGNhbGxiYWNrcyBmYWlsLCBHTlUgVExTIGNoZWNrcyBpdHMgb3duCisgKiBzZXNzaW9uLXNwZWNpZmljIGVycm9yIHZhcmlhYmxlLCBhbmQgd2hlbiBub3Qgc2V0IGFsc28gaXRzIG93biBnbG9iYWwKKyAqIGVycm5vIHZhcmlhYmxlLCBpbiBvcmRlciB0byB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4gR05VIFRMUyBkb2VzIG5vdAorICogcmVxdWlyZSB0aGF0IHRoZSB0cmFuc3BvcnQgaXMgYWN0dWFsbHkgYSBzb2NrZXQuIFRoaXMgaW1wbGllcyB0aGF0IGZvcgorICogV2luZG93cyBidWlsZHMgdGhlc2UgY2FsbGJhY2tzIHNob3VsZCBpZGVhbGx5IHNldCB0aGUgc2Vzc2lvbi1zcGVjaWZpYworICogZXJyb3IgdmFyaWFibGUgdXNpbmcgZnVuY3Rpb24gZ251dGxzX3RyYW5zcG9ydF9zZXRfZXJybm8gb3IgYXMgYSBsYXN0CisgKiByZXNvcnQgZ2xvYmFsIGVycm5vIHZhcmlhYmxlIHVzaW5nIGdudXRsc190cmFuc3BvcnRfc2V0X2dsb2JhbF9lcnJubywKKyAqIHdpdGggYSB0cmFuc3BvcnQgYWdub3N0aWMgZXJyb3IgdmFsdWUuIFRoaXMgaW1wbGllcyB0aGF0IHNvbWUgd2luc29jaworICogZXJyb3IgdHJhbnNsYXRpb24gbXVzdCB0YWtlIHBsYWNlIGluIHRoZXNlIGNhbGxiYWNrcy4KKyAqCisgKiBQYXJhZ3JhcGggYWJvdmUgYXBwbGllcyB0byBHTlUgVExTIHZlcnNpb25zIG9sZGVyIHRoYW4gMi4xMi4zLCBzaW5jZQorICogdGhpcyB2ZXJzaW9uIEdOVSBUTFMgZG9lcyBpdHMgb3duIGludGVybmFsIHdpbnNvY2sgZXJyb3IgdHJhbnNsYXRpb24KKyAqIHVzaW5nIHN5c3RlbV9lcnJubygpIGZ1bmN0aW9uLgorICovCisKKyNpZiBkZWZpbmVkKFVTRV9XSU5TT0NLKSAmJiAhZGVmaW5lZChHTlVUTFNfTUFQU19XSU5TT0NLX0VSUk9SUykKKyMgIGRlZmluZSBndGxzX0VJTlRSICA0CisjICBkZWZpbmUgZ3Rsc19FSU8gICAgNQorIyAgZGVmaW5lIGd0bHNfRUFHQUlOIDExCitzdGF0aWMgaW50IGd0bHNfbWFwcGVkX3NvY2tlcnJubyh2b2lkKQoreworICBzd2l0Y2goU09DS0VSUk5PKSB7CisgIGNhc2UgV1NBRVdPVUxEQkxPQ0s6CisgICAgcmV0dXJuIGd0bHNfRUFHQUlOOworICBjYXNlIFdTQUVJTlRSOgorICAgIHJldHVybiBndGxzX0VJTlRSOworICBkZWZhdWx0OgorICAgIGJyZWFrOworICB9CisgIHJldHVybiBndGxzX0VJTzsKK30KKyNlbmRpZgorCitzdGF0aWMgc3NpemVfdCBDdXJsX2d0bHNfcHVzaCh2b2lkICpzLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisgIHNzaXplX3QgcmV0ID0gc3dyaXRlKEdOVVRMU19QT0lOVEVSX1RPX0lOVF9DQVNUKHMpLCBidWYsIGxlbik7CisjaWYgZGVmaW5lZChVU0VfV0lOU09DSykgJiYgIWRlZmluZWQoR05VVExTX01BUFNfV0lOU09DS19FUlJPUlMpCisgIGlmKHJldCA8IDApCisgICAgZ251dGxzX3RyYW5zcG9ydF9zZXRfZ2xvYmFsX2Vycm5vKGd0bHNfbWFwcGVkX3NvY2tlcnJubygpKTsKKyNlbmRpZgorICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBDdXJsX2d0bHNfcHVsbCh2b2lkICpzLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisgIHNzaXplX3QgcmV0ID0gc3JlYWQoR05VVExTX1BPSU5URVJfVE9fSU5UX0NBU1QocyksIGJ1ZiwgbGVuKTsKKyNpZiBkZWZpbmVkKFVTRV9XSU5TT0NLKSAmJiAhZGVmaW5lZChHTlVUTFNfTUFQU19XSU5TT0NLX0VSUk9SUykKKyAgaWYocmV0IDwgMCkKKyAgICBnbnV0bHNfdHJhbnNwb3J0X3NldF9nbG9iYWxfZXJybm8oZ3Rsc19tYXBwZWRfc29ja2Vycm5vKCkpOworI2VuZGlmCisgIHJldHVybiByZXQ7Cit9CisKKy8qIEN1cmxfZ3Rsc19pbml0KCkKKyAqCisgKiBHbG9iYWwgR251VExTIGluaXQsIGNhbGxlZCBmcm9tIEN1cmxfc3NsX2luaXQoKS4gVGhpcyBjYWxscyBmdW5jdGlvbnMgdGhhdAorICogYXJlIG5vdCB0aHJlYWQtc2FmZSBhbmQgdGh1cyB0aGlzIGZ1bmN0aW9uIGl0c2VsZiBpcyBub3QgdGhyZWFkLXNhZmUgYW5kCisgKiBtdXN0IG9ubHkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGN1cmxfZ2xvYmFsX2luaXQoKSB0byBrZWVwIHRoZSB0aHJlYWQKKyAqIHNpdHVhdGlvbiB1bmRlciBjb250cm9sIQorICovCitpbnQgQ3VybF9ndGxzX2luaXQodm9pZCkKK3sKKyAgaW50IHJldCA9IDE7CisgIGlmKCFndGxzX2luaXRlZCkgeworICAgIHJldCA9IGdudXRsc19nbG9iYWxfaW5pdCgpPzA6MTsKKyNpZmRlZiBHVExTREVCVUcKKyAgICBnbnV0bHNfZ2xvYmFsX3NldF9sb2dfZnVuY3Rpb24odGxzX2xvZ19mdW5jKTsKKyAgICBnbnV0bHNfZ2xvYmFsX3NldF9sb2dfbGV2ZWwoMik7CisjZW5kaWYKKyAgICBndGxzX2luaXRlZCA9IFRSVUU7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworaW50IEN1cmxfZ3Rsc19jbGVhbnVwKHZvaWQpCit7CisgIGlmKGd0bHNfaW5pdGVkKSB7CisgICAgZ251dGxzX2dsb2JhbF9kZWluaXQoKTsKKyAgICBndGxzX2luaXRlZCA9IEZBTFNFOworICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBzaG93dGltZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRleHQsCisgICAgICAgICAgICAgICAgICAgICB0aW1lX3Qgc3RhbXApCit7CisgIHN0cnVjdCB0bSBidWZmZXI7CisgIGNvbnN0IHN0cnVjdCB0bSAqdG0gPSAmYnVmZmVyOworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX2dtdGltZShzdGFtcCwgJmJ1ZmZlcik7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm47CisKKyAgc25wcmludGYoZGF0YS0+c3RhdGUuYnVmZmVyLAorICAgICAgICAgICBCVUZTSVpFLAorICAgICAgICAgICAiXHQgJXM6ICVzLCAlMDJkICVzICU0ZCAlMDJkOiUwMmQ6JTAyZCBHTVRcbiIsCisgICAgICAgICAgIHRleHQsCisgICAgICAgICAgIEN1cmxfd2tkYXlbdG0tPnRtX3dkYXk/dG0tPnRtX3dkYXktMTo2XSwKKyAgICAgICAgICAgdG0tPnRtX21kYXksCisgICAgICAgICAgIEN1cmxfbW9udGhbdG0tPnRtX21vbl0sCisgICAgICAgICAgIHRtLT50bV95ZWFyICsgMTkwMCwKKyAgICAgICAgICAgdG0tPnRtX2hvdXIsCisgICAgICAgICAgIHRtLT50bV9taW4sCisgICAgICAgICAgIHRtLT50bV9zZWMpOworICBpbmZvZihkYXRhLCAiJXNcbiIsIGRhdGEtPnN0YXRlLmJ1ZmZlcik7Cit9CisKK3N0YXRpYyBnbnV0bHNfZGF0dW0gbG9hZF9maWxlIChjb25zdCBjaGFyICpmaWxlKQoreworICBGSUxFICpmOworICBnbnV0bHNfZGF0dW0gbG9hZGVkX2ZpbGUgPSB7IE5VTEwsIDAgfTsKKyAgbG9uZyBmaWxlbGVuOworICB2b2lkICpwdHI7CisKKyAgaWYoIShmID0gZm9wZW4oZmlsZSwgInIiKSkpCisgICAgcmV0dXJuIGxvYWRlZF9maWxlOworICBpZihmc2VlayhmLCAwLCBTRUVLX0VORCkgIT0gMAorICAgICB8fCAoZmlsZWxlbiA9IGZ0ZWxsKGYpKSA8IDAKKyAgICAgfHwgZnNlZWsoZiwgMCwgU0VFS19TRVQpICE9IDAKKyAgICAgfHwgIShwdHIgPSBtYWxsb2MoKHNpemVfdClmaWxlbGVuKSkpCisgICAgZ290byBvdXQ7CisgIGlmKGZyZWFkKHB0ciwgMSwgKHNpemVfdClmaWxlbGVuLCBmKSA8IChzaXplX3QpZmlsZWxlbikgeworICAgIGZyZWUocHRyKTsKKyAgICBnb3RvIG91dDsKKyAgfQorCisgIGxvYWRlZF9maWxlLmRhdGEgPSBwdHI7CisgIGxvYWRlZF9maWxlLnNpemUgPSAodW5zaWduZWQgaW50KWZpbGVsZW47CitvdXQ6CisgIGZjbG9zZShmKTsKKyAgcmV0dXJuIGxvYWRlZF9maWxlOworfQorCitzdGF0aWMgdm9pZCB1bmxvYWRfZmlsZShnbnV0bHNfZGF0dW0gZGF0YSkgeworICBmcmVlKGRhdGEuZGF0YSk7Cit9CisKKworLyogdGhpcyBmdW5jdGlvbiBkb2VzIGEgU1NML1RMUyAocmUtKWhhbmRzaGFrZSAqLworc3RhdGljIENVUkxjb2RlIGhhbmRzaGFrZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZHVyaW5nY29ubmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub25ibG9ja2luZykKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgZ251dGxzX3Nlc3Npb24gc2Vzc2lvbiA9IGNvbm4tPnNzbFtzb2NraW5kZXhdLnNlc3Npb247CisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBsb25nIHRpbWVvdXRfbXM7CisgIGludCByYzsKKyAgaW50IHdoYXQ7CisKKyAgZm9yKDs7KSB7CisgICAgLyogY2hlY2sgYWxsb3dlZCB0aW1lIGxlZnQgKi8KKyAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBkdXJpbmdjb25uZWN0KTsKKworICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CisgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLworICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgfQorCisgICAgLyogaWYgc3NsIGlzIGV4cGVjdGluZyBzb21ldGhpbmcsIGNoZWNrIGlmIGl0J3MgYXZhaWxhYmxlLiAqLworICAgIGlmKGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nCisgICAgICAgfHwgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9PSBzc2xfY29ubmVjdF8yX3dyaXRpbmcpIHsKKworICAgICAgY3VybF9zb2NrZXRfdCB3cml0ZWZkID0gc3NsX2Nvbm5lY3RfMl93cml0aW5nPT0KKyAgICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZT9zb2NrZmQ6Q1VSTF9TT0NLRVRfQkFEOworICAgICAgY3VybF9zb2NrZXRfdCByZWFkZmQgPSBzc2xfY29ubmVjdF8yX3JlYWRpbmc9PQorICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9yZWFkeShyZWFkZmQsIHdyaXRlZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uYmxvY2tpbmc/MDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X21zP3RpbWVvdXRfbXM6MTAwMCk7CisgICAgICBpZih3aGF0IDwgMCkgeworICAgICAgICAvKiBmYXRhbCBlcnJvciAqLworICAgICAgICBmYWlsZihkYXRhLCAic2VsZWN0L3BvbGwgb24gU1NMIHNvY2tldCwgZXJybm86ICVkIiwgU09DS0VSUk5PKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZSBpZigwID09IHdoYXQpIHsKKyAgICAgICAgaWYobm9uYmxvY2tpbmcpCisgICAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgICBlbHNlIGlmKHRpbWVvdXRfbXMpIHsKKyAgICAgICAgICAvKiB0aW1lb3V0ICovCisgICAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQgYXQgJWxkIiwgdGltZW91dF9tcyk7CisgICAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogc29ja2V0IGlzIHJlYWRhYmxlIG9yIHdyaXRhYmxlICovCisgICAgfQorCisgICAgcmMgPSBnbnV0bHNfaGFuZHNoYWtlKHNlc3Npb24pOworCisgICAgaWYoKHJjID09IEdOVVRMU19FX0FHQUlOKSB8fCAocmMgPT0gR05VVExTX0VfSU5URVJSVVBURUQpKSB7CisgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0KKyAgICAgICAgZ251dGxzX3JlY29yZF9nZXRfZGlyZWN0aW9uKHNlc3Npb24pPworICAgICAgICBzc2xfY29ubmVjdF8yX3dyaXRpbmc6c3NsX2Nvbm5lY3RfMl9yZWFkaW5nOworICAgICAgaWYobm9uYmxvY2tpbmcpCisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisgICAgZWxzZSBpZihyYyA8IDApIHsKKyAgICAgIGZhaWxmKGRhdGEsICJnbnV0bHNfaGFuZHNoYWtlKCkgZmFpbGVkOiAlcyIsIGdudXRsc19zdHJlcnJvcihyYykpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFJlc2V0IG91ciBjb25uZWN0IHN0YXRlIG1hY2hpbmUgKi8KKyAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8xOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgZ251dGxzX3g1MDlfY3J0X2ZtdCBkb19maWxlX3R5cGUoY29uc3QgY2hhciAqdHlwZSkKK3sKKyAgaWYoIXR5cGUgfHwgIXR5cGVbMF0pCisgICAgcmV0dXJuIEdOVVRMU19YNTA5X0ZNVF9QRU07CisgIGlmKEN1cmxfcmF3X2VxdWFsKHR5cGUsICJQRU0iKSkKKyAgICByZXR1cm4gR05VVExTX1g1MDlfRk1UX1BFTTsKKyAgaWYoQ3VybF9yYXdfZXF1YWwodHlwZSwgIkRFUiIpKQorICAgIHJldHVybiBHTlVUTFNfWDUwOV9GTVRfREVSOworICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBDVVJMY29kZQorZ3Rsc19jb25uZWN0X3N0ZXAxKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQoreworI2lmbmRlZiBVU0VfR05VVExTX1BSSU9SSVRZX1NFVF9ESVJFQ1QKKyAgc3RhdGljIGNvbnN0IGludCBjZXJ0X3R5cGVfcHJpb3JpdHlbXSA9IHsgR05VVExTX0NSVF9YNTA5LCAwIH07CisjZW5kaWYKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBnbnV0bHNfc2Vzc2lvbiBzZXNzaW9uOworICBpbnQgcmM7CisgIHZvaWQgKnNzbF9zZXNzaW9uaWQ7CisgIHNpemVfdCBzc2xfaWRzaXplOworICBib29sIHNuaSA9IFRSVUU7IC8qIGRlZmF1bHQgaXMgU05JIGVuYWJsZWQgKi8KKyNpZmRlZiBFTkFCTEVfSVBWNgorICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKKyNlbHNlCisgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisjZW5kaWYKKworICBpZihjb25uLT5zc2xbc29ja2luZGV4XS5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKKyAgICAvKiB0byBtYWtlIHVzIHRvbGVyYW50IGFnYWluc3QgYmVpbmcgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGZvciB0aGUKKyAgICAgICBzYW1lIGNvbm5lY3Rpb24gKi8KKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgaWYoIWd0bHNfaW5pdGVkKQorICAgIEN1cmxfZ3Rsc19pbml0KCk7CisKKyAgLyogR251VExTIG9ubHkgc3VwcG9ydHMgU1NMdjMgYW5kIFRMU3YxICovCisgIGlmKGRhdGEtPnNldC5zc2wudmVyc2lvbiA9PSBDVVJMX1NTTFZFUlNJT05fU1NMdjIpIHsKKyAgICBmYWlsZihkYXRhLCAiR251VExTIGRvZXMgbm90IHN1cHBvcnQgU1NMdjIiKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKyAgZWxzZSBpZihkYXRhLT5zZXQuc3NsLnZlcnNpb24gPT0gQ1VSTF9TU0xWRVJTSU9OX1NTTHYzKQorICAgIHNuaSA9IEZBTFNFOyAvKiBTU0x2MyBoYXMgbm8gU05JICovCisKKyAgLyogYWxsb2NhdGUgYSBjcmVkIHN0cnVjdCAqLworICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9hbGxvY2F0ZV9jcmVkZW50aWFscygmY29ubi0+c3NsW3NvY2tpbmRleF0uY3JlZCk7CisgIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpIHsKKyAgICBmYWlsZihkYXRhLCAiZ251dGxzX2NlcnRfYWxsX2NyZWQoKSBmYWlsZWQ6ICVzIiwgZ251dGxzX3N0cmVycm9yKHJjKSk7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICB9CisKKyNpZmRlZiBVU0VfVExTX1NSUAorICBpZihkYXRhLT5zZXQuc3NsLmF1dGh0eXBlID09IENVUkxfVExTQVVUSF9TUlApIHsKKyAgICBpbmZvZihkYXRhLCAiVXNpbmcgVExTLVNSUCB1c2VybmFtZTogJXNcbiIsIGRhdGEtPnNldC5zc2wudXNlcm5hbWUpOworCisgICAgcmMgPSBnbnV0bHNfc3JwX2FsbG9jYXRlX2NsaWVudF9jcmVkZW50aWFscygKKyAgICAgICAgICAgJmNvbm4tPnNzbFtzb2NraW5kZXhdLnNycF9jbGllbnRfY3JlZCk7CisgICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgeworICAgICAgZmFpbGYoZGF0YSwgImdudXRsc19zcnBfYWxsb2NhdGVfY2xpZW50X2NyZWQoKSBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgIGdudXRsc19zdHJlcnJvcihyYykpOworICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQorCisgICAgcmMgPSBnbnV0bHNfc3JwX3NldF9jbGllbnRfY3JlZGVudGlhbHMoY29ubi0+c3NsW3NvY2tpbmRleF0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JwX2NsaWVudF9jcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wudXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5wYXNzd29yZCk7CisgICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgeworICAgICAgZmFpbGYoZGF0YSwgImdudXRsc19zcnBfc2V0X2NsaWVudF9jcmVkKCkgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICBnbnV0bHNfc3RyZXJyb3IocmMpKTsKKyAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgICAgfQorICB9CisjZW5kaWYKKworICBpZihkYXRhLT5zZXQuc3NsLkNBZmlsZSkgeworICAgIC8qIHNldCB0aGUgdHJ1c3RlZCBDQSBjZXJ0IGJ1bmRsZSBmaWxlICovCisgICAgZ251dGxzX2NlcnRpZmljYXRlX3NldF92ZXJpZnlfZmxhZ3MoY29ubi0+c3NsW3NvY2tpbmRleF0uY3JlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfVkVSSUZZX0FMTE9XX1g1MDlfVjFfQ0FfQ1JUKTsKKworICAgIHJjID0gZ251dGxzX2NlcnRpZmljYXRlX3NldF94NTA5X3RydXN0X2ZpbGUoY29ubi0+c3NsW3NvY2tpbmRleF0uY3JlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuQ0FmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VVExTX1g1MDlfRk1UX1BFTSk7CisgICAgaWYocmMgPCAwKSB7CisgICAgICBpbmZvZihkYXRhLCAiZXJyb3IgcmVhZGluZyBjYSBjZXJ0IGZpbGUgJXMgKCVzKVxuIiwKKyAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuQ0FmaWxlLCBnbnV0bHNfc3RyZXJyb3IocmMpKTsKKyAgICAgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKKyAgICB9CisgICAgZWxzZQorICAgICAgaW5mb2YoZGF0YSwgImZvdW5kICVkIGNlcnRpZmljYXRlcyBpbiAlc1xuIiwKKyAgICAgICAgICAgIHJjLCBkYXRhLT5zZXQuc3NsLkNBZmlsZSk7CisgIH0KKworICBpZihkYXRhLT5zZXQuc3NsLkNSTGZpbGUpIHsKKyAgICAvKiBzZXQgdGhlIENSTCBsaXN0IGZpbGUgKi8KKyAgICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9jcmxfZmlsZShjb25uLT5zc2xbc29ja2luZGV4XS5jcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuQ1JMZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfWDUwOV9GTVRfUEVNKTsKKyAgICBpZihyYyA8IDApIHsKKyAgICAgIGZhaWxmKGRhdGEsICJlcnJvciByZWFkaW5nIGNybCBmaWxlICVzICglcylcbiIsCisgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLkNSTGZpbGUsIGdudXRsc19zdHJlcnJvcihyYykpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DUkxfQkFERklMRTsKKyAgICB9CisgICAgZWxzZQorICAgICAgaW5mb2YoZGF0YSwgImZvdW5kICVkIENSTCBpbiAlc1xuIiwKKyAgICAgICAgICAgIHJjLCBkYXRhLT5zZXQuc3NsLkNSTGZpbGUpOworICB9CisKKyAgLyogSW5pdGlhbGl6ZSBUTFMgc2Vzc2lvbiBhcyBhIGNsaWVudCAqLworICByYyA9IGdudXRsc19pbml0KCZjb25uLT5zc2xbc29ja2luZGV4XS5zZXNzaW9uLCBHTlVUTFNfQ0xJRU5UKTsKKyAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgeworICAgIGZhaWxmKGRhdGEsICJnbnV0bHNfaW5pdCgpIGZhaWxlZDogJWQiLCByYyk7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICB9CisKKyAgLyogY29udmVuaWVudCBhc3NpZ24gKi8KKyAgc2Vzc2lvbiA9IGNvbm4tPnNzbFtzb2NraW5kZXhdLnNlc3Npb247CisKKyAgaWYoKDAgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgY29ubi0+aG9zdC5uYW1lLCAmYWRkcikpICYmCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgKDAgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGNvbm4tPmhvc3QubmFtZSwgJmFkZHIpKSAmJgorI2VuZGlmCisgICAgIHNuaSAmJgorICAgICAoZ251dGxzX3NlcnZlcl9uYW1lX3NldChzZXNzaW9uLCBHTlVUTFNfTkFNRV9ETlMsIGNvbm4tPmhvc3QubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGNvbm4tPmhvc3QubmFtZSkpIDwgMCkpCisgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBjb25maWd1cmUgc2VydmVyIG5hbWUgaW5kaWNhdGlvbiAoU05JKSAiCisgICAgICAgICAgIlRMUyBleHRlbnNpb25cbiIpOworCisgIC8qIFVzZSBkZWZhdWx0IHByaW9yaXRpZXMgKi8KKyAgcmMgPSBnbnV0bHNfc2V0X2RlZmF1bHRfcHJpb3JpdHkoc2Vzc2lvbik7CisgIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpCisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworCisgIGlmKGRhdGEtPnNldC5zc2wudmVyc2lvbiA9PSBDVVJMX1NTTFZFUlNJT05fU1NMdjMpIHsKKyNpZm5kZWYgVVNFX0dOVVRMU19QUklPUklUWV9TRVRfRElSRUNUCisgICAgc3RhdGljIGNvbnN0IGludCBwcm90b2NvbF9wcmlvcml0eVtdID0geyBHTlVUTFNfU1NMMywgMCB9OworICAgIHJjID0gZ251dGxzX3Byb3RvY29sX3NldF9wcmlvcml0eShzZXNzaW9uLCBwcm90b2NvbF9wcmlvcml0eSk7CisjZWxzZQorICAgIGNvbnN0IGNoYXIgKmVycjsKKyAgICAvKiB0aGUgY29tYmluYXRpb24gb2YgdGhlIGNpcGhlciBBUkNGT1VSIHdpdGggU1NMIDMuMCBhbmQgVExTIDEuMCBpcyBub3QKKyAgICAgICB2dWxuZXJhYmxlIHRvIGF0dGFja3Mgc3VjaCBhcyB0aGUgQkVBU1QsIHdoeSB0aGlzIGNvZGUgbm93IGV4cGxpY2l0bHkKKyAgICAgICBhc2tzIGZvciB0aGF0CisgICAgKi8KKyAgICByYyA9IGdudXRsc19wcmlvcml0eV9zZXRfZGlyZWN0KHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTk9STUFMOi1WRVJTLVRMUy1BTEw6K1ZFUlMtU1NMMy4wOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItQ0lQSEVSLUFMTDorQVJDRk9VUi0xMjgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycik7CisjZW5kaWYKKyAgICBpZihyYyAhPSBHTlVUTFNfRV9TVUNDRVNTKQorICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICB9CisKKyNpZm5kZWYgVVNFX0dOVVRMU19QUklPUklUWV9TRVRfRElSRUNUCisgIC8qIFNldHMgdGhlIHByaW9yaXR5IG9uIHRoZSBjZXJ0aWZpY2F0ZSB0eXBlcyBzdXBwb3J0ZWQgYnkgZ251dGxzLiBQcmlvcml0eQorICAgICBpcyBoaWdoZXIgZm9yIHR5cGVzIHNwZWNpZmllZCBiZWZvcmUgb3RoZXJzLiBBZnRlciBzcGVjaWZ5aW5nIHRoZSB0eXBlcworICAgICB5b3Ugd2FudCwgeW91IG11c3QgYXBwZW5kIGEgMC4gKi8KKyAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfdHlwZV9zZXRfcHJpb3JpdHkoc2Vzc2lvbiwgY2VydF90eXBlX3ByaW9yaXR5KTsKKyAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisjZW5kaWYKKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSkgeworICAgIGlmKGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9rZXlfZmlsZSgKKyAgICAgICAgIGNvbm4tPnNzbFtzb2NraW5kZXhdLmNyZWQsCisgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSwKKyAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0gPworICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSA6IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdLAorICAgICAgICAgZG9fZmlsZV90eXBlKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfVFlQRV0pICkgIT0KKyAgICAgICBHTlVUTFNfRV9TVUNDRVNTKSB7CisgICAgICBmYWlsZihkYXRhLCAiZXJyb3IgcmVhZGluZyBYLjUwOSBrZXkgb3IgY2VydGlmaWNhdGUgZmlsZSIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgIH0KKyAgfQorCisjaWZkZWYgVVNFX1RMU19TUlAKKyAgLyogcHV0IHRoZSBjcmVkZW50aWFscyB0byB0aGUgY3VycmVudCBzZXNzaW9uICovCisgIGlmKGRhdGEtPnNldC5zc2wuYXV0aHR5cGUgPT0gQ1VSTF9UTFNBVVRIX1NSUCkgeworICAgIHJjID0gZ251dGxzX2NyZWRlbnRpYWxzX3NldChzZXNzaW9uLCBHTlVUTFNfQ1JEX1NSUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+c3NsW3NvY2tpbmRleF0uc3JwX2NsaWVudF9jcmVkKTsKKyAgICBpZihyYyAhPSBHTlVUTFNfRV9TVUNDRVNTKQorICAgICAgZmFpbGYoZGF0YSwgImdudXRsc19jcmVkZW50aWFsc19zZXQoKSBmYWlsZWQ6ICVzIiwgZ251dGxzX3N0cmVycm9yKHJjKSk7CisgIH0KKyAgZWxzZQorI2VuZGlmCisgICAgcmMgPSBnbnV0bHNfY3JlZGVudGlhbHNfc2V0KHNlc3Npb24sIEdOVVRMU19DUkRfQ0VSVElGSUNBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnNzbFtzb2NraW5kZXhdLmNyZWQpOworCisgIC8qIHNldCB0aGUgY29ubmVjdGlvbiBoYW5kbGUgKGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIHNvY2tldCkgKi8KKyAgZ251dGxzX3RyYW5zcG9ydF9zZXRfcHRyKHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfSU5UX1RPX1BPSU5URVJfQ0FTVChjb25uLT5zb2NrW3NvY2tpbmRleF0pKTsKKworICAvKiByZWdpc3RlciBjYWxsYmFjayBmdW5jdGlvbnMgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhLiAqLworICBnbnV0bHNfdHJhbnNwb3J0X3NldF9wdXNoX2Z1bmN0aW9uKHNlc3Npb24sIEN1cmxfZ3Rsc19wdXNoKTsKKyAgZ251dGxzX3RyYW5zcG9ydF9zZXRfcHVsbF9mdW5jdGlvbihzZXNzaW9uLCBDdXJsX2d0bHNfcHVsbCk7CisKKyAgLyogbG93YXQgbXVzdCBiZSBzZXQgdG8gemVybyB3aGVuIHVzaW5nIGN1c3RvbSBwdXNoIGFuZCBwdWxsIGZ1bmN0aW9ucy4gKi8KKyAgZ251dGxzX3RyYW5zcG9ydF9zZXRfbG93YXQoc2Vzc2lvbiwgMCk7CisKKyAgLyogVGhpcyBtaWdodCBiZSBhIHJlY29ubmVjdCwgc28gd2UgY2hlY2sgZm9yIGEgc2Vzc2lvbiBJRCBpbiB0aGUgY2FjaGUKKyAgICAgdG8gc3BlZWQgdXAgdGhpbmdzICovCisKKyAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmc3NsX3Nlc3Npb25pZCwgJnNzbF9pZHNpemUpKSB7CisgICAgLyogd2UgZ290IGEgc2Vzc2lvbiBpZCwgdXNlIGl0ISAqLworICAgIGdudXRsc19zZXNzaW9uX3NldF9kYXRhKHNlc3Npb24sIHNzbF9zZXNzaW9uaWQsIHNzbF9pZHNpemUpOworCisgICAgLyogSW5mb3JtYXRpb25hbCBtZXNzYWdlICovCisgICAgaW5mb2YgKGRhdGEsICJTU0wgcmUtdXNpbmcgc2Vzc2lvbiBJRFxuIik7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDdXJsX3JlY3YgZ3Rsc19yZWN2Oworc3RhdGljIEN1cmxfc2VuZCBndGxzX3NlbmQ7CisKK3N0YXRpYyBDVVJMY29kZQorZ3Rsc19jb25uZWN0X3N0ZXAzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQoreworICB1bnNpZ25lZCBpbnQgY2VydF9saXN0X3NpemU7CisgIGNvbnN0IGdudXRsc19kYXR1bSAqY2hhaW5wOworICB1bnNpZ25lZCBpbnQgdmVyaWZ5X3N0YXR1czsKKyAgZ251dGxzX3g1MDlfY3J0IHg1MDlfY2VydCx4NTA5X2lzc3VlcjsKKyAgZ251dGxzX2RhdHVtIGlzc3VlcnA7CisgIGNoYXIgY2VydGJ1ZlsyNTZdOyAvKiBiaWcgZW5vdWdoPyAqLworICBzaXplX3Qgc2l6ZTsKKyAgdW5zaWduZWQgaW50IGFsZ287CisgIHVuc2lnbmVkIGludCBiaXRzOworICB0aW1lX3QgY2VydGNsb2NrOworICBjb25zdCBjaGFyICpwdHI7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgZ251dGxzX3Nlc3Npb24gc2Vzc2lvbiA9IGNvbm4tPnNzbFtzb2NraW5kZXhdLnNlc3Npb247CisgIGludCByYzsKKyAgaW50IGluY2FjaGU7CisgIHZvaWQgKnNzbF9zZXNzaW9uaWQ7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHBlZXIncyByYXcgY2VydGlmaWNhdGUgKGNoYWluKSBhcyBzZW50IGJ5CisgICAgIHRoZSBwZWVyLiBUaGVzZSBjZXJ0aWZpY2F0ZXMgYXJlIGluIHJhdyBmb3JtYXQgKERFUiBlbmNvZGVkIGZvcgorICAgICBYLjUwOSkuIEluIGNhc2Ugb2YgYSBYLjUwOSB0aGVuIGEgY2VydGlmaWNhdGUgbGlzdCBtYXkgYmUgcHJlc2VudC4gVGhlCisgICAgIGZpcnN0IGNlcnRpZmljYXRlIGluIHRoZSBsaXN0IGlzIHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUsIGZvbGxvd2luZyB0aGUKKyAgICAgaXNzdWVyJ3MgY2VydGlmaWNhdGUsIHRoZW4gdGhlIGlzc3VlcidzIGlzc3VlciBldGMuICovCisKKyAgY2hhaW5wID0gZ251dGxzX2NlcnRpZmljYXRlX2dldF9wZWVycyhzZXNzaW9uLCAmY2VydF9saXN0X3NpemUpOworICBpZighY2hhaW5wKSB7CisgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyIHx8CisgICAgICAgZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0IHx8CisgICAgICAgZGF0YS0+c2V0LnNzbC5pc3N1ZXJjZXJ0KSB7CisjaWZkZWYgVVNFX1RMU19TUlAKKyAgICAgIGlmKGRhdGEtPnNldC5zc2wuYXV0aHR5cGUgPT0gQ1VSTF9UTFNBVVRIX1NSUAorICAgICAgICAgJiYgZGF0YS0+c2V0LnNzbC51c2VybmFtZSAhPSBOVUxMCisgICAgICAgICAmJiAhZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyCisgICAgICAgICAmJiBnbnV0bHNfY2lwaGVyX2dldChzZXNzaW9uKSkgeworICAgICAgICAvKiBubyBwZWVyIGNlcnQsIGJ1dCBhdXRoIGlzIG9rIGlmIHdlIGhhdmUgU1JQIHVzZXIgYW5kIGNpcGhlciBhbmQgbm8KKyAgICAgICAgICAgcGVlciB2ZXJpZnkgKi8KKyAgICAgIH0KKyAgICAgIGVsc2UgeworI2VuZGlmCisgICAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgdG8gZ2V0IHNlcnZlciBjZXJ0Iik7CisgICAgICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisjaWZkZWYgVVNFX1RMU19TUlAKKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICBpbmZvZihkYXRhLCAiXHQgY29tbW9uIG5hbWU6IFdBUk5JTkcgY291bGRuJ3Qgb2J0YWluXG4iKTsKKyAgfQorCisgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICAgIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCB0cnkgdG8gdmVyaWZ5IHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUgYW5kIHJldHVybiBpdHMKKyAgICAgICBzdGF0dXMgKHRydXN0ZWQsIGludmFsaWQgZXRjLikuIFRoZSB2YWx1ZSBvZiBzdGF0dXMgc2hvdWxkIGJlIG9uZSBvcgorICAgICAgIG1vcmUgb2YgdGhlIGdudXRsc19jZXJ0aWZpY2F0ZV9zdGF0dXNfdCBlbnVtZXJhdGVkIGVsZW1lbnRzIGJpdHdpc2UKKyAgICAgICBvcidkLiBUbyBhdm9pZCBkZW5pYWwgb2Ygc2VydmljZSBhdHRhY2tzIHNvbWUgZGVmYXVsdCB1cHBlciBsaW1pdHMKKyAgICAgICByZWdhcmRpbmcgdGhlIGNlcnRpZmljYXRlIGtleSBzaXplIGFuZCBjaGFpbiBzaXplIGFyZSBzZXQuIFRvIG92ZXJyaWRlCisgICAgICAgdGhlbSB1c2UgZ251dGxzX2NlcnRpZmljYXRlX3NldF92ZXJpZnlfbGltaXRzKCkuICovCisKKyAgICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV92ZXJpZnlfcGVlcnMyKHNlc3Npb24sICZ2ZXJpZnlfc3RhdHVzKTsKKyAgICBpZihyYyA8IDApIHsKKyAgICAgIGZhaWxmKGRhdGEsICJzZXJ2ZXIgY2VydCB2ZXJpZnkgZmFpbGVkOiAlZCIsIHJjKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisKKyAgICAvKiB2ZXJpZnlfc3RhdHVzIGlzIGEgYml0bWFzayBvZiBnbnV0bHNfY2VydGlmaWNhdGVfc3RhdHVzIGJpdHMgKi8KKyAgICBpZih2ZXJpZnlfc3RhdHVzICYgR05VVExTX0NFUlRfSU5WQUxJRCkgeworICAgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJzZXJ2ZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGZhaWxlZC4gQ0FmaWxlOiAlcyAiCisgICAgICAgICAgICAgICJDUkxmaWxlOiAlcyIsIGRhdGEtPnNldC5zc2wuQ0FmaWxlP2RhdGEtPnNldC5zc2wuQ0FmaWxlOiJub25lIiwKKyAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5DUkxmaWxlP2RhdGEtPnNldC5zc2wuQ1JMZmlsZToibm9uZSIpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgaW5mb2YoZGF0YSwgIlx0IHNlcnZlciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gRkFJTEVEXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgaW5mb2YoZGF0YSwgIlx0IHNlcnZlciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gT0tcbiIpOworICB9CisgIGVsc2UgeworICAgIGluZm9mKGRhdGEsICJcdCBzZXJ2ZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIFNLSVBQRURcbiIpOworICAgIGdvdG8gYWZ0ZXJfc2VydmVyX2NlcnRfdmVyaWZpY2F0aW9uOworICB9CisKKyAgLyogaW5pdGlhbGl6ZSBhbiBYLjUwOSBjZXJ0aWZpY2F0ZSBzdHJ1Y3R1cmUuICovCisgIGdudXRsc194NTA5X2NydF9pbml0KCZ4NTA5X2NlcnQpOworCisgIC8qIGNvbnZlcnQgdGhlIGdpdmVuIERFUiBvciBQRU0gZW5jb2RlZCBDZXJ0aWZpY2F0ZSB0byB0aGUgbmF0aXZlCisgICAgIGdudXRsc194NTA5X2NydF90IGZvcm1hdCAqLworICBnbnV0bHNfeDUwOV9jcnRfaW1wb3J0KHg1MDlfY2VydCwgY2hhaW5wLCBHTlVUTFNfWDUwOV9GTVRfREVSKTsKKworICBpZihkYXRhLT5zZXQuc3NsLmlzc3VlcmNlcnQpIHsKKyAgICBnbnV0bHNfeDUwOV9jcnRfaW5pdCgmeDUwOV9pc3N1ZXIpOworICAgIGlzc3VlcnAgPSBsb2FkX2ZpbGUoZGF0YS0+c2V0LnNzbC5pc3N1ZXJjZXJ0KTsKKyAgICBnbnV0bHNfeDUwOV9jcnRfaW1wb3J0KHg1MDlfaXNzdWVyLCAmaXNzdWVycCwgR05VVExTX1g1MDlfRk1UX1BFTSk7CisgICAgcmMgPSBnbnV0bHNfeDUwOV9jcnRfY2hlY2tfaXNzdWVyKHg1MDlfY2VydCx4NTA5X2lzc3Vlcik7CisgICAgdW5sb2FkX2ZpbGUoaXNzdWVycCk7CisgICAgaWYocmMgPD0gMCkgeworICAgICAgZmFpbGYoZGF0YSwgInNlcnZlciBjZXJ0aWZpY2F0ZSBpc3N1ZXIgY2hlY2sgZmFpbGVkIChJc3N1ZXJDZXJ0OiAlcykiLAorICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5pc3N1ZXJjZXJ0P2RhdGEtPnNldC5zc2wuaXNzdWVyY2VydDoibm9uZSIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9JU1NVRVJfRVJST1I7CisgICAgfQorICAgIGluZm9mKGRhdGEsIlx0IHNlcnZlciBjZXJ0aWZpY2F0ZSBpc3N1ZXIgY2hlY2sgT0sgKElzc3VlciBDZXJ0OiAlcylcbiIsCisgICAgICAgICAgZGF0YS0+c2V0LnNzbC5pc3N1ZXJjZXJ0P2RhdGEtPnNldC5zc2wuaXNzdWVyY2VydDoibm9uZSIpOworICB9CisKKyAgc2l6ZT1zaXplb2YoY2VydGJ1Zik7CisgIHJjID0gZ251dGxzX3g1MDlfY3J0X2dldF9kbl9ieV9vaWQoeDUwOV9jZXJ0LCBHTlVUTFNfT0lEX1g1MjBfQ09NTU9OX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogdGhlIGZpcnN0IGFuZCBvbmx5IG9uZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpemUpOworICBpZihyYykgeworICAgIGluZm9mKGRhdGEsICJlcnJvciBmZXRjaGluZyBDTiBmcm9tIGNlcnQ6JXNcbiIsCisgICAgICAgICAgZ251dGxzX3N0cmVycm9yKHJjKSk7CisgIH0KKworICAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgaWYgdGhlIGdpdmVuIGNlcnRpZmljYXRlJ3Mgc3ViamVjdCBtYXRjaGVzIHRoZQorICAgICBnaXZlbiBob3N0bmFtZS4gVGhpcyBpcyBhIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYXRjaGluZyBkZXNjcmliZWQKKyAgICAgaW4gUkZDMjgxOCAoSFRUUFMpLCB3aGljaCB0YWtlcyBpbnRvIGFjY291bnQgd2lsZGNhcmRzLCBhbmQgdGhlIHN1YmplY3QKKyAgICAgYWx0ZXJuYXRpdmUgbmFtZSBQS0lYIGV4dGVuc2lvbi4gUmV0dXJucyBub24gemVybyBvbiBzdWNjZXNzLCBhbmQgemVybyBvbgorICAgICBmYWlsdXJlLiAqLworICByYyA9IGdudXRsc194NTA5X2NydF9jaGVja19ob3N0bmFtZSh4NTA5X2NlcnQsIGNvbm4tPmhvc3QubmFtZSk7CisKKyAgaWYoIXJjKSB7CisgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0ID4gMSkgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTDogY2VydGlmaWNhdGUgc3ViamVjdCBuYW1lICglcykgZG9lcyBub3QgbWF0Y2ggIgorICAgICAgICAgICAgInRhcmdldCBob3N0IG5hbWUgJyVzJyIsIGNlcnRidWYsIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworICAgICAgZ251dGxzX3g1MDlfY3J0X2RlaW5pdCh4NTA5X2NlcnQpOworICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICB9CisgICAgZWxzZQorICAgICAgaW5mb2YoZGF0YSwgIlx0IGNvbW1vbiBuYW1lOiAlcyAoZG9lcyBub3QgbWF0Y2ggJyVzJylcbiIsCisgICAgICAgICAgICBjZXJ0YnVmLCBjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgfQorICBlbHNlCisgICAgaW5mb2YoZGF0YSwgIlx0IGNvbW1vbiBuYW1lOiAlcyAobWF0Y2hlZClcbiIsIGNlcnRidWYpOworCisgIC8qIENoZWNrIGZvciB0aW1lLWJhc2VkIHZhbGlkaXR5ICovCisgIGNlcnRjbG9jayA9IGdudXRsc194NTA5X2NydF9nZXRfZXhwaXJhdGlvbl90aW1lKHg1MDlfY2VydCk7CisKKyAgaWYoY2VydGNsb2NrID09ICh0aW1lX3QpLTEpIHsKKyAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnQgZXhwaXJhdGlvbiBkYXRlIHZlcmlmeSBmYWlsZWQiKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICBpZihjZXJ0Y2xvY2sgPCB0aW1lKE5VTEwpKSB7CisgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnRpZmljYXRlIGV4cGlyYXRpb24gZGF0ZSBoYXMgcGFzc2VkLiIpOworICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICB9CisgICAgZWxzZQorICAgICAgaW5mb2YoZGF0YSwgIlx0IHNlcnZlciBjZXJ0aWZpY2F0ZSBleHBpcmF0aW9uIGRhdGUgRkFJTEVEXG4iKTsKKyAgfQorICBlbHNlCisgICAgaW5mb2YoZGF0YSwgIlx0IHNlcnZlciBjZXJ0aWZpY2F0ZSBleHBpcmF0aW9uIGRhdGUgT0tcbiIpOworCisgIGNlcnRjbG9jayA9IGdudXRsc194NTA5X2NydF9nZXRfYWN0aXZhdGlvbl90aW1lKHg1MDlfY2VydCk7CisKKyAgaWYoY2VydGNsb2NrID09ICh0aW1lX3QpLTEpIHsKKyAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnQgYWN0aXZhdGlvbiBkYXRlIHZlcmlmeSBmYWlsZWQiKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICBpZihjZXJ0Y2xvY2sgPiB0aW1lKE5VTEwpKSB7CisgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnRpZmljYXRlIG5vdCBhY3RpdmF0ZWQgeWV0LiIpOworICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICB9CisgICAgZWxzZQorICAgICAgaW5mb2YoZGF0YSwgIlx0IHNlcnZlciBjZXJ0aWZpY2F0ZSBhY3RpdmF0aW9uIGRhdGUgRkFJTEVEXG4iKTsKKyAgfQorICBlbHNlCisgICAgaW5mb2YoZGF0YSwgIlx0IHNlcnZlciBjZXJ0aWZpY2F0ZSBhY3RpdmF0aW9uIGRhdGUgT0tcbiIpOworCisgIC8qIFNob3c6CisKKyAgLSBjaXBoZXJzIHVzZWQKKyAgLSBzdWJqZWN0CisgIC0gc3RhcnQgZGF0ZQorICAtIGV4cGlyZSBkYXRlCisgIC0gY29tbW9uIG5hbWUKKyAgLSBpc3N1ZXIKKworICAqLworCisgIC8qIHB1YmxpYyBrZXkgYWxnb3JpdGhtJ3MgcGFyYW1ldGVycyAqLworICBhbGdvID0gZ251dGxzX3g1MDlfY3J0X2dldF9wa19hbGdvcml0aG0oeDUwOV9jZXJ0LCAmYml0cyk7CisgIGluZm9mKGRhdGEsICJcdCBjZXJ0aWZpY2F0ZSBwdWJsaWMga2V5OiAlc1xuIiwKKyAgICAgICAgZ251dGxzX3BrX2FsZ29yaXRobV9nZXRfbmFtZShhbGdvKSk7CisKKyAgLyogdmVyc2lvbiBvZiB0aGUgWC41MDkgY2VydGlmaWNhdGUuICovCisgIGluZm9mKGRhdGEsICJcdCBjZXJ0aWZpY2F0ZSB2ZXJzaW9uOiAjJWRcbiIsCisgICAgICAgIGdudXRsc194NTA5X2NydF9nZXRfdmVyc2lvbih4NTA5X2NlcnQpKTsKKworCisgIHNpemUgPSBzaXplb2YoY2VydGJ1Zik7CisgIGdudXRsc194NTA5X2NydF9nZXRfZG4oeDUwOV9jZXJ0LCBjZXJ0YnVmLCAmc2l6ZSk7CisgIGluZm9mKGRhdGEsICJcdCBzdWJqZWN0OiAlc1xuIiwgY2VydGJ1Zik7CisKKyAgY2VydGNsb2NrID0gZ251dGxzX3g1MDlfY3J0X2dldF9hY3RpdmF0aW9uX3RpbWUoeDUwOV9jZXJ0KTsKKyAgc2hvd3RpbWUoZGF0YSwgInN0YXJ0IGRhdGUiLCBjZXJ0Y2xvY2spOworCisgIGNlcnRjbG9jayA9IGdudXRsc194NTA5X2NydF9nZXRfZXhwaXJhdGlvbl90aW1lKHg1MDlfY2VydCk7CisgIHNob3d0aW1lKGRhdGEsICJleHBpcmUgZGF0ZSIsIGNlcnRjbG9jayk7CisKKyAgc2l6ZSA9IHNpemVvZihjZXJ0YnVmKTsKKyAgZ251dGxzX3g1MDlfY3J0X2dldF9pc3N1ZXJfZG4oeDUwOV9jZXJ0LCBjZXJ0YnVmLCAmc2l6ZSk7CisgIGluZm9mKGRhdGEsICJcdCBpc3N1ZXI6ICVzXG4iLCBjZXJ0YnVmKTsKKworICBnbnV0bHNfeDUwOV9jcnRfZGVpbml0KHg1MDlfY2VydCk7CisKK2FmdGVyX3NlcnZlcl9jZXJ0X3ZlcmlmaWNhdGlvbjoKKworICAvKiBjb21wcmVzc2lvbiBhbGdvcml0aG0gKGlmIGFueSkgKi8KKyAgcHRyID0gZ251dGxzX2NvbXByZXNzaW9uX2dldF9uYW1lKGdudXRsc19jb21wcmVzc2lvbl9nZXQoc2Vzc2lvbikpOworICAvKiB0aGUgKl9nZXRfbmFtZSgpIHNheXMgIk5VTEwiIGlmIEdOVVRMU19DT01QX05VTEwgaXMgcmV0dXJuZWQgKi8KKyAgaW5mb2YoZGF0YSwgIlx0IGNvbXByZXNzaW9uOiAlc1xuIiwgcHRyKTsKKworICAvKiB0aGUgbmFtZSBvZiB0aGUgY2lwaGVyIHVzZWQuIGllIDNERVMuICovCisgIHB0ciA9IGdudXRsc19jaXBoZXJfZ2V0X25hbWUoZ251dGxzX2NpcGhlcl9nZXQoc2Vzc2lvbikpOworICBpbmZvZihkYXRhLCAiXHQgY2lwaGVyOiAlc1xuIiwgcHRyKTsKKworICAvKiB0aGUgTUFDIGFsZ29yaXRobXMgbmFtZS4gaWUgU0hBMSAqLworICBwdHIgPSBnbnV0bHNfbWFjX2dldF9uYW1lKGdudXRsc19tYWNfZ2V0KHNlc3Npb24pKTsKKyAgaW5mb2YoZGF0YSwgIlx0IE1BQzogJXNcbiIsIHB0cik7CisKKyAgY29ubi0+c3NsW3NvY2tpbmRleF0uc3RhdGUgPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZTsKKyAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gZ3Rsc19yZWN2OworICBjb25uLT5zZW5kW3NvY2tpbmRleF0gPSBndGxzX3NlbmQ7CisKKyAgeworICAgIC8qIHdlIGFsd2F5cyB1bmNvbmRpdGlvbmFsbHkgZ2V0IHRoZSBzZXNzaW9uIGlkIGhlcmUsIGFzIGV2ZW4gaWYgd2UKKyAgICAgICBhbHJlYWR5IGdvdCBpdCBmcm9tIHRoZSBjYWNoZSBhbmQgYXNrZWQgdG8gdXNlIGl0IGluIHRoZSBjb25uZWN0aW9uLCBpdAorICAgICAgIG1pZ2h0J3ZlIGJlZW4gcmVqZWN0ZWQgYW5kIHRoZW4gYSBuZXcgb25lIGlzIGluIHVzZSBub3cgYW5kIHdlIG5lZWQgdG8KKyAgICAgICBkZXRlY3QgdGhhdC4gKi8KKyAgICB2b2lkICpjb25uZWN0X3Nlc3Npb25pZDsKKyAgICBzaXplX3QgY29ubmVjdF9pZHNpemU7CisKKyAgICAvKiBnZXQgdGhlIHNlc3Npb24gSUQgZGF0YSBzaXplICovCisgICAgZ251dGxzX3Nlc3Npb25fZ2V0X2RhdGEoc2Vzc2lvbiwgTlVMTCwgJmNvbm5lY3RfaWRzaXplKTsKKyAgICBjb25uZWN0X3Nlc3Npb25pZCA9IG1hbGxvYyhjb25uZWN0X2lkc2l6ZSk7IC8qIGdldCBhIGJ1ZmZlciBmb3IgaXQgKi8KKworICAgIGlmKGNvbm5lY3Rfc2Vzc2lvbmlkKSB7CisgICAgICAvKiBleHRyYWN0IHNlc3Npb24gSUQgdG8gdGhlIGFsbG9jYXRlZCBidWZmZXIgKi8KKyAgICAgIGdudXRsc19zZXNzaW9uX2dldF9kYXRhKHNlc3Npb24sIGNvbm5lY3Rfc2Vzc2lvbmlkLCAmY29ubmVjdF9pZHNpemUpOworCisgICAgICBpbmNhY2hlID0gIShDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJnNzbF9zZXNzaW9uaWQsIE5VTEwpKTsKKyAgICAgIGlmKGluY2FjaGUpIHsKKyAgICAgICAgLyogdGhlcmUgd2FzIG9uZSBiZWZvcmUgaW4gdGhlIGNhY2hlLCBzbyBpbnN0ZWFkIG9mIHJpc2tpbmcgdGhhdCB0aGUKKyAgICAgICAgICAgcHJldmlvdXMgb25lIHdhcyByZWplY3RlZCwgd2UganVzdCBraWxsIHRoYXQgYW5kIHN0b3JlIHRoZSBuZXcgKi8KKyAgICAgICAgQ3VybF9zc2xfZGVsc2Vzc2lvbmlkKGNvbm4sIHNzbF9zZXNzaW9uaWQpOworICAgICAgfQorCisgICAgICAvKiBzdG9yZSB0aGlzIHNlc3Npb24gaWQgKi8KKyAgICAgIHJlc3VsdCA9IEN1cmxfc3NsX2FkZHNlc3Npb25pZChjb25uLCBjb25uZWN0X3Nlc3Npb25pZCwgY29ubmVjdF9pZHNpemUpOworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIGZyZWUoY29ubmVjdF9zZXNzaW9uaWQpOworICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIFRDUCBjb25uZWN0IGhhcyBjb21wbGV0ZWQuIFNldHVwIHRoZSBUTFMKKyAqIGxheWVyIGFuZCBkbyBhbGwgbmVjZXNzYXJ5IG1hZ2ljLgorICovCisvKiBXZSB1c2UgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB0byBrZWVwIHRyYWNrIG9mIHRoZSBjb25uZWN0aW9uIHN0YXR1czsKKyAgIHRoZXJlIGFyZSB0aHJlZSBzdGF0ZXM6ICdzc2xfY29ubmVjdF8xJyAobm90IHN0YXJ0ZWQgeWV0IG9yIGNvbXBsZXRlKSwKKyAgICdzc2xfY29ubmVjdF8yX3JlYWRpbmcnICh3YWl0aW5nIGZvciBkYXRhIGZyb20gc2VydmVyKSwgYW5kCisgICAnc3NsX2Nvbm5lY3RfMl93cml0aW5nJyAod2FpdGluZyB0byBiZSBhYmxlIHRvIHdyaXRlKS4KKyAqLworc3RhdGljIENVUkxjb2RlCitndGxzX2Nvbm5lY3RfY29tbW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBub25ibG9ja2luZywKKyAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKK3sKKyAgaW50IHJjOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKworICAvKiBJbml0aWF0ZSB0aGUgY29ubmVjdGlvbiwgaWYgbm90IGFscmVhZHkgZG9uZSAqLworICBpZihzc2xfY29ubmVjdF8xPT1jb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisgICAgcmMgPSBndGxzX2Nvbm5lY3Rfc3RlcDEgKGNvbm4sIHNvY2tpbmRleCk7CisgICAgaWYocmMpCisgICAgICByZXR1cm4gcmM7CisgIH0KKworICByYyA9IGhhbmRzaGFrZShjb25uLCBzb2NraW5kZXgsIFRSVUUsIG5vbmJsb2NraW5nKTsKKyAgaWYocmMpCisgICAgLyogaGFuZHNoYWtlKCkgc2V0cyBpdHMgb3duIGVycm9yIG1lc3NhZ2Ugd2l0aCBmYWlsZigpICovCisgICAgcmV0dXJuIHJjOworCisgIC8qIEZpbmlzaCBjb25uZWN0aW5nIG9uY2UgdGhlIGhhbmRzaGFrZSBpcyBkb25lICovCisgIGlmKHNzbF9jb25uZWN0XzE9PWNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKyAgICByYyA9IGd0bHNfY29ubmVjdF9zdGVwMyhjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJjKQorICAgICAgcmV0dXJuIHJjOworICB9CisKKyAgKmRvbmUgPSBzc2xfY29ubmVjdF8xPT1jb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworQ1VSTGNvZGUKK0N1cmxfZ3Rsc19jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICByZXR1cm4gZ3Rsc19jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIFRSVUUsIGRvbmUpOworfQorCitDVVJMY29kZQorQ3VybF9ndGxzX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKKworeworICBDVVJMY29kZSByZXRjb2RlOworICBib29sIGRvbmUgPSBGQUxTRTsKKworICByZXRjb2RlID0gZ3Rsc19jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIEZBTFNFLCAmZG9uZSk7CisgIGlmKHJldGNvZGUpCisgICAgcmV0dXJuIHJldGNvZGU7CisKKyAgREVCVUdBU1NFUlQoZG9uZSk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgc3NpemVfdCBndGxzX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQoreworICBzc2l6ZV90IHJjID0gZ251dGxzX3JlY29yZF9zZW5kKGNvbm4tPnNzbFtzb2NraW5kZXhdLnNlc3Npb24sIG1lbSwgbGVuKTsKKworICBpZihyYyA8IDAgKSB7CisgICAgKmN1cmxjb2RlID0gKHJjID09IEdOVVRMU19FX0FHQUlOKQorICAgICAgPyBDVVJMRV9BR0FJTgorICAgICAgOiBDVVJMRV9TRU5EX0VSUk9SOworCisgICAgcmMgPSAtMTsKKyAgfQorCisgIHJldHVybiByYzsKK30KKwordm9pZCBDdXJsX2d0bHNfY2xvc2VfYWxsKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICAvKiBGSVg6IG1ha2UgdGhlIE9wZW5TU0wgY29kZSBtb3JlIGdlbmVyaWMgYW5kIHVzZSBwYXJ0cyBvZiBpdCBoZXJlICovCisgICh2b2lkKWRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlX29uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgaW50IGlkeCkKK3sKKyAgaWYoY29ubi0+c3NsW2lkeF0uc2Vzc2lvbikgeworICAgIGdudXRsc19ieWUoY29ubi0+c3NsW2lkeF0uc2Vzc2lvbiwgR05VVExTX1NIVVRfUkRXUik7CisgICAgZ251dGxzX2RlaW5pdChjb25uLT5zc2xbaWR4XS5zZXNzaW9uKTsKKyAgICBjb25uLT5zc2xbaWR4XS5zZXNzaW9uID0gTlVMTDsKKyAgfQorICBpZihjb25uLT5zc2xbaWR4XS5jcmVkKSB7CisgICAgZ251dGxzX2NlcnRpZmljYXRlX2ZyZWVfY3JlZGVudGlhbHMoY29ubi0+c3NsW2lkeF0uY3JlZCk7CisgICAgY29ubi0+c3NsW2lkeF0uY3JlZCA9IE5VTEw7CisgIH0KKyNpZmRlZiBVU0VfVExTX1NSUAorICBpZihjb25uLT5zc2xbaWR4XS5zcnBfY2xpZW50X2NyZWQpIHsKKyAgICBnbnV0bHNfc3JwX2ZyZWVfY2xpZW50X2NyZWRlbnRpYWxzKGNvbm4tPnNzbFtpZHhdLnNycF9jbGllbnRfY3JlZCk7CisgICAgY29ubi0+c3NsW2lkeF0uc3JwX2NsaWVudF9jcmVkID0gTlVMTDsKKyAgfQorI2VuZGlmCit9CisKK3ZvaWQgQ3VybF9ndGxzX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKK3sKKyAgY2xvc2Vfb25lKGNvbm4sIHNvY2tpbmRleCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBzaHV0IGRvd24gdGhlIFNTTCBsYXllciBidXQga2VlcCB0aGUKKyAqIHNvY2tldCBvcGVuIChDQ0MgLSBDbGVhciBDb21tYW5kIENoYW5uZWwpCisgKi8KK2ludCBDdXJsX2d0bHNfc2h1dGRvd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBzc2l6ZV90IHJlc3VsdDsKKyAgaW50IHJldHZhbCA9IDA7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgaW50IGRvbmUgPSAwOworICBjaGFyIGJ1ZlsxMjBdOworCisgIC8qIFRoaXMgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgb24gdGhlIHByb2Z0cGQgc2VydmVyLCBhbmQgdGhlIG1vZF90bHMgY29kZQorICAgICBzZW5kcyBhIGNsb3NlIG5vdGlmeSBhbGVydCB3aXRob3V0IHdhaXRpbmcgZm9yIGEgY2xvc2Ugbm90aWZ5IGFsZXJ0IGluCisgICAgIHJlc3BvbnNlLiBUaHVzIHdlIHdhaXQgZm9yIGEgY2xvc2Ugbm90aWZ5IGFsZXJ0IGZyb20gdGhlIHNlcnZlciwgYnV0CisgICAgIHdlIGRvIG5vdCBzZW5kIG9uZS4gTGV0J3MgaG9wZSBvdGhlciBzZXJ2ZXJzIGRvIHRoZSBzYW1lLi4uICovCisKKyAgaWYoZGF0YS0+c2V0LmZ0cF9jY2MgPT0gQ1VSTEZUUFNTTF9DQ0NfQUNUSVZFKQorICAgICAgZ251dGxzX2J5ZShjb25uLT5zc2xbc29ja2luZGV4XS5zZXNzaW9uLCBHTlVUTFNfU0hVVF9XUik7CisKKyAgaWYoY29ubi0+c3NsW3NvY2tpbmRleF0uc2Vzc2lvbikgeworICAgIHdoaWxlKCFkb25lKSB7CisgICAgICBpbnQgd2hhdCA9IEN1cmxfc29ja2V0X3JlYWR5KGNvbm4tPnNvY2tbc29ja2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTF9TT0NLRVRfQkFELCBTU0xfU0hVVERPV05fVElNRU9VVCk7CisgICAgICBpZih3aGF0ID4gMCkgeworICAgICAgICAvKiBTb21ldGhpbmcgdG8gcmVhZCwgbGV0J3MgZG8gaXQgYW5kIGhvcGUgdGhhdCBpdCBpcyB0aGUgY2xvc2UKKyAgICAgICAgICAgbm90aWZ5IGFsZXJ0IGZyb20gdGhlIHNlcnZlciAqLworICAgICAgICByZXN1bHQgPSBnbnV0bHNfcmVjb3JkX3JlY3YoY29ubi0+c3NsW3NvY2tpbmRleF0uc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICBzd2l0Y2gocmVzdWx0KSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAvKiBUaGlzIGlzIHRoZSBleHBlY3RlZCByZXNwb25zZS4gVGhlcmUgd2FzIG5vIGRhdGEgYnV0IG9ubHkKKyAgICAgICAgICAgICB0aGUgY2xvc2Ugbm90aWZ5IGFsZXJ0ICovCisgICAgICAgICAgZG9uZSA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR05VVExTX0VfQUdBSU46CisgICAgICAgIGNhc2UgR05VVExTX0VfSU5URVJSVVBURUQ6CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkdOVVRMU19FX0FHQUlOIHx8IEdOVVRMU19FX0lOVEVSUlVQVEVEXG4iKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXR2YWwgPSAtMTsKKyAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZigwID09IHdoYXQpIHsKKyAgICAgICAgLyogdGltZW91dCAqLworICAgICAgICBmYWlsZihkYXRhLCAiU1NMIHNodXRkb3duIHRpbWVvdXQiKTsKKyAgICAgICAgZG9uZSA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIGFueXRoaW5nIHRoYXQgZ2V0cyBoZXJlIGlzIGZhdGFsbHkgYmFkICovCisgICAgICAgIGZhaWxmKGRhdGEsICJzZWxlY3QvcG9sbCBvbiBTU0wgc29ja2V0LCBlcnJubzogJWQiLCBTT0NLRVJSTk8pOworICAgICAgICByZXR2YWwgPSAtMTsKKyAgICAgICAgZG9uZSA9IDE7CisgICAgICB9CisgICAgfQorICAgIGdudXRsc19kZWluaXQoY29ubi0+c3NsW3NvY2tpbmRleF0uc2Vzc2lvbik7CisgIH0KKyAgZ251dGxzX2NlcnRpZmljYXRlX2ZyZWVfY3JlZGVudGlhbHMoY29ubi0+c3NsW3NvY2tpbmRleF0uY3JlZCk7CisKKyNpZmRlZiBVU0VfVExTX1NSUAorICBpZihkYXRhLT5zZXQuc3NsLmF1dGh0eXBlID09IENVUkxfVExTQVVUSF9TUlAKKyAgICAgJiYgZGF0YS0+c2V0LnNzbC51c2VybmFtZSAhPSBOVUxMKQorICAgIGdudXRsc19zcnBfZnJlZV9jbGllbnRfY3JlZGVudGlhbHMoY29ubi0+c3NsW3NvY2tpbmRleF0uc3JwX2NsaWVudF9jcmVkKTsKKyNlbmRpZgorCisgIGNvbm4tPnNzbFtzb2NraW5kZXhdLmNyZWQgPSBOVUxMOworICBjb25uLT5zc2xbc29ja2luZGV4XS5zZXNzaW9uID0gTlVMTDsKKworICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3NpemVfdCBndGxzX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtLCAgICAgICAgICAgICAgICAgIC8qIHNvY2tldGluZGV4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCAgICAgICAgICAgICAgICAvKiBzdG9yZSByZWFkIGRhdGEgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLCAgICAgICAgLyogbWF4IGFtb3VudCB0byByZWFkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQoreworICBzc2l6ZV90IHJldDsKKworICByZXQgPSBnbnV0bHNfcmVjb3JkX3JlY3YoY29ubi0+c3NsW251bV0uc2Vzc2lvbiwgYnVmLCBidWZmZXJzaXplKTsKKyAgaWYoKHJldCA9PSBHTlVUTFNfRV9BR0FJTikgfHwgKHJldCA9PSBHTlVUTFNfRV9JTlRFUlJVUFRFRCkpIHsKKyAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZihyZXQgPT0gR05VVExTX0VfUkVIQU5EU0hBS0UpIHsKKyAgICAvKiBCTE9DS0lORyBjYWxsLCB0aGlzIGlzIGJhZCBidXQgYSB3b3JrLWFyb3VuZCBmb3Igbm93LiBGaXhpbmcgdGhpcyAidGhlCisgICAgICAgcHJvcGVyIHdheSIgdGFrZXMgYSB3aG9sZSBsb3Qgb2Ygd29yay4gKi8KKyAgICBDVVJMY29kZSByYyA9IGhhbmRzaGFrZShjb25uLCBudW0sIEZBTFNFLCBGQUxTRSk7CisgICAgaWYocmMpCisgICAgICAvKiBoYW5kc2hha2UoKSB3cml0ZXMgZXJyb3IgbWVzc2FnZSBvbiBpdHMgb3duICovCisgICAgICAqY3VybGNvZGUgPSByYzsKKyAgICBlbHNlCisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsgLyogdGhlbiByZXR1cm4gYXMgaWYgdGhpcyB3YXMgYSB3b3VsZGJsb2NrICovCisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaWYocmV0IDwgMCkgeworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJHbnVUTFMgcmVjdiBlcnJvciAoJWQpOiAlcyIsCisgICAgICAgICAgKGludClyZXQsIGdudXRsc19zdHJlcnJvcigoaW50KXJldCkpOworICAgICpjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIHJldDsKK30KKwordm9pZCBDdXJsX2d0bHNfc2Vzc2lvbl9mcmVlKHZvaWQgKnB0cikKK3sKKyAgZnJlZShwdHIpOworfQorCitzaXplX3QgQ3VybF9ndGxzX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIkdudVRMUy8lcyIsIGdudXRsc19jaGVja192ZXJzaW9uKE5VTEwpKTsKK30KKworaW50IEN1cmxfZ3Rsc19zZWVkKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICAvKiB3ZSBoYXZlIHRoZSAiU1NMIGlzIHNlZWRlZCIgYm9vbGVhbiBzdGF0aWMgdG8gcHJldmVudCBtdWx0aXBsZQorICAgICB0aW1lLWNvbnN1bWluZyBzZWVkaW5ncyBpbiB2YWluICovCisgIHN0YXRpYyBib29sIHNzbF9zZWVkZWQgPSBGQUxTRTsKKworICAvKiBRdWlja2x5IGFkZCBhIGJpdCBvZiBlbnRyb3B5ICovCisjaWZuZGVmIFVTRV9HTlVUTFNfTkVUVExFCisgIGdjcnlfZmFzdF9yYW5kb21fcG9sbCgpOworI2VuZGlmCisKKyAgaWYoIXNzbF9zZWVkZWQgfHwgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1JBTkRPTV9GSUxFXSB8fAorICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfRUdEU09DS0VUXSkgeworCisgICAgLyogVE9ETzogdG8gYSBnb29kIGpvYiBzZWVkaW5nIHRoZSBSTkcKKyAgICAgICBUaGlzIG1heSBpbnZvbHZlIHRoZSBnY3J5X2NvbnRyb2wgZnVuY3Rpb24gYW5kIHRoZXNlIG9wdGlvbnM6CisgICAgICAgR0NSWUNUTF9TRVRfUkFORE9NX1NFRURfRklMRQorICAgICAgIEdDUllDVExfU0VUX1JOREVHRF9TT0NLRVQKKyAgICAqLworICAgIHNzbF9zZWVkZWQgPSBUUlVFOworICB9CisgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogVVNFX0dOVVRMUyAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2d0bHMuaCBiL2N1cmwtNy4yNS4wL2xpYi9ndGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzMTIyZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9ndGxzLmgKQEAgLTAsMCArMSw2NyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9HVExTX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfR1RMU19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfR05VVExTCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisKK2ludCBDdXJsX2d0bHNfaW5pdCh2b2lkKTsKK2ludCBDdXJsX2d0bHNfY2xlYW51cCh2b2lkKTsKK0NVUkxjb2RlIEN1cmxfZ3Rsc19jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCk7CitDVVJMY29kZSBDdXJsX2d0bHNfY29ubmVjdF9ub25ibG9ja2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSk7CisKKy8qIHRlbGwgR251VExTIHRvIGNsb3NlIGRvd24gYWxsIG9wZW4gaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvbm5lY3Rpb25zIChhbmQKKyAgIHRodXMgc2Vzc2lvbiBJRCBjYWNoaW5nIGV0YykgKi8KK3ZvaWQgQ3VybF9ndGxzX2Nsb3NlX2FsbChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisKKyAvKiBjbG9zZSBhIFNTTCBjb25uZWN0aW9uICovCit2b2lkIEN1cmxfZ3Rsc19jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpOworCit2b2lkIEN1cmxfZ3Rsc19zZXNzaW9uX2ZyZWUodm9pZCAqcHRyKTsKK3NpemVfdCBDdXJsX2d0bHNfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKK2ludCBDdXJsX2d0bHNfc2h1dGRvd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KTsKK2ludCBDdXJsX2d0bHNfc2VlZChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisKKy8qIEFQSSBzZXR1cCBmb3IgR251VExTICovCisjZGVmaW5lIGN1cmxzc2xfaW5pdCBDdXJsX2d0bHNfaW5pdAorI2RlZmluZSBjdXJsc3NsX2NsZWFudXAgQ3VybF9ndGxzX2NsZWFudXAKKyNkZWZpbmUgY3VybHNzbF9jb25uZWN0IEN1cmxfZ3Rsc19jb25uZWN0CisjZGVmaW5lIGN1cmxzc2xfY29ubmVjdF9ub25ibG9ja2luZyBDdXJsX2d0bHNfY29ubmVjdF9ub25ibG9ja2luZworI2RlZmluZSBjdXJsc3NsX3Nlc3Npb25fZnJlZSh4KSAgQ3VybF9ndGxzX3Nlc3Npb25fZnJlZSh4KQorI2RlZmluZSBjdXJsc3NsX2Nsb3NlX2FsbCBDdXJsX2d0bHNfY2xvc2VfYWxsCisjZGVmaW5lIGN1cmxzc2xfY2xvc2UgQ3VybF9ndGxzX2Nsb3NlCisjZGVmaW5lIGN1cmxzc2xfc2h1dGRvd24oeCx5KSBDdXJsX2d0bHNfc2h1dGRvd24oeCx5KQorI2RlZmluZSBjdXJsc3NsX3NldF9lbmdpbmUoeCx5KSAoeD14LCB5PXksIENVUkxFX05PVF9CVUlMVF9JTikKKyNkZWZpbmUgY3VybHNzbF9zZXRfZW5naW5lX2RlZmF1bHQoeCkgKHg9eCwgQ1VSTEVfTk9UX0JVSUxUX0lOKQorI2RlZmluZSBjdXJsc3NsX2VuZ2luZXNfbGlzdCh4KSAoeD14LCAoc3RydWN0IGN1cmxfc2xpc3QgKilOVUxMKQorI2RlZmluZSBjdXJsc3NsX3ZlcnNpb24gQ3VybF9ndGxzX3ZlcnNpb24KKyNkZWZpbmUgY3VybHNzbF9jaGVja19jeG4oeCkgKHg9eCwgLTEpCisjZGVmaW5lIGN1cmxzc2xfZGF0YV9wZW5kaW5nKHgseSkgKHg9eCwgeT15LCAwKQorCisjZW5kaWYgLyogVVNFX0dOVVRMUyAqLworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0dUTFNfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2hhc2guYyBiL2N1cmwtNy4yNS4wL2xpYi9oYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4NTE4OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9oYXNoLmMKQEAgLTAsMCArMSwzNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgImhhc2guaCIKKyNpbmNsdWRlICJsbGlzdC5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0YXRpYyB2b2lkCitoYXNoX2VsZW1lbnRfZHRvcih2b2lkICp1c2VyLCB2b2lkICplbGVtZW50KQoreworICBzdHJ1Y3QgY3VybF9oYXNoICpoID0gKHN0cnVjdCBjdXJsX2hhc2ggKikgdXNlcjsKKyAgc3RydWN0IGN1cmxfaGFzaF9lbGVtZW50ICplID0gKHN0cnVjdCBjdXJsX2hhc2hfZWxlbWVudCAqKSBlbGVtZW50OworCisgIEN1cmxfc2FmZWZyZWUoZS0+a2V5KTsKKworICBpZihlLT5wdHIpIHsKKyAgICBoLT5kdG9yKGUtPnB0cik7CisgICAgZS0+cHRyID0gTlVMTDsKKyAgfQorCisgIGUtPmtleV9sZW4gPSAwOworCisgIGZyZWUoZSk7Cit9CisKKy8qIHJldHVybiAxIG9uIGVycm9yLCAwIGlzIGZpbmUgKi8KK2ludAorQ3VybF9oYXNoX2luaXQoc3RydWN0IGN1cmxfaGFzaCAqaCwKKyAgICAgICAgICAgICAgIGludCBzbG90cywKKyAgICAgICAgICAgICAgIGhhc2hfZnVuY3Rpb24gaGZ1bmMsCisgICAgICAgICAgICAgICBjb21wX2Z1bmN0aW9uIGNvbXBhcmF0b3IsCisgICAgICAgICAgICAgICBjdXJsX2hhc2hfZHRvciBkdG9yKQoreworICBpbnQgaTsKKworICBpZighc2xvdHMgfHwgIWhmdW5jIHx8ICFjb21wYXJhdG9yIHx8IWR0b3IpIHsKKyAgICByZXR1cm4gMTsgLyogZmFpbHVyZSAqLworICB9CisKKyAgaC0+aGFzaF9mdW5jID0gaGZ1bmM7CisgIGgtPmNvbXBfZnVuYyA9IGNvbXBhcmF0b3I7CisgIGgtPmR0b3IgPSBkdG9yOworICBoLT5zaXplID0gMDsKKyAgaC0+c2xvdHMgPSBzbG90czsKKworICBoLT50YWJsZSA9IG1hbGxvYyhzbG90cyAqIHNpemVvZihzdHJ1Y3QgY3VybF9sbGlzdCAqKSk7CisgIGlmKGgtPnRhYmxlKSB7CisgICAgZm9yKGkgPSAwOyBpIDwgc2xvdHM7ICsraSkgeworICAgICAgaC0+dGFibGVbaV0gPSBDdXJsX2xsaXN0X2FsbG9jKChjdXJsX2xsaXN0X2R0b3IpIGhhc2hfZWxlbWVudF9kdG9yKTsKKyAgICAgIGlmKCFoLT50YWJsZVtpXSkgeworICAgICAgICB3aGlsZShpLS0pIHsKKyAgICAgICAgICBDdXJsX2xsaXN0X2Rlc3Ryb3koaC0+dGFibGVbaV0sIE5VTEwpOworICAgICAgICAgIGgtPnRhYmxlW2ldID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBmcmVlKGgtPnRhYmxlKTsKKyAgICAgICAgaC0+dGFibGUgPSBOVUxMOworICAgICAgICBoLT5zbG90cyA9IDA7CisgICAgICAgIHJldHVybiAxOyAvKiBmYWlsdXJlICovCisgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOyAvKiBmaW5lICovCisgIH0KKyAgZWxzZSB7CisgICAgaC0+c2xvdHMgPSAwOworICAgIHJldHVybiAxOyAvKiBmYWlsdXJlICovCisgIH0KK30KKworc3RydWN0IGN1cmxfaGFzaCAqCitDdXJsX2hhc2hfYWxsb2MoaW50IHNsb3RzLAorICAgICAgICAgICAgICAgIGhhc2hfZnVuY3Rpb24gaGZ1bmMsCisgICAgICAgICAgICAgICAgY29tcF9mdW5jdGlvbiBjb21wYXJhdG9yLAorICAgICAgICAgICAgICAgIGN1cmxfaGFzaF9kdG9yIGR0b3IpCit7CisgIHN0cnVjdCBjdXJsX2hhc2ggKmg7CisKKyAgaWYoIXNsb3RzIHx8ICFoZnVuYyB8fCAhY29tcGFyYXRvciB8fCFkdG9yKSB7CisgICAgcmV0dXJuIE5VTEw7IC8qIGZhaWx1cmUgKi8KKyAgfQorCisgIGggPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjdXJsX2hhc2gpKTsKKyAgaWYoaCkgeworICAgIGlmKEN1cmxfaGFzaF9pbml0KGgsIHNsb3RzLCBoZnVuYywgY29tcGFyYXRvciwgZHRvcikpIHsKKyAgICAgIC8qIGZhaWx1cmUgKi8KKyAgICAgIGZyZWUoaCk7CisgICAgICBoID0gTlVMTDsKKyAgICB9CisgIH0KKworICByZXR1cm4gaDsKK30KKworCisKK3N0YXRpYyBzdHJ1Y3QgY3VybF9oYXNoX2VsZW1lbnQgKgorbWtfaGFzaF9lbGVtZW50KGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleV9sZW4sIGNvbnN0IHZvaWQgKnApCit7CisgIHN0cnVjdCBjdXJsX2hhc2hfZWxlbWVudCAqaGUgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjdXJsX2hhc2hfZWxlbWVudCkpOworCisgIGlmKGhlKSB7CisgICAgdm9pZCAqZHVwa2V5ID0gbWFsbG9jKGtleV9sZW4pOworICAgIGlmKGR1cGtleSkgeworICAgICAgLyogY29weSB0aGUga2V5ICovCisgICAgICBtZW1jcHkoZHVwa2V5LCBrZXksIGtleV9sZW4pOworCisgICAgICBoZS0+a2V5ID0gZHVwa2V5OworICAgICAgaGUtPmtleV9sZW4gPSBrZXlfbGVuOworICAgICAgaGUtPnB0ciA9ICh2b2lkICopIHA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogZmFpbGVkIHRvIGR1cGxpY2F0ZSB0aGUga2V5LCBmcmVlIG1lbW9yeSBhbmQgZmFpbCAqLworICAgICAgZnJlZShoZSk7CisgICAgICBoZSA9IE5VTEw7CisgICAgfQorICB9CisgIHJldHVybiBoZTsKK30KKworI2RlZmluZSBGRVRDSF9MSVNUKHgseSx6KSB4LT50YWJsZVt4LT5oYXNoX2Z1bmMoeSwgeiwgeC0+c2xvdHMpXQorCisvKiBJbnNlcnQgdGhlIGRhdGEgaW4gdGhlIGhhc2guIElmIHRoZXJlIGFscmVhZHkgd2FzIGEgbWF0Y2ggaW4gdGhlIGhhc2gsCisgKiB0aGF0IGRhdGEgaXMgcmVwbGFjZWQuCisgKgorICogQHVuaXR0ZXN0OiAxMzA1CisgKi8KK3ZvaWQgKgorQ3VybF9oYXNoX2FkZChzdHJ1Y3QgY3VybF9oYXNoICpoLCB2b2lkICprZXksIHNpemVfdCBrZXlfbGVuLCB2b2lkICpwKQoreworICBzdHJ1Y3QgY3VybF9oYXNoX2VsZW1lbnQgICpoZTsKKyAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqbGU7CisgIHN0cnVjdCBjdXJsX2xsaXN0ICpsID0gRkVUQ0hfTElTVCAoaCwga2V5LCBrZXlfbGVuKTsKKworICBmb3IobGUgPSBsLT5oZWFkOyBsZTsgbGUgPSBsZS0+bmV4dCkgeworICAgIGhlID0gKHN0cnVjdCBjdXJsX2hhc2hfZWxlbWVudCAqKSBsZS0+cHRyOworICAgIGlmKGgtPmNvbXBfZnVuYyhoZS0+a2V5LCBoZS0+a2V5X2xlbiwga2V5LCBrZXlfbGVuKSkgeworICAgICAgQ3VybF9sbGlzdF9yZW1vdmUobCwgbGUsICh2b2lkICopaCk7CisgICAgICAtLWgtPnNpemU7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBoZSA9IG1rX2hhc2hfZWxlbWVudChrZXksIGtleV9sZW4sIHApOworICBpZihoZSkgeworICAgIGlmKEN1cmxfbGxpc3RfaW5zZXJ0X25leHQobCwgbC0+dGFpbCwgaGUpKSB7CisgICAgICArK2gtPnNpemU7CisgICAgICByZXR1cm4gcDsgLyogcmV0dXJuIHRoZSBuZXcgZW50cnkgKi8KKyAgICB9CisgICAgLyoKKyAgICAgKiBDb3VsZG4ndCBpbnNlcnQgaXQsIGRlc3Ryb3kgdGhlICdoZScgZWxlbWVudCBhbmQgdGhlIGtleSBhZ2Fpbi4gV2UKKyAgICAgKiBkb24ndCBjYWxsIGhhc2hfZWxlbWVudF9kdG9yKCkgc2luY2UgdGhhdCB3b3VsZCBhbHNvIGNhbGwgdGhlCisgICAgICogImRlc3RydWN0b3IiIGZvciB0aGUgYWN0dWFsIGRhdGEgJ3AnLiBXaGVuIHdlIGZhaWwsIHdlIHNoYWxsIG5vdCB0b3VjaAorICAgICAqIHRoYXQgZGF0YS4KKyAgICAgKi8KKyAgICBmcmVlKGhlLT5rZXkpOworICAgIGZyZWUoaGUpOworICB9CisKKyAgcmV0dXJuIE5VTEw7IC8qIGZhaWx1cmUgKi8KK30KKworLyogcmVtb3ZlIHRoZSBpZGVudGlmaWVkIGhhc2ggZW50cnksIHJldHVybnMgbm9uLXplcm8gb24gZmFpbHVyZSAqLworaW50IEN1cmxfaGFzaF9kZWxldGUoc3RydWN0IGN1cmxfaGFzaCAqaCwgdm9pZCAqa2V5LCBzaXplX3Qga2V5X2xlbikKK3sKKyAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqbGU7CisgIHN0cnVjdCBjdXJsX2hhc2hfZWxlbWVudCAgKmhlOworICBzdHJ1Y3QgY3VybF9sbGlzdCAqbCA9IEZFVENIX0xJU1QoaCwga2V5LCBrZXlfbGVuKTsKKworICBmb3IobGUgPSBsLT5oZWFkOyBsZTsgbGUgPSBsZS0+bmV4dCkgeworICAgIGhlID0gbGUtPnB0cjsKKyAgICBpZihoLT5jb21wX2Z1bmMoaGUtPmtleSwgaGUtPmtleV9sZW4sIGtleSwga2V5X2xlbikpIHsKKyAgICAgIEN1cmxfbGxpc3RfcmVtb3ZlKGwsIGxlLCAodm9pZCAqKSBoKTsKKyAgICAgIC0taC0+c2l6ZTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKwordm9pZCAqCitDdXJsX2hhc2hfcGljayhzdHJ1Y3QgY3VybF9oYXNoICpoLCB2b2lkICprZXksIHNpemVfdCBrZXlfbGVuKQoreworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpsZTsKKyAgc3RydWN0IGN1cmxfaGFzaF9lbGVtZW50ICAqaGU7CisgIHN0cnVjdCBjdXJsX2xsaXN0ICpsID0gRkVUQ0hfTElTVChoLCBrZXksIGtleV9sZW4pOworCisgIGZvcihsZSA9IGwtPmhlYWQ7IGxlOyBsZSA9IGxlLT5uZXh0KSB7CisgICAgaGUgPSBsZS0+cHRyOworICAgIGlmKGgtPmNvbXBfZnVuYyhoZS0+a2V5LCBoZS0+a2V5X2xlbiwga2V5LCBrZXlfbGVuKSkgeworICAgICAgcmV0dXJuIGhlLT5wdHI7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmIGRlZmluZWQoQUdHUkVTSVZFX1RFU1QpCit2b2lkCitDdXJsX2hhc2hfYXBwbHkoY3VybF9oYXNoICpoLCB2b2lkICp1c2VyLAorICAgICAgICAgICAgICAgIHZvaWQgKCpjYikodm9pZCAqdXNlciwgdm9pZCAqcHRyKSkKK3sKKyAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAgKmxlOworICBpbnQgICAgICAgICAgICAgICAgICBpOworCisgIGZvcihpID0gMDsgaSA8IGgtPnNsb3RzOyArK2kpIHsKKyAgICBmb3IobGUgPSAoaC0+dGFibGVbaV0pLT5oZWFkOworICAgICAgICBsZTsKKyAgICAgICAgbGUgPSBsZS0+bmV4dCkgeworICAgICAgY3VybF9oYXNoX2VsZW1lbnQgKmVsID0gbGUtPnB0cjsKKyAgICAgIGNiKHVzZXIsIGVsLT5wdHIpOworICAgIH0KKyAgfQorfQorI2VuZGlmCisKK3ZvaWQKK0N1cmxfaGFzaF9jbGVhbihzdHJ1Y3QgY3VybF9oYXNoICpoKQoreworICBpbnQgaTsKKworICBmb3IoaSA9IDA7IGkgPCBoLT5zbG90czsgKytpKSB7CisgICAgQ3VybF9sbGlzdF9kZXN0cm95KGgtPnRhYmxlW2ldLCAodm9pZCAqKSBoKTsKKyAgICBoLT50YWJsZVtpXSA9IE5VTEw7CisgIH0KKworICBmcmVlKGgtPnRhYmxlKTsKKyAgaC0+dGFibGUgPSBOVUxMOworICBoLT5zaXplID0gMDsKKyAgaC0+c2xvdHMgPSAwOworfQorCit2b2lkCitDdXJsX2hhc2hfY2xlYW5fd2l0aF9jcml0ZXJpdW0oc3RydWN0IGN1cmxfaGFzaCAqaCwgdm9pZCAqdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpjb21wKSh2b2lkICosIHZvaWQgKikpCit7CisgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmxlOworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpsbmV4dDsKKyAgc3RydWN0IGN1cmxfbGxpc3QgKmxpc3Q7CisgIGludCBpOworCisgIGlmKCFoKQorICAgIHJldHVybjsKKworICBmb3IoaSA9IDA7IGkgPCBoLT5zbG90czsgKytpKSB7CisgICAgbGlzdCA9IGgtPnRhYmxlW2ldOworICAgIGxlID0gbGlzdC0+aGVhZDsgLyogZ2V0IGZpcnN0IGxpc3QgZW50cnkgKi8KKyAgICB3aGlsZShsZSkgeworICAgICAgc3RydWN0IGN1cmxfaGFzaF9lbGVtZW50ICpoZSA9IGxlLT5wdHI7CisgICAgICBsbmV4dCA9IGxlLT5uZXh0OworICAgICAgLyogYXNrIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpZiB3ZSBzaGFsbCByZW1vdmUgdGhpcyBlbnRyeSBvciBub3QgKi8KKyAgICAgIGlmKGNvbXAodXNlciwgaGUtPnB0cikpIHsKKyAgICAgICAgQ3VybF9sbGlzdF9yZW1vdmUobGlzdCwgbGUsICh2b2lkICopIGgpOworICAgICAgICAtLWgtPnNpemU7IC8qIG9uZSBsZXNzIGVudHJ5IGluIHRoZSBoYXNoIG5vdyAqLworICAgICAgfQorICAgICAgbGUgPSBsbmV4dDsKKyAgICB9CisgIH0KK30KKwordm9pZAorQ3VybF9oYXNoX2Rlc3Ryb3koc3RydWN0IGN1cmxfaGFzaCAqaCkKK3sKKyAgaWYoIWgpCisgICAgcmV0dXJuOworCisgIEN1cmxfaGFzaF9jbGVhbihoKTsKKworICBmcmVlKGgpOworfQorCitzaXplX3QgQ3VybF9oYXNoX3N0cih2b2lkKiBrZXksIHNpemVfdCBrZXlfbGVuZ3RoLCBzaXplX3Qgc2xvdHNfbnVtKQoreworICBjb25zdCBjaGFyKiBrZXlfc3RyID0gKGNvbnN0IGNoYXIgKikga2V5OworICBjb25zdCBjaGFyICplbmQgPSBrZXlfc3RyICsga2V5X2xlbmd0aDsKKyAgdW5zaWduZWQgbG9uZyBoID0gNTM4MTsKKworICB3aGlsZShrZXlfc3RyIDwgZW5kKSB7CisgICAgaCArPSBoIDw8IDU7CisgICAgaCBePSAodW5zaWduZWQgbG9uZykgKmtleV9zdHIrKzsKKyAgfQorCisgIHJldHVybiAoaCAlIHNsb3RzX251bSk7Cit9CisKK3NpemVfdCBDdXJsX3N0cl9rZXlfY29tcGFyZSh2b2lkKmsxLCBzaXplX3Qga2V5MV9sZW4sIHZvaWQqazIsIHNpemVfdCBrZXkyX2xlbikKK3sKKyAgY2hhciAqa2V5MSA9IChjaGFyICopazE7CisgIGNoYXIgKmtleTIgPSAoY2hhciAqKWsyOworCisgIGlmKGtleTFfbGVuID09IGtleTJfbGVuICYmCisgICAgICAqa2V5MSA9PSAqa2V5MiAmJgorICAgICAgbWVtY21wKGtleTEsIGtleTIsIGtleTFfbGVuKSA9PSAwKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworI2lmIDAgLyogdXNlZnVsIGZ1bmN0aW9uIGZvciBkZWJ1Z2dpbmcgaGFzaGVzIGFuZCB0aGVpciBjb250ZW50cyAqLwordm9pZCBDdXJsX2hhc2hfcHJpbnQoc3RydWN0IGN1cmxfaGFzaCAqaCwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmdW5jKSh2b2lkICopKQoreworICBpbnQgaTsKKyAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqbGU7CisgIHN0cnVjdCBjdXJsX2xsaXN0ICpsaXN0OworICBzdHJ1Y3QgY3VybF9oYXNoX2VsZW1lbnQgICpoZTsKKyAgaWYoIWgpCisgICAgcmV0dXJuOworCisgIGZwcmludGYoc3RkZXJyLCAiPUhhc2ggZHVtcD1cbiIpOworCisgIGZvcihpID0gMDsgaSA8IGgtPnNsb3RzOyBpKyspIHsKKyAgICBsaXN0ID0gaC0+dGFibGVbaV07CisgICAgbGUgPSBsaXN0LT5oZWFkOyAvKiBnZXQgZmlyc3QgbGlzdCBlbnRyeSAqLworICAgIGlmKGxlKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImluZGV4ICVkOiIsIGkpOworICAgICAgd2hpbGUobGUpIHsKKyAgICAgICAgaGUgPSBsZS0+cHRyOworICAgICAgICBpZihmdW5jKQorICAgICAgICAgIGZ1bmMoaGUtPnB0cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiBbJXBdIiwgaGUtPnB0cik7CisgICAgICAgIGxlID0gbGUtPm5leHQ7CisgICAgICB9CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgfQorICB9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9oYXNoLmggYi9jdXJsLTcuMjUuMC9saWIvaGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5M2FhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvaGFzaC5oCkBAIC0wLDAgKzEsOTIgQEAKKyNpZm5kZWYgX19IQVNIX0gKKyNkZWZpbmUgX19IQVNIX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaW5jbHVkZSAibGxpc3QuaCIKKworLyogSGFzaCBmdW5jdGlvbiBwcm90b3R5cGUgKi8KK3R5cGVkZWYgc2l6ZV90ICgqaGFzaF9mdW5jdGlvbikgKHZvaWQqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNsb3RzX251bSk7CisKKy8qCisgICBDb21wYXJhdG9yIGZ1bmN0aW9uIHByb3RvdHlwZS4gQ29tcGFyZXMgdHdvIGtleXMuCisqLwordHlwZWRlZiBzaXplX3QgKCpjb21wX2Z1bmN0aW9uKSAodm9pZCoga2V5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXkxX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqa2V5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXkyX2xlbik7CisKK3R5cGVkZWYgdm9pZCAoKmN1cmxfaGFzaF9kdG9yKSh2b2lkICopOworCitzdHJ1Y3QgY3VybF9oYXNoIHsKKyAgc3RydWN0IGN1cmxfbGxpc3QgKip0YWJsZTsKKworICAvKiBIYXNoIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIHRoaXMgaGFzaCB0YWJsZSAqLworICBoYXNoX2Z1bmN0aW9uIGhhc2hfZnVuYzsKKworICAvKiBDb21wYXJhdG9yIGZ1bmN0aW9uIHRvIGNvbXBhcmUga2V5cyAqLworICBjb21wX2Z1bmN0aW9uIGNvbXBfZnVuYzsKKyAgY3VybF9oYXNoX2R0b3IgICBkdG9yOworICBpbnQgc2xvdHM7CisgIHNpemVfdCBzaXplOworfTsKKworc3RydWN0IGN1cmxfaGFzaF9lbGVtZW50IHsKKyAgdm9pZCAgICpwdHI7CisgIGNoYXIgICAqa2V5OworICBzaXplX3Qga2V5X2xlbjsKK307CisKKworaW50IEN1cmxfaGFzaF9pbml0KHN0cnVjdCBjdXJsX2hhc2ggKmgsCisgICAgICAgICAgICAgICAgICAgaW50IHNsb3RzLAorICAgICAgICAgICAgICAgICAgIGhhc2hfZnVuY3Rpb24gaGZ1bmMsCisgICAgICAgICAgICAgICAgICAgY29tcF9mdW5jdGlvbiBjb21wYXJhdG9yLAorICAgICAgICAgICAgICAgICAgIGN1cmxfaGFzaF9kdG9yIGR0b3IpOworCitzdHJ1Y3QgY3VybF9oYXNoICpDdXJsX2hhc2hfYWxsb2MoaW50IHNsb3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfZnVuY3Rpb24gaGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcF9mdW5jdGlvbiBjb21wYXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfaGFzaF9kdG9yIGR0b3IpOworCit2b2lkICpDdXJsX2hhc2hfYWRkKHN0cnVjdCBjdXJsX2hhc2ggKmgsIHZvaWQgKmtleSwgc2l6ZV90IGtleV9sZW4sIHZvaWQgKnApOworaW50IEN1cmxfaGFzaF9kZWxldGUoc3RydWN0IGN1cmxfaGFzaCAqaCwgdm9pZCAqa2V5LCBzaXplX3Qga2V5X2xlbik7Cit2b2lkICpDdXJsX2hhc2hfcGljayhzdHJ1Y3QgY3VybF9oYXNoICosIHZvaWQgKiBrZXksIHNpemVfdCBrZXlfbGVuKTsKK3ZvaWQgQ3VybF9oYXNoX2FwcGx5KHN0cnVjdCBjdXJsX2hhc2ggKmgsIHZvaWQgKnVzZXIsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2IpKHZvaWQgKnVzZXIsIHZvaWQgKnB0cikpOworaW50IEN1cmxfaGFzaF9jb3VudChzdHJ1Y3QgY3VybF9oYXNoICpoKTsKK3ZvaWQgQ3VybF9oYXNoX2NsZWFuKHN0cnVjdCBjdXJsX2hhc2ggKmgpOwordm9pZCBDdXJsX2hhc2hfY2xlYW5fd2l0aF9jcml0ZXJpdW0oc3RydWN0IGN1cmxfaGFzaCAqaCwgdm9pZCAqdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmNvbXApKHZvaWQgKiwgdm9pZCAqKSk7Cit2b2lkIEN1cmxfaGFzaF9kZXN0cm95KHN0cnVjdCBjdXJsX2hhc2ggKmgpOworCitzaXplX3QgQ3VybF9oYXNoX3N0cih2b2lkKiBrZXksIHNpemVfdCBrZXlfbGVuZ3RoLCBzaXplX3Qgc2xvdHNfbnVtKTsKK3NpemVfdCBDdXJsX3N0cl9rZXlfY29tcGFyZSh2b2lkKmsxLCBzaXplX3Qga2V5MV9sZW4sIHZvaWQqazIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleTJfbGVuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvaG1hYy5jIGIvY3VybC03LjI1LjAvbGliL2htYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGY2Zjc5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2htYWMuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqIFJGQzIxMDQgS2V5ZWQtSGFzaGluZyBmb3IgTWVzc2FnZSBBdXRoZW50aWNhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZuZGVmIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSAorCisjaW5jbHVkZSAiY3VybF9obWFjLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyoKKyAqIEdlbmVyaWMgSE1BQyBhbGdvcml0aG0uCisgKgorICogICBUaGlzIG1vZHVsZSBjb21wdXRlcyBITUFDIGRpZ2VzdHMgYmFzZWQgb24gYW55IGhhc2ggZnVuY3Rpb24uIFBhcmFtZXRlcnMKKyAqIGFuZCBjb21wdXRpbmcgcHJvY2VkdXJlcyBhcmUgc2V0LXVwIGR5bmFtaWNhbGx5IGF0IEhNQUMgY29tcHV0YXRpb24KKyAqIGNvbnRleHQgaW5pdGlhbGlzYXRpb24uCisgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19pcGFkID0gMHgzNjsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfb3BhZCA9IDB4NUM7CisKKworCitITUFDX2NvbnRleHQgKgorQ3VybF9ITUFDX2luaXQoY29uc3QgSE1BQ19wYXJhbXMgKiBoYXNocGFyYW1zLAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGtleSwKKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisgIHNpemVfdCBpOworICBITUFDX2NvbnRleHQgKiBjdHh0OworICB1bnNpZ25lZCBjaGFyICogaGtleTsKKyAgdW5zaWduZWQgY2hhciBiOworCisgIC8qIENyZWF0ZSBITUFDIGNvbnRleHQuICovCisgIGkgPSBzaXplb2YgKmN0eHQgKyAyICogaGFzaHBhcmFtcy0+aG1hY19jdHh0c2l6ZSArCisgICAgaGFzaHBhcmFtcy0+aG1hY19yZXN1bHRsZW47CisgIGN0eHQgPSBtYWxsb2MoaSk7CisKKyAgaWYoIWN0eHQpCisgICAgcmV0dXJuIGN0eHQ7CisKKyAgY3R4dC0+aG1hY19oYXNoID0gaGFzaHBhcmFtczsKKyAgY3R4dC0+aG1hY19oYXNoY3R4dDEgPSAodm9pZCAqKSAoY3R4dCArIDEpOworICBjdHh0LT5obWFjX2hhc2hjdHh0MiA9ICh2b2lkICopICgoY2hhciAqKSBjdHh0LT5obWFjX2hhc2hjdHh0MSArCisgICAgICBoYXNocGFyYW1zLT5obWFjX2N0eHRzaXplKTsKKworICAvKiBJZiB0aGUga2V5IGlzIHRvbyBsb25nLCByZXBsYWNlIGl0IGJ5IGl0cyBoYXNoIGRpZ2VzdC4gKi8KKyAgaWYoa2V5bGVuID4gaGFzaHBhcmFtcy0+aG1hY19tYXhrZXlsZW4pIHsKKyAgICAoKmhhc2hwYXJhbXMtPmhtYWNfaGluaXQpKGN0eHQtPmhtYWNfaGFzaGN0eHQxKTsKKyAgICAoKmhhc2hwYXJhbXMtPmhtYWNfaHVwZGF0ZSkoY3R4dC0+aG1hY19oYXNoY3R4dDEsIGtleSwga2V5bGVuKTsKKyAgICBoa2V5ID0gKHVuc2lnbmVkIGNoYXIgKikgY3R4dC0+aG1hY19oYXNoY3R4dDIgKyBoYXNocGFyYW1zLT5obWFjX2N0eHRzaXplOworICAgICgqaGFzaHBhcmFtcy0+aG1hY19oZmluYWwpKGhrZXksIGN0eHQtPmhtYWNfaGFzaGN0eHQxKTsKKyAgICBrZXkgPSBoa2V5OworICAgIGtleWxlbiA9IGhhc2hwYXJhbXMtPmhtYWNfcmVzdWx0bGVuOworICB9CisKKyAgLyogUHJpbWUgdGhlIHR3byBoYXNoIGNvbnRleHRzIHdpdGggdGhlIG1vZGlmaWVkIGtleS4gKi8KKyAgKCpoYXNocGFyYW1zLT5obWFjX2hpbml0KShjdHh0LT5obWFjX2hhc2hjdHh0MSk7CisgICgqaGFzaHBhcmFtcy0+aG1hY19oaW5pdCkoY3R4dC0+aG1hY19oYXNoY3R4dDIpOworCisgIGZvcihpID0gMDsgaSA8IGtleWxlbjsgaSsrKSB7CisgICAgYiA9ICh1bnNpZ25lZCBjaGFyKSgqa2V5IF4gaG1hY19pcGFkKTsKKyAgICAoKmhhc2hwYXJhbXMtPmhtYWNfaHVwZGF0ZSkoY3R4dC0+aG1hY19oYXNoY3R4dDEsICZiLCAxKTsKKyAgICBiID0gKHVuc2lnbmVkIGNoYXIpKCprZXkrKyBeIGhtYWNfb3BhZCk7CisgICAgKCpoYXNocGFyYW1zLT5obWFjX2h1cGRhdGUpKGN0eHQtPmhtYWNfaGFzaGN0eHQyLCAmYiwgMSk7CisgIH0KKworICBmb3IoOyBpIDwgaGFzaHBhcmFtcy0+aG1hY19tYXhrZXlsZW47IGkrKykgeworICAgICgqaGFzaHBhcmFtcy0+aG1hY19odXBkYXRlKShjdHh0LT5obWFjX2hhc2hjdHh0MSwgJmhtYWNfaXBhZCwgMSk7CisgICAgKCpoYXNocGFyYW1zLT5obWFjX2h1cGRhdGUpKGN0eHQtPmhtYWNfaGFzaGN0eHQyLCAmaG1hY19vcGFkLCAxKTsKKyAgfQorCisgIC8qIERvbmUsIHJldHVybiBwb2ludGVyIHRvIEhNQUMgY29udGV4dC4gKi8KKyAgcmV0dXJuIGN0eHQ7Cit9CisKK2ludCBDdXJsX0hNQUNfdXBkYXRlKEhNQUNfY29udGV4dCAqIGN0eHQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisgIC8qIFVwZGF0ZSBmaXJzdCBoYXNoIGNhbGN1bGF0aW9uLiAqLworICAoKmN0eHQtPmhtYWNfaGFzaC0+aG1hY19odXBkYXRlKShjdHh0LT5obWFjX2hhc2hjdHh0MSwgZGF0YSwgbGVuKTsKKyAgcmV0dXJuIDA7Cit9CisKKworaW50IEN1cmxfSE1BQ19maW5hbChITUFDX2NvbnRleHQgKiBjdHh0LCB1bnNpZ25lZCBjaGFyICogcmVzdWx0KQoreworICBjb25zdCBITUFDX3BhcmFtcyAqIGhhc2hwYXJhbXMgPSBjdHh0LT5obWFjX2hhc2g7CisKKyAgLyogRG8gbm90IGdldCByZXN1bHQgaWYgY2FsbGVkIHdpdGggYSBudWxsIHBhcmFtZXRlcjogb25seSByZWxlYXNlCisgICAgIHN0b3JhZ2UuICovCisKKyAgaWYoIXJlc3VsdCkKKyAgICByZXN1bHQgPSAodW5zaWduZWQgY2hhciAqKSBjdHh0LT5obWFjX2hhc2hjdHh0MiArCisgICAgIGN0eHQtPmhtYWNfaGFzaC0+aG1hY19jdHh0c2l6ZTsKKworICAoKmhhc2hwYXJhbXMtPmhtYWNfaGZpbmFsKShyZXN1bHQsIGN0eHQtPmhtYWNfaGFzaGN0eHQxKTsKKyAgKCpoYXNocGFyYW1zLT5obWFjX2h1cGRhdGUpKGN0eHQtPmhtYWNfaGFzaGN0eHQyLAorICAgcmVzdWx0LCBoYXNocGFyYW1zLT5obWFjX3Jlc3VsdGxlbik7CisgICgqaGFzaHBhcmFtcy0+aG1hY19oZmluYWwpKHJlc3VsdCwgY3R4dC0+aG1hY19oYXNoY3R4dDIpOworICBmcmVlKChjaGFyICopIGN0eHQpOworICByZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2hvc3Rhc3luLmMgYi9jdXJsLTcuMjUuMC9saWIvaG9zdGFzeW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzE1NjJmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2hvc3Rhc3luLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgLyogZm9yIHRoZSBjbG9zZSgpIHByb3RvICovCisjZW5kaWYKKyNpZmRlZiBfX1ZNUworI2luY2x1ZGUgPGluLmg+CisjaW5jbHVkZSA8aW5ldC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BST0NFU1NfSAorI2luY2x1ZGUgPHByb2Nlc3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaG9zdGlwLmgiCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgInNoYXJlLmgiCisjaW5jbHVkZSAic3RyZXJyb3IuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE9ubHkgZm9yIGJ1aWxkcyB1c2luZyBhc3luY2hyb25vdXMgbmFtZSByZXNvbHZlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgQ1VSTFJFU19BU1lOQ0gKKworLyoKKyAqIEN1cmxfYWRkcmluZm9fY2FsbGJhY2soKSBnZXRzIGNhbGxlZCBieSBhcmVzLCBnZXRob3N0YnluYW1lX3RocmVhZCgpCisgKiBvciBnZXRhZGRyaW5mb190aHJlYWQoKSB3aGVuIHdlIGdvdCB0aGUgbmFtZSByZXNvbHZlZCAob3Igbm90ISkuCisgKgorICogSWYgdGhlIHN0YXR1cyBhcmd1bWVudCBpcyBDVVJMX0FTWU5DX1NVQ0NFU1MsIHRoaXMgZnVuY3Rpb24gdGFrZXMKKyAqIG93bmVyc2hpcCBvZiB0aGUgQ3VybF9hZGRyaW5mbyBwYXNzZWQsIHN0b3JpbmcgdGhlIHJlc29sdmVkIGRhdGEKKyAqIGluIHRoZSBETlMgY2FjaGUuCisgKgorICogVGhlIHN0b3JhZ2Ugb3BlcmF0aW9uIGxvY2tzIGFuZCB1bmxvY2tzIHRoZSBETlMgY2FjaGUuCisgKi8KK0NVUkxjb2RlIEN1cmxfYWRkcmluZm9fY2FsbGJhY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9hZGRyaW5mbyAqYWkpCit7CisgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zID0gTlVMTDsKKyAgQ1VSTGNvZGUgcmMgPSBDVVJMRV9PSzsKKworICBjb25uLT5hc3luYy5zdGF0dXMgPSBzdGF0dXM7CisKKyAgaWYoQ1VSTF9BU1lOQ19TVUNDRVNTID09IHN0YXR1cykgeworICAgIGlmKGFpKSB7CisgICAgICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgICAgIGlmKGRhdGEtPnNoYXJlKQorICAgICAgICBDdXJsX3NoYXJlX2xvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfRE5TLCBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7CisKKyAgICAgIGRucyA9IEN1cmxfY2FjaGVfYWRkcihkYXRhLCBhaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5hc3luYy5ob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5hc3luYy5wb3J0KTsKKyAgICAgIGlmKCFkbnMpIHsKKyAgICAgICAgLyogZmFpbGVkIHRvIHN0b3JlLCBjbGVhbnVwIGFuZCByZXR1cm4gZXJyb3IgKi8KKyAgICAgICAgQ3VybF9mcmVlYWRkcmluZm8oYWkpOworICAgICAgICByYyA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNoYXJlKQorICAgICAgICBDdXJsX3NoYXJlX3VubG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9ETlMpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJjID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgIH0KKworICBjb25uLT5hc3luYy5kbnMgPSBkbnM7CisKKyAvKiBTZXQgYXN5bmMuZG9uZSBUUlVFIGxhc3QgaW4gdGhpcyBmdW5jdGlvbiBzaW5jZSBpdCBtYXkgYmUgdXNlZCBtdWx0aS0KKyAgICB0aHJlYWRlZCBhbmQgb25jZSB0aGlzIGlzIFRSVUUgdGhlIG90aGVyIHRocmVhZCBtYXkgcmVhZCBmaWVsZHMgZnJvbSB0aGUKKyAgICBhc3luYyBzdHJ1Y3QgKi8KKyAgY29ubi0+YXN5bmMuZG9uZSA9IFRSVUU7CisKKyAgLyogaXB2NDogVGhlIGlucHV0IGhvc3RlbnQgc3RydWN0IHdpbGwgYmUgZnJlZWQgYnkgYXJlcyB3aGVuIHdlIHJldHVybiBmcm9tCisgICAgIHRoaXMgZnVuY3Rpb24gKi8KKyAgcmV0dXJuIHJjOworfQorCisvKiBDYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgQ3VybF9jb25uZWN0KCkgaGFzIHJldHVybmVkIGFzeW5jPVRSVUUgYW5kCisgICB0aGVuIGEgc3VjY2Vzc2Z1bCBuYW1lIHJlc29sdmUgaGFzIGJlZW4gcmVjZWl2ZWQuCisKKyAgIE5vdGU6IHRoaXMgZnVuY3Rpb24gZGlzY29ubmVjdHMgYW5kIGZyZWVzIHRoZSBjb25uIGRhdGEgaW4gY2FzZSBvZgorICAgcmVzb2x2ZSBmYWlsdXJlICovCitDVVJMY29kZSBDdXJsX2FzeW5jX3Jlc29sdmVkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqcHJvdG9jb2xfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgY29kZTsKKworICBpZihjb25uLT5hc3luYy5kbnMpIHsKKyAgICBjb25uLT5kbnNfZW50cnkgPSBjb25uLT5hc3luYy5kbnM7CisgICAgY29ubi0+YXN5bmMuZG5zID0gTlVMTDsKKyAgfQorCisgIGNvZGUgPSBDdXJsX3NldHVwX2Nvbm4oY29ubiwgcHJvdG9jb2xfZG9uZSk7CisKKyAgaWYoY29kZSkKKyAgICAvKiBXZSdyZSBub3QgYWxsb3dlZCB0byByZXR1cm4gZmFpbHVyZSB3aXRoIG1lbW9yeSBsZWZ0IGFsbG9jYXRlZAorICAgICAgIGluIHRoZSBjb25uZWN0ZGF0YSBzdHJ1Y3QsIGZyZWUgdGhvc2UgaGVyZSAqLworICAgIEN1cmxfZGlzY29ubmVjdChjb25uLCBGQUxTRSk7IC8qIGNsb3NlIHRoZSBjb25uZWN0aW9uICovCisKKyAgcmV0dXJuIGNvZGU7Cit9CisKKy8qCisgKiBDdXJsX2dldGFkZHJpbmZvKCkgaXMgdGhlIGdlbmVyaWMgbG93LWxldmVsIG5hbWUgcmVzb2x2ZSBBUEkgd2l0aGluIHRoaXMKKyAqIHNvdXJjZSBmaWxlLiBUaGVyZSBhcmUgc2V2ZXJhbCB2ZXJzaW9ucyBvZiB0aGlzIGZ1bmN0aW9uIC0gZm9yIGRpZmZlcmVudAorICogbmFtZSByZXNvbHZlIGxheWVycyAoc2VsZWN0ZWQgYXQgYnVpbGQtdGltZSkuIFRoZXkgYWxsIHRha2UgdGhpcyBzYW1lIHNldAorICogb2YgYXJndW1lbnRzCisgKi8KK0N1cmxfYWRkcmluZm8gKkN1cmxfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApCit7CisgIHJldHVybiBDdXJsX3Jlc29sdmVyX2dldGFkZHJpbmZvKGNvbm4sIGhvc3RuYW1lLCBwb3J0LCB3YWl0cCk7Cit9CisKKyNlbmRpZiAvKiBDVVJMUkVTX0FTWU5DSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2hvc3RpcC5jIGIvY3VybC03LjI1LjAvbGliL2hvc3RpcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwM2JhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvaG9zdGlwLmMKQEAgLTAsMCArMSw4MjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgLyogZm9yIHRoZSBjbG9zZSgpIHByb3RvICovCisjZW5kaWYKKyNpZmRlZiBfX1ZNUworI2luY2x1ZGUgPGluLmg+CisjaW5jbHVkZSA8aW5ldC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NFVEpNUF9ICisjaW5jbHVkZSA8c2V0am1wLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NJR05BTF9ICisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfUFJPQ0VTU19ICisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJob3N0aXAuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAic2hhcmUuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgImluZXRfbnRvcC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2lmIGRlZmluZWQoQ1VSTFJFU19TWU5DSCkgJiYgXAorICAgIGRlZmluZWQoSEFWRV9BTEFSTSkgJiYgZGVmaW5lZChTSUdBTFJNKSAmJiBkZWZpbmVkKEhBVkVfU0lHU0VUSk1QKQorLyogYWxhcm0tYmFzZWQgdGltZW91dHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGFsbCB0aGUgZGVwZW5kZW5jaWVzIHNhdGlzZmllZCAqLworI2RlZmluZSBVU0VfQUxBUk1fVElNRU9VVAorI2VuZGlmCisKKy8qCisgKiBob3N0aXAuYyBleHBsYWluZWQKKyAqID09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoZSBtYWluIENPTVBJTEUtVElNRSBERUZJTkVTIHRvIGtlZXAgaW4gbWluZCB3aGVuIHJlYWRpbmcgdGhlIGhvc3QqLmMKKyAqIHNvdXJjZSBmaWxlIGFyZSB0aGVzZToKKyAqCisgKiBDVVJMUkVTX0lQVjYgLSB0aGlzIGhvc3QgaGFzIGdldGFkZHJpbmZvKCkgYW5kIGZhbWlseSwgYW5kIHRodXMgd2UgdXNlCisgKiB0aGF0LiBUaGUgaG9zdCBtYXkgbm90IGJlIGFibGUgdG8gcmVzb2x2ZSBJUHY2LCBidXQgd2UgZG9uJ3QgcmVhbGx5IGhhdmUgdG8KKyAqIHRha2UgdGhhdCBpbnRvIGFjY291bnQuIEhvc3RzIHRoYXQgYXJlbid0IElQdjYtZW5hYmxlZCBoYXZlIENVUkxSRVNfSVBWNAorICogZGVmaW5lZC4KKyAqCisgKiBDVVJMUkVTX0FSRVMgLSBpcyBkZWZpbmVkIGlmIGxpYmN1cmwgaXMgYnVpbHQgdG8gdXNlIGMtYXJlcyBmb3IKKyAqIGFzeW5jaHJvbm91cyBuYW1lIHJlc29sdmVzLiBUaGlzIGNhbiBiZSBXaW5kb3dzIG9yICpuaXguCisgKgorICogQ1VSTFJFU19USFJFQURFRCAtIGlzIGRlZmluZWQgaWYgbGliY3VybCBpcyBidWlsdCB0byBydW4gdW5kZXIgKG5hdGl2ZSkKKyAqIFdpbmRvd3MsIGFuZCB0aGVuIHRoZSBuYW1lIHJlc29sdmUgd2lsbCBiZSBkb25lIGluIGEgbmV3IHRocmVhZCwgYW5kIHRoZQorICogc3VwcG9ydGVkIEFQSSB3aWxsIGJlIHRoZSBzYW1lIGFzIGZvciBhcmVzLWJ1aWxkcy4KKyAqCisgKiBJZiBhbnkgb2YgdGhlIHR3byBwcmV2aW91cyBhcmUgZGVmaW5lZCwgQ1VSTFJFU19BU1lOQ0ggaXMgZGVmaW5lZCB0b28uIElmCisgKiBsaWJjdXJsIGlzIG5vdCBidWlsdCB0byB1c2UgYW4gYXN5bmNocm9ub3VzIHJlc29sdmVyLCBDVVJMUkVTX1NZTkNIIGlzCisgKiBkZWZpbmVkLgorICoKKyAqIFRoZSBob3N0Ki5jIHNvdXJjZXMgZmlsZXMgYXJlIHNwbGl0IHVwIGxpa2UgdGhpczoKKyAqCisgKiBob3N0aXAuYyAgIC0gbWV0aG9kLWluZGVwZW5kZW50IHJlc29sdmVyIGZ1bmN0aW9ucyBhbmQgdXRpbGl0eSBmdW5jdGlvbnMKKyAqIGhvc3Rhc3luLmMgLSBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBuYW1lIHJlc29sdmVzCisgKiBob3N0c3luLmMgIC0gZnVuY3Rpb25zIGZvciBzeW5jaHJvbm91cyBuYW1lIHJlc29sdmVzCisgKiBob3N0aXA0LmMgIC0gaXB2NC1zcGVjaWZpYyBmdW5jdGlvbnMKKyAqIGhvc3RpcDYuYyAgLSBpcHY2LXNwZWNpZmljIGZ1bmN0aW9ucworICoKKyAqIFRoZSB0d28gYXN5bmNocm9ub3VzIG5hbWUgcmVzb2x2ZXIgYmFja2VuZHMgYXJlIGltcGxlbWVudGVkIGluOgorICogYXN5bi1hcmVzLmMgICAtIGZ1bmN0aW9ucyBmb3IgYXJlcy11c2luZyBuYW1lIHJlc29sdmVzCisgKiBhc3luLXRocmVhZC5jIC0gZnVuY3Rpb25zIGZvciB0aHJlYWRlZCBuYW1lIHJlc29sdmVzCisKKyAqIFRoZSBob3N0aXAuaCBpcyB0aGUgdW5pdGVkIGhlYWRlciBmaWxlIGZvciBhbGwgdGhpcy4gSXQgZGVmaW5lcyB0aGUKKyAqIENVUkxSRVNfKiBkZWZpbmVzIGJhc2VkIG9uIHRoZSBjb25maWcqLmggYW5kIHNldHVwLmggZGVmaW5lcy4KKyAqLworCisvKiBUaGVzZSB0d28gc3ltYm9scyBhcmUgZm9yIHRoZSBnbG9iYWwgRE5TIGNhY2hlICovCitzdGF0aWMgc3RydWN0IGN1cmxfaGFzaCBob3N0bmFtZV9jYWNoZTsKK3N0YXRpYyBpbnQgaG9zdF9jYWNoZV9pbml0aWFsaXplZDsKKworc3RhdGljIHZvaWQgZnJlZWRuc2VudHJ5KHZvaWQgKmZyZWV0aGlzKTsKKworLyoKKyAqIEN1cmxfZ2xvYmFsX2hvc3RfY2FjaGVfaW5pdCgpIGluaXRpYWxpemVzIGFuZCBzZXRzIHVwIGEgZ2xvYmFsIEROUyBjYWNoZS4KKyAqIEdsb2JhbCBETlMgY2FjaGUgaXMgZ2VuZXJhbCBiYWRuZXNzLiBEbyBub3QgdXNlLiBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbgorICogYSBmdXR1cmUgdmVyc2lvbi4gVXNlIHRoZSBzaGFyZSBpbnRlcmZhY2UgaW5zdGVhZCEKKyAqCisgKiBSZXR1cm5zIGEgc3RydWN0IGN1cmxfaGFzaCBwb2ludGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RydWN0IGN1cmxfaGFzaCAqQ3VybF9nbG9iYWxfaG9zdF9jYWNoZV9pbml0KHZvaWQpCit7CisgIGludCByYyA9IDA7CisgIGlmKCFob3N0X2NhY2hlX2luaXRpYWxpemVkKSB7CisgICAgcmMgPSBDdXJsX2hhc2hfaW5pdCgmaG9zdG5hbWVfY2FjaGUsIDcsIEN1cmxfaGFzaF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3N0cl9rZXlfY29tcGFyZSwgZnJlZWRuc2VudHJ5KTsKKyAgICBpZighcmMpCisgICAgICBob3N0X2NhY2hlX2luaXRpYWxpemVkID0gMTsKKyAgfQorICByZXR1cm4gcmM/TlVMTDomaG9zdG5hbWVfY2FjaGU7Cit9CisKKy8qCisgKiBEZXN0cm95IGFuZCBjbGVhbnVwIHRoZSBnbG9iYWwgRE5TIGNhY2hlCisgKi8KK3ZvaWQgQ3VybF9nbG9iYWxfaG9zdF9jYWNoZV9kdG9yKHZvaWQpCit7CisgIGlmKGhvc3RfY2FjaGVfaW5pdGlhbGl6ZWQpIHsKKyAgICBDdXJsX2hhc2hfY2xlYW4oJmhvc3RuYW1lX2NhY2hlKTsKKyAgICBob3N0X2NhY2hlX2luaXRpYWxpemVkID0gMDsKKyAgfQorfQorCisvKgorICogUmV0dXJuICMgb2YgYWRyZXNzZXMgaW4gYSBDdXJsX2FkZHJpbmZvIHN0cnVjdAorICovCitpbnQgQ3VybF9udW1fYWRkcmVzc2VzKGNvbnN0IEN1cmxfYWRkcmluZm8gKmFkZHIpCit7CisgIGludCBpID0gMDsKKyAgd2hpbGUoYWRkcikgeworICAgIGFkZHIgPSBhZGRyLT5haV9uZXh0OworICAgIGkrKzsKKyAgfQorICByZXR1cm4gaTsKK30KKworLyoKKyAqIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoKSByZXR1cm5zIGEgcHJpbnRhYmxlIHZlcnNpb24gb2YgdGhlIDFzdCBhZGRyZXNzCisgKiBnaXZlbiBpbiB0aGUgJ2FpJyBhcmd1bWVudC4gVGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgYnVmIHRoYXQgaXMKKyAqIGJ1ZnNpemUgYnl0ZXMgYmlnLgorICoKKyAqIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCBpdCByZXR1cm5zIE5VTEwuCisgKi8KK2NvbnN0IGNoYXIgKgorQ3VybF9wcmludGFibGVfYWRkcmVzcyhjb25zdCBDdXJsX2FkZHJpbmZvICphaSwgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKK3sKKyAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzYTQ7CisgIGNvbnN0IHN0cnVjdCBpbl9hZGRyICppcGFkZHI0OworI2lmZGVmIEVOQUJMRV9JUFY2CisgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhNjsKKyAgY29uc3Qgc3RydWN0IGluNl9hZGRyICppcGFkZHI2OworI2VuZGlmCisKKyAgc3dpdGNoIChhaS0+YWlfZmFtaWx5KSB7CisgICAgY2FzZSBBRl9JTkVUOgorICAgICAgc2E0ID0gKGNvbnN0IHZvaWQgKilhaS0+YWlfYWRkcjsKKyAgICAgIGlwYWRkcjQgPSAmc2E0LT5zaW5fYWRkcjsKKyAgICAgIHJldHVybiBDdXJsX2luZXRfbnRvcChhaS0+YWlfZmFtaWx5LCAoY29uc3Qgdm9pZCAqKWlwYWRkcjQsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZzaXplKTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICBzYTYgPSAoY29uc3Qgdm9pZCAqKWFpLT5haV9hZGRyOworICAgICAgaXBhZGRyNiA9ICZzYTYtPnNpbjZfYWRkcjsKKyAgICAgIHJldHVybiBDdXJsX2luZXRfbnRvcChhaS0+YWlfZmFtaWx5LCAoY29uc3Qgdm9pZCAqKWlwYWRkcjYsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZzaXplKTsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJldHVybiBhIGhvc3RjYWNoZSBpZCBzdHJpbmcgZm9yIHRoZSBwcm92aWRlZCBob3N0ICsgcG9ydCwgdG8gYmUgdXNlZCBieQorICogdGhlIEROUyBjYWNoaW5nLgorICovCitzdGF0aWMgY2hhciAqCitjcmVhdGVfaG9zdGNhY2hlX2lkKGNvbnN0IGNoYXIgKm5hbWUsIGludCBwb3J0KQoreworICAvKiBjcmVhdGUgYW5kIHJldHVybiB0aGUgbmV3IGFsbG9jYXRlZCBlbnRyeSAqLworICBjaGFyICppZCA9IGFwcmludGYoIiVzOiVkIiwgbmFtZSwgcG9ydCk7CisgIGNoYXIgKnB0ciA9IGlkOworICBpZihwdHIpIHsKKyAgICAvKiBsb3dlciBjYXNlIHRoZSBuYW1lIHBhcnQgKi8KKyAgICB3aGlsZSgqcHRyICYmICgqcHRyICE9ICc6JykpIHsKKyAgICAgICpwdHIgPSAoY2hhcilUT0xPV0VSKCpwdHIpOworICAgICAgcHRyKys7CisgICAgfQorICB9CisgIHJldHVybiBpZDsKK30KKworc3RydWN0IGhvc3RjYWNoZV9wcnVuZV9kYXRhIHsKKyAgbG9uZyBjYWNoZV90aW1lb3V0OworICB0aW1lX3Qgbm93OworfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgc2V0IGFzIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGZvciBldmVyeSBlbnRyeSBpbiB0aGUgRE5TCisgKiBjYWNoZSB3aGVuIHdlIHdhbnQgdG8gcHJ1bmUgb2xkIHVudXNlZCBlbnRyaWVzLgorICoKKyAqIFJldHVybmluZyBub24temVybyBtZWFucyByZW1vdmUgdGhlIGVudHJ5LCByZXR1cm4gMCB0byBrZWVwIGl0IGluIHRoZQorICogY2FjaGUuCisgKi8KK3N0YXRpYyBpbnQKK2hvc3RjYWNoZV90aW1lc3RhbXBfcmVtb3ZlKHZvaWQgKmRhdGFwLCB2b2lkICpoYykKK3sKKyAgc3RydWN0IGhvc3RjYWNoZV9wcnVuZV9kYXRhICpkYXRhID0KKyAgICAoc3RydWN0IGhvc3RjYWNoZV9wcnVuZV9kYXRhICopIGRhdGFwOworICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmMgPSAoc3RydWN0IEN1cmxfZG5zX2VudHJ5ICopIGhjOworCisgIHJldHVybiAoZGF0YS0+bm93IC0gYy0+dGltZXN0YW1wID49IGRhdGEtPmNhY2hlX3RpbWVvdXQpOworfQorCisvKgorICogUHJ1bmUgdGhlIEROUyBjYWNoZS4gVGhpcyBhc3N1bWVzIHRoYXQgYSBsb2NrIGhhcyBhbHJlYWR5IGJlZW4gdGFrZW4uCisgKi8KK3N0YXRpYyB2b2lkCitob3N0Y2FjaGVfcHJ1bmUoc3RydWN0IGN1cmxfaGFzaCAqaG9zdGNhY2hlLCBsb25nIGNhY2hlX3RpbWVvdXQsIHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBob3N0Y2FjaGVfcHJ1bmVfZGF0YSB1c2VyOworCisgIHVzZXIuY2FjaGVfdGltZW91dCA9IGNhY2hlX3RpbWVvdXQ7CisgIHVzZXIubm93ID0gbm93OworCisgIEN1cmxfaGFzaF9jbGVhbl93aXRoX2NyaXRlcml1bShob3N0Y2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RjYWNoZV90aW1lc3RhbXBfcmVtb3ZlKTsKK30KKworLyoKKyAqIExpYnJhcnktd2lkZSBmdW5jdGlvbiBmb3IgcHJ1bmluZyB0aGUgRE5TIGNhY2hlLiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuZAorICogcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgbG9ja3MuCisgKi8KK3ZvaWQgQ3VybF9ob3N0Y2FjaGVfcHJ1bmUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIHRpbWVfdCBub3c7CisKKyAgaWYoKGRhdGEtPnNldC5kbnNfY2FjaGVfdGltZW91dCA9PSAtMSkgfHwgIWRhdGEtPmRucy5ob3N0Y2FjaGUpCisgICAgLyogY2FjaGUgZm9yZXZlciBtZWFucyBuZXZlciBwcnVuZSwgYW5kIE5VTEwgaG9zdGNhY2hlIG1lYW5zCisgICAgICAgd2UgY2FuJ3QgZG8gaXQgKi8KKyAgICByZXR1cm47CisKKyAgaWYoZGF0YS0+c2hhcmUpCisgICAgQ3VybF9zaGFyZV9sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0ROUywgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpOworCisgIHRpbWUoJm5vdyk7CisKKyAgLyogUmVtb3ZlIG91dGRhdGVkIGFuZCB1bnVzZWQgZW50cmllcyBmcm9tIHRoZSBob3N0Y2FjaGUgKi8KKyAgaG9zdGNhY2hlX3BydW5lKGRhdGEtPmRucy5ob3N0Y2FjaGUsCisgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuZG5zX2NhY2hlX3RpbWVvdXQsCisgICAgICAgICAgICAgICAgICBub3cpOworCisgIGlmKGRhdGEtPnNoYXJlKQorICAgIEN1cmxfc2hhcmVfdW5sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0ROUyk7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgZW50cnkgc2hvdWxkIGJlIHBydW5lZC4gQXNzdW1lcyBhIGxvY2tlZCBjYWNoZS4KKyAqLworc3RhdGljIGludAorcmVtb3ZlX2VudHJ5X2lmX3N0YWxlKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRucykKK3sKKyAgc3RydWN0IGhvc3RjYWNoZV9wcnVuZV9kYXRhIHVzZXI7CisKKyAgaWYoIWRucyB8fCAoZGF0YS0+c2V0LmRuc19jYWNoZV90aW1lb3V0ID09IC0xKSB8fCAhZGF0YS0+ZG5zLmhvc3RjYWNoZSkKKyAgICAvKiBjYWNoZSBmb3JldmVyIG1lYW5zIG5ldmVyIHBydW5lLCBhbmQgTlVMTCBob3N0Y2FjaGUgbWVhbnMKKyAgICAgICB3ZSBjYW4ndCBkbyBpdCAqLworICAgIHJldHVybiAwOworCisgIHRpbWUoJnVzZXIubm93KTsKKyAgdXNlci5jYWNoZV90aW1lb3V0ID0gZGF0YS0+c2V0LmRuc19jYWNoZV90aW1lb3V0OworCisgIGlmKCFob3N0Y2FjaGVfdGltZXN0YW1wX3JlbW92ZSgmdXNlcixkbnMpICkKKyAgICByZXR1cm4gMDsKKworICBDdXJsX2hhc2hfY2xlYW5fd2l0aF9jcml0ZXJpdW0oZGF0YS0+ZG5zLmhvc3RjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICZ1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdGNhY2hlX3RpbWVzdGFtcF9yZW1vdmUpOworCisgIHJldHVybiAxOworfQorCisKKyNpZmRlZiBIQVZFX1NJR1NFVEpNUAorLyogQmV3YXJlIHRoaXMgaXMgYSBnbG9iYWwgYW5kIHVuaXF1ZSBpbnN0YW5jZS4gVGhpcyBpcyB1c2VkIHRvIHN0b3JlIHRoZQorICAgcmV0dXJuIGFkZHJlc3MgdGhhdCB3ZSBjYW4ganVtcCBiYWNrIHRvIGZyb20gaW5zaWRlIGEgc2lnbmFsIGhhbmRsZXIuIFRoaXMKKyAgIGlzIG5vdCB0aHJlYWQtc2FmZSBzdHVmZi4gKi8KK3NpZ2ptcF9idWYgY3VybF9qbXBlbnY7CisjZW5kaWYKKworCisvKgorICogQ3VybF9jYWNoZV9hZGRyKCkgc3RvcmVzIGEgJ0N1cmxfYWRkcmluZm8nIHN0cnVjdCBpbiB0aGUgRE5TIGNhY2hlLgorICoKKyAqIFdoZW4gY2FsbGluZyBDdXJsX3Jlc29sdigpIGhhcyByZXN1bHRlZCBpbiBhIHJlc3BvbnNlIHdpdGggYSByZXR1cm5lZAorICogYWRkcmVzcywgd2UgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgZG5zCisgKiBjYWNoZSBldGMKKyAqCisgKiBSZXR1cm5zIHRoZSBDdXJsX2Ruc19lbnRyeSBlbnRyeSBwb2ludGVyIG9yIE5VTEwgaWYgdGhlIHN0b3JhZ2UgZmFpbGVkLgorICovCitzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKgorQ3VybF9jYWNoZV9hZGRyKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgIEN1cmxfYWRkcmluZm8gKmFkZHIsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgaW50IHBvcnQpCit7CisgIGNoYXIgKmVudHJ5X2lkOworICBzaXplX3QgZW50cnlfbGVuOworICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRuczsKKyAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnMyOworCisgIC8qIENyZWF0ZSBhbiBlbnRyeSBpZCwgYmFzZWQgdXBvbiB0aGUgaG9zdG5hbWUgYW5kIHBvcnQgKi8KKyAgZW50cnlfaWQgPSBjcmVhdGVfaG9zdGNhY2hlX2lkKGhvc3RuYW1lLCBwb3J0KTsKKyAgLyogSWYgd2UgY2FuJ3QgY3JlYXRlIHRoZSBlbnRyeSBpZCwgZmFpbCAqLworICBpZighZW50cnlfaWQpCisgICAgcmV0dXJuIE5VTEw7CisgIGVudHJ5X2xlbiA9IHN0cmxlbihlbnRyeV9pZCk7CisKKyAgLyogQ3JlYXRlIGEgbmV3IGNhY2hlIGVudHJ5ICovCisgIGRucyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IEN1cmxfZG5zX2VudHJ5KSk7CisgIGlmKCFkbnMpIHsKKyAgICBmcmVlKGVudHJ5X2lkKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGRucy0+aW51c2UgPSAwOyAgIC8qIGluaXQgdG8gbm90IHVzZWQgKi8KKyAgZG5zLT5hZGRyID0gYWRkcjsgLyogdGhpcyBpcyB0aGUgYWRkcmVzcyhlcykgKi8KKyAgdGltZSgmZG5zLT50aW1lc3RhbXApOworICBpZihkbnMtPnRpbWVzdGFtcCA9PSAwKQorICAgIGRucy0+dGltZXN0YW1wID0gMTsgICAvKiB6ZXJvIGluZGljYXRlcyB0aGF0IGVudHJ5IGlzbid0IGluIGhhc2ggdGFibGUgKi8KKworICAvKiBTdG9yZSB0aGUgcmVzb2x2ZWQgZGF0YSBpbiBvdXIgRE5TIGNhY2hlLiAqLworICBkbnMyID0gQ3VybF9oYXNoX2FkZChkYXRhLT5kbnMuaG9zdGNhY2hlLCBlbnRyeV9pZCwgZW50cnlfbGVuKzEsCisgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopZG5zKTsKKyAgaWYoIWRuczIpIHsKKyAgICBmcmVlKGRucyk7CisgICAgZnJlZShlbnRyeV9pZCk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBkbnMgPSBkbnMyOworICBkbnMtPmludXNlKys7ICAgICAgICAgLyogbWFyayBlbnRyeSBhcyBpbi11c2UgKi8KKworICAvKiBmcmVlIHRoZSBhbGxvY2F0ZWQgZW50cnlfaWQgKi8KKyAgZnJlZShlbnRyeV9pZCk7CisKKyAgcmV0dXJuIGRuczsKK30KKworLyoKKyAqIEN1cmxfcmVzb2x2KCkgaXMgdGhlIG1haW4gbmFtZSByZXNvbHZlIGZ1bmN0aW9uIHdpdGhpbiBsaWJjdXJsLiBJdCByZXNvbHZlcworICogYSBuYW1lIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZW50cnkgaW4gdGhlICdlbnRyeScgYXJndW1lbnQgKGlmIG9uZQorICogaXMgcHJvdmlkZWQpLiBUaGlzIGZ1bmN0aW9uIG1pZ2h0IHJldHVybiBpbW1lZGlhdGVseSBpZiB3ZSdyZSB1c2luZyBhc3luY2gKKyAqIHJlc29sdmVzLiBTZWUgdGhlIHJldHVybiBjb2Rlcy4KKyAqCisgKiBUaGUgY2FjaGUgZW50cnkgd2UgcmV0dXJuIHdpbGwgZ2V0IGl0cyAnaW51c2UnIGNvdW50ZXIgaW5jcmVhc2VkIHdoZW4gdGhpcworICogZnVuY3Rpb24gaXMgdXNlZC4gWW91IE1VU1QgY2FsbCBDdXJsX3Jlc29sdl91bmxvY2soKSBsYXRlciAod2hlbiB5b3UncmUKKyAqIGRvbmUgdXNpbmcgdGhpcyBzdHJ1Y3QpIHRvIGRlY3JlYXNlIHRoZSBjb3VudGVyIGFnYWluLgorICoKKyAqIEluIGRlYnVnIG1vZGUsIHdlIHNwZWNpZmljYWxseSB0ZXN0IGZvciBhbiBpbnRlcmZhY2UgbmFtZSAiTG9jYWxIb3N0IgorICogYW5kIHJlc29sdmUgImxvY2FsaG9zdCIgaW5zdGVhZCBhcyBhIG1lYW5zIHRvIHBlcm1pdCB0ZXN0IGNhc2VzCisgKiB0byBjb25uZWN0IHRvIGEgbG9jYWwgdGVzdCBzZXJ2ZXIgd2l0aCBhbnkgaG9zdCBuYW1lLgorICoKKyAqIFJldHVybiBjb2RlczoKKyAqCisgKiBDVVJMUkVTT0xWX0VSUk9SICAgKC0xKSA9IGVycm9yLCBubyBwb2ludGVyCisgKiBDVVJMUkVTT0xWX1JFU09MVkVEICgwKSA9IE9LLCBwb2ludGVyIHByb3ZpZGVkCisgKiBDVVJMUkVTT0xWX1BFTkRJTkcgICgxKSA9IHdhaXRpbmcgZm9yIHJlc3BvbnNlLCBubyBwb2ludGVyCisgKi8KKworaW50IEN1cmxfcmVzb2x2KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKiplbnRyeSkKK3sKKyAgY2hhciAqZW50cnlfaWQgPSBOVUxMOworICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRucyA9IE5VTEw7CisgIHNpemVfdCBlbnRyeV9sZW47CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBpbnQgcmMgPSBDVVJMUkVTT0xWX0VSUk9SOyAvKiBkZWZhdWx0IHRvIGZhaWx1cmUgKi8KKworICAqZW50cnkgPSBOVUxMOworCisgIC8qIENyZWF0ZSBhbiBlbnRyeSBpZCwgYmFzZWQgdXBvbiB0aGUgaG9zdG5hbWUgYW5kIHBvcnQgKi8KKyAgZW50cnlfaWQgPSBjcmVhdGVfaG9zdGNhY2hlX2lkKGhvc3RuYW1lLCBwb3J0KTsKKyAgLyogSWYgd2UgY2FuJ3QgY3JlYXRlIHRoZSBlbnRyeSBpZCwgZmFpbCAqLworICBpZighZW50cnlfaWQpCisgICAgcmV0dXJuIHJjOworCisgIGVudHJ5X2xlbiA9IHN0cmxlbihlbnRyeV9pZCk7CisKKyAgaWYoZGF0YS0+c2hhcmUpCisgICAgQ3VybF9zaGFyZV9sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0ROUywgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpOworCisgIC8qIFNlZSBpZiBpdHMgYWxyZWFkeSBpbiBvdXIgZG5zIGNhY2hlICovCisgIGRucyA9IEN1cmxfaGFzaF9waWNrKGRhdGEtPmRucy5ob3N0Y2FjaGUsIGVudHJ5X2lkLCBlbnRyeV9sZW4rMSk7CisKKyAgLyogZnJlZSB0aGUgYWxsb2NhdGVkIGVudHJ5X2lkIGFnYWluICovCisgIGZyZWUoZW50cnlfaWQpOworCisgIC8qIFNlZSB3aGV0aGVyIHRoZSByZXR1cm5lZCBlbnRyeSBpcyBzdGFsZS4gRG9uZSBiZWZvcmUgd2UgcmVsZWFzZSBsb2NrICovCisgIGlmKHJlbW92ZV9lbnRyeV9pZl9zdGFsZShkYXRhLCBkbnMpKQorICAgIGRucyA9IE5VTEw7IC8qIHRoZSBtZW1vcnkgZGVhbGxvY2F0aW9uIGlzIGJlaW5nIGhhbmRsZWQgYnkgdGhlIGhhc2ggKi8KKworICBpZihkbnMpIHsKKyAgICBkbnMtPmludXNlKys7IC8qIHdlIHVzZSBpdCEgKi8KKyAgICByYyA9IENVUkxSRVNPTFZfUkVTT0xWRUQ7CisgIH0KKworICBpZihkYXRhLT5zaGFyZSkKKyAgICBDdXJsX3NoYXJlX3VubG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9ETlMpOworCisgIGlmKCFkbnMpIHsKKyAgICAvKiBUaGUgZW50cnkgd2FzIG5vdCBpbiB0aGUgY2FjaGUuIFJlc29sdmUgaXQgdG8gSVAgYWRkcmVzcyAqLworCisgICAgQ3VybF9hZGRyaW5mbyAqYWRkcjsKKyAgICBpbnQgcmVzcHdhaXQ7CisKKyAgICAvKiBDaGVjayB3aGF0IElQIHNwZWNpZmljcyB0aGUgYXBwIGhhcyByZXF1ZXN0ZWQgYW5kIGlmIHdlIGNhbiBwcm92aWRlIGl0LgorICAgICAqIElmIG5vdCwgYmFpbCBvdXQuICovCisgICAgaWYoIUN1cmxfaXB2YWxpZChjb25uKSkKKyAgICAgIHJldHVybiBDVVJMUkVTT0xWX0VSUk9SOworCisgICAgLyogSWYgQ3VybF9nZXRhZGRyaW5mbygpIHJldHVybnMgTlVMTCwgJ3Jlc3B3YWl0JyBtaWdodCBiZSBzZXQgdG8gYQorICAgICAgIG5vbi16ZXJvIHZhbHVlIGluZGljYXRpbmcgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSByZXNwb25zZSB0byB0aGUKKyAgICAgICByZXNvbHZlIGNhbGwgKi8KKyAgICBhZGRyID0gQ3VybF9nZXRhZGRyaW5mbyhjb25uLAorI2lmZGVmIERFQlVHQlVJTEQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LnN0cltTVFJJTkdfREVWSUNFXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhc3RyY21wKGRhdGEtPnNldC5zdHJbU1RSSU5HX0RFVklDRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2FsSG9zdCIpKT8ibG9jYWxob3N0IjoKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLCBwb3J0LCAmcmVzcHdhaXQpOworCisgICAgaWYoIWFkZHIpIHsKKyAgICAgIGlmKHJlc3B3YWl0KSB7CisgICAgICAgIC8qIHRoZSByZXNwb25zZSB0byBvdXIgcmVzb2x2ZSBjYWxsIHdpbGwgY29tZSBhc3luY2hyb25vdXNseSBhdAorICAgICAgICAgICBhIGxhdGVyIHRpbWUsIGdvb2Qgb3IgYmFkICovCisgICAgICAgIC8qIEZpcnN0LCBjaGVjayB0aGF0IHdlIGhhdmVuJ3QgcmVjZWl2ZWQgdGhlIGluZm8gYnkgbm93ICovCisgICAgICAgIHJlc3VsdCA9IEN1cmxfcmVzb2x2ZXJfaXNfcmVzb2x2ZWQoY29ubiwgJmRucyk7CisgICAgICAgIGlmKHJlc3VsdCkgLyogZXJyb3IgZGV0ZWN0ZWQgKi8KKyAgICAgICAgICByZXR1cm4gQ1VSTFJFU09MVl9FUlJPUjsKKyAgICAgICAgaWYoZG5zKQorICAgICAgICAgIHJjID0gQ1VSTFJFU09MVl9SRVNPTFZFRDsgLyogcG9pbnRlciBwcm92aWRlZCAqLworICAgICAgICBlbHNlCisgICAgICAgICAgcmMgPSBDVVJMUkVTT0xWX1BFTkRJTkc7IC8qIG5vIGluZm8geWV0ICovCisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYoZGF0YS0+c2hhcmUpCisgICAgICAgIEN1cmxfc2hhcmVfbG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9ETlMsIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKTsKKworICAgICAgLyogd2UgZ290IGEgcmVzcG9uc2UsIHN0b3JlIGl0IGluIHRoZSBjYWNoZSAqLworICAgICAgZG5zID0gQ3VybF9jYWNoZV9hZGRyKGRhdGEsIGFkZHIsIGhvc3RuYW1lLCBwb3J0KTsKKworICAgICAgaWYoZGF0YS0+c2hhcmUpCisgICAgICAgIEN1cmxfc2hhcmVfdW5sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0ROUyk7CisKKyAgICAgIGlmKCFkbnMpCisgICAgICAgIC8qIHJldHVybmVkIGZhaWx1cmUsIGJhaWwgb3V0IG5pY2VseSAqLworICAgICAgICBDdXJsX2ZyZWVhZGRyaW5mbyhhZGRyKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmMgPSBDVVJMUkVTT0xWX1JFU09MVkVEOworICAgIH0KKyAgfQorCisgICplbnRyeSA9IGRuczsKKworICByZXR1cm4gcmM7Cit9CisKKyNpZmRlZiBVU0VfQUxBUk1fVElNRU9VVAorLyoKKyAqIFRoaXMgc2lnbmFsIGhhbmRsZXIganVtcHMgYmFjayBpbnRvIHRoZSBtYWluIGxpYmN1cmwgY29kZSBhbmQgY29udGludWVzCisgKiBleGVjdXRpb24uICBUaGlzIGVmZmVjdGl2ZWx5IGNhdXNlcyB0aGUgcmVtYWluZGVyIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBydW4KKyAqIHdpdGhpbiBhIHNpZ25hbCBoYW5kbGVyIHdoaWNoIGlzIG5vbnBvcnRhYmxlIGFuZCBjb3VsZCBsZWFkIHRvIHByb2JsZW1zLgorICovCitzdGF0aWMKK1JFVFNJR1RZUEUgYWxhcm1mdW5jKGludCBzaWcpCit7CisgIC8qIHRoaXMgaXMgZm9yICItYW5zaSAtV2FsbCAtcGVkYW50aWMiIHRvIHN0b3AgY29tcGxhaW5pbmchICAgKHJhYmUpICovCisgICh2b2lkKXNpZzsKKyAgc2lnbG9uZ2ptcChjdXJsX2ptcGVudiwgMSk7CisgIHJldHVybjsKK30KKyNlbmRpZiAvKiBVU0VfQUxBUk1fVElNRU9VVCAqLworCisvKgorICogQ3VybF9yZXNvbHZfdGltZW91dCgpIGlzIHRoZSBzYW1lIGFzIEN1cmxfcmVzb2x2KCkgYnV0IHNwZWNpZmllcyBhCisgKiB0aW1lb3V0LiAgVGhpcyBmdW5jdGlvbiBtaWdodCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgd2UncmUgdXNpbmcgYXN5bmNoCisgKiByZXNvbHZlcy4gU2VlIHRoZSByZXR1cm4gY29kZXMuCisgKgorICogVGhlIGNhY2hlIGVudHJ5IHdlIHJldHVybiB3aWxsIGdldCBpdHMgJ2ludXNlJyBjb3VudGVyIGluY3JlYXNlZCB3aGVuIHRoaXMKKyAqIGZ1bmN0aW9uIGlzIHVzZWQuIFlvdSBNVVNUIGNhbGwgQ3VybF9yZXNvbHZfdW5sb2NrKCkgbGF0ZXIgKHdoZW4geW91J3JlCisgKiBkb25lIHVzaW5nIHRoaXMgc3RydWN0KSB0byBkZWNyZWFzZSB0aGUgY291bnRlciBhZ2Fpbi4KKyAqCisgKiBJZiBidWlsdCB3aXRoIGEgc3luY2hyb25vdXMgcmVzb2x2ZXIgYW5kIHVzZSBvZiBzaWduYWxzIGlzIG5vdAorICogZGlzYWJsZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGVuIGEgbm9uemVybyB0aW1lb3V0IHdpbGwgY2F1c2UgYQorICogdGltZW91dCBhZnRlciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMuIE90aGVyd2lzZSwgdGltZW91dAorICogaXMgaWdub3JlZC4KKyAqCisgKiBSZXR1cm4gY29kZXM6CisgKgorICogQ1VSTFJFU09MVl9USU1FRE9VVCgtMikgPSB3YXJuaW5nLCB0aW1lIHRvbyBzaG9ydCBvciBwcmV2aW91cyBhbGFybSBleHBpcmVkCisgKiBDVVJMUkVTT0xWX0VSUk9SICAgKC0xKSA9IGVycm9yLCBubyBwb2ludGVyCisgKiBDVVJMUkVTT0xWX1JFU09MVkVEICgwKSA9IE9LLCBwb2ludGVyIHByb3ZpZGVkCisgKiBDVVJMUkVTT0xWX1BFTkRJTkcgICgxKSA9IHdhaXRpbmcgZm9yIHJlc3BvbnNlLCBubyBwb2ludGVyCisgKi8KKworaW50IEN1cmxfcmVzb2x2X3RpbWVvdXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lb3V0bXMpCit7CisjaWZkZWYgVVNFX0FMQVJNX1RJTUVPVVQKKyNpZmRlZiBIQVZFX1NJR0FDVElPTgorICBzdHJ1Y3Qgc2lnYWN0aW9uIGtlZXBfc2lnYWN0OyAgIC8qIHN0b3JlIHRoZSBvbGQgc3RydWN0IGhlcmUgKi8KKyAgdm9sYXRpbGUgYm9vbCBrZWVwX2NvcHlzaWcgPSBGQUxTRTsgLyogd2V0aGVyIG9sZCBzaWdhY3QgaGFzIGJlZW4gc2F2ZWQgKi8KKyAgc3RydWN0IHNpZ2FjdGlvbiBzaWdhY3Q7CisjZWxzZQorI2lmZGVmIEhBVkVfU0lHTkFMCisgIHZvaWQgKCprZWVwX3NpZ2FjdCkoaW50KTsgICAgICAgLyogc3RvcmUgdGhlIG9sZCBoYW5kbGVyIGhlcmUgKi8KKyNlbmRpZiAvKiBIQVZFX1NJR05BTCAqLworI2VuZGlmIC8qIEhBVkVfU0lHQUNUSU9OICovCisgIHZvbGF0aWxlIGxvbmcgdGltZW91dDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHByZXZfYWxhcm0gPSAwOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisjZW5kaWYgLyogVVNFX0FMQVJNX1RJTUVPVVQgKi8KKyAgaW50IHJjOworCisgICplbnRyeSA9IE5VTEw7CisKKyAgaWYodGltZW91dG1zIDwgMCkKKyAgICAvKiBnb3QgYW4gYWxyZWFkeSBleHBpcmVkIHRpbWVvdXQgKi8KKyAgICByZXR1cm4gQ1VSTFJFU09MVl9USU1FRE9VVDsKKworI2lmZGVmIFVTRV9BTEFSTV9USU1FT1VUCisgIGlmKGRhdGEtPnNldC5ub19zaWduYWwpCisgICAgLyogSWdub3JlIHRoZSB0aW1lb3V0IHdoZW4gc2lnbmFscyBhcmUgZGlzYWJsZWQgKi8KKyAgICB0aW1lb3V0ID0gMDsKKyAgZWxzZQorICAgIHRpbWVvdXQgPSB0aW1lb3V0bXM7CisKKyAgaWYoIXRpbWVvdXQpCisgICAgLyogVVNFX0FMQVJNX1RJTUVPVVQgZGVmaW5lZCwgYnV0IG5vIHRpbWVvdXQgYWN0dWFsbHkgcmVxdWVzdGVkICovCisgICAgcmV0dXJuIEN1cmxfcmVzb2x2KGNvbm4sIGhvc3RuYW1lLCBwb3J0LCBlbnRyeSk7CisKKyAgaWYodGltZW91dCA8IDEwMDApCisgICAgLyogVGhlIGFsYXJtKCkgZnVuY3Rpb24gb25seSBwcm92aWRlcyBpbnRlZ2VyIHNlY29uZCByZXNvbHV0aW9uLCBzbyBpZgorICAgICAgIHdlIHdhbnQgdG8gd2FpdCBsZXNzIHRoYW4gb25lIHNlY29uZCB3ZSBtdXN0IGJhaWwgb3V0IGFscmVhZHkgbm93LiAqLworICAgIHJldHVybiBDVVJMUkVTT0xWX1RJTUVET1VUOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIFNldCBzaWduYWwgaGFuZGxlciB0byBjYXRjaCBTSUdBTFJNCisgICAqIFN0b3JlIHRoZSBvbGQgdmFsdWUgdG8gYmUgYWJsZSB0byBzZXQgaXQgYmFjayBsYXRlciEKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgSEFWRV9TSUdBQ1RJT04KKyAgc2lnYWN0aW9uKFNJR0FMUk0sIE5VTEwsICZzaWdhY3QpOworICBrZWVwX3NpZ2FjdCA9IHNpZ2FjdDsKKyAga2VlcF9jb3B5c2lnID0gVFJVRTsgLyogeWVzLCB3ZSBoYXZlIGEgY29weSAqLworICBzaWdhY3Quc2FfaGFuZGxlciA9IGFsYXJtZnVuYzsKKyNpZmRlZiBTQV9SRVNUQVJUCisgIC8qIEhQVVggZG9lc24ndCBoYXZlIFNBX1JFU1RBUlQgYnV0IGRlZmF1bHRzIHRvIHRoYXQgYmVoYXZpb3VyISAqLworICBzaWdhY3Quc2FfZmxhZ3MgJj0gflNBX1JFU1RBUlQ7CisjZW5kaWYKKyAgLyogbm93IHNldCB0aGUgbmV3IHN0cnVjdCAqLworICBzaWdhY3Rpb24oU0lHQUxSTSwgJnNpZ2FjdCwgTlVMTCk7CisjZWxzZSAvKiBIQVZFX1NJR0FDVElPTiAqLworICAvKiBubyBzaWdhY3Rpb24oKSwgcmV2ZXJ0IHRvIHRoZSBtdWNoIGxhbWVyIHNpZ25hbCgpICovCisjaWZkZWYgSEFWRV9TSUdOQUwKKyAga2VlcF9zaWdhY3QgPSBzaWduYWwoU0lHQUxSTSwgYWxhcm1mdW5jKTsKKyNlbmRpZgorI2VuZGlmIC8qIEhBVkVfU0lHQUNUSU9OICovCisKKyAgLyogYWxhcm0oKSBtYWtlcyBhIHNpZ25hbCBnZXQgc2VudCB3aGVuIHRoZSB0aW1lb3V0IGZpcmVzIG9mZiwgYW5kIHRoYXQKKyAgICAgd2lsbCBhYm9ydCBzeXN0ZW0gY2FsbHMgKi8KKyAgcHJldl9hbGFybSA9IGFsYXJtKGN1cmx4X3NsdG91aSh0aW1lb3V0LzEwMDBMKSk7CisKKyAgLyogVGhpcyBhbGxvd3MgdXMgdG8gdGltZS1vdXQgZnJvbSB0aGUgbmFtZSByZXNvbHZlciwgYXMgdGhlIHRpbWVvdXQKKyAgICAgd2lsbCBnZW5lcmF0ZSBhIHNpZ25hbCBhbmQgd2Ugd2lsbCBzaWdsb25nam1wKCkgZnJvbSB0aGF0IGhlcmUuCisgICAgIFRoaXMgdGVjaG5pcXVlIGhhcyBwcm9ibGVtcyAoc2VlIGFsYXJtZnVuYykuCisgICAgIFRoaXMgc2hvdWxkIGJlIHRoZSBsYXN0IHRoaW5nIHdlIGRvIGJlZm9yZSBjYWxsaW5nIEN1cmxfcmVzb2x2KCksCisgICAgIGFzIG90aGVyd2lzZSB3ZSdkIGhhdmUgdG8gd29ycnkgYWJvdXQgdmFyaWFibGVzIHRoYXQgZ2V0IG1vZGlmaWVkCisgICAgIGJlZm9yZSB3ZSBpbnZva2UgQ3VybF9yZXNvbHYoKSAoYW5kIHRodXMgdXNlICJ2b2xhdGlsZSIpLiAqLworICBpZihzaWdzZXRqbXAoY3VybF9qbXBlbnYsIDEpKSB7CisgICAgLyogdGhpcyBpcyBjb21pbmcgZnJvbSBhIHNpZ2xvbmdqbXAoKSBhZnRlciBhbiBhbGFybSBzaWduYWwgKi8KKyAgICBmYWlsZihkYXRhLCAibmFtZSBsb29rdXAgdGltZWQgb3V0Iik7CisgICAgcmMgPSBDVVJMUkVTT0xWX0VSUk9SOworICAgIGdvdG8gY2xlYW5fdXA7CisgIH0KKworI2Vsc2UKKyNpZm5kZWYgQ1VSTFJFU19BU1lOQ0gKKyAgaWYodGltZW91dG1zKQorICAgIGluZm9mKGNvbm4tPmRhdGEsICJ0aW1lb3V0IG9uIG5hbWUgbG9va3VwIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworI2Vsc2UKKyAgKHZvaWQpdGltZW91dG1zOyAvKiB0aW1lb3V0bXMgbm90IHVzZWQgd2l0aCBhbiBhc3luYyByZXNvbHZlciAqLworI2VuZGlmCisjZW5kaWYgLyogVVNFX0FMQVJNX1RJTUVPVVQgKi8KKworICAvKiBQZXJmb3JtIHRoZSBhY3R1YWwgbmFtZSByZXNvbHV0aW9uLiBUaGlzIG1pZ2h0IGJlIGludGVycnVwdGVkIGJ5IGFuCisgICAqIGFsYXJtIGlmIGl0IHRha2VzIHRvbyBsb25nLgorICAgKi8KKyAgcmMgPSBDdXJsX3Jlc29sdihjb25uLCBob3N0bmFtZSwgcG9ydCwgZW50cnkpOworCisjaWZkZWYgVVNFX0FMQVJNX1RJTUVPVVQKK2NsZWFuX3VwOgorCisgIGlmKCFwcmV2X2FsYXJtKQorICAgIC8qIGRlYWN0aXZhdGUgYSBwb3NzaWJseSBhY3RpdmUgYWxhcm0gYmVmb3JlIHVuaW5zdGFsbGluZyB0aGUgaGFuZGxlciAqLworICAgIGFsYXJtKDApOworCisjaWZkZWYgSEFWRV9TSUdBQ1RJT04KKyAgaWYoa2VlcF9jb3B5c2lnKSB7CisgICAgLyogd2UgZ290IGEgc3RydWN0IGFzIGl0IGxvb2tlZCBiZWZvcmUsIG5vdyBwdXQgdGhhdCBvbmUgYmFjayBuaWNlCisgICAgICAgYW5kIGNsZWFuICovCisgICAgc2lnYWN0aW9uKFNJR0FMUk0sICZrZWVwX3NpZ2FjdCwgTlVMTCk7IC8qIHB1dCBpdCBiYWNrICovCisgIH0KKyNlbHNlCisjaWZkZWYgSEFWRV9TSUdOQUwKKyAgLyogcmVzdG9yZSB0aGUgcHJldmlvdXMgU0lHQUxSTSBoYW5kbGVyICovCisgIHNpZ25hbChTSUdBTFJNLCBrZWVwX3NpZ2FjdCk7CisjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX1NJR0FDVElPTiAqLworCisgIC8qIHN3aXRjaCBiYWNrIHRoZSBhbGFybSgpIHRvIGVpdGhlciB6ZXJvIG9yIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSBtaW51cworICAgICB0aGUgdGltZSB3ZSBzcGVudCB1bnRpbCBub3chICovCisgIGlmKHByZXZfYWxhcm0pIHsKKyAgICAvKiB0aGVyZSB3YXMgYW4gYWxhcm0oKSBzZXQgYmVmb3JlIHVzLCBub3cgcHV0IGl0IGJhY2sgKi8KKyAgICB1bnNpZ25lZCBsb25nIGVsYXBzZWRfbXMgPSBDdXJsX3R2ZGlmZihDdXJsX3R2bm93KCksIGNvbm4tPmNyZWF0ZWQpOworCisgICAgLyogdGhlIGFsYXJtIHBlcmlvZCBpcyBjb3VudGVkIGluIGV2ZW4gbnVtYmVyIG9mIHNlY29uZHMgKi8KKyAgICB1bnNpZ25lZCBsb25nIGFsYXJtX3NldCA9IHByZXZfYWxhcm0gLSBlbGFwc2VkX21zLzEwMDA7CisKKyAgICBpZighYWxhcm1fc2V0IHx8CisgICAgICAgKChhbGFybV9zZXQgPj0gMHg4MDAwMDAwMCkgJiYgKHByZXZfYWxhcm0gPCAweDgwMDAwMDAwKSkgKSB7CisgICAgICAvKiBpZiB0aGUgYWxhcm0gdGltZS1sZWZ0IHJlYWNoZWQgemVybyBvciB0dXJuZWQgIm5lZ2F0aXZlIiAoY291bnRlZAorICAgICAgICAgd2l0aCB1bnNpZ25lZCB2YWx1ZXMpLCB3ZSBzaG91bGQgZmlyZSBvZmYgYSBTSUdBTFJNIGhlcmUsIGJ1dCB3ZQorICAgICAgICAgd29uJ3QsIGFuZCB6ZXJvIHdvdWxkIGJlIHRvIHN3aXRjaCBpdCBvZmYgc28gd2UgbmV2ZXIgc2V0IGl0IHRvCisgICAgICAgICBsZXNzIHRoYW4gMSEgKi8KKyAgICAgIGFsYXJtKDEpOworICAgICAgcmMgPSBDVVJMUkVTT0xWX1RJTUVET1VUOworICAgICAgZmFpbGYoZGF0YSwgIlByZXZpb3VzIGFsYXJtIGZpcmVkIG9mZiEiKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgYWxhcm0oKHVuc2lnbmVkIGludClhbGFybV9zZXQpOworICB9CisjZW5kaWYgLyogVVNFX0FMQVJNX1RJTUVPVVQgKi8KKworICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDdXJsX3Jlc29sdl91bmxvY2soKSB1bmxvY2tzIHRoZSBnaXZlbiBjYWNoZWQgRE5TIGVudHJ5LiBXaGVuIHRoaXMgaGFzIGJlZW4KKyAqIG1hZGUsIHRoZSBzdHJ1Y3QgbWF5IGJlIGRlc3Ryb3llZCBkdWUgdG8gcHJ1bmluZy4gSXQgaXMgaW1wb3J0YW50IHRoYXQgb25seQorICogb25lIHVubG9jayBpcyBtYWRlIGZvciBlYWNoIEN1cmxfcmVzb2x2KCkgY2FsbC4KKyAqLwordm9pZCBDdXJsX3Jlc29sdl91bmxvY2soc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zKQoreworICBERUJVR0FTU0VSVChkbnMgJiYgKGRucy0+aW51c2U+MCkpOworCisgIGlmKGRhdGEtPnNoYXJlKQorICAgIEN1cmxfc2hhcmVfbG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9ETlMsIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKTsKKworICBkbnMtPmludXNlLS07CisgIC8qIG9ubHkgZnJlZSBpZiBub2JvZHkgaXMgdXNpbmcgQU5EIGl0IGlzIG5vdCBpbiBob3N0Y2FjaGUgKHRpbWVzdGFtcCA9PQorICAgICAwKSAqLworICBpZihkbnMtPmludXNlID09IDAgJiYgZG5zLT50aW1lc3RhbXAgPT0gMCkgeworICAgIEN1cmxfZnJlZWFkZHJpbmZvKGRucy0+YWRkcik7CisgICAgZnJlZShkbnMpOworICB9CisKKyAgaWYoZGF0YS0+c2hhcmUpCisgICAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfRE5TKTsKK30KKworLyoKKyAqIEZpbGUtaW50ZXJuYWw6IGZyZWUgYSBjYWNoZSBkbnMgZW50cnkuCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVkbnNlbnRyeSh2b2lkICpmcmVldGhpcykKK3sKKyAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpwID0gKHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqKSBmcmVldGhpczsKKworICAvKiBtYXJrIHRoZSBlbnRyeSBhcyBub3QgaW4gaG9zdGNhY2hlICovCisgIHAtPnRpbWVzdGFtcCA9IDA7CisgIGlmKHAtPmludXNlID09IDApIHsKKyAgICBDdXJsX2ZyZWVhZGRyaW5mbyhwLT5hZGRyKTsKKyAgICBmcmVlKHApOworICB9Cit9CisKKy8qCisgKiBDdXJsX21rX2Ruc2NhY2hlKCkgY3JlYXRlcyBhIG5ldyBETlMgY2FjaGUgYW5kIHJldHVybnMgdGhlIGhhbmRsZSBmb3IgaXQuCisgKi8KK3N0cnVjdCBjdXJsX2hhc2ggKkN1cmxfbWtfZG5zY2FjaGUodm9pZCkKK3sKKyAgcmV0dXJuIEN1cmxfaGFzaF9hbGxvYyg3LCBDdXJsX2hhc2hfc3RyLCBDdXJsX3N0cl9rZXlfY29tcGFyZSwgZnJlZWRuc2VudHJ5KTsKK30KKworc3RhdGljIGludCBob3N0Y2FjaGVfaW51c2Uodm9pZCAqZGF0YSwgdm9pZCAqaGMpCit7CisgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqYyA9IChzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKikgaGM7CisKKyAgaWYoYy0+aW51c2UgPT0gMSkKKyAgICBDdXJsX3Jlc29sdl91bmxvY2soZGF0YSwgYyk7CisKKyAgcmV0dXJuIDE7IC8qIGZyZWUgYWxsIGVudHJpZXMgKi8KK30KKwordm9pZCBDdXJsX2hvc3RjYWNoZV9kZXN0cm95KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICAvKiBFbnRyaWVzIGFkZGVkIHRvIHRoZSBob3N0Y2FjaGUgd2l0aCB0aGUgQ1VSTE9QVF9SRVNPTFZFIGZ1bmN0aW9uIGFyZQorICAgKiBzdGlsbCBwcmVzZW50IGluIHRoZSBjYWNoZSB3aXRoIHRoZSBpbnVzZSBjb3VudGVyIHNldCB0byAxLiBEZXRlY3QgdGhlbQorICAgKiBhbmQgY2xlYW51cCEKKyAgICovCisgIEN1cmxfaGFzaF9jbGVhbl93aXRoX2NyaXRlcml1bShkYXRhLT5kbnMuaG9zdGNhY2hlLCBkYXRhLCBob3N0Y2FjaGVfaW51c2UpOworCisgIEN1cmxfaGFzaF9kZXN0cm95KGRhdGEtPmRucy5ob3N0Y2FjaGUpOworICBkYXRhLT5kbnMuaG9zdGNhY2hldHlwZSA9IEhDQUNIRV9OT05FOworICBkYXRhLT5kbnMuaG9zdGNhY2hlID0gTlVMTDsKK30KKworQ1VSTGNvZGUgQ3VybF9sb2FkaG9zdHBhaXJzKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBzdHJ1Y3QgY3VybF9zbGlzdCAqaG9zdHA7CisgIGNoYXIgaG9zdG5hbWVbMjU2XTsKKyAgY2hhciBhZGRyZXNzWzI1Nl07CisgIGludCBwb3J0OworCisgIGZvcihob3N0cCA9IGRhdGEtPmNoYW5nZS5yZXNvbHZlOyBob3N0cDsgaG9zdHAgPSBob3N0cC0+bmV4dCApIHsKKyAgICBpZighaG9zdHAtPmRhdGEpCisgICAgICBjb250aW51ZTsKKyAgICBpZihob3N0cC0+ZGF0YVswXSA9PSAnLScpIHsKKyAgICAgIC8qIFRPRE86IG1hcmsgYW4gZW50cnkgZm9yIHJlbW92YWwgKi8KKyAgICB9CisgICAgZWxzZSBpZigzID09IHNzY2FuZihob3N0cC0+ZGF0YSwgIiUyNTVbXjpdOiVkOiUyNTVzIiwgaG9zdG5hbWUsICZwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcykpIHsKKyAgICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zOworICAgICAgQ3VybF9hZGRyaW5mbyAqYWRkcjsKKyAgICAgIGNoYXIgKmVudHJ5X2lkOworICAgICAgc2l6ZV90IGVudHJ5X2xlbjsKKworICAgICAgYWRkciA9IEN1cmxfc3RyMmFkZHIoYWRkcmVzcywgcG9ydCk7CisgICAgICBpZighYWRkcikgeworICAgICAgICBpbmZvZihkYXRhLCAiUmVzb2x2ZSAlcyBmb3VuZCBpbGxlZ2FsIVxuIiwgaG9zdHAtPmRhdGEpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLyogQ3JlYXRlIGFuIGVudHJ5IGlkLCBiYXNlZCB1cG9uIHRoZSBob3N0bmFtZSBhbmQgcG9ydCAqLworICAgICAgZW50cnlfaWQgPSBjcmVhdGVfaG9zdGNhY2hlX2lkKGhvc3RuYW1lLCBwb3J0KTsKKyAgICAgIC8qIElmIHdlIGNhbid0IGNyZWF0ZSB0aGUgZW50cnkgaWQsIGZhaWwgKi8KKyAgICAgIGlmKCFlbnRyeV9pZCkgeworICAgICAgICBDdXJsX2ZyZWVhZGRyaW5mbyhhZGRyKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICB9CisKKyAgICAgIGVudHJ5X2xlbiA9IHN0cmxlbihlbnRyeV9pZCk7CisKKyAgICAgIGlmKGRhdGEtPnNoYXJlKQorICAgICAgICBDdXJsX3NoYXJlX2xvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfRE5TLCBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7CisKKyAgICAgIC8qIFNlZSBpZiBpdHMgYWxyZWFkeSBpbiBvdXIgZG5zIGNhY2hlICovCisgICAgICBkbnMgPSBDdXJsX2hhc2hfcGljayhkYXRhLT5kbnMuaG9zdGNhY2hlLCBlbnRyeV9pZCwgZW50cnlfbGVuKzEpOworCisgICAgICAvKiBmcmVlIHRoZSBhbGxvY2F0ZWQgZW50cnlfaWQgYWdhaW4gKi8KKyAgICAgIGZyZWUoZW50cnlfaWQpOworCisgICAgICBpZighZG5zKQorICAgICAgICAvKiBpZiBub3QgaW4gdGhlIGNhY2hlIGFscmVhZHksIHB1dCB0aGlzIGhvc3QgaW4gdGhlIGNhY2hlICovCisgICAgICAgIGRucyA9IEN1cmxfY2FjaGVfYWRkcihkYXRhLCBhZGRyLCBob3N0bmFtZSwgcG9ydCk7CisgICAgICBlbHNlCisgICAgICAgIC8qIHRoaXMgaXMgYSBkdXBsaWNhdGUsIGZyZWUgaXQgYWdhaW4gKi8KKyAgICAgICAgQ3VybF9mcmVlYWRkcmluZm8oYWRkcik7CisKKyAgICAgIGlmKGRhdGEtPnNoYXJlKQorICAgICAgICBDdXJsX3NoYXJlX3VubG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9ETlMpOworCisgICAgICBpZighZG5zKSB7CisgICAgICAgIEN1cmxfZnJlZWFkZHJpbmZvKGFkZHIpOworICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJBZGRlZCAlczolZDolcyB0byBETlMgY2FjaGVcbiIsCisgICAgICAgICAgICBob3N0bmFtZSwgcG9ydCwgYWRkcmVzcyk7CisgICAgfQorICB9CisgIGRhdGEtPmNoYW5nZS5yZXNvbHZlID0gTlVMTDsgLyogZGVhbHQgd2l0aCBub3cgKi8KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvaG9zdGlwLmggYi9jdXJsLTcuMjUuMC9saWIvaG9zdGlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmYjgwZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9ob3N0aXAuaApAQCAtMCwwICsxLDIxMCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9IT1NUSVBfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9IT1NUSVBfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorI2luY2x1ZGUgImhhc2guaCIKKyNpbmNsdWRlICJjdXJsX2FkZHJpbmZvLmgiCisjaW5jbHVkZSAiYXN5bi5oIgorCisjaWZkZWYgSEFWRV9TRVRKTVBfSAorI2luY2x1ZGUgPHNldGptcC5oPgorI2VuZGlmCisKKyNpZmRlZiBORVRXQVJFCisjdW5kZWYgaW5fYWRkcl90CisjZGVmaW5lIGluX2FkZHJfdCB1bnNpZ25lZCBsb25nCisjZW5kaWYKKworLyogQWxsb2NhdGUgZW5vdWdoIG1lbW9yeSB0byBob2xkIHRoZSBmdWxsIG5hbWUgaW5mb3JtYXRpb24gc3RydWN0cyBhbmQKKyAqIGV2ZXJ5dGhpbmcuIE9TRjEgaXMga25vd24gdG8gcmVxdWlyZSBhdCBsZWFzdCA4ODcyIGJ5dGVzLiBUaGUgYnVmZmVyCisgKiByZXF1aXJlZCBmb3Igc3RvcmluZyBhbGwgcG9zc2libGUgYWxpYXNlcyBhbmQgSVAgbnVtYmVycyBpcyBhY2NvcmRpbmcgdG8KKyAqIFN0ZXZlbnMnIFVuaXggTmV0d29yayBQcm9ncmFtbWluZyAybmQgZWRpdGlvbiwgcC4gMzA0OiA4MTkyIGJ5dGVzIQorICovCisjZGVmaW5lIENVUkxfSE9TVEVOVF9TSVpFIDkwMDAKKworI2RlZmluZSBDVVJMX1RJTUVPVVRfUkVTT0xWRSAzMDAgLyogd2hlbiB1c2luZyBhc3luY2ggbWV0aG9kcywgd2UgYWxsb3cgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFueSBzZWNvbmRzIGZvciBhIG5hbWUgcmVzb2x2ZSAqLworCisjZGVmaW5lIENVUkxfQVNZTkNfU1VDQ0VTUyBDVVJMRV9PSworCitzdHJ1Y3QgYWRkcmluZm87CitzdHJ1Y3QgaG9zdGVudDsKK3N0cnVjdCBTZXNzaW9uSGFuZGxlOworc3RydWN0IGNvbm5lY3RkYXRhOworCisvKgorICogQ3VybF9nbG9iYWxfaG9zdF9jYWNoZV9pbml0KCkgaW5pdGlhbGl6ZXMgYW5kIHNldHMgdXAgYSBnbG9iYWwgRE5TIGNhY2hlLgorICogR2xvYmFsIEROUyBjYWNoZSBpcyBnZW5lcmFsIGJhZG5lc3MuIERvIG5vdCB1c2UuIFRoaXMgd2lsbCBiZSByZW1vdmVkIGluCisgKiBhIGZ1dHVyZSB2ZXJzaW9uLiBVc2UgdGhlIHNoYXJlIGludGVyZmFjZSBpbnN0ZWFkIQorICoKKyAqIFJldHVybnMgYSBzdHJ1Y3QgY3VybF9oYXNoIHBvaW50ZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3QgY3VybF9oYXNoICpDdXJsX2dsb2JhbF9ob3N0X2NhY2hlX2luaXQodm9pZCk7Cit2b2lkIEN1cmxfZ2xvYmFsX2hvc3RfY2FjaGVfZHRvcih2b2lkKTsKKworc3RydWN0IEN1cmxfZG5zX2VudHJ5IHsKKyAgQ3VybF9hZGRyaW5mbyAqYWRkcjsKKyAgLyogdGltZXN0YW1wID09IDAgLS0gZW50cnkgbm90IGluIGhvc3RjYWNoZQorICAgICB0aW1lc3RhbXAgIT0gMCAtLSBlbnRyeSBpcyBpbiBob3N0Y2FjaGUgKi8KKyAgdGltZV90IHRpbWVzdGFtcDsKKyAgbG9uZyBpbnVzZTsgICAgICAvKiB1c2UtY291bnRlciwgbWFrZSB2ZXJ5IHN1cmUgeW91IGRlY3JlYXNlIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICB3aGVuIHlvdSdyZSBkb25lIHVzaW5nIHRoZSBhZGRyZXNzIHlvdSByZWNlaXZlZCAqLworfTsKKworLyoKKyAqIEN1cmxfcmVzb2x2KCkgcmV0dXJucyBhbiBlbnRyeSB3aXRoIHRoZSBpbmZvIGZvciB0aGUgc3BlY2lmaWVkIGhvc3QKKyAqIGFuZCBwb3J0LgorICoKKyAqIFRoZSByZXR1cm5lZCBkYXRhICpNVVNUKiBiZSAidW5sb2NrZWQiIHdpdGggQ3VybF9yZXNvbHZfdW5sb2NrKCkgYWZ0ZXIKKyAqIHVzZSwgb3Igd2UnbGwgbGVhayBtZW1vcnkhCisgKi8KKy8qIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBDVVJMUkVTT0xWX1RJTUVET1VUIC0yCisjZGVmaW5lIENVUkxSRVNPTFZfRVJST1IgICAgLTEKKyNkZWZpbmUgQ1VSTFJFU09MVl9SRVNPTFZFRCAgMAorI2RlZmluZSBDVVJMUkVTT0xWX1BFTkRJTkcgICAxCitpbnQgQ3VybF9yZXNvbHYoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICBpbnQgcG9ydCwgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zZW50cnkpOworaW50IEN1cmxfcmVzb2x2X3RpbWVvdXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LCBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKipkbnNlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZW91dG1zKTsKKworI2lmZGVmIENVUkxSRVNfSVBWNgorLyoKKyAqIEN1cmxfaXB2NndvcmtzKCkgcmV0dXJucyBUUlVFIGlmIGlwdjYgc2VlbXMgdG8gd29yay4KKyAqLworYm9vbCBDdXJsX2lwdjZ3b3Jrcyh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIEN1cmxfaXB2NndvcmtzKCkgRkFMU0UKKyNlbmRpZgorCisvKgorICogQ3VybF9pcHZhbGlkKCkgY2hlY2tzIHdoYXQgQ1VSTF9JUFJFU09MVkVfKiByZXF1aXJlbWVudHMgdGhhdCBtaWdodCd2ZQorICogYmVlbiBzZXQgYW5kIHJldHVybnMgVFJVRSBpZiB0aGV5IGFyZSBPSy4KKyAqLworYm9vbCBDdXJsX2lwdmFsaWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKworCisvKgorICogQ3VybF9nZXRhZGRyaW5mbygpIGlzIHRoZSBnZW5lcmljIGxvdy1sZXZlbCBuYW1lIHJlc29sdmUgQVBJIHdpdGhpbiB0aGlzCisgKiBzb3VyY2UgZmlsZS4gVGhlcmUgYXJlIHNldmVyYWwgdmVyc2lvbnMgb2YgdGhpcyBmdW5jdGlvbiAtIGZvciBkaWZmZXJlbnQKKyAqIG5hbWUgcmVzb2x2ZSBsYXllcnMgKHNlbGVjdGVkIGF0IGJ1aWxkLXRpbWUpLiBUaGV5IGFsbCB0YWtlIHRoaXMgc2FtZSBzZXQKKyAqIG9mIGFyZ3VtZW50cworICovCitDdXJsX2FkZHJpbmZvICpDdXJsX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKTsKKworCisvKiB1bmxvY2sgYSBwcmV2aW91c2x5IHJlc29sdmVkIGRucyBlbnRyeSAqLwordm9pZCBDdXJsX3Jlc29sdl91bmxvY2soc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKmRucyk7CisKKy8qIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seTogKi8KK3ZvaWQgQ3VybF9zY2FuX2NhY2hlX3VzZWQodm9pZCAqdXNlciwgdm9pZCAqcHRyKTsKKworLyogbWFrZSBhIG5ldyBkbnMgY2FjaGUgYW5kIHJldHVybiB0aGUgaGFuZGxlICovCitzdHJ1Y3QgY3VybF9oYXNoICpDdXJsX21rX2Ruc2NhY2hlKHZvaWQpOworCisvKiBwcnVuZSBvbGQgZW50cmllcyBmcm9tIHRoZSBETlMgY2FjaGUgKi8KK3ZvaWQgQ3VybF9ob3N0Y2FjaGVfcHJ1bmUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOworCisvKiBSZXR1cm4gIyBvZiBhZHJlc3NlcyBpbiBhIEN1cmxfYWRkcmluZm8gc3RydWN0ICovCitpbnQgQ3VybF9udW1fYWRkcmVzc2VzIChjb25zdCBDdXJsX2FkZHJpbmZvICphZGRyKTsKKworI2lmIGRlZmluZWQoQ1VSTERFQlVHKSAmJiBkZWZpbmVkKEhBVkVfR0VUTkFNRUlORk8pCitpbnQgY3VybF9kb2dldG5hbWVpbmZvKEdFVE5BTUVJTkZPX1FVQUxfQVJHMSBHRVROQU1FSU5GT19UWVBFX0FSRzEgc2EsCisgICAgICAgICAgICAgICAgICAgICAgIEdFVE5BTUVJTkZPX1RZUEVfQVJHMiBzYWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaG9zdCwgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBob3N0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzZXJ2LCBHRVROQU1FSU5GT19UWVBFX0FSRzQ2IHNlcnZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIEdFVE5BTUVJTkZPX1RZUEVfQVJHNyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnNvdXJjZSk7CisjZW5kaWYKKworLyogSVB2NCB0aHJlYWRzYWZlIHJlc29sdmUgZnVuY3Rpb24gdXNlZCBmb3Igc3luY2ggYW5kIGFzeW5jaCBidWlsZHMgKi8KK0N1cmxfYWRkcmluZm8gKkN1cmxfaXB2NF9yZXNvbHZlX3IoY29uc3QgY2hhciAqIGhvc3RuYW1lLCBpbnQgcG9ydCk7CisKK0NVUkxjb2RlIEN1cmxfYXN5bmNfcmVzb2x2ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpwcm90b2NvbF9jb25uZWN0KTsKKworI2lmbmRlZiBDVVJMUkVTX0FTWU5DSAorI2RlZmluZSBDdXJsX2FzeW5jX3Jlc29sdmVkKHgseSkgQ1VSTEVfT0sKKyNlbmRpZgorCisvKgorICogQ3VybF9hZGRyaW5mb19jYWxsYmFjaygpIGlzIHVzZWQgd2hlbiB3ZSBidWlsZCB3aXRoIGFueSBhc3luY2ggc3BlY2lhbHR5LgorICogSGFuZGxlcyBlbmQgb2YgYXN5bmMgcmVxdWVzdCBwcm9jZXNzaW5nLiBJbnNlcnRzIGFpIGludG8gaG9zdGNhY2hlIHdoZW4KKyAqIHN0YXR1cyBpcyBDVVJMX0FTWU5DX1NVQ0NFU1MuIFR3aWRkbGVzIGZpZWxkcyBpbiBjb25uIHRvIGluZGljYXRlIGFzeW5jCisgKiByZXF1ZXN0IGNvbXBsZXRlZCB3aGV0aGVyIHN1Y2Nlc3NmdWwgb3IgZmFpbGVkLgorICovCitDVVJMY29kZSBDdXJsX2FkZHJpbmZvX2NhbGxiYWNrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9hZGRyaW5mbyAqYWkpOworCisvKgorICogQ3VybF9wcmludGFibGVfYWRkcmVzcygpIHJldHVybnMgYSBwcmludGFibGUgdmVyc2lvbiBvZiB0aGUgMXN0IGFkZHJlc3MKKyAqIGdpdmVuIGluIHRoZSAnaXAnIGFyZ3VtZW50LiBUaGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBidWYgdGhhdCBpcworICogYnVmc2l6ZSBieXRlcyBiaWcuCisgKi8KK2NvbnN0IGNoYXIgKkN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoY29uc3QgQ3VybF9hZGRyaW5mbyAqaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpOworCisvKgorICogQ3VybF9jYWNoZV9hZGRyKCkgc3RvcmVzIGEgJ0N1cmxfYWRkcmluZm8nIHN0cnVjdCBpbiB0aGUgRE5TIGNhY2hlLgorICoKKyAqIFJldHVybnMgdGhlIEN1cmxfZG5zX2VudHJ5IGVudHJ5IHBvaW50ZXIgb3IgTlVMTCBpZiB0aGUgc3RvcmFnZSBmYWlsZWQuCisgKi8KK3N0cnVjdCBDdXJsX2Ruc19lbnRyeSAqCitDdXJsX2NhY2hlX2FkZHIoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIEN1cmxfYWRkcmluZm8gKmFkZHIsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsIGludCBwb3J0KTsKKworI2lmbmRlZiBJTkFERFJfTk9ORQorI2RlZmluZSBDVVJMX0lOQUREUl9OT05FIChpbl9hZGRyX3QpIH4wCisjZWxzZQorI2RlZmluZSBDVVJMX0lOQUREUl9OT05FIElOQUREUl9OT05FCisjZW5kaWYKKworI2lmZGVmIEhBVkVfU0lHU0VUSk1QCisvKiBGb3J3YXJkLWRlY2xhcmF0aW9uIG9mIHZhcmlhYmxlIGRlZmluZWQgaW4gaG9zdGlwLmMuIEJld2FyZSB0aGlzCisgKiBpcyBhIGdsb2JhbCBhbmQgdW5pcXVlIGluc3RhbmNlLiBUaGlzIGlzIHVzZWQgdG8gc3RvcmUgdGhlIHJldHVybgorICogYWRkcmVzcyB0aGF0IHdlIGNhbiBqdW1wIGJhY2sgdG8gZnJvbSBpbnNpZGUgYSBzaWduYWwgaGFuZGxlci4KKyAqIFRoaXMgaXMgbm90IHRocmVhZC1zYWZlIHN0dWZmLgorICovCitleHRlcm4gc2lnam1wX2J1ZiBjdXJsX2ptcGVudjsKKyNlbmRpZgorCisvKgorICogRnVuY3Rpb24gcHJvdmlkZWQgYnkgdGhlIHJlc29sdmVyIGJhY2tlbmQgdG8gc2V0IEROUyBzZXJ2ZXJzIHRvIHVzZS4KKyAqLworQ1VSTGNvZGUgQ3VybF9zZXRfZG5zX3NlcnZlcnMoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIGNoYXIgKnNlcnZlcnMpOworCisvKgorICogRGVzdHJveSB0aGUgaG9zdGNhY2hlIG9mIHRoaXMgaGFuZGxlLgorICovCit2b2lkIEN1cmxfaG9zdGNhY2hlX2Rlc3Ryb3koc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOworCitDVVJMY29kZSBDdXJsX2xvYWRob3N0cGFpcnMoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfSE9TVElQX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9ob3N0aXA0LmMgYi9jdXJsLTcuMjUuMC9saWIvaG9zdGlwNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ODYxOGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvaG9zdGlwNC5jCkBAIC0wLDAgKzEsMzE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4gICAgIC8qIGZvciB0aGUgY2xvc2UoKSBwcm90byAqLworI2VuZGlmCisjaWZkZWYgX19WTVMKKyNpbmNsdWRlIDxpbi5oPgorI2luY2x1ZGUgPGluZXQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9QUk9DRVNTX0gKKyNpbmNsdWRlIDxwcm9jZXNzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImhvc3RpcC5oIgorI2luY2x1ZGUgImhhc2guaCIKKyNpbmNsdWRlICJzaGFyZS5oIgorI2luY2x1ZGUgInN0cmVycm9yLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBPbmx5IGZvciBwbGFpbi1pcHY0IGJ1aWxkcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgQ1VSTFJFU19JUFY0IC8qIHBsYWluIGlwdjQgY29kZSBjb21pbmcgdXAgKi8KKy8qCisgKiBDdXJsX2lwdmFsaWQoKSBjaGVja3Mgd2hhdCBDVVJMX0lQUkVTT0xWRV8qIHJlcXVpcmVtZW50cyB0aGF0IG1pZ2h0J3ZlCisgKiBiZWVuIHNldCBhbmQgcmV0dXJucyBUUlVFIGlmIHRoZXkgYXJlIE9LLgorICovCitib29sIEN1cmxfaXB2YWxpZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGlmKGNvbm4tPmlwX3ZlcnNpb24gPT0gQ1VSTF9JUFJFU09MVkVfVjYpCisgICAgLyogYW4gaXB2NiBhZGRyZXNzIHdhcyByZXF1ZXN0ZWQgYW5kIHdlIGNhbid0IGdldC91c2Ugb25lICovCisgICAgcmV0dXJuIEZBTFNFOworCisgIHJldHVybiBUUlVFOyAvKiBPSywgcHJvY2VlZCAqLworfQorCisjaWZkZWYgQ1VSTFJFU19TWU5DSAorCisvKgorICogQ3VybF9nZXRhZGRyaW5mbygpIC0gdGhlIGlwdjQgc3luY2hyb25vdXMgdmVyc2lvbi4KKyAqCisgKiBUaGUgb3JpZ2luYWwgY29kZSB0byB0aGlzIGZ1bmN0aW9uIHdhcyBmcm9tIHRoZSBEYW5jZXIgc291cmNlIGNvZGUsIHdyaXR0ZW4KKyAqIGJ5IEJqb3JuIFJlZXNlLCBpdCBoYXMgc2luY2UgYmVlbiBwYXRjaGVkIGFuZCBtb2RpZmllZCBjb25zaWRlcmFibHkuCisgKgorICogZ2V0aG9zdGJ5bmFtZV9yKCkgaXMgdGhlIHRocmVhZC1zYWZlIHZlcnNpb24gb2YgdGhlIGdldGhvc3RieW5hbWUoKQorICogZnVuY3Rpb24uIFdoZW4gd2UgYnVpbGQgZm9yIHBsYWluIElQdjQsIHdlIGF0dGVtcHQgdG8gdXNlIHRoaXMKKyAqIGZ1bmN0aW9uLiBUaGVyZSBhcmUgX3RocmVlXyBkaWZmZXJlbnQgZ2V0aG9zdGJ5bmFtZV9yKCkgdmVyc2lvbnMsIGFuZCB3ZQorICogZGV0ZWN0IHdoaWNoIG9uZSB0aGlzIHBsYXRmb3JtIHN1cHBvcnRzIGluIHRoZSBjb25maWd1cmUgc2NyaXB0IGFuZCBzZXQgdXAKKyAqIHRoZSBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zLCBIQVZFX0dFVEhPU1RCWU5BTUVfUl81IG9yCisgKiBIQVZFX0dFVEhPU1RCWU5BTUVfUl82IGRlZmluZXMgYWNjb3JkaW5nbHkuIE5vdGUgdGhhdCBIQVZFX0dFVEFERFJCWU5BTUUKKyAqIGhhcyB0aGUgY29ycmVzcG9uZGluZyBydWxlcy4gVGhpcyBpcyBwcmltYXJpbHkgb24gKm5peC4gTm90ZSB0aGF0IHNvbWUgdW5peAorICogZmxhdm91cnMgaGF2ZSB0aHJlYWQtc2FmZSB2ZXJzaW9ucyBvZiB0aGUgcGxhaW4gZ2V0aG9zdGJ5bmFtZSgpIGV0Yy4KKyAqCisgKi8KK0N1cmxfYWRkcmluZm8gKkN1cmxfZ2V0YWRkcmluZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqd2FpdHApCit7CisgIEN1cmxfYWRkcmluZm8gKmFpID0gTlVMTDsKKworI2lmZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKKyAgKHZvaWQpY29ubjsKKyNlbmRpZgorCisgICp3YWl0cCA9IDA7IC8qIHN5bmNocm9ub3VzIHJlc3BvbnNlIG9ubHkgKi8KKworICBhaSA9IEN1cmxfaXB2NF9yZXNvbHZlX3IoaG9zdG5hbWUsIHBvcnQpOworICBpZighYWkpCisgICAgaW5mb2YoY29ubi0+ZGF0YSwgIkN1cmxfaXB2NF9yZXNvbHZlX3IgZmFpbGVkIGZvciAlc1xuIiwgaG9zdG5hbWUpOworCisgIHJldHVybiBhaTsKK30KKyNlbmRpZiAvKiBDVVJMUkVTX1NZTkNIICovCisjZW5kaWYgLyogQ1VSTFJFU19JUFY0ICovCisKKyNpZiBkZWZpbmVkKENVUkxSRVNfSVBWNCkgJiYgIWRlZmluZWQoQ1VSTFJFU19BUkVTKQorCisvKgorICogQ3VybF9pcHY0X3Jlc29sdmVfcigpIC0gaXB2NCB0aHJlYWRzYWZlIHJlc29sdmVyIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgYm90aCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHJlc29sdmVyIGJ1aWxkcywKKyAqIGltcGx5aW5nIHRoYXQgb25seSB0aHJlYWRzYWZlIGNvZGUgYW5kIGZ1bmN0aW9uIGNhbGxzIG1heSBiZSB1c2VkLgorICoKKyAqLworQ3VybF9hZGRyaW5mbyAqQ3VybF9pcHY0X3Jlc29sdmVfcihjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcnQpCit7CisjaWYgIWRlZmluZWQoSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFKSAmJiBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzMpCisgIGludCByZXM7CisjZW5kaWYKKyAgQ3VybF9hZGRyaW5mbyAqYWkgPSBOVUxMOworICBzdHJ1Y3QgaG9zdGVudCAqaCA9IE5VTEw7CisgIHN0cnVjdCBpbl9hZGRyIGluOworICBzdHJ1Y3QgaG9zdGVudCAqYnVmID0gTlVMTDsKKworICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmluKSA+IDApCisgICAgLyogVGhpcyBpcyBhIGRvdHRlZCBJUCBhZGRyZXNzIDEyMy4xMjMuMTIzLjEyMy1zdHlsZSAqLworICAgIHJldHVybiBDdXJsX2lwMmFkZHIoQUZfSU5FVCwgJmluLCBob3N0bmFtZSwgcG9ydCk7CisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSkKKyAgZWxzZSB7CisgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzOworICAgIGNoYXIgc2J1ZltOSV9NQVhTRVJWXTsKKyAgICBjaGFyICpzYnVmcHRyID0gTlVMTDsKKworICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworICAgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX0lORVQ7CisgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKyAgICBpZihwb3J0KSB7CisgICAgICBzbnByaW50ZihzYnVmLCBzaXplb2Yoc2J1ZiksICIlZCIsIHBvcnQpOworICAgICAgc2J1ZnB0ciA9IHNidWY7CisgICAgfQorCisgICAgKHZvaWQpQ3VybF9nZXRhZGRyaW5mb19leChob3N0bmFtZSwgc2J1ZnB0ciwgJmhpbnRzLCAmYWkpOworCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZTkFNRV9SKQorICAvKgorICAgKiBnZXRob3N0YnluYW1lX3IoKSBpcyB0aGUgcHJlZmVycmVkIHJlc29sdmUgZnVuY3Rpb24gZm9yIG1hbnkgcGxhdGZvcm1zLgorICAgKiBTaW5jZSB0aGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHZlcnNpb25zIG9mIGl0LCB0aGUgZm9sbG93aW5nIGNvZGUgaXMKKyAgICogc29tZXdoYXQgI2lmZGVmLXJpZGRlbi4KKyAgICovCisgIGVsc2UgeworICAgIGludCBoX2Vycm5vcDsKKworICAgIGJ1ZiA9IGNhbGxvYygxLCBDVVJMX0hPU1RFTlRfU0laRSk7CisgICAgaWYoIWJ1ZikKKyAgICAgIHJldHVybiBOVUxMOyAvKiBtYWpvciBmYWlsdXJlICovCisgICAgLyoKKyAgICAgKiBUaGUgY2xlYXJpbmcgb2YgdGhlIGJ1ZmZlciBpcyBhIHdvcmthcm91bmQgZm9yIGEgZ2V0aG9zdGJ5bmFtZV9yIGJ1ZyBpbgorICAgICAqIHFueCBudG8gYW5kIGl0IGlzIGFsc28gX3JlcXVpcmVkXyBmb3Igc29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgb24gc29tZQorICAgICAqIHBsYXRmb3Jtcy4KKyAgICAgKi8KKworI2lmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllOQU1FX1JfNSkKKyAgICAvKiBTb2xhcmlzLCBJUklYIGFuZCBtb3JlICovCisgICAgaCA9IGdldGhvc3RieW5hbWVfcihob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgaG9zdGVudCAqKWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopYnVmICsgc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfSE9TVEVOVF9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZoX2Vycm5vcCk7CisKKyAgICAvKiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgaXQgcmV0dXJucyBOVUxMIGFuZCBzZXRzIGVycm5vIHRvCisgICAgICogRVJBTkdFLiBUaGUgZXJybm8gaXMgdGhyZWFkIHNhZmUgaWYgdGhpcyBpcyBjb21waWxlZCB3aXRoCisgICAgICogLURfUkVFTlRSQU5UIGFzIHRoZW4gdGhlICdlcnJubycgdmFyaWFibGUgaXMgYSBtYWNybyBkZWZpbmVkIHRvIGdldAorICAgICAqIHVzZWQgcHJvcGVybHkgZm9yIHRocmVhZHMuCisgICAgICovCisKKyAgICBpZihoKSB7CisgICAgICA7CisgICAgfQorICAgIGVsc2UKKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllOQU1FX1JfNikKKyAgICAvKiBMaW51eCAqLworCisgICAgKHZvaWQpZ2V0aG9zdGJ5bmFtZV9yKGhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBob3N0ZW50ICopYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilidWYgKyBzaXplb2Yoc3RydWN0IGhvc3RlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTF9IT1NURU5UX1NJWkUgLSBzaXplb2Yoc3RydWN0IGhvc3RlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgJmgsIC8qIERJRkZFUkVOQ0UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICZoX2Vycm5vcCk7CisgICAgLyogUmVkaGF0IDgsIHVzaW5nIGdsaWJjIDIuMi45MyBjaGFuZ2VkIHRoZSBiZWhhdmlvci4gTm93IGFsbCBvZiBhCisgICAgICogc3VkZGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBFQUdBSU4gaWYgdGhlIGdpdmVuIGJ1ZmZlciBzaXplIGlzIHRvbworICAgICAqIHNtYWxsLiBQcmV2aW91cyB2ZXJzaW9ucyBhcmUga25vd24gdG8gcmV0dXJuIEVSQU5HRSBmb3IgdGhlIHNhbWUKKyAgICAgKiBwcm9ibGVtLgorICAgICAqCisgICAgICogVGhpcyB3b3VsZG4ndCBiZSBzdWNoIGEgYmlnIHByb2JsZW0gaWYgb2xkZXIgdmVyc2lvbnMgd291bGRuJ3QKKyAgICAgKiBzb21ldGltZXMgcmV0dXJuIEVBR0FJTiBvbiBhIGNvbW1vbiBmYWlsdXJlIGNhc2UuIEFsYXMsIHdlIGNhbid0CisgICAgICogYXNzdW1lIHRoYXQgRUFHQUlOICpvciogRVJBTkdFIG1lYW5zIEVSQU5HRSBmb3IgYW55IGdpdmVuIHZlcnNpb24gb2YKKyAgICAgKiBnbGliYy4KKyAgICAgKgorICAgICAqIEZvciBub3csIHdlIGRvIHRoYXQgYW5kIHRodXMgd2UgbWF5IGNhbGwgdGhlIGZ1bmN0aW9uIHJlcGVhdGVkbHkgYW5kCisgICAgICogZmFpbCBmb3Igb2xkZXIgZ2xpYmMgdmVyc2lvbnMgdGhhdCByZXR1cm4gRUFHQUlOLCB1bnRpbCB3ZSBydW4gb3V0IG9mCisgICAgICogYnVmZmVyIHNpemUgKHN0ZXBfc2l6ZSBncm93cyBiZXlvbmQgQ1VSTF9IT1NURU5UX1NJWkUpLgorICAgICAqCisgICAgICogSWYgYW55b25lIGhhcyBhIGJldHRlciBmaXgsIHBsZWFzZSB0ZWxsIHVzIQorICAgICAqCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqCisgICAgICogT24gT2N0b2JlciAyM3JkIDIwMDMsIERhbiBDIGR1ZyB1cCBtb3JlIGRldGFpbHMgb24gdGhlIG15c3RlcmllcyBvZgorICAgICAqIGdldGhvc3RieW5hbWVfcigpIGluIGdsaWJjOgorICAgICAqCisgICAgICogSW4gZ2xpYmMgMi4yLjUgdGhlIGludGVyZmFjZSBpcyBkaWZmZXJlbnQgKHRoaXMgaGFzIGFsc28gYmVlbgorICAgICAqIGRpc2NvdmVyZWQgaW4gZ2xpYmMgMi4xLjEtNiBhcyBzaGlwcGVkIGJ5IFJlZGhhdCA2KS4gV2hhdCBJIGNhbid0CisgICAgICogZXhwbGFpbiwgaXMgdGhhdCB0ZXN0cyBwZXJmb3JtZWQgb24gZ2xpYmMgMi4yLjQtMzQgYW5kIDIuMi40LTMyCisgICAgICogKHNoaXBwZWQvdXBncmFkZWQgYnkgUmVkaGF0IDcuMikgZG9uJ3Qgc2hvdyB0aGlzIGJlaGF2aW9yIQorICAgICAqCisgICAgICogSW4gdGhpcyAiYnVnZ3kiIHZlcnNpb24sIHRoZSByZXR1cm4gY29kZSBpcyAtMSBvbiBlcnJvciBhbmQgJ2Vycm5vJworICAgICAqIGlzIHNldCB0byB0aGUgRVJBTkdFIG9yIEVBR0FJTiBjb2RlLiBOb3RlIHRoYXQgJ2Vycm5vJyBpcyBub3QgYQorICAgICAqIHRocmVhZC1zYWZlIHZhcmlhYmxlLgorICAgICAqLworCisgICAgaWYoIWgpIC8qIGZhaWx1cmUgKi8KKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRIT1NUQllOQU1FX1JfMykKKyAgICAvKiBBSVgsIERpZ2l0YWwgVW5peC9UcnU2NCwgSFBVWCAxMCwgbW9yZT8gKi8KKworICAgIC8qIEZvciBBSVggNC4zIG9yIGxhdGVyLCB3ZSBkb24ndCB1c2UgZ2V0aG9zdGJ5bmFtZV9yKCkgYXQgYWxsLCBiZWNhdXNlIG9mCisgICAgICogdGhlIHBsYWluIGZhY3QgdGhhdCBpdCBkb2VzIG5vdCByZXR1cm4gdW5pcXVlIGZ1bGwgYnVmZmVycyBvbiBlYWNoCisgICAgICogY2FsbCwgYnV0IGluc3RlYWQgc2V2ZXJhbCBvZiB0aGUgcG9pbnRlcnMgaW4gdGhlIGhvc3RlbnQgc3RydWN0cyB3aWxsCisgICAgICogcG9pbnQgdG8gdGhlIHNhbWUgYWN0dWFsIGRhdGEhIFRoaXMgaGF2ZSB0aGUgdW5mb3J0dW5hdGUgZG93bi1zaWRlIHRoYXQKKyAgICAgKiBvdXIgY2FjaGluZyBzeXN0ZW0gYnJlYWtzIGRvd24gaG9ycmlibHkuIEx1Y2tpbHkgZm9yIHVzIHRob3VnaCwgQUlYIDQuMworICAgICAqIGFuZCBtb3JlIHJlY2VudCB2ZXJzaW9ucyBoYXZlIGEgImNvbXBsZXRlbHkgdGhyZWFkLXNhZmUiWypdIGxpYmMgd2hlcmUKKyAgICAgKiBhbGwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRocmVhZC1zcGVjaWZpYyBtZW1vcnkgYXJlYXMgbWFraW5nIGNhbGxzIHRvCisgICAgICogdGhlIHBsYWluIG9sZCBnZXRob3N0YnluYW1lKCkgd29yayBmaW5lIGV2ZW4gZm9yIG11bHRpLXRocmVhZGVkCisgICAgICogcHJvZ3JhbXMuCisgICAgICoKKyAgICAgKiBUaGlzIEFJWCA0LjMgb3IgbGF0ZXIgZGV0ZWN0aW9uIGlzIGFsbCBtYWRlIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorICAgICAqCisgICAgICogVHJvZWxzIFdhbHN0ZWQgSGFuc2VuIGhlbHBlZCB1cyB3b3JrIHRoaXMgb3V0IG9uIE1hcmNoIDNyZCwgMjAwMy4KKyAgICAgKgorICAgICAqIFsqXSA9IG11Y2ggbGF0ZXIgd2UndmUgZm91bmQgb3V0IHRoYXQgaXQgaXNuJ3QgYXQgYWxsICJjb21wbGV0ZWx5CisgICAgICogdGhyZWFkLXNhZmUiLCBidXQgYXQgbGVhc3QgdGhlIGdldGhvc3RieW5hbWUoKSBmdW5jdGlvbiBpcy4KKyAgICAgKi8KKworICAgIGlmKENVUkxfSE9TVEVOVF9TSVpFID49CisgICAgICAgKHNpemVvZihzdHJ1Y3QgaG9zdGVudCkrc2l6ZW9mKHN0cnVjdCBob3N0ZW50X2RhdGEpKSkgeworCisgICAgICAvKiBBdWd1c3QgMjJuZCwgMjAwMDogQWxiZXJ0IENoaW4tQS1Zb3VuZyBicm91Z2h0IGFuIHVwZGF0ZWQgdmVyc2lvbgorICAgICAgICogdGhhdCBzaG91bGQgd29yayEgU2VwdGVtYmVyIDIwOiBSaWNoYXJkIFByZXNjb3R0IHdvcmtlZCBvbiB0aGUgYnVmZmVyCisgICAgICAgKiBzaXplIGRpbGVtbWEuCisgICAgICAgKi8KKworICAgICAgcmVzID0gZ2V0aG9zdGJ5bmFtZV9yKGhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgaG9zdGVudCAqKWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGhvc3RlbnRfZGF0YSAqKSgoY2hhciAqKWJ1ZiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSkpOworICAgICAgaF9lcnJub3AgPSBTT0NLRVJSTk87IC8qIHdlIGRvbid0IGRlYWwgd2l0aCB0aGlzLCBidXQgc2V0IGl0IGFueXdheSAqLworICAgIH0KKyAgICBlbHNlCisgICAgICByZXMgPSAtMTsgLyogZmFpbHVyZSwgdG9vIHNtYWxsaXNoIGJ1ZmZlciBzaXplICovCisKKyAgICBpZighcmVzKSB7IC8qIHN1Y2Nlc3MgKi8KKworICAgICAgaCA9IGJ1ZjsgLyogcmVzdWx0IGV4cGVjdGVkIGluIGggKi8KKworICAgICAgLyogVGhpcyBpcyB0aGUgd29yc3Qga2luZCBvZiB0aGUgZGlmZmVyZW50IGdldGhvc3RieW5hbWVfcigpIGludGVyZmFjZXMuCisgICAgICAgKiBTaW5jZSB3ZSBkb24ndCBrbm93IGhvdyBiaWcgYnVmZmVyIHRoaXMgcGFydGljdWxhciBsb29rdXAgcmVxdWlyZWQsCisgICAgICAgKiB3ZSBjYW4ndCByZWFsbG9jIGRvd24gdGhlIGh1Z2UgYWxsb2Mgd2l0aG91dCBkb2luZyBjbG9zZXIgYW5hbHlzaXMgb2YKKyAgICAgICAqIHRoZSByZXR1cm5lZCBkYXRhLiBUaHVzLCB3ZSBhbHdheXMgdXNlIENVUkxfSE9TVEVOVF9TSVpFIGZvciBldmVyeQorICAgICAgICogbmFtZSBsb29rdXAuIEZpeGluZyB0aGlzIHdvdWxkIHJlcXVpcmUgYW4gZXh0cmEgbWFsbG9jKCkgYW5kIHRoZW4KKyAgICAgICAqIGNhbGxpbmcgQ3VybF9hZGRyaW5mb19jb3B5KCkgdGhhdCBzdWJzZXF1ZW50IHJlYWxsb2MoKXMgZG93biB0aGUgbmV3CisgICAgICAgKiBtZW1vcnkgYXJlYSB0byB0aGUgYWN0dWFsbHkgdXNlZCBhbW91bnQuCisgICAgICAgKi8KKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIEhBVkVfLi4uQllOQU1FX1JfNSB8fCBIQVZFXy4uLkJZTkFNRV9SXzYgfHwgSEFWRV8uLi5CWU5BTUVfUl8zICovCisgICAgeworICAgICAgaCA9IE5VTEw7IC8qIHNldCByZXR1cm4gY29kZSB0byBOVUxMICovCisgICAgICBmcmVlKGJ1Zik7CisgICAgfQorI2Vsc2UgLyogSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFIHx8IEhBVkVfR0VUSE9TVEJZTkFNRV9SICovCisgICAgLyoKKyAgICAgKiBIZXJlIGlzIGNvZGUgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgYSB0aHJlYWQgc2FmZQorICAgICAqIGdldGFkZHJpbmZvKCkgbm9yIGdldGhvc3RieW5hbWVfcigpIGZ1bmN0aW9uIG9yIGZvciB3aGljaAorICAgICAqIGdldGhvc3RieW5hbWUoKSBpcyB0aGUgcHJlZmVycmVkIG9uZS4KKyAgICAgKi8KKyAgZWxzZSB7CisgICAgaCA9IGdldGhvc3RieW5hbWUoKHZvaWQqKWhvc3RuYW1lKTsKKyNlbmRpZiAvKiBIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUgfHwgSEFWRV9HRVRIT1NUQllOQU1FX1IgKi8KKyAgfQorCisgIGlmKGgpIHsKKyAgICBhaSA9IEN1cmxfaGUyYWkoaCwgcG9ydCk7CisKKyAgICBpZihidWYpIC8qIHVzZWQgYSAqX3IoKSBmdW5jdGlvbiAqLworICAgICAgZnJlZShidWYpOworICB9CisKKyAgcmV0dXJuIGFpOworfQorI2VuZGlmIC8qIGRlZmluZWQoQ1VSTFJFU19JUFY0KSAmJiAhZGVmaW5lZChDVVJMUkVTX0FSRVMpICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvaG9zdGlwNi5jIGIvY3VybC03LjI1LjAvbGliL2hvc3RpcDYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjQxY2I0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2hvc3RpcDYuYwpAQCAtMCwwICsxLDIzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAvKiBmb3IgdGhlIGNsb3NlKCkgcHJvdG8gKi8KKyNlbmRpZgorI2lmZGVmIF9fVk1TCisjaW5jbHVkZSA8aW4uaD4KKyNpbmNsdWRlIDxpbmV0Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfUFJPQ0VTU19ICisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJob3N0aXAuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAic2hhcmUuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgImluZXRfcHRvbi5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE9ubHkgZm9yIGlwdjYtZW5hYmxlZCBidWlsZHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIENVUkxSRVNfSVBWNgorCisKKyNpZiBkZWZpbmVkKENVUkxERUJVRykgJiYgZGVmaW5lZChIQVZFX0dFVE5BTUVJTkZPKQorLyogVGhlc2UgYXJlIHN0cmljdGx5IGZvciBtZW1vcnkgdHJhY2luZyBhbmQgYXJlIHVzaW5nIHRoZSBzYW1lIHN0eWxlIGFzIHRoZQorICogZmFtaWx5IG90aGVyd2lzZSBwcmVzZW50IGluIG1lbWRlYnVnLmMuIEkgcHV0IHRoZXNlIG9uZXMgaGVyZSBzaW5jZSB0aGV5CisgKiByZXF1aXJlIGEgYnVuY2ggb2Ygc3RydWN0cyBJIGRpZG4ndCB3YW50IHRvIGluY2x1ZGUgaW4gbWVtZGVidWcuYworICovCisKKy8qCisgKiBGb3IgQ1VSTFJFU19BUlMsIHRoaXMgc2hvdWxkIGJlIHdyaXR0ZW4gdXNpbmcgYXJlc19nZXRob3N0YnlhZGRyKCkKKyAqIChpZ25vcmluZyB0aGUgZmFjdCBjLWFyZXMgZG9lc24ndCByZXR1cm4gJ3NlcnYnKS4KKyAqLworCitpbnQgY3VybF9kb2dldG5hbWVpbmZvKEdFVE5BTUVJTkZPX1FVQUxfQVJHMSBHRVROQU1FSU5GT19UWVBFX0FSRzEgc2EsCisgICAgICAgICAgICAgICAgICAgICAgIEdFVE5BTUVJTkZPX1RZUEVfQVJHMiBzYWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaG9zdCwgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBob3N0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzZXJ2LCBHRVROQU1FSU5GT19UWVBFX0FSRzQ2IHNlcnZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIEdFVE5BTUVJTkZPX1RZUEVfQVJHNyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnNvdXJjZSkKK3sKKyAgaW50IHJlcyA9IChnZXRuYW1laW5mbykoc2EsIHNhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBob3N0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2LCBzZXJ2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisgIGlmKDAgPT0gcmVzKQorICAgIC8qIHN1Y2Nlc3MgKi8KKyAgICBjdXJsX21lbWxvZygiR0VUTkFNRSAlczolZCBnZXRuYW1laW5mbygpXG4iLAorICAgICAgICAgICAgICAgIHNvdXJjZSwgbGluZSk7CisgIGVsc2UKKyAgICBjdXJsX21lbWxvZygiR0VUTkFNRSAlczolZCBnZXRuYW1laW5mbygpIGZhaWxlZCA9ICVkXG4iLAorICAgICAgICAgICAgICAgIHNvdXJjZSwgbGluZSwgcmVzKTsKKyAgcmV0dXJuIHJlczsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKENVUkxERUJVRykgJiYgZGVmaW5lZChIQVZFX0dFVE5BTUVJTkZPKSAqLworCisvKgorICogQ3VybF9pcHY2d29ya3MoKSByZXR1cm5zIFRSVUUgaWYgaXB2NiBzZWVtcyB0byB3b3JrLgorICovCitib29sIEN1cmxfaXB2NndvcmtzKHZvaWQpCit7CisgIC8qIHRoZSBuYXR1cmUgb2YgbW9zdCBzeXN0ZW0gaXMgdGhhdCBJUHY2IHN0YXR1cyBkb2Vzbid0IGNvbWUgYW5kIGdvCisgICAgIGR1cmluZyBhIHByb2dyYW0ncyBsaWZldGltZSBzbyB3ZSBvbmx5IHByb2JlIHRoZSBmaXJzdCB0aW1lIGFuZCB0aGVuIHdlCisgICAgIGhhdmUgdGhlIGluZm8ga2VwdCBmb3IgZmFzdCByZS11c2UgKi8KKyAgc3RhdGljIGludCBpcHY2X3dvcmtzID0gLTE7CisgIGlmKC0xID09IGlwdjZfd29ya3MpIHsKKyAgICAvKiBwcm9iZSB0byBzZWUgaWYgd2UgaGF2ZSBhIHdvcmtpbmcgSVB2NiBzdGFjayAqLworICAgIGN1cmxfc29ja2V0X3QgcyA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CisgICAgaWYocyA9PSBDVVJMX1NPQ0tFVF9CQUQpCisgICAgICAvKiBhbiBpcHY2IGFkZHJlc3Mgd2FzIHJlcXVlc3RlZCBidXQgd2UgY2FuJ3QgZ2V0L3VzZSBvbmUgKi8KKyAgICAgIGlwdjZfd29ya3MgPSAwOworICAgIGVsc2UgeworICAgICAgaXB2Nl93b3JrcyA9IDE7CisgICAgICBDdXJsX2Nsb3Nlc29ja2V0KE5VTEwsIHMpOworICAgIH0KKyAgfQorICByZXR1cm4gKGlwdjZfd29ya3M+MCk/VFJVRTpGQUxTRTsKK30KKworLyoKKyAqIEN1cmxfaXB2YWxpZCgpIGNoZWNrcyB3aGF0IENVUkxfSVBSRVNPTFZFXyogcmVxdWlyZW1lbnRzIHRoYXQgbWlnaHQndmUKKyAqIGJlZW4gc2V0IGFuZCByZXR1cm5zIFRSVUUgaWYgdGhleSBhcmUgT0suCisgKi8KK2Jvb2wgQ3VybF9pcHZhbGlkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaWYoY29ubi0+aXBfdmVyc2lvbiA9PSBDVVJMX0lQUkVTT0xWRV9WNikKKyAgICByZXR1cm4gQ3VybF9pcHY2d29ya3MoKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKyNpZiBkZWZpbmVkKENVUkxSRVNfU1lOQ0gpCisKKyNpZmRlZiBERUJVR19BRERSSU5GTworc3RhdGljIHZvaWQgZHVtcF9hZGRyaW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IEN1cmxfYWRkcmluZm8gKmFpKQoreworICBwcmludGYoImR1bXBfYWRkcmluZm86XG4iKTsKKyAgZm9yKDsgYWk7IGFpID0gYWktPmFpX25leHQpIHsKKyAgICBjaGFyICBidWZbSU5FVDZfQUREUlNUUkxFTl07CisKKyAgICBwcmludGYoIiAgICBmYW0gJTJkLCBDTkFNRSAlcywgIiwKKyAgICAgICAgICAgYWktPmFpX2ZhbWlseSwgYWktPmFpX2Nhbm9ubmFtZSA/IGFpLT5haV9jYW5vbm5hbWUgOiAiPG5vbmU+Iik7CisgICAgaWYoQ3VybF9wcmludGFibGVfYWRkcmVzcyhhaSwgYnVmLCBzaXplb2YoYnVmKSkpCisgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgIGVsc2UKKyAgICAgIHByaW50ZigiZmFpbGVkOyAlc1xuIiwgQ3VybF9zdHJlcnJvcihjb25uLCBTT0NLRVJSTk8pKTsKKyAgfQorfQorI2Vsc2UKKyNkZWZpbmUgZHVtcF9hZGRyaW5mbyh4LHkpIEN1cmxfbm9wX3N0bXQKKyNlbmRpZgorCisvKgorICogQ3VybF9nZXRhZGRyaW5mbygpIHdoZW4gYnVpbHQgaXB2Ni1lbmFibGVkIChub24tdGhyZWFkaW5nIGFuZAorICogbm9uLWFyZXMgdmVyc2lvbikuCisgKgorICogUmV0dXJucyBuYW1lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiBob3N0bmFtZSBhbmQgcG9ydCBudW1iZXIuIElmCisgKiBzdWNjZXNzZnVsLCB0aGUgJ2FkZHJpbmZvJyBpcyByZXR1cm5lZCBhbmQgdGhlIGZvcnRoIGFyZ3VtZW50IHdpbGwgcG9pbnQgdG8KKyAqIG1lbW9yeSB3ZSBuZWVkIHRvIGZyZWUgYWZ0ZXIgdXNlLiBUaGF0IG1lbW9yeSAqTVVTVCogYmUgZnJlZWQgd2l0aAorICogQ3VybF9mcmVlYWRkcmluZm8oKSwgbm90aGluZyBlbHNlLgorICovCitDdXJsX2FkZHJpbmZvICpDdXJsX2dldGFkZHJpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndhaXRwKQoreworICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7CisgIEN1cmxfYWRkcmluZm8gKnJlczsKKyAgaW50IGVycm9yOworICBjaGFyIHNidWZbTklfTUFYU0VSVl07CisgIGNoYXIgKnNidWZwdHIgPSBOVUxMOworICBjaGFyIGFkZHJidWZbMTI4XTsKKyAgaW50IHBmOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgKndhaXRwID0gMDsgLyogc3luY2hyb25vdXMgcmVzcG9uc2Ugb25seSAqLworCisgIC8qCisgICAqIENoZWNrIGlmIGEgbGltaXRlZCBuYW1lIHJlc29sdmUgaGFzIGJlZW4gcmVxdWVzdGVkLgorICAgKi8KKyAgc3dpdGNoKGNvbm4tPmlwX3ZlcnNpb24pIHsKKyAgY2FzZSBDVVJMX0lQUkVTT0xWRV9WNDoKKyAgICBwZiA9IFBGX0lORVQ7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9JUFJFU09MVkVfVjY6CisgICAgcGYgPSBQRl9JTkVUNjsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBwZiA9IFBGX1VOU1BFQzsKKyAgICBicmVhazsKKyAgfQorCisgIGlmKChwZiAhPSBQRl9JTkVUKSAmJiAhQ3VybF9pcHY2d29ya3MoKSkKKyAgICAvKiB0aGUgc3RhY2sgc2VlbXMgdG8gYmUgYSBub24taXB2NiBvbmUgKi8KKyAgICBwZiA9IFBGX0lORVQ7CisKKyAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgIGhpbnRzLmFpX2ZhbWlseSA9IHBmOworICBoaW50cy5haV9zb2NrdHlwZSA9IGNvbm4tPnNvY2t0eXBlOworCisgIGlmKCgxID09IEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCBhZGRyYnVmKSkgfHwKKyAgICAgKDEgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGhvc3RuYW1lLCBhZGRyYnVmKSkpIHsKKyAgICAvKiB0aGUgZ2l2ZW4gYWRkcmVzcyBpcyBudW1lcmljYWwgb25seSwgcHJldmVudCBhIHJldmVyc2UgbG9va3VwICovCisgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKKyAgfQorCisgIGlmKHBvcnQpIHsKKyAgICBzbnByaW50ZihzYnVmLCBzaXplb2Yoc2J1ZiksICIlZCIsIHBvcnQpOworICAgIHNidWZwdHI9c2J1ZjsKKyAgfQorICBlcnJvciA9IEN1cmxfZ2V0YWRkcmluZm9fZXgoaG9zdG5hbWUsIHNidWZwdHIsICZoaW50cywgJnJlcyk7CisgIGlmKGVycm9yKSB7CisgICAgaW5mb2YoZGF0YSwgImdldGFkZHJpbmZvKDMpIGZhaWxlZCBmb3IgJXM6JWRcbiIsIGhvc3RuYW1lLCBwb3J0KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGR1bXBfYWRkcmluZm8oY29ubiwgcmVzKTsKKworICByZXR1cm4gcmVzOworfQorI2VuZGlmIC8qIENVUkxSRVNfU1lOQ0ggKi8KKyNlbmRpZiAvKiBDVVJMUkVTX0lQVjYgKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2hvc3RzeW4uYyBiL2N1cmwtNy4yNS4wL2xpYi9ob3N0c3luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhOTA3OQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9ob3N0c3luLmMKQEAgLTAsMCArMSw4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAvKiBmb3IgdGhlIGNsb3NlKCkgcHJvdG8gKi8KKyNlbmRpZgorI2lmZGVmIF9fVk1TCisjaW5jbHVkZSA8aW4uaD4KKyNpbmNsdWRlIDxpbmV0Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfUFJPQ0VTU19ICisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJob3N0aXAuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAic2hhcmUuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgInVybC5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogT25seSBmb3IgYnVpbGRzIHVzaW5nIHN5bmNocm9ub3VzIG5hbWUgcmVzb2x2ZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIENVUkxSRVNfU1lOQ0gKKworLyoKKyAqIEZ1bmN0aW9uIHByb3ZpZGVkIGJ5IHRoZSByZXNvbHZlciBiYWNrZW5kIHRvIHNldCBETlMgc2VydmVycyB0byB1c2UuCisgKi8KK0NVUkxjb2RlIEN1cmxfc2V0X2Ruc19zZXJ2ZXJzKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc2VydmVycykKK3sKKyAgKHZvaWQpZGF0YTsKKyAgKHZvaWQpc2VydmVyczsKKyAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKKworfQorCisjZW5kaWYgLyogdHJ1bHkgc3luYyAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2h0dHAuYyBiL2N1cmwtNy4yNS4wL2xpYi9odHRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3NmJiZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9odHRwLmMKQEAgLTAsMCArMSwzNDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInRyYW5zZmVyLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJmb3JtZGF0YS5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAiY3VybF9iYXNlNjQuaCIKKyNpbmNsdWRlICJjb29raWUuaCIKKyNpbmNsdWRlICJzdHJlcXVhbC5oIgorI2luY2x1ZGUgInNzbGdlbi5oIgorI2luY2x1ZGUgImh0dHBfZGlnZXN0LmgiCisjaW5jbHVkZSAiY3VybF9udGxtLmgiCisjaW5jbHVkZSAiY3VybF9udGxtX3diLmgiCisjaW5jbHVkZSAiaHR0cF9uZWdvdGlhdGUuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJzaGFyZS5oIgorI2luY2x1ZGUgImhvc3RpcC5oIgorI2luY2x1ZGUgImh0dHAuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgInBhcnNlZGF0ZS5oIiAvKiBmb3IgdGhlIHdlZWsgZGF5IGFuZCBtb250aCBuYW1lcyAqLworI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJjb250ZW50X2VuY29kaW5nLmgiCisjaW5jbHVkZSAiaHR0cF9wcm94eS5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAibm9uLWFzY2lpLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAqLworCitzdGF0aWMgaW50IGh0dHBfZ2V0c29ja19kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitzdGF0aWMgaW50IGh0dHBfc2hvdWxkX2ZhaWwoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKworI2lmZGVmIFVTRV9TU0wKK3N0YXRpYyBDVVJMY29kZSBodHRwc19jb25uZWN0aW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgaW50IGh0dHBzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisjZWxzZQorI2RlZmluZSBodHRwc19jb25uZWN0aW5nKHgseSkgQ1VSTEVfQ09VTEROVF9DT05ORUNUCisjZW5kaWYKKworLyoKKyAqIEhUVFAgaGFuZGxlciBpbnRlcmZhY2UuCisgKi8KK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2h0dHAgPSB7CisgICJIVFRQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBDdXJsX2h0dHAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIEN1cmxfaHR0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgQ3VybF9odHRwX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBodHRwX2dldHNvY2tfZG8sICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9IVFRQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19IVFRQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKworI2lmZGVmIFVTRV9TU0wKKy8qCisgKiBIVFRQUyBoYW5kbGVyIGludGVyZmFjZS4KKyAqLworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfaHR0cHMgPSB7CisgICJIVFRQUyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBDdXJsX2h0dHAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIEN1cmxfaHR0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgQ3VybF9odHRwX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIGh0dHBzX2Nvbm5lY3RpbmcsICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIGh0dHBzX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBodHRwX2dldHNvY2tfZG8sICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9IVFRQUywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19IVFRQIHwgQ1VSTFBST1RPX0hUVFBTLCAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9TU0wgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKyNlbmRpZgorCisKKy8qCisgKiBjaGVja2hlYWRlcnMoKSBjaGVja3MgdGhlIGxpbmtlZCBsaXN0IG9mIGN1c3RvbSBIVFRQIGhlYWRlcnMgZm9yIGEKKyAqIHBhcnRpY3VsYXIgaGVhZGVyIChwcmVmaXgpLgorICoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBoZWFkZXIgb3IgTlVMTCBpZiBub25lIG1hdGNoZWQuCisgKi8KK2NoYXIgKkN1cmxfY2hlY2toZWFkZXJzKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBjb25zdCBjaGFyICp0aGlzaGVhZGVyKQoreworICBzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZDsKKyAgc2l6ZV90IHRoaXNsZW4gPSBzdHJsZW4odGhpc2hlYWRlcik7CisKKyAgZm9yKGhlYWQgPSBkYXRhLT5zZXQuaGVhZGVyczsgaGVhZDsgaGVhZD1oZWFkLT5uZXh0KSB7CisgICAgaWYoQ3VybF9yYXdfbmVxdWFsKGhlYWQtPmRhdGEsIHRoaXNoZWFkZXIsIHRoaXNsZW4pKQorICAgICAgcmV0dXJuIGhlYWQtPmRhdGE7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBTdHJpcCBvZmYgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBmcm9tIHRoZSB2YWx1ZSBpbiB0aGUKKyAqIGdpdmVuIEhUVFAgaGVhZGVyIGxpbmUgYW5kIHJldHVybiBhIHN0cmR1cHBlZCBjb3B5LiBSZXR1cm5zIE5VTEwgaW4KKyAqIGNhc2Ugb2YgYWxsb2NhdGlvbiBmYWlsdXJlLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgaGVhZGVyIHZhbHVlCisgKiBjb25zaXN0cyBlbnRpcmVseSBvZiB3aGl0ZXNwYWNlLgorICovCitzdGF0aWMgY2hhciAqY29weV9oZWFkZXJfdmFsdWUoY29uc3QgY2hhciAqaCkKK3sKKyAgY29uc3QgY2hhciAqc3RhcnQ7CisgIGNvbnN0IGNoYXIgKmVuZDsKKyAgY2hhciAqdmFsdWU7CisgIHNpemVfdCBsZW47CisKKyAgREVCVUdBU1NFUlQoaCk7CisKKyAgLyogRmluZCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIgbmFtZSAqLworICB3aGlsZSgqaCAmJiAoKmggIT0gJzonKSkKKyAgICArK2g7CisKKyAgaWYoKmgpCisgICAgLyogU2tpcCBvdmVyIGNvbG9uICovCisgICAgKytoOworCisgIC8qIEZpbmQgdGhlIGZpcnN0IG5vbi1zcGFjZSBsZXR0ZXIgKi8KKyAgc3RhcnQgPSBoOworICB3aGlsZSgqc3RhcnQgJiYgSVNTUEFDRSgqc3RhcnQpKQorICAgIHN0YXJ0Kys7CisKKyAgLyogZGF0YSBpcyBpbiB0aGUgaG9zdCBlbmNvZGluZyBzbworICAgICB1c2UgJ1xyJyBhbmQgJ1xuJyBpbnN0ZWFkIG9mIDB4MGQgYW5kIDB4MGEgKi8KKyAgZW5kID0gc3RyY2hyKHN0YXJ0LCAnXHInKTsKKyAgaWYoIWVuZCkKKyAgICBlbmQgPSBzdHJjaHIoc3RhcnQsICdcbicpOworICBpZighZW5kKQorICAgIGVuZCA9IHN0cmNocihzdGFydCwgJ1wwJyk7CisgIGlmKCFlbmQpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogc2tpcCBhbGwgdHJhaWxpbmcgc3BhY2UgbGV0dGVycyAqLworICB3aGlsZSgoZW5kID4gc3RhcnQpICYmIElTU1BBQ0UoKmVuZCkpCisgICAgZW5kLS07CisKKyAgLyogZ2V0IGxlbmd0aCBvZiB0aGUgdHlwZSAqLworICBsZW4gPSBlbmQtc3RhcnQrMTsKKworICB2YWx1ZSA9IG1hbGxvYyhsZW4gKyAxKTsKKyAgaWYoIXZhbHVlKQorICAgIHJldHVybiBOVUxMOworCisgIG1lbWNweSh2YWx1ZSwgc3RhcnQsIGxlbik7CisgIHZhbHVlW2xlbl0gPSAwOyAvKiB6ZXJvIHRlcm1pbmF0ZSAqLworCisgIHJldHVybiB2YWx1ZTsKK30KKworLyoKKyAqIGh0dHBfb3V0cHV0X2Jhc2ljKCkgc2V0cyB1cCBhbiBBdXRob3JpemF0aW9uOiBoZWFkZXIgKG9yIHRoZSBwcm94eSB2ZXJzaW9uKQorICogZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24uCisgKgorICogUmV0dXJucyBDVVJMY29kZS4KKyAqLworc3RhdGljIENVUkxjb2RlIGh0dHBfb3V0cHV0X2Jhc2ljKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBwcm94eSkKK3sKKyAgc2l6ZV90IHNpemUgPSAwOworICBjaGFyICphdXRob3JpemF0aW9uID0gTlVMTDsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBjaGFyICoqdXNlcnA7CisgIGNvbnN0IGNoYXIgKnVzZXI7CisgIGNvbnN0IGNoYXIgKnB3ZDsKKyAgQ1VSTGNvZGUgZXJyb3I7CisKKyAgaWYocHJveHkpIHsKKyAgICB1c2VycCA9ICZjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2Q7CisgICAgdXNlciA9IGNvbm4tPnByb3h5dXNlcjsKKyAgICBwd2QgPSBjb25uLT5wcm94eXBhc3N3ZDsKKyAgfQorICBlbHNlIHsKKyAgICB1c2VycCA9ICZjb25uLT5hbGxvY3B0ci51c2VycHdkOworICAgIHVzZXIgPSBjb25uLT51c2VyOworICAgIHB3ZCA9IGNvbm4tPnBhc3N3ZDsKKyAgfQorCisgIHNucHJpbnRmKGRhdGEtPnN0YXRlLmJ1ZmZlciwgc2l6ZW9mKGRhdGEtPnN0YXRlLmJ1ZmZlciksICIlczolcyIsIHVzZXIsIHB3ZCk7CisKKyAgZXJyb3IgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuYnVmZmVyLCBzdHJsZW4oZGF0YS0+c3RhdGUuYnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF1dGhvcml6YXRpb24sICZzaXplKTsKKyAgaWYoZXJyb3IpCisgICAgcmV0dXJuIGVycm9yOworCisgIGlmKCFhdXRob3JpemF0aW9uKQorICAgIHJldHVybiBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRDsKKworICBDdXJsX3NhZmVmcmVlKCp1c2VycCk7CisgICp1c2VycCA9IGFwcmludGYoIiVzQXV0aG9yaXphdGlvbjogQmFzaWMgJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICBwcm94eT8iUHJveHktIjoiIiwKKyAgICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uKTsKKyAgZnJlZShhdXRob3JpemF0aW9uKTsKKyAgaWYoISp1c2VycCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qIHBpY2tvbmVhdXRoKCkgc2VsZWN0cyB0aGUgbW9zdCBmYXZvdXJhYmxlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBmcm9tIHRoZQorICogb25lcyBhdmFpbGFibGUgYW5kIHRoZSBvbmVzIHdlIHdhbnQuCisgKgorICogcmV0dXJuIFRSVUUgaWYgb25lIHdhcyBwaWNrZWQKKyAqLworc3RhdGljIGJvb2wgcGlja29uZWF1dGgoc3RydWN0IGF1dGggKnBpY2spCit7CisgIGJvb2wgcGlja2VkOworICAvKiBvbmx5IGRlYWwgd2l0aCBhdXRoZW50aWNhdGlvbiB3ZSB3YW50ICovCisgIGxvbmcgYXZhaWwgPSBwaWNrLT5hdmFpbCAmIHBpY2stPndhbnQ7CisgIHBpY2tlZCA9IFRSVUU7CisKKyAgLyogVGhlIG9yZGVyIG9mIHRoZXNlIGNoZWNrcyBpcyBoaWdobHkgcmVsZXZhbnQsIGFzIHRoaXMgd2lsbCBiZSB0aGUgb3JkZXIKKyAgICAgb2YgcHJlZmVyZW5jZSBpbiBjYXNlIG9mIHRoZSBleGlzdGVuY2Ugb2YgbXVsdGlwbGUgYWNjZXB0ZWQgdHlwZXMuICovCisgIGlmKGF2YWlsICYgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFKQorICAgIHBpY2stPnBpY2tlZCA9IENVUkxBVVRIX0dTU05FR09USUFURTsKKyAgZWxzZSBpZihhdmFpbCAmIENVUkxBVVRIX0RJR0VTVCkKKyAgICBwaWNrLT5waWNrZWQgPSBDVVJMQVVUSF9ESUdFU1Q7CisgIGVsc2UgaWYoYXZhaWwgJiBDVVJMQVVUSF9OVExNKQorICAgIHBpY2stPnBpY2tlZCA9IENVUkxBVVRIX05UTE07CisgIGVsc2UgaWYoYXZhaWwgJiBDVVJMQVVUSF9OVExNX1dCKQorICAgIHBpY2stPnBpY2tlZCA9IENVUkxBVVRIX05UTE1fV0I7CisgIGVsc2UgaWYoYXZhaWwgJiBDVVJMQVVUSF9CQVNJQykKKyAgICBwaWNrLT5waWNrZWQgPSBDVVJMQVVUSF9CQVNJQzsKKyAgZWxzZSB7CisgICAgcGljay0+cGlja2VkID0gQ1VSTEFVVEhfUElDS05PTkU7IC8qIHdlIHNlbGVjdCB0byB1c2Ugbm90aGluZyAqLworICAgIHBpY2tlZCA9IEZBTFNFOworICB9CisgIHBpY2stPmF2YWlsID0gQ1VSTEFVVEhfTk9ORTsgLyogY2xlYXIgaXQgaGVyZSAqLworCisgIHJldHVybiBwaWNrZWQ7Cit9CisKKy8qCisgKiBDdXJsX2h0dHBfcGVyaGFwc3Jld2luZCgpCisgKgorICogSWYgd2UgYXJlIGRvaW5nIFBPU1Qgb3IgUFVUIHsKKyAqICAgSWYgd2UgaGF2ZSBtb3JlIGRhdGEgdG8gc2VuZCB7CisgKiAgICAgSWYgd2UgYXJlIGRvaW5nIE5UTE0geworICogICAgICAgS2VlcCBzZW5kaW5nIHNpbmNlIHdlIG11c3Qgbm90IGRpc2Nvbm5lY3QKKyAqICAgICB9CisgKiAgICAgZWxzZSB7CisgKiAgICAgICBJZiB0aGVyZSBpcyBtb3JlIHRoYW4ganVzdCBhIGxpdHRsZSBkYXRhIGxlZnQgdG8gc2VuZCwgY2xvc2UKKyAqICAgICAgIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gYnkgZm9yY2UuCisgKiAgICAgfQorICogICB9CisgKiAgIElmIHdlIGhhdmUgc2VudCBhbnkgZGF0YSB7CisgKiAgICAgSWYgd2UgZG9uJ3QgaGF2ZSB0cmFjayBvZiBhbGwgdGhlIGRhdGEgeworICogICAgICAgY2FsbCBhcHAgdG8gdGVsbCBpdCB0byByZXdpbmQKKyAqICAgICB9CisgKiAgICAgZWxzZSB7CisgKiAgICAgICByZXdpbmQgaW50ZXJuYWxseSBzbyB0aGF0IHRoZSBvcGVyYXRpb24gY2FuIHJlc3RhcnQgZmluZQorICogICAgIH0KKyAqICAgfQorICogfQorICovCitzdGF0aWMgQ1VSTGNvZGUgaHR0cF9wZXJoYXBzcmV3aW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgSFRUUCAqaHR0cCA9IGRhdGEtPnN0YXRlLnByb3RvLmh0dHA7CisgIGN1cmxfb2ZmX3QgYnl0ZXNzZW50OworICBjdXJsX29mZl90IGV4cGVjdHNlbmQgPSAtMTsgLyogZGVmYXVsdCBpcyB1bmtub3duICovCisKKyAgaWYoIWh0dHApCisgICAgLyogSWYgdGhpcyBpcyBzdGlsbCBOVUxMLCB3ZSBoYXZlIG5vdCByZWFjaCB2ZXJ5IGZhciBhbmQgd2UgY2FuIHNhZmVseQorICAgICAgIHNraXAgdGhpcyByZXdpbmRpbmcgc3R1ZmYgKi8KKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgc3dpdGNoKGRhdGEtPnNldC5odHRwcmVxKSB7CisgIGNhc2UgSFRUUFJFUV9HRVQ6CisgIGNhc2UgSFRUUFJFUV9IRUFEOgorICAgIHJldHVybiBDVVJMRV9PSzsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfQorCisgIGJ5dGVzc2VudCA9IGh0dHAtPndyaXRlYnl0ZWNvdW50OworCisgIGlmKGNvbm4tPmJpdHMuYXV0aG5lZykKKyAgICAvKiBUaGlzIGlzIGEgc3RhdGUgd2hlcmUgd2UgYXJlIGtub3duIHRvIGJlIG5lZ290aWF0aW5nIGFuZCB3ZSBkb24ndCBzZW5kCisgICAgICAgYW55IGRhdGEgdGhlbi4gKi8KKyAgICBleHBlY3RzZW5kID0gMDsKKyAgZWxzZSB7CisgICAgLyogZmlndXJlIG91dCBob3cgbXVjaCBkYXRhIHdlIGFyZSBleHBlY3RlZCB0byBzZW5kICovCisgICAgc3dpdGNoKGRhdGEtPnNldC5odHRwcmVxKSB7CisgICAgY2FzZSBIVFRQUkVRX1BPU1Q6CisgICAgICBpZihkYXRhLT5zZXQucG9zdGZpZWxkc2l6ZSAhPSAtMSkKKyAgICAgICAgZXhwZWN0c2VuZCA9IGRhdGEtPnNldC5wb3N0ZmllbGRzaXplOworICAgICAgZWxzZSBpZihkYXRhLT5zZXQucG9zdGZpZWxkcykKKyAgICAgICAgZXhwZWN0c2VuZCA9IChjdXJsX29mZl90KXN0cmxlbihkYXRhLT5zZXQucG9zdGZpZWxkcyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEhUVFBSRVFfUFVUOgorICAgICAgaWYoZGF0YS0+c2V0LmluZmlsZXNpemUgIT0gLTEpCisgICAgICAgIGV4cGVjdHNlbmQgPSBkYXRhLT5zZXQuaW5maWxlc2l6ZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSFRUUFJFUV9QT1NUX0ZPUk06CisgICAgICBleHBlY3RzZW5kID0gaHR0cC0+cG9zdHNpemU7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgY29ubi0+Yml0cy5yZXdpbmRhZnRlcnNlbmQgPSBGQUxTRTsgLyogZGVmYXVsdCAqLworCisgIGlmKChleHBlY3RzZW5kID09IC0xKSB8fCAoZXhwZWN0c2VuZCA+IGJ5dGVzc2VudCkpIHsKKyAgICAvKiBUaGVyZSBpcyBzdGlsbCBkYXRhIGxlZnQgdG8gc2VuZCAqLworICAgIGlmKChkYXRhLT5zdGF0ZS5hdXRocHJveHkucGlja2VkID09IENVUkxBVVRIX05UTE0pIHx8CisgICAgICAgKGRhdGEtPnN0YXRlLmF1dGhob3N0LnBpY2tlZCA9PSBDVVJMQVVUSF9OVExNKSB8fAorICAgICAgIChkYXRhLT5zdGF0ZS5hdXRocHJveHkucGlja2VkID09IENVUkxBVVRIX05UTE1fV0IpIHx8CisgICAgICAgKGRhdGEtPnN0YXRlLmF1dGhob3N0LnBpY2tlZCA9PSBDVVJMQVVUSF9OVExNX1dCKSkgeworICAgICAgaWYoKChleHBlY3RzZW5kIC0gYnl0ZXNzZW50KSA8IDIwMDApIHx8CisgICAgICAgICAoY29ubi0+bnRsbS5zdGF0ZSAhPSBOVExNU1RBVEVfTk9ORSkpIHsKKyAgICAgICAgLyogVGhlIE5UTE0tbmVnb3RpYXRpb24gaGFzIHN0YXJ0ZWQgKk9SKiB0aGVyZSBpcyBqdXN0IGEgbGl0dGxlICg8MkspCisgICAgICAgICAgIGRhdGEgbGVmdCB0byBzZW5kLCBrZWVwIG9uIHNlbmRpbmcuICovCisKKyAgICAgICAgLyogcmV3aW5kIGRhdGEgd2hlbiBjb21wbGV0ZWx5IGRvbmUgc2VuZGluZyEgKi8KKyAgICAgICAgaWYoIWNvbm4tPmJpdHMuYXV0aG5lZykgeworICAgICAgICAgIGNvbm4tPmJpdHMucmV3aW5kYWZ0ZXJzZW5kID0gVFJVRTsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiUmV3aW5kIHN0cmVhbSBhZnRlciBzZW5kXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICAgIH0KKyAgICAgIGlmKGNvbm4tPmJpdHMuY2xvc2UpCisgICAgICAgIC8qIHRoaXMgaXMgYWxyZWFkeSBtYXJrZWQgdG8gZ2V0IGNsb3NlZCAqLworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgICAgIGluZm9mKGRhdGEsICJOVExNIHNlbmQsIGNsb3NlIGluc3RlYWQgb2Ygc2VuZGluZyAlIiBGT1JNQVRfT0ZGX1QKKyAgICAgICAgICAgICIgYnl0ZXNcbiIsIChjdXJsX29mZl90KShleHBlY3RzZW5kIC0gYnl0ZXNzZW50KSk7CisgICAgfQorCisgICAgLyogVGhpcyBpcyBub3QgTlRMTSBvciBOVExNIHdpdGggbWFueSBieXRlcyBsZWZ0IHRvIHNlbmQ6IGNsb3NlCisgICAgICovCisgICAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7CisgICAgZGF0YS0+cmVxLnNpemUgPSAwOyAvKiBkb24ndCBkb3dubG9hZCBhbnkgbW9yZSB0aGFuIDAgYnl0ZXMgKi8KKworICAgIC8qIFRoZXJlIHN0aWxsIGlzIGRhdGEgbGVmdCB0byBzZW5kLCBidXQgdGhpcyBjb25uZWN0aW9uIGlzIG1hcmtlZCBmb3IKKyAgICAgICBjbG9zdXJlIHNvIHdlIGNhbiBzYWZlbHkgZG8gdGhlIHJld2luZCByaWdodCBub3cgKi8KKyAgfQorCisgIGlmKGJ5dGVzc2VudCkKKyAgICAvKiB3ZSByZXdpbmQgbm93IGF0IG9uY2Ugc2luY2UgaWYgd2UgYWxyZWFkeSBzZW50IHNvbWV0aGluZyAqLworICAgIHJldHVybiBDdXJsX3JlYWRyZXdpbmQoY29ubik7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogQ3VybF9odHRwX2F1dGhfYWN0KCkgZ2V0cyBjYWxsZWQgd2hlbiBhbGwgSFRUUCBoZWFkZXJzIGhhdmUgYmVlbiByZWNlaXZlZAorICogYW5kIGl0IGNoZWNrcyB3aGF0IGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgdGhhdCBhcmUgYXZhaWxhYmxlIGFuZCBkZWNpZGVzCisgKiB3aGljaCBvbmUgKGlmIGFueSkgdG8gdXNlLiBJdCB3aWxsIHNldCAnbmV3dXJsJyBpZiBhbiBhdXRoIG1ldGhvZCB3YXMKKyAqIHBpY2tlZC4KKyAqLworCitDVVJMY29kZSBDdXJsX2h0dHBfYXV0aF9hY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGJvb2wgcGlja2hvc3QgPSBGQUxTRTsKKyAgYm9vbCBwaWNrcHJveHkgPSBGQUxTRTsKKyAgQ1VSTGNvZGUgY29kZSA9IENVUkxFX09LOworCisgIGlmKDEwMCA8PSBkYXRhLT5yZXEuaHR0cGNvZGUgJiYgMTk5ID49IGRhdGEtPnJlcS5odHRwY29kZSkKKyAgICAvKiB0aGlzIGlzIGEgdHJhbnNpZW50IHJlc3BvbnNlIGNvZGUsIGlnbm9yZSAqLworICAgIHJldHVybiBDVVJMRV9PSzsKKworICBpZihkYXRhLT5zdGF0ZS5hdXRocHJvYmxlbSkKKyAgICByZXR1cm4gZGF0YS0+c2V0Lmh0dHBfZmFpbF9vbl9lcnJvcj9DVVJMRV9IVFRQX1JFVFVSTkVEX0VSUk9SOkNVUkxFX09LOworCisgIGlmKGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgJiYKKyAgICAgKChkYXRhLT5yZXEuaHR0cGNvZGUgPT0gNDAxKSB8fAorICAgICAgKGNvbm4tPmJpdHMuYXV0aG5lZyAmJiBkYXRhLT5yZXEuaHR0cGNvZGUgPCAzMDApKSkgeworICAgIHBpY2tob3N0ID0gcGlja29uZWF1dGgoJmRhdGEtPnN0YXRlLmF1dGhob3N0KTsKKyAgICBpZighcGlja2hvc3QpCisgICAgICBkYXRhLT5zdGF0ZS5hdXRocHJvYmxlbSA9IFRSVUU7CisgIH0KKyAgaWYoY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCAmJgorICAgICAoKGRhdGEtPnJlcS5odHRwY29kZSA9PSA0MDcpIHx8CisgICAgICAoY29ubi0+Yml0cy5hdXRobmVnICYmIGRhdGEtPnJlcS5odHRwY29kZSA8IDMwMCkpKSB7CisgICAgcGlja3Byb3h5ID0gcGlja29uZWF1dGgoJmRhdGEtPnN0YXRlLmF1dGhwcm94eSk7CisgICAgaWYoIXBpY2twcm94eSkKKyAgICAgIGRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtID0gVFJVRTsKKyAgfQorCisgIGlmKHBpY2tob3N0IHx8IHBpY2twcm94eSkgeworICAgIC8qIEluIGNhc2UgdGhpcyBpcyBHU1MgYXV0aCwgdGhlIG5ld3VybCBmaWVsZCBpcyBhbHJlYWR5IGFsbG9jYXRlZCBzbworICAgICAgIHdlIG11c3QgbWFrZSBzdXJlIHRvIGZyZWUgaXQgYmVmb3JlIGFsbG9jYXRpbmcgYSBuZXcgb25lLiBBcyBmaWd1cmVkCisgICAgICAgb3V0IGluIGJ1ZyAjMjI4NDM4NiAqLworICAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+cmVxLm5ld3VybCk7CisgICAgZGF0YS0+cmVxLm5ld3VybCA9IHN0cmR1cChkYXRhLT5jaGFuZ2UudXJsKTsgLyogY2xvbmUgVVJMICovCisgICAgaWYoIWRhdGEtPnJlcS5uZXd1cmwpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIGlmKChkYXRhLT5zZXQuaHR0cHJlcSAhPSBIVFRQUkVRX0dFVCkgJiYKKyAgICAgICAoZGF0YS0+c2V0Lmh0dHByZXEgIT0gSFRUUFJFUV9IRUFEKSAmJgorICAgICAgICFjb25uLT5iaXRzLnJld2luZGFmdGVyc2VuZCkgeworICAgICAgY29kZSA9IGh0dHBfcGVyaGFwc3Jld2luZChjb25uKTsKKyAgICAgIGlmKGNvZGUpCisgICAgICAgIHJldHVybiBjb2RlOworICAgIH0KKyAgfQorCisgIGVsc2UgaWYoKGRhdGEtPnJlcS5odHRwY29kZSA8IDMwMCkgJiYKKyAgICAgICAgICAoIWRhdGEtPnN0YXRlLmF1dGhob3N0LmRvbmUpICYmCisgICAgICAgICAgY29ubi0+Yml0cy5hdXRobmVnKSB7CisgICAgLyogbm8gKGtub3duKSBhdXRoZW50aWNhdGlvbiBhdmFpbGFibGUsCisgICAgICAgYXV0aGVudGljYXRpb24gaXMgbm90ICJkb25lIiB5ZXQgYW5kCisgICAgICAgbm8gYXV0aGVudGljYXRpb24gc2VlbXMgdG8gYmUgcmVxdWlyZWQgYW5kCisgICAgICAgd2UgZGlkbid0IHRyeSBIRUFEIG9yIEdFVCAqLworICAgIGlmKChkYXRhLT5zZXQuaHR0cHJlcSAhPSBIVFRQUkVRX0dFVCkgJiYKKyAgICAgICAoZGF0YS0+c2V0Lmh0dHByZXEgIT0gSFRUUFJFUV9IRUFEKSkgeworICAgICAgZGF0YS0+cmVxLm5ld3VybCA9IHN0cmR1cChkYXRhLT5jaGFuZ2UudXJsKTsgLyogY2xvbmUgVVJMICovCisgICAgICBpZighZGF0YS0+cmVxLm5ld3VybCkKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICBkYXRhLT5zdGF0ZS5hdXRoaG9zdC5kb25lID0gVFJVRTsKKyAgICB9CisgIH0KKyAgaWYoaHR0cF9zaG91bGRfZmFpbChjb25uKSkgeworICAgIGZhaWxmIChkYXRhLCAiVGhlIHJlcXVlc3RlZCBVUkwgcmV0dXJuZWQgZXJyb3I6ICVkIiwKKyAgICAgICAgICAgZGF0YS0+cmVxLmh0dHBjb2RlKTsKKyAgICBjb2RlID0gQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUjsKKyAgfQorCisgIHJldHVybiBjb2RlOworfQorCisKKy8qCisgKiBPdXRwdXQgdGhlIGNvcnJlY3QgYXV0aGVudGljYXRpb24gaGVhZGVyIGRlcGVuZGluZyBvbiB0aGUgYXV0aCB0eXBlCisgKiBhbmQgd2hldGhlciBvciBub3QgaXQgaXMgdG8gYSBwcm94eS4KKyAqLworc3RhdGljIENVUkxjb2RlCitvdXRwdXRfYXV0aF9oZWFkZXJzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1dGggKmF1dGhzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJveHkpCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgY29uc3QgY2hhciAqYXV0aD1OVUxMOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyNpZmRlZiBVU0VfSFRUUF9ORUdPVElBVEUKKyAgc3RydWN0IG5lZ290aWF0ZWRhdGEgKm5lZ2RhdGEgPSBwcm94eT8KKyAgICAmZGF0YS0+c3RhdGUucHJveHluZWc6JmRhdGEtPnN0YXRlLm5lZ290aWF0ZTsKKyNlbmRpZgorCisjaWZkZWYgQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRICisgICh2b2lkKXJlcXVlc3Q7CisgICh2b2lkKXBhdGg7CisjZW5kaWYKKworI2lmZGVmIFVTRV9IVFRQX05FR09USUFURQorICBuZWdkYXRhLT5zdGF0ZSA9IEdTU19BVVRITk9ORTsKKyAgaWYoKGF1dGhzdGF0dXMtPnBpY2tlZCA9PSBDVVJMQVVUSF9HU1NORUdPVElBVEUpICYmCisgICAgIG5lZ2RhdGEtPmNvbnRleHQgJiYgIUdTU19FUlJPUihuZWdkYXRhLT5zdGF0dXMpKSB7CisgICAgYXV0aD0iR1NTLU5lZ290aWF0ZSI7CisgICAgcmVzdWx0ID0gQ3VybF9vdXRwdXRfbmVnb3RpYXRlKGNvbm4sIHByb3h5KTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dGhzdGF0dXMtPmRvbmUgPSBUUlVFOworICAgIG5lZ2RhdGEtPnN0YXRlID0gR1NTX0FVVEhTRU5UOworICB9CisgIGVsc2UKKyNlbmRpZgorI2lmZGVmIFVTRV9OVExNCisgIGlmKGF1dGhzdGF0dXMtPnBpY2tlZCA9PSBDVVJMQVVUSF9OVExNKSB7CisgICAgYXV0aD0iTlRMTSI7CisgICAgcmVzdWx0ID0gQ3VybF9vdXRwdXRfbnRsbShjb25uLCBwcm94eSk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKFVTRV9OVExNKSAmJiBkZWZpbmVkKE5UTE1fV0JfRU5BQkxFRCkKKyAgaWYoYXV0aHN0YXR1cy0+cGlja2VkID09IENVUkxBVVRIX05UTE1fV0IpIHsKKyAgICBhdXRoPSJOVExNX1dCIjsKKyAgICByZXN1bHQgPSBDdXJsX291dHB1dF9udGxtX3diKGNvbm4sIHByb3h5KTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisgIGVsc2UKKyNlbmRpZgorI2lmbmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgKKyAgaWYoYXV0aHN0YXR1cy0+cGlja2VkID09IENVUkxBVVRIX0RJR0VTVCkgeworICAgIGF1dGg9IkRpZ2VzdCI7CisgICAgcmVzdWx0ID0gQ3VybF9vdXRwdXRfZGlnZXN0KGNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKXJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopcGF0aCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBlbHNlCisjZW5kaWYKKyAgaWYoYXV0aHN0YXR1cy0+cGlja2VkID09IENVUkxBVVRIX0JBU0lDKSB7CisgICAgLyogQmFzaWMgKi8KKyAgICBpZigocHJveHkgJiYgY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCAmJgorICAgICAgICFDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiUHJveHktYXV0aG9yaXphdGlvbjoiKSkgfHwKKyAgICAgICAoIXByb3h5ICYmIGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgJiYKKyAgICAgICAhQ3VybF9jaGVja2hlYWRlcnMoZGF0YSwgIkF1dGhvcml6YXRpb246IikpKSB7CisgICAgICBhdXRoPSJCYXNpYyI7CisgICAgICByZXN1bHQgPSBodHRwX291dHB1dF9iYXNpYyhjb25uLCBwcm94eSk7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIC8qIE5PVEU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIHNldCAnZG9uZScgVFJVRSwgYXMgdGhlIG90aGVyIGF1dGgKKyAgICAgICBmdW5jdGlvbnMgd29yayB0aGF0IHdheSAqLworICAgIGF1dGhzdGF0dXMtPmRvbmUgPSBUUlVFOworICB9CisKKyAgaWYoYXV0aCkgeworICAgIGluZm9mKGRhdGEsICIlcyBhdXRoIHVzaW5nICVzIHdpdGggdXNlciAnJXMnXG4iLAorICAgICAgICAgIHByb3h5PyJQcm94eSI6IlNlcnZlciIsIGF1dGgsCisgICAgICAgICAgcHJveHk/KGNvbm4tPnByb3h5dXNlcj9jb25uLT5wcm94eXVzZXI6IiIpOgorICAgICAgICAgICAgICAgIChjb25uLT51c2VyP2Nvbm4tPnVzZXI6IiIpKTsKKyAgICBhdXRoc3RhdHVzLT5tdWx0aSA9ICghYXV0aHN0YXR1cy0+ZG9uZSkgPyBUUlVFIDogRkFMU0U7CisgIH0KKyAgZWxzZQorICAgIGF1dGhzdGF0dXMtPm11bHRpID0gRkFMU0U7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKioKKyAqIEN1cmxfaHR0cF9vdXRwdXRfYXV0aCgpIHNldHVwcyB0aGUgYXV0aGVudGljYXRpb24gaGVhZGVycyBmb3IgdGhlCisgKiBob3N0L3Byb3h5IGFuZCB0aGUgY29ycmVjdCBhdXRoZW50aWNhdGlvbgorICogbWV0aG9kLiBjb25uLT5kYXRhLT5zdGF0ZS5hdXRoZG9uZSBpcyBzZXQgdG8gVFJVRSB3aGVuIGF1dGhlbnRpY2F0aW9uIGlzCisgKiBkb25lLgorICoKKyAqIEBwYXJhbSBjb25uIGFsbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBjb25uZWN0aW9uCisgKiBAcGFyYW0gcmVxdWVzdCBwb2ludGVyIHRvIHRoZSByZXF1ZXN0IGtleXdvcmQKKyAqIEBwYXJhbSBwYXRoIHBvaW50ZXIgdG8gdGhlIHJlcXVlc3RlZCBwYXRoCisgKiBAcGFyYW0gcHJveHl0dW5uZWwgYm9vbGVhbiBpZiB0aGlzIGlzIHRoZSByZXF1ZXN0IHNldHRpbmcgdXAgYSAicHJveHkKKyAqIHR1bm5lbCIKKyAqCisgKiBAcmV0dXJucyBDVVJMY29kZQorICovCitDVVJMY29kZQorQ3VybF9odHRwX291dHB1dF9hdXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcm94eXR1bm5lbCkgLyogVFJVRSBpZiB0aGlzIGlzIHRoZSByZXF1ZXN0IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cCB0aGUgcHJveHkgdHVubmVsICovCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBhdXRoICphdXRoaG9zdDsKKyAgc3RydWN0IGF1dGggKmF1dGhwcm94eTsKKworICBERUJVR0FTU0VSVChkYXRhKTsKKworICBhdXRoaG9zdCA9ICZkYXRhLT5zdGF0ZS5hdXRoaG9zdDsKKyAgYXV0aHByb3h5ID0gJmRhdGEtPnN0YXRlLmF1dGhwcm94eTsKKworICBpZigoY29ubi0+Yml0cy5odHRwcHJveHkgJiYgY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCkgfHwKKyAgICAgY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCkKKyAgICAvKiBjb250aW51ZSBwbGVhc2UgKi8gOworICBlbHNlIHsKKyAgICBhdXRoaG9zdC0+ZG9uZSA9IFRSVUU7CisgICAgYXV0aHByb3h5LT5kb25lID0gVFJVRTsKKyAgICByZXR1cm4gQ1VSTEVfT0s7IC8qIG5vIGF1dGhlbnRpY2F0aW9uIHdpdGggbm8gdXNlciBvciBwYXNzd29yZCAqLworICB9CisKKyAgaWYoYXV0aGhvc3QtPndhbnQgJiYgIWF1dGhob3N0LT5waWNrZWQpCisgICAgLyogVGhlIGFwcCBoYXMgc2VsZWN0ZWQgb25lIG9yIG1vcmUgbWV0aG9kcywgYnV0IG5vbmUgaGFzIGJlZW4gcGlja2VkCisgICAgICAgc28gZmFyIGJ5IGEgc2VydmVyIHJvdW5kLXRyaXAuIFRoZW4gd2Ugc2V0IHRoZSBwaWNrZWQgb25lIHRvIHRoZQorICAgICAgIHdhbnQgb25lLCBhbmQgaWYgdGhpcyBpcyBvbmUgc2luZ2xlIGJpdCBpdCdsbCBiZSB1c2VkIGluc3RhbnRseS4gKi8KKyAgICBhdXRoaG9zdC0+cGlja2VkID0gYXV0aGhvc3QtPndhbnQ7CisKKyAgaWYoYXV0aHByb3h5LT53YW50ICYmICFhdXRocHJveHktPnBpY2tlZCkKKyAgICAvKiBUaGUgYXBwIGhhcyBzZWxlY3RlZCBvbmUgb3IgbW9yZSBtZXRob2RzLCBidXQgbm9uZSBoYXMgYmVlbiBwaWNrZWQgc28KKyAgICAgICBmYXIgYnkgYSBwcm94eSByb3VuZC10cmlwLiBUaGVuIHdlIHNldCB0aGUgcGlja2VkIG9uZSB0byB0aGUgd2FudCBvbmUsCisgICAgICAgYW5kIGlmIHRoaXMgaXMgb25lIHNpbmdsZSBiaXQgaXQnbGwgYmUgdXNlZCBpbnN0YW50bHkuICovCisgICAgYXV0aHByb3h5LT5waWNrZWQgPSBhdXRocHJveHktPndhbnQ7CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIC8qIFNlbmQgcHJveHkgYXV0aGVudGljYXRpb24gaGVhZGVyIGlmIG5lZWRlZCAqLworICBpZihjb25uLT5iaXRzLmh0dHBwcm94eSAmJgorICAgICAgKGNvbm4tPmJpdHMudHVubmVsX3Byb3h5ID09IHByb3h5dHVubmVsKSkgeworICAgIHJlc3VsdCA9IG91dHB1dF9hdXRoX2hlYWRlcnMoY29ubiwgYXV0aHByb3h5LCByZXF1ZXN0LCBwYXRoLCBUUlVFKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisgIGVsc2UKKyNlbHNlCisgICh2b2lkKXByb3h5dHVubmVsOworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9QUk9YWSAqLworICAgIC8qIHdlIGhhdmUgbm8gcHJveHkgc28gbGV0J3MgcHJldGVuZCB3ZSdyZSBkb25lIGF1dGhlbnRpY2F0aW5nCisgICAgICAgd2l0aCBpdCAqLworICAgIGF1dGhwcm94eS0+ZG9uZSA9IFRSVUU7CisKKyAgLyogVG8gcHJldmVudCB0aGUgdXNlcitwYXNzd29yZCB0byBnZXQgc2VudCB0byBvdGhlciB0aGFuIHRoZSBvcmlnaW5hbAorICAgICBob3N0IGR1ZSB0byBhIGxvY2F0aW9uLWZvbGxvdywgd2UgZG8gc29tZSB3ZWlyZG8gY2hlY2tzIGhlcmUgKi8KKyAgaWYoIWRhdGEtPnN0YXRlLnRoaXNfaXNfYV9mb2xsb3cgfHwKKyAgICAgY29ubi0+Yml0cy5uZXRyYyB8fAorICAgICAhZGF0YS0+c3RhdGUuZmlyc3RfaG9zdCB8fAorICAgICBkYXRhLT5zZXQuaHR0cF9kaXNhYmxlX2hvc3RuYW1lX2NoZWNrX2JlZm9yZV9hdXRoZW50aWNhdGlvbiB8fAorICAgICBDdXJsX3Jhd19lcXVhbChkYXRhLT5zdGF0ZS5maXJzdF9ob3N0LCBjb25uLT5ob3N0Lm5hbWUpKSB7CisgICAgcmVzdWx0ID0gb3V0cHV0X2F1dGhfaGVhZGVycyhjb25uLCBhdXRoaG9zdCwgcmVxdWVzdCwgcGF0aCwgRkFMU0UpOworICB9CisgIGVsc2UKKyAgICBhdXRoaG9zdC0+ZG9uZSA9IFRSVUU7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKgorICogQ3VybF9odHRwX2lucHV0X2F1dGgoKSBkZWFscyB3aXRoIFByb3h5LUF1dGhlbnRpY2F0ZTogYW5kIFdXVy1BdXRoZW50aWNhdGU6CisgKiBoZWFkZXJzLiBUaGV5IGFyZSBkZWFsdCB3aXRoIGJvdGggaW4gdGhlIHRyYW5zZmVyLmMgbWFpbiBsb29wIGFuZCBpbiB0aGUKKyAqIHByb3h5IENPTk5FQ1QgbG9vcC4KKyAqLworCitDVVJMY29kZSBDdXJsX2h0dHBfaW5wdXRfYXV0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaHR0cGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpoZWFkZXIpIC8qIHRoZSBmaXJzdCBub24tc3BhY2UgKi8KK3sKKyAgLyoKKyAgICogVGhpcyByZXNvdXJjZSByZXF1aXJlcyBhdXRoZW50aWNhdGlvbgorICAgKi8KKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIGxvbmcgKmF2YWlscDsKKyAgY29uc3QgY2hhciAqc3RhcnQ7CisgIHN0cnVjdCBhdXRoICphdXRocDsKKworICBpZihodHRwY29kZSA9PSA0MDcpIHsKKyAgICBzdGFydCA9IGhlYWRlcitzdHJsZW4oIlByb3h5LWF1dGhlbnRpY2F0ZToiKTsKKyAgICBhdmFpbHAgPSAmZGF0YS0+aW5mby5wcm94eWF1dGhhdmFpbDsKKyAgICBhdXRocCA9ICZkYXRhLT5zdGF0ZS5hdXRocHJveHk7CisgIH0KKyAgZWxzZSB7CisgICAgc3RhcnQgPSBoZWFkZXIrc3RybGVuKCJXV1ctQXV0aGVudGljYXRlOiIpOworICAgIGF2YWlscCA9ICZkYXRhLT5pbmZvLmh0dHBhdXRoYXZhaWw7CisgICAgYXV0aHAgPSAmZGF0YS0+c3RhdGUuYXV0aGhvc3Q7CisgIH0KKworICAvKiBwYXNzIGFsbCB3aGl0ZSBzcGFjZXMgKi8KKyAgd2hpbGUoKnN0YXJ0ICYmIElTU1BBQ0UoKnN0YXJ0KSkKKyAgICBzdGFydCsrOworCisgIC8qCisgICAqIEhlcmUgd2UgY2hlY2sgaWYgd2Ugd2FudCB0aGUgc3BlY2lmaWMgc2luZ2xlIGF1dGhlbnRpY2F0aW9uICh1c2luZyA9PSkgYW5kCisgICAqIGlmIHdlIGRvLCB3ZSBpbml0aWF0ZSB1c2FnZSBvZiBpdC4KKyAgICoKKyAgICogSWYgdGhlIHByb3ZpZGVkIGF1dGhlbnRpY2F0aW9uIGlzIHdhbnRlZCBhcyBvbmUgb3V0IG9mIHNldmVyYWwgYWNjZXB0ZWQKKyAgICogdHlwZXMgKHVzaW5nICYpLCB3ZSBPUiB0aGlzIGF1dGhlbnRpY2F0aW9uIHR5cGUgdG8gdGhlIGF1dGhhdmFpbAorICAgKiB2YXJpYWJsZS4KKyAgICoKKyAgICogTm90ZToKKyAgICoKKyAgICogLT5waWNrZWQgaXMgZmlyc3Qgc2V0IHRvIHRoZSAnd2FudCcgdmFsdWUgKG9uZSBvciBtb3JlIGJpdHMpIGJlZm9yZSB0aGUKKyAgICogcmVxdWVzdCBpcyBzZW50LCBhbmQgdGhlbiBpdCBpcyBhZ2FpbiBzZXQgX2FmdGVyXyBhbGwgcmVzcG9uc2UgNDAxLzQwNworICAgKiBoZWFkZXJzIGhhdmUgYmVlbiByZWNlaXZlZCBidXQgdGhlbiBvbmx5IHRvIGEgc2luZ2xlIHByZWZlcnJlZCBtZXRob2QKKyAgICogKGJpdCkuCisgICAqCisgICAqLworCisgIHdoaWxlKCpzdGFydCkgeworI2lmZGVmIFVTRV9IVFRQX05FR09USUFURQorICAgIGlmKGNoZWNrcHJlZml4KCJHU1MtTmVnb3RpYXRlIiwgc3RhcnQpIHx8CisgICAgICAgY2hlY2twcmVmaXgoIk5lZ290aWF0ZSIsIHN0YXJ0KSkgeworICAgICAgaW50IG5lZzsKKyAgICAgICphdmFpbHAgfD0gQ1VSTEFVVEhfR1NTTkVHT1RJQVRFOworICAgICAgYXV0aHAtPmF2YWlsIHw9IENVUkxBVVRIX0dTU05FR09USUFURTsKKworICAgICAgaWYoYXV0aHAtPnBpY2tlZCA9PSBDVVJMQVVUSF9HU1NORUdPVElBVEUpIHsKKyAgICAgICAgaWYoZGF0YS0+c3RhdGUubmVnb3RpYXRlLnN0YXRlID09IEdTU19BVVRIU0VOVCkgeworICAgICAgICAgIC8qIGlmIHdlIHNlbnQgR1NTIGF1dGhlbnRpY2F0aW9uIGluIHRoZSBvdXRnb2luZyByZXF1ZXN0IGFuZCB3ZSBnZXQKKyAgICAgICAgICAgICB0aGlzIGJhY2ssIHdlJ3JlIGluIHRyb3VibGUgKi8KKyAgICAgICAgICBpbmZvZihkYXRhLCAiQXV0aGVudGljYXRpb24gcHJvYmxlbS4gSWdub3JpbmcgdGhpcy5cbiIpOworICAgICAgICAgIGRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBuZWcgPSBDdXJsX2lucHV0X25lZ290aWF0ZShjb25uLCAoYm9vbCkoaHR0cGNvZGUgPT0gNDA3KSwgc3RhcnQpOworICAgICAgICAgIGlmKG5lZyA9PSAwKSB7CisgICAgICAgICAgICBERUJVR0FTU0VSVCghZGF0YS0+cmVxLm5ld3VybCk7CisgICAgICAgICAgICBkYXRhLT5yZXEubmV3dXJsID0gc3RyZHVwKGRhdGEtPmNoYW5nZS51cmwpOworICAgICAgICAgICAgaWYoIWRhdGEtPnJlcS5uZXd1cmwpCisgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgZGF0YS0+c3RhdGUuYXV0aHByb2JsZW0gPSBGQUxTRTsKKyAgICAgICAgICAgIC8qIHdlIHJlY2VpdmVkIEdTUyBhdXRoIGluZm8gYW5kIHdlIGRlYWx0IHdpdGggaXQgZmluZSAqLworICAgICAgICAgICAgZGF0YS0+c3RhdGUubmVnb3RpYXRlLnN0YXRlID0gR1NTX0FVVEhSRUNWOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hdXRocHJvYmxlbSA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgVVNFX05UTE0KKyAgICAgIC8qIE5UTE0gc3VwcG9ydCByZXF1aXJlcyB0aGUgU1NMIGNyeXB0byBsaWJzICovCisgICAgICBpZihjaGVja3ByZWZpeCgiTlRMTSIsIHN0YXJ0KSkgeworICAgICAgICAqYXZhaWxwIHw9IENVUkxBVVRIX05UTE07CisgICAgICAgIGF1dGhwLT5hdmFpbCB8PSBDVVJMQVVUSF9OVExNOworICAgICAgICBpZihhdXRocC0+cGlja2VkID09IENVUkxBVVRIX05UTE0gfHwKKyAgICAgICAgICAgYXV0aHAtPnBpY2tlZCA9PSBDVVJMQVVUSF9OVExNX1dCKSB7CisgICAgICAgICAgLyogTlRMTSBhdXRoZW50aWNhdGlvbiBpcyBwaWNrZWQgYW5kIGFjdGl2YXRlZCAqLworICAgICAgICAgIENVUkxjb2RlIG50bG0gPQorICAgICAgICAgICAgQ3VybF9pbnB1dF9udGxtKGNvbm4sIChodHRwY29kZSA9PSA0MDcpP1RSVUU6RkFMU0UsIHN0YXJ0KTsKKyAgICAgICAgICBpZihDVVJMRV9PSyA9PSBudGxtKSB7CisgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hdXRocHJvYmxlbSA9IEZBTFNFOworI2lmZGVmIE5UTE1fV0JfRU5BQkxFRAorICAgICAgICAgICAgaWYoYXV0aHAtPnBpY2tlZCA9PSBDVVJMQVVUSF9OVExNX1dCKSB7CisgICAgICAgICAgICAgICphdmFpbHAgJj0gfkNVUkxBVVRIX05UTE07CisgICAgICAgICAgICAgIGF1dGhwLT5hdmFpbCAmPSB+Q1VSTEFVVEhfTlRMTTsKKyAgICAgICAgICAgICAgKmF2YWlscCB8PSBDVVJMQVVUSF9OVExNX1dCOworICAgICAgICAgICAgICBhdXRocC0+YXZhaWwgfD0gQ1VSTEFVVEhfTlRMTV9XQjsKKworICAgICAgICAgICAgICAvKiBHZXQgdGhlIGNoYWxsZW5nZS1tZXNzYWdlIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvCisgICAgICAgICAgICAgICAqIG50bG1fYXV0aCBmb3IgZ2VuZXJhdGluZyB0aGUgdHlwZSAzIG1lc3NhZ2UgbGF0ZXIgKi8KKyAgICAgICAgICAgICAgd2hpbGUoKnN0YXJ0ICYmIElTU1BBQ0UoKnN0YXJ0KSkKKyAgICAgICAgICAgICAgICBzdGFydCsrOworICAgICAgICAgICAgICBpZihjaGVja3ByZWZpeCgiTlRMTSIsIHN0YXJ0KSkgeworICAgICAgICAgICAgICAgIHN0YXJ0ICs9IHN0cmxlbigiTlRMTSIpOworICAgICAgICAgICAgICAgIHdoaWxlKCpzdGFydCAmJiBJU1NQQUNFKCpzdGFydCkpCisgICAgICAgICAgICAgICAgICBzdGFydCsrOworICAgICAgICAgICAgICAgIGlmKCpzdGFydCkKKyAgICAgICAgICAgICAgICAgIGlmKChjb25uLT5jaGFsbGVuZ2VfaGVhZGVyID0gc3RyZHVwKHN0YXJ0KSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGluZm9mKGRhdGEsICJBdXRoZW50aWNhdGlvbiBwcm9ibGVtLiBJZ25vcmluZyB0aGlzLlxuIik7CisgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hdXRocHJvYmxlbSA9IFRSVUU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRICisgICAgICAgIGlmKGNoZWNrcHJlZml4KCJEaWdlc3QiLCBzdGFydCkpIHsKKyAgICAgICAgICBpZigoYXV0aHAtPmF2YWlsICYgQ1VSTEFVVEhfRElHRVNUKSAhPSAwKSB7CisgICAgICAgICAgICBpbmZvZihkYXRhLCAiSWdub3JpbmcgZHVwbGljYXRlIGRpZ2VzdCBhdXRoIGhlYWRlci5cbiIpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENVUkxkaWdlc3QgZGlnOworICAgICAgICAgICAgKmF2YWlscCB8PSBDVVJMQVVUSF9ESUdFU1Q7CisgICAgICAgICAgICBhdXRocC0+YXZhaWwgfD0gQ1VSTEFVVEhfRElHRVNUOworCisgICAgICAgICAgICAvKiBXZSBjYWxsIHRoaXMgZnVuY3Rpb24gb24gaW5wdXQgRGlnZXN0IGhlYWRlcnMgZXZlbiBpZiBEaWdlc3QKKyAgICAgICAgICAgICAqIGF1dGhlbnRpY2F0aW9uIGlzbid0IGFjdGl2YXRlZCB5ZXQsIGFzIHdlIG5lZWQgdG8gc3RvcmUgdGhlCisgICAgICAgICAgICAgKiBpbmNvbWluZyBkYXRhIGZyb20gdGhpcyBoZWFkZXIgaW4gY2FzZSB3ZSBhcmUgZ29ubmEgdXNlCisgICAgICAgICAgICAgKiBEaWdlc3QuICovCisgICAgICAgICAgICBkaWcgPSBDdXJsX2lucHV0X2RpZ2VzdChjb25uLCAoaHR0cGNvZGUgPT0gNDA3KT9UUlVFOkZBTFNFLCBzdGFydCk7CisKKyAgICAgICAgICAgIGlmKENVUkxESUdFU1RfRklORSAhPSBkaWcpIHsKKyAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIHByb2JsZW0uIElnbm9yaW5nIHRoaXMuXG4iKTsKKyAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuYXV0aHByb2JsZW0gPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICBpZihjaGVja3ByZWZpeCgiQmFzaWMiLCBzdGFydCkpIHsKKyAgICAgICAgICAgICphdmFpbHAgfD0gQ1VSTEFVVEhfQkFTSUM7CisgICAgICAgICAgICBhdXRocC0+YXZhaWwgfD0gQ1VSTEFVVEhfQkFTSUM7CisgICAgICAgICAgICBpZihhdXRocC0+cGlja2VkID09IENVUkxBVVRIX0JBU0lDKSB7CisgICAgICAgICAgICAgIC8qIFdlIGFza2VkIGZvciBCYXNpYyBhdXRoZW50aWNhdGlvbiBidXQgZ290IGEgNDBYIGJhY2sKKyAgICAgICAgICAgICAgICAgYW55d2F5LCB3aGljaCBiYXNpY2FsbHkgbWVhbnMgb3VyIG5hbWUrcGFzc3dvcmQgaXNuJ3QKKyAgICAgICAgICAgICAgICAgdmFsaWQuICovCisgICAgICAgICAgICAgIGF1dGhwLT5hdmFpbCA9IENVUkxBVVRIX05PTkU7CisgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJBdXRoZW50aWNhdGlvbiBwcm9ibGVtLiBJZ25vcmluZyB0aGlzLlxuIik7CisgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAvKiB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgbWV0aG9kcyBvbiBvbmUgbGluZSwgc28ga2VlcCByZWFkaW5nICovCisgICAgd2hpbGUoKnN0YXJ0ICYmICpzdGFydCAhPSAnLCcpIC8qIHJlYWQgdXAgdG8gdGhlIG5leHQgY29tbWEgKi8KKyAgICAgIHN0YXJ0Kys7CisgICAgaWYoKnN0YXJ0ID09ICcsJykgLyogaWYgd2UncmUgb24gYSBjb21tYSwgc2tpcCBpdCAqLworICAgICAgc3RhcnQrKzsKKyAgICB3aGlsZSgqc3RhcnQgJiYgSVNTUEFDRSgqc3RhcnQpKQorICAgICAgc3RhcnQrKzsKKyAgfQorICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qKgorICogaHR0cF9zaG91bGRfZmFpbCgpIGRldGVybWluZXMgd2hldGhlciBhbiBIVFRQIHJlc3BvbnNlIGhhcyBnb3R0ZW4gdXMKKyAqIGludG8gYW4gZXJyb3Igc3RhdGUgb3Igbm90LgorICoKKyAqIEBwYXJhbSBjb25uIGFsbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBjb25uZWN0aW9uCisgKgorICogQHJldHZhbCAwIGNvbW11bmljYXRpb25zIHNob3VsZCBjb250aW51ZQorICoKKyAqIEByZXR2YWwgMSBjb21tdW5pY2F0aW9ucyBzaG91bGQgbm90IGNvbnRpbnVlCisgKi8KK3N0YXRpYyBpbnQgaHR0cF9zaG91bGRfZmFpbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhOworICBpbnQgaHR0cGNvZGU7CisKKyAgREVCVUdBU1NFUlQoY29ubik7CisgIGRhdGEgPSBjb25uLT5kYXRhOworICBERUJVR0FTU0VSVChkYXRhKTsKKworICBodHRwY29kZSA9IGRhdGEtPnJlcS5odHRwY29kZTsKKworICAvKgorICAqKiBJZiB3ZSBoYXZlbid0IGJlZW4gYXNrZWQgdG8gZmFpbCBvbiBlcnJvciwKKyAgKiogZG9uJ3QgZmFpbC4KKyAgKi8KKyAgaWYoIWRhdGEtPnNldC5odHRwX2ZhaWxfb25fZXJyb3IpCisgICAgcmV0dXJuIDA7CisKKyAgLyoKKyAgKiogQW55IGNvZGUgPCA0MDAgaXMgbmV2ZXIgdGVybWluYWwuCisgICovCisgIGlmKGh0dHBjb2RlIDwgNDAwKQorICAgIHJldHVybiAwOworCisgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICYmCisgICAgIChkYXRhLT5zZXQuaHR0cHJlcT09SFRUUFJFUV9HRVQpICYmCisgICAgIChodHRwY29kZSA9PSA0MTYpKSB7CisgICAgLyogIlJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGUiLCBqdXN0IHByb2NlZWQgYW5kCisgICAgICAgcHJldGVuZCB0aGlzIGlzIG5vIGVycm9yICovCisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKgorICAqKiBBbnkgY29kZSA+PSA0MDAgdGhhdCdzIG5vdCA0MDEgb3IgNDA3IGlzIGFsd2F5cworICAqKiBhIHRlcm1pbmFsIGVycm9yCisgICovCisgIGlmKChodHRwY29kZSAhPSA0MDEpICYmCisgICAgICAoaHR0cGNvZGUgIT0gNDA3KSkKKyAgICByZXR1cm4gMTsKKworICAvKgorICAqKiBBbGwgd2UgaGF2ZSBsZWZ0IHRvIGRlYWwgd2l0aCBpcyA0MDEgYW5kIDQwNworICAqLworICBERUJVR0FTU0VSVCgoaHR0cGNvZGUgPT0gNDAxKSB8fCAoaHR0cGNvZGUgPT0gNDA3KSk7CisKKyAgLyoKKyAgKiogRXhhbWluZSB0aGUgY3VycmVudCBhdXRoZW50aWNhdGlvbiBzdGF0ZSB0byBzZWUgaWYgdGhpcworICAqKiBpcyBhbiBlcnJvci4gIFRoZSBpZGVhIGlzIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGdldAorICAqKiBjYWxsZWQgYWZ0ZXIgcHJvY2Vzc2luZyBhbGwgdGhlIGhlYWRlcnMgaW4gYSByZXNwb25zZQorICAqKiBtZXNzYWdlLiAgU28sIGlmIHdlJ3ZlIGJlZW4gdG8gYXNrZWQgdG8gYXV0aGVudGljYXRlIGEKKyAgKiogcGFydGljdWxhciBzdGFnZSwgYW5kIHdlJ3ZlIGRvbmUgaXQsIHdlJ3JlIE9LLiAgQnV0LCBpZgorICAqKiB3ZSdyZSBhbHJlYWR5IGNvbXBsZXRlbHkgYXV0aGVudGljYXRlZCwgaXQncyBub3QgT0sgdG8KKyAgKiogZ2V0IGFub3RoZXIgNDAxIG9yIDQwNy4KKyAgKioKKyAgKiogSXQgaXMgcG9zc2libGUgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIGdvIHN0YWxlIHN1Y2ggdGhhdAorICAqKiB0aGUgY2xpZW50IG5lZWRzIHRvIHJlYXV0aGVudGljYXRlLiAgT25jZSB0aGF0IGluZm8gaXMKKyAgKiogYXZhaWxhYmxlLCB1c2UgaXQgaGVyZS4KKyAgKi8KKworICAvKgorICAqKiBFaXRoZXIgd2UncmUgbm90IGF1dGhlbnRpY2F0aW5nLCBvciB3ZSdyZSBzdXBwb3NlZCB0bworICAqKiBiZSBhdXRoZW50aWNhdGluZyBzb21ldGhpbmcgZWxzZS4gIFRoaXMgaXMgYW4gZXJyb3IuCisgICovCisgIGlmKChodHRwY29kZSA9PSA0MDEpICYmICFjb25uLT5iaXRzLnVzZXJfcGFzc3dkKQorICAgIHJldHVybiBUUlVFOworICBpZigoaHR0cGNvZGUgPT0gNDA3KSAmJiAhY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCkKKyAgICByZXR1cm4gVFJVRTsKKworICByZXR1cm4gZGF0YS0+c3RhdGUuYXV0aHByb2JsZW07Cit9CisKKy8qCisgKiByZWFkbW9yZWRhdGEoKSBpcyBhICJmcmVhZCgpIGVtdWxhdGlvbiIgdG8gcHJvdmlkZSBQT1NUIGFuZC9vciByZXF1ZXN0CisgKiBkYXRhLiBJdCBpcyB1c2VkIHdoZW4gYSBodWdlIFBPU1QgaXMgdG8gYmUgbWFkZSBhbmQgdGhlIGVudGlyZSBjaHVuayB3YXNuJ3QKKyAqIHNlbnQgaW4gdGhlIGZpcnN0IHNlbmQoKS4gVGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gYmUgY2FsbGVkIGZyb20gdGhlCisgKiB0cmFuc2Zlci5jIGxvb3Agd2hlbiBtb3JlIGRhdGEgaXMgdG8gYmUgc2VudCB0byB0aGUgcGVlci4KKyAqCisgKiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgYnl0ZXMgaXQgZmlsbGVkIHRoZSBidWZmZXIgd2l0aC4KKyAqLworc3RhdGljIHNpemVfdCByZWFkbW9yZWRhdGEoY2hhciAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbml0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcnApCit7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IChzdHJ1Y3QgY29ubmVjdGRhdGEgKil1c2VycDsKKyAgc3RydWN0IEhUVFAgKmh0dHAgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5odHRwOworICBzaXplX3QgZnVsbHNpemUgPSBzaXplICogbml0ZW1zOworCisgIGlmKDAgPT0gaHR0cC0+cG9zdHNpemUpCisgICAgLyogbm90aGluZyB0byByZXR1cm4gKi8KKyAgICByZXR1cm4gMDsKKworICAvKiBtYWtlIHN1cmUgdGhhdCBhIEhUVFAgcmVxdWVzdCBpcyBuZXZlciBzZW50IGF3YXkgY2h1bmtlZCEgKi8KKyAgY29ubi0+ZGF0YS0+cmVxLmZvcmJpZGNodW5rID0gKGh0dHAtPnNlbmRpbmcgPT0gSFRUUFNFTkRfUkVRVUVTVCk/VFJVRTpGQUxTRTsKKworICBpZihodHRwLT5wb3N0c2l6ZSA8PSAoY3VybF9vZmZfdClmdWxsc2l6ZSkgeworICAgIG1lbWNweShidWZmZXIsIGh0dHAtPnBvc3RkYXRhLCAoc2l6ZV90KWh0dHAtPnBvc3RzaXplKTsKKyAgICBmdWxsc2l6ZSA9IChzaXplX3QpaHR0cC0+cG9zdHNpemU7CisKKyAgICBpZihodHRwLT5iYWNrdXAucG9zdHNpemUpIHsKKyAgICAgIC8qIG1vdmUgYmFja3VwIGRhdGEgaW50byBmb2N1cyBhbmQgY29udGludWUgb24gdGhhdCAqLworICAgICAgaHR0cC0+cG9zdGRhdGEgPSBodHRwLT5iYWNrdXAucG9zdGRhdGE7CisgICAgICBodHRwLT5wb3N0c2l6ZSA9IGh0dHAtPmJhY2t1cC5wb3N0c2l6ZTsKKyAgICAgIGNvbm4tPmZyZWFkX2Z1bmMgPSBodHRwLT5iYWNrdXAuZnJlYWRfZnVuYzsKKyAgICAgIGNvbm4tPmZyZWFkX2luID0gaHR0cC0+YmFja3VwLmZyZWFkX2luOworCisgICAgICBodHRwLT5zZW5kaW5nKys7IC8qIG1vdmUgb25lIHN0ZXAgdXAgKi8KKworICAgICAgaHR0cC0+YmFja3VwLnBvc3RzaXplPTA7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGh0dHAtPnBvc3RzaXplID0gMDsKKworICAgIHJldHVybiBmdWxsc2l6ZTsKKyAgfQorCisgIG1lbWNweShidWZmZXIsIGh0dHAtPnBvc3RkYXRhLCBmdWxsc2l6ZSk7CisgIGh0dHAtPnBvc3RkYXRhICs9IGZ1bGxzaXplOworICBodHRwLT5wb3N0c2l6ZSAtPSBmdWxsc2l6ZTsKKworICByZXR1cm4gZnVsbHNpemU7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIGFkZF9idWZmZXIgZnVuY3Rpb25zICovCisKKy8qCisgKiBDdXJsX2FkZF9idWZmZXJfaW5pdCgpIHNldHMgdXAgYW5kIHJldHVybnMgYSBmaW5lIGJ1ZmZlciBzdHJ1Y3QKKyAqLworQ3VybF9zZW5kX2J1ZmZlciAqQ3VybF9hZGRfYnVmZmVyX2luaXQodm9pZCkKK3sKKyAgcmV0dXJuIGNhbGxvYygxLCBzaXplb2YoQ3VybF9zZW5kX2J1ZmZlcikpOworfQorCisvKgorICogQ3VybF9hZGRfYnVmZmVyX3NlbmQoKSBzZW5kcyBhIGhlYWRlciBidWZmZXIgYW5kIGZyZWVzIGFsbCBhc3NvY2lhdGVkCisgKiBtZW1vcnkuICBCb2R5IGRhdGEgbWF5IGJlIGFwcGVuZGVkIHRvIHRoZSBoZWFkZXIgZGF0YSBpZiBkZXNpcmVkLgorICoKKyAqIFJldHVybnMgQ1VSTGNvZGUKKyAqLworQ1VSTGNvZGUgQ3VybF9hZGRfYnVmZmVyX3NlbmQoQ3VybF9zZW5kX2J1ZmZlciAqaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGQgdGhlIG51bWJlciBvZiBzZW50IGJ5dGVzIHRvIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICpieXRlc193cml0dGVuLAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaG93IG11Y2ggb2YgdGhlIGJ1ZmZlciBjb250YWlucyBib2R5IGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmNsdWRlZF9ib2R5X2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tldGluZGV4KQorCit7CisgIHNzaXplX3QgYW1vdW50OworICBDVVJMY29kZSByZXM7CisgIGNoYXIgKnB0cjsKKyAgc2l6ZV90IHNpemU7CisgIHN0cnVjdCBIVFRQICpodHRwID0gY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8uaHR0cDsKKyAgc2l6ZV90IHNlbmRzaXplOworICBjdXJsX3NvY2tldF90IHNvY2tmZDsKKyAgc2l6ZV90IGhlYWRlcnNpemU7CisKKyAgREVCVUdBU1NFUlQoc29ja2V0aW5kZXggPD0gU0VDT05EQVJZU09DS0VUKTsKKworICBzb2NrZmQgPSBjb25uLT5zb2NrW3NvY2tldGluZGV4XTsKKworICAvKiBUaGUgbG9vcGluZyBiZWxvdyBpcyByZXF1aXJlZCBzaW5jZSB3ZSB1c2Ugbm9uLWJsb2NraW5nIHNvY2tldHMsIGJ1dCBkdWUKKyAgICAgdG8gdGhlIGNpcmN1bXN0YW5jZXMgd2Ugd2lsbCBqdXN0IGxvb3AgYW5kIHRyeSBhZ2FpbiBhbmQgYWdhaW4gZXRjICovCisKKyAgcHRyID0gaW4tPmJ1ZmZlcjsKKyAgc2l6ZSA9IGluLT5zaXplX3VzZWQ7CisKKyAgaGVhZGVyc2l6ZSA9IHNpemUgLSBpbmNsdWRlZF9ib2R5X2J5dGVzOyAvKiB0aGUgaW5pdGlhbCBwYXJ0IHRoYXQgaXNuJ3QgYm9keQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGhlYWRlciAqLworCisgIERFQlVHQVNTRVJUKHNpemUgPiBpbmNsdWRlZF9ib2R5X2J5dGVzKTsKKworICByZXMgPSBDdXJsX2NvbnZlcnRfdG9fbmV0d29yayhjb25uLT5kYXRhLCBwdHIsIGhlYWRlcnNpemUpOworICAvKiBDdXJsX2NvbnZlcnRfdG9fbmV0d29yayBjYWxscyBmYWlsZiBpZiB1bnN1Y2Nlc3NmdWwgKi8KKyAgaWYocmVzKSB7CisgICAgLyogY29udmVyc2lvbiBmYWlsZWQsIGZyZWUgbWVtb3J5IGFuZCByZXR1cm4gdG8gdGhlIGNhbGxlciAqLworICAgIGlmKGluLT5idWZmZXIpCisgICAgICBmcmVlKGluLT5idWZmZXIpOworICAgIGZyZWUoaW4pOworICAgIHJldHVybiByZXM7CisgIH0KKworICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKSB7CisgICAgLyogV2UgbmV2ZXIgc2VuZCBtb3JlIHRoYW4gQ1VSTF9NQVhfV1JJVEVfU0laRSBieXRlcyBpbiBvbmUgc2luZ2xlIGNodW5rCisgICAgICAgd2hlbiB3ZSBzcGVhayBIVFRQUywgYXMgaWYgb25seSBhIGZyYWN0aW9uIG9mIGl0IGlzIHNlbnQgbm93LCB0aGlzIGRhdGEKKyAgICAgICBuZWVkcyB0byBmaXQgaW50byB0aGUgbm9ybWFsIHJlYWQtY2FsbGJhY2sgYnVmZmVyIGxhdGVyIG9uIGFuZCB0aGF0CisgICAgICAgYnVmZmVyIGlzIHVzaW5nIHRoaXMgc2l6ZS4KKyAgICAqLworCisgICAgc2VuZHNpemU9IChzaXplID4gQ1VSTF9NQVhfV1JJVEVfU0laRSk/Q1VSTF9NQVhfV1JJVEVfU0laRTpzaXplOworCisgICAgLyogT3BlblNTTCBpcyB2ZXJ5IHBpY2t5IGFuZCB3ZSBtdXN0IHNlbmQgdGhlIFNBTUUgYnVmZmVyIHBvaW50ZXIgdG8gdGhlCisgICAgICAgbGlicmFyeSB3aGVuIHdlIGF0dGVtcHQgdG8gcmUtc2VuZCB0aGlzIGJ1ZmZlci4gU2VuZGluZyB0aGUgc2FtZSBkYXRhCisgICAgICAgaXMgbm90IGVub3VnaCwgd2UgbXVzdCB1c2UgdGhlIGV4YWN0IHNhbWUgYWRkcmVzcy4gRm9yIHRoaXMgcmVhc29uLCB3ZQorICAgICAgIG11c3QgY29weSB0aGUgZGF0YSB0byB0aGUgdXBsb2FkYnVmZmVyIGZpcnN0LCBzaW5jZSB0aGF0IGlzIHRoZSBidWZmZXIKKyAgICAgICB3ZSB3aWxsIGJlIHVzaW5nIGlmIHRoaXMgc2VuZCBpcyByZXRyaWVkIGxhdGVyLgorICAgICovCisgICAgbWVtY3B5KGNvbm4tPmRhdGEtPnN0YXRlLnVwbG9hZGJ1ZmZlciwgcHRyLCBzZW5kc2l6ZSk7CisgICAgcHRyID0gY29ubi0+ZGF0YS0+c3RhdGUudXBsb2FkYnVmZmVyOworICB9CisgIGVsc2UKKyAgICBzZW5kc2l6ZSA9IHNpemU7CisKKyAgcmVzID0gQ3VybF93cml0ZShjb25uLCBzb2NrZmQsIHB0ciwgc2VuZHNpemUsICZhbW91bnQpOworCisgIGlmKENVUkxFX09LID09IHJlcykgeworICAgIC8qCisgICAgICogTm90ZSB0aGF0IHdlIG1heSBub3Qgc2VuZCB0aGUgZW50aXJlIGNodW5rIGF0IG9uY2UsIGFuZCB3ZSBoYXZlIGEgc2V0CisgICAgICogbnVtYmVyIG9mIGRhdGEgYnl0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgYmlnIGJ1ZmZlciAob3V0IG9mIHdoaWNoIHdlIG1heQorICAgICAqIG9ubHkgc2VuZCBhd2F5IGEgcGFydCkuCisgICAgICovCisgICAgLyogaG93IG11Y2ggb2YgdGhlIGhlYWRlciB0aGF0IHdhcyBzZW50ICovCisgICAgc2l6ZV90IGhlYWRsZW4gPSAoc2l6ZV90KWFtb3VudD5oZWFkZXJzaXplP2hlYWRlcnNpemU6KHNpemVfdClhbW91bnQ7CisgICAgc2l6ZV90IGJvZHlsZW4gPSBhbW91bnQgLSBoZWFkbGVuOworCisgICAgaWYoY29ubi0+ZGF0YS0+c2V0LnZlcmJvc2UpIHsKKyAgICAgIC8qIHRoaXMgZGF0YSBfbWF5XyBjb250YWluIGJpbmFyeSBzdHVmZiAqLworICAgICAgQ3VybF9kZWJ1Zyhjb25uLT5kYXRhLCBDVVJMSU5GT19IRUFERVJfT1VULCBwdHIsIGhlYWRsZW4sIGNvbm4pOworICAgICAgaWYoKHNpemVfdClhbW91bnQgPiBoZWFkbGVuKSB7CisgICAgICAgIC8qIHRoZXJlIHdhcyBib2R5IGRhdGEgc2VudCBiZXlvbmQgdGhlIGluaXRpYWwgaGVhZGVyIHBhcnQsIHBhc3MgdGhhdAorICAgICAgICAgICBvbiB0byB0aGUgZGVidWcgY2FsbGJhY2sgdG9vICovCisgICAgICAgIEN1cmxfZGVidWcoY29ubi0+ZGF0YSwgQ1VSTElORk9fREFUQV9PVVQsCisgICAgICAgICAgICAgICAgICAgcHRyK2hlYWRsZW4sIGJvZHlsZW4sIGNvbm4pOworICAgICAgfQorICAgIH0KKyAgICBpZihib2R5bGVuKQorICAgICAgLyogc2luY2Ugd2Ugc2VudCBhIHBpZWNlIG9mIHRoZSBib2R5IGhlcmUsIHVwIHRoZSBieXRlIGNvdW50ZXIgZm9yIGl0CisgICAgICAgICBhY2NvcmRpbmdseSAqLworICAgICAgaHR0cC0+d3JpdGVieXRlY291bnQgKz0gYm9keWxlbjsKKworICAgIC8qICdhbW91bnQnIGNhbiBuZXZlciBiZSBhIHZlcnkgbGFyZ2UgdmFsdWUgaGVyZSBzbyB0eXBlY2FzdGluZyBpdCBzbyBhCisgICAgICAgc2lnbmVkIDMxIGJpdCB2YWx1ZSBzaG91bGQgbm90IGNhdXNlIHByb2JsZW1zIGV2ZW4gaWYgc3NpemVfdCBpcworICAgICAgIDY0Yml0ICovCisgICAgKmJ5dGVzX3dyaXR0ZW4gKz0gKGxvbmcpYW1vdW50OworCisgICAgaWYoaHR0cCkgeworICAgICAgaWYoKHNpemVfdClhbW91bnQgIT0gc2l6ZSkgeworICAgICAgICAvKiBUaGUgd2hvbGUgcmVxdWVzdCBjb3VsZCBub3QgYmUgc2VudCBpbiBvbmUgc3lzdGVtIGNhbGwuIFdlIG11c3QKKyAgICAgICAgICAgcXVldWUgaXQgdXAgYW5kIHNlbmQgaXQgbGF0ZXIgd2hlbiB3ZSBnZXQgdGhlIGNoYW5jZS4gV2UgbXVzdCBub3QKKyAgICAgICAgICAgbG9vcCBoZXJlIGFuZCB3YWl0IHVudGlsIGl0IG1pZ2h0IHdvcmsgYWdhaW4uICovCisKKyAgICAgICAgc2l6ZSAtPSBhbW91bnQ7CisKKyAgICAgICAgcHRyID0gaW4tPmJ1ZmZlciArIGFtb3VudDsKKworICAgICAgICAvKiBiYWNrdXAgdGhlIGN1cnJlbnRseSBzZXQgcG9pbnRlcnMgKi8KKyAgICAgICAgaHR0cC0+YmFja3VwLmZyZWFkX2Z1bmMgPSBjb25uLT5mcmVhZF9mdW5jOworICAgICAgICBodHRwLT5iYWNrdXAuZnJlYWRfaW4gPSBjb25uLT5mcmVhZF9pbjsKKyAgICAgICAgaHR0cC0+YmFja3VwLnBvc3RkYXRhID0gaHR0cC0+cG9zdGRhdGE7CisgICAgICAgIGh0dHAtPmJhY2t1cC5wb3N0c2l6ZSA9IGh0dHAtPnBvc3RzaXplOworCisgICAgICAgIC8qIHNldCB0aGUgbmV3IHBvaW50ZXJzIGZvciB0aGUgcmVxdWVzdC1zZW5kaW5nICovCisgICAgICAgIGNvbm4tPmZyZWFkX2Z1bmMgPSAoY3VybF9yZWFkX2NhbGxiYWNrKXJlYWRtb3JlZGF0YTsKKyAgICAgICAgY29ubi0+ZnJlYWRfaW4gPSAodm9pZCAqKWNvbm47CisgICAgICAgIGh0dHAtPnBvc3RkYXRhID0gcHRyOworICAgICAgICBodHRwLT5wb3N0c2l6ZSA9IChjdXJsX29mZl90KXNpemU7CisKKyAgICAgICAgaHR0cC0+c2VuZF9idWZmZXIgPSBpbjsKKyAgICAgICAgaHR0cC0+c2VuZGluZyA9IEhUVFBTRU5EX1JFUVVFU1Q7CisKKyAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorICAgICAgaHR0cC0+c2VuZGluZyA9IEhUVFBTRU5EX0JPRFk7CisgICAgICAvKiB0aGUgZnVsbCBidWZmZXIgd2FzIHNlbnQsIGNsZWFuIHVwIGFuZCByZXR1cm4gKi8KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZigoc2l6ZV90KWFtb3VudCAhPSBzaXplKQorICAgICAgICAvKiBXZSBoYXZlIG5vIGNvbnRpbnVlLXNlbmQgbWVjaGFuaXNtIG5vdywgZmFpbC4gVGhpcyBjYW4gb25seSBoYXBwZW4KKyAgICAgICAgICAgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgZnJvbSB0aGUgQ09OTkVDVCBzZW5kaW5nIGZ1bmN0aW9uLiBXZQorICAgICAgICAgICBjdXJyZW50bHkgKHN0dXBpZGx5KSBhc3N1bWUgdGhhdCB0aGUgd2hvbGUgcmVxdWVzdCBpcyBhbHdheXMgc2VudAorICAgICAgICAgICBhd2F5IGluIHRoZSBmaXJzdCBzaW5nbGUgY2h1bmsuCisKKyAgICAgICAgICAgVGhpcyBuZWVkcyBGSVhpbmcuCisgICAgICAgICovCisgICAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgZWxzZQorICAgICAgICBjb25uLT53cml0ZWNoYW5uZWxfaW51c2UgPSBGQUxTRTsKKyAgICB9CisgIH0KKyAgaWYoaW4tPmJ1ZmZlcikKKyAgICBmcmVlKGluLT5idWZmZXIpOworICBmcmVlKGluKTsKKworICByZXR1cm4gcmVzOworfQorCisKKy8qCisgKiBhZGRfYnVmZmVyZigpIGFkZCB0aGUgZm9ybWF0dGVkIGlucHV0IHRvIHRoZSBidWZmZXIuCisgKi8KK0NVUkxjb2RlIEN1cmxfYWRkX2J1ZmZlcmYoQ3VybF9zZW5kX2J1ZmZlciAqaW4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICBjaGFyICpzOworICB2YV9saXN0IGFwOworICB2YV9zdGFydChhcCwgZm10KTsKKyAgcyA9IHZhcHJpbnRmKGZtdCwgYXApOyAvKiB0aGlzIGFsbG9jcyBhIG5ldyBzdHJpbmcgdG8gYXBwZW5kICovCisgIHZhX2VuZChhcCk7CisKKyAgaWYocykgeworICAgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcihpbiwgcywgc3RybGVuKHMpKTsKKyAgICBmcmVlKHMpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgLyogSWYgd2UgZmFpbGVkLCB3ZSBjbGVhbnVwIHRoZSB3aG9sZSBidWZmZXIgYW5kIHJldHVybiBlcnJvciAqLworICBpZihpbi0+YnVmZmVyKQorICAgIGZyZWUoaW4tPmJ1ZmZlcik7CisgIGZyZWUoaW4pOworICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKK30KKworLyoKKyAqIGFkZF9idWZmZXIoKSBhcHBlbmRzIGEgbWVtb3J5IGNodW5rIHRvIHRoZSBleGlzdGluZyBidWZmZXIKKyAqLworQ1VSTGNvZGUgQ3VybF9hZGRfYnVmZmVyKEN1cmxfc2VuZF9idWZmZXIgKmluLCBjb25zdCB2b2lkICppbnB0ciwgc2l6ZV90IHNpemUpCit7CisgIGNoYXIgKm5ld19yYjsKKyAgc2l6ZV90IG5ld19zaXplOworCisgIGlmKH5zaXplIDwgaW4tPnNpemVfdXNlZCkgeworICAgIC8qIElmIHJlc3VsdGluZyB1c2VkIHNpemUgb2Ygc2VuZCBidWZmZXIgd291bGQgd3JhcCBzaXplX3QsIGNsZWFudXAKKyAgICAgICB0aGUgd2hvbGUgYnVmZmVyIGFuZCByZXR1cm4gZXJyb3IuIE90aGVyd2lzZSB0aGUgcmVxdWlyZWQgYnVmZmVyCisgICAgICAgc2l6ZSB3aWxsIGZpdCBpbnRvIGEgc2luZ2xlIGFsbG9jYXRhYmxlIG1lbW9yeSBjaHVuayAqLworICAgIEN1cmxfc2FmZWZyZWUoaW4tPmJ1ZmZlcik7CisgICAgZnJlZShpbik7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICBpZighaW4tPmJ1ZmZlciB8fAorICAgICAoKGluLT5zaXplX3VzZWQgKyBzaXplKSA+IChpbi0+c2l6ZV9tYXggLSAxKSkpIHsKKworICAgIC8qIElmIGN1cnJlbnQgYnVmZmVyIHNpemUgaXNuJ3QgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCwgdXNlIGEKKyAgICAgICBidWZmZXIgc2l6ZSB0aGF0IGRvdWJsZXMgdGhlIHJlcXVpcmVkIHNpemUuIElmIHRoaXMgbmV3IHNpemUKKyAgICAgICB3b3VsZCB3cmFwIHNpemVfdCwgdGhlbiBqdXN0IHVzZSB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBvbmUgKi8KKworICAgIGlmKChzaXplID4gKHNpemVfdCktMS8yKSB8fCAoaW4tPnNpemVfdXNlZCA+IChzaXplX3QpLTEvMikgfHwKKyAgICAgICAofihzaXplKjIpIDwgKGluLT5zaXplX3VzZWQqMikpKQorICAgICAgbmV3X3NpemUgPSAoc2l6ZV90KS0xOworICAgIGVsc2UKKyAgICAgIG5ld19zaXplID0gKGluLT5zaXplX3VzZWQrc2l6ZSkqMjsKKworICAgIGlmKGluLT5idWZmZXIpCisgICAgICAvKiB3ZSBoYXZlIGEgYnVmZmVyLCBlbmxhcmdlIHRoZSBleGlzdGluZyBvbmUgKi8KKyAgICAgIG5ld19yYiA9IHJlYWxsb2MoaW4tPmJ1ZmZlciwgbmV3X3NpemUpOworICAgIGVsc2UKKyAgICAgIC8qIGNyZWF0ZSBhIG5ldyBidWZmZXIgKi8KKyAgICAgIG5ld19yYiA9IG1hbGxvYyhuZXdfc2l6ZSk7CisKKyAgICBpZighbmV3X3JiKSB7CisgICAgICAvKiBJZiB3ZSBmYWlsZWQsIHdlIGNsZWFudXAgdGhlIHdob2xlIGJ1ZmZlciBhbmQgcmV0dXJuIGVycm9yICovCisgICAgICBDdXJsX3NhZmVmcmVlKGluLT5idWZmZXIpOworICAgICAgZnJlZShpbik7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisKKyAgICBpbi0+YnVmZmVyID0gbmV3X3JiOworICAgIGluLT5zaXplX21heCA9IG5ld19zaXplOworICB9CisgIG1lbWNweSgmaW4tPmJ1ZmZlcltpbi0+c2l6ZV91c2VkXSwgaW5wdHIsIHNpemUpOworCisgIGluLT5zaXplX3VzZWQgKz0gc2l6ZTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qIGVuZCBvZiB0aGUgYWRkX2J1ZmZlciBmdW5jdGlvbnMgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisKKy8qCisgKiBDdXJsX2NvbXBhcmVoZWFkZXIoKQorICoKKyAqIFJldHVybnMgVFJVRSBpZiAnaGVhZGVybGluZScgY29udGFpbnMgdGhlICdoZWFkZXInIHdpdGggZ2l2ZW4gJ2NvbnRlbnQnLgorICogUGFzcyBoZWFkZXJzIFdJVEggdGhlIGNvbG9uLgorICovCitib29sCitDdXJsX2NvbXBhcmVoZWFkZXIoY29uc3QgY2hhciAqaGVhZGVybGluZSwgLyogbGluZSB0byBjaGVjayAqLworICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhlYWRlciwgIC8qIGhlYWRlciBrZXl3b3JkIF93aXRoXyBjb2xvbiAqLworICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRlbnQpIC8qIGNvbnRlbnQgc3RyaW5nIHRvIGZpbmQgKi8KK3sKKyAgLyogUkZDMjYxNiwgc2VjdGlvbiA0LjIgc2F5czogIkVhY2ggaGVhZGVyIGZpZWxkIGNvbnNpc3RzIG9mIGEgbmFtZSBmb2xsb3dlZAorICAgKiBieSBhIGNvbG9uICgiOiIpIGFuZCB0aGUgZmllbGQgdmFsdWUuIEZpZWxkIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLgorICAgKiBUaGUgZmllbGQgdmFsdWUgTUFZIGJlIHByZWNlZGVkIGJ5IGFueSBhbW91bnQgb2YgTFdTLCB0aG91Z2ggYSBzaW5nbGUgU1AKKyAgICogaXMgcHJlZmVycmVkLiIgKi8KKworICBzaXplX3QgaGxlbiA9IHN0cmxlbihoZWFkZXIpOworICBzaXplX3QgY2xlbjsKKyAgc2l6ZV90IGxlbjsKKyAgY29uc3QgY2hhciAqc3RhcnQ7CisgIGNvbnN0IGNoYXIgKmVuZDsKKworICBpZighQ3VybF9yYXdfbmVxdWFsKGhlYWRlcmxpbmUsIGhlYWRlciwgaGxlbikpCisgICAgcmV0dXJuIEZBTFNFOyAvKiBkb2Vzbid0IHN0YXJ0IHdpdGggaGVhZGVyICovCisKKyAgLyogcGFzcyB0aGUgaGVhZGVyICovCisgIHN0YXJ0ID0gJmhlYWRlcmxpbmVbaGxlbl07CisKKyAgLyogcGFzcyBhbGwgd2hpdGUgc3BhY2VzICovCisgIHdoaWxlKCpzdGFydCAmJiBJU1NQQUNFKCpzdGFydCkpCisgICAgc3RhcnQrKzsKKworICAvKiBmaW5kIHRoZSBlbmQgb2YgdGhlIGhlYWRlciBsaW5lICovCisgIGVuZCA9IHN0cmNocihzdGFydCwgJ1xyJyk7IC8qIGxpbmVzIGVuZCB3aXRoIENSTEYgKi8KKyAgaWYoIWVuZCkgeworICAgIC8qIGluIGNhc2UgdGhlcmUncyBhIG5vbi1zdGFuZGFyZCBjb21wbGlhbnQgbGluZSBoZXJlICovCisgICAgZW5kID0gc3RyY2hyKHN0YXJ0LCAnXG4nKTsKKworICAgIGlmKCFlbmQpCisgICAgICAvKiBobSwgdGhlcmUncyBubyBsaW5lIGVuZGluZyBoZXJlLCB1c2UgdGhlIHplcm8gYnl0ZSEgKi8KKyAgICAgIGVuZCA9IHN0cmNocihzdGFydCwgJ1wwJyk7CisgIH0KKworICBsZW4gPSBlbmQtc3RhcnQ7IC8qIGxlbmd0aCBvZiB0aGUgY29udGVudCBwYXJ0IG9mIHRoZSBpbnB1dCBsaW5lICovCisgIGNsZW4gPSBzdHJsZW4oY29udGVudCk7IC8qIGxlbmd0aCBvZiB0aGUgd29yZCB0byBmaW5kICovCisKKyAgLyogZmluZCB0aGUgY29udGVudCBzdHJpbmcgaW4gdGhlIHJlc3Qgb2YgdGhlIGxpbmUgKi8KKyAgZm9yKDtsZW4+PWNsZW47bGVuLS0sIHN0YXJ0KyspIHsKKyAgICBpZihDdXJsX3Jhd19uZXF1YWwoc3RhcnQsIGNvbnRlbnQsIGNsZW4pKQorICAgICAgcmV0dXJuIFRSVUU7IC8qIG1hdGNoISAqLworICB9CisKKyAgcmV0dXJuIEZBTFNFOyAvKiBubyBtYXRjaCAqLworfQorCisvKgorICogQ3VybF9odHRwX2Nvbm5lY3QoKSBwZXJmb3JtcyBIVFRQIHN0dWZmIHRvIGRvIGF0IGNvbm5lY3QtdGltZSwgY2FsbGVkIGZyb20KKyAqIHRoZSBnZW5lcmljIEN1cmxfY29ubmVjdCgpLgorICovCitDVVJMY29kZSBDdXJsX2h0dHBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhOworICBDVVJMY29kZSByZXN1bHQ7CisKKyAgZGF0YT1jb25uLT5kYXRhOworCisgIC8qIFdlIGRlZmF1bHQgdG8gcGVyc2lzdGVudCBjb25uZWN0aW9ucy4gV2Ugc2V0IHRoaXMgYWxyZWFkeSBpbiB0aGlzIGNvbm5lY3QKKyAgICAgZnVuY3Rpb24gdG8gbWFrZSB0aGUgcmUtdXNlIGNoZWNrcyBwcm9wZXJseSBiZSBhYmxlIHRvIGNoZWNrIHRoaXMgYml0LiAqLworICBjb25uLT5iaXRzLmNsb3NlID0gRkFMU0U7CisKKyAgaWYoZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgPT0gQ3VybF9pZl9tdWx0aSkgeworICAgIC8qIHdoZW4gdGhlIG11bHRpIGludGVyZmFjZSBpcyB1c2VkLCB0aGUgQ09OTkVDVCBwcm9jZWR1cmUgbWlnaHQgbm90IGhhdmUKKyAgICAgICBiZWVuIGNvbXBsZXRlZCAqLworICAgIHJlc3VsdCA9IEN1cmxfcHJveHlfY29ubmVjdChjb25uKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgaWYoY29ubi0+dHVubmVsX3N0YXRlW0ZJUlNUU09DS0VUXSA9PSBUVU5ORUxfQ09OTkVDVCkKKyAgICAvKiBub3RoaW5nIGVsc2UgdG8gZG8gZXhjZXB0IHdhaXQgcmlnaHQgbm93IC0gd2UncmUgbm90IGRvbmUgaGVyZS4gKi8KKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgaWYoY29ubi0+Z2l2ZW4tPmZsYWdzICYgUFJPVE9QVF9TU0wpIHsKKyAgICAvKiBwZXJmb3JtIFNTTCBpbml0aWFsaXphdGlvbiAqLworICAgIGlmKGRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID09IEN1cmxfaWZfbXVsdGkpIHsKKyAgICAgIHJlc3VsdCA9IGh0dHBzX2Nvbm5lY3RpbmcoY29ubiwgZG9uZSk7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogQkxPQ0tJTkcgKi8KKyAgICAgIHJlc3VsdCA9IEN1cmxfc3NsX2Nvbm5lY3QoY29ubiwgRklSU1RTT0NLRVQpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgKmRvbmUgPSBUUlVFOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAqZG9uZSA9IFRSVUU7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qIHRoaXMgcmV0dXJucyB0aGUgc29ja2V0IHRvIHdhaXQgZm9yIGluIHRoZSBETyBhbmQgRE9JTkcgc3RhdGUgZm9yIHRoZSBtdWx0aQorICAgaW50ZXJmYWNlIGFuZCB0aGVuIHdlJ3JlIGFsd2F5cyBfc2VuZGluZ18gYSByZXF1ZXN0IGFuZCB0aHVzIHdlIHdhaXQgZm9yCisgICB0aGUgc2luZ2xlIHNvY2tldCB0byBiZWNvbWUgd3JpdGFibGUgb25seSAqLworc3RhdGljIGludCBodHRwX2dldHNvY2tfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCit7CisgIC8qIHdyaXRlIG1vZGUgKi8KKyAgKHZvaWQpbnVtc29ja3M7IC8qIHVudXNlZCwgd2UgdHJ1c3QgaXQgdG8gYmUgYXQgbGVhc3QgMSAqLworICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICByZXR1cm4gR0VUU09DS19XUklURVNPQ0soMCk7Cit9CisKKyNpZmRlZiBVU0VfU1NMCitzdGF0aWMgQ1VSTGNvZGUgaHR0cHNfY29ubmVjdGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgREVCVUdBU1NFUlQoKGNvbm4pICYmIChjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKSk7CisKKyAgLyogcGVyZm9ybSBTU0wgaW5pdGlhbGl6YXRpb24gZm9yIHRoaXMgc29ja2V0ICovCisgIHJlc3VsdCA9IEN1cmxfc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoY29ubiwgRklSU1RTT0NLRVQsIGRvbmUpOworICBpZihyZXN1bHQpCisgICAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7IC8qIGEgZmFpbGVkIGNvbm5lY3Rpb24gaXMgbWFya2VkIGZvciBjbG9zdXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByZXZlbnQgKGJhZCkgcmUtdXNlIG9yIHNpbWlsYXIgKi8KKyAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChVU0VfU1NMRUFZKSB8fCBkZWZpbmVkKFVTRV9HTlVUTFMpCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBPcGVuU1NMIGFuZCBHbnVUTFMgb25seS4gSXQgc2hvdWxkIGJlIG1hZGUgdG8gcXVlcnkKKyAgIHRoZSBnZW5lcmljIFNTTCBsYXllciBpbnN0ZWFkLiAqLworc3RhdGljIGludCBodHRwc19nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCit7CisgIGlmKGNvbm4tPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9TU0wpIHsKKyAgICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbRklSU1RTT0NLRVRdOworCisgICAgaWYoIW51bXNvY2tzKQorICAgICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7CisKKyAgICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfd3JpdGluZykgeworICAgICAgLyogd3JpdGUgbW9kZSAqLworICAgICAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgICAgIHJldHVybiBHRVRTT0NLX1dSSVRFU09DSygwKTsKKyAgICB9CisgICAgZWxzZSBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfcmVhZGluZykgeworICAgICAgLyogcmVhZCBtb2RlICovCisgICAgICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICAgICAgcmV0dXJuIEdFVFNPQ0tfUkVBRFNPQ0soMCk7CisgICAgfQorICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKyNlbHNlCisjaWYgZGVmaW5lZChVU0VfTlNTKSB8fCBkZWZpbmVkKFVTRV9RU09TU0wpIHx8IFwKKyAgZGVmaW5lZChVU0VfUE9MQVJTU0wpIHx8IGRlZmluZWQoVVNFX0FYVExTKSB8fCBkZWZpbmVkKFVTRV9DWUFTU0wpCitzdGF0aWMgaW50IGh0dHBzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3sKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc29ja3M7CisgICh2b2lkKW51bXNvY2tzOworICByZXR1cm4gR0VUU09DS19CTEFOSzsKK30KKyNlbmRpZiAvKiBVU0VfQVhUTFMgfHwgVVNFX1BPTEFSU1NMIHx8IFVTRV9RU09TU0wgfHwgVVNFX05TUyAqLworI2VuZGlmIC8qIFVTRV9TU0xFQVkgfHwgVVNFX0dOVVRMUyAqLworCisvKgorICogQ3VybF9odHRwX2RvbmUoKSBnZXRzIGNhbGxlZCBmcm9tIEN1cmxfZG9uZSgpIGFmdGVyIGEgc2luZ2xlIEhUVFAgcmVxdWVzdAorICogaGFzIGJlZW4gcGVyZm9ybWVkLgorICovCisKK0NVUkxjb2RlIEN1cmxfaHR0cF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlIHN0YXR1cywgYm9vbCBwcmVtYXR1cmUpCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IEhUVFAgKmh0dHAgPWRhdGEtPnN0YXRlLnByb3RvLmh0dHA7CisKKyAgQ3VybF91bmVuY29kZV9jbGVhbnVwKGNvbm4pOworCisgIC8qIHNldCB0aGUgcHJvcGVyIHZhbHVlcyAocG9zc2libHkgbW9kaWZpZWQgb24gUE9TVCkgKi8KKyAgY29ubi0+ZnJlYWRfZnVuYyA9IGRhdGEtPnNldC5mcmVhZF9mdW5jOyAvKiByZXN0b3JlICovCisgIGNvbm4tPmZyZWFkX2luID0gZGF0YS0+c2V0LmluOyAvKiByZXN0b3JlICovCisgIGNvbm4tPnNlZWtfZnVuYyA9IGRhdGEtPnNldC5zZWVrX2Z1bmM7IC8qIHJlc3RvcmUgKi8KKyAgY29ubi0+c2Vla19jbGllbnQgPSBkYXRhLT5zZXQuc2Vla19jbGllbnQ7IC8qIHJlc3RvcmUgKi8KKworICBpZihodHRwID09IE5VTEwpCisgICAgcmV0dXJuIENVUkxFX09LOworCisgIGlmKGh0dHAtPnNlbmRfYnVmZmVyKSB7CisgICAgQ3VybF9zZW5kX2J1ZmZlciAqYnVmZiA9IGh0dHAtPnNlbmRfYnVmZmVyOworCisgICAgZnJlZShidWZmLT5idWZmZXIpOworICAgIGZyZWUoYnVmZik7CisgICAgaHR0cC0+c2VuZF9idWZmZXIgPSBOVUxMOyAvKiBjbGVhciB0aGUgcG9pbnRlciAqLworICB9CisKKyAgaWYoSFRUUFJFUV9QT1NUX0ZPUk0gPT0gZGF0YS0+c2V0Lmh0dHByZXEpIHsKKyAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ID0gaHR0cC0+cmVhZGJ5dGVjb3VudCArIGh0dHAtPndyaXRlYnl0ZWNvdW50OworCisgICAgQ3VybF9mb3JtY2xlYW4oJmh0dHAtPnNlbmRpdCk7IC8qIE5vdyBmcmVlIHRoYXQgd2hvbGUgbG90ICovCisgICAgaWYoaHR0cC0+Zm9ybS5mcCkgeworICAgICAgLyogYSBmaWxlIGJlaW5nIHVwbG9hZGVkIHdhcyBsZWZ0IG9wZW5lZCwgY2xvc2UgaXQhICovCisgICAgICBmY2xvc2UoaHR0cC0+Zm9ybS5mcCk7CisgICAgICBodHRwLT5mb3JtLmZwID0gTlVMTDsKKyAgICB9CisgIH0KKyAgZWxzZSBpZihIVFRQUkVRX1BVVCA9PSBkYXRhLT5zZXQuaHR0cHJlcSkKKyAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ID0gaHR0cC0+cmVhZGJ5dGVjb3VudCArIGh0dHAtPndyaXRlYnl0ZWNvdW50OworCisgIGlmKHN0YXR1cyAhPSBDVVJMRV9PSykKKyAgICByZXR1cm4gKHN0YXR1cyk7CisKKyAgaWYoIXByZW1hdHVyZSAmJiAvKiB0aGlzIGNoZWNrIGlzIHBvaW50bGVzcyB3aGVuIERPTkUgaXMgY2FsbGVkIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBlbnRpcmUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlICovCisgICAgICFjb25uLT5iaXRzLnJldHJ5ICYmCisgICAgICgoaHR0cC0+cmVhZGJ5dGVjb3VudCArCisgICAgICAgZGF0YS0+cmVxLmhlYWRlcmJ5dGVjb3VudCAtCisgICAgICAgZGF0YS0+cmVxLmRlZHVjdGhlYWRlcmNvdW50KSkgPD0gMCkgeworICAgIC8qIElmIHRoaXMgY29ubmVjdGlvbiBpc24ndCBzaW1wbHkgY2xvc2VkIHRvIGJlIHJldHJpZWQsIEFORCBub3RoaW5nIHdhcworICAgICAgIHJlYWQgZnJvbSB0aGUgSFRUUCBzZXJ2ZXIgKHRoYXQgY291bnRzKSwgdGhpcyBjYW4ndCBiZSByaWdodCBzbyB3ZQorICAgICAgIHJldHVybiBhbiBlcnJvciBoZXJlICovCisgICAgZmFpbGYoZGF0YSwgIkVtcHR5IHJlcGx5IGZyb20gc2VydmVyIik7CisgICAgcmV0dXJuIENVUkxFX0dPVF9OT1RISU5HOworICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKKy8qIERldGVybWluZSBpZiB3ZSBzaG91bGQgdXNlIEhUVFAgMS4xIGZvciB0aGlzIHJlcXVlc3QuIFJlYXNvbnMgdG8gYXZvaWQgaXQKKyAgIGFyZSBpZiB0aGUgdXNlciBzcGVjaWZpY2FsbHkgcmVxdWVzdGVkIEhUVFAgMS4wLCBpZiB0aGUgc2VydmVyIHdlIGFyZQorICAgY29ubmVjdGVkIHRvIG9ubHkgc3VwcG9ydHMgMS4wLCBvciBpZiBhbnkgc2VydmVyIHByZXZpb3VzbHkgY29udGFjdGVkIHRvCisgICBoYW5kbGUgdGhpcyByZXF1ZXN0IG9ubHkgc3VwcG9ydHMgMS4wLiAqLworc3RhdGljIGJvb2wgdXNlX2h0dHBfMV8xKGNvbnN0IHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgcmV0dXJuICgoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uID09IENVUkxfSFRUUF9WRVJTSU9OXzFfMSkgfHwKKyAgICAgICAgICgoZGF0YS0+c2V0Lmh0dHB2ZXJzaW9uICE9IENVUkxfSFRUUF9WRVJTSU9OXzFfMCkgJiYKKyAgICAgICAgICAoKGNvbm4tPmh0dHB2ZXJzaW9uID09IDExKSB8fAorICAgICAgICAgICAoKGNvbm4tPmh0dHB2ZXJzaW9uICE9IDEwKSAmJgorICAgICAgICAgICAgKGRhdGEtPnN0YXRlLmh0dHB2ZXJzaW9uICE9IDEwKSkpKSkgPyBUUlVFIDogRkFMU0U7Cit9CisKKy8qIGNoZWNrIGFuZCBwb3NzaWJseSBhZGQgYW4gRXhwZWN0OiBoZWFkZXIgKi8KK3N0YXRpYyBDVVJMY29kZSBleHBlY3QxMDAoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9zZW5kX2J1ZmZlciAqcmVxX2J1ZmZlcikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGNvbnN0IGNoYXIgKnB0cjsKKyAgZGF0YS0+c3RhdGUuZXhwZWN0MTAwaGVhZGVyID0gRkFMU0U7IC8qIGRlZmF1bHQgdG8gZmFsc2UgdW5sZXNzIGl0IGlzIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gVFJVRSBiZWxvdyAqLworICBpZih1c2VfaHR0cF8xXzEoZGF0YSwgY29ubikpIHsKKyAgICAvKiBpZiBub3QgZG9pbmcgSFRUUCAxLjAgb3IgZGlzYWJsZWQgZXhwbGljaXRseSwgd2UgYWRkIGEgRXhwZWN0OgorICAgICAgIDEwMC1jb250aW51ZSB0byB0aGUgaGVhZGVycyB3aGljaCBhY3R1YWxseSBzcGVlZHMgdXAgcG9zdCBvcGVyYXRpb25zCisgICAgICAgKGFzIHRoZXJlIGlzIG9uZSBwYWNrZXQgY29taW5nIGJhY2sgZnJvbSB0aGUgd2ViIHNlcnZlcikgKi8KKyAgICBwdHIgPSBDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiRXhwZWN0OiIpOworICAgIGlmKHB0cikgeworICAgICAgZGF0YS0+c3RhdGUuZXhwZWN0MTAwaGVhZGVyID0KKyAgICAgICAgQ3VybF9jb21wYXJlaGVhZGVyKHB0ciwgIkV4cGVjdDoiLCAiMTAwLWNvbnRpbnVlIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZihyZXFfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3Q6IDEwMC1jb250aW51ZVxyXG4iKTsKKyAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PSykKKyAgICAgICAgZGF0YS0+c3RhdGUuZXhwZWN0MTAwaGVhZGVyID0gVFJVRTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworQ1VSTGNvZGUgQ3VybF9hZGRfY3VzdG9tX2hlYWRlcnMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJsX3NlbmRfYnVmZmVyICpyZXFfYnVmZmVyKQoreworICBjaGFyICpwdHI7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzPWNvbm4tPmRhdGEtPnNldC5oZWFkZXJzOworCisgIHdoaWxlKGhlYWRlcnMpIHsKKyAgICBwdHIgPSBzdHJjaHIoaGVhZGVycy0+ZGF0YSwgJzonKTsKKyAgICBpZihwdHIpIHsKKyAgICAgIC8qIHdlIHJlcXVpcmUgYSBjb2xvbiBmb3IgdGhpcyB0byBiZSBhIHRydWUgaGVhZGVyICovCisKKyAgICAgIHB0cisrOyAvKiBwYXNzIHRoZSBjb2xvbiAqLworICAgICAgd2hpbGUoKnB0ciAmJiBJU1NQQUNFKCpwdHIpKQorICAgICAgICBwdHIrKzsKKworICAgICAgaWYoKnB0cikgeworICAgICAgICAvKiBvbmx5IHNlbmQgdGhpcyBpZiB0aGUgY29udGVudHMgd2FzIG5vbi1ibGFuayAqLworCisgICAgICAgIGlmKGNvbm4tPmFsbG9jcHRyLmhvc3QgJiYKKyAgICAgICAgICAgLyogYSBIb3N0OiBoZWFkZXIgd2FzIHNlbnQgYWxyZWFkeSwgZG9uJ3QgcGFzcyBvbiBhbnkgY3VzdG9tIEhvc3Q6CisgICAgICAgICAgICAgIGhlYWRlciBhcyB0aGF0IHdpbGwgcHJvZHVjZSAqdHdvKiBpbiB0aGUgc2FtZSByZXF1ZXN0ISAqLworICAgICAgICAgICBjaGVja3ByZWZpeCgiSG9zdDoiLCBoZWFkZXJzLT5kYXRhKSkKKyAgICAgICAgICA7CisgICAgICAgIGVsc2UgaWYoY29ubi0+ZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUX0ZPUk0gJiYKKyAgICAgICAgICAgICAgICAvKiB0aGlzIGhlYWRlciAoZXh0ZW5kZWQgYnkgZm9ybWRhdGEuYykgaXMgc2VudCBsYXRlciAqLworICAgICAgICAgICAgICAgIGNoZWNrcHJlZml4KCJDb250ZW50LVR5cGU6IiwgaGVhZGVycy0+ZGF0YSkpCisgICAgICAgICAgOworICAgICAgICBlbHNlIGlmKGNvbm4tPmJpdHMuYXV0aG5lZyAmJgorICAgICAgICAgICAgICAgIC8qIHdoaWxlIGRvaW5nIGF1dGggbmVnLCBkb24ndCBhbGxvdyB0aGUgY3VzdG9tIGxlbmd0aCBzaW5jZQorICAgICAgICAgICAgICAgICAgIHdlIHdpbGwgZm9yY2UgbGVuZ3RoIHplcm8gdGhlbiAqLworICAgICAgICAgICAgICAgIGNoZWNrcHJlZml4KCJDb250ZW50LUxlbmd0aCIsIGhlYWRlcnMtPmRhdGEpKQorICAgICAgICAgIDsKKyAgICAgICAgZWxzZSBpZihjb25uLT5hbGxvY3B0ci50ZSAmJgorICAgICAgICAgICAgICAgIC8qIHdoZW4gYXNraW5nIGZvciBUcmFuc2Zlci1FbmNvZGluZywgZG9uJ3QgcGFzcyBvbiBhIGN1c3RvbQorICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb246ICovCisgICAgICAgICAgICAgICAgY2hlY2twcmVmaXgoIkNvbm5lY3Rpb24iLCBoZWFkZXJzLT5kYXRhKSkKKyAgICAgICAgICA7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYocmVxX2J1ZmZlciwgIiVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLT5kYXRhKTsKKyAgICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgcHRyID0gc3RyY2hyKGhlYWRlcnMtPmRhdGEsICc7Jyk7CisgICAgICBpZihwdHIpIHsKKworICAgICAgICBwdHIrKzsgLyogcGFzcyB0aGUgc2VtaWNvbG9uICovCisgICAgICAgIHdoaWxlKCpwdHIgJiYgSVNTUEFDRSgqcHRyKSkKKyAgICAgICAgICBwdHIrKzsKKworICAgICAgICBpZigqcHRyKSB7CisgICAgICAgICAgLyogdGhpcyBtYXkgYmUgdXNlZCBmb3Igc29tZXRoaW5nIGVsc2UgaW4gdGhlIGZ1dHVyZSAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGlmKCooLS1wdHIpID09ICc7JykgeworICAgICAgICAgICAgQ1VSTGNvZGUgcmVzdWx0OworCisgICAgICAgICAgICAvKiBzZW5kIG5vLXZhbHVlIGN1c3RvbSBoZWFkZXIgaWYgdGVybWluYXRlZCBieSBzZW1pY29sb24gKi8KKyAgICAgICAgICAgICpwdHIgPSAnOic7CisgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKHJlcV9idWZmZXIsICIlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycy0+ZGF0YSk7CisgICAgICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGhlYWRlcnMgPSBoZWFkZXJzLT5uZXh0OworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworQ1VSTGNvZGUgQ3VybF9hZGRfdGltZWNvbmRpdGlvbihzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VybF9zZW5kX2J1ZmZlciAqcmVxX2J1ZmZlcikKK3sKKyAgY29uc3Qgc3RydWN0IHRtICp0bTsKKyAgY2hhciAqYnVmID0gZGF0YS0+c3RhdGUuYnVmZmVyOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IHRtIGtlZXB0aW1lOworCisgIHJlc3VsdCA9IEN1cmxfZ210aW1lKGRhdGEtPnNldC50aW1ldmFsdWUsICZrZWVwdGltZSk7CisgIGlmKHJlc3VsdCkgeworICAgIGZhaWxmKGRhdGEsICJJbnZhbGlkIFRJTUVWQUxVRVxuIik7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICB0bSA9ICZrZWVwdGltZTsKKworICAvKiBUaGUgSWYtTW9kaWZpZWQtU2luY2UgaGVhZGVyIGZhbWlseSBzaG91bGQgaGF2ZSB0aGVpciB0aW1lcyBzZXQgaW4KKyAgICogR01UIGFzIFJGQzI2MTYgZGVmaW5lczogIkFsbCBIVFRQIGRhdGUvdGltZSBzdGFtcHMgTVVTVCBiZQorICAgKiByZXByZXNlbnRlZCBpbiBHcmVlbndpY2ggTWVhbiBUaW1lIChHTVQpLCB3aXRob3V0IGV4Y2VwdGlvbi4gRm9yIHRoZQorICAgKiBwdXJwb3NlcyBvZiBIVFRQLCBHTVQgaXMgZXhhY3RseSBlcXVhbCB0byBVVEMgKENvb3JkaW5hdGVkIFVuaXZlcnNhbAorICAgKiBUaW1lKS4iIChzZWUgcGFnZSAyMCBvZiBSRkMyNjE2KS4KKyAgICovCisKKyAgLyogZm9ybWF0OiAiVHVlLCAxNSBOb3YgMTk5NCAxMjo0NToyNiBHTVQiICovCisgIHNucHJpbnRmKGJ1ZiwgQlVGU0laRS0xLAorICAgICAgICAgICAiJXMsICUwMmQgJXMgJTRkICUwMmQ6JTAyZDolMDJkIEdNVCIsCisgICAgICAgICAgIEN1cmxfd2tkYXlbdG0tPnRtX3dkYXk/dG0tPnRtX3dkYXktMTo2XSwKKyAgICAgICAgICAgdG0tPnRtX21kYXksCisgICAgICAgICAgIEN1cmxfbW9udGhbdG0tPnRtX21vbl0sCisgICAgICAgICAgIHRtLT50bV95ZWFyICsgMTkwMCwKKyAgICAgICAgICAgdG0tPnRtX2hvdXIsCisgICAgICAgICAgIHRtLT50bV9taW4sCisgICAgICAgICAgIHRtLT50bV9zZWMpOworCisgIHN3aXRjaChkYXRhLT5zZXQudGltZWNvbmRpdGlvbikgeworICBjYXNlIENVUkxfVElNRUNPTkRfSUZNT0RTSU5DRToKKyAgZGVmYXVsdDoKKyAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKHJlcV9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSWYtTW9kaWZpZWQtU2luY2U6ICVzXHJcbiIsIGJ1Zik7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9USU1FQ09ORF9JRlVOTU9EU0lOQ0U6CisgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZihyZXFfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklmLVVubW9kaWZpZWQtU2luY2U6ICVzXHJcbiIsIGJ1Zik7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9USU1FQ09ORF9MQVNUTU9EOgorICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYocmVxX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMYXN0LU1vZGlmaWVkOiAlc1xyXG4iLCBidWYpOworICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEN1cmxfaHR0cCgpIGdldHMgY2FsbGVkIGZyb20gdGhlIGdlbmVyaWMgQ3VybF9kbygpIGZ1bmN0aW9uIHdoZW4gYSBIVFRQCisgKiByZXF1ZXN0IGlzIHRvIGJlIHBlcmZvcm1lZC4gVGhpcyBjcmVhdGVzIGFuZCBzZW5kcyBhIHByb3Blcmx5IGNvbnN0cnVjdGVkCisgKiBIVFRQIHJlcXVlc3QuCisgKi8KK0NVUkxjb2RlIEN1cmxfaHR0cChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisgIENVUkxjb2RlIHJlc3VsdD1DVVJMRV9PSzsKKyAgc3RydWN0IEhUVFAgKmh0dHA7CisgIGNvbnN0IGNoYXIgKnBwYXRoID0gZGF0YS0+c3RhdGUucGF0aDsKKyAgYm9vbCBwYXN0ZV9mdHBfdXNlcnB3ZCA9IEZBTFNFOworICBjaGFyIGZ0cF90eXBlY29kZVtzaXplb2YoIi87dHlwZT0/IildID0gIiI7CisgIGNvbnN0IGNoYXIgKmhvc3QgPSBjb25uLT5ob3N0Lm5hbWU7CisgIGNvbnN0IGNoYXIgKnRlID0gIiI7IC8qIHRyYW5zZmVyLWVuY29kaW5nICovCisgIGNvbnN0IGNoYXIgKnB0cjsKKyAgY29uc3QgY2hhciAqcmVxdWVzdDsKKyAgQ3VybF9IdHRwUmVxIGh0dHByZXEgPSBkYXRhLT5zZXQuaHR0cHJlcTsKKyAgY2hhciAqYWRkY29va2llcyA9IE5VTEw7CisgIGN1cmxfb2ZmX3QgaW5jbHVkZWRfYm9keSA9IDA7CisgIGNvbnN0IGNoYXIgKmh0dHBzdHJpbmc7CisgIEN1cmxfc2VuZF9idWZmZXIgKnJlcV9idWZmZXI7CisgIGN1cmxfb2ZmX3QgcG9zdHNpemUgPSAwOyAvKiBjdXJsX29mZl90IHRvIGhhbmRsZSBsYXJnZSBmaWxlIHNpemVzICovCisgIGludCBzZWVrZXJyID0gQ1VSTF9TRUVLRlVOQ19PSzsKKworICAvKiBBbHdheXMgY29uc2lkZXIgdGhlIERPIHBoYXNlIGRvbmUgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBjYWxsLCBldmVuIGlmIHRoZXJlCisgICAgIG1heSBiZSBwYXJ0cyBvZiB0aGUgcmVxdWVzdCB0aGF0IGlzIG5vdCB5ZXQgc2VudCwgc2luY2Ugd2UgY2FuIGRlYWwgd2l0aAorICAgICB0aGUgcmVzdCBvZiB0aGUgcmVxdWVzdCBpbiB0aGUgUEVSRk9STSBwaGFzZS4gKi8KKyAgKmRvbmUgPSBUUlVFOworCisgIC8qIElmIHRoZXJlIGFscmVhZHkgaXMgYSBwcm90b2NvbC1zcGVjaWZpYyBzdHJ1Y3QgYWxsb2NhdGVkIGZvciB0aGlzCisgICAgIHNlc3Npb25oYW5kbGUsIGRlYWwgd2l0aCBpdCAqLworICBDdXJsX3Jlc2V0X3JlcXByb3RvKGNvbm4pOworCisgIGlmKCFkYXRhLT5zdGF0ZS5wcm90by5odHRwKSB7CisgICAgLyogT25seSBhbGxvY2F0ZSB0aGlzIHN0cnVjdCBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgaXQhICovCisKKyAgICBodHRwID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgSFRUUCkpOworICAgIGlmKCFodHRwKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZGF0YS0+c3RhdGUucHJvdG8uaHR0cCA9IGh0dHA7CisgIH0KKyAgZWxzZQorICAgIGh0dHAgPSBkYXRhLT5zdGF0ZS5wcm90by5odHRwOworCisgIGlmKCFkYXRhLT5zdGF0ZS50aGlzX2lzX2FfZm9sbG93KSB7CisgICAgLyogdGhpcyBpcyBub3QgYSBmb2xsb3dlZCBsb2NhdGlvbiwgZ2V0IHRoZSBvcmlnaW5hbCBob3N0IG5hbWUgKi8KKyAgICBpZihkYXRhLT5zdGF0ZS5maXJzdF9ob3N0KQorICAgICAgLyogRnJlZSB0byBhdm9pZCBsZWFraW5nIG1lbW9yeSBvbiBtdWx0aXBsZSByZXF1ZXN0cyovCisgICAgICBmcmVlKGRhdGEtPnN0YXRlLmZpcnN0X2hvc3QpOworCisgICAgZGF0YS0+c3RhdGUuZmlyc3RfaG9zdCA9IHN0cmR1cChjb25uLT5ob3N0Lm5hbWUpOworICAgIGlmKCFkYXRhLT5zdGF0ZS5maXJzdF9ob3N0KQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKyAgaHR0cC0+d3JpdGVieXRlY291bnQgPSBodHRwLT5yZWFkYnl0ZWNvdW50ID0gMDsKKworICBpZigoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wmKENVUkxQUk9UT19IVFRQfENVUkxQUk9UT19GVFApKSAmJgorICAgICBkYXRhLT5zZXQudXBsb2FkKSB7CisgICAgaHR0cHJlcSA9IEhUVFBSRVFfUFVUOworICB9CisKKyAgLyogTm93IHNldCB0aGUgJ3JlcXVlc3QnIHBvaW50ZXIgdG8gdGhlIHByb3BlciByZXF1ZXN0IHN0cmluZyAqLworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19DVVNUT01SRVFVRVNUXSkKKyAgICByZXF1ZXN0ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfQ1VTVE9NUkVRVUVTVF07CisgIGVsc2UgeworICAgIGlmKGRhdGEtPnNldC5vcHRfbm9fYm9keSkKKyAgICAgIHJlcXVlc3QgPSAiSEVBRCI7CisgICAgZWxzZSB7CisgICAgICBERUJVR0FTU0VSVCgoaHR0cHJlcSA+IEhUVFBSRVFfTk9ORSkgJiYgKGh0dHByZXEgPCBIVFRQUkVRX0xBU1QpKTsKKyAgICAgIHN3aXRjaChodHRwcmVxKSB7CisgICAgICBjYXNlIEhUVFBSRVFfUE9TVDoKKyAgICAgIGNhc2UgSFRUUFJFUV9QT1NUX0ZPUk06CisgICAgICAgIHJlcXVlc3QgPSAiUE9TVCI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIVFRQUkVRX1BVVDoKKyAgICAgICAgcmVxdWVzdCA9ICJQVVQiOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IC8qIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworICAgICAgY2FzZSBIVFRQUkVRX0dFVDoKKyAgICAgICAgcmVxdWVzdCA9ICJHRVQiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSFRUUFJFUV9IRUFEOgorICAgICAgICByZXF1ZXN0ID0gIkhFQUQiOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvKiBUaGUgVXNlci1BZ2VudCBzdHJpbmcgbWlnaHQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiB1cmwuYyBhbHJlYWR5LCBiZWNhdXNlCisgICAgIGl0IG1pZ2h0IGhhdmUgYmVlbiB1c2VkIGluIHRoZSBwcm94eSBjb25uZWN0LCBidXQgaWYgd2UgaGF2ZSBnb3QgYSBoZWFkZXIKKyAgICAgd2l0aCB0aGUgdXNlci1hZ2VudCBzdHJpbmcgc3BlY2lmaWVkLCB3ZSBlcmFzZSB0aGUgcHJldmlvdXNseSBtYWRlIHN0cmluZworICAgICBoZXJlLiAqLworICBpZihDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiVXNlci1BZ2VudDoiKSAmJiBjb25uLT5hbGxvY3B0ci51YWdlbnQpIHsKKyAgICBmcmVlKGNvbm4tPmFsbG9jcHRyLnVhZ2VudCk7CisgICAgY29ubi0+YWxsb2NwdHIudWFnZW50PU5VTEw7CisgIH0KKworICAvKiBzZXR1cCB0aGUgYXV0aGVudGljYXRpb24gaGVhZGVycyAqLworICByZXN1bHQgPSBDdXJsX2h0dHBfb3V0cHV0X2F1dGgoY29ubiwgcmVxdWVzdCwgcHBhdGgsIEZBTFNFKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgaWYoKGRhdGEtPnN0YXRlLmF1dGhob3N0Lm11bHRpIHx8IGRhdGEtPnN0YXRlLmF1dGhwcm94eS5tdWx0aSkgJiYKKyAgICAgKGh0dHByZXEgIT0gSFRUUFJFUV9HRVQpICYmCisgICAgIChodHRwcmVxICE9IEhUVFBSRVFfSEVBRCkpIHsKKyAgICAvKiBBdXRoIGlzIHJlcXVpcmVkIGFuZCB3ZSBhcmUgbm90IGF1dGhlbnRpY2F0ZWQgeWV0LiBNYWtlIGEgUFVUIG9yIFBPU1QKKyAgICAgICB3aXRoIGNvbnRlbnQtbGVuZ3RoIHplcm8gYXMgYSAicHJvYmUiLiAqLworICAgIGNvbm4tPmJpdHMuYXV0aG5lZyA9IFRSVUU7CisgIH0KKyAgZWxzZQorICAgIGNvbm4tPmJpdHMuYXV0aG5lZyA9IEZBTFNFOworCisgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucmVmKTsKKyAgaWYoZGF0YS0+Y2hhbmdlLnJlZmVyZXIgJiYgIUN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJSZWZlcmVyOiIpKQorICAgIGNvbm4tPmFsbG9jcHRyLnJlZiA9IGFwcmludGYoIlJlZmVyZXI6ICVzXHJcbiIsIGRhdGEtPmNoYW5nZS5yZWZlcmVyKTsKKyAgZWxzZQorICAgIGNvbm4tPmFsbG9jcHRyLnJlZiA9IE5VTEw7CisKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQ09PS0lFXSAmJiAhQ3VybF9jaGVja2hlYWRlcnMoZGF0YSwgIkNvb2tpZToiKSkKKyAgICBhZGRjb29raWVzID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfQ09PS0lFXTsKKworICBpZighQ3VybF9jaGVja2hlYWRlcnMoZGF0YSwgIkFjY2VwdC1FbmNvZGluZzoiKSAmJgorICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19FTkNPRElOR10pIHsKKyAgICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZyk7CisgICAgY29ubi0+YWxsb2NwdHIuYWNjZXB0X2VuY29kaW5nID0KKyAgICAgIGFwcmludGYoIkFjY2VwdC1FbmNvZGluZzogJXNcclxuIiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfRU5DT0RJTkddKTsKKyAgICBpZighY29ubi0+YWxsb2NwdHIuYWNjZXB0X2VuY29kaW5nKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworI2lmZGVmIEhBVkVfTElCWgorICAvKiB3ZSBvbmx5IGNvbnNpZGVyIHRyYW5zZmVyLWVuY29kaW5nIG1hZ2ljIGlmIGxpYnogc3VwcG9ydCBpcyBidWlsdC1pbiAqLworCisgIGlmKCFDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiVEU6IikgJiYgZGF0YS0+c2V0Lmh0dHBfdHJhbnNmZXJfZW5jb2RpbmcpIHsKKyAgICAvKiBXaGVuIHdlIGFyZSB0byBpbnNlcnQgYSBURTogaGVhZGVyIGluIHRoZSByZXF1ZXN0LCB3ZSBtdXN0IGFsc28gaW5zZXJ0CisgICAgICAgVEUgaW4gYSBDb25uZWN0aW9uOiBoZWFkZXIsIHNvIHdlIG5lZWQgdG8gbWVyZ2UgdGhlIGN1c3RvbSBwcm92aWRlZAorICAgICAgIENvbm5lY3Rpb246IGhlYWRlciBhbmQgcHJldmVudCB0aGUgb3JpZ2luYWwgdG8gZ2V0IHNlbnQuIE5vdGUgdGhhdCBpZgorICAgICAgIHRoZSB1c2VyIGhhcyBpbnNlcnRlZCBoaXMvaGVycyBvd24gVEU6IGhlYWRlciB3ZSBkb24ndCBkbyB0aGlzIG1hZ2ljCisgICAgICAgYnV0IHRoZW4gYXNzdW1lIHRoYXQgdGhlIHVzZXIgd2lsbCBoYW5kbGUgaXQgYWxsISAqLworICAgIGNoYXIgKmNwdHIgPSBDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiQ29ubmVjdGlvbjoiKTsKKyNkZWZpbmUgVEVfSEVBREVSICJURTogZ3ppcFxyXG4iCisKKyAgICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLnRlKTsKKworICAgIC8qIENyZWF0ZSB0aGUgKHVwZGF0ZWQpIENvbm5lY3Rpb246IGhlYWRlciAqLworICAgIGNvbm4tPmFsbG9jcHRyLnRlID0gY3B0cj8gYXByaW50ZigiJXMsIFRFXHJcbiIgVEVfSEVBREVSLCBjcHRyKToKKyAgICAgIHN0cmR1cCgiQ29ubmVjdGlvbjogVEVcclxuIiBURV9IRUFERVIpOworCisgICAgaWYoIWNvbm4tPmFsbG9jcHRyLnRlKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKyNlbmRpZgorCisgIHB0ciA9IEN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJUcmFuc2Zlci1FbmNvZGluZzoiKTsKKyAgaWYocHRyKSB7CisgICAgLyogU29tZSBraW5kIG9mIFRFIGlzIHJlcXVlc3RlZCwgY2hlY2sgaWYgJ2NodW5rZWQnIGlzIGNob3NlbiAqLworICAgIGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5ID0KKyAgICAgIEN1cmxfY29tcGFyZWhlYWRlcihwdHIsICJUcmFuc2Zlci1FbmNvZGluZzoiLCAiY2h1bmtlZCIpOworICB9CisgIGVsc2UgeworICAgIGlmKChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCZDVVJMUFJPVE9fSFRUUCkgJiYKKyAgICAgICBkYXRhLT5zZXQudXBsb2FkICYmCisgICAgICAgKGRhdGEtPnNldC5pbmZpbGVzaXplID09IC0xKSkgeworICAgICAgaWYoY29ubi0+Yml0cy5hdXRobmVnKQorICAgICAgICAvKiBkb24ndCBlbmFibGUgY2h1bmtlZCBkdXJpbmcgYXV0aCBuZWcgKi8KKyAgICAgICAgOworICAgICAgZWxzZSBpZih1c2VfaHR0cF8xXzEoZGF0YSwgY29ubikpIHsKKyAgICAgICAgLyogSFRUUCwgdXBsb2FkLCB1bmtub3duIGZpbGUgc2l6ZSBhbmQgbm90IEhUVFAgMS4wICovCisgICAgICAgIGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5ID0gVFJVRTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBmYWlsZihkYXRhLCAiQ2h1bmt5IHVwbG9hZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEhUVFAgMS4wIik7CisgICAgICAgIHJldHVybiBDVVJMRV9VUExPQURfRkFJTEVEOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIGVsc2UsIG5vIGNodW5reSB1cGxvYWQgKi8KKyAgICAgIGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5ID0gRkFMU0U7CisgICAgfQorCisgICAgaWYoZGF0YS0+cmVxLnVwbG9hZF9jaHVua3kpCisgICAgICB0ZSA9ICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxyXG4iOworICB9CisKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5ob3N0KTsKKworICBwdHIgPSBDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiSG9zdDoiKTsKKyAgaWYocHRyICYmICghZGF0YS0+c3RhdGUudGhpc19pc19hX2ZvbGxvdyB8fAorICAgICAgICAgICAgIEN1cmxfcmF3X2VxdWFsKGRhdGEtPnN0YXRlLmZpcnN0X2hvc3QsIGNvbm4tPmhvc3QubmFtZSkpKSB7CisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NPT0tJRVMpCisgICAgLyogSWYgd2UgaGF2ZSBhIGdpdmVuIGN1c3RvbSBIb3N0OiBoZWFkZXIsIHdlIGV4dHJhY3QgdGhlIGhvc3QgbmFtZSBpbgorICAgICAgIG9yZGVyIHRvIHBvc3NpYmx5IHVzZSBpdCBmb3IgY29va2llIHJlYXNvbnMgbGF0ZXIgb24uIFdlIG9ubHkgYWxsb3cgdGhlCisgICAgICAgY3VzdG9tIEhvc3Q6IGhlYWRlciBpZiB0aGlzIGlzIE5PVCBhIHJlZGlyZWN0LCBhcyBzZXR0aW5nIEhvc3Q6IGluIHRoZQorICAgICAgIHJlZGlyZWN0ZWQgcmVxdWVzdCBpcyBiZWluZyBvdXQgb24gdGhpbiBpY2UuIEV4Y2VwdCBpZiB0aGUgaG9zdCBuYW1lCisgICAgICAgaXMgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IG9uZSEgKi8KKyAgICBjaGFyICpjb29raWVob3N0ID0gY29weV9oZWFkZXJfdmFsdWUocHRyKTsKKyAgICBpZighY29va2llaG9zdCkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGlmKCEqY29va2llaG9zdCkKKyAgICAgIC8qIGlnbm9yZSBlbXB0eSBkYXRhICovCisgICAgICBmcmVlKGNvb2tpZWhvc3QpOworICAgIGVsc2UgeworICAgICAgLyogSWYgdGhlIGhvc3QgYmVnaW5zIHdpdGggJ1snLCB3ZSBzdGFydCBzZWFyY2hpbmcgZm9yIHRoZSBwb3J0IGFmdGVyCisgICAgICAgICB0aGUgYnJhY2tldCBoYXMgYmVlbiBjbG9zZWQgKi8KKyAgICAgIGludCBzdGFydHNlYXJjaCA9IDA7CisgICAgICBpZigqY29va2llaG9zdCA9PSAnWycpIHsKKyAgICAgICAgY2hhciAqY2xvc2luZ2JyYWNrZXQ7CisgICAgICAgIGNsb3NpbmdicmFja2V0ID0gc3RyY2hyKGNvb2tpZWhvc3QrMSwgJ10nKTsKKyAgICAgICAgaWYoY2xvc2luZ2JyYWNrZXQpCisgICAgICAgICAgKmNsb3NpbmdicmFja2V0ID0gMDsKKyAgICAgICAgLyogc2luY2UgdGhlICdjb29raWVob3N0JyBpcyBhbiBhbGxvY2F0ZWQgbWVtb3J5IGFyZWEgdGhhdCB3aWxsIGJlCisgICAgICAgICAgIGZyZWVkIGxhdGVyIHdlIGNhbm5vdCBzaW1wbHkgaW5jcmVtZW50IHRoZSBwb2ludGVyICovCisgICAgICAgIG1lbW1vdmUoY29va2llaG9zdCwgY29va2llaG9zdCArIDEsIHN0cmxlbihjb29raWVob3N0KSAtIDEpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGNoYXIgKmNvbG9uID0gc3RyY2hyKGNvb2tpZWhvc3QgKyBzdGFydHNlYXJjaCwgJzonKTsKKyAgICAgICAgaWYoY29sb24pCisgICAgICAgICAgKmNvbG9uID0gMDsgLyogVGhlIGhvc3QgbXVzdCBub3QgaW5jbHVkZSBhbiBlbWJlZGRlZCBwb3J0IG51bWJlciAqLworICAgICAgfQorICAgICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5jb29raWVob3N0KTsKKyAgICAgIGNvbm4tPmFsbG9jcHRyLmNvb2tpZWhvc3QgPSBjb29raWVob3N0OworICAgIH0KKyNlbmRpZgorCisgICAgY29ubi0+YWxsb2NwdHIuaG9zdCA9IE5VTEw7CisgIH0KKyAgZWxzZSB7CisgICAgLyogV2hlbiBidWlsZGluZyBIb3N0OiBoZWFkZXJzLCB3ZSBtdXN0IHB1dCB0aGUgaG9zdCBuYW1lIHdpdGhpbgorICAgICAgIFticmFja2V0c10gaWYgdGhlIGhvc3QgbmFtZSBpcyBhIHBsYWluIElQdjYtYWRkcmVzcy4gUkZDMjczMi1zdHlsZS4gKi8KKworICAgIGlmKCgoY29ubi0+Z2l2ZW4tPnByb3RvY29sJkNVUkxQUk9UT19IVFRQUykgJiYKKyAgICAgICAgKGNvbm4tPnJlbW90ZV9wb3J0ID09IFBPUlRfSFRUUFMpKSB8fAorICAgICAgICgoY29ubi0+Z2l2ZW4tPnByb3RvY29sJkNVUkxQUk9UT19IVFRQKSAmJgorICAgICAgICAoY29ubi0+cmVtb3RlX3BvcnQgPT0gUE9SVF9IVFRQKSkgKQorICAgICAgLyogaWYoSFRUUFMgb24gcG9ydCA0NDMpIE9SIChIVFRQIG9uIHBvcnQgODApIHRoZW4gZG9uJ3QgaW5jbHVkZQorICAgICAgICAgdGhlIHBvcnQgbnVtYmVyIGluIHRoZSBob3N0IHN0cmluZyAqLworICAgICAgY29ubi0+YWxsb2NwdHIuaG9zdCA9IGFwcmludGYoIkhvc3Q6ICVzJXMlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Yml0cy5pcHY2X2lwPyJbIjoiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmlwdjZfaXA/Il0iOiIiKTsKKyAgICBlbHNlCisgICAgICBjb25uLT5hbGxvY3B0ci5ob3N0ID0gYXByaW50ZigiSG9zdDogJXMlcyVzOiVodVxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+Yml0cy5pcHY2X2lwPyJbIjoiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmlwdjZfaXA/Il0iOiIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cmVtb3RlX3BvcnQpOworCisgICAgaWYoIWNvbm4tPmFsbG9jcHRyLmhvc3QpCisgICAgICAvKiB3aXRob3V0IEhvc3Q6IHdlIGNhbid0IG1ha2UgYSBuaWNlIHJlcXVlc3QgKi8KKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmICFjb25uLT5iaXRzLnR1bm5lbF9wcm94eSkgIHsKKyAgICAvKiBVc2luZyBhIHByb3h5IGJ1dCBkb2VzIG5vdCB0dW5uZWwgdGhyb3VnaCBpdCAqLworCisgICAgLyogVGhlIHBhdGggc2VudCB0byB0aGUgcHJveHkgaXMgaW4gZmFjdCB0aGUgZW50aXJlIFVSTC4gQnV0IGlmIHRoZSByZW1vdGUKKyAgICAgICBob3N0IGlzIGEgSUROLW5hbWUsIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIHJlcXVlc3Qgd2UgcHJvZHVjZSBvbmx5CisgICAgICAgdXNlcyB0aGUgZW5jb2RlZCBob3N0IG5hbWUhICovCisgICAgaWYoY29ubi0+aG9zdC5kaXNwbmFtZSAhPSBjb25uLT5ob3N0Lm5hbWUpIHsKKyAgICAgIGNoYXIgKnVybCA9IGRhdGEtPmNoYW5nZS51cmw7CisgICAgICBwdHIgPSBzdHJzdHIodXJsLCBjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgICAgIGlmKHB0cikgeworICAgICAgICAvKiBUaGlzIGlzIHdoZXJlIHRoZSBkaXNwbGF5IG5hbWUgc3RhcnRzIGluIHRoZSBVUkwsIG5vdyByZXBsYWNlIHRoaXMKKyAgICAgICAgICAgcGFydCB3aXRoIHRoZSBlbmNvZGVkIG5hbWUuIFRPRE86IFRoaXMgbWV0aG9kIG9mIHJlcGxhY2luZyB0aGUgaG9zdAorICAgICAgICAgICBuYW1lIGlzIHJhdGhlciBjcnVkZSBhcyBJIGJlbGlldmUgdGhlcmUncyBhIHNsaWdodCByaXNrIHRoYXQgdGhlCisgICAgICAgICAgIHVzZXIgaGFzIGVudGVyZWQgYSB1c2VyIG5hbWUgb3IgcGFzc3dvcmQgdGhhdCBjb250YWluIHRoZSBob3N0IG5hbWUKKyAgICAgICAgICAgc3RyaW5nLiAqLworICAgICAgICBzaXplX3QgY3VycmxlbiA9IHN0cmxlbihjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgICAgICAgc2l6ZV90IG5ld2xlbiA9IHN0cmxlbihjb25uLT5ob3N0Lm5hbWUpOworICAgICAgICBzaXplX3QgdXJsbGVuID0gc3RybGVuKHVybCk7CisKKyAgICAgICAgY2hhciAqbmV3dXJsOworCisgICAgICAgIG5ld3VybCA9IG1hbGxvYyh1cmxsZW4gKyBuZXdsZW4gLSBjdXJybGVuICsgMSk7CisgICAgICAgIGlmKG5ld3VybCkgeworICAgICAgICAgIC8qIGNvcHkgdGhlIHBhcnQgYmVmb3JlIHRoZSBob3N0IG5hbWUgKi8KKyAgICAgICAgICBtZW1jcHkobmV3dXJsLCB1cmwsIHB0ciAtIHVybCk7CisgICAgICAgICAgLyogYXBwZW5kIHRoZSBuZXcgaG9zdCBuYW1lIGluc3RlYWQgb2YgdGhlIG9sZCAqLworICAgICAgICAgIG1lbWNweShuZXd1cmwgKyAocHRyIC0gdXJsKSwgY29ubi0+aG9zdC5uYW1lLCBuZXdsZW4pOworICAgICAgICAgIC8qIGFwcGVuZCB0aGUgcGllY2UgYWZ0ZXIgdGhlIGhvc3QgbmFtZSAqLworICAgICAgICAgIG1lbWNweShuZXd1cmwgKyBuZXdsZW4gKyAocHRyIC0gdXJsKSwKKyAgICAgICAgICAgICAgICAgcHRyICsgY3VycmxlbiwgLyogY29weSB0aGUgdHJhaWxpbmcgemVybyBieXRlIHRvbyAqLworICAgICAgICAgICAgICAgICB1cmxsZW4gLSAocHRyLXVybCkgLSBjdXJybGVuICsgMSk7CisgICAgICAgICAgaWYoZGF0YS0+Y2hhbmdlLnVybF9hbGxvYykgeworICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5jaGFuZ2UudXJsKTsKKyAgICAgICAgICAgIGRhdGEtPmNoYW5nZS51cmxfYWxsb2MgPSBGQUxTRTsKKyAgICAgICAgICB9CisgICAgICAgICAgZGF0YS0+Y2hhbmdlLnVybCA9IG5ld3VybDsKKyAgICAgICAgICBkYXRhLT5jaGFuZ2UudXJsX2FsbG9jID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICB9CisgICAgfQorICAgIHBwYXRoID0gZGF0YS0+Y2hhbmdlLnVybDsKKyAgICBpZihjaGVja3ByZWZpeCgiZnRwOi8vIiwgcHBhdGgpKSB7CisgICAgICBpZihkYXRhLT5zZXQucHJveHlfdHJhbnNmZXJfbW9kZSkgeworICAgICAgICAvKiB3aGVuIGRvaW5nIGZ0cCwgYXBwZW5kIDt0eXBlPTxhfGk+IGlmIG5vdCBwcmVzZW50ICovCisgICAgICAgIGNoYXIgKnR5cGUgPSBzdHJzdHIocHBhdGgsICI7dHlwZT0iKTsKKyAgICAgICAgaWYodHlwZSAmJiB0eXBlWzZdICYmIHR5cGVbN10gPT0gMCkgeworICAgICAgICAgIHN3aXRjaCAoQ3VybF9yYXdfdG91cHBlcih0eXBlWzZdKSkgeworICAgICAgICAgIGNhc2UgJ0EnOgorICAgICAgICAgIGNhc2UgJ0QnOgorICAgICAgICAgIGNhc2UgJ0knOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHR5cGUgPSBOVUxMOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZighdHlwZSkgeworICAgICAgICAgIGNoYXIgKnAgPSBmdHBfdHlwZWNvZGU7CisgICAgICAgICAgLyogYXZvaWQgc2VuZGluZyBpbnZhbGlkIFVSTHMgbGlrZSBmdHA6Ly9leGFtcGxlLmNvbTt0eXBlPWkgaWYgdGhlCisgICAgICAgICAgICogdXNlciBzcGVjaWZpZWQgZnRwOi8vZXhhbXBsZS5jb20gd2l0aG91dCB0aGUgc2xhc2ggKi8KKyAgICAgICAgICBpZighKmRhdGEtPnN0YXRlLnBhdGggJiYgcHBhdGhbc3RybGVuKHBwYXRoKSAtIDFdICE9ICcvJykgeworICAgICAgICAgICAgKnArKyA9ICcvJzsKKyAgICAgICAgICB9CisgICAgICAgICAgc25wcmludGYocCwgc2l6ZW9mKGZ0cF90eXBlY29kZSkgLSAxLCAiO3R5cGU9JWMiLAorICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5wcmVmZXJfYXNjaWkgPyAnYScgOiAnaScpOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZihjb25uLT5iaXRzLnVzZXJfcGFzc3dkICYmICFjb25uLT5iaXRzLnVzZXJwd2RfaW5fdXJsKQorICAgICAgICBwYXN0ZV9mdHBfdXNlcnB3ZCA9IFRSVUU7CisgICAgfQorICB9CisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCisKKyAgaWYoSFRUUFJFUV9QT1NUX0ZPUk0gPT0gaHR0cHJlcSkgeworICAgIC8qIHdlIG11c3QgYnVpbGQgdGhlIHdob2xlIHBvc3Qgc2VxdWVuY2UgZmlyc3QsIHNvIHRoYXQgd2UgaGF2ZSBhIHNpemUgb2YKKyAgICAgICB0aGUgd2hvbGUgdHJhbnNmZXIgYmVmb3JlIHdlIHN0YXJ0IHRvIHNlbmQgaXQgKi8KKyAgICByZXN1bHQgPSBDdXJsX2dldGZvcm1kYXRhKGRhdGEsICZodHRwLT5zZW5kaXQsIGRhdGEtPnNldC5odHRwcG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJDb250ZW50LVR5cGU6IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHR0cC0+cG9zdHNpemUpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBodHRwLT5wX2FjY2VwdCA9IEN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJBY2NlcHQ6Iik/TlVMTDoiQWNjZXB0OiAqLypcclxuIjsKKworICBpZigoIChIVFRQUkVRX1BPU1QgPT0gaHR0cHJlcSkgfHwKKyAgICAgICAoSFRUUFJFUV9QT1NUX0ZPUk0gPT0gaHR0cHJlcSkgfHwKKyAgICAgICAoSFRUUFJFUV9QVVQgPT0gaHR0cHJlcSkgKSAmJgorICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogUmVzdW1pbmcgdXBsb2FkIGluIEhUVFAgbWVhbnMgdGhhdCB3ZSBQVVQgb3IgUE9TVCBhbmQgdGhhdCB3ZSBoYXZlCisgICAgICogZ290IGEgcmVzdW1lX2Zyb20gdmFsdWUgc2V0LiBUaGUgcmVzdW1lIHZhbHVlIGhhcyBhbHJlYWR5IGNyZWF0ZWQKKyAgICAgKiBhIFJhbmdlOiBoZWFkZXIgdGhhdCB3aWxsIGJlIHBhc3NlZCBhbG9uZy4gV2UgbmVlZCB0byAiZmFzdCBmb3J3YXJkIgorICAgICAqIHRoZSBmaWxlIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgYW5kIGRlY3JlYXNlIHRoZSBhc3N1bWUgdXBsb2FkCisgICAgICogZmlsZSBzaXplIGJlZm9yZSB3ZSBjb250aW51ZSB0aGlzIHZlbnR1cmUgaW4gdGhlIGRhcmsgbGFuZHMgb2YgSFRUUC4KKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPCAwICkgeworICAgICAgLyoKKyAgICAgICAqIFRoaXMgaXMgbWVhbnQgdG8gZ2V0IHRoZSBzaXplIG9mIHRoZSBwcmVzZW50IHJlbW90ZS1maWxlIGJ5IGl0c2VsZi4KKyAgICAgICAqIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBub3cuIEJhaWwgb3V0IQorICAgICAgICovCisgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9IDA7CisgICAgfQorCisgICAgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gJiYgIWRhdGEtPnN0YXRlLnRoaXNfaXNfYV9mb2xsb3cpIHsKKyAgICAgIC8qIGRvIHdlIHN0aWxsIGdhbWU/ICovCisKKyAgICAgIC8qIE5vdywgbGV0J3MgcmVhZCBvZmYgdGhlIHByb3BlciBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUKKyAgICAgICAgIGlucHV0LiAqLworICAgICAgaWYoY29ubi0+c2Vla19mdW5jKSB7CisgICAgICAgIHNlZWtlcnIgPSBjb25uLT5zZWVrX2Z1bmMoY29ubi0+c2Vla19jbGllbnQsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFRUtfU0VUKTsKKyAgICAgIH0KKworICAgICAgaWYoc2Vla2VyciAhPSBDVVJMX1NFRUtGVU5DX09LKSB7CisgICAgICAgIGlmKHNlZWtlcnIgIT0gQ1VSTF9TRUVLRlVOQ19DQU5UU0VFSykgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2VlayBzdHJlYW0iKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfUkVBRF9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICAvKiB3aGVuIHNlZWtlcnIgPT0gQ1VSTF9TRUVLRlVOQ19DQU5UU0VFSyAoY2FuJ3Qgc2VlayB0byBvZmZzZXQpICovCisgICAgICAgIGVsc2UgeworICAgICAgICAgIGN1cmxfb2ZmX3QgcGFzc2VkPTA7CisgICAgICAgICAgZG8geworICAgICAgICAgICAgc2l6ZV90IHJlYWR0aGlzYW1vdW50bm93ID0KKyAgICAgICAgICAgICAgKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIC0gcGFzc2VkID4gQ1VSTF9PRkZfVF9DKEJVRlNJWkUpKSA/CisgICAgICAgICAgICAgIEJVRlNJWkUgOiBjdXJseF9zb3RvdXooZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gLSBwYXNzZWQpOworCisgICAgICAgICAgICBzaXplX3QgYWN0dWFsbHlyZWFkID0KKyAgICAgICAgICAgICAgZGF0YS0+c2V0LmZyZWFkX2Z1bmMoZGF0YS0+c3RhdGUuYnVmZmVyLCAxLCByZWFkdGhpc2Ftb3VudG5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LmluKTsKKworICAgICAgICAgICAgcGFzc2VkICs9IGFjdHVhbGx5cmVhZDsKKyAgICAgICAgICAgIGlmKChhY3R1YWxseXJlYWQgPT0gMCkgfHwgKGFjdHVhbGx5cmVhZCA+IHJlYWR0aGlzYW1vdW50bm93KSkgeworICAgICAgICAgICAgICAvKiB0aGlzIGNoZWNrcyBmb3IgZ3JlYXRlci10aGFuIG9ubHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgIENVUkxfUkVBREZVTkNfQUJPUlQgcmV0dXJuIGNvZGUgc3RpbGwgYWJvcnRzICovCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBvbmx5IHJlYWQgJSIgRk9STUFUX09GRl9UCisgICAgICAgICAgICAgICAgICAgICIgYnl0ZXMgZnJvbSB0aGUgaW5wdXQiLAorICAgICAgICAgICAgICAgICAgICBwYXNzZWQpOworICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfUkVBRF9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IHdoaWxlKHBhc3NlZCA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBub3csIGRlY3JlYXNlIHRoZSBzaXplIG9mIHRoZSByZWFkICovCisgICAgICBpZihkYXRhLT5zZXQuaW5maWxlc2l6ZT4wKSB7CisgICAgICAgIGRhdGEtPnNldC5pbmZpbGVzaXplIC09IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworCisgICAgICAgIGlmKGRhdGEtPnNldC5pbmZpbGVzaXplIDw9IDApIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiRmlsZSBhbHJlYWR5IGNvbXBsZXRlbHkgdXBsb2FkZWQiKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfUEFSVElBTF9GSUxFOworICAgICAgICB9CisgICAgICB9CisgICAgICAvKiB3ZSd2ZSBwYXNzZWQsIHByb2NlZWQgYXMgbm9ybWFsICovCisgICAgfQorICB9CisgIGlmKGRhdGEtPnN0YXRlLnVzZV9yYW5nZSkgeworICAgIC8qCisgICAgICogQSByYW5nZSBpcyBzZWxlY3RlZC4gV2UgdXNlIGRpZmZlcmVudCBoZWFkZXJzIHdoZXRoZXIgd2UncmUgZG93bmxvYWRpbmcKKyAgICAgKiBvciB1cGxvYWRpbmcgYW5kIHdlIGFsd2F5cyBsZXQgY3VzdG9taXplZCBoZWFkZXJzIG92ZXJyaWRlIG91ciBpbnRlcm5hbAorICAgICAqIG9uZXMgaWYgYW55IHN1Y2ggYXJlIHNwZWNpZmllZC4KKyAgICAgKi8KKyAgICBpZigoKGh0dHByZXEgPT0gSFRUUFJFUV9HRVQpIHx8IChodHRwcmVxID09IEhUVFBSRVFfSEVBRCkpICYmCisgICAgICAgIUN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJSYW5nZToiKSkgeworICAgICAgLyogaWYgYSBsaW5lIGxpa2UgdGhpcyB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQsIGZyZWUgdGhlIHByZXZpb3VzIG9uZSAqLworICAgICAgaWYoY29ubi0+YWxsb2NwdHIucmFuZ2VsaW5lKQorICAgICAgICBmcmVlKGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSk7CisgICAgICBjb25uLT5hbGxvY3B0ci5yYW5nZWxpbmUgPSBhcHJpbnRmKCJSYW5nZTogYnl0ZXM9JXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmFuZ2UpOworICAgIH0KKyAgICBlbHNlIGlmKChodHRwcmVxICE9IEhUVFBSRVFfR0VUKSAmJgorICAgICAgICAgICAgIUN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJDb250ZW50LVJhbmdlOiIpKSB7CisKKyAgICAgIC8qIGlmIGEgbGluZSBsaWtlIHRoaXMgd2FzIGFscmVhZHkgYWxsb2NhdGVkLCBmcmVlIHRoZSBwcmV2aW91cyBvbmUgKi8KKyAgICAgIGlmKGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSkKKyAgICAgICAgZnJlZShjb25uLT5hbGxvY3B0ci5yYW5nZWxpbmUpOworCisgICAgICBpZihkYXRhLT5zZXQuc2V0X3Jlc3VtZV9mcm9tIDwgMCkgeworICAgICAgICAvKiBVcGxvYWQgcmVzdW1lIHdhcyBhc2tlZCBmb3IsIGJ1dCB3ZSBkb24ndCBrbm93IHRoZSBzaXplIG9mIHRoZQorICAgICAgICAgICByZW1vdGUgcGFydCBzbyB3ZSB0ZWxsIHRoZSBzZXJ2ZXIgKGFuZCBhY3QgYWNjb3JkaW5nbHkpIHRoYXQgd2UKKyAgICAgICAgICAgdXBsb2FkIHRoZSB3aG9sZSBmaWxlIChhZ2FpbikgKi8KKyAgICAgICAgY29ubi0+YWxsb2NwdHIucmFuZ2VsaW5lID0KKyAgICAgICAgICBhcHJpbnRmKCJDb250ZW50LVJhbmdlOiBieXRlcyAwLSUiIEZPUk1BVF9PRkZfVAorICAgICAgICAgICAgICAgICAgIi8lIiBGT1JNQVRfT0ZGX1QgIlxyXG4iLAorICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LmluZmlsZXNpemUgLSAxLCBkYXRhLT5zZXQuaW5maWxlc2l6ZSk7CisKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20pIHsKKyAgICAgICAgLyogVGhpcyBpcyBiZWNhdXNlICJyZXN1bWUiIHdhcyBzZWxlY3RlZCAqLworICAgICAgICBjdXJsX29mZl90IHRvdGFsX2V4cGVjdGVkX3NpemU9CisgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gKyBkYXRhLT5zZXQuaW5maWxlc2l6ZTsKKyAgICAgICAgY29ubi0+YWxsb2NwdHIucmFuZ2VsaW5lID0KKyAgICAgICAgICBhcHJpbnRmKCJDb250ZW50LVJhbmdlOiBieXRlcyAlcyUiIEZPUk1BVF9PRkZfVAorICAgICAgICAgICAgICAgICAgIi8lIiBGT1JNQVRfT0ZGX1QgIlxyXG4iLAorICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmFuZ2UsIHRvdGFsX2V4cGVjdGVkX3NpemUtMSwKKyAgICAgICAgICAgICAgICAgIHRvdGFsX2V4cGVjdGVkX3NpemUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIFJhbmdlIHdhcyBzZWxlY3RlZCBhbmQgdGhlbiB3ZSBqdXN0IHBhc3MgdGhlIGluY29taW5nIHJhbmdlIGFuZAorICAgICAgICAgICBhcHBlbmQgdG90YWwgc2l6ZSAqLworICAgICAgICBjb25uLT5hbGxvY3B0ci5yYW5nZWxpbmUgPQorICAgICAgICAgIGFwcmludGYoIkNvbnRlbnQtUmFuZ2U6IGJ5dGVzICVzLyUiIEZPUk1BVF9PRkZfVCAiXHJcbiIsCisgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5yYW5nZSwgZGF0YS0+c2V0LmluZmlsZXNpemUpOworICAgICAgfQorICAgICAgaWYoIWNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSkKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQorICB9CisKKyAgLyogVXNlIDEuMSB1bmxlc3MgdGhlIHVzZXIgc3BlY2lmaWNhbGx5IGFza2VkIGZvciAxLjAgb3IgdGhlIHNlcnZlciBvbmx5CisgICAgIHN1cHBvcnRzIDEuMCAqLworICBodHRwc3RyaW5nPSB1c2VfaHR0cF8xXzEoZGF0YSwgY29ubik/IjEuMSI6IjEuMCI7CisKKyAgLyogaW5pdGlhbGl6ZSBhIGR5bmFtaWMgc2VuZC1idWZmZXIgKi8KKyAgcmVxX2J1ZmZlciA9IEN1cmxfYWRkX2J1ZmZlcl9pbml0KCk7CisKKyAgaWYoIXJlcV9idWZmZXIpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgLyogYWRkIHRoZSBtYWluIHJlcXVlc3Qgc3R1ZmYgKi8KKyAgLyogR0VUL0hFQUQvUE9TVC9QVVQgKi8KKyAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZihyZXFfYnVmZmVyLCAiJXMgIiwgcmVxdWVzdCk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIC8qIHVybCAqLworICBpZihwYXN0ZV9mdHBfdXNlcnB3ZCkKKyAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKHJlcV9idWZmZXIsICJmdHA6Ly8lczolc0AlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT51c2VyLCBjb25uLT5wYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcGF0aCArIHNpemVvZigiZnRwOi8vIikgLSAxKTsKKyAgZWxzZQorICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcihyZXFfYnVmZmVyLCBwcGF0aCwgc3RybGVuKHBwYXRoKSk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIHJlc3VsdCA9CisgICAgQ3VybF9hZGRfYnVmZmVyZihyZXFfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiBmdHAgdHlwZWNvZGUgKDt0eXBlPXgpICovCisgICAgICAgICAgICAgICAgICAgICAiIEhUVFAvJXNcclxuIiAvKiBIVFRQIHZlcnNpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogcHJveHl1c2VycHdkICovCisgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHVzZXJwd2QgKi8KKyAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogcmFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogdXNlciBhZ2VudCAqLworICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiBob3N0ICovCisgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIGFjY2VwdCAqLworICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiBURTogKi8KKyAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogYWNjZXB0LWVuY29kaW5nICovCisgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHJlZmVyZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogUHJveHktQ29ubmVjdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgIiVzIiwvKiB0cmFuc2Zlci1lbmNvZGluZyAqLworCisgICAgICAgICAgICAgICAgICAgICBmdHBfdHlwZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICBodHRwc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkPworICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOiIiLAorICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIudXNlcnB3ZD9jb25uLT5hbGxvY3B0ci51c2VycHdkOiIiLAorICAgICAgICAgICAgICAgICAgICAgKGRhdGEtPnN0YXRlLnVzZV9yYW5nZSAmJiBjb25uLT5hbGxvY3B0ci5yYW5nZWxpbmUpPworICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIucmFuZ2VsaW5lOiIiLAorICAgICAgICAgICAgICAgICAgICAgKGRhdGEtPnNldC5zdHJbU1RSSU5HX1VTRVJBR0VOVF0gJiYKKyAgICAgICAgICAgICAgICAgICAgICAqZGF0YS0+c2V0LnN0cltTVFJJTkdfVVNFUkFHRU5UXSAmJgorICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLnVhZ2VudCk/CisgICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci51YWdlbnQ6IiIsCisgICAgICAgICAgICAgICAgICAgICAoY29ubi0+YWxsb2NwdHIuaG9zdD9jb25uLT5hbGxvY3B0ci5ob3N0OiIiKSwKKyAgICAgICAgICAgICAgICAgICAgIGh0dHAtPnBfYWNjZXB0P2h0dHAtPnBfYWNjZXB0OiIiLAorICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIudGU/Y29ubi0+YWxsb2NwdHIudGU6IiIsCisgICAgICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LnN0cltTVFJJTkdfRU5DT0RJTkddICYmCisgICAgICAgICAgICAgICAgICAgICAgKmRhdGEtPnNldC5zdHJbU1RSSU5HX0VOQ09ESU5HXSAmJgorICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZyk/CisgICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci5hY2NlcHRfZW5jb2Rpbmc6IiIsCisgICAgICAgICAgICAgICAgICAgICAoZGF0YS0+Y2hhbmdlLnJlZmVyZXIgJiYgY29ubi0+YWxsb2NwdHIucmVmKT8KKyAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLnJlZjoiIiAvKiBSZWZlcmVyOiA8ZGF0YT4gKi8sCisgICAgICAgICAgICAgICAgICAgICAoY29ubi0+Yml0cy5odHRwcHJveHkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAhY29ubi0+Yml0cy50dW5uZWxfcHJveHkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAhQ3VybF9jaGVja2hlYWRlcnMoZGF0YSwgIlByb3h5LUNvbm5lY3Rpb246IikpPworICAgICAgICAgICAgICAgICAgICAgIlByb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIjoiIiwKKyAgICAgICAgICAgICAgICAgICAgIHRlCisgICAgICApOworCisgIC8qCisgICAqIEZyZWUgdXNlcnB3ZCBub3cgLS0tIGNhbm5vdCByZXVzZSB0aGlzIGZvciBOZWdvdGlhdGUgYW5kIHBvc3NpYmx5IE5UTE0KKyAgICogd2l0aCBiYXNpYyBhbmQgZGlnZXN0LCBpdCB3aWxsIGJlIGZyZWVkIGFueXdheSBieSB0aGUgbmV4dCByZXF1ZXN0CisgICAqLworCisgIEN1cmxfc2FmZWZyZWUgKGNvbm4tPmFsbG9jcHRyLnVzZXJwd2QpOworICBjb25uLT5hbGxvY3B0ci51c2VycHdkID0gTlVMTDsKKworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9DT09LSUVTKQorICBpZihkYXRhLT5jb29raWVzIHx8IGFkZGNvb2tpZXMpIHsKKyAgICBzdHJ1Y3QgQ29va2llICpjbz1OVUxMOyAvKiBubyBjb29raWVzIGZyb20gc3RhcnQgKi8KKyAgICBpbnQgY291bnQ9MDsKKworICAgIGlmKGRhdGEtPmNvb2tpZXMpIHsKKyAgICAgIEN1cmxfc2hhcmVfbG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUsIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKTsKKyAgICAgIGNvID0gQ3VybF9jb29raWVfZ2V0bGlzdChkYXRhLT5jb29raWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLmNvb2tpZWhvc3Q/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIuY29va2llaG9zdDpob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbm4tPmhhbmRsZXItPnByb3RvY29sJkNVUkxQUk9UT19IVFRQUyk/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRTpGQUxTRSk7CisgICAgICBDdXJsX3NoYXJlX3VubG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUpOworICAgIH0KKyAgICBpZihjbykgeworICAgICAgc3RydWN0IENvb2tpZSAqc3RvcmU9Y287CisgICAgICAvKiBub3cgbG9vcCB0aHJvdWdoIGFsbCBjb29raWVzIHRoYXQgbWF0Y2hlZCAqLworICAgICAgd2hpbGUoY28pIHsKKyAgICAgICAgaWYoY28tPnZhbHVlKSB7CisgICAgICAgICAgaWYoMCA9PSBjb3VudCkgeworICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZihyZXFfYnVmZmVyLCAiQ29va2llOiAiKTsKKyAgICAgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYocmVxX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyVzPSVzIiwgY291bnQ/IjsgIjoiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLT5uYW1lLCBjby0+dmFsdWUpOworICAgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgY28gPSBjby0+bmV4dDsgLyogbmV4dCBjb29raWUgcGxlYXNlICovCisgICAgICB9CisgICAgICBDdXJsX2Nvb2tpZV9mcmVlbGlzdChzdG9yZSwgRkFMU0UpOyAvKiBmcmVlIHRoZSBjb29raWUgbGlzdCAqLworICAgIH0KKyAgICBpZihhZGRjb29raWVzICYmIChDVVJMRV9PSyA9PSByZXN1bHQpKSB7CisgICAgICBpZighY291bnQpCisgICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYocmVxX2J1ZmZlciwgIkNvb2tpZTogIik7CisgICAgICBpZihDVVJMRV9PSyA9PSByZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZihyZXFfYnVmZmVyLCAiJXMlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ/IjsgIjoiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRjb29raWVzKTsKKyAgICAgICAgY291bnQrKzsKKyAgICAgIH0KKyAgICB9CisgICAgaWYoY291bnQgJiYgKENVUkxFX09LID09IHJlc3VsdCkpCisgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIocmVxX2J1ZmZlciwgIlxyXG4iLCAyKTsKKworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyNlbmRpZgorCisgIGlmKGRhdGEtPnNldC50aW1lY29uZGl0aW9uKSB7CisgICAgcmVzdWx0ID0gQ3VybF9hZGRfdGltZWNvbmRpdGlvbihkYXRhLCByZXFfYnVmZmVyKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgcmVzdWx0ID0gQ3VybF9hZGRfY3VzdG9tX2hlYWRlcnMoY29ubiwgcmVxX2J1ZmZlcik7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIGh0dHAtPnBvc3RkYXRhID0gTlVMTDsgIC8qIG5vdGhpbmcgdG8gcG9zdCBhdCB0aGlzIHBvaW50ICovCisgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgMCk7IC8qIHVwbG9hZCBzaXplIGlzIDAgYXRtICovCisKKyAgLyogSWYgJ2F1dGhkb25lJyBpcyBGQUxTRSwgd2UgbXVzdCBub3Qgc2V0IHRoZSB3cml0ZSBzb2NrZXQgaW5kZXggdG8gdGhlCisgICAgIEN1cmxfdHJhbnNmZXIoKSBjYWxsIGJlbG93LCBhcyB3ZSdyZSBub3QgcmVhZHkgdG8gYWN0dWFsbHkgdXBsb2FkIGFueQorICAgICBkYXRhIHlldC4gKi8KKworICBzd2l0Y2goaHR0cHJlcSkgeworCisgIGNhc2UgSFRUUFJFUV9QT1NUX0ZPUk06CisgICAgaWYoIWh0dHAtPnNlbmRpdCB8fCBjb25uLT5iaXRzLmF1dGhuZWcpIHsKKyAgICAgIC8qIG5vdGhpbmcgdG8gcG9zdCEgKi8KKyAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYocmVxX2J1ZmZlciwgIkNvbnRlbnQtTGVuZ3RoOiAwXHJcblxyXG4iKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyX3NlbmQocmVxX2J1ZmZlciwgY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgUE9TVCByZXF1ZXN0Iik7CisgICAgICBlbHNlCisgICAgICAgIC8qIHNldHVwIHZhcmlhYmxlcyBmb3IgdGhlIHVwY29taW5nIHRyYW5zZmVyICovCisgICAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBUUlVFLCAmaHR0cC0+cmVhZGJ5dGVjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgTlVMTCk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZihDdXJsX0Zvcm1Jbml0KCZodHRwLT5mb3JtLCBodHRwLT5zZW5kaXQpKSB7CisgICAgICBmYWlsZihkYXRhLCAiSW50ZXJuYWwgSFRUUCBQT1NUIGVycm9yISIpOworICAgICAgcmV0dXJuIENVUkxFX0hUVFBfUE9TVF9FUlJPUjsKKyAgICB9CisKKyAgICAvKiBHZXQgdGhlIGN1cnJlbnRseSBzZXQgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciBhbmQgc3RvcmUgdGhhdCBpbiB0aGUKKyAgICAgICBmb3JtIHN0cnVjdCBzaW5jZSB3ZSBtaWdodCB3YW50IHRoZSBhY3R1YWwgdXNlci1wcm92aWRlZCBjYWxsYmFjayBsYXRlcgorICAgICAgIG9uLiBUaGUgY29ubi0+ZnJlYWRfZnVuYyBwb2ludGVyIGl0c2VsZiB3aWxsIGJlIGNoYW5nZWQgZm9yIHRoZQorICAgICAgIG11bHRpcGFydCBjYXNlIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBtdWx0aXBhcnQgZm9ybWF0dGVkCisgICAgICAgc3RyZWFtLiAqLworICAgIGh0dHAtPmZvcm0uZnJlYWRfZnVuYyA9IGNvbm4tPmZyZWFkX2Z1bmM7CisKKyAgICAvKiBTZXQgdGhlIHJlYWQgZnVuY3Rpb24gdG8gcmVhZCBmcm9tIHRoZSBnZW5lcmF0ZWQgZm9ybSBkYXRhICovCisgICAgY29ubi0+ZnJlYWRfZnVuYyA9IChjdXJsX3JlYWRfY2FsbGJhY2spQ3VybF9Gb3JtUmVhZGVyOworICAgIGNvbm4tPmZyZWFkX2luID0gJmh0dHAtPmZvcm07CisKKyAgICBodHRwLT5zZW5kaW5nID0gSFRUUFNFTkRfQk9EWTsKKworICAgIGlmKCFkYXRhLT5yZXEudXBsb2FkX2NodW5reSAmJgorICAgICAgICFDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiQ29udGVudC1MZW5ndGg6IikpIHsKKyAgICAgIC8qIG9ubHkgYWRkIENvbnRlbnQtTGVuZ3RoIGlmIG5vdCB1cGxvYWRpbmcgY2h1bmtlZCAqLworICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZihyZXFfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6ICUiIEZPUk1BVF9PRkZfVCAiXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAtPnBvc3RzaXplKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBleHBlY3QxMDAoZGF0YSwgY29ubiwgcmVxX2J1ZmZlcik7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHsKKworICAgICAgLyogR2V0IENvbnRlbnQtVHlwZTogbGluZSBmcm9tIEN1cmxfZm9ybXBvc3RoZWFkZXIuCisgICAgICAgKi8KKyAgICAgIGNoYXIgKmNvbnRlbnRUeXBlOworICAgICAgc2l6ZV90IGxpbmVsZW5ndGg9MDsKKyAgICAgIGNvbnRlbnRUeXBlID0gQ3VybF9mb3JtcG9zdGhlYWRlcigodm9pZCAqKSZodHRwLT5mb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5lbGVuZ3RoKTsKKyAgICAgIGlmKCFjb250ZW50VHlwZSkgeworICAgICAgICBmYWlsZihkYXRhLCAiQ291bGQgbm90IGdldCBDb250ZW50LVR5cGUgaGVhZGVyIGxpbmUhIik7CisgICAgICAgIHJldHVybiBDVVJMRV9IVFRQX1BPU1RfRVJST1I7CisgICAgICB9CisKKyAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcihyZXFfYnVmZmVyLCBjb250ZW50VHlwZSwgbGluZWxlbmd0aCk7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyogbWFrZSB0aGUgcmVxdWVzdCBlbmQgaW4gYSB0cnVlIENSTEYgKi8KKyAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIocmVxX2J1ZmZlciwgIlxyXG4iLCAyKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgLyogc2V0IHVwbG9hZCBzaXplIHRvIHRoZSBwcm9ncmVzcyBtZXRlciAqLworICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgaHR0cC0+cG9zdHNpemUpOworCisgICAgLyogZmlyZSBhd2F5IHRoZSB3aG9sZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgKi8KKyAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJfc2VuZChyZXFfYnVmZmVyLCBjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgc2VuZGluZyBQT1NUIHJlcXVlc3QiKTsKKyAgICBlbHNlCisgICAgICAvKiBzZXR1cCB2YXJpYWJsZXMgZm9yIHRoZSB1cGNvbWluZyB0cmFuc2ZlciAqLworICAgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZodHRwLT5yZWFkYnl0ZWNvdW50LCBGSVJTVFNPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmh0dHAtPndyaXRlYnl0ZWNvdW50KTsKKworICAgIGlmKHJlc3VsdCkgeworICAgICAgQ3VybF9mb3JtY2xlYW4oJmh0dHAtPnNlbmRpdCk7IC8qIGZyZWUgdGhhdCB3aG9sZSBsb3QgKi8KKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyogY29udmVydCB0aGUgZm9ybSBkYXRhICovCisgICAgcmVzdWx0ID0gQ3VybF9jb252ZXJ0X2Zvcm0oZGF0YSwgaHR0cC0+c2VuZGl0KTsKKyAgICBpZihyZXN1bHQpIHsKKyAgICAgIEN1cmxfZm9ybWNsZWFuKCZodHRwLT5zZW5kaXQpOyAvKiBmcmVlIHRoYXQgd2hvbGUgbG90ICovCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGJyZWFrOworCisgIGNhc2UgSFRUUFJFUV9QVVQ6IC8qIExldCdzIFBVVCB0aGUgZGF0YSB0byB0aGUgc2VydmVyISAqLworCisgICAgaWYoY29ubi0+Yml0cy5hdXRobmVnKQorICAgICAgcG9zdHNpemUgPSAwOworICAgIGVsc2UKKyAgICAgIHBvc3RzaXplID0gZGF0YS0+c2V0LmluZmlsZXNpemU7CisKKyAgICBpZigocG9zdHNpemUgIT0gLTEpICYmICFkYXRhLT5yZXEudXBsb2FkX2NodW5reSAmJgorICAgICAgICFDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiQ29udGVudC1MZW5ndGg6IikpIHsKKyAgICAgIC8qIG9ubHkgYWRkIENvbnRlbnQtTGVuZ3RoIGlmIG5vdCB1cGxvYWRpbmcgY2h1bmtlZCAqLworICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZihyZXFfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6ICUiIEZPUk1BVF9PRkZfVCAiXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RzaXplICk7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmVzdWx0ID0gZXhwZWN0MTAwKGRhdGEsIGNvbm4sIHJlcV9idWZmZXIpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIocmVxX2J1ZmZlciwgIlxyXG4iLCAyKTsgLyogZW5kIG9mIGhlYWRlcnMgKi8KKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgLyogc2V0IHRoZSB1cGxvYWQgc2l6ZSB0byB0aGUgcHJvZ3Jlc3MgbWV0ZXIgKi8KKyAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIHBvc3RzaXplKTsKKworICAgIC8qIHRoaXMgc2VuZHMgdGhlIGJ1ZmZlciBhbmQgZnJlZXMgYWxsIHRoZSBidWZmZXIgcmVzb3VyY2VzICovCisgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyX3NlbmQocmVxX2J1ZmZlciwgY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsIDAsIEZJUlNUU09DS0VUKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgUFVUIHJlcXVlc3QiKTsKKyAgICBlbHNlCisgICAgICAvKiBwcmVwYXJlIGZvciB0cmFuc2ZlciAqLworICAgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZodHRwLT5yZWFkYnl0ZWNvdW50LCBwb3N0c2l6ZT9GSVJTVFNPQ0tFVDotMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdHNpemU/Jmh0dHAtPndyaXRlYnl0ZWNvdW50Ok5VTEwpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgYnJlYWs7CisKKyAgY2FzZSBIVFRQUkVRX1BPU1Q6CisgICAgLyogdGhpcyBpcyB0aGUgc2ltcGxlIFBPU1QsIHVzaW5nIHgtd3d3LWZvcm0tdXJsZW5jb2RlZCBzdHlsZSAqLworCisgICAgaWYoY29ubi0+Yml0cy5hdXRobmVnKQorICAgICAgcG9zdHNpemUgPSAwOworICAgIGVsc2UgeworICAgICAgLyogZmlndXJlIG91dCB0aGUgc2l6ZSBvZiB0aGUgcG9zdGZpZWxkcyAqLworICAgICAgcG9zdHNpemUgPSAoZGF0YS0+c2V0LnBvc3RmaWVsZHNpemUgIT0gLTEpPworICAgICAgICBkYXRhLT5zZXQucG9zdGZpZWxkc2l6ZToKKyAgICAgICAgKGRhdGEtPnNldC5wb3N0ZmllbGRzPyAoY3VybF9vZmZfdClzdHJsZW4oZGF0YS0+c2V0LnBvc3RmaWVsZHMpOi0xKTsKKyAgICB9CisgICAgaWYoIWRhdGEtPnJlcS51cGxvYWRfY2h1bmt5KSB7CisgICAgICAvKiBXZSBvbmx5IHNldCBDb250ZW50LUxlbmd0aCBhbmQgYWxsb3cgYSBjdXN0b20gQ29udGVudC1MZW5ndGggaWYKKyAgICAgICAgIHdlIGRvbid0IHVwbG9hZCBkYXRhIGNodW5rZWQsIGFzIFJGQzI2MTYgZm9yYmlkcyB1cyB0byBzZXQgYm90aAorICAgICAgICAga2luZHMgb2YgaGVhZGVycyAoVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQgYW5kIENvbnRlbnQtTGVuZ3RoKSAqLworCisgICAgICBpZihjb25uLT5iaXRzLmF1dGhuZWcgfHwgIUN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJDb250ZW50LUxlbmd0aDoiKSkgeworICAgICAgICAvKiB3ZSBhbGxvdyByZXBsYWNpbmcgdGhpcyBoZWFkZXIgaWYgbm90IGR1cmluZyBhdXRoIG5lZ290aWF0aW9uLAorICAgICAgICAgICBhbHRob3VnaCBpdCBpc24ndCB2ZXJ5IHdpc2UgdG8gYWN0dWFsbHkgc2V0IHlvdXIgb3duICovCisgICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYocmVxX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6ICUiIEZPUk1BVF9PRkZfVCJcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0c2l6ZSk7CisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorICAgIH0KKworICAgIGlmKCFDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiQ29udGVudC1UeXBlOiIpKSB7CisgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKHJlcV9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIngtd3d3LWZvcm0tdXJsZW5jb2RlZFxyXG4iKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiBGb3IgcmVhbGx5IHNtYWxsIHBvc3RzIHdlIGRvbid0IHVzZSBFeHBlY3Q6IGhlYWRlcnMgYXQgYWxsLCBhbmQgZm9yCisgICAgICAgdGhlIHNvbWV3aGF0IGJpZ2dlciBvbmVzIHdlIGFsbG93IHRoZSBhcHAgdG8gZGlzYWJsZSBpdC4gSnVzdCBtYWtlCisgICAgICAgc3VyZSB0aGF0IHRoZSBleHBlY3QxMDBoZWFkZXIgaXMgYWx3YXlzIHNldCB0byB0aGUgcHJlZmVycmVkIHZhbHVlCisgICAgICAgaGVyZS4gKi8KKyAgICBwdHIgPSBDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiRXhwZWN0OiIpOworICAgIGlmKHB0cikgeworICAgICAgZGF0YS0+c3RhdGUuZXhwZWN0MTAwaGVhZGVyID0KKyAgICAgICAgQ3VybF9jb21wYXJlaGVhZGVyKHB0ciwgIkV4cGVjdDoiLCAiMTAwLWNvbnRpbnVlIik7CisgICAgfQorICAgIGVsc2UgaWYocG9zdHNpemUgPiBUSU5ZX0lOSVRJQUxfUE9TVF9TSVpFIHx8IHBvc3RzaXplIDwgMCkgeworICAgICAgcmVzdWx0ID0gZXhwZWN0MTAwKGRhdGEsIGNvbm4sIHJlcV9idWZmZXIpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBlbHNlCisgICAgICBkYXRhLT5zdGF0ZS5leHBlY3QxMDBoZWFkZXIgPSBGQUxTRTsKKworICAgIGlmKGRhdGEtPnNldC5wb3N0ZmllbGRzKSB7CisKKyAgICAgIGlmKCFkYXRhLT5zdGF0ZS5leHBlY3QxMDBoZWFkZXIgJiYKKyAgICAgICAgIChwb3N0c2l6ZSA8IE1BWF9JTklUSUFMX1BPU1RfU0laRSkpICB7CisgICAgICAgIC8qIGlmIHdlIGRvbid0IHVzZSBleHBlY3Q6IDEwMCAgQU5ECisgICAgICAgICAgIHBvc3RzaXplIGlzIGxlc3MgdGhhbiBNQVhfSU5JVElBTF9QT1NUX1NJWkUKKworICAgICAgICAgICB0aGVuIGFwcGVuZCB0aGUgcG9zdCBkYXRhIHRvIHRoZSBIVFRQIHJlcXVlc3QgaGVhZGVyLiBUaGlzIGxpbWl0CisgICAgICAgICAgIGlzIG5vIG1hZ2ljIGxpbWl0IGJ1dCBvbmx5IHNldCB0byBwcmV2ZW50IHJlYWxseSBodWdlIFBPU1RzIHRvCisgICAgICAgICAgIGdldCB0aGUgZGF0YSBkdXBsaWNhdGVkIHdpdGggbWFsbG9jKCkgYW5kIGZhbWlseS4gKi8KKworICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIocmVxX2J1ZmZlciwgIlxyXG4iLCAyKTsgLyogZW5kIG9mIGhlYWRlcnMhICovCisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgIGlmKCFkYXRhLT5yZXEudXBsb2FkX2NodW5reSkgeworICAgICAgICAgIC8qIFdlJ3JlIG5vdCBzZW5kaW5nIGl0ICdjaHVua2VkJywgYXBwZW5kIGl0IHRvIHRoZSByZXF1ZXN0CisgICAgICAgICAgICAgYWxyZWFkeSBub3cgdG8gcmVkdWNlIHRoZSBudW1iZXIgaWYgc2VuZCgpIGNhbGxzICovCisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKHJlcV9idWZmZXIsIGRhdGEtPnNldC5wb3N0ZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KXBvc3RzaXplKTsKKyAgICAgICAgICBpbmNsdWRlZF9ib2R5ID0gcG9zdHNpemU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogQXBwZW5kIHRoZSBQT1NUIGRhdGEgY2h1bmt5LXN0eWxlICovCisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZihyZXFfYnVmZmVyLCAiJXhcclxuIiwgKGludClwb3N0c2l6ZSk7CisgICAgICAgICAgaWYoQ1VSTEVfT0sgPT0gcmVzdWx0KQorICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyKHJlcV9idWZmZXIsIGRhdGEtPnNldC5wb3N0ZmllbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpcG9zdHNpemUpOworICAgICAgICAgIGlmKENVUkxFX09LID09IHJlc3VsdCkKKyAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcihyZXFfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJceDBkXHgwYVx4MzBceDBkXHgwYVx4MGRceDBhIiwgNyk7CisgICAgICAgICAgLyogQ1IgIExGICAgMCAgQ1IgIExGICBDUiAgTEYgKi8KKyAgICAgICAgICBpbmNsdWRlZF9ib2R5ID0gcG9zdHNpemUgKyA3OworICAgICAgICB9CisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIHByb2dyZXNzIGluZm9ybWF0aW9uIGlzIGFjY3VyYXRlICovCisgICAgICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgcG9zdHNpemUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIEEgaHVnZSBQT1NUIGNvbWluZyB1cCwgZG8gZGF0YSBzZXBhcmF0ZSBmcm9tIHRoZSByZXF1ZXN0ICovCisgICAgICAgIGh0dHAtPnBvc3RzaXplID0gcG9zdHNpemU7CisgICAgICAgIGh0dHAtPnBvc3RkYXRhID0gZGF0YS0+c2V0LnBvc3RmaWVsZHM7CisKKyAgICAgICAgaHR0cC0+c2VuZGluZyA9IEhUVFBTRU5EX0JPRFk7CisKKyAgICAgICAgY29ubi0+ZnJlYWRfZnVuYyA9IChjdXJsX3JlYWRfY2FsbGJhY2spcmVhZG1vcmVkYXRhOworICAgICAgICBjb25uLT5mcmVhZF9pbiA9ICh2b2lkICopY29ubjsKKworICAgICAgICAvKiBzZXQgdGhlIHVwbG9hZCBzaXplIHRvIHRoZSBwcm9ncmVzcyBtZXRlciAqLworICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGh0dHAtPnBvc3RzaXplKTsKKworICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIocmVxX2J1ZmZlciwgIlxyXG4iLCAyKTsgLyogZW5kIG9mIGhlYWRlcnMhICovCisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcihyZXFfYnVmZmVyLCAiXHJcbiIsIDIpOyAvKiBlbmQgb2YgaGVhZGVycyEgKi8KKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgaWYoZGF0YS0+cmVxLnVwbG9hZF9jaHVua3kgJiYgY29ubi0+Yml0cy5hdXRobmVnKSB7CisgICAgICAgIC8qIENodW5reSB1cGxvYWQgaXMgc2VsZWN0ZWQgYW5kIHdlJ3JlIG5lZ290aWF0aW5nIGF1dGggc3RpbGwsIHNlbmQKKyAgICAgICAgICAgZW5kLW9mLWRhdGEgb25seSAqLworICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIocmVxX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJceDBkXHgwYVx4MzBceDBkXHgwYVx4MGRceDBhIiwgNyk7CisgICAgICAgIC8qIENSICBMRiAgIDAgIENSICBMRiAgQ1IgIExGICovCisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorCisgICAgICBlbHNlIGlmKGRhdGEtPnNldC5wb3N0ZmllbGRzaXplKSB7CisgICAgICAgIC8qIHNldCB0aGUgdXBsb2FkIHNpemUgdG8gdGhlIHByb2dyZXNzIG1ldGVyICovCisgICAgICAgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgcG9zdHNpemU/cG9zdHNpemU6LTEpOworCisgICAgICAgIC8qIHNldCB0aGUgcG9pbnRlciB0byBtYXJrIHRoYXQgd2Ugd2lsbCBzZW5kIHRoZSBwb3N0IGJvZHkgdXNpbmcgdGhlCisgICAgICAgICAgIHJlYWQgY2FsbGJhY2ssIGJ1dCBvbmx5IGlmIHdlJ3JlIG5vdCBpbiBhdXRoZW50aWNhdGUKKyAgICAgICAgICAgbmVnb3RpYXRpb24gICovCisgICAgICAgIGlmKCFjb25uLT5iaXRzLmF1dGhuZWcpIHsKKyAgICAgICAgICBodHRwLT5wb3N0ZGF0YSA9IChjaGFyICopJmh0dHAtPnBvc3RkYXRhOworICAgICAgICAgIGh0dHAtPnBvc3RzaXplID0gcG9zdHNpemU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgLyogaXNzdWUgdGhlIHJlcXVlc3QgKi8KKyAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJfc2VuZChyZXFfYnVmZmVyLCBjb25uLCAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdClpbmNsdWRlZF9ib2R5LCBGSVJTVFNPQ0tFVCk7CisKKyAgICBpZihyZXN1bHQpCisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgSFRUUCBQT1NUIHJlcXVlc3QiKTsKKyAgICBlbHNlCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmh0dHAtPnJlYWRieXRlY291bnQsIGh0dHAtPnBvc3RkYXRhP0ZJUlNUU09DS0VUOi0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwLT5wb3N0ZGF0YT8maHR0cC0+d3JpdGVieXRlY291bnQ6TlVMTCk7CisgICAgYnJlYWs7CisKKyAgZGVmYXVsdDoKKyAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIocmVxX2J1ZmZlciwgIlxyXG4iLCAyKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgLyogaXNzdWUgdGhlIHJlcXVlc3QgKi8KKyAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJfc2VuZChyZXFfYnVmZmVyLCBjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5pbmZvLnJlcXVlc3Rfc2l6ZSwgMCwgRklSU1RTT0NLRVQpOworCisgICAgaWYocmVzdWx0KQorICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIEhUVFAgcmVxdWVzdCIpOworICAgIGVsc2UKKyAgICAgIC8qIEhUVFAgR0VUL0hFQUQgZG93bmxvYWQ6ICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgVFJVRSwgJmh0dHAtPnJlYWRieXRlY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAtPnBvc3RkYXRhP0ZJUlNUU09DS0VUOi0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwLT5wb3N0ZGF0YT8maHR0cC0+d3JpdGVieXRlY291bnQ6TlVMTCk7CisgIH0KKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgaWYoaHR0cC0+d3JpdGVieXRlY291bnQpIHsKKyAgICAvKiBpZiBhIHJlcXVlc3QtYm9keSBoYXMgYmVlbiBzZW50IG9mZiwgd2UgbWFrZSBzdXJlIHRoaXMgcHJvZ3Jlc3MgaXMgbm90ZWQKKyAgICAgICBwcm9wZXJseSAqLworICAgIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgaHR0cC0+d3JpdGVieXRlY291bnQpOworICAgIGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkKKyAgICAgIHJlc3VsdCA9IENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisKKyAgICBpZihodHRwLT53cml0ZWJ5dGVjb3VudCA+PSBwb3N0c2l6ZSkgeworICAgICAgLyogYWxyZWFkeSBzZW50IHRoZSBlbnRpcmUgcmVxdWVzdCBib2R5LCBtYXJrIHRoZSAidXBsb2FkIiBhcworICAgICAgICAgY29tcGxldGUgKi8KKyAgICAgIGluZm9mKGRhdGEsICJ1cGxvYWQgY29tcGxldGVseSBzZW50IG9mZjogJSIgRk9STUFUX09GRl9UICIgb3V0IG9mICIKKyAgICAgICAgICAgICIlIiBGT1JNQVRfT0ZGX1QgIiBieXRlc1xuIiwKKyAgICAgICAgICAgIGh0dHAtPndyaXRlYnl0ZWNvdW50LCBwb3N0c2l6ZSk7CisgICAgICBkYXRhLT5yZXEudXBsb2FkX2RvbmUgPSBUUlVFOworICAgICAgZGF0YS0+cmVxLmtlZXBvbiAmPSB+S0VFUF9TRU5EOyAvKiB3ZSdyZSBkb25lIHdyaXRpbmcgKi8KKyAgICAgIGRhdGEtPnJlcS5leHAxMDAgPSBFWFAxMDBfU0VORF9EQVRBOyAvKiBhbHJlYWR5IHNlbnQgKi8KKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogY2hlY2todHRwcHJlZml4KCkKKyAqCisgKiBSZXR1cm5zIFRSVUUgaWYgbWVtYmVyIG9mIHRoZSBsaXN0IG1hdGNoZXMgcHJlZml4IG9mIHN0cmluZworICovCitzdGF0aWMgYm9vbAorY2hlY2todHRwcHJlZml4KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMpCit7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkID0gZGF0YS0+c2V0Lmh0dHAyMDBhbGlhc2VzOworICBib29sIHJjID0gRkFMU0U7CisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgIC8qIGNvbnZlcnQgZnJvbSB0aGUgbmV0d29yayBlbmNvZGluZyB1c2luZyBhIHNjcmF0Y2ggYXJlYSAqLworICBjaGFyICpzY3JhdGNoID0gc3RyZHVwKHMpOworICBpZihOVUxMID09IHNjcmF0Y2gpIHsKKyAgICBmYWlsZiAoZGF0YSwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbnZlcnNpb24hIik7CisgICAgcmV0dXJuIEZBTFNFOyAvKiBjYW4ndCByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWSBzbyByZXR1cm4gRkFMU0UgKi8KKyAgfQorICBpZihDVVJMRV9PSyAhPSBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrKGRhdGEsIHNjcmF0Y2gsIHN0cmxlbihzKSsxKSkgeworICAgIC8qIEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsgY2FsbHMgZmFpbGYgaWYgdW5zdWNjZXNzZnVsICovCisgICAgZnJlZShzY3JhdGNoKTsKKyAgICByZXR1cm4gRkFMU0U7IC8qIGNhbid0IHJldHVybiBDVVJMRV9mb29iYXIgc28gcmV0dXJuIEZBTFNFICovCisgIH0KKyAgcyA9IHNjcmF0Y2g7CisjZW5kaWYgLyogQ1VSTF9ET0VTX0NPTlZFUlNJT05TICovCisKKyAgd2hpbGUoaGVhZCkgeworICAgIGlmKGNoZWNrcHJlZml4KGhlYWQtPmRhdGEsIHMpKSB7CisgICAgICByYyA9IFRSVUU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaGVhZCA9IGhlYWQtPm5leHQ7CisgIH0KKworICBpZighcmMgJiYgKGNoZWNrcHJlZml4KCJIVFRQLyIsIHMpKSkKKyAgICByYyA9IFRSVUU7CisKKyNpZmRlZiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMKKyAgZnJlZShzY3JhdGNoKTsKKyNlbmRpZiAvKiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMgKi8KKyAgcmV0dXJuIHJjOworfQorCisjaWZuZGVmIENVUkxfRElTQUJMRV9SVFNQCitzdGF0aWMgYm9vbAorY2hlY2tydHNwcHJlZml4KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMpCit7CisKKyNpZmRlZiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMKKyAgLyogY29udmVydCBmcm9tIHRoZSBuZXR3b3JrIGVuY29kaW5nIHVzaW5nIGEgc2NyYXRjaCBhcmVhICovCisgIGNoYXIgKnNjcmF0Y2ggPSBzdHJkdXAocyk7CisgIGlmKE5VTEwgPT0gc2NyYXRjaCkgeworICAgIGZhaWxmIChkYXRhLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY29udmVyc2lvbiEiKTsKKyAgICByZXR1cm4gRkFMU0U7IC8qIGNhbid0IHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZIHNvIHJldHVybiBGQUxTRSAqLworICB9CisgIGlmKENVUkxFX09LICE9IEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoZGF0YSwgc2NyYXRjaCwgc3RybGVuKHMpKzEpKSB7CisgICAgLyogQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayBjYWxscyBmYWlsZiBpZiB1bnN1Y2Nlc3NmdWwgKi8KKyAgICBmcmVlKHNjcmF0Y2gpOworICAgIHJldHVybiBGQUxTRTsgLyogY2FuJ3QgcmV0dXJuIENVUkxFX2Zvb2JhciBzbyByZXR1cm4gRkFMU0UgKi8KKyAgfQorICBzID0gc2NyYXRjaDsKKyNlbHNlCisgICh2b2lkKWRhdGE7IC8qIHVudXNlZCAqLworI2VuZGlmIC8qIENVUkxfRE9FU19DT05WRVJTSU9OUyAqLworICBpZihjaGVja3ByZWZpeCgiUlRTUC8iLCBzKSkKKyAgICByZXR1cm4gVFJVRTsKKyAgZWxzZQorICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfUlRTUCAqLworCitzdGF0aWMgYm9vbAorY2hlY2twcm90b3ByZWZpeChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzKQoreworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUlRTUAorICBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19SVFNQKQorICAgIHJldHVybiBjaGVja3J0c3BwcmVmaXgoZGF0YSwgcyk7CisjZWxzZQorICAodm9pZCljb25uOworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9SVFNQICovCisKKyAgcmV0dXJuIGNoZWNraHR0cHByZWZpeChkYXRhLCBzKTsKK30KKworLyoKKyAqIGhlYWRlcl9hcHBlbmQoKSBjb3BpZXMgYSBjaHVuayBvZiBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGFscmVhZHkgcmVjZWl2ZWQKKyAqIGhlYWRlci4gV2UgbWFrZSBzdXJlIHRoYXQgdGhlIGZ1bGwgc3RyaW5nIGZpdCBpbiB0aGUgYWxsb2NhdGVkIGhlYWRlcgorICogYnVmZmVyLCBvciBlbHNlIHdlIGVubGFyZ2UgaXQuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBoZWFkZXJfYXBwZW5kKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKQoreworICBpZihrLT5oYnVmbGVuICsgbGVuZ3RoID49IGRhdGEtPnN0YXRlLmhlYWRlcnNpemUpIHsKKyAgICAvKiBXZSBlbmxhcmdlIHRoZSBoZWFkZXIgYnVmZmVyIGFzIGl0IGlzIHRvbyBzbWFsbCAqLworICAgIGNoYXIgKm5ld2J1ZmY7CisgICAgc2l6ZV90IGhidWZwX2luZGV4OworICAgIHNpemVfdCBuZXdzaXplOworCisgICAgaWYoay0+aGJ1ZmxlbiArIGxlbmd0aCA+IENVUkxfTUFYX0hUVFBfSEVBREVSKSB7CisgICAgICAvKiBUaGUgcmVhc29uIHRvIGhhdmUgYSBtYXggbGltaXQgZm9yIHRoaXMgaXMgdG8gYXZvaWQgdGhlIHJpc2sgb2YgYSBiYWQKKyAgICAgICAgIHNlcnZlciBmZWVkaW5nIGxpYmN1cmwgd2l0aCBhIG5ldmVyLWVuZGluZyBoZWFkZXIgdGhhdCB3aWxsIGNhdXNlCisgICAgICAgICByZWFsbG9jcyBpbmZpbml0ZWx5ICovCisgICAgICBmYWlsZiAoZGF0YSwgIkF2b2lkZWQgZ2lhbnQgcmVhbGxvYyBmb3IgaGVhZGVyIChtYXggaXMgJWQpISIsCisgICAgICAgICAgICAgQ1VSTF9NQVhfSFRUUF9IRUFERVIpOworICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQorCisgICAgbmV3c2l6ZT1DVVJMTUFYKChrLT5oYnVmbGVuKyBsZW5ndGgpKjMvMiwgZGF0YS0+c3RhdGUuaGVhZGVyc2l6ZSoyKTsKKyAgICBoYnVmcF9pbmRleCA9IGstPmhidWZwIC0gZGF0YS0+c3RhdGUuaGVhZGVyYnVmZjsKKyAgICBuZXdidWZmID0gcmVhbGxvYyhkYXRhLT5zdGF0ZS5oZWFkZXJidWZmLCBuZXdzaXplKTsKKyAgICBpZighbmV3YnVmZikgeworICAgICAgZmFpbGYgKGRhdGEsICJGYWlsZWQgdG8gYWxsb2MgbWVtb3J5IGZvciBiaWcgaGVhZGVyISIpOworICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQorICAgIGRhdGEtPnN0YXRlLmhlYWRlcnNpemU9bmV3c2l6ZTsKKyAgICBkYXRhLT5zdGF0ZS5oZWFkZXJidWZmID0gbmV3YnVmZjsKKyAgICBrLT5oYnVmcCA9IGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYgKyBoYnVmcF9pbmRleDsKKyAgfQorICBtZW1jcHkoay0+aGJ1ZnAsIGstPnN0cl9zdGFydCwgbGVuZ3RoKTsKKyAgay0+aGJ1ZnAgKz0gbGVuZ3RoOworICBrLT5oYnVmbGVuICs9IGxlbmd0aDsKKyAgKmstPmhidWZwID0gMDsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKworLyoKKyAqIFJlYWQgYW55IEhUVFAgaGVhZGVyIGxpbmVzIGZyb20gdGhlIHNlcnZlciBhbmQgcGFzcyB0aGVtIHRvIHRoZSBjbGllbnQgYXBwLgorICovCitDVVJMY29kZSBDdXJsX2h0dHBfcmVhZHdyaXRlX2hlYWRlcnMoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90ICpucmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnN0b3BfcmVhZGluZykKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7CisKKyAgLyogaGVhZGVyIGxpbmUgd2l0aGluIGJ1ZmZlciBsb29wICovCisgIGRvIHsKKyAgICBzaXplX3QgcmVzdF9sZW5ndGg7CisgICAgc2l6ZV90IGZ1bGxfbGVuZ3RoOworICAgIGludCB3cml0ZXR5cGU7CisKKyAgICAvKiBzdHJfc3RhcnQgaXMgc3RhcnQgb2YgbGluZSB3aXRoaW4gYnVmICovCisgICAgay0+c3RyX3N0YXJ0ID0gay0+c3RyOworCisgICAgLyogZGF0YSBpcyBpbiBuZXR3b3JrIGVuY29kaW5nIHNvIHVzZSAweDBhIGluc3RlYWQgb2YgJ1xuJyAqLworICAgIGstPmVuZF9wdHIgPSBtZW1jaHIoay0+c3RyX3N0YXJ0LCAweDBhLCAqbnJlYWQpOworCisgICAgaWYoIWstPmVuZF9wdHIpIHsKKyAgICAgIC8qIE5vdCBhIGNvbXBsZXRlIGhlYWRlciBsaW5lIHdpdGhpbiBidWZmZXIsIGFwcGVuZCB0aGUgZGF0YSB0bworICAgICAgICAgdGhlIGVuZCBvZiB0aGUgaGVhZGVyYnVmZi4gKi8KKyAgICAgIHJlc3VsdCA9IGhlYWRlcl9hcHBlbmQoZGF0YSwgaywgKm5yZWFkKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgaWYoIWstPmhlYWRlcmxpbmUgJiYgKGstPmhidWZsZW4+NSkpIHsKKyAgICAgICAgLyogbWFrZSBhIGZpcnN0IGNoZWNrIHRoYXQgdGhpcyBsb29rcyBsaWtlIGEgcHJvdG9jb2wgaGVhZGVyICovCisgICAgICAgIGlmKCFjaGVja3Byb3RvcHJlZml4KGRhdGEsIGNvbm4sIGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYpKSB7CisgICAgICAgICAgLyogdGhpcyBpcyBub3QgdGhlIGJlZ2lubmluZyBvZiBhIHByb3RvY29sIGZpcnN0IGhlYWRlciBsaW5lICovCisgICAgICAgICAgay0+aGVhZGVyID0gRkFMU0U7CisgICAgICAgICAgay0+YmFkaGVhZGVyID0gSEVBREVSX0FMTEJBRDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBicmVhazsgLyogcmVhZCBtb3JlIGFuZCB0cnkgYWdhaW4gKi8KKyAgICB9CisKKyAgICAvKiBkZWNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcmVtYWluaW5nIChzdXBwb3NlZCkgaGVhZGVyIGxpbmUgKi8KKyAgICByZXN0X2xlbmd0aCA9IChrLT5lbmRfcHRyIC0gay0+c3RyKSsxOworICAgICpucmVhZCAtPSAoc3NpemVfdClyZXN0X2xlbmd0aDsKKworICAgIGstPnN0ciA9IGstPmVuZF9wdHIgKyAxOyAvKiBtb3ZlIHBhc3QgbmV3IGxpbmUgKi8KKworICAgIGZ1bGxfbGVuZ3RoID0gay0+c3RyIC0gay0+c3RyX3N0YXJ0OworCisgICAgcmVzdWx0ID0gaGVhZGVyX2FwcGVuZChkYXRhLCBrLCBmdWxsX2xlbmd0aCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGstPmVuZF9wdHIgPSBrLT5oYnVmcDsKKyAgICBrLT5wID0gZGF0YS0+c3RhdGUuaGVhZGVyYnVmZjsKKworICAgIC8qKioqCisgICAgICogV2Ugbm93IGhhdmUgYSBGVUxMIGhlYWRlciBsaW5lIHRoYXQgcCBwb2ludHMgdG8KKyAgICAgKioqKiovCisKKyAgICBpZighay0+aGVhZGVybGluZSkgeworICAgICAgLyogdGhlIGZpcnN0IHJlYWQgaGVhZGVyICovCisgICAgICBpZigoay0+aGJ1Zmxlbj41KSAmJgorICAgICAgICAgIWNoZWNrcHJvdG9wcmVmaXgoZGF0YSwgY29ubiwgZGF0YS0+c3RhdGUuaGVhZGVyYnVmZikpIHsKKyAgICAgICAgLyogdGhpcyBpcyBub3QgdGhlIGJlZ2lubmluZyBvZiBhIHByb3RvY29sIGZpcnN0IGhlYWRlciBsaW5lICovCisgICAgICAgIGstPmhlYWRlciA9IEZBTFNFOworICAgICAgICBpZigqbnJlYWQpCisgICAgICAgICAgLyogc2luY2UgdGhlcmUncyBtb3JlLCB0aGlzIGlzIGEgcGFydGlhbCBiYWQgaGVhZGVyICovCisgICAgICAgICAgay0+YmFkaGVhZGVyID0gSEVBREVSX1BBUlRIRUFERVI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIC8qIHRoaXMgd2FzIGFsbCB3ZSByZWFkIHNvIGl0J3MgYWxsIGEgYmFkIGhlYWRlciAqLworICAgICAgICAgIGstPmJhZGhlYWRlciA9IEhFQURFUl9BTExCQUQ7CisgICAgICAgICAgKm5yZWFkID0gKHNzaXplX3QpcmVzdF9sZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgLyogaGVhZGVycyBhcmUgaW4gbmV0d29yayBlbmNvZGluZyBzbworICAgICAgIHVzZSAweDBhIGFuZCAweDBkIGluc3RlYWQgb2YgJ1xuJyBhbmQgJ1xyJyAqLworICAgIGlmKCgweDBhID09ICprLT5wKSB8fCAoMHgwZCA9PSAqay0+cCkpIHsKKyAgICAgIHNpemVfdCBoZWFkZXJsZW47CisgICAgICAvKiBaZXJvLWxlbmd0aCBoZWFkZXIgbGluZSBtZWFucyBlbmQgb2YgaGVhZGVycyEgKi8KKworI2lmZGVmIENVUkxfRE9FU19DT05WRVJTSU9OUworICAgICAgaWYoMHgwZCA9PSAqay0+cCkgeworICAgICAgICAqay0+cCA9ICdccic7IC8qIHJlcGxhY2Ugd2l0aCBDUiBpbiBob3N0IGVuY29kaW5nICovCisgICAgICAgIGstPnArKzsgICAgICAgLyogcGFzcyB0aGUgQ1IgYnl0ZSAqLworICAgICAgfQorICAgICAgaWYoMHgwYSA9PSAqay0+cCkgeworICAgICAgICAqay0+cCA9ICdcbic7IC8qIHJlcGxhY2Ugd2l0aCBMRiBpbiBob3N0IGVuY29kaW5nICovCisgICAgICAgIGstPnArKzsgICAgICAgLyogcGFzcyB0aGUgTEYgYnl0ZSAqLworICAgICAgfQorI2Vsc2UKKyAgICAgIGlmKCdccicgPT0gKmstPnApCisgICAgICAgIGstPnArKzsgLyogcGFzcyB0aGUgXHIgYnl0ZSAqLworICAgICAgaWYoJ1xuJyA9PSAqay0+cCkKKyAgICAgICAgay0+cCsrOyAvKiBwYXNzIHRoZSBcbiBieXRlICovCisjZW5kaWYgLyogQ1VSTF9ET0VTX0NPTlZFUlNJT05TICovCisKKyAgICAgIGlmKDEwMCA8PSBrLT5odHRwY29kZSAmJiAxOTkgPj0gay0+aHR0cGNvZGUpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogV2UgaGF2ZSBtYWRlIGEgSFRUUCBQVVQgb3IgUE9TVCBhbmQgdGhpcyBpcyAxLjEtbGluZ28KKyAgICAgICAgICogdGhhdCB0ZWxscyB1cyB0aGF0IHRoZSBzZXJ2ZXIgaXMgT0sgd2l0aCB0aGlzIGFuZCByZWFkeQorICAgICAgICAgKiB0byByZWNlaXZlIHRoZSBkYXRhLgorICAgICAgICAgKiBIb3dldmVyLCB3ZSdsbCBnZXQgbW9yZSBoZWFkZXJzIG5vdyBzbyB3ZSBtdXN0IGdldAorICAgICAgICAgKiBiYWNrIGludG8gdGhlIGhlYWRlci1wYXJzaW5nIHN0YXRlIQorICAgICAgICAgKi8KKyAgICAgICAgay0+aGVhZGVyID0gVFJVRTsKKyAgICAgICAgay0+aGVhZGVybGluZSA9IDA7IC8qIHJlc3RhcnQgdGhlIGhlYWRlciBsaW5lIGNvdW50ZXIgKi8KKworICAgICAgICAvKiBpZiB3ZSBkaWQgd2FpdCBmb3IgdGhpcyBkbyBlbmFibGUgd3JpdGUgbm93ISAqLworICAgICAgICBpZihrLT5leHAxMDApIHsKKyAgICAgICAgICBrLT5leHAxMDAgPSBFWFAxMDBfU0VORF9EQVRBOworICAgICAgICAgIGstPmtlZXBvbiB8PSBLRUVQX1NFTkQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBrLT5oZWFkZXIgPSBGQUxTRTsgLyogbm8gbW9yZSBoZWFkZXIgdG8gcGFyc2UhICovCisKKyAgICAgICAgaWYoKGstPnNpemUgPT0gLTEpICYmICFrLT5jaHVuayAmJiAhY29ubi0+Yml0cy5jbG9zZSAmJgorICAgICAgICAgICAoY29ubi0+aHR0cHZlcnNpb24gPj0gMTEpICYmCisgICAgICAgICAgICEoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fUlRTUCkpIHsKKyAgICAgICAgICAvKiBPbiBIVFRQIDEuMSwgd2hlbiBjb25uZWN0aW9uIGlzIG5vdCB0byBnZXQgY2xvc2VkLCBidXQgbm8KKyAgICAgICAgICAgICBDb250ZW50LUxlbmd0aCBub3IgQ29udGVudC1FbmNvZGluZyBjaHVua2VkIGhhdmUgYmVlbgorICAgICAgICAgICAgIHJlY2VpdmVkLCBhY2NvcmRpbmcgdG8gUkZDMjYxNiBzZWN0aW9uIDQuNCBwb2ludCA1LCB3ZQorICAgICAgICAgICAgIGFzc3VtZSB0aGF0IHRoZSBzZXJ2ZXIgd2lsbCBjbG9zZSB0aGUgY29ubmVjdGlvbiB0bworICAgICAgICAgICAgIHNpZ25hbCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4gKi8KKyAgICAgICAgICBpbmZvZihkYXRhLCAibm8gY2h1bmssIG5vIGNsb3NlLCBubyBzaXplLiBBc3N1bWUgY2xvc2UgdG8gIgorICAgICAgICAgICAgICAgICJzaWduYWwgZW5kXG4iKTsKKyAgICAgICAgICBjb25uLT5iaXRzLmNsb3NlID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKgorICAgICAgICogV2hlbiBhbGwgdGhlIGhlYWRlcnMgaGF2ZSBiZWVuIHBhcnNlZCwgc2VlIGlmIHdlIHNob3VsZCBnaXZlCisgICAgICAgKiB1cCBhbmQgcmV0dXJuIGFuIGVycm9yLgorICAgICAgICovCisgICAgICBpZihodHRwX3Nob3VsZF9mYWlsKGNvbm4pKSB7CisgICAgICAgIGZhaWxmIChkYXRhLCAiVGhlIHJlcXVlc3RlZCBVUkwgcmV0dXJuZWQgZXJyb3I6ICVkIiwKKyAgICAgICAgICAgICAgIGstPmh0dHBjb2RlKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX0hUVFBfUkVUVVJORURfRVJST1I7CisgICAgICB9CisKKyAgICAgIC8qIG5vdywgb25seSBvdXRwdXQgdGhpcyBpZiB0aGUgaGVhZGVyIEFORCBib2R5IGFyZSByZXF1ZXN0ZWQ6CisgICAgICAgKi8KKyAgICAgIHdyaXRldHlwZSA9IENMSUVOVFdSSVRFX0hFQURFUjsKKyAgICAgIGlmKGRhdGEtPnNldC5pbmNsdWRlX2hlYWRlcikKKyAgICAgICAgd3JpdGV0eXBlIHw9IENMSUVOVFdSSVRFX0JPRFk7CisKKyAgICAgIGhlYWRlcmxlbiA9IGstPnAgLSBkYXRhLT5zdGF0ZS5oZWFkZXJidWZmOworCisgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCB3cml0ZXR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5oZWFkZXJidWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVybGVuKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgZGF0YS0+aW5mby5oZWFkZXJfc2l6ZSArPSAobG9uZyloZWFkZXJsZW47CisgICAgICBkYXRhLT5yZXEuaGVhZGVyYnl0ZWNvdW50ICs9IChsb25nKWhlYWRlcmxlbjsKKworICAgICAgZGF0YS0+cmVxLmRlZHVjdGhlYWRlcmNvdW50ID0KKyAgICAgICAgKDEwMCA8PSBrLT5odHRwY29kZSAmJiAxOTkgPj0gay0+aHR0cGNvZGUpP2RhdGEtPnJlcS5oZWFkZXJieXRlY291bnQ6MDsKKworICAgICAgaWYoISpzdG9wX3JlYWRpbmcpIHsKKyAgICAgICAgLyogQ3VybF9odHRwX2F1dGhfYWN0KCkgY2hlY2tzIHdoYXQgYXV0aGVudGljYXRpb24gbWV0aG9kcworICAgICAgICAgKiB0aGF0IGFyZSBhdmFpbGFibGUgYW5kIGRlY2lkZXMgd2hpY2ggb25lIChpZiBhbnkpIHRvCisgICAgICAgICAqIHVzZS4gSXQgd2lsbCBzZXQgJ25ld3VybCcgaWYgYW4gYXV0aCBtZXRob2Qgd2FzIHBpY2tlZC4gKi8KKyAgICAgICAgcmVzdWx0ID0gQ3VybF9odHRwX2F1dGhfYWN0KGNvbm4pOworCisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgIGlmKGstPmh0dHBjb2RlID49IDMwMCkgeworICAgICAgICAgIGlmKCghY29ubi0+Yml0cy5hdXRobmVnKSAmJiAhY29ubi0+Yml0cy5jbG9zZSAmJgorICAgICAgICAgICAgICFjb25uLT5iaXRzLnJld2luZGFmdGVyc2VuZCkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEdlbmVyYWwgdHJlYXRtZW50IG9mIGVycm9ycyB3aGVuIGFib3V0IHRvIHNlbmQgZGF0YS4gSW5jbHVkaW5nIDoKKyAgICAgICAgICAgICAqICI0MTcgRXhwZWN0YXRpb24gRmFpbGVkIiwgd2hpbGUgd2FpdGluZyBmb3IgMTAwLWNvbnRpbnVlLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFRoZSBjaGVjayBmb3IgY2xvc2UgYWJvdmUgaXMgZG9uZSBzaW1wbHkgYmVjYXVzZSBvZiBzb21ldGhpbmcKKyAgICAgICAgICAgICAqIGVsc2UgaGFzIGFscmVhZHkgZGVlbWVkIHRoZSBjb25uZWN0aW9uIHRvIGdldCBjbG9zZWQgdGhlbgorICAgICAgICAgICAgICogc29tZXRoaW5nIGVsc2Ugc2hvdWxkJ3ZlIGNvbnNpZGVyZWQgdGhlIGJpZyBwaWN0dXJlIGFuZCB3ZQorICAgICAgICAgICAgICogYXZvaWQgdGhpcyBjaGVjay4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiByZXdpbmRhZnRlcnNlbmQgaW5kaWNhdGVzIHRoYXQgc29tZXRoaW5nIGhhcyB0b2xkIGxpYmN1cmwgdG8KKyAgICAgICAgICAgICAqIGNvbnRpbnVlIHNlbmRpbmcgZXZlbiBpZiBpdCBnZXRzIGRpc2NhcmRlZAorICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIHN3aXRjaChkYXRhLT5zZXQuaHR0cHJlcSkgeworICAgICAgICAgICAgY2FzZSBIVFRQUkVRX1BVVDoKKyAgICAgICAgICAgIGNhc2UgSFRUUFJFUV9QT1NUOgorICAgICAgICAgICAgY2FzZSBIVFRQUkVRX1BPU1RfRk9STToKKyAgICAgICAgICAgICAgLyogV2UgZ290IGFuIGVycm9yIHJlc3BvbnNlLiBJZiB0aGlzIGhhcHBlbmVkIGJlZm9yZSB0aGUgd2hvbGUKKyAgICAgICAgICAgICAgICogcmVxdWVzdCBib2R5IGhhcyBiZWVuIHNlbnQgd2Ugc3RvcCBzZW5kaW5nIGFuZCBtYXJrIHRoZQorICAgICAgICAgICAgICAgKiBjb25uZWN0aW9uIGZvciBjbG9zdXJlIGFmdGVyIHdlJ3ZlIHJlYWQgdGhlIGVudGlyZSByZXNwb25zZS4KKyAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgIGlmKCFrLT51cGxvYWRfZG9uZSkgeworICAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJIVFRQIGVycm9yIGJlZm9yZSBlbmQgb2Ygc2VuZCwgc3RvcCBzZW5kaW5nXG4iKTsKKyAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmNsb3NlID0gVFJVRTsgLyogY2xvc2UgYWZ0ZXIgdGhpcyAqLworICAgICAgICAgICAgICAgIGstPnVwbG9hZF9kb25lID0gVFJVRTsKKyAgICAgICAgICAgICAgICBrLT5rZWVwb24gJj0gfktFRVBfU0VORDsgLyogZG9uJ3Qgc2VuZCAqLworICAgICAgICAgICAgICAgIGlmKGRhdGEtPnN0YXRlLmV4cGVjdDEwMGhlYWRlcikKKyAgICAgICAgICAgICAgICAgIGstPmV4cDEwMCA9IEVYUDEwMF9GQUlMRUQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6IC8qIGRlZmF1bHQgbGFiZWwgcHJlc2VudCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncyAqLworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZihjb25uLT5iaXRzLnJld2luZGFmdGVyc2VuZCkgeworICAgICAgICAgIC8qIFdlIHJld2luZCBhZnRlciBhIGNvbXBsZXRlIHNlbmQsIHNvIHRodXMgd2UgY29udGludWUKKyAgICAgICAgICAgICBzZW5kaW5nIG5vdyAqLworICAgICAgICAgIGluZm9mKGRhdGEsICJLZWVwIHNlbmRpbmcgZGF0YSB0byBnZXQgdG9zc2VkIGF3YXkhXG4iKTsKKyAgICAgICAgICBrLT5rZWVwb24gfD0gS0VFUF9TRU5EOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKCFrLT5oZWFkZXIpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVhbGx5IGVuZC1vZi1oZWFkZXJzLgorICAgICAgICAgKgorICAgICAgICAgKiBJZiB3ZSByZXF1ZXN0ZWQgYSAibm8gYm9keSIsIHRoaXMgaXMgYSBnb29kIHRpbWUgdG8gZ2V0CisgICAgICAgICAqIG91dCBhbmQgcmV0dXJuIGhvbWUuCisgICAgICAgICAqLworICAgICAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpCisgICAgICAgICAgKnN0b3BfcmVhZGluZyA9IFRSVUU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIC8qIElmIHdlIGtub3cgdGhlIGV4cGVjdGVkIHNpemUgb2YgdGhpcyBkb2N1bWVudCwgd2Ugc2V0IHRoZQorICAgICAgICAgICAgIG1heGltdW0gZG93bmxvYWQgc2l6ZSB0byB0aGUgc2l6ZSBvZiB0aGUgZXhwZWN0ZWQKKyAgICAgICAgICAgICBkb2N1bWVudCBvciBlbHNlLCB3ZSB3b24ndCBrbm93IHdoZW4gdG8gc3RvcCByZWFkaW5nIQorCisgICAgICAgICAgICAgTm90ZSB0aGF0IHdlIHNldCB0aGUgZG93bmxvYWQgbWF4aW11bSBldmVuIGlmIHdlIHJlYWQgYQorICAgICAgICAgICAgICJDb25uZWN0aW9uOiBjbG9zZSIgaGVhZGVyLCB0byBtYWtlIHN1cmUgdGhhdAorICAgICAgICAgICAgICJDb250ZW50LUxlbmd0aDogMCIgc3RpbGwgcHJldmVudHMgdXMgZnJvbSBhdHRlbXB0aW5nIHRvCisgICAgICAgICAgICAgcmVhZCB0aGUgKG1pc3NpbmcpIHJlc3BvbnNlLWJvZHkuCisgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBBY2NvcmRpbmcgdG8gUkZDMjYxNiBzZWN0aW9uIDQuNCwgd2UgTVVTVCBpZ25vcmUKKyAgICAgICAgICAgICBDb250ZW50LUxlbmd0aDogaGVhZGVycyBpZiB3ZSBhcmUgbm93IHJlY2VpdmluZyBkYXRhCisgICAgICAgICAgICAgdXNpbmcgY2h1bmtlZCBUcmFuc2Zlci1FbmNvZGluZy4KKyAgICAgICAgICAqLworICAgICAgICAgIGlmKGstPmNodW5rKQorICAgICAgICAgICAgay0+bWF4ZG93bmxvYWQgPSBrLT5zaXplID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYoLTEgIT0gay0+c2l6ZSkgeworICAgICAgICAgIC8qIFdlIGRvIHRoaXMgb3BlcmF0aW9uIGV2ZW4gaWYgbm9fYm9keSBpcyB0cnVlLCBzaW5jZSB0aGlzCisgICAgICAgICAgICAgZGF0YSBtaWdodCBiZSByZXRyaWV2ZWQgbGF0ZXIgd2l0aCBjdXJsX2Vhc3lfZ2V0aW5mbygpCisgICAgICAgICAgICAgYW5kIGl0cyBDVVJMSU5GT19DT05URU5UX0xFTkdUSF9ET1dOTE9BRCBvcHRpb24uICovCisKKyAgICAgICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgay0+c2l6ZSk7CisgICAgICAgICAgay0+bWF4ZG93bmxvYWQgPSBrLT5zaXplOworICAgICAgICB9CisKKyAgICAgICAgLyogSWYgbWF4IGRvd25sb2FkIHNpemUgaXMgKnplcm8qIChub3RoaW5nKSB3ZSBhbHJlYWR5CisgICAgICAgICAgIGhhdmUgbm90aGluZyBhbmQgY2FuIHNhZmVseSByZXR1cm4gb2sgbm93ISAqLworICAgICAgICBpZigwID09IGstPm1heGRvd25sb2FkKQorICAgICAgICAgICpzdG9wX3JlYWRpbmcgPSBUUlVFOworCisgICAgICAgIGlmKCpzdG9wX3JlYWRpbmcpIHsKKyAgICAgICAgICAvKiB3ZSBtYWtlIHN1cmUgdGhhdCB0aGlzIHNvY2tldCBpc24ndCByZWFkIG1vcmUgbm93ICovCisgICAgICAgICAgay0+a2VlcG9uICY9IH5LRUVQX1JFQ1Y7CisgICAgICAgIH0KKworICAgICAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkKKyAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwKKyAgICAgICAgICAgICAgICAgICAgIGstPnN0cl9zdGFydCwgaGVhZGVybGVuLCBjb25uKTsKKyAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGV4aXQgaGVhZGVyIGxpbmUgbG9vcCAqLworICAgICAgfQorCisgICAgICAvKiBXZSBjb250aW51ZSByZWFkaW5nIGhlYWRlcnMsIHNvIHJlc2V0IHRoZSBsaW5lLWJhc2VkCisgICAgICAgICBoZWFkZXIgcGFyc2luZyB2YXJpYWJsZXMgaGJ1ZnAgJiYgaGJ1ZmxlbiAqLworICAgICAgay0+aGJ1ZnAgPSBkYXRhLT5zdGF0ZS5oZWFkZXJidWZmOworICAgICAgay0+aGJ1ZmxlbiA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrcyBmb3Igc3BlY2lhbCBoZWFkZXJzIGNvbWluZyB1cC4KKyAgICAgKi8KKworICAgIGlmKCFrLT5oZWFkZXJsaW5lKyspIHsKKyAgICAgIC8qIFRoaXMgaXMgdGhlIGZpcnN0IGhlYWRlciwgaXQgTVVTVCBiZSB0aGUgZXJyb3IgY29kZSBsaW5lCisgICAgICAgICBvciBlbHNlIHdlIGNvbnNpZGVyIHRoaXMgdG8gYmUgdGhlIGJvZHkgcmlnaHQgYXdheSEgKi8KKyAgICAgIGludCBodHRwdmVyc2lvbl9tYWpvcjsKKyAgICAgIGludCBydHNwdmVyc2lvbl9tYWpvcjsKKyAgICAgIGludCBuYyA9IDA7CisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisjZGVmaW5lIEhFQURFUjEgc2NyYXRjaAorI2RlZmluZSBTQ1JBVENIU0laRSAyMQorICAgICAgQ1VSTGNvZGUgcmVzOworICAgICAgY2hhciBzY3JhdGNoW1NDUkFUQ0hTSVpFKzFdOyAvKiAiSFRUUC9tYWpvci5taW5vciAxMjMiICovCisgICAgICAvKiBXZSBjYW4ndCByZWFsbHkgY29udmVydCB0aGlzIHlldCBiZWNhdXNlIHdlCisgICAgICAgICBkb24ndCBrbm93IGlmIGl0J3MgdGhlIDFzdCBoZWFkZXIgbGluZSBvciB0aGUgYm9keS4KKyAgICAgICAgIFNvIHdlIGRvIGEgcGFydGlhbCBjb252ZXJzaW9uIGludG8gYSBzY3JhdGNoIGFyZWEsCisgICAgICAgICBsZWF2aW5nIHRoZSBkYXRhIGF0IGstPnAgYXMtaXMuCisgICAgICAqLworICAgICAgc3RybmNweSgmc2NyYXRjaFswXSwgay0+cCwgU0NSQVRDSFNJWkUpOworICAgICAgc2NyYXRjaFtTQ1JBVENIU0laRV0gPSAwOyAvKiBudWxsIHRlcm1pbmF0ZSAqLworICAgICAgcmVzID0gQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayhkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2NyYXRjaFswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSQVRDSFNJWkUpOworICAgICAgaWYocmVzKQorICAgICAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLworICAgICAgICByZXR1cm4gcmVzOworI2Vsc2UKKyNkZWZpbmUgSEVBREVSMSBrLT5wIC8qIG5vIGNvbnZlcnNpb24gbmVlZGVkLCBqdXN0IHVzZSBrLT5wICovCisjZW5kaWYgLyogQ1VSTF9ET0VTX0NPTlZFUlNJT05TICovCisKKyAgICAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX0hUVFApIHsKKyAgICAgICAgbmMgPSBzc2NhbmYoSEVBREVSMSwKKyAgICAgICAgICAgICAgICAgICAgIiBIVFRQLyVkLiVkICUzZCIsCisgICAgICAgICAgICAgICAgICAgICZodHRwdmVyc2lvbl9tYWpvciwKKyAgICAgICAgICAgICAgICAgICAgJmNvbm4tPmh0dHB2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAmay0+aHR0cGNvZGUpOworICAgICAgICBpZihuYz09MykgeworICAgICAgICAgIGNvbm4tPmh0dHB2ZXJzaW9uICs9IDEwICogaHR0cHZlcnNpb25fbWFqb3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogdGhpcyBpcyB0aGUgcmVhbCB3b3JsZCwgbm90IGEgTmlydmFuYQorICAgICAgICAgICAgIE5DU0EgMS41LnggcmV0dXJucyB0aGlzIGNyYXAgd2hlbiBhc2tlZCBmb3IgSFRUUC8xLjEKKyAgICAgICAgICAqLworICAgICAgICAgIG5jPXNzY2FuZihIRUFERVIxLCAiIEhUVFAgJTNkIiwgJmstPmh0dHBjb2RlKTsKKyAgICAgICAgICBjb25uLT5odHRwdmVyc2lvbiA9IDEwOworCisgICAgICAgICAgLyogSWYgdXNlciBoYXMgc2V0IG9wdGlvbiBIVFRQMjAwQUxJQVNFUywKKyAgICAgICAgICAgICBjb21wYXJlIGhlYWRlciBsaW5lIGFnYWluc3QgbGlzdCBvZiBhbGlhc2VzCisgICAgICAgICAgKi8KKyAgICAgICAgICBpZighbmMpIHsKKyAgICAgICAgICAgIGlmKGNoZWNraHR0cHByZWZpeChkYXRhLCBrLT5wKSkgeworICAgICAgICAgICAgICBuYyA9IDE7CisgICAgICAgICAgICAgIGstPmh0dHBjb2RlID0gMjAwOworICAgICAgICAgICAgICBjb25uLT5odHRwdmVyc2lvbiA9IDEwOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19SVFNQKSB7CisgICAgICAgIG5jID0gc3NjYW5mKEhFQURFUjEsCisgICAgICAgICAgICAgICAgICAgICIgUlRTUC8lZC4lZCAlM2QiLAorICAgICAgICAgICAgICAgICAgICAmcnRzcHZlcnNpb25fbWFqb3IsCisgICAgICAgICAgICAgICAgICAgICZjb25uLT5ydHNwdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgJmstPmh0dHBjb2RlKTsKKyAgICAgICAgaWYobmM9PTMpIHsKKyAgICAgICAgICBjb25uLT5ydHNwdmVyc2lvbiArPSAxMCAqIHJ0c3B2ZXJzaW9uX21ham9yOworICAgICAgICAgIGNvbm4tPmh0dHB2ZXJzaW9uID0gMTE7IC8qIEZvciB1cywgUlRTUCBhY3RzIGxpa2UgSFRUUCAxLjEgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiBUT0RPOiBkbyB3ZSBjYXJlIGFib3V0IHRoZSBvdGhlciBjYXNlcyBoZXJlPyAqLworICAgICAgICAgIG5jID0gMDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZihuYykgeworICAgICAgICBkYXRhLT5pbmZvLmh0dHBjb2RlID0gay0+aHR0cGNvZGU7CisKKyAgICAgICAgZGF0YS0+aW5mby5odHRwdmVyc2lvbiA9IGNvbm4tPmh0dHB2ZXJzaW9uOworICAgICAgICBpZighZGF0YS0+c3RhdGUuaHR0cHZlcnNpb24gfHwKKyAgICAgICAgICAgZGF0YS0+c3RhdGUuaHR0cHZlcnNpb24gPiBjb25uLT5odHRwdmVyc2lvbikKKyAgICAgICAgICAvKiBzdG9yZSB0aGUgbG93ZXN0IHNlcnZlciB2ZXJzaW9uIHdlIGVuY291bnRlciAqLworICAgICAgICAgIGRhdGEtPnN0YXRlLmh0dHB2ZXJzaW9uID0gY29ubi0+aHR0cHZlcnNpb247CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBjb2RlIGV4ZWN1dGVzIGFzIHBhcnQgb2YgcHJvY2Vzc2luZyB0aGUgaGVhZGVyLiAgQXMgYQorICAgICAgICAgKiByZXN1bHQsIGl0J3Mgbm90IHRvdGFsbHkgY2xlYXIgaG93IHRvIGludGVycHJldCB0aGUKKyAgICAgICAgICogcmVzcG9uc2UgY29kZSB5ZXQgYXMgdGhhdCBkZXBlbmRzIG9uIHdoYXQgb3RoZXIgaGVhZGVycyBtYXkKKyAgICAgICAgICogYmUgcHJlc2VudC4gIDQwMSBhbmQgNDA3IG1heSBiZSBlcnJvcnMsIGJ1dCBtYXkgYmUgT0sKKyAgICAgICAgICogZGVwZW5kaW5nIG9uIGhvdyBhdXRoZW50aWNhdGlvbiBpcyB3b3JraW5nLiAgT3RoZXIgY29kZXMKKyAgICAgICAgICogYXJlIGRlZmluaXRlbHkgZXJyb3JzLCBzbyBnaXZlIHVwIGhlcmUuCisgICAgICAgICAqLworICAgICAgICBpZihkYXRhLT5zZXQuaHR0cF9mYWlsX29uX2Vycm9yICYmIChrLT5odHRwY29kZSA+PSA0MDApICYmCisgICAgICAgICAgICgoay0+aHR0cGNvZGUgIT0gNDAxKSB8fCAhY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCkgJiYKKyAgICAgICAgICAgKChrLT5odHRwY29kZSAhPSA0MDcpIHx8ICFjb25uLT5iaXRzLnByb3h5X3VzZXJfcGFzc3dkKSApIHsKKworICAgICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICYmCisgICAgICAgICAgICAgKGRhdGEtPnNldC5odHRwcmVxPT1IVFRQUkVRX0dFVCkgJiYKKyAgICAgICAgICAgICAoay0+aHR0cGNvZGUgPT0gNDE2KSkgeworICAgICAgICAgICAgLyogIlJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGUiLCBqdXN0IHByb2NlZWQgYW5kCisgICAgICAgICAgICAgICBwcmV0ZW5kIHRoaXMgaXMgbm8gZXJyb3IgKi8KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBzZXJpb3VzIGVycm9yLCBnbyBob21lISAqLworICAgICAgICAgICAgZmFpbGYgKGRhdGEsICJUaGUgcmVxdWVzdGVkIFVSTCByZXR1cm5lZCBlcnJvcjogJWQiLAorICAgICAgICAgICAgICAgICAgIGstPmh0dHBjb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9IVFRQX1JFVFVSTkVEX0VSUk9SOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKGNvbm4tPmh0dHB2ZXJzaW9uID09IDEwKSB7CisgICAgICAgICAgLyogRGVmYXVsdCBhY3Rpb24gZm9yIEhUVFAvMS4wIG11c3QgYmUgdG8gY2xvc2UsIHVubGVzcworICAgICAgICAgICAgIHdlIGdldCBvbmUgb2YgdGhvc2UgZmFuY3kgaGVhZGVycyB0aGF0IHRlbGwgdXMgdGhlCisgICAgICAgICAgICAgc2VydmVyIGtlZXBzIGl0IG9wZW4gZm9yIHVzISAqLworICAgICAgICAgIGluZm9mKGRhdGEsICJIVFRQIDEuMCwgYXNzdW1lIGNsb3NlIGFmdGVyIGJvZHlcbiIpOworICAgICAgICAgIGNvbm4tPmJpdHMuY2xvc2UgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoY29ubi0+aHR0cHZlcnNpb24gPj0gMTEgJiYKKyAgICAgICAgICAgICAgICAhY29ubi0+Yml0cy5jbG9zZSkgeworICAgICAgICAgIC8qIElmIEhUVFAgdmVyc2lvbiBpcyA+PSAxLjEgYW5kIGNvbm5lY3Rpb24gaXMgcGVyc2lzdGVudAorICAgICAgICAgICAgIHNlcnZlciBzdXBwb3J0cyBwaXBlbGluaW5nLiAqLworICAgICAgICAgIERFQlVHRihpbmZvZihkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAiSFRUUCAxLjEgb3IgbGF0ZXIgd2l0aCBwZXJzaXN0ZW50IGNvbm5lY3Rpb24sICIKKyAgICAgICAgICAgICAgICAgICAgICAgInBpcGVsaW5pbmcgc3VwcG9ydGVkXG4iKSk7CisgICAgICAgICAgY29ubi0+c2VydmVyX3N1cHBvcnRzX3BpcGVsaW5pbmcgPSBUUlVFOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoKGstPmh0dHBjb2RlKSB7CisgICAgICAgIGNhc2UgMjA0OgorICAgICAgICAgIC8qIChxdW90ZSBmcm9tIFJGQzI2MTYsIHNlY3Rpb24gMTAuMi41KTogVGhlIHNlcnZlciBoYXMKKyAgICAgICAgICAgKiBmdWxmaWxsZWQgdGhlIHJlcXVlc3QgYnV0IGRvZXMgbm90IG5lZWQgdG8gcmV0dXJuIGFuCisgICAgICAgICAgICogZW50aXR5LWJvZHkgLi4uIFRoZSAyMDQgcmVzcG9uc2UgTVVTVCBOT1QgaW5jbHVkZSBhCisgICAgICAgICAgICogbWVzc2FnZS1ib2R5LCBhbmQgdGh1cyBpcyBhbHdheXMgdGVybWluYXRlZCBieSB0aGUgZmlyc3QKKyAgICAgICAgICAgKiBlbXB0eSBsaW5lIGFmdGVyIHRoZSBoZWFkZXIgZmllbGRzLiAqLworICAgICAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgICAgIGNhc2UgMzA0OgorICAgICAgICAgIC8qIChxdW90ZSBmcm9tIFJGQzI2MTYsIHNlY3Rpb24gMTAuMy41KTogVGhlIDMwNCByZXNwb25zZQorICAgICAgICAgICAqIE1VU1QgTk9UIGNvbnRhaW4gYSBtZXNzYWdlLWJvZHksIGFuZCB0aHVzIGlzIGFsd2F5cworICAgICAgICAgICAqIHRlcm1pbmF0ZWQgYnkgdGhlIGZpcnN0IGVtcHR5IGxpbmUgYWZ0ZXIgdGhlIGhlYWRlcgorICAgICAgICAgICAqIGZpZWxkcy4gICovCisgICAgICAgICAgaWYoZGF0YS0+c2V0LnRpbWVjb25kaXRpb24pCisgICAgICAgICAgICBkYXRhLT5pbmZvLnRpbWVjb25kID0gVFJVRTsKKyAgICAgICAgICBrLT5zaXplPTA7CisgICAgICAgICAgay0+bWF4ZG93bmxvYWQ9MDsKKyAgICAgICAgICBrLT5pZ25vcmVjbCA9IFRSVUU7IC8qIGlnbm9yZSBDb250ZW50LUxlbmd0aCBoZWFkZXJzICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgLyogbm90aGluZyAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgay0+aGVhZGVyID0gRkFMU0U7ICAgLyogdGhpcyBpcyBub3QgYSBoZWFkZXIgbGluZSAqLworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQgPSBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrKGRhdGEsIGstPnAsIHN0cmxlbihrLT5wKSk7CisgICAgLyogQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayBjYWxscyBmYWlsZiBpZiB1bnN1Y2Nlc3NmdWwgKi8KKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgLyogQ2hlY2sgZm9yIENvbnRlbnQtTGVuZ3RoOiBoZWFkZXIgbGluZXMgdG8gZ2V0IHNpemUgKi8KKyAgICBpZighay0+aWdub3JlY2wgJiYgIWRhdGEtPnNldC5pZ25vcmVjbCAmJgorICAgICAgIGNoZWNrcHJlZml4KCJDb250ZW50LUxlbmd0aDoiLCBrLT5wKSkgeworICAgICAgY3VybF9vZmZfdCBjb250ZW50bGVuZ3RoID0gY3VybHhfc3RydG9vZmZ0KGstPnArMTUsIE5VTEwsIDEwKTsKKyAgICAgIGlmKGRhdGEtPnNldC5tYXhfZmlsZXNpemUgJiYKKyAgICAgICAgIGNvbnRlbnRsZW5ndGggPiBkYXRhLT5zZXQubWF4X2ZpbGVzaXplKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJNYXhpbXVtIGZpbGUgc2l6ZSBleGNlZWRlZCIpOworICAgICAgICByZXR1cm4gQ1VSTEVfRklMRVNJWkVfRVhDRUVERUQ7CisgICAgICB9CisgICAgICBpZihjb250ZW50bGVuZ3RoID49IDApIHsKKyAgICAgICAgay0+c2l6ZSA9IGNvbnRlbnRsZW5ndGg7CisgICAgICAgIGstPm1heGRvd25sb2FkID0gay0+c2l6ZTsKKyAgICAgICAgLyogd2Ugc2V0IHRoZSBwcm9ncmVzcyBkb3dubG9hZCBzaXplIGFscmVhZHkgYXQgdGhpcyBwb2ludAorICAgICAgICAgICBqdXN0IHRvIG1ha2UgaXQgZWFzaWVyIGZvciBhcHBzL2NhbGxiYWNrcyB0byBleHRyYWN0IHRoaXMKKyAgICAgICAgICAgaW5mbyBhcyBzb29uIGFzIHBvc3NpYmxlICovCisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBrLT5zaXplKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBOZWdhdGl2ZSBDb250ZW50LUxlbmd0aCBpcyByZWFsbHkgb2RkLCBhbmQgd2Uga25vdyBpdAorICAgICAgICAgICBoYXBwZW5zIGZvciBleGFtcGxlIHdoZW4gb2xkZXIgQXBhY2hlIHNlcnZlcnMgc2VuZCBsYXJnZQorICAgICAgICAgICBmaWxlcyAqLworICAgICAgICBjb25uLT5iaXRzLmNsb3NlID0gVFJVRTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIk5lZ2F0aXZlIGNvbnRlbnQtbGVuZ3RoOiAlIiBGT1JNQVRfT0ZGX1QKKyAgICAgICAgICAgICAgIiwgY2xvc2luZyBhZnRlciB0cmFuc2ZlclxuIiwgY29udGVudGxlbmd0aCk7CisgICAgICB9CisgICAgfQorICAgIC8qIGNoZWNrIGZvciBDb250ZW50LVR5cGU6IGhlYWRlciBsaW5lcyB0byBnZXQgdGhlIE1JTUUtdHlwZSAqLworICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIkNvbnRlbnQtVHlwZToiLCBrLT5wKSkgeworICAgICAgY2hhciAqY29udGVudHR5cGUgPSBjb3B5X2hlYWRlcl92YWx1ZShrLT5wKTsKKyAgICAgIGlmKCFjb250ZW50dHlwZSkKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICBpZighKmNvbnRlbnR0eXBlKQorICAgICAgICAvKiBpZ25vcmUgZW1wdHkgZGF0YSAqLworICAgICAgICBmcmVlKGNvbnRlbnR0eXBlKTsKKyAgICAgIGVsc2UgeworICAgICAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPmluZm8uY29udGVudHR5cGUpOworICAgICAgICBkYXRhLT5pbmZvLmNvbnRlbnR0eXBlID0gY29udGVudHR5cGU7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoKGNvbm4tPmh0dHB2ZXJzaW9uID09IDEwKSAmJgorICAgICAgICAgICAgY29ubi0+Yml0cy5odHRwcHJveHkgJiYKKyAgICAgICAgICAgIEN1cmxfY29tcGFyZWhlYWRlcihrLT5wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm94eS1Db25uZWN0aW9uOiIsICJrZWVwLWFsaXZlIikpIHsKKyAgICAgIC8qCisgICAgICAgKiBXaGVuIGEgSFRUUC8xLjAgcmVwbHkgY29tZXMgd2hlbiB1c2luZyBhIHByb3h5LCB0aGUKKyAgICAgICAqICdQcm94eS1Db25uZWN0aW9uOiBrZWVwLWFsaXZlJyBsaW5lIHRlbGxzIHVzIHRoZQorICAgICAgICogY29ubmVjdGlvbiB3aWxsIGJlIGtlcHQgYWxpdmUgZm9yIG91ciBwbGVhc3VyZS4KKyAgICAgICAqIERlZmF1bHQgYWN0aW9uIGZvciAxLjAgaXMgdG8gY2xvc2UuCisgICAgICAgKi8KKyAgICAgIGNvbm4tPmJpdHMuY2xvc2UgPSBGQUxTRTsgLyogZG9uJ3QgY2xvc2Ugd2hlbiBkb25lICovCisgICAgICBpbmZvZihkYXRhLCAiSFRUUC8xLjAgcHJveHkgY29ubmVjdGlvbiBzZXQgdG8ga2VlcCBhbGl2ZSFcbiIpOworICAgIH0KKyAgICBlbHNlIGlmKChjb25uLT5odHRwdmVyc2lvbiA9PSAxMSkgJiYKKyAgICAgICAgICAgIGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmCisgICAgICAgICAgICBDdXJsX2NvbXBhcmVoZWFkZXIoay0+cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJveHktQ29ubmVjdGlvbjoiLCAiY2xvc2UiKSkgeworICAgICAgLyoKKyAgICAgICAqIFdlIGdldCBhIEhUVFAvMS4xIHJlc3BvbnNlIGZyb20gYSBwcm94eSBhbmQgaXQgc2F5cyBpdCdsbAorICAgICAgICogY2xvc2UgZG93biBhZnRlciB0aGlzIHRyYW5zZmVyLgorICAgICAgICovCisgICAgICBjb25uLT5iaXRzLmNsb3NlID0gVFJVRTsgLyogY2xvc2Ugd2hlbiBkb25lICovCisgICAgICBpbmZvZihkYXRhLCAiSFRUUC8xLjEgcHJveHkgY29ubmVjdGlvbiBzZXQgY2xvc2UhXG4iKTsKKyAgICB9CisgICAgZWxzZSBpZigoY29ubi0+aHR0cHZlcnNpb24gPT0gMTApICYmCisgICAgICAgICAgICBDdXJsX2NvbXBhcmVoZWFkZXIoay0+cCwgIkNvbm5lY3Rpb246IiwgImtlZXAtYWxpdmUiKSkgeworICAgICAgLyoKKyAgICAgICAqIEEgSFRUUC8xLjAgcmVwbHkgd2l0aCB0aGUgJ0Nvbm5lY3Rpb246IGtlZXAtYWxpdmUnIGxpbmUKKyAgICAgICAqIHRlbGxzIHVzIHRoZSBjb25uZWN0aW9uIHdpbGwgYmUga2VwdCBhbGl2ZSBmb3Igb3VyCisgICAgICAgKiBwbGVhc3VyZS4gIERlZmF1bHQgYWN0aW9uIGZvciAxLjAgaXMgdG8gY2xvc2UuCisgICAgICAgKgorICAgICAgICogW1JGQzIwNjgsIHNlY3Rpb24gMTkuNy4xXSAqLworICAgICAgY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOyAvKiBkb24ndCBjbG9zZSB3aGVuIGRvbmUgKi8KKyAgICAgIGluZm9mKGRhdGEsICJIVFRQLzEuMCBjb25uZWN0aW9uIHNldCB0byBrZWVwIGFsaXZlIVxuIik7CisgICAgfQorICAgIGVsc2UgaWYoQ3VybF9jb21wYXJlaGVhZGVyKGstPnAsICJDb25uZWN0aW9uOiIsICJjbG9zZSIpKSB7CisgICAgICAvKgorICAgICAgICogW1JGQyAyNjE2LCBzZWN0aW9uIDguMS4yLjFdCisgICAgICAgKiAiQ29ubmVjdGlvbjogY2xvc2UiIGlzIEhUVFAvMS4xIGxhbmd1YWdlIGFuZCBtZWFucyB0aGF0CisgICAgICAgKiB0aGUgY29ubmVjdGlvbiB3aWxsIGNsb3NlIHdoZW4gdGhpcyByZXF1ZXN0IGhhcyBiZWVuCisgICAgICAgKiBzZXJ2ZWQuCisgICAgICAgKi8KKyAgICAgIGNvbm4tPmJpdHMuY2xvc2UgPSBUUlVFOyAvKiBjbG9zZSB3aGVuIGRvbmUgKi8KKyAgICB9CisgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiVHJhbnNmZXItRW5jb2Rpbmc6Iiwgay0+cCkpIHsKKyAgICAgIC8qIE9uZSBvciBtb3JlIGVuY29kaW5ncy4gV2UgY2hlY2sgZm9yIGNodW5rZWQgYW5kL29yIGEgY29tcHJlc3Npb24KKyAgICAgICAgIGFsZ29yaXRobS4gKi8KKyAgICAgIC8qCisgICAgICAgKiBbUkZDIDI2MTYsIHNlY3Rpb24gMy42LjFdIEEgJ2NodW5rZWQnIHRyYW5zZmVyIGVuY29kaW5nCisgICAgICAgKiBtZWFucyB0aGF0IHRoZSBzZXJ2ZXIgd2lsbCBzZW5kIGEgc2VyaWVzIG9mICJjaHVua3MiLiBFYWNoCisgICAgICAgKiBjaHVuayBzdGFydHMgd2l0aCBsaW5lIHdpdGggaW5mbyAoaW5jbHVkaW5nIHNpemUgb2YgdGhlCisgICAgICAgKiBjb21pbmcgYmxvY2spICh0ZXJtaW5hdGVkIHdpdGggQ1JMRiksIHRoZW4gYSBibG9jayBvZiBkYXRhCisgICAgICAgKiB3aXRoIHRoZSBwcmV2aW91c2x5IG1lbnRpb25lZCBzaXplLiBUaGVyZSBjYW4gYmUgYW55IGFtb3VudAorICAgICAgICogb2YgY2h1bmtzLCBhbmQgYSBjaHVuay1kYXRhIHNldCB0byB6ZXJvIHNpZ25hbHMgdGhlCisgICAgICAgKiBlbmQtb2YtY2h1bmtzLiAqLworCisgICAgICBjaGFyICpzdGFydDsKKworICAgICAgLyogRmluZCB0aGUgZmlyc3Qgbm9uLXNwYWNlIGxldHRlciAqLworICAgICAgc3RhcnQgPSBrLT5wICsgMTg7CisKKyAgICAgIGZvcig7OykgeworICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2VzIGFuZCBjb21tYXMgKi8KKyAgICAgICAgd2hpbGUoKnN0YXJ0ICYmIChJU1NQQUNFKCpzdGFydCkgfHwgKCpzdGFydCA9PSAnLCcpKSkKKyAgICAgICAgICBzdGFydCsrOworCisgICAgICAgIGlmKGNoZWNrcHJlZml4KCJjaHVua2VkIiwgc3RhcnQpKSB7CisgICAgICAgICAgay0+Y2h1bmsgPSBUUlVFOyAvKiBjaHVua3MgY29taW5nIG91ciB3YXkgKi8KKworICAgICAgICAgIC8qIGluaXQgb3VyIGNodW5reSBlbmdpbmUgKi8KKyAgICAgICAgICBDdXJsX2h0dHBjaHVua19pbml0KGNvbm4pOworCisgICAgICAgICAgc3RhcnQgKz0gNzsKKyAgICAgICAgfQorCisgICAgICAgIGlmKGstPmF1dG9fZGVjb2RpbmcpCisgICAgICAgICAgLyogVE9ETzogd2Ugb25seSBzdXBwb3J0IHRoZSBmaXJzdCBtZW50aW9uZWQgY29tcHJlc3Npb24gZm9yIG5vdyAqLworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmKGNoZWNrcHJlZml4KCJpZGVudGl0eSIsIHN0YXJ0KSkgeworICAgICAgICAgIGstPmF1dG9fZGVjb2RpbmcgPSBJREVOVElUWTsKKyAgICAgICAgICBzdGFydCArPSA4OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoImRlZmxhdGUiLCBzdGFydCkpIHsKKyAgICAgICAgICBrLT5hdXRvX2RlY29kaW5nID0gREVGTEFURTsKKyAgICAgICAgICBzdGFydCArPSA3OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoImd6aXAiLCBzdGFydCkpIHsKKyAgICAgICAgICBrLT5hdXRvX2RlY29kaW5nID0gR1pJUDsKKyAgICAgICAgICBzdGFydCArPSA0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIngtZ3ppcCIsIHN0YXJ0KSkgeworICAgICAgICAgIGstPmF1dG9fZGVjb2RpbmcgPSBHWklQOworICAgICAgICAgIHN0YXJ0ICs9IDY7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiY29tcHJlc3MiLCBzdGFydCkpIHsKKyAgICAgICAgICBrLT5hdXRvX2RlY29kaW5nID0gQ09NUFJFU1M7CisgICAgICAgICAgc3RhcnQgKz0gODsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJ4LWNvbXByZXNzIiwgc3RhcnQpKSB7CisgICAgICAgICAgay0+YXV0b19kZWNvZGluZyA9IENPTVBSRVNTOworICAgICAgICAgIHN0YXJ0ICs9IDEwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAvKiB1bmtub3duISAqLworICAgICAgICAgIGJyZWFrOworCisgICAgICB9CisKKyAgICB9CisgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiQ29udGVudC1FbmNvZGluZzoiLCBrLT5wKSAmJgorICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfRU5DT0RJTkddKSB7CisgICAgICAvKgorICAgICAgICogUHJvY2VzcyBDb250ZW50LUVuY29kaW5nLiBMb29rIGZvciB0aGUgdmFsdWVzOiBpZGVudGl0eSwKKyAgICAgICAqIGd6aXAsIGRlZmxhdGUsIGNvbXByZXNzLCB4LWd6aXAgYW5kIHgtY29tcHJlc3MuIHgtZ3ppcCBhbmQKKyAgICAgICAqIHgtY29tcHJlc3MgYXJlIHRoZSBzYW1lIGFzIGd6aXAgYW5kIGNvbXByZXNzLiAoU2VjIDMuNSBSRkMKKyAgICAgICAqIDI2MTYpLiB6bGliIGNhbm5vdCBoYW5kbGUgY29tcHJlc3MuICBIb3dldmVyLCBlcnJvcnMgYXJlCisgICAgICAgKiBoYW5kbGVkIGZ1cnRoZXIgZG93biB3aGVuIHRoZSByZXNwb25zZSBib2R5IGlzIHByb2Nlc3NlZAorICAgICAgICovCisgICAgICBjaGFyICpzdGFydDsKKworICAgICAgLyogRmluZCB0aGUgZmlyc3Qgbm9uLXNwYWNlIGxldHRlciAqLworICAgICAgc3RhcnQgPSBrLT5wICsgMTc7CisgICAgICB3aGlsZSgqc3RhcnQgJiYgSVNTUEFDRSgqc3RhcnQpKQorICAgICAgICBzdGFydCsrOworCisgICAgICAvKiBSZWNvcmQgdGhlIGNvbnRlbnQtZW5jb2RpbmcgZm9yIGxhdGVyIHVzZSAqLworICAgICAgaWYoY2hlY2twcmVmaXgoImlkZW50aXR5Iiwgc3RhcnQpKQorICAgICAgICBrLT5hdXRvX2RlY29kaW5nID0gSURFTlRJVFk7CisgICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJkZWZsYXRlIiwgc3RhcnQpKQorICAgICAgICBrLT5hdXRvX2RlY29kaW5nID0gREVGTEFURTsKKyAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoImd6aXAiLCBzdGFydCkKKyAgICAgICAgICAgICAgfHwgY2hlY2twcmVmaXgoIngtZ3ppcCIsIHN0YXJ0KSkKKyAgICAgICAgay0+YXV0b19kZWNvZGluZyA9IEdaSVA7CisgICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJjb21wcmVzcyIsIHN0YXJ0KQorICAgICAgICAgICAgICB8fCBjaGVja3ByZWZpeCgieC1jb21wcmVzcyIsIHN0YXJ0KSkKKyAgICAgICAgay0+YXV0b19kZWNvZGluZyA9IENPTVBSRVNTOworICAgIH0KKyAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJDb250ZW50LVJhbmdlOiIsIGstPnApKSB7CisgICAgICAvKiBDb250ZW50LVJhbmdlOiBieXRlcyBbbnVtXS0KKyAgICAgICAgIENvbnRlbnQtUmFuZ2U6IGJ5dGVzOiBbbnVtXS0KKyAgICAgICAgIENvbnRlbnQtUmFuZ2U6IFtudW1dLQorCisgICAgICAgICBUaGUgc2Vjb25kIGZvcm1hdCB3YXMgYWRkZWQgc2luY2UgU3VuJ3Mgd2Vic2VydmVyCisgICAgICAgICBKYXZhV2ViU2VydmVyLzEuMS4xIG9idmlvdXNseSBzZW5kcyB0aGUgaGVhZGVyIHRoaXMgd2F5IQorICAgICAgICAgVGhlIHRoaXJkIGFkZGVkIHNpbmNlIHNvbWUgc2VydmVycyB1c2UgdGhhdCEKKyAgICAgICovCisKKyAgICAgIGNoYXIgKnB0ciA9IGstPnAgKyAxNDsKKworICAgICAgLyogTW92ZSBmb3J3YXJkIHVudGlsIGZpcnN0IGRpZ2l0ICovCisgICAgICB3aGlsZSgqcHRyICYmICFJU0RJR0lUKCpwdHIpKQorICAgICAgICBwdHIrKzsKKworICAgICAgay0+b2Zmc2V0ID0gY3VybHhfc3RydG9vZmZ0KHB0ciwgTlVMTCwgMTApOworCisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA9PSBrLT5vZmZzZXQpCisgICAgICAgIC8qIHdlIGFza2VkIGZvciBhIHJlc3VtZSBhbmQgd2UgZ290IGl0ICovCisgICAgICAgIGstPmNvbnRlbnRfcmFuZ2UgPSBUUlVFOworICAgIH0KKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ09PS0lFUykKKyAgICBlbHNlIGlmKGRhdGEtPmNvb2tpZXMgJiYKKyAgICAgICAgICAgIGNoZWNrcHJlZml4KCJTZXQtQ29va2llOiIsIGstPnApKSB7CisgICAgICBDdXJsX3NoYXJlX2xvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFLAorICAgICAgICAgICAgICAgICAgICAgIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKTsKKyAgICAgIEN1cmxfY29va2llX2FkZChkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNvb2tpZXMsIFRSVUUsIGstPnArMTEsCisgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlcmUgaXMgYSBjdXN0b20tc2V0IEhvc3Q6IG5hbWUsIHVzZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUsIG9yIGVsc2UgdXNlIHJlYWwgcGVlciBob3N0IG5hbWUuICovCisgICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIuY29va2llaG9zdD8KKyAgICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci5jb29raWVob3N0OmNvbm4tPmhvc3QubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5wYXRoKTsKKyAgICAgIEN1cmxfc2hhcmVfdW5sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX0NPT0tJRSk7CisgICAgfQorI2VuZGlmCisgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiTGFzdC1Nb2RpZmllZDoiLCBrLT5wKSAmJgorICAgICAgICAgICAgKGRhdGEtPnNldC50aW1lY29uZGl0aW9uIHx8IGRhdGEtPnNldC5nZXRfZmlsZXRpbWUpICkgeworICAgICAgdGltZV90IHNlY3M9dGltZShOVUxMKTsKKyAgICAgIGstPnRpbWVvZmRvYyA9IGN1cmxfZ2V0ZGF0ZShrLT5wK3N0cmxlbigiTGFzdC1Nb2RpZmllZDoiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Vjcyk7CisgICAgICBpZihkYXRhLT5zZXQuZ2V0X2ZpbGV0aW1lKQorICAgICAgICBkYXRhLT5pbmZvLmZpbGV0aW1lID0gKGxvbmcpay0+dGltZW9mZG9jOworICAgIH0KKyAgICBlbHNlIGlmKChjaGVja3ByZWZpeCgiV1dXLUF1dGhlbnRpY2F0ZToiLCBrLT5wKSAmJgorICAgICAgICAgICAgICg0MDEgPT0gay0+aHR0cGNvZGUpKSB8fAorICAgICAgICAgICAgKGNoZWNrcHJlZml4KCJQcm94eS1hdXRoZW50aWNhdGU6Iiwgay0+cCkgJiYKKyAgICAgICAgICAgICAoNDA3ID09IGstPmh0dHBjb2RlKSkpIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfaHR0cF9pbnB1dF9hdXRoKGNvbm4sIGstPmh0dHBjb2RlLCBrLT5wKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgZWxzZSBpZigoay0+aHR0cGNvZGUgPj0gMzAwICYmIGstPmh0dHBjb2RlIDwgNDAwKSAmJgorICAgICAgICAgICAgY2hlY2twcmVmaXgoIkxvY2F0aW9uOiIsIGstPnApICYmCisgICAgICAgICAgICAhZGF0YS0+cmVxLmxvY2F0aW9uKSB7CisgICAgICAvKiB0aGlzIGlzIHRoZSBVUkwgdGhhdCB0aGUgc2VydmVyIGFkdmlzZXMgdXMgdG8gdXNlIGluc3RlYWQgKi8KKyAgICAgIGNoYXIgKmxvY2F0aW9uID0gY29weV9oZWFkZXJfdmFsdWUoay0+cCk7CisgICAgICBpZighbG9jYXRpb24pCisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgaWYoISpsb2NhdGlvbikKKyAgICAgICAgLyogaWdub3JlIGVtcHR5IGRhdGEgKi8KKyAgICAgICAgZnJlZShsb2NhdGlvbik7CisgICAgICBlbHNlIHsKKyAgICAgICAgZGF0YS0+cmVxLmxvY2F0aW9uID0gbG9jYXRpb247CisKKyAgICAgICAgaWYoZGF0YS0+c2V0Lmh0dHBfZm9sbG93X2xvY2F0aW9uKSB7CisgICAgICAgICAgREVCVUdBU1NFUlQoIWRhdGEtPnJlcS5uZXd1cmwpOworICAgICAgICAgIGRhdGEtPnJlcS5uZXd1cmwgPSBzdHJkdXAoZGF0YS0+cmVxLmxvY2F0aW9uKTsgLyogY2xvbmUgKi8KKyAgICAgICAgICBpZighZGF0YS0+cmVxLm5ld3VybCkKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgICAgICAgICAgLyogc29tZSBjYXNlcyBvZiBQT1NUIGFuZCBQVVQgZXRjIG5lZWRzIHRvIHJld2luZCB0aGUgZGF0YQorICAgICAgICAgICAgIHN0cmVhbSBhdCB0aGlzIHBvaW50ICovCisgICAgICAgICAgcmVzdWx0ID0gaHR0cF9wZXJoYXBzcmV3aW5kKGNvbm4pOworICAgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19SVFNQKSB7CisgICAgICByZXN1bHQgPSBDdXJsX3J0c3BfcGFyc2VoZWFkZXIoY29ubiwgay0+cCk7CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBFbmQgb2YgaGVhZGVyLWNoZWNrcy4gV3JpdGUgdGhlbSB0byB0aGUgY2xpZW50LgorICAgICAqLworCisgICAgd3JpdGV0eXBlID0gQ0xJRU5UV1JJVEVfSEVBREVSOworICAgIGlmKGRhdGEtPnNldC5pbmNsdWRlX2hlYWRlcikKKyAgICAgIHdyaXRldHlwZSB8PSBDTElFTlRXUklURV9CT0RZOworCisgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpCisgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwKKyAgICAgICAgICAgICAgICAgay0+cCwgKHNpemVfdClrLT5oYnVmbGVuLCBjb25uKTsKKworICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIHdyaXRldHlwZSwgay0+cCwgay0+aGJ1Zmxlbik7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGRhdGEtPmluZm8uaGVhZGVyX3NpemUgKz0gKGxvbmcpay0+aGJ1ZmxlbjsKKyAgICBkYXRhLT5yZXEuaGVhZGVyYnl0ZWNvdW50ICs9IChsb25nKWstPmhidWZsZW47CisKKyAgICAvKiByZXNldCBoYnVmcCBwb2ludGVyICYmIGhidWZsZW4gKi8KKyAgICBrLT5oYnVmcCA9IGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmY7CisgICAgay0+aGJ1ZmxlbiA9IDA7CisgIH0KKyAgd2hpbGUoISpzdG9wX3JlYWRpbmcgJiYgKmstPnN0cik7IC8qIGhlYWRlciBsaW5lIHdpdGhpbiBidWZmZXIgKi8KKworICAvKiBXZSBtaWdodCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyIHBhcnQgaGVyZSwgYnV0CisgICAgIHRoZXJlIG1pZ2h0IGJlIGEgbm9uLWhlYWRlciBwYXJ0IGxlZnQgaW4gdGhlIGVuZCBvZiB0aGUgcmVhZAorICAgICBidWZmZXIuICovCisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0hUVFAgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9odHRwLmggYi9jdXJsLTcuMjUuMC9saWIvaHR0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZThiODQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvaHR0cC5oCkBAIC0wLDAgKzEsMTcxIEBACisjaWZuZGVmIF9fSFRUUF9ICisjZGVmaW5lIF9fSFRUUF9ICisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorCitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfaHR0cDsKKworI2lmZGVmIFVTRV9TU0wKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9odHRwczsKKyNlbmRpZgorCitib29sIEN1cmxfY29tcGFyZWhlYWRlcihjb25zdCBjaGFyICpoZWFkZXJsaW5lLCAgLyogbGluZSB0byBjaGVjayAqLworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaGVhZGVyLCAgIC8qIGhlYWRlciBrZXl3b3JkIF93aXRoXyBjb2xvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGVudCk7IC8qIGNvbnRlbnQgc3RyaW5nIHRvIGZpbmQgKi8KKworY2hhciAqQ3VybF9jaGVja2hlYWRlcnMoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIGNvbnN0IGNoYXIgKnRoaXNoZWFkZXIpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogVGhlIGFkZF9idWZmZXIgc2VyaWVzIG9mIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBidWlsZCBvbmUgbGFyZ2UgbWVtb3J5IGNodW5rCisgKiBmcm9tIHJlcGVhdGVkIGZ1bmN0aW9uIGludm9rZXMuIFVzZWQgc28gdGhhdCB0aGUgZW50aXJlIEhUVFAgcmVxdWVzdCBjYW4KKyAqIGJlIHNlbnQgaW4gb25lIGdvLgorICovCitzdHJ1Y3QgQ3VybF9zZW5kX2J1ZmZlciB7CisgIGNoYXIgKmJ1ZmZlcjsKKyAgc2l6ZV90IHNpemVfbWF4OworICBzaXplX3Qgc2l6ZV91c2VkOworfTsKK3R5cGVkZWYgc3RydWN0IEN1cmxfc2VuZF9idWZmZXIgQ3VybF9zZW5kX2J1ZmZlcjsKKworQ3VybF9zZW5kX2J1ZmZlciAqQ3VybF9hZGRfYnVmZmVyX2luaXQodm9pZCk7CitDVVJMY29kZSBDdXJsX2FkZF9idWZmZXJmKEN1cmxfc2VuZF9idWZmZXIgKmluLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitDVVJMY29kZSBDdXJsX2FkZF9idWZmZXIoQ3VybF9zZW5kX2J1ZmZlciAqaW4sIGNvbnN0IHZvaWQgKmlucHRyLCBzaXplX3Qgc2l6ZSk7CitDVVJMY29kZSBDdXJsX2FkZF9idWZmZXJfc2VuZChDdXJsX3NlbmRfYnVmZmVyICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKmJ5dGVzX3dyaXR0ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5jbHVkZWRfYm9keV9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NrZXRpbmRleCk7CisKK0NVUkxjb2RlIEN1cmxfYWRkX3RpbWVjb25kaXRpb24oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKmJ1Zik7CitDVVJMY29kZSBDdXJsX2FkZF9jdXN0b21faGVhZGVycyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cmxfc2VuZF9idWZmZXIgKnJlcV9idWZmZXIpOworCisvKiBwcm90b2NvbC1zcGVjaWZpYyBmdW5jdGlvbnMgc2V0IHVwIHRvIGJlIGNhbGxlZCBieSB0aGUgbWFpbiBlbmdpbmUgKi8KK0NVUkxjb2RlIEN1cmxfaHR0cChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworQ1VSTGNvZGUgQ3VybF9odHRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICosIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitDVVJMY29kZSBDdXJsX2h0dHBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworCisvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBodHRwX2NodW5rcy5jICovCit2b2lkIEN1cmxfaHR0cGNodW5rX2luaXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK0NIVU5LY29kZSBDdXJsX2h0dHBjaHVua19yZWFkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY2hhciAqZGF0YXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IGxlbmd0aCwgc3NpemVfdCAqd3JvdGUpOworCisvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGluIGh0dHAuYyAqLwordm9pZCBDdXJsX2h0dHBfYXV0aF9zdGFnZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgaW50IHN0YWdlKTsKK0NVUkxjb2RlIEN1cmxfaHR0cF9pbnB1dF9hdXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBodHRwY29kZSwgY29uc3QgY2hhciAqaGVhZGVyKTsKK0NVUkxjb2RlIEN1cmxfaHR0cF9hdXRoX2FjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworQ1VSTGNvZGUgQ3VybF9odHRwX3BlcmhhcHNyZXdpbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKworLyogSWYgb25seSB0aGUgUElDS05PTkUgYml0IGlzIHNldCwgdGhlcmUgaGFzIGJlZW4gYSByb3VuZC10cmlwIGFuZCB3ZQorICAgc2VsZWN0ZWQgdG8gdXNlIG5vIGF1dGggYXQgYWxsLiBJZSwgd2UgYWN0aXZlbHkgc2VsZWN0IG5vIGF1dGgsIGFzIG9wcG9zZWQKKyAgIHRvIG5vdCBoYXZpbmcgb25lIHNlbGVjdGVkLiBUaGUgb3RoZXIgQ1VSTEFVVEhfKiBkZWZpbmVzIGFyZSBwcmVzZW50IGluIHRoZQorICAgcHVibGljIGN1cmwvY3VybC5oIGhlYWRlci4gKi8KKyNkZWZpbmUgQ1VSTEFVVEhfUElDS05PTkUgKDE8PDMwKSAvKiBkb24ndCB1c2UgYXV0aCAqLworCisvKiBNQVhfSU5JVElBTF9QT1NUX1NJWkUgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3aWxsIG1ha2UgdGhlIFBPU1QKKyAgIGRhdGEgZ2V0IGluY2x1ZGVkIGluIHRoZSBpbml0aWFsIGRhdGEgY2h1bmsgc2VudCB0byB0aGUgc2VydmVyLiBJZiB0aGUKKyAgIGRhdGEgaXMgbGFyZ2VyIHRoYW4gdGhpcywgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGdldCBzcGxpdCB1cCBpbiBtdWx0aXBsZQorICAgc3lzdGVtIGNhbGxzLgorCisgICBUaGlzIHZhbHVlIHVzZWQgdG8gYmUgZmFpcmx5IGJpZyAoMTAwSyksIGJ1dCB3ZSBtdXN0IHRha2UgaW50byBhY2NvdW50IHRoYXQKKyAgIGlmIHRoZSBzZXJ2ZXIgcmVqZWN0cyB0aGUgUE9TVCBkdWUgZm9yIGF1dGhlbnRpY2F0aW9uIHJlYXNvbnMsIHRoaXMgZGF0YQorICAgd2lsbCBhbHdheXMgYmUgdW5jb25kdGlvbmFsbHkgc2VudCBhbmQgdGh1cyBpdCBtYXkgbm90IGJlIGxhcmdlciB0aGFuIGNhbgorICAgYWx3YXlzIGJlIGFmZm9yZGVkIHRvIHNlbmQgdHdpY2UuCisKKyAgIEl0IG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiA2NEsgdG8gd29yayBvbiBWTVMuCisqLworI2lmbmRlZiBNQVhfSU5JVElBTF9QT1NUX1NJWkUKKyNkZWZpbmUgTUFYX0lOSVRJQUxfUE9TVF9TSVpFICg2NCoxMDI0KQorI2VuZGlmCisKKyNpZm5kZWYgVElOWV9JTklUSUFMX1BPU1RfU0laRQorI2RlZmluZSBUSU5ZX0lOSVRJQUxfUE9TVF9TSVpFIDEwMjQKKyNlbmRpZgorCisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0hUVFAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhUVFAgdW5pcXVlIHNldHVwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IEhUVFAgeworICBzdHJ1Y3QgRm9ybURhdGEgKnNlbmRpdDsKKyAgY3VybF9vZmZfdCBwb3N0c2l6ZTsgLyogb2ZmX3QgdG8gaGFuZGxlIGxhcmdlIGZpbGUgc2l6ZXMgKi8KKyAgY29uc3QgY2hhciAqcG9zdGRhdGE7CisKKyAgY29uc3QgY2hhciAqcF9wcmFnbWE7ICAgICAgLyogUHJhZ21hOiBzdHJpbmcgKi8KKyAgY29uc3QgY2hhciAqcF9hY2NlcHQ7ICAgICAgLyogQWNjZXB0OiBzdHJpbmcgKi8KKyAgY3VybF9vZmZfdCByZWFkYnl0ZWNvdW50OworICBjdXJsX29mZl90IHdyaXRlYnl0ZWNvdW50OworCisgIC8qIEZvciBGT1JNIHBvc3RpbmcgKi8KKyAgc3RydWN0IEZvcm0gZm9ybTsKKworICBzdHJ1Y3QgYmFjayB7CisgICAgY3VybF9yZWFkX2NhbGxiYWNrIGZyZWFkX2Z1bmM7IC8qIGJhY2t1cCBzdG9yYWdlIGZvciBmcmVhZCBwb2ludGVyICovCisgICAgdm9pZCAqZnJlYWRfaW47ICAgICAgICAgICAvKiBiYWNrdXAgc3RvcmFnZSBmb3IgZnJlYWRfaW4gcG9pbnRlciAqLworICAgIGNvbnN0IGNoYXIgKnBvc3RkYXRhOworICAgIGN1cmxfb2ZmX3QgcG9zdHNpemU7CisgIH0gYmFja3VwOworCisgIGVudW0geworICAgIEhUVFBTRU5EX05BREEsICAgIC8qIGluaXQgKi8KKyAgICBIVFRQU0VORF9SRVFVRVNULCAvKiBzZW5kaW5nIGEgcmVxdWVzdCAqLworICAgIEhUVFBTRU5EX0JPRFksICAgIC8qIHNlbmRpbmcgYm9keSAqLworICAgIEhUVFBTRU5EX0xBU1QgICAgIC8qIG5ldmVyIHVzZSB0aGlzICovCisgIH0gc2VuZGluZzsKKworICB2b2lkICpzZW5kX2J1ZmZlcjsgLyogdXNlZCBpZiB0aGUgcmVxdWVzdCBjb3VsZG4ndCBiZSBzZW50IGluIG9uZSBjaHVuaywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyB0byBhbiBhbGxvY2F0ZWQgc2VuZF9idWZmZXIgc3RydWN0ICovCit9OworCitDVVJMY29kZSBDdXJsX2h0dHBfcmVhZHdyaXRlX2hlYWRlcnMoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgKm5yZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnN0b3BfcmVhZGluZyk7CisKKy8qKgorICogQ3VybF9odHRwX291dHB1dF9hdXRoKCkgc2V0dXBzIHRoZSBhdXRoZW50aWNhdGlvbiBoZWFkZXJzIGZvciB0aGUKKyAqIGhvc3QvcHJveHkgYW5kIHRoZSBjb3JyZWN0IGF1dGhlbnRpY2F0aW9uCisgKiBtZXRob2QuIGNvbm4tPmRhdGEtPnN0YXRlLmF1dGhkb25lIGlzIHNldCB0byBUUlVFIHdoZW4gYXV0aGVudGljYXRpb24gaXMKKyAqIGRvbmUuCisgKgorICogQHBhcmFtIGNvbm4gYWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24KKyAqIEBwYXJhbSByZXF1ZXN0IHBvaW50ZXIgdG8gdGhlIHJlcXVlc3Qga2V5d29yZAorICogQHBhcmFtIHBhdGggcG9pbnRlciB0byB0aGUgcmVxdWVzdGVkIHBhdGgKKyAqIEBwYXJhbSBwcm94eXR1bm5lbCBib29sZWFuIGlmIHRoaXMgaXMgdGhlIHJlcXVlc3Qgc2V0dGluZyB1cCBhICJwcm94eQorICogdHVubmVsIgorICoKKyAqIEByZXR1cm5zIENVUkxjb2RlCisgKi8KK0NVUkxjb2RlCitDdXJsX2h0dHBfb3V0cHV0X2F1dGgoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sIHByb3h5dHVubmVsKTsgLyogVFJVRSBpZiB0aGlzIGlzIHRoZSByZXF1ZXN0IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAgdGhlIHByb3h5IHR1bm5lbCAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9odHRwX2NodW5rcy5jIGIvY3VybC03LjI1LjAvbGliL2h0dHBfY2h1bmtzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhMGJlYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9odHRwX2NodW5rcy5jCkBAIC0wLDAgKzEsMzk3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKKworI2luY2x1ZGUgInVybGRhdGEuaCIgLyogaXQgaW5jbHVkZXMgaHR0cF9jaHVua3MuaCAqLworI2luY2x1ZGUgInNlbmRmLmgiICAgLyogZm9yIHRoZSBjbGllbnQgd3JpdGUgc3R1ZmYgKi8KKworI2luY2x1ZGUgImNvbnRlbnRfZW5jb2RpbmcuaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJub24tYXNjaWkuaCIgLyogZm9yIEN1cmxfY29udmVydF90b19uZXR3b3JrIHByb3RvdHlwZSAqLworCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKgorICogQ2h1bmsgZm9ybWF0IChzaW1wbGlmaWVkKToKKyAqCisgKiA8SEVYIFNJWkU+WyBjaHVuayBleHRlbnNpb24gXSBDUkxGCisgKiA8REFUQT4gQ1JMRgorICoKKyAqIEhpZ2hsaWdodHMgZnJvbSBSRkMyNjE2IHNlY3Rpb24gMy42IHNheToKKworICAgVGhlIGNodW5rZWQgZW5jb2RpbmcgbW9kaWZpZXMgdGhlIGJvZHkgb2YgYSBtZXNzYWdlIGluIG9yZGVyIHRvCisgICB0cmFuc2ZlciBpdCBhcyBhIHNlcmllcyBvZiBjaHVua3MsIGVhY2ggd2l0aCBpdHMgb3duIHNpemUgaW5kaWNhdG9yLAorICAgZm9sbG93ZWQgYnkgYW4gT1BUSU9OQUwgdHJhaWxlciBjb250YWluaW5nIGVudGl0eS1oZWFkZXIgZmllbGRzLiBUaGlzCisgICBhbGxvd3MgZHluYW1pY2FsbHkgcHJvZHVjZWQgY29udGVudCB0byBiZSB0cmFuc2ZlcnJlZCBhbG9uZyB3aXRoIHRoZQorICAgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB0aGUgcmVjaXBpZW50IHRvIHZlcmlmeSB0aGF0IGl0IGhhcworICAgcmVjZWl2ZWQgdGhlIGZ1bGwgbWVzc2FnZS4KKworICAgICAgIENodW5rZWQtQm9keSAgID0gKmNodW5rCisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0LWNodW5rCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbGVyCisgICAgICAgICAgICAgICAgICAgICAgICBDUkxGCisKKyAgICAgICBjaHVuayAgICAgICAgICA9IGNodW5rLXNpemUgWyBjaHVuay1leHRlbnNpb24gXSBDUkxGCisgICAgICAgICAgICAgICAgICAgICAgICBjaHVuay1kYXRhIENSTEYKKyAgICAgICBjaHVuay1zaXplICAgICA9IDEqSEVYCisgICAgICAgbGFzdC1jaHVuayAgICAgPSAxKigiMCIpIFsgY2h1bmstZXh0ZW5zaW9uIF0gQ1JMRgorCisgICAgICAgY2h1bmstZXh0ZW5zaW9uPSAqKCAiOyIgY2h1bmstZXh0LW5hbWUgWyAiPSIgY2h1bmstZXh0LXZhbCBdICkKKyAgICAgICBjaHVuay1leHQtbmFtZSA9IHRva2VuCisgICAgICAgY2h1bmstZXh0LXZhbCAgPSB0b2tlbiB8IHF1b3RlZC1zdHJpbmcKKyAgICAgICBjaHVuay1kYXRhICAgICA9IGNodW5rLXNpemUoT0NURVQpCisgICAgICAgdHJhaWxlciAgICAgICAgPSAqKGVudGl0eS1oZWFkZXIgQ1JMRikKKworICAgVGhlIGNodW5rLXNpemUgZmllbGQgaXMgYSBzdHJpbmcgb2YgaGV4IGRpZ2l0cyBpbmRpY2F0aW5nIHRoZSBzaXplIG9mCisgICB0aGUgY2h1bmsuIFRoZSBjaHVua2VkIGVuY29kaW5nIGlzIGVuZGVkIGJ5IGFueSBjaHVuayB3aG9zZSBzaXplIGlzCisgICB6ZXJvLCBmb2xsb3dlZCBieSB0aGUgdHJhaWxlciwgd2hpY2ggaXMgdGVybWluYXRlZCBieSBhbiBlbXB0eSBsaW5lLgorCisgKi8KKworLyogQ2hlY2sgZm9yIGFuIEFTQ0lJIGhleCBkaWdpdC4KKyBXZSBhdm9pZCB0aGUgdXNlIG9mIGlzeGRpZ2l0IHRvIGFjY29tbW9kYXRlIG5vbi1BU0NJSSBob3N0cy4gKi8KK3N0YXRpYyBib29sIEN1cmxfaXN4ZGlnaXQoY2hhciBkaWdpdCkKK3sKKyAgcmV0dXJuICggKGRpZ2l0ID49IDB4MzAgJiYgZGlnaXQgPD0gMHgzOSkgLyogMC05ICovCisgICAgICAgIHx8IChkaWdpdCA+PSAweDQxICYmIGRpZ2l0IDw9IDB4NDYpIC8qIEEtRiAqLworICAgICAgICB8fCAoZGlnaXQgPj0gMHg2MSAmJiBkaWdpdCA8PSAweDY2KSAvKiBhLWYgKi8gKSA/IFRSVUUgOiBGQUxTRTsKK30KKwordm9pZCBDdXJsX2h0dHBjaHVua19pbml0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IEN1cmxfY2h1bmtlciAqY2h1bmsgPSAmY29ubi0+Y2h1bms7CisgIGNodW5rLT5oZXhpbmRleD0wOyAvKiBzdGFydCBhdCAwICovCisgIGNodW5rLT5kYXRhbGVmdD0wOyAvKiBubyBkYXRhIGxlZnQgeWV0ISAqLworICBjaHVuay0+c3RhdGUgPSBDSFVOS19IRVg7IC8qIHdlIGdldCBoZXggZmlyc3QhICovCit9CisKKy8qCisgKiBjaHVua19yZWFkKCkgcmV0dXJucyBhIE9LIGZvciBub3JtYWwgb3BlcmF0aW9ucywgb3IgYSBwb3NpdGl2ZSByZXR1cm4gY29kZQorICogZm9yIGVycm9ycy4gU1RPUCBtZWFucyB0aGlzIHNlcXVlbmNlIG9mIGNodW5rcyBpcyBjb21wbGV0ZS4gIFRoZSAnd3JvdGUnCisgKiBhcmd1bWVudCBpcyBzZXQgdG8gdGVsbCB0aGUgY2FsbGVyIGhvdyBtYW55IGJ5dGVzIHdlIGFjdHVhbGx5IHBhc3NlZCB0byB0aGUKKyAqIGNsaWVudCAoZm9yIGJ5dGUtY291bnRpbmcgYW5kIHdoYXRldmVyKS4KKyAqCisgKiBUaGUgc3RhdGVzIGFuZCB0aGUgc3RhdGUtbWFjaGluZSBpcyBmdXJ0aGVyIGV4cGxhaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHdheXMgdXNlcyBBU0NJSSBoZXggdmFsdWVzIHRvIGFjY29tbW9kYXRlIG5vbi1BU0NJSSBob3N0cy4KKyAqIEZvciBleGFtcGxlLCAweDBkIGFuZCAweDBhIGFyZSB1c2VkIGluc3RlYWQgb2YgJ1xyJyBhbmQgJ1xuJy4KKyAqLworQ0hVTktjb2RlIEN1cmxfaHR0cGNodW5rX3JlYWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90ICp3cm90ZXApCit7CisgIENVUkxjb2RlIHJlc3VsdD1DVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgQ3VybF9jaHVua2VyICpjaCA9ICZjb25uLT5jaHVuazsKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmZGF0YS0+cmVxOworICBzaXplX3QgcGllY2U7CisgIHNpemVfdCBsZW5ndGggPSAoc2l6ZV90KWRhdGFsZW47CisgIHNpemVfdCAqd3JvdGUgPSAoc2l6ZV90ICopd3JvdGVwOworCisgICp3cm90ZSA9IDA7IC8qIG5vdGhpbmcncyB3cml0dGVuIHlldCAqLworCisgIC8qIHRoZSBvcmlnaW5hbCBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIGNsaWVudCwgYnV0IHdlIGdvIG9uIHdpdGggdGhlCisgICAgIGNodW5rIHJlYWQgcHJvY2VzcywgdG8gcHJvcGVybHkgY2FsY3VsYXRlIHRoZSBjb250ZW50IGxlbmd0aCovCisgIGlmKGRhdGEtPnNldC5odHRwX3RlX3NraXAgJiYgIWstPmlnbm9yZWJvZHkpIHsKKyAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCBkYXRhcCwgZGF0YWxlbik7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIENIVU5LRV9XUklURV9FUlJPUjsKKyAgfQorCisgIHdoaWxlKGxlbmd0aCkgeworICAgIHN3aXRjaChjaC0+c3RhdGUpIHsKKyAgICBjYXNlIENIVU5LX0hFWDoKKyAgICAgIGlmKEN1cmxfaXN4ZGlnaXQoKmRhdGFwKSkgeworICAgICAgICBpZihjaC0+aGV4aW5kZXggPCBNQVhOVU1fU0laRSkgeworICAgICAgICAgIGNoLT5oZXhidWZmZXJbY2gtPmhleGluZGV4XSA9ICpkYXRhcDsKKyAgICAgICAgICBkYXRhcCsrOworICAgICAgICAgIGxlbmd0aC0tOworICAgICAgICAgIGNoLT5oZXhpbmRleCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHJldHVybiBDSFVOS0VfVE9PX0xPTkdfSEVYOyAvKiBsb25nZXIgaGV4IHRoYW4gd2Ugc3VwcG9ydCAqLworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYoMCA9PSBjaC0+aGV4aW5kZXgpIHsKKyAgICAgICAgICAvKiBUaGlzIGlzIGlsbGVnYWwgZGF0YSwgd2UgcmVjZWl2ZWQganVuayB3aGVyZSB3ZSBleHBlY3RlZAorICAgICAgICAgICAgIGEgaGV4YWRlY2ltYWwgZGlnaXQuICovCisgICAgICAgICAgcmV0dXJuIENIVU5LRV9JTExFR0FMX0hFWDsKKyAgICAgICAgfQorICAgICAgICAvKiBsZW5ndGggYW5kIGRhdGFwIGFyZSB1bm1vZGlmaWVkICovCisgICAgICAgIGNoLT5oZXhidWZmZXJbY2gtPmhleGluZGV4XT0wOworCisgICAgICAgIC8qIGNvbnZlcnQgdG8gaG9zdCBlbmNvZGluZyBiZWZvcmUgY2FsbGluZyBzdHJ0b3VsICovCisgICAgICAgIHJlc3VsdCA9IEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoY29ubi0+ZGF0YSwgY2gtPmhleGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaC0+aGV4aW5kZXgpOworICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLworICAgICAgICAgIC8qIFRyZWF0IGl0IGFzIGEgYmFkIGhleCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICByZXR1cm4oQ0hVTktFX0lMTEVHQUxfSEVYKTsKKyAgICAgICAgfQorCisgICAgICAgIGNoLT5kYXRhc2l6ZT1zdHJ0b3VsKGNoLT5oZXhidWZmZXIsIE5VTEwsIDE2KTsKKyAgICAgICAgY2gtPnN0YXRlID0gQ0hVTktfUE9TVEhFWDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDSFVOS19QT1NUSEVYOgorICAgICAgLyogSW4gdGhpcyBzdGF0ZSwgd2UncmUgd2FpdGluZyBmb3IgQ1JMRiB0byBhcnJpdmUuIFdlIHN1cHBvcnQKKyAgICAgICAgIHRoaXMgdG8gYWxsb3cgc28gY2FsbGVkIGNodW5rLWV4dGVuc2lvbnMgdG8gc2hvdyB1cCBoZXJlCisgICAgICAgICBiZWZvcmUgdGhlIENSTEYgY29tZXMuICovCisgICAgICBpZigqZGF0YXAgPT0gMHgwZCkKKyAgICAgICAgY2gtPnN0YXRlID0gQ0hVTktfQ1I7CisgICAgICBsZW5ndGgtLTsKKyAgICAgIGRhdGFwKys7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ0hVTktfQ1I6CisgICAgICAvKiB3YWl0aW5nIGZvciB0aGUgTEYgKi8KKyAgICAgIGlmKCpkYXRhcCA9PSAweDBhKSB7CisgICAgICAgIC8qIHdlJ3JlIG5vdyBleHBlY3RpbmcgZGF0YSB0byBjb21lLCB1bmxlc3Mgc2l6ZSB3YXMgemVybyEgKi8KKyAgICAgICAgaWYoMCA9PSBjaC0+ZGF0YXNpemUpIHsKKyAgICAgICAgICBjaC0+c3RhdGUgPSBDSFVOS19UUkFJTEVSOyAvKiBub3cgY2hlY2sgZm9yIHRyYWlsZXJzICovCisgICAgICAgICAgY29ubi0+dHJsUG9zPTA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgY2gtPnN0YXRlID0gQ0hVTktfREFUQTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgICAvKiBwcmV2aW91c2x5IHdlIGdvdCBhIGZha2UgQ1IsIGdvIGJhY2sgdG8gQ1Igd2FpdGluZyEgKi8KKyAgICAgICAgY2gtPnN0YXRlID0gQ0hVTktfQ1I7CisgICAgICBkYXRhcCsrOworICAgICAgbGVuZ3RoLS07CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ0hVTktfREFUQToKKyAgICAgIC8qIHdlIGdldCBwdXJlIGFuZCBmaW5lIGRhdGEKKworICAgICAgICAgV2UgZXhwZWN0IGFub3RoZXIgJ2RhdGFzaXplJyBvZiBkYXRhLiBXZSBoYXZlICdsZW5ndGgnIHJpZ2h0IG5vdywKKyAgICAgICAgIGl0IGNhbiBiZSBtb3JlIG9yIGxlc3MgdGhhbiAnZGF0YXNpemUnLiBHZXQgdGhlIHNtYWxsZXN0IHBpZWNlLgorICAgICAgKi8KKyAgICAgIHBpZWNlID0gKGNoLT5kYXRhc2l6ZSA+PSBsZW5ndGgpP2xlbmd0aDpjaC0+ZGF0YXNpemU7CisKKyAgICAgIC8qIFdyaXRlIHRoZSBkYXRhIHBvcnRpb24gYXZhaWxhYmxlICovCisjaWZkZWYgSEFWRV9MSUJaCisgICAgICBzd2l0Y2ggKGNvbm4tPmRhdGEtPnNldC5odHRwX2NlX3NraXA/CisgICAgICAgICAgICAgIElERU5USVRZIDogZGF0YS0+cmVxLmF1dG9fZGVjb2RpbmcpIHsKKyAgICAgIGNhc2UgSURFTlRJVFk6CisjZW5kaWYKKyAgICAgICAgaWYoIWstPmlnbm9yZWJvZHkpIHsKKyAgICAgICAgICBpZighZGF0YS0+c2V0Lmh0dHBfdGVfc2tpcCkKKyAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIGRhdGFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGllY2UpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09LOworICAgICAgICB9CisjaWZkZWYgSEFWRV9MSUJaCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIERFRkxBVEU6CisgICAgICAgIC8qIHVwZGF0ZSBkYXRhLT5yZXEua2VlcC5zdHIgdG8gcG9pbnQgdG8gdGhlIGNodW5rIGRhdGEuICovCisgICAgICAgIGRhdGEtPnJlcS5zdHIgPSBkYXRhcDsKKyAgICAgICAgcmVzdWx0ID0gQ3VybF91bmVuY29kZV9kZWZsYXRlX3dyaXRlKGNvbm4sICZkYXRhLT5yZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3NpemVfdClwaWVjZSk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdaSVA6CisgICAgICAgIC8qIHVwZGF0ZSBkYXRhLT5yZXEua2VlcC5zdHIgdG8gcG9pbnQgdG8gdGhlIGNodW5rIGRhdGEuICovCisgICAgICAgIGRhdGEtPnJlcS5zdHIgPSBkYXRhcDsKKyAgICAgICAgcmVzdWx0ID0gQ3VybF91bmVuY29kZV9nemlwX3dyaXRlKGNvbm4sICZkYXRhLT5yZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3NpemVfdClwaWVjZSk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIENPTVBSRVNTOgorICAgICAgZGVmYXVsdDoKKyAgICAgICAgZmFpbGYgKGNvbm4tPmRhdGEsCisgICAgICAgICAgICAgICAiVW5yZWNvZ25pemVkIGNvbnRlbnQgZW5jb2RpbmcgdHlwZS4gIgorICAgICAgICAgICAgICAgImxpYmN1cmwgdW5kZXJzdGFuZHMgYGlkZW50aXR5JywgYGRlZmxhdGUnIGFuZCBgZ3ppcCcgIgorICAgICAgICAgICAgICAgImNvbnRlbnQgZW5jb2RpbmdzLiIpOworICAgICAgICByZXR1cm4gQ0hVTktFX0JBRF9FTkNPRElORzsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICBpZihyZXN1bHQpCisgICAgICAgIHJldHVybiBDSFVOS0VfV1JJVEVfRVJST1I7CisKKyAgICAgICp3cm90ZSArPSBwaWVjZTsKKworICAgICAgY2gtPmRhdGFzaXplIC09IHBpZWNlOyAvKiBkZWNyZWFzZSBhbW91bnQgbGVmdCB0byBleHBlY3QgKi8KKyAgICAgIGRhdGFwICs9IHBpZWNlOyAgICAvKiBtb3ZlIHJlYWQgcG9pbnRlciBmb3J3YXJkICovCisgICAgICBsZW5ndGggLT0gcGllY2U7ICAgLyogZGVjcmVhc2Ugc3BhY2UgbGVmdCBpbiB0aGlzIHJvdW5kICovCisKKyAgICAgIGlmKDAgPT0gY2gtPmRhdGFzaXplKQorICAgICAgICAvKiBlbmQgb2YgZGF0YSB0aGlzIHJvdW5kLCB3ZSBub3cgZXhwZWN0IGEgdHJhaWxpbmcgQ1JMRiAqLworICAgICAgICBjaC0+c3RhdGUgPSBDSFVOS19QT1NUQ1I7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ0hVTktfUE9TVENSOgorICAgICAgaWYoKmRhdGFwID09IDB4MGQpIHsKKyAgICAgICAgY2gtPnN0YXRlID0gQ0hVTktfUE9TVExGOworICAgICAgICBkYXRhcCsrOworICAgICAgICBsZW5ndGgtLTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIENIVU5LRV9CQURfQ0hVTks7CisKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDSFVOS19QT1NUTEY6CisgICAgICBpZigqZGF0YXAgPT0gMHgwYSkgeworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgbGFzdCBvbmUgYmVmb3JlIHdlIGdvIGJhY2sgdG8gaGV4IHN0YXRlIGFuZCBzdGFydCBhbGwKKyAgICAgICAgICogb3Zlci4KKyAgICAgICAgICovCisgICAgICAgIEN1cmxfaHR0cGNodW5rX2luaXQoY29ubik7CisgICAgICAgIGRhdGFwKys7CisgICAgICAgIGxlbmd0aC0tOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gQ0hVTktFX0JBRF9DSFVOSzsKKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENIVU5LX1RSQUlMRVI6CisgICAgICBpZigqZGF0YXAgPT0gMHgwZCkgeworICAgICAgICAvKiB0aGlzIGlzIHRoZSBlbmQgb2YgYSB0cmFpbGVyLCBidXQgaWYgdGhlIHRyYWlsZXIgd2FzIHplcm8gYnl0ZXMKKyAgICAgICAgICAgdGhlcmUgd2FzIG5vIHRyYWlsZXIgYW5kIHdlIG1vdmUgb24gKi8KKworICAgICAgICBpZihjb25uLT50cmxQb3MpIHsKKyAgICAgICAgICAvKiB3ZSBhbGxvY2F0ZSB0cmFpbGVyIHdpdGggMyBieXRlcyBleHRyYSByb29tIHRvIGZpdCB0aGlzICovCisgICAgICAgICAgY29ubi0+dHJhaWxlcltjb25uLT50cmxQb3MrK109MHgwZDsKKyAgICAgICAgICBjb25uLT50cmFpbGVyW2Nvbm4tPnRybFBvcysrXT0weDBhOworICAgICAgICAgIGNvbm4tPnRyYWlsZXJbY29ubi0+dHJsUG9zXT0wOworCisgICAgICAgICAgLyogQ29udmVydCB0byBob3N0IGVuY29kaW5nIGJlZm9yZSBjYWxsaW5nIEN1cmxfY2xpZW50X3dyaXRlICovCisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayhjb25uLT5kYXRhLCBjb25uLT50cmFpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dHJsUG9zKTsKKyAgICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLworICAgICAgICAgICAgLyogVHJlYXQgaXQgYXMgYSBiYWQgY2h1bmsgKi8KKyAgICAgICAgICAgIHJldHVybiBDSFVOS0VfQkFEX0NIVU5LOworCisgICAgICAgICAgaWYoIWRhdGEtPnNldC5odHRwX3RlX3NraXApIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnRyYWlsZXIsIGNvbm4tPnRybFBvcyk7CisgICAgICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgICAgIHJldHVybiBDSFVOS0VfV1JJVEVfRVJST1I7CisgICAgICAgICAgfQorICAgICAgICAgIGNvbm4tPnRybFBvcz0wOworICAgICAgICAgIGNoLT5zdGF0ZSA9IENIVU5LX1RSQUlMRVJfQ1I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogbm8gdHJhaWxlciwgd2UncmUgb24gdGhlIGZpbmFsIENSTEYgcGFpciAqLworICAgICAgICAgIGNoLT5zdGF0ZSA9IENIVU5LX1RSQUlMRVJfUE9TVENSOworICAgICAgICAgIGJyZWFrOyAvKiBkb24ndCBhZHZhbmNlIHRoZSBwb2ludGVyICovCisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBjb25uLT50cmFpbGVyIGlzIGFzc3VtZWQgdG8gYmUgZnJlZWQgaW4gdXJsLmMgb24gYQorICAgICAgICAgICBjb25uZWN0aW9uIGJhc2lzICovCisgICAgICAgIGlmKGNvbm4tPnRybFBvcyA+PSBjb25uLT50cmxNYXgpIHsKKyAgICAgICAgICAvKiB3ZSBhbHdheXMgYWxsb2NhdGUgdGhyZWUgZXh0cmEgYnl0ZXMsIGp1c3QgYmVjYXVzZSB3aGVuIHRoZSBmdWxsCisgICAgICAgICAgICAgaGVhZGVyIGhhcyBiZWVuIHJlY2VpdmVkIHdlIGFwcGVuZCBDUkxGXDAgKi8KKyAgICAgICAgICBjaGFyICpwdHI7CisgICAgICAgICAgaWYoY29ubi0+dHJsTWF4KSB7CisgICAgICAgICAgICBjb25uLT50cmxNYXggKj0gMjsKKyAgICAgICAgICAgIHB0ciA9IHJlYWxsb2MoY29ubi0+dHJhaWxlciwgY29ubi0+dHJsTWF4ICsgMyk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29ubi0+dHJsTWF4PTEyODsKKyAgICAgICAgICAgIHB0ciA9IG1hbGxvYyhjb25uLT50cmxNYXggKyAzKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoIXB0cikKKyAgICAgICAgICAgIHJldHVybiBDSFVOS0VfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBjb25uLT50cmFpbGVyID0gcHRyOworICAgICAgICB9CisgICAgICAgIGNvbm4tPnRyYWlsZXJbY29ubi0+dHJsUG9zKytdPSpkYXRhcDsKKyAgICAgIH0KKyAgICAgIGRhdGFwKys7CisgICAgICBsZW5ndGgtLTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDSFVOS19UUkFJTEVSX0NSOgorICAgICAgaWYoKmRhdGFwID09IDB4MGEpIHsKKyAgICAgICAgY2gtPnN0YXRlID0gQ0hVTktfVFJBSUxFUl9QT1NUQ1I7CisgICAgICAgIGRhdGFwKys7CisgICAgICAgIGxlbmd0aC0tOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gQ0hVTktFX0JBRF9DSFVOSzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDSFVOS19UUkFJTEVSX1BPU1RDUjoKKyAgICAgIC8qIFdlIGVudGVyIHRoaXMgc3RhdGUgd2hlbiBhIENSIHNob3VsZCBhcnJpdmUgc28gd2UgZXhwZWN0IHRvCisgICAgICAgICBoYXZlIHRvIGZpcnN0IHBhc3MgYSBDUiBiZWZvcmUgd2Ugd2FpdCBmb3IgTEYgKi8KKyAgICAgIGlmKCpkYXRhcCAhPSAweDBkKSB7CisgICAgICAgIC8qIG5vdCBhIENSIHRoZW4gaXQgbXVzdCBiZSBhbm90aGVyIGhlYWRlciBpbiB0aGUgdHJhaWxlciAqLworICAgICAgICBjaC0+c3RhdGUgPSBDSFVOS19UUkFJTEVSOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRhdGFwKys7CisgICAgICBsZW5ndGgtLTsKKyAgICAgIC8qIG5vdyB3YWl0IGZvciB0aGUgZmluYWwgTEYgKi8KKyAgICAgIGNoLT5zdGF0ZSA9IENIVU5LX1NUT1A7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ0hVTktfU1RPUENSOgorICAgICAgLyogUmVhZCB0aGUgZmluYWwgQ1JMRiB0aGF0IGVuZHMgYWxsIGNodW5rIGJvZGllcyAqLworCisgICAgICBpZigqZGF0YXAgPT0gMHgwZCkgeworICAgICAgICBjaC0+c3RhdGUgPSBDSFVOS19TVE9QOworICAgICAgICBkYXRhcCsrOworICAgICAgICBsZW5ndGgtLTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIENIVU5LRV9CQURfQ0hVTks7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ0hVTktfU1RPUDoKKyAgICAgIGlmKCpkYXRhcCA9PSAweDBhKSB7CisgICAgICAgIGxlbmd0aC0tOworCisgICAgICAgIC8qIFJlY29yZCB0aGUgbGVuZ3RoIG9mIGFueSBkYXRhIGxlZnQgaW4gdGhlIGVuZCBvZiB0aGUgYnVmZmVyCisgICAgICAgICAgIGV2ZW4gaWYgdGhlcmUncyBubyBtb3JlIGNodW5rcyB0byByZWFkICovCisKKyAgICAgICAgY2gtPmRhdGFsZWZ0ID0gbGVuZ3RoOworICAgICAgICByZXR1cm4gQ0hVTktFX1NUT1A7IC8qIHJldHVybiBzdG9wICovCisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBDSFVOS0VfQkFEX0NIVU5LOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBDSFVOS0VfU1RBVEVfRVJST1I7CisgICAgfQorICB9CisgIHJldHVybiBDSFVOS0VfT0s7Cit9CisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0hUVFAgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9odHRwX2NodW5rcy5oIGIvY3VybC03LjI1LjAvbGliL2h0dHBfY2h1bmtzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1NmUxOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9odHRwX2NodW5rcy5oCkBAIC0wLDAgKzEsMTA3IEBACisjaWZuZGVmIF9fSFRUUF9DSFVOS1NfSAorI2RlZmluZSBfX0hUVFBfQ0hVTktTX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDcsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFRoZSBsb25nZXN0IHBvc3NpYmxlIGhleGFkZWNpbWFsIG51bWJlciB3ZSBzdXBwb3J0IGluIGEgY2h1bmtlZCB0cmFuc2Zlci4KKyAqIFdlaXJkIGVub3VnaCwgUkZDMjYxNiBkb2Vzbid0IHNldCBhIG1heGltdW0gc2l6ZSEgU2luY2Ugd2UgdXNlIHN0cnRvdWwoKQorICogdG8gY29udmVydCBpdCwgd2UgIm9ubHkiIHN1cHBvcnQgMl4zMiBieXRlcyBjaHVuayBkYXRhLgorICovCisjZGVmaW5lIE1BWE5VTV9TSVpFIDE2CisKK3R5cGVkZWYgZW51bSB7CisgIENIVU5LX0ZJUlNULCAvKiBuZXZlciB1c2UgKi8KKworICAvKiBJbiB0aGlzIHdlIGF3YWl0IGFuZCBidWZmZXIgYWxsIGhleGFkZWNpbWFsIGRpZ2l0cyB1bnRpbCB3ZSBnZXQgb25lCisgICAgIHRoYXQgaXNuJ3QgYSBoZXhhZGVjaW1hbCBkaWdpdC4gV2hlbiBkb25lLCB3ZSBnbyBQT1NUSEVYICovCisgIENIVU5LX0hFWCwKKworICAvKiBXZSBoYXZlIHJlY2VpdmVkIHRoZSBoZXhhZGVjaW1hbCBkaWdpdCBhbmQgd2UgZWF0IGFsbCBjaGFyYWN0ZXJzIHVudGlsCisgICAgIHdlIGdldCBhIENSTEYgcGFpci4gV2hlbiB3ZSBzZWUgYSBDUiB3ZSBnbyB0byB0aGUgQ1Igc3RhdGUuICovCisgIENIVU5LX1BPU1RIRVgsCisKKyAgLyogQSBzaW5nbGUgQ1IgaGFzIGJlZW4gZm91bmQgYW5kIHdlIHNob3VsZCBnZXQgYSBMRiByaWdodCBhd2F5IGluIHRoaXMKKyAgICAgc3RhdGUgb3Igd2UgZ28gYmFjayB0byBQT1NUSEVYLiBXaGVuIExGIGlzIHJlY2VpdmVkLCB3ZSBnbyB0byBEQVRBLgorICAgICBJZiB0aGUgc2l6ZSBnaXZlbiB3YXMgemVybywgd2Ugc2V0IHN0YXRlIHRvIFNUT1AgYW5kIHJldHVybi4gKi8KKyAgQ0hVTktfQ1IsCisKKyAgLyogV2UgZWF0IHRoZSBhbW91bnQgb2YgZGF0YSBzcGVjaWZpZWQuIFdoZW4gZG9uZSwgd2UgbW92ZSBvbiB0byB0aGUKKyAgICAgUE9TVF9DUiBzdGF0ZS4gKi8KKyAgQ0hVTktfREFUQSwKKworICAvKiBQT1NUQ1Igc2hvdWxkIGdldCBhIENSIGFuZCBub3RoaW5nIGVsc2UsIHRoZW4gbW92ZSB0byBQT1NUTEYgKi8KKyAgQ0hVTktfUE9TVENSLAorCisgIC8qIFBPU1RMRiBzaG91bGQgZ2V0IGEgTEYgYW5kIG5vdGhpbmcgZWxzZSwgdGhlbiBtb3ZlIGJhY2sgdG8gSEVYIGFzIHRoZQorICAgICBDUkxGIGNvbWJpbmF0aW9uIG1hcmtzIHRoZSBlbmQgb2YgYSBjaHVuayAqLworICBDSFVOS19QT1NUTEYsCisKKyAgLyogRWFjaCBDaHVuayBib2R5IHNob3VsZCBlbmQgd2l0aCBhIENSTEYuICBSZWFkIGEgQ1IgYW5kIG5vdGhpbmcgZWxzZSwKKyAgICAgdGhlbiBtb3ZlIHRvIENIVU5LX1NUT1AgKi8KKyAgQ0hVTktfU1RPUENSLAorCisgIC8qIFRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gcmVhbGx5IG1hcmsgdGhhdCB3ZSdyZSBvdXQgb2YgdGhlIGdhbWUuCisgICAgIE5PVEU6IHRoYXQgdGhlcmUncyBhICdkYXRhbGVmdCcgZmllbGQgaW4gdGhlIHN0cnVjdCB0aGF0IHdpbGwgdGVsbCBob3cKKyAgICAgbWFueSBieXRlcyB0aGF0IHdlcmUgbm90IHBhc3NlZCB0byB0aGUgY2xpZW50IGluIHRoZSBlbmQgb2YgdGhlIGxhc3QKKyAgICAgYnVmZmVyISAqLworICBDSFVOS19TVE9QLAorCisgIC8qIEF0IHRoaXMgcG9pbnQgb3B0aW9uYWwgdHJhaWxlciBoZWFkZXJzIGNhbiBiZSBmb3VuZCwgdW5sZXNzIHRoZSBuZXh0IGxpbmUKKyAgICAgaXMgQ1JMRiAqLworICBDSFVOS19UUkFJTEVSLAorCisgIC8qIEEgdHJhaWxlciBDUiBoYXMgYmVlbiBmb3VuZCAtIG5leHQgc3RhdGUgaXMgQ0hVTktfVFJBSUxFUl9QT1NUQ1IuCisgICAgIE5leHQgY2hhciBtdXN0IGJlIGEgTEYgKi8KKyAgQ0hVTktfVFJBSUxFUl9DUiwKKworICAvKiBBIHRyYWlsZXIgTEYgbXVzdCBiZSBmb3VuZCBub3csIG90aGVyd2lzZSBDSFVOS0VfQkFEX0NIVU5LIHdpbGwgYmUKKyAgICAgc2lnbmFsbGVkIElmIHRoaXMgaXMgYW4gZW1wdHkgdHJhaWxlciBDSFVOS0VfU1RPUCB3aWxsIGJlIHNpZ25hbGxlZC4KKyAgICAgT3RoZXJ3aXNlIHRoZSB0cmFpbGVyIHdpbGwgYmUgYnJvYWRjYXN0ZWQgdmlhIEN1cmxfY2xpZW50X3dyaXRlKCkgYW5kIHRoZQorICAgICBuZXh0IHN0YXRlIHdpbGwgYmUgQ0hVTktfVFJBSUxFUiAqLworICBDSFVOS19UUkFJTEVSX1BPU1RDUiwKKworICBDSFVOS19MQVNUIC8qIG5ldmVyIHVzZSAqLworCit9IENodW5reVN0YXRlOworCit0eXBlZGVmIGVudW0geworICBDSFVOS0VfU1RPUCA9IC0xLAorICBDSFVOS0VfT0sgPSAwLAorICBDSFVOS0VfVE9PX0xPTkdfSEVYID0gMSwKKyAgQ0hVTktFX0lMTEVHQUxfSEVYLAorICBDSFVOS0VfQkFEX0NIVU5LLAorICBDSFVOS0VfV1JJVEVfRVJST1IsCisgIENIVU5LRV9TVEFURV9FUlJPUiwKKyAgQ0hVTktFX0JBRF9FTkNPRElORywKKyAgQ0hVTktFX09VVF9PRl9NRU1PUlksCisgIENIVU5LRV9MQVNUCit9IENIVU5LY29kZTsKKworc3RydWN0IEN1cmxfY2h1bmtlciB7CisgIGNoYXIgaGV4YnVmZmVyWyBNQVhOVU1fU0laRSArIDFdOworICBpbnQgaGV4aW5kZXg7CisgIENodW5reVN0YXRlIHN0YXRlOworICBzaXplX3QgZGF0YXNpemU7CisgIHNpemVfdCBkYXRhbGVmdDsgLyogdW50b3VjaGVkIGRhdGEgYW1vdW50IGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgYnVmZmVyICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9odHRwX2RpZ2VzdC5jIGIvY3VybC03LjI1LjAvbGliL2h0dHBfZGlnZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkZjVmYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9odHRwX2RpZ2VzdC5jCkBAIC0wLDAgKzEsNTgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIKQorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAiY3VybF9iYXNlNjQuaCIKKyNpbmNsdWRlICJjdXJsX21kNS5oIgorI2luY2x1ZGUgImh0dHBfZGlnZXN0LmgiCisjaW5jbHVkZSAic3RydG9rLmgiCisjaW5jbHVkZSAidXJsLmgiIC8qIGZvciBDdXJsX3NhZmVmcmVlKCkgKi8KKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgIm5vbi1hc2NpaS5oIiAvKiBpbmNsdWRlZCBmb3IgQ3VybF9jb252ZXJ0Xy4uLiBwcm90b3R5cGVzICovCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBNQVhfVkFMVUVfTEVOR1RIIDI1NgorI2RlZmluZSBNQVhfQ09OVEVOVF9MRU5HVEggMTAyNAorCitzdGF0aWMgdm9pZCBkaWdlc3RfY2xlYW51cF9vbmUoc3RydWN0IGRpZ2VzdGRhdGEgKmRpZyk7CisKKy8qCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCB0aGVuIHRoZSBidWZmZXJzIGFyZSBmaWxsZWQgaW4gZmluZS4KKyAqCisgKiBOb24temVybyBtZWFucyBmYWlsdXJlIHRvIHBhcnNlLgorICovCitzdGF0aWMgaW50IGdldF9wYWlyKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqdmFsdWUsIGNoYXIgKmNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiplbmRwdHIpCit7CisgIGludCBjOworICBib29sIHN0YXJ0c193aXRoX3F1b3RlID0gRkFMU0U7CisgIGJvb2wgZXNjYXBlID0gRkFMU0U7CisKKyAgZm9yKGM9TUFYX1ZBTFVFX0xFTkdUSC0xOyAoKnN0ciAmJiAoKnN0ciAhPSAnPScpICYmIGMtLSk7ICkKKyAgICAqdmFsdWUrKyA9ICpzdHIrKzsKKyAgKnZhbHVlPTA7CisKKyAgaWYoJz0nICE9ICpzdHIrKykKKyAgICAvKiBlZWssIG5vIG1hdGNoICovCisgICAgcmV0dXJuIDE7CisKKyAgaWYoJ1wiJyA9PSAqc3RyKSB7CisgICAgLyogdGhpcyBzdGFydHMgd2l0aCBhIHF1b3RlIHNvIGl0IG11c3QgZW5kIHdpdGggb25lIGFzIHdlbGwhICovCisgICAgc3RyKys7CisgICAgc3RhcnRzX3dpdGhfcXVvdGUgPSBUUlVFOworICB9CisKKyAgZm9yKGM9TUFYX0NPTlRFTlRfTEVOR1RILTE7ICpzdHIgJiYgYy0tOyBzdHIrKykgeworICAgIHN3aXRjaCgqc3RyKSB7CisgICAgY2FzZSAnXFwnOgorICAgICAgaWYoIWVzY2FwZSkgeworICAgICAgICAvKiBwb3NzaWJseSB0aGUgc3RhcnQgb2YgYW4gZXNjYXBlZCBxdW90ZSAqLworICAgICAgICBlc2NhcGUgPSBUUlVFOworICAgICAgICAqY29udGVudCsrID0gJ1xcJzsgLyogZXZlbiB0aG91Z2ggdGhpcyBpcyBhbiBlc2NhcGUgY2hhcmFjdGVyLCB3ZSBzdGlsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUgaXQgYXMtaXMgaW4gdGhlIHRhcmdldCBidWZmZXIgKi8KKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICcsJzoKKyAgICAgIGlmKCFzdGFydHNfd2l0aF9xdW90ZSkgeworICAgICAgICAvKiB0aGlzIHNpZ25hbHMgdGhlIGVuZCBvZiB0aGUgY29udGVudCBpZiB3ZSBkaWRuJ3QgZ2V0IGEgc3RhcnRpbmcKKyAgICAgICAgICAgcXVvdGUgYW5kIHRoZW4gd2UgZG8gInNsb3BweSIgcGFyc2luZyAqLworICAgICAgICBjPTA7IC8qIHRoZSBlbmQgKi8KKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdccic6CisgICAgY2FzZSAnXG4nOgorICAgICAgLyogZW5kIG9mIHN0cmluZyAqLworICAgICAgYz0wOworICAgICAgY29udGludWU7CisgICAgY2FzZSAnXCInOgorICAgICAgaWYoIWVzY2FwZSAmJiBzdGFydHNfd2l0aF9xdW90ZSkgeworICAgICAgICAvKiBlbmQgb2Ygc3RyaW5nICovCisgICAgICAgIGM9MDsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgZXNjYXBlID0gRkFMU0U7CisgICAgKmNvbnRlbnQrKyA9ICpzdHI7CisgIH0KKyAgKmNvbnRlbnQ9MDsKKworICAqZW5kcHRyID0gc3RyOworCisgIHJldHVybiAwOyAvKiBhbGwgaXMgZmluZSEgKi8KK30KKworLyogVGVzdCBleGFtcGxlIGhlYWRlcnM6CisKK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0idGVzdHJlYWxtIiwgbm9uY2U9IjEwNTM2MDQ1OTgiCitQcm94eS1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0idGVzdHJlYWxtIiwgbm9uY2U9IjEwNTM2MDQ1OTgiCisKKyovCisKK0NVUkxkaWdlc3QgQ3VybF9pbnB1dF9kaWdlc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpoZWFkZXIpIC8qIHJlc3Qgb2YgdGhlICotYXV0aGVudGljYXRlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciAqLworeworICBjaGFyICp0b2tlbiA9IE5VTEw7CisgIGNoYXIgKnRtcCA9IE5VTEw7CisgIGJvb2wgZm91bmRBdXRoID0gRkFMU0U7CisgIGJvb2wgZm91bmRBdXRoSW50ID0gRkFMU0U7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisgIGJvb2wgYmVmb3JlID0gRkFMU0U7IC8qIGdvdCBhIG5vbmNlIGJlZm9yZSAqLworICBzdHJ1Y3QgZGlnZXN0ZGF0YSAqZDsKKworICBpZihwcm94eSkgeworICAgIGQgPSAmZGF0YS0+c3RhdGUucHJveHlkaWdlc3Q7CisgIH0KKyAgZWxzZSB7CisgICAgZCA9ICZkYXRhLT5zdGF0ZS5kaWdlc3Q7CisgIH0KKworICAvKiBza2lwIGluaXRpYWwgd2hpdGVzcGFjZXMgKi8KKyAgd2hpbGUoKmhlYWRlciAmJiBJU1NQQUNFKCpoZWFkZXIpKQorICAgIGhlYWRlcisrOworCisgIGlmKGNoZWNrcHJlZml4KCJEaWdlc3QiLCBoZWFkZXIpKSB7CisgICAgaGVhZGVyICs9IHN0cmxlbigiRGlnZXN0Iik7CisKKyAgICAvKiBJZiB3ZSBhbHJlYWR5IGhhdmUgcmVjZWl2ZWQgYSBub25jZSwga2VlcCB0aGF0IGluIG1pbmQgKi8KKyAgICBpZihkLT5ub25jZSkKKyAgICAgIGJlZm9yZSA9IFRSVUU7CisKKyAgICAvKiBjbGVhciBvZmYgYW55IGZvcm1lciBsZWZ0b3ZlcnMgYW5kIGluaXQgdG8gZGVmYXVsdHMgKi8KKyAgICBkaWdlc3RfY2xlYW51cF9vbmUoZCk7CisKKyAgICBmb3IoOzspIHsKKyAgICAgIGNoYXIgdmFsdWVbTUFYX1ZBTFVFX0xFTkdUSF07CisgICAgICBjaGFyIGNvbnRlbnRbTUFYX0NPTlRFTlRfTEVOR1RIXTsKKworICAgICAgd2hpbGUoKmhlYWRlciAmJiBJU1NQQUNFKCpoZWFkZXIpKQorICAgICAgICBoZWFkZXIrKzsKKworICAgICAgLyogZXh0cmFjdCBhIHZhbHVlPWNvbnRlbnQgcGFpciAqLworICAgICAgaWYoIWdldF9wYWlyKGhlYWRlciwgdmFsdWUsIGNvbnRlbnQsICZoZWFkZXIpKSB7CisgICAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKHZhbHVlLCAibm9uY2UiKSkgeworICAgICAgICAgIGQtPm5vbmNlID0gc3RyZHVwKGNvbnRlbnQpOworICAgICAgICAgIGlmKCFkLT5ub25jZSkKKyAgICAgICAgICAgIHJldHVybiBDVVJMRElHRVNUX05PTUVNOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoQ3VybF9yYXdfZXF1YWwodmFsdWUsICJzdGFsZSIpKSB7CisgICAgICAgICAgaWYoQ3VybF9yYXdfZXF1YWwoY29udGVudCwgInRydWUiKSkgeworICAgICAgICAgICAgZC0+c3RhbGUgPSBUUlVFOworICAgICAgICAgICAgZC0+bmMgPSAxOyAvKiB3ZSBtYWtlIGEgbmV3IG5vbmNlIG5vdyAqLworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKHZhbHVlLCAicmVhbG0iKSkgeworICAgICAgICAgIGQtPnJlYWxtID0gc3RyZHVwKGNvbnRlbnQpOworICAgICAgICAgIGlmKCFkLT5yZWFsbSkKKyAgICAgICAgICAgIHJldHVybiBDVVJMRElHRVNUX05PTUVNOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoQ3VybF9yYXdfZXF1YWwodmFsdWUsICJvcGFxdWUiKSkgeworICAgICAgICAgIGQtPm9wYXF1ZSA9IHN0cmR1cChjb250ZW50KTsKKyAgICAgICAgICBpZighZC0+b3BhcXVlKQorICAgICAgICAgICAgcmV0dXJuIENVUkxESUdFU1RfTk9NRU07CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbCh2YWx1ZSwgInFvcCIpKSB7CisgICAgICAgICAgY2hhciAqdG9rX2J1ZjsKKyAgICAgICAgICAvKiB0b2tlbml6ZSB0aGUgbGlzdCBhbmQgY2hvb3NlIGF1dGggaWYgcG9zc2libGUsIHVzZSBhIHRlbXBvcmFyeQorICAgICAgICAgICAgIGNsb25lIG9mIHRoZSBidWZmZXIgc2luY2Ugc3RydG9rX3IoKSBydWlucyBpdCAqLworICAgICAgICAgIHRtcCA9IHN0cmR1cChjb250ZW50KTsKKyAgICAgICAgICBpZighdG1wKQorICAgICAgICAgICAgcmV0dXJuIENVUkxESUdFU1RfTk9NRU07CisgICAgICAgICAgdG9rZW4gPSBzdHJ0b2tfcih0bXAsICIsIiwgJnRva19idWYpOworICAgICAgICAgIHdoaWxlKHRva2VuICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKHRva2VuLCAiYXV0aCIpKSB7CisgICAgICAgICAgICAgIGZvdW5kQXV0aCA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKHRva2VuLCAiYXV0aC1pbnQiKSkgeworICAgICAgICAgICAgICBmb3VuZEF1dGhJbnQgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG9rZW4gPSBzdHJ0b2tfcihOVUxMLCAiLCIsICZ0b2tfYnVmKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZnJlZSh0bXApOworICAgICAgICAgIC8qc2VsZWN0IG9ubHkgYXV0aCBvIGF1dGgtaW50LiBPdGhlcndpc2UsIGlnbm9yZSovCisgICAgICAgICAgaWYoZm91bmRBdXRoKSB7CisgICAgICAgICAgICBkLT5xb3AgPSBzdHJkdXAoImF1dGgiKTsKKyAgICAgICAgICAgIGlmKCFkLT5xb3ApCisgICAgICAgICAgICAgIHJldHVybiBDVVJMRElHRVNUX05PTUVNOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGZvdW5kQXV0aEludCkgeworICAgICAgICAgICAgZC0+cW9wID0gc3RyZHVwKCJhdXRoLWludCIpOworICAgICAgICAgICAgaWYoIWQtPnFvcCkKKyAgICAgICAgICAgICAgcmV0dXJuIENVUkxESUdFU1RfTk9NRU07CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoQ3VybF9yYXdfZXF1YWwodmFsdWUsICJhbGdvcml0aG0iKSkgeworICAgICAgICAgIGQtPmFsZ29yaXRobSA9IHN0cmR1cChjb250ZW50KTsKKyAgICAgICAgICBpZighZC0+YWxnb3JpdGhtKQorICAgICAgICAgICAgcmV0dXJuIENVUkxESUdFU1RfTk9NRU07CisgICAgICAgICAgaWYoQ3VybF9yYXdfZXF1YWwoY29udGVudCwgIk1ENS1zZXNzIikpCisgICAgICAgICAgICBkLT5hbGdvID0gQ1VSTERJR0VTVEFMR09fTUQ1U0VTUzsKKyAgICAgICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKGNvbnRlbnQsICJNRDUiKSkKKyAgICAgICAgICAgIGQtPmFsZ28gPSBDVVJMRElHRVNUQUxHT19NRDU7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIENVUkxESUdFU1RfQkFEQUxHTzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiB1bmtub3duIHNwZWNpZmllciwgaWdub3JlIGl0ISAqLworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGJyZWFrOyAvKiB3ZSdyZSBkb25lIGhlcmUgKi8KKworICAgICAgLyogcGFzcyBhbGwgYWRkaXRpb25hbCBzcGFjZXMgaGVyZSAqLworICAgICAgd2hpbGUoKmhlYWRlciAmJiBJU1NQQUNFKCpoZWFkZXIpKQorICAgICAgICBoZWFkZXIrKzsKKyAgICAgIGlmKCcsJyA9PSAqaGVhZGVyKQorICAgICAgICAvKiBhbGxvdyB0aGUgbGlzdCB0byBiZSBjb21tYS1zZXBhcmF0ZWQgKi8KKyAgICAgICAgaGVhZGVyKys7CisgICAgfQorICAgIC8qIFdlIGhhZCBhIG5vbmNlIHNpbmNlIGJlZm9yZSwgYW5kIHdlIGdvdCBhbm90aGVyIG9uZSBub3cgd2l0aG91dAorICAgICAgICdzdGFsZT10cnVlJy4gVGhpcyBtZWFucyB3ZSBwcm92aWRlZCBiYWQgY3JlZGVudGlhbHMgaW4gdGhlIHByZXZpb3VzCisgICAgICAgcmVxdWVzdCAqLworICAgIGlmKGJlZm9yZSAmJiAhZC0+c3RhbGUpCisgICAgICByZXR1cm4gQ1VSTERJR0VTVF9CQUQ7CisKKyAgICAvKiBXZSBnb3QgdGhpcyBoZWFkZXIgd2l0aG91dCBhIG5vbmNlLCB0aGF0J3MgYSBiYWQgRGlnZXN0IGxpbmUhICovCisgICAgaWYoIWQtPm5vbmNlKQorICAgICAgcmV0dXJuIENVUkxESUdFU1RfQkFEOworICB9CisgIGVsc2UKKyAgICAvKiBlbHNlIG5vdCBhIGRpZ2VzdCwgZ2V0IG91dCAqLworICAgIHJldHVybiBDVVJMRElHRVNUX05PTkU7CisKKyAgcmV0dXJuIENVUkxESUdFU1RfRklORTsKK30KKworLyogY29udmVydCBtZDUgY2h1bmsgdG8gUkZDMjYxNyAoc2VjdGlvbiAzLjEuMykgLXN1aXRhYmxlIGFzY2lpIHN0cmluZyovCitzdGF0aWMgdm9pZCBtZDVfdG9fYXNjaWkodW5zaWduZWQgY2hhciAqc291cmNlLCAvKiAxNiBieXRlcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QpIC8qIDMzIGJ5dGVzICovCit7CisgIGludCBpOworICBmb3IoaT0wOyBpPDE2OyBpKyspCisgICAgc25wcmludGYoKGNoYXIgKikmZGVzdFtpKjJdLCAzLCAiJTAyeCIsIHNvdXJjZVtpXSk7Cit9CisKK0NVUkxjb2RlIEN1cmxfb3V0cHV0X2RpZ2VzdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcm94eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVyaXBhdGgpCit7CisgIC8qIFdlIGhhdmUgYSBEaWdlc3Qgc2V0dXAgZm9yIHRoaXMsIHVzZSBpdCEgIE5vdywgdG8gZ2V0IGFsbCB0aGUgZGV0YWlscyBmb3IKKyAgICAgdGhpcyBzb3J0ZWQgb3V0LCBJIG11c3QgdXJnZSB5b3UgZGVhciBmcmllbmQgdG8gcmVhZCB1cCBvbiB0aGUgUkZDMjYxNworICAgICBzZWN0aW9uIDMuMi4yLCAqLworICB1bnNpZ25lZCBjaGFyIG1kNWJ1ZlsxNl07IC8qIDE2IGJ5dGVzLzEyOCBiaXRzICovCisgIHVuc2lnbmVkIGNoYXIgcmVxdWVzdF9kaWdlc3RbMzNdOworICB1bnNpZ25lZCBjaGFyICptZDV0aGlzOworICB1bnNpZ25lZCBjaGFyICpoYTE7CisgIHVuc2lnbmVkIGNoYXIgaGEyWzMzXTsvKiAzMiBkaWdpdHMgYW5kIDEgemVybyBieXRlICovCisgIGNoYXIgY25vbmNlYnVmWzddOworICBjaGFyICpjbm9uY2UgPSBOVUxMOworICBzaXplX3QgY25vbmNlX3N6ID0gMDsKKyAgY2hhciAqdG1wID0gTlVMTDsKKyAgc3RydWN0IHRpbWV2YWwgbm93OworCisgIGNoYXIgKiphbGxvY3VzZXJwd2Q7CisgIGNvbnN0IGNoYXIgKnVzZXJwOworICBjb25zdCBjaGFyICpwYXNzd2RwOworICBzdHJ1Y3QgYXV0aCAqYXV0aHA7CisKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgZGlnZXN0ZGF0YSAqZDsKKyAgQ1VSTGNvZGUgcmM7CisvKiBUaGUgQ1VSTF9PVVRQVVRfRElHRVNUX0NPTlYgbWFjcm8gYmVsb3cgaXMgZm9yIG5vbi1BU0NJSSBtYWNoaW5lcy4KKyAgIEl0IGNvbnZlcnRzIGRpZ2VzdCB0ZXh0IHRvIEFTQ0lJIHNvIHRoZSBNRDUgd2lsbCBiZSBjb3JyZWN0IGZvcgorICAgd2hhdCB1bHRpbWF0ZWx5IGdvZXMgb3ZlciB0aGUgbmV0d29yay4KKyovCisjZGVmaW5lIENVUkxfT1VUUFVUX0RJR0VTVF9DT05WKGEsIGIpIFwKKyAgcmMgPSBDdXJsX2NvbnZlcnRfdG9fbmV0d29yayhhLCAoY2hhciAqKWIsIHN0cmxlbigoY29uc3QgY2hhciopYikpOyBcCisgIGlmKHJjICE9IENVUkxFX09LKSB7IFwKKyAgICBmcmVlKGIpOyBcCisgICAgcmV0dXJuIHJjOyBcCisgIH0KKworICBpZihwcm94eSkgeworICAgIGQgPSAmZGF0YS0+c3RhdGUucHJveHlkaWdlc3Q7CisgICAgYWxsb2N1c2VycHdkID0gJmNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZDsKKyAgICB1c2VycCA9IGNvbm4tPnByb3h5dXNlcjsKKyAgICBwYXNzd2RwID0gY29ubi0+cHJveHlwYXNzd2Q7CisgICAgYXV0aHAgPSAmZGF0YS0+c3RhdGUuYXV0aHByb3h5OworICB9CisgIGVsc2UgeworICAgIGQgPSAmZGF0YS0+c3RhdGUuZGlnZXN0OworICAgIGFsbG9jdXNlcnB3ZCA9ICZjb25uLT5hbGxvY3B0ci51c2VycHdkOworICAgIHVzZXJwID0gY29ubi0+dXNlcjsKKyAgICBwYXNzd2RwID0gY29ubi0+cGFzc3dkOworICAgIGF1dGhwID0gJmRhdGEtPnN0YXRlLmF1dGhob3N0OworICB9CisKKyAgaWYoKmFsbG9jdXNlcnB3ZCkgeworICAgIEN1cmxfc2FmZWZyZWUoKmFsbG9jdXNlcnB3ZCk7CisgICAgKmFsbG9jdXNlcnB3ZCA9IE5VTEw7CisgIH0KKworICAvKiBub3Qgc2V0IG1lYW5zIGVtcHR5ICovCisgIGlmKCF1c2VycCkKKyAgICB1c2VycD0iIjsKKworICBpZighcGFzc3dkcCkKKyAgICBwYXNzd2RwPSIiOworCisgIGlmKCFkLT5ub25jZSkgeworICAgIGF1dGhwLT5kb25lID0gRkFMU0U7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisgIGF1dGhwLT5kb25lID0gVFJVRTsKKworICBpZighZC0+bmMpCisgICAgZC0+bmMgPSAxOworCisgIGlmKCFkLT5jbm9uY2UpIHsKKyAgICAvKiBHZW5lcmF0ZSBhIGNub25jZSAqLworICAgIG5vdyA9IEN1cmxfdHZub3coKTsKKyAgICBzbnByaW50Zihjbm9uY2VidWYsIHNpemVvZihjbm9uY2VidWYpLCAiJTA2bGQiLCAobG9uZylub3cudHZfc2VjKTsKKworICAgIHJjID0gQ3VybF9iYXNlNjRfZW5jb2RlKGRhdGEsIGNub25jZWJ1Ziwgc3RybGVuKGNub25jZWJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNub25jZSwgJmNub25jZV9zeik7CisgICAgaWYocmMpCisgICAgICByZXR1cm4gcmM7CisgICAgZC0+Y25vbmNlID0gY25vbmNlOworICB9CisKKyAgLyoKKyAgICBpZiB0aGUgYWxnb3JpdGhtIGlzICJNRDUiIG9yIHVuc3BlY2lmaWVkICh3aGljaCB0aGVuIGRlZmF1bHRzIHRvIE1ENSk6CisKKyAgICBBMSA9IHVucSh1c2VybmFtZS12YWx1ZSkgIjoiIHVucShyZWFsbS12YWx1ZSkgIjoiIHBhc3N3ZAorCisgICAgaWYgdGhlIGFsZ29yaXRobSBpcyAiTUQ1LXNlc3MiIHRoZW46CisKKyAgICBBMSA9IEgoIHVucSh1c2VybmFtZS12YWx1ZSkgIjoiIHVucShyZWFsbS12YWx1ZSkgIjoiIHBhc3N3ZCApCisgICAgICAgICAiOiIgdW5xKG5vbmNlLXZhbHVlKSAiOiIgdW5xKGNub25jZS12YWx1ZSkKKyAgKi8KKworICBtZDV0aGlzID0gKHVuc2lnbmVkIGNoYXIgKikKKyAgICBhcHJpbnRmKCIlczolczolcyIsIHVzZXJwLCBkLT5yZWFsbSwgcGFzc3dkcCk7CisgIGlmKCFtZDV0aGlzKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIENVUkxfT1VUUFVUX0RJR0VTVF9DT05WKGRhdGEsIG1kNXRoaXMpOyAvKiBjb252ZXJ0IG9uIG5vbi1BU0NJSSBtYWNoaW5lcyAqLworICBDdXJsX21kNWl0KG1kNWJ1ZiwgbWQ1dGhpcyk7CisgIGZyZWUobWQ1dGhpcyk7IC8qIGZyZWUgdGhpcyBhZ2FpbiAqLworCisgIGhhMSA9IG1hbGxvYygzMyk7IC8qIDMyIGRpZ2l0cyBhbmQgMSB6ZXJvIGJ5dGUgKi8KKyAgaWYoIWhhMSkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICBtZDVfdG9fYXNjaWkobWQ1YnVmLCBoYTEpOworCisgIGlmKGQtPmFsZ28gPT0gQ1VSTERJR0VTVEFMR09fTUQ1U0VTUykgeworICAgIC8qIG5vbmNlIGFuZCBjbm9uY2UgYXJlIE9VVFNJREUgdGhlIGhhc2ggKi8KKyAgICB0bXAgPSBhcHJpbnRmKCIlczolczolcyIsIGhhMSwgZC0+bm9uY2UsIGQtPmNub25jZSk7CisgICAgaWYoIXRtcCkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIENVUkxfT1VUUFVUX0RJR0VTVF9DT05WKGRhdGEsIHRtcCk7IC8qIGNvbnZlcnQgb24gbm9uLUFTQ0lJIG1hY2hpbmVzICovCisgICAgQ3VybF9tZDVpdChtZDVidWYsICh1bnNpZ25lZCBjaGFyICopdG1wKTsKKyAgICBmcmVlKHRtcCk7IC8qIGZyZWUgdGhpcyBhZ2FpbiAqLworICAgIG1kNV90b19hc2NpaShtZDVidWYsIGhhMSk7CisgIH0KKworICAvKgorICAgIElmIHRoZSAicW9wIiBkaXJlY3RpdmUncyB2YWx1ZSBpcyAiYXV0aCIgb3IgaXMgdW5zcGVjaWZpZWQsIHRoZW4gQTIgaXM6CisKKyAgICAgIEEyICAgICAgID0gTWV0aG9kICI6IiBkaWdlc3QtdXJpLXZhbHVlCisKKyAgICAgICAgICBJZiB0aGUgInFvcCIgdmFsdWUgaXMgImF1dGgtaW50IiwgdGhlbiBBMiBpczoKKworICAgICAgQTIgICAgICAgPSBNZXRob2QgIjoiIGRpZ2VzdC11cmktdmFsdWUgIjoiIEgoZW50aXR5LWJvZHkpCisKKyAgICAoVGhlICJNZXRob2QiIHZhbHVlIGlzIHRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIGFzIHNwZWNpZmllZCBpbiBzZWN0aW9uCisgICAgNS4xLjEgb2YgUkZDIDI2MTYpCisgICovCisKKyAgLyogU28gSUUgYnJvd3NlcnMgPCB2NyBjdXQgb2ZmIHRoZSBVUkkgcGFydCBhdCB0aGUgcXVlcnkgcGFydCB3aGVuIHRoZXkKKyAgICAgZXZhbHVhdGUgdGhlIE1ENSBhbmQgc29tZSAoSUlTPykgc2VydmVycyB3b3JrIHdpdGggdGhlbSBzbyB3ZSBtYXkgbmVlZCB0bworICAgICBkbyB0aGUgRGlnZXN0IElFLXN0eWxlLiBOb3RlIHRoYXQgdGhlIGRpZmZlcmVudCB3YXlzIGNhdXNlIGRpZmZlcmVudCBNRDUKKyAgICAgc3VtcyB0byBnZXQgc2VudC4KKworICAgICBBcGFjaGUgc2VydmVycyBjYW4gYmUgc2V0IHRvIGRvIHRoZSBEaWdlc3QgSUUtc3R5bGUgYXV0b21hdGljYWxseSB1c2luZworICAgICB0aGUgQnJvd3Nlck1hdGNoIGZlYXR1cmU6CisgICAgIGh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvMi4yL21vZC9tb2RfYXV0aF9kaWdlc3QuaHRtbCNtc2llCisKKyAgICAgRnVydGhlciBkZXRhaWxzIG9uIERpZ2VzdCBpbXBsZW1lbnRhdGlvbiBkaWZmZXJlbmNlczoKKyAgICAgaHR0cDovL3d3dy5mbmd0cHMuY29tLzIwMDYvMDkvaHR0cC1hdXRoZW50aWNhdGlvbgorICAqLworICBpZihhdXRocC0+aWVzdHlsZSAmJiAoKHRtcCA9IHN0cmNocigoY2hhciAqKXVyaXBhdGgsICc/JykpICE9IE5VTEwpKSB7CisgICAgbWQ1dGhpcyA9ICh1bnNpZ25lZCBjaGFyICopYXByaW50ZigiJXM6JS4qcyIsIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF9zenRvc2kodG1wIC0gKGNoYXIgKil1cmlwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaXBhdGgpOworICB9CisgIGVsc2UKKyAgICBtZDV0aGlzID0gKHVuc2lnbmVkIGNoYXIgKilhcHJpbnRmKCIlczolcyIsIHJlcXVlc3QsIHVyaXBhdGgpOworCisgIGlmKCFtZDV0aGlzKSB7CisgICAgZnJlZShoYTEpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgaWYoZC0+cW9wICYmIEN1cmxfcmF3X2VxdWFsKGQtPnFvcCwgImF1dGgtaW50IikpIHsKKyAgICAvKiBXZSBkb24ndCBzdXBwb3J0IGF1dGgtaW50IGF0IHRoZSBtb21lbnQuIEkgY2FuJ3Qgc2VlIGEgZWFzeSB3YXkgdG8gZ2V0CisgICAgICAgZW50aXR5LWJvZHkgaGVyZSAqLworICAgIC8qIFRPRE86IEFwcGVuZCBIKGVudGl0eS1ib2R5KSovCisgIH0KKyAgQ1VSTF9PVVRQVVRfRElHRVNUX0NPTlYoZGF0YSwgbWQ1dGhpcyk7IC8qIGNvbnZlcnQgb24gbm9uLUFTQ0lJIG1hY2hpbmVzICovCisgIEN1cmxfbWQ1aXQobWQ1YnVmLCBtZDV0aGlzKTsKKyAgZnJlZShtZDV0aGlzKTsgLyogZnJlZSB0aGlzIGFnYWluICovCisgIG1kNV90b19hc2NpaShtZDVidWYsIGhhMik7CisKKyAgaWYoZC0+cW9wKSB7CisgICAgbWQ1dGhpcyA9ICh1bnNpZ25lZCBjaGFyICopYXByaW50ZigiJXM6JXM6JTA4eDolczolczolcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5ub25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQtPm5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC0+Y25vbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC0+cW9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGEyKTsKKyAgfQorICBlbHNlIHsKKyAgICBtZDV0aGlzID0gKHVuc2lnbmVkIGNoYXIgKilhcHJpbnRmKCIlczolczolcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5ub25jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhMik7CisgIH0KKyAgZnJlZShoYTEpOworICBpZighbWQ1dGhpcykKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICBDVVJMX09VVFBVVF9ESUdFU1RfQ09OVihkYXRhLCBtZDV0aGlzKTsgLyogY29udmVydCBvbiBub24tQVNDSUkgbWFjaGluZXMgKi8KKyAgQ3VybF9tZDVpdChtZDVidWYsIG1kNXRoaXMpOworICBmcmVlKG1kNXRoaXMpOyAvKiBmcmVlIHRoaXMgYWdhaW4gKi8KKyAgbWQ1X3RvX2FzY2lpKG1kNWJ1ZiwgcmVxdWVzdF9kaWdlc3QpOworCisgIC8qIGZvciB0ZXN0IGNhc2UgNjQgKHNub29wZWQgZnJvbSBhIE1vemlsbGEgMS4zYSByZXF1ZXN0KQorCisgICAgQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJ0ZXN0dXNlciIsIHJlYWxtPSJ0ZXN0cmVhbG0iLCBcCisgICAgbm9uY2U9IjEwNTM2MDQxNDUiLCB1cmk9Ii82NCIsIHJlc3BvbnNlPSJjNTVmN2YzMGQ4M2Q3NzRhM2QyZGNhY2Y3MjVhYmFjYSIKKyAgKi8KKworICBpZihkLT5xb3ApIHsKKyAgICAqYWxsb2N1c2VycHdkID0KKyAgICAgIGFwcmludGYoICIlc0F1dGhvcml6YXRpb246IERpZ2VzdCAiCisgICAgICAgICAgICAgICAidXNlcm5hbWU9XCIlc1wiLCAiCisgICAgICAgICAgICAgICAicmVhbG09XCIlc1wiLCAiCisgICAgICAgICAgICAgICAibm9uY2U9XCIlc1wiLCAiCisgICAgICAgICAgICAgICAidXJpPVwiJXNcIiwgIgorICAgICAgICAgICAgICAgImNub25jZT1cIiVzXCIsICIKKyAgICAgICAgICAgICAgICJuYz0lMDh4LCAiCisgICAgICAgICAgICAgICAicW9wPVwiJXNcIiwgIgorICAgICAgICAgICAgICAgInJlc3BvbnNlPVwiJXNcIiIsCisgICAgICAgICAgICAgICBwcm94eT8iUHJveHktIjoiIiwKKyAgICAgICAgICAgICAgIHVzZXJwLAorICAgICAgICAgICAgICAgZC0+cmVhbG0sCisgICAgICAgICAgICAgICBkLT5ub25jZSwKKyAgICAgICAgICAgICAgIHVyaXBhdGgsIC8qIHRoaXMgaXMgdGhlIFBBVEggcGFydCBvZiB0aGUgVVJMICovCisgICAgICAgICAgICAgICBkLT5jbm9uY2UsCisgICAgICAgICAgICAgICBkLT5uYywKKyAgICAgICAgICAgICAgIGQtPnFvcCwKKyAgICAgICAgICAgICAgIHJlcXVlc3RfZGlnZXN0KTsKKworICAgIGlmKEN1cmxfcmF3X2VxdWFsKGQtPnFvcCwgImF1dGgiKSkKKyAgICAgIGQtPm5jKys7IC8qIFRoZSBuYyAoZnJvbSBSRkMpIGhhcyB0byBiZSBhIDggaGV4IGRpZ2l0IG51bWJlciAwIHBhZGRlZAorICAgICAgICAgICAgICAgICAgd2hpY2ggdGVsbHMgdG8gdGhlIHNlcnZlciBob3cgbWFueSB0aW1lcyB5b3UgYXJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgc2FtZSBub25jZSBpbiB0aGUgcW9wPWF1dGggbW9kZS4gKi8KKyAgfQorICBlbHNlIHsKKyAgICAqYWxsb2N1c2VycHdkID0KKyAgICAgIGFwcmludGYoICIlc0F1dGhvcml6YXRpb246IERpZ2VzdCAiCisgICAgICAgICAgICAgICAidXNlcm5hbWU9XCIlc1wiLCAiCisgICAgICAgICAgICAgICAicmVhbG09XCIlc1wiLCAiCisgICAgICAgICAgICAgICAibm9uY2U9XCIlc1wiLCAiCisgICAgICAgICAgICAgICAidXJpPVwiJXNcIiwgIgorICAgICAgICAgICAgICAgInJlc3BvbnNlPVwiJXNcIiIsCisgICAgICAgICAgICAgICBwcm94eT8iUHJveHktIjoiIiwKKyAgICAgICAgICAgICAgIHVzZXJwLAorICAgICAgICAgICAgICAgZC0+cmVhbG0sCisgICAgICAgICAgICAgICBkLT5ub25jZSwKKyAgICAgICAgICAgICAgIHVyaXBhdGgsIC8qIHRoaXMgaXMgdGhlIFBBVEggcGFydCBvZiB0aGUgVVJMICovCisgICAgICAgICAgICAgICByZXF1ZXN0X2RpZ2VzdCk7CisgIH0KKyAgaWYoISphbGxvY3VzZXJwd2QpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgLyogQWRkIG9wdGlvbmFsIGZpZWxkcyAqLworICBpZihkLT5vcGFxdWUpIHsKKyAgICAvKiBhcHBlbmQgb3BhcXVlICovCisgICAgdG1wID0gYXByaW50ZigiJXMsIG9wYXF1ZT1cIiVzXCIiLCAqYWxsb2N1c2VycHdkLCBkLT5vcGFxdWUpOworICAgIGlmKCF0bXApCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBmcmVlKCphbGxvY3VzZXJwd2QpOworICAgICphbGxvY3VzZXJwd2QgPSB0bXA7CisgIH0KKworICBpZihkLT5hbGdvcml0aG0pIHsKKyAgICAvKiBhcHBlbmQgYWxnb3JpdGhtICovCisgICAgdG1wID0gYXByaW50ZigiJXMsIGFsZ29yaXRobT1cIiVzXCIiLCAqYWxsb2N1c2VycHdkLCBkLT5hbGdvcml0aG0pOworICAgIGlmKCF0bXApCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBmcmVlKCphbGxvY3VzZXJwd2QpOworICAgICphbGxvY3VzZXJwd2QgPSB0bXA7CisgIH0KKworICAvKiBhcHBlbmQgQ1JMRiArIHplcm8gKDMgYnl0ZXMpIHRvIHRoZSB1c2VycHdkIGhlYWRlciAqLworICB0bXAgPSByZWFsbG9jKCphbGxvY3VzZXJwd2QsIHN0cmxlbigqYWxsb2N1c2VycHdkKSArIDMpOworICBpZighdG1wKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICBzdHJjYXQodG1wLCAiXHJcbiIpOworICAqYWxsb2N1c2VycHdkID0gdG1wOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIHZvaWQgZGlnZXN0X2NsZWFudXBfb25lKHN0cnVjdCBkaWdlc3RkYXRhICpkKQoreworICBpZihkLT5ub25jZSkKKyAgICBmcmVlKGQtPm5vbmNlKTsKKyAgZC0+bm9uY2UgPSBOVUxMOworCisgIGlmKGQtPmNub25jZSkKKyAgICBmcmVlKGQtPmNub25jZSk7CisgIGQtPmNub25jZSA9IE5VTEw7CisKKyAgaWYoZC0+cmVhbG0pCisgICAgZnJlZShkLT5yZWFsbSk7CisgIGQtPnJlYWxtID0gTlVMTDsKKworICBpZihkLT5vcGFxdWUpCisgICAgZnJlZShkLT5vcGFxdWUpOworICBkLT5vcGFxdWUgPSBOVUxMOworCisgIGlmKGQtPnFvcCkKKyAgICBmcmVlKGQtPnFvcCk7CisgIGQtPnFvcCA9IE5VTEw7CisKKyAgaWYoZC0+YWxnb3JpdGhtKQorICAgIGZyZWUoZC0+YWxnb3JpdGhtKTsKKyAgZC0+YWxnb3JpdGhtID0gTlVMTDsKKworICBkLT5uYyA9IDA7CisgIGQtPmFsZ28gPSBDVVJMRElHRVNUQUxHT19NRDU7IC8qIGRlZmF1bHQgYWxnb3JpdGhtICovCisgIGQtPnN0YWxlID0gRkFMU0U7IC8qIGRlZmF1bHQgbWVhbnMgbm9ybWFsLCBub3Qgc3RhbGUgKi8KK30KKworCit2b2lkIEN1cmxfZGlnZXN0X2NsZWFudXAoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIGRpZ2VzdF9jbGVhbnVwX29uZSgmZGF0YS0+c3RhdGUuZGlnZXN0KTsKKyAgZGlnZXN0X2NsZWFudXBfb25lKCZkYXRhLT5zdGF0ZS5wcm94eWRpZ2VzdCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2h0dHBfZGlnZXN0LmggYi9jdXJsLTcuMjUuMC9saWIvaHR0cF9kaWdlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjIyY2UxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2h0dHBfZGlnZXN0LmgKQEAgLTAsMCArMSw1NyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9IVFRQX0RJR0VTVF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX0hUVFBfRElHRVNUX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKK3R5cGVkZWYgZW51bSB7CisgIENVUkxESUdFU1RfTk9ORSwgLyogbm90IGEgZGlnZXN0ICovCisgIENVUkxESUdFU1RfQkFELCAgLyogYSBkaWdlc3QsIGJ1dCBvbmUgd2UgZG9uJ3QgbGlrZSAqLworICBDVVJMRElHRVNUX0JBREFMR08sIC8qIHVuc3VwcG9ydGVkIGFsZ29yaXRobSByZXF1ZXN0ZWQgKi8KKyAgQ1VSTERJR0VTVF9OT01FTSwKKyAgQ1VSTERJR0VTVF9GSU5FLCAvKiBhIGRpZ2VzdCB3ZSBhY3Qgb24gKi8KKworICBDVVJMRElHRVNUX0xBU1QgIC8qIGxhc3QgZW50cnkgaW4gdGhpcyBlbnVtLCBkb24ndCB1c2UgKi8KK30gQ1VSTGRpZ2VzdDsKKworZW51bSB7CisgIENVUkxESUdFU1RBTEdPX01ENSwKKyAgQ1VSTERJR0VTVEFMR09fTUQ1U0VTUworfTsKKworLyogdGhpcyBpcyBmb3IgZGlnZXN0IGhlYWRlciBpbnB1dCAqLworQ1VSTGRpZ2VzdCBDdXJsX2lucHV0X2RpZ2VzdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJveHksIGNvbnN0IGNoYXIgKmhlYWRlcik7CisKKy8qIHRoaXMgaXMgZm9yIGNyZWF0aW5nIGRpZ2VzdCBoZWFkZXIgb3V0cHV0ICovCitDVVJMY29kZSBDdXJsX291dHB1dF9kaWdlc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJveHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp1cmlwYXRoKTsKKworI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9IVFRQKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgpCit2b2lkIEN1cmxfZGlnZXN0X2NsZWFudXAoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOworI2Vsc2UKKyNkZWZpbmUgQ3VybF9kaWdlc3RfY2xlYW51cCh4KSBDdXJsX25vcF9zdG10CisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0hUVFBfRElHRVNUX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9odHRwX25lZ290aWF0ZS5jIGIvY3VybC03LjI1LjAvbGliL2h0dHBfbmVnb3RpYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzZmFmOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9odHRwX25lZ290aWF0ZS5jCkBAIC0wLDAgKzEsMzc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX0dTU0FQSQorI2lmZGVmIEhBVkVfT0xEX0dTU01JVAorI2RlZmluZSBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRSBnc3NfbnRfc2VydmljZV9uYW1lCisjZGVmaW5lIE5DT01QQVQgMQorI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImN1cmxfZ3NzYXBpLmgiCisjaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAiY3VybF9iYXNlNjQuaCIKKyNpbmNsdWRlICJodHRwX25lZ290aWF0ZS5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAidXJsLmgiCisKKyNpZmRlZiBIQVZFX1NQTkVHTworIyAgaW5jbHVkZSA8c3BuZWdvaGVscC5oPgorIyAgaWZkZWYgVVNFX1NTTEVBWQorIyAgICBpZmRlZiBVU0VfT1BFTlNTTAorIyAgICAgIGluY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorIyAgICBlbHNlCisjICAgICAgaW5jbHVkZSA8b2JqZWN0cy5oPgorIyAgICBlbmRpZgorIyAgZWxzZQorIyAgICBlcnJvciAiQ2FuJ3QgY29tcGlsZSBTUE5FR08gc3VwcG9ydCB3aXRob3V0IE9wZW5TU0wuIgorIyAgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitzdGF0aWMgaW50CitnZXRfZ3NzX25hbWUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIHByb3h5LCBnc3NfbmFtZV90ICpzZXJ2ZXIpCit7CisgIHN0cnVjdCBuZWdvdGlhdGVkYXRhICpuZWdfY3R4ID0gcHJveHk/JmNvbm4tPmRhdGEtPnN0YXRlLnByb3h5bmVnOgorICAgICZjb25uLT5kYXRhLT5zdGF0ZS5uZWdvdGlhdGU7CisgIE9NX3VpbnQzMiBtYWpvcl9zdGF0dXMsIG1pbm9yX3N0YXR1czsKKyAgZ3NzX2J1ZmZlcl9kZXNjIHRva2VuID0gR1NTX0NfRU1QVFlfQlVGRkVSOworICBjaGFyIG5hbWVbMjA0OF07CisgIGNvbnN0IGNoYXIqIHNlcnZpY2U7CisKKyAgLyogR1NTQVBJIGltcGxlbWVudGF0aW9uIGJ5IEdsb2J1cyAoa25vd24gYXMgR1NJKSByZXF1aXJlcyB0aGUgbmFtZSB0byBiZQorICAgICBvZiBmb3JtICI8c2VydmljZT4vPGZxZG4+IiBpbnN0ZWFkIG9mIDxzZXJ2aWNlPkA8ZnFkbj4gKGllLiBzbGFzaCBpbnN0ZWFkCisgICAgIG9mIGF0LXNpZ24pLiBBbHNvIEdTSSBzZXJ2ZXJzIGFyZSBvZnRlbiBpZGVudGlmaWVkIGFzICdob3N0JyBub3QgJ2todHRwJy4KKyAgICAgQ2hhbmdlIGZvbGxvd2luZyBsaW5lcyBpZiB5b3Ugd2FudCB0byB1c2UgR1NJICovCisKKyAgLyogSUlTIHVzZXMgdGhlIDxzZXJ2aWNlPkA8ZnFkbj4gZm9ybSBidXQgdXNlcyAnaHR0cCcgYXMgdGhlIHNlcnZpY2UgbmFtZSAqLworCisgIGlmKG5lZ19jdHgtPmdzcykKKyAgICBzZXJ2aWNlID0gIktIVFRQIjsKKyAgZWxzZQorICAgIHNlcnZpY2UgPSAiSFRUUCI7CisKKyAgdG9rZW4ubGVuZ3RoID0gc3RybGVuKHNlcnZpY2UpICsgMSArIHN0cmxlbihwcm94eSA/IGNvbm4tPnByb3h5Lm5hbWUgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSkgKyAxOworICBpZih0b2tlbi5sZW5ndGggKyAxID4gc2l6ZW9mKG5hbWUpKQorICAgIHJldHVybiBFTVNHU0laRTsKKworICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlc0AlcyIsIHNlcnZpY2UsIHByb3h5ID8gY29ubi0+cHJveHkubmFtZSA6CisgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSk7CisKKyAgdG9rZW4udmFsdWUgPSAodm9pZCAqKSBuYW1lOworICBtYWpvcl9zdGF0dXMgPSBnc3NfaW1wb3J0X25hbWUoJm1pbm9yX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyKTsKKworICByZXR1cm4gR1NTX0VSUk9SKG1ham9yX3N0YXR1cykgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkCitsb2dfZ3NzX2Vycm9yKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgT01fdWludDMyIGVycm9yX3N0YXR1cywKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJlZml4KQoreworICBPTV91aW50MzIgbWFqX3N0YXQsIG1pbl9zdGF0OworICBPTV91aW50MzIgbXNnX2N0eCA9IDA7CisgIGdzc19idWZmZXJfZGVzYyBzdGF0dXNfc3RyaW5nOworICBjaGFyIGJ1ZlsxMDI0XTsKKyAgc2l6ZV90IGxlbjsKKworICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMiLCBwcmVmaXgpOworICBsZW4gPSBzdHJsZW4oYnVmKTsKKyAgZG8geworICAgIG1hal9zdGF0ID0gZ3NzX2Rpc3BsYXlfc3RhdHVzKCZtaW5fc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfTUVDSF9DT0RFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05PX09JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXNnX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhdHVzX3N0cmluZyk7CisgICAgICBpZihzaXplb2YoYnVmKSA+IGxlbiArIHN0YXR1c19zdHJpbmcubGVuZ3RoICsgMSkgeworICAgICAgICBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorICAgICAgICAgICAgICAgICAiOiAlcyIsIChjaGFyKikgc3RhdHVzX3N0cmluZy52YWx1ZSk7CisgICAgICBsZW4gKz0gc3RhdHVzX3N0cmluZy5sZW5ndGg7CisgICAgfQorICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmbWluX3N0YXQsICZzdGF0dXNfc3RyaW5nKTsKKyAgfSB3aGlsZSghR1NTX0VSUk9SKG1hal9zdGF0KSAmJiBtc2dfY3R4ICE9IDApOworCisgIGluZm9mKGNvbm4tPmRhdGEsICIlc1xuIiwgYnVmKTsKK30KKworLyogcmV0dXJuaW5nIHplcm8gKDApIG1lYW5zIHN1Y2Nlc3MsIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0cmVhdGVkIGFzICJmYWlsdXJlIgorICAgd2l0aCBubyBjYXJlIGV4YWN0bHkgd2hhdCB0aGUgZmFpbHVyZSB3YXMgKi8KK2ludCBDdXJsX2lucHV0X25lZ290aWF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgcHJveHksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaGVhZGVyKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBuZWdvdGlhdGVkYXRhICpuZWdfY3R4ID0gcHJveHk/JmRhdGEtPnN0YXRlLnByb3h5bmVnOgorICAgICZkYXRhLT5zdGF0ZS5uZWdvdGlhdGU7CisgIE9NX3VpbnQzMiBtYWpvcl9zdGF0dXMsIG1pbm9yX3N0YXR1cywgbWlub3Jfc3RhdHVzMjsKKyAgZ3NzX2J1ZmZlcl9kZXNjIGlucHV0X3Rva2VuID0gR1NTX0NfRU1QVFlfQlVGRkVSOworICBnc3NfYnVmZmVyX2Rlc2Mgb3V0cHV0X3Rva2VuID0gR1NTX0NfRU1QVFlfQlVGRkVSOworICBpbnQgcmV0OworICBzaXplX3QgbGVuOworICBzaXplX3QgcmF3bGVuID0gMDsKKyAgYm9vbCBnc3M7CisgIGNvbnN0IGNoYXIqIHByb3RvY29sOworICBDVVJMY29kZSBlcnJvcjsKKworICB3aGlsZSgqaGVhZGVyICYmIElTU1BBQ0UoKmhlYWRlcikpCisgICAgaGVhZGVyKys7CisgIGlmKGNoZWNrcHJlZml4KCJHU1MtTmVnb3RpYXRlIiwgaGVhZGVyKSkgeworICAgIHByb3RvY29sID0gIkdTUy1OZWdvdGlhdGUiOworICAgIGdzcyA9IFRSVUU7CisgIH0KKyAgZWxzZSBpZihjaGVja3ByZWZpeCgiTmVnb3RpYXRlIiwgaGVhZGVyKSkgeworICAgIHByb3RvY29sID0gIk5lZ290aWF0ZSI7CisgICAgZ3NzID0gRkFMU0U7CisgIH0KKyAgZWxzZQorICAgIHJldHVybiAtMTsKKworICBpZihuZWdfY3R4LT5jb250ZXh0KSB7CisgICAgaWYobmVnX2N0eC0+Z3NzICE9IGdzcykgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBuZWdfY3R4LT5wcm90b2NvbCA9IHByb3RvY29sOworICAgIG5lZ19jdHgtPmdzcyA9IGdzczsKKyAgfQorCisgIGlmKG5lZ19jdHgtPmNvbnRleHQgJiYgbmVnX2N0eC0+c3RhdHVzID09IEdTU19TX0NPTVBMRVRFKSB7CisgICAgLyogV2UgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5IG91ciBwYXJ0IG9mIGF1dGhlbnRpY2F0aW9uLCBidXQgc2VydmVyCisgICAgICogcmVqZWN0ZWQgaXQgKHNpbmNlIHdlJ3JlIGFnYWluIGhlcmUpLiBFeGl0IHdpdGggYW4gZXJyb3Igc2luY2Ugd2UKKyAgICAgKiBjYW4ndCBpbnZlbnQgYW55dGhpbmcgYmV0dGVyICovCisgICAgQ3VybF9jbGVhbnVwX25lZ290aWF0ZShkYXRhKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZihuZWdfY3R4LT5zZXJ2ZXJfbmFtZSA9PSBOVUxMICYmCisgICAgICAocmV0ID0gZ2V0X2dzc19uYW1lKGNvbm4sIHByb3h5LCAmbmVnX2N0eC0+c2VydmVyX25hbWUpKSkKKyAgICByZXR1cm4gcmV0OworCisgIGhlYWRlciArPSBzdHJsZW4obmVnX2N0eC0+cHJvdG9jb2wpOworICB3aGlsZSgqaGVhZGVyICYmIElTU1BBQ0UoKmhlYWRlcikpCisgICAgaGVhZGVyKys7CisKKyAgbGVuID0gc3RybGVuKGhlYWRlcik7CisgIGlmKGxlbiA+IDApIHsKKyAgICBlcnJvciA9IEN1cmxfYmFzZTY0X2RlY29kZShoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKiopJmlucHV0X3Rva2VuLnZhbHVlLCAmcmF3bGVuKTsKKyAgICBpZihlcnJvciB8fCByYXdsZW4gPT0gMCkKKyAgICAgIHJldHVybiAtMTsKKyAgICBpbnB1dF90b2tlbi5sZW5ndGggPSByYXdsZW47CisKKyNpZmRlZiBIQVZFX1NQTkVHTyAvKiBIYW5kbGUgU1BORUdPICovCisgICAgaWYoY2hlY2twcmVmaXgoIk5lZ290aWF0ZSIsIGhlYWRlcikpIHsKKyAgICAgIEFTTjFfT0JKRUNUICogICBvYmplY3QgICAgICAgICAgICA9IE5VTEw7CisgICAgICBpbnQgICAgICAgICAgICAgcmMgICAgICAgICAgICAgICAgPSAxOworICAgICAgdW5zaWduZWQgY2hhciAqIHNwbmVnb1Rva2VuICAgICAgID0gTlVMTDsKKyAgICAgIHNpemVfdCAgICAgICAgICBzcG5lZ29Ub2tlbkxlbmd0aCA9IDA7CisgICAgICB1bnNpZ25lZCBjaGFyICogbWVjaFRva2VuICAgICAgICAgPSBOVUxMOworICAgICAgc2l6ZV90ICAgICAgICAgIG1lY2hUb2tlbkxlbmd0aCAgID0gMDsKKworICAgICAgaWYoaW5wdXRfdG9rZW4udmFsdWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICAgIHNwbmVnb1Rva2VuID0gbWFsbG9jKGlucHV0X3Rva2VuLmxlbmd0aCk7CisgICAgICBpZihzcG5lZ29Ub2tlbiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgICAgc3BuZWdvVG9rZW5MZW5ndGggPSBpbnB1dF90b2tlbi5sZW5ndGg7CisKKyAgICAgIG9iamVjdCA9IE9CSl90eHQyb2JqICgiMS4yLjg0MC4xMTM1NTQuMS4yLjIiLCAxKTsKKyAgICAgIGlmKCFwYXJzZVNwbmVnb1RhcmdldFRva2VuKHNwbmVnb1Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BuZWdvVG9rZW5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZWNoVG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWVjaFRva2VuTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKSB7CisgICAgICAgIGZyZWUoc3BuZWdvVG9rZW4pOworICAgICAgICBzcG5lZ29Ub2tlbiA9IE5VTEw7CisgICAgICAgIGluZm9mKGRhdGEsICJQYXJzZSBTUE5FR08gVGFyZ2V0IFRva2VuIGZhaWxlZFxuIik7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgZnJlZShpbnB1dF90b2tlbi52YWx1ZSk7CisgICAgICAgIGlucHV0X3Rva2VuLnZhbHVlID0gbWFsbG9jKG1lY2hUb2tlbkxlbmd0aCk7CisgICAgICAgIGlmKGlucHV0X3Rva2VuLnZhbHVlID09IE5VTEwpCisgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICAgICAgbWVtY3B5KGlucHV0X3Rva2VuLnZhbHVlLCBtZWNoVG9rZW4sbWVjaFRva2VuTGVuZ3RoKTsKKyAgICAgICAgaW5wdXRfdG9rZW4ubGVuZ3RoID0gbWVjaFRva2VuTGVuZ3RoOworICAgICAgICBmcmVlKG1lY2hUb2tlbik7CisgICAgICAgIG1lY2hUb2tlbiA9IE5VTEw7CisgICAgICAgIGluZm9mKGRhdGEsICJQYXJzZSBTUE5FR08gVGFyZ2V0IFRva2VuIHN1Y2NlZWRlZFxuIik7CisgICAgICB9CisgICAgfQorI2VuZGlmCisgIH0KKworICBtYWpvcl9zdGF0dXMgPSBDdXJsX2dzc19pbml0X3NlY19jb250ZXh0KGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1pbm9yX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVnX2N0eC0+Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdfY3R4LT5zZXJ2ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19OT19DSEFOTkVMX0JJTkRJTkdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnB1dF90b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHV0X3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICBpZihpbnB1dF90b2tlbi5sZW5ndGggPiAwKQorICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmbWlub3Jfc3RhdHVzMiwgJmlucHV0X3Rva2VuKTsKKyAgbmVnX2N0eC0+c3RhdHVzID0gbWFqb3Jfc3RhdHVzOworICBpZihHU1NfRVJST1IobWFqb3Jfc3RhdHVzKSkgeworICAgIC8qIEN1cmxfY2xlYW51cF9uZWdvdGlhdGUoZGF0YSkgPz8/ICovCisgICAgbG9nX2dzc19lcnJvcihjb25uLCBtaW5vcl9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAiZ3NzX2luaXRfc2VjX2NvbnRleHQoKSBmYWlsZWQ6ICIpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmKG91dHB1dF90b2tlbi5sZW5ndGggPT0gMCkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIG5lZ19jdHgtPm91dHB1dF90b2tlbiA9IG91dHB1dF90b2tlbjsKKyAgLyogY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOyAqLworCisgIHJldHVybiAwOworfQorCisKK0NVUkxjb2RlIEN1cmxfb3V0cHV0X25lZ290aWF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgcHJveHkpCit7CisgIHN0cnVjdCBuZWdvdGlhdGVkYXRhICpuZWdfY3R4ID0gcHJveHk/JmNvbm4tPmRhdGEtPnN0YXRlLnByb3h5bmVnOgorICAgICZjb25uLT5kYXRhLT5zdGF0ZS5uZWdvdGlhdGU7CisgIGNoYXIgKmVuY29kZWQgPSBOVUxMOworICBzaXplX3QgbGVuID0gMDsKKyAgY2hhciAqdXNlcnA7CisgIENVUkxjb2RlIGVycm9yOworCisjaWZkZWYgSEFWRV9TUE5FR08gLyogSGFuZGxlIFNQTkVHTyAqLworICBpZihjaGVja3ByZWZpeCgiTmVnb3RpYXRlIiwgbmVnX2N0eC0+cHJvdG9jb2wpKSB7CisgICAgQVNOMV9PQkpFQ1QgKiAgIG9iamVjdCAgICAgICAgICAgID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgcmMgICAgICAgICAgICAgICAgPSAxOworICAgIHVuc2lnbmVkIGNoYXIgKiBzcG5lZ29Ub2tlbiAgICAgICA9IE5VTEw7CisgICAgc2l6ZV90ICAgICAgICAgIHNwbmVnb1Rva2VuTGVuZ3RoID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICogcmVzcG9uc2VUb2tlbiAgICAgICA9IE5VTEw7CisgICAgc2l6ZV90ICAgICAgICAgIHJlc3BvbnNlVG9rZW5MZW5ndGggPSAwOworCisgICAgcmVzcG9uc2VUb2tlbiA9IG1hbGxvYyhuZWdfY3R4LT5vdXRwdXRfdG9rZW4ubGVuZ3RoKTsKKyAgICBpZihyZXNwb25zZVRva2VuID09IE5VTEwpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBtZW1jcHkocmVzcG9uc2VUb2tlbiwgbmVnX2N0eC0+b3V0cHV0X3Rva2VuLnZhbHVlLAorICAgICAgICAgICBuZWdfY3R4LT5vdXRwdXRfdG9rZW4ubGVuZ3RoKTsKKyAgICByZXNwb25zZVRva2VuTGVuZ3RoID0gbmVnX2N0eC0+b3V0cHV0X3Rva2VuLmxlbmd0aDsKKworICAgIG9iamVjdD1PQkpfdHh0Mm9iaiAoIjEuMi44NDAuMTEzNTU0LjEuMi4yIiwgMSk7CisgICAgaWYoIW1ha2VTcG5lZ29Jbml0aWFsVG9rZW4gKG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVRva2VuTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwbmVnb1Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwbmVnb1Rva2VuTGVuZ3RoKSkgeworICAgICAgZnJlZShyZXNwb25zZVRva2VuKTsKKyAgICAgIHJlc3BvbnNlVG9rZW4gPSBOVUxMOworICAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIk1ha2UgU1BORUdPIEluaXRpYWwgVG9rZW4gZmFpbGVkXG4iKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBmcmVlKHJlc3BvbnNlVG9rZW4pOworICAgICAgcmVzcG9uc2VUb2tlbiA9IE5VTEw7CisgICAgICBmcmVlKG5lZ19jdHgtPm91dHB1dF90b2tlbi52YWx1ZSk7CisgICAgICBuZWdfY3R4LT5vdXRwdXRfdG9rZW4udmFsdWUgPSBtYWxsb2Moc3BuZWdvVG9rZW5MZW5ndGgpOworICAgICAgaWYobmVnX2N0eC0+b3V0cHV0X3Rva2VuLnZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgZnJlZShzcG5lZ29Ub2tlbik7CisgICAgICAgIHNwbmVnb1Rva2VuID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICB9CisgICAgICBtZW1jcHkobmVnX2N0eC0+b3V0cHV0X3Rva2VuLnZhbHVlLCBzcG5lZ29Ub2tlbixzcG5lZ29Ub2tlbkxlbmd0aCk7CisgICAgICBuZWdfY3R4LT5vdXRwdXRfdG9rZW4ubGVuZ3RoID0gc3BuZWdvVG9rZW5MZW5ndGg7CisgICAgICBmcmVlKHNwbmVnb1Rva2VuKTsKKyAgICAgIHNwbmVnb1Rva2VuID0gTlVMTDsKKyAgICAgIGluZm9mKGNvbm4tPmRhdGEsICJNYWtlIFNQTkVHTyBJbml0aWFsIFRva2VuIHN1Y2NlZWRlZFxuIik7CisgICAgfQorICB9CisjZW5kaWYKKyAgZXJyb3IgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoY29ubi0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnX2N0eC0+b3V0cHV0X3Rva2VuLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdfY3R4LT5vdXRwdXRfdG9rZW4ubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jb2RlZCwgJmxlbik7CisgIGlmKGVycm9yKSB7CisgICAgQ3VybF9zYWZlZnJlZShuZWdfY3R4LT5vdXRwdXRfdG9rZW4udmFsdWUpOworICAgIG5lZ19jdHgtPm91dHB1dF90b2tlbi52YWx1ZSA9IE5VTEw7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKyAgaWYobGVuID09IDApIHsKKyAgICBDdXJsX3NhZmVmcmVlKG5lZ19jdHgtPm91dHB1dF90b2tlbi52YWx1ZSk7CisgICAgbmVnX2N0eC0+b3V0cHV0X3Rva2VuLnZhbHVlID0gTlVMTDsKKyAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQ7CisgIH0KKworICB1c2VycCA9IGFwcmludGYoIiVzQXV0aG9yaXphdGlvbjogJXMgJXNcclxuIiwgcHJveHkgPyAiUHJveHktIiA6ICIiLAorICAgICAgICAgICAgICAgICAgbmVnX2N0eC0+cHJvdG9jb2wsIGVuY29kZWQpOworCisgIGlmKHByb3h5KQorICAgIGNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZCA9IHVzZXJwOworICBlbHNlCisgICAgY29ubi0+YWxsb2NwdHIudXNlcnB3ZCA9IHVzZXJwOworICBmcmVlKGVuY29kZWQpOworICBDdXJsX2NsZWFudXBfbmVnb3RpYXRlIChjb25uLT5kYXRhKTsKKyAgcmV0dXJuICh1c2VycCA9PSBOVUxMKSA/IENVUkxFX09VVF9PRl9NRU1PUlkgOiBDVVJMRV9PSzsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cChzdHJ1Y3QgbmVnb3RpYXRlZGF0YSAqbmVnX2N0eCkKK3sKKyAgT01fdWludDMyIG1pbm9yX3N0YXR1czsKKyAgaWYobmVnX2N0eC0+Y29udGV4dCAhPSBHU1NfQ19OT19DT05URVhUKQorICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJm1pbm9yX3N0YXR1cywgJm5lZ19jdHgtPmNvbnRleHQsIEdTU19DX05PX0JVRkZFUik7CisKKyAgaWYobmVnX2N0eC0+b3V0cHV0X3Rva2VuLmxlbmd0aCAhPSAwKQorICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmbWlub3Jfc3RhdHVzLCAmbmVnX2N0eC0+b3V0cHV0X3Rva2VuKTsKKworICBpZihuZWdfY3R4LT5zZXJ2ZXJfbmFtZSAhPSBHU1NfQ19OT19OQU1FKQorICAgIGdzc19yZWxlYXNlX25hbWUoJm1pbm9yX3N0YXR1cywgJm5lZ19jdHgtPnNlcnZlcl9uYW1lKTsKKworICBtZW1zZXQobmVnX2N0eCwgMCwgc2l6ZW9mKCpuZWdfY3R4KSk7Cit9CisKK3ZvaWQgQ3VybF9jbGVhbnVwX25lZ290aWF0ZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKK3sKKyAgY2xlYW51cCgmZGF0YS0+c3RhdGUubmVnb3RpYXRlKTsKKyAgY2xlYW51cCgmZGF0YS0+c3RhdGUucHJveHluZWcpOworfQorCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvaHR0cF9uZWdvdGlhdGUuaCBiL2N1cmwtNy4yNS4wL2xpYi9odHRwX25lZ290aWF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ODRkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvaHR0cF9uZWdvdGlhdGUuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0hUVFBfTkVHT1RJQVRFX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfSFRUUF9ORUdPVElBVEVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBVU0VfSFRUUF9ORUdPVElBVEUKKworLyogdGhpcyBpcyBmb3IgTmVnb3RpYXRlIGhlYWRlciBpbnB1dCAqLworaW50IEN1cmxfaW5wdXRfbmVnb3RpYXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBwcm94eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpoZWFkZXIpOworCisvKiB0aGlzIGlzIGZvciBjcmVhdGluZyBOZWdvdGlhdGUgaGVhZGVyIG91dHB1dCAqLworQ1VSTGNvZGUgQ3VybF9vdXRwdXRfbmVnb3RpYXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBwcm94eSk7CisKK3ZvaWQgQ3VybF9jbGVhbnVwX25lZ290aWF0ZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisKKyNpZmRlZiBVU0VfV0lORE9XU19TU1BJCisjZGVmaW5lIEdTU19FUlJPUihzdGF0dXMpIChzdGF0dXMgJiAweDgwMDAwMDAwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBVU0VfSFRUUF9ORUdPVElBVEUgKi8KKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0hUVFBfTkVHT1RJQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9odHRwX25lZ290aWF0ZV9zc3BpLmMgYi9jdXJsLTcuMjUuMC9saWIvaHR0cF9uZWdvdGlhdGVfc3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYWIzM2QKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvaHR0cF9uZWdvdGlhdGVfc3NwaS5jCkBAIC0wLDAgKzEsMzAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfV0lORE9XU19TU1BJCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAiY3VybF9iYXNlNjQuaCIKKyNpbmNsdWRlICJodHRwX25lZ290aWF0ZS5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0YXRpYyBpbnQKK2dldF9nc3NfbmFtZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgcHJveHksCisgICAgICAgICAgICAgc3RydWN0IG5lZ290aWF0ZWRhdGEgKm5lZ19jdHgpCit7CisgIGNvbnN0IGNoYXIqIHNlcnZpY2U7CisgIHNpemVfdCBsZW5ndGg7CisKKyAgaWYocHJveHkgJiYgIWNvbm4tPnByb3h5Lm5hbWUpCisgICAgLyogcHJveHkgYXV0aCByZXF1ZXN0ZWQgYnV0IG5vIGdpdmVuIHByb3h5IG5hbWUsIGVycm9yIG91dCEgKi8KKyAgICByZXR1cm4gLTE7CisKKyAgLyogR1NTQVBJIGltcGxlbWVudGF0aW9uIGJ5IEdsb2J1cyAoa25vd24gYXMgR1NJKSByZXF1aXJlcyB0aGUgbmFtZSB0byBiZQorICAgICBvZiBmb3JtICI8c2VydmljZT4vPGZxZG4+IiBpbnN0ZWFkIG9mIDxzZXJ2aWNlPkA8ZnFkbj4gKGllLiBzbGFzaCBpbnN0ZWFkCisgICAgIG9mIGF0LXNpZ24pLiBBbHNvIEdTSSBzZXJ2ZXJzIGFyZSBvZnRlbiBpZGVudGlmaWVkIGFzICdob3N0JyBub3QgJ2todHRwJy4KKyAgICAgQ2hhbmdlIGZvbGxvd2luZyBsaW5lcyBpZiB5b3Ugd2FudCB0byB1c2UgR1NJICovCisKKyAgLyogSUlTIHVzZXMgdGhlIDxzZXJ2aWNlPkA8ZnFkbj4gZm9ybSBidXQgdXNlcyAnaHR0cCcgYXMgdGhlIHNlcnZpY2UgbmFtZSwKKyAgICAgYW5kIFNTUEkgdGhlbiBnZW5lcmF0ZXMgYW4gTlRMTSB0b2tlbi4gV2hlbiB1c2luZyA8c2VydmljZT4vPGZxZG4+IGEKKyAgICAgS2VyYmVyb3MgdG9rZW4gaXMgZ2VuZXJhdGVkLiAqLworCisgIGlmKG5lZ19jdHgtPmdzcykKKyAgICBzZXJ2aWNlID0gIktIVFRQIjsKKyAgZWxzZQorICAgIHNlcnZpY2UgPSAiSFRUUCI7CisKKyAgbGVuZ3RoID0gc3RybGVuKHNlcnZpY2UpICsgMSArIHN0cmxlbihwcm94eSA/IGNvbm4tPnByb3h5Lm5hbWUgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSkgKyAxOworICBpZihsZW5ndGggKyAxID4gc2l6ZW9mKG5lZ19jdHgtPnNlcnZlcl9uYW1lKSkKKyAgICByZXR1cm4gRU1TR1NJWkU7CisKKyAgc25wcmludGYobmVnX2N0eC0+c2VydmVyX25hbWUsIHNpemVvZihuZWdfY3R4LT5zZXJ2ZXJfbmFtZSksICIlcy8lcyIsCisgICAgICAgICAgIHNlcnZpY2UsIHByb3h5ID8gY29ubi0+cHJveHkubmFtZSA6IGNvbm4tPmhvc3QubmFtZSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHJldHVybmluZyB6ZXJvICgwKSBtZWFucyBzdWNjZXNzLCBldmVyeXRoaW5nIGVsc2UgaXMgdHJlYXRlZCBhcyAiZmFpbHVyZSIKKyAgIHdpdGggbm8gY2FyZSBleGFjdGx5IHdoYXQgdGhlIGZhaWx1cmUgd2FzICovCitpbnQgQ3VybF9pbnB1dF9uZWdvdGlhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIHByb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhlYWRlcikKK3sKKyAgc3RydWN0IG5lZ290aWF0ZWRhdGEgKm5lZ19jdHggPSBwcm94eT8mY29ubi0+ZGF0YS0+c3RhdGUucHJveHluZWc6CisgICAgJmNvbm4tPmRhdGEtPnN0YXRlLm5lZ290aWF0ZTsKKyAgQllURSAgICAgICAgICAgICAgKmlucHV0X3Rva2VuID0gMDsKKyAgU2VjQnVmZmVyRGVzYyAgICAgb3V0X2J1ZmZfZGVzYzsKKyAgU2VjQnVmZmVyICAgICAgICAgb3V0X3NlY19idWZmOworICBTZWNCdWZmZXJEZXNjICAgICBpbl9idWZmX2Rlc2M7CisgIFNlY0J1ZmZlciAgICAgICAgIGluX3NlY19idWZmOworICBVTE9ORyAgICAgICAgICAgICBjb250ZXh0X2F0dHJpYnV0ZXM7CisgIFRpbWVTdGFtcCAgICAgICAgIGxpZmV0aW1lOworCisgIGludCByZXQ7CisgIHNpemVfdCBsZW4gPSAwLCBpbnB1dF90b2tlbl9sZW4gPSAwOworICBib29sIGdzcyA9IEZBTFNFOworICBjb25zdCBjaGFyKiBwcm90b2NvbDsKKyAgQ1VSTGNvZGUgZXJyb3I7CisKKyAgd2hpbGUoKmhlYWRlciAmJiBJU1NQQUNFKCpoZWFkZXIpKQorICAgIGhlYWRlcisrOworCisgIGlmKGNoZWNrcHJlZml4KCJHU1MtTmVnb3RpYXRlIiwgaGVhZGVyKSkgeworICAgIHByb3RvY29sID0gIkdTUy1OZWdvdGlhdGUiOworICAgIGdzcyA9IFRSVUU7CisgIH0KKyAgZWxzZSBpZihjaGVja3ByZWZpeCgiTmVnb3RpYXRlIiwgaGVhZGVyKSkgeworICAgIHByb3RvY29sID0gIk5lZ290aWF0ZSI7CisgICAgZ3NzID0gRkFMU0U7CisgIH0KKyAgZWxzZQorICAgIHJldHVybiAtMTsKKworICBpZihuZWdfY3R4LT5jb250ZXh0KSB7CisgICAgaWYobmVnX2N0eC0+Z3NzICE9IGdzcykgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBuZWdfY3R4LT5wcm90b2NvbCA9IHByb3RvY29sOworICAgIG5lZ19jdHgtPmdzcyA9IGdzczsKKyAgfQorCisgIGlmKG5lZ19jdHgtPmNvbnRleHQgJiYgbmVnX2N0eC0+c3RhdHVzID09IFNFQ19FX09LKSB7CisgICAgLyogV2UgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5IG91ciBwYXJ0IG9mIGF1dGhlbnRpY2F0aW9uLCBidXQgc2VydmVyCisgICAgICogcmVqZWN0ZWQgaXQgKHNpbmNlIHdlJ3JlIGFnYWluIGhlcmUpLiBFeGl0IHdpdGggYW4gZXJyb3Igc2luY2Ugd2UKKyAgICAgKiBjYW4ndCBpbnZlbnQgYW55dGhpbmcgYmV0dGVyICovCisgICAgQ3VybF9jbGVhbnVwX25lZ290aWF0ZShjb25uLT5kYXRhKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZigwID09IHN0cmxlbihuZWdfY3R4LT5zZXJ2ZXJfbmFtZSkpIHsKKyAgICByZXQgPSBnZXRfZ3NzX25hbWUoY29ubiwgcHJveHksIG5lZ19jdHgpOworICAgIGlmKHJldCkKKyAgICAgIHJldHVybiByZXQ7CisgIH0KKworICBpZighbmVnX2N0eC0+b3V0cHV0X3Rva2VuKSB7CisgICAgUFNlY1BrZ0luZm8gU2VjdXJpdHlQYWNrYWdlOworICAgIHJldCA9IHNfcFNlY0ZuLT5RdWVyeVNlY3VyaXR5UGFja2FnZUluZm8oKFNFQ19DSEFSICopIk5lZ290aWF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU2VjdXJpdHlQYWNrYWdlKTsKKyAgICBpZihyZXQgIT0gU0VDX0VfT0spCisgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBBbGxvY2F0ZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgYWNjb3JkaW5nIHRvIHRoZSBtYXggdG9rZW4gc2l6ZQorICAgICAgIGFzIGluZGljYXRlZCBieSB0aGUgc2VjdXJpdHkgcGFja2FnZSAqLworICAgIG5lZ19jdHgtPm1heF90b2tlbl9sZW5ndGggPSBTZWN1cml0eVBhY2thZ2UtPmNiTWF4VG9rZW47CisgICAgbmVnX2N0eC0+b3V0cHV0X3Rva2VuID0gbWFsbG9jKG5lZ19jdHgtPm1heF90b2tlbl9sZW5ndGgpOworICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihTZWN1cml0eVBhY2thZ2UpOworICB9CisKKyAgLyogT2J0YWluIHRoZSBpbnB1dCB0b2tlbiwgaWYgYW55ICovCisgIGhlYWRlciArPSBzdHJsZW4obmVnX2N0eC0+cHJvdG9jb2wpOworICB3aGlsZSgqaGVhZGVyICYmIElTU1BBQ0UoKmhlYWRlcikpCisgICAgaGVhZGVyKys7CisKKyAgbGVuID0gc3RybGVuKGhlYWRlcik7CisgIGlmKCFsZW4pIHsKKyAgICAvKiBmaXJzdCBjYWxsIGluIGEgbmV3IG5lZ290YXRpb24sIHdlIGhhdmUgdG8gYWNxdWlyZSBjcmVkZW50aWFscywKKyAgICAgICBhbmQgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgY29udGV4dCAqLworCisgICAgbmVnX2N0eC0+Y3JlZGVudGlhbHMgPSBtYWxsb2Moc2l6ZW9mKENyZWRIYW5kbGUpKTsKKyAgICBuZWdfY3R4LT5jb250ZXh0ID0gbWFsbG9jKHNpemVvZihDdHh0SGFuZGxlKSk7CisKKyAgICBpZighbmVnX2N0eC0+Y3JlZGVudGlhbHMgfHwgIW5lZ19jdHgtPmNvbnRleHQpCisgICAgICByZXR1cm4gLTE7CisKKyAgICBuZWdfY3R4LT5zdGF0dXMgPQorICAgICAgc19wU2VjRm4tPkFjcXVpcmVDcmVkZW50aWFsc0hhbmRsZShOVUxMLCAoU0VDX0NIQVIgKikiTmVnb3RpYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDUEtHX0NSRURfT1VUQk9VTkQsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIG5lZ19jdHgtPmNyZWRlbnRpYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGlmZXRpbWUpOworICAgIGlmKG5lZ19jdHgtPnN0YXR1cyAhPSBTRUNfRV9PSykKKyAgICAgIHJldHVybiAtMTsKKyAgfQorICBlbHNlIHsKKyAgICBpbnB1dF90b2tlbiA9IG1hbGxvYyhuZWdfY3R4LT5tYXhfdG9rZW5fbGVuZ3RoKTsKKyAgICBpZighaW5wdXRfdG9rZW4pCisgICAgICByZXR1cm4gLTE7CisKKyAgICBlcnJvciA9IEN1cmxfYmFzZTY0X2RlY29kZShoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKiopJmlucHV0X3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnB1dF90b2tlbl9sZW4pOworICAgIGlmKGVycm9yIHx8IGlucHV0X3Rva2VuX2xlbiA9PSAwKQorICAgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogcHJlcGFyZSB0aGUgb3V0cHV0IGJ1ZmZlcnMsIGFuZCBpbnB1dCBidWZmZXJzIGlmIHByZXNlbnQgKi8KKyAgb3V0X2J1ZmZfZGVzYy51bFZlcnNpb24gPSAwOworICBvdXRfYnVmZl9kZXNjLmNCdWZmZXJzICA9IDE7CisgIG91dF9idWZmX2Rlc2MucEJ1ZmZlcnMgID0gJm91dF9zZWNfYnVmZjsKKworICBvdXRfc2VjX2J1ZmYuY2JCdWZmZXIgICA9IGN1cmx4X3V6dG91bChuZWdfY3R4LT5tYXhfdG9rZW5fbGVuZ3RoKTsKKyAgb3V0X3NlY19idWZmLkJ1ZmZlclR5cGUgPSBTRUNCVUZGRVJfVE9LRU47CisgIG91dF9zZWNfYnVmZi5wdkJ1ZmZlciAgID0gbmVnX2N0eC0+b3V0cHV0X3Rva2VuOworCisKKyAgaWYoaW5wdXRfdG9rZW4pIHsKKyAgICBpbl9idWZmX2Rlc2MudWxWZXJzaW9uID0gMDsKKyAgICBpbl9idWZmX2Rlc2MuY0J1ZmZlcnMgID0gMTsKKyAgICBpbl9idWZmX2Rlc2MucEJ1ZmZlcnMgID0gJmluX3NlY19idWZmOworCisgICAgaW5fc2VjX2J1ZmYuY2JCdWZmZXIgICA9IGN1cmx4X3V6dG91bChpbnB1dF90b2tlbl9sZW4pOworICAgIGluX3NlY19idWZmLkJ1ZmZlclR5cGUgPSBTRUNCVUZGRVJfVE9LRU47CisgICAgaW5fc2VjX2J1ZmYucHZCdWZmZXIgICA9IGlucHV0X3Rva2VuOworICB9CisKKyAgbmVnX2N0eC0+c3RhdHVzID0gc19wU2VjRm4tPkluaXRpYWxpemVTZWN1cml0eUNvbnRleHQoCisgICAgbmVnX2N0eC0+Y3JlZGVudGlhbHMsCisgICAgaW5wdXRfdG9rZW4gPyBuZWdfY3R4LT5jb250ZXh0IDogMCwKKyAgICBuZWdfY3R4LT5zZXJ2ZXJfbmFtZSwKKyAgICBJU0NfUkVRX0NPTkZJREVOVElBTElUWSwKKyAgICAwLAorICAgIFNFQ1VSSVRZX05BVElWRV9EUkVQLAorICAgIGlucHV0X3Rva2VuID8gJmluX2J1ZmZfZGVzYyA6IDAsCisgICAgMCwKKyAgICBuZWdfY3R4LT5jb250ZXh0LAorICAgICZvdXRfYnVmZl9kZXNjLAorICAgICZjb250ZXh0X2F0dHJpYnV0ZXMsCisgICAgJmxpZmV0aW1lKTsKKworICBpZihHU1NfRVJST1IobmVnX2N0eC0+c3RhdHVzKSkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYobmVnX2N0eC0+c3RhdHVzID09IFNFQ19JX0NPTVBMRVRFX05FRURFRCB8fAorICAgICBuZWdfY3R4LT5zdGF0dXMgPT0gU0VDX0lfQ09NUExFVEVfQU5EX0NPTlRJTlVFKSB7CisgICAgbmVnX2N0eC0+c3RhdHVzID0gc19wU2VjRm4tPkNvbXBsZXRlQXV0aFRva2VuKG5lZ19jdHgtPmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRfYnVmZl9kZXNjKTsKKyAgICBpZihHU1NfRVJST1IobmVnX2N0eC0+c3RhdHVzKSkKKyAgICAgIHJldHVybiAtMTsKKyAgfQorCisgIG5lZ19jdHgtPm91dHB1dF90b2tlbl9sZW5ndGggPSBvdXRfc2VjX2J1ZmYuY2JCdWZmZXI7CisKKyAgcmV0dXJuIDA7Cit9CisKKworQ1VSTGNvZGUgQ3VybF9vdXRwdXRfbmVnb3RpYXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBwcm94eSkKK3sKKyAgc3RydWN0IG5lZ290aWF0ZWRhdGEgKm5lZ19jdHggPSBwcm94eT8mY29ubi0+ZGF0YS0+c3RhdGUucHJveHluZWc6CisgICAgJmNvbm4tPmRhdGEtPnN0YXRlLm5lZ290aWF0ZTsKKyAgY2hhciAqZW5jb2RlZCA9IE5VTEw7CisgIHNpemVfdCBsZW4gPSAwOworICBjaGFyICp1c2VycDsKKyAgQ1VSTGNvZGUgZXJyb3I7CisKKyAgZXJyb3IgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoY29ubi0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIqKW5lZ19jdHgtPm91dHB1dF90b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnX2N0eC0+b3V0cHV0X3Rva2VuX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuY29kZWQsICZsZW4pOworICBpZihlcnJvcikKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgaWYobGVuID09IDApCisgICAgcmV0dXJuIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOworCisgIHVzZXJwID0gYXByaW50ZigiJXNBdXRob3JpemF0aW9uOiAlcyAlc1xyXG4iLCBwcm94eSA/ICJQcm94eS0iIDogIiIsCisgICAgICAgICAgICAgICAgICBuZWdfY3R4LT5wcm90b2NvbCwgZW5jb2RlZCk7CisKKyAgaWYocHJveHkpCisgICAgY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkID0gdXNlcnA7CisgIGVsc2UKKyAgICBjb25uLT5hbGxvY3B0ci51c2VycHdkID0gdXNlcnA7CisgIGZyZWUoZW5jb2RlZCk7CisgIEN1cmxfY2xlYW51cF9uZWdvdGlhdGUgKGNvbm4tPmRhdGEpOworICByZXR1cm4gKHVzZXJwID09IE5VTEwpID8gQ1VSTEVfT1VUX09GX01FTU9SWSA6IENVUkxFX09LOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwKHN0cnVjdCBuZWdvdGlhdGVkYXRhICpuZWdfY3R4KQoreworICBpZihuZWdfY3R4LT5jb250ZXh0KSB7CisgICAgc19wU2VjRm4tPkRlbGV0ZVNlY3VyaXR5Q29udGV4dChuZWdfY3R4LT5jb250ZXh0KTsKKyAgICBmcmVlKG5lZ19jdHgtPmNvbnRleHQpOworICAgIG5lZ19jdHgtPmNvbnRleHQgPSAwOworICB9CisKKyAgaWYobmVnX2N0eC0+Y3JlZGVudGlhbHMpIHsKKyAgICBzX3BTZWNGbi0+RnJlZUNyZWRlbnRpYWxzSGFuZGxlKG5lZ19jdHgtPmNyZWRlbnRpYWxzKTsKKyAgICBmcmVlKG5lZ19jdHgtPmNyZWRlbnRpYWxzKTsKKyAgICBuZWdfY3R4LT5jcmVkZW50aWFscyA9IDA7CisgIH0KKworICBpZihuZWdfY3R4LT5vdXRwdXRfdG9rZW4pIHsKKyAgICBmcmVlKG5lZ19jdHgtPm91dHB1dF90b2tlbik7CisgICAgbmVnX2N0eC0+b3V0cHV0X3Rva2VuID0gMDsKKyAgfQorCisgIG5lZ19jdHgtPm1heF90b2tlbl9sZW5ndGggPSAwOworfQorCit2b2lkIEN1cmxfY2xlYW51cF9uZWdvdGlhdGUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIGNsZWFudXAoJmRhdGEtPnN0YXRlLm5lZ290aWF0ZSk7CisgIGNsZWFudXAoJmRhdGEtPnN0YXRlLnByb3h5bmVnKTsKK30KKworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2h0dHBfcHJveHkuYyBiL2N1cmwtNy4yNS4wL2xpYi9odHRwX3Byb3h5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1MDJmZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9odHRwX3Byb3h5LmMKQEAgLTAsMCArMSw1NzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9QUk9YWSkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApCisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlICJodHRwX3Byb3h5LmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJub24tYXNjaWkuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJjdXJseC5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitDVVJMY29kZSBDdXJsX3Byb3h5X2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBpZihjb25uLT5iaXRzLnR1bm5lbF9wcm94eSAmJiBjb25uLT5iaXRzLmh0dHBwcm94eSkgeworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgICAvKiBmb3IgW3Byb3RvY29sXSB0dW5uZWxlZCB0aHJvdWdoIEhUVFAgcHJveHkgKi8KKyAgICBzdHJ1Y3QgSFRUUCBodHRwX3Byb3h5OworICAgIHZvaWQgKnByb3Rfc2F2ZTsKKyAgICBDVVJMY29kZSByZXN1bHQ7CisKKyAgICAvKiBCTE9DS0lORyAqLworICAgIC8qIFdlIHdhbnQgInNlYW1sZXNzIiBvcGVyYXRpb25zIHRocm91Z2ggSFRUUCBwcm94eSB0dW5uZWwgKi8KKworICAgIC8qIEN1cmxfcHJveHlDT05ORUNUIGlzIGJhc2VkIG9uIGEgcG9pbnRlciB0byBhIHN0cnVjdCBIVFRQIGF0IHRoZQorICAgICAqIG1lbWJlciBjb25uLT5wcm90by5odHRwOyB3ZSB3YW50IFtwcm90b2NvbF0gdGhyb3VnaCBIVFRQIGFuZCB3ZSBoYXZlCisgICAgICogdG8gY2hhbmdlIHRoZSBtZW1iZXIgdGVtcG9yYXJpbHkgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIEhUVFAKKyAgICAgKiBwcm94eS4gQWZ0ZXIgQ3VybF9wcm94eUNPTk5FQ1Qgd2UgaGF2ZSB0byBzZXQgYmFjayB0aGUgbWVtYmVyIHRvIHRoZQorICAgICAqIG9yaWdpbmFsIHBvaW50ZXIKKyAgICAgKi8KKyAgICBwcm90X3NhdmUgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5nZW5lcmljOworICAgIG1lbXNldCgmaHR0cF9wcm94eSwgMCwgc2l6ZW9mKGh0dHBfcHJveHkpKTsKKyAgICBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5odHRwID0gJmh0dHBfcHJveHk7CisgICAgcmVzdWx0ID0gQ3VybF9wcm94eUNPTk5FQ1QoY29ubiwgRklSU1RTT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBjb25uLT5yZW1vdGVfcG9ydCk7CisgICAgY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8uZ2VuZXJpYyA9IHByb3Rfc2F2ZTsKKyAgICBpZihDVVJMRV9PSyAhPSByZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworI2VuZGlmCisgIH0KKyAgLyogbm8gSFRUUCB0dW5uZWwgcHJveHksIGp1c3QgcmV0dXJuICovCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIEN1cmxfcHJveHlDT05ORUNUKCkgcmVxdWlyZXMgdGhhdCB3ZSdyZSBjb25uZWN0ZWQgdG8gYSBIVFRQIHByb3h5LiBUaGlzCisgKiBmdW5jdGlvbiB3aWxsIGlzc3VlIHRoZSBuZWNlc3NhcnkgY29tbWFuZHMgdG8gZ2V0IGEgc2VhbWxlc3MgdHVubmVsIHRocm91Z2gKKyAqIHRoaXMgcHJveHkuIEFmdGVyIHRoYXQsIHRoZSBzb2NrZXQgY2FuIGJlIHVzZWQganVzdCBhcyBhIG5vcm1hbCBzb2NrZXQuCisgKgorICogVGhpcyBiYWRseSBuZWVkcyB0byBiZSByZXdyaXR0ZW4uIENPTk5FQ1Qgc2hvdWxkIGJlIHNlbnQgYW5kIGRlYWx0IHdpdGgKKyAqIGxpa2UgYW55IG9yZGluYXJ5IEhUVFAgcmVxdWVzdCwgYW5kIG5vdCBzcGVjaWFsbHkgY3JhZnRlZCBsaWtlIHRoaXMuIFRoaXMKKyAqIGZ1bmN0aW9uIG9ubHkgcmVtYWlucyBoZXJlIGxpa2UgdGhpcyBmb3Igbm93IHNpbmNlIHRoZSByZXdyaXRlIGlzIGEgYml0IHRvbworICogbXVjaCB3b3JrIHRvIGRvIGF0IHRoZSBtb21lbnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBCTE9DS0lORyB3aGljaCBpcyBuYXN0eSBmb3IgYWxsIG11bHRpIGludGVyZmFjZSB1c2luZyBhcHBzLgorICovCisKK0NVUkxjb2RlIEN1cmxfcHJveHlDT05ORUNUKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlbW90ZV9wb3J0KQoreworICBpbnQgc3VidmVyc2lvbj0wOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YT1jb25uLT5kYXRhOworICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgbG9uZyB0aW1lb3V0ID0KKyAgICBkYXRhLT5zZXQudGltZW91dD9kYXRhLT5zZXQudGltZW91dDpQUk9YWV9USU1FT1VUOyAvKiBpbiBtaWxsaXNlY29uZHMgKi8KKyAgY3VybF9zb2NrZXRfdCB0dW5uZWxzb2NrZXQgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIGN1cmxfb2ZmX3QgY2w9MDsKKyAgYm9vbCBjbG9zZUNvbm5lY3Rpb24gPSBGQUxTRTsKKyAgYm9vbCBjaHVua2VkX2VuY29kaW5nID0gRkFMU0U7CisgIGxvbmcgY2hlY2s7CisKKyNkZWZpbmUgU0VMRUNUX09LICAgICAgMAorI2RlZmluZSBTRUxFQ1RfRVJST1IgICAxCisjZGVmaW5lIFNFTEVDVF9USU1FT1VUIDIKKyAgaW50IGVycm9yID0gU0VMRUNUX09LOworCisgIGlmKGNvbm4tPnR1bm5lbF9zdGF0ZVtzb2NraW5kZXhdID09IFRVTk5FTF9DT01QTEVURSkKKyAgICByZXR1cm4gQ1VSTEVfT0s7IC8qIENPTk5FQ1QgaXMgYWxyZWFkeSBjb21wbGV0ZWQgKi8KKworICBjb25uLT5iaXRzLnByb3h5X2Nvbm5lY3RfY2xvc2VkID0gRkFMU0U7CisKKyAgZG8geworICAgIGlmKFRVTk5FTF9JTklUID09IGNvbm4tPnR1bm5lbF9zdGF0ZVtzb2NraW5kZXhdKSB7CisgICAgICAvKiBCRUdJTiBDT05ORUNUIFBIQVNFICovCisgICAgICBjaGFyICpob3N0X3BvcnQ7CisgICAgICBDdXJsX3NlbmRfYnVmZmVyICpyZXFfYnVmZmVyOworCisgICAgICBpbmZvZihkYXRhLCAiRXN0YWJsaXNoIEhUVFAgcHJveHkgdHVubmVsIHRvICVzOiVodVxuIiwKKyAgICAgICAgICAgIGhvc3RuYW1lLCByZW1vdGVfcG9ydCk7CisKKyAgICAgIGlmKGRhdGEtPnJlcS5uZXd1cmwpIHsKKyAgICAgICAgLyogVGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UndmUgbG9vcGVkIGhlcmUgZHVlIHRvIGF1dGhlbnRpY2F0aW9uCisgICAgICAgICAgIHJlYXNvbnMsIGFuZCB3ZSBkb24ndCByZWFsbHkgdXNlIHRoZSBuZXdseSBjbG9uZWQgVVJMIGhlcmUKKyAgICAgICAgICAgdGhlbi4gSnVzdCBmcmVlKCkgaXQuICovCisgICAgICAgIGZyZWUoZGF0YS0+cmVxLm5ld3VybCk7CisgICAgICAgIGRhdGEtPnJlcS5uZXd1cmwgPSBOVUxMOworICAgICAgfQorCisgICAgICAvKiBpbml0aWFsaXplIGEgZHluYW1pYyBzZW5kLWJ1ZmZlciAqLworICAgICAgcmVxX2J1ZmZlciA9IEN1cmxfYWRkX2J1ZmZlcl9pbml0KCk7CisKKyAgICAgIGlmKCFyZXFfYnVmZmVyKQorICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgICAgaG9zdF9wb3J0ID0gYXByaW50ZigiJXM6JWh1IiwgaG9zdG5hbWUsIHJlbW90ZV9wb3J0KTsKKyAgICAgIGlmKCFob3N0X3BvcnQpIHsKKyAgICAgICAgZnJlZShyZXFfYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICB9CisKKyAgICAgIC8qIFNldHVwIHRoZSBwcm94eS1hdXRob3JpemF0aW9uIGhlYWRlciwgaWYgYW55ICovCisgICAgICByZXN1bHQgPSBDdXJsX2h0dHBfb3V0cHV0X2F1dGgoY29ubiwgIkNPTk5FQ1QiLCBob3N0X3BvcnQsIFRSVUUpOworCisgICAgICBmcmVlKGhvc3RfcG9ydCk7CisKKyAgICAgIGlmKENVUkxFX09LID09IHJlc3VsdCkgeworICAgICAgICBjaGFyICpob3N0PShjaGFyICopIiI7CisgICAgICAgIGNvbnN0IGNoYXIgKnByb3h5Y29ubj0iIjsKKyAgICAgICAgY29uc3QgY2hhciAqdXNlcmFnZW50PSIiOworICAgICAgICBjb25zdCBjaGFyICpodHRwID0gKGNvbm4tPnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUF8xXzApID8KKyAgICAgICAgICAiMS4wIiA6ICIxLjEiOworICAgICAgICBjaGFyICpob3N0aGVhZGVyPSAvKiBob3N0OnBvcnQgd2l0aCBJUHY2IHN1cHBvcnQgKi8KKyAgICAgICAgICBhcHJpbnRmKCIlcyVzJXM6JWh1IiwgY29ubi0+Yml0cy5pcHY2X2lwPyJbIjoiIiwKKyAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLCBjb25uLT5iaXRzLmlwdjZfaXA/Il0iOiIiLAorICAgICAgICAgICAgICAgICAgcmVtb3RlX3BvcnQpOworICAgICAgICBpZighaG9zdGhlYWRlcikgeworICAgICAgICAgIGZyZWUocmVxX2J1ZmZlcik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIH0KKworICAgICAgICBpZighQ3VybF9jaGVja2hlYWRlcnMoZGF0YSwgIkhvc3Q6IikpIHsKKyAgICAgICAgICBob3N0ID0gYXByaW50ZigiSG9zdDogJXNcclxuIiwgaG9zdGhlYWRlcik7CisgICAgICAgICAgaWYoIWhvc3QpIHsKKyAgICAgICAgICAgIGZyZWUoaG9zdGhlYWRlcik7CisgICAgICAgICAgICBmcmVlKHJlcV9idWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKCFDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiUHJveHktQ29ubmVjdGlvbjoiKSkKKyAgICAgICAgICBwcm94eWNvbm4gPSAiUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZVxyXG4iOworCisgICAgICAgIGlmKCFDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiVXNlci1BZ2VudDoiKSAmJgorICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSQUdFTlRdKQorICAgICAgICAgIHVzZXJhZ2VudCA9IGNvbm4tPmFsbG9jcHRyLnVhZ2VudDsKKworICAgICAgICByZXN1bHQgPQorICAgICAgICAgIEN1cmxfYWRkX2J1ZmZlcmYocmVxX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT05ORUNUICVzIEhUVFAvJXNcclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAgLyogSG9zdDogKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgIC8qIFByb3h5LUF1dGhvcml6YXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgIC8qIFVzZXItQWdlbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIC8qIFByb3h5LUNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZD8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZDoiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJhZ2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5Y29ubik7CisKKyAgICAgICAgaWYoaG9zdCAmJiAqaG9zdCkKKyAgICAgICAgICBmcmVlKGhvc3QpOworICAgICAgICBmcmVlKGhvc3RoZWFkZXIpOworCisgICAgICAgIGlmKENVUkxFX09LID09IHJlc3VsdCkKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9jdXN0b21faGVhZGVycyhjb25uLCByZXFfYnVmZmVyKTsKKworICAgICAgICBpZihDVVJMRV9PSyA9PSByZXN1bHQpCisgICAgICAgICAgLyogQ1JMRiB0ZXJtaW5hdGUgdGhlIHJlcXVlc3QgKi8KKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKHJlcV9idWZmZXIsICJcclxuIik7CisKKyAgICAgICAgaWYoQ1VSTEVfT0sgPT0gcmVzdWx0KSB7CisgICAgICAgICAgLyogU2VuZCB0aGUgY29ubmVjdCByZXF1ZXN0IHRvIHRoZSBwcm94eSAqLworICAgICAgICAgIC8qIEJMT0NLSU5HICovCisgICAgICAgICAgcmVzdWx0ID0KKyAgICAgICAgICAgIEN1cmxfYWRkX2J1ZmZlcl9zZW5kKHJlcV9idWZmZXIsIGNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsIDAsIHNvY2tpbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgcmVxX2J1ZmZlciA9IE5VTEw7CisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgQ09OTkVDVCB0byBwcm94eSIpOworICAgICAgfQorCisgICAgICBDdXJsX3NhZmVmcmVlKHJlcV9idWZmZXIpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICBjb25uLT50dW5uZWxfc3RhdGVbc29ja2luZGV4XSA9IFRVTk5FTF9DT05ORUNUOworICAgIH0gLyogRU5EIENPTk5FQ1QgUEhBU0UgKi8KKworICAgIC8qIG5vdyB3ZSd2ZSBpc3N1ZWQgdGhlIENPTk5FQ1QgYW5kIHdlJ3JlIHdhaXRpbmcgdG8gaGVhciBiYWNrIC0KKyAgICAgICB3ZSB0cnkgbm90IHRvIGJsb2NrIGhlcmUgaW4gbXVsdGktbW9kZSBiZWNhdXNlIHRoYXQgbWlnaHQgYmUgYSBMT05HCisgICAgICAgd2FpdCBpZiB0aGUgcHJveHkgY2Fubm90IGNvbm5lY3QtdGhyb3VnaCB0byB0aGUgcmVtb3RlIGhvc3QuICovCisKKyAgICAvKiBpZiB0aW1lb3V0IGlzIHJlcXVlc3RlZCwgZmluZCBvdXQgaG93IG11Y2ggcmVtYWluaW5nIHRpbWUgd2UgaGF2ZSAqLworICAgIGNoZWNrID0gdGltZW91dCAtIC8qIHRpbWVvdXQgdGltZSAqLworICAgICAgQ3VybF90dmRpZmYoQ3VybF90dm5vdygpLCBjb25uLT5ub3cpOyAvKiBzcGVudCB0aW1lICovCisgICAgaWYoY2hlY2sgPD0gMCkgeworICAgICAgZmFpbGYoZGF0YSwgIlByb3h5IENPTk5FQ1QgYWJvcnRlZCBkdWUgdG8gdGltZW91dCIpOworICAgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CisgICAgfQorCisgICAgLyogaWYgd2UncmUgaW4gbXVsdGktbW9kZSBhbmQgd2Ugd291bGQgYmxvY2ssIHJldHVybiBpbnN0ZWFkIGZvciBhIHJldHJ5ICovCisgICAgaWYoQ3VybF9pZl9tdWx0aSA9PSBkYXRhLT5zdGF0ZS51c2VkX2ludGVyZmFjZSkgeworICAgICAgaWYoMCA9PSBDdXJsX3NvY2tldF9yZWFkeSh0dW5uZWxzb2NrZXQsIENVUkxfU09DS0VUX0JBRCwgMCkpCisgICAgICAgIC8qIHJldHVybiBzbyB3ZSdsbCBiZSBjYWxsZWQgYWdhaW4gcG9sbGluZy1zdHlsZSAqLworICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICBlbHNlIHsKKyAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAiTXVsdGkgbW9kZSBmaW5pc2hlZCBwb2xsaW5nIGZvciByZXNwb25zZSBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICJwcm94eSBDT05ORUNUXG4iKSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJFYXN5IG1vZGUgd2FpdGluZyByZXNwb25zZSBmcm9tIHByb3h5IENPTk5FQ1RcbiIpKTsKKyAgICB9CisKKyAgICAvKiBhdCB0aGlzIHBvaW50LCBlaXRoZXI6CisgICAgICAgMSkgd2UncmUgaW4gZWFzeS1tb2RlIGFuZCBzbyBpdCdzIG9rYXkgdG8gYmxvY2sgd2FpdGluZyBmb3IgYSBDT05ORUNUCisgICAgICAgcmVzcG9uc2UKKyAgICAgICAyKSB3ZSdyZSBpbiBtdWx0aS1tb2RlIGFuZCB3ZSBkaWRuJ3QgYmxvY2sgLSBpdCdzIGVpdGhlciBhbiBlcnJvciBvciB3ZQorICAgICAgIG5vdyBoYXZlIHNvbWUgZGF0YSB3YWl0aW5nLgorICAgICAgIEluIGFueSBjYXNlLCB0aGUgdHVubmVsX2Nvbm5lY3RpbmcgcGhhc2UgaXMgb3Zlci4gKi8KKworICAgIHsgLyogQkVHSU4gTkVHT1RJQVRJT04gUEhBU0UgKi8KKyAgICAgIHNpemVfdCBucmVhZDsgICAvKiB0b3RhbCBzaXplIHJlYWQgKi8KKyAgICAgIGludCBwZXJsaW5lOyAvKiBjb3VudCBieXRlcyBwZXIgbGluZSAqLworICAgICAgaW50IGtlZXBvbj1UUlVFOworICAgICAgc3NpemVfdCBnb3RieXRlczsKKyAgICAgIGNoYXIgKnB0cjsKKyAgICAgIGNoYXIgKmxpbmVfc3RhcnQ7CisKKyAgICAgIHB0cj1kYXRhLT5zdGF0ZS5idWZmZXI7CisgICAgICBsaW5lX3N0YXJ0ID0gcHRyOworCisgICAgICBucmVhZD0wOworICAgICAgcGVybGluZT0wOworICAgICAga2VlcG9uPVRSVUU7CisKKyAgICAgIHdoaWxlKChucmVhZDxCVUZTSVpFKSAmJiAoa2VlcG9uICYmICFlcnJvcikpIHsKKworICAgICAgICAvKiBpZiB0aW1lb3V0IGlzIHJlcXVlc3RlZCwgZmluZCBvdXQgaG93IG11Y2ggcmVtYWluaW5nIHRpbWUgd2UgaGF2ZSAqLworICAgICAgICBjaGVjayA9IHRpbWVvdXQgLSAvKiB0aW1lb3V0IHRpbWUgKi8KKyAgICAgICAgICBDdXJsX3R2ZGlmZihDdXJsX3R2bm93KCksIGNvbm4tPm5vdyk7IC8qIHNwZW50IHRpbWUgKi8KKyAgICAgICAgaWYoY2hlY2sgPD0gMCkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJQcm94eSBDT05ORUNUIGFib3J0ZWQgZHVlIHRvIHRpbWVvdXQiKTsKKyAgICAgICAgICBlcnJvciA9IFNFTEVDVF9USU1FT1VUOyAvKiBhbHJlYWR5IHRvbyBsaXR0bGUgdGltZSAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogbG9vcCBldmVyeSBzZWNvbmQgYXQgbGVhc3QsIGxlc3MgaWYgdGhlIHRpbWVvdXQgaXMgbmVhciAqLworICAgICAgICBzd2l0Y2ggKEN1cmxfc29ja2V0X3JlYWR5KHR1bm5lbHNvY2tldCwgQ1VSTF9TT0NLRVRfQkFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrPDEwMDBMP2NoZWNrOjEwMDApKSB7CisgICAgICAgIGNhc2UgLTE6IC8qIHNlbGVjdCgpIGVycm9yLCBzdG9wIHJlYWRpbmcgKi8KKyAgICAgICAgICBlcnJvciA9IFNFTEVDVF9FUlJPUjsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiUHJveHkgQ09OTkVDVCBhYm9ydGVkIGR1ZSB0byBzZWxlY3QvcG9sbCBlcnJvciIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDA6IC8qIHRpbWVvdXQgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBERUJVR0FTU0VSVChwdHIrQlVGU0laRS1ucmVhZCA8PSBkYXRhLT5zdGF0ZS5idWZmZXIrQlVGU0laRSsxKTsKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX3JlYWQoY29ubiwgdHVubmVsc29ja2V0LCBwdHIsIEJVRlNJWkUtbnJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnb3RieXRlcyk7CisgICAgICAgICAgaWYocmVzdWx0PT1DVVJMRV9BR0FJTikKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBnbyBsb29wIHlvdXJzZWxmICovCisgICAgICAgICAgZWxzZSBpZihyZXN1bHQpCisgICAgICAgICAgICBrZWVwb24gPSBGQUxTRTsKKyAgICAgICAgICBlbHNlIGlmKGdvdGJ5dGVzIDw9IDApIHsKKyAgICAgICAgICAgIGtlZXBvbiA9IEZBTFNFOworICAgICAgICAgICAgaWYoZGF0YS0+c2V0LnByb3h5YXV0aCAmJiBkYXRhLT5zdGF0ZS5hdXRocHJveHkuYXZhaWwpIHsKKyAgICAgICAgICAgICAgLyogcHJveHkgYXV0aCB3YXMgcmVxdWVzdGVkIGFuZCB0aGVyZSB3YXMgcHJveHkgYXV0aCBhdmFpbGFibGUsCisgICAgICAgICAgICAgICAgIHRoZW4gZGVlbSB0aGlzIGFzICJtZXJlIiBwcm94eSBkaXNjb25uZWN0ICovCisgICAgICAgICAgICAgIGNvbm4tPmJpdHMucHJveHlfY29ubmVjdF9jbG9zZWQgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIGVycm9yID0gU0VMRUNUX0VSUk9SOworICAgICAgICAgICAgICBmYWlsZihkYXRhLCAiUHJveHkgQ09OTkVDVCBhYm9ydGVkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFdlIGdvdCBhIHdob2xlIGNodW5rIG9mIGRhdGEsIHdoaWNoIGNhbiBiZSBhbnl0aGluZyBmcm9tIG9uZQorICAgICAgICAgICAgICogYnl0ZSB0byBhIHNldCBvZiBsaW5lcyBhbmQgcG9zc2libHkganVzdCBhIHBpZWNlIG9mIHRoZSBsYXN0CisgICAgICAgICAgICAgKiBsaW5lLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpbnQgaTsKKworICAgICAgICAgICAgbnJlYWQgKz0gZ290Ynl0ZXM7CisKKyAgICAgICAgICAgIGlmKGtlZXBvbiA+IFRSVUUpIHsKKyAgICAgICAgICAgICAgLyogVGhpcyBtZWFucyB3ZSBhcmUgY3VycmVudGx5IGlnbm9yaW5nIGEgcmVzcG9uc2UtYm9keSAqLworCisgICAgICAgICAgICAgIG5yZWFkID0gMDsgLyogbWFrZSBuZXh0IHJlYWQgc3RhcnQgb3ZlciBpbiB0aGUgcmVhZCBidWZmZXIgKi8KKyAgICAgICAgICAgICAgcHRyPWRhdGEtPnN0YXRlLmJ1ZmZlcjsKKyAgICAgICAgICAgICAgaWYoY2wpIHsKKyAgICAgICAgICAgICAgICAvKiBBIENvbnRlbnQtTGVuZ3RoIGJhc2VkIGJvZHk6IHNpbXBseSBjb3VudCBkb3duIHRoZSBjb3VudGVyCisgICAgICAgICAgICAgICAgICAgYW5kIG1ha2Ugc3VyZSB0byBicmVhayBvdXQgb2YgdGhlIGxvb3Agd2hlbiB3ZSdyZSBkb25lISAqLworICAgICAgICAgICAgICAgIGNsIC09IGdvdGJ5dGVzOworICAgICAgICAgICAgICAgIGlmKGNsPD0wKSB7CisgICAgICAgICAgICAgICAgICBrZWVwb24gPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBjaHVua2VkLWVuY29kZWQgYm9keSwgc28gd2UgbmVlZCB0byBkbyB0aGUgY2h1bmtlZCBkYW5jZQorICAgICAgICAgICAgICAgICAgIHByb3Blcmx5IHRvIGtub3cgd2hlbiB0aGUgZW5kIG9mIHRoZSBib2R5IGlzIHJlYWNoZWQgKi8KKyAgICAgICAgICAgICAgICBDSFVOS2NvZGUgcjsKKyAgICAgICAgICAgICAgICBzc2l6ZV90IHRvb2tjYXJlb2Y9MDsKKworICAgICAgICAgICAgICAgIC8qIG5vdyBwYXJzZSB0aGUgY2h1bmtlZCBwaWVjZSBvZiBkYXRhIHNvIHRoYXQgd2UgY2FuCisgICAgICAgICAgICAgICAgICAgcHJvcGVybHkgdGVsbCB3aGVuIHRoZSBzdHJlYW0gZW5kcyAqLworICAgICAgICAgICAgICAgIHIgPSBDdXJsX2h0dHBjaHVua19yZWFkKGNvbm4sIHB0ciwgZ290Ynl0ZXMsICZ0b29rY2FyZW9mKTsKKyAgICAgICAgICAgICAgICBpZihyID09IENIVU5LRV9TVE9QKSB7CisgICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBkb25lIHJlYWRpbmcgY2h1bmtzISAqLworICAgICAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgImNodW5rIHJlYWRpbmcgRE9ORVxuIik7CisgICAgICAgICAgICAgICAgICBrZWVwb24gPSBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgIlJlYWQgJXpkIGJ5dGVzIG9mIGNodW5rLCBjb250aW51ZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2tjYXJlb2YpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGdvdGJ5dGVzOyBwdHIrKywgaSsrKSB7CisgICAgICAgICAgICAgICAgcGVybGluZSsrOyAvKiBhbW91bnQgb2YgYnl0ZXMgaW4gdGhpcyBsaW5lIHNvIGZhciAqLworICAgICAgICAgICAgICAgIGlmKCpwdHIgPT0gMHgwYSkgeworICAgICAgICAgICAgICAgICAgY2hhciBsZXR0ZXI7CisgICAgICAgICAgICAgICAgICBpbnQgd3JpdGV0eXBlOworCisgICAgICAgICAgICAgICAgICAvKiBjb252ZXJ0IGZyb20gdGhlIG5ldHdvcmsgZW5jb2RpbmcgKi8KKyAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoZGF0YSwgbGluZV9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybGluZSk7CisgICAgICAgICAgICAgICAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLworICAgICAgICAgICAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICAgICAgICAvKiBvdXRwdXQgZGVidWcgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KKyAgICAgICAgICAgICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX3N0YXJ0LCAoc2l6ZV90KXBlcmxpbmUsIGNvbm4pOworCisgICAgICAgICAgICAgICAgICAvKiBzZW5kIHRoZSBoZWFkZXIgdG8gdGhlIGNhbGxiYWNrICovCisgICAgICAgICAgICAgICAgICB3cml0ZXR5cGUgPSBDTElFTlRXUklURV9IRUFERVI7CisgICAgICAgICAgICAgICAgICBpZihkYXRhLT5zZXQuaW5jbHVkZV9oZWFkZXIpCisgICAgICAgICAgICAgICAgICAgIHdyaXRldHlwZSB8PSBDTElFTlRXUklURV9CT0RZOworCisgICAgICAgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCB3cml0ZXR5cGUsIGxpbmVfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJsaW5lKTsKKyAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgICAgICAgLyogTmV3bGluZXMgYXJlIENSTEYsIHNvIHRoZSBDUiBpcyBpZ25vcmVkIGFzIHRoZSBsaW5lIGlzbid0CisgICAgICAgICAgICAgICAgICAgICByZWFsbHkgdGVybWluYXRlZCB1bnRpbCB0aGUgTEYgY29tZXMuIFRyZWF0IGEgZm9sbG93aW5nIENSCisgICAgICAgICAgICAgICAgICAgICBhcyBlbmQtb2YtaGVhZGVycyBhcyB3ZWxsLiovCisKKyAgICAgICAgICAgICAgICAgIGlmKCgnXHInID09IGxpbmVfc3RhcnRbMF0pIHx8CisgICAgICAgICAgICAgICAgICAgICAoJ1xuJyA9PSBsaW5lX3N0YXJ0WzBdKSkgeworICAgICAgICAgICAgICAgICAgICAvKiBlbmQgb2YgcmVzcG9uc2UtaGVhZGVycyBmcm9tIHRoZSBwcm94eSAqLworICAgICAgICAgICAgICAgICAgICBucmVhZCA9IDA7IC8qIG1ha2UgbmV4dCByZWFkIHN0YXJ0IG92ZXIgaW4gdGhlIHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgcHRyPWRhdGEtPnN0YXRlLmJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgaWYoKDQwNyA9PSBrLT5odHRwY29kZSkgJiYgIWRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgZ2V0IGEgNDA3IHJlc3BvbnNlIGNvZGUgd2l0aCBjb250ZW50IGxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gd2UgaGF2ZSBubyBhdXRoIHByb2JsZW0sIHdlIG11c3QgaWdub3JlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIHdob2xlIHJlc3BvbnNlLWJvZHkgKi8KKyAgICAgICAgICAgICAgICAgICAgICBrZWVwb24gPSAyOworCisgICAgICAgICAgICAgICAgICAgICAgaWYoY2wpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgIklnbm9yZSAlIiBGT1JNQVRfT0ZGX1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYnl0ZXMgb2YgcmVzcG9uc2UtYm9keVxuIiwgY2wpOworICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVtb3ZlIHRoZSByZW1haW5pbmcgY2h1bmsgb2Ygd2hhdCB3ZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkICovCisgICAgICAgICAgICAgICAgICAgICAgICBjbCAtPSAoZ290Ynl0ZXMgLSBpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2w8PTApCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHRoZSB3aG9sZSB0aGluZyB3YXMgYWxyZWFkeSByZWFkLCB3ZSBhcmUgZG9uZSEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBvbj1GQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihjaHVua2VkX2VuY29kaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDSFVOS2NvZGUgcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIHNldCBpZ25vcmVib2R5IHRydWUgaGVyZSBzaW5jZSB0aGUgY2h1bmtlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlciBmdW5jdGlvbiB3aWxsIGFja25vd2xlZGdlIHRoYXQuIFBheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZW50aW9uIHNvIHRoYXQgdGhpcyBpcyBjbGVhcmVkIGFnYWluIHdoZW4gdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmV0dXJucyEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGstPmlnbm9yZWJvZHkgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgIiV6ZCBieXRlcyBvZiBjaHVuayBsZWZ0XG4iLCBnb3RieXRlcy1pKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYobGluZV9zdGFydFsxXSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgY2FuIG9ubHkgYmUgYSBMRiBpZiB0aGUgbGV0dGVyIGF0IGluZGV4IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIGEgQ1IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9zdGFydCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdyBwYXJzZSB0aGUgY2h1bmtlZCBwaWVjZSBvZiBkYXRhIHNvIHRoYXQgd2UgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJseSB0ZWxsIHdoZW4gdGhlIHN0cmVhbSBlbmRzICovCisgICAgICAgICAgICAgICAgICAgICAgICByID0gQ3VybF9odHRwY2h1bmtfcmVhZChjb25uLCBsaW5lX3N0YXJ0KzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdGJ5dGVzIC1pLCAmZ290Ynl0ZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYociA9PSBDSFVOS0VfU1RPUCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBkb25lIHJlYWRpbmcgY2h1bmtzISAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvZihkYXRhLCAiY2h1bmsgcmVhZGluZyBET05FXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcG9uID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJSZWFkICV6ZCBieXRlcyBvZiBjaHVuaywgY29udGludWVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdGJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiB3aXRob3V0IGNvbnRlbnQtbGVuZ3RoIG9yIGNodW5rZWQgZW5jb2RpbmcsIHdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4ndCBrZWVwIHRoZSBjb25uZWN0aW9uIGFsaXZlIHNpbmNlIHRoZSBjbG9zZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGVuZCBzaWduYWwgc28gd2UgYmFpbCBvdXQgYXQgb25jZSBpbnN0ZWFkICovCisgICAgICAgICAgICAgICAgICAgICAgICBrZWVwb249RkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIGtlZXBvbiA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgIGlmKDIwMCA9PSBkYXRhLT5pbmZvLmh0dHBwcm94eWNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGdvdGJ5dGVzIC0gKGkrMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJQcm94eSBDT05ORUNUIGZvbGxvd2VkIGJ5ICV6ZCBieXRlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZiBvcGFxdWUgZGF0YS4gRGF0YSBpZ25vcmVkIChrbm93biBidWcgIzM5KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdGJ5dGVzIC0gKGkrMSkpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsgLyogYnJlYWtzIG91dCBvZiBmb3ItbG9vcCwgbm90IHN3aXRjaCgpICovCisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIC8qIGtlZXAgYSBiYWNrdXAgb2YgdGhlIHBvc2l0aW9uIHdlIGFyZSBhYm91dCB0byBibGFuayAqLworICAgICAgICAgICAgICAgICAgbGV0dGVyID0gbGluZV9zdGFydFtwZXJsaW5lXTsKKyAgICAgICAgICAgICAgICAgIGxpbmVfc3RhcnRbcGVybGluZV09MDsgLyogemVybyB0ZXJtaW5hdGUgdGhlIGJ1ZmZlciAqLworICAgICAgICAgICAgICAgICAgaWYoKGNoZWNrcHJlZml4KCJXV1ctQXV0aGVudGljYXRlOiIsIGxpbmVfc3RhcnQpICYmCisgICAgICAgICAgICAgICAgICAgICAgKDQwMSA9PSBrLT5odHRwY29kZSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAoY2hlY2twcmVmaXgoIlByb3h5LWF1dGhlbnRpY2F0ZToiLCBsaW5lX3N0YXJ0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICg0MDcgPT0gay0+aHR0cGNvZGUpKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2h0dHBfaW5wdXRfYXV0aChjb25uLCBrLT5odHRwY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9zdGFydCk7CisgICAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiQ29udGVudC1MZW5ndGg6IiwgbGluZV9zdGFydCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2wgPSBjdXJseF9zdHJ0b29mZnQobGluZV9zdGFydCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbigiQ29udGVudC1MZW5ndGg6IiksIE5VTEwsIDEwKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYoQ3VybF9jb21wYXJlaGVhZGVyKGxpbmVfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbjoiLCAiY2xvc2UiKSkKKyAgICAgICAgICAgICAgICAgICAgY2xvc2VDb25uZWN0aW9uID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYoQ3VybF9jb21wYXJlaGVhZGVyKGxpbmVfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJhbnNmZXItRW5jb2Rpbmc6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaHVua2VkIikpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkNPTk5FQ1QgcmVzcG9uZGVkIGNodW5rZWRcbiIpOworICAgICAgICAgICAgICAgICAgICBjaHVua2VkX2VuY29kaW5nID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBvdXIgY2h1bmt5IGVuZ2luZSAqLworICAgICAgICAgICAgICAgICAgICBDdXJsX2h0dHBjaHVua19pbml0KGNvbm4pOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZihDdXJsX2NvbXBhcmVoZWFkZXIobGluZV9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm94eS1Db25uZWN0aW9uOiIsICJjbG9zZSIpKQorICAgICAgICAgICAgICAgICAgICBjbG9zZUNvbm5lY3Rpb24gPSBUUlVFOworICAgICAgICAgICAgICAgICAgZWxzZSBpZigyID09IHNzY2FuZihsaW5lX3N0YXJ0LCAiSFRUUC8xLiVkICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1YnZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrLT5odHRwY29kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogc3RvcmUgdGhlIEhUVFAgY29kZSBmcm9tIHRoZSBwcm94eSAqLworICAgICAgICAgICAgICAgICAgICBkYXRhLT5pbmZvLmh0dHBwcm94eWNvZGUgPSBrLT5odHRwY29kZTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIC8qIHB1dCBiYWNrIHRoZSBsZXR0ZXIgd2UgYmxhbmtlZCBvdXQgYmVmb3JlICovCisgICAgICAgICAgICAgICAgICBsaW5lX3N0YXJ0W3BlcmxpbmVdPSBsZXR0ZXI7CisKKyAgICAgICAgICAgICAgICAgIHBlcmxpbmU9MDsgLyogbGluZSBzdGFydHMgb3ZlciBoZXJlICovCisgICAgICAgICAgICAgICAgICBsaW5lX3N0YXJ0ID0gcHRyKzE7IC8qIHRoaXMgc2tpcHMgdGhlIHplcm8gYnl0ZSB3ZSB3cm90ZSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAvKiBzd2l0Y2ggKi8KKyAgICAgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKQorICAgICAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworICAgICAgfSAvKiB3aGlsZSB0aGVyZSdzIGJ1ZmZlciBsZWZ0IGFuZCBsb29wIGlzIHJlcXVlc3RlZCAqLworCisgICAgICBpZihlcnJvcikKKyAgICAgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CisKKyAgICAgIGlmKGRhdGEtPmluZm8uaHR0cHByb3h5Y29kZSAhPSAyMDApIHsKKyAgICAgICAgLyogRGVhbCB3aXRoIHRoZSBwb3NzaWJseSBhbHJlYWR5IHJlY2VpdmVkIGF1dGhlbnRpY2F0ZQorICAgICAgICAgICBoZWFkZXJzLiAnbmV3dXJsJyBpcyBzZXQgdG8gYSBuZXcgVVJMIGlmIHdlIG11c3QgbG9vcC4gKi8KKyAgICAgICAgcmVzdWx0ID0gQ3VybF9odHRwX2F1dGhfYWN0KGNvbm4pOworICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICBpZihjb25uLT5iaXRzLmNsb3NlKQorICAgICAgICAgIC8qIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIG1hcmtlZCBmb3IgY2xvc3VyZSwgbW9zdCBsaWtlbHkgaW4gdGhlCisgICAgICAgICAgICAgQ3VybF9odHRwX2F1dGhfYWN0KCkgZnVuY3Rpb24gYW5kIHRodXMgd2UgY2FuIGtpbGwgaXQgYXQgb25jZQorICAgICAgICAgICAgIGJlbG93CisgICAgICAgICAgKi8KKyAgICAgICAgICBjbG9zZUNvbm5lY3Rpb24gPSBUUlVFOworICAgICAgfQorCisgICAgICBpZihjbG9zZUNvbm5lY3Rpb24gJiYgZGF0YS0+cmVxLm5ld3VybCkgeworICAgICAgICAvKiBDb25uZWN0aW9uIGNsb3NlZCBieSBzZXJ2ZXIuIERvbid0IHVzZSBpdCBhbnltb3JlICovCisgICAgICAgIEN1cmxfY2xvc2Vzb2NrZXQoY29ubiwgY29ubi0+c29ja1tzb2NraW5kZXhdKTsKKyAgICAgICAgY29ubi0+c29ja1tzb2NraW5kZXhdID0gQ1VSTF9TT0NLRVRfQkFEOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9IC8qIEVORCBORUdPVElBVElPTiBQSEFTRSAqLworICB9IHdoaWxlKGRhdGEtPnJlcS5uZXd1cmwpOworCisgIGlmKDIwMCAhPSBkYXRhLT5yZXEuaHR0cGNvZGUpIHsKKyAgICBmYWlsZihkYXRhLCAiUmVjZWl2ZWQgSFRUUCBjb2RlICVkIGZyb20gcHJveHkgYWZ0ZXIgQ09OTkVDVCIsCisgICAgICAgICAgZGF0YS0+cmVxLmh0dHBjb2RlKTsKKworICAgIGlmKGNsb3NlQ29ubmVjdGlvbiAmJiBkYXRhLT5yZXEubmV3dXJsKQorICAgICAgY29ubi0+Yml0cy5wcm94eV9jb25uZWN0X2Nsb3NlZCA9IFRSVUU7CisKKyAgICAvKiB0byBiYWNrIHRvIGluaXQgc3RhdGUgKi8KKyAgICBjb25uLT50dW5uZWxfc3RhdGVbc29ja2luZGV4XSA9IFRVTk5FTF9JTklUOworCisgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CisgIH0KKworICBjb25uLT50dW5uZWxfc3RhdGVbc29ja2luZGV4XSA9IFRVTk5FTF9DT01QTEVURTsKKworICAvKiBJZiBhIHByb3h5LWF1dGhvcml6YXRpb24gaGVhZGVyIHdhcyB1c2VkIGZvciB0aGUgcHJveHksIHRoZW4gd2Ugc2hvdWxkCisgICAgIG1ha2Ugc3VyZSB0aGF0IGl0IGlzbid0IGFjY2lkZW50YWxseSB1c2VkIGZvciB0aGUgZG9jdW1lbnQgcmVxdWVzdAorICAgICBhZnRlciB3ZSd2ZSBjb25uZWN0ZWQuIFNvIGxldCdzIGZyZWUgYW5kIGNsZWFyIGl0IGhlcmUuICovCisgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkKTsKKyAgY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkID0gTlVMTDsKKworICBkYXRhLT5zdGF0ZS5hdXRocHJveHkuZG9uZSA9IFRSVUU7CisKKyAgaW5mb2YgKGRhdGEsICJQcm94eSByZXBsaWVkIE9LIHRvIENPTk5FQ1QgcmVxdWVzdFxuIik7CisgIGRhdGEtPnJlcS5pZ25vcmVib2R5ID0gRkFMU0U7IC8qIHB1dCBpdCAoYmFjaykgdG8gbm9uLWlnbm9yZSBzdGF0ZSAqLworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvaHR0cF9wcm94eS5oIGIvY3VybC03LjI1LjAvbGliL2h0dHBfcHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MThjMDkzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2h0dHBfcHJveHkuaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0hUVFBfUFJPWFlfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9IVFRQX1BST1hZX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1BST1hZKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkKKy8qIGZ0cCBjYW4gdXNlIHRoaXMgYXMgd2VsbCAqLworQ1VSTGNvZGUgQ3VybF9wcm94eUNPTk5FQ1Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR1bm5lbHNvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLCB1bnNpZ25lZCBzaG9ydCByZW1vdGVfcG9ydCk7CisKKy8qIERlZmF1bHQgcHJveHkgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KKyNkZWZpbmUgUFJPWFlfVElNRU9VVCAoMzYwMCoxMDAwKQorCitDVVJMY29kZSBDdXJsX3Byb3h5X2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKworI2Vsc2UKKyNkZWZpbmUgQ3VybF9wcm94eUNPTk5FQ1QoeCx5LHosdykgQ1VSTEVfTk9UX0JVSUxUX0lOCisjZGVmaW5lIEN1cmxfcHJveHlfY29ubmVjdCh4KSBDVVJMRV9PSworI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9IVFRQX1BST1hZX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9pZG5fd2luMzIuYyBiL2N1cmwtNy4yNS4wL2xpYi9pZG5fd2luMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDI4NmMwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2lkbl93aW4zMi5jCkBAIC0wLDAgKzEsMTI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIC8qCisgICogSUROIGNvbnZlcnNpb25zIHVzaW5nIFdpbmRvd3Mga2VybmVsMzIgYW5kIG5vcm1hbGl6IGxpYnJhcmllcy4KKyAgKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfV0lOMzJfSUROCisKKyNpbmNsdWRlIDx0Y2hhci5oPgorCisjaWZkZWYgV0FOVF9JRE5fUFJPVE9UWVBFUworV0lOQkFTRUFQSSBpbnQgV0lOQVBJIElkblRvQXNjaWkoRFdPUkQsIExQQ1dTVFIsIGludCwgTFBXU1RSLCBpbnQpOworV0lOQkFTRUFQSSBpbnQgV0lOQVBJIElkblRvVW5pY29kZShEV09SRCwgTFBDV1NUUiwgaW50LCBMUFdTVFIsIGludCk7CisjZW5kaWYKKworI2RlZmluZSBJRE5fTUFYX0xFTkdUSCAyNTUKKworc3RhdGljIHdjaGFyX3QgKl9jdXJsX3dpbjMyX1VURjhfdG9fd2NoYXIoY29uc3QgY2hhciAqc3RyX3V0ZjgpCit7CisgIHdjaGFyX3QgKnN0cl93ID0gTlVMTDsKKworICBpZihzdHJfdXRmOCkgeworICAgIGludCBzdHJfd19sZW4gPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsIE1CX0VSUl9JTlZBTElEX0NIQVJTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl91dGY4LCAtMSwgTlVMTCwgMCk7CisgICAgaWYoc3RyX3dfbGVuKSB7CisgICAgICBzdHJfdyA9IG1hbGxvYyhzdHJfd19sZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgaWYoc3RyX3cpIHsKKyAgICAgICAgaWYoTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LCAwLCBzdHJfdXRmOCwgLTEsIHN0cl93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfd19sZW4pID09IDApIHsKKyAgICAgICAgICBmcmVlKHN0cl93KTsKKyAgICAgICAgICBzdHJfdyA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gc3RyX3c7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpfY3VybF93aW4zMl93Y2hhcl90b19VVEY4KGNvbnN0IHdjaGFyX3QgKnN0cl93KQoreworICBjaGFyICpzdHJfdXRmOCA9IE5VTEw7CisKKyAgaWYoc3RyX3cpIHsKKyAgICBzaXplX3Qgc3RyX3V0ZjhfbGVuID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCBzdHJfdywgLTEsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwgTlVMTCk7CisgICAgaWYoc3RyX3V0ZjhfbGVuKSB7CisgICAgICBzdHJfdXRmOCA9IG1hbGxvYyhzdHJfdXRmOF9sZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgaWYoc3RyX3V0ZjgpIHsKKyAgICAgICAgaWYoV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCBzdHJfdywgLTEsIHN0cl91dGY4LCBzdHJfdXRmOF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIEZBTFNFKSA9PSAwKSB7CisgICAgICAgICAgKHZvaWQpIEdldExhc3RFcnJvcigpOworICAgICAgICAgIGZyZWUoKHZvaWQgKilzdHJfdXRmOCk7CisgICAgICAgICAgc3RyX3V0ZjggPSBOVUxMOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgKHZvaWQpIEdldExhc3RFcnJvcigpOworICAgIH0KKyAgfQorCisgIHJldHVybiBzdHJfdXRmODsKK30KKworaW50IGN1cmxfd2luMzJfaWRuX3RvX2FzY2lpKGNvbnN0IGNoYXIgKmluLCBjaGFyICoqb3V0KQoreworICB3Y2hhcl90ICppbl93ID0gX2N1cmxfd2luMzJfVVRGOF90b193Y2hhcihpbik7CisgIGlmKGluX3cpIHsKKyAgICB3Y2hhcl90IHB1bnljb2RlW0lETl9NQVhfTEVOR1RIXTsKKyAgICBpZihJZG5Ub0FzY2lpKDAsIGluX3csIC0xLCBwdW55Y29kZSwgSUROX01BWF9MRU5HVEgpID09IDApIHsKKyAgICAgIHdwcmludGYoTCJFUlJPUiAlZCBjb252ZXJ0aW5nIHRvIFB1bnljb2RlXG4iLCBHZXRMYXN0RXJyb3IoKSk7CisgICAgICBmcmVlKGluX3cpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGZyZWUoaW5fdyk7CisKKyAgICAqb3V0ID0gKGNoYXIgKilfY3VybF93aW4zMl93Y2hhcl90b19VVEY4KHB1bnljb2RlKTsKKyAgICBpZighKCpvdXQpKSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK2ludCBjdXJsX3dpbjMyX2FzY2lpX3RvX2lkbihjb25zdCBjaGFyICppbiwgc2l6ZV90IGluX2xlbiwgY2hhciAqKm91dF91dGY4KQoreworICBpZihpbikgeworICAgIFdDSEFSIHVuaWNvZGVbSUROX01BWF9MRU5HVEhdOworCisgICAgaWYoSWRuVG9Vbmljb2RlKDAsICh3Y2hhcl90ICopaW4sIC0xLCB1bmljb2RlLCBJRE5fTUFYX0xFTkdUSCkgPT0gMCkgeworICAgICAgd3ByaW50ZihMIkVSUk9SICVkIGNvbnZlcnRpbmcgdG8gUHVueWNvZGVcbiIsIEdldExhc3RFcnJvcigpKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGNvbnN0IGNoYXIgKm91dF91dGY4ID0gX2N1cmxfd2luMzJfd2NoYXJfdG9fVVRGOCh1bmljb2RlKTsKKyAgICAgIGlmKCFvdXRfdXRmOCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKyNlbmRpZiAvKiBVU0VfV0lOMzJfSUROICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvaWYyaXAuYyBiL2N1cmwtNy4yNS4wL2xpYi9pZjJpcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMTk2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvaWYyaXAuYwpAQCAtMCwwICsxLDE5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorIyAgaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjICBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tJT19ICisjICBpbmNsdWRlIDxzeXMvc29ja2lvLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lGQUREUlNfSAorIyAgaW5jbHVkZSA8aWZhZGRycy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJPUFRTX0gKKyMgIGluY2x1ZGUgPHN0cm9wdHMuaD4KKyNlbmRpZgorI2lmZGVmIF9fVk1TCisjICBpbmNsdWRlIDxpbmV0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgImluZXRfbnRvcC5oIgorI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAiaWYyaXAuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoSEFWRV9HRVRJRkFERFJTKQorCitib29sIEN1cmxfaWZfaXNfaW50ZXJmYWNlX25hbWUoY29uc3QgY2hhciAqaW50ZXJmKQoreworICBib29sIHJlc3VsdCA9IEZBTFNFOworCisgIHN0cnVjdCBpZmFkZHJzICppZmFjZSwgKmhlYWQ7CisKKyAgaWYoZ2V0aWZhZGRycygmaGVhZCkgPj0gMCkgeworICAgIGZvcihpZmFjZT1oZWFkOyBpZmFjZSAhPSBOVUxMOyBpZmFjZT1pZmFjZS0+aWZhX25leHQpIHsKKyAgICAgIGlmKGN1cmxfc3RyZXF1YWwoaWZhY2UtPmlmYV9uYW1lLCBpbnRlcmYpKSB7CisgICAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBmcmVlaWZhZGRycyhoZWFkKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitjaGFyICpDdXJsX2lmMmlwKGludCBhZiwgY29uc3QgY2hhciAqaW50ZXJmLCBjaGFyICpidWYsIGludCBidWZfc2l6ZSkKK3sKKyAgc3RydWN0IGlmYWRkcnMgKmlmYWNlLCAqaGVhZDsKKyAgY2hhciAqaXAgPSBOVUxMOworCisgIGlmKGdldGlmYWRkcnMoJmhlYWQpID49IDApIHsKKyAgICBmb3IoaWZhY2U9aGVhZDsgaWZhY2UgIT0gTlVMTDsgaWZhY2U9aWZhY2UtPmlmYV9uZXh0KSB7CisgICAgICBpZigoaWZhY2UtPmlmYV9hZGRyICE9IE5VTEwpICYmCisgICAgICAgICAoaWZhY2UtPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gYWYpICYmCisgICAgICAgICBjdXJsX3N0cmVxdWFsKGlmYWNlLT5pZmFfbmFtZSwgaW50ZXJmKSkgeworICAgICAgICB2b2lkICphZGRyOworICAgICAgICBjaGFyIHNjb3BlWzEyXT0iIjsKKyAgICAgICAgY2hhciBpcHN0cls2NF07CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgICAgaWYoYWYgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgc2NvcGVpZCA9IDA7CisgICAgICAgICAgYWRkciA9ICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilpZmFjZS0+aWZhX2FkZHIpLT5zaW42X2FkZHI7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRAorICAgICAgICAgIC8qIEluY2x1ZGUgdGhlIHNjb3BlIG9mIHRoaXMgaW50ZXJmYWNlIGFzIHBhcnQgb2YgdGhlIGFkZHJlc3MgKi8KKyAgICAgICAgICBzY29wZWlkID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopaWZhY2UtPmlmYV9hZGRyKS0+c2luNl9zY29wZV9pZDsKKyNlbmRpZgorICAgICAgICAgIGlmKHNjb3BlaWQpCisgICAgICAgICAgICBzbnByaW50ZihzY29wZSwgc2l6ZW9mKHNjb3BlKSwgIiUlJXUiLCBzY29wZWlkKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICBhZGRyID0gJigoc3RydWN0IHNvY2thZGRyX2luICopaWZhY2UtPmlmYV9hZGRyKS0+c2luX2FkZHI7CisgICAgICAgIGlwID0gKGNoYXIgKikgQ3VybF9pbmV0X250b3AoYWYsIGFkZHIsIGlwc3RyLCBzaXplb2YoaXBzdHIpKTsKKyAgICAgICAgc25wcmludGYoYnVmLCBidWZfc2l6ZSwgIiVzJXMiLCBpcCwgc2NvcGUpOworICAgICAgICBpcCA9IGJ1ZjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGZyZWVpZmFkZHJzKGhlYWQpOworICB9CisgIHJldHVybiBpcDsKK30KKworI2VsaWYgZGVmaW5lZChIQVZFX0lPQ1RMX1NJT0NHSUZBRERSKQorCitib29sIEN1cmxfaWZfaXNfaW50ZXJmYWNlX25hbWUoY29uc3QgY2hhciAqaW50ZXJmKQoreworICAvKiBUaGlzIGlzIGhlcmUganVzdCB0byBzdXBwb3J0IHRoZSBvbGQgaW50ZXJmYWNlcyAqLworICBjaGFyIGJ1ZlsyNTZdOworCisgIGNoYXIgKmlwID0gQ3VybF9pZjJpcChBRl9JTkVULCBpbnRlcmYsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisgIHJldHVybiAoaXAgIT0gTlVMTCkgPyBUUlVFIDogRkFMU0U7Cit9CisKK2NoYXIgKkN1cmxfaWYyaXAoaW50IGFmLCBjb25zdCBjaGFyICppbnRlcmYsIGNoYXIgKmJ1ZiwgaW50IGJ1Zl9zaXplKQoreworICBzdHJ1Y3QgaWZyZXEgcmVxOworICBzdHJ1Y3QgaW5fYWRkciBpbjsKKyAgc3RydWN0IHNvY2thZGRyX2luICpzOworICBjdXJsX3NvY2tldF90IGR1bW15OworICBzaXplX3QgbGVuOworICBjaGFyICppcDsKKworICBpZighaW50ZXJmIHx8IChhZiAhPSBBRl9JTkVUKSkKKyAgICByZXR1cm4gTlVMTDsKKworICBsZW4gPSBzdHJsZW4oaW50ZXJmKTsKKyAgaWYobGVuID49IHNpemVvZihyZXEuaWZyX25hbWUpKQorICAgIHJldHVybiBOVUxMOworCisgIGR1bW15ID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgaWYoQ1VSTF9TT0NLRVRfQkFEID09IGR1bW15KQorICAgIHJldHVybiBOVUxMOworCisgIG1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisgIG1lbWNweShyZXEuaWZyX25hbWUsIGludGVyZiwgbGVuKzEpOworICByZXEuaWZyX2FkZHIuc2FfZmFtaWx5ID0gQUZfSU5FVDsKKworICBpZihpb2N0bChkdW1teSwgU0lPQ0dJRkFERFIsICZyZXEpIDwgMCkgeworICAgIHNjbG9zZShkdW1teSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBzID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZyZXEuaWZyX2FkZHI7CisgIG1lbWNweSgmaW4sICZzLT5zaW5fYWRkciwgc2l6ZW9mKGluKSk7CisgIGlwID0gKGNoYXIgKikgQ3VybF9pbmV0X250b3Aocy0+c2luX2ZhbWlseSwgJmluLCBidWYsIGJ1Zl9zaXplKTsKKworICBzY2xvc2UoZHVtbXkpOworICByZXR1cm4gaXA7Cit9CisKKyNlbHNlCisKK2Jvb2wgQ3VybF9pZl9pc19pbnRlcmZhY2VfbmFtZShjb25zdCBjaGFyICppbnRlcmYpCit7CisgICh2b2lkKSBpbnRlcmY7CisKKyAgcmV0dXJuIEZBTFNFOworfQorCitjaGFyICpDdXJsX2lmMmlwKGludCBhZiwgY29uc3QgY2hhciAqaW50ZXJmLCBjaGFyICpidWYsIGludCBidWZfc2l6ZSkKK3sKKyAgICAodm9pZCkgYWY7CisgICAgKHZvaWQpIGludGVyZjsKKyAgICAodm9pZCkgYnVmOworICAgICh2b2lkKSBidWZfc2l6ZTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvaWYyaXAuaCBiL2N1cmwtNy4yNS4wL2xpYi9pZjJpcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ODIxYjcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvaWYyaXAuaApAQCAtMCwwICsxLDY2IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0lGMklQX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfSUYySVBfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworYm9vbCBDdXJsX2lmX2lzX2ludGVyZmFjZV9uYW1lKGNvbnN0IGNoYXIgKmludGVyZik7CitjaGFyICpDdXJsX2lmMmlwKGludCBhZiwgY29uc3QgY2hhciAqaW50ZXJmLCBjaGFyICpidWYsIGludCBidWZfc2l6ZSk7CisKKyNpZmRlZiBfX0lOVEVSSVgKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKy8qIE5lZGVsY2hvIFN0YW5ldidzIHdvcmstYXJvdW5kIGZvciBTRlUgMy4wICovCitzdHJ1Y3QgaWZyZXEgeworI2RlZmluZSBJRk5BTVNJWiAxNgorI2RlZmluZSBJRkhXQUREUkxFTiA2CisgIHVuaW9uIHsKKyAgICBjaGFyIGlmcm5fbmFtZVtJRk5BTVNJWl07IC8qIGlmIG5hbWUsIGUuZy4gImVuMCIgKi8KKyAgfSBpZnJfaWZybjsKKworIHVuaW9uIHsKKyAgIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2FkZHI7CisgICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9icm9hZGFkZHI7CisgICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9uZXRtYXNrOworICAgc3RydWN0IHNvY2thZGRyIGlmcnVfaHdhZGRyOworICAgc2hvcnQgaWZydV9mbGFnczsKKyAgIGludCBpZnJ1X21ldHJpYzsKKyAgIGludCBpZnJ1X210dTsKKyB9IGlmcl9pZnJ1OworfTsKKworLyogVGhpcyBkZWZpbmUgd2FzIGFkZGVkIGJ5IERhbmllbCB0byBhdm9pZCBhbiBleHRyYSAjaWZkZWYgSU5URVJJWCBpbiB0aGUKKyAgIEMgY29kZS4gKi8KKworI2RlZmluZSBpZnJfbmFtZSBpZnJfaWZybi5pZnJuX25hbWUgLyogaW50ZXJmYWNlIG5hbWUgKi8KKyNkZWZpbmUgaWZyX2FkZHIgaWZyX2lmcnUuaWZydV9hZGRyIC8qIGFkZHJlc3MgKi8KKyNkZWZpbmUgaWZyX2Jyb2FkYWRkciBpZnJfaWZydS5pZnJ1X2Jyb2FkYWRkciAvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworI2RlZmluZSBpZnJfbmV0bWFzayBpZnJfaWZydS5pZnJ1X25ldG1hc2sgLyogaW50ZXJmYWNlIG5ldCBtYXNrICovCisjZGVmaW5lIGlmcl9mbGFncyBpZnJfaWZydS5pZnJ1X2ZsYWdzIC8qIGZsYWdzICovCisjZGVmaW5lIGlmcl9od2FkZHIgaWZyX2lmcnUuaWZydV9od2FkZHIgLyogTUFDIGFkZHJlc3MgKi8KKyNkZWZpbmUgaWZyX21ldHJpYyBpZnJfaWZydS5pZnJ1X21ldHJpYyAvKiBtZXRyaWMgKi8KKyNkZWZpbmUgaWZyX210dSBpZnJfaWZydS5pZnJ1X210dSAvKiBtdHUgKi8KKworI2RlZmluZSBTSU9DR0lGQUREUiBfSU9XKCdzJywgMTAyLCBzdHJ1Y3QgaWZyZXEpIC8qIEdldCBpZiBhZGRyICovCisjZW5kaWYgLyogaW50ZXJpeCAqLworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfSUYySVBfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2ltYXAuYyBiL2N1cmwtNy4yNS4wL2xpYi9pbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlZGE3OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9pbWFwLmMKQEAgLTAsMCArMSwxMDQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogUkZDMzUwMSBJTUFQdjQgcHJvdG9jb2wKKyAqIFJGQzUwOTIgSU1BUCBVUkwgU2NoZW1lCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0lNQVAKKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVVRTTkFNRV9ICisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBfX1ZNUworI2luY2x1ZGUgPGluLmg+CisjaW5jbHVkZSA8aW5ldC5oPgorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChORVRXQVJFKSAmJiBkZWZpbmVkKF9fTk9WRUxMX0xJQkNfXykpCisjdW5kZWYgaW5fYWRkcl90CisjZGVmaW5lIGluX2FkZHJfdCB1bnNpZ25lZCBsb25nCisjZW5kaWYKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImlmMmlwLmgiCisjaW5jbHVkZSAiaG9zdGlwLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgImVzY2FwZS5oIgorI2luY2x1ZGUgImh0dHAuaCIgLyogZm9yIEhUVFAgcHJveHkgdHVubmVsIHN0dWZmICovCisjaW5jbHVkZSAic29ja3MuaCIKKyNpbmNsdWRlICJpbWFwLmgiCisKKyNpbmNsdWRlICJzdHJ0b29mZnQuaCIKKyNpbmNsdWRlICJzdHJlcXVhbC5oIgorI2luY2x1ZGUgInNzbGdlbi5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzdHJ0b29mZnQuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKiBMb2NhbCBBUEkgZnVuY3Rpb25zICovCitzdGF0aWMgQ1VSTGNvZGUgaW1hcF9wYXJzZV91cmxfcGF0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworc3RhdGljIENVUkxjb2RlIGltYXBfcmVndWxhcl90cmFuc2ZlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIGltYXBfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSBpbWFwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOworc3RhdGljIENVUkxjb2RlIGltYXBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIGltYXBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCk7CitzdGF0aWMgQ1VSTGNvZGUgaW1hcF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBpbnQgaW1hcF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKK3N0YXRpYyBDVVJMY29kZSBpbWFwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgaW1hcF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4pOworc3RhdGljIENVUkxjb2RlIGltYXBfc3RhdGVfdXBncmFkZV90bHMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKKworLyoKKyAqIElNQVAgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9pbWFwID0geworICAiSU1BUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIGltYXBfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIGltYXBfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBpbWFwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBpbWFwX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBpbWFwX211bHRpX3N0YXRlbWFjaCwgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBpbWFwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgaW1hcF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgaW1hcF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgaW1hcF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBQT1JUX0lNQVAsICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fSU1BUCwgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9DTE9TRUFDVElPTiB8IFBST1RPUFRfTkVFRFNQV0QKKyAgfCBQUk9UT1BUX05PVVJMUVVFUlkgICAgICAgICAgICAgIC8qIGZsYWdzICovCit9OworCisKKyNpZmRlZiBVU0VfU1NMCisvKgorICogSU1BUFMgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9pbWFwcyA9IHsKKyAgIklNQVBTIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBpbWFwX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBpbWFwX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgaW1hcF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgaW1hcF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgaW1hcF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgaW1hcF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIGltYXBfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIGltYXBfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIGltYXBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9JTUFQUywgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX0lNQVAgfCBDVVJMUFJPVE9fSU1BUFMsIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfQ0xPU0VBQ1RJT04gfCBQUk9UT1BUX1NTTCB8IFBST1RPUFRfTkVFRFNQV0QKKyAgfCBQUk9UT1BUX05PVVJMUVVFUlkgICAgICAgICAgICAgIC8qIGZsYWdzICovCit9OworI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKKy8qCisgKiBIVFRQLXByb3h5ZWQgSU1BUCBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9pbWFwX3Byb3h5ID0geworICAiSU1BUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgQ3VybF9odHRwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBDdXJsX2h0dHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFBPUlRfSU1BUCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fSFRUUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisKKworI2lmZGVmIFVTRV9TU0wKKy8qCisgKiBIVFRQLXByb3h5ZWQgSU1BUFMgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfaW1hcHNfcHJveHkgPSB7CisgICJJTUFQUyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBDdXJsX2h0dHAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIEN1cmxfaHR0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9JTUFQUywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19IVFRQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKyNlbmRpZgorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGltYXBzZW5kZigpCisgKgorICogU2VuZHMgdGhlIGZvcm1hdGVkIHN0cmluZyBhcyBhbiBJTUFQIGNvbW1hbmQgdG8gYSBzZXJ2ZXIKKyAqCisgKiBEZXNpZ25lZCB0byBuZXZlciBibG9jay4KKyAqLworc3RhdGljIENVUkxjb2RlIGltYXBzZW5kZihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlkc3RyLCAvKiBpZCB0byB3YWl0IGZvciBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb24gb2YgdGhpcyBjb21tYW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICBDVVJMY29kZSByZXM7CisgIHN0cnVjdCBpbWFwX2Nvbm4gKmltYXBjID0gJmNvbm4tPnByb3RvLmltYXBjOworICB2YV9saXN0IGFwOworICB2YV9zdGFydChhcCwgZm10KTsKKworICBpbWFwYy0+aWRzdHIgPSBpZHN0cjsgLyogdGhpcyBpcyB0aGUgdGhpbmcgKi8KKworICByZXMgPSBDdXJsX3BwX3ZzZW5kZigmaW1hcGMtPnBwLCBmbXQsIGFwKTsKKworICB2YV9lbmQoYXApOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRjbWRpZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWRzW109IHsKKyAgICAiQSIsCisgICAgIkIiLAorICAgICJDIiwKKyAgICAiRCIKKyAgfTsKKworICBzdHJ1Y3QgaW1hcF9jb25uICppbWFwYyA9ICZjb25uLT5wcm90by5pbWFwYzsKKworICAvKiBnZXQgdGhlIG5leHQgaWQsIGJ1dCB3cmFwIGF0IGVuZCBvZiB0YWJsZSAqLworICBpbWFwYy0+Y21kaWQgPSAoaW50KSgoaW1hcGMtPmNtZGlkKzEpICUgKHNpemVvZihpZHMpL3NpemVvZihpZHNbMF0pKSk7CisKKyAgcmV0dXJuIGlkc1tpbWFwYy0+Y21kaWRdOworfQorCisvKiBGb3IgdGhlIElNQVAgInByb3RvY29sIGNvbm5lY3QiIGFuZCAiZG9pbmciIHBoYXNlcyBvbmx5ICovCitzdGF0aWMgaW50IGltYXBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3sKKyAgcmV0dXJuIEN1cmxfcHBfZ2V0c29jaygmY29ubi0+cHJvdG8uaW1hcGMucHAsIHNvY2tzLCBudW1zb2Nrcyk7Cit9CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGZvciBhbiBpbWFwIHN0YXR1cyBjb2RlIGF0IHRoZSBzdGFydCBvZiB0aGUKKyAgIGdpdmVuIHN0cmluZyAqLworc3RhdGljIGludCBpbWFwX2VuZG9mcmVzcChzdHJ1Y3QgcGluZ3BvbmcgKnBwLCBpbnQgKnJlc3ApCit7CisgIGNoYXIgKmxpbmUgPSBwcC0+bGluZXN0YXJ0X3Jlc3A7CisgIHNpemVfdCBsZW4gPSBwcC0+bnJlYWRfcmVzcDsKKyAgc3RydWN0IGltYXBfY29ubiAqaW1hcGMgPSAmcHAtPmNvbm4tPnByb3RvLmltYXBjOworICBjb25zdCBjaGFyICppZCA9IGltYXBjLT5pZHN0cjsKKyAgc2l6ZV90IGlkX2xlbiA9IHN0cmxlbihpZCk7CisKKyAgaWYobGVuID49IGlkX2xlbiArIDMpIHsKKyAgICBpZighbWVtY21wKGlkLCBsaW5lLCBpZF9sZW4pICYmIChsaW5lW2lkX2xlbl0gPT0gJyAnKSApIHsKKyAgICAgIC8qIGVuZCBvZiByZXNwb25zZSAqLworICAgICAgKnJlc3AgPSBsaW5lW2lkX2xlbisxXTsgLyogTywgTiBvciBCICovCisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgZWxzZSBpZigoaW1hcGMtPnN0YXRlID09IElNQVBfRkVUQ0gpICYmCisgICAgICAgICAgICAhbWVtY21wKCIqICIsIGxpbmUsIDIpICkgeworICAgICAgLyogRkVUQ0ggcmVzcG9uc2Ugd2UncmUgaW50ZXJlc3RlZCBpbiAqLworICAgICAgKnJlc3AgPSAnKic7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIEZBTFNFOyAvKiBub3RoaW5nIGZvciB1cyAqLworfQorCisvKiBUaGlzIGlzIHRoZSBPTkxZIHdheSB0byBjaGFuZ2UgSU1BUCBzdGF0ZSEgKi8KK3N0YXRpYyB2b2lkIHN0YXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgIGltYXBzdGF0ZSBuZXdzdGF0ZSkKK3sKKyNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCisgIC8qIGZvciBkZWJ1ZyBwdXJwb3NlcyAqLworICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzW109eworICAgICJTVE9QIiwKKyAgICAiU0VSVkVSR1JFRVQiLAorICAgICJMT0dJTiIsCisgICAgIlNUQVJUVExTIiwKKyAgICAiVVBHUkFERVRMUyIsCisgICAgIlNFTEVDVCIsCisgICAgIkZFVENIIiwKKyAgICAiTE9HT1VUIiwKKyAgICAvKiBMQVNUICovCisgIH07CisjZW5kaWYKKyAgc3RydWN0IGltYXBfY29ubiAqaW1hcGMgPSAmY29ubi0+cHJvdG8uaW1hcGM7CisjaWYgZGVmaW5lZChERUJVR0JVSUxEKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQorICBpZihpbWFwYy0+c3RhdGUgIT0gbmV3c3RhdGUpCisgICAgaW5mb2YoY29ubi0+ZGF0YSwgIklNQVAgJXAgc3RhdGUgY2hhbmdlIGZyb20gJXMgdG8gJXNcbiIsCisgICAgICAgICAgaW1hcGMsIG5hbWVzW2ltYXBjLT5zdGF0ZV0sIG5hbWVzW25ld3N0YXRlXSk7CisjZW5kaWYKKyAgaW1hcGMtPnN0YXRlID0gbmV3c3RhdGU7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBpbWFwX3N0YXRlX2xvZ2luKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3QgRlRQICppbWFwID0gY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8uaW1hcDsKKyAgY29uc3QgY2hhciAqc3RyOworCisgIHN0ciA9IGdldGNtZGlkKGNvbm4pOworCisgIC8qIHNlbmQgVVNFUiBhbmQgcGFzc3dvcmQgKi8KKyAgcmVzdWx0ID0gaW1hcHNlbmRmKGNvbm4sIHN0ciwgIiVzIExPR0lOICVzICVzIiwgc3RyLAorICAgICAgICAgICAgICAgICAgICAgaW1hcC0+dXNlcj9pbWFwLT51c2VyOiIiLAorICAgICAgICAgICAgICAgICAgICAgaW1hcC0+cGFzc3dkP2ltYXAtPnBhc3N3ZDoiIik7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIHN0YXRlKGNvbm4sIElNQVBfTE9HSU4pOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworI2lmZGVmIFVTRV9TU0wKK3N0YXRpYyB2b2lkIGltYXBfdG9faW1hcHMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBjb25uLT5oYW5kbGVyID0gJkN1cmxfaGFuZGxlcl9pbWFwczsKK30KKyNlbHNlCisjZGVmaW5lIGltYXBfdG9faW1hcHMoeCkgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKKy8qIGZvciBTVEFSVFRMUyByZXNwb25zZXMgKi8KK3N0YXRpYyBDVVJMY29kZSBpbWFwX3N0YXRlX3N0YXJ0dGxzX3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW1hcGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYXBzdGF0ZSBpbnN0YXRlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICAodm9pZClpbnN0YXRlOyAvKiBubyB1c2UgZm9yIHRoaXMgeWV0ICovCisKKyAgaWYoaW1hcGNvZGUgIT0gJ08nKSB7CisgICAgaWYoZGF0YS0+c2V0LnVzZV9zc2wgIT0gQ1VSTFVTRVNTTF9UUlkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJTVEFSVFRMUyBkZW5pZWQuICVjIiwgaW1hcGNvZGUpOworICAgICAgcmVzdWx0ID0gQ1VSTEVfVVNFX1NTTF9GQUlMRUQ7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJlc3VsdCA9IGltYXBfc3RhdGVfbG9naW4oY29ubik7CisgIH0KKyAgZWxzZSB7CisgICAgaWYoZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgPT0gQ3VybF9pZl9tdWx0aSkgeworICAgICAgc3RhdGUoY29ubiwgSU1BUF9VUEdSQURFVExTKTsKKyAgICAgIHJldHVybiBpbWFwX3N0YXRlX3VwZ3JhZGVfdGxzKGNvbm4pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfc3NsX2Nvbm5lY3QoY29ubiwgRklSU1RTT0NLRVQpOworICAgICAgaWYoQ1VSTEVfT0sgPT0gcmVzdWx0KSB7CisgICAgICAgIGltYXBfdG9faW1hcHMoY29ubik7CisgICAgICAgIHJlc3VsdCA9IGltYXBfc3RhdGVfbG9naW4oY29ubik7CisgICAgICB9CisgICAgfQorICB9CisgIHN0YXRlKGNvbm4sIElNQVBfU1RPUCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBpbWFwX3N0YXRlX3VwZ3JhZGVfdGxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IGltYXBfY29ubiAqaW1hcGMgPSAmY29ubi0+cHJvdG8uaW1hcGM7CisgIENVUkxjb2RlIHJlc3VsdDsKKworICByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIEZJUlNUU09DS0VULCAmaW1hcGMtPnNzbGRvbmUpOworCisgIGlmKGltYXBjLT5zc2xkb25lKSB7CisgICAgaW1hcF90b19pbWFwcyhjb25uKTsKKyAgICByZXN1bHQgPSBpbWFwX3N0YXRlX2xvZ2luKGNvbm4pOworICAgIHN0YXRlKGNvbm4sIElNQVBfU1RPUCk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBmb3IgTE9HSU4gcmVzcG9uc2VzICovCitzdGF0aWMgQ1VSTGNvZGUgaW1hcF9zdGF0ZV9sb2dpbl9yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGltYXBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFwc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLworCisgIGlmKGltYXBjb2RlICE9ICdPJykgeworICAgIGZhaWxmKGRhdGEsICJBY2Nlc3MgZGVuaWVkLiAlYyIsIGltYXBjb2RlKTsKKyAgICByZXN1bHQgPSBDVVJMRV9MT0dJTl9ERU5JRUQ7CisgIH0KKworICBzdGF0ZShjb25uLCBJTUFQX1NUT1ApOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBmb3IgdGhlIChmaXJzdCBsaW5lIG9mKSBGRVRDSCBCT0RZW1RFWFRdIHJlc3BvbnNlICovCitzdGF0aWMgQ1VSTGNvZGUgaW1hcF9zdGF0ZV9mZXRjaF9yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGltYXBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFwc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IGltYXBfY29ubiAqaW1hcGMgPSAmY29ubi0+cHJvdG8uaW1hcGM7CisgIHN0cnVjdCBGVFAgKmltYXAgPSBkYXRhLT5zdGF0ZS5wcm90by5pbWFwOworICBzdHJ1Y3QgcGluZ3BvbmcgKnBwID0gJmltYXBjLT5wcDsKKyAgY29uc3QgY2hhciAqcHRyID0gZGF0YS0+c3RhdGUuYnVmZmVyOworICAodm9pZClpbnN0YXRlOyAvKiBubyB1c2UgZm9yIHRoaXMgeWV0ICovCisKKyAgaWYoJyonICE9IGltYXBjb2RlKSB7CisgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIDApOworICAgIHN0YXRlKGNvbm4sIElNQVBfU1RPUCk7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgLyogU29tZXRoaW5nIGxpa2UgdGhpcyBjb21lcyAiKiAxIEZFVENIIChCT0RZW1RFWFRdIHsyMDIxfVxyIiAqLworICB3aGlsZSgqcHRyICYmICgqcHRyICE9ICd7JykpCisgICAgcHRyKys7CisKKyAgaWYoKnB0ciA9PSAneycpIHsKKyAgICBjdXJsX29mZl90IGZpbGVzaXplID0gY3VybHhfc3RydG9vZmZ0KHB0cisxLCBOVUxMLCAxMCk7CisgICAgaWYoZmlsZXNpemUpCisgICAgICBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoZGF0YSwgZmlsZXNpemUpOworCisgICAgaW5mb2YoZGF0YSwgIkZvdW5kICUiIEZPUk1BVF9PRkZfVFUgIiBieXRlcyB0byBkb3dubG9hZFxuIiwgZmlsZXNpemUpOworCisgICAgaWYocHAtPmNhY2hlKSB7CisgICAgICAvKiBBdCB0aGlzIHBvaW50IHRoZXJlIGlzIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgaGVhZGVyICJjYWNoZSIgdGhhdCBpcworICAgICAgICAgYWN0dWFsbHkgYm9keSBjb250ZW50LCBzZW5kIGl0IGFzIGJvZHkgYW5kIHRoZW4gc2tpcCBpdC4gRG8gbm90ZQorICAgICAgICAgdGhhdCB0aGVyZSBtYXkgZXZlbiBiZSBhZGRpdGlvbmFsICJoZWFkZXJzIiBhZnRlciB0aGUgYm9keS4gKi8KKyAgICAgIHNpemVfdCBjaHVuayA9IHBwLT5jYWNoZV9zaXplOworCisgICAgICBpZihjaHVuayA+IChzaXplX3QpZmlsZXNpemUpCisgICAgICAgIC8qIHRoZSBjb252ZXJzaW9uIGZyb20gY3VybF9vZmZfdCB0byBzaXplX3QgaXMgYWx3YXlzIGZpbmUgaGVyZSAqLworICAgICAgICBjaHVuayA9IChzaXplX3QpZmlsZXNpemU7CisKKyAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIHBwLT5jYWNoZSwgY2h1bmspOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICBmaWxlc2l6ZSAtPSBjaHVuazsKKworICAgICAgLyogd2UndmUgbm93IHVzZWQgcGFydHMgb2Ygb3IgdGhlIGVudGlyZSBjYWNoZSAqLworICAgICAgaWYocHAtPmNhY2hlX3NpemUgPiBjaHVuaykgeworICAgICAgICAvKiBwYXJ0IG9mLCBtb3ZlIHRoZSB0cmFpbGluZyBkYXRhIHRvIHRoZSBzdGFydCBhbmQgcmVkdWNlIHRoZSBzaXplICovCisgICAgICAgIG1lbW1vdmUocHAtPmNhY2hlLCBwcC0+Y2FjaGUrY2h1bmssCisgICAgICAgICAgICAgICAgcHAtPmNhY2hlX3NpemUgLSBjaHVuayk7CisgICAgICAgIHBwLT5jYWNoZV9zaXplIC09IGNodW5rOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIGNhY2hlIGlzIGRyYWluZWQgKi8KKyAgICAgICAgZnJlZShwcC0+Y2FjaGUpOworICAgICAgICBwcC0+Y2FjaGUgPSBOVUxMOworICAgICAgICBwcC0+Y2FjaGVfc2l6ZSA9IDA7CisgICAgICB9CisgICAgfQorCisgICAgaW5mb2YoZGF0YSwgIkZpbGVzaXplIGxlZnQ6ICUiIEZPUk1BVF9PRkZfVCAiXG4iLCBmaWxlc2l6ZSk7CisKKyAgICBpZighZmlsZXNpemUpCisgICAgICAvKiB0aGUgZW50aXJlIGRhdGEgaXMgYWxyZWFkeSB0cmFuc2ZlcnJlZCEgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOworICAgIGVsc2UKKyAgICAgIC8qIElNQVAgZG93bmxvYWQgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIGZpbGVzaXplLCBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hcC0+Ynl0ZWNvdW50cCwgLTEsIE5VTEwpOyAvKiBubyB1cGxvYWQgaGVyZSAqLworCisgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gZmlsZXNpemU7CisgIH0KKyAgZWxzZQorICAgIC8qIFdlIGRvbid0IGtub3cgaG93IHRvIHBhcnNlIHRoaXMgbGluZSAqLworICAgIHJlc3VsdCA9IENVUkxFX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFk7IC8qIFRPRE86IGZpeCB0aGlzIGNvZGUgKi8KKworICBzdGF0ZShjb25uLCBJTUFQX1NUT1ApOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBzdGFydCB0aGUgRE8gcGhhc2UgKi8KK3N0YXRpYyBDVVJMY29kZSBpbWFwX3NlbGVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgaW1hcF9jb25uICppbWFwYyA9ICZjb25uLT5wcm90by5pbWFwYzsKKyAgY29uc3QgY2hhciAqc3RyOworCisgIHN0ciA9IGdldGNtZGlkKGNvbm4pOworCisgIHJlc3VsdCA9IGltYXBzZW5kZihjb25uLCBzdHIsICIlcyBTRUxFQ1QgJXMiLCBzdHIsCisgICAgICAgICAgICAgICAgICAgICBpbWFwYy0+bWFpbGJveD9pbWFwYy0+bWFpbGJveDoiIik7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIHN0YXRlKGNvbm4sIElNQVBfU0VMRUNUKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIGltYXBfZmV0Y2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgY29uc3QgY2hhciAqc3RyOworCisgIHN0ciA9IGdldGNtZGlkKGNvbm4pOworCisgIC8qIFRPRE86IG1ha2UgdGhpcyBzZWxlY3QgdGhlIGNvcnJlY3QgbWFpbAorICAgKiBVc2UgIjEgYm9keVt0ZXh0XSIgdG8gZ2V0IHRoZSBmdWxsIG1haWwgYm9keSBvZiBtYWlsIDEKKyAgICovCisgIHJlc3VsdCA9IGltYXBzZW5kZihjb25uLCBzdHIsICIlcyBGRVRDSCAxIEJPRFlbVEVYVF0iLCBzdHIpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAvKgorICAgKiBXaGVuIGlzc3VlZCwgdGhlIHNlcnZlciB3aWxsIHJlc3BvbmQgd2l0aCBhIHNpbmdsZSBsaW5lIHNpbWlsYXIgdG8KKyAgICogJyogMSBGRVRDSCAoQk9EWVtURVhUXSB7MjAyMX0nCisgICAqCisgICAqIElkZW50aWZ5aW5nIHRoZSBmZXRjaCBhbmQgaG93IG1hbnkgYnl0ZXMgb2YgY29udGVudHMgd2UgY2FuIGV4cGVjdC4gV2UKKyAgICogbXVzdCBleHRyYWN0IHRoYXQgbnVtYmVyIGJlZm9yZSBjb250aW51aW5nIHRvICJkb3dubG9hZCBhcyB1c3VhbCIuCisgICAqLworCisgIHN0YXRlKGNvbm4sIElNQVBfRkVUQ0gpOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBmb3IgU0VMRUNUIHJlc3BvbnNlcyAqLworc3RhdGljIENVUkxjb2RlIGltYXBfc3RhdGVfc2VsZWN0X3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGltYXBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hcHN0YXRlIGluc3RhdGUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KKworICBpZihpbWFwY29kZSAhPSAnTycpIHsKKyAgICBmYWlsZihkYXRhLCAiU2VsZWN0IGZhaWxlZCIpOworICAgIHJlc3VsdCA9IENVUkxFX0xPR0lOX0RFTklFRDsKKyAgfQorICBlbHNlCisgICAgcmVzdWx0ID0gaW1hcF9mZXRjaChjb25uKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIGltYXBfc3RhdGVtYWNoX2FjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisgIGludCBpbWFwY29kZTsKKyAgc3RydWN0IGltYXBfY29ubiAqaW1hcGMgPSAmY29ubi0+cHJvdG8uaW1hcGM7CisgIHN0cnVjdCBwaW5ncG9uZyAqcHAgPSAmaW1hcGMtPnBwOworICBzaXplX3QgbnJlYWQgPSAwOworCisgIC8qIGJ1c3kgdXBncmFkaW5nIHRoZSBjb25uZWN0aW9uOyByaWdodCBub3cgYWxsIEkvTyBpcyBTU0wvVExTLCBub3QgSU1BUCAqLworICBpZihpbWFwYy0+c3RhdGUgPT0gSU1BUF9VUEdSQURFVExTKQorICAgIHJldHVybiBpbWFwX3N0YXRlX3VwZ3JhZGVfdGxzKGNvbm4pOworCisgIGlmKHBwLT5zZW5kbGVmdCkKKyAgICByZXR1cm4gQ3VybF9wcF9mbHVzaHNlbmQocHApOworCisgIC8qIHdlIHJlYWQgYSBwaWVjZSBvZiByZXNwb25zZSAqLworICByZXN1bHQgPSBDdXJsX3BwX3JlYWRyZXNwKHNvY2ssIHBwLCAmaW1hcGNvZGUsICZucmVhZCk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIGlmKGltYXBjb2RlKQorICAvKiB3ZSBoYXZlIG5vdyByZWNlaXZlZCBhIGZ1bGwgSU1BUCBzZXJ2ZXIgcmVzcG9uc2UgKi8KKyAgc3dpdGNoKGltYXBjLT5zdGF0ZSkgeworICBjYXNlIElNQVBfU0VSVkVSR1JFRVQ6CisgICAgaWYoaW1hcGNvZGUgIT0gJ08nKSB7CisgICAgICBmYWlsZihkYXRhLCAiR290IHVuZXhwZWN0ZWQgaW1hcC1zZXJ2ZXIgcmVzcG9uc2UiKTsKKyAgICAgIHJldHVybiBDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZOworICAgIH0KKworICAgIGlmKGRhdGEtPnNldC51c2Vfc3NsICYmICFjb25uLT5zc2xbRklSU1RTT0NLRVRdLnVzZSkgeworICAgICAgLyogV2UgZG9uJ3QgaGF2ZSBhIFNTTC9UTFMgY29ubmVjdGlvbiB5ZXQsIGJ1dCBTU0wgaXMgcmVxdWVzdGVkLiBTd2l0Y2gKKyAgICAgICAgIHRvIFRMUyBjb25uZWN0aW9uIG5vdyAqLworICAgICAgY29uc3QgY2hhciAqc3RyOworCisgICAgICBzdHIgPSBnZXRjbWRpZChjb25uKTsKKyAgICAgIHJlc3VsdCA9IGltYXBzZW5kZihjb25uLCBzdHIsICIlcyBTVEFSVFRMUyIsIHN0cik7CisgICAgICBzdGF0ZShjb25uLCBJTUFQX1NUQVJUVExTKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgcmVzdWx0ID0gaW1hcF9zdGF0ZV9sb2dpbihjb25uKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIGJyZWFrOworCisgIGNhc2UgSU1BUF9MT0dJTjoKKyAgICByZXN1bHQgPSBpbWFwX3N0YXRlX2xvZ2luX3Jlc3AoY29ubiwgaW1hcGNvZGUsIGltYXBjLT5zdGF0ZSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBJTUFQX1NUQVJUVExTOgorICAgIHJlc3VsdCA9IGltYXBfc3RhdGVfc3RhcnR0bHNfcmVzcChjb25uLCBpbWFwY29kZSwgaW1hcGMtPnN0YXRlKTsKKyAgICBicmVhazsKKworICBjYXNlIElNQVBfRkVUQ0g6CisgICAgcmVzdWx0ID0gaW1hcF9zdGF0ZV9mZXRjaF9yZXNwKGNvbm4sIGltYXBjb2RlLCBpbWFwYy0+c3RhdGUpOworICAgIGJyZWFrOworCisgIGNhc2UgSU1BUF9TRUxFQ1Q6CisgICAgcmVzdWx0ID0gaW1hcF9zdGF0ZV9zZWxlY3RfcmVzcChjb25uLCBpbWFwY29kZSwgaW1hcGMtPnN0YXRlKTsKKyAgICBicmVhazsKKworICBjYXNlIElNQVBfTE9HT1VUOgorICAgIC8qIGZhbGx0aHJvdWdoLCBqdXN0IHN0b3AhICovCisgIGRlZmF1bHQ6CisgICAgLyogaW50ZXJuYWwgZXJyb3IgKi8KKyAgICBzdGF0ZShjb25uLCBJTUFQX1NUT1ApOworICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgZG9uZSBmcm9tIG11bHRpLmMgKi8KK3N0YXRpYyBDVVJMY29kZSBpbWFwX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCit7CisgIHN0cnVjdCBpbWFwX2Nvbm4gKmltYXBjID0gJmNvbm4tPnByb3RvLmltYXBjOworICBDVVJMY29kZSByZXN1bHQ7CisKKyAgaWYoKGNvbm4tPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9TU0wpICYmICFpbWFwYy0+c3NsZG9uZSkKKyAgICByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIEZJUlNUU09DS0VULCAmaW1hcGMtPnNzbGRvbmUpOworICBlbHNlCisgICAgcmVzdWx0ID0gQ3VybF9wcF9tdWx0aV9zdGF0ZW1hY2goJmltYXBjLT5wcCk7CisKKyAgKmRvbmUgPSAoaW1hcGMtPnN0YXRlID09IElNQVBfU1RPUCkgPyBUUlVFIDogRkFMU0U7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIGltYXBfZWFzeV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgaW1hcF9jb25uICppbWFwYyA9ICZjb25uLT5wcm90by5pbWFwYzsKKyAgc3RydWN0IHBpbmdwb25nICpwcCA9ICZpbWFwYy0+cHA7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIHdoaWxlKGltYXBjLT5zdGF0ZSAhPSBJTUFQX1NUT1ApIHsKKyAgICByZXN1bHQgPSBDdXJsX3BwX2Vhc3lfc3RhdGVtYWNoKHBwKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgc3RydWN0IElNQVAgZm9yIHRoZSBjdXJyZW50IFNlc3Npb25IYW5kbGUuICBJZgorICogbmVlZCBiZS4KKyAqLworc3RhdGljIENVUkxjb2RlIGltYXBfaW5pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IEZUUCAqaW1hcCA9IGRhdGEtPnN0YXRlLnByb3RvLmltYXA7CisgIGlmKCFpbWFwKSB7CisgICAgaW1hcCA9IGRhdGEtPnN0YXRlLnByb3RvLmltYXAgPSBjYWxsb2Moc2l6ZW9mKHN0cnVjdCBGVFApLCAxKTsKKyAgICBpZighaW1hcCkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgLyogZ2V0IHNvbWUgaW5pdGlhbCBkYXRhIGludG8gdGhlIGltYXAgc3RydWN0ICovCisgIGltYXAtPmJ5dGVjb3VudHAgPSAmZGF0YS0+cmVxLmJ5dGVjb3VudDsKKworICAvKiBObyBuZWVkIHRvIGR1cGxpY2F0ZSB1c2VyK3Bhc3N3b3JkLCB0aGUgY29ubmVjdGRhdGEgc3RydWN0IHdvbid0IGNoYW5nZQorICAgICBkdXJpbmcgYSBzZXNzaW9uLCBidXQgd2UgcmUtaW5pdCB0aGVtIGhlcmUgc2luY2Ugb24gc3Vic2VxdWVudCBpbml0cworICAgICBzaW5jZSB0aGUgY29ubiBzdHJ1Y3QgbWF5IGhhdmUgY2hhbmdlZCBvciBiZWVuIHJlcGxhY2VkLgorICAqLworICBpbWFwLT51c2VyID0gY29ubi0+dXNlcjsKKyAgaW1hcC0+cGFzc3dkID0gY29ubi0+cGFzc3dkOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIGltYXBfY29ubmVjdCgpIHNob3VsZCBkbyBldmVyeXRoaW5nIHRoYXQgaXMgdG8gYmUgY29uc2lkZXJlZCBhIHBhcnQgb2YKKyAqIHRoZSBjb25uZWN0aW9uIHBoYXNlLgorICoKKyAqIFRoZSB2YXJpYWJsZSAnZG9uZScgcG9pbnRzIHRvIHdpbGwgYmUgVFJVRSBpZiB0aGUgcHJvdG9jb2wtbGF5ZXIgY29ubmVjdAorICogcGhhc2UgaXMgZG9uZSB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgb3IgRkFMU0UgaXMgbm90LiBXaGVuIGNhbGxlZCBhcworICogYSBwYXJ0IG9mIHRoZSBlYXN5IGludGVyZmFjZSwgaXQgd2lsbCBhbHdheXMgYmUgVFJVRS4KKyAqLworc3RhdGljIENVUkxjb2RlIGltYXBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKSAvKiBzZWUgZGVzY3JpcHRpb24gYWJvdmUgKi8KK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3QgaW1hcF9jb25uICppbWFwYyA9ICZjb25uLT5wcm90by5pbWFwYzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9Y29ubi0+ZGF0YTsKKyAgc3RydWN0IHBpbmdwb25nICpwcCA9ICZpbWFwYy0+cHA7CisKKyAgKmRvbmUgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBJZiB0aGVyZSBhbHJlYWR5IGlzIGEgcHJvdG9jb2wtc3BlY2lmaWMgc3RydWN0IGFsbG9jYXRlZCBmb3IgdGhpcworICAgICBzZXNzaW9uaGFuZGxlLCBkZWFsIHdpdGggaXQgKi8KKyAgQ3VybF9yZXNldF9yZXFwcm90byhjb25uKTsKKworICByZXN1bHQgPSBpbWFwX2luaXQoY29ubik7CisgIGlmKENVUkxFX09LICE9IHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIC8qIFdlIGFsd2F5cyBzdXBwb3J0IHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgb24gaW1hcCAqLworICBjb25uLT5iaXRzLmNsb3NlID0gRkFMU0U7CisKKyAgcHAtPnJlc3BvbnNlX3RpbWUgPSBSRVNQX1RJTUVPVVQ7IC8qIHNldCBkZWZhdWx0IHJlc3BvbnNlIHRpbWUtb3V0ICovCisgIHBwLT5zdGF0ZW1hY2hfYWN0ID0gaW1hcF9zdGF0ZW1hY2hfYWN0OworICBwcC0+ZW5kb2ZyZXNwID0gaW1hcF9lbmRvZnJlc3A7CisgIHBwLT5jb25uID0gY29ubjsKKworICBpZigoY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCkgJiYKKyAgICAgZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgIT0gQ3VybF9pZl9tdWx0aSkgeworICAgIC8qIEJMT0NLSU5HICovCisgICAgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdChjb25uLCBGSVJTVFNPQ0tFVCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIEN1cmxfcHBfaW5pdChwcCk7IC8qIGluaXQgZ2VuZXJpYyBwaW5ncG9uZyBkYXRhICovCisKKyAgLyogV2hlbiB3ZSBjb25uZWN0LCB3ZSBzdGFydCBpbiB0aGUgc3RhdGUgd2hlcmUgd2UgYXdhaXQgdGhlIHNlcnZlciBncmVldGluZworICAgICByZXNwb25zZSAqLworICBzdGF0ZShjb25uLCBJTUFQX1NFUlZFUkdSRUVUKTsKKyAgaW1hcGMtPmlkc3RyID0gIioiOyAvKiB3ZSBzdGFydCBvZmYgd2FpdGluZyBmb3IgYSAnKicgcmVzcG9uc2UgKi8KKworICBpZihkYXRhLT5zdGF0ZS51c2VkX2ludGVyZmFjZSA9PSBDdXJsX2lmX211bHRpKQorICAgIHJlc3VsdCA9IGltYXBfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvbmUpOworICBlbHNlIHsKKyAgICByZXN1bHQgPSBpbWFwX2Vhc3lfc3RhdGVtYWNoKGNvbm4pOworICAgIGlmKCFyZXN1bHQpCisgICAgICAqZG9uZSA9IFRSVUU7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBpbWFwX2RvbmUoKQorICoKKyAqIFRoZSBET05FIGZ1bmN0aW9uLiBUaGlzIGRvZXMgd2hhdCBuZWVkcyB0byBiZSBkb25lIGFmdGVyIGEgc2luZ2xlIERPIGhhcworICogcGVyZm9ybWVkLgorICoKKyAqIElucHV0IGFyZ3VtZW50IGlzIGFscmVhZHkgY2hlY2tlZCBmb3IgdmFsaWRpdHkuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBpbWFwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbWF0dXJlKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBGVFAgKmltYXAgPSBkYXRhLT5zdGF0ZS5wcm90by5pbWFwOworICBDVVJMY29kZSByZXN1bHQ9Q1VSTEVfT0s7CisgICh2b2lkKXByZW1hdHVyZTsKKworICBpZighaW1hcCkKKyAgICAvKiBXaGVuIHRoZSBlYXN5IGhhbmRsZSBpcyByZW1vdmVkIGZyb20gdGhlIG11bHRpIHdoaWxlIGxpYmN1cmwgaXMgc3RpbGwKKyAgICAgKiB0cnlpbmcgdG8gcmVzb2x2ZSB0aGUgaG9zdCBuYW1lLCBpdCBzZWVtcyB0aGF0IHRoZSBpbWFwIHN0cnVjdCBpcyBub3QKKyAgICAgKiB5ZXQgaW5pdGlhbGl6ZWQsIGJ1dCB0aGUgcmVtb3ZhbCBhY3Rpb24gY2FsbHMgQ3VybF9kb25lKCkgd2hpY2ggY2FsbHMKKyAgICAgKiB0aGlzIGZ1bmN0aW9uLiBTbyB3ZSBzaW1wbHkgcmV0dXJuIHN1Y2Nlc3MgaWYgbm8gaW1hcCBwb2ludGVyIGlzIHNldC4KKyAgICAgKi8KKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgaWYoc3RhdHVzKSB7CisgICAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7IC8qIG1hcmtlZCBmb3IgY2xvc3VyZSAqLworICAgIHJlc3VsdCA9IHN0YXR1czsgICAgICAvKiB1c2UgdGhlIGFscmVhZHkgc2V0IGVycm9yIGNvZGUgKi8KKyAgfQorCisgIC8qIGNsZWFyIHRoZXNlIGZvciBuZXh0IGNvbm5lY3Rpb24gKi8KKyAgaW1hcC0+dHJhbnNmZXIgPSBGVFBUUkFOU0ZFUl9CT0RZOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGltYXBfcGVyZm9ybSgpCisgKgorICogVGhpcyBpcyB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIGZvciBJTUFQLiBHZXQgYSBmaWxlL2RpcmVjdG9yeSBhY2NvcmRpbmcgdG8KKyAqIHRoZSBvcHRpb25zIHByZXZpb3VzbHkgc2V0dXAuCisgKi8KKworc3RhdGljCitDVVJMY29kZSBpbWFwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29ubmVjdGVkLCAgLyogY29ubmVjdCBzdGF0dXMgYWZ0ZXIgUEFTViAvIFBPUlQgKi8KKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgLyogdGhpcyBpcyBJTUFQIGFuZCBubyBwcm94eSAqLworICBDVVJMY29kZSByZXN1bHQ9Q1VSTEVfT0s7CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKKworICBpZihjb25uLT5kYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKKyAgICAvKiByZXF1ZXN0ZWQgbm8gYm9keSBtZWFucyBubyB0cmFuc2Zlci4uLiAqLworICAgIHN0cnVjdCBGVFAgKmltYXAgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5pbWFwOworICAgIGltYXAtPnRyYW5zZmVyID0gRlRQVFJBTlNGRVJfSU5GTzsKKyAgfQorCisgICpkb3BoYXNlX2RvbmUgPSBGQUxTRTsgLyogbm90IGRvbmUgeWV0ICovCisKKyAgLyogc3RhcnQgdGhlIGZpcnN0IGNvbW1hbmQgaW4gdGhlIERPIHBoYXNlICovCisgIHJlc3VsdCA9IGltYXBfc2VsZWN0KGNvbm4pOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgaWYoY29ubi0+ZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgPT0gQ3VybF9pZl9tdWx0aSkKKyAgICByZXN1bHQgPSBpbWFwX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworICBlbHNlIHsKKyAgICByZXN1bHQgPSBpbWFwX2Vhc3lfc3RhdGVtYWNoKGNvbm4pOworICAgICpkb3BoYXNlX2RvbmUgPSBUUlVFOyAvKiB3aXRoIHRoZSBlYXN5IGludGVyZmFjZSB3ZSBhcmUgZG9uZSBoZXJlICovCisgIH0KKyAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF07CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogaW1hcF9kbygpCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIGFzICdjdXJsX2RvJyBmdW5jdGlvbi4gSXQgZGVjb2RlcyB0aGUgcGF0aAorICogcGFydHMgZXRjIGFzIGEgd3JhcHBlciB0byB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIChpbWFwX3BlcmZvcm0pLgorICoKKyAqIFRoZSBpbnB1dCBhcmd1bWVudCBpcyBhbHJlYWR5IGNoZWNrZWQgZm9yIHZhbGlkaXR5LgorICovCitzdGF0aWMgQ1VSTGNvZGUgaW1hcF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJldGNvZGUgPSBDVVJMRV9PSzsKKworICAqZG9uZSA9IEZBTFNFOyAvKiBkZWZhdWx0IHRvIGZhbHNlICovCisKKyAgLyoKKyAgICBTaW5jZSBjb25uZWN0aW9ucyBjYW4gYmUgcmUtdXNlZCBiZXR3ZWVuIFNlc3Npb25IYW5kbGVzLCB0aGlzIG1pZ2h0IGJlIGEKKyAgICBjb25uZWN0aW9uIGFscmVhZHkgZXhpc3RpbmcgYnV0IG9uIGEgZnJlc2ggU2Vzc2lvbkhhbmRsZSBzdHJ1Y3Qgc28gd2UgbXVzdAorICAgIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgZ29vZCAnc3RydWN0IElNQVAnIHRvIHBsYXkgd2l0aC4gRm9yIG5ldyBjb25uZWN0aW9ucywKKyAgICB0aGUgc3RydWN0IElNQVAgaXMgYWxsb2NhdGVkIGFuZCBzZXR1cCBpbiB0aGUgaW1hcF9jb25uZWN0KCkgZnVuY3Rpb24uCisgICovCisgIEN1cmxfcmVzZXRfcmVxcHJvdG8oY29ubik7CisgIHJldGNvZGUgPSBpbWFwX2luaXQoY29ubik7CisgIGlmKHJldGNvZGUpCisgICAgcmV0dXJuIHJldGNvZGU7CisKKyAgcmV0Y29kZSA9IGltYXBfcGFyc2VfdXJsX3BhdGgoY29ubik7CisgIGlmKHJldGNvZGUpCisgICAgcmV0dXJuIHJldGNvZGU7CisKKyAgcmV0Y29kZSA9IGltYXBfcmVndWxhcl90cmFuc2Zlcihjb25uLCBkb25lKTsKKworICByZXR1cm4gcmV0Y29kZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogaW1hcF9sb2dvdXQoKQorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBzY2xvc2UoKS4gIFdlIHNob3VsZCB0aGVuIHdhaXQgZm9yIHRoZQorICogcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyIGJlZm9yZSByZXR1cm5pbmcuIFRoZSBjYWxsaW5nIGNvZGUgc2hvdWxkIHRoZW4gdHJ5CisgKiB0byBjbG9zZSB0aGUgY29ubmVjdGlvbi4KKyAqCisgKi8KK3N0YXRpYyBDVVJMY29kZSBpbWFwX2xvZ291dChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBjb25zdCBjaGFyICpzdHI7CisKKyAgc3RyID0gZ2V0Y21kaWQoY29ubik7CisKKyAgcmVzdWx0ID0gaW1hcHNlbmRmKGNvbm4sIHN0ciwgIiVzIExPR09VVCIsIHN0ciwgTlVMTCk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworICBzdGF0ZShjb25uLCBJTUFQX0xPR09VVCk7CisKKyAgcmVzdWx0ID0gaW1hcF9lYXN5X3N0YXRlbWFjaChjb25uKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBpbWFwX2Rpc2Nvbm5lY3QoKQorICoKKyAqIERpc2Nvbm5lY3QgZnJvbSBhbiBJTUFQIHNlcnZlci4gQ2xlYW51cCBwcm90b2NvbC1zcGVjaWZpYyBwZXItY29ubmVjdGlvbgorICogcmVzb3VyY2VzLiBCTE9DS0lORy4KKyAqLworc3RhdGljIENVUkxjb2RlIGltYXBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKQoreworICBzdHJ1Y3QgaW1hcF9jb25uICppbWFwYz0gJmNvbm4tPnByb3RvLmltYXBjOworCisgIC8qIFRoZSBJTUFQIHNlc3Npb24gbWF5IG9yIG1heSBub3QgaGF2ZSBiZWVuIGFsbG9jYXRlZC9zZXR1cCBhdCB0aGlzCisgICAgIHBvaW50ISAqLworICBpZighZGVhZF9jb25uZWN0aW9uICYmIGltYXBjLT5wcC5jb25uKQorICAgICh2b2lkKWltYXBfbG9nb3V0KGNvbm4pOyAvKiBpZ25vcmUgZXJyb3JzIG9uIHRoZSBMT0dPVVQgKi8KKworICBDdXJsX3BwX2Rpc2Nvbm5lY3QoJmltYXBjLT5wcCk7CisKKyAgQ3VybF9zYWZlZnJlZShpbWFwYy0+bWFpbGJveCk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBpbWFwX3BhcnNlX3VybF9wYXRoKCkKKyAqCisgKiBQYXJzZSB0aGUgVVJMIHBhdGggaW50byBzZXBhcmF0ZSBwYXRoIGNvbXBvbmVudHMuCisgKgorICovCitzdGF0aWMgQ1VSTGNvZGUgaW1hcF9wYXJzZV91cmxfcGF0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIC8qIHRoZSBpbWFwIHN0cnVjdCBpcyBhbHJlYWR5IGluaXRlZCBpbiBpbWFwX2Nvbm5lY3QoKSAqLworICBzdHJ1Y3QgaW1hcF9jb25uICppbWFwYyA9ICZjb25uLT5wcm90by5pbWFwYzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBjb25zdCBjaGFyICpwYXRoID0gZGF0YS0+c3RhdGUucGF0aDsKKworICBpZighKnBhdGgpCisgICAgcGF0aCA9ICJJTkJPWCI7CisKKyAgLyogdXJsIGRlY29kZSB0aGUgcGF0aCBhbmQgdXNlIHRoaXMgbWFpbGJveCAqLworICByZXR1cm4gQ3VybF91cmxkZWNvZGUoZGF0YSwgcGF0aCwgMCwgJmltYXBjLT5tYWlsYm94LCBOVUxMLCBUUlVFKTsKK30KKworLyogY2FsbCB0aGlzIHdoZW4gdGhlIERPIHBoYXNlIGhhcyBjb21wbGV0ZWQgKi8KK3N0YXRpYyBDVVJMY29kZSBpbWFwX2RvcGhhc2VfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb25uZWN0ZWQpCit7CisgIHN0cnVjdCBGVFAgKmltYXAgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5pbWFwOworICAodm9pZCljb25uZWN0ZWQ7CisKKyAgaWYoaW1hcC0+dHJhbnNmZXIgIT0gRlRQVFJBTlNGRVJfQk9EWSkKKyAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCitzdGF0aWMgQ1VSTGNvZGUgaW1hcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHJlc3VsdCA9IGltYXBfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIHJlc3VsdCA9IGltYXBfZG9waGFzZV9kb25lKGNvbm4sIEZBTFNFIC8qIG5vdCBjb25uZWN0ZWQgKi8pOworCisgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGltYXBfcmVndWxhcl90cmFuc2ZlcigpCisgKgorICogVGhlIGlucHV0IGFyZ3VtZW50IGlzIGFscmVhZHkgY2hlY2tlZCBmb3IgdmFsaWRpdHkuCisgKgorICogUGVyZm9ybXMgYWxsIGNvbW1hbmRzIGRvbmUgYmVmb3JlIGEgcmVndWxhciB0cmFuc2ZlciBiZXR3ZWVuIGEgbG9jYWwgYW5kIGEKKyAqIHJlbW90ZSBob3N0LgorICoKKyAqLworc3RhdGljCitDVVJMY29kZSBpbWFwX3JlZ3VsYXJfdHJhbnNmZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQ9Q1VSTEVfT0s7CisgIGJvb2wgY29ubmVjdGVkPUZBTFNFOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGRhdGEtPnJlcS5zaXplID0gLTE7IC8qIG1ha2Ugc3VyZSB0aGlzIGlzIHVua25vd24gYXQgdGhpcyBwb2ludCAqLworCisgIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCAwKTsKKyAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCAwKTsKKyAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIDApOworCisgIHJlc3VsdCA9IGltYXBfcGVyZm9ybShjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgJmNvbm5lY3RlZCwgLyogaGF2ZSB3ZSBjb25uZWN0ZWQgYWZ0ZXIgUEFTVi9QT1JUICovCisgICAgICAgICAgICAgICAgICAgICAgICBkb3BoYXNlX2RvbmUpOyAvKiBhbGwgY29tbWFuZHMgaW4gdGhlIERPLXBoYXNlIGRvbmU/ICovCisKKyAgaWYoQ1VSTEVfT0sgPT0gcmVzdWx0KSB7CisKKyAgICBpZighKmRvcGhhc2VfZG9uZSkKKyAgICAgIC8qIHRoZSBETyBwaGFzZSBoYXMgbm90IGNvbXBsZXRlZCB5ZXQgKi8KKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKworICAgIHJlc3VsdCA9IGltYXBfZG9waGFzZV9kb25lKGNvbm4sIGNvbm5lY3RlZCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBpbWFwX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICogY29ubikKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmICFkYXRhLT5zZXQudHVubmVsX3RocnVfaHR0cHByb3h5KSB7CisgICAgLyogVW5sZXNzIHdlIGhhdmUgYXNrZWQgdG8gdHVubmVsIGltYXAgb3BlcmF0aW9ucyB0aHJvdWdoIHRoZSBwcm94eSwgd2UKKyAgICAgICBzd2l0Y2ggYW5kIHVzZSBIVFRQIG9wZXJhdGlvbnMgb25seSAqLworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorICAgIGlmKGNvbm4tPmhhbmRsZXIgPT0gJkN1cmxfaGFuZGxlcl9pbWFwKQorICAgICAgY29ubi0+aGFuZGxlciA9ICZDdXJsX2hhbmRsZXJfaW1hcF9wcm94eTsKKyAgICBlbHNlIHsKKyNpZmRlZiBVU0VfU1NMCisgICAgICBjb25uLT5oYW5kbGVyID0gJkN1cmxfaGFuZGxlcl9pbWFwc19wcm94eTsKKyNlbHNlCisgICAgICBmYWlsZihkYXRhLCAiSU1BUFMgbm90IHN1cHBvcnRlZCEiKTsKKyAgICAgIHJldHVybiBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTDsKKyNlbmRpZgorICAgIH0KKyAgICAvKgorICAgICAqIFdlIGV4cGxpY2l0bHkgbWFyayB0aGlzIGNvbm5lY3Rpb24gYXMgcGVyc2lzdGVudCBoZXJlIGFzIHdlJ3JlIGRvaW5nCisgICAgICogSU1BUCBvdmVyIEhUVFAgYW5kIHRodXMgd2UgYWNjaWRlbnRhbGx5IGF2b2lkIHNldHRpbmcgdGhpcyB2YWx1ZQorICAgICAqIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBjb25uLT5iaXRzLmNsb3NlID0gRkFMU0U7CisjZWxzZQorICAgIGZhaWxmKGRhdGEsICJJTUFQIG92ZXIgaHR0cCBwcm94eSByZXF1aXJlcyBIVFRQIHN1cHBvcnQgYnVpbHQtaW4hIik7CisgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOworI2VuZGlmCisgIH0KKworICBkYXRhLT5zdGF0ZS5wYXRoKys7ICAgLyogZG9uJ3QgaW5jbHVkZSB0aGUgaW5pdGlhbCBzbGFzaCAqLworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9JTUFQICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvaW1hcC5oIGIvY3VybC03LjI1LjAvbGliL2ltYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTZjNzY0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2ltYXAuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9fSU1BUF9ICisjZGVmaW5lIF9fSU1BUF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInBpbmdwb25nLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJTUFQIHVuaXF1ZSBzZXR1cAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bSB7CisgIElNQVBfU1RPUCwgICAgLyogZG8gbm90aGluZyBzdGF0ZSwgc3RvcHMgdGhlIHN0YXRlIG1hY2hpbmUgKi8KKyAgSU1BUF9TRVJWRVJHUkVFVCwgLyogd2FpdGluZyBmb3IgdGhlIGluaXRpYWwgZ3JlZXRpbmcgaW1tZWRpYXRlbHkgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgYSBjb25uZWN0ICovCisgIElNQVBfTE9HSU4sCisgIElNQVBfU1RBUlRUTFMsCisgIElNQVBfVVBHUkFERVRMUywgLyogYXN5bmNocm9ub3VzbHkgdXBncmFkZSB0aGUgY29ubmVjdGlvbiB0byBTU0wvVExTCisgICAgICAgICAgICAgICAgICAgICAgKG11bHRpIG1vZGUgb25seSkgKi8KKyAgSU1BUF9TRUxFQ1QsCisgIElNQVBfRkVUQ0gsCisgIElNQVBfTE9HT1VULAorICBJTUFQX0xBU1QgIC8qIG5ldmVyIHVzZWQgKi8KK30gaW1hcHN0YXRlOworCisvKiBpbWFwX2Nvbm4gaXMgdXNlZCBmb3Igc3RydWN0IGNvbm5lY3Rpb24tb3JpZW50ZWQgZGF0YSBpbiB0aGUgY29ubmVjdGRhdGEKKyAgIHN0cnVjdCAqLworc3RydWN0IGltYXBfY29ubiB7CisgIHN0cnVjdCBwaW5ncG9uZyBwcDsKKyAgY2hhciAqbWFpbGJveDsgICAgIC8qIHdoYXQgdG8gRkVUQ0ggKi8KKyAgaW1hcHN0YXRlIHN0YXRlOyAvKiBhbHdheXMgdXNlIGltYXAuYzpzdGF0ZSgpIHRvIGNoYW5nZSBzdGF0ZSEgKi8KKyAgaW50IGNtZGlkOyAgICAgICAvKiBpZCBudW1iZXIvaW5kZXggKi8KKyAgY29uc3QgY2hhciAqaWRzdHI7IC8qIHBvaW50ZXIgdG8gYSBzdHJpbmcgZm9yIHdoaWNoIHRvIHdhaXQgZm9yIGFzIGlkICovCisgIGJvb2wgc3NsZG9uZTsgICAgICAvKiBjb25uZWN0KCkgb3ZlciBTU0w/IG9ubHkgcmVsZXZhbnQgaW4gbXVsdGkgbW9kZSAqLworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2ltYXA7CitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfaW1hcHM7CisKKyNlbmRpZiAvKiBfX0lNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2luZXRfbnRvcC5jIGIvY3VybC03LjI1LjAvbGliL2luZXRfbnRvcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYjk3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvaW5ldF9udG9wLmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSAgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElOVEVSTkVUIFNPRlRXQVJFIENPTlNPUlRJVU0KKyAqIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBJTlRFUk5FVCBTT0ZUV0FSRSBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcKKyAqIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qCisgKiBPcmlnaW5hbCBjb2RlIGJ5IFBhdWwgVml4aWUuICJjdXJsaWZpZWQiIGJ5IEdpc2xlIFZhbmVtLgorICovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZuZGVmIEhBVkVfSU5FVF9OVE9QCisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJpbmV0X250b3AuaCIKKworI2RlZmluZSBJTjZBRERSU1ogICAgICAgMTYKKyNkZWZpbmUgSU5BRERSU1ogICAgICAgICA0CisjZGVmaW5lIElOVDE2U1ogICAgICAgICAgMgorCisvKgorICogRm9ybWF0IGFuIElQdjQgYWRkcmVzcywgbW9yZSBvciBsZXNzIGxpa2UgaW5ldF9udG9hKCkuCisgKgorICogUmV0dXJucyBgZHN0JyAoYXMgYSBjb25zdCkKKyAqIE5vdGU6CisgKiAgLSB1c2VzIG5vIHN0YXRpY3MKKyAqICAtIHRha2VzIGEgdW5zaWduZWQgY2hhciogbm90IGFuIGluX2FkZHIgYXMgaW5wdXQKKyAqLworc3RhdGljIGNoYXIgKmluZXRfbnRvcDQgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgY2hhciB0bXBbc2l6ZW9mICIyNTUuMjU1LjI1NS4yNTUiXTsKKyAgc2l6ZV90IGxlbjsKKworICBERUJVR0FTU0VSVChzaXplID49IDE2KTsKKworICB0bXBbMF0gPSAnXDAnOworICAodm9pZClzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJWQuJWQuJWQuJWQiLAorICAgICAgICAgICgoaW50KSgodW5zaWduZWQgY2hhcilzcmNbMF0pKSAmIDB4ZmYsCisgICAgICAgICAgKChpbnQpKCh1bnNpZ25lZCBjaGFyKXNyY1sxXSkpICYgMHhmZiwKKyAgICAgICAgICAoKGludCkoKHVuc2lnbmVkIGNoYXIpc3JjWzJdKSkgJiAweGZmLAorICAgICAgICAgICgoaW50KSgodW5zaWduZWQgY2hhcilzcmNbM10pKSAmIDB4ZmYpOworCisgIGxlbiA9IHN0cmxlbih0bXApOworICBpZihsZW4gPT0gMCB8fCBsZW4gPj0gc2l6ZSkgeworICAgIFNFVF9FUlJOTyhFTk9TUEMpOworICAgIHJldHVybiAoTlVMTCk7CisgIH0KKyAgc3RyY3B5KGRzdCwgdG1wKTsKKyAgcmV0dXJuIGRzdDsKK30KKworI2lmZGVmIEVOQUJMRV9JUFY2CisvKgorICogQ29udmVydCBJUHY2IGJpbmFyeSBhZGRyZXNzIGludG8gcHJlc2VudGF0aW9uIChwcmludGFibGUpIGZvcm1hdC4KKyAqLworc3RhdGljIGNoYXIgKmluZXRfbnRvcDYgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgLyoKKyAgICogTm90ZSB0aGF0IGludDMyX3QgYW5kIGludDE2X3QgbmVlZCBvbmx5IGJlICJhdCBsZWFzdCIgbGFyZ2UgZW5vdWdoCisgICAqIHRvIGNvbnRhaW4gYSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHNpemUuICBPbiBzb21lIHN5c3RlbXMsIGxpa2UKKyAgICogQ3JheXMsIHRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgYW4gaW50ZWdlciB2YXJpYWJsZSB3aXRoIDE2IGJpdHMuCisgICAqIEtlZXAgdGhpcyBpbiBtaW5kIGlmIHlvdSB0aGluayB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY29kZWQKKyAgICogdG8gdXNlIHBvaW50ZXIgb3ZlcmxheXMuICBBbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorICAgKi8KKyAgY2hhciB0bXBbc2l6ZW9mKCJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjoyNTUuMjU1LjI1NS4yNTUiKV07CisgIGNoYXIgKnRwOworICBzdHJ1Y3QgeworICAgIGxvbmcgYmFzZTsKKyAgICBsb25nIGxlbjsKKyAgfSBiZXN0LCBjdXI7CisgIHVuc2lnbmVkIGxvbmcgd29yZHNbSU42QUREUlNaIC8gSU5UMTZTWl07CisgIGludCBpOworCisgIC8qIFByZXByb2Nlc3M6CisgICAqICBDb3B5IHRoZSBpbnB1dCAoYnl0ZXdpc2UpIGFycmF5IGludG8gYSB3b3Jkd2lzZSBhcnJheS4KKyAgICogIEZpbmQgdGhlIGxvbmdlc3QgcnVuIG9mIDB4MDAncyBpbiBzcmNbXSBmb3IgOjogc2hvcnRoYW5kaW5nLgorICAgKi8KKyAgbWVtc2V0KHdvcmRzLCAnXDAnLCBzaXplb2Yod29yZHMpKTsKKyAgZm9yKGkgPSAwOyBpIDwgSU42QUREUlNaOyBpKyspCisgICAgd29yZHNbaS8yXSB8PSAoc3JjW2ldIDw8ICgoMSAtIChpICUgMikpIDw8IDMpKTsKKworICBiZXN0LmJhc2UgPSAtMTsKKyAgY3VyLmJhc2UgID0gLTE7CisgIGJlc3QubGVuID0gMDsKKyAgY3VyLmxlbiA9IDA7CisKKyAgZm9yKGkgPSAwOyBpIDwgKElONkFERFJTWiAvIElOVDE2U1opOyBpKyspIHsKKyAgICBpZih3b3Jkc1tpXSA9PSAwKSB7CisgICAgICBpZihjdXIuYmFzZSA9PSAtMSkKKyAgICAgICAgY3VyLmJhc2UgPSBpLCBjdXIubGVuID0gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgY3VyLmxlbisrOworICAgIH0KKyAgICBlbHNlIGlmKGN1ci5iYXNlICE9IC0xKSB7CisgICAgICBpZihiZXN0LmJhc2UgPT0gLTEgfHwgY3VyLmxlbiA+IGJlc3QubGVuKQorICAgICAgICBiZXN0ID0gY3VyOworICAgICAgY3VyLmJhc2UgPSAtMTsKKyAgICB9CisgIH0KKyAgaWYoKGN1ci5iYXNlICE9IC0xKSAmJiAoYmVzdC5iYXNlID09IC0xIHx8IGN1ci5sZW4gPiBiZXN0LmxlbikpCisgICAgYmVzdCA9IGN1cjsKKyAgaWYoYmVzdC5iYXNlICE9IC0xICYmIGJlc3QubGVuIDwgMikKKyAgICBiZXN0LmJhc2UgPSAtMTsKKyAgLyogRm9ybWF0IHRoZSByZXN1bHQuICovCisgIHRwID0gdG1wOworICBmb3IoaSA9IDA7IGkgPCAoSU42QUREUlNaIC8gSU5UMTZTWik7IGkrKykgeworICAgIC8qIEFyZSB3ZSBpbnNpZGUgdGhlIGJlc3QgcnVuIG9mIDB4MDAncz8gKi8KKyAgICBpZihiZXN0LmJhc2UgIT0gLTEgJiYgaSA+PSBiZXN0LmJhc2UgJiYgaSA8IChiZXN0LmJhc2UgKyBiZXN0LmxlbikpIHsKKyAgICAgIGlmKGkgPT0gYmVzdC5iYXNlKQorICAgICAgICAqdHArKyA9ICc6JzsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIEFyZSB3ZSBmb2xsb3dpbmcgYW4gaW5pdGlhbCBydW4gb2YgMHgwMHMgb3IgYW55IHJlYWwgaGV4PworICAgICAqLworICAgIGlmKGkgIT0gMCkKKyAgICAgICp0cCsrID0gJzonOworCisgICAgLyogSXMgdGhpcyBhZGRyZXNzIGFuIGVuY2Fwc3VsYXRlZCBJUHY0PworICAgICAqLworICAgIGlmKGkgPT0gNiAmJiBiZXN0LmJhc2UgPT0gMCAmJgorICAgICAgICAoYmVzdC5sZW4gPT0gNiB8fCAoYmVzdC5sZW4gPT0gNSAmJiB3b3Jkc1s1XSA9PSAweGZmZmYpKSkgeworICAgICAgaWYoIWluZXRfbnRvcDQoc3JjKzEyLCB0cCwgc2l6ZW9mKHRtcCkgLSAodHAgLSB0bXApKSkgeworICAgICAgICBTRVRfRVJSTk8oRU5PU1BDKTsKKyAgICAgICAgcmV0dXJuIChOVUxMKTsKKyAgICAgIH0KKyAgICAgIHRwICs9IHN0cmxlbih0cCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgdHAgKz0gc25wcmludGYodHAsIDUsICIlbHgiLCB3b3Jkc1tpXSk7CisgIH0KKworICAvKiBXYXMgaXQgYSB0cmFpbGluZyBydW4gb2YgMHgwMCdzPworICAgKi8KKyAgaWYoYmVzdC5iYXNlICE9IC0xICYmIChiZXN0LmJhc2UgKyBiZXN0LmxlbikgPT0gKElONkFERFJTWiAvIElOVDE2U1opKQorICAgICAqdHArKyA9ICc6JzsKKyAgKnRwKysgPSAnXDAnOworCisgIC8qIENoZWNrIGZvciBvdmVyZmxvdywgY29weSwgYW5kIHdlJ3JlIGRvbmUuCisgICAqLworICBpZigoc2l6ZV90KSh0cCAtIHRtcCkgPiBzaXplKSB7CisgICAgU0VUX0VSUk5PKEVOT1NQQyk7CisgICAgcmV0dXJuIChOVUxMKTsKKyAgfQorICBzdHJjcHkoZHN0LCB0bXApOworICByZXR1cm4gZHN0OworfQorI2VuZGlmICAvKiBFTkFCTEVfSVBWNiAqLworCisvKgorICogQ29udmVydCBhIG5ldHdvcmsgZm9ybWF0IGFkZHJlc3MgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gcHJlc2VudGF0aW9uIGZvcm1hdCBhZGRyZXNzIChgYnVmJykuCisgKiBSZXR1cm5zIE5VTEwgb24gZXJyb3IgYW5kIGVycm5vIHNldCB3aXRoIHRoZSBzcGVjaWZpYworICogZXJyb3IsIEVBRk5PU1VQUE9SVCBvciBFTk9TUEMuCisgKgorICogT24gV2luZG93cyB3ZSBzdG9yZSB0aGUgZXJyb3IgaW4gdGhlIHRocmVhZCBlcnJubywgbm90CisgKiBpbiB0aGUgd2luc29jayBlcnJvciBjb2RlLiBUaGlzIGlzIHRvIGF2b2lkIGxvc2luZyB0aGUKKyAqIGFjdHVhbCBsYXN0IHdpbnNvY2sgZXJyb3IuIFNvIHVzZSBtYWNybyBFUlJOTyB0byBmZXRjaCB0aGUKKyAqIGVycm5vIHRoaXMgZnVuY3Rpb24gc2V0cyB3aGVuIHJldHVybmluZyBOVUxMLCBub3QgU09DS0VSUk5PLgorICovCitjaGFyICpDdXJsX2luZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgc3dpdGNoIChhZikgeworICBjYXNlIEFGX0lORVQ6CisgICAgcmV0dXJuIGluZXRfbnRvcDQoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXNyYywgYnVmLCBzaXplKTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBjYXNlIEFGX0lORVQ2OgorICAgIHJldHVybiBpbmV0X250b3A2KChjb25zdCB1bnNpZ25lZCBjaGFyKilzcmMsIGJ1Ziwgc2l6ZSk7CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBTRVRfRVJSTk8oRUFGTk9TVVBQT1JUKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorI2VuZGlmICAvKiBIQVZFX0lORVRfTlRPUCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2luZXRfbnRvcC5oIGIvY3VybC03LjI1LjAvbGliL2luZXRfbnRvcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYjk3NzUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvaW5ldF9udG9wLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfX0lORVRfTlRPUF9ICisjZGVmaW5lIF9fSU5FVF9OVE9QX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworY2hhciAqQ3VybF9pbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICphZGRyLCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKKworI2lmZGVmIEhBVkVfSU5FVF9OVE9QCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjZGVmaW5lIEN1cmxfaW5ldF9udG9wKGFmLGFkZHIsYnVmLHNpemUpIFwKKyAgICAgICAgaW5ldF9udG9wKGFmLGFkZHIsYnVmLChjdXJsX3NvY2tsZW5fdClzaXplKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0lORVRfTlRPUF9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvaW5ldF9wdG9uLmMgYi9jdXJsLTcuMjUuMC9saWIvaW5ldF9wdG9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxZjQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9pbmV0X3B0b24uYwpAQCAtMCwwICsxLDIzNyBAQAorLyogVGhpcyBpcyBmcm9tIHRoZSBCSU5EIDQuOS40IHJlbGVhc2UsIG1vZGlmaWVkIHRvIGNvbXBpbGUgYnkgaXRzZWxmICovCisKKy8qIENvcHlyaWdodCAoYykgMTk5NiBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSU5URVJORVQgU09GVFdBUkUgQ09OU09SVElVTSBESVNDTEFJTVMKKyAqIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgSU5URVJORVQgU09GVFdBUkUKKyAqIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmbmRlZiBIQVZFX0lORVRfUFRPTgorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisKKyNkZWZpbmUgSU42QUREUlNaICAgICAgIDE2CisjZGVmaW5lIElOQUREUlNaICAgICAgICAgNAorI2RlZmluZSBJTlQxNlNaICAgICAgICAgIDIKKworLyoKKyAqIFdBUk5JTkc6IERvbid0IGV2ZW4gY29uc2lkZXIgdHJ5aW5nIHRvIGNvbXBpbGUgdGhpcyBvbiBhIHN5c3RlbSB3aGVyZQorICogc2l6ZW9mKGludCkgPCA0LiAgc2l6ZW9mKGludCkgPiA0IGlzIGZpbmU7IGFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCisgKi8KKworc3RhdGljIGludCAgICAgIGluZXRfcHRvbjQoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QpOworI2lmZGVmIEVOQUJMRV9JUFY2CitzdGF0aWMgaW50ICAgICAgaW5ldF9wdG9uNihjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCk7CisjZW5kaWYKKworLyogaW50CisgKiBpbmV0X3B0b24oYWYsIHNyYywgZHN0KQorICogICAgICBjb252ZXJ0IGZyb20gcHJlc2VudGF0aW9uIGZvcm1hdCAod2hpY2ggdXN1YWxseSBtZWFucyBBU0NJSSBwcmludGFibGUpCisgKiAgICAgIHRvIG5ldHdvcmsgZm9ybWF0ICh3aGljaCBpcyB1c3VhbGx5IHNvbWUga2luZCBvZiBiaW5hcnkgZm9ybWF0KS4KKyAqIHJldHVybjoKKyAqICAgICAgMSBpZiB0aGUgYWRkcmVzcyB3YXMgdmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBmYW1pbHkKKyAqICAgICAgMCBpZiB0aGUgYWRkcmVzcyB3YXNuJ3QgdmFsaWQgKGBkc3QnIGlzIHVudG91Y2hlZCBpbiB0aGlzIGNhc2UpCisgKiAgICAgIC0xIGlmIHNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQgKGBkc3QnIGlzIHVudG91Y2hlZCBpbiB0aGlzIGNhc2UsIHRvbykKKyAqIG5vdGljZToKKyAqICAgICAgT24gV2luZG93cyB3ZSBzdG9yZSB0aGUgZXJyb3IgaW4gdGhlIHRocmVhZCBlcnJubywgbm90CisgKiAgICAgIGluIHRoZSB3aW5zb2NrIGVycm9yIGNvZGUuIFRoaXMgaXMgdG8gYXZvaWQgbG9zaW5nIHRoZQorICogICAgICBhY3R1YWwgbGFzdCB3aW5zb2NrIGVycm9yLiBTbyB1c2UgbWFjcm8gRVJSTk8gdG8gZmV0Y2ggdGhlCisgKiAgICAgIGVycm5vIHRoaXMgZnVuY3Rpb24gc2V0cyB3aGVuIHJldHVybmluZyAoLTEpLCBub3QgU09DS0VSUk5PLgorICogYXV0aG9yOgorICogICAgICBQYXVsIFZpeGllLCAxOTk2LgorICovCitpbnQKK0N1cmxfaW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpCit7CisgIHN3aXRjaCAoYWYpIHsKKyAgY2FzZSBBRl9JTkVUOgorICAgIHJldHVybiAoaW5ldF9wdG9uNChzcmMsICh1bnNpZ25lZCBjaGFyICopZHN0KSk7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgY2FzZSBBRl9JTkVUNjoKKyAgICByZXR1cm4gKGluZXRfcHRvbjYoc3JjLCAodW5zaWduZWQgY2hhciAqKWRzdCkpOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgU0VUX0VSUk5PKEVBRk5PU1VQUE9SVCk7CisgICAgcmV0dXJuICgtMSk7CisgIH0KKyAgLyogTk9UUkVBQ0hFRCAqLworfQorCisvKiBpbnQKKyAqIGluZXRfcHRvbjQoc3JjLCBkc3QpCisgKiAgICAgIGxpa2UgaW5ldF9hdG9uKCkgYnV0IHdpdGhvdXQgYWxsIHRoZSBoZXhhZGVjaW1hbCBhbmQgc2hvcnRoYW5kLgorICogcmV0dXJuOgorICogICAgICAxIGlmIGBzcmMnIGlzIGEgdmFsaWQgZG90dGVkIHF1YWQsIGVsc2UgMC4KKyAqIG5vdGljZToKKyAqICAgICAgZG9lcyBub3QgdG91Y2ggYGRzdCcgdW5sZXNzIGl0J3MgcmV0dXJuaW5nIDEuCisgKiBhdXRob3I6CisgKiAgICAgIFBhdWwgVml4aWUsIDE5OTYuCisgKi8KK3N0YXRpYyBpbnQKK2luZXRfcHRvbjQoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QpCit7CisgIHN0YXRpYyBjb25zdCBjaGFyIGRpZ2l0c1tdID0gIjAxMjM0NTY3ODkiOworICBpbnQgc2F3X2RpZ2l0LCBvY3RldHMsIGNoOworICB1bnNpZ25lZCBjaGFyIHRtcFtJTkFERFJTWl0sICp0cDsKKworICBzYXdfZGlnaXQgPSAwOworICBvY3RldHMgPSAwOworICB0cCA9IHRtcDsKKyAgKnRwID0gMDsKKyAgd2hpbGUoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7CisgICAgY29uc3QgY2hhciAqcGNoOworCisgICAgaWYoKHBjaCA9IHN0cmNocihkaWdpdHMsIGNoKSkgIT0gTlVMTCkgeworICAgICAgdW5zaWduZWQgaW50IHZhbCA9ICp0cCAqIDEwICsgKHVuc2lnbmVkIGludCkocGNoIC0gZGlnaXRzKTsKKworICAgICAgaWYoc2F3X2RpZ2l0ICYmICp0cCA9PSAwKQorICAgICAgICByZXR1cm4gKDApOworICAgICAgaWYodmFsID4gMjU1KQorICAgICAgICByZXR1cm4gKDApOworICAgICAgKnRwID0gKHVuc2lnbmVkIGNoYXIpdmFsOworICAgICAgaWYoISBzYXdfZGlnaXQpIHsKKyAgICAgICAgaWYoKytvY3RldHMgPiA0KQorICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIHNhd19kaWdpdCA9IDE7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoY2ggPT0gJy4nICYmIHNhd19kaWdpdCkgeworICAgICAgaWYob2N0ZXRzID09IDQpCisgICAgICAgIHJldHVybiAoMCk7CisgICAgICAqKyt0cCA9IDA7CisgICAgICBzYXdfZGlnaXQgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgICByZXR1cm4gKDApOworICB9CisgIGlmKG9jdGV0cyA8IDQpCisgICAgcmV0dXJuICgwKTsKKyAgbWVtY3B5KGRzdCwgdG1wLCBJTkFERFJTWik7CisgIHJldHVybiAoMSk7Cit9CisKKyNpZmRlZiBFTkFCTEVfSVBWNgorLyogaW50CisgKiBpbmV0X3B0b242KHNyYywgZHN0KQorICogICAgICBjb252ZXJ0IHByZXNlbnRhdGlvbiBsZXZlbCBhZGRyZXNzIHRvIG5ldHdvcmsgb3JkZXIgYmluYXJ5IGZvcm0uCisgKiByZXR1cm46CisgKiAgICAgIDEgaWYgYHNyYycgaXMgYSB2YWxpZCBbUkZDMTg4NCAyLjJdIGFkZHJlc3MsIGVsc2UgMC4KKyAqIG5vdGljZToKKyAqICAgICAgKDEpIGRvZXMgbm90IHRvdWNoIGBkc3QnIHVubGVzcyBpdCdzIHJldHVybmluZyAxLgorICogICAgICAoMikgOjogaW4gYSBmdWxsIGFkZHJlc3MgaXMgc2lsZW50bHkgaWdub3JlZC4KKyAqIGNyZWRpdDoKKyAqICAgICAgaW5zcGlyZWQgYnkgTWFyayBBbmRyZXdzLgorICogYXV0aG9yOgorICogICAgICBQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgaW50CitpbmV0X3B0b242KGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0KQoreworICBzdGF0aWMgY29uc3QgY2hhciB4ZGlnaXRzX2xbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIiwKKyAgICB4ZGlnaXRzX3VbXSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKKyAgdW5zaWduZWQgY2hhciB0bXBbSU42QUREUlNaXSwgKnRwLCAqZW5kcCwgKmNvbG9ucDsKKyAgY29uc3QgY2hhciAqeGRpZ2l0cywgKmN1cnRvazsKKyAgaW50IGNoLCBzYXdfeGRpZ2l0OworICBzaXplX3QgdmFsOworCisgIG1lbXNldCgodHAgPSB0bXApLCAwLCBJTjZBRERSU1opOworICBlbmRwID0gdHAgKyBJTjZBRERSU1o7CisgIGNvbG9ucCA9IE5VTEw7CisgIC8qIExlYWRpbmcgOjogcmVxdWlyZXMgc29tZSBzcGVjaWFsIGhhbmRsaW5nLiAqLworICBpZigqc3JjID09ICc6JykKKyAgICBpZigqKytzcmMgIT0gJzonKQorICAgICAgcmV0dXJuICgwKTsKKyAgY3VydG9rID0gc3JjOworICBzYXdfeGRpZ2l0ID0gMDsKKyAgdmFsID0gMDsKKyAgd2hpbGUoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7CisgICAgY29uc3QgY2hhciAqcGNoOworCisgICAgaWYoKHBjaCA9IHN0cmNocigoeGRpZ2l0cyA9IHhkaWdpdHNfbCksIGNoKSkgPT0gTlVMTCkKKyAgICAgIHBjaCA9IHN0cmNocigoeGRpZ2l0cyA9IHhkaWdpdHNfdSksIGNoKTsKKyAgICBpZihwY2ggIT0gTlVMTCkgeworICAgICAgdmFsIDw8PSA0OworICAgICAgdmFsIHw9IChwY2ggLSB4ZGlnaXRzKTsKKyAgICAgIGlmKCsrc2F3X3hkaWdpdCA+IDQpCisgICAgICAgIHJldHVybiAoMCk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYoY2ggPT0gJzonKSB7CisgICAgICBjdXJ0b2sgPSBzcmM7CisgICAgICBpZighc2F3X3hkaWdpdCkgeworICAgICAgICBpZihjb2xvbnApCisgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgY29sb25wID0gdHA7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgaWYodHAgKyBJTlQxNlNaID4gZW5kcCkKKyAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICp0cCsrID0gKHVuc2lnbmVkIGNoYXIpICh2YWwgPj4gOCkgJiAweGZmOworICAgICAgKnRwKysgPSAodW5zaWduZWQgY2hhcikgdmFsICYgMHhmZjsKKyAgICAgIHNhd194ZGlnaXQgPSAwOworICAgICAgdmFsID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZihjaCA9PSAnLicgJiYgKCh0cCArIElOQUREUlNaKSA8PSBlbmRwKSAmJgorICAgICAgICBpbmV0X3B0b240KGN1cnRvaywgdHApID4gMCkgeworICAgICAgdHAgKz0gSU5BRERSU1o7CisgICAgICBzYXdfeGRpZ2l0ID0gMDsKKyAgICAgIGJyZWFrOyAgICAvKiAnXDAnIHdhcyBzZWVuIGJ5IGluZXRfcHRvbjQoKS4gKi8KKyAgICB9CisgICAgcmV0dXJuICgwKTsKKyAgfQorICBpZihzYXdfeGRpZ2l0KSB7CisgICAgaWYodHAgKyBJTlQxNlNaID4gZW5kcCkKKyAgICAgIHJldHVybiAoMCk7CisgICAgKnRwKysgPSAodW5zaWduZWQgY2hhcikgKHZhbCA+PiA4KSAmIDB4ZmY7CisgICAgKnRwKysgPSAodW5zaWduZWQgY2hhcikgdmFsICYgMHhmZjsKKyAgfQorICBpZihjb2xvbnAgIT0gTlVMTCkgeworICAgIC8qCisgICAgICogU2luY2Ugc29tZSBtZW1tb3ZlKCkncyBlcnJvbmVvdXNseSBmYWlsIHRvIGhhbmRsZQorICAgICAqIG92ZXJsYXBwaW5nIHJlZ2lvbnMsIHdlJ2xsIGRvIHRoZSBzaGlmdCBieSBoYW5kLgorICAgICAqLworICAgIGNvbnN0IHNzaXplX3QgbiA9IHRwIC0gY29sb25wOworICAgIHNzaXplX3QgaTsKKworICAgIGlmKHRwID09IGVuZHApCisgICAgICByZXR1cm4gKDApOworICAgIGZvcihpID0gMTsgaSA8PSBuOyBpKyspIHsKKyAgICAgICooZW5kcCAtIGkpID0gKihjb2xvbnAgKyBuIC0gaSk7CisgICAgICAqKGNvbG9ucCArIG4gLSBpKSA9IDA7CisgICAgfQorICAgIHRwID0gZW5kcDsKKyAgfQorICBpZih0cCAhPSBlbmRwKQorICAgIHJldHVybiAoMCk7CisgIG1lbWNweShkc3QsIHRtcCwgSU42QUREUlNaKTsKKyAgcmV0dXJuICgxKTsKK30KKyNlbmRpZiAvKiBFTkFCTEVfSVBWNiAqLworCisjZW5kaWYgLyogSEFWRV9JTkVUX1BUT04gKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9pbmV0X3B0b24uaCBiL2N1cmwtNy4yNS4wL2xpYi9pbmV0X3B0b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTNmZGRmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2luZXRfcHRvbi5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgX19JTkVUX1BUT05fSAorI2RlZmluZSBfX0lORVRfUFRPTl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKK2ludCBDdXJsX2luZXRfcHRvbihpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKKworI2lmZGVmIEhBVkVfSU5FVF9QVE9OCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjZGVmaW5lIEN1cmxfaW5ldF9wdG9uKHgseSx6KSBpbmV0X3B0b24oeCx5LHopCisjZW5kaWYKKworI2VuZGlmIC8qIF9fSU5FVF9QVE9OX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9rcmI0LmMgYi9jdXJsLTcuMjUuMC9saWIva3JiNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1M2E2MTAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIva3JiNC5jCkBAIC0wLDAgKzEsNDQ0IEBACisvKiBUaGlzIHNvdXJjZSBjb2RlIHdhcyBtb2RpZmllZCBieSBNYXJ0aW4gSGVkZW5mYWxrIDxtaGVAc3RhY2tlbi5rdGguc2U+IGZvcgorICogdXNlIGluIEN1cmwuIE1hcnRpbidzIGxhdGVzdCBjaGFuZ2VzIHdlcmUgZG9uZSAyMDAwLTA5LTE4LgorICoKKyAqIEl0IGhhcyBzaW5jZSBiZWVuIHBhdGNoZWQgYXdheSBsaWtlIGEgbWFkbWFuIGJ5IERhbmllbCBTdGVuYmVyZyB0byBtYWtlIGl0CisgKiBiZXR0ZXIgYXBwbGllZCB0byBjdXJsIGNvbmRpdGlvbnMsIGFuZCB0byBtYWtlIGl0IG5vdCB1c2UgZ2xvYmFscywgcG9sbHV0ZQorICogbmFtZSBzcGFjZSBhbmQgbW9yZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTkgS3VuZ2xpZ2EgVGVrbmlza2EgSPZnc2tvbGFuCisgKiAoUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4KKyAqIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMTEgRGFuaWVsIFN0ZW5iZXJnCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSW5zdGl0dXRlIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAorI2lmZGVmIEhBVkVfS1JCNAorCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGtyYi5oPgorI2luY2x1ZGUgPGRlcy5oPgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPiAvKiBmb3IgZ2V0cGlkKCkgKi8KKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgImN1cmxfYmFzZTY0LmgiCisjaW5jbHVkZSAiZnRwLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJrcmI0LmgiCisjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBMT0NBTF9BRERSICgmY29ubi0+bG9jYWxfYWRkcikKKyNkZWZpbmUgUkVNT1RFX0FERFIgY29ubi0+aXBfYWRkci0+YWlfYWRkcgorI2RlZmluZSBteWN0bGFkZHIgTE9DQUxfQUREUgorI2RlZmluZSBoaXNjdGxhZGRyIFJFTU9URV9BRERSCisKK3N0cnVjdCBrcmI0X2RhdGEgeworICBkZXNfY2Jsb2NrIGtleTsKKyAgZGVzX2tleV9zY2hlZHVsZSBzY2hlZHVsZTsKKyAgY2hhciBuYW1lW0FOQU1FX1NaXTsKKyAgY2hhciBpbnN0YW5jZVtJTlNUX1NaXTsKKyAgY2hhciByZWFsbVtSRUFMTV9TWl07Cit9OworCisjaWZuZGVmIEhBVkVfU1RSTENQWQorLyogaWYgaXQgZXZlciBnb2VzIG5vbi1zdGF0aWMsIG1ha2UgaXQgQ3VybF8gcHJlZml4ZWQhICovCitzdGF0aWMgc2l6ZV90CitzdHJsY3B5IChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRzdF9zeikKK3sKKyAgc2l6ZV90IG47CisgIGNoYXIgKnA7CisKKyAgZm9yKHAgPSBkc3QsIG4gPSAwOworICAgICAgbiArIDEgPCBkc3Rfc3ogJiYgKnNyYyAhPSAnXDAnOworICAgICAgKytwLCArK3NyYywgKytuKQorICAgICpwID0gKnNyYzsKKyAgKnAgPSAnXDAnOworICBpZigqc3JjID09ICdcMCcpCisgICAgcmV0dXJuIG47CisgIGVsc2UKKyAgICByZXR1cm4gbiArIHN0cmxlbiAoc3JjKTsKK30KKyNlbHNlCitzaXplX3Qgc3RybGNweSAoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBkc3Rfc3opOworI2VuZGlmCisKK3N0YXRpYyBpbnQKK2tyYjRfY2hlY2tfcHJvdCh2b2lkICphcHBfZGF0YSwgaW50IGxldmVsKQoreworICBhcHBfZGF0YSA9IE5VTEw7IC8qIHByZXZlbnQgY29tcGlsZXIgd2FybmluZyAqLworICBpZihsZXZlbCA9PSBQUk9UX0NPTkZJREVOVElBTCkKKyAgICByZXR1cm4gLTE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitrcmI0X2RlY29kZSh2b2lkICphcHBfZGF0YSwgdm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIE1TR19EQVQgbTsKKyAgaW50IGU7CisgIHN0cnVjdCBrcmI0X2RhdGEgKmQgPSBhcHBfZGF0YTsKKworICBpZihsZXZlbCA9PSBQUk9UX1NBRkUpCisgICAgZSA9IGtyYl9yZF9zYWZlKGJ1ZiwgbGVuLCAmZC0+a2V5LAorICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyX2luICopUkVNT1RFX0FERFIsCisgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilMT0NBTF9BRERSLCAmbSk7CisgIGVsc2UKKyAgICBlID0ga3JiX3JkX3ByaXYoYnVmLCBsZW4sIGQtPnNjaGVkdWxlLCAmZC0+a2V5LAorICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyX2luICopUkVNT1RFX0FERFIsCisgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilMT0NBTF9BRERSLCAmbSk7CisgIGlmKGUpIHsKKyAgICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgICAgaW5mb2YoZGF0YSwgImtyYjRfZGVjb2RlOiAlc1xuIiwga3JiX2dldF9lcnJfdGV4dChlKSk7CisgICAgcmV0dXJuIC0xOworICB9CisgIG1lbW1vdmUoYnVmLCBtLmFwcF9kYXRhLCBtLmFwcF9sZW5ndGgpOworICByZXR1cm4gbS5hcHBfbGVuZ3RoOworfQorCitzdGF0aWMgaW50CitrcmI0X292ZXJoZWFkKHZvaWQgKmFwcF9kYXRhLCBpbnQgbGV2ZWwsIGludCBsZW4pCit7CisgIC8qIG5vIGFyZ3VtZW50cyBhcmUgdXNlZCwganVzdCBpbml0IHRoZW0gdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncyAqLworICBhcHBfZGF0YSA9IE5VTEw7CisgIGxldmVsID0gMDsKKyAgbGVuID0gMDsKKyAgcmV0dXJuIDMxOworfQorCitzdGF0aWMgaW50CitrcmI0X2VuY29kZSh2b2lkICphcHBfZGF0YSwgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbmd0aCwgaW50IGxldmVsLCB2b2lkICoqdG8sCisgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBrcmI0X2RhdGEgKmQgPSBhcHBfZGF0YTsKKyAgKnRvID0gbWFsbG9jKGxlbmd0aCArIDMxKTsKKyAgaWYoISp0bykKKyAgICByZXR1cm4gLTE7CisgIGlmKGxldmVsID09IFBST1RfU0FGRSkKKyAgICAvKiBOT1RFIHRoYXQgdGhlIHZvaWQqIGNhc3QgaXMgc2FmZSwga3JiX21rX3NhZmUvcHJpdiBkb24ndCBtb2RpZnkgdGhlCisgICAgICogaW5wdXQgYnVmZmVyCisgICAgICovCisgICAgcmV0dXJuIGtyYl9ta19zYWZlKCh2b2lkKilmcm9tLCAqdG8sIGxlbmd0aCwgJmQtPmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkcl9pbiAqKUxPQ0FMX0FERFIsCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilSRU1PVEVfQUREUik7CisgIGVsc2UgaWYobGV2ZWwgPT0gUFJPVF9QUklWQVRFKQorICAgIHJldHVybiBrcmJfbWtfcHJpdigodm9pZCopZnJvbSwgKnRvLCBsZW5ndGgsIGQtPnNjaGVkdWxlLCAmZC0+a2V5LAorICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyX2luICopTE9DQUxfQUREUiwKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVJFTU9URV9BRERSKTsKKyAgZWxzZQorICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludAorbWtfYXV0aChzdHJ1Y3Qga3JiNF9kYXRhICpkLCBLVEVYVCBhZGF0LAorICAgICAgICBjb25zdCBjaGFyICpzZXJ2aWNlLCBjaGFyICpob3N0LCBpbnQgY2hlY2tzdW0pCit7CisgIGludCByZXQ7CisgIENSRURFTlRJQUxTIGNyZWQ7CisgIGNoYXIgc25hbWVbU05BTUVfU1pdLCBpbnN0W0lOU1RfU1pdLCByZWFsbVtSRUFMTV9TWl07CisKKyAgc3RybGNweShzbmFtZSwgc2VydmljZSwgc2l6ZW9mKHNuYW1lKSk7CisgIHN0cmxjcHkoaW5zdCwga3JiX2dldF9waG9zdChob3N0KSwgc2l6ZW9mKGluc3QpKTsKKyAgc3RybGNweShyZWFsbSwga3JiX3JlYWxtb2Zob3N0KGhvc3QpLCBzaXplb2YocmVhbG0pKTsKKyAgcmV0ID0ga3JiX21rX3JlcShhZGF0LCBzbmFtZSwgaW5zdCwgcmVhbG0sIGNoZWNrc3VtKTsKKyAgaWYocmV0KQorICAgIHJldHVybiByZXQ7CisgIHN0cmxjcHkoc25hbWUsIHNlcnZpY2UsIHNpemVvZihzbmFtZSkpOworICBzdHJsY3B5KGluc3QsIGtyYl9nZXRfcGhvc3QoaG9zdCksIHNpemVvZihpbnN0KSk7CisgIHN0cmxjcHkocmVhbG0sIGtyYl9yZWFsbW9maG9zdChob3N0KSwgc2l6ZW9mKHJlYWxtKSk7CisgIHJldCA9IGtyYl9nZXRfY3JlZChzbmFtZSwgaW5zdCwgcmVhbG0sICZjcmVkKTsKKyAgbWVtbW92ZSgmZC0+a2V5LCAmY3JlZC5zZXNzaW9uLCBzaXplb2YoZGVzX2NibG9jaykpOworICBkZXNfa2V5X3NjaGVkKCZkLT5rZXksIGQtPnNjaGVkdWxlKTsKKyAgbWVtc2V0KCZjcmVkLCAwLCBzaXplb2YoY3JlZCkpOworICByZXR1cm4gcmV0OworfQorCisjaWZkZWYgSEFWRV9LUkJfR0VUX09VUl9JUF9GT1JfUkVBTE0KK2ludCBrcmJfZ2V0X291cl9pcF9mb3JfcmVhbG0oY2hhciAqLCBzdHJ1Y3QgaW5fYWRkciAqKTsKKyNlbmRpZgorCitzdGF0aWMgaW50CitrcmI0X2F1dGgodm9pZCAqYXBwX2RhdGEsIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaW50IHJldDsKKyAgY2hhciAqcDsKKyAgdW5zaWduZWQgY2hhciAqcHRyOworICBzaXplX3QgbGVuID0gMDsKKyAgS1RFWFRfU1QgYWRhdDsKKyAgTVNHX0RBVCBtc2dfZGF0YTsKKyAgaW50IGNoZWNrc3VtOworICB1X2ludDMyX3QgY3M7CisgIHN0cnVjdCBrcmI0X2RhdGEgKmQgPSBhcHBfZGF0YTsKKyAgY2hhciAqaG9zdCA9IGNvbm4tPmhvc3QubmFtZTsKKyAgc3NpemVfdCBucmVhZDsKKyAgaW50IGwgPSBzaXplb2YoY29ubi0+bG9jYWxfYWRkcik7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzaXplX3QgYmFzZTY0X3N6ID0gMDsKKworICBpZihnZXRzb2NrbmFtZShjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSwKKyAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKUxPQ0FMX0FERFIsICZsKSA8IDApCisgICAgcGVycm9yKCJnZXRzb2NrbmFtZSgpIik7CisKKyAgY2hlY2tzdW0gPSBnZXRwaWQoKTsKKyAgcmV0ID0gbWtfYXV0aChkLCAmYWRhdCwgImZ0cCIsIGhvc3QsIGNoZWNrc3VtKTsKKyAgaWYocmV0ID09IEtEQ19QUl9VTktOT1dOKQorICAgIHJldCA9IG1rX2F1dGgoZCwgJmFkYXQsICJyY21kIiwgaG9zdCwgY2hlY2tzdW0pOworICBpZihyZXQpIHsKKyAgICBpbmZvZihkYXRhLCAiJXNcbiIsIGtyYl9nZXRfZXJyX3RleHQocmV0KSk7CisgICAgcmV0dXJuIEFVVEhfQ09OVElOVUU7CisgIH0KKworI2lmZGVmIEhBVkVfS1JCX0dFVF9PVVJfSVBfRk9SX1JFQUxNCisgIGlmKGtyYl9nZXRfY29uZmlnX2Jvb2woIm5hdF9pbl91c2UiKSkgeworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxhZGRyICA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilMT0NBTF9BRERSOworICAgIHN0cnVjdCBpbl9hZGRyIG5hdEFkZHI7CisKKyAgICBpZihrcmJfZ2V0X291cl9pcF9mb3JfcmVhbG0oa3JiX3JlYWxtb2Zob3N0KGhvc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hdEFkZHIpICE9IEtTVUNDRVNTCisgICAgICAgICYmIGtyYl9nZXRfb3VyX2lwX2Zvcl9yZWFsbShOVUxMLCAmbmF0QWRkcikgIT0gS1NVQ0NFU1MpCisgICAgICBpbmZvZihkYXRhLCAiQ2FuJ3QgZ2V0IGFkZHJlc3MgZm9yIHJlYWxtICVzXG4iLAorICAgICAgICAgICAgICAgICBrcmJfcmVhbG1vZmhvc3QoaG9zdCkpOworICAgIGVsc2UgeworICAgICAgaWYobmF0QWRkci5zX2FkZHIgIT0gbG9jYWxhZGRyLT5zaW5fYWRkci5zX2FkZHIpIHsKKyAgICAgICAgY2hhciBhZGRyX2J1ZlsxMjhdOworICAgICAgICBpZihDdXJsX2luZXRfbnRvcChBRl9JTkVULCBuYXRBZGRyLCBhZGRyX2J1Ziwgc2l6ZW9mKGFkZHJfYnVmKSkpCisgICAgICAgICAgaW5mb2YoZGF0YSwgIlVzaW5nIE5BVCBJUCBhZGRyZXNzICglcykgZm9yIGtlcmJlcm9zIDRcbiIsIGFkZHJfYnVmKTsKKyAgICAgICAgbG9jYWxhZGRyLT5zaW5fYWRkciA9IG5hdEFkZHI7CisgICAgICB9CisgICAgfQorICB9CisjZW5kaWYKKworICByZXN1bHQgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoY29ubi0+ZGF0YSwgKGNoYXIgKilhZGF0LmRhdCwgYWRhdC5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcCwgJmJhc2U2NF9zeik7CisgIGlmKHJlc3VsdCkgeworICAgIEN1cmxfZmFpbGYoZGF0YSwgImJhc2U2NC1lbmNvZGluZzogJXMiLCBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzdWx0KSk7CisgICAgcmV0dXJuIEFVVEhfQ09OVElOVUU7CisgIH0KKworICByZXN1bHQgPSBDdXJsX2Z0cHNlbmRmKGNvbm4sICJBREFUICVzIiwgcCk7CisKKyAgZnJlZShwKTsKKworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIC0yOworCisgIGlmKEN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCBOVUxMKSkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYoZGF0YS0+c3RhdGUuYnVmZmVyWzBdICE9ICcyJykgeworICAgIEN1cmxfZmFpbGYoZGF0YSwgIlNlcnZlciBkaWRuJ3QgYWNjZXB0IGF1dGggZGF0YSIpOworICAgIHJldHVybiBBVVRIX0VSUk9SOworICB9CisKKyAgcCA9IHN0cnN0cihkYXRhLT5zdGF0ZS5idWZmZXIsICJBREFUPSIpOworICBpZighcCkgeworICAgIEN1cmxfZmFpbGYoZGF0YSwgIlJlbW90ZSBob3N0IGRpZG4ndCBzZW5kIGFkYXQgcmVwbHkiKTsKKyAgICByZXR1cm4gQVVUSF9FUlJPUjsKKyAgfQorICBwICs9IDU7CisgIHJlc3VsdCA9IEN1cmxfYmFzZTY0X2RlY29kZShwLCAmcHRyLCAmbGVuKTsKKyAgaWYocmVzdWx0KSB7CisgICAgQ3VybF9mYWlsZihkYXRhLCAiYmFzZTY0LWRlY29kaW5nOiAlcyIsIGN1cmxfZWFzeV9zdHJlcnJvcihyZXN1bHQpKTsKKyAgICByZXR1cm4gQVVUSF9FUlJPUjsKKyAgfQorICBpZihsZW4gPiBzaXplb2YoYWRhdC5kYXQpLTEpIHsKKyAgICBmcmVlKHB0cik7CisgICAgcHRyID0gTlVMTDsKKyAgICBsZW4gPSAwOworICB9CisgIGlmKCFsZW4gfHwgIXB0cikgeworICAgIEN1cmxfZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBkZWNvZGUgYmFzZTY0IGZyb20gc2VydmVyIik7CisgICAgcmV0dXJuIEFVVEhfRVJST1I7CisgIH0KKyAgbWVtY3B5KChjaGFyICopYWRhdC5kYXQsIHB0ciwgbGVuKTsKKyAgZnJlZShwdHIpOworICBhZGF0Lmxlbmd0aCA9IGxlbjsKKyAgcmV0ID0ga3JiX3JkX3NhZmUoYWRhdC5kYXQsIGFkYXQubGVuZ3RoLCAmZC0+a2V5LAorICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyX2luICopaGlzY3RsYWRkciwKKyAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW15Y3RsYWRkciwgJm1zZ19kYXRhKTsKKyAgaWYocmV0KSB7CisgICAgQ3VybF9mYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyByZXBseSBmcm9tIHNlcnZlcjogJXMiLAorICAgICAgICAgICAgICAga3JiX2dldF9lcnJfdGV4dChyZXQpKTsKKyAgICByZXR1cm4gQVVUSF9FUlJPUjsKKyAgfQorICBrcmJfZ2V0X2ludChtc2dfZGF0YS5hcHBfZGF0YSwgJmNzLCA0LCAwKTsKKyAgaWYoY3MgLSBjaGVja3N1bSAhPSAxKSB7CisgICAgQ3VybF9mYWlsZihkYXRhLCAiQmFkIGNoZWNrc3VtIHJldHVybmVkIGZyb20gc2VydmVyIik7CisgICAgcmV0dXJuIEFVVEhfRVJST1I7CisgIH0KKyAgcmV0dXJuIEFVVEhfT0s7Cit9CisKK3N0cnVjdCBDdXJsX3NlY19jbGllbnRfbWVjaCBDdXJsX2tyYjRfY2xpZW50X21lY2ggPSB7CisgICAgIktFUkJFUk9TX1Y0IiwKKyAgICBzaXplb2Yoc3RydWN0IGtyYjRfZGF0YSksCisgICAgTlVMTCwgLyogaW5pdCAqLworICAgIGtyYjRfYXV0aCwKKyAgICBOVUxMLCAvKiBlbmQgKi8KKyAgICBrcmI0X2NoZWNrX3Byb3QsCisgICAga3JiNF9vdmVyaGVhZCwKKyAgICBrcmI0X2VuY29kZSwKKyAgICBrcmI0X2RlY29kZQorfTsKKworc3RhdGljIGVudW0gcHJvdGVjdGlvbl9sZXZlbAora3JiNF9zZXRfY29tbWFuZF9wcm90KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgZW51bSBwcm90ZWN0aW9uX2xldmVsIGxldmVsKQoreworICBlbnVtIHByb3RlY3Rpb25fbGV2ZWwgb2xkID0gY29ubi0+Y29tbWFuZF9wcm90OworICBERUJVR0FTU0VSVChsZXZlbCA+IFBST1RfTk9ORSAmJiBsZXZlbCA8IFBST1RfTEFTVCk7CisgIGNvbm4tPmNvbW1hbmRfcHJvdCA9IGxldmVsOworICByZXR1cm4gb2xkOworfQorCitDVVJMY29kZSBDdXJsX2tyYl9rYXV0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGRlc19jYmxvY2sga2V5OworICBkZXNfa2V5X3NjaGVkdWxlIHNjaGVkdWxlOworICBLVEVYVF9TVCB0a3QsIHRrdGNvcHk7CisgIGNoYXIgKm5hbWU7CisgIGNoYXIgKnA7CisgIGNoYXIgcGFzc3dkWzEwMF07CisgIHNpemVfdCB0bXAgPSAwOworICBzc2l6ZV90IG5yZWFkOworICBlbnVtIHByb3RlY3Rpb25fbGV2ZWwgc2F2ZTsKKyAgQ1VSTGNvZGUgcmVzdWx0OworICB1bnNpZ25lZCBjaGFyICpwdHI7CisgIHNpemVfdCBiYXNlNjRfc3ogPSAwOworCisgIHNhdmUgPSBrcmI0X3NldF9jb21tYW5kX3Byb3QoY29ubiwgUFJPVF9QUklWQVRFKTsKKworICByZXN1bHQgPSBDdXJsX2Z0cHNlbmRmKGNvbm4sICJTSVRFIEtBVVRIICVzIiwgY29ubi0+dXNlcik7CisKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgcmVzdWx0ID0gQ3VybF9HZXRGVFBSZXNwb25zZSgmbnJlYWQsIGNvbm4sIE5VTEwpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBpZihjb25uLT5kYXRhLT5zdGF0ZS5idWZmZXJbMF0gIT0gJzMnKSB7CisgICAga3JiNF9zZXRfY29tbWFuZF9wcm90KGNvbm4sIHNhdmUpOworICAgIHJldHVybiBDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZOworICB9CisKKyAgcCA9IHN0cnN0cihjb25uLT5kYXRhLT5zdGF0ZS5idWZmZXIsICJUPSIpOworICBpZighcCkgeworICAgIEN1cmxfZmFpbGYoY29ubi0+ZGF0YSwgIkJhZCByZXBseSBmcm9tIHNlcnZlciIpOworICAgIGtyYjRfc2V0X2NvbW1hbmRfcHJvdChjb25uLCBzYXZlKTsKKyAgICByZXR1cm4gQ1VSTEVfRlRQX1dFSVJEX1NFUlZFUl9SRVBMWTsKKyAgfQorCisgIHAgKz0gMjsKKyAgcmVzdWx0ID0gQ3VybF9iYXNlNjRfZGVjb2RlKHAsICZwdHIsICZ0bXApOworICBpZihyZXN1bHQpIHsKKyAgICBDdXJsX2ZhaWxmKGNvbm4tPmRhdGEsICJiYXNlNjQtZGVjb2Rpbmc6ICVzIiwgY3VybF9lYXN5X3N0cmVycm9yKHJlc3VsdCkpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgaWYodG1wID49IHNpemVvZih0a3QuZGF0KSkgeworICAgIGZyZWUocHRyKTsKKyAgICBwdHIgPSBOVUxMOworICAgIHRtcCA9IDA7CisgIH0KKyAgaWYoIXRtcCB8fCAhcHRyKSB7CisgICAgQ3VybF9mYWlsZihjb25uLT5kYXRhLCAiRmFpbGVkIHRvIGRlY29kZSBiYXNlNjQgaW4gcmVwbHkiKTsKKyAgICBrcmI0X3NldF9jb21tYW5kX3Byb3QoY29ubiwgc2F2ZSk7CisgICAgcmV0dXJuIENVUkxFX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFk7CisgIH0KKyAgbWVtY3B5KChjaGFyICopdGt0LmRhdCwgcHRyLCB0bXApOworICBmcmVlKHB0cik7CisgIHRrdC5sZW5ndGggPSB0bXA7CisgIHRrdGNvcHkubGVuZ3RoID0gdGt0Lmxlbmd0aDsKKworICBwID0gc3Ryc3RyKGNvbm4tPmRhdGEtPnN0YXRlLmJ1ZmZlciwgIlA9Iik7CisgIGlmKCFwKSB7CisgICAgQ3VybF9mYWlsZihjb25uLT5kYXRhLCAiQmFkIHJlcGx5IGZyb20gc2VydmVyIik7CisgICAga3JiNF9zZXRfY29tbWFuZF9wcm90KGNvbm4sIHNhdmUpOworICAgIHJldHVybiBDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZOworICB9CisgIG5hbWUgPSBwICsgMjsKKyAgZm9yKDsgKnAgJiYgKnAgIT0gJyAnICYmICpwICE9ICdccicgJiYgKnAgIT0gJ1xuJzsgcCsrKTsKKyAgKnAgPSAwOworCisgIGRlc19zdHJpbmdfdG9fa2V5IChjb25uLT5wYXNzd2QsICZrZXkpOworICBkZXNfa2V5X3NjaGVkKCZrZXksIHNjaGVkdWxlKTsKKworICBkZXNfcGNiY19lbmNyeXB0KCh2b2lkICopdGt0LmRhdCwgKHZvaWQgKil0a3Rjb3B5LmRhdCwKKyAgICAgICAgICAgICAgICAgICB0a3QubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlLCAma2V5LCBERVNfREVDUllQVCk7CisgIGlmKHN0cmNtcCAoKGNoYXIqKXRrdGNvcHkuZGF0ICsgOCwKKyAgICAgICAgICAgICAgS1JCX1RJQ0tFVF9HUkFOVElOR19USUNLRVQpICE9IDApIHsKKyAgICBhZnNfc3RyaW5nX3RvX2tleShwYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAga3JiX3JlYWxtb2Zob3N0KGNvbm4tPmhvc3QubmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgJmtleSk7CisgICAgZGVzX2tleV9zY2hlZCgma2V5LCBzY2hlZHVsZSk7CisgICAgZGVzX3BjYmNfZW5jcnlwdCgodm9pZCAqKXRrdC5kYXQsICh2b2lkICopdGt0Y29weS5kYXQsCisgICAgICAgICAgICAgICAgICAgICB0a3QubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGUsICZrZXksIERFU19ERUNSWVBUKTsKKyAgfQorICBtZW1zZXQoa2V5LCAwLCBzaXplb2Yoa2V5KSk7CisgIG1lbXNldChzY2hlZHVsZSwgMCwgc2l6ZW9mKHNjaGVkdWxlKSk7CisgIG1lbXNldChwYXNzd2QsIDAsIHNpemVvZihwYXNzd2QpKTsKKyAgcmVzdWx0ID0gQ3VybF9iYXNlNjRfZW5jb2RlKGNvbm4tPmRhdGEsIChjaGFyICopdGt0Y29weS5kYXQsIHRrdGNvcHkubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAsICZiYXNlNjRfc3opOworICBpZihyZXN1bHQpIHsKKyAgICBDdXJsX2ZhaWxmKGNvbm4tPmRhdGEsICJiYXNlNjQtZW5jb2Rpbmc6ICVzIiwgY3VybF9lYXN5X3N0cmVycm9yKHJlc3VsdCkpOworICAgIGtyYjRfc2V0X2NvbW1hbmRfcHJvdChjb25uLCBzYXZlKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIG1lbXNldCAodGt0Y29weS5kYXQsIDAsIHRrdGNvcHkubGVuZ3RoKTsKKworICByZXN1bHQgPSBDdXJsX2Z0cHNlbmRmKGNvbm4sICJTSVRFIEtBVVRIICVzICVzIiwgbmFtZSwgcCk7CisgIGZyZWUocCk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIHJlc3VsdCA9IEN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCBOVUxMKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisgIGtyYjRfc2V0X2NvbW1hbmRfcHJvdChjb25uLCBzYXZlKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKyNlbmRpZiAvKiBIQVZFX0tSQjQgKi8KKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfRlRQICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIva3JiNC5oIGIvY3VybC03LjI1LjAvbGliL2tyYjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDMwNzEyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2tyYjQuaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIF9fS1JCNF9ICisjZGVmaW5lIF9fS1JCNF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IEN1cmxfc2VjX2NsaWVudF9tZWNoIHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgc2l6ZV90IHNpemU7CisgIGludCAoKmluaXQpKHZvaWQgKik7CisgIGludCAoKmF1dGgpKHZvaWQgKiwgc3RydWN0IGNvbm5lY3RkYXRhICopOworICB2b2lkICgqZW5kKSh2b2lkICopOworICBpbnQgKCpjaGVja19wcm90KSh2b2lkICosIGludCk7CisgIGludCAoKm92ZXJoZWFkKSh2b2lkICosIGludCwgaW50KTsKKyAgaW50ICgqZW5jb2RlKSh2b2lkICosIGNvbnN0IHZvaWQqLCBpbnQsIGludCwgdm9pZCoqLCBzdHJ1Y3QgY29ubmVjdGRhdGEgKik7CisgIGludCAoKmRlY29kZSkodm9pZCAqLCB2b2lkKiwgaW50LCBpbnQsIHN0cnVjdCBjb25uZWN0ZGF0YSAqKTsKK307CisKKworI2RlZmluZSBBVVRIX09LICAgICAgICAgMAorI2RlZmluZSBBVVRIX0NPTlRJTlVFICAgMQorI2RlZmluZSBBVVRIX0VSUk9SICAgICAgMgorCisjaWZkZWYgSEFWRV9LUkI0CitleHRlcm4gc3RydWN0IEN1cmxfc2VjX2NsaWVudF9tZWNoIEN1cmxfa3JiNF9jbGllbnRfbWVjaDsKKyNlbmRpZgorI2lmZGVmIEhBVkVfR1NTQVBJCitleHRlcm4gc3RydWN0IEN1cmxfc2VjX2NsaWVudF9tZWNoIEN1cmxfa3JiNV9jbGllbnRfbWVjaDsKKyNlbmRpZgorCitDVVJMY29kZSBDdXJsX2tyYl9rYXV0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworaW50IEN1cmxfc2VjX3JlYWRfbXNnIChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwcm90ZWN0aW9uX2xldmVsKTsKK3ZvaWQgQ3VybF9zZWNfZW5kIChzdHJ1Y3QgY29ubmVjdGRhdGEgKik7CitDVVJMY29kZSBDdXJsX3NlY19sb2dpbiAoc3RydWN0IGNvbm5lY3RkYXRhICopOworaW50IEN1cmxfc2VjX3JlcXVlc3RfcHJvdCAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICpsZXZlbCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2tyYjUuYyBiL2N1cmwtNy4yNS4wL2xpYi9rcmI1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxNGFjYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9rcmI1LmMKQEAgLTAsMCArMSwzNDAgQEAKKy8qIEdTU0FQSS9rcmI1IHN1cHBvcnQgZm9yIEZUUCAtIGxvb3NlbHkgYmFzZWQgb24gb2xkIGtyYjQuYworICoKKyAqIENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4KKyAqIChSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgorICogQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAxMiBEYW5pZWwgU3RlbmJlcmcKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBJbnN0aXR1dGUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIElOU1RJVFVURSBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIElOU1RJVFVURSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLiAgKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAorI2lmZGVmIEhBVkVfR1NTQVBJCisKKyNpZmRlZiBIQVZFX09MRF9HU1NNSVQKKyNkZWZpbmUgR1NTX0NfTlRfSE9TVEJBU0VEX1NFUlZJQ0UgZ3NzX250X3NlcnZpY2VfbmFtZQorI2RlZmluZSBOQ09NUEFUIDEKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgImN1cmxfYmFzZTY0LmgiCisjaW5jbHVkZSAiZnRwLmgiCisjaW5jbHVkZSAiY3VybF9nc3NhcGkuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImtyYjQuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjZGVmaW5lIExPQ0FMX0FERFIgKCZjb25uLT5sb2NhbF9hZGRyKQorI2RlZmluZSBSRU1PVEVfQUREUiBjb25uLT5pcF9hZGRyLT5haV9hZGRyCisKK3N0YXRpYyBpbnQKK2tyYjVfaW5pdCh2b2lkICphcHBfZGF0YSkKK3sKKyAgZ3NzX2N0eF9pZF90ICpjb250ZXh0ID0gYXBwX2RhdGE7CisgIC8qIE1ha2Ugc3VyZSBvdXIgY29udGV4dCBpcyBpbml0aWFsaXplZCBmb3Iga3JiNV9lbmQuICovCisgICpjb250ZXh0ID0gR1NTX0NfTk9fQ09OVEVYVDsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2tyYjVfY2hlY2tfcHJvdCh2b2lkICphcHBfZGF0YSwgaW50IGxldmVsKQoreworICAodm9pZClhcHBfZGF0YTsgLyogdW51c2VkICovCisgIGlmKGxldmVsID09IFBST1RfQ09ORklERU5USUFMKQorICAgIHJldHVybiAtMTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2tyYjVfZGVjb2RlKHZvaWQgKmFwcF9kYXRhLCB2b2lkICpidWYsIGludCBsZW4sCisgICAgICAgICAgICBpbnQgbGV2ZWwgVU5VU0VEX1BBUkFNLAorICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uIFVOVVNFRF9QQVJBTSkKK3sKKyAgZ3NzX2N0eF9pZF90ICpjb250ZXh0ID0gYXBwX2RhdGE7CisgIE9NX3VpbnQzMiBtYWosIG1pbjsKKyAgZ3NzX2J1ZmZlcl9kZXNjIGVuYywgZGVjOworCisgICh2b2lkKWxldmVsOworICAodm9pZCljb25uOworCisgIGVuYy52YWx1ZSA9IGJ1ZjsKKyAgZW5jLmxlbmd0aCA9IGxlbjsKKyAgbWFqID0gZ3NzX3Vuc2VhbCgmbWluLCAqY29udGV4dCwgJmVuYywgJmRlYywgTlVMTCwgTlVMTCk7CisgIGlmKG1haiAhPSBHU1NfU19DT01QTEVURSkgeworICAgIGlmKGxlbiA+PSA0KQorICAgICAgc3RyY3B5KGJ1ZiwgIjU5OSAiKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBtZW1jcHkoYnVmLCBkZWMudmFsdWUsIGRlYy5sZW5ndGgpOworICBsZW4gPSBkZWMubGVuZ3RoOworICBnc3NfcmVsZWFzZV9idWZmZXIoJm1pbiwgJmRlYyk7CisKKyAgcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludAora3JiNV9vdmVyaGVhZCh2b2lkICphcHBfZGF0YSwgaW50IGxldmVsLCBpbnQgbGVuKQoreworICAvKiBubyBhcmd1bWVudHMgYXJlIHVzZWQgKi8KKyAgKHZvaWQpYXBwX2RhdGE7CisgICh2b2lkKWxldmVsOworICAodm9pZClsZW47CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitrcmI1X2VuY29kZSh2b2lkICphcHBfZGF0YSwgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGxlbmd0aCwgaW50IGxldmVsLCB2b2lkICoqdG8sCisgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gVU5VU0VEX1BBUkFNKQoreworICBnc3NfY3R4X2lkX3QgKmNvbnRleHQgPSBhcHBfZGF0YTsKKyAgZ3NzX2J1ZmZlcl9kZXNjIGRlYywgZW5jOworICBPTV91aW50MzIgbWFqLCBtaW47CisgIGludCBzdGF0ZTsKKyAgaW50IGxlbjsKKworICAvKiBzaHV0IGdjYyB1cCAqLworICBjb25uID0gTlVMTDsKKworICAvKiBOT1RFIHRoYXQgdGhlIGNhc3QgaXMgc2FmZSwgbmVpdGhlciBvZiB0aGUga3JiNSwgZ251IGdzcyBhbmQgaGVpbWRhbAorICAgKiBsaWJyYXJpZXMgbW9kaWZ5IHRoZSBpbnB1dCBidWZmZXIgaW4gZ3NzX3NlYWwoKQorICAgKi8KKyAgZGVjLnZhbHVlID0gKHZvaWQqKWZyb207CisgIGRlYy5sZW5ndGggPSBsZW5ndGg7CisgIG1haiA9IGdzc19zZWFsKCZtaW4sICpjb250ZXh0LAorICAgICAgICAgICAgICAgICBsZXZlbCA9PSBQUk9UX1BSSVZBVEUsCisgICAgICAgICAgICAgICAgIEdTU19DX1FPUF9ERUZBVUxULAorICAgICAgICAgICAgICAgICAmZGVjLCAmc3RhdGUsICZlbmMpOworCisgIGlmKG1haiAhPSBHU1NfU19DT01QTEVURSkKKyAgICByZXR1cm4gLTE7CisKKyAgLyogbWFsbG9jIGEgbmV3IGJ1ZmZlciwgaW4gY2FzZSBnc3NfcmVsZWFzZV9idWZmZXIgZG9lc24ndCB3b3JrIGFzCisgICAgIGV4cGVjdGVkICovCisgICp0byA9IG1hbGxvYyhlbmMubGVuZ3RoKTsKKyAgaWYoISp0bykKKyAgICByZXR1cm4gLTE7CisgIG1lbWNweSgqdG8sIGVuYy52YWx1ZSwgZW5jLmxlbmd0aCk7CisgIGxlbiA9IGVuYy5sZW5ndGg7CisgIGdzc19yZWxlYXNlX2J1ZmZlcigmbWluLCAmZW5jKTsKKyAgcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludAora3JiNV9hdXRoKHZvaWQgKmFwcF9kYXRhLCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGludCByZXQgPSBBVVRIX09LOworICBjaGFyICpwOworICBjb25zdCBjaGFyICpob3N0ID0gY29ubi0+aG9zdC5uYW1lOworICBzc2l6ZV90IG5yZWFkOworICBjdXJsX3NvY2tsZW5fdCBsID0gc2l6ZW9mKGNvbm4tPmxvY2FsX2FkZHIpOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgY29uc3QgY2hhciAqc2VydmljZSA9ICJmdHAiLCAqc3J2X2hvc3QgPSAiaG9zdCI7CisgIGdzc19idWZmZXJfZGVzYyBpbnB1dF9idWZmZXIsIG91dHB1dF9idWZmZXIsIF9nc3NyZXNwLCAqZ3NzcmVzcDsKKyAgT01fdWludDMyIG1haiwgbWluOworICBnc3NfbmFtZV90IGdzc25hbWU7CisgIGdzc19jdHhfaWRfdCAqY29udGV4dCA9IGFwcF9kYXRhOworICBzdHJ1Y3QgZ3NzX2NoYW5uZWxfYmluZGluZ3Nfc3RydWN0IGNoYW47CisgIHNpemVfdCBiYXNlNjRfc3ogPSAwOworCisgIGlmKGdldHNvY2tuYW1lKGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdLAorICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopTE9DQUxfQUREUiwgJmwpIDwgMCkKKyAgICBwZXJyb3IoImdldHNvY2tuYW1lKCkiKTsKKworICBjaGFuLmluaXRpYXRvcl9hZGRydHlwZSA9IEdTU19DX0FGX0lORVQ7CisgIGNoYW4uaW5pdGlhdG9yX2FkZHJlc3MubGVuZ3RoID0gbCAtIDQ7CisgIGNoYW4uaW5pdGlhdG9yX2FkZHJlc3MudmFsdWUgPQorICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKUxPQ0FMX0FERFIpLT5zaW5fYWRkci5zX2FkZHI7CisgIGNoYW4uYWNjZXB0b3JfYWRkcnR5cGUgPSBHU1NfQ19BRl9JTkVUOworICBjaGFuLmFjY2VwdG9yX2FkZHJlc3MubGVuZ3RoID0gbCAtIDQ7CisgIGNoYW4uYWNjZXB0b3JfYWRkcmVzcy52YWx1ZSA9CisgICAgJigoc3RydWN0IHNvY2thZGRyX2luICopUkVNT1RFX0FERFIpLT5zaW5fYWRkci5zX2FkZHI7CisgIGNoYW4uYXBwbGljYXRpb25fZGF0YS5sZW5ndGggPSAwOworICBjaGFuLmFwcGxpY2F0aW9uX2RhdGEudmFsdWUgPSBOVUxMOworCisgIC8qIHRoaXMgbG9vcCB3aWxsIGV4ZWN1dGUgdHdpY2UgKG9uY2UgZm9yIHNlcnZpY2UsIG9uY2UgZm9yIGhvc3QpICovCisgIGZvcig7OykgeworICAgIC8qIHRoaXMgcmVhbGx5IHNob3VsZG4ndCBiZSByZXBlYXRlZCBoZXJlLCBidXQgY2FuJ3QgaGVscCBpdCAqLworICAgIGlmKHNlcnZpY2UgPT0gc3J2X2hvc3QpIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfZnRwc2VuZGYoY29ubiwgIkFVVEggR1NTQVBJIik7CisKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIC0yOworICAgICAgaWYoQ3VybF9HZXRGVFBSZXNwb25zZSgmbnJlYWQsIGNvbm4sIE5VTEwpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgIGlmKGRhdGEtPnN0YXRlLmJ1ZmZlclswXSAhPSAnMycpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpbnB1dF9idWZmZXIudmFsdWUgPSBkYXRhLT5zdGF0ZS5idWZmZXI7CisgICAgaW5wdXRfYnVmZmVyLmxlbmd0aCA9IHNucHJpbnRmKGlucHV0X2J1ZmZlci52YWx1ZSwgQlVGU0laRSwgIiVzQCVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZSwgaG9zdCk7CisgICAgbWFqID0gZ3NzX2ltcG9ydF9uYW1lKCZtaW4sICZpbnB1dF9idWZmZXIsIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3NzbmFtZSk7CisgICAgaWYobWFqICE9IEdTU19TX0NPTVBMRVRFKSB7CisgICAgICBnc3NfcmVsZWFzZV9uYW1lKCZtaW4sICZnc3NuYW1lKTsKKyAgICAgIGlmKHNlcnZpY2UgPT0gc3J2X2hvc3QpIHsKKyAgICAgICAgQ3VybF9mYWlsZihkYXRhLCAiRXJyb3IgaW1wb3J0aW5nIHNlcnZpY2UgbmFtZSAlcyIsCisgICAgICAgICAgICAgICAgICAgaW5wdXRfYnVmZmVyLnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEFVVEhfRVJST1I7CisgICAgICB9CisgICAgICBzZXJ2aWNlID0gc3J2X2hvc3Q7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgLyogV2UgcGFzcyBOVUxMIGFzIHxvdXRwdXRfbmFtZV90eXBlfCB0byBhdm9pZCBhIGxlYWsuICovCisgICAgZ3NzX2Rpc3BsYXlfbmFtZSgmbWluLCBnc3NuYW1lLCAmb3V0cHV0X2J1ZmZlciwgTlVMTCk7CisgICAgQ3VybF9pbmZvZihkYXRhLCAiVHJ5aW5nIGFnYWluc3QgJXNcbiIsIG91dHB1dF9idWZmZXIudmFsdWUpOworICAgIGdzc3Jlc3AgPSBHU1NfQ19OT19CVUZGRVI7CisgICAgKmNvbnRleHQgPSBHU1NfQ19OT19DT05URVhUOworCisgICAgZG8geworICAgICAgLyogUmVsZWFzZSB0aGUgYnVmZmVyIGF0IGVhY2ggaXRlcmF0aW9uIHRvIGF2b2lkIGxlYWtpbmc6IHRoZSBmaXJzdCB0aW1lCisgICAgICAgICB3ZSBhcmUgcmVsZWFzaW5nIHRoZSBtZW1vcnkgZnJvbSBnc3NfZGlzcGxheV9uYW1lLiBUaGUgbGFzdCBpdGVtIGlzCisgICAgICAgICB0YWtlbiBjYXJlIGJ5IGEgZmluYWwgZ3NzX3JlbGVhc2VfYnVmZmVyLiAqLworICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW4sICZvdXRwdXRfYnVmZmVyKTsKKyAgICAgIHJldCA9IEFVVEhfT0s7CisgICAgICBtYWogPSBDdXJsX2dzc19pbml0X3NlY19jb250ZXh0KGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NyZXNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHV0X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgIGlmKGdzc3Jlc3ApIHsKKyAgICAgICAgZnJlZShfZ3NzcmVzcC52YWx1ZSk7CisgICAgICAgIGdzc3Jlc3AgPSBOVUxMOworICAgICAgfQorCisgICAgICBpZihHU1NfRVJST1IobWFqKSkgeworICAgICAgICBDdXJsX2luZm9mKGRhdGEsICJFcnJvciBjcmVhdGluZyBzZWN1cml0eSBjb250ZXh0XG4iKTsKKyAgICAgICAgcmV0ID0gQVVUSF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKG91dHB1dF9idWZmZXIubGVuZ3RoICE9IDApIHsKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9iYXNlNjRfZW5jb2RlKGRhdGEsIChjaGFyICopb3V0cHV0X2J1ZmZlci52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWZmZXIubGVuZ3RoLCAmcCwgJmJhc2U2NF9zeik7CisgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgIEN1cmxfaW5mb2YoZGF0YSwiYmFzZTY0LWVuY29kaW5nOiAlc1xuIiwgY3VybF9lYXN5X3N0cmVycm9yKHJlc3VsdCkpOworICAgICAgICAgIHJldCA9IEFVVEhfQ09OVElOVUU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBDdXJsX2Z0cHNlbmRmKGNvbm4sICJBREFUICVzIiwgcCk7CisKKyAgICAgICAgZnJlZShwKTsKKworICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICByZXQgPSAtMjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmKEN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCBOVUxMKSkgeworICAgICAgICAgIHJldCA9IC0xOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYoZGF0YS0+c3RhdGUuYnVmZmVyWzBdICE9ICcyJyAmJiBkYXRhLT5zdGF0ZS5idWZmZXJbMF0gIT0gJzMnKSB7CisgICAgICAgICAgQ3VybF9pbmZvZihkYXRhLCAiU2VydmVyIGRpZG4ndCBhY2NlcHQgYXV0aCBkYXRhXG4iKTsKKyAgICAgICAgICByZXQgPSBBVVRIX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcCA9IGRhdGEtPnN0YXRlLmJ1ZmZlciArIDQ7CisgICAgICAgIHAgPSBzdHJzdHIocCwgIkFEQVQ9Iik7CisgICAgICAgIGlmKHApIHsKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2Jhc2U2NF9kZWNvZGUocCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICoqKSZfZ3NzcmVzcC52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9nc3NyZXNwLmxlbmd0aCk7CisgICAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgICBDdXJsX2ZhaWxmKGRhdGEsImJhc2U2NC1kZWNvZGluZzogJXMiLCBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzdWx0KSk7CisgICAgICAgICAgICByZXQgPSBBVVRIX0NPTlRJTlVFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZ3NzcmVzcCA9ICZfZ3NzcmVzcDsKKyAgICAgIH0KKyAgICB9IHdoaWxlKG1haiA9PSBHU1NfU19DT05USU5VRV9ORUVERUQpOworCisgICAgZ3NzX3JlbGVhc2VfbmFtZSgmbWluLCAmZ3NzbmFtZSk7CisgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW4sICZvdXRwdXRfYnVmZmVyKTsKKworICAgIGlmKGdzc3Jlc3ApCisgICAgICBmcmVlKF9nc3NyZXNwLnZhbHVlKTsKKworICAgIGlmKHJldCA9PSBBVVRIX09LIHx8IHNlcnZpY2UgPT0gc3J2X2hvc3QpCisgICAgICByZXR1cm4gcmV0OworCisgICAgc2VydmljZSA9IHNydl9ob3N0OworICB9CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGtyYjVfZW5kKHZvaWQgKmFwcF9kYXRhKQoreworICAgIE9NX3VpbnQzMiBtaW47CisgICAgZ3NzX2N0eF9pZF90ICpjb250ZXh0ID0gYXBwX2RhdGE7CisgICAgaWYoKmNvbnRleHQgIT0gR1NTX0NfTk9fQ09OVEVYVCkgeworI2lmZGVmIERFQlVHQlVJTEQKKyAgICAgIE9NX3VpbnQzMiBtYWogPQorI2VuZGlmCisgICAgICBnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZtaW4sIGNvbnRleHQsIEdTU19DX05PX0JVRkZFUik7CisgICAgICBERUJVR0FTU0VSVChtYWogPT0gR1NTX1NfQ09NUExFVEUpOworICAgIH0KK30KKworc3RydWN0IEN1cmxfc2VjX2NsaWVudF9tZWNoIEN1cmxfa3JiNV9jbGllbnRfbWVjaCA9IHsKKyAgICAiR1NTQVBJIiwKKyAgICBzaXplb2YoZ3NzX2N0eF9pZF90KSwKKyAgICBrcmI1X2luaXQsCisgICAga3JiNV9hdXRoLAorICAgIGtyYjVfZW5kLAorICAgIGtyYjVfY2hlY2tfcHJvdCwKKyAgICBrcmI1X292ZXJoZWFkLAorICAgIGtyYjVfZW5jb2RlLAorICAgIGtyYjVfZGVjb2RlCit9OworCisjZW5kaWYgLyogSEFWRV9HU1NBUEkgKi8KKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfRlRQICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvbGRhcC5jIGIvY3VybC03LjI1LjAvbGliL2xkYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzc4NDc2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2xkYXAuYwpAQCAtMCwwICsxLDcyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0xEQVApICYmICFkZWZpbmVkKFVTRV9PUEVOTERBUCkKKworLyoKKyAqIE5vdGljZSB0aGF0IFVTRV9PUEVOTERBUCBpcyBvbmx5IGEgc291cmNlIGNvZGUgc2VsZWN0aW9uIHN3aXRjaC4gV2hlbgorICogbGliY3VybCBpcyBidWlsdCB3aXRoIFVTRV9PUEVOTERBUCBkZWZpbmVkIHRoZSBsaWJjdXJsIHNvdXJjZSBjb2RlIHRoYXQKKyAqIGdldHMgY29tcGlsZWQgaXMgdGhlIGNvZGUgZnJvbSBvcGVubGRhcC5jLCBvdGhlcndpc2UgdGhlIGNvZGUgdGhhdCBnZXRzCisgKiBjb21waWxlZCBpcyB0aGUgY29kZSBmcm9tIGxkYXAuYy4KKyAqCisgKiBXaGVuIFVTRV9PUEVOTERBUCBpcyBkZWZpbmVkIGEgcmVjZW50IHZlcnNpb24gb2YgdGhlIE9wZW5MREFQIGxpYnJhcnkKKyAqIG1pZ2h0IGJlIHJlcXVpcmVkIGZvciBjb21waWxhdGlvbiBhbmQgcnVudGltZS4gSW4gb3JkZXIgdG8gdXNlIGFuY2llbnQKKyAqIE9wZW5MREFQIGxpYnJhcnkgdmVyc2lvbnMsIFVTRV9PUEVOTERBUCBzaGFsbCBub3QgYmUgZGVmaW5lZC4KKyAqLworCisjaWZkZWYgQ1VSTF9MREFQX1dJTiAgICAgICAgICAgIC8qIFVzZSBXaW5kb3dzIExEQVAgaW1wbGVtZW50YXRpb24uICovCisjIGluY2x1ZGUgPHdpbmxkYXAuaD4KKyMgaWZuZGVmIExEQVBfVkVORE9SX05BTUUKKyMgIGVycm9yIFlvdXIgUGxhdGZvcm0gU0RLIGlzIE5PVCBzdWZmaWNpZW50IGZvciBMREFQIHN1cHBvcnQhIFwKKyAgICAgICAgIFVwZGF0ZSB5b3VyIFBsYXRmb3JtIFNESywgb3IgZGlzYWJsZSBMREFQIHN1cHBvcnQhCisjIGVsc2UKKyMgIGluY2x1ZGUgPHdpbmJlci5oPgorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIExEQVBfREVQUkVDQVRFRCAxICAgICAgLyogQmUgc3VyZSBsZGFwX2luaXQoKSBpcyBkZWZpbmVkLiAqLworIyBpZmRlZiBIQVZFX0xCRVJfSAorIyAgaW5jbHVkZSA8bGJlci5oPgorIyBlbmRpZgorIyBpbmNsdWRlIDxsZGFwLmg+CisjIGlmIChkZWZpbmVkKEhBVkVfTERBUF9TU0wpICYmIGRlZmluZWQoSEFWRV9MREFQX1NTTF9IKSkKKyMgIGluY2x1ZGUgPGxkYXBfc3NsLmg+CisjIGVuZGlmIC8qIEhBVkVfTERBUF9TU0wgJiYgSEFWRV9MREFQX1NTTF9IICovCisjZW5kaWYKKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImVzY2FwZS5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAidHJhbnNmZXIuaCIKKyNpbmNsdWRlICJzdHJlcXVhbC5oIgorI2luY2x1ZGUgInN0cnRvay5oIgorI2luY2x1ZGUgImN1cmxfbGRhcC5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAiY3VybF9iYXNlNjQuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZm5kZWYgSEFWRV9MREFQX1VSTF9QQVJTRQorCisvKiBVc2Ugb3VyIG93biBpbXBsZW1lbnRhdGlvbi4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgICAqbHVkX2hvc3Q7CisgICAgaW50ICAgICBsdWRfcG9ydDsKKyAgICBjaGFyICAgKmx1ZF9kbjsKKyAgICBjaGFyICAqKmx1ZF9hdHRyczsKKyAgICBpbnQgICAgIGx1ZF9zY29wZTsKKyAgICBjaGFyICAgKmx1ZF9maWx0ZXI7CisgICAgY2hhciAgKipsdWRfZXh0czsKK30gQ1VSTF9MREFQVVJMRGVzYzsKKworI3VuZGVmIExEQVBVUkxEZXNjCisjZGVmaW5lIExEQVBVUkxEZXNjICAgICAgICAgICAgIENVUkxfTERBUFVSTERlc2MKKworc3RhdGljIGludCAgX2xkYXBfdXJsX3BhcnNlIChjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExEQVBVUkxEZXNjICoqbHVkcCk7CitzdGF0aWMgdm9pZCBfbGRhcF9mcmVlX3VybGRlc2MgKExEQVBVUkxEZXNjICpsdWRwKTsKKworI3VuZGVmIGxkYXBfZnJlZV91cmxkZXNjCisjZGVmaW5lIGxkYXBfZnJlZV91cmxkZXNjICAgICAgIF9sZGFwX2ZyZWVfdXJsZGVzYworI2VuZGlmCisKKyNpZmRlZiBERUJVR19MREFQCisgICNkZWZpbmUgTERBUF9UUkFDRSh4KSAgIGRvIHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sZGFwX3RyYWNlICgiJXU6ICIsIF9fTElORV9fKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sZGFwX3RyYWNlIHg7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSBXSElMRV9GQUxTRQorCisgIHN0YXRpYyB2b2lkIF9sZGFwX3RyYWNlIChjb25zdCBjaGFyICpmbXQsIC4uLik7CisjZWxzZQorICAjZGVmaW5lIExEQVBfVFJBQ0UoeCkgICBDdXJsX25vcF9zdG10CisjZW5kaWYKKworCitzdGF0aWMgQ1VSTGNvZGUgQ3VybF9sZGFwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CisKKy8qCisgKiBMREFQIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfbGRhcCA9IHsKKyAgIkxEQVAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIEN1cmxfbGRhcCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBQT1JUX0xEQVAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX0xEQVAsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCit9OworCisjaWZkZWYgSEFWRV9MREFQX1NTTAorLyoKKyAqIExEQVBTIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfbGRhcHMgPSB7CisgICJMREFQUyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBDdXJsX2xkYXAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9MREFQUywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19MREFQIHwgQ1VSTFBST1RPX0xEQVBTLCAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9TU0wgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKyNlbmRpZgorCisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX2xkYXAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBDVVJMY29kZSBzdGF0dXMgPSBDVVJMRV9PSzsKKyAgaW50IHJjID0gMDsKKyAgTERBUCAqc2VydmVyID0gTlVMTDsKKyAgTERBUFVSTERlc2MgKmx1ZHAgPSBOVUxMOworICBMREFQTWVzc2FnZSAqcmVzdWx0ID0gTlVMTDsKKyAgTERBUE1lc3NhZ2UgKmVudHJ5SXRlcmF0b3I7CisgIGludCBudW0gPSAwOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YT1jb25uLT5kYXRhOworICBpbnQgbGRhcF9wcm90byA9IExEQVBfVkVSU0lPTjM7CisgIGludCBsZGFwX3NzbCA9IDA7CisgIGNoYXIgKnZhbF9iNjQgPSBOVUxMOworICBzaXplX3QgdmFsX2I2NF9zeiA9IDA7CisgIGN1cmxfb2ZmX3QgZGxzaXplID0gMDsKKyNpZmRlZiBMREFQX09QVF9ORVRXT1JLX1RJTUVPVVQKKyAgc3RydWN0IHRpbWV2YWwgbGRhcF90aW1lb3V0ID0gezEwLDB9OyAvKiAxMCBzZWMgY29ubmVjdGlvbi9zZWFyY2ggdGltZW91dCAqLworI2VuZGlmCisKKyAgKmRvbmUgPSBUUlVFOyAvKiB1bmNvbmRpdGlvbmFsbHkgKi8KKyAgaW5mb2YoZGF0YSwgIkxEQVAgbG9jYWw6IExEQVAgVmVuZG9yID0gJXMgOyBMREFQIFZlcnNpb24gPSAlZFxuIiwKKyAgICAgICAgICBMREFQX1ZFTkRPUl9OQU1FLCBMREFQX1ZFTkRPUl9WRVJTSU9OKTsKKyAgaW5mb2YoZGF0YSwgIkxEQVAgbG9jYWw6ICVzXG4iLCBkYXRhLT5jaGFuZ2UudXJsKTsKKworI2lmZGVmIEhBVkVfTERBUF9VUkxfUEFSU0UKKyAgcmMgPSBsZGFwX3VybF9wYXJzZShkYXRhLT5jaGFuZ2UudXJsLCAmbHVkcCk7CisjZWxzZQorICByYyA9IF9sZGFwX3VybF9wYXJzZShjb25uLCAmbHVkcCk7CisjZW5kaWYKKyAgaWYocmMgIT0gMCkgeworICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiAlcyIsIGxkYXBfZXJyMnN0cmluZyhyYykpOworICAgIHN0YXR1cyA9IENVUkxFX0xEQVBfSU5WQUxJRF9VUkw7CisgICAgZ290byBxdWl0OworICB9CisKKyAgLyogR2V0IHRoZSBVUkwgc2NoZW1lICggZWl0aGVyIGxkYXAgb3IgbGRhcHMgKSAqLworICBpZihjb25uLT5naXZlbi0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCkKKyAgICBsZGFwX3NzbCA9IDE7CisgIGluZm9mKGRhdGEsICJMREFQIGxvY2FsOiB0cnlpbmcgdG8gZXN0YWJsaXNoICVzIGNvbm5lY3Rpb25cbiIsCisgICAgICAgICAgbGRhcF9zc2wgPyAiZW5jcnlwdGVkIiA6ICJjbGVhcnRleHQiKTsKKworI2lmZGVmIExEQVBfT1BUX05FVFdPUktfVElNRU9VVAorICBsZGFwX3NldF9vcHRpb24oTlVMTCwgTERBUF9PUFRfTkVUV09SS19USU1FT1VULCAmbGRhcF90aW1lb3V0KTsKKyNlbmRpZgorICBsZGFwX3NldF9vcHRpb24oTlVMTCwgTERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTiwgJmxkYXBfcHJvdG8pOworCisgIGlmKGxkYXBfc3NsKSB7CisjaWZkZWYgSEFWRV9MREFQX1NTTAorI2lmZGVmIENVUkxfTERBUF9XSU4KKyAgICAvKiBXaW4zMiBMREFQIFNESyBkb2Vzbid0IHN1cHBvcnQgaW5zZWN1cmUgbW9kZSB3aXRob3V0IENBISAqLworICAgIHNlcnZlciA9IGxkYXBfc3NsaW5pdChjb25uLT5ob3N0Lm5hbWUsIChpbnQpY29ubi0+cG9ydCwgMSk7CisgICAgbGRhcF9zZXRfb3B0aW9uKHNlcnZlciwgTERBUF9PUFRfU1NMLCBMREFQX09QVF9PTik7CisjZWxzZQorICAgIGludCBsZGFwX29wdGlvbjsKKyAgICBjaGFyKiBsZGFwX2NhID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV07CisjaWYgZGVmaW5lZChDVVJMX0hBU19OT1ZFTExfTERBUFNESykKKyAgICByYyA9IGxkYXBzc2xfY2xpZW50X2luaXQoTlVMTCwgTlVMTCk7CisgICAgaWYocmMgIT0gTERBUF9TVUNDRVNTKSB7CisgICAgICBmYWlsZihkYXRhLCAiTERBUCBsb2NhbDogbGRhcHNzbF9jbGllbnRfaW5pdCAlcyIsIGxkYXBfZXJyMnN0cmluZyhyYykpOworICAgICAgc3RhdHVzID0gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgICAgZ290byBxdWl0OworICAgIH0KKyAgICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpIHsKKyAgICAgIC8qIE5vdmVsbCBTREsgc3VwcG9ydHMgREVSIG9yIEJBU0U2NCBmaWxlcy4gKi8KKyAgICAgIGludCBjZXJ0X3R5cGUgPSBMREFQU1NMX0NFUlRfRklMRVRZUEVfQjY0OworICAgICAgaWYoKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfVFlQRV0pICYmCisgICAgICAgICAoQ3VybF9yYXdfZXF1YWwoZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF9UWVBFXSwgIkRFUiIpKSkKKyAgICAgICAgY2VydF90eXBlID0gTERBUFNTTF9DRVJUX0ZJTEVUWVBFX0RFUjsKKyAgICAgIGlmKCFsZGFwX2NhKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiBFUlJPUiAlcyBDQSBjZXJ0IG5vdCBzZXQhIiwKKyAgICAgICAgICAgICAgKGNlcnRfdHlwZSA9PSBMREFQU1NMX0NFUlRfRklMRVRZUEVfREVSID8gIkRFUiIgOiAiUEVNIikpOworICAgICAgICBzdGF0dXMgPSBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CisgICAgICAgIGdvdG8gcXVpdDsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJMREFQIGxvY2FsOiB1c2luZyAlcyBDQSBjZXJ0ICclcydcbiIsCisgICAgICAgICAgICAgIChjZXJ0X3R5cGUgPT0gTERBUFNTTF9DRVJUX0ZJTEVUWVBFX0RFUiA/ICJERVIiIDogIlBFTSIpLAorICAgICAgICAgICAgICBsZGFwX2NhKTsKKyAgICAgIHJjID0gbGRhcHNzbF9hZGRfdHJ1c3RlZF9jZXJ0KGxkYXBfY2EsIGNlcnRfdHlwZSk7CisgICAgICBpZihyYyAhPSBMREFQX1NVQ0NFU1MpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkxEQVAgbG9jYWw6IEVSUk9SIHNldHRpbmcgJXMgQ0EgY2VydDogJXMiLAorICAgICAgICAgICAgICAgIChjZXJ0X3R5cGUgPT0gTERBUFNTTF9DRVJUX0ZJTEVUWVBFX0RFUiA/ICJERVIiIDogIlBFTSIpLAorICAgICAgICAgICAgICAgIGxkYXBfZXJyMnN0cmluZyhyYykpOworICAgICAgICBzdGF0dXMgPSBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CisgICAgICAgIGdvdG8gcXVpdDsKKyAgICAgIH0KKyAgICAgIGxkYXBfb3B0aW9uID0gTERBUFNTTF9WRVJJRllfU0VSVkVSOworICAgIH0KKyAgICBlbHNlCisgICAgICBsZGFwX29wdGlvbiA9IExEQVBTU0xfVkVSSUZZX05PTkU7CisgICAgcmMgPSBsZGFwc3NsX3NldF92ZXJpZnlfbW9kZShsZGFwX29wdGlvbik7CisgICAgaWYocmMgIT0gTERBUF9TVUNDRVNTKSB7CisgICAgICBmYWlsZihkYXRhLCAiTERBUCBsb2NhbDogRVJST1Igc2V0dGluZyBjZXJ0IHZlcmlmeSBtb2RlOiAlcyIsCisgICAgICAgICAgICAgIGxkYXBfZXJyMnN0cmluZyhyYykpOworICAgICAgc3RhdHVzID0gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgICAgZ290byBxdWl0OworICAgIH0KKyAgICBzZXJ2ZXIgPSBsZGFwc3NsX2luaXQoY29ubi0+aG9zdC5uYW1lLCAoaW50KWNvbm4tPnBvcnQsIDEpOworICAgIGlmKHNlcnZlciA9PSBOVUxMKSB7CisgICAgICBmYWlsZihkYXRhLCAiTERBUCBsb2NhbDogQ2Fubm90IGNvbm5lY3QgdG8gJXM6JWh1IiwKKyAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBjb25uLT5wb3J0KTsKKyAgICAgIHN0YXR1cyA9IENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICAgIGdvdG8gcXVpdDsKKyAgICB9CisjZWxpZiBkZWZpbmVkKExEQVBfT1BUX1hfVExTKQorICAgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICAgICAgLyogT3BlbkxEQVAgU0RLIHN1cHBvcnRzIEJBU0U2NCBmaWxlcy4gKi8KKyAgICAgIGlmKChkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1RZUEVdKSAmJgorICAgICAgICAgKCFDdXJsX3Jhd19lcXVhbChkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1RZUEVdLCAiUEVNIikpKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiBFUlJPUiBPcGVuTERBUCBvbmx5IHN1cHBvcnRzIFBFTSBjZXJ0LXR5cGUhIik7CisgICAgICAgIHN0YXR1cyA9IENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICAgICAgZ290byBxdWl0OworICAgICAgfQorICAgICAgaWYoIWxkYXBfY2EpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkxEQVAgbG9jYWw6IEVSUk9SIFBFTSBDQSBjZXJ0IG5vdCBzZXQhIik7CisgICAgICAgIHN0YXR1cyA9IENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICAgICAgZ290byBxdWl0OworICAgICAgfQorICAgICAgaW5mb2YoZGF0YSwgIkxEQVAgbG9jYWw6IHVzaW5nIFBFTSBDQSBjZXJ0OiAlc1xuIiwgbGRhcF9jYSk7CisgICAgICByYyA9IGxkYXBfc2V0X29wdGlvbihOVUxMLCBMREFQX09QVF9YX1RMU19DQUNFUlRGSUxFLCBsZGFwX2NhKTsKKyAgICAgIGlmKHJjICE9IExEQVBfU1VDQ0VTUykgeworICAgICAgICBmYWlsZihkYXRhLCAiTERBUCBsb2NhbDogRVJST1Igc2V0dGluZyBQRU0gQ0EgY2VydDogJXMiLAorICAgICAgICAgICAgICAgIGxkYXBfZXJyMnN0cmluZyhyYykpOworICAgICAgICBzdGF0dXMgPSBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CisgICAgICAgIGdvdG8gcXVpdDsKKyAgICAgIH0KKyAgICAgIGxkYXBfb3B0aW9uID0gTERBUF9PUFRfWF9UTFNfREVNQU5EOworICAgIH0KKyAgICBlbHNlCisgICAgICBsZGFwX29wdGlvbiA9IExEQVBfT1BUX1hfVExTX05FVkVSOworCisgICAgcmMgPSBsZGFwX3NldF9vcHRpb24oTlVMTCwgTERBUF9PUFRfWF9UTFNfUkVRVUlSRV9DRVJULCAmbGRhcF9vcHRpb24pOworICAgIGlmKHJjICE9IExEQVBfU1VDQ0VTUykgeworICAgICAgZmFpbGYoZGF0YSwgIkxEQVAgbG9jYWw6IEVSUk9SIHNldHRpbmcgY2VydCB2ZXJpZnkgbW9kZTogJXMiLAorICAgICAgICAgICAgICBsZGFwX2VycjJzdHJpbmcocmMpKTsKKyAgICAgIHN0YXR1cyA9IENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICAgIGdvdG8gcXVpdDsKKyAgICB9CisgICAgc2VydmVyID0gbGRhcF9pbml0KGNvbm4tPmhvc3QubmFtZSwgKGludCljb25uLT5wb3J0KTsKKyAgICBpZihzZXJ2ZXIgPT0gTlVMTCkgeworICAgICAgZmFpbGYoZGF0YSwgIkxEQVAgbG9jYWw6IENhbm5vdCBjb25uZWN0IHRvICVzOiVodSIsCisgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwgY29ubi0+cG9ydCk7CisgICAgICBzdGF0dXMgPSBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICBnb3RvIHF1aXQ7CisgICAgfQorICAgIGxkYXBfb3B0aW9uID0gTERBUF9PUFRfWF9UTFNfSEFSRDsKKyAgICByYyA9IGxkYXBfc2V0X29wdGlvbihzZXJ2ZXIsIExEQVBfT1BUX1hfVExTLCAmbGRhcF9vcHRpb24pOworICAgIGlmKHJjICE9IExEQVBfU1VDQ0VTUykgeworICAgICAgZmFpbGYoZGF0YSwgIkxEQVAgbG9jYWw6IEVSUk9SIHNldHRpbmcgU1NML1RMUyBtb2RlOiAlcyIsCisgICAgICAgICAgICAgIGxkYXBfZXJyMnN0cmluZyhyYykpOworICAgICAgc3RhdHVzID0gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgICAgZ290byBxdWl0OworICAgIH0KKy8qCisgICAgcmMgPSBsZGFwX3N0YXJ0X3Rsc19zKHNlcnZlciwgTlVMTCwgTlVMTCk7CisgICAgaWYocmMgIT0gTERBUF9TVUNDRVNTKSB7CisgICAgICBmYWlsZihkYXRhLCAiTERBUCBsb2NhbDogRVJST1Igc3RhcnRpbmcgU1NML1RMUyBtb2RlOiAlcyIsCisgICAgICAgICAgICAgIGxkYXBfZXJyMnN0cmluZyhyYykpOworICAgICAgc3RhdHVzID0gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgICAgZ290byBxdWl0OworICAgIH0KKyovCisjZWxzZQorICAgIC8qIHdlIHNob3VsZCBwcm9iYWJseSBuZXZlciBjb21lIHVwIHRvIGhlcmUgc2luY2UgY29uZmlndXJlCisgICAgICAgc2hvdWxkIGNoZWNrIGluIGZpcnN0IHBsYWNlIGlmIHdlIGNhbiBzdXBwb3J0IExEQVAgU1NML1RMUyAqLworICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiBTU0wvVExTIG5vdCBzdXBwb3J0ZWQgd2l0aCB0aGlzIHZlcnNpb24gIgorICAgICAgICAgICAgIm9mIHRoZSBPcGVuTERBUCB0b29sa2l0XG4iKTsKKyAgICBzdGF0dXMgPSBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CisgICAgZ290byBxdWl0OworI2VuZGlmCisjZW5kaWYKKyNlbmRpZiAvKiBDVVJMX0xEQVBfVVNFX1NTTCAqLworICB9CisgIGVsc2UgeworICAgIHNlcnZlciA9IGxkYXBfaW5pdChjb25uLT5ob3N0Lm5hbWUsIChpbnQpY29ubi0+cG9ydCk7CisgICAgaWYoc2VydmVyID09IE5VTEwpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiBDYW5ub3QgY29ubmVjdCB0byAlczolaHUiLAorICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsIGNvbm4tPnBvcnQpOworICAgICAgc3RhdHVzID0gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgICAgZ290byBxdWl0OworICAgIH0KKyAgfQorI2lmZGVmIENVUkxfTERBUF9XSU4KKyAgbGRhcF9zZXRfb3B0aW9uKHNlcnZlciwgTERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTiwgJmxkYXBfcHJvdG8pOworI2VuZGlmCisKKyAgcmMgPSBsZGFwX3NpbXBsZV9iaW5kX3Moc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLnVzZXJfcGFzc3dkID8gY29ubi0+dXNlciA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgPyBjb25uLT5wYXNzd2QgOiBOVUxMKTsKKyAgaWYoIWxkYXBfc3NsICYmIHJjICE9IDApIHsKKyAgICBsZGFwX3Byb3RvID0gTERBUF9WRVJTSU9OMjsKKyAgICBsZGFwX3NldF9vcHRpb24oc2VydmVyLCBMREFQX09QVF9QUk9UT0NPTF9WRVJTSU9OLCAmbGRhcF9wcm90byk7CisgICAgcmMgPSBsZGFwX3NpbXBsZV9iaW5kX3Moc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgPyBjb25uLT51c2VyIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLnVzZXJfcGFzc3dkID8gY29ubi0+cGFzc3dkIDogTlVMTCk7CisgIH0KKyAgaWYocmMgIT0gMCkgeworICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiBsZGFwX3NpbXBsZV9iaW5kX3MgJXMiLCBsZGFwX2VycjJzdHJpbmcocmMpKTsKKyAgICBzdGF0dXMgPSBDVVJMRV9MREFQX0NBTk5PVF9CSU5EOworICAgIGdvdG8gcXVpdDsKKyAgfQorCisgIHJjID0gbGRhcF9zZWFyY2hfcyhzZXJ2ZXIsIGx1ZHAtPmx1ZF9kbiwgbHVkcC0+bHVkX3Njb3BlLAorICAgICAgICAgICAgICAgICAgICAgbHVkcC0+bHVkX2ZpbHRlciwgbHVkcC0+bHVkX2F0dHJzLCAwLCAmcmVzdWx0KTsKKworICBpZihyYyAhPSAwICYmIHJjICE9IExEQVBfU0laRUxJTUlUX0VYQ0VFREVEKSB7CisgICAgZmFpbGYoZGF0YSwgIkxEQVAgcmVtb3RlOiAlcyIsIGxkYXBfZXJyMnN0cmluZyhyYykpOworICAgIHN0YXR1cyA9IENVUkxFX0xEQVBfU0VBUkNIX0ZBSUxFRDsKKyAgICBnb3RvIHF1aXQ7CisgIH0KKworICBmb3IobnVtID0gMCwgZW50cnlJdGVyYXRvciA9IGxkYXBfZmlyc3RfZW50cnkoc2VydmVyLCByZXN1bHQpOworICAgICAgZW50cnlJdGVyYXRvcjsKKyAgICAgIGVudHJ5SXRlcmF0b3IgPSBsZGFwX25leHRfZW50cnkoc2VydmVyLCBlbnRyeUl0ZXJhdG9yKSwgbnVtKyspIHsKKyAgICBCZXJFbGVtZW50ICpiZXIgPSBOVUxMOworICAgIGNoYXIgICphdHRyaWJ1dGU7ICAgICAgIC8qISBzdXNwaWNpb3VzIHRoYXQgdGhpcyBpc24ndCAnY29uc3QnICovCisgICAgY2hhciAgKmRuID0gbGRhcF9nZXRfZG4oc2VydmVyLCBlbnRyeUl0ZXJhdG9yKTsKKyAgICBpbnQgaTsKKworICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIkROOiAiLCA0KTsKKyAgICBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKWRuLCAwKTsKKyAgICBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKSJcbiIsIDEpOworCisgICAgZGxzaXplICs9IHN0cmxlbihkbikrNTsKKworICAgIGZvcihhdHRyaWJ1dGUgPSBsZGFwX2ZpcnN0X2F0dHJpYnV0ZShzZXJ2ZXIsIGVudHJ5SXRlcmF0b3IsICZiZXIpOworICAgICAgICBhdHRyaWJ1dGU7CisgICAgICAgIGF0dHJpYnV0ZSA9IGxkYXBfbmV4dF9hdHRyaWJ1dGUoc2VydmVyLCBlbnRyeUl0ZXJhdG9yLCBiZXIpKSB7CisgICAgICBCZXJWYWx1ZSAqKnZhbHMgPSBsZGFwX2dldF92YWx1ZXNfbGVuKHNlcnZlciwgZW50cnlJdGVyYXRvciwgYXR0cmlidXRlKTsKKworICAgICAgaWYodmFscyAhPSBOVUxMKSB7CisgICAgICAgIGZvcihpID0gMDsgKHZhbHNbaV0gIT0gTlVMTCk7IGkrKykgeworICAgICAgICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIlx0IiwgMSk7CisgICAgICAgICAgQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgKGNoYXIgKikgYXR0cmlidXRlLCAwKTsKKyAgICAgICAgICBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKSI6ICIsIDIpOworICAgICAgICAgIGRsc2l6ZSArPSBzdHJsZW4oYXR0cmlidXRlKSszOworCisgICAgICAgICAgaWYoKHN0cmxlbihhdHRyaWJ1dGUpID4gNykgJiYKKyAgICAgICAgICAgICAgKHN0cmNtcCgiO2JpbmFyeSIsCisgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilhdHRyaWJ1dGUgKworICAgICAgICAgICAgICAgICAgICAgIChzdHJsZW4oKGNoYXIgKilhdHRyaWJ1dGUpIC0gNykpID09IDApKSB7CisgICAgICAgICAgICAvKiBCaW5hcnkgYXR0cmlidXRlLCBlbmNvZGUgdG8gYmFzZTY0LiAqLworICAgICAgICAgICAgQ1VSTGNvZGUgZXJyb3IgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHNbaV0tPmJ2X3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHNbaV0tPmJ2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWxfYjY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbF9iNjRfc3opOworICAgICAgICAgICAgaWYoZXJyb3IpIHsKKyAgICAgICAgICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbih2YWxzKTsKKyAgICAgICAgICAgICAgbGRhcF9tZW1mcmVlKGF0dHJpYnV0ZSk7CisgICAgICAgICAgICAgIGxkYXBfbWVtZnJlZShkbik7CisgICAgICAgICAgICAgIGlmKGJlcikKKyAgICAgICAgICAgICAgICBiZXJfZnJlZShiZXIsIDApOworICAgICAgICAgICAgICBzdGF0dXMgPSBlcnJvcjsKKyAgICAgICAgICAgICAgZ290byBxdWl0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYodmFsX2I2NF9zeiA+IDApIHsKKyAgICAgICAgICAgICAgQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgdmFsX2I2NCwgdmFsX2I2NF9zeik7CisgICAgICAgICAgICAgIGZyZWUodmFsX2I2NCk7CisgICAgICAgICAgICAgIGRsc2l6ZSArPSB2YWxfYjY0X3N6OworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIHZhbHNbaV0tPmJ2X3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHNbaV0tPmJ2X2xlbik7CisgICAgICAgICAgICBkbHNpemUgKz0gdmFsc1tpXS0+YnZfbGVuOworICAgICAgICAgIH0KKyAgICAgICAgICBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKSJcbiIsIDApOworICAgICAgICAgIGRsc2l6ZSsrOworICAgICAgICB9CisKKyAgICAgICAgLyogRnJlZSBtZW1vcnkgdXNlZCB0byBzdG9yZSB2YWx1ZXMgKi8KKyAgICAgICAgbGRhcF92YWx1ZV9mcmVlX2xlbih2YWxzKTsKKyAgICAgIH0KKyAgICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIlxuIiwgMSk7CisgICAgICBkbHNpemUrKzsKKyAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCBkbHNpemUpOworICAgICAgbGRhcF9tZW1mcmVlKGF0dHJpYnV0ZSk7CisgICAgfQorICAgIGxkYXBfbWVtZnJlZShkbik7CisgICAgaWYoYmVyKQorICAgICAgIGJlcl9mcmVlKGJlciwgMCk7CisgIH0KKworcXVpdDoKKyAgaWYocmVzdWx0KSB7CisgICAgbGRhcF9tc2dmcmVlKHJlc3VsdCk7CisgICAgTERBUF9UUkFDRSAoKCJSZWNlaXZlZCAlZCBlbnRyaWVzXG4iLCBudW0pKTsKKyAgfQorICBpZihyYyA9PSBMREFQX1NJWkVMSU1JVF9FWENFRURFRCkKKyAgICBpbmZvZihkYXRhLCAiVGhlcmUgYXJlIG1vcmUgdGhhbiAlZCBlbnRyaWVzXG4iLCBudW0pOworICBpZihsdWRwKQorICAgIGxkYXBfZnJlZV91cmxkZXNjKGx1ZHApOworICBpZihzZXJ2ZXIpCisgICAgbGRhcF91bmJpbmRfcyhzZXJ2ZXIpOworI2lmIGRlZmluZWQoSEFWRV9MREFQX1NTTCkgJiYgZGVmaW5lZChDVVJMX0hBU19OT1ZFTExfTERBUFNESykKKyAgaWYobGRhcF9zc2wpCisgICAgbGRhcHNzbF9jbGllbnRfZGVpbml0KCk7CisjZW5kaWYgLyogSEFWRV9MREFQX1NTTCAmJiBDVVJMX0hBU19OT1ZFTExfTERBUFNESyAqLworCisgIC8qIG5vIGRhdGEgdG8gdHJhbnNmZXIgKi8KKyAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CisgIGNvbm4tPmJpdHMuY2xvc2UgPSBUUlVFOworCisgIHJldHVybiBzdGF0dXM7Cit9CisKKyNpZmRlZiBERUJVR19MREFQCitzdGF0aWMgdm9pZCBfbGRhcF90cmFjZSAoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHN0YXRpYyBpbnQgZG9fdHJhY2UgPSAtMTsKKyAgdmFfbGlzdCBhcmdzOworCisgIGlmKGRvX3RyYWNlID09IC0xKSB7CisgICAgY29uc3QgY2hhciAqZW52ID0gZ2V0ZW52KCJDVVJMX1RSQUNFIik7CisgICAgZG9fdHJhY2UgPSAoZW52ICYmIHN0cnRvbChlbnYsIE5VTEwsIDEwKSA+IDApOworICB9CisgIGlmKCFkb190cmFjZSkKKyAgICByZXR1cm47CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CisgIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CisgIHZhX2VuZCAoYXJncyk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0xEQVBfVVJMX1BBUlNFCisKKy8qCisgKiBSZXR1cm4gc2NvcGUtdmFsdWUgZm9yIGEgc2NvcGUtc3RyaW5nLgorICovCitzdGF0aWMgaW50IHN0cjJzY29wZSAoY29uc3QgY2hhciAqcCkKK3sKKyAgaWYoc3RyZXF1YWwocCwgIm9uZSIpKQorICAgICByZXR1cm4gTERBUF9TQ09QRV9PTkVMRVZFTDsKKyAgaWYoc3RyZXF1YWwocCwgIm9uZXRyZWUiKSkKKyAgICAgcmV0dXJuIExEQVBfU0NPUEVfT05FTEVWRUw7CisgIGlmKHN0cmVxdWFsKHAsICJiYXNlIikpCisgICAgIHJldHVybiBMREFQX1NDT1BFX0JBU0U7CisgIGlmKHN0cmVxdWFsKHAsICJzdWIiKSkKKyAgICAgcmV0dXJuIExEQVBfU0NPUEVfU1VCVFJFRTsKKyAgaWYoc3RyZXF1YWwoIHAsICJzdWJ0cmVlIikpCisgICAgIHJldHVybiBMREFQX1NDT1BFX1NVQlRSRUU7CisgIHJldHVybiAoLTEpOworfQorCisvKgorICogU3BsaXQgJ3N0cicgaW50byBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb21tYXMuCisgKiBOb3RlOiByZXNbXSBwb2ludHMgaW50byAnc3RyJy4KKyAqLworc3RhdGljIGNoYXIgKipzcGxpdF9zdHIgKGNoYXIgKnN0cikKK3sKKyAgY2hhciAqKnJlcywgKmxhc3RzLCAqczsKKyAgaW50ICBpOworCisgIGZvcihpID0gMiwgcyA9IHN0cmNocihzdHIsJywnKTsgczsgaSsrKQorICAgIHMgPSBzdHJjaHIoKytzLCcsJyk7CisKKyAgcmVzID0gY2FsbG9jKGksIHNpemVvZihjaGFyKikpOworICBpZighcmVzKQorICAgIHJldHVybiBOVUxMOworCisgIGZvcihpID0gMCwgcyA9IHN0cnRva19yKHN0ciwgIiwiLCAmbGFzdHMpOyBzOworICAgICAgcyA9IHN0cnRva19yKE5VTEwsICIsIiwgJmxhc3RzKSwgaSsrKQorICAgIHJlc1tpXSA9IHM7CisgIHJldHVybiByZXM7Cit9CisKKy8qCisgKiBVbmVzY2FwZSB0aGUgTERBUC1VUkwgY29tcG9uZW50cworICovCitzdGF0aWMgYm9vbCB1bmVzY2FwZV9lbGVtZW50cyAodm9pZCAqZGF0YSwgTERBUFVSTERlc2MgKmx1ZHApCit7CisgIGludCBpOworCisgIGlmKGx1ZHAtPmx1ZF9maWx0ZXIpIHsKKyAgICBsdWRwLT5sdWRfZmlsdGVyID0gY3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsIGx1ZHAtPmx1ZF9maWx0ZXIsIDAsIE5VTEwpOworICAgIGlmKCFsdWRwLT5sdWRfZmlsdGVyKQorICAgICAgIHJldHVybiAoRkFMU0UpOworICB9CisKKyAgZm9yKGkgPSAwOyBsdWRwLT5sdWRfYXR0cnMgJiYgbHVkcC0+bHVkX2F0dHJzW2ldOyBpKyspIHsKKyAgICBsdWRwLT5sdWRfYXR0cnNbaV0gPSBjdXJsX2Vhc3lfdW5lc2NhcGUoZGF0YSwgbHVkcC0+bHVkX2F0dHJzW2ldLCAwLCBOVUxMKTsKKyAgICBpZighbHVkcC0+bHVkX2F0dHJzW2ldKQorICAgICAgcmV0dXJuIChGQUxTRSk7CisgIH0KKworICBmb3IoaSA9IDA7IGx1ZHAtPmx1ZF9leHRzICYmIGx1ZHAtPmx1ZF9leHRzW2ldOyBpKyspIHsKKyAgICBsdWRwLT5sdWRfZXh0c1tpXSA9IGN1cmxfZWFzeV91bmVzY2FwZShkYXRhLCBsdWRwLT5sdWRfZXh0c1tpXSwgMCwgTlVMTCk7CisgICAgaWYoIWx1ZHAtPmx1ZF9leHRzW2ldKQorICAgICAgcmV0dXJuIChGQUxTRSk7CisgIH0KKworICBpZihsdWRwLT5sdWRfZG4pIHsKKyAgICBjaGFyICpkbiA9IGx1ZHAtPmx1ZF9kbjsKKyAgICBjaGFyICpuZXdfZG4gPSBjdXJsX2Vhc3lfdW5lc2NhcGUoZGF0YSwgZG4sIDAsIE5VTEwpOworCisgICAgZnJlZShkbik7CisgICAgbHVkcC0+bHVkX2RuID0gbmV3X2RuOworICAgIGlmKCFuZXdfZG4pCisgICAgICAgcmV0dXJuIChGQUxTRSk7CisgIH0KKyAgcmV0dXJuIChUUlVFKTsKK30KKworLyoKKyAqIEJyZWFrIGFwYXJ0IHRoZSBwaWVjZXMgb2YgYW4gTERBUCBVUkwuCisgKiBTeW50YXg6CisgKiAgIGxkYXA6Ly88aG9zdG5hbWU+Ojxwb3J0Pi88YmFzZV9kbj4/PGF0dHJpYnV0ZXM+PzxzY29wZT4/PGZpbHRlcj4/PGV4dD4KKyAqCisgKiA8aG9zdG5hbWU+IGFscmVhZHkga25vd24gZnJvbSAnY29ubi0+aG9zdC5uYW1lJy4KKyAqIDxwb3J0PiAgICAgYWxyZWFkeSBrbm93biBmcm9tICdjb25uLT5yZW1vdGVfcG9ydCcuCisgKiBleHRyYWN0IHRoZSByZXN0IGZyb20gJ2Nvbm4tPmRhdGEtPnN0YXRlLnBhdGgrMScuIEFsbCBmaWVsZHMgYXJlIG9wdGlvbmFsLgorICogZS5nLgorICogICBsZGFwOi8vPGhvc3RuYW1lPjo8cG9ydD4vPzxhdHRyaWJ1dGVzPj88c2NvcGU+PzxmaWx0ZXI+CisgKiB5aWVsZHMgbHVkcC0+bHVkX2RuID0gIiIuCisgKgorICogRGVmaW5lZCBpbiBSRkM0NTE2IHNlY3Rpb24gMi4KKyAqLworc3RhdGljIGludCBfbGRhcF91cmxfcGFyc2UyIChjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIExEQVBVUkxEZXNjICpsdWRwKQoreworICBjaGFyICpwLCAqcTsKKyAgaW50IGk7CisKKyAgaWYoIWNvbm4tPmRhdGEgfHwKKyAgICAgICFjb25uLT5kYXRhLT5zdGF0ZS5wYXRoIHx8CisgICAgICBjb25uLT5kYXRhLT5zdGF0ZS5wYXRoWzBdICE9ICcvJyB8fAorICAgICAgIWNoZWNrcHJlZml4KCJMREFQIiwgY29ubi0+ZGF0YS0+Y2hhbmdlLnVybCkpCisgICAgcmV0dXJuIExEQVBfSU5WQUxJRF9TWU5UQVg7CisKKyAgbHVkcC0+bHVkX3Njb3BlID0gTERBUF9TQ09QRV9CQVNFOworICBsdWRwLT5sdWRfcG9ydCAgPSBjb25uLT5yZW1vdGVfcG9ydDsKKyAgbHVkcC0+bHVkX2hvc3QgID0gY29ubi0+aG9zdC5uYW1lOworCisgIC8qIHBhcnNlIEROIChEaXN0aW5ndWlzaGVkIE5hbWUpLgorICAgKi8KKyAgbHVkcC0+bHVkX2RuID0gc3RyZHVwKGNvbm4tPmRhdGEtPnN0YXRlLnBhdGgrMSk7CisgIGlmKCFsdWRwLT5sdWRfZG4pCisgICAgcmV0dXJuIExEQVBfTk9fTUVNT1JZOworCisgIHAgPSBzdHJjaHIobHVkcC0+bHVkX2RuLCAnPycpOworICBMREFQX1RSQUNFICgoIkROICclLipzJ1xuIiwgcCA/IChzaXplX3QpKHAtbHVkcC0+bHVkX2RuKSA6CisgICAgICAgICAgICAgICBzdHJsZW4obHVkcC0+bHVkX2RuKSwgbHVkcC0+bHVkX2RuKSk7CisKKyAgaWYoIXApCisgICAgZ290byBzdWNjZXNzOworCisgICpwKysgPSAnXDAnOworCisgIC8qIHBhcnNlIGF0dHJpYnV0ZXMuIHNraXAgIj8/Ii4KKyAgICovCisgIHEgPSBzdHJjaHIocCwgJz8nKTsKKyAgaWYocSkKKyAgICAqcSsrID0gJ1wwJzsKKworICBpZigqcCAmJiAqcCAhPSAnPycpIHsKKyAgICBsdWRwLT5sdWRfYXR0cnMgPSBzcGxpdF9zdHIocCk7CisgICAgaWYoIWx1ZHAtPmx1ZF9hdHRycykKKyAgICAgIHJldHVybiBMREFQX05PX01FTU9SWTsKKworICAgIGZvcihpID0gMDsgbHVkcC0+bHVkX2F0dHJzW2ldOyBpKyspCisgICAgICBMREFQX1RSQUNFICgoImF0dHJbJWRdICclcydcbiIsIGksIGx1ZHAtPmx1ZF9hdHRyc1tpXSkpOworICB9CisKKyAgcCA9IHE7CisgIGlmKCFwKQorICAgIGdvdG8gc3VjY2VzczsKKworICAvKiBwYXJzZSBzY29wZS4gc2tpcCAiPz8iCisgICAqLworICBxID0gc3RyY2hyKHAsICc/Jyk7CisgIGlmKHEpCisgICAgKnErKyA9ICdcMCc7CisKKyAgaWYoKnAgJiYgKnAgIT0gJz8nKSB7CisgICAgbHVkcC0+bHVkX3Njb3BlID0gc3RyMnNjb3BlKHApOworICAgIGlmKGx1ZHAtPmx1ZF9zY29wZSA9PSAtMSkKKyAgICAgIHJldHVybiBMREFQX0lOVkFMSURfU1lOVEFYOworICAgIExEQVBfVFJBQ0UgKCgic2NvcGUgJWRcbiIsIGx1ZHAtPmx1ZF9zY29wZSkpOworICB9CisKKyAgcCA9IHE7CisgIGlmKCFwKQorICAgIGdvdG8gc3VjY2VzczsKKworICAvKiBwYXJzZSBmaWx0ZXIKKyAgICovCisgIHEgPSBzdHJjaHIocCwgJz8nKTsKKyAgaWYocSkKKyAgICAqcSsrID0gJ1wwJzsKKyAgaWYoISpwKQorICAgIHJldHVybiBMREFQX0lOVkFMSURfU1lOVEFYOworCisgIGx1ZHAtPmx1ZF9maWx0ZXIgPSBwOworICBMREFQX1RSQUNFICgoImZpbHRlciAnJXMnXG4iLCBsdWRwLT5sdWRfZmlsdGVyKSk7CisKKyAgcCA9IHE7CisgIGlmKCFwKQorICAgIGdvdG8gc3VjY2VzczsKKworICAvKiBwYXJzZSBleHRlbnNpb25zCisgICAqLworICBsdWRwLT5sdWRfZXh0cyA9IHNwbGl0X3N0cihwKTsKKyAgaWYoIWx1ZHAtPmx1ZF9leHRzKQorICAgIHJldHVybiBMREFQX05PX01FTU9SWTsKKworICBmb3IoaSA9IDA7IGx1ZHAtPmx1ZF9leHRzW2ldOyBpKyspCisgICAgTERBUF9UUkFDRSAoKCJleHRzWyVkXSAnJXMnXG4iLCBpLCBsdWRwLT5sdWRfZXh0c1tpXSkpOworCisgIHN1Y2Nlc3M6CisgIGlmKCF1bmVzY2FwZV9lbGVtZW50cyhjb25uLT5kYXRhLCBsdWRwKSkKKyAgICByZXR1cm4gTERBUF9OT19NRU1PUlk7CisgIHJldHVybiBMREFQX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQgX2xkYXBfdXJsX3BhcnNlIChjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUFVSTERlc2MgKipsdWRwcCkKK3sKKyAgTERBUFVSTERlc2MgKmx1ZHAgPSBjYWxsb2MoMSwgc2l6ZW9mKCpsdWRwKSk7CisgIGludCByYzsKKworICAqbHVkcHAgPSBOVUxMOworICBpZighbHVkcCkKKyAgICAgcmV0dXJuIExEQVBfTk9fTUVNT1JZOworCisgIHJjID0gX2xkYXBfdXJsX3BhcnNlMiAoY29ubiwgbHVkcCk7CisgIGlmKHJjICE9IExEQVBfU1VDQ0VTUykgeworICAgIF9sZGFwX2ZyZWVfdXJsZGVzYyhsdWRwKTsKKyAgICBsdWRwID0gTlVMTDsKKyAgfQorICAqbHVkcHAgPSBsdWRwOworICByZXR1cm4gKHJjKTsKK30KKworc3RhdGljIHZvaWQgX2xkYXBfZnJlZV91cmxkZXNjIChMREFQVVJMRGVzYyAqbHVkcCkKK3sKKyAgaW50IGk7CisKKyAgaWYoIWx1ZHApCisgICAgcmV0dXJuOworCisgIGlmKGx1ZHAtPmx1ZF9kbikKKyAgICBmcmVlKGx1ZHAtPmx1ZF9kbik7CisKKyAgaWYobHVkcC0+bHVkX2ZpbHRlcikKKyAgICBmcmVlKGx1ZHAtPmx1ZF9maWx0ZXIpOworCisgIGlmKGx1ZHAtPmx1ZF9hdHRycykgeworICAgIGZvcihpID0gMDsgbHVkcC0+bHVkX2F0dHJzW2ldOyBpKyspCisgICAgICBmcmVlKGx1ZHAtPmx1ZF9hdHRyc1tpXSk7CisgICAgZnJlZShsdWRwLT5sdWRfYXR0cnMpOworICB9CisKKyAgaWYobHVkcC0+bHVkX2V4dHMpIHsKKyAgICBmb3IoaSA9IDA7IGx1ZHAtPmx1ZF9leHRzW2ldOyBpKyspCisgICAgICBmcmVlKGx1ZHAtPmx1ZF9leHRzW2ldKTsKKyAgICBmcmVlKGx1ZHAtPmx1ZF9leHRzKTsKKyAgfQorICBmcmVlIChsdWRwKTsKK30KKyNlbmRpZiAgLyogIUhBVkVfTERBUF9VUkxfUEFSU0UgKi8KKyNlbmRpZiAgLyogIUNVUkxfRElTQUJMRV9MREFQICYmICFVU0VfT1BFTkxEQVAgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9saWJjdXJsLmltcCBiL2N1cmwtNy4yNS4wL2xpYi9saWJjdXJsLmltcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzk5YTk0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2xpYmN1cmwuaW1wCkBAIC0wLDAgKzEsNTUgQEAKKyMKKyMgRGVmaW5pdGlvbiBmaWxlIGZvciB0aGUgTkxNIHZlcnNpb24gb2YgdGhlIExJQkNVUkwgbGlicmFyeSBmcm9tIGN1cmwKKyMKKyMJKExJQkNVUkwpCisJY3VybF9lYXN5X2NsZWFudXAsCisJY3VybF9lYXN5X2VzY2FwZSwKKwljdXJsX2Vhc3lfdW5lc2NhcGUsCisJY3VybF9lYXN5X2dldGluZm8sCisJY3VybF9lYXN5X2luaXQsCisJY3VybF9lYXN5X3BhdXNlLAorCWN1cmxfZWFzeV9wZXJmb3JtLAorCWN1cmxfZWFzeV9yZWN2LAorCWN1cmxfZWFzeV9zZW5kLAorCWN1cmxfZWFzeV9zZXRvcHQsCisJY3VybF9lc2NhcGUsCisJY3VybF91bmVzY2FwZSwKKwljdXJsX2Zvcm1mcmVlLAorCWN1cmxfZ2V0ZGF0ZSwKKwljdXJsX2dldGVudiwKKwljdXJsX2dsb2JhbF9jbGVhbnVwLAorCWN1cmxfZ2xvYmFsX2luaXQsCisJY3VybF9zbGlzdF9hcHBlbmQsCisJY3VybF9zbGlzdF9mcmVlX2FsbCwKKwljdXJsX3ZlcnNpb24sCisJY3VybF9tYXByaW50ZiwKKwljdXJsX21mcHJpbnRmLAorCWN1cmxfbXByaW50ZiwKKwljdXJsX21zcHJpbnRmLAorCWN1cmxfbXNucHJpbnRmLAorCWN1cmxfbXZmcHJpbnRmLAorCWN1cmxfbXZzbnByaW50ZiwKKwljdXJsX3N0cmVxdWFsLAorCWN1cmxfc3RybmVxdWFsLAorCWN1cmxfZWFzeV9kdXBoYW5kbGUsCisJY3VybF9mb3JtYWRkLAorCWN1cmxfbXVsdGlfaW5pdCwKKwljdXJsX211bHRpX2FkZF9oYW5kbGUsCisJY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlLAorCWN1cmxfbXVsdGlfZmRzZXQsCisJY3VybF9tdWx0aV9wZXJmb3JtLAorCWN1cmxfbXVsdGlfY2xlYW51cCwKKwljdXJsX211bHRpX2luZm9fcmVhZCwKKwljdXJsX211bHRpX3NldG9wdCwKKwljdXJsX211bHRpX3RpbWVvdXQsCisJY3VybF9mcmVlLAorCWN1cmxfdmVyc2lvbl9pbmZvLAorCWN1cmxfc2hhcmVfaW5pdCwKKwljdXJsX3NoYXJlX3NldG9wdCwKKwljdXJsX3NoYXJlX2NsZWFudXAsCisJY3VybF9nbG9iYWxfaW5pdF9tZW0sCisJY3VybF9lYXN5X3N0cmVycm9yLAorCWN1cmxfbXVsdGlfc3RyZXJyb3IsCisJY3VybF9zaGFyZV9zdHJlcnJvciwKKwljdXJsX2Vhc3lfcmVzZXQKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2xpYmN1cmwucGxpc3QgYi9jdXJsLTcuMjUuMC9saWIvbGliY3VybC5wbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODMyNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL2xpYmN1cmwucGxpc3QKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBTWVNURU0gImZpbGU6Ly9sb2NhbGhvc3QvU3lzdGVtL0xpYnJhcnkvRFREcy9Qcm9wZXJ0eUxpc3QuZHRkIj4KKzxwbGlzdCB2ZXJzaW9uPSIwLjkiPgorPGRpY3Q+CisJPGtleT5DRkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PgorCTxzdHJpbmc+Ni4wPC9zdHJpbmc+CisKKwk8a2V5PkNGQnVuZGxlRGV2ZWxvcG1lbnRSZWdpb248L2tleT4KKwk8c3RyaW5nPkVuZ2xpc2g8L3N0cmluZz4KKworCTxrZXk+Q0ZCdW5kbGVFeGVjdXRhYmxlPC9rZXk+CisJPHN0cmluZz5jdXJsPC9zdHJpbmc+CisKKwk8a2V5PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5PgorCTxzdHJpbmc+Y29tLmxpYmN1cmwubGliY3VybDwvc3RyaW5nPgorCisJPGtleT5DRkJ1bmRsZVZlcnNpb248L2tleT4KKwk8c3RyaW5nPjcuMjUuMDwvc3RyaW5nPgorCisJPGtleT5DRkJ1bmRsZU5hbWU8L2tleT4KKwk8c3RyaW5nPmxpYmN1cmw8L3N0cmluZz4KKworCTxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PgorCTxzdHJpbmc+Rk1XSzwvc3RyaW5nPgorCisJPGtleT5DRkJ1bmRsZVNpZ25hdHVyZTwva2V5PgorCTxzdHJpbmc+Pz8/Pzwvc3RyaW5nPgorCisJPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5PgorCTxzdHJpbmc+bGliY3VybCA3LjI1LjA8L3N0cmluZz4KKworCTxrZXk+Q0ZCdW5kbGVHZXRJbmZvU3RyaW5nPC9rZXk+CisJPHN0cmluZz5saWJjdXJsLnBsaXN0IDcuMjUuMDwvc3RyaW5nPgorPC9kaWN0PgorPC9wbGlzdD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9saWJjdXJsLnJjIGIvY3VybC03LjI1LjAvbGliL2xpYmN1cmwucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiOTQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9saWJjdXJsLnJjCkBAIC0wLDAgKzEsNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPHdpbnZlci5oPgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvY3VybC9jdXJsdmVyLmgiCisKK0xBTkdVQUdFICAweDA5LDB4MDEKKworI2RlZmluZSBSQ19WRVJTSU9OICBMSUJDVVJMX1ZFUlNJT05fTUFKT1IsIExJQkNVUkxfVkVSU0lPTl9NSU5PUiwgTElCQ1VSTF9WRVJTSU9OX1BBVENILCAwCisKK1ZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTworICBGSUxFVkVSU0lPTiAgICAgUkNfVkVSU0lPTgorICBQUk9EVUNUVkVSU0lPTiAgUkNfVkVSU0lPTgorICBGSUxFRkxBR1NNQVNLICAgMHgzZkwKKyNpZiBkZWZpbmVkKERFQlVHQlVJTEQpIHx8IGRlZmluZWQoX0RFQlVHKQorICBGSUxFRkxBR1MgMQorI2Vsc2UKKyAgRklMRUZMQUdTIDAKKyNlbmRpZgorICBGSUxFT1MgICAgICBWT1NfX1dJTkRPV1MzMgorICBGSUxFVFlQRSAgICBWRlRfRExMCisgIEZJTEVTVUJUWVBFIDB4MEwKKworQkVHSU4KKyAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgorICBCRUdJTgorICAgIEJMT0NLICIwNDA5MDRiMCIKKyAgICBCRUdJTgorICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgICAgICAiVGhlIGNVUkwgbGlicmFyeSwgaHR0cDovL2N1cmwuaGF4eC5zZS9cMCIKKyAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAgImxpYmN1cmwgU2hhcmVkIExpYnJhcnlcMCIKKyAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICAgICAgTElCQ1VSTF9WRVJTSU9OICJcMCIKKyAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAgICAgImxpYmN1cmxcMCIKKyAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxpYmN1cmwuZGxsXDAiCisgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAgICAgICJUaGUgY1VSTCBsaWJyYXJ5XDAiCisgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCAgIExJQkNVUkxfVkVSU0lPTiAiXDAiCisgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAgICKpICIgTElCQ1VSTF9DT1BZUklHSFQgIlwwIgorICAgICAgVkFMVUUgIkxpY2Vuc2UiLCAgICAgICAgICAiaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sXDAiCisgICAgRU5ECisgIEVORAorCisgIEJMT0NLICJWYXJGaWxlSW5mbyIKKyAgQkVHSU4KKyAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTIwMAorICBFTkQKK0VORApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL2xpYmN1cmwudmNwcm9qIGIvY3VybC03LjI1LjAvbGliL2xpYmN1cmwudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkOGY2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvbGliY3VybC52Y3Byb2oKQEAgLTAsMCArMSwzMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9ImxpYmN1cmwiCisJUHJvamVjdEdVSUQ9Ins4N0VFOURBNC1ERTFFLTQ0NDgtODMyNC0xODNDOThEQ0E1ODh9IgorCT4KKwk8UGxhdGZvcm1zPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9IldpbjMyIgorCQkvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iLlxSZWxlYXNlIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXFJlbGVhc2UiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNjAudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wgTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbCBOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbCBOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sIE5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbCBOYW1lPSJWQ01JRExUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBNa1R5cExpYkNvbXBhdGlibGU9InRydWUiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgVGFyZ2V0RW52aXJvbm1lbnQ9IjEiIFR5cGVMaWJyYXJ5TmFtZT0iLlxSZWxlYXNlL2xpYmN1cmwudGxiIiBIZWFkZXJGaWxlTmFtZT0iIgorCQkJLz4KKwkJCTxUb29sIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiIE9wdGltaXphdGlvbj0iMiIgSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiIEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4sLi5caW5jbHVkZSIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0JVSUxESU5HX0xJQkNVUkwiIFN0cmluZ1Bvb2xpbmc9InRydWUiIFJ1bnRpbWVMaWJyYXJ5PSIyIiBFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXFJlbGVhc2UvbGliY3VybC5wY2giIEFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlxSZWxlYXNlLyIgT2JqZWN0RmlsZT0iLlxSZWxlYXNlLyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cUmVsZWFzZS8iIEJyb3dzZUluZm9ybWF0aW9uPSIxIiBXYXJuaW5nTGV2ZWw9IjAiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCS8+CisJCQk8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIgorCQkJLz4KKwkJCTxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkvPgorCQkJPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIE91dHB1dEZpbGU9Ii5cUmVsZWFzZS9saWJjdXJsLmJzYyIKKwkJCS8+CisJCQk8VG9vbCBOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbCBOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIuXERlYnVnIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXERlYnVnIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzYwLnZzcHJvcHMiCisJCQlVc2VPZk1GQz0iMCIKKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCT4KKwkJCTxUb29sIE5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wgTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wgTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbCBOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wgTmFtZT0iVkNNSURMVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgTWtUeXBMaWJDb21wYXRpYmxlPSJ0cnVlIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIFRhcmdldEVudmlyb25tZW50PSIxIiBUeXBlTGlicmFyeU5hbWU9Ii5cRGVidWcvbGliY3VybC50bGIiIEhlYWRlckZpbGVOYW1lPSIiCisJCQkvPgorCQkJPFRvb2wgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIgT3B0aW1pemF0aW9uPSIwIiBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLC4uXGluY2x1ZGUiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtCVUlMRElOR19MSUJDVVJMIiBNaW5pbWFsUmVidWlsZD0idHJ1ZSIgQmFzaWNSdW50aW1lQ2hlY2tzPSIzIiBSdW50aW1lTGlicmFyeT0iMyIgUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXERlYnVnL2xpYmN1cmwucGNoIiBBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cRGVidWcvIiBPYmplY3RGaWxlPSIuXERlYnVnLyIgUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5cRGVidWcvIiBCcm93c2VJbmZvcm1hdGlvbj0iMSIgV2FybmluZ0xldmVsPSIwIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIKKwkJCS8+CisJCQk8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgorCQkJLz4KKwkJCTxUb29sIE5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiBPdXRwdXRGaWxlPSIuXERlYnVnL2xpYmN1cmwuYnNjIgorCQkJLz4KKwkJCTxUb29sIE5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sIE5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCTwvQ29uZmlndXJhdGlvbnM+CisJPFJlZmVyZW5jZXM+CisJPC9SZWZlcmVuY2VzPgorCTxGaWxlcz4KKwkJPEZpbHRlcgorCQkJTmFtZT0iU291cmNlIEZpbGVzIgorCQkJPgorCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImFzeW4tYXJlcy5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJhc3luLXRocmVhZC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJheHRscy5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJiYXNlNjQuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iY29ubmVjdC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjb250ZW50X2VuY29kaW5nLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImNvb2tpZS5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjdXJsX2FkZHJpbmZvLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmxfZm5tYXRjaC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjdXJsX2dldGhvc3RuYW1lLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmxfZ3NzYXBpLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmxfbWVtcmNoci5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjdXJsX250bG0uYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iY3VybF9udGxtX2NvcmUuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iY3VybF9udGxtX21zZ3MuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iY3VybF9udGxtX3diLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmxfcmFuZC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjdXJsX3J0bXAuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iY3VybF9zc3BpLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmxfdGhyZWFkcy5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjeWFzc2wuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iZGljdC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJlYXN5LmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImVzY2FwZS5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJmaWxlLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImZpbGVpbmZvLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImZvcm1kYXRhLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImZ0cC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJmdHBsaXN0cGFyc2VyLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImdldGVudi5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJnZXRpbmZvLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImdvcGhlci5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJndGxzLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Imhhc2guYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iaG1hYy5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJob3N0YXN5bi5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJob3N0aXA0LmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Imhvc3RpcDYuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iaG9zdGlwLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Imhvc3RzeW4uYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iaHR0cC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJodHRwX2NodW5rcy5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJodHRwX2RpZ2VzdC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJodHRwX25lZ290aWF0ZS5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJodHRwX25lZ290aWF0ZV9zc3BpLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Imh0dHBfcHJveHkuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iaWRuX3dpbjMyLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImlmMmlwLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImltYXAuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iaW5ldF9udG9wLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImluZXRfcHRvbi5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJrcmI0LmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImtyYjUuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ibGRhcC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJsbGlzdC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJtZDQuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ibWQ1LmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Im1lbWRlYnVnLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Im1wcmludGYuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ibXVsdGkuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ibmV0cmMuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ibm9uLWFzY2lpLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Im5vbmJsb2NrLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Im5zcy5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJvcGVubGRhcC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJwYXJzZWRhdGUuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0icGluZ3BvbmcuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0icG9sYXJzc2wuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0icG9wMy5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJwcm9ncmVzcy5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJxc3NsLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InJhd3N0ci5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJydHNwLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InNlY3VyaXR5LmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InNlbGVjdC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzZW5kZi5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzaGFyZS5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzbGlzdC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzbXRwLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InNvY2tzLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InNvY2tzX2dzc2FwaS5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzb2Nrc19zc3BpLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InNwZWVkY2hlY2suYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ic3BsYXkuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ic3NoLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InNzbGdlbi5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzc2x1c2UuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ic3RyZHVwLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InN0cmVxdWFsLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InN0cmVycm9yLmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InN0cnRvay5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzdHJ0b29mZnQuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0idGVsbmV0LmMiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InRmdHAuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0idGltZXZhbC5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJ0cmFuc2Zlci5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJ1cmwuYyI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0idmVyc2lvbi5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJ3YXJubGVzcy5jIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJ3aWxkY2FyZC5jIj48L0ZpbGU+DQorPC9GaWx0ZXI+PEZpbHRlcglOYW1lPSJIZWFkZXIgRmlsZXMiPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iYXJwYV90ZWxuZXQuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iYXN5bi5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJheHRscy5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjb25maWctd2luMzIuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iY29ubmVjdC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjb250ZW50X2VuY29kaW5nLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImNvb2tpZS5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjdXJsX2FkZHJpbmZvLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmxfYmFzZTY0LmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmxfZm5tYXRjaC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjdXJsX2dldGhvc3RuYW1lLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmxfZ3NzYXBpLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmxfaG1hYy5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjdXJsX2xkYXAuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iY3VybF9tZDQuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iY3VybF9tZDUuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iY3VybF9tZW1vcnkuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iY3VybF9tZW1yY2hyLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmxfbnRsbV9jb3JlLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmxfbnRsbS5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjdXJsX250bG1fbXNncy5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjdXJsX250bG1fd2IuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iY3VybF9yYW5kLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmxfcnRtcC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJjdXJsX3NzcGkuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iY3VybF90aHJlYWRzLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN1cmx4LmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImN5YXNzbC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJkaWN0LmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImVhc3lpZi5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJlc2NhcGUuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iZmlsZS5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJmaWxlaW5mby5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJmb3JtZGF0YS5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJmdHAuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iZnRwbGlzdHBhcnNlci5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJnZXRpbmZvLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImdvcGhlci5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJndGxzLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Imhhc2guaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iaG9zdGlwLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Imh0dHBfY2h1bmtzLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Imh0dHBfZGlnZXN0LmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Imh0dHAuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iaHR0cF9uZWdvdGlhdGUuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0iaHR0cF9wcm94eS5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJpZjJpcC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJpbWFwLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9ImluZXRfbnRvcC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJpbmV0X3B0b24uaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ia3JiNC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJsbGlzdC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJtZW1kZWJ1Zy5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJtdWx0aWlmLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Im5ldHJjLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9Im5vbi1hc2NpaS5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJub25ibG9jay5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJuc3NnLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InBhcnNlZGF0ZS5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJwaW5ncG9uZy5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJwb2xhcnNzbC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJwb3AzLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InByb2dyZXNzLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InFzc2wuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0icmF3c3RyLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InJ0c3AuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ic2VsZWN0LmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InNlbmRmLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InNldHVwLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InNldHVwX29uY2UuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ic2hhcmUuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ic2xpc3QuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ic210cC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzb2NrYWRkci5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzb2Nrcy5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzcGVlZGNoZWNrLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InNwbGF5LmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InNzaC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzc2xnZW4uaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ic3NsdXNlLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InN0cmR1cC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzdHJlcXVhbC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzdHJlcnJvci5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJzdHJ0b2suaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0ic3RydG9vZmZ0LmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InRlbG5ldC5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJ0ZnRwLmgiPjwvRmlsZT4NCis8RmlsZSBSZWxhdGl2ZVBhdGg9InRpbWV2YWwuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0idHJhbnNmZXIuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0idXJsZGF0YS5oIj48L0ZpbGU+DQorPEZpbGUgUmVsYXRpdmVQYXRoPSJ1cmwuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0id2Fybmxlc3MuaCI+PC9GaWxlPg0KKzxGaWxlIFJlbGF0aXZlUGF0aD0id2lsZGNhcmQuaCI+PC9GaWxlPg0KKw0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsdGVyDQorCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQorCQkJRmlsdGVyPSJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiDQorCQkJPg0KKwkJPC9GaWx0ZXI+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9saWJjdXJsLnZlcnMuaW4gYi9jdXJsLTcuMjUuMC9saWIvbGliY3VybC52ZXJzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTQ1NTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvbGliY3VybC52ZXJzLmluCkBAIC0wLDAgKzEsMTMgQEAKK0hJRERFTgoreworICBsb2NhbDoKKyAgICBfXyo7CisgICAgX3Jlc3QqOworICAgIF9zYXZlKjsKK307CisKK0NVUkxfQFZFUlNJT05FRF9GTEFWT1VSQDQKK3sKKyAgZ2xvYmFsOiBjdXJsXyo7CisgIGxvY2FsOiAqOworfTsKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9sbGlzdC5jIGIvY3VybC03LjI1LjAvbGliL2xsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwMmUzMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9sbGlzdC5jCkBAIC0wLDAgKzEsMjEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlICJsbGlzdC5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisKKy8qIHRoaXMgbXVzdCBiZSB0aGUgbGFzdCBpbmNsdWRlIGZpbGUgKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKgorICogQHVuaXR0ZXN0OiAxMzAwCisgKi8KK3N0YXRpYyB2b2lkCitsbGlzdF9pbml0KHN0cnVjdCBjdXJsX2xsaXN0ICpsLCBjdXJsX2xsaXN0X2R0b3IgZHRvcikKK3sKKyAgbC0+c2l6ZSA9IDA7CisgIGwtPmR0b3IgPSBkdG9yOworICBsLT5oZWFkID0gTlVMTDsKKyAgbC0+dGFpbCA9IE5VTEw7Cit9CisKK3N0cnVjdCBjdXJsX2xsaXN0ICoKK0N1cmxfbGxpc3RfYWxsb2MoY3VybF9sbGlzdF9kdG9yIGR0b3IpCit7CisgIHN0cnVjdCBjdXJsX2xsaXN0ICpsaXN0OworCisgIGxpc3QgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjdXJsX2xsaXN0KSk7CisgIGlmKCFsaXN0KQorICAgIHJldHVybiBOVUxMOworCisgIGxsaXN0X2luaXQobGlzdCwgZHRvcik7CisKKyAgcmV0dXJuIGxpc3Q7Cit9CisKKy8qCisgKiBDdXJsX2xsaXN0X2luc2VydF9uZXh0KCkKKyAqCisgKiBJbnNlcnRzIGEgbmV3IGxpc3QgZWxlbWVudCBhZnRlciB0aGUgZ2l2ZW4gb25lICdlJy4gSWYgdGhlIGdpdmVuIGV4aXN0aW5nCisgKiBlbnRyeSBpcyBOVUxMIGFuZCB0aGUgbGlzdCBhbHJlYWR5IGhhcyBlbGVtZW50cywgdGhlIG5ldyBvbmUgd2lsbCBiZQorICogaW5zZXJ0ZWQgZmlyc3QgaW4gdGhlIGxpc3QuCisgKgorICogUmV0dXJuczogMSBvbiBzdWNjZXNzIGFuZCAwIG9uIGZhaWx1cmUuCisgKgorICogQHVuaXR0ZXN0OiAxMzAwCisgKi8KK2ludAorQ3VybF9sbGlzdF9pbnNlcnRfbmV4dChzdHJ1Y3QgY3VybF9sbGlzdCAqbGlzdCwgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcCkKK3sKKyAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqbmUgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQpKTsKKyAgaWYoIW5lKQorICAgIHJldHVybiAwOworCisgIG5lLT5wdHIgPSAodm9pZCAqKSBwOworICBpZihsaXN0LT5zaXplID09IDApIHsKKyAgICBsaXN0LT5oZWFkID0gbmU7CisgICAgbGlzdC0+aGVhZC0+cHJldiA9IE5VTEw7CisgICAgbGlzdC0+aGVhZC0+bmV4dCA9IE5VTEw7CisgICAgbGlzdC0+dGFpbCA9IG5lOworICB9CisgIGVsc2UgeworICAgIC8qIGlmICdlJyBpcyBOVUxMIGhlcmUsIHdlIGluc2VydCB0aGUgbmV3IGVsZW1lbnQgZmlyc3QgaW4gdGhlIGxpc3QgKi8KKyAgICBuZS0+bmV4dCA9IGU/ZS0+bmV4dDpsaXN0LT5oZWFkOworICAgIG5lLT5wcmV2ID0gZTsKKyAgICBpZighZSkgeworICAgICAgbGlzdC0+aGVhZC0+cHJldiA9IG5lOworICAgICAgbGlzdC0+aGVhZCA9IG5lOworICAgIH0KKyAgICBlbHNlIGlmKGUtPm5leHQpIHsKKyAgICAgIGUtPm5leHQtPnByZXYgPSBuZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBsaXN0LT50YWlsID0gbmU7CisgICAgfQorICAgIGlmKGUpCisgICAgICBlLT5uZXh0ID0gbmU7CisgIH0KKworICArK2xpc3QtPnNpemU7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBAdW5pdHRlc3Q6IDEzMDAKKyAqLworaW50CitDdXJsX2xsaXN0X3JlbW92ZShzdHJ1Y3QgY3VybF9sbGlzdCAqbGlzdCwgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqZSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXIpCit7CisgIGlmKGUgPT0gTlVMTCB8fCBsaXN0LT5zaXplID09IDApCisgICAgcmV0dXJuIDE7CisKKyAgaWYoZSA9PSBsaXN0LT5oZWFkKSB7CisgICAgbGlzdC0+aGVhZCA9IGUtPm5leHQ7CisKKyAgICBpZihsaXN0LT5oZWFkID09IE5VTEwpCisgICAgICBsaXN0LT50YWlsID0gTlVMTDsKKyAgICBlbHNlCisgICAgICBlLT5uZXh0LT5wcmV2ID0gTlVMTDsKKyAgfQorICBlbHNlIHsKKyAgICBlLT5wcmV2LT5uZXh0ID0gZS0+bmV4dDsKKyAgICBpZighZS0+bmV4dCkKKyAgICAgIGxpc3QtPnRhaWwgPSBlLT5wcmV2OworICAgIGVsc2UKKyAgICAgIGUtPm5leHQtPnByZXYgPSBlLT5wcmV2OworICB9CisKKyAgbGlzdC0+ZHRvcih1c2VyLCBlLT5wdHIpOworCisgIGUtPnB0ciAgPSBOVUxMOworICBlLT5wcmV2ID0gTlVMTDsKKyAgZS0+bmV4dCA9IE5VTEw7CisKKyAgZnJlZShlKTsKKyAgLS1saXN0LT5zaXplOworCisgIHJldHVybiAxOworfQorCit2b2lkCitDdXJsX2xsaXN0X2Rlc3Ryb3koc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QsIHZvaWQgKnVzZXIpCit7CisgIGlmKGxpc3QpIHsKKyAgICB3aGlsZShsaXN0LT5zaXplID4gMCkKKyAgICAgIEN1cmxfbGxpc3RfcmVtb3ZlKGxpc3QsIGxpc3QtPnRhaWwsIHVzZXIpOworCisgICAgZnJlZShsaXN0KTsKKyAgfQorfQorCitzaXplX3QKK0N1cmxfbGxpc3RfY291bnQoc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QpCit7CisgIHJldHVybiBsaXN0LT5zaXplOworfQorCisvKgorICogQHVuaXR0ZXN0OiAxMzAwCisgKi8KK2ludCBDdXJsX2xsaXN0X21vdmUoc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QsIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmUsCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX2xsaXN0ICp0b19saXN0LAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICp0b19lKQoreworICAvKiBSZW1vdmUgZWxlbWVudCBmcm9tIGxpc3QgKi8KKyAgaWYoZSA9PSBOVUxMIHx8IGxpc3QtPnNpemUgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBpZihlID09IGxpc3QtPmhlYWQpIHsKKyAgICBsaXN0LT5oZWFkID0gZS0+bmV4dDsKKworICAgIGlmKGxpc3QtPmhlYWQgPT0gTlVMTCkKKyAgICAgIGxpc3QtPnRhaWwgPSBOVUxMOworICAgIGVsc2UKKyAgICAgIGUtPm5leHQtPnByZXYgPSBOVUxMOworICB9CisgIGVsc2UgeworICAgIGUtPnByZXYtPm5leHQgPSBlLT5uZXh0OworICAgIGlmKCFlLT5uZXh0KQorICAgICAgbGlzdC0+dGFpbCA9IGUtPnByZXY7CisgICAgZWxzZQorICAgICAgZS0+bmV4dC0+cHJldiA9IGUtPnByZXY7CisgIH0KKworICAtLWxpc3QtPnNpemU7CisKKyAgLyogQWRkIGVsZW1lbnQgdG8gdG9fbGlzdCBhZnRlciB0b19lICovCisgIGlmKHRvX2xpc3QtPnNpemUgPT0gMCkgeworICAgIHRvX2xpc3QtPmhlYWQgPSBlOworICAgIHRvX2xpc3QtPmhlYWQtPnByZXYgPSBOVUxMOworICAgIHRvX2xpc3QtPmhlYWQtPm5leHQgPSBOVUxMOworICAgIHRvX2xpc3QtPnRhaWwgPSBlOworICB9CisgIGVsc2UgeworICAgIGUtPm5leHQgPSB0b19lLT5uZXh0OworICAgIGUtPnByZXYgPSB0b19lOworICAgIGlmKHRvX2UtPm5leHQpIHsKKyAgICAgIHRvX2UtPm5leHQtPnByZXYgPSBlOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHRvX2xpc3QtPnRhaWwgPSBlOworICAgIH0KKyAgICB0b19lLT5uZXh0ID0gZTsKKyAgfQorCisgICsrdG9fbGlzdC0+c2l6ZTsKKworICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9sbGlzdC5oIGIvY3VybC03LjI1LjAvbGliL2xsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzOTEyYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9sbGlzdC5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX19MTElTVF9ICisjZGVmaW5lIF9fTExJU1RfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCit0eXBlZGVmIHZvaWQgKCpjdXJsX2xsaXN0X2R0b3IpKHZvaWQgKiwgdm9pZCAqKTsKKworc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCB7CisgIHZvaWQgKnB0cjsKKworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpwcmV2OworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpuZXh0OworfTsKKworc3RydWN0IGN1cmxfbGxpc3QgeworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpoZWFkOworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICp0YWlsOworCisgIGN1cmxfbGxpc3RfZHRvciBkdG9yOworCisgIHNpemVfdCBzaXplOworfTsKKworc3RydWN0IGN1cmxfbGxpc3QgKkN1cmxfbGxpc3RfYWxsb2MoY3VybF9sbGlzdF9kdG9yKTsKK2ludCBDdXJsX2xsaXN0X2luc2VydF9uZXh0KHN0cnVjdCBjdXJsX2xsaXN0ICosIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKik7CitpbnQgQ3VybF9sbGlzdF9yZW1vdmUoc3RydWN0IGN1cmxfbGxpc3QgKiwgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKik7CitzaXplX3QgQ3VybF9sbGlzdF9jb3VudChzdHJ1Y3QgY3VybF9sbGlzdCAqKTsKK3ZvaWQgQ3VybF9sbGlzdF9kZXN0cm95KHN0cnVjdCBjdXJsX2xsaXN0ICosIHZvaWQgKik7CitpbnQgQ3VybF9sbGlzdF9tb3ZlKHN0cnVjdCBjdXJsX2xsaXN0ICosIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKiwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfbGxpc3QgKiwgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvbWFrZWZpbGUuYW1pZ2EgYi9jdXJsLTcuMjUuMC9saWIvbWFrZWZpbGUuYW1pZ2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3ZmE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9tYWtlZmlsZS5hbWlnYQpAQCAtMCwwICsxLDIyIEBACisjCisjIGxpYmN1cmwgTWFrZWZpbGUgZm9yIEFtaWdhT1MgLi4uCisjCisKKyMgY2hhbmdlIHRoZSBmb2xsb3cgdG8gd2hlcmUgeW91IGhhdmUgdGhlIEFtaVRDUCBTREsgdjQuMyBpbmNsdWRlczoKKworQVRDUFNES0k9CS9HRy9uZXRpbmNsdWRlCisKKworQ0MJPQltNjhrLWFtaWdhb3MtZ2NjCitDRkxBR1MJPQktSSQoQVRDUFNES0kpIC1tNjgwMjAtNjAgLU8yIC1tc29mdC1mbG9hdCAtbm9peGVtdWwgLWcgLUkuIC1JLi4vaW5jbHVkZSAtVyAtV2FsbAorCitpbmNsdWRlIE1ha2VmaWxlLmluYworQ1NPVVJDRVMgKz0gYW1pZ2Fvcy5jCitPQkpTID0gJChDU09VUkNFUzouYz0ubykKKworYWxsOgkkKE9CSlMpCisJYXIgY3J1IGxpYmN1cmwuYSAkKE9CSlMpCisJcmFubGliIGxpYmN1cmwuYQorCitpbnN0YWxsOgorCSQoSU5TVEFMTCkgLWMgLi9saWJjdXJsLmEgL2xpYi9saWJjdXJsLmEKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9tYWtlZmlsZS5kaiBiL2N1cmwtNy4yNS4wL2xpYi9tYWtlZmlsZS5kagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjJjYTg2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL21ha2VmaWxlLmRqCkBAIC0wLDAgKzEsNDkgQEAKKyMKKyMgIEFkYXB0ZWQgZm9yIGRqZ3BwMiAvIFdhdHQtMzIgLyBET1MgYnkKKyMgIEdpc2xlIFZhbmVtIDxndmFuZW1AYnJvYWRwYXJrLm5vPgorIworCitERVBFTkRfUFJFUkVRID0gY3VybF9jb25maWcuaAorVE9QRElSID0gLi4KKworaW5jbHVkZSAuLi9wYWNrYWdlcy9ET1MvY29tbW9uLmRqCitpbmNsdWRlIE1ha2VmaWxlLmluYworCitPQkpFQ1RTIDo9ICQocGF0c3Vic3QgJS5jLCQoT0JKX0RJUikvJS5vLCQoc3RyaXAgJChDU09VUkNFUykpKQorCitDVVJMX0xJQiA9IGxpYmN1cmwuYQorCisjIE5PVEU6IGlmIC4uL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaCBpcyBtaXNzaW5nLCB5b3UncmUgcHJvYmFibHkgYnVpbGRpbmcKKyMgdGhpcyBmcm9tIGEgZ2l0IGNoZWNrb3V0IGFuZCB0aGVuIHlvdSBuZWVkIHRvIHJ1biBidWlsZGNvbmYuYmF0IGZpcnN0LgorCithbGw6ICQoT0JKX0RJUikgY3VybF9jb25maWcuaCAkKENVUkxfTElCKQorCiskKENVUkxfTElCKTogJChPQkpFQ1RTKQorCWFyIHJzICRAICQ/CisKK2N1cmxfY29uZmlnLmg6IGNvbmZpZy1kb3MuaAorCSQoQ09QWSkgJF4gJEAKKworIyBjbGVhbiBnZW5lcmF0ZWQgZmlsZXMKKyMKK2dlbmNsZWFuOgorCS0gJChERUxFVEUpIGN1cmxfY29uZmlnLmgKKworIyBjbGVhbiBvYmplY3QgZmlsZXMgYW5kIHN1YmRpcgorIworb2JqY2xlYW46IGdlbmNsZWFuCisJLSAkKERFTEVURSkgJChPQkpfRElSKSQoRFMpKi5vCisJLSAkKFJNRElSKSAkKE9CSl9ESVIpCisKKyMgY2xlYW4gd2l0aG91dCByZW1vdmluZyBidWlsdCBsaWJyYXJ5CisjCitjbGVhbjogb2JqY2xlYW4KKwktICQoREVMRVRFKSBkZXBlbmQuZGoKKworIyBjbGVhbiBldmVyeXRoaW5nCisjCityZWFsY2xlYW4gdmNsZWFuOiBjbGVhbgorCS0gJChERUxFVEUpICQoQ1VSTF9MSUIpCisKKy1pbmNsdWRlIGRlcGVuZC5kagorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvbWQ0LmMgYi9jdXJsLTcuMjUuMC9saWIvbWQ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y2YzM2MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9tZDQuYwpAQCAtMCwwICsxLDI4MiBAQAorLyotCisgICBDb3B5cmlnaHQgKEMpIDE5OTAtMiwgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgTGljZW5zZSB0byBjb3B5IGFuZCB1c2UgdGhpcyBzb2Z0d2FyZSBpcyBncmFudGVkIHByb3ZpZGVkIHRoYXQgaXQKKyAgIGlzIGlkZW50aWZpZWQgYXMgdGhlICJSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDQgTWVzc2FnZS1EaWdlc3QKKyAgIEFsZ29yaXRobSIgaW4gYWxsIG1hdGVyaWFsIG1lbnRpb25pbmcgb3IgcmVmZXJlbmNpbmcgdGhpcyBzb2Z0d2FyZQorICAgb3IgdGhpcyBmdW5jdGlvbi4KKworICAgTGljZW5zZSBpcyBhbHNvIGdyYW50ZWQgdG8gbWFrZSBhbmQgdXNlIGRlcml2YXRpdmUgd29ya3MgcHJvdmlkZWQKKyAgIHRoYXQgc3VjaCB3b3JrcyBhcmUgaWRlbnRpZmllZCBhcyAiZGVyaXZlZCBmcm9tIHRoZSBSU0EgRGF0YQorICAgU2VjdXJpdHksIEluYy4gTUQ0IE1lc3NhZ2UtRGlnZXN0IEFsZ29yaXRobSIgaW4gYWxsIG1hdGVyaWFsCisgICBtZW50aW9uaW5nIG9yIHJlZmVyZW5jaW5nIHRoZSBkZXJpdmVkIHdvcmsuCisKKyAgIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBjb25jZXJuaW5nIGVpdGhlcgorICAgdGhlIG1lcmNoYW50YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIG9yIHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzCisgICBzb2Z0d2FyZSBmb3IgYW55IHBhcnRpY3VsYXIgcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICAgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkgb2YgYW55IGtpbmQuCisKKyAgIFRoZXNlIG5vdGljZXMgbXVzdCBiZSByZXRhaW5lZCBpbiBhbnkgY29waWVzIG9mIGFueSBwYXJ0IG9mIHRoaXMKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisvKiBOU1MgY3J5cHRvIGxpYnJhcnkgZG9lcyBub3QgcHJvdmlkZSB0aGUgTUQ0IGhhc2ggYWxnb3JpdGhtLCBzbyB0aGF0IHdlIGhhdmUKKyAqIGEgbG9jYWwgaW1wbGVtZW50YXRpb24gb2YgaXQgKi8KKyNpZmRlZiBVU0VfTlNTCisKKyNpbmNsdWRlICJjdXJsX21kNC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQ0OworCit0eXBlZGVmIHN0cnVjdCBNRDRDb250ZXh0IHsKKyAgVUlOVDQgc3RhdGVbNF07ICAgICAgICAgICAgICAgLyogc3RhdGUgKEFCQ0QpICovCisgIFVJTlQ0IGNvdW50WzJdOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBiaXRzLCBtb2R1bG8gMl42NCAobHNiIGZpcnN0KSAqLworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07ICAgICAvKiBpbnB1dCBidWZmZXIgKi8KK30gTUQ0X0NUWDsKKworLyogQ29uc3RhbnRzIGZvciBNRDRUcmFuc2Zvcm0gcm91dGluZS4KKyAqLworI2RlZmluZSBTMTEgMworI2RlZmluZSBTMTIgNworI2RlZmluZSBTMTMgMTEKKyNkZWZpbmUgUzE0IDE5CisjZGVmaW5lIFMyMSAzCisjZGVmaW5lIFMyMiA1CisjZGVmaW5lIFMyMyA5CisjZGVmaW5lIFMyNCAxMworI2RlZmluZSBTMzEgMworI2RlZmluZSBTMzIgOQorI2RlZmluZSBTMzMgMTEKKyNkZWZpbmUgUzM0IDE1CisKK3N0YXRpYyB2b2lkIE1ENFRyYW5zZm9ybShVSU5UNCBbNF0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgWzY0XSk7CitzdGF0aWMgdm9pZCBFbmNvZGUodW5zaWduZWQgY2hhciAqLCBVSU5UNCAqLCB1bnNpZ25lZCBpbnQpOworc3RhdGljIHZvaWQgRGVjb2RlKFVJTlQ0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgUEFERElOR1s2NF0gPSB7CisgIDB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CisKKy8qIEYsIEcgYW5kIEggYXJlIGJhc2ljIE1ENCBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgRih4LCB5LCB6KSAoKCh4KSAmICh5KSkgfCAoKH54KSAmICh6KSkpCisjZGVmaW5lIEcoeCwgeSwgeikgKCgoeCkgJiAoeSkpIHwgKCh4KSAmICh6KSkgfCAoKHkpICYgKHopKSkKKyNkZWZpbmUgSCh4LCB5LCB6KSAoKHgpIF4gKHkpIF4gKHopKQorCisvKiBST1RBVEVfTEVGVCByb3RhdGVzIHggbGVmdCBuIGJpdHMuCisgKi8KKyNkZWZpbmUgUk9UQVRFX0xFRlQoeCwgbikgKCgoeCkgPDwgKG4pKSB8ICgoeCkgPj4gKDMyLShuKSkpKQorCisvKiBGRiwgR0cgYW5kIEhIIGFyZSB0cmFuc2Zvcm1hdGlvbnMgZm9yIHJvdW5kcyAxLCAyIGFuZCAzICovCisvKiBSb3RhdGlvbiBpcyBzZXBhcmF0ZSBmcm9tIGFkZGl0aW9uIHRvIHByZXZlbnQgcmVjb21wdXRhdGlvbiAqLworI2RlZmluZSBGRihhLCBiLCBjLCBkLCB4LCBzKSB7IFwKKyAgICAoYSkgKz0gRiAoKGIpLCAoYyksIChkKSkgKyAoeCk7IFwKKyAgICAoYSkgPSBST1RBVEVfTEVGVCAoKGEpLCAocykpOyBcCisgIH0KKyNkZWZpbmUgR0coYSwgYiwgYywgZCwgeCwgcykgeyBcCisgICAgKGEpICs9IEcgKChiKSwgKGMpLCAoZCkpICsgKHgpICsgKFVJTlQ0KTB4NWE4Mjc5OTk7IFwKKyAgICAoYSkgPSBST1RBVEVfTEVGVCAoKGEpLCAocykpOyBcCisgIH0KKyNkZWZpbmUgSEgoYSwgYiwgYywgZCwgeCwgcykgeyBcCisgICAgKGEpICs9IEggKChiKSwgKGMpLCAoZCkpICsgKHgpICsgKFVJTlQ0KTB4NmVkOWViYTE7IFwKKyAgICAoYSkgPSBST1RBVEVfTEVGVCAoKGEpLCAocykpOyBcCisgIH0KKworLyogTUQ0IGluaXRpYWxpemF0aW9uLiBCZWdpbnMgYW4gTUQ0IG9wZXJhdGlvbiwgd3JpdGluZyBhIG5ldyBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBNRDRJbml0KE1ENF9DVFggKmNvbnRleHQpCit7CisgIGNvbnRleHQtPmNvdW50WzBdID0gY29udGV4dC0+Y291bnRbMV0gPSAwOworCisgIC8qIExvYWQgbWFnaWMgaW5pdGlhbGl6YXRpb24gY29uc3RhbnRzLgorICAgKi8KKyAgY29udGV4dC0+c3RhdGVbMF0gPSAweDY3NDUyMzAxOworICBjb250ZXh0LT5zdGF0ZVsxXSA9IDB4ZWZjZGFiODk7CisgIGNvbnRleHQtPnN0YXRlWzJdID0gMHg5OGJhZGNmZTsKKyAgY29udGV4dC0+c3RhdGVbM10gPSAweDEwMzI1NDc2OworfQorCisvKiBNRDQgYmxvY2sgdXBkYXRlIG9wZXJhdGlvbi4gQ29udGludWVzIGFuIE1ENCBtZXNzYWdlLWRpZ2VzdAorICAgICBvcGVyYXRpb24sIHByb2Nlc3NpbmcgYW5vdGhlciBtZXNzYWdlIGJsb2NrLCBhbmQgdXBkYXRpbmcgdGhlCisgICAgIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIE1ENFVwZGF0ZShNRDRfQ1RYICpjb250ZXh0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5wdXRMZW4pCit7CisgIHVuc2lnbmVkIGludCBpLCBidWZpbmRleCwgcGFydExlbjsKKworICAvKiBDb21wdXRlIG51bWJlciBvZiBieXRlcyBtb2QgNjQgKi8KKyAgYnVmaW5kZXggPSAodW5zaWduZWQgaW50KSgoY29udGV4dC0+Y291bnRbMF0gPj4gMykgJiAweDNGKTsKKyAgLyogVXBkYXRlIG51bWJlciBvZiBiaXRzICovCisgIGlmKChjb250ZXh0LT5jb3VudFswXSArPSAoKFVJTlQ0KWlucHV0TGVuIDw8IDMpKQorICAgICA8ICgoVUlOVDQpaW5wdXRMZW4gPDwgMykpCisgICAgY29udGV4dC0+Y291bnRbMV0rKzsKKyAgY29udGV4dC0+Y291bnRbMV0gKz0gKChVSU5UNClpbnB1dExlbiA+PiAyOSk7CisKKyAgcGFydExlbiA9IDY0IC0gYnVmaW5kZXg7CisgIC8qIFRyYW5zZm9ybSBhcyBtYW55IHRpbWVzIGFzIHBvc3NpYmxlLgorICAgKi8KKyAgaWYoaW5wdXRMZW4gPj0gcGFydExlbikgeworICAgIG1lbWNweSgmY29udGV4dC0+YnVmZmVyW2J1ZmluZGV4XSwgaW5wdXQsIHBhcnRMZW4pOworICAgIE1ENFRyYW5zZm9ybSAoY29udGV4dC0+c3RhdGUsIGNvbnRleHQtPmJ1ZmZlcik7CisKKyAgICBmb3IoaSA9IHBhcnRMZW47IGkgKyA2MyA8IGlucHV0TGVuOyBpICs9IDY0KQorICAgICAgTUQ0VHJhbnNmb3JtIChjb250ZXh0LT5zdGF0ZSwgJmlucHV0W2ldKTsKKworICAgIGJ1ZmluZGV4ID0gMDsKKyAgfQorICBlbHNlCisgICAgaSA9IDA7CisKKyAgLyogQnVmZmVyIHJlbWFpbmluZyBpbnB1dCAqLworICBtZW1jcHkoJmNvbnRleHQtPmJ1ZmZlcltidWZpbmRleF0sICZpbnB1dFtpXSwgaW5wdXRMZW4taSk7Cit9CisKKy8qIE1ENCBwYWRkaW5nLiAqLworc3RhdGljIHZvaWQgTUQ0UGFkKE1ENF9DVFggKmNvbnRleHQpCit7CisgIHVuc2lnbmVkIGNoYXIgYml0c1s4XTsKKyAgdW5zaWduZWQgaW50IGJ1ZmluZGV4LCBwYWRMZW47CisKKyAgLyogU2F2ZSBudW1iZXIgb2YgYml0cyAqLworICBFbmNvZGUgKGJpdHMsIGNvbnRleHQtPmNvdW50LCA4KTsKKworICAvKiBQYWQgb3V0IHRvIDU2IG1vZCA2NC4KKyAgICovCisgIGJ1ZmluZGV4ID0gKHVuc2lnbmVkIGludCkoKGNvbnRleHQtPmNvdW50WzBdID4+IDMpICYgMHgzZik7CisgIHBhZExlbiA9IChidWZpbmRleCA8IDU2KSA/ICg1NiAtIGJ1ZmluZGV4KSA6ICgxMjAgLSBidWZpbmRleCk7CisgIE1ENFVwZGF0ZSAoY29udGV4dCwgUEFERElORywgcGFkTGVuKTsKKworICAvKiBBcHBlbmQgbGVuZ3RoIChiZWZvcmUgcGFkZGluZykgKi8KKyAgTUQ0VXBkYXRlIChjb250ZXh0LCBiaXRzLCA4KTsKK30KKworLyogTUQ0IGZpbmFsaXphdGlvbi4gRW5kcyBhbiBNRDQgbWVzc2FnZS1kaWdlc3Qgb3BlcmF0aW9uLCB3cml0aW5nIHRoZQorICAgICB0aGUgbWVzc2FnZSBkaWdlc3QgYW5kIHplcm9pemluZyB0aGUgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgTUQ0RmluYWwgKHVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XSwgTUQ0X0NUWCAqY29udGV4dCkKK3sKKyAgLyogRG8gcGFkZGluZyAqLworICBNRDRQYWQgKGNvbnRleHQpOworCisgIC8qIFN0b3JlIHN0YXRlIGluIGRpZ2VzdCAqLworICBFbmNvZGUgKGRpZ2VzdCwgY29udGV4dC0+c3RhdGUsIDE2KTsKKworICAvKiBaZXJvaXplIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KKyAgICovCisgIG1lbXNldChjb250ZXh0LCAwLCBzaXplb2YoKmNvbnRleHQpKTsKK30KKworLyogTUQ0IGJhc2ljIHRyYW5zZm9ybWF0aW9uLiBUcmFuc2Zvcm1zIHN0YXRlIGJhc2VkIG9uIGJsb2NrLgorICovCitzdGF0aWMgdm9pZCBNRDRUcmFuc2Zvcm0gKFVJTlQ0IHN0YXRlWzRdLCBjb25zdCB1bnNpZ25lZCBjaGFyIGJsb2NrWzY0XSkKK3sKKyAgVUlOVDQgYSA9IHN0YXRlWzBdLCBiID0gc3RhdGVbMV0sIGMgPSBzdGF0ZVsyXSwgZCA9IHN0YXRlWzNdLCB4WzE2XTsKKworICBEZWNvZGUgKHgsIGJsb2NrLCA2NCk7CisKKyAgLyogUm91bmQgMSAqLworICBGRiAoYSwgYiwgYywgZCwgeFsgMF0sIFMxMSk7IC8qIDEgKi8KKyAgRkYgKGQsIGEsIGIsIGMsIHhbIDFdLCBTMTIpOyAvKiAyICovCisgIEZGIChjLCBkLCBhLCBiLCB4WyAyXSwgUzEzKTsgLyogMyAqLworICBGRiAoYiwgYywgZCwgYSwgeFsgM10sIFMxNCk7IC8qIDQgKi8KKyAgRkYgKGEsIGIsIGMsIGQsIHhbIDRdLCBTMTEpOyAvKiA1ICovCisgIEZGIChkLCBhLCBiLCBjLCB4WyA1XSwgUzEyKTsgLyogNiAqLworICBGRiAoYywgZCwgYSwgYiwgeFsgNl0sIFMxMyk7IC8qIDcgKi8KKyAgRkYgKGIsIGMsIGQsIGEsIHhbIDddLCBTMTQpOyAvKiA4ICovCisgIEZGIChhLCBiLCBjLCBkLCB4WyA4XSwgUzExKTsgLyogOSAqLworICBGRiAoZCwgYSwgYiwgYywgeFsgOV0sIFMxMik7IC8qIDEwICovCisgIEZGIChjLCBkLCBhLCBiLCB4WzEwXSwgUzEzKTsgLyogMTEgKi8KKyAgRkYgKGIsIGMsIGQsIGEsIHhbMTFdLCBTMTQpOyAvKiAxMiAqLworICBGRiAoYSwgYiwgYywgZCwgeFsxMl0sIFMxMSk7IC8qIDEzICovCisgIEZGIChkLCBhLCBiLCBjLCB4WzEzXSwgUzEyKTsgLyogMTQgKi8KKyAgRkYgKGMsIGQsIGEsIGIsIHhbMTRdLCBTMTMpOyAvKiAxNSAqLworICBGRiAoYiwgYywgZCwgYSwgeFsxNV0sIFMxNCk7IC8qIDE2ICovCisKKyAgLyogUm91bmQgMiAqLworICBHRyAoYSwgYiwgYywgZCwgeFsgMF0sIFMyMSk7IC8qIDE3ICovCisgIEdHIChkLCBhLCBiLCBjLCB4WyA0XSwgUzIyKTsgLyogMTggKi8KKyAgR0cgKGMsIGQsIGEsIGIsIHhbIDhdLCBTMjMpOyAvKiAxOSAqLworICBHRyAoYiwgYywgZCwgYSwgeFsxMl0sIFMyNCk7IC8qIDIwICovCisgIEdHIChhLCBiLCBjLCBkLCB4WyAxXSwgUzIxKTsgLyogMjEgKi8KKyAgR0cgKGQsIGEsIGIsIGMsIHhbIDVdLCBTMjIpOyAvKiAyMiAqLworICBHRyAoYywgZCwgYSwgYiwgeFsgOV0sIFMyMyk7IC8qIDIzICovCisgIEdHIChiLCBjLCBkLCBhLCB4WzEzXSwgUzI0KTsgLyogMjQgKi8KKyAgR0cgKGEsIGIsIGMsIGQsIHhbIDJdLCBTMjEpOyAvKiAyNSAqLworICBHRyAoZCwgYSwgYiwgYywgeFsgNl0sIFMyMik7IC8qIDI2ICovCisgIEdHIChjLCBkLCBhLCBiLCB4WzEwXSwgUzIzKTsgLyogMjcgKi8KKyAgR0cgKGIsIGMsIGQsIGEsIHhbMTRdLCBTMjQpOyAvKiAyOCAqLworICBHRyAoYSwgYiwgYywgZCwgeFsgM10sIFMyMSk7IC8qIDI5ICovCisgIEdHIChkLCBhLCBiLCBjLCB4WyA3XSwgUzIyKTsgLyogMzAgKi8KKyAgR0cgKGMsIGQsIGEsIGIsIHhbMTFdLCBTMjMpOyAvKiAzMSAqLworICBHRyAoYiwgYywgZCwgYSwgeFsxNV0sIFMyNCk7IC8qIDMyICovCisKKyAgLyogUm91bmQgMyAqLworICBISCAoYSwgYiwgYywgZCwgeFsgMF0sIFMzMSk7IC8qIDMzICovCisgIEhIIChkLCBhLCBiLCBjLCB4WyA4XSwgUzMyKTsgLyogMzQgKi8KKyAgSEggKGMsIGQsIGEsIGIsIHhbIDRdLCBTMzMpOyAvKiAzNSAqLworICBISCAoYiwgYywgZCwgYSwgeFsxMl0sIFMzNCk7IC8qIDM2ICovCisgIEhIIChhLCBiLCBjLCBkLCB4WyAyXSwgUzMxKTsgLyogMzcgKi8KKyAgSEggKGQsIGEsIGIsIGMsIHhbMTBdLCBTMzIpOyAvKiAzOCAqLworICBISCAoYywgZCwgYSwgYiwgeFsgNl0sIFMzMyk7IC8qIDM5ICovCisgIEhIIChiLCBjLCBkLCBhLCB4WzE0XSwgUzM0KTsgLyogNDAgKi8KKyAgSEggKGEsIGIsIGMsIGQsIHhbIDFdLCBTMzEpOyAvKiA0MSAqLworICBISCAoZCwgYSwgYiwgYywgeFsgOV0sIFMzMik7IC8qIDQyICovCisgIEhIIChjLCBkLCBhLCBiLCB4WyA1XSwgUzMzKTsgLyogNDMgKi8KKyAgSEggKGIsIGMsIGQsIGEsIHhbMTNdLCBTMzQpOyAvKiA0NCAqLworICBISCAoYSwgYiwgYywgZCwgeFsgM10sIFMzMSk7IC8qIDQ1ICovCisgIEhIIChkLCBhLCBiLCBjLCB4WzExXSwgUzMyKTsgLyogNDYgKi8KKyAgSEggKGMsIGQsIGEsIGIsIHhbIDddLCBTMzMpOyAvKiA0NyAqLworICBISCAoYiwgYywgZCwgYSwgeFsxNV0sIFMzNCk7IC8qIDQ4ICovCisKKyAgc3RhdGVbMF0gKz0gYTsKKyAgc3RhdGVbMV0gKz0gYjsKKyAgc3RhdGVbMl0gKz0gYzsKKyAgc3RhdGVbM10gKz0gZDsKKworICAvKiBaZXJvaXplIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KKyAgICovCisgIG1lbXNldCh4LCAwLCBzaXplb2YoeCkpOworfQorCisvKiBFbmNvZGVzIGlucHV0IChVSU5UNCkgaW50byBvdXRwdXQgKHVuc2lnbmVkIGNoYXIpLiBBc3N1bWVzIGxlbiBpcworICAgICBhIG11bHRpcGxlIG9mIDQuCisgKi8KK3N0YXRpYyB2b2lkIEVuY29kZSh1bnNpZ25lZCBjaGFyICpvdXRwdXQsIFVJTlQ0ICppbnB1dCwgdW5zaWduZWQgaW50IGxlbikKK3sKKyAgdW5zaWduZWQgaW50IGksIGo7CisKKyAgZm9yKGkgPSAwLCBqID0gMDsgaiA8IGxlbjsgaSsrLCBqICs9IDQpIHsKKyAgICBvdXRwdXRbal0gPSAodW5zaWduZWQgY2hhcikoaW5wdXRbaV0gJiAweGZmKTsKKyAgICBvdXRwdXRbaisxXSA9ICh1bnNpZ25lZCBjaGFyKSgoaW5wdXRbaV0gPj4gOCkgJiAweGZmKTsKKyAgICBvdXRwdXRbaisyXSA9ICh1bnNpZ25lZCBjaGFyKSgoaW5wdXRbaV0gPj4gMTYpICYgMHhmZik7CisgICAgb3V0cHV0W2orM10gPSAodW5zaWduZWQgY2hhcikoKGlucHV0W2ldID4+IDI0KSAmIDB4ZmYpOworICB9Cit9CisKKy8qIERlY29kZXMgaW5wdXQgKHVuc2lnbmVkIGNoYXIpIGludG8gb3V0cHV0IChVSU5UNCkuIEFzc3VtZXMgbGVuIGlzCisgICAgIGEgbXVsdGlwbGUgb2YgNC4KKyAqLworc3RhdGljIHZvaWQgRGVjb2RlIChVSU5UNCAqb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKyAgdW5zaWduZWQgaW50IGksIGo7CisKKyAgZm9yKGkgPSAwLCBqID0gMDsgaiA8IGxlbjsgaSsrLCBqICs9IDQpCisgICAgb3V0cHV0W2ldID0gKChVSU5UNClpbnB1dFtqXSkgfCAoKChVSU5UNClpbnB1dFtqKzFdKSA8PCA4KSB8CisgICAgICAoKChVSU5UNClpbnB1dFtqKzJdKSA8PCAxNikgfCAoKChVSU5UNClpbnB1dFtqKzNdKSA8PCAyNCk7Cit9CisKK3ZvaWQgQ3VybF9tZDRpdCh1bnNpZ25lZCBjaGFyICpvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCBzaXplX3QgbGVuKQoreworICBNRDRfQ1RYIGN0eDsKKyAgTUQ0SW5pdCgmY3R4KTsKKyAgTUQ0VXBkYXRlKCZjdHgsIGlucHV0LCBjdXJseF91enRvdWkobGVuKSk7CisgIE1ENEZpbmFsKG91dHB1dCwgJmN0eCk7Cit9CisjZW5kaWYgLyogVVNFX05TUyAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL21kNS5jIGIvY3VybC03LjI1LjAvbGliL21kNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzY2I5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvbWQ1LmMKQEAgLTAsMCArMSw0MjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgKKworI2luY2x1ZGUgImN1cmxfbWQ1LmgiCisjaW5jbHVkZSAiY3VybF9obWFjLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKworI2lmZGVmIFVTRV9HTlVUTFNfTkVUVExFCisKKyNpbmNsdWRlIDxuZXR0bGUvbWQ1Lmg+CisKK3R5cGVkZWYgc3RydWN0IG1kNV9jdHggTUQ1X0NUWDsKKworc3RhdGljIHZvaWQgTUQ1X0luaXQoTUQ1X0NUWCAqIGN0eCkKK3sKKyAgbWQ1X2luaXQoY3R4KTsKK30KKworc3RhdGljIHZvaWQgTUQ1X1VwZGF0ZShNRDVfQ1RYICogY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnB1dExlbikKK3sKKyAgbWQ1X3VwZGF0ZShjdHgsIGlucHV0TGVuLCBpbnB1dCk7Cit9CisKK3N0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIE1ENV9DVFggKiBjdHgpCit7CisgIG1kNV9kaWdlc3QoY3R4LCAxNiwgZGlnZXN0KTsKK30KKyNlbHNlCisKKyNpZmRlZiBVU0VfR05VVExTCisKKyNpbmNsdWRlIDxnY3J5cHQuaD4KKwordHlwZWRlZiBnY3J5X21kX2hkX3QgTUQ1X0NUWDsKKworc3RhdGljIHZvaWQgTUQ1X0luaXQoTUQ1X0NUWCAqIGN0eCkKK3sKKyAgZ2NyeV9tZF9vcGVuKGN0eCwgR0NSWV9NRF9NRDUsIDApOworfQorCitzdGF0aWMgdm9pZCBNRDVfVXBkYXRlKE1ENV9DVFggKiBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlucHV0TGVuKQoreworICBnY3J5X21kX3dyaXRlKCpjdHgsIGlucHV0LCBpbnB1dExlbik7Cit9CisKK3N0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIE1ENV9DVFggKiBjdHgpCit7CisgIG1lbWNweShkaWdlc3QsIGdjcnlfbWRfcmVhZCgqY3R4LCAwKSwgMTYpOworICBnY3J5X21kX2Nsb3NlKCpjdHgpOworfQorCisjZWxzZQorCisjaWZkZWYgVVNFX1NTTEVBWQorLyogV2hlbiBPcGVuU1NMIGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhlIE1ENS1mdW5jdGlvbiBmcm9tIE9wZW5TU0wgKi8KKworIyAgaWZkZWYgVVNFX09QRU5TU0wKKyMgICAgaW5jbHVkZSA8b3BlbnNzbC9tZDUuaD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8bWQ1Lmg+CisjICBlbmRpZgorCisjZWxzZSAvKiBVU0VfU1NMRUFZICovCisvKiBXaGVuIE9wZW5TU0wgaXMgbm90IGF2YWlsYWJsZSB3ZSB1c2UgdGhpcyBjb2RlIHNlZ21lbnQgKi8KKworLyogQ29weXJpZ2h0IChDKSAxOTkxLTIsIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIENyZWF0ZWQgMTk5MS4gQWxsCityaWdodHMgcmVzZXJ2ZWQuCisKK0xpY2Vuc2UgdG8gY29weSBhbmQgdXNlIHRoaXMgc29mdHdhcmUgaXMgZ3JhbnRlZCBwcm92aWRlZCB0aGF0IGl0CitpcyBpZGVudGlmaWVkIGFzIHRoZSAiUlNBIERhdGEgU2VjdXJpdHksIEluYy4gTUQ1IE1lc3NhZ2UtRGlnZXN0CitBbGdvcml0aG0iIGluIGFsbCBtYXRlcmlhbCBtZW50aW9uaW5nIG9yIHJlZmVyZW5jaW5nIHRoaXMgc29mdHdhcmUKK29yIHRoaXMgZnVuY3Rpb24uCisKK0xpY2Vuc2UgaXMgYWxzbyBncmFudGVkIHRvIG1ha2UgYW5kIHVzZSBkZXJpdmF0aXZlIHdvcmtzIHByb3ZpZGVkCit0aGF0IHN1Y2ggd29ya3MgYXJlIGlkZW50aWZpZWQgYXMgImRlcml2ZWQgZnJvbSB0aGUgUlNBIERhdGEKK1NlY3VyaXR5LCBJbmMuIE1ENSBNZXNzYWdlLURpZ2VzdCBBbGdvcml0aG0iIGluIGFsbCBtYXRlcmlhbAorbWVudGlvbmluZyBvciByZWZlcmVuY2luZyB0aGUgZGVyaXZlZCB3b3JrLgorCitSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgY29uY2VybmluZyBlaXRoZXIKK3RoZSBtZXJjaGFudGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBvciB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcworc29mdHdhcmUgZm9yIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKK3dpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5IG9mIGFueSBraW5kLgorCitUaGVzZSBub3RpY2VzIG11c3QgYmUgcmV0YWluZWQgaW4gYW55IGNvcGllcyBvZiBhbnkgcGFydCBvZiB0aGlzCitkb2N1bWVudGF0aW9uIGFuZC9vciBzb2Z0d2FyZS4KKyAqLworCisvKiBVSU5UNCBkZWZpbmVzIGEgZm91ciBieXRlIHdvcmQgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQ0OworCisvKiBNRDUgY29udGV4dC4gKi8KK3N0cnVjdCBtZDVfY3R4IHsKKyAgVUlOVDQgc3RhdGVbNF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0ZSAoQUJDRCkgKi8KKyAgVUlOVDQgY291bnRbMl07ICAgICAgICAvKiBudW1iZXIgb2YgYml0cywgbW9kdWxvIDJeNjQgKGxzYiBmaXJzdCkgKi8KKyAgdW5zaWduZWQgY2hhciBidWZmZXJbNjRdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnB1dCBidWZmZXIgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IG1kNV9jdHggTUQ1X0NUWDsKKworc3RhdGljIHZvaWQgTUQ1X0luaXQoc3RydWN0IG1kNV9jdHggKik7CitzdGF0aWMgdm9pZCBNRDVfVXBkYXRlKHN0cnVjdCBtZDVfY3R4ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKK3N0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyIFsxNl0sIHN0cnVjdCBtZDVfY3R4ICopOworCisvKiBDb25zdGFudHMgZm9yIE1ENVRyYW5zZm9ybSByb3V0aW5lLgorICovCisKKyNkZWZpbmUgUzExIDcKKyNkZWZpbmUgUzEyIDEyCisjZGVmaW5lIFMxMyAxNworI2RlZmluZSBTMTQgMjIKKyNkZWZpbmUgUzIxIDUKKyNkZWZpbmUgUzIyIDkKKyNkZWZpbmUgUzIzIDE0CisjZGVmaW5lIFMyNCAyMAorI2RlZmluZSBTMzEgNAorI2RlZmluZSBTMzIgMTEKKyNkZWZpbmUgUzMzIDE2CisjZGVmaW5lIFMzNCAyMworI2RlZmluZSBTNDEgNgorI2RlZmluZSBTNDIgMTAKKyNkZWZpbmUgUzQzIDE1CisjZGVmaW5lIFM0NCAyMQorCitzdGF0aWMgdm9pZCBNRDVUcmFuc2Zvcm0oVUlOVDQgWzRdLCBjb25zdCB1bnNpZ25lZCBjaGFyIFs2NF0pOworc3RhdGljIHZvaWQgRW5jb2RlKHVuc2lnbmVkIGNoYXIgKiwgVUlOVDQgKiwgdW5zaWduZWQgaW50KTsKK3N0YXRpYyB2b2lkIERlY29kZShVSU5UNCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCk7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFBBRERJTkdbNjRdID0geworICAweDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9OworCisvKiBGLCBHLCBIIGFuZCBJIGFyZSBiYXNpYyBNRDUgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIEYoeCwgeSwgeikgKCgoeCkgJiAoeSkpIHwgKCh+eCkgJiAoeikpKQorI2RlZmluZSBHKHgsIHksIHopICgoKHgpICYgKHopKSB8ICgoeSkgJiAofnopKSkKKyNkZWZpbmUgSCh4LCB5LCB6KSAoKHgpIF4gKHkpIF4gKHopKQorI2RlZmluZSBJKHgsIHksIHopICgoeSkgXiAoKHgpIHwgKH56KSkpCisKKy8qIFJPVEFURV9MRUZUIHJvdGF0ZXMgeCBsZWZ0IG4gYml0cy4KKyAqLworI2RlZmluZSBST1RBVEVfTEVGVCh4LCBuKSAoKCh4KSA8PCAobikpIHwgKCh4KSA+PiAoMzItKG4pKSkpCisKKy8qIEZGLCBHRywgSEgsIGFuZCBJSSB0cmFuc2Zvcm1hdGlvbnMgZm9yIHJvdW5kcyAxLCAyLCAzLCBhbmQgNC4KK1JvdGF0aW9uIGlzIHNlcGFyYXRlIGZyb20gYWRkaXRpb24gdG8gcHJldmVudCByZWNvbXB1dGF0aW9uLgorICovCisjZGVmaW5lIEZGKGEsIGIsIGMsIGQsIHgsIHMsIGFjKSB7IFwKKyAoYSkgKz0gRiAoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAoVUlOVDQpKGFjKTsgXAorIChhKSA9IFJPVEFURV9MRUZUICgoYSksIChzKSk7IFwKKyAoYSkgKz0gKGIpOyBcCisgIH0KKyNkZWZpbmUgR0coYSwgYiwgYywgZCwgeCwgcywgYWMpIHsgXAorIChhKSArPSBHICgoYiksIChjKSwgKGQpKSArICh4KSArIChVSU5UNCkoYWMpOyBcCisgKGEpID0gUk9UQVRFX0xFRlQgKChhKSwgKHMpKTsgXAorIChhKSArPSAoYik7IFwKKyAgfQorI2RlZmluZSBISChhLCBiLCBjLCBkLCB4LCBzLCBhYykgeyBcCisgKGEpICs9IEggKChiKSwgKGMpLCAoZCkpICsgKHgpICsgKFVJTlQ0KShhYyk7IFwKKyAoYSkgPSBST1RBVEVfTEVGVCAoKGEpLCAocykpOyBcCisgKGEpICs9IChiKTsgXAorICB9CisjZGVmaW5lIElJKGEsIGIsIGMsIGQsIHgsIHMsIGFjKSB7IFwKKyAoYSkgKz0gSSAoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAoVUlOVDQpKGFjKTsgXAorIChhKSA9IFJPVEFURV9MRUZUICgoYSksIChzKSk7IFwKKyAoYSkgKz0gKGIpOyBcCisgIH0KKworLyogTUQ1IGluaXRpYWxpemF0aW9uLiBCZWdpbnMgYW4gTUQ1IG9wZXJhdGlvbiwgd3JpdGluZyBhIG5ldyBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBNRDVfSW5pdChzdHJ1Y3QgbWQ1X2N0eCAqY29udGV4dCkKK3sKKyAgY29udGV4dC0+Y291bnRbMF0gPSBjb250ZXh0LT5jb3VudFsxXSA9IDA7CisgIC8qIExvYWQgbWFnaWMgaW5pdGlhbGl6YXRpb24gY29uc3RhbnRzLiAqLworICBjb250ZXh0LT5zdGF0ZVswXSA9IDB4Njc0NTIzMDE7CisgIGNvbnRleHQtPnN0YXRlWzFdID0gMHhlZmNkYWI4OTsKKyAgY29udGV4dC0+c3RhdGVbMl0gPSAweDk4YmFkY2ZlOworICBjb250ZXh0LT5zdGF0ZVszXSA9IDB4MTAzMjU0NzY7Cit9CisKKy8qIE1ENSBibG9jayB1cGRhdGUgb3BlcmF0aW9uLiBDb250aW51ZXMgYW4gTUQ1IG1lc3NhZ2UtZGlnZXN0CisgIG9wZXJhdGlvbiwgcHJvY2Vzc2luZyBhbm90aGVyIG1lc3NhZ2UgYmxvY2ssIGFuZCB1cGRhdGluZyB0aGUKKyAgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgTUQ1X1VwZGF0ZSAoc3RydWN0IG1kNV9jdHggKmNvbnRleHQsICAgIC8qIGNvbnRleHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LCAvKiBpbnB1dCBibG9jayAqLworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlucHV0TGVuKSAgICAgIC8qIGxlbmd0aCBvZiBpbnB1dCBibG9jayAqLworeworICB1bnNpZ25lZCBpbnQgaSwgYnVmaW5kZXgsIHBhcnRMZW47CisKKyAgLyogQ29tcHV0ZSBudW1iZXIgb2YgYnl0ZXMgbW9kIDY0ICovCisgIGJ1ZmluZGV4ID0gKHVuc2lnbmVkIGludCkoKGNvbnRleHQtPmNvdW50WzBdID4+IDMpICYgMHgzRik7CisKKyAgLyogVXBkYXRlIG51bWJlciBvZiBiaXRzICovCisgIGlmKChjb250ZXh0LT5jb3VudFswXSArPSAoKFVJTlQ0KWlucHV0TGVuIDw8IDMpKQorICAgICAgPCAoKFVJTlQ0KWlucHV0TGVuIDw8IDMpKQorICAgIGNvbnRleHQtPmNvdW50WzFdKys7CisgIGNvbnRleHQtPmNvdW50WzFdICs9ICgoVUlOVDQpaW5wdXRMZW4gPj4gMjkpOworCisgIHBhcnRMZW4gPSA2NCAtIGJ1ZmluZGV4OworCisgIC8qIFRyYW5zZm9ybSBhcyBtYW55IHRpbWVzIGFzIHBvc3NpYmxlLiAqLworICBpZihpbnB1dExlbiA+PSBwYXJ0TGVuKSB7CisgICAgbWVtY3B5KCZjb250ZXh0LT5idWZmZXJbYnVmaW5kZXhdLCBpbnB1dCwgcGFydExlbik7CisgICAgTUQ1VHJhbnNmb3JtKGNvbnRleHQtPnN0YXRlLCBjb250ZXh0LT5idWZmZXIpOworCisgICAgZm9yKGkgPSBwYXJ0TGVuOyBpICsgNjMgPCBpbnB1dExlbjsgaSArPSA2NCkKKyAgICAgIE1ENVRyYW5zZm9ybShjb250ZXh0LT5zdGF0ZSwgJmlucHV0W2ldKTsKKworICAgIGJ1ZmluZGV4ID0gMDsKKyAgfQorICBlbHNlCisgICAgaSA9IDA7CisKKyAgLyogQnVmZmVyIHJlbWFpbmluZyBpbnB1dCAqLworICBtZW1jcHkoJmNvbnRleHQtPmJ1ZmZlcltidWZpbmRleF0sICZpbnB1dFtpXSwgaW5wdXRMZW4taSk7Cit9CisKKy8qIE1ENSBmaW5hbGl6YXRpb24uIEVuZHMgYW4gTUQ1IG1lc3NhZ2UtZGlnZXN0IG9wZXJhdGlvbiwgd3JpdGluZyB0aGUKKyAgIHRoZSBtZXNzYWdlIGRpZ2VzdCBhbmQgemVyb2l6aW5nIHRoZSBjb250ZXh0LgorKi8KK3N0YXRpYyB2b2lkIE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIC8qIG1lc3NhZ2UgZGlnZXN0ICovCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1kNV9jdHggKmNvbnRleHQpIC8qIGNvbnRleHQgKi8KK3sKKyAgdW5zaWduZWQgY2hhciBiaXRzWzhdOworICB1bnNpZ25lZCBpbnQgY291bnQsIHBhZExlbjsKKworICAvKiBTYXZlIG51bWJlciBvZiBiaXRzICovCisgIEVuY29kZSAoYml0cywgY29udGV4dC0+Y291bnQsIDgpOworCisgIC8qIFBhZCBvdXQgdG8gNTYgbW9kIDY0LiAqLworICBjb3VudCA9ICh1bnNpZ25lZCBpbnQpKChjb250ZXh0LT5jb3VudFswXSA+PiAzKSAmIDB4M2YpOworICBwYWRMZW4gPSAoY291bnQgPCA1NikgPyAoNTYgLSBjb3VudCkgOiAoMTIwIC0gY291bnQpOworICBNRDVfVXBkYXRlIChjb250ZXh0LCBQQURESU5HLCBwYWRMZW4pOworCisgIC8qIEFwcGVuZCBsZW5ndGggKGJlZm9yZSBwYWRkaW5nKSAqLworICBNRDVfVXBkYXRlIChjb250ZXh0LCBiaXRzLCA4KTsKKworICAvKiBTdG9yZSBzdGF0ZSBpbiBkaWdlc3QgKi8KKyAgRW5jb2RlIChkaWdlc3QsIGNvbnRleHQtPnN0YXRlLCAxNik7CisKKyAgLyogWmVyb2l6ZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uICovCisgIG1lbXNldCAoKHZvaWQgKiljb250ZXh0LCAwLCBzaXplb2YgKCpjb250ZXh0KSk7Cit9CisKKy8qIE1ENSBiYXNpYyB0cmFuc2Zvcm1hdGlvbi4gVHJhbnNmb3JtcyBzdGF0ZSBiYXNlZCBvbiBibG9jay4gKi8KK3N0YXRpYyB2b2lkIE1ENVRyYW5zZm9ybShVSU5UNCBzdGF0ZVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGJsb2NrWzY0XSkKK3sKKyAgVUlOVDQgYSA9IHN0YXRlWzBdLCBiID0gc3RhdGVbMV0sIGMgPSBzdGF0ZVsyXSwgZCA9IHN0YXRlWzNdLCB4WzE2XTsKKworICBEZWNvZGUgKHgsIGJsb2NrLCA2NCk7CisKKyAgLyogUm91bmQgMSAqLworICBGRiAoYSwgYiwgYywgZCwgeFsgMF0sIFMxMSwgMHhkNzZhYTQ3OCk7IC8qIDEgKi8KKyAgRkYgKGQsIGEsIGIsIGMsIHhbIDFdLCBTMTIsIDB4ZThjN2I3NTYpOyAvKiAyICovCisgIEZGIChjLCBkLCBhLCBiLCB4WyAyXSwgUzEzLCAweDI0MjA3MGRiKTsgLyogMyAqLworICBGRiAoYiwgYywgZCwgYSwgeFsgM10sIFMxNCwgMHhjMWJkY2VlZSk7IC8qIDQgKi8KKyAgRkYgKGEsIGIsIGMsIGQsIHhbIDRdLCBTMTEsIDB4ZjU3YzBmYWYpOyAvKiA1ICovCisgIEZGIChkLCBhLCBiLCBjLCB4WyA1XSwgUzEyLCAweDQ3ODdjNjJhKTsgLyogNiAqLworICBGRiAoYywgZCwgYSwgYiwgeFsgNl0sIFMxMywgMHhhODMwNDYxMyk7IC8qIDcgKi8KKyAgRkYgKGIsIGMsIGQsIGEsIHhbIDddLCBTMTQsIDB4ZmQ0Njk1MDEpOyAvKiA4ICovCisgIEZGIChhLCBiLCBjLCBkLCB4WyA4XSwgUzExLCAweDY5ODA5OGQ4KTsgLyogOSAqLworICBGRiAoZCwgYSwgYiwgYywgeFsgOV0sIFMxMiwgMHg4YjQ0ZjdhZik7IC8qIDEwICovCisgIEZGIChjLCBkLCBhLCBiLCB4WzEwXSwgUzEzLCAweGZmZmY1YmIxKTsgLyogMTEgKi8KKyAgRkYgKGIsIGMsIGQsIGEsIHhbMTFdLCBTMTQsIDB4ODk1Y2Q3YmUpOyAvKiAxMiAqLworICBGRiAoYSwgYiwgYywgZCwgeFsxMl0sIFMxMSwgMHg2YjkwMTEyMik7IC8qIDEzICovCisgIEZGIChkLCBhLCBiLCBjLCB4WzEzXSwgUzEyLCAweGZkOTg3MTkzKTsgLyogMTQgKi8KKyAgRkYgKGMsIGQsIGEsIGIsIHhbMTRdLCBTMTMsIDB4YTY3OTQzOGUpOyAvKiAxNSAqLworICBGRiAoYiwgYywgZCwgYSwgeFsxNV0sIFMxNCwgMHg0OWI0MDgyMSk7IC8qIDE2ICovCisKKyAvKiBSb3VuZCAyICovCisgIEdHIChhLCBiLCBjLCBkLCB4WyAxXSwgUzIxLCAweGY2MWUyNTYyKTsgLyogMTcgKi8KKyAgR0cgKGQsIGEsIGIsIGMsIHhbIDZdLCBTMjIsIDB4YzA0MGIzNDApOyAvKiAxOCAqLworICBHRyAoYywgZCwgYSwgYiwgeFsxMV0sIFMyMywgMHgyNjVlNWE1MSk7IC8qIDE5ICovCisgIEdHIChiLCBjLCBkLCBhLCB4WyAwXSwgUzI0LCAweGU5YjZjN2FhKTsgLyogMjAgKi8KKyAgR0cgKGEsIGIsIGMsIGQsIHhbIDVdLCBTMjEsIDB4ZDYyZjEwNWQpOyAvKiAyMSAqLworICBHRyAoZCwgYSwgYiwgYywgeFsxMF0sIFMyMiwgIDB4MjQ0MTQ1Myk7IC8qIDIyICovCisgIEdHIChjLCBkLCBhLCBiLCB4WzE1XSwgUzIzLCAweGQ4YTFlNjgxKTsgLyogMjMgKi8KKyAgR0cgKGIsIGMsIGQsIGEsIHhbIDRdLCBTMjQsIDB4ZTdkM2ZiYzgpOyAvKiAyNCAqLworICBHRyAoYSwgYiwgYywgZCwgeFsgOV0sIFMyMSwgMHgyMWUxY2RlNik7IC8qIDI1ICovCisgIEdHIChkLCBhLCBiLCBjLCB4WzE0XSwgUzIyLCAweGMzMzcwN2Q2KTsgLyogMjYgKi8KKyAgR0cgKGMsIGQsIGEsIGIsIHhbIDNdLCBTMjMsIDB4ZjRkNTBkODcpOyAvKiAyNyAqLworICBHRyAoYiwgYywgZCwgYSwgeFsgOF0sIFMyNCwgMHg0NTVhMTRlZCk7IC8qIDI4ICovCisgIEdHIChhLCBiLCBjLCBkLCB4WzEzXSwgUzIxLCAweGE5ZTNlOTA1KTsgLyogMjkgKi8KKyAgR0cgKGQsIGEsIGIsIGMsIHhbIDJdLCBTMjIsIDB4ZmNlZmEzZjgpOyAvKiAzMCAqLworICBHRyAoYywgZCwgYSwgYiwgeFsgN10sIFMyMywgMHg2NzZmMDJkOSk7IC8qIDMxICovCisgIEdHIChiLCBjLCBkLCBhLCB4WzEyXSwgUzI0LCAweDhkMmE0YzhhKTsgLyogMzIgKi8KKworICAvKiBSb3VuZCAzICovCisgIEhIIChhLCBiLCBjLCBkLCB4WyA1XSwgUzMxLCAweGZmZmEzOTQyKTsgLyogMzMgKi8KKyAgSEggKGQsIGEsIGIsIGMsIHhbIDhdLCBTMzIsIDB4ODc3MWY2ODEpOyAvKiAzNCAqLworICBISCAoYywgZCwgYSwgYiwgeFsxMV0sIFMzMywgMHg2ZDlkNjEyMik7IC8qIDM1ICovCisgIEhIIChiLCBjLCBkLCBhLCB4WzE0XSwgUzM0LCAweGZkZTUzODBjKTsgLyogMzYgKi8KKyAgSEggKGEsIGIsIGMsIGQsIHhbIDFdLCBTMzEsIDB4YTRiZWVhNDQpOyAvKiAzNyAqLworICBISCAoZCwgYSwgYiwgYywgeFsgNF0sIFMzMiwgMHg0YmRlY2ZhOSk7IC8qIDM4ICovCisgIEhIIChjLCBkLCBhLCBiLCB4WyA3XSwgUzMzLCAweGY2YmI0YjYwKTsgLyogMzkgKi8KKyAgSEggKGIsIGMsIGQsIGEsIHhbMTBdLCBTMzQsIDB4YmViZmJjNzApOyAvKiA0MCAqLworICBISCAoYSwgYiwgYywgZCwgeFsxM10sIFMzMSwgMHgyODliN2VjNik7IC8qIDQxICovCisgIEhIIChkLCBhLCBiLCBjLCB4WyAwXSwgUzMyLCAweGVhYTEyN2ZhKTsgLyogNDIgKi8KKyAgSEggKGMsIGQsIGEsIGIsIHhbIDNdLCBTMzMsIDB4ZDRlZjMwODUpOyAvKiA0MyAqLworICBISCAoYiwgYywgZCwgYSwgeFsgNl0sIFMzNCwgIDB4NDg4MWQwNSk7IC8qIDQ0ICovCisgIEhIIChhLCBiLCBjLCBkLCB4WyA5XSwgUzMxLCAweGQ5ZDRkMDM5KTsgLyogNDUgKi8KKyAgSEggKGQsIGEsIGIsIGMsIHhbMTJdLCBTMzIsIDB4ZTZkYjk5ZTUpOyAvKiA0NiAqLworICBISCAoYywgZCwgYSwgYiwgeFsxNV0sIFMzMywgMHgxZmEyN2NmOCk7IC8qIDQ3ICovCisgIEhIIChiLCBjLCBkLCBhLCB4WyAyXSwgUzM0LCAweGM0YWM1NjY1KTsgLyogNDggKi8KKworICAvKiBSb3VuZCA0ICovCisgIElJIChhLCBiLCBjLCBkLCB4WyAwXSwgUzQxLCAweGY0MjkyMjQ0KTsgLyogNDkgKi8KKyAgSUkgKGQsIGEsIGIsIGMsIHhbIDddLCBTNDIsIDB4NDMyYWZmOTcpOyAvKiA1MCAqLworICBJSSAoYywgZCwgYSwgYiwgeFsxNF0sIFM0MywgMHhhYjk0MjNhNyk7IC8qIDUxICovCisgIElJIChiLCBjLCBkLCBhLCB4WyA1XSwgUzQ0LCAweGZjOTNhMDM5KTsgLyogNTIgKi8KKyAgSUkgKGEsIGIsIGMsIGQsIHhbMTJdLCBTNDEsIDB4NjU1YjU5YzMpOyAvKiA1MyAqLworICBJSSAoZCwgYSwgYiwgYywgeFsgM10sIFM0MiwgMHg4ZjBjY2M5Mik7IC8qIDU0ICovCisgIElJIChjLCBkLCBhLCBiLCB4WzEwXSwgUzQzLCAweGZmZWZmNDdkKTsgLyogNTUgKi8KKyAgSUkgKGIsIGMsIGQsIGEsIHhbIDFdLCBTNDQsIDB4ODU4NDVkZDEpOyAvKiA1NiAqLworICBJSSAoYSwgYiwgYywgZCwgeFsgOF0sIFM0MSwgMHg2ZmE4N2U0Zik7IC8qIDU3ICovCisgIElJIChkLCBhLCBiLCBjLCB4WzE1XSwgUzQyLCAweGZlMmNlNmUwKTsgLyogNTggKi8KKyAgSUkgKGMsIGQsIGEsIGIsIHhbIDZdLCBTNDMsIDB4YTMwMTQzMTQpOyAvKiA1OSAqLworICBJSSAoYiwgYywgZCwgYSwgeFsxM10sIFM0NCwgMHg0ZTA4MTFhMSk7IC8qIDYwICovCisgIElJIChhLCBiLCBjLCBkLCB4WyA0XSwgUzQxLCAweGY3NTM3ZTgyKTsgLyogNjEgKi8KKyAgSUkgKGQsIGEsIGIsIGMsIHhbMTFdLCBTNDIsIDB4YmQzYWYyMzUpOyAvKiA2MiAqLworICBJSSAoYywgZCwgYSwgYiwgeFsgMl0sIFM0MywgMHgyYWQ3ZDJiYik7IC8qIDYzICovCisgIElJIChiLCBjLCBkLCBhLCB4WyA5XSwgUzQ0LCAweGViODZkMzkxKTsgLyogNjQgKi8KKworICBzdGF0ZVswXSArPSBhOworICBzdGF0ZVsxXSArPSBiOworICBzdGF0ZVsyXSArPSBjOworICBzdGF0ZVszXSArPSBkOworCisgIC8qIFplcm9pemUgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiAqLworICBtZW1zZXQoKHZvaWQgKil4LCAwLCBzaXplb2YgKHgpKTsKK30KKworLyogRW5jb2RlcyBpbnB1dCAoVUlOVDQpIGludG8gb3V0cHV0ICh1bnNpZ25lZCBjaGFyKS4gQXNzdW1lcyBsZW4gaXMKKyAgYSBtdWx0aXBsZSBvZiA0LgorICovCitzdGF0aWMgdm9pZCBFbmNvZGUgKHVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgVUlOVDQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworICB1bnNpZ25lZCBpbnQgaSwgajsKKworICBmb3IoaSA9IDAsIGogPSAwOyBqIDwgbGVuOyBpKyssIGogKz0gNCkgeworICAgIG91dHB1dFtqXSA9ICh1bnNpZ25lZCBjaGFyKShpbnB1dFtpXSAmIDB4ZmYpOworICAgIG91dHB1dFtqKzFdID0gKHVuc2lnbmVkIGNoYXIpKChpbnB1dFtpXSA+PiA4KSAmIDB4ZmYpOworICAgIG91dHB1dFtqKzJdID0gKHVuc2lnbmVkIGNoYXIpKChpbnB1dFtpXSA+PiAxNikgJiAweGZmKTsKKyAgICBvdXRwdXRbaiszXSA9ICh1bnNpZ25lZCBjaGFyKSgoaW5wdXRbaV0gPj4gMjQpICYgMHhmZik7CisgIH0KK30KKworLyogRGVjb2RlcyBpbnB1dCAodW5zaWduZWQgY2hhcikgaW50byBvdXRwdXQgKFVJTlQ0KS4gQXNzdW1lcyBsZW4gaXMKKyAgIGEgbXVsdGlwbGUgb2YgNC4KKyovCitzdGF0aWMgdm9pZCBEZWNvZGUgKFVJTlQ0ICpvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworICB1bnNpZ25lZCBpbnQgaSwgajsKKworICBmb3IoaSA9IDAsIGogPSAwOyBqIDwgbGVuOyBpKyssIGogKz0gNCkKKyAgICBvdXRwdXRbaV0gPSAoKFVJTlQ0KWlucHV0W2pdKSB8ICgoKFVJTlQ0KWlucHV0W2orMV0pIDw8IDgpIHwKKyAgICAgICgoKFVJTlQ0KWlucHV0W2orMl0pIDw8IDE2KSB8ICgoKFVJTlQ0KWlucHV0W2orM10pIDw8IDI0KTsKK30KKworI2VuZGlmIC8qIFVTRV9TU0xFQVkgKi8KKworI2VuZGlmIC8qIFVTRV9HTlVUTFMgKi8KKworI2VuZGlmIC8qIFVTRV9HTlVUTFNfTkVUVExFICovCisKK2NvbnN0IEhNQUNfcGFyYW1zIEN1cmxfSE1BQ19NRDVbXSA9IHsKKyAgeworICAgIChITUFDX2hpbml0X2Z1bmMpIE1ENV9Jbml0LCAgICAgICAgICAgLyogSGFzaCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gKi8KKyAgICAoSE1BQ19odXBkYXRlX2Z1bmMpIE1ENV9VcGRhdGUsICAgICAgIC8qIEhhc2ggdXBkYXRlIGZ1bmN0aW9uLiAqLworICAgIChITUFDX2hmaW5hbF9mdW5jKSBNRDVfRmluYWwsICAgICAgICAgLyogSGFzaCBjb21wdXRhdGlvbiBlbmQgZnVuY3Rpb24uICovCisgICAgc2l6ZW9mKE1ENV9DVFgpLCAgICAgICAgICAgICAgICAgICAgICAvKiBTaXplIG9mIGhhc2ggY29udGV4dCBzdHJ1Y3R1cmUuICovCisgICAgNjQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXhpbXVtIGtleSBsZW5ndGguICovCisgICAgMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN1bHQgc2l6ZS4gKi8KKyAgfQorfTsKKworCit2b2lkIEN1cmxfbWQ1aXQodW5zaWduZWQgY2hhciAqb3V0YnVmZmVyLCAvKiAxNiBieXRlcyAqLworICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucHV0KQoreworICBNRDVfQ1RYIGN0eDsKKyAgTUQ1X0luaXQoJmN0eCk7CisgIE1ENV9VcGRhdGUoJmN0eCwgaW5wdXQsIGN1cmx4X3V6dG91aShzdHJsZW4oKGNoYXIgKilpbnB1dCkpKTsKKyAgTUQ1X0ZpbmFsKG91dGJ1ZmZlciwgJmN0eCk7Cit9CisKKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9tZW1kZWJ1Zy5jIGIvY3VybC03LjI1LjAvbGliL21lbWRlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4MTYyMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9tZW1kZWJ1Zy5jCkBAIC0wLDAgKzEsNDUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBDVVJMREVCVUcKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRQorI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorI2luY2x1ZGUgInVybGRhdGEuaCIKKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjZGVmaW5lIE1FTURFQlVHX05PREVGSU5FUyAvKiBkb24ndCByZWRlZmluZSB0aGUgc3RhbmRhcmQgZnVuY3Rpb25zICovCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjaWZuZGVmIEhBVkVfQVNTRVJUX0gKKyMgIGRlZmluZSBhc3NlcnQoeCkgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKKy8qCisgKiBVbnRpbCAyMDExLTA4LTE3IGxpYmN1cmwncyBNZW1vcnkgVHJhY2tpbmcgZmVhdHVyZSBhbHNvIHBlcmZvcm1lZAorICogYXV0b21hdGljIG1hbGxvYyBhbmQgZnJlZSBmaWxsaW5nIG9wZXJhdGlvbnMgdXNpbmcgMHhBNSBhbmQgMHgxMworICogdmFsdWVzLiBPdXIgb3duIHByZWluaXRpYWxpemF0aW9uIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkKKyAqIG1pZ2h0IGJlIHVzZWZ1bCB3aGVuIG5vdCB1c2luZyB0aGlyZCBwYXJ0eSBtZW1vcnkgZGVidWdnZXJzLCBidXQKKyAqIG9uIHRoZSBvdGhlciBoYW5kIHRoaXMgd291bGQgZm9vbCBtZW1vcnkgZGVidWdnZXJzIGludG8gdGhpbmtpbmcKKyAqIHRoYXQgYWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCisgKgorICogQXMgYSBkZWZhdWx0IHNldHRpbmcsIGxpYmN1cmwncyBNZW1vcnkgVHJhY2tpbmcgZmVhdHVyZSBubyBsb25nZXIKKyAqIHBlcmZvcm1zIHByZWluaXRpYWxpemF0aW9uIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgb24gaXRzCisgKiBvd24uIElmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgYW5kIHJlYWxseSB3YW50IHRvIHJldGFpbiBvbGQKKyAqIGJlaGF2aW9yLCB5b3UgY2FuIGFjaGlldmUgdGhpcyBjb21waWxpbmcgd2l0aCBwcmVwcm9jZXNzb3Igc3ltYm9scworICogQ1VSTF9NVF9NQUxMT0NfRklMTCBhbmQgQ1VSTF9NVF9GUkVFX0ZJTEwgZGVmaW5lZCB3aXRoIGFwcHJvcHJpYXRlCisgKiB2YWx1ZXMuCisgKi8KKworI2lmZGVmIENVUkxfTVRfTUFMTE9DX0ZJTEwKKyMgaWYgKENVUkxfTVRfTUFMTE9DX0ZJTEwgPCAwKSB8fCAoQ1VSTF9NVF9NQUxMT0NfRklMTCA+IDB4ZmYpCisjICAgZXJyb3IgImludmFsaWQgQ1VSTF9NVF9NQUxMT0NfRklMTCBvciBvdXQgb2YgcmFuZ2UiCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENVUkxfTVRfRlJFRV9GSUxMCisjIGlmIChDVVJMX01UX0ZSRUVfRklMTCA8IDApIHx8IChDVVJMX01UX0ZSRUVfRklMTCA+IDB4ZmYpCisjICAgZXJyb3IgImludmFsaWQgQ1VSTF9NVF9GUkVFX0ZJTEwgb3Igb3V0IG9mIHJhbmdlIgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENVUkxfTVRfTUFMTE9DX0ZJTEwpICYmIGRlZmluZWQoQ1VSTF9NVF9GUkVFX0ZJTEwpCisjIGlmIChDVVJMX01UX01BTExPQ19GSUxMID09IENVUkxfTVRfRlJFRV9GSUxMKQorIyAgIGVycm9yICJDVVJMX01UX01BTExPQ19GSUxMIHNhbWUgYXMgQ1VSTF9NVF9GUkVFX0ZJTEwiCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENVUkxfTVRfTUFMTE9DX0ZJTEwKKyMgIGRlZmluZSBtdF9tYWxsb2NfZmlsbChidWYsbGVuKSBtZW1zZXQoKGJ1ZiksIENVUkxfTVRfTUFMTE9DX0ZJTEwsIChsZW4pKQorI2Vsc2UKKyMgIGRlZmluZSBtdF9tYWxsb2NfZmlsbChidWYsbGVuKSBDdXJsX25vcF9zdG10CisjZW5kaWYKKworI2lmZGVmIENVUkxfTVRfRlJFRV9GSUxMCisjICBkZWZpbmUgbXRfZnJlZV9maWxsKGJ1ZixsZW4pIG1lbXNldCgoYnVmKSwgQ1VSTF9NVF9GUkVFX0ZJTEwsIChsZW4pKQorI2Vsc2UKKyMgIGRlZmluZSBtdF9mcmVlX2ZpbGwoYnVmLGxlbikgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKK3N0cnVjdCBtZW1kZWJ1ZyB7CisgIHNpemVfdCBzaXplOworICB1bmlvbiB7CisgICAgY3VybF9vZmZfdCBvOworICAgIGRvdWJsZSBkOworICAgIHZvaWQgKiBwOworICB9IG1lbVsxXTsKKyAgLyogSSdtIGhvcGluZyB0aGlzIGlzIHRoZSB0aGluZyB3aXRoIHRoZSBzdHJpY3Rlc3QgYWxpZ25tZW50CisgICAqIHJlcXVpcmVtZW50cy4gIFRoYXQgYWxzbyBtZWFucyB3ZSB3YXN0ZSBzb21lIHNwYWNlIDotKCAqLworfTsKKworLyoKKyAqIE5vdGUgdGhhdCB0aGVzZSBkZWJ1ZyBmdW5jdGlvbnMgYXJlIHZlcnkgc2ltcGxlIGFuZCB0aGV5IGFyZSBtZWFudCB0bworICogcmVtYWluIHNvLiBGb3IgYWR2YW5jZWQgYW5hbHlzaXMsIHJlY29yZCBhIGxvZyBmaWxlIGFuZCB3cml0ZSBwZXJsIHNjcmlwdHMKKyAqIHRvIGFuYWx5emUgdGhlbSEKKyAqCisgKiBEb24ndCB1c2UgdGhlc2Ugd2l0aCBtdWx0aXRocmVhZGVkIHRlc3QgcHJvZ3JhbXMhCisgKi8KKworI2RlZmluZSBsb2dmaWxlIGN1cmxfZGVidWdsb2dmaWxlCitGSUxFICpjdXJsX2RlYnVnbG9nZmlsZSA9IE5VTEw7CitzdGF0aWMgYm9vbCBtZW1saW1pdCA9IEZBTFNFOyAvKiBlbmFibGUgbWVtb3J5IGxpbWl0ICovCitzdGF0aWMgbG9uZyBtZW1zaXplID0gMDsgIC8qIHNldCBudW1iZXIgb2YgbWFsbG9jcyBhbGxvd2VkICovCisKKy8qIHRoaXMgc2V0cyB0aGUgbG9nIGZpbGUgbmFtZSAqLwordm9pZCBjdXJsX21lbWRlYnVnKGNvbnN0IGNoYXIgKmxvZ25hbWUpCit7CisgIGlmKCFsb2dmaWxlKSB7CisgICAgaWYobG9nbmFtZSAmJiAqbG9nbmFtZSkKKyAgICAgIGxvZ2ZpbGUgPSBmb3Blbihsb2duYW1lLCAidyIpOworICAgIGVsc2UKKyAgICAgIGxvZ2ZpbGUgPSBzdGRlcnI7CisjaWZkZWYgTUVNREVCVUdfTE9HX1NZTkMKKyAgICAvKiBGbHVzaCB0aGUgbG9nIGZpbGUgYWZ0ZXIgZXZlcnkgbGluZSBzbyB0aGUgbG9nIGlzbid0IGxvc3QgaW4gYSBjcmFzaCAqLworICAgIHNldHZidWYobG9nZmlsZSwgKGNoYXIgKilOVUxMLCBfSU9MQkYsIDApOworI2VuZGlmCisgIH0KK30KKworLyogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgbWFsbG9jKCkgY2FsbHMgdGhhdCBzaG91bGQgcmV0dXJuCisgICBzdWNjZXNzZnVsbHkhICovCit2b2lkIGN1cmxfbWVtbGltaXQobG9uZyBsaW1pdCkKK3sKKyAgaWYoIW1lbWxpbWl0KSB7CisgICAgbWVtbGltaXQgPSBUUlVFOworICAgIG1lbXNpemUgPSBsaW1pdDsKKyAgfQorfQorCisvKiByZXR1cm5zIFRSVUUgaWYgdGhpcyBpc24ndCBhbGxvd2VkISAqLworc3RhdGljIGJvb2wgY291bnRjaGVjayhjb25zdCBjaGFyICpmdW5jLCBpbnQgbGluZSwgY29uc3QgY2hhciAqc291cmNlKQoreworICAvKiBpZiBzb3VyY2UgaXMgTlVMTCwgdGhlbiB0aGUgY2FsbCBpcyBtYWRlIGludGVybmFsbHkgYW5kIHRoaXMgY2hlY2sKKyAgICAgc2hvdWxkIG5vdCBiZSBtYWRlICovCisgIGlmKG1lbWxpbWl0ICYmIHNvdXJjZSkgeworICAgIGlmKCFtZW1zaXplKSB7CisgICAgICBpZihzb3VyY2UpIHsKKyAgICAgICAgLyogbG9nIHRvIGZpbGUgKi8KKyAgICAgICAgY3VybF9tZW1sb2coIkxJTUlUICVzOiVkICVzIHJlYWNoZWQgbWVtbGltaXRcbiIsCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgbGluZSwgZnVuYyk7CisgICAgICAgIC8qIGxvZyB0byBzdGRlcnIgYWxzbyAqLworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxJTUlUICVzOiVkICVzIHJlYWNoZWQgbWVtbGltaXRcbiIsCisgICAgICAgICAgICAgICAgc291cmNlLCBsaW5lLCBmdW5jKTsKKyAgICAgIH0KKyAgICAgIFNFVF9FUlJOTyhFTk9NRU0pOworICAgICAgcmV0dXJuIFRSVUU7IC8qIFJFVFVSTiBFUlJPUiEgKi8KKyAgICB9CisgICAgZWxzZQorICAgICAgbWVtc2l6ZS0tOyAvKiBjb3VudGRvd24gKi8KKworICAgIC8qIGxvZyB0aGUgY291bnRkb3duICovCisgICAgaWYoc291cmNlKQorICAgICAgY3VybF9tZW1sb2coIkxJTUlUICVzOiVkICVsZCBBTExPQ1MgbGVmdFxuIiwKKyAgICAgICAgICAgICAgICAgIHNvdXJjZSwgbGluZSwgbWVtc2l6ZSk7CisKKyAgfQorCisgIHJldHVybiBGQUxTRTsgLyogYWxsb3cgdGhpcyAqLworfQorCit2b2lkICpjdXJsX2RvbWFsbG9jKHNpemVfdCB3YW50ZWRzaXplLCBpbnQgbGluZSwgY29uc3QgY2hhciAqc291cmNlKQoreworICBzdHJ1Y3QgbWVtZGVidWcgKm1lbTsKKyAgc2l6ZV90IHNpemU7CisKKyAgYXNzZXJ0KHdhbnRlZHNpemUgIT0gMCk7CisKKyAgaWYoY291bnRjaGVjaygibWFsbG9jIiwgbGluZSwgc291cmNlKSkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBhbGxvYyBhdCBsZWFzdCA2NCBieXRlcyAqLworICBzaXplID0gc2l6ZW9mKHN0cnVjdCBtZW1kZWJ1Zykrd2FudGVkc2l6ZTsKKworICBtZW0gPSAoQ3VybF9jbWFsbG9jKShzaXplKTsKKyAgaWYobWVtKSB7CisgICAgLyogZmlsbCBtZW1vcnkgd2l0aCBqdW5rICovCisgICAgbXRfbWFsbG9jX2ZpbGwobWVtLT5tZW0sIHdhbnRlZHNpemUpOworICAgIG1lbS0+c2l6ZSA9IHdhbnRlZHNpemU7CisgIH0KKworICBpZihzb3VyY2UpCisgICAgY3VybF9tZW1sb2coIk1FTSAlczolZCBtYWxsb2MoJXpkKSA9ICVwXG4iLAorICAgICAgICAgICAgICAgIHNvdXJjZSwgbGluZSwgd2FudGVkc2l6ZSwgbWVtID8gbWVtLT5tZW0gOiAwKTsKKyAgcmV0dXJuIChtZW0gPyBtZW0tPm1lbSA6IE5VTEwpOworfQorCit2b2lkICpjdXJsX2RvY2FsbG9jKHNpemVfdCB3YW50ZWRfZWxlbWVudHMsIHNpemVfdCB3YW50ZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnNvdXJjZSkKK3sKKyAgc3RydWN0IG1lbWRlYnVnICptZW07CisgIHNpemVfdCBzaXplLCB1c2VyX3NpemU7CisKKyAgYXNzZXJ0KHdhbnRlZF9lbGVtZW50cyAhPSAwKTsKKyAgYXNzZXJ0KHdhbnRlZF9zaXplICE9IDApOworCisgIGlmKGNvdW50Y2hlY2soImNhbGxvYyIsIGxpbmUsIHNvdXJjZSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogYWxsb2MgYXQgbGVhc3QgNjQgYnl0ZXMgKi8KKyAgdXNlcl9zaXplID0gd2FudGVkX3NpemUgKiB3YW50ZWRfZWxlbWVudHM7CisgIHNpemUgPSBzaXplb2Yoc3RydWN0IG1lbWRlYnVnKSArIHVzZXJfc2l6ZTsKKworICBtZW0gPSAoQ3VybF9jY2FsbG9jKSgxLCBzaXplKTsKKyAgaWYobWVtKQorICAgIG1lbS0+c2l6ZSA9IHVzZXJfc2l6ZTsKKworICBpZihzb3VyY2UpCisgICAgY3VybF9tZW1sb2coIk1FTSAlczolZCBjYWxsb2MoJXp1LCV6dSkgPSAlcFxuIiwKKyAgICAgICAgICAgICAgICBzb3VyY2UsIGxpbmUsIHdhbnRlZF9lbGVtZW50cywgd2FudGVkX3NpemUsIG1lbT9tZW0tPm1lbTowKTsKKyAgcmV0dXJuIChtZW0gPyBtZW0tPm1lbSA6IE5VTEwpOworfQorCitjaGFyICpjdXJsX2Rvc3RyZHVwKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnNvdXJjZSkKK3sKKyAgY2hhciAqbWVtOworICBzaXplX3QgbGVuOworCisgIGFzc2VydChzdHIgIT0gTlVMTCk7CisKKyAgaWYoY291bnRjaGVjaygic3RyZHVwIiwgbGluZSwgc291cmNlKSkKKyAgICByZXR1cm4gTlVMTDsKKworICBsZW49c3RybGVuKHN0cikrMTsKKworICBtZW09Y3VybF9kb21hbGxvYyhsZW4sIDAsIE5VTEwpOyAvKiBOVUxMIHByZXZlbnRzIGxvZ2dpbmcgKi8KKyAgaWYobWVtKQorICAgIG1lbWNweShtZW0sIHN0ciwgbGVuKTsKKworICBpZihzb3VyY2UpCisgICAgY3VybF9tZW1sb2coIk1FTSAlczolZCBzdHJkdXAoJXApICglenUpID0gJXBcbiIsCisgICAgICAgICAgICAgICAgc291cmNlLCBsaW5lLCBzdHIsIGxlbiwgbWVtKTsKKworICByZXR1cm4gbWVtOworfQorCisvKiBXZSBwcm92aWRlIGEgcmVhbGxvYygpIHRoYXQgYWNjZXB0cyBhIE5VTEwgYXMgcG9pbnRlciwgd2hpY2ggdGhlbgorICAgcGVyZm9ybXMgYSBtYWxsb2MoKS4gSW4gb3JkZXIgdG8gd29yayB3aXRoIGFyZXMuICovCit2b2lkICpjdXJsX2RvcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCB3YW50ZWRzaXplLAorICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnNvdXJjZSkKK3sKKyAgc3RydWN0IG1lbWRlYnVnICptZW09TlVMTDsKKworICBzaXplX3Qgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbWVtZGVidWcpK3dhbnRlZHNpemU7CisKKyAgYXNzZXJ0KHdhbnRlZHNpemUgIT0gMCk7CisKKyAgaWYoY291bnRjaGVjaygicmVhbGxvYyIsIGxpbmUsIHNvdXJjZSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjICBwcmFnbWEgd2FybmluZyhwdXNoKQorIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZToxNjg0KQorICAgLyogMTY4NDogY29udmVyc2lvbiBmcm9tIHBvaW50ZXIgdG8gc2FtZS1zaXplZCBpbnRlZ3JhbCB0eXBlICovCisjZW5kaWYKKworICBpZihwdHIpCisgICAgbWVtID0gKHZvaWQgKikoKGNoYXIgKilwdHIgLSBvZmZzZXRvZihzdHJ1Y3QgbWVtZGVidWcsIG1lbSkpOworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisKKyAgbWVtID0gKEN1cmxfY3JlYWxsb2MpKG1lbSwgc2l6ZSk7CisgIGlmKHNvdXJjZSkKKyAgICBjdXJsX21lbWxvZygiTUVNICVzOiVkIHJlYWxsb2MoJXAsICV6dSkgPSAlcFxuIiwKKyAgICAgICAgICAgICAgICBzb3VyY2UsIGxpbmUsIHB0ciwgd2FudGVkc2l6ZSwgbWVtP21lbS0+bWVtOk5VTEwpOworCisgIGlmKG1lbSkgeworICAgIG1lbS0+c2l6ZSA9IHdhbnRlZHNpemU7CisgICAgcmV0dXJuIG1lbS0+bWVtOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgY3VybF9kb2ZyZWUodm9pZCAqcHRyLCBpbnQgbGluZSwgY29uc3QgY2hhciAqc291cmNlKQoreworICBzdHJ1Y3QgbWVtZGVidWcgKm1lbTsKKworICBhc3NlcnQocHRyICE9IE5VTEwpOworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocHVzaCkKKyMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6MTY4NCkKKyAgIC8qIDE2ODQ6IGNvbnZlcnNpb24gZnJvbSBwb2ludGVyIHRvIHNhbWUtc2l6ZWQgaW50ZWdyYWwgdHlwZSAqLworI2VuZGlmCisKKyAgbWVtID0gKHZvaWQgKikoKGNoYXIgKilwdHIgLSBvZmZzZXRvZihzdHJ1Y3QgbWVtZGVidWcsIG1lbSkpOworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisKKyAgLyogZGVzdHJveSAqLworICBtdF9mcmVlX2ZpbGwobWVtLT5tZW0sIG1lbS0+c2l6ZSk7CisKKyAgLyogZnJlZSBmb3IgcmVhbCAqLworICAoQ3VybF9jZnJlZSkobWVtKTsKKworICBpZihzb3VyY2UpCisgICAgY3VybF9tZW1sb2coIk1FTSAlczolZCBmcmVlKCVwKVxuIiwgc291cmNlLCBsaW5lLCBwdHIpOworfQorCitjdXJsX3NvY2tldF90IGN1cmxfc29ja2V0KGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICpzb3VyY2UpCit7CisgIGNvbnN0IGNoYXIgKmZtdCA9IChzaXplb2YoY3VybF9zb2NrZXRfdCkgPT0gc2l6ZW9mKGludCkpID8KKyAgICAgICAgICAgICAgICAgICAgIkZEICVzOiVkIHNvY2tldCgpID0gJWRcbiIgOgorICAgICAgICAgICAgICAgICAgICAoc2l6ZW9mKGN1cmxfc29ja2V0X3QpID09IHNpemVvZihsb25nKSkgPworICAgICAgICAgICAgICAgICAgICAiRkQgJXM6JWQgc29ja2V0KCkgPSAlbGRcbiIgOgorICAgICAgICAgICAgICAgICAgICAiRkQgJXM6JWQgc29ja2V0KCkgPSAlemRcbiIgOworCisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gc29ja2V0KGRvbWFpbiwgdHlwZSwgcHJvdG9jb2wpOworICBpZihzb3VyY2UgJiYgKHNvY2tmZCAhPSBDVVJMX1NPQ0tFVF9CQUQpKQorICAgIGN1cmxfbWVtbG9nKGZtdCwgc291cmNlLCBsaW5lLCBzb2NrZmQpOworICByZXR1cm4gc29ja2ZkOworfQorCisjaWZkZWYgSEFWRV9TT0NLRVRQQUlSCitpbnQgY3VybF9zb2NrZXRwYWlyKGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2V0X3ZlY3RvclsyXSwKKyAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnNvdXJjZSkKK3sKKyAgY29uc3QgY2hhciAqZm10ID0gKHNpemVvZihjdXJsX3NvY2tldF90KSA9PSBzaXplb2YoaW50KSkgPworICAgICAgICAgICAgICAgICAgICAiRkQgJXM6JWQgc29ja2V0cGFpcigpID0gJWQgJWRcbiIgOgorICAgICAgICAgICAgICAgICAgICAoc2l6ZW9mKGN1cmxfc29ja2V0X3QpID09IHNpemVvZihsb25nKSkgPworICAgICAgICAgICAgICAgICAgICAiRkQgJXM6JWQgc29ja2V0cGFpcigpID0gJWxkICVsZFxuIiA6CisgICAgICAgICAgICAgICAgICAgICJGRCAlczolZCBzb2NrZXRwYWlyKCkgPSAlemQgJXpkXG4iIDsKKworICBpbnQgcmVzID0gc29ja2V0cGFpcihkb21haW4sIHR5cGUsIHByb3RvY29sLCBzb2NrZXRfdmVjdG9yKTsKKyAgaWYoc291cmNlICYmICgwID09IHJlcykpCisgICAgY3VybF9tZW1sb2coZm10LCBzb3VyY2UsIGxpbmUsIHNvY2tldF92ZWN0b3JbMF0sIHNvY2tldF92ZWN0b3JbMV0pOworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKK2N1cmxfc29ja2V0X3QgY3VybF9hY2NlcHQoY3VybF9zb2NrZXRfdCBzLCB2b2lkICpzYWRkciwgdm9pZCAqc2FkZHJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICpzb3VyY2UpCit7CisgIGNvbnN0IGNoYXIgKmZtdCA9IChzaXplb2YoY3VybF9zb2NrZXRfdCkgPT0gc2l6ZW9mKGludCkpID8KKyAgICAgICAgICAgICAgICAgICAgIkZEICVzOiVkIGFjY2VwdCgpID0gJWRcbiIgOgorICAgICAgICAgICAgICAgICAgICAoc2l6ZW9mKGN1cmxfc29ja2V0X3QpID09IHNpemVvZihsb25nKSkgPworICAgICAgICAgICAgICAgICAgICAiRkQgJXM6JWQgYWNjZXB0KCkgPSAlbGRcbiIgOgorICAgICAgICAgICAgICAgICAgICAiRkQgJXM6JWQgYWNjZXB0KCkgPSAlemRcbiIgOworCisgIHN0cnVjdCBzb2NrYWRkciAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKilzYWRkcjsKKyAgY3VybF9zb2NrbGVuX3QgKmFkZHJsZW4gPSAoY3VybF9zb2NrbGVuX3QgKilzYWRkcmxlbjsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBhY2NlcHQocywgYWRkciwgYWRkcmxlbik7CisgIGlmKHNvdXJjZSAmJiAoc29ja2ZkICE9IENVUkxfU09DS0VUX0JBRCkpCisgICAgY3VybF9tZW1sb2coZm10LCBzb3VyY2UsIGxpbmUsIHNvY2tmZCk7CisgIHJldHVybiBzb2NrZmQ7Cit9CisKKy8qIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGFsbG93IGxpYmN1cmwgdG8gbWFyayBhICJmYWtlZCIgY2xvc2UgKi8KK3ZvaWQgY3VybF9tYXJrX3NjbG9zZShjdXJsX3NvY2tldF90IHNvY2tmZCwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnNvdXJjZSkKK3sKKyAgY29uc3QgY2hhciAqZm10ID0gKHNpemVvZihjdXJsX3NvY2tldF90KSA9PSBzaXplb2YoaW50KSkgPworICAgICAgICAgICAgICAgICAgICAiRkQgJXM6JWQgc2Nsb3NlKCVkKVxuIiA6CisgICAgICAgICAgICAgICAgICAgIChzaXplb2YoY3VybF9zb2NrZXRfdCkgPT0gc2l6ZW9mKGxvbmcpKSA/CisgICAgICAgICAgICAgICAgICAgICJGRCAlczolZCBzY2xvc2UoJWxkKVxuIiA6CisgICAgICAgICAgICAgICAgICAgICJGRCAlczolZCBzY2xvc2UoJXpkKVxuIiA7CisKKyAgaWYoc291cmNlKQorICAgIGN1cmxfbWVtbG9nKGZtdCwgc291cmNlLCBsaW5lLCBzb2NrZmQpOworfQorCisvKiB0aGlzIGlzIG91ciBvd24gZGVmaW5lZCB3YXkgdG8gY2xvc2Ugc29ja2V0cyBvbiAqQUxMKiBwbGF0Zm9ybXMgKi8KK2ludCBjdXJsX3NjbG9zZShjdXJsX3NvY2tldF90IHNvY2tmZCwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnNvdXJjZSkKK3sKKyAgaW50IHJlcz1zY2xvc2Uoc29ja2ZkKTsKKyAgY3VybF9tYXJrX3NjbG9zZShzb2NrZmQsIGxpbmUsIHNvdXJjZSk7CisgIHJldHVybiByZXM7Cit9CisKK0ZJTEUgKmN1cmxfZm9wZW4oY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqbW9kZSwKKyAgICAgICAgICAgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnNvdXJjZSkKK3sKKyAgRklMRSAqcmVzPWZvcGVuKGZpbGUsIG1vZGUpOworICBpZihzb3VyY2UpCisgICAgY3VybF9tZW1sb2coIkZJTEUgJXM6JWQgZm9wZW4oXCIlc1wiLFwiJXNcIikgPSAlcFxuIiwKKyAgICAgICAgICAgICAgICBzb3VyY2UsIGxpbmUsIGZpbGUsIG1vZGUsIHJlcyk7CisgIHJldHVybiByZXM7Cit9CisKKyNpZmRlZiBIQVZFX0ZET1BFTgorRklMRSAqY3VybF9mZG9wZW4oaW50IGZpbGVkZXMsIGNvbnN0IGNoYXIgKm1vZGUsCisgICAgICAgICAgICAgICAgICBpbnQgbGluZSwgY29uc3QgY2hhciAqc291cmNlKQoreworICBGSUxFICpyZXM9ZmRvcGVuKGZpbGVkZXMsIG1vZGUpOworICBpZihzb3VyY2UpCisgICAgY3VybF9tZW1sb2coIkZJTEUgJXM6JWQgZmRvcGVuKFwiJWRcIixcIiVzXCIpID0gJXBcbiIsCisgICAgICAgICAgICAgICAgc291cmNlLCBsaW5lLCBmaWxlZGVzLCBtb2RlLCByZXMpOworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKK2ludCBjdXJsX2ZjbG9zZShGSUxFICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqc291cmNlKQoreworICBpbnQgcmVzOworCisgIGFzc2VydChmaWxlICE9IE5VTEwpOworCisgIHJlcz1mY2xvc2UoZmlsZSk7CisgIGlmKHNvdXJjZSkKKyAgICBjdXJsX21lbWxvZygiRklMRSAlczolZCBmY2xvc2UoJXApXG4iLAorICAgICAgICAgICAgICAgIHNvdXJjZSwgbGluZSwgZmlsZSk7CisgIHJldHVybiByZXM7Cit9CisKKyNkZWZpbmUgTE9HTElORV9CVUZTSVpFICAxMDI0CisKKy8qIHRoaXMgZG9lcyB0aGUgd3JpdHRpbmcgdG8gdGhlIG1lbW9yeSB0cmFja2luZyBsb2cgZmlsZSAqLwordm9pZCBjdXJsX21lbWxvZyhjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgY2hhciAqYnVmOworICBpbnQgbmNoYXJzOworICB2YV9saXN0IGFwOworCisgIGlmKCFsb2dmaWxlKQorICAgIHJldHVybjsKKworICBidWYgPSAoQ3VybF9jbWFsbG9jKShMT0dMSU5FX0JVRlNJWkUpOworICBpZighYnVmKQorICAgIHJldHVybjsKKworICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKyAgbmNoYXJzID0gdnNucHJpbnRmKGJ1ZiwgTE9HTElORV9CVUZTSVpFLCBmb3JtYXQsIGFwKTsKKyAgdmFfZW5kKGFwKTsKKworICBpZihuY2hhcnMgPiBMT0dMSU5FX0JVRlNJWkUgLSAxKQorICAgIG5jaGFycyA9IExPR0xJTkVfQlVGU0laRSAtIDE7CisKKyAgaWYobmNoYXJzID4gMCkKKyAgICBmd3JpdGUoYnVmLCAxLCBuY2hhcnMsIGxvZ2ZpbGUpOworCisgIChDdXJsX2NmcmVlKShidWYpOworfQorCisjZW5kaWYgLyogQ1VSTERFQlVHICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvbWVtZGVidWcuaCBiL2N1cmwtNy4yNS4wL2xpYi9tZW1kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMDI2NDUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvbWVtZGVidWcuaApAQCAtMCwwICsxLDE2MSBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9NRU1ERUJVR19ICisjZGVmaW5lIEhFQURFUl9DVVJMX01FTURFQlVHX0gKKyNpZmRlZiBDVVJMREVCVUcKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ0FVVElPTjogdGhpcyBoZWFkZXIgaXMgZGVzaWduZWQgdG8gd29yayB3aGVuIGluY2x1ZGVkIGJ5IHRoZSBhcHAtc2lkZQorICogYXMgd2VsbCBhcyB0aGUgbGlicmFyeS4gRG8gbm90IG1peCB3aXRoIGxpYnJhcnkgaW50ZXJuYWxzIQorICovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCisjZGVmaW5lIENVUkxfTVRfTE9HRk5BTUVfQlVGU0laRSA1MTIKKworI2RlZmluZSBsb2dmaWxlIGN1cmxfZGVidWdsb2dmaWxlCisKK2V4dGVybiBGSUxFICpsb2dmaWxlOworCisvKiBtZW1vcnkgZnVuY3Rpb25zICovCitDVVJMX0VYVEVSTiB2b2lkICpjdXJsX2RvbWFsbG9jKHNpemVfdCBzaXplLCBpbnQgbGluZSwgY29uc3QgY2hhciAqc291cmNlKTsKK0NVUkxfRVhURVJOIHZvaWQgKmN1cmxfZG9jYWxsb2Moc2l6ZV90IGVsZW1lbnRzLCBzaXplX3Qgc2l6ZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSk7CitDVVJMX0VYVEVSTiB2b2lkICpjdXJsX2RvcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSk7CitDVVJMX0VYVEVSTiB2b2lkIGN1cmxfZG9mcmVlKHZvaWQgKnB0ciwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnNvdXJjZSk7CitDVVJMX0VYVEVSTiBjaGFyICpjdXJsX2Rvc3RyZHVwKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnNvdXJjZSk7CitDVVJMX0VYVEVSTiB2b2lkIGN1cmxfbWVtZGVidWcoY29uc3QgY2hhciAqbG9nbmFtZSk7CitDVVJMX0VYVEVSTiB2b2lkIGN1cmxfbWVtbGltaXQobG9uZyBsaW1pdCk7CitDVVJMX0VYVEVSTiB2b2lkIGN1cmxfbWVtbG9nKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKworLyogZmlsZSBkZXNjcmlwdG9yIG1hbmlwdWxhdG9ycyAqLworQ1VSTF9FWFRFUk4gY3VybF9zb2NrZXRfdCBjdXJsX3NvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSAsIGNvbnN0IGNoYXIgKnNvdXJjZSk7CitDVVJMX0VYVEVSTiB2b2lkIGN1cmxfbWFya19zY2xvc2UoY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUgLCBjb25zdCBjaGFyICpzb3VyY2UpOworQ1VSTF9FWFRFUk4gaW50IGN1cmxfc2Nsb3NlKGN1cmxfc29ja2V0X3Qgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lICwgY29uc3QgY2hhciAqc291cmNlKTsKK0NVUkxfRVhURVJOIGN1cmxfc29ja2V0X3QgY3VybF9hY2NlcHQoY3VybF9zb2NrZXRfdCBzLCB2b2lkICphLCB2b2lkICphbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSwgY29uc3QgY2hhciAqc291cmNlKTsKKyNpZmRlZiBIQVZFX1NPQ0tFVFBBSVIKK0NVUkxfRVhURVJOIGludCBjdXJsX3NvY2tldHBhaXIoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZXRfdmVjdG9yWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSAsIGNvbnN0IGNoYXIgKnNvdXJjZSk7CisjZW5kaWYKKworLyogRklMRSBmdW5jdGlvbnMgKi8KK0NVUkxfRVhURVJOIEZJTEUgKmN1cmxfZm9wZW4oY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqbW9kZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSk7CisjaWZkZWYgSEFWRV9GRE9QRU4KK0NVUkxfRVhURVJOIEZJTEUgKmN1cmxfZmRvcGVuKGludCBmaWxlZGVzLCBjb25zdCBjaGFyICptb2RlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSk7CisjZW5kaWYKK0NVUkxfRVhURVJOIGludCBjdXJsX2ZjbG9zZShGSUxFICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqc291cmNlKTsKKworI2lmbmRlZiBNRU1ERUJVR19OT0RFRklORVMKKworLyogU2V0IHRoaXMgc3ltYm9sIG9uIHRoZSBjb21tYW5kLWxpbmUsIHJlY29tcGlsZSBhbGwgbGliLXNvdXJjZXMgKi8KKyN1bmRlZiBzdHJkdXAKKyNkZWZpbmUgc3RyZHVwKHB0cikgY3VybF9kb3N0cmR1cChwdHIsIF9fTElORV9fLCBfX0ZJTEVfXykKKyNkZWZpbmUgbWFsbG9jKHNpemUpIGN1cmxfZG9tYWxsb2Moc2l6ZSwgX19MSU5FX18sIF9fRklMRV9fKQorI2RlZmluZSBjYWxsb2MobmJlbGVtLHNpemUpIGN1cmxfZG9jYWxsb2MobmJlbGVtLCBzaXplLCBfX0xJTkVfXywgX19GSUxFX18pCisjZGVmaW5lIHJlYWxsb2MocHRyLHNpemUpIGN1cmxfZG9yZWFsbG9jKHB0ciwgc2l6ZSwgX19MSU5FX18sIF9fRklMRV9fKQorI2RlZmluZSBmcmVlKHB0cikgY3VybF9kb2ZyZWUocHRyLCBfX0xJTkVfXywgX19GSUxFX18pCisKKyNkZWZpbmUgc29ja2V0KGRvbWFpbix0eXBlLHByb3RvY29sKVwKKyBjdXJsX3NvY2tldChkb21haW4sdHlwZSxwcm90b2NvbCxfX0xJTkVfXyxfX0ZJTEVfXykKKyN1bmRlZiBhY2NlcHQgLyogZm9yIHRob3NlIHdpdGggYWNjZXB0IGFzIGEgbWFjcm8gKi8KKyNkZWZpbmUgYWNjZXB0KHNvY2ssYWRkcixsZW4pXAorIGN1cmxfYWNjZXB0KHNvY2ssYWRkcixsZW4sX19MSU5FX18sX19GSUxFX18pCisjaWZkZWYgSEFWRV9TT0NLRVRQQUlSCisjZGVmaW5lIHNvY2tldHBhaXIoZG9tYWluLHR5cGUscHJvdG9jb2wsc29ja2V0X3ZlY3RvcilcCisgY3VybF9zb2NrZXRwYWlyKGRvbWFpbix0eXBlLHByb3RvY29sLHNvY2tldF92ZWN0b3IsX19MSU5FX18sX19GSUxFX18pCisjZW5kaWYKKworI2lmZGVmIEhBVkVfR0VUQUREUklORk8KKyNpZiBkZWZpbmVkKGdldGFkZHJpbmZvKSAmJiBkZWZpbmVkKF9fb3NmX18pCisvKiBPU0YvMSBhbmQgVHJ1NjQgaGF2ZSBnZXRhZGRyaW5mbyBhcyBhIGRlZmluZSBhbHJlYWR5LCBzbyB3ZSBjYW5ub3QgZGVmaW5lCisgICBvdXIgbWFjcm8gYXMgZm9yIG90aGVyIHBsYXRmb3Jtcy4gSW5zdGVhZCwgd2UgcmVkZWZpbmUgdGhlIG5ldyBuYW1lIHRoZXkKKyAgIGRlZmluZSBnZXRhZGRyaW5mbyB0byBiZWNvbWUhICovCisjZGVmaW5lIG9nZXRhZGRyaW5mbyhob3N0LHNlcnYsaGludCxyZXMpIFwKKyAgY3VybF9kb2dldGFkZHJpbmZvKGhvc3Qsc2VydixoaW50LHJlcyxfX0xJTkVfXyxfX0ZJTEVfXykKKyNlbHNlCisjdW5kZWYgZ2V0YWRkcmluZm8KKyNkZWZpbmUgZ2V0YWRkcmluZm8oaG9zdCxzZXJ2LGhpbnQscmVzKSBcCisgIGN1cmxfZG9nZXRhZGRyaW5mbyhob3N0LHNlcnYsaGludCxyZXMsX19MSU5FX18sX19GSUxFX18pCisjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX0dFVEFERFJJTkZPICovCisKKyNpZmRlZiBIQVZFX0dFVE5BTUVJTkZPCisjdW5kZWYgZ2V0bmFtZWluZm8KKyNkZWZpbmUgZ2V0bmFtZWluZm8oc2Esc2FsZW4saG9zdCxob3N0bGVuLHNlcnYsc2VydmxlbixmbGFncykgXAorICBjdXJsX2RvZ2V0bmFtZWluZm8oc2Esc2FsZW4saG9zdCxob3N0bGVuLHNlcnYsc2VydmxlbixmbGFncywgX19MSU5FX18sIFwKKyAgX19GSUxFX18pCisjZW5kaWYgLyogSEFWRV9HRVROQU1FSU5GTyAqLworCisjaWZkZWYgSEFWRV9GUkVFQUREUklORk8KKyN1bmRlZiBmcmVlYWRkcmluZm8KKyNkZWZpbmUgZnJlZWFkZHJpbmZvKGRhdGEpIFwKKyAgY3VybF9kb2ZyZWVhZGRyaW5mbyhkYXRhLF9fTElORV9fLF9fRklMRV9fKQorI2VuZGlmIC8qIEhBVkVfRlJFRUFERFJJTkZPICovCisKKy8qIHNjbG9zZSBpcyBwcm9iYWJseSBhbHJlYWR5IGRlZmluZWQsIHJlZGVmaW5lIGl0ISAqLworI3VuZGVmIHNjbG9zZQorI2RlZmluZSBzY2xvc2Uoc29ja2ZkKSBjdXJsX3NjbG9zZShzb2NrZmQsX19MSU5FX18sX19GSUxFX18pCisKKyNkZWZpbmUgZmFrZV9zY2xvc2Uoc29ja2ZkKSBjdXJsX21hcmtfc2Nsb3NlKHNvY2tmZCxfX0xJTkVfXyxfX0ZJTEVfXykKKworI3VuZGVmIGZvcGVuCisjZGVmaW5lIGZvcGVuKGZpbGUsbW9kZSkgY3VybF9mb3BlbihmaWxlLG1vZGUsX19MSU5FX18sX19GSUxFX18pCisjdW5kZWYgZmRvcGVuCisjZGVmaW5lIGZkb3BlbihmaWxlLG1vZGUpIGN1cmxfZmRvcGVuKGZpbGUsbW9kZSxfX0xJTkVfXyxfX0ZJTEVfXykKKyNkZWZpbmUgZmNsb3NlKGZpbGUpIGN1cmxfZmNsb3NlKGZpbGUsX19MSU5FX18sX19GSUxFX18pCisKKyNlbmRpZiAvKiBNRU1ERUJVR19OT0RFRklORVMgKi8KKworI2VuZGlmIC8qIENVUkxERUJVRyAqLworCisvKgorKiogRm9sbG93aW5nIHNlY3Rpb24gYXBwbGllcyBldmVuIHdoZW4gQ1VSTERFQlVHIGlzIG5vdCBkZWZpbmVkLgorKi8KKworI2lmbmRlZiBmYWtlX3NjbG9zZQorI2RlZmluZSBmYWtlX3NjbG9zZSh4KSAgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKKy8qCisgKiBDdXJsX3NhZmVmcmVlIGRlZmluZWQgYXMgYSBtYWNybyB0byBhbGxvdyBNZW1vcnlUcmFja2luZyBmZWF0dXJlCisgKiB0byBsb2cgZnJlZSgpIGNhbGxzIGF0IHNhbWUgbG9jYXRpb24gd2hlcmUgQ3VybF9zYWZlZnJlZSBpcyB1c2VkLgorICogVGhpcyBtYWNybyBhbHNvIGFzc2lnbnMgTlVMTCB0byBnaXZlbiBwb2ludGVyIHdoZW4gZnJlZSdkLgorICovCisKKyNkZWZpbmUgQ3VybF9zYWZlZnJlZShwdHIpIFwKKyAgZG8ge2lmKChwdHIpKSB7ZnJlZSgocHRyKSk7IChwdHIpID0gTlVMTDt9fSBXSElMRV9GQUxTRQorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfTUVNREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL21rLWNhLWJ1bmRsZS5wbCBiL2N1cmwtNy4yNS4wL2xpYi9tay1jYS1idW5kbGUucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGYyNGFkZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9tay1jYS1idW5kbGUucGwKQEAgLTAsMCArMSwxOTUgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjICoKKyMgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIyAqCisjICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMgKgorIyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjICoKKyMgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgVGhpcyBQZXJsIHNjcmlwdCBjcmVhdGVzIGEgZnJlc2ggY2EtYnVuZGxlLmNydCBmaWxlIGZvciB1c2Ugd2l0aCBsaWJjdXJsLgorIyBJdCBkb3dubG9hZHMgY2VydGRhdGEudHh0IGZyb20gTW96aWxsYSdzIHNvdXJjZSB0cmVlIChzZWUgVVJMIGJlbG93KSwKKyMgdGhlbiBwYXJzZXMgY2VydGRhdGEudHh0IGFuZCBleHRyYWN0cyBDQSBSb290IENlcnRpZmljYXRlcyBpbnRvIFBFTSBmb3JtYXQuCisjIFRoZXNlIGFyZSB0aGVuIHByb2Nlc3NlZCB3aXRoIHRoZSBPcGVuU1NMIGNvbW1hbmRsaW5lIHRvb2wgdG8gcHJvZHVjZSB0aGUKKyMgZmluYWwgY2EtYnVuZGxlLmNydCBmaWxlLgorIyBUaGUgc2NyaXB0IGlzIGJhc2VkIG9uIHRoZSBwYXJzZS1jZXJ0cyBzY3JpcHQgd3JpdHRlbiBieSBSb2xhbmQgS3Jpa2F2YS4KKyMgVGhpcyBQZXJsIHNjcmlwdCB3b3JrcyBvbiBhbG1vc3QgYW55IHBsYXRmb3JtIHNpbmNlIGl0cyBvbmx5IGV4dGVybmFsCisjIGRlcGVuZGVuY3kgaXMgdGhlIE9wZW5TU0wgY29tbWFuZGxpbmUgdG9vbCBmb3Igb3B0aW9uYWwgdGV4dCBsaXN0aW5nLgorIyBIYWNrZWQgYnkgR3VlbnRlciBLbmF1Zi4KKyMKK3VzZSBHZXRvcHQ6OlN0ZDsKK3VzZSBNSU1FOjpCYXNlNjQ7Cit1c2UgTFdQOjpVc2VyQWdlbnQgNjsKK3VzZSBzdHJpY3Q7Cit1c2UgdmFycyBxdygkb3B0X2IgJG9wdF9oICRvcHRfaSAkb3B0X2wgJG9wdF9uICRvcHRfcSAkb3B0X3QgJG9wdF91ICRvcHRfdik7CisKK215ICR1cmwgPSAnaHR0cHM6Ly9teHIubW96aWxsYS5vcmcvbW96aWxsYS9zb3VyY2Uvc2VjdXJpdHkvbnNzL2xpYi9ja2Z3L2J1aWx0aW5zL2NlcnRkYXRhLnR4dD9yYXc9MSc7CisjIElmIHRoZSBPcGVuU1NMIGNvbW1hbmRsaW5lIGlzIG5vdCBpbiBzZWFyY2ggcGF0aCB5b3UgY2FuIGNvbmZpZ3VyZSBpdCBoZXJlIQorbXkgJG9wZW5zc2wgPSAnb3BlbnNzbCc7CisKK215ICR2ZXJzaW9uID0gJzEuMTYnOworCitnZXRvcHRzKCdiaGlsbnF0dXYnKTsKKworaWYgKCRvcHRfaSkgeworICBwcmludCAoIj0iIHggNzggLiAiXG4iKTsKKyAgcHJpbnQgIlNjcmlwdCBWZXJzaW9uICAgICAgICAgICAgOiAkdmVyc2lvblxuIjsKKyAgcHJpbnQgIlBlcmwgVmVyc2lvbiAgICAgICAgICAgICAgOiAkXVxuIjsKKyAgcHJpbnQgIk9wZXJhdGluZyBTeXN0ZW0gTmFtZSAgICAgOiAkXk9cbiI7CisgIHByaW50ICJHZXRvcHQ6OlN0ZC5wbSBWZXJzaW9uICAgIDogJHtHZXRvcHQ6OlN0ZDo6VkVSU0lPTn1cbiI7CisgIHByaW50ICJNSU1FOjpCYXNlNjQucG0gVmVyc2lvbiAgIDogJHtNSU1FOjpCYXNlNjQ6OlZFUlNJT059XG4iOworICBwcmludCAiTFdQOjpVc2VyQWdlbnQucG0gVmVyc2lvbiA6ICR7TFdQOjpVc2VyQWdlbnQ6OlZFUlNJT059XG4iOworICBwcmludCAiTFdQLnBtIFZlcnNpb24gICAgICAgICAgICA6ICR7TFdQOjpWRVJTSU9OfVxuIjsKKyAgcHJpbnQgKCI9IiB4IDc4IC4gIlxuIik7Cit9CisKKyQwID1+IHNALiooL3xcXClAQDsKK2lmICgkb3B0X2gpIHsKKyAgcHJpbnRmKCJVc2FnZTpcdCVzIFstYl0gWy1pXSBbLWxdIFstbl0gWy1xXSBbLXRdIFstdV0gWy12XSBbPG91dHB1dGZpbGU+XVxuIiwgJDApOworICBwcmludCAiXHQtYlx0YmFja3VwIGFuIGV4aXN0aW5nIHZlcnNpb24gb2YgY2EtYnVuZGxlLmNydFxuIjsKKyAgcHJpbnQgIlx0LWlcdHByaW50IHZlcnNpb24gaW5mbyBhYm91dCB1c2VkIG1vZHVsZXNcbiI7CisgIHByaW50ICJcdC1sXHRwcmludCBsaWNlbnNlIGluZm8gYWJvdXQgY2VydGRhdGEudHh0XG4iOworICBwcmludCAiXHQtblx0bm8gZG93bmxvYWQgb2YgY2VydGRhdGEudHh0ICh0byB1c2UgZXhpc3RpbmcpXG4iOworICBwcmludCAiXHQtcVx0YmUgcmVhbGx5IHF1aWV0IChubyBwcm9ncmVzcyBvdXRwdXQgYXQgYWxsKVxuIjsKKyAgcHJpbnQgIlx0LXRcdGluY2x1ZGUgcGxhaW4gdGV4dCBsaXN0aW5nIG9mIGNlcnRpZmljYXRlc1xuIjsKKyAgcHJpbnQgIlx0LXVcdHVubGluayAocmVtb3ZlKSBjZXJ0ZGF0YS50eHQgYWZ0ZXIgcHJvY2Vzc2luZ1xuIjsKKyAgcHJpbnQgIlx0LXZcdGJlIHZlcmJvc2UgYW5kIHByaW50IG91dCBwcm9jZXNzZWQgQ0FzXG4iOworICBleGl0OworfQorCitteSAkY3J0ID0gJEFSR1ZbMF0gfHwgJ2NhLWJ1bmRsZS5jcnQnOworKG15ICR0eHQgPSAkdXJsKSA9fiBzQCguKi98XD8uKilAQGc7CisKK215ICRyZXNwOworCit1bmxlc3MgKCRvcHRfbiBhbmQgLWUgJHR4dCkgeworICBwcmludCAiRG93bmxvYWRpbmcgJyR0eHQnIC4uLlxuIiBpZiAoISRvcHRfcSk7CisgIG15ICR1YSAgPSBuZXcgTFdQOjpVc2VyQWdlbnQoYWdlbnQgPT4gIiQwLyR2ZXJzaW9uIik7CisgICR1YS0+ZW52X3Byb3h5KCk7CisgICRyZXNwID0gJHVhLT5taXJyb3IoJHVybCwgJHR4dCk7CisgIGlmICgkcmVzcCAmJiAkcmVzcC0+Y29kZSBlcSAnMzA0JykgeworICAgIHByaW50ICJOb3QgbW9kaWZpZWRcbiIgdW5sZXNzICRvcHRfcTsKKyAgICBleGl0IDA7CisgIH0KK30KKworbXkgJGN1cnJlbnRkYXRlID0gc2NhbGFyIGdtdGltZSgkcmVzcCA/ICRyZXNwLT5sYXN0X21vZGlmaWVkIDogKHN0YXQoJHR4dCkpWzldKTsKKworaWYgKCRvcHRfYiAmJiAtZSAkY3J0KSB7CisgIG15ICRiayA9IDE7CisgIHdoaWxlICgtZSAiJGNydC5+JHtia31+IikgeworICAgICRiaysrOworICB9CisgIHJlbmFtZSAkY3J0LCAiJGNydC5+JHtia31+IjsKK30KKworbXkgJGZvcm1hdCA9ICRvcHRfdCA/ICJwbGFpbiB0ZXh0IGFuZCAiIDogIiI7CitvcGVuKENSVCwiPiRjcnQiKSBvciBkaWUgIkNvdWxkbid0IG9wZW4gJGNydDogJCEiOworcHJpbnQgQ1JUIDw8RU9UOworIyMKKyMjICRjcnQgLS0gQnVuZGxlIG9mIENBIFJvb3QgQ2VydGlmaWNhdGVzCisjIworIyMgQ2VydGlmaWNhdGUgZGF0YSBmcm9tIE1vemlsbGEgYXMgb2Y6ICR7Y3VycmVudGRhdGV9CisjIworIyMgVGhpcyBpcyBhIGJ1bmRsZSBvZiBYLjUwOSBjZXJ0aWZpY2F0ZXMgb2YgcHVibGljIENlcnRpZmljYXRlIEF1dGhvcml0aWVzCisjIyAoQ0EpLiBUaGVzZSB3ZXJlIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGZyb20gTW96aWxsYSdzIHJvb3QgY2VydGlmaWNhdGVzCisjIyBmaWxlIChjZXJ0ZGF0YS50eHQpLiAgVGhpcyBmaWxlIGNhbiBiZSBmb3VuZCBpbiB0aGUgbW96aWxsYSBzb3VyY2UgdHJlZToKKyMjICR1cmwKKyMjCisjIyBJdCBjb250YWlucyB0aGUgY2VydGlmaWNhdGVzIGluICR7Zm9ybWF0fVBFTSBmb3JtYXQgYW5kIHRoZXJlZm9yZQorIyMgY2FuIGJlIGRpcmVjdGx5IHVzZWQgd2l0aCBjdXJsIC8gbGliY3VybCAvIHBocF9jdXJsLCBvciB3aXRoCisjIyBhbiBBcGFjaGUrbW9kX3NzbCB3ZWJzZXJ2ZXIgZm9yIFNTTCBjbGllbnQgYXV0aGVudGljYXRpb24uCisjIyBKdXN0IGNvbmZpZ3VyZSB0aGlzIGZpbGUgYXMgdGhlIFNTTENBQ2VydGlmaWNhdGVGaWxlLgorIyMKKworRU9UCisKK2Nsb3NlKENSVCkgb3IgZGllICJDb3VsZG4ndCBjbG9zZSAkY3J0OiAkISI7CisKK3ByaW50ICJQcm9jZXNzaW5nICAnJHR4dCcgLi4uXG4iIGlmICghJG9wdF9xKTsKK215ICRjYW5hbWU7CitteSAkY2VydG51bSA9IDA7CitteSAkc2tpcG51bSA9IDA7CitvcGVuKFRYVCwiJHR4dCIpIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiAkdHh0OiAkISI7Cit3aGlsZSAoPFRYVD4pIHsKKyAgaWYgKC9cKlwqXCpcKlwqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgXCpcKlwqXCpcKi8pIHsKKyAgICBvcGVuKENSVCwgIj4+JGNydCIpIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiAkY3J0OiAkISI7CisgICAgcHJpbnQgQ1JUOworICAgIHByaW50IGlmICgkb3B0X2wpOworICAgIHdoaWxlICg8VFhUPikgeworICAgICAgcHJpbnQgQ1JUOworICAgICAgcHJpbnQgaWYgKCRvcHRfbCk7CisgICAgICBsYXN0IGlmICgvXCpcKlwqXCpcKiBFTkQgTElDRU5TRSBCTE9DSyBcKlwqXCpcKlwqLyk7CisgICAgfQorICAgIGNsb3NlKENSVCkgb3IgZGllICJDb3VsZG4ndCBjbG9zZSAkY3J0OiAkISI7CisgIH0KKyAgbmV4dCBpZiAvXiN8XlxzKiQvOworICBjaG9tcDsKKyAgaWYgKC9eQ1ZTX0lEXHMrXCIoLiopXCIvKSB7CisgICAgb3BlbihDUlQsICI+PiRjcnQiKSBvciBkaWUgIkNvdWxkbid0IG9wZW4gJGNydDogJCEiOworICAgIHByaW50IENSVCAiIyAkMVxuIjsKKyAgICBjbG9zZShDUlQpIG9yIGRpZSAiQ291bGRuJ3QgY2xvc2UgJGNydDogJCEiOworICB9CisgIGlmICgvXkNLQV9MQUJFTFxzK1tBLVowLTldK1xzK1wiKC4qKVwiLykgeworICAgICRjYW5hbWUgPSAkMTsKKyAgfQorICBteSAkdW50cnVzdGVkID0gMDsKKyAgaWYgKC9eQ0tBX1ZBTFVFIE1VTFRJTElORV9PQ1RBTC8pIHsKKyAgICBteSAkZGF0YTsKKyAgICB3aGlsZSAoPFRYVD4pIHsKKyAgICAgIGxhc3QgaWYgKC9eRU5ELyk7CisgICAgICBjaG9tcDsKKyAgICAgIG15IEBvY3RldHMgPSBzcGxpdCgvXFwvKTsKKyAgICAgIHNoaWZ0IEBvY3RldHM7CisgICAgICBmb3IgKEBvY3RldHMpIHsKKyAgICAgICAgJGRhdGEgLj0gY2hyKG9jdCk7CisgICAgICB9CisgICAgfQorICAgIHdoaWxlICg8VFhUPikgeworICAgICAgbGFzdCBpZiAoL14jJC8pOworICAgICAgJHVudHJ1c3RlZCA9IDEgaWYgKC9eQ0tBX1RSVVNUX1NFUlZFUl9BVVRIXHMrQ0tfVFJVU1RccytDS1RfTlNTX05PVF9UUlVTVEVEJC8KKyAgICAgICAgICAgICAgICAgICAgIG9yIC9eQ0tBX1RSVVNUX1NFUlZFUl9BVVRIXHMrQ0tfVFJVU1RccytDS1RfTlNTX1RSVVNUX1VOS05PV04kLyk7CisgICAgfQorICAgIGlmICgkdW50cnVzdGVkKSB7CisgICAgICAkc2tpcG51bSArKzsKKyAgICB9IGVsc2UgeworICAgICAgbXkgJHBlbSA9ICItLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cbiIKKyAgICAgICAgICAgICAgLiBNSU1FOjpCYXNlNjQ6OmVuY29kZSgkZGF0YSkKKyAgICAgICAgICAgICAgLiAiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxuIjsKKyAgICAgIG9wZW4oQ1JULCAiPj4kY3J0Iikgb3IgZGllICJDb3VsZG4ndCBvcGVuICRjcnQ6ICQhIjsKKyAgICAgIHByaW50IENSVCAiXG4kY2FuYW1lXG4iOworICAgICAgcHJpbnQgQ1JUICgiPSIgeCBsZW5ndGgoJGNhbmFtZSkgLiAiXG4iKTsKKyAgICAgIGlmICghJG9wdF90KSB7CisgICAgICAgIHByaW50IENSVCAkcGVtOworICAgICAgfQorICAgICAgY2xvc2UoQ1JUKSBvciBkaWUgIkNvdWxkbid0IGNsb3NlICRjcnQ6ICQhIjsKKyAgICAgIGlmICgkb3B0X3QpIHsKKyAgICAgICAgb3BlbihUTVAsICJ8JG9wZW5zc2wgeDUwOSAtbWQ1IC1maW5nZXJwcmludCAtdGV4dCAtaW5mb3JtIFBFTSA+PiAkY3J0Iikgb3IgZGllICJDb3VsZG4ndCBvcGVuIG9wZW5zc2wgcGlwZTogJCEiOworICAgICAgICBwcmludCBUTVAgJHBlbTsKKyAgICAgICAgY2xvc2UoVE1QKSBvciBkaWUgIkNvdWxkbid0IGNsb3NlIG9wZW5zc2wgcGlwZTogJCEiOworICAgICAgfQorICAgICAgcHJpbnQgIlBhcnNpbmc6ICRjYW5hbWVcbiIgaWYgKCRvcHRfdik7CisgICAgICAkY2VydG51bSArKzsKKyAgICB9CisgIH0KK30KK2Nsb3NlKFRYVCkgb3IgZGllICJDb3VsZG4ndCBjbG9zZSAkdHh0OiAkISI7Cit1bmxpbmsgJHR4dCBpZiAoJG9wdF91KTsKK3ByaW50ICJEb25lICgkY2VydG51bSBDQSBjZXJ0cyBwcm9jZXNzZWQsICRza2lwbnVtIHVudHJ1c3RlZCBza2lwcGVkKS5cbiIgaWYgKCEkb3B0X3EpOworCitleGl0OworCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9tay1jYS1idW5kbGUudmJzIGIvY3VybC03LjI1LjAvbGliL21rLWNhLWJ1bmRsZS52YnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2ZkNzRjMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9tay1jYS1idW5kbGUudmJzCkBAIC0wLDAgKzEsMjg2IEBACisnKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorJyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXw0KKycqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8DQorJyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwNCisnKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXw0KKycqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffA0KKycqDQorJyogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4NCisnKg0KKycqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoDQorJyogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcw0KKycqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuDQorJyoNCisnKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwNCisnKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCisnKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLg0KKycqDQorJyogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQ0KKycqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorJyoNCisnKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorJyogU2NyaXB0IHRvIGZldGNoIGNlcnRkYXRhLnR4dCBmcm9tIE1vemlsbGEub3JnIHNpdGUgYW5kIGNyZWF0ZSBhDQorJyogY2EtYnVuZGxlLmNydCBmb3IgdXNlIHdpdGggT3BlblNTTCAvIGxpYmN1cmwgLyBsaWJjdXJsIGJpbmRpbmdzDQorJyogUmVxdWlyZXMgV2luSHR0cC5XaW5IdHRwUmVxdWVzdC41LjEgYW5kIEFET0RCLlN0cmVhbSB3aGljaCBhcmUgcGFydCBvZg0KKycqIFcyMDAwIFNQMyBvciBsYXRlciwgV1hQIFNQMSBvciBsYXRlciwgVzIwMDMgU2VydmVyIFNQMSBvciBsYXRlci4NCisnKiBIYWNrZWQgYnkgR3VlbnRlciBLbmF1Zg0KKycqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCitPcHRpb24gRXhwbGljaXQNCitDb25zdCBteVZlcnNpb24gPSAiMC4zLjYiDQorDQorQ29uc3QgbXlVcmwgPSAiaHR0cDovL214ci5tb3ppbGxhLm9yZy9tb3ppbGxhL3NvdXJjZS9zZWN1cml0eS9uc3MvbGliL2NrZncvYnVpbHRpbnMvY2VydGRhdGEudHh0P3Jhdz0xIg0KKw0KK0NvbnN0IG15T3BlbnNzbCA9ICJvcGVuc3NsLmV4ZSINCisNCitDb25zdCBteUNkU2F2RiA9IEZBTFNFICAgICAgICcgRmxhZzogc2F2ZSBkb3dubG9hZGVkIGRhdGEgdG8gZmlsZSBjZXJ0ZGF0YS50eHQNCitDb25zdCBteUNhQmFrRiA9IFRSVUUgICAgICAgICcgRmxhZzogYmFja3VwIGV4aXN0aW5nIGNhLWJ1bmRsZSBjZXJ0aWZpY2F0ZQ0KK0NvbnN0IG15QXNrTGlGID0gVFJVRSAgICAgICAgJyBGbGFnOiBkaXNwbGF5IGNlcnRkYXRhLnR4dCBsaWNlbnNlIGFncmVlbWVudA0KK0NvbnN0IG15QXNrVGlGID0gVFJVRSAgICAgICAgJyBGbGFnOiBhc2sgdG8gaW5jbHVkZSBjZXJ0aWZpY2F0ZSB0ZXh0IGluZm8NCisNCisnKioqKioqKioqKioqKioqKioqKiBOb3RoaW5nIHRvIGNvbmZpZ3VyZSBiZWxvdyEgKioqKioqKioqKioqKioqKioqKg0KK0RpbSBvYmpTaGVsbCwgb2JqTmV0d29yaywgb2JqRlNPLCBvYmpIdHRwDQorRGltIG15QmFzZSwgbXlTZWxmLCBteUZoLCBteVRtcEZoLCBteUNkRGF0YSwgbXlDZEZpbGUsIG15Q2FGaWxlLCBteVRtcE5hbWUsIG15QmFrTnVtLCBteU9wdFR4dCwgaQ0KK1NldCBvYmpOZXR3b3JrID0gV1NjcmlwdC5DcmVhdGVPYmplY3QoIldTY3JpcHQuTmV0d29yayIpDQorU2V0IG9ialNoZWxsID0gV1NjcmlwdC5DcmVhdGVPYmplY3QoIldTY3JpcHQuU2hlbGwiKQ0KK1NldCBvYmpGU08gPSBXU2NyaXB0LkNyZWF0ZU9iamVjdCgiU2NyaXB0aW5nLkZpbGVTeXN0ZW1PYmplY3QiKQ0KK1NldCBvYmpIdHRwID0gV1NjcmlwdC5DcmVhdGVPYmplY3QoIldpbkh0dHAuV2luSHR0cFJlcXVlc3QuNS4xIikNCitJZiBvYmpIdHRwIElzIE5vdGhpbmcgVGhlbiBTZXQgb2JqSHR0cCA9IFdTY3JpcHQuQ3JlYXRlT2JqZWN0KCJXaW5IdHRwLldpbkh0dHBSZXF1ZXN0IikNCitteUJhc2UgPSBMZWZ0KFdTY3JpcHQuU2NyaXB0RnVsbE5hbWUsIEluc3RyUmV2KFdTY3JpcHQuU2NyaXB0RnVsbE5hbWUsICJcIikpDQorbXlTZWxmID0gTGVmdChXU2NyaXB0LlNjcmlwdE5hbWUsIEluc3RyUmV2KFdTY3JpcHQuU2NyaXB0TmFtZSwgIi4iKSAtIDEpICYgIiAiICYgbXlWZXJzaW9uDQorbXlDZEZpbGUgPSBNaWQobXlVcmwsIEluc3RyUmV2KG15VXJsLCAiLyIpICsgMSwgSW5zdHJSZXYobXlVcmwsICI/IikgLSBJbnN0clJldihteVVybCwgIi8iKSAtIDEpDQorbXlDYUZpbGUgPSAiY2EtYnVuZGxlLmNydCINCitteVRtcE5hbWUgPSBJbnB1dEJveCgiRW50ZXIgb3V0cHV0IGZpbGVuYW1lOiIsIG15U2VsZiwgbXlDYUZpbGUpDQorSWYgTm90IChteVRtcE5hbWUgPSAiIikgVGhlbg0KKyAgbXlDYUZpbGUgPSBteVRtcE5hbWUNCitFbmQgSWYNCisnIExldHMgaWdub3JlIFNTTCBpbnZhbGlkIGNlcnQgZXJyb3JzDQorb2JqSHR0cC5PcHRpb24oNCkgPSAyNTYgKyA1MTIgKyA0MDk2ICsgODE5Mg0KK29iakh0dHAuU2V0VGltZW91dHMgMCwgNTAwMCwgMTAwMDAsIDEwMDAwDQorb2JqSHR0cC5PcGVuICJHRVQiLCBteVVybCwgRkFMU0UNCitvYmpIdHRwLnNldFJlcXVlc3RIZWFkZXIgIlVzZXItQWdlbnQiLCBXU2NyaXB0LlNjcmlwdE5hbWUgJiAiLyIgJiBteVZlcnNpb24NCitvYmpIdHRwLlNlbmQgIiINCitJZiBOb3QgKG9iakh0dHAuc3RhdHVzVGV4dCA9ICJPSyIpIFRoZW4NCisgIE1zZ0JveCgiRmFpbGVkIHRvIGRvd25sb2FkICciICYgbXlDZEZpbGUgJiAiJzogIiAmIG9iakh0dHAuc3RhdHVzVGV4dCksIHZiQ3JpdGljYWwsIG15U2VsZg0KKyAgV1NjcmlwdC5RdWl0IDENCitFbmQgSWYNCisnIENvbnZlcnQgZGF0YSBmcm9tIFJlc3BvbnNlQm9keSBpbnN0ZWFkIG9mIHVzaW5nIFJlc3BvbnNlVGV4dCBiZWNhdXNlIG9mIFVURi04DQorbXlDZERhdGEgPSBDb252ZXJ0QmluYXJ5RGF0YShvYmpIdHRwLlJlc3BvbnNlQm9keSkNCitTZXQgb2JqSHR0cCA9IE5vdGhpbmcNCisnIFdyaXRlIHJlY2VpdmVkIGRhdGEgdG8gZmlsZSBpZiBlbmFibGVkDQorSWYgKG15Q2RTYXZGID0gVFJVRSkgVGhlbg0KKyAgU2V0IG15RmggPSBvYmpGU08uT3BlblRleHRGaWxlKG15Q2RGaWxlLCAyLCBUUlVFKQ0KKyAgbXlGaC5Xcml0ZSBteUNkRGF0YQ0KKyAgbXlGaC5DbG9zZQ0KK0VuZCBJZg0KKycgQmFja3VwIGV4aXRzaW5nIGNhLWJ1bmRsZSBjZXJ0aWZpY2F0ZSBmaWxlDQorSWYgKG15Q2FCYWtGID0gVFJVRSkgVGhlbg0KKyAgSWYgb2JqRlNPLkZpbGVFeGlzdHMobXlDYUZpbGUpIFRoZW4NCisgICAgRGltIG15QmFrRmlsZSwgYg0KKyAgICBiID0gMQ0KKyAgICBteUJha0ZpbGUgPSBteUNhRmlsZSAmICIufiIgJiBiICYgIn4iDQorICAgIFdoaWxlIG9iakZTTy5GaWxlRXhpc3RzKG15QmFrRmlsZSkNCisgICAgICBiID0gYiArIDENCisgICAgICBteUJha0ZpbGUgPSBteUNhRmlsZSAmICIufiIgJiBiICYgIn4iDQorICAgIFdlbmQNCisgICAgU2V0IG15VG1wRmggPSBvYmpGU08uR2V0RmlsZShteUNhRmlsZSkNCisgICAgbXlUbXBGaC5Nb3ZlIG15QmFrRmlsZQ0KKyAgRW5kIElmDQorRW5kIElmDQorSWYgKG15QXNrVGlGID0gVFJVRSkgVGhlbg0KKyAgSWYgKDYgPSBvYmpTaGVsbC5Qb3BVcCgiRG8geW91IHdhbnQgdG8gaW5jbHVkZSB0ZXh0IGluZm9ybWF0aW9uIGFib3V0IGVhY2ggY2VydGlmaWNhdGU/IiAmIHZiTGYgJiBfDQorICAgICAgICAgICIocmVxdWlyZXMgT3BlblNTTCBjb21tYW5kbGluZSBpbiBjdXJyZW50IGRpcmVjdG9yeSBvciBpbiBzZWFyY2ggcGF0aCkiLCwgXw0KKyAgICAgICAgICBteVNlbGYsIHZiUXVlc3Rpb24gKyB2Ylllc05vICsgdmJEZWZhdWx0QnV0dG9uMikpIFRoZW4NCisgICAgbXlPcHRUeHQgPSBUUlVFDQorICBFbHNlDQorICAgIG15T3B0VHh0ID0gRkFMU0UNCisgIEVuZCBJZg0KK0VuZCBJZg0KKycgUHJvY2VzcyB0aGUgcmVjZWl2ZWQgZGF0YQ0KK0RpbSBteUxpbmVzLCBteVBhdHRlcm4sIG15SW5zaWRlQ2VydCwgbXlJbnNpZGVMaWNlbnNlLCBteUxpY2Vuc2VUZXh0LCBteU51bUNlcnRzLCBteU51bVNraXBwZWQNCitEaW0gbXlMYWJlbCwgbXlPY3RldHMsIG15RGF0YSwgbXlQZW0sIG15UmV2LCBteVVudHJ1c3RlZCwgag0KK215TnVtU2tpcHBlZCA9IDANCitteU51bUNlcnRzID0gMA0KK215RGF0YSA9ICIiDQorbXlMaW5lcyA9IFNwbGl0KG15Q2REYXRhLCB2YkxmLCAtMSkNCitTZXQgbXlGaCA9IG9iakZTTy5PcGVuVGV4dEZpbGUobXlDYUZpbGUsIDIsIFRSVUUpDQorbXlGaC5Xcml0ZSAiIyMiICYgdmJMZg0KK215RmguV3JpdGUgIiMjICIgJiBteUNhRmlsZSAmICIgLS0gQnVuZGxlIG9mIENBIFJvb3QgQ2VydGlmaWNhdGVzIiAmIHZiTGYNCitteUZoLldyaXRlICIjIyIgJiB2YkxmDQorbXlGaC5Xcml0ZSAiIyMgQ29udmVydGVkIGF0OiAiICYgTm93ICYgdmJMZg0KK215RmguV3JpdGUgIiMjIiAmIHZiTGYNCitteUZoLldyaXRlICIjIyBUaGlzIGlzIGEgYnVuZGxlIG9mIFguNTA5IGNlcnRpZmljYXRlcyBvZiBwdWJsaWMgQ2VydGlmaWNhdGUgQXV0aG9yaXRpZXMiICYgdmJMZg0KK215RmguV3JpdGUgIiMjIChDQSkuIFRoZXNlIHdlcmUgYXV0b21hdGljYWxseSBleHRyYWN0ZWQgZnJvbSBNb3ppbGxhJ3Mgcm9vdCBjZXJ0aWZpY2F0ZXMiICYgdmJMZg0KK215RmguV3JpdGUgIiMjIGZpbGUgKGNlcnRkYXRhLnR4dCkuICBUaGlzIGZpbGUgY2FuIGJlIGZvdW5kIGluIHRoZSBtb3ppbGxhIHNvdXJjZSB0cmVlOiIgJiB2YkxmDQorbXlGaC5Xcml0ZSAiIyMgJy9tb3ppbGxhL3NvdXJjZS9zZWN1cml0eS9uc3MvbGliL2NrZncvYnVpbHRpbnMvY2VydGRhdGEudHh0JyIgJiB2YkxmDQorbXlGaC5Xcml0ZSAiIyMiICYgdmJMZg0KK215RmguV3JpdGUgIiMjIEl0IGNvbnRhaW5zIHRoZSBjZXJ0aWZpY2F0ZXMgaW4gUEVNIGZvcm1hdCBhbmQgdGhlcmVmb3JlIiAmIHZiTGYNCitteUZoLldyaXRlICIjIyBjYW4gYmUgZGlyZWN0bHkgdXNlZCB3aXRoIGN1cmwgLyBsaWJjdXJsIC8gcGhwX2N1cmwsIG9yIHdpdGgiICYgdmJMZg0KK215RmguV3JpdGUgIiMjIGFuIEFwYWNoZSttb2Rfc3NsIHdlYnNlcnZlciBmb3IgU1NMIGNsaWVudCBhdXRoZW50aWNhdGlvbi4iICYgdmJMZg0KK215RmguV3JpdGUgIiMjIEp1c3QgY29uZmlndXJlIHRoaXMgZmlsZSBhcyB0aGUgU1NMQ0FDZXJ0aWZpY2F0ZUZpbGUuIiAmIHZiTGYNCitteUZoLldyaXRlICIjIyIgJiB2YkxmDQorbXlGaC5Xcml0ZSB2YkxmDQorRm9yIGkgPSAwIFRvIFVCb3VuZChteUxpbmVzKQ0KKyAgSWYgSW5zdHJSZXYobXlMaW5lcyhpKSwgIkNLQV9MQUJFTCAiKSBUaGVuDQorICAgIG15UGF0dGVybiA9ICJeQ0tBX0xBQkVMXHMrW0EtWjAtOV0rXHMrIiIoLis/KSIiIg0KKyAgICBteUxhYmVsID0gUmVnRXhwckZpcnN0KG15UGF0dGVybiwgbXlMaW5lcyhpKSkNCisgIEVuZCBJZg0KKyAgSWYgKG15SW5zaWRlQ2VydCA9IFRSVUUpIFRoZW4NCisgICAgSWYgSW5zdHJSZXYobXlMaW5lcyhpKSwgIkVORCIpIFRoZW4NCisgICAgICBteUluc2lkZUNlcnQgPSBGQUxTRQ0KKyAgICAgIFdoaWxlIChpIDwgVUJvdW5kKG15TGluZXMpKSBBbmQgTm90IChteUxpbmVzKGkpID0gIiMiKQ0KKyAgICAgICAgaSA9IGkgKyAxDQorICAgICAgICBJZiAoSW5zdHJSZXYobXlMaW5lcyhpKSwgIkNLQV9UUlVTVF9TRVJWRVJfQVVUSCBDS19UUlVTVCBDS1RfTlNTX05PVF9UUlVTVEVEIikgT3IgXw0KKyAgICAgICAgICAgSW5zdHJSZXYobXlMaW5lcyhpKSwgIkNLQV9UUlVTVF9TRVJWRVJfQVVUSCBDS19UUlVTVCBDS1RfTlNTX1RSVVNUX1VOS05PV04iKSkgVGhlbg0KKyAgICAgICAgICBteVVudHJ1c3RlZCA9IFRSVUUNCisgICAgICAgIEVuZCBJZg0KKyAgICAgIFdlbmQNCisgICAgICBJZiAobXlVbnRydXN0ZWQgPSBUUlVFKSBUaGVuDQorICAgICAgICBteU51bVNraXBwZWQgPSBteU51bVNraXBwZWQgKyAxDQorICAgICAgRWxzZQ0KKyAgICAgICAgbXlGaC5Xcml0ZSBteUxhYmVsICYgdmJMZg0KKyAgICAgICAgbXlGaC5Xcml0ZSBTdHJpbmcoTGVuKG15TGFiZWwpLCAiPSIpICYgdmJMZg0KKyAgICAgICAgbXlQZW0gPSAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tIiAmIHZiTGYgJiBfDQorICAgICAgICAgICAgICAgIEJhc2U2NEVuY29kZShteURhdGEpICYgdmJMZiAmIF8NCisgICAgICAgICAgICAgICAgIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0iICYgdmJMZg0KKyAgICAgICAgSWYgKG15T3B0VHh0ID0gRkFMU0UpIFRoZW4NCisgICAgICAgICAgbXlGaC5Xcml0ZSBteVBlbSAmIHZiTGYNCisgICAgICAgIEVsc2UNCisgICAgICAgICAgRGltIG15Q21kLCBteVJ2YWwsIG15VG1wSW4sIG15VG1wT3V0DQorICAgICAgICAgIG15VG1wSW4gPSBvYmpGU08uR2V0U3BlY2lhbEZvbGRlcigyKS5QYXRoICYgIlwiICYgb2JqRlNPLkdldFRlbXBOYW1lDQorICAgICAgICAgIG15VG1wT3V0ID0gb2JqRlNPLkdldFNwZWNpYWxGb2xkZXIoMikuUGF0aCAmICJcIiAmIG9iakZTTy5HZXRUZW1wTmFtZQ0KKyAgICAgICAgICBTZXQgbXlUbXBGaCA9IG9iakZTTy5PcGVuVGV4dEZpbGUobXlUbXBJbiwgMiwgVFJVRSkNCisgICAgICAgICAgbXlUbXBGaC5Xcml0ZSBteVBlbQ0KKyAgICAgICAgICBteVRtcEZoLkNsb3NlDQorICAgICAgICAgIG15Q21kID0gbXlPcGVuc3NsICYgIiB4NTA5IC1tZDUgLWZpbmdlcnByaW50IC10ZXh0IC1pbmZvcm0gUEVNIiAmIF8NCisgICAgICAgICAgICAgICAgICAiIC1pbiAiICYgbXlUbXBJbiAmICIgLW91dCAiICYgbXlUbXBPdXQNCisgICAgICAgICAgbXlSdmFsID0gb2JqU2hlbGwuUnVuIChteUNtZCwgMCwgVFJVRSkNCisgICAgICAgICAgb2JqRlNPLkRlbGV0ZUZpbGUgbXlUbXBJbiwgVFJVRQ0KKyAgICAgICAgICBJZiBOb3QgKG15UnZhbCA9IDApIFRoZW4NCisgICAgICAgICAgICBNc2dCb3goIkZhaWxlZCB0byBwcm9jZXNzIFBFTSBjZXJ0IHdpdGggT3BlblNTTCBjb21tYW5kbGluZSEiKSwgdmJDcml0aWNhbCwgbXlTZWxmDQorICAgICAgICAgICAgb2JqRlNPLkRlbGV0ZUZpbGUgbXlUbXBPdXQsIFRSVUUNCisgICAgICAgICAgICBXU2NyaXB0LlF1aXQgMw0KKyAgICAgICAgICBFbmQgSWYNCisgICAgICAgICAgU2V0IG15VG1wRmggPSBvYmpGU08uT3BlblRleHRGaWxlKG15VG1wT3V0LCAxKQ0KKyAgICAgICAgICBteUZoLldyaXRlIG15VG1wRmguUmVhZEFsbCAmIHZiTGYNCisgICAgICAgICAgbXlUbXBGaC5DbG9zZQ0KKyAgICAgICAgICBvYmpGU08uRGVsZXRlRmlsZSBteVRtcE91dCwgVFJVRQ0KKyAgICAgICAgRW5kIElmDQorICAgICAgICBteU51bUNlcnRzID0gbXlOdW1DZXJ0cyArIDENCisgICAgICBFbmQgSWYNCisgICAgRWxzZQ0KKyAgICAgIG15T2N0ZXRzID0gU3BsaXQobXlMaW5lcyhpKSwgIlwiKQ0KKyAgICAgIEZvciBqID0gMSBUbyBVQm91bmQobXlPY3RldHMpDQorICAgICAgICBteURhdGEgPSBteURhdGEgJiBDaHIoQ0J5dGUoIiZvIiAmIG15T2N0ZXRzKGopKSkNCisgICAgICBOZXh0DQorICAgIEVuZCBJZg0KKyAgRW5kIElmDQorICBJZiBJbnN0clJldihteUxpbmVzKGkpLCAiQ1ZTX0lEICIpIFRoZW4NCisgICAgbXlQYXR0ZXJuID0gIl5DVlNfSURccysiIiguKz8pIiIiDQorICAgIG15UmV2ID0gUmVnRXhwckZpcnN0KG15UGF0dGVybiwgbXlMaW5lcyhpKSkNCisgICAgbXlGaC5Xcml0ZSAiIyAiICYgbXlSZXYgJiB2YkxmICYgdmJMZg0KKyAgRW5kIElmDQorICBJZiBJbnN0clJldihteUxpbmVzKGkpLCAiQ0tBX1ZBTFVFIE1VTFRJTElORV9PQ1RBTCIpIFRoZW4NCisgICAgbXlJbnNpZGVDZXJ0ID0gVFJVRQ0KKyAgICBteVVudHJ1c3RlZCA9IEZBTFNFDQorICAgIG15RGF0YSA9ICIiDQorICBFbmQgSWYNCisgIElmIEluc3RyUmV2KG15TGluZXMoaSksICIqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqIikgVGhlbg0KKyAgICBteUluc2lkZUxpY2Vuc2UgPSBUUlVFDQorICBFbmQgSWYNCisgIElmIChteUluc2lkZUxpY2Vuc2UgPSBUUlVFKSBUaGVuDQorICAgIG15RmguV3JpdGUgbXlMaW5lcyhpKSAmIHZiTGYNCisgICAgbXlMaWNlbnNlVGV4dCA9IG15TGljZW5zZVRleHQgJiBNaWQobXlMaW5lcyhpKSwgMikgJiB2YkxmDQorICBFbmQgSWYNCisgIElmIEluc3RyUmV2KG15TGluZXMoaSksICIqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiIpIFRoZW4NCisgICAgbXlJbnNpZGVMaWNlbnNlID0gRkFMU0UNCisgICAgSWYgKG15QXNrTGlGID0gVFJVRSkgVGhlbg0KKyAgICAgIElmIE5vdCAoNiA9IG9ialNoZWxsLlBvcFVwKG15TGljZW5zZVRleHQgJiB2YkxmICYgXw0KKyAgICAgICAgICAgICAgIkRvIHlvdSBhZ3JlZSB0byB0aGUgbGljZW5zZSBzaG93biBhYm92ZSAocmVxdWlyZWQgdG8gcHJvY2VlZCkgPyIsLCBfDQorICAgICAgICAgICAgICBteVNlbGYsIHZiUXVlc3Rpb24gKyB2Ylllc05vICsgdmJEZWZhdWx0QnV0dG9uMSkpIFRoZW4NCisgICAgICAgIG15RmguQ2xvc2UNCisgICAgICAgIG9iakZTTy5EZWxldGVGaWxlIG15Q2FGaWxlLCBUUlVFDQorICAgICAgICBXU2NyaXB0LlF1aXQgMg0KKyAgICAgIEVuZCBJZg0KKyAgICBFbmQgSWYNCisgIEVuZCBJZg0KK05leHQNCitteUZoLkNsb3NlDQorb2JqU2hlbGwuUG9wVXAgIkRvbmUgKCIgJiBteU51bUNlcnRzICYgIiBDQSBjZXJ0cyBwcm9jZXNzZWQsICIgJiBteU51bVNraXBwZWQgJiBfDQorICAgICAgICAgICAgICAgIiB1bnRydXN0ZWQgc2tpcHBlZCkuIiwgMjAsIG15U2VsZiwgdmJJbmZvcm1hdGlvbg0KK1dTY3JpcHQuUXVpdCAwDQorDQorRnVuY3Rpb24gQ29udmVydEJpbmFyeURhdGEoYXJyQnl0ZXMpDQorICBEaW0gb2JqU3RyZWFtDQorICBTZXQgb2JqU3RyZWFtID0gQ3JlYXRlT2JqZWN0KCJBRE9EQi5TdHJlYW0iKQ0KKyAgb2JqU3RyZWFtLk9wZW4NCisgIG9ialN0cmVhbS5UeXBlID0gMQ0KKyAgb2JqU3RyZWFtLldyaXRlIGFyckJ5dGVzDQorICBvYmpTdHJlYW0uUG9zaXRpb24gPSAwDQorICBvYmpTdHJlYW0uVHlwZSA9IDINCisgIG9ialN0cmVhbS5DaGFyc2V0ID0gImFzY2lpIg0KKyAgQ29udmVydEJpbmFyeURhdGEgPSBvYmpTdHJlYW0uUmVhZFRleHQNCisgIFNldCBvYmpTdHJlYW0gPSBOb3RoaW5nDQorRW5kIEZ1bmN0aW9uDQorDQorRnVuY3Rpb24gUmVnRXhwckZpcnN0KFNlYXJjaFBhdHRlcm4sIFRoZVN0cmluZykNCisgIERpbSBvYmpSZWdFeHAsIE1hdGNoZXMgICAgICAgICAgICAgICAgICAgICAgICAnIGNyZWF0ZSB2YXJpYWJsZXMuDQorICBTZXQgb2JqUmVnRXhwID0gTmV3IFJlZ0V4cCAgICAgICAgICAgICAgICAgICAgJyBjcmVhdGUgYSByZWd1bGFyIGV4cHJlc3Npb24uDQorICBvYmpSZWdFeHAuUGF0dGVybiA9IFNlYXJjaFBhdHRlcm4gICAgICAgICAgICAgJyBzZXRzIHRoZSBzZWFyY2ggcGF0dGVybi4NCisgIG9ialJlZ0V4cC5JZ25vcmVDYXNlID0gVFJVRSAgICAgICAgICAgICAgICAgICAnIHNldCB0byBpZ25vcmVzIGNhc2UuDQorICBvYmpSZWdFeHAuR2xvYmFsID0gVFJVRSAgICAgICAgICAgICAgICAgICAgICAgJyBzZXQgdG8gZ2xvYWJhbCBzZWFyY2guDQorICBTZXQgTWF0Y2hlcyA9IG9ialJlZ0V4cC5FeGVjdXRlKFRoZVN0cmluZykgICAgJyBkbyB0aGUgc2VhcmNoLg0KKyAgSWYgKE1hdGNoZXMuQ291bnQpIFRoZW4NCisgICAgUmVnRXhwckZpcnN0ID0gTWF0Y2hlcygwKS5TdWJNYXRjaGVzKDApICAgICAnIHJldHVybiBmaXJzdCBtYXRjaC4NCisgIEVsc2UNCisgICAgUmVnRXhwckZpcnN0ID0gIiINCisgIEVuZCBJZg0KKyAgU2V0IG9ialJlZ0V4cCA9IE5vdGhpbmcNCitFbmQgRnVuY3Rpb24NCisNCitGdW5jdGlvbiBCYXNlNjRFbmNvZGUoaW5EYXRhKQ0KKyAgQ29uc3QgQmFzZTY0ID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iDQorICBEaW0gY091dCwgc091dCwgSQ0KKw0KKyAgJ0ZvciBlYWNoIGdyb3VwIG9mIDMgYnl0ZXMNCisgIEZvciBJID0gMSBUbyBMZW4oaW5EYXRhKSBTdGVwIDMNCisgICAgRGltIG5Hcm91cCwgcE91dCwgc0dyb3VwDQorDQorICAgICdDcmVhdGUgb25lIGxvbmcgZnJvbSB0aGlzIDMgYnl0ZXMuDQorICAgIG5Hcm91cCA9ICZIMTAwMDAgKiBBc2MoTWlkKGluRGF0YSwgSSwgMSkpICsgXw0KKyAgICAgICAgICAgICAmSDEwMCAqIE15QVNDKE1pZChpbkRhdGEsIEkgKyAxLCAxKSkgKyBfDQorICAgICAgICAgICAgIE15QVNDKE1pZChpbkRhdGEsIEkgKyAyLCAxKSkNCisNCisgICAgJ09jdCBzcGxpdHMgdGhlIGxvbmcgVG8gOCBncm91cHMgd2l0aCAzIGJpdHMNCisgICAgbkdyb3VwID0gT2N0KG5Hcm91cCkNCisNCisgICAgJ0FkZCBsZWFkaW5nIHplcm9zDQorICAgIG5Hcm91cCA9IFN0cmluZyg4IC0gTGVuKG5Hcm91cCksICIwIikgJiBuR3JvdXANCisNCisgICAgJ0NvbnZlcnQgVG8gYmFzZTY0DQorICAgIHBPdXQgPSBNaWQoQmFzZTY0LCBDTG5nKCImbyIgJiBNaWQobkdyb3VwLCAxLCAyKSkgKyAxLCAxKSAmIF8NCisgICAgICAgICAgIE1pZChCYXNlNjQsIENMbmcoIiZvIiAmIE1pZChuR3JvdXAsIDMsIDIpKSArIDEsIDEpICYgXw0KKyAgICAgICAgICAgTWlkKEJhc2U2NCwgQ0xuZygiJm8iICYgTWlkKG5Hcm91cCwgNSwgMikpICsgMSwgMSkgJiBfDQorICAgICAgICAgICBNaWQoQmFzZTY0LCBDTG5nKCImbyIgJiBNaWQobkdyb3VwLCA3LCAyKSkgKyAxLCAxKQ0KKw0KKyAgICAnQWRkIHRoZSBwYXJ0IFRvIE91dFB1dCBzdHJpbmcNCisgICAgc091dCA9IHNPdXQgKyBwT3V0DQorDQorICAgICdBZGQgYSBuZXcgbGluZSBGb3IgRWFjaCA3NiBjaGFycyBJbiBkZXN0ICg3NiozLzQgPSA1NykNCisgICAgSWYgKEkgPCBMZW4oaW5EYXRhKSAtIDIpIFRoZW4NCisgICAgICBJZiAoSSArIDIpIE1vZCA1NyA9IDAgVGhlbiBzT3V0ID0gc091dCAmIHZiTGYNCisgICAgRW5kIElmDQorICBOZXh0DQorICBTZWxlY3QgQ2FzZSBMZW4oaW5EYXRhKSBNb2QgMw0KKyAgICBDYXNlIDE6ICc4IGJpdCBmaW5hbA0KKyAgICAgIHNPdXQgPSBMZWZ0KHNPdXQsIExlbihzT3V0KSAtIDIpICYgIj09Ig0KKyAgICBDYXNlIDI6ICcxNiBiaXQgZmluYWwNCisgICAgICBzT3V0ID0gTGVmdChzT3V0LCBMZW4oc091dCkgLSAxKSAmICI9Ig0KKyAgRW5kIFNlbGVjdA0KKyAgQmFzZTY0RW5jb2RlID0gc091dA0KK0VuZCBGdW5jdGlvbg0KKw0KK0Z1bmN0aW9uIE15QVNDKE9uZUNoYXIpDQorICBJZiBPbmVDaGFyID0gIiIgVGhlbiBNeUFTQyA9IDAgRWxzZSBNeUFTQyA9IEFzYyhPbmVDaGFyKQ0KK0VuZCBGdW5jdGlvbg0KKw0KKw0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9tcHJpbnRmLmMgYi9jdXJsLTcuMjUuMC9saWIvbXByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OTBmNDAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvbXByaW50Zi5jCkBAIC0wLDAgKzEsMTE5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqCisgKiBQdXJwb3NlOgorICogIEEgbWVyZ2Ugb2YgQmpvcm4gUmVlc2UncyBmb3JtYXQoKSBmdW5jdGlvbiBhbmQgRGFuaWVsJ3MgZHNwcmludGYoKQorICogIDEuMC4gQSBmdWxsIGJsb29kZWQgcHJpbnRmKCkgY2xvbmUgd2l0aCBmdWxsIHN1cHBvcnQgZm9yIDxudW0+JAorICogIGV2ZXJ5d2hlcmUgKHBhcmFtZXRlcnMsIHdpZHRocyBhbmQgcHJlY2lzaW9ucykgaW5jbHVkaW5nIHZhcmlhYmxlZAorICogIHNpemVkIHBhcmFtZXRlcnMgKGxpa2UgZG91YmxlcywgbG9uZyBsb25ncywgbG9uZyBkb3VibGVzIGFuZCBldmVuCisgKiAgdm9pZCAqIGluIDY0LWJpdCBhcmNoaXRlY3R1cmVzKS4KKyAqCisgKiBDdXJyZW50IHJlc3RyaWN0aW9uczoKKyAqIC0gTWF4IDEyOCBwYXJhbWV0ZXJzCisgKiAtIE5vICdsb25nIGRvdWJsZScgc3VwcG9ydC4KKyAqCisgKiBJZiB5b3UgZXZlciB3YW50IHRydWx5IHBvcnRhYmxlIGFuZCBnb29kICpwcmludGYoKSBjbG9uZXMsIHRoZSBwcm9qZWN0IHRoYXQKKyAqIHRvb2sgb24gZnJvbSBoZXJlIGlzIG5hbWVkICdUcmlvJyBhbmQgeW91IGZpbmQgbW9yZSBkZXRhaWxzIG9uIHRoZSB0cmlvIHdlYgorICogcGFnZSBhdCBodHRwOi8vZGFuaWVsLmhheHguc2UvdHJpby8KKyAqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmIGRlZmluZWQoREpHUFApICYmIChESkdQUF9NSU5PUiA8IDQpCisjdW5kZWYgX01QUklOVEZfUkVQTEFDRSAvKiBkb24ndCB1c2UgeF93YXNfdXNlZCgpIGhlcmUgKi8KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2lmbmRlZiBTSVpFT0ZfTE9OR19ET1VCTEUKKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFIDAKKyNlbmRpZgorCisvKgorICogSWYgU0laRU9GX1NJWkVfVCBoYXMgbm90IGJlZW4gZGVmaW5lZCwgZGVmYXVsdCB0byB0aGUgc2l6ZSBvZiBsb25nLgorICovCisKKyNpZm5kZWYgU0laRU9GX1NJWkVfVAorIyAgZGVmaW5lIFNJWkVPRl9TSVpFX1QgQ1VSTF9TSVpFT0ZfTE9ORworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xPTkdMT05HCisjICBkZWZpbmUgTE9OR19MT05HX1RZUEUgbG9uZyBsb25nCisjICBkZWZpbmUgSEFWRV9MT05HX0xPTkdfVFlQRQorI2Vsc2UKKyMgIGlmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSA5MDApICYmIChfSU5URUdSQUxfTUFYX0JJVFMgPj0gNjQpCisjICAgIGRlZmluZSBMT05HX0xPTkdfVFlQRSBfX2ludDY0CisjICAgIGRlZmluZSBIQVZFX0xPTkdfTE9OR19UWVBFCisjICBlbHNlCisjICAgIHVuZGVmIExPTkdfTE9OR19UWVBFCisjICAgIHVuZGVmIEhBVkVfTE9OR19MT05HX1RZUEUKKyMgIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIE1heCBpbnRlZ2VyIGRhdGEgdHlwZXMgdGhhdCBtcHJpbnRmLmMgaXMgY2FwYWJsZQorICovCisKKyNpZmRlZiBIQVZFX0xPTkdfTE9OR19UWVBFCisjICBkZWZpbmUgbXBfaW50bWF4X3QgTE9OR19MT05HX1RZUEUKKyMgIGRlZmluZSBtcF91aW50bWF4X3QgdW5zaWduZWQgTE9OR19MT05HX1RZUEUKKyNlbHNlCisjICBkZWZpbmUgbXBfaW50bWF4X3QgbG9uZworIyAgZGVmaW5lIG1wX3VpbnRtYXhfdCB1bnNpZ25lZCBsb25nCisjZW5kaWYKKworI2RlZmluZSBCVUZGU0laRSAyNTYgLyogYnVmZmVyIGZvciBsb25nLXRvLXN0ciBhbmQgZmxvYXQtdG8tc3RyIGNhbGNzICovCisjZGVmaW5lIE1BWF9QQVJBTUVURVJTIDEyOCAvKiBsYW1lIHN0YXRpYyBsaW1pdCAqLworCisjaWZkZWYgX19BTUlHQV9fCisjIHVuZGVmIEZPUk1BVF9JTlQKKyNlbmRpZgorCisvKiBMb3dlci1jYXNlIGRpZ2l0cy4gICovCitzdGF0aWMgY29uc3QgY2hhciBsb3dlcl9kaWdpdHNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOworCisvKiBVcHBlci1jYXNlIGRpZ2l0cy4gICovCitzdGF0aWMgY29uc3QgY2hhciB1cHBlcl9kaWdpdHNbXSA9ICIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOworCisjZGVmaW5lIE9VVENIQVIoeCkgXAorICBkb3sgXAorICAgIGlmKHN0cmVhbSgodW5zaWduZWQgY2hhcikoeCksIChGSUxFICopZGF0YSkgIT0gLTEpIFwKKyAgICAgIGRvbmUrKzsgXAorICAgIGVsc2UgXAorICAgICByZXR1cm4gZG9uZTsgLyogcmV0dXJuIGltbWVkaWF0ZWx5IG9uIGZhaWx1cmUgKi8gXAorICB9IFdISUxFX0ZBTFNFCisKKy8qIERhdGEgdHlwZSB0byByZWFkIGZyb20gdGhlIGFyZ2xpc3QgKi8KK3R5cGVkZWYgZW51bSAgeworICBGT1JNQVRfVU5LTk9XTiA9IDAsCisgIEZPUk1BVF9TVFJJTkcsCisgIEZPUk1BVF9QVFIsCisgIEZPUk1BVF9JTlQsCisgIEZPUk1BVF9JTlRQVFIsCisgIEZPUk1BVF9MT05HLAorICBGT1JNQVRfTE9OR0xPTkcsCisgIEZPUk1BVF9ET1VCTEUsCisgIEZPUk1BVF9MT05HRE9VQkxFLAorICBGT1JNQVRfV0lEVEggLyogRm9yIGludGVybmFsIHVzZSAqLworfSBGb3JtYXRUeXBlOworCisvKiBjb252ZXJzaW9uIGFuZCBkaXNwbGF5IGZsYWdzICovCitlbnVtIHsKKyAgRkxBR1NfTkVXICAgICAgICA9IDAsCisgIEZMQUdTX1NQQUNFICAgICAgPSAxPDwwLAorICBGTEFHU19TSE9XU0lHTiAgID0gMTw8MSwKKyAgRkxBR1NfTEVGVCAgICAgICA9IDE8PDIsCisgIEZMQUdTX0FMVCAgICAgICAgPSAxPDwzLAorICBGTEFHU19TSE9SVCAgICAgID0gMTw8NCwKKyAgRkxBR1NfTE9ORyAgICAgICA9IDE8PDUsCisgIEZMQUdTX0xPTkdMT05HICAgPSAxPDw2LAorICBGTEFHU19MT05HRE9VQkxFID0gMTw8NywKKyAgRkxBR1NfUEFEX05JTCAgICA9IDE8PDgsCisgIEZMQUdTX1VOU0lHTkVEICAgPSAxPDw5LAorICBGTEFHU19PQ1RBTCAgICAgID0gMTw8MTAsCisgIEZMQUdTX0hFWCAgICAgICAgPSAxPDwxMSwKKyAgRkxBR1NfVVBQRVIgICAgICA9IDE8PDEyLAorICBGTEFHU19XSURUSCAgICAgID0gMTw8MTMsIC8qICcqJyBvciAnKjxudW0+JCcgdXNlZCAqLworICBGTEFHU19XSURUSFBBUkFNID0gMTw8MTQsIC8qIHdpZHRoIFBBUkFNRVRFUiB3YXMgc3BlY2lmaWVkICovCisgIEZMQUdTX1BSRUMgICAgICAgPSAxPDwxNSwgLyogcHJlY2lzaW9uIHdhcyBzcGVjaWZpZWQgKi8KKyAgRkxBR1NfUFJFQ1BBUkFNICA9IDE8PDE2LCAvKiBwcmVjaXNpb24gUEFSQU1FVEVSIHdhcyBzcGVjaWZpZWQgKi8KKyAgRkxBR1NfQ0hBUiAgICAgICA9IDE8PDE3LCAvKiAlYyBzdG9yeSAqLworICBGTEFHU19GTE9BVEUgICAgID0gMTw8MTgsIC8qICVlIG9yICVFICovCisgIEZMQUdTX0ZMT0FURyAgICAgPSAxPDwxOSAgLyogJWcgb3IgJUcgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgRm9ybWF0VHlwZSB0eXBlOworICBpbnQgZmxhZ3M7CisgIGxvbmcgd2lkdGg7ICAgICAvKiB3aWR0aCBPUiB3aWR0aCBwYXJhbWV0ZXIgbnVtYmVyICovCisgIGxvbmcgcHJlY2lzaW9uOyAvKiBwcmVjaXNpb24gT1IgcHJlY2lzaW9uIHBhcmFtZXRlciBudW1iZXIgKi8KKyAgdW5pb24geworICAgIGNoYXIgKnN0cjsKKyAgICB2b2lkICpwdHI7CisgICAgdW5pb24geworICAgICAgbXBfaW50bWF4X3QgYXNfc2lnbmVkOworICAgICAgbXBfdWludG1heF90IGFzX3Vuc2lnbmVkOworICAgIH0gbnVtOworICAgIGRvdWJsZSBkbnVtOworICB9IGRhdGE7Cit9IHZhX3N0YWNrX3Q7CisKK3N0cnVjdCBuc3ByaW50ZiB7CisgIGNoYXIgKmJ1ZmZlcjsKKyAgc2l6ZV90IGxlbmd0aDsKKyAgc2l6ZV90IG1heDsKK307CisKK3N0cnVjdCBhc3ByaW50ZiB7CisgIGNoYXIgKmJ1ZmZlcjsgLyogYWxsb2NhdGVkIGJ1ZmZlciAqLworICBzaXplX3QgbGVuOyAgIC8qIGxlbmd0aCBvZiBzdHJpbmcgKi8KKyAgc2l6ZV90IGFsbG9jOyAvKiBsZW5ndGggb2YgYWxsb2MgKi8KKyAgaW50IGZhaWw7ICAgICAvKiAoIT0gMCkgaWYgYW4gYWxsb2MgaGFzIGZhaWxlZCBhbmQgdGh1cworICAgICAgICAgICAgICAgICAgIHRoZSBvdXRwdXQgaXMgbm90IHRoZSBjb21wbGV0ZSBkYXRhICovCit9OworCitzdGF0aWMgbG9uZyBkcHJpbnRmX0RvbGxhclN0cmluZyhjaGFyICppbnB1dCwgY2hhciAqKmVuZCkKK3sKKyAgaW50IG51bWJlcj0wOworICB3aGlsZShJU0RJR0lUKCppbnB1dCkpIHsKKyAgICBudW1iZXIgKj0gMTA7CisgICAgbnVtYmVyICs9ICppbnB1dC0nMCc7CisgICAgaW5wdXQrKzsKKyAgfQorICBpZihudW1iZXIgJiYgKCckJz09KmlucHV0KyspKSB7CisgICAgKmVuZCA9IGlucHV0OworICAgIHJldHVybiBudW1iZXI7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHByaW50Zl9Jc1F1YWxpZmllck5vRG9sbGFyKGNoYXIgYykKK3sKKyAgc3dpdGNoIChjKSB7CisgIGNhc2UgJy0nOiBjYXNlICcrJzogY2FzZSAnICc6IGNhc2UgJyMnOiBjYXNlICcuJzoKKyAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisgIGNhc2UgJ2gnOiBjYXNlICdsJzogY2FzZSAnTCc6IGNhc2UgJ3onOiBjYXNlICdxJzoKKyAgY2FzZSAnKic6IGNhc2UgJ08nOgorICAgIHJldHVybiAxOyAvKiB0cnVlICovCisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIDA7IC8qIGZhbHNlICovCisgIH0KK30KKworI2lmZGVmIERQUklOVEZfREVCVUcyCitzdGF0aWMgdm9pZCBkcHJpbnRmX1Bhc3MxUmVwb3J0KHZhX3N0YWNrX3QgKnZ0bywgaW50IG1heCkKK3sKKyAgaW50IGk7CisgIGNoYXIgYnVmZmVyWzI1Nl07CisgIGludCBiaXQ7CisgIGludCBmbGFnczsKKworICBmb3IoaT0wOyBpPG1heDsgaSsrKSB7CisgICAgY2hhciAqdHlwZTsKKyAgICBzd2l0Y2godnRvW2ldLnR5cGUpIHsKKyAgICBjYXNlIEZPUk1BVF9VTktOT1dOOgorICAgICAgdHlwZSA9ICJ1bmtub3duIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRk9STUFUX1NUUklORzoKKyAgICAgIHR5cGUgPSJzdHJpbmciOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGT1JNQVRfUFRSOgorICAgICAgdHlwZSA9InBvaW50ZXIiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGT1JNQVRfSU5UOgorICAgICAgdHlwZSA9ICJpbnQiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGT1JNQVRfSU5UUFRSOgorICAgICAgdHlwZSA9ICJpbnRwdHIiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGT1JNQVRfTE9ORzoKKyAgICAgIHR5cGUgPSAibG9uZyI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZPUk1BVF9MT05HTE9ORzoKKyAgICAgIHR5cGUgPSAibG9uZyBsb25nIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRk9STUFUX0RPVUJMRToKKyAgICAgIHR5cGUgPSAiZG91YmxlIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRk9STUFUX0xPTkdET1VCTEU6CisgICAgICB0eXBlID0gImxvbmcgZG91YmxlIjsKKyAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgYnVmZmVyWzBdPTA7CisKKyAgICBmb3IoYml0PTA7IGJpdDwzMTsgYml0KyspIHsKKyAgICAgIGZsYWdzID0gdnRvW2ldLmZsYWdzICYgKDE8PGJpdCk7CisKKyAgICAgIGlmKGZsYWdzICYgRkxBR1NfU1BBQ0UpCisgICAgICAgIHN0cmNhdChidWZmZXIsICJzcGFjZSAiKTsKKyAgICAgIGVsc2UgaWYoZmxhZ3MgJiBGTEFHU19TSE9XU0lHTikKKyAgICAgICAgc3RyY2F0KGJ1ZmZlciwgInBsdXMgIik7CisgICAgICBlbHNlIGlmKGZsYWdzICYgRkxBR1NfTEVGVCkKKyAgICAgICAgc3RyY2F0KGJ1ZmZlciwgImxlZnQgIik7CisgICAgICBlbHNlIGlmKGZsYWdzICYgRkxBR1NfQUxUKQorICAgICAgICBzdHJjYXQoYnVmZmVyLCAiYWx0ICIpOworICAgICAgZWxzZSBpZihmbGFncyAmIEZMQUdTX1NIT1JUKQorICAgICAgICBzdHJjYXQoYnVmZmVyLCAic2hvcnQgIik7CisgICAgICBlbHNlIGlmKGZsYWdzICYgRkxBR1NfTE9ORykKKyAgICAgICAgc3RyY2F0KGJ1ZmZlciwgImxvbmcgIik7CisgICAgICBlbHNlIGlmKGZsYWdzICYgRkxBR1NfTE9OR0xPTkcpCisgICAgICAgIHN0cmNhdChidWZmZXIsICJsb25nbG9uZyAiKTsKKyAgICAgIGVsc2UgaWYoZmxhZ3MgJiBGTEFHU19MT05HRE9VQkxFKQorICAgICAgICBzdHJjYXQoYnVmZmVyLCAibG9uZ2RvdWJsZSAiKTsKKyAgICAgIGVsc2UgaWYoZmxhZ3MgJiBGTEFHU19QQURfTklMKQorICAgICAgICBzdHJjYXQoYnVmZmVyLCAicGFkbmlsICIpOworICAgICAgZWxzZSBpZihmbGFncyAmIEZMQUdTX1VOU0lHTkVEKQorICAgICAgICBzdHJjYXQoYnVmZmVyLCAidW5zaWduZWQgIik7CisgICAgICBlbHNlIGlmKGZsYWdzICYgRkxBR1NfT0NUQUwpCisgICAgICAgIHN0cmNhdChidWZmZXIsICJvY3RhbCAiKTsKKyAgICAgIGVsc2UgaWYoZmxhZ3MgJiBGTEFHU19IRVgpCisgICAgICAgIHN0cmNhdChidWZmZXIsICJoZXggIik7CisgICAgICBlbHNlIGlmKGZsYWdzICYgRkxBR1NfVVBQRVIpCisgICAgICAgIHN0cmNhdChidWZmZXIsICJ1cHBlciAiKTsKKyAgICAgIGVsc2UgaWYoZmxhZ3MgJiBGTEFHU19XSURUSCkKKyAgICAgICAgc3RyY2F0KGJ1ZmZlciwgIndpZHRoICIpOworICAgICAgZWxzZSBpZihmbGFncyAmIEZMQUdTX1dJRFRIUEFSQU0pCisgICAgICAgIHN0cmNhdChidWZmZXIsICJ3aWR0aHBhcmFtICIpOworICAgICAgZWxzZSBpZihmbGFncyAmIEZMQUdTX1BSRUMpCisgICAgICAgIHN0cmNhdChidWZmZXIsICJwcmVjaXNpb24gIik7CisgICAgICBlbHNlIGlmKGZsYWdzICYgRkxBR1NfUFJFQ1BBUkFNKQorICAgICAgICBzdHJjYXQoYnVmZmVyLCAicHJlY3BhcmFtICIpOworICAgICAgZWxzZSBpZihmbGFncyAmIEZMQUdTX0NIQVIpCisgICAgICAgIHN0cmNhdChidWZmZXIsICJjaGFyICIpOworICAgICAgZWxzZSBpZihmbGFncyAmIEZMQUdTX0ZMT0FURSkKKyAgICAgICAgc3RyY2F0KGJ1ZmZlciwgImZsb2F0ZSAiKTsKKyAgICAgIGVsc2UgaWYoZmxhZ3MgJiBGTEFHU19GTE9BVEcpCisgICAgICAgIHN0cmNhdChidWZmZXIsICJmbG9hdGcgIik7CisgICAgfQorICAgIHByaW50ZigiUkVQT1JUOiAlZC4gJXMgWyVzXVxuIiwgaSwgdHlwZSwgYnVmZmVyKTsKKworICB9CisKKworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQYXNzIDE6CisgKiBDcmVhdGUgYW4gaW5kZXggd2l0aCB0aGUgdHlwZSBvZiBlYWNoIHBhcmFtZXRlciBlbnRyeSBhbmQgaXRzCisgKiB2YWx1ZSAobWF5IHZhcnkgaW4gc2l6ZSkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgbG9uZyBkcHJpbnRmX1Bhc3MxKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfc3RhY2tfdCAqdnRvLCBjaGFyICoqZW5kcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ2xpc3QpCit7CisgIGNoYXIgKmZtdCA9IChjaGFyICopZm9ybWF0OworICBpbnQgcGFyYW1fbnVtID0gMDsKKyAgbG9uZyB0aGlzX3BhcmFtOworICBsb25nIHdpZHRoOworICBsb25nIHByZWNpc2lvbjsKKyAgaW50IGZsYWdzOworICBsb25nIG1heF9wYXJhbT0wOworICBsb25nIGk7CisKKyAgd2hpbGUoKmZtdCkgeworICAgIGlmKCpmbXQrKyA9PSAnJScpIHsKKyAgICAgIGlmKCpmbXQgPT0gJyUnKSB7CisgICAgICAgIGZtdCsrOworICAgICAgICBjb250aW51ZTsgLyogd2hpbGUgKi8KKyAgICAgIH0KKworICAgICAgZmxhZ3MgPSBGTEFHU19ORVc7CisKKyAgICAgIC8qIEhhbmRsZSB0aGUgcG9zaXRpb25hbCBjYXNlIChOJCkgKi8KKworICAgICAgcGFyYW1fbnVtKys7CisKKyAgICAgIHRoaXNfcGFyYW0gPSBkcHJpbnRmX0RvbGxhclN0cmluZyhmbXQsICZmbXQpOworICAgICAgaWYoMCA9PSB0aGlzX3BhcmFtKQorICAgICAgICAvKiB3ZSBnb3Qgbm8gcG9zaXRpb25hbCwgZ2V0IHRoZSBuZXh0IGNvdW50ZXIgKi8KKyAgICAgICAgdGhpc19wYXJhbSA9IHBhcmFtX251bTsKKworICAgICAgaWYodGhpc19wYXJhbSA+IG1heF9wYXJhbSkKKyAgICAgICAgbWF4X3BhcmFtID0gdGhpc19wYXJhbTsKKworICAgICAgLyoKKyAgICAgICAqIFRoZSBwYXJhbWV0ZXIgd2l0aCBudW1iZXIgJ2knIHNob3VsZCBiZSB1c2VkLiBOZXh0LCB3ZSBuZWVkCisgICAgICAgKiB0byBnZXQgU0laRSBhbmQgVFlQRSBvZiB0aGUgcGFyYW1ldGVyLiBBZGQgdGhlIGluZm9ybWF0aW9uCisgICAgICAgKiB0byBvdXIgYXJyYXkuCisgICAgICAgKi8KKworICAgICAgd2lkdGggPSAwOworICAgICAgcHJlY2lzaW9uID0gMDsKKworICAgICAgLyogSGFuZGxlIHRoZSBmbGFncyAqLworCisgICAgICB3aGlsZShkcHJpbnRmX0lzUXVhbGlmaWVyTm9Eb2xsYXIoKmZtdCkpIHsKKyAgICAgICAgc3dpdGNoICgqZm10KyspIHsKKyAgICAgICAgY2FzZSAnICc6CisgICAgICAgICAgZmxhZ3MgfD0gRkxBR1NfU1BBQ0U7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJysnOgorICAgICAgICAgIGZsYWdzIHw9IEZMQUdTX1NIT1dTSUdOOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICBmbGFncyB8PSBGTEFHU19MRUZUOworICAgICAgICAgIGZsYWdzICY9IH5GTEFHU19QQURfTklMOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcjJzoKKyAgICAgICAgICBmbGFncyB8PSBGTEFHU19BTFQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy4nOgorICAgICAgICAgIGZsYWdzIHw9IEZMQUdTX1BSRUM7CisgICAgICAgICAgaWYoJyonID09ICpmbXQpIHsKKyAgICAgICAgICAgIC8qIFRoZSBwcmVjaXNpb24gaXMgcGlja2VkIGZyb20gYSBzcGVjaWZpZWQgcGFyYW1ldGVyICovCisKKyAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdTX1BSRUNQQVJBTTsKKyAgICAgICAgICAgIGZtdCsrOworICAgICAgICAgICAgcGFyYW1fbnVtKys7CisKKyAgICAgICAgICAgIGkgPSBkcHJpbnRmX0RvbGxhclN0cmluZyhmbXQsICZmbXQpOworICAgICAgICAgICAgaWYoaSkKKyAgICAgICAgICAgICAgcHJlY2lzaW9uID0gaTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcGFyYW1fbnVtOworCisgICAgICAgICAgICBpZihwcmVjaXNpb24gPiBtYXhfcGFyYW0pCisgICAgICAgICAgICAgIG1heF9wYXJhbSA9IHByZWNpc2lvbjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmbGFncyB8PSBGTEFHU19QUkVDOworICAgICAgICAgICAgcHJlY2lzaW9uID0gc3RydG9sKGZtdCwgJmZtdCwgMTApOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgZmxhZ3MgfD0gRkxBR1NfU0hPUlQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2wnOgorICAgICAgICAgIGlmKGZsYWdzICYgRkxBR1NfTE9ORykKKyAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdTX0xPTkdMT05HOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdTX0xPTkc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0wnOgorICAgICAgICAgIGZsYWdzIHw9IEZMQUdTX0xPTkdET1VCTEU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3EnOgorICAgICAgICAgIGZsYWdzIHw9IEZMQUdTX0xPTkdMT05HOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd6JzoKKyAgICAgICAgICAvKiB0aGUgY29kZSBiZWxvdyBnZW5lcmF0ZXMgYSB3YXJuaW5nIGlmIC1XdW5yZWFjaGFibGUtY29kZSBpcworICAgICAgICAgICAgIHVzZWQgKi8KKyNpZiAoU0laRU9GX1NJWkVfVCA+IENVUkxfU0laRU9GX0xPTkcpCisgICAgICAgICAgZmxhZ3MgfD0gRkxBR1NfTE9OR0xPTkc7CisjZWxzZQorICAgICAgICAgIGZsYWdzIHw9IEZMQUdTX0xPTkc7CisjZW5kaWYKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnTyc6CisjaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPiBDVVJMX1NJWkVPRl9MT05HKQorICAgICAgICAgIGZsYWdzIHw9IEZMQUdTX0xPTkdMT05HOworI2Vsc2UKKyAgICAgICAgICBmbGFncyB8PSBGTEFHU19MT05HOworI2VuZGlmCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJzAnOgorICAgICAgICAgIGlmKCEoZmxhZ3MgJiBGTEFHU19MRUZUKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdTX1BBRF9OSUw7CisgICAgICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICAgICAgY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKyAgICAgICAgICBmbGFncyB8PSBGTEFHU19XSURUSDsKKyAgICAgICAgICB3aWR0aCA9IHN0cnRvbChmbXQtMSwgJmZtdCwgMTApOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICcqJzogIC8qIFNwZWNpYWwgY2FzZSAqLworICAgICAgICAgIGZsYWdzIHw9IEZMQUdTX1dJRFRIUEFSQU07CisgICAgICAgICAgcGFyYW1fbnVtKys7CisKKyAgICAgICAgICBpID0gZHByaW50Zl9Eb2xsYXJTdHJpbmcoZm10LCAmZm10KTsKKyAgICAgICAgICBpZihpKQorICAgICAgICAgICAgd2lkdGggPSBpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdpZHRoID0gcGFyYW1fbnVtOworICAgICAgICAgIGlmKHdpZHRoID4gbWF4X3BhcmFtKQorICAgICAgICAgICAgbWF4X3BhcmFtPXdpZHRoOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9IC8qIHN3aXRjaCAqLworCisgICAgICAvKiBIYW5kbGUgdGhlIHNwZWNpZmllciAqLworCisgICAgICBpID0gdGhpc19wYXJhbSAtIDE7CisKKyAgICAgIHN3aXRjaCAoKmZtdCkgeworICAgICAgY2FzZSAnUyc6CisgICAgICAgIGZsYWdzIHw9IEZMQUdTX0FMVDsKKyAgICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICAgIGNhc2UgJ3MnOgorICAgICAgICB2dG9baV0udHlwZSA9IEZPUk1BVF9TVFJJTkc7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnbic6CisgICAgICAgIHZ0b1tpXS50eXBlID0gRk9STUFUX0lOVFBUUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdwJzoKKyAgICAgICAgdnRvW2ldLnR5cGUgPSBGT1JNQVRfUFRSOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2QnOiBjYXNlICdpJzoKKyAgICAgICAgdnRvW2ldLnR5cGUgPSBGT1JNQVRfSU5UOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3UnOgorICAgICAgICB2dG9baV0udHlwZSA9IEZPUk1BVF9JTlQ7CisgICAgICAgIGZsYWdzIHw9IEZMQUdTX1VOU0lHTkVEOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ28nOgorICAgICAgICB2dG9baV0udHlwZSA9IEZPUk1BVF9JTlQ7CisgICAgICAgIGZsYWdzIHw9IEZMQUdTX09DVEFMOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3gnOgorICAgICAgICB2dG9baV0udHlwZSA9IEZPUk1BVF9JTlQ7CisgICAgICAgIGZsYWdzIHw9IEZMQUdTX0hFWDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdYJzoKKyAgICAgICAgdnRvW2ldLnR5cGUgPSBGT1JNQVRfSU5UOworICAgICAgICBmbGFncyB8PSBGTEFHU19IRVh8RkxBR1NfVVBQRVI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnYyc6CisgICAgICAgIHZ0b1tpXS50eXBlID0gRk9STUFUX0lOVDsKKyAgICAgICAgZmxhZ3MgfD0gRkxBR1NfQ0hBUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdmJzoKKyAgICAgICAgdnRvW2ldLnR5cGUgPSBGT1JNQVRfRE9VQkxFOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2UnOgorICAgICAgICB2dG9baV0udHlwZSA9IEZPUk1BVF9ET1VCTEU7CisgICAgICAgIGZsYWdzIHw9IEZMQUdTX0ZMT0FURTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdFJzoKKyAgICAgICAgdnRvW2ldLnR5cGUgPSBGT1JNQVRfRE9VQkxFOworICAgICAgICBmbGFncyB8PSBGTEFHU19GTE9BVEV8RkxBR1NfVVBQRVI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnZyc6CisgICAgICAgIHZ0b1tpXS50eXBlID0gRk9STUFUX0RPVUJMRTsKKyAgICAgICAgZmxhZ3MgfD0gRkxBR1NfRkxPQVRHOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ0cnOgorICAgICAgICB2dG9baV0udHlwZSA9IEZPUk1BVF9ET1VCTEU7CisgICAgICAgIGZsYWdzIHw9IEZMQUdTX0ZMT0FUR3xGTEFHU19VUFBFUjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICB2dG9baV0udHlwZSA9IEZPUk1BVF9VTktOT1dOOworICAgICAgICBicmVhazsKKyAgICAgIH0gLyogc3dpdGNoICovCisKKyAgICAgIHZ0b1tpXS5mbGFncyA9IGZsYWdzOworICAgICAgdnRvW2ldLndpZHRoID0gd2lkdGg7CisgICAgICB2dG9baV0ucHJlY2lzaW9uID0gcHJlY2lzaW9uOworCisgICAgICBpZihmbGFncyAmIEZMQUdTX1dJRFRIUEFSQU0pIHsKKyAgICAgICAgLyogd2UgaGF2ZSB0aGUgd2lkdGggc3BlY2lmaWVkIGZyb20gYSBwYXJhbWV0ZXIsIHNvIHdlIG1ha2UgdGhhdAorICAgICAgICAgICBwYXJhbWV0ZXIncyBpbmZvIHNldHVwIHByb3Blcmx5ICovCisgICAgICAgIHZ0b1tpXS53aWR0aCA9IHdpZHRoIC0gMTsKKyAgICAgICAgaSA9IHdpZHRoIC0gMTsKKyAgICAgICAgdnRvW2ldLnR5cGUgPSBGT1JNQVRfV0lEVEg7CisgICAgICAgIHZ0b1tpXS5mbGFncyA9IEZMQUdTX05FVzsKKyAgICAgICAgdnRvW2ldLnByZWNpc2lvbiA9IHZ0b1tpXS53aWR0aCA9IDA7IC8qIGNhbid0IHVzZSB3aWR0aCBvciBwcmVjaXNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHdpZHRoISAqLworICAgICAgfQorICAgICAgaWYoZmxhZ3MgJiBGTEFHU19QUkVDUEFSQU0pIHsKKyAgICAgICAgLyogd2UgaGF2ZSB0aGUgcHJlY2lzaW9uIHNwZWNpZmllZCBmcm9tIGEgcGFyYW1ldGVyLCBzbyB3ZSBtYWtlIHRoYXQKKyAgICAgICAgICAgcGFyYW1ldGVyJ3MgaW5mbyBzZXR1cCBwcm9wZXJseSAqLworICAgICAgICB2dG9baV0ucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gMTsKKyAgICAgICAgaSA9IHByZWNpc2lvbiAtIDE7CisgICAgICAgIHZ0b1tpXS50eXBlID0gRk9STUFUX1dJRFRIOworICAgICAgICB2dG9baV0uZmxhZ3MgPSBGTEFHU19ORVc7CisgICAgICAgIHZ0b1tpXS5wcmVjaXNpb24gPSB2dG9baV0ud2lkdGggPSAwOyAvKiBjYW4ndCB1c2Ugd2lkdGggb3IgcHJlY2lzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB3aWR0aCEgKi8KKyAgICAgIH0KKyAgICAgICplbmRwb3MrKyA9IGZtdCArIDE7IC8qIGVuZCBvZiB0aGlzIHNlcXVlbmNlICovCisgICAgfQorICB9CisKKyNpZmRlZiBEUFJJTlRGX0RFQlVHMgorICBkcHJpbnRmX1Bhc3MxUmVwb3J0KHZ0bywgbWF4X3BhcmFtKTsKKyNlbmRpZgorCisgIC8qIFJlYWQgdGhlIGFyZyBsaXN0IHBhcmFtZXRlcnMgaW50byBvdXIgZGF0YSBsaXN0ICovCisgIGZvcihpPTA7IGk8bWF4X3BhcmFtOyBpKyspIHsKKyAgICBpZigoaSArIDEgPCBtYXhfcGFyYW0pICYmICh2dG9baSArIDFdLnR5cGUgPT0gRk9STUFUX1dJRFRIKSkgeworICAgICAgLyogV2lkdGgvcHJlY2lzaW9uIGFyZ3VtZW50cyBtdXN0IGJlIHJlYWQgYmVmb3JlIHRoZSBtYWluIGFyZ3VtZW50CisgICAgICAgKiB0aGV5IGFyZSBhdHRhY2hlZCB0bworICAgICAgICovCisgICAgICB2dG9baSArIDFdLmRhdGEubnVtLmFzX3NpZ25lZCA9IChtcF9pbnRtYXhfdCl2YV9hcmcoYXJnbGlzdCwgaW50KTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHZ0b1tpXS50eXBlKSB7CisgICAgY2FzZSBGT1JNQVRfU1RSSU5HOgorICAgICAgdnRvW2ldLmRhdGEuc3RyID0gdmFfYXJnKGFyZ2xpc3QsIGNoYXIgKik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRk9STUFUX0lOVFBUUjoKKyAgICBjYXNlIEZPUk1BVF9VTktOT1dOOgorICAgIGNhc2UgRk9STUFUX1BUUjoKKyAgICAgIHZ0b1tpXS5kYXRhLnB0ciA9IHZhX2FyZyhhcmdsaXN0LCB2b2lkICopOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZPUk1BVF9JTlQ6CisjaWZkZWYgSEFWRV9MT05HX0xPTkdfVFlQRQorICAgICAgaWYoKHZ0b1tpXS5mbGFncyAmIEZMQUdTX0xPTkdMT05HKSAmJiAodnRvW2ldLmZsYWdzICYgRkxBR1NfVU5TSUdORUQpKQorICAgICAgICB2dG9baV0uZGF0YS5udW0uYXNfdW5zaWduZWQgPQorICAgICAgICAgIChtcF91aW50bWF4X3QpdmFfYXJnKGFyZ2xpc3QsIG1wX3VpbnRtYXhfdCk7CisgICAgICBlbHNlIGlmKHZ0b1tpXS5mbGFncyAmIEZMQUdTX0xPTkdMT05HKQorICAgICAgICB2dG9baV0uZGF0YS5udW0uYXNfc2lnbmVkID0KKyAgICAgICAgICAobXBfaW50bWF4X3QpdmFfYXJnKGFyZ2xpc3QsIG1wX2ludG1heF90KTsKKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgeworICAgICAgICBpZigodnRvW2ldLmZsYWdzICYgRkxBR1NfTE9ORykgJiYgKHZ0b1tpXS5mbGFncyAmIEZMQUdTX1VOU0lHTkVEKSkKKyAgICAgICAgICB2dG9baV0uZGF0YS5udW0uYXNfdW5zaWduZWQgPQorICAgICAgICAgICAgKG1wX3VpbnRtYXhfdCl2YV9hcmcoYXJnbGlzdCwgdW5zaWduZWQgbG9uZyk7CisgICAgICAgIGVsc2UgaWYodnRvW2ldLmZsYWdzICYgRkxBR1NfTE9ORykKKyAgICAgICAgICB2dG9baV0uZGF0YS5udW0uYXNfc2lnbmVkID0KKyAgICAgICAgICAgIChtcF9pbnRtYXhfdCl2YV9hcmcoYXJnbGlzdCwgbG9uZyk7CisgICAgICAgIGVsc2UgaWYodnRvW2ldLmZsYWdzICYgRkxBR1NfVU5TSUdORUQpCisgICAgICAgICAgdnRvW2ldLmRhdGEubnVtLmFzX3Vuc2lnbmVkID0KKyAgICAgICAgICAgIChtcF91aW50bWF4X3QpdmFfYXJnKGFyZ2xpc3QsIHVuc2lnbmVkIGludCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB2dG9baV0uZGF0YS5udW0uYXNfc2lnbmVkID0KKyAgICAgICAgICAgIChtcF9pbnRtYXhfdCl2YV9hcmcoYXJnbGlzdCwgaW50KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGT1JNQVRfRE9VQkxFOgorICAgICAgdnRvW2ldLmRhdGEuZG51bSA9IHZhX2FyZyhhcmdsaXN0LCBkb3VibGUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZPUk1BVF9XSURUSDoKKyAgICAgIC8qIEFyZ3VtZW50IGhhcyBiZWVuIHJlYWQuIFNpbGVudGx5IGNvbnZlcnQgaXQgaW50byBhbiBpbnRlZ2VyCisgICAgICAgKiBmb3IgbGF0ZXIgdXNlCisgICAgICAgKi8KKyAgICAgIHZ0b1tpXS50eXBlID0gRk9STUFUX0lOVDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJldHVybiBtYXhfcGFyYW07CisKK30KKworc3RhdGljIGludCBkcHJpbnRmX2Zvcm1hdGYoCisgIHZvaWQgKmRhdGEsIC8qIHVudG91Y2hlZCBieSBmb3JtYXQoKSwganVzdCBzZW50IHRvIHRoZSBzdHJlYW0oKSBmdW5jdGlvbiBpbgorICAgICAgICAgICAgICAgICB0aGUgc2Vjb25kIGFyZ3VtZW50ICovCisgIC8qIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGVkIGZvciBlYWNoIG91dHB1dCBjaGFyYWN0ZXIgKi8KKyAgaW50ICgqc3RyZWFtKShpbnQsIEZJTEUgKiksCisgIGNvbnN0IGNoYXIgKmZvcm1hdCwgICAgLyogJS1mb3JtYXR0ZWQgc3RyaW5nICovCisgIHZhX2xpc3QgYXBfc2F2ZSkgLyogbGlzdCBvZiBwYXJhbWV0ZXJzICovCit7CisgIC8qIEJhc2UtMzYgZGlnaXRzIGZvciBudW1iZXJzLiAgKi8KKyAgY29uc3QgY2hhciAqZGlnaXRzID0gbG93ZXJfZGlnaXRzOworCisgIC8qIFBvaW50ZXIgaW50byB0aGUgZm9ybWF0IHN0cmluZy4gICovCisgIGNoYXIgKmY7CisKKyAgLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbi4gICovCisgIGludCBkb25lID0gMDsKKworICBsb25nIHBhcmFtOyAvKiBjdXJyZW50IHBhcmFtZXRlciB0byByZWFkICovCisgIGxvbmcgcGFyYW1fbnVtPTA7IC8qIHBhcmFtZXRlciBjb3VudGVyICovCisKKyAgdmFfc3RhY2tfdCB2dG9bTUFYX1BBUkFNRVRFUlNdOworICBjaGFyICplbmRwb3NbTUFYX1BBUkFNRVRFUlNdOworICBjaGFyICoqZW5kOworCisgIGNoYXIgd29ya1tCVUZGU0laRV07CisKKyAgdmFfc3RhY2tfdCAqcDsKKworICAvKiBEbyB0aGUgYWN0dWFsICUtY29kZSBwYXJzaW5nICovCisgIGRwcmludGZfUGFzczEoZm9ybWF0LCB2dG8sIGVuZHBvcywgYXBfc2F2ZSk7CisKKyAgZW5kID0gJmVuZHBvc1swXTsgLyogdGhlIGluaXRpYWwgZW5kLXBvc2l0aW9uIGZyb20gdGhlIGxpc3QgZHByaW50Zl9QYXNzMSgpCisgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgZm9yIHVzICovCisKKyAgZiA9IChjaGFyICopZm9ybWF0OworICB3aGlsZSgqZiAhPSAnXDAnKSB7CisgICAgLyogRm9ybWF0IHNwZWMgbW9kaWZpZXJzLiAgKi8KKyAgICBpbnQgaXNfYWx0OworCisgICAgLyogV2lkdGggb2YgYSBmaWVsZC4gICovCisgICAgbG9uZyB3aWR0aDsKKworICAgIC8qIFByZWNpc2lvbiBvZiBhIGZpZWxkLiAgKi8KKyAgICBsb25nIHByZWM7CisKKyAgICAvKiBEZWNpbWFsIGludGVnZXIgaXMgbmVnYXRpdmUuICAqLworICAgIGludCBpc19uZWc7CisKKyAgICAvKiBCYXNlIG9mIGEgbnVtYmVyIHRvIGJlIHdyaXR0ZW4uICAqLworICAgIGxvbmcgYmFzZTsKKworICAgIC8qIEludGVncmFsIHZhbHVlcyB0byBiZSB3cml0dGVuLiAgKi8KKyAgICBtcF91aW50bWF4X3QgbnVtOworCisgICAgLyogVXNlZCB0byBjb252ZXJ0IG5lZ2F0aXZlIGluIHBvc2l0aXZlLiAgKi8KKyAgICBtcF9pbnRtYXhfdCBzaWduZWRfbnVtOworCisgICAgaWYoKmYgIT0gJyUnKSB7CisgICAgICAvKiBUaGlzIGlzbid0IGEgZm9ybWF0IHNwZWMsIHNvIHdyaXRlIGV2ZXJ5dGhpbmcgb3V0IHVudGlsIHRoZSBuZXh0IG9uZQorICAgICAgICAgT1IgZW5kIG9mIHN0cmluZyBpcyByZWFjaGVkLiAgKi8KKyAgICAgIGRvIHsKKyAgICAgICAgT1VUQ0hBUigqZik7CisgICAgICB9IHdoaWxlKCorK2YgJiYgKCclJyAhPSAqZikpOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgKytmOworCisgICAgLyogQ2hlY2sgZm9yICIlJSIuICBOb3RlIHRoYXQgYWx0aG91Z2ggdGhlIEFOU0kgc3RhbmRhcmQgbGlzdHMKKyAgICAgICAnJScgYXMgYSBjb252ZXJzaW9uIHNwZWNpZmllciwgaXQgc2F5cyAiVGhlIGNvbXBsZXRlIGZvcm1hdAorICAgICAgIHNwZWNpZmljYXRpb24gc2hhbGwgYmUgYCUlJywiIHNvIHdlIGNhbiBhdm9pZCBhbGwgdGhlIHdpZHRoCisgICAgICAgYW5kIHByZWNpc2lvbiBwcm9jZXNzaW5nLiAgKi8KKyAgICBpZigqZiA9PSAnJScpIHsKKyAgICAgICsrZjsKKyAgICAgIE9VVENIQVIoJyUnKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsIHBhcmFtZXRlciwgdGhlIHBvc2l0aW9uIG11c3QgZm9sbG93IGltbWVkaWF0ZWx5CisgICAgICAgYWZ0ZXIgdGhlICUsIHRodXMgY3JlYXRlIGEgJTxudW0+JCBzZXF1ZW5jZSAqLworICAgIHBhcmFtPWRwcmludGZfRG9sbGFyU3RyaW5nKGYsICZmKTsKKworICAgIGlmKCFwYXJhbSkKKyAgICAgIHBhcmFtID0gcGFyYW1fbnVtOworICAgIGVsc2UKKyAgICAgIC0tcGFyYW07CisKKyAgICBwYXJhbV9udW0rKzsgLyogaW5jcmVhc2UgdGhpcyBhbHdheXMgdG8gYWxsb3cgIiUyJHMgJTEkcyAlcyIgYW5kIHRoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHRoaXJkICVzIHdpbGwgcGljayB0aGUgM3JkIGFyZ3VtZW50ICovCisKKyAgICBwID0gJnZ0b1twYXJhbV07CisKKyAgICAvKiBwaWNrIHVwIHRoZSBzcGVjaWZpZWQgd2lkdGggKi8KKyAgICBpZihwLT5mbGFncyAmIEZMQUdTX1dJRFRIUEFSQU0pCisgICAgICB3aWR0aCA9IChsb25nKXZ0b1twLT53aWR0aF0uZGF0YS5udW0uYXNfc2lnbmVkOworICAgIGVsc2UKKyAgICAgIHdpZHRoID0gcC0+d2lkdGg7CisKKyAgICAvKiBwaWNrIHVwIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uICovCisgICAgaWYocC0+ZmxhZ3MgJiBGTEFHU19QUkVDUEFSQU0pIHsKKyAgICAgIHByZWMgPSAobG9uZyl2dG9bcC0+cHJlY2lzaW9uXS5kYXRhLm51bS5hc19zaWduZWQ7CisgICAgICBwYXJhbV9udW0rKzsgLyogc2luY2UgdGhlIHByZWNpc2lvbiBpcyBleHRyYWNlZCBmcm9tIGEgcGFyYW1ldGVyLCB3ZQorICAgICAgICAgICAgICAgICAgICAgIG11c3Qgc2tpcCB0aGF0IHRvIGdldCB0byB0aGUgbmV4dCBvbmUgcHJvcGVybHkgKi8KKyAgICB9CisgICAgZWxzZSBpZihwLT5mbGFncyAmIEZMQUdTX1BSRUMpCisgICAgICBwcmVjID0gcC0+cHJlY2lzaW9uOworICAgIGVsc2UKKyAgICAgIHByZWMgPSAtMTsKKworICAgIGlzX2FsdCA9IChwLT5mbGFncyAmIEZMQUdTX0FMVCkgPyAxIDogMDsKKworICAgIHN3aXRjaCAocC0+dHlwZSkgeworICAgIGNhc2UgRk9STUFUX0lOVDoKKyAgICAgIG51bSA9IHAtPmRhdGEubnVtLmFzX3Vuc2lnbmVkOworICAgICAgaWYocC0+ZmxhZ3MgJiBGTEFHU19DSEFSKSB7CisgICAgICAgIC8qIENoYXJhY3Rlci4gICovCisgICAgICAgIGlmKCEocC0+ZmxhZ3MgJiBGTEFHU19MRUZUKSkKKyAgICAgICAgICB3aGlsZSgtLXdpZHRoID4gMCkKKyAgICAgICAgICAgIE9VVENIQVIoJyAnKTsKKyAgICAgICAgT1VUQ0hBUigoY2hhcikgbnVtKTsKKyAgICAgICAgaWYocC0+ZmxhZ3MgJiBGTEFHU19MRUZUKQorICAgICAgICAgIHdoaWxlKC0td2lkdGggPiAwKQorICAgICAgICAgICAgT1VUQ0hBUignICcpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKHAtPmZsYWdzICYgRkxBR1NfVU5TSUdORUQpIHsKKyAgICAgICAgLyogRGVjaW1hbCB1bnNpZ25lZCBpbnRlZ2VyLiAgKi8KKyAgICAgICAgYmFzZSA9IDEwOworICAgICAgICBnb3RvIHVuc2lnbmVkX251bWJlcjsKKyAgICAgIH0KKyAgICAgIGlmKHAtPmZsYWdzICYgRkxBR1NfT0NUQUwpIHsKKyAgICAgICAgLyogT2N0YWwgdW5zaWduZWQgaW50ZWdlci4gICovCisgICAgICAgIGJhc2UgPSA4OworICAgICAgICBnb3RvIHVuc2lnbmVkX251bWJlcjsKKyAgICAgIH0KKyAgICAgIGlmKHAtPmZsYWdzICYgRkxBR1NfSEVYKSB7CisgICAgICAgIC8qIEhleGFkZWNpbWFsIHVuc2lnbmVkIGludGVnZXIuICAqLworCisgICAgICAgIGRpZ2l0cyA9IChwLT5mbGFncyAmIEZMQUdTX1VQUEVSKT8gdXBwZXJfZGlnaXRzIDogbG93ZXJfZGlnaXRzOworICAgICAgICBiYXNlID0gMTY7CisgICAgICAgIGdvdG8gdW5zaWduZWRfbnVtYmVyOworICAgICAgfQorCisgICAgICAvKiBEZWNpbWFsIGludGVnZXIuICAqLworICAgICAgYmFzZSA9IDEwOworCisgICAgICBpc19uZWcgPSAocC0+ZGF0YS5udW0uYXNfc2lnbmVkIDwgKG1wX2ludG1heF90KTApID8gMSA6IDA7CisgICAgICBpZihpc19uZWcpIHsKKyAgICAgICAgLyogc2lnbmVkX251bSBtaWdodCBmYWlsIHRvIGhvbGQgYWJzb2x1dGUgbmVnYXRpdmUgbWluaW11bSBieSAxICovCisgICAgICAgIHNpZ25lZF9udW0gPSBwLT5kYXRhLm51bS5hc19zaWduZWQgKyAobXBfaW50bWF4X3QpMTsKKyAgICAgICAgc2lnbmVkX251bSA9IC1zaWduZWRfbnVtOworICAgICAgICBudW0gPSAobXBfdWludG1heF90KXNpZ25lZF9udW07CisgICAgICAgIG51bSArPSAobXBfdWludG1heF90KTE7CisgICAgICB9CisKKyAgICAgIGdvdG8gbnVtYmVyOworCisgICAgICB1bnNpZ25lZF9udW1iZXI6CisgICAgICAvKiBVbnNpZ25lZCBudW1iZXIgb2YgYmFzZSBCQVNFLiAgKi8KKyAgICAgIGlzX25lZyA9IDA7CisKKyAgICAgIG51bWJlcjoKKyAgICAgIC8qIE51bWJlciBvZiBiYXNlIEJBU0UuICAqLworICAgICAgeworICAgICAgICBjaGFyICp3b3JrZW5kID0gJndvcmtbc2l6ZW9mKHdvcmspIC0gMV07CisgICAgICAgIGNoYXIgKnc7CisKKyAgICAgICAgLyogU3VwcGx5IGEgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm9uZSB3YXMgZ2l2ZW4uICAqLworICAgICAgICBpZihwcmVjID09IC0xKQorICAgICAgICAgIHByZWMgPSAxOworCisgICAgICAgIC8qIFB1dCB0aGUgbnVtYmVyIGluIFdPUksuICAqLworICAgICAgICB3ID0gd29ya2VuZDsKKyAgICAgICAgd2hpbGUobnVtID4gMCkgeworICAgICAgICAgICp3LS0gPSBkaWdpdHNbbnVtICUgYmFzZV07CisgICAgICAgICAgbnVtIC89IGJhc2U7CisgICAgICAgIH0KKyAgICAgICAgd2lkdGggLT0gKGxvbmcpKHdvcmtlbmQgLSB3KTsKKyAgICAgICAgcHJlYyAtPSAobG9uZykod29ya2VuZCAtIHcpOworCisgICAgICAgIGlmKGlzX2FsdCAmJiBiYXNlID09IDggJiYgcHJlYyA8PSAwKSB7CisgICAgICAgICAgKnctLSA9ICcwJzsKKyAgICAgICAgICAtLXdpZHRoOworICAgICAgICB9CisKKyAgICAgICAgaWYocHJlYyA+IDApIHsKKyAgICAgICAgICB3aWR0aCAtPSBwcmVjOworICAgICAgICAgIHdoaWxlKHByZWMtLSA+IDApCisgICAgICAgICAgICAqdy0tID0gJzAnOworICAgICAgICB9CisKKyAgICAgICAgaWYoaXNfYWx0ICYmIGJhc2UgPT0gMTYpCisgICAgICAgICAgd2lkdGggLT0gMjsKKworICAgICAgICBpZihpc19uZWcgfHwgKHAtPmZsYWdzICYgRkxBR1NfU0hPV1NJR04pIHx8IChwLT5mbGFncyAmIEZMQUdTX1NQQUNFKSkKKyAgICAgICAgICAtLXdpZHRoOworCisgICAgICAgIGlmKCEocC0+ZmxhZ3MgJiBGTEFHU19MRUZUKSAmJiAhKHAtPmZsYWdzICYgRkxBR1NfUEFEX05JTCkpCisgICAgICAgICAgd2hpbGUod2lkdGgtLSA+IDApCisgICAgICAgICAgICBPVVRDSEFSKCcgJyk7CisKKyAgICAgICAgaWYoaXNfbmVnKQorICAgICAgICAgIE9VVENIQVIoJy0nKTsKKyAgICAgICAgZWxzZSBpZihwLT5mbGFncyAmIEZMQUdTX1NIT1dTSUdOKQorICAgICAgICAgIE9VVENIQVIoJysnKTsKKyAgICAgICAgZWxzZSBpZihwLT5mbGFncyAmIEZMQUdTX1NQQUNFKQorICAgICAgICAgIE9VVENIQVIoJyAnKTsKKworICAgICAgICBpZihpc19hbHQgJiYgYmFzZSA9PSAxNikgeworICAgICAgICAgIE9VVENIQVIoJzAnKTsKKyAgICAgICAgICBpZihwLT5mbGFncyAmIEZMQUdTX1VQUEVSKQorICAgICAgICAgICAgT1VUQ0hBUignWCcpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE9VVENIQVIoJ3gnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCEocC0+ZmxhZ3MgJiBGTEFHU19MRUZUKSAmJiAocC0+ZmxhZ3MgJiBGTEFHU19QQURfTklMKSkKKyAgICAgICAgICB3aGlsZSh3aWR0aC0tID4gMCkKKyAgICAgICAgICAgIE9VVENIQVIoJzAnKTsKKworICAgICAgICAvKiBXcml0ZSB0aGUgbnVtYmVyLiAgKi8KKyAgICAgICAgd2hpbGUoKyt3IDw9IHdvcmtlbmQpIHsKKyAgICAgICAgICBPVVRDSEFSKCp3KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHAtPmZsYWdzICYgRkxBR1NfTEVGVCkKKyAgICAgICAgICB3aGlsZSh3aWR0aC0tID4gMCkKKyAgICAgICAgICAgIE9VVENIQVIoJyAnKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGT1JNQVRfU1RSSU5HOgorICAgICAgICAgICAgLyogU3RyaW5nLiAgKi8KKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgbnVsbFtdID0gIihuaWwpIjsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyOworICAgICAgICBzaXplX3QgbGVuOworCisgICAgICAgIHN0ciA9IChjaGFyICopIHAtPmRhdGEuc3RyOworICAgICAgICBpZihzdHIgPT0gTlVMTCkgeworICAgICAgICAgIC8qIFdyaXRlIG51bGxbXSBpZiB0aGVyZSdzIHNwYWNlLiAgKi8KKyAgICAgICAgICBpZihwcmVjID09IC0xIHx8IHByZWMgPj0gKGxvbmcpIHNpemVvZihudWxsKSAtIDEpIHsKKyAgICAgICAgICAgIHN0ciA9IG51bGw7CisgICAgICAgICAgICBsZW4gPSBzaXplb2YobnVsbCkgLSAxOworICAgICAgICAgICAgLyogRGlzYWJsZSBxdW90ZXMgYXJvdW5kIChuaWwpICovCisgICAgICAgICAgICBwLT5mbGFncyAmPSAofkZMQUdTX0FMVCk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3RyID0gIiI7CisgICAgICAgICAgICBsZW4gPSAwOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgbGVuID0gc3RybGVuKHN0cik7CisKKyAgICAgICAgaWYocHJlYyAhPSAtMSAmJiAoc2l6ZV90KSBwcmVjIDwgbGVuKQorICAgICAgICAgIGxlbiA9IChzaXplX3QpcHJlYzsKKyAgICAgICAgd2lkdGggLT0gKGxvbmcpbGVuOworCisgICAgICAgIGlmKHAtPmZsYWdzICYgRkxBR1NfQUxUKQorICAgICAgICAgIE9VVENIQVIoJyInKTsKKworICAgICAgICBpZighKHAtPmZsYWdzJkZMQUdTX0xFRlQpKQorICAgICAgICAgIHdoaWxlKHdpZHRoLS0gPiAwKQorICAgICAgICAgICAgT1VUQ0hBUignICcpOworCisgICAgICAgIHdoaWxlKGxlbi0tID4gMCkKKyAgICAgICAgICBPVVRDSEFSKCpzdHIrKyk7CisgICAgICAgIGlmKHAtPmZsYWdzJkZMQUdTX0xFRlQpCisgICAgICAgICAgd2hpbGUod2lkdGgtLSA+IDApCisgICAgICAgICAgICBPVVRDSEFSKCcgJyk7CisKKyAgICAgICAgaWYocC0+ZmxhZ3MgJiBGTEFHU19BTFQpCisgICAgICAgICAgT1VUQ0hBUignIicpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZPUk1BVF9QVFI6CisgICAgICAvKiBHZW5lcmljIHBvaW50ZXIuICAqLworICAgICAgeworICAgICAgICB2b2lkICpwdHI7CisgICAgICAgIHB0ciA9ICh2b2lkICopIHAtPmRhdGEucHRyOworICAgICAgICBpZihwdHIgIT0gTlVMTCkgeworICAgICAgICAgIC8qIElmIHRoZSBwb2ludGVyIGlzIG5vdCBOVUxMLCB3cml0ZSBpdCBhcyBhICUjeCBzcGVjLiAgKi8KKyAgICAgICAgICBiYXNlID0gMTY7CisgICAgICAgICAgZGlnaXRzID0gKHAtPmZsYWdzICYgRkxBR1NfVVBQRVIpPyB1cHBlcl9kaWdpdHMgOiBsb3dlcl9kaWdpdHM7CisgICAgICAgICAgaXNfYWx0ID0gMTsKKyAgICAgICAgICBudW0gPSAoc2l6ZV90KSBwdHI7CisgICAgICAgICAgaXNfbmVnID0gMDsKKyAgICAgICAgICBnb3RvIG51bWJlcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiBXcml0ZSAiKG5pbCkiIGZvciBhIG5pbCBwb2ludGVyLiAgKi8KKyAgICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBzdHJuaWxbXSA9ICIobmlsKSI7CisgICAgICAgICAgY29uc3QgY2hhciAqcG9pbnQ7CisKKyAgICAgICAgICB3aWR0aCAtPSAobG9uZykoc2l6ZW9mKHN0cm5pbCkgLSAxKTsKKyAgICAgICAgICBpZihwLT5mbGFncyAmIEZMQUdTX0xFRlQpCisgICAgICAgICAgICB3aGlsZSh3aWR0aC0tID4gMCkKKyAgICAgICAgICAgICAgT1VUQ0hBUignICcpOworICAgICAgICAgIGZvcihwb2ludCA9IHN0cm5pbDsgKnBvaW50ICE9ICdcMCc7ICsrcG9pbnQpCisgICAgICAgICAgICBPVVRDSEFSKCpwb2ludCk7CisgICAgICAgICAgaWYoISAocC0+ZmxhZ3MgJiBGTEFHU19MRUZUKSkKKyAgICAgICAgICAgIHdoaWxlKHdpZHRoLS0gPiAwKQorICAgICAgICAgICAgICBPVVRDSEFSKCcgJyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGT1JNQVRfRE9VQkxFOgorICAgICAgeworICAgICAgICBjaGFyIGZvcm1hdGJ1ZlszMl09IiUiOworICAgICAgICBjaGFyICpmcHRyOworICAgICAgICBzaXplX3QgbGVmdCA9IHNpemVvZihmb3JtYXRidWYpLXN0cmxlbihmb3JtYXRidWYpOworICAgICAgICBpbnQgbGVuOworCisgICAgICAgIHdpZHRoID0gLTE7CisgICAgICAgIGlmKHAtPmZsYWdzICYgRkxBR1NfV0lEVEgpCisgICAgICAgICAgd2lkdGggPSBwLT53aWR0aDsKKyAgICAgICAgZWxzZSBpZihwLT5mbGFncyAmIEZMQUdTX1dJRFRIUEFSQU0pCisgICAgICAgICAgd2lkdGggPSAobG9uZyl2dG9bcC0+d2lkdGhdLmRhdGEubnVtLmFzX3NpZ25lZDsKKworICAgICAgICBwcmVjID0gLTE7CisgICAgICAgIGlmKHAtPmZsYWdzICYgRkxBR1NfUFJFQykKKyAgICAgICAgICBwcmVjID0gcC0+cHJlY2lzaW9uOworICAgICAgICBlbHNlIGlmKHAtPmZsYWdzICYgRkxBR1NfUFJFQ1BBUkFNKQorICAgICAgICAgIHByZWMgPSAobG9uZyl2dG9bcC0+cHJlY2lzaW9uXS5kYXRhLm51bS5hc19zaWduZWQ7CisKKyAgICAgICAgaWYocC0+ZmxhZ3MgJiBGTEFHU19MRUZUKQorICAgICAgICAgIHN0cmNhdChmb3JtYXRidWYsICItIik7CisgICAgICAgIGlmKHAtPmZsYWdzICYgRkxBR1NfU0hPV1NJR04pCisgICAgICAgICAgc3RyY2F0KGZvcm1hdGJ1ZiwgIisiKTsKKyAgICAgICAgaWYocC0+ZmxhZ3MgJiBGTEFHU19TUEFDRSkKKyAgICAgICAgICBzdHJjYXQoZm9ybWF0YnVmLCAiICIpOworICAgICAgICBpZihwLT5mbGFncyAmIEZMQUdTX0FMVCkKKyAgICAgICAgICBzdHJjYXQoZm9ybWF0YnVmLCAiIyIpOworCisgICAgICAgIGZwdHI9JmZvcm1hdGJ1ZltzdHJsZW4oZm9ybWF0YnVmKV07CisKKyAgICAgICAgaWYod2lkdGggPj0gMCkgeworICAgICAgICAgIC8qIFJFQ1VSU0lWRSBVU0FHRSAqLworICAgICAgICAgIGxlbiA9IGN1cmxfbXNucHJpbnRmKGZwdHIsIGxlZnQsICIlbGQiLCB3aWR0aCk7CisgICAgICAgICAgZnB0ciArPSBsZW47CisgICAgICAgICAgbGVmdCAtPSBsZW47CisgICAgICAgIH0KKyAgICAgICAgaWYocHJlYyA+PSAwKSB7CisgICAgICAgICAgLyogUkVDVVJTSVZFIFVTQUdFICovCisgICAgICAgICAgbGVuID0gY3VybF9tc25wcmludGYoZnB0ciwgbGVmdCwgIi4lbGQiLCBwcmVjKTsKKyAgICAgICAgICBmcHRyICs9IGxlbjsKKyAgICAgICAgfQorICAgICAgICBpZihwLT5mbGFncyAmIEZMQUdTX0xPTkcpCisgICAgICAgICAgKmZwdHIrKyA9ICdsJzsKKworICAgICAgICBpZihwLT5mbGFncyAmIEZMQUdTX0ZMT0FURSkKKyAgICAgICAgICAqZnB0cisrID0gKGNoYXIpKChwLT5mbGFncyAmIEZMQUdTX1VQUEVSKSA/ICdFJzonZScpOworICAgICAgICBlbHNlIGlmKHAtPmZsYWdzICYgRkxBR1NfRkxPQVRHKQorICAgICAgICAgICpmcHRyKysgPSAoY2hhcikoKHAtPmZsYWdzICYgRkxBR1NfVVBQRVIpID8gJ0cnIDogJ2cnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICpmcHRyKysgPSAnZic7CisKKyAgICAgICAgKmZwdHIgPSAwOyAvKiBhbmQgYSBmaW5hbCB6ZXJvIHRlcm1pbmF0aW9uICovCisKKyAgICAgICAgLyogTk9URSBOT1RFIE5PVEUhISBOb3QgYWxsIHNwcmludGYoKSBpbXBsZW1lbnRhdGlvbnMgcmV0dXJucyBudW1iZXIKKyAgICAgICAgICAgb2Ygb3V0cHV0IGNoYXJhY3RlcnMgKi8KKyAgICAgICAgKHNwcmludGYpKHdvcmssIGZvcm1hdGJ1ZiwgcC0+ZGF0YS5kbnVtKTsKKworICAgICAgICBmb3IoZnB0cj13b3JrOyAqZnB0cjsgZnB0cisrKQorICAgICAgICAgIE9VVENIQVIoKmZwdHIpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZPUk1BVF9JTlRQVFI6CisgICAgICAvKiBBbnN3ZXIgdGhlIGNvdW50IG9mIGNoYXJhY3RlcnMgd3JpdHRlbi4gICovCisjaWZkZWYgSEFWRV9MT05HX0xPTkdfVFlQRQorICAgICAgaWYocC0+ZmxhZ3MgJiBGTEFHU19MT05HTE9ORykKKyAgICAgICAgKihMT05HX0xPTkdfVFlQRSAqKSBwLT5kYXRhLnB0ciA9IChMT05HX0xPTkdfVFlQRSlkb25lOworICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGlmKHAtPmZsYWdzICYgRkxBR1NfTE9ORykKKyAgICAgICAgICAqKGxvbmcgKikgcC0+ZGF0YS5wdHIgPSAobG9uZylkb25lOworICAgICAgZWxzZSBpZighKHAtPmZsYWdzICYgRkxBR1NfU0hPUlQpKQorICAgICAgICAqKGludCAqKSBwLT5kYXRhLnB0ciA9IChpbnQpZG9uZTsKKyAgICAgIGVsc2UKKyAgICAgICAgKihzaG9ydCAqKSBwLT5kYXRhLnB0ciA9IChzaG9ydClkb25lOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICAgIGYgPSAqZW5kKys7IC8qIGdvdG8gZW5kIG9mICUtY29kZSAqLworCisgIH0KKyAgcmV0dXJuIGRvbmU7Cit9CisKKy8qIGZwdXRjKCkgbG9vay1hbGlrZSAqLworc3RhdGljIGludCBhZGRieXRlcihpbnQgb3V0cHV0LCBGSUxFICpkYXRhKQoreworICBzdHJ1Y3QgbnNwcmludGYgKmluZm9wPShzdHJ1Y3QgbnNwcmludGYgKilkYXRhOworICB1bnNpZ25lZCBjaGFyIG91dGMgPSAodW5zaWduZWQgY2hhcilvdXRwdXQ7CisKKyAgaWYoaW5mb3AtPmxlbmd0aCA8IGluZm9wLT5tYXgpIHsKKyAgICAvKiBvbmx5IGRvIHRoaXMgaWYgd2UgaGF2ZW4ndCByZWFjaGVkIG1heCBsZW5ndGggeWV0ICovCisgICAgaW5mb3AtPmJ1ZmZlclswXSA9IG91dGM7IC8qIHN0b3JlICovCisgICAgaW5mb3AtPmJ1ZmZlcisrOyAvKiBpbmNyZWFzZSBwb2ludGVyICovCisgICAgaW5mb3AtPmxlbmd0aCsrOyAvKiB3ZSBhcmUgbm93IG9uZSBieXRlIGxhcmdlciAqLworICAgIHJldHVybiBvdXRjOyAgICAgLyogZnB1dGMoKSByZXR1cm5zIGxpa2UgdGhpcyBvbiBzdWNjZXNzICovCisgIH0KKyAgcmV0dXJuIC0xOworfQorCitpbnQgY3VybF9tdnNucHJpbnRmKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IG1heGxlbmd0aCwgY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFwX3NhdmUpCit7CisgIGludCByZXRjb2RlOworICBzdHJ1Y3QgbnNwcmludGYgaW5mbzsKKworICBpbmZvLmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgaW5mby5sZW5ndGggPSAwOworICBpbmZvLm1heCA9IG1heGxlbmd0aDsKKworICByZXRjb2RlID0gZHByaW50Zl9mb3JtYXRmKCZpbmZvLCBhZGRieXRlciwgZm9ybWF0LCBhcF9zYXZlKTsKKyAgaWYoaW5mby5tYXgpIHsKKyAgICAvKiB3ZSB0ZXJtaW5hdGUgdGhpcyB3aXRoIGEgemVybyBieXRlICovCisgICAgaWYoaW5mby5tYXggPT0gaW5mby5sZW5ndGgpCisgICAgICAvKiB3ZSdyZSBhdCBtYXhpbXVtLCBzY3JhcCB0aGUgbGFzdCBsZXR0ZXIgKi8KKyAgICAgIGluZm8uYnVmZmVyWy0xXSA9IDA7CisgICAgZWxzZQorICAgICAgaW5mby5idWZmZXJbMF0gPSAwOworICB9CisgIHJldHVybiByZXRjb2RlOworfQorCitpbnQgY3VybF9tc25wcmludGYoY2hhciAqYnVmZmVyLCBzaXplX3QgbWF4bGVuZ3RoLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgaW50IHJldGNvZGU7CisgIHZhX2xpc3QgYXBfc2F2ZTsgLyogYXJndW1lbnQgcG9pbnRlciAqLworICB2YV9zdGFydChhcF9zYXZlLCBmb3JtYXQpOworICByZXRjb2RlID0gY3VybF9tdnNucHJpbnRmKGJ1ZmZlciwgbWF4bGVuZ3RoLCBmb3JtYXQsIGFwX3NhdmUpOworICB2YV9lbmQoYXBfc2F2ZSk7CisgIHJldHVybiByZXRjb2RlOworfQorCisvKiBmcHV0YygpIGxvb2stYWxpa2UgKi8KK3N0YXRpYyBpbnQgYWxsb2NfYWRkYnl0ZXIoaW50IG91dHB1dCwgRklMRSAqZGF0YSkKK3sKKyAgc3RydWN0IGFzcHJpbnRmICppbmZvcD0oc3RydWN0IGFzcHJpbnRmICopZGF0YTsKKyAgdW5zaWduZWQgY2hhciBvdXRjID0gKHVuc2lnbmVkIGNoYXIpb3V0cHV0OworCisgIGlmKCFpbmZvcC0+YnVmZmVyKSB7CisgICAgaW5mb3AtPmJ1ZmZlciA9IG1hbGxvYygzMik7CisgICAgaWYoIWluZm9wLT5idWZmZXIpIHsKKyAgICAgIGluZm9wLT5mYWlsID0gMTsKKyAgICAgIHJldHVybiAtMTsgLyogZmFpbCAqLworICAgIH0KKyAgICBpbmZvcC0+YWxsb2MgPSAzMjsKKyAgICBpbmZvcC0+bGVuID0wOworICB9CisgIGVsc2UgaWYoaW5mb3AtPmxlbisxID49IGluZm9wLT5hbGxvYykgeworICAgIGNoYXIgKm5ld3B0cjsKKworICAgIG5ld3B0ciA9IHJlYWxsb2MoaW5mb3AtPmJ1ZmZlciwgaW5mb3AtPmFsbG9jKjIpOworCisgICAgaWYoIW5ld3B0cikgeworICAgICAgaW5mb3AtPmZhaWwgPSAxOworICAgICAgcmV0dXJuIC0xOyAvKiBmYWlsICovCisgICAgfQorICAgIGluZm9wLT5idWZmZXIgPSBuZXdwdHI7CisgICAgaW5mb3AtPmFsbG9jICo9IDI7CisgIH0KKworICBpbmZvcC0+YnVmZmVyWyBpbmZvcC0+bGVuIF0gPSBvdXRjOworCisgIGluZm9wLT5sZW4rKzsKKworICByZXR1cm4gb3V0YzsgLyogZnB1dGMoKSByZXR1cm5zIGxpa2UgdGhpcyBvbiBzdWNjZXNzICovCit9CisKK2NoYXIgKmN1cmxfbWFwcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXBfc2F2ZTsgLyogYXJndW1lbnQgcG9pbnRlciAqLworICBpbnQgcmV0Y29kZTsKKyAgc3RydWN0IGFzcHJpbnRmIGluZm87CisKKyAgaW5mby5idWZmZXIgPSBOVUxMOworICBpbmZvLmxlbiA9IDA7CisgIGluZm8uYWxsb2MgPSAwOworICBpbmZvLmZhaWwgPSAwOworCisgIHZhX3N0YXJ0KGFwX3NhdmUsIGZvcm1hdCk7CisgIHJldGNvZGUgPSBkcHJpbnRmX2Zvcm1hdGYoJmluZm8sIGFsbG9jX2FkZGJ5dGVyLCBmb3JtYXQsIGFwX3NhdmUpOworICB2YV9lbmQoYXBfc2F2ZSk7CisgIGlmKCgtMSA9PSByZXRjb2RlKSB8fCBpbmZvLmZhaWwpIHsKKyAgICBpZihpbmZvLmFsbG9jKQorICAgICAgZnJlZShpbmZvLmJ1ZmZlcik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgaWYoaW5mby5hbGxvYykgeworICAgIGluZm8uYnVmZmVyW2luZm8ubGVuXSA9IDA7IC8qIHdlIHRlcm1pbmF0ZSB0aGlzIHdpdGggYSB6ZXJvIGJ5dGUgKi8KKyAgICByZXR1cm4gaW5mby5idWZmZXI7CisgIH0KKyAgZWxzZQorICAgIHJldHVybiBzdHJkdXAoIiIpOworfQorCitjaGFyICpjdXJsX212YXByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXBfc2F2ZSkKK3sKKyAgaW50IHJldGNvZGU7CisgIHN0cnVjdCBhc3ByaW50ZiBpbmZvOworCisgIGluZm8uYnVmZmVyID0gTlVMTDsKKyAgaW5mby5sZW4gPSAwOworICBpbmZvLmFsbG9jID0gMDsKKyAgaW5mby5mYWlsID0gMDsKKworICByZXRjb2RlID0gZHByaW50Zl9mb3JtYXRmKCZpbmZvLCBhbGxvY19hZGRieXRlciwgZm9ybWF0LCBhcF9zYXZlKTsKKyAgaWYoKC0xID09IHJldGNvZGUpIHx8IGluZm8uZmFpbCkgeworICAgIGlmKGluZm8uYWxsb2MpCisgICAgICBmcmVlKGluZm8uYnVmZmVyKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGlmKGluZm8uYWxsb2MpIHsKKyAgICBpbmZvLmJ1ZmZlcltpbmZvLmxlbl0gPSAwOyAvKiB3ZSB0ZXJtaW5hdGUgdGhpcyB3aXRoIGEgemVybyBieXRlICovCisgICAgcmV0dXJuIGluZm8uYnVmZmVyOworICB9CisgIGVsc2UKKyAgICByZXR1cm4gc3RyZHVwKCIiKTsKK30KKworc3RhdGljIGludCBzdG9yZWJ1ZmZlcihpbnQgb3V0cHV0LCBGSUxFICpkYXRhKQoreworICBjaGFyICoqYnVmZmVyID0gKGNoYXIgKiopZGF0YTsKKyAgdW5zaWduZWQgY2hhciBvdXRjID0gKHVuc2lnbmVkIGNoYXIpb3V0cHV0OworICAqKmJ1ZmZlciA9IG91dGM7CisgICgqYnVmZmVyKSsrOworICByZXR1cm4gb3V0YzsgLyogYWN0IGxpa2UgZnB1dGMoKSAhICovCit9CisKK2ludCBjdXJsX21zcHJpbnRmKGNoYXIgKmJ1ZmZlciwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXBfc2F2ZTsgLyogYXJndW1lbnQgcG9pbnRlciAqLworICBpbnQgcmV0Y29kZTsKKyAgdmFfc3RhcnQoYXBfc2F2ZSwgZm9ybWF0KTsKKyAgcmV0Y29kZSA9IGRwcmludGZfZm9ybWF0ZigmYnVmZmVyLCBzdG9yZWJ1ZmZlciwgZm9ybWF0LCBhcF9zYXZlKTsKKyAgdmFfZW5kKGFwX3NhdmUpOworICAqYnVmZmVyPTA7IC8qIHdlIHRlcm1pbmF0ZSB0aGlzIHdpdGggYSB6ZXJvIGJ5dGUgKi8KKyAgcmV0dXJuIHJldGNvZGU7Cit9CisKK2ludCBjdXJsX21wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIGludCByZXRjb2RlOworICB2YV9saXN0IGFwX3NhdmU7IC8qIGFyZ3VtZW50IHBvaW50ZXIgKi8KKyAgdmFfc3RhcnQoYXBfc2F2ZSwgZm9ybWF0KTsKKworICByZXRjb2RlID0gZHByaW50Zl9mb3JtYXRmKHN0ZG91dCwgZnB1dGMsIGZvcm1hdCwgYXBfc2F2ZSk7CisgIHZhX2VuZChhcF9zYXZlKTsKKyAgcmV0dXJuIHJldGNvZGU7Cit9CisKK2ludCBjdXJsX21mcHJpbnRmKEZJTEUgKndoZXJldG8sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICBpbnQgcmV0Y29kZTsKKyAgdmFfbGlzdCBhcF9zYXZlOyAvKiBhcmd1bWVudCBwb2ludGVyICovCisgIHZhX3N0YXJ0KGFwX3NhdmUsIGZvcm1hdCk7CisgIHJldGNvZGUgPSBkcHJpbnRmX2Zvcm1hdGYod2hlcmV0bywgZnB1dGMsIGZvcm1hdCwgYXBfc2F2ZSk7CisgIHZhX2VuZChhcF9zYXZlKTsKKyAgcmV0dXJuIHJldGNvZGU7Cit9CisKK2ludCBjdXJsX212c3ByaW50ZihjaGFyICpidWZmZXIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcF9zYXZlKQoreworICBpbnQgcmV0Y29kZTsKKyAgcmV0Y29kZSA9IGRwcmludGZfZm9ybWF0ZigmYnVmZmVyLCBzdG9yZWJ1ZmZlciwgZm9ybWF0LCBhcF9zYXZlKTsKKyAgKmJ1ZmZlcj0wOyAvKiB3ZSB0ZXJtaW5hdGUgdGhpcyB3aXRoIGEgemVybyBieXRlICovCisgIHJldHVybiByZXRjb2RlOworfQorCitpbnQgY3VybF9tdnByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXBfc2F2ZSkKK3sKKyAgcmV0dXJuIGRwcmludGZfZm9ybWF0ZihzdGRvdXQsIGZwdXRjLCBmb3JtYXQsIGFwX3NhdmUpOworfQorCitpbnQgY3VybF9tdmZwcmludGYoRklMRSAqd2hlcmV0bywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwX3NhdmUpCit7CisgIHJldHVybiBkcHJpbnRmX2Zvcm1hdGYod2hlcmV0bywgZnB1dGMsIGZvcm1hdCwgYXBfc2F2ZSk7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvbXN2Y3Byb2ouZm9vdCBiL2N1cmwtNy4yNS4wL2xpYi9tc3ZjcHJvai5mb290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZTRjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvbXN2Y3Byb2ouZm9vdApAQCAtMCwwICsxLDExIEBACisKKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cbGliY3VybC5yYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIEdyb3VwCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9tc3ZjcHJvai5oZWFkIGIvY3VybC03LjI1LjAvbGliL21zdmNwcm9qLmhlYWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcxNGVmNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9tc3ZjcHJvai5oZWFkCkBAIC0wLDAgKzEsMTQ3IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImxpYmN1cmwiIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIgMHgwMTA0DQorDQorQ0ZHPWxpYmN1cmwgLSBXaW4zMiBMSUIgRGVidWcNCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgImxpYmN1cmwubWFrIi4NCishTUVTU0FHRSANCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgImxpYmN1cmwubWFrIiBDRkc9ImxpYmN1cmwgLSBXaW4zMiBMSUIgRGVidWciDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgImxpYmN1cmwgLSBXaW4zMiBETEwgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJsaWJjdXJsIC0gV2luMzIgRExMIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJsaWJjdXJsIC0gV2luMzIgTElCIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCishTUVTU0FHRSAibGliY3VybCAtIFdpbjMyIExJQiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KKw0KKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmN1cmwgLSBXaW4zMiBETEwgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRExMLURlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRMTC1EZWJ1ZyINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiRExMLURlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJETEwtRGVidWciDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KK0NQUD1jbC5leGUNCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLiIgL0kgIi4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9NQkNTIiAvRCAiQlVJTERJTkdfTElCQ1VSTCIgL0ZEIC9HWiAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9NQkNTIiAvRCAiQlVJTERJTkdfTElCQ1VSTCIgL0ZEIC9HWiAvYw0KK01UTD1taWRsLmV4ZQ0KKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCitSU0M9cmMuZXhlDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgd3MyXzMyLmxpYiB3bGRhcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2luY3JlbWVudGFsOm5vIC9tYXAgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiRExMLURlYnVnL2xpYmN1cmxkLmRsbCIgL2ltcGxpYjoiRExMLURlYnVnL2xpYmN1cmxkX2ltcC5saWIiIC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHdzMl8zMi5saWIgd2xkYXAzMi5saWIgL25vbG9nbyAvZGxsIC9pbmNyZW1lbnRhbDpubyAvbWFwIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6IkRMTC1EZWJ1Zy9saWJjdXJsZC5kbGwiIC9pbXBsaWI6IkRMTC1EZWJ1Zy9saWJjdXJsZF9pbXAubGliIiAvcGRidHlwZTpzZXB0DQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmN1cmwgLSBXaW4zMiBETEwgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJETEwtUmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJETEwtUmVsZWFzZSINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgT3V0cHV0X0RpciAiRExMLVJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRMTC1SZWxlYXNlIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCitDUFA9Y2wuZXhlDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4iIC9JICIuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfTUJDUyIgL0QgIkJVSUxESU5HX0xJQkNVUkwiIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLiIgL0kgIi4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9NQkNTIiAvRCAiQlVJTERJTkdfTElCQ1VSTCIgL0ZEIC9jDQorTVRMPW1pZGwuZXhlDQorIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KK1JTQz1yYy5leGUNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB3czJfMzIubGliIHdsZGFwMzIubGliIC9ub2xvZ28gL2RsbCAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJETEwtUmVsZWFzZS9saWJjdXJsLmRsbCIgL2ltcGxpYjoiRExMLVJlbGVhc2UvbGliY3VybF9pbXAubGliIg0KKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgd3MyXzMyLmxpYiB3bGRhcDMyLmxpYiAvbm9sb2dvIC9kbGwgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiRExMLVJlbGVhc2UvbGliY3VybC5kbGwiIC9pbXBsaWI6IkRMTC1SZWxlYXNlL2xpYmN1cmxfaW1wLmxpYiINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAibGliY3VybCAtIFdpbjMyIExJQiBEZWJ1ZyINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJMSUItRGVidWciDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiTElCLURlYnVnIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICJMSUItRGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkxJQi1EZWJ1ZyINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KK0NQUD1jbC5leGUNCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLiIgL0kgIi4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9NQkNTIiAvRCAiQlVJTERJTkdfTElCQ1VSTCIgL0QgIkNVUkxfU1RBVElDTElCIiAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX01CQ1MiIC9EICJCVUlMRElOR19MSUJDVVJMIiAvRCAiQ1VSTF9TVEFUSUNMSUIiIC9GRCAvR1ogL2MNCitSU0M9cmMuZXhlDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSUIzMj1saW5rLmV4ZSAtbGliDQorIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6IkxJQi1EZWJ1Zy9saWJjdXJsZC5saWIiIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6IkxJQi1EZWJ1Zy9saWJjdXJsZC5saWIiIC9tYWNoaW5lOkkzODYNCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAibGliY3VybCAtIFdpbjMyIExJQiBSZWxlYXNlIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkxJQi1SZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkxJQi1SZWxlYXNlIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICJMSUItUmVsZWFzZSINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiTElCLVJlbGVhc2UiDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCitDUFA9Y2wuZXhlDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4iIC9JICIuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfTUJDUyIgL0QgIkJVSUxESU5HX0xJQkNVUkwiIC9EICJDVVJMX1NUQVRJQ0xJQiIgL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuIiAvSSAiLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX01CQ1MiIC9EICJCVUlMRElOR19MSUJDVVJMIiAvRCAiQ1VSTF9TVEFUSUNMSUIiIC9GRCAvYw0KK1JTQz1yYy5leGUNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiTElCLVJlbGVhc2UvbGliY3VybC5saWIiIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6IkxJQi1SZWxlYXNlL2xpYmN1cmwubGliIiAvbWFjaGluZTpJMzg2DQorDQorIUVORElGIA0KKw0KKyMgQmVnaW4gVGFyZ2V0DQorDQorIyBOYW1lICJsaWJjdXJsIC0gV2luMzIgRExMIERlYnVnIg0KKyMgTmFtZSAibGliY3VybCAtIFdpbjMyIERMTCBSZWxlYXNlIg0KKyMgTmFtZSAibGliY3VybCAtIFdpbjMyIExJQiBEZWJ1ZyINCisjIE5hbWUgImxpYmN1cmwgLSBXaW4zMiBMSUIgUmVsZWFzZSINCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvbXVsdGkuYyBiL2N1cmwtNy4yNS4wL2xpYi9tdWx0aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMTA0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvbXVsdGkuYwpAQCAtMCwwICsxLDI4MzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImVhc3lpZi5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgInRpbWV2YWwuaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKgorICBDVVJMX1NPQ0tFVF9IQVNIX1RBQkxFX1NJWkUgc2hvdWxkIGJlIGEgcHJpbWUgbnVtYmVyLiBJbmNyZWFzaW5nIGl0IGZyb20gOTcKKyAgdG8gOTExIHRha2VzIG9uIGEgMzItYml0IG1hY2hpbmUgNCB4IDgwNCA9IDMyMTEgbW9yZSBieXRlcy4gIFN0aWxsLCBldmVyeQorICBDVVJMIGhhbmRsZSB0YWtlcyA0NS01MCBLIG1lbW9yeSwgdGhlcmVmb3JlIHRoaXMgM0sgYXJlIG5vdCBzaWduaWZpY2FudC4KKyovCisjaWZuZGVmIENVUkxfU09DS0VUX0hBU0hfVEFCTEVfU0laRQorI2RlZmluZSBDVVJMX1NPQ0tFVF9IQVNIX1RBQkxFX1NJWkUgOTExCisjZW5kaWYKKworc3RydWN0IEN1cmxfbWVzc2FnZSB7CisgIC8qIHRoZSAnQ1VSTE1zZycgaXMgdGhlIHBhcnQgdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSBleHRlcm5hbCB1c2VyICovCisgIHN0cnVjdCBDVVJMTXNnIGV4dG1zZzsKK307CisKKy8qIE5PVEU6IGlmIHlvdSBhZGQgYSBzdGF0ZSBoZXJlLCBhZGQgdGhlIG5hbWUgdG8gdGhlIHN0YXRlbmFtZVtdIGFycmF5IGFzCisgICB3ZWxsIQorKi8KK3R5cGVkZWYgZW51bSB7CisgIENVUkxNX1NUQVRFX0lOSVQsICAgICAgICAvKiAwIC0gc3RhcnQgaW4gdGhpcyBzdGF0ZSAqLworICBDVVJMTV9TVEFURV9DT05ORUNULCAgICAgLyogMSAtIHJlc29sdmUvY29ubmVjdCBoYXMgYmVlbiBzZW50IG9mZiAqLworICBDVVJMTV9TVEFURV9XQUlUUkVTT0xWRSwgLyogMiAtIGF3YWl0aW5nIHRoZSByZXNvbHZlIHRvIGZpbmFsaXplICovCisgIENVUkxNX1NUQVRFX1dBSVRDT05ORUNULCAvKiAzIC0gYXdhaXRpbmcgdGhlIGNvbm5lY3QgdG8gZmluYWxpemUgKi8KKyAgQ1VSTE1fU1RBVEVfV0FJVFBST1hZQ09OTkVDVCwgLyogNCAtIGF3YWl0aW5nIHByb3h5IENPTk5FQ1QgdG8gZmluYWxpemUgKi8KKyAgQ1VSTE1fU1RBVEVfUFJPVE9DT05ORUNULCAvKiA1IC0gY29tcGxldGluZyB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlICovCisgIENVUkxNX1NUQVRFX1dBSVRETywgICAgICAvKiA2IC0gd2FpdCBmb3Igb3VyIHR1cm4gdG8gc2VuZCB0aGUgcmVxdWVzdCAqLworICBDVVJMTV9TVEFURV9ETywgICAgICAgICAgLyogNyAtIHN0YXJ0IHNlbmQgb2ZmIHRoZSByZXF1ZXN0IChwYXJ0IDEpICovCisgIENVUkxNX1NUQVRFX0RPSU5HLCAgICAgICAvKiA4IC0gc2VuZGluZyBvZmYgdGhlIHJlcXVlc3QgKHBhcnQgMSkgKi8KKyAgQ1VSTE1fU1RBVEVfRE9fTU9SRSwgICAgIC8qIDkgLSBzZW5kIG9mZiB0aGUgcmVxdWVzdCAocGFydCAyKSAqLworICBDVVJMTV9TVEFURV9ET19ET05FLCAgICAgLyogMTAgLSBkb25lIHNlbmRpbmcgb2ZmIHJlcXVlc3QgKi8KKyAgQ1VSTE1fU1RBVEVfV0FJVFBFUkZPUk0sIC8qIDExIC0gd2FpdCBmb3Igb3VyIHR1cm4gdG8gcmVhZCB0aGUgcmVzcG9uc2UgKi8KKyAgQ1VSTE1fU1RBVEVfUEVSRk9STSwgICAgIC8qIDEyIC0gdHJhbnNmZXIgZGF0YSAqLworICBDVVJMTV9TVEFURV9UT09GQVNULCAgICAgLyogMTMgLSB3YWl0IGJlY2F1c2UgbGltaXQtcmF0ZSBleGNlZWRlZCAqLworICBDVVJMTV9TVEFURV9ET05FLCAgICAgICAgLyogMTQgLSBwb3N0IGRhdGEgdHJhbnNmZXIgb3BlcmF0aW9uICovCisgIENVUkxNX1NUQVRFX0NPTVBMRVRFRCwgICAvKiAxNSAtIG9wZXJhdGlvbiBjb21wbGV0ZSAqLworICBDVVJMTV9TVEFURV9NU0dTRU5ULCAgICAgLyogMTYgLSB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlIG1lc3NhZ2UgaXMgc2VudCAqLworICBDVVJMTV9TVEFURV9MQVNUICAgICAgICAgLyogMTcgLSBub3QgYSB0cnVlIHN0YXRlLCBuZXZlciB1c2UgdGhpcyAqLworfSBDVVJMTXN0YXRlOworCisvKiB3ZSBzdXBwb3J0IE4gc29ja2V0cyBwZXIgZWFzeSBoYW5kbGUuIFNldCB0aGUgY29ycmVzcG9uZGluZyBiaXQgdG8gd2hhdAorICAgYWN0aW9uIHdlIHNob3VsZCB3YWl0IGZvciAqLworI2RlZmluZSBNQVhfU09DS1NQRVJFQVNZSEFORExFIDUKKyNkZWZpbmUgR0VUU09DS19SRUFEQUJMRSAoMHgwMGZmKQorI2RlZmluZSBHRVRTT0NLX1dSSVRBQkxFICgweGZmMDApCisKK3N0cnVjdCBjbG9zdXJlIHsKKyAgc3RydWN0IGNsb3N1cmUgKm5leHQ7IC8qIGEgc2ltcGxlIG9uZS13YXkgbGlzdCBvZiBzdHJ1Y3RzICovCisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICplYXN5X2hhbmRsZTsKK307CisKK3N0cnVjdCBDdXJsX29uZV9lYXN5IHsKKyAgLyogZmlyc3QsIHR3byBmaWVsZHMgZm9yIHRoZSBsaW5rZWQgbGlzdCBvZiB0aGVzZSAqLworICBzdHJ1Y3QgQ3VybF9vbmVfZWFzeSAqbmV4dDsKKyAgc3RydWN0IEN1cmxfb25lX2Vhc3kgKnByZXY7CisKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmVhc3lfaGFuZGxlOyAvKiB0aGUgZWFzeSBoYW5kbGUgZm9yIHRoaXMgdW5pdCAqLworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmVhc3lfY29ubjsgICAgIC8qIHRoZSAidW5pdCdzIiBjb25uZWN0aW9uICovCisKKyAgQ1VSTE1zdGF0ZSBzdGF0ZTsgIC8qIHRoZSBoYW5kbGUncyBzdGF0ZSAqLworICBDVVJMY29kZSByZXN1bHQ7ICAgLyogcHJldmlvdXMgcmVzdWx0ICovCisKKyAgc3RydWN0IEN1cmxfbWVzc2FnZSBtc2c7IC8qIEEgc2luZ2xlIHBvc3RlZCBtZXNzYWdlLiAqLworCisgIC8qIEFycmF5IHdpdGggdGhlIHBsYWluIHNvY2tldCBudW1iZXJzIHRoaXMgaGFuZGxlIHRha2VzIGNhcmUgb2YsIGluIG5vCisgICAgIHBhcnRpY3VsYXIgb3JkZXIuIE5vdGUgdGhhdCBhbGwgc29ja2V0cyBhcmUgYWRkZWQgdG8gdGhlIHNvY2toYXNoLCB3aGVyZQorICAgICB0aGUgc3RhdGUgZXRjIGFyZSBhbHNvIGtlcHQuIFRoaXMgYXJyYXkgaXMgbW9zdGx5IHVzZWQgdG8gZGV0ZWN0IHdoZW4gYQorICAgICBzb2NrZXQgaXMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBoYXNoLiBTZWUgc2luZ2xlc29ja2V0KCkuICovCisgIGN1cmxfc29ja2V0X3Qgc29ja2V0c1tNQVhfU09DS1NQRVJFQVNZSEFORExFXTsKKyAgaW50IG51bXNvY2tzOworfTsKKworI2RlZmluZSBDVVJMX01VTFRJX0hBTkRMRSAweDAwMGJhYjFlCisKKyNkZWZpbmUgR09PRF9NVUxUSV9IQU5ETEUoeCkgXAorICAoKHgpICYmICgoKHN0cnVjdCBDdXJsX211bHRpICopKHgpKS0+dHlwZSA9PSBDVVJMX01VTFRJX0hBTkRMRSkpCisjZGVmaW5lIEdPT0RfRUFTWV9IQU5ETEUoeCkgXAorICAoKHgpICYmICgoKHN0cnVjdCBTZXNzaW9uSGFuZGxlICopKHgpKS0+bWFnaWMgPT0gQ1VSTEVBU1lfTUFHSUNfTlVNQkVSKSkKKworLyogVGhpcyBpcyB0aGUgc3RydWN0IGtub3duIGFzIENVUkxNIG9uIHRoZSBvdXRzaWRlICovCitzdHJ1Y3QgQ3VybF9tdWx0aSB7CisgIC8qIEZpcnN0IGEgc2ltcGxlIGlkZW50aWZpZXIgdG8gZWFzaWVyIGRldGVjdCBpZiBhIHVzZXIgbWl4IHVwCisgICAgIHRoaXMgbXVsdGkgaGFuZGxlIHdpdGggYW4gZWFzeSBoYW5kbGUuIFNldCB0aGlzIHRvIENVUkxfTVVMVElfSEFORExFLiAqLworICBsb25nIHR5cGU7CisKKyAgLyogV2UgaGF2ZSBhIGRvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdCB3aXRoIGVhc3kgaGFuZGxlcyAqLworICBzdHJ1Y3QgQ3VybF9vbmVfZWFzeSBlYXN5OworCisgIGludCBudW1fZWFzeTsgLyogYW1vdW50IG9mIGVudHJpZXMgaW4gdGhlIGxpbmtlZCBsaXN0IGFib3ZlLiAqLworICBpbnQgbnVtX2FsaXZlOyAvKiBhbW91bnQgb2YgZWFzeSBoYW5kbGVzIHRoYXQgYXJlIGFkZGVkIGJ1dCBoYXZlIG5vdCB5ZXQKKyAgICAgICAgICAgICAgICAgICAgcmVhY2hlZCBDT01QTEVURSBzdGF0ZSAqLworCisgIHN0cnVjdCBjdXJsX2xsaXN0ICptc2dsaXN0OyAvKiBhIGxpc3Qgb2YgbWVzc2FnZXMgZnJvbSBjb21wbGV0ZWQgdHJhbnNmZXJzICovCisKKyAgLyogY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHVzZXIgZGF0YSBwb2ludGVyIGZvciB0aGUgKnNvY2tldCgpIEFQSSAqLworICBjdXJsX3NvY2tldF9jYWxsYmFjayBzb2NrZXRfY2I7CisgIHZvaWQgKnNvY2tldF91c2VycDsKKworICAvKiBIb3N0bmFtZSBjYWNoZSAqLworICBzdHJ1Y3QgY3VybF9oYXNoICpob3N0Y2FjaGU7CisKKyAgLyogdGltZXRyZWUgcG9pbnRzIHRvIHRoZSBzcGxheS10cmVlIG9mIHRpbWUgbm9kZXMgdG8gZmlndXJlIG91dCBleHBpcmUKKyAgICAgdGltZXMgb2YgYWxsIGN1cnJlbnRseSBzZXQgdGltZXJzICovCisgIHN0cnVjdCBDdXJsX3RyZWUgKnRpbWV0cmVlOworCisgIC8qICdzb2NraGFzaCcgaXMgdGhlIGxvb2t1cCBoYXNoIGZvciBzb2NrZXQgZGVzY3JpcHRvciA9PiBlYXN5IGhhbmRsZXMgKG5vdGUKKyAgICAgdGhlIHBsdXJhbGlzIGZvcm0sIHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIGVhc3kgaGFuZGxlIHdhaXRpbmcgb24gdGhlCisgICAgIHNhbWUgYWN0dWFsIHNvY2tldCkgKi8KKyAgc3RydWN0IGN1cmxfaGFzaCAqc29ja2hhc2g7CisKKyAgLyogV2hldGhlciBwaXBlbGluaW5nIGlzIGVuYWJsZWQgZm9yIHRoaXMgbXVsdGkgaGFuZGxlICovCisgIGJvb2wgcGlwZWxpbmluZ19lbmFibGVkOworCisgIC8qIHNoYXJlZCBjb25uZWN0aW9uIGNhY2hlICovCisgIHN0cnVjdCBjb25uY2FjaGUgKmNvbm5jOworICBsb25nIG1heGNvbm5lY3RzOyAvKiBpZiA+MCwgYSBmaXhlZCBsaW1pdCBvZiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcworICAgICAgICAgICAgICAgICAgICAgICB3ZSdyZSBhbGxvd2VkIHRvIGdyb3cgdGhlIGNvbm5lY3Rpb24gY2FjaGUgdG8gKi8KKworICAvKiBsaXN0IG9mIGVhc3kgaGFuZGxlcyBrZXB0IGFyb3VuZCBmb3IgZG9pbmcgbmljZSBjb25uZWN0aW9uIGNsb3N1cmVzICovCisgIHN0cnVjdCBjbG9zdXJlICpjbG9zdXJlOworCisgIC8qIHRpbWVyIGNhbGxiYWNrIGFuZCB1c2VyIGRhdGEgcG9pbnRlciBmb3IgdGhlICpzb2NrZXQoKSBBUEkgKi8KKyAgY3VybF9tdWx0aV90aW1lcl9jYWxsYmFjayB0aW1lcl9jYjsKKyAgdm9pZCAqdGltZXJfdXNlcnA7CisgIHN0cnVjdCB0aW1ldmFsIHRpbWVyX2xhc3RjYWxsOyAvKiB0aGUgZml4ZWQgdGltZSBmb3IgdGhlIHRpbWVvdXQgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgY2FsbGJhY2sgKi8KK307CisKK3N0YXRpYyB2b2lkIG11bHRpX2Nvbm5jX3JlbW92ZV9oYW5kbGUoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CitzdGF0aWMgdm9pZCBzaW5nbGVzb2NrZXQoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX29uZV9lYXN5ICplYXN5KTsKK3N0YXRpYyBDVVJMTWNvZGUgYWRkX2Nsb3N1cmUoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CitzdGF0aWMgaW50IHVwZGF0ZV90aW1lcihzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkpOworCitzdGF0aWMgQ1VSTGNvZGUgYWRkSGFuZGxlVG9TZW5kT3JQZW5kUGlwZWxpbmUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworc3RhdGljIGludCBjaGVja1BlbmRQaXBlbGluZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworc3RhdGljIHZvaWQgbW92ZUhhbmRsZUZyb21TZW5kVG9SZWN2UGlwZWxpbmUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CitzdGF0aWMgdm9pZCBtb3ZlSGFuZGxlRnJvbVJlY3ZUb0RvbmVQaXBlbGluZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3N0YXRpYyBib29sIGlzSGFuZGxlQXRIZWFkKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9sbGlzdCAqcGlwZWxpbmUpOworc3RhdGljIENVUkxNY29kZSBhZGRfbmV4dF90aW1lb3V0KHN0cnVjdCB0aW1ldmFsIG5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmQpOworCisjaWZkZWYgREVCVUdCVUlMRAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzdGF0ZW5hbWVbXT17CisgICJJTklUIiwKKyAgIkNPTk5FQ1QiLAorICAiV0FJVFJFU09MVkUiLAorICAiV0FJVENPTk5FQ1QiLAorICAiV0FJVFBST1hZQ09OTkVDVCIsCisgICJQUk9UT0NPTk5FQ1QiLAorICAiV0FJVERPIiwKKyAgIkRPIiwKKyAgIkRPSU5HIiwKKyAgIkRPX01PUkUiLAorICAiRE9fRE9ORSIsCisgICJXQUlUUEVSRk9STSIsCisgICJQRVJGT1JNIiwKKyAgIlRPT0ZBU1QiLAorICAiRE9ORSIsCisgICJDT01QTEVURUQiLAorICAiTVNHU0VOVCIsCit9OworI2VuZGlmCisKK3N0YXRpYyB2b2lkIG11bHRpX2ZyZWV0aW1lb3V0KHZvaWQgKmEsIHZvaWQgKmIpOworCisvKiBhbHdheXMgdXNlIHRoaXMgZnVuY3Rpb24gdG8gY2hhbmdlIHN0YXRlLCB0byBtYWtlIGRlYnVnZ2luZyBlYXNpZXIgKi8KK3N0YXRpYyB2b2lkIG11bHRpc3RhdGUoc3RydWN0IEN1cmxfb25lX2Vhc3kgKmVhc3ksIENVUkxNc3RhdGUgc3RhdGUpCit7CisjaWZkZWYgREVCVUdCVUlMRAorICBsb25nIGNvbm5lY3RpbmRleCA9IC01MDAwOworI2VuZGlmCisgIENVUkxNc3RhdGUgb2xkc3RhdGUgPSBlYXN5LT5zdGF0ZTsKKworICBpZihvbGRzdGF0ZSA9PSBzdGF0ZSkKKyAgICAvKiBkb24ndCBib3RoZXIgd2hlbiB0aGUgbmV3IHN0YXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgc3RhdGUgKi8KKyAgICByZXR1cm47CisKKyAgZWFzeS0+c3RhdGUgPSBzdGF0ZTsKKworI2lmZGVmIERFQlVHQlVJTEQKKyAgaWYoZWFzeS0+ZWFzeV9jb25uKSB7CisgICAgaWYoZWFzeS0+c3RhdGUgPiBDVVJMTV9TVEFURV9DT05ORUNUICYmCisgICAgICAgZWFzeS0+c3RhdGUgPCBDVVJMTV9TVEFURV9DT01QTEVURUQpCisgICAgICBjb25uZWN0aW5kZXggPSBlYXN5LT5lYXN5X2Nvbm4tPmNvbm5lY3RpbmRleDsKKworICAgIGluZm9mKGVhc3ktPmVhc3lfaGFuZGxlLAorICAgICAgICAgICJTVEFURTogJXMgPT4gJXMgaGFuZGxlICVwOyAoY29ubmVjdGlvbiAjJWxkKSBcbiIsCisgICAgICAgICAgc3RhdGVuYW1lW29sZHN0YXRlXSwgc3RhdGVuYW1lW2Vhc3ktPnN0YXRlXSwKKyAgICAgICAgICAoY2hhciAqKWVhc3ksIGNvbm5lY3RpbmRleCk7CisgIH0KKyNlbmRpZgorICBpZihzdGF0ZSA9PSBDVVJMTV9TVEFURV9DT01QTEVURUQpCisgICAgLyogY2hhbmdpbmcgdG8gQ09NUExFVEVEIG1lYW5zIHRoZXJlJ3Mgb25lIGxlc3MgZWFzeSBoYW5kbGUgJ2FsaXZlJyAqLworICAgIGVhc3ktPmVhc3lfaGFuZGxlLT5tdWx0aS0+bnVtX2FsaXZlLS07Cit9CisKKy8qCisgKiBXZSBhZGQgb25lIG9mIHRoZXNlIHN0cnVjdHMgdG8gdGhlIHNvY2toYXNoIGZvciBhIHBhcnRpY3VsYXIgc29ja2V0CisgKi8KKworc3RydWN0IEN1cmxfc2hfZW50cnkgeworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZWFzeTsKKyAgdGltZV90IHRpbWVzdGFtcDsKKyAgaW50IGFjdGlvbjsgIC8qIHdoYXQgYWN0aW9uIFJFQUQvV1JJVEUgdGhpcyBzb2NrZXQgd2FpdHMgZm9yICovCisgIGN1cmxfc29ja2V0X3Qgc29ja2V0OyAvKiBtYWlubHkgdG8gZWFzZSBkZWJ1Z2dpbmcgKi8KKyAgdm9pZCAqc29ja2V0cDsgLyogc2V0dGFibGUgYnkgdXNlcnMgd2l0aCBjdXJsX211bHRpX2Fzc2lnbigpICovCit9OworLyogYml0cyBmb3IgJ2FjdGlvbicgaGF2aW5nIG5vIGJpdHMgbWVhbnMgdGhpcyBzb2NrZXQgaXMgbm90IGV4cGVjdGluZyBhbnkKKyAgIGFjdGlvbiAqLworI2RlZmluZSBTSF9SRUFEICAxCisjZGVmaW5lIFNIX1dSSVRFIDIKKworLyogbWFrZSBzdXJlIHRoaXMgc29ja2V0IGlzIHByZXNlbnQgaW4gdGhlIGhhc2ggZm9yIHRoaXMgaGFuZGxlICovCitzdGF0aWMgc3RydWN0IEN1cmxfc2hfZW50cnkgKnNoX2FkZGVudHJ5KHN0cnVjdCBjdXJsX2hhc2ggKnNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBzdHJ1Y3QgQ3VybF9zaF9lbnRyeSAqdGhlcmUgPQorICAgIEN1cmxfaGFzaF9waWNrKHNoLCAoY2hhciAqKSZzLCBzaXplb2YoY3VybF9zb2NrZXRfdCkpOworICBzdHJ1Y3QgQ3VybF9zaF9lbnRyeSAqY2hlY2s7CisKKyAgaWYodGhlcmUpCisgICAgLyogaXQgaXMgcHJlc2VudCwgcmV0dXJuIGZpbmUgKi8KKyAgICByZXR1cm4gdGhlcmU7CisKKyAgLyogbm90IHByZXNlbnQsIGFkZCBpdCAqLworICBjaGVjayA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IEN1cmxfc2hfZW50cnkpKTsKKyAgaWYoIWNoZWNrKQorICAgIHJldHVybiBOVUxMOyAvKiBtYWpvciBmYWlsdXJlICovCisgIGNoZWNrLT5lYXN5ID0gZGF0YTsKKyAgY2hlY2stPnNvY2tldCA9IHM7CisKKyAgLyogbWFrZS9hZGQgbmV3IGhhc2ggZW50cnkgKi8KKyAgaWYoTlVMTCA9PSBDdXJsX2hhc2hfYWRkKHNoLCAoY2hhciAqKSZzLCBzaXplb2YoY3VybF9zb2NrZXRfdCksIGNoZWNrKSkgeworICAgIGZyZWUoY2hlY2spOworICAgIHJldHVybiBOVUxMOyAvKiBtYWpvciBmYWlsdXJlICovCisgIH0KKworICByZXR1cm4gY2hlY2s7IC8qIHRoaW5ncyBhcmUgZ29vZCBpbiBzb2NraGFzaCBsYW5kICovCit9CisKKworLyogZGVsZXRlIHRoZSBnaXZlbiBzb2NrZXQgKyBoYW5kbGUgZnJvbSB0aGUgaGFzaCAqLworc3RhdGljIHZvaWQgc2hfZGVsZW50cnkoc3RydWN0IGN1cmxfaGFzaCAqc2gsIGN1cmxfc29ja2V0X3QgcykKK3sKKyAgc3RydWN0IEN1cmxfc2hfZW50cnkgKnRoZXJlID0KKyAgICBDdXJsX2hhc2hfcGljayhzaCwgKGNoYXIgKikmcywgc2l6ZW9mKGN1cmxfc29ja2V0X3QpKTsKKworICBpZih0aGVyZSkgeworICAgIC8qIHRoaXMgc29ja2V0IGlzIGluIHRoZSBoYXNoICovCisgICAgLyogV2UgcmVtb3ZlIHRoZSBoYXNoIGVudHJ5LiAoVGhpcydsbCBlbmQgdXAgaW4gYSBjYWxsIHRvCisgICAgICAgc2hfZnJlZWVudHJ5KCkuKSAqLworICAgIEN1cmxfaGFzaF9kZWxldGUoc2gsIChjaGFyICopJnMsIHNpemVvZihjdXJsX3NvY2tldF90KSk7CisgIH0KK30KKworLyoKKyAqIGZyZWUgYSBzb2NraGFzaCBlbnRyeQorICovCitzdGF0aWMgdm9pZCBzaF9mcmVlZW50cnkodm9pZCAqZnJlZXRoaXMpCit7CisgIHN0cnVjdCBDdXJsX3NoX2VudHJ5ICpwID0gKHN0cnVjdCBDdXJsX3NoX2VudHJ5ICopIGZyZWV0aGlzOworCisgIGlmKHApCisgICAgZnJlZShwKTsKK30KKworc3RhdGljIHNpemVfdCBmZF9rZXlfY29tcGFyZSh2b2lkKmsxLCBzaXplX3QgazFfbGVuLCB2b2lkKmsyLCBzaXplX3QgazJfbGVuKQoreworICAodm9pZCkgazFfbGVuOyAodm9pZCkgazJfbGVuOworCisgIHJldHVybiAoKigoaW50KiApIGsxKSkgPT0gKCooKGludCogKSBrMikpOworfQorCitzdGF0aWMgc2l6ZV90IGhhc2hfZmQodm9pZCoga2V5LCBzaXplX3Qga2V5X2xlbmd0aCwgc2l6ZV90IHNsb3RzX251bSkKK3sKKyAgaW50IGZkID0gKiAoKGludCogKSBrZXkpOworICAodm9pZCkga2V5X2xlbmd0aDsKKworICByZXR1cm4gKGZkICUgKGludClzbG90c19udW0pOworfQorCisvKgorICogc2hfaW5pdCgpIGNyZWF0ZXMgYSBuZXcgc29ja2V0IGhhc2ggYW5kIHJldHVybnMgdGhlIGhhbmRsZSBmb3IgaXQuCisgKgorICogUXVvdGUgZnJvbSBSRUFETUUubXVsdGlfc29ja2V0OgorICoKKyAqICJTb21lIHRlc3RzIGF0IDcwMDAgYW5kIDkwMDAgY29ubmVjdGlvbnMgc2hvd2VkIHRoYXQgdGhlIHNvY2tldCBoYXNoIGxvb2t1cAorICogaXMgc29tZXdoYXQgb2YgYSBib3R0bGUgbmVjay4gSXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbWF5IGJlIGEgYml0IHRvbworICogbGltaXRpbmcuIEl0IHNpbXBseSBoYXMgYSBmaXhlZC1zaXplIGFycmF5LCBhbmQgb24gZWFjaCBlbnRyeSBpbiB0aGUgYXJyYXkKKyAqIGl0IGhhcyBhIGxpbmtlZCBsaXN0IHdpdGggZW50cmllcy4gU28gdGhlIGhhc2ggb25seSBjaGVja3Mgd2hpY2ggbGlzdCB0bworICogc2NhbiB0aHJvdWdoLiBUaGUgY29kZSBJIGhhZCB1c2VkIHNvIGZvciB1c2VkIGEgbGlzdCB3aXRoIG1lcmVseSA3IHNsb3RzCisgKiAoYXMgdGhhdCBpcyB3aGF0IHRoZSBETlMgaGFzaCB1c2VzKSBidXQgd2l0aCA3MDAwIGNvbm5lY3Rpb25zIHRoYXQgd291bGQKKyAqIG1ha2UgYW4gYXZlcmFnZSBvZiAxMDAwIG5vZGVzIGluIGVhY2ggbGlzdCB0byBydW4gdGhyb3VnaC4gSSB1cHBlZCB0aGF0IHRvCisgKiA5NyBzbG90cyAoSSBiZWxpZXZlIGEgcHJpbWUgaXMgc3VpdGFibGUpIGFuZCBub3RpY2VkIGEgc2lnbmlmaWNhbnQgc3BlZWQKKyAqIGluY3JlYXNlLiAgSSBuZWVkIHRvIHJlY29uc2lkZXIgdGhlIGhhc2ggaW1wbGVtZW50YXRpb24gb3IgdXNlIGEgcmF0aGVyCisgKiBsYXJnZSBkZWZhdWx0IHZhbHVlIGxpa2UgdGhpcy4gQXQgOTAwMCBjb25uZWN0aW9ucyBJIHdhcyBzdGlsbCBiZWxvdyAxMHVzCisgKiBwZXIgY2FsbC4iCisgKgorICovCitzdGF0aWMgc3RydWN0IGN1cmxfaGFzaCAqc2hfaW5pdCh2b2lkKQoreworICByZXR1cm4gQ3VybF9oYXNoX2FsbG9jKENVUkxfU09DS0VUX0hBU0hfVEFCTEVfU0laRSwgaGFzaF9mZCwgZmRfa2V5X2NvbXBhcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2hfZnJlZWVudHJ5KTsKK30KKworLyoKKyAqIG11bHRpX2FkZG1zZygpCisgKgorICogQ2FsbGVkIHdoZW4gYSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuIEFkZHMgdGhlIGdpdmVuIG1zZyBwb2ludGVyIHRvCisgKiB0aGUgbGlzdCBrZXB0IGluIHRoZSBtdWx0aSBoYW5kbGUuCisgKi8KK3N0YXRpYyBDVVJMTWNvZGUgbXVsdGlfYWRkbXNnKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX21lc3NhZ2UgKm1zZykKK3sKKyAgaWYoIUN1cmxfbGxpc3RfaW5zZXJ0X25leHQobXVsdGktPm1zZ2xpc3QsIG11bHRpLT5tc2dsaXN0LT50YWlsLCBtc2cpKQorICAgIHJldHVybiBDVVJMTV9PVVRfT0ZfTUVNT1JZOworCisgIHJldHVybiBDVVJMTV9PSzsKK30KKworLyoKKyAqIG11bHRpX2ZyZWVhbXNnKCkKKyAqCisgKiBDYWxsYmFjayB1c2VkIGJ5IHRoZSBsbGlzdCBzeXN0ZW0gd2hlbiBhIHNpbmdsZSBsaXN0IGVudHJ5IGlzIGRlc3Ryb3llZC4KKyAqLworc3RhdGljIHZvaWQgbXVsdGlfZnJlZWFtc2codm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgKHZvaWQpYTsKKyAgKHZvaWQpYjsKK30KKworCitDVVJMTSAqY3VybF9tdWx0aV9pbml0KHZvaWQpCit7CisgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IEN1cmxfbXVsdGkpKTsKKworICBpZighbXVsdGkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgbXVsdGktPnR5cGUgPSBDVVJMX01VTFRJX0hBTkRMRTsKKworICBtdWx0aS0+aG9zdGNhY2hlID0gQ3VybF9ta19kbnNjYWNoZSgpOworICBpZighbXVsdGktPmhvc3RjYWNoZSkKKyAgICBnb3RvIGVycm9yOworCisgIG11bHRpLT5zb2NraGFzaCA9IHNoX2luaXQoKTsKKyAgaWYoIW11bHRpLT5zb2NraGFzaCkKKyAgICBnb3RvIGVycm9yOworCisgIG11bHRpLT5jb25uYyA9IEN1cmxfbWtfY29ubmMoQ09OTkNBQ0hFX01VTFRJLCAtMUwpOworICBpZighbXVsdGktPmNvbm5jKQorICAgIGdvdG8gZXJyb3I7CisKKyAgbXVsdGktPm1zZ2xpc3QgPSBDdXJsX2xsaXN0X2FsbG9jKG11bHRpX2ZyZWVhbXNnKTsKKyAgaWYoIW11bHRpLT5tc2dsaXN0KQorICAgIGdvdG8gZXJyb3I7CisKKyAgLyogTGV0J3MgbWFrZSB0aGUgZG91Ymx5LWxpbmtlZCBsaXN0IGEgY2lyY3VsYXIgbGlzdC4gIFRoaXMgbWFrZXMKKyAgICAgdGhlIGxpbmtlZCBsaXN0IGNvZGUgc2ltcGxlciBhbmQgYWxsb3dzIGluc2VydGluZyBhdCB0aGUgZW5kCisgICAgIHdpdGggbGVzcyB3b3JrICh3ZSBkaWRuJ3Qga2VlcCBhIHRhaWwgcG9pbnRlciBiZWZvcmUpLiAqLworICBtdWx0aS0+ZWFzeS5uZXh0ID0gJm11bHRpLT5lYXN5OworICBtdWx0aS0+ZWFzeS5wcmV2ID0gJm11bHRpLT5lYXN5OworCisgIHJldHVybiAoQ1VSTE0gKikgbXVsdGk7CisKKyAgZXJyb3I6CisKKyAgQ3VybF9oYXNoX2Rlc3Ryb3kobXVsdGktPnNvY2toYXNoKTsKKyAgbXVsdGktPnNvY2toYXNoID0gTlVMTDsKKyAgQ3VybF9oYXNoX2Rlc3Ryb3kobXVsdGktPmhvc3RjYWNoZSk7CisgIG11bHRpLT5ob3N0Y2FjaGUgPSBOVUxMOworICBDdXJsX3JtX2Nvbm5jKG11bHRpLT5jb25uYyk7CisgIG11bHRpLT5jb25uYyA9IE5VTEw7CisKKyAgZnJlZShtdWx0aSk7CisgIHJldHVybiBOVUxMOworfQorCitDVVJMTWNvZGUgY3VybF9tdWx0aV9hZGRfaGFuZGxlKENVUkxNICptdWx0aV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkwgKmVhc3lfaGFuZGxlKQoreworICBzdHJ1Y3QgY3VybF9sbGlzdCAqdGltZW91dGxpc3Q7CisgIHN0cnVjdCBDdXJsX29uZV9lYXN5ICplYXN5OworICBzdHJ1Y3QgY2xvc3VyZSAqY2w7CisgIHN0cnVjdCBjbG9zdXJlICpwcmV2ID0gTlVMTDsKKyAgc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpID0gKHN0cnVjdCBDdXJsX211bHRpICopbXVsdGlfaGFuZGxlOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqKWVhc3lfaGFuZGxlOworCisgIC8qIEZpcnN0LCBtYWtlIHNvbWUgYmFzaWMgY2hlY2tzIHRoYXQgdGhlIENVUkxNIGhhbmRsZSBpcyBhIGdvb2QgaGFuZGxlICovCisgIGlmKCFHT09EX01VTFRJX0hBTkRMRShtdWx0aSkpCisgICAgcmV0dXJuIENVUkxNX0JBRF9IQU5ETEU7CisKKyAgLyogVmVyaWZ5IHRoYXQgd2UgZ290IGEgc29tZXdoYXQgZ29vZCBlYXN5IGhhbmRsZSB0b28gKi8KKyAgaWYoIUdPT0RfRUFTWV9IQU5ETEUoZWFzeV9oYW5kbGUpKQorICAgIHJldHVybiBDVVJMTV9CQURfRUFTWV9IQU5ETEU7CisKKyAgLyogUHJldmVudCB1c2VycyBmcm9tIGFkZGluZyBzYW1lIGVhc3kgaGFuZGxlIG1vcmUgdGhhbgorICAgICBvbmNlIGFuZCBwcmV2ZW50IGFkZGluZyB0byBtb3JlIHRoYW4gb25lIG11bHRpIHN0YWNrICovCisgIGlmKGRhdGEtPm11bHRpKQorICAgIC8qIHBvc3NpYmx5IHdlIHNob3VsZCBjcmVhdGUgYSBuZXcgdW5pcXVlIGVycm9yIGNvZGUgZm9yIHRoaXMgY29uZGl0aW9uICovCisgICAgcmV0dXJuIENVUkxNX0JBRF9FQVNZX0hBTkRMRTsKKworICAvKiBXZSB3YW50IHRoZSBjb25uZWN0aW9uIGNhY2hlIHRvIGhhdmUgcGxlbnR5IG9mIHJvb20uIEJlZm9yZSB3ZSBzdXBwb3J0ZWQKKyAgICAgdGhlIHNoYXJlZCBjYWNoZSBldmVyeSBzaW5nbGUgZWFzeSBoYW5kbGUgaGFkIDUgZW50cmllcyBpbiB0aGVpciBjYWNoZQorICAgICBieSBkZWZhdWx0LiAqLworICBpZigoKG11bHRpLT5udW1fZWFzeSArIDEpICogNCkgPiBtdWx0aS0+Y29ubmMtPm51bSkgeworICAgIGxvbmcgbmV3bWF4ID0gKG11bHRpLT5udW1fZWFzeSArIDEpICogNDsKKworICAgIGlmKG11bHRpLT5tYXhjb25uZWN0cyAmJiAobmV3bWF4ID4gbXVsdGktPm1heGNvbm5lY3RzKSkKKyAgICAgIC8qIGRvbid0IGdyb3cgYmV5b25kIHRoZSBhbGxvd2VkIHNpemUgKi8KKyAgICAgIG5ld21heCA9IG11bHRpLT5tYXhjb25uZWN0czsKKworICAgIGlmKG5ld21heCA+IG11bHRpLT5jb25uYy0+bnVtKSB7CisgICAgICAvKiB3ZSBvbmx5IGRvIHRoaXMgaXMgd2UgY2FuIGluIGZhY3QgZ3JvdyB0aGUgY2FjaGUgKi8KKyAgICAgIENVUkxjb2RlIHJlcyA9IEN1cmxfY2hfY29ubmMoZGF0YSwgbXVsdGktPmNvbm5jLCBuZXdtYXgpOworICAgICAgaWYocmVzKQorICAgICAgICByZXR1cm4gQ1VSTE1fT1VUX09GX01FTU9SWTsKKyAgICB9CisgIH0KKworICAvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aW1lb3V0IGxpc3QgZm9yIGVhc3kgaGFuZGxlICovCisgIHRpbWVvdXRsaXN0ID0gQ3VybF9sbGlzdF9hbGxvYyhtdWx0aV9mcmVldGltZW91dCk7CisgIGlmKCF0aW1lb3V0bGlzdCkKKyAgICByZXR1cm4gQ1VSTE1fT1VUX09GX01FTU9SWTsKKworICAvKiBBbGxvY2F0ZSBuZXcgbm9kZSBmb3IgdGhlIGRvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdCBvZgorICAgICBDdXJsX29uZV9lYXN5IHN0cnVjdHMgdGhhdCBob2xkcyBwb2ludGVycyB0byBlYXN5IGhhbmRsZXMgKi8KKyAgZWFzeSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IEN1cmxfb25lX2Vhc3kpKTsKKyAgaWYoIWVhc3kpIHsKKyAgICBDdXJsX2xsaXN0X2Rlc3Ryb3kodGltZW91dGxpc3QsIE5VTEwpOworICAgIHJldHVybiBDVVJMTV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgLyoKKyAgKiogTm8gZmFpbHVyZSBhbGxvd2VkIGluIHRoaXMgZnVuY3Rpb24gYmV5b25kIHRoaXMgcG9pbnQuIEFuZAorICAqKiBubyBtb2RpZmljYXRpb24gb2YgZWFzeSBub3IgbXVsdGkgaGFuZGxlIGFsbG93ZWQgYmVmb3JlIHRoaXMKKyAgKiogZXhjZXB0IGZvciBwb3RlbnRpYWwgbXVsdGkncyBjb25uZWN0aW9uIGNhY2hlIGdyb3dpbmcgd2hpY2gKKyAgKiogd29uJ3QgYmUgdW5kb25lIGluIHRoaXMgZnVuY3Rpb24gbm8gbWF0dGVyIHdoYXQuCisgICovCisKKyAgLyogTWFrZSBlYXN5IGhhbmRsZSB1c2UgdGltZW91dCBsaXN0IGluaXRpYWxpemVkIGFib3ZlICovCisgIGRhdGEtPnN0YXRlLnRpbWVvdXRsaXN0ID0gdGltZW91dGxpc3Q7CisgIHRpbWVvdXRsaXN0ID0gTlVMTDsKKworICAvKiBSZW1vdmUgaGFuZGxlIGZyb20gdGhlIGxpc3Qgb2YgJ2Nsb3N1cmUgaGFuZGxlcycgaW4gY2FzZSBpdCBpcyB0aGVyZSAqLworICBjbCA9IG11bHRpLT5jbG9zdXJlOworICB3aGlsZShjbCkgeworICAgIHN0cnVjdCBjbG9zdXJlICpuZXh0ID0gY2wtPm5leHQ7CisgICAgaWYoY2wtPmVhc3lfaGFuZGxlID09IGRhdGEpIHsKKyAgICAgIC8qIFJlbW92ZSBub2RlIGZyb20gbGlzdCAqLworICAgICAgZnJlZShjbCk7CisgICAgICBpZihwcmV2KQorICAgICAgICBwcmV2LT5uZXh0ID0gbmV4dDsKKyAgICAgIGVsc2UKKyAgICAgICAgbXVsdGktPmNsb3N1cmUgPSBuZXh0OworICAgICAgLyogcmVtb3ZlZCBmcm9tIGNsb3N1cmUgbGlzdCBub3csIHRoaXMgbWlnaHQgcmV1c2UgYW4gZXhpc3RpbmcKKyAgICAgICAgIGV4aXN0aW5nIGNvbm5lY3Rpb24gYnV0IHdlIGRvbid0IGtub3cgdGhhdCBhdCB0aGlzIHBvaW50ICovCisgICAgICBkYXRhLT5zdGF0ZS5zaGFyZWRfY29ubiA9IE5VTEw7CisgICAgICAvKiBObyBuZWVkIHRvIGNvbnRpbnVlLCBoYW5kbGUgY2FuIG9ubHkgYmUgcHJlc2VudCBvbmNlIGluIHRoZSBsaXN0ICovCisgICAgICBicmVhazsKKyAgICB9CisgICAgcHJldiA9IGNsOworICAgIGNsID0gbmV4dDsKKyAgfQorCisgIC8qIHNldCB0aGUgZWFzeSBoYW5kbGUgKi8KKyAgZWFzeS0+ZWFzeV9oYW5kbGUgPSBkYXRhOworICBtdWx0aXN0YXRlKGVhc3ksIENVUkxNX1NUQVRFX0lOSVQpOworCisgIC8qIHNldCB0aGUgYmFjayBwb2ludGVyIHRvIG9uZV9lYXN5IHRvIGFzc2lzdCBpbiByZW1vdmFsICovCisgIGVhc3ktPmVhc3lfaGFuZGxlLT5tdWx0aV9wb3MgPSAgZWFzeTsKKworICAvKiBmb3IgbXVsdGkgaW50ZXJmYWNlIGNvbm5lY3Rpb25zLCB3ZSBzaGFyZSBETlMgY2FjaGUgYXV0b21hdGljYWxseSBpZiB0aGUKKyAgICAgZWFzeSBoYW5kbGUncyBvbmUgaXMgY3VycmVudGx5IHByaXZhdGUuICovCisgIGlmKGVhc3ktPmVhc3lfaGFuZGxlLT5kbnMuaG9zdGNhY2hlICYmCisgICAgIChlYXN5LT5lYXN5X2hhbmRsZS0+ZG5zLmhvc3RjYWNoZXR5cGUgPT0gSENBQ0hFX1BSSVZBVEUpKSB7CisgICAgQ3VybF9oYXNoX2Rlc3Ryb3koZWFzeS0+ZWFzeV9oYW5kbGUtPmRucy5ob3N0Y2FjaGUpOworICAgIGVhc3ktPmVhc3lfaGFuZGxlLT5kbnMuaG9zdGNhY2hlID0gTlVMTDsKKyAgICBlYXN5LT5lYXN5X2hhbmRsZS0+ZG5zLmhvc3RjYWNoZXR5cGUgPSBIQ0FDSEVfTk9ORTsKKyAgfQorCisgIGlmKCFlYXN5LT5lYXN5X2hhbmRsZS0+ZG5zLmhvc3RjYWNoZSB8fAorICAgICAoZWFzeS0+ZWFzeV9oYW5kbGUtPmRucy5ob3N0Y2FjaGV0eXBlID09IEhDQUNIRV9OT05FKSkgeworICAgIGVhc3ktPmVhc3lfaGFuZGxlLT5kbnMuaG9zdGNhY2hlID0gbXVsdGktPmhvc3RjYWNoZTsKKyAgICBlYXN5LT5lYXN5X2hhbmRsZS0+ZG5zLmhvc3RjYWNoZXR5cGUgPSBIQ0FDSEVfTVVMVEk7CisgIH0KKworICAvKiBPbiBhIG11bHRpIHN0YWNrIHRoZSBjb25uZWN0aW9uIGNhY2hlLCBvd25lZCBieSB0aGUgbXVsdGkgaGFuZGxlLAorICAgICBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgZWFzeSBoYW5kbGVzIHdpdGhpbiB0aGUgbXVsdGkgaGFuZGxlLiAqLworICBpZihlYXN5LT5lYXN5X2hhbmRsZS0+c3RhdGUuY29ubmMgJiYKKyAgICAgKGVhc3ktPmVhc3lfaGFuZGxlLT5zdGF0ZS5jb25uYy0+dHlwZSA9PSBDT05OQ0FDSEVfUFJJVkFURSkpIHsKKyAgICAvKiBraWxsIG9sZCBwcml2YXRlIGNvbm5lY3Rpb24gY2FjaGUgKi8KKyAgICBDdXJsX3JtX2Nvbm5jKGVhc3ktPmVhc3lfaGFuZGxlLT5zdGF0ZS5jb25uYyk7CisgICAgZWFzeS0+ZWFzeV9oYW5kbGUtPnN0YXRlLmNvbm5jID0gTlVMTDsKKyAgfQorICAvKiBQb2ludCBub3cgdG8gdGhpcyBtdWx0aSdzIGNvbm5lY3Rpb24gY2FjaGUgKi8KKyAgZWFzeS0+ZWFzeV9oYW5kbGUtPnN0YXRlLmNvbm5jID0gbXVsdGktPmNvbm5jOworICBlYXN5LT5lYXN5X2hhbmRsZS0+c3RhdGUuY29ubmMtPnR5cGUgPSBDT05OQ0FDSEVfTVVMVEk7CisKKyAgLyogVGhpcyBhZGRzIHRoZSBuZXcgZW50cnkgYXQgdGhlICdlbmQnIG9mIHRoZSBkb3VibHktbGlua2VkIGNpcmN1bGFyCisgICAgIGxpc3Qgb2YgQ3VybF9vbmVfZWFzeSBzdHJ1Y3RzIHRvIHRyeSBhbmQgbWFpbnRhaW4gYSBGSUZPIHF1ZXVlIHNvCisgICAgIHRoZSBwaXBlbGluZWQgcmVxdWVzdHMgYXJlIGluIG9yZGVyLiAqLworCisgIC8qIFdlIGFkZCB0aGlzIG5ldyBlbnRyeSBsYXN0IGluIHRoZSBsaXN0LiBXZSBtYWtlIG91ciAnbmV4dCcgcG9pbnQgdG8gdGhlCisgICAgICdmaXJzdCcgc3RydWN0IGFuZCBvdXIgJ3ByZXYnIHBvaW50IHRvIHRoZSBwcmV2aW91cyAncHJldicgKi8KKyAgZWFzeS0+bmV4dCA9ICZtdWx0aS0+ZWFzeTsKKyAgZWFzeS0+cHJldiA9IG11bHRpLT5lYXN5LnByZXY7CisKKyAgLyogbWFrZSAnZWFzeScgdGhlIGxhc3Qgbm9kZSBpbiB0aGUgY2hhaW4gKi8KKyAgbXVsdGktPmVhc3kucHJldiA9IGVhc3k7CisKKyAgLyogaWYgdGhlcmUgd2FzIGEgcHJldiBub2RlLCBtYWtlIHN1cmUgaXRzICduZXh0JyBwb2ludGVyIGxpbmtzIHRvCisgICAgIHRoZSBuZXcgbm9kZSAqLworICBlYXN5LT5wcmV2LT5uZXh0ID0gZWFzeTsKKworICAvKiBtYWtlIHRoZSBTZXNzaW9uSGFuZGxlIHJlZmVyIGJhY2sgdG8gdGhpcyBtdWx0aSBoYW5kbGUgKi8KKyAgQ3VybF9lYXN5X2FkZG11bHRpKGVhc3lfaGFuZGxlLCBtdWx0aV9oYW5kbGUpOworCisgIC8qIG1ha2UgdGhlIFNlc3Npb25IYW5kbGUgc3RydWN0IHJlZmVyIGJhY2sgdG8gdGhpcyBzdHJ1Y3QgKi8KKyAgZWFzeS0+ZWFzeV9oYW5kbGUtPnNldC5vbmVfZWFzeSA9IGVhc3k7CisKKyAgLyogU2V0IHRoZSB0aW1lb3V0IGZvciB0aGlzIGhhbmRsZSB0byBleHBpcmUgcmVhbGx5IHNvb24gc28gdGhhdCBpdCB3aWxsCisgICAgIGJlIHRha2VuIGNhcmUgb2YgZXZlbiB3aGVuIHRoaXMgaGFuZGxlIGlzIGFkZGVkIGluIHRoZSBtaWRzdCBvZiBvcGVyYXRpb24KKyAgICAgd2hlbiBvbmx5IHRoZSBjdXJsX211bHRpX3NvY2tldCgpIEFQSSBpcyB1c2VkLiBEdXJpbmcgdGhhdCBmbG93LCBvbmx5CisgICAgIHNvY2tldHMgdGhhdCB0aW1lLW91dCBvciBoYXZlIGFjdGlvbnMgd2lsbCBiZSBkZWFsdCB3aXRoLiBTaW5jZSB0aGlzCisgICAgIGhhbmRsZSBoYXMgbm8gYWN0aW9uIHlldCwgd2UgbWFrZSBzdXJlIGl0IHRpbWVzIG91dCB0byBnZXQgdGhpbmdzIHRvCisgICAgIGhhcHBlbi4gKi8KKyAgQ3VybF9leHBpcmUoZWFzeS0+ZWFzeV9oYW5kbGUsIDEpOworCisgIC8qIGluY3JlYXNlIHRoZSBub2RlLWNvdW50ZXIgKi8KKyAgbXVsdGktPm51bV9lYXN5Kys7CisKKyAgLyogaW5jcmVhc2UgdGhlIGFsaXZlLWNvdW50ZXIgKi8KKyAgbXVsdGktPm51bV9hbGl2ZSsrOworCisgIC8qIEEgc29tZXdoYXQgY3J1ZGUgd29yay1hcm91bmQgZm9yIGEgbGl0dGxlIGdsaXRjaCBpbiB1cGRhdGVfdGltZXIoKSB0aGF0CisgICAgIGhhcHBlbnMgaWYgdGhlIGxhc3RjYWxsIHRpbWUgaXMgc2V0IHRvIHRoZSBzYW1lIHRpbWUgd2hlbiB0aGUgaGFuZGxlIGlzCisgICAgIHJlbW92ZWQgYXMgd2hlbiB0aGUgbmV4dCBoYW5kbGUgaXMgYWRkZWQsIGFzIHRoZW4gdGhlIGNoZWNrIGluCisgICAgIHVwZGF0ZV90aW1lcigpIHRoYXQgcHJldmVudHMgY2FsbGluZyB0aGUgYXBwbGljYXRpb24gbXVsdGlwbGUgdGltZXMgd2l0aAorICAgICB0aGUgc2FtZSB0aW1lciBpbmZvciB3aWxsIG5vdCB0cmlnZ2VyIGFuZCB0aGVuIHRoZSBuZXcgaGFuZGxlJ3MgdGltZW91dAorICAgICB3aWxsIG5vdCBiZSBub3RpZmllZCB0byB0aGUgYXBwLgorCisgICAgIFRoZSB3b3JrLWFyb3VuZCBpcyB0aHVzIHNpbXBseSB0byBjbGVhciB0aGUgJ2xhc3RjYWxsJyB2YXJpYWJsZSB0byBmb3JjZQorICAgICB1cGRhdGVfdGltZXIoKSB0byBhbHdheXMgdHJpZ2dlciBhIGNhbGxiYWNrIHRvIHRoZSBhcHAgd2hlbiBhIG5ldyBlYXN5CisgICAgIGhhbmRsZSBpcyBhZGRlZCAqLworICBtZW1zZXQoJm11bHRpLT50aW1lcl9sYXN0Y2FsbCwgMCwgc2l6ZW9mKG11bHRpLT50aW1lcl9sYXN0Y2FsbCkpOworCisgIHVwZGF0ZV90aW1lcihtdWx0aSk7CisgIHJldHVybiBDVVJMTV9PSzsKK30KKworI2lmIDAKKy8qIERlYnVnLWZ1bmN0aW9uLCB1c2VkIGxpa2UgdGhpczoKKyAqCisgKiBDdXJsX2hhc2hfcHJpbnQobXVsdGktPnNvY2toYXNoLCBkZWJ1Z19wcmludF9zb2NrX2hhc2gpOworICoKKyAqIEVuYWJsZSB0aGUgaGFzaCBwcmludCBmdW5jdGlvbiBmaXJzdCBieSBlZGl0aW5nIGhhc2guYworICovCitzdGF0aWMgdm9pZCBkZWJ1Z19wcmludF9zb2NrX2hhc2godm9pZCAqcCkKK3sKKyAgc3RydWN0IEN1cmxfc2hfZW50cnkgKnNoID0gKHN0cnVjdCBDdXJsX3NoX2VudHJ5ICopcDsKKworICBmcHJpbnRmKHN0ZGVyciwgIiBbZWFzeSAlcC9tYWdpYyAleC9zb2NrZXQgJWRdIiwKKyAgICAgICAgICAodm9pZCAqKXNoLT5lYXN5LCBzaC0+ZWFzeS0+bWFnaWMsIChpbnQpc2gtPnNvY2tldCk7Cit9CisjZW5kaWYKKworQ1VSTE1jb2RlIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShDVVJMTSAqbXVsdGlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMICpjdXJsX2hhbmRsZSkKK3sKKyAgc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpPShzdHJ1Y3QgQ3VybF9tdWx0aSAqKW11bHRpX2hhbmRsZTsKKyAgc3RydWN0IEN1cmxfb25lX2Vhc3kgKmVhc3k7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY3VybF9oYW5kbGU7CisKKyAgLyogRmlyc3QsIG1ha2Ugc29tZSBiYXNpYyBjaGVja3MgdGhhdCB0aGUgQ1VSTE0gaGFuZGxlIGlzIGEgZ29vZCBoYW5kbGUgKi8KKyAgaWYoIUdPT0RfTVVMVElfSEFORExFKG11bHRpKSkKKyAgICByZXR1cm4gQ1VSTE1fQkFEX0hBTkRMRTsKKworICAvKiBWZXJpZnkgdGhhdCB3ZSBnb3QgYSBzb21ld2hhdCBnb29kIGVhc3kgaGFuZGxlIHRvbyAqLworICBpZighR09PRF9FQVNZX0hBTkRMRShjdXJsX2hhbmRsZSkpCisgICAgcmV0dXJuIENVUkxNX0JBRF9FQVNZX0hBTkRMRTsKKworICAvKiBwaWNrLXVwIGZyb20gdGhlICdjdXJsX2hhbmRsZScgdGhlIGtlcHQgcG9zaXRpb24gaW4gdGhlIGxpc3QgKi8KKyAgZWFzeSA9IGRhdGEtPm11bHRpX3BvczsKKworICBpZihlYXN5KSB7CisgICAgYm9vbCBwcmVtYXR1cmUgPSAoZWFzeS0+c3RhdGUgPCBDVVJMTV9TVEFURV9DT01QTEVURUQpID8gVFJVRSA6IEZBTFNFOworICAgIGJvb2wgZWFzeV9vd25zX2Nvbm4gPSAoZWFzeS0+ZWFzeV9jb25uICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWFzeS0+ZWFzeV9jb25uLT5kYXRhID09IGVhc3ktPmVhc3lfaGFuZGxlKSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSA6IEZBTFNFOworCisgICAgLyogSWYgdGhlICdzdGF0ZScgaXMgbm90IElOSVQgb3IgQ09NUExFVEVELCB3ZSBtaWdodCBuZWVkIHRvIGRvIHNvbWV0aGluZworICAgICAgIG5pY2UgdG8gcHV0IHRoZSBlYXN5X2hhbmRsZSBpbiBhIGdvb2Qga25vd24gc3RhdGUgd2hlbiB0aGlzIHJldHVybnMuICovCisgICAgaWYocHJlbWF0dXJlKQorICAgICAgLyogdGhpcyBoYW5kbGUgaXMgImFsaXZlIiBzbyB3ZSBuZWVkIHRvIGNvdW50IGRvd24gdGhlIHRvdGFsIG51bWJlciBvZgorICAgICAgICAgYWxpdmUgY29ubmVjdGlvbnMgd2hlbiB0aGlzIGlzIHJlbW92ZWQgKi8KKyAgICAgIG11bHRpLT5udW1fYWxpdmUtLTsKKworICAgIGlmKGVhc3ktPmVhc3lfY29ubiAmJgorICAgICAgIChlYXN5LT5lYXN5X2Nvbm4tPnNlbmRfcGlwZS0+c2l6ZSArCisgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+cmVjdl9waXBlLT5zaXplID4gMSkgJiYKKyAgICAgICBlYXN5LT5zdGF0ZSA+IENVUkxNX1NUQVRFX1dBSVRETyAmJgorICAgICAgIGVhc3ktPnN0YXRlIDwgQ1VSTE1fU1RBVEVfQ09NUExFVEVEKSB7CisgICAgICAvKiBJZiB0aGUgaGFuZGxlIGlzIGluIGEgcGlwZWxpbmUgYW5kIGhhcyBzdGFydGVkIHNlbmRpbmcgb2ZmIGl0cworICAgICAgICAgcmVxdWVzdCBidXQgbm90IHJlY2VpdmVkIGl0cyByZXNwb25zZSB5ZXQsIHdlIG5lZWQgdG8gY2xvc2UKKyAgICAgICAgIGNvbm5lY3Rpb24uICovCisgICAgICBlYXN5LT5lYXN5X2Nvbm4tPmJpdHMuY2xvc2UgPSBUUlVFOworICAgICAgLyogU2V0IGNvbm5lY3Rpb24gb3duZXIgc28gdGhhdCBDdXJsX2RvbmUoKSBjbG9zZXMgaXQuCisgICAgICAgICBXZSBjYW4gc2VmZWx5IGRvIHRoaXMgaGVyZSBzaW5jZSBjb25uZWN0aW9uIGlzIGtpbGxlZC4gKi8KKyAgICAgIGVhc3ktPmVhc3lfY29ubi0+ZGF0YSA9IGVhc3ktPmVhc3lfaGFuZGxlOworICAgIH0KKworICAgIC8qIFRoZSB0aW1lciBtdXN0IGJlIHNodXQgZG93biBiZWZvcmUgZWFzeS0+bXVsdGkgaXMgc2V0IHRvIE5VTEwsCisgICAgICAgZWxzZSB0aGUgdGltZW5vZGUgd2lsbCByZW1haW4gaW4gdGhlIHNwbGF5IHRyZWUgYWZ0ZXIKKyAgICAgICBjdXJsX2Vhc3lfY2xlYW51cCBpcyBjYWxsZWQuICovCisgICAgQ3VybF9leHBpcmUoZWFzeS0+ZWFzeV9oYW5kbGUsIDApOworCisgICAgLyogZGVzdHJveSB0aGUgdGltZW91dCBsaXN0IHRoYXQgaXMgaGVsZCBpbiB0aGUgZWFzeSBoYW5kbGUgKi8KKyAgICBpZihkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdCkgeworICAgICAgQ3VybF9sbGlzdF9kZXN0cm95KGRhdGEtPnN0YXRlLnRpbWVvdXRsaXN0LCBOVUxMKTsKKyAgICAgIGRhdGEtPnN0YXRlLnRpbWVvdXRsaXN0ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZihlYXN5LT5lYXN5X2hhbmRsZS0+ZG5zLmhvc3RjYWNoZXR5cGUgPT0gSENBQ0hFX01VTFRJKSB7CisgICAgICAvKiBjbGVhciBvdXQgdGhlIHVzYWdlIG9mIHRoZSBzaGFyZWQgRE5TIGNhY2hlICovCisgICAgICBlYXN5LT5lYXN5X2hhbmRsZS0+ZG5zLmhvc3RjYWNoZSA9IE5VTEw7CisgICAgICBlYXN5LT5lYXN5X2hhbmRsZS0+ZG5zLmhvc3RjYWNoZXR5cGUgPSBIQ0FDSEVfTk9ORTsKKyAgICB9CisKKyAgICBpZihlYXN5LT5lYXN5X2Nvbm4pIHsKKworICAgICAgLyogd2UgbXVzdCBjYWxsIEN1cmxfZG9uZSgpIGhlcmUgKGlmIHdlIHN0aWxsICJvd24gaXQiKSBzbyB0aGF0IHdlIGRvbid0CisgICAgICAgICBsZWF2ZSBhIGhhbGYtYmFrZWQgb25lIGFyb3VuZCAqLworICAgICAgaWYoZWFzeV9vd25zX2Nvbm4pIHsKKworICAgICAgICAvKiBDdXJsX2RvbmUoKSBjbGVhcnMgdGhlIGNvbm4tPmRhdGEgZmllbGQgdG8gbG9zZSB0aGUgYXNzb2NpYXRpb24KKyAgICAgICAgICAgYmV0d2VlbiB0aGUgZWFzeSBoYW5kbGUgYW5kIHRoZSBjb25uZWN0aW9uCisKKyAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgaWdub3JlcyB0aGUgcmV0dXJuIGNvZGUgc2ltcGx5IGJlY2F1c2UgdGhlcmUncworICAgICAgICAgICBub3RoaW5nIHJlYWxseSB1c2VmdWwgdG8gZG8gd2l0aCBpdCBhbnl3YXkhICovCisgICAgICAgICh2b2lkKUN1cmxfZG9uZSgmZWFzeS0+ZWFzeV9jb25uLCBlYXN5LT5yZXN1bHQsIHByZW1hdHVyZSk7CisKKyAgICAgICAgaWYoZWFzeS0+ZWFzeV9jb25uKQorICAgICAgICAgIC8qIHRoZSBjb25uZWN0aW9uIGlzIHN0aWxsIGFsaXZlLCBzZXQgYmFjayB0aGUgYXNzb2NpYXRpb24gdG8gZW5hYmxlCisgICAgICAgICAgICAgdGhlIGNoZWNrIGJlbG93IHRvIHRyaWdnZXIgVFJVRSAqLworICAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+ZGF0YSA9IGVhc3ktPmVhc3lfaGFuZGxlOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICAvKiBDbGVhciBjb25uZWN0aW9uIHBpcGVsaW5lcywgaWYgQ3VybF9kb25lIGFib3ZlIHdhcyBub3QgY2FsbGVkICovCisgICAgICAgIEN1cmxfZ2V0b2ZmX2FsbF9waXBlbGluZXMoZWFzeS0+ZWFzeV9oYW5kbGUsIGVhc3ktPmVhc3lfY29ubik7CisgICAgfQorCisgICAgLyogZmlndXJlIG91dCBpZiB0aGUgZWFzeSBoYW5kbGUgaXMgdXNlZCBieSBvbmUgb3IgbW9yZSBjb25uZWN0aW9ucyBpbiB0aGUKKyAgICAgICBjYWNoZSAqLworICAgIG11bHRpX2Nvbm5jX3JlbW92ZV9oYW5kbGUobXVsdGksIGVhc3ktPmVhc3lfaGFuZGxlKTsKKworICAgIGlmKGVhc3ktPmVhc3lfaGFuZGxlLT5zdGF0ZS5jb25uYy0+dHlwZSA9PSBDT05OQ0FDSEVfTVVMVEkpIHsKKyAgICAgIC8qIGlmIHRoaXMgd2FzIHVzaW5nIHRoZSBzaGFyZWQgY29ubmVjdGlvbiBjYWNoZSB3ZSBjbGVhciB0aGUgcG9pbnRlcgorICAgICAgICAgdG8gdGhhdCBzaW5jZSB3ZSdyZSBub3QgcGFydCBvZiB0aGF0IGhhbmRsZSBhbnltb3JlICovCisgICAgICBlYXN5LT5lYXN5X2hhbmRsZS0+c3RhdGUuY29ubmMgPSBOVUxMOworCisgICAgICAvKiBTaW5jZSB3ZSByZXR1cm4gdGhlIGNvbm5lY3Rpb24gYmFjayB0byB0aGUgY29tbXVuYWwgY29ubmVjdGlvbiBwb29sCisgICAgICAgICB3ZSBtYXJrIHRoZSBsYXN0IGNvbm5lY3Rpb24gYXMgaW5hY2Nlc3NpYmxlICovCisgICAgICBlYXN5LT5lYXN5X2hhbmRsZS0+c3RhdGUubGFzdGNvbm5lY3QgPSAtMTsKKworICAgICAgLyogTW9kaWZ5IHRoZSBjb25uZWN0aW5kZXggc2luY2UgdGhpcyBoYW5kbGUgY2FuJ3QgcG9pbnQgdG8gdGhlCisgICAgICAgICBjb25uZWN0aW9uIGNhY2hlIGFueW1vcmUuCisKKyAgICAgICAgIFRPRE86IGNvbnNpZGVyIGlmIHRoaXMgaXMgcmVhbGx5IHdoYXQgd2Ugd2FudC4gVGhlIGNvbm5lY3Rpb24gY2FjaGUKKyAgICAgICAgIGlzIHdpdGhpbiB0aGUgbXVsdGkgaGFuZGxlIGFuZCB0aGF0IG93bnMgdGhlIGNvbm5lY3Rpb25zIHNvIHdlIHNob3VsZAorICAgICAgICAgbm90IG5lZWQgdG8gdG91Y2ggY29ubmVjdGlvbnMgbGlrZSB0aGlzIHdoZW4gd2UganVzdCByZW1vdmUgYW4gZWFzeQorICAgICAgICAgaGFuZGxlLi4uCisgICAgICAqLworICAgICAgaWYoZWFzeS0+ZWFzeV9jb25uICYmIGVhc3lfb3duc19jb25uICYmCisgICAgICAgICAoZWFzeS0+ZWFzeV9jb25uLT5zZW5kX3BpcGUtPnNpemUgKworICAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+cmVjdl9waXBlLT5zaXplID09IDApKQorICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPmNvbm5lY3RpbmRleCA9IC0xOworICAgIH0KKworICAgIC8qIGNoYW5nZSBzdGF0ZSB3aXRob3V0IHVzaW5nIG11bHRpc3RhdGUoKSwgb25seSB0byBtYWtlIHNpbmdsZXNvY2tldCgpIGRvCisgICAgICAgd2hhdCB3ZSB3YW50ICovCisgICAgZWFzeS0+c3RhdGUgPSBDVVJMTV9TVEFURV9DT01QTEVURUQ7CisgICAgc2luZ2xlc29ja2V0KG11bHRpLCBlYXN5KTsgLyogdG8gbGV0IHRoZSBhcHBsaWNhdGlvbiBrbm93IHdoYXQgc29ja2V0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdmFuaXNoIHdpdGggdGhpcyBoYW5kbGUgKi8KKworICAgIEN1cmxfZWFzeV9hZGRtdWx0aShlYXN5LT5lYXN5X2hhbmRsZSwgTlVMTCk7IC8qIGNsZWFyIHRoZSBhc3NvY2lhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoaXMgbXVsdGkgaGFuZGxlICovCisKKyAgICB7CisgICAgICAvKiBtYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIG1lc3NhZ2UgaW4gdGhlIHF1ZXVlIHNlbnQgZnJvbSB0aGlzIGVhc3kKKyAgICAgICAgIGhhbmRsZSAqLworICAgICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqZTsKKworICAgICAgZm9yKGUgPSBtdWx0aS0+bXNnbGlzdC0+aGVhZDsgZTsgZSA9IGUtPm5leHQpIHsKKyAgICAgICAgc3RydWN0IEN1cmxfbWVzc2FnZSAqbXNnID0gZS0+cHRyOworCisgICAgICAgIGlmKG1zZy0+ZXh0bXNnLmVhc3lfaGFuZGxlID09IGVhc3ktPmVhc3lfaGFuZGxlKSB7CisgICAgICAgICAgQ3VybF9sbGlzdF9yZW1vdmUobXVsdGktPm1zZ2xpc3QsIGUsIE5VTEwpOworICAgICAgICAgIC8qIHRoZXJlIGNhbiBvbmx5IGJlIG9uZSBmcm9tIHRoaXMgc3BlY2lmaWMgaGFuZGxlICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBtYWtlIHRoZSBwcmV2aW91cyBub2RlIHBvaW50IHRvIG91ciBuZXh0ICovCisgICAgaWYoZWFzeS0+cHJldikKKyAgICAgIGVhc3ktPnByZXYtPm5leHQgPSBlYXN5LT5uZXh0OworICAgIC8qIG1ha2Ugb3VyIG5leHQgcG9pbnQgdG8gb3VyIHByZXZpb3VzIG5vZGUgKi8KKyAgICBpZihlYXN5LT5uZXh0KQorICAgICAgZWFzeS0+bmV4dC0+cHJldiA9IGVhc3ktPnByZXY7CisKKyAgICBlYXN5LT5lYXN5X2hhbmRsZS0+c2V0Lm9uZV9lYXN5ID0gTlVMTDsgLyogZGV0YWNoZWQgKi8KKworICAgIC8qIE51bGwgdGhlIHBvc2l0aW9uIGluIHRoZSBjb250cm9sbGluZyBzdHJ1Y3R1cmUgKi8KKyAgICBlYXN5LT5lYXN5X2hhbmRsZS0+bXVsdGlfcG9zID0gTlVMTDsKKworICAgIC8qIE5PVEUgTk9URSBOT1RFCisgICAgICAgV2UgZG8gbm90IHRvdWNoIHRoZSBlYXN5IGhhbmRsZSBoZXJlISAqLworICAgIGZyZWUoZWFzeSk7CisKKyAgICBtdWx0aS0+bnVtX2Vhc3ktLTsgLyogb25lIGxlc3MgdG8gY2FyZSBhYm91dCBub3cgKi8KKworICAgIHVwZGF0ZV90aW1lcihtdWx0aSk7CisgICAgcmV0dXJuIENVUkxNX09LOworICB9CisgIGVsc2UKKyAgICByZXR1cm4gQ1VSTE1fQkFEX0VBU1lfSEFORExFOyAvKiB0d2Fzbid0IGZvdW5kICovCit9CisKK2Jvb2wgQ3VybF9tdWx0aV9jYW5QaXBlbGluZShjb25zdCBzdHJ1Y3QgQ3VybF9tdWx0aSogbXVsdGkpCit7CisgIHJldHVybiBtdWx0aS0+cGlwZWxpbmluZ19lbmFibGVkOworfQorCit2b2lkIEN1cmxfbXVsdGlfaGFuZGxlUGlwZUJyZWFrKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBzdHJ1Y3QgQ3VybF9vbmVfZWFzeSAqb25lX2Vhc3kgPSBkYXRhLT5zZXQub25lX2Vhc3k7CisKKyAgaWYob25lX2Vhc3kpCisgICAgb25lX2Vhc3ktPmVhc3lfY29ubiA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgd2FpdGNvbm5lY3RfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCit7CisgIGlmKCFudW1zb2NrcykKKyAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKKworICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisKKyAgLyogd2hlbiB3ZSd2ZSBzZW50IGEgQ09OTkVDVCB0byBhIHByb3h5LCB3ZSBzaG91bGQgcmF0aGVyIHdhaXQgZm9yIHRoZQorICAgICBzb2NrZXQgdG8gYmVjb21lIHJlYWRhYmxlIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSByZXNwb25zZSBoZWFkZXJzICovCisgIGlmKGNvbm4tPnR1bm5lbF9zdGF0ZVtGSVJTVFNPQ0tFVF0gPT0gVFVOTkVMX0NPTk5FQ1QpCisgICAgcmV0dXJuIEdFVFNPQ0tfUkVBRFNPQ0soMCk7CisKKyAgcmV0dXJuIEdFVFNPQ0tfV1JJVEVTT0NLKDApOworfQorCitzdGF0aWMgaW50IGRvbW9yZV9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3sKKyAgaWYoY29ubiAmJiBjb25uLT5oYW5kbGVyLT5kb21vcmVfZ2V0c29jaykKKyAgICByZXR1cm4gY29ubi0+aGFuZGxlci0+ZG9tb3JlX2dldHNvY2soY29ubiwgc29ja3MsIG51bXNvY2tzKTsKKyAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Cit9CisKKy8qIHJldHVybnMgYml0bWFwcGVkIGZsYWdzIGZvciB0aGlzIGhhbmRsZSBhbmQgaXRzIHNvY2tldHMgKi8KK3N0YXRpYyBpbnQgbXVsdGlfZ2V0c29jayhzdHJ1Y3QgQ3VybF9vbmVfZWFzeSAqZWFzeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywgLyogcG9pbnRzIHRvIG51bXNvY2tzIG51bWJlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzb2NrZXRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQoreworICAvKiBJZiB0aGUgcGlwZSBicm9rZSwgb3IgaWYgdGhlcmUncyBubyBjb25uZWN0aW9uIGxlZnQgZm9yIHRoaXMgZWFzeSBoYW5kbGUsCisgICAgIHRoZW4gd2UgTVVTVCBiYWlsIG91dCBub3cgd2l0aCBubyBiaXRtYXNrIHNldC4gVGhlIG5vIGNvbm5lY3Rpb24gY2FzZSBjYW4KKyAgICAgaGFwcGVuIHdoZW4gdGhpcyBpcyBjYWxsZWQgZnJvbSBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoKSA9PgorICAgICBzaW5nbGVzb2NrZXQoKSA9PiBtdWx0aV9nZXRzb2NrKCkuCisgICovCisgIGlmKGVhc3ktPmVhc3lfaGFuZGxlLT5zdGF0ZS5waXBlX2Jyb2tlIHx8ICFlYXN5LT5lYXN5X2Nvbm4pCisgICAgcmV0dXJuIDA7CisKKyAgaWYoZWFzeS0+c3RhdGUgPiBDVVJMTV9TVEFURV9DT05ORUNUICYmCisgICAgIGVhc3ktPnN0YXRlIDwgQ1VSTE1fU1RBVEVfQ09NUExFVEVEKSB7CisgICAgLyogU2V0IHVwIG93bmVyc2hpcCBjb3JyZWN0bHkgKi8KKyAgICBlYXN5LT5lYXN5X2Nvbm4tPmRhdGEgPSBlYXN5LT5lYXN5X2hhbmRsZTsKKyAgfQorCisgIHN3aXRjaChlYXN5LT5zdGF0ZSkgeworICBkZWZhdWx0OgorI2lmIDAgLyogc3dpdGNoIGJhY2sgb24gdGhlc2UgY2FzZXMgdG8gZ2V0IHRoZSBjb21waWxlciB0byBjaGVjayBmb3IgYWxsIGVudW1zCisgICAgICAgICB0byBiZSBwcmVzZW50ICovCisgIGNhc2UgQ1VSTE1fU1RBVEVfVE9PRkFTVDogIC8qIHJldHVybnMgMCwgc28gd2lsbCBub3Qgc2VsZWN0LiAqLworICBjYXNlIENVUkxNX1NUQVRFX0NPTVBMRVRFRDoKKyAgY2FzZSBDVVJMTV9TVEFURV9NU0dTRU5UOgorICBjYXNlIENVUkxNX1NUQVRFX0lOSVQ6CisgIGNhc2UgQ1VSTE1fU1RBVEVfQ09OTkVDVDoKKyAgY2FzZSBDVVJMTV9TVEFURV9XQUlURE86CisgIGNhc2UgQ1VSTE1fU1RBVEVfRE9ORToKKyAgY2FzZSBDVVJMTV9TVEFURV9MQVNUOgorICAgIC8qIHRoaXMgd2lsbCBnZXQgY2FsbGVkIHdpdGggQ1VSTE1fU1RBVEVfQ09NUExFVEVEIHdoZW4gYSBoYW5kbGUgaXMKKyAgICAgICByZW1vdmVkICovCisjZW5kaWYKKyAgICByZXR1cm4gMDsKKworICBjYXNlIENVUkxNX1NUQVRFX1dBSVRSRVNPTFZFOgorICAgIHJldHVybiBDdXJsX3Jlc29sdmVyX2dldHNvY2soZWFzeS0+ZWFzeV9jb25uLCBzb2NrcywgbnVtc29ja3MpOworCisgIGNhc2UgQ1VSTE1fU1RBVEVfUFJPVE9DT05ORUNUOgorICAgIHJldHVybiBDdXJsX3Byb3RvY29sX2dldHNvY2soZWFzeS0+ZWFzeV9jb25uLCBzb2NrcywgbnVtc29ja3MpOworCisgIGNhc2UgQ1VSTE1fU1RBVEVfRE86CisgIGNhc2UgQ1VSTE1fU1RBVEVfRE9JTkc6CisgICAgcmV0dXJuIEN1cmxfZG9pbmdfZ2V0c29jayhlYXN5LT5lYXN5X2Nvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CisKKyAgY2FzZSBDVVJMTV9TVEFURV9XQUlUUFJPWFlDT05ORUNUOgorICBjYXNlIENVUkxNX1NUQVRFX1dBSVRDT05ORUNUOgorICAgIHJldHVybiB3YWl0Y29ubmVjdF9nZXRzb2NrKGVhc3ktPmVhc3lfY29ubiwgc29ja3MsIG51bXNvY2tzKTsKKworICBjYXNlIENVUkxNX1NUQVRFX0RPX01PUkU6CisgICAgcmV0dXJuIGRvbW9yZV9nZXRzb2NrKGVhc3ktPmVhc3lfY29ubiwgc29ja3MsIG51bXNvY2tzKTsKKworICBjYXNlIENVUkxNX1NUQVRFX0RPX0RPTkU6IC8qIHNpbmNlIGlzIHNldCBhZnRlciBETyBpcyBjb21wbGV0ZWQsIHdlIHN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHdhaXRpbmcgZm9yIHRoZSBzYW1lIGFzIHRoZSAqUEVSRk9STQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlcyAqLworICBjYXNlIENVUkxNX1NUQVRFX1BFUkZPUk06CisgIGNhc2UgQ1VSTE1fU1RBVEVfV0FJVFBFUkZPUk06CisgICAgcmV0dXJuIEN1cmxfc2luZ2xlX2dldHNvY2soZWFzeS0+ZWFzeV9jb25uLCBzb2NrcywgbnVtc29ja3MpOworICB9CisKK30KKworQ1VSTE1jb2RlIGN1cmxfbXVsdGlfZmRzZXQoQ1VSTE0gKm11bHRpX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCAqcmVhZF9mZF9zZXQsIGZkX3NldCAqd3JpdGVfZmRfc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpleGNfZmRfc2V0LCBpbnQgKm1heF9mZCkKK3sKKyAgLyogU2NhbiB0aHJvdWdoIGFsbCB0aGUgZWFzeSBoYW5kbGVzIHRvIGdldCB0aGUgZmlsZSBkZXNjcmlwdG9ycyBzZXQuCisgICAgIFNvbWUgZWFzeSBoYW5kbGVzIG1heSBub3QgaGF2ZSBjb25uZWN0ZWQgdG8gdGhlIHJlbW90ZSBob3N0IHlldCwKKyAgICAgYW5kIHRoZW4gd2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBpcyBkb25lLiAqLworICBzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGk9KHN0cnVjdCBDdXJsX211bHRpICopbXVsdGlfaGFuZGxlOworICBzdHJ1Y3QgQ3VybF9vbmVfZWFzeSAqZWFzeTsKKyAgaW50IHRoaXNfbWF4X2ZkPS0xOworICBjdXJsX3NvY2tldF90IHNvY2tidW5jaFtNQVhfU09DS1NQRVJFQVNZSEFORExFXTsKKyAgaW50IGJpdG1hcDsKKyAgaW50IGk7CisgICh2b2lkKWV4Y19mZF9zZXQ7IC8qIG5vdCB1c2VkICovCisKKyAgaWYoIUdPT0RfTVVMVElfSEFORExFKG11bHRpKSkKKyAgICByZXR1cm4gQ1VSTE1fQkFEX0hBTkRMRTsKKworICBlYXN5PW11bHRpLT5lYXN5Lm5leHQ7CisgIHdoaWxlKGVhc3kgIT0gJm11bHRpLT5lYXN5KSB7CisgICAgYml0bWFwID0gbXVsdGlfZ2V0c29jayhlYXN5LCBzb2NrYnVuY2gsIE1BWF9TT0NLU1BFUkVBU1lIQU5ETEUpOworCisgICAgZm9yKGk9MDsgaTwgTUFYX1NPQ0tTUEVSRUFTWUhBTkRMRTsgaSsrKSB7CisgICAgICBjdXJsX3NvY2tldF90IHMgPSBDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgICAgIGlmKChiaXRtYXAgJiBHRVRTT0NLX1JFQURTT0NLKGkpKSAmJiBWQUxJRF9TT0NLKChzb2NrYnVuY2hbaV0pKSkgeworICAgICAgICBGRF9TRVQoc29ja2J1bmNoW2ldLCByZWFkX2ZkX3NldCk7CisgICAgICAgIHMgPSBzb2NrYnVuY2hbaV07CisgICAgICB9CisgICAgICBpZigoYml0bWFwICYgR0VUU09DS19XUklURVNPQ0soaSkpICYmIFZBTElEX1NPQ0soKHNvY2tidW5jaFtpXSkpKSB7CisgICAgICAgIEZEX1NFVChzb2NrYnVuY2hbaV0sIHdyaXRlX2ZkX3NldCk7CisgICAgICAgIHMgPSBzb2NrYnVuY2hbaV07CisgICAgICB9CisgICAgICBpZihzID09IENVUkxfU09DS0VUX0JBRCkKKyAgICAgICAgLyogdGhpcyBzb2NrZXQgaXMgdW51c2VkLCBicmVhayBvdXQgb2YgbG9vcCAqLworICAgICAgICBicmVhazsKKyAgICAgIGVsc2UgeworICAgICAgICBpZigoaW50KXMgPiB0aGlzX21heF9mZCkKKyAgICAgICAgICB0aGlzX21heF9mZCA9IChpbnQpczsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlYXN5ID0gZWFzeS0+bmV4dDsgLyogY2hlY2sgbmV4dCBoYW5kbGUgKi8KKyAgfQorCisgICptYXhfZmQgPSB0aGlzX21heF9mZDsKKworICByZXR1cm4gQ1VSTE1fT0s7Cit9CisKK3N0YXRpYyBDVVJMTWNvZGUgbXVsdGlfcnVuc2luZ2xlKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIG5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX29uZV9lYXN5ICplYXN5KQoreworICBzdHJ1Y3QgQ3VybF9tZXNzYWdlICptc2cgPSBOVUxMOworICBib29sIGNvbm5lY3RlZDsKKyAgYm9vbCBhc3luYzsKKyAgYm9vbCBwcm90b2NvbF9jb25uZWN0ID0gRkFMU0U7CisgIGJvb2wgZG9waGFzZV9kb25lOworICBib29sIGRvbmUgPSBGQUxTRTsKKyAgQ1VSTE1jb2RlIHJlc3VsdCA9IENVUkxNX09LOworICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqazsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE7CisgIGxvbmcgdGltZW91dF9tczsKKworICBpZighR09PRF9FQVNZX0hBTkRMRShlYXN5LT5lYXN5X2hhbmRsZSkpCisgICAgcmV0dXJuIENVUkxNX0JBRF9FQVNZX0hBTkRMRTsKKworICBkYXRhID0gZWFzeS0+ZWFzeV9oYW5kbGU7CisKKyAgZG8geworICAgIC8qIHRoaXMgaXMgYSBzaW5nbGUtaXRlcmF0aW9uIGRvLXdoaWxlIGxvb3AganVzdCB0byBhbGxvdyBhCisgICAgICAgYnJlYWsgdG8gc2tpcCB0byB0aGUgZW5kIG9mIGl0ICovCisgICAgYm9vbCBkaXNjb25uZWN0X2Nvbm4gPSBGQUxTRTsKKworICAgIC8qIEhhbmRsZSB0aGUgY2FzZSB3aGVuIHRoZSBwaXBlIGJyZWFrcywgaS5lLiwgdGhlIGNvbm5lY3Rpb24KKyAgICAgICB3ZSdyZSB1c2luZyBnZXRzIGNsZWFuZWQgdXAgYW5kIHdlJ3JlIGxlZnQgd2l0aCBub3RoaW5nLiAqLworICAgIGlmKGRhdGEtPnN0YXRlLnBpcGVfYnJva2UpIHsKKyAgICAgIGluZm9mKGRhdGEsICJQaXBlIGJyb2tlOiBoYW5kbGUgMHglcCwgdXJsID0gJXNcbiIsCisgICAgICAgICAgICBlYXN5LCBkYXRhLT5zdGF0ZS5wYXRoKTsKKworICAgICAgaWYoZWFzeS0+c3RhdGUgPCBDVVJMTV9TVEFURV9DT01QTEVURUQpIHsKKyAgICAgICAgLyogSGVhZCBiYWNrIHRvIHRoZSBDT05ORUNUIHN0YXRlICovCisgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfQ09OTkVDVCk7CisgICAgICAgIHJlc3VsdCA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKKyAgICAgICAgZWFzeS0+cmVzdWx0ID0gQ1VSTEVfT0s7CisgICAgICB9CisKKyAgICAgIGRhdGEtPnN0YXRlLnBpcGVfYnJva2UgPSBGQUxTRTsKKyAgICAgIGVhc3ktPmVhc3lfY29ubiA9IE5VTEw7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZihlYXN5LT5lYXN5X2Nvbm4gJiYgZWFzeS0+c3RhdGUgPiBDVVJMTV9TVEFURV9DT05ORUNUICYmCisgICAgICAgZWFzeS0+c3RhdGUgPCBDVVJMTV9TVEFURV9DT01QTEVURUQpCisgICAgICAvKiBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBjb25uZWN0aW9uJ3MgY3VycmVudCBvd25lciAqLworICAgICAgZWFzeS0+ZWFzeV9jb25uLT5kYXRhID0gZGF0YTsKKworICAgIGlmKGVhc3ktPmVhc3lfY29ubiAmJgorICAgICAgIChlYXN5LT5zdGF0ZSA+PSBDVVJMTV9TVEFURV9DT05ORUNUKSAmJgorICAgICAgIChlYXN5LT5zdGF0ZSA8IENVUkxNX1NUQVRFX0NPTVBMRVRFRCkpIHsKKyAgICAgIC8qIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvbm5lY3Qgc3RhdGUgYXMgb25seSB0aGVuIGlzIHRoZSBzdGFydCB0aW1lCisgICAgICAgICBzdG9yZWQsIGJ1dCB3ZSBtdXN0IG5vdCBjaGVjayBhbHJlYWR5IGNvbXBsZXRlZCBoYW5kbGVzICovCisKKyAgICAgIHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsICZub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWFzeS0+c3RhdGUgPD0gQ1VSTE1fU1RBVEVfV0FJVERPKT8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUU6RkFMU0UpOworCisgICAgICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgICAgICAvKiBIYW5kbGUgdGltZWQgb3V0ICovCisgICAgICAgIGlmKGVhc3ktPnN0YXRlID09IENVUkxNX1NUQVRFX1dBSVRSRVNPTFZFKQorICAgICAgICAgIGZhaWxmKGRhdGEsICJSZXNvbHZpbmcgdGltZWQgb3V0IGFmdGVyICVsZCBtaWxsaXNlY29uZHMiLAorICAgICAgICAgICAgICAgIEN1cmxfdHZkaWZmKG5vdywgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZSkpOworICAgICAgICBlbHNlIGlmKGVhc3ktPnN0YXRlID09IENVUkxNX1NUQVRFX1dBSVRDT05ORUNUKQorICAgICAgICAgIGZhaWxmKGRhdGEsICJDb25uZWN0aW9uIHRpbWVkIG91dCBhZnRlciAlbGQgbWlsbGlzZWNvbmRzIiwKKyAgICAgICAgICAgICAgICBDdXJsX3R2ZGlmZihub3csIGRhdGEtPnByb2dyZXNzLnRfc3RhcnRzaW5nbGUpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgayA9ICZkYXRhLT5yZXE7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJWxkIG1pbGxpc2Vjb25kcyB3aXRoICUiCisgICAgICAgICAgICAgICAgRk9STUFUX09GRl9UICIgb3V0IG9mICUiIEZPUk1BVF9PRkZfVCAiIGJ5dGVzIHJlY2VpdmVkIiwKKyAgICAgICAgICAgICAgICBDdXJsX3R2ZGlmZihub3csIGRhdGEtPnByb2dyZXNzLnRfc3RhcnRzaW5nbGUpLCBrLT5ieXRlY291bnQsCisgICAgICAgICAgICAgICAgay0+c2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBGb3JjZSB0aGUgY29ubmVjdGlvbiBjbG9zZWQgYmVjYXVzZSB0aGUgc2VydmVyIGNvdWxkIGNvbnRpbnVlIHRvCisgICAgICAgICAgIHNlbmQgdXMgc3R1ZmYgYXQgYW55IHRpbWUuIChUaGUgZGlzY29ubmVjdF9jb25uIGxvZ2ljIHVzZWQgYmVsb3cKKyAgICAgICAgICAgZG9lc24ndCB3b3JrIGF0IHRoaXMgcG9pbnQpLiAqLworICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPmJpdHMuY2xvc2UgPSBUUlVFOworICAgICAgICBlYXN5LT5yZXN1bHQgPSBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfQ09NUExFVEVEKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoKGVhc3ktPnN0YXRlKSB7CisgICAgY2FzZSBDVVJMTV9TVEFURV9JTklUOgorICAgICAgLyogaW5pdCB0aGlzIHRyYW5zZmVyLiAqLworICAgICAgZWFzeS0+cmVzdWx0PUN1cmxfcHJldHJhbnNmZXIoZGF0YSk7CisKKyAgICAgIGlmKENVUkxFX09LID09IGVhc3ktPnJlc3VsdCkgeworICAgICAgICAvKiBhZnRlciBpbml0LCBnbyBDT05ORUNUICovCisgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfQ09OTkVDVCk7CisgICAgICAgIHJlc3VsdCA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKKworICAgICAgICBkYXRhLT5zdGF0ZS51c2VkX2ludGVyZmFjZSA9IEN1cmxfaWZfbXVsdGk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTE1fU1RBVEVfQ09OTkVDVDoKKyAgICAgIC8qIENvbm5lY3QuIFdlIGdldCBhIGNvbm5lY3Rpb24gaWRlbnRpZmllciBmaWxsZWQgaW4uICovCisgICAgICBDdXJsX3BncnNUaW1lKGRhdGEsIFRJTUVSX1NUQVJUU0lOR0xFKTsKKyAgICAgIGVhc3ktPnJlc3VsdCA9IEN1cmxfY29ubmVjdChkYXRhLCAmZWFzeS0+ZWFzeV9jb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhc3luYywgJnByb3RvY29sX2Nvbm5lY3QpOworCisgICAgICBpZihDVVJMRV9PSyA9PSBlYXN5LT5yZXN1bHQpIHsKKyAgICAgICAgLyogQWRkIHRoaXMgaGFuZGxlIHRvIHRoZSBzZW5kIG9yIHBlbmQgcGlwZWxpbmUgKi8KKyAgICAgICAgZWFzeS0+cmVzdWx0ID0gYWRkSGFuZGxlVG9TZW5kT3JQZW5kUGlwZWxpbmUoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uKTsKKyAgICAgICAgaWYoQ1VSTEVfT0sgIT0gZWFzeS0+cmVzdWx0KQorICAgICAgICAgIGRpc2Nvbm5lY3RfY29ubiA9IFRSVUU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGlmKGFzeW5jKQorICAgICAgICAgICAgLyogV2UncmUgbm93IHdhaXRpbmcgZm9yIGFuIGFzeW5jaHJvbm91cyBuYW1lIGxvb2t1cCAqLworICAgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9XQUlUUkVTT0xWRSk7CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBhZnRlciB0aGUgY29ubmVjdCBoYXMgYmVlbiBzZW50IG9mZiwgZ28gV0FJVENPTk5FQ1QgdW5sZXNzIHRoZQorICAgICAgICAgICAgICAgcHJvdG9jb2wgY29ubmVjdCBpcyBhbHJlYWR5IGRvbmUgYW5kIHdlIGNhbiBnbyBkaXJlY3RseSB0bworICAgICAgICAgICAgICAgV0FJVERPIG9yIERPISAqLworICAgICAgICAgICAgcmVzdWx0ID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOworCisgICAgICAgICAgICBpZihwcm90b2NvbF9jb25uZWN0KQorICAgICAgICAgICAgICBtdWx0aXN0YXRlKGVhc3ksIG11bHRpLT5waXBlbGluaW5nX2VuYWJsZWQ/CisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE1fU1RBVEVfV0FJVERPOkNVUkxNX1NUQVRFX0RPKTsKKyAgICAgICAgICAgIGVsc2UgeworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorICAgICAgICAgICAgICBpZihlYXN5LT5lYXN5X2Nvbm4tPnR1bm5lbF9zdGF0ZVtGSVJTVFNPQ0tFVF0gPT0gVFVOTkVMX0NPTk5FQ1QpCisgICAgICAgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9XQUlUUFJPWFlDT05ORUNUKTsKKyAgICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9XQUlUQ09OTkVDVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTE1fU1RBVEVfV0FJVFJFU09MVkU6CisgICAgICAvKiBhd2FpdGluZyBhbiBhc3luY2ggbmFtZSByZXNvbHZlIHRvIGNvbXBsZXRlICovCisgICAgeworICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnMgPSBOVUxMOworCisgICAgICAvKiBjaGVjayBpZiB3ZSBoYXZlIHRoZSBuYW1lIHJlc29sdmVkIGJ5IG5vdyAqLworICAgICAgZWFzeS0+cmVzdWx0ID0gQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZChlYXN5LT5lYXN5X2Nvbm4sICZkbnMpOworCisgICAgICAvKiBVcGRhdGUgc29ja2V0cyBoZXJlLCBiZWNhdXNlIHRoZSBzb2NrZXQocykgbWF5IGhhdmUgYmVlbgorICAgICAgICAgY2xvc2VkIGFuZCB0aGUgYXBwbGljYXRpb24gdGh1cyBuZWVkcyB0byBiZSB0b2xkLCBldmVuIGlmIGl0CisgICAgICAgICBpcyBsaWtlbHkgdGhhdCB0aGUgc2FtZSBzb2NrZXQocykgd2lsbCBhZ2FpbiBiZSB1c2VkIGZ1cnRoZXIKKyAgICAgICAgIGRvd24uICBJZiB0aGUgbmFtZSBoYXMgbm90IHlldCBiZWVuIHJlc29sdmVkLCBpdCBpcyBsaWtlbHkKKyAgICAgICAgIHRoYXQgbmV3IHNvY2tldHMgaGF2ZSBiZWVuIG9wZW5lZCBpbiBhbiBhdHRlbXB0IHRvIGNvbnRhY3QKKyAgICAgICAgIGFub3RoZXIgcmVzb2x2ZXIuICovCisgICAgICBzaW5nbGVzb2NrZXQobXVsdGksIGVhc3kpOworCisgICAgICBpZihkbnMpIHsKKyAgICAgICAgLyogUGVyZm9ybSB0aGUgbmV4dCBzdGVwIGluIHRoZSBjb25uZWN0aW9uIHBoYXNlLCBhbmQgdGhlbiBtb3ZlIG9uCisgICAgICAgICAgIHRvIHRoZSBXQUlUQ09OTkVDVCBzdGF0ZSAqLworICAgICAgICBlYXN5LT5yZXN1bHQgPSBDdXJsX2FzeW5jX3Jlc29sdmVkKGVhc3ktPmVhc3lfY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvdG9jb2xfY29ubmVjdCk7CisKKyAgICAgICAgaWYoQ1VSTEVfT0sgIT0gZWFzeS0+cmVzdWx0KQorICAgICAgICAgIC8qIGlmIEN1cmxfYXN5bmNfcmVzb2x2ZWQoKSByZXR1cm5zIGZhaWx1cmUsIHRoZSBjb25uZWN0aW9uIHN0cnVjdAorICAgICAgICAgICAgIGlzIGFscmVhZHkgZnJlZWQgYW5kIGdvbmUgKi8KKyAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4gPSBOVUxMOyAgICAgICAgICAgLyogbm8gbW9yZSBjb25uZWN0aW9uICovCisgICAgICAgIGVsc2UgeworICAgICAgICAgIC8qIGNhbGwgYWdhaW4gcGxlYXNlIHNvIHRoYXQgd2UgZ2V0IHRoZSBuZXh0IHNvY2tldCBzZXR1cCAqLworICAgICAgICAgIHJlc3VsdCA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKKyAgICAgICAgICBpZihwcm90b2NvbF9jb25uZWN0KQorICAgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBtdWx0aS0+cGlwZWxpbmluZ19lbmFibGVkPworICAgICAgICAgICAgICAgICAgICAgICBDVVJMTV9TVEFURV9XQUlURE86Q1VSTE1fU1RBVEVfRE8pOworICAgICAgICAgIGVsc2UgeworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorICAgICAgICAgICAgaWYoZWFzeS0+ZWFzeV9jb25uLT50dW5uZWxfc3RhdGVbRklSU1RTT0NLRVRdID09IFRVTk5FTF9DT05ORUNUKQorICAgICAgICAgICAgICBtdWx0aXN0YXRlKGVhc3ksIENVUkxNX1NUQVRFX1dBSVRQUk9YWUNPTk5FQ1QpOworICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfV0FJVENPTk5FQ1QpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZihDVVJMRV9PSyAhPSBlYXN5LT5yZXN1bHQpIHsKKyAgICAgICAgLyogZmFpbHVyZSBkZXRlY3RlZCAqLworICAgICAgICBkaXNjb25uZWN0X2Nvbm4gPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKKyAgICBjYXNlIENVUkxNX1NUQVRFX1dBSVRQUk9YWUNPTk5FQ1Q6CisgICAgICAvKiB0aGlzIGlzIEhUVFAtc3BlY2lmaWMsIGJ1dCBzZW5kaW5nIENPTk5FQ1QgdG8gYSBwcm94eSBpcyBIVFRQLi4uICovCisgICAgICBlYXN5LT5yZXN1bHQgPSBDdXJsX2h0dHBfY29ubmVjdChlYXN5LT5lYXN5X2Nvbm4sICZwcm90b2NvbF9jb25uZWN0KTsKKworICAgICAgaWYoZWFzeS0+ZWFzeV9jb25uLT5iaXRzLnByb3h5X2Nvbm5lY3RfY2xvc2VkKSB7CisgICAgICAgIC8qIHJlc2V0IHRoZSBlcnJvciBidWZmZXIgKi8KKyAgICAgICAgaWYoZGF0YS0+c2V0LmVycm9yYnVmZmVyKQorICAgICAgICAgIGRhdGEtPnNldC5lcnJvcmJ1ZmZlclswXSA9ICdcMCc7CisgICAgICAgIGRhdGEtPnN0YXRlLmVycm9yYnVmID0gRkFMU0U7CisKKyAgICAgICAgZWFzeS0+cmVzdWx0ID0gQ1VSTEVfT0s7CisgICAgICAgIHJlc3VsdCA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKKyAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9DT05ORUNUKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoQ1VSTEVfT0sgPT0gZWFzeS0+cmVzdWx0KSB7CisgICAgICAgIGlmKGVhc3ktPmVhc3lfY29ubi0+dHVubmVsX3N0YXRlW0ZJUlNUU09DS0VUXSA9PSBUVU5ORUxfQ09NUExFVEUpCisgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9XQUlUQ09OTkVDVCk7CisgICAgICB9CisgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgY2FzZSBDVVJMTV9TVEFURV9XQUlUQ09OTkVDVDoKKyAgICAgIC8qIGF3YWl0aW5nIGEgY29tcGxldGlvbiBvZiBhbiBhc3luY2ggY29ubmVjdCAqLworICAgICAgZWFzeS0+cmVzdWx0ID0gQ3VybF9pc19jb25uZWN0ZWQoZWFzeS0+ZWFzeV9jb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklSU1RTT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubmVjdGVkKTsKKyAgICAgIGlmKGNvbm5lY3RlZCkgeworCisgICAgICAgIGlmKCFlYXN5LT5yZXN1bHQpCisgICAgICAgICAgLyogaWYgZXZlcnl0aGluZyBpcyBzdGlsbCBmaW5lIHdlIGRvIHRoZSBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0CisgICAgICAgICAgICAgc2V0dXAgKi8KKyAgICAgICAgICBlYXN5LT5yZXN1bHQgPSBDdXJsX3Byb3RvY29sX2Nvbm5lY3QoZWFzeS0+ZWFzeV9jb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvdG9jb2xfY29ubmVjdCk7CisgICAgICB9CisKKyAgICAgIGlmKENVUkxFX09LICE9IGVhc3ktPnJlc3VsdCkgeworICAgICAgICAvKiBmYWlsdXJlIGRldGVjdGVkICovCisgICAgICAgIC8qIEp1c3QgYnJlYWssIHRoZSBjbGVhbmluZyB1cCBpcyBoYW5kbGVkIGFsbCBpbiBvbmUgcGxhY2UgKi8KKyAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKGNvbm5lY3RlZCkgeworICAgICAgICBpZighcHJvdG9jb2xfY29ubmVjdCkgeworICAgICAgICAgIC8qIFdlIGhhdmUgYSBUQ1AgY29ubmVjdGlvbiwgYnV0ICdwcm90b2NvbF9jb25uZWN0JyBtYXkgYmUgZmFsc2UKKyAgICAgICAgICAgICBhbmQgdGhlbiB3ZSBjb250aW51ZSB0byAnU1RBVEVfUFJPVE9DT05ORUNUJy4gSWYgcHJvdG9jb2wKKyAgICAgICAgICAgICBjb25uZWN0IGlzIFRSVUUsIHdlIG1vdmUgb24gdG8gU1RBVEVfRE8uCisgICAgICAgICAgICAgQlVUIGlmIHdlIGFyZSB1c2luZyBhIHByb3h5IHdlIG11c3QgY2hhbmdlIHRvIFdBSVRQUk9YWUNPTk5FQ1QKKyAgICAgICAgICAqLworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorICAgICAgICAgIGlmKGVhc3ktPmVhc3lfY29ubi0+dHVubmVsX3N0YXRlW0ZJUlNUU09DS0VUXSA9PSBUVU5ORUxfQ09OTkVDVCkKKyAgICAgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfV0FJVFBST1hZQ09OTkVDVCk7CisgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICBtdWx0aXN0YXRlKGVhc3ksIENVUkxNX1NUQVRFX1BST1RPQ09OTkVDVCk7CisKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgLyogYWZ0ZXIgdGhlIGNvbm5lY3QgaGFzIGNvbXBsZXRlZCwgZ28gV0FJVERPIG9yIERPICovCisgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBtdWx0aS0+cGlwZWxpbmluZ19lbmFibGVkPworICAgICAgICAgICAgICAgICAgICAgQ1VSTE1fU1RBVEVfV0FJVERPOkNVUkxNX1NUQVRFX0RPKTsKKworICAgICAgICByZXN1bHQgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTE1fU1RBVEVfUFJPVE9DT05ORUNUOgorICAgICAgLyogcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdCBwaGFzZSAqLworICAgICAgZWFzeS0+cmVzdWx0ID0gQ3VybF9wcm90b2NvbF9jb25uZWN0aW5nKGVhc3ktPmVhc3lfY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvdG9jb2xfY29ubmVjdCk7CisgICAgICBpZigoZWFzeS0+cmVzdWx0ID09IENVUkxFX09LKSAmJiBwcm90b2NvbF9jb25uZWN0KSB7CisgICAgICAgIC8qIGFmdGVyIHRoZSBjb25uZWN0IGhhcyBjb21wbGV0ZWQsIGdvIFdBSVRETyBvciBETyAqLworICAgICAgICBtdWx0aXN0YXRlKGVhc3ksIG11bHRpLT5waXBlbGluaW5nX2VuYWJsZWQ/CisgICAgICAgICAgICAgICAgICAgQ1VSTE1fU1RBVEVfV0FJVERPOkNVUkxNX1NUQVRFX0RPKTsKKyAgICAgICAgcmVzdWx0ID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOworICAgICAgfQorICAgICAgZWxzZSBpZihlYXN5LT5yZXN1bHQpIHsKKyAgICAgICAgLyogZmFpbHVyZSBkZXRlY3RlZCAqLworICAgICAgICBDdXJsX3Bvc3R0cmFuc2ZlcihkYXRhKTsKKyAgICAgICAgQ3VybF9kb25lKCZlYXN5LT5lYXN5X2Nvbm4sIGVhc3ktPnJlc3VsdCwgVFJVRSk7CisgICAgICAgIGRpc2Nvbm5lY3RfY29ubiA9IFRSVUU7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTE1fU1RBVEVfV0FJVERPOgorICAgICAgLyogV2FpdCBmb3Igb3VyIHR1cm4gdG8gRE8gd2hlbiB3ZSdyZSBwaXBlbGluaW5nIHJlcXVlc3RzICovCisjaWZkZWYgREVCVUdCVUlMRAorICAgICAgaW5mb2YoZGF0YSwgIkNvbm4gJWxkIHNlbmQgcGlwZSAlenUgaW51c2UgJWQgYXRoZWFkICVkXG4iLAorICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5jb25uZWN0aW5kZXgsCisgICAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPnNlbmRfcGlwZS0+c2l6ZSwKKyAgICAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+d3JpdGVjaGFubmVsX2ludXNlPzE6MCwKKyAgICAgICAgICAgIGlzSGFuZGxlQXRIZWFkKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPnNlbmRfcGlwZSk/MTowKTsKKyNlbmRpZgorICAgICAgaWYoIWVhc3ktPmVhc3lfY29ubi0+d3JpdGVjaGFubmVsX2ludXNlICYmCisgICAgICAgICBpc0hhbmRsZUF0SGVhZChkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5zZW5kX3BpcGUpKSB7CisgICAgICAgIC8qIEdyYWIgdGhlIGNoYW5uZWwgKi8KKyAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT53cml0ZWNoYW5uZWxfaW51c2UgPSBUUlVFOworICAgICAgICBtdWx0aXN0YXRlKGVhc3ksIENVUkxNX1NUQVRFX0RPKTsKKyAgICAgICAgcmVzdWx0ID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxNX1NUQVRFX0RPOgorICAgICAgaWYoZGF0YS0+c2V0LmNvbm5lY3Rfb25seSkgeworICAgICAgICAvKiBrZWVwIGNvbm5lY3Rpb24gb3BlbiBmb3IgYXBwbGljYXRpb24gdG8gdXNlIHRoZSBzb2NrZXQgKi8KKyAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5iaXRzLmNsb3NlID0gRkFMU0U7CisgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfRE9ORSk7CisgICAgICAgIGVhc3ktPnJlc3VsdCA9IENVUkxFX09LOworICAgICAgICByZXN1bHQgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogUGVyZm9ybSB0aGUgcHJvdG9jb2wncyBETyBhY3Rpb24gKi8KKyAgICAgICAgZWFzeS0+cmVzdWx0ID0gQ3VybF9kbygmZWFzeS0+ZWFzeV9jb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb3BoYXNlX2RvbmUpOworCisgICAgICAgIGlmKENVUkxFX09LID09IGVhc3ktPnJlc3VsdCkgeworICAgICAgICAgIGlmKCFkb3BoYXNlX2RvbmUpIHsKKyAgICAgICAgICAgIC8qIHNvbWUgc3RlcHMgbmVlZGVkIGZvciB3aWxkY2FyZCBtYXRjaGluZyAqLworICAgICAgICAgICAgaWYoZGF0YS0+c2V0LndpbGRjYXJkbWF0Y2gpIHsKKyAgICAgICAgICAgICAgc3RydWN0IFdpbGRjYXJkRGF0YSAqd2MgPSAmZGF0YS0+d2lsZGNhcmQ7CisgICAgICAgICAgICAgIGlmKHdjLT5zdGF0ZSA9PSBDVVJMV0NfRE9ORSB8fCB3Yy0+c3RhdGUgPT0gQ1VSTFdDX1NLSVApIHsKKyAgICAgICAgICAgICAgICAvKiBza2lwIHNvbWUgc3RhdGVzIGlmIGl0IGlzIGltcG9ydGFudCAqLworICAgICAgICAgICAgICAgIEN1cmxfZG9uZSgmZWFzeS0+ZWFzeV9jb25uLCBDVVJMRV9PSywgRkFMU0UpOworICAgICAgICAgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfRE9ORSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBETyB3YXMgbm90IGNvbXBsZXRlZCBpbiBvbmUgZnVuY3Rpb24gY2FsbCwgd2UgbXVzdCBjb250aW51ZQorICAgICAgICAgICAgICAgRE9JTkcuLi4gKi8KKyAgICAgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfRE9JTkcpOworICAgICAgICAgICAgcmVzdWx0ID0gQ1VSTE1fT0s7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogYWZ0ZXIgRE8sIGdvIERPX0RPTkUuLi4gb3IgRE9fTU9SRSAqLworICAgICAgICAgIGVsc2UgaWYoZWFzeS0+ZWFzeV9jb25uLT5iaXRzLmRvX21vcmUpIHsKKyAgICAgICAgICAgIC8qIHdlJ3JlIHN1cHBvc2VkIHRvIGRvIG1vcmUsIGJ1dCB3ZSBuZWVkIHRvIHNpdCBkb3duLCByZWxheAorICAgICAgICAgICAgICAgYW5kIHdhaXQgYSBsaXR0bGUgd2hpbGUgZmlyc3QgKi8KKyAgICAgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfRE9fTU9SRSk7CisgICAgICAgICAgICByZXN1bHQgPSBDVVJMTV9PSzsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiB3ZSdyZSBkb25lIHdpdGggdGhlIERPLCBub3cgRE9fRE9ORSAqLworICAgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9ET19ET05FKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZigoQ1VSTEVfU0VORF9FUlJPUiA9PSBlYXN5LT5yZXN1bHQpICYmCisgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5iaXRzLnJldXNlKSB7CisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBJbiB0aGlzIHNpdHVhdGlvbiwgYSBjb25uZWN0aW9uIHRoYXQgd2Ugd2VyZSB0cnlpbmcgdG8gdXNlCisgICAgICAgICAgICogbWF5IGhhdmUgdW5leHBlY3RlZGx5IGRpZWQuICBJZiBwb3NzaWJsZSwgc2VuZCB0aGUgY29ubmVjdGlvbgorICAgICAgICAgICAqIGJhY2sgdG8gdGhlIENPTk5FQ1QgcGhhc2Ugc28gd2UgY2FuIHRyeSBhZ2Fpbi4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBjaGFyICpuZXd1cmwgPSBOVUxMOworICAgICAgICAgIGZvbGxvd3R5cGUgZm9sbG93PUZPTExPV19OT05FOworICAgICAgICAgIENVUkxjb2RlIGRyYzsKKyAgICAgICAgICBib29sIHJldHJ5ID0gRkFMU0U7CisKKyAgICAgICAgICBkcmMgPSBDdXJsX3JldHJ5X3JlcXVlc3QoZWFzeS0+ZWFzeV9jb25uLCAmbmV3dXJsKTsKKyAgICAgICAgICBpZihkcmMpIHsKKyAgICAgICAgICAgIC8qIGEgZmFpbHVyZSBoZXJlIHByZXR0eSBtdWNoIGltcGxpZXMgYW4gb3V0IG9mIG1lbW9yeSAqLworICAgICAgICAgICAgZWFzeS0+cmVzdWx0ID0gZHJjOworICAgICAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0cnkgPSAobmV3dXJsKT9UUlVFOkZBTFNFOworCisgICAgICAgICAgQ3VybF9wb3N0dHJhbnNmZXIoZGF0YSk7CisgICAgICAgICAgZHJjID0gQ3VybF9kb25lKCZlYXN5LT5lYXN5X2Nvbm4sIGVhc3ktPnJlc3VsdCwgRkFMU0UpOworCisgICAgICAgICAgLyogV2hlbiBzZXQgdG8gcmV0cnkgdGhlIGNvbm5lY3Rpb24sIHdlIG11c3QgdG8gZ28gYmFjayB0bworICAgICAgICAgICAqIHRoZSBDT05ORUNUIHN0YXRlICovCisgICAgICAgICAgaWYocmV0cnkpIHsKKyAgICAgICAgICAgIGlmKChkcmMgPT0gQ1VSTEVfT0spIHx8IChkcmMgPT0gQ1VSTEVfU0VORF9FUlJPUikpIHsKKyAgICAgICAgICAgICAgZm9sbG93ID0gRk9MTE9XX1JFVFJZOworICAgICAgICAgICAgICBkcmMgPSBDdXJsX2ZvbGxvdyhkYXRhLCBuZXd1cmwsIGZvbGxvdyk7CisgICAgICAgICAgICAgIGlmKGRyYyA9PSBDVVJMRV9PSykgeworICAgICAgICAgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfQ09OTkVDVCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOworICAgICAgICAgICAgICAgIGVhc3ktPnJlc3VsdCA9IENVUkxFX09LOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIEZvbGxvdyBmYWlsZWQgKi8KKyAgICAgICAgICAgICAgICBlYXN5LT5yZXN1bHQgPSBkcmM7CisgICAgICAgICAgICAgICAgZnJlZShuZXd1cmwpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgLyogZG9uZSBkaWRuJ3QgcmV0dXJuIE9LIG9yIFNFTkRfRVJST1IgKi8KKyAgICAgICAgICAgICAgZWFzeS0+cmVzdWx0ID0gZHJjOworICAgICAgICAgICAgICBmcmVlKG5ld3VybCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogSGF2ZSBlcnJvciBoYW5kbGVyIGRpc2Nvbm5lY3QgY29ubiBpZiB3ZSBjYW4ndCByZXRyeSAqLworICAgICAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogZmFpbHVyZSBkZXRlY3RlZCAqLworICAgICAgICAgIEN1cmxfcG9zdHRyYW5zZmVyKGRhdGEpOworICAgICAgICAgIEN1cmxfZG9uZSgmZWFzeS0+ZWFzeV9jb25uLCBlYXN5LT5yZXN1bHQsIEZBTFNFKTsKKyAgICAgICAgICBkaXNjb25uZWN0X2Nvbm4gPSBUUlVFOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTE1fU1RBVEVfRE9JTkc6CisgICAgICAvKiB3ZSBjb250aW51ZSBET0lORyB1bnRpbCB0aGUgRE8gcGhhc2UgaXMgY29tcGxldGUgKi8KKyAgICAgIGVhc3ktPnJlc3VsdCA9IEN1cmxfcHJvdG9jb2xfZG9pbmcoZWFzeS0+ZWFzeV9jb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG9waGFzZV9kb25lKTsKKyAgICAgIGlmKENVUkxFX09LID09IGVhc3ktPnJlc3VsdCkgeworICAgICAgICBpZihkb3BoYXNlX2RvbmUpIHsKKyAgICAgICAgICAvKiBhZnRlciBETywgZ28gRE9fRE9ORSBvciBET19NT1JFICovCisgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBlYXN5LT5lYXN5X2Nvbm4tPmJpdHMuZG9fbW9yZT8KKyAgICAgICAgICAgICAgICAgICAgIENVUkxNX1NUQVRFX0RPX01PUkU6CisgICAgICAgICAgICAgICAgICAgICBDVVJMTV9TVEFURV9ET19ET05FKTsKKyAgICAgICAgICByZXN1bHQgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CisgICAgICAgIH0gLyogZG9waGFzZV9kb25lICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogZmFpbHVyZSBkZXRlY3RlZCAqLworICAgICAgICBDdXJsX3Bvc3R0cmFuc2ZlcihkYXRhKTsKKyAgICAgICAgQ3VybF9kb25lKCZlYXN5LT5lYXN5X2Nvbm4sIGVhc3ktPnJlc3VsdCwgRkFMU0UpOworICAgICAgICBkaXNjb25uZWN0X2Nvbm4gPSBUUlVFOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxNX1NUQVRFX0RPX01PUkU6CisgICAgICAvKgorICAgICAgICogV2hlbiB3ZSBhcmUgY29ubmVjdGVkLCBETyBNT1JFIGFuZCB0aGVuIGdvIERPX0RPTkUKKyAgICAgICAqLworICAgICAgZWFzeS0+cmVzdWx0ID0gQ3VybF9kb19tb3JlKGVhc3ktPmVhc3lfY29ubiwgJmRvcGhhc2VfZG9uZSk7CisKKyAgICAgIC8qIE5vIG5lZWQgdG8gcmVtb3ZlIHRoaXMgaGFuZGxlIGZyb20gdGhlIHNlbmQgcGlwZWxpbmUgaGVyZSBzaW5jZSB0aGF0CisgICAgICAgICBpcyBkb25lIGluIEN1cmxfZG9uZSgpICovCisgICAgICBpZihDVVJMRV9PSyA9PSBlYXN5LT5yZXN1bHQpIHsKKyAgICAgICAgaWYoZG9waGFzZV9kb25lKSB7CisgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9ET19ET05FKTsKKyAgICAgICAgICByZXN1bHQgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIC8qIHN0YXkgaW4gRE9fTU9SRSAqLworICAgICAgICAgIHJlc3VsdCA9IENVUkxNX09LOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIGZhaWx1cmUgZGV0ZWN0ZWQgKi8KKyAgICAgICAgQ3VybF9wb3N0dHJhbnNmZXIoZGF0YSk7CisgICAgICAgIEN1cmxfZG9uZSgmZWFzeS0+ZWFzeV9jb25uLCBlYXN5LT5yZXN1bHQsIEZBTFNFKTsKKyAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMTV9TVEFURV9ET19ET05FOgorICAgICAgLyogTW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgc2VuZCB0byByZWN2IHBpcGVsaW5lICovCisgICAgICBtb3ZlSGFuZGxlRnJvbVNlbmRUb1JlY3ZQaXBlbGluZShkYXRhLCBlYXN5LT5lYXN5X2Nvbm4pOworICAgICAgLyogQ2hlY2sgaWYgd2UgY2FuIG1vdmUgcGVuZGluZyByZXF1ZXN0cyB0byBzZW5kIHBpcGUgKi8KKyAgICAgIGNoZWNrUGVuZFBpcGVsaW5lKGVhc3ktPmVhc3lfY29ubik7CisgICAgICBtdWx0aXN0YXRlKGVhc3ksIENVUkxNX1NUQVRFX1dBSVRQRVJGT1JNKTsKKyAgICAgIHJlc3VsdCA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMTV9TVEFURV9XQUlUUEVSRk9STToKKyAgICAgIC8qIFdhaXQgZm9yIG91ciB0dXJuIHRvIFBFUkZPUk0gKi8KKyAgICAgIGlmKCFlYXN5LT5lYXN5X2Nvbm4tPnJlYWRjaGFubmVsX2ludXNlICYmCisgICAgICAgICBpc0hhbmRsZUF0SGVhZChkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5yZWN2X3BpcGUpKSB7CisgICAgICAgIC8qIEdyYWIgdGhlIGNoYW5uZWwgKi8KKyAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5yZWFkY2hhbm5lbF9pbnVzZSA9IFRSVUU7CisgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfUEVSRk9STSk7CisgICAgICAgIHJlc3VsdCA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKKyAgICAgIH0KKyNpZmRlZiBERUJVR0JVSUxECisgICAgICBlbHNlIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkNvbm4gJWxkIHJlY3YgcGlwZSAlenUgaW51c2UgJWQgYXRoZWFkICVkXG4iLAorICAgICAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPmNvbm5lY3RpbmRleCwKKyAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5yZWN2X3BpcGUtPnNpemUsCisgICAgICAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+cmVhZGNoYW5uZWxfaW51c2U/MTowLAorICAgICAgICAgICAgICBpc0hhbmRsZUF0SGVhZChkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPnJlY3ZfcGlwZSk/MTowKTsKKyAgICAgIH0KKyNlbmRpZgorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxNX1NUQVRFX1RPT0ZBU1Q6IC8qIGxpbWl0LXJhdGUgZXhjZWVkZWQgaW4gZWl0aGVyIGRpcmVjdGlvbiAqLworICAgICAgLyogaWYgYm90aCByYXRlcyBhcmUgd2l0aGluIHNwZWMsIHJlc3VtZSB0cmFuc2ZlciAqLworICAgICAgQ3VybF9wZ3JzVXBkYXRlKGVhc3ktPmVhc3lfY29ubik7CisgICAgICBpZigoIChkYXRhLT5zZXQubWF4X3NlbmRfc3BlZWQgPT0gMCkgfHwKKyAgICAgICAgICAgKGRhdGEtPnByb2dyZXNzLnVsc3BlZWQgPCBkYXRhLT5zZXQubWF4X3NlbmRfc3BlZWQgKSkgICYmCisgICAgICAgICAoIChkYXRhLT5zZXQubWF4X3JlY3Zfc3BlZWQgPT0gMCkgfHwKKyAgICAgICAgICAgKGRhdGEtPnByb2dyZXNzLmRsc3BlZWQgPCBkYXRhLT5zZXQubWF4X3JlY3Zfc3BlZWQpKSkKKyAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9QRVJGT1JNKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMTV9TVEFURV9QRVJGT1JNOgorICAgICAgLyogY2hlY2sgaWYgb3ZlciBzZW5kIHNwZWVkICovCisgICAgICBpZigoZGF0YS0+c2V0Lm1heF9zZW5kX3NwZWVkID4gMCkgJiYKKyAgICAgICAgIChkYXRhLT5wcm9ncmVzcy51bHNwZWVkID4gZGF0YS0+c2V0Lm1heF9zZW5kX3NwZWVkKSkgeworICAgICAgICBpbnQgYnVmZmVyc2l6ZTsKKworICAgICAgICBtdWx0aXN0YXRlKGVhc3ksIENVUkxNX1NUQVRFX1RPT0ZBU1QpOworCisgICAgICAgIC8qIGNhbGN1bGF0ZSB1cGxvYWQgcmF0ZS1saW1pdGF0aW9uIHRpbWVvdXQuICovCisgICAgICAgIGJ1ZmZlcnNpemUgPSAoaW50KShkYXRhLT5zZXQuYnVmZmVyX3NpemUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LmJ1ZmZlcl9zaXplIDogQlVGU0laRSk7CisgICAgICAgIHRpbWVvdXRfbXMgPSBDdXJsX3NsZWVwX3RpbWUoZGF0YS0+c2V0Lm1heF9zZW5kX3NwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnByb2dyZXNzLnVsc3BlZWQsIGJ1ZmZlcnNpemUpOworICAgICAgICBDdXJsX2V4cGlyZShkYXRhLCB0aW1lb3V0X21zKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIC8qIGNoZWNrIGlmIG92ZXIgcmVjdiBzcGVlZCAqLworICAgICAgaWYoKGRhdGEtPnNldC5tYXhfcmVjdl9zcGVlZCA+IDApICYmCisgICAgICAgICAoZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCA+IGRhdGEtPnNldC5tYXhfcmVjdl9zcGVlZCkpIHsKKyAgICAgICAgaW50IGJ1ZmZlcnNpemU7CisKKyAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9UT09GQVNUKTsKKworICAgICAgICAgLyogQ2FsY3VsYXRlIGRvd25sb2FkIHJhdGUtbGltaXRhdGlvbiB0aW1lb3V0LiAqLworICAgICAgICBidWZmZXJzaXplID0gKGludCkoZGF0YS0+c2V0LmJ1ZmZlcl9zaXplID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5idWZmZXJfc2l6ZSA6IEJVRlNJWkUpOworICAgICAgICB0aW1lb3V0X21zID0gQ3VybF9zbGVlcF90aW1lKGRhdGEtPnNldC5tYXhfcmVjdl9zcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5wcm9ncmVzcy5kbHNwZWVkLCBidWZmZXJzaXplKTsKKyAgICAgICAgQ3VybF9leHBpcmUoZGF0YSwgdGltZW91dF9tcyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvKiByZWFkL3dyaXRlIGRhdGEgaWYgaXQgaXMgcmVhZHkgdG8gZG8gc28gKi8KKyAgICAgIGVhc3ktPnJlc3VsdCA9IEN1cmxfcmVhZHdyaXRlKGVhc3ktPmVhc3lfY29ubiwgJmRvbmUpOworCisgICAgICBrID0gJmRhdGEtPnJlcTsKKworICAgICAgaWYoIShrLT5rZWVwb24gJiBLRUVQX1JFQ1YpKSB7CisgICAgICAgIC8qIFdlJ3JlIGRvbmUgcmVjZWl2aW5nICovCisgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+cmVhZGNoYW5uZWxfaW51c2UgPSBGQUxTRTsKKyAgICAgIH0KKworICAgICAgaWYoIShrLT5rZWVwb24gJiBLRUVQX1NFTkQpKSB7CisgICAgICAgIC8qIFdlJ3JlIGRvbmUgc2VuZGluZyAqLworICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPndyaXRlY2hhbm5lbF9pbnVzZSA9IEZBTFNFOworICAgICAgfQorCisgICAgICBpZihlYXN5LT5yZXN1bHQpIHsKKyAgICAgICAgLyogVGhlIHRyYW5zZmVyIHBoYXNlIHJldHVybmVkIGVycm9yLCB3ZSBtYXJrIHRoZSBjb25uZWN0aW9uIHRvIGdldAorICAgICAgICAgKiBjbG9zZWQgdG8gcHJldmVudCBiZWluZyByZS11c2VkLiBUaGlzIGlzIGJlY2F1c2Ugd2UgY2FuJ3QgcG9zc2libHkKKyAgICAgICAgICoga25vdyBpZiB0aGUgY29ubmVjdGlvbiBpcyBpbiBhIGdvb2Qgc2hhcGUgb3Igbm90IG5vdy4gIFVubGVzcyBpdCBpcworICAgICAgICAgKiBhIHByb3RvY29sIHdoaWNoIHVzZXMgdHdvICJjaGFubmVscyIgbGlrZSBGVFAsIGFzIHRoZW4gdGhlIGVycm9yCisgICAgICAgICAqIGhhcHBlbmVkIGluIHRoZSBkYXRhIGNvbm5lY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBpZighKGVhc3ktPmVhc3lfY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX0RVQUwpKQorICAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7CisKKyAgICAgICAgQ3VybF9wb3N0dHJhbnNmZXIoZGF0YSk7CisgICAgICAgIEN1cmxfZG9uZSgmZWFzeS0+ZWFzeV9jb25uLCBlYXN5LT5yZXN1bHQsIEZBTFNFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoZG9uZSkgeworICAgICAgICBjaGFyICpuZXd1cmwgPSBOVUxMOworICAgICAgICBib29sIHJldHJ5ID0gRkFMU0U7CisgICAgICAgIGZvbGxvd3R5cGUgZm9sbG93PUZPTExPV19OT05FOworCisgICAgICAgIGVhc3ktPnJlc3VsdCA9IEN1cmxfcmV0cnlfcmVxdWVzdChlYXN5LT5lYXN5X2Nvbm4sICZuZXd1cmwpOworICAgICAgICBpZighZWFzeS0+cmVzdWx0KQorICAgICAgICAgIHJldHJ5ID0gKG5ld3VybCk/VFJVRTpGQUxTRTsKKworICAgICAgICAvKiBjYWxsIHRoaXMgZXZlbiBpZiB0aGUgcmVhZHdyaXRlIGZ1bmN0aW9uIHJldHVybmVkIGVycm9yICovCisgICAgICAgIEN1cmxfcG9zdHRyYW5zZmVyKGRhdGEpOworCisgICAgICAgIC8qIHdlJ3JlIG5vIGxvbmdlciByZWNlaXZpbmcgKi8KKyAgICAgICAgbW92ZUhhbmRsZUZyb21SZWN2VG9Eb25lUGlwZWxpbmUoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uKTsKKworICAgICAgICAvKiBleHBpcmUgdGhlIG5ldyByZWNlaXZpbmcgcGlwZWxpbmUgaGVhZCAqLworICAgICAgICBpZihlYXN5LT5lYXN5X2Nvbm4tPnJlY3ZfcGlwZS0+aGVhZCkKKyAgICAgICAgICBDdXJsX2V4cGlyZShlYXN5LT5lYXN5X2Nvbm4tPnJlY3ZfcGlwZS0+aGVhZC0+cHRyLCAxKTsKKworICAgICAgICAvKiBDaGVjayBpZiB3ZSBjYW4gbW92ZSBwZW5kaW5nIHJlcXVlc3RzIHRvIHNlbmQgcGlwZSAqLworICAgICAgICBjaGVja1BlbmRQaXBlbGluZShlYXN5LT5lYXN5X2Nvbm4pOworCisgICAgICAgIC8qIFdoZW4gd2UgZm9sbG93IHJlZGlyZWN0cyBvciBpcyBzZXQgdG8gcmV0cnkgdGhlIGNvbm5lY3Rpb24sIHdlIG11c3QKKyAgICAgICAgICAgdG8gZ28gYmFjayB0byB0aGUgQ09OTkVDVCBzdGF0ZSAqLworICAgICAgICBpZihkYXRhLT5yZXEubmV3dXJsIHx8IHJldHJ5KSB7CisgICAgICAgICAgaWYoIXJldHJ5KSB7CisgICAgICAgICAgICAvKiBpZiB0aGUgVVJMIGlzIGEgZm9sbG93LWxvY2F0aW9uIGFuZCBub3QganVzdCBhIHJldHJpZWQgcmVxdWVzdAorICAgICAgICAgICAgICAgdGhlbiBmaWd1cmUgb3V0IHRoZSBVUkwgaGVyZSAqLworICAgICAgICAgICAgbmV3dXJsID0gZGF0YS0+cmVxLm5ld3VybDsKKyAgICAgICAgICAgIGRhdGEtPnJlcS5uZXd1cmwgPSBOVUxMOworICAgICAgICAgICAgZm9sbG93ID0gRk9MTE9XX1JFRElSOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBmb2xsb3cgPSBGT0xMT1dfUkVUUlk7CisgICAgICAgICAgZWFzeS0+cmVzdWx0ID0gQ3VybF9kb25lKCZlYXN5LT5lYXN5X2Nvbm4sIENVUkxFX09LLCBGQUxTRSk7CisgICAgICAgICAgaWYoZWFzeS0+cmVzdWx0ID09IENVUkxFX09LKQorICAgICAgICAgICAgZWFzeS0+cmVzdWx0ID0gQ3VybF9mb2xsb3coZGF0YSwgbmV3dXJsLCBmb2xsb3cpOworICAgICAgICAgIGlmKENVUkxFX09LID09IGVhc3ktPnJlc3VsdCkgeworICAgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9DT05ORUNUKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihuZXd1cmwpCisgICAgICAgICAgICAvKiBTaW5jZSB3ZSAidG9vayBpdCIsIHdlIGFyZSBpbiBjaGFyZ2Ugb2YgZnJlZWluZyB0aGlzIG9uCisgICAgICAgICAgICAgICBmYWlsdXJlICovCisgICAgICAgICAgICBmcmVlKG5ld3VybCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogYWZ0ZXIgdGhlIHRyYW5zZmVyIGlzIGRvbmUsIGdvIERPTkUgKi8KKworICAgICAgICAgIC8qIGJ1dCBmaXJzdCBjaGVjayB0byBzZWUgaWYgd2UgZ290IGEgbG9jYXRpb24gaW5mbyBldmVuIHRob3VnaCB3ZSdyZQorICAgICAgICAgICAgIG5vdCBmb2xsb3dpbmcgcmVkaXJlY3RzICovCisgICAgICAgICAgaWYoZGF0YS0+cmVxLmxvY2F0aW9uKSB7CisgICAgICAgICAgICBuZXd1cmwgPSBkYXRhLT5yZXEubG9jYXRpb247CisgICAgICAgICAgICBkYXRhLT5yZXEubG9jYXRpb24gPSBOVUxMOworICAgICAgICAgICAgZWFzeS0+cmVzdWx0ID0gQ3VybF9mb2xsb3coZGF0YSwgbmV3dXJsLCBGT0xMT1dfRkFLRSk7CisgICAgICAgICAgICBpZihlYXN5LT5yZXN1bHQpIHsKKyAgICAgICAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgICAgICAgICAgZnJlZShuZXd1cmwpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfRE9ORSk7CisgICAgICAgICAgcmVzdWx0ID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMTV9TVEFURV9ET05FOgorCisgICAgICBpZihlYXN5LT5lYXN5X2Nvbm4pIHsKKyAgICAgICAgLyogUmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSByZWNlaXZlIGFuZCBkb25lIHBpcGVsaW5lcy4gSGFuZGxlCisgICAgICAgICAgIHNob3VsZCBiZSBvbiBvbmUgb2YgdGhlc2UgbGlzdHMsIGRlcGVuZGluZyB1cG9uIGhvdyB3ZSBnb3QgaGVyZS4gKi8KKyAgICAgICAgQ3VybF9yZW1vdmVIYW5kbGVGcm9tUGlwZWxpbmUoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5yZWN2X3BpcGUpOworICAgICAgICBDdXJsX3JlbW92ZUhhbmRsZUZyb21QaXBlbGluZShkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4tPmRvbmVfcGlwZSk7CisgICAgICAgIC8qIENoZWNrIGlmIHdlIGNhbiBtb3ZlIHBlbmRpbmcgcmVxdWVzdHMgdG8gc2VuZCBwaXBlICovCisgICAgICAgIGNoZWNrUGVuZFBpcGVsaW5lKGVhc3ktPmVhc3lfY29ubik7CisKKyAgICAgICAgaWYoZWFzeS0+ZWFzeV9jb25uLT5iaXRzLnN0cmVhbV93YXNfcmV3b3VuZCkgeworICAgICAgICAgIC8qIFRoaXMgcmVxdWVzdCByZWFkIHBhc3QgaXRzIHJlc3BvbnNlIGJvdW5kYXJ5IHNvIHdlIHF1aWNrbHkgbGV0CisgICAgICAgICAgICAgdGhlIG90aGVyIHJlcXVlc3RzIGNvbnN1bWUgdGhvc2UgYnl0ZXMgc2luY2UgdGhlcmUgaXMgbm8KKyAgICAgICAgICAgICBndWFyYW50ZWUgdGhhdCB0aGUgc29ja2V0IHdpbGwgYmVjb21lIGFjdGl2ZSBhZ2FpbiAqLworICAgICAgICAgIHJlc3VsdCA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHBvc3QtdHJhbnNmZXIgY29tbWFuZCAqLworICAgICAgICBlYXN5LT5yZXN1bHQgPSBDdXJsX2RvbmUoJmVhc3ktPmVhc3lfY29ubiwgQ1VSTEVfT0ssIEZBTFNFKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgdGhlcmUgYXJlIG90aGVyIGhhbmRsZXMgb24gdGhlIHBpcGVsaW5lLCBDdXJsX2RvbmUgd29uJ3Qgc2V0CisgICAgICAgICAqIGVhc3lfY29ubiB0byBOVUxMLiAgSW4gc3VjaCBhIGNhc2UsIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgpIGNhbgorICAgICAgICAgKiBhY2Nlc3MgZnJlZSdkIGRhdGEsIGlmIHRoZSBjb25uZWN0aW9uIGlzIGZyZWUnZCBhbmQgdGhlIGhhbmRsZQorICAgICAgICAgKiByZW1vdmVkIGJlZm9yZSB3ZSBwZXJmb3JtIHRoZSBwcm9jZXNzaW5nIGluIENVUkxNX1NUQVRFX0NPTVBMRVRFRAorICAgICAgICAgKi8KKyAgICAgICAgaWYoZWFzeS0+ZWFzeV9jb25uKQorICAgICAgICAgIGVhc3ktPmVhc3lfY29ubiA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC53aWxkY2FyZG1hdGNoKSB7CisgICAgICAgIGlmKGRhdGEtPndpbGRjYXJkLnN0YXRlICE9IENVUkxXQ19ET05FKSB7CisgICAgICAgICAgLyogaWYgYSB3aWxkY2FyZCBpcyBzZXQgYW5kIHdlIGFyZSBub3QgZW5kaW5nIC0+IGxldHMgc3RhcnQgYWdhaW4KKyAgICAgICAgICAgICB3aXRoIENVUkxNX1NUQVRFX0lOSVQgKi8KKyAgICAgICAgICByZXN1bHQgPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk07CisgICAgICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9JTklUKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBhZnRlciB3ZSBoYXZlIERPTkUgd2hhdCB3ZSdyZSBzdXBwb3NlZCB0byBkbywgZ28gQ09NUExFVEVELCBhbmQKKyAgICAgICAgIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIEN1cmxfZG9uZSgpIHJldHVybmVkISAqLworICAgICAgbXVsdGlzdGF0ZShlYXN5LCBDVVJMTV9TVEFURV9DT01QTEVURUQpOworCisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTE1fU1RBVEVfQ09NUExFVEVEOgorICAgICAgLyogdGhpcyBpcyBhIGNvbXBsZXRlZCB0cmFuc2ZlciwgaXQgaXMgbGlrZWx5IHRvIHN0aWxsIGJlIGNvbm5lY3RlZCAqLworCisgICAgICAvKiBUaGlzIG5vZGUgc2hvdWxkIGJlIGRlbGlua2VkIGZyb20gdGhlIGxpc3Qgbm93IGFuZCB3ZSBzaG91bGQgcG9zdAorICAgICAgICAgYW4gaW5mb3JtYXRpb24gbWVzc2FnZSB0aGF0IHdlIGFyZSBjb21wbGV0ZS4gKi8KKworICAgICAgLyogSW1wb3J0YW50OiByZXNldCB0aGUgY29ubiBwb2ludGVyIHNvIHRoYXQgd2UgZG9uJ3QgcG9pbnQgdG8gbWVtb3J5CisgICAgICAgICB0aGF0IGNvdWxkIGJlIGZyZWVkIGFueXRpbWUgKi8KKyAgICAgIGVhc3ktPmVhc3lfY29ubiA9IE5VTEw7CisKKyAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIDApOyAvKiBzdG9wIGFsbCB0aW1lcnMgKi8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMTV9TVEFURV9NU0dTRU5UOgorICAgICAgcmV0dXJuIENVUkxNX09LOyAvKiBkbyBub3RoaW5nICovCisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIENVUkxNX0lOVEVSTkFMX0VSUk9SOworICAgIH0KKworICAgIGlmKGVhc3ktPnN0YXRlIDwgQ1VSTE1fU1RBVEVfQ09NUExFVEVEKSB7CisgICAgICBpZihDVVJMRV9PSyAhPSBlYXN5LT5yZXN1bHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgYW4gZXJyb3Igd2FzIHJldHVybmVkLCBhbmQgd2UgYXJlbid0IGluIGNvbXBsZXRlZCBzdGF0ZSBub3csCisgICAgICAgICAqIHRoZW4gd2UgZ28gdG8gY29tcGxldGVkIGFuZCBjb25zaWRlciB0aGlzIHRyYW5zZmVyIGFib3J0ZWQuCisgICAgICAgICAqLworCisgICAgICAgIC8qIE5PVEU6IG5vIGF0dGVtcHQgdG8gZGlzY29ubmVjdCBjb25uZWN0aW9ucyBtdXN0IGJlIG1hZGUKKyAgICAgICAgICAgaW4gdGhlIGNhc2UgYmxvY2tzIGFib3ZlIC0gY2xlYW51cCBoYXBwZW5zIG9ubHkgaGVyZSAqLworCisgICAgICAgIGRhdGEtPnN0YXRlLnBpcGVfYnJva2UgPSBGQUxTRTsKKworICAgICAgICBpZihlYXN5LT5lYXN5X2Nvbm4pIHsKKyAgICAgICAgICAvKiBpZiB0aGlzIGhhcyBhIGNvbm5lY3Rpb24sIHVuc3Vic2NyaWJlIGZyb20gdGhlIHBpcGVsaW5lcyAqLworICAgICAgICAgIGVhc3ktPmVhc3lfY29ubi0+d3JpdGVjaGFubmVsX2ludXNlID0gRkFMU0U7CisgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5yZWFkY2hhbm5lbF9pbnVzZSA9IEZBTFNFOworICAgICAgICAgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5zZW5kX3BpcGUpOworICAgICAgICAgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5yZWN2X3BpcGUpOworICAgICAgICAgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5kb25lX3BpcGUpOworICAgICAgICAgIC8qIENoZWNrIGlmIHdlIGNhbiBtb3ZlIHBlbmRpbmcgcmVxdWVzdHMgdG8gc2VuZCBwaXBlICovCisgICAgICAgICAgY2hlY2tQZW5kUGlwZWxpbmUoZWFzeS0+ZWFzeV9jb25uKTsKKworICAgICAgICAgIGlmKGRpc2Nvbm5lY3RfY29ubikgeworICAgICAgICAgICAgLyogZGlzY29ubmVjdCBwcm9wZXJseSAqLworICAgICAgICAgICAgQ3VybF9kaXNjb25uZWN0KGVhc3ktPmVhc3lfY29ubiwgLyogZGVhZF9jb25uZWN0aW9uICovIEZBTFNFKTsKKworICAgICAgICAgICAgLyogVGhpcyBpcyB3aGVyZSB3ZSBtYWtlIHN1cmUgdGhhdCB0aGUgZWFzeV9jb25uIHBvaW50ZXIgaXMgcmVzZXQuCisgICAgICAgICAgICAgICBXZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgaW4gZXZlcnkgY2FzZSBibG9jayBhYm92ZSB3aGVyZSBhCisgICAgICAgICAgICAgICBmYWlsdXJlIGlzIGRldGVjdGVkICovCisgICAgICAgICAgICBlYXN5LT5lYXN5X2Nvbm4gPSBOVUxMOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKGVhc3ktPnN0YXRlID09IENVUkxNX1NUQVRFX0NPTk5FQ1QpIHsKKyAgICAgICAgICAvKiBDdXJsX2Nvbm5lY3QoKSBmYWlsZWQgKi8KKyAgICAgICAgICAodm9pZClDdXJsX3Bvc3R0cmFuc2ZlcihkYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgQ1VSTE1fU1RBVEVfQ09NUExFVEVEKTsKKyAgICAgIH0KKyAgICAgIC8qIGlmIHRoZXJlJ3Mgc3RpbGwgYSBjb25uZWN0aW9uIHRvIHVzZSwgY2FsbCB0aGUgcHJvZ3Jlc3MgZnVuY3Rpb24gKi8KKyAgICAgIGVsc2UgaWYoZWFzeS0+ZWFzeV9jb25uICYmIEN1cmxfcGdyc1VwZGF0ZShlYXN5LT5lYXN5X2Nvbm4pKSB7CisgICAgICAgIC8qIGFib3J0ZWQgZHVlIHRvIHByb2dyZXNzIGNhbGxiYWNrIHJldHVybiBjb2RlIG11c3QgY2xvc2UgdGhlCisgICAgICAgICAgIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgZWFzeS0+ZWFzeV9jb25uLT5iaXRzLmNsb3NlID0gVFJVRTsKKworICAgICAgICAvKiBpZiBub3QgeWV0IGluIERPTkUgc3RhdGUsIGdvIHRoZXJlLCBvdGhlcndpc2UgQ09NUExFVEVEICovCisgICAgICAgIG11bHRpc3RhdGUoZWFzeSwgKGVhc3ktPnN0YXRlIDwgQ1VSTE1fU1RBVEVfRE9ORSk/CisgICAgICAgICAgICAgICAgICAgQ1VSTE1fU1RBVEVfRE9ORTogQ1VSTE1fU1RBVEVfQ09NUExFVEVEKTsKKyAgICAgICAgcmVzdWx0ID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOworICAgICAgfQorICAgIH0KKyAgfSBXSElMRV9GQUxTRTsgLyoganVzdCB0byBicmVhayBvdXQgZnJvbSEgKi8KKworICBpZihDVVJMTV9TVEFURV9DT01QTEVURUQgPT0gZWFzeS0+c3RhdGUpIHsKKyAgICBpZihkYXRhLT5kbnMuaG9zdGNhY2hldHlwZSA9PSBIQ0FDSEVfTVVMVEkpIHsKKyAgICAgIC8qIGNsZWFyIG91dCB0aGUgdXNhZ2Ugb2YgdGhlIHNoYXJlZCBETlMgY2FjaGUgKi8KKyAgICAgIGRhdGEtPmRucy5ob3N0Y2FjaGUgPSBOVUxMOworICAgICAgZGF0YS0+ZG5zLmhvc3RjYWNoZXR5cGUgPSBIQ0FDSEVfTk9ORTsKKyAgICB9CisKKyAgICAvKiBub3cgZmlsbCBpbiB0aGUgQ3VybF9tZXNzYWdlIHdpdGggdGhpcyBpbmZvICovCisgICAgbXNnID0gJmVhc3ktPm1zZzsKKworICAgIG1zZy0+ZXh0bXNnLm1zZyA9IENVUkxNU0dfRE9ORTsKKyAgICBtc2ctPmV4dG1zZy5lYXN5X2hhbmRsZSA9IGRhdGE7CisgICAgbXNnLT5leHRtc2cuZGF0YS5yZXN1bHQgPSBlYXN5LT5yZXN1bHQ7CisKKyAgICByZXN1bHQgPSBtdWx0aV9hZGRtc2cobXVsdGksIG1zZyk7CisKKyAgICBtdWx0aXN0YXRlKGVhc3ksIENVUkxNX1NUQVRFX01TR1NFTlQpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitDVVJMTWNvZGUgY3VybF9tdWx0aV9wZXJmb3JtKENVUkxNICptdWx0aV9oYW5kbGUsIGludCAqcnVubmluZ19oYW5kbGVzKQoreworICBzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGk9KHN0cnVjdCBDdXJsX211bHRpICopbXVsdGlfaGFuZGxlOworICBzdHJ1Y3QgQ3VybF9vbmVfZWFzeSAqZWFzeTsKKyAgQ1VSTE1jb2RlIHJldHVybmNvZGU9Q1VSTE1fT0s7CisgIHN0cnVjdCBDdXJsX3RyZWUgKnQ7CisgIHN0cnVjdCB0aW1ldmFsIG5vdyA9IEN1cmxfdHZub3coKTsKKworICBpZighR09PRF9NVUxUSV9IQU5ETEUobXVsdGkpKQorICAgIHJldHVybiBDVVJMTV9CQURfSEFORExFOworCisgIGVhc3k9bXVsdGktPmVhc3kubmV4dDsKKyAgd2hpbGUoZWFzeSAhPSAmbXVsdGktPmVhc3kpIHsKKyAgICBDVVJMTWNvZGUgcmVzdWx0OworICAgIHN0cnVjdCBXaWxkY2FyZERhdGEgKndjID0gJmVhc3ktPmVhc3lfaGFuZGxlLT53aWxkY2FyZDsKKworICAgIGlmKGVhc3ktPmVhc3lfaGFuZGxlLT5zZXQud2lsZGNhcmRtYXRjaCkgeworICAgICAgaWYoIXdjLT5maWxlbGlzdCkgeworICAgICAgICBDVVJMY29kZSByZXQgPSBDdXJsX3dpbGRjYXJkX2luaXQod2MpOyAvKiBpbml0IHdpbGRjYXJkIHN0cnVjdHVyZXMgKi8KKyAgICAgICAgaWYocmV0KQorICAgICAgICAgIHJldHVybiBDVVJMTV9PVVRfT0ZfTUVNT1JZOworICAgICAgfQorICAgIH0KKworICAgIGRvCisgICAgICByZXN1bHQgPSBtdWx0aV9ydW5zaW5nbGUobXVsdGksIG5vdywgZWFzeSk7CisgICAgd2hpbGUoQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNID09IHJlc3VsdCk7CisKKyAgICBpZihlYXN5LT5lYXN5X2hhbmRsZS0+c2V0LndpbGRjYXJkbWF0Y2gpIHsKKyAgICAgIC8qIGRlc3RydWN0IHdpbGRjYXJkIHN0cnVjdHVyZXMgaWYgaXQgaXMgbmVlZGVkICovCisgICAgICBpZih3Yy0+c3RhdGUgPT0gQ1VSTFdDX0RPTkUgfHwgcmVzdWx0KQorICAgICAgICBDdXJsX3dpbGRjYXJkX2R0b3Iod2MpOworICAgIH0KKworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybmNvZGUgPSByZXN1bHQ7CisKKyAgICBlYXN5ID0gZWFzeS0+bmV4dDsgLyogb3BlcmF0ZSBvbiBuZXh0IGhhbmRsZSAqLworICB9CisKKyAgLyoKKyAgICogU2ltcGx5IHJlbW92ZSBhbGwgZXhwaXJlZCB0aW1lcnMgZnJvbSB0aGUgc3BsYXkgc2luY2UgaGFuZGxlcyBhcmUgZGVhbHQKKyAgICogd2l0aCB1bmNvbmRpdGlvbmFsbHkgYnkgdGhpcyBmdW5jdGlvbiBhbmQgY3VybF9tdWx0aV90aW1lb3V0KCkgcmVxdWlyZXMKKyAgICogdGhhdCBhbHJlYWR5IHBhc3NlZC9oYW5kbGVkIGV4cGlyZSB0aW1lcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBzcGxheS4KKyAgICoKKyAgICogSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlICdub3cnIHZhbHVlIGlzIHNldCBhdCB0aGUgZW50cnkgb2YgdGhpcyBmdW5jdGlvbgorICAgKiBhbmQgbm90IGZvciB0aGUgY3VycmVudCB0aW1lIGFzIGl0IG1heSBoYXZlIHRpY2tlZCBhIGxpdHRsZSB3aGlsZSBzaW5jZQorICAgKiB0aGVuIGFuZCB0aGVuIHdlIHJpc2sgdGhpcyBsb29wIHRvIHJlbW92ZSB0aW1lcnMgdGhhdCBhY3R1YWxseSBoYXZlIG5vdAorICAgKiBiZWVuIGhhbmRsZWQhCisgICAqLworICBkbyB7CisgICAgbXVsdGktPnRpbWV0cmVlID0gQ3VybF9zcGxheWdldGJlc3Qobm93LCBtdWx0aS0+dGltZXRyZWUsICZ0KTsKKyAgICBpZih0KQorICAgICAgLyogdGhlIHJlbW92ZWQgbWF5IGhhdmUgYW5vdGhlciB0aW1lb3V0IGluIHF1ZXVlICovCisgICAgICAodm9pZClhZGRfbmV4dF90aW1lb3V0KG5vdywgbXVsdGksIHQtPnBheWxvYWQpOworCisgIH0gd2hpbGUodCk7CisKKyAgKnJ1bm5pbmdfaGFuZGxlcyA9IG11bHRpLT5udW1fYWxpdmU7CisKKyAgaWYoQ1VSTE1fT0sgPj0gcmV0dXJuY29kZSkKKyAgICB1cGRhdGVfdGltZXIobXVsdGkpOworCisgIHJldHVybiByZXR1cm5jb2RlOworfQorCitDVVJMTWNvZGUgY3VybF9tdWx0aV9jbGVhbnVwKENVUkxNICptdWx0aV9oYW5kbGUpCit7CisgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aT0oc3RydWN0IEN1cmxfbXVsdGkgKiltdWx0aV9oYW5kbGU7CisgIHN0cnVjdCBDdXJsX29uZV9lYXN5ICplYXN5OworICBzdHJ1Y3QgQ3VybF9vbmVfZWFzeSAqbmV4dGVhc3k7CisgIGludCBpOworICBzdHJ1Y3QgY2xvc3VyZSAqY2w7CisgIHN0cnVjdCBjbG9zdXJlICpuOworCisgIGlmKEdPT0RfTVVMVElfSEFORExFKG11bHRpKSkgeworICAgIG11bHRpLT50eXBlID0gMDsgLyogbm90IGdvb2QgYW55bW9yZSAqLworCisgICAgLyogZ28gb3ZlciBhbGwgY29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlIGFjdGlvbnMgKi8KKyAgICBmb3IoaT0wOyBpPCBtdWx0aS0+Y29ubmMtPm51bTsgaSsrKSB7CisgICAgICBpZihtdWx0aS0+Y29ubmMtPmNvbm5lY3RzW2ldICYmCisgICAgICAgICBtdWx0aS0+Y29ubmMtPmNvbm5lY3RzW2ldLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfQ0xPU0VBQ1RJT04pIHsKKyAgICAgICAgQ3VybF9kaXNjb25uZWN0KG11bHRpLT5jb25uYy0+Y29ubmVjdHNbaV0sIEZBTFNFKTsKKyAgICAgICAgbXVsdGktPmNvbm5jLT5jb25uZWN0c1tpXSA9IE5VTEw7CisgICAgICB9CisgICAgfQorICAgIC8qIG5vdyB3YWxrIHRocm91Z2ggdGhlIGxpc3Qgb2YgaGFuZGxlcyB3ZSBrZXB0IGFyb3VuZCBvbmx5IHRvIGJlCisgICAgICAgYWJsZSB0byBjbG9zZSBjb25uZWN0aW9ucyAicHJvcGVybHkiICovCisgICAgY2wgPSBtdWx0aS0+Y2xvc3VyZTsKKyAgICB3aGlsZShjbCkgeworICAgICAgY2wtPmVhc3lfaGFuZGxlLT5zdGF0ZS5zaGFyZWRfY29ubiA9IE5VTEw7IC8qIGFsbG93IGNsZWFudXAgKi8KKyAgICAgIGlmKGNsLT5lYXN5X2hhbmRsZS0+c3RhdGUuY2xvc2VkKQorICAgICAgICAvKiBjbG9zZSBoYW5kbGUgb25seSBpZiBjdXJsX2Vhc3lfY2xlYW51cCgpIGFscmVhZHkgaGFzIGJlZW4gY2FsbGVkCisgICAgICAgICAgIGZvciB0aGlzIGVhc3kgaGFuZGxlICovCisgICAgICAgIEN1cmxfY2xvc2UoY2wtPmVhc3lfaGFuZGxlKTsKKyAgICAgIG4gPSBjbC0+bmV4dDsKKyAgICAgIGZyZWUoY2wpOworICAgICAgY2w9IG47CisgICAgfQorCisgICAgQ3VybF9oYXNoX2Rlc3Ryb3kobXVsdGktPmhvc3RjYWNoZSk7CisgICAgbXVsdGktPmhvc3RjYWNoZSA9IE5VTEw7CisKKyAgICBDdXJsX2hhc2hfZGVzdHJveShtdWx0aS0+c29ja2hhc2gpOworICAgIG11bHRpLT5zb2NraGFzaCA9IE5VTEw7CisKKyAgICBDdXJsX3JtX2Nvbm5jKG11bHRpLT5jb25uYyk7CisgICAgbXVsdGktPmNvbm5jID0gTlVMTDsKKworICAgIC8qIHJlbW92ZSB0aGUgcGVuZGluZyBsaXN0IG9mIG1lc3NhZ2VzICovCisgICAgQ3VybF9sbGlzdF9kZXN0cm95KG11bHRpLT5tc2dsaXN0LCBOVUxMKTsKKyAgICBtdWx0aS0+bXNnbGlzdCA9IE5VTEw7CisKKyAgICAvKiByZW1vdmUgYWxsIGVhc3kgaGFuZGxlcyAqLworICAgIGVhc3kgPSBtdWx0aS0+ZWFzeS5uZXh0OworICAgIHdoaWxlKGVhc3kgIT0gJm11bHRpLT5lYXN5KSB7CisgICAgICBuZXh0ZWFzeT1lYXN5LT5uZXh0OworICAgICAgaWYoZWFzeS0+ZWFzeV9oYW5kbGUtPmRucy5ob3N0Y2FjaGV0eXBlID09IEhDQUNIRV9NVUxUSSkgeworICAgICAgICAvKiBjbGVhciBvdXQgdGhlIHVzYWdlIG9mIHRoZSBzaGFyZWQgRE5TIGNhY2hlICovCisgICAgICAgIGVhc3ktPmVhc3lfaGFuZGxlLT5kbnMuaG9zdGNhY2hlID0gTlVMTDsKKyAgICAgICAgZWFzeS0+ZWFzeV9oYW5kbGUtPmRucy5ob3N0Y2FjaGV0eXBlID0gSENBQ0hFX05PTkU7CisgICAgICB9CisKKyAgICAgIC8qIENsZWFyIHRoZSBwb2ludGVyIHRvIHRoZSBjb25uZWN0aW9uIGNhY2hlICovCisgICAgICBlYXN5LT5lYXN5X2hhbmRsZS0+c3RhdGUuY29ubmMgPSBOVUxMOworCisgICAgICBDdXJsX2Vhc3lfYWRkbXVsdGkoZWFzeS0+ZWFzeV9oYW5kbGUsIE5VTEwpOyAvKiBjbGVhciB0aGUgYXNzb2NpYXRpb24gKi8KKworICAgICAgZnJlZShlYXN5KTsKKyAgICAgIGVhc3kgPSBuZXh0ZWFzeTsKKyAgICB9CisKKyAgICBmcmVlKG11bHRpKTsKKworICAgIHJldHVybiBDVVJMTV9PSzsKKyAgfQorICBlbHNlCisgICAgcmV0dXJuIENVUkxNX0JBRF9IQU5ETEU7Cit9CisKKy8qCisgKiBjdXJsX211bHRpX2luZm9fcmVhZCgpCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgcHJpbWFyeSB3YXkgZm9yIGEgbXVsdGkvbXVsdGlfc29ja2V0IGFwcGxpY2F0aW9uIHRvCisgKiBmaWd1cmUgb3V0IGlmIGEgdHJhbnNmZXIgaGFzIGVuZGVkLiBXZSBNVVNUIG1ha2UgdGhpcyBmdW5jdGlvbiBhcyBmYXN0IGFzCisgKiBwb3NzaWJsZSBhcyBpdCB3aWxsIGJlIHBvbGxlZCBmcmVxdWVudGx5IGFuZCB3ZSBNVVNUIE5PVCBzY2FuIGFueSBsaXN0cyBpbgorICogaGVyZSB0byBmaWd1cmUgb3V0IHRoaW5ncy4gV2UgbXVzdCBzY2FsZSBmaW5lIHRvIHRob3VzYW5kcyBvZiBoYW5kbGVzIGFuZAorICogYmV5b25kLiBUaGUgY3VycmVudCBkZXNpZ24gaXMgZnVsbHkgTygxKS4KKyAqLworCitDVVJMTXNnICpjdXJsX211bHRpX2luZm9fcmVhZChDVVJMTSAqbXVsdGlfaGFuZGxlLCBpbnQgKm1zZ3NfaW5fcXVldWUpCit7CisgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aT0oc3RydWN0IEN1cmxfbXVsdGkgKiltdWx0aV9oYW5kbGU7CisgIHN0cnVjdCBDdXJsX21lc3NhZ2UgKm1zZzsKKworICAqbXNnc19pbl9xdWV1ZSA9IDA7IC8qIGRlZmF1bHQgdG8gbm9uZSAqLworCisgIGlmKEdPT0RfTVVMVElfSEFORExFKG11bHRpKSAmJiBDdXJsX2xsaXN0X2NvdW50KG11bHRpLT5tc2dsaXN0KSkgeworICAgIC8qIHRoZXJlIGlzIG9uZSBvciBtb3JlIG1lc3NhZ2VzIGluIHRoZSBsaXN0ICovCisgICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqZTsKKworICAgIC8qIGV4dHJhY3QgdGhlIGhlYWQgb2YgdGhlIGxpc3QgdG8gcmV0dXJuICovCisgICAgZSA9IG11bHRpLT5tc2dsaXN0LT5oZWFkOworCisgICAgbXNnID0gZS0+cHRyOworCisgICAgLyogcmVtb3ZlIHRoZSBleHRyYWN0ZWQgZW50cnkgKi8KKyAgICBDdXJsX2xsaXN0X3JlbW92ZShtdWx0aS0+bXNnbGlzdCwgZSwgTlVMTCk7CisKKyAgICAqbXNnc19pbl9xdWV1ZSA9IGN1cmx4X3V6dG9zaShDdXJsX2xsaXN0X2NvdW50KG11bHRpLT5tc2dsaXN0KSk7CisKKyAgICByZXR1cm4gJm1zZy0+ZXh0bXNnOworICB9CisgIGVsc2UKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIHNpbmdsZXNvY2tldCgpIGNoZWNrcyB3aGF0IHNvY2tldHMgd2UgZGVhbCB3aXRoIGFuZCB0aGVpciAiYWN0aW9uIHN0YXRlIgorICogYW5kIGlmIHdlIGhhdmUgYSBkaWZmZXJlbnQgc3RhdGUgaW4gYW55IG9mIHRob3NlIHNvY2tldHMgZnJvbSBsYXN0IHRpbWUgd2UKKyAqIGNhbGwgdGhlIGNhbGxiYWNrIGFjY29yZGluZ2x5LgorICovCitzdGF0aWMgdm9pZCBzaW5nbGVzb2NrZXQoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX29uZV9lYXN5ICplYXN5KQoreworICBjdXJsX3NvY2tldF90IHNvY2tzW01BWF9TT0NLU1BFUkVBU1lIQU5ETEVdOworICBpbnQgaTsKKyAgc3RydWN0IEN1cmxfc2hfZW50cnkgKmVudHJ5OworICBjdXJsX3NvY2tldF90IHM7CisgIGludCBudW07CisgIHVuc2lnbmVkIGludCBjdXJyYWN0aW9uOworICBzdHJ1Y3QgQ3VybF9vbmVfZWFzeSAqZWFzeV9ieV9oYXNoOworICBib29sIHJlbW92ZV9zb2NrX2Zyb21faGFzaDsKKworICBmb3IoaT0wOyBpPCBNQVhfU09DS1NQRVJFQVNZSEFORExFOyBpKyspCisgICAgc29ja3NbaV0gPSBDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgLyogRmlsbCBpbiB0aGUgJ2N1cnJlbnQnIHN0cnVjdCB3aXRoIHRoZSBzdGF0ZSBhcyBpdCBpcyBub3c6IHdoYXQgc29ja2V0cyB0bworICAgICBzdXBlcnZpc2UgYW5kIGZvciB3aGF0IGFjdGlvbnMgKi8KKyAgY3VycmFjdGlvbiA9IG11bHRpX2dldHNvY2soZWFzeSwgc29ja3MsIE1BWF9TT0NLU1BFUkVBU1lIQU5ETEUpOworCisgIC8qIFdlIGhhdmUgMCAuLiBOIHNvY2tldHMgYWxyZWFkeSBhbmQgd2UgZ2V0IHRvIGtub3cgYWJvdXQgdGhlIDAgLi4gTQorICAgICBzb2NrZXRzIHdlIHNob3VsZCBoYXZlIGZyb20gbm93IG9uLiBEZXRlY3QgdGhlIGRpZmZlcmVuY2VzLCByZW1vdmUgbm8KKyAgICAgbG9uZ2VyIHN1cGVydmlzZWQgb25lcyBhbmQgYWRkIG5ldyBvbmVzICovCisKKyAgLyogd2FsayBvdmVyIHRoZSBzb2NrZXRzIHdlIGdvdCByaWdodCBub3cgKi8KKyAgZm9yKGk9MDsgKGk8IE1BWF9TT0NLU1BFUkVBU1lIQU5ETEUpICYmCisgICAgICAgIChjdXJyYWN0aW9uICYgKEdFVFNPQ0tfUkVBRFNPQ0soaSkgfCBHRVRTT0NLX1dSSVRFU09DSyhpKSkpOworICAgICAgaSsrKSB7CisgICAgaW50IGFjdGlvbiA9IENVUkxfUE9MTF9OT05FOworCisgICAgcyA9IHNvY2tzW2ldOworCisgICAgLyogZ2V0IGl0IGZyb20gdGhlIGhhc2ggKi8KKyAgICBlbnRyeSA9IEN1cmxfaGFzaF9waWNrKG11bHRpLT5zb2NraGFzaCwgKGNoYXIgKikmcywgc2l6ZW9mKHMpKTsKKworICAgIGlmKGN1cnJhY3Rpb24gJiBHRVRTT0NLX1JFQURTT0NLKGkpKQorICAgICAgYWN0aW9uIHw9IENVUkxfUE9MTF9JTjsKKyAgICBpZihjdXJyYWN0aW9uICYgR0VUU09DS19XUklURVNPQ0soaSkpCisgICAgICBhY3Rpb24gfD0gQ1VSTF9QT0xMX09VVDsKKworICAgIGlmKGVudHJ5KSB7CisgICAgICAvKiB5ZXBzLCBhbHJlYWR5IHByZXNlbnQgc28gY2hlY2sgaWYgaXQgaGFzIHRoZSBzYW1lIGFjdGlvbiBzZXQgKi8KKyAgICAgIGlmKGVudHJ5LT5hY3Rpb24gPT0gYWN0aW9uKQorICAgICAgICAvKiBzYW1lLCBjb250aW51ZSAqLworICAgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiB0aGlzIGlzIGEgc29ja2V0IHdlIGRpZG4ndCBoYXZlIGJlZm9yZSwgYWRkIGl0ISAqLworICAgICAgZW50cnkgPSBzaF9hZGRlbnRyeShtdWx0aS0+c29ja2hhc2gsIHMsIGVhc3ktPmVhc3lfaGFuZGxlKTsKKyAgICAgIGlmKCFlbnRyeSkKKyAgICAgICAgLyogZmF0YWwgKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIHdlIGtub3cgKGVudHJ5ICE9IE5VTEwpIGF0IHRoaXMgcG9pbnQsIHNlZSB0aGUgbG9naWMgYWJvdmUgKi8KKyAgICBpZihtdWx0aS0+c29ja2V0X2NiKQorICAgICAgbXVsdGktPnNvY2tldF9jYihlYXN5LT5lYXN5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICBtdWx0aS0+c29ja2V0X3VzZXJwLAorICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c29ja2V0cCk7CisKKyAgICBlbnRyeS0+YWN0aW9uID0gYWN0aW9uOyAvKiBzdG9yZSB0aGUgY3VycmVudCBhY3Rpb24gc3RhdGUgKi8KKyAgfQorCisgIG51bSA9IGk7IC8qIG51bWJlciBvZiBzb2NrZXRzICovCisKKyAgLyogd2hlbiB3ZSd2ZSB3YWxrZWQgb3ZlciBhbGwgdGhlIHNvY2tldHMgd2Ugc2hvdWxkIGhhdmUgcmlnaHQgbm93LCB3ZSBtdXN0CisgICAgIG1ha2Ugc3VyZSB0byBkZXRlY3Qgc29ja2V0cyB0aGF0IGFyZSByZW1vdmVkICovCisgIGZvcihpPTA7IGk8IGVhc3ktPm51bXNvY2tzOyBpKyspIHsKKyAgICBpbnQgajsKKyAgICBzID0gZWFzeS0+c29ja2V0c1tpXTsKKyAgICBmb3Ioaj0wOyBqPG51bTsgaisrKSB7CisgICAgICBpZihzID09IHNvY2tzW2pdKSB7CisgICAgICAgIC8qIHRoaXMgaXMgc3RpbGwgc3VwZXJ2aXNlZCAqLworICAgICAgICBzID0gQ1VSTF9TT0NLRVRfQkFEOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgaWYocyAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKworICAgICAgLyogdGhpcyBzb2NrZXQgaGFzIGJlZW4gcmVtb3ZlZC4gVGVsbCB0aGUgYXBwIHRvIHJlbW92ZSBpdCAqLworICAgICAgcmVtb3ZlX3NvY2tfZnJvbV9oYXNoID0gVFJVRTsKKworICAgICAgZW50cnkgPSBDdXJsX2hhc2hfcGljayhtdWx0aS0+c29ja2hhc2gsIChjaGFyICopJnMsIHNpemVvZihzKSk7CisgICAgICBpZihlbnRyeSkgeworICAgICAgICAvKiBjaGVjayBpZiB0aGUgc29ja2V0IHRvIGJlIHJlbW92ZWQgc2VydmVzIGEgY29ubmVjdGlvbiB3aGljaCBoYXMKKyAgICAgICAgICAgb3RoZXIgZWFzeS1zIGluIGEgcGlwZWxpbmUuIEluIHRoaXMgY2FzZSB0aGUgc29ja2V0IHNob3VsZCBub3QgYmUKKyAgICAgICAgICAgcmVtb3ZlZC4gKi8KKyAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICplYXN5X2Nvbm47CisKKyAgICAgICAgZWFzeV9ieV9oYXNoID0gZW50cnktPmVhc3ktPm11bHRpX3BvczsKKyAgICAgICAgZWFzeV9jb25uID0gZWFzeV9ieV9oYXNoLT5lYXN5X2Nvbm47CisgICAgICAgIGlmKGVhc3lfY29ubikgeworICAgICAgICAgIGlmKGVhc3lfY29ubi0+cmVjdl9waXBlICYmIGVhc3lfY29ubi0+cmVjdl9waXBlLT5zaXplID4gMSkgeworICAgICAgICAgICAgLyogdGhlIGhhbmRsZSBzaG91bGQgbm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgcGlwZSB5ZXQgKi8KKyAgICAgICAgICAgIHJlbW92ZV9zb2NrX2Zyb21faGFzaCA9IEZBTFNFOworCisgICAgICAgICAgICAvKiBVcGRhdGUgdGhlIHNvY2toYXNoIGVudHJ5IHRvIGluc3RlYWQgcG9pbnQgdG8gdGhlIG5leHQgaW4gbGluZQorICAgICAgICAgICAgICAgZm9yIHRoZSByZWN2X3BpcGUsIG9yIHRoZSBmaXJzdCAoaW4gY2FzZSB0aGlzIHBhcnRpY3VsYXIgZWFzeQorICAgICAgICAgICAgICAgaXNuJ3QgYWxyZWFkeSkgKi8KKyAgICAgICAgICAgIGlmKGVudHJ5LT5lYXN5ID09IGVhc3ktPmVhc3lfaGFuZGxlKSB7CisgICAgICAgICAgICAgIGlmKGlzSGFuZGxlQXRIZWFkKGVhc3ktPmVhc3lfaGFuZGxlLCBlYXN5X2Nvbm4tPnJlY3ZfcGlwZSkpCisgICAgICAgICAgICAgICAgZW50cnktPmVhc3kgPSBlYXN5X2Nvbm4tPnJlY3ZfcGlwZS0+aGVhZC0+bmV4dC0+cHRyOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZW50cnktPmVhc3kgPSBlYXN5X2Nvbm4tPnJlY3ZfcGlwZS0+aGVhZC0+cHRyOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBpZihlYXN5X2Nvbm4tPnNlbmRfcGlwZSAgJiYgZWFzeV9jb25uLT5zZW5kX3BpcGUtPnNpemUgPiAxKSB7CisgICAgICAgICAgICAvKiB0aGUgaGFuZGxlIHNob3VsZCBub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBwaXBlIHlldCAqLworICAgICAgICAgICAgcmVtb3ZlX3NvY2tfZnJvbV9oYXNoID0gRkFMU0U7CisKKyAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgc29ja2hhc2ggZW50cnkgdG8gaW5zdGVhZCBwb2ludCB0byB0aGUgbmV4dCBpbiBsaW5lCisgICAgICAgICAgICAgICBmb3IgdGhlIHNlbmRfcGlwZSwgb3IgdGhlIGZpcnN0IChpbiBjYXNlIHRoaXMgcGFydGljdWxhciBlYXN5CisgICAgICAgICAgICAgICBpc24ndCBhbHJlYWR5KSAqLworICAgICAgICAgICAgaWYoZW50cnktPmVhc3kgPT0gZWFzeS0+ZWFzeV9oYW5kbGUpIHsKKyAgICAgICAgICAgICAgaWYoaXNIYW5kbGVBdEhlYWQoZWFzeS0+ZWFzeV9oYW5kbGUsIGVhc3lfY29ubi0+c2VuZF9waXBlKSkKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZWFzeSA9IGVhc3lfY29ubi0+c2VuZF9waXBlLT5oZWFkLT5uZXh0LT5wdHI7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZWFzeSA9IGVhc3lfY29ubi0+c2VuZF9waXBlLT5oZWFkLT5wdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIC8qIERvbid0IHdvcnJ5IGFib3V0IG92ZXJ3cml0aW5nIHJlY3ZfcGlwZSBoZWFkIHdpdGggc2VuZF9waXBlX2hlYWQsCisgICAgICAgICAgICAgd2hlbiBhY3Rpb24gd2lsbCBiZSBhc2tlZCBvbiB0aGUgc29ja2V0IChzZWUgbXVsdGlfc29ja2V0KCkpLCB0aGUKKyAgICAgICAgICAgICBoZWFkIG9mIHRoZSBjb3JyZWN0IHBpcGUgd2lsbCBiZSB0YWtlbiBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgICAgICAgYWN0aW9uLiAqLworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIC8qIGp1c3QgYSBwcmVjYXV0aW9uLCB0aGlzIHNvY2tldCByZWFsbHkgU0hPVUxEIGJlIGluIHRoZSBoYXNoIGFscmVhZHkKKyAgICAgICAgICAgYnV0IGluIGNhc2UgaXQgaXNuJ3QsIHdlIGRvbid0IGhhdmUgdG8gdGVsbCB0aGUgYXBwIHRvIHJlbW92ZSBpdAorICAgICAgICAgICBlaXRoZXIgc2luY2UgaXQgbmV2ZXIgZ290IHRvIGtub3cgYWJvdXQgaXQgKi8KKyAgICAgICAgcmVtb3ZlX3NvY2tfZnJvbV9oYXNoID0gRkFMU0U7CisKKyAgICAgIGlmKHJlbW92ZV9zb2NrX2Zyb21faGFzaCkgeworICAgICAgICBpZihtdWx0aS0+c29ja2V0X2NiKQorICAgICAgICAgIG11bHRpLT5zb2NrZXRfY2IoZWFzeS0+ZWFzeV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTF9QT0xMX1JFTU9WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpLT5zb2NrZXRfdXNlcnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSA/IGVudHJ5LT5zb2NrZXRwIDogTlVMTCk7CisgICAgICAgIHNoX2RlbGVudHJ5KG11bHRpLT5zb2NraGFzaCwgcyk7CisgICAgICB9CisKKyAgICB9CisgIH0KKworICBtZW1jcHkoZWFzeS0+c29ja2V0cywgc29ja3MsIG51bSpzaXplb2YoY3VybF9zb2NrZXRfdCkpOworICBlYXN5LT5udW1zb2NrcyA9IG51bTsKK30KKworLyoKKyAqIGFkZF9uZXh0X3RpbWVvdXQoKQorICoKKyAqIEVhY2ggU2Vzc2lvbkhhbmRsZSBoYXMgYSBsaXN0IG9mIHRpbWVvdXRzLiBUaGUgYWRkX25leHRfdGltZW91dCgpIGlzIGNhbGxlZAorICogd2hlbiBpdCBoYXMganVzdCBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc3BsYXkgdHJlZSBiZWNhdXNlIHRoZSB0aW1lb3V0IGhhcworICogZXhwaXJlZC4gVGhpcyBmdW5jdGlvbiBpcyB0aGVuIHRvIGFkdmFuY2UgaW4gdGhlIGxpc3QgdG8gcGljayB0aGUgbmV4dAorICogdGltZW91dCB0byB1c2UgKHNraXAgdGhlIGFscmVhZHkgZXhwaXJlZCBvbmVzKSBhbmQgYWRkIHRoaXMgbm9kZSBiYWNrIHRvCisgKiB0aGUgc3BsYXkgdHJlZSBhZ2Fpbi4KKyAqCisgKiBUaGUgc3BsYXkgdHJlZSBvbmx5IGhhcyBlYWNoIHNlc3Npb25oYW5kbGUgYXMgYSBzaW5nbGUgbm9kZSBhbmQgdGhlIG5lYXJlc3QKKyAqIHRpbWVvdXQgaXMgdXNlZCB0byBzb3J0IGl0IG9uLgorICovCitzdGF0aWMgQ1VSTE1jb2RlIGFkZF9uZXh0X3RpbWVvdXQoc3RydWN0IHRpbWV2YWwgbm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZCkKK3sKKyAgc3RydWN0IHRpbWV2YWwgKnR2ID0gJmQtPnN0YXRlLmV4cGlyZXRpbWU7CisgIHN0cnVjdCBjdXJsX2xsaXN0ICpsaXN0ID0gZC0+c3RhdGUudGltZW91dGxpc3Q7CisgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmU7CisKKyAgLyogbW92ZSBvdmVyIHRoZSB0aW1lb3V0IGxpc3QgZm9yIHRoaXMgc3BlY2lmaWMgaGFuZGxlIGFuZCByZW1vdmUgYWxsCisgICAgIHRpbWVvdXRzIHRoYXQgYXJlIG5vdyBwYXNzZWQgdGVuc2UgYW5kIHN0b3JlIHRoZSBuZXh0IHBlbmRpbmcKKyAgICAgdGltZW91dCBpbiAqdHYgKi8KKyAgZm9yKGUgPSBsaXN0LT5oZWFkOyBlOyApIHsKKyAgICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpuID0gZS0+bmV4dDsKKyAgICBsb25nIGRpZmYgPSBjdXJseF90dmRpZmYoKihzdHJ1Y3QgdGltZXZhbCAqKWUtPnB0ciwgbm93KTsKKyAgICBpZihkaWZmIDw9IDApCisgICAgICAvKiByZW1vdmUgb3V0ZGF0ZWQgZW50cnkgKi8KKyAgICAgIEN1cmxfbGxpc3RfcmVtb3ZlKGxpc3QsIGUsIE5VTEwpOworICAgIGVsc2UKKyAgICAgIC8qIHRoZSBsaXN0IGlzIHNvcnRlZCBzbyBnZXQgb3V0IG9uIHRoZSBmaXJzdCBtaXNtYXRjaCAqLworICAgICAgYnJlYWs7CisgICAgZSA9IG47CisgIH0KKyAgaWYoIWxpc3QtPnNpemUpICB7CisgICAgLyogY2xlYXIgdGhlIGV4cGlyZSB0aW1lcyB3aXRoaW4gdGhlIGhhbmRsZXMgdGhhdCB3ZSByZW1vdmUgZnJvbSB0aGUKKyAgICAgICBzcGxheSB0cmVlICovCisgICAgdHYtPnR2X3NlYyA9IDA7CisgICAgdHYtPnR2X3VzZWMgPSAwOworICB9CisgIGVsc2UgeworICAgIGUgPSBsaXN0LT5oZWFkOworICAgIC8qIGNvcHkgdGhlIGZpcnN0IGVudHJ5IHRvICd0dicgKi8KKyAgICBtZW1jcHkodHYsIGUtPnB0ciwgc2l6ZW9mKCp0dikpOworCisgICAgLyogcmVtb3ZlIGZpcnN0IGVudHJ5IGZyb20gbGlzdCAqLworICAgIEN1cmxfbGxpc3RfcmVtb3ZlKGxpc3QsIGUsIE5VTEwpOworCisgICAgLyogaW5zZXJ0IHRoaXMgbm9kZSBhZ2FpbiBpbnRvIHRoZSBzcGxheSAqLworICAgIG11bHRpLT50aW1ldHJlZSA9IEN1cmxfc3BsYXlpbnNlcnQoKnR2LCBtdWx0aS0+dGltZXRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZC0+c3RhdGUudGltZW5vZGUpOworICB9CisgIHJldHVybiBDVVJMTV9PSzsKK30KKworCitzdGF0aWMgQ1VSTE1jb2RlIG11bHRpX3NvY2tldChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNoZWNrYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV2X2JpdG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJ1bm5pbmdfaGFuZGxlcykKK3sKKyAgQ1VSTE1jb2RlIHJlc3VsdCA9IENVUkxNX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IE5VTEw7CisgIHN0cnVjdCBDdXJsX3RyZWUgKnQ7CisgIHN0cnVjdCB0aW1ldmFsIG5vdyA9IEN1cmxfdHZub3coKTsKKworICBpZihjaGVja2FsbCkgeworICAgIHN0cnVjdCBDdXJsX29uZV9lYXN5ICplYXN5cDsKKyAgICAvKiAqcGVyZm9ybSgpIGRlYWxzIHdpdGggcnVubmluZ19oYW5kbGVzIG9uIGl0cyBvd24gKi8KKyAgICByZXN1bHQgPSBjdXJsX211bHRpX3BlcmZvcm0obXVsdGksIHJ1bm5pbmdfaGFuZGxlcyk7CisKKyAgICAvKiB3YWxrIHRocm91Z2ggZWFjaCBlYXN5IGhhbmRsZSBhbmQgZG8gdGhlIHNvY2tldCBzdGF0ZSBjaGFuZ2UgbWFnaWMKKyAgICAgICBhbmQgY2FsbGJhY2tzICovCisgICAgZWFzeXA9bXVsdGktPmVhc3kubmV4dDsKKyAgICB3aGlsZShlYXN5cCAhPSAmbXVsdGktPmVhc3kpIHsKKyAgICAgIHNpbmdsZXNvY2tldChtdWx0aSwgZWFzeXApOworICAgICAgZWFzeXAgPSBlYXN5cC0+bmV4dDsKKyAgICB9CisKKyAgICAvKiBvciBzaG91bGQgd2UgZmFsbC10aHJvdWdoIGFuZCBkbyB0aGUgdGltZXItYmFzZWQgc3R1ZmY/ICovCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBlbHNlIGlmKHMgIT0gQ1VSTF9TT0NLRVRfVElNRU9VVCkgeworCisgICAgc3RydWN0IEN1cmxfc2hfZW50cnkgKmVudHJ5ID0KKyAgICAgIEN1cmxfaGFzaF9waWNrKG11bHRpLT5zb2NraGFzaCwgKGNoYXIgKikmcywgc2l6ZW9mKHMpKTsKKworICAgIGlmKCFlbnRyeSkKKyAgICAgIC8qIFVubWF0Y2hlZCBzb2NrZXQsIHdlIGNhbid0IGFjdCBvbiBpdCBidXQgd2UgaWdub3JlIHRoaXMgZmFjdC4gIEluCisgICAgICAgICByZWFsLXdvcmxkIHRlc3RzIGl0IGhhcyBiZWVuIHByb3ZlZCB0aGF0IGxpYmV2ZW50IGNhbiBpbiBmYWN0IGdpdmUKKyAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiBhY3Rpb25zIGV2ZW4gdGhvdWdoIHRoZSBzb2NrZXQgd2FzIGp1c3QgcHJldmlvdXNseQorICAgICAgICAgYXNrZWQgdG8gZ2V0IHJlbW92ZWQsIHNvIHRodXMgd2UgYmV0dGVyIHN1cnZpdmUgc3RyYXkgc29ja2V0IGFjdGlvbnMKKyAgICAgICAgIGFuZCBqdXN0IG1vdmUgb24uICovCisgICAgICA7CisgICAgZWxzZSB7CisgICAgICBkYXRhID0gZW50cnktPmVhc3k7CisKKyAgICAgIGlmKGRhdGEtPm1hZ2ljICE9IENVUkxFQVNZX01BR0lDX05VTUJFUikKKyAgICAgICAgLyogYmFkIGJhZCBiYWQgYmFkIGJhZCBiYWQgYmFkICovCisgICAgICAgIHJldHVybiBDVVJMTV9JTlRFUk5BTF9FUlJPUjsKKworICAgICAgLyogSWYgdGhlIHBpcGVsaW5lIGlzIGVuYWJsZWQsIHRha2UgdGhlIGhhbmRsZSB3aGljaCBpcyBpbiB0aGUgaGVhZCBvZgorICAgICAgICAgdGhlIHBpcGVsaW5lLiBJZiB3ZSBzaG91bGQgd3JpdGUgaW50byB0aGUgc29ja2V0LCB0YWtlIHRoZSBzZW5kX3BpcGUKKyAgICAgICAgIGhlYWQuICBJZiB3ZSBzaG91bGQgcmVhZCBmcm9tIHRoZSBzb2NrZXQsIHRha2UgdGhlIHJlY3ZfcGlwZSBoZWFkLiAqLworICAgICAgaWYoZGF0YS0+c2V0Lm9uZV9lYXN5LT5lYXN5X2Nvbm4pIHsKKyAgICAgICAgaWYoKGV2X2JpdG1hc2sgJiBDVVJMX1BPTExfT1VUKSAmJgorICAgICAgICAgICBkYXRhLT5zZXQub25lX2Vhc3ktPmVhc3lfY29ubi0+c2VuZF9waXBlICYmCisgICAgICAgICAgIGRhdGEtPnNldC5vbmVfZWFzeS0+ZWFzeV9jb25uLT5zZW5kX3BpcGUtPmhlYWQpCisgICAgICAgICAgZGF0YSA9IGRhdGEtPnNldC5vbmVfZWFzeS0+ZWFzeV9jb25uLT5zZW5kX3BpcGUtPmhlYWQtPnB0cjsKKyAgICAgICAgZWxzZSBpZigoZXZfYml0bWFzayAmIENVUkxfUE9MTF9JTikgJiYKKyAgICAgICAgICAgICAgICBkYXRhLT5zZXQub25lX2Vhc3ktPmVhc3lfY29ubi0+cmVjdl9waXBlICYmCisgICAgICAgICAgICAgICAgZGF0YS0+c2V0Lm9uZV9lYXN5LT5lYXN5X2Nvbm4tPnJlY3ZfcGlwZS0+aGVhZCkKKyAgICAgICAgICBkYXRhID0gZGF0YS0+c2V0Lm9uZV9lYXN5LT5lYXN5X2Nvbm4tPnJlY3ZfcGlwZS0+aGVhZC0+cHRyOworICAgICAgfQorCisgICAgICBpZihkYXRhLT5zZXQub25lX2Vhc3ktPmVhc3lfY29ubiAmJgorICAgICAgICAgIShkYXRhLT5zZXQub25lX2Vhc3ktPmVhc3lfY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX0RJUkxPQ0spKQorICAgICAgICAvKiBzZXQgc29ja2V0IGV2ZW50IGJpdG1hc2sgaWYgdGhleSdyZSBub3QgbG9ja2VkICovCisgICAgICAgIGRhdGEtPnNldC5vbmVfZWFzeS0+ZWFzeV9jb25uLT5jc2VsZWN0X2JpdHMgPSBldl9iaXRtYXNrOworCisgICAgICBkbworICAgICAgICByZXN1bHQgPSBtdWx0aV9ydW5zaW5nbGUobXVsdGksIG5vdywgZGF0YS0+c2V0Lm9uZV9lYXN5KTsKKyAgICAgIHdoaWxlKENVUkxNX0NBTExfTVVMVElfUEVSRk9STSA9PSByZXN1bHQpOworCisgICAgICBpZihkYXRhLT5zZXQub25lX2Vhc3ktPmVhc3lfY29ubiAmJgorICAgICAgICAgIShkYXRhLT5zZXQub25lX2Vhc3ktPmVhc3lfY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX0RJUkxPQ0spKQorICAgICAgICAvKiBjbGVhciB0aGUgYml0bWFzayBvbmx5IGlmIG5vdCBsb2NrZWQgKi8KKyAgICAgICAgZGF0YS0+c2V0Lm9uZV9lYXN5LT5lYXN5X2Nvbm4tPmNzZWxlY3RfYml0cyA9IDA7CisKKyAgICAgIGlmKENVUkxNX09LID49IHJlc3VsdCkKKyAgICAgICAgLyogZ2V0IHRoZSBzb2NrZXQocykgYW5kIGNoZWNrIGlmIHRoZSBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlCisgICAgICAgICAgIGxhc3QgKi8KKyAgICAgICAgc2luZ2xlc29ja2V0KG11bHRpLCBkYXRhLT5zZXQub25lX2Vhc3kpOworCisgICAgICAvKiBOb3cgd2UgZmFsbC10aHJvdWdoIGFuZCBkbyB0aGUgdGltZXItYmFzZWQgc3R1ZmYsIHNpbmNlIHdlIGRvbid0IHdhbnQKKyAgICAgICAgIHRvIGZvcmNlIHRoZSB1c2VyIHRvIGhhdmUgdG8gZGVhbCB3aXRoIHRpbWVvdXRzIGFzIGxvbmcgYXMgYXQgbGVhc3QKKyAgICAgICAgIG9uZSBjb25uZWN0aW9uIGluIGZhY3QgaGFzIHRyYWZmaWMuICovCisKKyAgICAgIGRhdGEgPSBOVUxMOyAvKiBzZXQgZGF0YSB0byBOVUxMIGFnYWluIHRvIGF2b2lkIGNhbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICBtdWx0aV9ydW5zaW5nbGUoKSBpbiBjYXNlIHRoZXJlJ3Mgbm8gbmVlZCB0byAqLworICAgIH0KKyAgfQorCisgIG5vdy50dl91c2VjICs9IDQwMDAwOyAvKiBjb21wZW5zYXRlIGZvciBiYWQgcHJlY2lzaW9uIHRpbWVycyB0aGF0IG1pZ2h0J3ZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQgdG9vIGVhcmx5ICovCisgIGlmKG5vdy50dl91c2VjID49IDEwMDAwMDApIHsKKyAgICBub3cudHZfc2VjKys7CisgICAgbm93LnR2X3VzZWMgLT0gMTAwMDAwMDsKKyAgfQorCisgIC8qCisgICAqIFRoZSBsb29wIGZvbGxvd2luZyBoZXJlIHdpbGwgZ28gb24gYXMgbG9uZyBhcyB0aGVyZSBhcmUgZXhwaXJlLXRpbWVzIGxlZnQKKyAgICogdG8gcHJvY2VzcyBpbiB0aGUgc3BsYXkgYW5kICdkYXRhJyB3aWxsIGJlIHJlLWFzc2lnbmVkIGZvciBldmVyeSBleHBpcmVkCisgICAqIGhhbmRsZSB3ZSBkZWFsIHdpdGguCisgICAqLworICBkbyB7CisgICAgLyogdGhlIGZpcnN0IGxvb3AgbGFwICdkYXRhJyBjYW4gYmUgTlVMTCAqLworICAgIGlmKGRhdGEpIHsKKyAgICAgIGRvCisgICAgICAgIHJlc3VsdCA9IG11bHRpX3J1bnNpbmdsZShtdWx0aSwgbm93LCBkYXRhLT5zZXQub25lX2Vhc3kpOworICAgICAgd2hpbGUoQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNID09IHJlc3VsdCk7CisKKyAgICAgIGlmKENVUkxNX09LID49IHJlc3VsdCkKKyAgICAgICAgLyogZ2V0IHRoZSBzb2NrZXQocykgYW5kIGNoZWNrIGlmIHRoZSBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlCisgICAgICAgICAgIGxhc3QgKi8KKyAgICAgICAgc2luZ2xlc29ja2V0KG11bHRpLCBkYXRhLT5zZXQub25lX2Vhc3kpOworICAgIH0KKworICAgIC8qIENoZWNrIGlmIHRoZXJlJ3Mgb25lIChtb3JlKSBleHBpcmVkIHRpbWVyIHRvIGRlYWwgd2l0aCEgVGhpcyBmdW5jdGlvbgorICAgICAgIGV4dHJhY3RzIGEgbWF0Y2hpbmcgbm9kZSBpZiB0aGVyZSBpcyBvbmUgKi8KKworICAgIG11bHRpLT50aW1ldHJlZSA9IEN1cmxfc3BsYXlnZXRiZXN0KG5vdywgbXVsdGktPnRpbWV0cmVlLCAmdCk7CisgICAgaWYodCkgeworICAgICAgZGF0YSA9IHQtPnBheWxvYWQ7IC8qIGFzc2lnbiB0aGlzIGZvciBuZXh0IGxvb3AgKi8KKyAgICAgICh2b2lkKWFkZF9uZXh0X3RpbWVvdXQobm93LCBtdWx0aSwgdC0+cGF5bG9hZCk7CisgICAgfQorCisgIH0gd2hpbGUodCk7CisKKyAgKnJ1bm5pbmdfaGFuZGxlcyA9IG11bHRpLT5udW1fYWxpdmU7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKyN1bmRlZiBjdXJsX211bHRpX3NldG9wdAorQ1VSTE1jb2RlIGN1cmxfbXVsdGlfc2V0b3B0KENVUkxNICptdWx0aV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE1vcHRpb24gb3B0aW9uLCAuLi4pCit7CisgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aT0oc3RydWN0IEN1cmxfbXVsdGkgKiltdWx0aV9oYW5kbGU7CisgIENVUkxNY29kZSByZXMgPSBDVVJMTV9PSzsKKyAgdmFfbGlzdCBwYXJhbTsKKworICBpZighR09PRF9NVUxUSV9IQU5ETEUobXVsdGkpKQorICAgIHJldHVybiBDVVJMTV9CQURfSEFORExFOworCisgIHZhX3N0YXJ0KHBhcmFtLCBvcHRpb24pOworCisgIHN3aXRjaChvcHRpb24pIHsKKyAgY2FzZSBDVVJMTU9QVF9TT0NLRVRGVU5DVElPTjoKKyAgICBtdWx0aS0+c29ja2V0X2NiID0gdmFfYXJnKHBhcmFtLCBjdXJsX3NvY2tldF9jYWxsYmFjayk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE1PUFRfU09DS0VUREFUQToKKyAgICBtdWx0aS0+c29ja2V0X3VzZXJwID0gdmFfYXJnKHBhcmFtLCB2b2lkICopOworICAgIGJyZWFrOworICBjYXNlIENVUkxNT1BUX1BJUEVMSU5JTkc6CisgICAgbXVsdGktPnBpcGVsaW5pbmdfZW5hYmxlZCA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpID8gVFJVRSA6IEZBTFNFOworICAgIGJyZWFrOworICBjYXNlIENVUkxNT1BUX1RJTUVSRlVOQ1RJT046CisgICAgbXVsdGktPnRpbWVyX2NiID0gdmFfYXJnKHBhcmFtLCBjdXJsX211bHRpX3RpbWVyX2NhbGxiYWNrKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMTU9QVF9USU1FUkRBVEE6CisgICAgbXVsdGktPnRpbWVyX3VzZXJwID0gdmFfYXJnKHBhcmFtLCB2b2lkICopOworICAgIGJyZWFrOworICBjYXNlIENVUkxNT1BUX01BWENPTk5FQ1RTOgorICAgIG11bHRpLT5tYXhjb25uZWN0cyA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgcmVzID0gQ1VSTE1fVU5LTk9XTl9PUFRJT047CisgICAgYnJlYWs7CisgIH0KKyAgdmFfZW5kKHBhcmFtKTsKKyAgcmV0dXJuIHJlczsKK30KKworLyogd2UgZGVmaW5lIGN1cmxfbXVsdGlfc29ja2V0KCkgaW4gdGhlIHB1YmxpYyBtdWx0aS5oIGhlYWRlciAqLworI3VuZGVmIGN1cmxfbXVsdGlfc29ja2V0CisKK0NVUkxNY29kZSBjdXJsX211bHRpX3NvY2tldChDVVJMTSAqbXVsdGlfaGFuZGxlLCBjdXJsX3NvY2tldF90IHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpydW5uaW5nX2hhbmRsZXMpCit7CisgIENVUkxNY29kZSByZXN1bHQgPSBtdWx0aV9zb2NrZXQoKHN0cnVjdCBDdXJsX211bHRpICopbXVsdGlfaGFuZGxlLCBGQUxTRSwgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBydW5uaW5nX2hhbmRsZXMpOworICBpZihDVVJMTV9PSyA+PSByZXN1bHQpCisgICAgdXBkYXRlX3RpbWVyKChzdHJ1Y3QgQ3VybF9tdWx0aSAqKW11bHRpX2hhbmRsZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK0NVUkxNY29kZSBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24oQ1VSTE0gKm11bHRpX2hhbmRsZSwgY3VybF9zb2NrZXRfdCBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXZfYml0bWFzaywgaW50ICpydW5uaW5nX2hhbmRsZXMpCit7CisgIENVUkxNY29kZSByZXN1bHQgPSBtdWx0aV9zb2NrZXQoKHN0cnVjdCBDdXJsX211bHRpICopbXVsdGlfaGFuZGxlLCBGQUxTRSwgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldl9iaXRtYXNrLCBydW5uaW5nX2hhbmRsZXMpOworICBpZihDVVJMTV9PSyA+PSByZXN1bHQpCisgICAgdXBkYXRlX3RpbWVyKChzdHJ1Y3QgQ3VybF9tdWx0aSAqKW11bHRpX2hhbmRsZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK0NVUkxNY29kZSBjdXJsX211bHRpX3NvY2tldF9hbGwoQ1VSTE0gKm11bHRpX2hhbmRsZSwgaW50ICpydW5uaW5nX2hhbmRsZXMpCisKK3sKKyAgQ1VSTE1jb2RlIHJlc3VsdCA9IG11bHRpX3NvY2tldCgoc3RydWN0IEN1cmxfbXVsdGkgKiltdWx0aV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwgQ1VSTF9TT0NLRVRfQkFELCAwLCBydW5uaW5nX2hhbmRsZXMpOworICBpZihDVVJMTV9PSyA+PSByZXN1bHQpCisgICAgdXBkYXRlX3RpbWVyKChzdHJ1Y3QgQ3VybF9tdWx0aSAqKW11bHRpX2hhbmRsZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMTWNvZGUgbXVsdGlfdGltZW91dChzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqdGltZW91dF9tcykKK3sKKyAgc3RhdGljIHN0cnVjdCB0aW1ldmFsIHR2X3plcm8gPSB7MCwwfTsKKworICBpZihtdWx0aS0+dGltZXRyZWUpIHsKKyAgICAvKiB3ZSBoYXZlIGEgdHJlZSBvZiBleHBpcmUgdGltZXMgKi8KKyAgICBzdHJ1Y3QgdGltZXZhbCBub3cgPSBDdXJsX3R2bm93KCk7CisKKyAgICAvKiBzcGxheSB0aGUgbG93ZXN0IHRvIHRoZSBib3R0b20gKi8KKyAgICBtdWx0aS0+dGltZXRyZWUgPSBDdXJsX3NwbGF5KHR2X3plcm8sIG11bHRpLT50aW1ldHJlZSk7CisKKyAgICBpZihDdXJsX3NwbGF5Y29tcGFyZWtleXMobXVsdGktPnRpbWV0cmVlLT5rZXksIG5vdykgPiAwKSB7CisgICAgICAvKiBzb21lIHRpbWUgbGVmdCBiZWZvcmUgZXhwaXJhdGlvbiAqLworICAgICAgKnRpbWVvdXRfbXMgPSBjdXJseF90dmRpZmYobXVsdGktPnRpbWV0cmVlLT5rZXksIG5vdyk7CisgICAgICBpZighKnRpbWVvdXRfbXMpCisgICAgICAgIC8qCisgICAgICAgICAqIFNpbmNlIHdlIG9ubHkgcHJvdmlkZSBtaWxsaXNlY29uZCByZXNvbHV0aW9uIG9uIHRoZSByZXR1cm5lZCB2YWx1ZQorICAgICAgICAgKiBhbmQgdGhlIGRpZmYgbWlnaHQgYmUgbGVzcyB0aGFuIG9uZSBtaWxsaXNlY29uZCBoZXJlLCB3ZSBkb24ndAorICAgICAgICAgKiByZXR1cm4gemVybyBhcyB0aGF0IG1heSBjYXVzZSBzaG9ydCBidXJzdHMgb2YgYnVzeWxvb3BzIG9uIGZhc3QKKyAgICAgICAgICogcHJvY2Vzc29ycyB3aGlsZSB0aGUgZGlmZiBpcyBzdGlsbCBwcmVzZW50IGJ1dCBsZXNzIHRoYW4gb25lCisgICAgICAgICAqIG1pbGxpc2Vjb25kISBpbnN0ZWFkIHdlIHJldHVybiAxIHVudGlsIHRoZSB0aW1lIGlzIHJpcGUuCisgICAgICAgICAqLworICAgICAgICAqdGltZW91dF9tcz0xOworICAgIH0KKyAgICBlbHNlCisgICAgICAvKiAwIG1lYW5zIGltbWVkaWF0ZWx5ICovCisgICAgICAqdGltZW91dF9tcyA9IDA7CisgIH0KKyAgZWxzZQorICAgICp0aW1lb3V0X21zID0gLTE7CisKKyAgcmV0dXJuIENVUkxNX09LOworfQorCitDVVJMTWNvZGUgY3VybF9tdWx0aV90aW1lb3V0KENVUkxNICptdWx0aV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKnRpbWVvdXRfbXMpCit7CisgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aT0oc3RydWN0IEN1cmxfbXVsdGkgKiltdWx0aV9oYW5kbGU7CisKKyAgLyogRmlyc3QsIG1ha2Ugc29tZSBiYXNpYyBjaGVja3MgdGhhdCB0aGUgQ1VSTE0gaGFuZGxlIGlzIGEgZ29vZCBoYW5kbGUgKi8KKyAgaWYoIUdPT0RfTVVMVElfSEFORExFKG11bHRpKSkKKyAgICByZXR1cm4gQ1VSTE1fQkFEX0hBTkRMRTsKKworICByZXR1cm4gbXVsdGlfdGltZW91dChtdWx0aSwgdGltZW91dF9tcyk7Cit9CisKKy8qCisgKiBUZWxsIHRoZSBhcHBsaWNhdGlvbiBpdCBzaG91bGQgdXBkYXRlIGl0cyB0aW1lcnMsIGlmIGl0IHN1YnNjcmliZXMgdG8gdGhlCisgKiB1cGRhdGUgdGltZXIgY2FsbGJhY2suCisgKi8KK3N0YXRpYyBpbnQgdXBkYXRlX3RpbWVyKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSkKK3sKKyAgbG9uZyB0aW1lb3V0X21zOworCisgIGlmKCFtdWx0aS0+dGltZXJfY2IpCisgICAgcmV0dXJuIDA7CisgIGlmKG11bHRpX3RpbWVvdXQobXVsdGksICZ0aW1lb3V0X21zKSkgeworICAgIHJldHVybiAtMTsKKyAgfQorICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGltZXZhbCBub25lPXswLDB9OworICAgIGlmKEN1cmxfc3BsYXljb21wYXJla2V5cyhub25lLCBtdWx0aS0+dGltZXJfbGFzdGNhbGwpKSB7CisgICAgICBtdWx0aS0+dGltZXJfbGFzdGNhbGwgPSBub25lOworICAgICAgLyogdGhlcmUncyBubyB0aW1lb3V0IG5vdyBidXQgdGhlcmUgd2FzIG9uZSBwcmV2aW91c2x5LCB0ZWxsIHRoZSBhcHAgdG8KKyAgICAgICAgIGRpc2FibGUgaXQgKi8KKyAgICAgIHJldHVybiBtdWx0aS0+dGltZXJfY2IoKENVUkxNKiltdWx0aSwgLTEsIG11bHRpLT50aW1lcl91c2VycCk7CisgICAgfQorICAgIHJldHVybiAwOworICB9CisKKyAgLyogV2hlbiBtdWx0aV90aW1lb3V0KCkgaXMgZG9uZSwgbXVsdGktPnRpbWV0cmVlIHBvaW50cyB0byB0aGUgbm9kZSB3aXRoIHRoZQorICAgKiB0aW1lb3V0IHdlIGdvdCB0aGUgKHJlbGF0aXZlKSB0aW1lLW91dCB0aW1lIGZvci4gV2UgY2FuIHRodXMgZWFzaWx5IGNoZWNrCisgICAqIGlmIHRoaXMgaXMgdGhlIHNhbWUgKGZpeGVkKSB0aW1lIGFzIHdlIGdvdCBpbiBhIHByZXZpb3VzIGNhbGwgYW5kIHRoZW4KKyAgICogYXZvaWQgY2FsbGluZyB0aGUgY2FsbGJhY2sgYWdhaW4uICovCisgIGlmKEN1cmxfc3BsYXljb21wYXJla2V5cyhtdWx0aS0+dGltZXRyZWUtPmtleSwgbXVsdGktPnRpbWVyX2xhc3RjYWxsKSA9PSAwKQorICAgIHJldHVybiAwOworCisgIG11bHRpLT50aW1lcl9sYXN0Y2FsbCA9IG11bHRpLT50aW1ldHJlZS0+a2V5OworCisgIHJldHVybiBtdWx0aS0+dGltZXJfY2IoKENVUkxNKiltdWx0aSwgdGltZW91dF9tcywgbXVsdGktPnRpbWVyX3VzZXJwKTsKK30KKworc3RhdGljIENVUkxjb2RlIGFkZEhhbmRsZVRvU2VuZE9yUGVuZFBpcGVsaW5lKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzaXplX3QgcGlwZUxlbiA9IGNvbm4tPnNlbmRfcGlwZS0+c2l6ZSArIGNvbm4tPnJlY3ZfcGlwZS0+c2l6ZTsKKyAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqc2VuZGhlYWQgPSBjb25uLT5zZW5kX3BpcGUtPmhlYWQ7CisgIHN0cnVjdCBjdXJsX2xsaXN0ICpwaXBlbGluZTsKKyAgQ1VSTGNvZGUgcmM7CisKKyAgaWYoIUN1cmxfaXNQaXBlbGluaW5nRW5hYmxlZChoYW5kbGUpIHx8CisgICAgIHBpcGVMZW4gPT0gMCkKKyAgICBwaXBlbGluZSA9IGNvbm4tPnNlbmRfcGlwZTsKKyAgZWxzZSB7CisgICAgaWYoY29ubi0+c2VydmVyX3N1cHBvcnRzX3BpcGVsaW5pbmcgJiYKKyAgICAgICBwaXBlTGVuIDwgTUFYX1BJUEVMSU5FX0xFTkdUSCkKKyAgICAgIHBpcGVsaW5lID0gY29ubi0+c2VuZF9waXBlOworICAgIGVsc2UKKyAgICAgIHBpcGVsaW5lID0gY29ubi0+cGVuZF9waXBlOworICB9CisKKyAgcmMgPSBDdXJsX2FkZEhhbmRsZVRvUGlwZWxpbmUoaGFuZGxlLCBwaXBlbGluZSk7CisKKyAgaWYocGlwZWxpbmUgPT0gY29ubi0+c2VuZF9waXBlICYmIHNlbmRoZWFkICE9IGNvbm4tPnNlbmRfcGlwZS0+aGVhZCkgeworICAgIC8qIHRoaXMgaXMgYSBuZXcgb25lIGFzIGhlYWQsIGV4cGlyZSBpdCAqLworICAgIGNvbm4tPndyaXRlY2hhbm5lbF9pbnVzZSA9IEZBTFNFOyAvKiBub3QgaW4gdXNlIHlldCAqLworI2lmZGVmIERFQlVHQlVJTEQKKyAgICBpbmZvZihjb25uLT5kYXRhLCAiJXAgaXMgYXQgc2VuZCBwaXBlIGhlYWQhXG4iLAorICAgICAgICAgIGNvbm4tPnNlbmRfcGlwZS0+aGVhZC0+cHRyKTsKKyNlbmRpZgorICAgIEN1cmxfZXhwaXJlKGNvbm4tPnNlbmRfcGlwZS0+aGVhZC0+cHRyLCAxKTsKKyAgfQorCisgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCBjaGVja1BlbmRQaXBlbGluZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGludCByZXN1bHQgPSAwOworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpzZW5kaGVhZCA9IGNvbm4tPnNlbmRfcGlwZS0+aGVhZDsKKworICBzaXplX3QgcGlwZUxlbiA9IGNvbm4tPnNlbmRfcGlwZS0+c2l6ZSArIGNvbm4tPnJlY3ZfcGlwZS0+c2l6ZTsKKyAgaWYoY29ubi0+c2VydmVyX3N1cHBvcnRzX3BpcGVsaW5pbmcgfHwgcGlwZUxlbiA9PSAwKSB7CisgICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqY3VyciA9IGNvbm4tPnBlbmRfcGlwZS0+aGVhZDsKKyAgICBjb25zdCBzaXplX3QgbWF4UGlwZUxlbiA9CisgICAgICBjb25uLT5zZXJ2ZXJfc3VwcG9ydHNfcGlwZWxpbmluZyA/IE1BWF9QSVBFTElORV9MRU5HVEggOiAxOworCisgICAgd2hpbGUocGlwZUxlbiA8IG1heFBpcGVMZW4gJiYgY3VycikgeworICAgICAgQ3VybF9sbGlzdF9tb3ZlKGNvbm4tPnBlbmRfcGlwZSwgY3VyciwKKyAgICAgICAgICAgICAgICAgICAgICBjb25uLT5zZW5kX3BpcGUsIGNvbm4tPnNlbmRfcGlwZS0+dGFpbCk7CisgICAgICBDdXJsX3BncnNUaW1lKGN1cnItPnB0ciwgVElNRVJfUFJFVFJBTlNGRVIpOworICAgICAgKytyZXN1bHQ7IC8qIGNvdW50IGhvdyBtYW55IGhhbmRsZXMgd2UgbW92ZWQgKi8KKyAgICAgIGN1cnIgPSBjb25uLT5wZW5kX3BpcGUtPmhlYWQ7CisgICAgICArK3BpcGVMZW47CisgICAgfQorICB9CisKKyAgaWYocmVzdWx0KSB7CisgICAgY29ubi0+bm93ID0gQ3VybF90dm5vdygpOworICAgIC8qIHNvbWV0aGluZyBtb3ZlZCwgY2hlY2sgZm9yIGEgbmV3IHNlbmQgcGlwZWxpbmUgbGVhZGVyICovCisgICAgaWYoc2VuZGhlYWQgIT0gY29ubi0+c2VuZF9waXBlLT5oZWFkKSB7CisgICAgICAvKiB0aGlzIGlzIGEgbmV3IG9uZSBhcyBoZWFkLCBleHBpcmUgaXQgKi8KKyAgICAgIGNvbm4tPndyaXRlY2hhbm5lbF9pbnVzZSA9IEZBTFNFOyAvKiBub3QgaW4gdXNlIHlldCAqLworI2lmZGVmIERFQlVHQlVJTEQKKyAgICAgIGluZm9mKGNvbm4tPmRhdGEsICIlcCBpcyBhdCBzZW5kIHBpcGUgaGVhZCFcbiIsCisgICAgICAgICAgICBjb25uLT5zZW5kX3BpcGUtPmhlYWQtPnB0cik7CisjZW5kaWYKKyAgICAgIEN1cmxfZXhwaXJlKGNvbm4tPnNlbmRfcGlwZS0+aGVhZC0+cHRyLCAxKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBNb3ZlIHRoaXMgdHJhbnNmZXIgZnJvbSB0aGUgc2VuZGluZyBsaXN0IHRvIHRoZSByZWNlaXZpbmcgbGlzdC4KKworICAgUGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRoZSBuZXcgc2VuZGluZyBsaXN0ICJsZWFkZXIiIGFzIGl0IG5lZWRzIHRvIGdldAorICAgY2hlY2tlZCB0byB1cGRhdGUgd2hhdCBzb2NrZXRzIGl0IGFjdHMgb24uCisKKyovCitzdGF0aWMgdm9pZCBtb3ZlSGFuZGxlRnJvbVNlbmRUb1JlY3ZQaXBlbGluZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpjdXJyOworCisgIGN1cnIgPSBjb25uLT5zZW5kX3BpcGUtPmhlYWQ7CisgIHdoaWxlKGN1cnIpIHsKKyAgICBpZihjdXJyLT5wdHIgPT0gaGFuZGxlKSB7CisgICAgICBDdXJsX2xsaXN0X21vdmUoY29ubi0+c2VuZF9waXBlLCBjdXJyLAorICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnJlY3ZfcGlwZSwgY29ubi0+cmVjdl9waXBlLT50YWlsKTsKKworICAgICAgaWYoY29ubi0+c2VuZF9waXBlLT5oZWFkKSB7CisgICAgICAgIC8qIFNpbmNlIHRoZXJlJ3MgYSBuZXcgZWFzeSBoYW5kbGUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzZW5kIHBpcGVsaW5lLAorICAgICAgICAgICBzZXQgaXRzIHRpbWVvdXQgdmFsdWUgdG8gMW1zIHRvIG1ha2UgaXQgdHJpZ2dlciBpbnN0YW50bHkgKi8KKyAgICAgICAgY29ubi0+d3JpdGVjaGFubmVsX2ludXNlID0gRkFMU0U7IC8qIG5vdCB1c2VkIG5vdyAqLworI2lmZGVmIERFQlVHQlVJTEQKKyAgICAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIiVwIGlzIGF0IHNlbmQgcGlwZSBoZWFkIEIhXG4iLAorICAgICAgICAgICAgICBjb25uLT5zZW5kX3BpcGUtPmhlYWQtPnB0cik7CisjZW5kaWYKKyAgICAgICAgQ3VybF9leHBpcmUoY29ubi0+c2VuZF9waXBlLT5oZWFkLT5wdHIsIDEpOworICAgICAgfQorCisgICAgICAvKiBUaGUgcmVjZWl2ZXIncyBsaXN0IGlzIG5vdCByZWFsbHkgaW50ZXJlc3RpbmcgaGVyZSBzaW5jZSBlaXRoZXIgdGhpcworICAgICAgICAgaGFuZGxlIGlzIG5vdyBmaXJzdCBpbiB0aGUgbGlzdCBhbmQgd2UnbGwgZGVhbCB3aXRoIGl0IHNvb24sIG9yCisgICAgICAgICBhbm90aGVyIGhhbmRsZSBpcyBhbHJlYWR5IGZpcnN0IGFuZCB0aHVzIGlzIGFscmVhZHkgdGFrZW4gY2FyZSBvZiAqLworCisgICAgICBicmVhazsgLyogd2UncmUgZG9uZSEgKi8KKyAgICB9CisgICAgY3VyciA9IGN1cnItPm5leHQ7CisgIH0KK30KKworc3RhdGljIHZvaWQgbW92ZUhhbmRsZUZyb21SZWN2VG9Eb25lUGlwZWxpbmUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpjdXJyOworCisgIGN1cnIgPSBjb25uLT5yZWN2X3BpcGUtPmhlYWQ7CisgIHdoaWxlKGN1cnIpIHsKKyAgICBpZihjdXJyLT5wdHIgPT0gaGFuZGxlKSB7CisgICAgICBDdXJsX2xsaXN0X21vdmUoY29ubi0+cmVjdl9waXBlLCBjdXJyLAorICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmRvbmVfcGlwZSwgY29ubi0+ZG9uZV9waXBlLT50YWlsKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjdXJyID0gY3Vyci0+bmV4dDsKKyAgfQorfQorc3RhdGljIGJvb2wgaXNIYW5kbGVBdEhlYWQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX2xsaXN0ICpwaXBlbGluZSkKK3sKKyAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqY3VyciA9IHBpcGVsaW5lLT5oZWFkOworICBpZihjdXJyKQorICAgIHJldHVybiAoY3Vyci0+cHRyID09IGhhbmRsZSkgPyBUUlVFIDogRkFMU0U7CisKKyAgcmV0dXJuIEZBTFNFOworfQorCisvKgorICogbXVsdGlfZnJlZXRpbWVvdXQoKQorICoKKyAqIENhbGxiYWNrIHVzZWQgYnkgdGhlIGxsaXN0IHN5c3RlbSB3aGVuIGEgc2luZ2xlIHRpbWVvdXQgbGlzdCBlbnRyeSBpcworICogZGVzdHJveWVkLgorICovCitzdGF0aWMgdm9pZCBtdWx0aV9mcmVldGltZW91dCh2b2lkICp1c2VyLCB2b2lkICplbnRyeXB0cikKK3sKKyAgKHZvaWQpdXNlcjsKKworICAvKiB0aGUgZW50cnkgd2FzIHBsYWluIG1hbGxvYygpJ2VkICovCisgIGZyZWUoZW50cnlwdHIpOworfQorCisvKgorICogbXVsdGlfYWRkdGltZW91dCgpCisgKgorICogQWRkIGEgdGltZXN0YW1wIHRvIHRoZSBsaXN0IG9mIHRpbWVvdXRzLiBLZWVwIHRoZSBsaXN0IHNvcnRlZCBzbyB0aGF0IGhlYWQKKyAqIG9mIGxpc3QgaXMgYWx3YXlzIHRoZSB0aW1lb3V0IG5lYXJlc3QgaW4gdGltZS4KKyAqCisgKi8KK3N0YXRpYyBDVVJMTWNvZGUKK211bHRpX2FkZHRpbWVvdXQoc3RydWN0IGN1cmxfbGxpc3QgKnRpbWVvdXRsaXN0LAorICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqc3RhbXApCit7CisgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmU7CisgIHN0cnVjdCB0aW1ldmFsICp0aW1lZHVwOworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpwcmV2ID0gTlVMTDsKKworICB0aW1lZHVwID0gbWFsbG9jKHNpemVvZigqdGltZWR1cCkpOworICBpZighdGltZWR1cCkKKyAgICByZXR1cm4gQ1VSTE1fT1VUX09GX01FTU9SWTsKKworICAvKiBjb3B5IHRoZSB0aW1lc3RhbXAgKi8KKyAgbWVtY3B5KHRpbWVkdXAsIHN0YW1wLCBzaXplb2YoKnRpbWVkdXApKTsKKworICBpZihDdXJsX2xsaXN0X2NvdW50KHRpbWVvdXRsaXN0KSkgeworICAgIC8qIGZpbmQgdGhlIGNvcnJlY3Qgc3BvdCBpbiB0aGUgbGlzdCAqLworICAgIGZvcihlID0gdGltZW91dGxpc3QtPmhlYWQ7IGU7IGUgPSBlLT5uZXh0KSB7CisgICAgICBzdHJ1Y3QgdGltZXZhbCAqY2hlY2t0aW1lID0gZS0+cHRyOworICAgICAgbG9uZyBkaWZmID0gY3VybHhfdHZkaWZmKCpjaGVja3RpbWUsICp0aW1lZHVwKTsKKyAgICAgIGlmKGRpZmYgPiAwKQorICAgICAgICBicmVhazsKKyAgICAgIHByZXYgPSBlOworICAgIH0KKworICB9CisgIC8qIGVsc2UKKyAgICAgdGhpcyBpcyB0aGUgZmlyc3QgdGltZW91dCBvbiB0aGUgbGlzdCAqLworCisgIGlmKCFDdXJsX2xsaXN0X2luc2VydF9uZXh0KHRpbWVvdXRsaXN0LCBwcmV2LCB0aW1lZHVwKSkgeworICAgIGZyZWUodGltZWR1cCk7CisgICAgcmV0dXJuIENVUkxNX09VVF9PRl9NRU1PUlk7CisgIH0KKworICByZXR1cm4gQ1VSTE1fT0s7Cit9CisKKy8qCisgKiBDdXJsX2V4cGlyZSgpCisgKgorICogZ2l2ZW4gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gbm93IHRvIHVzZSB0byBzZXQgdGhlICdhY3QgYmVmb3JlCisgKiB0aGlzJy10aW1lIGZvciB0aGUgdHJhbnNmZXIsIHRvIGJlIGV4dHJhY3RlZCBieSBjdXJsX211bHRpX3RpbWVvdXQoKQorICoKKyAqIE5vdGUgdGhhdCB0aGUgdGltZW91dCB3aWxsIGJlIGFkZGVkIHRvIGEgcXVldWUgb2YgdGltZW91dHMgaWYgaXQgZGVmaW5lcyBhCisgKiBtb21lbnQgaW4gdGltZSB0aGF0IGlzIGxhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaGVhZCBvZiBxdWV1ZS4KKyAqCisgKiBQYXNzIHplcm8gdG8gY2xlYXIgYWxsIHRpbWVvdXQgdmFsdWVzIGZvciB0aGlzIGhhbmRsZS4KKyovCit2b2lkIEN1cmxfZXhwaXJlKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBsb25nIG1pbGxpKQoreworICBzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkgPSBkYXRhLT5tdWx0aTsKKyAgc3RydWN0IHRpbWV2YWwgKm5vd3AgPSAmZGF0YS0+c3RhdGUuZXhwaXJldGltZTsKKyAgaW50IHJjOworCisgIC8qIHRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgbXVsdGktaW50ZXJmYWNlIHVzaW5nIGxpYmN1cmwsIGFuZCBvbmx5CisgICAgIHdoaWxlIHRoZXJlIGlzIHN0aWxsIGEgbXVsdGkgaW50ZXJmYWNlIHN0cnVjdCByZW1haW5pbmchICovCisgIGlmKCFtdWx0aSkKKyAgICByZXR1cm47CisKKyAgaWYoIW1pbGxpKSB7CisgICAgLyogTm8gdGltZW91dCwgY2xlYXIgdGhlIHRpbWUgZGF0YS4gKi8KKyAgICBpZihub3dwLT50dl9zZWMgfHwgbm93cC0+dHZfdXNlYykgeworICAgICAgLyogU2luY2UgdGhpcyBpcyBhbiBjbGVhcmVkIHRpbWUsIHdlIG11c3QgcmVtb3ZlIHRoZSBwcmV2aW91cyBlbnRyeSBmcm9tCisgICAgICAgICB0aGUgc3BsYXkgdHJlZSAqLworICAgICAgc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QgPSBkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdDsKKworICAgICAgcmMgPSBDdXJsX3NwbGF5cmVtb3ZlYnlhZGRyKG11bHRpLT50aW1ldHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+c3RhdGUudGltZW5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm11bHRpLT50aW1ldHJlZSk7CisgICAgICBpZihyYykKKyAgICAgICAgaW5mb2YoZGF0YSwgIkludGVybmFsIGVycm9yIGNsZWFyaW5nIHNwbGF5IG5vZGUgPSAlZFxuIiwgcmMpOworCisgICAgICAvKiBmbHVzaCB0aGUgdGltZW91dCBsaXN0IHRvbyAqLworICAgICAgd2hpbGUobGlzdC0+c2l6ZSA+IDApCisgICAgICAgIEN1cmxfbGxpc3RfcmVtb3ZlKGxpc3QsIGxpc3QtPnRhaWwsIE5VTEwpOworCisjaWZkZWYgREVCVUdCVUlMRAorICAgICAgaW5mb2YoZGF0YSwgIkV4cGlyZSBjbGVhcmVkXG4iKTsKKyNlbmRpZgorICAgICAgbm93cC0+dHZfc2VjID0gMDsKKyAgICAgIG5vd3AtPnR2X3VzZWMgPSAwOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCBzZXQ7CisKKyAgICBzZXQgPSBDdXJsX3R2bm93KCk7CisgICAgc2V0LnR2X3NlYyArPSBtaWxsaS8xMDAwOworICAgIHNldC50dl91c2VjICs9IChtaWxsaSUxMDAwKSoxMDAwOworCisgICAgaWYoc2V0LnR2X3VzZWMgPj0gMTAwMDAwMCkgeworICAgICAgc2V0LnR2X3NlYysrOworICAgICAgc2V0LnR2X3VzZWMgLT0gMTAwMDAwMDsKKyAgICB9CisKKyAgICBpZihub3dwLT50dl9zZWMgfHwgbm93cC0+dHZfdXNlYykgeworICAgICAgLyogVGhpcyBtZWFucyB0aGF0IHRoZSBzdHJ1Y3QgaXMgYWRkZWQgYXMgYSBub2RlIGluIHRoZSBzcGxheSB0cmVlLgorICAgICAgICAgQ29tcGFyZSBpZiB0aGUgbmV3IHRpbWUgaXMgZWFybGllciwgYW5kIG9ubHkgcmVtb3ZlLW9sZC9hZGQtbmV3IGlmIGl0CisgICAgICAgICBpcy4gKi8KKyAgICAgIGxvbmcgZGlmZiA9IGN1cmx4X3R2ZGlmZihzZXQsICpub3dwKTsKKyAgICAgIGlmKGRpZmYgPiAwKSB7CisgICAgICAgIC8qIHRoZSBuZXcgZXhwaXJlIHRpbWUgd2FzIGxhdGVyIHNvIGp1c3QgYWRkIGl0IHRvIHRoZSBxdWV1ZQorICAgICAgICAgICBhbmQgZ2V0IG91dCAqLworICAgICAgICBtdWx0aV9hZGR0aW1lb3V0KGRhdGEtPnN0YXRlLnRpbWVvdXRsaXN0LCAmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICAvKiB0aGUgbmV3IHRpbWUgaXMgbmV3ZXIgdGhhbiB0aGUgcHJlc2VudGx5IHNldCBvbmUsIHNvIGFkZCB0aGUgY3VycmVudAorICAgICAgICAgdG8gdGhlIHF1ZXVlIGFuZCB1cGRhdGUgdGhlIGhlYWQgKi8KKyAgICAgIG11bHRpX2FkZHRpbWVvdXQoZGF0YS0+c3RhdGUudGltZW91dGxpc3QsIG5vd3ApOworCisgICAgICAvKiBTaW5jZSB0aGlzIGlzIGFuIHVwZGF0ZWQgdGltZSwgd2UgbXVzdCByZW1vdmUgdGhlIHByZXZpb3VzIGVudHJ5IGZyb20KKyAgICAgICAgIHRoZSBzcGxheSB0cmVlIGZpcnN0IGFuZCB0aGVuIHJlLWFkZCB0aGUgbmV3IHZhbHVlICovCisgICAgICByYyA9IEN1cmxfc3BsYXlyZW1vdmVieWFkZHIobXVsdGktPnRpbWV0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5zdGF0ZS50aW1lbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXVsdGktPnRpbWV0cmVlKTsKKyAgICAgIGlmKHJjKQorICAgICAgICBpbmZvZihkYXRhLCAiSW50ZXJuYWwgZXJyb3IgcmVtb3Zpbmcgc3BsYXkgbm9kZSA9ICVkXG4iLCByYyk7CisgICAgfQorCisgICAgKm5vd3AgPSBzZXQ7CisgICAgZGF0YS0+c3RhdGUudGltZW5vZGUucGF5bG9hZCA9IGRhdGE7CisgICAgbXVsdGktPnRpbWV0cmVlID0gQ3VybF9zcGxheWluc2VydCgqbm93cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpLT50aW1ldHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5zdGF0ZS50aW1lbm9kZSk7CisgIH0KKyNpZiAwCisgIEN1cmxfc3BsYXlwcmludChtdWx0aS0+dGltZXRyZWUsIDAsIFRSVUUpOworI2VuZGlmCit9CisKK0NVUkxNY29kZSBjdXJsX211bHRpX2Fzc2lnbihDVVJMTSAqbXVsdGlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgcywgdm9pZCAqaGFzaHApCit7CisgIHN0cnVjdCBDdXJsX3NoX2VudHJ5ICp0aGVyZSA9IE5VTEw7CisgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aSA9IChzdHJ1Y3QgQ3VybF9tdWx0aSAqKW11bHRpX2hhbmRsZTsKKworICBpZihzICE9IENVUkxfU09DS0VUX0JBRCkKKyAgICB0aGVyZSA9IEN1cmxfaGFzaF9waWNrKG11bHRpLT5zb2NraGFzaCwgKGNoYXIgKikmcywgc2l6ZW9mKGN1cmxfc29ja2V0X3QpKTsKKworICBpZighdGhlcmUpCisgICAgcmV0dXJuIENVUkxNX0JBRF9TT0NLRVQ7CisKKyAgdGhlcmUtPnNvY2tldHAgPSBoYXNocDsKKworICByZXR1cm4gQ1VSTE1fT0s7Cit9CisKK3N0YXRpYyB2b2lkIG11bHRpX2Nvbm5jX3JlbW92ZV9oYW5kbGUoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKK3sKKyAgLyogYSBjb25uZWN0aW9uIGluIHRoZSBjb25uZWN0aW9uIGNhY2hlIHBvaW50aW5nIHRvIHRoZSBnaXZlbiAnZGF0YScgPyAqLworICBpbnQgaTsKKworICBmb3IoaT0wOyBpPCBtdWx0aS0+Y29ubmMtPm51bTsgaSsrKSB7CisgICAgc3RydWN0IGNvbm5lY3RkYXRhICogY29ubiA9IG11bHRpLT5jb25uYy0+Y29ubmVjdHNbaV07CisKKyAgICBpZihjb25uICYmIGNvbm4tPmRhdGEgPT0gZGF0YSkgeworICAgICAgLyogSWYgdGhpcyBlYXN5X2hhbmRsZSB3YXMgdGhlIGxhc3Qgb25lIGluIGNoYXJnZSBmb3Igb25lIG9yIG1vcmUKKyAgICAgICAgIGNvbm5lY3Rpb25zIGluIHRoZSBzaGFyZWQgY29ubmVjdGlvbiBjYWNoZSwgd2UgbWlnaHQgbmVlZCB0byBrZWVwCisgICAgICAgICB0aGlzIGhhbmRsZSBhcm91bmQgdW50aWwgZWl0aGVyIEEpIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCBhbmQKKyAgICAgICAgIGtpbGxlZCBwcm9wZXJseSwgb3IgQikgYW5vdGhlciBlYXN5X2hhbmRsZSB1c2VzIHRoZSBjb25uZWN0aW9uLgorCisgICAgICAgICBUaGUgcmVhc29uIHdoeSB3ZSBuZWVkIHRvIGhhdmUgYSBlYXN5X2hhbmRsZSBhc3NvY2lhdGVkIHdpdGggYSBsaXZlCisgICAgICAgICBjb25uZWN0aW9uIGlzIHNpbXBseSB0aGF0IHNvbWUgY29ubmVjdGlvbnMgd2lsbCBuZWVkIGEgaGFuZGxlIHRvIGdldAorICAgICAgICAgY2xvc2VkIGRvd24gcHJvcGVybHkuIEN1cnJlbnRseSwgdGhlIG9ubHkgY29ubmVjdGlvbnMgdGhhdCBuZWVkIHRvCisgICAgICAgICBrZWVwIGEgZWFzeV9oYW5kbGUgaGFuZGxlIGFyb3VuZCBhcmUgdXNpbmcgRlRQKFMpLiBTdWNoIGNvbm5lY3Rpb25zCisgICAgICAgICBoYXZlIHRoZSBQUk9UX0NMT1NFQUNUSU9OIGJpdCBzZXQuCisKKyAgICAgICAgIFRodXMsIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGFsbCBjb25uZWN0aW9ucyBpbiB0aGUgc2hhcmVkIGNhY2hlIHRoYXQKKyAgICAgICAgIHBvaW50cyB0byB0aGlzIGhhbmRsZSBhbmQgYXJlIHVzaW5nIFBST1RfQ0xPU0VBQ1RJT04uIElmIHRoZXJlJ3MgYW55LAorICAgICAgICAgd2UgbmVlZCB0byBhZGQgdGhpcyBoYW5kbGUgdG8gdGhlIGxpc3Qgb2YgImVhc3kgaGFuZGxlcyBrZXB0IGFyb3VuZAorICAgICAgICAgZm9yIG5pY2UgY29ubmVjdGlvbiBjbG9zdXJlcyIuCisgICAgICAqLworCisgICAgICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfQ0xPU0VBQ1RJT04pIHsKKyAgICAgICAgLyogdGhpcyBoYW5kbGUgaXMgc3RpbGwgYmVpbmcgdXNlZCBieSBhIHNoYXJlZCBjb25uZWN0aW9uIGFuZAorICAgICAgICAgICB0aHVzIHdlIGxlYXZlIGl0IGFyb3VuZCBmb3Igbm93ICovCisgICAgICAgIGlmKGFkZF9jbG9zdXJlKG11bHRpLCBkYXRhKSA9PSBDVVJMTV9PSykKKyAgICAgICAgICBkYXRhLT5zdGF0ZS5zaGFyZWRfY29ubiA9IG11bHRpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiBvdXQgb2YgbWVtb3J5IC0gc28gbXVjaCBmb3IgZ3JhY2VmdWwgc2h1dGRvd24gKi8KKyAgICAgICAgICBDdXJsX2Rpc2Nvbm5lY3QoY29ubiwgLyogZGVhZF9jb25uZWN0aW9uICovIEZBTFNFKTsKKyAgICAgICAgICBtdWx0aS0+Y29ubmMtPmNvbm5lY3RzW2ldID0gTlVMTDsKKyAgICAgICAgICBkYXRhLT5zdGF0ZS5zaGFyZWRfY29ubiA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBkaXNjb25lY3QgdGhlIGVhc3kgaGFuZGxlIGZyb20gdGhlIGNvbm5lY3Rpb24gc2luY2UgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICAgd2lsbCBub3cgcmVtYWluIGJ1dCB0aGlzIGVhc3kgaGFuZGxlIGlzIGdvaW5nICovCisgICAgICAgIGRhdGEtPnN0YXRlLnNoYXJlZF9jb25uID0gTlVMTDsKKyAgICAgICAgY29ubi0+ZGF0YSA9IE5VTEw7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKy8qIEFkZCB0aGUgZ2l2ZW4gZGF0YSBwb2ludGVyIHRvIHRoZSBsaXN0IG9mICdjbG9zdXJlIGhhbmRsZXMnIHRoYXQgYXJlIGtlcHQKKyAgIGFyb3VuZCBvbmx5IHRvIGJlIGFibGUgdG8gY2xvc2Ugc29tZSBjb25uZWN0aW9ucyBuaWNlbHkgLSBqdXN0IG1ha2Ugc3VyZQorICAgdGhhdCB0aGlzIGhhbmRsZSBpc24ndCBhbHJlYWR5IGFkZGVkLCBsaWtlIGZvciB0aGUgY2FzZXMgd2hlbiBhbiBlYXN5CisgICBoYW5kbGUgaXMgcmVtb3ZlZCwgYWRkZWQgYW5kIHJlbW92ZWQgYWdhaW4uLi4gKi8KK3N0YXRpYyBDVVJMTWNvZGUgYWRkX2Nsb3N1cmUoc3RydWN0IEN1cmxfbXVsdGkgKm11bHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKK3sKKyAgc3RydWN0IGNsb3N1cmUgKmNsID0gbXVsdGktPmNsb3N1cmU7CisgIHN0cnVjdCBjbG9zdXJlICpwID0gTlVMTDsKKyAgYm9vbCBhZGQgPSBUUlVFOworCisgIC8qIEJlZm9yZSBhZGRpbmcsIHNjYW4gdGhyb3VnaCBhbGwgdGhlIG90aGVyIGN1cnJlbnRseSBrZXB0IGhhbmRsZXMgYW5kIHNlZQorICAgICBpZiB0aGVyZSBhcmUgYW55IGNvbm5lY3Rpb25zIHN0aWxsIHJlZmVycmluZyB0byB0aGVtIGFuZCBraWxsIHRoZW0gaWYKKyAgICAgbm90LiAqLworICB3aGlsZShjbCkgeworICAgIHN0cnVjdCBjbG9zdXJlICpuOworICAgIGJvb2wgaW51c2UgPSBGQUxTRTsKKyAgICBpbnQgaTsKKworICAgIGZvcihpPTA7IGk8IG11bHRpLT5jb25uYy0+bnVtOyBpKyspIHsKKyAgICAgIGlmKG11bHRpLT5jb25uYy0+Y29ubmVjdHNbaV0gJiYKKyAgICAgICAgIChtdWx0aS0+Y29ubmMtPmNvbm5lY3RzW2ldLT5kYXRhID09IGNsLT5lYXN5X2hhbmRsZSkpIHsKKyAgICAgICAgaW51c2UgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBuID0gY2wtPm5leHQ7CisKKyAgICBpZighaW51c2UpIHsKKyAgICAgIC8qIGNsLT5lYXN5X2hhbmRsZSBpcyBub3cga2lsbGFibGUgKi8KKworICAgICAgLyogdW5tYXJrIGl0IGFzIG5vdCBoYXZpbmcgYSBjb25uZWN0aW9uIGFyb3VuZCB0aGF0IHVzZXMgaXQgYW55bW9yZSAqLworICAgICAgY2wtPmVhc3lfaGFuZGxlLT5zdGF0ZS5zaGFyZWRfY29ubj0gTlVMTDsKKworICAgICAgaWYoY2wtPmVhc3lfaGFuZGxlLT5zdGF0ZS5jbG9zZWQpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkRlbGF5ZWQga2lsbCBvZiBlYXN5IGhhbmRsZSAlcFxuIiwgY2wtPmVhc3lfaGFuZGxlKTsKKyAgICAgICAgLyogY2xvc2UgaGFuZGxlIG9ubHkgaWYgY3VybF9lYXN5X2NsZWFudXAoKSBhbHJlYWR5IGhhcyBiZWVuIGNhbGxlZAorICAgICAgICAgICBmb3IgdGhpcyBlYXN5IGhhbmRsZSAqLworICAgICAgICBDdXJsX2Nsb3NlKGNsLT5lYXN5X2hhbmRsZSk7CisgICAgICB9CisgICAgICBpZihwKQorICAgICAgICBwLT5uZXh0ID0gbjsKKyAgICAgIGVsc2UKKyAgICAgICAgbXVsdGktPmNsb3N1cmUgPSBuOworICAgICAgZnJlZShjbCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYoY2wtPmVhc3lfaGFuZGxlID09IGRhdGEpCisgICAgICAgIGFkZCA9IEZBTFNFOworCisgICAgICBwID0gY2w7CisgICAgfQorCisgICAgY2wgPSBuOworICB9CisKKyAgaWYoYWRkKSB7CisgICAgY2wgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjbG9zdXJlKSk7CisgICAgaWYoIWNsKQorICAgICAgcmV0dXJuIENVUkxNX09VVF9PRl9NRU1PUlk7CisKKyAgICBjbC0+ZWFzeV9oYW5kbGUgPSBkYXRhOworICAgIGNsLT5uZXh0ID0gbXVsdGktPmNsb3N1cmU7CisgICAgbXVsdGktPmNsb3N1cmUgPSBjbDsKKyAgfQorCisgIHJldHVybiBDVVJMTV9PSzsKK30KKworI2lmZGVmIERFQlVHQlVJTEQKK3ZvaWQgQ3VybF9tdWx0aV9kdW1wKGNvbnN0IHN0cnVjdCBDdXJsX211bHRpICptdWx0aV9oYW5kbGUpCit7CisgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aT0oc3RydWN0IEN1cmxfbXVsdGkgKiltdWx0aV9oYW5kbGU7CisgIHN0cnVjdCBDdXJsX29uZV9lYXN5ICplYXN5OworICBpbnQgaTsKKyAgZnByaW50ZihzdGRlcnIsICIqIE11bHRpIHN0YXR1czogJWQgaGFuZGxlcywgJWQgYWxpdmVcbiIsCisgICAgICAgICAgbXVsdGktPm51bV9lYXN5LCBtdWx0aS0+bnVtX2FsaXZlKTsKKyAgZm9yKGVhc3k9bXVsdGktPmVhc3kubmV4dDsgZWFzeSAhPSAmbXVsdGktPmVhc3k7IGVhc3kgPSBlYXN5LT5uZXh0KSB7CisgICAgaWYoZWFzeS0+c3RhdGUgPCBDVVJMTV9TVEFURV9DT01QTEVURUQpIHsKKyAgICAgIC8qIG9ubHkgZGlzcGxheSBoYW5kbGVzIHRoYXQgYXJlIG5vdCBjb21wbGV0ZWQgKi8KKyAgICAgIGZwcmludGYoc3RkZXJyLCAiaGFuZGxlICVwLCBzdGF0ZSAlcywgJWQgc29ja2V0c1xuIiwKKyAgICAgICAgICAgICAgKHZvaWQgKillYXN5LT5lYXN5X2hhbmRsZSwKKyAgICAgICAgICAgICAgc3RhdGVuYW1lW2Vhc3ktPnN0YXRlXSwgZWFzeS0+bnVtc29ja3MpOworICAgICAgZm9yKGk9MDsgaSA8IGVhc3ktPm51bXNvY2tzOyBpKyspIHsKKyAgICAgICAgY3VybF9zb2NrZXRfdCBzID0gZWFzeS0+c29ja2V0c1tpXTsKKyAgICAgICAgc3RydWN0IEN1cmxfc2hfZW50cnkgKmVudHJ5ID0KKyAgICAgICAgICBDdXJsX2hhc2hfcGljayhtdWx0aS0+c29ja2hhc2gsIChjaGFyICopJnMsIHNpemVvZihzKSk7CisKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlZCAiLCAoaW50KXMpOworICAgICAgICBpZighZW50cnkpIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIklOVEVSTkFMIENPTkZVU0lPTlxuIik7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJbJXMgJXNdICIsCisgICAgICAgICAgICAgICAgZW50cnktPmFjdGlvbiZDVVJMX1BPTExfSU4/IlJFQ1ZJTkciOiIiLAorICAgICAgICAgICAgICAgIGVudHJ5LT5hY3Rpb24mQ1VSTF9QT0xMX09VVD8iU0VORElORyI6IiIpOworICAgICAgfQorICAgICAgaWYoZWFzeS0+bnVtc29ja3MpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICB9CisgIH0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL211bHRpaWYuaCBiL2N1cmwtNy4yNS4wL2xpYi9tdWx0aWlmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5MTgxOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9tdWx0aWlmLmgKQEAgLTAsMCArMSw1MyBAQAorI2lmbmRlZiBfX01VTFRJSUZfSAorI2RlZmluZSBfX01VTFRJSUZfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBQcm90b3R5cGVzIGZvciBsaWJyYXJ5LXdpZGUgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IG11bHRpLmMKKyAqLwordm9pZCBDdXJsX2V4cGlyZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgbG9uZyBtaWxsaSk7CisKK2Jvb2wgQ3VybF9tdWx0aV9jYW5QaXBlbGluZShjb25zdCBzdHJ1Y3QgQ3VybF9tdWx0aSogbXVsdGkpOwordm9pZCBDdXJsX211bHRpX2hhbmRsZVBpcGVCcmVhayhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisKKy8qIHRoZSB3cml0ZSBiaXRzIHN0YXJ0IGF0IGJpdCAxNiBmb3IgdGhlICpnZXRzb2NrKCkgYml0bWFwICovCisjZGVmaW5lIEdFVFNPQ0tfV1JJVEVCSVRTVEFSVCAxNgorCisjZGVmaW5lIEdFVFNPQ0tfQkxBTksgMCAvKiBubyBiaXRzIHNldCAqLworCisvKiBzZXQgdGhlIGJpdCBmb3IgdGhlIGdpdmVuIHNvY2sgbnVtYmVyIHRvIG1ha2UgdGhlIGJpdG1hcCBmb3Igd3JpdGFibGUgKi8KKyNkZWZpbmUgR0VUU09DS19XUklURVNPQ0soeCkgKDEgPDwgKEdFVFNPQ0tfV1JJVEVCSVRTVEFSVCArICh4KSkpCisKKy8qIHNldCB0aGUgYml0IGZvciB0aGUgZ2l2ZW4gc29jayBudW1iZXIgdG8gbWFrZSB0aGUgYml0bWFwIGZvciByZWFkYWJsZSAqLworI2RlZmluZSBHRVRTT0NLX1JFQURTT0NLKHgpICgxIDw8ICh4KSkKKworI2lmZGVmIERFQlVHQlVJTEQKKyAvKgorICAqIEN1cmxfbXVsdGlfZHVtcCBpcyBub3QgYSBzdGFibGUgcHVibGljIGZ1bmN0aW9uLCB0aGlzIGlzIG9ubHkgbWVhbnQgdG8KKyAgKiBhbGxvdyBlYXNpZXIgdHJhY2tpbmcgb2YgdGhlIGludGVybmFsIGhhbmRsZSdzIHN0YXRlIGFuZCB3aGF0IHNvY2tldHMKKyAgKiB0aGV5IHVzZS4gT25seSBmb3IgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IERFQlVHQlVJTEQgZW5hYmxlZCBidWlsZHMuCisgICovCit2b2lkIEN1cmxfbXVsdGlfZHVtcChjb25zdCBzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGlfaGFuZGxlKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX19NVUxUSUlGX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9uZXRyYy5jIGIvY3VybC03LjI1LjAvbGliL25ldHJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2NGI5NwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9uZXRyYy5jCkBAIC0wLDAgKzEsMTk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1BXRF9ICisjaW5jbHVkZSA8cHdkLmg+CisjZW5kaWYKKyNpZmRlZiBfX1ZNUworI2luY2x1ZGUgPHVuaXhsaWIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAibmV0cmMuaCIKKworI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic3RydG9rLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogR2V0IHVzZXIgYW5kIHBhc3N3b3JkIGZyb20gLm5ldHJjIHdoZW4gZ2l2ZW4gYSBtYWNoaW5lIG5hbWUgKi8KKworZW51bSBob3N0X2xvb2t1cF9zdGF0ZSB7CisgIE5PVEhJTkcsCisgIEhPU1RGT1VORCwgICAgLyogdGhlICdtYWNoaW5lJyBrZXl3b3JkIHdhcyBmb3VuZCAqLworICBIT1NUQ09NUExFVEUsIC8qIHRoZSBtYWNoaW5lIG5hbWUgZm9sbG93aW5nIHRoZSBrZXl3b3JkIHdhcyBmb3VuZCB0b28gKi8KKyAgSE9TVFZBTElELCAgICAvKiB0aGlzIGlzICJvdXIiIG1hY2hpbmUhICovCisKKyAgSE9TVEVORCAvKiBMQVNUIGVudW0gKi8KK307CisKKy8qCisgKiBAdW5pdHRlc3Q6IDEzMDQKKyAqLworaW50IEN1cmxfcGFyc2VuZXRyYyhjb25zdCBjaGFyICpob3N0LAorICAgICAgICAgICAgICAgICAgICBjaGFyICpsb2dpbiwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5ldHJjZmlsZSkKK3sKKyAgRklMRSAqZmlsZTsKKyAgaW50IHJldGNvZGU9MTsKKyAgaW50IHNwZWNpZmljX2xvZ2luID0gKGxvZ2luWzBdICE9IDApOworICBjaGFyICpob21lID0gTlVMTDsKKyAgYm9vbCBob21lX2FsbG9jID0gRkFMU0U7CisgIGJvb2wgbmV0cmNfYWxsb2MgPSBGQUxTRTsKKyAgZW51bSBob3N0X2xvb2t1cF9zdGF0ZSBzdGF0ZT1OT1RISU5HOworCisgIGNoYXIgc3RhdGVfbG9naW49MDsgICAgICAvKiBGb3VuZCBhIGxvZ2luIGtleXdvcmQgKi8KKyAgY2hhciBzdGF0ZV9wYXNzd29yZD0wOyAgIC8qIEZvdW5kIGEgcGFzc3dvcmQga2V5d29yZCAqLworICBpbnQgc3RhdGVfb3VyX2xvZ2luPUZBTFNFOyAgLyogV2l0aCBzcGVjaWZpY19sb2dpbiwgZm91bmQgKm91ciogbG9naW4gbmFtZSAqLworCisjZGVmaW5lIE5FVFJDIERPVF9DSEFSICJuZXRyYyIKKworICBpZighbmV0cmNmaWxlKSB7CisgICAgaG9tZSA9IGN1cmxfZ2V0ZW52KCJIT01FIik7IC8qIHBvcnRhYmxlIGVudmlyb25tZW50IHJlYWRlciAqLworICAgIGlmKGhvbWUpIHsKKyAgICAgIGhvbWVfYWxsb2MgPSBUUlVFOworI2lmIGRlZmluZWQoSEFWRV9HRVRQV1VJRCkgJiYgZGVmaW5lZChIQVZFX0dFVEVVSUQpCisgICAgfQorICAgIGVsc2UgeworICAgICAgc3RydWN0IHBhc3N3ZCAqcHc7CisgICAgICBwdz0gZ2V0cHd1aWQoZ2V0ZXVpZCgpKTsKKyAgICAgIGlmKHB3KSB7CisjaWZkZWYgX19WTVMKKyAgICAgICAgaG9tZSA9IGRlY2NfdHJhbnNsYXRlX3Ztcyhwdy0+cHdfZGlyKTsKKyNlbHNlCisgICAgICAgIGhvbWUgPSBwdy0+cHdfZGlyOworI2VuZGlmCisgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICBpZighaG9tZSkKKyAgICAgIHJldHVybiAtMTsKKworICAgIG5ldHJjZmlsZSA9IGN1cmxfbWFwcmludGYoIiVzJXMlcyIsIGhvbWUsIERJUl9DSEFSLCBORVRSQyk7CisgICAgaWYoIW5ldHJjZmlsZSkgeworICAgICAgaWYoaG9tZV9hbGxvYykKKyAgICAgICAgZnJlZShob21lKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgbmV0cmNfYWxsb2MgPSBUUlVFOworICB9CisKKyAgZmlsZSA9IGZvcGVuKG5ldHJjZmlsZSwgInIiKTsKKyAgaWYoZmlsZSkgeworICAgIGNoYXIgKnRvazsKKyAgICBjaGFyICp0b2tfYnVmOworICAgIGJvb2wgZG9uZT1GQUxTRTsKKyAgICBjaGFyIG5ldHJjYnVmZmVyWzI1Nl07CisgICAgaW50ICBuZXRyY2J1ZmZzaXplID0gKGludClzaXplb2YobmV0cmNidWZmZXIpOworCisgICAgd2hpbGUoIWRvbmUgJiYgZmdldHMobmV0cmNidWZmZXIsIG5ldHJjYnVmZnNpemUsIGZpbGUpKSB7CisgICAgICB0b2s9c3RydG9rX3IobmV0cmNidWZmZXIsICIgXHRcbiIsICZ0b2tfYnVmKTsKKyAgICAgIHdoaWxlKCFkb25lICYmIHRvaykgeworCisgICAgICAgIGlmKGxvZ2luWzBdICYmIHBhc3N3b3JkWzBdKSB7CisgICAgICAgICAgZG9uZT1UUlVFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoKHN0YXRlKSB7CisgICAgICAgIGNhc2UgTk9USElORzoKKyAgICAgICAgICBpZihDdXJsX3Jhd19lcXVhbCgibWFjaGluZSIsIHRvaykpIHsKKyAgICAgICAgICAgIC8qIHRoZSBuZXh0IHRvayBpcyB0aGUgbWFjaGluZSBuYW1lLCB0aGlzIGlzIGluIGl0c2VsZiB0aGUKKyAgICAgICAgICAgICAgIGRlbGltaXRlciB0aGF0IHN0YXJ0cyB0aGUgc3R1ZmYgZW50ZXJlZCBmb3IgdGhpcyBtYWNoaW5lLAorICAgICAgICAgICAgICAgYWZ0ZXIgdGhpcyB3ZSBuZWVkIHRvIHNlYXJjaCBmb3IgJ2xvZ2luJyBhbmQKKyAgICAgICAgICAgICAgICdwYXNzd29yZCcuICovCisgICAgICAgICAgICBzdGF0ZT1IT1NURk9VTkQ7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhPU1RGT1VORDoKKyAgICAgICAgICBpZihDdXJsX3Jhd19lcXVhbChob3N0LCB0b2spKSB7CisgICAgICAgICAgICAvKiBhbmQgeWVzLCB0aGlzIGlzIG91ciBob3N0ISAqLworICAgICAgICAgICAgc3RhdGU9SE9TVFZBTElEOworICAgICAgICAgICAgcmV0Y29kZT0wOyAvKiB3ZSBkaWQgZmluZCBvdXIgaG9zdCAqLworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAvKiBub3Qgb3VyIGhvc3QgKi8KKyAgICAgICAgICAgIHN0YXRlPU5PVEhJTkc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSE9TVFZBTElEOgorICAgICAgICAgIC8qIHdlIGFyZSBub3cgcGFyc2luZyBzdWIta2V5d29yZHMgY29uY2VybmluZyAib3VyIiBob3N0ICovCisgICAgICAgICAgaWYoc3RhdGVfbG9naW4pIHsKKyAgICAgICAgICAgIGlmKHNwZWNpZmljX2xvZ2luKSB7CisgICAgICAgICAgICAgIHN0YXRlX291cl9sb2dpbiA9IEN1cmxfcmF3X2VxdWFsKGxvZ2luLCB0b2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIHN0cm5jcHkobG9naW4sIHRvaywgTE9HSU5TSVpFLTEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGVfbG9naW49MDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihzdGF0ZV9wYXNzd29yZCkgeworICAgICAgICAgICAgaWYoc3RhdGVfb3VyX2xvZ2luIHx8ICFzcGVjaWZpY19sb2dpbikgeworICAgICAgICAgICAgICBzdHJuY3B5KHBhc3N3b3JkLCB0b2ssIFBBU1NXT1JEU0laRS0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlX3Bhc3N3b3JkPTA7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoQ3VybF9yYXdfZXF1YWwoImxvZ2luIiwgdG9rKSkKKyAgICAgICAgICAgIHN0YXRlX2xvZ2luPTE7CisgICAgICAgICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbCgicGFzc3dvcmQiLCB0b2spKQorICAgICAgICAgICAgc3RhdGVfcGFzc3dvcmQ9MTsKKyAgICAgICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKCJtYWNoaW5lIiwgdG9rKSkgeworICAgICAgICAgICAgLyogb2ssIHRoZXJlJ3MgbWFjaGluZSBoZXJlIGdvID0+ICovCisgICAgICAgICAgICBzdGF0ZSA9IEhPU1RGT1VORDsKKyAgICAgICAgICAgIHN0YXRlX291cl9sb2dpbiA9IEZBTFNFOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIT1NUQ09NUExFVEU6CisgICAgICAgIGNhc2UgSE9TVEVORDoKKyAgICAgICAgICAgIC8qIFNob3VsZCBub3QgYmUgcmVhY2hlZC4gKi8KKyAgICAgICAgICAgIERFQlVHQVNTRVJUKDApOworICAgICAgICB9IC8qIHN3aXRjaCAoc3RhdGUpICovCisKKyAgICAgICAgdG9rID0gc3RydG9rX3IoTlVMTCwgIiBcdFxuIiwgJnRva19idWYpOworICAgICAgfSAvKiB3aGlsZSh0b2spICovCisgICAgfSAvKiB3aGlsZSBmZ2V0cygpICovCisKKyAgICBmY2xvc2UoZmlsZSk7CisgIH0KKworICBpZihob21lX2FsbG9jKQorICAgIGZyZWUoaG9tZSk7CisgIGlmKG5ldHJjX2FsbG9jKQorICAgIGZyZWUobmV0cmNmaWxlKTsKKworICByZXR1cm4gcmV0Y29kZTsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9uZXRyYy5oIGIvY3VybC03LjI1LjAvbGliL25ldHJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiNzY0ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9uZXRyYy5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfTkVUUkNfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9ORVRSQ19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTWFrZSBzdXJlIHdlIGhhdmUgcm9vbSBmb3IgYXQgbGVhc3QgdGhpcyBzaXplOiAqLworI2RlZmluZSBMT0dJTlNJWkUgNjQKKyNkZWZpbmUgUEFTU1dPUkRTSVpFIDY0CisKKy8qIHJldHVybnMgLTEgb24gZmFpbHVyZSwgMCBpZiB0aGUgaG9zdCBpcyBmb3VuZCwgMSBpcyB0aGUgaG9zdCBpc24ndCBmb3VuZCAqLworaW50IEN1cmxfcGFyc2VuZXRyYyhjb25zdCBjaGFyICpob3N0LAorICAgICAgICAgICAgICAgICAgICBjaGFyICpsb2dpbiwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZpbGVuYW1lKTsKKyAgLyogQXNzdW1lOiBwYXNzd29yZFswXT0wLCBob3N0WzBdICE9IDAuCisgICAqIElmIGxvZ2luWzBdID0gMCwgc2VhcmNoIGZvciBsb2dpbiBhbmQgcGFzc3dvcmQgd2l0aGluIGEgbWFjaGluZSBzZWN0aW9uCisgICAqIGluIHRoZSBuZXRyYy4KKyAgICogSWYgbG9naW5bMF0gIT0gMCwgc2VhcmNoIGZvciBwYXNzd29yZCB3aXRoaW4gbWFjaGluZSBhbmQgbG9naW4uCisgICAqLworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfTkVUUkNfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL25vbi1hc2NpaS5jIGIvY3VybC03LjI1LjAvbGliL25vbi1hc2NpaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzODY4MGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvbm9uLWFzY2lpLmMKQEAgLTAsMCArMSwzMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIENVUkxfRE9FU19DT05WRVJTSU9OUworCisjaW5jbHVkZSAibm9uLWFzY2lpLmgiCisjaW5jbHVkZSAiZm9ybWRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgInVybGRhdGEuaCIKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisjaWZkZWYgSEFWRV9JQ09OVgorI2luY2x1ZGUgPGljb252Lmg+CisvKiBzZXQgZGVmYXVsdCBjb2Rlc2V0cyBmb3IgaWNvbnYgKi8KKyNpZm5kZWYgQ1VSTF9JQ09OVl9DT0RFU0VUX09GX05FVFdPUksKKyNkZWZpbmUgQ1VSTF9JQ09OVl9DT0RFU0VUX09GX05FVFdPUksgIklTTzg4NTktMSIKKyNlbmRpZgorI2lmbmRlZiBDVVJMX0lDT05WX0NPREVTRVRfRk9SX1VURjgKKyNkZWZpbmUgQ1VSTF9JQ09OVl9DT0RFU0VUX0ZPUl9VVEY4ICAgIlVURi04IgorI2VuZGlmCisjZGVmaW5lIElDT05WX0VSUk9SICAoc2l6ZV90KS0xCisjZW5kaWYgLyogSEFWRV9JQ09OViAqLworCisvKgorICogQ3VybF9jb252ZXJ0X2Nsb25lKCkgcmV0dXJucyBhIG1hbGxvY2VkIGNvcHkgb2YgdGhlIHNvdXJjZSBzdHJpbmcgKGlmCisgKiByZXR1cm5pbmcgQ1VSTEVfT0spLCB3aXRoIHRoZSBkYXRhIGNvbnZlcnRlZCB0byBuZXR3b3JrIGZvcm1hdC4KKyAqLworQ1VSTGNvZGUgQ3VybF9jb252ZXJ0X2Nsb25lKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvdXRidWYpCit7CisgIGNoYXIgKmNvbnZidWY7CisgIENVUkxjb2RlIHJlc3VsdDsKKworICBjb252YnVmID0gbWFsbG9jKGluc2l6ZSk7CisgIGlmKCFjb252YnVmKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIG1lbWNweShjb252YnVmLCBpbmRhdGEsIGluc2l6ZSk7CisgIHJlc3VsdCA9IEN1cmxfY29udmVydF90b19uZXR3b3JrKGRhdGEsIGNvbnZidWYsIGluc2l6ZSk7CisgIGlmKHJlc3VsdCkgeworICAgIGZyZWUoY29udmJ1Zik7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgICpvdXRidWYgPSBjb252YnVmOyAvKiByZXR1cm4gdGhlIGNvbnZlcnRlZCBidWZmZXIgKi8KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBDdXJsX2NvbnZlcnRfdG9fbmV0d29yaygpIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBwZXJmb3JtaW5nIEFTQ0lJCisgKiBjb252ZXJzaW9ucyBvbiBub24tQVNDSUkgcGxhdGZvcm1zLiBJdCBjb252ZXJzIHRoZSBidWZmZXIgX2luIHBsYWNlXy4KKyAqLworQ1VSTGNvZGUgQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgpCit7CisgIENVUkxjb2RlIHJjOworCisgIGlmKGRhdGEtPnNldC5jb252dG9uZXR3b3JrKSB7CisgICAgLyogdXNlIHRyYW5zbGF0aW9uIGNhbGxiYWNrICovCisgICAgcmMgPSBkYXRhLT5zZXQuY29udnRvbmV0d29yayhidWZmZXIsIGxlbmd0aCk7CisgICAgaWYocmMgIT0gQ1VSTEVfT0spIHsKKyAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAiQ1VSTE9QVF9DT05WX1RPX05FVFdPUktfRlVOQ1RJT04gY2FsbGJhY2sgcmV0dXJuZWQgJWQ6ICVzIiwKKyAgICAgICAgICAgIChpbnQpcmMsIGN1cmxfZWFzeV9zdHJlcnJvcihyYykpOworICAgIH0KKyAgICByZXR1cm4gcmM7CisgIH0KKyAgZWxzZSB7CisjaWZkZWYgSEFWRV9JQ09OVgorICAgIC8qIGRvIHRoZSB0cmFuc2xhdGlvbiBvdXJzZWx2ZXMgKi8KKyAgICBjaGFyICppbnB1dF9wdHIsICpvdXRwdXRfcHRyOworICAgIHNpemVfdCBpbl9ieXRlcywgb3V0X2J5dGVzLCByYzsKKyAgICBpbnQgZXJyb3I7CisKKyAgICAvKiBvcGVuIGFuIGljb252IGNvbnZlcnNpb24gZGVzY3JpcHRvciBpZiBuZWNlc3NhcnkgKi8KKyAgICBpZihkYXRhLT5vdXRib3VuZF9jZCA9PSAoaWNvbnZfdCktMSkgeworICAgICAgZGF0YS0+b3V0Ym91bmRfY2QgPSBpY29udl9vcGVuKENVUkxfSUNPTlZfQ09ERVNFVF9PRl9ORVRXT1JLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfSUNPTlZfQ09ERVNFVF9PRl9IT1NUKTsKKyAgICAgIGlmKGRhdGEtPm91dGJvdW5kX2NkID09IChpY29udl90KS0xKSB7CisgICAgICAgIGVycm9yID0gRVJSTk87CisgICAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAgICJUaGUgaWNvbnZfb3BlbihcIiVzXCIsIFwiJXNcIikgY2FsbCBmYWlsZWQgd2l0aCBlcnJubyAlaTogJXMiLAorICAgICAgICAgICAgICBDVVJMX0lDT05WX0NPREVTRVRfT0ZfTkVUV09SSywKKyAgICAgICAgICAgICAgQ1VSTF9JQ09OVl9DT0RFU0VUX09GX0hPU1QsCisgICAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gQ1VSTEVfQ09OVl9GQUlMRUQ7CisgICAgICB9CisgICAgfQorICAgIC8qIGNhbGwgaWNvbnYgKi8KKyAgICBpbnB1dF9wdHIgPSBvdXRwdXRfcHRyID0gYnVmZmVyOworICAgIGluX2J5dGVzID0gb3V0X2J5dGVzID0gbGVuZ3RoOworICAgIHJjID0gaWNvbnYoZGF0YS0+b3V0Ym91bmRfY2QsIChjb25zdCBjaGFyKiopJmlucHV0X3B0ciwgJmluX2J5dGVzLAorICAgICAgICAgICAgICAgJm91dHB1dF9wdHIsICZvdXRfYnl0ZXMpOworICAgIGlmKChyYyA9PSBJQ09OVl9FUlJPUikgfHwgKGluX2J5dGVzICE9IDApKSB7CisgICAgICBlcnJvciA9IEVSUk5POworICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICJUaGUgQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsgaWNvbnYgY2FsbCBmYWlsZWQgd2l0aCBlcnJubyAlaTogJXMiLAorICAgICAgICAgICAgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09OVl9GQUlMRUQ7CisgICAgfQorI2Vsc2UKKyAgICBmYWlsZihkYXRhLCAiQ1VSTE9QVF9DT05WX1RPX05FVFdPUktfRlVOQ1RJT04gY2FsbGJhY2sgcmVxdWlyZWQiKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09OVl9SRVFEOworI2VuZGlmIC8qIEhBVkVfSUNPTlYgKi8KKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoKSBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgcGVyZm9ybWluZyBBU0NJSQorICogY29udmVyc2lvbnMgb24gbm9uLUFTQ0lJIHBsYXRmb3Jtcy4gSXQgY29udmVycyB0aGUgYnVmZmVyIF9pbiBwbGFjZV8uCisgKi8KK0NVUkxjb2RlIEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgQ1VSTGNvZGUgcmM7CisKKyAgaWYoZGF0YS0+c2V0LmNvbnZmcm9tbmV0d29yaykgeworICAgIC8qIHVzZSB0cmFuc2xhdGlvbiBjYWxsYmFjayAqLworICAgIHJjID0gZGF0YS0+c2V0LmNvbnZmcm9tbmV0d29yayhidWZmZXIsIGxlbmd0aCk7CisgICAgaWYocmMgIT0gQ1VSTEVfT0spIHsKKyAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAiQ1VSTE9QVF9DT05WX0ZST01fTkVUV09SS19GVU5DVElPTiBjYWxsYmFjayByZXR1cm5lZCAlZDogJXMiLAorICAgICAgICAgICAgKGludClyYywgY3VybF9lYXN5X3N0cmVycm9yKHJjKSk7CisgICAgfQorICAgIHJldHVybiByYzsKKyAgfQorICBlbHNlIHsKKyNpZmRlZiBIQVZFX0lDT05WCisgICAgLyogZG8gdGhlIHRyYW5zbGF0aW9uIG91cnNlbHZlcyAqLworICAgIGNoYXIgKmlucHV0X3B0ciwgKm91dHB1dF9wdHI7CisgICAgc2l6ZV90IGluX2J5dGVzLCBvdXRfYnl0ZXMsIHJjOworICAgIGludCBlcnJvcjsKKworICAgIC8qIG9wZW4gYW4gaWNvbnYgY29udmVyc2lvbiBkZXNjcmlwdG9yIGlmIG5lY2Vzc2FyeSAqLworICAgIGlmKGRhdGEtPmluYm91bmRfY2QgPT0gKGljb252X3QpLTEpIHsKKyAgICAgIGRhdGEtPmluYm91bmRfY2QgPSBpY29udl9vcGVuKENVUkxfSUNPTlZfQ09ERVNFVF9PRl9IT1NULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTF9JQ09OVl9DT0RFU0VUX09GX05FVFdPUkspOworICAgICAgaWYoZGF0YS0+aW5ib3VuZF9jZCA9PSAoaWNvbnZfdCktMSkgeworICAgICAgICBlcnJvciA9IEVSUk5POworICAgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgICAiVGhlIGljb252X29wZW4oXCIlc1wiLCBcIiVzXCIpIGNhbGwgZmFpbGVkIHdpdGggZXJybm8gJWk6ICVzIiwKKyAgICAgICAgICAgICAgQ1VSTF9JQ09OVl9DT0RFU0VUX09GX0hPU1QsCisgICAgICAgICAgICAgIENVUkxfSUNPTlZfQ09ERVNFVF9PRl9ORVRXT1JLLAorICAgICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX0NPTlZfRkFJTEVEOworICAgICAgfQorICAgIH0KKyAgICAvKiBjYWxsIGljb252ICovCisgICAgaW5wdXRfcHRyID0gb3V0cHV0X3B0ciA9IGJ1ZmZlcjsKKyAgICBpbl9ieXRlcyA9IG91dF9ieXRlcyA9IGxlbmd0aDsKKyAgICByYyA9IGljb252KGRhdGEtPmluYm91bmRfY2QsIChjb25zdCBjaGFyICoqKSZpbnB1dF9wdHIsICZpbl9ieXRlcywKKyAgICAgICAgICAgICAgICZvdXRwdXRfcHRyLCAmb3V0X2J5dGVzKTsKKyAgICBpZigocmMgPT0gSUNPTlZfRVJST1IpIHx8IChpbl9ieXRlcyAhPSAwKSkgeworICAgICAgZXJyb3IgPSBFUlJOTzsKKyAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAiQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayBpY29udiBjYWxsIGZhaWxlZCB3aXRoIGVycm5vICVpOiAlcyIsCisgICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT05WX0ZBSUxFRDsKKyAgICB9CisjZWxzZQorICAgIGZhaWxmKGRhdGEsICJDVVJMT1BUX0NPTlZfRlJPTV9ORVRXT1JLX0ZVTkNUSU9OIGNhbGxiYWNrIHJlcXVpcmVkIik7CisgICAgcmV0dXJuIENVUkxFX0NPTlZfUkVRRDsKKyNlbmRpZiAvKiBIQVZFX0lDT05WICovCisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBDdXJsX2NvbnZlcnRfZnJvbV91dGY4KCkgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIHBlcmZvcm1pbmcgVVRGLTgKKyAqIGNvbnZlcnNpb25zIG9uIG5vbi1BU0NJSSBwbGF0Zm9ybXMuCisgKi8KK0NVUkxjb2RlIEN1cmxfY29udmVydF9mcm9tX3V0Zjgoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgQ1VSTGNvZGUgcmM7CisKKyAgaWYoZGF0YS0+c2V0LmNvbnZmcm9tdXRmOCkgeworICAgIC8qIHVzZSB0cmFuc2xhdGlvbiBjYWxsYmFjayAqLworICAgIHJjID0gZGF0YS0+c2V0LmNvbnZmcm9tdXRmOChidWZmZXIsIGxlbmd0aCk7CisgICAgaWYocmMgIT0gQ1VSTEVfT0spIHsKKyAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAiQ1VSTE9QVF9DT05WX0ZST01fVVRGOF9GVU5DVElPTiBjYWxsYmFjayByZXR1cm5lZCAlZDogJXMiLAorICAgICAgICAgICAgKGludClyYywgY3VybF9lYXN5X3N0cmVycm9yKHJjKSk7CisgICAgfQorICAgIHJldHVybiByYzsKKyAgfQorICBlbHNlIHsKKyNpZmRlZiBIQVZFX0lDT05WCisgICAgLyogZG8gdGhlIHRyYW5zbGF0aW9uIG91cnNlbHZlcyAqLworICAgIGNvbnN0IGNoYXIgKmlucHV0X3B0cjsKKyAgICBjaGFyICpvdXRwdXRfcHRyOworICAgIHNpemVfdCBpbl9ieXRlcywgb3V0X2J5dGVzLCByYzsKKyAgICBpbnQgZXJyb3I7CisKKyAgICAvKiBvcGVuIGFuIGljb252IGNvbnZlcnNpb24gZGVzY3JpcHRvciBpZiBuZWNlc3NhcnkgKi8KKyAgICBpZihkYXRhLT51dGY4X2NkID09IChpY29udl90KS0xKSB7CisgICAgICBkYXRhLT51dGY4X2NkID0gaWNvbnZfb3BlbihDVVJMX0lDT05WX0NPREVTRVRfT0ZfSE9TVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfSUNPTlZfQ09ERVNFVF9GT1JfVVRGOCk7CisgICAgICBpZihkYXRhLT51dGY4X2NkID09IChpY29udl90KS0xKSB7CisgICAgICAgIGVycm9yID0gRVJSTk87CisgICAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAgICJUaGUgaWNvbnZfb3BlbihcIiVzXCIsIFwiJXNcIikgY2FsbCBmYWlsZWQgd2l0aCBlcnJubyAlaTogJXMiLAorICAgICAgICAgICAgICBDVVJMX0lDT05WX0NPREVTRVRfT0ZfSE9TVCwKKyAgICAgICAgICAgICAgQ1VSTF9JQ09OVl9DT0RFU0VUX0ZPUl9VVEY4LAorICAgICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX0NPTlZfRkFJTEVEOworICAgICAgfQorICAgIH0KKyAgICAvKiBjYWxsIGljb252ICovCisgICAgaW5wdXRfcHRyID0gb3V0cHV0X3B0ciA9IGJ1ZmZlcjsKKyAgICBpbl9ieXRlcyA9IG91dF9ieXRlcyA9IGxlbmd0aDsKKyAgICByYyA9IGljb252KGRhdGEtPnV0ZjhfY2QsICZpbnB1dF9wdHIsICZpbl9ieXRlcywKKyAgICAgICAgICAgICAgICZvdXRwdXRfcHRyLCAmb3V0X2J5dGVzKTsKKyAgICBpZigocmMgPT0gSUNPTlZfRVJST1IpIHx8IChpbl9ieXRlcyAhPSAwKSkgeworICAgICAgZXJyb3IgPSBFUlJOTzsKKyAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAiVGhlIEN1cmxfY29udmVydF9mcm9tX3V0ZjggaWNvbnYgY2FsbCBmYWlsZWQgd2l0aCBlcnJubyAlaTogJXMiLAorICAgICAgICAgICAgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09OVl9GQUlMRUQ7CisgICAgfQorICAgIGlmKG91dHB1dF9wdHIgPCBpbnB1dF9wdHIpIHsKKyAgICAgIC8qIG51bGwgdGVybWluYXRlIHRoZSBub3cgc2hvcnRlciBvdXRwdXQgc3RyaW5nICovCisgICAgICAqb3V0cHV0X3B0ciA9IDB4MDA7CisgICAgfQorI2Vsc2UKKyAgICBmYWlsZihkYXRhLCAiQ1VSTE9QVF9DT05WX0ZST01fVVRGOF9GVU5DVElPTiBjYWxsYmFjayByZXF1aXJlZCIpOworICAgIHJldHVybiBDVVJMRV9DT05WX1JFUUQ7CisjZW5kaWYgLyogSEFWRV9JQ09OViAqLworICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogSW5pdCBjb252ZXJzaW9uIHN0dWZmIGZvciBhIFNlc3Npb25IYW5kbGUKKyAqLwordm9pZCBDdXJsX2NvbnZlcnRfaW5pdChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKK3sKKyNpZiBkZWZpbmVkKENVUkxfRE9FU19DT05WRVJTSU9OUykgJiYgZGVmaW5lZChIQVZFX0lDT05WKQorICAvKiBjb252ZXJzaW9uIGRlc2NyaXB0b3JzIGZvciBpY29udiBjYWxscyAqLworICBkYXRhLT5vdXRib3VuZF9jZCA9IChpY29udl90KS0xOworICBkYXRhLT5pbmJvdW5kX2NkICA9IChpY29udl90KS0xOworICBkYXRhLT51dGY4X2NkICAgICA9IChpY29udl90KS0xOworI2Vsc2UKKyAgKHZvaWQpZGF0YTsKKyNlbmRpZiAvKiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMgJiYgSEFWRV9JQ09OViAqLworfQorCisvKgorICogU2V0dXAgY29udmVyc2lvbiBzdHVmZiBmb3IgYSBTZXNzaW9uSGFuZGxlCisgKi8KK3ZvaWQgQ3VybF9jb252ZXJ0X3NldHVwKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBkYXRhLT5pbmJvdW5kX2NkID0gaWNvbnZfb3BlbihDVVJMX0lDT05WX0NPREVTRVRfT0ZfSE9TVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTF9JQ09OVl9DT0RFU0VUX09GX05FVFdPUkspOworICBkYXRhLT5vdXRib3VuZF9jZCA9IGljb252X29wZW4oQ1VSTF9JQ09OVl9DT0RFU0VUX09GX05FVFdPUkssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMX0lDT05WX0NPREVTRVRfT0ZfSE9TVCk7CisgIGRhdGEtPnV0ZjhfY2QgPSBpY29udl9vcGVuKENVUkxfSUNPTlZfQ09ERVNFVF9PRl9IT1NULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMX0lDT05WX0NPREVTRVRfRk9SX1VURjgpOworfQorCisvKgorICogQ2xvc2UgY29udmVyc2lvbiBzdHVmZiBmb3IgYSBTZXNzaW9uSGFuZGxlCisgKi8KKwordm9pZCBDdXJsX2NvbnZlcnRfY2xvc2Uoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisjaWZkZWYgSEFWRV9JQ09OVgorICAvKiBjbG9zZSBpY29udiBjb252ZXJzaW9uIGRlc2NyaXB0b3JzICovCisgIGlmKGRhdGEtPmluYm91bmRfY2QgIT0gKGljb252X3QpLTEpIHsKKyAgICBpY29udl9jbG9zZShkYXRhLT5pbmJvdW5kX2NkKTsKKyAgfQorICBpZihkYXRhLT5vdXRib3VuZF9jZCAhPSAoaWNvbnZfdCktMSkgeworICAgIGljb252X2Nsb3NlKGRhdGEtPm91dGJvdW5kX2NkKTsKKyAgfQorICBpZihkYXRhLT51dGY4X2NkICE9IChpY29udl90KS0xKSB7CisgICAgaWNvbnZfY2xvc2UoZGF0YS0+dXRmOF9jZCk7CisgIH0KKyNlbHNlCisgICh2b2lkKWRhdGE7CisjZW5kaWYgLyogSEFWRV9JQ09OViAqLworfQorCisvKgorICogQ3VybF9jb252ZXJ0X2Zvcm0oKSBpcyB1c2VkIGZyb20gaHR0cC5jLCB0aGlzIGNvbnZlcnRzIGFueSBmb3JtIGl0ZW1zIHRoYXQKKyAgIG5lZWQgdG8gYmUgc2VudCBpbiB0aGUgbmV0d29yayBlbmNvZGluZy4gIFJldHVybnMgQ1VSTEVfT0sgb24gc3VjY2Vzcy4KKyAqLworQ1VSTGNvZGUgQ3VybF9jb252ZXJ0X2Zvcm0oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIHN0cnVjdCBGb3JtRGF0YSAqZm9ybSkKK3sKKyAgc3RydWN0IEZvcm1EYXRhICpuZXh0OworICBDVVJMY29kZSByYzsKKworICBpZighZm9ybSkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgaWYoIWRhdGEpCisgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKKworICBkbyB7CisgICAgbmV4dD1mb3JtLT5uZXh0OyAgLyogdGhlIGZvbGxvd2luZyBmb3JtIGxpbmUgKi8KKyAgICBpZihmb3JtLT50eXBlID09IEZPUk1fREFUQSkgeworICAgICAgcmMgPSBDdXJsX2NvbnZlcnRfdG9fbmV0d29yayhkYXRhLCBmb3JtLT5saW5lLCBmb3JtLT5sZW5ndGgpOworICAgICAgLyogQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsgY2FsbHMgZmFpbGYgaWYgdW5zdWNjZXNzZnVsICovCisgICAgICBpZihyYyAhPSBDVVJMRV9PSykKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKyAgfSB3aGlsZSgoZm9ybSA9IG5leHQpICE9IE5VTEwpOyAvKiBjb250aW51ZSAqLworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKyNlbmRpZiAvKiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9ub24tYXNjaWkuaCBiL2N1cmwtNy4yNS4wL2xpYi9ub24tYXNjaWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGNiZTAwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL25vbi1hc2NpaS5oCkBAIC0wLDAgKzEsNjMgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfTk9OX0FTQ0lJX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfTk9OX0FTQ0lJX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKworLyoKKyAqIEN1cmxfY29udmVydF9jbG9uZSgpIHJldHVybnMgYSBtYWxsb2NlZCBjb3B5IG9mIHRoZSBzb3VyY2Ugc3RyaW5nIChpZgorICogcmV0dXJuaW5nIENVUkxFX09LKSwgd2l0aCB0aGUgZGF0YSBjb252ZXJ0ZWQgdG8gbmV0d29yayBmb3JtYXQuCisgKgorICogSWYgbm8gY29udmVyc2lvbiB3YXMgbmVlZGVkICpvdXRidWYgbWF5IGJlIE5VTEwuCisgKi8KK0NVUkxjb2RlIEN1cmxfY29udmVydF9jbG9uZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0YnVmKTsKKwordm9pZCBDdXJsX2NvbnZlcnRfaW5pdChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7Cit2b2lkIEN1cmxfY29udmVydF9zZXR1cChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7Cit2b2lkIEN1cmxfY29udmVydF9jbG9zZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisKK0NVUkxjb2RlIEN1cmxfY29udmVydF90b19uZXR3b3JrKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKTsKK0NVUkxjb2RlIEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgpOworQ1VSTGNvZGUgQ3VybF9jb252ZXJ0X2Zyb21fdXRmOChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7CitDVVJMY29kZSBDdXJsX2NvbnZlcnRfZm9ybShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgc3RydWN0IEZvcm1EYXRhICpmb3JtKTsKKyNlbHNlCisjZGVmaW5lIEN1cmxfY29udmVydF9jbG9uZShhLGIsYyxkKSAoKHZvaWQpYSwgQ1VSTEVfT0spCisjZGVmaW5lIEN1cmxfY29udmVydF9pbml0KHgpIEN1cmxfbm9wX3N0bXQKKyNkZWZpbmUgQ3VybF9jb252ZXJ0X3NldHVwKHgpIEN1cmxfbm9wX3N0bXQKKyNkZWZpbmUgQ3VybF9jb252ZXJ0X2Nsb3NlKHgpIEN1cmxfbm9wX3N0bXQKKyNkZWZpbmUgQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsoYSxiLGMpICgodm9pZClhLCBDVVJMRV9PSykKKyNkZWZpbmUgQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayhhLGIsYykgKCh2b2lkKWEsIENVUkxFX09LKQorI2RlZmluZSBDdXJsX2NvbnZlcnRfZnJvbV91dGY4KGEsYixjKSAoKHZvaWQpYSwgQ1VSTEVfT0spCisjZGVmaW5lIEN1cmxfY29udmVydF9mb3JtKGEsYikgQ1VSTEVfT0sKKyNlbmRpZgorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfTk9OX0FTQ0lJX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9ub25ibG9jay5jIGIvY3VybC03LjI1LjAvbGliL25vbmJsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmZjJmMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9ub25ibG9jay5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWYgKGRlZmluZWQoSEFWRV9JT0NUTF9GSU9OQklPKSAmJiBkZWZpbmVkKE5FVFdBUkUpKQorI2luY2x1ZGUgPHN5cy9maWxpby5oPgorI2VuZGlmCisjaWZkZWYgX19WTVMKKyNpbmNsdWRlIDxpbi5oPgorI2luY2x1ZGUgPGluZXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAibm9uYmxvY2suaCIKKworLyoKKyAqIGN1cmx4X25vbmJsb2NrKCkgc2V0IHRoZSBnaXZlbiBzb2NrZXQgdG8gZWl0aGVyIGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZworICogbW9kZSBiYXNlZCBvbiB0aGUgJ25vbmJsb2NrJyBib29sZWFuIGFyZ3VtZW50LiBUaGlzIGZ1bmN0aW9uIGlzIGhpZ2hseQorICogcG9ydGFibGUuCisgKi8KK2ludCBjdXJseF9ub25ibG9jayhjdXJsX3NvY2tldF90IHNvY2tmZCwgICAgLyogb3BlcmF0ZSBvbiB0aGlzICovCisgICAgICAgICAgICAgICAgICAgaW50IG5vbmJsb2NrICAgLyogVFJVRSBvciBGQUxTRSAqLykKK3sKKyNpZiBkZWZpbmVkKFVTRV9CTE9DS0lOR19TT0NLRVRTKQorCisgIHJldHVybiAwOyAvKiByZXR1cm5zIHN1Y2Nlc3MgKi8KKworI2VsaWYgZGVmaW5lZChIQVZFX0ZDTlRMX09fTk9OQkxPQ0spCisKKyAgLyogbW9zdCByZWNlbnQgdW5peCB2ZXJzaW9ucyAqLworICBpbnQgZmxhZ3M7CisgIGZsYWdzID0gc2ZjbnRsKHNvY2tmZCwgRl9HRVRGTCwgMCk7CisgIGlmKG5vbmJsb2NrKQorICAgIHJldHVybiBzZmNudGwoc29ja2ZkLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spOworICBlbHNlCisgICAgcmV0dXJuIHNmY250bChzb2NrZmQsIEZfU0VURkwsIGZsYWdzICYgKH5PX05PTkJMT0NLKSk7CisKKyNlbGlmIGRlZmluZWQoSEFWRV9JT0NUTF9GSU9OQklPKQorCisgIC8qIG9sZGVyIHVuaXggdmVyc2lvbnMgKi8KKyAgaW50IGZsYWdzID0gbm9uYmxvY2sgPyAxIDogMDsKKyAgcmV0dXJuIGlvY3RsKHNvY2tmZCwgRklPTkJJTywgJmZsYWdzKTsKKworI2VsaWYgZGVmaW5lZChIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU8pCisKKyAgLyogV2luZG93cyAqLworICB1bnNpZ25lZCBsb25nIGZsYWdzID0gbm9uYmxvY2sgPyAxVUwgOiAwVUw7CisgIHJldHVybiBpb2N0bHNvY2tldChzb2NrZmQsIEZJT05CSU8sICZmbGFncyk7CisKKyNlbGlmIGRlZmluZWQoSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTF9GSU9OQklPKQorCisgIC8qIEFtaWdhICovCisgIGxvbmcgZmxhZ3MgPSBub25ibG9jayA/IDFMIDogMEw7CisgIHJldHVybiBJb2N0bFNvY2tldChzb2NrZmQsIEZJT05CSU8sIGZsYWdzKTsKKworI2VsaWYgZGVmaW5lZChIQVZFX1NFVFNPQ0tPUFRfU09fTk9OQkxPQ0spCisKKyAgLyogQmVPUyAqLworICBsb25nIGIgPSBub25ibG9jayA/IDFMIDogMEw7CisgIHJldHVybiBzZXRzb2Nrb3B0KHNvY2tmZCwgU09MX1NPQ0tFVCwgU09fTk9OQkxPQ0ssICZiLCBzaXplb2YoYikpOworCisjZWxzZQorIyAgZXJyb3IgIm5vIG5vbi1ibG9ja2luZyBtZXRob2Qgd2FzIGZvdW5kL3VzZWQvc2V0IgorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvbm9uYmxvY2suaCBiL2N1cmwtNy4yNS4wL2xpYi9ub25ibG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkY2QyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvbm9uYmxvY2suaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9fTk9OQkxPQ0tfSAorI2RlZmluZSBfX05PTkJMT0NLX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+IC8qIGZvciBjdXJsX3NvY2tldF90ICovCisKK2ludCBjdXJseF9ub25ibG9jayhjdXJsX3NvY2tldF90IHNvY2tmZCwgICAgLyogb3BlcmF0ZSBvbiB0aGlzICovCisgICAgICAgICAgICAgICAgICAgaW50IG5vbmJsb2NrICAgLyogVFJVRSBvciBGQUxTRSAqLyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL25zcy5jIGIvY3VybC03LjI1LjAvbGliL25zcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNmRhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvbnNzLmMKQEAgLTAsMCArMSwxNTI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFNvdXJjZSBmaWxlIGZvciBhbGwgTlNTLXNwZWNpZmljIGNvZGUgZm9yIHRoZSBUTFMvU1NMIGxheWVyLiBObyBjb2RlCisgKiBidXQgc3NsZ2VuLmMgc2hvdWxkIGV2ZXIgY2FsbCBvciB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImZvcm1kYXRhLmgiIC8qIGZvciB0aGUgYm91bmRhcnkgZnVuY3Rpb24gKi8KKyNpbmNsdWRlICJ1cmwuaCIgLyogZm9yIHRoZSBzc2wgY29uZmlnIGNoZWNrIGZ1bmN0aW9uICovCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAic3NsZ2VuLmgiCisjaW5jbHVkZSAibGxpc3QuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSB0aGUgaW50ZXJuYWwgKnByaW50ZigpIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaWZkZWYgVVNFX05TUworCisjaW5jbHVkZSAibnNzZy5oIgorI2luY2x1ZGUgPG5zcHIuaD4KKyNpbmNsdWRlIDxuc3MuaD4KKyNpbmNsdWRlIDxzc2wuaD4KKyNpbmNsdWRlIDxzc2xlcnIuaD4KKyNpbmNsdWRlIDxzZWNlcnIuaD4KKyNpbmNsdWRlIDxzZWNtb2QuaD4KKyNpbmNsdWRlIDxzc2xwcm90by5oPgorI2luY2x1ZGUgPHBydHlwZXMuaD4KKyNpbmNsdWRlIDxwazExcHViLmg+CisjaW5jbHVkZSA8cHJpby5oPgorI2luY2x1ZGUgPHNlY2l0ZW0uaD4KKyNpbmNsdWRlIDxzZWNwb3J0Lmg+CisjaW5jbHVkZSA8Y2VydGRiLmg+CisjaW5jbHVkZSA8YmFzZTY0Lmg+CisjaW5jbHVkZSA8Y2VydC5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBTU0xfRElSICIvZXRjL3BraS9uc3NkYiIKKworLyogZW5vdWdoIHRvIGZpdCB0aGUgc3RyaW5nICJQRU0gVG9rZW4gI1swfDFdIiAqLworI2RlZmluZSBTTE9UU0laRSAxMworCitQUkZpbGVEZXNjICpQUl9JbXBvcnRUQ1BTb2NrZXQoUFJJbnQzMiBvc2ZkKTsKKworUFJMb2NrICogbnNzX2luaXRsb2NrID0gTlVMTDsKK1BSTG9jayAqIG5zc19jcmxsb2NrID0gTlVMTDsKKwordm9sYXRpbGUgaW50IGluaXRpYWxpemVkID0gMDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICBpbnQgbnVtOworICBQUkludDMyIHZlcnNpb247IC8qIHByb3RvY29sIHZlcnNpb24gdmFsaWQgZm9yIHRoaXMgY2lwaGVyICovCit9IGNpcGhlcl9zOworCisjZGVmaW5lIFBLMTFfU0VUQVRUUlMoX2F0dHIsIF9pZHgsIF90eXBlLCBfdmFsLCBfbGVuKSBkbyB7ICBcCisgIENLX0FUVFJJQlVURSAqcHRyID0gKF9hdHRyKSArICgoX2lkeCkrKyk7ICAgICAgICAgICAgICAgICBcCisgIHB0ci0+dHlwZSA9IChfdHlwZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHB0ci0+cFZhbHVlID0gKF92YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHB0ci0+dWxWYWx1ZUxlbiA9IChfbGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IFdISUxFX0ZBTFNFCisKKyNkZWZpbmUgQ0VSVF9OZXdUZW1wQ2VydGlmaWNhdGUgX19DRVJUX05ld1RlbXBDZXJ0aWZpY2F0ZQorCitlbnVtIHNzbHZlcnNpb24geyBTU0wyID0gMSwgU1NMMyA9IDIsIFRMUyA9IDQgfTsKKworI2RlZmluZSBOVU1fT0ZfQ0lQSEVSUyBzaXplb2YoY2lwaGVybGlzdCkvc2l6ZW9mKGNpcGhlcmxpc3RbMF0pCitzdGF0aWMgY29uc3QgY2lwaGVyX3MgY2lwaGVybGlzdFtdID0geworICAvKiBTU0wyIGNpcGhlciBzdWl0ZXMgKi8KKyAgeyJyYzQiLCBTU0xfRU5fUkM0XzEyOF9XSVRIX01ENSwgU1NMMn0sCisgIHsicmM0LW1kNSIsIFNTTF9FTl9SQzRfMTI4X1dJVEhfTUQ1LCBTU0wyfSwKKyAgeyJyYzRleHBvcnQiLCBTU0xfRU5fUkM0XzEyOF9FWFBPUlQ0MF9XSVRIX01ENSwgU1NMMn0sCisgIHsicmMyIiwgU1NMX0VOX1JDMl8xMjhfQ0JDX1dJVEhfTUQ1LCBTU0wyfSwKKyAgeyJyYzJleHBvcnQiLCBTU0xfRU5fUkMyXzEyOF9DQkNfRVhQT1JUNDBfV0lUSF9NRDUsIFNTTDJ9LAorICB7ImRlcyIsIFNTTF9FTl9ERVNfNjRfQ0JDX1dJVEhfTUQ1LCBTU0wyfSwKKyAgeyJkZXNlZGUzIiwgU1NMX0VOX0RFU18xOTJfRURFM19DQkNfV0lUSF9NRDUsIFNTTDJ9LAorICAvKiBTU0wzL1RMUyBjaXBoZXIgc3VpdGVzICovCisgIHsicnNhX3JjNF8xMjhfbWQ1IiwgU1NMX1JTQV9XSVRIX1JDNF8xMjhfTUQ1LCBTU0wzIHwgVExTfSwKKyAgeyJyc2FfcmM0XzEyOF9zaGEiLCBTU0xfUlNBX1dJVEhfUkM0XzEyOF9TSEEsIFNTTDMgfCBUTFN9LAorICB7InJzYV8zZGVzX3NoYSIsIFNTTF9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBLCBTU0wzIHwgVExTfSwKKyAgeyJyc2FfZGVzX3NoYSIsIFNTTF9SU0FfV0lUSF9ERVNfQ0JDX1NIQSwgU1NMMyB8IFRMU30sCisgIHsicnNhX3JjNF80MF9tZDUiLCBTU0xfUlNBX0VYUE9SVF9XSVRIX1JDNF80MF9NRDUsIFNTTDMgfCBUTFN9LAorICB7InJzYV9yYzJfNDBfbWQ1IiwgU1NMX1JTQV9FWFBPUlRfV0lUSF9SQzJfQ0JDXzQwX01ENSwgU1NMMyB8IFRMU30sCisgIHsicnNhX251bGxfbWQ1IiwgU1NMX1JTQV9XSVRIX05VTExfTUQ1LCBTU0wzIHwgVExTfSwKKyAgeyJyc2FfbnVsbF9zaGEiLCBTU0xfUlNBX1dJVEhfTlVMTF9TSEEsIFNTTDMgfCBUTFN9LAorICB7ImZpcHNfM2Rlc19zaGEiLCBTU0xfUlNBX0ZJUFNfV0lUSF8zREVTX0VERV9DQkNfU0hBLCBTU0wzIHwgVExTfSwKKyAgeyJmaXBzX2Rlc19zaGEiLCBTU0xfUlNBX0ZJUFNfV0lUSF9ERVNfQ0JDX1NIQSwgU1NMMyB8IFRMU30sCisgIHsiZm9ydGV6emEiLCBTU0xfRk9SVEVaWkFfRE1TX1dJVEhfRk9SVEVaWkFfQ0JDX1NIQSwgU1NMMyB8IFRMU30sCisgIHsiZm9ydGV6emFfcmM0XzEyOF9zaGEiLCBTU0xfRk9SVEVaWkFfRE1TX1dJVEhfUkM0XzEyOF9TSEEsIFNTTDMgfCBUTFN9LAorICB7ImZvcnRlenphX251bGwiLCBTU0xfRk9SVEVaWkFfRE1TX1dJVEhfTlVMTF9TSEEsIFNTTDMgfCBUTFN9LAorICAvKiBUTFMgMS4wOiBFeHBvcnRhYmxlIDU2LWJpdCBDaXBoZXIgU3VpdGVzLiAqLworICB7InJzYV9kZXNfNTZfc2hhIiwgVExTX1JTQV9FWFBPUlQxMDI0X1dJVEhfREVTX0NCQ19TSEEsIFNTTDMgfCBUTFN9LAorICB7InJzYV9yYzRfNTZfc2hhIiwgVExTX1JTQV9FWFBPUlQxMDI0X1dJVEhfUkM0XzU2X1NIQSwgU1NMMyB8IFRMU30sCisgIC8qIEFFUyBjaXBoZXJzLiAqLworICB7InJzYV9hZXNfMTI4X3NoYSIsIFRMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEsIFNTTDMgfCBUTFN9LAorICB7InJzYV9hZXNfMjU2X3NoYSIsIFRMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEsIFNTTDMgfCBUTFN9LAorI2lmZGVmIE5TU19FTkFCTEVfRUNDCisgIC8qIEVDQyBjaXBoZXJzLiAqLworICB7ImVjZGhfZWNkc2FfbnVsbF9zaGEiLCBUTFNfRUNESF9FQ0RTQV9XSVRIX05VTExfU0hBLCBUTFN9LAorICB7ImVjZGhfZWNkc2FfcmM0XzEyOF9zaGEiLCBUTFNfRUNESF9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBLCBUTFN9LAorICB7ImVjZGhfZWNkc2FfM2Rlc19zaGEiLCBUTFNfRUNESF9FQ0RTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsIFRMU30sCisgIHsiZWNkaF9lY2RzYV9hZXNfMTI4X3NoYSIsIFRMU19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLCBUTFN9LAorICB7ImVjZGhfZWNkc2FfYWVzXzI1Nl9zaGEiLCBUTFNfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwgVExTfSwKKyAgeyJlY2RoZV9lY2RzYV9udWxsX3NoYSIsIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX05VTExfU0hBLCBUTFN9LAorICB7ImVjZGhlX2VjZHNhX3JjNF8xMjhfc2hhIiwgVExTX0VDREhFX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEsIFRMU30sCisgIHsiZWNkaGVfZWNkc2FfM2Rlc19zaGEiLCBUTFNfRUNESEVfRUNEU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBLCBUTFN9LAorICB7ImVjZGhlX2VjZHNhX2Flc18xMjhfc2hhIiwgVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLCBUTFN9LAorICB7ImVjZGhlX2VjZHNhX2Flc18yNTZfc2hhIiwgVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLCBUTFN9LAorICB7ImVjZGhfcnNhX251bGxfc2hhIiwgVExTX0VDREhfUlNBX1dJVEhfTlVMTF9TSEEsIFRMU30sCisgIHsiZWNkaF9yc2FfMTI4X3NoYSIsIFRMU19FQ0RIX1JTQV9XSVRIX1JDNF8xMjhfU0hBLCBUTFN9LAorICB7ImVjZGhfcnNhXzNkZXNfc2hhIiwgVExTX0VDREhfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwgVExTfSwKKyAgeyJlY2RoX3JzYV9hZXNfMTI4X3NoYSIsIFRMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwgVExTfSwKKyAgeyJlY2RoX3JzYV9hZXNfMjU2X3NoYSIsIFRMU19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwgVExTfSwKKyAgeyJlY2hkZV9yc2FfbnVsbCIsIFRMU19FQ0RIRV9SU0FfV0lUSF9OVUxMX1NIQSwgVExTfSwKKyAgeyJlY2RoZV9yc2FfcmM0XzEyOF9zaGEiLCBUTFNfRUNESEVfUlNBX1dJVEhfUkM0XzEyOF9TSEEsIFRMU30sCisgIHsiZWNkaGVfcnNhXzNkZXNfc2hhIiwgVExTX0VDREhFX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsIFRMU30sCisgIHsiZWNkaGVfcnNhX2Flc18xMjhfc2hhIiwgVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwgVExTfSwKKyAgeyJlY2RoZV9yc2FfYWVzXzI1Nl9zaGEiLCBUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLCBUTFN9LAorICB7ImVjZGhfYW5vbl9udWxsX3NoYSIsIFRMU19FQ0RIX2Fub25fV0lUSF9OVUxMX1NIQSwgVExTfSwKKyAgeyJlY2RoX2Fub25fcmM0XzEyOHNoYSIsIFRMU19FQ0RIX2Fub25fV0lUSF9SQzRfMTI4X1NIQSwgVExTfSwKKyAgeyJlY2RoX2Fub25fM2Rlc19zaGEiLCBUTFNfRUNESF9hbm9uX1dJVEhfM0RFU19FREVfQ0JDX1NIQSwgVExTfSwKKyAgeyJlY2RoX2Fub25fYWVzXzEyOF9zaGEiLCBUTFNfRUNESF9hbm9uX1dJVEhfQUVTXzEyOF9DQkNfU0hBLCBUTFN9LAorICB7ImVjZGhfYW5vbl9hZXNfMjU2X3NoYSIsIFRMU19FQ0RIX2Fub25fV0lUSF9BRVNfMjU2X0NCQ19TSEEsIFRMU30sCisjZW5kaWYKK307CisKKy8qIGZvbGxvd2luZyBjaXBoZXJzIGFyZSBuZXcgaW4gTlNTIDMuNCBhbmQgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhlcmVmb3JlCisgICB0aGV5IGFyZSBlbmFibGVkIGV4cGxpY2l0bHkgKi8KK3N0YXRpYyBjb25zdCBpbnQgZW5hYmxlX2NpcGhlcnNfYnlfZGVmYXVsdFtdID0geworICBUTFNfREhFX0RTU19XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKyAgVExTX0RIRV9EU1NfV0lUSF9BRVNfMjU2X0NCQ19TSEEsCisgIFRMU19ESEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAorICBUTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKyAgVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKyAgVExTX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKyAgU1NMX05VTExfV0lUSF9OVUxMX05VTEwKK307CisKKyNpZmRlZiBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVAorc3RhdGljIGNvbnN0IGNoYXIqIHBlbV9saWJyYXJ5ID0gImxpYm5zc3BlbS5zbyI7CisjZW5kaWYKK1NFQ01PRE1vZHVsZSogbW9kID0gTlVMTDsKKworc3RhdGljIFNFQ1N0YXR1cyBzZXRfY2lwaGVycyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgUFJGaWxlRGVzYyAqIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjaXBoZXJfbGlzdCkKK3sKKyAgdW5zaWduZWQgaW50IGk7CisgIFBSQm9vbCBjaXBoZXJfc3RhdGVbTlVNX09GX0NJUEhFUlNdOworICBQUkJvb2wgZm91bmQ7CisgIGNoYXIgKmNpcGhlcjsKKyAgU0VDU3RhdHVzIHJ2OworCisgIC8qIEZpcnN0IGRpc2FibGUgYWxsIGNpcGhlcnMuIFRoaXMgdXNlcyBhIGRpZmZlcmVudCBtYXggdmFsdWUgaW4gY2FzZQorICAgKiBOU1MgYWRkcyBtb3JlIGNpcGhlcnMgbGF0ZXIgd2UgZG9uJ3Qgd2FudCB0aGVtIGF2YWlsYWJsZSBieQorICAgKiBhY2NpZGVudAorICAgKi8KKyAgZm9yKGk9MDsgaTxTU0xfTnVtSW1wbGVtZW50ZWRDaXBoZXJzOyBpKyspIHsKKyAgICBTU0xfQ2lwaGVyUHJlZlNldChtb2RlbCwgU1NMX0ltcGxlbWVudGVkQ2lwaGVyc1tpXSwgU1NMX05PVF9BTExPV0VEKTsKKyAgfQorCisgIC8qIFNldCBldmVyeSBlbnRyeSBpbiBvdXIgbGlzdCB0byBmYWxzZSAqLworICBmb3IoaT0wOyBpPE5VTV9PRl9DSVBIRVJTOyBpKyspIHsKKyAgICBjaXBoZXJfc3RhdGVbaV0gPSBQUl9GQUxTRTsKKyAgfQorCisgIGNpcGhlciA9IGNpcGhlcl9saXN0OworCisgIHdoaWxlKGNpcGhlcl9saXN0ICYmIChjaXBoZXJfbGlzdFswXSkpIHsKKyAgICB3aGlsZSgoKmNpcGhlcikgJiYgKElTU1BBQ0UoKmNpcGhlcikpKQorICAgICAgKytjaXBoZXI7CisKKyAgICBpZigoY2lwaGVyX2xpc3QgPSBzdHJjaHIoY2lwaGVyLCAnLCcpKSkgeworICAgICAgKmNpcGhlcl9saXN0KysgPSAnXDAnOworICAgIH0KKworICAgIGZvdW5kID0gUFJfRkFMU0U7CisKKyAgICBmb3IoaT0wOyBpPE5VTV9PRl9DSVBIRVJTOyBpKyspIHsKKyAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKGNpcGhlciwgY2lwaGVybGlzdFtpXS5uYW1lKSkgeworICAgICAgICBjaXBoZXJfc3RhdGVbaV0gPSBQUl9UUlVFOworICAgICAgICBmb3VuZCA9IFBSX1RSVUU7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGlmKGZvdW5kID09IFBSX0ZBTFNFKSB7CisgICAgICBmYWlsZihkYXRhLCAiVW5rbm93biBjaXBoZXIgaW4gbGlzdDogJXMiLCBjaXBoZXIpOworICAgICAgcmV0dXJuIFNFQ0ZhaWx1cmU7CisgICAgfQorCisgICAgaWYoY2lwaGVyX2xpc3QpIHsKKyAgICAgIGNpcGhlciA9IGNpcGhlcl9saXN0OworICAgIH0KKyAgfQorCisgIC8qIEZpbmFsbHkgYWN0dWFsbHkgZW5hYmxlIHRoZSBzZWxlY3RlZCBjaXBoZXJzICovCisgIGZvcihpPTA7IGk8TlVNX09GX0NJUEhFUlM7IGkrKykgeworICAgIHJ2ID0gU1NMX0NpcGhlclByZWZTZXQobW9kZWwsIGNpcGhlcmxpc3RbaV0ubnVtLCBjaXBoZXJfc3RhdGVbaV0pOworICAgIGlmKHJ2ICE9IFNFQ1N1Y2Nlc3MpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJVbmtub3duIGNpcGhlciBpbiBjaXBoZXIgbGlzdCIpOworICAgICAgcmV0dXJuIFNFQ0ZhaWx1cmU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIFNFQ1N1Y2Nlc3M7Cit9CisKKy8qCisgKiBHZXQgdGhlIG51bWJlciBvZiBjaXBoZXJzIHRoYXQgYXJlIGVuYWJsZWQuIFdlIHVzZSB0aGlzIHRvIGRldGVybWluZQorICogaWYgd2UgbmVlZCB0byBjYWxsIE5TU19TZXREb21lc3RpY1BvbGljeSgpIHRvIGVuYWJsZSB0aGUgZGVmYXVsdCBjaXBoZXJzLgorICovCitzdGF0aWMgaW50IG51bV9lbmFibGVkX2NpcGhlcnModm9pZCkKK3sKKyAgUFJJbnQzMiBwb2xpY3kgPSAwOworICBpbnQgY291bnQgPSAwOworICB1bnNpZ25lZCBpbnQgaTsKKworICBmb3IoaT0wOyBpPE5VTV9PRl9DSVBIRVJTOyBpKyspIHsKKyAgICBTU0xfQ2lwaGVyUG9saWN5R2V0KGNpcGhlcmxpc3RbaV0ubnVtLCAmcG9saWN5KTsKKyAgICBpZihwb2xpY3kpCisgICAgICBjb3VudCsrOworICB9CisgIHJldHVybiBjb3VudDsKK30KKworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIHRoZSBuaWNrbmFtZSBwYXNzZWQgaW4gaXMgYSBmaWxlbmFtZSB0aGF0IG5lZWRzIHRvCisgKiBiZSBsb2FkZWQgYXMgYSBQRU0gb3IgYSByZWd1bGFyIE5TUyBuaWNrbmFtZS4KKyAqCisgKiByZXR1cm5zIDEgZm9yIGEgZmlsZQorICogcmV0dXJucyAwIGZvciBub3QgYSBmaWxlIChOU1Mgbmlja25hbWUpCisgKi8KK3N0YXRpYyBpbnQgaXNfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgc3RydWN0X3N0YXQgc3Q7CisKKyAgaWYoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICBpZihzdGF0KGZpbGVuYW1lLCAmc3QpID09IDApCisgICAgaWYoU19JU1JFRyhzdC5zdF9tb2RlKSkKKyAgICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCisvKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGZpbGVuYW1lIG9yIG5pY2tuYW1lIG9mIGEgY2VydGlmaWNhdGUuICBJZiB0aGUKKyAqIGdpdmVuIHN0cmluZyBpcyByZWNvZ25pemVkIGFzIGZpbGVuYW1lLCByZXR1cm4gTlVMTC4gIElmIHRoZSBnaXZlbiBzdHJpbmcgaXMKKyAqIHJlY29nbml6ZWQgYXMgbmlja25hbWUsIHJldHVybiBhIGR1cGxpY2F0ZWQgc3RyaW5nLiAgVGhlIHJldHVybmVkIHN0cmluZworICogc2hvdWxkIGJlIGxhdGVyIGRlYWxsb2NhdGVkIHVzaW5nIGZyZWUoKS4gIElmIHRoZSBPT00gZmFpbHVyZSBvY2N1cnMsIHdlCisgKiByZXR1cm4gTlVMTCwgdG9vLgorICovCitzdGF0aWMgY2hhciogZHVwX25pY2tuYW1lKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBlbnVtIGR1cHN0cmluZyBjZXJ0X2tpbmQpCit7CisgIGNvbnN0IGNoYXIgKnN0ciA9IGRhdGEtPnNldC5zdHJbY2VydF9raW5kXTsKKyAgY29uc3QgY2hhciAqbjsKKworICBpZighaXNfZmlsZShzdHIpKQorICAgIC8qIG5vIHN1Y2ggZmlsZSBleGlzdHMsIHVzZSB0aGUgc3RyaW5nIGFzIG5pY2tuYW1lICovCisgICAgcmV0dXJuIHN0cmR1cChzdHIpOworCisgIC8qIHNlYXJjaCB0aGUgbGFzdCBzbGFzaDsgd2UgcmVxdWlyZSBhdCBsZWFzdCBvbmUgc2xhc2ggaW4gYSBmaWxlIG5hbWUgKi8KKyAgbiA9IHN0cnJjaHIoc3RyLCAnLycpOworICBpZighbikgeworICAgIGluZm9mKGRhdGEsICJ3YXJuaW5nOiBjZXJ0aWZpY2F0ZSBmaWxlIG5hbWUgXCIlc1wiIGhhbmRsZWQgYXMgbmlja25hbWU7ICIKKyAgICAgICAgICAicGxlYXNlIHVzZSBcIi4vJXNcIiB0byBmb3JjZSBmaWxlIG5hbWVcbiIsIHN0ciwgc3RyKTsKKyAgICByZXR1cm4gc3RyZHVwKHN0cik7CisgIH0KKworICAvKiB3ZSdsbCB1c2UgdGhlIFBFTSByZWFkZXIgdG8gcmVhZCB0aGUgY2VydGlmaWNhdGUgZnJvbSBmaWxlICovCisgIHJldHVybiBOVUxMOworfQorCisjaWZkZWYgSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QKKy8qIENhbGwgUEsxMV9DcmVhdGVHZW5lcmljT2JqZWN0KCkgd2l0aCB0aGUgZ2l2ZW4gb2JqX2NsYXNzIGFuZCBmaWxlbmFtZS4gIElmCisgKiB0aGUgY2FsbCBzdWNjZWVkcywgYXBwZW5kIHRoZSBvYmplY3QgaGFuZGxlIHRvIHRoZSBsaXN0IG9mIG9iamVjdHMgc28gdGhhdAorICogdGhlIG9iamVjdCBjYW4gYmUgZGVzdHJveWVkIGluIEN1cmxfbnNzX2Nsb3NlKCkuICovCitzdGF0aWMgQ1VSTGNvZGUgbnNzX2NyZWF0ZV9vYmplY3Qoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDS19PQkpFQ1RfQ0xBU1Mgb2JqX2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBib29sIGNhY2VydCkKK3sKKyAgUEsxMVNsb3RJbmZvICpzbG90OworICBQSzExR2VuZXJpY09iamVjdCAqb2JqOworICBDS19CQk9PTCBja3RydWUgPSBDS19UUlVFOworICBDS19CQk9PTCBja2ZhbHNlID0gQ0tfRkFMU0U7CisgIENLX0FUVFJJQlVURSBhdHRyc1svKiBtYXggY291bnQgb2YgYXR0cmlidXRlcyAqLyA0XTsKKyAgaW50IGF0dHJfY250ID0gMDsKKyAgQ1VSTGNvZGUgZXJyID0gKGNhY2VydCkKKyAgICA/IENVUkxFX1NTTF9DQUNFUlRfQkFERklMRQorICAgIDogQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworCisgIGNvbnN0IGludCBzbG90X2lkID0gKGNhY2VydCkgPyAwIDogMTsKKyAgY2hhciAqc2xvdF9uYW1lID0gYXByaW50ZigiUEVNIFRva2VuICMlZCIsIHNsb3RfaWQpOworICBpZighc2xvdF9uYW1lKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHNsb3QgPSBQSzExX0ZpbmRTbG90QnlOYW1lKHNsb3RfbmFtZSk7CisgIGZyZWUoc2xvdF9uYW1lKTsKKyAgaWYoIXNsb3QpCisgICAgcmV0dXJuIGVycjsKKworICBQSzExX1NFVEFUVFJTKGF0dHJzLCBhdHRyX2NudCwgQ0tBX0NMQVNTLCAmb2JqX2NsYXNzLCBzaXplb2Yob2JqX2NsYXNzKSk7CisgIFBLMTFfU0VUQVRUUlMoYXR0cnMsIGF0dHJfY250LCBDS0FfVE9LRU4sICZja3RydWUsIHNpemVvZihDS19CQk9PTCkpOworICBQSzExX1NFVEFUVFJTKGF0dHJzLCBhdHRyX2NudCwgQ0tBX0xBQkVMLCAodW5zaWduZWQgY2hhciAqKWZpbGVuYW1lLAorICAgICAgICAgICAgICAgIHN0cmxlbihmaWxlbmFtZSkgKyAxKTsKKworICBpZihDS09fQ0VSVElGSUNBVEUgPT0gb2JqX2NsYXNzKSB7CisgICAgQ0tfQkJPT0wgKnB2YWwgPSAoY2FjZXJ0KSA/ICgmY2t0cnVlKSA6ICgmY2tmYWxzZSk7CisgICAgUEsxMV9TRVRBVFRSUyhhdHRycywgYXR0cl9jbnQsIENLQV9UUlVTVCwgcHZhbCwgc2l6ZW9mKCpwdmFsKSk7CisgIH0KKworICBvYmogPSBQSzExX0NyZWF0ZUdlbmVyaWNPYmplY3Qoc2xvdCwgYXR0cnMsIGF0dHJfY250LCBQUl9GQUxTRSk7CisgIFBLMTFfRnJlZVNsb3Qoc2xvdCk7CisgIGlmKCFvYmopCisgICAgcmV0dXJuIGVycjsKKworICBpZighQ3VybF9sbGlzdF9pbnNlcnRfbmV4dChzc2wtPm9ial9saXN0LCBzc2wtPm9ial9saXN0LT50YWlsLCBvYmopKSB7CisgICAgUEsxMV9EZXN0cm95R2VuZXJpY09iamVjdChvYmopOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgaWYoIWNhY2VydCAmJiBDS09fQ0VSVElGSUNBVEUgPT0gb2JqX2NsYXNzKQorICAgIC8qIHN0b3JlIHJlZmVyZW5jZSB0byBhIGNsaWVudCBjZXJ0aWZpY2F0ZSAqLworICAgIHNzbC0+b2JqX2NsaWNlcnQgPSBvYmo7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKiBEZXN0cm95IHRoZSBOU1Mgb2JqZWN0IHdob3NlIGhhbmRsZSBpcyBnaXZlbiBieSBwdHIuICBUaGlzIGZ1bmN0aW9uIGlzCisgKiBhIGNhbGxiYWNrIG9mIEN1cmxfbGxpc3RfYWxsb2MoKSB1c2VkIGJ5IEN1cmxfbGxpc3RfZGVzdHJveSgpIHRvIGRlc3Ryb3kKKyAqIE5TUyBvYmplY3RzIGluIEN1cmxfbnNzX2Nsb3NlKCkgKi8KK3N0YXRpYyB2b2lkIG5zc19kZXN0cm95X29iamVjdCh2b2lkICp1c2VyLCB2b2lkICpwdHIpCit7CisgIFBLMTFHZW5lcmljT2JqZWN0ICpvYmogPSAoUEsxMUdlbmVyaWNPYmplY3QgKilwdHI7CisgICh2b2lkKSB1c2VyOworICBQSzExX0Rlc3Ryb3lHZW5lcmljT2JqZWN0KG9iaik7Cit9CisjZW5kaWYKKworc3RhdGljIENVUkxjb2RlIG5zc19sb2FkX2NlcnQoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQUkJvb2wgY2FjZXJ0KQoreworICBDVVJMY29kZSBlcnIgPSAoY2FjZXJ0KQorICAgID8gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFCisgICAgOiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CisKKyNpZmRlZiBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVAorICAvKiBsaWJuc3NwZW0uc28gbGVha3MgbWVtb3J5IGlmIHRoZSByZXF1ZXN0ZWQgZmlsZSBkb2VzIG5vdCBleGlzdC4gIEZvciBtb3JlCisgICAqIGRldGFpbHMsIGdvIHRvIDxodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vNzM0NzYwPi4gKi8KKyAgaWYoaXNfZmlsZShmaWxlbmFtZSkpCisgICAgZXJyID0gbnNzX2NyZWF0ZV9vYmplY3Qoc3NsLCBDS09fQ0VSVElGSUNBVEUsIGZpbGVuYW1lLCBjYWNlcnQpOworCisgIGlmKENVUkxFX09LID09IGVyciAmJiAhY2FjZXJ0KSB7CisgICAgLyogd2UgaGF2ZSBzdWNjZXNzZnVsbHkgbG9hZGVkIGEgY2xpZW50IGNlcnRpZmljYXRlICovCisgICAgQ0VSVENlcnRpZmljYXRlICpjZXJ0OworICAgIGNoYXIgKm5pY2tuYW1lID0gTlVMTDsKKyAgICBjaGFyICpuID0gc3RycmNocihmaWxlbmFtZSwgJy8nKTsKKyAgICBpZihuKQorICAgICAgbisrOworCisgICAgLyogVGhlIGZvbGxvd2luZyB1bmRvY3VtZW50ZWQgbWFnaWMgaGVscHMgdG8gYXZvaWQgYSBTSUdTRUdWIG9uIGNhbGwKKyAgICAgKiBvZiBQSzExX1JlYWRSYXdBdHRyaWJ1dGUoKSBmcm9tIFNlbGVjdENsaWVudENlcnQoKSB3aGVuIHVzaW5nIGFuCisgICAgICogaW1tYXR1cmUgdmVyc2lvbiBvZiBsaWJuc3NwZW0uc28uICBGb3IgbW9yZSBkZXRhaWxzLCBnbyB0bworICAgICAqIDxodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vNzMzNjg1Pi4gKi8KKyAgICBuaWNrbmFtZSA9IGFwcmludGYoIlBFTSBUb2tlbiAjMTolcyIsIG4pOworICAgIGlmKG5pY2tuYW1lKSB7CisgICAgICBjZXJ0ID0gUEsxMV9GaW5kQ2VydEZyb21OaWNrbmFtZShuaWNrbmFtZSwgTlVMTCk7CisgICAgICBpZihjZXJ0KQorICAgICAgICBDRVJUX0Rlc3Ryb3lDZXJ0aWZpY2F0ZShjZXJ0KTsKKworICAgICAgZnJlZShuaWNrbmFtZSk7CisgICAgfQorICB9CisjZW5kaWYKKworICByZXR1cm4gZXJyOworfQorCisvKiBhZGQgZ2l2ZW4gQ1JMIHRvIGNhY2hlIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHRoZXJlICovCitzdGF0aWMgU0VDU3RhdHVzIG5zc19jYWNoZV9jcmwoU0VDSXRlbSAqY3JsREVSKQoreworICBDRVJUQ2VydERCSGFuZGxlICpkYiA9IENFUlRfR2V0RGVmYXVsdENlcnREQigpOworICBDRVJUU2lnbmVkQ3JsICpjcmwgPSBTRUNfRmluZENybEJ5REVSQ2VydChkYiwgY3JsREVSLCAwKTsKKyAgaWYoY3JsKSB7CisgICAgLyogQ1JMIGFscmVhZHkgY2FjaGVkICovCisgICAgU0VDX0Rlc3Ryb3lDcmwoY3JsKTsKKyAgICBTRUNJVEVNX0ZyZWVJdGVtKGNybERFUiwgUFJfRkFMU0UpOworICAgIHJldHVybiBTRUNTdWNjZXNzOworICB9CisKKyAgLyogYWNxdWlyZSBsb2NrIGJlZm9yZSBjYWxsIG9mIENFUlRfQ2FjaGVDUkwoKSAqLworICBQUl9Mb2NrKG5zc19jcmxsb2NrKTsKKyAgaWYoU0VDU3VjY2VzcyAhPSBDRVJUX0NhY2hlQ1JMKGRiLCBjcmxERVIpKSB7CisgICAgLyogdW5hYmxlIHRvIGNhY2hlIENSTCAqLworICAgIFBSX1VubG9jayhuc3NfY3JsbG9jayk7CisgICAgU0VDSVRFTV9GcmVlSXRlbShjcmxERVIsIFBSX0ZBTFNFKTsKKyAgICByZXR1cm4gU0VDRmFpbHVyZTsKKyAgfQorCisgIC8qIHdlIG5lZWQgdG8gY2xlYXIgc2Vzc2lvbiBjYWNoZSwgc28gdGhhdCB0aGUgQ1JMIGNvdWxkIHRha2UgZWZmZWN0ICovCisgIFNTTF9DbGVhclNlc3Npb25DYWNoZSgpOworICBQUl9VbmxvY2sobnNzX2NybGxvY2spOworICByZXR1cm4gU0VDU3VjY2VzczsKK30KKworc3RhdGljIFNFQ1N0YXR1cyBuc3NfbG9hZF9jcmwoY29uc3QgY2hhciogY3JsZmlsZW5hbWUpCit7CisgIFBSRmlsZURlc2MgKmluZmlsZTsKKyAgUFJGaWxlSW5mbyAgaW5mbzsKKyAgU0VDSXRlbSBmaWxlZGF0YSA9IHsgMCwgTlVMTCwgMCB9OworICBTRUNJdGVtIGNybERFUiA9IHsgMCwgTlVMTCwgMCB9OworICBjaGFyICpib2R5OworCisgIGluZmlsZSA9IFBSX09wZW4oY3JsZmlsZW5hbWUsIFBSX1JET05MWSwgMCk7CisgIGlmKCFpbmZpbGUpCisgICAgcmV0dXJuIFNFQ0ZhaWx1cmU7CisKKyAgaWYoUFJfU1VDQ0VTUyAhPSBQUl9HZXRPcGVuRmlsZUluZm8oaW5maWxlLCAmaW5mbykpCisgICAgZ290byBmYWlsOworCisgIGlmKCFTRUNJVEVNX0FsbG9jSXRlbShOVUxMLCAmZmlsZWRhdGEsIGluZm8uc2l6ZSArIC8qIHplcm8gZW5kZWQgKi8gMSkpCisgICAgZ290byBmYWlsOworCisgIGlmKGluZm8uc2l6ZSAhPSBQUl9SZWFkKGluZmlsZSwgZmlsZWRhdGEuZGF0YSwgaW5mby5zaXplKSkKKyAgICBnb3RvIGZhaWw7CisKKyAgLyogcGxhY2UgYSB0cmFpbGluZyB6ZXJvIHJpZ2h0IGFmdGVyIHRoZSB2aXNpYmxlIGRhdGEgKi8KKyAgYm9keSA9IChjaGFyKilmaWxlZGF0YS5kYXRhOworICBib2R5Wy0tZmlsZWRhdGEubGVuXSA9ICdcMCc7CisKKyAgYm9keSA9IHN0cnN0cihib2R5LCAiLS0tLS1CRUdJTiIpOworICBpZihib2R5KSB7CisgICAgLyogYXNzdW1lIEFTQ0lJICovCisgICAgY2hhciAqdHJhaWxlcjsKKyAgICBjaGFyICpiZWdpbiA9IFBPUlRfU3RyY2hyKGJvZHksICdcbicpOworICAgIGlmKCFiZWdpbikKKyAgICAgIGJlZ2luID0gUE9SVF9TdHJjaHIoYm9keSwgJ1xyJyk7CisgICAgaWYoIWJlZ2luKQorICAgICAgZ290byBmYWlsOworCisgICAgdHJhaWxlciA9IHN0cnN0cigrK2JlZ2luLCAiLS0tLS1FTkQiKTsKKyAgICBpZighdHJhaWxlcikKKyAgICAgIGdvdG8gZmFpbDsKKworICAgIC8qIHJldHJpZXZlIERFUiBmcm9tIEFTQ0lJICovCisgICAgKnRyYWlsZXIgPSAnXDAnOworICAgIGlmKEFUT0JfQ29udmVydEFzY2lpVG9JdGVtKCZjcmxERVIsIGJlZ2luKSkKKyAgICAgIGdvdG8gZmFpbDsKKworICAgIFNFQ0lURU1fRnJlZUl0ZW0oJmZpbGVkYXRhLCBQUl9GQUxTRSk7CisgIH0KKyAgZWxzZQorICAgIC8qIGFzc3VtZSBERVIgKi8KKyAgICBjcmxERVIgPSBmaWxlZGF0YTsKKworICBQUl9DbG9zZShpbmZpbGUpOworICByZXR1cm4gbnNzX2NhY2hlX2NybCgmY3JsREVSKTsKKworZmFpbDoKKyAgUFJfQ2xvc2UoaW5maWxlKTsKKyAgU0VDSVRFTV9GcmVlSXRlbSgmZmlsZWRhdGEsIFBSX0ZBTFNFKTsKKyAgcmV0dXJuIFNFQ0ZhaWx1cmU7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBuc3NfbG9hZF9rZXkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICprZXlfZmlsZSkKK3sKKyNpZmRlZiBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVAorICBQSzExU2xvdEluZm8gKnNsb3Q7CisgIFNFQ1N0YXR1cyBzdGF0dXM7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpzc2wgPSBjb25uLT5zc2w7CisKKyAgQ1VSTGNvZGUgcnYgPSBuc3NfY3JlYXRlX29iamVjdChzc2wsIENLT19QUklWQVRFX0tFWSwga2V5X2ZpbGUsIEZBTFNFKTsKKyAgaWYoQ1VSTEVfT0sgIT0gcnYpIHsKKyAgICBQUl9TZXRFcnJvcihTRUNfRVJST1JfQkFEX0tFWSwgMCk7CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgc2xvdCA9IFBLMTFfRmluZFNsb3RCeU5hbWUoIlBFTSBUb2tlbiAjMSIpOworICBpZighc2xvdCkKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworCisgIC8qIFRoaXMgd2lsbCBmb3JjZSB0aGUgdG9rZW4gdG8gYmUgc2VlbiBhcyByZS1pbnNlcnRlZCAqLworICBTRUNNT0RfV2FpdEZvckFueVRva2VuRXZlbnQobW9kLCAwLCAwKTsKKyAgUEsxMV9Jc1ByZXNlbnQoc2xvdCk7CisKKyAgc3RhdHVzID0gUEsxMV9BdXRoZW50aWNhdGUoc2xvdCwgUFJfVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+ZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BBU1NXRF0pOworICBQSzExX0ZyZWVTbG90KHNsb3QpOworICByZXR1cm4gKFNFQ1N1Y2Nlc3MgPT0gc3RhdHVzKQorICAgID8gQ1VSTEVfT0sKKyAgICA6IENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyNlbHNlCisgIC8qIElmIHdlIGRvbid0IGhhdmUgUEsxMV9DcmVhdGVHZW5lcmljT2JqZWN0IHRoZW4gd2UgY2FuJ3QgbG9hZCBhIGZpbGUtYmFzZWQKKyAgICoga2V5LgorICAgKi8KKyAgKHZvaWQpY29ubjsgLyogdW51c2VkICovCisgICh2b2lkKWtleV9maWxlOyAvKiB1bnVzZWQgKi8KKyAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyNlbmRpZgorICAodm9pZClzb2NraW5kZXg7IC8qIHVudXNlZCAqLworfQorCitzdGF0aWMgaW50IGRpc3BsYXlfZXJyb3Ioc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBQUkludDMyIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgc3dpdGNoKGVycikgeworICBjYXNlIFNFQ19FUlJPUl9CQURfUEFTU1dPUkQ6CisgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlVuYWJsZSB0byBsb2FkIGNsaWVudCBrZXk6IEluY29ycmVjdCBwYXNzd29yZCIpOworICAgIHJldHVybiAxOworICBjYXNlIFNFQ19FUlJPUl9VTktOT1dOX0NFUlQ6CisgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlVuYWJsZSB0byBsb2FkIGNlcnRpZmljYXRlICVzIiwgZmlsZW5hbWUpOworICAgIHJldHVybiAxOworICBkZWZhdWx0OgorICAgIGJyZWFrOworICB9CisgIHJldHVybiAwOyAvKiBUaGUgY2FsbGVyIHdpbGwgcHJpbnQgYSBnZW5lcmljIGVycm9yICovCit9CisKK3N0YXRpYyBDVVJMY29kZSBjZXJ0X3N0dWZmKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNlcnRfZmlsZSwgY2hhciAqa2V5X2ZpbGUpCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgQ1VSTGNvZGUgcnY7CisKKyAgaWYoY2VydF9maWxlKSB7CisgICAgcnYgPSBuc3NfbG9hZF9jZXJ0KCZjb25uLT5zc2xbc29ja2luZGV4XSwgY2VydF9maWxlLCBQUl9GQUxTRSk7CisgICAgaWYoQ1VSTEVfT0sgIT0gcnYpIHsKKyAgICAgIGlmKCFkaXNwbGF5X2Vycm9yKGNvbm4sIFBSX0dldEVycm9yKCksIGNlcnRfZmlsZSkpCisgICAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gbG9hZCBjbGllbnQgY2VydCAlZC4iLCBQUl9HZXRFcnJvcigpKTsKKworICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgfQorCisgIGlmKGtleV9maWxlIHx8IChpc19maWxlKGNlcnRfZmlsZSkpKSB7CisgICAgaWYoa2V5X2ZpbGUpCisgICAgICBydiA9IG5zc19sb2FkX2tleShjb25uLCBzb2NraW5kZXgsIGtleV9maWxlKTsKKyAgICBlbHNlCisgICAgICAvKiBJbiBjYXNlIHRoZSBjZXJ0IGZpbGUgYWxzbyBoYXMgdGhlIGtleSAqLworICAgICAgcnYgPSBuc3NfbG9hZF9rZXkoY29ubiwgc29ja2luZGV4LCBjZXJ0X2ZpbGUpOworICAgIGlmKENVUkxFX09LICE9IHJ2KSB7CisgICAgICBpZighZGlzcGxheV9lcnJvcihjb25uLCBQUl9HZXRFcnJvcigpLCBrZXlfZmlsZSkpCisgICAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gbG9hZCBjbGllbnQga2V5ICVkLiIsIFBSX0dldEVycm9yKCkpOworCisgICAgICByZXR1cm4gcnY7CisgICAgfQorICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgY2hhciAqIG5zc19nZXRfcGFzc3dvcmQoUEsxMVNsb3RJbmZvICogc2xvdCwgUFJCb29sIHJldHJ5LCB2b2lkICphcmcpCit7CisgICh2b2lkKXNsb3Q7IC8qIHVudXNlZCAqLworICBpZihyZXRyeSB8fCBOVUxMID09IGFyZykKKyAgICByZXR1cm4gTlVMTDsKKyAgZWxzZQorICAgIHJldHVybiAoY2hhciAqKVBPUlRfU3RyZHVwKChjaGFyICopYXJnKTsKK30KKworLyogYnlwYXNzIHRoZSBkZWZhdWx0IFNTTF9BdXRoQ2VydGlmaWNhdGUoKSBob29rIGluIGNhc2Ugd2UgZG8gbm90IHdhbnQgdG8KKyAqIHZlcmlmeSBwZWVyICovCitzdGF0aWMgU0VDU3RhdHVzIG5zc19hdXRoX2NlcnRfaG9vayh2b2lkICphcmcsIFBSRmlsZURlc2MgKmZkLCBQUkJvb2wgY2hlY2tzaWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgaXNTZXJ2ZXIpCit7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IChzdHJ1Y3QgY29ubmVjdGRhdGEgKilhcmc7CisgIGlmKCFjb25uLT5kYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpIHsKKyAgICBpbmZvZihjb25uLT5kYXRhLCAic2tpcHBpbmcgU1NMIHBlZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uXG4iKTsKKyAgICByZXR1cm4gU0VDU3VjY2VzczsKKyAgfQorCisgIHJldHVybiBTU0xfQXV0aENlcnRpZmljYXRlKENFUlRfR2V0RGVmYXVsdENlcnREQigpLCBmZCwgY2hlY2tzaWcsIGlzU2VydmVyKTsKK30KKworc3RhdGljIFNFQ1N0YXR1cyBCYWRDZXJ0SGFuZGxlcih2b2lkICphcmcsIFBSRmlsZURlc2MgKnNvY2spCit7CisgIFNFQ1N0YXR1cyByZXN1bHQgPSBTRUNGYWlsdXJlOworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSAoc3RydWN0IGNvbm5lY3RkYXRhICopYXJnOworICBQUkVycm9yQ29kZSBlcnIgPSBQUl9HZXRFcnJvcigpOworICBDRVJUQ2VydGlmaWNhdGUgKmNlcnQgPSBOVUxMOworICBjaGFyICpzdWJqZWN0LCAqc3ViamVjdF9jbiwgKmlzc3VlcjsKKworICBjb25uLT5kYXRhLT5zZXQuc3NsLmNlcnR2ZXJpZnlyZXN1bHQ9ZXJyOworICBjZXJ0ID0gU1NMX1BlZXJDZXJ0aWZpY2F0ZShzb2NrKTsKKyAgc3ViamVjdCA9IENFUlRfTmFtZVRvQXNjaWkoJmNlcnQtPnN1YmplY3QpOworICBzdWJqZWN0X2NuID0gQ0VSVF9HZXRDb21tb25OYW1lKCZjZXJ0LT5zdWJqZWN0KTsKKyAgaXNzdWVyID0gQ0VSVF9OYW1lVG9Bc2NpaSgmY2VydC0+aXNzdWVyKTsKKyAgQ0VSVF9EZXN0cm95Q2VydGlmaWNhdGUoY2VydCk7CisKKyAgc3dpdGNoKGVycikgeworICBjYXNlIFNFQ19FUlJPUl9DQV9DRVJUX0lOVkFMSUQ6CisgICAgaW5mb2YoY29ubi0+ZGF0YSwgIklzc3VlciBjZXJ0aWZpY2F0ZSBpcyBpbnZhbGlkOiAnJXMnXG4iLCBpc3N1ZXIpOworICAgIGJyZWFrOworICBjYXNlIFNFQ19FUlJPUl9VTlRSVVNURURfSVNTVUVSOgorICAgIGluZm9mKGNvbm4tPmRhdGEsICJDZXJ0aWZpY2F0ZSBpcyBzaWduZWQgYnkgYW4gdW50cnVzdGVkIGlzc3VlcjogJyVzJ1xuIiwKKyAgICAgICAgICBpc3N1ZXIpOworICAgIGJyZWFrOworICBjYXNlIFNTTF9FUlJPUl9CQURfQ0VSVF9ET01BSU46CisgICAgaWYoY29ubi0+ZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0KSB7CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMOiBjZXJ0aWZpY2F0ZSBzdWJqZWN0IG5hbWUgJyVzJyBkb2VzIG5vdCBtYXRjaCAiCisgICAgICAgICAgICAidGFyZ2V0IGhvc3QgbmFtZSAnJXMnIiwgc3ViamVjdF9jbiwgY29ubi0+aG9zdC5kaXNwbmFtZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVzdWx0ID0gU0VDU3VjY2VzczsKKyAgICAgIGluZm9mKGNvbm4tPmRhdGEsICJ3YXJuaW5nOiBTU0w6IGNlcnRpZmljYXRlIHN1YmplY3QgbmFtZSAnJXMnIGRvZXMgbm90ICIKKyAgICAgICAgICAgICJtYXRjaCB0YXJnZXQgaG9zdCBuYW1lICclcydcbiIsIHN1YmplY3RfY24sIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBTRUNfRVJST1JfRVhQSVJFRF9DRVJUSUZJQ0FURToKKyAgICBpbmZvZihjb25uLT5kYXRhLCAiUmVtb3RlIENlcnRpZmljYXRlIGhhcyBleHBpcmVkLlxuIik7CisgICAgYnJlYWs7CisgIGNhc2UgU0VDX0VSUk9SX1VOS05PV05fSVNTVUVSOgorICAgIGluZm9mKGNvbm4tPmRhdGEsICJQZWVyJ3MgY2VydGlmaWNhdGUgaXNzdWVyIGlzIG5vdCByZWNvZ25pemVkOiAnJXMnXG4iLAorICAgICAgICAgIGlzc3Vlcik7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgaW5mb2YoY29ubi0+ZGF0YSwgIkJhZCBjZXJ0aWZpY2F0ZSByZWNlaXZlZC4gU3ViamVjdCA9ICclcycsICIKKyAgICAgICAgICAiSXNzdWVyID0gJyVzJ1xuIiwgc3ViamVjdCwgaXNzdWVyKTsKKyAgICBicmVhazsKKyAgfQorICBpZihyZXN1bHQgPT0gU0VDU3VjY2VzcykKKyAgICBpbmZvZihjb25uLT5kYXRhLCAiU1NMIGNlcnRpZmljYXRlIHZlcmlmeSBvay5cbiIpOworICBQUl9GcmVlKHN1YmplY3QpOworICBQUl9GcmVlKHN1YmplY3RfY24pOworICBQUl9GcmVlKGlzc3Vlcik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBJbmZvcm0gdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIGhhbmRzaGFrZSBpcyBjb21wbGV0ZS4KKyAqLworc3RhdGljIFNFQ1N0YXR1cyBIYW5kc2hha2VDYWxsYmFjayhQUkZpbGVEZXNjICpzb2NrLCB2b2lkICphcmcpCit7CisgICh2b2lkKXNvY2s7CisgICh2b2lkKWFyZzsKKyAgcmV0dXJuIFNFQ1N1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BsYXlfY2VydF9pbmZvKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VSVENlcnRpZmljYXRlICpjZXJ0KQoreworICBjaGFyICpzdWJqZWN0LCAqaXNzdWVyLCAqY29tbW9uX25hbWU7CisgIFBSRXhwbG9kZWRUaW1lIHByaW50YWJsZVRpbWU7CisgIGNoYXIgdGltZVN0cmluZ1syNTZdOworICBQUlRpbWUgbm90QmVmb3JlLCBub3RBZnRlcjsKKworICBzdWJqZWN0ID0gQ0VSVF9OYW1lVG9Bc2NpaSgmY2VydC0+c3ViamVjdCk7CisgIGlzc3VlciA9IENFUlRfTmFtZVRvQXNjaWkoJmNlcnQtPmlzc3Vlcik7CisgIGNvbW1vbl9uYW1lID0gQ0VSVF9HZXRDb21tb25OYW1lKCZjZXJ0LT5zdWJqZWN0KTsKKyAgaW5mb2YoZGF0YSwgIlx0c3ViamVjdDogJXNcbiIsIHN1YmplY3QpOworCisgIENFUlRfR2V0Q2VydFRpbWVzKGNlcnQsICZub3RCZWZvcmUsICZub3RBZnRlcik7CisgIFBSX0V4cGxvZGVUaW1lKG5vdEJlZm9yZSwgUFJfR01UUGFyYW1ldGVycywgJnByaW50YWJsZVRpbWUpOworICBQUl9Gb3JtYXRUaW1lKHRpbWVTdHJpbmcsIDI1NiwgIiViICVkICVIOiVNOiVTICVZIEdNVCIsICZwcmludGFibGVUaW1lKTsKKyAgaW5mb2YoZGF0YSwgIlx0c3RhcnQgZGF0ZTogJXNcbiIsIHRpbWVTdHJpbmcpOworICBQUl9FeHBsb2RlVGltZShub3RBZnRlciwgUFJfR01UUGFyYW1ldGVycywgJnByaW50YWJsZVRpbWUpOworICBQUl9Gb3JtYXRUaW1lKHRpbWVTdHJpbmcsIDI1NiwgIiViICVkICVIOiVNOiVTICVZIEdNVCIsICZwcmludGFibGVUaW1lKTsKKyAgaW5mb2YoZGF0YSwgIlx0ZXhwaXJlIGRhdGU6ICVzXG4iLCB0aW1lU3RyaW5nKTsKKyAgaW5mb2YoZGF0YSwgIlx0Y29tbW9uIG5hbWU6ICVzXG4iLCBjb21tb25fbmFtZSk7CisgIGluZm9mKGRhdGEsICJcdGlzc3VlcjogJXNcbiIsIGlzc3Vlcik7CisKKyAgUFJfRnJlZShzdWJqZWN0KTsKKyAgUFJfRnJlZShpc3N1ZXIpOworICBQUl9GcmVlKGNvbW1vbl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGxheV9jb25uX2luZm8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBQUkZpbGVEZXNjICpzb2NrKQoreworICBTU0xDaGFubmVsSW5mbyBjaGFubmVsOworICBTU0xDaXBoZXJTdWl0ZUluZm8gc3VpdGU7CisgIENFUlRDZXJ0aWZpY2F0ZSAqY2VydDsKKworICBpZihTU0xfR2V0Q2hhbm5lbEluZm8oc29jaywgJmNoYW5uZWwsIHNpemVvZiBjaGFubmVsKSA9PQorICAgICBTRUNTdWNjZXNzICYmIGNoYW5uZWwubGVuZ3RoID09IHNpemVvZiBjaGFubmVsICYmCisgICAgIGNoYW5uZWwuY2lwaGVyU3VpdGUpIHsKKyAgICBpZihTU0xfR2V0Q2lwaGVyU3VpdGVJbmZvKGNoYW5uZWwuY2lwaGVyU3VpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3VpdGUsIHNpemVvZiBzdWl0ZSkgPT0gU0VDU3VjY2VzcykgeworICAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIlNTTCBjb25uZWN0aW9uIHVzaW5nICVzXG4iLCBzdWl0ZS5jaXBoZXJTdWl0ZU5hbWUpOworICAgIH0KKyAgfQorCisgIGluZm9mKGNvbm4tPmRhdGEsICJTZXJ2ZXIgY2VydGlmaWNhdGU6XG4iKTsKKworICBjZXJ0ID0gU1NMX1BlZXJDZXJ0aWZpY2F0ZShzb2NrKTsKKyAgZGlzcGxheV9jZXJ0X2luZm8oY29ubi0+ZGF0YSwgY2VydCk7CisgIENFUlRfRGVzdHJveUNlcnRpZmljYXRlKGNlcnQpOworCisgIHJldHVybjsKK30KKworLyoqCisgKgorICogQ2hlY2sgdGhhdCB0aGUgUGVlciBjZXJ0aWZpY2F0ZSdzIGlzc3VlciBjZXJ0aWZpY2F0ZSBtYXRjaGVzIHRoZSBvbmUgZm91bmQKKyAqIGJ5IGlzc3Vlcl9uaWNrbmFtZS4gIFRoaXMgaXMgbm90IGV4YWN0bHkgdGhlIHdheSBPcGVuU1NMIGFuZCBHTlUgVExTIGRvIHRoZQorICogaXNzdWVyIGNoZWNrLCBzbyB3ZSBwcm92aWRlIGNvbW1lbnRzIHRoYXQgbWltaWMgdGhlIE9wZW5TU0wKKyAqIFg1MDlfY2hlY2tfaXNzdWVkIGZ1bmN0aW9uIChpbiB4NTA5djMvdjNfcHVycC5jKQorICovCitzdGF0aWMgU0VDU3RhdHVzIGNoZWNrX2lzc3Vlcl9jZXJ0KFBSRmlsZURlc2MgKnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlzc3Vlcl9uaWNrbmFtZSkKK3sKKyAgQ0VSVENlcnRpZmljYXRlICpjZXJ0LCpjZXJ0X2lzc3VlciwqaXNzdWVyOworICBTRUNTdGF0dXMgcmVzPVNFQ1N1Y2Nlc3M7CisgIHZvaWQgKnByb3RvX3dpbiA9IE5VTEw7CisKKyAgLyoKKyAgICBQUkFyZW5hUG9vbCAgICp0bXBBcmVuYSA9IE5VTEw7CisgICAgQ0VSVEF1dGhLZXlJRCAqYXV0aG9yaXR5S2V5SUQgPSBOVUxMOworICAgIFNFQ0lURU0gICAgICAgKmNhbmFtZSA9IE5VTEw7CisgICovCisKKyAgY2VydCA9IFNTTF9QZWVyQ2VydGlmaWNhdGUoc29jayk7CisgIGNlcnRfaXNzdWVyID0gQ0VSVF9GaW5kQ2VydElzc3VlcihjZXJ0LFBSX05vdygpLGNlcnRVc2FnZU9iamVjdFNpZ25lcik7CisKKyAgcHJvdG9fd2luID0gU1NMX1JldmVhbFBpbkFyZyhzb2NrKTsKKyAgaXNzdWVyID0gUEsxMV9GaW5kQ2VydEZyb21OaWNrbmFtZShpc3N1ZXJfbmlja25hbWUsIHByb3RvX3dpbik7CisKKyAgaWYoKCFjZXJ0X2lzc3VlcikgfHwgKCFpc3N1ZXIpKQorICAgIHJlcyA9IFNFQ0ZhaWx1cmU7CisgIGVsc2UgaWYoU0VDSVRFTV9Db21wYXJlSXRlbSgmY2VydF9pc3N1ZXItPmRlckNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXNzdWVyLT5kZXJDZXJ0KSE9U0VDRXF1YWwpCisgICAgcmVzID0gU0VDRmFpbHVyZTsKKworICBDRVJUX0Rlc3Ryb3lDZXJ0aWZpY2F0ZShjZXJ0KTsKKyAgQ0VSVF9EZXN0cm95Q2VydGlmaWNhdGUoaXNzdWVyKTsKKyAgQ0VSVF9EZXN0cm95Q2VydGlmaWNhdGUoY2VydF9pc3N1ZXIpOworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqCisgKiBDYWxsYmFjayB0byBwaWNrIHRoZSBTU0wgY2xpZW50IGNlcnRpZmljYXRlLgorICovCitzdGF0aWMgU0VDU3RhdHVzIFNlbGVjdENsaWVudENlcnQodm9pZCAqYXJnLCBQUkZpbGVEZXNjICpzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDRVJURGlzdE5hbWVzU3RyICpjYU5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDRVJUQ2VydGlmaWNhdGVTdHIgKipwUmV0Q2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU0VDS0VZUHJpdmF0ZUtleVN0ciAqKnBSZXRLZXkpCit7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gKHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICopYXJnOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm5zc2wtPmRhdGE7CisgIGNvbnN0IGNoYXIgKm5pY2tuYW1lID0gY29ubnNzbC0+Y2xpZW50X25pY2tuYW1lOworCisjaWZkZWYgSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QKKyAgaWYoY29ubnNzbC0+b2JqX2NsaWNlcnQpIHsKKyAgICAvKiB1c2UgdGhlIGNlcnQva2V5IHByb3ZpZGVkIGJ5IFBFTSByZWFkZXIgKi8KKyAgICBzdGF0aWMgY29uc3QgY2hhciBwZW1fc2xvdG5hbWVbXSA9ICJQRU0gVG9rZW4gIzEiOworICAgIFNFQ0l0ZW0gY2VydF9kZXIgPSB7IDAsIE5VTEwsIDAgfTsKKyAgICB2b2lkICpwcm90b193aW4gPSBTU0xfUmV2ZWFsUGluQXJnKHNvY2spOworCisgICAgUEsxMVNsb3RJbmZvICpzbG90ID0gUEsxMV9GaW5kU2xvdEJ5TmFtZShwZW1fc2xvdG5hbWUpOworICAgIGlmKE5VTEwgPT0gc2xvdCkgeworICAgICAgZmFpbGYoZGF0YSwgIk5TUzogUEsxMSBzbG90IG5vdCBmb3VuZDogJXMiLCBwZW1fc2xvdG5hbWUpOworICAgICAgcmV0dXJuIFNFQ0ZhaWx1cmU7CisgICAgfQorCisgICAgaWYoUEsxMV9SZWFkUmF3QXR0cmlidXRlKFBLMTFfVHlwZUdlbmVyaWMsIGNvbm5zc2wtPm9ial9jbGljZXJ0LCBDS0FfVkFMVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjZXJ0X2RlcikgIT0gU0VDU3VjY2VzcykgeworICAgICAgZmFpbGYoZGF0YSwgIk5TUzogQ0tBX1ZBTFVFIG5vdCBmb3VuZCBpbiBQSzExIGdlbmVyaWMgb2JqZWN0Iik7CisgICAgICBQSzExX0ZyZWVTbG90KHNsb3QpOworICAgICAgcmV0dXJuIFNFQ0ZhaWx1cmU7CisgICAgfQorCisgICAgKnBSZXRDZXJ0ID0gUEsxMV9GaW5kQ2VydEZyb21ERVJDZXJ0SXRlbShzbG90LCAmY2VydF9kZXIsIHByb3RvX3dpbik7CisgICAgU0VDSVRFTV9GcmVlSXRlbSgmY2VydF9kZXIsIFBSX0ZBTFNFKTsKKyAgICBpZihOVUxMID09ICpwUmV0Q2VydCkgeworICAgICAgZmFpbGYoZGF0YSwgIk5TUzogY2xpZW50IGNlcnRpZmljYXRlIGZyb20gZmlsZSBub3QgZm91bmQiKTsKKyAgICAgIFBLMTFfRnJlZVNsb3Qoc2xvdCk7CisgICAgICByZXR1cm4gU0VDRmFpbHVyZTsKKyAgICB9CisKKyAgICAqcFJldEtleSA9IFBLMTFfRmluZFByaXZhdGVLZXlGcm9tQ2VydChzbG90LCAqcFJldENlcnQsIE5VTEwpOworICAgIFBLMTFfRnJlZVNsb3Qoc2xvdCk7CisgICAgaWYoTlVMTCA9PSAqcFJldEtleSkgeworICAgICAgZmFpbGYoZGF0YSwgIk5TUzogcHJpdmF0ZSBrZXkgZnJvbSBmaWxlIG5vdCBmb3VuZCIpOworICAgICAgQ0VSVF9EZXN0cm95Q2VydGlmaWNhdGUoKnBSZXRDZXJ0KTsKKyAgICAgIHJldHVybiBTRUNGYWlsdXJlOworICAgIH0KKworICAgIGluZm9mKGRhdGEsICJOU1M6IGNsaWVudCBjZXJ0aWZpY2F0ZSBmcm9tIGZpbGVcbiIpOworICAgIGRpc3BsYXlfY2VydF9pbmZvKGRhdGEsICpwUmV0Q2VydCk7CisgICAgcmV0dXJuIFNFQ1N1Y2Nlc3M7CisgIH0KKyNlbmRpZgorCisgIC8qIHVzZSB0aGUgZGVmYXVsdCBOU1MgaG9vayAqLworICBpZihTRUNTdWNjZXNzICE9IE5TU19HZXRDbGllbnRBdXRoRGF0YSgodm9pZCAqKW5pY2tuYW1lLCBzb2NrLCBjYU5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJldENlcnQsIHBSZXRLZXkpCisgICAgICB8fCBOVUxMID09ICpwUmV0Q2VydCkgeworCisgICAgaWYoTlVMTCA9PSBuaWNrbmFtZSkKKyAgICAgIGZhaWxmKGRhdGEsICJOU1M6IGNsaWVudCBjZXJ0aWZpY2F0ZSBub3QgZm91bmQgKG5pY2tuYW1lIG5vdCAiCisgICAgICAgICAgICAic3BlY2lmaWVkKSIpOworICAgIGVsc2UKKyAgICAgIGZhaWxmKGRhdGEsICJOU1M6IGNsaWVudCBjZXJ0aWZpY2F0ZSBub3QgZm91bmQ6ICVzIiwgbmlja25hbWUpOworCisgICAgcmV0dXJuIFNFQ0ZhaWx1cmU7CisgIH0KKworICAvKiBnZXQgY2VydGlmaWNhdGUgbmlja25hbWUgaWYgYW55ICovCisgIG5pY2tuYW1lID0gKCpwUmV0Q2VydCktPm5pY2tuYW1lOworICBpZihOVUxMID09IG5pY2tuYW1lKQorICAgIG5pY2tuYW1lID0gIlt1bmtub3duXSI7CisKKyAgaWYoTlVMTCA9PSAqcFJldEtleSkgeworICAgIGZhaWxmKGRhdGEsICJOU1M6IHByaXZhdGUga2V5IG5vdCBmb3VuZCBmb3IgY2VydGlmaWNhdGU6ICVzIiwgbmlja25hbWUpOworICAgIHJldHVybiBTRUNGYWlsdXJlOworICB9CisKKyAgaW5mb2YoZGF0YSwgIk5TUzogdXNpbmcgY2xpZW50IGNlcnRpZmljYXRlOiAlc1xuIiwgbmlja25hbWUpOworICBkaXNwbGF5X2NlcnRfaW5mbyhkYXRhLCAqcFJldENlcnQpOworICByZXR1cm4gU0VDU3VjY2VzczsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBkZWNpZGUsIHdoaWNoIGVycm9yIGNvZGVzIHNob3VsZCBiZSB1c2VkCisgKiB0byBjb25jbHVkZSBzZXJ2ZXIgaXMgVExTIGludG9sZXJhbnQuCisgKgorICogdGFrZW4gZnJvbSB4dWxydW5uZXIgLSBuc05TU0lPTGF5ZXIuY3BwCisgKi8KK3N0YXRpYyBQUkJvb2wKK2lzVExTSW50b2xlcmFuY2VFcnJvcihQUkludDMyIGVycikKK3sKKyAgc3dpdGNoIChlcnIpIHsKKyAgY2FzZSBTU0xfRVJST1JfQkFEX01BQ19BTEVSVDoKKyAgY2FzZSBTU0xfRVJST1JfQkFEX01BQ19SRUFEOgorICBjYXNlIFNTTF9FUlJPUl9IQU5EU0hBS0VfRkFJTFVSRV9BTEVSVDoKKyAgY2FzZSBTU0xfRVJST1JfSEFORFNIQUtFX1VORVhQRUNURURfQUxFUlQ6CisgIGNhc2UgU1NMX0VSUk9SX0NMSUVOVF9LRVlfRVhDSEFOR0VfRkFJTFVSRToKKyAgY2FzZSBTU0xfRVJST1JfSUxMRUdBTF9QQVJBTUVURVJfQUxFUlQ6CisgIGNhc2UgU1NMX0VSUk9SX05PX0NZUEhFUl9PVkVSTEFQOgorICBjYXNlIFNTTF9FUlJPUl9CQURfU0VSVkVSOgorICBjYXNlIFNTTF9FUlJPUl9CQURfQkxPQ0tfUEFERElORzoKKyAgY2FzZSBTU0xfRVJST1JfVU5TVVBQT1JURURfVkVSU0lPTjoKKyAgY2FzZSBTU0xfRVJST1JfUFJPVE9DT0xfVkVSU0lPTl9BTEVSVDoKKyAgY2FzZSBTU0xfRVJST1JfUlhfTUFMRk9STUVEX0ZJTklTSEVEOgorICBjYXNlIFNTTF9FUlJPUl9CQURfSEFORFNIQUtFX0hBU0hfVkFMVUU6CisgIGNhc2UgU1NMX0VSUk9SX0RFQ09ERV9FUlJPUl9BTEVSVDoKKyAgY2FzZSBTU0xfRVJST1JfUlhfVU5LTk9XTl9BTEVSVDoKKyAgICByZXR1cm4gUFJfVFJVRTsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gUFJfRkFMU0U7CisgIH0KK30KKworc3RhdGljIENVUkxjb2RlIG5zc19pbml0X2NvcmUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIGNvbnN0IGNoYXIgKmNlcnRfZGlyKQoreworICBpZihOU1NfSXNJbml0aWFsaXplZCgpKQorICAgIHJldHVybiBDVVJMRV9PSzsKKworICBpZihjZXJ0X2RpcikgeworICAgIFNFQ1N0YXR1cyBydjsKKyAgICBjb25zdCBib29sIHVzZV9zcWwgPSBOU1NfVmVyc2lvbkNoZWNrKCIzLjEyLjAiKTsKKyAgICBjaGFyICpjZXJ0cGF0aCA9IGFwcmludGYoIiVzJXMiLCB1c2Vfc3FsID8gInNxbDoiIDogIiIsIGNlcnRfZGlyKTsKKyAgICBpZighY2VydHBhdGgpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXppbmcgTlNTIHdpdGggY2VydHBhdGg6ICVzXG4iLCBjZXJ0cGF0aCk7CisgICAgcnYgPSBOU1NfSW5pdGlhbGl6ZShjZXJ0cGF0aCwgIiIsICIiLCAiIiwgTlNTX0lOSVRfUkVBRE9OTFkpOworICAgIGZyZWUoY2VydHBhdGgpOworCisgICAgaWYocnYgPT0gU0VDU3VjY2VzcykKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKworICAgIGluZm9mKGRhdGEsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBOU1MgZGF0YWJhc2VcbiIpOworICB9CisKKyAgaW5mb2YoZGF0YSwgIkluaXRpYWxpemluZyBOU1Mgd2l0aCBjZXJ0cGF0aDogbm9uZVxuIik7CisgIGlmKE5TU19Ob0RCX0luaXQoTlVMTCkgPT0gU0VDU3VjY2VzcykKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgaW5mb2YoZGF0YSwgIlVuYWJsZSB0byBpbml0aWFsaXplIE5TU1xuIik7CisgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBuc3NfaW5pdChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKK3sKKyAgY2hhciAqY2VydF9kaXI7CisgIHN0cnVjdF9zdGF0IHN0OworICBDVVJMY29kZSBydjsKKworICBpZihpbml0aWFsaXplZCkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgLyogRmlyc3Qgd2UgY2hlY2sgaWYgJFNTTF9ESVIgcG9pbnRzIHRvIGEgdmFsaWQgZGlyICovCisgIGNlcnRfZGlyID0gZ2V0ZW52KCJTU0xfRElSIik7CisgIGlmKGNlcnRfZGlyKSB7CisgICAgaWYoKHN0YXQoY2VydF9kaXIsICZzdCkgIT0gMCkgfHwKKyAgICAgICAgKCFTX0lTRElSKHN0LnN0X21vZGUpKSkgeworICAgICAgY2VydF9kaXIgPSBOVUxMOworICAgIH0KKyAgfQorCisgIC8qIE5vdyB3ZSBjaGVjayBpZiB0aGUgZGVmYXVsdCBsb2NhdGlvbiBpcyBhIHZhbGlkIGRpciAqLworICBpZighY2VydF9kaXIpIHsKKyAgICBpZigoc3RhdChTU0xfRElSLCAmc3QpID09IDApICYmCisgICAgICAgIChTX0lTRElSKHN0LnN0X21vZGUpKSkgeworICAgICAgY2VydF9kaXIgPSAoY2hhciAqKVNTTF9ESVI7CisgICAgfQorICB9CisKKyAgcnYgPSBuc3NfaW5pdF9jb3JlKGRhdGEsIGNlcnRfZGlyKTsKKyAgaWYocnYpCisgICAgcmV0dXJuIHJ2OworCisgIGlmKG51bV9lbmFibGVkX2NpcGhlcnMoKSA9PSAwKQorICAgIE5TU19TZXREb21lc3RpY1BvbGljeSgpOworCisgIGluaXRpYWxpemVkID0gMTsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKioKKyAqIEdsb2JhbCBTU0wgaW5pdAorICoKKyAqIEByZXR2YWwgMCBlcnJvciBpbml0aWFsaXppbmcgU1NMCisgKiBAcmV0dmFsIDEgU1NMIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseQorICovCitpbnQgQ3VybF9uc3NfaW5pdCh2b2lkKQoreworICAvKiBjdXJsX2dsb2JhbF9pbml0KCkgaXMgbm90IHRocmVhZC1zYWZlIHNvIHRoaXMgdGVzdCBpcyBvayAqLworICBpZihuc3NfaW5pdGxvY2sgPT0gTlVMTCkgeworICAgIFBSX0luaXQoUFJfVVNFUl9USFJFQUQsIFBSX1BSSU9SSVRZX05PUk1BTCwgMjU2KTsKKyAgICBuc3NfaW5pdGxvY2sgPSBQUl9OZXdMb2NrKCk7CisgICAgbnNzX2NybGxvY2sgPSBQUl9OZXdMb2NrKCk7CisgIH0KKworICAvKiBXZSB3aWxsIGFjdHVhbGx5IGluaXRpYWxpemUgTlNTIGxhdGVyICovCisKKyAgcmV0dXJuIDE7Cit9CisKK0NVUkxjb2RlIEN1cmxfbnNzX2ZvcmNlX2luaXQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIENVUkxjb2RlIHJ2OworICBpZighbnNzX2luaXRsb2NrKSB7CisgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAidW5hYmxlIHRvIGluaXRpYWxpemUgTlNTLCBjdXJsX2dsb2JhbF9pbml0KCkgc2hvdWxkIGhhdmUgYmVlbiAiCisgICAgICAgICAgImNhbGxlZCB3aXRoIENVUkxfR0xPQkFMX1NTTCBvciBDVVJMX0dMT0JBTF9BTEwiKTsKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIH0KKworICBQUl9Mb2NrKG5zc19pbml0bG9jayk7CisgIHJ2ID0gbnNzX2luaXQoZGF0YSk7CisgIFBSX1VubG9jayhuc3NfaW5pdGxvY2spOworICByZXR1cm4gcnY7Cit9CisKKy8qIEdsb2JhbCBjbGVhbnVwICovCit2b2lkIEN1cmxfbnNzX2NsZWFudXAodm9pZCkKK3sKKyAgLyogVGhpcyBmdW5jdGlvbiBpc24ndCByZXF1aXJlZCB0byBiZSB0aHJlYWRzYWZlIGFuZCB0aGlzIGlzIG9ubHkgZG9uZQorICAgKiBhcyBhIHNhZmV0eSBmZWF0dXJlLgorICAgKi8KKyAgUFJfTG9jayhuc3NfaW5pdGxvY2spOworICBpZihpbml0aWFsaXplZCkgeworICAgIC8qIEZyZWUgcmVmZXJlbmNlcyB0byBjbGllbnQgY2VydGlmaWNhdGVzIGhlbGQgaW4gdGhlIFNTTCBzZXNzaW9uIGNhY2hlLgorICAgICAqIE9taXR0aW5nIHRoaXMgaGFtcGVycyBkZXN0cnVjdGlvbiBvZiB0aGUgc2VjdXJpdHkgbW9kdWxlIG93bmluZworICAgICAqIHRoZSBjZXJ0aWZpY2F0ZXMuICovCisgICAgU1NMX0NsZWFyU2Vzc2lvbkNhY2hlKCk7CisKKyAgICBpZihtb2QgJiYgU0VDU3VjY2VzcyA9PSBTRUNNT0RfVW5sb2FkVXNlck1vZHVsZShtb2QpKSB7CisgICAgICBTRUNNT0RfRGVzdHJveU1vZHVsZShtb2QpOworICAgICAgbW9kID0gTlVMTDsKKyAgICB9CisgICAgTlNTX1NodXRkb3duKCk7CisgIH0KKyAgUFJfVW5sb2NrKG5zc19pbml0bG9jayk7CisKKyAgUFJfRGVzdHJveUxvY2sobnNzX2luaXRsb2NrKTsKKyAgUFJfRGVzdHJveUxvY2sobnNzX2NybGxvY2spOworICBuc3NfaW5pdGxvY2sgPSBOVUxMOworCisgIGluaXRpYWxpemVkID0gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyBTU0xfcGVlayB0byBkZXRlcm1pbmUgY29ubmVjdGlvbiBzdGF0dXMuCisgKgorICogUmV0dXJuIGNvZGVzOgorICogICAgIDEgbWVhbnMgdGhlIGNvbm5lY3Rpb24gaXMgc3RpbGwgaW4gcGxhY2UKKyAqICAgICAwIG1lYW5zIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZAorICogICAgLTEgbWVhbnMgdGhlIGNvbm5lY3Rpb24gc3RhdHVzIGlzIHVua25vd24KKyAqLworaW50CitDdXJsX25zc19jaGVja19jeG4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBpbnQgcmM7CisgIGNoYXIgYnVmOworCisgIHJjID0KKyAgICBQUl9SZWN2KGNvbm4tPnNzbFtGSVJTVFNPQ0tFVF0uaGFuZGxlLCAodm9pZCAqKSZidWYsIDEsIFBSX01TR19QRUVLLAorICAgICAgICAgICAgUFJfU2Vjb25kc1RvSW50ZXJ2YWwoMSkpOworICBpZihyYyA+IDApCisgICAgcmV0dXJuIDE7IC8qIGNvbm5lY3Rpb24gc3RpbGwgaW4gcGxhY2UgKi8KKworICBpZihyYyA9PSAwKQorICAgIHJldHVybiAwOyAvKiBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZCAqLworCisgIHJldHVybiAtMTsgIC8qIGNvbm5lY3Rpb24gc3RhdHVzIHVua25vd24gKi8KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gU1NMIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgorICovCit2b2lkIEN1cmxfbnNzX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKK3sKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisKKyAgaWYoY29ubnNzbC0+aGFuZGxlKSB7CisgICAgLyogTlNTIGNsb3NlcyB0aGUgc29ja2V0IHdlIHByZXZpb3VzbHkgaGFuZGVkIHRvIGl0LCBzbyB3ZSBtdXN0IG1hcmsgaXQKKyAgICAgICBhcyBjbG9zZWQgdG8gYXZvaWQgZG91YmxlIGNsb3NlICovCisgICAgZmFrZV9zY2xvc2UoY29ubi0+c29ja1tzb2NraW5kZXhdKTsKKyAgICBjb25uLT5zb2NrW3NvY2tpbmRleF0gPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgaWYoY29ubnNzbC0+Y2xpZW50X25pY2tuYW1lICE9IE5VTEwpIHsKKyAgICAgIGZyZWUoY29ubnNzbC0+Y2xpZW50X25pY2tuYW1lKTsKKyAgICAgIGNvbm5zc2wtPmNsaWVudF9uaWNrbmFtZSA9IE5VTEw7CisKKyAgICAgIC8qIGZvcmNlIE5TUyB0byBhc2sgYWdhaW4gZm9yIGEgY2xpZW50IGNlcnQgd2hlbiBjb25uZWN0aW5nCisgICAgICAgKiBuZXh0IHRpbWUgdG8gdGhlIHNhbWUgc2VydmVyICovCisgICAgICBTU0xfSW52YWxpZGF0ZVNlc3Npb24oY29ubnNzbC0+aGFuZGxlKTsKKyAgICB9CisjaWZkZWYgSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QKKyAgICAvKiBkZXN0cm95IGFsbCBOU1Mgb2JqZWN0cyBpbiBvcmRlciB0byBhdm9pZCBmYWlsdXJlIG9mIE5TUyBzaHV0ZG93biAqLworICAgIEN1cmxfbGxpc3RfZGVzdHJveShjb25uc3NsLT5vYmpfbGlzdCwgTlVMTCk7CisgICAgY29ubnNzbC0+b2JqX2xpc3QgPSBOVUxMOworICAgIGNvbm5zc2wtPm9ial9jbGljZXJ0ID0gTlVMTDsKKyNlbmRpZgorICAgIFBSX0Nsb3NlKGNvbm5zc2wtPmhhbmRsZSk7CisgICAgY29ubnNzbC0+aGFuZGxlID0gTlVMTDsKKyAgfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgJ2RhdGEnIHN0cnVjdCBpcyBnb2luZyBhd2F5LiBDbG9zZQorICogZG93biBldmVyeXRoaW5nIGFuZCBmcmVlIGFsbCByZXNvdXJjZXMhCisgKi8KK2ludCBDdXJsX25zc19jbG9zZV9hbGwoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgICh2b2lkKWRhdGE7CisgIHJldHVybiAwOworfQorCisvKiBoYW5kbGUgY2xpZW50IGNlcnRpZmljYXRlIHJlbGF0ZWQgZXJyb3JzIGlmIGFueTsgcmV0dXJuIGZhbHNlIG90aGVyd2lzZSAqLworc3RhdGljIGJvb2wgaGFuZGxlX2NjX2Vycm9yKFBSSW50MzIgZXJyLCBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKK3sKKyAgc3dpdGNoKGVycikgeworICBjYXNlIFNTTF9FUlJPUl9CQURfQ0VSVF9BTEVSVDoKKyAgICBmYWlsZihkYXRhLCAiU1NMIGVycm9yOiBTU0xfRVJST1JfQkFEX0NFUlRfQUxFUlQiKTsKKyAgICByZXR1cm4gdHJ1ZTsKKworICBjYXNlIFNTTF9FUlJPUl9SRVZPS0VEX0NFUlRfQUxFUlQ6CisgICAgZmFpbGYoZGF0YSwgIlNTTCBlcnJvcjogU1NMX0VSUk9SX1JFVk9LRURfQ0VSVF9BTEVSVCIpOworICAgIHJldHVybiB0cnVlOworCisgIGNhc2UgU1NMX0VSUk9SX0VYUElSRURfQ0VSVF9BTEVSVDoKKyAgICBmYWlsZihkYXRhLCAiU1NMIGVycm9yOiBTU0xfRVJST1JfRVhQSVJFRF9DRVJUX0FMRVJUIik7CisgICAgcmV0dXJuIHRydWU7CisKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KK30KKworc3RhdGljIEN1cmxfcmVjdiBuc3NfcmVjdjsKK3N0YXRpYyBDdXJsX3NlbmQgbnNzX3NlbmQ7CisKK3N0YXRpYyBDVVJMY29kZSBuc3NfbG9hZF9jYV9jZXJ0aWZpY2F0ZXMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGNvbnN0IGNoYXIgKmNhZmlsZSA9IGRhdGEtPnNldC5zc2wuQ0FmaWxlOworICBjb25zdCBjaGFyICpjYXBhdGggPSBkYXRhLT5zZXQuc3NsLkNBcGF0aDsKKworICBpZihjYWZpbGUpIHsKKyAgICBDVVJMY29kZSBydiA9IG5zc19sb2FkX2NlcnQoJmNvbm4tPnNzbFtzb2NraW5kZXhdLCBjYWZpbGUsIFBSX1RSVUUpOworICAgIGlmKENVUkxFX09LICE9IHJ2KQorICAgICAgcmV0dXJuIHJ2OworICB9CisKKyAgaWYoY2FwYXRoKSB7CisgICAgc3RydWN0X3N0YXQgc3Q7CisgICAgaWYoc3RhdChjYXBhdGgsICZzdCkgPT0gLTEpCisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworCisgICAgaWYoU19JU0RJUihzdC5zdF9tb2RlKSkgeworICAgICAgUFJEaXJFbnRyeSAqZW50cnk7CisgICAgICBQUkRpciAqZGlyID0gUFJfT3BlbkRpcihjYXBhdGgpOworICAgICAgaWYoIWRpcikKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKKworICAgICAgd2hpbGUoKGVudHJ5ID0gUFJfUmVhZERpcihkaXIsIFBSX1NLSVBfQk9USCB8IFBSX1NLSVBfSElEREVOKSkpIHsKKyAgICAgICAgY2hhciAqZnVsbHBhdGggPSBhcHJpbnRmKCIlcy8lcyIsIGNhcGF0aCwgZW50cnktPm5hbWUpOworICAgICAgICBpZighZnVsbHBhdGgpIHsKKyAgICAgICAgICBQUl9DbG9zZURpcihkaXIpOworICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICB9CisKKyAgICAgICAgaWYoQ1VSTEVfT0sgIT0gbnNzX2xvYWRfY2VydCgmY29ubi0+c3NsW3NvY2tpbmRleF0sIGZ1bGxwYXRoLCBQUl9UUlVFKSkKKyAgICAgICAgICAvKiBUaGlzIGlzIHB1cnBvc2VmdWxseSB0b2xlcmFudCBvZiBlcnJvcnMgc28gbm9uLVBFTSBmaWxlcyBjYW4KKyAgICAgICAgICAgKiBiZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKi8KKyAgICAgICAgICBpbmZvZihkYXRhLCAiZmFpbGVkIHRvIGxvYWQgJyVzJyBmcm9tIENVUkxPUFRfQ0FQQVRIXG4iLCBmdWxscGF0aCk7CisKKyAgICAgICAgZnJlZShmdWxscGF0aCk7CisgICAgICB9CisKKyAgICAgIFBSX0Nsb3NlRGlyKGRpcik7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGluZm9mKGRhdGEsICJ3YXJuaW5nOiBDVVJMT1BUX0NBUEFUSCBub3QgYSBkaXJlY3RvcnkgKCVzKVxuIiwgY2FwYXRoKTsKKyAgfQorCisgIGluZm9mKGRhdGEsICIgIENBZmlsZTogJXNcbiAgQ0FwYXRoOiAlc1xuIiwKKyAgICAgIGNhZmlsZSA/IGNhZmlsZSA6ICJub25lIiwKKyAgICAgIGNhcGF0aCA/IGNhcGF0aCA6ICJub25lIik7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitDVVJMY29kZSBDdXJsX25zc19jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKK3sKKyAgUFJJbnQzMiBlcnI7CisgIFBSRmlsZURlc2MgKm1vZGVsID0gTlVMTDsKKyAgUFJCb29sIHNzbDIgPSBQUl9GQUxTRTsKKyAgUFJCb29sIHNzbDMgPSBQUl9GQUxTRTsKKyAgUFJCb29sIHRsc3YxID0gUFJfRkFMU0U7CisgIFBSQm9vbCBzc2xfbm9fY2FjaGU7CisgIFBSQm9vbCBzc2xfY2JjX3JhbmRvbV9pdjsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIENVUkxjb2RlIGN1cmxlcnI7CisgIGNvbnN0IGludCAqY2lwaGVyX3RvX2VuYWJsZTsKKyAgUFJTb2NrZXRPcHRpb25EYXRhIHNvY2tfb3B0OworICBsb25nIHRpbWVfbGVmdDsKKyAgUFJVaW50MzIgdGltZW91dDsKKworICBpZihjb25uc3NsLT5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgY29ubnNzbC0+ZGF0YSA9IGRhdGE7CisKKyNpZmRlZiBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVAorICAvKiBsaXN0IG9mIGFsbCBOU1Mgb2JqZWN0cyB3ZSBuZWVkIHRvIGRlc3Ryb3kgaW4gQ3VybF9uc3NfY2xvc2UoKSAqLworICBjb25uc3NsLT5vYmpfbGlzdCA9IEN1cmxfbGxpc3RfYWxsb2MobnNzX2Rlc3Ryb3lfb2JqZWN0KTsKKyAgaWYoIWNvbm5zc2wtPm9ial9saXN0KQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworI2VuZGlmCisKKyAgLyogRklYTUUuIE5TUyBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgZGF0YWJhc2VzIG9wZW4gYXQgdGhlIHNhbWUgdGltZS4gKi8KKyAgUFJfTG9jayhuc3NfaW5pdGxvY2spOworICBjdXJsZXJyID0gbnNzX2luaXQoY29ubi0+ZGF0YSk7CisgIGlmKENVUkxFX09LICE9IGN1cmxlcnIpIHsKKyAgICBQUl9VbmxvY2sobnNzX2luaXRsb2NrKTsKKyAgICBnb3RvIGVycm9yOworICB9CisKKyAgY3VybGVyciA9IENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworCisjaWZkZWYgSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QKKyAgaWYoIW1vZCkgeworICAgIGNoYXIgKmNvbmZpZ3N0cmluZyA9IGFwcmludGYoImxpYnJhcnk9JXMgbmFtZT1QRU0iLCBwZW1fbGlicmFyeSk7CisgICAgaWYoIWNvbmZpZ3N0cmluZykgeworICAgICAgUFJfVW5sb2NrKG5zc19pbml0bG9jayk7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBtb2QgPSBTRUNNT0RfTG9hZFVzZXJNb2R1bGUoY29uZmlnc3RyaW5nLCBOVUxMLCBQUl9GQUxTRSk7CisgICAgZnJlZShjb25maWdzdHJpbmcpOworCisgICAgaWYoIW1vZCB8fCAhbW9kLT5sb2FkZWQpIHsKKyAgICAgIGlmKG1vZCkgeworICAgICAgICBTRUNNT0RfRGVzdHJveU1vZHVsZShtb2QpOworICAgICAgICBtb2QgPSBOVUxMOworICAgICAgfQorICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IGZhaWxlZCB0byBsb2FkIE5TUyBQRU0gbGlicmFyeSAlcy4gVXNpbmcgIgorICAgICAgICAgICAgIk9wZW5TU0wgUEVNIGNlcnRpZmljYXRlcyB3aWxsIG5vdCB3b3JrLlxuIiwgcGVtX2xpYnJhcnkpOworICAgIH0KKyAgfQorI2VuZGlmCisKKyAgUEsxMV9TZXRQYXNzd29yZEZ1bmMobnNzX2dldF9wYXNzd29yZCk7CisgIFBSX1VubG9jayhuc3NfaW5pdGxvY2spOworCisgIG1vZGVsID0gUFJfTmV3VENQU29ja2V0KCk7CisgIGlmKCFtb2RlbCkKKyAgICBnb3RvIGVycm9yOworICBtb2RlbCA9IFNTTF9JbXBvcnRGRChOVUxMLCBtb2RlbCk7CisKKyAgLyogbWFrZSB0aGUgc29ja2V0IG5vbmJsb2NraW5nICovCisgIHNvY2tfb3B0Lm9wdGlvbiA9IFBSX1NvY2tPcHRfTm9uYmxvY2tpbmc7CisgIHNvY2tfb3B0LnZhbHVlLm5vbl9ibG9ja2luZyA9IFBSX1RSVUU7CisgIGlmKFBSX1NldFNvY2tldE9wdGlvbihtb2RlbCwgJnNvY2tfb3B0KSAhPSBQUl9TVUNDRVNTKQorICAgIGdvdG8gZXJyb3I7CisKKyAgaWYoU1NMX09wdGlvblNldChtb2RlbCwgU1NMX1NFQ1VSSVRZLCBQUl9UUlVFKSAhPSBTRUNTdWNjZXNzKQorICAgIGdvdG8gZXJyb3I7CisgIGlmKFNTTF9PcHRpb25TZXQobW9kZWwsIFNTTF9IQU5EU0hBS0VfQVNfU0VSVkVSLCBQUl9GQUxTRSkgIT0gU0VDU3VjY2VzcykKKyAgICBnb3RvIGVycm9yOworICBpZihTU0xfT3B0aW9uU2V0KG1vZGVsLCBTU0xfSEFORFNIQUtFX0FTX0NMSUVOVCwgUFJfVFJVRSkgIT0gU0VDU3VjY2VzcykKKyAgICBnb3RvIGVycm9yOworCisgIC8qIGRvIG5vdCB1c2UgU1NMIGNhY2hlIGlmIHdlIGFyZSBub3QgZ29pbmcgdG8gdmVyaWZ5IHBlZXIgKi8KKyAgc3NsX25vX2NhY2hlID0gKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgPyBQUl9GQUxTRSA6IFBSX1RSVUU7CisgIGlmKFNTTF9PcHRpb25TZXQobW9kZWwsIFNTTF9OT19DQUNIRSwgc3NsX25vX2NhY2hlKSAhPSBTRUNTdWNjZXNzKQorICAgIGdvdG8gZXJyb3I7CisKKyAgc3dpdGNoIChkYXRhLT5zZXQuc3NsLnZlcnNpb24pIHsKKyAgZGVmYXVsdDoKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKKyAgICBzc2wzID0gUFJfVFJVRTsKKyAgICBpZihkYXRhLT5zdGF0ZS5zc2xfY29ubmVjdF9yZXRyeSkKKyAgICAgIGluZm9mKGRhdGEsICJUTFMgZGlzYWJsZWQgZHVlIHRvIHByZXZpb3VzIGhhbmRzaGFrZSBmYWlsdXJlXG4iKTsKKyAgICBlbHNlCisgICAgICB0bHN2MSA9IFBSX1RSVUU7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgorICAgIHRsc3YxID0gUFJfVFJVRTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6CisgICAgc3NsMiA9IFBSX1RSVUU7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgorICAgIHNzbDMgPSBQUl9UUlVFOworICAgIGJyZWFrOworICB9CisKKyAgaWYoU1NMX09wdGlvblNldChtb2RlbCwgU1NMX0VOQUJMRV9TU0wyLCBzc2wyKSAhPSBTRUNTdWNjZXNzKQorICAgIGdvdG8gZXJyb3I7CisgIGlmKFNTTF9PcHRpb25TZXQobW9kZWwsIFNTTF9FTkFCTEVfU1NMMywgc3NsMykgIT0gU0VDU3VjY2VzcykKKyAgICBnb3RvIGVycm9yOworICBpZihTU0xfT3B0aW9uU2V0KG1vZGVsLCBTU0xfRU5BQkxFX1RMUywgdGxzdjEpICE9IFNFQ1N1Y2Nlc3MpCisgICAgZ290byBlcnJvcjsKKworICBpZihTU0xfT3B0aW9uU2V0KG1vZGVsLCBTU0xfVjJfQ09NUEFUSUJMRV9IRUxMTywgc3NsMikgIT0gU0VDU3VjY2VzcykKKyAgICBnb3RvIGVycm9yOworCisgIHNzbF9jYmNfcmFuZG9tX2l2ID0gIWRhdGEtPnNldC5zc2xfZW5hYmxlX2JlYXN0OworI2lmZGVmIFNTTF9DQkNfUkFORE9NX0lWCisgIC8qIHVubGVzcyB0aGUgdXNlciBleHBsaWNpdGx5IGFza3MgdG8gYWxsb3cgdGhlIHByb3RvY29sIHZ1bG5lcmFiaWxpdHksIHdlCisgICAgIHVzZSB0aGUgd29yay1hcm91bmQgKi8KKyAgaWYoU1NMX09wdGlvblNldChtb2RlbCwgU1NMX0NCQ19SQU5ET01fSVYsIHNzbF9jYmNfcmFuZG9tX2l2KSAhPSBTRUNTdWNjZXNzKQorICAgIGluZm9mKGRhdGEsICJ3YXJuaW5nOiBmYWlsZWQgdG8gc2V0IFNTTF9DQkNfUkFORE9NX0lWID0gJWRcbiIsCisgICAgICAgICAgc3NsX2NiY19yYW5kb21faXYpOworI2Vsc2UKKyAgaWYoc3NsX2NiY19yYW5kb21faXYpCisgICAgaW5mb2YoZGF0YSwgIndhcm5pbmc6IHN1cHBvcnQgZm9yIFNTTF9DQkNfUkFORE9NX0lWIG5vdCBjb21waWxlZCBpblxuIik7CisjZW5kaWYKKworICAvKiByZXNldCB0aGUgZmxhZyB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wICovCisgIGRhdGEtPnN0YXRlLnNzbF9jb25uZWN0X3JldHJ5ID0gRkFMU0U7CisKKyAgLyogZW5hYmxlIGFsbCBjaXBoZXJzIGZyb20gZW5hYmxlX2NpcGhlcnNfYnlfZGVmYXVsdCAqLworICBjaXBoZXJfdG9fZW5hYmxlID0gZW5hYmxlX2NpcGhlcnNfYnlfZGVmYXVsdDsKKyAgd2hpbGUoU1NMX05VTExfV0lUSF9OVUxMX05VTEwgIT0gKmNpcGhlcl90b19lbmFibGUpIHsKKyAgICBpZihTU0xfQ2lwaGVyUHJlZlNldChtb2RlbCwgKmNpcGhlcl90b19lbmFibGUsIFBSX1RSVUUpICE9IFNFQ1N1Y2Nlc3MpIHsKKyAgICAgIGN1cmxlcnIgPSBDVVJMRV9TU0xfQ0lQSEVSOworICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgY2lwaGVyX3RvX2VuYWJsZSsrOworICB9CisKKyAgaWYoZGF0YS0+c2V0LnNzbC5jaXBoZXJfbGlzdCkgeworICAgIGlmKHNldF9jaXBoZXJzKGRhdGEsIG1vZGVsLCBkYXRhLT5zZXQuc3NsLmNpcGhlcl9saXN0KSAhPSBTRUNTdWNjZXNzKSB7CisgICAgICBjdXJsZXJyID0gQ1VSTEVfU1NMX0NJUEhFUjsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICB9CisKKyAgaWYoIWRhdGEtPnNldC5zc2wudmVyaWZ5cGVlciAmJiBkYXRhLT5zZXQuc3NsLnZlcmlmeWhvc3QpCisgICAgaW5mb2YoZGF0YSwgIndhcm5pbmc6IGlnbm9yaW5nIHZhbHVlIG9mIHNzbC52ZXJpZnlob3N0XG4iKTsKKyAgZWxzZSBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeWhvc3QgPT0gMSkKKyAgICBpbmZvZihkYXRhLCAid2FybmluZzogaWdub3JpbmcgdW5zdXBwb3J0ZWQgdmFsdWUgKDEpIG9mIHNzbC52ZXJpZnlob3N0XG4iKTsKKworICAvKiBieXBhc3MgdGhlIGRlZmF1bHQgU1NMX0F1dGhDZXJ0aWZpY2F0ZSgpIGhvb2sgaW4gY2FzZSB3ZSBkbyBub3Qgd2FudCB0bworICAgKiB2ZXJpZnkgcGVlciAqLworICBpZihTU0xfQXV0aENlcnRpZmljYXRlSG9vayhtb2RlbCwgbnNzX2F1dGhfY2VydF9ob29rLCBjb25uKSAhPSBTRUNTdWNjZXNzKQorICAgIGdvdG8gZXJyb3I7CisKKyAgZGF0YS0+c2V0LnNzbC5jZXJ0dmVyaWZ5cmVzdWx0PTA7IC8qIG5vdCBjaGVja2VkIHlldCAqLworICBpZihTU0xfQmFkQ2VydEhvb2sobW9kZWwsIChTU0xCYWRDZXJ0SGFuZGxlcikgQmFkQ2VydEhhbmRsZXIsIGNvbm4pCisgICAgICE9IFNFQ1N1Y2Nlc3MpIHsKKyAgICBnb3RvIGVycm9yOworICB9CisgIGlmKFNTTF9IYW5kc2hha2VDYWxsYmFjayhtb2RlbCwgKFNTTEhhbmRzaGFrZUNhbGxiYWNrKSBIYW5kc2hha2VDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpICE9IFNFQ1N1Y2Nlc3MpCisgICAgZ290byBlcnJvcjsKKworICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpIHsKKyAgICBjb25zdCBDVVJMY29kZSBydiA9IG5zc19sb2FkX2NhX2NlcnRpZmljYXRlcyhjb25uLCBzb2NraW5kZXgpOworICAgIGlmKENVUkxFX09LICE9IHJ2KSB7CisgICAgICBjdXJsZXJyID0gcnY7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgfQorCisgIGlmKGRhdGEtPnNldC5zc2wuQ1JMZmlsZSkgeworICAgIGlmKFNFQ1N1Y2Nlc3MgIT0gbnNzX2xvYWRfY3JsKGRhdGEtPnNldC5zc2wuQ1JMZmlsZSkpIHsKKyAgICAgIGN1cmxlcnIgPSBDVVJMRV9TU0xfQ1JMX0JBREZJTEU7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBpbmZvZihkYXRhLAorICAgICAgICAgICIgIENSTGZpbGU6ICVzXG4iLAorICAgICAgICAgIGRhdGEtPnNldC5zc2wuQ1JMZmlsZSA/IGRhdGEtPnNldC5zc2wuQ1JMZmlsZSA6ICJub25lIik7CisgIH0KKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSkgeworICAgIGNoYXIgKm5pY2tuYW1lID0gZHVwX25pY2tuYW1lKGRhdGEsIFNUUklOR19DRVJUKTsKKyAgICBpZihuaWNrbmFtZSkgeworICAgICAgLyogd2UgYXJlIG5vdCBnb2luZyB0byB1c2UgbGlibnNzcGVtLnNvIHRvIHJlYWQgdGhlIGNsaWVudCBjZXJ0ICovCisjaWZkZWYgSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QKKyAgICAgIGNvbm5zc2wtPm9ial9jbGljZXJ0ID0gTlVMTDsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIENVUkxjb2RlIHJ2ID0gY2VydF9zdHVmZihjb25uLCBzb2NraW5kZXgsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0pOworICAgICAgaWYoQ1VSTEVfT0sgIT0gcnYpIHsKKyAgICAgICAgLyogZmFpbGYoKSBpcyBhbHJlYWR5IGRvbmUgaW4gY2VydF9zdHVmZigpICovCisgICAgICAgIGN1cmxlcnIgPSBydjsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBzdG9yZSB0aGUgbmlja25hbWUgZm9yIFNlbGVjdENsaWVudENlcnQoKSBjYWxsZWQgZHVyaW5nIGhhbmRzaGFrZSAqLworICAgIGNvbm5zc2wtPmNsaWVudF9uaWNrbmFtZSA9IG5pY2tuYW1lOworICB9CisgIGVsc2UKKyAgICBjb25uc3NsLT5jbGllbnRfbmlja25hbWUgPSBOVUxMOworCisgIGlmKFNTTF9HZXRDbGllbnRBdXRoRGF0YUhvb2sobW9kZWwsIFNlbGVjdENsaWVudENlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiljb25uc3NsKSAhPSBTRUNTdWNjZXNzKSB7CisgICAgY3VybGVyciA9IENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICBnb3RvIGVycm9yOworICB9CisKKyAgLyogSW1wb3J0IG91ciBtb2RlbCBzb2NrZXQgIG9udG8gdGhlIGV4aXN0aW5nIGZpbGUgZGVzY3JpcHRvciAqLworICBjb25uc3NsLT5oYW5kbGUgPSBQUl9JbXBvcnRUQ1BTb2NrZXQoc29ja2ZkKTsKKyAgY29ubnNzbC0+aGFuZGxlID0gU1NMX0ltcG9ydEZEKG1vZGVsLCBjb25uc3NsLT5oYW5kbGUpOworICBpZighY29ubnNzbC0+aGFuZGxlKQorICAgIGdvdG8gZXJyb3I7CisKKyAgUFJfQ2xvc2UobW9kZWwpOyAvKiBXZSBkb24ndCBuZWVkIHRoaXMgYW55IG1vcmUgKi8KKyAgbW9kZWwgPSBOVUxMOworCisgIC8qIFRoaXMgaXMgdGhlIHBhc3N3b3JkIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2VydCB0aGF0IHdlJ3JlIHVzaW5nICovCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9QQVNTV0RdKSB7CisgICAgU1NMX1NldFBLQ1MxMVBpbkFyZyhjb25uc3NsLT5oYW5kbGUsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9QQVNTV0RdKTsKKyAgfQorCisgIC8qIEZvcmNlIGhhbmRzaGFrZSBvbiBuZXh0IEkvTyAqLworICBTU0xfUmVzZXRIYW5kc2hha2UoY29ubnNzbC0+aGFuZGxlLCAvKiBhc1NlcnZlciAqLyBQUl9GQUxTRSk7CisKKyAgU1NMX1NldFVSTChjb25uc3NsLT5oYW5kbGUsIGNvbm4tPmhvc3QubmFtZSk7CisKKyAgLyogY2hlY2sgdGltZW91dCBzaXR1YXRpb24gKi8KKyAgdGltZV9sZWZ0ID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKKyAgaWYodGltZV9sZWZ0IDwgMEwpIHsKKyAgICBmYWlsZihkYXRhLCAidGltZWQgb3V0IGJlZm9yZSBTU0wgaGFuZHNoYWtlIik7CisgICAgZ290byBlcnJvcjsKKyAgfQorICB0aW1lb3V0ID0gUFJfTWlsbGlzZWNvbmRzVG9JbnRlcnZhbCgoUFJVaW50MzIpIHRpbWVfbGVmdCk7CisKKyAgLyogRm9yY2UgdGhlIGhhbmRzaGFrZSBub3cgKi8KKyAgaWYoU1NMX0ZvcmNlSGFuZHNoYWtlV2l0aFRpbWVvdXQoY29ubnNzbC0+aGFuZGxlLCB0aW1lb3V0KSAhPSBTRUNTdWNjZXNzKSB7CisgICAgaWYoY29ubi0+ZGF0YS0+c2V0LnNzbC5jZXJ0dmVyaWZ5cmVzdWx0ID09IFNTTF9FUlJPUl9CQURfQ0VSVF9ET01BSU4pCisgICAgICBjdXJsZXJyID0gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworICAgIGVsc2UgaWYoY29ubi0+ZGF0YS0+c2V0LnNzbC5jZXJ0dmVyaWZ5cmVzdWx0IT0wKQorICAgICAgY3VybGVyciA9IENVUkxFX1NTTF9DQUNFUlQ7CisgICAgZ290byBlcnJvcjsKKyAgfQorCisgIGNvbm5zc2wtPnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7CisgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IG5zc19yZWN2OworICBjb25uLT5zZW5kW3NvY2tpbmRleF0gPSBuc3Nfc2VuZDsKKworICBkaXNwbGF5X2Nvbm5faW5mbyhjb25uLCBjb25uc3NsLT5oYW5kbGUpOworCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9JU1NVRVJDRVJUXSkgeworICAgIFNFQ1N0YXR1cyByZXQgPSBTRUNGYWlsdXJlOworICAgIGNoYXIgKm5pY2tuYW1lID0gZHVwX25pY2tuYW1lKGRhdGEsIFNUUklOR19TU0xfSVNTVUVSQ0VSVCk7CisgICAgaWYobmlja25hbWUpIHsKKyAgICAgIC8qIHdlIHN1cHBvcnQgb25seSBuaWNrbmFtZXMgaW4gY2FzZSBvZiBTVFJJTkdfU1NMX0lTU1VFUkNFUlQgZm9yIG5vdyAqLworICAgICAgcmV0ID0gY2hlY2tfaXNzdWVyX2NlcnQoY29ubnNzbC0+aGFuZGxlLCBuaWNrbmFtZSk7CisgICAgICBmcmVlKG5pY2tuYW1lKTsKKyAgICB9CisKKyAgICBpZihTRUNGYWlsdXJlID09IHJldCkgeworICAgICAgaW5mb2YoZGF0YSwiU1NMIGNlcnRpZmljYXRlIGlzc3VlciBjaGVjayBmYWlsZWRcbiIpOworICAgICAgY3VybGVyciA9IENVUkxFX1NTTF9JU1NVRVJfRVJST1I7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGluZm9mKGRhdGEsICJTU0wgY2VydGlmaWNhdGUgaXNzdWVyIGNoZWNrIG9rXG4iKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgZXJyb3I6CisgIC8qIHJlc2V0IHRoZSBmbGFnIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3AgKi8KKyAgZGF0YS0+c3RhdGUuc3NsX2Nvbm5lY3RfcmV0cnkgPSBGQUxTRTsKKworICBlcnIgPSBQUl9HZXRFcnJvcigpOworICBpZihoYW5kbGVfY2NfZXJyb3IoZXJyLCBkYXRhKSkKKyAgICBjdXJsZXJyID0gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICBlbHNlCisgICAgaW5mb2YoZGF0YSwgIk5TUyBlcnJvciAlZFxuIiwgZXJyKTsKKworICBpZihtb2RlbCkKKyAgICBQUl9DbG9zZShtb2RlbCk7CisKKyNpZmRlZiBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVAorICAgIC8qIGNsZWFudXAgb24gY29ubmVjdGlvbiBmYWlsdXJlICovCisgICAgQ3VybF9sbGlzdF9kZXN0cm95KGNvbm5zc2wtPm9ial9saXN0LCBOVUxMKTsKKyAgICBjb25uc3NsLT5vYmpfbGlzdCA9IE5VTEw7CisjZW5kaWYKKworICBpZihzc2wzICYmIHRsc3YxICYmIGlzVExTSW50b2xlcmFuY2VFcnJvcihlcnIpKSB7CisgICAgLyogc2NoZWR1bGUgcmVjb25uZWN0IHRocm91Z2ggQ3VybF9yZXRyeV9yZXF1ZXN0KCkgKi8KKyAgICBkYXRhLT5zdGF0ZS5zc2xfY29ubmVjdF9yZXRyeSA9IFRSVUU7CisgICAgaW5mb2YoZGF0YSwgIkVycm9yIGluIFRMUyBoYW5kc2hha2UsIHRyeWluZyBTU0x2My4uLlxuIik7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgcmV0dXJuIGN1cmxlcnI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG5zc19zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgIC8qIGNvbm5lY3Rpb24gZGF0YSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwgICAgICAgICAgICAgLyogc29ja2V0aW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgICAgICAgICAgIC8qIHNlbmQgdGhpcyBkYXRhICovCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCAgICAgICAgICAgICAgICAvKiBhbW91bnQgdG8gd3JpdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKK3sKKyAgaW50IHJjOworCisgIHJjID0gUFJfU2VuZChjb25uLT5zc2xbc29ja2luZGV4XS5oYW5kbGUsIG1lbSwgKGludClsZW4sIDAsIC0xKTsKKworICBpZihyYyA8IDApIHsKKyAgICBQUkludDMyIGVyciA9IFBSX0dldEVycm9yKCk7CisgICAgaWYoZXJyID09IFBSX1dPVUxEX0JMT0NLX0VSUk9SKQorICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfQUdBSU47CisgICAgZWxzZSBpZihoYW5kbGVfY2NfZXJyb3IoZXJyLCBjb25uLT5kYXRhKSkKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICBlbHNlIHsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTU0wgd3JpdGU6IGVycm9yICVkIiwgZXJyKTsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgfQorICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1cm4gcmM7IC8qIG51bWJlciBvZiBieXRlcyAqLworfQorCitzdGF0aWMgc3NpemVfdCBuc3NfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKiBjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0sICAgICAgICAgICAgICAgICAgIC8qIHNvY2tldGluZGV4ICovCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsICAgICAgICAgICAgICAgICAvKiBzdG9yZSByZWFkIGRhdGEgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcnNpemUsICAgICAgICAgLyogbWF4IGFtb3VudCB0byByZWFkICovCisgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqY3VybGNvZGUpCit7CisgIHNzaXplX3QgbnJlYWQ7CisKKyAgbnJlYWQgPSBQUl9SZWN2KGNvbm4tPnNzbFtudW1dLmhhbmRsZSwgYnVmLCAoaW50KWJ1ZmZlcnNpemUsIDAsIC0xKTsKKyAgaWYobnJlYWQgPCAwKSB7CisgICAgLyogZmFpbGVkIFNTTCByZWFkICovCisgICAgUFJJbnQzMiBlcnIgPSBQUl9HZXRFcnJvcigpOworCisgICAgaWYoZXJyID09IFBSX1dPVUxEX0JMT0NLX0VSUk9SKQorICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfQUdBSU47CisgICAgZWxzZSBpZihoYW5kbGVfY2NfZXJyb3IoZXJyLCBjb25uLT5kYXRhKSkKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKyAgICBlbHNlIHsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTU0wgcmVhZDogZXJybm8gJWQiLCBlcnIpOworICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICB9CisgICAgcmV0dXJuIC0xOworICB9CisgIHJldHVybiBucmVhZDsKK30KKworc2l6ZV90IEN1cmxfbnNzX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIk5TUy8lcyIsIE5TU19WRVJTSU9OKTsKK30KKworaW50IEN1cmxfbnNzX3NlZWQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIC8qIFRPRE86IGltcGxlbWVudD8gKi8KKyAgKHZvaWQpIGRhdGE7CisgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogVVNFX05TUyAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL25zc2cuaCBiL2N1cmwtNy4yNS4wL2xpYi9uc3NnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ3ZGY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9uc3NnLmgKQEAgLTAsMCArMSw3MyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9OU1NHX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfTlNTR19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgVVNFX05TUworLyoKKyAqIFRoaXMgaGVhZGVyIHNob3VsZCBvbmx5IGJlIG5lZWRlZCB0byBnZXQgaW5jbHVkZWQgYnkgc3NsZ2VuLmMgYW5kIG5zcy5jCisgKi8KKworI2luY2x1ZGUgInVybGRhdGEuaCIKKworQ1VSTGNvZGUgQ3VybF9uc3NfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpOworQ1VSTGNvZGUgQ3VybF9uc3NfY29ubmVjdF9ub25ibG9ja2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpOworLyogY2xvc2UgYSBTU0wgY29ubmVjdGlvbiAqLwordm9pZCBDdXJsX25zc19jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpOworCisvKiB0ZWxsIE5TUyB0byBjbG9zZSBkb3duIGFsbCBvcGVuIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb25uZWN0aW9ucyAoYW5kCisgICB0aHVzIHNlc3Npb24gSUQgY2FjaGluZyBldGMpICovCitpbnQgQ3VybF9uc3NfY2xvc2VfYWxsKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKTsKKworaW50IEN1cmxfbnNzX2luaXQodm9pZCk7Cit2b2lkIEN1cmxfbnNzX2NsZWFudXAodm9pZCk7CisKK3NpemVfdCBDdXJsX25zc192ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworaW50IEN1cmxfbnNzX2NoZWNrX2N4bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmN4bik7CitpbnQgQ3VybF9uc3Nfc2VlZChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisKKy8qIGluaXRpYWxpemUgTlNTIGxpYnJhcnkgaWYgbm90IGFscmVhZHkgKi8KK0NVUkxjb2RlIEN1cmxfbnNzX2ZvcmNlX2luaXQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOworCisvKiBBUEkgc2V0dXAgZm9yIE5TUyAqLworI2RlZmluZSBjdXJsc3NsX2luaXQgQ3VybF9uc3NfaW5pdAorI2RlZmluZSBjdXJsc3NsX2NsZWFudXAgQ3VybF9uc3NfY2xlYW51cAorI2RlZmluZSBjdXJsc3NsX2Nvbm5lY3QgQ3VybF9uc3NfY29ubmVjdAorCisvKiBOU1MgaGFzIGl0cyBvd24gc2Vzc2lvbiBJRCBjYWNoZSAqLworI2RlZmluZSBjdXJsc3NsX3Nlc3Npb25fZnJlZSh4KSBDdXJsX25vcF9zdG10CisjZGVmaW5lIGN1cmxzc2xfY2xvc2VfYWxsIEN1cmxfbnNzX2Nsb3NlX2FsbAorI2RlZmluZSBjdXJsc3NsX2Nsb3NlIEN1cmxfbnNzX2Nsb3NlCisvKiBOU1MgaGFzIG5vIHNodXRkb3duIGZ1bmN0aW9uIHByb3ZpZGVkIGFuZCB0aHVzIGFsd2F5cyBmYWlsICovCisjZGVmaW5lIGN1cmxzc2xfc2h1dGRvd24oeCx5KSAoeD14LCB5PXksIDEpCisjZGVmaW5lIGN1cmxzc2xfc2V0X2VuZ2luZSh4LHkpICh4PXgsIHk9eSwgQ1VSTEVfTk9UX0JVSUxUX0lOKQorI2RlZmluZSBjdXJsc3NsX3NldF9lbmdpbmVfZGVmYXVsdCh4KSAoeD14LCBDVVJMRV9OT1RfQlVJTFRfSU4pCisjZGVmaW5lIGN1cmxzc2xfZW5naW5lc19saXN0KHgpICh4PXgsIChzdHJ1Y3QgY3VybF9zbGlzdCAqKU5VTEwpCisjZGVmaW5lIGN1cmxzc2xfdmVyc2lvbiBDdXJsX25zc192ZXJzaW9uCisjZGVmaW5lIGN1cmxzc2xfY2hlY2tfY3huKHgpIEN1cmxfbnNzX2NoZWNrX2N4bih4KQorI2RlZmluZSBjdXJsc3NsX2RhdGFfcGVuZGluZyh4LHkpICh4PXgsIHk9eSwgMCkKKworI2VuZGlmIC8qIFVTRV9OU1MgKi8KKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9OU1NHX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9ud2xpYi5jIGIvY3VybC03LjI1LjAvbGliL253bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3Y2EwZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9ud2xpYi5jCkBAIC0wLDAgKzEsMzI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBORVRXQVJFIC8qIE5vdmVsbCBOZXRXYXJlICovCisKKyNpZmRlZiBfX05PVkVMTF9MSUJDX18KKy8qIEZvciBuYXRpdmUgTGliQy1iYXNlZCBOTE0gd2UgbmVlZCB0byByZWdpc3RlciBhcyBhIHJlYWwgbGliLiAqLworI2luY2x1ZGUgPGxpYnJhcnkuaD4KKyNpbmNsdWRlIDxuZXR3YXJlLmg+CisjaW5jbHVkZSA8c2NyZWVuLmg+CisjaW5jbHVkZSA8bmtzL3RocmVhZC5oPgorI2luY2x1ZGUgPG5rcy9zeW5jaC5oPgorCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGludCAgICAgX2Vycm5vOworICB2b2lkICAgICp0d2VudHlieXRlczsKK30gbGlidGhyZWFkZGF0YV90OworCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQgICAgICAgICB4OworICBpbnQgICAgICAgICB5OworICBpbnQgICAgICAgICB6OworICB2b2lkICAgICAgICAqdGVuYnl0ZXM7CisgIE5YS2V5X3QgICAgIHBlcnRocmVhZGtleTsgICAvKiBpZiAtMSwgbm8ga2V5IG9idGFpbmVkLi4uICovCisgIE5YTXV0ZXhfdCAgICpsb2NrOworfSBsaWJkYXRhX3Q7CisKK2ludCAgICAgICAgIGdMaWJJZCAgICAgID0gLTE7Cit2b2lkICAgICAgICAqZ0xpYkhhbmRsZSA9ICh2b2lkICopIE5VTEw7CitydGFnX3QgICAgICBnQWxsb2NUYWcgICA9IChydGFnX3QpIE5VTEw7CitOWE11dGV4X3QgICAqZ0xpYkxvY2sgICA9IChOWE11dGV4X3QgKikgTlVMTDsKKworLyogaW50ZXJuYWwgbGlicmFyeSBmdW5jdGlvbiBwcm90b3R5cGVzLi4uICovCitpbnQgICAgIERpc3Bvc2VMaWJyYXJ5RGF0YSAoIHZvaWQgKiApOwordm9pZCAgICBEaXNwb3NlVGhyZWFkRGF0YSAoIHZvaWQgKiApOworaW50ICAgICBHZXRPclNldFVwRGF0YSAoIGludCBpZCwgbGliZGF0YV90ICoqZGF0YSwgbGlidGhyZWFkZGF0YV90ICoqdGhyZWFkZGF0YSApOworCisKK2ludCBfTm9uQXBwU3RhcnQoIHZvaWQgICAgICAgICpOTE1IYW5kbGUsCisgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAqZXJyb3JTY3JlZW4sCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAqY21kTGluZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICpsb2FkRGlyUGF0aCwKKyAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgIHVuaW5pdGlhbGl6ZWREYXRhTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgKk5MTUZpbGVIYW5kbGUsCisgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAoKnJlYWRSb3V0aW5lUCkoIGludCBjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpmaWxlSGFuZGxlLCBzaXplX3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzUmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyICksCisgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICBjdXN0b21EYXRhT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgY3VzdG9tRGF0YVNpemUsCisgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICBtZXNzYWdlQ291bnQsCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAqKm1lc3NhZ2VzICkKK3sKKyAgTlhfTE9DS19JTkZPX0FMTE9DKGxpYmxvY2ssICJQZXItQXBwbGljYXRpb24gRGF0YSBMb2NrIiwgMCk7CisKKyNpZm5kZWYgX19HTlVDX18KKyNwcmFnbWEgdW51c2VkKGNtZExpbmUpCisjcHJhZ21hIHVudXNlZChsb2FkRGlyUGF0aCkKKyNwcmFnbWEgdW51c2VkKHVuaW5pdGlhbGl6ZWREYXRhTGVuZ3RoKQorI3ByYWdtYSB1bnVzZWQoTkxNRmlsZUhhbmRsZSkKKyNwcmFnbWEgdW51c2VkKHJlYWRSb3V0aW5lUCkKKyNwcmFnbWEgdW51c2VkKGN1c3RvbURhdGFPZmZzZXQpCisjcHJhZ21hIHVudXNlZChjdXN0b21EYXRhU2l6ZSkKKyNwcmFnbWEgdW51c2VkKG1lc3NhZ2VDb3VudCkKKyNwcmFnbWEgdW51c2VkKG1lc3NhZ2VzKQorI2VuZGlmCisKKy8qCisqKiBIZXJlIHdlIHByb2Nlc3Mgb3VyIGNvbW1hbmQgbGluZSwgcG9zdCBlcnJvcnMgKHRvIHRoZSBlcnJvciBzY3JlZW4pLAorKiogcGVyZm9ybSBpbml0aWFsaXphdGlvbnMgYW5kIGFueXRoaW5nIGVsc2Ugd2UgbmVlZCB0byBkbyBiZWZvcmUgYmVpbmcgYWJsZQorKiogdG8gYWNjZXB0IGNhbGxzIGludG8gdXMuIElmIHdlIHN1Y2NlZWQsIHdlIHJldHVybiBub24temVybyBhbmQgdGhlIE5ldFdhcmUKKyoqIExvYWRlciB3aWxsIGxlYXZlIHVzIHVwLCBvdGhlcndpc2Ugd2UgZmFpbCB0byBsb2FkIGFuZCBnZXQgZHVtcGVkLgorKi8KKyAgZ0FsbG9jVGFnID0gQWxsb2NhdGVSZXNvdXJjZVRhZyhOTE1IYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaWJyYXJ5LW5hbWU+IG1lbW9yeSBhbGxvY2F0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NTaWduYXR1cmUpOworCisgIGlmKCFnQWxsb2NUYWcpIHsKKyAgICBPdXRwdXRUb1NjcmVlbihlcnJvclNjcmVlbiwgIlVuYWJsZSB0byBhbGxvY2F0ZSByZXNvdXJjZSB0YWcgZm9yICIKKyAgICAgICAgICAgICAgICAgICAibGlicmFyeSBtZW1vcnkgYWxsb2NhdGlvbnMuXG4iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBnTGliSWQgPSByZWdpc3Rlcl9saWJyYXJ5KERpc3Bvc2VMaWJyYXJ5RGF0YSk7CisKKyAgaWYoZ0xpYklkIDwgLTEpIHsKKyAgICBPdXRwdXRUb1NjcmVlbihlcnJvclNjcmVlbiwgIlVuYWJsZSB0byByZWdpc3RlciBsaWJyYXJ5IHdpdGgga2VybmVsLlxuIik7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgZ0xpYkhhbmRsZSA9IE5MTUhhbmRsZTsKKworICBnTGliTG9jayA9IE5YTXV0ZXhBbGxvYygwLCAwLCAmbGlibG9jayk7CisKKyAgaWYoIWdMaWJMb2NrKSB7CisgICAgT3V0cHV0VG9TY3JlZW4oZXJyb3JTY3JlZW4sICJVbmFibGUgdG8gYWxsb2NhdGUgbGlicmFyeSBkYXRhIGxvY2suXG4iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworLyoKKyoqIEhlcmUgd2UgY2xlYW4gdXAgYW55IHJlc291cmNlcyB3ZSBhbGxvY2F0ZWQuIFJlc291cmNlIHRhZ3MgaXMgYSBiaWcgcGFydAorKiogb2Ygd2hhdCB3ZSBjcmVhdGVkLCBidXQgTmV0V2FyZSBkb2Vzbid0IGFzayB1cyB0byBmcmVlIHRob3NlLgorKi8KK3ZvaWQgX05vbkFwcFN0b3AoIHZvaWQgKQoreworICAodm9pZCkgdW5yZWdpc3Rlcl9saWJyYXJ5KGdMaWJJZCk7CisgIE5YTXV0ZXhGcmVlKGdMaWJMb2NrKTsKK30KKworLyoKKyoqIFRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIHRoZSBmaXJzdCBpbiB0aGUgZmlsZSBmb3IgaWYgdGhlIGZpbGUgaXMgbGlua2VkCisqKiBmaXJzdCwgdGhlbiB0aGUgY2hlY2stdW5sb2FkIGZ1bmN0aW9uJ3Mgb2Zmc2V0IHdpbGwgYmUgbmxtbmFtZS5ubG0rMAorKiogd2hpY2ggaXMgaG93IHRvIHRlbGwgdGhhdCB0aGVyZSBpc24ndCBvbmUuIFdoZW4gdGhlIGNoZWNrIGZ1bmN0aW9uIGlzCisqKiBmaXJzdCBpbiB0aGUgbGlua2VkIG9iamVjdHMsIGl0IGlzIGFtYmlndW91cy4gRm9yIHRoaXMgcmVhc29uLCB3ZSB3aWxsCisqKiBwdXQgaXQgaW5zaWRlIHRoaXMgZmlsZSBhZnRlciB0aGUgc3RvcCBmdW5jdGlvbi4KKyoqCisqKiBIZXJlIHdlIGNoZWNrIHRvIHNlZSBpZiBpdCdzIGFscmlnaHQgdG8gb3Vyc2VsdmVzIHRvIGJlIHVubG9hZGVkLiBJZiBub3QsCisqKiB3ZSByZXR1cm4gYSBub24temVybyB2YWx1ZS4gUmlnaHQgbm93LCB0aGVyZSBpc24ndCBhbnkgcmVhc29uIG5vdCB0byBhbGxvdworKiogaXQuCisqLworaW50IF9Ob25BcHBDaGVja1VubG9hZCggdm9pZCApCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBHZXRPclNldFVwRGF0YShpbnQgaWQsIGxpYmRhdGFfdCAqKmFwcERhdGEsCisgICAgICAgICAgICAgICAgICAgbGlidGhyZWFkZGF0YV90ICoqdGhyZWFkRGF0YSApCit7CisgIGludCAgICAgICAgICAgICAgICAgZXJyOworICBsaWJkYXRhX3QgICAgICAgICAgICphcHBfZGF0YTsKKyAgbGlidGhyZWFkZGF0YV90ICp0aHJlYWRfZGF0YTsKKyAgTlhLZXlfdCAgICAgICAgICAgICBrZXk7CisgIE5YX0xPQ0tfSU5GT19BTExPQyhsaWJsb2NrLCAiQXBwbGljYXRpb24gRGF0YSBMb2NrIiwgMCk7CisKKyAgZXJyICAgICAgICAgPSAwOworICB0aHJlYWRfZGF0YSA9IChsaWJ0aHJlYWRkYXRhX3QgKikgTlVMTDsKKworLyoKKyoqIEF0dGVtcHQgdG8gZ2V0IG91ciBkYXRhIGZvciB0aGUgYXBwbGljYXRpb24gY2FsbGluZyB1cy4gVGhpcyBpcyB3aGVyZSB3ZQorKiogc3RvcmUgd2hhdGV2ZXIgYXBwbGljYXRpb24tc3BlY2lmaWMgaW5mb3JtYXRpb24gd2UgbmVlZCB0byBjYXJyeSBpbiBzdXBwb3J0CisqKiBvZiBjYWxsaW5nIGFwcGxpY2F0aW9ucy4KKyovCisgIGFwcF9kYXRhID0gKGxpYmRhdGFfdCAqKSBnZXRfYXBwX2RhdGEoaWQpOworCisgIGlmKCFhcHBfZGF0YSkgeworLyoKKyoqIFRoaXMgYXBwbGljYXRpb24gaGFzbid0IGNhbGxlZCB1cyBiZWZvcmU7IHNldCB1cCBhcHBsaWNhdGlvbiBBTkQgcGVyLXRocmVhZAorKiogZGF0YS4gT2YgY291cnNlLCBqdXN0IGluIGNhc2UgYSB0aHJlYWQgZnJvbSB0aGlzIHNhbWUgYXBwbGljYXRpb24gaXMgY2FsbGluZworKiogdXMgc2ltdWx0YW5lb3VzbHksIHdlIGJldHRlciBsb2NrIG91ciBhcHBsaWNhdGlvbiBkYXRhLWNyZWF0aW9uIG11dGV4LiBXZQorKiogYWxzbyBuZWVkIHRvIHJlY2hlY2sgZm9yIGRhdGEgYWZ0ZXIgd2UgYWNxdWlyZSB0aGUgbG9jayBiZWNhdXNlIFdFIG1pZ2h0IGJlCisqKiB0aGF0IG90aGVyIHRocmVhZCB0aGF0IHdhcyB0b28gbGF0ZSB0byBjcmVhdGUgdGhlIGRhdGEgYW5kIHRoZSBmaXJzdCB0aHJlYWQKKyoqIGluIHdpbGwgaGF2ZSBjcmVhdGVkIGl0LgorKi8KKyAgICBOWExvY2soZ0xpYkxvY2spOworCisgICAgaWYoIShhcHBfZGF0YSA9IChsaWJkYXRhX3QgKikgZ2V0X2FwcF9kYXRhKGlkKSkpIHsKKyAgICAgIGFwcF9kYXRhID0gbWFsbG9jKHNpemVvZihsaWJkYXRhX3QpKTsKKworICAgICAgaWYoYXBwX2RhdGEpIHsKKyAgICAgICAgbWVtc2V0KGFwcF9kYXRhLCAwLCBzaXplb2YobGliZGF0YV90KSk7CisKKyAgICAgICAgYXBwX2RhdGEtPnRlbmJ5dGVzID0gbWFsbG9jKDEwKTsKKyAgICAgICAgYXBwX2RhdGEtPmxvY2sgICAgID0gTlhNdXRleEFsbG9jKDAsIDAsICZsaWJsb2NrKTsKKworICAgICAgICBpZighYXBwX2RhdGEtPnRlbmJ5dGVzIHx8ICFhcHBfZGF0YS0+bG9jaykgeworICAgICAgICAgIGlmKGFwcF9kYXRhLT5sb2NrKQorICAgICAgICAgICAgTlhNdXRleEZyZWUoYXBwX2RhdGEtPmxvY2spOworCisgICAgICAgICAgZnJlZShhcHBfZGF0YSk7CisgICAgICAgICAgYXBwX2RhdGEgPSAobGliZGF0YV90ICopIE5VTEw7CisgICAgICAgICAgZXJyICAgICAgPSBFTk9NRU07CisgICAgICAgIH0KKworICAgICAgICBpZihhcHBfZGF0YSkgeworLyoKKyoqIEhlcmUgd2UgYnVybiBpbiB0aGUgYXBwbGljYXRpb24gZGF0YSB0aGF0IHdlIHdlcmUgdHJ5aW5nIHRvIGdldCBieSBjYWxsaW5nCisqKiBnZXRfYXBwX2RhdGEoKS4gTmV4dCB0aW1lIHdlIGNhbGwgdGhlIGZpcnN0IGZ1bmN0aW9uLCB3ZSdsbCBnZXQgdGhpcyBkYXRhCisqKiB3ZSdyZSBqdXN0IG5vdyBzZXR0aW5nLiBXZSBhbHNvIGdvIG9uIGhlcmUgdG8gZXN0YWJsaXNoIHRoZSBwZXItdGhyZWFkIGRhdGEKKyoqIGZvciB0aGUgY2FsbGluZyB0aHJlYWQsIHNvbWV0aGluZyB3ZSdsbCBoYXZlIHRvIGRvIG9uIGVhY2ggYXBwbGljYXRpb24KKyoqIHRocmVhZCB0aGUgZmlyc3QgdGltZSBpdCBjYWxscyB1cy4KKyovCisgICAgICAgICAgZXJyID0gc2V0X2FwcF9kYXRhKGdMaWJJZCwgYXBwX2RhdGEpOworCisgICAgICAgICAgaWYoZXJyKSB7CisgICAgICAgICAgICBmcmVlKGFwcF9kYXRhKTsKKyAgICAgICAgICAgIGFwcF9kYXRhID0gKGxpYmRhdGFfdCAqKSBOVUxMOworICAgICAgICAgICAgZXJyICAgICAgPSBFTk9NRU07CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogY3JlYXRlIGtleSBmb3IgdGhyZWFkLXNwZWNpZmljIGRhdGEuLi4gKi8KKyAgICAgICAgICAgIGVyciA9IE5YS2V5Q3JlYXRlKERpc3Bvc2VUaHJlYWREYXRhLCAodm9pZCAqKSBOVUxMLCAma2V5KTsKKworICAgICAgICAgICAgaWYoZXJyKSAgICAgICAgICAgICAgICAvKiAobm8gbW9yZSBrZXlzIGxlZnQ/KSAqLworICAgICAgICAgICAgICBrZXkgPSAtMTsKKworICAgICAgICAgICAgYXBwX2RhdGEtPnBlcnRocmVhZGtleSA9IGtleTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBOWFVubG9jayhnTGliTG9jayk7CisgIH0KKworICBpZihhcHBfZGF0YSkgeworICAgIGtleSA9IGFwcF9kYXRhLT5wZXJ0aHJlYWRrZXk7CisKKyAgICBpZihrZXkgIT0gLTEgLyogY291bGRuJ3QgY3JlYXRlIGEga2V5PyBubyB0aHJlYWQgZGF0YSAqLworICAgICAgICAmJiAhKGVyciA9IE5YS2V5R2V0VmFsdWUoa2V5LCAodm9pZCAqKikgJnRocmVhZF9kYXRhKSkKKyAgICAgICAgJiYgIXRocmVhZF9kYXRhKSB7CisvKgorKiogQWxsb2NhdGUgdGhlIHBlci10aHJlYWQgZGF0YSBmb3IgdGhlIGNhbGxpbmcgdGhyZWFkLiBSZWdhcmRsZXNzIG9mIHdoZXRoZXIKKyoqIHRoZXJlIHdhcyBhbHJlYWR5IGFwcGxpY2F0aW9uIGRhdGEgb3Igbm90LCB0aGlzIG1heSBiZSB0aGUgZmlyc3QgY2FsbCBieSBhCisqKiBhIG5ldyB0aHJlYWQuIFRoZSBmYWN0IHRoYXQgd2UgYWxsb2NhdGlvbiAyMCBieXRlcyBvbiBhIHBvaW50ZXIgaXMgbm90IHZlcnkKKyoqIGltcG9ydGFudCwgdGhpcyBqdXN0IGhlbHBzIHRvIGRlbW9uc3RyYXRlIHRoYXQgd2UgY2FuIGhhdmUgYXJiaXRyYXJpbHkKKyoqIGNvbXBsZXggcGVyLXRocmVhZCBkYXRhLgorKi8KKyAgICAgIHRocmVhZF9kYXRhID0gbWFsbG9jKHNpemVvZihsaWJ0aHJlYWRkYXRhX3QpKTsKKworICAgICAgaWYodGhyZWFkX2RhdGEpIHsKKyAgICAgICAgdGhyZWFkX2RhdGEtPl9lcnJubyAgICAgID0gMDsKKyAgICAgICAgdGhyZWFkX2RhdGEtPnR3ZW50eWJ5dGVzID0gbWFsbG9jKDIwKTsKKworICAgICAgICBpZighdGhyZWFkX2RhdGEtPnR3ZW50eWJ5dGVzKSB7CisgICAgICAgICAgZnJlZSh0aHJlYWRfZGF0YSk7CisgICAgICAgICAgdGhyZWFkX2RhdGEgPSAobGlidGhyZWFkZGF0YV90ICopIE5VTEw7CisgICAgICAgICAgZXJyICAgICAgICAgPSBFTk9NRU07CisgICAgICAgIH0KKworICAgICAgICBpZigoZXJyID0gTlhLZXlTZXRWYWx1ZShrZXksIHRocmVhZF9kYXRhKSkpIHsKKyAgICAgICAgICBmcmVlKHRocmVhZF9kYXRhLT50d2VudHlieXRlcyk7CisgICAgICAgICAgZnJlZSh0aHJlYWRfZGF0YSk7CisgICAgICAgICAgdGhyZWFkX2RhdGEgPSAobGlidGhyZWFkZGF0YV90ICopIE5VTEw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZihhcHBEYXRhKQorICAgICphcHBEYXRhID0gYXBwX2RhdGE7CisKKyAgaWYodGhyZWFkRGF0YSkKKyAgICAqdGhyZWFkRGF0YSA9IHRocmVhZF9kYXRhOworCisgIHJldHVybiBlcnI7Cit9CisKK2ludCBEaXNwb3NlTGlicmFyeURhdGEoIHZvaWQgKmRhdGEgKQoreworICBpZihkYXRhKSB7CisgICAgdm9pZCAqdGVuYnl0ZXMgPSAoKGxpYmRhdGFfdCAqKSBkYXRhKS0+dGVuYnl0ZXM7CisKKyAgICBpZih0ZW5ieXRlcykKKyAgICAgIGZyZWUodGVuYnl0ZXMpOworCisgICAgZnJlZShkYXRhKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkIERpc3Bvc2VUaHJlYWREYXRhKCB2b2lkICpkYXRhICkKK3sKKyAgaWYoZGF0YSkgeworICAgIHZvaWQgKnR3ZW50eWJ5dGVzID0gKChsaWJ0aHJlYWRkYXRhX3QgKikgZGF0YSktPnR3ZW50eWJ5dGVzOworCisgICAgaWYodHdlbnR5Ynl0ZXMpCisgICAgICBmcmVlKHR3ZW50eWJ5dGVzKTsKKworICAgIGZyZWUoZGF0YSk7CisgIH0KK30KKworI2Vsc2UgLyogX19OT1ZFTExfTElCQ19fICovCisvKiBGb3IgbmF0aXZlIENMaWItYmFzZWQgTkxNIHNlZW1zIHdlIGNhbiBkbyBhIGJpdCBtb3JlIHNpbXBsZS4gKi8KKyNpbmNsdWRlIDxud3RocmVhZC5oPgorCitpbnQgbWFpbiAoIHZvaWQgKQoreworICAgIC8qIGluaXRpYWxpemUgYW55IGdsb2JhbHMgaGVyZS4uLiAqLworCisgICAgLyogZG8gdGhpcyBpZiBhbnkgZ2xvYmFsIGluaXRpYWxpemluZyB3YXMgZG9uZQorICAgIFN5bmNocm9uaXplU3RhcnQoKTsKKyAgICAqLworICAgIEV4aXRUaHJlYWQgKFRTUl9USFJFQUQsIDApOworICAgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogX19OT1ZFTExfTElCQ19fICovCisKKyNlbHNlIC8qIE5FVFdBUkUgKi8KKworI2lmZGVmIF9fUE9DQ19fCisjICBwcmFnbWEgd2FybihkaXNhYmxlOjIwMjQpICAvKiBEaXNhYmxlIHdhcm5pbmcgIzIwMjQ6IEVtcHR5IGlucHV0IGZpbGUgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogTkVUV0FSRSAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL253b3MuYyBiL2N1cmwtNy4yNS4wL2xpYi9ud29zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ2OTViMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9ud29zLmMKQEAgLTAsMCArMSw4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgTkVUV0FSRSAvKiBOb3ZlbGwgTmV0V2FyZSAqLworCisjaWZkZWYgX19OT1ZFTExfTElCQ19fCisvKiBGb3IgbmF0aXZlIExpYkMtYmFzZWQgTkxNIHdlIG5lZWQgdG8gZG8gbm90aGluZy4gKi8KK2ludCBuZXR3YXJlX2luaXQgKCB2b2lkICkKK3sKKyAgICByZXR1cm4gMDsKK30KKworI2Vsc2UgLyogX19OT1ZFTExfTElCQ19fICovCisKKy8qIEZvciBuYXRpdmUgQ0xpYi1iYXNlZCBOTE0gd2UgbmVlZCB0byBpbml0aWFsaXplIHRoZSBMT05HIG5hbWVzcGFjZS4gKi8KKyNpbmNsdWRlIDxud25zcGFjZS5oPgorI2luY2x1ZGUgPG53dGhyZWFkLmg+CisjaW5jbHVkZSA8bndhZHYuaD4KKy8qIE1ha2UgdGhlIENMSUIgQ3R4IHN0dWZmIGxpbmsgKi8KKyNpbmNsdWRlIDxuZXRkYi5oPgorTkVUREJfREVGSU5FX0NPTlRFWFQKKy8qIE1ha2UgdGhlIENMSUIgSW5ldCBzdHVmZiBsaW5rICovCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorTkVUSU5FVF9ERUZJTkVfQ09OVEVYVAorCitpbnQgbmV0d2FyZV9pbml0ICggdm9pZCApCit7CisgICAgaW50IHJjID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgbXlIYW5kbGUgPSBHZXROTE1IYW5kbGUoKTsKKyAgICAvKiBpbXBvcnQgVW5BdWdtZW50QXN0ZXJpc2sgZHluYW1pY2FsbHkgZm9yIE5XNC54IGNvbXBhdGliaWxpdHkgKi8KKyAgICB2b2lkICgqcFVuQXVnbWVudEFzdGVyaXNrKShpbnQpID0gKHZvaWQoKikoaW50KSkKKyAgICAgICAgICAgIEltcG9ydFN5bWJvbChteUhhbmRsZSwgIlVuQXVnbWVudEFzdGVyaXNrIik7CisgICAgLyogaW1wb3J0IFVzZUFjY3VyYXRlQ2FzZUZvclBhdGhzIGR5bmFtaWNhbGx5IGZvciBOVzMueCBjb21wYXRpYmlsaXR5ICovCisgICAgdm9pZCAoKnBVc2VBY2N1cmF0ZUNhc2VGb3JQYXRocykoaW50KSA9ICh2b2lkKCopKGludCkpCisgICAgICAgICAgICBJbXBvcnRTeW1ib2wobXlIYW5kbGUsICJVc2VBY2N1cmF0ZUNhc2VGb3JQYXRocyIpOworICAgIGlmKHBVbkF1Z21lbnRBc3RlcmlzaykKKyAgICAgICAgcFVuQXVnbWVudEFzdGVyaXNrKDEpOworICAgIGlmKHBVc2VBY2N1cmF0ZUNhc2VGb3JQYXRocykKKyAgICAgICAgcFVzZUFjY3VyYXRlQ2FzZUZvclBhdGhzKDEpOworICAgIFVuaW1wb3J0U3ltYm9sKG15SGFuZGxlLCAiVW5BdWdtZW50QXN0ZXJpc2siKTsKKyAgICBVbmltcG9ydFN5bWJvbChteUhhbmRsZSwgIlVzZUFjY3VyYXRlQ2FzZUZvclBhdGhzIik7CisgICAgLyogc2V0IGxvbmcgbmFtZSBzcGFjZSAqLworICAgIGlmKChTZXRDdXJyZW50TmFtZVNwYWNlKDQpID09IDI1NSkpIHsKKyAgICAgICAgcmMgPSAxOworICAgIH0KKyAgICBpZigoU2V0VGFyZ2V0TmFtZVNwYWNlKDQpID09IDI1NSkpIHsKKyAgICAgICAgcmMgPSByYyArIDI7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworLyogZHVtbXkgZnVuY3Rpb24gdG8gc2F0aXNmeSBuZXdlciBwcmVsdWRlICovCitpbnQgX19pbml0X2Vudmlyb25tZW50ICggdm9pZCApCit7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIGR1bW15IGZ1bmN0aW9uIHRvIHNhdGlzZnkgbmV3ZXIgcHJlbHVkZSAqLworaW50IF9fZGVpbml0X2Vudmlyb25tZW50ICggdm9pZCApCit7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBfX05PVkVMTF9MSUJDX18gKi8KKworI2VuZGlmIC8qIE5FVFdBUkUgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9vcGVubGRhcC5jIGIvY3VybC03LjI1LjAvbGliL29wZW5sZGFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg4NmQwOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9vcGVubGRhcC5jCkBAIC0wLDAgKzEsNjQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEhvd2FyZCBDaHUsIDxoeWNAb3BlbmxkYXAub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0xEQVApICYmIGRlZmluZWQoVVNFX09QRU5MREFQKQorCisvKgorICogTm90aWNlIHRoYXQgVVNFX09QRU5MREFQIGlzIG9ubHkgYSBzb3VyY2UgY29kZSBzZWxlY3Rpb24gc3dpdGNoLiBXaGVuCisgKiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGggVVNFX09QRU5MREFQIGRlZmluZWQgdGhlIGxpYmN1cmwgc291cmNlIGNvZGUgdGhhdAorICogZ2V0cyBjb21waWxlZCBpcyB0aGUgY29kZSBmcm9tIG9wZW5sZGFwLmMsIG90aGVyd2lzZSB0aGUgY29kZSB0aGF0IGdldHMKKyAqIGNvbXBpbGVkIGlzIHRoZSBjb2RlIGZyb20gbGRhcC5jLgorICoKKyAqIFdoZW4gVVNFX09QRU5MREFQIGlzIGRlZmluZWQgYSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgT3BlbkxEQVAgbGlicmFyeQorICogbWlnaHQgYmUgcmVxdWlyZWQgZm9yIGNvbXBpbGF0aW9uIGFuZCBydW50aW1lLiBJbiBvcmRlciB0byB1c2UgYW5jaWVudAorICogT3BlbkxEQVAgbGlicmFyeSB2ZXJzaW9ucywgVVNFX09QRU5MREFQIHNoYWxsIG5vdCBiZSBkZWZpbmVkLgorICovCisKKyNpbmNsdWRlIDxsZGFwLmg+CisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJzc2xnZW4uaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgImN1cmxfbGRhcC5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAiY3VybF9iYXNlNjQuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZm5kZWYgX0xEQVBfUFZUX0gKK2V4dGVybiBpbnQgbGRhcF9wdnRfdXJsX3NjaGVtZTJwcm90byhjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBsZGFwX2luaXRfZmQoYmVyX3NvY2tldF90IGZkLCBpbnQgcHJvdG8sIGNvbnN0IGNoYXIgKnVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgIExEQVAgKipsZCk7CisjZW5kaWYKKworc3RhdGljIENVUkxjb2RlIGxkYXBfc2V0dXAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3N0YXRpYyBDVVJMY29kZSBsZGFwX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgbGRhcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUsIGJvb2wpOworc3RhdGljIENVUkxjb2RlIGxkYXBfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIGxkYXBfY29ubmVjdGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIGxkYXBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCk7CisKK3N0YXRpYyBDdXJsX3JlY3YgbGRhcF9yZWN2OworCisvKgorICogTERBUCBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2xkYXAgPSB7CisgICJMREFQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIGxkYXBfc2V0dXAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBsZGFwX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIGxkYXBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgbGRhcF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIGxkYXBfY29ubmVjdGluZywgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBsZGFwX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9MREFQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19MREFQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKworI2lmZGVmIFVTRV9TU0wKKy8qCisgKiBMREFQUyBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2xkYXBzID0geworICAiTERBUFMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBsZGFwX3NldHVwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgbGRhcF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBsZGFwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIGxkYXBfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBsZGFwX2Nvbm5lY3RpbmcsICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgbGRhcF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFBPUlRfTERBUFMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fTERBUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfU1NMICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgKnVybF9lcnJzW10gPSB7CisgICJzdWNjZXNzIiwKKyAgIm91dCBvZiBtZW1vcnkiLAorICAiYmFkIHBhcmFtZXRlciIsCisgICJ1bnJlY29nbml6ZWQgc2NoZW1lIiwKKyAgInVuYmFsYW5jZWQgZGVsaW1pdGVyIiwKKyAgImJhZCBVUkwiLAorICAiYmFkIGhvc3Qgb3IgcG9ydCIsCisgICJiYWQgb3IgbWlzc2luZyBhdHRyaWJ1dGVzIiwKKyAgImJhZCBvciBtaXNzaW5nIHNjb3BlIiwKKyAgImJhZCBvciBtaXNzaW5nIGZpbHRlciIsCisgICJiYWQgb3IgbWlzc2luZyBleHRlbnNpb25zIgorfTsKKwordHlwZWRlZiBzdHJ1Y3QgbGRhcGNvbm5pbmZvIHsKKyAgTERBUCAqbGQ7CisgIEN1cmxfcmVjdiAqcmVjdjsgIC8qIGZvciBzdGFja2luZyBTU0wgaGFuZGxlciAqLworICBDdXJsX3NlbmQgKnNlbmQ7CisgIGludCBwcm90bzsKKyAgaW50IG1zZ2lkOworICBib29sIHNzbGRvbmU7CisgIGJvb2wgc3NsaW5zdDsKKyAgYm9vbCBkaWRiaW5kOworfSBsZGFwY29ubmluZm87CisKK3R5cGVkZWYgc3RydWN0IGxkYXByZXFpbmZvIHsKKyAgaW50IG1zZ2lkOworICBpbnQgbnVtZW50OworfSBsZGFwcmVxaW5mbzsKKworc3RhdGljIENVUkxjb2RlIGxkYXBfc2V0dXAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBsZGFwY29ubmluZm8gKmxpOworICBMREFQVVJMRGVzYyAqbHVkOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YT1jb25uLT5kYXRhOworICBpbnQgcmMsIHByb3RvOworICBDVVJMY29kZSBzdGF0dXM7CisKKyAgcmMgPSBsZGFwX3VybF9wYXJzZShkYXRhLT5jaGFuZ2UudXJsLCAmbHVkKTsKKyAgaWYocmMgIT0gTERBUF9VUkxfU1VDQ0VTUykgeworICAgIGNvbnN0IGNoYXIgKm1zZyA9ICJ1cmwgcGFyc2luZyBwcm9ibGVtIjsKKyAgICBzdGF0dXMgPSBDVVJMRV9VUkxfTUFMRk9STUFUOworICAgIGlmKHJjID4gTERBUF9VUkxfU1VDQ0VTUyAmJiByYyA8PSBMREFQX1VSTF9FUlJfQkFERVhUUykgeworICAgICAgaWYocmMgPT0gTERBUF9VUkxfRVJSX01FTSkKKyAgICAgICAgc3RhdHVzID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIG1zZyA9IHVybF9lcnJzW3JjXTsKKyAgICB9CisgICAgZmFpbGYoY29ubi0+ZGF0YSwgIkxEQVAgbG9jYWw6ICVzIiwgbXNnKTsKKyAgICByZXR1cm4gc3RhdHVzOworICB9CisgIHByb3RvID0gbGRhcF9wdnRfdXJsX3NjaGVtZTJwcm90byhsdWQtPmx1ZF9zY2hlbWUpOworICBsZGFwX2ZyZWVfdXJsZGVzYyhsdWQpOworCisgIGxpID0gY2FsbG9jKDEsIHNpemVvZihsZGFwY29ubmluZm8pKTsKKyAgbGktPnByb3RvID0gcHJvdG87CisgIGNvbm4tPnByb3RvLmdlbmVyaWMgPSBsaTsKKyAgY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOworICAvKiBUT0RPOgorICAgKiAtIHByb3ZpZGUgb3B0aW9uIHRvIGNob29zZSBTQVNMIEJpbmRzIGluc3RlYWQgb2YgU2ltcGxlCisgICAqLworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKyNpZmRlZiBVU0VfU1NMCitzdGF0aWMgU29ja2J1Zl9JTyBsZGFwc2JfdGxzOworI2VuZGlmCisKK3N0YXRpYyBDVVJMY29kZSBsZGFwX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9Y29ubi0+ZGF0YTsKKyAgaW50IHJjLCBwcm90byA9IExEQVBfVkVSU0lPTjM7CisgIGNoYXIgaG9zdHVybFsxMDI0XSwgKnB0cjsKKworICBzdHJjcHkoaG9zdHVybCwgImxkYXAiKTsKKyAgcHRyID0gaG9zdHVybCs0OworICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKQorICAgICpwdHIrKyA9ICdzJzsKKyAgc25wcmludGYocHRyLCBzaXplb2YoaG9zdHVybCktKHB0ci1ob3N0dXJsKSwgIjovLyVzOiVkIiwKKyAgICBjb25uLT5ob3N0Lm5hbWUsIGNvbm4tPnJlbW90ZV9wb3J0KTsKKworICByYyA9IGxkYXBfaW5pdF9mZChjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSwgbGktPnByb3RvLCBob3N0dXJsLCAmbGktPmxkKTsKKyAgaWYocmMpIHsKKyAgICBmYWlsZihkYXRhLCAiTERBUCBsb2NhbDogQ2Fubm90IGNvbm5lY3QgdG8gJXMsICVzIiwKKyAgICAgICAgICBob3N0dXJsLCBsZGFwX2VycjJzdHJpbmcocmMpKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisKKyAgbGRhcF9zZXRfb3B0aW9uKGxpLT5sZCwgTERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTiwgJnByb3RvKTsKKworI2lmZGVmIFVTRV9TU0wKKyAgaWYoY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCkgeworICAgIENVUkxjb2RlIHJlczsKKyAgICBpZihkYXRhLT5zdGF0ZS51c2VkX2ludGVyZmFjZSA9PSBDdXJsX2lmX2Vhc3kpIHsKKyAgICAgIHJlcyA9IEN1cmxfc3NsX2Nvbm5lY3QoY29ubiwgRklSU1RTT0NLRVQpOworICAgICAgaWYocmVzKQorICAgICAgICByZXR1cm4gcmVzOworICAgICAgbGktPnNzbGRvbmUgPSBUUlVFOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlcyA9IEN1cmxfc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoY29ubiwgRklSU1RTT0NLRVQsICZsaS0+c3NsZG9uZSk7CisgICAgICBpZihyZXMpCisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisjZW5kaWYKKworICBpZihkYXRhLT5zdGF0ZS51c2VkX2ludGVyZmFjZSA9PSBDdXJsX2lmX2Vhc3kpCisgICAgcmV0dXJuIGxkYXBfY29ubmVjdGluZyhjb25uLCBkb25lKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBsZGFwX2Nvbm5lY3Rpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE9Y29ubi0+ZGF0YTsKKyAgTERBUE1lc3NhZ2UgKnJlc3VsdCA9IE5VTEw7CisgIHN0cnVjdCB0aW1ldmFsIHR2ID0gezAsMX0sICp0dnA7CisgIGludCByYywgZXJyOworICBjaGFyICppbmZvID0gTlVMTDsKKworI2lmZGVmIFVTRV9TU0wKKyAgaWYoY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCkgeworICAgIC8qIElzIHRoZSBTU0wgaGFuZHNoYWtlIGNvbXBsZXRlIHlldD8gKi8KKyAgICBpZighbGktPnNzbGRvbmUpIHsKKyAgICAgIENVUkxjb2RlIHJlcyA9IEN1cmxfc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoY29ubiwgRklSU1RTT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsaS0+c3NsZG9uZSk7CisgICAgICBpZihyZXMgfHwgIWxpLT5zc2xkb25lKQorICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICAvKiBIYXZlIHdlIGluc3RhbGxlZCB0aGUgbGliY3VybCBTU0wgaGFuZGxlcnMgaW50byB0aGUgc29ja2J1ZiB5ZXQ/ICovCisgICAgaWYoIWxpLT5zc2xpbnN0KSB7CisgICAgICBTb2NrYnVmICpzYjsKKyAgICAgIGxkYXBfZ2V0X29wdGlvbihsaS0+bGQsIExEQVBfT1BUX1NPQ0tCVUYsICZzYik7CisgICAgICBiZXJfc29ja2J1Zl9hZGRfaW8oc2IsICZsZGFwc2JfdGxzLCBMQkVSX1NCSU9EX0xFVkVMX1RSQU5TUE9SVCwgY29ubik7CisgICAgICBsaS0+c3NsaW5zdCA9IFRSVUU7CisgICAgICBsaS0+cmVjdiA9IGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdOworICAgICAgbGktPnNlbmQgPSBjb25uLT5zZW5kW0ZJUlNUU09DS0VUXTsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIGlmKGRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID09IEN1cmxfaWZfZWFzeSkKKyAgICB0dnAgPSBOVUxMOyAgICAvKiBsZXQgbGRhcF9yZXN1bHQgYmxvY2sgaW5kZWZpbml0ZWx5ICovCisgIGVsc2UKKyAgICB0dnAgPSAmdHY7CisKK3JldHJ5OgorICBpZighbGktPmRpZGJpbmQpIHsKKyAgICBjaGFyICpiaW5kZG47CisgICAgc3RydWN0IGJlcnZhbCBwYXNzd2Q7CisKKyAgICBpZihjb25uLT5iaXRzLnVzZXJfcGFzc3dkKSB7CisgICAgICBiaW5kZG4gPSBjb25uLT51c2VyOworICAgICAgcGFzc3dkLmJ2X3ZhbCA9IGNvbm4tPnBhc3N3ZDsKKyAgICAgIHBhc3N3ZC5idl9sZW4gPSBzdHJsZW4ocGFzc3dkLmJ2X3ZhbCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgYmluZGRuID0gTlVMTDsKKyAgICAgIHBhc3N3ZC5idl92YWwgPSBOVUxMOworICAgICAgcGFzc3dkLmJ2X2xlbiA9IDA7CisgICAgfQorICAgIHJjID0gbGRhcF9zYXNsX2JpbmQobGktPmxkLCBiaW5kZG4sIExEQVBfU0FTTF9TSU1QTEUsICZwYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAmbGktPm1zZ2lkKTsKKyAgICBpZihyYykKKyAgICAgIHJldHVybiBDVVJMRV9MREFQX0NBTk5PVF9CSU5EOworICAgIGxpLT5kaWRiaW5kID0gVFJVRTsKKyAgICBpZih0dnApCisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKworICByYyA9IGxkYXBfcmVzdWx0KGxpLT5sZCwgbGktPm1zZ2lkLCBMREFQX01TR19PTkUsIHR2cCwgJnJlc3VsdCk7CisgIGlmKHJjIDwgMCkgeworICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiBiaW5kIGxkYXBfcmVzdWx0ICVzIiwgbGRhcF9lcnIyc3RyaW5nKHJjKSk7CisgICAgcmV0dXJuIENVUkxFX0xEQVBfQ0FOTk9UX0JJTkQ7CisgIH0KKyAgaWYocmMgPT0gMCkgeworICAgIC8qIHRpbWVkIG91dCAqLworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorICByYyA9IGxkYXBfcGFyc2VfcmVzdWx0KGxpLT5sZCwgcmVzdWx0LCAmZXJyLCBOVUxMLCAmaW5mbywgTlVMTCwgTlVMTCwgMSk7CisgIGlmKHJjKSB7CisgICAgZmFpbGYoZGF0YSwgIkxEQVAgbG9jYWw6IGJpbmQgbGRhcF9wYXJzZV9yZXN1bHQgJXMiLCBsZGFwX2VycjJzdHJpbmcocmMpKTsKKyAgICByZXR1cm4gQ1VSTEVfTERBUF9DQU5OT1RfQklORDsKKyAgfQorICAvKiBUcnkgdG8gZmFsbGJhY2sgdG8gTERBUHYyPyAqLworICBpZihlcnIgPT0gTERBUF9QUk9UT0NPTF9FUlJPUikgeworICAgIGludCBwcm90bzsKKyAgICBsZGFwX2dldF9vcHRpb24obGktPmxkLCBMREFQX09QVF9QUk9UT0NPTF9WRVJTSU9OLCAmcHJvdG8pOworICAgIGlmKHByb3RvID09IExEQVBfVkVSU0lPTjMpIHsKKyAgICAgIGlmKGluZm8pIHsKKyAgICAgICAgbGRhcF9tZW1mcmVlKGluZm8pOworICAgICAgICBpbmZvID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIHByb3RvID0gTERBUF9WRVJTSU9OMjsKKyAgICAgIGxkYXBfc2V0X29wdGlvbihsaS0+bGQsIExEQVBfT1BUX1BST1RPQ09MX1ZFUlNJT04sICZwcm90byk7CisgICAgICBsaS0+ZGlkYmluZCA9IEZBTFNFOworICAgICAgZ290byByZXRyeTsKKyAgICB9CisgIH0KKworICBpZihlcnIpIHsKKyAgICBmYWlsZihkYXRhLCAiTERBUCByZW1vdGU6IGJpbmQgZmFpbGVkICVzICVzIiwgbGRhcF9lcnIyc3RyaW5nKHJjKSwKKyAgICAgICAgICBpbmZvID8gaW5mbyA6ICIiKTsKKyAgICBpZihpbmZvKQorICAgICAgbGRhcF9tZW1mcmVlKGluZm8pOworICAgIHJldHVybiBDVVJMRV9MT0dJTl9ERU5JRUQ7CisgIH0KKworICBpZihpbmZvKQorICAgIGxkYXBfbWVtZnJlZShpbmZvKTsKKyAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBsZGFwX3JlY3Y7CisgICpkb25lID0gVFJVRTsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgbGRhcF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCit7CisgIGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5nZW5lcmljOworICAodm9pZCkgZGVhZF9jb25uZWN0aW9uOworCisgIGlmKGxpKSB7CisgICAgaWYobGktPmxkKSB7CisgICAgICBsZGFwX3VuYmluZF9leHQobGktPmxkLCBOVUxMLCBOVUxMKTsKKyAgICAgIGxpLT5sZCA9IE5VTEw7CisgICAgfQorICAgIGNvbm4tPnByb3RvLmdlbmVyaWMgPSBOVUxMOworICAgIGZyZWUobGkpOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIGxkYXBfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgbGRhcHJlcWluZm8gKmxyOworICBDVVJMY29kZSBzdGF0dXMgPSBDVVJMRV9PSzsKKyAgaW50IHJjID0gMDsKKyAgTERBUFVSTERlc2MgKmx1ZHAgPSBOVUxMOworICBpbnQgbXNnaWQ7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisKKyAgY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOworCisgIGluZm9mKGRhdGEsICJMREFQIGxvY2FsOiAlc1xuIiwgZGF0YS0+Y2hhbmdlLnVybCk7CisKKyAgcmMgPSBsZGFwX3VybF9wYXJzZShkYXRhLT5jaGFuZ2UudXJsLCAmbHVkcCk7CisgIGlmKHJjICE9IExEQVBfVVJMX1NVQ0NFU1MpIHsKKyAgICBjb25zdCBjaGFyICptc2cgPSAidXJsIHBhcnNpbmcgcHJvYmxlbSI7CisgICAgc3RhdHVzID0gQ1VSTEVfVVJMX01BTEZPUk1BVDsKKyAgICBpZihyYyA+IExEQVBfVVJMX1NVQ0NFU1MgJiYgcmMgPD0gTERBUF9VUkxfRVJSX0JBREVYVFMpIHsKKyAgICAgIGlmKHJjID09IExEQVBfVVJMX0VSUl9NRU0pCisgICAgICAgIHN0YXR1cyA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICBtc2cgPSB1cmxfZXJyc1tyY107CisgICAgfQorICAgIGZhaWxmKGNvbm4tPmRhdGEsICJMREFQIGxvY2FsOiAlcyIsIG1zZyk7CisgICAgcmV0dXJuIHN0YXR1czsKKyAgfQorCisgIHJjID0gbGRhcF9zZWFyY2hfZXh0KGxpLT5sZCwgbHVkcC0+bHVkX2RuLCBsdWRwLT5sdWRfc2NvcGUsCisgICAgICAgICAgICAgICAgICAgICAgIGx1ZHAtPmx1ZF9maWx0ZXIsIGx1ZHAtPmx1ZF9hdHRycywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgMCwgJm1zZ2lkKTsKKyAgbGRhcF9mcmVlX3VybGRlc2MobHVkcCk7CisgIGlmKHJjICE9IExEQVBfU1VDQ0VTUykgeworICAgIGZhaWxmKGRhdGEsICJMREFQIGxvY2FsOiBsZGFwX3NlYXJjaF9leHQgJXMiLCBsZGFwX2VycjJzdHJpbmcocmMpKTsKKyAgICByZXR1cm4gQ1VSTEVfTERBUF9TRUFSQ0hfRkFJTEVEOworICB9CisgIGxyID0gY2FsbG9jKDEsc2l6ZW9mKGxkYXByZXFpbmZvKSk7CisgIGxyLT5tc2dpZCA9IG1zZ2lkOworICBkYXRhLT5zdGF0ZS5wcm90by5nZW5lcmljID0gbHI7CisgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOworICAqZG9uZSA9IFRSVUU7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIGxkYXBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCit7CisgIGxkYXByZXFpbmZvICpsciA9IGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLmdlbmVyaWM7CisgICh2b2lkKXJlczsKKyAgKHZvaWQpcHJlbWF0dXJlOworCisgIGlmKGxyKSB7CisgICAgLyogaWYgdGhlcmUgd2FzIGEgc2VhcmNoIGluIHByb2dyZXNzLCBhYmFuZG9uIGl0ICovCisgICAgaWYobHItPm1zZ2lkKSB7CisgICAgICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgICAgIGxkYXBfYWJhbmRvbl9leHQobGktPmxkLCBsci0+bXNnaWQsIE5VTEwsIE5VTEwpOworICAgICAgbHItPm1zZ2lkID0gMDsKKyAgICB9CisgICAgY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8uZ2VuZXJpYyA9IE5VTEw7CisgICAgZnJlZShscik7CisgIH0KKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgc3NpemVfdCBsZGFwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgbGRhcGNvbm5pbmZvICpsaSA9IGNvbm4tPnByb3RvLmdlbmVyaWM7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisgIGxkYXByZXFpbmZvICpsciA9IGRhdGEtPnN0YXRlLnByb3RvLmdlbmVyaWM7CisgIGludCByYywgcmV0OworICBMREFQTWVzc2FnZSAqcmVzdWx0ID0gTlVMTDsKKyAgTERBUE1lc3NhZ2UgKmVudDsKKyAgQmVyRWxlbWVudCAqYmVyID0gTlVMTDsKKyAgc3RydWN0IHRpbWV2YWwgdHYgPSB7MCwxfTsKKyAgKHZvaWQpbGVuOworICAodm9pZClidWY7CisgICh2b2lkKXNvY2tpbmRleDsKKworICByYyA9IGxkYXBfcmVzdWx0KGxpLT5sZCwgbHItPm1zZ2lkLCBMREFQX01TR19SRUNFSVZFRCwgJnR2LCAmcmVzdWx0KTsKKyAgaWYocmMgPCAwKSB7CisgICAgZmFpbGYoZGF0YSwgIkxEQVAgbG9jYWw6IHNlYXJjaCBsZGFwX3Jlc3VsdCAlcyIsIGxkYXBfZXJyMnN0cmluZyhyYykpOworICAgICplcnIgPSBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiAtMTsKKyAgfQorCisgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgcmV0ID0gLTE7CisKKyAgLyogdGltZWQgb3V0ICovCisgIGlmKHJlc3VsdCA9PSBOVUxMKQorICAgIHJldHVybiByZXQ7CisKKyAgZm9yKGVudCA9IGxkYXBfZmlyc3RfbWVzc2FnZShsaS0+bGQsIHJlc3VsdCk7IGVudDsKKyAgICBlbnQgPSBsZGFwX25leHRfbWVzc2FnZShsaS0+bGQsIGVudCkpIHsKKyAgICBzdHJ1Y3QgYmVydmFsIGJ2LCAqYnZhbHMsICoqYnZwID0gJmJ2YWxzOworICAgIGludCBiaW5hcnkgPSAwLCBtc2d0eXBlOworCisgICAgbXNndHlwZSA9IGxkYXBfbXNndHlwZShlbnQpOworICAgIGlmKG1zZ3R5cGUgPT0gTERBUF9SRVNfU0VBUkNIX1JFU1VMVCkgeworICAgICAgaW50IGNvZGU7CisgICAgICBjaGFyICppbmZvID0gTlVMTDsKKyAgICAgIHJjID0gbGRhcF9wYXJzZV9yZXN1bHQobGktPmxkLCBlbnQsICZjb2RlLCBOVUxMLCAmaW5mbywgTlVMTCwgTlVMTCwgMCk7CisgICAgICBpZihyYykgeworICAgICAgICBmYWlsZihkYXRhLCAiTERBUCBsb2NhbDogc2VhcmNoIGxkYXBfcGFyc2VfcmVzdWx0ICVzIiwKKyAgICAgICAgICAgICAgbGRhcF9lcnIyc3RyaW5nKHJjKSk7CisgICAgICAgICplcnIgPSBDVVJMRV9MREFQX1NFQVJDSF9GQUlMRUQ7CisgICAgICB9CisgICAgICBlbHNlIGlmKGNvZGUgJiYgY29kZSAhPSBMREFQX1NJWkVMSU1JVF9FWENFRURFRCkgeworICAgICAgICBmYWlsZihkYXRhLCAiTERBUCByZW1vdGU6IHNlYXJjaCBmYWlsZWQgJXMgJXMiLCBsZGFwX2VycjJzdHJpbmcocmMpLAorICAgICAgICAgICAgICBpbmZvID8gaW5mbyA6ICIiKTsKKyAgICAgICAgKmVyciA9IENVUkxFX0xEQVBfU0VBUkNIX0ZBSUxFRDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBzdWNjZXNzZnVsICovCisgICAgICAgIGlmKGNvZGUgPT0gTERBUF9TSVpFTElNSVRfRVhDRUVERUQpCisgICAgICAgICAgaW5mb2YoZGF0YSwgIlRoZXJlIGFyZSBtb3JlIHRoYW4gJWQgZW50cmllc1xuIiwgbHItPm51bWVudCk7CisgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+cmVxLmJ5dGVjb3VudDsKKyAgICAgICAgKmVyciA9IENVUkxFX09LOworICAgICAgICByZXQgPSAwOworICAgICAgfQorICAgICAgbHItPm1zZ2lkID0gMDsKKyAgICAgIGxkYXBfbWVtZnJlZShpbmZvKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBlbHNlIGlmKG1zZ3R5cGUgIT0gTERBUF9SRVNfU0VBUkNIX0VOVFJZKQorICAgICAgY29udGludWU7CisKKyAgICBsci0+bnVtZW50Kys7CisgICAgcmMgPSBsZGFwX2dldF9kbl9iZXIobGktPmxkLCBlbnQsICZiZXIsICZidik7CisgICAgaWYocmMgPCAwKSB7CisgICAgICAvKiBUT0RPOiB2ZXJpZnkgdGhhdCB0aGlzIGlzIHJlYWxseSBob3cgdGhpcyByZXR1cm4gY29kZSBzaG91bGQgYmUKKyAgICAgICAgIGhhbmRsZWQgKi8KKyAgICAgICplcnIgPSBDVVJMRV9SRUNWX0VSUk9SOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKSJETjogIiwgNCk7CisgICAgQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgKGNoYXIgKilidi5idl92YWwsIGJ2LmJ2X2xlbik7CisgICAgQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgKGNoYXIgKikiXG4iLCAxKTsKKyAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IGJ2LmJ2X2xlbiArIDU7CisKKyAgICBmb3IocmMgPSBsZGFwX2dldF9hdHRyaWJ1dGVfYmVyKGxpLT5sZCwgZW50LCBiZXIsICZidiwgYnZwKTsKKyAgICAgIHJjID09IExEQVBfU1VDQ0VTUzsKKyAgICAgIHJjID0gbGRhcF9nZXRfYXR0cmlidXRlX2JlcihsaS0+bGQsIGVudCwgYmVyLCAmYnYsIGJ2cCkpIHsKKyAgICAgIGludCBpOworCisgICAgICBpZihidi5idl92YWwgPT0gTlVMTCkgYnJlYWs7CisKKyAgICAgIGlmKGJ2LmJ2X2xlbiA+IDcgJiYgIXN0cm5jbXAoYnYuYnZfdmFsICsgYnYuYnZfbGVuIC0gNywgIjtiaW5hcnkiLCA3KSkKKyAgICAgICAgYmluYXJ5ID0gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgYmluYXJ5ID0gMDsKKworICAgICAgZm9yKGk9MDsgYnZhbHNbaV0uYnZfdmFsICE9IE5VTEw7IGkrKykgeworICAgICAgICBpbnQgYmludmFsID0gMDsKKyAgICAgICAgQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgKGNoYXIgKikiXHQiLCAxKTsKKyAgICAgICAgQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgKGNoYXIgKilidi5idl92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2LmJ2X2xlbik7CisgICAgICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIjoiLCAxKTsKKyAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSBidi5idl9sZW4gKyAyOworCisgICAgICAgIGlmKCFiaW5hcnkpIHsKKyAgICAgICAgICAvKiBjaGVjayBmb3IgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlICovCisgICAgICAgICAgaWYoSVNTUEFDRShidmFsc1tpXS5idl92YWxbMF0pIHx8CisgICAgICAgICAgICAgIElTU1BBQ0UoYnZhbHNbaV0uYnZfdmFsW2J2YWxzW2ldLmJ2X2xlbi0xXSkpCisgICAgICAgICAgICBiaW52YWwgPSAxOworICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogY2hlY2sgZm9yIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgKi8KKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBqOworICAgICAgICAgICAgZm9yKGo9MDsgajxidmFsc1tpXS5idl9sZW47IGorKykKKyAgICAgICAgICAgICAgaWYoIUlTUFJJTlQoYnZhbHNbaV0uYnZfdmFsW2pdKSkgeworICAgICAgICAgICAgICAgIGJpbnZhbCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYoYmluYXJ5IHx8IGJpbnZhbCkgeworICAgICAgICAgIGNoYXIgKnZhbF9iNjQgPSBOVUxMOworICAgICAgICAgIHNpemVfdCB2YWxfYjY0X3N6ID0gMDsKKyAgICAgICAgICAvKiBCaW5hcnkgdmFsdWUsIGVuY29kZSB0byBiYXNlNjQuICovCisgICAgICAgICAgQ1VSTGNvZGUgZXJyb3IgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidmFsc1tpXS5idl92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZhbHNbaV0uYnZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWxfYjY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWxfYjY0X3N6KTsKKyAgICAgICAgICBpZihlcnJvcikgeworICAgICAgICAgICAgYmVyX21lbWZyZWUoYnZhbHMpOworICAgICAgICAgICAgYmVyX2ZyZWUoYmVyLCAwKTsKKyAgICAgICAgICAgIGxkYXBfbXNnZnJlZShyZXN1bHQpOworICAgICAgICAgICAgKmVyciA9IGVycm9yOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KKyAgICAgICAgICBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKSI6ICIsIDIpOworICAgICAgICAgIGRhdGEtPnJlcS5ieXRlY291bnQgKz0gMjsKKyAgICAgICAgICBpZih2YWxfYjY0X3N6ID4gMCkgeworICAgICAgICAgICAgQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgdmFsX2I2NCwgdmFsX2I2NF9zeik7CisgICAgICAgICAgICBmcmVlKHZhbF9iNjQpOworICAgICAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSB2YWxfYjY0X3N6OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKSIgIiwgMSk7CisgICAgICAgICAgQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgYnZhbHNbaV0uYnZfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2YWxzW2ldLmJ2X2xlbik7CisgICAgICAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCArPSBidmFsc1tpXS5idl9sZW4gKyAxOworICAgICAgICB9CisgICAgICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIlxuIiwgMCk7CisgICAgICAgIGRhdGEtPnJlcS5ieXRlY291bnQrKzsKKyAgICAgIH0KKyAgICAgIGJlcl9tZW1mcmVlKGJ2YWxzKTsKKyAgICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIlxuIiwgMCk7CisgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50Kys7CisgICAgfQorICAgIEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyICopIlxuIiwgMCk7CisgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCsrOworICAgIGJlcl9mcmVlKGJlciwgMCk7CisgIH0KKyAgbGRhcF9tc2dmcmVlKHJlc3VsdCk7CisgIHJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBVU0VfU1NMCitzdGF0aWMgaW50CitsZGFwc2JfdGxzX3NldHVwKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QsIHZvaWQgKmFyZykKK3sKKyAgc2Jpb2QtPnNiaW9kX3B2dCA9IGFyZzsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2xkYXBzYl90bHNfcmVtb3ZlKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QpCit7CisgIHNiaW9kLT5zYmlvZF9wdnQgPSBOVUxMOworICByZXR1cm4gMDsKK30KKworLyogV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBiZWNhdXNlIGxpYmN1cmwgZG9lcyBpdCBhbHJlYWR5ICovCitzdGF0aWMgaW50CitsZGFwc2JfdGxzX2Nsb3NlKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QpCit7CisgICh2b2lkKXNiaW9kOworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbGRhcHNiX3Rsc19jdHJsKFNvY2tidWZfSU9fRGVzYyAqc2Jpb2QsIGludCBvcHQsIHZvaWQgKmFyZykKK3sKKyAgKHZvaWQpYXJnOworICBpZihvcHQgPT0gTEJFUl9TQl9PUFRfREFUQV9SRUFEWSkgeworICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IHNiaW9kLT5zYmlvZF9wdnQ7CisgICAgcmV0dXJuIEN1cmxfc3NsX2RhdGFfcGVuZGluZyhjb25uLCBGSVJTVFNPQ0tFVCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBiZXJfc2xlbl90CitsZGFwc2JfdGxzX3JlYWQoU29ja2J1Zl9JT19EZXNjICpzYmlvZCwgdm9pZCAqYnVmLCBiZXJfbGVuX3QgbGVuKQoreworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBzYmlvZC0+c2Jpb2RfcHZ0OworICBsZGFwY29ubmluZm8gKmxpID0gY29ubi0+cHJvdG8uZ2VuZXJpYzsKKyAgYmVyX3NsZW5fdCByZXQ7CisgIENVUkxjb2RlIGVyciA9IENVUkxFX1JFQ1ZfRVJST1I7CisKKyAgcmV0ID0gbGktPnJlY3YoY29ubiwgRklSU1RTT0NLRVQsIGJ1ZiwgbGVuLCAmZXJyKTsKKyAgaWYocmV0IDwgMCAmJiBlcnIgPT0gQ1VSTEVfQUdBSU4pIHsKKyAgICBTRVRfU09DS0VSUk5PKEVXT1VMREJMT0NLKTsKKyAgfQorICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgYmVyX3NsZW5fdAorbGRhcHNiX3Rsc193cml0ZShTb2NrYnVmX0lPX0Rlc2MgKnNiaW9kLCB2b2lkICpidWYsIGJlcl9sZW5fdCBsZW4pCit7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IHNiaW9kLT5zYmlvZF9wdnQ7CisgIGxkYXBjb25uaW5mbyAqbGkgPSBjb25uLT5wcm90by5nZW5lcmljOworICBiZXJfc2xlbl90IHJldDsKKyAgQ1VSTGNvZGUgZXJyID0gQ1VSTEVfU0VORF9FUlJPUjsKKworICByZXQgPSBsaS0+c2VuZChjb25uLCBGSVJTVFNPQ0tFVCwgYnVmLCBsZW4sICZlcnIpOworICBpZihyZXQgPCAwICYmIGVyciA9PSBDVVJMRV9BR0FJTikgeworICAgIFNFVF9TT0NLRVJSTk8oRVdPVUxEQkxPQ0spOworICB9CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBTb2NrYnVmX0lPIGxkYXBzYl90bHMgPQoreworICBsZGFwc2JfdGxzX3NldHVwLAorICBsZGFwc2JfdGxzX3JlbW92ZSwKKyAgbGRhcHNiX3Rsc19jdHJsLAorICBsZGFwc2JfdGxzX3JlYWQsCisgIGxkYXBzYl90bHNfd3JpdGUsCisgIGxkYXBzYl90bHNfY2xvc2UKK307CisjZW5kaWYgLyogVVNFX1NTTCAqLworCisjZW5kaWYgLyogIUNVUkxfRElTQUJMRV9MREFQICYmIFVTRV9PUEVOTERBUCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3BhcnNlZGF0ZS5jIGIvY3VybC03LjI1LjAvbGliL3BhcnNlZGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MDc5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvcGFyc2VkYXRlLmMKQEAgLTAsMCArMSw1ODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAgQSBicmllZiBzdW1tYXJ5IG9mIHRoZSBkYXRlIHN0cmluZyBmb3JtYXRzIHRoaXMgcGFyc2VyIGdyb2tzOgorCisgIFJGQyAyNjE2IDMuMy4xCisKKyAgU3VuLCAwNiBOb3YgMTk5NCAwODo0OTozNyBHTVQgIDsgUkZDIDgyMiwgdXBkYXRlZCBieSBSRkMgMTEyMworICBTdW5kYXksIDA2LU5vdi05NCAwODo0OTozNyBHTVQgOyBSRkMgODUwLCBvYnNvbGV0ZWQgYnkgUkZDIDEwMzYKKyAgU3VuIE5vdiAgNiAwODo0OTozNyAxOTk0ICAgICAgIDsgQU5TSSBDJ3MgYXNjdGltZSgpIGZvcm1hdAorCisgIHdlIHN1cHBvcnQgZGF0ZXMgd2l0aG91dCB3ZWVrIGRheSBuYW1lOgorCisgIDA2IE5vdiAxOTk0IDA4OjQ5OjM3IEdNVAorICAwNi1Ob3YtOTQgMDg6NDk6MzcgR01UCisgIE5vdiAgNiAwODo0OTozNyAxOTk0CisKKyAgd2l0aG91dCB0aGUgdGltZSB6b25lOgorCisgIDA2IE5vdiAxOTk0IDA4OjQ5OjM3CisgIDA2LU5vdi05NCAwODo0OTozNworCisgIHdlaXJkIG9yZGVyOgorCisgIDE5OTQgTm92IDYgMDg6NDk6MzcgIChHTlUgZGF0ZSBmYWlscykKKyAgR01UIDA4OjQ5OjM3IDA2LU5vdi05NCBTdW5kYXkKKyAgOTQgNiBOb3YgMDg6NDk6MzcgICAgKEdOVSBkYXRlIGZhaWxzKQorCisgIHRpbWUgbGVmdCBvdXQ6CisKKyAgMTk5NCBOb3YgNgorICAwNi1Ob3YtOTQKKyAgU3VuIE5vdiA2IDk0CisKKyAgdW51c3VhbCBzZXBhcmF0b3JzOgorCisgIDE5OTQuTm92LjYKKyAgU3VuL05vdi82Lzk0L0dNVAorCisgIGNvbW1vbmx5IHVzZWQgdGltZSB6b25lIG5hbWVzOgorCisgIFN1biwgMDYgTm92IDE5OTQgMDg6NDk6MzcgQ0VUCisgIDA2IE5vdiAxOTk0IDA4OjQ5OjM3IEVTVAorCisgIHRpbWUgem9uZXMgc3BlY2lmaWVkIHVzaW5nIFJGQzgyMiBzdHlsZToKKworICBTdW4sIDEyIFNlcCAyMDA0IDE1OjA1OjU4IC0wNzAwCisgIFNhdCwgMTEgU2VwIDIwMDQgMjE6MzI6MTEgKzAyMDAKKworICBjb21wYWN0IG51bWVyaWNhbCBkYXRlIHN0cmluZ3M6CisKKyAgMjAwNDA5MTIgMTU6MDU6NTggLTA3MDAKKyAgMjAwNDA5MTEgKzAyMDAKKworKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX0xJTUlUU19ICisjaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAicGFyc2VkYXRlLmgiCisKK2NvbnN0IGNoYXIgKiBjb25zdCBDdXJsX3drZGF5W10gPQoreyJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4ifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgd2Vla2RheVtdID0KK3sgIk1vbmRheSIsICJUdWVzZGF5IiwgIldlZG5lc2RheSIsICJUaHVyc2RheSIsCisgICJGcmlkYXkiLCAiU2F0dXJkYXkiLCAiU3VuZGF5IiB9OworY29uc3QgY2hhciAqIGNvbnN0IEN1cmxfbW9udGhbXT0KK3sgIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwKKyAgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIiB9OworCitzdHJ1Y3QgdHppbmZvIHsKKyAgY2hhciBuYW1lWzVdOworICBpbnQgb2Zmc2V0OyAvKiArLy0gaW4gbWludXRlcyAqLworfTsKKworLyoKKyAqIHBhcnNlZGF0ZSgpCisgKgorICogUmV0dXJuczoKKyAqCisgKiBQQVJTRURBVEVfT0sgICAgIC0gYSBmaW5lIGNvbnZlcnNpb24KKyAqIFBBUlNFREFURV9GQUlMICAgLSBmYWlsZWQgdG8gY29udmVydAorICogUEFSU0VEQVRFX0xBVEVSICAtIHRpbWUgb3ZlcmZsb3cgYXQgdGhlIGZhciBlbmQgb2YgdGltZV90CisgKiBQQVJTRURBVEVfU09PTkVSIC0gdGltZSB1bmRlcmZsb3cgYXQgdGhlIGxvdyBlbmQgb2YgdGltZV90CisgKi8KKworc3RhdGljIGludCBwYXJzZWRhdGUoY29uc3QgY2hhciAqZGF0ZSwgdGltZV90ICpvdXRwdXQpOworCisjZGVmaW5lIFBBUlNFREFURV9PSyAgICAgMAorI2RlZmluZSBQQVJTRURBVEVfRkFJTCAgIC0xCisjZGVmaW5lIFBBUlNFREFURV9MQVRFUiAgMQorI2RlZmluZSBQQVJTRURBVEVfU09PTkVSIDIKKworLyogSGVyZSdzIGEgYnVuY2ggb2YgZnJlcXVlbnRseSB1c2VkIHRpbWUgem9uZSBuYW1lcy4gVGhlc2Ugd2VyZSBzdXBwb3J0ZWQKKyAgIGJ5IHRoZSBvbGQgZ2V0ZGF0ZSBwYXJzZXIuICovCisjZGVmaW5lIHREQVlaT05FIC02MCAgICAgICAvKiBvZmZzZXQgZm9yIGRheWxpZ2h0IHNhdmluZ3MgdGltZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0emluZm8gdHpbXT0geworICB7IkdNVCIsIDB9LCAgICAgICAgICAgICAgLyogR3JlZW53aWNoIE1lYW4gKi8KKyAgeyJVVEMiLCAwfSwgICAgICAgICAgICAgIC8qIFVuaXZlcnNhbCAoQ29vcmRpbmF0ZWQpICovCisgIHsiV0VUIiwgMH0sICAgICAgICAgICAgICAvKiBXZXN0ZXJuIEV1cm9wZWFuICovCisgIHsiQlNUIiwgMCB0REFZWk9ORX0sICAgICAvKiBCcml0aXNoIFN1bW1lciAqLworICB7IldBVCIsIDYwfSwgICAgICAgICAgICAgLyogV2VzdCBBZnJpY2EgKi8KKyAgeyJBU1QiLCAyNDB9LCAgICAgICAgICAgIC8qIEF0bGFudGljIFN0YW5kYXJkICovCisgIHsiQURUIiwgMjQwIHREQVlaT05FfSwgICAvKiBBdGxhbnRpYyBEYXlsaWdodCAqLworICB7IkVTVCIsIDMwMH0sICAgICAgICAgICAgLyogRWFzdGVybiBTdGFuZGFyZCAqLworICB7IkVEVCIsIDMwMCB0REFZWk9ORX0sICAgLyogRWFzdGVybiBEYXlsaWdodCAqLworICB7IkNTVCIsIDM2MH0sICAgICAgICAgICAgLyogQ2VudHJhbCBTdGFuZGFyZCAqLworICB7IkNEVCIsIDM2MCB0REFZWk9ORX0sICAgLyogQ2VudHJhbCBEYXlsaWdodCAqLworICB7Ik1TVCIsIDQyMH0sICAgICAgICAgICAgLyogTW91bnRhaW4gU3RhbmRhcmQgKi8KKyAgeyJNRFQiLCA0MjAgdERBWVpPTkV9LCAgIC8qIE1vdW50YWluIERheWxpZ2h0ICovCisgIHsiUFNUIiwgNDgwfSwgICAgICAgICAgICAvKiBQYWNpZmljIFN0YW5kYXJkICovCisgIHsiUERUIiwgNDgwIHREQVlaT05FfSwgICAvKiBQYWNpZmljIERheWxpZ2h0ICovCisgIHsiWVNUIiwgNTQwfSwgICAgICAgICAgICAvKiBZdWtvbiBTdGFuZGFyZCAqLworICB7IllEVCIsIDU0MCB0REFZWk9ORX0sICAgLyogWXVrb24gRGF5bGlnaHQgKi8KKyAgeyJIU1QiLCA2MDB9LCAgICAgICAgICAgIC8qIEhhd2FpaSBTdGFuZGFyZCAqLworICB7IkhEVCIsIDYwMCB0REFZWk9ORX0sICAgLyogSGF3YWlpIERheWxpZ2h0ICovCisgIHsiQ0FUIiwgNjAwfSwgICAgICAgICAgICAvKiBDZW50cmFsIEFsYXNrYSAqLworICB7IkFIU1QiLCA2MDB9LCAgICAgICAgICAgLyogQWxhc2thLUhhd2FpaSBTdGFuZGFyZCAqLworICB7Ik5UIiwgIDY2MH0sICAgICAgICAgICAgLyogTm9tZSAqLworICB7IklETFciLCA3MjB9LCAgICAgICAgICAgLyogSW50ZXJuYXRpb25hbCBEYXRlIExpbmUgV2VzdCAqLworICB7IkNFVCIsIC02MH0sICAgICAgICAgICAgLyogQ2VudHJhbCBFdXJvcGVhbiAqLworICB7Ik1FVCIsIC02MH0sICAgICAgICAgICAgLyogTWlkZGxlIEV1cm9wZWFuICovCisgIHsiTUVXVCIsIC02MH0sICAgICAgICAgICAvKiBNaWRkbGUgRXVyb3BlYW4gV2ludGVyICovCisgIHsiTUVTVCIsIC02MCB0REFZWk9ORX0sICAvKiBNaWRkbGUgRXVyb3BlYW4gU3VtbWVyICovCisgIHsiQ0VTVCIsIC02MCB0REFZWk9ORX0sICAvKiBDZW50cmFsIEV1cm9wZWFuIFN1bW1lciAqLworICB7Ik1FU1oiLCAtNjAgdERBWVpPTkV9LCAgLyogTWlkZGxlIEV1cm9wZWFuIFN1bW1lciAqLworICB7IkZXVCIsIC02MH0sICAgICAgICAgICAgLyogRnJlbmNoIFdpbnRlciAqLworICB7IkZTVCIsIC02MCB0REFZWk9ORX0sICAgLyogRnJlbmNoIFN1bW1lciAqLworICB7IkVFVCIsIC0xMjB9LCAgICAgICAgICAgLyogRWFzdGVybiBFdXJvcGUsIFVTU1IgWm9uZSAxICovCisgIHsiV0FTVCIsIC00MjB9LCAgICAgICAgICAvKiBXZXN0IEF1c3RyYWxpYW4gU3RhbmRhcmQgKi8KKyAgeyJXQURUIiwgLTQyMCB0REFZWk9ORX0sIC8qIFdlc3QgQXVzdHJhbGlhbiBEYXlsaWdodCAqLworICB7IkNDVCIsIC00ODB9LCAgICAgICAgICAgLyogQ2hpbmEgQ29hc3QsIFVTU1IgWm9uZSA3ICovCisgIHsiSlNUIiwgLTU0MH0sICAgICAgICAgICAvKiBKYXBhbiBTdGFuZGFyZCwgVVNTUiBab25lIDggKi8KKyAgeyJFQVNUIiwgLTYwMH0sICAgICAgICAgIC8qIEVhc3Rlcm4gQXVzdHJhbGlhbiBTdGFuZGFyZCAqLworICB7IkVBRFQiLCAtNjAwIHREQVlaT05FfSwgLyogRWFzdGVybiBBdXN0cmFsaWFuIERheWxpZ2h0ICovCisgIHsiR1NUIiwgLTYwMH0sICAgICAgICAgICAvKiBHdWFtIFN0YW5kYXJkLCBVU1NSIFpvbmUgOSAqLworICB7Ik5aVCIsIC03MjB9LCAgICAgICAgICAgLyogTmV3IFplYWxhbmQgKi8KKyAgeyJOWlNUIiwgLTcyMH0sICAgICAgICAgIC8qIE5ldyBaZWFsYW5kIFN0YW5kYXJkICovCisgIHsiTlpEVCIsIC03MjAgdERBWVpPTkV9LCAvKiBOZXcgWmVhbGFuZCBEYXlsaWdodCAqLworICB7IklETEUiLCAtNzIwfSwgICAgICAgICAgLyogSW50ZXJuYXRpb25hbCBEYXRlIExpbmUgRWFzdCAqLworICAvKiBOZXh0IHVwOiBNaWxpdGFyeSB0aW1lem9uZSBuYW1lcy4gUkZDODIyIGFsbG93ZWQgdGhlc2UsIGJ1dCAoYXMgbm90ZWQgaW4KKyAgICAgUkZDIDExMjMpIGhhZCB0aGVpciBzaWducyB3cm9uZy4gSGVyZSB3ZSB1c2UgdGhlIGNvcnJlY3Qgc2lnbnMgdG8gbWF0Y2gKKyAgICAgYWN0dWFsIG1pbGl0YXJ5IHVzYWdlLgorICAgKi8KKyAgeyJBIiwgICsxICogNjB9LCAgICAgICAgIC8qIEFscGhhICovCisgIHsiQiIsICArMiAqIDYwfSwgICAgICAgICAvKiBCcmF2byAqLworICB7IkMiLCAgKzMgKiA2MH0sICAgICAgICAgLyogQ2hhcmxpZSAqLworICB7IkQiLCAgKzQgKiA2MH0sICAgICAgICAgLyogRGVsdGEgKi8KKyAgeyJFIiwgICs1ICogNjB9LCAgICAgICAgIC8qIEVjaG8gKi8KKyAgeyJGIiwgICs2ICogNjB9LCAgICAgICAgIC8qIEZveHRyb3QgKi8KKyAgeyJHIiwgICs3ICogNjB9LCAgICAgICAgIC8qIEdvbGYgKi8KKyAgeyJIIiwgICs4ICogNjB9LCAgICAgICAgIC8qIEhvdGVsICovCisgIHsiSSIsICArOSAqIDYwfSwgICAgICAgICAvKiBJbmRpYSAqLworICAvKiAiSiIsIEp1bGlldCBpcyBub3QgdXNlZCBhcyBhIHRpbWV6b25lLCB0byBpbmRpY2F0ZSB0aGUgb2JzZXJ2ZXIncyBsb2NhbAorICAgICB0aW1lICovCisgIHsiSyIsICsxMCAqIDYwfSwgICAgICAgICAvKiBLaWxvICovCisgIHsiTCIsICsxMSAqIDYwfSwgICAgICAgICAvKiBMaW1hICovCisgIHsiTSIsICsxMiAqIDYwfSwgICAgICAgICAvKiBNaWtlICovCisgIHsiTiIsICAtMSAqIDYwfSwgICAgICAgICAvKiBOb3ZlbWJlciAqLworICB7Ik8iLCAgLTIgKiA2MH0sICAgICAgICAgLyogT3NjYXIgKi8KKyAgeyJQIiwgIC0zICogNjB9LCAgICAgICAgIC8qIFBhcGEgKi8KKyAgeyJRIiwgIC00ICogNjB9LCAgICAgICAgIC8qIFF1ZWJlYyAqLworICB7IlIiLCAgLTUgKiA2MH0sICAgICAgICAgLyogUm9tZW8gKi8KKyAgeyJTIiwgIC02ICogNjB9LCAgICAgICAgIC8qIFNpZXJyYSAqLworICB7IlQiLCAgLTcgKiA2MH0sICAgICAgICAgLyogVGFuZ28gKi8KKyAgeyJVIiwgIC04ICogNjB9LCAgICAgICAgIC8qIFVuaWZvcm0gKi8KKyAgeyJWIiwgIC05ICogNjB9LCAgICAgICAgIC8qIFZpY3RvciAqLworICB7IlciLCAtMTAgKiA2MH0sICAgICAgICAgLyogV2hpc2tleSAqLworICB7IlgiLCAtMTEgKiA2MH0sICAgICAgICAgLyogWC1yYXkgKi8KKyAgeyJZIiwgLTEyICogNjB9LCAgICAgICAgIC8qIFlhbmtlZSAqLworICB7IloiLCAwfSwgICAgICAgICAgICAgICAgLyogWnVsdSwgemVybyBtZXJpZGlhbiwgYS5rLmEuIFVUQyAqLworfTsKKworLyogcmV0dXJuczoKKyAgIC0xIG5vIGRheQorICAgMCBtb25kYXkgLSA2IHN1bmRheQorKi8KKworc3RhdGljIGludCBjaGVja2RheShjb25zdCBjaGFyICpjaGVjaywgc2l6ZV90IGxlbikKK3sKKyAgaW50IGk7CisgIGNvbnN0IGNoYXIgKiBjb25zdCAqd2hhdDsKKyAgYm9vbCBmb3VuZD0gRkFMU0U7CisgIGlmKGxlbiA+IDMpCisgICAgd2hhdCA9ICZ3ZWVrZGF5WzBdOworICBlbHNlCisgICAgd2hhdCA9ICZDdXJsX3drZGF5WzBdOworICBmb3IoaT0wOyBpPDc7IGkrKykgeworICAgIGlmKEN1cmxfcmF3X2VxdWFsKGNoZWNrLCB3aGF0WzBdKSkgeworICAgICAgZm91bmQ9VFJVRTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICB3aGF0Kys7CisgIH0KKyAgcmV0dXJuIGZvdW5kP2k6LTE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2ttb250aChjb25zdCBjaGFyICpjaGVjaykKK3sKKyAgaW50IGk7CisgIGNvbnN0IGNoYXIgKiBjb25zdCAqd2hhdDsKKyAgYm9vbCBmb3VuZD0gRkFMU0U7CisKKyAgd2hhdCA9ICZDdXJsX21vbnRoWzBdOworICBmb3IoaT0wOyBpPDEyOyBpKyspIHsKKyAgICBpZihDdXJsX3Jhd19lcXVhbChjaGVjaywgd2hhdFswXSkpIHsKKyAgICAgIGZvdW5kPVRSVUU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgd2hhdCsrOworICB9CisgIHJldHVybiBmb3VuZD9pOi0xOyAvKiByZXR1cm4gdGhlIG9mZnNldCBvciAtMSwgbm8gcmVhbCBvZmZzZXQgaXMgLTEgKi8KK30KKworLyogcmV0dXJuIHRoZSB0aW1lIHpvbmUgb2Zmc2V0IGJldHdlZW4gR01UIGFuZCB0aGUgaW5wdXQgb25lLCBpbiBudW1iZXIKKyAgIG9mIHNlY29uZHMgb3IgLTEgaWYgdGhlIHRpbWV6b25lIHdhc24ndCBmb3VuZC9sZWdhbCAqLworCitzdGF0aWMgaW50IGNoZWNrdHooY29uc3QgY2hhciAqY2hlY2spCit7CisgIHVuc2lnbmVkIGludCBpOworICBjb25zdCBzdHJ1Y3QgdHppbmZvICp3aGF0OworICBib29sIGZvdW5kPSBGQUxTRTsKKworICB3aGF0ID0gdHo7CisgIGZvcihpPTA7IGk8IHNpemVvZih0eikvc2l6ZW9mKHR6WzBdKTsgaSsrKSB7CisgICAgaWYoQ3VybF9yYXdfZXF1YWwoY2hlY2ssIHdoYXQtPm5hbWUpKSB7CisgICAgICBmb3VuZD1UUlVFOworICAgICAgYnJlYWs7CisgICAgfQorICAgIHdoYXQrKzsKKyAgfQorICByZXR1cm4gZm91bmQ/d2hhdC0+b2Zmc2V0KjYwOi0xOworfQorCitzdGF0aWMgdm9pZCBza2lwKGNvbnN0IGNoYXIgKipkYXRlKQoreworICAvKiBza2lwIGV2ZXJ5dGhpbmcgdGhhdCBhcmVuJ3QgbGV0dGVycyBvciBkaWdpdHMgKi8KKyAgd2hpbGUoKipkYXRlICYmICFJU0FMTlVNKCoqZGF0ZSkpCisgICAgKCpkYXRlKSsrOworfQorCitlbnVtIGFzc3VtZSB7CisgIERBVEVfTURBWSwKKyAgREFURV9ZRUFSLAorICBEQVRFX1RJTUUKK307CisKKy8qIHRoaXMgaXMgYSBjbG9uZSBvZiAnc3RydWN0IHRtJyBidXQgd2l0aCBhbGwgZmllbGRzIHdlIGRvbid0IG5lZWQgb3IgdXNlCisgICBjdXQgb3V0ICovCitzdHJ1Y3QgbXlfdG0geworICBpbnQgdG1fc2VjOworICBpbnQgdG1fbWluOworICBpbnQgdG1faG91cjsKKyAgaW50IHRtX21kYXk7CisgIGludCB0bV9tb247CisgIGludCB0bV95ZWFyOworfTsKKworLyogc3RydWN0IHRtIHRvIHRpbWUgc2luY2UgZXBvY2ggaW4gR01UIHRpbWUgem9uZS4KKyAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgc3RhbmRhcmQgbWt0aW1lIGZ1bmN0aW9uIGJ1dCBmb3IgR01UIG9ubHksIGFuZAorICogZG9lc24ndCBzdWZmZXIgZnJvbSB0aGUgdmFyaW91cyBidWdzIGFuZCBwb3J0YWJpbGl0eSBwcm9ibGVtcyB0aGF0CisgKiBzb21lIHN5c3RlbXMnIGltcGxlbWVudGF0aW9ucyBoYXZlLgorICovCitzdGF0aWMgdGltZV90IG15X3RpbWVnbShzdHJ1Y3QgbXlfdG0gKnRtKQoreworICBzdGF0aWMgY29uc3QgaW50IG1vbnRoX2RheXNfY3VtdWxhdGl2ZSBbMTJdID0KKyAgICB7IDAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0IH07CisgIGludCBtb250aCwgeWVhciwgbGVhcF9kYXlzOworCisgIGlmKHRtLT50bV95ZWFyIDwgNzApCisgICAgLyogd2UgZG9uJ3Qgc3VwcG9ydCB5ZWFycyBiZWZvcmUgMTk3MCBhcyB0aGV5IHdpbGwgY2F1c2UgdGhpcyBmdW5jdGlvbgorICAgICAgIHRvIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlICovCisgICAgcmV0dXJuIC0xOworCisgIHllYXIgPSB0bS0+dG1feWVhciArIDE5MDA7CisgIG1vbnRoID0gdG0tPnRtX21vbjsKKyAgaWYobW9udGggPCAwKSB7CisgICAgeWVhciArPSAoMTEgLSBtb250aCkgLyAxMjsKKyAgICBtb250aCA9IDExIC0gKDExIC0gbW9udGgpICUgMTI7CisgIH0KKyAgZWxzZSBpZihtb250aCA+PSAxMikgeworICAgIHllYXIgLT0gbW9udGggLyAxMjsKKyAgICBtb250aCA9IG1vbnRoICUgMTI7CisgIH0KKworICBsZWFwX2RheXMgPSB5ZWFyIC0gKHRtLT50bV9tb24gPD0gMSk7CisgIGxlYXBfZGF5cyA9ICgobGVhcF9kYXlzIC8gNCkgLSAobGVhcF9kYXlzIC8gMTAwKSArIChsZWFwX2RheXMgLyA0MDApCisgICAgICAgICAgICAgICAtICgxOTY5IC8gNCkgKyAoMTk2OSAvIDEwMCkgLSAoMTk2OSAvIDQwMCkpOworCisgIHJldHVybiAoKCgodGltZV90KSAoeWVhciAtIDE5NzApICogMzY1CisgICAgICAgICAgICArIGxlYXBfZGF5cyArIG1vbnRoX2RheXNfY3VtdWxhdGl2ZSBbbW9udGhdICsgdG0tPnRtX21kYXkgLSAxKSAqIDI0CisgICAgICAgICAgICsgdG0tPnRtX2hvdXIpICogNjAgKyB0bS0+dG1fbWluKSAqIDYwICsgdG0tPnRtX3NlYzsKK30KKworLyoKKyAqIHBhcnNlZGF0ZSgpCisgKgorICogUmV0dXJuczoKKyAqCisgKiBQQVJTRURBVEVfT0sgICAgIC0gYSBmaW5lIGNvbnZlcnNpb24KKyAqIFBBUlNFREFURV9GQUlMICAgLSBmYWlsZWQgdG8gY29udmVydAorICogUEFSU0VEQVRFX0xBVEVSICAtIHRpbWUgb3ZlcmZsb3cgYXQgdGhlIGZhciBlbmQgb2YgdGltZV90CisgKiBQQVJTRURBVEVfU09PTkVSIC0gdGltZSB1bmRlcmZsb3cgYXQgdGhlIGxvdyBlbmQgb2YgdGltZV90CisgKi8KKworc3RhdGljIGludCBwYXJzZWRhdGUoY29uc3QgY2hhciAqZGF0ZSwgdGltZV90ICpvdXRwdXQpCit7CisgIHRpbWVfdCB0ID0gMDsKKyAgaW50IHdkYXludW09LTE7ICAvKiBkYXkgb2YgdGhlIHdlZWsgbnVtYmVyLCAwLTYgKG1vbi1zdW4pICovCisgIGludCBtb25udW09LTE7ICAgLyogbW9udGggb2YgdGhlIHllYXIgbnVtYmVyLCAwLTExICovCisgIGludCBtZGF5bnVtPS0xOyAvKiBkYXkgb2YgbW9udGgsIDEgLSAzMSAqLworICBpbnQgaG91cm51bT0tMTsKKyAgaW50IG1pbm51bT0tMTsKKyAgaW50IHNlY251bT0tMTsKKyAgaW50IHllYXJudW09LTE7CisgIGludCB0em9mZj0tMTsKKyAgc3RydWN0IG15X3RtIHRtOworICBlbnVtIGFzc3VtZSBkaWduZXh0ID0gREFURV9NREFZOworICBjb25zdCBjaGFyICppbmRhdGUgPSBkYXRlOyAvKiBzYXZlIHRoZSBvcmlnaW5hbCBwb2ludGVyICovCisgIGludCBwYXJ0ID0gMDsgLyogbWF4IDYgcGFydHMgKi8KKworICB3aGlsZSgqZGF0ZSAmJiAocGFydCA8IDYpKSB7CisgICAgYm9vbCBmb3VuZD1GQUxTRTsKKworICAgIHNraXAoJmRhdGUpOworCisgICAgaWYoSVNBTFBIQSgqZGF0ZSkpIHsKKyAgICAgIC8qIGEgbmFtZSBjb21pbmcgdXAgKi8KKyAgICAgIGNoYXIgYnVmWzMyXT0iIjsKKyAgICAgIHNpemVfdCBsZW47CisgICAgICBzc2NhbmYoZGF0ZSwgIiUzMVtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XSIsCisgICAgICAgICAgICAgYnVmKTsKKyAgICAgIGxlbiA9IHN0cmxlbihidWYpOworCisgICAgICBpZih3ZGF5bnVtID09IC0xKSB7CisgICAgICAgIHdkYXludW0gPSBjaGVja2RheShidWYsIGxlbik7CisgICAgICAgIGlmKHdkYXludW0gIT0gLTEpCisgICAgICAgICAgZm91bmQgPSBUUlVFOworICAgICAgfQorICAgICAgaWYoIWZvdW5kICYmIChtb25udW0gPT0gLTEpKSB7CisgICAgICAgIG1vbm51bSA9IGNoZWNrbW9udGgoYnVmKTsKKyAgICAgICAgaWYobW9ubnVtICE9IC0xKQorICAgICAgICAgIGZvdW5kID0gVFJVRTsKKyAgICAgIH0KKworICAgICAgaWYoIWZvdW5kICYmICh0em9mZiA9PSAtMSkpIHsKKyAgICAgICAgLyogdGhpcyBqdXN0IG11c3QgYmUgYSB0aW1lIHpvbmUgc3RyaW5nICovCisgICAgICAgIHR6b2ZmID0gY2hlY2t0eihidWYpOworICAgICAgICBpZih0em9mZiAhPSAtMSkKKyAgICAgICAgICBmb3VuZCA9IFRSVUU7CisgICAgICB9CisKKyAgICAgIGlmKCFmb3VuZCkKKyAgICAgICAgcmV0dXJuIFBBUlNFREFURV9GQUlMOyAvKiBiYWQgc3RyaW5nICovCisKKyAgICAgIGRhdGUgKz0gbGVuOworICAgIH0KKyAgICBlbHNlIGlmKElTRElHSVQoKmRhdGUpKSB7CisgICAgICAvKiBhIGRpZ2l0ICovCisgICAgICBpbnQgdmFsOworICAgICAgY2hhciAqZW5kOworICAgICAgaWYoKHNlY251bSA9PSAtMSkgJiYKKyAgICAgICAgICgzID09IHNzY2FuZihkYXRlLCAiJTAyZDolMDJkOiUwMmQiLCAmaG91cm51bSwgJm1pbm51bSwgJnNlY251bSkpKSB7CisgICAgICAgIC8qIHRpbWUgc3RhbXAhICovCisgICAgICAgIGRhdGUgKz0gODsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoKHNlY251bSA9PSAtMSkgJiYKKyAgICAgICAgICAgICAgKDIgPT0gc3NjYW5mKGRhdGUsICIlMDJkOiUwMmQiLCAmaG91cm51bSwgJm1pbm51bSkpKSB7CisgICAgICAgIC8qIHRpbWUgc3RhbXAgd2l0aG91dCBzZWNvbmRzICovCisgICAgICAgIGRhdGUgKz0gNTsKKyAgICAgICAgc2VjbnVtID0gMDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBsb25nIGx2YWw7CisgICAgICAgIGludCBlcnJvcjsKKyAgICAgICAgaW50IG9sZF9lcnJubzsKKworICAgICAgICBvbGRfZXJybm8gPSBFUlJOTzsKKyAgICAgICAgU0VUX0VSUk5PKDApOworICAgICAgICBsdmFsID0gc3RydG9sKGRhdGUsICZlbmQsIDEwKTsKKyAgICAgICAgZXJyb3IgPSBFUlJOTzsKKyAgICAgICAgaWYoZXJyb3IgIT0gb2xkX2Vycm5vKQorICAgICAgICAgIFNFVF9FUlJOTyhvbGRfZXJybm8pOworCisgICAgICAgIGlmKGVycm9yKQorICAgICAgICAgIHJldHVybiBQQVJTRURBVEVfRkFJTDsKKworICAgICAgICBpZigobHZhbCA+IChsb25nKUlOVF9NQVgpIHx8IChsdmFsIDwgKGxvbmcpSU5UX01JTikpCisgICAgICAgICAgcmV0dXJuIFBBUlNFREFURV9GQUlMOworCisgICAgICAgIHZhbCA9IGN1cmx4X3NsdG9zaShsdmFsKTsKKworICAgICAgICBpZigodHpvZmYgPT0gLTEpICYmCisgICAgICAgICAgICgoZW5kIC0gZGF0ZSkgPT0gNCkgJiYKKyAgICAgICAgICAgKHZhbCA8PSAxNDAwKSAmJgorICAgICAgICAgICAoaW5kYXRlPCBkYXRlKSAmJgorICAgICAgICAgICAoKGRhdGVbLTFdID09ICcrJyB8fCBkYXRlWy0xXSA9PSAnLScpKSkgeworICAgICAgICAgIC8qIGZvdXIgZGlnaXRzIGFuZCBhIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxNDAwICh0byB0YWtlIGludG8KKyAgICAgICAgICAgICBhY2NvdW50IGFsbCBzb3J0cyBvZiBmdW5ueSB0aW1lIHpvbmUgZGlmZnMpIGFuZCBpdCBpcyBwcmVjZWRlZAorICAgICAgICAgICAgIHdpdGggYSBwbHVzIG9yIG1pbnVzLiBUaGlzIGlzIGEgdGltZSB6b25lIGluZGljYXRpb24uICAxNDAwIGlzCisgICAgICAgICAgICAgcGlja2VkIHNpbmNlICsxMzAwIGlzIGZyZXF1ZW50bHkgdXNlZCBhbmQgKzE0MDAgaXMgbWVudGlvbmVkIGFzCisgICAgICAgICAgICAgYW4gZWRnZSBudW1iZXIgaW4gdGhlIGRvY3VtZW50ICJJU08gQyAyMDBYIFByb3Bvc2FsOiBUaW1lem9uZQorICAgICAgICAgICAgIEZ1bmN0aW9ucyIgYXQgaHR0cDovL2RhdmlkLnRyaWJibGUuY29tL3RleHQvYzB4dGltZXpvbmUuaHRtbCBJZgorICAgICAgICAgICAgIGFueW9uZSBoYXMgYSBtb3JlIGF1dGhvcml0YXRpdmUgc291cmNlIGZvciB0aGUgZXhhY3QgbWF4aW11bSB0aW1lCisgICAgICAgICAgICAgem9uZSBvZmZzZXRzLCBwbGVhc2Ugc3BlYWsgdXAhICovCisgICAgICAgICAgZm91bmQgPSBUUlVFOworICAgICAgICAgIHR6b2ZmID0gKHZhbC8xMDAgKiA2MCArIHZhbCUxMDApKjYwOworCisgICAgICAgICAgLyogdGhlICsgYW5kIC0gcHJlZml4IGluZGljYXRlcyB0aGUgbG9jYWwgdGltZSBjb21wYXJlZCB0byBHTVQsCisgICAgICAgICAgICAgdGhpcyB3ZSBuZWVkIHRoZXIgcmV2ZXJzZWQgbWF0aCB0byBnZXQgd2hhdCB3ZSB3YW50ICovCisgICAgICAgICAgdHpvZmYgPSBkYXRlWy0xXT09JysnPy10em9mZjp0em9mZjsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCgoZW5kIC0gZGF0ZSkgPT0gOCkgJiYKKyAgICAgICAgICAgKHllYXJudW0gPT0gLTEpICYmCisgICAgICAgICAgIChtb25udW0gPT0gLTEpICYmCisgICAgICAgICAgIChtZGF5bnVtID09IC0xKSkgeworICAgICAgICAgIC8qIDggZGlnaXRzLCBubyB5ZWFyLCBtb250aCBvciBkYXkgeWV0LiBUaGlzIGlzIFlZWVlNTUREICovCisgICAgICAgICAgZm91bmQgPSBUUlVFOworICAgICAgICAgIHllYXJudW0gPSB2YWwvMTAwMDA7CisgICAgICAgICAgbW9ubnVtID0gKHZhbCUxMDAwMCkvMTAwLTE7IC8qIG1vbnRoIGlzIDAgLSAxMSAqLworICAgICAgICAgIG1kYXludW0gPSB2YWwlMTAwOworICAgICAgICB9CisKKyAgICAgICAgaWYoIWZvdW5kICYmIChkaWduZXh0ID09IERBVEVfTURBWSkgJiYgKG1kYXludW0gPT0gLTEpKSB7CisgICAgICAgICAgaWYoKHZhbCA+IDApICYmICh2YWw8MzIpKSB7CisgICAgICAgICAgICBtZGF5bnVtID0gdmFsOworICAgICAgICAgICAgZm91bmQgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgICBkaWduZXh0ID0gREFURV9ZRUFSOworICAgICAgICB9CisKKyAgICAgICAgaWYoIWZvdW5kICYmIChkaWduZXh0ID09IERBVEVfWUVBUikgJiYgKHllYXJudW0gPT0gLTEpKSB7CisgICAgICAgICAgeWVhcm51bSA9IHZhbDsKKyAgICAgICAgICBmb3VuZCA9IFRSVUU7CisgICAgICAgICAgaWYoeWVhcm51bSA8IDE5MDApIHsKKyAgICAgICAgICAgIGlmKHllYXJudW0gPiA3MCkKKyAgICAgICAgICAgICAgeWVhcm51bSArPSAxOTAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB5ZWFybnVtICs9IDIwMDA7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKG1kYXludW0gPT0gLTEpCisgICAgICAgICAgICBkaWduZXh0ID0gREFURV9NREFZOworICAgICAgICB9CisKKyAgICAgICAgaWYoIWZvdW5kKQorICAgICAgICAgIHJldHVybiBQQVJTRURBVEVfRkFJTDsKKworICAgICAgICBkYXRlID0gZW5kOworICAgICAgfQorICAgIH0KKworICAgIHBhcnQrKzsKKyAgfQorCisgIGlmKC0xID09IHNlY251bSkKKyAgICBzZWNudW0gPSBtaW5udW0gPSBob3VybnVtID0gMDsgLyogbm8gdGltZSwgbWFrZSBpdCB6ZXJvICovCisKKyAgaWYoKC0xID09IG1kYXludW0pIHx8CisgICAgICgtMSA9PSBtb25udW0pIHx8CisgICAgICgtMSA9PSB5ZWFybnVtKSkKKyAgICAvKiBsYWNrcyB2aXRhbCBpbmZvLCBmYWlsICovCisgICAgcmV0dXJuIFBBUlNFREFURV9GQUlMOworCisjaWYgU0laRU9GX1RJTUVfVCA8IDUKKyAgLyogMzIgYml0IHRpbWVfdCBjYW4gb25seSBob2xkIGRhdGVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgMjAzOCAqLworICBpZih5ZWFybnVtID4gMjAzNykgeworICAgICpvdXRwdXQgPSAweDdmZmZmZmZmOworICAgIHJldHVybiBQQVJTRURBVEVfTEFURVI7CisgIH0KKyNlbmRpZgorCisgIGlmKHllYXJudW0gPCAxOTcwKSB7CisgICAgKm91dHB1dCA9IDA7CisgICAgcmV0dXJuIFBBUlNFREFURV9TT09ORVI7CisgIH0KKworICBpZigobWRheW51bSA+IDMxKSB8fCAobW9ubnVtID4gMTEpIHx8CisgICAgIChob3VybnVtID4gMjMpIHx8IChtaW5udW0gPiA1OSkgfHwgKHNlY251bSA+IDYwKSkKKyAgICByZXR1cm4gUEFSU0VEQVRFX0ZBSUw7IC8qIGNsZWFybHkgYW4gaWxsZWdhbCBkYXRlICovCisKKyAgdG0udG1fc2VjID0gc2VjbnVtOworICB0bS50bV9taW4gPSBtaW5udW07CisgIHRtLnRtX2hvdXIgPSBob3VybnVtOworICB0bS50bV9tZGF5ID0gbWRheW51bTsKKyAgdG0udG1fbW9uID0gbW9ubnVtOworICB0bS50bV95ZWFyID0geWVhcm51bSAtIDE5MDA7CisKKyAgLyogbXlfdGltZWdtKCkgcmV0dXJucyBhIHRpbWVfdC4gdGltZV90IGlzIG9mdGVuIDMyIGJpdHMsIGV2ZW4gb24gbWFueQorICAgICBhcmNoaXRlY3R1cmVzIHRoYXQgZmVhdHVyZSA2NCBiaXQgJ2xvbmcnLgorCisgICAgIFNvbWUgc3lzdGVtcyBoYXZlIDY0IGJpdCB0aW1lX3QgYW5kIGRlYWwgd2l0aCB5ZWFycyBiZXlvbmQgMjAzOC4gSG93ZXZlciwKKyAgICAgZXZlbiBvbiBzb21lIG9mIHRoZSBzeXN0ZW1zIHdpdGggNjQgYml0IHRpbWVfdCBta3RpbWUoKSByZXR1cm5zIC0xIGZvcgorICAgICBkYXRlcyBiZXlvbmQgMDM6MTQ6MDcgVVRDLCBKYW51YXJ5IDE5LCAyMDM4LiAoU3VjaCBhcyBBSVggNTEwMC0wNikKKyAgKi8KKyAgdCA9IG15X3RpbWVnbSgmdG0pOworCisgIC8qIHRpbWUgem9uZSBhZGp1c3QgKGNhc3QgdCB0byBpbnQgdG8gY29tcGFyZSB0byBuZWdhdGl2ZSBvbmUpICovCisgIGlmKC0xICE9IChpbnQpdCkgeworCisgICAgLyogQWRkIHRoZSB0aW1lIHpvbmUgZGlmZiBiZXR3ZWVuIGxvY2FsIHRpbWUgem9uZSBhbmQgR01ULiAqLworICAgIGxvbmcgZGVsdGEgPSAobG9uZykodHpvZmYhPS0xP3R6b2ZmOjApOworCisgICAgaWYoKGRlbHRhPjApICYmICh0ICsgZGVsdGEgPCB0KSkKKyAgICAgIHJldHVybiAtMTsgLyogdGltZV90IG92ZXJmbG93ICovCisKKyAgICB0ICs9IGRlbHRhOworICB9CisKKyAgKm91dHB1dCA9IHQ7CisKKyAgcmV0dXJuIFBBUlNFREFURV9PSzsKK30KKwordGltZV90IGN1cmxfZ2V0ZGF0ZShjb25zdCBjaGFyICpwLCBjb25zdCB0aW1lX3QgKm5vdykKK3sKKyAgdGltZV90IHBhcnNlZDsKKyAgaW50IHJjID0gcGFyc2VkYXRlKHAsICZwYXJzZWQpOworICAodm9pZClub3c7IC8qIGxlZ2FjeSBhcmd1bWVudCBmcm9tIHRoZSBwYXN0IHRoYXQgd2UgaWdub3JlICovCisKKyAgc3dpdGNoKHJjKSB7CisgIGNhc2UgUEFSU0VEQVRFX09LOgorICBjYXNlIFBBUlNFREFURV9MQVRFUjoKKyAgY2FzZSBQQVJTRURBVEVfU09PTkVSOgorICAgIHJldHVybiBwYXJzZWQ7CisgIH0KKyAgLyogZXZlcnl0aGluZyBlbHNlIGlzIGZhaWwgKi8KKyAgcmV0dXJuIC0xOworfQorCisvKgorICogQ3VybF9nbXRpbWUoKSBpcyBhIGdtdGltZSgpIHJlcGxhY2VtZW50IGZvciBwb3J0YWJpbGl0eS4gRG8gbm90IHVzZSB0aGUKKyAqIGdtdGltZV9yKCkgb3IgZ210aW1lKCkgZnVuY3Rpb25zIGFueXdoZXJlIGVsc2UgYnV0IGhlcmUuCisgKgorICogVG8gbWFrZSBzdXJlIG5vIHN1Y2ggZnVuY3Rpb24gY2FsbHMgc2xpcCBpbiwgd2UgZGVmaW5lIHRoZW0gdG8gY2F1c2UgYnVpbGQKKyAqIGVycm9ycywgd2hpY2ggaXMgd2h5IHdlIHVzZSB0aGUgbmFtZSB3aXRoaW4gcGFyZW50aGVzZXMgaW4gdGhpcyBmdW5jdGlvbi4KKyAqCisgKi8KKworQ1VSTGNvZGUgQ3VybF9nbXRpbWUodGltZV90IGludGltZSwgc3RydWN0IHRtICpzdG9yZSkKK3sKKyAgY29uc3Qgc3RydWN0IHRtICp0bTsKKyNpZmRlZiBIQVZFX0dNVElNRV9SCisgIC8qIHRocmVhZC1zYWZlIHZlcnNpb24gKi8KKyAgdG0gPSAoc3RydWN0IHRtICopZ210aW1lX3IoJmludGltZSwgc3RvcmUpOworI2Vsc2UKKyAgdG0gPSBnbXRpbWUoJmludGltZSk7CisgIGlmKHRtKQorICAgICpzdG9yZSA9ICp0bTsgLyogY29weSB0aGUgcG9pbnRlZCBzdHJ1Y3QgdG8gdGhlIGxvY2FsIGNvcHkgKi8KKyNlbmRpZgorCisgIGlmKCF0bSkKKyAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvcGFyc2VkYXRlLmggYi9jdXJsLTcuMjUuMC9saWIvcGFyc2VkYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVkMjUzNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9wYXJzZWRhdGUuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9fQ1VSTF9QQVJTRURBVEVfSAorI2RlZmluZSBfX0NVUkxfUEFSU0VEQVRFX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IEN1cmxfd2tkYXlbN107CitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IEN1cmxfbW9udGhbMTJdOworCitDVVJMY29kZSBDdXJsX2dtdGltZSh0aW1lX3QgaW50aW1lLCBzdHJ1Y3QgdG0gKnN0b3JlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvcGluZ3BvbmcuYyBiL2N1cmwtNy4yNS4wL2xpYi9waW5ncG9uZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMDg5NDYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvcGluZ3BvbmcuYwpAQCAtMCwwICsxLDUzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqICAgJ3Bpbmdwb25nJyBpcyBmb3IgZ2VuZXJpYyBiYWNrLWFuZC1mb3J0aCBzdXBwb3J0IGZ1bmN0aW9ucyB1c2VkIGJ5IEZUUCwKKyAqICAgSU1BUCwgUE9QMywgU01UUCBhbmQgd2hhdGV2ZXIgbW9yZSB0aGF0IGxpa2VzIHRoZW0uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInNwZWVkY2hlY2suaCIKKyNpbmNsdWRlICJwaW5ncG9uZy5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJub24tYXNjaWkuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjaWZkZWYgVVNFX1BJTkdQT05HCisKKy8qIFJldHVybnMgdGltZW91dCBpbiBtcy4gMCBvciBuZWdhdGl2ZSBudW1iZXIgbWVhbnMgdGhlIHRpbWVvdXQgaGFzIGFscmVhZHkKKyAgIHRyaWdnZXJlZCAqLworbG9uZyBDdXJsX3BwX3N0YXRlX3RpbWVvdXQoc3RydWN0IHBpbmdwb25nICpwcCkKK3sKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gcHAtPmNvbm47CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisgIGxvbmcgdGltZW91dF9tczsgLyogaW4gbWlsbGlzZWNvbmRzICovCisgIGxvbmcgdGltZW91dDJfbXM7IC8qIGluIG1pbGxpc2Vjb25kcyAqLworICBsb25nIHJlc3BvbnNlX3RpbWU9IChkYXRhLT5zZXQuc2VydmVyX3Jlc3BvbnNlX3RpbWVvdXQpPworICAgIGRhdGEtPnNldC5zZXJ2ZXJfcmVzcG9uc2VfdGltZW91dDogcHAtPnJlc3BvbnNlX3RpbWU7CisKKyAgLyogaWYgQ1VSTE9QVF9TRVJWRVJfUkVTUE9OU0VfVElNRU9VVCBpcyBzZXQsIHVzZSB0aGF0IHRvIGRldGVybWluZQorICAgICByZW1haW5pbmcgdGltZSwgb3IgdXNlIHBwLT5yZXNwb25zZSBiZWNhdXNlIFNFUlZFUl9SRVNQT05TRV9USU1FT1VUIGlzCisgICAgIHN1cHBvc2VkIHRvIGdvdmVybiB0aGUgcmVzcG9uc2UgZm9yIGFueSBnaXZlbiBzZXJ2ZXIgcmVzcG9uc2UsIG5vdCBmb3IKKyAgICAgdGhlIHRpbWUgZnJvbSBjb25uZWN0IHRvIHRoZSBnaXZlbiBzZXJ2ZXIgcmVzcG9uc2UuICovCisKKyAgLyogV2l0aG91dCBhIHJlcXVlc3RlZCB0aW1lb3V0LCB3ZSBvbmx5IHdhaXQgJ3Jlc3BvbnNlX3RpbWUnIHNlY29uZHMgZm9yIHRoZQorICAgICBmdWxsIHJlc3BvbnNlIHRvIGFycml2ZSBiZWZvcmUgd2UgYmFpbCBvdXQgKi8KKyAgdGltZW91dF9tcyA9IHJlc3BvbnNlX3RpbWUgLQorICAgIEN1cmxfdHZkaWZmKEN1cmxfdHZub3coKSwgcHAtPnJlc3BvbnNlKTsgLyogc3BlbnQgdGltZSAqLworCisgIGlmKGRhdGEtPnNldC50aW1lb3V0KSB7CisgICAgLyogaWYgdGltZW91dCBpcyByZXF1ZXN0ZWQsIGZpbmQgb3V0IGhvdyBtdWNoIHJlbWFpbmluZyB0aW1lIHdlIGhhdmUgKi8KKyAgICB0aW1lb3V0Ml9tcyA9IGRhdGEtPnNldC50aW1lb3V0IC0gLyogdGltZW91dCB0aW1lICovCisgICAgICBDdXJsX3R2ZGlmZihDdXJsX3R2bm93KCksIGNvbm4tPm5vdyk7IC8qIHNwZW50IHRpbWUgKi8KKworICAgIC8qIHBpY2sgdGhlIGxvd2VzdCBudW1iZXIgKi8KKyAgICB0aW1lb3V0X21zID0gQ1VSTE1JTih0aW1lb3V0X21zLCB0aW1lb3V0Ml9tcyk7CisgIH0KKworICByZXR1cm4gdGltZW91dF9tczsKK30KKworCisvKgorICogQ3VybF9wcF9tdWx0aV9zdGF0ZW1hY2goKQorICoKKyAqIGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGRvbmUgd2hlbiB0aGUgbXVsdGkgaW50ZXJmYWNlIGlzIHVzZWQuCisgKi8KK0NVUkxjb2RlIEN1cmxfcHBfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBwaW5ncG9uZyAqcHApCit7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IHBwLT5jb25uOworICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgaW50IHJjOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YT1jb25uLT5kYXRhOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgbG9uZyB0aW1lb3V0X21zID0gQ3VybF9wcF9zdGF0ZV90aW1lb3V0KHBwKTsKKworICBpZih0aW1lb3V0X21zIDw9IDApIHsKKyAgICBmYWlsZihkYXRhLCAic2VydmVyIHJlc3BvbnNlIHRpbWVvdXQiKTsKKyAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICB9CisKKyAgcmMgPSBDdXJsX3NvY2tldF9yZWFkeShwcC0+c2VuZGxlZnQ/Q1VSTF9TT0NLRVRfQkFEOnNvY2ssIC8qIHJlYWRpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBwcC0+c2VuZGxlZnQ/c29jazpDVVJMX1NPQ0tFVF9CQUQsIC8qIHdyaXRpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICBpZihyYyA9PSAtMSkgeworICAgIGZhaWxmKGRhdGEsICJzZWxlY3QvcG9sbCBlcnJvciIpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisgIGVsc2UgaWYocmMgIT0gMCkKKyAgICByZXN1bHQgPSBwcC0+c3RhdGVtYWNoX2FjdChjb25uKTsKKworICAvKiBpZiByYyA9PSAwLCB0aGVuIHNlbGVjdCgpIHRpbWVkIG91dCAqLworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDdXJsX3BwX2Vhc3lfc3RhdGVtYWNoKCkKKyAqCisgKiBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBkb25lIHdoZW4gdGhlIGVhc3kgaW50ZXJmYWNlIGlzIHVzZWQuCisgKi8KK0NVUkxjb2RlIEN1cmxfcHBfZWFzeV9zdGF0ZW1hY2goc3RydWN0IHBpbmdwb25nICpwcCkKK3sKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gcHAtPmNvbm47CisgIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICBpbnQgcmM7CisgIGxvbmcgaW50ZXJ2YWxfbXM7CisgIGxvbmcgdGltZW91dF9tcyA9IEN1cmxfcHBfc3RhdGVfdGltZW91dChwcCk7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisgIENVUkxjb2RlIHJlc3VsdDsKKworICBpZih0aW1lb3V0X21zIDw9MCApIHsKKyAgICBmYWlsZihkYXRhLCAic2VydmVyIHJlc3BvbnNlIHRpbWVvdXQiKTsKKyAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOyAvKiBhbHJlYWR5IHRvbyBsaXR0bGUgdGltZSAqLworICB9CisKKyAgaW50ZXJ2YWxfbXMgPSAxMDAwOyAgLyogdXNlIDEgc2Vjb25kIHRpbWVvdXQgaW50ZXJ2YWxzICovCisgIGlmKHRpbWVvdXRfbXMgPCBpbnRlcnZhbF9tcykKKyAgICBpbnRlcnZhbF9tcyA9IHRpbWVvdXRfbXM7CisKKyAgcmMgPSBDdXJsX3NvY2tldF9yZWFkeShwcC0+c2VuZGxlZnQ/Q1VSTF9TT0NLRVRfQkFEOnNvY2ssIC8qIHJlYWRpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBwcC0+c2VuZGxlZnQ/c29jazpDVVJMX1NPQ0tFVF9CQUQsIC8qIHdyaXRpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbF9tcyk7CisKKyAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKQorICAgIHJlc3VsdCA9IENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisgIGVsc2UKKyAgICByZXN1bHQgPSBDdXJsX3NwZWVkY2hlY2soZGF0YSwgQ3VybF90dm5vdygpKTsKKworICBpZihyZXN1bHQpCisgICAgOworICBlbHNlIGlmKHJjID09IC0xKSB7CisgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIGVycm9yIik7CisgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorICBlbHNlIGlmKHJjKQorICAgIHJlc3VsdCA9IHBwLT5zdGF0ZW1hY2hfYWN0KGNvbm4pOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGluaXRpYWxpemUgc3R1ZmYgdG8gcHJlcGFyZSBmb3IgcmVhZGluZyBhIGZyZXNoIG5ldyByZXNwb25zZSAqLwordm9pZCBDdXJsX3BwX2luaXQoc3RydWN0IHBpbmdwb25nICpwcCkKK3sKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gcHAtPmNvbm47CisgIHBwLT5ucmVhZF9yZXNwID0gMDsKKyAgcHAtPmxpbmVzdGFydF9yZXNwID0gY29ubi0+ZGF0YS0+c3RhdGUuYnVmZmVyOworICBwcC0+cGVuZGluZ19yZXNwID0gVFJVRTsKKyAgcHAtPnJlc3BvbnNlID0gQ3VybF90dm5vdygpOyAvKiBzdGFydCByZXNwb25zZSB0aW1lLW91dCBub3chICovCit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDdXJsX3BwX3ZzZW5kZigpCisgKgorICogU2VuZCB0aGUgZm9ybWF0ZWQgc3RyaW5nIGFzIGEgY29tbWFuZCB0byBhIHBpbmdwb25nIHNlcnZlci4gTm90ZSB0aGF0CisgKiB0aGUgc3RyaW5nIHNob3VsZCBub3QgaGF2ZSBhbnkgQ1JMRiBhcHBlbmRlZCwgYXMgdGhpcyBmdW5jdGlvbiB3aWxsCisgKiBhcHBlbmQgdGhlIG5lY2Vzc2FyeSB0aGluZ3MgaXRzZWxmLgorICoKKyAqIG1hZGUgdG8gbmV2ZXIgYmxvY2sKKyAqLworQ1VSTGNvZGUgQ3VybF9wcF92c2VuZGYoc3RydWN0IHBpbmdwb25nICpwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncykKK3sKKyAgc3NpemVfdCBieXRlc193cml0dGVuOworICBzaXplX3Qgd3JpdGVfbGVuOworICBjaGFyICpmbXRfY3JsZjsKKyAgY2hhciAqczsKKyAgQ1VSTGNvZGUgZXJyb3I7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IHBwLT5jb25uOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyNpZiBkZWZpbmVkKEhBVkVfS1JCNCkgfHwgZGVmaW5lZChIQVZFX0dTU0FQSSkKKyAgZW51bSBwcm90ZWN0aW9uX2xldmVsIGRhdGFfc2VjID0gY29ubi0+ZGF0YV9wcm90OworI2VuZGlmCisKKyAgREVCVUdBU1NFUlQocHAtPnNlbmRsZWZ0ID09IDApOworICBERUJVR0FTU0VSVChwcC0+c2VuZHNpemUgPT0gMCk7CisgIERFQlVHQVNTRVJUKHBwLT5zZW5kdGhpcyA9PSBOVUxMKTsKKworICBmbXRfY3JsZiA9IGFwcmludGYoIiVzXHJcbiIsIGZtdCk7IC8qIGFwcGVuZCBhIHRyYWlsaW5nIENSTEYgKi8KKyAgaWYoIWZtdF9jcmxmKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHMgPSB2YXByaW50ZihmbXRfY3JsZiwgYXJncyk7IC8qIHRyYWlsaW5nIENSTEYgYXBwZW5kZWQgKi8KKyAgZnJlZShmbXRfY3JsZik7CisgIGlmKCFzKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIGJ5dGVzX3dyaXR0ZW4gPSAwOworICB3cml0ZV9sZW4gPSBzdHJsZW4ocyk7CisKKyAgQ3VybF9wcF9pbml0KHBwKTsKKworICBlcnJvciA9IEN1cmxfY29udmVydF90b19uZXR3b3JrKGRhdGEsIHMsIHdyaXRlX2xlbik7CisgIC8qIEN1cmxfY29udmVydF90b19uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLworICBpZihlcnJvcikgeworICAgIGZyZWUocyk7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKyNpZiBkZWZpbmVkKEhBVkVfS1JCNCkgfHwgZGVmaW5lZChIQVZFX0dTU0FQSSkKKyAgY29ubi0+ZGF0YV9wcm90ID0gUFJPVF9DTUQ7CisjZW5kaWYKKyAgZXJyb3IgPSBDdXJsX3dyaXRlKGNvbm4sIGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdLCBzLCB3cml0ZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAmYnl0ZXNfd3JpdHRlbik7CisjaWYgZGVmaW5lZChIQVZFX0tSQjQpIHx8IGRlZmluZWQoSEFWRV9HU1NBUEkpCisgIERFQlVHQVNTRVJUKGRhdGFfc2VjID4gUFJPVF9OT05FICYmIGRhdGFfc2VjIDwgUFJPVF9MQVNUKTsKKyAgY29ubi0+ZGF0YV9wcm90ID0gZGF0YV9zZWM7CisjZW5kaWYKKworICBpZihlcnJvcikgeworICAgIGZyZWUocyk7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKyAgaWYoY29ubi0+ZGF0YS0+c2V0LnZlcmJvc2UpCisgICAgQ3VybF9kZWJ1Zyhjb25uLT5kYXRhLCBDVVJMSU5GT19IRUFERVJfT1VULAorICAgICAgICAgICAgICAgcywgKHNpemVfdClieXRlc193cml0dGVuLCBjb25uKTsKKworICBpZihieXRlc193cml0dGVuICE9IChzc2l6ZV90KXdyaXRlX2xlbikgeworICAgIC8qIHRoZSB3aG9sZSBjaHVuayB3YXMgbm90IHNlbnQsIGtlZXAgaXQgYXJvdW5kIGFuZCBhZGp1c3Qgc2l6ZXMgKi8KKyAgICBwcC0+c2VuZHRoaXMgPSBzOworICAgIHBwLT5zZW5kc2l6ZSA9IHdyaXRlX2xlbjsKKyAgICBwcC0+c2VuZGxlZnQgPSB3cml0ZV9sZW4gLSBieXRlc193cml0dGVuOworICB9CisgIGVsc2UgeworICAgIGZyZWUocyk7CisgICAgcHAtPnNlbmR0aGlzID0gTlVMTDsKKyAgICBwcC0+c2VuZGxlZnQgPSBwcC0+c2VuZHNpemUgPSAwOworICAgIHBwLT5yZXNwb25zZSA9IEN1cmxfdHZub3coKTsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDdXJsX3BwX3NlbmRmKCkKKyAqCisgKiBTZW5kIHRoZSBmb3JtYXRlZCBzdHJpbmcgYXMgYSBjb21tYW5kIHRvIGEgcGluZ3Bvbmcgc2VydmVyLiBOb3RlIHRoYXQKKyAqIHRoZSBzdHJpbmcgc2hvdWxkIG5vdCBoYXZlIGFueSBDUkxGIGFwcGVuZGVkLCBhcyB0aGlzIGZ1bmN0aW9uIHdpbGwKKyAqIGFwcGVuZCB0aGUgbmVjZXNzYXJ5IHRoaW5ncyBpdHNlbGYuCisgKgorICogbWFkZSB0byBuZXZlciBibG9jaworICovCitDVVJMY29kZSBDdXJsX3BwX3NlbmRmKHN0cnVjdCBwaW5ncG9uZyAqcHAsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICBDVVJMY29kZSByZXM7CisgIHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0KGFwLCBmbXQpOworCisgIHJlcyA9IEN1cmxfcHBfdnNlbmRmKHBwLCBmbXQsIGFwKTsKKworICB2YV9lbmQoYXApOworCisgIHJldHVybiByZXM7Cit9CisKKy8qCisgKiBDdXJsX3BwX3JlYWRyZXNwKCkKKyAqCisgKiBSZWFkcyBhIHBpZWNlIG9mIGEgc2VydmVyIHJlc3BvbnNlLgorICovCitDVVJMY29kZSBDdXJsX3BwX3JlYWRyZXNwKGN1cmxfc29ja2V0X3Qgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGluZ3BvbmcgKnBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvZGUsIC8qIHJldHVybiB0aGUgc2VydmVyIGNvZGUgaWYgZG9uZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnNpemUpIC8qIHNpemUgb2YgdGhlIHJlc3BvbnNlICovCit7CisgIHNzaXplX3QgcGVybGluZTsgLyogY291bnQgYnl0ZXMgcGVyIGxpbmUgKi8KKyAgYm9vbCBrZWVwb249VFJVRTsKKyAgc3NpemVfdCBnb3RieXRlczsKKyAgY2hhciAqcHRyOworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBwcC0+Y29ubjsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBjaGFyICogY29uc3QgYnVmID0gZGF0YS0+c3RhdGUuYnVmZmVyOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKworICAqY29kZSA9IDA7IC8qIDAgZm9yIGVycm9ycyBvciBub3QgZG9uZSAqLworICAqc2l6ZSA9IDA7CisKKyAgcHRyPWJ1ZiArIHBwLT5ucmVhZF9yZXNwOworCisgIC8qIG51bWJlciBvZiBieXRlcyBpbiB0aGUgY3VycmVudCBsaW5lLCBzbyBmYXIgKi8KKyAgcGVybGluZSA9IChzc2l6ZV90KShwdHItcHAtPmxpbmVzdGFydF9yZXNwKTsKKworICBrZWVwb249VFJVRTsKKworICB3aGlsZSgocHAtPm5yZWFkX3Jlc3A8QlVGU0laRSkgJiYgKGtlZXBvbiAmJiAhcmVzdWx0KSkgeworCisgICAgaWYocHAtPmNhY2hlKSB7CisgICAgICAvKiB3ZSBoYWQgZGF0YSBpbiB0aGUgImNhY2hlIiwgY29weSB0aGF0IGluc3RlYWQgb2YgZG9pbmcgYW4gYWN0dWFsCisgICAgICAgKiByZWFkCisgICAgICAgKgorICAgICAgICogcHAtPmNhY2hlX3NpemUgaXMgY2FzdCB0byBzc2l6ZV90IGhlcmUuICBUaGlzIHNob3VsZCBiZSBzYWZlLCBiZWNhdXNlCisgICAgICAgKiBpdCB3b3VsZCBoYXZlIGJlZW4gcG9wdWxhdGVkIHdpdGggc29tZXRoaW5nIG9mIHNpemUgaW50IHRvIGJlZ2luCisgICAgICAgKiB3aXRoLCBldmVuIHRob3VnaCBpdHMgZGF0YXR5cGUgbWF5IGJlIGxhcmdlciB0aGFuIGFuIGludC4KKyAgICAgICAqLworICAgICAgREVCVUdBU1NFUlQoKHB0citwcC0+Y2FjaGVfc2l6ZSkgPD0gKGJ1ZitCVUZTSVpFKzEpKTsKKyAgICAgIG1lbWNweShwdHIsIHBwLT5jYWNoZSwgcHAtPmNhY2hlX3NpemUpOworICAgICAgZ290Ynl0ZXMgPSAoc3NpemVfdClwcC0+Y2FjaGVfc2l6ZTsKKyAgICAgIGZyZWUocHAtPmNhY2hlKTsgICAgLyogZnJlZSB0aGUgY2FjaGUgKi8KKyAgICAgIHBwLT5jYWNoZSA9IE5VTEw7ICAgLyogY2xlYXIgdGhlIHBvaW50ZXIgKi8KKyAgICAgIHBwLT5jYWNoZV9zaXplID0gMDsgLyogemVybyB0aGUgc2l6ZSBqdXN0IGluIGNhc2UgKi8KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpbnQgcmVzOworI2lmIGRlZmluZWQoSEFWRV9LUkI0KSB8fCBkZWZpbmVkKEhBVkVfR1NTQVBJKQorICAgICAgZW51bSBwcm90ZWN0aW9uX2xldmVsIHByb3QgPSBjb25uLT5kYXRhX3Byb3Q7CisgICAgICBjb25uLT5kYXRhX3Byb3QgPSBQUk9UX0NMRUFSOworI2VuZGlmCisgICAgICBERUJVR0FTU0VSVCgocHRyK0JVRlNJWkUtcHAtPm5yZWFkX3Jlc3ApIDw9IChidWYrQlVGU0laRSsxKSk7CisgICAgICByZXMgPSBDdXJsX3JlYWQoY29ubiwgc29ja2ZkLCBwdHIsIEJVRlNJWkUtcHAtPm5yZWFkX3Jlc3AsCisgICAgICAgICAgICAgICAgICAgICAgJmdvdGJ5dGVzKTsKKyNpZiBkZWZpbmVkKEhBVkVfS1JCNCkgfHwgZGVmaW5lZChIQVZFX0dTU0FQSSkKKyAgICAgIERFQlVHQVNTRVJUKHByb3QgID4gUFJPVF9OT05FICYmIHByb3QgPCBQUk9UX0xBU1QpOworICAgICAgY29ubi0+ZGF0YV9wcm90ID0gcHJvdDsKKyNlbmRpZgorICAgICAgaWYocmVzID09IENVUkxFX0FHQUlOKQorICAgICAgICByZXR1cm4gQ1VSTEVfT0s7IC8qIHJldHVybiAqLworCisgICAgICBpZigocmVzID09IENVUkxFX09LKSAmJiAoZ290Ynl0ZXMgPiAwKSkKKyAgICAgICAgLyogY29udmVydCBmcm9tIHRoZSBuZXR3b3JrIGVuY29kaW5nICovCisgICAgICAgIHJlcyA9IEN1cmxfY29udmVydF9mcm9tX25ldHdvcmsoZGF0YSwgcHRyLCBnb3RieXRlcyk7CisgICAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLworCisgICAgICBpZihDVVJMRV9PSyAhPSByZXMpIHsKKyAgICAgICAgcmVzdWx0ID0gKENVUkxjb2RlKXJlczsgLyogU2V0IG91dGVyIHJlc3VsdCB2YXJpYWJsZSB0byB0aGlzIGVycm9yLiAqLworICAgICAgICBrZWVwb24gPSBGQUxTRTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZigha2VlcG9uKQorICAgICAgOworICAgIGVsc2UgaWYoZ290Ynl0ZXMgPD0gMCkgeworICAgICAga2VlcG9uID0gRkFMU0U7CisgICAgICByZXN1bHQgPSBDVVJMRV9SRUNWX0VSUk9SOworICAgICAgZmFpbGYoZGF0YSwgInJlc3BvbnNlIHJlYWRpbmcgZmFpbGVkIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogd2UgZ290IGEgd2hvbGUgY2h1bmsgb2YgZGF0YSwgd2hpY2ggY2FuIGJlIGFueXRoaW5nIGZyb20gb25lCisgICAgICAgKiBieXRlIHRvIGEgc2V0IG9mIGxpbmVzIGFuZCBwb3NzaWJsZSBqdXN0IGEgcGllY2Ugb2YgdGhlIGxhc3QKKyAgICAgICAqIGxpbmUgKi8KKyAgICAgIHNzaXplX3QgaTsKKyAgICAgIHNzaXplX3QgY2xpcGFtb3VudCA9IDA7CisgICAgICBib29sIHJlc3RhcnQgPSBGQUxTRTsKKworICAgICAgZGF0YS0+cmVxLmhlYWRlcmJ5dGVjb3VudCArPSAobG9uZylnb3RieXRlczsKKworICAgICAgcHAtPm5yZWFkX3Jlc3AgKz0gZ290Ynl0ZXM7CisgICAgICBmb3IoaSA9IDA7IGkgPCBnb3RieXRlczsgcHRyKyssIGkrKykgeworICAgICAgICBwZXJsaW5lKys7CisgICAgICAgIGlmKCpwdHI9PSdcbicpIHsKKyAgICAgICAgICAvKiBhIG5ld2xpbmUgaXMgQ1JMRiBpbiBwcC10YWxrLCBzbyB0aGUgQ1IgaXMgaWdub3JlZCBhcworICAgICAgICAgICAgIHRoZSBsaW5lIGlzbid0IHJlYWxseSB0ZXJtaW5hdGVkIHVudGlsIHRoZSBMRiBjb21lcyAqLworCisgICAgICAgICAgLyogb3V0cHV0IGRlYnVnIG91dHB1dCBpZiB0aGF0IGlzIHJlcXVlc3RlZCAqLworI2lmIGRlZmluZWQoSEFWRV9LUkI0KSB8fCBkZWZpbmVkKEhBVkVfR1NTQVBJKQorICAgICAgICAgIGlmKCFjb25uLT5zZWNfY29tcGxldGUpCisjZW5kaWYKKyAgICAgICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKQorICAgICAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcC0+bGluZXN0YXJ0X3Jlc3AsIChzaXplX3QpcGVybGluZSwgY29ubik7CisKKyAgICAgICAgICAvKgorICAgICAgICAgICAqIFdlIHBhc3MgYWxsIHJlc3BvbnNlLWxpbmVzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkCisgICAgICAgICAgICogZm9yICJoZWFkZXJzIi4gVGhlIHJlc3BvbnNlIGxpbmVzIGNhbiBiZSBzZWVuIGFzIGEga2luZCBvZgorICAgICAgICAgICAqIGhlYWRlcnMuCisgICAgICAgICAgICovCisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwLT5saW5lc3RhcnRfcmVzcCwgcGVybGluZSk7CisgICAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgIGlmKHBwLT5lbmRvZnJlc3AocHAsIGNvZGUpKSB7CisgICAgICAgICAgICAvKiBUaGlzIGlzIHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZSwgY29weSB0aGUgbGFzdCBsaW5lIHRvIHRoZQorICAgICAgICAgICAgICAgc3RhcnQgb2YgdGhlIGJ1ZmZlciBhbmQgemVybyB0ZXJtaW5hdGUsIGZvciBvbGQgdGltZXMgc2FrZSAoYW5kCisgICAgICAgICAgICAgICBrcmI0KSEgKi8KKyAgICAgICAgICAgIGNoYXIgKm1lb3c7CisgICAgICAgICAgICBpbnQgbjsKKyAgICAgICAgICAgIGZvcihtZW93PXBwLT5saW5lc3RhcnRfcmVzcCwgbj0wOyBtZW93PHB0cjsgbWVvdysrLCBuKyspCisgICAgICAgICAgICAgIGJ1ZltuXSA9ICptZW93OworICAgICAgICAgICAgKm1lb3c9MDsgLyogemVybyB0ZXJtaW5hdGUgKi8KKyAgICAgICAgICAgIGtlZXBvbj1GQUxTRTsKKyAgICAgICAgICAgIHBwLT5saW5lc3RhcnRfcmVzcCA9IHB0cisxOyAvKiBhZHZhbmNlIHBvaW50ZXIgKi8KKyAgICAgICAgICAgIGkrKzsgLyogc2tpcCB0aGlzIGJlZm9yZSBnZXR0aW5nIG91dCAqLworCisgICAgICAgICAgICAqc2l6ZSA9IHBwLT5ucmVhZF9yZXNwOyAvKiBzaXplIG9mIHRoZSByZXNwb25zZSAqLworICAgICAgICAgICAgcHAtPm5yZWFkX3Jlc3AgPSAwOyAvKiByZXN0YXJ0ICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgcGVybGluZT0wOyAvKiBsaW5lIHN0YXJ0cyBvdmVyIGhlcmUgKi8KKyAgICAgICAgICBwcC0+bGluZXN0YXJ0X3Jlc3AgPSBwdHIrMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZigha2VlcG9uICYmIChpICE9IGdvdGJ5dGVzKSkgeworICAgICAgICAvKiBXZSBmb3VuZCB0aGUgZW5kIG9mIHRoZSByZXNwb25zZSBsaW5lcywgYnV0IHdlIGRpZG4ndCBwYXJzZSB0aGUKKyAgICAgICAgICAgZnVsbCBjaHVuayBvZiBkYXRhIHdlIGhhdmUgcmVhZCBmcm9tIHRoZSBzZXJ2ZXIuIFdlIHRoZXJlZm9yZSBuZWVkCisgICAgICAgICAgIHRvIHN0b3JlIHRoZSByZXN0IG9mIHRoZSBkYXRhIHRvIGJlIGNoZWNrZWQgb24gdGhlIG5leHQgaW52b2tlIGFzCisgICAgICAgICAgIGl0IG1heSBhY3R1YWxseSBjb250YWluIGFub3RoZXIgZW5kIG9mIHJlc3BvbnNlIGFscmVhZHkhICovCisgICAgICAgIGNsaXBhbW91bnQgPSBnb3RieXRlcyAtIGk7CisgICAgICAgIHJlc3RhcnQgPSBUUlVFOworICAgICAgfQorICAgICAgZWxzZSBpZihrZWVwb24pIHsKKworICAgICAgICBpZigocGVybGluZSA9PSBnb3RieXRlcykgJiYgKGdvdGJ5dGVzID4gQlVGU0laRS8yKSkgeworICAgICAgICAgIC8qIFdlIGdvdCBhbiBleGNlc3NpdmUgbGluZSB3aXRob3V0IG5ld2xpbmVzIGFuZCB3ZSBuZWVkIHRvIGRlYWwKKyAgICAgICAgICAgICB3aXRoIGl0LiBXZSBrZWVwIHRoZSBmaXJzdCBieXRlcyBvZiB0aGUgbGluZSB0aGVuIHdlIHRocm93CisgICAgICAgICAgICAgYXdheSB0aGUgcmVzdC4gKi8KKyAgICAgICAgICBpbmZvZihkYXRhLCAiRXhjZXNzaXZlIHNlcnZlciByZXNwb25zZSBsaW5lIGxlbmd0aCByZWNlaXZlZCwgIgorICAgICAgICAgICAgICAgICIlemQgYnl0ZXMuIFN0cmlwcGluZ1xuIiwgZ290Ynl0ZXMpOworICAgICAgICAgIHJlc3RhcnQgPSBUUlVFOworCisgICAgICAgICAgLyogd2Uga2VlcCA0MCBieXRlcyBzaW5jZSBhbGwgb3VyIHBpbmdwb25nIHByb3RvY29scyBhcmUgb25seQorICAgICAgICAgICAgIGludGVyZXN0ZWQgaW4gdGhlIGZpcnN0IHBpZWNlICovCisgICAgICAgICAgY2xpcGFtb3VudCA9IDQwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYocHAtPm5yZWFkX3Jlc3AgPiBCVUZTSVpFLzIpIHsKKyAgICAgICAgICAvKiBXZSBnb3QgYSBsYXJnZSBjaHVuayBvZiBkYXRhIGFuZCB0aGVyZSdzIHBvdGVudGlhbGx5IHN0aWxsCisgICAgICAgICAgICAgdHJhaWxpbmcgZGF0YSB0byB0YWtlIGNhcmUgb2YsIHNvIHdlIHB1dCBhbnkgc3VjaCBwYXJ0IGluIHRoZQorICAgICAgICAgICAgICJjYWNoZSIsIGNsZWFyIHRoZSBidWZmZXIgdG8gbWFrZSBzcGFjZSBhbmQgcmVzdGFydC4gKi8KKyAgICAgICAgICBjbGlwYW1vdW50ID0gcGVybGluZTsKKyAgICAgICAgICByZXN0YXJ0ID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZihpID09IGdvdGJ5dGVzKQorICAgICAgICByZXN0YXJ0ID0gVFJVRTsKKworICAgICAgaWYoY2xpcGFtb3VudCkgeworICAgICAgICBwcC0+Y2FjaGVfc2l6ZSA9IGNsaXBhbW91bnQ7CisgICAgICAgIHBwLT5jYWNoZSA9IG1hbGxvYyhwcC0+Y2FjaGVfc2l6ZSk7CisgICAgICAgIGlmKHBwLT5jYWNoZSkKKyAgICAgICAgICBtZW1jcHkocHAtPmNhY2hlLCBwcC0+bGluZXN0YXJ0X3Jlc3AsIHBwLT5jYWNoZV9zaXplKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgfQorICAgICAgaWYocmVzdGFydCkgeworICAgICAgICAvKiBub3cgcmVzZXQgYSBmZXcgdmFyaWFibGVzIHRvIHN0YXJ0IG92ZXIgbmljZWx5IGZyb20gdGhlIHN0YXJ0IG9mCisgICAgICAgICAgIHRoZSBiaWcgYnVmZmVyICovCisgICAgICAgIHBwLT5ucmVhZF9yZXNwID0gMDsgLyogc3RhcnQgb3ZlciBmcm9tIHNjcmF0Y2ggaW4gdGhlIGJ1ZmZlciAqLworICAgICAgICBwdHIgPSBwcC0+bGluZXN0YXJ0X3Jlc3AgPSBidWY7CisgICAgICAgIHBlcmxpbmUgPSAwOworICAgICAgfQorCisgICAgfSAvKiB0aGVyZSB3YXMgZGF0YSAqLworCisgIH0gLyogd2hpbGUgdGhlcmUncyBidWZmZXIgbGVmdCBhbmQgbG9vcCBpcyByZXF1ZXN0ZWQgKi8KKworICBwcC0+cGVuZGluZ19yZXNwID0gRkFMU0U7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50IEN1cmxfcHBfZ2V0c29jayhzdHJ1Y3QgcGluZ3BvbmcgKnBwLAorICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKKyAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQoreworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBwcC0+Y29ubjsKKworICBpZighbnVtc29ja3MpCisgICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7CisKKyAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKworICBpZihwcC0+c2VuZGxlZnQpIHsKKyAgICAvKiB3cml0ZSBtb2RlICovCisgICAgcmV0dXJuIEdFVFNPQ0tfV1JJVEVTT0NLKDApOworICB9CisKKyAgLyogcmVhZCBtb2RlICovCisgIHJldHVybiBHRVRTT0NLX1JFQURTT0NLKDApOworfQorCitDVVJMY29kZSBDdXJsX3BwX2ZsdXNoc2VuZChzdHJ1Y3QgcGluZ3BvbmcgKnBwKQoreworICAvKiB3ZSBoYXZlIGEgcGllY2Ugb2YgYSBjb21tYW5kIHN0aWxsIGxlZnQgdG8gc2VuZCAqLworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBwcC0+Y29ubjsKKyAgc3NpemVfdCB3cml0dGVuOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisKKyAgcmVzdWx0ID0gQ3VybF93cml0ZShjb25uLCBzb2NrLCBwcC0+c2VuZHRoaXMgKyBwcC0+c2VuZHNpemUgLQorICAgICAgICAgICAgICAgICAgICAgIHBwLT5zZW5kbGVmdCwgcHAtPnNlbmRsZWZ0LCAmd3JpdHRlbik7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIGlmKHdyaXR0ZW4gIT0gKHNzaXplX3QpcHAtPnNlbmRsZWZ0KSB7CisgICAgLyogb25seSBhIGZyYWN0aW9uIHdhcyBzZW50ICovCisgICAgcHAtPnNlbmRsZWZ0IC09IHdyaXR0ZW47CisgIH0KKyAgZWxzZSB7CisgICAgZnJlZShwcC0+c2VuZHRoaXMpOworICAgIHBwLT5zZW5kdGhpcz1OVUxMOworICAgIHBwLT5zZW5kbGVmdCA9IHBwLT5zZW5kc2l6ZSA9IDA7CisgICAgcHAtPnJlc3BvbnNlID0gQ3VybF90dm5vdygpOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworQ1VSTGNvZGUgQ3VybF9wcF9kaXNjb25uZWN0KHN0cnVjdCBwaW5ncG9uZyAqcHApCit7CisgIGlmKHBwLT5jYWNoZSkgeworICAgIGZyZWUocHAtPmNhY2hlKTsKKyAgICBwcC0+Y2FjaGUgPSBOVUxMOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3Bpbmdwb25nLmggYi9jdXJsLTcuMjUuMC9saWIvcGluZ3BvbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDEwNGNmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3Bpbmdwb25nLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfUElOR1BPTkdfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9QSU5HUE9OR19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSU1BUCkgfHwgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0ZUUCkgfHwgXAorICAhZGVmaW5lZChDVVJMX0RJU0FCTEVfUE9QMykgfHwgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1NNVFApCisjZGVmaW5lIFVTRV9QSU5HUE9ORworI2VuZGlmCisKKy8qIGZvcndhcmQtZGVjbGFyYXRpb24sIHRoaXMgaXMgZGVmaW5lZCBpbiB1cmxkYXRhLmggKi8KK3N0cnVjdCBjb25uZWN0ZGF0YTsKKworLyoKKyAqICdwaW5ncG9uZycgaXMgdGhlIGdlbmVyaWMgc3RydWN0IHVzZWQgZm9yIHByb3RvY29scyBkb2luZyBzZXJ2ZXI8LT5jbGllbnQKKyAqIGNvbnZlcnNhdGlvbnMgaW4gYSBiYWNrLWFuZC1mb3J0aCBzdHlsZSBzdWNoIGFzIEZUUCwgSU1BUCwgUE9QMywgU01UUCBldGMuCisgKgorICogSXQgaG9sZHMgcmVzcG9uc2UgY2FjaGUgYW5kIG5vbi1ibG9ja2luZyBzZW5kaW5nIGRhdGEuCisgKi8KK3N0cnVjdCBwaW5ncG9uZyB7CisgIGNoYXIgKmNhY2hlOyAgICAgLyogZGF0YSBjYWNoZSBiZXR3ZWVuIGdldHJlc3BvbnNlKCktY2FsbHMgKi8KKyAgc2l6ZV90IGNhY2hlX3NpemU7ICAvKiBzaXplIG9mIGNhY2hlIGluIGJ5dGVzICovCisgIHNpemVfdCBucmVhZF9yZXNwOyAgLyogbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSByZWFkIG9mIGEgc2VydmVyIHJlc3BvbnNlICovCisgIGNoYXIgKmxpbmVzdGFydF9yZXNwOyAvKiBsaW5lIHN0YXJ0IHBvaW50ZXIgZm9yIHRoZSBzZXJ2ZXIgcmVzcG9uc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlciBmdW5jdGlvbiAqLworICBib29sIHBlbmRpbmdfcmVzcDsgIC8qIHNldCBUUlVFIHdoZW4gYSBzZXJ2ZXIgcmVzcG9uc2UgaXMgcGVuZGluZyBvciBpbgorICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLCBhbmQgaXMgY2xlYXJlZCBvbmNlIHRoZSBsYXN0IHJlc3BvbnNlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCAqLworICBjaGFyICpzZW5kdGhpczsgLyogYWxsb2NhdGVkIHBvaW50ZXIgdG8gYSBidWZmZXIgdGhhdCBpcyB0byBiZSBzZW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgc2VydmVyICovCisgIHNpemVfdCBzZW5kbGVmdDsgLyogbnVtYmVyIG9mIGJ5dGVzIGxlZnQgdG8gc2VuZCBmcm9tIHRoZSBzZW5kdGhpcyBidWZmZXIgKi8KKyAgc2l6ZV90IHNlbmRzaXplOyAvKiB0b3RhbCBzaXplIG9mIHRoZSBzZW5kdGhpcyBidWZmZXIgKi8KKyAgc3RydWN0IHRpbWV2YWwgcmVzcG9uc2U7IC8qIHNldCB0byBDdXJsX3R2bm93KCkgd2hlbiBhIGNvbW1hbmQgaGFzIGJlZW4gc2VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmLCB1c2VkIHRvIHRpbWUtb3V0IHJlc3BvbnNlIHJlYWRpbmcgKi8KKyAgbG9uZyByZXNwb25zZV90aW1lOyAvKiBXaGVuIG5vIHRpbWVvdXQgaXMgZ2l2ZW4sIHRoaXMgaXMgdGhlIGFtb3VudCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyB3ZSBhd2FpdCBmb3IgYSBzZXJ2ZXIgcmVzcG9uc2UuICovCisKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uOyAvKiBwb2ludHMgdG8gdGhlIGNvbm5lY3RkYXRhIHN0cnVjdCB0aGF0IHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxvbmdzIHRvICovCisKKyAgLyogRnVuY3Rpb24gcG9pbnRlcnMgdGhlIHByb3RvY29scyBNVVNUIGltcGxlbWVudCBhbmQgcHJvdmlkZSBmb3IgdGhlCisgICAgIHBpbmdwb25nIGxheWVyIHRvIGZ1bmN0aW9uICovCisKKyAgQ1VSTGNvZGUgKCpzdGF0ZW1hY2hfYWN0KShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCisgIGludCAoKmVuZG9mcmVzcCkoc3RydWN0IHBpbmdwb25nICpwcCwgaW50ICpjb2RlKTsKK307CisKKy8qCisgKiBDdXJsX3BwX211bHRpX3N0YXRlbWFjaCgpCisgKgorICogY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgZG9uZSB3aGVuIHRoZSBtdWx0aSBpbnRlcmZhY2UgaXMgdXNlZC4KKyAqLworQ1VSTGNvZGUgQ3VybF9wcF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IHBpbmdwb25nICpwcCk7CisKKy8qCisgKiBDdXJsX3BwX2Vhc3lfc3RhdGVtYWNoKCkKKyAqCisgKiBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBkb25lIHdoZW4gdGhlIGVhc3kgaW50ZXJmYWNlIGlzIHVzZWQuCisgKi8KK0NVUkxjb2RlIEN1cmxfcHBfZWFzeV9zdGF0ZW1hY2goc3RydWN0IHBpbmdwb25nICpwcCk7CisKKworLyogaW5pdGlhbGl6ZSBzdHVmZiB0byBwcmVwYXJlIGZvciByZWFkaW5nIGEgZnJlc2ggbmV3IHJlc3BvbnNlICovCit2b2lkIEN1cmxfcHBfaW5pdChzdHJ1Y3QgcGluZ3BvbmcgKnBwKTsKKworLyogUmV0dXJucyB0aW1lb3V0IGluIG1zLiAwIG9yIG5lZ2F0aXZlIG51bWJlciBtZWFucyB0aGUgdGltZW91dCBoYXMgYWxyZWFkeQorICAgdHJpZ2dlcmVkICovCitsb25nIEN1cmxfcHBfc3RhdGVfdGltZW91dChzdHJ1Y3QgcGluZ3BvbmcgKnBwKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDdXJsX3BwX3NlbmRmKCkKKyAqCisgKiBTZW5kIHRoZSBmb3JtYXRlZCBzdHJpbmcgYXMgYSBjb21tYW5kIHRvIGEgcGluZ3Bvbmcgc2VydmVyLiBOb3RlIHRoYXQKKyAqIHRoZSBzdHJpbmcgc2hvdWxkIG5vdCBoYXZlIGFueSBDUkxGIGFwcGVuZGVkLCBhcyB0aGlzIGZ1bmN0aW9uIHdpbGwKKyAqIGFwcGVuZCB0aGUgbmVjZXNzYXJ5IHRoaW5ncyBpdHNlbGYuCisgKgorICogbWFkZSB0byBuZXZlciBibG9jaworICovCitDVVJMY29kZSBDdXJsX3BwX3NlbmRmKHN0cnVjdCBwaW5ncG9uZyAqcHAsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ3VybF9wcF92c2VuZGYoKQorICoKKyAqIFNlbmQgdGhlIGZvcm1hdGVkIHN0cmluZyBhcyBhIGNvbW1hbmQgdG8gYSBwaW5ncG9uZyBzZXJ2ZXIuIE5vdGUgdGhhdAorICogdGhlIHN0cmluZyBzaG91bGQgbm90IGhhdmUgYW55IENSTEYgYXBwZW5kZWQsIGFzIHRoaXMgZnVuY3Rpb24gd2lsbAorICogYXBwZW5kIHRoZSBuZWNlc3NhcnkgdGhpbmdzIGl0c2VsZi4KKyAqCisgKiBtYWRlIHRvIG5ldmVyIGJsb2NrCisgKi8KK0NVUkxjb2RlIEN1cmxfcHBfdnNlbmRmKHN0cnVjdCBwaW5ncG9uZyAqcHAsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpOworCisvKgorICogQ3VybF9wcF9yZWFkcmVzcCgpCisgKgorICogUmVhZHMgYSBwaWVjZSBvZiBhIHNlcnZlciByZXNwb25zZS4KKyAqLworQ1VSTGNvZGUgQ3VybF9wcF9yZWFkcmVzcChjdXJsX3NvY2tldF90IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBpbmdwb25nICpwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb2RlLCAvKiByZXR1cm4gdGhlIHNlcnZlciBjb2RlIGlmIGRvbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpzaXplKTsgLyogc2l6ZSBvZiB0aGUgcmVzcG9uc2UgKi8KKworCitDVVJMY29kZSBDdXJsX3BwX2ZsdXNoc2VuZChzdHJ1Y3QgcGluZ3BvbmcgKnBwKTsKKworLyogY2FsbCB0aGlzIHdoZW4gYSBwaW5ncG9uZyBjb25uZWN0aW9uIGlzIGRpc2Nvbm5lY3RlZCAqLworQ1VSTGNvZGUgQ3VybF9wcF9kaXNjb25uZWN0KHN0cnVjdCBwaW5ncG9uZyAqcHApOworCitpbnQgQ3VybF9wcF9nZXRzb2NrKHN0cnVjdCBwaW5ncG9uZyAqcHAsIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfUElOR1BPTkdfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3BvbGFyc3NsLmMgYi9jdXJsLTcuMjUuMC9saWIvcG9sYXJzc2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjRjNzgzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3BvbGFyc3NsLmMKQEAgLTAsMCArMSw0MDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgSG9pLUhvIENoYW4sIDxob2loby5jaGFuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBTb3VyY2UgZmlsZSBmb3IgYWxsIFBvbGFyU1NMLXNwZWNpZmljIGNvZGUgZm9yIHRoZSBUTFMvU1NMIGxheWVyLiBObyBjb2RlCisgKiBidXQgc3NsZ2VuLmMgc2hvdWxkIGV2ZXIgY2FsbCBvciB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICoKKyAqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIFVTRV9QT0xBUlNTTAorCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHBvbGFyc3NsL25ldC5oPgorI2luY2x1ZGUgPHBvbGFyc3NsL3NzbC5oPgorI2luY2x1ZGUgPHBvbGFyc3NsL2hhdmVnZS5oPgorI2luY2x1ZGUgPHBvbGFyc3NsL2NlcnRzLmg+CisjaW5jbHVkZSA8cG9sYXJzc2wveDUwOS5oPgorI2luY2x1ZGUgPHBvbGFyc3NsL3ZlcnNpb24uaD4KKworI2lmIFBPTEFSU1NMX1ZFUlNJT05fTlVNQkVSPDB4MDEwMDAwMDAKKy8qCisgIEVhcmxpZXIgdmVyc2lvbnMgb2YgcG9sYXJzc2wgaGFkIG5vIFdBTlRfUkVBRCBvciBXQU5UX1dSSVRFLCBvbmx5IFRSWV9BR0FJTgorKi8KKyNkZWZpbmUgUE9MQVJTU0xfRVJSX05FVF9XQU5UX1JFQUQgIFBPTEFSU1NMX0VSUl9ORVRfVFJZX0FHQUlOCisjZGVmaW5lIFBPTEFSU1NMX0VSUl9ORVRfV0FOVF9XUklURSBQT0xBUlNTTF9FUlJfTkVUX1RSWV9BR0FJTgorI2VuZGlmCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJpbmV0X3B0b24uaCIKKyNpbmNsdWRlICJwb2xhcnNzbC5oIgorI2luY2x1ZGUgInNzbGdlbi5oIgorI2luY2x1ZGUgInBhcnNlZGF0ZS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIgLyogZm9yIHRoZSBjb25uZWN0IHRpbWVvdXQgKi8KKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogdmVyc2lvbiBkZXBlbmRlbnQgZGlmZmVyZW5jZXMgKi8KKyNpZiBQT0xBUlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MDEwMTAwMDAKKy8qIHRoZSBvbGQgd2F5ICovCisjZGVmaW5lIEhBVkVHRV9SQU5ET00gaGF2ZWdlX3JhbmQKKyNlbHNlCisvKiBmcm9tIDEuMS4wICovCisjZGVmaW5lIEhBVkVHRV9SQU5ET00gaGF2ZWdlX3JhbmRvbQorI2VuZGlmCisKKy8qIERlZmluZSB0aGlzIHRvIGVuYWJsZSBsb3RzIG9mIGRlYnVnZ2luZyBmb3IgUG9sYXJTU0wgKi8KKyN1bmRlZiBQT0xBUlNTTF9ERUJVRworCisjaWZkZWYgUE9MQVJTU0xfREVCVUcKK3N0YXRpYyB2b2lkIHBvbGFyc3NsX2RlYnVnKHZvaWQgKmNvbnRleHQsIGludCBsZXZlbCwgY2hhciAqbGluZSkKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBOVUxMOworCisgIGlmKCFjb250ZXh0KQorICAgIHJldHVybjsKKworICBkYXRhID0gKHN0cnVjdCBTZXNzaW9uSGFuZGxlICopY29udGV4dDsKKworICBpbmZvZihkYXRhLCAiJXMiLCBsaW5lKTsKK30KKyNlbHNlCisjZW5kaWYKKworc3RhdGljIEN1cmxfcmVjdiBwb2xhcnNzbF9yZWN2Oworc3RhdGljIEN1cmxfc2VuZCBwb2xhcnNzbF9zZW5kOworCisvKgorICogVGhpcyBmdW5jdGlvbiBsb2FkcyBhbGwgdGhlIGNsaWVudC9DQSBjZXJ0aWZpY2F0ZXMgYW5kIENSTHMuIFNldHVwIHRoZSBUTFMKKyAqIGxheWVyIGFuZCBkbyBhbGwgbmVjZXNzYXJ5IG1hZ2ljLgorICovCitDVVJMY29kZQorQ3VybF9wb2xhcnNzbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGJvb2wgc25pID0gVFJVRTsgLyogZGVmYXVsdCBpcyBTTkkgZW5hYmxlZCAqLworICBpbnQgcmV0ID0gLTE7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgc3RydWN0IGluNl9hZGRyIGFkZHI7CisjZWxzZQorICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworI2VuZGlmCisgIHZvaWQgKm9sZF9zZXNzaW9uID0gTlVMTDsKKyAgc2l6ZV90IG9sZF9zZXNzaW9uX3NpemUgPSAwOworICBjaGFyIGJ1ZmZlclsxMDI0XTsKKworICBpZihjb25uLT5zc2xbc29ja2luZGV4XS5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgLyogUG9sYXJTU0wgb25seSBzdXBwb3J0cyBTU0x2MyBhbmQgVExTdjEgKi8KKyAgaWYoZGF0YS0+c2V0LnNzbC52ZXJzaW9uID09IENVUkxfU1NMVkVSU0lPTl9TU0x2MikgeworICAgIGZhaWxmKGRhdGEsICJQb2xhclNTTCBkb2VzIG5vdCBzdXBwb3J0IFNTTHYyIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICB9CisgIGVsc2UgaWYoZGF0YS0+c2V0LnNzbC52ZXJzaW9uID09IENVUkxfU1NMVkVSU0lPTl9TU0x2MykKKyAgICBzbmkgPSBGQUxTRTsgLyogU1NMdjMgaGFzIG5vIFNOSSAqLworCisgIGhhdmVnZV9pbml0KCZjb25uLT5zc2xbc29ja2luZGV4XS5ocyk7CisKKyAgLyogTG9hZCB0aGUgdHJ1c3RlZCBDQSAqLworICBtZW1zZXQoJmNvbm4tPnNzbFtzb2NraW5kZXhdLmNhY2VydCwgMCwgc2l6ZW9mKHg1MDlfY2VydCkpOworCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdKSB7CisgICAgcmV0ID0geDUwOXBhcnNlX2NydGZpbGUoJmNvbm4tPnNzbFtzb2NraW5kZXhdLmNhY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXSk7CisKKyAgICBpZihyZXQpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJFcnJvciByZWFkaW5nIGNhIGNlcnQgZmlsZSAlczogLTB4JTA0WCIsCisgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXSwgcmV0KTsKKworICAgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKQorICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworICAgIH0KKyAgfQorCisgIC8qIExvYWQgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSAqLworICBtZW1zZXQoJmNvbm4tPnNzbFtzb2NraW5kZXhdLmNsaWNlcnQsIDAsIHNpemVvZih4NTA5X2NlcnQpKTsKKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSkgeworICAgIHJldCA9IHg1MDlwYXJzZV9jcnRmaWxlKCZjb25uLT5zc2xbc29ja2luZGV4XS5jbGljZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdKTsKKworICAgIGlmKHJldCkgeworICAgICAgZmFpbGYoZGF0YSwgIkVycm9yIHJlYWRpbmcgY2xpZW50IGNlcnQgZmlsZSAlczogLTB4JTA0WCIsCisgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSwgLXJldCk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgIH0KKyAgfQorCisgIC8qIExvYWQgdGhlIGNsaWVudCBwcml2YXRlIGtleSAqLworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19LRVldKSB7CisgICAgcmV0ID0geDUwOXBhcnNlX2tleWZpbGUoJmNvbm4tPnNzbFtzb2NraW5kZXhdLnJzYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9QQVNTV0RdKTsKKworICAgIGlmKHJldCkgeworICAgICAgZmFpbGYoZGF0YSwgIkVycm9yIHJlYWRpbmcgcHJpdmF0ZSBrZXkgJXM6IC0weCUwNFgiLAorICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSwgLXJldCk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgIH0KKyAgfQorCisgIC8qIExvYWQgdGhlIENSTCAqLworICBtZW1zZXQoJmNvbm4tPnNzbFtzb2NraW5kZXhdLmNybCwgMCwgc2l6ZW9mKHg1MDlfY3JsKSk7CisKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVdKSB7CisgICAgcmV0ID0geDUwOXBhcnNlX2NybGZpbGUoJmNvbm4tPnNzbFtzb2NraW5kZXhdLmNybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV0pOworCisgICAgaWYocmV0KSB7CisgICAgICBmYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyBDUkwgZmlsZSAlczogLTB4JTA0WCIsCisgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV0sIC1yZXQpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DUkxfQkFERklMRTsKKyAgICB9CisgIH0KKworICBpbmZvZihkYXRhLCAiUG9sYXJTU0w6IENvbm5lY3RlZCB0byAlczolZFxuIiwKKyAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBjb25uLT5yZW1vdGVfcG9ydCk7CisKKyAgaGF2ZWdlX2luaXQoJmNvbm4tPnNzbFtzb2NraW5kZXhdLmhzKTsKKworICBpZihzc2xfaW5pdCgmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsKSkgeworICAgIGZhaWxmKGRhdGEsICJQb2xhclNTTDogc3NsX2luaXQgZmFpbGVkIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICB9CisKKyAgc3NsX3NldF9lbmRwb2ludCgmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsLCBTU0xfSVNfQ0xJRU5UKTsKKyAgc3NsX3NldF9hdXRobW9kZSgmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsLCBTU0xfVkVSSUZZX09QVElPTkFMKTsKKworICBzc2xfc2V0X3JuZygmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsLCBIQVZFR0VfUkFORE9NLAorICAgICAgICAgICAgICAmY29ubi0+c3NsW3NvY2tpbmRleF0uaHMpOworICBzc2xfc2V0X2JpbygmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsLAorICAgICAgICAgICAgICBuZXRfcmVjdiwgJmNvbm4tPnNvY2tbc29ja2luZGV4XSwKKyAgICAgICAgICAgICAgbmV0X3NlbmQsICZjb25uLT5zb2NrW3NvY2tpbmRleF0pOworCisKKyNpZiBQT0xBUlNTTF9WRVJTSU9OX05VTUJFUjwweDAxMDAwMDAwCisgIHNzbF9zZXRfY2lwaGVycygmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsLCBzc2xfZGVmYXVsdF9jaXBoZXJzKTsKKyNlbHNlCisgIHNzbF9zZXRfY2lwaGVyc3VpdGVzKCZjb25uLT5zc2xbc29ja2luZGV4XS5zc2wsIHNzbF9kZWZhdWx0X2NpcGhlcnN1aXRlcyk7CisjZW5kaWYKKyAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmb2xkX3Nlc3Npb24sICZvbGRfc2Vzc2lvbl9zaXplKSkgeworICAgIG1lbWNweSgmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NuLCBvbGRfc2Vzc2lvbiwgb2xkX3Nlc3Npb25fc2l6ZSk7CisgICAgaW5mb2YoZGF0YSwgIlBvbGFyU1NMIHJlLXVzaW5nIHNlc3Npb25cbiIpOworICB9CisKKyAgc3NsX3NldF9zZXNzaW9uKCZjb25uLT5zc2xbc29ja2luZGV4XS5zc2wsIDEsIDYwMCwKKyAgICAgICAgICAgICAgICAgICZjb25uLT5zc2xbc29ja2luZGV4XS5zc24pOworCisgIHNzbF9zZXRfY2FfY2hhaW4oJmNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbCwKKyAgICAgICAgICAgICAgICAgICAmY29ubi0+c3NsW3NvY2tpbmRleF0uY2FjZXJ0LAorICAgICAgICAgICAgICAgICAgICZjb25uLT5zc2xbc29ja2luZGV4XS5jcmwsCisgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lKTsKKworICBzc2xfc2V0X293bl9jZXJ0KCZjb25uLT5zc2xbc29ja2luZGV4XS5zc2wsCisgICAgICAgICAgICAgICAgICAgJmNvbm4tPnNzbFtzb2NraW5kZXhdLmNsaWNlcnQsICZjb25uLT5zc2xbc29ja2luZGV4XS5yc2EpOworCisgIGlmKCFDdXJsX2luZXRfcHRvbihBRl9JTkVULCBjb25uLT5ob3N0Lm5hbWUsICZhZGRyKSAmJgorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICFDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgY29ubi0+aG9zdC5uYW1lLCAmYWRkcikgJiYKKyNlbmRpZgorICAgICBzbmkgJiYgc3NsX3NldF9ob3N0bmFtZSgmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsLCBjb25uLT5ob3N0Lm5hbWUpKSB7CisgICAgIGluZm9mKGRhdGEsICJXQVJOSU5HOiBmYWlsZWQgdG8gY29uZmlndXJlICIKKyAgICAgICAgICAgICAgICAgInNlcnZlciBuYW1lIGluZGljYXRpb24gKFNOSSkgVExTIGV4dGVuc2lvblxuIik7CisgIH0KKworICBpbmZvZihkYXRhLCAiUG9sYXJTU0w6IHBlcmZvcm1pbmcgU1NML1RMUyBoYW5kc2hha2UuLi5cbiIpOworCisjaWZkZWYgUE9MQVJTU0xfREVCVUcKKyAgc3NsX3NldF9kYmcoJmNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbCwgcG9sYXJzc2xfZGVidWcsIGRhdGEpOworI2VuZGlmCisKKyAgZm9yKDs7KSB7CisgICAgaWYoIShyZXQgPSBzc2xfaGFuZHNoYWtlKCZjb25uLT5zc2xbc29ja2luZGV4XS5zc2wpKSkKKyAgICAgIGJyZWFrOworICAgIGVsc2UgaWYocmV0ICE9IFBPTEFSU1NMX0VSUl9ORVRfV0FOVF9SRUFEICYmCisgICAgICAgICAgICByZXQgIT0gUE9MQVJTU0xfRVJSX05FVF9XQU5UX1dSSVRFKSB7CisgICAgICBmYWlsZihkYXRhLCAic3NsX2hhbmRzaGFrZSByZXR1cm5lZCAtMHglMDRYIiwgLXJldCk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogd2FpdCBmb3IgZGF0YSBmcm9tIHNlcnZlci4uLiAqLworICAgICAgbG9uZyB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKKworICAgICAgaWYodGltZW91dF9tcyA8IDApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgIH0KKworICAgICAgc3dpdGNoKEN1cmxfc29ja2V0X3JlYWR5KGNvbm4tPnNvY2tbc29ja2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMX1NPQ0tFVF9CQUQsIHRpbWVvdXRfbXMpKSB7CisgICAgICBjYXNlIDA6CisgICAgICAgIGZhaWxmKGRhdGEsICJTU0wgaGFuZHNoYWtlIHRpbWVvdXQiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIENVUkxfQ1NFTEVDVF9JTjoKKyAgICAgICAgY29udGludWU7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpbmZvZihkYXRhLCAiUG9sYXJTU0w6IEhhbmRzaGFrZSBjb21wbGV0ZSwgY2lwaGVyIGlzICVzXG4iLAorI2lmIFBPTEFSU1NMX1ZFUlNJT05fTlVNQkVSPDB4MDEwMDAwMDAKKyAgICAgICAgc3NsX2dldF9jaXBoZXIoJmNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbCkKKyNlbGlmIFBPTEFSU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDEwMTAwMDAKKyAgICAgICAgc3NsX2dldF9jaXBoZXJzdWl0ZSgmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsKQorI2Vsc2UKKyAgICAgICAgc3NsX2dldF9jaXBoZXJzdWl0ZV9uYW1lKCZjb25uLT5zc2xbc29ja2luZGV4XS5zc2wpCisjZW5kaWYKKyAgICApOworCisgIHJldCA9IHNzbF9nZXRfdmVyaWZ5X3Jlc3VsdCgmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsKTsKKworICBpZihyZXQgJiYgZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgaWYocmV0ICYgQkFEQ0VSVF9FWFBJUkVEKQorICAgICAgZmFpbGYoZGF0YSwgIkNlcnQgdmVyaWZ5IGZhaWxlZDogQkFEQ0VSVF9FWFBJUkVEXG4iKTsKKworICAgIGlmKHJldCAmIEJBRENFUlRfUkVWT0tFRCkKKyAgICAgIGZhaWxmKGRhdGEsICJDZXJ0IHZlcmlmeSBmYWlsZWQ6IEJBRENFUlRfUkVWT0tFRCIpOworCisgICAgaWYocmV0ICYgQkFEQ0VSVF9DTl9NSVNNQVRDSCkKKyAgICAgIGZhaWxmKGRhdGEsICJDZXJ0IHZlcmlmeSBmYWlsZWQ6IEJBRENFUlRfQ05fTUlTTUFUQ0giKTsKKworICAgIGlmKHJldCAmIEJBRENFUlRfTk9UX1RSVVNURUQpCisgICAgICBmYWlsZihkYXRhLCAiQ2VydCB2ZXJpZnkgZmFpbGVkOiBCQURDRVJUX05PVF9UUlVTVEVEIik7CisKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVDsKKyAgfQorCisgIGlmKGNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbC5wZWVyX2NlcnQpIHsKKyAgICAvKiBJZiB0aGUgc2Vzc2lvbiB3YXMgcmVzdW1lZCwgdGhlcmUgd2lsbCBiZSBubyBwZWVyIGNlcnRzICovCisgICAgbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOworCisgICAgaWYoeDUwOXBhcnNlX2NlcnRfaW5mbyhidWZmZXIsIHNpemVvZihidWZmZXIpLCAoY2hhciAqKSIqICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5zc2xbc29ja2luZGV4XS5zc2wucGVlcl9jZXJ0KSAhPSAtMSkKKyAgICAgIGluZm9mKGRhdGEsICJEdW1waW5nIGNlcnQgaW5mbzpcbiVzXG4iLCBidWZmZXIpOworICB9CisKKyAgY29ubi0+c3NsW3NvY2tpbmRleF0uc3RhdGUgPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZTsKKyAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gcG9sYXJzc2xfcmVjdjsKKyAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gcG9sYXJzc2xfc2VuZDsKKworICAvKiBTYXZlIHRoZSBjdXJyZW50IHNlc3Npb24gZGF0YSBmb3IgcG9zc2libGUgcmUtdXNlICovCisgIHsKKyAgICB2b2lkICpuZXdfc2Vzc2lvbiA9IG1hbGxvYyhzaXplb2YoY29ubi0+c3NsW3NvY2tpbmRleF0uc3NuKSk7CisKKyAgICBpZihuZXdfc2Vzc2lvbikgeworICAgICAgbWVtY3B5KG5ld19zZXNzaW9uLCAmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NuLAorICAgICAgICAgICAgIHNpemVvZihjb25uLT5zc2xbc29ja2luZGV4XS5zc24pKTsKKworICAgICAgaWYob2xkX3Nlc3Npb24pCisgICAgICAgIEN1cmxfc3NsX2RlbHNlc3Npb25pZChjb25uLCBvbGRfc2Vzc2lvbik7CisKKyAgICAgIHJldHVybiBDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgbmV3X3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjb25uLT5zc2xbc29ja2luZGV4XS5zc24pKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBvbGFyc3NsX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKK3sKKyAgaW50IHJldCA9IC0xOworCisgIHJldCA9IHNzbF93cml0ZSgmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsLAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKiltZW0sIGxlbik7CisKKyAgaWYocmV0IDwgMCkgeworICAgICpjdXJsY29kZSA9IChyZXQgPT0gUE9MQVJTU0xfRVJSX05FVF9XQU5UX1dSSVRFKSA/CisgICAgICBDVVJMRV9BR0FJTiA6IENVUkxFX1NFTkRfRVJST1I7CisgICAgcmV0ID0gLTE7CisgIH0KKworICByZXR1cm4gcmV0OworfQorCit2b2lkIEN1cmxfcG9sYXJzc2xfY2xvc2VfYWxsKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICAodm9pZClkYXRhOworfQorCit2b2lkIEN1cmxfcG9sYXJzc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICByc2FfZnJlZSgmY29ubi0+c3NsW3NvY2tpbmRleF0ucnNhKTsKKyAgeDUwOV9mcmVlKCZjb25uLT5zc2xbc29ja2luZGV4XS5jbGljZXJ0KTsKKyAgeDUwOV9mcmVlKCZjb25uLT5zc2xbc29ja2luZGV4XS5jYWNlcnQpOworICB4NTA5X2NybF9mcmVlKCZjb25uLT5zc2xbc29ja2luZGV4XS5jcmwpOworICBzc2xfZnJlZSgmY29ubi0+c3NsW3NvY2tpbmRleF0uc3NsKTsKK30KKworc3RhdGljIHNzaXplX3QgcG9sYXJzc2xfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKK3sKKyAgaW50IHJldCA9IC0xOworICBzc2l6ZV90IGxlbiA9IC0xOworCisgIG1lbXNldChidWYsIDAsIGJ1ZmZlcnNpemUpOworICByZXQgPSBzc2xfcmVhZCgmY29ubi0+c3NsW251bV0uc3NsLCAodW5zaWduZWQgY2hhciAqKWJ1ZiwgYnVmZmVyc2l6ZSk7CisKKyAgaWYocmV0IDw9IDApIHsKKyAgICBpZihyZXQgPT0gUE9MQVJTU0xfRVJSX1NTTF9QRUVSX0NMT1NFX05PVElGWSkKKyAgICAgIHJldHVybiAwOworCisgICAgKmN1cmxjb2RlID0gKHJldCA9PSBQT0xBUlNTTF9FUlJfTkVUX1dBTlRfUkVBRCkgPworICAgICAgQ1VSTEVfQUdBSU4gOiBDVVJMRV9SRUNWX0VSUk9SOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGxlbiA9IHJldDsKKworICByZXR1cm4gbGVuOworfQorCit2b2lkIEN1cmxfcG9sYXJzc2xfc2Vzc2lvbl9mcmVlKHZvaWQgKnB0cikKK3sKKyAgZnJlZShwdHIpOworfQorCitzaXplX3QgQ3VybF9wb2xhcnNzbF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisgIHJldHVybiBzbnByaW50ZihidWZmZXIsIHNpemUsICJQb2xhclNTTCIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9wb2xhcnNzbC5oIGIvY3VybC03LjI1LjAvbGliL3BvbGFyc3NsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmNjNhZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9wb2xhcnNzbC5oCkBAIC0wLDAgKzEsNTcgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfUE9MQVJTU0xfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9QT0xBUlNTTF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEhvaS1IbyBDaGFuLCA8aG9paG8uY2hhbkBnbWFpbC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfUE9MQVJTU0wKKworQ1VSTGNvZGUgQ3VybF9wb2xhcnNzbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCk7CisKKy8qIHRlbGwgUG9sYXJTU0wgdG8gY2xvc2UgZG93biBhbGwgb3BlbiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29ubmVjdGlvbnMgKGFuZAorICAgdGh1cyBzZXNzaW9uIElEIGNhY2hpbmcgZXRjKSAqLwordm9pZCBDdXJsX3BvbGFyc3NsX2Nsb3NlX2FsbChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisKKyAvKiBjbG9zZSBhIFNTTCBjb25uZWN0aW9uICovCit2b2lkIEN1cmxfcG9sYXJzc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KTsKKwordm9pZCBDdXJsX3BvbGFyc3NsX3Nlc3Npb25fZnJlZSh2b2lkICpwdHIpOworc2l6ZV90IEN1cmxfcG9sYXJzc2xfdmVyc2lvbihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKK2ludCBDdXJsX3BvbGFyc3NsX3NodXRkb3duKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCk7CisKKy8qIEFQSSBzZXR1cCBmb3IgUG9sYXJTU0wgKi8KKyNkZWZpbmUgY3VybHNzbF9pbml0KCkgKDEpCisjZGVmaW5lIGN1cmxzc2xfY2xlYW51cCgpIEN1cmxfbm9wX3N0bXQKKyNkZWZpbmUgY3VybHNzbF9jb25uZWN0IEN1cmxfcG9sYXJzc2xfY29ubmVjdAorI2RlZmluZSBjdXJsc3NsX3Nlc3Npb25fZnJlZSh4KSAgQ3VybF9wb2xhcnNzbF9zZXNzaW9uX2ZyZWUoeCkKKyNkZWZpbmUgY3VybHNzbF9jbG9zZV9hbGwgQ3VybF9wb2xhcnNzbF9jbG9zZV9hbGwKKyNkZWZpbmUgY3VybHNzbF9jbG9zZSBDdXJsX3BvbGFyc3NsX2Nsb3NlCisjZGVmaW5lIGN1cmxzc2xfc2h1dGRvd24oeCx5KSAwCisjZGVmaW5lIGN1cmxzc2xfc2V0X2VuZ2luZSh4LHkpICh4PXgsIHk9eSwgQ1VSTEVfTk9UX0JVSUxUX0lOKQorI2RlZmluZSBjdXJsc3NsX3NldF9lbmdpbmVfZGVmYXVsdCh4KSAoeD14LCBDVVJMRV9OT1RfQlVJTFRfSU4pCisjZGVmaW5lIGN1cmxzc2xfZW5naW5lc19saXN0KHgpICh4PXgsIChzdHJ1Y3QgY3VybF9zbGlzdCAqKU5VTEwpCisjZGVmaW5lIGN1cmxzc2xfdmVyc2lvbiBDdXJsX3BvbGFyc3NsX3ZlcnNpb24KKyNkZWZpbmUgY3VybHNzbF9jaGVja19jeG4oeCkgKHg9eCwgLTEpCisjZGVmaW5lIGN1cmxzc2xfZGF0YV9wZW5kaW5nKHgseSkgKHg9eCwgeT15LCAwKQorCisjZW5kaWYgLyogVVNFX1BPTEFSU1NMICovCisjZW5kaWYgLyogSEVBREVSX0NVUkxfUE9MQVJTU0xfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3BvcDMuYyBiL2N1cmwtNy4yNS4wL2xpYi9wb3AzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkZGJhMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9wb3AzLmMKQEAgLTAsMCArMSwxMTI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogUkZDMTkzOSBQT1AzIHByb3RvY29sCisgKiBSRkMyMzg0IFBPUCBVUkwgU2NoZW1lCisgKiBSRkMyNTk1IFVzaW5nIFRMUyB3aXRoIElNQVAsIFBPUDMgYW5kIEFDQVAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUE9QMworCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VVFNOQU1FX0gKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIF9fVk1TCisjaW5jbHVkZSA8aW4uaD4KKyNpbmNsdWRlIDxpbmV0Lmg+CisjZW5kaWYKKworI2lmIChkZWZpbmVkKE5FVFdBUkUpICYmIGRlZmluZWQoX19OT1ZFTExfTElCQ19fKSkKKyN1bmRlZiBpbl9hZGRyX3QKKyNkZWZpbmUgaW5fYWRkcl90IHVuc2lnbmVkIGxvbmcKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaWYyaXAuaCIKKyNpbmNsdWRlICJob3N0aXAuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInRyYW5zZmVyLmgiCisjaW5jbHVkZSAiZXNjYXBlLmgiCisjaW5jbHVkZSAiaHR0cC5oIiAvKiBmb3IgSFRUUCBwcm94eSB0dW5uZWwgc3R1ZmYgKi8KKyNpbmNsdWRlICJzb2Nrcy5oIgorI2luY2x1ZGUgInBvcDMuaCIKKworI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgorI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic3NsZ2VuLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInN0cmVycm9yLmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qIExvY2FsIEFQSSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBDVVJMY29kZSBwb3AzX3BhcnNlX3VybF9wYXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CitzdGF0aWMgQ1VSTGNvZGUgcG9wM19yZWd1bGFyX3RyYW5zZmVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgcG9wM19kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIHBvcDNfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitzdGF0aWMgQ1VSTGNvZGUgcG9wM19jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgcG9wM19kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKK3N0YXRpYyBDVVJMY29kZSBwb3AzX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIGludCBwb3AzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworc3RhdGljIENVUkxjb2RlIHBvcDNfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKK3N0YXRpYyBDVVJMY29kZSBwb3AzX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICogY29ubik7CisKKy8qCisgKiBQT1AzIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfcG9wMyA9IHsKKyAgIlBPUDMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBwb3AzX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBwb3AzX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgcG9wM19kb25lLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgcG9wM19jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgcG9wM19tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgcG9wM19kb2luZywgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIHBvcDNfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIHBvcDNfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHBvcDNfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9QT1AzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1BPUDMsICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfQ0xPU0VBQ1RJT04gfCBQUk9UT1BUX05PVVJMUVVFUlkgLyogZmxhZ3MgKi8KK307CisKKworI2lmZGVmIFVTRV9TU0wKKy8qCisgKiBQT1AzUyBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3BvcDNzID0geworICAiUE9QM1MiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIHBvcDNfc2V0dXBfY29ubmVjdGlvbiwgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIHBvcDNfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBwb3AzX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBwb3AzX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBwb3AzX211bHRpX3N0YXRlbWFjaCwgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBwb3AzX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgcG9wM19nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgcG9wM19nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgcG9wM19kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBQT1JUX1BPUDNTLCAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fUE9QMyB8IENVUkxQUk9UT19QT1AzUywgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9DTE9TRUFDVElPTiB8IFBST1RPUFRfU1NMCisgIHwgUFJPVE9QVF9OT1VSTFFVRVJZICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKyNlbmRpZgorCisjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCisvKgorICogSFRUUC1wcm94eWVkIFBPUDMgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfcG9wM19wcm94eSA9IHsKKyAgIlBPUDMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIEN1cmxfaHR0cCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgQ3VybF9odHRwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBQT1JUX1BPUDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX0hUVFAsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCit9OworCisKKyNpZmRlZiBVU0VfU1NMCisvKgorICogSFRUUC1wcm94eWVkIFBPUDNTIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3BvcDNzX3Byb3h5ID0geworICAiUE9QM1MiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgQ3VybF9odHRwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBDdXJsX2h0dHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFBPUlRfUE9QM1MsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fSFRUUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisjZW5kaWYKKyNlbmRpZgorCisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGZvciBhIHBvcDMgc3RhdHVzIGNvZGUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBnaXZlbgorICAgc3RyaW5nICovCitzdGF0aWMgaW50IHBvcDNfZW5kb2ZyZXNwKHN0cnVjdCBwaW5ncG9uZyAqcHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcmVzcCkKK3sKKyAgY2hhciAqbGluZSA9IHBwLT5saW5lc3RhcnRfcmVzcDsKKyAgc2l6ZV90IGxlbiA9IHBwLT5ucmVhZF9yZXNwOworCisgIGlmKCgobGVuID49IDMpICYmICFtZW1jbXAoIitPSyIsIGxpbmUsIDMpKSB8fAorICAgICAoKGxlbiA+PSA0KSAmJiAhbWVtY21wKCItRVJSIiwgbGluZSwgNCkpKSB7CisgICAgKnJlc3A9bGluZVsxXTsgLyogTyBvciBFICovCisgICAgcmV0dXJuIFRSVUU7CisgIH0KKworICByZXR1cm4gRkFMU0U7IC8qIG5vdGhpbmcgZm9yIHVzICovCit9CisKKy8qIFRoaXMgaXMgdGhlIE9OTFkgd2F5IHRvIGNoYW5nZSBQT1AzIHN0YXRlISAqLworc3RhdGljIHZvaWQgc3RhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgcG9wM3N0YXRlIG5ld3N0YXRlKQoreworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgLyogZm9yIGRlYnVnIHB1cnBvc2VzICovCisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZXNbXT17CisgICAgIlNUT1AiLAorICAgICJTRVJWRVJHUkVFVCIsCisgICAgIlVTRVIiLAorICAgICJQQVNTIiwKKyAgICAiU1RBUlRUTFMiLAorICAgICJMSVNUIiwKKyAgICAiTElTVF9TSU5HTEUiLAorICAgICJSRVRSIiwKKyAgICAiUVVJVCIsCisgICAgLyogTEFTVCAqLworICB9OworI2VuZGlmCisgIHN0cnVjdCBwb3AzX2Nvbm4gKnBvcDNjID0gJmNvbm4tPnByb3RvLnBvcDNjOworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgaWYocG9wM2MtPnN0YXRlICE9IG5ld3N0YXRlKQorICAgIGluZm9mKGNvbm4tPmRhdGEsICJQT1AzICVwIHN0YXRlIGNoYW5nZSBmcm9tICVzIHRvICVzXG4iLAorICAgICAgICAgIHBvcDNjLCBuYW1lc1twb3AzYy0+c3RhdGVdLCBuYW1lc1tuZXdzdGF0ZV0pOworI2VuZGlmCisgIHBvcDNjLT5zdGF0ZSA9IG5ld3N0YXRlOworfQorCitzdGF0aWMgQ1VSTGNvZGUgcG9wM19zdGF0ZV91c2VyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3QgRlRQICpwb3AzID0gY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8ucG9wMzsKKworICAvKiBzZW5kIFVTRVIgKi8KKyAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8ucG9wM2MucHAsICJVU0VSICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwb3AzLT51c2VyP3BvcDMtPnVzZXI6IiIpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBzdGF0ZShjb25uLCBQT1AzX1VTRVIpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyogRm9yIHRoZSBQT1AzICJwcm90b2NvbCBjb25uZWN0IiBhbmQgImRvaW5nIiBwaGFzZXMgb25seSAqLworc3RhdGljIGludCBwb3AzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCit7CisgIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLnBvcDNjLnBwLCBzb2NrcywgbnVtc29ja3MpOworfQorCisjaWZkZWYgVVNFX1NTTAorc3RhdGljIHZvaWQgcG9wM190b19wb3AzcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGNvbm4tPmhhbmRsZXIgPSAmQ3VybF9oYW5kbGVyX3BvcDNzOworfQorI2Vsc2UKKyNkZWZpbmUgcG9wM190b19wb3Azcyh4KSBDdXJsX25vcF9zdG10CisjZW5kaWYKKworLyogZm9yIFNUQVJUVExTIHJlc3BvbnNlcyAqLworc3RhdGljIENVUkxjb2RlIHBvcDNfc3RhdGVfc3RhcnR0bHNfcmVzcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3AzY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wM3N0YXRlIGluc3RhdGUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KKworICBpZihwb3AzY29kZSAhPSAnTycpIHsKKyAgICBpZihkYXRhLT5zZXQudXNlX3NzbCAhPSBDVVJMVVNFU1NMX1RSWSkgeworICAgICAgZmFpbGYoZGF0YSwgIlNUQVJUVExTIGRlbmllZC4gJWMiLCBwb3AzY29kZSk7CisgICAgICByZXN1bHQgPSBDVVJMRV9VU0VfU1NMX0ZBSUxFRDsKKyAgICAgIHN0YXRlKGNvbm4sIFBPUDNfU1RPUCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJlc3VsdCA9IHBvcDNfc3RhdGVfdXNlcihjb25uKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBDdXJsX3NzbF9jb25uZWN0IGlzIEJMT0NLSU5HICovCisgICAgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdChjb25uLCBGSVJTVFNPQ0tFVCk7CisgICAgaWYoQ1VSTEVfT0sgPT0gcmVzdWx0KSB7CisgICAgICBwb3AzX3RvX3BvcDNzKGNvbm4pOworICAgICAgcmVzdWx0ID0gcG9wM19zdGF0ZV91c2VyKGNvbm4pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN0YXRlKGNvbm4sIFBPUDNfU1RPUCk7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGZvciBVU0VSIHJlc3BvbnNlcyAqLworc3RhdGljIENVUkxjb2RlIHBvcDNfc3RhdGVfdXNlcl9yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9wM2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wM3N0YXRlIGluc3RhdGUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBGVFAgKnBvcDMgPSBkYXRhLT5zdGF0ZS5wcm90by5wb3AzOworCisgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KKworICBpZihwb3AzY29kZSAhPSAnTycpIHsKKyAgICBmYWlsZihkYXRhLCAiQWNjZXNzIGRlbmllZC4gJWMiLCBwb3AzY29kZSk7CisgICAgcmVzdWx0ID0gQ1VSTEVfTE9HSU5fREVOSUVEOworICB9CisgIGVsc2UKKyAgICAvKiBzZW5kIFBBU1MgKi8KKyAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5wb3AzYy5wcCwgIlBBU1MgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wMy0+cGFzc3dkP3BvcDMtPnBhc3N3ZDoiIik7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIHN0YXRlKGNvbm4sIFBPUDNfUEFTUyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGZvciBQQVNTIHJlc3BvbnNlcyAqLworc3RhdGljIENVUkxjb2RlIHBvcDNfc3RhdGVfcGFzc19yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9wM2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wM3N0YXRlIGluc3RhdGUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KKworICBpZihwb3AzY29kZSAhPSAnTycpIHsKKyAgICBmYWlsZihkYXRhLCAiQWNjZXNzIGRlbmllZC4gJWMiLCBwb3AzY29kZSk7CisgICAgcmVzdWx0ID0gQ1VSTEVfTE9HSU5fREVOSUVEOworICB9CisKKyAgc3RhdGUoY29ubiwgUE9QM19TVE9QKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogZm9yIHRoZSByZXRyIHJlc3BvbnNlICovCitzdGF0aWMgQ1VSTGNvZGUgcG9wM19zdGF0ZV9yZXRyX3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3AzY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Azc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IEZUUCAqcG9wMyA9IGRhdGEtPnN0YXRlLnByb3RvLnBvcDM7CisgIHN0cnVjdCBwb3AzX2Nvbm4gKnBvcDNjID0gJmNvbm4tPnByb3RvLnBvcDNjOworICBzdHJ1Y3QgcGluZ3BvbmcgKnBwID0gJnBvcDNjLT5wcDsKKworICAodm9pZClpbnN0YXRlOyAvKiBubyB1c2UgZm9yIHRoaXMgeWV0ICovCisKKyAgaWYoJ08nICE9IHBvcDNjb2RlKSB7CisgICAgc3RhdGUoY29ubiwgUE9QM19TVE9QKTsKKyAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgfQorCisgIC8qIFBPUDMgZG93bmxvYWQgKi8KKyAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCBGSVJTVFNPQ0tFVCwgLTEsIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgIHBvcDMtPmJ5dGVjb3VudHAsIC0xLCBOVUxMKTsgLyogbm8gdXBsb2FkIGhlcmUgKi8KKworICBpZihwcC0+Y2FjaGUpIHsKKyAgICAvKiBBdCB0aGlzIHBvaW50IHRoZXJlIGlzIGEgYnVuY2ggb2YgZGF0YSBpbiB0aGUgaGVhZGVyICJjYWNoZSIgdGhhdCBpcworICAgICAgIGFjdHVhbGx5IGJvZHkgY29udGVudCwgc2VuZCBpdCBhcyBib2R5IGFuZCB0aGVuIHNraXAgaXQuIERvIG5vdGUKKyAgICAgICB0aGF0IHRoZXJlIG1heSBldmVuIGJlIGFkZGl0aW9uYWwgImhlYWRlcnMiIGFmdGVyIHRoZSBib2R5LiAqLworCisgICAgLyogd2UgbWF5IGdldCB0aGUgRU9CIGFscmVhZHkgaGVyZSEgKi8KKyAgICByZXN1bHQgPSBDdXJsX3BvcDNfd3JpdGUoY29ubiwgcHAtPmNhY2hlLCBwcC0+Y2FjaGVfc2l6ZSk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8qIGNhY2hlIGlzIGRyYWluZWQgKi8KKyAgICBmcmVlKHBwLT5jYWNoZSk7CisgICAgcHAtPmNhY2hlID0gTlVMTDsKKyAgICBwcC0+Y2FjaGVfc2l6ZSA9IDA7CisgIH0KKworICBzdGF0ZShjb25uLCBQT1AzX1NUT1ApOworICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qIGZvciB0aGUgbGlzdCByZXNwb25zZSAqLworc3RhdGljIENVUkxjb2RlIHBvcDNfc3RhdGVfbGlzdF9yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9wM2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wM3N0YXRlIGluc3RhdGUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBGVFAgKnBvcDMgPSBkYXRhLT5zdGF0ZS5wcm90by5wb3AzOworICBzdHJ1Y3QgcG9wM19jb25uICpwb3AzYyA9ICZjb25uLT5wcm90by5wb3AzYzsKKyAgc3RydWN0IHBpbmdwb25nICpwcCA9ICZwb3AzYy0+cHA7CisKKyAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLworCisgIGlmKCdPJyAhPSBwb3AzY29kZSkgeworICAgIHN0YXRlKGNvbm4sIFBPUDNfU1RPUCk7CisgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CisgIH0KKworICAvKiBUaGlzICdPSycgbGluZSBlbmRzIHdpdGggYSBDUiBMRiBwYWlyIHdoaWNoIGlzIHRoZSB0d28gZmlyc3QgYnl0ZXMgb2YgdGhlCisgICAgIEVPQiBzdHJpbmcgc28gY291bnQgdGhpcyBpcyB0d28gbWF0Y2hpbmcgYnl0ZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1ha2UKKyAgICAgdGhlIGNvZGUgZGV0ZWN0IHRoZSBFT0IgaWYgdGhlIG9ubHkgZGF0YSB0aGFuIGNvbWVzIG5vdyBpcyAlMmUgQ1IgTEYgbGlrZQorICAgICB3aGVuIHRoZXJlIGlzIG5vIGJvZHkgdG8gcmV0dXJuLiAqLworICBwb3AzYy0+ZW9iID0gMjsKKworICAvKiBCdXQgc2luY2UgdGhpcyBpbml0aWFsIENSIExGIHBhaXIgaXMgbm90IHBhcnQgb2YgdGhlIGFjdHVhbCBib2R5LCB3ZSBzZXQKKyAgICAgdGhlIHN0cmlwIGNvdW50ZXIgaGVyZSBzbyB0aGF0IHRoZXNlIGJ5dGVzIHdvbid0IGJlIGRlbGl2ZXJlZC4gKi8KKyAgcG9wM2MtPnN0cmlwID0gMjsKKworICAvKiBQT1AzIGRvd25sb2FkICovCisgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBGQUxTRSwgcG9wMy0+Ynl0ZWNvdW50cCwKKyAgICAgICAgICAgICAgICAgICAgICAtMSwgTlVMTCk7IC8qIG5vIHVwbG9hZCBoZXJlICovCisKKyAgaWYocHAtPmNhY2hlKSB7CisgICAgLyogY2FjaGUgaG9sZHMgdGhlIGVtYWlsIElEIGxpc3RpbmcgKi8KKworICAgIC8qIHdlIG1heSBnZXQgdGhlIEVPQiBhbHJlYWR5IGhlcmUhICovCisgICAgcmVzdWx0ID0gQ3VybF9wb3AzX3dyaXRlKGNvbm4sIHBwLT5jYWNoZSwgcHAtPmNhY2hlX3NpemUpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvKiBjYWNoZSBpcyBkcmFpbmVkICovCisgICAgZnJlZShwcC0+Y2FjaGUpOworICAgIHBwLT5jYWNoZSA9IE5VTEw7CisgICAgcHAtPmNhY2hlX3NpemUgPSAwOworICB9CisKKyAgc3RhdGUoY29ubiwgUE9QM19TVE9QKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogZm9yIExJU1QgcmVzcG9uc2Ugd2l0aCBhIGdpdmVuIG1lc3NhZ2UgKi8KK3N0YXRpYyBDVVJMY29kZSBwb3AzX3N0YXRlX2xpc3Rfc2luZ2xlX3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3AzY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Azc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLworCisgIGlmKHBvcDNjb2RlICE9ICdPJykgeworICAgIGZhaWxmKGRhdGEsICJJbnZhbGlkIG1lc3NhZ2UuICVjIiwgcG9wM2NvZGUpOworICAgIHJlc3VsdCA9IENVUkxFX1JFTU9URV9GSUxFX05PVF9GT1VORDsKKyAgfQorCisgIHN0YXRlKGNvbm4sIFBPUDNfU1RPUCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIHN0YXJ0IHRoZSBETyBwaGFzZSBmb3IgUkVUUiAqLworc3RhdGljIENVUkxjb2RlIHBvcDNfcmV0cihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgcG9wM19jb25uICpwb3AzYyA9ICZjb25uLT5wcm90by5wb3AzYzsKKworICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5wb3AzYy5wcCwgIlJFVFIgJXMiLCBwb3AzYy0+bWFpbGJveCk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIHN0YXRlKGNvbm4sIFBPUDNfUkVUUik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIHN0YXJ0IHRoZSBETyBwaGFzZSBmb3IgTElTVCAqLworc3RhdGljIENVUkxjb2RlIHBvcDNfbGlzdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgcG9wM19jb25uICpwb3AzYyA9ICZjb25uLT5wcm90by5wb3AzYzsKKworICBpZihwb3AzYy0+bWFpbGJveFswXSAhPSAnXDAnKQorICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnBvcDNjLnBwLCAiTElTVCAlcyIsIHBvcDNjLT5tYWlsYm94KTsKKyAgZWxzZQorICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnBvcDNjLnBwLCAiTElTVCIpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBpZihwb3AzYy0+bWFpbGJveFswXSAhPSAnXDAnKQorICAgIHN0YXRlKGNvbm4sIFBPUDNfTElTVF9TSU5HTEUpOworICBlbHNlCisgICAgc3RhdGUoY29ubiwgUE9QM19MSVNUKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIHBvcDNfc3RhdGVtYWNoX2FjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisgIGludCBwb3AzY29kZTsKKyAgc3RydWN0IHBvcDNfY29ubiAqcG9wM2MgPSAmY29ubi0+cHJvdG8ucG9wM2M7CisgIHN0cnVjdCBwaW5ncG9uZyAqcHAgPSAmcG9wM2MtPnBwOworICBzaXplX3QgbnJlYWQgPSAwOworCisgIGlmKHBwLT5zZW5kbGVmdCkKKyAgICByZXR1cm4gQ3VybF9wcF9mbHVzaHNlbmQocHApOworCisgIC8qIHdlIHJlYWQgYSBwaWVjZSBvZiByZXNwb25zZSAqLworICByZXN1bHQgPSBDdXJsX3BwX3JlYWRyZXNwKHNvY2ssIHBwLCAmcG9wM2NvZGUsICZucmVhZCk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIGlmKHBvcDNjb2RlKSB7CisgICAgLyogd2UgaGF2ZSBub3cgcmVjZWl2ZWQgYSBmdWxsIFBPUDMgc2VydmVyIHJlc3BvbnNlICovCisgICAgc3dpdGNoKHBvcDNjLT5zdGF0ZSkgeworICAgIGNhc2UgUE9QM19TRVJWRVJHUkVFVDoKKyAgICAgIGlmKHBvcDNjb2RlICE9ICdPJykgeworICAgICAgICBmYWlsZihkYXRhLCAiR290IHVuZXhwZWN0ZWQgcG9wMy1zZXJ2ZXIgcmVzcG9uc2UiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFk7CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC51c2Vfc3NsICYmICFjb25uLT5zc2xbRklSU1RTT0NLRVRdLnVzZSkgeworICAgICAgICAvKiBXZSBkb24ndCBoYXZlIGEgU1NML1RMUyBjb25uZWN0aW9uIHlldCwgYnV0IFNTTCBpcyByZXF1ZXN0ZWQuIFN3aXRjaAorICAgICAgICAgICB0byBUTFMgY29ubmVjdGlvbiBub3cgKi8KKyAgICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmcG9wM2MtPnBwLCAiU1RMUyIpOworICAgICAgICBzdGF0ZShjb25uLCBQT1AzX1NUQVJUVExTKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gcG9wM19zdGF0ZV91c2VyKGNvbm4pOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBPUDNfVVNFUjoKKyAgICAgIHJlc3VsdCA9IHBvcDNfc3RhdGVfdXNlcl9yZXNwKGNvbm4sIHBvcDNjb2RlLCBwb3AzYy0+c3RhdGUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBPUDNfUEFTUzoKKyAgICAgIHJlc3VsdCA9IHBvcDNfc3RhdGVfcGFzc19yZXNwKGNvbm4sIHBvcDNjb2RlLCBwb3AzYy0+c3RhdGUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBPUDNfU1RBUlRUTFM6CisgICAgICByZXN1bHQgPSBwb3AzX3N0YXRlX3N0YXJ0dGxzX3Jlc3AoY29ubiwgcG9wM2NvZGUsIHBvcDNjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUE9QM19SRVRSOgorICAgICAgcmVzdWx0ID0gcG9wM19zdGF0ZV9yZXRyX3Jlc3AoY29ubiwgcG9wM2NvZGUsIHBvcDNjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUE9QM19MSVNUOgorICAgICAgcmVzdWx0ID0gcG9wM19zdGF0ZV9saXN0X3Jlc3AoY29ubiwgcG9wM2NvZGUsIHBvcDNjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUE9QM19MSVNUX1NJTkdMRToKKyAgICAgIHJlc3VsdCA9IHBvcDNfc3RhdGVfbGlzdF9zaW5nbGVfcmVzcChjb25uLCBwb3AzY29kZSwgcG9wM2MtPnN0YXRlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQT1AzX1FVSVQ6CisgICAgICAvKiBmYWxsdGhyb3VnaCwganVzdCBzdG9wISAqLworICAgIGRlZmF1bHQ6CisgICAgICAvKiBpbnRlcm5hbCBlcnJvciAqLworICAgICAgc3RhdGUoY29ubiwgUE9QM19TVE9QKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBkb25lIGZyb20gbXVsdGkuYyAqLworc3RhdGljIENVUkxjb2RlIHBvcDNfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgc3RydWN0IHBvcDNfY29ubiAqcG9wM2MgPSAmY29ubi0+cHJvdG8ucG9wM2M7CisgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfcHBfbXVsdGlfc3RhdGVtYWNoKCZwb3AzYy0+cHApOworCisgICpkb25lID0gKHBvcDNjLT5zdGF0ZSA9PSBQT1AzX1NUT1ApID8gVFJVRSA6IEZBTFNFOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBwb3AzX2Vhc3lfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IHBvcDNfY29ubiAqcG9wM2MgPSAmY29ubi0+cHJvdG8ucG9wM2M7CisgIHN0cnVjdCBwaW5ncG9uZyAqcHAgPSAmcG9wM2MtPnBwOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKworICB3aGlsZShwb3AzYy0+c3RhdGUgIT0gUE9QM19TVE9QKSB7CisgICAgcmVzdWx0ID0gQ3VybF9wcF9lYXN5X3N0YXRlbWFjaChwcCk7CisgICAgaWYocmVzdWx0KQorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIHN0cnVjdCBQT1AzIGZvciB0aGUgY3VycmVudCBTZXNzaW9uSGFuZGxlLiAgSWYKKyAqIG5lZWQgYmUuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBwb3AzX2luaXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBGVFAgKnBvcDMgPSBkYXRhLT5zdGF0ZS5wcm90by5wb3AzOworICBpZighcG9wMykgeworICAgIHBvcDMgPSBkYXRhLT5zdGF0ZS5wcm90by5wb3AzID0gY2FsbG9jKHNpemVvZihzdHJ1Y3QgRlRQKSwgMSk7CisgICAgaWYoIXBvcDMpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIC8qIGdldCBzb21lIGluaXRpYWwgZGF0YSBpbnRvIHRoZSBwb3AzIHN0cnVjdCAqLworICBwb3AzLT5ieXRlY291bnRwID0gJmRhdGEtPnJlcS5ieXRlY291bnQ7CisKKyAgLyogTm8gbmVlZCB0byBkdXBsaWNhdGUgdXNlcitwYXNzd29yZCwgdGhlIGNvbm5lY3RkYXRhIHN0cnVjdCB3b24ndCBjaGFuZ2UKKyAgICAgZHVyaW5nIGEgc2Vzc2lvbiwgYnV0IHdlIHJlLWluaXQgdGhlbSBoZXJlIHNpbmNlIG9uIHN1YnNlcXVlbnQgaW5pdHMKKyAgICAgc2luY2UgdGhlIGNvbm4gc3RydWN0IG1heSBoYXZlIGNoYW5nZWQgb3IgYmVlbiByZXBsYWNlZC4KKyAgKi8KKyAgcG9wMy0+dXNlciA9IGNvbm4tPnVzZXI7CisgIHBvcDMtPnBhc3N3ZCA9IGNvbm4tPnBhc3N3ZDsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBwb3AzX2Nvbm5lY3QoKSBzaG91bGQgZG8gZXZlcnl0aGluZyB0aGF0IGlzIHRvIGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mCisgKiB0aGUgY29ubmVjdGlvbiBwaGFzZS4KKyAqCisgKiBUaGUgdmFyaWFibGUgJ2RvbmUnIHBvaW50cyB0byB3aWxsIGJlIFRSVUUgaWYgdGhlIHByb3RvY29sLWxheWVyIGNvbm5lY3QKKyAqIHBoYXNlIGlzIGRvbmUgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIG9yIEZBTFNFIGlzIG5vdC4gV2hlbiBjYWxsZWQgYXMKKyAqIGEgcGFydCBvZiB0aGUgZWFzeSBpbnRlcmZhY2UsIGl0IHdpbGwgYWx3YXlzIGJlIFRSVUUuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBwb3AzX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkgLyogc2VlIGRlc2NyaXB0aW9uIGFib3ZlICovCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgc3RydWN0IHBvcDNfY29ubiAqcG9wM2MgPSAmY29ubi0+cHJvdG8ucG9wM2M7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisgIHN0cnVjdCBwaW5ncG9uZyAqcHAgPSAmcG9wM2MtPnBwOworCisgICpkb25lID0gRkFMU0U7IC8qIGRlZmF1bHQgdG8gbm90IGRvbmUgeWV0ICovCisKKyAgLyogSWYgdGhlcmUgYWxyZWFkeSBpcyBhIHByb3RvY29sLXNwZWNpZmljIHN0cnVjdCBhbGxvY2F0ZWQgZm9yIHRoaXMKKyAgICAgc2Vzc2lvbmhhbmRsZSwgZGVhbCB3aXRoIGl0ICovCisgIEN1cmxfcmVzZXRfcmVxcHJvdG8oY29ubik7CisKKyAgcmVzdWx0ID0gcG9wM19pbml0KGNvbm4pOworICBpZihDVVJMRV9PSyAhPSByZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBXZSBhbHdheXMgc3VwcG9ydCBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zIG9uIHBvcDMgKi8KKyAgY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOworCisgIHBwLT5yZXNwb25zZV90aW1lID0gUkVTUF9USU1FT1VUOyAvKiBzZXQgZGVmYXVsdCByZXNwb25zZSB0aW1lLW91dCAqLworICBwcC0+c3RhdGVtYWNoX2FjdCA9IHBvcDNfc3RhdGVtYWNoX2FjdDsKKyAgcHAtPmVuZG9mcmVzcCA9IHBvcDNfZW5kb2ZyZXNwOworICBwcC0+Y29ubiA9IGNvbm47CisKKyAgaWYoY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCkgeworICAgIC8qIEJMT0NLSU5HICovCisgICAgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdChjb25uLCBGSVJTVFNPQ0tFVCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIEN1cmxfcHBfaW5pdChwcCk7IC8qIGluaXQgdGhlIHJlc3BvbnNlIHJlYWRlciBzdHVmZiAqLworCisgIC8qIFdoZW4gd2UgY29ubmVjdCwgd2Ugc3RhcnQgaW4gdGhlIHN0YXRlIHdoZXJlIHdlIGF3YWl0IHRoZSBzZXJ2ZXIgZ3JlZXQKKyAgICAgcmVzcG9uc2UgKi8KKyAgc3RhdGUoY29ubiwgUE9QM19TRVJWRVJHUkVFVCk7CisKKyAgaWYoZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgPT0gQ3VybF9pZl9tdWx0aSkKKyAgICByZXN1bHQgPSBwb3AzX211bHRpX3N0YXRlbWFjaChjb25uLCBkb25lKTsKKyAgZWxzZSB7CisgICAgcmVzdWx0ID0gcG9wM19lYXN5X3N0YXRlbWFjaChjb25uKTsKKyAgICBpZighcmVzdWx0KQorICAgICAgKmRvbmUgPSBUUlVFOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcG9wM19kb25lKCkKKyAqCisgKiBUaGUgRE9ORSBmdW5jdGlvbi4gVGhpcyBkb2VzIHdoYXQgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciBhIHNpbmdsZSBETyBoYXMKKyAqIHBlcmZvcm1lZC4KKyAqCisgKiBJbnB1dCBhcmd1bWVudCBpcyBhbHJlYWR5IGNoZWNrZWQgZm9yIHZhbGlkaXR5LgorICovCitzdGF0aWMgQ1VSTGNvZGUgcG9wM19kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgQ1VSTGNvZGUgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW1hdHVyZSkKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgRlRQICpwb3AzID0gZGF0YS0+c3RhdGUucHJvdG8ucG9wMzsKKyAgc3RydWN0IHBvcDNfY29ubiAqcG9wM2MgPSAmY29ubi0+cHJvdG8ucG9wM2M7CisgIENVUkxjb2RlIHJlc3VsdD1DVVJMRV9PSzsKKyAgKHZvaWQpcHJlbWF0dXJlOworCisgIGlmKCFwb3AzKQorICAgIC8qIFdoZW4gdGhlIGVhc3kgaGFuZGxlIGlzIHJlbW92ZWQgZnJvbSB0aGUgbXVsdGkgd2hpbGUgbGliY3VybCBpcyBzdGlsbAorICAgICAqIHRyeWluZyB0byByZXNvbHZlIHRoZSBob3N0IG5hbWUsIGl0IHNlZW1zIHRoYXQgdGhlIHBvcDMgc3RydWN0IGlzIG5vdAorICAgICAqIHlldCBpbml0aWFsaXplZCwgYnV0IHRoZSByZW1vdmFsIGFjdGlvbiBjYWxscyBDdXJsX2RvbmUoKSB3aGljaCBjYWxscworICAgICAqIHRoaXMgZnVuY3Rpb24uIFNvIHdlIHNpbXBseSByZXR1cm4gc3VjY2VzcyBpZiBubyBwb3AzIHBvaW50ZXIgaXMgc2V0LgorICAgICAqLworICAgIHJldHVybiBDVVJMRV9PSzsKKworICBpZihzdGF0dXMpIHsKKyAgICBjb25uLT5iaXRzLmNsb3NlID0gVFJVRTsgLyogbWFya2VkIGZvciBjbG9zdXJlICovCisgICAgcmVzdWx0ID0gc3RhdHVzOyAgICAgIC8qIHVzZSB0aGUgYWxyZWFkeSBzZXQgZXJyb3IgY29kZSAqLworICB9CisKKyAgQ3VybF9zYWZlZnJlZShwb3AzYy0+bWFpbGJveCk7CisgIHBvcDNjLT5tYWlsYm94ID0gTlVMTDsKKworICAvKiBDbGVhciB0aGUgdHJhbnNmZXIgbW9kZSBmb3IgdGhlIG5leHQgY29ubmVjdGlvbiAqLworICBwb3AzLT50cmFuc2ZlciA9IEZUUFRSQU5TRkVSX0JPRFk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcG9wM19wZXJmb3JtKCkKKyAqCisgKiBUaGlzIGlzIHRoZSBhY3R1YWwgRE8gZnVuY3Rpb24gZm9yIFBPUDMuIEdldCBhIGZpbGUvZGlyZWN0b3J5IGFjY29yZGluZyB0bworICogdGhlIG9wdGlvbnMgcHJldmlvdXNseSBzZXR1cC4KKyAqLworCitzdGF0aWMKK0NVUkxjb2RlIHBvcDNfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICBib29sICpjb25uZWN0ZWQsICAvKiBjb25uZWN0IHN0YXR1cyBhZnRlciBQQVNWIC8gUE9SVCAqLworICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQoreworICAvKiB0aGlzIGlzIFBPUDMgYW5kIG5vIHByb3h5ICovCisgIENVUkxjb2RlIHJlc3VsdD1DVVJMRV9PSzsKKyAgc3RydWN0IHBvcDNfY29ubiAqcG9wM2MgPSAmY29ubi0+cHJvdG8ucG9wM2M7CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKKworICBpZihjb25uLT5kYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKKyAgICAvKiByZXF1ZXN0ZWQgbm8gYm9keSBtZWFucyBubyB0cmFuc2Zlci4uLiAqLworICAgIHN0cnVjdCBGVFAgKnBvcDMgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5wb3AzOworICAgIHBvcDMtPnRyYW5zZmVyID0gRlRQVFJBTlNGRVJfSU5GTzsKKyAgfQorCisgICpkb3BoYXNlX2RvbmUgPSBGQUxTRTsgLyogbm90IGRvbmUgeWV0ICovCisKKyAgLyogc3RhcnQgdGhlIGZpcnN0IGNvbW1hbmQgaW4gdGhlIERPIHBoYXNlICovCisgIC8qIElmIG1haWxib3ggaXMgZW1wdHksIHRoZW4gYXNzdW1lIHVzZXIgd2FudHMgbGlzdGluZyBmb3IgbWFpbCBJRHMsCisgICAqIG90aGVyd2lzZSwgYXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgbWFpbC1pZCBzdG9yZWQgaW4gbWFpbGJveAorICAgKi8KKyAgaWYoc3RybGVuKHBvcDNjLT5tYWlsYm94KSAmJiAhY29ubi0+ZGF0YS0+c2V0LmZ0cF9saXN0X29ubHkpCisgICAgcmVzdWx0ID0gcG9wM19yZXRyKGNvbm4pOworICBlbHNlCisgICAgcmVzdWx0ID0gcG9wM19saXN0KGNvbm4pOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgaWYoY29ubi0+ZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgPT0gQ3VybF9pZl9tdWx0aSkKKyAgICByZXN1bHQgPSBwb3AzX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworICBlbHNlIHsKKyAgICByZXN1bHQgPSBwb3AzX2Vhc3lfc3RhdGVtYWNoKGNvbm4pOworICAgICpkb3BoYXNlX2RvbmUgPSBUUlVFOyAvKiB3aXRoIHRoZSBlYXN5IGludGVyZmFjZSB3ZSBhcmUgZG9uZSBoZXJlICovCisgIH0KKyAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF07CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcG9wM19kbygpCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIGFzICdjdXJsX2RvJyBmdW5jdGlvbi4gSXQgZGVjb2RlcyB0aGUgcGF0aAorICogcGFydHMgZXRjIGFzIGEgd3JhcHBlciB0byB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIChwb3AzX3BlcmZvcm0pLgorICoKKyAqIFRoZSBpbnB1dCBhcmd1bWVudCBpcyBhbHJlYWR5IGNoZWNrZWQgZm9yIHZhbGlkaXR5LgorICovCitzdGF0aWMgQ1VSTGNvZGUgcG9wM19kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJldGNvZGUgPSBDVVJMRV9PSzsKKworICAqZG9uZSA9IEZBTFNFOyAvKiBkZWZhdWx0IHRvIGZhbHNlICovCisKKyAgLyoKKyAgICBTaW5jZSBjb25uZWN0aW9ucyBjYW4gYmUgcmUtdXNlZCBiZXR3ZWVuIFNlc3Npb25IYW5kbGVzLCB0aGlzIG1pZ2h0IGJlIGEKKyAgICBjb25uZWN0aW9uIGFscmVhZHkgZXhpc3RpbmcgYnV0IG9uIGEgZnJlc2ggU2Vzc2lvbkhhbmRsZSBzdHJ1Y3Qgc28gd2UgbXVzdAorICAgIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgZ29vZCAnc3RydWN0IFBPUDMnIHRvIHBsYXkgd2l0aC4gRm9yIG5ldyBjb25uZWN0aW9ucywKKyAgICB0aGUgc3RydWN0IFBPUDMgaXMgYWxsb2NhdGVkIGFuZCBzZXR1cCBpbiB0aGUgcG9wM19jb25uZWN0KCkgZnVuY3Rpb24uCisgICovCisgIEN1cmxfcmVzZXRfcmVxcHJvdG8oY29ubik7CisgIHJldGNvZGUgPSBwb3AzX2luaXQoY29ubik7CisgIGlmKHJldGNvZGUpCisgICAgcmV0dXJuIHJldGNvZGU7CisKKyAgcmV0Y29kZSA9IHBvcDNfcGFyc2VfdXJsX3BhdGgoY29ubik7CisgIGlmKHJldGNvZGUpCisgICAgcmV0dXJuIHJldGNvZGU7CisKKyAgcmV0Y29kZSA9IHBvcDNfcmVndWxhcl90cmFuc2Zlcihjb25uLCBkb25lKTsKKworICByZXR1cm4gcmV0Y29kZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcG9wM19xdWl0KCkKKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgc2Nsb3NlKCkuICBXZSBzaG91bGQgdGhlbiB3YWl0IGZvciB0aGUKKyAqIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciBiZWZvcmUgcmV0dXJuaW5nLiBUaGUgY2FsbGluZyBjb2RlIHNob3VsZCB0aGVuIHRyeQorICogdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgKgorICovCitzdGF0aWMgQ1VSTGNvZGUgcG9wM19xdWl0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8ucG9wM2MucHAsICJRVUlUIiwgTlVMTCk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworICBzdGF0ZShjb25uLCBQT1AzX1FVSVQpOworCisgIHJlc3VsdCA9IHBvcDNfZWFzeV9zdGF0ZW1hY2goY29ubik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogcG9wM19kaXNjb25uZWN0KCkKKyAqCisgKiBEaXNjb25uZWN0IGZyb20gYW4gUE9QMyBzZXJ2ZXIuIENsZWFudXAgcHJvdG9jb2wtc3BlY2lmaWMgcGVyLWNvbm5lY3Rpb24KKyAqIHJlc291cmNlcy4gQkxPQ0tJTkcuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBwb3AzX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgc3RydWN0IHBvcDNfY29ubiAqcG9wM2M9ICZjb25uLT5wcm90by5wb3AzYzsKKworICAvKiBXZSBjYW5ub3Qgc2VuZCBxdWl0IHVuY29uZGl0aW9uYWxseS4gSWYgdGhpcyBjb25uZWN0aW9uIGlzIHN0YWxlIG9yCisgICAgIGJhZCBpbiBhbnkgd2F5LCBzZW5kaW5nIHF1aXQgYW5kIHdhaXRpbmcgYXJvdW5kIGhlcmUgd2lsbCBtYWtlIHRoZQorICAgICBkaXNjb25uZWN0IHdhaXQgaW4gdmFpbiBhbmQgY2F1c2UgbW9yZSBwcm9ibGVtcyB0aGFuIHdlIG5lZWQgdG8uCisgICovCisKKyAgLyogVGhlIFBPUDMgc2Vzc2lvbiBtYXkgb3IgbWF5IG5vdCBoYXZlIGJlZW4gYWxsb2NhdGVkL3NldHVwIGF0IHRoaXMKKyAgICAgcG9pbnQhICovCisgIGlmKCFkZWFkX2Nvbm5lY3Rpb24gJiYgcG9wM2MtPnBwLmNvbm4pCisgICAgKHZvaWQpcG9wM19xdWl0KGNvbm4pOyAvKiBpZ25vcmUgZXJyb3JzIG9uIHRoZSBMT0dPVVQgKi8KKworCisgIEN1cmxfcHBfZGlzY29ubmVjdCgmcG9wM2MtPnBwKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBvcDNfcGFyc2VfdXJsX3BhdGgoKQorICoKKyAqIFBhcnNlIHRoZSBVUkwgcGF0aCBpbnRvIHNlcGFyYXRlIHBhdGggY29tcG9uZW50cy4KKyAqCisgKi8KK3N0YXRpYyBDVVJMY29kZSBwb3AzX3BhcnNlX3VybF9wYXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgLyogdGhlIHBvcDMgc3RydWN0IGlzIGFscmVhZHkgaW5pdGVkIGluIHBvcDNfY29ubmVjdCgpICovCisgIHN0cnVjdCBwb3AzX2Nvbm4gKnBvcDNjID0gJmNvbm4tPnByb3RvLnBvcDNjOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGNvbnN0IGNoYXIgKnBhdGggPSBkYXRhLT5zdGF0ZS5wYXRoOworCisgIC8qIHVybCBkZWNvZGUgdGhlIHBhdGggYW5kIHVzZSB0aGlzIG1haWxib3ggKi8KKyAgcmV0dXJuIEN1cmxfdXJsZGVjb2RlKGRhdGEsIHBhdGgsIDAsICZwb3AzYy0+bWFpbGJveCwgTlVMTCwgVFJVRSk7Cit9CisKKy8qIGNhbGwgdGhpcyB3aGVuIHRoZSBETyBwaGFzZSBoYXMgY29tcGxldGVkICovCitzdGF0aWMgQ1VSTGNvZGUgcG9wM19kb3BoYXNlX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29ubmVjdGVkKQoreworICBzdHJ1Y3QgRlRQICpwb3AzID0gY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8ucG9wMzsKKyAgKHZvaWQpY29ubmVjdGVkOworCisgIGlmKHBvcDMtPnRyYW5zZmVyICE9IEZUUFRSQU5TRkVSX0JPRFkpCisgICAgLyogbm8gZGF0YSB0byB0cmFuc2ZlciAqLworICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyogY2FsbGVkIGZyb20gbXVsdGkuYyB3aGlsZSBET2luZyAqLworc3RhdGljIENVUkxjb2RlIHBvcDNfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICByZXN1bHQgPSBwb3AzX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICByZXN1bHQgPSBwb3AzX2RvcGhhc2VfZG9uZShjb25uLCBGQUxTRSAvKiBub3QgY29ubmVjdGVkICovKTsKKworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBwb3AzX3JlZ3VsYXJfdHJhbnNmZXIoKQorICoKKyAqIFRoZSBpbnB1dCBhcmd1bWVudCBpcyBhbHJlYWR5IGNoZWNrZWQgZm9yIHZhbGlkaXR5LgorICoKKyAqIFBlcmZvcm1zIGFsbCBjb21tYW5kcyBkb25lIGJlZm9yZSBhIHJlZ3VsYXIgdHJhbnNmZXIgYmV0d2VlbiBhIGxvY2FsIGFuZCBhCisgKiByZW1vdGUgaG9zdC4KKyAqCisgKi8KK3N0YXRpYworQ1VSTGNvZGUgcG9wM19yZWd1bGFyX3RyYW5zZmVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0PUNVUkxFX09LOworICBib29sIGNvbm5lY3RlZD1GQUxTRTsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBkYXRhLT5yZXEuc2l6ZSA9IC0xOyAvKiBtYWtlIHN1cmUgdGhpcyBpcyB1bmtub3duIGF0IHRoaXMgcG9pbnQgKi8KKworICBDdXJsX3BncnNTZXRVcGxvYWRDb3VudGVyKGRhdGEsIDApOworICBDdXJsX3BncnNTZXREb3dubG9hZENvdW50ZXIoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAwKTsKKworICByZXN1bHQgPSBwb3AzX3BlcmZvcm0oY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICZjb25uZWN0ZWQsIC8qIGhhdmUgd2UgY29ubmVjdGVkIGFmdGVyIFBBU1YvUE9SVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZG9waGFzZV9kb25lKTsgLyogYWxsIGNvbW1hbmRzIGluIHRoZSBETy1waGFzZSBkb25lPyAqLworCisgIGlmKENVUkxFX09LID09IHJlc3VsdCkgeworCisgICAgaWYoISpkb3BoYXNlX2RvbmUpCisgICAgICAvKiB0aGUgRE8gcGhhc2UgaGFzIG5vdCBjb21wbGV0ZWQgeWV0ICovCisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgICByZXN1bHQgPSBwb3AzX2RvcGhhc2VfZG9uZShjb25uLCBjb25uZWN0ZWQpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgcG9wM19zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICBpZihjb25uLT5iaXRzLmh0dHBwcm94eSAmJiAhZGF0YS0+c2V0LnR1bm5lbF90aHJ1X2h0dHBwcm94eSkgeworICAgIC8qIFVubGVzcyB3ZSBoYXZlIGFza2VkIHRvIHR1bm5lbCBwb3AzIG9wZXJhdGlvbnMgdGhyb3VnaCB0aGUgcHJveHksIHdlCisgICAgICAgc3dpdGNoIGFuZCB1c2UgSFRUUCBvcGVyYXRpb25zIG9ubHkgKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKKyAgICBpZihjb25uLT5oYW5kbGVyID09ICZDdXJsX2hhbmRsZXJfcG9wMykKKyAgICAgIGNvbm4tPmhhbmRsZXIgPSAmQ3VybF9oYW5kbGVyX3BvcDNfcHJveHk7CisgICAgZWxzZSB7CisjaWZkZWYgVVNFX1NTTAorICAgICAgY29ubi0+aGFuZGxlciA9ICZDdXJsX2hhbmRsZXJfcG9wM3NfcHJveHk7CisjZWxzZQorICAgICAgZmFpbGYoZGF0YSwgIlBPUDNTIG5vdCBzdXBwb3J0ZWQhIik7CisgICAgICByZXR1cm4gQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0w7CisjZW5kaWYKKyAgICB9CisgICAgLyoKKyAgICAgKiBXZSBleHBsaWNpdGx5IG1hcmsgdGhpcyBjb25uZWN0aW9uIGFzIHBlcnNpc3RlbnQgaGVyZSBhcyB3ZSdyZSBkb2luZworICAgICAqIFBPUDMgb3ZlciBIVFRQIGFuZCB0aHVzIHdlIGFjY2lkZW50YWxseSBhdm9pZCBzZXR0aW5nIHRoaXMgdmFsdWUKKyAgICAgKiBvdGhlcndpc2UuCisgICAgICovCisgICAgY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOworI2Vsc2UKKyAgICBmYWlsZihkYXRhLCAiUE9QMyBvdmVyIGh0dHAgcHJveHkgcmVxdWlyZXMgSFRUUCBzdXBwb3J0IGJ1aWx0LWluISIpOworICAgIHJldHVybiBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTDsKKyNlbmRpZgorICB9CisKKyAgZGF0YS0+c3RhdGUucGF0aCsrOyAgIC8qIGRvbid0IGluY2x1ZGUgdGhlIGluaXRpYWwgc2xhc2ggKi8KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qIHRoaXMgaXMgdGhlIDUtYnl0ZXMgRW5kLU9mLUJvZHkgbWFya2VyIGZvciBQT1AzICovCisjZGVmaW5lIFBPUDNfRU9CICJceDBkXHgwYVx4MmVceDBkXHgwYSIKKyNkZWZpbmUgUE9QM19FT0JfTEVOIDUKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2NhbnMgdGhlIGJvZHkgYWZ0ZXIgdGhlIGVuZC1vZi1ib2R5IGFuZCB3cml0ZXMgZXZlcnl0aGluZworICogdW50aWwgdGhlIGVuZCBpcyBmb3VuZC4KKyAqLworQ1VSTGNvZGUgQ3VybF9wb3AzX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5yZWFkKQoreworICAvKiBUaGlzIGNvZGUgY291bGQgYmUgbWFkZSBpbnRvIGEgc3BlY2lhbCBmdW5jdGlvbiBpbiB0aGUgaGFuZGxlciBzdHJ1Y3QgKi8KKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmZGF0YS0+cmVxOworCisgIHN0cnVjdCBwb3AzX2Nvbm4gKnBvcDNjID0gJmNvbm4tPnByb3RvLnBvcDNjOworICBib29sIHN0cmlwX2RvdCA9IEZBTFNFOworICBzaXplX3QgbGFzdCA9IDA7CisgIHNpemVfdCBpOworCisgIC8qIFNlYXJjaCB0aHJvdWdoIHRoZSBidWZmZXIgbG9va2luZyBmb3IgdGhlIGVuZC1vZi1ib2R5IG1hcmtlciB3aGljaCBpcworICAgICA1IGJ5dGVzICgwZCAwYSAyZSAwZCAwYSkuIE5vdGUgdGhhdCBhIGxpbmUgc3RhcnRpbmcgd2l0aCBhIGRvdCBtYXRjaGVzCisgICAgIHRoZSBlb2Igc28gdGhlIHNlcnZlciB3aWxsIGhhdmUgcHJlZml4ZWQgaXQgd2l0aCBhbiBleHRyYSBkb3Qgd2hpY2ggd2UKKyAgICAgbmVlZCB0byBzdHJpcCBvdXQuIEFkZGl0aW9uYWxseSB0aGUgbWFya2VyIGNvdWxkIG9mIGNvdXJzZSBiZSBzcHJlYWQgb3V0CisgICAgIG92ZXIgNSBkaWZmZXJlbnQgZGF0YSBjaHVua3MgKi8KKyAgZm9yKGkgPSAwOyBpIDwgbnJlYWQ7IGkrKykgeworICAgIHNpemVfdCBwcmV2ID0gcG9wM2MtPmVvYjsKKworICAgIHN3aXRjaChzdHJbaV0pIHsKKyAgICBjYXNlIDB4MGQ6CisgICAgICBpZihwb3AzYy0+ZW9iID09IDApIHsKKyAgICAgICAgcG9wM2MtPmVvYisrOworCisgICAgICAgIGlmKGkpIHsKKyAgICAgICAgICAvKiBXcml0ZSBvdXQgdGhlIGJvZHkgcGFydCB0aGF0IGRpZG4ndCBtYXRjaCAqLworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksICZzdHJbbGFzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAtIGxhc3QpOworCisgICAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgIGxhc3QgPSBpOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmKHBvcDNjLT5lb2IgPT0gMykKKyAgICAgICAgcG9wM2MtPmVvYisrOworICAgICAgZWxzZQorICAgICAgICAvKiBJZiB0aGUgY2hhcmFjdGVyIG1hdGNoIHdhc24ndCBhdCBwb3NpdGlvbiAwIG9yIDMgdGhlbiByZXN0YXJ0IHRoZQorICAgICAgICAgICBwYXR0ZXJuIG1hdGNoaW5nICovCisgICAgICAgIHBvcDNjLT5lb2IgPSAxOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDB4MGE6CisgICAgICBpZihwb3AzYy0+ZW9iID09IDEgfHwgcG9wM2MtPmVvYiA9PSA0KQorICAgICAgICBwb3AzYy0+ZW9iKys7CisgICAgICBlbHNlCisgICAgICAgIC8qIElmIHRoZSBjaGFyYWN0ZXIgbWF0Y2ggd2Fzbid0IGF0IHBvc2l0aW9uIDEgb3IgNCB0aGVuIHN0YXJ0IHRoZQorICAgICAgICAgICBzZWFyY2ggYWdhaW4gKi8KKyAgICAgICAgcG9wM2MtPmVvYiA9IDA7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMHgyZToKKyAgICAgIGlmKHBvcDNjLT5lb2IgPT0gMikKKyAgICAgICAgcG9wM2MtPmVvYisrOworICAgICAgZWxzZSBpZihwb3AzYy0+ZW9iID09IDMpIHsKKyAgICAgICAgLyogV2UgaGF2ZSBhbiBleHRyYSBkb3QgYWZ0ZXIgdGhlIENSTEYgd2hpY2ggd2UgbmVlZCB0byBzdHJpcCBvZmYgKi8KKyAgICAgICAgc3RyaXBfZG90ID0gVFJVRTsKKyAgICAgICAgcG9wM2MtPmVvYiA9IDA7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIC8qIElmIHRoZSBjaGFyYWN0ZXIgbWF0Y2ggd2Fzbid0IGF0IHBvc2l0aW9uIDIgdGhlbiBzdGFydCB0aGUgc2VhcmNoCisgICAgICAgICAgIGFnYWluICovCisgICAgICAgIHBvcDNjLT5lb2IgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcG9wM2MtPmVvYiA9IDA7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBEaWQgd2UgaGF2ZSBhIHBhcnRpYWwgbWF0Y2ggd2hpY2ggaGFzIHN1YnNlcXVlbnRseSBmYWlsZWQ/ICovCisgICAgaWYocHJldiAmJiBwcmV2ID49IHBvcDNjLT5lb2IpIHsKKyAgICAgIC8qIFN0cmlwIGNhbiBvbmx5IGJlIG5vbi16ZXJvIGZvciB0aGUgdmVyeSBmaXJzdCBtaXNtYXRjaCBhZnRlciBDUkxGCisgICAgICAgICBhbmQgdGhlbiBib3RoIHByZXYgYW5kIHN0cmlwIGFyZSBlcXVhbCBhbmQgbm90aGluZyB3aWxsIGJlIG91dHB1dAorICAgICAgICAgYmVsb3cgKi8KKyAgICAgIHdoaWxlKHByZXYgJiYgcG9wM2MtPnN0cmlwKSB7CisgICAgICAgIHByZXYtLTsKKyAgICAgICAgcG9wM2MtPnN0cmlwLS07CisgICAgICB9CisKKyAgICAgIGlmKHByZXYpIHsKKyAgICAgICAgLyogSWYgdGhlIHBhcnRpYWwgbWF0Y2ggd2FzIHRoZSBDUkxGIGFuZCBkb3QgdGhlbiBvbmx5IHdyaXRlIHRoZSBDUkxGCisgICAgICAgICAgIGFzIHRoZSBzZXJ2ZXIgd291bGQgaGF2ZSBpbnNlcnRlZCB0aGUgZG90ICovCisgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksIChjaGFyKilQT1AzX0VPQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBfZG90ID8gcHJldiAtIDEgOiBwcmV2KTsKKworICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICBsYXN0ID0gaTsKKyAgICAgICAgc3RyaXBfZG90ID0gRkFMU0U7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYocG9wM2MtPmVvYiA9PSBQT1AzX0VPQl9MRU4pIHsKKyAgICAvKiBXZSBoYXZlIGEgZnVsbCBtYXRjaCBzbyB0aGUgdHJhbnNmZXIgaXMgZG9uZSwgaG93ZXZlciB3ZSBtdXN0IHRyYW5zZmVyCisgICAgdGhlIENSTEYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBFT0IgYXMgdGhpcyBpcyBjb25zaWRlcmVkIHRvIGJlIHBhcnQgb2YgdGhlCisgICAgbWVzc2FnZSBhcyBwZXIgUkZDLTE5MzksIHNlY3QuIDMgKi8KKyAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciopUE9QM19FT0IsIDIpOworCisgICAgay0+a2VlcG9uICY9IH5LRUVQX1JFQ1Y7CisgICAgcG9wM2MtPmVvYiA9IDA7CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgaWYocG9wM2MtPmVvYikKKyAgICAvKiBXaGlsZSBFT0IgaXMgbWF0Y2hpbmcgbm90aGluZyBzaG91bGQgYmUgb3V0cHV0ICovCisgICAgcmV0dXJuIENVUkxFX09LOworCisgIGlmKG5yZWFkIC0gbGFzdCkgeworICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksICZzdHJbbGFzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJlYWQgLSBsYXN0KTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfUE9QMyAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3BvcDMuaCBiL2N1cmwtNy4yNS4wL2xpYi9wb3AzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcyM2ZiYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9wb3AzLmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9QT1AzX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfUE9QM19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBPUDMgdW5pcXVlIHNldHVwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKyAgUE9QM19TVE9QLCAgICAgICAgLyogZG8gbm90aGluZyBzdGF0ZSwgc3RvcHMgdGhlIHN0YXRlIG1hY2hpbmUgKi8KKyAgUE9QM19TRVJWRVJHUkVFVCwgLyogd2FpdGluZyBmb3IgdGhlIGluaXRpYWwgZ3JlZXRpbmcgaW1tZWRpYXRlbHkgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgYSBjb25uZWN0ICovCisgIFBPUDNfVVNFUiwKKyAgUE9QM19QQVNTLAorICBQT1AzX1NUQVJUVExTLAorICBQT1AzX0xJU1QsCisgIFBPUDNfTElTVF9TSU5HTEUsCisgIFBPUDNfUkVUUiwKKyAgUE9QM19RVUlULAorICBQT1AzX0xBU1QgIC8qIG5ldmVyIHVzZWQgKi8KK30gcG9wM3N0YXRlOworCisvKiBwb3AzX2Nvbm4gaXMgdXNlZCBmb3Igc3RydWN0IGNvbm5lY3Rpb24tb3JpZW50ZWQgZGF0YSBpbiB0aGUgY29ubmVjdGRhdGEKKyAgIHN0cnVjdCAqLworc3RydWN0IHBvcDNfY29ubiB7CisgIHN0cnVjdCBwaW5ncG9uZyBwcDsKKyAgY2hhciAqbWFpbGJveDsgICAgIC8qIHdoYXQgdG8gUkVUUiAqLworICBzaXplX3QgZW9iOyAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSBFT0IgKEVuZCBPZiBCb2R5KSB0aGF0IGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZCB0aHVzIGZhciAqLworICBzaXplX3Qgc3RyaXA7ICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IHRvIGlnbm9yZSBhcyBub24tYm9keSAqLworICBwb3Azc3RhdGUgc3RhdGU7IC8qIGFsd2F5cyB1c2UgcG9wMy5jOnN0YXRlKCkgdG8gY2hhbmdlIHN0YXRlISAqLworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3BvcDM7CitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfcG9wM3M7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNjYW5zIHRoZSBib2R5IGFmdGVyIHRoZSBlbmQtb2YtYm9keSBhbmQgd3JpdGVzIGV2ZXJ5dGhpbmcKKyAqIHVudGlsIHRoZSBlbmQgaXMgZm91bmQuCisgKi8KK0NVUkxjb2RlIEN1cmxfcG9wM193cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBucmVhZCk7CisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9QT1AzX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9wcm9ncmVzcy5jIGIvY3VybC03LjI1LjAvbGliL3Byb2dyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVlYjc4MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9wcm9ncmVzcy5jCkBAIC0wLDAgKzEsNDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisvKiBQcm92aWRlIGEgc3RyaW5nIHRoYXQgaXMgMiArIDEgKyAyICsgMSArIDIgPSA4IGxldHRlcnMgbG9uZyAocGx1cyB0aGUgemVybworICAgYnl0ZSkgKi8KK3N0YXRpYyB2b2lkIHRpbWUyc3RyKGNoYXIgKnIsIGN1cmxfb2ZmX3Qgc2Vjb25kcykKK3sKKyAgY3VybF9vZmZfdCBkLCBoLCBtLCBzOworICBpZihzZWNvbmRzIDw9IDApIHsKKyAgICBzdHJjcHkociwgIi0tOi0tOi0tIik7CisgICAgcmV0dXJuOworICB9CisgIGggPSBzZWNvbmRzIC8gQ1VSTF9PRkZfVF9DKDM2MDApOworICBpZihoIDw9IENVUkxfT0ZGX1RfQyg5OSkpIHsKKyAgICBtID0gKHNlY29uZHMgLSAoaCpDVVJMX09GRl9UX0MoMzYwMCkpKSAvIENVUkxfT0ZGX1RfQyg2MCk7CisgICAgcyA9IChzZWNvbmRzIC0gKGgqQ1VSTF9PRkZfVF9DKDM2MDApKSkgLSAobSpDVVJMX09GRl9UX0MoNjApKTsKKyAgICBzbnByaW50ZihyLCA5LCAiJTIiIEZPUk1BVF9PRkZfVCAiOiUwMiIgRk9STUFUX09GRl9UICI6JTAyIiBGT1JNQVRfT0ZGX1QsCisgICAgICAgICAgICAgaCwgbSwgcyk7CisgIH0KKyAgZWxzZSB7CisgICAgLyogdGhpcyBlcXVhbHMgdG8gbW9yZSB0aGFuIDk5IGhvdXJzLCBzd2l0Y2ggdG8gYSBtb3JlIHN1aXRhYmxlIG91dHB1dAorICAgICAgIGZvcm1hdCB0byBmaXQgd2l0aGluIHRoZSBsaW1pdHMuICovCisgICAgZCA9IHNlY29uZHMgLyBDVVJMX09GRl9UX0MoODY0MDApOworICAgIGggPSAoc2Vjb25kcyAtIChkKkNVUkxfT0ZGX1RfQyg4NjQwMCkpKSAvIENVUkxfT0ZGX1RfQygzNjAwKTsKKyAgICBpZihkIDw9IENVUkxfT0ZGX1RfQyg5OTkpKQorICAgICAgc25wcmludGYociwgOSwgIiUzIiBGT1JNQVRfT0ZGX1QgImQgJTAyIiBGT1JNQVRfT0ZGX1QgImgiLCBkLCBoKTsKKyAgICBlbHNlCisgICAgICBzbnByaW50ZihyLCA5LCAiJTciIEZPUk1BVF9PRkZfVCAiZCIsIGQpOworICB9Cit9CisKKy8qIFRoZSBwb2ludCBvZiB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHRvIHJldHVybiBhIHN0cmluZyBvZiB0aGUgaW5wdXQgZGF0YSwKKyAgIGJ1dCBuZXZlciBsb25nZXIgdGhhbiA1IGNvbHVtbnMgKCsgb25lIHplcm8gYnl0ZSkuCisgICBBZGQgc3VmZml4IGssIE0sIEcgd2hlbiBzdWl0YWJsZS4uLiAqLworc3RhdGljIGNoYXIgKm1heDVkYXRhKGN1cmxfb2ZmX3QgYnl0ZXMsIGNoYXIgKm1heDUpCit7CisjZGVmaW5lIE9ORV9LSUxPQllURSAgQ1VSTF9PRkZfVF9DKDEwMjQpCisjZGVmaW5lIE9ORV9NRUdBQllURSAoQ1VSTF9PRkZfVF9DKDEwMjQpICogT05FX0tJTE9CWVRFKQorI2RlZmluZSBPTkVfR0lHQUJZVEUgKENVUkxfT0ZGX1RfQygxMDI0KSAqIE9ORV9NRUdBQllURSkKKyNkZWZpbmUgT05FX1RFUkFCWVRFIChDVVJMX09GRl9UX0MoMTAyNCkgKiBPTkVfR0lHQUJZVEUpCisjZGVmaW5lIE9ORV9QRVRBQllURSAoQ1VSTF9PRkZfVF9DKDEwMjQpICogT05FX1RFUkFCWVRFKQorCisgIGlmKGJ5dGVzIDwgQ1VSTF9PRkZfVF9DKDEwMDAwMCkpCisgICAgc25wcmludGYobWF4NSwgNiwgIiU1IiBGT1JNQVRfT0ZGX1QsIGJ5dGVzKTsKKworICBlbHNlIGlmKGJ5dGVzIDwgQ1VSTF9PRkZfVF9DKDEwMDAwKSAqIE9ORV9LSUxPQllURSkKKyAgICBzbnByaW50ZihtYXg1LCA2LCAiJTQiIEZPUk1BVF9PRkZfVCAiayIsIGJ5dGVzL09ORV9LSUxPQllURSk7CisKKyAgZWxzZSBpZihieXRlcyA8IENVUkxfT0ZGX1RfQygxMDApICogT05FX01FR0FCWVRFKQorICAgIC8qICdYWC5YTScgaXMgZ29vZCBhcyBsb25nIGFzIHdlJ3JlIGxlc3MgdGhhbiAxMDAgbWVncyAqLworICAgIHNucHJpbnRmKG1heDUsIDYsICIlMiIgRk9STUFUX09GRl9UICIuJTAiIEZPUk1BVF9PRkZfVCAiTSIsCisgICAgICAgICAgICAgIGJ5dGVzL09ORV9NRUdBQllURSwKKyAgICAgICAgICAgICAoYnl0ZXMlT05FX01FR0FCWVRFKSAvIChPTkVfTUVHQUJZVEUvQ1VSTF9PRkZfVF9DKDEwKSkgKTsKKworI2lmIChDVVJMX1NJWkVPRl9DVVJMX09GRl9UID4gNCkKKworICBlbHNlIGlmKGJ5dGVzIDwgQ1VSTF9PRkZfVF9DKDEwMDAwKSAqIE9ORV9NRUdBQllURSkKKyAgICAvKiAnWFhYWE0nIGlzIGdvb2QgdW50aWwgd2UncmUgYXQgMTAwMDBNQiBvciBhYm92ZSAqLworICAgIHNucHJpbnRmKG1heDUsIDYsICIlNCIgRk9STUFUX09GRl9UICJNIiwgYnl0ZXMvT05FX01FR0FCWVRFKTsKKworICBlbHNlIGlmKGJ5dGVzIDwgQ1VSTF9PRkZfVF9DKDEwMCkgKiBPTkVfR0lHQUJZVEUpCisgICAgLyogMTAwMDAgTUIgLSAxMDAgR0IsIHdlIHNob3cgaXQgYXMgWFguWEcgKi8KKyAgICBzbnByaW50ZihtYXg1LCA2LCAiJTIiIEZPUk1BVF9PRkZfVCAiLiUwIiBGT1JNQVRfT0ZGX1QgIkciLAorICAgICAgICAgICAgICBieXRlcy9PTkVfR0lHQUJZVEUsCisgICAgICAgICAgICAgKGJ5dGVzJU9ORV9HSUdBQllURSkgLyAoT05FX0dJR0FCWVRFL0NVUkxfT0ZGX1RfQygxMCkpICk7CisKKyAgZWxzZSBpZihieXRlcyA8IENVUkxfT0ZGX1RfQygxMDAwMCkgKiBPTkVfR0lHQUJZVEUpCisgICAgLyogdXAgdG8gMTAwMDBHQiwgZGlzcGxheSB3aXRob3V0IGRlY2ltYWw6IFhYWFhHICovCisgICAgc25wcmludGYobWF4NSwgNiwgIiU0IiBGT1JNQVRfT0ZGX1QgIkciLCBieXRlcy9PTkVfR0lHQUJZVEUpOworCisgIGVsc2UgaWYoYnl0ZXMgPCBDVVJMX09GRl9UX0MoMTAwMDApICogT05FX1RFUkFCWVRFKQorICAgIC8qIHVwIHRvIDEwMDAwVEIsIGRpc3BsYXkgd2l0aG91dCBkZWNpbWFsOiBYWFhYVCAqLworICAgIHNucHJpbnRmKG1heDUsIDYsICIlNCIgRk9STUFUX09GRl9UICJUIiwgYnl0ZXMvT05FX1RFUkFCWVRFKTsKKworICBlbHNlCisgICAgLyogdXAgdG8gMTAwMDBQQiwgZGlzcGxheSB3aXRob3V0IGRlY2ltYWw6IFhYWFhQICovCisgICAgc25wcmludGYobWF4NSwgNiwgIiU0IiBGT1JNQVRfT0ZGX1QgIlAiLCBieXRlcy9PTkVfUEVUQUJZVEUpOworCisgICAgLyogMTYzODQgcGV0YWJ5dGVzICgxNiBleGFieXRlcykgaXMgdGhlIG1heGltdW0gYSA2NCBiaXQgdW5zaWduZWQgbnVtYmVyCisgICAgICAgY2FuIGhvbGQsIGJ1dCBvdXIgZGF0YSB0eXBlIGlzIHNpZ25lZCBzbyA4MTkyUEIgd2lsbCBiZSB0aGUgbWF4aW11bS4gKi8KKworI2Vsc2UKKworICBlbHNlCisgICAgc25wcmludGYobWF4NSwgNiwgIiU0IiBGT1JNQVRfT0ZGX1QgIk0iLCBieXRlcy9PTkVfTUVHQUJZVEUpOworCisjZW5kaWYKKworICByZXR1cm4gbWF4NTsKK30KKworLyoKKworICAgTmV3IHByb3Bvc2VkIGludGVyZmFjZSwgOXRoIG9mIEZlYnJ1YXJ5IDIwMDA6CisKKyAgIHBncnNTdGFydE5vdygpIC0gc2V0cyBzdGFydCB0aW1lCisgICBwZ3JzU2V0RG93bmxvYWRTaXplKHgpIC0ga25vd24gZXhwZWN0ZWQgZG93bmxvYWQgc2l6ZQorICAgcGdyc1NldFVwbG9hZFNpemUoeCkgLSBrbm93biBleHBlY3RlZCB1cGxvYWQgc2l6ZQorICAgcGdyc1NldERvd25sb2FkQ291bnRlcigpIC0gYW1vdW50IG9mIGRhdGEgY3VycmVudGx5IGRvd25sb2FkZWQKKyAgIHBncnNTZXRVcGxvYWRDb3VudGVyKCkgLSBhbW91bnQgb2YgZGF0YSBjdXJyZW50bHkgdXBsb2FkZWQKKyAgIHBncnNVcGRhdGUoKSAtIHNob3cgcHJvZ3Jlc3MKKyAgIHBncnNEb25lKCkgLSB0cmFuc2ZlciBjb21wbGV0ZQorCisqLworCit2b2lkIEN1cmxfcGdyc0RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGRhdGEtPnByb2dyZXNzLmxhc3RzaG93PTA7CisgIEN1cmxfcGdyc1VwZGF0ZShjb25uKTsgLyogdGhlIGZpbmFsIChmb3JjZWQpIHVwZGF0ZSAqLworCisgIGlmKCEoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX0hJREUpICYmCisgICAgICFkYXRhLT5wcm9ncmVzcy5jYWxsYmFjaykKKyAgICAvKiBvbmx5IG91dHB1dCBpZiB3ZSBkb24ndCB1c2UgYSBwcm9ncmVzcyBjYWxsYmFjayBhbmQgd2UncmUgbm90CisgICAgICogaGlkZGVuICovCisgICAgZnByaW50ZihkYXRhLT5zZXQuZXJyLCAiXG4iKTsKKworICBkYXRhLT5wcm9ncmVzcy5zcGVlZGVyX2MgPSAwOyAvKiByZXNldCB0aGUgcHJvZ3Jlc3MgbWV0ZXIgZGlzcGxheSAqLworfQorCisvKiByZXNldCBhbGwgdGltZXMgZXhjZXB0IHJlZGlyZWN0ICovCit2b2lkIEN1cmxfcGdyc1Jlc2V0VGltZXMoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIGRhdGEtPnByb2dyZXNzLnRfbnNsb29rdXAgPSAwLjA7CisgIGRhdGEtPnByb2dyZXNzLnRfY29ubmVjdCA9IDAuMDsKKyAgZGF0YS0+cHJvZ3Jlc3MudF9wcmV0cmFuc2ZlciA9IDAuMDsKKyAgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHRyYW5zZmVyID0gMC4wOworfQorCit2b2lkIEN1cmxfcGdyc1RpbWUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIHRpbWVyaWQgdGltZXIpCit7CisgIHN0cnVjdCB0aW1ldmFsIG5vdyA9IEN1cmxfdHZub3coKTsKKworICBzd2l0Y2godGltZXIpIHsKKyAgZGVmYXVsdDoKKyAgY2FzZSBUSU1FUl9OT05FOgorICAgIC8qIG1pc3Rha2UgZmlsdGVyICovCisgICAgYnJlYWs7CisgIGNhc2UgVElNRVJfU1RBUlRTSU5HTEU6CisgICAgLyogVGhpcyBpcyBzZXQgYXQgdGhlIHN0YXJ0IG9mIGEgc2luZ2xlIGZldGNoICovCisgICAgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZSA9IG5vdzsKKyAgICBicmVhazsKKworICBjYXNlIFRJTUVSX1NUQVJUQUNDRVBUOgorICAgIGRhdGEtPnByb2dyZXNzLnRfYWNjZXB0ZGF0YSA9IEN1cmxfdHZub3coKTsKKyAgICBicmVhazsKKworICBjYXNlIFRJTUVSX05BTUVMT09LVVA6CisgICAgZGF0YS0+cHJvZ3Jlc3MudF9uc2xvb2t1cCA9CisgICAgICBDdXJsX3R2ZGlmZl9zZWNzKG5vdywgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZSk7CisgICAgYnJlYWs7CisgIGNhc2UgVElNRVJfQ09OTkVDVDoKKyAgICBkYXRhLT5wcm9ncmVzcy50X2Nvbm5lY3QgPQorICAgICAgQ3VybF90dmRpZmZfc2Vjcyhub3csIGRhdGEtPnByb2dyZXNzLnRfc3RhcnRzaW5nbGUpOworICAgIGJyZWFrOworICBjYXNlIFRJTUVSX0FQUENPTk5FQ1Q6CisgICAgZGF0YS0+cHJvZ3Jlc3MudF9hcHBjb25uZWN0ID0KKyAgICAgIEN1cmxfdHZkaWZmX3NlY3Mobm93LCBkYXRhLT5wcm9ncmVzcy50X3N0YXJ0c2luZ2xlKTsKKyAgICBicmVhazsKKyAgY2FzZSBUSU1FUl9QUkVUUkFOU0ZFUjoKKyAgICBkYXRhLT5wcm9ncmVzcy50X3ByZXRyYW5zZmVyID0KKyAgICAgIEN1cmxfdHZkaWZmX3NlY3Mobm93LCBkYXRhLT5wcm9ncmVzcy50X3N0YXJ0c2luZ2xlKTsKKyAgICBicmVhazsKKyAgY2FzZSBUSU1FUl9TVEFSVFRSQU5TRkVSOgorICAgIGRhdGEtPnByb2dyZXNzLnRfc3RhcnR0cmFuc2ZlciA9CisgICAgICBDdXJsX3R2ZGlmZl9zZWNzKG5vdywgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZSk7CisgICAgYnJlYWs7CisgIGNhc2UgVElNRVJfUE9TVFJBTlNGRVI6CisgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIGVuZC1vZi10cmFuc2ZlciB0aGluZyAqLworICAgIGJyZWFrOworICBjYXNlIFRJTUVSX1JFRElSRUNUOgorICAgIGRhdGEtPnByb2dyZXNzLnRfcmVkaXJlY3QgPSBDdXJsX3R2ZGlmZl9zZWNzKG5vdywgZGF0YS0+cHJvZ3Jlc3Muc3RhcnQpOworICAgIGJyZWFrOworICB9Cit9CisKK3ZvaWQgQ3VybF9wZ3JzU3RhcnROb3coc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIGRhdGEtPnByb2dyZXNzLnNwZWVkZXJfYyA9IDA7IC8qIHJlc2V0IHRoZSBwcm9ncmVzcyBtZXRlciBkaXNwbGF5ICovCisgIGRhdGEtPnByb2dyZXNzLnN0YXJ0ID0gQ3VybF90dm5vdygpOworICAvKiBjbGVhciBhbGwgYml0cyBleGNlcHQgSElERSBhbmQgSEVBREVSU19PVVQgKi8KKyAgZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJj0gUEdSU19ISURFfFBHUlNfSEVBREVSU19PVVQ7Cit9CisKK3ZvaWQgQ3VybF9wZ3JzU2V0RG93bmxvYWRDb3VudGVyKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBjdXJsX29mZl90IHNpemUpCit7CisgIGRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQgPSBzaXplOworfQorCit2b2lkIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIGN1cmxfb2ZmX3Qgc2l6ZSkKK3sKKyAgZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQgPSBzaXplOworfQorCit2b2lkIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgY3VybF9vZmZfdCBzaXplKQoreworICBkYXRhLT5wcm9ncmVzcy5zaXplX2RsID0gc2l6ZTsKKyAgaWYoc2l6ZSA+PSAwKQorICAgIGRhdGEtPnByb2dyZXNzLmZsYWdzIHw9IFBHUlNfRExfU0laRV9LTk9XTjsKKyAgZWxzZQorICAgIGRhdGEtPnByb2dyZXNzLmZsYWdzICY9IH5QR1JTX0RMX1NJWkVfS05PV047Cit9CisKK3ZvaWQgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgY3VybF9vZmZfdCBzaXplKQoreworICBkYXRhLT5wcm9ncmVzcy5zaXplX3VsID0gc2l6ZTsKKyAgaWYoc2l6ZSA+PSAwKQorICAgIGRhdGEtPnByb2dyZXNzLmZsYWdzIHw9IFBHUlNfVUxfU0laRV9LTk9XTjsKKyAgZWxzZQorICAgIGRhdGEtPnByb2dyZXNzLmZsYWdzICY9IH5QR1JTX1VMX1NJWkVfS05PV047Cit9CisKK2ludCBDdXJsX3BncnNVcGRhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgIGludCByZXN1bHQ7CisgIGNoYXIgbWF4NVs2XVsxMF07CisgIGN1cmxfb2ZmX3QgZGxwZXJjZW49MDsKKyAgY3VybF9vZmZfdCB1bHBlcmNlbj0wOworICBjdXJsX29mZl90IHRvdGFsX3BlcmNlbj0wOworICBjdXJsX29mZl90IHRvdGFsX3RyYW5zZmVyOworICBjdXJsX29mZl90IHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyOworICBjdXJsX29mZl90IHRpbWVzcGVudDsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBpbnQgbm93aW5kZXggPSBkYXRhLT5wcm9ncmVzcy5zcGVlZGVyX2MlIENVUlJfVElNRTsKKyAgaW50IGNoZWNraW5kZXg7CisgIGludCBjb3VudGluZGV4OyAvKiBhbW91bnQgb2Ygc2Vjb25kcyBzdG9yZWQgaW4gdGhlIHNwZWVkZXIgYXJyYXkgKi8KKyAgY2hhciB0aW1lX2xlZnRbMTBdOworICBjaGFyIHRpbWVfdG90YWxbMTBdOworICBjaGFyIHRpbWVfc3BlbnRbMTBdOworICBjdXJsX29mZl90IHVsZXN0aW1hdGU9MDsKKyAgY3VybF9vZmZfdCBkbGVzdGltYXRlPTA7CisgIGN1cmxfb2ZmX3QgdG90YWxfZXN0aW1hdGU7CisgIGJvb2wgc2hvd25vdz1GQUxTRTsKKworICBub3cgPSBDdXJsX3R2bm93KCk7IC8qIHdoYXQgdGltZSBpcyBpdCAqLworCisgIC8qIFRoZSB0aW1lIHNwZW50IHNvIGZhciAoZnJvbSB0aGUgc3RhcnQpICovCisgIGRhdGEtPnByb2dyZXNzLnRpbWVzcGVudCA9CisgICAgKGRvdWJsZSkobm93LnR2X3NlYyAtIGRhdGEtPnByb2dyZXNzLnN0YXJ0LnR2X3NlYykgKworICAgIChkb3VibGUpKG5vdy50dl91c2VjIC0gZGF0YS0+cHJvZ3Jlc3Muc3RhcnQudHZfdXNlYykvMTAwMDAwMC4wOworICB0aW1lc3BlbnQgPSAoY3VybF9vZmZfdClkYXRhLT5wcm9ncmVzcy50aW1lc3BlbnQ7CisKKyAgLyogVGhlIGF2ZXJhZ2UgZG93bmxvYWQgc3BlZWQgdGhpcyBmYXIgKi8KKyAgZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCA9IChjdXJsX29mZl90KQorICAgICgoZG91YmxlKWRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQvCisgICAgIChkYXRhLT5wcm9ncmVzcy50aW1lc3BlbnQ+MD9kYXRhLT5wcm9ncmVzcy50aW1lc3BlbnQ6MSkpOworCisgIC8qIFRoZSBhdmVyYWdlIHVwbG9hZCBzcGVlZCB0aGlzIGZhciAqLworICBkYXRhLT5wcm9ncmVzcy51bHNwZWVkID0gKGN1cmxfb2ZmX3QpCisgICAgKChkb3VibGUpZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQvCisgICAgIChkYXRhLT5wcm9ncmVzcy50aW1lc3BlbnQ+MD9kYXRhLT5wcm9ncmVzcy50aW1lc3BlbnQ6MSkpOworCisgIC8qIENhbGN1bGF0aW9ucyBkb25lIGF0IG1vc3Qgb25jZSBhIHNlY29uZCwgdW5sZXNzIGVuZCBpcyByZWFjaGVkICovCisgIGlmKGRhdGEtPnByb2dyZXNzLmxhc3RzaG93ICE9IChsb25nKW5vdy50dl9zZWMpIHsKKyAgICBzaG93bm93ID0gVFJVRTsKKworICAgIGRhdGEtPnByb2dyZXNzLmxhc3RzaG93ID0gbm93LnR2X3NlYzsKKworICAgIC8qIExldCdzIGRvIHRoZSAiY3VycmVudCBzcGVlZCIgdGhpbmcsIHdoaWNoIHNob3VsZCB1c2UgdGhlIGZhc3Rlc3QKKyAgICAgICBvZiB0aGUgZGwvdWwgc3BlZWRzLiBTdG9yZSB0aGUgZmFzdGVyIHNwZWVkIGF0IGVudHJ5ICdub3dpbmRleCcuICovCisgICAgZGF0YS0+cHJvZ3Jlc3Muc3BlZWRlclsgbm93aW5kZXggXSA9CisgICAgICBkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkPmRhdGEtPnByb2dyZXNzLnVwbG9hZGVkPworICAgICAgZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZDpkYXRhLT5wcm9ncmVzcy51cGxvYWRlZDsKKworICAgIC8qIHJlbWVtYmVyIHRoZSBleGFjdCB0aW1lIGZvciB0aGlzIG1vbWVudCAqLworICAgIGRhdGEtPnByb2dyZXNzLnNwZWVkZXJfdGltZSBbIG5vd2luZGV4IF0gPSBub3c7CisKKyAgICAvKiBhZHZhbmNlIG91ciBzcGVlZGVyX2MgY291bnRlciwgd2hpY2ggaXMgaW5jcmVhc2VkIGV2ZXJ5IHRpbWUgd2UgZ2V0CisgICAgICAgaGVyZSBhbmQgd2UgZXhwZWN0IGl0IHRvIG5ldmVyIHdyYXAgYXMgMl4zMiBpcyBhIGxvdCBvZiBzZWNvbmRzISAqLworICAgIGRhdGEtPnByb2dyZXNzLnNwZWVkZXJfYysrOworCisgICAgLyogZmlndXJlIG91dCBob3cgbWFueSBpbmRleCBlbnRyaWVzIG9mIGRhdGEgd2UgaGF2ZSBzdG9yZWQgaW4gb3VyIHNwZWVkZXIKKyAgICAgICBhcnJheS4gV2l0aCBOX0VOVFJJRVMgZmlsbGVkIGluLCB3ZSBoYXZlIGFib3V0IE5fRU5UUklFUy0xIHNlY29uZHMgb2YKKyAgICAgICB0cmFuc2Zlci4gSW1hZ2luZSwgYWZ0ZXIgb25lIHNlY29uZCB3ZSBoYXZlIGZpbGxlZCBpbiB0d28gZW50cmllcywKKyAgICAgICBhZnRlciB0d28gc2Vjb25kcyB3ZSd2ZSBmaWxsZWQgaW4gdGhyZWUgZW50cmllcyBldGMuICovCisgICAgY291bnRpbmRleCA9ICgoZGF0YS0+cHJvZ3Jlc3Muc3BlZWRlcl9jPj1DVVJSX1RJTUUpPworICAgICAgICAgICAgICAgICAgQ1VSUl9USU1FOmRhdGEtPnByb2dyZXNzLnNwZWVkZXJfYykgLSAxOworCisgICAgLyogZmlyc3Qgb2YgYWxsLCB3ZSBkb24ndCBkbyB0aGlzIGlmIHRoZXJlJ3Mgbm8gY291bnRlZCBzZWNvbmRzIHlldCAqLworICAgIGlmKGNvdW50aW5kZXgpIHsKKyAgICAgIGxvbmcgc3Bhbl9tczsKKworICAgICAgLyogR2V0IHRoZSBpbmRleCBwb3NpdGlvbiB0byBjb21wYXJlIHdpdGggdGhlICdub3dpbmRleCcgcG9zaXRpb24uCisgICAgICAgICBHZXQgdGhlIG9sZGVzdCBlbnRyeSBwb3NzaWJsZS4gV2hpbGUgd2UgaGF2ZSBsZXNzIHRoYW4gQ1VSUl9USU1FCisgICAgICAgICBlbnRyaWVzLCB0aGUgZmlyc3QgZW50cnkgd2lsbCByZW1haW4gdGhlIG9sZGVzdC4gKi8KKyAgICAgIGNoZWNraW5kZXggPSAoZGF0YS0+cHJvZ3Jlc3Muc3BlZWRlcl9jPj1DVVJSX1RJTUUpPworICAgICAgICBkYXRhLT5wcm9ncmVzcy5zcGVlZGVyX2MlQ1VSUl9USU1FOjA7CisKKyAgICAgIC8qIEZpZ3VyZSBvdXQgdGhlIGV4YWN0IHRpbWUgZm9yIHRoZSB0aW1lIHNwYW4gKi8KKyAgICAgIHNwYW5fbXMgPSBDdXJsX3R2ZGlmZihub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3Muc3BlZWRlcl90aW1lW2NoZWNraW5kZXhdKTsKKyAgICAgIGlmKDAgPT0gc3Bhbl9tcykKKyAgICAgICAgc3Bhbl9tcz0xOyAvKiBhdCBsZWFzdCBvbmUgbWlsbGlzZWNvbmQgTVVTVCBoYXZlIHBhc3NlZCAqLworCisgICAgICAvKiBDYWxjdWxhdGUgdGhlIGF2ZXJhZ2Ugc3BlZWQgdGhlIGxhc3QgJ3NwYW5fbXMnIG1pbGxpc2Vjb25kcyAqLworICAgICAgeworICAgICAgICBjdXJsX29mZl90IGFtb3VudCA9IGRhdGEtPnByb2dyZXNzLnNwZWVkZXJbbm93aW5kZXhdLQorICAgICAgICAgIGRhdGEtPnByb2dyZXNzLnNwZWVkZXJbY2hlY2tpbmRleF07CisKKyAgICAgICAgaWYoYW1vdW50ID4gQ1VSTF9PRkZfVF9DKDQyOTQ5NjcpIC8qIDB4ZmZmZmZmZmYvMTAwMCAqLykKKyAgICAgICAgICAvKiB0aGUgJ2Ftb3VudCcgdmFsdWUgaXMgYmlnZ2VyIHRoYW4gd291bGQgZml0IGluIDMyIGJpdHMgaWYKKyAgICAgICAgICAgICBtdWx0aXBsaWVkIHdpdGggMTAwMCwgc28gd2UgdXNlIHRoZSBkb3VibGUgbWF0aCBmb3IgdGhpcyAqLworICAgICAgICAgIGRhdGEtPnByb2dyZXNzLmN1cnJlbnRfc3BlZWQgPSAoY3VybF9vZmZfdCkKKyAgICAgICAgICAgICgoZG91YmxlKWFtb3VudC8oKGRvdWJsZSlzcGFuX21zLzEwMDAuMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgLyogdGhlICdhbW91bnQnIHZhbHVlIGlzIHNtYWxsIGVub3VnaCB0byBmaXQgd2l0aGluIDMyIGJpdHMgZXZlbgorICAgICAgICAgICAgIHdoZW4gbXVsdGlwbGllZCB3aXRoIDEwMDAgKi8KKyAgICAgICAgICBkYXRhLT5wcm9ncmVzcy5jdXJyZW50X3NwZWVkID0gYW1vdW50KkNVUkxfT0ZGX1RfQygxMDAwKS9zcGFuX21zOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgICAvKiB0aGUgZmlyc3Qgc2Vjb25kIHdlIHVzZSB0aGUgbWFpbiBhdmVyYWdlICovCisgICAgICBkYXRhLT5wcm9ncmVzcy5jdXJyZW50X3NwZWVkID0KKyAgICAgICAgKGRhdGEtPnByb2dyZXNzLnVsc3BlZWQ+ZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCk/CisgICAgICAgIGRhdGEtPnByb2dyZXNzLnVsc3BlZWQ6ZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZDsKKworICB9IC8qIENhbGN1bGF0aW9ucyBlbmQgKi8KKworICBpZighKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19ISURFKSkgeworCisgICAgLyogcHJvZ3Jlc3MgbWV0ZXIgaGFzIG5vdCBiZWVuIHNodXQgb2ZmICovCisKKyAgICBpZihkYXRhLT5zZXQuZnByb2dyZXNzKSB7CisgICAgICAvKiBUaGVyZSdzIGEgY2FsbGJhY2sgc2V0LCBzbyB3ZSBjYWxsIHRoYXQgaW5zdGVhZCBvZiB3cml0aW5nCisgICAgICAgICBhbnl0aGluZyBvdXJzZWx2ZXMuIFRoaXMgcmVhbGx5IGlzIHRoZSB3YXkgdG8gZ28uICovCisgICAgICByZXN1bHQ9IGRhdGEtPnNldC5mcHJvZ3Jlc3MoZGF0YS0+c2V0LnByb2dyZXNzX2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKWRhdGEtPnByb2dyZXNzLnNpemVfZGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKWRhdGEtPnByb2dyZXNzLnVwbG9hZGVkKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNhbGxiYWNrIGFib3J0ZWQiKTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYoIXNob3dub3cpCisgICAgICAvKiBvbmx5IHNob3cgdGhlIGludGVybmFsIHByb2dyZXNzIG1ldGVyIG9uY2UgcGVyIHNlY29uZCAqLworICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBJZiB0aGVyZSdzIG5vIGV4dGVybmFsIGNhbGxiYWNrIHNldCwgdXNlIGludGVybmFsIGNvZGUgdG8gc2hvdworICAgICAgIHByb2dyZXNzICovCisKKyAgICBpZighKGRhdGEtPnByb2dyZXNzLmZsYWdzICYgUEdSU19IRUFERVJTX09VVCkpIHsKKyAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7CisgICAgICAgIGZwcmludGYoZGF0YS0+c2V0LmVyciwKKyAgICAgICAgICAgICAgICAiKiogUmVzdW1pbmcgdHJhbnNmZXIgZnJvbSBieXRlIHBvc2l0aW9uICUiIEZPUk1BVF9PRkZfVCAiXG4iLAorICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgIH0KKyAgICAgIGZwcmludGYoZGF0YS0+c2V0LmVyciwKKyAgICAgICAgICAgICAgIiAgJSUgVG90YWwgICAgJSUgUmVjZWl2ZWQgJSUgWGZlcmQgIEF2ZXJhZ2UgU3BlZWQgICAiCisgICAgICAgICAgICAgICJUaW1lICAgIFRpbWUgICAgIFRpbWUgIEN1cnJlbnRcbiIKKyAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERsb2FkICBVcGxvYWQgICAiCisgICAgICAgICAgICAgICJUb3RhbCAgIFNwZW50ICAgIExlZnQgIFNwZWVkXG4iKTsKKyAgICAgIGRhdGEtPnByb2dyZXNzLmZsYWdzIHw9IFBHUlNfSEVBREVSU19PVVQ7IC8qIGhlYWRlcnMgYXJlIHNob3duICovCisgICAgfQorCisgICAgLyogRmlndXJlIG91dCB0aGUgZXN0aW1hdGVkIHRpbWUgb2YgYXJyaXZhbCBmb3IgdGhlIHVwbG9hZCAqLworICAgIGlmKChkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfVUxfU0laRV9LTk9XTikgJiYKKyAgICAgICAoZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZCA+IENVUkxfT0ZGX1RfQygwKSkpIHsKKyAgICAgIHVsZXN0aW1hdGUgPSBkYXRhLT5wcm9ncmVzcy5zaXplX3VsIC8gZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZDsKKworICAgICAgaWYoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCA+IENVUkxfT0ZGX1RfQygxMDAwMCkpCisgICAgICAgIHVscGVyY2VuID0gZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQgLworICAgICAgICAgIChkYXRhLT5wcm9ncmVzcy5zaXplX3VsL0NVUkxfT0ZGX1RfQygxMDApKTsKKyAgICAgIGVsc2UgaWYoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bCA+IENVUkxfT0ZGX1RfQygwKSkKKyAgICAgICAgdWxwZXJjZW4gPSAoZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQqMTAwKSAvCisgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bDsKKyAgICB9CisKKyAgICAvKiAuLi4gYW5kIHRoZSBkb3dubG9hZCAqLworICAgIGlmKChkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfRExfU0laRV9LTk9XTikgJiYKKyAgICAgICAoZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCA+IENVUkxfT0ZGX1RfQygwKSkpIHsKKyAgICAgIGRsZXN0aW1hdGUgPSBkYXRhLT5wcm9ncmVzcy5zaXplX2RsIC8gZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZDsKKworICAgICAgaWYoZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbCA+IENVUkxfT0ZGX1RfQygxMDAwMCkpCisgICAgICAgIGRscGVyY2VuID0gZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCAvCisgICAgICAgICAgKGRhdGEtPnByb2dyZXNzLnNpemVfZGwvQ1VSTF9PRkZfVF9DKDEwMCkpOworICAgICAgZWxzZSBpZihkYXRhLT5wcm9ncmVzcy5zaXplX2RsID4gQ1VSTF9PRkZfVF9DKDApKQorICAgICAgICBkbHBlcmNlbiA9IChkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkKjEwMCkgLworICAgICAgICAgIGRhdGEtPnByb2dyZXNzLnNpemVfZGw7CisgICAgfQorCisgICAgLyogTm93IGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhlbSBpcyBzbG93ZXIgYW5kIHVzZSB0aGF0IG9uZSBmb3IgdGhlCisgICAgICAgdG90YWwgZXN0aW1hdGUhICovCisgICAgdG90YWxfZXN0aW1hdGUgPSB1bGVzdGltYXRlPmRsZXN0aW1hdGU/dWxlc3RpbWF0ZTpkbGVzdGltYXRlOworCisgICAgLyogY3JlYXRlIHRoZSB0aHJlZSB0aW1lIHN0cmluZ3MgKi8KKyAgICB0aW1lMnN0cih0aW1lX2xlZnQsIHRvdGFsX2VzdGltYXRlID4gMD8odG90YWxfZXN0aW1hdGUgLSB0aW1lc3BlbnQpOjApOworICAgIHRpbWUyc3RyKHRpbWVfdG90YWwsIHRvdGFsX2VzdGltYXRlKTsKKyAgICB0aW1lMnN0cih0aW1lX3NwZW50LCB0aW1lc3BlbnQpOworCisgICAgLyogR2V0IHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBleHBlY3RlZCB0byBnZXQgdHJhbnNmZXJyZWQgKi8KKyAgICB0b3RhbF9leHBlY3RlZF90cmFuc2ZlciA9CisgICAgICAoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX1VMX1NJWkVfS05PV04/CisgICAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV91bDpkYXRhLT5wcm9ncmVzcy51cGxvYWRlZCkrCisgICAgICAoZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgJiBQR1JTX0RMX1NJWkVfS05PV04/CisgICAgICAgZGF0YS0+cHJvZ3Jlc3Muc2l6ZV9kbDpkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkKTsKKworICAgIC8qIFdlIGhhdmUgdHJhbnNmZXJyZWQgdGhpcyBtdWNoIHNvIGZhciAqLworICAgIHRvdGFsX3RyYW5zZmVyID0gZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCArIGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkOworCisgICAgLyogR2V0IHRoZSBwZXJjZW50YWdlIG9mIGRhdGEgdHJhbnNmZXJyZWQgc28gZmFyICovCisgICAgaWYodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIgPiBDVVJMX09GRl9UX0MoMTAwMDApKQorICAgICAgdG90YWxfcGVyY2VuID0gdG90YWxfdHJhbnNmZXIgLworICAgICAgICAodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIvQ1VSTF9PRkZfVF9DKDEwMCkpOworICAgIGVsc2UgaWYodG90YWxfZXhwZWN0ZWRfdHJhbnNmZXIgPiBDVVJMX09GRl9UX0MoMCkpCisgICAgICB0b3RhbF9wZXJjZW4gPSAodG90YWxfdHJhbnNmZXIqMTAwKSAvIHRvdGFsX2V4cGVjdGVkX3RyYW5zZmVyOworCisgICAgZnByaW50ZihkYXRhLT5zZXQuZXJyLAorICAgICAgICAgICAgIlxyIgorICAgICAgICAgICAgIiUzIiBGT1JNQVRfT0ZGX1QgIiAlcyAgIgorICAgICAgICAgICAgIiUzIiBGT1JNQVRfT0ZGX1QgIiAlcyAgIgorICAgICAgICAgICAgIiUzIiBGT1JNQVRfT0ZGX1QgIiAlcyAgJXMgICVzICVzICVzICVzICVzIiwKKyAgICAgICAgICAgIHRvdGFsX3BlcmNlbiwgIC8qIDMgbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB0b3RhbCAlICovCisgICAgICAgICAgICBtYXg1ZGF0YSh0b3RhbF9leHBlY3RlZF90cmFuc2ZlciwgbWF4NVsyXSksICAgLyogdG90YWwgc2l6ZSAqLworICAgICAgICAgICAgZGxwZXJjZW4sICAgICAgLyogMyBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHJjdmQgJSAqLworICAgICAgICAgICAgbWF4NWRhdGEoZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCwgbWF4NVswXSksIC8qIHJjdmQgc2l6ZSAqLworICAgICAgICAgICAgdWxwZXJjZW4sICAgICAgLyogMyBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHhmZXIgJSAqLworICAgICAgICAgICAgbWF4NWRhdGEoZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQsIG1heDVbMV0pLCAgIC8qIHhmZXIgc2l6ZSAqLworICAgICAgICAgICAgbWF4NWRhdGEoZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCwgbWF4NVszXSksICAgIC8qIGF2cmcgZGwgc3BlZWQgKi8KKyAgICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLnVsc3BlZWQsIG1heDVbNF0pLCAgICAvKiBhdnJnIHVsIHNwZWVkICovCisgICAgICAgICAgICB0aW1lX3RvdGFsLCAgICAvKiA4IGxldHRlcnMgKi8gICAgICAgICAgICAgICAgLyogdG90YWwgdGltZSAqLworICAgICAgICAgICAgdGltZV9zcGVudCwgICAgLyogOCBsZXR0ZXJzICovICAgICAgICAgICAgICAgIC8qIHRpbWUgc3BlbnQgKi8KKyAgICAgICAgICAgIHRpbWVfbGVmdCwgICAgIC8qIDggbGV0dGVycyAqLyAgICAgICAgICAgICAgICAvKiB0aW1lIGxlZnQgKi8KKyAgICAgICAgICAgIG1heDVkYXRhKGRhdGEtPnByb2dyZXNzLmN1cnJlbnRfc3BlZWQsIG1heDVbNV0pIC8qIGN1cnJlbnQgc3BlZWQgKi8KKyAgICAgICAgICAgICk7CisKKyAgICAvKiB3ZSBmbHVzaCB0aGUgb3V0cHV0IHN0cmVhbSB0byBtYWtlIGl0IGFwcGVhciBhcyBzb29uIGFzIHBvc3NpYmxlICovCisgICAgZmZsdXNoKGRhdGEtPnNldC5lcnIpOworCisgIH0gLyogIShkYXRhLT5wcm9ncmVzcy5mbGFncyAmIFBHUlNfSElERSkgKi8KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9wcm9ncmVzcy5oIGIvY3VybC03LjI1LjAvbGliL3Byb2dyZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjYzU0MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9wcm9ncmVzcy5oCkBAIC0wLDAgKzEsNzEgQEAKKyNpZm5kZWYgX19QUk9HUkVTU19ICisjZGVmaW5lIF9fUFJPR1JFU1NfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ0aW1ldmFsLmgiCisKKwordHlwZWRlZiBlbnVtIHsKKyAgVElNRVJfTk9ORSwKKyAgVElNRVJfTkFNRUxPT0tVUCwKKyAgVElNRVJfQ09OTkVDVCwKKyAgVElNRVJfQVBQQ09OTkVDVCwKKyAgVElNRVJfUFJFVFJBTlNGRVIsCisgIFRJTUVSX1NUQVJUVFJBTlNGRVIsCisgIFRJTUVSX1BPU1RSQU5TRkVSLAorICBUSU1FUl9TVEFSVFNJTkdMRSwKKyAgVElNRVJfU1RBUlRBQ0NFUFQsCisgIFRJTUVSX1JFRElSRUNULAorICBUSU1FUl9MQVNUIC8qIG11c3QgYmUgbGFzdCAqLworfSB0aW1lcmlkOworCit2b2lkIEN1cmxfcGdyc0RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICopOwordm9pZCBDdXJsX3BncnNTdGFydE5vdyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7Cit2b2lkIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgY3VybF9vZmZfdCBzaXplKTsKK3ZvaWQgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgY3VybF9vZmZfdCBzaXplKTsKK3ZvaWQgQ3VybF9wZ3JzU2V0RG93bmxvYWRDb3VudGVyKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBjdXJsX29mZl90IHNpemUpOwordm9pZCBDdXJsX3BncnNTZXRVcGxvYWRDb3VudGVyKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBjdXJsX29mZl90IHNpemUpOworaW50IEN1cmxfcGdyc1VwZGF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKik7Cit2b2lkIEN1cmxfcGdyc1Jlc2V0VGltZXMoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOwordm9pZCBDdXJsX3BncnNUaW1lKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCB0aW1lcmlkIHRpbWVyKTsKKworCisvKiBEb24ndCBzaG93IHByb2dyZXNzIGZvciBzaXplcyBzbWFsbGVyIHRoYW46ICovCisjZGVmaW5lIExFQVNUX1NJWkVfUFJPR1JFU1MgQlVGU0laRQorCisjZGVmaW5lIFBST0dSRVNTX0RPV05MT0FEICgxPDwwKQorI2RlZmluZSBQUk9HUkVTU19VUExPQUQgICAoMTw8MSkKKyNkZWZpbmUgUFJPR1JFU1NfRE9XTl9BTkRfVVAgKFBST0dSRVNTX1VQTE9BRCB8IFBST0dSRVNTX0RPV05MT0FEKQorCisjZGVmaW5lIFBHUlNfU0hPV19ETCAoMTw8MCkKKyNkZWZpbmUgUEdSU19TSE9XX1VMICgxPDwxKQorI2RlZmluZSBQR1JTX0RPTkVfREwgKDE8PDIpCisjZGVmaW5lIFBHUlNfRE9ORV9VTCAoMTw8MykKKyNkZWZpbmUgUEdSU19ISURFICAgICgxPDw0KQorI2RlZmluZSBQR1JTX1VMX1NJWkVfS05PV04gKDE8PDUpCisjZGVmaW5lIFBHUlNfRExfU0laRV9LTk9XTiAoMTw8NikKKworI2RlZmluZSBQR1JTX0hFQURFUlNfT1VUICgxPDw3KSAvKiBzZXQgd2hlbiB0aGUgaGVhZGVycyBoYXZlIGJlZW4gd3JpdHRlbiAqLworCisKKyNlbmRpZiAvKiBfX1BST0dSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9xc3NsLmMgYi9jdXJsLTcuMjUuMC9saWIvcXNzbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MmRmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvcXNzbC5jCkBAIC0wLDAgKzEsNTAxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfUVNPU1NMCisKKyNpbmNsdWRlIDxxc29zc2wuaD4KKworI2lmZGVmIEhBVkVfTElNSVRTX0gKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJxc3NsLmgiCisjaW5jbHVkZSAic3NsZ2VuLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLworI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisKK2ludCBDdXJsX3Fzb3NzbF9pbml0KHZvaWQpCisKK3sKKyAgLyogTm90aGluZyB0byBkbyBoZXJlLiBXZSBtdXN0IGhhdmUgY29ubmVjdGlvbiBkYXRhIHRvIGluaXRpYWxpemUgc3NsLCBzbworICAgKiBkZWZlci4KKyAgICovCisKKyAgcmV0dXJuIDE7Cit9CisKKwordm9pZCBDdXJsX3Fzb3NzbF9jbGVhbnVwKHZvaWQpCisKK3sKKyAgLyogTm90aGluZyB0byBkby4gKi8KK30KKworCitzdGF0aWMgQ1VSTGNvZGUgQ3VybF9xc29zc2xfaW5pdF9zZXNzaW9uKHN0cnVjdCBTZXNzaW9uSGFuZGxlICogZGF0YSkKKworeworICBpbnQgcmM7CisgIGNoYXIgKiBjZXJ0bmFtZTsKKyAgU1NMSW5pdCBpbml0c3RyOworICBTU0xJbml0QXBwIGluaXRhcHBzdHI7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgam9iIGZvciBTU0wgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHBhcmFtZXRlcnMuCisgICAqIFFzb1NTTCBvZmZlcnMgdHdvIHdheXMgdG8gZG8gaXQ6IFNTTF9Jbml0X0FwcGxpY2F0aW9uKCkgdGhhdCB1c2VzIGFuCisgICAqICBhcHBsaWNhdGlvbiBpZGVudGlmaWVyIHRvIHNlbGVjdCBjZXJ0aWZpY2F0ZXMgaW4gdGhlIG1haW4gY2VydGlmaWNhdGUKKyAgICogIHN0b3JlLCBhbmQgU1NMX0luaXQoKSB0aGF0IHVzZXMgbmFtZWQga2V5cmluZyBmaWxlcyBhbmQgYSBwYXNzd29yZC4KKyAgICogSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgZGlmZmVyZW50IGtleXJpbmdzIGZvciB0aGUgQ0FzIGFuZCB0aGUKKyAgICogIGxvY2FsIGNlcnRpZmljYXRlLiBXZSB0aHVzIHVzZSB0aGUgY2VydGlmaWNhdGUgbmFtZSB0byBpZGVudGlmeSB0aGUKKyAgICogIGtleXJpbmcgaWYgZ2l2ZW4sIGVsc2UgdGhlIENBIGZpbGUgbmFtZS4KKyAgICogSWYgdGhlIGtleSBmaWxlIG5hbWUgaXMgZ2l2ZW4sIGl0IGlzIHRha2VuIGFzIHRoZSBwYXNzd29yZCBmb3IgdGhlCisgICAqICBrZXlyaW5nIGluIGNlcnRpZmljYXRlIGZpbGUuCisgICAqIFdlIGZpcnN0IHRyeSB0byBTU0xfSW5pdF9BcHBsaWNhdGlvbigpLCB0aGVuIFNTTF9Jbml0KCkgaWYgaXQgZmFpbGVkLgorICAgKi8KKworICBjZXJ0bmFtZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdOworCisgIGlmKCFjZXJ0bmFtZSkgeworICAgIGNlcnRuYW1lID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV07CisKKyAgICBpZighY2VydG5hbWUpCisgICAgICByZXR1cm4gQ1VSTEVfT0s7ICAgICAgICAgIC8qIFVzZSBwcmV2aW91cyBzZXR1cC4gKi8KKyAgICB9CisKKyAgbWVtc2V0KChjaGFyICopICZpbml0YXBwc3RyLCAwLCBzaXplb2YgaW5pdGFwcHN0cik7CisgIGluaXRhcHBzdHIuYXBwbGljYXRpb25JRCA9IGNlcnRuYW1lOworICBpbml0YXBwc3RyLmFwcGxpY2F0aW9uSURMZW4gPSBzdHJsZW4oY2VydG5hbWUpOworICBpbml0YXBwc3RyLnByb3RvY29sID0gU1NMX1ZFUlNJT05fQ1VSUkVOVDsgICAgLyogVExTVjEgY29tcGF0LiBTU0xWWzIzXS4gKi8KKyAgaW5pdGFwcHN0ci5zZXNzaW9uVHlwZSA9IFNTTF9SRUdJU1RFUkVEX0FTX0NMSUVOVDsKKyAgcmMgPSBTU0xfSW5pdF9BcHBsaWNhdGlvbigmaW5pdGFwcHN0cik7CisKKyAgaWYocmMgPT0gU1NMX0VSUk9SX05PVF9SRUdJU1RFUkVEKSB7CisgICAgaW5pdHN0ci5rZXlyaW5nRmlsZU5hbWUgPSBjZXJ0bmFtZTsKKyAgICBpbml0c3RyLmtleXJpbmdQYXNzd29yZCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV07CisgICAgaW5pdHN0ci5jaXBoZXJTdWl0ZUxpc3QgPSBOVUxMOyAgICAvKiBVc2UgZGVmYXVsdC4gKi8KKyAgICBpbml0c3RyLmNpcGhlclN1aXRlTGlzdExlbiA9IDA7CisgICAgcmMgPSBTU0xfSW5pdCgmaW5pdHN0cik7CisgICAgfQorCisgIHN3aXRjaCAocmMpIHsKKworICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBlcnJvci4gKi8KKyAgICBicmVhazsKKworICBjYXNlIFNTTF9FUlJPUl9JTzoKKyAgICBmYWlsZihkYXRhLCAiU1NMX0luaXQoKSBJL08gZXJyb3I6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisKKyAgY2FzZSBTU0xfRVJST1JfQkFEX0NJUEhFUl9TVUlURToKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NJUEhFUjsKKworICBjYXNlIFNTTF9FUlJPUl9LRVlQQVNTV09SRF9FWFBJUkVEOgorICBjYXNlIFNTTF9FUlJPUl9OT1RfUkVHSVNURVJFRDoKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisKKyAgY2FzZSBTU0xfRVJST1JfTk9fS0VZUklORzoKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVDsKKworICBjYXNlIFNTTF9FUlJPUl9DRVJUX0VYUElSRUQ6CisgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKKworICBkZWZhdWx0OgorICAgIGZhaWxmKGRhdGEsICJTU0xfSW5pdCgpOiAlcyIsIFNTTF9TdHJlcnJvcihyYywgTlVMTCkpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworCitzdGF0aWMgQ1VSTGNvZGUgQ3VybF9xc29zc2xfY3JlYXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4sIGludCBzb2NraW5kZXgpCisKK3sKKyAgU1NMSGFuZGxlICogaDsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKiBjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworCisgIGggPSBTU0xfQ3JlYXRlKGNvbm4tPnNvY2tbc29ja2luZGV4XSwgU1NMX0VOQ1JZUFQpOworCisgIGlmKCFoKSB7CisgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNTTF9DcmVhdGUoKSBJL08gZXJyb3I6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICBjb25uc3NsLT5oYW5kbGUgPSBoOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKworc3RhdGljIGludCBDdXJsX3Fzb3NzbF90cmFwX2NlcnQoU1NMSGFuZGxlICogaCkKKworeworICByZXR1cm4gMTsgICAgICAgLyogQWNjZXB0IGNlcnRpZmljYXRlLiAqLworfQorCisKK3N0YXRpYyBDVVJMY29kZSBDdXJsX3Fzb3NzbF9oYW5kc2hha2Uoc3RydWN0IGNvbm5lY3RkYXRhICogY29ubiwgaW50IHNvY2tpbmRleCkKKworeworICBpbnQgcmM7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICogZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICogY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgU1NMSGFuZGxlICogaCA9IGNvbm5zc2wtPmhhbmRsZTsKKyAgbG9uZyB0aW1lb3V0X21zOworCisgIGgtPmV4aXRQZ20gPSBOVUxMOworCisgIGlmKCFkYXRhLT5zZXQuc3NsLnZlcmlmeWhvc3QpCisgICAgaC0+ZXhpdFBnbSA9IEN1cmxfcXNvc3NsX3RyYXBfY2VydDsKKworICAvKiBmaWd1cmUgb3V0IGhvdyBsb25nIHRpbWUgd2Ugc2hvdWxkIHdhaXQgYXQgbWF4aW11bSAqLworICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKKworICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgIC8qIHRpbWUtb3V0LCBiYWlsIG91dCwgZ28gaG9tZSAqLworICAgIGZhaWxmKGRhdGEsICJDb25uZWN0aW9uIHRpbWUtb3V0Iik7CisgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgfQorCisgIC8qIFNTTF9IYW5kc2hha2UoKSB0aW1lb3V0IHJlc29sdXRpb24gaXMgc2Vjb25kLCBzbyByb3VuZCB1cC4gKi8KKyAgaC0+dGltZW91dCA9ICh0aW1lb3V0X21zICsgMTAwMCAtIDEpIC8gMTAwMDsKKworICAvKiBTZXQtdXAgcHJvdG9jb2wuICovCisKKyAgc3dpdGNoIChkYXRhLT5zZXQuc3NsLnZlcnNpb24pIHsKKworICBkZWZhdWx0OgorICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgorICAgIGgtPnByb3RvY29sID0gU1NMX1ZFUlNJT05fQ1VSUkVOVDsgICAgICAgICAgLyogVExTVjEgY29tcGF0LiBTU0xWWzIzXS4gKi8KKyAgICBicmVhazsKKworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKKyAgICBoLT5wcm90b2NvbCA9IFRMU19WRVJTSU9OXzE7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6CisgICAgaC0+cHJvdG9jb2wgPSBTU0xfVkVSU0lPTl8yOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgorICAgIGgtPnByb3RvY29sID0gU1NMX1ZFUlNJT05fMzsKKyAgICBicmVhazsKKyAgfQorCisgIHJjID0gU1NMX0hhbmRzaGFrZShoLCBTU0xfSEFORFNIQUtFX0FTX0NMSUVOVCk7CisKKyAgc3dpdGNoIChyYykgeworCisgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGVycm9yLiAqLworICAgIGJyZWFrOworCisgIGNhc2UgU1NMX0VSUk9SX0JBRF9DRVJUSUZJQ0FURToKKyAgY2FzZSBTU0xfRVJST1JfQkFEX0NFUlRfU0lHOgorICBjYXNlIFNTTF9FUlJPUl9OT1RfVFJVU1RFRF9ST09UOgorICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisKKyAgY2FzZSBTU0xfRVJST1JfQkFEX0NJUEhFUl9TVUlURToKKyAgY2FzZSBTU0xfRVJST1JfTk9fQ0lQSEVSUzoKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NJUEhFUjsKKworICBjYXNlIFNTTF9FUlJPUl9DRVJUSUZJQ0FURV9SRUpFQ1RFRDoKKyAgY2FzZSBTU0xfRVJST1JfQ0VSVF9FWFBJUkVEOgorICBjYXNlIFNTTF9FUlJPUl9OT19DRVJUSUZJQ0FURToKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworCisgIGNhc2UgU1NMX0VSUk9SX0lPOgorICAgIGZhaWxmKGRhdGEsICJTU0xfSGFuZHNoYWtlKCkgSS9PIGVycm9yOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworCisgIGRlZmF1bHQ6CisgICAgZmFpbGYoZGF0YSwgIlNTTF9IYW5kc2hha2UoKTogJXMiLCBTU0xfU3RyZXJyb3IocmMsIE5VTEwpKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKworc3RhdGljIEN1cmxfcmVjdiBxc29zc2xfcmVjdjsKK3N0YXRpYyBDdXJsX3NlbmQgcXNvc3NsX3NlbmQ7CisKK0NVUkxjb2RlIEN1cmxfcXNvc3NsX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICogY29ubiwgaW50IHNvY2tpbmRleCkKKworeworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqIGRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqIGNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIGludCByYzsKKworICByYyA9IEN1cmxfcXNvc3NsX2luaXRfc2Vzc2lvbihkYXRhKTsKKworICBpZihyYyA9PSBDVVJMRV9PSykgeworICAgIHJjID0gQ3VybF9xc29zc2xfY3JlYXRlKGNvbm4sIHNvY2tpbmRleCk7CisKKyAgICBpZihyYyA9PSBDVVJMRV9PSykKKyAgICAgIHJjID0gQ3VybF9xc29zc2xfaGFuZHNoYWtlKGNvbm4sIHNvY2tpbmRleCk7CisgICAgZWxzZSB7CisgICAgICBTU0xfRGVzdHJveShjb25uc3NsLT5oYW5kbGUpOworICAgICAgY29ubnNzbC0+aGFuZGxlID0gTlVMTDsKKyAgICAgIGNvbm5zc2wtPnVzZSA9IEZBTFNFOworICAgICAgY29ubnNzbC0+c3RhdGUgPSBzc2xfY29ubmVjdGlvbl9ub25lOworICAgIH0KKyAgfQorICBpZihyYyA9PSBDVVJMRV9PSykgeworICAgIGNvbm5zc2wtPnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7CisgICAgY29ubi0+cmVjdltzb2NraW5kZXhdID0gcXNvc3NsX3JlY3Y7CisgICAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gcXNvc3NsX3NlbmQ7CisgIH0KKworICByZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGludCBDdXJsX3Fzb3NzbF9jbG9zZV9vbmUoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKiBjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IFNlc3Npb25IYW5kbGUgKiBkYXRhKQorCit7CisgIGludCByYzsKKworICBpZighY29ubi0+aGFuZGxlKQorICAgIHJldHVybiAwOworCisgIHJjID0gU1NMX0Rlc3Ryb3koY29ubi0+aGFuZGxlKTsKKworICBpZihyYykgeworICAgIGlmKHJjID09IFNTTF9FUlJPUl9JTykgeworICAgICAgZmFpbGYoZGF0YSwgIlNTTF9EZXN0cm95KCkgSS9PIGVycm9yOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogQW4gU1NMIGVycm9yLiAqLworICAgIGZhaWxmKGRhdGEsICJTU0xfRGVzdHJveSgpIHJldHVybmVkIGVycm9yICVzIiwgU1NMX1N0cmVycm9yKHJjLCBOVUxMKSk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgY29ubi0+aGFuZGxlID0gTlVMTDsKKyAgcmV0dXJuIDA7Cit9CisKKwordm9pZCBDdXJsX3Fzb3NzbF9jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCisKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKworICBpZihjb25uc3NsLT51c2UpCisgICAgKHZvaWQpIEN1cmxfcXNvc3NsX2Nsb3NlX29uZShjb25uc3NsLCBkYXRhKTsKK30KKworCitpbnQgQ3VybF9xc29zc2xfY2xvc2VfYWxsKHN0cnVjdCBTZXNzaW9uSGFuZGxlICogZGF0YSkKKworeworICAvKiBVbmltcGxlbWVudGVkLiAqLworICAodm9pZCkgZGF0YTsKKyAgcmV0dXJuIDA7Cit9CisKKworaW50IEN1cmxfcXNvc3NsX3NodXRkb3duKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4sIGludCBzb2NraW5kZXgpCisKK3sKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKiBjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHNzaXplX3QgbnJlYWQ7CisgIGludCB3aGF0OworICBpbnQgcmM7CisgIGNoYXIgYnVmWzEyMF07CisKKyAgaWYoIWNvbm5zc2wtPmhhbmRsZSkKKyAgICByZXR1cm4gMDsKKworICBpZihkYXRhLT5zZXQuZnRwX2NjYyAhPSBDVVJMRlRQU1NMX0NDQ19BQ1RJVkUpCisgICAgcmV0dXJuIDA7CisKKyAgaWYoQ3VybF9xc29zc2xfY2xvc2Vfb25lKGNvbm5zc2wsIGRhdGEpKQorICAgIHJldHVybiAtMTsKKworICByYyA9IDA7CisKKyAgd2hhdCA9IEN1cmxfc29ja2V0X3JlYWR5KGNvbm4tPnNvY2tbc29ja2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU09DS0VUX0JBRCwgU1NMX1NIVVRET1dOX1RJTUVPVVQpOworCisgIGZvcig7OykgeworICAgIGlmKHdoYXQgPCAwKSB7CisgICAgICAvKiBhbnl0aGluZyB0aGF0IGdldHMgaGVyZSBpcyBmYXRhbGx5IGJhZCAqLworICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CisgICAgICByYyA9IC0xOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYoIXdoYXQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRpbWVvdXQgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJTU0wgc2h1dGRvd24gdGltZW91dCIpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogU29tZXRoaW5nIHRvIHJlYWQsIGxldCdzIGRvIGl0IGFuZCBob3BlIHRoYXQgaXQgaXMgdGhlIGNsb3NlCisgICAgICAgbm90aWZ5IGFsZXJ0IGZyb20gdGhlIHNlcnZlci4gTm8gd2F5IHRvIFNTTF9SZWFkIG5vdywgc28gdXNlIHJlYWQoKS4gKi8KKworICAgIG5yZWFkID0gcmVhZChjb25uLT5zb2NrW3NvY2tpbmRleF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisgICAgaWYobnJlYWQgPCAwKSB7CisgICAgICBmYWlsZihkYXRhLCAicmVhZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmMgPSAtMTsKKyAgICB9CisKKyAgICBpZihucmVhZCA8PSAwKQorICAgICAgYnJlYWs7CisKKyAgICB3aGF0ID0gQ3VybF9zb2NrZXRfcmVhZHkoY29ubi0+c29ja1tzb2NraW5kZXhdLCBDVVJMX1NPQ0tFVF9CQUQsIDApOworICB9CisKKyAgcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHFzb3NzbF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqIGN1cmxjb2RlKQorCit7CisgIC8qIFNTTF9Xcml0ZSgpIGlzIHNhaWQgdG8gcmV0dXJuICdpbnQnIHdoaWxlIHdyaXRlKCkgYW5kIHNlbmQoKSByZXR1cm5zCisgICAgICdzaXplX3QnICovCisgIGludCByYzsKKworICByYyA9IFNTTF9Xcml0ZShjb25uLT5zc2xbc29ja2luZGV4XS5oYW5kbGUsICh2b2lkICopIG1lbSwgKGludCkgbGVuKTsKKworICBpZihyYyA8IDApIHsKKyAgICBzd2l0Y2gocmMpIHsKKworICAgIGNhc2UgU1NMX0VSUk9SX0JBRF9TVEFURToKKyAgICAgIC8qIFRoZSBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZTsgdGhlIHNhbWUgU1NMIEkvTyBmdW5jdGlvbgorICAgICAgICAgc2hvdWxkIGJlIGNhbGxlZCBhZ2FpbiBsYXRlci4gVGhpcyBpcyBiYXNpY2FsbHkgYW4gRVdPVUxEQkxPQ0sKKyAgICAgICAgIGVxdWl2YWxlbnQuICovCisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKKyAgICAgIHJldHVybiAtMTsKKworICAgIGNhc2UgU1NMX0VSUk9SX0lPOgorICAgICAgc3dpdGNoIChlcnJubykgeworICAgICAgY2FzZSBFV09VTERCTE9DSzoKKyAgICAgIGNhc2UgRUlOVFI6CisgICAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOworICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNTTF9Xcml0ZSgpIEkvTyBlcnJvcjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBBbiBTU0wgZXJyb3IuICovCisgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNTTF9Xcml0ZSgpIHJldHVybmVkIGVycm9yICVzIiwKKyAgICAgICAgICBTU0xfU3RyZXJyb3IocmMsIE5VTEwpKTsKKyAgICAqY3VybGNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHJldHVybiAoc3NpemVfdCkgcmM7IC8qIG51bWJlciBvZiBieXRlcyAqLworfQorCisKK3N0YXRpYyBzc2l6ZV90IHFzb3NzbF9yZWN2KHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4sIGludCBudW0sIGNoYXIgKiBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmZmVyc2l6ZSwgQ1VSTGNvZGUgKiBjdXJsY29kZSkKKworeworICBjaGFyIGVycm9yX2J1ZmZlclsxMjBdOyAvKiBPcGVuU1NMIGRvY3VtZW50cyB0aGF0IHRoaXMgbXVzdCBiZSBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFzdCAxMjAgYnl0ZXMgbG9uZy4gKi8KKyAgdW5zaWduZWQgbG9uZyBzc2xlcnJvcjsKKyAgaW50IGJ1ZmZzaXplOworICBpbnQgbnJlYWQ7CisKKyAgYnVmZnNpemUgPSAoYnVmZmVyc2l6ZSA+IChzaXplX3QpSU5UX01BWCkgPyBJTlRfTUFYIDogKGludClidWZmZXJzaXplOworICBucmVhZCA9IFNTTF9SZWFkKGNvbm4tPnNzbFtudW1dLmhhbmRsZSwgYnVmLCBidWZmc2l6ZSk7CisKKyAgaWYobnJlYWQgPCAwKSB7CisgICAgLyogZmFpbGVkIFNTTF9yZWFkICovCisKKyAgICBzd2l0Y2ggKG5yZWFkKSB7CisKKyAgICBjYXNlIFNTTF9FUlJPUl9CQURfU1RBVEU6CisgICAgICAvKiB0aGVyZSdzIGRhdGEgcGVuZGluZywgcmUtaW52b2tlIFNTTF9SZWFkKCkuICovCisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9BR0FJTjsKKyAgICAgIHJldHVybiAtMTsKKworICAgIGNhc2UgU1NMX0VSUk9SX0lPOgorICAgICAgc3dpdGNoIChlcnJubykgeworICAgICAgY2FzZSBFV09VTERCTE9DSzoKKyAgICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfQUdBSU47CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMX1JlYWQoKSBJL08gZXJyb3I6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisKKyAgICBkZWZhdWx0OgorICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNTTCByZWFkIGVycm9yOiAlcyIsIFNTTF9TdHJlcnJvcihucmVhZCwgTlVMTCkpOworICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIChzc2l6ZV90KSBucmVhZDsKK30KKworCitzaXplX3QgQ3VybF9xc29zc2xfdmVyc2lvbihjaGFyICogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKworeworICBzdHJuY3B5KGJ1ZmZlciwgIklCTSBPUy80MDAgU1NMIiwgc2l6ZSk7CisgIHJldHVybiBzdHJsZW4oYnVmZmVyKTsKK30KKworCitpbnQgQ3VybF9xc29zc2xfY2hlY2tfY3huKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGN4bikKKworeworICBpbnQgZXJyOworICBpbnQgZXJybGVuOworCisgIC8qIFRoZSBvbmx5IHRoaW5nIHRoYXQgY2FuIGJlIHRlc3RlZCBoZXJlIGlzIGF0IHRoZSBzb2NrZXQgbGV2ZWwuICovCisKKyAgaWYoIWN4bi0+c3NsW0ZJUlNUU09DS0VUXS5oYW5kbGUpCisgICAgcmV0dXJuIDA7IC8qIGNvbm5lY3Rpb24gaGFzIGJlZW4gY2xvc2VkICovCisKKyAgZXJyID0gMDsKKyAgZXJybGVuID0gc2l6ZW9mIGVycjsKKworICBpZihnZXRzb2Nrb3B0KGN4bi0+c29ja1tGSVJTVFNPQ0tFVF0sIFNPTF9TT0NLRVQsIFNPX0VSUk9SLAorICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSAmZXJyLCAmZXJybGVuKSB8fAorICAgICAgZXJybGVuICE9IHNpemVvZiBlcnIgfHwgZXJyKQorICAgIHJldHVybiAwOyAvKiBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZCAqLworCisgIHJldHVybiAtMTsgIC8qIGNvbm5lY3Rpb24gc3RhdHVzIHVua25vd24gKi8KK30KKworI2VuZGlmIC8qIFVTRV9RU09TU0wgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9xc3NsLmggYi9jdXJsLTcuMjUuMC9saWIvcXNzbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MjNjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvcXNzbC5oCkBAIC0wLDAgKzEsNjEgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfUVNTTF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1FTU0xfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworLyoKKyAqIFRoaXMgaGVhZGVyIHNob3VsZCBvbmx5IGJlIG5lZWRlZCB0byBnZXQgaW5jbHVkZWQgYnkgc3NsZ2VuLmMgYW5kIHFzc2wuYworICovCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisKKyNpZmRlZiBVU0VfUVNPU1NMCitpbnQgQ3VybF9xc29zc2xfaW5pdCh2b2lkKTsKK3ZvaWQgQ3VybF9xc29zc2xfY2xlYW51cCh2b2lkKTsKK0NVUkxjb2RlIEN1cmxfcXNvc3NsX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICogY29ubiwgaW50IHNvY2tpbmRleCk7Cit2b2lkIEN1cmxfcXNvc3NsX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCk7CitpbnQgQ3VybF9xc29zc2xfY2xvc2VfYWxsKHN0cnVjdCBTZXNzaW9uSGFuZGxlICogZGF0YSk7CitpbnQgQ3VybF9xc29zc2xfc2h1dGRvd24oc3RydWN0IGNvbm5lY3RkYXRhICogY29ubiwgaW50IHNvY2tpbmRleCk7CisKK3NpemVfdCBDdXJsX3Fzb3NzbF92ZXJzaW9uKGNoYXIgKiBidWZmZXIsIHNpemVfdCBzaXplKTsKK2ludCBDdXJsX3Fzb3NzbF9jaGVja19jeG4oc3RydWN0IGNvbm5lY3RkYXRhICogY3huKTsKKworLyogQVBJIHNldHVwIGZvciBRc29TU0wgKi8KKyNkZWZpbmUgY3VybHNzbF9pbml0IEN1cmxfcXNvc3NsX2luaXQKKyNkZWZpbmUgY3VybHNzbF9jbGVhbnVwIEN1cmxfcXNvc3NsX2NsZWFudXAKKyNkZWZpbmUgY3VybHNzbF9jb25uZWN0IEN1cmxfcXNvc3NsX2Nvbm5lY3QKKworLyogIE5vIHNlc3Npb24gaGFuZGxpbmcgZm9yIFFzb1NTTCAqLworI2RlZmluZSBjdXJsc3NsX3Nlc3Npb25fZnJlZSh4KSBDdXJsX25vcF9zdG10CisjZGVmaW5lIGN1cmxzc2xfY2xvc2VfYWxsIEN1cmxfcXNvc3NsX2Nsb3NlX2FsbAorI2RlZmluZSBjdXJsc3NsX2Nsb3NlIEN1cmxfcXNvc3NsX2Nsb3NlCisjZGVmaW5lIGN1cmxzc2xfc2h1dGRvd24oeCx5KSBDdXJsX3Fzb3NzbF9zaHV0ZG93bih4LHkpCisjZGVmaW5lIGN1cmxzc2xfc2V0X2VuZ2luZSh4LHkpIENVUkxFX05PVF9CVUlMVF9JTgorI2RlZmluZSBjdXJsc3NsX3NldF9lbmdpbmVfZGVmYXVsdCh4KSBDVVJMRV9OT1RfQlVJTFRfSU4KKyNkZWZpbmUgY3VybHNzbF9lbmdpbmVzX2xpc3QoeCkgTlVMTAorI2RlZmluZSBjdXJsc3NsX3ZlcnNpb24gQ3VybF9xc29zc2xfdmVyc2lvbgorI2RlZmluZSBjdXJsc3NsX2NoZWNrX2N4bih4KSBDdXJsX3Fzb3NzbF9jaGVja19jeG4oeCkKKyNkZWZpbmUgY3VybHNzbF9kYXRhX3BlbmRpbmcoeCx5KSAwCisjZW5kaWYgLyogVVNFX1FTT1NTTCAqLworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfUVNTTF9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvcmF3c3RyLmMgYi9jdXJsLTcuMjUuMC9saWIvcmF3c3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmMmZlNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9yYXdzdHIuYwpAQCAtMCwwICsxLDE0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSAicmF3c3RyLmgiCisKKy8qIFBvcnRhYmxlLCBjb25zaXN0ZW50IHRvdXBwZXIgKHJlbWVtYmVyIEVCQ0RJQykuIERvIG5vdCB1c2UgdG91cHBlcigpIGJlY2F1c2UKKyAgIGl0cyBiZWhhdmlvciBpcyBhbHRlcmVkIGJ5IHRoZSBjdXJyZW50IGxvY2FsZS4gKi8KK2NoYXIgQ3VybF9yYXdfdG91cHBlcihjaGFyIGluKQoreworICBzd2l0Y2ggKGluKSB7CisgIGNhc2UgJ2EnOgorICAgIHJldHVybiAnQSc7CisgIGNhc2UgJ2InOgorICAgIHJldHVybiAnQic7CisgIGNhc2UgJ2MnOgorICAgIHJldHVybiAnQyc7CisgIGNhc2UgJ2QnOgorICAgIHJldHVybiAnRCc7CisgIGNhc2UgJ2UnOgorICAgIHJldHVybiAnRSc7CisgIGNhc2UgJ2YnOgorICAgIHJldHVybiAnRic7CisgIGNhc2UgJ2cnOgorICAgIHJldHVybiAnRyc7CisgIGNhc2UgJ2gnOgorICAgIHJldHVybiAnSCc7CisgIGNhc2UgJ2knOgorICAgIHJldHVybiAnSSc7CisgIGNhc2UgJ2onOgorICAgIHJldHVybiAnSic7CisgIGNhc2UgJ2snOgorICAgIHJldHVybiAnSyc7CisgIGNhc2UgJ2wnOgorICAgIHJldHVybiAnTCc7CisgIGNhc2UgJ20nOgorICAgIHJldHVybiAnTSc7CisgIGNhc2UgJ24nOgorICAgIHJldHVybiAnTic7CisgIGNhc2UgJ28nOgorICAgIHJldHVybiAnTyc7CisgIGNhc2UgJ3AnOgorICAgIHJldHVybiAnUCc7CisgIGNhc2UgJ3EnOgorICAgIHJldHVybiAnUSc7CisgIGNhc2UgJ3InOgorICAgIHJldHVybiAnUic7CisgIGNhc2UgJ3MnOgorICAgIHJldHVybiAnUyc7CisgIGNhc2UgJ3QnOgorICAgIHJldHVybiAnVCc7CisgIGNhc2UgJ3UnOgorICAgIHJldHVybiAnVSc7CisgIGNhc2UgJ3YnOgorICAgIHJldHVybiAnVic7CisgIGNhc2UgJ3cnOgorICAgIHJldHVybiAnVyc7CisgIGNhc2UgJ3gnOgorICAgIHJldHVybiAnWCc7CisgIGNhc2UgJ3knOgorICAgIHJldHVybiAnWSc7CisgIGNhc2UgJ3onOgorICAgIHJldHVybiAnWic7CisgIH0KKyAgcmV0dXJuIGluOworfQorCisvKgorICogQ3VybF9yYXdfZXF1YWwoKSBpcyBmb3IgZG9pbmcgInJhdyIgY2FzZSBpbnNlbnNpdGl2ZSBzdHJpbmdzLiBUaGlzIGlzIG1lYW50CisgKiB0byBiZSBsb2NhbGUgaW5kZXBlbmRlbnQgYW5kIG9ubHkgY29tcGFyZSBzdHJpbmdzIHdlIGtub3cgYXJlIHNhZmUgZm9yCisgKiB0aGlzLiAgU2VlIGh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9ibG9nLzIwMDgvMTAvMTUvc3RyY2FzZWNtcC1pbi10dXJraXNoLyBmb3IKKyAqIHNvbWUgZnVydGhlciBleHBsYW5hdGlvbiB0byB3aHkgdGhpcyBmdW5jdGlvbiBpcyBuZWNlc3NhcnkuCisgKgorICogVGhlIGZ1bmN0aW9uIGlzIGNhcGFibGUgb2YgY29tcGFyaW5nIGEteiBjYXNlIGluc2Vuc2l0aXZlbHkgZXZlbiBmb3IKKyAqIG5vbi1hc2NpaS4KKyAqLworCitpbnQgQ3VybF9yYXdfZXF1YWwoY29uc3QgY2hhciAqZmlyc3QsIGNvbnN0IGNoYXIgKnNlY29uZCkKK3sKKyAgd2hpbGUoKmZpcnN0ICYmICpzZWNvbmQpIHsKKyAgICBpZihDdXJsX3Jhd190b3VwcGVyKCpmaXJzdCkgIT0gQ3VybF9yYXdfdG91cHBlcigqc2Vjb25kKSkKKyAgICAgIC8qIGdldCBvdXQgb2YgdGhlIGxvb3AgYXMgc29vbiBhcyB0aGV5IGRvbid0IG1hdGNoICovCisgICAgICBicmVhazsKKyAgICBmaXJzdCsrOworICAgIHNlY29uZCsrOworICB9CisgIC8qIHdlIGRvIHRoZSBjb21wYXJpc29uIGhlcmUgKHBvc3NpYmx5IGFnYWluKSwganVzdCB0byBtYWtlIHN1cmUgdGhhdCBpZiB0aGUKKyAgICAgbG9vcCBhYm92ZSBpcyBza2lwcGVkIGJlY2F1c2Ugb25lIG9mIHRoZSBzdHJpbmdzIHJlYWNoZWQgemVybywgd2UgbXVzdCBub3QKKyAgICAgcmV0dXJuIHRoaXMgYXMgYSBzdWNjZXNzZnVsIG1hdGNoICovCisgIHJldHVybiAoQ3VybF9yYXdfdG91cHBlcigqZmlyc3QpID09IEN1cmxfcmF3X3RvdXBwZXIoKnNlY29uZCkpOworfQorCitpbnQgQ3VybF9yYXdfbmVxdWFsKGNvbnN0IGNoYXIgKmZpcnN0LCBjb25zdCBjaGFyICpzZWNvbmQsIHNpemVfdCBtYXgpCit7CisgIHdoaWxlKCpmaXJzdCAmJiAqc2Vjb25kICYmIG1heCkgeworICAgIGlmKEN1cmxfcmF3X3RvdXBwZXIoKmZpcnN0KSAhPSBDdXJsX3Jhd190b3VwcGVyKCpzZWNvbmQpKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgbWF4LS07CisgICAgZmlyc3QrKzsKKyAgICBzZWNvbmQrKzsKKyAgfQorICBpZigwID09IG1heCkKKyAgICByZXR1cm4gMTsgLyogdGhleSBhcmUgZXF1YWwgdGhpcyBmYXIgKi8KKworICByZXR1cm4gQ3VybF9yYXdfdG91cHBlcigqZmlyc3QpID09IEN1cmxfcmF3X3RvdXBwZXIoKnNlY29uZCk7Cit9CisKKy8qIENvcHkgYW4gdXBwZXIgY2FzZSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgZnJvbSBzcmMgdG8gZGVzdC4gIFRoZQorICogc3RyaW5ncyBtYXkgb3ZlcmxhcC4gIE5vIG1vcmUgdGhhbiBuIGNoYXJhY3RlcnMgb2YgdGhlIHN0cmluZyBhcmUgY29waWVkCisgKiAoaW5jbHVkaW5nIGFueSBOVUwpIGFuZCB0aGUgZGVzdGluYXRpb24gc3RyaW5nIHdpbGwgTk9UIGJlCisgKiBOVUwtdGVybWluYXRlZCBpZiB0aGF0IGxpbWl0IGlzIHJlYWNoZWQuCisgKi8KK3ZvaWQgQ3VybF9zdHJudG91cHBlcihjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKQoreworICBpZihuIDwgMSkKKyAgICByZXR1cm47CisKKyAgZG8geworICAgICpkZXN0KysgPSBDdXJsX3Jhd190b3VwcGVyKCpzcmMpOworICB9IHdoaWxlKCpzcmMrKyAmJiAtLW4pOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3Jhd3N0ci5oIGIvY3VybC03LjI1LjAvbGliL3Jhd3N0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3M2RiYzIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvcmF3c3RyLmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBfX1JBV1NUUl9ICisjZGVmaW5lIF9fUkFXU1RSX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKy8qCisgKiBDdXJsX3Jhd19lcXVhbCgpIGlzIGZvciBkb2luZyAicmF3IiBjYXNlIGluc2Vuc2l0aXZlIHN0cmluZ3MuIFRoaXMgaXMgbWVhbnQKKyAqIHRvIGJlIGxvY2FsZSBpbmRlcGVuZGVudCBhbmQgb25seSBjb21wYXJlIHN0cmluZ3Mgd2Uga25vdyBhcmUgc2FmZSBmb3IKKyAqIHRoaXMuCisgKgorICogVGhlIGZ1bmN0aW9uIGlzIGNhcGFibGUgb2YgY29tcGFyaW5nIGEteiBjYXNlIGluc2Vuc2l0aXZlbHkgZXZlbiBmb3IKKyAqIG5vbi1hc2NpaS4KKyAqLworaW50IEN1cmxfcmF3X2VxdWFsKGNvbnN0IGNoYXIgKmZpcnN0LCBjb25zdCBjaGFyICpzZWNvbmQpOworaW50IEN1cmxfcmF3X25lcXVhbChjb25zdCBjaGFyICpmaXJzdCwgY29uc3QgY2hhciAqc2Vjb25kLCBzaXplX3QgbWF4KTsKKworY2hhciBDdXJsX3Jhd190b3VwcGVyKGNoYXIgaW4pOworCisvKiBjaGVja3ByZWZpeCgpIGlzIGEgc2hvcnRlciB2ZXJzaW9uIG9mIHRoZSBhYm92ZSwgdXNlZCB3aGVuIHRoZSBmaXJzdAorICAgYXJndW1lbnQgaXMgemVyby1ieXRlIHRlcm1pbmF0ZWQgKi8KKyNkZWZpbmUgY2hlY2twcmVmaXgoYSxiKSAgICBDdXJsX3Jhd19uZXF1YWwoYSxiLHN0cmxlbihhKSkKKwordm9pZCBDdXJsX3N0cm50b3VwcGVyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pOworI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvcnRzcC5jIGIvY3VybC03LjI1LjAvbGliL3J0c3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDYyYWM3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3J0c3AuYwpAQCAtMCwwICsxLDgxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZuZGVmIENVUkxfRElTQUJMRV9SVFNQCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAidHJhbnNmZXIuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJydHNwLmgiCisjaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qCisgKiBUT0RPIChnZW5lcmFsKQorICogIC1pbmNvbWluZyBzZXJ2ZXIgcmVxdWVzdHMKKyAqICAgICAgLXNlcnZlciBDU2VxIGNvdW50ZXIKKyAqICAtZGlnZXN0IGF1dGhlbnRpY2F0aW9uCisgKiAgLWNvbm5lY3QgdGhydSBwcm94eQorICogIC1waXBlbGluaW5nPworICovCisKKworI2RlZmluZSBSVFBfUEtUX0NIQU5ORUwocCkgICAoKGludCkoKHVuc2lnbmVkIGNoYXIpKChwKVsxXSkpKQorCisjZGVmaW5lIFJUUF9QS1RfTEVOR1RIKHApICAoKCgoaW50KSgodW5zaWduZWQgY2hhcikoKHApWzJdKSkpIDw8IDgpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGludCkoKHVuc2lnbmVkIGNoYXIpKChwKVszXSkpKSkKKworLyogcHJvdG9jb2wtc3BlY2lmaWMgZnVuY3Rpb25zIHNldCB1cCB0byBiZSBjYWxsZWQgYnkgdGhlIG1haW4gZW5naW5lICovCitzdGF0aWMgQ1VSTGNvZGUgcnRzcF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIHJ0c3BfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitzdGF0aWMgQ1VSTGNvZGUgcnRzcF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgcnRzcF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKKworc3RhdGljIGludCBydHNwX2dldHNvY2tfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworCisvKgorICogUGFyc2UgYW5kIHdyaXRlIG91dCBhbnkgYXZhaWxhYmxlIFJUUCBkYXRhLgorICoKKyAqIG5yZWFkOiBhbW91bnQgb2YgZGF0YSBsZWZ0IGFmdGVyIGstPnN0ci4gd2lsbCBiZSBtb2RpZmllZCBpZiBSVFAKKyAqICAgICAgICBkYXRhIGlzIHBhcnNlZCBhbmQgay0+c3RyIGlzIG1vdmVkIHVwCisgKiByZWFkbW9yZTogd2hldGhlciBvciBub3QgdGhlIFJUUCBwYXJzZXIgbmVlZHMgbW9yZSBkYXRhIHJpZ2h0IGF3YXkKKyAqLworc3RhdGljIENVUkxjb2RlIHJ0c3BfcnRwX3JlYWR3cml0ZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90ICpucmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqcmVhZG1vcmUpOworCisKKy8qIHRoaXMgcmV0dXJucyB0aGUgc29ja2V0IHRvIHdhaXQgZm9yIGluIHRoZSBETyBhbmQgRE9JTkcgc3RhdGUgZm9yIHRoZSBtdWx0aQorICAgaW50ZXJmYWNlIGFuZCB0aGVuIHdlJ3JlIGFsd2F5cyBfc2VuZGluZ18gYSByZXF1ZXN0IGFuZCB0aHVzIHdlIHdhaXQgZm9yCisgICB0aGUgc2luZ2xlIHNvY2tldCB0byBiZWNvbWUgd3JpdGFibGUgb25seSAqLworc3RhdGljIGludCBydHNwX2dldHNvY2tfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCit7CisgIC8qIHdyaXRlIG1vZGUgKi8KKyAgKHZvaWQpbnVtc29ja3M7IC8qIHVudXNlZCwgd2UgdHJ1c3QgaXQgdG8gYmUgYXQgbGVhc3QgMSAqLworICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICByZXR1cm4gR0VUU09DS19XUklURVNPQ0soMCk7Cit9CisKK3N0YXRpYworQ1VSTGNvZGUgcnRwX2NsaWVudF93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKnB0ciwgc2l6ZV90IGxlbik7CisKKworLyoKKyAqIFJUU1AgaGFuZGxlciBpbnRlcmZhY2UuCisgKi8KK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3J0c3AgPSB7CisgICJSVFNQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBydHNwX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIHJ0c3BfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgcnRzcF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBydHNwX2dldHNvY2tfZG8sICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBydHNwX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgcnRzcF9ydHBfcmVhZHdyaXRlLCAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9SVFNQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19SVFNQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKworLyoKKyAqIFRoZSBzZXJ2ZXIgbWF5IHNlbmQgdXMgUlRQIGRhdGEgYXQgYW55IHBvaW50LCBhbmQgUlRTUFJFUV9SRUNFSVZFIGRvZXMgbm90CisgKiB3YW50IHRvIGJsb2NrIHRoZSBhcHBsaWNhdGlvbiBmb3JldmVyIHdoaWxlIHJlY2VpdmluZyBhIHN0cmVhbS4gVGhlcmVmb3JlLAorICogd2UgY2Fubm90IGFzc3VtZSB0aGF0IGFuIFJUU1Agc29ja2V0IGlzIGRlYWQganVzdCBiZWNhdXNlIGl0IGlzIHJlYWRhYmxlLgorICoKKyAqIEluc3RlYWQsIGlmIGl0IGlzIHJlYWRhYmxlLCBydW4gQ3VybF9nZXRjb25uZWN0aW5mbygpIHRvIHBlZWsgYXQgdGhlIHNvY2tldAorICogYW5kIGRpc3Rpbmd1aXNoIGJldHdlZW4gY2xvc2VkIGFuZCBkYXRhLgorICovCitib29sIEN1cmxfcnRzcF9jb25uaXNkZWFkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY2hlY2spCit7CisgIGludCBzdmFsOworICBib29sIHJldF92YWwgPSBUUlVFOworCisgIHN2YWwgPSBDdXJsX3NvY2tldF9yZWFkeShjaGVjay0+c29ja1tGSVJTVFNPQ0tFVF0sIENVUkxfU09DS0VUX0JBRCwgMCk7CisgIGlmKHN2YWwgPT0gMCkgeworICAgIC8qIHRpbWVvdXQgKi8KKyAgICByZXRfdmFsID0gRkFMU0U7CisgIH0KKyAgZWxzZSBpZihzdmFsICYgQ1VSTF9DU0VMRUNUX0VSUikgeworICAgIC8qIHNvY2tldCBpcyBpbiBhbiBlcnJvciBzdGF0ZSAqLworICAgIHJldF92YWwgPSBUUlVFOworICB9CisgIGVsc2UgaWYoKHN2YWwgJiBDVVJMX0NTRUxFQ1RfSU4pICYmIGNoZWNrLT5kYXRhKSB7CisgICAgLyogcmVhZGFibGUgd2l0aCBubyBlcnJvci4gY291bGQgYmUgY2xvc2VkIG9yIGNvdWxkIGJlIGFsaXZlIGJ1dCB3ZSBjYW4KKyAgICAgICBvbmx5IGNoZWNrIGlmIHdlIGhhdmUgYSBwcm9wZXIgU2Vzc2lvbkhhbmRsZSBmb3IgdGhlIGNvbm5lY3Rpb24gKi8KKyAgICBjdXJsX3NvY2tldF90IGNvbm5lY3RpbmZvID0gQ3VybF9nZXRjb25uZWN0aW5mbyhjaGVjay0+ZGF0YSwgJmNoZWNrKTsKKyAgICBpZihjb25uZWN0aW5mbyAhPSBDVVJMX1NPQ0tFVF9CQUQpCisgICAgICByZXRfdmFsID0gRkFMU0U7CisgIH0KKworICByZXR1cm4gcmV0X3ZhbDsKK30KKworc3RhdGljIENVUkxjb2RlIHJ0c3BfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIGh0dHBTdGF0dXM7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICBodHRwU3RhdHVzID0gQ3VybF9odHRwX2Nvbm5lY3QoY29ubiwgZG9uZSk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgQ1NlcSBpZiBub3QgYWxyZWFkeSBkb25lICovCisgIGlmKGRhdGEtPnN0YXRlLnJ0c3BfbmV4dF9jbGllbnRfQ1NlcSA9PSAwKQorICAgIGRhdGEtPnN0YXRlLnJ0c3BfbmV4dF9jbGllbnRfQ1NlcSA9IDE7CisgIGlmKGRhdGEtPnN0YXRlLnJ0c3BfbmV4dF9zZXJ2ZXJfQ1NlcSA9PSAwKQorICAgIGRhdGEtPnN0YXRlLnJ0c3BfbmV4dF9zZXJ2ZXJfQ1NlcSA9IDE7CisKKyAgY29ubi0+cHJvdG8ucnRzcGMucnRwX2NoYW5uZWwgPSAtMTsKKworICByZXR1cm4gaHR0cFN0YXR1czsKK30KKworc3RhdGljIENVUkxjb2RlIHJ0c3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZCkKK3sKKyAgKHZvaWQpIGRlYWQ7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+cHJvdG8ucnRzcGMucnRwX2J1Zik7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworCitzdGF0aWMgQ1VSTGNvZGUgcnRzcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgc3RhdHVzLCBib29sIHByZW1hdHVyZSkKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgUlRTUCAqcnRzcCA9IGRhdGEtPnN0YXRlLnByb3RvLnJ0c3A7CisgIENVUkxjb2RlIGh0dHBTdGF0dXM7CisgIGxvbmcgQ1NlcV9zZW50OworICBsb25nIENTZXFfcmVjdjsKKworICAvKiBCeXBhc3MgSFRUUCBlbXB0eS1yZXBseSBjaGVja3Mgb24gcmVjZWl2ZSAqLworICBpZihkYXRhLT5zZXQucnRzcHJlcSA9PSBSVFNQUkVRX1JFQ0VJVkUpCisgICAgcHJlbWF0dXJlID0gVFJVRTsKKworICBodHRwU3RhdHVzID0gQ3VybF9odHRwX2RvbmUoY29ubiwgc3RhdHVzLCBwcmVtYXR1cmUpOworCisgIGlmKHJ0c3ApIHsKKyAgICAvKiBDaGVjayB0aGUgc2VxdWVuY2UgbnVtYmVycyAqLworICAgIENTZXFfc2VudCA9IHJ0c3AtPkNTZXFfc2VudDsKKyAgICBDU2VxX3JlY3YgPSBydHNwLT5DU2VxX3JlY3Y7CisgICAgaWYoKGRhdGEtPnNldC5ydHNwcmVxICE9IFJUU1BSRVFfUkVDRUlWRSkgJiYgKENTZXFfc2VudCAhPSBDU2VxX3JlY3YpKSB7CisgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgIlRoZSBDU2VxIG9mIHRoaXMgcmVxdWVzdCAlbGQgZGlkIG5vdCBtYXRjaCB0aGUgcmVzcG9uc2UgJWxkIiwKKyAgICAgICAgICAgIENTZXFfc2VudCwgQ1NlcV9yZWN2KTsKKyAgICAgIHJldHVybiBDVVJMRV9SVFNQX0NTRVFfRVJST1I7CisgICAgfQorICAgIGVsc2UgaWYoZGF0YS0+c2V0LnJ0c3ByZXEgPT0gUlRTUFJFUV9SRUNFSVZFICYmCisgICAgICAgICAgICAoY29ubi0+cHJvdG8ucnRzcGMucnRwX2NoYW5uZWwgPT0gLTEpKSB7CisgICAgICBpbmZvZihkYXRhLCAiR290IGFuIFJUUCBSZWNlaXZlIHdpdGggYSBDU2VxIG9mICVsZFxuIiwgQ1NlcV9yZWN2KTsKKyAgICAgIC8qIFRPRE8gQ1BDOiBTZXJ2ZXIgLT4gQ2xpZW50IGxvZ2ljIGhlcmUgKi8KKyAgICB9CisgIH0KKworICByZXR1cm4gaHR0cFN0YXR1czsKK30KKworc3RhdGljIENVUkxjb2RlIHJ0c3BfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIENVUkxjb2RlIHJlc3VsdD1DVVJMRV9PSzsKKyAgQ3VybF9SdHNwUmVxIHJ0c3ByZXEgPSBkYXRhLT5zZXQucnRzcHJlcTsKKyAgc3RydWN0IFJUU1AgKnJ0c3A7CisgIHN0cnVjdCBIVFRQICpodHRwOworICBDdXJsX3NlbmRfYnVmZmVyICpyZXFfYnVmZmVyOworICBjdXJsX29mZl90IHBvc3RzaXplID0gMDsgLyogZm9yIEFOTk9VTkNFIGFuZCBTRVRfUEFSQU1FVEVSICovCisgIGN1cmxfb2ZmX3QgcHV0c2l6ZSA9IDA7IC8qIGZvciBBTk5PVU5DRSBhbmQgU0VUX1BBUkFNRVRFUiAqLworCisgIGNvbnN0IGNoYXIgKnBfcmVxdWVzdCA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKnBfc2Vzc2lvbl9pZCA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKnBfYWNjZXB0ID0gTlVMTDsKKyAgY29uc3QgY2hhciAqcF9hY2NlcHRfZW5jb2RpbmcgPSBOVUxMOworICBjb25zdCBjaGFyICpwX3JhbmdlID0gTlVMTDsKKyAgY29uc3QgY2hhciAqcF9yZWZlcnJlciA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKnBfc3RyZWFtX3VyaSA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKnBfdHJhbnNwb3J0ID0gTlVMTDsKKyAgY29uc3QgY2hhciAqcF91YWdlbnQgPSBOVUxMOworCisgICpkb25lID0gVFJVRTsKKworICBDdXJsX3Jlc2V0X3JlcXByb3RvKGNvbm4pOworCisgIGlmKCFkYXRhLT5zdGF0ZS5wcm90by5ydHNwKSB7CisgICAgLyogT25seSBhbGxvY2F0ZSB0aGlzIHN0cnVjdCBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgaXQhICovCisKKyAgICBydHNwID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgUlRTUCkpOworICAgIGlmKCFydHNwKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZGF0YS0+c3RhdGUucHJvdG8ucnRzcCA9IHJ0c3A7CisgIH0KKyAgZWxzZSB7CisgICAgcnRzcCA9IGRhdGEtPnN0YXRlLnByb3RvLnJ0c3A7CisgIH0KKworICBodHRwID0gJihydHNwLT5odHRwX3dyYXBwZXIpOworICAvKiBBc3NlcnQgdGhhdCBubyBvbmUgaGFzIGNoYW5nZWQgdGhlIFJUU1Agc3RydWN0IGluIGFuIGV2aWwgd2F5ICovCisgIERFQlVHQVNTRVJUKCh2b2lkICopaHR0cCA9PSAodm9pZCAqKXJ0c3ApOworCisgIHJ0c3AtPkNTZXFfc2VudCA9IGRhdGEtPnN0YXRlLnJ0c3BfbmV4dF9jbGllbnRfQ1NlcTsKKyAgcnRzcC0+Q1NlcV9yZWN2ID0gMDsKKworICAvKiBTZXR1cCB0aGUgJ3BfcmVxdWVzdCcgcG9pbnRlciB0byB0aGUgcHJvcGVyIHBfcmVxdWVzdCBzdHJpbmcKKyAgICogU2luY2UgYWxsIFJUU1AgcmVxdWVzdHMgYXJlIGluY2x1ZGVkIGhlcmUsIHRoZXJlIGlzIG5vIG5lZWQgdG8KKyAgICogc3VwcG9ydCBjdXN0b20gcmVxdWVzdHMgbGlrZSBIVFRQLgorICAgKiovCisgIERFQlVHQVNTRVJUKChydHNwcmVxID4gUlRTUFJFUV9OT05FICYmIHJ0c3ByZXEgPCBSVFNQUkVRX0xBU1QpKTsKKyAgZGF0YS0+c2V0Lm9wdF9ub19ib2R5ID0gVFJVRTsgLyogbW9zdCByZXF1ZXN0cyBkb24ndCBjb250YWluIGEgYm9keSAqLworICBzd2l0Y2gocnRzcHJlcSkgeworICBjYXNlIFJUU1BSRVFfTk9ORToKKyAgICBmYWlsZihkYXRhLCAiR290IGludmFsaWQgUlRTUCByZXF1ZXN0OiBSVFNQUkVRX05PTkUiKTsKKyAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworICBjYXNlIFJUU1BSRVFfT1BUSU9OUzoKKyAgICBwX3JlcXVlc3QgPSAiT1BUSU9OUyI7CisgICAgYnJlYWs7CisgIGNhc2UgUlRTUFJFUV9ERVNDUklCRToKKyAgICBwX3JlcXVlc3QgPSAiREVTQ1JJQkUiOworICAgIGRhdGEtPnNldC5vcHRfbm9fYm9keSA9IEZBTFNFOworICAgIGJyZWFrOworICBjYXNlIFJUU1BSRVFfQU5OT1VOQ0U6CisgICAgcF9yZXF1ZXN0ID0gIkFOTk9VTkNFIjsKKyAgICBicmVhazsKKyAgY2FzZSBSVFNQUkVRX1NFVFVQOgorICAgIHBfcmVxdWVzdCA9ICJTRVRVUCI7CisgICAgYnJlYWs7CisgIGNhc2UgUlRTUFJFUV9QTEFZOgorICAgIHBfcmVxdWVzdCA9ICJQTEFZIjsKKyAgICBicmVhazsKKyAgY2FzZSBSVFNQUkVRX1BBVVNFOgorICAgIHBfcmVxdWVzdCA9ICJQQVVTRSI7CisgICAgYnJlYWs7CisgIGNhc2UgUlRTUFJFUV9URUFSRE9XTjoKKyAgICBwX3JlcXVlc3QgPSAiVEVBUkRPV04iOworICAgIGJyZWFrOworICBjYXNlIFJUU1BSRVFfR0VUX1BBUkFNRVRFUjoKKyAgICAvKiBHRVRfUEFSQU1FVEVSJ3Mgbm9fYm9keSBzdGF0dXMgaXMgZGV0ZXJtaW5lZCBsYXRlciAqLworICAgIHBfcmVxdWVzdCA9ICJHRVRfUEFSQU1FVEVSIjsKKyAgICBkYXRhLT5zZXQub3B0X25vX2JvZHkgPSBGQUxTRTsKKyAgICBicmVhazsKKyAgY2FzZSBSVFNQUkVRX1NFVF9QQVJBTUVURVI6CisgICAgcF9yZXF1ZXN0ID0gIlNFVF9QQVJBTUVURVIiOworICAgIGJyZWFrOworICBjYXNlIFJUU1BSRVFfUkVDT1JEOgorICAgIHBfcmVxdWVzdCA9ICJSRUNPUkQiOworICAgIGJyZWFrOworICBjYXNlIFJUU1BSRVFfUkVDRUlWRToKKyAgICBwX3JlcXVlc3QgPSAiIjsKKyAgICAvKiBUcmVhdCBpbnRlcmxlYXZlZCBSVFAgYXMgYm9keSovCisgICAgZGF0YS0+c2V0Lm9wdF9ub19ib2R5ID0gRkFMU0U7CisgICAgYnJlYWs7CisgIGNhc2UgUlRTUFJFUV9MQVNUOgorICAgIGZhaWxmKGRhdGEsICJHb3QgaW52YWxpZCBSVFNQIHJlcXVlc3Q6IFJUU1BSRVFfTEFTVCIpOworICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgIH0KKworICBpZihydHNwcmVxID09IFJUU1BSRVFfUkVDRUlWRSkgeworICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgJmh0dHAtPnJlYWRieXRlY291bnQsIC0xLCBOVUxMKTsKKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBwX3Nlc3Npb25faWQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19SVFNQX1NFU1NJT05fSURdOworICBpZighcF9zZXNzaW9uX2lkICYmCisgICAgIChydHNwcmVxICYgfihSVFNQUkVRX09QVElPTlMgfCBSVFNQUkVRX0RFU0NSSUJFIHwgUlRTUFJFUV9TRVRVUCkpKSB7CisgICAgZmFpbGYoZGF0YSwgIlJlZnVzaW5nIHRvIGlzc3VlIGFuIFJUU1AgcmVxdWVzdCBbJXNdIHdpdGhvdXQgYSBzZXNzaW9uIElELiIsCisgICAgICAgICAgcF9yZXF1ZXN0ID8gcF9yZXF1ZXN0IDogIiIpOworICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgIH0KKworICAvKiBUT0RPOiBhdXRoPyAqLworICAvKiBUT0RPOiBwcm94eT8gKi8KKworICAvKiBTdHJlYW0gVVJJLiBEZWZhdWx0IHRvIHNlcnZlciAnKicgaWYgbm90IHNwZWNpZmllZCAqLworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19SVFNQX1NUUkVBTV9VUkldKSB7CisgICAgcF9zdHJlYW1fdXJpID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfUlRTUF9TVFJFQU1fVVJJXTsKKyAgfQorICBlbHNlIHsKKyAgICBwX3N0cmVhbV91cmkgPSAiKiI7CisgIH0KKworICAvKiBUcmFuc3BvcnQgSGVhZGVyIGZvciBTRVRVUCByZXF1ZXN0cyAqLworICBwX3RyYW5zcG9ydCA9IEN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJUcmFuc3BvcnQ6Iik7CisgIGlmKHJ0c3ByZXEgPT0gUlRTUFJFUV9TRVRVUCAmJiAhcF90cmFuc3BvcnQpIHsKKyAgICAvKiBOZXcgVHJhbnNwb3J0OiBzZXR0aW5nPyAqLworICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1JUU1BfVFJBTlNQT1JUXSkgeworICAgICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5ydHNwX3RyYW5zcG9ydCk7CisKKyAgICAgIGNvbm4tPmFsbG9jcHRyLnJ0c3BfdHJhbnNwb3J0ID0KKyAgICAgICAgYXByaW50ZigiVHJhbnNwb3J0OiAlc1xyXG4iLAorICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1JUU1BfVFJBTlNQT1JUXSk7CisgICAgICBpZighY29ubi0+YWxsb2NwdHIucnRzcF90cmFuc3BvcnQpCisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAiUmVmdXNpbmcgdG8gaXNzdWUgYW4gUlRTUCBTRVRVUCB3aXRob3V0IGEgVHJhbnNwb3J0OiBoZWFkZXIuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworICAgIH0KKworICAgIHBfdHJhbnNwb3J0ID0gY29ubi0+YWxsb2NwdHIucnRzcF90cmFuc3BvcnQ7CisgIH0KKworICAvKiBBY2NlcHQgSGVhZGVycyBmb3IgREVTQ1JJQkUgcmVxdWVzdHMgKi8KKyAgaWYocnRzcHJlcSA9PSBSVFNQUkVRX0RFU0NSSUJFKSB7CisgICAgLyogQWNjZXB0IEhlYWRlciAqLworICAgIHBfYWNjZXB0ID0gQ3VybF9jaGVja2hlYWRlcnMoZGF0YSwgIkFjY2VwdDoiKT8KKyAgICAgIE5VTEw6IkFjY2VwdDogYXBwbGljYXRpb24vc2RwXHJcbiI7CisKKyAgICAvKiBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyICovCisgICAgaWYoIUN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJBY2NlcHQtRW5jb2Rpbmc6IikgJiYKKyAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19FTkNPRElOR10pIHsKKyAgICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIuYWNjZXB0X2VuY29kaW5nKTsKKyAgICAgIGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZyA9CisgICAgICAgIGFwcmludGYoIkFjY2VwdC1FbmNvZGluZzogJXNcclxuIiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfRU5DT0RJTkddKTsKKworICAgICAgaWYoIWNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZykKKyAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICAgIHBfYWNjZXB0X2VuY29kaW5nID0gY29ubi0+YWxsb2NwdHIuYWNjZXB0X2VuY29kaW5nOworICAgIH0KKyAgfQorCisgIC8qIFRoZSBVc2VyLUFnZW50IHN0cmluZyBtaWdodCBoYXZlIGJlZW4gYWxsb2NhdGVkIGluIHVybC5jIGFscmVhZHksIGJlY2F1c2UKKyAgICAgaXQgbWlnaHQgaGF2ZSBiZWVuIHVzZWQgaW4gdGhlIHByb3h5IGNvbm5lY3QsIGJ1dCBpZiB3ZSBoYXZlIGdvdCBhIGhlYWRlcgorICAgICB3aXRoIHRoZSB1c2VyLWFnZW50IHN0cmluZyBzcGVjaWZpZWQsIHdlIGVyYXNlIHRoZSBwcmV2aW91c2x5IG1hZGUgc3RyaW5nCisgICAgIGhlcmUuICovCisgIGlmKEN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJVc2VyLUFnZW50OiIpICYmIGNvbm4tPmFsbG9jcHRyLnVhZ2VudCkgeworICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIudWFnZW50KTsKKyAgICBjb25uLT5hbGxvY3B0ci51YWdlbnQgPSBOVUxMOworICB9CisgIGVsc2UgaWYoIUN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJVc2VyLUFnZW50OiIpICYmCisgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfVVNFUkFHRU5UXSkgeworICAgIHBfdWFnZW50ID0gY29ubi0+YWxsb2NwdHIudWFnZW50OworICB9CisKKyAgLyogUmVmZXJyZXIgKi8KKyAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5yZWYpOworICBpZihkYXRhLT5jaGFuZ2UucmVmZXJlciAmJiAhQ3VybF9jaGVja2hlYWRlcnMoZGF0YSwgIlJlZmVyZXI6IikpCisgICAgY29ubi0+YWxsb2NwdHIucmVmID0gYXByaW50ZigiUmVmZXJlcjogJXNcclxuIiwgZGF0YS0+Y2hhbmdlLnJlZmVyZXIpOworICBlbHNlCisgICAgY29ubi0+YWxsb2NwdHIucmVmID0gTlVMTDsKKworICBwX3JlZmVycmVyID0gY29ubi0+YWxsb2NwdHIucmVmOworCisgIC8qCisgICAqIFJhbmdlIEhlYWRlcgorICAgKiBPbmx5IGFwcGxpZXMgdG8gUExBWSwgUEFVU0UsIFJFQ09SRAorICAgKgorICAgKiBHbyBhaGVhZCBhbmQgdXNlIHRoZSBSYW5nZSBzdHVmZiBzdXBwbGllZCBmb3IgSFRUUAorICAgKi8KKyAgaWYoZGF0YS0+c3RhdGUudXNlX3JhbmdlICYmCisgICAgIChydHNwcmVxICAmIChSVFNQUkVRX1BMQVkgfCBSVFNQUkVRX1BBVVNFIHwgUlRTUFJFUV9SRUNPUkQpKSkgeworCisgICAgLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgcmFuZ2Ugc2V0IGluIHRoZSBjdXN0b20gaGVhZGVycyAqLworICAgIGlmKCFDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiUmFuZ2U6IikgJiYgZGF0YS0+c3RhdGUucmFuZ2UpIHsKKyAgICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucmFuZ2VsaW5lKTsKKyAgICAgIGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSA9IGFwcmludGYoIlJhbmdlOiAlc1xyXG4iLCBkYXRhLT5zdGF0ZS5yYW5nZSk7CisgICAgICBwX3JhbmdlID0gY29ubi0+YWxsb2NwdHIucmFuZ2VsaW5lOworICAgIH0KKyAgfQorCisgIC8qCisgICAqIFNhbml0eSBjaGVjayB0aGUgY3VzdG9tIGhlYWRlcnMKKyAgICovCisgIGlmKEN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJDU2VxOiIpKSB7CisgICAgZmFpbGYoZGF0YSwgIkNTZXEgY2Fubm90IGJlIHNldCBhcyBhIGN1c3RvbSBoZWFkZXIuIik7CisgICAgcmV0dXJuIENVUkxFX1JUU1BfQ1NFUV9FUlJPUjsKKyAgfQorICBpZihDdXJsX2NoZWNraGVhZGVycyhkYXRhLCAiU2Vzc2lvbjoiKSkgeworICAgIGZhaWxmKGRhdGEsICJTZXNzaW9uIElEIGNhbm5vdCBiZSBzZXQgYXMgYSBjdXN0b20gaGVhZGVyLiIpOworICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgIH0KKworICAvKiBJbml0aWFsaXplIGEgZHluYW1pYyBzZW5kIGJ1ZmZlciAqLworICByZXFfYnVmZmVyID0gQ3VybF9hZGRfYnVmZmVyX2luaXQoKTsKKworICBpZighcmVxX2J1ZmZlcikKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICByZXN1bHQgPQorICAgIEN1cmxfYWRkX2J1ZmZlcmYocmVxX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICIlcyAlcyBSVFNQLzEuMFxyXG4iIC8qIFJlcXVlc3QgU3RyZWFtLVVSSSBSVFNQLzEuMCAqLworICAgICAgICAgICAgICAgICAgICAgIkNTZXE6ICVsZFxyXG4iLCAvKiBDU2VxICovCisgICAgICAgICAgICAgICAgICAgICAocF9yZXF1ZXN0ID8gcF9yZXF1ZXN0IDogIiIpLCBwX3N0cmVhbV91cmksCisgICAgICAgICAgICAgICAgICAgICBydHNwLT5DU2VxX3NlbnQpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAvKgorICAgKiBSYXRoZXIgdGhhbiBkbyBhIG5vcm1hbCBhbGxvYyBsaW5lLCBrZWVwIHRoZSBzZXNzaW9uX2lkIHVuZm9ybWF0dGVkCisgICAqIHRvIG1ha2UgY29tcGFyaXNvbiBlYXNpZXIKKyAgICovCisgIGlmKHBfc2Vzc2lvbl9pZCkgeworICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYocmVxX2J1ZmZlciwgIlNlc3Npb246ICVzXHJcbiIsIHBfc2Vzc2lvbl9pZCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIC8qCisgICAqIFNoYXJlZCBIVFRQLWxpa2Ugb3B0aW9ucworICAgKi8KKyAgcmVzdWx0ID0gQ3VybF9hZGRfYnVmZmVyZihyZXFfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogdHJhbnNwb3J0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiBhY2NlcHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIGFjY2VwdC1lbmNvZGluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogcmFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIHJlZmVycmVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiB1c2VyLWFnZW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfdHJhbnNwb3J0ID8gcF90cmFuc3BvcnQgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2FjY2VwdCA/IHBfYWNjZXB0IDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9hY2NlcHRfZW5jb2RpbmcgPyBwX2FjY2VwdF9lbmNvZGluZyA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfcmFuZ2UgPyBwX3JhbmdlIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF9yZWZlcnJlciA/IHBfcmVmZXJyZXIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3VhZ2VudCA/IHBfdWFnZW50IDogIiIpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBpZigocnRzcHJlcSA9PSBSVFNQUkVRX1NFVFVQKSB8fCAocnRzcHJlcSA9PSBSVFNQUkVRX0RFU0NSSUJFKSkgeworICAgIHJlc3VsdCA9IEN1cmxfYWRkX3RpbWVjb25kaXRpb24oZGF0YSwgcmVxX2J1ZmZlcik7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIHJlc3VsdCA9IEN1cmxfYWRkX2N1c3RvbV9oZWFkZXJzKGNvbm4sIHJlcV9idWZmZXIpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBpZihydHNwcmVxID09IFJUU1BSRVFfQU5OT1VOQ0UgfHwKKyAgICAgcnRzcHJlcSA9PSBSVFNQUkVRX1NFVF9QQVJBTUVURVIgfHwKKyAgICAgcnRzcHJlcSA9PSBSVFNQUkVRX0dFVF9QQVJBTUVURVIpIHsKKworICAgIGlmKGRhdGEtPnNldC51cGxvYWQpIHsKKyAgICAgIHB1dHNpemUgPSBkYXRhLT5zZXQuaW5maWxlc2l6ZTsKKyAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QVVQ7CisKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBwb3N0c2l6ZSA9IChkYXRhLT5zZXQucG9zdGZpZWxkc2l6ZSAhPSAtMSk/CisgICAgICAgIGRhdGEtPnNldC5wb3N0ZmllbGRzaXplOgorICAgICAgICAoZGF0YS0+c2V0LnBvc3RmaWVsZHM/IChjdXJsX29mZl90KXN0cmxlbihkYXRhLT5zZXQucG9zdGZpZWxkcyk6MCk7CisgICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfUE9TVDsKKyAgICB9CisKKyAgICBpZihwdXRzaXplID4gMCB8fCBwb3N0c2l6ZSA+IDApIHsKKyAgICAgIC8qIEFzIHN0YXRlZCBpbiB0aGUgaHR0cCBjb21tZW50cywgaXQgaXMgcHJvYmFibHkgbm90IHdpc2UgdG8KKyAgICAgICAqIGFjdHVhbGx5IHNldCBhIGN1c3RvbSBDb250ZW50LUxlbmd0aCBpbiB0aGUgaGVhZGVycyAqLworICAgICAgaWYoIUN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJDb250ZW50LUxlbmd0aDoiKSkgeworICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKHJlcV9idWZmZXIsCisgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6ICUiIEZPUk1BVF9PRkZfVCJcclxuIiwKKyAgICAgICAgICAgIChkYXRhLT5zZXQudXBsb2FkID8gcHV0c2l6ZSA6IHBvc3RzaXplKSk7CisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorCisgICAgICBpZihydHNwcmVxID09IFJUU1BSRVFfU0VUX1BBUkFNRVRFUiB8fAorICAgICAgICAgcnRzcHJlcSA9PSBSVFNQUkVRX0dFVF9QQVJBTUVURVIpIHsKKyAgICAgICAgaWYoIUN1cmxfY2hlY2toZWFkZXJzKGRhdGEsICJDb250ZW50LVR5cGU6IikpIHsKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJmKHJlcV9idWZmZXIsCisgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IHRleHQvcGFyYW1ldGVyc1xyXG4iKTsKKyAgICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKHJ0c3ByZXEgPT0gUlRTUFJFUV9BTk5PVU5DRSkgeworICAgICAgICBpZighQ3VybF9jaGVja2hlYWRlcnMoZGF0YSwgIkNvbnRlbnQtVHlwZToiKSkgeworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYocmVxX2J1ZmZlciwKKyAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vc2RwXHJcbiIpOworICAgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZGF0YS0+c3RhdGUuZXhwZWN0MTAwaGVhZGVyID0gRkFMU0U7IC8qIFJUU1AgcG9zdHMgYXJlIHNpbXBsZS9zbWFsbCAqLworICAgIH0KKyAgICBlbHNlIGlmKHJ0c3ByZXEgPT0gUlRTUFJFUV9HRVRfUEFSQU1FVEVSKSB7CisgICAgICAvKiBDaGVjayBmb3IgYW4gZW1wdHkgR0VUX1BBUkFNRVRFUiAoaGVhcnRiZWF0KSByZXF1ZXN0ICovCisgICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfSEVBRDsKKyAgICAgIGRhdGEtPnNldC5vcHRfbm9fYm9keSA9IFRSVUU7CisgICAgfQorICB9CisKKyAgLyogUlRTUCBuZXZlciBhbGxvd3MgY2h1bmtlZCB0cmFuc2ZlciAqLworICBkYXRhLT5yZXEuZm9yYmlkY2h1bmsgPSBUUlVFOworICAvKiBGaW5pc2ggdGhlIHJlcXVlc3QgYnVmZmVyICovCisgIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcihyZXFfYnVmZmVyLCAiXHJcbiIsIDIpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBpZihwb3N0c2l6ZSA+IDApIHsKKyAgICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXIocmVxX2J1ZmZlciwgZGF0YS0+c2V0LnBvc3RmaWVsZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpcG9zdHNpemUpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICAvKiBpc3N1ZSB0aGUgcmVxdWVzdCAqLworICByZXN1bHQgPSBDdXJsX2FkZF9idWZmZXJfc2VuZChyZXFfYnVmZmVyLCBjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+aW5mby5yZXF1ZXN0X3NpemUsIDAsIEZJUlNUU09DS0VUKTsKKyAgaWYocmVzdWx0KSB7CisgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIFJUU1AgcmVxdWVzdCIpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIEZJUlNUU09DS0VULCAtMSwgVFJVRSwgJmh0dHAtPnJlYWRieXRlY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgcHV0c2l6ZT9GSVJTVFNPQ0tFVDotMSwKKyAgICAgICAgICAgICAgICAgICAgICBwdXRzaXplPyZodHRwLT53cml0ZWJ5dGVjb3VudDpOVUxMKTsKKworICAvKiBJbmNyZW1lbnQgdGhlIENTZXEgb24gc3VjY2VzcyAqLworICBkYXRhLT5zdGF0ZS5ydHNwX25leHRfY2xpZW50X0NTZXErKzsKKworICBpZihodHRwLT53cml0ZWJ5dGVjb3VudCkgeworICAgIC8qIGlmIGEgcmVxdWVzdC1ib2R5IGhhcyBiZWVuIHNlbnQgb2ZmLCB3ZSBtYWtlIHN1cmUgdGhpcyBwcm9ncmVzcyBpcworICAgICAgIG5vdGVkIHByb3Blcmx5ICovCisgICAgQ3VybF9wZ3JzU2V0VXBsb2FkQ291bnRlcihkYXRhLCBodHRwLT53cml0ZWJ5dGVjb3VudCk7CisgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKQorICAgICAgcmVzdWx0ID0gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIENVUkxjb2RlIHJ0c3BfcnRwX3JlYWR3cml0ZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90ICpucmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqcmVhZG1vcmUpIHsKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmZGF0YS0+cmVxOworICBzdHJ1Y3QgcnRzcF9jb25uICpydHNwYyA9ICYoY29ubi0+cHJvdG8ucnRzcGMpOworCisgIGNoYXIgKnJ0cDsgLyogbW92aW5nIHBvaW50ZXIgdG8gcnRwIGRhdGEgKi8KKyAgc3NpemVfdCBydHBfZGF0YWxlZnQ7IC8qIGhvdyBtdWNoIGRhdGEgbGVmdCB0byBwYXJzZSBpbiB0aGlzIHJvdW5kICovCisgIGNoYXIgKnNjcmF0Y2g7CisgIENVUkxjb2RlIHJlc3VsdDsKKworICBpZihydHNwYy0+cnRwX2J1ZikgeworICAgIC8qIFRoZXJlIHdhcyBzb21lIGxlZnRvdmVyIGRhdGEgdGhlIGxhc3QgdGltZS4gTWVyZ2UgYnVmZmVycyAqLworICAgIGNoYXIgKm5ld3B0ciA9IHJlYWxsb2MocnRzcGMtPnJ0cF9idWYsIHJ0c3BjLT5ydHBfYnVmc2l6ZSArICpucmVhZCk7CisgICAgaWYoIW5ld3B0cikgeworICAgICAgQ3VybF9zYWZlZnJlZShydHNwYy0+cnRwX2J1Zik7CisgICAgICBydHNwYy0+cnRwX2J1ZiA9IE5VTEw7CisgICAgICBydHNwYy0+cnRwX2J1ZnNpemUgPSAwOworICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQorICAgIHJ0c3BjLT5ydHBfYnVmID0gbmV3cHRyOworICAgIG1lbWNweShydHNwYy0+cnRwX2J1ZiArIHJ0c3BjLT5ydHBfYnVmc2l6ZSwgay0+c3RyLCAqbnJlYWQpOworICAgIHJ0c3BjLT5ydHBfYnVmc2l6ZSArPSAqbnJlYWQ7CisgICAgcnRwID0gcnRzcGMtPnJ0cF9idWY7CisgICAgcnRwX2RhdGFsZWZ0ID0gcnRzcGMtPnJ0cF9idWZzaXplOworICB9CisgIGVsc2UgeworICAgIC8qIEp1c3QgcGFyc2UgdGhlIHJlcXVlc3QgYnVmZmVyIGRpcmVjdGx5ICovCisgICAgcnRwID0gay0+c3RyOworICAgIHJ0cF9kYXRhbGVmdCA9ICpucmVhZDsKKyAgfQorCisgIHdoaWxlKChydHBfZGF0YWxlZnQgPiAwKSAmJgorICAgICAgICAocnRwWzBdID09ICckJykpIHsKKyAgICBpZihydHBfZGF0YWxlZnQgPiA0KSB7CisgICAgICBpbnQgcnRwX2xlbmd0aDsKKworICAgICAgLyogUGFyc2UgdGhlIGhlYWRlciAqLworICAgICAgLyogVGhlIGNoYW5uZWwgaWRlbnRpZmllciBpbW1lZGlhdGVseSBmb2xsb3dzIGFuZCBpcyAxIGJ5dGUgKi8KKyAgICAgIHJ0c3BjLT5ydHBfY2hhbm5lbCA9IFJUUF9QS1RfQ0hBTk5FTChydHApOworCisgICAgICAvKiBUaGUgbGVuZ3RoIGlzIHR3byBieXRlcyAqLworICAgICAgcnRwX2xlbmd0aCA9IFJUUF9QS1RfTEVOR1RIKHJ0cCk7CisKKyAgICAgIGlmKHJ0cF9kYXRhbGVmdCA8IHJ0cF9sZW5ndGggKyA0KSB7CisgICAgICAgIC8qIE5lZWQgbW9yZSAtIGluY29tcGxldGUgcGF5bG9hZCovCisgICAgICAgICpyZWFkbW9yZSA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIFdlIGhhdmUgdGhlIGZ1bGwgUlRQIGludGVybGVhdmVkIHBhY2tldAorICAgICAgICAgKiBXcml0ZSBvdXQgdGhlIGhlYWRlciBpbmNsdWRpbmcgdGhlIGxlYWRpbmcgJyQnICovCisgICAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiUlRQIHdyaXRlIGNoYW5uZWwgJWQgcnRwX2xlbmd0aCAlZFxuIiwKKyAgICAgICAgICAgICAgcnRzcGMtPnJ0cF9jaGFubmVsLCBydHBfbGVuZ3RoKSk7CisgICAgICAgIHJlc3VsdCA9IHJ0cF9jbGllbnRfd3JpdGUoY29ubiwgJnJ0cFswXSwgcnRwX2xlbmd0aCArIDQpOworICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiR290IGFuIGVycm9yIHdyaXRpbmcgYW4gUlRQIHBhY2tldCIpOworICAgICAgICAgICpyZWFkbW9yZSA9IEZBTFNFOworICAgICAgICAgIEN1cmxfc2FmZWZyZWUocnRzcGMtPnJ0cF9idWYpOworICAgICAgICAgIHJ0c3BjLT5ydHBfYnVmID0gTlVMTDsKKyAgICAgICAgICBydHNwYy0+cnRwX2J1ZnNpemUgPSAwOworICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBNb3ZlIGZvcndhcmQgaW4gdGhlIGJ1ZmZlciAqLworICAgICAgICBydHBfZGF0YWxlZnQgLT0gcnRwX2xlbmd0aCArIDQ7CisgICAgICAgIHJ0cCArPSBydHBfbGVuZ3RoICsgNDsKKworICAgICAgICBpZihkYXRhLT5zZXQucnRzcHJlcSA9PSBSVFNQUkVRX1JFQ0VJVkUpIHsKKyAgICAgICAgICAvKiBJZiB3ZSBhcmUgaW4gYSBwYXNzaXZlIHJlY2VpdmUsIGdpdmUgY29udHJvbCBiYWNrCisgICAgICAgICAgICogdG8gdGhlIGFwcCBhcyBvZnRlbiBhcyB3ZSBjYW4uCisgICAgICAgICAgICovCisgICAgICAgICAgay0+a2VlcG9uICY9IH5LRUVQX1JFQ1Y7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBOZWVkIG1vcmUgLSBpbmNvbXBsZXRlIGhlYWRlciAqLworICAgICAgKnJlYWRtb3JlID0gVFJVRTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmKHJ0cF9kYXRhbGVmdCAhPSAwICYmIHJ0cFswXSA9PSAnJCcpIHsKKyAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlJUUCBSZXdpbmRpbmcgJXp1ICVzXG4iLCBydHBfZGF0YWxlZnQsCisgICAgICAgICAgKnJlYWRtb3JlID8gIihSRUFETU9SRSkiIDogIiIpKTsKKworICAgIC8qIFN0b3JlIHRoZSBpbmNvbXBsZXRlIFJUUCBwYWNrZXQgZm9yIGEgInJld2luZCIgKi8KKyAgICBzY3JhdGNoID0gbWFsbG9jKHJ0cF9kYXRhbGVmdCk7CisgICAgaWYoIXNjcmF0Y2gpIHsKKyAgICAgIEN1cmxfc2FmZWZyZWUocnRzcGMtPnJ0cF9idWYpOworICAgICAgcnRzcGMtPnJ0cF9idWYgPSBOVUxMOworICAgICAgcnRzcGMtPnJ0cF9idWZzaXplID0gMDsKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKyAgICBtZW1jcHkoc2NyYXRjaCwgcnRwLCBydHBfZGF0YWxlZnQpOworICAgIEN1cmxfc2FmZWZyZWUocnRzcGMtPnJ0cF9idWYpOworICAgIHJ0c3BjLT5ydHBfYnVmID0gc2NyYXRjaDsKKyAgICBydHNwYy0+cnRwX2J1ZnNpemUgPSBydHBfZGF0YWxlZnQ7CisKKyAgICAvKiBBcyBmYXIgYXMgdGhlIHRyYW5zZmVyIGlzIGNvbmNlcm5lZCwgdGhpcyBkYXRhIGlzIGNvbnN1bWVkICovCisgICAgKm5yZWFkID0gMDsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKyAgZWxzZSB7CisgICAgLyogRml4IHVwIGstPnN0ciB0byBwb2ludCBqdXN0IGFmdGVyIHRoZSBsYXN0IFJUUCBwYWNrZXQgKi8KKyAgICBrLT5zdHIgKz0gKm5yZWFkIC0gcnRwX2RhdGFsZWZ0OworCisgICAgLyogZWl0aGVyIGFsbCBvZiB0aGUgZGF0YSBoYXMgYmVlbiByZWFkIG9yLi4uCisgICAgICogcnRwIG5vdyBwb2ludHMgYXQgdGhlIG5leHQgYnl0ZSB0byBwYXJzZQorICAgICAqLworICAgIGlmKHJ0cF9kYXRhbGVmdCA+IDApCisgICAgICBERUJVR0FTU0VSVChrLT5zdHJbMF0gPT0gcnRwWzBdKTsKKworICAgIERFQlVHQVNTRVJUKHJ0cF9kYXRhbGVmdCA8PSAqbnJlYWQpOyAvKiBzYW5pdHkgY2hlY2sgKi8KKworICAgICpucmVhZCA9IHJ0cF9kYXRhbGVmdDsKKyAgfQorCisgIC8qIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggdGhlIGxlZnRvdmVyL21lcmdlIGJ1ZmZlciAqLworICBDdXJsX3NhZmVmcmVlKHJ0c3BjLT5ydHBfYnVmKTsKKyAgcnRzcGMtPnJ0cF9idWYgPSBOVUxMOworICBydHNwYy0+cnRwX2J1ZnNpemUgPSAwOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljCitDVVJMY29kZSBydHBfY2xpZW50X3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY2hhciAqcHRyLCBzaXplX3QgbGVuKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHNpemVfdCB3cm90ZTsKKyAgY3VybF93cml0ZV9jYWxsYmFjayB3cml0ZWl0OworCisgIGlmKGxlbiA9PSAwKSB7CisgICAgZmFpbGYgKGRhdGEsICJDYW5ub3Qgd3JpdGUgYSAwIHNpemUgUlRQIHBhY2tldC4iKTsKKyAgICByZXR1cm4gQ1VSTEVfV1JJVEVfRVJST1I7CisgIH0KKworICB3cml0ZWl0ID0gZGF0YS0+c2V0LmZ3cml0ZV9ydHA/ZGF0YS0+c2V0LmZ3cml0ZV9ydHA6ZGF0YS0+c2V0LmZ3cml0ZV9mdW5jOworICB3cm90ZSA9IHdyaXRlaXQocHRyLCAxLCBsZW4sIGRhdGEtPnNldC5ydHBfb3V0KTsKKworICBpZihDVVJMX1dSSVRFRlVOQ19QQVVTRSA9PSB3cm90ZSkgeworICAgIGZhaWxmIChkYXRhLCAiQ2Fubm90IHBhdXNlIFJUUCIpOworICAgIHJldHVybiBDVVJMRV9XUklURV9FUlJPUjsKKyAgfQorCisgIGlmKHdyb3RlICE9IGxlbikgeworICAgIGZhaWxmIChkYXRhLCAiRmFpbGVkIHdyaXRpbmcgUlRQIGRhdGEiKTsKKyAgICByZXR1cm4gQ1VSTEVfV1JJVEVfRVJST1I7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK0NVUkxjb2RlIEN1cmxfcnRzcF9wYXJzZWhlYWRlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGVhZGVyKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGxvbmcgQ1NlcSA9IDA7CisKKyAgaWYoY2hlY2twcmVmaXgoIkNTZXE6IiwgaGVhZGVyKSkgeworICAgIC8qIFN0b3JlIHRoZSByZWNlaXZlZCBDU2VxLiBNYXRjaCBpcyB2ZXJpZmllZCBpbiBydHNwX2RvbmUgKi8KKyAgICBpbnQgbmM7CisgICAgY2hhciAqdGVtcCA9IHN0cmR1cChoZWFkZXIpOworICAgIGlmKCF0ZW1wKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgQ3VybF9zdHJudG91cHBlcih0ZW1wLCB0ZW1wLCBzaXplb2YodGVtcCkpOworICAgIG5jID0gc3NjYW5mKHRlbXAsICJDU0VROiAlbGQiLCAmQ1NlcSk7CisgICAgZnJlZSh0ZW1wKTsKKyAgICBpZihuYyA9PSAxKSB7CisgICAgICBkYXRhLT5zdGF0ZS5wcm90by5ydHNwLT5DU2VxX3JlY3YgPSBDU2VxOyAvKiBtYXJrIHRoZSByZXF1ZXN0ICovCisgICAgICBkYXRhLT5zdGF0ZS5ydHNwX0NTZXFfcmVjdiA9IENTZXE7IC8qIHVwZGF0ZSB0aGUgaGFuZGxlICovCisgICAgfQorICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIlVuYWJsZSB0byByZWFkIHRoZSBDU2VxIGhlYWRlcjogWyVzXSIsIGhlYWRlcik7CisgICAgICByZXR1cm4gQ1VSTEVfUlRTUF9DU0VRX0VSUk9SOworICAgIH0KKyAgfQorICBlbHNlIGlmKGNoZWNrcHJlZml4KCJTZXNzaW9uOiIsIGhlYWRlcikpIHsKKyAgICBjaGFyICpzdGFydDsKKworICAgIC8qIEZpbmQgdGhlIGZpcnN0IG5vbi1zcGFjZSBsZXR0ZXIgKi8KKyAgICBzdGFydCA9IGhlYWRlciArIDk7CisgICAgd2hpbGUoKnN0YXJ0ICYmIElTU1BBQ0UoKnN0YXJ0KSkKKyAgICAgIHN0YXJ0Kys7CisKKyAgICBpZighKnN0YXJ0KSB7CisgICAgICBmYWlsZihkYXRhLCAiR290IGEgYmxhbmsgU2Vzc2lvbiBJRCIpOworICAgIH0KKyAgICBlbHNlIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1JUU1BfU0VTU0lPTl9JRF0pIHsKKyAgICAgIC8qIElmIHRoZSBTZXNzaW9uIElEIGlzIHNldCwgdGhlbiBjb21wYXJlICovCisgICAgICBpZihzdHJuY21wKHN0YXJ0LCBkYXRhLT5zZXQuc3RyW1NUUklOR19SVFNQX1NFU1NJT05fSURdLAorICAgICAgICAgICAgICAgICBzdHJsZW4oZGF0YS0+c2V0LnN0cltTVFJJTkdfUlRTUF9TRVNTSU9OX0lEXSkpICAhPSAwKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJHb3QgUlRTUCBTZXNzaW9uIElEIExpbmUgWyVzXSwgYnV0IHdhbnRlZCBJRCBbJXNdIiwKKyAgICAgICAgICAgICAgc3RhcnQsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1JUU1BfU0VTU0lPTl9JRF0pOworICAgICAgICByZXR1cm4gQ1VSTEVfUlRTUF9TRVNTSU9OX0VSUk9SOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIElmIHRoZSBTZXNzaW9uIElEIGlzIG5vdCBzZXQsIGFuZCB3ZSBmaW5kIGl0IGluIGEgcmVzcG9uc2UsIHRoZW4KKyAgICAgICAgIHNldCBpdCAqLworCisgICAgICAvKiBUaGUgc2Vzc2lvbiBJRCBjYW4gYmUgYW4gYWxwaGFudW1lcmljIG9yIGEgJ3NhZmUnIGNoYXJhY3RlcgorICAgICAgICoKKyAgICAgICAqIFJGQyAyMzI2IDE1LjEgQmFzZSBTeW50YXg6CisgICAgICAgKiBzYWZlID0gICJcJCIgfCAiLSIgfCAiXyIgfCAiLiIgfCAiKyIKKyAgICAgICAqICovCisgICAgICBjaGFyICplbmQgPSBzdGFydDsKKyAgICAgIHdoaWxlKCplbmQgJiYKKyAgICAgICAgICAgIChJU0FMTlVNKCplbmQpIHx8ICplbmQgPT0gJy0nIHx8ICplbmQgPT0gJ18nIHx8ICplbmQgPT0gJy4nIHx8CisgICAgICAgICAgICAgKmVuZCA9PSAnKycgfHwKKyAgICAgICAgICAgICAoKmVuZCA9PSAnXFwnICYmICooZW5kICsgMSkgJiYgKihlbmQgKyAxKSA9PSAnJCcgJiYgKCsrZW5kLCAxKSkpKQorICAgICAgICBlbmQrKzsKKworICAgICAgLyogQ29weSB0aGUgaWQgc3Vic3RyaW5nIGludG8gYSBuZXcgYnVmZmVyICovCisgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19SVFNQX1NFU1NJT05fSURdID0gbWFsbG9jKGVuZCAtIHN0YXJ0ICsgMSk7CisgICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19SVFNQX1NFU1NJT05fSURdID09IE5VTEwpCisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgbWVtY3B5KGRhdGEtPnNldC5zdHJbU1RSSU5HX1JUU1BfU0VTU0lPTl9JRF0sIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisgICAgICAoZGF0YS0+c2V0LnN0cltTVFJJTkdfUlRTUF9TRVNTSU9OX0lEXSlbZW5kIC0gc3RhcnRdID0gJ1wwJzsKKyAgICB9CisgIH0KKyAgcmV0dXJuIENVUkxFX09LOworfQorCisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1JUU1AgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9ydHNwLmggYi9jdXJsLTcuMjUuMC9saWIvcnRzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YjhiNWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvcnRzcC5oCkBAIC0wLDAgKzEsNjkgQEAKKyNpZm5kZWYgX19SVFNQX0hfCisjZGVmaW5lIF9fUlRTUF9IXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1JUU1AKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3J0c3A7CisKK2Jvb2wgQ3VybF9ydHNwX2Nvbm5pc2RlYWQoc3RydWN0IGNvbm5lY3RkYXRhICpjaGVjayk7CitDVVJMY29kZSBDdXJsX3J0c3BfcGFyc2VoZWFkZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjaGFyICpoZWFkZXIpOworCisjZWxzZQorLyogZGlzYWJsZWQgKi8KKyNkZWZpbmUgQ3VybF9ydHNwX3BhcnNlaGVhZGVyKHgseSkgQ1VSTEVfTk9UX0JVSUxUX0lOCisjZGVmaW5lIEN1cmxfcnRzcF9jb25uaXNkZWFkKHgpIFRSVUUKKworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9SVFNQICovCisKKy8qCisgKiBSVFNQIENvbm5lY3Rpb24gZGF0YQorICoKKyAqIEN1cnJlbnRseSwgb25seSB1c2VkIGZvciB0cmFja2luZyBpbmNvbXBsZXRlIFJUUCBkYXRhIHJlYWRzCisgKi8KK3N0cnVjdCBydHNwX2Nvbm4geworICBjaGFyICpydHBfYnVmOworICBzc2l6ZV90IHJ0cF9idWZzaXplOworICBpbnQgcnRwX2NoYW5uZWw7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUlRTUCB1bmlxdWUgc2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgUlRTUCB7CisgIC8qCisgICAqIGh0dHBfd3JhcHBlciBNVVNUIGJlIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgc3RydWN0dXJlIGZvciB0aGUgd3JhcAorICAgKiBsb2dpYyB0byB3b3JrLiBJbiB0aGlzIHdheSwgd2UgZ2V0IGEgY2hlYXAgcG9seW1vcnBoaXNtIGJlY2F1c2UKKyAgICogJihkYXRhLT5zdGF0ZS5wcm90by5ydHNwKSA9PSAmKGRhdGEtPnN0YXRlLnByb3RvLmh0dHApIHBlciB0aGUgQyBzcGVjCisgICAqCisgICAqIEhUVFAgZnVuY3Rpb25zIGNhbiBzYWZlbHkgdHJlYXQgdGhpcyBhcyBhbiBIVFRQIHN0cnVjdCwgYnV0IFJUU1AgYXdhcmUKKyAgICogZnVuY3Rpb25zIGNhbiBhbHNvIGluZGV4IGludG8gdGhlIGxhdGVyIGVsZW1lbnRzLgorICAgKi8KKyAgc3RydWN0IEhUVFAgaHR0cF93cmFwcGVyOyAvKndyYXAgSFRUUCB0byBkbyB0aGUgaGVhdnkgbGlmdGluZyAqLworCisgIGxvbmcgQ1NlcV9zZW50OyAvKiBDU2VxIG9mIHRoaXMgcmVxdWVzdCAqLworICBsb25nIENTZXFfcmVjdjsgLyogQ1NlcSByZWNlaXZlZCAqLworfTsKKworCisjZW5kaWYgLyogX19SVFNQX0hfICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc2VjdXJpdHkuYyBiL2N1cmwtNy4yNS4wL2xpYi9zZWN1cml0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNmQ3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc2VjdXJpdHkuYwpAQCAtMCwwICsxLDYwOCBAQAorLyogVGhpcyBzb3VyY2UgY29kZSB3YXMgbW9kaWZpZWQgYnkgTWFydGluIEhlZGVuZmFsayA8bWhlQHN0YWNrZW4ua3RoLnNlPiBmb3IKKyAqIHVzZSBpbiBDdXJsLiBIaXMgbGF0ZXN0IGNoYW5nZXMgd2VyZSBkb25lIDIwMDAtMDktMTguCisgKgorICogSXQgaGFzIHNpbmNlIGJlZW4gcGF0Y2hlZCBhbmQgbW9kaWZpZWQgYSBsb3QgYnkgRGFuaWVsIFN0ZW5iZXJnCisgKiA8ZGFuaWVsQGhheHguc2U+IHRvIG1ha2UgaXQgYmV0dGVyIGFwcGxpZWQgdG8gY3VybCBjb25kaXRpb25zLCBhbmQgdG8gbWFrZQorICogaXQgbm90IHVzZSBnbG9iYWxzLCBwb2xsdXRlIG5hbWUgc3BhY2UgYW5kIG1vcmUuIFRoaXMgc291cmNlIGNvZGUgYXdhaXRzIGEKKyAqIHJld3JpdGUgdG8gd29yayBhcm91bmQgdGhlIHBhcmFncmFwaCAyIGluIHRoZSBCU0QgbGljZW5zZXMgYXMgZXhwbGFpbmVkCisgKiBiZWxvdy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgS3VuZ2xpZ2EgVGVrbmlza2EgSPZnc2tvbGFuCisgKiAoUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBJbnN0aXR1dGUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIElOU1RJVFVURSBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIElOU1RJVFVURSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLiAgKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAorI2lmIGRlZmluZWQoSEFWRV9LUkI0KSB8fCBkZWZpbmVkKEhBVkVfR1NTQVBJKQorCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xJTUlUU19ICisjaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJjdXJsX2Jhc2U2NC5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAia3JiNC5oIgorI2luY2x1ZGUgImZ0cC5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgIGVudW0gcHJvdGVjdGlvbl9sZXZlbCBsZXZlbDsKKyAgY29uc3QgY2hhciAqbmFtZTsKK30gbGV2ZWxfbmFtZXNbXSA9IHsKKyAgeyBQUk9UX0NMRUFSLCAiY2xlYXIiIH0sCisgIHsgUFJPVF9TQUZFLCAic2FmZSIgfSwKKyAgeyBQUk9UX0NPTkZJREVOVElBTCwgImNvbmZpZGVudGlhbCIgfSwKKyAgeyBQUk9UX1BSSVZBVEUsICJwcml2YXRlIiB9Cit9OworCitzdGF0aWMgZW51bSBwcm90ZWN0aW9uX2xldmVsCituYW1lX3RvX2xldmVsKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGludCBpOworICBmb3IoaSA9IDA7IGkgPCAoaW50KXNpemVvZihsZXZlbF9uYW1lcykvKGludClzaXplb2YobGV2ZWxfbmFtZXNbMF0pOyBpKyspCisgICAgaWYoY2hlY2twcmVmaXgobmFtZSwgbGV2ZWxfbmFtZXNbaV0ubmFtZSkpCisgICAgICByZXR1cm4gbGV2ZWxfbmFtZXNbaV0ubGV2ZWw7CisgIHJldHVybiBQUk9UX05PTkU7Cit9CisKKy8qIENvbnZlcnQgYSBwcm90b2NvbCB8bGV2ZWx8IHRvIGl0cyBjaGFyIHJlcHJlc2VudGF0aW9uLgorICAgV2UgdGFrZSBhbiBpbnQgdG8gY2F0Y2ggcHJvZ3JhbW1pbmcgbWlzdGFrZXMuICovCitzdGF0aWMgY2hhciBsZXZlbF90b19jaGFyKGludCBsZXZlbCkgeworICBzd2l0Y2gobGV2ZWwpIHsKKyAgY2FzZSBQUk9UX0NMRUFSOgorICAgIHJldHVybiAnQyc7CisgIGNhc2UgUFJPVF9TQUZFOgorICAgIHJldHVybiAnUyc7CisgIGNhc2UgUFJPVF9DT05GSURFTlRJQUw6CisgICAgcmV0dXJuICdFJzsKKyAgY2FzZSBQUk9UX1BSSVZBVEU6CisgICAgcmV0dXJuICdQJzsKKyAgY2FzZSBQUk9UX0NNRDoKKyAgICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgZGVmYXVsdDoKKyAgICAvKiBUaG9zZSAyIGNhc2VzIHNob3VsZCBub3QgYmUgcmVhY2hlZCEgKi8KKyAgICBicmVhazsKKyAgfQorICBERUJVR0FTU0VSVCgwKTsKKyAgLyogRGVmYXVsdCB0byB0aGUgbW9zdCBzZWN1cmUgYWx0ZXJuYXRpdmUuICovCisgIHJldHVybiAnUCc7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgQ3VybF9zZWNfY2xpZW50X21lY2ggKiBjb25zdCBtZWNoc1tdID0geworI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpCisgICZDdXJsX2tyYjVfY2xpZW50X21lY2gsCisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfS1JCNCkKKyAgJkN1cmxfa3JiNF9jbGllbnRfbWVjaCwKKyNlbmRpZgorICBOVUxMCit9OworCisvKiBTZW5kIGFuIEZUUCBjb21tYW5kIGRlZmluZWQgYnkgfG1lc3NhZ2V8IGFuZCB0aGUgb3B0aW9uYWwgYXJndW1lbnRzLiBUaGUKKyAgIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZ0cF9jb2RlLiBJZiBhbiBlcnJvciBvY2N1cnMsIC0xIGlzIHJldHVybmVkLiAqLworc3RhdGljIGludCBmdHBfc2VuZF9jb21tYW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICBpbnQgZnRwX2NvZGU7CisgIHNzaXplX3QgbnJlYWQ7CisgIHZhX2xpc3QgYXJnczsKKyAgY2hhciBwcmludF9idWZmZXJbNTBdOworCisgIHZhX3N0YXJ0KGFyZ3MsIG1lc3NhZ2UpOworICB2c25wcmludGYocHJpbnRfYnVmZmVyLCBzaXplb2YocHJpbnRfYnVmZmVyKSwgbWVzc2FnZSwgYXJncyk7CisgIHZhX2VuZChhcmdzKTsKKworICBpZihDdXJsX2Z0cHNlbmRmKGNvbm4sIHByaW50X2J1ZmZlcikgIT0gQ1VSTEVfT0spIHsKKyAgICBmdHBfY29kZSA9IC0xOworICB9CisgIGVsc2UgeworICAgIGlmKEN1cmxfR2V0RlRQUmVzcG9uc2UoJm5yZWFkLCBjb25uLCAmZnRwX2NvZGUpICE9IENVUkxFX09LKQorICAgICAgZnRwX2NvZGUgPSAtMTsKKyAgfQorCisgICh2b2lkKW5yZWFkOyAvKiBVbnVzZWQgKi8KKyAgcmV0dXJuIGZ0cF9jb2RlOworfQorCisvKiBSZWFkIHxsZW58IGZyb20gdGhlIHNvY2tldCB8ZmR8IGFuZCBzdG9yZSBpdCBpbiB8dG98LiBSZXR1cm4gYSBDVVJMY29kZQorICAgc2F5aW5nIHdoZXRoZXIgYW4gZXJyb3Igb2NjdXJyZWQgb3IgQ1VSTEVfT0sgaWYgfGxlbnwgd2FzIHJlYWQuICovCitzdGF0aWMgQ1VSTGNvZGUKK3NvY2tldF9yZWFkKGN1cmxfc29ja2V0X3QgZmQsIHZvaWQgKnRvLCBzaXplX3QgbGVuKQoreworICBjaGFyICp0b19wID0gdG87CisgIENVUkxjb2RlIGNvZGU7CisgIHNzaXplX3QgbnJlYWQ7CisKKyAgd2hpbGUobGVuID4gMCkgeworICAgIGNvZGUgPSBDdXJsX3JlYWRfcGxhaW4oZmQsIHRvX3AsIGxlbiwgJm5yZWFkKTsKKyAgICBpZihjb2RlID09IENVUkxFX09LKSB7CisgICAgICBsZW4gLT0gbnJlYWQ7CisgICAgICB0b19wICs9IG5yZWFkOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIEZJWE1FOiBXZSBhcmUgZG9pbmcgYSBidXN5IHdhaXQgKi8KKyAgICAgIGlmKGNvZGUgPT0gQ1VSTEVfQUdBSU4pCisgICAgICAgIGNvbnRpbnVlOworICAgICAgcmV0dXJuIGNvZGU7CisgICAgfQorICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworCisvKiBXcml0ZSB8bGVufCBieXRlcyBmcm9tIHRoZSBidWZmZXIgfHRvfCB0byB0aGUgc29ja2V0IHxmZHwuIFJldHVybiBhCisgICBDVVJMY29kZSBzYXlpbmcgd2hldGhlciBhbiBlcnJvciBvY2N1cnJlZCBvciBDVVJMRV9PSyBpZiB8bGVufCB3YXMKKyAgIHdyaXR0ZW4uICovCitzdGF0aWMgQ1VSTGNvZGUKK3NvY2tldF93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgZmQsIGNvbnN0IHZvaWQgKnRvLAorICAgICAgICAgICAgIHNpemVfdCBsZW4pCit7CisgIGNvbnN0IGNoYXIgKnRvX3AgPSB0bzsKKyAgQ1VSTGNvZGUgY29kZTsKKyAgc3NpemVfdCB3cml0dGVuOworCisgIHdoaWxlKGxlbiA+IDApIHsKKyAgICBjb2RlID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBmZCwgdG9fcCwgbGVuLCAmd3JpdHRlbik7CisgICAgaWYoY29kZSA9PSBDVVJMRV9PSykgeworICAgICAgbGVuIC09IHdyaXR0ZW47CisgICAgICB0b19wICs9IHdyaXR0ZW47CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogRklYTUU6IFdlIGFyZSBkb2luZyBhIGJ1c3kgd2FpdCAqLworICAgICAgaWYoY29kZSA9PSBDVVJMRV9BR0FJTikKKyAgICAgICAgY29udGludWU7CisgICAgICByZXR1cm4gY29kZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgcmVhZF9kYXRhKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGtyYjRidWZmZXIgKmJ1ZikKK3sKKyAgaW50IGxlbjsKKyAgdm9pZCogdG1wOworICBDVVJMY29kZSByZXQ7CisKKyAgcmV0ID0gc29ja2V0X3JlYWQoZmQsICZsZW4sIHNpemVvZihsZW4pKTsKKyAgaWYocmV0ICE9IENVUkxFX09LKQorICAgIHJldHVybiByZXQ7CisKKyAgbGVuID0gbnRvaGwobGVuKTsKKyAgdG1wID0gcmVhbGxvYyhidWYtPmRhdGEsIGxlbik7CisgIGlmKHRtcCA9PSBOVUxMKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIGJ1Zi0+ZGF0YSA9IHRtcDsKKyAgcmV0ID0gc29ja2V0X3JlYWQoZmQsIGJ1Zi0+ZGF0YSwgbGVuKTsKKyAgaWYocmV0ICE9IENVUkxFX09LKQorICAgIHJldHVybiByZXQ7CisgIGJ1Zi0+c2l6ZSA9IGNvbm4tPm1lY2gtPmRlY29kZShjb25uLT5hcHBfZGF0YSwgYnVmLT5kYXRhLCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5kYXRhX3Byb3QsIGNvbm4pOworICBidWYtPmluZGV4ID0gMDsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgc2l6ZV90CitidWZmZXJfcmVhZChzdHJ1Y3Qga3JiNGJ1ZmZlciAqYnVmLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworICBpZihidWYtPnNpemUgLSBidWYtPmluZGV4IDwgbGVuKQorICAgIGxlbiA9IGJ1Zi0+c2l6ZSAtIGJ1Zi0+aW5kZXg7CisgIG1lbWNweShkYXRhLCAoY2hhciopYnVmLT5kYXRhICsgYnVmLT5pbmRleCwgbGVuKTsKKyAgYnVmLT5pbmRleCArPSBsZW47CisgIHJldHVybiBsZW47Cit9CisKKy8qIE1hdGNoZXMgQ3VybF9yZWN2IHNpZ25hdHVyZSAqLworc3RhdGljIHNzaXplX3Qgc2VjX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzaXplX3QgYnl0ZXNfcmVhZDsKKyAgc2l6ZV90IHRvdGFsX3JlYWQgPSAwOworICBjdXJsX3NvY2tldF90IGZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworCisgICplcnIgPSBDVVJMRV9PSzsKKworICAvKiBIYW5kbGUgY2xlYXIgdGV4dCByZXNwb25zZS4gKi8KKyAgaWYoY29ubi0+c2VjX2NvbXBsZXRlID09IDAgfHwgY29ubi0+ZGF0YV9wcm90ID09IFBST1RfQ0xFQVIpCisgICAgICByZXR1cm4gcmVhZChmZCwgYnVmZmVyLCBsZW4pOworCisgIGlmKGNvbm4tPmluX2J1ZmZlci5lb2ZfZmxhZykgeworICAgIGNvbm4tPmluX2J1ZmZlci5lb2ZfZmxhZyA9IDA7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBieXRlc19yZWFkID0gYnVmZmVyX3JlYWQoJmNvbm4tPmluX2J1ZmZlciwgYnVmZmVyLCBsZW4pOworICBsZW4gLT0gYnl0ZXNfcmVhZDsKKyAgdG90YWxfcmVhZCArPSBieXRlc19yZWFkOworICBidWZmZXIgKz0gYnl0ZXNfcmVhZDsKKworICB3aGlsZShsZW4gPiAwKSB7CisgICAgaWYocmVhZF9kYXRhKGNvbm4sIGZkLCAmY29ubi0+aW5fYnVmZmVyKSAhPSBDVVJMRV9PSykKKyAgICAgIHJldHVybiAtMTsKKyAgICBpZihjb25uLT5pbl9idWZmZXIuc2l6ZSA9PSAwKSB7CisgICAgICBpZihieXRlc19yZWFkID4gMCkKKyAgICAgICAgY29ubi0+aW5fYnVmZmVyLmVvZl9mbGFnID0gMTsKKyAgICAgIHJldHVybiBieXRlc19yZWFkOworICAgIH0KKyAgICBieXRlc19yZWFkID0gYnVmZmVyX3JlYWQoJmNvbm4tPmluX2J1ZmZlciwgYnVmZmVyLCBsZW4pOworICAgIGxlbiAtPSBieXRlc19yZWFkOworICAgIHRvdGFsX3JlYWQgKz0gYnl0ZXNfcmVhZDsKKyAgICBidWZmZXIgKz0gYnl0ZXNfcmVhZDsKKyAgfQorICAvKiBGSVhNRTogQ2hlY2sgZm9yIG92ZXJmbG93ICovCisgIHJldHVybiB0b3RhbF9yZWFkOworfQorCisvKiBTZW5kIHxsZW5ndGh8IGJ5dGVzIGZyb20gfGZyb218IHRvIHRoZSB8ZmR8IHNvY2tldCB0YWtpbmcgY2FyZSBvZiBlbmNvZGluZworICAgYW5kIG5lZ29jaWF0aW5nIHdpdGggdGhlIHNlcnZlci4gfGZyb218IGNhbiBiZSBOVUxMLiAqLworLyogRklYTUU6IFdlIGRvbid0IGNoZWNrIGZvciBlcnJvcnMgbm9yIHJlcG9ydCBhbnkhICovCitzdGF0aWMgdm9pZCBkb19zZWNfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmcm9tLCBpbnQgbGVuZ3RoKQoreworICBpbnQgYnl0ZXMsIGh0b25sX2J5dGVzOyAvKiAzMi1iaXQgaW50ZWdlcnMgZm9yIGh0b25sICovCisgIGNoYXIgKmJ1ZmZlciA9IE5VTEw7CisgIGNoYXIgKmNtZF9idWZmZXI7CisgIHNpemVfdCBjbWRfc2l6ZSA9IDA7CisgIENVUkxjb2RlIGVycm9yOworICBlbnVtIHByb3RlY3Rpb25fbGV2ZWwgcHJvdF9sZXZlbCA9IGNvbm4tPmRhdGFfcHJvdDsKKyAgYm9vbCBpc2NtZCA9IChwcm90X2xldmVsID09IFBST1RfQ01EKT9UUlVFOkZBTFNFOworCisgIERFQlVHQVNTRVJUKHByb3RfbGV2ZWwgPiBQUk9UX05PTkUgJiYgcHJvdF9sZXZlbCA8IFBST1RfTEFTVCk7CisKKyAgaWYoaXNjbWQpIHsKKyAgICBpZighc3RybmNtcChmcm9tLCAiUEFTUyAiLCA1KSB8fCAhc3RybmNtcChmcm9tLCAiQUNDVCAiLCA1KSkKKyAgICAgIHByb3RfbGV2ZWwgPSBQUk9UX1BSSVZBVEU7CisgICAgZWxzZQorICAgICAgcHJvdF9sZXZlbCA9IGNvbm4tPmNvbW1hbmRfcHJvdDsKKyAgfQorICBieXRlcyA9IGNvbm4tPm1lY2gtPmVuY29kZShjb25uLT5hcHBfZGF0YSwgZnJvbSwgbGVuZ3RoLCBwcm90X2xldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCoqKSZidWZmZXIsIGNvbm4pOworICBpZighYnVmZmVyIHx8IGJ5dGVzIDw9IDApCisgICAgcmV0dXJuOyAvKiBlcnJvciAqLworCisgIGlmKGlzY21kKSB7CisgICAgZXJyb3IgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoY29ubi0+ZGF0YSwgYnVmZmVyLCBjdXJseF9zaXRvdXooYnl0ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbWRfYnVmZmVyLCAmY21kX3NpemUpOworICAgIGlmKGVycm9yKSB7CisgICAgICBmcmVlKGJ1ZmZlcik7CisgICAgICByZXR1cm47IC8qIGVycm9yICovCisgICAgfQorICAgIGlmKGNtZF9zaXplID4gMCkgeworICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmVuYyA9ICJFTkMgIjsKKyAgICAgIHN0YXRpYyBjb25zdCBjaGFyICptaWMgPSAiTUlDICI7CisgICAgICBpZihwcm90X2xldmVsID09IFBST1RfUFJJVkFURSkKKyAgICAgICAgc29ja2V0X3dyaXRlKGNvbm4sIGZkLCBlbmMsIDQpOworICAgICAgZWxzZQorICAgICAgICBzb2NrZXRfd3JpdGUoY29ubiwgZmQsIG1pYywgNCk7CisKKyAgICAgIHNvY2tldF93cml0ZShjb25uLCBmZCwgY21kX2J1ZmZlciwgY21kX3NpemUpOworICAgICAgc29ja2V0X3dyaXRlKGNvbm4sIGZkLCAiXHJcbiIsIDIpOworICAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIlNlbmQ6ICVzJXNcbiIsIHByb3RfbGV2ZWwgPT0gUFJPVF9QUklWQVRFP2VuYzptaWMsCisgICAgICAgICAgICBjbWRfYnVmZmVyKTsKKyAgICAgIGZyZWUoY21kX2J1ZmZlcik7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGh0b25sX2J5dGVzID0gaHRvbmwoYnl0ZXMpOworICAgIHNvY2tldF93cml0ZShjb25uLCBmZCwgJmh0b25sX2J5dGVzLCBzaXplb2YoaHRvbmxfYnl0ZXMpKTsKKyAgICBzb2NrZXRfd3JpdGUoY29ubiwgZmQsIGJ1ZmZlciwgY3VybHhfc2l0b3V6KGJ5dGVzKSk7CisgIH0KKyAgZnJlZShidWZmZXIpOworfQorCitzdGF0aWMgc3NpemVfdCBzZWNfd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90IGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgLyogRklYTUU6IENoZWNrIGZvciBvdmVyZmxvdyAqLworICBzc2l6ZV90IGxlbiA9IGNvbm4tPmJ1ZmZlcl9zaXplOworICBpbnQgdHggPSAwOworCisgIGxlbiAtPSBjb25uLT5tZWNoLT5vdmVyaGVhZChjb25uLT5hcHBfZGF0YSwgY29ubi0+ZGF0YV9wcm90LCBsZW4pOworICBpZihsZW4gPD0gMCkKKyAgICBsZW4gPSBsZW5ndGg7CisgIHdoaWxlKGxlbmd0aCkgeworICAgIGlmKGxlbiA+PSAwIHx8IGxlbmd0aCA8IChzaXplX3QpbGVuKSB7CisgICAgICAvKiBGSVhNRTogQ2hlY2sgZm9yIG92ZXJmbG93LiAqLworICAgICAgbGVuID0gbGVuZ3RoOworICAgIH0KKyAgICBkb19zZWNfc2VuZChjb25uLCBmZCwgYnVmZmVyLCBsZW4pOworICAgIGxlbmd0aCAtPSBsZW47CisgICAgYnVmZmVyICs9IGxlbjsKKyAgICB0eCArPSBsZW47CisgIH0KKyAgcmV0dXJuIHR4OworfQorCisvKiBNYXRjaGVzIEN1cmxfc2VuZCBzaWduYXR1cmUgKi8KK3N0YXRpYyBzc2l6ZV90IHNlY19zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgY3VybF9zb2NrZXRfdCBmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKKyAgKmVyciA9IENVUkxFX09LOworICByZXR1cm4gc2VjX3dyaXRlKGNvbm4sIGZkLCBidWZmZXIsIGxlbik7Cit9CisKK2ludCBDdXJsX3NlY19yZWFkX21zZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICBlbnVtIHByb3RlY3Rpb25fbGV2ZWwgbGV2ZWwpCit7CisgIC8qIGRlY29kZWRfbGVuIHNob3VsZCBiZSBzaXplX3Qgb3Igc3NpemVfdCBidXQgY29ubi0+bWVjaC0+ZGVjb2RlIHJldHVybnMgYW4KKyAgICAgaW50ICovCisgIGludCBkZWNvZGVkX2xlbjsKKyAgY2hhciAqYnVmOworICBpbnQgcmV0X2NvZGU7CisgIHNpemVfdCBkZWNvZGVkX3N6ID0gMDsKKyAgQ1VSTGNvZGUgZXJyb3I7CisKKyAgREVCVUdBU1NFUlQobGV2ZWwgPiBQUk9UX05PTkUgJiYgbGV2ZWwgPCBQUk9UX0xBU1QpOworCisgIGVycm9yID0gQ3VybF9iYXNlNjRfZGVjb2RlKGJ1ZmZlciArIDQsICh1bnNpZ25lZCBjaGFyICoqKSZidWYsICZkZWNvZGVkX3N6KTsKKyAgaWYoZXJyb3IgfHwgZGVjb2RlZF9zeiA9PSAwKQorICAgIHJldHVybiAtMTsKKworICBpZihkZWNvZGVkX3N6ID4gKHNpemVfdClJTlRfTUFYKSB7CisgICAgZnJlZShidWYpOworICAgIHJldHVybiAtMTsKKyAgfQorICBkZWNvZGVkX2xlbiA9IGN1cmx4X3V6dG9zaShkZWNvZGVkX3N6KTsKKworICBkZWNvZGVkX2xlbiA9IGNvbm4tPm1lY2gtPmRlY29kZShjb25uLT5hcHBfZGF0YSwgYnVmLCBkZWNvZGVkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsIGNvbm4pOworICBpZihkZWNvZGVkX2xlbiA8PSAwKSB7CisgICAgZnJlZShidWYpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmKGNvbm4tPmRhdGEtPnNldC52ZXJib3NlKSB7CisgICAgYnVmW2RlY29kZWRfbGVuXSA9ICdcbic7CisgICAgQ3VybF9kZWJ1Zyhjb25uLT5kYXRhLCBDVVJMSU5GT19IRUFERVJfSU4sIGJ1ZiwgZGVjb2RlZF9sZW4gKyAxLCBjb25uKTsKKyAgfQorCisgIGJ1ZltkZWNvZGVkX2xlbl0gPSAnXDAnOworICBERUJVR0FTU0VSVChkZWNvZGVkX2xlbiA+IDMpOworICBpZihidWZbM10gPT0gJy0nKQorICAgIHJldF9jb2RlID0gMDsKKyAgZWxzZSB7CisgICAgLyogQ2hlY2sgZm9yIGVycm9yPyAqLworICAgIHNzY2FuZihidWYsICIlZCIsICZyZXRfY29kZSk7CisgIH0KKworICBpZihidWZbZGVjb2RlZF9sZW4gLSAxXSA9PSAnXG4nKQorICAgIGJ1ZltkZWNvZGVkX2xlbiAtIDFdID0gJ1wwJzsKKyAgLyogRklYTUU6IElzIHxidWZmZXJ8IGxlbmd0aCBhbHdheXMgZ3JlYXRlciB0aGFuIHxkZWNvZGVkX2xlbnw/ICovCisgIHN0cmNweShidWZmZXIsIGJ1Zik7CisgIGZyZWUoYnVmKTsKKyAgcmV0dXJuIHJldF9jb2RlOworfQorCisvKiBGSVhNRTogVGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgaGVyZSBpcyBuZXZlciBjaGVja2VkLiAqLworc3RhdGljIGludCBzZWNfc2V0X3Byb3RlY3Rpb25fbGV2ZWwoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBpbnQgY29kZTsKKyAgY2hhciogcGJzejsKKyAgc3RhdGljIHVuc2lnbmVkIGludCBidWZmZXJfc2l6ZSA9IDEgPDwgMjA7IC8qIDEwNDg1NzYgKi8KKyAgZW51bSBwcm90ZWN0aW9uX2xldmVsIGxldmVsID0gY29ubi0+cmVxdWVzdF9kYXRhX3Byb3Q7CisKKyAgREVCVUdBU1NFUlQobGV2ZWwgPiBQUk9UX05PTkUgJiYgbGV2ZWwgPCBQUk9UX0xBU1QpOworCisgIGlmKCFjb25uLT5zZWNfY29tcGxldGUpIHsKKyAgICBpbmZvZihjb25uLT5kYXRhLCAiVHJ5aW5nIHRvIGNoYW5nZSB0aGUgcHJvdGVjdGlvbiBsZXZlbCBhZnRlciB0aGUiCisgICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXRpb24gb2YgdGhlIGRhdGEgZXhjaGFuZ2UuXG4iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAvKiBCYWlsIG91dCBpZiB3ZSB0cnkgdG8gc2V0IHVwIHRoZSBzYW1lIGxldmVsICovCisgIGlmKGNvbm4tPmRhdGFfcHJvdCA9PSBsZXZlbCkKKyAgICByZXR1cm4gMDsKKworICBpZihsZXZlbCkgeworICAgIGNvZGUgPSBmdHBfc2VuZF9jb21tYW5kKGNvbm4sICJQQlNaICV1IiwgYnVmZmVyX3NpemUpOworICAgIGlmKGNvZGUgPCAwKQorICAgICAgcmV0dXJuIC0xOworCisgICAgaWYoY29kZS8xMDAgIT0gMikgeworICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIkZhaWxlZCB0byBzZXQgdGhlIHByb3RlY3Rpb24ncyBidWZmZXIgc2l6ZS4iKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgY29ubi0+YnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZTsKKworICAgIHBic3ogPSBzdHJzdHIoY29ubi0+ZGF0YS0+c3RhdGUuYnVmZmVyLCAiUEJTWj0iKTsKKyAgICBpZihwYnN6KSB7CisgICAgICAvKiBGSVhNRTogQ2hlY2tzIGZvciBlcnJvcnMgaW4gc3NjYW5mPyAqLworICAgICAgc3NjYW5mKHBic3osICJQQlNaPSV1IiwgJmJ1ZmZlcl9zaXplKTsKKyAgICAgIGlmKGJ1ZmZlcl9zaXplIDwgY29ubi0+YnVmZmVyX3NpemUpCisgICAgICAgIGNvbm4tPmJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemU7CisgICAgfQorICB9CisKKyAgLyogTm93IHRyeSB0byBuZWdpb2NpYXRlIHRoZSBwcm90ZWN0aW9uIGxldmVsLiAqLworICBjb2RlID0gZnRwX3NlbmRfY29tbWFuZChjb25uLCAiUFJPVCAlYyIsIGxldmVsX3RvX2NoYXIobGV2ZWwpKTsKKworICBpZihjb2RlIDwgMCkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYoY29kZS8xMDAgIT0gMikgeworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJGYWlsZWQgdG8gc2V0IHRoZSBwcm90ZWN0aW9uIGxldmVsLiIpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGNvbm4tPmRhdGFfcHJvdCA9IGxldmVsOworICBpZihsZXZlbCA9PSBQUk9UX1BSSVZBVEUpCisgICAgY29ubi0+Y29tbWFuZF9wcm90ID0gbGV2ZWw7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorQ3VybF9zZWNfcmVxdWVzdF9wcm90KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3QgY2hhciAqbGV2ZWwpCit7CisgIGVudW0gcHJvdGVjdGlvbl9sZXZlbCBsID0gbmFtZV90b19sZXZlbChsZXZlbCk7CisgIGlmKGwgPT0gUFJPVF9OT05FKQorICAgIHJldHVybiAtMTsKKyAgREVCVUdBU1NFUlQobCA+IFBST1RfTk9ORSAmJiBsIDwgUFJPVF9MQVNUKTsKKyAgY29ubi0+cmVxdWVzdF9kYXRhX3Byb3QgPSBsOworICByZXR1cm4gMDsKK30KKworc3RhdGljIENVUkxjb2RlIGNob29zZV9tZWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaW50IHJldDsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBjb25zdCBzdHJ1Y3QgQ3VybF9zZWNfY2xpZW50X21lY2ggKiBjb25zdCAqbWVjaDsKKyAgdm9pZCAqdG1wX2FsbG9jYXRpb247CisgIGNvbnN0IGNoYXIgKm1lY2hfbmFtZTsKKworICBmb3IobWVjaCA9IG1lY2hzOyAoKm1lY2gpOyArK21lY2gpIHsKKyAgICBtZWNoX25hbWUgPSAoKm1lY2gpLT5uYW1lOworICAgIC8qIFdlIGhhdmUgbm8gbWVjaGFuaXNtIHdpdGggYSBOVUxMIG5hbWUgYnV0IGtlZXAgdGhpcyBjaGVjayAqLworICAgIERFQlVHQVNTRVJUKG1lY2hfbmFtZSAhPSBOVUxMKTsKKyAgICBpZihtZWNoX25hbWUgPT0gTlVMTCkgeworICAgICAgaW5mb2YoZGF0YSwgIlNraXBwaW5nIG1lY2hhbmlzbSB3aXRoIGVtcHR5IG5hbWUgKCVwKVxuIiwgbWVjaCk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgdG1wX2FsbG9jYXRpb24gPSByZWFsbG9jKGNvbm4tPmFwcF9kYXRhLCAoKm1lY2gpLT5zaXplKTsKKyAgICBpZih0bXBfYWxsb2NhdGlvbiA9PSBOVUxMKSB7CisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHJlYWxsb2Mgb2Ygc2l6ZSAldSIsICgqbWVjaCktPnNpemUpOworICAgICAgbWVjaCA9IE5VTEw7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgICAgY29ubi0+YXBwX2RhdGEgPSB0bXBfYWxsb2NhdGlvbjsKKworICAgIGlmKCgqbWVjaCktPmluaXQpIHsKKyAgICAgIHJldCA9ICgqbWVjaCktPmluaXQoY29ubi0+YXBwX2RhdGEpOworICAgICAgaWYocmV0ICE9IDApIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCBpbml0aWFsaXphdGlvbiBmb3IgJXMuIFNraXBwaW5nIGl0LlxuIiwgbWVjaF9uYW1lKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgfQorCisgICAgaW5mb2YoZGF0YSwgIlRyeWluZyBtZWNoYW5pc20gJXMuLi5cbiIsIG1lY2hfbmFtZSk7CisgICAgcmV0ID0gZnRwX3NlbmRfY29tbWFuZChjb25uLCAiQVVUSCAlcyIsIG1lY2hfbmFtZSk7CisgICAgaWYocmV0IDwgMCkKKyAgICAgIC8qIEZJWE1FOiBUaGlzIGVycm9yIGlzIHRvbyBnZW5lcmljIGJ1dCBpdCBpcyBPSyBmb3Igbm93LiAqLworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKworICAgIGlmKHJldC8xMDAgIT0gMykgeworICAgICAgc3dpdGNoKHJldCkgeworICAgICAgY2FzZSA1MDQ6CisgICAgICAgIGluZm9mKGRhdGEsICJNZWNoYW5pc20gJXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc2VydmVyIChzZXJ2ZXIgIgorICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgZnRwIGNvZGU6IDUwNCkuXG4iLCBtZWNoX25hbWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgNTM0OgorICAgICAgICBpbmZvZihkYXRhLCAiTWVjaGFuaXNtICVzIHdhcyByZWplY3RlZCBieSB0aGUgc2VydmVyIChzZXJ2ZXIgcmV0dXJuZWQgIgorICAgICAgICAgICAgICAgICAgICAiZnRwIGNvZGU6IDUzNCkuXG4iLCBtZWNoX25hbWUpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGlmKHJldC8xMDAgPT0gNSkgeworICAgICAgICAgIGluZm9mKGRhdGEsICJzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VjdXJpdHkgZXh0ZW5zaW9uc1xuIik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX1VTRV9TU0xfRkFJTEVEOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogQXV0aGVudGljYXRlICovCisgICAgcmV0ID0gKCptZWNoKS0+YXV0aChjb25uLT5hcHBfZGF0YSwgY29ubik7CisKKyAgICBpZihyZXQgPT0gQVVUSF9DT05USU5VRSkKKyAgICAgIGNvbnRpbnVlOworICAgIGVsc2UgaWYocmV0ICE9IEFVVEhfT0spIHsKKyAgICAgIC8qIE1lY2hhbmlzbSBoYXMgZHVtcGVkIHRoZSBlcnJvciB0byBzdGRlcnIsIGRvbid0IGVycm9yIGhlcmUuICovCisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIERFQlVHQVNTRVJUKHJldCA9PSBBVVRIX09LKTsKKworICAgIGNvbm4tPm1lY2ggPSAqbWVjaDsKKyAgICBjb25uLT5zZWNfY29tcGxldGUgPSAxOworICAgIGNvbm4tPnJlY3ZbRklSU1RTT0NLRVRdID0gc2VjX3JlY3Y7CisgICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSBzZWNfc2VuZDsKKyAgICBjb25uLT5yZWN2W1NFQ09OREFSWVNPQ0tFVF0gPSBzZWNfcmVjdjsKKyAgICBjb25uLT5zZW5kW1NFQ09OREFSWVNPQ0tFVF0gPSBzZWNfc2VuZDsKKyAgICBjb25uLT5jb21tYW5kX3Byb3QgPSBQUk9UX1NBRkU7CisgICAgLyogU2V0IHRoZSByZXF1ZXN0ZWQgcHJvdGVjdGlvbiBsZXZlbCAqLworICAgIC8qIEJMT0NLSU5HICovCisgICAgKHZvaWQpc2VjX3NldF9wcm90ZWN0aW9uX2xldmVsKGNvbm4pOworICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIG1lY2ggIT0gTlVMTCA/IENVUkxFX09LIDogQ1VSTEVfRkFJTEVEX0lOSVQ7Cit9CisKK0NVUkxjb2RlCitDdXJsX3NlY19sb2dpbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHJldHVybiBjaG9vc2VfbWVjaChjb25uKTsKK30KKworCit2b2lkCitDdXJsX3NlY19lbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBpZihjb25uLT5tZWNoICE9IE5VTEwgJiYgY29ubi0+bWVjaC0+ZW5kKQorICAgIGNvbm4tPm1lY2gtPmVuZChjb25uLT5hcHBfZGF0YSk7CisgIGlmKGNvbm4tPmFwcF9kYXRhKSB7CisgICAgZnJlZShjb25uLT5hcHBfZGF0YSk7CisgICAgY29ubi0+YXBwX2RhdGEgPSBOVUxMOworICB9CisgIGlmKGNvbm4tPmluX2J1ZmZlci5kYXRhKSB7CisgICAgZnJlZShjb25uLT5pbl9idWZmZXIuZGF0YSk7CisgICAgY29ubi0+aW5fYnVmZmVyLmRhdGEgPSBOVUxMOworICAgIGNvbm4tPmluX2J1ZmZlci5zaXplID0gMDsKKyAgICBjb25uLT5pbl9idWZmZXIuaW5kZXggPSAwOworICAgIC8qIEZJWE1FOiBJcyB0aGlzIHJlYWxseSBuZWVkZWQ/ICovCisgICAgY29ubi0+aW5fYnVmZmVyLmVvZl9mbGFnID0gMDsKKyAgfQorICBjb25uLT5zZWNfY29tcGxldGUgPSAwOworICBjb25uLT5kYXRhX3Byb3QgPSBQUk9UX0NMRUFSOworICBjb25uLT5tZWNoID0gTlVMTDsKK30KKworI2VuZGlmIC8qIEhBVkVfS1JCNCB8fCBIQVZFX0dTU0FQSSAqLworCisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0ZUUCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3NlbGVjdC5jIGIvY3VybC03LjI1LjAvbGliL3NlbGVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNjczZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc2VsZWN0LmMKQEAgLTAsMCArMSw1MjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVZFX1NFTEVDVCkgJiYgIWRlZmluZWQoSEFWRV9QT0xMX0ZJTkUpCisjZXJyb3IgIldlIGNhbid0IGNvbXBpbGUgd2l0aG91dCBzZWxlY3QoKSBvciBwb2xsKCkgc3VwcG9ydC4iCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19CRU9TX18pICYmICFkZWZpbmVkKF9fSEFJS1VfXykKKy8qIEJlT1MgaGFzIEZEX1NFVCBkZWZpbmVkIGluIHNvY2tldC5oICovCisjaW5jbHVkZSA8c29ja2V0Lmg+CisjZW5kaWYKKworI2lmZGVmIE1TRE9TCisjaW5jbHVkZSA8ZG9zLmg+ICAvKiBkZWxheSgpICovCisjZW5kaWYKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorCisvKiBDb252ZW5pZW5jZSBsb2NhbCBtYWNyb3MgKi8KKworI2RlZmluZSBlbGFwc2VkX21zICAoaW50KWN1cmx4X3R2ZGlmZihjdXJseF90dm5vdygpLCBpbml0aWFsX3R2KQorCisjaWZkZWYgQ1VSTF9BQ0tOT1dMRURHRV9FSU5UUgorI2RlZmluZSBlcnJvcl9ub3RfRUlOVFIgKDEpCisjZWxzZQorI2RlZmluZSBlcnJvcl9ub3RfRUlOVFIgKGVycm9yICE9IEVJTlRSKQorI2VuZGlmCisKKy8qCisgKiBJbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciB3YWl0aW5nIGEgc3BlY2lmaWMgYW1vdW50IG9mIG1zCisgKiBpbiBDdXJsX3NvY2tldF9yZWFkeSgpIGFuZCBDdXJsX3BvbGwoKSB3aGVuIG5vIGZpbGUgZGVzY3JpcHRvcgorICogaXMgcHJvdmlkZWQgdG8gd2FpdCBvbiwganVzdCBiZWluZyB1c2VkIHRvIGRlbGF5IGV4ZWN1dGlvbi4KKyAqIFdpblNvY2sgc2VsZWN0KCkgYW5kIHBvbGwoKSB0aW1lb3V0IG1lY2hhbmlzbXMgbmVlZCBhIHZhbGlkCisgKiBzb2NrZXQgZGVzY3JpcHRvciBpbiBhIG5vdCBudWxsIGZpbGUgZGVzY3JpcHRvciBzZXQgdG8gd29yay4KKyAqIFdhaXRpbmcgaW5kZWZpbml0ZWx5IHdpdGggdGhpcyBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCwgYQorICogemVybyBvciBuZWdhdGl2ZSB0aW1lb3V0IHZhbHVlIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LgorICogVGltZW91dCByZXNvbHV0aW9uLCBhY2N1cmFjeSwgYXMgd2VsbCBhcyBtYXhpbXVtIHN1cHBvcnRlZAorICogdmFsdWUgaXMgc3lzdGVtIGRlcGVuZGVudCwgbmVpdGhlciBmYWN0b3IgaXMgYSBjaXRpY2FsIGlzc3VlCisgKiBmb3IgdGhlIGludGVuZGVkIHVzZSBvZiB0aGlzIGZ1bmN0aW9uIGluIHRoZSBsaWJyYXJ5LgorICogT24gbm9uLURPUyBhbmQgbm9uLVdpbnNvY2sgcGxhdGZvcm1zLCB3aGVuIGNvbXBpbGVkIHdpdGgKKyAqIENVUkxfQUNLTk9XTEVER0VfRUlOVFIgZGVmaW5lZCwgRUlOVFIgY29uZGl0aW9uIGlzIGhvbm9yZWQKKyAqIGFuZCBmdW5jdGlvbiBtaWdodCBleGl0IGVhcmx5IHdpdGhvdXQgYXdhaXRpbmcgZnVsbCB0aW1lb3V0LAorICogb3RoZXJ3aXNlIEVJTlRSIHdpbGwgYmUgaWdub3JlZCBhbmQgZnVsbCB0aW1lb3V0IHdpbGwgZWxhcHNlLgorICoKKyAqIFJldHVybiB2YWx1ZXM6CisgKiAgIC0xID0gc3lzdGVtIGNhbGwgZXJyb3IsIGludmFsaWQgdGltZW91dCB2YWx1ZSwgb3IgaW50ZXJydXB0ZWQKKyAqICAgIDAgPSBzcGVjaWZpZWQgdGltZW91dCBoYXMgZWxhcHNlZAorICovCitpbnQgQ3VybF93YWl0X21zKGludCB0aW1lb3V0X21zKQoreworI2lmICFkZWZpbmVkKE1TRE9TKSAmJiAhZGVmaW5lZChVU0VfV0lOU09DSykKKyNpZm5kZWYgSEFWRV9QT0xMX0ZJTkUKKyAgc3RydWN0IHRpbWV2YWwgcGVuZGluZ190djsKKyNlbmRpZgorICBzdHJ1Y3QgdGltZXZhbCBpbml0aWFsX3R2OworICBpbnQgcGVuZGluZ19tczsKKyAgaW50IGVycm9yOworI2VuZGlmCisgIGludCByID0gMDsKKworICBpZighdGltZW91dF9tcykKKyAgICByZXR1cm4gMDsKKyAgaWYodGltZW91dF9tcyA8IDApIHsKKyAgICBTRVRfU09DS0VSUk5PKEVJTlZBTCk7CisgICAgcmV0dXJuIC0xOworICB9CisjaWYgZGVmaW5lZChNU0RPUykKKyAgZGVsYXkodGltZW91dF9tcyk7CisjZWxpZiBkZWZpbmVkKFVTRV9XSU5TT0NLKQorICBTbGVlcCh0aW1lb3V0X21zKTsKKyNlbHNlCisgIHBlbmRpbmdfbXMgPSB0aW1lb3V0X21zOworICBpbml0aWFsX3R2ID0gY3VybHhfdHZub3coKTsKKyAgZG8geworI2lmIGRlZmluZWQoSEFWRV9QT0xMX0ZJTkUpCisgICAgciA9IHBvbGwoTlVMTCwgMCwgcGVuZGluZ19tcyk7CisjZWxzZQorICAgIHBlbmRpbmdfdHYudHZfc2VjID0gcGVuZGluZ19tcyAvIDEwMDA7CisgICAgcGVuZGluZ190di50dl91c2VjID0gKHBlbmRpbmdfbXMgJSAxMDAwKSAqIDEwMDA7CisgICAgciA9IHNlbGVjdCgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmcGVuZGluZ190dik7CisjZW5kaWYgLyogSEFWRV9QT0xMX0ZJTkUgKi8KKyAgICBpZihyICE9IC0xKQorICAgICAgYnJlYWs7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgaWYoZXJyb3IgJiYgZXJyb3Jfbm90X0VJTlRSKQorICAgICAgYnJlYWs7CisgICAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXMgLSBlbGFwc2VkX21zOworICAgIGlmKHBlbmRpbmdfbXMgPD0gMCkKKyAgICAgIGJyZWFrOworICB9IHdoaWxlKHIgPT0gLTEpOworI2VuZGlmIC8qIFVTRV9XSU5TT0NLICovCisgIGlmKHIpCisgICAgciA9IC0xOworICByZXR1cm4gcjsKK30KKworLyoKKyAqIFdhaXQgZm9yIHJlYWQgb3Igd3JpdGUgZXZlbnRzIG9uIGEgc2V0IG9mIGZpbGUgZGVzY3JpcHRvcnMuIEl0IHVzZXMgcG9sbCgpCisgKiB3aGVuIGEgZmluZSBwb2xsKCkgaXMgYXZhaWxhYmxlLCBpbiBvcmRlciB0byBhdm9pZCBsaW1pdHMgd2l0aCBGRF9TRVRTSVpFLAorICogb3RoZXJ3aXNlIHNlbGVjdCgpIGlzIHVzZWQuICBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiBzZWxlY3QoKSBpcyBiZWluZyB1c2VkCisgKiBhbmQgYSBmaWxlIGRlc2NyaXB0b3IgaXMgdG9vIGxhcmdlIGZvciBGRF9TRVRTSVpFLgorICoKKyAqIEEgbmVnYXRpdmUgdGltZW91dCB2YWx1ZSBtYWtlcyB0aGlzIGZ1bmN0aW9uIHdhaXQgaW5kZWZpbml0ZWx5LAorICogdW5sZXMgbm8gdmFsaWQgZmlsZSBkZXNjcmlwdG9yIGlzIGdpdmVuLCB3aGVuIHRoaXMgaGFwcGVucyB0aGUKKyAqIG5lZ2F0aXZlIHRpbWVvdXQgaXMgaWdub3JlZCBhbmQgdGhlIGZ1bmN0aW9uIHRpbWVzIG91dCBpbW1lZGlhdGVseS4KKyAqIFdoZW4gY29tcGlsZWQgd2l0aCBDVVJMX0FDS05PV0xFREdFX0VJTlRSIGRlZmluZWQsIEVJTlRSIGNvbmRpdGlvbgorICogaXMgaG9ub3JlZCBhbmQgZnVuY3Rpb24gbWlnaHQgZXhpdCBlYXJseSB3aXRob3V0IGF3YWl0aW5nIHRpbWVvdXQsCisgKiBvdGhlcndpc2UgRUlOVFIgd2lsbCBiZSBpZ25vcmVkLgorICoKKyAqIFJldHVybiB2YWx1ZXM6CisgKiAgIC0xID0gc3lzdGVtIGNhbGwgZXJyb3Igb3IgZmQgPj0gRkRfU0VUU0laRQorICogICAgMCA9IHRpbWVvdXQKKyAqICAgIFtiaXRtYXNrXSA9IGFjdGlvbiBhcyBkZXNjcmliZWQgYmVsb3cKKyAqCisgKiBDVVJMX0NTRUxFQ1RfSU4gLSBmaXJzdCBzb2NrZXQgaXMgcmVhZGFibGUKKyAqIENVUkxfQ1NFTEVDVF9JTjIgLSBzZWNvbmQgc29ja2V0IGlzIHJlYWRhYmxlCisgKiBDVVJMX0NTRUxFQ1RfT1VUIC0gd3JpdGUgc29ja2V0IGlzIHdyaXRhYmxlCisgKiBDVVJMX0NTRUxFQ1RfRVJSIC0gYW4gZXJyb3IgY29uZGl0aW9uIG9jY3VycmVkCisgKi8KK2ludCBDdXJsX3NvY2tldF9jaGVjayhjdXJsX3NvY2tldF90IHJlYWRmZDAsIC8qIHR3byBzb2NrZXRzIHRvIHJlYWQgZnJvbSAqLworICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkMSwKKyAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHdyaXRlZmQsIC8qIHNvY2tldCB0byB3cml0ZSB0byAqLworICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZW91dF9tcykgICAgICAgLyogbWlsbGlzZWNvbmRzIHRvIHdhaXQgKi8KK3sKKyNpZmRlZiBIQVZFX1BPTExfRklORQorICBzdHJ1Y3QgcG9sbGZkIHBmZFszXTsKKyAgaW50IG51bTsKKyNlbHNlCisgIHN0cnVjdCB0aW1ldmFsIHBlbmRpbmdfdHY7CisgIHN0cnVjdCB0aW1ldmFsICpwdGltZW91dDsKKyAgZmRfc2V0IGZkc19yZWFkOworICBmZF9zZXQgZmRzX3dyaXRlOworICBmZF9zZXQgZmRzX2VycjsKKyAgY3VybF9zb2NrZXRfdCBtYXhmZDsKKyNlbmRpZgorICBzdHJ1Y3QgdGltZXZhbCBpbml0aWFsX3R2ID0gezAsMH07CisgIGludCBwZW5kaW5nX21zID0gMDsKKyAgaW50IGVycm9yOworICBpbnQgcjsKKyAgaW50IHJldDsKKworICBpZigocmVhZGZkMCA9PSBDVVJMX1NPQ0tFVF9CQUQpICYmIChyZWFkZmQxID09IENVUkxfU09DS0VUX0JBRCkgJiYKKyAgICAgKHdyaXRlZmQgPT0gQ1VSTF9TT0NLRVRfQkFEKSkgeworICAgIC8qIG5vIHNvY2tldHMsIGp1c3Qgd2FpdCAqLworICAgIHIgPSBDdXJsX3dhaXRfbXMoKGludCl0aW1lb3V0X21zKTsKKyAgICByZXR1cm4gcjsKKyAgfQorCisgIC8qIEF2b2lkIGluaXRpYWwgdGltZXN0YW1wLCBhdm9pZCBjdXJseF90dm5vdygpIGNhbGwsIHdoZW4gZWxhcHNlZAorICAgICB0aW1lIGluIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgbmVlZCB0byBiZSBtZWFzdXJlZC4gVGhpcyBoYXBwZW5zCisgICAgIHdoZW4gZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSB6ZXJvIHRpbWVvdXQgb3IgYSBuZWdhdGl2ZSB0aW1lb3V0CisgICAgIHZhbHVlIGluZGljYXRpbmcgYSBibG9ja2luZyBjYWxsIHNob3VsZCBiZSBwZXJmb3JtZWQuICovCisKKyAgaWYodGltZW91dF9tcyA+IDApIHsKKyAgICBwZW5kaW5nX21zID0gKGludCl0aW1lb3V0X21zOworICAgIGluaXRpYWxfdHYgPSBjdXJseF90dm5vdygpOworICB9CisKKyNpZmRlZiBIQVZFX1BPTExfRklORQorCisgIG51bSA9IDA7CisgIGlmKHJlYWRmZDAgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgcGZkW251bV0uZmQgPSByZWFkZmQwOworICAgIHBmZFtudW1dLmV2ZW50cyA9IFBPTExSRE5PUk18UE9MTElOfFBPTExSREJBTkR8UE9MTFBSSTsKKyAgICBwZmRbbnVtXS5yZXZlbnRzID0gMDsKKyAgICBudW0rKzsKKyAgfQorICBpZihyZWFkZmQxICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgIHBmZFtudW1dLmZkID0gcmVhZGZkMTsKKyAgICBwZmRbbnVtXS5ldmVudHMgPSBQT0xMUkROT1JNfFBPTExJTnxQT0xMUkRCQU5EfFBPTExQUkk7CisgICAgcGZkW251bV0ucmV2ZW50cyA9IDA7CisgICAgbnVtKys7CisgIH0KKyAgaWYod3JpdGVmZCAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICBwZmRbbnVtXS5mZCA9IHdyaXRlZmQ7CisgICAgcGZkW251bV0uZXZlbnRzID0gUE9MTFdSTk9STXxQT0xMT1VUOworICAgIHBmZFtudW1dLnJldmVudHMgPSAwOworICAgIG51bSsrOworICB9CisKKyAgZG8geworICAgIGlmKHRpbWVvdXRfbXMgPCAwKQorICAgICAgcGVuZGluZ19tcyA9IC0xOworICAgIGVsc2UgaWYoIXRpbWVvdXRfbXMpCisgICAgICBwZW5kaW5nX21zID0gMDsKKyAgICByID0gcG9sbChwZmQsIG51bSwgcGVuZGluZ19tcyk7CisgICAgaWYociAhPSAtMSkKKyAgICAgIGJyZWFrOworICAgIGVycm9yID0gU09DS0VSUk5POworICAgIGlmKGVycm9yICYmIGVycm9yX25vdF9FSU5UUikKKyAgICAgIGJyZWFrOworICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7CisgICAgICBwZW5kaW5nX21zID0gKGludCkodGltZW91dF9tcyAtIGVsYXBzZWRfbXMpOworICAgICAgaWYocGVuZGluZ19tcyA8PSAwKQorICAgICAgICBicmVhazsKKyAgICB9CisgIH0gd2hpbGUociA9PSAtMSk7CisKKyAgaWYociA8IDApCisgICAgcmV0dXJuIC0xOworICBpZihyID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgcmV0ID0gMDsKKyAgbnVtID0gMDsKKyAgaWYocmVhZGZkMCAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICBpZihwZmRbbnVtXS5yZXZlbnRzICYgKFBPTExSRE5PUk18UE9MTElOfFBPTExFUlJ8UE9MTEhVUCkpCisgICAgICByZXQgfD0gQ1VSTF9DU0VMRUNUX0lOOworICAgIGlmKHBmZFtudW1dLnJldmVudHMgJiAoUE9MTFJEQkFORHxQT0xMUFJJfFBPTExOVkFMKSkKKyAgICAgIHJldCB8PSBDVVJMX0NTRUxFQ1RfRVJSOworICAgIG51bSsrOworICB9CisgIGlmKHJlYWRmZDEgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgaWYocGZkW251bV0ucmV2ZW50cyAmIChQT0xMUkROT1JNfFBPTExJTnxQT0xMRVJSfFBPTExIVVApKQorICAgICAgcmV0IHw9IENVUkxfQ1NFTEVDVF9JTjI7CisgICAgaWYocGZkW251bV0ucmV2ZW50cyAmIChQT0xMUkRCQU5EfFBPTExQUkl8UE9MTE5WQUwpKQorICAgICAgcmV0IHw9IENVUkxfQ1NFTEVDVF9FUlI7CisgICAgbnVtKys7CisgIH0KKyAgaWYod3JpdGVmZCAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICBpZihwZmRbbnVtXS5yZXZlbnRzICYgKFBPTExXUk5PUk18UE9MTE9VVCkpCisgICAgICByZXQgfD0gQ1VSTF9DU0VMRUNUX09VVDsKKyAgICBpZihwZmRbbnVtXS5yZXZlbnRzICYgKFBPTExFUlJ8UE9MTEhVUHxQT0xMTlZBTCkpCisgICAgICByZXQgfD0gQ1VSTF9DU0VMRUNUX0VSUjsKKyAgfQorCisgIHJldHVybiByZXQ7CisKKyNlbHNlICAvKiBIQVZFX1BPTExfRklORSAqLworCisgIEZEX1pFUk8oJmZkc19lcnIpOworICBtYXhmZCA9IChjdXJsX3NvY2tldF90KS0xOworCisgIEZEX1pFUk8oJmZkc19yZWFkKTsKKyAgaWYocmVhZGZkMCAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICBWRVJJRllfU09DSyhyZWFkZmQwKTsKKyAgICBGRF9TRVQocmVhZGZkMCwgJmZkc19yZWFkKTsKKyAgICBGRF9TRVQocmVhZGZkMCwgJmZkc19lcnIpOworICAgIG1heGZkID0gcmVhZGZkMDsKKyAgfQorICBpZihyZWFkZmQxICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgIFZFUklGWV9TT0NLKHJlYWRmZDEpOworICAgIEZEX1NFVChyZWFkZmQxLCAmZmRzX3JlYWQpOworICAgIEZEX1NFVChyZWFkZmQxLCAmZmRzX2Vycik7CisgICAgaWYocmVhZGZkMSA+IG1heGZkKQorICAgICAgbWF4ZmQgPSByZWFkZmQxOworICB9CisKKyAgRkRfWkVSTygmZmRzX3dyaXRlKTsKKyAgaWYod3JpdGVmZCAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICBWRVJJRllfU09DSyh3cml0ZWZkKTsKKyAgICBGRF9TRVQod3JpdGVmZCwgJmZkc193cml0ZSk7CisgICAgRkRfU0VUKHdyaXRlZmQsICZmZHNfZXJyKTsKKyAgICBpZih3cml0ZWZkID4gbWF4ZmQpCisgICAgICBtYXhmZCA9IHdyaXRlZmQ7CisgIH0KKworICBwdGltZW91dCA9ICh0aW1lb3V0X21zIDwgMCkgPyBOVUxMIDogJnBlbmRpbmdfdHY7CisKKyAgZG8geworICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7CisgICAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IHBlbmRpbmdfbXMgLyAxMDAwOworICAgICAgcGVuZGluZ190di50dl91c2VjID0gKHBlbmRpbmdfbXMgJSAxMDAwKSAqIDEwMDA7CisgICAgfQorICAgIGVsc2UgaWYoIXRpbWVvdXRfbXMpIHsKKyAgICAgIHBlbmRpbmdfdHYudHZfc2VjID0gMDsKKyAgICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IDA7CisgICAgfQorICAgIHIgPSBzZWxlY3QoKGludCltYXhmZCArIDEsICZmZHNfcmVhZCwgJmZkc193cml0ZSwgJmZkc19lcnIsIHB0aW1lb3V0KTsKKyAgICBpZihyICE9IC0xKQorICAgICAgYnJlYWs7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgaWYoZXJyb3IgJiYgZXJyb3Jfbm90X0VJTlRSKQorICAgICAgYnJlYWs7CisgICAgaWYodGltZW91dF9tcyA+IDApIHsKKyAgICAgIHBlbmRpbmdfbXMgPSB0aW1lb3V0X21zIC0gZWxhcHNlZF9tczsKKyAgICAgIGlmKHBlbmRpbmdfbXMgPD0gMCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9IHdoaWxlKHIgPT0gLTEpOworCisgIGlmKHIgPCAwKQorICAgIHJldHVybiAtMTsKKyAgaWYociA9PSAwKQorICAgIHJldHVybiAwOworCisgIHJldCA9IDA7CisgIGlmKHJlYWRmZDAgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgaWYoRkRfSVNTRVQocmVhZGZkMCwgJmZkc19yZWFkKSkKKyAgICAgIHJldCB8PSBDVVJMX0NTRUxFQ1RfSU47CisgICAgaWYoRkRfSVNTRVQocmVhZGZkMCwgJmZkc19lcnIpKQorICAgICAgcmV0IHw9IENVUkxfQ1NFTEVDVF9FUlI7CisgIH0KKyAgaWYocmVhZGZkMSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICBpZihGRF9JU1NFVChyZWFkZmQxLCAmZmRzX3JlYWQpKQorICAgICAgcmV0IHw9IENVUkxfQ1NFTEVDVF9JTjI7CisgICAgaWYoRkRfSVNTRVQocmVhZGZkMSwgJmZkc19lcnIpKQorICAgICAgcmV0IHw9IENVUkxfQ1NFTEVDVF9FUlI7CisgIH0KKyAgaWYod3JpdGVmZCAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICBpZihGRF9JU1NFVCh3cml0ZWZkLCAmZmRzX3dyaXRlKSkKKyAgICAgIHJldCB8PSBDVVJMX0NTRUxFQ1RfT1VUOworICAgIGlmKEZEX0lTU0VUKHdyaXRlZmQsICZmZHNfZXJyKSkKKyAgICAgIHJldCB8PSBDVVJMX0NTRUxFQ1RfRVJSOworICB9CisKKyAgcmV0dXJuIHJldDsKKworI2VuZGlmICAvKiBIQVZFX1BPTExfRklORSAqLworCit9CisKKy8qCisgKiBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgcG9sbCgpLiAgSWYgcG9sbCgpIGRvZXMgbm90IGV4aXN0LCB0aGVuCisgKiBzZWxlY3QoKSBpcyB1c2VkIGluc3RlYWQuICBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiBzZWxlY3QoKSBpcworICogYmVpbmcgdXNlZCBhbmQgYSBmaWxlIGRlc2NyaXB0b3IgaXMgdG9vIGxhcmdlIGZvciBGRF9TRVRTSVpFLgorICogQSBuZWdhdGl2ZSB0aW1lb3V0IHZhbHVlIG1ha2VzIHRoaXMgZnVuY3Rpb24gd2FpdCBpbmRlZmluaXRlbHksCisgKiB1bmxlcyBubyB2YWxpZCBmaWxlIGRlc2NyaXB0b3IgaXMgZ2l2ZW4sIHdoZW4gdGhpcyBoYXBwZW5zIHRoZQorICogbmVnYXRpdmUgdGltZW91dCBpcyBpZ25vcmVkIGFuZCB0aGUgZnVuY3Rpb24gdGltZXMgb3V0IGltbWVkaWF0ZWx5LgorICogV2hlbiBjb21waWxlZCB3aXRoIENVUkxfQUNLTk9XTEVER0VfRUlOVFIgZGVmaW5lZCwgRUlOVFIgY29uZGl0aW9uCisgKiBpcyBob25vcmVkIGFuZCBmdW5jdGlvbiBtaWdodCBleGl0IGVhcmx5IHdpdGhvdXQgYXdhaXRpbmcgdGltZW91dCwKKyAqIG90aGVyd2lzZSBFSU5UUiB3aWxsIGJlIGlnbm9yZWQuCisgKgorICogUmV0dXJuIHZhbHVlczoKKyAqICAgLTEgPSBzeXN0ZW0gY2FsbCBlcnJvciBvciBmZCA+PSBGRF9TRVRTSVpFCisgKiAgICAwID0gdGltZW91dAorICogICAgTiA9IG51bWJlciBvZiBzdHJ1Y3R1cmVzIHdpdGggbm9uIHplcm8gcmV2ZW50IGZpZWxkcworICovCitpbnQgQ3VybF9wb2xsKHN0cnVjdCBwb2xsZmQgdWZkc1tdLCB1bnNpZ25lZCBpbnQgbmZkcywgaW50IHRpbWVvdXRfbXMpCit7CisjaWZuZGVmIEhBVkVfUE9MTF9GSU5FCisgIHN0cnVjdCB0aW1ldmFsIHBlbmRpbmdfdHY7CisgIHN0cnVjdCB0aW1ldmFsICpwdGltZW91dDsKKyAgZmRfc2V0IGZkc19yZWFkOworICBmZF9zZXQgZmRzX3dyaXRlOworICBmZF9zZXQgZmRzX2VycjsKKyAgY3VybF9zb2NrZXRfdCBtYXhmZDsKKyNlbmRpZgorICBzdHJ1Y3QgdGltZXZhbCBpbml0aWFsX3R2ID0gezAsMH07CisgIGJvb2wgZmRzX25vbmUgPSBUUlVFOworICB1bnNpZ25lZCBpbnQgaTsKKyAgaW50IHBlbmRpbmdfbXMgPSAwOworICBpbnQgZXJyb3I7CisgIGludCByOworCisgIGlmKHVmZHMpIHsKKyAgICBmb3IoaSA9IDA7IGkgPCBuZmRzOyBpKyspIHsKKyAgICAgIGlmKHVmZHNbaV0uZmQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICAgIGZkc19ub25lID0gRkFMU0U7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorICBpZihmZHNfbm9uZSkgeworICAgIHIgPSBDdXJsX3dhaXRfbXModGltZW91dF9tcyk7CisgICAgcmV0dXJuIHI7CisgIH0KKworICAvKiBBdm9pZCBpbml0aWFsIHRpbWVzdGFtcCwgYXZvaWQgY3VybHhfdHZub3coKSBjYWxsLCB3aGVuIGVsYXBzZWQKKyAgICAgdGltZSBpbiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IG5lZWQgdG8gYmUgbWVhc3VyZWQuIFRoaXMgaGFwcGVucworICAgICB3aGVuIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgemVybyB0aW1lb3V0IG9yIGEgbmVnYXRpdmUgdGltZW91dAorICAgICB2YWx1ZSBpbmRpY2F0aW5nIGEgYmxvY2tpbmcgY2FsbCBzaG91bGQgYmUgcGVyZm9ybWVkLiAqLworCisgIGlmKHRpbWVvdXRfbXMgPiAwKSB7CisgICAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXM7CisgICAgaW5pdGlhbF90diA9IGN1cmx4X3R2bm93KCk7CisgIH0KKworI2lmZGVmIEhBVkVfUE9MTF9GSU5FCisKKyAgZG8geworICAgIGlmKHRpbWVvdXRfbXMgPCAwKQorICAgICAgcGVuZGluZ19tcyA9IC0xOworICAgIGVsc2UgaWYoIXRpbWVvdXRfbXMpCisgICAgICBwZW5kaW5nX21zID0gMDsKKyAgICByID0gcG9sbCh1ZmRzLCBuZmRzLCBwZW5kaW5nX21zKTsKKyAgICBpZihyICE9IC0xKQorICAgICAgYnJlYWs7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgaWYoZXJyb3IgJiYgZXJyb3Jfbm90X0VJTlRSKQorICAgICAgYnJlYWs7CisgICAgaWYodGltZW91dF9tcyA+IDApIHsKKyAgICAgIHBlbmRpbmdfbXMgPSB0aW1lb3V0X21zIC0gZWxhcHNlZF9tczsKKyAgICAgIGlmKHBlbmRpbmdfbXMgPD0gMCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9IHdoaWxlKHIgPT0gLTEpOworCisgIGlmKHIgPCAwKQorICAgIHJldHVybiAtMTsKKyAgaWYociA9PSAwKQorICAgIHJldHVybiAwOworCisgIGZvcihpID0gMDsgaSA8IG5mZHM7IGkrKykgeworICAgIGlmKHVmZHNbaV0uZmQgPT0gQ1VSTF9TT0NLRVRfQkFEKQorICAgICAgY29udGludWU7CisgICAgaWYodWZkc1tpXS5yZXZlbnRzICYgUE9MTEhVUCkKKyAgICAgIHVmZHNbaV0ucmV2ZW50cyB8PSBQT0xMSU47CisgICAgaWYodWZkc1tpXS5yZXZlbnRzICYgUE9MTEVSUikKKyAgICAgIHVmZHNbaV0ucmV2ZW50cyB8PSAoUE9MTElOfFBPTExPVVQpOworICB9CisKKyNlbHNlICAvKiBIQVZFX1BPTExfRklORSAqLworCisgIEZEX1pFUk8oJmZkc19yZWFkKTsKKyAgRkRfWkVSTygmZmRzX3dyaXRlKTsKKyAgRkRfWkVSTygmZmRzX2Vycik7CisgIG1heGZkID0gKGN1cmxfc29ja2V0X3QpLTE7CisKKyAgZm9yKGkgPSAwOyBpIDwgbmZkczsgaSsrKSB7CisgICAgdWZkc1tpXS5yZXZlbnRzID0gMDsKKyAgICBpZih1ZmRzW2ldLmZkID09IENVUkxfU09DS0VUX0JBRCkKKyAgICAgIGNvbnRpbnVlOworICAgIFZFUklGWV9TT0NLKHVmZHNbaV0uZmQpOworICAgIGlmKHVmZHNbaV0uZXZlbnRzICYgKFBPTExJTnxQT0xMT1VUfFBPTExQUkl8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFBPTExSRE5PUk18UE9MTFdSTk9STXxQT0xMUkRCQU5EKSkgeworICAgICAgaWYodWZkc1tpXS5mZCA+IG1heGZkKQorICAgICAgICBtYXhmZCA9IHVmZHNbaV0uZmQ7CisgICAgICBpZih1ZmRzW2ldLmV2ZW50cyAmIChQT0xMUkROT1JNfFBPTExJTikpCisgICAgICAgIEZEX1NFVCh1ZmRzW2ldLmZkLCAmZmRzX3JlYWQpOworICAgICAgaWYodWZkc1tpXS5ldmVudHMgJiAoUE9MTFdSTk9STXxQT0xMT1VUKSkKKyAgICAgICAgRkRfU0VUKHVmZHNbaV0uZmQsICZmZHNfd3JpdGUpOworICAgICAgaWYodWZkc1tpXS5ldmVudHMgJiAoUE9MTFJEQkFORHxQT0xMUFJJKSkKKyAgICAgICAgRkRfU0VUKHVmZHNbaV0uZmQsICZmZHNfZXJyKTsKKyAgICB9CisgIH0KKworICBwdGltZW91dCA9ICh0aW1lb3V0X21zIDwgMCkgPyBOVUxMIDogJnBlbmRpbmdfdHY7CisKKyAgZG8geworICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7CisgICAgICBwZW5kaW5nX3R2LnR2X3NlYyA9IHBlbmRpbmdfbXMgLyAxMDAwOworICAgICAgcGVuZGluZ190di50dl91c2VjID0gKHBlbmRpbmdfbXMgJSAxMDAwKSAqIDEwMDA7CisgICAgfQorICAgIGVsc2UgaWYoIXRpbWVvdXRfbXMpIHsKKyAgICAgIHBlbmRpbmdfdHYudHZfc2VjID0gMDsKKyAgICAgIHBlbmRpbmdfdHYudHZfdXNlYyA9IDA7CisgICAgfQorICAgIHIgPSBzZWxlY3QoKGludCltYXhmZCArIDEsICZmZHNfcmVhZCwgJmZkc193cml0ZSwgJmZkc19lcnIsIHB0aW1lb3V0KTsKKyAgICBpZihyICE9IC0xKQorICAgICAgYnJlYWs7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgaWYoZXJyb3IgJiYgZXJyb3Jfbm90X0VJTlRSKQorICAgICAgYnJlYWs7CisgICAgaWYodGltZW91dF9tcyA+IDApIHsKKyAgICAgIHBlbmRpbmdfbXMgPSB0aW1lb3V0X21zIC0gZWxhcHNlZF9tczsKKyAgICAgIGlmKHBlbmRpbmdfbXMgPD0gMCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9IHdoaWxlKHIgPT0gLTEpOworCisgIGlmKHIgPCAwKQorICAgIHJldHVybiAtMTsKKyAgaWYociA9PSAwKQorICAgIHJldHVybiAwOworCisgIHIgPSAwOworICBmb3IoaSA9IDA7IGkgPCBuZmRzOyBpKyspIHsKKyAgICB1ZmRzW2ldLnJldmVudHMgPSAwOworICAgIGlmKHVmZHNbaV0uZmQgPT0gQ1VSTF9TT0NLRVRfQkFEKQorICAgICAgY29udGludWU7CisgICAgaWYoRkRfSVNTRVQodWZkc1tpXS5mZCwgJmZkc19yZWFkKSkKKyAgICAgIHVmZHNbaV0ucmV2ZW50cyB8PSBQT0xMSU47CisgICAgaWYoRkRfSVNTRVQodWZkc1tpXS5mZCwgJmZkc193cml0ZSkpCisgICAgICB1ZmRzW2ldLnJldmVudHMgfD0gUE9MTE9VVDsKKyAgICBpZihGRF9JU1NFVCh1ZmRzW2ldLmZkLCAmZmRzX2VycikpCisgICAgICB1ZmRzW2ldLnJldmVudHMgfD0gUE9MTFBSSTsKKyAgICBpZih1ZmRzW2ldLnJldmVudHMgIT0gMCkKKyAgICAgIHIrKzsKKyAgfQorCisjZW5kaWYgIC8qIEhBVkVfUE9MTF9GSU5FICovCisKKyAgcmV0dXJuIHI7Cit9CisKKyNpZmRlZiBUUEYKKy8qCisgKiBUaGlzIGlzIGEgcmVwbGFjZW1lbnQgZm9yIHNlbGVjdCgpIG9uIHRoZSBUUEYgcGxhdGZvcm0uCisgKiBJdCBpcyB1c2VkIHdoZW5ldmVyIGxpYmN1cmwgY2FsbHMgc2VsZWN0KCkuCisgKiBUaGUgY2FsbCBiZWxvdyB0byB0cGZfcHJvY2Vzc19zaWduYWxzKCkgaXMgcmVxdWlyZWQgYmVjYXVzZQorICogVFBGJ3Mgc2VsZWN0IGNhbGxzIGFyZSBub3Qgc2lnbmFsIGludGVycnVwdGlibGUuCisgKgorICogUmV0dXJuIHZhbHVlcyBhcmUgdGhlIHNhbWUgYXMgc2VsZWN0J3MuCisgKi8KK2ludCB0cGZfc2VsZWN0X2xpYmN1cmwoaW50IG1heGZkcywgZmRfc2V0KiByZWFkcywgZmRfc2V0KiB3cml0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCogZXhjZXB0cywgc3RydWN0IHRpbWV2YWwqIHR2KQoreworICAgaW50IHJjOworCisgICByYyA9IHRwZl9zZWxlY3RfYnNkKG1heGZkcywgcmVhZHMsIHdyaXRlcywgZXhjZXB0cywgdHYpOworICAgdHBmX3Byb2Nlc3Nfc2lnbmFscygpOworICAgcmV0dXJuKHJjKTsKK30KKyNlbmRpZiAvKiBUUEYgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9zZWxlY3QuaCBiL2N1cmwtNy4yNS4wL2xpYi9zZWxlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTA2MDRiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3NlbGVjdC5oCkBAIC0wLDAgKzEsMTI1IEBACisjaWZuZGVmIF9fU0VMRUNUX0gKKyNkZWZpbmUgX19TRUxFQ1RfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgSEFWRV9TWVNfUE9MTF9ICisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9QT0xMX0gpCisjaW5jbHVkZSA8cG9sbC5oPgorI2VuZGlmCisKKy8qCisgKiBwb2xsKCkgZnVuY3Rpb24gb24gV2luZG93cyBWaXN0YSBhbmQgbGF0ZXIgaXMgY2FsbGVkIFdTQVBvbGwoKQorICovCisKKyNpZiBkZWZpbmVkKFVTRV9XSU5TT0NLKSAmJiAoVVNFX1dJTlNPQ0sgPiAxKSAmJiBcCisgICAgZGVmaW5lZChfV0lOMzJfV0lOTlQpICYmIChfV0lOMzJfV0lOTlQgPj0gMHgwNjAwKQorIyAgdW5kZWYgIEhBVkVfUE9MTAorIyAgZGVmaW5lIEhBVkVfUE9MTCAxCisjICB1bmRlZiAgSEFWRV9QT0xMX0ZJTkUKKyMgIGRlZmluZSBIQVZFX1BPTExfRklORSAxCisjICBkZWZpbmUgcG9sbCh4LHkseikgV1NBUG9sbCgoeCksKHkpLCh6KSkKKyMgIGlmIGRlZmluZWQoX01TQ19WRVIpICYmIGRlZmluZWQoUE9MTFJETk9STSkKKyMgICAgdW5kZWYgIFBPTExQUkkKKyMgICAgZGVmaW5lIFBPTExQUkkgUE9MTFJEQkFORAorIyAgICBkZWZpbmUgSEFWRV9TVFJVQ1RfUE9MTEZEIDEKKyMgIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIERlZmluaXRpb24gb2YgcG9sbGZkIHN0cnVjdCBhbmQgY29uc3RhbnRzIGZvciBwbGF0Zm9ybXMgbGFja2luZyB0aGVtLgorICovCisKKyNpZiAhZGVmaW5lZChIQVZFX1NUUlVDVF9QT0xMRkQpICYmIFwKKyAgICAhZGVmaW5lZChIQVZFX1NZU19QT0xMX0gpICYmIFwKKyAgICAhZGVmaW5lZChIQVZFX1BPTExfSCkKKworI2RlZmluZSBQT0xMSU4gICAgICAweDAxCisjZGVmaW5lIFBPTExQUkkgICAgIDB4MDIKKyNkZWZpbmUgUE9MTE9VVCAgICAgMHgwNAorI2RlZmluZSBQT0xMRVJSICAgICAweDA4CisjZGVmaW5lIFBPTExIVVAgICAgIDB4MTAKKyNkZWZpbmUgUE9MTE5WQUwgICAgMHgyMAorCitzdHJ1Y3QgcG9sbGZkCit7CisgICAgY3VybF9zb2NrZXRfdCBmZDsKKyAgICBzaG9ydCAgIGV2ZW50czsKKyAgICBzaG9ydCAgIHJldmVudHM7Cit9OworCisjZW5kaWYKKworI2lmbmRlZiBQT0xMUkROT1JNCisjZGVmaW5lIFBPTExSRE5PUk0gUE9MTElOCisjZW5kaWYKKworI2lmbmRlZiBQT0xMV1JOT1JNCisjZGVmaW5lIFBPTExXUk5PUk0gUE9MTE9VVAorI2VuZGlmCisKKyNpZm5kZWYgUE9MTFJEQkFORAorI2RlZmluZSBQT0xMUkRCQU5EIFBPTExQUkkKKyNlbmRpZgorCisvKiB0aGVyZSBhcmUgdGhyZWUgQ1NFTEVDVCBkZWZpbmVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHB1YmxpYyBoZWFkZXIgdGhhdAorICAgYXJlIGV4cG9zZWQgdG8gdXNlcnMsIGJ1dCB0aGlzICpJTjIgYml0IGlzIG9ubHkgZXZlciB1c2VkIGludGVybmFsbHkgYW5kCisgICB0aGVyZWZvcmUgZGVmaW5lZCBoZXJlICovCisjZGVmaW5lIENVUkxfQ1NFTEVDVF9JTjIgKENVUkxfQ1NFTEVDVF9FUlIgPDwgMSkKKworaW50IEN1cmxfc29ja2V0X2NoZWNrKGN1cmxfc29ja2V0X3QgcmVhZGZkLCBjdXJsX3NvY2tldF90IHJlYWRmZDIsCisgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCB3cml0ZWZkLAorICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZW91dF9tcyk7CisKKy8qIHByb3ZpZGUgdGhlIGZvcm1lciBBUEkgaW50ZXJuYWxseSAqLworI2RlZmluZSBDdXJsX3NvY2tldF9yZWFkeSh4LHkseikgXAorICBDdXJsX3NvY2tldF9jaGVjayh4LCBDVVJMX1NPQ0tFVF9CQUQsIHksIHopCisKK2ludCBDdXJsX3BvbGwoc3RydWN0IHBvbGxmZCB1ZmRzW10sIHVuc2lnbmVkIGludCBuZmRzLCBpbnQgdGltZW91dF9tcyk7CisKK2ludCBDdXJsX3dhaXRfbXMoaW50IHRpbWVvdXRfbXMpOworCisjaWZkZWYgVFBGCitpbnQgdHBmX3NlbGVjdF9saWJjdXJsKGludCBtYXhmZHMsIGZkX3NldCogcmVhZHMsIGZkX3NldCogd3JpdGVzLAorICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQqIGV4Y2VwdHMsIHN0cnVjdCB0aW1ldmFsKiB0dik7CisjZW5kaWYKKworLyogV2luc29jayBhbmQgVFBGIHNvY2tldHMgYXJlIG5vdCBpbiByYW5nZSBbMC4uRkRfU0VUU0laRS0xXSwgd2hpY2gKKyAgIHVuZm9ydHVuYXRlbHkgbWFrZXMgaXQgaW1wb3NzaWJsZSBmb3IgdXMgdG8gZWFzaWx5IGNoZWNrIGlmIHRoZXkncmUgdmFsaWQKKyovCisjaWYgZGVmaW5lZChVU0VfV0lOU09DSykgfHwgZGVmaW5lZChUUEYpCisjZGVmaW5lIFZBTElEX1NPQ0soeCkgMQorI2RlZmluZSBWRVJJRllfU09DSyh4KSBDdXJsX25vcF9zdG10CisjZWxzZQorI2RlZmluZSBWQUxJRF9TT0NLKHMpICgoKHMpID49IDApICYmICgocykgPCBGRF9TRVRTSVpFKSkKKyNkZWZpbmUgVkVSSUZZX1NPQ0soeCkgZG8geyBcCisgIGlmKCFWQUxJRF9TT0NLKHgpKSB7IFwKKyAgICBTRVRfU09DS0VSUk5PKEVJTlZBTCk7IFwKKyAgICByZXR1cm4gLTE7IFwKKyAgfSBcCit9IFdISUxFX0ZBTFNFCisjZW5kaWYKKworI2VuZGlmIC8qIF9fU0VMRUNUX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9zZW5kZi5jIGIvY3VybC03LjI1LjAvbGliL3NlbmRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3MDkwYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zZW5kZi5jCkBAIC0wLDAgKzEsNjk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4gLyogcmVxdWlyZWQgZm9yIHNlbmQoKSAmIHJlY3YoKSBwcm90b3R5cGVzICovCisjZW5kaWYKKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInNzbGdlbi5oIgorI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJub24tYXNjaWkuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSB0aGUgaW50ZXJuYWwgKnByaW50ZigpIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisvKiB0aGUga3JiNCBmdW5jdGlvbnMgb25seSBleGlzdHMgZm9yIEZUUCBhbmQgaWYga3JiNCBvciBnc3NhcGkgaXMgZGVmaW5lZCAqLworI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9GVFApICYmIChkZWZpbmVkKEhBVkVfS1JCNCkgfHwgZGVmaW5lZChIQVZFX0dTU0FQSSkpCisjaW5jbHVkZSAia3JiNC5oIgorI2Vsc2UKKyNkZWZpbmUgQ3VybF9zZWNfc2VuZChhLGIsYyxkKSAtMQorI2RlZmluZSBDdXJsX3NlY19yZWFkKGEsYixjLGQpIC0xCisjZW5kaWYKKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAic3RyZXJyb3IuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2lmZGVmIENVUkxfRE9fTElORUVORF9DT05WCisvKgorICogY29udmVydF9saW5lZW5kcygpIGNoYW5nZXMgQ1JMRiAoXHJcbikgZW5kLW9mLWxpbmUgbWFya2VycyB0byBhIHNpbmdsZSBMRgorICogKFxuKSwgd2l0aCBzcGVjaWFsIHByb2Nlc3NpbmcgZm9yIENSTEYgc2VxdWVuY2VzIHRoYXQgYXJlIHNwbGl0IGJldHdlZW4gdHdvCisgKiBibG9ja3Mgb2YgZGF0YS4gIFJlbWFpbmluZywgYmFyZSBDUnMgYXJlIGNoYW5nZWQgdG8gTEZzLiAgVGhlIHBvc3NpYmx5IG5ldworICogc2l6ZSBvZiB0aGUgZGF0YSBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIHNpemVfdCBjb252ZXJ0X2xpbmVlbmRzKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnN0YXJ0UHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgY2hhciAqaW5QdHIsICpvdXRQdHI7CisKKyAgLyogc2FuaXR5IGNoZWNrICovCisgIGlmKChzdGFydFB0ciA9PSBOVUxMKSB8fCAoc2l6ZSA8IDEpKSB7CisgICAgcmV0dXJuKHNpemUpOworICB9CisKKyAgaWYoZGF0YS0+c3RhdGUucHJldl9ibG9ja19oYWRfdHJhaWxpbmdfY3IpIHsKKyAgICAvKiBUaGUgcHJldmlvdXMgYmxvY2sgb2YgaW5jb21pbmcgZGF0YQorICAgICAgIGhhZCBhIHRyYWlsaW5nIENSLCB3aGljaCB3YXMgdHVybmVkIGludG8gYSBMRi4gKi8KKyAgICBpZigqc3RhcnRQdHIgPT0gJ1xuJykgeworICAgICAgLyogVGhpcyBibG9jayBvZiBpbmNvbWluZyBkYXRhIHN0YXJ0cyB3aXRoIHRoZQorICAgICAgICAgcHJldmlvdXMgYmxvY2sncyBMRiBzbyBnZXQgcmlkIG9mIGl0ICovCisgICAgICBtZW1tb3ZlKHN0YXJ0UHRyLCBzdGFydFB0cisxLCBzaXplLTEpOworICAgICAgc2l6ZS0tOworICAgICAgLyogYW5kIGl0IHdhc24ndCBhIGJhcmUgQ1IgYnV0IGEgQ1JMRiBjb252ZXJzaW9uIGluc3RlYWQgKi8KKyAgICAgIGRhdGEtPnN0YXRlLmNybGZfY29udmVyc2lvbnMrKzsKKyAgICB9CisgICAgZGF0YS0+c3RhdGUucHJldl9ibG9ja19oYWRfdHJhaWxpbmdfY3IgPSBGQUxTRTsgLyogcmVzZXQgdGhlIGZsYWcgKi8KKyAgfQorCisgIC8qIGZpbmQgMXN0IENSLCBpZiBhbnkgKi8KKyAgaW5QdHIgPSBvdXRQdHIgPSBtZW1jaHIoc3RhcnRQdHIsICdccicsIHNpemUpOworICBpZihpblB0cikgeworICAgIC8qIGF0IGxlYXN0IG9uZSBDUiwgbm93IGxvb2sgZm9yIENSTEYgKi8KKyAgICB3aGlsZShpblB0ciA8IChzdGFydFB0citzaXplLTEpKSB7CisgICAgICAvKiBub3RlIHRoYXQgaXQncyBzaXplLTEsIHNvIHdlJ2xsIG5ldmVyIGxvb2sgcGFzdCB0aGUgbGFzdCBieXRlICovCisgICAgICBpZihtZW1jbXAoaW5QdHIsICJcclxuIiwgMikgPT0gMCkgeworICAgICAgICAvKiBDUkxGIGZvdW5kLCBidW1wIHBhc3QgdGhlIENSIGFuZCBjb3B5IHRoZSBOTCAqLworICAgICAgICBpblB0cisrOworICAgICAgICAqb3V0UHRyID0gKmluUHRyOworICAgICAgICAvKiBrZWVwIHRyYWNrIG9mIGhvdyBtYW55IENSTEZzIHdlIGNvbnZlcnRlZCAqLworICAgICAgICBkYXRhLT5zdGF0ZS5jcmxmX2NvbnZlcnNpb25zKys7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYoKmluUHRyID09ICdccicpIHsKKyAgICAgICAgICAvKiBsb25lIENSLCBtb3ZlIExGIGluc3RlYWQgKi8KKyAgICAgICAgICAqb3V0UHRyID0gJ1xuJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiBub3QgYSBDUkxGIG5vciBhIENSLCBqdXN0IGNvcHkgd2hhdGV2ZXIgaXQgaXMgKi8KKyAgICAgICAgICAqb3V0UHRyID0gKmluUHRyOworICAgICAgICB9CisgICAgICB9CisgICAgICBvdXRQdHIrKzsKKyAgICAgIGluUHRyKys7CisgICAgfSAvKiBlbmQgb2Ygd2hpbGUgbG9vcCAqLworCisgICAgaWYoaW5QdHIgPCBzdGFydFB0citzaXplKSB7CisgICAgICAvKiBoYW5kbGUgbGFzdCBieXRlICovCisgICAgICBpZigqaW5QdHIgPT0gJ1xyJykgeworICAgICAgICAvKiBkZWFsIHdpdGggYSBDUiBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKi8KKyAgICAgICAgKm91dFB0ciA9ICdcbic7IC8qIGNvcHkgYSBOTCBpbnN0ZWFkICovCisgICAgICAgIC8qIG5vdGUgdGhhdCBhIENSTEYgbWlnaHQgYmUgc3BsaXQgYWNyb3NzIHR3byBibG9ja3MgKi8KKyAgICAgICAgZGF0YS0+c3RhdGUucHJldl9ibG9ja19oYWRfdHJhaWxpbmdfY3IgPSBUUlVFOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIGNvcHkgbGFzdCBieXRlICovCisgICAgICAgICpvdXRQdHIgPSAqaW5QdHI7CisgICAgICB9CisgICAgICBvdXRQdHIrKzsKKyAgICB9CisgICAgaWYob3V0UHRyIDwgc3RhcnRQdHIrc2l6ZSkKKyAgICAgIC8qIHRpZHkgdXAgYnkgbnVsbCB0ZXJtaW5hdGluZyB0aGUgbm93IHNob3J0ZXIgZGF0YSAqLworICAgICAgKm91dFB0ciA9ICdcMCc7CisKKyAgICByZXR1cm4ob3V0UHRyIC0gc3RhcnRQdHIpOworICB9CisgIHJldHVybihzaXplKTsKK30KKyNlbmRpZiAvKiBDVVJMX0RPX0xJTkVFTkRfQ09OViAqLworCisvKiBDdXJsX2luZm9mKCkgaXMgZm9yIGluZm8gbWVzc2FnZSBhbG9uZyB0aGUgd2F5ICovCisKK3ZvaWQgQ3VybF9pbmZvZihzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIGlmKGRhdGEgJiYgZGF0YS0+c2V0LnZlcmJvc2UpIHsKKyAgICB2YV9saXN0IGFwOworICAgIHNpemVfdCBsZW47CisgICAgY2hhciBwcmludF9idWZmZXJbMjA0OCArIDFdOworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIHZzbnByaW50ZihwcmludF9idWZmZXIsIHNpemVvZihwcmludF9idWZmZXIpLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworICAgIGxlbiA9IHN0cmxlbihwcmludF9idWZmZXIpOworICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fVEVYVCwgcHJpbnRfYnVmZmVyLCBsZW4sIE5VTEwpOworICB9Cit9CisKKy8qIEN1cmxfZmFpbGYoKSBpcyBmb3IgbWVzc2FnZXMgc3RhdGluZyB3aHkgd2UgZmFpbGVkLgorICogVGhlIG1lc3NhZ2UgU0hBTEwgTk9UIGluY2x1ZGUgYW55IExGIG9yIENSLgorICovCisKK3ZvaWQgQ3VybF9mYWlsZihzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIHNpemVfdCBsZW47CisgIHZhX3N0YXJ0KGFwLCBmbXQpOworCisgIHZzbnByaW50ZihkYXRhLT5zdGF0ZS5idWZmZXIsIEJVRlNJWkUsIGZtdCwgYXApOworCisgIGlmKGRhdGEtPnNldC5lcnJvcmJ1ZmZlciAmJiAhZGF0YS0+c3RhdGUuZXJyb3JidWYpIHsKKyAgICBzbnByaW50ZihkYXRhLT5zZXQuZXJyb3JidWZmZXIsIENVUkxfRVJST1JfU0laRSwgIiVzIiwgZGF0YS0+c3RhdGUuYnVmZmVyKTsKKyAgICBkYXRhLT5zdGF0ZS5lcnJvcmJ1ZiA9IFRSVUU7IC8qIHdyb3RlIGVycm9yIHN0cmluZyAqLworICB9CisgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7CisgICAgbGVuID0gc3RybGVuKGRhdGEtPnN0YXRlLmJ1ZmZlcik7CisgICAgaWYobGVuIDwgQlVGU0laRSAtIDEpIHsKKyAgICAgIGRhdGEtPnN0YXRlLmJ1ZmZlcltsZW5dID0gJ1xuJzsKKyAgICAgIGRhdGEtPnN0YXRlLmJ1ZmZlclsrK2xlbl0gPSAnXDAnOworICAgIH0KKyAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX1RFWFQsIGRhdGEtPnN0YXRlLmJ1ZmZlciwgbGVuLCBOVUxMKTsKKyAgfQorCisgIHZhX2VuZChhcCk7Cit9CisKKy8qIEN1cmxfc2VuZGYoKSBzZW5kcyBmb3JtYXRlZCBkYXRhIHRvIHRoZSBzZXJ2ZXIgKi8KK0NVUkxjb2RlIEN1cmxfc2VuZGYoY3VybF9zb2NrZXRfdCBzb2NrZmQsIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3NpemVfdCBieXRlc193cml0dGVuOworICBzaXplX3Qgd3JpdGVfbGVuOworICBDVVJMY29kZSByZXMgPSBDVVJMRV9PSzsKKyAgY2hhciAqczsKKyAgY2hhciAqc3B0cjsKKyAgdmFfbGlzdCBhcDsKKyAgdmFfc3RhcnQoYXAsIGZtdCk7CisgIHMgPSB2YXByaW50ZihmbXQsIGFwKTsgLyogcmV0dXJucyBhbiBhbGxvY2F0ZWQgc3RyaW5nICovCisgIHZhX2VuZChhcCk7CisgIGlmKCFzKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOyAvKiBmYWlsdXJlICovCisKKyAgYnl0ZXNfd3JpdHRlbj0wOworICB3cml0ZV9sZW4gPSBzdHJsZW4ocyk7CisgIHNwdHIgPSBzOworCisgIGZvcig7OykgeworICAgIC8qIFdyaXRlIHRoZSBidWZmZXIgdG8gdGhlIHNvY2tldCAqLworICAgIHJlcyA9IEN1cmxfd3JpdGUoY29ubiwgc29ja2ZkLCBzcHRyLCB3cml0ZV9sZW4sICZieXRlc193cml0dGVuKTsKKworICAgIGlmKENVUkxFX09LICE9IHJlcykKKyAgICAgIGJyZWFrOworCisgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpCisgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfT1VULCBzcHRyLCAoc2l6ZV90KWJ5dGVzX3dyaXR0ZW4sIGNvbm4pOworCisgICAgaWYoKHNpemVfdClieXRlc193cml0dGVuICE9IHdyaXRlX2xlbikgeworICAgICAgLyogaWYgbm90IGFsbCB3YXMgd3JpdHRlbiBhdCBvbmNlLCB3ZSBtdXN0IGFkdmFuY2UgdGhlIHBvaW50ZXIsIGRlY3JlYXNlCisgICAgICAgICB0aGUgc2l6ZSBsZWZ0IGFuZCB0cnkgYWdhaW4hICovCisgICAgICB3cml0ZV9sZW4gLT0gYnl0ZXNfd3JpdHRlbjsKKyAgICAgIHNwdHIgKz0gYnl0ZXNfd3JpdHRlbjsKKyAgICB9CisgICAgZWxzZQorICAgICAgYnJlYWs7CisgIH0KKworICBmcmVlKHMpOyAvKiBmcmVlIHRoZSBvdXRwdXQgc3RyaW5nICovCisKKyAgcmV0dXJuIHJlczsKK30KKworLyoKKyAqIEN1cmxfd3JpdGUoKSBpcyBhbiBpbnRlcm5hbCB3cml0ZSBmdW5jdGlvbiB0aGF0IHNlbmRzIGRhdGEgdG8gdGhlCisgKiBzZXJ2ZXIuIFdvcmtzIHdpdGggcGxhaW4gc29ja2V0cywgU0NQLCBTU0wgb3Iga2VyYmVyb3MuCisgKgorICogSWYgdGhlIHdyaXRlIHdvdWxkIGJsb2NrIChDVVJMRV9BR0FJTiksIHdlIHJldHVybiBDVVJMRV9PSyBhbmQKKyAqICgqd3JpdHRlbiA9PSAwKS4gT3RoZXJ3aXNlIHdlIHJldHVybiByZWd1bGFyIENVUkxjb2RlIHZhbHVlLgorICovCitDVVJMY29kZSBDdXJsX3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqd3JpdHRlbikKK3sKKyAgc3NpemVfdCBieXRlc193cml0dGVuOworICBDVVJMY29kZSBjdXJsY29kZSA9IENVUkxFX09LOworICBpbnQgbnVtID0gKHNvY2tmZCA9PSBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pOworCisgIGJ5dGVzX3dyaXR0ZW4gPSBjb25uLT5zZW5kW251bV0oY29ubiwgbnVtLCBtZW0sIGxlbiwgJmN1cmxjb2RlKTsKKworICAqd3JpdHRlbiA9IGJ5dGVzX3dyaXR0ZW47CisgIGlmKGJ5dGVzX3dyaXR0ZW4gPj0gMCkKKyAgICAvKiB3ZSBjb21wbGV0ZWx5IGlnbm9yZSB0aGUgY3VybGNvZGUgdmFsdWUgd2hlbiBzdWJ6ZXJvIGlzIG5vdCByZXR1cm5lZCAqLworICAgIHJldHVybiBDVVJMRV9PSzsKKworICAvKiBoYW5kbGUgQ1VSTEVfQUdBSU4gb3IgYSBzZW5kIGZhaWx1cmUgKi8KKyAgc3dpdGNoKGN1cmxjb2RlKSB7CisgIGNhc2UgQ1VSTEVfQUdBSU46CisgICAgKndyaXR0ZW4gPSAwOworICAgIHJldHVybiBDVVJMRV9PSzsKKworICBjYXNlIENVUkxFX09LOgorICAgIC8qIGdlbmVyYWwgc2VuZCBmYWlsdXJlICovCisgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisKKyAgZGVmYXVsdDoKKyAgICAvKiB3ZSBnb3QgYSBzcGVjaWZpYyBjdXJsY29kZSwgZm9yd2FyZCBpdCAqLworICAgIHJldHVybiAoQ1VSTGNvZGUpY3VybGNvZGU7CisgIH0KK30KKworc3NpemVfdCBDdXJsX3NlbmRfcGxhaW4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqY29kZSkKK3sKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW251bV07CisgIHNzaXplX3QgYnl0ZXNfd3JpdHRlbiA9IHN3cml0ZShzb2NrZmQsIG1lbSwgbGVuKTsKKworICAqY29kZSA9IENVUkxFX09LOworICBpZigtMSA9PSBieXRlc193cml0dGVuKSB7CisgICAgaW50IGVyciA9IFNPQ0tFUlJOTzsKKworICAgIGlmKAorI2lmZGVmIFdTQUVXT1VMREJMT0NLCisgICAgICAvKiBUaGlzIGlzIGhvdyBXaW5kb3dzIGRvZXMgaXQgKi8KKyAgICAgIChXU0FFV09VTERCTE9DSyA9PSBlcnIpCisjZWxzZQorICAgICAgLyogZXJybm8gbWF5IGJlIEVXT1VMREJMT0NLIG9yIG9uIHNvbWUgc3lzdGVtcyBFQUdBSU4gd2hlbiBpdCByZXR1cm5lZAorICAgICAgICAgZHVlIHRvIGl0cyBpbmFiaWxpdHkgdG8gc2VuZCBvZmYgZGF0YSB3aXRob3V0IGJsb2NraW5nLiBXZSB0aGVyZWZvcgorICAgICAgICAgdHJlYXQgYm90aCBlcnJvciBjb2RlcyB0aGUgc2FtZSBoZXJlICovCisgICAgICAoRVdPVUxEQkxPQ0sgPT0gZXJyKSB8fCAoRUFHQUlOID09IGVycikgfHwgKEVJTlRSID09IGVycikKKyNlbmRpZgorICAgICAgKSB7CisgICAgICAvKiB0aGlzIGlzIGp1c3QgYSBjYXNlIG9mIEVXT1VMREJMT0NLICovCisgICAgICBieXRlc193cml0dGVuPTA7CisgICAgICAqY29kZSA9IENVUkxFX0FHQUlOOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTZW5kIGZhaWx1cmU6ICVzIiwKKyAgICAgICAgICAgIEN1cmxfc3RyZXJyb3IoY29ubiwgZXJyKSk7CisgICAgICBjb25uLT5kYXRhLT5zdGF0ZS5vc19lcnJubyA9IGVycjsKKyAgICAgICpjb2RlID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGJ5dGVzX3dyaXR0ZW47Cit9CisKKy8qCisgKiBDdXJsX3dyaXRlX3BsYWluKCkgaXMgYW4gaW50ZXJuYWwgd3JpdGUgZnVuY3Rpb24gdGhhdCBzZW5kcyBkYXRhIHRvIHRoZQorICogc2VydmVyIHVzaW5nIHBsYWluIHNvY2tldHMgb25seS4gT3RoZXJ3aXNlIG1lYW50IHRvIGhhdmUgdGhlIGV4YWN0IHNhbWUKKyAqIHByb3RvIGFzIEN1cmxfd3JpdGUoKQorICovCitDVVJMY29kZSBDdXJsX3dyaXRlX3BsYWluKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqd3JpdHRlbikKK3sKKyAgc3NpemVfdCBieXRlc193cml0dGVuOworICBDVVJMY29kZSByZXRjb2RlOworICBpbnQgbnVtID0gKHNvY2tmZCA9PSBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pOworCisgIGJ5dGVzX3dyaXR0ZW4gPSBDdXJsX3NlbmRfcGxhaW4oY29ubiwgbnVtLCBtZW0sIGxlbiwgJnJldGNvZGUpOworCisgICp3cml0dGVuID0gYnl0ZXNfd3JpdHRlbjsKKworICByZXR1cm4gcmV0Y29kZTsKK30KKworc3NpemVfdCBDdXJsX3JlY3ZfcGxhaW4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgbnVtLCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBDVVJMY29kZSAqY29kZSkKK3sKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW251bV07CisgIHNzaXplX3QgbnJlYWQgPSBzcmVhZChzb2NrZmQsIGJ1ZiwgbGVuKTsKKworICAqY29kZSA9IENVUkxFX09LOworICBpZigtMSA9PSBucmVhZCkgeworICAgIGludCBlcnIgPSBTT0NLRVJSTk87CisKKyAgICBpZigKKyNpZmRlZiBXU0FFV09VTERCTE9DSworICAgICAgLyogVGhpcyBpcyBob3cgV2luZG93cyBkb2VzIGl0ICovCisgICAgICAoV1NBRVdPVUxEQkxPQ0sgPT0gZXJyKQorI2Vsc2UKKyAgICAgIC8qIGVycm5vIG1heSBiZSBFV09VTERCTE9DSyBvciBvbiBzb21lIHN5c3RlbXMgRUFHQUlOIHdoZW4gaXQgcmV0dXJuZWQKKyAgICAgICAgIGR1ZSB0byBpdHMgaW5hYmlsaXR5IHRvIHNlbmQgb2ZmIGRhdGEgd2l0aG91dCBibG9ja2luZy4gV2UgdGhlcmVmb3IKKyAgICAgICAgIHRyZWF0IGJvdGggZXJyb3IgY29kZXMgdGhlIHNhbWUgaGVyZSAqLworICAgICAgKEVXT1VMREJMT0NLID09IGVycikgfHwgKEVBR0FJTiA9PSBlcnIpIHx8IChFSU5UUiA9PSBlcnIpCisjZW5kaWYKKyAgICAgICkgeworICAgICAgLyogdGhpcyBpcyBqdXN0IGEgY2FzZSBvZiBFV09VTERCTE9DSyAqLworICAgICAgKmNvZGUgPSBDVVJMRV9BR0FJTjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiUmVjdiBmYWlsdXJlOiAlcyIsCisgICAgICAgICAgICBDdXJsX3N0cmVycm9yKGNvbm4sIGVycikpOworICAgICAgY29ubi0+ZGF0YS0+c3RhdGUub3NfZXJybm8gPSBlcnI7CisgICAgICAqY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgfQorICB9CisgIHJldHVybiBucmVhZDsKK30KKworc3RhdGljIENVUkxjb2RlIHBhdXNld3JpdGUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgLyogd2hhdCB0eXBlIG9mIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pCit7CisgIC8qIHNpZ25hbGxlZCB0byBwYXVzZSBzZW5kaW5nIG9uIHRoaXMgY29ubmVjdGlvbiwgYnV0IHNpbmNlIHdlIGhhdmUgZGF0YQorICAgICB3ZSB3YW50IHRvIHNlbmQgd2UgbmVlZCB0byBkdXAgaXQgdG8gc2F2ZSBhIGNvcHkgZm9yIHdoZW4gdGhlIHNlbmRpbmcKKyAgICAgaXMgYWdhaW4gZW5hYmxlZCAqLworICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7CisgIGNoYXIgKmR1cGwgPSBtYWxsb2MobGVuKTsKKyAgaWYoIWR1cGwpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgbWVtY3B5KGR1cGwsIHB0ciwgbGVuKTsKKworICAvKiBzdG9yZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBzdGF0ZSBzdHJ1Y3QgZm9yIGxhdGVyIHVzZSAqLworICBkYXRhLT5zdGF0ZS50ZW1wd3JpdGUgPSBkdXBsOworICBkYXRhLT5zdGF0ZS50ZW1wd3JpdGVzaXplID0gbGVuOworICBkYXRhLT5zdGF0ZS50ZW1wd3JpdGV0eXBlID0gdHlwZTsKKworICAvKiBtYXJrIHRoZSBjb25uZWN0aW9uIGFzIFJFQ1YgcGF1c2VkICovCisgIGstPmtlZXBvbiB8PSBLRUVQX1JFQ1ZfUEFVU0U7CisKKyAgREVCVUdGKGluZm9mKGRhdGEsICJQYXVzaW5nIHdpdGggJXp1IGJ5dGVzIGluIGJ1ZmZlciBmb3IgdHlwZSAlMDJ4XG4iLAorICAgICAgICAgICAgICAgbGVuLCB0eXBlKSk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKKy8qIEN1cmxfY2xpZW50X3dyaXRlKCkgc2VuZHMgZGF0YSB0byB0aGUgd3JpdGUgY2FsbGJhY2socykKKworICAgVGhlIGJpdCBwYXR0ZXJuIGRlZmluZXMgdG8gd2hhdCAic3RyZWFtcyIgdG8gd3JpdGUgdG8uIEJvZHkgYW5kL29yIGhlYWRlci4KKyAgIFRoZSBkZWZpbmVzIGFyZSBpbiBzZW5kZi5oIG9mIGNvdXJzZS4KKworICAgSWYgQ1VSTF9ET19MSU5FRU5EX0NPTlYgaXMgZW5hYmxlZCwgZGF0YSBpcyBjb252ZXJ0ZWQgSU4gUExBQ0UgdG8gdGhlCisgICBsb2NhbCBjaGFyYWN0ZXIgZW5jb2RpbmcuICBUaGlzIGlzIGEgcHJvYmxlbSBhbmQgc2hvdWxkIGJlIGNoYW5nZWQgaW4KKyAgIHRoZSBmdXR1cmUgdG8gbGVhdmUgdGhlIG9yaWdpbmFsIGRhdGEgYWxvbmUuCisgKi8KK0NVUkxjb2RlIEN1cmxfY2xpZW50X3dyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzaXplX3Qgd3JvdGU7CisKKyAgaWYoMCA9PSBsZW4pCisgICAgbGVuID0gc3RybGVuKHB0cik7CisKKyAgLyogSWYgcmVhZGluZyBpcyBhY3R1YWxseSBwYXVzZWQsIHdlJ3JlIGZvcmNlZCB0byBhcHBlbmQgdGhpcyBjaHVuayBvZiBkYXRhCisgICAgIHRvIHRoZSBhbHJlYWR5IGhlbGQgZGF0YSwgYnV0IG9ubHkgaWYgaXQgaXMgdGhlIHNhbWUgdHlwZSBhcyBvdGhlcndpc2UgaXQKKyAgICAgY2FuJ3Qgd29yayBhbmQgaXQnbGwgcmV0dXJuIGVycm9yIGluc3RlYWQuICovCisgIGlmKGRhdGEtPnJlcS5rZWVwb24gJiBLRUVQX1JFQ1ZfUEFVU0UpIHsKKyAgICBzaXplX3QgbmV3bGVuOworICAgIGNoYXIgKm5ld3B0cjsKKyAgICBpZih0eXBlICE9IGRhdGEtPnN0YXRlLnRlbXB3cml0ZXR5cGUpCisgICAgICAvKiBtYWpvciBpbnRlcm5hbCBjb25mdXNpb24gKi8KKyAgICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworCisgICAgREVCVUdBU1NFUlQoZGF0YS0+c3RhdGUudGVtcHdyaXRlKTsKKworICAgIC8qIGZpZ3VyZSBvdXQgdGhlIG5ldyBzaXplIG9mIHRoZSBkYXRhIHRvIHNhdmUgKi8KKyAgICBuZXdsZW4gPSBsZW4gKyBkYXRhLT5zdGF0ZS50ZW1wd3JpdGVzaXplOworICAgIC8qIGFsbG9jYXRlIHRoZSBuZXcgbWVtb3J5IGFyZWEgKi8KKyAgICBuZXdwdHIgPSByZWFsbG9jKGRhdGEtPnN0YXRlLnRlbXB3cml0ZSwgbmV3bGVuKTsKKyAgICBpZighbmV3cHRyKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgLyogY29weSB0aGUgbmV3IGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUgbmV3IGFyZWEgKi8KKyAgICBtZW1jcHkobmV3cHRyICsgZGF0YS0+c3RhdGUudGVtcHdyaXRlc2l6ZSwgcHRyLCBsZW4pOworICAgIC8qIHVwZGF0ZSB0aGUgcG9pbnRlciBhbmQgdGhlIHNpemUgKi8KKyAgICBkYXRhLT5zdGF0ZS50ZW1wd3JpdGUgPSBuZXdwdHI7CisgICAgZGF0YS0+c3RhdGUudGVtcHdyaXRlc2l6ZSA9IG5ld2xlbjsKKworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorCisgIGlmKHR5cGUgJiBDTElFTlRXUklURV9CT0RZKSB7CisgICAgaWYoKGNvbm4tPmhhbmRsZXItPnByb3RvY29sJkNVUkxQUk9UT19GVFApICYmCisgICAgICAgY29ubi0+cHJvdG8uZnRwYy50cmFuc2ZlcnR5cGUgPT0gJ0EnKSB7CisgICAgICAvKiBjb252ZXJ0IGZyb20gdGhlIG5ldHdvcmsgZW5jb2RpbmcgKi8KKyAgICAgIENVUkxjb2RlIHJjID0gQ3VybF9jb252ZXJ0X2Zyb21fbmV0d29yayhkYXRhLCBwdHIsIGxlbik7CisgICAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLworICAgICAgaWYocmMpCisgICAgICAgIHJldHVybiByYzsKKworI2lmZGVmIENVUkxfRE9fTElORUVORF9DT05WCisgICAgICAvKiBjb252ZXJ0IGVuZC1vZi1saW5lIG1hcmtlcnMgKi8KKyAgICAgIGxlbiA9IGNvbnZlcnRfbGluZWVuZHMoZGF0YSwgcHRyLCBsZW4pOworI2VuZGlmIC8qIENVUkxfRE9fTElORUVORF9DT05WICovCisgICAgfQorICAgIC8qIElmIHRoZSBwcmV2aW91cyBibG9jayBvZiBkYXRhIGVuZGVkIHdpdGggQ1IgYW5kIHRoaXMgYmxvY2sgb2YgZGF0YSBpcworICAgICAgIGp1c3QgYSBOTCwgdGhlbiB0aGUgbGVuZ3RoIG1pZ2h0IGJlIHplcm8gKi8KKyAgICBpZihsZW4pIHsKKyAgICAgIHdyb3RlID0gZGF0YS0+c2V0LmZ3cml0ZV9mdW5jKHB0ciwgMSwgbGVuLCBkYXRhLT5zZXQub3V0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB3cm90ZSA9IGxlbjsKKyAgICB9CisKKyAgICBpZihDVVJMX1dSSVRFRlVOQ19QQVVTRSA9PSB3cm90ZSkKKyAgICAgIHJldHVybiBwYXVzZXdyaXRlKGRhdGEsIHR5cGUsIHB0ciwgbGVuKTsKKworICAgIGlmKHdyb3RlICE9IGxlbikgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB3cml0aW5nIGJvZHkgKCV6dSAhPSAlenUpIiwgd3JvdGUsIGxlbik7CisgICAgICByZXR1cm4gQ1VSTEVfV1JJVEVfRVJST1I7CisgICAgfQorICB9CisKKyAgaWYoKHR5cGUgJiBDTElFTlRXUklURV9IRUFERVIpICYmCisgICAgIChkYXRhLT5zZXQuZndyaXRlX2hlYWRlciB8fCBkYXRhLT5zZXQud3JpdGVoZWFkZXIpICkgeworICAgIC8qCisgICAgICogV3JpdGUgaGVhZGVycyB0byB0aGUgc2FtZSBjYWxsYmFjayBvciB0byB0aGUgZXNwZWNpYWxseSBzZXR1cAorICAgICAqIGhlYWRlciBjYWxsYmFjayBmdW5jdGlvbiAoYWRkZWQgYWZ0ZXIgdmVyc2lvbiA3LjcuMSkuCisgICAgICovCisgICAgY3VybF93cml0ZV9jYWxsYmFjayB3cml0ZWl0PQorICAgICAgZGF0YS0+c2V0LmZ3cml0ZV9oZWFkZXI/ZGF0YS0+c2V0LmZ3cml0ZV9oZWFkZXI6ZGF0YS0+c2V0LmZ3cml0ZV9mdW5jOworCisgICAgLyogTm90ZTogVGhlIGhlYWRlciBpcyBpbiB0aGUgaG9zdCBlbmNvZGluZworICAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGZ0cCB0cmFuc2ZlciBtb2RlIChBU0NJSS9JbWFnZSkgKi8KKworICAgIHdyb3RlID0gd3JpdGVpdChwdHIsIDEsIGxlbiwgZGF0YS0+c2V0LndyaXRlaGVhZGVyKTsKKyAgICBpZihDVVJMX1dSSVRFRlVOQ19QQVVTRSA9PSB3cm90ZSkKKyAgICAgIC8qIGhlcmUgd2UgcGFzcyBpbiB0aGUgSEVBREVSIGJpdCBvbmx5IHNpbmNlIGlmIHRoaXMgd2FzIGJvZHkgYXMgd2VsbAorICAgICAgICAgdGhlbiBpdCB3YXMgcGFzc2VkIGFscmVhZHkgYW5kIGNsZWFybHkgdGhhdCBkaWRuJ3QgdHJpZ2dlciB0aGUgcGF1c2UsCisgICAgICAgICBzbyB0aGlzIGlzIHNhdmVkIGZvciBsYXRlciB3aXRoIHRoZSBIRUFERVIgYml0IG9ubHkgKi8KKyAgICAgIHJldHVybiBwYXVzZXdyaXRlKGRhdGEsIENMSUVOVFdSSVRFX0hFQURFUiwgcHRyLCBsZW4pOworCisgICAgaWYod3JvdGUgIT0gbGVuKSB7CisgICAgICBmYWlsZiAoZGF0YSwgIkZhaWxlZCB3cml0aW5nIGhlYWRlciIpOworICAgICAgcmV0dXJuIENVUkxFX1dSSVRFX0VSUk9SOworICAgIH0KKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworQ1VSTGNvZGUgQ3VybF9yZWFkX3BsYWluKGN1cmxfc29ja2V0X3Qgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnl0ZXNmcm9tc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgKm4pCit7CisgIHNzaXplX3QgbnJlYWQgPSBzcmVhZChzb2NrZmQsIGJ1ZiwgYnl0ZXNmcm9tc29ja2V0KTsKKworICBpZigtMSA9PSBucmVhZCkgeworICAgIGludCBlcnIgPSBTT0NLRVJSTk87CisjaWZkZWYgVVNFX1dJTlNPQ0sKKyAgICBpZihXU0FFV09VTERCTE9DSyA9PSBlcnIpCisjZWxzZQorICAgIGlmKChFV09VTERCTE9DSyA9PSBlcnIpIHx8IChFQUdBSU4gPT0gZXJyKSB8fCAoRUlOVFIgPT0gZXJyKSkKKyNlbmRpZgorICAgICAgcmV0dXJuIENVUkxFX0FHQUlOOworICAgIGVsc2UKKyAgICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICB9CisKKyAgLyogd2Ugb25seSByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgd2hlbiB3ZSByZXR1cm4gT0sgKi8KKyAgKm4gPSBucmVhZDsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogSW50ZXJuYWwgcmVhZC1mcm9tLXNvY2tldCBmdW5jdGlvbi4gVGhpcyBpcyBtZWFudCB0byBkZWFsIHdpdGggcGxhaW4KKyAqIHNvY2tldHMsIFNTTCBzb2NrZXRzIGFuZCBrZXJiZXJvcyBzb2NrZXRzLgorICoKKyAqIFJldHVybnMgYSByZWd1bGFyIENVUkxjb2RlIHZhbHVlLgorICovCitDVVJMY29kZSBDdXJsX3JlYWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tmZCwgICAgIC8qIHJlYWQgZnJvbSB0aGlzIHNvY2tldCAqLworICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgICAgICAgICAgICAgICAgLyogc3RvcmUgcmVhZCBkYXRhIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZXJlcXVlc3RlZCwgICAgIC8qIG1heCBhbW91bnQgdG8gcmVhZCAqLworICAgICAgICAgICAgICAgICAgIHNzaXplX3QgKm4pICAgICAgICAgICAgICAgLyogYW1vdW50IGJ5dGVzIHJlYWQgKi8KK3sKKyAgQ1VSTGNvZGUgY3VybGNvZGUgPSBDVVJMRV9SRUNWX0VSUk9SOworICBzc2l6ZV90IG5yZWFkID0gMDsKKyAgc2l6ZV90IGJ5dGVzZnJvbXNvY2tldCA9IDA7CisgIGNoYXIgKmJ1ZmZlcnRvZmlsbCA9IE5VTEw7CisgIGJvb2wgcGlwZWxpbmluZyA9IChjb25uLT5kYXRhLT5tdWx0aSAmJgorICAgICAgICAgICAgICAgICAgICAgQ3VybF9tdWx0aV9jYW5QaXBlbGluZShjb25uLT5kYXRhLT5tdWx0aSkpID8gVFJVRSA6IEZBTFNFOworCisgIC8qIFNldCAnbnVtJyB0byAwIG9yIDEsIGRlcGVuZGluZyBvbiB3aGljaCBzb2NrZXQgdGhhdCBoYXMgYmVlbiBzZW50IGhlcmUuCisgICAgIElmIGl0IGlzIHRoZSBzZWNvbmQgc29ja2V0LCB3ZSBzZXQgbnVtIHRvIDEuIE90aGVyd2lzZSB0byAwLiBUaGlzIGxldHMKKyAgICAgdXMgdXNlIHRoZSBjb3JyZWN0IHNzbCBoYW5kbGUuICovCisgIGludCBudW0gPSAoc29ja2ZkID09IGNvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXSk7CisKKyAgKm49MDsgLyogcmVzZXQgYW1vdW50IHRvIHplcm8gKi8KKworICAvKiBJZiBzZXNzaW9uIGNhbiBwaXBlbGluZSwgY2hlY2sgY29ubmVjdGlvbiBidWZmZXIgICovCisgIGlmKHBpcGVsaW5pbmcpIHsKKyAgICBzaXplX3QgYnl0ZXN0b2NvcHkgPSBDVVJMTUlOKGNvbm4tPmJ1Zl9sZW4gLSBjb25uLT5yZWFkX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVyZXF1ZXN0ZWQpOworCisgICAgLyogQ29weSBmcm9tIG91ciBtYXN0ZXIgYnVmZmVyIGZpcnN0IGlmIHdlIGhhdmUgc29tZSB1bnJlYWQgZGF0YSB0aGVyZSovCisgICAgaWYoYnl0ZXN0b2NvcHkgPiAwKSB7CisgICAgICBtZW1jcHkoYnVmLCBjb25uLT5tYXN0ZXJfYnVmZmVyICsgY29ubi0+cmVhZF9wb3MsIGJ5dGVzdG9jb3B5KTsKKyAgICAgIGNvbm4tPnJlYWRfcG9zICs9IGJ5dGVzdG9jb3B5OworICAgICAgY29ubi0+Yml0cy5zdHJlYW1fd2FzX3Jld291bmQgPSBGQUxTRTsKKworICAgICAgKm4gPSAoc3NpemVfdClieXRlc3RvY29weTsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisgICAgLyogSWYgd2UgY29tZSBoZXJlLCBpdCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIGRhdGEgdG8gcmVhZCBmcm9tIHRoZSBidWZmZXIsCisgICAgICogc28gd2UgcmVhZCBmcm9tIHRoZSBzb2NrZXQgKi8KKyAgICBieXRlc2Zyb21zb2NrZXQgPSBDVVJMTUlOKHNpemVyZXF1ZXN0ZWQsIEJVRlNJWkUgKiBzaXplb2YgKGNoYXIpKTsKKyAgICBidWZmZXJ0b2ZpbGwgPSBjb25uLT5tYXN0ZXJfYnVmZmVyOworICB9CisgIGVsc2UgeworICAgIGJ5dGVzZnJvbXNvY2tldCA9IENVUkxNSU4oKGxvbmcpc2l6ZXJlcXVlc3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmRhdGEtPnNldC5idWZmZXJfc2l6ZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5kYXRhLT5zZXQuYnVmZmVyX3NpemUgOiBCVUZTSVpFKTsKKyAgICBidWZmZXJ0b2ZpbGwgPSBidWY7CisgIH0KKworICBucmVhZCA9IGNvbm4tPnJlY3ZbbnVtXShjb25uLCBudW0sIGJ1ZmZlcnRvZmlsbCwgYnl0ZXNmcm9tc29ja2V0LCAmY3VybGNvZGUpOworICBpZihucmVhZCA8IDApCisgICAgcmV0dXJuIGN1cmxjb2RlOworCisgIGlmKHBpcGVsaW5pbmcpIHsKKyAgICBtZW1jcHkoYnVmLCBjb25uLT5tYXN0ZXJfYnVmZmVyLCBucmVhZCk7CisgICAgY29ubi0+YnVmX2xlbiA9IG5yZWFkOworICAgIGNvbm4tPnJlYWRfcG9zID0gbnJlYWQ7CisgIH0KKworICAqbiArPSBucmVhZDsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qIHJldHVybiAwIG9uIHN1Y2Nlc3MgKi8KK3N0YXRpYyBpbnQgc2hvd2l0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBjdXJsX2luZm90eXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICBjaGFyICpwdHIsIHNpemVfdCBzaXplKQoreworICBzdGF0aWMgY29uc3QgY2hhciBzX2luZm90eXBlW0NVUkxJTkZPX0VORF1bM10gPSB7CisgICAgIiogIiwgIjwgIiwgIj4gIiwgInsgIiwgIn0gIiwgInsgIiwgIn0gIiB9OworCisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgIGNoYXIgYnVmW0JVRlNJWkUrMV07CisgIHNpemVfdCBjb252X3NpemUgPSAwOworCisgIHN3aXRjaCh0eXBlKSB7CisgIGNhc2UgQ1VSTElORk9fSEVBREVSX09VVDoKKyAgICAvKiBhc3N1bWUgb3V0cHV0IGhlYWRlcnMgYXJlIEFTQ0lJICovCisgICAgLyogY29weSB0aGUgZGF0YSBpbnRvIG15IGJ1ZmZlciBzbyB0aGUgb3JpZ2luYWwgaXMgdW5jaGFuZ2VkICovCisgICAgaWYoc2l6ZSA+IEJVRlNJWkUpIHsKKyAgICAgIHNpemUgPSBCVUZTSVpFOyAvKiB0cnVuY2F0ZSBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIGJ1ZltCVUZTSVpFXSA9ICdcMCc7CisgICAgfQorICAgIGNvbnZfc2l6ZSA9IHNpemU7CisgICAgbWVtY3B5KGJ1ZiwgcHRyLCBzaXplKTsKKyAgICAvKiBTcGVjaWFsIHByb2Nlc3NpbmcgaXMgbmVlZGVkIGZvciB0aGlzIGJsb2NrIGlmIGl0CisgICAgICogY29udGFpbnMgYm90aCBoZWFkZXJzIGFuZCBkYXRhIChzZXBhcmF0ZWQgYnkgQ1JMRkNSTEYpLgorICAgICAqIFdlIHdhbnQgdG8gY29udmVydCBqdXN0IHRoZSBoZWFkZXJzLCBsZWF2aW5nIHRoZSBkYXRhIGFzLWlzLgorICAgICAqLworICAgIGlmKHNpemUgPiA0KSB7CisgICAgICBzaXplX3QgaTsKKyAgICAgIGZvcihpID0gMDsgaSA8IHNpemUtNDsgaSsrKSB7CisgICAgICAgIGlmKG1lbWNtcCgmYnVmW2ldLCAiXHgwZFx4MGFceDBkXHgwYSIsIDQpID09IDApIHsKKyAgICAgICAgICAvKiBjb252ZXJ0IGV2ZXJ5dGhpbmcgdGhyb3VnaCB0aGlzIENSTEZDUkxGIGJ1dCBubyBmdXJ0aGVyICovCisgICAgICAgICAgY29udl9zaXplID0gaSArIDQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrKGRhdGEsIGJ1ZiwgY29udl9zaXplKTsKKyAgICAvKiBDdXJsX2NvbnZlcnRfZnJvbV9uZXR3b3JrIGNhbGxzIGZhaWxmIGlmIHVuc3VjY2Vzc2Z1bCAqLworICAgIC8qIHdlIG1pZ2h0IGFzIHdlbGwgY29udGludWUgZXZlbiBpZiBpdCBmYWlscy4uLiAgICovCisgICAgcHRyID0gYnVmOyAvKiBzd2l0Y2ggcG9pbnRlciB0byB1c2UgbXkgYnVmZmVyIGluc3RlYWQgKi8KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICAvKiBsZWF2ZSBldmVyeXRoaW5nIGVsc2UgYXMtaXMgKi8KKyAgICBicmVhazsKKyAgfQorI2VuZGlmIC8qIENVUkxfRE9FU19DT05WRVJTSU9OUyAqLworCisgIGlmKGRhdGEtPnNldC5mZGVidWcpCisgICAgcmV0dXJuICgqZGF0YS0+c2V0LmZkZWJ1ZykoZGF0YSwgdHlwZSwgcHRyLCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5kZWJ1Z2RhdGEpOworCisgIHN3aXRjaCh0eXBlKSB7CisgIGNhc2UgQ1VSTElORk9fVEVYVDoKKyAgY2FzZSBDVVJMSU5GT19IRUFERVJfT1VUOgorICBjYXNlIENVUkxJTkZPX0hFQURFUl9JTjoKKyAgICBmd3JpdGUoc19pbmZvdHlwZVt0eXBlXSwgMiwgMSwgZGF0YS0+c2V0LmVycik7CisgICAgZndyaXRlKHB0ciwgc2l6ZSwgMSwgZGF0YS0+c2V0LmVycik7CisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgICAgaWYoc2l6ZSAhPSBjb252X3NpemUpIHsKKyAgICAgIC8qIHdlIGhhZCB1bnRyYW5zbGF0ZWQgZGF0YSBzbyB3ZSBuZWVkIGFuIGV4cGxpY2l0IG5ld2xpbmUgKi8KKyAgICAgIGZ3cml0ZSgiXG4iLCAxLCAxLCBkYXRhLT5zZXQuZXJyKTsKKyAgICB9CisjZW5kaWYKKyAgICBicmVhazsKKyAgZGVmYXVsdDogLyogbmFkYSAqLworICAgIGJyZWFrOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgQ3VybF9kZWJ1ZyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgY3VybF9pbmZvdHlwZSB0eXBlLAorICAgICAgICAgICAgICAgY2hhciAqcHRyLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaW50IHJjOworICBpZihkYXRhLT5zZXQucHJpbnRob3N0ICYmIGNvbm4gJiYgY29ubi0+aG9zdC5kaXNwbmFtZSkgeworICAgIGNoYXIgYnVmZmVyWzE2MF07CisgICAgY29uc3QgY2hhciAqdD1OVUxMOworICAgIGNvbnN0IGNoYXIgKnc9IkRhdGEiOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ1VSTElORk9fSEVBREVSX0lOOgorICAgICAgdyA9ICJIZWFkZXIiOworICAgIGNhc2UgQ1VSTElORk9fREFUQV9JTjoKKyAgICAgIHQgPSAiZnJvbSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxJTkZPX0hFQURFUl9PVVQ6CisgICAgICB3ID0gIkhlYWRlciI7CisgICAgY2FzZSBDVVJMSU5GT19EQVRBX09VVDoKKyAgICAgIHQgPSAidG8iOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmKHQpIHsKKyAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICJbJXMgJXMgJXNdIiwgdywgdCwKKyAgICAgICAgICAgICAgIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworICAgICAgcmMgPSBzaG93aXQoZGF0YSwgQ1VSTElORk9fVEVYVCwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CisgICAgICBpZihyYykKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKyAgfQorICByYyA9IHNob3dpdChkYXRhLCB0eXBlLCBwdHIsIHNpemUpOworICByZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc2VuZGYuaCBiL2N1cmwtNy4yNS4wL2xpYi9zZW5kZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OTExZDAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc2VuZGYuaApAQCAtMCwwICsxLDkwIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1NFTkRGX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfU0VOREZfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCitDVVJMY29kZSBDdXJsX3NlbmRmKGN1cmxfc29ja2V0X3Qgc29ja2ZkLCBzdHJ1Y3QgY29ubmVjdGRhdGEgKiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZCBDdXJsX2luZm9mKHN0cnVjdCBTZXNzaW9uSGFuZGxlICosIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgQ3VybF9mYWlsZihzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNpZiBkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCisKKyNpZiBkZWZpbmVkKEhBVkVfVkFSSUFESUNfTUFDUk9TX0M5OSkKKyNkZWZpbmUgaW5mb2YoLi4uKSAgQ3VybF9ub3Bfc3RtdAorI2VsaWYgZGVmaW5lZChIQVZFX1ZBUklBRElDX01BQ1JPU19HQ0MpCisjZGVmaW5lIGluZm9mKHguLi4pICBDdXJsX25vcF9zdG10CisjZWxzZQorI2RlZmluZSBpbmZvZiAodm9pZCkKKyNlbmRpZgorCisjZWxzZSAvKiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTICovCisKKyNkZWZpbmUgaW5mb2YgQ3VybF9pbmZvZgorCisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUyAqLworCisjZGVmaW5lIGZhaWxmIEN1cmxfZmFpbGYKKworI2RlZmluZSBDTElFTlRXUklURV9CT0RZICAgKDE8PDApCisjZGVmaW5lIENMSUVOVFdSSVRFX0hFQURFUiAoMTw8MSkKKyNkZWZpbmUgQ0xJRU5UV1JJVEVfQk9USCAgIChDTElFTlRXUklURV9CT0RZfENMSUVOVFdSSVRFX0hFQURFUikKKworQ1VSTGNvZGUgQ3VybF9jbGllbnRfd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgdHlwZSwgY2hhciAqcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7CisKKy8qIGludGVybmFsIHJlYWQtZnVuY3Rpb24sIGRvZXMgcGxhaW4gc29ja2V0IG9ubHkgKi8KK0NVUkxjb2RlIEN1cmxfcmVhZF9wbGFpbihjdXJsX3NvY2tldF90IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ5dGVzZnJvbXNvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90ICpuKTsKKworc3NpemVfdCBDdXJsX3JlY3ZfcGxhaW4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgbnVtLCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBDVVJMY29kZSAqY29kZSk7Citzc2l6ZV90IEN1cmxfc2VuZF9wbGFpbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBudW0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICpjb2RlKTsKKworLyogaW50ZXJuYWwgcmVhZC1mdW5jdGlvbiwgZG9lcyBwbGFpbiBzb2NrZXQsIFNTTCBhbmQga3JiNCAqLworQ1VSTGNvZGUgQ3VybF9yZWFkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmZmVyc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBzc2l6ZV90ICpuKTsKKy8qIGludGVybmFsIHdyaXRlLWZ1bmN0aW9uLCBkb2VzIHBsYWluIHNvY2tldCwgU1NMLCBTQ1AsIFNGVFAgYW5kIGtyYjQgKi8KK0NVUkxjb2RlIEN1cmxfd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICBzc2l6ZV90ICp3cml0dGVuKTsKKworLyogaW50ZXJuYWwgd3JpdGUtZnVuY3Rpb24sIGRvZXMgcGxhaW4gc29ja2V0cyBPTkxZICovCitDVVJMY29kZSBDdXJsX3dyaXRlX3BsYWluKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqd3JpdHRlbik7CisKKy8qIHRoZSBmdW5jdGlvbiB1c2VkIHRvIG91dHB1dCB2ZXJib3NlIGluZm9ybWF0aW9uICovCitpbnQgQ3VybF9kZWJ1ZyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqaGFuZGxlLCBjdXJsX2luZm90eXBlIHR5cGUsCisgICAgICAgICAgICAgICBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CisKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NFTkRGX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9zZXR1cC1vczQwMC5oIGIvY3VybC03LjI1LjAvbGliL3NldHVwLW9zNDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RlZWZlMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zZXR1cC1vczQwMC5oCkBAIC0wLDAgKzEsMTQwIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1NFVFVQX09TNDAwX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfU0VUVVBfT1M0MDBfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyogT1MvNDAwIG5ldGRiLmggZG9lcyBub3QgZGVmaW5lIE5JX01BWEhPU1QuICovCisjZGVmaW5lIE5JX01BWEhPU1QgICAgICAxMDI1CisKKy8qIE9TLzQwMCBuZXRkYi5oIGRvZXMgbm90IGRlZmluZSBOSV9NQVhTRVJWLiAqLworI2RlZmluZSBOSV9NQVhTRVJWICAgICAgMzIKKworLyogTm8gT1MvNDAwIGhlYWRlciBmaWxlIGRlZmluZXMgdV9pbnQzMl90LiAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgdV9pbnQzMl90OworCisKKy8qIFN5c3RlbSBBUEkgd3JhcHBlciBwcm90b3R5cGVzIGFuZCBkZWZpbml0aW9ucyB0byBzdXBwb3J0IEFTQ0lJIHBhcmFtZXRlcnMuICovCisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxxc29zc2wuaD4KKyNpbmNsdWRlIDxnc3NhcGkuaD4KKworZXh0ZXJuIGludCAgICAgIEN1cmxfZ2V0YWRkcmluZm9fYShjb25zdCBjaGFyICogbm9kZW5hbWUsIGNvbnN0IGNoYXIgKiBzZXJ2bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICogaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqICogcmVzKTsKKyNkZWZpbmUgZ2V0YWRkcmluZm8gICAgICAgICAgICAgQ3VybF9nZXRhZGRyaW5mb19hCisKKworZXh0ZXJuIGludCAgICAgIEN1cmxfZ2V0bmFtZWluZm9fYShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiBzYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrbGVuX3Qgc2FsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBub2RlbmFtZSwgY3VybF9zb2NrbGVuX3Qgbm9kZW5hbWVsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBzZXJ2bmFtZSwgY3VybF9zb2NrbGVuX3Qgc2Vydm5hbWVsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CisjZGVmaW5lIGdldG5hbWVpbmZvICAgICAgICAgICAgIEN1cmxfZ2V0bmFtZWluZm9fYQorCisKKy8qIFNTTCB3cmFwcGVycy4gKi8KKworZXh0ZXJuIGludCAgICAgIEN1cmxfU1NMX0luaXRfQXBwbGljYXRpb25fYShTU0xJbml0QXBwICogaW5pdF9hcHApOworI2RlZmluZSBTU0xfSW5pdF9BcHBsaWNhdGlvbiAgICBDdXJsX1NTTF9Jbml0X0FwcGxpY2F0aW9uX2EKKworCitleHRlcm4gaW50ICAgICAgQ3VybF9TU0xfSW5pdF9hKFNTTEluaXQgKiBpbml0KTsKKyNkZWZpbmUgU1NMX0luaXQgICAgICAgICAgICAgICAgQ3VybF9TU0xfSW5pdF9hCisKKworZXh0ZXJuIGNoYXIgKiAgIEN1cmxfU1NMX1N0cmVycm9yX2EoaW50IHNzbHJldHVybnZhbHVlLCBTU0xFcnJvck1zZyAqIHNlcnJtc2dwKTsKKyNkZWZpbmUgU1NMX1N0cmVycm9yICAgICAgICAgICAgQ3VybF9TU0xfU3RyZXJyb3JfYQorCisKKy8qIEdTU0FQSSB3cmFwcGVycy4gKi8KKworZXh0ZXJuIE9NX3VpbnQzMiBDdXJsX2dzc19pbXBvcnRfbmFtZV9hKE9NX3VpbnQzMiAqIG1pbm9yX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfYnVmZmVyX3QgaW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfT0lEIGluX25hbWVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfbmFtZV90ICogb3V0X25hbWUpOworI2RlZmluZSBnc3NfaW1wb3J0X25hbWUgICAgICAgICBDdXJsX2dzc19pbXBvcnRfbmFtZV9hCisKKworZXh0ZXJuIE9NX3VpbnQzMiBDdXJsX2dzc19kaXNwbGF5X3N0YXR1c19hKE9NX3VpbnQzMiAqIG1pbm9yX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTV91aW50MzIgc3RhdHVzX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGF0dXNfdHlwZSwgZ3NzX09JRCBtZWNoX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX21zZ19jdHhfdCAqIG1lc3NhZ2VfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfYnVmZmVyX3Qgc3RhdHVzX3N0cmluZyk7CisjZGVmaW5lIGdzc19kaXNwbGF5X3N0YXR1cyAgICAgIEN1cmxfZ3NzX2Rpc3BsYXlfc3RhdHVzX2EKKworCitleHRlcm4gT01fdWludDMyIEN1cmxfZ3NzX2luaXRfc2VjX2NvbnRleHRfYShPTV91aW50MzIgKiBtaW5vcl9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfY3JlZF9pZF90IGNyZWRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX2N0eF9pZF90ICogY29udGV4dF9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfbmFtZV90IHRhcmdldF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX09JRCBtZWNoX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfZmxhZ3NfdCByZXFfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTV91aW50MzIgdGltZV9yZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfY2hhbm5lbF9iaW5kaW5nc190CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9jaGFuX2JpbmRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX2J1ZmZlcl90IGlucHV0X3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX09JRCAqIGFjdHVhbF9tZWNoX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfYnVmZmVyX3Qgb3V0cHV0X3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX2ZsYWdzX3QgKiByZXRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTV91aW50MzIgKiB0aW1lX3JlYyk7CisjZGVmaW5lIGdzc19pbml0X3NlY19jb250ZXh0ICAgIEN1cmxfZ3NzX2luaXRfc2VjX2NvbnRleHRfYQorCisKK2V4dGVybiBPTV91aW50MzIgQ3VybF9nc3NfZGVsZXRlX3NlY19jb250ZXh0X2EoT01fdWludDMyICogbWlub3Jfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfY3R4X2lkX3QgKiBjb250ZXh0X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX2J1ZmZlcl90IG91dHB1dF90b2tlbik7CisjZGVmaW5lIGdzc19kZWxldGVfc2VjX2NvbnRleHQgIEN1cmxfZ3NzX2RlbGV0ZV9zZWNfY29udGV4dF9hCisKKy8qIExEQVAgd3JhcHBlcnMuICovCisKKyNkZWZpbmUgQmVyVmFsdWUgICAgICAgICAgICAgICAgc3RydWN0IGJlcnZhbAorCisjZGVmaW5lIGxkYXBfdXJsX3BhcnNlICAgICAgICAgIGxkYXBfdXJsX3BhcnNlX3V0ZjgKKyNkZWZpbmUgbGRhcF9pbml0ICAgICAgICAgICAgICAgQ3VybF9sZGFwX2luaXRfYQorI2RlZmluZSBsZGFwX3NpbXBsZV9iaW5kX3MgICAgICBDdXJsX2xkYXBfc2ltcGxlX2JpbmRfc19hCisjZGVmaW5lIGxkYXBfc2VhcmNoX3MgICAgICAgICAgIEN1cmxfbGRhcF9zZWFyY2hfc19hCisjZGVmaW5lIGxkYXBfZ2V0X3ZhbHVlc19sZW4gICAgIEN1cmxfbGRhcF9nZXRfdmFsdWVzX2xlbl9hCisjZGVmaW5lIGxkYXBfZXJyMnN0cmluZyAgICAgICAgIEN1cmxfbGRhcF9lcnIyc3RyaW5nX2EKKyNkZWZpbmUgbGRhcF9nZXRfZG4gICAgICAgICAgICAgQ3VybF9sZGFwX2dldF9kbl9hCisjZGVmaW5lIGxkYXBfZmlyc3RfYXR0cmlidXRlICAgIEN1cmxfbGRhcF9maXJzdF9hdHRyaWJ1dGVfYQorI2RlZmluZSBsZGFwX25leHRfYXR0cmlidXRlICAgICBDdXJsX2xkYXBfbmV4dF9hdHRyaWJ1dGVfYQorCisvKiBTb21lIHNvY2tldCBmdW5jdGlvbnMgbXVzdCBiZSB3cmFwcGVkIHRvIHByb2Nlc3MgdGV4dHVhbCBhZGRyZXNzZXMKKyAgIGxpa2UgQUZfVU5JWC4gKi8KKworZXh0ZXJuIGludCBDdXJsX29zNDAwX2Nvbm5lY3QoaW50IHNkLCBzdHJ1Y3Qgc29ja2FkZHIgKiBkZXN0YWRkciwgaW50IGFkZHJsZW4pOworZXh0ZXJuIGludCBDdXJsX29zNDAwX2JpbmQoaW50IHNkLCBzdHJ1Y3Qgc29ja2FkZHIgKiBsb2NhbGFkZHIsIGludCBhZGRybGVuKTsKK2V4dGVybiBpbnQgQ3VybF9vczQwMF9zZW5kdG8oaW50IHNkLCBjaGFyICogYnVmZmVyLCBpbnQgYnVmbGVuLCBpbnQgZmxhZ3MsCisgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKiBkc3RhZGRyLCBpbnQgYWRkcmxlbik7CitleHRlcm4gaW50IEN1cmxfb3M0MDBfcmVjdmZyb20oaW50IHNkLCBjaGFyICogYnVmZmVyLCBpbnQgYnVmbGVuLCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqIGZyb21hZGRyLCBpbnQgKiBhZGRybGVuKTsKKworI2RlZmluZSBjb25uZWN0ICAgICAgICAgICAgICAgICBDdXJsX29zNDAwX2Nvbm5lY3QKKyNkZWZpbmUgYmluZCAgICAgICAgICAgICAgICAgICAgQ3VybF9vczQwMF9iaW5kCisjZGVmaW5lIHNlbmR0byAgICAgICAgICAgICAgICAgIEN1cmxfb3M0MDBfc2VuZHRvCisjZGVmaW5lIHJlY3Zmcm9tICAgICAgICAgICAgICAgIEN1cmxfb3M0MDBfcmVjdmZyb20KKworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfU0VUVVBfT1M0MDBfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3NldHVwLmggYi9jdXJsLTcuMjUuMC9saWIvc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjE5NDM3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3NldHVwLmgKQEAgLTAsMCArMSw2NDMgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfTElCX1NFVFVQX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfTElCX1NFVFVQX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRGVmaW5lIFdJTjMyIHdoZW4gYnVpbGQgdGFyZ2V0IGlzIFdpbjMyIEFQSQorICovCisKKyNpZiAoZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19XSU4zMl9fKSkgJiYgIWRlZmluZWQoV0lOMzIpICYmIFwKKyAgICAhZGVmaW5lZChfX1NZTUJJQU4zMl9fKQorI2RlZmluZSBXSU4zMgorI2VuZGlmCisKKy8qCisgKiBJbmNsdWRlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IHJlc3VsdHMgb3IgaGFuZC1jcmFmdGVkCisgKiBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHBsYXRmb3JtcyB3aGljaCBsYWNrIGNvbmZpZyB0b29sLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisKKyNpbmNsdWRlICJjdXJsX2NvbmZpZy5oIgorCisjZWxzZSAvKiBIQVZFX0NPTkZJR19IICovCisKKyNpZmRlZiBfV0lOMzJfV0NFCisjICBpbmNsdWRlICJjb25maWctd2luMzJjZS5oIgorI2Vsc2UKKyMgIGlmZGVmIFdJTjMyCisjICAgIGluY2x1ZGUgImNvbmZpZy13aW4zMi5oIgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChtYWNpbnRvc2gpICYmIGRlZmluZWQoX19NUkNfXykKKyMgIGluY2x1ZGUgImNvbmZpZy1tYWMuaCIKKyNlbmRpZgorCisjaWZkZWYgX19BTUlHQV9fCisjICBpbmNsdWRlICJhbWlnYW9zLmgiCisjZW5kaWYKKworI2lmZGVmIF9fU1lNQklBTjMyX18KKyMgIGluY2x1ZGUgImNvbmZpZy1zeW1iaWFuLmgiCisjZW5kaWYKKworI2lmZGVmIF9fT1M0MDBfXworIyAgaW5jbHVkZSAiY29uZmlnLW9zNDAwLmgiCisjZW5kaWYKKworI2lmZGVmIFRQRgorIyAgaW5jbHVkZSAiY29uZmlnLXRwZi5oIgorI2VuZGlmCisKKyNpZmRlZiBfX1ZYV09SS1NfXworIyAgaW5jbHVkZSAiY29uZmlnLXZ4d29ya3MuaCIKKyNlbmRpZgorCisjZW5kaWYgLyogSEFWRV9DT05GSUdfSCAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBEZWZpbml0aW9uIG9mIHByZXByb2Nlc3NvciBtYWNyb3Mvc3ltYm9scyB3aGljaCBtb2RpZnkgY29tcGlsZXIgICovCisvKiBiZWhhdmlvciBvciBnZW5lcmF0ZWQgY29kZSBjaGFyYWN0ZXJpc3RpY3MgbXVzdCBiZSBkb25lIGhlcmUsICAgKi8KKy8qIGFzIGFwcHJvcHJpYXRlLCBiZWZvcmUgYW55IHN5c3RlbSBoZWFkZXIgZmlsZSBpcyBpbmNsdWRlZC4gSXQgaXMgKi8KKy8qIGFsc28gcG9zc2libGUgdG8gaGF2ZSB0aGVtIGRlZmluZWQgaW4gdGhlIGNvbmZpZyBmaWxlIGluY2x1ZGVkICAgKi8KKy8qIGJlZm9yZSB0aGlzIHBvaW50LiBBcyBhIHJlc3VsdCBvZiBhbGwgdGhpcyB3ZSBmcm93biBpbmNsdXNpb24gb2YgKi8KKy8qIHN5c3RlbSBoZWFkZXIgZmlsZXMgaW4gb3VyIGNvbmZpZyBmaWxlcywgYXZvaWQgdGhpcyBhdCBhbnkgY29zdC4gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyoKKyAqIEFJWCA0LjMgYW5kIG5ld2VyIG5lZWRzIF9USFJFQURfU0FGRSBkZWZpbmVkIHRvIGJ1aWxkCisgKiBwcm9wZXIgcmVlbnRyYW50IGNvZGUuIE90aGVycyBtYXkgYWxzbyBuZWVkIGl0LgorICovCisKKyNpZmRlZiBORUVEX1RIUkVBRF9TQUZFCisjICBpZm5kZWYgX1RIUkVBRF9TQUZFCisjICAgIGRlZmluZSBfVEhSRUFEX1NBRkUKKyMgIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIFRydTY0IG5lZWRzIF9SRUVOVFJBTlQgc2V0IGZvciBhIGZldyBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZAorICogdGhpbmdzIHRvIGFwcGVhciBpbiB0aGUgc3lzdGVtIGhlYWRlciBmaWxlcy4gVW5peHdhcmUgbmVlZHMgaXQKKyAqIHRvIGJ1aWxkIHByb3BlciByZWVudHJhbnQgY29kZS4gT3RoZXJzIG1heSBhbHNvIG5lZWQgaXQuCisgKi8KKworI2lmZGVmIE5FRURfUkVFTlRSQU5UCisjICBpZm5kZWYgX1JFRU5UUkFOVAorIyAgICBkZWZpbmUgX1JFRU5UUkFOVAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgSWYgeW91IG5lZWQgdG8gaW5jbHVkZSBhIHN5c3RlbSBoZWFkZXIgZmlsZSBmb3IgeW91ciBwbGF0Zm9ybSwgICovCisvKiAgcGxlYXNlLCBkbyBpdCBiZXlvbmQgdGhlIHBvaW50IGZ1cnRoZXIgaW5kaWNhdGVkIGluIHRoaXMgZmlsZS4gICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qCisgKiBsaWJjdXJsJ3MgZXh0ZXJuYWwgaW50ZXJmYWNlIGRlZmluaXRpb25zIGFyZSBhbHNvIHVzZWQgaW50ZXJuYWxseSwKKyAqIGFuZCBtaWdodCBhbHNvIGluY2x1ZGUgcmVxdWlyZWQgc3lzdGVtIGhlYWRlciBmaWxlcyB0byBkZWZpbmUgdGhlbS4KKyAqLworCisjaW5jbHVkZSA8Y3VybC9jdXJsYnVpbGQuaD4KKworLyoKKyAqIENvbXBpbGUgdGltZSBzYW5pdHkgY2hlY2tzIG11c3QgYWxzbyBiZSBkb25lIHdoZW4gYnVpbGRpbmcgdGhlIGxpYnJhcnkuCisgKi8KKworI2luY2x1ZGUgPGN1cmwvY3VybHJ1bGVzLmg+CisKKy8qCisgKiBFbnN1cmUgdGhhdCBubyBvbmUgaXMgdXNpbmcgdGhlIG9sZCBTSVpFT0ZfQ1VSTF9PRkZfVCBtYWNybworICovCisKKyNpZmRlZiBTSVpFT0ZfQ1VSTF9PRkZfVAorIyAgZXJyb3IgIlNJWkVPRl9DVVJMX09GRl9UIHNoYWxsIG5vdCBiZSBkZWZpbmVkISIKKyAgIEVycm9yIENvbXBpbGF0aW9uX2Fib3J0ZWRfU0laRU9GX0NVUkxfT0ZGX1Rfc2hhbGxfbm90X2JlX2RlZmluZWQKKyNlbmRpZgorCisvKgorICogU2V0IHVwIGludGVybmFsIGN1cmxfb2ZmX3QgZm9ybWF0dGluZyBzdHJpbmcgZGlyZWN0aXZlcyBmb3IKKyAqIGV4Y2x1c2l2ZSB1c2Ugd2l0aCBsaWJjdXJsJ3MgaW50ZXJuYWwgKnByaW50ZiBmdW5jdGlvbnMuCisgKi8KKworI2lmZGVmIEZPUk1BVF9PRkZfVAorIyAgZXJyb3IgIkZPUk1BVF9PRkZfVCBzaGFsbCBub3QgYmUgZGVmaW5lZCBiZWZvcmUgdGhpcyBwb2ludCEiCisgICBFcnJvciBDb21waWxhdGlvbl9hYm9ydGVkX0ZPUk1BVF9PRkZfVF9hbHJlYWR5X2RlZmluZWQKKyNlbmRpZgorCisjaWZkZWYgRk9STUFUX09GRl9UVQorIyAgZXJyb3IgIkZPUk1BVF9PRkZfVFUgc2hhbGwgbm90IGJlIGRlZmluZWQgYmVmb3JlIHRoaXMgcG9pbnQhIgorICAgRXJyb3IgQ29tcGlsYXRpb25fYWJvcnRlZF9GT1JNQVRfT0ZGX1RVX2FscmVhZHlfZGVmaW5lZAorI2VuZGlmCisKKyNpZiAoQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCA+IENVUkxfU0laRU9GX0xPTkcpCisjICBkZWZpbmUgRk9STUFUX09GRl9UICAibGxkIgorIyAgZGVmaW5lIEZPUk1BVF9PRkZfVFUgImxsdSIKKyNlbHNlCisjICBkZWZpbmUgRk9STUFUX09GRl9UICAibGQiCisjICBkZWZpbmUgRk9STUFUX09GRl9UVSAibHUiCisjZW5kaWYKKworLyoKKyAqIERpc2FibGUgb3RoZXIgcHJvdG9jb2xzIHdoZW4gaHR0cCBpcyB0aGUgb25seSBvbmUgZGVzaXJlZC4KKyAqLworCisjaWZkZWYgSFRUUF9PTkxZCisjICBpZm5kZWYgQ1VSTF9ESVNBQkxFX1RGVFAKKyMgICAgZGVmaW5lIENVUkxfRElTQUJMRV9URlRQCisjICBlbmRpZgorIyAgaWZuZGVmIENVUkxfRElTQUJMRV9GVFAKKyMgICAgZGVmaW5lIENVUkxfRElTQUJMRV9GVFAKKyMgIGVuZGlmCisjICBpZm5kZWYgQ1VSTF9ESVNBQkxFX0xEQVAKKyMgICAgZGVmaW5lIENVUkxfRElTQUJMRV9MREFQCisjICBlbmRpZgorIyAgaWZuZGVmIENVUkxfRElTQUJMRV9URUxORVQKKyMgICAgZGVmaW5lIENVUkxfRElTQUJMRV9URUxORVQKKyMgIGVuZGlmCisjICBpZm5kZWYgQ1VSTF9ESVNBQkxFX0RJQ1QKKyMgICAgZGVmaW5lIENVUkxfRElTQUJMRV9ESUNUCisjICBlbmRpZgorIyAgaWZuZGVmIENVUkxfRElTQUJMRV9GSUxFCisjICAgIGRlZmluZSBDVVJMX0RJU0FCTEVfRklMRQorIyAgZW5kaWYKKyMgIGlmbmRlZiBDVVJMX0RJU0FCTEVfUlRTUAorIyAgICBkZWZpbmUgQ1VSTF9ESVNBQkxFX1JUU1AKKyMgIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIFdoZW4gaHR0cCBpcyBkaXNhYmxlZCBydHNwIGlzIG5vdCBzdXBwb3J0ZWQuCisgKi8KKworI2lmIGRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9SVFNQKQorIyAgZGVmaW5lIENVUkxfRElTQUJMRV9SVFNQCisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogTm8gc3lzdGVtIGhlYWRlciBmaWxlIHNoYWxsIGJlIGluY2x1ZGVkIGluIHRoaXMgZmlsZSBiZWZvcmUgdGhpcyAqLworLyogcG9pbnQuIFRoZSBvbmx5IGFsbG93ZWQgb25lcyBhcmUgdGhvc2UgaW5jbHVkZWQgZnJvbSBjdXJsYnVpbGQuaCAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogT1MvNDAwIHNldHVwIGZpbGUgaW5jbHVkZXMgc29tZSBzeXN0ZW0gaGVhZGVycy4KKyAqLworCisjaWZkZWYgX19PUzQwMF9fCisjICBpbmNsdWRlICJzZXR1cC1vczQwMC5oIgorI2VuZGlmCisKKy8qCisgKiBJbmNsdWRlIGhlYWRlciBmaWxlcyBmb3Igd2luZG93cyBidWlsZHMgYmVmb3JlIHJlZGVmaW5pbmcgYW55dGhpbmcuCisgKiBVc2UgdGhpcyBwcmVwcm9jZXNzb3IgYmxvY2sgb25seSB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgd2luZG93cy5oLAorICogd2luc29jazIuaCwgd3MydGNwaXAuaCBvciB3aW5zb2NrLmguIEFueSBvdGhlciB3aW5kb3dzIHRoaW5nIGJlbG9uZ3MKKyAqIHRvIGFueSBvdGhlciBmdXJ0aGVyIGFuZCBpbmRlcGVuZGVudCBibG9jay4gIFVuZGVyIEN5Z3dpbiB0aGluZ3Mgd29yaworICoganVzdCBhcyB1bmRlciBsaW51eCAoZS5nLiA8c3lzL3NvY2tldC5oPikgYW5kIHRoZSB3aW5zb2NrIGhlYWRlcnMgc2hvdWxkCisgKiBuZXZlciBiZSBpbmNsdWRlZCB3aGVuIF9fQ1lHV0lOX18gaXMgZGVmaW5lZC4gIGNvbmZpZ3VyZSBzY3JpcHQgdGFrZXMKKyAqIGNhcmUgb2YgdGhpcywgbm90IGRlZmluaW5nIEhBVkVfV0lORE9XU19ILCBIQVZFX1dJTlNPQ0tfSCwgSEFWRV9XSU5TT0NLMl9ILAorICogbmVpdGhlciBIQVZFX1dTMlRDUElQX0ggd2hlbiBfX0NZR1dJTl9fIGlzIGRlZmluZWQuCisgKi8KKworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjICBpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGlmZGVmIEhBVkVfV0lOU09DSzJfSAorIyAgICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyAgICBpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyMgICAgICAgaW5jbHVkZSA8d3MydGNwaXAuaD4KKyMgICAgZW5kaWYKKyMgIGVsc2UKKyMgICAgaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyMgICAgICBpbmNsdWRlIDx3aW5zb2NrLmg+CisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBEZWZpbmUgVVNFX1dJTlNPQ0sgdG8gMiBpZiB3ZSBoYXZlIGFuZCB1c2UgV0lOU09DSzIgQVBJLCBlbHNlCisgKiBkZWZpbmUgVVNFX1dJTlNPQ0sgdG8gMSBpZiB3ZSBoYXZlIGFuZCB1c2UgV0lOU09DSyAgQVBJLCBlbHNlCisgKiB1bmRlZmluZSBVU0VfV0lOU09DSy4KKyAqLworCisjdW5kZWYgVVNFX1dJTlNPQ0sKKworI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorIyAgZGVmaW5lIFVTRV9XSU5TT0NLIDIKKyNlbHNlCisjICBpZmRlZiBIQVZFX1dJTlNPQ0tfSAorIyAgICBkZWZpbmUgVVNFX1dJTlNPQ0sgMQorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgVVNFX0xXSVBTT0NLCisjICBpbmNsdWRlIDxsd2lwL2luaXQuaD4KKyMgIGluY2x1ZGUgPGx3aXAvc29ja2V0cy5oPgorIyAgaW5jbHVkZSA8bHdpcC9uZXRkYi5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0VYVFJBX1NUUklDTVBfSAorIyAgaW5jbHVkZSA8ZXh0cmEvc3RyaWNtcC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0VYVFJBX1NUUkRVUF9ICisjICBpbmNsdWRlIDxleHRyYS9zdHJkdXAuaD4KKyNlbmRpZgorCisjaWZkZWYgVFBGCisjICBpbmNsdWRlIDxzdHJpbmdzLmg+ICAgIC8qIGZvciBiemVybywgc3RyY2FzZWNtcCwgYW5kIHN0cm5jYXNlY21wICovCisjICBpbmNsdWRlIDxzdHJpbmcuaD4gICAgIC8qIGZvciBzdHJjcHkgYW5kIHN0cmxlbiAqLworIyAgaW5jbHVkZSA8c3RkbGliLmg+ICAgICAvKiBmb3IgcmFuZCBhbmQgc3JhbmQgKi8KKyMgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4gLyogZm9yIHNlbGVjdCBhbmQgaW9jdGwqLworIyAgaW5jbHVkZSA8bmV0ZGIuaD4gICAgICAvKiBmb3IgaW5fYWRkcl90IGRlZmluaXRpb24gKi8KKyMgIGluY2x1ZGUgPHRwZi9zeXNhcGkuaD4gLyogZm9yIHRwZl9wcm9jZXNzX3NpZ25hbHMgKi8KKyAgIC8qIGNoYW5nZSB3aGljaCBzZWxlY3QgaXMgdXNlZCBmb3IgbGliY3VybCAqLworIyAgZGVmaW5lIHNlbGVjdChhLGIsYyxkLGUpIHRwZl9zZWxlY3RfbGliY3VybChhLGIsYyxkLGUpCisjZW5kaWYKKworI2lmZGVmIF9fVlhXT1JLU19fCisjICBpbmNsdWRlIDxzb2NrTGliLmg+ICAgIC8qIGZvciBnZW5lcmljIEJTRCBzb2NrZXQgZnVuY3Rpb25zICovCisjICBpbmNsdWRlIDxpb0xpYi5oPiAgICAgIC8qIGZvciBiYXNpYyBJL08gaW50ZXJmYWNlIGZ1bmN0aW9ucyAqLworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfQVNTRVJUX0gKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjaWZkZWYgX19UQU5ERU0gLyogZm9yIG5zci10YW5kZW0tbnNrIHN5c3RlbXMgKi8KKyNpbmNsdWRlIDxmbG9zcy5oPgorI2VuZGlmCisKKyNpZm5kZWYgU1REQ19IRUFERVJTIC8qIG5vIHN0YW5kYXJkIEMgaGVhZGVycyEgKi8KKyNpbmNsdWRlIDxjdXJsL3N0ZGNoZWFkZXJzLmg+CisjZW5kaWYKKworI2lmZGVmIF9fUE9DQ19fCisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyAgZGVmaW5lIHN5c19uZXJyIEVJTFNFUQorI2VuZGlmCisKKy8qCisgKiBTYWxmb3JkLUMga2x1ZGdlIHNlY3Rpb24gKG1vc3RseSBib3Jyb3dlZCBmcm9tIHd4V2lkZ2V0cykuCisgKi8KKyNpZmRlZiBfX1NBTEZPUkRDX18KKyAgI3ByYWdtYSBzdXBwcmVzcyAzNTMgICAgICAgICAgICAgLyogUG9zc2libGUgbmVzdGVkIGNvbW1lbnRzICovCisgICNwcmFnbWEgc3VwcHJlc3MgNTkzICAgICAgICAgICAgIC8qIERlZmluZSBub3QgdXNlZCAqLworICAjcHJhZ21hIHN1cHByZXNzIDYxICAgICAgICAgICAgICAvKiBlbnVtIGhhcyBubyBuYW1lICovCisgICNwcmFnbWEgc3VwcHJlc3MgMTA2ICAgICAgICAgICAgIC8qIHVubmFtZWQsIHVudXNlZCBwYXJhbWV0ZXIgKi8KKyAgI2luY2x1ZGUgPGNsaWIuaD4KKyNlbmRpZgorCisvKgorICogTGFyZ2UgZmlsZSAoPjJHYikgc3VwcG9ydCB1c2luZyBXSU4zMiBmdW5jdGlvbnMuCisgKi8KKworI2lmZGVmIFVTRV9XSU4zMl9MQVJHRV9GSUxFUworIyAgaW5jbHVkZSA8aW8uaD4KKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorIyAgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyMgIHVuZGVmICBsc2VlaworIyAgZGVmaW5lIGxzZWVrKGZkZXMsb2Zmc2V0LHdoZW5jZSkgIF9sc2Vla2k2NChmZGVzLCBvZmZzZXQsIHdoZW5jZSkKKyMgIGRlZmluZSBmc3RhdChmZGVzLHN0cCkgICAgICAgICAgICBfZnN0YXRpNjQoZmRlcywgc3RwKQorIyAgZGVmaW5lIHN0YXQoZm5hbWUsc3RwKSAgICAgICAgICAgIF9zdGF0aTY0KGZuYW1lLCBzdHApCisjICBkZWZpbmUgc3RydWN0X3N0YXQgICAgICAgICAgICAgICAgc3RydWN0IF9zdGF0aTY0CisjICBkZWZpbmUgTFNFRUtfRVJST1IgICAgICAgICAgICAgICAgKF9faW50NjQpLTEKKyNlbmRpZgorCisvKgorICogU21hbGwgZmlsZSAoPDJHYikgc3VwcG9ydCB1c2luZyBXSU4zMiBmdW5jdGlvbnMuCisgKi8KKworI2lmZGVmIFVTRV9XSU4zMl9TTUFMTF9GSUxFUworIyAgaW5jbHVkZSA8aW8uaD4KKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorIyAgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyMgIHVuZGVmICBsc2VlaworIyAgZGVmaW5lIGxzZWVrKGZkZXMsb2Zmc2V0LHdoZW5jZSkgIF9sc2VlayhmZGVzLCAobG9uZylvZmZzZXQsIHdoZW5jZSkKKyMgIGRlZmluZSBmc3RhdChmZGVzLHN0cCkgICAgICAgICAgICBfZnN0YXQoZmRlcywgc3RwKQorIyAgZGVmaW5lIHN0YXQoZm5hbWUsc3RwKSAgICAgICAgICAgIF9zdGF0KGZuYW1lLCBzdHApCisjICBkZWZpbmUgc3RydWN0X3N0YXQgICAgICAgICAgICAgICAgc3RydWN0IF9zdGF0CisjICBkZWZpbmUgTFNFRUtfRVJST1IgICAgICAgICAgICAgICAgKGxvbmcpLTEKKyNlbmRpZgorCisjaWZuZGVmIHN0cnVjdF9zdGF0CisjICBkZWZpbmUgc3RydWN0X3N0YXQgc3RydWN0IHN0YXQKKyNlbmRpZgorCisjaWZuZGVmIExTRUVLX0VSUk9SCisjICBkZWZpbmUgTFNFRUtfRVJST1IgKG9mZl90KS0xCisjZW5kaWYKKworLyoKKyAqIERlZmF1bHQgc2l6ZW9mKG9mZl90KSBpbiBjYXNlIGl0IGhhc24ndCBiZWVuIGRlZmluZWQgaW4gY29uZmlnIGZpbGUuCisgKi8KKworI2lmbmRlZiBTSVpFT0ZfT0ZGX1QKKyMgIGlmIGRlZmluZWQoX19WTVMpICYmICFkZWZpbmVkKF9fVkFYKQorIyAgICBpZiBkZWZpbmVkKF9MQVJHRUZJTEUpCisjICAgICAgZGVmaW5lIFNJWkVPRl9PRkZfVCA4CisjICAgIGVuZGlmCisjICBlbGlmIGRlZmluZWQoX19PUzQwMF9fKSAmJiBkZWZpbmVkKF9fSUxFQzQwMF9fKQorIyAgICBpZiBkZWZpbmVkKF9MQVJHRV9GSUxFUykKKyMgICAgICBkZWZpbmUgU0laRU9GX09GRl9UIDgKKyMgICAgZW5kaWYKKyMgIGVsaWYgZGVmaW5lZChfX01WU19fKSAmJiBkZWZpbmVkKF9fSUJNQ19fKQorIyAgICBpZiBkZWZpbmVkKF9MUDY0KSB8fCBkZWZpbmVkKF9MQVJHRV9GSUxFUykKKyMgICAgICBkZWZpbmUgU0laRU9GX09GRl9UIDgKKyMgICAgZW5kaWYKKyMgIGVsaWYgZGVmaW5lZChfXzM3MF9fKSAmJiBkZWZpbmVkKF9fSUJNQ19fKQorIyAgICBpZiBkZWZpbmVkKF9MUDY0KSB8fCBkZWZpbmVkKF9MQVJHRV9GSUxFUykKKyMgICAgICBkZWZpbmUgU0laRU9GX09GRl9UIDgKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgU0laRU9GX09GRl9UCisjICAgIGRlZmluZSBTSVpFT0ZfT0ZGX1QgNAorIyAgZW5kaWYKKyNlbmRpZgorCisvKgorICogQXJnIDIgdHlwZSBmb3IgZ2V0aG9zdG5hbWUgaW4gY2FzZSBpdCBoYXNuJ3QgYmVlbiBkZWZpbmVkIGluIGNvbmZpZyBmaWxlLgorICovCisKKyNpZm5kZWYgR0VUSE9TVE5BTUVfVFlQRV9BUkcyCisjICBpZmRlZiBVU0VfV0lOU09DSworIyAgICBkZWZpbmUgR0VUSE9TVE5BTUVfVFlQRV9BUkcyIGludAorIyAgZWxzZQorIyAgICBkZWZpbmUgR0VUSE9TVE5BTUVfVFlQRV9BUkcyIHNpemVfdAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBCZWxvdyB3ZSBkZWZpbmUgc29tZSBmdW5jdGlvbnMuIFRoZXkgc2hvdWxkCisKKyAgIDQuIHNldCB0aGUgU0lHQUxSTSBzaWduYWwgdGltZW91dAorICAgNS4gc2V0IGRpci9maWxlIG5hbWluZyBkZWZpbmVzCisgICAqLworCisjaWZkZWYgV0lOMzIKKworIyAgZGVmaW5lIERJUl9DSEFSICAgICAgIlxcIgorIyAgZGVmaW5lIERPVF9DSEFSICAgICAgIl8iCisKKyNlbHNlIC8qIFdJTjMyICovCisKKyMgIGlmZGVmIE1TRE9TICAvKiBXYXR0LTMyICovCisKKyMgICAgaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjICAgIGRlZmluZSBzZWxlY3QobixyLHcseCx0KSBzZWxlY3RfcyhuLHIsdyx4LHQpCisjICAgIGRlZmluZSBpb2N0bCh4LHkseikgaW9jdGxzb2NrZXQoeCx5LChjaGFyICopKHopKQorIyAgICBpbmNsdWRlIDx0Y3AuaD4KKyMgICAgaWZkZWYgd29yZAorIyAgICAgIHVuZGVmIHdvcmQKKyMgICAgZW5kaWYKKyMgICAgaWZkZWYgYnl0ZQorIyAgICAgIHVuZGVmIGJ5dGUKKyMgICAgZW5kaWYKKworIyAgZW5kaWYgLyogTVNET1MgKi8KKworIyAgaWZkZWYgX19taW5peAorICAgICAvKiBNaW5peCAzIHZlcnNpb25zIHVwIHRvIGF0IGxlYXN0IDMuMS4zIGFyZSBtaXNzaW5nIHRoZXNlIHByb3RvdHlwZXMgKi8KKyAgICAgZXh0ZXJuIGNoYXIgKiBzdHJ0b2tfcihjaGFyICpzLCBjb25zdCBjaGFyICpkZWxpbSwgY2hhciAqKmxhc3QpOworICAgICBleHRlcm4gc3RydWN0IHRtICogZ210aW1lX3IoY29uc3QgdGltZV90ICogY29uc3QgdGltZXAsIHN0cnVjdCB0bSAqdG1wKTsKKyMgIGVuZGlmCisKKyMgIGRlZmluZSBESVJfQ0hBUiAgICAgICIvIgorIyAgaWZuZGVmIERPVF9DSEFSCisjICAgIGRlZmluZSBET1RfQ0hBUiAgICAgICIuIgorIyAgZW5kaWYKKworIyAgaWZkZWYgTVNET1MKKyMgICAgdW5kZWYgRE9UX0NIQVIKKyMgICAgZGVmaW5lIERPVF9DSEFSICAgICAgIl8iCisjICBlbmRpZgorCisjICBpZm5kZWYgZmlsZW5vIC8qIHN1bm9zIDQgaGF2ZSB0aGlzIGFzIGEgbWFjcm8hICovCisgICAgIGludCBmaWxlbm8oIEZJTEUgKnN0cmVhbSk7CisjICBlbmRpZgorCisjZW5kaWYgLyogV0lOMzIgKi8KKworLyoKKyAqIG1zdmMgNi4wIHJlcXVpcmVzIFBTREsgaW4gb3JkZXIgdG8gaGF2ZSBJTkVUNl9BRERSU1RSTEVOCisgKiBkZWZpbmVkIGluIHdzMnRjcGlwLmggYXMgd2VsbCBhcyB0byBwcm92aWRlIElQdjYgc3VwcG9ydC4KKyAqLworCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19QT0NDX18pCisjICBpZiAhZGVmaW5lZChIQVZFX1dTMlRDUElQX0gpIHx8IFwKKyAgICAgKChfTVNDX1ZFUiA8IDEzMDApICYmICFkZWZpbmVkKElORVQ2X0FERFJTVFJMRU4pKQorIyAgICB1bmRlZiBIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUKKyMgICAgdW5kZWYgSEFWRV9GUkVFQUREUklORk8KKyMgICAgdW5kZWYgSEFWRV9HRVRBRERSSU5GTworIyAgICB1bmRlZiBIQVZFX0dFVE5BTUVJTkZPCisjICAgIHVuZGVmIEVOQUJMRV9JUFY2CisjICBlbmRpZgorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgIHJlc29sdmVyIHNwZWNpYWx0eSBjb21waWxlLXRpbWUgZGVmaW5lcyAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgQ1VSTFJFU18qIGRlZmluZXMgdG8gdXNlIGluIHRoZSBob3N0Ki5jIHNvdXJjZXMgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIGxjYy13aW4zMiBkb2Vzbid0IGhhdmUgX2JlZ2ludGhyZWFkZXgoKSwgbGFja3MgdGhyZWFkcyBzdXBwb3J0LgorICovCisKKyNpZiBkZWZpbmVkKF9fTENDX18pICYmIGRlZmluZWQoV0lOMzIpCisjICB1bmRlZiBVU0VfVEhSRUFEU19QT1NJWAorIyAgdW5kZWYgVVNFX1RIUkVBRFNfV0lOMzIKKyNlbmRpZgorCisvKgorICogTVNWQyB0aHJlYWRzIHN1cHBvcnQgcmVxdWlyZXMgYSBtdWx0aS10aHJlYWRlZCBydW50aW1lIGxpYnJhcnkuCisgKiBfYmVnaW50aHJlYWRleCgpIGlzIG5vdCBhdmFpbGFibGUgaW4gc2luZ2xlLXRocmVhZGVkIG9uZXMuCisgKi8KKworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fUE9DQ19fKSAmJiAhZGVmaW5lZChfTVQpCisjICB1bmRlZiBVU0VfVEhSRUFEU19QT1NJWAorIyAgdW5kZWYgVVNFX1RIUkVBRFNfV0lOMzIKKyNlbmRpZgorCisvKgorICogTXV0dWFsbHkgZXhjbHVzaXZlIENVUkxSRVNfKiBkZWZpbml0aW9ucy4KKyAqLworCisjaWZkZWYgVVNFX0FSRVMKKyMgIGRlZmluZSBDVVJMUkVTX0FTWU5DSAorIyAgZGVmaW5lIENVUkxSRVNfQVJFUworLyogbm93IHVuZGVmIHRoZSBzdG9jayBsaWJjIGZ1bmN0aW9ucyBqdXN0IHRvIGF2b2lkIHRoZW0gYmVpbmcgdXNlZCAqLworIyAgdW5kZWYgSEFWRV9HRVRBRERSSU5GTworIyAgdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FCisjZWxpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSB8fCBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKQorIyAgZGVmaW5lIENVUkxSRVNfQVNZTkNICisjICBkZWZpbmUgQ1VSTFJFU19USFJFQURFRAorI2Vsc2UKKyMgIGRlZmluZSBDVVJMUkVTX1NZTkNICisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9JUFY2CisjICBkZWZpbmUgQ1VSTFJFU19JUFY2CisjZWxzZQorIyAgZGVmaW5lIENVUkxSRVNfSVBWNAorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIFdoZW4gdXNpbmcgV0lOU09DSywgVEVMTkVUIHByb3RvY29sIHJlcXVpcmVzIFdJTlNPQ0syIEFQSS4KKyAqLworCisjaWYgZGVmaW5lZChVU0VfV0lOU09DSykgJiYgKFVTRV9XSU5TT0NLICE9IDIpCisjICBkZWZpbmUgQ1VSTF9ESVNBQkxFX1RFTE5FVCAxCisjZW5kaWYKKworLyoKKyAqIG1zdmMgNi4wIGRvZXMgbm90IGhhdmUgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYW5kCisgKiBkb2VzIG5vdCBkZWZpbmUgSVBQUk9UT19FU1AgaW4gd2luc29jazIuaC4gQnV0IGJvdGgKKyAqIGFyZSBhdmFpbGFibGUgaWYgUFNESyBpcyBwcm9wZXJseSBpbnN0YWxsZWQuCisgKi8KKworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fUE9DQ19fKQorIyAgaWYgIWRlZmluZWQoSEFWRV9XSU5TT0NLMl9IKSB8fCAoKF9NU0NfVkVSIDwgMTMwMCkgJiYgIWRlZmluZWQoSVBQUk9UT19FU1ApKQorIyAgICB1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFCisjICBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBJbnRlbnRpb25hbGx5IGZhaWwgdG8gYnVpbGQgd2hlbiB1c2luZyBtc3ZjIDYuMCB3aXRob3V0IFBTREsgaW5zdGFsbGVkLgorICogVGhlIGJyYXZlIG9mIGhlYXJ0IGNhbiBjaXJjdW12ZW50IHRoaXMsIGRlZmluaW5nIEFMTE9XX01TVkM2X1dJVEhPVVRfUFNESworICogaW4gbGliL2NvbmZpZy13aW4zMi5oIGFsdGhvdWdoIGFic29sdXRlbHkgZGlzY291cmFnZWQgYW5kIHVuc3VwcG9ydGVkLgorICovCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX1BPQ0NfXykKKyMgIGlmICFkZWZpbmVkKEhBVkVfV0lORE9XU19IKSB8fCAoKF9NU0NfVkVSIDwgMTMwMCkgJiYgIWRlZmluZWQoX0ZJTEVUSU1FXykpCisjICAgIGlmICFkZWZpbmVkKEFMTE9XX01TVkM2X1dJVEhPVVRfUFNESykKKyMgICAgICBlcnJvciBNU1ZDIDYuMCByZXF1aXJlcyAiRmVicnVhcnkgMjAwMyBQbGF0Zm9ybSBTREsiIGEuay5hLiBcCisgICAgICAgICAgICAgIldpbmRvd3MgU2VydmVyIDIwMDMgUFNESyIKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBDVVJMX0RJU0FCTEVfTERBUCAxCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBORVRXQVJFCitpbnQgbmV0d2FyZV9pbml0KHZvaWQpOworI2lmbmRlZiBfX05PVkVMTF9MSUJDX18KKyNpbmNsdWRlIDxzeXMvYnNkc2t0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWV2YWwuaD4KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfTElCSUROKSAmJiBkZWZpbmVkKEhBVkVfVExEX0gpCisvKiBUaGUgbGliIHdhcyBwcmVzZW50IGFuZCB0aGUgdGxkLmggaGVhZGVyICh3aGljaCBpcyBtaXNzaW5nIGluIGxpYmlkbiAwLjMuWAorICAgYnV0IHdlIG9ubHkgd29yayB3aXRoIGxpYmlkbiAwLjQuMSBvciBsYXRlcikgKi8KKyNkZWZpbmUgVVNFX0xJQklETgorI2VuZGlmCisKKyNpZm5kZWYgU0laRU9GX1RJTUVfVAorLyogYXNzdW1lIGRlZmF1bHQgc2l6ZSBvZiB0aW1lX3QgdG8gYmUgMzIgYml0ICovCisjZGVmaW5lIFNJWkVPRl9USU1FX1QgNAorI2VuZGlmCisKKyNkZWZpbmUgTElCSUROX1JFUVVJUkVEX1ZFUlNJT04gIjAuNC4xIgorCisjaWYgZGVmaW5lZChVU0VfR05VVExTKSB8fCBkZWZpbmVkKFVTRV9TU0xFQVkpIHx8IGRlZmluZWQoVVNFX05TUykgfHwgXAorICAgIGRlZmluZWQoVVNFX1FTT1NTTCkgfHwgZGVmaW5lZChVU0VfUE9MQVJTU0wpIHx8IGRlZmluZWQoVVNFX0FYVExTKSB8fCBcCisgICAgZGVmaW5lZChVU0VfQ1lBU1NMKQorI2RlZmluZSBVU0VfU1NMICAgIC8qIFNTTCBzdXBwb3J0IGhhcyBiZWVuIGVuYWJsZWQgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQorI2RlZmluZSBVU0VfSFRUUF9ORUdPVElBVEUKKyNlbmRpZgorCisvKiBTaW5nbGUgcG9pbnQgd2hlcmUgVVNFX05UTE0gZGVmaW5pdGlvbiBtaWdodCBiZSBkb25lICovCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9OVExNKQorI2lmIGRlZmluZWQoVVNFX1NTTEVBWSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKSB8fCBcCisgICBkZWZpbmVkKFVTRV9HTlVUTFMpIHx8IGRlZmluZWQoVVNFX05TUykKKyNkZWZpbmUgVVNFX05UTE0KKyNlbmRpZgorI2VuZGlmCisKKy8qIG5vbi1jb25maWd1cmUgYnVpbGRzIG1heSBkZWZpbmUgQ1VSTF9XQU5UU19DQV9CVU5ETEVfRU5WICovCisjaWYgZGVmaW5lZChDVVJMX1dBTlRTX0NBX0JVTkRMRV9FTlYpICYmICFkZWZpbmVkKENVUkxfQ0FfQlVORExFKQorI2RlZmluZSBDVVJMX0NBX0JVTkRMRSBnZXRlbnYoIkNVUkxfQ0FfQlVORExFIikKKyNlbmRpZgorCisvKiBEZWZpbmUgU19JU1JFRyBpZiBub3QgZGVmaW5lZCBieSBzeXN0ZW0gaGVhZGVycywgZi5lLiBNU1ZDICovCisjaWYgIWRlZmluZWQoU19JU1JFRykgJiYgZGVmaW5lZChTX0lGTVQpICYmIGRlZmluZWQoU19JRlJFRykKKyNkZWZpbmUgU19JU1JFRyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRlJFRykKKyNlbmRpZgorCisvKiBQcm92aWRlIGEgbWVjaGFuaXNtIHRvIHNpbGVuY2UgcGlja3kgY29tcGlsZXJzLCBzdWNoIGFzIGdjYyA0LjYrLgorICAgUGFyYW1ldGVycyBzaG91bGQgb2YgY291cnNlIG5vcm1hbGx5IG5vdCBiZSB1bnVzZWQsIGJ1dCBmb3IgZXhhbXBsZSB3aGVuIHdlCisgICBoYXZlIG11bHRpcGxlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgc2FtZSBpbnRlcmZhY2UgaXQgbWF5IGhhcHBlbi4gKi8KKyNpZm5kZWYgX19HTlVDX18KKyNkZWZpbmUgVU5VU0VEX1BBUkFNIC8qTk9USElORyovCisjZWxzZQorI2RlZmluZSBVTlVTRURfUEFSQU0gX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKyNlbmRpZgorCisvKgorICogSW5jbHVkZSBtYWNyb3MgYW5kIGRlZmluZXMgdGhhdCBzaG91bGQgb25seSBiZSBwcm9jZXNzZWQgb25jZS4KKyAqLworCisjaWZuZGVmIF9fU0VUVVBfT05DRV9ICisjaW5jbHVkZSAic2V0dXBfb25jZS5oIgorI2VuZGlmCisKKy8qCisgKiBEZWZpbml0aW9uIG9mIG91ciBOT1Agc3RhdGVtZW50IE9iamVjdC1saWtlIG1hY3JvCisgKi8KKworI2lmbmRlZiBDdXJsX25vcF9zdG10CisjICBkZWZpbmUgQ3VybF9ub3Bfc3RtdCBkbyB7IH0gV0hJTEVfRkFMU0UKKyNlbmRpZgorCisvKgorICogRW5zdXJlIHRoYXQgV2luc29jayBhbmQgbHdJUCBUQ1AvSVAgc3RhY2tzIGFyZSBub3QgbWl4ZWQuCisgKi8KKworI2lmIGRlZmluZWQoX19MV0lQX09QVF9IX18pCisjICBpZiBkZWZpbmVkKFNPQ0tFVCkgfHwgXAorICAgICBkZWZpbmVkKFVTRV9XSU5TT0NLKSB8fCBcCisgICAgIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpIHx8IFwKKyAgICAgZGVmaW5lZChIQVZFX1dJTlNPQ0syX0gpIHx8IFwKKyAgICAgZGVmaW5lZChIQVZFX1dTMlRDUElQX0gpCisjICAgIGVycm9yICJXaW5zb2NrIGFuZCBsd0lQIFRDUC9JUCBzdGFjayBkZWZpbml0aW9ucyBzaGFsbCBub3QgY29leGlzdCEiCisjICBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBQb3J0YWJsZSBzeW1ib2xpYyBuYW1lcyBmb3IgV2luc29jayBzaHV0ZG93bigpIG1vZGUgZmxhZ3MuCisgKi8KKworI2lmZGVmIFVTRV9XSU5TT0NLCisjICBkZWZpbmUgU0hVVF9SRCAgIDB4MDAKKyMgIGRlZmluZSBTSFVUX1dSICAgMHgwMQorIyAgZGVmaW5lIFNIVVRfUkRXUiAweDAyCisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0xJQl9TRVRVUF9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc2V0dXBfb25jZS5oIGIvY3VybC03LjI1LjAvbGliL3NldHVwX29uY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTM3ZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3NldHVwX29uY2UuaApAQCAtMCwwICsxLDUyOSBAQAorI2lmbmRlZiBfX1NFVFVQX09OQ0VfSAorI2RlZmluZSBfX1NFVFVQX09OQ0VfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVElDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgQ29udGVudCBvZiBoZWFkZXIgZmlsZXMgbGliL3NldHVwX29uY2UuaCBhbmQgYXJlcy9zZXR1cF9vbmNlLmggICoKKyAqICBtdXN0IGJlIGtlcHQgaW4gc3luYy4gTW9kaWZ5IHRoZSBvdGhlciBvbmUgaWYgeW91IGNoYW5nZSB0aGlzLiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoKKyAqIEluY2x1c2lvbiBvZiBjb21tb24gaGVhZGVyIGZpbGVzLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2lmZGVmIE5FRURfTUFMTE9DX0gKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbmRpZgorCisjaWZkZWYgTkVFRF9NRU1PUllfSAorI2luY2x1ZGUgPG1lbW9yeS5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2lmZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBIQVZFX1RJTUVfSAorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TVERCT09MX0gKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjZW5kaWYKKworCisvKgorICogRGVmaW5pdGlvbiBvZiB0aW1ldmFsIHN0cnVjdCBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSBpdC4KKyAqLworCisjaWZuZGVmIEhBVkVfU1RSVUNUX1RJTUVWQUwKK3N0cnVjdCB0aW1ldmFsIHsKKyBsb25nIHR2X3NlYzsKKyBsb25nIHR2X3VzZWM7Cit9OworI2VuZGlmCisKKworLyoKKyAqIElmIHdlIGhhdmUgdGhlIE1TR19OT1NJR05BTCBkZWZpbmUsIG1ha2Ugc3VyZSB3ZSB1c2UKKyAqIGl0IGFzIHRoZSBmb3VydGggYXJndW1lbnQgb2YgZnVuY3Rpb24gc2VuZCgpCisgKi8KKworI2lmZGVmIEhBVkVfTVNHX05PU0lHTkFMCisjZGVmaW5lIFNFTkRfNFRIX0FSRyBNU0dfTk9TSUdOQUwKKyNlbHNlCisjZGVmaW5lIFNFTkRfNFRIX0FSRyAwCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChfX21pbml4KQorLyogTWluaXggZG9lc24ndCBzdXBwb3J0IHJlY3Ygb24gVENQIHNvY2tldHMgKi8KKyNkZWZpbmUgc3JlYWQoeCx5LHopIChzc2l6ZV90KXJlYWQoKFJFQ1ZfVFlQRV9BUkcxKSh4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUkVDVl9UWVBFX0FSRzIpKHkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSRUNWX1RZUEVfQVJHMykoeikpCisKKyNlbGlmIGRlZmluZWQoSEFWRV9SRUNWKQorLyoKKyAqIFRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIHJldHVybiB0eXBlIGFuZCBhcmd1bWVudHMgdHlwZXMKKyAqIG9mIGZ1bmN0aW9ucyByZWN2KCkgYW5kIHNlbmQoKSBiZWxvbmcgYW5kIGNvbWUgZnJvbSB0aGUKKyAqIGNvbmZpZ3VyYXRpb24gZmlsZS4gRG8gbm90IGRlZmluZSB0aGVtIGluIGFueSBvdGhlciBwbGFjZS4KKyAqCisgKiBIQVZFX1JFQ1YgaXMgZGVmaW5lZCBpZiB5b3UgaGF2ZSBhIGZ1bmN0aW9uIG5hbWVkIHJlY3YoKQorICogd2hpY2ggaXMgdXNlZCB0byByZWFkIGluY29taW5nIGRhdGEgZnJvbSBzb2NrZXRzLiBJZiB5b3VyCisgKiBmdW5jdGlvbiBoYXMgYW5vdGhlciBuYW1lIHRoZW4gZG9uJ3QgZGVmaW5lIEhBVkVfUkVDVi4KKyAqCisgKiBJZiBIQVZFX1JFQ1YgaXMgZGVmaW5lZCB0aGVuIFJFQ1ZfVFlQRV9BUkcxLCBSRUNWX1RZUEVfQVJHMiwKKyAqIFJFQ1ZfVFlQRV9BUkczLCBSRUNWX1RZUEVfQVJHNCBhbmQgUkVDVl9UWVBFX1JFVFYgbXVzdCBhbHNvCisgKiBiZSBkZWZpbmVkLgorICoKKyAqIEhBVkVfU0VORCBpcyBkZWZpbmVkIGlmIHlvdSBoYXZlIGEgZnVuY3Rpb24gbmFtZWQgc2VuZCgpCisgKiB3aGljaCBpcyB1c2VkIHRvIHdyaXRlIG91dGdvaW5nIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LgorICogSWYgeW91cnMgaGFzIGFub3RoZXIgbmFtZSB0aGVuIGRvbid0IGRlZmluZSBIQVZFX1NFTkQuCisgKgorICogSWYgSEFWRV9TRU5EIGlzIGRlZmluZWQgdGhlbiBTRU5EX1RZUEVfQVJHMSwgU0VORF9RVUFMX0FSRzIsCisgKiBTRU5EX1RZUEVfQVJHMiwgU0VORF9UWVBFX0FSRzMsIFNFTkRfVFlQRV9BUkc0IGFuZAorICogU0VORF9UWVBFX1JFVFYgbXVzdCBhbHNvIGJlIGRlZmluZWQuCisgKi8KKworI2lmICFkZWZpbmVkKFJFQ1ZfVFlQRV9BUkcxKSB8fCBcCisgICAgIWRlZmluZWQoUkVDVl9UWVBFX0FSRzIpIHx8IFwKKyAgICAhZGVmaW5lZChSRUNWX1RZUEVfQVJHMykgfHwgXAorICAgICFkZWZpbmVkKFJFQ1ZfVFlQRV9BUkc0KSB8fCBcCisgICAgIWRlZmluZWQoUkVDVl9UWVBFX1JFVFYpCisgIC8qICovCisgIEVycm9yIE1pc3NpbmdfZGVmaW5pdGlvbl9vZl9yZXR1cm5fYW5kX2FyZ3VtZW50c190eXBlc19vZl9yZWN2CisgIC8qICovCisjZWxzZQorI2RlZmluZSBzcmVhZCh4LHkseikgKHNzaXplX3QpcmVjdigoUkVDVl9UWVBFX0FSRzEpKHgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSRUNWX1RZUEVfQVJHMikoeSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJFQ1ZfVFlQRV9BUkczKSh6KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUkVDVl9UWVBFX0FSRzQpKDApKQorI2VuZGlmCisjZWxzZSAvKiBIQVZFX1JFQ1YgKi8KKyNpZm5kZWYgc3JlYWQKKyAgLyogKi8KKyAgRXJyb3IgTWlzc2luZ19kZWZpbml0aW9uX29mX21hY3JvX3NyZWFkCisgIC8qICovCisjZW5kaWYKKyNlbmRpZiAvKiBIQVZFX1JFQ1YgKi8KKworCisjaWYgZGVmaW5lZChfX21pbml4KQorLyogTWluaXggZG9lc24ndCBzdXBwb3J0IHNlbmQgb24gVENQIHNvY2tldHMgKi8KKyNkZWZpbmUgc3dyaXRlKHgseSx6KSAoc3NpemVfdCl3cml0ZSgoU0VORF9UWVBFX0FSRzEpKHgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0VORF9UWVBFX0FSRzIpKHkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0VORF9UWVBFX0FSRzMpKHopKQorCisjZWxpZiBkZWZpbmVkKEhBVkVfU0VORCkKKyNpZiAhZGVmaW5lZChTRU5EX1RZUEVfQVJHMSkgfHwgXAorICAgICFkZWZpbmVkKFNFTkRfUVVBTF9BUkcyKSB8fCBcCisgICAgIWRlZmluZWQoU0VORF9UWVBFX0FSRzIpIHx8IFwKKyAgICAhZGVmaW5lZChTRU5EX1RZUEVfQVJHMykgfHwgXAorICAgICFkZWZpbmVkKFNFTkRfVFlQRV9BUkc0KSB8fCBcCisgICAgIWRlZmluZWQoU0VORF9UWVBFX1JFVFYpCisgIC8qICovCisgIEVycm9yIE1pc3NpbmdfZGVmaW5pdGlvbl9vZl9yZXR1cm5fYW5kX2FyZ3VtZW50c190eXBlc19vZl9zZW5kCisgIC8qICovCisjZWxzZQorI2RlZmluZSBzd3JpdGUoeCx5LHopIChzc2l6ZV90KXNlbmQoKFNFTkRfVFlQRV9BUkcxKSh4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNFTkRfVFlQRV9BUkcyKSh5KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNFTkRfVFlQRV9BUkczKSh6KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNFTkRfVFlQRV9BUkc0KShTRU5EXzRUSF9BUkcpKQorI2VuZGlmCisjZWxzZSAvKiBIQVZFX1NFTkQgKi8KKyNpZm5kZWYgc3dyaXRlCisgIC8qICovCisgIEVycm9yIE1pc3NpbmdfZGVmaW5pdGlvbl9vZl9tYWNyb19zd3JpdGUKKyAgLyogKi8KKyNlbmRpZgorI2VuZGlmIC8qIEhBVkVfU0VORCAqLworCisKKyNpZiAwCisjaWYgZGVmaW5lZChIQVZFX1JFQ1ZGUk9NKQorLyoKKyAqIEN1cnJlbnRseSByZWN2ZnJvbSBpcyBvbmx5IHVzZWQgb24gdWRwIHNvY2tldHMuCisgKi8KKyNpZiAhZGVmaW5lZChSRUNWRlJPTV9UWVBFX0FSRzEpIHx8IFwKKyAgICAhZGVmaW5lZChSRUNWRlJPTV9UWVBFX0FSRzIpIHx8IFwKKyAgICAhZGVmaW5lZChSRUNWRlJPTV9UWVBFX0FSRzMpIHx8IFwKKyAgICAhZGVmaW5lZChSRUNWRlJPTV9UWVBFX0FSRzQpIHx8IFwKKyAgICAhZGVmaW5lZChSRUNWRlJPTV9UWVBFX0FSRzUpIHx8IFwKKyAgICAhZGVmaW5lZChSRUNWRlJPTV9UWVBFX0FSRzYpIHx8IFwKKyAgICAhZGVmaW5lZChSRUNWRlJPTV9UWVBFX1JFVFYpCisgIC8qICovCisgIEVycm9yIE1pc3NpbmdfZGVmaW5pdGlvbl9vZl9yZXR1cm5fYW5kX2FyZ3VtZW50c190eXBlc19vZl9yZWN2ZnJvbQorICAvKiAqLworI2Vsc2UKKyNkZWZpbmUgc3JlYWRmcm9tKHMsYixibCxmLGZsKSAoc3NpemVfdClyZWN2ZnJvbSgoUkVDVkZST01fVFlQRV9BUkcxKSAgKHMpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSRUNWRlJPTV9UWVBFX0FSRzIgKikoYiksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJFQ1ZGUk9NX1RZUEVfQVJHMykgIChibCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUkVDVkZST01fVFlQRV9BUkc0KSAgKDApLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSRUNWRlJPTV9UWVBFX0FSRzUgKikoZiksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJFQ1ZGUk9NX1RZUEVfQVJHNiAqKShmbCkpCisjZW5kaWYKKyNlbHNlIC8qIEhBVkVfUkVDVkZST00gKi8KKyNpZm5kZWYgc3JlYWRmcm9tCisgIC8qICovCisgIEVycm9yIE1pc3NpbmdfZGVmaW5pdGlvbl9vZl9tYWNyb19zcmVhZGZyb20KKyAgLyogKi8KKyNlbmRpZgorI2VuZGlmIC8qIEhBVkVfUkVDVkZST00gKi8KKworCisjaWZkZWYgUkVDVkZST01fVFlQRV9BUkc2X0lTX1ZPSUQKKyMgIGRlZmluZSBSRUNWRlJPTV9BUkc2X1QgaW50CisjZWxzZQorIyAgZGVmaW5lIFJFQ1ZGUk9NX0FSRzZfVCBSRUNWRlJPTV9UWVBFX0FSRzYKKyNlbmRpZgorI2VuZGlmIC8qIGlmIDAgKi8KKworCisvKgorICogRnVuY3Rpb24tbGlrZSBtYWNybyBkZWZpbml0aW9uIHVzZWQgdG8gY2xvc2UgYSBzb2NrZXQuCisgKi8KKworI2lmIGRlZmluZWQoSEFWRV9DTE9TRVNPQ0tFVCkKKyMgIGRlZmluZSBzY2xvc2UoeCkgIGNsb3Nlc29ja2V0KCh4KSkKKyNlbGlmIGRlZmluZWQoSEFWRV9DTE9TRVNPQ0tFVF9DQU1FTCkKKyMgIGRlZmluZSBzY2xvc2UoeCkgIENsb3NlU29ja2V0KCh4KSkKKyNlbGlmIGRlZmluZWQoVVNFX0xXSVBTT0NLKQorIyAgZGVmaW5lIHNjbG9zZSh4KSAgbHdpcF9jbG9zZSgoeCkpCisjZWxzZQorIyAgZGVmaW5lIHNjbG9zZSh4KSAgY2xvc2UoKHgpKQorI2VuZGlmCisKKy8qCisgKiBTdGFjay1pbmRlcGVuZGVudCB2ZXJzaW9uIG9mIGZjbnRsKCkgb24gc29ja2V0czoKKyAqLworI2lmIGRlZmluZWQoVVNFX0xXSVBTT0NLKQorIyAgZGVmaW5lIHNmY250bCAgbHdpcF9mY250bAorI2Vsc2UKKyMgIGRlZmluZSBzZmNudGwgIGZjbnRsCisjZW5kaWYKKworLyoKKyAqIFVwcGVyY2FzZSBtYWNybyB2ZXJzaW9ucyBvZiBBTlNJL0lTTyBpcyooKSBmdW5jdGlvbnMvbWFjcm9zIHdoaWNoCisgKiBhdm9pZCBuZWdhdGl2ZSBudW1iZXIgaW5wdXRzIHdpdGggYXJndW1lbnQgYnl0ZSBjb2RlcyA+IDEyNy4KKyAqLworCisjZGVmaW5lIElTU1BBQ0UoeCkgIChpc3NwYWNlKChpbnQpICAoKHVuc2lnbmVkIGNoYXIpeCkpKQorI2RlZmluZSBJU0RJR0lUKHgpICAoaXNkaWdpdCgoaW50KSAgKCh1bnNpZ25lZCBjaGFyKXgpKSkKKyNkZWZpbmUgSVNBTE5VTSh4KSAgKGlzYWxudW0oKGludCkgICgodW5zaWduZWQgY2hhcil4KSkpCisjZGVmaW5lIElTWERJR0lUKHgpIChpc3hkaWdpdCgoaW50KSAoKHVuc2lnbmVkIGNoYXIpeCkpKQorI2RlZmluZSBJU0dSQVBIKHgpICAoaXNncmFwaCgoaW50KSAgKCh1bnNpZ25lZCBjaGFyKXgpKSkKKyNkZWZpbmUgSVNBTFBIQSh4KSAgKGlzYWxwaGEoKGludCkgICgodW5zaWduZWQgY2hhcil4KSkpCisjZGVmaW5lIElTUFJJTlQoeCkgIChpc3ByaW50KChpbnQpICAoKHVuc2lnbmVkIGNoYXIpeCkpKQorI2RlZmluZSBJU1VQUEVSKHgpICAoaXN1cHBlcigoaW50KSAgKCh1bnNpZ25lZCBjaGFyKXgpKSkKKyNkZWZpbmUgSVNMT1dFUih4KSAgKGlzbG93ZXIoKGludCkgICgodW5zaWduZWQgY2hhcil4KSkpCisjZGVmaW5lIElTQVNDSUkoeCkgIChpc2FzY2lpKChpbnQpICAoKHVuc2lnbmVkIGNoYXIpeCkpKQorCisjZGVmaW5lIElTQkxBTksoeCkgIChpbnQpKCgoKHVuc2lnbmVkIGNoYXIpeCkgPT0gJyAnKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpeCkgPT0gJ1x0JykpCisKKyNkZWZpbmUgVE9MT1dFUih4KSAgKHRvbG93ZXIoKGludCkgICgodW5zaWduZWQgY2hhcil4KSkpCisKKworLyoKKyAqICdib29sJyBleGlzdHMgb24gcGxhdGZvcm1zIHdpdGggPHN0ZGJvb2wuaD4sIGkuZS4gQzk5IHBsYXRmb3Jtcy4KKyAqIE9uIG5vbi1DOTkgcGxhdGZvcm1zIHRoZXJlJ3Mgbm8gYm9vbCwgc28gZGVmaW5lIGFuIGVudW0gZm9yIHRoYXQuCisgKiBPbiBDOTkgcGxhdGZvcm1zICdmYWxzZScgYW5kICd0cnVlJyBhbHNvIGV4aXN0LiBFbnVtIHVzZXMgYQorICogZ2xvYmFsIG5hbWVzcGFjZSB0aG91Z2gsIHNvIHVzZSBib29sX2ZhbHNlIGFuZCBib29sX3RydWUuCisgKi8KKworI2lmbmRlZiBIQVZFX0JPT0xfVAorICB0eXBlZGVmIGVudW0geworICAgICAgYm9vbF9mYWxzZSA9IDAsCisgICAgICBib29sX3RydWUgID0gMQorICB9IGJvb2w7CisKKy8qCisgKiBVc2UgYSBkZWZpbmUgdG8gbGV0ICd0cnVlJyBhbmQgJ2ZhbHNlJyB1c2UgdGhvc2UgZW51bXMuICBUaGVyZQorICogYXJlIGN1cnJlbnRseSBubyB1c2Ugb2YgdHJ1ZSBhbmQgZmFsc2UgaW4gbGliY3VybCBwcm9wZXIsIGJ1dAorICogdGhlcmUgYXJlIHNvbWUgaW4gdGhlIGV4YW1wbGVzLiBUaGlzIHdpbGwgY2F0ZXIgZm9yIGFueSBsYXRlcgorICogY29kZSBoYXBwZW5pbmcgdG8gdXNlIHRydWUgYW5kIGZhbHNlLgorICovCisjICBkZWZpbmUgZmFsc2UgYm9vbF9mYWxzZQorIyAgZGVmaW5lIHRydWUgIGJvb2xfdHJ1ZQorIyAgZGVmaW5lIEhBVkVfQk9PTF9UCisjZW5kaWYKKworCisvKgorICogUmVkZWZpbmUgVFJVRSBhbmQgRkFMU0UgdG9vLCB0byBjYXRjaCBjdXJyZW50IHVzZS4gV2l0aCB0aGlzCisgKiBjaGFuZ2UsICdib29sIGZvdW5kID0gMScgd2lsbCBnaXZlIGEgd2FybmluZyBvbiBNSVBTUHJvLCBidXQKKyAqICdib29sIGZvdW5kID0gVFJVRScgd2lsbCBub3QuIENoYW5nZSB0ZXN0ZWQgb24gSVJJWC9NSVBTUHJvLAorICogQUlYIDUuMS9YbGMsIFRydTY0IDUuMS9jYywgdy9tYWtlIHRlc3QgdG9vLgorICovCisKKyNpZm5kZWYgVFJVRQorI2RlZmluZSBUUlVFIHRydWUKKyNlbmRpZgorI2lmbmRlZiBGQUxTRQorI2RlZmluZSBGQUxTRSBmYWxzZQorI2VuZGlmCisKKworLyoKKyAqIE1hY3JvIFdISUxFX0ZBTFNFIG1heSBiZSB1c2VkIHRvIGJ1aWxkIHNpbmdsZS1pdGVyYXRpb24gZG8td2hpbGUgbG9vcHMsCisgKiBhdm9pZGluZyBjb21waWxlciB3YXJuaW5ncy4gTW9zdGx5IGludGVuZGVkIGZvciBvdGhlciBtYWNybyBkZWZpbml0aW9ucy4KKyAqLworCisjZGVmaW5lIFdISUxFX0ZBTFNFICB3aGlsZSgwKQorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19QT0NDX18pCisjICB1bmRlZiBXSElMRV9GQUxTRQorIyAgaWYgKF9NU0NfVkVSIDwgMTUwMCkKKyMgICAgZGVmaW5lIFdISUxFX0ZBTFNFICB3aGlsZSgxLCAwKQorIyAgZWxzZQorIyAgICBkZWZpbmUgV0hJTEVfRkFMU0UgXAorX19wcmFnbWEod2FybmluZyhwdXNoKSkgXAorX19wcmFnbWEod2FybmluZyhkaXNhYmxlOjQxMjcpKSBcCit3aGlsZSgwKSBcCitfX3ByYWdtYSh3YXJuaW5nKHBvcCkpCisjICBlbmRpZgorI2VuZGlmCisKKworLyoKKyAqIFR5cGVkZWYgdG8gJ2ludCcgaWYgc2lnX2F0b21pY190IGlzIG5vdCBhbiBhdmFpbGFibGUgJ3R5cGVkZWZlZCcgdHlwZS4KKyAqLworCisjaWZuZGVmIEhBVkVfU0lHX0FUT01JQ19UCit0eXBlZGVmIGludCBzaWdfYXRvbWljX3Q7CisjZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UCisjZW5kaWYKKworCisvKgorICogQ29udmVuaWVuY2UgU0lHX0FUT01JQ19UIGRlZmluaXRpb24KKyAqLworCisjaWZkZWYgSEFWRV9TSUdfQVRPTUlDX1RfVk9MQVRJTEUKKyNkZWZpbmUgU0lHX0FUT01JQ19UIHN0YXRpYyBzaWdfYXRvbWljX3QKKyNlbHNlCisjZGVmaW5lIFNJR19BVE9NSUNfVCBzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190CisjZW5kaWYKKworCisvKgorICogRGVmYXVsdCByZXR1cm4gdHlwZSBmb3Igc2lnbmFsIGhhbmRsZXJzLgorICovCisKKyNpZm5kZWYgUkVUU0lHVFlQRQorI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKKyNlbmRpZgorCisKKy8qCisgKiBNYWNybyB1c2VkIHRvIGluY2x1ZGUgY29kZSBvbmx5IGluIGRlYnVnIGJ1aWxkcy4KKyAqLworCisjaWZkZWYgREVCVUdCVUlMRAorI2RlZmluZSBERUJVR0YoeCkgeAorI2Vsc2UKKyNkZWZpbmUgREVCVUdGKHgpIGRvIHsgfSBXSElMRV9GQUxTRQorI2VuZGlmCisKKworLyoKKyAqIE1hY3JvIHVzZWQgdG8gaW5jbHVkZSBhc3NlcnRpb24gY29kZSBvbmx5IGluIGRlYnVnIGJ1aWxkcy4KKyAqLworCisjaWYgZGVmaW5lZChERUJVR0JVSUxEKSAmJiBkZWZpbmVkKEhBVkVfQVNTRVJUX0gpCisjZGVmaW5lIERFQlVHQVNTRVJUKHgpIGFzc2VydCh4KQorI2Vsc2UKKyNkZWZpbmUgREVCVUdBU1NFUlQoeCkgZG8geyB9IFdISUxFX0ZBTFNFCisjZW5kaWYKKworCisvKgorICogTWFjcm8gU09DS0VSUk5PIC8gU0VUX1NPQ0tFUlJOTygpIHJldHVybnMgLyBzZXRzIHRoZSAqc29ja2V0LXJlbGF0ZWQqIGVycm5vCisgKiAob3IgZXF1aXZhbGVudCkgb24gdGhpcyBwbGF0Zm9ybSB0byBoaWRlIHBsYXRmb3JtIGRldGFpbHMgdG8gY29kZSB1c2luZyBpdC4KKyAqLworCisjaWZkZWYgVVNFX1dJTlNPQ0sKKyNkZWZpbmUgU09DS0VSUk5PICAgICAgICAgKChpbnQpV1NBR2V0TGFzdEVycm9yKCkpCisjZGVmaW5lIFNFVF9TT0NLRVJSTk8oeCkgIChXU0FTZXRMYXN0RXJyb3IoKGludCkoeCkpKQorI2Vsc2UKKyNkZWZpbmUgU09DS0VSUk5PICAgICAgICAgKGVycm5vKQorI2RlZmluZSBTRVRfU09DS0VSUk5PKHgpICAoZXJybm8gPSAoeCkpCisjZW5kaWYKKworCisvKgorICogTWFjcm8gRVJSTk8gLyBTRVRfRVJSTk8oKSByZXR1cm5zIC8gc2V0cyB0aGUgTk9UICpzb2NrZXQtcmVsYXRlZCogZXJybm8KKyAqIChvciBlcXVpdmFsZW50KSBvbiB0aGlzIHBsYXRmb3JtIHRvIGhpZGUgcGxhdGZvcm0gZGV0YWlscyB0byBjb2RlIHVzaW5nIGl0LgorICovCisKKyNpZmRlZiBXSU4zMgorI2RlZmluZSBFUlJOTyAgICAgICAgICgoaW50KUdldExhc3RFcnJvcigpKQorI2RlZmluZSBTRVRfRVJSTk8oeCkgIChTZXRMYXN0RXJyb3IoKERXT1JEKSh4KSkpCisjZWxzZQorI2RlZmluZSBFUlJOTyAgICAgICAgIChlcnJubykKKyNkZWZpbmUgU0VUX0VSUk5PKHgpICAoZXJybm8gPSAoeCkpCisjZW5kaWYKKworCisvKgorICogUG9ydGFibGUgZXJyb3IgbnVtYmVyIHN5bWJvbGljIG5hbWVzIGRlZmluZWQgdG8gV2luc29jayBlcnJvciBjb2Rlcy4KKyAqLworCisjaWZkZWYgVVNFX1dJTlNPQ0sKKyN1bmRlZiAgRUJBREYgICAgICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRUJBREYgICAgICAgICAgICBXU0FFQkFERgorI3VuZGVmICBFSU5UUiAgICAgICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFSU5UUiAgICAgICAgICAgIFdTQUVJTlRSCisjdW5kZWYgIEVJTlZBTCAgICAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVJTlZBTCAgICAgICAgICAgV1NBRUlOVkFMCisjdW5kZWYgIEVXT1VMREJMT0NLICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVXT1VMREJMT0NLICAgICAgV1NBRVdPVUxEQkxPQ0sKKyN1bmRlZiAgRUlOUFJPR1JFU1MgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRUlOUFJPR1JFU1MgICAgICBXU0FFSU5QUk9HUkVTUworI3VuZGVmICBFQUxSRUFEWSAgICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFQUxSRUFEWSAgICAgICAgIFdTQUVBTFJFQURZCisjdW5kZWYgIEVOT1RTT0NLICAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVOT1RTT0NLICAgICAgICAgV1NBRU5PVFNPQ0sKKyN1bmRlZiAgRURFU1RBRERSUkVRICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRURFU1RBRERSUkVRICAgICBXU0FFREVTVEFERFJSRVEKKyN1bmRlZiAgRU1TR1NJWkUgICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRU1TR1NJWkUgICAgICAgICBXU0FFTVNHU0laRQorI3VuZGVmICBFUFJPVE9UWVBFICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFUFJPVE9UWVBFICAgICAgIFdTQUVQUk9UT1RZUEUKKyN1bmRlZiAgRU5PUFJPVE9PUFQgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRU5PUFJPVE9PUFQgICAgICBXU0FFTk9QUk9UT09QVAorI3VuZGVmICBFUFJPVE9OT1NVUFBPUlQgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFUFJPVE9OT1NVUFBPUlQgIFdTQUVQUk9UT05PU1VQUE9SVAorI2RlZmluZSBFU09DS1ROT1NVUFBPUlQgIFdTQUVTT0NLVE5PU1VQUE9SVAorI3VuZGVmICBFT1BOT1RTVVBQICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFT1BOT1RTVVBQICAgICAgIFdTQUVPUE5PVFNVUFAKKyNkZWZpbmUgRVBGTk9TVVBQT1JUICAgICBXU0FFUEZOT1NVUFBPUlQKKyN1bmRlZiAgRUFGTk9TVVBQT1JUICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRUFGTk9TVVBQT1JUICAgICBXU0FFQUZOT1NVUFBPUlQKKyN1bmRlZiAgRUFERFJJTlVTRSAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRUFERFJJTlVTRSAgICAgICBXU0FFQUREUklOVVNFCisjdW5kZWYgIEVBRERSTk9UQVZBSUwgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVBRERSTk9UQVZBSUwgICAgV1NBRUFERFJOT1RBVkFJTAorI3VuZGVmICBFTkVURE9XTiAgICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFTkVURE9XTiAgICAgICAgIFdTQUVORVRET1dOCisjdW5kZWYgIEVORVRVTlJFQUNIICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVORVRVTlJFQUNIICAgICAgV1NBRU5FVFVOUkVBQ0gKKyN1bmRlZiAgRU5FVFJFU0VUICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRU5FVFJFU0VUICAgICAgICBXU0FFTkVUUkVTRVQKKyN1bmRlZiAgRUNPTk5BQk9SVEVEICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRUNPTk5BQk9SVEVEICAgICBXU0FFQ09OTkFCT1JURUQKKyN1bmRlZiAgRUNPTk5SRVNFVCAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRUNPTk5SRVNFVCAgICAgICBXU0FFQ09OTlJFU0VUCisjdW5kZWYgIEVOT0JVRlMgICAgICAgICAgLyogb3ZlcnJpZGUgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVOT0JVRlMgICAgICAgICAgV1NBRU5PQlVGUworI3VuZGVmICBFSVNDT05OICAgICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFSVNDT05OICAgICAgICAgIFdTQUVJU0NPTk4KKyN1bmRlZiAgRU5PVENPTk4gICAgICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRU5PVENPTk4gICAgICAgICBXU0FFTk9UQ09OTgorI2RlZmluZSBFU0hVVERPV04gICAgICAgIFdTQUVTSFVURE9XTgorI2RlZmluZSBFVE9PTUFOWVJFRlMgICAgIFdTQUVUT09NQU5ZUkVGUworI3VuZGVmICBFVElNRURPVVQgICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFVElNRURPVVQgICAgICAgIFdTQUVUSU1FRE9VVAorI3VuZGVmICBFQ09OTlJFRlVTRUQgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFQ09OTlJFRlVTRUQgICAgIFdTQUVDT05OUkVGVVNFRAorI3VuZGVmICBFTE9PUCAgICAgICAgICAgIC8qIG92ZXJyaWRlIGRlZmluaXRpb24gaW4gZXJybm8uaCAqLworI2RlZmluZSBFTE9PUCAgICAgICAgICAgIFdTQUVMT09QCisjaWZuZGVmIEVOQU1FVE9PTE9ORyAgICAgLyogcG9zc2libGUgcHJldmlvdXMgZGVmaW5pdGlvbiBpbiBlcnJuby5oICovCisjZGVmaW5lIEVOQU1FVE9PTE9ORyAgICAgV1NBRU5BTUVUT09MT05HCisjZW5kaWYKKyNkZWZpbmUgRUhPU1RET1dOICAgICAgICBXU0FFSE9TVERPV04KKyN1bmRlZiAgRUhPU1RVTlJFQUNIICAgICAvKiBvdmVycmlkZSBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRUhPU1RVTlJFQUNIICAgICBXU0FFSE9TVFVOUkVBQ0gKKyNpZm5kZWYgRU5PVEVNUFRZICAgICAgICAvKiBwb3NzaWJsZSBwcmV2aW91cyBkZWZpbml0aW9uIGluIGVycm5vLmggKi8KKyNkZWZpbmUgRU5PVEVNUFRZICAgICAgICBXU0FFTk9URU1QVFkKKyNlbmRpZgorI2RlZmluZSBFUFJPQ0xJTSAgICAgICAgIFdTQUVQUk9DTElNCisjZGVmaW5lIEVVU0VSUyAgICAgICAgICAgV1NBRVVTRVJTCisjZGVmaW5lIEVEUVVPVCAgICAgICAgICAgV1NBRURRVU9UCisjZGVmaW5lIEVTVEFMRSAgICAgICAgICAgV1NBRVNUQUxFCisjZGVmaW5lIEVSRU1PVEUgICAgICAgICAgV1NBRVJFTU9URQorI2VuZGlmCisKKworLyoKKyAqICBBY3R1YWxseSB1c2UgX18zMl9nZXRwd3VpZCgpIG9uIDY0LWJpdCBWTVMgYnVpbGRzIGZvciBnZXRwd3VpZCgpCisgKi8KKworI2lmIGRlZmluZWQoX19WTVMpICYmIFwKKyAgICBkZWZpbmVkKF9fSU5JVElBTF9QT0lOVEVSX1NJWkUpICYmIChfX0lOSVRJQUxfUE9JTlRFUl9TSVpFID09IDY0KQorI2RlZmluZSBnZXRwd3VpZCBfXzMyX2dldHB3dWlkCisjZW5kaWYKKworCisvKgorICogTWFjcm8gYXJndl9pdGVtX3QgaGlkZXMgcGxhdGZvcm0gZGV0YWlscyB0byBjb2RlIHVzaW5nIGl0LgorICovCisKKyNpZmRlZiBfX1ZNUworI2RlZmluZSBhcmd2X2l0ZW1fdCAgX19jaGFyX3B0cjMyCisjZWxzZQorI2RlZmluZSBhcmd2X2l0ZW1fdCAgY2hhciAqCisjZW5kaWYKKworCisvKgorICogV2UgdXNlIHRoaXMgWkVST19OVUxMIHRvIGF2b2lkIHBpY2t5IGNvbXBpbGVyIHdhcm5pbmdzLAorICogd2hlbiBhc3NpZ25pbmcgYSBOVUxMIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHZhci4KKyAqLworCisjZGVmaW5lIFpFUk9fTlVMTCAwCisKKworI2VuZGlmIC8qIF9fU0VUVVBfT05DRV9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc2hhcmUuYyBiL2N1cmwtNy4yNS4wL2xpYi9zaGFyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOWIzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc2hhcmUuYwpAQCAtMCwwICsxLDI0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNoYXJlLmgiCisjaW5jbHVkZSAic3NsZ2VuLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworQ1VSTFNIICoKK2N1cmxfc2hhcmVfaW5pdCh2b2lkKQoreworICBzdHJ1Y3QgQ3VybF9zaGFyZSAqc2hhcmUgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBDdXJsX3NoYXJlKSk7CisgIGlmKHNoYXJlKQorICAgIHNoYXJlLT5zcGVjaWZpZXIgfD0gKDE8PENVUkxfTE9DS19EQVRBX1NIQVJFKTsKKworICByZXR1cm4gc2hhcmU7Cit9CisKKyN1bmRlZiBjdXJsX3NoYXJlX3NldG9wdAorQ1VSTFNIY29kZQorY3VybF9zaGFyZV9zZXRvcHQoQ1VSTFNIICpzaCwgQ1VSTFNIb3B0aW9uIG9wdGlvbiwgLi4uKQoreworICBzdHJ1Y3QgQ3VybF9zaGFyZSAqc2hhcmUgPSAoc3RydWN0IEN1cmxfc2hhcmUgKilzaDsKKyAgdmFfbGlzdCBwYXJhbTsKKyAgaW50IHR5cGU7CisgIGN1cmxfbG9ja19mdW5jdGlvbiBsb2NrZnVuYzsKKyAgY3VybF91bmxvY2tfZnVuY3Rpb24gdW5sb2NrZnVuYzsKKyAgdm9pZCAqcHRyOworCisgIGlmKHNoYXJlLT5kaXJ0eSkKKyAgICAvKiBkb24ndCBhbGxvdyBzZXR0aW5nIG9wdGlvbnMgd2hpbGUgb25lIG9yIG1vcmUgaGFuZGxlcyBhcmUgYWxyZWFkeQorICAgICAgIHVzaW5nIHRoaXMgc2hhcmUgKi8KKyAgICByZXR1cm4gQ1VSTFNIRV9JTl9VU0U7CisKKyAgdmFfc3RhcnQocGFyYW0sIG9wdGlvbik7CisKKyAgc3dpdGNoKG9wdGlvbikgeworICBjYXNlIENVUkxTSE9QVF9TSEFSRToKKyAgICAvKiB0aGlzIGlzIGEgdHlwZSB0aGlzIHNoYXJlIHdpbGwgc2hhcmUgKi8KKyAgICB0eXBlID0gdmFfYXJnKHBhcmFtLCBpbnQpOworICAgIHNoYXJlLT5zcGVjaWZpZXIgfD0gKDE8PHR5cGUpOworICAgIHN3aXRjaCggdHlwZSApIHsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0ROUzoKKyAgICAgIGlmKCFzaGFyZS0+aG9zdGNhY2hlKSB7CisgICAgICAgIHNoYXJlLT5ob3N0Y2FjaGUgPSBDdXJsX21rX2Ruc2NhY2hlKCk7CisgICAgICAgIGlmKCFzaGFyZS0+aG9zdGNhY2hlKQorICAgICAgICAgIHJldHVybiBDVVJMU0hFX05PTUVNOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0NPT0tJRToKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NPT0tJRVMpCisgICAgICBpZighc2hhcmUtPmNvb2tpZXMpIHsKKyAgICAgICAgc2hhcmUtPmNvb2tpZXMgPSBDdXJsX2Nvb2tpZV9pbml0KE5VTEwsIE5VTEwsIE5VTEwsIFRSVUUgKTsKKyAgICAgICAgaWYoIXNoYXJlLT5jb29raWVzKQorICAgICAgICAgIHJldHVybiBDVVJMU0hFX05PTUVNOworICAgICAgfQorICAgICAgYnJlYWs7CisjZWxzZSAgIC8qIENVUkxfRElTQUJMRV9IVFRQICovCisgICAgICByZXR1cm4gQ1VSTFNIRV9OT1RfQlVJTFRfSU47CisjZW5kaWYKKworICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfU1NMX1NFU1NJT046CisjaWZkZWYgVVNFX1NTTAorICAgICAgaWYoIXNoYXJlLT5zc2xzZXNzaW9uKSB7CisgICAgICAgIHNoYXJlLT5tYXhfc3NsX3Nlc3Npb25zID0gODsKKyAgICAgICAgc2hhcmUtPnNzbHNlc3Npb24gPSBjYWxsb2Moc2hhcmUtPm1heF9zc2xfc2Vzc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgY3VybF9zc2xfc2Vzc2lvbikpOworICAgICAgICBzaGFyZS0+c2Vzc2lvbmFnZSA9IDA7CisgICAgICAgIGlmKCFzaGFyZS0+c3Nsc2Vzc2lvbikKKyAgICAgICAgICByZXR1cm4gQ1VSTFNIRV9OT01FTTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworI2Vsc2UKKyAgICAgIHJldHVybiBDVVJMU0hFX05PVF9CVUlMVF9JTjsKKyNlbmRpZgorCisgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9DT05ORUNUOiAgICAgLyogbm90IHN1cHBvcnRlZCAoeWV0KSAqLworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBDVVJMU0hFX0JBRF9PUFRJT047CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTFNIT1BUX1VOU0hBUkU6CisgICAgLyogdGhpcyBpcyBhIHR5cGUgdGhpcyBzaGFyZSB3aWxsIG5vIGxvbmdlciBzaGFyZSAqLworICAgIHR5cGUgPSB2YV9hcmcocGFyYW0sIGludCk7CisgICAgc2hhcmUtPnNwZWNpZmllciAmPSB+KDE8PHR5cGUpOworICAgIHN3aXRjaCggdHlwZSApIHsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0ROUzoKKyAgICAgIGlmKHNoYXJlLT5ob3N0Y2FjaGUpIHsKKyAgICAgICAgQ3VybF9oYXNoX2Rlc3Ryb3koc2hhcmUtPmhvc3RjYWNoZSk7CisgICAgICAgIHNoYXJlLT5ob3N0Y2FjaGUgPSBOVUxMOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0NPT0tJRToKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NPT0tJRVMpCisgICAgICBpZihzaGFyZS0+Y29va2llcykgeworICAgICAgICBDdXJsX2Nvb2tpZV9jbGVhbnVwKHNoYXJlLT5jb29raWVzKTsKKyAgICAgICAgc2hhcmUtPmNvb2tpZXMgPSBOVUxMOworICAgICAgfQorICAgICAgYnJlYWs7CisjZWxzZSAgIC8qIENVUkxfRElTQUJMRV9IVFRQICovCisgICAgICByZXR1cm4gQ1VSTFNIRV9OT1RfQlVJTFRfSU47CisjZW5kaWYKKworICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfU1NMX1NFU1NJT046CisjaWZkZWYgVVNFX1NTTAorICAgICAgQ3VybF9zYWZlZnJlZShzaGFyZS0+c3Nsc2Vzc2lvbik7CisgICAgICBicmVhazsKKyNlbHNlCisgICAgICByZXR1cm4gQ1VSTFNIRV9OT1RfQlVJTFRfSU47CisjZW5kaWYKKworICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfQ09OTkVDVDoKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBDVVJMU0hFX0JBRF9PUFRJT047CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTFNIT1BUX0xPQ0tGVU5DOgorICAgIGxvY2tmdW5jID0gdmFfYXJnKHBhcmFtLCBjdXJsX2xvY2tfZnVuY3Rpb24pOworICAgIHNoYXJlLT5sb2NrZnVuYyA9IGxvY2tmdW5jOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTFNIT1BUX1VOTE9DS0ZVTkM6CisgICAgdW5sb2NrZnVuYyA9IHZhX2FyZyhwYXJhbSwgY3VybF91bmxvY2tfZnVuY3Rpb24pOworICAgIHNoYXJlLT51bmxvY2tmdW5jID0gdW5sb2NrZnVuYzsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxTSE9QVF9VU0VSREFUQToKKyAgICBwdHIgPSB2YV9hcmcocGFyYW0sIHZvaWQgKik7CisgICAgc2hhcmUtPmNsaWVudGRhdGEgPSBwdHI7CisgICAgYnJlYWs7CisKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gQ1VSTFNIRV9CQURfT1BUSU9OOworICB9CisKKyAgcmV0dXJuIENVUkxTSEVfT0s7Cit9CisKK0NVUkxTSGNvZGUKK2N1cmxfc2hhcmVfY2xlYW51cChDVVJMU0ggKnNoKQoreworICBzdHJ1Y3QgQ3VybF9zaGFyZSAqc2hhcmUgPSAoc3RydWN0IEN1cmxfc2hhcmUgKilzaDsKKworICBpZihzaGFyZSA9PSBOVUxMKQorICAgIHJldHVybiBDVVJMU0hFX0lOVkFMSUQ7CisKKyAgaWYoc2hhcmUtPmxvY2tmdW5jKQorICAgIHNoYXJlLT5sb2NrZnVuYyhOVUxMLCBDVVJMX0xPQ0tfREFUQV9TSEFSRSwgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUsCisgICAgICAgICAgICAgICAgICAgIHNoYXJlLT5jbGllbnRkYXRhKTsKKworICBpZihzaGFyZS0+ZGlydHkpIHsKKyAgICBpZihzaGFyZS0+dW5sb2NrZnVuYykKKyAgICAgIHNoYXJlLT51bmxvY2tmdW5jKE5VTEwsIENVUkxfTE9DS19EQVRBX1NIQVJFLCBzaGFyZS0+Y2xpZW50ZGF0YSk7CisgICAgcmV0dXJuIENVUkxTSEVfSU5fVVNFOworICB9CisKKyAgaWYoc2hhcmUtPmhvc3RjYWNoZSkgeworICAgIEN1cmxfaGFzaF9kZXN0cm95KHNoYXJlLT5ob3N0Y2FjaGUpOworICAgIHNoYXJlLT5ob3N0Y2FjaGUgPSBOVUxMOworICB9CisKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NPT0tJRVMpCisgIGlmKHNoYXJlLT5jb29raWVzKQorICAgIEN1cmxfY29va2llX2NsZWFudXAoc2hhcmUtPmNvb2tpZXMpOworI2VuZGlmCisKKyNpZmRlZiBVU0VfU1NMCisgIGlmKHNoYXJlLT5zc2xzZXNzaW9uKSB7CisgICAgc2l6ZV90IGk7CisgICAgZm9yKGkgPSAwOyBpIDwgc2hhcmUtPm1heF9zc2xfc2Vzc2lvbnM7IGkrKykKKyAgICAgIEN1cmxfc3NsX2tpbGxfc2Vzc2lvbigmKHNoYXJlLT5zc2xzZXNzaW9uW2ldKSk7CisgICAgZnJlZShzaGFyZS0+c3Nsc2Vzc2lvbik7CisgIH0KKyNlbmRpZgorCisgIGlmKHNoYXJlLT51bmxvY2tmdW5jKQorICAgIHNoYXJlLT51bmxvY2tmdW5jKE5VTEwsIENVUkxfTE9DS19EQVRBX1NIQVJFLCBzaGFyZS0+Y2xpZW50ZGF0YSk7CisgIGZyZWUoc2hhcmUpOworCisgIHJldHVybiBDVVJMU0hFX09LOworfQorCisKK0NVUkxTSGNvZGUKK0N1cmxfc2hhcmVfbG9jayhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgY3VybF9sb2NrX2RhdGEgdHlwZSwKKyAgICAgICAgICAgICAgICBjdXJsX2xvY2tfYWNjZXNzIGFjY2Vzc3R5cGUpCit7CisgIHN0cnVjdCBDdXJsX3NoYXJlICpzaGFyZSA9IGRhdGEtPnNoYXJlOworCisgIGlmKHNoYXJlID09IE5VTEwpCisgICAgcmV0dXJuIENVUkxTSEVfSU5WQUxJRDsKKworICBpZihzaGFyZS0+c3BlY2lmaWVyICYgKDE8PHR5cGUpKSB7CisgICAgaWYoc2hhcmUtPmxvY2tmdW5jKSAvKiBvbmx5IGNhbGwgdGhpcyBpZiBzZXQhICovCisgICAgICBzaGFyZS0+bG9ja2Z1bmMoZGF0YSwgdHlwZSwgYWNjZXNzdHlwZSwgc2hhcmUtPmNsaWVudGRhdGEpOworICB9CisgIC8qIGVsc2UgaWYgd2UgZG9uJ3Qgc2hhcmUgdGhpcywgcHJldGVuZCBzdWNjZXNzZnVsIGxvY2sgKi8KKworICByZXR1cm4gQ1VSTFNIRV9PSzsKK30KKworQ1VSTFNIY29kZQorQ3VybF9zaGFyZV91bmxvY2soc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIGN1cmxfbG9ja19kYXRhIHR5cGUpCit7CisgIHN0cnVjdCBDdXJsX3NoYXJlICpzaGFyZSA9IGRhdGEtPnNoYXJlOworCisgIGlmKHNoYXJlID09IE5VTEwpCisgICAgcmV0dXJuIENVUkxTSEVfSU5WQUxJRDsKKworICBpZihzaGFyZS0+c3BlY2lmaWVyICYgKDE8PHR5cGUpKSB7CisgICAgaWYoc2hhcmUtPnVubG9ja2Z1bmMpIC8qIG9ubHkgY2FsbCB0aGlzIGlmIHNldCEgKi8KKyAgICAgIHNoYXJlLT51bmxvY2tmdW5jIChkYXRhLCB0eXBlLCBzaGFyZS0+Y2xpZW50ZGF0YSk7CisgIH0KKworICByZXR1cm4gQ1VSTFNIRV9PSzsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9zaGFyZS5oIGIvY3VybC03LjI1LjAvbGliL3NoYXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjllNmMyNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zaGFyZS5oCkBAIC0wLDAgKzEsNjEgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfU0hBUkVfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9TSEFSRV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAiY29va2llLmgiCisjaW5jbHVkZSAidXJsZGF0YS5oIgorCisvKiBTYWxmb3JkQyBzYXlzICJBIHN0cnVjdHVyZSBtZW1iZXIgbWF5IG5vdCBiZSB2b2xhdGlsZSIuIEhlbmNlOgorICovCisjaWZkZWYgX19TQUxGT1JEQ19fCisjZGVmaW5lIENVUkxfVk9MQVRJTEUKKyNlbHNlCisjZGVmaW5lIENVUkxfVk9MQVRJTEUgdm9sYXRpbGUKKyNlbmRpZgorCisvKiB0aGlzIHN0cnVjdCBpcyBsaWJjdXJsLXByaXZhdGUsIGRvbid0IGV4cG9ydCBkZXRhaWxzICovCitzdHJ1Y3QgQ3VybF9zaGFyZSB7CisgIHVuc2lnbmVkIGludCBzcGVjaWZpZXI7CisgIENVUkxfVk9MQVRJTEUgdW5zaWduZWQgaW50IGRpcnR5OworCisgIGN1cmxfbG9ja19mdW5jdGlvbiBsb2NrZnVuYzsKKyAgY3VybF91bmxvY2tfZnVuY3Rpb24gdW5sb2NrZnVuYzsKKyAgdm9pZCAqY2xpZW50ZGF0YTsKKworICBzdHJ1Y3QgY3VybF9oYXNoICpob3N0Y2FjaGU7CisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9DT09LSUVTKQorICBzdHJ1Y3QgQ29va2llSW5mbyAqY29va2llczsKKyNlbmRpZgorCisgIHN0cnVjdCBjdXJsX3NzbF9zZXNzaW9uICpzc2xzZXNzaW9uOworICBzaXplX3QgbWF4X3NzbF9zZXNzaW9uczsKKyAgbG9uZyBzZXNzaW9uYWdlOworfTsKKworQ1VSTFNIY29kZSBDdXJsX3NoYXJlX2xvY2sgKHN0cnVjdCBTZXNzaW9uSGFuZGxlICosIGN1cmxfbG9ja19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfbG9ja19hY2Nlc3MpOworQ1VSTFNIY29kZSBDdXJsX3NoYXJlX3VubG9jayAoc3RydWN0IFNlc3Npb25IYW5kbGUgKiwgY3VybF9sb2NrX2RhdGEpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfU0hBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3NsaXN0LmMgYi9jdXJsLTcuMjUuMC9saWIvc2xpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGRlYmI2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3NsaXN0LmMKQEAgLTAsMCArMSwxMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAic2xpc3QuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogcmV0dXJucyBsYXN0IG5vZGUgaW4gbGlua2VkIGxpc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3RfZ2V0X2xhc3Qoc3RydWN0IGN1cmxfc2xpc3QgKmxpc3QpCit7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICAgICAqaXRlbTsKKworICAvKiBpZiBjYWxsZXIgcGFzc2VkIHVzIGEgTlVMTCwgcmV0dXJuIG5vdyAqLworICBpZighbGlzdCkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBsb29wIHRocm91Z2ggdG8gZmluZCB0aGUgbGFzdCBpdGVtICovCisgIGl0ZW0gPSBsaXN0OworICB3aGlsZShpdGVtLT5uZXh0KSB7CisgICAgaXRlbSA9IGl0ZW0tPm5leHQ7CisgIH0KKyAgcmV0dXJuIGl0ZW07Cit9CisKKy8qCisgKiBjdXJsX3NsaXN0X2FwcGVuZCgpIGFwcGVuZHMgYSBzdHJpbmcgdG8gdGhlIGxpbmtlZCBsaXN0LiBJdCBhbHdheXMgcmV0dXJucworICogdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlY29yZCwgc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIGFzIGFuCisgKiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBhcyB3ZWxsIGFzIGFuIGFwcGVuZCBmdW5jdGlvbi4gSWYgeW91IGZpbmQgdGhpcworICogYm90aGVyc29tZSwgdGhlbiBzaW1wbHkgY3JlYXRlIGEgc2VwYXJhdGUgX2luaXQgZnVuY3Rpb24gYW5kIGNhbGwgaXQKKyAqIGFwcHJvcHJpYXRlbHkgZnJvbSB3aXRoaW4gdGhlIHByb2dyYW0uCisgKi8KK3N0cnVjdCBjdXJsX3NsaXN0ICpjdXJsX3NsaXN0X2FwcGVuZChzdHJ1Y3QgY3VybF9zbGlzdCAqbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRhKQoreworICBzdHJ1Y3QgY3VybF9zbGlzdCAgICAgKmxhc3Q7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICAgICAqbmV3X2l0ZW07CisKKyAgbmV3X2l0ZW0gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjdXJsX3NsaXN0KSk7CisgIGlmKG5ld19pdGVtKSB7CisgICAgY2hhciAqZHVwZGF0YSA9IHN0cmR1cChkYXRhKTsKKyAgICBpZihkdXBkYXRhKSB7CisgICAgICBuZXdfaXRlbS0+bmV4dCA9IE5VTEw7CisgICAgICBuZXdfaXRlbS0+ZGF0YSA9IGR1cGRhdGE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZnJlZShuZXdfaXRlbSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0KKyAgZWxzZQorICAgIHJldHVybiBOVUxMOworCisgIGlmKGxpc3QpIHsKKyAgICBsYXN0ID0gc2xpc3RfZ2V0X2xhc3QobGlzdCk7CisgICAgbGFzdC0+bmV4dCA9IG5ld19pdGVtOworICAgIHJldHVybiBsaXN0OworICB9CisKKyAgLyogaWYgdGhpcyBpcyB0aGUgZmlyc3QgaXRlbSwgdGhlbiBuZXdfaXRlbSAqaXMqIHRoZSBsaXN0ICovCisgIHJldHVybiBuZXdfaXRlbTsKK30KKworLyoKKyAqIEN1cmxfc2xpc3RfZHVwbGljYXRlKCkgZHVwbGljYXRlcyBhIGxpbmtlZCBsaXN0LiBJdCBhbHdheXMgcmV0dXJucyB0aGUKKyAqIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlY29yZCBvZiB0aGUgY2xvbmVkIGxpc3Qgb3IgTlVMTCBpbiBjYXNlIG9mIGFuCisgKiBlcnJvciAob3IgaWYgdGhlIGlucHV0IGxpc3Qgd2FzIE5VTEwpLgorICovCitzdHJ1Y3QgY3VybF9zbGlzdCAqQ3VybF9zbGlzdF9kdXBsaWNhdGUoc3RydWN0IGN1cmxfc2xpc3QgKmlubGlzdCkKK3sKKyAgc3RydWN0IGN1cmxfc2xpc3QgKm91dGxpc3QgPSBOVUxMOworICBzdHJ1Y3QgY3VybF9zbGlzdCAqdG1wOworCisgIHdoaWxlKGlubGlzdCkgeworICAgIHRtcCA9IGN1cmxfc2xpc3RfYXBwZW5kKG91dGxpc3QsIGlubGlzdC0+ZGF0YSk7CisKKyAgICBpZighdG1wKSB7CisgICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKG91dGxpc3QpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgb3V0bGlzdCA9IHRtcDsKKyAgICBpbmxpc3QgPSBpbmxpc3QtPm5leHQ7CisgIH0KKyAgcmV0dXJuIG91dGxpc3Q7Cit9CisKKy8qIGJlIG5pY2UgYW5kIGNsZWFuIHVwIHJlc291cmNlcyAqLwordm9pZCBjdXJsX3NsaXN0X2ZyZWVfYWxsKHN0cnVjdCBjdXJsX3NsaXN0ICpsaXN0KQoreworICBzdHJ1Y3QgY3VybF9zbGlzdCAgICAgKm5leHQ7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICAgICAqaXRlbTsKKworICBpZighbGlzdCkKKyAgICByZXR1cm47CisKKyAgaXRlbSA9IGxpc3Q7CisgIGRvIHsKKyAgICBuZXh0ID0gaXRlbS0+bmV4dDsKKyAgICBDdXJsX3NhZmVmcmVlKGl0ZW0tPmRhdGEpOworICAgIGZyZWUoaXRlbSk7CisgICAgaXRlbSA9IG5leHQ7CisgIH0gd2hpbGUobmV4dCk7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9zbGlzdC5oIGIvY3VybC03LjI1LjAvbGliL3NsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxYjE1MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zbGlzdC5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX19TTElTVF9ICisjZGVmaW5lIF9fU0xJU1RfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDdXJsX3NsaXN0X2R1cGxpY2F0ZSgpIGR1cGxpY2F0ZXMgYSBsaW5rZWQgbGlzdC4gSXQgYWx3YXlzIHJldHVybnMgdGhlCisgKiBhZGRyZXNzIG9mIHRoZSBmaXJzdCByZWNvcmQgb2YgdGhlIGNsb25lZCBsaXN0IG9yIE5VTEwgaW4gY2FzZSBvZiBhbgorICogZXJyb3IgKG9yIGlmIHRoZSBpbnB1dCBsaXN0IHdhcyBOVUxMKS4KKyAqLworc3RydWN0IGN1cmxfc2xpc3QgKkN1cmxfc2xpc3RfZHVwbGljYXRlKHN0cnVjdCBjdXJsX3NsaXN0ICppbmxpc3QpOworCisjZW5kaWYgLyogX19TTElTVF9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc210cC5jIGIvY3VybC03LjI1LjAvbGliL3NtdHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2VkYjQyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3NtdHAuYwpAQCAtMCwwICsxLDE3MzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBSRkMyODIxIFNNVFAgcHJvdG9jb2wKKyAqIFJGQzMyMDcgU01UUCBvdmVyIFRMUworICogUkZDNDk1NCBTTVRQIEF1dGhlbnRpY2F0aW9uCisgKiBSRkMyMTk1IENSQU0tTUQ1IGF1dGhlbnRpY2F0aW9uCisgKiBSRkM0NjE2IFBMQUlOIGF1dGhlbnRpY2F0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1NNVFAKKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVVRTTkFNRV9ICisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBfX1ZNUworI2luY2x1ZGUgPGluLmg+CisjaW5jbHVkZSA8aW5ldC5oPgorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChORVRXQVJFKSAmJiBkZWZpbmVkKF9fTk9WRUxMX0xJQkNfXykpCisjdW5kZWYgaW5fYWRkcl90CisjZGVmaW5lIGluX2FkZHJfdCB1bnNpZ25lZCBsb25nCisjZW5kaWYKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImlmMmlwLmgiCisjaW5jbHVkZSAiaG9zdGlwLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgImVzY2FwZS5oIgorI2luY2x1ZGUgImh0dHAuaCIgLyogZm9yIEhUVFAgcHJveHkgdHVubmVsIHN0dWZmICovCisjaW5jbHVkZSAic29ja3MuaCIKKyNpbmNsdWRlICJzbXRwLmgiCisKKyNpbmNsdWRlICJzdHJ0b29mZnQuaCIKKyNpbmNsdWRlICJzdHJlcXVhbC5oIgorI2luY2x1ZGUgInNzbGdlbi5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzdHJ0b29mZnQuaCIKKyNpbmNsdWRlICJjdXJsX2Jhc2U2NC5oIgorI2luY2x1ZGUgImN1cmxfbWQ1LmgiCisjaW5jbHVkZSAiY3VybF9obWFjLmgiCisjaW5jbHVkZSAiY3VybF9nZXRob3N0bmFtZS5oIgorI2luY2x1ZGUgImN1cmxfbnRsbV9tc2dzLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKiBMb2NhbCBBUEkgZnVuY3Rpb25zICovCitzdGF0aWMgQ1VSTGNvZGUgc210cF9yZWd1bGFyX3RyYW5zZmVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgc210cF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIHNtdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitzdGF0aWMgQ1VSTGNvZGUgc210cF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgc210cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkKTsKK3N0YXRpYyBDVVJMY29kZSBzbXRwX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIGludCBzbXRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworc3RhdGljIENVUkxjb2RlIHNtdHBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKK3N0YXRpYyBDVVJMY29kZSBzbXRwX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3N0YXRpYyBDVVJMY29kZSBzbXRwX3N0YXRlX3VwZ3JhZGVfdGxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CisKKy8qCisgKiBTTVRQIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc210cCA9IHsKKyAgIlNNVFAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBzbXRwX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBzbXRwX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgc210cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgc210cF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgc210cF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgc210cF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIHNtdHBfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIHNtdHBfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHNtdHBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9TTVRQLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1NNVFAsICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfQ0xPU0VBQ1RJT04gfCBQUk9UT1BUX05PVVJMUVVFUlkgLyogZmxhZ3MgKi8KK307CisKKyNpZmRlZiBVU0VfU1NMCisvKgorICogU01UUFMgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zbXRwcyA9IHsKKyAgIlNNVFBTIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBzbXRwX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBzbXRwX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgc210cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgc210cF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgc210cF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgc210cF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIHNtdHBfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIHNtdHBfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIHNtdHBfZGlzY29ubmVjdCwgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9TTVRQUywgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1NNVFAgfCBDVVJMUFJPVE9fU01UUFMsIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfQ0xPU0VBQ1RJT04gfCBQUk9UT1BUX1NTTAorICB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisjZW5kaWYKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorLyoKKyAqIEhUVFAtcHJveHllZCBTTVRQIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NtdHBfcHJveHkgPSB7CisgICJTTVRQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBDdXJsX2h0dHAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIEN1cmxfaHR0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9TTVRQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19IVFRQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKworI2lmZGVmIFVTRV9TU0wKKy8qCisgKiBIVFRQLXByb3h5ZWQgU01UUFMgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc210cHNfcHJveHkgPSB7CisgICJTTVRQUyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBDdXJsX2h0dHAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIEN1cmxfaHR0cF9kb25lLCAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9TTVRQUywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19IVFRQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKyNlbmRpZgorI2VuZGlmCisKKy8qIEZ1bmN0aW9uIHRoYXQgY2hlY2tzIGZvciBhbiBlbmRpbmcgc210cCBzdGF0dXMgY29kZSBhdCB0aGUgc3RhcnQgb2YgdGhlCisgICBnaXZlbiBzdHJpbmcuCisgICBBcyBhIHNpZGUgZWZmZWN0LCBpdCBhbHNvIGZsYWdzIGFsbG93ZWQgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBhY2NvcmRpbmcKKyAgIHRvIEVITE8gQVVUSCByZXNwb25zZS4gKi8KK3N0YXRpYyBpbnQgc210cF9lbmRvZnJlc3Aoc3RydWN0IHBpbmdwb25nICpwcCwgaW50ICpyZXNwKQoreworICBjaGFyICpsaW5lID0gcHAtPmxpbmVzdGFydF9yZXNwOworICBzaXplX3QgbGVuID0gcHAtPm5yZWFkX3Jlc3A7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiA9IHBwLT5jb25uOworICBzdHJ1Y3Qgc210cF9jb25uICpzbXRwYyA9ICZjb25uLT5wcm90by5zbXRwYzsKKyAgaW50IHJlc3VsdDsKKyAgc2l6ZV90IHdvcmRsZW47CisKKyAgaWYobGVuIDwgNCB8fCAhSVNESUdJVChsaW5lWzBdKSB8fCAhSVNESUdJVChsaW5lWzFdKSB8fCAhSVNESUdJVChsaW5lWzJdKSkKKyAgICByZXR1cm4gRkFMU0U7ICAgICAgIC8qIE5vdGhpbmcgZm9yIHVzLiAqLworCisgIGlmKChyZXN1bHQgPSAobGluZVszXSA9PSAnICcpKSAhPSAwKQorICAgICpyZXNwID0gY3VybHhfc2x0b3NpKHN0cnRvbChsaW5lLCBOVUxMLCAxMCkpOworCisgIGxpbmUgKz0gNDsKKyAgbGVuIC09IDQ7CisKKyAgaWYoc210cGMtPnN0YXRlID09IFNNVFBfRUhMTyAmJiBsZW4gPj0gNSAmJiAhbWVtY21wKGxpbmUsICJBVVRIICIsIDUpKSB7CisgICAgbGluZSArPSA1OworICAgIGxlbiAtPSA1OworCisgICAgZm9yKDs7KSB7CisgICAgICB3aGlsZShsZW4gJiYKKyAgICAgICAgICAgICgqbGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JyB8fAorICAgICAgICAgICAgICpsaW5lID09ICdccicgfHwgKmxpbmUgPT0gJ1xuJykpIHsKKyAgICAgICAgbGluZSsrOworICAgICAgICBsZW4tLTsKKyAgICAgIH0KKworICAgICAgaWYoIWxlbikKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGZvcih3b3JkbGVuID0gMDsgd29yZGxlbiA8IGxlbiAmJiBsaW5lW3dvcmRsZW5dICE9ICcgJyAmJgorICAgICAgICAgICAgbGluZVt3b3JkbGVuXSAhPSAnXHQnICYmIGxpbmVbd29yZGxlbl0gIT0gJ1xyJyAmJgorICAgICAgICAgICAgbGluZVt3b3JkbGVuXSAhPSAnXG4nOykKKyAgICAgICAgd29yZGxlbisrOworCisgICAgICBpZih3b3JkbGVuID09IDUgJiYgIW1lbWNtcChsaW5lLCAiTE9HSU4iLCA1KSkKKyAgICAgICAgc210cGMtPmF1dGhtZWNocyB8PSBTTVRQX0FVVEhfTE9HSU47CisgICAgICBlbHNlIGlmKHdvcmRsZW4gPT0gNSAmJiAhbWVtY21wKGxpbmUsICJQTEFJTiIsIDUpKQorICAgICAgICBzbXRwYy0+YXV0aG1lY2hzIHw9IFNNVFBfQVVUSF9QTEFJTjsKKyAgICAgIGVsc2UgaWYod29yZGxlbiA9PSA4ICYmICFtZW1jbXAobGluZSwgIkNSQU0tTUQ1IiwgOCkpCisgICAgICAgIHNtdHBjLT5hdXRobWVjaHMgfD0gU01UUF9BVVRIX0NSQU1fTUQ1OworICAgICAgZWxzZSBpZih3b3JkbGVuID09IDEwICYmICFtZW1jbXAobGluZSwgIkRJR0VTVC1NRDUiLCAxMCkpCisgICAgICAgIHNtdHBjLT5hdXRobWVjaHMgfD0gU01UUF9BVVRIX0RJR0VTVF9NRDU7CisgICAgICBlbHNlIGlmKHdvcmRsZW4gPT0gNiAmJiAhbWVtY21wKGxpbmUsICJHU1NBUEkiLCA2KSkKKyAgICAgICAgc210cGMtPmF1dGhtZWNocyB8PSBTTVRQX0FVVEhfR1NTQVBJOworICAgICAgZWxzZSBpZih3b3JkbGVuID09IDggJiYgIW1lbWNtcChsaW5lLCAiRVhURVJOQUwiLCA4KSkKKyAgICAgICAgc210cGMtPmF1dGhtZWNocyB8PSBTTVRQX0FVVEhfRVhURVJOQUw7CisgICAgICBlbHNlIGlmKHdvcmRsZW4gPT0gNCAmJiAhbWVtY21wKGxpbmUsICJOVExNIiwgNCkpCisgICAgICAgIHNtdHBjLT5hdXRobWVjaHMgfD0gU01UUF9BVVRIX05UTE07CisKKyAgICAgIGxpbmUgKz0gd29yZGxlbjsKKyAgICAgIGxlbiAtPSB3b3JkbGVuOworICAgIH0KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIFRoaXMgaXMgdGhlIE9OTFkgd2F5IHRvIGNoYW5nZSBTTVRQIHN0YXRlISAqLworc3RhdGljIHZvaWQgc3RhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgc210cHN0YXRlIG5ld3N0YXRlKQoreworICBzdHJ1Y3Qgc210cF9jb25uICpzbXRwYyA9ICZjb25uLT5wcm90by5zbXRwYzsKKyNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCisgIC8qIGZvciBkZWJ1ZyBwdXJwb3NlcyAqLworICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzW10gPSB7CisgICAgIlNUT1AiLAorICAgICJTRVJWRVJHUkVFVCIsCisgICAgIkVITE8iLAorICAgICJIRUxPIiwKKyAgICAiU1RBUlRUTFMiLAorICAgICJVUEdSQURFVExTIiwKKyAgICAiQVVUSFBMQUlOIiwKKyAgICAiQVVUSExPR0lOIiwKKyAgICAiQVVUSFBBU1NXRCIsCisgICAgIkFVVEhDUkFNIiwKKyAgICAiQVVUSE5UTE0iLAorICAgICJBVVRITlRMTV9UWVBFMk1TRyIsCisgICAgIkFVVEgiLAorICAgICJNQUlMIiwKKyAgICAiUkNQVCIsCisgICAgIkRBVEEiLAorICAgICJQT1NUREFUQSIsCisgICAgIlFVSVQiLAorICAgIC8qIExBU1QgKi8KKyAgfTsKKyAgaWYoc210cGMtPnN0YXRlICE9IG5ld3N0YXRlKQorICAgIGluZm9mKGNvbm4tPmRhdGEsICJTTVRQICVwIHN0YXRlIGNoYW5nZSBmcm9tICVzIHRvICVzXG4iLAorICAgICAgICAgIHNtdHBjLCBuYW1lc1tzbXRwYy0+c3RhdGVdLCBuYW1lc1tuZXdzdGF0ZV0pOworI2VuZGlmCisgIHNtdHBjLT5zdGF0ZSA9IG5ld3N0YXRlOworfQorCitzdGF0aWMgQ1VSTGNvZGUgc210cF9zdGF0ZV9laGxvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3Qgc210cF9jb25uICpzbXRwYyA9ICZjb25uLT5wcm90by5zbXRwYzsKKworICBzbXRwYy0+YXV0aG1lY2hzID0gMDsgICAgICAgICAvKiBObyBrbm93biBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIHlldC4gKi8KKyAgc210cGMtPmF1dGh1c2VkID0gMDsgICAgICAgICAgLyogQ2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlc210cCBjb25uZWN0aW9ucyAqLworCisgIC8qIHNlbmQgRUhMTyAqLworICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZzbXRwYy0+cHAsICJFSExPICVzIiwgc210cGMtPmRvbWFpbik7CisKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgc3RhdGUoY29ubiwgU01UUF9FSExPKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBzbXRwX3N0YXRlX2hlbG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBzbXRwX2Nvbm4gKnNtdHBjID0gJmNvbm4tPnByb3RvLnNtdHBjOworCisgIHNtdHBjLT5hdXRodXNlZCA9IDA7ICAgICAgICAgIC8qIE5vIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSB1c2VkIGluIHNtdHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbnMgKi8KKworICAvKiBzZW5kIEhFTE8gKi8KKyAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmc210cGMtPnBwLCAiSEVMTyAlcyIsIHNtdHBjLT5kb21haW4pOworCisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIHN0YXRlKGNvbm4sIFNNVFBfSEVMTyk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgc210cF9hdXRoX3BsYWluX2RhdGEoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvdXRwdHIsIHNpemVfdCAqb3V0bGVuKQoreworICBjaGFyIHBsYWluYXV0aFsyICogTUFYX0NVUkxfVVNFUl9MRU5HVEggKyBNQVhfQ1VSTF9QQVNTV09SRF9MRU5HVEhdOworICBzaXplX3QgdWxlbjsKKyAgc2l6ZV90IHBsZW47CisKKyAgdWxlbiA9IHN0cmxlbihjb25uLT51c2VyKTsKKyAgcGxlbiA9IHN0cmxlbihjb25uLT5wYXNzd2QpOworCisgIGlmKDIgKiB1bGVuICsgcGxlbiArIDIgPiBzaXplb2YgcGxhaW5hdXRoKSB7CisgICAgKm91dGxlbiA9IDA7CisgICAgKm91dHB0ciA9IE5VTEw7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7IC8qIHBsYWluYXV0aCB0b28gc21hbGwgKi8KKyAgfQorCisgIG1lbWNweShwbGFpbmF1dGgsIGNvbm4tPnVzZXIsIHVsZW4pOworICBwbGFpbmF1dGhbdWxlbl0gPSAnXDAnOworICBtZW1jcHkocGxhaW5hdXRoICsgdWxlbiArIDEsIGNvbm4tPnVzZXIsIHVsZW4pOworICBwbGFpbmF1dGhbMiAqIHVsZW4gKyAxXSA9ICdcMCc7CisgIG1lbWNweShwbGFpbmF1dGggKyAyICogdWxlbiArIDIsIGNvbm4tPnBhc3N3ZCwgcGxlbik7CisgIHJldHVybiBDdXJsX2Jhc2U2NF9lbmNvZGUoY29ubi0+ZGF0YSwgcGxhaW5hdXRoLCAyICogdWxlbiArIHBsZW4gKyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB0ciwgb3V0bGVuKTsKK30KKworc3RhdGljIENVUkxjb2RlIHNtdHBfYXV0aF9sb2dpbl91c2VyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0cHRyLCBzaXplX3QgKm91dGxlbikKK3sKKyAgc2l6ZV90IHVsZW4gPSBzdHJsZW4oY29ubi0+dXNlcik7CisKKyAgaWYoIXVsZW4pIHsKKyAgICAqb3V0cHRyID0gc3RyZHVwKCI9Iik7CisgICAgaWYoKm91dHB0cikgeworICAgICAgKm91dGxlbiA9IChzaXplX3QpIDE7CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgfQorICAgICpvdXRsZW4gPSAwOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgcmV0dXJuIEN1cmxfYmFzZTY0X2VuY29kZShjb25uLT5kYXRhLCBjb25uLT51c2VyLCB1bGVuLCBvdXRwdHIsIG91dGxlbik7Cit9CisKKyNpZmRlZiBVU0VfTlRMTQorc3RhdGljIENVUkxjb2RlIHNtdHBfYXV0aF9udGxtX3R5cGUxX21lc3NhZ2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKm91dHB0ciwgc2l6ZV90ICpvdXRsZW4pCit7CisgIHJldHVybiBDdXJsX250bG1fY3JlYXRlX3R5cGUxX21lc3NhZ2UoY29ubi0+dXNlciwgY29ubi0+cGFzc3dkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uLT5udGxtLCBvdXRwdHIsIG91dGxlbik7Cit9CisjZW5kaWYKKworc3RhdGljIENVUkxjb2RlIHNtdHBfYXV0aGVudGljYXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBzbXRwX2Nvbm4gKnNtdHBjID0gJmNvbm4tPnByb3RvLnNtdHBjOworICBjaGFyICppbml0cmVzcCA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKm1lY2ggPSBOVUxMOworICBzaXplX3QgbGVuID0gMDsKKyAgc210cHN0YXRlIHN0YXRlMSA9IFNNVFBfU1RPUDsKKyAgc210cHN0YXRlIHN0YXRlMiA9IFNNVFBfU1RPUDsKKworICAvKiBDaGVjayB3ZSBoYXZlIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIGFuZCBlbmQgdGhlCisgICAgIGNvbm5lY3QgcGhhc2UgaWYgd2UgZG9uJ3QuICovCisgIGlmKCFjb25uLT5iaXRzLnVzZXJfcGFzc3dkKSB7CisgICAgc3RhdGUoY29ubiwgU01UUF9TVE9QKTsKKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICAvKiBDaGVjayBzdXBwb3J0ZWQgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBieSBkZWNyZWFzaW5nIG9yZGVyIG9mCisgICAgIHNlY3VyaXR5LiAqLworI2lmbmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgKKyAgaWYoc210cGMtPmF1dGhtZWNocyAmIFNNVFBfQVVUSF9DUkFNX01ENSkgeworICAgIG1lY2ggPSAiQ1JBTS1NRDUiOworICAgIHN0YXRlMSA9IFNNVFBfQVVUSENSQU1NRDU7CisgICAgc210cGMtPmF1dGh1c2VkID0gU01UUF9BVVRIX0NSQU1fTUQ1OworICB9CisgIGVsc2UKKyNlbmRpZgorI2lmZGVmIFVTRV9OVExNCisgIGlmKHNtdHBjLT5hdXRobWVjaHMgJiBTTVRQX0FVVEhfTlRMTSkgeworICAgIG1lY2ggPSAiTlRMTSI7CisgICAgc3RhdGUxID0gU01UUF9BVVRITlRMTTsKKyAgICBzdGF0ZTIgPSBTTVRQX0FVVEhOVExNX1RZUEUyTVNHOworICAgIHNtdHBjLT5hdXRodXNlZCA9IFNNVFBfQVVUSF9OVExNOworICAgIHJlc3VsdCA9IHNtdHBfYXV0aF9udGxtX3R5cGUxX21lc3NhZ2UoY29ubiwgJmluaXRyZXNwLCAmbGVuKTsKKyAgfQorICBlbHNlCisjZW5kaWYKKyAgaWYoc210cGMtPmF1dGhtZWNocyAmIFNNVFBfQVVUSF9MT0dJTikgeworICAgIG1lY2ggPSAiTE9HSU4iOworICAgIHN0YXRlMSA9IFNNVFBfQVVUSExPR0lOOworICAgIHN0YXRlMiA9IFNNVFBfQVVUSFBBU1NXRDsKKyAgICBzbXRwYy0+YXV0aHVzZWQgPSBTTVRQX0FVVEhfTE9HSU47CisgICAgcmVzdWx0ID0gc210cF9hdXRoX2xvZ2luX3VzZXIoY29ubiwgJmluaXRyZXNwLCAmbGVuKTsKKyAgfQorICBlbHNlIGlmKHNtdHBjLT5hdXRobWVjaHMgJiBTTVRQX0FVVEhfUExBSU4pIHsKKyAgICBtZWNoID0gIlBMQUlOIjsKKyAgICBzdGF0ZTEgPSBTTVRQX0FVVEhQTEFJTjsKKyAgICBzdGF0ZTIgPSBTTVRQX0FVVEg7CisgICAgc210cGMtPmF1dGh1c2VkID0gU01UUF9BVVRIX1BMQUlOOworICAgIHJlc3VsdCA9IHNtdHBfYXV0aF9wbGFpbl9kYXRhKGNvbm4sICZpbml0cmVzcCwgJmxlbik7CisgIH0KKyAgZWxzZSB7CisgICAgaW5mb2YoY29ubi0+ZGF0YSwgIk5vIGtub3duIGF1dGggbWVjaGFuaXNtcyBzdXBwb3J0ZWQhXG4iKTsKKyAgICByZXN1bHQgPSBDVVJMRV9MT0dJTl9ERU5JRUQ7ICAgICAgLyogT3RoZXIgbWVjaGFuaXNtcyBub3Qgc3VwcG9ydGVkLiAqLworICB9CisKKyAgaWYoIXJlc3VsdCkgeworICAgIGlmKGluaXRyZXNwICYmCisgICAgICAgc3RybGVuKG1lY2gpICsgbGVuIDw9IDUxMiAtIDgpIHsgLyogQVVUSCA8bWVjaD4gLi4uPGNybGY+ICovCisgICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmc210cGMtPnBwLCAiQVVUSCAlcyAlcyIsIG1lY2gsIGluaXRyZXNwKTsKKworICAgICAgaWYoIXJlc3VsdCkKKyAgICAgICAgc3RhdGUoY29ubiwgc3RhdGUyKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZzbXRwYy0+cHAsICJBVVRIICVzIiwgbWVjaCk7CisKKyAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgIHN0YXRlKGNvbm4sIHN0YXRlMSk7CisgICAgfQorICAgIEN1cmxfc2FmZWZyZWUoaW5pdHJlc3ApOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogRm9yIHRoZSBTTVRQICJwcm90b2NvbCBjb25uZWN0IiBhbmQgImRvaW5nIiBwaGFzZXMgb25seSAqLworc3RhdGljIGludCBzbXRwX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCit7CisgIHJldHVybiBDdXJsX3BwX2dldHNvY2soJmNvbm4tPnByb3RvLnNtdHBjLnBwLCBzb2NrcywgbnVtc29ja3MpOworfQorCisjaWZkZWYgVVNFX1NTTAorc3RhdGljIHZvaWQgc210cF90b19zbXRwcyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGNvbm4tPmhhbmRsZXIgPSAmQ3VybF9oYW5kbGVyX3NtdHBzOworfQorI2Vsc2UKKyNkZWZpbmUgc210cF90b19zbXRwcyh4KSBDdXJsX25vcF9zdG10CisjZW5kaWYKKworLyogZm9yIFNUQVJUVExTIHJlc3BvbnNlcyAqLworc3RhdGljIENVUkxjb2RlIHNtdHBfc3RhdGVfc3RhcnR0bHNfcmVzcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzbXRwY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cHN0YXRlIGluc3RhdGUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KKworICBpZihzbXRwY29kZSAhPSAyMjApIHsKKyAgICBpZihkYXRhLT5zZXQudXNlX3NzbCAhPSBDVVJMVVNFU1NMX1RSWSkgeworICAgICAgZmFpbGYoZGF0YSwgIlNUQVJUVExTIGRlbmllZC4gJWMiLCBzbXRwY29kZSk7CisgICAgICByZXN1bHQgPSBDVVJMRV9VU0VfU1NMX0ZBSUxFRDsKKyAgICB9CisgICAgZWxzZQorICAgICAgcmVzdWx0ID0gc210cF9hdXRoZW50aWNhdGUoY29ubik7CisgIH0KKyAgZWxzZSB7CisgICAgaWYoZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgPT0gQ3VybF9pZl9tdWx0aSkgeworICAgICAgc3RhdGUoY29ubiwgU01UUF9VUEdSQURFVExTKTsKKyAgICAgIHJldHVybiBzbXRwX3N0YXRlX3VwZ3JhZGVfdGxzKGNvbm4pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfc3NsX2Nvbm5lY3QoY29ubiwgRklSU1RTT0NLRVQpOworICAgICAgaWYoQ1VSTEVfT0sgPT0gcmVzdWx0KSB7CisgICAgICAgIHNtdHBfdG9fc210cHMoY29ubik7CisgICAgICAgIHJlc3VsdCA9IHNtdHBfc3RhdGVfZWhsbyhjb25uKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgc210cF9zdGF0ZV91cGdyYWRlX3RscyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBzbXRwX2Nvbm4gKnNtdHBjID0gJmNvbm4tPnByb3RvLnNtdHBjOworICBDVVJMY29kZSByZXN1bHQ7CisKKyAgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdF9ub25ibG9ja2luZyhjb25uLCBGSVJTVFNPQ0tFVCwgJnNtdHBjLT5zc2xkb25lKTsKKworICBpZihzbXRwYy0+c3NsZG9uZSkgeworICAgIHNtdHBfdG9fc210cHMoY29ubik7CisgICAgcmVzdWx0ID0gc210cF9zdGF0ZV9laGxvKGNvbm4pOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogZm9yIEVITE8gcmVzcG9uc2VzICovCitzdGF0aWMgQ1VSTGNvZGUgc210cF9zdGF0ZV9laGxvX3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzbXRwY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICAodm9pZClpbnN0YXRlOyAvKiBubyB1c2UgZm9yIHRoaXMgeWV0ICovCisKKyAgaWYoc210cGNvZGUvMTAwICE9IDIpIHsKKyAgICBpZigoZGF0YS0+c2V0LnVzZV9zc2wgPD0gQ1VSTFVTRVNTTF9UUlkgfHwgY29ubi0+c3NsW0ZJUlNUU09DS0VUXS51c2UpICYmCisgICAgICFjb25uLT5iaXRzLnVzZXJfcGFzc3dkKQorICAgICAgcmVzdWx0ID0gc210cF9zdGF0ZV9oZWxvKGNvbm4pOworICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIlJlbW90ZSBhY2Nlc3MgZGVuaWVkOiAlZCIsIHNtdHBjb2RlKTsKKyAgICAgIHJlc3VsdCA9IENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOworICAgIH0KKyAgfQorICBlbHNlIGlmKGRhdGEtPnNldC51c2Vfc3NsICYmICFjb25uLT5zc2xbRklSU1RTT0NLRVRdLnVzZSkgeworICAgIC8qIFdlIGRvbid0IGhhdmUgYSBTU0wvVExTIGNvbm5lY3Rpb24geWV0LCBidXQgU1NMIGlzIHJlcXVlc3RlZC4gU3dpdGNoCisgICAgICAgdG8gVExTIGNvbm5lY3Rpb24gbm93ICovCisgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICJTVEFSVFRMUyIpOworICAgIHN0YXRlKGNvbm4sIFNNVFBfU1RBUlRUTFMpOworICB9CisgIGVsc2UKKyAgICByZXN1bHQgPSBzbXRwX2F1dGhlbnRpY2F0ZShjb25uKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBmb3IgSEVMTyByZXNwb25zZXMgKi8KK3N0YXRpYyBDVVJMY29kZSBzbXRwX3N0YXRlX2hlbG9fcmVzcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNtdHBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHBzdGF0ZSBpbnN0YXRlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworCisgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KKworICBpZihzbXRwY29kZS8xMDAgIT0gMikgeworICAgIGZhaWxmKGRhdGEsICJSZW1vdGUgYWNjZXNzIGRlbmllZDogJWQiLCBzbXRwY29kZSk7CisgICAgcmVzdWx0ID0gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQ7CisgIH0KKyAgZWxzZSB7CisgICAgLyogZW5kIHRoZSBjb25uZWN0IHBoYXNlICovCisgICAgc3RhdGUoY29ubiwgU01UUF9TVE9QKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGZvciBBVVRIIFBMQUlOICh3aXRob3V0IGluaXRpYWwgcmVzcG9uc2UpIHJlc3BvbnNlcyAqLworc3RhdGljIENVUkxjb2RlIHNtdHBfc3RhdGVfYXV0aHBsYWluX3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNtdHBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cHN0YXRlIGluc3RhdGUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHNpemVfdCBsZW4gPSAwOworICBjaGFyICpwbGFpbmF1dGggPSBOVUxMOworCisgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KKworICBpZihzbXRwY29kZSAhPSAzMzQpIHsKKyAgICBmYWlsZihkYXRhLCAiQWNjZXNzIGRlbmllZDogJWQiLCBzbXRwY29kZSk7CisgICAgcmVzdWx0ID0gQ1VSTEVfTE9HSU5fREVOSUVEOworICB9CisgIGVsc2UgeworICAgIHJlc3VsdCA9IHNtdHBfYXV0aF9wbGFpbl9kYXRhKGNvbm4sICZwbGFpbmF1dGgsICZsZW4pOworCisgICAgaWYoIXJlc3VsdCkgeworICAgICAgaWYocGxhaW5hdXRoKSB7CisgICAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMiLCBwbGFpbmF1dGgpOworCisgICAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgICAgc3RhdGUoY29ubiwgU01UUF9BVVRIKTsKKyAgICAgIH0KKyAgICAgIEN1cmxfc2FmZWZyZWUocGxhaW5hdXRoKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBmb3IgQVVUSCBMT0dJTiAod2l0aG91dCBpbml0aWFsIHJlc3BvbnNlKSByZXNwb25zZXMgKi8KK3N0YXRpYyBDVVJMY29kZSBzbXRwX3N0YXRlX2F1dGhsb2dpbl9yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzbXRwY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHBzdGF0ZSBpbnN0YXRlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzaXplX3QgbGVuID0gMDsKKyAgY2hhciAqYXV0aHVzZXIgPSBOVUxMOworCisgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KKworICBpZihzbXRwY29kZSAhPSAzMzQpIHsKKyAgICBmYWlsZihkYXRhLCAiQWNjZXNzIGRlbmllZDogJWQiLCBzbXRwY29kZSk7CisgICAgcmVzdWx0ID0gQ1VSTEVfTE9HSU5fREVOSUVEOworICB9CisgIGVsc2UgeworICAgIHJlc3VsdCA9IHNtdHBfYXV0aF9sb2dpbl91c2VyKGNvbm4sICZhdXRodXNlciwgJmxlbik7CisKKyAgICBpZighcmVzdWx0KSB7CisgICAgICBpZihhdXRodXNlcikgeworICAgICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzIiwgYXV0aHVzZXIpOworCisgICAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgICAgc3RhdGUoY29ubiwgU01UUF9BVVRIUEFTU1dEKTsKKyAgICAgIH0KKyAgICAgIEN1cmxfc2FmZWZyZWUoYXV0aHVzZXIpOworICAgIH0KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGZvciByZXNwb25zZXMgdG8gdXNlciBlbnRyeSBvZiBBVVRIIExPR0lOLiAqLworc3RhdGljIENVUkxjb2RlIHNtdHBfc3RhdGVfYXV0aHBhc3N3ZF9yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc210cGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cHN0YXRlIGluc3RhdGUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHNpemVfdCBwbGVuOworICBzaXplX3QgbGVuID0gMDsKKyAgY2hhciAqYXV0aHBhc3N3ZCA9IE5VTEw7CisKKyAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLworCisgIGlmKHNtdHBjb2RlICE9IDMzNCkgeworICAgIGZhaWxmKGRhdGEsICJBY2Nlc3MgZGVuaWVkOiAlZCIsIHNtdHBjb2RlKTsKKyAgICByZXN1bHQgPSBDVVJMRV9MT0dJTl9ERU5JRUQ7CisgIH0KKyAgZWxzZSB7CisgICAgcGxlbiA9IHN0cmxlbihjb25uLT5wYXNzd2QpOworCisgICAgaWYoIXBsZW4pCisgICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIj0iKTsKKyAgICBlbHNlIHsKKyAgICAgIHJlc3VsdCA9IEN1cmxfYmFzZTY0X2VuY29kZShkYXRhLCBjb25uLT5wYXNzd2QsIHBsZW4sICZhdXRocGFzc3dkLCAmbGVuKTsKKworICAgICAgaWYoIXJlc3VsdCkgeworICAgICAgICBpZihhdXRocGFzc3dkKSB7CisgICAgICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICIlcyIsIGF1dGhwYXNzd2QpOworCisgICAgICAgICAgaWYoIXJlc3VsdCkKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNNVFBfQVVUSCk7CisgICAgICAgIH0KKyAgICAgICAgQ3VybF9zYWZlZnJlZShhdXRocGFzc3dkKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisjaWZuZGVmIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSAorCisvKiBmb3IgQVVUSCBDUkFNLU1ENSByZXNwb25zZXMuICovCitzdGF0aWMgQ1VSTGNvZGUgc210cF9zdGF0ZV9hdXRoY3JhbV9yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNtdHBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgY2hhciAqY2hsZzY0ID0gZGF0YS0+c3RhdGUuYnVmZmVyOworICB1bnNpZ25lZCBjaGFyICpjaGxnOworICBzaXplX3QgY2hsZ2xlbjsKKyAgc2l6ZV90IGxlbiA9IDA7CisgIGNoYXIgKnJwbHliNjQgPSBOVUxMOworICBITUFDX2NvbnRleHQgKmN0eHQ7CisgIHVuc2lnbmVkIGNoYXIgZGlnZXN0WzE2XTsKKyAgY2hhciByZXBseVtNQVhfQ1VSTF9VU0VSX0xFTkdUSCArIDMyIC8qIDIgKiBzaXplIG9mIE1ENSBkaWdlc3QgKi8gKyAxXTsKKworICAodm9pZClpbnN0YXRlOyAvKiBubyB1c2UgZm9yIHRoaXMgeWV0ICovCisKKyAgaWYoc210cGNvZGUgIT0gMzM0KSB7CisgICAgZmFpbGYoZGF0YSwgIkFjY2VzcyBkZW5pZWQ6ICVkIiwgc210cGNvZGUpOworICAgIHJldHVybiBDVVJMRV9MT0dJTl9ERU5JRUQ7CisgIH0KKworICAvKiBHZXQgdGhlIGNoYWxsZW5nZS4gKi8KKyAgZm9yKGNobGc2NCArPSA0OyAqY2hsZzY0ID09ICcgJyB8fCAqY2hsZzY0ID09ICdcdCc7IGNobGc2NCsrKQorICAgIDsKKworICBjaGxnID0gKHVuc2lnbmVkIGNoYXIgKikgTlVMTDsKKyAgY2hsZ2xlbiA9IDA7CisKKyAgaWYoKmNobGc2NCAhPSAnPScpIHsKKyAgICBmb3IobGVuID0gc3RybGVuKGNobGc2NCk7IGxlbi0tOykKKyAgICAgIGlmKGNobGc2NFtsZW5dICE9ICdccicgJiYgY2hsZzY0W2xlbl0gIT0gJ1xuJyAmJiBjaGxnNjRbbGVuXSAhPSAnICcgJiYKKyAgICAgICAgIGNobGc2NFtsZW5dICE9ICdcdCcpCisgICAgICAgIGJyZWFrOworCisgICAgaWYoKytsZW4pIHsKKyAgICAgIGNobGc2NFtsZW5dID0gJ1wwJzsKKworICAgICAgcmVzdWx0ID0gQ3VybF9iYXNlNjRfZGVjb2RlKGNobGc2NCwgJmNobGcsICZjaGxnbGVuKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgIH0KKworICAvKiBDb21wdXRlIGRpZ2VzdC4gKi8KKyAgY3R4dCA9IEN1cmxfSE1BQ19pbml0KEN1cmxfSE1BQ19NRDUsCisgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBjb25uLT5wYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKGNvbm4tPnBhc3N3ZCkpKTsKKworICBpZighY3R4dCkgeworICAgIEN1cmxfc2FmZWZyZWUoY2hsZyk7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICBpZihjaGxnbGVuID4gMCkKKyAgICBDdXJsX0hNQUNfdXBkYXRlKGN0eHQsIGNobGcsIGN1cmx4X3V6dG91aShjaGxnbGVuKSk7CisKKyAgQ3VybF9zYWZlZnJlZShjaGxnKTsKKworICBDdXJsX0hNQUNfZmluYWwoY3R4dCwgZGlnZXN0KTsKKworICAvKiBQcmVwYXJlIHRoZSByZXBseS4gKi8KKyAgc25wcmludGYocmVwbHksIHNpemVvZiByZXBseSwKKyAgICIlcyAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwKKyAgICAgICAgICAgY29ubi0+dXNlciwgZGlnZXN0WzBdLCBkaWdlc3RbMV0sIGRpZ2VzdFsyXSwgZGlnZXN0WzNdLCBkaWdlc3RbNF0sCisgICAgICAgICAgIGRpZ2VzdFs1XSwKKyAgICAgICAgICAgZGlnZXN0WzZdLCBkaWdlc3RbN10sIGRpZ2VzdFs4XSwgZGlnZXN0WzldLCBkaWdlc3RbMTBdLCBkaWdlc3RbMTFdLAorICAgICAgICAgICBkaWdlc3RbMTJdLCBkaWdlc3RbMTNdLCBkaWdlc3RbMTRdLCBkaWdlc3RbMTVdKTsKKworICAvKiBFbmNvZGUgaXQgdG8gYmFzZTY0IGFuZCBzZW5kIGl0LiAqLworICByZXN1bHQgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoZGF0YSwgcmVwbHksIDAsICZycGx5YjY0LCAmbGVuKTsKKworICBpZighcmVzdWx0KSB7CisgICAgaWYocnBseWI2NCkgeworICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICIlcyIsIHJwbHliNjQpOworCisgICAgICBpZighcmVzdWx0KQorICAgICAgICBzdGF0ZShjb25uLCBTTVRQX0FVVEgpOworICAgIH0KKyAgICBDdXJsX3NhZmVmcmVlKHJwbHliNjQpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2VuZGlmCisKKyNpZmRlZiBVU0VfTlRMTQorLyogZm9yIHRoZSBBVVRIIE5UTE0gKHdpdGhvdXQgaW5pdGlhbCByZXNwb25zZSkgcmVzcG9uc2UuICovCitzdGF0aWMgQ1VSTGNvZGUgc210cF9zdGF0ZV9hdXRoX250bG1fcmVzcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc210cGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgY2hhciAqdHlwZTFtc2cgPSBOVUxMOworICBzaXplX3QgbGVuID0gMDsKKworICAodm9pZClpbnN0YXRlOyAvKiBubyB1c2UgZm9yIHRoaXMgeWV0ICovCisKKyAgaWYoc210cGNvZGUgIT0gMzM0KSB7CisgICAgZmFpbGYoZGF0YSwgIkFjY2VzcyBkZW5pZWQ6ICVkIiwgc210cGNvZGUpOworICAgIHJlc3VsdCA9IENVUkxFX0xPR0lOX0RFTklFRDsKKyAgfQorICBlbHNlIHsKKyAgICByZXN1bHQgPSBzbXRwX2F1dGhfbnRsbV90eXBlMV9tZXNzYWdlKGNvbm4sICZ0eXBlMW1zZywgJmxlbik7CisKKyAgICBpZighcmVzdWx0KSB7CisgICAgICBpZih0eXBlMW1zZykgeworICAgICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIiVzIiwgdHlwZTFtc2cpOworCisgICAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgICAgc3RhdGUoY29ubiwgU01UUF9BVVRITlRMTV9UWVBFMk1TRyk7CisgICAgICB9CisgICAgICBDdXJsX3NhZmVmcmVlKHR5cGUxbXNnKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBmb3IgdGhlIE5UTE0gdHlwZS0yIHJlc3BvbnNlIChzZW50IGluIHJlcG9uc2UgdG8gb3VyIHR5cGUtMSBtZXNzYWdlKS4gKi8KK3N0YXRpYyBDVVJMY29kZSBzbXRwX3N0YXRlX2F1dGhfbnRsbV90eXBlMm1zZ19yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzbXRwY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHBzdGF0ZSBpbnN0YXRlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBjaGFyICp0eXBlM21zZyA9IE5VTEw7CisgIHNpemVfdCBsZW4gPSAwOworCisgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KKworICBpZihzbXRwY29kZSAhPSAzMzQpIHsKKyAgICBmYWlsZihkYXRhLCAiQWNjZXNzIGRlbmllZDogJWQiLCBzbXRwY29kZSk7CisgICAgcmVzdWx0ID0gQ1VSTEVfTE9HSU5fREVOSUVEOworICB9CisgIGVsc2UgeworICAgIHJlc3VsdCA9IEN1cmxfbnRsbV9kZWNvZGVfdHlwZTJfbWVzc2FnZShkYXRhLCBkYXRhLT5zdGF0ZS5idWZmZXIgKyA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+bnRsbSk7CisgICAgaWYoIXJlc3VsdCkgeworICAgICAgcmVzdWx0ID0gQ3VybF9udGxtX2NyZWF0ZV90eXBlM19tZXNzYWdlKGNvbm4tPmRhdGEsIGNvbm4tPnVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cGFzc3dkLCAmY29ubi0+bnRsbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHlwZTNtc2csICZsZW4pOworICAgICAgaWYoIXJlc3VsdCkgeworICAgICAgICBpZih0eXBlM21zZykgeworICAgICAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiJXMiLCB0eXBlM21zZyk7CisKKyAgICAgICAgICBpZighcmVzdWx0KQorICAgICAgICAgICAgc3RhdGUoY29ubiwgU01UUF9BVVRIKTsKKyAgICAgICAgfQorICAgICAgICBDdXJsX3NhZmVmcmVlKHR5cGUzbXNnKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKy8qIGZvciBmaW5hbCByZXNwb25zZXMgdG8gQVVUSCBzZXF1ZW5jZXMuICovCitzdGF0aWMgQ1VSTGNvZGUgc210cF9zdGF0ZV9hdXRoX3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzbXRwY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICAodm9pZClpbnN0YXRlOyAvKiBubyB1c2UgZm9yIHRoaXMgeWV0ICovCisKKyAgaWYoc210cGNvZGUgIT0gMjM1KSB7CisgICAgZmFpbGYoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZDogJWQiLCBzbXRwY29kZSk7CisgICAgcmVzdWx0ID0gQ1VSTEVfTE9HSU5fREVOSUVEOworICB9CisgIGVsc2UKKyAgICBzdGF0ZShjb25uLCBTTVRQX1NUT1ApOyAgICAgICAgICAgICAvKiBFbmQgb2YgY29ubmVjdCBwaGFzZS4gKi8KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBzdGFydCB0aGUgRE8gcGhhc2UgKi8KK3N0YXRpYyBDVVJMY29kZSBzbXRwX21haWwoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBjaGFyICpmcm9tID0gTlVMTDsKKyAgY2hhciAqYXV0aCA9IE5VTEw7CisgIGNoYXIgKnNpemUgPSBOVUxMOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIC8qIGNhbGN1bGF0ZSB0aGUgRlJPTSBwYXJhbWV0ZXIgKi8KKyAgaWYoIWRhdGEtPnNldC5zdHJbU1RSSU5HX01BSUxfRlJPTV0pCisgICAgLyogbnVsbCByZXZlcnNlLXBhdGgsIFJGQy0yODIxLCBzZWN0LiAzLjcgKi8KKyAgICBmcm9tID0gc3RyZHVwKCI8PiIpOworICBlbHNlIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX01BSUxfRlJPTV1bMF0gPT0gJzwnKQorICAgIGZyb20gPSBhcHJpbnRmKCIlcyIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX01BSUxfRlJPTV0pOworICBlbHNlCisgICAgZnJvbSA9IGFwcmludGYoIjwlcz4iLCBkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0ZST01dKTsKKworICBpZighZnJvbSkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAvKiBjYWxjdWxhdGUgdGhlIG9wdGlvbmFsIEFVVEggcGFyYW1ldGVyICovCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX01BSUxfQVVUSF0gJiYgY29ubi0+cHJvdG8uc210cGMuYXV0aHVzZWQpIHsKKyAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0FVVEhdWzBdICE9ICdcMCcpCisgICAgICBhdXRoID0gYXByaW50ZigiJXMiLCBkYXRhLT5zZXQuc3RyW1NUUklOR19NQUlMX0FVVEhdKTsKKyAgICBlbHNlCisgICAgICAvKiBlbXB0eSBBVVRILCBSRkMtMjU1NCwgc2VjdC4gNSAqLworICAgICAgYXV0aCA9IHN0cmR1cCgiPD4iKTsKKworICAgIGlmKCFhdXRoKSB7CisgICAgICBDdXJsX3NhZmVmcmVlKGZyb20pOworCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgIH0KKworICAvKiBjYWxjdWxhdGUgdGhlIG9wdGlvbmFsIFNJWkUgcGFyYW1ldGVyICovCisgIGlmKGNvbm4tPmRhdGEtPnNldC5pbmZpbGVzaXplID4gMCkgeworICAgIHNpemUgPSBhcHJpbnRmKCIlIiBGT1JNQVRfT0ZGX1QsIGRhdGEtPnNldC5pbmZpbGVzaXplKTsKKworICAgIGlmKCFzaXplKSB7CisgICAgICBDdXJsX3NhZmVmcmVlKGZyb20pOworICAgICAgQ3VybF9zYWZlZnJlZShhdXRoKTsKKworICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQorICB9CisKKyAgLyogc2VuZCBNQUlMIEZST00gKi8KKyAgaWYoIWF1dGggJiYgIXNpemUpCisgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUFJTCBGUk9NOiVzIiwgZnJvbSk7CisgIGVsc2UgaWYoYXV0aCAmJiAhc2l6ZSkKKyAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJNQUlMIEZST006JXMgQVVUSD0lcyIsIGZyb20sIGF1dGgpOworICBlbHNlIGlmKGF1dGggJiYgc2l6ZSkKKyAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJNQUlMIEZST006JXMgQVVUSD0lcyBTSVpFPSVzIiwgZnJvbSwgYXV0aCwgc2l6ZSk7CisgIGVsc2UKKyAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJNQUlMIEZST006JXMgU0laRT0lcyIsIGZyb20sIHNpemUpOworCisgIEN1cmxfc2FmZWZyZWUoZnJvbSk7CisgIEN1cmxfc2FmZWZyZWUoYXV0aCk7CisgIEN1cmxfc2FmZWZyZWUoc2l6ZSk7CisKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgc3RhdGUoY29ubiwgU01UUF9NQUlMKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgc210cF9yY3B0X3RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBzbXRwX2Nvbm4gKnNtdHBjID0gJmNvbm4tPnByb3RvLnNtdHBjOworCisgIC8qIHNlbmQgUkNQVCBUTyAqLworICBpZihzbXRwYy0+cmNwdCkgeworICAgIGlmKHNtdHBjLT5yY3B0LT5kYXRhWzBdID09ICc8JykKKyAgICAgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiUkNQVCBUTzolcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHBjLT5yY3B0LT5kYXRhKTsKKyAgICBlbHNlCisgICAgICByZXN1bHQgPSBDdXJsX3BwX3NlbmRmKCZjb25uLT5wcm90by5zbXRwYy5wcCwgIlJDUFQgVE86PCVzPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHBjLT5yY3B0LT5kYXRhKTsKKyAgICBpZighcmVzdWx0KQorICAgICAgc3RhdGUoY29ubiwgU01UUF9SQ1BUKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGZvciBNQUlMIHJlc3BvbnNlcyAqLworc3RhdGljIENVUkxjb2RlIHNtdHBfc3RhdGVfbWFpbF9yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc210cGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cHN0YXRlIGluc3RhdGUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgICh2b2lkKWluc3RhdGU7IC8qIG5vIHVzZSBmb3IgdGhpcyB5ZXQgKi8KKworICBpZihzbXRwY29kZS8xMDAgIT0gMikgeworICAgIGZhaWxmKGRhdGEsICJBY2Nlc3MgZGVuaWVkOiAlZCIsIHNtdHBjb2RlKTsKKyAgICByZXN1bHQgPSBDVVJMRV9MT0dJTl9ERU5JRUQ7CisgICAgc3RhdGUoY29ubiwgU01UUF9TVE9QKTsKKyAgfQorICBlbHNlIHsKKyAgICBzdHJ1Y3Qgc210cF9jb25uICpzbXRwYyA9ICZjb25uLT5wcm90by5zbXRwYzsKKyAgICBzbXRwYy0+cmNwdCA9IGRhdGEtPnNldC5tYWlsX3JjcHQ7CisKKyAgICByZXN1bHQgPSBzbXRwX3JjcHRfdG8oY29ubik7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBmb3IgUkNQVCByZXNwb25zZXMgKi8KK3N0YXRpYyBDVVJMY29kZSBzbXRwX3N0YXRlX3JjcHRfcmVzcChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNtdHBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHBzdGF0ZSBpbnN0YXRlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICAodm9pZClpbnN0YXRlOyAvKiBubyB1c2UgZm9yIHRoaXMgeWV0ICovCisKKyAgaWYoc210cGNvZGUvMTAwICE9IDIpIHsKKyAgICBmYWlsZihkYXRhLCAiQWNjZXNzIGRlbmllZDogJWQiLCBzbXRwY29kZSk7CisgICAgcmVzdWx0ID0gQ1VSTEVfTE9HSU5fREVOSUVEOworICAgIHN0YXRlKGNvbm4sIFNNVFBfU1RPUCk7CisgIH0KKyAgZWxzZSB7CisgICAgc3RydWN0IHNtdHBfY29ubiAqc210cGMgPSAmY29ubi0+cHJvdG8uc210cGM7CisKKyAgICBpZihzbXRwYy0+cmNwdCkgeworICAgICAgc210cGMtPnJjcHQgPSBzbXRwYy0+cmNwdC0+bmV4dDsKKyAgICAgIHJlc3VsdCA9IHNtdHBfcmNwdF90byhjb25uKTsKKworICAgICAgLyogaWYgd2UgZmFpbGVkIG9yIHN0aWxsIGlzIGluIFJDUFQgc2VuZGluZywgcmV0dXJuICovCisgICAgICBpZihyZXN1bHQgfHwgc210cGMtPnJjcHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyogc2VuZCBEQVRBICovCisgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmY29ubi0+cHJvdG8uc210cGMucHAsICJEQVRBIik7CisKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgc3RhdGUoY29ubiwgU01UUF9EQVRBKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGZvciB0aGUgREFUQSByZXNwb25zZSAqLworc3RhdGljIENVUkxjb2RlIHNtdHBfc3RhdGVfZGF0YV9yZXNwKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc210cGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cHN0YXRlIGluc3RhdGUpCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IEZUUCAqc210cCA9IGRhdGEtPnN0YXRlLnByb3RvLnNtdHA7CisKKyAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLworCisgIGlmKHNtdHBjb2RlICE9IDM1NCkgeworICAgIHN0YXRlKGNvbm4sIFNNVFBfU1RPUCk7CisgICAgcmV0dXJuIENVUkxFX1JFQ1ZfRVJST1I7CisgIH0KKworICAvKiBTTVRQIHVwbG9hZCAqLworICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC8qIG5vIGRvd25sb2FkICovCisgICAgICAgICAgICAgICAgICAgICAgRklSU1RTT0NLRVQsIHNtdHAtPmJ5dGVjb3VudHApOworCisgIHN0YXRlKGNvbm4sIFNNVFBfU1RPUCk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyogZm9yIHRoZSBQT1NUREFUQSByZXNwb25zZSwgd2hpY2ggaXMgcmVjZWl2ZWQgYWZ0ZXIgdGhlIGVudGlyZSBEQVRBCisgICBwYXJ0IGhhcyBiZWVuIHNlbnQgb2ZmIHRvIHRoZSBzZXJ2ZXIgKi8KK3N0YXRpYyBDVVJMY29kZSBzbXRwX3N0YXRlX3Bvc3RkYXRhX3Jlc3Aoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzbXRwY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwc3RhdGUgaW5zdGF0ZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgKHZvaWQpaW5zdGF0ZTsgLyogbm8gdXNlIGZvciB0aGlzIHlldCAqLworCisgIGlmKHNtdHBjb2RlICE9IDI1MCkKKyAgICByZXN1bHQgPSBDVVJMRV9SRUNWX0VSUk9SOworCisgIHN0YXRlKGNvbm4sIFNNVFBfU1RPUCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIHNtdHBfc3RhdGVtYWNoX2FjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgaW50IHNtdHBjb2RlOworICBzdHJ1Y3Qgc210cF9jb25uICpzbXRwYyA9ICZjb25uLT5wcm90by5zbXRwYzsKKyAgc3RydWN0IHBpbmdwb25nICpwcCA9ICZzbXRwYy0+cHA7CisgIHNpemVfdCBucmVhZCA9IDA7CisKKyAgaWYoc210cGMtPnN0YXRlID09IFNNVFBfVVBHUkFERVRMUykKKyAgICByZXR1cm4gc210cF9zdGF0ZV91cGdyYWRlX3Rscyhjb25uKTsKKworICBpZihwcC0+c2VuZGxlZnQpCisgICAgLyogd2UgaGF2ZSBhIHBpZWNlIG9mIGEgY29tbWFuZCBzdGlsbCBsZWZ0IHRvIHNlbmQgKi8KKyAgICByZXR1cm4gQ3VybF9wcF9mbHVzaHNlbmQocHApOworCisgIC8qIHdlIHJlYWQgYSBwaWVjZSBvZiByZXNwb25zZSAqLworICByZXN1bHQgPSBDdXJsX3BwX3JlYWRyZXNwKHNvY2ssIHBwLCAmc210cGNvZGUsICZucmVhZCk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OworCisgIGlmKHNtdHBjLT5zdGF0ZSAhPSBTTVRQX1FVSVQpCisgICAgLyogc3RvcmUgdGhlIGxhdGVzdCBjb2RlIGZvciBsYXRlciByZXRyaWV2YWwgKi8KKyAgICBkYXRhLT5pbmZvLmh0dHBjb2RlID0gc210cGNvZGU7CisKKyAgaWYoc210cGNvZGUpIHsKKyAgICAvKiB3ZSBoYXZlIG5vdyByZWNlaXZlZCBhIGZ1bGwgU01UUCBzZXJ2ZXIgcmVzcG9uc2UgKi8KKyAgICBzd2l0Y2goc210cGMtPnN0YXRlKSB7CisgICAgY2FzZSBTTVRQX1NFUlZFUkdSRUVUOgorICAgICAgaWYoc210cGNvZGUvMTAwICE9IDIpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkdvdCB1bmV4cGVjdGVkIHNtdHAtc2VydmVyIHJlc3BvbnNlOiAlZCIsIHNtdHBjb2RlKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFk7CisgICAgICB9CisKKyAgICAgIHJlc3VsdCA9IHNtdHBfc3RhdGVfZWhsbyhjb25uKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTTVRQX0VITE86CisgICAgICByZXN1bHQgPSBzbXRwX3N0YXRlX2VobG9fcmVzcChjb25uLCBzbXRwY29kZSwgc210cGMtPnN0YXRlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTTVRQX0hFTE86CisgICAgICByZXN1bHQgPSBzbXRwX3N0YXRlX2hlbG9fcmVzcChjb25uLCBzbXRwY29kZSwgc210cGMtPnN0YXRlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTTVRQX1NUQVJUVExTOgorICAgICAgcmVzdWx0ID0gc210cF9zdGF0ZV9zdGFydHRsc19yZXNwKGNvbm4sIHNtdHBjb2RlLCBzbXRwYy0+c3RhdGUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNNVFBfQVVUSFBMQUlOOgorICAgICAgcmVzdWx0ID0gc210cF9zdGF0ZV9hdXRocGxhaW5fcmVzcChjb25uLCBzbXRwY29kZSwgc210cGMtPnN0YXRlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTTVRQX0FVVEhMT0dJTjoKKyAgICAgIHJlc3VsdCA9IHNtdHBfc3RhdGVfYXV0aGxvZ2luX3Jlc3AoY29ubiwgc210cGNvZGUsIHNtdHBjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU01UUF9BVVRIUEFTU1dEOgorICAgICAgcmVzdWx0ID0gc210cF9zdGF0ZV9hdXRocGFzc3dkX3Jlc3AoY29ubiwgc210cGNvZGUsIHNtdHBjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgKKyAgICBjYXNlIFNNVFBfQVVUSENSQU1NRDU6CisgICAgICByZXN1bHQgPSBzbXRwX3N0YXRlX2F1dGhjcmFtX3Jlc3AoY29ubiwgc210cGNvZGUsIHNtdHBjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKyNlbmRpZgorCisjaWZkZWYgVVNFX05UTE0KKyAgICBjYXNlIFNNVFBfQVVUSE5UTE06CisgICAgICByZXN1bHQgPSBzbXRwX3N0YXRlX2F1dGhfbnRsbV9yZXNwKGNvbm4sIHNtdHBjb2RlLCBzbXRwYy0+c3RhdGUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNNVFBfQVVUSE5UTE1fVFlQRTJNU0c6CisgICAgICByZXN1bHQgPSBzbXRwX3N0YXRlX2F1dGhfbnRsbV90eXBlMm1zZ19yZXNwKGNvbm4sIHNtdHBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwYy0+c3RhdGUpOworICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgIGNhc2UgU01UUF9BVVRIOgorICAgICAgcmVzdWx0ID0gc210cF9zdGF0ZV9hdXRoX3Jlc3AoY29ubiwgc210cGNvZGUsIHNtdHBjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU01UUF9NQUlMOgorICAgICAgcmVzdWx0ID0gc210cF9zdGF0ZV9tYWlsX3Jlc3AoY29ubiwgc210cGNvZGUsIHNtdHBjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU01UUF9SQ1BUOgorICAgICAgcmVzdWx0ID0gc210cF9zdGF0ZV9yY3B0X3Jlc3AoY29ubiwgc210cGNvZGUsIHNtdHBjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU01UUF9EQVRBOgorICAgICAgcmVzdWx0ID0gc210cF9zdGF0ZV9kYXRhX3Jlc3AoY29ubiwgc210cGNvZGUsIHNtdHBjLT5zdGF0ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU01UUF9QT1NUREFUQToKKyAgICAgIHJlc3VsdCA9IHNtdHBfc3RhdGVfcG9zdGRhdGFfcmVzcChjb25uLCBzbXRwY29kZSwgc210cGMtPnN0YXRlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTTVRQX1FVSVQ6CisgICAgICAvKiBmYWxsdGhyb3VnaCwganVzdCBzdG9wISAqLworICAgIGRlZmF1bHQ6CisgICAgICAvKiBpbnRlcm5hbCBlcnJvciAqLworICAgICAgc3RhdGUoY29ubiwgU01UUF9TVE9QKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGRvbmUgZnJvbSBtdWx0aS5jICovCitzdGF0aWMgQ1VSTGNvZGUgc210cF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCit7CisgIHN0cnVjdCBzbXRwX2Nvbm4gKnNtdHBjID0gJmNvbm4tPnByb3RvLnNtdHBjOworICBDVVJMY29kZSByZXN1bHQ7CisKKyAgaWYoKGNvbm4tPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9TU0wpICYmICFzbXRwYy0+c3NsZG9uZSkKKyAgICByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIEZJUlNUU09DS0VULCAmc210cGMtPnNzbGRvbmUpOworICBlbHNlCisgICAgcmVzdWx0ID0gQ3VybF9wcF9tdWx0aV9zdGF0ZW1hY2goJnNtdHBjLT5wcCk7CisKKyAgKmRvbmUgPSAoc210cGMtPnN0YXRlID09IFNNVFBfU1RPUCkgPyBUUlVFIDogRkFMU0U7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIHNtdHBfZWFzeV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3Qgc210cF9jb25uICpzbXRwYyA9ICZjb25uLT5wcm90by5zbXRwYzsKKyAgc3RydWN0IHBpbmdwb25nICpwcCA9ICZzbXRwYy0+cHA7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIHdoaWxlKHNtdHBjLT5zdGF0ZSAhPSBTTVRQX1NUT1ApIHsKKyAgICByZXN1bHQgPSBDdXJsX3BwX2Vhc3lfc3RhdGVtYWNoKHBwKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgc3RydWN0IFNNVFAgZm9yIHRoZSBjdXJyZW50IFNlc3Npb25IYW5kbGUuICBJZgorICogbmVlZCBiZS4KKyAqLworc3RhdGljIENVUkxjb2RlIHNtdHBfaW5pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IEZUUCAqc210cCA9IGRhdGEtPnN0YXRlLnByb3RvLnNtdHA7CisgIGlmKCFzbXRwKSB7CisgICAgc210cCA9IGRhdGEtPnN0YXRlLnByb3RvLnNtdHAgPSBjYWxsb2Moc2l6ZW9mKHN0cnVjdCBGVFApLCAxKTsKKyAgICBpZighc210cCkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgLyogZ2V0IHNvbWUgaW5pdGlhbCBkYXRhIGludG8gdGhlIHNtdHAgc3RydWN0ICovCisgIHNtdHAtPmJ5dGVjb3VudHAgPSAmZGF0YS0+cmVxLmJ5dGVjb3VudDsKKworICAvKiBObyBuZWVkIHRvIGR1cGxpY2F0ZSB1c2VyK3Bhc3N3b3JkLCB0aGUgY29ubmVjdGRhdGEgc3RydWN0IHdvbid0IGNoYW5nZQorICAgICBkdXJpbmcgYSBzZXNzaW9uLCBidXQgd2UgcmUtaW5pdCB0aGVtIGhlcmUgc2luY2Ugb24gc3Vic2VxdWVudCBpbml0cworICAgICBzaW5jZSB0aGUgY29ubiBzdHJ1Y3QgbWF5IGhhdmUgY2hhbmdlZCBvciBiZWVuIHJlcGxhY2VkLgorICAqLworICBzbXRwLT51c2VyID0gY29ubi0+dXNlcjsKKyAgc210cC0+cGFzc3dkID0gY29ubi0+cGFzc3dkOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIHNtdHBfY29ubmVjdCgpIHNob3VsZCBkbyBldmVyeXRoaW5nIHRoYXQgaXMgdG8gYmUgY29uc2lkZXJlZCBhIHBhcnQgb2YKKyAqIHRoZSBjb25uZWN0aW9uIHBoYXNlLgorICoKKyAqIFRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5ICdkb25lJyB3aWxsIGJlIFRSVUUgaWYgdGhlIHByb3RvY29sLWxheWVyCisgKiBjb25uZWN0IHBoYXNlIGlzIGRvbmUgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIG9yIEZBTFNFIGlmIG5vdC4gV2hlbgorICogY2FsbGVkIGFzIGEgcGFydCBvZiB0aGUgZWFzeSBpbnRlcmZhY2UsIGl0IHdpbGwgYWx3YXlzIGJlIFRSVUUuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBzbXRwX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKSAvKiBzZWUgZGVzY3JpcHRpb24gYWJvdmUgKi8KK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3Qgc210cF9jb25uICpzbXRwYyA9ICZjb25uLT5wcm90by5zbXRwYzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgcGluZ3BvbmcgKnBwID0gJnNtdHBjLT5wcDsKKyAgY29uc3QgY2hhciAqcGF0aCA9IGNvbm4tPmRhdGEtPnN0YXRlLnBhdGg7CisgIGNoYXIgbG9jYWxob3N0W0hPU1ROQU1FX01BWCArIDFdOworCisgICpkb25lID0gRkFMU0U7IC8qIGRlZmF1bHQgdG8gbm90IGRvbmUgeWV0ICovCisKKyAgLyogSWYgdGhlcmUgYWxyZWFkeSBpcyBhIHByb3RvY29sLXNwZWNpZmljIHN0cnVjdCBhbGxvY2F0ZWQgZm9yIHRoaXMKKyAgICAgc2Vzc2lvbmhhbmRsZSwgZGVhbCB3aXRoIGl0ICovCisgIEN1cmxfcmVzZXRfcmVxcHJvdG8oY29ubik7CisKKyAgcmVzdWx0ID0gc210cF9pbml0KGNvbm4pOworICBpZihDVVJMRV9PSyAhPSByZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBXZSBhbHdheXMgc3VwcG9ydCBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zIG9uIHNtdHAgKi8KKyAgY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOworCisgIHBwLT5yZXNwb25zZV90aW1lID0gUkVTUF9USU1FT1VUOyAvKiBzZXQgZGVmYXVsdCByZXNwb25zZSB0aW1lLW91dCAqLworICBwcC0+c3RhdGVtYWNoX2FjdCA9IHNtdHBfc3RhdGVtYWNoX2FjdDsKKyAgcHAtPmVuZG9mcmVzcCA9IHNtdHBfZW5kb2ZyZXNwOworICBwcC0+Y29ubiA9IGNvbm47CisKKyAgaWYoKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NNVFBTKSAmJgorICAgICAgZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgIT0gQ3VybF9pZl9tdWx0aSkgeworICAgIC8qIFNNVFBTIGlzIHNpbXBseSBzbXRwIHdpdGggU1NMIGZvciB0aGUgY29udHJvbCBjaGFubmVsICovCisgICAgLyogbm93LCBwZXJmb3JtIHRoZSBTU0wgaW5pdGlhbGl6YXRpb24gZm9yIHRoaXMgc29ja2V0ICovCisgICAgcmVzdWx0ID0gQ3VybF9zc2xfY29ubmVjdChjb25uLCBGSVJTVFNPQ0tFVCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIEN1cmxfcHBfaW5pdChwcCk7IC8qIGluaXQgdGhlIHJlc3BvbnNlIHJlYWRlciBzdHVmZiAqLworCisgIHBwLT5yZXNwb25zZV90aW1lID0gUkVTUF9USU1FT1VUOyAvKiBzZXQgZGVmYXVsdCByZXNwb25zZSB0aW1lLW91dCAqLworICBwcC0+c3RhdGVtYWNoX2FjdCA9IHNtdHBfc3RhdGVtYWNoX2FjdDsKKyAgcHAtPmVuZG9mcmVzcCA9IHNtdHBfZW5kb2ZyZXNwOworICBwcC0+Y29ubiA9IGNvbm47CisKKyAgaWYoISpwYXRoKSB7CisgICAgaWYoIUN1cmxfZ2V0aG9zdG5hbWUobG9jYWxob3N0LCBzaXplb2YobG9jYWxob3N0KSkpCisgICAgICBwYXRoID0gbG9jYWxob3N0OworICAgIGVsc2UKKyAgICAgIHBhdGggPSAibG9jYWxob3N0IjsKKyAgfQorCisgIC8qIFVybCBkZWNvZGUgdGhlIHBhdGggYW5kIHVzZSBpdCBhcyB0aGUgZG9tYWluIGluIG91ciBFSExPICovCisgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGNvbm4tPmRhdGEsIHBhdGgsIDAsICZzbXRwYy0+ZG9tYWluLCBOVUxMLCBUUlVFKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgLyogU2V0IHRoZSBzdGF0ZSBhcyB3ZSBhcmUgd2FpdGluZyB0aGUgc2VydmVyIGdyZWV0aW5nICovCisgIHN0YXRlKGNvbm4sIFNNVFBfU0VSVkVSR1JFRVQpOworCisgIGlmKGRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID09IEN1cmxfaWZfbXVsdGkpCisgICAgcmVzdWx0ID0gc210cF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9uZSk7CisgIGVsc2UgeworICAgIHJlc3VsdCA9IHNtdHBfZWFzeV9zdGF0ZW1hY2goY29ubik7CisgICAgaWYoIXJlc3VsdCkKKyAgICAgICpkb25lID0gVFJVRTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNtdHBfZG9uZSgpCisgKgorICogVGhlIERPTkUgZnVuY3Rpb24uIFRoaXMgZG9lcyB3aGF0IG5lZWRzIHRvIGJlIGRvbmUgYWZ0ZXIgYSBzaW5nbGUgRE8gaGFzCisgKiBwZXJmb3JtZWQuCisgKgorICogSW5wdXQgYXJndW1lbnQgaXMgYWxyZWFkeSBjaGVja2VkIGZvciB2YWxpZGl0eS4KKyAqLworc3RhdGljIENVUkxjb2RlIHNtdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IEZUUCAqc210cCA9IGRhdGEtPnN0YXRlLnByb3RvLnNtdHA7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzc2l6ZV90IGJ5dGVzX3dyaXR0ZW47CisgICh2b2lkKXByZW1hdHVyZTsKKworICBpZighc210cCkKKyAgICAvKiBXaGVuIHRoZSBlYXN5IGhhbmRsZSBpcyByZW1vdmVkIGZyb20gdGhlIG11bHRpIHdoaWxlIGxpYmN1cmwgaXMgc3RpbGwKKyAgICAgKiB0cnlpbmcgdG8gcmVzb2x2ZSB0aGUgaG9zdCBuYW1lLCBpdCBzZWVtcyB0aGF0IHRoZSBzbXRwIHN0cnVjdCBpcyBub3QKKyAgICAgKiB5ZXQgaW5pdGlhbGl6ZWQsIGJ1dCB0aGUgcmVtb3ZhbCBhY3Rpb24gY2FsbHMgQ3VybF9kb25lKCkgd2hpY2ggY2FsbHMKKyAgICAgKiB0aGlzIGZ1bmN0aW9uLiBTbyB3ZSBzaW1wbHkgcmV0dXJuIHN1Y2Nlc3MgaWYgbm8gc210cCBwb2ludGVyIGlzIHNldC4KKyAgICAgKi8KKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgaWYoc3RhdHVzKSB7CisgICAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7IC8qIG1hcmtlZCBmb3IgY2xvc3VyZSAqLworICAgIHJlc3VsdCA9IHN0YXR1czsgICAgICAgICAvKiB1c2UgdGhlIGFscmVhZHkgc2V0IGVycm9yIGNvZGUgKi8KKyAgfQorICBlbHNlIGlmKCFkYXRhLT5zZXQuY29ubmVjdF9vbmx5KSB7CisgICAgc3RydWN0IHNtdHBfY29ubiAqc210cGMgPSAmY29ubi0+cHJvdG8uc210cGM7CisgICAgc3RydWN0IHBpbmdwb25nICpwcCA9ICZzbXRwYy0+cHA7CisKKyAgICAvKiBTZW5kIHRoZSBlbmQgb2YgYmxvY2sgZGF0YSAqLworICAgIHJlc3VsdCA9IEN1cmxfd3JpdGUoY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPndyaXRlc29ja2ZkLCAgLyogc29ja2V0IHRvIHNlbmQgdG8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIFNNVFBfRU9CLCAgICAgICAgICAgLyogYnVmZmVyIHBvaW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIFNNVFBfRU9CX0xFTiwgICAgICAgLyogYnVmZmVyIHNpemUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICZieXRlc193cml0dGVuKTsgICAgLyogYWN0dWFsbHkgc2VudCBhd2F5ICovCisKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgaWYoYnl0ZXNfd3JpdHRlbiAhPSBTTVRQX0VPQl9MRU4pIHsKKyAgICAgIC8qIFRoZSB3aG9sZSBjaHVuayB3YXMgbm90IHNlbnQgc28ga2VlcCBpdCBhcm91bmQgYW5kIGFkanVzdCB0aGUKKyAgICAgICAgIHBpbmdwb25nIHN0cnVjdHVyZSBhY2NvcmRpbmdseSAqLworICAgICAgcHAtPnNlbmR0aGlzID0gc3RyZHVwKFNNVFBfRU9CKTsKKyAgICAgIHBwLT5zZW5kc2l6ZSA9IFNNVFBfRU9CX0xFTjsKKyAgICAgIHBwLT5zZW5kbGVmdCA9IFNNVFBfRU9CX0xFTiAtIGJ5dGVzX3dyaXR0ZW47CisgICAgfQorICAgIGVsc2UKKyAgICAgIC8qIFN1Y2Nlc3NmdWxseSBzZW50IHNvIGFkanVzdCB0aGUgcmVzcG9uc2UgdGltZW91dCByZWxhdGl2ZSB0byBub3cgKi8KKyAgICAgIHBwLT5yZXNwb25zZSA9IEN1cmxfdHZub3coKTsKKworICAgIHN0YXRlKGNvbm4sIFNNVFBfUE9TVERBVEEpOworCisgICAgLyogUnVuIHRoZSBzdGF0ZS1tYWNoaW5lCisKKyAgICAgICBUT0RPOiB3aGVuIHRoZSBtdWx0aSBpbnRlcmZhY2UgaXMgdXNlZCwgdGhpcyBfcmVhbGx5XyBzaG91bGQgYmUgdXNpbmcKKyAgICAgICB0aGUgc210cF9tdWx0aV9zdGF0ZW1hY2ggZnVuY3Rpb24gYnV0IHdlIGhhdmUgbm8gZ2VuZXJhbCBzdXBwb3J0IGZvcgorICAgICAgIG5vbi1ibG9ja2luZyBET05FIG9wZXJhdGlvbnMsIG5vdCBpbiB0aGUgbXVsdGkgc3RhdGUgbWFjaGluZSBhbmQgd2l0aAorICAgICAgIEN1cmxfZG9uZSgpIGludm9rZXMgb24gc2V2ZXJhbCBwbGFjZXMgaW4gdGhlIGNvZGUhCisgICAgKi8KKyAgICByZXN1bHQgPSBzbXRwX2Vhc3lfc3RhdGVtYWNoKGNvbm4pOworICB9CisKKyAgLyogQ2xlYXIgdGhlIHRyYW5zZmVyIG1vZGUgZm9yIHRoZSBuZXh0IGNvbm5lY3Rpb24gKi8KKyAgc210cC0+dHJhbnNmZXIgPSBGVFBUUkFOU0ZFUl9CT0RZOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNtdHBfcGVyZm9ybSgpCisgKgorICogVGhpcyBpcyB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIGZvciBTTVRQLiBHZXQgYSBmaWxlL2RpcmVjdG9yeSBhY2NvcmRpbmcgdG8KKyAqIHRoZSBvcHRpb25zIHByZXZpb3VzbHkgc2V0dXAuCisgKi8KK3N0YXRpYworQ1VSTGNvZGUgc210cF9wZXJmb3JtKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwgIC8qIGNvbm5lY3Qgc3RhdHVzIGFmdGVyIFBBU1YgLyBQT1JUICovCisgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIC8qIHRoaXMgaXMgU01UUCBhbmQgbm8gcHJveHkgKi8KKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBzdGFydHNcbiIpKTsKKworICBpZihjb25uLT5kYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKKyAgICAvKiByZXF1ZXN0ZWQgbm8gYm9keSBtZWFucyBubyB0cmFuc2Zlci4uLiAqLworICAgIHN0cnVjdCBGVFAgKnNtdHAgPSBjb25uLT5kYXRhLT5zdGF0ZS5wcm90by5zbXRwOworICAgIHNtdHAtPnRyYW5zZmVyID0gRlRQVFJBTlNGRVJfSU5GTzsKKyAgfQorCisgICpkb3BoYXNlX2RvbmUgPSBGQUxTRTsgLyogbm90IGRvbmUgeWV0ICovCisKKyAgLyogc3RhcnQgdGhlIGZpcnN0IGNvbW1hbmQgaW4gdGhlIERPIHBoYXNlICovCisgIHJlc3VsdCA9IHNtdHBfbWFpbChjb25uKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCisgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID09IEN1cmxfaWZfbXVsdGkpCisgICAgcmVzdWx0ID0gc210cF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKKyAgZWxzZSB7CisgICAgcmVzdWx0ID0gc210cF9lYXN5X3N0YXRlbWFjaChjb25uKTsKKyAgICAqZG9waGFzZV9kb25lID0gVFJVRTsgLyogd2l0aCB0aGUgZWFzeSBpbnRlcmZhY2Ugd2UgYXJlIGRvbmUgaGVyZSAqLworICB9CisgICpjb25uZWN0ZWQgPSBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdOworCisgIGlmKCpkb3BoYXNlX2RvbmUpCisgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJETyBwaGFzZSBpcyBjb21wbGV0ZVxuIikpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNtdHBfZG8oKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCBhcyAnY3VybF9kbycgZnVuY3Rpb24uIEl0IGRlY29kZXMgdGhlIHBhdGgKKyAqIHBhcnRzIGV0YyBhcyBhIHdyYXBwZXIgdG8gdGhlIGFjdHVhbCBETyBmdW5jdGlvbiAoc210cF9wZXJmb3JtKS4KKyAqCisgKiBUaGUgaW5wdXQgYXJndW1lbnQgaXMgYWxyZWFkeSBjaGVja2VkIGZvciB2YWxpZGl0eS4KKyAqLworc3RhdGljIENVUkxjb2RlIHNtdHBfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXRjb2RlID0gQ1VSTEVfT0s7CisKKyAgKmRvbmUgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBmYWxzZSAqLworCisgIC8qCisgICAgU2luY2UgY29ubmVjdGlvbnMgY2FuIGJlIHJlLXVzZWQgYmV0d2VlbiBTZXNzaW9uSGFuZGxlcywgdGhpcyBtaWdodCBiZSBhCisgICAgY29ubmVjdGlvbiBhbHJlYWR5IGV4aXN0aW5nIGJ1dCBvbiBhIGZyZXNoIFNlc3Npb25IYW5kbGUgc3RydWN0IHNvIHdlIG11c3QKKyAgICBtYWtlIHN1cmUgd2UgaGF2ZSBhIGdvb2QgJ3N0cnVjdCBTTVRQJyB0byBwbGF5IHdpdGguIEZvciBuZXcgY29ubmVjdGlvbnMsCisgICAgdGhlIHN0cnVjdCBTTVRQIGlzIGFsbG9jYXRlZCBhbmQgc2V0dXAgaW4gdGhlIHNtdHBfY29ubmVjdCgpIGZ1bmN0aW9uLgorICAqLworICBDdXJsX3Jlc2V0X3JlcXByb3RvKGNvbm4pOworICByZXRjb2RlID0gc210cF9pbml0KGNvbm4pOworICBpZihyZXRjb2RlKQorICAgIHJldHVybiByZXRjb2RlOworCisgIHJldGNvZGUgPSBzbXRwX3JlZ3VsYXJfdHJhbnNmZXIoY29ubiwgZG9uZSk7CisKKyAgcmV0dXJuIHJldGNvZGU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNtdHBfcXVpdCgpCisgKgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIHNjbG9zZSgpLiAgV2Ugc2hvdWxkIHRoZW4gd2FpdCBmb3IgdGhlCisgKiByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIgYmVmb3JlIHJldHVybmluZy4gVGhlIGNhbGxpbmcgY29kZSBzaG91bGQgdGhlbiB0cnkKKyAqIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uLgorICoKKyAqLworc3RhdGljIENVUkxjb2RlIHNtdHBfcXVpdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIHJlc3VsdCA9IEN1cmxfcHBfc2VuZGYoJmNvbm4tPnByb3RvLnNtdHBjLnBwLCAiUVVJVCIpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBzdGF0ZShjb25uLCBTTVRQX1FVSVQpOworCisgIHJlc3VsdCA9IHNtdHBfZWFzeV9zdGF0ZW1hY2goY29ubik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc210cF9kaXNjb25uZWN0KCkKKyAqCisgKiBEaXNjb25uZWN0IGZyb20gYW4gU01UUCBzZXJ2ZXIuIENsZWFudXAgcHJvdG9jb2wtc3BlY2lmaWMgcGVyLWNvbm5lY3Rpb24KKyAqIHJlc291cmNlcy4gQkxPQ0tJTkcuCisgKi8KK3N0YXRpYyBDVVJMY29kZSBzbXRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlYWRfY29ubmVjdGlvbikKK3sKKyAgc3RydWN0IHNtdHBfY29ubiAqc210cGMgPSAmY29ubi0+cHJvdG8uc210cGM7CisKKyAgLyogV2UgY2Fubm90IHNlbmQgcXVpdCB1bmNvbmRpdGlvbmFsbHkuIElmIHRoaXMgY29ubmVjdGlvbiBpcyBzdGFsZSBvcgorICAgICBiYWQgaW4gYW55IHdheSwgc2VuZGluZyBxdWl0IGFuZCB3YWl0aW5nIGFyb3VuZCBoZXJlIHdpbGwgbWFrZSB0aGUKKyAgICAgZGlzY29ubmVjdCB3YWl0IGluIHZhaW4gYW5kIGNhdXNlIG1vcmUgcHJvYmxlbXMgdGhhbiB3ZSBuZWVkIHRvLgorICAqLworCisgIC8qIFRoZSBTTVRQIHNlc3Npb24gbWF5IG9yIG1heSBub3QgaGF2ZSBiZWVuIGFsbG9jYXRlZC9zZXR1cCBhdCB0aGlzCisgICAgIHBvaW50ISAqLworICBpZighZGVhZF9jb25uZWN0aW9uICYmIHNtdHBjLT5wcC5jb25uKQorICAgICh2b2lkKXNtdHBfcXVpdChjb25uKTsgLyogaWdub3JlIGVycm9ycyBvbiB0aGUgTE9HT1VUICovCisKKyAgQ3VybF9wcF9kaXNjb25uZWN0KCZzbXRwYy0+cHApOworCisjaWZkZWYgVVNFX05UTE0KKyAgLyogQ2xlYW51cCB0aGUgbnRsbSBzdHJ1Y3R1cmUgKi8KKyAgaWYoc210cGMtPmF1dGh1c2VkID09IFNNVFBfQVVUSF9OVExNKSB7CisgICAgQ3VybF9udGxtX3NzcGlfY2xlYW51cCgmY29ubi0+bnRsbSk7CisgIH0KKyNlbmRpZgorCisgIC8qIFRoaXMgd29uJ3QgYWxyZWFkeSBiZSBmcmVlZCBpbiBzb21lIGVycm9yIGNhc2VzICovCisgIEN1cmxfc2FmZWZyZWUoc210cGMtPmRvbWFpbik7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKiBjYWxsIHRoaXMgd2hlbiB0aGUgRE8gcGhhc2UgaGFzIGNvbXBsZXRlZCAqLworc3RhdGljIENVUkxjb2RlIHNtdHBfZG9waGFzZV9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbm5lY3RlZCkKK3sKKyAgc3RydWN0IEZUUCAqc210cCA9IGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLnNtdHA7CisgIHN0cnVjdCBzbXRwX2Nvbm4gKnNtdHBjID0gJmNvbm4tPnByb3RvLnNtdHBjOworICAodm9pZCljb25uZWN0ZWQ7CisKKyAgaWYoc210cC0+dHJhbnNmZXIgIT0gRlRQVFJBTlNGRVJfQk9EWSkKKyAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAtMSwgTlVMTCk7CisKKyAgQ3VybF9zYWZlZnJlZShzbXRwYy0+ZG9tYWluKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qIGNhbGxlZCBmcm9tIG11bHRpLmMgd2hpbGUgRE9pbmcgKi8KK3N0YXRpYyBDVVJMY29kZSBzbXRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICByZXN1bHQgPSBzbXRwX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICByZXN1bHQgPSBzbXRwX2RvcGhhc2VfZG9uZShjb25uLCBGQUxTRSAvKiBub3QgY29ubmVjdGVkICovKTsKKworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNtdHBfcmVndWxhcl90cmFuc2ZlcigpCisgKgorICogVGhlIGlucHV0IGFyZ3VtZW50IGlzIGFscmVhZHkgY2hlY2tlZCBmb3IgdmFsaWRpdHkuCisgKgorICogUGVyZm9ybXMgYWxsIGNvbW1hbmRzIGRvbmUgYmVmb3JlIGEgcmVndWxhciB0cmFuc2ZlciBiZXR3ZWVuIGEgbG9jYWwgYW5kIGEKKyAqIHJlbW90ZSBob3N0LgorICovCitzdGF0aWMgQ1VSTGNvZGUgc210cF9yZWd1bGFyX3RyYW5zZmVyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgYm9vbCBjb25uZWN0ZWQgPSBGQUxTRTsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBkYXRhLT5yZXEuc2l6ZSA9IC0xOyAvKiBtYWtlIHN1cmUgdGhpcyBpcyB1bmtub3duIGF0IHRoaXMgcG9pbnQgKi8KKworICBDdXJsX3BncnNTZXRVcGxvYWRDb3VudGVyKGRhdGEsIDApOworICBDdXJsX3BncnNTZXREb3dubG9hZENvdW50ZXIoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldFVwbG9hZFNpemUoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCAwKTsKKworICByZXN1bHQgPSBzbXRwX3BlcmZvcm0oY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICZjb25uZWN0ZWQsIC8qIGhhdmUgd2UgY29ubmVjdGVkIGFmdGVyIFBBU1YvUE9SVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZG9waGFzZV9kb25lKTsgLyogYWxsIGNvbW1hbmRzIGluIHRoZSBETy1waGFzZSBkb25lPyAqLworCisgIGlmKENVUkxFX09LID09IHJlc3VsdCkgeworCisgICAgaWYoISpkb3BoYXNlX2RvbmUpCisgICAgICAvKiB0aGUgRE8gcGhhc2UgaGFzIG5vdCBjb21wbGV0ZWQgeWV0ICovCisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgICByZXN1bHQgPSBzbXRwX2RvcGhhc2VfZG9uZShjb25uLCBjb25uZWN0ZWQpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQ1VSTGNvZGUgc210cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmICFkYXRhLT5zZXQudHVubmVsX3RocnVfaHR0cHByb3h5KSB7CisgICAgLyogVW5sZXNzIHdlIGhhdmUgYXNrZWQgdG8gdHVubmVsIHNtdHAgb3BlcmF0aW9ucyB0aHJvdWdoIHRoZSBwcm94eSwgd2UKKyAgICAgICBzd2l0Y2ggYW5kIHVzZSBIVFRQIG9wZXJhdGlvbnMgb25seSAqLworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorICAgIGlmKGNvbm4tPmhhbmRsZXIgPT0gJkN1cmxfaGFuZGxlcl9zbXRwKQorICAgICAgY29ubi0+aGFuZGxlciA9ICZDdXJsX2hhbmRsZXJfc210cF9wcm94eTsKKyAgICBlbHNlIHsKKyNpZmRlZiBVU0VfU1NMCisgICAgICBjb25uLT5oYW5kbGVyID0gJkN1cmxfaGFuZGxlcl9zbXRwc19wcm94eTsKKyNlbHNlCisgICAgICBmYWlsZihkYXRhLCAiU01UUFMgbm90IHN1cHBvcnRlZCEiKTsKKyAgICAgIHJldHVybiBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTDsKKyNlbmRpZgorICAgIH0KKworICAgIC8qIFdlIGV4cGxpY2l0bHkgbWFyayB0aGlzIGNvbm5lY3Rpb24gYXMgcGVyc2lzdGVudCBoZXJlIGFzIHdlJ3JlIGRvaW5nCisgICAgICogU01UUCBvdmVyIEhUVFAgYW5kIHRodXMgd2UgYWNjaWRlbnRhbGx5IGF2b2lkIHNldHRpbmcgdGhpcyB2YWx1ZQorICAgICAqIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBjb25uLT5iaXRzLmNsb3NlID0gRkFMU0U7CisjZWxzZQorICAgIGZhaWxmKGRhdGEsICJTTVRQIG92ZXIgaHR0cCBwcm94eSByZXF1aXJlcyBIVFRQIHN1cHBvcnQgYnVpbHQtaW4hIik7CisgICAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOworI2VuZGlmCisgIH0KKworICBkYXRhLT5zdGF0ZS5wYXRoKys7ICAgLyogZG9uJ3QgaW5jbHVkZSB0aGUgaW5pdGlhbCBzbGFzaCAqLworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworQ1VSTGNvZGUgQ3VybF9zbXRwX2VzY2FwZV9lb2Ioc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBzc2l6ZV90IG5yZWFkKQoreworICAvKiBXaGVuIHNlbmRpbmcgU01UUCBwYXlsb2FkLCB3ZSBtdXN0IGRldGVjdCBDUkxGLkNSTEYgc2VxdWVuY2VzIGluCisgICAqIHRoZSBkYXRhIGFuZCBtYWtlIHN1cmUgaXQgaXMgc2VudCBhcyBDUkxGLi5DUkxGIGluc3RlYWQsIGFzCisgICAqIG90aGVyd2lzZSBpdCB3aWxsIHdyb25nbHkgYmUgZGV0ZWN0ZWQgYXMgZW5kIG9mIGRhdGEgYnkgdGhlIHNlcnZlci4KKyAgICovCisgIHNzaXplX3QgaTsKKyAgc3NpemVfdCBzaTsKKyAgc3RydWN0IHNtdHBfY29ubiAqc210cGMgPSAmY29ubi0+cHJvdG8uc210cGM7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICAvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIHRoZSBzY2F0Y2ggYnVmZmVyPyAqLworICBpZighZGF0YS0+c3RhdGUuc2NyYXRjaCkgIHsKKyAgICBkYXRhLT5zdGF0ZS5zY3JhdGNoID0gbWFsbG9jKDIgKiBCVUZTSVpFKTsKKworICAgIGlmKCFkYXRhLT5zdGF0ZS5zY3JhdGNoKSB7CisgICAgICBmYWlsZiAoZGF0YSwgIkZhaWxlZCB0byBhbGxvYyBzY3JhdGNoIGJ1ZmZlciEiKTsKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKyAgfQorCisgIC8qIFRoaXMgbG9vcCBjYW4gYmUgaW1wcm92ZWQgYnkgc29tZSBraW5kIG9mIEJveWVyLU1vb3JlIHN0eWxlIG9mCisgICAgIGFwcHJvYWNoIGJ1dCB0aGF0IGlzIHNhdmVkIGZvciBsYXRlci4uLiAqLworICBmb3IoaSA9IDAsIHNpID0gMDsgaSA8IG5yZWFkOyBpKyspIHsKKyAgICBpZihTTVRQX0VPQltzbXRwYy0+ZW9iXSA9PSBkYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlW2ldKQorICAgICAgc210cGMtPmVvYisrOworICAgIGVsc2UgaWYoc210cGMtPmVvYikgeworICAgICAgLyogQSBwcmV2aW91cyBzdWJzdHJpbmcgbWF0Y2hlZCBzbyBvdXRwdXQgdGhhdCBmaXJzdCAqLworICAgICAgbWVtY3B5KCZkYXRhLT5zdGF0ZS5zY3JhdGNoW3NpXSwgU01UUF9FT0IsIHNtdHBjLT5lb2IpOworICAgICAgc2kgKz0gc210cGMtPmVvYjsKKworICAgICAgLyogdGhlbiBjb21wYXJlIHRoZSBmaXJzdCBieXRlICovCisgICAgICBpZihTTVRQX0VPQlswXSA9PSBkYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlW2ldKQorICAgICAgICBzbXRwYy0+ZW9iID0gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgc210cGMtPmVvYiA9IDA7CisgICAgfQorCisgICAgaWYoU01UUF9FT0JfTEVOID09IHNtdHBjLT5lb2IpIHsKKyAgICAgIC8qIEl0IG1hdGNoZWQsIGNvcHkgdGhlIHJlcGxhY2VtZW50IGRhdGEgdG8gdGhlIHRhcmdldCBidWZmZXIKKyAgICAgICAgIGluc3RlYWQuIE5vdGUgdGhhdCB0aGUgcmVwbGFjZW1lbnQgZG9lcyBub3QgY29udGFpbiB0aGUKKyAgICAgICAgIHRyYWlsaW5nIENSTEYgYnV0IHdlIGluc3RlYWQgY29udGludWUgdG8gbWF0Y2ggb24gdGhhdCBvbmUKKyAgICAgICAgIHRvIGRlYWwgd2l0aCByZXBlYXRlZCBzZXF1ZW5jZXMuIExpa2UgQ1JMRi5DUkxGLkNSTEYgZXRjCisgICAgICAqLworICAgICAgbWVtY3B5KCZkYXRhLT5zdGF0ZS5zY3JhdGNoW3NpXSwgU01UUF9FT0JfUkVQTCwKKyAgICAgICAgICAgICBTTVRQX0VPQl9SRVBMX0xFTik7CisgICAgICBzaSArPSBTTVRQX0VPQl9SRVBMX0xFTjsKKyAgICAgIHNtdHBjLT5lb2IgPSAyOyAvKiBzdGFydCBvdmVyIGF0IHR3byBieXRlcyAqLworICAgIH0KKyAgICBlbHNlIGlmKCFzbXRwYy0+ZW9iKQorICAgICAgZGF0YS0+c3RhdGUuc2NyYXRjaFtzaSsrXSA9IGRhdGEtPnJlcS51cGxvYWRfZnJvbWhlcmVbaV07CisgIH0KKworICBpZihzbXRwYy0+ZW9iKSB7CisgICAgLyogQSBzdWJzdHJpbmcgbWF0Y2hlZCBiZWZvcmUgcHJvY2Vzc2luZyBlbmRlZCBzbyBvdXRwdXQgdGhhdCBub3cgKi8KKyAgICBtZW1jcHkoJmRhdGEtPnN0YXRlLnNjcmF0Y2hbc2ldLCBTTVRQX0VPQiwgc210cGMtPmVvYik7CisgICAgc2kgKz0gc210cGMtPmVvYjsKKyAgICBzbXRwYy0+ZW9iID0gMDsKKyAgfQorCisgIGlmKHNpICE9IG5yZWFkKSB7CisgICAgLyogb25seSB1c2UgdGhlIG5ldyBidWZmZXIgaWYgd2UgcmVwbGFjZWQgc29tZXRoaW5nICovCisgICAgbnJlYWQgPSBzaTsKKworICAgIC8qIHVwbG9hZCBmcm9tIHRoZSBuZXcgKHJlcGxhY2VkKSBidWZmZXIgaW5zdGVhZCAqLworICAgIGRhdGEtPnJlcS51cGxvYWRfZnJvbWhlcmUgPSBkYXRhLT5zdGF0ZS5zY3JhdGNoOworCisgICAgLyogc2V0IHRoZSBuZXcgYW1vdW50IHRvbyAqLworICAgIGRhdGEtPnJlcS51cGxvYWRfcHJlc2VudCA9IG5yZWFkOworICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1NNVFAgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9zbXRwLmggYi9jdXJsLTcuMjUuMC9saWIvc210cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNjQwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc210cC5oCkBAIC0wLDAgKzEsOTAgQEAKKyNpZm5kZWYgX19TTVRQX0gKKyNkZWZpbmUgX19TTVRQX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAicGluZ3BvbmcuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNNVFAgdW5pcXVlIHNldHVwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKyAgU01UUF9TVE9QLCAgICAgICAgLyogZG8gbm90aGluZyBzdGF0ZSwgc3RvcHMgdGhlIHN0YXRlIG1hY2hpbmUgKi8KKyAgU01UUF9TRVJWRVJHUkVFVCwgLyogd2FpdGluZyBmb3IgdGhlIGluaXRpYWwgZ3JlZXRpbmcgaW1tZWRpYXRlbHkgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgYSBjb25uZWN0ICovCisgIFNNVFBfRUhMTywKKyAgU01UUF9IRUxPLAorICBTTVRQX1NUQVJUVExTLAorICBTTVRQX1VQR1JBREVUTFMsIC8qIGFzeW5jaHJvbm91c2x5IHVwZ3JhZGUgdGhlIGNvbm5lY3Rpb24gdG8gU1NML1RMUworICAgICAgICAgICAgICAgICAgICAgIChtdWx0aSBtb2RlIG9ubHkpICovCisgIFNNVFBfQVVUSFBMQUlOLAorICBTTVRQX0FVVEhMT0dJTiwKKyAgU01UUF9BVVRIUEFTU1dELAorICBTTVRQX0FVVEhDUkFNTUQ1LAorICBTTVRQX0FVVEhOVExNLAorICBTTVRQX0FVVEhOVExNX1RZUEUyTVNHLAorICBTTVRQX0FVVEgsCisgIFNNVFBfTUFJTCwgLyogTUFJTCBGUk9NICovCisgIFNNVFBfUkNQVCwgLyogUkNQVCBUTyAqLworICBTTVRQX0RBVEEsCisgIFNNVFBfUE9TVERBVEEsCisgIFNNVFBfUVVJVCwKKyAgU01UUF9MQVNUICAvKiBuZXZlciB1c2VkICovCit9IHNtdHBzdGF0ZTsKKworLyogc210cF9jb25uIGlzIHVzZWQgZm9yIHN0cnVjdCBjb25uZWN0aW9uLW9yaWVudGVkIGRhdGEgaW4gdGhlIGNvbm5lY3RkYXRhCisgICBzdHJ1Y3QgKi8KK3N0cnVjdCBzbXRwX2Nvbm4geworICBzdHJ1Y3QgcGluZ3BvbmcgcHA7CisgIGNoYXIgKmRvbWFpbjsgICAgLyogd2hhdCB0byBzZW5kIGluIHRoZSBFSExPICovCisgIHNpemVfdCBlb2I7ICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSBFT0IgKEVuZCBPZiBCb2R5KSB0aGF0IGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQgdGh1cyBmYXIgKi8KKyAgdW5zaWduZWQgaW50IGF1dGhtZWNoczsgICAgICAgLyogQWNjZXB0ZWQgYXV0aGVudGljYXRpb24gbWV0aG9kcy4gKi8KKyAgdW5zaWduZWQgaW50IGF1dGh1c2VkOyAgLyogQXV0aGVudGljYXRpb24gbWV0aG9kIHVzZWQgZm9yIHRoZSBjb25uZWN0aW9uICovCisgIHNtdHBzdGF0ZSBzdGF0ZTsgLyogYWx3YXlzIHVzZSBzbXRwLmM6c3RhdGUoKSB0byBjaGFuZ2Ugc3RhdGUhICovCisgIHN0cnVjdCBjdXJsX3NsaXN0ICpyY3B0OworICBib29sIHNzbGRvbmU7IC8qIGlzIGNvbm5lY3QoKSBvdmVyIFNTTCBkb25lPyBvbmx5IHJlbGV2YW50IGluIG11bHRpIG1vZGUgKi8KK307CisKKy8qIEF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBmbGFncy4gKi8KKyNkZWZpbmUgU01UUF9BVVRIX0xPR0lOICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFNNVFBfQVVUSF9QTEFJTiAgICAgICAgIDB4MDAwMgorI2RlZmluZSBTTVRQX0FVVEhfQ1JBTV9NRDUgICAgICAweDAwMDQKKyNkZWZpbmUgU01UUF9BVVRIX0RJR0VTVF9NRDUgICAgMHgwMDA4CisjZGVmaW5lIFNNVFBfQVVUSF9HU1NBUEkgICAgICAgIDB4MDAxMAorI2RlZmluZSBTTVRQX0FVVEhfRVhURVJOQUwgICAgICAweDAwMjAKKyNkZWZpbmUgU01UUF9BVVRIX05UTE0gICAgICAgICAgMHgwMDQwCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl9zbXRwOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NtdHBzOworCisvKiB0aGlzIGlzIHRoZSA1LWJ5dGVzIEVuZC1PZi1Cb2R5IG1hcmtlciBmb3IgU01UUCAqLworI2RlZmluZSBTTVRQX0VPQiAiXHgwZFx4MGFceDJlXHgwZFx4MGEiCisjZGVmaW5lIFNNVFBfRU9CX0xFTiA1CisKKy8qIGlmIGZvdW5kIGluIGRhdGEsIHJlcGxhY2UgaXQgd2l0aCB0aGlzIHN0cmluZyBpbnN0ZWFkICovCisjZGVmaW5lIFNNVFBfRU9CX1JFUEwgIlx4MGRceDBhXHgyZVx4MmUiCisjZGVmaW5lIFNNVFBfRU9CX1JFUExfTEVOIDQKKworQ1VSTGNvZGUgQ3VybF9zbXRwX2VzY2FwZV9lb2Ioc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBzc2l6ZV90IG5yZWFkKTsKKworI2VuZGlmIC8qIF9fU01UUF9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc29ja2FkZHIuaCBiL2N1cmwtNy4yNS4wL2xpYi9zb2NrYWRkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2OTQxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc29ja2FkZHIuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIF9fU09DS0FERFJfSAorI2RlZmluZSBfX1NPQ0tBRERSX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UKK3N0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2UgeworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBidWZmZXI7Cit9OworI2Vsc2UKK3N0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2UgeworICBjaGFyIGJ1ZmZlclsyNTZdOyAgIC8qIHRoaXMgc2hvdWxkIGJlIGJpZyBlbm91Z2ggdG8gZml0IGEgbG90ICovCit9OworI2VuZGlmCisKKyNlbmRpZiAvKiBfX1NPQ0tBRERSX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9zb2Nrcy5jIGIvY3VybC03LjI1LjAvbGliL3NvY2tzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiMDE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zb2Nrcy5jCkBAIC0wLDAgKzEsNzI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfUFJPWFkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInRpbWV2YWwuaCIKKyNpbmNsdWRlICJzb2Nrcy5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKgorICogSGVscGVyIHJlYWQtZnJvbS1zb2NrZXQgZnVuY3Rpb25zLiBEb2VzIHRoZSBzYW1lIGFzIEN1cmxfcmVhZCgpIGJ1dCBpdAorICogYmxvY2tzIHVudGlsIGFsbCBieXRlcyBhbW91bnQgb2YgYnVmZmVyc2l6ZSB3aWxsIGJlIHJlYWQuIE5vIG1vcmUsIG5vIGxlc3MuCisgKgorICogVGhpcyBpcyBTVFVQSUQgQkxPQ0tJTkcgYmVoYXZpb3VyIHdoaWNoIHdlIGZyb3duIHVwb24sIGJ1dCByaWdodCBub3cgdGhpcworICogaXMgd2hhdCB3ZSBoYXZlLi4uCisgKi8KK2ludCBDdXJsX2Jsb2NrcmVhZF9hbGwoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCBzb2NrZmQsICAgICAvKiByZWFkIGZyb20gdGhpcyBzb2NrZXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCAgICAgICAgICAgICAgICAvKiBzdG9yZSByZWFkIGRhdGEgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IGJ1ZmZlcnNpemUsICAgICAgIC8qIG1heCBhbW91bnQgdG8gcmVhZCAqLworICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90ICpuKSAgICAgICAgICAgICAgIC8qIGFtb3VudCBieXRlcyByZWFkICovCit7CisgIHNzaXplX3QgbnJlYWQ7CisgIHNzaXplX3QgYWxscmVhZCA9IDA7CisgIGludCByZXN1bHQ7CisgIGxvbmcgdGltZWxlZnQ7CisgICpuID0gMDsKKyAgZm9yKDs7KSB7CisgICAgdGltZWxlZnQgPSBDdXJsX3RpbWVsZWZ0KGNvbm4tPmRhdGEsIE5VTEwsIFRSVUUpOworICAgIGlmKHRpbWVsZWZ0IDwgMCkgeworICAgICAgLyogd2UgYWxyZWFkeSBnb3QgdGhlIHRpbWVvdXQgKi8KKyAgICAgIHJlc3VsdCA9IENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZihDdXJsX3NvY2tldF9yZWFkeShzb2NrZmQsIENVUkxfU09DS0VUX0JBRCwgdGltZWxlZnQpIDw9IDApIHsKKyAgICAgIHJlc3VsdCA9IH5DVVJMRV9PSzsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXN1bHQgPSBDdXJsX3JlYWRfcGxhaW4oc29ja2ZkLCBidWYsIGJ1ZmZlcnNpemUsICZucmVhZCk7CisgICAgaWYoQ1VSTEVfQUdBSU4gPT0gcmVzdWx0KQorICAgICAgY29udGludWU7CisgICAgZWxzZSBpZihyZXN1bHQpCisgICAgICBicmVhazsKKworICAgIGlmKGJ1ZmZlcnNpemUgPT0gbnJlYWQpIHsKKyAgICAgIGFsbHJlYWQgKz0gbnJlYWQ7CisgICAgICAqbiA9IGFsbHJlYWQ7CisgICAgICByZXN1bHQgPSBDVVJMRV9PSzsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZighbnJlYWQpIHsKKyAgICAgIHJlc3VsdCA9IH5DVVJMRV9PSzsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGJ1ZmZlcnNpemUgLT0gbnJlYWQ7CisgICAgYnVmICs9IG5yZWFkOworICAgIGFsbHJlYWQgKz0gbnJlYWQ7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyogVGhpcyBmdW5jdGlvbiBsb2dzIGluIHRvIGEgU09DS1M0IHByb3h5IGFuZCBzZW5kcyB0aGUgc3BlY2lmaWNzIHRvIHRoZSBmaW5hbAorKiBkZXN0aW5hdGlvbiBzZXJ2ZXIuCisqCisqIFJlZmVyZW5jZSA6CisqICAgaHR0cDovL3NvY2tzLnBlcm1lby5jb20vcHJvdG9jb2wvc29ja3M0LnByb3RvY29sCisqCisqIE5vdGUgOgorKiAgIFNldCBwcm90b2NvbDRhPXRydWUgZm9yICAiU09DS1MgNEEgKFNpbXBsZSBFeHRlbnNpb24gdG8gU09DS1MgNCBQcm90b2NvbCkiCisqICAgTm9uc3VwcG9ydCAiSWRlbnRpZmljYXRpb24gUHJvdG9jb2wgKFJGQzE0MTMpIgorKi8KK0NVUkxjb2RlIEN1cmxfU09DS1M0KGNvbnN0IGNoYXIgKnByb3h5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGludCByZW1vdGVfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICBib29sIHByb3RvY29sNGEpCit7CisjZGVmaW5lIFNPQ0tTNFJFUUxFTiAyNjIKKyAgdW5zaWduZWQgY2hhciBzb2Nrc3JlcVtTT0NLUzRSRVFMRU5dOyAvKiByb29tIGZvciBTT0NLUzQgcmVxdWVzdCBpbmNsLiB1c2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgKi8KKyAgaW50IHJlc3VsdDsKKyAgQ1VSTGNvZGUgY29kZTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgaWYoQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKSA8IDApIHsKKyAgICAvKiB0aW1lLW91dCwgYmFpbCBvdXQsIGdvIGhvbWUgKi8KKyAgICBmYWlsZihkYXRhLCAiQ29ubmVjdGlvbiB0aW1lLW91dCIpOworICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgIH0KKworICBjdXJseF9ub25ibG9jayhzb2NrLCBGQUxTRSk7CisKKyAgLyoKKyAgICogQ29tcG9zZSBzb2NrczQgcmVxdWVzdAorICAgKgorICAgKiBSZXF1ZXN0IGZvcm1hdAorICAgKgorICAgKiAgICAgKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLi4uListLS0tKworICAgKiAgICAgfCBWTiB8IENEIHwgRFNUUE9SVCB8ICAgICAgRFNUSVAgICAgICAgIHwgVVNFUklEICAgICAgIHxOVUxMfAorICAgKiAgICAgKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLi4uListLS0tKworICAgKiAjIG9mIGJ5dGVzOiAgMSAgICAxICAgICAgMiAgICAgICAgICAgICAgNCAgICAgICAgICAgdmFyaWFibGUgICAgICAgMQorICAgKi8KKworICBzb2Nrc3JlcVswXSA9IDQ7IC8qIHZlcnNpb24gKFNPQ0tTNCkgKi8KKyAgc29ja3NyZXFbMV0gPSAxOyAvKiBjb25uZWN0ICovCisgIHNvY2tzcmVxWzJdID0gKHVuc2lnbmVkIGNoYXIpKChyZW1vdGVfcG9ydCA+PiA4KSAmIDB4ZmYpOyAvKiBQT1JUIE1TQiAqLworICBzb2Nrc3JlcVszXSA9ICh1bnNpZ25lZCBjaGFyKShyZW1vdGVfcG9ydCAmIDB4ZmYpOyAgICAgICAgLyogUE9SVCBMU0IgKi8KKworICAvKiBETlMgcmVzb2x2ZSBvbmx5IGZvciBTT0NLUzQsIG5vdCBTT0NLUzRhICovCisgIGlmKCFwcm90b2NvbDRhKSB7CisgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnM7CisgICAgQ3VybF9hZGRyaW5mbyAqaHA9TlVMTDsKKyAgICBpbnQgcmM7CisKKyAgICByYyA9IEN1cmxfcmVzb2x2KGNvbm4sIGhvc3RuYW1lLCByZW1vdGVfcG9ydCwgJmRucyk7CisKKyAgICBpZihyYyA9PSBDVVJMUkVTT0xWX0VSUk9SKQorICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9QUk9YWTsKKworICAgIGlmKHJjID09IENVUkxSRVNPTFZfUEVORElORykKKyAgICAgIC8qIGlnbm9yZXMgdGhlIHJldHVybiBjb2RlLCBidXQgJ2RucycgcmVtYWlucyBOVUxMIG9uIGZhaWx1cmUgKi8KKyAgICAgICh2b2lkKUN1cmxfcmVzb2x2ZXJfd2FpdF9yZXNvbHYoY29ubiwgJmRucyk7CisKKyAgICAvKgorICAgICAqIFdlIGNhbm5vdCB1c2UgJ2hvc3RlbnQnIGFzIGEgc3RydWN0IHRoYXQgQ3VybF9yZXNvbHYoKSByZXR1cm5zLiAgSXQKKyAgICAgKiByZXR1cm5zIGEgQ3VybF9hZGRyaW5mbyBwb2ludGVyIHRoYXQgbWF5IG5vdCBhbHdheXMgbG9vayB0aGUgc2FtZS4KKyAgICAgKi8KKyAgICBpZihkbnMpCisgICAgICBocD1kbnMtPmFkZHI7CisgICAgaWYoaHApIHsKKyAgICAgIGNoYXIgYnVmWzY0XTsKKyAgICAgIHVuc2lnbmVkIHNob3J0IGlwWzRdOworICAgICAgQ3VybF9wcmludGFibGVfYWRkcmVzcyhocCwgYnVmLCBzaXplb2YoYnVmKSk7CisKKyAgICAgIGlmKDQgPT0gc3NjYW5mKCBidWYsICIlaHUuJWh1LiVodS4laHUiLAorICAgICAgICAgICAgICAgICAgICAgICZpcFswXSwgJmlwWzFdLCAmaXBbMl0sICZpcFszXSkpIHsKKyAgICAgICAgLyogU2V0IERTVElQICovCisgICAgICAgIHNvY2tzcmVxWzRdID0gKHVuc2lnbmVkIGNoYXIpaXBbMF07CisgICAgICAgIHNvY2tzcmVxWzVdID0gKHVuc2lnbmVkIGNoYXIpaXBbMV07CisgICAgICAgIHNvY2tzcmVxWzZdID0gKHVuc2lnbmVkIGNoYXIpaXBbMl07CisgICAgICAgIHNvY2tzcmVxWzddID0gKHVuc2lnbmVkIGNoYXIpaXBbM107CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGhwID0gTlVMTDsgLyogZmFpbCEgKi8KKworICAgICAgQ3VybF9yZXNvbHZfdW5sb2NrKGRhdGEsIGRucyk7IC8qIG5vdCB1c2VkIGFueW1vcmUgZnJvbSBub3cgb24gKi8KKworICAgIH0KKyAgICBpZighaHApIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVzb2x2ZSBcIiVzXCIgZm9yIFNPQ0tTNCBjb25uZWN0LiIsCisgICAgICAgICAgICBob3N0bmFtZSk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CisgICAgfQorICB9CisKKyAgLyoKKyAgICogVGhpcyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRpbmcgIklkZW50aWZpY2F0aW9uIFByb3RvY29sIChSRkMxNDEzKSIuCisgICAqLworICBzb2Nrc3JlcVs4XSA9IDA7IC8qIGVuc3VyZSBlbXB0eSB1c2VyaWQgaXMgTlVMLXRlcm1pbmF0ZWQgKi8KKyAgaWYocHJveHlfbmFtZSkgeworICAgIHNpemVfdCBwbGVuID0gc3RybGVuKHByb3h5X25hbWUpOworICAgIGlmKHBsZW4gPj0gc2l6ZW9mKHNvY2tzcmVxKSAtIDgpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJUb28gbG9uZyBTT0NLUyBwcm94eSBuYW1lLCBjYW4ndCB1c2UhXG4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIC8qIGNvcHkgdGhlIHByb3h5IG5hbWUgV0lUSCB0cmFpbGluZyB6ZXJvICovCisgICAgbWVtY3B5KHNvY2tzcmVxICsgOCwgcHJveHlfbmFtZSwgcGxlbisxKTsKKyAgfQorCisgIC8qCisgICAqIE1ha2UgY29ubmVjdGlvbgorICAgKi8KKyAgeworICAgIHNzaXplX3QgYWN0dWFscmVhZDsKKyAgICBzc2l6ZV90IHdyaXR0ZW47CisgICAgc3NpemVfdCBob3N0bmFtZWxlbiA9IDA7CisgICAgaW50IHBhY2tldHNpemUgPSA5ICsKKyAgICAgIChpbnQpc3RybGVuKChjaGFyKilzb2Nrc3JlcSArIDgpOyAvKiBzaXplIGluY2x1ZGluZyBOVUwgKi8KKworICAgIC8qIElmIFNPQ0tTNGEsIHNldCBzcGVjaWFsIGludmFsaWQgSVAgYWRkcmVzcyAwLjAuMC54ICovCisgICAgaWYocHJvdG9jb2w0YSkgeworICAgICAgc29ja3NyZXFbNF0gPSAwOworICAgICAgc29ja3NyZXFbNV0gPSAwOworICAgICAgc29ja3NyZXFbNl0gPSAwOworICAgICAgc29ja3NyZXFbN10gPSAxOworICAgICAgLyogSWYgc3RpbGwgZW5vdWdoIHJvb20gaW4gYnVmZmVyLCBhbHNvIGFwcGVuZCBob3N0bmFtZSAqLworICAgICAgaG9zdG5hbWVsZW4gPSAoc3NpemVfdClzdHJsZW4oaG9zdG5hbWUpICsgMTsgLyogbGVuZ3RoIGluY2x1ZGluZyBOVUwgKi8KKyAgICAgIGlmKHBhY2tldHNpemUgKyBob3N0bmFtZWxlbiA8PSBTT0NLUzRSRVFMRU4pCisgICAgICAgIHN0cmNweSgoY2hhciopc29ja3NyZXEgKyBwYWNrZXRzaXplLCBob3N0bmFtZSk7CisgICAgICBlbHNlCisgICAgICAgIGhvc3RuYW1lbGVuID0gMDsgLyogRmxhZzogaG9zdG5hbWUgZGlkIG5vdCBmaXQgaW4gYnVmZmVyICovCisgICAgfQorCisgICAgLyogU2VuZCByZXF1ZXN0ICovCisgICAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRzaXplICsgaG9zdG5hbWVsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndyaXR0ZW4pOworICAgIGlmKChjb2RlICE9IENVUkxFX09LKSB8fCAod3JpdHRlbiAhPSBwYWNrZXRzaXplICsgaG9zdG5hbWVsZW4pKSB7CisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgU09DS1M0IGNvbm5lY3QgcmVxdWVzdC4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGlmKHByb3RvY29sNGEgJiYgaG9zdG5hbWVsZW4gPT0gMCkgeworICAgICAgLyogU09DS1M0YSB3aXRoIHZlcnkgbG9uZyBob3N0bmFtZSAtIHNlbmQgdGhhdCBuYW1lIHNlcGFyYXRlbHkgKi8KKyAgICAgIGhvc3RuYW1lbGVuID0gKHNzaXplX3Qpc3RybGVuKGhvc3RuYW1lKSArIDE7CisgICAgICBjb2RlID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrLCAoY2hhciAqKWhvc3RuYW1lLCBob3N0bmFtZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3cml0dGVuKTsKKyAgICAgIGlmKChjb2RlICE9IENVUkxFX09LKSB8fCAod3JpdHRlbiAhPSBob3N0bmFtZWxlbikpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBzZW5kIFNPQ0tTNCBjb25uZWN0IHJlcXVlc3QuIik7CisgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICB9CisgICAgfQorCisgICAgcGFja2V0c2l6ZSA9IDg7IC8qIHJlY2VpdmUgZGF0YSBzaXplICovCisKKyAgICAvKiBSZWNlaXZlIHJlc3BvbnNlICovCisgICAgcmVzdWx0ID0gQ3VybF9ibG9ja3JlYWRfYWxsKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsIHBhY2tldHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhY3R1YWxyZWFkKTsKKyAgICBpZigocmVzdWx0ICE9IENVUkxFX09LKSB8fCAoYWN0dWFscmVhZCAhPSBwYWNrZXRzaXplKSkgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWNlaXZlIFNPQ0tTNCBjb25uZWN0IHJlcXVlc3QgYWNrLiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlc3BvbnNlIGZvcm1hdAorICAgICAqCisgICAgICogICAgICstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rCisgICAgICogICAgIHwgVk4gfCBDRCB8IERTVFBPUlQgfCAgICAgIERTVElQICAgICAgICB8CisgICAgICogICAgICstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rCisgICAgICogIyBvZiBieXRlczogIDEgICAgMSAgICAgIDIgICAgICAgICAgICAgIDQKKyAgICAgKgorICAgICAqIFZOIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSByZXBseSBjb2RlIGFuZCBzaG91bGQgYmUgMC4gQ0QgaXMgdGhlIHJlc3VsdAorICAgICAqIGNvZGUgd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICAgICoKKyAgICAgKiA5MDogcmVxdWVzdCBncmFudGVkCisgICAgICogOTE6IHJlcXVlc3QgcmVqZWN0ZWQgb3IgZmFpbGVkCisgICAgICogOTI6IHJlcXVlc3QgcmVqZWN0ZWQgYmVjYXVzZSBTT0NLUyBzZXJ2ZXIgY2Fubm90IGNvbm5lY3QgdG8KKyAgICAgKiAgICAgaWRlbnRkIG9uIHRoZSBjbGllbnQKKyAgICAgKiA5MzogcmVxdWVzdCByZWplY3RlZCBiZWNhdXNlIHRoZSBjbGllbnQgcHJvZ3JhbSBhbmQgaWRlbnRkCisgICAgICogICAgIHJlcG9ydCBkaWZmZXJlbnQgdXNlci1pZHMKKyAgICAgKi8KKworICAgIC8qIHdyb25nIHZlcnNpb24gPyAqLworICAgIGlmKHNvY2tzcmVxWzBdICE9IDApIHsKKyAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAiU09DS1M0IHJlcGx5IGhhcyB3cm9uZyB2ZXJzaW9uLCB2ZXJzaW9uIHNob3VsZCBiZSA0LiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisKKyAgICAvKiBSZXN1bHQgKi8KKyAgICBzd2l0Y2goc29ja3NyZXFbMV0pIHsKKyAgICBjYXNlIDkwOgorICAgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNCVzIHJlcXVlc3QgZ3JhbnRlZC5cbiIsIHByb3RvY29sNGE/ImEiOiIiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgOTE6CisgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNCBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIgorICAgICAgICAgICAgIiwgcmVxdWVzdCByZWplY3RlZCBvciBmYWlsZWQuIiwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKKyAgICAgICAgICAgICgoc29ja3NyZXFbOF0gPDwgOCkgfCBzb2Nrc3JlcVs5XSksCisgICAgICAgICAgICBzb2Nrc3JlcVsxXSk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIGNhc2UgOTI6CisgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNCBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIgorICAgICAgICAgICAgIiwgcmVxdWVzdCByZWplY3RlZCBiZWNhdXNlIFNPQ0tTIHNlcnZlciBjYW5ub3QgY29ubmVjdCB0byAiCisgICAgICAgICAgICAiaWRlbnRkIG9uIHRoZSBjbGllbnQuIiwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKKyAgICAgICAgICAgICgoc29ja3NyZXFbOF0gPDwgOCkgfCBzb2Nrc3JlcVs5XSksCisgICAgICAgICAgICBzb2Nrc3JlcVsxXSk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIGNhc2UgOTM6CisgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNCBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIgorICAgICAgICAgICAgIiwgcmVxdWVzdCByZWplY3RlZCBiZWNhdXNlIHRoZSBjbGllbnQgcHJvZ3JhbSBhbmQgaWRlbnRkICIKKyAgICAgICAgICAgICJyZXBvcnQgZGlmZmVyZW50IHVzZXItaWRzLiIsCisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs0XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNV0sCisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs2XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbN10sCisgICAgICAgICAgICAoKHNvY2tzcmVxWzhdIDw8IDgpIHwgc29ja3NyZXFbOV0pLAorICAgICAgICAgICAgc29ja3NyZXFbMV0pOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICBkZWZhdWx0OgorICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICJDYW4ndCBjb21wbGV0ZSBTT0NLUzQgY29ubmVjdGlvbiB0byAlZC4lZC4lZC4lZDolZC4gKCVkKSIKKyAgICAgICAgICAgICIsIFVua25vd24uIiwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKKyAgICAgICAgICAgICgoc29ja3NyZXFbOF0gPDwgOCkgfCBzb2Nrc3JlcVs5XSksCisgICAgICAgICAgICBzb2Nrc3JlcVsxXSk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgfQorCisgIGN1cmx4X25vbmJsb2NrKHNvY2ssIFRSVUUpOworCisgIHJldHVybiBDVVJMRV9PSzsgLyogUHJveHkgd2FzIHN1Y2Nlc3NmdWwhICovCit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGxvZ3MgaW4gdG8gYSBTT0NLUzUgcHJveHkgYW5kIHNlbmRzIHRoZSBzcGVjaWZpY3MgdG8gdGhlIGZpbmFsCisgKiBkZXN0aW5hdGlvbiBzZXJ2ZXIuCisgKi8KK0NVUkxjb2RlIEN1cmxfU09DS1M1KGNvbnN0IGNoYXIgKnByb3h5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm94eV9wYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgaW50IHJlbW90ZV9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgLyoKKyAgICBBY2NvcmRpbmcgdG8gdGhlIFJGQzE5MjgsIHNlY3Rpb24gIjYuICBSZXBsaWVzIi4gVGhpcyBpcyB3aGF0IGEgU09DSzUKKyAgICByZXBsaWVzOgorCisgICAgICAgICstLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKyAgICAgICAgfFZFUiB8IFJFUCB8ICBSU1YgIHwgQVRZUCB8IEJORC5BRERSIHwgQk5ELlBPUlQgfAorICAgICAgICArLS0tLSstLS0tLSstLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgICAgIHwgMSAgfCAgMSAgfCBYJzAwJyB8ICAxICAgfCBWYXJpYWJsZSB8ICAgIDIgICAgIHwKKyAgICAgICAgKy0tLS0rLS0tLS0rLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKworCisgICAgV2hlcmU6CisKKyAgICBvICBWRVIgICAgcHJvdG9jb2wgdmVyc2lvbjogWCcwNScKKyAgICBvICBSRVAgICAgUmVwbHkgZmllbGQ6CisgICAgbyAgWCcwMCcgc3VjY2VlZGVkCisgICovCisKKyAgdW5zaWduZWQgY2hhciBzb2Nrc3JlcVs2MDBdOyAvKiByb29tIGZvciBsYXJnZSB1c2VyL3B3ICgyNTUgbWF4IGVhY2gpICovCisgIHNzaXplX3QgYWN0dWFscmVhZDsKKyAgc3NpemVfdCB3cml0dGVuOworICBpbnQgcmVzdWx0OworICBDVVJMY29kZSBjb2RlOworICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgbG9uZyB0aW1lb3V0OworICBib29sIHNvY2tzNV9yZXNvbHZlX2xvY2FsID0gKGNvbm4tPnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfU09DS1M1KT9UUlVFOkZBTFNFOworICBjb25zdCBzaXplX3QgaG9zdG5hbWVfbGVuID0gc3RybGVuKGhvc3RuYW1lKTsKKyAgc3NpemVfdCBwYWNrZXRzaXplID0gMDsKKworICAvKiBSRkMxOTI4IGNoYXB0ZXIgNSBzcGVjaWZpZXMgbWF4IDI1NSBjaGFycyBmb3IgZG9tYWluIG5hbWUgaW4gcGFja2V0ICovCisgIGlmKCFzb2NrczVfcmVzb2x2ZV9sb2NhbCAmJiBob3N0bmFtZV9sZW4gPiAyNTUpIHsKKyAgICBpbmZvZihjb25uLT5kYXRhLCJTT0NLUzU6IHNlcnZlciByZXNvbHZpbmcgZGlzYWJsZWQgZm9yIGhvc3RuYW1lcyBvZiAiCisgICAgICAgICAgImxlbmd0aCA+IDI1NSBbYWN0dWFsIGxlbj0lenVdXG4iLCBob3N0bmFtZV9sZW4pOworICAgIHNvY2tzNV9yZXNvbHZlX2xvY2FsID0gVFJVRTsKKyAgfQorCisgIC8qIGdldCB0aW1lb3V0ICovCisgIHRpbWVvdXQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOworCisgIGlmKHRpbWVvdXQgPCAwKSB7CisgICAgLyogdGltZS1vdXQsIGJhaWwgb3V0LCBnbyBob21lICovCisgICAgZmFpbGYoZGF0YSwgIkNvbm5lY3Rpb24gdGltZS1vdXQiKTsKKyAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICB9CisKKyAgY3VybHhfbm9uYmxvY2soc29jaywgVFJVRSk7CisKKyAgLyogd2FpdCB1bnRpbCBzb2NrZXQgZ2V0cyBjb25uZWN0ZWQgKi8KKyAgcmVzdWx0ID0gQ3VybF9zb2NrZXRfcmVhZHkoQ1VSTF9TT0NLRVRfQkFELCBzb2NrLCB0aW1lb3V0KTsKKworICBpZigtMSA9PSByZXN1bHQpIHsKKyAgICBmYWlsZihjb25uLT5kYXRhLCAiU09DS1M1OiBubyBjb25uZWN0aW9uIGhlcmUiKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisgIGVsc2UgaWYoMCA9PSByZXN1bHQpIHsKKyAgICBmYWlsZihjb25uLT5kYXRhLCAiU09DS1M1OiBjb25uZWN0aW9uIHRpbWVvdXQiKTsKKyAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICB9CisKKyAgaWYocmVzdWx0ICYgQ1VSTF9DU0VMRUNUX0VSUikgeworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTT0NLUzU6IGVycm9yIG9jY3VycmVkIGR1cmluZyBjb25uZWN0aW9uIik7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgfQorCisgIHNvY2tzcmVxWzBdID0gNTsgLyogdmVyc2lvbiAqLworI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgc29ja3NyZXFbMV0gPSAoY2hhcikocHJveHlfbmFtZSA/IDMgOiAyKTsgLyogbnVtYmVyIG9mIG1ldGhvZHMgKGJlbG93KSAqLworICBzb2Nrc3JlcVsyXSA9IDA7IC8qIG5vIGF1dGhlbnRpY2F0aW9uICovCisgIHNvY2tzcmVxWzNdID0gMTsgLyogZ3NzYXBpICovCisgIHNvY2tzcmVxWzRdID0gMjsgLyogdXNlcm5hbWUvcGFzc3dvcmQgKi8KKyNlbHNlCisgIHNvY2tzcmVxWzFdID0gKGNoYXIpKHByb3h5X25hbWUgPyAyIDogMSk7IC8qIG51bWJlciBvZiBtZXRob2RzIChiZWxvdykgKi8KKyAgc29ja3NyZXFbMl0gPSAwOyAvKiBubyBhdXRoZW50aWNhdGlvbiAqLworICBzb2Nrc3JlcVszXSA9IDI7IC8qIHVzZXJuYW1lL3Bhc3N3b3JkICovCisjZW5kaWYKKworICBjdXJseF9ub25ibG9jayhzb2NrLCBGQUxTRSk7CisKKyAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwgKDIgKyAoaW50KXNvY2tzcmVxWzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJndyaXR0ZW4pOworICBpZigoY29kZSAhPSBDVVJMRV9PSykgfHwgKHdyaXR0ZW4gIT0gKDIgKyAoaW50KXNvY2tzcmVxWzFdKSkpIHsKKyAgICBmYWlsZihkYXRhLCAiVW5hYmxlIHRvIHNlbmQgaW5pdGlhbCBTT0NLUzUgcmVxdWVzdC4iKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisKKyAgY3VybHhfbm9uYmxvY2soc29jaywgVFJVRSk7CisKKyAgcmVzdWx0ID0gQ3VybF9zb2NrZXRfcmVhZHkoc29jaywgQ1VSTF9TT0NLRVRfQkFELCB0aW1lb3V0KTsKKworICBpZigtMSA9PSByZXN1bHQpIHsKKyAgICBmYWlsZihjb25uLT5kYXRhLCAiU09DS1M1IG5vdGhpbmcgdG8gcmVhZCIpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIH0KKyAgZWxzZSBpZigwID09IHJlc3VsdCkgeworICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTT0NLUzUgcmVhZCB0aW1lb3V0Iik7CisgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgfQorCisgIGlmKHJlc3VsdCAmIENVUkxfQ1NFTEVDVF9FUlIpIHsKKyAgICBmYWlsZihjb25uLT5kYXRhLCAiU09DS1M1IHJlYWQgZXJyb3Igb2NjdXJyZWQiKTsKKyAgICByZXR1cm4gQ1VSTEVfUkVDVl9FUlJPUjsKKyAgfQorCisgIGN1cmx4X25vbmJsb2NrKHNvY2ssIEZBTFNFKTsKKworICByZXN1bHQ9Q3VybF9ibG9ja3JlYWRfYWxsKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsIDIsICZhY3R1YWxyZWFkKTsKKyAgaWYoKHJlc3VsdCAhPSBDVVJMRV9PSykgfHwgKGFjdHVhbHJlYWQgIT0gMikpIHsKKyAgICBmYWlsZihkYXRhLCAiVW5hYmxlIHRvIHJlY2VpdmUgaW5pdGlhbCBTT0NLUzUgcmVzcG9uc2UuIik7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgfQorCisgIGlmKHNvY2tzcmVxWzBdICE9IDUpIHsKKyAgICBmYWlsZihkYXRhLCAiUmVjZWl2ZWQgaW52YWxpZCB2ZXJzaW9uIGluIGluaXRpYWwgU09DS1M1IHJlc3BvbnNlLiIpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIH0KKyAgaWYoc29ja3NyZXFbMV0gPT0gMCkgeworICAgIC8qIE5vdGhpbmcgdG8gZG8sIG5vIGF1dGhlbnRpY2F0aW9uIG5lZWRlZCAqLworICAgIDsKKyAgfQorI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgZWxzZSBpZihzb2Nrc3JlcVsxXSA9PSAxKSB7CisgICAgY29kZSA9IEN1cmxfU09DS1M1X2dzc2FwaV9uZWdvdGlhdGUoc29ja2luZGV4LCBjb25uKTsKKyAgICBpZihjb2RlICE9IENVUkxFX09LKSB7CisgICAgICBmYWlsZihkYXRhLCAiVW5hYmxlIHRvIG5lZ290aWF0ZSBTT0NLUzUgZ3NzYXBpIGNvbnRleHQuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgfQorI2VuZGlmCisgIGVsc2UgaWYoc29ja3NyZXFbMV0gPT0gMikgeworICAgIC8qIE5lZWRzIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgKi8KKyAgICBzaXplX3QgdXNlcmxlbiwgcHdsZW47CisgICAgaW50IGxlbjsKKyAgICBpZihwcm94eV9uYW1lICYmIHByb3h5X3Bhc3N3b3JkKSB7CisgICAgICB1c2VybGVuID0gc3RybGVuKHByb3h5X25hbWUpOworICAgICAgcHdsZW4gPSBzdHJsZW4ocHJveHlfcGFzc3dvcmQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHVzZXJsZW4gPSAwOworICAgICAgcHdsZW4gPSAwOworICAgIH0KKworICAgIC8qICAgdXNlcm5hbWUvcGFzc3dvcmQgcmVxdWVzdCBsb29rcyBsaWtlCisgICAgICogKy0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgICogfFZFUiB8IFVMRU4gfCAgVU5BTUUgICB8IFBMRU4gfCAgUEFTU1dEICB8CisgICAgICogKy0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgICogfCAxICB8ICAxICAgfCAxIHRvIDI1NSB8ICAxICAgfCAxIHRvIDI1NSB8CisgICAgICogKy0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgICovCisgICAgbGVuID0gMDsKKyAgICBzb2Nrc3JlcVtsZW4rK10gPSAxOyAgICAvKiB1c2VybmFtZS9wdyBzdWJuZWdvdGlhdGlvbiB2ZXJzaW9uICovCisgICAgc29ja3NyZXFbbGVuKytdID0gKHVuc2lnbmVkIGNoYXIpIHVzZXJsZW47CisgICAgaWYocHJveHlfbmFtZSAmJiB1c2VybGVuKQorICAgICAgbWVtY3B5KHNvY2tzcmVxICsgbGVuLCBwcm94eV9uYW1lLCB1c2VybGVuKTsKKyAgICBsZW4gKz0gKGludCl1c2VybGVuOworICAgIHNvY2tzcmVxW2xlbisrXSA9ICh1bnNpZ25lZCBjaGFyKSBwd2xlbjsKKyAgICBpZihwcm94eV9wYXNzd29yZCAmJiBwd2xlbikKKyAgICAgIG1lbWNweShzb2Nrc3JlcSArIGxlbiwgcHJveHlfcGFzc3dvcmQsIHB3bGVuKTsKKyAgICBsZW4gKz0gKGludClwd2xlbjsKKworICAgIGNvZGUgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsIGxlbiwgJndyaXR0ZW4pOworICAgIGlmKChjb2RlICE9IENVUkxFX09LKSB8fCAobGVuICE9IHdyaXR0ZW4pKSB7CisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgU09DS1M1IHN1Yi1uZWdvdGlhdGlvbiByZXF1ZXN0LiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisKKyAgICByZXN1bHQ9Q3VybF9ibG9ja3JlYWRfYWxsKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsIDIsICZhY3R1YWxyZWFkKTsKKyAgICBpZigocmVzdWx0ICE9IENVUkxFX09LKSB8fCAoYWN0dWFscmVhZCAhPSAyKSkgeworICAgICAgZmFpbGYoZGF0YSwgIlVuYWJsZSB0byByZWNlaXZlIFNPQ0tTNSBzdWItbmVnb3RpYXRpb24gcmVzcG9uc2UuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKworICAgIC8qIGlnbm9yZSB0aGUgZmlyc3QgKFZFUikgYnl0ZSAqLworICAgIGlmKHNvY2tzcmVxWzFdICE9IDApIHsgLyogc3RhdHVzICovCisgICAgICBmYWlsZihkYXRhLCAiVXNlciB3YXMgcmVqZWN0ZWQgYnkgdGhlIFNPQ0tTNSBzZXJ2ZXIgKCVkICVkKS4iLAorICAgICAgICAgICAgc29ja3NyZXFbMF0sIHNvY2tzcmVxWzFdKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorCisgICAgLyogRXZlcnl0aGluZyBpcyBnb29kIHNvIGZhciwgdXNlciB3YXMgYXV0aGVudGljYXRlZCEgKi8KKyAgfQorICBlbHNlIHsKKyAgICAvKiBlcnJvciAqLworI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgICBpZihzb2Nrc3JlcVsxXSA9PSAyNTUpIHsKKyNlbHNlCisgICAgaWYoc29ja3NyZXFbMV0gPT0gMSkgeworICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICJTT0NLUzUgR1NTQVBJIHBlci1tZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBlbHNlIGlmKHNvY2tzcmVxWzFdID09IDI1NSkgeworI2VuZGlmCisgICAgICBpZighcHJveHlfbmFtZSB8fCAhKnByb3h5X25hbWUpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICAgIk5vIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB3YXMgYWNjZXB0YWJsZS4gKEl0IGlzIHF1aXRlIGxpa2VseSIKKyAgICAgICAgICAgICAgIiB0aGF0IHRoZSBTT0NLUzUgc2VydmVyIHdhbnRlZCBhIHVzZXJuYW1lL3Bhc3N3b3JkLCBzaW5jZSBub25lIgorICAgICAgICAgICAgICAiIHdhcyBzdXBwbGllZCB0byB0aGUgc2VydmVyIG9uIHRoaXMgY29ubmVjdGlvbi4pIik7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIk5vIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB3YXMgYWNjZXB0YWJsZS4iKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICJVbmRvY3VtZW50ZWQgU09DS1M1IG1vZGUgYXR0ZW1wdGVkIHRvIGJlIHVzZWQgYnkgc2VydmVyLiIpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisgIH0KKworICAvKiBBdXRoZW50aWNhdGlvbiBpcyBjb21wbGV0ZSwgbm93IHNwZWNpZnkgZGVzdGluYXRpb24gdG8gdGhlIHByb3h5ICovCisgIHNvY2tzcmVxWzBdID0gNTsgLyogdmVyc2lvbiAoU09DS1M1KSAqLworICBzb2Nrc3JlcVsxXSA9IDE7IC8qIGNvbm5lY3QgKi8KKyAgc29ja3NyZXFbMl0gPSAwOyAvKiBtdXN0IGJlIHplcm8gKi8KKworICBpZighc29ja3M1X3Jlc29sdmVfbG9jYWwpIHsKKyAgICBwYWNrZXRzaXplID0gKHNzaXplX3QpKDUgKyBob3N0bmFtZV9sZW4gKyAyKTsKKworICAgIHNvY2tzcmVxWzNdID0gMzsgLyogQVRZUDogZG9tYWluIG5hbWUgPSAzICovCisgICAgc29ja3NyZXFbNF0gPSAoY2hhcikgaG9zdG5hbWVfbGVuOyAvKiBhZGRyZXNzIGxlbmd0aCAqLworICAgIG1lbWNweSgmc29ja3NyZXFbNV0sIGhvc3RuYW1lLCBob3N0bmFtZV9sZW4pOyAvKiBhZGRyZXNzIGJ5dGVzIHcvbyBOVUxMICovCisKKyAgICAvKiBQT1JUIE1TQiAqLworICAgIHNvY2tzcmVxW2hvc3RuYW1lX2xlbis1XSA9ICh1bnNpZ25lZCBjaGFyKSgocmVtb3RlX3BvcnQgPj4gOCkgJiAweGZmKTsKKyAgICAvKiBQT1JUIExTQiAqLworICAgIHNvY2tzcmVxW2hvc3RuYW1lX2xlbis2XSA9ICh1bnNpZ25lZCBjaGFyKShyZW1vdGVfcG9ydCAmIDB4ZmYpOworICB9CisgIGVsc2UgeworICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zOworICAgIEN1cmxfYWRkcmluZm8gKmhwPU5VTEw7CisgICAgaW50IHJjID0gQ3VybF9yZXNvbHYoY29ubiwgaG9zdG5hbWUsIHJlbW90ZV9wb3J0LCAmZG5zKTsKKworICAgIHBhY2tldHNpemUgPSAxMDsKKworICAgIHNvY2tzcmVxWzNdID0gMTsgLyogSVB2NCA9IDEgKi8KKworICAgIGlmKHJjID09IENVUkxSRVNPTFZfRVJST1IpCisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CisKKyAgICBpZihyYyA9PSBDVVJMUkVTT0xWX1BFTkRJTkcpIHsKKyAgICAgIC8qIHRoaXMgcmVxdWlyZXMgdGhhdCB3ZSdyZSBpbiAid2FpdCBmb3IgcmVzb2x2ZSIgc3RhdGUgKi8KKyAgICAgIGNvZGUgPSBDdXJsX3Jlc29sdmVyX3dhaXRfcmVzb2x2KGNvbm4sICZkbnMpOworICAgICAgaWYoY29kZSAhPSBDVVJMRV9PSykKKyAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBXZSBjYW5ub3QgdXNlICdob3N0ZW50JyBhcyBhIHN0cnVjdCB0aGF0IEN1cmxfcmVzb2x2KCkgcmV0dXJucy4gIEl0CisgICAgICogcmV0dXJucyBhIEN1cmxfYWRkcmluZm8gcG9pbnRlciB0aGF0IG1heSBub3QgYWx3YXlzIGxvb2sgdGhlIHNhbWUuCisgICAgICovCisgICAgaWYoZG5zKQorICAgICAgaHA9ZG5zLT5hZGRyOworICAgIGlmKGhwKSB7CisgICAgICBjaGFyIGJ1Zls2NF07CisgICAgICB1bnNpZ25lZCBzaG9ydCBpcFs0XTsKKyAgICAgIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoaHAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisgICAgICBpZig0ID09IHNzY2FuZiggYnVmLCAiJWh1LiVodS4laHUuJWh1IiwKKyAgICAgICAgICAgICAgICAgICAgICAmaXBbMF0sICZpcFsxXSwgJmlwWzJdLCAmaXBbM10pKSB7CisgICAgICAgIHNvY2tzcmVxWzRdID0gKHVuc2lnbmVkIGNoYXIpaXBbMF07CisgICAgICAgIHNvY2tzcmVxWzVdID0gKHVuc2lnbmVkIGNoYXIpaXBbMV07CisgICAgICAgIHNvY2tzcmVxWzZdID0gKHVuc2lnbmVkIGNoYXIpaXBbMl07CisgICAgICAgIHNvY2tzcmVxWzddID0gKHVuc2lnbmVkIGNoYXIpaXBbM107CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGhwID0gTlVMTDsgLyogZmFpbCEgKi8KKworICAgICAgQ3VybF9yZXNvbHZfdW5sb2NrKGRhdGEsIGRucyk7IC8qIG5vdCB1c2VkIGFueW1vcmUgZnJvbSBub3cgb24gKi8KKyAgICB9CisgICAgaWYoIWhwKSB7CisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlc29sdmUgXCIlc1wiIGZvciBTT0NLUzUgY29ubmVjdC4iLAorICAgICAgICAgICAgaG9zdG5hbWUpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOworICAgIH0KKworICAgIHNvY2tzcmVxWzhdID0gKHVuc2lnbmVkIGNoYXIpKChyZW1vdGVfcG9ydCA+PiA4KSAmIDB4ZmYpOyAvKiBQT1JUIE1TQiAqLworICAgIHNvY2tzcmVxWzldID0gKHVuc2lnbmVkIGNoYXIpKHJlbW90ZV9wb3J0ICYgMHhmZik7ICAgICAgICAvKiBQT1JUIExTQiAqLworICB9CisKKyNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCisgIGlmKGNvbm4tPnNvY2tzNV9nc3NhcGlfZW5jdHlwZSkgeworICAgIGZhaWxmKGRhdGEsICJTT0NLUzUgZ3NzYXBpIHByb3RlY3Rpb24gbm90IHlldCBpbXBsZW1lbnRlZC4iKTsKKyAgfQorICBlbHNlCisjZW5kaWYKKyAgICBjb2RlID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrLCAoY2hhciAqKXNvY2tzcmVxLCBwYWNrZXRzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3cml0dGVuKTsKKyAgaWYoKGNvZGUgIT0gQ1VSTEVfT0spIHx8ICh3cml0dGVuICE9IHBhY2tldHNpemUpKSB7CisgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBzZW5kIFNPQ0tTNSBjb25uZWN0IHJlcXVlc3QuIik7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgfQorCisgIHBhY2tldHNpemUgPSAxMDsgLyogbWluaW11bSBwYWNrZXQgc2l6ZSBpcyAxMCAqLworCisjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQorICBpZihjb25uLT5zb2NrczVfZ3NzYXBpX2VuY3R5cGUpIHsKKyAgICBmYWlsZihkYXRhLCAiU09DS1M1IGdzc2FwaSBwcm90ZWN0aW9uIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIik7CisgIH0KKyAgZWxzZQorI2VuZGlmCisgICAgcmVzdWx0ID0gQ3VybF9ibG9ja3JlYWRfYWxsKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsIHBhY2tldHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhY3R1YWxyZWFkKTsKKyAgaWYoKHJlc3VsdCAhPSBDVVJMRV9PSykgfHwgKGFjdHVhbHJlYWQgIT0gcGFja2V0c2l6ZSkpIHsKKyAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlY2VpdmUgU09DS1M1IGNvbm5lY3QgcmVxdWVzdCBhY2suIik7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgfQorCisgIGlmKHNvY2tzcmVxWzBdICE9IDUpIHsgLyogdmVyc2lvbiAqLworICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgIlNPQ0tTNSByZXBseSBoYXMgd3JvbmcgdmVyc2lvbiwgdmVyc2lvbiBzaG91bGQgYmUgNS4iKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisgIGlmKHNvY2tzcmVxWzFdICE9IDApIHsgLyogQW55dGhpbmcgYmVzaWRlcyAwIGlzIGFuIGVycm9yICovCisgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNSBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIiwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKKyAgICAgICAgICAgICgoc29ja3NyZXFbOF0gPDwgOCkgfCBzb2Nrc3JlcVs5XSksCisgICAgICAgICAgICBzb2Nrc3JlcVsxXSk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisKKyAgLyogRml4OiBpbiBnZW5lcmFsLCByZXR1cm5lZCBCTkQuQUREUiBpcyB2YXJpYWJsZSBsZW5ndGggcGFyYW1ldGVyIGJ5IFJGQworICAgICAxOTI4LCBzbyB0aGUgcmVwbHkgcGFja2V0IHNob3VsZCBiZSByZWFkIHVudGlsIHRoZSBlbmQgdG8gYXZvaWQgZXJyb3JzIGF0CisgICAgIHN1YnNlcXVlbnQgcHJvdG9jb2wgbGV2ZWwuCisKKyAgICArLS0tLSstLS0tLSstLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgfFZFUiB8IFJFUCB8ICBSU1YgIHwgQVRZUCB8IEJORC5BRERSIHwgQk5ELlBPUlQgfAorICAgICstLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKyAgICB8IDEgIHwgIDEgIHwgWCcwMCcgfCAgMSAgIHwgVmFyaWFibGUgfCAgICAyICAgICB8CisgICAgKy0tLS0rLS0tLS0rLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKworCisgICAgIEFUWVA6CisgICAgIG8gIElQIHY0IGFkZHJlc3M6IFgnMDEnLCBCTkQuQUREUiA9IDQgYnl0ZQorICAgICBvICBkb21haW4gbmFtZTogIFgnMDMnLCBCTkQuQUREUiA9IFsgMSBieXRlIGxlbmd0aCwgc3RyaW5nIF0KKyAgICAgbyAgSVAgdjYgYWRkcmVzczogWCcwNCcsIEJORC5BRERSID0gMTYgYnl0ZQorICAgICAqLworCisgIC8qIENhbGN1bGF0ZSByZWFsIHBhY2tldCBzaXplICovCisgIGlmKHNvY2tzcmVxWzNdID09IDMpIHsKKyAgICAvKiBkb21haW4gbmFtZSAqLworICAgIGludCBhZGRybGVuID0gKGludCkgc29ja3NyZXFbNF07CisgICAgcGFja2V0c2l6ZSA9IDUgKyBhZGRybGVuICsgMjsKKyAgfQorICBlbHNlIGlmKHNvY2tzcmVxWzNdID09IDQpIHsKKyAgICAvKiBJUHY2ICovCisgICAgcGFja2V0c2l6ZSA9IDQgKyAxNiArIDI7CisgIH0KKworICAvKiBBdCB0aGlzIHBvaW50IHdlIGFscmVhZHkgcmVhZCBmaXJzdCAxMCBieXRlcyAqLworI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgaWYoIWNvbm4tPnNvY2tzNV9nc3NhcGlfZW5jdHlwZSkgeworICAgIC8qIGRlY3J5cHRfZ3NzYXBpX2Jsb2NrcmVhZCBhbHJlYWR5IHJlYWQgdGhlIHdob2xlIHBhY2tldCAqLworI2VuZGlmCisgICAgaWYocGFja2V0c2l6ZSA+IDEwKSB7CisgICAgICBwYWNrZXRzaXplIC09IDEwOworICAgICAgcmVzdWx0ID0gQ3VybF9ibG9ja3JlYWRfYWxsKGNvbm4sIHNvY2ssIChjaGFyICopJnNvY2tzcmVxWzEwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRzaXplLCAmYWN0dWFscmVhZCk7CisgICAgICBpZigocmVzdWx0ICE9IENVUkxFX09LKSB8fCAoYWN0dWFscmVhZCAhPSBwYWNrZXRzaXplKSkgeworICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlY2VpdmUgU09DS1M1IGNvbm5lY3QgcmVxdWVzdCBhY2suIik7CisgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICB9CisgICAgfQorI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgfQorI2VuZGlmCisKKyAgY3VybHhfbm9uYmxvY2soc29jaywgVFJVRSk7CisgIHJldHVybiBDVVJMRV9PSzsgLyogUHJveHkgd2FzIHN1Y2Nlc3NmdWwhICovCit9CisKKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfUFJPWFkgKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3NvY2tzLmggYi9jdXJsLTcuMjUuMC9saWIvc29ja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzRjYzdmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3NvY2tzLmgKQEAgLTAsMCArMSw3NiBAQAorI2lmbmRlZiBfX0NVUkxfU09DS1NfSAorI2RlZmluZSBfX0NVUkxfU09DS1NfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisjZGVmaW5lIEN1cmxfU09DS1M0KGEsYixjLGQsZSxmKSBDVVJMRV9OT1RfQlVJTFRfSU4KKyNkZWZpbmUgQ3VybF9TT0NLUzUoYSxiLGMsZCxlLGYpIENVUkxFX05PVF9CVUlMVF9JTgorI2Vsc2UKKy8qCisgKiBIZWxwZXIgcmVhZC1mcm9tLXNvY2tldCBmdW5jdGlvbnMuIERvZXMgdGhlIHNhbWUgYXMgQ3VybF9yZWFkKCkgYnV0IGl0CisgKiBibG9ja3MgdW50aWwgYWxsIGJ5dGVzIGFtb3VudCBvZiBidWZmZXJzaXplIHdpbGwgYmUgcmVhZC4gTm8gbW9yZSwgbm8gbGVzcy4KKyAqCisgKiBUaGlzIGlzIFNUVVBJRCBCTE9DS0lORyBiZWhhdmlvdXIgd2hpY2ggd2UgZnJvd24gdXBvbiwgYnV0IHJpZ2h0IG5vdyB0aGlzCisgKiBpcyB3aGF0IHdlIGhhdmUuLi4KKyAqLworaW50IEN1cmxfYmxvY2tyZWFkX2FsbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgYnVmZmVyc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCAqbik7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGxvZ3MgaW4gdG8gYSBTT0NLUzQoYSkgcHJveHkgYW5kIHNlbmRzIHRoZSBzcGVjaWZpY3MgdG8gdGhlCisgKiBmaW5hbCBkZXN0aW5hdGlvbiBzZXJ2ZXIuCisgKi8KK0NVUkxjb2RlIEN1cmxfU09DS1M0KGNvbnN0IGNoYXIgKnByb3h5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGludCByZW1vdGVfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICBib29sIHByb3RvY29sNGEpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBsb2dzIGluIHRvIGEgU09DS1M1IHByb3h5IGFuZCBzZW5kcyB0aGUgc3BlY2lmaWNzIHRvIHRoZQorICogZmluYWwgZGVzdGluYXRpb24gc2VydmVyLgorICovCitDVVJMY29kZSBDdXJsX1NPQ0tTNShjb25zdCBjaGFyICpwcm94eV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJveHlfcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGludCByZW1vdGVfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCisjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQorLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgc29ja3NzNSBnc3NhcGllIG5lZ290aWF0aW9uIGFuZCBpbml0aWFsaXNhdGlvbgorICovCitDVVJMY29kZSBDdXJsX1NPQ0tTNV9nc3NhcGlfbmVnb3RpYXRlKGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CisjZW5kaWYKKworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9QUk9YWSAqLworCisjZW5kaWYgIC8qIF9fQ1VSTF9TT0NLU19IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc29ja3NfZ3NzYXBpLmMgYi9jdXJsLTcuMjUuMC9saWIvc29ja3NfZ3NzYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzYTk0NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zb2Nrc19nc3NhcGkuYwpAQCAtMCwwICsxLDUzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCBNYXJrdXMgTW9lbGxlciwgPG1hcmt1c19tb2VsbGVyQGNvbXB1c2VydmUuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisKKyNpZmRlZiBIQVZFX0dTU0FQSQorI2lmZGVmIEhBVkVfT0xEX0dTU01JVAorI2RlZmluZSBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRSBnc3NfbnRfc2VydmljZV9uYW1lCisjZGVmaW5lIE5DT01QQVQgMQorI2VuZGlmCisjaWZuZGVmIGdzc19udF9zZXJ2aWNlX25hbWUKKyNkZWZpbmUgZ3NzX250X3NlcnZpY2VfbmFtZSBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRQorI2VuZGlmCisKKyNpbmNsdWRlICJjdXJsX2dzc2FwaS5oIgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJ0aW1ldmFsLmgiCisjaW5jbHVkZSAic29ja3MuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0YXRpYyBnc3NfY3R4X2lkX3QgZ3NzX2NvbnRleHQgPSBHU1NfQ19OT19DT05URVhUOworCisvKgorICogSGVscGVyIGdzc2FwaSBlcnJvciBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfZ3NzX2VycihzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBPTV91aW50MzIgbWFqb3Jfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIE9NX3VpbnQzMiBtaW5vcl9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZnVuY3Rpb24pCit7CisgIGlmKEdTU19FUlJPUihtYWpvcl9zdGF0dXMpKSB7CisgICAgT01fdWludDMyIG1hal9zdGF0LG1pbl9zdGF0OworICAgIE9NX3VpbnQzMiBtc2dfY3R4ID0gMDsKKyAgICBnc3NfYnVmZmVyX2Rlc2Mgc3RhdHVzX3N0cmluZzsKKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKyAgICBzaXplX3QgbGVuOworCisgICAgbGVuID0gMDsKKyAgICBtc2dfY3R4ID0gMDsKKyAgICB3aGlsZSghbXNnX2N0eCkgeworICAgICAgLyogY29udmVydCBtYWpvciBzdGF0dXMgY29kZSAoR1NTLUFQSSBlcnJvcikgdG8gdGV4dCAqLworICAgICAgbWFqX3N0YXQgPSBnc3NfZGlzcGxheV9zdGF0dXMoJm1pbl9zdGF0LCBtYWpvcl9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19HU1NfQ09ERSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05VTExfT0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1zZ19jdHgsICZzdGF0dXNfc3RyaW5nKTsKKyAgICAgIGlmKG1hal9zdGF0ID09IEdTU19TX0NPTVBMRVRFKSB7CisgICAgICAgIGlmKHNpemVvZihidWYpID4gbGVuICsgc3RhdHVzX3N0cmluZy5sZW5ndGggKyAxKSB7CisgICAgICAgICAgc3RyY3B5KGJ1ZitsZW4sIChjaGFyKikgc3RhdHVzX3N0cmluZy52YWx1ZSk7CisgICAgICAgICAgbGVuICs9IHN0YXR1c19zdHJpbmcubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmbWluX3N0YXQsICZzdGF0dXNfc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJm1pbl9zdGF0LCAmc3RhdHVzX3N0cmluZyk7CisgICAgfQorICAgIGlmKHNpemVvZihidWYpID4gbGVuICsgMykgeworICAgICAgc3RyY3B5KGJ1ZitsZW4sICIuXG4iKTsKKyAgICAgIGxlbiArPSAyOworICAgIH0KKyAgICBtc2dfY3R4ID0gMDsKKyAgICB3aGlsZSghbXNnX2N0eCkgeworICAgICAgLyogY29udmVydCBtaW5vciBzdGF0dXMgY29kZSAodW5kZXJseWluZyByb3V0aW5lIGVycm9yKSB0byB0ZXh0ICovCisgICAgICBtYWpfc3RhdCA9IGdzc19kaXNwbGF5X3N0YXR1cygmbWluX3N0YXQsIG1pbm9yX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX01FQ0hfQ09ERSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05VTExfT0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1zZ19jdHgsICZzdGF0dXNfc3RyaW5nKTsKKyAgICAgIGlmKG1hal9zdGF0ID09IEdTU19TX0NPTVBMRVRFKSB7CisgICAgICAgIGlmKHNpemVvZihidWYpID4gbGVuICsgc3RhdHVzX3N0cmluZy5sZW5ndGgpCisgICAgICAgICAgc3RyY3B5KGJ1ZitsZW4sIChjaGFyKikgc3RhdHVzX3N0cmluZy52YWx1ZSk7CisgICAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmbWluX3N0YXQsICZzdGF0dXNfc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJm1pbl9zdGF0LCAmc3RhdHVzX3N0cmluZyk7CisgICAgfQorICAgIGZhaWxmKGRhdGEsICJHU1NBUEkgZXJyb3I6ICVzIGZhaWxlZDpcbiVzXG4iLCBmdW5jdGlvbiwgYnVmKTsKKyAgICByZXR1cm4oMSk7CisgIH0KKworICByZXR1cm4oMCk7Cit9CisKK0NVUkxjb2RlIEN1cmxfU09DS1M1X2dzc2FwaV9uZWdvdGlhdGUoaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKKyAgQ1VSTGNvZGUgY29kZTsKKyAgc3NpemVfdCBhY3R1YWxyZWFkOworICBzc2l6ZV90IHdyaXR0ZW47CisgIGludCByZXN1bHQ7CisgIE9NX3VpbnQzMiBnc3NfbWFqb3Jfc3RhdHVzLCBnc3NfbWlub3Jfc3RhdHVzLCBnc3Nfc3RhdHVzOworICBPTV91aW50MzIgZ3NzX3JldF9mbGFnczsKKyAgaW50IGdzc19jb25mX3N0YXRlLCBnc3NfZW5jOworICBnc3NfYnVmZmVyX2Rlc2MgIHNlcnZpY2UgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisgIGdzc19idWZmZXJfZGVzYyAgZ3NzX3NlbmRfdG9rZW4gPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisgIGdzc19idWZmZXJfZGVzYyAgZ3NzX3JlY3ZfdG9rZW4gPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisgIGdzc19idWZmZXJfZGVzYyAgZ3NzX3dfdG9rZW4gPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisgIGdzc19idWZmZXJfZGVzYyogZ3NzX3Rva2VuID0gR1NTX0NfTk9fQlVGRkVSOworICBnc3NfbmFtZV90ICAgICAgIHNlcnZlciA9IEdTU19DX05PX05BTUU7CisgIGdzc19uYW1lX3QgICAgICAgZ3NzX2NsaWVudF9uYW1lID0gR1NTX0NfTk9fTkFNRTsKKyAgdW5zaWduZWQgc2hvcnQgICB1c19sZW5ndGg7CisgIGNoYXIgICAgICAgICAgICAgKnVzZXI9TlVMTDsKKyAgdW5zaWduZWQgY2hhciBzb2Nrc3JlcVs0XTsgLyogcm9vbSBmb3IgZ3NzYXBpIGV4Y2hhbmdlIGhlYWRlciBvbmx5ICovCisgIGNoYXIgKnNlcnZpY2VwdHIgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TT0NLUzVfR1NTQVBJX1NFUlZJQ0VdOworCisgIC8qICAgR1NTQVBJIHJlcXVlc3QgbG9va3MgbGlrZQorICAgKiArLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICogfFZFUiB8IE1UWVAgfCBMRU4gfCAgICAgVE9LRU4gICAgICB8CisgICAqICstLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgKiB8IDEgIHwgIDEgICB8ICAyICB8IHVwIHRvIDJeMTYgLSAxIHwKKyAgICogKy0tLS0rLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgICAqLworCisgIC8qIHByZXBhcmUgc2VydmljZSBuYW1lICovCisgIGlmKHN0cmNocihzZXJ2aWNlcHRyLCcvJykpIHsKKyAgICBzZXJ2aWNlLnZhbHVlID0gbWFsbG9jKHN0cmxlbihzZXJ2aWNlcHRyKSk7CisgICAgaWYoIXNlcnZpY2UudmFsdWUpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBzZXJ2aWNlLmxlbmd0aCA9IHN0cmxlbihzZXJ2aWNlcHRyKTsKKyAgICBtZW1jcHkoc2VydmljZS52YWx1ZSwgc2VydmljZXB0ciwgc2VydmljZS5sZW5ndGgpOworCisgICAgZ3NzX21ham9yX3N0YXR1cyA9IGdzc19pbXBvcnRfbmFtZSgmZ3NzX21pbm9yX3N0YXR1cywgJnNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3NzX09JRCkgR1NTX0NfTlVMTF9PSUQsICZzZXJ2ZXIpOworICB9CisgIGVsc2UgeworICAgIHNlcnZpY2UudmFsdWUgPSBtYWxsb2Moc3RybGVuKHNlcnZpY2VwdHIpICtzdHJsZW4oY29ubi0+cHJveHkubmFtZSkrMik7CisgICAgaWYoIXNlcnZpY2UudmFsdWUpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBzZXJ2aWNlLmxlbmd0aCA9IHN0cmxlbihzZXJ2aWNlcHRyKSArc3RybGVuKGNvbm4tPnByb3h5Lm5hbWUpKzE7CisgICAgc25wcmludGYoc2VydmljZS52YWx1ZSwgc2VydmljZS5sZW5ndGgrMSwgIiVzQCVzIiwKKyAgICAgICAgICAgICBzZXJ2aWNlcHRyLCBjb25uLT5wcm94eS5uYW1lKTsKKworICAgIGdzc19tYWpvcl9zdGF0dXMgPSBnc3NfaW1wb3J0X25hbWUoJmdzc19taW5vcl9zdGF0dXMsICZzZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX250X3NlcnZpY2VfbmFtZSwgJnNlcnZlcik7CisgIH0KKworICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZzZXJ2aWNlKTsgLyogY2xlYXIgYWxsb2NhdGVkIG1lbW9yeSAqLworCisgIGlmKGNoZWNrX2dzc19lcnIoZGF0YSxnc3NfbWFqb3Jfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgIGdzc19taW5vcl9zdGF0dXMsImdzc19pbXBvcnRfbmFtZSgpIikpIHsKKyAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2aWNlIG5hbWUuIik7CisgICAgZ3NzX3JlbGVhc2VfbmFtZSgmZ3NzX3N0YXR1cywgJnNlcnZlcik7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgfQorCisgIC8qIEFzIGxvbmcgYXMgd2UgbmVlZCB0byBrZWVwIHNlbmRpbmcgc29tZSBjb250ZXh0IGluZm8sIGFuZCB0aGVyZSdzIG5vICAqLworICAvKiBlcnJvcnMsIGtlZXAgc2VuZGluZyBpdC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgZm9yKDs7KSB7CisgICAgZ3NzX21ham9yX3N0YXR1cyA9IEN1cmxfZ3NzX2luaXRfc2VjX2NvbnRleHQoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3NzX21pbm9yX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3NzX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnc3Nfc2VuZF90b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3NzX3JldF9mbGFncyk7CisKKyAgICBpZihnc3NfdG9rZW4gIT0gR1NTX0NfTk9fQlVGRkVSKQorICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3Nfc3RhdHVzLCAmZ3NzX3JlY3ZfdG9rZW4pOworICAgIGlmKGNoZWNrX2dzc19lcnIoZGF0YSxnc3NfbWFqb3Jfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgZ3NzX21pbm9yX3N0YXR1cywiZ3NzX2luaXRfc2VjX2NvbnRleHQiKSkgeworICAgICAgZ3NzX3JlbGVhc2VfbmFtZSgmZ3NzX3N0YXR1cywgJnNlcnZlcik7CisgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3NfcmVjdl90b2tlbik7CisgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3Nfc2VuZF90b2tlbik7CisgICAgICBnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZnc3Nfc3RhdHVzLCAmZ3NzX2NvbnRleHQsIE5VTEwpOworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBpbml0aWFsIEdTU0FQSSB0b2tlbi4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorCisgICAgaWYoZ3NzX3NlbmRfdG9rZW4ubGVuZ3RoICE9IDApIHsKKyAgICAgIHNvY2tzcmVxWzBdID0gMTsgICAgLyogZ3NzYXBpIHN1Ym5lZ290aWF0aW9uIHZlcnNpb24gKi8KKyAgICAgIHNvY2tzcmVxWzFdID0gMTsgICAgLyogYXV0aGVudGljYXRpb24gbWVzc2FnZSB0eXBlICovCisgICAgICB1c19sZW5ndGggPSBodG9ucygoc2hvcnQpZ3NzX3NlbmRfdG9rZW4ubGVuZ3RoKTsKKyAgICAgIG1lbWNweShzb2Nrc3JlcSsyLCZ1c19sZW5ndGgsc2l6ZW9mKHNob3J0KSk7CisKKyAgICAgIGNvZGUgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsIDQsICZ3cml0dGVuKTsKKyAgICAgIGlmKChjb2RlICE9IENVUkxFX09LKSB8fCAoNCAhPSB3cml0dGVuKSkgeworICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgR1NTQVBJIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuIik7CisgICAgICAgIGdzc19yZWxlYXNlX25hbWUoJmdzc19zdGF0dXMsICZzZXJ2ZXIpOworICAgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3NfcmVjdl90b2tlbik7CisgICAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzX3N0YXR1cywgJmdzc19zZW5kX3Rva2VuKTsKKyAgICAgICAgZ3NzX2RlbGV0ZV9zZWNfY29udGV4dCgmZ3NzX3N0YXR1cywgJmdzc19jb250ZXh0LCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICAgIH0KKworICAgICAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilnc3Nfc2VuZF90b2tlbi52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19zZW5kX3Rva2VuLmxlbmd0aCwgJndyaXR0ZW4pOworCisgICAgICBpZigoY29kZSAhPSBDVVJMRV9PSykgfHwgKChzc2l6ZV90KWdzc19zZW5kX3Rva2VuLmxlbmd0aCAhPSB3cml0dGVuKSkgeworICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgR1NTQVBJIGF1dGhlbnRpY2F0aW9uIHRva2VuLiIpOworICAgICAgICBnc3NfcmVsZWFzZV9uYW1lKCZnc3Nfc3RhdHVzLCAmc2VydmVyKTsKKyAgICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3Nfc3RhdHVzLCAmZ3NzX3JlY3ZfdG9rZW4pOworICAgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3Nfc2VuZF90b2tlbik7CisgICAgICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJmdzc19zdGF0dXMsICZnc3NfY29udGV4dCwgTlVMTCk7CisgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICB9CisKKyAgICB9CisKKyAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3Nfc2VuZF90b2tlbik7CisgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3Nfc3RhdHVzLCAmZ3NzX3JlY3ZfdG9rZW4pOworICAgIGlmKGdzc19tYWpvcl9zdGF0dXMgIT0gR1NTX1NfQ09OVElOVUVfTkVFREVEKSBicmVhazsKKworICAgIC8qIGFuYWx5c2UgcmVzcG9uc2UgKi8KKworICAgIC8qICAgR1NTQVBJIHJlc3BvbnNlIGxvb2tzIGxpa2UKKyAgICAgKiArLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgKiB8VkVSIHwgTVRZUCB8IExFTiB8ICAgICBUT0tFTiAgICAgIHwKKyAgICAgKiArLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgKiB8IDEgIHwgIDEgICB8ICAyICB8IHVwIHRvIDJeMTYgLSAxIHwKKyAgICAgKiArLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgKi8KKworICAgIHJlc3VsdD1DdXJsX2Jsb2NrcmVhZF9hbGwoY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwgNCwgJmFjdHVhbHJlYWQpOworICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSyB8fCBhY3R1YWxyZWFkICE9IDQpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVjZWl2ZSBHU1NBUEkgYXV0aGVudGljYXRpb24gcmVzcG9uc2UuIik7CisgICAgICBnc3NfcmVsZWFzZV9uYW1lKCZnc3Nfc3RhdHVzLCAmc2VydmVyKTsKKyAgICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJmdzc19zdGF0dXMsICZnc3NfY29udGV4dCwgTlVMTCk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKworICAgIC8qIGlnbm9yZSB0aGUgZmlyc3QgKFZFUikgYnl0ZSAqLworICAgIGlmKHNvY2tzcmVxWzFdID09IDI1NSkgeyAvKiBzdGF0dXMgLyBtZXNzYWdlIHR5cGUgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJVc2VyIHdhcyByZWplY3RlZCBieSB0aGUgU09DS1M1IHNlcnZlciAoJWQgJWQpLiIsCisgICAgICAgICAgICBzb2Nrc3JlcVswXSwgc29ja3NyZXFbMV0pOworICAgICAgZ3NzX3JlbGVhc2VfbmFtZSgmZ3NzX3N0YXR1cywgJnNlcnZlcik7CisgICAgICBnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZnc3Nfc3RhdHVzLCAmZ3NzX2NvbnRleHQsIE5VTEwpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisKKyAgICBpZihzb2Nrc3JlcVsxXSAhPSAxKSB7IC8qIHN0YXR1cyAvIG1lc3NnYWUgdHlwZSAqLworICAgICAgZmFpbGYoZGF0YSwgIkludmFsaWQgR1NTQVBJIGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlIHR5cGUgKCVkICVkKS4iLAorICAgICAgICAgICAgc29ja3NyZXFbMF0sIHNvY2tzcmVxWzFdKTsKKyAgICAgIGdzc19yZWxlYXNlX25hbWUoJmdzc19zdGF0dXMsICZzZXJ2ZXIpOworICAgICAgZ3NzX2RlbGV0ZV9zZWNfY29udGV4dCgmZ3NzX3N0YXR1cywgJmdzc19jb250ZXh0LCBOVUxMKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorCisgICAgbWVtY3B5KCZ1c19sZW5ndGgsIHNvY2tzcmVxKzIsIHNpemVvZihzaG9ydCkpOworICAgIHVzX2xlbmd0aCA9IG50b2hzKHVzX2xlbmd0aCk7CisKKyAgICBnc3NfcmVjdl90b2tlbi5sZW5ndGg9dXNfbGVuZ3RoOworICAgIGdzc19yZWN2X3Rva2VuLnZhbHVlPW1hbGxvYyh1c19sZW5ndGgpOworICAgIGlmKCFnc3NfcmVjdl90b2tlbi52YWx1ZSkgeworICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBHU1NBUEkgYXV0aGVudGljYXRpb24gIgorICAgICAgICAgICAgInJlc3BvbnNlIHRva2VuLiIpOworICAgICAgZ3NzX3JlbGVhc2VfbmFtZSgmZ3NzX3N0YXR1cywgJnNlcnZlcik7CisgICAgICBnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZnc3Nfc3RhdHVzLCAmZ3NzX2NvbnRleHQsIE5VTEwpOworICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQorCisgICAgcmVzdWx0PUN1cmxfYmxvY2tyZWFkX2FsbChjb25uLCBzb2NrLCAoY2hhciAqKWdzc19yZWN2X3Rva2VuLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX3JlY3ZfdG9rZW4ubGVuZ3RoLCAmYWN0dWFscmVhZCk7CisKKyAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0sgfHwgYWN0dWFscmVhZCAhPSB1c19sZW5ndGgpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVjZWl2ZSBHU1NBUEkgYXV0aGVudGljYXRpb24gdG9rZW4uIik7CisgICAgICBnc3NfcmVsZWFzZV9uYW1lKCZnc3Nfc3RhdHVzLCAmc2VydmVyKTsKKyAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzX3N0YXR1cywgJmdzc19yZWN2X3Rva2VuKTsKKyAgICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJmdzc19zdGF0dXMsICZnc3NfY29udGV4dCwgTlVMTCk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKworICAgIGdzc190b2tlbiA9ICZnc3NfcmVjdl90b2tlbjsKKyAgfQorCisgIGdzc19yZWxlYXNlX25hbWUoJmdzc19zdGF0dXMsICZzZXJ2ZXIpOworCisgIC8qIEV2ZXJ5dGhpbmcgaXMgZ29vZCBzbyBmYXIsIHVzZXIgd2FzIGF1dGhlbnRpY2F0ZWQhICovCisgIGdzc19tYWpvcl9zdGF0dXMgPSBnc3NfaW5xdWlyZV9jb250ZXh0ICgmZ3NzX21pbm9yX3N0YXR1cywgZ3NzX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3NzX2NsaWVudF9uYW1lLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7CisgIGlmKGNoZWNrX2dzc19lcnIoZGF0YSxnc3NfbWFqb3Jfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgIGdzc19taW5vcl9zdGF0dXMsImdzc19pbnF1aXJlX2NvbnRleHQiKSkgeworICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJmdzc19zdGF0dXMsICZnc3NfY29udGV4dCwgTlVMTCk7CisgICAgZ3NzX3JlbGVhc2VfbmFtZSgmZ3NzX3N0YXR1cywgJmdzc19jbGllbnRfbmFtZSk7CisgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBkZXRlcm1pbmUgdXNlciBuYW1lLiIpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIH0KKyAgZ3NzX21ham9yX3N0YXR1cyA9IGdzc19kaXNwbGF5X25hbWUoJmdzc19taW5vcl9zdGF0dXMsIGdzc19jbGllbnRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdzc19zZW5kX3Rva2VuLCBOVUxMKTsKKyAgaWYoY2hlY2tfZ3NzX2VycihkYXRhLGdzc19tYWpvcl9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgZ3NzX21pbm9yX3N0YXR1cywiZ3NzX2Rpc3BsYXlfbmFtZSIpKSB7CisgICAgZ3NzX2RlbGV0ZV9zZWNfY29udGV4dCgmZ3NzX3N0YXR1cywgJmdzc19jb250ZXh0LCBOVUxMKTsKKyAgICBnc3NfcmVsZWFzZV9uYW1lKCZnc3Nfc3RhdHVzLCAmZ3NzX2NsaWVudF9uYW1lKTsKKyAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3Nfc2VuZF90b2tlbik7CisgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBkZXRlcm1pbmUgdXNlciBuYW1lLiIpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIH0KKyAgdXNlcj1tYWxsb2MoZ3NzX3NlbmRfdG9rZW4ubGVuZ3RoKzEpOworICBpZighdXNlcikgeworICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJmdzc19zdGF0dXMsICZnc3NfY29udGV4dCwgTlVMTCk7CisgICAgZ3NzX3JlbGVhc2VfbmFtZSgmZ3NzX3N0YXR1cywgJmdzc19jbGllbnRfbmFtZSk7CisgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3Nfc3RhdHVzLCAmZ3NzX3NlbmRfdG9rZW4pOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgbWVtY3B5KHVzZXIsIGdzc19zZW5kX3Rva2VuLnZhbHVlLCBnc3Nfc2VuZF90b2tlbi5sZW5ndGgpOworICB1c2VyW2dzc19zZW5kX3Rva2VuLmxlbmd0aF0gPSAnXDAnOworICBnc3NfcmVsZWFzZV9uYW1lKCZnc3Nfc3RhdHVzLCAmZ3NzX2NsaWVudF9uYW1lKTsKKyAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3Nfc3RhdHVzLCAmZ3NzX3NlbmRfdG9rZW4pOworICBpbmZvZihkYXRhLCAiU09DS1M1IHNlcnZlciBhdXRoZW5jdGljYXRlZCB1c2VyICVzIHdpdGggZ3NzYXBpLlxuIix1c2VyKTsKKyAgZnJlZSh1c2VyKTsKKyAgdXNlcj1OVUxMOworCisgIC8qIERvIGVuY3J5cHRpb24gKi8KKyAgc29ja3NyZXFbMF0gPSAxOyAgICAvKiBnc3NhcGkgc3VibmVnb3RpYXRpb24gdmVyc2lvbiAqLworICBzb2Nrc3JlcVsxXSA9IDI7ICAgIC8qIGVuY3J5cHRpb24gbWVzc2FnZSB0eXBlICovCisKKyAgZ3NzX2VuYyA9IDA7IC8qIG5vIGRhdGEgcHJvdGVjdGlvbiAqLworICAvKiBkbyBjb25maWRlbnRpYWxpdHkgcHJvdGVjdGlvbiBpZiBzdXBwb3J0ZWQgKi8KKyAgaWYoZ3NzX3JldF9mbGFncyAmIEdTU19DX0NPTkZfRkxBRykKKyAgICBnc3NfZW5jID0gMjsKKyAgLyogZWxzZSBkbyBpbnRlZ3JpdHkgcHJvdGVjdGlvbiAqLworICBlbHNlIGlmKGdzc19yZXRfZmxhZ3MgJiBHU1NfQ19JTlRFR19GTEFHKQorICAgIGdzc19lbmMgPSAxOworCisgIGluZm9mKGRhdGEsICJTT0NLUzUgc2VydmVyIHN1cHBvcnRzIGdzc2FwaSAlcyBkYXRhIHByb3RlY3Rpb24uXG4iLAorICAgICAgICAoZ3NzX2VuYz09MCk/Im5vIjooKGdzc19lbmM9PTEpPyJpbnRlZ3JpdHkiOiJjb25maWRlbnRpYWxpdHkiKSk7CisgIC8qIGZvcmNlIGZvciB0aGUgbW9tZW50IHRvIG5vIGRhdGEgcHJvdGVjdGlvbiAqLworICBnc3NfZW5jID0gMDsKKyAgLyoKKyAgICogU2VuZGluZyB0aGUgZW5jcnlwdGlvbiB0eXBlIGluIGNsZWFyIHNlZW1zIHdyb25nLiBJdCBzaG91bGQgYmUKKyAgICogcHJvdGVjdGVkIHdpdGggZ3NzX3NlYWwoKS9nc3Nfd3JhcCgpLiBTZWUgUkZDMTk2MSBleHRyYWN0IGJlbG93CisgICAqIFRoZSBORUMgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9ucyBvbiB3aGljaCB0aGlzIGlzIGJhc2VkIGlzCisgICAqIHRoZXJlZm9yZSBhdCBmYXVsdAorICAgKgorICAgKiAgKy0tLS0tLSstLS0tLS0rLS0tLS0tKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uKworICAgKiAgKyB2ZXIgIHwgbXR5cCB8IGxlbiAgfCAgIHRva2VuICAgICAgICAgICAgICAgfAorICAgKiAgKy0tLS0tLSstLS0tLS0rLS0tLS0tKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uKworICAgKiAgKyAweDAxIHwgMHgwMiB8IDB4MDIgfCB1cCB0byAyXjE2IC0gMSBvY3RldHMgfAorICAgKiAgKy0tLS0tLSstLS0tLS0rLS0tLS0tKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uKworICAgKgorICAgKiAgIFdoZXJlOgorICAgKgorICAgKiAgLSAidmVyIiBpcyB0aGUgcHJvdG9jb2wgdmVyc2lvbiBudW1iZXIsIGhlcmUgMSB0byByZXByZXNlbnQgdGhlCisgICAqICAgIGZpcnN0IHZlcnNpb24gb2YgdGhlIFNPQ0tTL0dTUy1BUEkgcHJvdG9jb2wKKyAgICoKKyAgICogIC0gIm10eXAiIGlzIHRoZSBtZXNzYWdlIHR5cGUsIGhlcmUgMiB0byByZXByZXNlbnQgYSBwcm90ZWN0aW9uCisgICAqICAgIC1sZXZlbCBuZWdvdGlhdGlvbiBtZXNzYWdlCisgICAqCisgICAqICAtICJsZW4iIGlzIHRoZSBsZW5ndGggb2YgdGhlICJ0b2tlbiIgZmllbGQgaW4gb2N0ZXRzCisgICAqCisgICAqICAtICJ0b2tlbiIgaXMgdGhlIEdTUy1BUEkgZW5jYXBzdWxhdGVkIHByb3RlY3Rpb24gbGV2ZWwKKyAgICoKKyAgICogVGhlIHRva2VuIGlzIHByb2R1Y2VkIGJ5IGVuY2Fwc3VsYXRpbmcgYW4gb2N0ZXQgY29udGFpbmluZyB0aGUKKyAgICogcmVxdWlyZWQgcHJvdGVjdGlvbiBsZXZlbCB1c2luZyBnc3Nfc2VhbCgpL2dzc193cmFwKCkgd2l0aCBjb25mX3JlcQorICAgKiBzZXQgdG8gRkFMU0UuICBUaGUgdG9rZW4gaXMgdmVyaWZpZWQgdXNpbmcgZ3NzX3Vuc2VhbCgpLworICAgKiBnc3NfdW53cmFwKCkuCisgICAqCisgICAqLworICBpZihkYXRhLT5zZXQuc29ja3M1X2dzc2FwaV9uZWMpIHsKKyAgICB1c19sZW5ndGggPSBodG9ucygoc2hvcnQpMSk7CisgICAgbWVtY3B5KHNvY2tzcmVxKzIsJnVzX2xlbmd0aCxzaXplb2Yoc2hvcnQpKTsKKyAgfQorICBlbHNlIHsKKyAgICBnc3Nfc2VuZF90b2tlbi5sZW5ndGggPSAxOworICAgIGdzc19zZW5kX3Rva2VuLnZhbHVlID0gbWFsbG9jKDEpOworICAgIGlmKCFnc3Nfc2VuZF90b2tlbi52YWx1ZSkgeworICAgICAgZ3NzX2RlbGV0ZV9zZWNfY29udGV4dCgmZ3NzX3N0YXR1cywgJmdzc19jb250ZXh0LCBOVUxMKTsKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKyAgICBtZW1jcHkoZ3NzX3NlbmRfdG9rZW4udmFsdWUsICZnc3NfZW5jLCAxKTsKKworICAgIGdzc19tYWpvcl9zdGF0dXMgPSBnc3Nfd3JhcCgmZ3NzX21pbm9yX3N0YXR1cywgZ3NzX2NvbnRleHQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX1FPUF9ERUZBVUxULCAmZ3NzX3NlbmRfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnc3NfY29uZl9zdGF0ZSwgJmdzc193X3Rva2VuKTsKKworICAgIGlmKGNoZWNrX2dzc19lcnIoZGF0YSxnc3NfbWFqb3Jfc3RhdHVzLGdzc19taW5vcl9zdGF0dXMsImdzc193cmFwIikpIHsKKyAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzX3N0YXR1cywgJmdzc19zZW5kX3Rva2VuKTsKKyAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzX3N0YXR1cywgJmdzc193X3Rva2VuKTsKKyAgICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJmdzc19zdGF0dXMsICZnc3NfY29udGV4dCwgTlVMTCk7CisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHdyYXAgR1NTQVBJIGVuY3J5cHRpb24gdmFsdWUgaW50byB0b2tlbi4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzX3N0YXR1cywgJmdzc19zZW5kX3Rva2VuKTsKKworICAgIHVzX2xlbmd0aCA9IGh0b25zKChzaG9ydClnc3Nfd190b2tlbi5sZW5ndGgpOworICAgIG1lbWNweShzb2Nrc3JlcSsyLCZ1c19sZW5ndGgsc2l6ZW9mKHNob3J0KSk7CisgIH0KKworICBjb2RlID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrLCAoY2hhciAqKXNvY2tzcmVxLCA0LCAmd3JpdHRlbik7CisgIGlmKChjb2RlICE9IENVUkxFX09LKSB8fCAoNCAhPSB3cml0dGVuKSkgeworICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBHU1NBUEkgZW5jcnlwdGlvbiByZXF1ZXN0LiIpOworICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzX3N0YXR1cywgJmdzc193X3Rva2VuKTsKKyAgICBnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZnc3Nfc3RhdHVzLCAmZ3NzX2NvbnRleHQsIE5VTEwpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIH0KKworICBpZihkYXRhLT5zZXQuc29ja3M1X2dzc2FwaV9uZWMpIHsKKyAgICBtZW1jcHkoc29ja3NyZXEsICZnc3NfZW5jLCAxKTsKKyAgICBjb2RlID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrLCBzb2Nrc3JlcSwgMSwgJndyaXR0ZW4pOworICAgIGlmKChjb2RlICE9IENVUkxFX09LKSB8fCAoIDEgIT0gd3JpdHRlbikpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBHU1NBUEkgZW5jcnlwdGlvbiB0eXBlLiIpOworICAgICAgZ3NzX2RlbGV0ZV9zZWNfY29udGV4dCgmZ3NzX3N0YXR1cywgJmdzc19jb250ZXh0LCBOVUxMKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGNvZGUgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2ssIChjaGFyICopZ3NzX3dfdG9rZW4udmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX3dfdG9rZW4ubGVuZ3RoLCAmd3JpdHRlbik7CisgICAgaWYoKGNvZGUgIT0gQ1VSTEVfT0spIHx8ICgoc3NpemVfdClnc3Nfd190b2tlbi5sZW5ndGggIT0gd3JpdHRlbikpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBHU1NBUEkgZW5jcnlwdGlvbiB0eXBlLiIpOworICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3Nfc3RhdHVzLCAmZ3NzX3dfdG9rZW4pOworICAgICAgZ3NzX2RlbGV0ZV9zZWNfY29udGV4dCgmZ3NzX3N0YXR1cywgJmdzc19jb250ZXh0LCBOVUxMKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzX3N0YXR1cywgJmdzc193X3Rva2VuKTsKKyAgfQorCisgIHJlc3VsdD1DdXJsX2Jsb2NrcmVhZF9hbGwoY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwgNCwgJmFjdHVhbHJlYWQpOworICBpZihyZXN1bHQgIT0gQ1VSTEVfT0sgfHwgYWN0dWFscmVhZCAhPSA0KSB7CisgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWNlaXZlIEdTU0FQSSBlbmNyeXB0aW9uIHJlc3BvbnNlLiIpOworICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJmdzc19zdGF0dXMsICZnc3NfY29udGV4dCwgTlVMTCk7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgfQorCisgIC8qIGlnbm9yZSB0aGUgZmlyc3QgKFZFUikgYnl0ZSAqLworICBpZihzb2Nrc3JlcVsxXSA9PSAyNTUpIHsgLyogc3RhdHVzIC8gbWVzc2FnZSB0eXBlICovCisgICAgZmFpbGYoZGF0YSwgIlVzZXIgd2FzIHJlamVjdGVkIGJ5IHRoZSBTT0NLUzUgc2VydmVyICglZCAlZCkuIiwKKyAgICAgICAgICBzb2Nrc3JlcVswXSwgc29ja3NyZXFbMV0pOworICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJmdzc19zdGF0dXMsICZnc3NfY29udGV4dCwgTlVMTCk7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgfQorCisgIGlmKHNvY2tzcmVxWzFdICE9IDIpIHsgLyogc3RhdHVzIC8gbWVzc2dhZSB0eXBlICovCisgICAgZmFpbGYoZGF0YSwgIkludmFsaWQgR1NTQVBJIGVuY3J5cHRpb24gcmVzcG9uc2UgdHlwZSAoJWQgJWQpLiIsCisgICAgICAgICAgc29ja3NyZXFbMF0sIHNvY2tzcmVxWzFdKTsKKyAgICBnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZnc3Nfc3RhdHVzLCAmZ3NzX2NvbnRleHQsIE5VTEwpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIH0KKworICBtZW1jcHkoJnVzX2xlbmd0aCwgc29ja3NyZXErMiwgc2l6ZW9mKHNob3J0KSk7CisgIHVzX2xlbmd0aCA9IG50b2hzKHVzX2xlbmd0aCk7CisKKyAgZ3NzX3JlY3ZfdG9rZW4ubGVuZ3RoPSB1c19sZW5ndGg7CisgIGdzc19yZWN2X3Rva2VuLnZhbHVlPW1hbGxvYyhnc3NfcmVjdl90b2tlbi5sZW5ndGgpOworICBpZighZ3NzX3JlY3ZfdG9rZW4udmFsdWUpIHsKKyAgICBnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZnc3Nfc3RhdHVzLCAmZ3NzX2NvbnRleHQsIE5VTEwpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisgIHJlc3VsdD1DdXJsX2Jsb2NrcmVhZF9hbGwoY29ubiwgc29jaywgKGNoYXIgKilnc3NfcmVjdl90b2tlbi52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfcmVjdl90b2tlbi5sZW5ndGgsICZhY3R1YWxyZWFkKTsKKworICBpZihyZXN1bHQgIT0gQ1VSTEVfT0sgfHwgYWN0dWFscmVhZCAhPSB1c19sZW5ndGgpIHsKKyAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlY2VpdmUgR1NTQVBJIGVuY3J5cHRyaW9uIHR5cGUuIik7CisgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3Nfc3RhdHVzLCAmZ3NzX3JlY3ZfdG9rZW4pOworICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJmdzc19zdGF0dXMsICZnc3NfY29udGV4dCwgTlVMTCk7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgfQorCisgIGlmKCFkYXRhLT5zZXQuc29ja3M1X2dzc2FwaV9uZWMpIHsKKyAgICBnc3NfbWFqb3Jfc3RhdHVzID0gZ3NzX3Vud3JhcCgmZ3NzX21pbm9yX3N0YXR1cywgZ3NzX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdzc19yZWN2X3Rva2VuLCAmZ3NzX3dfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR1NTX0NfUU9QX0RFRkFVTFQpOworCisgICAgaWYoY2hlY2tfZ3NzX2VycihkYXRhLGdzc19tYWpvcl9zdGF0dXMsZ3NzX21pbm9yX3N0YXR1cywiZ3NzX3Vud3JhcCIpKSB7CisgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3NfcmVjdl90b2tlbik7CisgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3Nfd190b2tlbik7CisgICAgICBnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZnc3Nfc3RhdHVzLCAmZ3NzX2NvbnRleHQsIE5VTEwpOworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byB1bndyYXAgR1NTQVBJIGVuY3J5cHRpb24gdmFsdWUgaW50byB0b2tlbi4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzX3N0YXR1cywgJmdzc19yZWN2X3Rva2VuKTsKKworICAgIGlmKGdzc193X3Rva2VuLmxlbmd0aCAhPSAxKSB7CisgICAgICBmYWlsZihkYXRhLCAiSW52YWxpZCBHU1NBUEkgZW5jcnlwdGlvbiByZXNwb25zZSBsZW5ndGggKCVkKS4iLAorICAgICAgICAgICAgZ3NzX3dfdG9rZW4ubGVuZ3RoKTsKKyAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzX3N0YXR1cywgJmdzc193X3Rva2VuKTsKKyAgICAgIGdzc19kZWxldGVfc2VjX2NvbnRleHQoJmdzc19zdGF0dXMsICZnc3NfY29udGV4dCwgTlVMTCk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKworICAgIG1lbWNweShzb2Nrc3JlcSxnc3Nfd190b2tlbi52YWx1ZSxnc3Nfd190b2tlbi5sZW5ndGgpOworICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzX3N0YXR1cywgJmdzc193X3Rva2VuKTsKKyAgfQorICBlbHNlIHsKKyAgICBpZihnc3NfcmVjdl90b2tlbi5sZW5ndGggIT0gMSkgeworICAgICAgZmFpbGYoZGF0YSwgIkludmFsaWQgR1NTQVBJIGVuY3J5cHRpb24gcmVzcG9uc2UgbGVuZ3RoICglZCkuIiwKKyAgICAgICAgICAgIGdzc19yZWN2X3Rva2VuLmxlbmd0aCk7CisgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3NfcmVjdl90b2tlbik7CisgICAgICBnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZnc3Nfc3RhdHVzLCAmZ3NzX2NvbnRleHQsIE5VTEwpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisKKyAgICBtZW1jcHkoc29ja3NyZXEsZ3NzX3JlY3ZfdG9rZW4udmFsdWUsZ3NzX3JlY3ZfdG9rZW4ubGVuZ3RoKTsKKyAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdzc19zdGF0dXMsICZnc3NfcmVjdl90b2tlbik7CisgIH0KKworICBpbmZvZihkYXRhLCAiU09DS1M1IGFjY2VzcyB3aXRoJXMgcHJvdGVjdGlvbiBncmFudGVkLlxuIiwKKyAgICAgICAgKHNvY2tzcmVxWzBdPT0wKT8ib3V0IGdzc2FwaSBkYXRhIjoKKyAgICAgICAgKChzb2Nrc3JlcVswXT09MSk/IiBnc3NhcGkgaW50ZWdyaXR5IjoiIGdzc2FwaSBjb25maWRlbnRpYWxpdHkiKSk7CisKKyAgY29ubi0+c29ja3M1X2dzc2FwaV9lbmN0eXBlID0gc29ja3NyZXFbMF07CisgIGlmKHNvY2tzcmVxWzBdID09IDApCisgICAgZ3NzX2RlbGV0ZV9zZWNfY29udGV4dCgmZ3NzX3N0YXR1cywgJmdzc19jb250ZXh0LCBOVUxMKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9QUk9YWSAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3NvY2tzX3NzcGkuYyBiL2N1cmwtNy4yNS4wL2xpYi9zb2Nrc19zc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2YTgyZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zb2Nrc19zc3BpLmMKQEAgLTAsMCArMSw2ODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgTWFya3VzIE1vZWxsZXIsIDxtYXJrdXNfbW9lbGxlckBjb21wdXNlcnZlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgVVNFX1dJTkRPV1NfU1NQSQorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInRpbWV2YWwuaCIKKyNpbmNsdWRlICJzb2Nrcy5oIgorI2luY2x1ZGUgImN1cmxfc3NwaS5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2UgdGhlIGludGVybmFsICpwcmludGYoKSBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKgorICogRGVmaW5pdGlvbnMgcmVxdWlyZWQgZnJvbSBudHNlY2FwaS5oIGFyZSBkaXJlY3RseSBwcm92aWRlZCBiZWxvdyB0aGlzIHBvaW50CisgKiB0byBhdm9pZCBpbmNsdWRpbmcgbnRzZWNhcGkuaCBkdWUgdG8gYSBjb25mbGljdCB3aXRoIE9wZW5TU0wncyBzYWZlc3RhY2suaAorICovCisjZGVmaW5lIEtFUkJfV1JBUF9OT19FTkNSWVBUIDB4ODAwMDAwMDEKKworLyoKKyAqIEhlbHBlciBzc3BpIGVycm9yIGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIGludCBjaGVja19zc3BpX2VycihzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDVVJJVFlfU1RBVFVTIG1ham9yX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDVVJJVFlfU1RBVFVTIG1pbm9yX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZnVuY3Rpb24pCit7CisgIGNvbnN0IGNoYXIgKnR4dDsKKyAgKHZvaWQpbWlub3Jfc3RhdHVzOworCisgIGlmKG1ham9yX3N0YXR1cyAhPSBTRUNfRV9PSyAmJgorICAgICBtYWpvcl9zdGF0dXMgIT0gU0VDX0lfQ09NUExFVEVfQU5EX0NPTlRJTlVFICYmCisgICAgIG1ham9yX3N0YXR1cyAhPSBTRUNfSV9DT01QTEVURV9ORUVERUQgJiYKKyAgICAgbWFqb3Jfc3RhdHVzICE9IFNFQ19JX0NPTlRJTlVFX05FRURFRCkgeworICAgIGZhaWxmKGRhdGEsICJTU1BJIGVycm9yOiAlcyBmYWlsZWQ6ICVkXG4iLCBmdW5jdGlvbiwgbWFqb3Jfc3RhdHVzKTsKKyAgICBzd2l0Y2ggKG1ham9yX3N0YXR1cykgeworICAgIGNhc2UgU0VDX0lfQ09NUExFVEVfQU5EX0NPTlRJTlVFOgorICAgICAgdHh0PSJTRUNfSV9DT01QTEVURV9BTkRfQ09OVElOVUUiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTRUNfSV9DT01QTEVURV9ORUVERUQ6CisgICAgICB0eHQ9IlNFQ19JX0NPTVBMRVRFX05FRURFRCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNFQ19JX0NPTlRJTlVFX05FRURFRDoKKyAgICAgIHR4dD0iU0VDX0lfQ09OVElOVUVfTkVFREVEIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0VDX0lfQ09OVEVYVF9FWFBJUkVEOgorICAgICAgdHh0PSJTRUNfSV9DT05URVhUX0VYUElSRUQiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTRUNfSV9JTkNPTVBMRVRFX0NSRURFTlRJQUxTOgorICAgICAgdHh0PSJTRUNfSV9JTkNPTVBMRVRFX0NSRURFTlRJQUxTIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0VDX0lfUkVORUdPVElBVEU6CisgICAgICB0eHQ9IlNFQ19JX1JFTkVHT1RJQVRFIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0VDX0VfQlVGRkVSX1RPT19TTUFMTDoKKyAgICAgIHR4dD0iU0VDX0VfQlVGRkVSX1RPT19TTUFMTCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNFQ19FX0NPTlRFWFRfRVhQSVJFRDoKKyAgICAgIHR4dD0iU0VDX0VfQ09OVEVYVF9FWFBJUkVEIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0VDX0VfQ1JZUFRPX1NZU1RFTV9JTlZBTElEOgorICAgICAgdHh0PSJTRUNfRV9DUllQVE9fU1lTVEVNX0lOVkFMSUQiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTRUNfRV9JTkNPTVBMRVRFX01FU1NBR0U6CisgICAgICB0eHQ9IlNFQ19FX0lOQ09NUExFVEVfTUVTU0FHRSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlk6CisgICAgICB0eHQ9IlNFQ19FX0lOU1VGRklDSUVOVF9NRU1PUlkiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTRUNfRV9JTlRFUk5BTF9FUlJPUjoKKyAgICAgIHR4dD0iU0VDX0VfSU5URVJOQUxfRVJST1IiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTRUNfRV9JTlZBTElEX0hBTkRMRToKKyAgICAgIHR4dD0iU0VDX0VfSU5WQUxJRF9IQU5ETEUiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTRUNfRV9JTlZBTElEX1RPS0VOOgorICAgICAgdHh0PSJTRUNfRV9JTlZBTElEX1RPS0VOIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0VDX0VfTE9HT05fREVOSUVEOgorICAgICAgdHh0PSJTRUNfRV9MT0dPTl9ERU5JRUQiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTRUNfRV9NRVNTQUdFX0FMVEVSRUQ6CisgICAgICB0eHQ9IlNFQ19FX01FU1NBR0VfQUxURVJFRCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNFQ19FX05PX0FVVEhFTlRJQ0FUSU5HX0FVVEhPUklUWToKKyAgICAgIHR4dD0iU0VDX0VfTk9fQVVUSEVOVElDQVRJTkdfQVVUSE9SSVRZIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0VDX0VfTk9fQ1JFREVOVElBTFM6CisgICAgICB0eHQ9IlNFQ19FX05PX0NSRURFTlRJQUxTIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0VDX0VfTk9UX09XTkVSOgorICAgICAgdHh0PSJTRUNfRV9OT1RfT1dORVIiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTRUNfRV9PVVRfT0ZfU0VRVUVOQ0U6CisgICAgICB0eHQ9IlNFQ19FX09VVF9PRl9TRVFVRU5DRSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNFQ19FX1FPUF9OT1RfU1VQUE9SVEVEOgorICAgICAgdHh0PSJTRUNfRV9RT1BfTk9UX1NVUFBPUlRFRCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNFQ19FX1NFQ1BLR19OT1RfRk9VTkQ6CisgICAgICB0eHQ9IlNFQ19FX1NFQ1BLR19OT1RfRk9VTkQiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTRUNfRV9UQVJHRVRfVU5LTk9XTjoKKyAgICAgIHR4dD0iU0VDX0VfVEFSR0VUX1VOS05PV04iOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTRUNfRV9VTktOT1dOX0NSRURFTlRJQUxTOgorICAgICAgdHh0PSJTRUNfRV9VTktOT1dOX0NSRURFTlRJQUxTIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0VDX0VfVU5TVVBQT1JURURfRlVOQ1RJT046CisgICAgICB0eHQ9IlNFQ19FX1VOU1VQUE9SVEVEX0ZVTkNUSU9OIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0VDX0VfV1JPTkdfUFJJTkNJUEFMOgorICAgICAgdHh0PSJTRUNfRV9XUk9OR19QUklOQ0lQQUwiOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHR4dD0iVW5rbm93biBlcnJvciI7CisKKyAgICB9CisgICAgZmFpbGYoZGF0YSwgIlNTUEkgZXJyb3I6ICVzIGZhaWxlZDogJXNcbiIsIGZ1bmN0aW9uLCB0eHQpOworICAgIHJldHVybiAxOworICB9CisgIHJldHVybiAwOworfQorCisvKiBUaGlzIGlzIHRoZSBTU1BJLXVzaW5nIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiAqLworQ1VSTGNvZGUgQ3VybF9TT0NLUzVfZ3NzYXBpX25lZ290aWF0ZShpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICBDVVJMY29kZSBjb2RlOworICBzc2l6ZV90IGFjdHVhbHJlYWQ7CisgIHNzaXplX3Qgd3JpdHRlbjsKKyAgaW50IHJlc3VsdDsKKyAgLyogTmVlZHMgR1NTQVBJIGF1dGhlbnRpY2F0aW9uICovCisgIFNFQ1VSSVRZX1NUQVRVUyBzc3BpX21ham9yX3N0YXR1cywgc3NwaV9taW5vcl9zdGF0dXM9MDsKKyAgdW5zaWduZWQgbG9uZyBzc3BpX3JldF9mbGFncz0wOworICBpbnQgZ3NzX2VuYzsKKyAgU2VjQnVmZmVyIHNzcGlfc2VuZF90b2tlbiwgc3NwaV9yZWN2X3Rva2VuLCBzc3BpX3dfdG9rZW5bM107CisgIFNlY0J1ZmZlckRlc2MgaW5wdXRfZGVzYywgb3V0cHV0X2Rlc2MsIHdyYXBfZGVzYzsKKyAgU2VjUGtnQ29udGV4dF9TaXplcyBzc3BpX3NpemVzOworICBDcmVkSGFuZGxlIGNyZWRfaGFuZGxlOworICBDdHh0SGFuZGxlIHNzcGlfY29udGV4dDsKKyAgUEN0eHRIYW5kbGUgY29udGV4dF9oYW5kbGUgPSBOVUxMOworICBTZWNQa2dDcmVkZW50aWFsc19OYW1lcyBuYW1lczsKKyAgVGltZVN0YW1wIGV4cGlyeTsKKyAgY2hhciAqc2VydmljZV9uYW1lPU5VTEw7CisgIHVuc2lnbmVkIHNob3J0IHVzX2xlbmd0aDsKKyAgVUxPTkcgcW9wOworICB1bnNpZ25lZCBjaGFyIHNvY2tzcmVxWzRdOyAvKiByb29tIGZvciBnc3NhcGkgZXhjaGFuZ2UgaGVhZGVyIG9ubHkgKi8KKyAgY2hhciAqc2VydmljZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NPQ0tTNV9HU1NBUElfU0VSVklDRV07CisKKyAgLyogICBHU1NBUEkgcmVxdWVzdCBsb29rcyBsaWtlCisgICAqICstLS0tKy0tLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgKiB8VkVSIHwgTVRZUCB8IExFTiB8ICAgICBUT0tFTiAgICAgIHwKKyAgICogKy0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAqIHwgMSAgfCAgMSAgIHwgIDIgIHwgdXAgdG8gMl4xNiAtIDEgfAorICAgKiArLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICovCisKKyAgLyogcHJlcGFyZSBzZXJ2aWNlIG5hbWUgKi8KKyAgaWYoc3RyY2hyKHNlcnZpY2UsICcvJykpIHsKKyAgICBzZXJ2aWNlX25hbWUgPSBtYWxsb2Moc3RybGVuKHNlcnZpY2UpKTsKKyAgICBpZighc2VydmljZV9uYW1lKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgbWVtY3B5KHNlcnZpY2VfbmFtZSwgc2VydmljZSwgc3RybGVuKHNlcnZpY2UpKTsKKyAgfQorICBlbHNlIHsKKyAgICBzZXJ2aWNlX25hbWUgPSBtYWxsb2Moc3RybGVuKHNlcnZpY2UpICsgc3RybGVuKGNvbm4tPnByb3h5Lm5hbWUpICsgMik7CisgICAgaWYoIXNlcnZpY2VfbmFtZSkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIHNucHJpbnRmKHNlcnZpY2VfbmFtZSxzdHJsZW4oc2VydmljZSkgK3N0cmxlbihjb25uLT5wcm94eS5uYW1lKSsyLCIlcy8lcyIsCisgICAgICAgICAgICAgc2VydmljZSxjb25uLT5wcm94eS5uYW1lKTsKKyAgfQorCisgIGlucHV0X2Rlc2MuY0J1ZmZlcnMgPSAxOworICBpbnB1dF9kZXNjLnBCdWZmZXJzID0gJnNzcGlfcmVjdl90b2tlbjsKKyAgaW5wdXRfZGVzYy51bFZlcnNpb24gPSBTRUNCVUZGRVJfVkVSU0lPTjsKKworICBzc3BpX3JlY3ZfdG9rZW4uQnVmZmVyVHlwZSA9IFNFQ0JVRkZFUl9UT0tFTjsKKyAgc3NwaV9yZWN2X3Rva2VuLmNiQnVmZmVyID0gMDsKKyAgc3NwaV9yZWN2X3Rva2VuLnB2QnVmZmVyID0gTlVMTDsKKworICBvdXRwdXRfZGVzYy5jQnVmZmVycyA9IDE7CisgIG91dHB1dF9kZXNjLnBCdWZmZXJzID0gJnNzcGlfc2VuZF90b2tlbjsKKyAgb3V0cHV0X2Rlc2MudWxWZXJzaW9uID0gU0VDQlVGRkVSX1ZFUlNJT047CisKKyAgc3NwaV9zZW5kX3Rva2VuLkJ1ZmZlclR5cGUgPSBTRUNCVUZGRVJfVE9LRU47CisgIHNzcGlfc2VuZF90b2tlbi5jYkJ1ZmZlciA9IDA7CisgIHNzcGlfc2VuZF90b2tlbi5wdkJ1ZmZlciA9IE5VTEw7CisKKyAgd3JhcF9kZXNjLmNCdWZmZXJzID0gMzsKKyAgd3JhcF9kZXNjLnBCdWZmZXJzID0gc3NwaV93X3Rva2VuOworICB3cmFwX2Rlc2MudWxWZXJzaW9uID0gU0VDQlVGRkVSX1ZFUlNJT047CisKKyAgY3JlZF9oYW5kbGUuZHdMb3dlciA9IDA7CisgIGNyZWRfaGFuZGxlLmR3VXBwZXIgPSAwOworCisgIHNzcGlfbWFqb3Jfc3RhdHVzID0KKyAgICBzX3BTZWNGbi0+QWNxdWlyZUNyZWRlbnRpYWxzSGFuZGxlQSggTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiS2VyYmVyb3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUNQS0dfQ1JFRF9PVVRCT1VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNyZWRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwaXJ5KTsKKworICBpZihjaGVja19zc3BpX2VycihkYXRhLCBzc3BpX21ham9yX3N0YXR1cyxzc3BpX21pbm9yX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgIkFjcXVpcmVDcmVkZW50aWFsc0hhbmRsZUEiKSApIHsKKyAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIGFjcXVpcmUgY3JlZGVudGlhbHMuIik7CisgICAgZnJlZShzZXJ2aWNlX25hbWUpOworICAgIHNlcnZpY2VfbmFtZT1OVUxMOworICAgIHNfcFNlY0ZuLT5GcmVlQ3JlZGVudGlhbHNIYW5kbGUoJmNyZWRfaGFuZGxlKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisKKyAgLyogQXMgbG9uZyBhcyB3ZSBuZWVkIHRvIGtlZXAgc2VuZGluZyBzb21lIGNvbnRleHQgaW5mbywgYW5kIHRoZXJlJ3Mgbm8gICovCisgIC8qIGVycm9ycywga2VlcCBzZW5kaW5nIGl0Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBmb3IoOzspIHsKKworICAgIHNzcGlfbWFqb3Jfc3RhdHVzID0gc19wU2VjRm4tPkluaXRpYWxpemVTZWN1cml0eUNvbnRleHRBKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNyZWRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dF9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU0NfUkVRX01VVFVBTF9BVVRIIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTQ19SRVFfQUxMT0NBVEVfTUVNT1JZIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTQ19SRVFfQ09ORklERU5USUFMSVRZIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTQ19SRVFfUkVQTEFZX0RFVEVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUNVUklUWV9OQVRJVkVfRFJFUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnB1dF9kZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc3BpX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHV0X2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3NwaV9yZXRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwaXJ5KTsKKworICAgIGlmKHNzcGlfcmVjdl90b2tlbi5wdkJ1ZmZlcikgeworICAgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKHNzcGlfcmVjdl90b2tlbi5wdkJ1ZmZlcik7CisgICAgICBzc3BpX3JlY3ZfdG9rZW4ucHZCdWZmZXIgPSBOVUxMOworICAgICAgc3NwaV9yZWN2X3Rva2VuLmNiQnVmZmVyID0gMDsKKyAgICB9CisKKyAgICBpZihjaGVja19zc3BpX2VycihkYXRhLHNzcGlfbWFqb3Jfc3RhdHVzLHNzcGlfbWlub3Jfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICJJbml0aWFsaXplU2VjdXJpdHlDb250ZXh0QSIpICkgeworICAgICAgZnJlZShzZXJ2aWNlX25hbWUpOworICAgICAgc2VydmljZV9uYW1lPU5VTEw7CisgICAgICBzX3BTZWNGbi0+RnJlZUNyZWRlbnRpYWxzSGFuZGxlKCZjcmVkX2hhbmRsZSk7CisgICAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKHNzcGlfcmVjdl90b2tlbi5wdkJ1ZmZlcik7CisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIGluaXRpYWxpc2Ugc2VjdXJpdHkgY29udGV4dC4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorCisgICAgaWYoc3NwaV9zZW5kX3Rva2VuLmNiQnVmZmVyICE9IDApIHsKKyAgICAgIHNvY2tzcmVxWzBdID0gMTsgICAgLyogZ3NzYXBpIHN1Ym5lZ290aWF0aW9uIHZlcnNpb24gKi8KKyAgICAgIHNvY2tzcmVxWzFdID0gMTsgICAgLyogYXV0aGVudGljYXRpb24gbWVzc2FnZSB0eXBlICovCisgICAgICB1c19sZW5ndGggPSBodG9ucygoc2hvcnQpc3NwaV9zZW5kX3Rva2VuLmNiQnVmZmVyKTsKKyAgICAgIG1lbWNweShzb2Nrc3JlcSsyLCAmdXNfbGVuZ3RoLCBzaXplb2Yoc2hvcnQpKTsKKworICAgICAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilzb2Nrc3JlcSwgNCwgJndyaXR0ZW4pOworICAgICAgaWYoKGNvZGUgIT0gQ1VSTEVfT0spIHx8ICg0ICE9IHdyaXR0ZW4pKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBTU1BJIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuIik7CisgICAgICAgIGZyZWUoc2VydmljZV9uYW1lKTsKKyAgICAgICAgc2VydmljZV9uYW1lPU5VTEw7CisgICAgICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3NlbmRfdG9rZW4ucHZCdWZmZXIpOworICAgICAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoc3NwaV9yZWN2X3Rva2VuLnB2QnVmZmVyKTsKKyAgICAgICAgc19wU2VjRm4tPkZyZWVDcmVkZW50aWFsc0hhbmRsZSgmY3JlZF9oYW5kbGUpOworICAgICAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgICAgfQorCisgICAgICBjb2RlID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrLCAoY2hhciAqKXNzcGlfc2VuZF90b2tlbi5wdkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzcGlfc2VuZF90b2tlbi5jYkJ1ZmZlciwgJndyaXR0ZW4pOworICAgICAgaWYoKGNvZGUgIT0gQ1VSTEVfT0spIHx8IChzc3BpX3NlbmRfdG9rZW4uY2JCdWZmZXIgIT0gKHNpemVfdCl3cml0dGVuKSkgeworICAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgU1NQSSBhdXRoZW50aWNhdGlvbiB0b2tlbi4iKTsKKyAgICAgICAgZnJlZShzZXJ2aWNlX25hbWUpOworICAgICAgICBzZXJ2aWNlX25hbWU9TlVMTDsKKyAgICAgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKHNzcGlfc2VuZF90b2tlbi5wdkJ1ZmZlcik7CisgICAgICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3JlY3ZfdG9rZW4ucHZCdWZmZXIpOworICAgICAgICBzX3BTZWNGbi0+RnJlZUNyZWRlbnRpYWxzSGFuZGxlKCZjcmVkX2hhbmRsZSk7CisgICAgICAgIHNfcFNlY0ZuLT5EZWxldGVTZWN1cml0eUNvbnRleHQoJnNzcGlfY29udGV4dCk7CisgICAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICB9CisKKyAgICB9CisKKyAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoc3NwaV9zZW5kX3Rva2VuLnB2QnVmZmVyKTsKKyAgICBzc3BpX3NlbmRfdG9rZW4ucHZCdWZmZXIgPSBOVUxMOworICAgIHNzcGlfc2VuZF90b2tlbi5jYkJ1ZmZlciA9IDA7CisgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKHNzcGlfcmVjdl90b2tlbi5wdkJ1ZmZlcik7CisgICAgc3NwaV9yZWN2X3Rva2VuLnB2QnVmZmVyID0gTlVMTDsKKyAgICBzc3BpX3JlY3ZfdG9rZW4uY2JCdWZmZXIgPSAwOworICAgIGlmKHNzcGlfbWFqb3Jfc3RhdHVzICE9IFNFQ19JX0NPTlRJTlVFX05FRURFRCkgIGJyZWFrOworCisgICAgLyogYW5hbHlzZSByZXNwb25zZSAqLworCisgICAgLyogICBHU1NBUEkgcmVzcG9uc2UgbG9va3MgbGlrZQorICAgICAqICstLS0tKy0tLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgICAqIHxWRVIgfCBNVFlQIHwgTEVOIHwgICAgIFRPS0VOICAgICAgfAorICAgICAqICstLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAqIHwgMSAgfCAgMSAgIHwgIDIgIHwgdXAgdG8gMl4xNiAtIDEgfAorICAgICAqICstLS0tKy0tLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tKworICAgICAqLworCisgICAgcmVzdWx0PUN1cmxfYmxvY2tyZWFkX2FsbChjb25uLCBzb2NrLCAoY2hhciAqKXNvY2tzcmVxLCA0LCAmYWN0dWFscmVhZCk7CisgICAgaWYocmVzdWx0ICE9IENVUkxFX09LIHx8IGFjdHVhbHJlYWQgIT0gNCkgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byByZWNlaXZlIFNTUEkgYXV0aGVudGljYXRpb24gcmVzcG9uc2UuIik7CisgICAgICBmcmVlKHNlcnZpY2VfbmFtZSk7CisgICAgICBzZXJ2aWNlX25hbWU9TlVMTDsKKyAgICAgIHNfcFNlY0ZuLT5GcmVlQ3JlZGVudGlhbHNIYW5kbGUoJmNyZWRfaGFuZGxlKTsKKyAgICAgIHNfcFNlY0ZuLT5EZWxldGVTZWN1cml0eUNvbnRleHQoJnNzcGlfY29udGV4dCk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKworICAgIC8qIGlnbm9yZSB0aGUgZmlyc3QgKFZFUikgYnl0ZSAqLworICAgIGlmKHNvY2tzcmVxWzFdID09IDI1NSkgeyAvKiBzdGF0dXMgLyBtZXNzYWdlIHR5cGUgKi8KKyAgICAgIGZhaWxmKGRhdGEsICJVc2VyIHdhcyByZWplY3RlZCBieSB0aGUgU09DS1M1IHNlcnZlciAoJWQgJWQpLiIsCisgICAgICAgICAgICBzb2Nrc3JlcVswXSwgc29ja3NyZXFbMV0pOworICAgICAgZnJlZShzZXJ2aWNlX25hbWUpOworICAgICAgc2VydmljZV9uYW1lPU5VTEw7CisgICAgICBzX3BTZWNGbi0+RnJlZUNyZWRlbnRpYWxzSGFuZGxlKCZjcmVkX2hhbmRsZSk7CisgICAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisKKyAgICBpZihzb2Nrc3JlcVsxXSAhPSAxKSB7IC8qIHN0YXR1cyAvIG1lc3NnYWUgdHlwZSAqLworICAgICAgZmFpbGYoZGF0YSwgIkludmFsaWQgU1NQSSBhdXRoZW50aWNhdGlvbiByZXNwb25zZSB0eXBlICglZCAlZCkuIiwKKyAgICAgICAgICAgIHNvY2tzcmVxWzBdLCBzb2Nrc3JlcVsxXSk7CisgICAgICBmcmVlKHNlcnZpY2VfbmFtZSk7CisgICAgICBzZXJ2aWNlX25hbWU9TlVMTDsKKyAgICAgIHNfcFNlY0ZuLT5GcmVlQ3JlZGVudGlhbHNIYW5kbGUoJmNyZWRfaGFuZGxlKTsKKyAgICAgIHNfcFNlY0ZuLT5EZWxldGVTZWN1cml0eUNvbnRleHQoJnNzcGlfY29udGV4dCk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKworICAgIG1lbWNweSgmdXNfbGVuZ3RoLCBzb2Nrc3JlcSsyLCBzaXplb2Yoc2hvcnQpKTsKKyAgICB1c19sZW5ndGggPSBudG9ocyh1c19sZW5ndGgpOworCisgICAgc3NwaV9yZWN2X3Rva2VuLmNiQnVmZmVyID0gdXNfbGVuZ3RoOworICAgIHNzcGlfcmVjdl90b2tlbi5wdkJ1ZmZlciA9IG1hbGxvYyh1c19sZW5ndGgpOworCisgICAgaWYoIXNzcGlfcmVjdl90b2tlbi5wdkJ1ZmZlcikgeworICAgICAgZnJlZShzZXJ2aWNlX25hbWUpOworICAgICAgc2VydmljZV9uYW1lPU5VTEw7CisgICAgICBzX3BTZWNGbi0+RnJlZUNyZWRlbnRpYWxzSGFuZGxlKCZjcmVkX2hhbmRsZSk7CisgICAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQorICAgIHJlc3VsdCA9IEN1cmxfYmxvY2tyZWFkX2FsbChjb25uLCBzb2NrLCAoY2hhciAqKXNzcGlfcmVjdl90b2tlbi5wdkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NwaV9yZWN2X3Rva2VuLmNiQnVmZmVyLCAmYWN0dWFscmVhZCk7CisKKyAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0sgfHwgYWN0dWFscmVhZCAhPSB1c19sZW5ndGgpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVjZWl2ZSBTU1BJIGF1dGhlbnRpY2F0aW9uIHRva2VuLiIpOworICAgICAgZnJlZShzZXJ2aWNlX25hbWUpOworICAgICAgc2VydmljZV9uYW1lPU5VTEw7CisgICAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoc3NwaV9yZWN2X3Rva2VuLnB2QnVmZmVyKTsKKyAgICAgIHNfcFNlY0ZuLT5GcmVlQ3JlZGVudGlhbHNIYW5kbGUoJmNyZWRfaGFuZGxlKTsKKyAgICAgIHNfcFNlY0ZuLT5EZWxldGVTZWN1cml0eUNvbnRleHQoJnNzcGlfY29udGV4dCk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKworICAgIGNvbnRleHRfaGFuZGxlID0gJnNzcGlfY29udGV4dDsKKyAgfQorCisgIGZyZWUoc2VydmljZV9uYW1lKTsKKyAgc2VydmljZV9uYW1lPU5VTEw7CisKKyAgLyogRXZlcnl0aGluZyBpcyBnb29kIHNvIGZhciwgdXNlciB3YXMgYXV0aGVudGljYXRlZCEgKi8KKyAgc3NwaV9tYWpvcl9zdGF0dXMgPQorICAgIHNfcFNlY0ZuLT5RdWVyeUNyZWRlbnRpYWxzQXR0cmlidXRlcyggJmNyZWRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDUEtHX0NSRURfQVRUUl9OQU1FUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lcyk7CisgIHNfcFNlY0ZuLT5GcmVlQ3JlZGVudGlhbHNIYW5kbGUoJmNyZWRfaGFuZGxlKTsKKyAgaWYoY2hlY2tfc3NwaV9lcnIoZGF0YSxzc3BpX21ham9yX3N0YXR1cyxzc3BpX21pbm9yX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgIlF1ZXJ5Q3JlZGVudGlhbEF0dHJpYnV0ZXMiKSApIHsKKyAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihuYW1lcy5zVXNlck5hbWUpOworICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gZGV0ZXJtaW5lIHVzZXIgbmFtZS4iKTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisgIGluZm9mKGRhdGEsICJTT0NLUzUgc2VydmVyIGF1dGhlbmN0aWNhdGVkIHVzZXIgJXMgd2l0aCBnc3NhcGkuXG4iLAorICAgICAgICBuYW1lcy5zVXNlck5hbWUpOworICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIobmFtZXMuc1VzZXJOYW1lKTsKKworICAvKiBEbyBlbmNyeXB0aW9uICovCisgIHNvY2tzcmVxWzBdID0gMTsgICAgLyogZ3NzYXBpIHN1Ym5lZ290aWF0aW9uIHZlcnNpb24gKi8KKyAgc29ja3NyZXFbMV0gPSAyOyAgICAvKiBlbmNyeXB0aW9uIG1lc3NhZ2UgdHlwZSAqLworCisgIGdzc19lbmMgPSAwOyAvKiBubyBkYXRhIHByb3RlY3Rpb24gKi8KKyAgLyogZG8gY29uZmlkZW50aWFsaXR5IHByb3RlY3Rpb24gaWYgc3VwcG9ydGVkICovCisgIGlmKHNzcGlfcmV0X2ZsYWdzICYgSVNDX1JFUV9DT05GSURFTlRJQUxJVFkpCisgICAgZ3NzX2VuYyA9IDI7CisgIC8qIGVsc2UgZG8gaW50ZWdyaXR5IHByb3RlY3Rpb24gKi8KKyAgZWxzZSBpZihzc3BpX3JldF9mbGFncyAmIElTQ19SRVFfSU5URUdSSVRZKQorICAgIGdzc19lbmMgPSAxOworCisgIGluZm9mKGRhdGEsICJTT0NLUzUgc2VydmVyIHN1cHBvcnRzIGdzc2FwaSAlcyBkYXRhIHByb3RlY3Rpb24uXG4iLAorICAgICAgICAoZ3NzX2VuYz09MCk/Im5vIjooKGdzc19lbmM9PTEpPyJpbnRlZ3JpdHkiOiJjb25maWRlbnRpYWxpdHkiKSApOworICAvKiBmb3JjZSB0byBubyBkYXRhIHByb3RlY3Rpb24sIGF2b2lkIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBmb3Igbm93ICovCisgIGdzc19lbmMgPSAwOworICAvKgorICAgKiBTZW5kaW5nIHRoZSBlbmNyeXB0aW9uIHR5cGUgaW4gY2xlYXIgc2VlbXMgd3JvbmcuIEl0IHNob3VsZCBiZQorICAgKiBwcm90ZWN0ZWQgd2l0aCBnc3Nfc2VhbCgpL2dzc193cmFwKCkuIFNlZSBSRkMxOTYxIGV4dHJhY3QgYmVsb3cKKyAgICogVGhlIE5FQyByZWZlcmVuY2UgaW1wbGVtZW50YXRpb25zIG9uIHdoaWNoIHRoaXMgaXMgYmFzZWQgaXMKKyAgICogdGhlcmVmb3JlIGF0IGZhdWx0CisgICAqCisgICAqICArLS0tLS0tKy0tLS0tLSstLS0tLS0rLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4rCisgICAqICArIHZlciAgfCBtdHlwIHwgbGVuICB8ICAgdG9rZW4gICAgICAgICAgICAgICB8CisgICAqICArLS0tLS0tKy0tLS0tLSstLS0tLS0rLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4rCisgICAqICArIDB4MDEgfCAweDAyIHwgMHgwMiB8IHVwIHRvIDJeMTYgLSAxIG9jdGV0cyB8CisgICAqICArLS0tLS0tKy0tLS0tLSstLS0tLS0rLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4rCisgICAqCisgICAqICAgV2hlcmU6CisgICAqCisgICAqICAtICJ2ZXIiIGlzIHRoZSBwcm90b2NvbCB2ZXJzaW9uIG51bWJlciwgaGVyZSAxIHRvIHJlcHJlc2VudCB0aGUKKyAgICogICAgZmlyc3QgdmVyc2lvbiBvZiB0aGUgU09DS1MvR1NTLUFQSSBwcm90b2NvbAorICAgKgorICAgKiAgLSAibXR5cCIgaXMgdGhlIG1lc3NhZ2UgdHlwZSwgaGVyZSAyIHRvIHJlcHJlc2VudCBhIHByb3RlY3Rpb24KKyAgICogICAgLWxldmVsIG5lZ290aWF0aW9uIG1lc3NhZ2UKKyAgICoKKyAgICogIC0gImxlbiIgaXMgdGhlIGxlbmd0aCBvZiB0aGUgInRva2VuIiBmaWVsZCBpbiBvY3RldHMKKyAgICoKKyAgICogIC0gInRva2VuIiBpcyB0aGUgR1NTLUFQSSBlbmNhcHN1bGF0ZWQgcHJvdGVjdGlvbiBsZXZlbAorICAgKgorICAgKiBUaGUgdG9rZW4gaXMgcHJvZHVjZWQgYnkgZW5jYXBzdWxhdGluZyBhbiBvY3RldCBjb250YWluaW5nIHRoZQorICAgKiByZXF1aXJlZCBwcm90ZWN0aW9uIGxldmVsIHVzaW5nIGdzc19zZWFsKCkvZ3NzX3dyYXAoKSB3aXRoIGNvbmZfcmVxCisgICAqIHNldCB0byBGQUxTRS4gIFRoZSB0b2tlbiBpcyB2ZXJpZmllZCB1c2luZyBnc3NfdW5zZWFsKCkvCisgICAqIGdzc191bndyYXAoKS4KKyAgICoKKyAgICovCisKKyAgaWYoZGF0YS0+c2V0LnNvY2tzNV9nc3NhcGlfbmVjKSB7CisgICAgdXNfbGVuZ3RoID0gaHRvbnMoKHNob3J0KTEpOworICAgIG1lbWNweShzb2Nrc3JlcSsyLCAmdXNfbGVuZ3RoLCBzaXplb2Yoc2hvcnQpKTsKKyAgfQorICBlbHNlIHsKKyAgICBzc3BpX21ham9yX3N0YXR1cyA9IHNfcFNlY0ZuLT5RdWVyeUNvbnRleHRBdHRyaWJ1dGVzQSggJnNzcGlfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VDUEtHX0FUVFJfU0laRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc3BpX3NpemVzKTsKKyAgICBpZihjaGVja19zc3BpX2VycihkYXRhLHNzcGlfbWFqb3Jfc3RhdHVzLHNzcGlfbWlub3Jfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICJRdWVyeUNvbnRleHRBdHRyaWJ1dGVzQSIpKSB7CisgICAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBxdWVyeSBzZWN1cml0eSBjb250ZXh0IGF0dHJpYnV0ZXMuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKworICAgIHNzcGlfd190b2tlblswXS5jYkJ1ZmZlciA9IHNzcGlfc2l6ZXMuY2JTZWN1cml0eVRyYWlsZXI7CisgICAgc3NwaV93X3Rva2VuWzBdLkJ1ZmZlclR5cGUgPSBTRUNCVUZGRVJfVE9LRU47CisgICAgc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyID0gbWFsbG9jKHNzcGlfc2l6ZXMuY2JTZWN1cml0eVRyYWlsZXIpOworCisgICAgaWYoIXNzcGlfd190b2tlblswXS5wdkJ1ZmZlcikgeworICAgICAgc19wU2VjRm4tPkRlbGV0ZVNlY3VyaXR5Q29udGV4dCgmc3NwaV9jb250ZXh0KTsKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKworICAgIHNzcGlfd190b2tlblsxXS5jYkJ1ZmZlciA9IDE7CisgICAgc3NwaV93X3Rva2VuWzFdLnB2QnVmZmVyID0gbWFsbG9jKDEpOworICAgIGlmKCFzc3BpX3dfdG9rZW5bMV0ucHZCdWZmZXIpIHsKKyAgICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3dfdG9rZW5bMF0ucHZCdWZmZXIpOworICAgICAgc19wU2VjRm4tPkRlbGV0ZVNlY3VyaXR5Q29udGV4dCgmc3NwaV9jb250ZXh0KTsKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKworICAgIG1lbWNweShzc3BpX3dfdG9rZW5bMV0ucHZCdWZmZXIsJmdzc19lbmMsMSk7CisgICAgc3NwaV93X3Rva2VuWzJdLkJ1ZmZlclR5cGUgPSBTRUNCVUZGRVJfUEFERElORzsKKyAgICBzc3BpX3dfdG9rZW5bMl0uY2JCdWZmZXIgPSBzc3BpX3NpemVzLmNiQmxvY2tTaXplOworICAgIHNzcGlfd190b2tlblsyXS5wdkJ1ZmZlciA9IG1hbGxvYyhzc3BpX3NpemVzLmNiQmxvY2tTaXplKTsKKyAgICBpZighc3NwaV93X3Rva2VuWzJdLnB2QnVmZmVyKSB7CisgICAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyKTsKKyAgICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3dfdG9rZW5bMV0ucHZCdWZmZXIpOworICAgICAgc19wU2VjRm4tPkRlbGV0ZVNlY3VyaXR5Q29udGV4dCgmc3NwaV9jb250ZXh0KTsKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKyAgICBzc3BpX21ham9yX3N0YXR1cyA9IHNfcFNlY0ZuLT5FbmNyeXB0TWVzc2FnZSggJnNzcGlfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VSQl9XUkFQX05PX0VOQ1JZUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3cmFwX2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgIGlmKGNoZWNrX3NzcGlfZXJyKGRhdGEsc3NwaV9tYWpvcl9zdGF0dXMsc3NwaV9taW5vcl9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgIkVuY3J5cHRNZXNzYWdlIikgKSB7CisgICAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyKTsKKyAgICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3dfdG9rZW5bMV0ucHZCdWZmZXIpOworICAgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKHNzcGlfd190b2tlblsyXS5wdkJ1ZmZlcik7CisgICAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBxdWVyeSBzZWN1cml0eSBjb250ZXh0IGF0dHJpYnV0ZXMuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBzc3BpX3NlbmRfdG9rZW4uY2JCdWZmZXIgPSBzc3BpX3dfdG9rZW5bMF0uY2JCdWZmZXIKKyAgICAgICsgc3NwaV93X3Rva2VuWzFdLmNiQnVmZmVyCisgICAgICArIHNzcGlfd190b2tlblsyXS5jYkJ1ZmZlcjsKKyAgICBzc3BpX3NlbmRfdG9rZW4ucHZCdWZmZXIgPSBtYWxsb2Moc3NwaV9zZW5kX3Rva2VuLmNiQnVmZmVyKTsKKyAgICBpZighc3NwaV9zZW5kX3Rva2VuLnB2QnVmZmVyKSB7CisgICAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyKTsKKyAgICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3dfdG9rZW5bMV0ucHZCdWZmZXIpOworICAgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKHNzcGlfd190b2tlblsyXS5wdkJ1ZmZlcik7CisgICAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQorCisgICAgbWVtY3B5KHNzcGlfc2VuZF90b2tlbi5wdkJ1ZmZlciwgc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyLAorICAgICAgICAgICBzc3BpX3dfdG9rZW5bMF0uY2JCdWZmZXIpOworICAgIG1lbWNweSgoUFVDSEFSKSBzc3BpX3NlbmRfdG9rZW4ucHZCdWZmZXIgKyhpbnQpc3NwaV93X3Rva2VuWzBdLmNiQnVmZmVyLAorICAgICAgICAgICBzc3BpX3dfdG9rZW5bMV0ucHZCdWZmZXIsIHNzcGlfd190b2tlblsxXS5jYkJ1ZmZlcik7CisgICAgbWVtY3B5KChQVUNIQVIpIHNzcGlfc2VuZF90b2tlbi5wdkJ1ZmZlcgorICAgICAgICAgICArc3NwaV93X3Rva2VuWzBdLmNiQnVmZmVyCisgICAgICAgICAgICtzc3BpX3dfdG9rZW5bMV0uY2JCdWZmZXIsCisgICAgICAgICAgIHNzcGlfd190b2tlblsyXS5wdkJ1ZmZlciwgc3NwaV93X3Rva2VuWzJdLmNiQnVmZmVyKTsKKworICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3dfdG9rZW5bMF0ucHZCdWZmZXIpOworICAgIHNzcGlfd190b2tlblswXS5wdkJ1ZmZlciA9IE5VTEw7CisgICAgc3NwaV93X3Rva2VuWzBdLmNiQnVmZmVyID0gMDsKKyAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoc3NwaV93X3Rva2VuWzFdLnB2QnVmZmVyKTsKKyAgICBzc3BpX3dfdG9rZW5bMV0ucHZCdWZmZXIgPSBOVUxMOworICAgIHNzcGlfd190b2tlblsxXS5jYkJ1ZmZlciA9IDA7CisgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKHNzcGlfd190b2tlblsyXS5wdkJ1ZmZlcik7CisgICAgc3NwaV93X3Rva2VuWzJdLnB2QnVmZmVyID0gTlVMTDsKKyAgICBzc3BpX3dfdG9rZW5bMl0uY2JCdWZmZXIgPSAwOworCisgICAgdXNfbGVuZ3RoID0gaHRvbnMoKHNob3J0KXNzcGlfc2VuZF90b2tlbi5jYkJ1ZmZlcik7CisgICAgbWVtY3B5KHNvY2tzcmVxKzIsJnVzX2xlbmd0aCxzaXplb2Yoc2hvcnQpKTsKKyAgfQorCisgIGNvZGUgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsIDQsICZ3cml0dGVuKTsKKyAgaWYoKGNvZGUgIT0gQ1VSTEVfT0spIHx8ICg0ICE9IHdyaXR0ZW4pKSB7CisgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBzZW5kIFNTUEkgZW5jcnlwdGlvbiByZXF1ZXN0LiIpOworICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3NlbmRfdG9rZW4ucHZCdWZmZXIpOworICAgIHNfcFNlY0ZuLT5EZWxldGVTZWN1cml0eUNvbnRleHQoJnNzcGlfY29udGV4dCk7CisgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgfQorCisgIGlmKGRhdGEtPnNldC5zb2NrczVfZ3NzYXBpX25lYykgeworICAgIG1lbWNweShzb2Nrc3JlcSwmZ3NzX2VuYywxKTsKKyAgICBjb2RlID0gQ3VybF93cml0ZV9wbGFpbihjb25uLCBzb2NrLCAoY2hhciAqKXNvY2tzcmVxLCAxLCAmd3JpdHRlbik7CisgICAgaWYoKGNvZGUgIT0gQ1VSTEVfT0spIHx8ICgxICE9IHdyaXR0ZW4pKSB7CisgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHNlbmQgU1NQSSBlbmNyeXB0aW9uIHR5cGUuIik7CisgICAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgY29kZSA9IEN1cmxfd3JpdGVfcGxhaW4oY29ubiwgc29jaywgKGNoYXIgKilzc3BpX3NlbmRfdG9rZW4ucHZCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NwaV9zZW5kX3Rva2VuLmNiQnVmZmVyLCAmd3JpdHRlbik7CisgICAgaWYoKGNvZGUgIT0gQ1VSTEVfT0spIHx8IChzc3BpX3NlbmRfdG9rZW4uY2JCdWZmZXIgIT0gKHNpemVfdCl3cml0dGVuKSkgeworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBzZW5kIFNTUEkgZW5jcnlwdGlvbiB0eXBlLiIpOworICAgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKHNzcGlfc2VuZF90b2tlbi5wdkJ1ZmZlcik7CisgICAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKKyAgICB9CisgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKHNzcGlfc2VuZF90b2tlbi5wdkJ1ZmZlcik7CisgIH0KKworICByZXN1bHQ9Q3VybF9ibG9ja3JlYWRfYWxsKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsIDQsICZhY3R1YWxyZWFkKTsKKyAgaWYocmVzdWx0ICE9IENVUkxFX09LIHx8IGFjdHVhbHJlYWQgIT0gNCkgeworICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVjZWl2ZSBTU1BJIGVuY3J5cHRpb24gcmVzcG9uc2UuIik7CisgICAgc19wU2VjRm4tPkRlbGV0ZVNlY3VyaXR5Q29udGV4dCgmc3NwaV9jb250ZXh0KTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisKKyAgLyogaWdub3JlIHRoZSBmaXJzdCAoVkVSKSBieXRlICovCisgIGlmKHNvY2tzcmVxWzFdID09IDI1NSkgeyAvKiBzdGF0dXMgLyBtZXNzYWdlIHR5cGUgKi8KKyAgICBmYWlsZihkYXRhLCAiVXNlciB3YXMgcmVqZWN0ZWQgYnkgdGhlIFNPQ0tTNSBzZXJ2ZXIgKCVkICVkKS4iLAorICAgICAgICAgIHNvY2tzcmVxWzBdLCBzb2Nrc3JlcVsxXSk7CisgICAgc19wU2VjRm4tPkRlbGV0ZVNlY3VyaXR5Q29udGV4dCgmc3NwaV9jb250ZXh0KTsKKyAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICB9CisKKyAgaWYoc29ja3NyZXFbMV0gIT0gMikgeyAvKiBzdGF0dXMgLyBtZXNzYWdlIHR5cGUgKi8KKyAgICBmYWlsZihkYXRhLCAiSW52YWxpZCBTU1BJIGVuY3J5cHRpb24gcmVzcG9uc2UgdHlwZSAoJWQgJWQpLiIsCisgICAgICAgICAgc29ja3NyZXFbMF0sIHNvY2tzcmVxWzFdKTsKKyAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIH0KKworICBtZW1jcHkoJnVzX2xlbmd0aCwgc29ja3NyZXErMiwgc2l6ZW9mKHNob3J0KSk7CisgIHVzX2xlbmd0aCA9IG50b2hzKHVzX2xlbmd0aCk7CisKKyAgc3NwaV93X3Rva2VuWzBdLmNiQnVmZmVyID0gdXNfbGVuZ3RoOworICBzc3BpX3dfdG9rZW5bMF0ucHZCdWZmZXIgPSBtYWxsb2ModXNfbGVuZ3RoKTsKKyAgaWYoIXNzcGlfd190b2tlblswXS5wdkJ1ZmZlcikgeworICAgIHNfcFNlY0ZuLT5EZWxldGVTZWN1cml0eUNvbnRleHQoJnNzcGlfY29udGV4dCk7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICByZXN1bHQ9Q3VybF9ibG9ja3JlYWRfYWxsKGNvbm4sIHNvY2ssIChjaGFyICopc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzcGlfd190b2tlblswXS5jYkJ1ZmZlciwgJmFjdHVhbHJlYWQpOworCisgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSyB8fCBhY3R1YWxyZWFkICE9IHVzX2xlbmd0aCkgeworICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVjZWl2ZSBTU1BJIGVuY3J5cHRpb24gdHlwZS4iKTsKKyAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyKTsKKyAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIH0KKworCisgIGlmKCFkYXRhLT5zZXQuc29ja3M1X2dzc2FwaV9uZWMpIHsKKyAgICB3cmFwX2Rlc2MuY0J1ZmZlcnMgPSAyOworICAgIHNzcGlfd190b2tlblswXS5CdWZmZXJUeXBlID0gU0VDQlVGRkVSX1NUUkVBTTsKKyAgICBzc3BpX3dfdG9rZW5bMV0uQnVmZmVyVHlwZSA9IFNFQ0JVRkZFUl9EQVRBOworICAgIHNzcGlfd190b2tlblsxXS5jYkJ1ZmZlciA9IDA7CisgICAgc3NwaV93X3Rva2VuWzFdLnB2QnVmZmVyID0gTlVMTDsKKworICAgIHNzcGlfbWFqb3Jfc3RhdHVzID0gc19wU2VjRm4tPkRlY3J5cHRNZXNzYWdlKCAmc3NwaV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3JhcF9kZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcW9wKTsKKworICAgIGlmKGNoZWNrX3NzcGlfZXJyKGRhdGEsc3NwaV9tYWpvcl9zdGF0dXMsc3NwaV9taW5vcl9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgIkRlY3J5cHRNZXNzYWdlIikpIHsKKyAgICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3dfdG9rZW5bMF0ucHZCdWZmZXIpOworICAgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKHNzcGlfd190b2tlblsxXS5wdkJ1ZmZlcik7CisgICAgICBzX3BTZWNGbi0+RGVsZXRlU2VjdXJpdHlDb250ZXh0KCZzc3BpX2NvbnRleHQpOworICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBxdWVyeSBzZWN1cml0eSBjb250ZXh0IGF0dHJpYnV0ZXMuIik7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKworICAgIGlmKHNzcGlfd190b2tlblsxXS5jYkJ1ZmZlciAhPSAxKSB7CisgICAgICBmYWlsZihkYXRhLCAiSW52YWxpZCBTU1BJIGVuY3J5cHRpb24gcmVzcG9uc2UgbGVuZ3RoICglZCkuIiwKKyAgICAgICAgICAgIHNzcGlfd190b2tlblsxXS5jYkJ1ZmZlcik7CisgICAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyKTsKKyAgICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3dfdG9rZW5bMV0ucHZCdWZmZXIpOworICAgICAgc19wU2VjRm4tPkRlbGV0ZVNlY3VyaXR5Q29udGV4dCgmc3NwaV9jb250ZXh0KTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorCisgICAgbWVtY3B5KHNvY2tzcmVxLHNzcGlfd190b2tlblsxXS5wdkJ1ZmZlcixzc3BpX3dfdG9rZW5bMV0uY2JCdWZmZXIpOworICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3dfdG9rZW5bMF0ucHZCdWZmZXIpOworICAgIHNfcFNlY0ZuLT5GcmVlQ29udGV4dEJ1ZmZlcihzc3BpX3dfdG9rZW5bMV0ucHZCdWZmZXIpOworICB9CisgIGVsc2UgeworICAgIGlmKHNzcGlfd190b2tlblswXS5jYkJ1ZmZlciAhPSAxKSB7CisgICAgICBmYWlsZihkYXRhLCAiSW52YWxpZCBTU1BJIGVuY3J5cHRpb24gcmVzcG9uc2UgbGVuZ3RoICglZCkuIiwKKyAgICAgICAgICAgIHNzcGlfd190b2tlblswXS5jYkJ1ZmZlcik7CisgICAgICBzX3BTZWNGbi0+RnJlZUNvbnRleHRCdWZmZXIoc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyKTsKKyAgICAgIHNfcFNlY0ZuLT5EZWxldGVTZWN1cml0eUNvbnRleHQoJnNzcGlfY29udGV4dCk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KKyAgICBtZW1jcHkoc29ja3NyZXEsc3NwaV93X3Rva2VuWzBdLnB2QnVmZmVyLHNzcGlfd190b2tlblswXS5jYkJ1ZmZlcik7CisgICAgc19wU2VjRm4tPkZyZWVDb250ZXh0QnVmZmVyKHNzcGlfd190b2tlblswXS5wdkJ1ZmZlcik7CisgIH0KKworICBpbmZvZihkYXRhLCAiU09DS1M1IGFjY2VzcyB3aXRoJXMgcHJvdGVjdGlvbiBncmFudGVkLlxuIiwKKyAgICAgICAgKHNvY2tzcmVxWzBdPT0wKT8ib3V0IGdzc2FwaSBkYXRhIjoKKyAgICAgICAgKChzb2Nrc3JlcVswXT09MSk/IiBnc3NhcGkgaW50ZWdyaXR5IjoiIGdzc2FwaSBjb25maWRlbnRpYWxpdHkiKSk7CisKKyAgLyogRm9yIGxhdGVyIHVzZSBpZiBlbmNyeXB0aW9uIGlzIHJlcXVpcmVkCisgICAgIGNvbm4tPnNvY2tzNV9nc3NhcGlfZW5jdHlwZSA9IHNvY2tzcmVxWzBdOworICAgICBpZihzb2Nrc3JlcVswXSAhPSAwKQorICAgICBjb25uLT5zb2NrczVfc3NwaV9jb250ZXh0ID0gc3NwaV9jb250ZXh0OworICAgICBlbHNlIHsKKyAgICAgc19wU2VjRm4tPkRlbGV0ZVNlY3VyaXR5Q29udGV4dCgmc3NwaV9jb250ZXh0KTsKKyAgICAgY29ubi0+c29ja3M1X3NzcGlfY29udGV4dCA9IHNzcGlfY29udGV4dDsKKyAgICAgfQorICAqLworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9zcGVlZGNoZWNrLmMgYi9jdXJsLTcuMjUuMC9saWIvc3BlZWRjaGVjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMjMyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc3BlZWRjaGVjay5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJzcGVlZGNoZWNrLmgiCisKK3ZvaWQgQ3VybF9zcGVlZGluaXQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIG1lbXNldCgmZGF0YS0+c3RhdGUua2VlcHNfc3BlZWQsIDAsIHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpOworfQorCitDVVJMY29kZSBDdXJsX3NwZWVkY2hlY2soc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgbm93KQoreworICBpZigoZGF0YS0+cHJvZ3Jlc3MuY3VycmVudF9zcGVlZCA+PSAwKSAmJgorICAgICBkYXRhLT5zZXQubG93X3NwZWVkX3RpbWUgJiYKKyAgICAgKEN1cmxfdHZsb25nKGRhdGEtPnN0YXRlLmtlZXBzX3NwZWVkKSAhPSAwKSAmJgorICAgICAoZGF0YS0+cHJvZ3Jlc3MuY3VycmVudF9zcGVlZCA8IGRhdGEtPnNldC5sb3dfc3BlZWRfbGltaXQpKSB7CisgICAgbG9uZyBob3dsb25nID0gQ3VybF90dmRpZmYobm93LCBkYXRhLT5zdGF0ZS5rZWVwc19zcGVlZCk7CisgICAgbG9uZyBuZXh0Y2hlY2sgPSAoZGF0YS0+c2V0Lmxvd19zcGVlZF90aW1lICogMTAwMCkgLSBob3dsb25nOworCisgICAgLyogV2UgYXJlIG5vdyBiZWxvdyB0aGUgImxvdyBzcGVlZCBsaW1pdCIuIElmIHdlIGFyZSBiZWxvdyBpdAorICAgICAgIGZvciAibG93IHNwZWVkIHRpbWUiIHNlY29uZHMgd2UgY29uc2lkZXIgdGhhdCBlbm91Z2ggcmVhc29uCisgICAgICAgdG8gYWJvcnQgdGhlIGRvd25sb2FkLiAqLworICAgIGlmKG5leHRjaGVjayA8PSAwKSB7CisgICAgICAvKiB3ZSBoYXZlIGJlZW4gdGhpcyBzbG93IGZvciBsb25nIGVub3VnaCwgbm93IGRpZSAqLworICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICJPcGVyYXRpb24gdG9vIHNsb3cuICIKKyAgICAgICAgICAgICJMZXNzIHRoYW4gJWxkIGJ5dGVzL3NlYyB0cmFuc2ZlcnJlZCB0aGUgbGFzdCAlbGQgc2Vjb25kcyIsCisgICAgICAgICAgICBkYXRhLT5zZXQubG93X3NwZWVkX2xpbWl0LAorICAgICAgICAgICAgZGF0YS0+c2V0Lmxvd19zcGVlZF90aW1lKTsKKyAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogd2FpdCBjb21wbGV0ZSBsb3dfc3BlZWRfdGltZSAqLworICAgICAgQ3VybF9leHBpcmUoZGF0YSwgbmV4dGNoZWNrKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogd2Uga2VlcCB1cCB0aGUgcmVxdWlyZWQgc3BlZWQgYWxsIHJpZ2h0ICovCisgICAgZGF0YS0+c3RhdGUua2VlcHNfc3BlZWQgPSBub3c7CisKKyAgICBpZihkYXRhLT5zZXQubG93X3NwZWVkX2xpbWl0KQorICAgICAgLyogaWYgdGhlcmUgaXMgYSBsb3cgc3BlZWQgbGltaXQgZW5hYmxlZCwgd2Ugc2V0IHRoZSBleHBpcmUgdGltZXIgdG8KKyAgICAgICAgIG1ha2UgdGhpcyBjb25uZWN0aW9uJ3Mgc3BlZWQgZ2V0IGNoZWNrZWQgYWdhaW4gbm8gbGF0ZXIgdGhhbiB3aGVuCisgICAgICAgICB0aGlzIHRpbWUgaXMgdXAgKi8KKyAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIGRhdGEtPnNldC5sb3dfc3BlZWRfdGltZSoxMDAwKTsKKyAgfQorICByZXR1cm4gQ1VSTEVfT0s7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc3BlZWRjaGVjay5oIGIvY3VybC03LjI1LjAvbGliL3NwZWVkY2hlY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQwZTdkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3NwZWVkY2hlY2suaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1NQRUVEQ0hFQ0tfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9TUEVFRENIRUNLX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgInRpbWV2YWwuaCIKKwordm9pZCBDdXJsX3NwZWVkaW5pdChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CitDVVJMY29kZSBDdXJsX3NwZWVkY2hlY2soc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgbm93KTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NQRUVEQ0hFQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3NwbGF5LmMgYi9jdXJsLTcuMjUuMC9saWIvc3BsYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjY2NGU2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3NwbGF5LmMKQEAgLTAsMCArMSwyODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgInNwbGF5LmgiCisKKy8qCisgKiBUaGlzIG1hY3JvIGNvbXBhcmVzIHR3byBub2RlIGtleXMgaSBhbmQgaiBhbmQgcmV0dXJuczoKKyAqCisgKiAgbmVnYXRpdmUgdmFsdWU6IHdoZW4gaSBpcyBzbWFsbGVyIHRoYW4gagorICogIHplcm8gICAgICAgICAgOiB3aGVuIGkgaXMgZXF1YWwgICB0byAgIGoKKyAqICBwb3NpdGl2ZSB3aGVuIDogd2hlbiBpIGlzIGxhcmdlciAgdGhhbiBqCisgKi8KKyNkZWZpbmUgY29tcGFyZShpLGopIEN1cmxfc3BsYXljb21wYXJla2V5cygoaSksKGopKQorCisvKgorICogU3BsYXkgdXNpbmcgdGhlIGtleSBpICh3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSBpbiB0aGUgdHJlZS4pIFRoZSBzdGFydGluZworICogcm9vdCBpcyB0LgorICovCitzdHJ1Y3QgQ3VybF90cmVlICpDdXJsX3NwbGF5KHN0cnVjdCB0aW1ldmFsIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX3RyZWUgKnQpCit7CisgIHN0cnVjdCBDdXJsX3RyZWUgTiwgKmwsICpyLCAqeTsKKyAgbG9uZyBjb21wOworCisgIGlmKHQgPT0gTlVMTCkKKyAgICByZXR1cm4gdDsKKyAgTi5zbWFsbGVyID0gTi5sYXJnZXIgPSBOVUxMOworICBsID0gciA9ICZOOworCisgIGZvcig7OykgeworICAgIGNvbXAgPSBjb21wYXJlKGksIHQtPmtleSk7CisgICAgaWYoY29tcCA8IDApIHsKKyAgICAgIGlmKHQtPnNtYWxsZXIgPT0gTlVMTCkKKyAgICAgICAgYnJlYWs7CisgICAgICBpZihjb21wYXJlKGksIHQtPnNtYWxsZXItPmtleSkgPCAwKSB7CisgICAgICAgIHkgPSB0LT5zbWFsbGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJvdGF0ZSBzbWFsbGVyICovCisgICAgICAgIHQtPnNtYWxsZXIgPSB5LT5sYXJnZXI7CisgICAgICAgIHktPmxhcmdlciA9IHQ7CisgICAgICAgIHQgPSB5OworICAgICAgICBpZih0LT5zbWFsbGVyID09IE5VTEwpCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICByLT5zbWFsbGVyID0gdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGluayBzbWFsbGVyICovCisgICAgICByID0gdDsKKyAgICAgIHQgPSB0LT5zbWFsbGVyOworICAgIH0KKyAgICBlbHNlIGlmKGNvbXAgPiAwKSB7CisgICAgICBpZih0LT5sYXJnZXIgPT0gTlVMTCkKKyAgICAgICAgYnJlYWs7CisgICAgICBpZihjb21wYXJlKGksIHQtPmxhcmdlci0+a2V5KSA+IDApIHsKKyAgICAgICAgeSA9IHQtPmxhcmdlcjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJvdGF0ZSBsYXJnZXIgKi8KKyAgICAgICAgdC0+bGFyZ2VyID0geS0+c21hbGxlcjsKKyAgICAgICAgeS0+c21hbGxlciA9IHQ7CisgICAgICAgIHQgPSB5OworICAgICAgICBpZih0LT5sYXJnZXIgPT0gTlVMTCkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGwtPmxhcmdlciA9IHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGluayBsYXJnZXIgKi8KKyAgICAgIGwgPSB0OworICAgICAgdCA9IHQtPmxhcmdlcjsKKyAgICB9CisgICAgZWxzZQorICAgICAgYnJlYWs7CisgIH0KKworICBsLT5sYXJnZXIgPSB0LT5zbWFsbGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXNzZW1ibGUgKi8KKyAgci0+c21hbGxlciA9IHQtPmxhcmdlcjsKKyAgdC0+c21hbGxlciA9IE4ubGFyZ2VyOworICB0LT5sYXJnZXIgPSBOLnNtYWxsZXI7CisKKyAgcmV0dXJuIHQ7Cit9CisKKy8qIEluc2VydCBrZXkgaSBpbnRvIHRoZSB0cmVlIHQuICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSByZXN1bHRpbmcgdHJlZSBvcgorICogTlVMTCBpZiBzb21ldGhpbmcgd2VudCB3cm9uZy4KKyAqCisgKiBAdW5pdHRlc3Q6IDEzMDkKKyAqLworc3RydWN0IEN1cmxfdHJlZSAqQ3VybF9zcGxheWluc2VydChzdHJ1Y3QgdGltZXZhbCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF90cmVlICp0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF90cmVlICpub2RlKQoreworICBzdGF0aWMgc3RydWN0IHRpbWV2YWwgS0VZX05PVFVTRUQgPSB7LTEsLTF9OyAvKiB3aWxsICpORVZFUiogYXBwZWFyICovCisKKyAgaWYobm9kZSA9PSBOVUxMKQorICAgIHJldHVybiB0OworCisgIGlmKHQgIT0gTlVMTCkgeworICAgIHQgPSBDdXJsX3NwbGF5KGksdCk7CisgICAgaWYoY29tcGFyZShpLCB0LT5rZXkpPT0wKSB7CisgICAgICAvKiBUaGVyZSBhbHJlYWR5IGV4aXN0cyBhIG5vZGUgaW4gdGhlIHRyZWUgd2l0aCB0aGUgdmVyeSBzYW1lIGtleS4gQnVpbGQKKyAgICAgICAgIGEgbGlua2VkIGxpc3Qgb2Ygbm9kZXMuIFdlIG1ha2UgdGhlIG5ldyAnbm9kZScgc3RydWN0IHRoZSBuZXcgbWFzdGVyCisgICAgICAgICBub2RlIGFuZCBtYWtlIHRoZSBwcmV2aW91cyBub2RlIHRoZSBmaXJzdCBvbmUgaW4gdGhlICdzYW1lJyBsaXN0LiAqLworCisgICAgICBub2RlLT5zYW1lID0gdDsKKyAgICAgIG5vZGUtPmtleSA9IGk7CisgICAgICBub2RlLT5zbWFsbGVyID0gdC0+c21hbGxlcjsKKyAgICAgIG5vZGUtPmxhcmdlciA9IHQtPmxhcmdlcjsKKworICAgICAgdC0+c21hbGxlciA9IG5vZGU7IC8qIGluIHRoZSBzdWIgbm9kZSBmb3IgdGhpcyBzYW1lIGtleSwgd2UgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsZXIgcG9pbnRlciB0byBwb2ludCBiYWNrIHRvIHRoZSBtYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlICovCisKKyAgICAgIHQtPmtleSA9IEtFWV9OT1RVU0VEOyAvKiBhbmQgd2Ugc2V0IHRoZSBrZXkgaW4gdGhlIHN1YiBub2RlIHRvIE5PVFVTRUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBxdWlja2x5IGlkZW50aWZ5IHRoaXMgbm9kZSBhcyBhIHN1Ym5vZGUgKi8KKworICAgICAgcmV0dXJuIG5vZGU7IC8qIG5ldyByb290IG5vZGUgKi8KKyAgICB9CisgIH0KKworICBpZih0ID09IE5VTEwpIHsKKyAgICBub2RlLT5zbWFsbGVyID0gbm9kZS0+bGFyZ2VyID0gTlVMTDsKKyAgfQorICBlbHNlIGlmKGNvbXBhcmUoaSwgdC0+a2V5KSA8IDApIHsKKyAgICBub2RlLT5zbWFsbGVyID0gdC0+c21hbGxlcjsKKyAgICBub2RlLT5sYXJnZXIgPSB0OworICAgIHQtPnNtYWxsZXIgPSBOVUxMOworCisgIH0KKyAgZWxzZSB7CisgICAgbm9kZS0+bGFyZ2VyID0gdC0+bGFyZ2VyOworICAgIG5vZGUtPnNtYWxsZXIgPSB0OworICAgIHQtPmxhcmdlciA9IE5VTEw7CisgIH0KKyAgbm9kZS0+a2V5ID0gaTsKKworICBub2RlLT5zYW1lID0gTlVMTDsgLyogbm8gaWRlbnRpY2FsIG5vZGUgKHlldCkgKi8KKyAgcmV0dXJuIG5vZGU7Cit9CisKKy8qIEZpbmRzIGFuZCBkZWxldGVzIHRoZSBiZXN0LWZpdCBub2RlIGZyb20gdGhlIHRyZWUuIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlCisgICByZXN1bHRpbmcgdHJlZS4gIGJlc3QtZml0IG1lYW5zIHRoZSBub2RlIHdpdGggdGhlIGdpdmVuIG9yIGxvd2VyIGtleSAqLworc3RydWN0IEN1cmxfdHJlZSAqQ3VybF9zcGxheWdldGJlc3Qoc3RydWN0IHRpbWV2YWwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX3RyZWUgKnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF90cmVlICoqcmVtb3ZlZCkKK3sKKyAgc3RydWN0IEN1cmxfdHJlZSAqeDsKKworICBpZighdCkgeworICAgICpyZW1vdmVkID0gTlVMTDsgLyogbm9uZSByZW1vdmVkIHNpbmNlIHRoZXJlIHdhcyBubyByb290ICovCisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICB0ID0gQ3VybF9zcGxheShpLHQpOworICBpZihjb21wYXJlKGksIHQtPmtleSkgPCAwKSB7CisgICAgLyogdG9vIGJpZyBub2RlLCB0cnkgdGhlIHNtYWxsZXIgY2hhaW4gKi8KKyAgICBpZih0LT5zbWFsbGVyKQorICAgICAgdD1DdXJsX3NwbGF5KHQtPnNtYWxsZXItPmtleSwgdCk7CisgICAgZWxzZSB7CisgICAgICAvKiBmYWlsICovCisgICAgICAqcmVtb3ZlZCA9IE5VTEw7CisgICAgICByZXR1cm4gdDsKKyAgICB9CisgIH0KKworICBpZihjb21wYXJlKGksIHQtPmtleSkgPj0gMCkgeyAgICAgICAgICAgICAgIC8qIGZvdW5kIGl0ICovCisgICAgLyogRklSU1QhIENoZWNrIGlmIHRoZXJlIGlzIGEgbGlzdCB3aXRoIGlkZW50aWNhbCBrZXlzICovCisgICAgeCA9IHQtPnNhbWU7CisgICAgaWYoeCkgeworICAgICAgLyogdGhlcmUgaXMsIHBpY2sgb25lIGZyb20gdGhlIGxpc3QgKi8KKworICAgICAgLyogJ3gnIGlzIHRoZSBuZXcgcm9vdCBub2RlICovCisKKyAgICAgIHgtPmtleSA9IHQtPmtleTsKKyAgICAgIHgtPmxhcmdlciA9IHQtPmxhcmdlcjsKKyAgICAgIHgtPnNtYWxsZXIgPSB0LT5zbWFsbGVyOworCisgICAgICAqcmVtb3ZlZCA9IHQ7CisgICAgICByZXR1cm4geDsgLyogbmV3IHJvb3QgKi8KKyAgICB9CisKKyAgICBpZih0LT5zbWFsbGVyID09IE5VTEwpIHsKKyAgICAgIHggPSB0LT5sYXJnZXI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgeCA9IEN1cmxfc3BsYXkoaSwgdC0+c21hbGxlcik7CisgICAgICB4LT5sYXJnZXIgPSB0LT5sYXJnZXI7CisgICAgfQorICAgICpyZW1vdmVkID0gdDsKKworICAgIHJldHVybiB4OworICB9CisgIGVsc2UgeworICAgICpyZW1vdmVkID0gTlVMTDsgLyogbm8gbWF0Y2ggKi8KKyAgICByZXR1cm4gdDsgICAgICAgIC8qIEl0IHdhc24ndCB0aGVyZSAqLworICB9Cit9CisKKworLyogRGVsZXRlcyB0aGUgdmVyeSBub2RlIHdlIHBvaW50IG91dCBmcm9tIHRoZSB0cmVlIGlmIGl0J3MgdGhlcmUuIFN0b3JlcyBhCisgKiBwb2ludGVyIHRvIHRoZSBuZXcgcmVzdWx0aW5nIHRyZWUgaW4gJ25ld3Jvb3QnLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIGFuZCBub24temVybyBvbiBlcnJvcnMhIFRPRE86IGRvY3VtZW50IGVycm9yIGNvZGVzLgorICogV2hlbiByZXR1cm5pbmcgZXJyb3IsIGl0IGRvZXMgbm90IHRvdWNoIHRoZSAnbmV3cm9vdCcgcG9pbnRlci4KKyAqCisgKiBOT1RFOiB3aGVuIHRoZSBsYXN0IG5vZGUgb2YgdGhlIHRyZWUgaXMgcmVtb3ZlZCwgdGhlcmUncyBubyB0cmVlIGxlZnQgc28KKyAqICduZXdyb290JyB3aWxsIGJlIG1hZGUgdG8gcG9pbnQgdG8gTlVMTC4KKyAqCisgKiBAdW5pdHRlc3Q6IDEzMDkKKyAqLworaW50IEN1cmxfc3BsYXlyZW1vdmVieWFkZHIoc3RydWN0IEN1cmxfdHJlZSAqdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX3RyZWUgKnJlbW92ZW5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF90cmVlICoqbmV3cm9vdCkKK3sKKyAgc3RhdGljIHN0cnVjdCB0aW1ldmFsIEtFWV9OT1RVU0VEID0gey0xLC0xfTsgLyogd2lsbCAqTkVWRVIqIGFwcGVhciAqLworICBzdHJ1Y3QgQ3VybF90cmVlICp4OworCisgIGlmKCF0IHx8ICFyZW1vdmVub2RlKQorICAgIHJldHVybiAxOworCisgIGlmKGNvbXBhcmUoS0VZX05PVFVTRUQsIHJlbW92ZW5vZGUtPmtleSkgPT0gMCkgeworICAgIC8qIEtleSBzZXQgdG8gTk9UVVNFRCBtZWFucyBpdCBpcyBhIHN1Ym5vZGUgd2l0aGluIGEgJ3NhbWUnIGxpbmtlZCBsaXN0CisgICAgICAgYW5kIHRodXMgd2UgY2FuIHVubGluayBpdCBlYXNpbHkuIFRoZSAnc21hbGxlcicgbGluayBvZiBhIHN1Ym5vZGUKKyAgICAgICBsaW5rcyB0byB0aGUgcGFyZW50IG5vZGUuICovCisgICAgaWYocmVtb3Zlbm9kZS0+c21hbGxlciA9PSBOVUxMKQorICAgICAgcmV0dXJuIDM7CisKKyAgICByZW1vdmVub2RlLT5zbWFsbGVyLT5zYW1lID0gcmVtb3Zlbm9kZS0+c2FtZTsKKyAgICBpZihyZW1vdmVub2RlLT5zYW1lKQorICAgICAgcmVtb3Zlbm9kZS0+c2FtZS0+c21hbGxlciA9IHJlbW92ZW5vZGUtPnNtYWxsZXI7CisKKyAgICAvKiBFbnN1cmVzIHRoYXQgZG91YmxlLXJlbW92ZSBnZXRzIGNhdWdodC4gKi8KKyAgICByZW1vdmVub2RlLT5zbWFsbGVyID0gTlVMTDsKKworICAgIC8qIHZvaWxhLCB3ZSdyZSBkb25lISAqLworICAgICpuZXdyb290ID0gdDsgLyogcmV0dXJuIHRoZSBzYW1lIHJvb3QgKi8KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHQgPSBDdXJsX3NwbGF5KHJlbW92ZW5vZGUtPmtleSwgdCk7CisKKyAgLyogRmlyc3QgbWFrZSBzdXJlIHRoYXQgd2UgZ290IHRoZSBzYW1lIHJvb3Qgbm9kZSBhcyB0aGUgb25lIHdlIHdhbnQKKyAgICAgdG8gcmVtb3ZlLCBhcyBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgdHJ5aW5nIHRvIHJlbW92ZSBhIG5vZGUgdGhhdAorICAgICBpc24ndCBhY3R1YWxseSBpbiB0aGUgdHJlZS4KKworICAgICBXZSBjYW5ub3QganVzdCBjb21wYXJlIHRoZSBrZXlzIGhlcmUgYXMgYSBkb3VibGUgcmVtb3ZlIGluIHF1aWNrCisgICAgIHN1Y2Nlc3Npb24gb2YgYSBub2RlIHdpdGgga2V5ICE9IEtFWV9OT1RVU0VEICYmIHNhbWUgIT0gTlVMTAorICAgICBjb3VsZCByZXR1cm4gdGhlIHNhbWUga2V5IGJ1dCBhIGRpZmZlcmVudCBub2RlLiAqLworICBpZih0ICE9IHJlbW92ZW5vZGUpCisgICAgcmV0dXJuIDI7CisKKyAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgYSBsaXN0IHdpdGggaWRlbnRpY2FsIHNpemVzLCBhcyB0aGVuIHdlJ3JlIHRyeWluZyB0bworICAgICByZW1vdmUgdGhlIHJvb3Qgbm9kZSBvZiBhIGxpc3Qgb2Ygbm9kZXMgd2l0aCBpZGVudGljYWwga2V5cy4gKi8KKyAgeCA9IHQtPnNhbWU7CisgIGlmKHgpIHsKKyAgICAvKiAneCcgaXMgdGhlIG5ldyByb290IG5vZGUsIHdlIGp1c3QgbWFrZSBpdCB1c2UgdGhlIHJvb3Qgbm9kZSdzCisgICAgICAgc21hbGxlci9sYXJnZXIgbGlua3MgKi8KKworICAgIHgtPmtleSA9IHQtPmtleTsKKyAgICB4LT5sYXJnZXIgPSB0LT5sYXJnZXI7CisgICAgeC0+c21hbGxlciA9IHQtPnNtYWxsZXI7CisgIH0KKyAgZWxzZSB7CisgICAgLyogUmVtb3ZlIHRoZSByb290IG5vZGUgKi8KKyAgICBpZih0LT5zbWFsbGVyID09IE5VTEwpCisgICAgICB4ID0gdC0+bGFyZ2VyOworICAgIGVsc2UgeworICAgICAgeCA9IEN1cmxfc3BsYXkocmVtb3Zlbm9kZS0+a2V5LCB0LT5zbWFsbGVyKTsKKyAgICAgIHgtPmxhcmdlciA9IHQtPmxhcmdlcjsKKyAgICB9CisgIH0KKworICAqbmV3cm9vdCA9IHg7IC8qIHN0b3JlIG5ldyByb290IHBvaW50ZXIgKi8KKworICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3NwbGF5LmggYi9jdXJsLTcuMjUuMC9saWIvc3BsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWE2ZGVjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3NwbGF5LmgKQEAgLTAsMCArMSw2NiBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9TUExBWV9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1NQTEFZX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKK3N0cnVjdCBDdXJsX3RyZWUgeworICBzdHJ1Y3QgQ3VybF90cmVlICpzbWFsbGVyOyAvKiBzbWFsbGVyIG5vZGUgKi8KKyAgc3RydWN0IEN1cmxfdHJlZSAqbGFyZ2VyOyAgLyogbGFyZ2VyIG5vZGUgKi8KKyAgc3RydWN0IEN1cmxfdHJlZSAqc2FtZTsgICAgLyogcG9pbnRzIHRvIGEgbm9kZSB3aXRoIGlkZW50aWNhbCBrZXkgKi8KKyAgc3RydWN0IHRpbWV2YWwga2V5OyAgICAgICAgLyogdGhpcyBub2RlJ3MgInNvcnQiIGtleSAqLworICB2b2lkICpwYXlsb2FkOyAgICAgICAgICAgICAvKiBkYXRhIHRoZSBzcGxheSBjb2RlIGRvZXNuJ3QgY2FyZSBhYm91dCAqLworfTsKKworc3RydWN0IEN1cmxfdHJlZSAqQ3VybF9zcGxheShzdHJ1Y3QgdGltZXZhbCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF90cmVlICp0KTsKKworc3RydWN0IEN1cmxfdHJlZSAqQ3VybF9zcGxheWluc2VydChzdHJ1Y3QgdGltZXZhbCBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX3RyZWUgKnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX3RyZWUgKm5ld25vZGUpOworCisjaWYgMAorc3RydWN0IEN1cmxfdHJlZSAqQ3VybF9zcGxheXJlbW92ZShzdHJ1Y3QgdGltZXZhbCBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX3RyZWUgKnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX3RyZWUgKipyZW1vdmVkKTsKKyNlbmRpZgorCitzdHJ1Y3QgQ3VybF90cmVlICpDdXJsX3NwbGF5Z2V0YmVzdChzdHJ1Y3QgdGltZXZhbCBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF90cmVlICp0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfdHJlZSAqKnJlbW92ZWQpOworCitpbnQgQ3VybF9zcGxheXJlbW92ZWJ5YWRkcihzdHJ1Y3QgQ3VybF90cmVlICp0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfdHJlZSAqcmVtb3Zlbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX3RyZWUgKipuZXdyb290KTsKKworI2RlZmluZSBDdXJsX3NwbGF5Y29tcGFyZWtleXMoaSxqKSAoICgoaS50dl9zZWMpICA8IChqLnR2X3NlYykpICA/IC0xIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICgoaS50dl9zZWMpICA+IChqLnR2X3NlYykpICA/ICAxIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICgoaS50dl91c2VjKSA8IChqLnR2X3VzZWMpKSA/IC0xIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICgoaS50dl91c2VjKSA+IChqLnR2X3VzZWMpKSA/ICAxIDogMCApKSkpCisKKyNpZmRlZiBERUJVR0JVSUxECit2b2lkIEN1cmxfc3BsYXlwcmludChzdHJ1Y3QgQ3VybF90cmVlICogdCwgaW50IGQsIGNoYXIgb3V0cHV0KTsKKyNlbHNlCisjZGVmaW5lIEN1cmxfc3BsYXlwcmludCh4LHkseikgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9TUExBWV9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc3NoLmMgYi9jdXJsLTcuMjUuMC9saWIvc3NoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNhOTI3ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zc2guYwpAQCAtMCwwICsxLDMyMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAjZGVmaW5lIENVUkxfTElCU1NIMl9ERUJVRyAqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIFVTRV9MSUJTU0gyCisKKyNpZmRlZiBIQVZFX0xJTUlUU19ICisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGlic3NoMi5oPgorI2luY2x1ZGUgPGxpYnNzaDJfc2Z0cC5oPgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VVFNOQU1FX0gKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIF9fVk1TCisjaW5jbHVkZSA8aW4uaD4KKyNpbmNsdWRlIDxpbmV0Lmg+CisjZW5kaWYKKworI2lmIChkZWZpbmVkKE5FVFdBUkUpICYmIGRlZmluZWQoX19OT1ZFTExfTElCQ19fKSkKKyN1bmRlZiBpbl9hZGRyX3QKKyNkZWZpbmUgaW5fYWRkcl90IHVuc2lnbmVkIGxvbmcKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAiaG9zdGlwLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgImVzY2FwZS5oIgorI2luY2x1ZGUgImh0dHAuaCIgLyogZm9yIEhUVFAgcHJveHkgdHVubmVsIHN0dWZmICovCisjaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAic3BlZWRjaGVjay5oIgorI2luY2x1ZGUgImdldGluZm8uaCIKKworI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic3NsZ2VuLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInN0cmVycm9yLmgiCisjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisjaW5jbHVkZSAicGFyc2VkYXRlLmgiIC8qIGZvciB0aGUgd2VlayBkYXkgYW5kIG1vbnRoIG5hbWVzICovCisjaW5jbHVkZSAic29ja2FkZHIuaCIgLyogcmVxdWlyZWQgZm9yIEN1cmxfc29ja2FkZHJfc3RvcmFnZSAqLworI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZmRlZiBXSU4zMgorIyAgdW5kZWYgIFBBVEhfTUFYCisjICBkZWZpbmUgUEFUSF9NQVggTUFYX1BBVEgKKyNlbmRpZgorCisjaWZuZGVmIFBBVEhfTUFYCisjZGVmaW5lIFBBVEhfTUFYIDEwMjQgLyoganVzdCBhbiBleHRyYSBwcmVjYXV0aW9uIHNpbmNlIHRoZXJlIGFyZSBzeXN0ZW1zIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIHRoZWlyIGRlZmluaXRpb24gaGlkZGVuIHdlbGwgKi8KKyNlbmRpZgorCisjZGVmaW5lIHNmdHBfbGlic3NoMl9yZWFscGF0aChzLHAsdCxtKSBcCisgICAgICAgIGxpYnNzaDJfc2Z0cF9zeW1saW5rX2V4KChzKSwgKHApLCBjdXJseF91enRvdWkoc3RybGVuKHApKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodCksIChtKSwgTElCU1NIMl9TRlRQX1JFQUxQQVRIKQorCisvKiBMb2NhbCBmdW5jdGlvbnM6ICovCitzdGF0aWMgY29uc3QgY2hhciAqc2Z0cF9saWJzc2gyX3N0cmVycm9yKHVuc2lnbmVkIGxvbmcgZXJyKTsKK3N0YXRpYyBMSUJTU0gyX0FMTE9DX0ZVTkMobXlfbGlic3NoMl9tYWxsb2MpOworc3RhdGljIExJQlNTSDJfUkVBTExPQ19GVU5DKG15X2xpYnNzaDJfcmVhbGxvYyk7CitzdGF0aWMgTElCU1NIMl9GUkVFX0ZVTkMobXlfbGlic3NoMl9mcmVlKTsKKworc3RhdGljIENVUkxjb2RlIGdldF9wYXRobmFtZShjb25zdCBjaGFyICoqY3BwLCBjaGFyICoqcGF0aCk7CisKK3N0YXRpYyBDVVJMY29kZSBzc2hfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIHNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSBzc2hfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKKworc3RhdGljIENVUkxjb2RlIHNzaF9nZXR3b3JraW5ncGF0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhvbWVkaXIsIC8qIHdoZW4gU0ZUUCBpcyB1c2VkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipwYXRoKTsKKworc3RhdGljIENVUkxjb2RlIHNjcF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOworc3RhdGljIENVUkxjb2RlIHNjcF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgc2NwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWRfY29ubmVjdGlvbik7CisKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSwgYm9vbCBwcmVtYXR1cmUpOworc3RhdGljIENVUkxjb2RlIHNmdHBfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9waGFzZV9kb25lKTsKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGRlYWQpOworc3RhdGljCitDVVJMY29kZSBzZnRwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpOworCitzdGF0aWMgaW50IHNzaF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzIG51bWJlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzb2NrZXRzICovCisgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisKK3N0YXRpYyBpbnQgc3NoX3BlcmZvcm1fZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNvY2tldHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworCisvKgorICogU0NQIHByb3RvY29sIGhhbmRsZXIuCisgKi8KKworY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2NwID0geworICAiU0NQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgc3NoX2RvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBzY3BfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHNzaF9jb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBzc2hfbXVsdGlfc3RhdGVtYWNoLCAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgc2NwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgc3NoX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgc3NoX3BlcmZvcm1fZ2V0c29jaywgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgc2NwX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFBPUlRfU1NILCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fU0NQLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfRElSTE9DSyB8IFBST1RPUFRfQ0xPU0VBQ1RJT04KKyAgfCBQUk9UT1BUX05PVVJMUVVFUlkgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworfTsKKworCisvKgorICogU0ZUUCBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NmdHAgPSB7CisgICJTRlRQIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NoZW1lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0dXBfY29ubmVjdGlvbiAqLworICBzc2hfZG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX2l0ICovCisgIHNmdHBfZG9uZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvX21vcmUgKi8KKyAgc3NoX2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0X2l0ICovCisgIHNzaF9tdWx0aV9zdGF0ZW1hY2gsICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGluZyAqLworICBzZnRwX2RvaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nICovCisgIHNzaF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9fZ2V0c29jayAqLworICBzc2hfZ2V0c29jaywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvaW5nX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb21vcmVfZ2V0c29jayAqLworICBzc2hfcGVyZm9ybV9nZXRzb2NrLCAgICAgICAgICAgICAgICAgIC8qIHBlcmZvcm1fZ2V0c29jayAqLworICBzZnRwX2Rpc2Nvbm5lY3QsICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkd3JpdGUgKi8KKyAgUE9SVF9TU0gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZwb3J0ICovCisgIENVUkxQUk9UT19TRlRQLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKi8KKyAgUFJPVE9QVF9ESVJMT0NLIHwgUFJPVE9QVF9DTE9TRUFDVElPTgorICB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCit9OworCisKK3N0YXRpYyB2b2lkCitrYmRfY2FsbGJhY2soY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVfbGVuLCBjb25zdCBjaGFyICppbnN0cnVjdGlvbiwKKyAgICAgICAgICAgICBpbnQgaW5zdHJ1Y3Rpb25fbGVuLCBpbnQgbnVtX3Byb21wdHMsCisgICAgICAgICAgICAgY29uc3QgTElCU1NIMl9VU0VSQVVUSF9LQkRJTlRfUFJPTVBUICpwcm9tcHRzLAorICAgICAgICAgICAgIExJQlNTSDJfVVNFUkFVVEhfS0JESU5UX1JFU1BPTlNFICpyZXNwb25zZXMsCisgICAgICAgICAgICAgdm9pZCAqKmFic3RyYWN0KQoreworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSAoc3RydWN0IGNvbm5lY3RkYXRhICopKmFic3RyYWN0OworCisjaWZkZWYgQ1VSTF9MSUJTU0gyX0RFQlVHCisgIGZwcmludGYoc3RkZXJyLCAibmFtZT0lc1xuIiwgbmFtZSk7CisgIGZwcmludGYoc3RkZXJyLCAibmFtZV9sZW49JWRcbiIsIG5hbWVfbGVuKTsKKyAgZnByaW50ZihzdGRlcnIsICJpbnN0cnVjdGlvbj0lc1xuIiwgaW5zdHJ1Y3Rpb24pOworICBmcHJpbnRmKHN0ZGVyciwgImluc3RydWN0aW9uX2xlbj0lZFxuIiwgaW5zdHJ1Y3Rpb25fbGVuKTsKKyAgZnByaW50ZihzdGRlcnIsICJudW1fcHJvbXB0cz0lZFxuIiwgbnVtX3Byb21wdHMpOworI2Vsc2UKKyAgKHZvaWQpbmFtZTsKKyAgKHZvaWQpbmFtZV9sZW47CisgICh2b2lkKWluc3RydWN0aW9uOworICAodm9pZClpbnN0cnVjdGlvbl9sZW47CisjZW5kaWYgIC8qIENVUkxfTElCU1NIMl9ERUJVRyAqLworICBpZihudW1fcHJvbXB0cyA9PSAxKSB7CisgICAgcmVzcG9uc2VzWzBdLnRleHQgPSBzdHJkdXAoY29ubi0+cGFzc3dkKTsKKyAgICByZXNwb25zZXNbMF0ubGVuZ3RoID0gY3VybHhfdXp0b3VpKHN0cmxlbihjb25uLT5wYXNzd2QpKTsKKyAgfQorICAodm9pZClwcm9tcHRzOworICAodm9pZClhYnN0cmFjdDsKK30gLyoga2JkX2NhbGxiYWNrICovCisKK3N0YXRpYyBDVVJMY29kZSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoaW50IGVycikKK3sKKyAgc3dpdGNoIChlcnIpIHsKKyAgICBjYXNlIExJQlNTSDJfRlhfT0s6CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1VDSF9GSUxFOgorICAgIGNhc2UgTElCU1NIMl9GWF9OT19TVUNIX1BBVEg6CisgICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX1BFUk1JU1NJT05fREVOSUVEOgorICAgIGNhc2UgTElCU1NIMl9GWF9XUklURV9QUk9URUNUOgorICAgIGNhc2UgTElCU1NIMl9GWF9MT0NLX0NPTkZsSUNUOgorICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX05PX1NQQUNFX09OX0ZJTEVTWVNURU06CisgICAgY2FzZSBMSUJTU0gyX0ZYX1FVT1RBX0VYQ0VFREVEOgorICAgICAgcmV0dXJuIENVUkxFX1JFTU9URV9ESVNLX0ZVTEw7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfRklMRV9BTFJFQURZX0VYSVNUUzoKKyAgICAgIHJldHVybiBDVVJMRV9SRU1PVEVfRklMRV9FWElTVFM7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfRElSX05PVF9FTVBUWToKKyAgICAgIHJldHVybiBDVVJMRV9RVU9URV9FUlJPUjsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBDVVJMRV9TU0g7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoaW50IGVycikKK3sKKyAgc3dpdGNoIChlcnIpIHsKKyAgICAvKiBPcmRlcmVkIGJ5IG9yZGVyIG9mIGFwcGVhcmFuY2UgaW4gbGlic3NoMi5oICovCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX05PTkU6CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfU09DS0VUX05PTkU6CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX0FMTE9DOgorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfU09DS0VUX1NFTkQ6CisgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKworICAgIGNhc2UgTElCU1NIMl9FUlJPUl9IT1NUS0VZX0lOSVQ6CisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX0hPU1RLRVlfU0lHTjoKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfUFVCTElDS0VZX1VOUkVDT0dOSVpFRDoKKyAgICBjYXNlIExJQlNTSDJfRVJST1JfUFVCTElDS0VZX1VOVkVSSUZJRUQ6CisgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX1BBU1NXT1JEX0VYUElSRUQ6CisgICAgICByZXR1cm4gQ1VSTEVfTE9HSU5fREVOSUVEOworCisgICAgY2FzZSBMSUJTU0gyX0VSUk9SX1NPQ0tFVF9USU1FT1VUOgorICAgIGNhc2UgTElCU1NIMl9FUlJPUl9USU1FT1VUOgorICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKworICAgIGNhc2UgTElCU1NIMl9FUlJPUl9FQUdBSU46CisgICAgICByZXR1cm4gQ1VSTEVfQUdBSU47CisgIH0KKworICAvKiBUT0RPOiBtYXAgc29tZSBtb3JlIG9mIHRoZSBsaWJzc2gyIGVycm9ycyB0byB0aGUgbW9yZSBhcHByb3ByaWF0ZSBDVVJMY29kZQorICAgICBlcnJvciBjb2RlLCBhbmQgcG9zc2libHkgYWRkIGEgZmV3IG5ldyBTU0gtcmVsYXRlZCBvbmUuIFdlIG11c3QgaG93ZXZlcgorICAgICBub3QgcmV0dXJuIG9yIGV2ZW4gZGVwZW5kIG9uIGxpYnNzaDIgZXJyb3JzIGluIHRoZSBwdWJsaWMgbGliY3VybCBBUEkgKi8KKworICByZXR1cm4gQ1VSTEVfU1NIOworfQorCitzdGF0aWMgTElCU1NIMl9BTExPQ19GVU5DKG15X2xpYnNzaDJfbWFsbG9jKQoreworICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCisgIHJldHVybiBtYWxsb2MoY291bnQpOworfQorCitzdGF0aWMgTElCU1NIMl9SRUFMTE9DX0ZVTkMobXlfbGlic3NoMl9yZWFsbG9jKQoreworICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCisgIHJldHVybiByZWFsbG9jKHB0ciwgY291bnQpOworfQorCitzdGF0aWMgTElCU1NIMl9GUkVFX0ZVTkMobXlfbGlic3NoMl9mcmVlKQoreworICAodm9pZClhYnN0cmFjdDsgLyogYXJnIG5vdCB1c2VkICovCisgIGZyZWUocHRyKTsKK30KKworLyoKKyAqIFNTSCBTdGF0ZSBtYWNoaW5lIHJlbGF0ZWQgY29kZQorICovCisvKiBUaGlzIGlzIHRoZSBPTkxZIHdheSB0byBjaGFuZ2UgU1NIIHN0YXRlISAqLworc3RhdGljIHZvaWQgc3RhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBzc2hzdGF0ZSBub3dzdGF0ZSkKK3sKKyNpZiBkZWZpbmVkKERFQlVHQlVJTEQpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MpCisgIC8qIGZvciBkZWJ1ZyBwdXJwb3NlcyAqLworICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzW10gPSB7CisgICAgIlNTSF9TVE9QIiwKKyAgICAiU1NIX0lOSVQiLAorICAgICJTU0hfU19TVEFSVFVQIiwKKyAgICAiU1NIX0hPU1RLRVkiLAorICAgICJTU0hfQVVUSExJU1QiLAorICAgICJTU0hfQVVUSF9QS0VZX0lOSVQiLAorICAgICJTU0hfQVVUSF9QS0VZIiwKKyAgICAiU1NIX0FVVEhfUEFTU19JTklUIiwKKyAgICAiU1NIX0FVVEhfUEFTUyIsCisgICAgIlNTSF9BVVRIX0hPU1RfSU5JVCIsCisgICAgIlNTSF9BVVRIX0hPU1QiLAorICAgICJTU0hfQVVUSF9LRVlfSU5JVCIsCisgICAgIlNTSF9BVVRIX0tFWSIsCisgICAgIlNTSF9BVVRIX0RPTkUiLAorICAgICJTU0hfU0ZUUF9JTklUIiwKKyAgICAiU1NIX1NGVFBfUkVBTFBBVEgiLAorICAgICJTU0hfU0ZUUF9RVU9URV9JTklUIiwKKyAgICAiU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQiLAorICAgICJTU0hfU0ZUUF9RVU9URSIsCisgICAgIlNTSF9TRlRQX05FWFRfUVVPVEUiLAorICAgICJTU0hfU0ZUUF9RVU9URV9TVEFUIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1NZTUxJTksiLAorICAgICJTU0hfU0ZUUF9RVU9URV9NS0RJUiIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JFTkFNRSIsCisgICAgIlNTSF9TRlRQX1FVT1RFX1JNRElSIiwKKyAgICAiU1NIX1NGVFBfUVVPVEVfVU5MSU5LIiwKKyAgICAiU1NIX1NGVFBfVFJBTlNfSU5JVCIsCisgICAgIlNTSF9TRlRQX1VQTE9BRF9JTklUIiwKKyAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCIsCisgICAgIlNTSF9TRlRQX0NSRUFURV9ESVJTIiwKKyAgICAiU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIiLAorICAgICJTU0hfU0ZUUF9SRUFERElSX0lOSVQiLAorICAgICJTU0hfU0ZUUF9SRUFERElSIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9MSU5LIiwKKyAgICAiU1NIX1NGVFBfUkVBRERJUl9CT1RUT00iLAorICAgICJTU0hfU0ZUUF9SRUFERElSX0RPTkUiLAorICAgICJTU0hfU0ZUUF9ET1dOTE9BRF9JTklUIiwKKyAgICAiU1NIX1NGVFBfRE9XTkxPQURfU1RBVCIsCisgICAgIlNTSF9TRlRQX0NMT1NFIiwKKyAgICAiU1NIX1NGVFBfU0hVVERPV04iLAorICAgICJTU0hfU0NQX1RSQU5TX0lOSVQiLAorICAgICJTU0hfU0NQX1VQTE9BRF9JTklUIiwKKyAgICAiU1NIX1NDUF9ET1dOTE9BRF9JTklUIiwKKyAgICAiU1NIX1NDUF9ET05FIiwKKyAgICAiU1NIX1NDUF9TRU5EX0VPRiIsCisgICAgIlNTSF9TQ1BfV0FJVF9FT0YiLAorICAgICJTU0hfU0NQX1dBSVRfQ0xPU0UiLAorICAgICJTU0hfU0NQX0NIQU5ORUxfRlJFRSIsCisgICAgIlNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QiLAorICAgICJTU0hfU0VTU0lPTl9GUkVFIiwKKyAgICAiUVVJVCIKKyAgfTsKKyNlbmRpZgorICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKworI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgaWYoc3NoYy0+c3RhdGUgIT0gbm93c3RhdGUpIHsKKyAgICBpbmZvZihjb25uLT5kYXRhLCAiU0ZUUCAlcCBzdGF0ZSBjaGFuZ2UgZnJvbSAlcyB0byAlc1xuIiwKKyAgICAgICAgICBzc2hjLCBuYW1lc1tzc2hjLT5zdGF0ZV0sIG5hbWVzW25vd3N0YXRlXSk7CisgIH0KKyNlbmRpZgorCisgIHNzaGMtPnN0YXRlID0gbm93c3RhdGU7Cit9CisKKy8qIGZpZ3VyZSBvdXQgdGhlIHBhdGggdG8gd29yayB3aXRoIGluIHRoaXMgcGFydGljdWxhciByZXF1ZXN0ICovCitzdGF0aWMgQ1VSTGNvZGUgc3NoX2dldHdvcmtpbmdwYXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaG9tZWRpciwgIC8qIHdoZW4gU0ZUUCBpcyB1c2VkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipwYXRoKSAvKiByZXR1cm5zIHRoZSAgYWxsb2NhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsIHBhdGggdG8gd29yayB3aXRoICovCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgY2hhciAqcmVhbF9wYXRoID0gTlVMTDsKKyAgY2hhciAqd29ya2luZ19wYXRoOworICBpbnQgd29ya2luZ19wYXRoX2xlbjsKKworICB3b3JraW5nX3BhdGggPSBjdXJsX2Vhc3lfdW5lc2NhcGUoZGF0YSwgZGF0YS0+c3RhdGUucGF0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3b3JraW5nX3BhdGhfbGVuKTsKKyAgaWYoIXdvcmtpbmdfcGF0aCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAvKiBDaGVjayBmb3IgL34vICwgaW5kaWNhdGluZyByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5ICovCisgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkgeworICAgIHJlYWxfcGF0aCA9IG1hbGxvYyh3b3JraW5nX3BhdGhfbGVuKzEpOworICAgIGlmKHJlYWxfcGF0aCA9PSBOVUxMKSB7CisgICAgICBmcmVlKHdvcmtpbmdfcGF0aCk7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgICAgaWYoKHdvcmtpbmdfcGF0aF9sZW4gPiAxKSAmJiAod29ya2luZ19wYXRoWzFdID09ICd+JykpCisgICAgICAvKiBJdCBpcyByZWZlcmVuY2VkIHRvIHRoZSBob21lIGRpcmVjdG9yeSwgc28gc3RyaXAgdGhlIGxlYWRpbmcgJy8nICovCisgICAgICBtZW1jcHkocmVhbF9wYXRoLCB3b3JraW5nX3BhdGgrMSwgMSArIHdvcmtpbmdfcGF0aF9sZW4tMSk7CisgICAgZWxzZQorICAgICAgbWVtY3B5KHJlYWxfcGF0aCwgd29ya2luZ19wYXRoLCAxICsgd29ya2luZ19wYXRoX2xlbik7CisgIH0KKyAgZWxzZSBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19TRlRQKSB7CisgICAgaWYoKHdvcmtpbmdfcGF0aF9sZW4gPiAxKSAmJiAod29ya2luZ19wYXRoWzFdID09ICd+JykpIHsKKyAgICAgIHNpemVfdCBob21lbGVuID0gc3RybGVuKGhvbWVkaXIpOworICAgICAgcmVhbF9wYXRoID0gbWFsbG9jKGhvbWVsZW4gKyB3b3JraW5nX3BhdGhfbGVuICsgMSk7CisgICAgICBpZihyZWFsX3BhdGggPT0gTlVMTCkgeworICAgICAgICBmcmVlKHdvcmtpbmdfcGF0aCk7CisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgfQorICAgICAgLyogSXQgaXMgcmVmZXJlbmNlZCB0byB0aGUgaG9tZSBkaXJlY3RvcnksIHNvIHN0cmlwIHRoZQorICAgICAgICAgbGVhZGluZyAnLycgKi8KKyAgICAgIG1lbWNweShyZWFsX3BhdGgsIGhvbWVkaXIsIGhvbWVsZW4pOworICAgICAgcmVhbF9wYXRoW2hvbWVsZW5dID0gJy8nOworICAgICAgcmVhbF9wYXRoW2hvbWVsZW4rMV0gPSAnXDAnOworICAgICAgaWYod29ya2luZ19wYXRoX2xlbiA+IDMpIHsKKyAgICAgICAgbWVtY3B5KHJlYWxfcGF0aCtob21lbGVuKzEsIHdvcmtpbmdfcGF0aCArIDMsCisgICAgICAgICAgICAgICAxICsgd29ya2luZ19wYXRoX2xlbiAtMyk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVhbF9wYXRoID0gbWFsbG9jKHdvcmtpbmdfcGF0aF9sZW4rMSk7CisgICAgICBpZihyZWFsX3BhdGggPT0gTlVMTCkgeworICAgICAgICBmcmVlKHdvcmtpbmdfcGF0aCk7CisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgfQorICAgICAgbWVtY3B5KHJlYWxfcGF0aCwgd29ya2luZ19wYXRoLCAxK3dvcmtpbmdfcGF0aF9sZW4pOworICAgIH0KKyAgfQorCisgIGZyZWUod29ya2luZ19wYXRoKTsKKworICAvKiBzdG9yZSB0aGUgcG9pbnRlciBmb3IgdGhlIGNhbGxlciB0byByZWNlaXZlICovCisgICpwYXRoID0gcmVhbF9wYXRoOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCitzdGF0aWMgaW50IHNzaGtleWNhbGxiYWNrKENVUkwgKmVhc3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjdXJsX2toa2V5ICprbm93bmtleSwgLyoga25vd24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGN1cmxfa2hrZXkgKmZvdW5ka2V5LCAvKiBmb3VuZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGN1cmxfa2htYXRjaCBtYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50cCkKK3sKKyAgKHZvaWQpZWFzeTsKKyAgKHZvaWQpa25vd25rZXk7CisgICh2b2lkKWZvdW5ka2V5OworICAodm9pZCljbGllbnRwOworCisgIC8qIHdlIG9ubHkgYWxsb3cgcGVyZmVjdCBtYXRjaGVzLCBhbmQgd2UgcmVqZWN0IGV2ZXJ5dGhpbmcgZWxzZSAqLworICByZXR1cm4gKG1hdGNoICE9IENVUkxLSE1BVENIX09LKT9DVVJMS0hTVEFUX1JFSkVDVDpDVVJMS0hTVEFUX0ZJTkU7Cit9CisjZW5kaWYKKworLyoKKyAqIEVhcmxpZXIgbGlic3NoMiB2ZXJzaW9ucyBkaWRuJ3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBzZWVrIHRvIDY0Yml0IHBvc2l0aW9ucworICogd2l0aCAzMmJpdCBzaXplX3QuCisgKi8KKyNpZmRlZiBIQVZFX0xJQlNTSDJfU0ZUUF9TRUVLNjQKKyNkZWZpbmUgU0ZUUF9TRUVLKHgseSkgbGlic3NoMl9zZnRwX3NlZWs2NCh4LCAobGlic3NoMl91aW50NjRfdCl5KQorI2Vsc2UKKyNkZWZpbmUgU0ZUUF9TRUVLKHgseSkgbGlic3NoMl9zZnRwX3NlZWsoeCwgKHNpemVfdCl5KQorI2VuZGlmCisKKy8qCisgKiBFYXJsaWVyIGxpYnNzaDIgdmVyc2lvbnMgZGlkbid0IGRvIFNDUCBwcm9wZXJseSBiZXlvbmQgMzJiaXQgc2l6ZXMgb24gMzJiaXQKKyAqIGFyY2hpdGVjdHVyZXMgc28gd2UgY2hlY2sgb2YgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbiBpcyBwcmVzZW50LgorICovCisjaWZuZGVmIEhBVkVfTElCU1NIMl9TQ1BfU0VORDY0CisjZGVmaW5lIFNDUF9TRU5EKGEsYixjLGQpIGxpYnNzaDJfc2NwX3NlbmRfZXgoYSwgYiwgKGludCkoYyksIChzaXplX3QpZCwgMCwgMCkKKyNlbHNlCisjZGVmaW5lIFNDUF9TRU5EKGEsYixjLGQpIGxpYnNzaDJfc2NwX3NlbmQ2NChhLCBiLCAoaW50KShjKSwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlic3NoMl91aW50NjRfdClkLCAwLCAwKQorI2VuZGlmCisKKy8qCisgKiBsaWJzc2gyIDEuMi44IGZpeGVkIHRoZSBwcm9ibGVtIHdpdGggMzJiaXQgaW50cyB1c2VkIGZvciBzb2NrZXRzIG9uIHdpbjY0LgorICovCisjaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fSEFORFNIQUtFCisjZGVmaW5lIGxpYnNzaDJfc2Vzc2lvbl9zdGFydHVwKHgseSkgbGlic3NoMl9zZXNzaW9uX2hhbmRzaGFrZSh4LHkpCisjZW5kaWYKKworc3RhdGljIENVUkxjb2RlIHNzaF9rbm93bmhvc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKworI2lmZGVmIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJCisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pIHsKKyAgICAvKiB3ZSdyZSBhc2tlZCB0byB2ZXJpZnkgdGhlIGhvc3QgYWdhaW5zdCBhIGZpbGUgKi8KKyAgICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgICBpbnQgcmM7CisgICAgaW50IGtleXR5cGU7CisgICAgc2l6ZV90IGtleWxlbjsKKyAgICBjb25zdCBjaGFyICpyZW1vdGVrZXkgPSBsaWJzc2gyX3Nlc3Npb25faG9zdGtleShzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5bGVuLCAma2V5dHlwZSk7CisgICAgaW50IGtleWNoZWNrID0gTElCU1NIMl9LTk9XTkhPU1RfQ0hFQ0tfRkFJTFVSRTsKKyAgICBpbnQga2V5Yml0ID0gMDsKKworICAgIGlmKHJlbW90ZWtleSkgeworICAgICAgLyoKKyAgICAgICAqIEEgc3ViamVjdCB0byBmaWd1cmUgb3V0IGlzIHdoYXQgaG9zdCBuYW1lIHdlIG5lZWQgdG8gcGFzcyBpbiBoZXJlLgorICAgICAgICogV2hhdCBob3N0IG5hbWUgZG9lcyBPcGVuU1NIIHN0b3JlIGluIGl0cyBmaWxlIGlmIGFuIElETiBuYW1lIGlzCisgICAgICAgKiB1c2VkPworICAgICAgICovCisgICAgICBzdHJ1Y3QgbGlic3NoMl9rbm93bmhvc3QgKmhvc3Q7CisgICAgICBlbnVtIGN1cmxfa2htYXRjaCBrZXltYXRjaDsKKyAgICAgIGN1cmxfc3Noa2V5Y2FsbGJhY2sgZnVuYyA9CisgICAgICAgIGRhdGEtPnNldC5zc2hfa2V5ZnVuYz9kYXRhLT5zZXQuc3NoX2tleWZ1bmM6c3Noa2V5Y2FsbGJhY2s7CisgICAgICBzdHJ1Y3QgY3VybF9raGtleSBrbm93bmtleTsKKyAgICAgIHN0cnVjdCBjdXJsX2toa2V5ICprbm93bmtleXAgPSBOVUxMOworICAgICAgc3RydWN0IGN1cmxfa2hrZXkgZm91bmRrZXk7CisKKyAgICAgIGtleWJpdCA9IChrZXl0eXBlID09IExJQlNTSDJfSE9TVEtFWV9UWVBFX1JTQSk/CisgICAgICAgIExJQlNTSDJfS05PV05IT1NUX0tFWV9TU0hSU0E6TElCU1NIMl9LTk9XTkhPU1RfS0VZX1NTSERTUzsKKworICAgICAga2V5Y2hlY2sgPSBsaWJzc2gyX2tub3duaG9zdF9jaGVjayhzc2hjLT5raCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVrZXksIGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfVFlQRV9QTEFJTnwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfS0VZRU5DX1JBV3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Yml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaG9zdCk7CisKKyAgICAgIGluZm9mKGRhdGEsICJTU0ggaG9zdCBjaGVjazogJWQsIGtleTogJXNcbiIsIGtleWNoZWNrLAorICAgICAgICAgICAgKGtleWNoZWNrIDw9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX01JU01BVENIKT8KKyAgICAgICAgICAgIGhvc3QtPmtleToiPG5vbmU+Iik7CisKKyAgICAgIC8qIHNldHVwICdrbm93bmtleScgKi8KKyAgICAgIGlmKGtleWNoZWNrIDw9IExJQlNTSDJfS05PV05IT1NUX0NIRUNLX01JU01BVENIKSB7CisgICAgICAgIGtub3dua2V5LmtleSA9IGhvc3QtPmtleTsKKyAgICAgICAga25vd25rZXkubGVuID0gMDsKKyAgICAgICAga25vd25rZXkua2V5dHlwZSA9IChrZXl0eXBlID09IExJQlNTSDJfSE9TVEtFWV9UWVBFX1JTQSk/CisgICAgICAgICAgQ1VSTEtIVFlQRV9SU0EgOiBDVVJMS0hUWVBFX0RTUzsKKyAgICAgICAga25vd25rZXlwID0gJmtub3dua2V5OworICAgICAgfQorCisgICAgICAvKiBzZXR1cCAnZm91bmRrZXknICovCisgICAgICBmb3VuZGtleS5rZXkgPSByZW1vdGVrZXk7CisgICAgICBmb3VuZGtleS5sZW4gPSBrZXlsZW47CisgICAgICBmb3VuZGtleS5rZXl0eXBlID0gKGtleXR5cGUgPT0gTElCU1NIMl9IT1NUS0VZX1RZUEVfUlNBKT8KKyAgICAgICAgQ1VSTEtIVFlQRV9SU0EgOiBDVVJMS0hUWVBFX0RTUzsKKworICAgICAgLyoKKyAgICAgICAqIGlmIGFueSBvZiB0aGUgTElCU1NIMl9LTk9XTkhPU1RfQ0hFQ0tfKiBkZWZpbmVzIGFuZCB0aGUKKyAgICAgICAqIGN1cmxfa2htYXRjaCBlbnVtIGFyZSBldmVyIG1vZGlmaWVkLCB3ZSBuZWVkIHRvIGludHJvZHVjZSBhCisgICAgICAgKiB0cmFuc2xhdGlvbiB0YWJsZSBoZXJlIQorICAgICAgICovCisgICAgICBrZXltYXRjaCA9IChlbnVtIGN1cmxfa2htYXRjaClrZXljaGVjazsKKworICAgICAgLyogQXNrIHRoZSBjYWxsYmFjayBob3cgdG8gYmVoYXZlICovCisgICAgICByYyA9IGZ1bmMoZGF0YSwga25vd25rZXlwLCAvKiBmcm9tIHRoZSBrbm93bmhvc3RzIGZpbGUgKi8KKyAgICAgICAgICAgICAgICAmZm91bmRrZXksIC8qIGZyb20gdGhlIHJlbW90ZSBob3N0ICovCisgICAgICAgICAgICAgICAga2V5bWF0Y2gsIGRhdGEtPnNldC5zc2hfa2V5ZnVuY191c2VycCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIC8qIG5vIHJlbW90ZWtleSBtZWFucyBmYWlsdXJlISAqLworICAgICAgcmMgPSBDVVJMS0hTVEFUX1JFSkVDVDsKKworICAgIHN3aXRjaChyYykgeworICAgIGRlZmF1bHQ6IC8qIHVua25vd24gcmV0dXJuIGNvZGVzIHdpbGwgZXF1YWwgcmVqZWN0ICovCisgICAgY2FzZSBDVVJMS0hTVEFUX1JFSkVDVDoKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgIGNhc2UgQ1VSTEtIU1RBVF9ERUZFUjoKKyAgICAgIC8qIERFRkVSIG1lYW5zIGJhaWwgb3V0IGJ1dCBrZWVwIHRoZSBTU0hfSE9TVEtFWSBzdGF0ZSAqLworICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTEtIU1RBVF9GSU5FOgorICAgIGNhc2UgQ1VSTEtIU1RBVF9GSU5FX0FERF9UT19GSUxFOgorICAgICAgLyogcHJvY2VlZCAqLworICAgICAgaWYoa2V5Y2hlY2sgIT0gTElCU1NIMl9LTk9XTkhPU1RfQ0hFQ0tfTUFUQ0gpIHsKKyAgICAgICAgLyogdGhlIGZvdW5kIGhvc3Qra2V5IGRpZG4ndCBtYXRjaCBidXQgaGFzIGJlZW4gdG9sZCB0byBiZSBmaW5lCisgICAgICAgICAgIGFueXdheSBzbyB3ZSBhZGQgaXQgaW4gbWVtb3J5ICovCisgICAgICAgIGludCBhZGRyYyA9IGxpYnNzaDJfa25vd25ob3N0X2FkZChzc2hjLT5raCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZWtleSwga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfVFlQRV9QTEFJTnwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfS05PV05IT1NUX0tFWUVOQ19SQVd8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXliaXQsIE5VTEwpOworICAgICAgICBpZihhZGRyYykKKyAgICAgICAgICBpbmZvZihkYXRhLCAiV2FybmluZyBhZGRpbmcgdGhlIGtub3duIGhvc3QgJXMgZmFpbGVkIVxuIiwKKyAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUpOworICAgICAgICBlbHNlIGlmKHJjID09IENVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRSkgeworICAgICAgICAgIC8qIG5vdyB3ZSB3cml0ZSB0aGUgZW50aXJlIGluLW1lbW9yeSBsaXN0IG9mIGtub3duIGhvc3RzIHRvIHRoZQorICAgICAgICAgICAgIGtub3duX2hvc3RzIGZpbGUgKi8KKyAgICAgICAgICBpbnQgd3JjID0KKyAgICAgICAgICAgIGxpYnNzaDJfa25vd25ob3N0X3dyaXRlZmlsZShzc2hjLT5raCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9LTk9XTkhPU1RfRklMRV9PUEVOU1NIKTsKKyAgICAgICAgICBpZih3cmMpIHsKKyAgICAgICAgICAgIGluZm9mKGRhdGEsICJXYXJuaW5nLCB3cml0aW5nICVzIGZhaWxlZCFcbiIsCisgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisjZWxzZSAvKiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSSAqLworICAodm9pZCljb25uOworI2VuZGlmCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyoKKyAqIHNzaF9zdGF0ZW1hY2hfYWN0KCkgcnVucyB0aGUgU1NIIHN0YXRlIG1hY2hpbmUgYXMgZmFyIGFzIGl0IGNhbiB3aXRob3V0CisgKiBibG9ja2luZyBhbmQgd2l0aG91dCByZWFjaGluZyB0aGUgZW5kLiAgVGhlIGRhdGEgdGhlIHBvaW50ZXIgJ2Jsb2NrJyBwb2ludHMKKyAqIHRvIHdpbGwgYmUgc2V0IHRvIFRSVUUgaWYgdGhlIGxpYnNzaDIgZnVuY3Rpb24gcmV0dXJucyBMSUJTU0gyX0VSUk9SX0VBR0FJTgorICogbWVhbmluZyBpdCB3YW50cyB0byBiZSBjYWxsZWQgYWdhaW4gd2hlbiB0aGUgc29ja2V0IGlzIHJlYWR5CisgKi8KKworc3RhdGljIENVUkxjb2RlIHNzaF9zdGF0ZW1hY2hfYWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqYmxvY2spCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBTU0hQUk9UTyAqc2Z0cF9zY3AgPSBkYXRhLT5zdGF0ZS5wcm90by5zc2g7CisgIHN0cnVjdCBzc2hfY29ubiAqc3NoYyA9ICZjb25uLT5wcm90by5zc2hjOworICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgY29uc3QgY2hhciAqZmluZ2VycHJpbnQ7CisgIGNoYXIgbWQ1YnVmZmVyWzMzXTsKKyAgY2hhciAqbmV3X3JlYWRkaXJfbGluZTsKKyAgaW50IHJjID0gTElCU1NIMl9FUlJPUl9OT05FLCBpOworICBpbnQgZXJyOworICBpbnQgc2Vla2VyciA9IENVUkxfU0VFS0ZVTkNfT0s7CisgICpibG9jayA9IDA7IC8qIHdlJ3JlIG5vdCBibG9ja2luZyBieSBkZWZhdWx0ICovCisKKyAgZG8geworCisgICAgc3dpdGNoKHNzaGMtPnN0YXRlKSB7CisgICAgY2FzZSBTU0hfSU5JVDoKKyAgICAgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAwOworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09LOworCisgICAgICAvKiBTZXQgbGlic3NoMiB0byBub24tYmxvY2tpbmcsIHNpbmNlIGV2ZXJ5dGhpbmcgaW50ZXJuYWxseSBpcworICAgICAgICAgbm9uLWJsb2NraW5nICovCisgICAgICBsaWJzc2gyX3Nlc3Npb25fc2V0X2Jsb2NraW5nKHNzaGMtPnNzaF9zZXNzaW9uLCAwKTsKKworICAgICAgc3RhdGUoY29ubiwgU1NIX1NfU1RBUlRVUCk7CisgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KKworICAgIGNhc2UgU1NIX1NfU1RBUlRVUDoKKyAgICAgIHJjID0gbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAoc3NoYy0+c3NoX3Nlc3Npb24sIChpbnQpc29jayk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgZXN0YWJsaXNoaW5nIHNzaCBzZXNzaW9uIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBzdGF0ZShjb25uLCBTU0hfSE9TVEtFWSk7CisKKyAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLworICAgIGNhc2UgU1NIX0hPU1RLRVk6CisgICAgICAvKgorICAgICAgICogQmVmb3JlIHdlIGF1dGhlbnRpY2F0ZSB3ZSBzaG91bGQgY2hlY2sgdGhlIGhvc3RrZXkncyBmaW5nZXJwcmludAorICAgICAgICogYWdhaW5zdCBvdXIga25vd24gaG9zdHMuIEhvdyB0aGF0IGlzIGhhbmRsZWQgKHJlYWRpbmcgZnJvbSBmaWxlLAorICAgICAgICogd2hhdGV2ZXIpIGlzIHVwIHRvIHVzLgorICAgICAgICovCisgICAgICBmaW5nZXJwcmludCA9IGxpYnNzaDJfaG9zdGtleV9oYXNoKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0hPU1RLRVlfSEFTSF9NRDUpOworCisgICAgICAvKiBUaGUgZmluZ2VycHJpbnQgcG9pbnRzIHRvIHN0YXRpYyBzdG9yYWdlICghKSwgZG9uJ3QgZnJlZSgpIGl0LiAqLworICAgICAgZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICAgICAgc25wcmludGYoJm1kNWJ1ZmZlcltpKjJdLCAzLCAiJTAyeCIsICh1bnNpZ25lZCBjaGFyKSBmaW5nZXJwcmludFtpXSk7CisgICAgICBpbmZvZihkYXRhLCAiU1NIIE1ENSBmaW5nZXJwcmludDogJXNcbiIsIG1kNWJ1ZmZlcik7CisKKyAgICAgIC8qIEJlZm9yZSB3ZSBhdXRoZW50aWNhdGUgd2UgY2hlY2sgdGhlIGhvc3RrZXkncyBNRDUgZmluZ2VycHJpbnQKKyAgICAgICAqIGFnYWluc3QgYSBrbm93biBmaW5nZXJwcmludCwgaWYgYXZhaWxhYmxlLgorICAgICAgICovCisgICAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV0gJiYKKyAgICAgICAgIHN0cmxlbihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV0pID09IDMyKSB7CisgICAgICAgIGlmKCFzdHJlcXVhbChtZDVidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfSE9TVF9QVUJMSUNfS0VZX01ENV0pKSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICAgICAiRGVuaWVkIGVzdGFibGlzaGluZyBzc2ggc2Vzc2lvbjogbWlzbWF0Y2ggbWQ1IGZpbmdlcnByaW50LiAiCisgICAgICAgICAgICAgICAgIlJlbW90ZSAlcyBpcyBub3QgZXF1YWwgdG8gJXMiLAorICAgICAgICAgICAgICAgIG1kNWJ1ZmZlciwgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDVdKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgICByZXN1bHQgPSBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBpbmZvZihkYXRhLCAiTUQ1IGNoZWNrc3VtIG1hdGNoIVxuIik7CisgICAgICAgIC8qIGFzIHdlIGFscmVhZHkgbWF0Y2hlZCwgd2Ugc2tpcCB0aGUgY2hlY2sgZm9yIGtub3duIGhvc3RzICovCisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IHNzaF9rbm93bmhvc3QoY29ubik7CisKKyAgICAgIGlmKCFyZXN1bHQpCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRITElTVCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhMSVNUOgorICAgICAgLyoKKyAgICAgICAqIEZpZ3VyZSBvdXQgYXV0aGVudGljYXRpb24gbWV0aG9kcworICAgICAgICogTkI6IEFzIHNvb24gYXMgd2UgaGF2ZSBwcm92aWRlZCBhIHVzZXJuYW1lIHRvIGFuIG9wZW5zc2ggc2VydmVyIHdlCisgICAgICAgKiBtdXN0IG5ldmVyIGNoYW5nZSBpdCBsYXRlci4gVGh1cywgYWx3YXlzIHNwZWNpZnkgdGhlIGNvcnJlY3QgdXNlcm5hbWUKKyAgICAgICAqIGhlcmUsIGV2ZW4gdGhvdWdoIHRoZSBsaWJzc2gyIGRvY3Mga2luZCBvZiBpbmRpY2F0ZSB0aGF0IGl0IHNob3VsZCBiZQorICAgICAgICogcG9zc2libGUgdG8gZ2V0IGEgJ2dlbmVyaWMnIGxpc3QgKG5vdCB1c2VyLXNwZWNpZmljKSBvZiBhdXRoZW50aWNhdGlvbgorICAgICAgICogbWV0aG9kcywgcHJlc3VtYWJseSB3aXRoIGEgYmxhbmsgdXNlcm5hbWUuIFRoYXQgd29uJ3Qgd29yayBpbiBteQorICAgICAgICogZXhwZXJpZW5jZS4KKyAgICAgICAqIFNvIGFsd2F5cyBzcGVjaWZ5IGl0IGhlcmUuCisgICAgICAgKi8KKyAgICAgIHNzaGMtPmF1dGhsaXN0ID0gbGlic3NoMl91c2VyYXV0aF9saXN0KHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oY29ubi0+dXNlcikpKTsKKworICAgICAgaWYoIXNzaGMtPmF1dGhsaXN0KSB7CisgICAgICAgIGlmKChlcnIgPSBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikpID09CisgICAgICAgICAgIExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgcmMgPSBMSUJTU0gyX0VSUk9SX0VBR0FJTjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKGVycik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJTU0ggYXV0aGVudGljYXRpb24gbWV0aG9kcyBhdmFpbGFibGU6ICVzXG4iLAorICAgICAgICAgICAgc3NoYy0+YXV0aGxpc3QpOworCisgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9QS0VZX0lOSVQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX1BLRVlfSU5JVDoKKyAgICAgIC8qCisgICAgICAgKiBDaGVjayB0aGUgc3VwcG9ydGVkIGF1dGggdHlwZXMgaW4gdGhlIG9yZGVyIEkgZmVlbCBpcyBtb3N0IHNlY3VyZQorICAgICAgICogd2l0aCB0aGUgcmVxdWVzdGVkIHR5cGUgb2YgYXV0aGVudGljYXRpb24KKyAgICAgICAqLworICAgICAgc3NoYy0+YXV0aGVkID0gRkFMU0U7CisKKyAgICAgIGlmKChkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgJiBDVVJMU1NIX0FVVEhfUFVCTElDS0VZKSAmJgorICAgICAgICAgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgInB1YmxpY2tleSIpICE9IE5VTEwpKSB7CisgICAgICAgIGNoYXIgKmhvbWU7CisKKyAgICAgICAgc3NoYy0+cnNhX3B1YiA9IHNzaGMtPnJzYSA9IE5VTEw7CisKKyAgICAgICAgLyogVG8gcG9uZGVyIGFib3V0OiBzaG91bGQgcmVhbGx5IHRoZSBsaWIgYmUgbWVzc2luZyBhYm91dCB3aXRoIHRoZQorICAgICAgICAgICBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGV0Yz8gKi8KKyAgICAgICAgaG9tZSA9IGN1cmxfZ2V0ZW52KCJIT01FIik7CisKKyAgICAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BVQkxJQ19LRVldKQorICAgICAgICAgIHNzaGMtPnJzYV9wdWIgPSBhcHJpbnRmKCIlcyIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QVUJMSUNfS0VZXSk7CisgICAgICAgIGVsc2UgaWYoaG9tZSkKKyAgICAgICAgICBzc2hjLT5yc2FfcHViID0gYXByaW50ZigiJXMvLnNzaC9pZF9kc2EucHViIiwgaG9tZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAvKiBhcyBhIGZpbmFsIHJlc29ydCwgdHJ5IGN1cnJlbnQgZGlyISAqLworICAgICAgICAgIHNzaGMtPnJzYV9wdWIgPSBzdHJkdXAoImlkX2RzYS5wdWIiKTsKKworICAgICAgICBpZihzc2hjLT5yc2FfcHViID09IE5VTEwpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKGhvbWUpOworICAgICAgICAgIGhvbWUgPSBOVUxMOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX1BSSVZBVEVfS0VZXSkKKyAgICAgICAgICBzc2hjLT5yc2EgPSBhcHJpbnRmKCIlcyIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QUklWQVRFX0tFWV0pOworICAgICAgICBlbHNlIGlmKGhvbWUpCisgICAgICAgICAgc3NoYy0+cnNhID0gYXByaW50ZigiJXMvLnNzaC9pZF9kc2EiLCBob21lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIC8qIGFzIGEgZmluYWwgcmVzb3J0LCB0cnkgY3VycmVudCBkaXIhICovCisgICAgICAgICAgc3NoYy0+cnNhID0gc3RyZHVwKCJpZF9kc2EiKTsKKworICAgICAgICBpZihzc2hjLT5yc2EgPT0gTlVMTCkgeworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoaG9tZSk7CisgICAgICAgICAgaG9tZSA9IE5VTEw7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2FfcHViKTsKKyAgICAgICAgICBzc2hjLT5yc2FfcHViID0gTlVMTDsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEXTsKKyAgICAgICAgaWYoIXNzaGMtPnBhc3NwaHJhc2UpCisgICAgICAgICAgc3NoYy0+cGFzc3BocmFzZSA9ICIiOworCisgICAgICAgIEN1cmxfc2FmZWZyZWUoaG9tZSk7CisgICAgICAgIGhvbWUgPSBOVUxMOworCisgICAgICAgIGluZm9mKGRhdGEsICJVc2luZyBzc2ggcHVibGljIGtleSBmaWxlICVzXG4iLCBzc2hjLT5yc2FfcHViKTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIlVzaW5nIHNzaCBwcml2YXRlIGtleSBmaWxlICVzXG4iLCBzc2hjLT5yc2EpOworCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BLRVkpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1NfSU5JVCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfUEtFWToKKyAgICAgIC8qIFRoZSBmdW5jdGlvbiBiZWxvdyBjaGVja3MgaWYgdGhlIGZpbGVzIGV4aXN0cywgbm8gbmVlZCB0byBzdGF0KCkgaGVyZS4KKyAgICAgICAqLworICAgICAgcmMgPSBsaWJzc2gyX3VzZXJhdXRoX3B1YmxpY2tleV9mcm9tZmlsZV9leChzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+dXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihjb25uLT51c2VyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJzYV9wdWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJzYSwgc3NoYy0+cGFzc3BocmFzZSk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2FfcHViKTsKKyAgICAgIHNzaGMtPnJzYV9wdWIgPSBOVUxMOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yc2EpOworICAgICAgc3NoYy0+cnNhID0gTlVMTDsKKworICAgICAgaWYocmMgPT0gMCkgeworICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOworICAgICAgICBpbmZvZihkYXRhLCAiSW5pdGlhbGl6ZWQgU1NIIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb25cbiIpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfQVVUSF9ET05FKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBjaGFyICplcnJfbXNnOworICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycl9tc2csIE5VTEwsIDApOworICAgICAgICBpbmZvZihkYXRhLCAiU1NIIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24gZmFpbGVkOiAlc1xuIiwgZXJyX21zZyk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1NfSU5JVCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfUEFTU19JTklUOgorICAgICAgaWYoKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9QQVNTV09SRCkgJiYKKyAgICAgICAgIChzdHJzdHIoc3NoYy0+YXV0aGxpc3QsICJwYXNzd29yZCIpICE9IE5VTEwpKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX1BBU1MpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1RfSU5JVCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfUEFTUzoKKyAgICAgIHJjID0gbGlic3NoMl91c2VyYXV0aF9wYXNzd29yZF9leChzc2hjLT5zc2hfc2Vzc2lvbiwgY29ubi0+dXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKGNvbm4tPnVzZXIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5wYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihjb25uLT5wYXNzd2QpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA9PSAwKSB7CisgICAgICAgIHNzaGMtPmF1dGhlZCA9IFRSVUU7CisgICAgICAgIGluZm9mKGRhdGEsICJJbml0aWFsaXplZCBwYXNzd29yZCBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0RPTkUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1RfSU5JVCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfSE9TVF9JTklUOgorICAgICAgaWYoKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9IT1NUKSAmJgorICAgICAgICAgKHN0cnN0cihzc2hjLT5hdXRobGlzdCwgImhvc3RiYXNlZCIpICE9IE5VTEwpKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0hPU1QpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWV9JTklUKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfQVVUSF9IT1NUOgorICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfS0VZX0lOSVQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9BVVRIX0tFWV9JTklUOgorICAgICAgaWYoKGRhdGEtPnNldC5zc2hfYXV0aF90eXBlcyAmIENVUkxTU0hfQVVUSF9LRVlCT0FSRCkKKyAgICAgICAgICYmIChzdHJzdHIoc3NoYy0+YXV0aGxpc3QsICJrZXlib2FyZC1pbnRlcmFjdGl2ZSIpICE9IE5VTEwpKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9BVVRIX0tFWSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfS0VZOgorICAgICAgLyogQXV0aGVudGljYXRpb24gZmFpbGVkLiBDb250aW51ZSB3aXRoIGtleWJvYXJkLWludGVyYWN0aXZlIG5vdy4gKi8KKyAgICAgIHJjID0gbGlic3NoMl91c2VyYXV0aF9rZXlib2FyZF9pbnRlcmFjdGl2ZV9leChzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT51c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihjb25uLT51c2VyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtiZF9jYWxsYmFjayk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgPT0gMCkgeworICAgICAgICBzc2hjLT5hdXRoZWQgPSBUUlVFOworICAgICAgICBpbmZvZihkYXRhLCAiSW5pdGlhbGl6ZWQga2V5Ym9hcmQgaW50ZXJhY3RpdmUgYXV0aGVudGljYXRpb25cbiIpOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX0FVVEhfRE9ORSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX0FVVEhfRE9ORToKKyAgICAgIGlmKCFzc2hjLT5hdXRoZWQpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIGZhaWx1cmUiKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRlJFRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9MT0dJTl9ERU5JRUQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvKgorICAgICAgICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIGF1dGhlbnRpY2F0ZWQgc3NoIHNlc3Npb24uCisgICAgICAgKi8KKyAgICAgIGluZm9mKGRhdGEsICJBdXRoZW50aWNhdGlvbiBjb21wbGV0ZVxuIik7CisKKyAgICAgIEN1cmxfcGdyc1RpbWUoY29ubi0+ZGF0YSwgVElNRVJfQVBQQ09OTkVDVCk7IC8qIFNTSCBpcyBjb25uZWN0ZWQgKi8KKworICAgICAgY29ubi0+c29ja2ZkID0gc29jazsKKyAgICAgIGNvbm4tPndyaXRlc29ja2ZkID0gQ1VSTF9TT0NLRVRfQkFEOworCisgICAgICBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCA9PSBDVVJMUFJPVE9fU0ZUUCkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9JTklUKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpbmZvZihkYXRhLCAiU1NIIENPTk5FQ1QgcGhhc2UgZG9uZVxuIik7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfSU5JVDoKKyAgICAgIC8qCisgICAgICAgKiBTdGFydCB0aGUgbGlic3NoMiBzZnRwIHNlc3Npb24KKyAgICAgICAqLworICAgICAgc3NoYy0+c2Z0cF9zZXNzaW9uID0gbGlic3NoMl9zZnRwX2luaXQoc3NoYy0+c3NoX3Nlc3Npb24pOworICAgICAgaWYoIXNzaGMtPnNmdHBfc2Vzc2lvbikgeworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGNoYXIgKmVycl9tc2c7CisKKyAgICAgICAgICAodm9pZClsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJvcihzc2hjLT5zc2hfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCk7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGl6aW5nIHNmdHAgc2Vzc2lvbjogJXMiLCBlcnJfbXNnKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9GUkVFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQUxQQVRIKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFMUEFUSDoKKyAgICB7CisgICAgICBjaGFyIHRlbXBIb21lW1BBVEhfTUFYXTsKKworICAgICAgLyoKKyAgICAgICAqIEdldCB0aGUgImhvbWUiIGRpcmVjdG9yeQorICAgICAgICovCisgICAgICByYyA9IHNmdHBfbGlic3NoMl9yZWFscGF0aChzc2hjLT5zZnRwX3Nlc3Npb24sICIuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBIb21lLCBQQVRIX01BWC0xKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyA+IDApIHsKKyAgICAgICAgLyogSXQgc2VlbXMgdGhhdCB0aGlzIHN0cmluZyBpcyBub3QgYWx3YXlzIE5VTEwgdGVybWluYXRlZCAqLworICAgICAgICB0ZW1wSG9tZVtyY10gPSAnXDAnOworICAgICAgICBzc2hjLT5ob21lZGlyID0gc3RyZHVwKHRlbXBIb21lKTsKKyAgICAgICAgaWYoIXNzaGMtPmhvbWVkaXIpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IHNzaGMtPmhvbWVkaXI7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogUmV0dXJuIHRoZSBlcnJvciB0eXBlICovCisgICAgICAgIGVyciA9IChpbnQpKGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbikpOworICAgICAgICByZXN1bHQgPSBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoZXJyKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdD9yZXN1bHQ6Q1VSTEVfU1NIOworICAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgImVycm9yID0gJWQgbWFrZXMgbGliY3VybCA9ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgZXJyLCAoaW50KXJlc3VsdCkpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICAvKiBUaGlzIGlzIHRoZSBsYXN0IHN0ZXAgaW4gdGhlIFNGVFAgY29ubmVjdCBwaGFzZS4gRG8gbm90ZSB0aGF0IHdoaWxlCisgICAgICAgd2UgZ2V0IHRoZSBob21lZGlyIGhlcmUsIHdlIGdldCB0aGUgIndvcmtpbmdwYXRoIiBpbiB0aGUgRE8gYWN0aW9uCisgICAgICAgc2luY2UgdGhlIGhvbWVkaXIgd2lsbCByZW1haW4gdGhlIHNhbWUgYmV0d2VlbiByZXF1ZXN0IGJ1dCB0aGUKKyAgICAgICB3b3JraW5nIHBhdGggd2lsbCBub3QuICovCisgICAgREVCVUdGKGluZm9mKGRhdGEsICJTU0ggQ09OTkVDVCBwaGFzZSBkb25lXG4iKSk7CisgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9JTklUOgorCisgICAgICByZXN1bHQgPSBzc2hfZ2V0d29ya2luZ3BhdGgoY29ubiwgc3NoYy0+aG9tZWRpciwgJnNmdHBfc2NwLT5wYXRoKTsKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZihkYXRhLT5zZXQucXVvdGUpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIlNlbmRpbmcgcXVvdGUgY29tbWFuZHNcbiIpOworICAgICAgICBzc2hjLT5xdW90ZV9pdGVtID0gZGF0YS0+c2V0LnF1b3RlOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfVFJBTlNfSU5JVCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQ6CisgICAgICBpZihkYXRhLT5zZXQucG9zdHF1b3RlKSB7CisgICAgICAgIGluZm9mKGRhdGEsICJTZW5kaW5nIHF1b3RlIGNvbW1hbmRzXG4iKTsKKyAgICAgICAgc3NoYy0+cXVvdGVfaXRlbSA9IGRhdGEtPnNldC5wb3N0cXVvdGU7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEU6CisgICAgICAvKiBTZW5kIGFueSBxdW90ZSBjb21tYW5kcyAqLworICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmNwOworCisgICAgICAvKgorICAgICAgICogU3VwcG9ydCBzb21lIG9mIHRoZSAiRlRQIiBjb21tYW5kcworICAgICAgICovCisgICAgICBjaGFyICpjbWQgPSBzc2hjLT5xdW90ZV9pdGVtLT5kYXRhOworICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IEZBTFNFOworCisgICAgICAvKiBpZiBhIGNvbW1hbmQgc3RhcnRzIHdpdGggYW4gYXN0ZXJpc2ssIHdoaWNoIGEgbGVnYWwgU0ZUUCBjb21tYW5kIG5ldmVyCisgICAgICAgICBjYW4sIHRoZSBjb21tYW5kIHdpbGwgYmUgYWxsb3dlZCB0byBmYWlsIHdpdGhvdXQgaXQgY2F1c2luZyBhbnkKKyAgICAgICAgIGFib3J0cyBvciBjYW5jZWxzIGV0Yy4gSXQgd2lsbCBjYXVzZSBsaWJjdXJsIHRvIGFjdCBhcyBpZiB0aGUgY29tbWFuZAorICAgICAgICAgaXMgc3VjY2Vzc2Z1bCwgd2hhdGV2ZXIgdGhlIHNlcnZlciByZXBvbmRzLiAqLworCisgICAgICBpZihjbWRbMF0gPT0gJyonKSB7CisgICAgICAgIGNtZCsrOworICAgICAgICBzc2hjLT5hY2NlcHRmYWlsID0gVFJVRTsKKyAgICAgIH0KKworICAgICAgaWYoY3VybF9zdHJlcXVhbCgicHdkIiwgY21kKSkgeworICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCisgICAgICAgIGNoYXIgKnRtcCA9IGFwcmludGYoIjI1NyBcIiVzXCIgaXMgY3VycmVudCBkaXJlY3RvcnkuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmdHBfc2NwLT5wYXRoKTsKKyAgICAgICAgaWYoIXRtcCkgeworICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkgeworICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fSEVBREVSX09VVCwgKGNoYXIgKikiUFdEXG4iLCA0LCBjb25uKTsKKyAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0hFQURFUl9JTiwgdG1wLCBzdHJsZW4odG1wKSwgY29ubik7CisgICAgICAgIH0KKyAgICAgICAgLyogdGhpcyBzZW5kcyBhbiBGVFAtbGlrZSAiaGVhZGVyIiB0byB0aGUgaGVhZGVyIGNhbGxiYWNrIHNvIHRoYXQgdGhlCisgICAgICAgICAgIGN1cnJlbnQgZGlyZWN0b3J5IGNhbiBiZSByZWFkIHZlcnkgc2ltaWxhciB0byBob3cgaXQgaXMgcmVhZCB3aGVuCisgICAgICAgICAgIHVzaW5nIG9yZGluYXJ5IEZUUC4gKi8KKyAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfSEVBREVSLCB0bXAsIHN0cmxlbih0bXApKTsKKyAgICAgICAgZnJlZSh0bXApOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIGlmKGNtZCkgeworICAgICAgICAvKgorICAgICAgICAgKiB0aGUgYXJndW1lbnRzIGZvbGxvd2luZyB0aGUgY29tbWFuZCBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIHRoZQorICAgICAgICAgKiBjb21tYW5kIHdpdGggYSBzcGFjZSBzbyB3ZSBjYW4gY2hlY2sgZm9yIGl0IHVuY29uZGl0aW9uYWxseQorICAgICAgICAgKi8KKyAgICAgICAgY3AgPSBzdHJjaHIoY21kLCAnICcpOworICAgICAgICBpZihjcCA9PSBOVUxMKSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiBTRlRQIGNvbW1hbmQuIFN1cHBseSBwYXJhbWV0ZXIocykhIik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBhbHNvLCBldmVyeSBjb21tYW5kIHRha2VzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCBzbyB3ZSBnZXQgdGhhdAorICAgICAgICAgKiBmaXJzdCBhcmd1bWVudCByaWdodCBub3cKKyAgICAgICAgICovCisgICAgICAgIHJlc3VsdCA9IGdldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PVVRfT0ZfTUVNT1JZKQorICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBmYWlsZihkYXRhLCAiU3ludGF4IGVycm9yOiBCYWQgZmlyc3QgcGFyYW1ldGVyIik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU0ZUUCBpcyBhIGJpbmFyeSBwcm90b2NvbCwgc28gd2UgZG9uJ3Qgc2VuZCB0ZXh0IGNvbW1hbmRzIHRvCisgICAgICAgICAqIHRoZSBzZXJ2ZXIuIEluc3RlYWQsIHdlIHNjYW4gZm9yIGNvbW1hbmRzIGZvciBjb21tYW5kcyB1c2VkIGJ5CisgICAgICAgICAqIE9wZW5TU0gncyBzZnRwIHByb2dyYW0gYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGxpYnNzaDIKKyAgICAgICAgICogZnVuY3Rpb25zLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoY3VybF9zdHJuZXF1YWwoY21kLCAiY2hncnAgIiwgNikgfHwKKyAgICAgICAgICAgY3VybF9zdHJuZXF1YWwoY21kLCAiY2htb2QgIiwgNikgfHwKKyAgICAgICAgICAgY3VybF9zdHJuZXF1YWwoY21kLCAiY2hvd24gIiwgNikgKSB7CisgICAgICAgICAgLyogYXR0cmlidXRlIGNoYW5nZSAqLworCisgICAgICAgICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgY29udGFpbnMgdGhlIG1vZGUgdG8gc2V0ICovCisgICAgICAgICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLworICAgICAgICAgIHJlc3VsdCA9IGdldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiBjaGdycC9jaG1vZC9jaG93bjogIgorICAgICAgICAgICAgICAgICAgICAiQmFkIHNlY29uZCBwYXJhbWV0ZXIiKTsKKyAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICAgICAgc3NoYy0+cXVvdGVfcGF0aDEgPSBOVUxMOworICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBtZW1zZXQoJnNzaGMtPnF1b3RlX2F0dHJzLCAwLCBzaXplb2YoTElCU1NIMl9TRlRQX0FUVFJJQlVURVMpKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TVEFUKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKGN1cmxfc3RybmVxdWFsKGNtZCwgImxuICIsIDMpIHx8CisgICAgICAgICAgICAgICAgY3VybF9zdHJuZXF1YWwoY21kLCAic3ltbGluayAiLCA4KSkgeworICAgICAgICAgIC8qIHN5bWJvbGljIGxpbmtpbmcgKi8KKyAgICAgICAgICAvKiBzc2hjLT5xdW90ZV9wYXRoMSBpcyB0aGUgc291cmNlICovCisgICAgICAgICAgLyogZ2V0IHRoZSBkZXN0aW5hdGlvbiAqLworICAgICAgICAgIHJlc3VsdCA9IGdldF9wYXRobmFtZSgmY3AsICZzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT1VUX09GX01FTU9SWSkKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIlN5bnRheCBlcnJvciBpbiBsbi9zeW1saW5rOiBCYWQgc2Vjb25kIHBhcmFtZXRlciIpOworICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMSA9IE5VTEw7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NZTUxJTkspOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoY3VybF9zdHJuZXF1YWwoY21kLCAibWtkaXIgIiwgNikpIHsKKyAgICAgICAgICAvKiBjcmVhdGUgZGlyICovCisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfTUtESVIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoY3VybF9zdHJuZXF1YWwoY21kLCAicmVuYW1lICIsIDcpKSB7CisgICAgICAgICAgLyogcmVuYW1lIGZpbGUgKi8KKyAgICAgICAgICAvKiBmaXJzdCBwYXJhbSBpcyB0aGUgc291cmNlIHBhdGggKi8KKyAgICAgICAgICAvKiBzZWNvbmQgcGFyYW0gaXMgdGhlIGRlc3QuIHBhdGggKi8KKyAgICAgICAgICByZXN1bHQgPSBnZXRfcGF0aG5hbWUoJmNwLCAmc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICAgICAgaWYocmVzdWx0ID09IENVUkxFX09VVF9PRl9NRU1PUlkpCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJPdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3IgaW4gcmVuYW1lOiBCYWQgc2Vjb25kIHBhcmFtZXRlciIpOworICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMSA9IE5VTEw7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1JFTkFNRSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihjdXJsX3N0cm5lcXVhbChjbWQsICJybWRpciAiLCA2KSkgeworICAgICAgICAgIC8qIGRlbGV0ZSBkaXIgKi8KKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9STURJUik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihjdXJsX3N0cm5lcXVhbChjbWQsICJybSAiLCAzKSkgeworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1VOTElOSyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBmYWlsZihkYXRhLCAiVW5rbm93biBTRlRQIGNvbW1hbmQiKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgxID0gTlVMTDsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyID0gTlVMTDsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGlmKCFzc2hjLT5xdW90ZV9pdGVtKSB7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9UUkFOU19JTklUKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX05FWFRfUVVPVEU6CisgICAgICBpZihzc2hjLT5xdW90ZV9wYXRoMSkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgc3NoYy0+cXVvdGVfcGF0aDEgPSBOVUxMOworICAgICAgfQorICAgICAgaWYoc3NoYy0+cXVvdGVfcGF0aDIpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgc3NoYy0+cXVvdGVfaXRlbSA9IHNzaGMtPnF1b3RlX2l0ZW0tPm5leHQ7CisKKyAgICAgIGlmKHNzaGMtPnF1b3RlX2l0ZW0pIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGlmKHNzaGMtPm5leHRzdGF0ZSAhPSBTU0hfTk9fU1RBVEUpIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBzc2hjLT5uZXh0c3RhdGUpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9UUkFOU19JTklUKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1NUQVQ6CisgICAgeworICAgICAgY2hhciAqY21kID0gc3NoYy0+cXVvdGVfaXRlbS0+ZGF0YTsKKyAgICAgIHNzaGMtPmFjY2VwdGZhaWwgPSBGQUxTRTsKKworICAgICAgLyogaWYgYSBjb21tYW5kIHN0YXJ0cyB3aXRoIGFuIGFzdGVyaXNrLCB3aGljaCBhIGxlZ2FsIFNGVFAgY29tbWFuZCBuZXZlcgorICAgICAgICAgY2FuLCB0aGUgY29tbWFuZCB3aWxsIGJlIGFsbG93ZWQgdG8gZmFpbCB3aXRob3V0IGl0IGNhdXNpbmcgYW55CisgICAgICAgICBhYm9ydHMgb3IgY2FuY2VscyBldGMuIEl0IHdpbGwgY2F1c2UgbGliY3VybCB0byBhY3QgYXMgaWYgdGhlIGNvbW1hbmQKKyAgICAgICAgIGlzIHN1Y2Nlc3NmdWwsIHdoYXRldmVyIHRoZSBzZXJ2ZXIgcmVwb25kcy4gKi8KKworICAgICAgaWYoY21kWzBdID09ICcqJykgeworICAgICAgICBjbWQrKzsKKyAgICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IFRSVUU7CisgICAgICB9CisKKyAgICAgIGlmKCFjdXJsX3N0cm5lcXVhbChjbWQsICJjaG1vZCIsIDUpKSB7CisgICAgICAgIC8qIFNpbmNlIGNob3duIGFuZCBjaGdycCBvbmx5IHNldCBvd25lciBPUiBncm91cCBidXQgbGlic3NoMiB3YW50cyB0bworICAgICAgICAgKiBzZXQgdGhlbSBib3RoIGF0IG9uY2UsIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBjdXJyZW50IG93bmVyc2hpcAorICAgICAgICAgKiBmaXJzdC4gIFRoaXMgdGFrZXMgYW4gZXh0cmEgcHJvdG9jb2wgcm91bmQgdHJpcC4KKyAgICAgICAgICovCisgICAgICAgIHJjID0gbGlic3NoMl9zZnRwX3N0YXRfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaGMtPnF1b3RlX2F0dHJzKTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsgLyogZ2V0IHRob3NlIGF0dHJpYnV0ZXMgKi8KKyAgICAgICAgICBlcnIgPSAoaW50KShsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMSA9IE5VTEw7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgICAgc3NoYy0+cXVvdGVfcGF0aDIgPSBOVUxMOworICAgICAgICAgIGZhaWxmKGRhdGEsICJBdHRlbXB0IHRvIGdldCBTRlRQIHN0YXRzIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBOb3cgc2V0IHRoZSBuZXcgYXR0cmlidXRlcy4uLiAqLworICAgICAgaWYoY3VybF9zdHJuZXF1YWwoY21kLCAiY2hncnAiLCA1KSkgeworICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5naWQgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7CisgICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmZsYWdzID0gTElCU1NIMl9TRlRQX0FUVFJfVUlER0lEOworICAgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycy5naWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKKyAgICAgICAgICAgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMSA9IE5VTEw7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgICAgc3NoYy0+cXVvdGVfcGF0aDIgPSBOVUxMOworICAgICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IGNoZ3JwIGdpZCBub3QgYSBudW1iZXIiKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZihjdXJsX3N0cm5lcXVhbChjbWQsICJjaG1vZCIsIDUpKSB7CisgICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLnBlcm1pc3Npb25zID0gc3RydG91bChzc2hjLT5xdW90ZV9wYXRoMSwgTlVMTCwgOCk7CisgICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmZsYWdzID0gTElCU1NIMl9TRlRQX0FUVFJfUEVSTUlTU0lPTlM7CisgICAgICAgIC8qIHBlcm1pc3Npb25zIGFyZSBvY3RhbCAqLworICAgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycy5wZXJtaXNzaW9ucyA9PSAwICYmCisgICAgICAgICAgICFJU0RJR0lUKHNzaGMtPnF1b3RlX3BhdGgxWzBdKSkgeworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgxID0gTlVMTDsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMiA9IE5VTEw7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvcjogY2htb2QgcGVybWlzc2lvbnMgbm90IGEgbnVtYmVyIik7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoY3VybF9zdHJuZXF1YWwoY21kLCAiY2hvd24iLCA1KSkgeworICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy51aWQgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7CisgICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmZsYWdzID0gTElCU1NIMl9TRlRQX0FUVFJfVUlER0lEOworICAgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycy51aWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKKyAgICAgICAgICAgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMSA9IE5VTEw7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgICAgc3NoYy0+cXVvdGVfcGF0aDIgPSBOVUxMOworICAgICAgICAgIGZhaWxmKGRhdGEsICJTeW50YXggZXJyb3I6IGNob3duIHVpZCBub3QgYSBudW1iZXIiKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBOb3cgc2VuZCB0aGUgY29tcGxldGVkIHN0cnVjdHVyZS4uLiAqLworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU0VUU1RBVCk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1NFVFNUQVQ6CisgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zdGF0X2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NFVFNUQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2hjLT5xdW90ZV9hdHRycyk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBlcnIgPSAoaW50KShsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgxID0gTlVMTDsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyID0gTlVMTDsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkF0dGVtcHQgdG8gc2V0IFNGVFAgc3RhdHMgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LOgorICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfc3ltbGlua19leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TWU1MSU5LKTsKKyAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZSBpZihyYyAhPSAwICYmICFzc2hjLT5hY2NlcHRmYWlsKSB7CisgICAgICAgIGVyciA9IChpbnQpKGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbikpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgxKTsKKyAgICAgICAgc3NoYy0+cXVvdGVfcGF0aDEgPSBOVUxMOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnF1b3RlX3BhdGgyKTsKKyAgICAgICAgc3NoYy0+cXVvdGVfcGF0aDIgPSBOVUxMOworICAgICAgICBmYWlsZihkYXRhLCAic3ltbGluayBjb21tYW5kIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfTUtESVI6CisgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9ta2Rpcl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNzaGMtPnF1b3RlX3BhdGgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0Lm5ld19kaXJlY3RvcnlfcGVybXMpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgZXJyID0gKGludCkobGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMSA9IE5VTEw7CisgICAgICAgIGZhaWxmKGRhdGEsICJta2RpciBjb21tYW5kIGZhaWxlZDogJXMiLCBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUVVPVEVfUkVOQU1FOgorICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfcmVuYW1lX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc3NoYy0+cXVvdGVfcGF0aDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5xdW90ZV9wYXRoMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfUkVOQU1FX09WRVJXUklURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1JFTkFNRV9BVE9NSUMgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9SRU5BTUVfTkFUSVZFKTsKKworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgZXJyID0gKGludCkobGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMSA9IE5VTEw7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDIpOworICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMiA9IE5VTEw7CisgICAgICAgIGZhaWxmKGRhdGEsICJyZW5hbWUgY29tbWFuZCBmYWlsZWQ6ICVzIiwgc2Z0cF9saWJzc2gyX3N0cmVycm9yKGVycikpOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9OT19TVEFURTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX1FVT1RFX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX05FWFRfUVVPVEUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRlRQX1FVT1RFX1JNRElSOgorICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfcm1kaXJfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc3NoYy0+cXVvdGVfcGF0aDEpKSk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMgIT0gMCAmJiAhc3NoYy0+YWNjZXB0ZmFpbCkgeworICAgICAgICBlcnIgPSAoaW50KShsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMSk7CisgICAgICAgIHNzaGMtPnF1b3RlX3BhdGgxID0gTlVMTDsKKyAgICAgICAgZmFpbGYoZGF0YSwgInJtZGlyIGNvbW1hbmQgZmFpbGVkOiAlcyIsIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9RVU9URV9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ORVhUX1FVT1RFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9RVU9URV9VTkxJTks6CisgICAgICByYyA9IGxpYnNzaDJfc2Z0cF91bmxpbmtfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzc2hjLT5xdW90ZV9wYXRoMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNzaGMtPnF1b3RlX3BhdGgxKSkpOworICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJjICE9IDAgJiYgIXNzaGMtPmFjY2VwdGZhaWwpIHsKKyAgICAgICAgZXJyID0gKGludCkobGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKSk7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgICBzc2hjLT5xdW90ZV9wYXRoMSA9IE5VTEw7CisgICAgICAgIGZhaWxmKGRhdGEsICJybSBjb21tYW5kIGZhaWxlZDogJXMiLCBzZnRwX2xpYnNzaDJfc3RyZXJyb3IoZXJyKSk7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfUVVPVEVfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfTkVYVF9RVU9URSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfVFJBTlNfSU5JVDoKKyAgICAgIGlmKGRhdGEtPnNldC51cGxvYWQpCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1VQTE9BRF9JTklUKTsKKyAgICAgIGVsc2UgeworICAgICAgICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpCisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgICBlbHNlIGlmKHNmdHBfc2NwLT5wYXRoW3N0cmxlbihzZnRwX3NjcC0+cGF0aCktMV0gPT0gJy8nKQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfSU5JVCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9VUExPQURfSU5JVDoKKyAgICB7CisgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgLyoKKyAgICAgICAqIE5PVEUhISEgIGxpYnNzaDIgcmVxdWlyZXMgdGhhdCB0aGUgZGVzdGluYXRpb24gcGF0aCBpcyBhIGZ1bGwgcGF0aAorICAgICAgICogICAgICAgICAgdGhhdCBpbmNsdWRlcyB0aGUgZGVzdGluYXRpb24gZmlsZSBhbmQgbmFtZSBPUiBlbmRzIGluIGEgIi8iCisgICAgICAgKiAgICAgICAgICBJZiB0aGlzIGlzIG5vdCBkb25lIHRoZSBkZXN0aW5hdGlvbiBmaWxlIHdpbGwgYmUgbmFtZWQgdGhlCisgICAgICAgKiAgICAgICAgICBzYW1lIG5hbWUgYXMgdGhlIGxhc3QgZGlyZWN0b3J5IGluIHRoZSBwYXRoLgorICAgICAgICovCisKKyAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICE9IDApIHsKKyAgICAgICAgTElCU1NIMl9TRlRQX0FUVFJJQlVURVMgYXR0cnM7CisgICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIDwgMCkgeworICAgICAgICAgIHJjID0gbGlic3NoMl9zZnRwX3N0YXRfZXgoc3NoYy0+c2Z0cF9zZXNzaW9uLCBzZnRwX3NjcC0+cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9TVEFULCAmYXR0cnMpOworICAgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZihyYykgeworICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20gPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9IGF0dHJzLmZpbGVzaXplOworICAgICAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICAgICAgZmFpbGYoZGF0YSwgIkJhZCBmaWxlIHNpemUgKCUiIEZPUk1BVF9PRkZfVCAiKSIsIHNpemUpOworICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tID0gYXR0cnMuZmlsZXNpemU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKGRhdGEtPnNldC5mdHBfYXBwZW5kKQorICAgICAgICAvKiBUcnkgdG8gb3BlbiBmb3IgYXBwZW5kLCBidXQgY3JlYXRlIGlmIG5vbmV4aXN0aW5nICovCisgICAgICAgIGZsYWdzID0gTElCU1NIMl9GWEZfV1JJVEV8TElCU1NIMl9GWEZfQ1JFQVR8TElCU1NIMl9GWEZfQVBQRU5EOworICAgICAgZWxzZSBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA+IDApCisgICAgICAgIC8qIElmIHdlIGhhdmUgcmVzdGFydCBwb3NpdGlvbiB0aGVuIG9wZW4gZm9yIGFwcGVuZCAqLworICAgICAgICBmbGFncyA9IExJQlNTSDJfRlhGX1dSSVRFfExJQlNTSDJfRlhGX0FQUEVORDsKKyAgICAgIGVsc2UKKyAgICAgICAgLyogQ2xlYXIgZmlsZSBiZWZvcmUgd3JpdGluZyAobm9ybWFsIGJlaGF2aW91cikgKi8KKyAgICAgICAgZmxhZ3MgPSBMSUJTU0gyX0ZYRl9XUklURXxMSUJTU0gyX0ZYRl9DUkVBVHxMSUJTU0gyX0ZYRl9UUlVOQzsKKworICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPQorICAgICAgICBsaWJzc2gyX3NmdHBfb3Blbl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBkYXRhLT5zZXQubmV3X2ZpbGVfcGVybXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfU0ZUUF9PUEVORklMRSk7CisKKyAgICAgIGlmKCFzc2hjLT5zZnRwX2hhbmRsZSkgeworICAgICAgICByYyA9IGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm5vKHNzaGMtPnNzaF9zZXNzaW9uKTsKKworICAgICAgICBpZihMSUJTU0gyX0VSUk9SX0VBR0FJTiA9PSByYykKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgaWYoTElCU1NIMl9FUlJPUl9TRlRQX1BST1RPQ09MID09IHJjKQorICAgICAgICAgICAgLyogb25seSB3aGVuIHRoZXJlIHdhcyBhbiBTRlRQIHByb3RvY29sIGVycm9yIGNhbiB3ZSBleHRyYWN0CisgICAgICAgICAgICAgICB0aGUgc2Z0cCBlcnJvciEgKi8KKyAgICAgICAgICAgIGVyciA9IChpbnQpKGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbikpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVyciA9IC0xOyAvKiBub3QgYW4gc2Z0cCBlcnJvciBhdCBhbGwgKi8KKworICAgICAgICAgIGlmKHNzaGMtPnNlY29uZENyZWF0ZURpcnMpIHsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBlcnI+PSBMSUJTU0gyX0ZYX09LPworICAgICAgICAgICAgICBzZnRwX2xpYnNzaDJfZXJyb3JfdG9fQ1VSTEUoZXJyKTpDVVJMRV9TU0g7CisgICAgICAgICAgICBmYWlsZihkYXRhLCAiQ3JlYXRpbmcgdGhlIGRpci9maWxlIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgICAgc2Z0cF9saWJzc2gyX3N0cmVycm9yKGVycikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoKChlcnIgPT0gTElCU1NIMl9GWF9OT19TVUNIX0ZJTEUpIHx8CisgICAgICAgICAgICAgICAgICAgKGVyciA9PSBMSUJTU0gyX0ZYX0ZBSUxVUkUpIHx8CisgICAgICAgICAgICAgICAgICAgKGVyciA9PSBMSUJTU0gyX0ZYX05PX1NVQ0hfUEFUSCkpICYmCisgICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LmZ0cF9jcmVhdGVfbWlzc2luZ19kaXJzICYmCisgICAgICAgICAgICAgICAgICAgKHN0cmxlbihzZnRwX3NjcC0+cGF0aCkgPiAxKSkpIHsKKyAgICAgICAgICAgIC8qIHRyeSB0byBjcmVhdGUgdGhlIHBhdGggcmVtb3RlbHkgKi8KKyAgICAgICAgICAgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPSAxOworICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBlcnI+PSBMSUJTU0gyX0ZYX09LPworICAgICAgICAgICAgc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik6Q1VSTEVfU1NIOworICAgICAgICAgIGlmKCFzc2hjLT5hY3R1YWxjb2RlKSB7CisgICAgICAgICAgICAvKiBTb21ldGltZXMsIGZvciBzb21lIHJlYXNvbiBsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcigpIHJldHVybnMKKyAgICAgICAgICAgICAgIHplcm8gZXZlbiB0aG91Z2ggbGlic3NoMl9zZnRwX29wZW4oKSBmYWlsZWQgcHJldmlvdXNseSEgV2UgbmVlZAorICAgICAgICAgICAgICAgdG8gd29yayBhcm91bmQgdGhhdCEgKi8KKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9TU0g7CisgICAgICAgICAgICBlcnI9LTE7CisgICAgICAgICAgfQorICAgICAgICAgIGZhaWxmKGRhdGEsICJVcGxvYWQgZmFpbGVkOiAlcyAoJWQvJWQpIiwKKyAgICAgICAgICAgICAgICBlcnI+PSBMSUJTU0gyX0ZYX09LP3NmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpOiJzc2ggZXJyb3IiLAorICAgICAgICAgICAgICAgIGVyciwgcmMpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIElmIHdlIGhhdmUgcmVzdGFydCBwb2ludCB0aGVuIHdlIG5lZWQgdG8gc2VlayB0byB0aGUgY29ycmVjdAorICAgICAgICAgcG9zaXRpb24uICovCisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA+IDApIHsKKyAgICAgICAgLyogTGV0J3MgcmVhZCBvZmYgdGhlIHByb3BlciBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgaW5wdXQuICovCisgICAgICAgIGlmKGNvbm4tPnNlZWtfZnVuYykgeworICAgICAgICAgIHNlZWtlcnIgPSBjb25uLT5zZWVrX2Z1bmMoY29ubi0+c2Vla19jbGllbnQsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VFS19TRVQpOworICAgICAgICB9CisKKyAgICAgICAgaWYoc2Vla2VyciAhPSBDVVJMX1NFRUtGVU5DX09LKSB7CisKKyAgICAgICAgICBpZihzZWVrZXJyICE9IENVUkxfU0VFS0ZVTkNfQ0FOVFNFRUspIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgc2VlayBzdHJlYW0iKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogc2Vla2VyciA9PSBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLIChjYW4ndCBzZWVrIHRvIG9mZnNldCkgKi8KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGN1cmxfb2ZmX3QgcGFzc2VkPTA7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgIHNpemVfdCByZWFkdGhpc2Ftb3VudG5vdyA9CisgICAgICAgICAgICAgICAgKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tIC0gcGFzc2VkID4gQ1VSTF9PRkZfVF9DKEJVRlNJWkUpKSA/CisgICAgICAgICAgICAgICAgQlVGU0laRSA6IGN1cmx4X3NvdG91eihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSAtIHBhc3NlZCk7CisKKyAgICAgICAgICAgICAgc2l6ZV90IGFjdHVhbGx5cmVhZCA9CisgICAgICAgICAgICAgICAgY29ubi0+ZnJlYWRfZnVuYyhkYXRhLT5zdGF0ZS5idWZmZXIsIDEsIHJlYWR0aGlzYW1vdW50bm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+ZnJlYWRfaW4pOworCisgICAgICAgICAgICAgIHBhc3NlZCArPSBhY3R1YWxseXJlYWQ7CisgICAgICAgICAgICAgIGlmKChhY3R1YWxseXJlYWQgPT0gMCkgfHwgKGFjdHVhbGx5cmVhZCA+IHJlYWR0aGlzYW1vdW50bm93KSkgeworICAgICAgICAgICAgICAgIC8qIHRoaXMgY2hlY2tzIGZvciBncmVhdGVyLXRoYW4gb25seSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICBDVVJMX1JFQURGVU5DX0FCT1JUIHJldHVybiBjb2RlIHN0aWxsIGFib3J0cyAqLworICAgICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBkYXRhIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIENVUkxFX0ZUUF9DT1VMRE5UX1VTRV9SRVNUOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlKHBhc3NlZCA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBub3csIGRlY3JlYXNlIHRoZSBzaXplIG9mIHRoZSByZWFkICovCisgICAgICAgIGlmKGRhdGEtPnNldC5pbmZpbGVzaXplID4gMCkgeworICAgICAgICAgIGRhdGEtPnNldC5pbmZpbGVzaXplIC09IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tOworICAgICAgICAgIGRhdGEtPnJlcS5zaXplID0gZGF0YS0+c2V0LmluZmlsZXNpemU7CisgICAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCBkYXRhLT5zZXQuaW5maWxlc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBTRlRQX1NFRUsoc3NoYy0+c2Z0cF9oYW5kbGUsIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgIH0KKyAgICAgIGlmKGRhdGEtPnNldC5pbmZpbGVzaXplID4gMCkgeworICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IGRhdGEtPnNldC5pbmZpbGVzaXplOworICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnNldC5pbmZpbGVzaXplKTsKKyAgICAgIH0KKyAgICAgIC8qIHVwbG9hZCBkYXRhICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIEZJUlNUU09DS0VULCBOVUxMKTsKKworICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCisgICAgICBjb25uLT5zb2NrZmQgPSBjb25uLT53cml0ZXNvY2tmZDsKKworICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBzdG9yZSB0aGlzIG9yaWdpbmFsIGJpdG1hc2sgc2V0dXAgdG8gdXNlIGxhdGVyIG9uIGlmIHdlIGNhbid0CisgICAgICAgICAgIGZpZ3VyZSBvdXQgYSAicmVhbCIgYml0bWFzayAqLworICAgICAgICBzc2hjLT5vcmlnX3dhaXRmb3IgPSBkYXRhLT5yZXEua2VlcG9uOworCisgICAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfc2VuZGluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKKyAgICAgICAgICAgb3V0IHJlYWRhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaDIgc2Z0cCBzZW5kIGZ1bmN0aW9uIHdpbGwgZGVhbAorICAgICAgICAgICB3aXRoIGJvdGggYWNjb3JkaW5nbHkgKi8KKyAgICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX09VVDsKKworICAgICAgICAvKiBzaW5jZSB3ZSBkb24ndCByZWFsbHkgd2FpdCBmb3IgYW55dGhpbmcgYXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0aGUKKyAgICAgICAgICAgc3RhdGUgbWFjaGluZSB0byBtb3ZlIG9uIGFzIHNvb24gYXMgcG9zc2libGUgc28gd2Ugc2V0IGEgdmVyeSBzaG9ydAorICAgICAgICAgICB0aW1lb3V0IGhlcmUgKi8KKyAgICAgICAgQ3VybF9leHBpcmUoZGF0YSwgMSk7CisKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTU0hfU0ZUUF9DUkVBVEVfRElSU19JTklUOgorICAgICAgaWYoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSA+IDEpIHsKKyAgICAgICAgc3NoYy0+c2xhc2hfcG9zID0gc2Z0cF9zY3AtPnBhdGggKyAxOyAvKiBpZ25vcmUgdGhlIGxlYWRpbmcgJy8nICovCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NSRUFURV9ESVJTKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlM6CisgICAgICBpZigoc3NoYy0+c2xhc2hfcG9zID0gc3RyY2hyKHNzaGMtPnNsYXNoX3BvcywgJy8nKSkgIT0gTlVMTCkgeworICAgICAgICAqc3NoYy0+c2xhc2hfcG9zID0gMDsKKworICAgICAgICBpbmZvZihkYXRhLCAiQ3JlYXRpbmcgZGlyZWN0b3J5ICclcydcbiIsIHNmdHBfc2NwLT5wYXRoKTsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9VUExPQURfSU5JVCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfTUtESVI6CisgICAgICAvKiAnbW9kZScgLSBwYXJhbWV0ZXIgaXMgcHJlbGltaW5hcnkgLSBkZWZhdWx0IHRvIDA2NDQgKi8KKyAgICAgIHJjID0gbGlic3NoMl9zZnRwX21rZGlyX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQubmV3X2RpcmVjdG9yeV9wZXJtcyk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgICpzc2hjLT5zbGFzaF9wb3MgPSAnLyc7CisgICAgICArK3NzaGMtPnNsYXNoX3BvczsKKyAgICAgIGlmKHJjID09IC0xKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBzZnRwX2VyciA9IDA7CisgICAgICAgIC8qCisgICAgICAgICAqIEFib3J0IGlmIGZhaWx1cmUgd2Fzbid0IHRoYXQgdGhlIGRpciBhbHJlYWR5IGV4aXN0cyBvciB0aGUKKyAgICAgICAgICogcGVybWlzc2lvbiB3YXMgZGVuaWVkIChjcmVhdGlvbiBtaWdodCBzdWNjZWVkIGZ1cnRoZXIgZG93biB0aGUKKyAgICAgICAgICogcGF0aCkgLSByZXRyeSBvbiB1bnNwZWNpZmljIEZBSUxVUkUgYWxzbworICAgICAgICAgKi8KKyAgICAgICAgc2Z0cF9lcnIgPSAodW5zaWduZWQgaW50KShsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pKTsKKyAgICAgICAgaWYoKHNmdHBfZXJyICE9IExJQlNTSDJfRlhfRklMRV9BTFJFQURZX0VYSVNUUykgJiYKKyAgICAgICAgICAgKHNmdHBfZXJyICE9IExJQlNTSDJfRlhfRkFJTFVSRSkgJiYKKyAgICAgICAgICAgKHNmdHBfZXJyICE9IExJQlNTSDJfRlhfUEVSTUlTU0lPTl9ERU5JRUQpKSB7CisgICAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKHNmdHBfZXJyKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdD9yZXN1bHQ6Q1VSTEVfU1NIOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DUkVBVEVfRElSUyk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9JTklUOgorICAgICAgLyoKKyAgICAgICAqIFRoaXMgaXMgYSBkaXJlY3RvcnkgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGdldCwgc28gcHJvZHVjZSBhIGRpcmVjdG9yeQorICAgICAgICogbGlzdGluZworICAgICAgICovCisgICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IGxpYnNzaDJfc2Z0cF9vcGVuX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgTElCU1NIMl9TRlRQX09QRU5ESVIpOworICAgICAgaWYoIXNzaGMtPnNmdHBfaGFuZGxlKSB7CisgICAgICAgIGlmKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm5vKHNzaGMtPnNzaF9zZXNzaW9uKSA9PQorICAgICAgICAgICBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIHJjID0gTElCU1NIMl9FUlJPUl9FQUdBSU47CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgZXJyID0gKGludCkobGlic3NoMl9zZnRwX2xhc3RfZXJyb3Ioc3NoYy0+c2Z0cF9zZXNzaW9uKSk7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSBmb3IgcmVhZGluZzogJXMiLAorICAgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdD9yZXN1bHQ6Q1VSTEVfU1NIOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZigoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSA9IG1hbGxvYyhQQVRIX01BWCsxKSkgPT0gTlVMTCkgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmKChzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSA9IG1hbGxvYyhQQVRIX01BWCsxKSkgPT0gTlVMTCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gTlVMTDsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSOgorICAgICAgc3NoYy0+cmVhZGRpcl9sZW4gPSBsaWJzc2gyX3NmdHBfcmVhZGRpcl9leChzc2hjLT5zZnRwX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUSF9NQVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRIX01BWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzaGMtPnJlYWRkaXJfYXR0cnMpOworICAgICAgaWYoc3NoYy0+cmVhZGRpcl9sZW4gPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgcmMgPSBMSUJTU0gyX0VSUk9SX0VBR0FJTjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihzc2hjLT5yZWFkZGlyX2xlbiA+IDApIHsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZVtzc2hjLT5yZWFkZGlyX2xlbl0gPSAnXDAnOworCisgICAgICAgIGlmKGRhdGEtPnNldC5mdHBfbGlzdF9vbmx5KSB7CisgICAgICAgICAgY2hhciAqdG1wTGluZTsKKworICAgICAgICAgIHRtcExpbmUgPSBhcHJpbnRmKCIlc1xuIiwgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisgICAgICAgICAgaWYodG1wTGluZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcExpbmUsIHNzaGMtPnJlYWRkaXJfbGVuKzEpOworICAgICAgICAgIEN1cmxfc2FmZWZyZWUodG1wTGluZSk7CisKKyAgICAgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICAvKiBzaW5jZSB0aGlzIGNvdW50cyB3aGF0IHdlIHNlbmQgdG8gdGhlIGNsaWVudCwgd2UgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICBuZXdsaW5lIGluIHRoaXMgY291bnRlciAqLworICAgICAgICAgIGRhdGEtPnJlcS5ieXRlY291bnQgKz0gc3NoYy0+cmVhZGRpcl9sZW4rMTsKKworICAgICAgICAgIC8qIG91dHB1dCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KKyAgICAgICAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkgeworICAgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX09VVCwgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9sZW4sIGNvbm4pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4gPSAoaW50KXN0cmxlbihzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiA9IDgwICsgc3NoYy0+cmVhZGRpcl9jdXJyTGVuOworICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IGNhbGxvYyhzc2hjLT5yZWFkZGlyX3RvdGFsTGVuLCAxKTsKKyAgICAgICAgICBpZighc3NoYy0+cmVhZGRpcl9saW5lKSB7CisgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSA9IE5VTEw7CisgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKKyAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gTlVMTDsKKyAgICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgbWVtY3B5KHNzaGMtPnJlYWRkaXJfbGluZSwgc3NoYy0+cmVhZGRpcl9sb25nZW50cnksCisgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfY3Vyckxlbik7CisgICAgICAgICAgaWYoKHNzaGMtPnJlYWRkaXJfYXR0cnMuZmxhZ3MgJiBMSUJTU0gyX1NGVFBfQVRUUl9QRVJNSVNTSU9OUykgJiYKKyAgICAgICAgICAgICAoKHNzaGMtPnJlYWRkaXJfYXR0cnMucGVybWlzc2lvbnMgJiBMSUJTU0gyX1NGVFBfU19JRk1UKSA9PQorICAgICAgICAgICAgICBMSUJTU0gyX1NGVFBfU19JRkxOSykpIHsKKyAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbGlua1BhdGggPSBtYWxsb2MoUEFUSF9NQVggKyAxKTsKKyAgICAgICAgICAgIGlmKHNzaGMtPnJlYWRkaXJfbGlua1BhdGggPT0gTlVMTCkgeworICAgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gTlVMTDsKKyAgICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gTlVMTDsKKyAgICAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNucHJpbnRmKHNzaGMtPnJlYWRkaXJfbGlua1BhdGgsIFBBVEhfTUFYLCAiJXMlcyIsIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisgICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0xJTkspOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1JFQURESVJfQk9UVE9NKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZihzc2hjLT5yZWFkZGlyX2xlbiA9PSAwKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUgPSBOVUxMOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKKyAgICAgICAgc3NoYy0+cmVhZGRpcl9sb25nZW50cnkgPSBOVUxMOworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0RPTkUpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoc3NoYy0+cmVhZGRpcl9sZW4gPD0gMCkgeworICAgICAgICBlcnIgPSAoaW50KShsaWJzc2gyX3NmdHBfbGFzdF9lcnJvcihzc2hjLT5zZnRwX3Nlc3Npb24pKTsKKyAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7CisgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSByZXN1bHQ/cmVzdWx0OkNVUkxFX1NTSDsKKyAgICAgICAgZmFpbGYoZGF0YSwgIkNvdWxkIG5vdCBvcGVuIHJlbW90ZSBmaWxlIGZvciByZWFkaW5nOiAlcyA6OiAlZCIsCisgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpLAorICAgICAgICAgICAgICBsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gTlVMTDsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gTlVMTDsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0xJTks6CisgICAgICBzc2hjLT5yZWFkZGlyX2xlbiA9CisgICAgICAgIGxpYnNzaDJfc2Z0cF9zeW1saW5rX2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHhfdXp0b3VpKHN0cmxlbihzc2hjLT5yZWFkZGlyX2xpbmtQYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVEhfTUFYLCBMSUJTU0gyX1NGVFBfUkVBRExJTkspOworICAgICAgaWYoc3NoYy0+cmVhZGRpcl9sZW4gPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgcmMgPSBMSUJTU0gyX0VSUk9SX0VBR0FJTjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbGlua1BhdGgpOworICAgICAgc3NoYy0+cmVhZGRpcl9saW5rUGF0aCA9IE5VTEw7CisKKyAgICAgIC8qIGdldCByb29tIGZvciB0aGUgZmlsZW5hbWUgYW5kIGV4dHJhIG91dHB1dCAqLworICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiArPSA0ICsgc3NoYy0+cmVhZGRpcl9sZW47CisgICAgICBuZXdfcmVhZGRpcl9saW5lID0gcmVhbGxvYyhzc2hjLT5yZWFkZGlyX2xpbmUsIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4pOworICAgICAgaWYoIW5ld19yZWFkZGlyX2xpbmUpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xpbmUpOworICAgICAgICBzc2hjLT5yZWFkZGlyX2xpbmUgPSBOVUxMOworICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworICAgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gTlVMTDsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5yZWFkZGlyX2xvbmdlbnRyeSk7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5ID0gTlVMTDsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzc2hjLT5yZWFkZGlyX2xpbmUgPSBuZXdfcmVhZGRpcl9saW5lOworCisgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4gKz0gc25wcmludGYoc3NoYy0+cmVhZGRpcl9saW5lICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLT4gJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaGMtPnJlYWRkaXJfZmlsZW5hbWUpOworCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSX0JPVFRPTSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NGVFBfUkVBRERJUl9CT1RUT006CisgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4gKz0gc25wcmludGYoc3NoYy0+cmVhZGRpcl9saW5lICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuLCAiXG4iKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hjLT5yZWFkZGlyX2N1cnJMZW4pOworCisgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT0spIHsKKworICAgICAgICAvKiBvdXRwdXQgZGVidWcgb3V0cHV0IGlmIHRoYXQgaXMgcmVxdWVzdGVkICovCisgICAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7CisgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX09VVCwgc3NoYy0+cmVhZGRpcl9saW5lLAorICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl9jdXJyTGVuLCBjb25uKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhLT5yZXEuYnl0ZWNvdW50ICs9IHNzaGMtPnJlYWRkaXJfY3VyckxlbjsKKyAgICAgIH0KKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKKyAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IE5VTEw7CisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9SRUFERElSKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9SRUFERElSX0RPTkU6CisgICAgICBpZihsaWJzc2gyX3NmdHBfY2xvc2VkaXIoc3NoYy0+c2Z0cF9oYW5kbGUpID09CisgICAgICAgICBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHNzaGMtPnNmdHBfaGFuZGxlID0gTlVMTDsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisgICAgICBzc2hjLT5yZWFkZGlyX2ZpbGVuYW1lID0gTlVMTDsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOworICAgICAgc3NoYy0+cmVhZGRpcl9sb25nZW50cnkgPSBOVUxMOworCisgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9ET1dOTE9BRF9JTklUOgorICAgICAgLyoKKyAgICAgICAqIFdvcmsgb24gZ2V0dGluZyB0aGUgc3BlY2lmaWVkIGZpbGUKKyAgICAgICAqLworICAgICAgc3NoYy0+c2Z0cF9oYW5kbGUgPQorICAgICAgICBsaWJzc2gyX3NmdHBfb3Blbl9leChzc2hjLT5zZnRwX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJseF91enRvdWkoc3RybGVuKHNmdHBfc2NwLT5wYXRoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNTSDJfRlhGX1JFQUQsIGRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX09QRU5GSUxFKTsKKyAgICAgIGlmKCFzc2hjLT5zZnRwX2hhbmRsZSkgeworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGVyciA9IChpbnQpKGxpYnNzaDJfc2Z0cF9sYXN0X2Vycm9yKHNzaGMtPnNmdHBfc2Vzc2lvbikpOworICAgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZCBub3Qgb3BlbiByZW1vdGUgZmlsZSBmb3IgcmVhZGluZzogJXMiLAorICAgICAgICAgICAgICAgIHNmdHBfbGlic3NoMl9zdHJlcnJvcihlcnIpKTsKKyAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgICAgICAgcmVzdWx0ID0gc2Z0cF9saWJzc2gyX2Vycm9yX3RvX0NVUkxFKGVycik7CisgICAgICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdD9yZXN1bHQ6Q1VSTEVfU1NIOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9ET1dOTE9BRF9TVEFUOgorICAgIHsKKyAgICAgIExJQlNTSDJfU0ZUUF9BVFRSSUJVVEVTIGF0dHJzOworCisgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zdGF0X2V4KHNzaGMtPnNmdHBfc2Vzc2lvbiwgc2Z0cF9zY3AtPnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmx4X3V6dG91aShzdHJsZW4oc2Z0cF9zY3AtPnBhdGgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1NIMl9TRlRQX1NUQVQsICZhdHRycyk7CisgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocmMpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbGlic3NoMl9zZnRwX29wZW4oKSBkaWRuJ3QgcmV0dXJuIGFuIGVycm9yLCBzbyBtYXliZSB0aGUgc2VydmVyCisgICAgICAgICAqIGp1c3QgZG9lc24ndCBzdXBwb3J0IHN0YXQoKQorICAgICAgICAgKi8KKyAgICAgICAgZGF0YS0+cmVxLnNpemUgPSAtMTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gLTE7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY3VybF9vZmZfdCBzaXplID0gYXR0cnMuZmlsZXNpemU7CisKKyAgICAgICAgaWYoc2l6ZSA8IDApIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiQmFkIGZpbGUgc2l6ZSAoJSIgRk9STUFUX09GRl9UICIpIiwgc2l6ZSk7CisgICAgICAgICAgcmV0dXJuIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU7CisgICAgICAgIH0KKyAgICAgICAgaWYoY29ubi0+ZGF0YS0+c3RhdGUudXNlX3JhbmdlKSB7CisgICAgICAgICAgY3VybF9vZmZfdCBmcm9tLCB0bzsKKyAgICAgICAgICBjaGFyICpwdHI7CisgICAgICAgICAgY2hhciAqcHRyMjsKKworICAgICAgICAgIGZyb209Y3VybHhfc3RydG9vZmZ0KGNvbm4tPmRhdGEtPnN0YXRlLnJhbmdlLCAmcHRyLCAwKTsKKyAgICAgICAgICB3aGlsZSgqcHRyICYmIChJU1NQQUNFKCpwdHIpIHx8ICgqcHRyPT0nLScpKSkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICAgIHRvPWN1cmx4X3N0cnRvb2ZmdChwdHIsICZwdHIyLCAwKTsKKyAgICAgICAgICBpZigocHRyID09IHB0cjIpIC8qIG5vICJ0byIgdmFsdWUgZ2l2ZW4gKi8KKyAgICAgICAgICAgICB8fCAodG8gPj0gc2l6ZSkpIHsKKyAgICAgICAgICAgIHRvID0gc2l6ZSAtIDE7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKGZyb20gPCAwKSB7CisgICAgICAgICAgICAvKiBmcm9tIGlzIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlICovCisgICAgICAgICAgICBmcm9tICs9IHNpemU7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKGZyb20gPj0gc2l6ZSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIKKyAgICAgICAgICAgICAgICAgIEZPUk1BVF9PRkZfVCAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIgRk9STUFUX09GRl9UICIpIiwKKyAgICAgICAgICAgICAgICAgIGZyb20sIGF0dHJzLmZpbGVzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihmcm9tID4gdG8pIHsKKyAgICAgICAgICAgIGZyb20gPSB0bzsKKyAgICAgICAgICAgIHNpemUgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNpemUgPSB0byAtIGZyb20gKyAxOworICAgICAgICAgIH0KKworICAgICAgICAgIFNGVFBfU0VFSyhjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBmcm9tKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhLT5yZXEuc2l6ZSA9IHNpemU7CisgICAgICAgIGRhdGEtPnJlcS5tYXhkb3dubG9hZCA9IHNpemU7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkU2l6ZShkYXRhLCBzaXplKTsKKyAgICAgIH0KKworICAgICAgLyogV2UgY2FuIHJlc3VtZSBpZiB3ZSBjYW4gc2VlayB0byB0aGUgcmVzdW1lIHBvc2l0aW9uICovCisgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICBpZihkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSA8IDApIHsKKyAgICAgICAgICAvKiBXZSdyZSBzdXBwb3NlZCB0byBkb3dubG9hZCB0aGUgbGFzdCBhYnMoZnJvbSkgYnl0ZXMgKi8KKyAgICAgICAgICBpZigoY3VybF9vZmZfdClhdHRycy5maWxlc2l6ZSA8IC1kYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgIk9mZnNldCAoJSIKKyAgICAgICAgICAgICAgICAgIEZPUk1BVF9PRkZfVCAiKSB3YXMgYmV5b25kIGZpbGUgc2l6ZSAoJSIgRk9STUFUX09GRl9UICIpIiwKKyAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tLCBhdHRycy5maWxlc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0RPV05MT0FEX1JFU1VNRTsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogZG93bmxvYWQgZnJvbSB3aGVyZT8gKi8KKyAgICAgICAgICBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSArPSBhdHRycy5maWxlc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBpZigoY3VybF9vZmZfdClhdHRycy5maWxlc2l6ZSA8IGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKSB7CisgICAgICAgICAgICBmYWlsZihkYXRhLCAiT2Zmc2V0ICglIiBGT1JNQVRfT0ZGX1QKKyAgICAgICAgICAgICAgICAgICIpIHdhcyBiZXlvbmQgZmlsZSBzaXplICglIiBGT1JNQVRfT0ZGX1QgIikiLAorICAgICAgICAgICAgICAgICAgZGF0YS0+c3RhdGUucmVzdW1lX2Zyb20sIGF0dHJzLmZpbGVzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBEb2VzIGEgY29tcGxldGVkIGZpbGUgbmVlZCB0byBiZSBzZWVrZWQgYW5kIHN0YXJ0ZWQgb3IgY2xvc2VkID8gKi8KKyAgICAgICAgLyogTm93IHN0b3JlIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgYXJlIGV4cGVjdGVkIHRvIGRvd25sb2FkICovCisgICAgICAgIGRhdGEtPnJlcS5zaXplID0gYXR0cnMuZmlsZXNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTsKKyAgICAgICAgZGF0YS0+cmVxLm1heGRvd25sb2FkID0gYXR0cnMuZmlsZXNpemUgLSBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbTsKKyAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRycy5maWxlc2l6ZSAtIGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tKTsKKyAgICAgICAgU0ZUUF9TRUVLKHNzaGMtPnNmdHBfaGFuZGxlLCBkYXRhLT5zdGF0ZS5yZXN1bWVfZnJvbSk7CisgICAgICB9CisgICAgfQorICAgIC8qIFNldHVwIHRoZSBhY3R1YWwgZG93bmxvYWQgKi8KKyAgICBpZihkYXRhLT5yZXEuc2l6ZSA9PSAwKSB7CisgICAgICAvKiBubyBkYXRhIHRvIHRyYW5zZmVyICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKyAgICAgIGluZm9mKGRhdGEsICJGaWxlIGFscmVhZHkgY29tcGxldGVseSBkb3dubG9hZGVkXG4iKTsKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIGRhdGEtPnJlcS5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOworCisgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KKyAgICAgIGNvbm4tPndyaXRlc29ja2ZkID0gY29ubi0+c29ja2ZkOworCisgICAgICAvKiB3ZSB3YW50IHRvIHVzZSB0aGUgX3JlY2VpdmluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKKyAgICAgICAgIG91dCB3cml0YWJsZWFibGUgYXMgdGhlIHVuZGVybHlpbmcgbGlic3NoMiByZWN2IGZ1bmN0aW9uIHdpbGwgZGVhbAorICAgICAgICAgd2l0aCBib3RoIGFjY29yZGluZ2x5ICovCisgICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfSU47CisgICAgfQorICAgIGlmKHJlc3VsdCkgeworICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfQ0xPU0UpOworICAgICAgc3NoYy0+YWN0dWFsY29kZSA9IHJlc3VsdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgfQorICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9DTE9TRToKKyAgICAgIGlmKHNzaGMtPnNmdHBfaGFuZGxlKSB7CisgICAgICAgIHJjID0gbGlic3NoMl9zZnRwX2Nsb3NlKHNzaGMtPnNmdHBfaGFuZGxlKTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHJjIDwgMCkgeworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gY2xvc2UgbGlic3NoMiBmaWxlXG4iKTsKKyAgICAgICAgfQorICAgICAgICBzc2hjLT5zZnRwX2hhbmRsZSA9IE5VTEw7CisgICAgICB9CisgICAgICBpZihzZnRwX3NjcCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHNmdHBfc2NwLT5wYXRoKTsKKyAgICAgICAgc2Z0cF9zY3AtPnBhdGggPSBOVUxMOworICAgICAgfQorCisgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlNGVFAgRE9ORSBkb25lXG4iKSk7CisKKyAgICAgIC8qIENoZWNrIGlmIG5leHRzdGF0ZSBpcyBzZXQgYW5kIG1vdmUgLm5leHRzdGF0ZSBjb3VsZCBiZSBQT1NUUVVPVEVfSU5JVAorICAgICAgICAgQWZ0ZXIgbmV4dHN0YXRlIGlzIGV4ZWN1dGVkLHRoZSBjb250cm9sIHNob3VsZCBjb21lIGJhY2sgdG8KKyAgICAgICAgIFNTSF9TRlRQX0NMT1NFIHRvIHBhc3MgdGhlIGNvcnJlY3QgcmVzdWx0IGJhY2sgICovCisgICAgICBpZihzc2hjLT5uZXh0c3RhdGUgIT0gU1NIX05PX1NUQVRFKSB7CisgICAgICAgIHN0YXRlKGNvbm4sIHNzaGMtPm5leHRzdGF0ZSk7CisgICAgICAgIHNzaGMtPm5leHRzdGF0ZSA9IFNTSF9TRlRQX0NMT1NFOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgICAgcmVzdWx0ID0gc3NoYy0+YWN0dWFsY29kZTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0ZUUF9TSFVURE9XTjoKKyAgICAgIC8qIGR1cmluZyB0aW1lcyB3ZSBnZXQgaGVyZSBkdWUgdG8gYSBicm9rZW4gdHJhbnNmZXIgYW5kIHRoZW4gdGhlCisgICAgICAgICBzZnRwX2hhbmRsZSBtaWdodCBub3QgaGF2ZSBiZWVuIHRha2VuIGRvd24gc28gbWFrZSBzdXJlIHRoYXQgaXMgZG9uZQorICAgICAgICAgYmVmb3JlIHdlIHByb2NlZWQgKi8KKworICAgICAgaWYoc3NoYy0+c2Z0cF9oYW5kbGUpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3NmdHBfY2xvc2Uoc3NoYy0+c2Z0cF9oYW5kbGUpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYocmMgPCAwKSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBjbG9zZSBsaWJzc2gyIGZpbGVcbiIpOworICAgICAgICB9CisgICAgICAgIHNzaGMtPnNmdHBfaGFuZGxlID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIGlmKHNzaGMtPnNmdHBfc2Vzc2lvbikgeworICAgICAgICByYyA9IGxpYnNzaDJfc2Z0cF9zaHV0ZG93bihzc2hjLT5zZnRwX3Nlc3Npb24pOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYocmMgPCAwKSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBzdG9wIGxpYnNzaDIgc2Z0cCBzdWJzeXN0ZW1cbiIpOworICAgICAgICB9CisgICAgICAgIHNzaGMtPnNmdHBfc2Vzc2lvbiA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+aG9tZWRpcik7CisgICAgICBzc2hjLT5ob21lZGlyID0gTlVMTDsKKyAgICAgIGNvbm4tPmRhdGEtPnN0YXRlLm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGggPSBOVUxMOworCisgICAgICBzdGF0ZShjb25uLCBTU0hfU0VTU0lPTl9ESVNDT05ORUNUKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX1RSQU5TX0lOSVQ6CisgICAgICByZXN1bHQgPSBzc2hfZ2V0d29ya2luZ3BhdGgoY29ubiwgc3NoYy0+aG9tZWRpciwgJnNmdHBfc2NwLT5wYXRoKTsKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZihkYXRhLT5zZXQudXBsb2FkKSB7CisgICAgICAgIGlmKGRhdGEtPnNldC5pbmZpbGVzaXplIDwgMCkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJTQ1AgcmVxdWlyZXMgYSBrbm93biBmaWxlIHNpemUgZm9yIHVwbG9hZCIpOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBDVVJMRV9VUExPQURfRkFJTEVEOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1VQTE9BRF9JTklUKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX0RPV05MT0FEX0lOSVQpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfVVBMT0FEX0lOSVQ6CisgICAgICAvKgorICAgICAgICogbGlic3NoMiByZXF1aXJlcyB0aGF0IHRoZSBkZXN0aW5hdGlvbiBwYXRoIGlzIGEgZnVsbCBwYXRoIHRoYXQKKyAgICAgICAqIGluY2x1ZGVzIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGFuZCBuYW1lIE9SIGVuZHMgaW4gYSAiLyIgLiAgSWYgdGhpcyBpcworICAgICAgICogbm90IGRvbmUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgd2lsbCBiZSBuYW1lZCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBsYXN0CisgICAgICAgKiBkaXJlY3RvcnkgaW4gdGhlIHBhdGguCisgICAgICAgKi8KKyAgICAgIHNzaGMtPnNzaF9jaGFubmVsID0KKyAgICAgICAgU0NQX1NFTkQoc3NoYy0+c3NoX3Nlc3Npb24sIHNmdHBfc2NwLT5wYXRoLCBkYXRhLT5zZXQubmV3X2ZpbGVfcGVybXMsCisgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5pbmZpbGVzaXplKTsKKyAgICAgIGlmKCFzc2hjLT5zc2hfY2hhbm5lbCkgeworICAgICAgICBpZihsaWJzc2gyX3Nlc3Npb25fbGFzdF9lcnJubyhzc2hjLT5zc2hfc2Vzc2lvbikgPT0KKyAgICAgICAgICAgTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICByYyA9IExJQlNTSDJfRVJST1JfRUFHQUlOOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGludCBzc2hfZXJyOworICAgICAgICAgIGNoYXIgKmVycl9tc2c7CisKKyAgICAgICAgICBzc2hfZXJyID0gKGludCkobGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJfbXNnLCBOVUxMLCAwKSk7CisgICAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIiVzIiwgZXJyX21zZyk7CisgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOworICAgICAgICAgIHNzaGMtPmFjdHVhbGNvZGUgPSBsaWJzc2gyX3Nlc3Npb25fZXJyb3JfdG9fQ1VSTEUoc3NoX2Vycik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogdXBsb2FkIGRhdGEgKi8KKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIGRhdGEtPnJlcS5zaXplLCBGQUxTRSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRklSU1RTT0NLRVQsIE5VTEwpOworCisgICAgICAvKiBub3Qgc2V0IGJ5IEN1cmxfc2V0dXBfdHJhbnNmZXIgdG8gcHJlc2VydmUga2VlcG9uIGJpdHMgKi8KKyAgICAgIGNvbm4tPnNvY2tmZCA9IGNvbm4tPndyaXRlc29ja2ZkOworCisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIHdlIHdhbnQgdG8gdXNlIHRoZSBfc2VuZGluZ18gZnVuY3Rpb24gZXZlbiB3aGVuIHRoZSBzb2NrZXQgdHVybnMKKyAgICAgICAgICAgb3V0IHJlYWRhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaDIgc2NwIHNlbmQgZnVuY3Rpb24gd2lsbCBkZWFsCisgICAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgICBjb25uLT5jc2VsZWN0X2JpdHMgPSBDVVJMX0NTRUxFQ1RfT1VUOworCisgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX0RPV05MT0FEX0lOSVQ6CisgICAgeworICAgICAgLyoKKyAgICAgICAqIFdlIG11c3QgY2hlY2sgdGhlIHJlbW90ZSBmaWxlOyBpZiBpdCBpcyBhIGRpcmVjdG9yeSBubyB2YWx1ZXMgd2lsbAorICAgICAgICogYmUgc2V0IGluIHNiCisgICAgICAgKi8KKyAgICAgIHN0cnVjdCBzdGF0IHNiOworICAgICAgY3VybF9vZmZfdCBieXRlY291bnQ7CisKKyAgICAgIC8qIGNsZWFyIHRoZSBzdHJ1Y3Qgc2NwIHJlY3Ygd2lsbCBmaWxsIGluICovCisgICAgICBtZW1zZXQoJnNiLCAwLCBzaXplb2Yoc3RydWN0IHN0YXQpKTsKKworICAgICAgLyogZ2V0IGEgZnJlc2ggbmV3IGNoYW5uZWwgZnJvbSB0aGUgc3NoIGxheWVyICovCisgICAgICBzc2hjLT5zc2hfY2hhbm5lbCA9IGxpYnNzaDJfc2NwX3JlY3Yoc3NoYy0+c3NoX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgsICZzYik7CisgICAgICBpZighc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgaWYobGlic3NoMl9zZXNzaW9uX2xhc3RfZXJybm8oc3NoYy0+c3NoX3Nlc3Npb24pID09CisgICAgICAgICAgIExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgcmMgPSBMSUJTU0gyX0VSUk9SX0VBR0FJTjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBpbnQgc3NoX2VycjsKKyAgICAgICAgICBjaGFyICplcnJfbXNnOworCisgICAgICAgICAgc3NoX2VyciA9IChpbnQpKGxpYnNzaDJfc2Vzc2lvbl9sYXN0X2Vycm9yKHNzaGMtPnNzaF9zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyX21zZywgTlVMTCwgMCkpOworICAgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICIlcyIsIGVycl9tc2cpOworICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gbGlic3NoMl9zZXNzaW9uX2Vycm9yX3RvX0NVUkxFKHNzaF9lcnIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIGRvd25sb2FkIGRhdGEgKi8KKyAgICAgIGJ5dGVjb3VudCA9IChjdXJsX29mZl90KXNiLnN0X3NpemU7CisgICAgICBkYXRhLT5yZXEubWF4ZG93bmxvYWQgPSAgKGN1cmxfb2ZmX3Qpc2Iuc3Rfc2l6ZTsKKyAgICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIGJ5dGVjb3VudCwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKworICAgICAgLyogbm90IHNldCBieSBDdXJsX3NldHVwX3RyYW5zZmVyIHRvIHByZXNlcnZlIGtlZXBvbiBiaXRzICovCisgICAgICBjb25uLT53cml0ZXNvY2tmZCA9IGNvbm4tPnNvY2tmZDsKKworICAgICAgLyogd2Ugd2FudCB0byB1c2UgdGhlIF9yZWNlaXZpbmdfIGZ1bmN0aW9uIGV2ZW4gd2hlbiB0aGUgc29ja2V0IHR1cm5zCisgICAgICAgICBvdXQgd3JpdGFibGVhYmxlIGFzIHRoZSB1bmRlcmx5aW5nIGxpYnNzaDIgcmVjdiBmdW5jdGlvbiB3aWxsIGRlYWwKKyAgICAgICAgIHdpdGggYm90aCBhY2NvcmRpbmdseSAqLworICAgICAgY29ubi0+Y3NlbGVjdF9iaXRzID0gQ1VSTF9DU0VMRUNUX0lOOworCisgICAgICBpZihyZXN1bHQpIHsKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOworICAgICAgICBzc2hjLT5hY3R1YWxjb2RlID0gcmVzdWx0OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgfQorICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX0RPTkU6CisgICAgICBpZihkYXRhLT5zZXQudXBsb2FkKQorICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0NQX1NFTkRfRU9GKTsKKyAgICAgIGVsc2UKKyAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9DSEFOTkVMX0ZSRUUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TQ1BfU0VORF9FT0Y6CisgICAgICBpZihzc2hjLT5zc2hfY2hhbm5lbCkgeworICAgICAgICByYyA9IGxpYnNzaDJfY2hhbm5lbF9zZW5kX2VvZihzc2hjLT5zc2hfY2hhbm5lbCk7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihyYykgeworICAgICAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gc2VuZCBsaWJzc2gyIGNoYW5uZWwgRU9GXG4iKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9XQUlUX0VPRik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NDUF9XQUlUX0VPRjoKKyAgICAgIGlmKHNzaGMtPnNzaF9jaGFubmVsKSB7CisgICAgICAgIHJjID0gbGlic3NoMl9jaGFubmVsX3dhaXRfZW9mKHNzaGMtPnNzaF9jaGFubmVsKTsKKyAgICAgICAgaWYocmMgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHJjKSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBnZXQgY2hhbm5lbCBFT0Y6ICVkXG4iLCByYyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfV0FJVF9DTE9TRSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NDUF9XQUlUX0NMT1NFOgorICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfd2FpdF9jbG9zZWQoc3NoYy0+c3NoX2NoYW5uZWwpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYocmMpIHsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiQ2hhbm5lbCBmYWlsZWQgdG8gY2xvc2U6ICVkXG4iLCByYyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU0hfU0NQX0NIQU5ORUxfRlJFRToKKyAgICAgIGlmKHNzaGMtPnNzaF9jaGFubmVsKSB7CisgICAgICAgIHJjID0gbGlic3NoMl9jaGFubmVsX2ZyZWUoc3NoYy0+c3NoX2NoYW5uZWwpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYocmMgPCAwKSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBmcmVlIGxpYnNzaDIgc2NwIHN1YnN5c3RlbVxuIik7CisgICAgICAgIH0KKyAgICAgICAgc3NoYy0+c3NoX2NoYW5uZWwgPSBOVUxMOworICAgICAgfQorICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJTQ1AgRE9ORSBwaGFzZSBjb21wbGV0ZVxuIikpOworI2lmIDAgLyogUFJFViAqLworICAgICAgc3RhdGUoY29ubiwgU1NIX1NFU1NJT05fRElTQ09OTkVDVCk7CisjZW5kaWYKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TVE9QKTsKKyAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1NFU1NJT05fRElTQ09OTkVDVDoKKyAgICAgIC8qIGR1cmluZyB3ZWlyZCB0aW1lcyB3aGVuIHdlJ3ZlIGJlZW4gcHJlbWF0dXJlbHkgYWJvcnRlZCwgdGhlIGNoYW5uZWwKKyAgICAgICAgIGlzIHN0aWxsIGFsaXZlIHdoZW4gd2UgcmVhY2ggdGhpcyBzdGF0ZSBhbmQgd2UgTVVTVCBraWxsIHRoZSBjaGFubmVsCisgICAgICAgICBwcm9wZXJseSBmaXJzdCAqLworICAgICAgaWYoc3NoYy0+c3NoX2NoYW5uZWwpIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfZnJlZShzc2hjLT5zc2hfY2hhbm5lbCk7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihyYyA8IDApIHsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGZyZWUgbGlic3NoMiBzY3Agc3Vic3lzdGVtXG4iKTsKKyAgICAgICAgfQorICAgICAgICBzc2hjLT5zc2hfY2hhbm5lbCA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIGlmKHNzaGMtPnNzaF9zZXNzaW9uKSB7CisgICAgICAgIHJjID0gbGlic3NoMl9zZXNzaW9uX2Rpc2Nvbm5lY3Qoc3NoYy0+c3NoX3Nlc3Npb24sICJTaHV0ZG93biIpOworICAgICAgICBpZihyYyA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYocmMgPCAwKSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBkaXNjb25uZWN0IGxpYnNzaDIgc2Vzc2lvblxuIik7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5ob21lZGlyKTsKKyAgICAgIHNzaGMtPmhvbWVkaXIgPSBOVUxMOworICAgICAgY29ubi0+ZGF0YS0+c3RhdGUubW9zdF9yZWNlbnRfZnRwX2VudHJ5cGF0aCA9IE5VTEw7CisKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0ZSRUUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNTSF9TRVNTSU9OX0ZSRUU6CisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKKyAgICAgIGlmKHNzaGMtPmtoKSB7CisgICAgICAgIGxpYnNzaDJfa25vd25ob3N0X2ZyZWUoc3NoYy0+a2gpOworICAgICAgICBzc2hjLT5raCA9IE5VTEw7CisgICAgICB9CisjZW5kaWYKKworICAgICAgaWYoc3NoYy0+c3NoX3Nlc3Npb24pIHsKKyAgICAgICAgcmMgPSBsaWJzc2gyX3Nlc3Npb25fZnJlZShzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICAgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihyYyA8IDApIHsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGZyZWUgbGlic3NoMiBzZXNzaW9uXG4iKTsKKyAgICAgICAgfQorICAgICAgICBzc2hjLT5zc2hfc2Vzc2lvbiA9IE5VTEw7CisgICAgICB9CisKKyAgICAgIC8qIHdvcnN0LWNhc2Ugc2NlbmFyaW8gY2xlYW51cCAqLworCisgICAgICBERUJVR0FTU0VSVChzc2hjLT5zc2hfc2Vzc2lvbiA9PSBOVUxMKTsKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPnNzaF9jaGFubmVsID09IE5VTEwpOworICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c2Z0cF9zZXNzaW9uID09IE5VTEwpOworICAgICAgREVCVUdBU1NFUlQoc3NoYy0+c2Z0cF9oYW5kbGUgPT0gTlVMTCk7CisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKKyAgICAgIERFQlVHQVNTRVJUKHNzaGMtPmtoID09IE5VTEwpOworI2VuZGlmCisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cnNhX3B1Yik7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJzYSk7CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cXVvdGVfcGF0aDEpOworICAgICAgQ3VybF9zYWZlZnJlZShzc2hjLT5xdW90ZV9wYXRoMik7CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+aG9tZWRpcik7CisKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbG9uZ2VudHJ5KTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5lKTsKKyAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9saW5rUGF0aCk7CisKKyAgICAgIC8qIHRoZSBjb2RlIHdlIGFyZSBhYm91dCB0byByZXR1cm4gKi8KKyAgICAgIHJlc3VsdCA9IHNzaGMtPmFjdHVhbGNvZGU7CisKKyAgICAgIG1lbXNldChzc2hjLCAwLCBzaXplb2Yoc3RydWN0IHNzaF9jb25uKSk7CisKKyAgICAgIGNvbm4tPmJpdHMuY2xvc2UgPSBUUlVFOworICAgICAgc3NoYy0+c3RhdGUgPSBTU0hfU0VTU0lPTl9GUkVFOyAvKiBjdXJyZW50ICovCisgICAgICBzc2hjLT5uZXh0c3RhdGUgPSBTU0hfTk9fU1RBVEU7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU1RPUCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NIX1FVSVQ6CisgICAgICAvKiBmYWxsdGhyb3VnaCwganVzdCBzdG9wISAqLworICAgIGRlZmF1bHQ6CisgICAgICAvKiBpbnRlcm5hbCBlcnJvciAqLworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX05PX1NUQVRFOworICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOworICAgICAgYnJlYWs7CisgICAgfQorCisgIH0gd2hpbGUoIXJjICYmIChzc2hjLT5zdGF0ZSAhPSBTU0hfU1RPUCkpOworCisgIGlmKHJjID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgLyogd2Ugd291bGQgYmxvY2ssIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHNvY2tldCB0byBiZSByZWFkeSAoaW4gdGhlCisgICAgICAgcmlnaHQgZGlyZWN0aW9uIHRvbykhICovCisgICAgKmJsb2NrID0gVFJVRTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGNhbGxlZCBieSB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIGZpZ3VyZSBvdXQgd2hhdCBzb2NrZXQocykgdG8gd2FpdCBmb3IgYW5kCisgICBmb3Igd2hhdCBhY3Rpb25zIGluIHRoZSBET19ET05FLCBQRVJGT1JNIGFuZCBXQUlUUEVSRk9STSBzdGF0ZXMgKi8KK3N0YXRpYyBpbnQgc3NoX3BlcmZvcm1fZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29jaywgLyogcG9pbnRzIHRvIG51bXNvY2tzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNvY2tldHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCit7CisjaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCisgIGludCBiaXRtYXAgPSBHRVRTT0NLX0JMQU5LOworICAodm9pZCludW1zb2NrczsKKworICBzb2NrWzBdID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisKKyAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfUkVDVikKKyAgICBiaXRtYXAgfD0gR0VUU09DS19SRUFEU09DSyhGSVJTVFNPQ0tFVCk7CisKKyAgaWYoY29ubi0+d2FpdGZvciAmIEtFRVBfU0VORCkKKyAgICBiaXRtYXAgfD0gR0VUU09DS19XUklURVNPQ0soRklSU1RTT0NLRVQpOworCisgIHJldHVybiBiaXRtYXA7CisjZWxzZQorICAvKiBpZiB3ZSBkb24ndCBrbm93IHRoZSBkaXJlY3Rpb24gd2UgY2FuIHVzZSB0aGUgZ2VuZXJpYyAqX2dldHNvY2soKQorICAgICBmdW5jdGlvbiBldmVuIGZvciB0aGUgcHJvdG9jb2xfY29ubmVjdCBhbmQgZG9pbmcgc3RhdGVzICovCisgIHJldHVybiBDdXJsX3NpbmdsZV9nZXRzb2NrKGNvbm4sIHNvY2ssIG51bXNvY2tzKTsKKyNlbmRpZgorfQorCisvKiBHZW5lcmljIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIGZpZ3VyZSBvdXQgd2hhdCBzb2NrZXQocykKKyAgIHRvIHdhaXQgZm9yIGFuZCBmb3Igd2hhdCBhY3Rpb25zIGR1cmluZyB0aGUgRE9JTkcgYW5kIFBST1RPQ09OTkVDVCBzdGF0ZXMqLworc3RhdGljIGludCBzc2hfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2ssIC8qIHBvaW50cyB0byBudW1zb2NrcyBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Ygc29ja2V0cyAqLworICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCit7CisjaWZuZGVmIEhBVkVfTElCU1NIMl9TRVNTSU9OX0JMT0NLX0RJUkVDVElPTgorICAodm9pZCljb25uOworICAodm9pZClzb2NrOworICAodm9pZCludW1zb2NrczsKKyAgLyogaWYgd2UgZG9uJ3Qga25vdyBhbnkgZGlyZWN0aW9uIHdlIGNhbiBqdXN0IHBsYXkgYWxvbmcgYXMgd2UgdXNlZCB0byBhbmQKKyAgICAgbm90IHByb3ZpZGUgYW55IHNlbnNpYmxlIGluZm8gKi8KKyAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7CisjZWxzZQorICAvKiBpZiB3ZSBrbm93IHRoZSBkaXJlY3Rpb24gd2UgY2FuIHVzZSB0aGUgZ2VuZXJpYyAqX2dldHNvY2soKSBmdW5jdGlvbiBldmVuCisgICAgIGZvciB0aGUgcHJvdG9jb2xfY29ubmVjdCBhbmQgZG9pbmcgc3RhdGVzICovCisgIHJldHVybiBzc2hfcGVyZm9ybV9nZXRzb2NrKGNvbm4sIHNvY2ssIG51bXNvY2tzKTsKKyNlbmRpZgorfQorCisjaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCisvKgorICogV2hlbiBvbmUgb2YgdGhlIGxpYnNzaDIgZnVuY3Rpb25zIGhhcyByZXR1cm5lZCBMSUJTU0gyX0VSUk9SX0VBR0FJTiB0aGlzCisgKiBmdW5jdGlvbiBpcyB1c2VkIHRvIGZpZ3VyZSBvdXQgaW4gd2hhdCBkaXJlY3Rpb24gYW5kIHN0b3JlcyB0aGlzIGluZm8gc28KKyAqIHRoYXQgdGhlIG11bHRpIGludGVyZmFjZSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQuIE1ha2Ugc3VyZSB0byBjYWxsIHRoaXMKKyAqIGZ1bmN0aW9uIGluIGFsbCBjYXNlcyBzbyB0aGF0IHdoZW4gaXQgX2RvZXNuJ3RfIHJldHVybiBFQUdBSU4gd2UgY2FuCisgKiByZXN0b3JlIHRoZSBkZWZhdWx0IHdhaXQgYml0cy4KKyAqLworc3RhdGljIHZvaWQgc3NoX2Jsb2NrMndhaXRmb3Ioc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGJsb2NrKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgaW50IGRpcjsKKyAgaWYoIWJsb2NrKQorICAgIGNvbm4tPndhaXRmb3IgPSAwOworICBlbHNlIGlmKChkaXIgPSBsaWJzc2gyX3Nlc3Npb25fYmxvY2tfZGlyZWN0aW9ucyhzc2hjLT5zc2hfc2Vzc2lvbikpKSB7CisgICAgLyogdHJhbnNsYXRlIHRoZSBsaWJzc2gyIGRlZmluZSBiaXRzIGludG8gb3VyIG93biBiaXQgZGVmaW5lcyAqLworICAgIGNvbm4tPndhaXRmb3IgPSAoKGRpciZMSUJTU0gyX1NFU1NJT05fQkxPQ0tfSU5CT1VORCk/S0VFUF9SRUNWOjApIHwKKyAgICAgICgoZGlyJkxJQlNTSDJfU0VTU0lPTl9CTE9DS19PVVRCT1VORCk/S0VFUF9TRU5EOjApOworICB9CisgIGVsc2UKKyAgICAvKiBJdCBkaWRuJ3QgYmxvY2sgb3IgbGlic3NoMiBkaWRuJ3QgcmV2ZWFsIGluIHdoaWNoIGRpcmVjdGlvbiwgcHV0IGJhY2sKKyAgICAgICB0aGUgb3JpZ2luYWwgc2V0ICovCisgICAgY29ubi0+d2FpdGZvciA9IHNzaGMtPm9yaWdfd2FpdGZvcjsKK30KKyNlbHNlCisgIC8qIG5vIGxpYnNzaDIgZGlyZWN0aW9uYWwgc3VwcG9ydCBzbyB3ZSBzaW1wbHkgZG9uJ3Qga25vdyAqLworI2RlZmluZSBzc2hfYmxvY2syd2FpdGZvcih4LHkpIEN1cmxfbm9wX3N0bXQKKyNlbmRpZgorCisvKiBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBkb25lIGZyb20gbXVsdGkuYyAqLworc3RhdGljIENVUkxjb2RlIHNzaF9tdWx0aV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBzdHJ1Y3Qgc3NoX2Nvbm4gKnNzaGMgPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIGJvb2wgYmxvY2s7IC8qIHdlIHN0b3JlIHRoZSBzdGF0dXMgYW5kIHVzZSB0aGF0IHRvIHByb3ZpZGUgYSBzc2hfZ2V0c29jaygpCisgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uICovCisKKyAgcmVzdWx0ID0gc3NoX3N0YXRlbWFjaF9hY3QoY29ubiwgJmJsb2NrKTsKKyAgKmRvbmUgPSAoc3NoYy0+c3RhdGUgPT0gU1NIX1NUT1ApID8gVFJVRSA6IEZBTFNFOworICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCBibG9jayk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENVUkxjb2RlIHNzaF9lYXN5X3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZHVyaW5nY29ubmVjdCkKK3sKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgd2hpbGUoKHNzaGMtPnN0YXRlICE9IFNTSF9TVE9QKSAmJiAhcmVzdWx0KSB7CisgICAgYm9vbCBibG9jazsKKyAgICBsb25nIGxlZnQ7CisKKyAgICByZXN1bHQgPSBzc2hfc3RhdGVtYWNoX2FjdChjb25uLCAmYmxvY2spOworICAgIGlmKHJlc3VsdCkKKyAgICAgIGJyZWFrOworCisgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKQorICAgICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisgICAgZWxzZSB7CisgICAgICBzdHJ1Y3QgdGltZXZhbCBub3cgPSBDdXJsX3R2bm93KCk7CisgICAgICByZXN1bHQgPSBDdXJsX3NwZWVkY2hlY2soZGF0YSwgbm93KTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbGVmdCA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgZHVyaW5nY29ubmVjdCk7CisgICAgaWYobGVmdCA8IDApIHsKKyAgICAgIGZhaWxmKGRhdGEsICJPcGVyYXRpb24gdGltZWQgb3V0XG4iKTsKKyAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgfQorCisjaWZkZWYgSEFWRV9MSUJTU0gyX1NFU1NJT05fQkxPQ0tfRElSRUNUSU9OCisgICAgaWYoKENVUkxFX09LID09IHJlc3VsdCkgJiYgYmxvY2spIHsKKyAgICAgIGludCBkaXIgPSBsaWJzc2gyX3Nlc3Npb25fYmxvY2tfZGlyZWN0aW9ucyhzc2hjLT5zc2hfc2Vzc2lvbik7CisgICAgICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgICAgIGN1cmxfc29ja2V0X3QgZmRfcmVhZCA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgIGN1cmxfc29ja2V0X3QgZmRfd3JpdGUgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgICBpZihMSUJTU0gyX1NFU1NJT05fQkxPQ0tfSU5CT1VORCAmIGRpcikKKyAgICAgICAgZmRfcmVhZCA9IHNvY2s7CisgICAgICBpZihMSUJTU0gyX1NFU1NJT05fQkxPQ0tfT1VUQk9VTkQgJiBkaXIpCisgICAgICAgIGZkX3dyaXRlID0gc29jazsKKyAgICAgIC8qIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmVjb21lIHJlYWR5ICovCisgICAgICBDdXJsX3NvY2tldF9yZWFkeShmZF9yZWFkLCBmZF93cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ+MTAwMD8xMDAwOmxlZnQpOyAvKiBpZ25vcmUgcmVzdWx0ICovCisgICAgfQorI2VuZGlmCisKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTU0ggc2V0dXAgYW5kIGNvbm5lY3Rpb24KKyAqLworc3RhdGljIENVUkxjb2RlIHNzaF9pbml0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgU1NIUFJPVE8gKnNzaDsKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisKKyAgc3NoYy0+YWN0dWFsY29kZSA9IENVUkxFX09LOyAvKiByZXNldCBlcnJvciBjb2RlICovCisgIHNzaGMtPnNlY29uZENyZWF0ZURpcnMgPTA7ICAgLyogcmVzZXQgdGhlIGNyZWF0ZSBkaXIgYXR0ZW1wdCBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlICovCisKKyAgaWYoZGF0YS0+c3RhdGUucHJvdG8uc3NoKQorICAgIHJldHVybiBDVVJMRV9PSzsKKworICBzc2ggPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBTU0hQUk9UTykpOworICBpZighc3NoKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIGRhdGEtPnN0YXRlLnByb3RvLnNzaCA9IHNzaDsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBDdXJsX3JlY3Ygc2NwX3JlY3YsIHNmdHBfcmVjdjsKK3N0YXRpYyBDdXJsX3NlbmQgc2NwX3NlbmQsIHNmdHBfc2VuZDsKKworLyoKKyAqIEN1cmxfc3NoX2Nvbm5lY3QoKSBnZXRzIGNhbGxlZCBmcm9tIEN1cmxfcHJvdG9jb2xfY29ubmVjdCgpIHRvIGFsbG93IHVzIHRvCisgKiBkbyBwcm90b2NvbC1zcGVjaWZpYyBhY3Rpb25zIGF0IGNvbm5lY3QtdGltZS4KKyAqLworc3RhdGljIENVUkxjb2RlIHNzaF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyNpZmRlZiBDVVJMX0xJQlNTSDJfREVCVUcKKyAgY3VybF9zb2NrZXRfdCBzb2NrOworI2VuZGlmCisgIHN0cnVjdCBzc2hfY29ubiAqc3NoOworICBDVVJMY29kZSByZXN1bHQ7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICAvKiBXZSBkZWZhdWx0IHRvIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuIFdlIHNldCB0aGlzIGFscmVhZHkgaW4gdGhpcyBjb25uZWN0CisgICAgIGZ1bmN0aW9uIHRvIG1ha2UgdGhlIHJlLXVzZSBjaGVja3MgcHJvcGVybHkgYmUgYWJsZSB0byBjaGVjayB0aGlzIGJpdC4gKi8KKyAgY29ubi0+Yml0cy5jbG9zZSA9IEZBTFNFOworCisgIC8qIElmIHRoZXJlIGFscmVhZHkgaXMgYSBwcm90b2NvbC1zcGVjaWZpYyBzdHJ1Y3QgYWxsb2NhdGVkIGZvciB0aGlzCisgICAgIHNlc3Npb25oYW5kbGUsIGRlYWwgd2l0aCBpdCAqLworICBDdXJsX3Jlc2V0X3JlcXByb3RvKGNvbm4pOworCisgIHJlc3VsdCA9IHNzaF9pbml0KGNvbm4pOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBpZihjb25uLT5oYW5kbGVyLT5wcm90b2NvbCAmIENVUkxQUk9UT19TQ1ApIHsKKyAgICBjb25uLT5yZWN2W0ZJUlNUU09DS0VUXSA9IHNjcF9yZWN2OworICAgIGNvbm4tPnNlbmRbRklSU1RTT0NLRVRdID0gc2NwX3NlbmQ7CisgIH0KKyAgZWxzZSB7CisgICAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBzZnRwX3JlY3Y7CisgICAgY29ubi0+c2VuZFtGSVJTVFNPQ0tFVF0gPSBzZnRwX3NlbmQ7CisgIH0KKyAgc3NoID0gJmNvbm4tPnByb3RvLnNzaGM7CisKKyNpZmRlZiBDVVJMX0xJQlNTSDJfREVCVUcKKyAgaWYoY29ubi0+dXNlcikgeworICAgIGluZm9mKGRhdGEsICJVc2VyOiAlc1xuIiwgY29ubi0+dXNlcik7CisgIH0KKyAgaWYoY29ubi0+cGFzc3dkKSB7CisgICAgaW5mb2YoZGF0YSwgIlBhc3N3b3JkOiAlc1xuIiwgY29ubi0+cGFzc3dkKTsKKyAgfQorICBzb2NrID0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisjZW5kaWYgLyogQ1VSTF9MSUJTU0gyX0RFQlVHICovCisKKyAgc3NoLT5zc2hfc2Vzc2lvbiA9IGxpYnNzaDJfc2Vzc2lvbl9pbml0X2V4KG15X2xpYnNzaDJfbWFsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfbGlic3NoMl9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfbGlic3NoMl9yZWFsbG9jLCBjb25uKTsKKyAgaWYoc3NoLT5zc2hfc2Vzc2lvbiA9PSBOVUxMKSB7CisgICAgZmFpbGYoZGF0YSwgIkZhaWx1cmUgaW5pdGlhbGlzaW5nIHNzaCBzZXNzaW9uIik7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisKKyNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSQorICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10pIHsKKyAgICBpbnQgcmM7CisgICAgc3NoLT5raCA9IGxpYnNzaDJfa25vd25ob3N0X2luaXQoc3NoLT5zc2hfc2Vzc2lvbik7CisgICAgaWYoIXNzaC0+a2gpIHsKKyAgICAgIC8qIGVlZWsuIFRPRE86IGZyZWUgdGhlIHNzaF9zZXNzaW9uISAqLworICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgIH0KKworICAgIC8qIHJlYWQgYWxsIGtub3duIGhvc3RzIGZyb20gdGhlcmUgKi8KKyAgICByYyA9IGxpYnNzaDJfa25vd25ob3N0X3JlYWRmaWxlKHNzaC0+a2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfS05PV05IT1NUU10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJTU0gyX0tOT1dOSE9TVF9GSUxFX09QRU5TU0gpOworICAgIGlmKHJjIDwgMCkKKyAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gcmVhZCBrbm93biBob3N0cyBmcm9tICVzXG4iLAorICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NIX0tOT1dOSE9TVFNdKTsKKyAgfQorI2VuZGlmIC8qIEhBVkVfTElCU1NIMl9LTk9XTkhPU1RfQVBJICovCisKKyNpZmRlZiBDVVJMX0xJQlNTSDJfREVCVUcKKyAgbGlic3NoMl90cmFjZShzc2gtPnNzaF9zZXNzaW9uLCB+MCk7CisgIGluZm9mKGRhdGEsICJTU0ggc29ja2V0OiAlZFxuIiwgKGludClzb2NrKTsKKyNlbmRpZiAvKiBDVVJMX0xJQlNTSDJfREVCVUcgKi8KKworICBzdGF0ZShjb25uLCBTU0hfSU5JVCk7CisKKyAgaWYoZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgPT0gQ3VybF9pZl9tdWx0aSkKKyAgICByZXN1bHQgPSBzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvbmUpOworICBlbHNlIHsKKyAgICByZXN1bHQgPSBzc2hfZWFzeV9zdGF0ZW1hY2goY29ubiwgVFJVRSk7CisgICAgaWYoIXJlc3VsdCkKKyAgICAgICpkb25lID0gVFJVRTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzY3BfcGVyZm9ybSgpCisgKgorICogVGhpcyBpcyB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIGZvciBTQ1AuIEdldCBhIGZpbGUgYWNjb3JkaW5nIHRvCisgKiB0aGUgb3B0aW9ucyBwcmV2aW91c2x5IHNldHVwLgorICovCisKK3N0YXRpYworQ1VSTGNvZGUgc2NwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7CisKKyAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAvKiBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KKyAgc3RhdGUoY29ubiwgU1NIX1NDUF9UUkFOU19JTklUKTsKKworICAvKiBydW4gdGhlIHN0YXRlLW1hY2hpbmUgKi8KKyAgaWYoY29ubi0+ZGF0YS0+c3RhdGUudXNlZF9pbnRlcmZhY2UgPT0gQ3VybF9pZl9tdWx0aSkgeworICAgIHJlc3VsdCA9IHNzaF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKKyAgfQorICBlbHNlIHsKKyAgICByZXN1bHQgPSBzc2hfZWFzeV9zdGF0ZW1hY2goY29ubiwgRkFMU0UpOworICAgICpkb3BoYXNlX2RvbmUgPSBUUlVFOyAvKiB3aXRoIHRoZSBlYXN5IGludGVyZmFjZSB3ZSBhcmUgZG9uZSBoZXJlICovCisgIH0KKyAgKmNvbm5lY3RlZCA9IGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF07CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGNhbGxlZCBmcm9tIG11bHRpLmMgd2hpbGUgRE9pbmcgKi8KK3N0YXRpYyBDVVJMY29kZSBzY3BfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICByZXN1bHQgPSBzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogVGhlIERPIGZ1bmN0aW9uIGlzIGdlbmVyaWMgZm9yIGJvdGggcHJvdG9jb2xzLiBUaGVyZSB3YXMgcHJldmlvdXNseSB0d28KKyAqIHNlcGFyYXRlIG9uZXMgYnV0IHRoaXMgd2F5IG1lYW5zIGxlc3MgZHVwbGljYXRlZCBjb2RlLgorICovCisKK3N0YXRpYyBDVVJMY29kZSBzc2hfZG8oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXM7CisgIGJvb2wgY29ubmVjdGVkID0gMDsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworCisgICpkb25lID0gRkFMU0U7IC8qIGRlZmF1bHQgdG8gZmFsc2UgKi8KKworICAvKgorICAgIFNpbmNlIGNvbm5lY3Rpb25zIGNhbiBiZSByZS11c2VkIGJldHdlZW4gU2Vzc2lvbkhhbmRsZXMsIHRoaXMgbWlnaHQgYmUgYQorICAgIGNvbm5lY3Rpb24gYWxyZWFkeSBleGlzdGluZyBidXQgb24gYSBmcmVzaCBTZXNzaW9uSGFuZGxlIHN0cnVjdCBzbyB3ZSBtdXN0CisgICAgbWFrZSBzdXJlIHdlIGhhdmUgYSBnb29kICdzdHJ1Y3QgU1NIUFJPVE8nIHRvIHBsYXkgd2l0aC4gRm9yIG5ldworICAgIGNvbm5lY3Rpb25zLCB0aGUgc3RydWN0IFNTSFBST1RPIGlzIGFsbG9jYXRlZCBhbmQgc2V0dXAgaW4gdGhlCisgICAgc3NoX2Nvbm5lY3QoKSBmdW5jdGlvbi4KKyAgKi8KKyAgQ3VybF9yZXNldF9yZXFwcm90byhjb25uKTsKKyAgcmVzID0gc3NoX2luaXQoY29ubik7CisgIGlmKHJlcykKKyAgICByZXR1cm4gcmVzOworCisgIGRhdGEtPnJlcS5zaXplID0gLTE7IC8qIG1ha2Ugc3VyZSB0aGlzIGlzIHVua25vd24gYXQgdGhpcyBwb2ludCAqLworCisgIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgMCk7CisgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCAwKTsKKyAgQ3VybF9wZ3JzU2V0VXBsb2FkU2l6ZShkYXRhLCAwKTsKKyAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIDApOworCisgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkKKyAgICByZXMgPSBzY3BfcGVyZm9ybShjb25uLCAmY29ubmVjdGVkLCAgZG9uZSk7CisgIGVsc2UKKyAgICByZXMgPSBzZnRwX3BlcmZvcm0oY29ubiwgJmNvbm5lY3RlZCwgIGRvbmUpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qIEJMT0NLSU5HLCBidXQgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBzdGF0ZSBtYWNoaW5lIHNvIHRoZSBvbmx5IHJlYXNvbgorICAgdGhpcyBpcyBzdGlsbCBibG9ja2luZyBpcyB0aGF0IHRoZSBtdWx0aSBpbnRlcmZhY2UgY29kZSBoYXMgbm8gc3VwcG9ydCBmb3IKKyAgIGRpc2Nvbm5lY3Rpbmcgb3BlcmF0aW9ucyB0aGF0IHRha2VzIGEgd2hpbGUgKi8KK3N0YXRpYyBDVVJMY29kZSBzY3BfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IHNzaF9jb25uICpzc2ggPSAmY29ubi0+cHJvdG8uc3NoYzsKKyAgKHZvaWQpIGRlYWRfY29ubmVjdGlvbjsKKworICBDdXJsX3NhZmVmcmVlKGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLnNzaCk7CisgIGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLnNzaCA9IE5VTEw7CisKKyAgaWYoc3NoLT5zc2hfc2Vzc2lvbikgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KKworICAgIHN0YXRlKGNvbm4sIFNTSF9TRVNTSU9OX0RJU0NPTk5FQ1QpOworCisgICAgcmVzdWx0ID0gc3NoX2Vhc3lfc3RhdGVtYWNoKGNvbm4sIEZBTFNFKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGdlbmVyaWMgZG9uZSBmdW5jdGlvbiBmb3IgYm90aCBTQ1AgYW5kIFNGVFAgY2FsbGVkIGZyb20gdGhlaXIgc3BlY2lmaWMKKyAgIGRvbmUgZnVuY3Rpb25zICovCitzdGF0aWMgQ1VSTGNvZGUgc3NoX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU1NIUFJPVE8gKnNmdHBfc2NwID0gY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8uc3NoOworCisgIGlmKHN0YXR1cyA9PSBDVVJMRV9PSykgeworICAgIC8qIHJ1biB0aGUgc3RhdGUtbWFjaGluZQorCisgICAgICAgVE9ETzogd2hlbiB0aGUgbXVsdGkgaW50ZXJmYWNlIGlzIHVzZWQsIHRoaXMgX3JlYWxseV8gc2hvdWxkIGJlIHVzaW5nCisgICAgICAgdGhlIHNzaF9tdWx0aV9zdGF0ZW1hY2ggZnVuY3Rpb24gYnV0IHdlIGhhdmUgbm8gZ2VuZXJhbCBzdXBwb3J0IGZvcgorICAgICAgIG5vbi1ibG9ja2luZyBET05FIG9wZXJhdGlvbnMsIG5vdCBpbiB0aGUgbXVsdGkgc3RhdGUgbWFjaGluZSBhbmQgd2l0aAorICAgICAgIEN1cmxfZG9uZSgpIGludm9rZXMgb24gc2V2ZXJhbCBwbGFjZXMgaW4gdGhlIGNvZGUhCisgICAgKi8KKyAgICByZXN1bHQgPSBzc2hfZWFzeV9zdGF0ZW1hY2goY29ubiwgRkFMU0UpOworICB9CisgIGVsc2UKKyAgICByZXN1bHQgPSBzdGF0dXM7CisKKyAgaWYoc2Z0cF9zY3ApIHsKKyAgICBDdXJsX3NhZmVmcmVlKHNmdHBfc2NwLT5wYXRoKTsKKyAgICBzZnRwX3NjcC0+cGF0aCA9IE5VTEw7CisgIH0KKyAgQ3VybF9wZ3JzRG9uZShjb25uKTsKKworICBjb25uLT5kYXRhLT5yZXEua2VlcG9uID0gMDsgLyogY2xlYXIgYWxsIGJpdHMgKi8KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgQ1VSTGNvZGUgc2NwX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBDVVJMY29kZSBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCit7CisgICh2b2lkKXByZW1hdHVyZTsgLyogbm90IHVzZWQgKi8KKworICBpZihzdGF0dXMgPT0gQ1VSTEVfT0spCisgICAgc3RhdGUoY29ubiwgU1NIX1NDUF9ET05FKTsKKworICByZXR1cm4gc3NoX2RvbmUoY29ubiwgc3RhdHVzKTsKKworfQorCisvKiByZXR1cm4gbnVtYmVyIG9mIHJlY2VpdmVkIChkZWNyeXB0ZWQpIGJ5dGVzICovCitzdGF0aWMgc3NpemVfdCBzY3Bfc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCit7CisgIHNzaXplX3QgbndyaXRlOworICAodm9pZClzb2NraW5kZXg7IC8qIHdlIG9ubHkgc3VwcG9ydCBTQ1Agb24gdGhlIGZpeGVkIGtub3duIHByaW1hcnkgc29ja2V0ICovCisKKyAgLyogbGlic3NoMl9jaGFubmVsX3dyaXRlKCkgcmV0dXJucyBpbnQhICovCisgIG53cml0ZSA9IChzc2l6ZV90KQorICAgIGxpYnNzaDJfY2hhbm5lbF93cml0ZShjb25uLT5wcm90by5zc2hjLnNzaF9jaGFubmVsLCBtZW0sIGxlbik7CisKKyAgc3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG53cml0ZSA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CisKKyAgaWYobndyaXRlID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgKmVyciA9IENVUkxFX0FHQUlOOworICAgIG53cml0ZSA9IDA7CisgIH0KKworICByZXR1cm4gbndyaXRlOworfQorCisvKgorICogSWYgdGhlIHJlYWQgd291bGQgYmxvY2sgKEVXT1VMREJMT0NLKSB3ZSByZXR1cm4gLTEuIE90aGVyd2lzZSB3ZSByZXR1cm4KKyAqIGEgcmVndWxhciBDVVJMY29kZSB2YWx1ZS4KKyAqLworc3RhdGljIHNzaXplX3Qgc2NwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQoreworICBzc2l6ZV90IG5yZWFkOworICAodm9pZClzb2NraW5kZXg7IC8qIHdlIG9ubHkgc3VwcG9ydCBTQ1Agb24gdGhlIGZpeGVkIGtub3duIHByaW1hcnkgc29ja2V0ICovCisKKyAgLyogbGlic3NoMl9jaGFubmVsX3JlYWQoKSByZXR1cm5zIGludCAqLworICBucmVhZCA9IChzc2l6ZV90KQorICAgIGxpYnNzaDJfY2hhbm5lbF9yZWFkKGNvbm4tPnByb3RvLnNzaGMuc3NoX2NoYW5uZWwsIG1lbSwgbGVuKTsKKworICBzc2hfYmxvY2syd2FpdGZvcihjb25uLCAobnJlYWQgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pP1RSVUU6RkFMU0UpOworICBpZihucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTikgeworICAgICplcnIgPSBDVVJMRV9BR0FJTjsKKyAgICBucmVhZCA9IC0xOworICB9CisKKyAgcmV0dXJuIG5yZWFkOworfQorCisvKgorICogPT09PT09PT09PT09PT09IFNGVFAgPT09PT09PT09PT09PT09CisgKi8KKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNmdHBfcGVyZm9ybSgpCisgKgorICogVGhpcyBpcyB0aGUgYWN0dWFsIERPIGZ1bmN0aW9uIGZvciBTRlRQLiBHZXQgYSBmaWxlL2RpcmVjdG9yeSBhY2NvcmRpbmcgdG8KKyAqIHRoZSBvcHRpb25zIHByZXZpb3VzbHkgc2V0dXAuCisgKi8KKworc3RhdGljCitDVVJMY29kZSBzZnRwX3BlcmZvcm0oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2Ugc3RhcnRzXG4iKSk7CisKKyAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOyAvKiBub3QgZG9uZSB5ZXQgKi8KKworICAvKiBzdGFydCB0aGUgZmlyc3QgY29tbWFuZCBpbiB0aGUgRE8gcGhhc2UgKi8KKyAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfSU5JVCk7CisKKyAgLyogcnVuIHRoZSBzdGF0ZS1tYWNoaW5lICovCisgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID09IEN1cmxfaWZfbXVsdGkpIHsKKyAgICByZXN1bHQgPSBzc2hfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisgIH0KKyAgZWxzZSB7CisgICAgcmVzdWx0ID0gc3NoX2Vhc3lfc3RhdGVtYWNoKGNvbm4sIEZBTFNFKTsKKyAgICAqZG9waGFzZV9kb25lID0gVFJVRTsgLyogd2l0aCB0aGUgZWFzeSBpbnRlcmZhY2Ugd2UgYXJlIGRvbmUgaGVyZSAqLworICB9CisgICpjb25uZWN0ZWQgPSBjb25uLT5iaXRzLnRjcGNvbm5lY3RbRklSU1RTT0NLRVRdOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBjYWxsZWQgZnJvbSBtdWx0aS5jIHdoaWxlIERPaW5nICovCitzdGF0aWMgQ1VSTGNvZGUgc2Z0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb3BoYXNlX2RvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgcmVzdWx0ID0gc3NoX211bHRpX3N0YXRlbWFjaChjb25uLCBkb3BoYXNlX2RvbmUpOworCisgIGlmKCpkb3BoYXNlX2RvbmUpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQkxPQ0tJTkcsIGJ1dCB0aGUgZnVuY3Rpb24gaXMgdXNpbmcgdGhlIHN0YXRlIG1hY2hpbmUgc28gdGhlIG9ubHkgcmVhc29uCisgICB0aGlzIGlzIHN0aWxsIGJsb2NraW5nIGlzIHRoYXQgdGhlIG11bHRpIGludGVyZmFjZSBjb2RlIGhhcyBubyBzdXBwb3J0IGZvcgorICAgZGlzY29ubmVjdGluZyBvcGVyYXRpb25zIHRoYXQgdGFrZXMgYSB3aGlsZSAqLworc3RhdGljIENVUkxjb2RlIHNmdHBfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgZGVhZF9jb25uZWN0aW9uKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgKHZvaWQpIGRlYWRfY29ubmVjdGlvbjsKKworICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIlNTSCBESVNDT05ORUNUIHN0YXJ0cyBub3dcbiIpKTsKKworICBDdXJsX3NhZmVmcmVlKGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLnNzaCk7CisgIGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLnNzaCA9IE5VTEw7CisKKyAgaWYoY29ubi0+cHJvdG8uc3NoYy5zc2hfc2Vzc2lvbikgeworICAgIC8qIG9ubHkgaWYgdGhlcmUncyBhIHNlc3Npb24gc3RpbGwgYXJvdW5kIHRvIHVzZSEgKi8KKyAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9TSFVURE9XTik7CisgICAgcmVzdWx0ID0gc3NoX2Vhc3lfc3RhdGVtYWNoKGNvbm4sIEZBTFNFKTsKKyAgfQorCisgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiU1NIIERJU0NPTk5FQ1QgaXMgZG9uZVxuIikpOworCisgIHJldHVybiByZXN1bHQ7CisKK30KKworc3RhdGljIENVUkxjb2RlIHNmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW1hdHVyZSkKK3sKKyAgc3RydWN0IHNzaF9jb25uICpzc2hjID0gJmNvbm4tPnByb3RvLnNzaGM7CisKKyAgaWYoc3RhdHVzID09IENVUkxFX09LKSB7CisgICAgLyogUG9zdCBxdW90ZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIFNGVFBfQ0xPU0Ugc3RhdGUgdG8gYXZvaWQKKyAgICAgICBlcnJvcnMgdGhhdCBjb3VsZCBoYXBwZW4gZHVlIHRvIG9wZW4gZmlsZSBoYW5kbGVzIGR1cmluZyBQT1NUUVVPVEUKKyAgICAgICBvcGVyYXRpb24gKi8KKyAgICBpZighc3RhdHVzICYmICFwcmVtYXR1cmUgJiYgY29ubi0+ZGF0YS0+c2V0LnBvc3RxdW90ZSkgeworICAgICAgc3NoYy0+bmV4dHN0YXRlID0gU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQ7CisgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX0NMT1NFKTsKKyAgfQorICByZXR1cm4gc3NoX2RvbmUoY29ubiwgc3RhdHVzKTsKK30KKworLyogcmV0dXJuIG51bWJlciBvZiBzZW50IGJ5dGVzICovCitzdGF0aWMgc3NpemVfdCBzZnRwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBud3JpdGU7ICAgLyogbGlic3NoMl9zZnRwX3dyaXRlKCkgdXNlZCB0byByZXR1cm4gc2l6ZV90IGluIDAuMTQKKyAgICAgICAgICAgICAgICAgICAgICAgYnV0IGlzIGNoYW5nZWQgdG8gc3NpemVfdCBpbiAwLjE1LiBUaGVzZSBkYXlzIHdlIGRvbid0CisgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgbGlic3NoMiAwLjE1Ki8KKyAgKHZvaWQpc29ja2luZGV4OworCisgIG53cml0ZSA9IGxpYnNzaDJfc2Z0cF93cml0ZShjb25uLT5wcm90by5zc2hjLnNmdHBfaGFuZGxlLCBtZW0sIGxlbik7CisKKyAgc3NoX2Jsb2NrMndhaXRmb3IoY29ubiwgKG53cml0ZSA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CisKKyAgaWYobndyaXRlID09IExJQlNTSDJfRVJST1JfRUFHQUlOKSB7CisgICAgKmVyciA9IENVUkxFX0FHQUlOOworICAgIG53cml0ZSA9IDA7CisgIH0KKworICByZXR1cm4gbndyaXRlOworfQorCisvKgorICogUmV0dXJuIG51bWJlciBvZiByZWNlaXZlZCAoZGVjcnlwdGVkKSBieXRlcworICovCitzdGF0aWMgc3NpemVfdCBzZnRwX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKK3sKKyAgc3NpemVfdCBucmVhZDsKKyAgKHZvaWQpc29ja2luZGV4OworCisgIG5yZWFkID0gbGlic3NoMl9zZnRwX3JlYWQoY29ubi0+cHJvdG8uc3NoYy5zZnRwX2hhbmRsZSwgbWVtLCBsZW4pOworCisgIHNzaF9ibG9jazJ3YWl0Zm9yKGNvbm4sIChucmVhZCA9PSBMSUJTU0gyX0VSUk9SX0VBR0FJTik/VFJVRTpGQUxTRSk7CisKKyAgaWYobnJlYWQgPT0gTElCU1NIMl9FUlJPUl9FQUdBSU4pIHsKKyAgICAqZXJyID0gQ1VSTEVfQUdBSU47CisgICAgbnJlYWQgPSAtMTsKKyAgfQorICByZXR1cm4gbnJlYWQ7Cit9CisKKy8qIFRoZSBnZXRfcGF0aG5hbWUoKSBmdW5jdGlvbiBpcyBiZWluZyBib3Jyb3dlZCBmcm9tIE9wZW5TU0ggc2Z0cC5jCisgICB2ZXJzaW9uIDQuNnAxLiAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA0IERhbWllbiBNaWxsZXIgPGRqbUBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworc3RhdGljIENVUkxjb2RlCitnZXRfcGF0aG5hbWUoY29uc3QgY2hhciAqKmNwcCwgY2hhciAqKnBhdGgpCit7CisgIGNvbnN0IGNoYXIgKmNwID0gKmNwcCwgKmVuZDsKKyAgY2hhciBxdW90OworICB1bnNpZ25lZCBpbnQgaSwgajsKKyAgc3RhdGljIGNvbnN0IGNoYXIgV0hJVEVTUEFDRVtdID0gIiBcdFxyXG4iOworCisgIGNwICs9IHN0cnNwbihjcCwgV0hJVEVTUEFDRSk7CisgIGlmKCEqY3ApIHsKKyAgICAqY3BwID0gY3A7CisgICAgKnBhdGggPSBOVUxMOworICAgIHJldHVybiBDVVJMRV9RVU9URV9FUlJPUjsKKyAgfQorCisgICpwYXRoID0gbWFsbG9jKHN0cmxlbihjcCkgKyAxKTsKKyAgaWYoKnBhdGggPT0gTlVMTCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAvKiBDaGVjayBmb3IgcXVvdGVkIGZpbGVuYW1lcyAqLworICBpZigqY3AgPT0gJ1wiJyB8fCAqY3AgPT0gJ1wnJykgeworICAgIHF1b3QgPSAqY3ArKzsKKworICAgIC8qIFNlYXJjaCBmb3IgdGVybWluYXRpbmcgcXVvdGUsIHVuZXNjYXBlIHNvbWUgY2hhcnMgKi8KKyAgICBmb3IoaSA9IGogPSAwOyBpIDw9IHN0cmxlbihjcCk7IGkrKykgeworICAgICAgaWYoY3BbaV0gPT0gcXVvdCkgeyAgLyogRm91bmQgcXVvdGUgKi8KKyAgICAgICAgaSsrOworICAgICAgICAoKnBhdGgpW2pdID0gJ1wwJzsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihjcFtpXSA9PSAnXDAnKSB7ICAvKiBFbmQgb2Ygc3RyaW5nICovCisgICAgICAgIC8qZXJyb3IoIlVudGVybWluYXRlZCBxdW90ZSIpOyovCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKyAgICAgIGlmKGNwW2ldID09ICdcXCcpIHsgIC8qIEVzY2FwZWQgY2hhcmFjdGVycyAqLworICAgICAgICBpKys7CisgICAgICAgIGlmKGNwW2ldICE9ICdcJycgJiYgY3BbaV0gIT0gJ1wiJyAmJgorICAgICAgICAgICAgY3BbaV0gIT0gJ1xcJykgeworICAgICAgICAgIC8qZXJyb3IoIkJhZCBlc2NhcGVkIGNoYXJhY3RlciAnXFwlYyciLAorICAgICAgICAgICAgICBjcFtpXSk7Ki8KKyAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgICgqcGF0aClbaisrXSA9IGNwW2ldOworICAgIH0KKworICAgIGlmKGogPT0gMCkgeworICAgICAgLyplcnJvcigiRW1wdHkgcXVvdGVzIik7Ki8KKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgKmNwcCA9IGNwICsgaSArIHN0cnNwbihjcCArIGksIFdISVRFU1BBQ0UpOworICB9CisgIGVsc2UgeworICAgIC8qIFJlYWQgdG8gZW5kIG9mIGZpbGVuYW1lICovCisgICAgZW5kID0gc3RycGJyayhjcCwgV0hJVEVTUEFDRSk7CisgICAgaWYoZW5kID09IE5VTEwpCisgICAgICBlbmQgPSBzdHJjaHIoY3AsICdcMCcpOworICAgICpjcHAgPSBlbmQgKyBzdHJzcG4oZW5kLCBXSElURVNQQUNFKTsKKworICAgIG1lbWNweSgqcGF0aCwgY3AsIGVuZCAtIGNwKTsKKyAgICAoKnBhdGgpW2VuZCAtIGNwXSA9ICdcMCc7CisgIH0KKyAgcmV0dXJuIENVUkxFX09LOworCisgIGZhaWw6CisgICAgQ3VybF9zYWZlZnJlZSgqcGF0aCk7CisgICAgKnBhdGggPSBOVUxMOworICAgIHJldHVybiBDVVJMRV9RVU9URV9FUlJPUjsKK30KKworCitzdGF0aWMgY29uc3QgY2hhciAqc2Z0cF9saWJzc2gyX3N0cmVycm9yKHVuc2lnbmVkIGxvbmcgZXJyKQoreworICBzd2l0Y2ggKGVycikgeworICAgIGNhc2UgTElCU1NIMl9GWF9OT19TVUNIX0ZJTEU6CisgICAgICByZXR1cm4gIk5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX1BFUk1JU1NJT05fREVOSUVEOgorICAgICAgcmV0dXJuICJQZXJtaXNzaW9uIGRlbmllZCI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfRkFJTFVSRToKKyAgICAgIHJldHVybiAiT3BlcmF0aW9uIGZhaWxlZCI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfQkFEX01FU1NBR0U6CisgICAgICByZXR1cm4gIkJhZCBtZXNzYWdlIGZyb20gU0ZUUCBzZXJ2ZXIiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX05PX0NPTk5FQ1RJT046CisgICAgICByZXR1cm4gIk5vdCBjb25uZWN0ZWQgdG8gU0ZUUCBzZXJ2ZXIiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0NPTk5FQ1RJT05fTE9TVDoKKyAgICAgIHJldHVybiAiQ29ubmVjdGlvbiB0byBTRlRQIHNlcnZlciBsb3N0IjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9PUF9VTlNVUFBPUlRFRDoKKyAgICAgIHJldHVybiAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgU0ZUUCBzZXJ2ZXIiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0lOVkFMSURfSEFORExFOgorICAgICAgcmV0dXJuICJJbnZhbGlkIGhhbmRsZSI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9fU1VDSF9QQVRIOgorICAgICAgcmV0dXJuICJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9GSUxFX0FMUkVBRFlfRVhJU1RTOgorICAgICAgcmV0dXJuICJGaWxlIGFscmVhZHkgZXhpc3RzIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9XUklURV9QUk9URUNUOgorICAgICAgcmV0dXJuICJGaWxlIGlzIHdyaXRlIHByb3RlY3RlZCI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9fTUVESUE6CisgICAgICByZXR1cm4gIk5vIG1lZGlhIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9OT19TUEFDRV9PTl9GSUxFU1lTVEVNOgorICAgICAgcmV0dXJuICJEaXNrIGZ1bGwiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX1FVT1RBX0VYQ0VFREVEOgorICAgICAgcmV0dXJuICJVc2VyIHF1b3RhIGV4Y2VlZGVkIjsKKworICAgIGNhc2UgTElCU1NIMl9GWF9VTktOT1dOX1BSSU5DSVBMRToKKyAgICAgIHJldHVybiAiVW5rbm93biBwcmluY2lwbGUiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0xPQ0tfQ09ORmxJQ1Q6CisgICAgICByZXR1cm4gIkZpbGUgbG9jayBjb25mbGljdCI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfRElSX05PVF9FTVBUWToKKyAgICAgIHJldHVybiAiRGlyZWN0b3J5IG5vdCBlbXB0eSI7CisKKyAgICBjYXNlIExJQlNTSDJfRlhfTk9UX0FfRElSRUNUT1JZOgorICAgICAgcmV0dXJuICJOb3QgYSBkaXJlY3RvcnkiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0lOVkFMSURfRklMRU5BTUU6CisgICAgICByZXR1cm4gIkludmFsaWQgZmlsZW5hbWUiOworCisgICAgY2FzZSBMSUJTU0gyX0ZYX0xJTktfTE9PUDoKKyAgICAgIHJldHVybiAiTGluayBwb2ludHMgdG8gaXRzZWxmIjsKKyAgfQorICByZXR1cm4gIlVua25vd24gZXJyb3IgaW4gbGlic3NoMiI7Cit9CisKKyNlbmRpZiAvKiBVU0VfTElCU1NIMiAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3NzaC5oIGIvY3VybC03LjI1LjAvbGliL3NzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZTAzNWIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc3NoLmgKQEAgLTAsMCArMSwxNzQgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfU1NIX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfU1NIX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfTElCU1NIMl9ICisjaW5jbHVkZSA8bGlic3NoMi5oPgorI2luY2x1ZGUgPGxpYnNzaDJfc2Z0cC5oPgorI2VuZGlmIC8qIEhBVkVfTElCU1NIMl9IICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTU0ggdW5pcXVlIHNldHVwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKyAgU1NIX05PX1NUQVRFID0gLTEsICAvKiBVc2VkIGZvciAibmV4dFN0YXRlIiBzbyBzYXkgdGhlcmUgaXMgbm9uZSAqLworICBTU0hfU1RPUCA9IDAsICAgICAgIC8qIGRvIG5vdGhpbmcgc3RhdGUsIHN0b3BzIHRoZSBzdGF0ZSBtYWNoaW5lICovCisKKyAgU1NIX0lOSVQsICAgICAgICAgICAvKiBGaXJzdCBzdGF0ZSBpbiBTU0gtQ09OTkVDVCAqLworICBTU0hfU19TVEFSVFVQLCAgICAgIC8qIFNlc3Npb24gc3RhcnR1cCAqLworICBTU0hfSE9TVEtFWSwgICAgICAgIC8qIHZlcmlmeSBob3N0a2V5ICovCisgIFNTSF9BVVRITElTVCwKKyAgU1NIX0FVVEhfUEtFWV9JTklULAorICBTU0hfQVVUSF9QS0VZLAorICBTU0hfQVVUSF9QQVNTX0lOSVQsCisgIFNTSF9BVVRIX1BBU1MsCisgIFNTSF9BVVRIX0hPU1RfSU5JVCwKKyAgU1NIX0FVVEhfSE9TVCwKKyAgU1NIX0FVVEhfS0VZX0lOSVQsCisgIFNTSF9BVVRIX0tFWSwKKyAgU1NIX0FVVEhfRE9ORSwKKyAgU1NIX1NGVFBfSU5JVCwKKyAgU1NIX1NGVFBfUkVBTFBBVEgsICAgLyogTGFzdCBzdGF0ZSBpbiBTU0gtQ09OTkVDVCAqLworCisgIFNTSF9TRlRQX1FVT1RFX0lOSVQsIC8qIEZpcnN0IHN0YXRlIGluIFNGVFAtRE8gKi8KKyAgU1NIX1NGVFBfUE9TVFFVT1RFX0lOSVQsIC8qIChQb3NzaWJseSkgRmlyc3Qgc3RhdGUgaW4gU0ZUUC1ET05FICovCisgIFNTSF9TRlRQX1FVT1RFLAorICBTU0hfU0ZUUF9ORVhUX1FVT1RFLAorICBTU0hfU0ZUUF9RVU9URV9TVEFULAorICBTU0hfU0ZUUF9RVU9URV9TRVRTVEFULAorICBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LLAorICBTU0hfU0ZUUF9RVU9URV9NS0RJUiwKKyAgU1NIX1NGVFBfUVVPVEVfUkVOQU1FLAorICBTU0hfU0ZUUF9RVU9URV9STURJUiwKKyAgU1NIX1NGVFBfUVVPVEVfVU5MSU5LLAorICBTU0hfU0ZUUF9UUkFOU19JTklULAorICBTU0hfU0ZUUF9VUExPQURfSU5JVCwKKyAgU1NIX1NGVFBfQ1JFQVRFX0RJUlNfSU5JVCwKKyAgU1NIX1NGVFBfQ1JFQVRFX0RJUlMsCisgIFNTSF9TRlRQX0NSRUFURV9ESVJTX01LRElSLAorICBTU0hfU0ZUUF9SRUFERElSX0lOSVQsCisgIFNTSF9TRlRQX1JFQURESVIsCisgIFNTSF9TRlRQX1JFQURESVJfTElOSywKKyAgU1NIX1NGVFBfUkVBRERJUl9CT1RUT00sCisgIFNTSF9TRlRQX1JFQURESVJfRE9ORSwKKyAgU1NIX1NGVFBfRE9XTkxPQURfSU5JVCwKKyAgU1NIX1NGVFBfRE9XTkxPQURfU1RBVCwgLyogTGFzdCBzdGF0ZSBpbiBTRlRQLURPICovCisgIFNTSF9TRlRQX0NMT1NFLCAgICAvKiBMYXN0IHN0YXRlIGluIFNGVFAtRE9ORSAqLworICBTU0hfU0ZUUF9TSFVURE9XTiwgLyogRmlyc3Qgc3RhdGUgaW4gU0ZUUC1ESVNDT05ORUNUICovCisgIFNTSF9TQ1BfVFJBTlNfSU5JVCwgLyogRmlyc3Qgc3RhdGUgaW4gU0NQLURPICovCisgIFNTSF9TQ1BfVVBMT0FEX0lOSVQsCisgIFNTSF9TQ1BfRE9XTkxPQURfSU5JVCwKKyAgU1NIX1NDUF9ET05FLAorICBTU0hfU0NQX1NFTkRfRU9GLAorICBTU0hfU0NQX1dBSVRfRU9GLAorICBTU0hfU0NQX1dBSVRfQ0xPU0UsCisgIFNTSF9TQ1BfQ0hBTk5FTF9GUkVFLCAgIC8qIExhc3Qgc3RhdGUgaW4gU0NQLURPTkUgKi8KKyAgU1NIX1NFU1NJT05fRElTQ09OTkVDVCwgLyogRmlyc3Qgc3RhdGUgaW4gU0NQLURJU0NPTk5FQ1QgKi8KKyAgU1NIX1NFU1NJT05fRlJFRSwgICAgICAgLyogTGFzdCBzdGF0ZSBpbiBTQ1AvU0ZUUC1ESVNDT05ORUNUICovCisgIFNTSF9RVUlULAorICBTU0hfTEFTVCAgLyogbmV2ZXIgdXNlZCAqLworfSBzc2hzdGF0ZTsKKworLyogdGhpcyBzdHJ1Y3QgaXMgdXNlZCBpbiB0aGUgSGFuZGxlRGF0YSBzdHJ1Y3Qgd2hpY2ggaXMgcGFydCBvZiB0aGUKKyAgIFNlc3Npb25IYW5kbGUsIHdoaWNoIG1lYW5zIHRoaXMgaXMgdXNlZCBvbiBhIHBlci1lYXN5IGhhbmRsZSBiYXNpcy4KKyAgIEV2ZXJ5dGhpbmcgdGhhdCBpcyBzdHJpY3RseSByZWxhdGVkIHRvIGEgY29ubmVjdGlvbiBpcyBiYW5uZWQgZnJvbSB0aGlzCisgICBzdHJ1Y3QuICovCitzdHJ1Y3QgU1NIUFJPVE8geworICBjaGFyICpwYXRoOyAgICAgICAgICAgICAgICAgIC8qIHRoZSBwYXRoIHdlIG9wZXJhdGUgb24gKi8KK307CisKKy8qIHNzaF9jb25uIGlzIHVzZWQgZm9yIHN0cnVjdCBjb25uZWN0aW9uLW9yaWVudGVkIGRhdGEgaW4gdGhlIGNvbm5lY3RkYXRhCisgICBzdHJ1Y3QgKi8KK3N0cnVjdCBzc2hfY29ubiB7CisgIGNvbnN0IGNoYXIgKmF1dGhsaXN0OyAgICAgICAvKiBMaXN0IG9mIGF1dGguIG1ldGhvZHMsIG1hbmFnZWQgYnkgbGlic3NoMiAqLworI2lmZGVmIFVTRV9MSUJTU0gyCisgIGNvbnN0IGNoYXIgKnBhc3NwaHJhc2U7ICAgICAvKiBwYXNzLXBocmFzZSB0byB1c2UgKi8KKyAgY2hhciAqcnNhX3B1YjsgICAgICAgICAgICAgIC8qIHBhdGggbmFtZSAqLworICBjaGFyICpyc2E7ICAgICAgICAgICAgICAgICAgLyogcGF0aCBuYW1lICovCisgIGJvb2wgYXV0aGVkOyAgICAgICAgICAgICAgICAvKiB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBhdXRoZW50aWNhdGVkIGZpbmUgKi8KKyAgc3Noc3RhdGUgc3RhdGU7ICAgICAgICAgICAgIC8qIGFsd2F5cyB1c2Ugc3NoLmM6c3RhdGUoKSB0byBjaGFuZ2Ugc3RhdGUhICovCisgIHNzaHN0YXRlIG5leHRzdGF0ZTsgICAgICAgICAvKiB0aGUgc3RhdGUgdG8gZ290byBhZnRlciBzdG9wcGluZyAqLworICBDVVJMY29kZSBhY3R1YWxjb2RlOyAgICAgICAgLyogdGhlIGFjdHVhbCBlcnJvciBjb2RlICovCisgIHN0cnVjdCBjdXJsX3NsaXN0ICpxdW90ZV9pdGVtOyAvKiBmb3IgdGhlIHF1b3RlIG9wdGlvbiAqLworICBjaGFyICpxdW90ZV9wYXRoMTsgICAgICAgICAgLyogdHdvIGdlbmVyaWMgcG9pbnRlcnMgZm9yIHRoZSBRVU9URSBzdHVmZiAqLworICBjaGFyICpxdW90ZV9wYXRoMjsKKyAgTElCU1NIMl9TRlRQX0FUVFJJQlVURVMgcXVvdGVfYXR0cnM7IC8qIHVzZWQgYnkgdGhlIFNGVFBfUVVPVEUgc3RhdGUgKi8KKyAgYm9vbCBhY2NlcHRmYWlsOyAgICAgICAgICAgIC8qIHVzZWQgYnkgdGhlIFNGVFBfUVVPVEUgKGNvbnRpbnVlIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZSBjb21tYW5kIGZhaWxzKSAqLworICBjaGFyICpob21lZGlyOyAgICAgICAgICAgICAgLyogd2hlbiBkb2luZyBTRlRQIHdlIGZpZ3VyZSBvdXQgaG9tZSBkaXIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0IHBoYXNlICovCisKKyAgLyogSGVyZSdzIGEgc2V0IG9mIHN0cnVjdCBtZW1iZXJzIHVzZWQgYnkgdGhlIFNGVFBfUkVBRERJUiBzdGF0ZSAqLworICBMSUJTU0gyX1NGVFBfQVRUUklCVVRFUyByZWFkZGlyX2F0dHJzOworICBjaGFyICpyZWFkZGlyX2ZpbGVuYW1lOworICBjaGFyICpyZWFkZGlyX2xvbmdlbnRyeTsKKyAgaW50IHJlYWRkaXJfbGVuLCByZWFkZGlyX3RvdGFsTGVuLCByZWFkZGlyX2N1cnJMZW47CisgIGNoYXIgKnJlYWRkaXJfbGluZTsKKyAgY2hhciAqcmVhZGRpcl9saW5rUGF0aDsKKyAgLyogZW5kIG9mIFJFQURESVIgc3R1ZmYgKi8KKworICBpbnQgc2Vjb25kQ3JlYXRlRGlyczsgICAgICAgICAvKiBjb3VudGVyIHVzZSBieSB0aGUgY29kZSB0byBzZWUgaWYgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZCBhdHRlbXB0IGhhcyBiZWVuIG1hZGUgdG8gY2hhbmdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvL2NyZWF0ZSBhIGRpcmVjdG9yeSAqLworICBjaGFyICpzbGFzaF9wb3M7ICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRoZSBTRlRQX0NSRUFURV9ESVJTIHN0YXRlICovCisgIExJQlNTSDJfU0VTU0lPTiAqc3NoX3Nlc3Npb247IC8qIFNlY3VyZSBTaGVsbCBzZXNzaW9uICovCisgIExJQlNTSDJfQ0hBTk5FTCAqc3NoX2NoYW5uZWw7IC8qIFNlY3VyZSBTaGVsbCBjaGFubmVsIGhhbmRsZSAqLworICBMSUJTU0gyX1NGVFAgKnNmdHBfc2Vzc2lvbjsgICAvKiBTRlRQIGhhbmRsZSAqLworICBMSUJTU0gyX1NGVFBfSEFORExFICpzZnRwX2hhbmRsZTsKKyAgaW50IG9yaWdfd2FpdGZvcjsgICAgICAgICAgICAgLyogZGVmYXVsdCBSRUFEL1dSSVRFIGJpdHMgd2FpdCBmb3IgKi8KKworICAvKiBub3RlIHRoYXQgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkgaXMgYSBkZWZpbmUgc2V0IGluIHRoZSBsaWJzc2gyLmgKKyAgICAgaGVhZGVyICovCisjaWZkZWYgSEFWRV9MSUJTU0gyX0tOT1dOSE9TVF9BUEkKKyAgTElCU1NIMl9LTk9XTkhPU1RTICpraDsKKyNlbmRpZgorI2VuZGlmIC8qIFVTRV9MSUJTU0gyICovCit9OworCisjaWZkZWYgVVNFX0xJQlNTSDIKKworI2lmICFkZWZpbmVkKExJQlNTSDJfVkVSU0lPTl9OVU0pIHx8IChMSUJTU0gyX1ZFUlNJT05fTlVNIDwgMHgwMDEwMDApCisjICBlcnJvciAiU0NQL1NGVFAgcHJvdG9jb2xzIHJlcXVpcmUgbGlic3NoMiAwLjE2IG9yIGxhdGVyIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExJQlNTSDJfVkVSU0lPTl9OVU0pICYmIChMSUJTU0gyX1ZFUlNJT05fTlVNID49IDB4MDEwMDAwKQorIyAgZGVmaW5lIEhBVkVfTElCU1NIMl9TRlRQX1NFRUs2NCAxCisjZWxzZQorIyAgdW5kZWYgSEFWRV9MSUJTU0gyX1NGVFBfU0VFSzY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoTElCU1NIMl9WRVJTSU9OX05VTSkgJiYgKExJQlNTSDJfVkVSU0lPTl9OVU0gPj0gMHgwMTAyMDYpCisjICBkZWZpbmUgSEFWRV9MSUJTU0gyX1NDUF9TRU5ENjQgMQorI2Vsc2UKKyMgIHVuZGVmIEhBVkVfTElCU1NIMl9TQ1BfU0VORDY0CisjZW5kaWYKKworCitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfc2NwOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3NmdHA7CisKKyNlbmRpZiAvKiBVU0VfTElCU1NIMiAqLworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfU1NIX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9zc2xnZW4uYyBiL2N1cmwtNy4yNS4wL2xpYi9zc2xnZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzdmZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3NzbGdlbi5jCkBAIC0wLDAgKzEsNTIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmaWxlIGlzIGZvciBpbXBsZW1lbnRpbmcgYWxsICJnZW5lcmljIiBTU0wgZnVuY3Rpb25zIHRoYXQgYWxsIGxpYmN1cmwKKyAgIGludGVybmFscyBzaG91bGQgdXNlLiBJdCBpcyB0aGVuIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoZSBwcm9wZXIKKyAgICJiYWNrZW5kIiBmdW5jdGlvbi4KKworICAgU1NMLWZ1bmN0aW9ucyBpbiBsaWJjdXJsIHNob3VsZCBjYWxsIGZ1bmN0aW9ucyBpbiB0aGlzIHNvdXJjZSBmaWxlLCBhbmQgbm90CisgICB0byBhbnkgc3BlY2lmaWMgU1NMLWxheWVyLgorCisgICBDdXJsX3NzbF8gLSBwcmVmaXggZm9yIGdlbmVyaWMgb25lcworICAgQ3VybF9vc3NsXyAtIHByZWZpeCBmb3IgT3BlblNTTCBvbmVzCisgICBDdXJsX2d0bHNfIC0gcHJlZml4IGZvciBHbnVUTFMgb25lcworICAgQ3VybF9uc3NfIC0gcHJlZml4IGZvciBOU1Mgb25lcworICAgQ3VybF9wb2xhcnNzbF8gLSBwcmVmaXggZm9yIFBvbGFyU1NMIG9uZXMKKyAgIEN1cmxfY3lhc3NsXyAtIHByZWZpeCBmb3IgQ3lhU1NMIG9uZXMKKworICAgTm90ZSB0aGF0IHRoaXMgc291cmNlIGNvZGUgdXNlcyBjdXJsc3NsXyogZnVuY3Rpb25zLCBhbmQgdGhleSBhcmUgYWxsCisgICBkZWZpbmVzL21hY3JvcyAjZGVmaW5lZCBieSB0aGUgbGliLXNwZWNpZmljIGhlYWRlciBmaWxlcy4KKworICAgIlNTTC9UTFMgU3Ryb25nIEVuY3J5cHRpb246IEFuIEludHJvZHVjdGlvbiIKKyAgIGh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MtMi4wL3NzbC9zc2xfaW50cm8uaHRtbAorKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2RlZmluZSBTU0xHRU5fQworI2luY2x1ZGUgInNzbGdlbi5oIiAvKiBnZW5lcmljIFNTTCBwcm90b3MgZXRjICovCisjaW5jbHVkZSAic3NsdXNlLmgiIC8qIE9wZW5TU0wgdmVyc2lvbnMgKi8KKyNpbmNsdWRlICJndGxzLmgiICAgLyogR251VExTIHZlcnNpb25zICovCisjaW5jbHVkZSAibnNzZy5oIiAgIC8qIE5TUyB2ZXJzaW9ucyAqLworI2luY2x1ZGUgInFzc2wuaCIgICAvKiBRU09TU0wgdmVyc2lvbnMgKi8KKyNpbmNsdWRlICJwb2xhcnNzbC5oIiAvKiBQb2xhclNTTCB2ZXJzaW9ucyAqLworI2luY2x1ZGUgImF4dGxzLmgiICAvKiBheFRMUyB2ZXJzaW9ucyAqLworI2luY2x1ZGUgImN5YXNzbC5oIiAgLyogQ3lhU1NMIHZlcnNpb25zICovCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAic2hhcmUuaCIKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qIGNvbnZlbmllbmNlIG1hY3JvIHRvIGNoZWNrIGlmIHRoaXMgaGFuZGxlIGlzIHVzaW5nIGEgc2hhcmVkIFNTTCBzZXNzaW9uICovCisjZGVmaW5lIFNTTFNFU1NJT05fU0hBUkVEKGRhdGEpIChkYXRhLT5zaGFyZSAmJiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhLT5zaGFyZS0+c3BlY2lmaWVyICYgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxPDxDVVJMX0xPQ0tfREFUQV9TU0xfU0VTU0lPTikpKQorCitzdGF0aWMgYm9vbCBzYWZlX3N0cmVxdWFsKGNoYXIqIHN0cjEsIGNoYXIqIHN0cjIpCit7CisgIGlmKHN0cjEgJiYgc3RyMikKKyAgICAvKiBib3RoIHBvaW50ZXJzIHBvaW50IHRvIHNvbWV0aGluZyB0aGVuIGNvbXBhcmUgdGhlbSAqLworICAgIHJldHVybiAoMCAhPSBDdXJsX3Jhd19lcXVhbChzdHIxLCBzdHIyKSkgPyBUUlVFIDogRkFMU0U7CisgIGVsc2UKKyAgICAvKiBpZiBib3RoIHBvaW50ZXJzIGFyZSBOVUxMIHRoZW4gdHJlYXQgdGhlbSBhcyBlcXVhbCAqLworICAgIHJldHVybiAoIXN0cjEgJiYgIXN0cjIpID8gVFJVRSA6IEZBTFNFOworfQorCitib29sCitDdXJsX3NzbF9jb25maWdfbWF0Y2hlcyhzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhKiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9jb25maWdfZGF0YSogbmVlZGxlKQoreworICBpZigoZGF0YS0+dmVyc2lvbiA9PSBuZWVkbGUtPnZlcnNpb24pICYmCisgICAgIChkYXRhLT52ZXJpZnlwZWVyID09IG5lZWRsZS0+dmVyaWZ5cGVlcikgJiYKKyAgICAgKGRhdGEtPnZlcmlmeWhvc3QgPT0gbmVlZGxlLT52ZXJpZnlob3N0KSAmJgorICAgICBzYWZlX3N0cmVxdWFsKGRhdGEtPkNBcGF0aCwgbmVlZGxlLT5DQXBhdGgpICYmCisgICAgIHNhZmVfc3RyZXF1YWwoZGF0YS0+Q0FmaWxlLCBuZWVkbGUtPkNBZmlsZSkgJiYKKyAgICAgc2FmZV9zdHJlcXVhbChkYXRhLT5yYW5kb21fZmlsZSwgbmVlZGxlLT5yYW5kb21fZmlsZSkgJiYKKyAgICAgc2FmZV9zdHJlcXVhbChkYXRhLT5lZ2Rzb2NrZXQsIG5lZWRsZS0+ZWdkc29ja2V0KSAmJgorICAgICBzYWZlX3N0cmVxdWFsKGRhdGEtPmNpcGhlcl9saXN0LCBuZWVkbGUtPmNpcGhlcl9saXN0KSkKKyAgICByZXR1cm4gVFJVRTsKKworICByZXR1cm4gRkFMU0U7Cit9CisKK2Jvb2wKK0N1cmxfY2xvbmVfc3NsX2NvbmZpZyhzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhICpzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9jb25maWdfZGF0YSAqZGVzdCkKK3sKKyAgZGVzdC0+c2Vzc2lvbmlkID0gc291cmNlLT5zZXNzaW9uaWQ7CisgIGRlc3QtPnZlcmlmeWhvc3QgPSBzb3VyY2UtPnZlcmlmeWhvc3Q7CisgIGRlc3QtPnZlcmlmeXBlZXIgPSBzb3VyY2UtPnZlcmlmeXBlZXI7CisgIGRlc3QtPnZlcnNpb24gPSBzb3VyY2UtPnZlcnNpb247CisKKyAgaWYoc291cmNlLT5DQWZpbGUpIHsKKyAgICBkZXN0LT5DQWZpbGUgPSBzdHJkdXAoc291cmNlLT5DQWZpbGUpOworICAgIGlmKCFkZXN0LT5DQWZpbGUpCisgICAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgZWxzZQorICAgIGRlc3QtPkNBZmlsZSA9IE5VTEw7CisKKyAgaWYoc291cmNlLT5DQXBhdGgpIHsKKyAgICBkZXN0LT5DQXBhdGggPSBzdHJkdXAoc291cmNlLT5DQXBhdGgpOworICAgIGlmKCFkZXN0LT5DQXBhdGgpCisgICAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgZWxzZQorICAgIGRlc3QtPkNBcGF0aCA9IE5VTEw7CisKKyAgaWYoc291cmNlLT5jaXBoZXJfbGlzdCkgeworICAgIGRlc3QtPmNpcGhlcl9saXN0ID0gc3RyZHVwKHNvdXJjZS0+Y2lwaGVyX2xpc3QpOworICAgIGlmKCFkZXN0LT5jaXBoZXJfbGlzdCkKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBlbHNlCisgICAgZGVzdC0+Y2lwaGVyX2xpc3QgPSBOVUxMOworCisgIGlmKHNvdXJjZS0+ZWdkc29ja2V0KSB7CisgICAgZGVzdC0+ZWdkc29ja2V0ID0gc3RyZHVwKHNvdXJjZS0+ZWdkc29ja2V0KTsKKyAgICBpZighZGVzdC0+ZWdkc29ja2V0KQorICAgICAgcmV0dXJuIEZBTFNFOworICB9CisgIGVsc2UKKyAgICBkZXN0LT5lZ2Rzb2NrZXQgPSBOVUxMOworCisgIGlmKHNvdXJjZS0+cmFuZG9tX2ZpbGUpIHsKKyAgICBkZXN0LT5yYW5kb21fZmlsZSA9IHN0cmR1cChzb3VyY2UtPnJhbmRvbV9maWxlKTsKKyAgICBpZighZGVzdC0+cmFuZG9tX2ZpbGUpCisgICAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgZWxzZQorICAgIGRlc3QtPnJhbmRvbV9maWxlID0gTlVMTDsKKworICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBDdXJsX2ZyZWVfc3NsX2NvbmZpZyhzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhKiBzc2xjKQoreworICBDdXJsX3NhZmVmcmVlKHNzbGMtPkNBZmlsZSk7CisgIEN1cmxfc2FmZWZyZWUoc3NsYy0+Q0FwYXRoKTsKKyAgQ3VybF9zYWZlZnJlZShzc2xjLT5jaXBoZXJfbGlzdCk7CisgIEN1cmxfc2FmZWZyZWUoc3NsYy0+ZWdkc29ja2V0KTsKKyAgQ3VybF9zYWZlZnJlZShzc2xjLT5yYW5kb21fZmlsZSk7Cit9CisKKyNpZmRlZiBVU0VfU1NMCisKKy8qICJnbG9iYWwiIGluaXQgZG9uZT8gKi8KK3N0YXRpYyBib29sIGluaXRfc3NsPUZBTFNFOworCisvKioKKyAqIEdsb2JhbCBTU0wgaW5pdAorICoKKyAqIEByZXR2YWwgMCBlcnJvciBpbml0aWFsaXppbmcgU1NMCisgKiBAcmV0dmFsIDEgU1NMIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseQorICovCitpbnQgQ3VybF9zc2xfaW5pdCh2b2lkKQoreworICAvKiBtYWtlIHN1cmUgdGhpcyBpcyBvbmx5IGRvbmUgb25jZSAqLworICBpZihpbml0X3NzbCkKKyAgICByZXR1cm4gMTsKKyAgaW5pdF9zc2wgPSBUUlVFOyAvKiBuZXZlciBhZ2FpbiAqLworCisgIHJldHVybiBjdXJsc3NsX2luaXQoKTsKK30KKworCisvKiBHbG9iYWwgY2xlYW51cCAqLwordm9pZCBDdXJsX3NzbF9jbGVhbnVwKHZvaWQpCit7CisgIGlmKGluaXRfc3NsKSB7CisgICAgLyogb25seSBjbGVhbnVwIGlmIHdlIGRpZCBhIHByZXZpb3VzIGluaXQgKi8KKyAgICBjdXJsc3NsX2NsZWFudXAoKTsKKyAgICBpbml0X3NzbCA9IEZBTFNFOworICB9Cit9CisKK0NVUkxjb2RlCitDdXJsX3NzbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKK3sKKyAgQ1VSTGNvZGUgcmVzOworICAvKiBtYXJrIHRoaXMgaXMgYmVpbmcgc3NsLWVuYWJsZWQgZnJvbSBoZXJlIG9uLiAqLworICBjb25uLT5zc2xbc29ja2luZGV4XS51c2UgPSBUUlVFOworICBjb25uLT5zc2xbc29ja2luZGV4XS5zdGF0ZSA9IHNzbF9jb25uZWN0aW9uX25lZ290aWF0aW5nOworCisgIHJlcyA9IGN1cmxzc2xfY29ubmVjdChjb25uLCBzb2NraW5kZXgpOworCisgIGlmKCFyZXMpCisgICAgQ3VybF9wZ3JzVGltZShjb25uLT5kYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogU1NMIGlzIGNvbm5lY3RlZCAqLworCisgIHJldHVybiByZXM7Cit9CisKK0NVUkxjb2RlCitDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSkKK3sKKyNpZmRlZiBjdXJsc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcKKyAgQ1VSTGNvZGUgcmVzOworICAvKiBtYXJrIHRoaXMgaXMgYmVpbmcgc3NsIHJlcXVlc3RlZCBmcm9tIGhlcmUgb24uICovCisgIGNvbm4tPnNzbFtzb2NraW5kZXhdLnVzZSA9IFRSVUU7CisgIHJlcyA9IGN1cmxzc2xfY29ubmVjdF9ub25ibG9ja2luZyhjb25uLCBzb2NraW5kZXgsIGRvbmUpOworICBpZighcmVzICYmICpkb25lKQorICAgIEN1cmxfcGdyc1RpbWUoY29ubi0+ZGF0YSwgVElNRVJfQVBQQ09OTkVDVCk7IC8qIFNTTCBpcyBjb25uZWN0ZWQgKi8KKyAgcmV0dXJuIHJlczsKKyNlbHNlCisgICpkb25lID0gVFJVRTsgLyogZmFsbGJhY2sgdG8gQkxPQ0tJTkcgKi8KKyAgcmV0dXJuIEN1cmxfc3NsX2Nvbm5lY3QoY29ubiwgc29ja2luZGV4KTsKKyNlbmRpZiAvKiBub24tYmxvY2tpbmcgY29ubmVjdCBzdXBwb3J0ICovCit9CisKKy8qCisgKiBDaGVjayBpZiB0aGVyZSdzIGEgc2Vzc2lvbiBJRCBmb3IgdGhlIGdpdmVuIGNvbm5lY3Rpb24gaW4gdGhlIGNhY2hlLCBhbmQgaWYKKyAqIHRoZXJlJ3Mgb25lIHN1aXRhYmxlLCBpdCBpcyBwcm92aWRlZC4gUmV0dXJucyBUUlVFIHdoZW4gbm8gZW50cnkgbWF0Y2hlZC4KKyAqLworaW50IEN1cmxfc3NsX2dldHNlc3Npb25pZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipzc2xfc2Vzc2lvbmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlkc2l6ZSkgLyogc2V0IDAgaWYgdW5rbm93biAqLworeworICBzdHJ1Y3QgY3VybF9zc2xfc2Vzc2lvbiAqY2hlY2s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc2l6ZV90IGk7CisgIGxvbmcgKmdlbmVyYWxfYWdlOworICBib29sIG5vX21hdGNoID0gVFJVRTsKKworICAqc3NsX3Nlc3Npb25pZCA9IE5VTEw7CisKKyAgaWYoIWNvbm4tPnNzbF9jb25maWcuc2Vzc2lvbmlkKQorICAgIC8qIHNlc3Npb24gSUQgcmUtdXNlIGlzIGRpc2FibGVkICovCisgICAgcmV0dXJuIFRSVUU7CisKKyAgLyogTG9jayBpZiBzaGFyZWQgKi8KKyAgaWYoU1NMU0VTU0lPTl9TSEFSRUQoZGF0YSkpIHsKKyAgICBDdXJsX3NoYXJlX2xvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfU1NMX1NFU1NJT04sIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKTsKKyAgICBnZW5lcmFsX2FnZSA9ICZkYXRhLT5zaGFyZS0+c2Vzc2lvbmFnZTsKKyAgfQorICBlbHNlCisgICAgZ2VuZXJhbF9hZ2UgPSAmZGF0YS0+c3RhdGUuc2Vzc2lvbmFnZTsKKworICBmb3IoaSA9IDA7IGkgPCBkYXRhLT5zZXQuc3NsLm1heF9zc2xfc2Vzc2lvbnM7IGkrKykgeworICAgIGNoZWNrID0gJmRhdGEtPnN0YXRlLnNlc3Npb25baV07CisgICAgaWYoIWNoZWNrLT5zZXNzaW9uaWQpCisgICAgICAvKiBub3Qgc2Vzc2lvbiBJRCBtZWFucyBibGFuayBlbnRyeSAqLworICAgICAgY29udGludWU7CisgICAgaWYoQ3VybF9yYXdfZXF1YWwoY29ubi0+aG9zdC5uYW1lLCBjaGVjay0+bmFtZSkgJiYKKyAgICAgICAoY29ubi0+cmVtb3RlX3BvcnQgPT0gY2hlY2stPnJlbW90ZV9wb3J0KSAmJgorICAgICAgIEN1cmxfc3NsX2NvbmZpZ19tYXRjaGVzKCZjb25uLT5zc2xfY29uZmlnLCAmY2hlY2stPnNzbF9jb25maWcpKSB7CisgICAgICAvKiB5ZXMsIHdlIGhhdmUgYSBzZXNzaW9uIElEISAqLworICAgICAgKCpnZW5lcmFsX2FnZSkrKzsgICAgICAgICAgLyogaW5jcmVhc2UgZ2VuZXJhbCBhZ2UgKi8KKyAgICAgIGNoZWNrLT5hZ2UgPSAqZ2VuZXJhbF9hZ2U7IC8qIHNldCB0aGlzIGFzIHVzZWQgaW4gdGhpcyBhZ2UgKi8KKyAgICAgICpzc2xfc2Vzc2lvbmlkID0gY2hlY2stPnNlc3Npb25pZDsKKyAgICAgIGlmKGlkc2l6ZSkKKyAgICAgICAgKmlkc2l6ZSA9IGNoZWNrLT5pZHNpemU7CisgICAgICBub19tYXRjaCA9IEZBTFNFOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgLyogVW5sb2NrICovCisgIGlmKFNTTFNFU1NJT05fU0hBUkVEKGRhdGEpKQorICAgIEN1cmxfc2hhcmVfdW5sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX1NTTF9TRVNTSU9OKTsKKworICByZXR1cm4gbm9fbWF0Y2g7Cit9CisKKy8qCisgKiBLaWxsIGEgc2luZ2xlIHNlc3Npb24gSUQgZW50cnkgaW4gdGhlIGNhY2hlLgorICovCit2b2lkIEN1cmxfc3NsX2tpbGxfc2Vzc2lvbihzdHJ1Y3QgY3VybF9zc2xfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKyAgaWYoc2Vzc2lvbi0+c2Vzc2lvbmlkKSB7CisgICAgLyogZGVmZW5zaXZlIGNoZWNrICovCisKKyAgICAvKiBmcmVlIHRoZSBJRCB0aGUgU1NMLWxheWVyIHNwZWNpZmljIHdheSAqLworICAgIGN1cmxzc2xfc2Vzc2lvbl9mcmVlKHNlc3Npb24tPnNlc3Npb25pZCk7CisKKyAgICBzZXNzaW9uLT5zZXNzaW9uaWQgPSBOVUxMOworICAgIHNlc3Npb24tPmFnZSA9IDA7IC8qIGZyZXNoICovCisKKyAgICBDdXJsX2ZyZWVfc3NsX2NvbmZpZygmc2Vzc2lvbi0+c3NsX2NvbmZpZyk7CisKKyAgICBDdXJsX3NhZmVmcmVlKHNlc3Npb24tPm5hbWUpOworICB9Cit9CisKKy8qCisgKiBEZWxldGUgdGhlIGdpdmVuIHNlc3Npb24gSUQgZnJvbSB0aGUgY2FjaGUuCisgKi8KK3ZvaWQgQ3VybF9zc2xfZGVsc2Vzc2lvbmlkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgdm9pZCAqc3NsX3Nlc3Npb25pZCkKK3sKKyAgc2l6ZV90IGk7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7CisKKyAgaWYoU1NMU0VTU0lPTl9TSEFSRUQoZGF0YSkpCisgICAgQ3VybF9zaGFyZV9sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX1NTTF9TRVNTSU9OLCBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7CisKKyAgZm9yKGkgPSAwOyBpIDwgZGF0YS0+c2V0LnNzbC5tYXhfc3NsX3Nlc3Npb25zOyBpKyspIHsKKyAgICBzdHJ1Y3QgY3VybF9zc2xfc2Vzc2lvbiAqY2hlY2sgPSAmZGF0YS0+c3RhdGUuc2Vzc2lvbltpXTsKKworICAgIGlmKGNoZWNrLT5zZXNzaW9uaWQgPT0gc3NsX3Nlc3Npb25pZCkgeworICAgICAgQ3VybF9zc2xfa2lsbF9zZXNzaW9uKGNoZWNrKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmKFNTTFNFU1NJT05fU0hBUkVEKGRhdGEpKQorICAgIEN1cmxfc2hhcmVfdW5sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX1NTTF9TRVNTSU9OKTsKK30KKworLyoKKyAqIFN0b3JlIHNlc3Npb24gaWQgaW4gdGhlIHNlc3Npb24gY2FjaGUuIFRoZSBJRCBwYXNzZWQgb24gdG8gdGhpcyBmdW5jdGlvbgorICogbXVzdCBhbHJlYWR5IGhhdmUgYmVlbiBleHRyYWN0ZWQgYW5kIGFsbG9jYXRlZCB0aGUgcHJvcGVyIHdheSBmb3IgdGhlIFNTTAorICogbGF5ZXIuIEN1cmxfWFhYWF9zZXNzaW9uX2ZyZWUoKSB3aWxsIGJlIGNhbGxlZCB0byBmcmVlL2tpbGwgdGhlIHNlc3Npb24gSUQKKyAqIGxhdGVyIG9uLgorICovCitDVVJMY29kZSBDdXJsX3NzbF9hZGRzZXNzaW9uaWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNzbF9zZXNzaW9uaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlkc2l6ZSkKK3sKKyAgc2l6ZV90IGk7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhPWNvbm4tPmRhdGE7IC8qIHRoZSBtb3RoZXIgb2YgYWxsIHN0cnVjdHMgKi8KKyAgc3RydWN0IGN1cmxfc3NsX3Nlc3Npb24gKnN0b3JlID0gJmRhdGEtPnN0YXRlLnNlc3Npb25bMF07CisgIGxvbmcgb2xkZXN0X2FnZT1kYXRhLT5zdGF0ZS5zZXNzaW9uWzBdLmFnZTsgLyogemVybyBpZiB1bnVzZWQgKi8KKyAgY2hhciAqY2xvbmVfaG9zdDsKKyAgbG9uZyAqZ2VuZXJhbF9hZ2U7CisKKyAgLyogRXZlbiB0aG91Z2ggc2Vzc2lvbiBJRCByZS11c2UgbWlnaHQgYmUgZGlzYWJsZWQsIHRoYXQgb25seSBkaXNhYmxlcyBVU0lORworICAgICBJVC4gV2Ugc3RpbGwgc3RvcmUgaXQgaGVyZSBpbiBjYXNlIHRoZSByZS11c2luZyBpcyBhZ2FpbiBlbmFibGVkIGZvciBhbgorICAgICB1cGNvbWluZyB0cmFuc2ZlciAqLworCisgIGNsb25lX2hvc3QgPSBzdHJkdXAoY29ubi0+aG9zdC5uYW1lKTsKKyAgaWYoIWNsb25lX2hvc3QpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7IC8qIGJhaWwgb3V0ICovCisKKyAgLyogTm93IHdlIHNob3VsZCBhZGQgdGhlIHNlc3Npb24gSUQgYW5kIHRoZSBob3N0IG5hbWUgdG8gdGhlIGNhY2hlLCAocmVtb3ZlCisgICAgIHRoZSBvbGRlc3QgaWYgbmVjZXNzYXJ5KSAqLworCisgIC8qIElmIHVzaW5nIHNoYXJlZCBTU0wgc2Vzc2lvbiwgbG9jayEgKi8KKyAgaWYoU1NMU0VTU0lPTl9TSEFSRUQoZGF0YSkpIHsKKyAgICBDdXJsX3NoYXJlX2xvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfU1NMX1NFU1NJT04sIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKTsKKyAgICBnZW5lcmFsX2FnZSA9ICZkYXRhLT5zaGFyZS0+c2Vzc2lvbmFnZTsKKyAgfQorICBlbHNlIHsKKyAgICBnZW5lcmFsX2FnZSA9ICZkYXRhLT5zdGF0ZS5zZXNzaW9uYWdlOworICB9CisKKyAgLyogZmluZCBhbiBlbXB0eSBzbG90IGZvciB1cywgb3IgZmluZCB0aGUgb2xkZXN0ICovCisgIGZvcihpID0gMTsgKGkgPCBkYXRhLT5zZXQuc3NsLm1heF9zc2xfc2Vzc2lvbnMpICYmCisgICAgICAgIGRhdGEtPnN0YXRlLnNlc3Npb25baV0uc2Vzc2lvbmlkOyBpKyspIHsKKyAgICBpZihkYXRhLT5zdGF0ZS5zZXNzaW9uW2ldLmFnZSA8IG9sZGVzdF9hZ2UpIHsKKyAgICAgIG9sZGVzdF9hZ2UgPSBkYXRhLT5zdGF0ZS5zZXNzaW9uW2ldLmFnZTsKKyAgICAgIHN0b3JlID0gJmRhdGEtPnN0YXRlLnNlc3Npb25baV07CisgICAgfQorICB9CisgIGlmKGkgPT0gZGF0YS0+c2V0LnNzbC5tYXhfc3NsX3Nlc3Npb25zKQorICAgIC8qIGNhY2hlIGlzIGZ1bGwsIHdlIG11c3QgImtpbGwiIHRoZSBvbGRlc3QgZW50cnkhICovCisgICAgQ3VybF9zc2xfa2lsbF9zZXNzaW9uKHN0b3JlKTsKKyAgZWxzZQorICAgIHN0b3JlID0gJmRhdGEtPnN0YXRlLnNlc3Npb25baV07IC8qIHVzZSB0aGlzIHNsb3QgKi8KKworICAvKiBub3cgaW5pdCB0aGUgc2Vzc2lvbiBzdHJ1Y3Qgd2lzZWx5ICovCisgIHN0b3JlLT5zZXNzaW9uaWQgPSBzc2xfc2Vzc2lvbmlkOworICBzdG9yZS0+aWRzaXplID0gaWRzaXplOworICBzdG9yZS0+YWdlID0gKmdlbmVyYWxfYWdlOyAgICAvKiBzZXQgY3VycmVudCBhZ2UgKi8KKyAgaWYoc3RvcmUtPm5hbWUpCisgICAgLyogZnJlZSBpdCBpZiB0aGVyZSdzIG9uZSBhbHJlYWR5IHByZXNlbnQgKi8KKyAgICBmcmVlKHN0b3JlLT5uYW1lKTsKKyAgc3RvcmUtPm5hbWUgPSBjbG9uZV9ob3N0OyAgICAgICAgICAgICAgIC8qIGNsb25lIGhvc3QgbmFtZSAqLworICBzdG9yZS0+cmVtb3RlX3BvcnQgPSBjb25uLT5yZW1vdGVfcG9ydDsgLyogcG9ydCBudW1iZXIgKi8KKworCisgIC8qIFVubG9jayAqLworICBpZihTU0xTRVNTSU9OX1NIQVJFRChkYXRhKSkKKyAgICBDdXJsX3NoYXJlX3VubG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9TU0xfU0VTU0lPTik7CisKKyAgaWYoIUN1cmxfY2xvbmVfc3NsX2NvbmZpZygmY29ubi0+c3NsX2NvbmZpZywgJnN0b3JlLT5zc2xfY29uZmlnKSkgeworICAgIHN0b3JlLT5zZXNzaW9uaWQgPSBOVUxMOyAvKiBsZXQgY2FsbGVyIGZyZWUgc2Vzc2lvbmlkICovCisgICAgZnJlZShjbG9uZV9ob3N0KTsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworCit2b2lkIEN1cmxfc3NsX2Nsb3NlX2FsbChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKK3sKKyAgc2l6ZV90IGk7CisgIC8qIGtpbGwgdGhlIHNlc3Npb24gSUQgY2FjaGUgaWYgbm90IHNoYXJlZCAqLworICBpZihkYXRhLT5zdGF0ZS5zZXNzaW9uICYmICFTU0xTRVNTSU9OX1NIQVJFRChkYXRhKSkgeworICAgIGZvcihpID0gMDsgaSA8IGRhdGEtPnNldC5zc2wubWF4X3NzbF9zZXNzaW9uczsgaSsrKQorICAgICAgLyogdGhlIHNpbmdsZS1raWxsZXIgZnVuY3Rpb24gaGFuZGxlcyBlbXB0eSB0YWJsZSBzbG90cyAqLworICAgICAgQ3VybF9zc2xfa2lsbF9zZXNzaW9uKCZkYXRhLT5zdGF0ZS5zZXNzaW9uW2ldKTsKKworICAgIC8qIGZyZWUgdGhlIGNhY2hlIGRhdGEgKi8KKyAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLnNlc3Npb24pOworICB9CisKKyAgY3VybHNzbF9jbG9zZV9hbGwoZGF0YSk7Cit9CisKK3ZvaWQgQ3VybF9zc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBERUJVR0FTU0VSVCgoc29ja2luZGV4IDw9IDEpICYmIChzb2NraW5kZXggPj0gLTEpKTsKKyAgY3VybHNzbF9jbG9zZShjb25uLCBzb2NraW5kZXgpOworfQorCitDVVJMY29kZSBDdXJsX3NzbF9zaHV0ZG93bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIGlmKGN1cmxzc2xfc2h1dGRvd24oY29ubiwgc29ja2luZGV4KSkKKyAgICByZXR1cm4gQ1VSTEVfU1NMX1NIVVRET1dOX0ZBSUxFRDsKKworICBjb25uLT5zc2xbc29ja2luZGV4XS51c2UgPSBGQUxTRTsgLyogZ2V0IGJhY2sgdG8gb3JkaW5hcnkgc29ja2V0IHVzYWdlICovCisgIGNvbm4tPnNzbFtzb2NraW5kZXhdLnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fbm9uZTsKKworICBjb25uLT5yZWN2W3NvY2tpbmRleF0gPSBDdXJsX3JlY3ZfcGxhaW47CisgIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IEN1cmxfc2VuZF9wbGFpbjsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qIFNlbGVjdHMgYW4gU1NMIGNyeXB0byBlbmdpbmUKKyAqLworQ1VSTGNvZGUgQ3VybF9zc2xfc2V0X2VuZ2luZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgY29uc3QgY2hhciAqZW5naW5lKQoreworICByZXR1cm4gY3VybHNzbF9zZXRfZW5naW5lKGRhdGEsIGVuZ2luZSk7Cit9CisKKy8qIFNlbGVjdHMgdGhlIGRlZmF1bHQgU1NMIGNyeXB0byBlbmdpbmUKKyAqLworQ1VSTGNvZGUgQ3VybF9zc2xfc2V0X2VuZ2luZV9kZWZhdWx0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICByZXR1cm4gY3VybHNzbF9zZXRfZW5naW5lX2RlZmF1bHQoZGF0YSk7Cit9CisKKy8qIFJldHVybiBsaXN0IG9mIE9wZW5TU0wgY3J5cHRvIGVuZ2luZSBuYW1lcy4gKi8KK3N0cnVjdCBjdXJsX3NsaXN0ICpDdXJsX3NzbF9lbmdpbmVzX2xpc3Qoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIHJldHVybiBjdXJsc3NsX2VuZ2luZXNfbGlzdChkYXRhKTsKK30KKworLyoKKyAqIFRoaXMgc2V0cyB1cCBhIHNlc3Npb24gSUQgY2FjaGUgdG8gdGhlIHNwZWNpZmllZCBzaXplLiBNYWtlIHN1cmUgdGhpcyBjb2RlCisgKiBpcyBhZ25vc3RpYyB0byB3aGF0IHVuZGVybHlpbmcgU1NMIHRlY2hub2xvZ3kgd2UgdXNlLgorICovCitDVVJMY29kZSBDdXJsX3NzbF9pbml0c2Vzc2lvbnMoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIHNpemVfdCBhbW91bnQpCit7CisgIHN0cnVjdCBjdXJsX3NzbF9zZXNzaW9uICpzZXNzaW9uOworCisgIGlmKGRhdGEtPnN0YXRlLnNlc3Npb24pCisgICAgLyogdGhpcyBpcyBqdXN0IGEgcHJlY2F1dGlvbiB0byBwcmV2ZW50IG11bHRpcGxlIGluaXRzICovCisgICAgcmV0dXJuIENVUkxFX09LOworCisgIHNlc3Npb24gPSBjYWxsb2MoYW1vdW50LCBzaXplb2Yoc3RydWN0IGN1cmxfc3NsX3Nlc3Npb24pKTsKKyAgaWYoIXNlc3Npb24pCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgLyogc3RvcmUgdGhlIGluZm8gaW4gdGhlIFNTTCBzZWN0aW9uICovCisgIGRhdGEtPnNldC5zc2wubWF4X3NzbF9zZXNzaW9ucyA9IGFtb3VudDsKKyAgZGF0YS0+c3RhdGUuc2Vzc2lvbiA9IHNlc3Npb247CisgIGRhdGEtPnN0YXRlLnNlc3Npb25hZ2UgPSAxOyAvKiB0aGlzIGlzIGJyYW5kIG5ldyAqLworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3NpemVfdCBDdXJsX3NzbF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisgIHJldHVybiBjdXJsc3NsX3ZlcnNpb24oYnVmZmVyLCBzaXplKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gZGV0ZXJtaW5lIGNvbm5lY3Rpb24gc3RhdHVzLgorICoKKyAqIFJldHVybiBjb2RlczoKKyAqICAgICAxIG1lYW5zIHRoZSBjb25uZWN0aW9uIGlzIHN0aWxsIGluIHBsYWNlCisgKiAgICAgMCBtZWFucyB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQKKyAqICAgIC0xIG1lYW5zIHRoZSBjb25uZWN0aW9uIHN0YXR1cyBpcyB1bmtub3duCisgKi8KK2ludCBDdXJsX3NzbF9jaGVja19jeG4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICByZXR1cm4gY3VybHNzbF9jaGVja19jeG4oY29ubik7Cit9CisKK2Jvb2wgQ3VybF9zc2xfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb25uaW5kZXgpCit7CisgIHJldHVybiBjdXJsc3NsX2RhdGFfcGVuZGluZyhjb25uLCBjb25uaW5kZXgpOworfQorCit2b2lkIEN1cmxfc3NsX2ZyZWVfY2VydGluZm8oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIGludCBpOworICBzdHJ1Y3QgY3VybF9jZXJ0aW5mbyAqY2kgPSAmZGF0YS0+aW5mby5jZXJ0czsKKyAgaWYoY2ktPm51bV9vZl9jZXJ0cykgeworICAgIC8qIGZyZWUgYWxsIGluZGl2aWR1YWwgbGlzdHMgdXNlZCAqLworICAgIGZvcihpPTA7IGk8Y2ktPm51bV9vZl9jZXJ0czsgaSsrKSB7CisgICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGNpLT5jZXJ0aW5mb1tpXSk7CisgICAgICBjaS0+Y2VydGluZm9baV0gPSBOVUxMOworICAgIH0KKyAgICBmcmVlKGNpLT5jZXJ0aW5mbyk7IC8qIGZyZWUgdGhlIGFjdHVhbCBhcnJheSB0b28gKi8KKyAgICBjaS0+Y2VydGluZm8gPSBOVUxMOworICAgIGNpLT5udW1fb2ZfY2VydHMgPSAwOworICB9Cit9CisjZW5kaWYgLyogVVNFX1NTTCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3NzbGdlbi5oIGIvY3VybC03LjI1LjAvbGliL3NzbGdlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ODRhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc3NsZ2VuLmgKQEAgLTAsMCArMSw5NiBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9TU0xHRU5fSAorI2RlZmluZSBIRUFERVJfQ1VSTF9TU0xHRU5fSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworYm9vbCBDdXJsX3NzbF9jb25maWdfbWF0Y2hlcyhzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhKiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhKiBuZWVkbGUpOworYm9vbCBDdXJsX2Nsb25lX3NzbF9jb25maWcoc3RydWN0IHNzbF9jb25maWdfZGF0YSogc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9jb25maWdfZGF0YSogZGVzdCk7Cit2b2lkIEN1cmxfZnJlZV9zc2xfY29uZmlnKHN0cnVjdCBzc2xfY29uZmlnX2RhdGEqIHNzbGMpOworCisjaWZkZWYgVVNFX1NTTAoraW50IEN1cmxfc3NsX2luaXQodm9pZCk7Cit2b2lkIEN1cmxfc3NsX2NsZWFudXAodm9pZCk7CitDVVJMY29kZSBDdXJsX3NzbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCk7CitDVVJMY29kZSBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqZG9uZSk7CisvKiB0ZWxsIHRoZSBTU0wgc3R1ZmYgdG8gY2xvc2UgZG93biBhbGwgb3BlbiBpbmZvcm1hdGlvbiByZWdhcmRpbmcKKyAgIGNvbm5lY3Rpb25zIChhbmQgdGh1cyBzZXNzaW9uIElEIGNhY2hpbmcgZXRjKSAqLwordm9pZCBDdXJsX3NzbF9jbG9zZV9hbGwoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOwordm9pZCBDdXJsX3NzbF9jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpOworQ1VSTGNvZGUgQ3VybF9zc2xfc2h1dGRvd24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KTsKK0NVUkxjb2RlIEN1cmxfc3NsX3NldF9lbmdpbmUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIGNvbnN0IGNoYXIgKmVuZ2luZSk7CisvKiBTZXRzIGVuZ2luZSBhcyBkZWZhdWx0IGZvciBhbGwgU1NMIG9wZXJhdGlvbnMgKi8KK0NVUkxjb2RlIEN1cmxfc3NsX3NldF9lbmdpbmVfZGVmYXVsdChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CitzdHJ1Y3QgY3VybF9zbGlzdCAqQ3VybF9zc2xfZW5naW5lc19saXN0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKTsKKworLyogaW5pdCB0aGUgU1NMIHNlc3Npb24gSUQgY2FjaGUgKi8KK0NVUkxjb2RlIEN1cmxfc3NsX2luaXRzZXNzaW9ucyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqLCBzaXplX3QpOworc2l6ZV90IEN1cmxfc3NsX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Citib29sIEN1cmxfc3NsX2RhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29ubmluZGV4KTsKK2ludCBDdXJsX3NzbF9jaGVja19jeG4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK3ZvaWQgQ3VybF9zc2xfZnJlZV9jZXJ0aW5mbyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisKKy8qIEZ1bmN0aW9ucyB0byBiZSB1c2VkIGJ5IFNTTCBsaWJyYXJ5IGFkYXB0YXRpb24gZnVuY3Rpb25zICovCisKKy8qIGV4dHJhY3QgYSBzZXNzaW9uIElEICovCitpbnQgQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKnNzbF9zZXNzaW9uaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWRzaXplKSAvKiBzZXQgMCBpZiB1bmtub3duICovOworLyogYWRkIGEgbmV3IHNlc3Npb24gSUQgKi8KK0NVUkxjb2RlIEN1cmxfc3NsX2FkZHNlc3Npb25pZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3NsX3Nlc3Npb25pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWRzaXplKTsKKy8qIEtpbGwgYSBzaW5nbGUgc2Vzc2lvbiBJRCBlbnRyeSBpbiB0aGUgY2FjaGUgKi8KK3ZvaWQgQ3VybF9zc2xfa2lsbF9zZXNzaW9uKHN0cnVjdCBjdXJsX3NzbF9zZXNzaW9uICpzZXNzaW9uKTsKKy8qIGRlbGV0ZSBhIHNlc3Npb24gZnJvbSB0aGUgY2FjaGUgKi8KK3ZvaWQgQ3VybF9zc2xfZGVsc2Vzc2lvbmlkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgdm9pZCAqc3NsX3Nlc3Npb25pZCk7CisKKyNkZWZpbmUgU1NMX1NIVVRET1dOX1RJTUVPVVQgMTAwMDAgLyogbXMgKi8KKworI2Vsc2UKKy8qIFdoZW4gU1NMIHN1cHBvcnQgaXMgbm90IHByZXNlbnQsIGp1c3QgZGVmaW5lIGF3YXkgdGhlc2UgZnVuY3Rpb24gY2FsbHMgKi8KKyNkZWZpbmUgQ3VybF9zc2xfaW5pdCgpIDEKKyNkZWZpbmUgQ3VybF9zc2xfY2xlYW51cCgpIEN1cmxfbm9wX3N0bXQKKyNkZWZpbmUgQ3VybF9zc2xfY29ubmVjdCh4LHkpIENVUkxFX05PVF9CVUlMVF9JTgorI2RlZmluZSBDdXJsX3NzbF9jbG9zZV9hbGwoeCkgQ3VybF9ub3Bfc3RtdAorI2RlZmluZSBDdXJsX3NzbF9jbG9zZSh4LHkpIEN1cmxfbm9wX3N0bXQKKyNkZWZpbmUgQ3VybF9zc2xfc2h1dGRvd24oeCx5KSBDVVJMRV9OT1RfQlVJTFRfSU4KKyNkZWZpbmUgQ3VybF9zc2xfc2V0X2VuZ2luZSh4LHkpIENVUkxFX05PVF9CVUlMVF9JTgorI2RlZmluZSBDdXJsX3NzbF9zZXRfZW5naW5lX2RlZmF1bHQoeCkgQ1VSTEVfTk9UX0JVSUxUX0lOCisjZGVmaW5lIEN1cmxfc3NsX2VuZ2luZXNfbGlzdCh4KSBOVUxMCisjZGVmaW5lIEN1cmxfc3NsX3NlbmQoYSxiLGMsZCxlKSAtMQorI2RlZmluZSBDdXJsX3NzbF9yZWN2KGEsYixjLGQsZSkgLTEKKyNkZWZpbmUgQ3VybF9zc2xfaW5pdHNlc3Npb25zKHgseSkgQ1VSTEVfT0sKKyNkZWZpbmUgQ3VybF9zc2xfdmVyc2lvbih4LHkpIDAKKyNkZWZpbmUgQ3VybF9zc2xfZGF0YV9wZW5kaW5nKHgseSkgMAorI2RlZmluZSBDdXJsX3NzbF9jaGVja19jeG4oeCkgMAorI2RlZmluZSBDdXJsX3NzbF9mcmVlX2NlcnRpbmZvKHgpIEN1cmxfbm9wX3N0bXQKKyNkZWZpbmUgQ3VybF9zc2xfY29ubmVjdF9ub25ibG9ja2luZyh4LHkseikgQ1VSTEVfTk9UX0JVSUxUX0lOCisjZGVmaW5lIEN1cmxfc3NsX2tpbGxfc2Vzc2lvbih4KSBDdXJsX25vcF9zdG10CisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NTTEdFTl9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc3NsdXNlLmMgYi9jdXJsLTcuMjUuMC9saWIvc3NsdXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ1NjNjNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zc2x1c2UuYwpAQCAtMCwwICsxLDI3NjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogU291cmNlIGZpbGUgZm9yIGFsbCBPcGVuU1NMLXNwZWNpZmljIGNvZGUgZm9yIHRoZSBUTFMvU1NMIGxheWVyLiBObyBjb2RlCisgKiBidXQgc3NsZ2VuLmMgc2hvdWxkIGV2ZXIgY2FsbCBvciB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCisKKy8qCisgKiBUaGUgb3JpZ2luYWwgU1NMZWF5LXVzaW5nIGNvZGUgZm9yIGN1cmwgd2FzIHdyaXR0ZW4gYnkgTGluYXMgVmVwc3RhcyBhbmQKKyAqIFNhbXBvIEtlbGxvbWFraSAxOTk4LgorICovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgSEFWRV9MSU1JVFNfSAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgImZvcm1kYXRhLmgiIC8qIGZvciB0aGUgYm91bmRhcnkgZnVuY3Rpb24gKi8KKyNpbmNsdWRlICJ1cmwuaCIgLyogZm9yIHRoZSBzc2wgY29uZmlnIGNoZWNrIGZ1bmN0aW9uICovCisjaW5jbHVkZSAiaW5ldF9wdG9uLmgiCisjaW5jbHVkZSAic3NsdXNlLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAic3NsZ2VuLmgiCisjaW5jbHVkZSAicmF3c3RyLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2UgdGhlIGludGVybmFsICpwcmludGYoKSBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2lmZGVmIFVTRV9TU0xFQVkKKworI2lmZGVmIFVTRV9PUEVOU1NMCisjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorI2Vsc2UKKyNpbmNsdWRlIDxyYW5kLmg+CisjaW5jbHVkZSA8eDUwOXYzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJub24tYXNjaWkuaCIgLyogZm9yIEN1cmxfY29udmVydF9mcm9tX3V0ZjggcHJvdG90eXBlICovCisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZm5kZWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgorI2Vycm9yICJPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIG5vdCBkZWZpbmVkIgorI2VuZGlmCisKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDU4MWZMCisjZGVmaW5lIEhBVkVfU1NMX0dFVDFfU0VTU0lPTiAxCisjZWxzZQorI3VuZGVmIEhBVkVfU1NMX0dFVDFfU0VTU0lPTgorI2VuZGlmCisKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDQxMDBMCisjZGVmaW5lIEhBVkVfVVNFUkRBVEFfSU5fUFdEX0NBTExCQUNLIDEKKyNlbHNlCisjdW5kZWYgSEFWRV9VU0VSREFUQV9JTl9QV0RfQ0FMTEJBQ0sKKyNlbmRpZgorCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA3MDAxTAorLyogRU5HSU5FX2xvYWRfcHJpdmF0ZV9rZXkoKSB0YWtlcyBmb3VyIGFyZ3VtZW50cyAqLworI2RlZmluZSBIQVZFX0VOR0lORV9MT0FEX0ZPVVJfQVJHUworI2luY2x1ZGUgPG9wZW5zc2wvdWkuaD4KKyNlbHNlCisvKiBFTkdJTkVfbG9hZF9wcml2YXRlX2tleSgpIHRha2VzIHRocmVlIGFyZ3VtZW50cyAqLworI3VuZGVmIEhBVkVfRU5HSU5FX0xPQURfRk9VUl9BUkdTCisjZW5kaWYKKworI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDMwMDFMKSAmJiBkZWZpbmVkKEhBVkVfT1BFTlNTTF9QS0NTMTJfSCkKKy8qIE9wZW5TU0wgaGFzIFBLQ1MgMTIgc3VwcG9ydCAqLworI2RlZmluZSBIQVZFX1BLQ1MxMl9TVVBQT1JUCisjZWxzZQorLyogT3BlblNTTC9TU0xFYXkgZG9lcyBub3QgaGF2ZSBQS0NTMTIgc3VwcG9ydCAqLworI3VuZGVmIEhBVkVfUEtDUzEyX1NVUFBPUlQKKyNlbmRpZgorCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA2MDAxTAorI2RlZmluZSBIQVZFX0VSUl9FUlJPUl9TVFJJTkdfTiAxCisjZW5kaWYKKworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMDkwOTAwMEwKKyNkZWZpbmUgU1NMX01FVEhPRF9RVUFMIGNvbnN0CisjZWxzZQorI2RlZmluZSBTU0xfTUVUSE9EX1FVQUwKKyNlbmRpZgorCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA3MDAwTAorLyogMC45LjYgZGlkbid0IGhhdmUgWDUwOV9TVE9SRV9zZXRfZmxhZ3MoKSAqLworI2RlZmluZSBIQVZFX1g1MDlfU1RPUkVfU0VUX0ZMQUdTIDEKKyNlbHNlCisjZGVmaW5lIFg1MDlfU1RPUkVfc2V0X2ZsYWdzKHgseSkgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDAwMDBMCisjZGVmaW5lIEhBVkVfRVJSX1JFTU9WRV9USFJFQURfU1RBVEUgMQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TU0xWMl9DTElFTlRfTUVUSE9ECisjdW5kZWYgT1BFTlNTTF9OT19TU0wyIC8qIHVuZGVmIGZpcnN0IHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzICovCisjZGVmaW5lIE9QRU5TU0xfTk9fU1NMMgorI2VuZGlmCisKKy8qCisgKiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIHRoZSByYW5kb20gbnVtYmVyIHNlZWQgZmlsZS4gVGhpcyBtdXN0IGJlCisgKiBhIGZpbml0ZSB2YWx1ZSAoYmVjYXVzZSBzb21lIGVudHJvcHkgImZpbGVzIiBsaWtlIC9kZXYvdXJhbmRvbSBoYXZlCisgKiBhbiBpbmZpbml0ZSBsZW5ndGgpLCBidXQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gcHJvdmlkZSBlbm91Z2gKKyAqIGVudG9weSB0byBwcm9wZXJseSBzZWVkIE9wZW5TU0wncyBQUk5HLgorICovCisjZGVmaW5lIFJBTkRfTE9BRF9MRU5HVEggMTAyNAorCisjaWZuZGVmIEhBVkVfVVNFUkRBVEFfSU5fUFdEX0NBTExCQUNLCitzdGF0aWMgY2hhciBnbG9iYWxfcGFzc3dkWzY0XTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHBhc3N3ZF9jYWxsYmFjayhjaGFyICpidWYsIGludCBudW0sIGludCBlbmNyeXB0aW5nCisjaWZkZWYgSEFWRV9VU0VSREFUQV9JTl9QV0RfQ0FMTEJBQ0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgd2FzIGludHJvZHVjZWQgaW4gMC45LjQsIHdlIGNhbiBzZXQgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGEoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdm9pZCAqZ2xvYmFsX3Bhc3N3ZAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICApCit7CisgIERFQlVHQVNTRVJUKDAgPT0gZW5jcnlwdGluZyk7CisKKyAgaWYoIWVuY3J5cHRpbmcpIHsKKyAgICBpbnQga2xlbiA9IGN1cmx4X3V6dG9zaShzdHJsZW4oKGNoYXIgKilnbG9iYWxfcGFzc3dkKSk7CisgICAgaWYobnVtID4ga2xlbikgeworICAgICAgbWVtY3B5KGJ1ZiwgZ2xvYmFsX3Bhc3N3ZCwga2xlbisxKTsKKyAgICAgIHJldHVybiBrbGVuOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyoKKyAqIHJhbmRfZW5vdWdoKCkgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgVFJVRSBpZiB3ZSBoYXZlIHNlZWRlZCB0aGUgcmFuZG9tCisgKiBlbmdpbmUgcHJvcGVybHkuIFdlIHVzZSBzb21lIHByZXByb2Nlc3NvciBtYWdpYyB0byBwcm92aWRlIGEgc2VlZF9lbm91Z2goKQorICogbWFjcm8gdG8gdXNlLCBqdXN0IHRvIHByZXZlbnQgYSBjb21waWxlciB3YXJuaW5nIG9uIHRoaXMgZnVuY3Rpb24gaWYgd2UKKyAqIHBhc3MgaW4gYW4gYXJndW1lbnQgdGhhdCBpcyBuZXZlciB1c2VkLgorICovCisKKyNpZmRlZiBIQVZFX1JBTkRfU1RBVFVTCisjZGVmaW5lIHNlZWRfZW5vdWdoKHgpIHJhbmRfZW5vdWdoKCkKK3N0YXRpYyBib29sIHJhbmRfZW5vdWdoKHZvaWQpCit7CisgIHJldHVybiAoMCAhPSBSQU5EX3N0YXR1cygpKSA/IFRSVUUgOiBGQUxTRTsKK30KKyNlbHNlCisjZGVmaW5lIHNlZWRfZW5vdWdoKHgpIHJhbmRfZW5vdWdoKHgpCitzdGF0aWMgYm9vbCByYW5kX2Vub3VnaChpbnQgbnJlYWQpCit7CisgIC8qIHRoaXMgaXMgYSB2ZXJ5IHNpbGx5IGRlY2lzaW9uIHRvIG1ha2UgKi8KKyAgcmV0dXJuIChucmVhZCA+IDUwMCkgPyBUUlVFIDogRkFMU0U7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBvc3NsX3NlZWQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIGNoYXIgKmJ1ZiA9IGRhdGEtPnN0YXRlLmJ1ZmZlcjsgLyogcG9pbnQgdG8gdGhlIGJpZyBidWZmZXIgKi8KKyAgaW50IG5yZWFkPTA7CisKKyAgLyogUTogc2hvdWxkIHdlIGFkZCBzdXBwb3J0IGZvciBhIHJhbmRvbSBmaWxlIG5hbWUgYXMgYSBsaWJjdXJsIG9wdGlvbj8KKyAgICAgQTogWWVzLCBpdCBpcyBoZXJlICovCisKKyNpZm5kZWYgUkFORE9NX0ZJTEUKKyAgLyogaWYgUkFORE9NX0ZJTEUgaXNuJ3QgZGVmaW5lZCwgd2Ugb25seSBwZXJmb3JtIHRoaXMgaWYgYW4gb3B0aW9uIHRlbGxzCisgICAgIHVzIHRvISAqLworICBpZihkYXRhLT5zZXQuc3NsLnJhbmRvbV9maWxlKQorI2RlZmluZSBSQU5ET01fRklMRSAiIiAvKiBkb2Vzbid0IG1hdHRlciB3b24ndCBiZSB1c2VkICovCisjZW5kaWYKKyAgeworICAgIC8qIGxldCB0aGUgb3B0aW9uIG92ZXJyaWRlIHRoZSBkZWZpbmUgKi8KKyAgICBucmVhZCArPSBSQU5EX2xvYWRfZmlsZSgoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1JBTkRPTV9GSUxFXT8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1JBTkRPTV9GSUxFXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFORE9NX0ZJTEUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkRfTE9BRF9MRU5HVEgpOworICAgIGlmKHNlZWRfZW5vdWdoKG5yZWFkKSkKKyAgICAgIHJldHVybiBucmVhZDsKKyAgfQorCisjaWYgZGVmaW5lZChIQVZFX1JBTkRfRUdEKQorICAvKiBvbmx5IGF2YWlsYWJsZSBpbiBPcGVuU1NMIDAuOS41IGFuZCBsYXRlciAqLworICAvKiBFR0RfU09DS0VUIGlzIHNldCBhdCBjb25maWd1cmUgdGltZSBvciBub3QgYXQgYWxsICovCisjaWZuZGVmIEVHRF9TT0NLRVQKKyAgLyogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgZGVmaW5lIHNldCwgd2Ugb25seSBkbyB0aGlzIGlmIHRoZSBlZ2Qtb3B0aW9uCisgICAgIGlzIHNldCAqLworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfRUdEU09DS0VUXSkKKyNkZWZpbmUgRUdEX1NPQ0tFVCAiIiAvKiBkb2Vzbid0IG1hdHRlciB3b24ndCBiZSB1c2VkICovCisjZW5kaWYKKyAgeworICAgIC8qIElmIHRoZXJlJ3MgYW4gb3B0aW9uIGFuZCBhIGRlZmluZSwgdGhlIG9wdGlvbiBvdmVycmlkZXMgdGhlCisgICAgICAgZGVmaW5lICovCisgICAgaW50IHJldCA9IFJBTkRfZWdkKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9FR0RTT0NLRVRdPworICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfRUdEU09DS0VUXTpFR0RfU09DS0VUKTsKKyAgICBpZigtMSAhPSByZXQpIHsKKyAgICAgIG5yZWFkICs9IHJldDsKKyAgICAgIGlmKHNlZWRfZW5vdWdoKG5yZWFkKSkKKyAgICAgICAgcmV0dXJuIG5yZWFkOworICAgIH0KKyAgfQorI2VuZGlmCisKKyAgLyogSWYgd2UgZ2V0IGhlcmUsIGl0IG1lYW5zIHdlIG5lZWQgdG8gc2VlZCB0aGUgUFJORyB1c2luZyBhICJzaWxseSIKKyAgICAgYXBwcm9hY2ghICovCisjaWZkZWYgSEFWRV9SQU5EX1NDUkVFTgorICAvKiBpZiBSQU5EX3NjcmVlbigpIGlzIHByZXNlbnQsIHRoaXMgaXMgd2luZG93cyBhbmQgdGh1cyB3ZSBhc3N1bWUgdGhhdCB0aGUKKyAgICAgcmFuZG9tbmVzcyBpcyBhbHJlYWR5IHRha2VuIGNhcmUgb2YgKi8KKyAgbnJlYWQgPSAxMDA7IC8qIGp1c3QgYSB2YWx1ZSAqLworI2Vsc2UKKyAgeworICAgIGludCBsZW47CisgICAgY2hhciAqYXJlYTsKKworICAgIC8qIENoYW5nZWQgY2FsbCB0byBSQU5EX3NlZWQgdG8gdXNlIHRoZSB1bmRlcmx5aW5nIFJBTkRfYWRkIGltcGxlbWVudGF0aW9uCisgICAgICogZGlyZWN0bHkuICBEbyB0aGlzIGluIGEgbG9vcCwgd2l0aCB0aGUgYW1vdW50IG9mIGFkZGl0aW9uYWwgZW50cm9weQorICAgICAqIGJlaW5nIGRlcGVuZGVudCB1cG9uIHRoZSBhbGdvcml0aG0gdXNlZCBieSBDdXJsX0Zvcm1Cb3VuZGFyeSgpOiBOIGJ5dGVzCisgICAgICogb2YgYSA3LWJpdCBhc2NpaSBzZXQuIC0tIFJpY2hhcmQgR29ydG9uLCBNYXJjaCAxMSAyMDAzLgorICAgICAqLworCisgICAgZG8geworICAgICAgYXJlYSA9IEN1cmxfRm9ybUJvdW5kYXJ5KCk7CisgICAgICBpZighYXJlYSkKKyAgICAgICAgcmV0dXJuIDM7IC8qIG91dCBvZiBtZW1vcnkgKi8KKworICAgICAgbGVuID0gY3VybHhfdXp0b3NpKHN0cmxlbihhcmVhKSk7CisgICAgICBSQU5EX2FkZChhcmVhLCBsZW4sIChsZW4gPj4gMSkpOworCisgICAgICBmcmVlKGFyZWEpOyAvKiBub3cgcmVtb3ZlIHRoZSByYW5kb20ganVuayAqLworICAgIH0gd2hpbGUoIVJBTkRfc3RhdHVzKCkpOworICB9CisjZW5kaWYKKworICAvKiBnZW5lcmF0ZXMgYSBkZWZhdWx0IHBhdGggZm9yIHRoZSByYW5kb20gc2VlZCBmaWxlICovCisgIGJ1ZlswXT0wOyAvKiBibGFuayBpdCBmaXJzdCAqLworICBSQU5EX2ZpbGVfbmFtZShidWYsIEJVRlNJWkUpOworICBpZihidWZbMF0pIHsKKyAgICAvKiB3ZSBnb3QgYSBmaWxlIG5hbWUgdG8gdHJ5ICovCisgICAgbnJlYWQgKz0gUkFORF9sb2FkX2ZpbGUoYnVmLCBSQU5EX0xPQURfTEVOR1RIKTsKKyAgICBpZihzZWVkX2Vub3VnaChucmVhZCkpCisgICAgICByZXR1cm4gbnJlYWQ7CisgIH0KKworICBpbmZvZihkYXRhLCAibGliY3VybCBpcyBub3cgdXNpbmcgYSB3ZWFrIHJhbmRvbSBzZWVkIVxuIik7CisgIHJldHVybiBucmVhZDsKK30KKworaW50IEN1cmxfb3NzbF9zZWVkKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICAvKiB3ZSBoYXZlIHRoZSAiU1NMIGlzIHNlZWRlZCIgYm9vbGVhbiBzdGF0aWMgdG8gcHJldmVudCBtdWx0aXBsZQorICAgICB0aW1lLWNvbnN1bWluZyBzZWVkaW5ncyBpbiB2YWluICovCisgIHN0YXRpYyBib29sIHNzbF9zZWVkZWQgPSBGQUxTRTsKKworICBpZighc3NsX3NlZWRlZCB8fCBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUkFORE9NX0ZJTEVdIHx8CisgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9FR0RTT0NLRVRdKSB7CisgICAgb3NzbF9zZWVkKGRhdGEpOworICAgIHNzbF9zZWVkZWQgPSBUUlVFOworICB9CisgIHJldHVybiAwOworfQorCisKKyNpZm5kZWYgU1NMX0ZJTEVUWVBFX0VOR0lORQorI2RlZmluZSBTU0xfRklMRVRZUEVfRU5HSU5FIDQyCisjZW5kaWYKKyNpZm5kZWYgU1NMX0ZJTEVUWVBFX1BLQ1MxMgorI2RlZmluZSBTU0xfRklMRVRZUEVfUEtDUzEyIDQzCisjZW5kaWYKK3N0YXRpYyBpbnQgZG9fZmlsZV90eXBlKGNvbnN0IGNoYXIgKnR5cGUpCit7CisgIGlmKCF0eXBlIHx8ICF0eXBlWzBdKQorICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEVNOworICBpZihDdXJsX3Jhd19lcXVhbCh0eXBlLCAiUEVNIikpCisgICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9QRU07CisgIGlmKEN1cmxfcmF3X2VxdWFsKHR5cGUsICJERVIiKSkKKyAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX0FTTjE7CisgIGlmKEN1cmxfcmF3X2VxdWFsKHR5cGUsICJFTkciKSkKKyAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX0VOR0lORTsKKyAgaWYoQ3VybF9yYXdfZXF1YWwodHlwZSwgIlAxMiIpKQorICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEtDUzEyOworICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYworaW50IGNlcnRfc3R1ZmYoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgU1NMX0NUWCogY3R4LAorICAgICAgICAgICAgICAgY2hhciAqY2VydF9maWxlLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY2VydF90eXBlLAorICAgICAgICAgICAgICAgY2hhciAqa2V5X2ZpbGUsCisgICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXlfdHlwZSkKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIGludCBmaWxlX3R5cGUgPSBkb19maWxlX3R5cGUoY2VydF90eXBlKTsKKworICBpZihjZXJ0X2ZpbGUgIT0gTlVMTCB8fCBmaWxlX3R5cGUgPT0gU1NMX0ZJTEVUWVBFX0VOR0lORSkgeworICAgIFNTTCAqc3NsOworICAgIFg1MDkgKng1MDk7CisgICAgaW50IGNlcnRfZG9uZSA9IDA7CisKKyAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEXSkgeworI2lmbmRlZiBIQVZFX1VTRVJEQVRBX0lOX1BXRF9DQUxMQkFDSworICAgICAgLyoKKyAgICAgICAqIElmIHBhc3N3b3JkIGhhcyBiZWVuIGdpdmVuLCB3ZSBzdG9yZSB0aGF0IGluIHRoZSBnbG9iYWwKKyAgICAgICAqIGFyZWEgKCpzaHVkZGVyKikgZm9yIGEgd2hpbGU6CisgICAgICAgKi8KKyAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BBU1NXRF0pOworICAgICAgaWYobGVuIDwgc2l6ZW9mKGdsb2JhbF9wYXNzd2QpKQorICAgICAgICBtZW1jcHkoZ2xvYmFsX3Bhc3N3ZCwgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BBU1NXRF0sIGxlbisxKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZ2xvYmFsX3Bhc3N3ZFswXSA9ICdcMCc7CisjZWxzZQorICAgICAgLyoKKyAgICAgICAqIFdlIHNldCB0aGUgcGFzc3dvcmQgaW4gdGhlIGNhbGxiYWNrIHVzZXJkYXRhCisgICAgICAgKi8KKyAgICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhKGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9QQVNTV0RdKTsKKyNlbmRpZgorICAgICAgLyogU2V0IHBhc3N3ZCBjYWxsYmFjazogKi8KKyAgICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKGN0eCwgcGFzc3dkX2NhbGxiYWNrKTsKKyAgICB9CisKKworI2RlZmluZSBTU0xfQ0xJRU5UX0NFUlRfRVJSIFwKKyAgICAidW5hYmxlIHRvIHVzZSBjbGllbnQgY2VydGlmaWNhdGUgKG5vIGtleSBmb3VuZCBvciB3cm9uZyBwYXNzIHBocmFzZT8pIgorCisgICAgc3dpdGNoKGZpbGVfdHlwZSkgeworICAgIGNhc2UgU1NMX0ZJTEVUWVBFX1BFTToKKyAgICAgIC8qIFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUoKSBvbmx5IHdvcmtzIG9uIFBFTSBmaWxlcyAqLworICAgICAgaWYoU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfZmlsZSkgIT0gMSkgeworICAgICAgICBmYWlsZihkYXRhLCBTU0xfQ0xJRU5UX0NFUlRfRVJSKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgU1NMX0ZJTEVUWVBFX0FTTjE6CisgICAgICAvKiBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKCkgd29ya3Mgd2l0aCBlaXRoZXIgUEVNIG9yIEFTTjEsIGJ1dAorICAgICAgICAgd2UgdXNlIHRoZSBjYXNlIGFib3ZlIGZvciBQRU0gc28gdGhpcyBjYW4gb25seSBiZSBwZXJmb3JtZWQgd2l0aAorICAgICAgICAgQVNOMSBmaWxlcy4gKi8KKyAgICAgIGlmKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUoY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfdHlwZSkgIT0gMSkgeworICAgICAgICBmYWlsZihkYXRhLCBTU0xfQ0xJRU5UX0NFUlRfRVJSKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFNTTF9GSUxFVFlQRV9FTkdJTkU6CisjaWYgZGVmaW5lZChIQVZFX09QRU5TU0xfRU5HSU5FX0gpICYmIGRlZmluZWQoRU5HSU5FX0NUUkxfR0VUX0NNRF9GUk9NX05BTUUpCisgICAgICB7CisgICAgICAgIGlmKGRhdGEtPnN0YXRlLmVuZ2luZSkgeworICAgICAgICAgIGNvbnN0IGNoYXIgKmNtZF9uYW1lID0gIkxPQURfQ0VSVF9DVFJMIjsKKyAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgY29uc3QgY2hhciAqY2VydF9pZDsKKyAgICAgICAgICAgIFg1MDkgKmNlcnQ7CisgICAgICAgICAgfSBwYXJhbXM7CisKKyAgICAgICAgICBwYXJhbXMuY2VydF9pZCA9IGNlcnRfZmlsZTsKKyAgICAgICAgICBwYXJhbXMuY2VydCA9IE5VTEw7CisKKyAgICAgICAgICAvKiBEb2VzIHRoZSBlbmdpbmUgc3VwcG9ydHMgTE9BRF9DRVJUX0NUUkwgPyAqLworICAgICAgICAgIGlmKCFFTkdJTkVfY3RybChkYXRhLT5zdGF0ZS5lbmdpbmUsIEVOR0lORV9DVFJMX0dFVF9DTURfRlJPTV9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAodm9pZCAqKWNtZF9uYW1lLCBOVUxMKSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgInNzbCBlbmdpbmUgZG9lcyBub3Qgc3VwcG9ydCBsb2FkaW5nIGNlcnRpZmljYXRlcyIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogTG9hZCB0aGUgY2VydGlmaWNhdGUgZnJvbSB0aGUgZW5naW5lICovCisgICAgICAgICAgaWYoIUVOR0lORV9jdHJsX2NtZChkYXRhLT5zdGF0ZS5lbmdpbmUsIGNtZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgJnBhcmFtcywgTlVMTCwgMSkpIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJzc2wgZW5naW5lIGNhbm5vdCBsb2FkIGNsaWVudCBjZXJ0IHdpdGggaWQiCisgICAgICAgICAgICAgICAgICAiICclcycgWyVzXSIsIGNlcnRfZmlsZSwKKyAgICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZighcGFyYW1zLmNlcnQpIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJzc2wgZW5naW5lIGRpZG4ndCBpbml0aWFsaXplZCB0aGUgY2VydGlmaWNhdGUgIgorICAgICAgICAgICAgICAgICAgInByb3Blcmx5LiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYoU1NMX0NUWF91c2VfY2VydGlmaWNhdGUoY3R4LCBwYXJhbXMuY2VydCkgIT0gMSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgInVuYWJsZSB0byBzZXQgY2xpZW50IGNlcnRpZmljYXRlIik7CisgICAgICAgICAgICBYNTA5X2ZyZWUocGFyYW1zLmNlcnQpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorICAgICAgICAgIFg1MDlfZnJlZShwYXJhbXMuY2VydCk7IC8qIHdlIGRvbid0IG5lZWQgdGhlIGhhbmRsZSBhbnkgbW9yZS4uLiAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJjcnlwdG8gZW5naW5lIG5vdCBzZXQsIGNhbid0IGxvYWQgY2VydGlmaWNhdGUiKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgZmFpbGYoZGF0YSwgImZpbGUgdHlwZSBFTkcgZm9yIGNlcnRpZmljYXRlIG5vdCBpbXBsZW1lbnRlZCIpOworICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKworICAgIGNhc2UgU1NMX0ZJTEVUWVBFX1BLQ1MxMjoKKyAgICB7CisjaWZkZWYgSEFWRV9QS0NTMTJfU1VQUE9SVAorICAgICAgRklMRSAqZjsKKyAgICAgIFBLQ1MxMiAqcDEyOworICAgICAgRVZQX1BLRVkgKnByaTsKKyAgICAgIFNUQUNLX09GKFg1MDkpICpjYSA9IE5VTEw7CisgICAgICBpbnQgaTsKKworICAgICAgZiA9IGZvcGVuKGNlcnRfZmlsZSwicmIiKTsKKyAgICAgIGlmKCFmKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJjb3VsZCBub3Qgb3BlbiBQS0NTMTIgZmlsZSAnJXMnIiwgY2VydF9maWxlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBwMTIgPSBkMmlfUEtDUzEyX2ZwKGYsIE5VTEwpOworICAgICAgZmNsb3NlKGYpOworCisgICAgICBpZighcDEyKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJlcnJvciByZWFkaW5nIFBLQ1MxMiBmaWxlICclcyciLCBjZXJ0X2ZpbGUgKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIFBLQ1MxMl9QQkVfYWRkKCk7CisKKyAgICAgIGlmKCFQS0NTMTJfcGFyc2UocDEyLCBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEXSwgJnByaSwgJng1MDksCisgICAgICAgICAgICAgICAgICAgICAgICAmY2EpKSB7CisgICAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAgICJjb3VsZCBub3QgcGFyc2UgUEtDUzEyIGZpbGUsIGNoZWNrIHBhc3N3b3JkLCBPcGVuU1NMIGVycm9yICVzIiwKKyAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpICk7CisgICAgICAgIFBLQ1MxMl9mcmVlKHAxMik7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorCisgICAgICBQS0NTMTJfZnJlZShwMTIpOworCisgICAgICBpZihTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZShjdHgsIHg1MDkpICE9IDEpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgU1NMX0NMSUVOVF9DRVJUX0VSUik7CisgICAgICAgIEVWUF9QS0VZX2ZyZWUocHJpKTsKKyAgICAgICAgWDUwOV9mcmVlKHg1MDkpOworICAgICAgICBza19YNTA5X3BvcF9mcmVlKGNhLCBYNTA5X2ZyZWUpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgaWYoU1NMX0NUWF91c2VfUHJpdmF0ZUtleShjdHgsIHByaSkgIT0gMSkgeworICAgICAgICBmYWlsZihkYXRhLCAidW5hYmxlIHRvIHVzZSBwcml2YXRlIGtleSBmcm9tIFBLQ1MxMiBmaWxlICclcyciLAorICAgICAgICAgICAgICBjZXJ0X2ZpbGUpOworICAgICAgICBFVlBfUEtFWV9mcmVlKHByaSk7CisgICAgICAgIFg1MDlfZnJlZSh4NTA5KTsKKyAgICAgICAgc2tfWDUwOV9wb3BfZnJlZShjYSwgWDUwOV9mcmVlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIGlmKCFTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5IChjdHgpKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJwcml2YXRlIGtleSBmcm9tIFBLQ1MxMiBmaWxlICclcycgIgorICAgICAgICAgICAgICAiZG9lcyBub3QgbWF0Y2ggY2VydGlmaWNhdGUgaW4gc2FtZSBmaWxlIiwgY2VydF9maWxlKTsKKyAgICAgICAgRVZQX1BLRVlfZnJlZShwcmkpOworICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgICAgIHNrX1g1MDlfcG9wX2ZyZWUoY2EsIFg1MDlfZnJlZSk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgLyogU2V0IENlcnRpZmljYXRlIFZlcmlmaWNhdGlvbiBjaGFpbiAqLworICAgICAgaWYoY2EgJiYgc2tfWDUwOV9udW0oY2EpKSB7CisgICAgICAgIGZvcihpID0gMDsgaSA8IHNrX1g1MDlfbnVtKGNhKTsgaSsrKSB7CisgICAgICAgICAgaWYoIVNTTF9DVFhfYWRkX2V4dHJhX2NoYWluX2NlcnQoY3R4LHNrX1g1MDlfdmFsdWUoY2EsIGkpKSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgImNhbm5vdCBhZGQgY2VydGlmaWNhdGUgdG8gY2VydGlmaWNhdGUgY2hhaW4iKTsKKyAgICAgICAgICAgIEVWUF9QS0VZX2ZyZWUocHJpKTsKKyAgICAgICAgICAgIFg1MDlfZnJlZSh4NTA5KTsKKyAgICAgICAgICAgIHNrX1g1MDlfcG9wX2ZyZWUoY2EsIFg1MDlfZnJlZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYoIVNTTF9DVFhfYWRkX2NsaWVudF9DQShjdHgsIHNrX1g1MDlfdmFsdWUoY2EsIGkpKSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgImNhbm5vdCBhZGQgY2VydGlmaWNhdGUgdG8gY2xpZW50IENBIGxpc3QiKTsKKyAgICAgICAgICAgIEVWUF9QS0VZX2ZyZWUocHJpKTsKKyAgICAgICAgICAgIFg1MDlfZnJlZSh4NTA5KTsKKyAgICAgICAgICAgIHNrX1g1MDlfcG9wX2ZyZWUoY2EsIFg1MDlfZnJlZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgRVZQX1BLRVlfZnJlZShwcmkpOworICAgICAgWDUwOV9mcmVlKHg1MDkpOworICAgICAgc2tfWDUwOV9wb3BfZnJlZShjYSwgWDUwOV9mcmVlKTsKKyAgICAgIGNlcnRfZG9uZSA9IDE7CisgICAgICBicmVhazsKKyNlbHNlCisgICAgICBmYWlsZihkYXRhLCAiZmlsZSB0eXBlIFAxMiBmb3IgY2VydGlmaWNhdGUgbm90IHN1cHBvcnRlZCIpOworICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGZhaWxmKGRhdGEsICJub3Qgc3VwcG9ydGVkIGZpbGUgdHlwZSAnJXMnIGZvciBjZXJ0aWZpY2F0ZSIsIGNlcnRfdHlwZSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBmaWxlX3R5cGUgPSBkb19maWxlX3R5cGUoa2V5X3R5cGUpOworCisgICAgc3dpdGNoKGZpbGVfdHlwZSkgeworICAgIGNhc2UgU1NMX0ZJTEVUWVBFX1BFTToKKyAgICAgIGlmKGNlcnRfZG9uZSkKKyAgICAgICAgYnJlYWs7CisgICAgICBpZihrZXlfZmlsZSA9PSBOVUxMKQorICAgICAgICAvKiBjZXJ0ICYga2V5IGNhbiBvbmx5IGJlIGluIFBFTSBjYXNlIGluIHRoZSBzYW1lIGZpbGUgKi8KKyAgICAgICAga2V5X2ZpbGU9Y2VydF9maWxlOworICAgIGNhc2UgU1NMX0ZJTEVUWVBFX0FTTjE6CisgICAgICBpZihTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUoY3R4LCBrZXlfZmlsZSwgZmlsZV90eXBlKSAhPSAxKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gc2V0IHByaXZhdGUga2V5IGZpbGU6ICclcycgdHlwZSAlcyIsCisgICAgICAgICAgICAgIGtleV9maWxlLCBrZXlfdHlwZT9rZXlfdHlwZToiUEVNIik7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0xfRklMRVRZUEVfRU5HSU5FOgorI2lmZGVmIEhBVkVfT1BFTlNTTF9FTkdJTkVfSAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFhYIHN0aWxsIG5lZWRzIHNvbWUgd29yayAqLworICAgICAgICBFVlBfUEtFWSAqcHJpdl9rZXkgPSBOVUxMOworICAgICAgICBpZihkYXRhLT5zdGF0ZS5lbmdpbmUpIHsKKyNpZmRlZiBIQVZFX0VOR0lORV9MT0FEX0ZPVVJfQVJHUworICAgICAgICAgIFVJX01FVEhPRCAqdWlfbWV0aG9kID0gVUlfT3BlblNTTCgpOworI2VuZGlmCisgICAgICAgICAgLyogdGhlIHR5cGVjYXN0IGJlbG93IHdhcyBhZGRlZCB0byBwbGVhc2UgbWluZ3czMiAqLworICAgICAgICAgIHByaXZfa2V5ID0gKEVWUF9QS0VZICopCisgICAgICAgICAgICBFTkdJTkVfbG9hZF9wcml2YXRlX2tleShkYXRhLT5zdGF0ZS5lbmdpbmUsa2V5X2ZpbGUsCisjaWZkZWYgSEFWRV9FTkdJTkVfTE9BRF9GT1VSX0FSR1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpX21ldGhvZCwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BBU1NXRF0pOworICAgICAgICAgIGlmKCFwcml2X2tleSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgImZhaWxlZCB0byBsb2FkIHByaXZhdGUga2V5IGZyb20gY3J5cHRvIGVuZ2luZSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKFNTTF9DVFhfdXNlX1ByaXZhdGVLZXkoY3R4LCBwcml2X2tleSkgIT0gMSkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgInVuYWJsZSB0byBzZXQgcHJpdmF0ZSBrZXkiKTsKKyAgICAgICAgICAgIEVWUF9QS0VZX2ZyZWUocHJpdl9rZXkpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorICAgICAgICAgIEVWUF9QS0VZX2ZyZWUocHJpdl9rZXkpOyAgLyogd2UgZG9uJ3QgbmVlZCB0aGUgaGFuZGxlIGFueSBtb3JlLi4uICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgImNyeXB0byBlbmdpbmUgbm90IHNldCwgY2FuJ3QgbG9hZCBwcml2YXRlIGtleSIpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyNlbHNlCisgICAgICBmYWlsZihkYXRhLCAiZmlsZSB0eXBlIEVORyBmb3IgcHJpdmF0ZSBrZXkgbm90IHN1cHBvcnRlZCIpOworICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICBjYXNlIFNTTF9GSUxFVFlQRV9QS0NTMTI6CisgICAgICBpZighY2VydF9kb25lKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJmaWxlIHR5cGUgUDEyIGZvciBwcml2YXRlIGtleSBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGZhaWxmKGRhdGEsICJub3Qgc3VwcG9ydGVkIGZpbGUgdHlwZSBmb3IgcHJpdmF0ZSBrZXkiKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHNzbD1TU0xfbmV3KGN0eCk7CisgICAgaWYoTlVMTCA9PSBzc2wpIHsKKyAgICAgIGZhaWxmKGRhdGEsInVuYWJsZSB0byBjcmVhdGUgYW4gU1NMIHN0cnVjdHVyZSIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgeDUwOT1TU0xfZ2V0X2NlcnRpZmljYXRlKHNzbCk7CisKKyAgICAvKiBUaGlzIHZlcnNpb24gd2FzIHByb3ZpZGVkIGJ5IEV2YW4gSm9yZGFuIGFuZCBpcyBzdXBwb3NlZCB0byBub3QKKyAgICAgICBsZWFrIG1lbW9yeSBhcyB0aGUgcHJldmlvdXMgdmVyc2lvbjogKi8KKyAgICBpZih4NTA5ICE9IE5VTEwpIHsKKyAgICAgIEVWUF9QS0VZICpwa3RtcCA9IFg1MDlfZ2V0X3B1YmtleSh4NTA5KTsKKyAgICAgIEVWUF9QS0VZX2NvcHlfcGFyYW1ldGVycyhwa3RtcCxTU0xfZ2V0X3ByaXZhdGVrZXkoc3NsKSk7CisgICAgICBFVlBfUEtFWV9mcmVlKHBrdG1wKTsKKyAgICB9CisKKyAgICBTU0xfZnJlZShzc2wpOworCisgICAgLyogSWYgd2UgYXJlIHVzaW5nIERTQSwgd2UgY2FuIGNvcHkgdGhlIHBhcmFtZXRlcnMgZnJvbQorICAgICAqIHRoZSBwcml2YXRlIGtleSAqLworCisKKyAgICAvKiBOb3cgd2Uga25vdyB0aGF0IGEga2V5IGFuZCBjZXJ0IGhhdmUgYmVlbiBzZXQgYWdhaW5zdAorICAgICAqIHRoZSBTU0wgY29udGV4dCAqLworICAgIGlmKCFTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5KGN0eCkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJQcml2YXRlIGtleSBkb2VzIG5vdCBtYXRjaCB0aGUgY2VydGlmaWNhdGUgcHVibGljIGtleSIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorI2lmbmRlZiBIQVZFX1VTRVJEQVRBX0lOX1BXRF9DQUxMQkFDSworICAgIC8qIGVyYXNlIGl0IG5vdyAqLworICAgIG1lbXNldChnbG9iYWxfcGFzc3dkLCAwLCBzaXplb2YoZ2xvYmFsX3Bhc3N3ZCkpOworI2VuZGlmCisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKy8qIHJldHVybnMgbm9uLXplcm8gb24gZmFpbHVyZSAqLworc3RhdGljIGludCB4NTA5X25hbWVfb25lbGluZShYNTA5X05BTUUgKmEsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisjaWYgMAorICByZXR1cm4gWDUwOV9OQU1FX29uZWxpbmUoYSwgYnVmLCBzaXplKTsKKyNlbHNlCisgIEJJTyAqYmlvX291dCA9IEJJT19uZXcoQklPX3NfbWVtKCkpOworICBCVUZfTUVNICpiaW9tZW07CisgIGludCByYzsKKworICBpZighYmlvX291dCkKKyAgICByZXR1cm4gMTsgLyogYWxsb2MgZmFpbGVkISAqLworCisgIHJjID0gWDUwOV9OQU1FX3ByaW50X2V4KGJpb19vdXQsIGEsIDAsIFhOX0ZMQUdfU0VQX1NQTFVTX1NQQyk7CisgIEJJT19nZXRfbWVtX3B0cihiaW9fb3V0LCAmYmlvbWVtKTsKKworICBpZigoc2l6ZV90KWJpb21lbS0+bGVuZ3RoIDwgc2l6ZSkKKyAgICBzaXplID0gYmlvbWVtLT5sZW5ndGg7CisgIGVsc2UKKyAgICBzaXplLS07IC8qIGRvbid0IG92ZXJ3cml0ZSB0aGUgYnVmZmVyIGVuZCAqLworCisgIG1lbWNweShidWYsIGJpb21lbS0+ZGF0YSwgc2l6ZSk7CisgIGJ1ZltzaXplXT0wOworCisgIEJJT19mcmVlKGJpb19vdXQpOworCisgIHJldHVybiAhcmM7CisjZW5kaWYKK30KKworc3RhdGljCitpbnQgY2VydF92ZXJpZnlfY2FsbGJhY2soaW50IG9rLCBYNTA5X1NUT1JFX0NUWCAqY3R4KQoreworICBYNTA5ICplcnJfY2VydDsKKyAgY2hhciBidWZbMjU2XTsKKworICBlcnJfY2VydD1YNTA5X1NUT1JFX0NUWF9nZXRfY3VycmVudF9jZXJ0KGN0eCk7CisgICh2b2lkKXg1MDlfbmFtZV9vbmVsaW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShlcnJfY2VydCksIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICByZXR1cm4gb2s7Cit9CisKKy8qIFJldHVybiBlcnJvciBzdHJpbmcgZm9yIGxhc3QgT3BlblNTTCBlcnJvcgorICovCitzdGF0aWMgY2hhciAqU1NMX3N0cmVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisjaWZkZWYgSEFWRV9FUlJfRVJST1JfU1RSSU5HX04KKyAgLyogT3BlblNTTCAwLjkuNiBhbmQgbGF0ZXIgaGFzIGEgZnVuY3Rpb24gbmFtZWQKKyAgICAgRVJST19lcnJvcl9zdHJpbmdfbigpIHRoYXQgdGFrZXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBhcyBhCisgICAgIHRoaXJkIGFyZ3VtZW50ICovCisgIEVSUl9lcnJvcl9zdHJpbmdfbihlcnJvciwgYnVmLCBzaXplKTsKKyNlbHNlCisgICh2b2lkKSBzaXplOworICBFUlJfZXJyb3Jfc3RyaW5nKGVycm9yLCBidWYpOworI2VuZGlmCisgIHJldHVybiBidWY7Cit9CisKKyNlbmRpZiAvKiBVU0VfU1NMRUFZICovCisKKyNpZmRlZiBVU0VfU1NMRUFZCisvKioKKyAqIEdsb2JhbCBTU0wgaW5pdAorICoKKyAqIEByZXR2YWwgMCBlcnJvciBpbml0aWFsaXppbmcgU1NMCisgKiBAcmV0dmFsIDEgU1NMIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseQorICovCitpbnQgQ3VybF9vc3NsX2luaXQodm9pZCkKK3sKKyNpZmRlZiBIQVZFX0VOR0lORV9MT0FEX0JVSUxUSU5fRU5HSU5FUworICBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXMoKTsKKyNlbmRpZgorCisgIC8qIExldHMgZ2V0IG5pY2UgZXJyb3IgbWVzc2FnZXMgKi8KKyAgU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncygpOworCisgIC8qIEluaXQgdGhlIGdsb2JhbCBjaXBoZXJzIGFuZCBkaWdlc3RzICovCisgIGlmKCFTU0xlYXlfYWRkX3NzbF9hbGdvcml0aG1zKCkpCisgICAgcmV0dXJuIDA7CisKKyAgT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXMoKTsKKworICByZXR1cm4gMTsKK30KKworI2VuZGlmIC8qIFVTRV9TU0xFQVkgKi8KKworI2lmZGVmIFVTRV9TU0xFQVkKKworLyogR2xvYmFsIGNsZWFudXAgKi8KK3ZvaWQgQ3VybF9vc3NsX2NsZWFudXAodm9pZCkKK3sKKyAgLyogRnJlZSBjaXBoZXJzIGFuZCBkaWdlc3RzIGxpc3RzICovCisgIEVWUF9jbGVhbnVwKCk7CisKKyNpZmRlZiBIQVZFX0VOR0lORV9DTEVBTlVQCisgIC8qIEZyZWUgZW5naW5lIGxpc3QgKi8KKyAgRU5HSU5FX2NsZWFudXAoKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9DUllQVE9fQ0xFQU5VUF9BTExfRVhfREFUQQorICAvKiBGcmVlIE9wZW5TU0wgZXhfZGF0YSB0YWJsZSAqLworICBDUllQVE9fY2xlYW51cF9hbGxfZXhfZGF0YSgpOworI2VuZGlmCisKKyAgLyogRnJlZSBPcGVuU1NMIGVycm9yIHN0cmluZ3MgKi8KKyAgRVJSX2ZyZWVfc3RyaW5ncygpOworCisgIC8qIEZyZWUgdGhyZWFkIGxvY2FsIGVycm9yIHN0YXRlLCBkZXN0cm95aW5nIGhhc2ggdXBvbiB6ZXJvIHJlZmNvdW50ICovCisjaWZkZWYgSEFWRV9FUlJfUkVNT1ZFX1RIUkVBRF9TVEFURQorICBFUlJfcmVtb3ZlX3RocmVhZF9zdGF0ZShOVUxMKTsKKyNlbHNlCisgIEVSUl9yZW1vdmVfc3RhdGUoMCk7CisjZW5kaWYKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyBTU0xfcGVlayB0byBkZXRlcm1pbmUgY29ubmVjdGlvbiBzdGF0dXMuCisgKgorICogUmV0dXJuIGNvZGVzOgorICogICAgIDEgbWVhbnMgdGhlIGNvbm5lY3Rpb24gaXMgc3RpbGwgaW4gcGxhY2UKKyAqICAgICAwIG1lYW5zIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZAorICogICAgLTEgbWVhbnMgdGhlIGNvbm5lY3Rpb24gc3RhdHVzIGlzIHVua25vd24KKyAqLworaW50IEN1cmxfb3NzbF9jaGVja19jeG4oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBpbnQgcmM7CisgIGNoYXIgYnVmOworCisgIHJjID0gU1NMX3BlZWsoY29ubi0+c3NsW0ZJUlNUU09DS0VUXS5oYW5kbGUsICh2b2lkKikmYnVmLCAxKTsKKyAgaWYocmMgPiAwKQorICAgIHJldHVybiAxOyAvKiBjb25uZWN0aW9uIHN0aWxsIGluIHBsYWNlICovCisKKyAgaWYocmMgPT0gMCkKKyAgICByZXR1cm4gMDsgLyogY29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQgKi8KKworICByZXR1cm4gLTE7IC8qIGNvbm5lY3Rpb24gc3RhdHVzIHVua25vd24gKi8KK30KKworLyogU2VsZWN0cyBhbiBPcGVuU1NMIGNyeXB0byBlbmdpbmUKKyAqLworQ1VSTGNvZGUgQ3VybF9vc3NsX3NldF9lbmdpbmUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIGNvbnN0IGNoYXIgKmVuZ2luZSkKK3sKKyNpZiBkZWZpbmVkKFVTRV9TU0xFQVkpICYmIGRlZmluZWQoSEFWRV9PUEVOU1NMX0VOR0lORV9IKQorICBFTkdJTkUgKmU7CisKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDkwMDBMCisgIGUgPSBFTkdJTkVfYnlfaWQoZW5naW5lKTsKKyNlbHNlCisgIC8qIGF2b2lkIG1lbW9yeSBsZWFrICovCisgIGZvcihlID0gRU5HSU5FX2dldF9maXJzdCgpOyBlOyBlID0gRU5HSU5FX2dldF9uZXh0KGUpKSB7CisgICAgY29uc3QgY2hhciAqZV9pZCA9IEVOR0lORV9nZXRfaWQoZSk7CisgICAgaWYoIXN0cmNtcChlbmdpbmUsIGVfaWQpKQorICAgICAgYnJlYWs7CisgIH0KKyNlbmRpZgorCisgIGlmKCFlKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTCBFbmdpbmUgJyVzJyBub3QgZm91bmQiLCBlbmdpbmUpOworICAgIHJldHVybiBDVVJMRV9TU0xfRU5HSU5FX05PVEZPVU5EOworICB9CisKKyAgaWYoZGF0YS0+c3RhdGUuZW5naW5lKSB7CisgICAgRU5HSU5FX2ZpbmlzaChkYXRhLT5zdGF0ZS5lbmdpbmUpOworICAgIEVOR0lORV9mcmVlKGRhdGEtPnN0YXRlLmVuZ2luZSk7CisgICAgZGF0YS0+c3RhdGUuZW5naW5lID0gTlVMTDsKKyAgfQorICBpZighRU5HSU5FX2luaXQoZSkpIHsKKyAgICBjaGFyIGJ1ZlsyNTZdOworCisgICAgRU5HSU5FX2ZyZWUoZSk7CisgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCB0byBpbml0aWFsaXNlIFNTTCBFbmdpbmUgJyVzJzpcbiVzIiwKKyAgICAgICAgICBlbmdpbmUsIFNTTF9zdHJlcnJvcihFUlJfZ2V0X2Vycm9yKCksIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0VOR0lORV9JTklURkFJTEVEOworICB9CisgIGRhdGEtPnN0YXRlLmVuZ2luZSA9IGU7CisgIHJldHVybiBDVVJMRV9PSzsKKyNlbHNlCisgICh2b2lkKWVuZ2luZTsKKyAgZmFpbGYoZGF0YSwgIlNTTCBFbmdpbmUgbm90IHN1cHBvcnRlZCIpOworICByZXR1cm4gQ1VSTEVfU1NMX0VOR0lORV9OT1RGT1VORDsKKyNlbmRpZgorfQorCisvKiBTZXRzIGVuZ2luZSBhcyBkZWZhdWx0IGZvciBhbGwgU1NMIG9wZXJhdGlvbnMKKyAqLworQ1VSTGNvZGUgQ3VybF9vc3NsX3NldF9lbmdpbmVfZGVmYXVsdChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKK3sKKyNpZmRlZiBIQVZFX09QRU5TU0xfRU5HSU5FX0gKKyAgaWYoZGF0YS0+c3RhdGUuZW5naW5lKSB7CisgICAgaWYoRU5HSU5FX3NldF9kZWZhdWx0KGRhdGEtPnN0YXRlLmVuZ2luZSwgRU5HSU5FX01FVEhPRF9BTEwpID4gMCkgeworICAgICAgaW5mb2YoZGF0YSwic2V0IGRlZmF1bHQgY3J5cHRvIGVuZ2luZSAnJXMnXG4iLAorICAgICAgICAgICAgRU5HSU5FX2dldF9pZChkYXRhLT5zdGF0ZS5lbmdpbmUpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBmYWlsZihkYXRhLCAic2V0IGRlZmF1bHQgY3J5cHRvIGVuZ2luZSAnJXMnIGZhaWxlZCIsCisgICAgICAgICAgICBFTkdJTkVfZ2V0X2lkKGRhdGEtPnN0YXRlLmVuZ2luZSkpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9FTkdJTkVfU0VURkFJTEVEOworICAgIH0KKyAgfQorI2Vsc2UKKyAgKHZvaWQpIGRhdGE7CisjZW5kaWYKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKiBSZXR1cm4gbGlzdCBvZiBPcGVuU1NMIGNyeXB0byBlbmdpbmUgbmFtZXMuCisgKi8KK3N0cnVjdCBjdXJsX3NsaXN0ICpDdXJsX29zc2xfZW5naW5lc19saXN0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBzdHJ1Y3QgY3VybF9zbGlzdCAqbGlzdCA9IE5VTEw7CisjaWYgZGVmaW5lZChVU0VfU1NMRUFZKSAmJiBkZWZpbmVkKEhBVkVfT1BFTlNTTF9FTkdJTkVfSCkKKyAgc3RydWN0IGN1cmxfc2xpc3QgKmJlZzsKKyAgRU5HSU5FICplOworCisgIGZvcihlID0gRU5HSU5FX2dldF9maXJzdCgpOyBlOyBlID0gRU5HSU5FX2dldF9uZXh0KGUpKSB7CisgICAgYmVnID0gY3VybF9zbGlzdF9hcHBlbmQobGlzdCwgRU5HSU5FX2dldF9pZChlKSk7CisgICAgaWYoIWJlZykgeworICAgICAgY3VybF9zbGlzdF9mcmVlX2FsbChsaXN0KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBsaXN0ID0gYmVnOworICB9CisjZW5kaWYKKyAgKHZvaWQpIGRhdGE7CisgIHJldHVybiBsaXN0OworfQorCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIFNTTCBjb25uZWN0aW9uIGlzIGNsb3NlZC4KKyAqLwordm9pZCBDdXJsX29zc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKworICBpZihjb25uc3NsLT5oYW5kbGUpIHsKKyAgICAodm9pZClTU0xfc2h1dGRvd24oY29ubnNzbC0+aGFuZGxlKTsKKyAgICBTU0xfc2V0X2Nvbm5lY3Rfc3RhdGUoY29ubnNzbC0+aGFuZGxlKTsKKworICAgIFNTTF9mcmVlIChjb25uc3NsLT5oYW5kbGUpOworICAgIGNvbm5zc2wtPmhhbmRsZSA9IE5VTEw7CisgIH0KKyAgaWYoY29ubnNzbC0+Y3R4KSB7CisgICAgU1NMX0NUWF9mcmVlIChjb25uc3NsLT5jdHgpOworICAgIGNvbm5zc2wtPmN0eCA9IE5VTEw7CisgIH0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHNodXQgZG93biB0aGUgU1NMIGxheWVyIGJ1dCBrZWVwIHRoZQorICogc29ja2V0IG9wZW4gKENDQyAtIENsZWFyIENvbW1hbmQgQ2hhbm5lbCkKKyAqLworaW50IEN1cmxfb3NzbF9zaHV0ZG93bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIGludCByZXR2YWwgPSAwOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBjaGFyIGJ1ZlsxMjBdOyAvKiBXZSB3aWxsIHVzZSB0aGlzIGZvciB0aGUgT3BlblNTTCBlcnJvciBidWZmZXIsIHNvIGl0IGhhcworICAgICAgICAgICAgICAgICAgICB0byBiZSBhdCBsZWFzdCAxMjAgYnl0ZXMgbG9uZy4gKi8KKyAgdW5zaWduZWQgbG9uZyBzc2xlcnJvcjsKKyAgc3NpemVfdCBucmVhZDsKKyAgaW50IGJ1ZmZzaXplOworICBpbnQgZXJyOworICBpbnQgZG9uZSA9IDA7CisKKyAgLyogVGhpcyBoYXMgb25seSBiZWVuIHRlc3RlZCBvbiB0aGUgcHJvZnRwZCBzZXJ2ZXIsIGFuZCB0aGUgbW9kX3RscyBjb2RlCisgICAgIHNlbmRzIGEgY2xvc2Ugbm90aWZ5IGFsZXJ0IHdpdGhvdXQgd2FpdGluZyBmb3IgYSBjbG9zZSBub3RpZnkgYWxlcnQgaW4KKyAgICAgcmVzcG9uc2UuIFRodXMgd2Ugd2FpdCBmb3IgYSBjbG9zZSBub3RpZnkgYWxlcnQgZnJvbSB0aGUgc2VydmVyLCBidXQKKyAgICAgd2UgZG8gbm90IHNlbmQgb25lLiBMZXQncyBob3BlIG90aGVyIHNlcnZlcnMgZG8gdGhlIHNhbWUuLi4gKi8KKworICBpZihkYXRhLT5zZXQuZnRwX2NjYyA9PSBDVVJMRlRQU1NMX0NDQ19BQ1RJVkUpCisgICAgICAodm9pZClTU0xfc2h1dGRvd24oY29ubnNzbC0+aGFuZGxlKTsKKworICBpZihjb25uc3NsLT5oYW5kbGUpIHsKKyAgICBidWZmc2l6ZSA9IChpbnQpc2l6ZW9mKGJ1Zik7CisgICAgd2hpbGUoIWRvbmUpIHsKKyAgICAgIGludCB3aGF0ID0gQ3VybF9zb2NrZXRfcmVhZHkoY29ubi0+c29ja1tzb2NraW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMX1NPQ0tFVF9CQUQsIFNTTF9TSFVURE9XTl9USU1FT1VUKTsKKyAgICAgIGlmKHdoYXQgPiAwKSB7CisgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOworCisgICAgICAgIC8qIFNvbWV0aGluZyB0byByZWFkLCBsZXQncyBkbyBpdCBhbmQgaG9wZSB0aGF0IGl0IGlzIHRoZSBjbG9zZQorICAgICAgICAgICBub3RpZnkgYWxlcnQgZnJvbSB0aGUgc2VydmVyICovCisgICAgICAgIG5yZWFkID0gKHNzaXplX3QpU1NMX3JlYWQoY29ubi0+c3NsW3NvY2tpbmRleF0uaGFuZGxlLCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZnNpemUpOworICAgICAgICBlcnIgPSBTU0xfZ2V0X2Vycm9yKGNvbm4tPnNzbFtzb2NraW5kZXhdLmhhbmRsZSwgKGludClucmVhZCk7CisKKyAgICAgICAgc3dpdGNoKGVycikgeworICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOiAvKiB0aGlzIGlzIG5vdCBhbiBlcnJvciAqLworICAgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjogLyogbm8gbW9yZSBkYXRhICovCisgICAgICAgICAgLyogVGhpcyBpcyB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UuIFRoZXJlIHdhcyBubyBkYXRhIGJ1dCBvbmx5CisgICAgICAgICAgICAgdGhlIGNsb3NlIG5vdGlmeSBhbGVydCAqLworICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgLyogdGhlcmUncyBkYXRhIHBlbmRpbmcsIHJlLWludm9rZSBTU0xfcmVhZCgpICovCisgICAgICAgICAgaW5mb2YoZGF0YSwgIlNTTF9FUlJPUl9XQU5UX1JFQURcbiIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAgICAgIC8qIFNTTCB3YW50cyBhIHdyaXRlLiBSZWFsbHkgb2RkLiBMZXQncyBiYWlsIG91dC4gKi8KKyAgICAgICAgICBpbmZvZihkYXRhLCAiU1NMX0VSUk9SX1dBTlRfV1JJVEVcbiIpOworICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIC8qIG9wZW5zc2wvc3NsLmggc2F5cyAibG9vayBhdCBlcnJvciBzdGFjay9yZXR1cm4gdmFsdWUvZXJybm8iICovCisgICAgICAgICAgc3NsZXJyb3IgPSBFUlJfZ2V0X2Vycm9yKCk7CisgICAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNTTCByZWFkOiAlcywgZXJybm8gJWQiLAorICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoc3NsZXJyb3IsIGJ1ZiksCisgICAgICAgICAgICAgICAgU09DS0VSUk5PKTsKKyAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZigwID09IHdoYXQpIHsKKyAgICAgICAgLyogdGltZW91dCAqLworICAgICAgICBmYWlsZihkYXRhLCAiU1NMIHNodXRkb3duIHRpbWVvdXQiKTsKKyAgICAgICAgZG9uZSA9IDE7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogYW55dGhpbmcgdGhhdCBnZXRzIGhlcmUgaXMgZmF0YWxseSBiYWQgKi8KKyAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CisgICAgICAgIHJldHZhbCA9IC0xOworICAgICAgICBkb25lID0gMTsKKyAgICAgIH0KKyAgICB9IC8qIHdoaWxlKCktbG9vcCBmb3IgdGhlIHNlbGVjdCgpICovCisKKyAgICBpZihkYXRhLT5zZXQudmVyYm9zZSkgeworI2lmZGVmIEhBVkVfU1NMX0dFVF9TSFVURE9XTgorICAgICAgc3dpdGNoKFNTTF9nZXRfc2h1dGRvd24oY29ubnNzbC0+aGFuZGxlKSkgeworICAgICAgY2FzZSBTU0xfU0VOVF9TSFVURE9XTjoKKyAgICAgICAgaW5mb2YoZGF0YSwgIlNTTF9nZXRfc2h1dGRvd24oKSByZXR1cm5lZCBTU0xfU0VOVF9TSFVURE9XTlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTU0xfUkVDRUlWRURfU0hVVERPV046CisgICAgICAgIGluZm9mKGRhdGEsICJTU0xfZ2V0X3NodXRkb3duKCkgcmV0dXJuZWQgU1NMX1JFQ0VJVkVEX1NIVVRET1dOXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNTTF9TRU5UX1NIVVRET1dOfFNTTF9SRUNFSVZFRF9TSFVURE9XTjoKKyAgICAgICAgaW5mb2YoZGF0YSwgIlNTTF9nZXRfc2h1dGRvd24oKSByZXR1cm5lZCBTU0xfU0VOVF9TSFVURE9XTnwiCisgICAgICAgICAgICAgICJTU0xfUkVDRUlWRURfX1NIVVRET1dOXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICBTU0xfZnJlZSAoY29ubnNzbC0+aGFuZGxlKTsKKyAgICBjb25uc3NsLT5oYW5kbGUgPSBOVUxMOworICB9CisgIHJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgQ3VybF9vc3NsX3Nlc3Npb25fZnJlZSh2b2lkICpwdHIpCit7CisgIC8qIGZyZWUgdGhlIElEICovCisgIFNTTF9TRVNTSU9OX2ZyZWUocHRyKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlICdkYXRhJyBzdHJ1Y3QgaXMgZ29pbmcgYXdheS4gQ2xvc2UKKyAqIGRvd24gZXZlcnl0aGluZyBhbmQgZnJlZSBhbGwgcmVzb3VyY2VzIQorICovCitpbnQgQ3VybF9vc3NsX2Nsb3NlX2FsbChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKK3sKKyNpZmRlZiBIQVZFX09QRU5TU0xfRU5HSU5FX0gKKyAgaWYoZGF0YS0+c3RhdGUuZW5naW5lKSB7CisgICAgRU5HSU5FX2ZpbmlzaChkYXRhLT5zdGF0ZS5lbmdpbmUpOworICAgIEVOR0lORV9mcmVlKGRhdGEtPnN0YXRlLmVuZ2luZSk7CisgICAgZGF0YS0+c3RhdGUuZW5naW5lID0gTlVMTDsKKyAgfQorI2Vsc2UKKyAgKHZvaWQpZGF0YTsKKyNlbmRpZgorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhc24xX291dHB1dChjb25zdCBBU04xX1VUQ1RJTUUgKnRtLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplb2ZidWYpCit7CisgIGNvbnN0IGNoYXIgKmFzbjFfc3RyaW5nOworICBpbnQgZ210PUZBTFNFOworICBpbnQgaTsKKyAgaW50IHllYXI9MCxtb250aD0wLGRheT0wLGhvdXI9MCxtaW51dGU9MCxzZWNvbmQ9MDsKKworICBpPXRtLT5sZW5ndGg7CisgIGFzbjFfc3RyaW5nPShjb25zdCBjaGFyICopdG0tPmRhdGE7CisKKyAgaWYoaSA8IDEwKQorICAgIHJldHVybiAxOworICBpZihhc24xX3N0cmluZ1tpLTFdID09ICdaJykKKyAgICBnbXQ9VFJVRTsKKyAgZm9yKGk9MDsgaTwxMDsgaSsrKQorICAgIGlmKChhc24xX3N0cmluZ1tpXSA+ICc5JykgfHwgKGFzbjFfc3RyaW5nW2ldIDwgJzAnKSkKKyAgICAgIHJldHVybiAyOworCisgIHllYXI9IChhc24xX3N0cmluZ1swXS0nMCcpKjEwKyhhc24xX3N0cmluZ1sxXS0nMCcpOworICBpZih5ZWFyIDwgNTApCisgICAgeWVhcis9MTAwOworCisgIG1vbnRoPSAoYXNuMV9zdHJpbmdbMl0tJzAnKSoxMCsoYXNuMV9zdHJpbmdbM10tJzAnKTsKKyAgaWYoKG1vbnRoID4gMTIpIHx8IChtb250aCA8IDEpKQorICAgIHJldHVybiAzOworCisgIGRheT0gKGFzbjFfc3RyaW5nWzRdLScwJykqMTArKGFzbjFfc3RyaW5nWzVdLScwJyk7CisgIGhvdXI9IChhc24xX3N0cmluZ1s2XS0nMCcpKjEwKyhhc24xX3N0cmluZ1s3XS0nMCcpOworICBtaW51dGU9ICAoYXNuMV9zdHJpbmdbOF0tJzAnKSoxMCsoYXNuMV9zdHJpbmdbOV0tJzAnKTsKKworICBpZigoYXNuMV9zdHJpbmdbMTBdID49ICcwJykgJiYgKGFzbjFfc3RyaW5nWzEwXSA8PSAnOScpICYmCisgICAgIChhc24xX3N0cmluZ1sxMV0gPj0gJzAnKSAmJiAoYXNuMV9zdHJpbmdbMTFdIDw9ICc5JykpCisgICAgc2Vjb25kPSAoYXNuMV9zdHJpbmdbMTBdLScwJykqMTArKGFzbjFfc3RyaW5nWzExXS0nMCcpOworCisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mYnVmLAorICAgICAgICAgICAiJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQgJXMiLAorICAgICAgICAgICB5ZWFyKzE5MDAsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCAoZ210PyJHTVQiOiIiKSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogTWF0Y2ggYSBob3N0bmFtZSBhZ2FpbnN0IGEgd2lsZGNhcmQgcGF0dGVybi4KKyAqIEUuZy4KKyAqICAiZm9vLmhvc3QuY29tIiBtYXRjaGVzICIqLmhvc3QuY29tIi4KKyAqCisgKiBXZSBhcmUgYSBiaXQgbW9yZSBsaWJlcmFsIHRoYW4gUkZDMjgxOCBkZXNjcmliZXMgaW4gdGhhdCB3ZQorICogYWNjZXB0IG11bHRpcGxlICIqIiBpbiBwYXR0ZXJuIChzaW1pbGFyIHRvIHdoYXQgc29tZSBvdGhlciBicm93c2VycyBkbykuCisgKiBFLmcuCisgKiAgImFiYy5kZWYuZG9tYWluLmNvbSIgc2hvdWxkIHN0cmlja2x5IG5vdCBtYXRjaCAiKi5kb21haW4uY29tIiwgYnV0IHdlCisgKiAgZG9uJ3QgY29uc2lkZXIgIi4iIHRvIGJlIGltcG9ydGFudCBpbiBDRVJUIGNoZWNraW5nLgorICovCisjZGVmaW5lIEhPU1RfTk9NQVRDSCAwCisjZGVmaW5lIEhPU1RfTUFUQ0ggICAxCisKK3N0YXRpYyBpbnQgaG9zdG1hdGNoKGNvbnN0IGNoYXIgKmhvc3RuYW1lLCBjb25zdCBjaGFyICpwYXR0ZXJuKQoreworICBmb3IoOzspIHsKKyAgICBjaGFyIGMgPSAqcGF0dGVybisrOworCisgICAgaWYoYyA9PSAnXDAnKQorICAgICAgcmV0dXJuICgqaG9zdG5hbWUgPyBIT1NUX05PTUFUQ0ggOiBIT1NUX01BVENIKTsKKworICAgIGlmKGMgPT0gJyonKSB7CisgICAgICBjID0gKnBhdHRlcm47CisgICAgICBpZihjID09ICdcMCcpICAgICAgLyogIipcMCIgbWF0Y2hlcyBhbnl0aGluZyByZW1haW5pbmcgKi8KKyAgICAgICAgcmV0dXJuIEhPU1RfTUFUQ0g7CisKKyAgICAgIHdoaWxlKCpob3N0bmFtZSkgeworICAgICAgICAvKiBUaGUgb25seSByZWN1cnNpdmUgZnVuY3Rpb24gaW4gbGliY3VybCEgKi8KKyAgICAgICAgaWYoaG9zdG1hdGNoKGhvc3RuYW1lKysscGF0dGVybikgPT0gSE9TVF9NQVRDSCkKKyAgICAgICAgICByZXR1cm4gSE9TVF9NQVRDSDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmKEN1cmxfcmF3X3RvdXBwZXIoYykgIT0gQ3VybF9yYXdfdG91cHBlcigqaG9zdG5hbWUrKykpCisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gSE9TVF9OT01BVENIOworfQorCitzdGF0aWMgaW50CitjZXJ0X2hvc3RjaGVjayhjb25zdCBjaGFyICptYXRjaF9wYXR0ZXJuLCBjb25zdCBjaGFyICpob3N0bmFtZSkKK3sKKyAgaWYoIW1hdGNoX3BhdHRlcm4gfHwgISptYXRjaF9wYXR0ZXJuIHx8CisgICAgICAhaG9zdG5hbWUgfHwgISpob3N0bmFtZSkgLyogc2FuaXR5IGNoZWNrICovCisgICAgcmV0dXJuIDA7CisKKyAgaWYoQ3VybF9yYXdfZXF1YWwoaG9zdG5hbWUsIG1hdGNoX3BhdHRlcm4pKSAvKiB0cml2aWFsIGNhc2UgKi8KKyAgICByZXR1cm4gMTsKKworICBpZihob3N0bWF0Y2goaG9zdG5hbWUsbWF0Y2hfcGF0dGVybikgPT0gSE9TVF9NQVRDSCkKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFF1b3RlIGZyb20gUkZDMjgxOCBzZWN0aW9uIDMuMSAiU2VydmVyIElkZW50aXR5IgorCisgICBJZiBhIHN1YmplY3RBbHROYW1lIGV4dGVuc2lvbiBvZiB0eXBlIGROU05hbWUgaXMgcHJlc2VudCwgdGhhdCBNVVNUCisgICBiZSB1c2VkIGFzIHRoZSBpZGVudGl0eS4gT3RoZXJ3aXNlLCB0aGUgKG1vc3Qgc3BlY2lmaWMpIENvbW1vbiBOYW1lCisgICBmaWVsZCBpbiB0aGUgU3ViamVjdCBmaWVsZCBvZiB0aGUgY2VydGlmaWNhdGUgTVVTVCBiZSB1c2VkLiBBbHRob3VnaAorICAgdGhlIHVzZSBvZiB0aGUgQ29tbW9uIE5hbWUgaXMgZXhpc3RpbmcgcHJhY3RpY2UsIGl0IGlzIGRlcHJlY2F0ZWQgYW5kCisgICBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0aWVzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGUgZE5TTmFtZSBpbnN0ZWFkLgorCisgICBNYXRjaGluZyBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlIG1hdGNoaW5nIHJ1bGVzIHNwZWNpZmllZCBieQorICAgW1JGQzI0NTldLiAgSWYgbW9yZSB0aGFuIG9uZSBpZGVudGl0eSBvZiBhIGdpdmVuIHR5cGUgaXMgcHJlc2VudCBpbgorICAgdGhlIGNlcnRpZmljYXRlIChlLmcuLCBtb3JlIHRoYW4gb25lIGROU05hbWUgbmFtZSwgYSBtYXRjaCBpbiBhbnkgb25lCisgICBvZiB0aGUgc2V0IGlzIGNvbnNpZGVyZWQgYWNjZXB0YWJsZS4pIE5hbWVzIG1heSBjb250YWluIHRoZSB3aWxkY2FyZAorICAgY2hhcmFjdGVyICogd2hpY2ggaXMgY29uc2lkZXJlZCB0byBtYXRjaCBhbnkgc2luZ2xlIGRvbWFpbiBuYW1lCisgICBjb21wb25lbnQgb3IgY29tcG9uZW50IGZyYWdtZW50LiBFLmcuLCAqLmEuY29tIG1hdGNoZXMgZm9vLmEuY29tIGJ1dAorICAgbm90IGJhci5mb28uYS5jb20uIGYqLmNvbSBtYXRjaGVzIGZvby5jb20gYnV0IG5vdCBiYXIuY29tLgorCisgICBJbiBzb21lIGNhc2VzLCB0aGUgVVJJIGlzIHNwZWNpZmllZCBhcyBhbiBJUCBhZGRyZXNzIHJhdGhlciB0aGFuIGEKKyAgIGhvc3RuYW1lLiBJbiB0aGlzIGNhc2UsIHRoZSBpUEFkZHJlc3Mgc3ViamVjdEFsdE5hbWUgbXVzdCBiZSBwcmVzZW50CisgICBpbiB0aGUgY2VydGlmaWNhdGUgYW5kIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgSVAgaW4gdGhlIFVSSS4KKworKi8KK3N0YXRpYyBDVVJMY29kZSB2ZXJpZnlob3N0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDkgKnNlcnZlcl9jZXJ0KQoreworICBpbnQgbWF0Y2hlZCA9IC0xOyAvKiAtMSBpcyBubyBhbHRlcm5hdGl2ZSBtYXRjaCB5ZXQsIDEgbWVhbnMgbWF0Y2ggYW5kIDAKKyAgICAgICAgICAgICAgICAgICAgICAgbWVhbnMgbWlzbWF0Y2ggKi8KKyAgaW50IHRhcmdldCA9IEdFTl9ETlM7IC8qIHRhcmdldCB0eXBlLCBHRU5fRE5TIG9yIEdFTl9JUEFERCAqLworICBzaXplX3QgYWRkcmxlbiA9IDA7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSAqYWx0bmFtZXM7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgc3RydWN0IGluNl9hZGRyIGFkZHI7CisjZWxzZQorICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworI2VuZGlmCisgIENVUkxjb2RlIHJlcyA9IENVUkxFX09LOworCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgaWYoY29ubi0+Yml0cy5pcHY2X2lwICYmCisgICAgIEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBjb25uLT5ob3N0Lm5hbWUsICZhZGRyKSkgeworICAgIHRhcmdldCA9IEdFTl9JUEFERDsKKyAgICBhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CisgIH0KKyAgZWxzZQorI2VuZGlmCisgICAgaWYoQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgY29ubi0+aG9zdC5uYW1lLCAmYWRkcikpIHsKKyAgICAgIHRhcmdldCA9IEdFTl9JUEFERDsKKyAgICAgIGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOworICAgIH0KKworICAvKiBnZXQgYSAibGlzdCIgb2YgYWx0ZXJuYXRpdmUgbmFtZXMgKi8KKyAgYWx0bmFtZXMgPSBYNTA5X2dldF9leHRfZDJpKHNlcnZlcl9jZXJ0LCBOSURfc3ViamVjdF9hbHRfbmFtZSwgTlVMTCwgTlVMTCk7CisKKyAgaWYoYWx0bmFtZXMpIHsKKyAgICBpbnQgbnVtYWx0czsKKyAgICBpbnQgaTsKKworICAgIC8qIGdldCBhbW91bnQgb2YgYWx0ZXJuYXRpdmVzLCBSRkMyNDU5IGNsYWltcyB0aGVyZSBNVVNUIGJlIGF0IGxlYXN0CisgICAgICAgb25lLCBidXQgd2UgZG9uJ3QgZGVwZW5kIG9uIGl0Li4uICovCisgICAgbnVtYWx0cyA9IHNrX0dFTkVSQUxfTkFNRV9udW0oYWx0bmFtZXMpOworCisgICAgLyogbG9vcCB0aHJvdWdoIGFsbCBhbHRlcm5hdGl2ZXMgd2hpbGUgbm9uZSBoYXMgbWF0Y2hlZCAqLworICAgIGZvcihpPTA7IChpPG51bWFsdHMpICYmIChtYXRjaGVkICE9IDEpOyBpKyspIHsKKyAgICAgIC8qIGdldCBhIGhhbmRsZSB0byBhbHRlcm5hdGl2ZSBuYW1lIG51bWJlciBpICovCisgICAgICBjb25zdCBHRU5FUkFMX05BTUUgKmNoZWNrID0gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKGFsdG5hbWVzLCBpKTsKKworICAgICAgLyogb25seSBjaGVjayBhbHRlcm5hdGl2ZXMgb2YgdGhlIHNhbWUgdHlwZSB0aGUgdGFyZ2V0IGlzICovCisgICAgICBpZihjaGVjay0+dHlwZSA9PSB0YXJnZXQpIHsKKyAgICAgICAgLyogZ2V0IGRhdGEgYW5kIGxlbmd0aCAqLworICAgICAgICBjb25zdCBjaGFyICphbHRwdHIgPSAoY2hhciAqKUFTTjFfU1RSSU5HX2RhdGEoY2hlY2stPmQuaWE1KTsKKyAgICAgICAgc2l6ZV90IGFsdGxlbiA9IChzaXplX3QpIEFTTjFfU1RSSU5HX2xlbmd0aChjaGVjay0+ZC5pYTUpOworCisgICAgICAgIHN3aXRjaCh0YXJnZXQpIHsKKyAgICAgICAgY2FzZSBHRU5fRE5TOiAvKiBuYW1lL3BhdHRlcm4gY29tcGFyaXNvbiAqLworICAgICAgICAgIC8qIFRoZSBPcGVuU1NMIG1hbiBwYWdlIGV4cGxpY2l0bHkgc2F5czogIkluIGdlbmVyYWwgaXQgY2Fubm90IGJlCisgICAgICAgICAgICAgYXNzdW1lZCB0aGF0IHRoZSBkYXRhIHJldHVybmVkIGJ5IEFTTjFfU1RSSU5HX2RhdGEoKSBpcyBudWxsCisgICAgICAgICAgICAgdGVybWluYXRlZCBvciBkb2VzIG5vdCBjb250YWluIGVtYmVkZGVkIG51bGxzLiIgQnV0IGFsc28gdGhhdAorICAgICAgICAgICAgICJUaGUgYWN0dWFsIGZvcm1hdCBvZiB0aGUgZGF0YSB3aWxsIGRlcGVuZCBvbiB0aGUgYWN0dWFsIHN0cmluZworICAgICAgICAgICAgIHR5cGUgaXRzZWxmOiBmb3IgZXhhbXBsZSBmb3IgYW5kIElBNVN0cmluZyB0aGUgZGF0YSB3aWxsIGJlIEFTQ0lJIgorCisgICAgICAgICAgICAgR2lzbGUgcmVzZWFyY2hlZCB0aGUgT3BlblNTTCBzb3VyY2VzOgorICAgICAgICAgICAgICJJIGNoZWNrZWQgdGhlIDAuOS42IGFuZCAwLjkuOCBzb3VyY2VzIGJlZm9yZSBteSBwYXRjaCBhbmQKKyAgICAgICAgICAgICBpdCBhbHdheXMgMC10ZXJtaW5hdGVzIGFuIElBNVN0cmluZy4iCisgICAgICAgICAgKi8KKyAgICAgICAgICBpZigoYWx0bGVuID09IHN0cmxlbihhbHRwdHIpKSAmJgorICAgICAgICAgICAgIC8qIGlmIHRoaXMgaXNuJ3QgdHJ1ZSwgdGhlcmUgd2FzIGFuIGVtYmVkZGVkIHplcm8gaW4gdGhlIG5hbWUKKyAgICAgICAgICAgICAgICBzdHJpbmcgYW5kIHdlIGNhbm5vdCBtYXRjaCBpdC4gKi8KKyAgICAgICAgICAgICBjZXJ0X2hvc3RjaGVjayhhbHRwdHIsIGNvbm4tPmhvc3QubmFtZSkpCisgICAgICAgICAgICBtYXRjaGVkID0gMTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBtYXRjaGVkID0gMDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdFTl9JUEFERDogLyogSVAgYWRkcmVzcyBjb21wYXJpc29uICovCisgICAgICAgICAgLyogY29tcGFyZSBhbHRlcm5hdGl2ZSBJUCBhZGRyZXNzIGlmIHRoZSBkYXRhIGNodW5rIGlzIHRoZSBzYW1lIHNpemUKKyAgICAgICAgICAgICBvdXIgc2VydmVyIElQIGFkZHJlc3MgaXMgKi8KKyAgICAgICAgICBpZigoYWx0bGVuID09IGFkZHJsZW4pICYmICFtZW1jbXAoYWx0cHRyLCAmYWRkciwgYWx0bGVuKSkKKyAgICAgICAgICAgIG1hdGNoZWQgPSAxOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1hdGNoZWQgPSAwOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIEdFTkVSQUxfTkFNRVNfZnJlZShhbHRuYW1lcyk7CisgIH0KKworICBpZihtYXRjaGVkID09IDEpCisgICAgLyogYW4gYWx0ZXJuYXRpdmUgbmFtZSBtYXRjaGVkIHRoZSBzZXJ2ZXIgaG9zdG5hbWUgKi8KKyAgICBpbmZvZihkYXRhLCAiXHQgc3ViamVjdEFsdE5hbWU6ICVzIG1hdGNoZWRcbiIsIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworICBlbHNlIGlmKG1hdGNoZWQgPT0gMCkgeworICAgIC8qIGFuIGFsdGVybmF0aXZlIG5hbWUgZmllbGQgZXhpc3RlZCwgYnV0IGRpZG4ndCBtYXRjaCBhbmQgdGhlbgorICAgICAgIHdlIE1VU1QgZmFpbCAqLworICAgIGluZm9mKGRhdGEsICJcdCBzdWJqZWN0QWx0TmFtZSBkb2VzIG5vdCBtYXRjaCAlc1xuIiwgY29ubi0+aG9zdC5kaXNwbmFtZSk7CisgICAgcmVzID0gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworICB9CisgIGVsc2UgeworICAgIC8qIHdlIGhhdmUgdG8gbG9vayB0byB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgY29tbW9uTmFtZSBpbiB0aGUKKyAgICAgICBkaXN0aW5ndWlzaGVkIG9uZSB0byBnZXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgb25lLiAqLworICAgIGludCBqLGk9LTEgOworCisvKiBUaGUgZm9sbG93aW5nIGlzIGRvbmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiAwLjkuNmIgKi8KKworICAgIHVuc2lnbmVkIGNoYXIgKm51bHN0ciA9ICh1bnNpZ25lZCBjaGFyICopIiI7CisgICAgdW5zaWduZWQgY2hhciAqcGVlcl9DTiA9IG51bHN0cjsKKworICAgIFg1MDlfTkFNRSAqbmFtZSA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZShzZXJ2ZXJfY2VydCkgOworICAgIGlmKG5hbWUpCisgICAgICB3aGlsZSgoaiA9IFg1MDlfTkFNRV9nZXRfaW5kZXhfYnlfTklEKG5hbWUsIE5JRF9jb21tb25OYW1lLCBpKSk+PTApCisgICAgICAgIGk9ajsKKworICAgIC8qIHdlIGhhdmUgdGhlIG5hbWUgZW50cnkgYW5kIHdlIHdpbGwgbm93IGNvbnZlcnQgdGhpcyB0byBhIHN0cmluZworICAgICAgIHRoYXQgd2UgY2FuIHVzZSBmb3IgY29tcGFyaXNvbi4gRG9pbmcgdGhpcyB3ZSBzdXBwb3J0IEJNUHN0cmluZywKKyAgICAgICBVVEY4IGV0Yy4gKi8KKworICAgIGlmKGk+PTApIHsKKyAgICAgIEFTTjFfU1RSSU5HICp0bXAgPSBYNTA5X05BTUVfRU5UUllfZ2V0X2RhdGEoWDUwOV9OQU1FX2dldF9lbnRyeShuYW1lLGkpKTsKKworICAgICAgLyogSW4gT3BlblNTTCAwLjkuN2QgYW5kIGVhcmxpZXIsIEFTTjFfU1RSSU5HX3RvX1VURjggZmFpbHMgaWYgdGhlIGlucHV0CisgICAgICAgICBpcyBhbHJlYWR5IFVURi04IGVuY29kZWQuIFdlIGNoZWNrIGZvciB0aGlzIGNhc2UgYW5kIGNvcHkgdGhlIHJhdworICAgICAgICAgc3RyaW5nIG1hbnVhbGx5IHRvIGF2b2lkIHRoZSBwcm9ibGVtLiBUaGlzIGNvZGUgY2FuIGJlIG1hZGUKKyAgICAgICAgIGNvbmRpdGlvbmFsIGluIHRoZSBmdXR1cmUgd2hlbiBPcGVuU1NMIGhhcyBiZWVuIGZpeGVkLiBXb3JrLWFyb3VuZAorICAgICAgICAgYnJvdWdodCBieSBBbGV4aXMgUy4gTC4gQ2FydmFsaG8uICovCisgICAgICBpZih0bXApIHsKKyAgICAgICAgaWYoQVNOMV9TVFJJTkdfdHlwZSh0bXApID09IFZfQVNOMV9VVEY4U1RSSU5HKSB7CisgICAgICAgICAgaiA9IEFTTjFfU1RSSU5HX2xlbmd0aCh0bXApOworICAgICAgICAgIGlmKGogPj0gMCkgeworICAgICAgICAgICAgcGVlcl9DTiA9IE9QRU5TU0xfbWFsbG9jKGorMSk7CisgICAgICAgICAgICBpZihwZWVyX0NOKSB7CisgICAgICAgICAgICAgIG1lbWNweShwZWVyX0NOLCBBU04xX1NUUklOR19kYXRhKHRtcCksIGopOworICAgICAgICAgICAgICBwZWVyX0NOW2pdID0gJ1wwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiBub3QgYSBVVEY4IG5hbWUgKi8KKyAgICAgICAgICBqID0gQVNOMV9TVFJJTkdfdG9fVVRGOCgmcGVlcl9DTiwgdG1wKTsKKworICAgICAgICBpZihwZWVyX0NOICYmIChjdXJseF91enRvc2koc3RybGVuKChjaGFyICopcGVlcl9DTikpICE9IGopKSB7CisgICAgICAgICAgLyogdGhlcmUgd2FzIGEgdGVybWluYXRpbmcgemVybyBiZWZvcmUgdGhlIGVuZCBvZiBzdHJpbmcsIHRoaXMKKyAgICAgICAgICAgICBjYW5ub3QgbWF0Y2ggYW5kIHdlIHJldHVybiBmYWlsdXJlISAqLworICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGlsbGVnYWwgY2VydCBuYW1lIGZpZWxkIik7CisgICAgICAgICAgcmVzID0gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYocGVlcl9DTiA9PSBudWxzdHIpCisgICAgICAgcGVlcl9DTiA9IE5VTEw7CisgICAgZWxzZSB7CisgICAgICAvKiBjb252ZXJ0IHBlZXJfQ04gZnJvbSBVVEY4ICovCisgICAgICBDVVJMY29kZSByYyA9IEN1cmxfY29udmVydF9mcm9tX3V0ZjgoZGF0YSwgcGVlcl9DTiwgc3RybGVuKHBlZXJfQ04pKTsKKyAgICAgIC8qIEN1cmxfY29udmVydF9mcm9tX3V0ZjggY2FsbHMgZmFpbGYgaWYgdW5zdWNjZXNzZnVsICovCisgICAgICBpZihyYykgeworICAgICAgICBPUEVOU1NMX2ZyZWUocGVlcl9DTik7CisgICAgICAgIHJldHVybiByYzsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZihyZXMpCisgICAgICAvKiBlcnJvciBhbHJlYWR5IGRldGVjdGVkLCBwYXNzIHRocm91Z2ggKi8KKyAgICAgIDsKKyAgICBlbHNlIGlmKCFwZWVyX0NOKSB7CisgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgIlNTTDogdW5hYmxlIHRvIG9idGFpbiBjb21tb24gbmFtZSBmcm9tIHBlZXIgY2VydGlmaWNhdGUiKTsKKyAgICAgIHJlcyA9IENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICB9CisgICAgZWxzZSBpZighY2VydF9ob3N0Y2hlY2soKGNvbnN0IGNoYXIgKilwZWVyX0NOLCBjb25uLT5ob3N0Lm5hbWUpKSB7CisgICAgICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeWhvc3QgPiAxKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNlcnRpZmljYXRlIHN1YmplY3QgbmFtZSAnJXMnIGRvZXMgbm90IG1hdGNoICIKKyAgICAgICAgICAgICAgInRhcmdldCBob3N0IG5hbWUgJyVzJyIsIHBlZXJfQ04sIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworICAgICAgICByZXMgPSBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGluZm9mKGRhdGEsICJcdCBjb21tb24gbmFtZTogJXMgKGRvZXMgbm90IG1hdGNoICclcycpXG4iLAorICAgICAgICAgICAgICBwZWVyX0NOLCBjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpbmZvZihkYXRhLCAiXHQgY29tbW9uIG5hbWU6ICVzIChtYXRjaGVkKVxuIiwgcGVlcl9DTik7CisgICAgfQorICAgIGlmKHBlZXJfQ04pCisgICAgICBPUEVOU1NMX2ZyZWUocGVlcl9DTik7CisgIH0KKyAgcmV0dXJuIHJlczsKK30KKyNlbmRpZiAvKiBVU0VfU1NMRUFZICovCisKKy8qIFRoZSBTU0xfQ1RSTF9TRVRfTVNHX0NBTExCQUNLIGRvZXNuJ3QgZXhpc3QgaW4gYW5jaWVudCBPcGVuU1NMIHZlcnNpb25zCisgICBhbmQgdGh1cyB0aGlzIGNhbm5vdCBiZSBkb25lIHRoZXJlLiAqLworI2lmZGVmIFNTTF9DVFJMX1NFVF9NU0dfQ0FMTEJBQ0sKKworc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9tc2dfdHlwZShpbnQgc3NsX3ZlciwgaW50IG1zZykKK3sKKyAgaWYoc3NsX3ZlciA9PSBTU0wyX1ZFUlNJT05fTUFKT1IpIHsKKyAgICBzd2l0Y2ggKG1zZykgeworICAgICAgY2FzZSBTU0wyX01UX0VSUk9SOgorICAgICAgICByZXR1cm4gIkVycm9yIjsKKyAgICAgIGNhc2UgU1NMMl9NVF9DTElFTlRfSEVMTE86CisgICAgICAgIHJldHVybiAiQ2xpZW50IGhlbGxvIjsKKyAgICAgIGNhc2UgU1NMMl9NVF9DTElFTlRfTUFTVEVSX0tFWToKKyAgICAgICAgcmV0dXJuICJDbGllbnQga2V5IjsKKyAgICAgIGNhc2UgU1NMMl9NVF9DTElFTlRfRklOSVNIRUQ6CisgICAgICAgIHJldHVybiAiQ2xpZW50IGZpbmlzaGVkIjsKKyAgICAgIGNhc2UgU1NMMl9NVF9TRVJWRVJfSEVMTE86CisgICAgICAgIHJldHVybiAiU2VydmVyIGhlbGxvIjsKKyAgICAgIGNhc2UgU1NMMl9NVF9TRVJWRVJfVkVSSUZZOgorICAgICAgICByZXR1cm4gIlNlcnZlciB2ZXJpZnkiOworICAgICAgY2FzZSBTU0wyX01UX1NFUlZFUl9GSU5JU0hFRDoKKyAgICAgICAgcmV0dXJuICJTZXJ2ZXIgZmluaXNoZWQiOworICAgICAgY2FzZSBTU0wyX01UX1JFUVVFU1RfQ0VSVElGSUNBVEU6CisgICAgICAgIHJldHVybiAiUmVxdWVzdCBDRVJUIjsKKyAgICAgIGNhc2UgU1NMMl9NVF9DTElFTlRfQ0VSVElGSUNBVEU6CisgICAgICAgIHJldHVybiAiQ2xpZW50IENFUlQiOworICAgIH0KKyAgfQorICBlbHNlIGlmKHNzbF92ZXIgPT0gU1NMM19WRVJTSU9OX01BSk9SKSB7CisgICAgc3dpdGNoIChtc2cpIHsKKyAgICAgIGNhc2UgU1NMM19NVF9IRUxMT19SRVFVRVNUOgorICAgICAgICByZXR1cm4gIkhlbGxvIHJlcXVlc3QiOworICAgICAgY2FzZSBTU0wzX01UX0NMSUVOVF9IRUxMTzoKKyAgICAgICAgcmV0dXJuICJDbGllbnQgaGVsbG8iOworICAgICAgY2FzZSBTU0wzX01UX1NFUlZFUl9IRUxMTzoKKyAgICAgICAgcmV0dXJuICJTZXJ2ZXIgaGVsbG8iOworICAgICAgY2FzZSBTU0wzX01UX0NFUlRJRklDQVRFOgorICAgICAgICByZXR1cm4gIkNFUlQiOworICAgICAgY2FzZSBTU0wzX01UX1NFUlZFUl9LRVlfRVhDSEFOR0U6CisgICAgICAgIHJldHVybiAiU2VydmVyIGtleSBleGNoYW5nZSI7CisgICAgICBjYXNlIFNTTDNfTVRfQ0xJRU5UX0tFWV9FWENIQU5HRToKKyAgICAgICAgcmV0dXJuICJDbGllbnQga2V5IGV4Y2hhbmdlIjsKKyAgICAgIGNhc2UgU1NMM19NVF9DRVJUSUZJQ0FURV9SRVFVRVNUOgorICAgICAgICByZXR1cm4gIlJlcXVlc3QgQ0VSVCI7CisgICAgICBjYXNlIFNTTDNfTVRfU0VSVkVSX0RPTkU6CisgICAgICAgIHJldHVybiAiU2VydmVyIGZpbmlzaGVkIjsKKyAgICAgIGNhc2UgU1NMM19NVF9DRVJUSUZJQ0FURV9WRVJJRlk6CisgICAgICAgIHJldHVybiAiQ0VSVCB2ZXJpZnkiOworICAgICAgY2FzZSBTU0wzX01UX0ZJTklTSEVEOgorICAgICAgICByZXR1cm4gIkZpbmlzaGVkIjsKKyAgICB9CisgIH0KKyAgcmV0dXJuICJVbmtub3duIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnRsc19ydF90eXBlKGludCB0eXBlKQoreworICByZXR1cm4gKAorICAgIHR5cGUgPT0gU1NMM19SVF9DSEFOR0VfQ0lQSEVSX1NQRUMgPyAiVExTIGNoYW5nZSBjaXBoZXIsICIgOgorICAgIHR5cGUgPT0gU1NMM19SVF9BTEVSVCAgICAgICAgICAgICAgPyAiVExTIGFsZXJ0LCAiICAgICAgICAgOgorICAgIHR5cGUgPT0gU1NMM19SVF9IQU5EU0hBS0UgICAgICAgICAgPyAiVExTIGhhbmRzaGFrZSwgIiAgICAgOgorICAgIHR5cGUgPT0gU1NMM19SVF9BUFBMSUNBVElPTl9EQVRBICAgPyAiVExTIGFwcCBkYXRhLCAiICAgICAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVExTIFVua25vd24sICIpOworfQorCisKKy8qCisgKiBPdXIgY2FsbGJhY2sgZnJvbSB0aGUgU1NML1RMUyBsYXllcnMuCisgKi8KK3N0YXRpYyB2b2lkIHNzbF90bHNfdHJhY2UoaW50IGRpcmVjdGlvbiwgaW50IHNzbF92ZXIsIGludCBjb250ZW50X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgY29uc3QgU1NMICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE7CisgIGNvbnN0IGNoYXIgKm1zZ19uYW1lLCAqdGxzX3J0X25hbWU7CisgIGNoYXIgc3NsX2J1ZlsxMDI0XTsKKyAgaW50ICB2ZXIsIG1zZ190eXBlLCB0eHRfbGVuOworCisgIGlmKCFjb25uIHx8ICFjb25uLT5kYXRhIHx8ICFjb25uLT5kYXRhLT5zZXQuZmRlYnVnIHx8CisgICAgIChkaXJlY3Rpb24gIT0gMCAmJiBkaXJlY3Rpb24gIT0gMSkpCisgICAgcmV0dXJuOworCisgIGRhdGEgPSBjb25uLT5kYXRhOworICBzc2xfdmVyID4+PSA4OworICB2ZXIgPSAoc3NsX3ZlciA9PSBTU0wyX1ZFUlNJT05fTUFKT1IgPyAnMicgOgorICAgICAgICAgc3NsX3ZlciA9PSBTU0wzX1ZFUlNJT05fTUFKT1IgPyAnMycgOiAnPycpOworCisgIC8qIFNTTHYyIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIFRMUyByZWNvcmQtdHlwZSBoZWFkZXJzLCBzbyBPcGVuU1NMCisgICAqIGFsd2F5cyBwYXNzLXVwIGNvbnRlbnQtdHlwZSBhcyAwLiBCdXQgdGhlIGludGVyZXN0aW5nIG1lc3NhZ2UtdHlwZQorICAgKiBpcyBhdCAnYnVmWzBdJy4KKyAgICovCisgIGlmKHNzbF92ZXIgPT0gU1NMM19WRVJTSU9OX01BSk9SICYmIGNvbnRlbnRfdHlwZSAhPSAwKQorICAgIHRsc19ydF9uYW1lID0gdGxzX3J0X3R5cGUoY29udGVudF90eXBlKTsKKyAgZWxzZQorICAgIHRsc19ydF9uYW1lID0gIiI7CisKKyAgbXNnX3R5cGUgPSAqKGNoYXIqKWJ1ZjsKKyAgbXNnX25hbWUgPSBzc2xfbXNnX3R5cGUoc3NsX3ZlciwgbXNnX3R5cGUpOworCisgIHR4dF9sZW4gPSBzbnByaW50Zihzc2xfYnVmLCBzaXplb2Yoc3NsX2J1ZiksICJTU0x2JWMsICVzJXMgKCVkKTpcbiIsCisgICAgICAgICAgICAgICAgICAgICB2ZXIsIHRsc19ydF9uYW1lLCBtc2dfbmFtZSwgbXNnX3R5cGUpOworICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX1RFWFQsIHNzbF9idWYsIChzaXplX3QpdHh0X2xlbiwgTlVMTCk7CisKKyAgQ3VybF9kZWJ1ZyhkYXRhLCAoZGlyZWN0aW9uID09IDEpID8gQ1VSTElORk9fU1NMX0RBVEFfT1VUIDoKKyAgICAgICAgICAgICBDVVJMSU5GT19TU0xfREFUQV9JTiwgKGNoYXIgKilidWYsIGxlbiwgTlVMTCk7CisgICh2b2lkKSBzc2w7Cit9CisjZW5kaWYKKworI2lmZGVmIFVTRV9TU0xFQVkKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorIyAgZGVmaW5lIHVzZV9zbmkoeCkgIHNuaSA9ICh4KQorI2Vsc2UKKyMgIGRlZmluZSB1c2Vfc25pKHgpICBDdXJsX25vcF9zdG10CisjZW5kaWYKKworc3RhdGljIENVUkxjb2RlCitvc3NsX2Nvbm5lY3Rfc3RlcDEoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCit7CisgIENVUkxjb2RlIHJldGNvZGUgPSBDVVJMRV9PSzsKKworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIFNTTF9NRVRIT0RfUVVBTCBTU0xfTUVUSE9EICpyZXFfbWV0aG9kPU5VTEw7CisgIHZvaWQgKnNzbF9zZXNzaW9uaWQ9TlVMTDsKKyAgWDUwOV9MT09LVVAgKmxvb2t1cD1OVUxMOworICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIGxvbmcgY3R4X29wdGlvbnM7CisjaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorICBib29sIHNuaTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKKyNlbHNlCisgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisjZW5kaWYKKyNlbmRpZgorCisgIERFQlVHQVNTRVJUKHNzbF9jb25uZWN0XzEgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSk7CisKKyAgLyogTWFrZSBmdW5ueSBzdHVmZiB0byBnZXQgcmFuZG9tIGlucHV0ICovCisgIEN1cmxfb3NzbF9zZWVkKGRhdGEpOworCisgIC8qIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBiZWVuIHRvbGQgdG8gdXNlIGFuIGV4cGxpY2l0IFNTTC9UTFMgdmVyc2lvbiAqLworCisgIHN3aXRjaChkYXRhLT5zZXQuc3NsLnZlcnNpb24pIHsKKyAgZGVmYXVsdDoKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKKyNpZmRlZiBVU0VfVExTX1NSUAorICAgIGlmKGRhdGEtPnNldC5zc2wuYXV0aHR5cGUgPT0gQ1VSTF9UTFNBVVRIX1NSUCkgeworICAgICAgaW5mb2YoZGF0YSwgIlNldCB2ZXJzaW9uIFRMU3YxIGZvciBTUlAgYXV0aG9yaXNhdGlvblxuIik7CisgICAgICByZXFfbWV0aG9kID0gVExTdjFfY2xpZW50X21ldGhvZCgpIDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgLyogd2UgdHJ5IHRvIGZpZ3VyZSBvdXQgdmVyc2lvbiAqLworICAgIHJlcV9tZXRob2QgPSBTU0x2MjNfY2xpZW50X21ldGhvZCgpOworICAgIHVzZV9zbmkoVFJVRSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgorICAgIHJlcV9tZXRob2QgPSBUTFN2MV9jbGllbnRfbWV0aG9kKCk7CisgICAgdXNlX3NuaShUUlVFKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6CisjaWZkZWYgT1BFTlNTTF9OT19TU0wyCisgICAgZmFpbGYoZGF0YSwgIk9wZW5TU0wgd2FzIGJ1aWx0IHdpdGhvdXQgU1NMdjIgc3VwcG9ydCIpOworICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CisjZWxzZQorI2lmZGVmIFVTRV9UTFNfU1JQCisgICAgaWYoZGF0YS0+c2V0LnNzbC5hdXRodHlwZSA9PSBDVVJMX1RMU0FVVEhfU1JQKQorICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworI2VuZGlmCisgICAgcmVxX21ldGhvZCA9IFNTTHYyX2NsaWVudF9tZXRob2QoKTsKKyAgICB1c2Vfc25pKEZBTFNFKTsKKyAgICBicmVhazsKKyNlbmRpZgorICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKKyNpZmRlZiBVU0VfVExTX1NSUAorICAgIGlmKGRhdGEtPnNldC5zc2wuYXV0aHR5cGUgPT0gQ1VSTF9UTFNBVVRIX1NSUCkKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyNlbmRpZgorICAgIHJlcV9tZXRob2QgPSBTU0x2M19jbGllbnRfbWV0aG9kKCk7CisgICAgdXNlX3NuaShGQUxTRSk7CisgICAgYnJlYWs7CisgIH0KKworICBpZihjb25uc3NsLT5jdHgpCisgICAgU1NMX0NUWF9mcmVlKGNvbm5zc2wtPmN0eCk7CisgIGNvbm5zc2wtPmN0eCA9IFNTTF9DVFhfbmV3KHJlcV9tZXRob2QpOworCisgIGlmKCFjb25uc3NsLT5jdHgpIHsKKyAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBjcmVhdGUgYSBjb250ZXh0OiAlcyIsCisgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhFUlJfcGVla19lcnJvcigpLCBOVUxMKSk7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworI2lmZGVmIFNTTF9NT0RFX1JFTEVBU0VfQlVGRkVSUworICBTU0xfQ1RYX3NldF9tb2RlKGNvbm5zc2wtPmN0eCwgU1NMX01PREVfUkVMRUFTRV9CVUZGRVJTKTsKKyNlbmRpZgorCisjaWZkZWYgU1NMX0NUUkxfU0VUX01TR19DQUxMQkFDSworICBpZihkYXRhLT5zZXQuZmRlYnVnICYmIGRhdGEtPnNldC52ZXJib3NlKSB7CisgICAgLyogdGhlIFNTTCB0cmFjZSBjYWxsYmFjayBpcyBvbmx5IHVzZWQgZm9yIHZlcmJvc2UgbG9nZ2luZyBzbyB3ZSBvbmx5CisgICAgICAgaW5mb3JtIGFib3V0IGZhaWx1cmVzIG9mIHNldHRpbmcgaXQgKi8KKyAgICBpZighU1NMX0NUWF9jYWxsYmFja19jdHJsKGNvbm5zc2wtPmN0eCwgU1NMX0NUUkxfU0VUX01TR19DQUxMQkFDSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAoKikodm9pZCkpc3NsX3Rsc190cmFjZSkpIHsKKyAgICAgIGluZm9mKGRhdGEsICJTU0w6IGNvdWxkbid0IHNldCBjYWxsYmFjayFcbiIpOworICAgIH0KKyAgICBlbHNlIGlmKCFTU0xfQ1RYX2N0cmwoY29ubnNzbC0+Y3R4LCBTU0xfQ1RSTF9TRVRfTVNHX0NBTExCQUNLX0FSRywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubikpIHsKKyAgICAgIGluZm9mKGRhdGEsICJTU0w6IGNvdWxkbid0IHNldCBjYWxsYmFjayBhcmd1bWVudCFcbiIpOworICAgIH0KKyAgfQorI2VuZGlmCisKKyAgLyogT3BlblNTTCBjb250YWlucyBjb2RlIHRvIHdvcmstYXJvdW5kIGxvdHMgb2YgYnVncyBhbmQgZmxhd3MgaW4gdmFyaW91cworICAgICBTU0wtaW1wbGVtZW50YXRpb25zLiBTU0xfQ1RYX3NldF9vcHRpb25zKCkgaXMgdXNlZCB0byBlbmFibGVkIHRob3NlCisgICAgIHdvcmstYXJvdW5kcy4gVGhlIG1hbiBwYWdlIGZvciB0aGlzIG9wdGlvbiBzdGF0ZXMgdGhhdCBTU0xfT1BfQUxMIGVuYWJsZXMKKyAgICAgYWxsIHRoZSB3b3JrLWFyb3VuZHMgYW5kIHRoYXQgIkl0IGlzIHVzdWFsbHkgc2FmZSB0byB1c2UgU1NMX09QX0FMTCB0bworICAgICBlbmFibGUgdGhlIGJ1ZyB3b3JrYXJvdW5kIG9wdGlvbnMgaWYgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWV3aGF0IGJyb2tlbgorICAgICBpbXBsZW1lbnRhdGlvbnMgaXMgZGVzaXJlZC4iCisKKyAgICAgVGhlICItbm9fdGlja2V0IiBvcHRpb24gd2FzIGludHJvZHVjZWQgaW4gT3BlbnNzbDAuOS44ai4gSXQncyBhIGZsYWcgdG8KKyAgICAgZGlzYWJsZSAicmZjNDUwN2JpcyBzZXNzaW9uIHRpY2tldCBzdXBwb3J0Ii4gIHJmYzQ1MDdiaXMgd2FzIGxhdGVyIHR1cm5lZAorICAgICBpbnRvIHRoZSBwcm9wZXIgUkZDNTA3NyBpdCBzZWVtczogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTA3NworCisgICAgIFRoZSBlbmFibGVkIGV4dGVuc2lvbiBjb25jZXJucyB0aGUgc2Vzc2lvbiBtYW5hZ2VtZW50LiBJIHdvbmRlciBob3cgb2Z0ZW4KKyAgICAgbGliY3VybCBzdG9wcyBhIGNvbm5lY3Rpb24gYW5kIHRoZW4gcmVzdW1lcyBhIFRMUyBzZXNzaW9uLiBhbHNvLCBzZW5kaW5nCisgICAgIHRoZSBzZXNzaW9uIGRhdGEgaXMgc29tZSBvdmVyaGVhZC4gLkkgc3VnZ2VzdCB0aGF0IHlvdSBqdXN0IHVzZSB5b3VyCisgICAgIHByb3Bvc2VkIHBhdGNoICh3aGljaCBleHBsaWNpdGx5IGRpc2FibGVzIFRJQ0tFVCkuCisKKyAgICAgSWYgc29tZW9uZSB3cml0ZXMgYW4gYXBwbGljYXRpb24gd2l0aCBsaWJjdXJsIGFuZCBvcGVuc3NsIHdobyB3YW50cyB0bworICAgICBlbmFibGUgdGhlIGZlYXR1cmUsIG9uZSBjYW4gZG8gdGhpcyBpbiB0aGUgU1NMIGNhbGxiYWNrLgorCisgICAgIFNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRyBvcHRpb24gZW5hYmxpbmcgYWxsb3dlZCBwcm9wZXIKKyAgICAgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIHdlYiBzZXJ2ZXIgTmV0c2NhcGUgRW50ZXJwcmlzZSBTZXJ2ZXIgMi4wLjEgd2hpY2gKKyAgICAgd2FzIHJlbGVhc2VkIGJhY2sgaW4gMTk5Ni4KKworICAgICBEdWUgdG8gQ1ZFLTIwMTAtNDE4MCwgb3B0aW9uIFNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRyBoYXMKKyAgICAgYmVjb21lIGluZWZmZWN0aXZlIGFzIG9mIE9wZW5TU0wgMC45LjhxIGFuZCAxLjAuMGMuIEluIG9yZGVyIHRvIG1pdGlnYXRlCisgICAgIENWRS0yMDEwLTQxODAgd2hlbiB1c2luZyBwcmV2aW91cyBPcGVuU1NMIHZlcnNpb25zIHdlIG5vIGxvbmdlciBlbmFibGUKKyAgICAgdGhpcyBvcHRpb24gcmVnYXJkbGVzcyBvZiBPcGVuU1NMIHZlcnNpb24gYW5kIFNTTF9PUF9BTEwgZGVmaW5pdGlvbi4KKworICAgICBPcGVuU1NMIGFkZGVkIGEgd29yay1hcm91bmQgZm9yIGEgU1NMIDMuMC9UTFMgMS4wIENCQyB2dWxuZXJhYmlsaXR5CisgICAgIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35ib2RvL3Rscy1jYmMudHh0KS4gSW4gMC45LjZlIHRoZXkgYWRkZWQgYSBiaXQgdG8KKyAgICAgU1NMX09QX0FMTCB0aGF0IF9kaXNhYmxlc18gdGhhdCB3b3JrLWFyb3VuZCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQKKyAgICAgU1NMX09QX0FMTCBpcyBkb2N1bWVudGVkIHRvIGRvICJyYXRoZXIgaGFybWxlc3MiIHdvcmthcm91bmRzLiBJbiBvcmRlciB0bworICAgICBrZWVwIHRoZSBzZWN1cmUgd29yay1hcm91bmQsIHRoZSBTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIGJpdAorICAgICBtdXN0IG5vdCBiZSBzZXQuCisgICovCisKKyAgY3R4X29wdGlvbnMgPSBTU0xfT1BfQUxMOworCisjaWZkZWYgU1NMX09QX05PX1RJQ0tFVAorICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVElDS0VUOworI2VuZGlmCisKKyNpZmRlZiBTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUcKKyAgLyogbWl0aWdhdGUgQ1ZFLTIwMTAtNDE4MCAqLworICBjdHhfb3B0aW9ucyAmPSB+U1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHOworI2VuZGlmCisKKyNpZmRlZiBTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTCisgIC8qIHVubGVzcyB0aGUgdXNlciBleHBsaWNpdGx5IGFzayB0byBhbGxvdyB0aGUgcHJvdG9jb2wgdnVsbmVyYWJpbGl0eSB3ZQorICAgICB1c2UgdGhlIHdvcmstYXJvdW5kICovCisgIGlmKCFjb25uLT5kYXRhLT5zZXQuc3NsX2VuYWJsZV9iZWFzdCkKKyAgICBjdHhfb3B0aW9ucyAmPSB+U1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUzsKKyNlbmRpZgorCisgIC8qIGRpc2FibGUgU1NMdjIgaW4gdGhlIGRlZmF1bHQgY2FzZSAoaS5lLiBhbGxvdyBTU0x2MyBhbmQgVExTdjEpICovCisgIGlmKGRhdGEtPnNldC5zc2wudmVyc2lvbiA9PSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVCkKKyAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjI7CisKKyAgU1NMX0NUWF9zZXRfb3B0aW9ucyhjb25uc3NsLT5jdHgsIGN0eF9vcHRpb25zKTsKKworI2lmIDAKKyAgLyoKKyAgICogTm90IHN1cmUgaXQncyBuZWVkZWQgdG8gdGVsbCBTU0xfY29ubmVjdCgpIHRoYXQgc29ja2V0IGlzCisgICAqIG5vbi1ibG9ja2luZy4gSXQgZG9lc24ndCBzZWVtIHRvIGNhcmUsIGJ1dCBqdXN0IHJldHVybiB3aXRoCisgICAqIFNTTF9FUlJPUl9XQU5UX3guCisgICAqLworICBpZihkYXRhLT5zdGF0ZS51c2VkX2ludGVyZmFjZSA9PSBDdXJsX2lmX211bHRpKQorICAgIFNTTF9DVFhfY3RybChjb25uc3NsLT5jdHgsIEJJT19DX1NFVF9OQklPLCAxLCBOVUxMKTsKKyNlbmRpZgorCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdIHx8IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfVFlQRV0pIHsKKyAgICBpZighY2VydF9zdHVmZihjb25uLAorICAgICAgICAgICAgICAgICAgIGNvbm5zc2wtPmN0eCwKKyAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSwKKyAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1RZUEVdLAorICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0sCisgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1RZUEVdKSkgeworICAgICAgLyogZmFpbGYoKSBpcyBhbHJlYWR5IGRvbmUgaW4gY2VydF9zdHVmZigpICovCisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOworICAgIH0KKyAgfQorCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DSVBIRVJfTElTVF0pIHsKKyAgICBpZighU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoY29ubnNzbC0+Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0lQSEVSX0xJU1RdKSkgeworICAgICAgZmFpbGYoZGF0YSwgImZhaWxlZCBzZXR0aW5nIGNpcGhlciBsaXN0Iik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NJUEhFUjsKKyAgICB9CisgIH0KKworI2lmZGVmIFVTRV9UTFNfU1JQCisgIGlmKGRhdGEtPnNldC5zc2wuYXV0aHR5cGUgPT0gQ1VSTF9UTFNBVVRIX1NSUCkgeworICAgIGluZm9mKGRhdGEsICJVc2luZyBUTFMtU1JQIHVzZXJuYW1lOiAlc1xuIiwgZGF0YS0+c2V0LnNzbC51c2VybmFtZSk7CisKKyAgICBpZighU1NMX0NUWF9zZXRfc3JwX3VzZXJuYW1lKGNvbm5zc2wtPmN0eCwgZGF0YS0+c2V0LnNzbC51c2VybmFtZSkpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJVbmFibGUgdG8gc2V0IFNSUCB1c2VyIG5hbWUiKTsKKyAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgICAgfQorICAgIGlmKCFTU0xfQ1RYX3NldF9zcnBfcGFzc3dvcmQoY29ubnNzbC0+Y3R4LGRhdGEtPnNldC5zc2wucGFzc3dvcmQpKSB7CisgICAgICBmYWlsZihkYXRhLCAiZmFpbGVkIHNldHRpbmcgU1JQIHBhc3N3b3JkIik7CisgICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOworICAgIH0KKyAgICBpZighZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NJUEhFUl9MSVNUXSkgeworICAgICAgaW5mb2YoZGF0YSwgIlNldHRpbmcgY2lwaGVyIGxpc3QgU1JQXG4iKTsKKworICAgICAgaWYoIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGNvbm5zc2wtPmN0eCwgIlNSUCIpKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgc2V0dGluZyBTUlAgY2lwaGVyIGxpc3QiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DSVBIRVI7CisgICAgICB9CisgICAgfQorICB9CisjZW5kaWYKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0gfHwgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF0pIHsKKyAgICAvKiB0ZWxsIFNTTCB3aGVyZSB0byBmaW5kIENBIGNlcnRpZmljYXRlcyB0aGF0IGFyZSB1c2VkIHRvIHZlcmlmeQorICAgICAgIHRoZSBzZXJ2ZXJzIGNlcnRpZmljYXRlLiAqLworICAgIGlmKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjb25uc3NsLT5jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdKSkgeworICAgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgICAgIC8qIEZhaWwgaWYgd2UgaW5zaXN0IG9uIHN1Y2Nlc3NmdWxseSB2ZXJpZnlpbmcgdGhlIHNlcnZlci4gKi8KKyAgICAgICAgZmFpbGYoZGF0YSwiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIgorICAgICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4gIENBcGF0aDogJXNcbiIsCisgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdPworICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXTogIm5vbmUiLAorICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIXT8KKyAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF0gOiAibm9uZSIpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIEp1c3QgY29udGludWUgd2l0aCBhIHdhcm5pbmcgaWYgbm8gc3RyaWN0ICBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24KKyAgICAgICAgICAgaXMgcmVxdWlyZWQuICovCisgICAgICAgIGluZm9mKGRhdGEsICJlcnJvciBzZXR0aW5nIGNlcnRpZmljYXRlIHZlcmlmeSBsb2NhdGlvbnMsIgorICAgICAgICAgICAgICAiIGNvbnRpbnVpbmcgYW55d2F5OlxuIik7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogRXZlcnl0aGluZyBpcyBmaW5lLiAqLworICAgICAgaW5mb2YoZGF0YSwgInN1Y2Nlc3NmdWxseSBzZXQgY2VydGlmaWNhdGUgdmVyaWZ5IGxvY2F0aW9uczpcbiIpOworICAgIH0KKyAgICBpbmZvZihkYXRhLAorICAgICAgICAgICIgIENBZmlsZTogJXNcbiIKKyAgICAgICAgICAiICBDQXBhdGg6ICVzXG4iLAorICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdID8gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV06CisgICAgICAgICAgIm5vbmUiLAorICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdID8gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF06CisgICAgICAgICAgIm5vbmUiKTsKKyAgfQorCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFXSkgeworICAgIC8qIHRlbGwgU1NMIHdoZXJlIHRvIGZpbmQgQ1JMIGZpbGUgdGhhdCBpcyB1c2VkIHRvIGNoZWNrIGNlcnRpZmljYXRlCisgICAgICogcmV2b2NhdGlvbiAqLworICAgIGxvb2t1cD1YNTA5X1NUT1JFX2FkZF9sb29rdXAoU1NMX0NUWF9nZXRfY2VydF9zdG9yZShjb25uc3NsLT5jdHgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9MT09LVVBfZmlsZSgpKTsKKyAgICBpZighbG9va3VwIHx8CisgICAgICAgKCFYNTA5X2xvYWRfY3JsX2ZpbGUobG9va3VwLGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSkpICkgeworICAgICAgZmFpbGYoZGF0YSwiZXJyb3IgbG9hZGluZyBDUkwgZmlsZTogJXNcbiIsCisgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV0pOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DUkxfQkFERklMRTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBFdmVyeXRoaW5nIGlzIGZpbmUuICovCisgICAgICBpbmZvZihkYXRhLCAic3VjY2Vzc2Z1bGx5IGxvYWQgQ1JMIGZpbGU6XG4iKTsKKyAgICAgIFg1MDlfU1RPUkVfc2V0X2ZsYWdzKFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoY29ubnNzbC0+Y3R4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX0NSTF9DSEVDS3xYNTA5X1ZfRkxBR19DUkxfQ0hFQ0tfQUxMKTsKKyAgICB9CisgICAgaW5mb2YoZGF0YSwKKyAgICAgICAgICAiICBDUkxmaWxlOiAlc1xuIiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVdID8KKyAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV06ICJub25lIik7CisgIH0KKworICAvKiBTU0wgYWx3YXlzIHRyaWVzIHRvIHZlcmlmeSB0aGUgcGVlciwgdGhpcyBvbmx5IHNheXMgd2hldGhlciBpdCBzaG91bGQKKyAgICogZmFpbCB0byBjb25uZWN0IGlmIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMsIG9yIGlmIGl0IHNob3VsZCBjb250aW51ZQorICAgKiBhbnl3YXkuIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgcmVzdWx0IG9mIHRoZSB2ZXJpZmljYXRpb24gaXMgY2hlY2tlZCB3aXRoCisgICAqIFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdCgpIGJlbG93LiAqLworICBTU0xfQ1RYX3NldF92ZXJpZnkoY29ubnNzbC0+Y3R4LAorICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyP1NTTF9WRVJJRllfUEVFUjpTU0xfVkVSSUZZX05PTkUsCisgICAgICAgICAgICAgICAgICAgICBjZXJ0X3ZlcmlmeV9jYWxsYmFjayk7CisKKyAgLyogZ2l2ZSBhcHBsaWNhdGlvbiBhIGNoYW5jZSB0byBpbnRlcmZlcmUgd2l0aCBTU0wgc2V0IHVwLiAqLworICBpZihkYXRhLT5zZXQuc3NsLmZzc2xjdHgpIHsKKyAgICByZXRjb2RlID0gKCpkYXRhLT5zZXQuc3NsLmZzc2xjdHgpKGRhdGEsIGNvbm5zc2wtPmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuZnNzbGN0eHApOworICAgIGlmKHJldGNvZGUpIHsKKyAgICAgIGZhaWxmKGRhdGEsImVycm9yIHNpZ25hbGVkIGJ5IHNzbCBjdHggY2FsbGJhY2siKTsKKyAgICAgIHJldHVybiByZXRjb2RlOworICAgIH0KKyAgfQorCisgIC8qIExldHMgbWFrZSBhbiBTU0wgc3RydWN0dXJlICovCisgIGlmKGNvbm5zc2wtPmhhbmRsZSkKKyAgICBTU0xfZnJlZShjb25uc3NsLT5oYW5kbGUpOworICBjb25uc3NsLT5oYW5kbGUgPSBTU0xfbmV3KGNvbm5zc2wtPmN0eCk7CisgIGlmKCFjb25uc3NsLT5oYW5kbGUpIHsKKyAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBjcmVhdGUgYSBjb250ZXh0IChoYW5kbGUpISIpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisgIFNTTF9zZXRfY29ubmVjdF9zdGF0ZShjb25uc3NsLT5oYW5kbGUpOworCisgIGNvbm5zc2wtPnNlcnZlcl9jZXJ0ID0gMHgwOworCisjaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorICBpZigoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVULCBjb25uLT5ob3N0Lm5hbWUsICZhZGRyKSkgJiYKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgICAoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgY29ubi0+aG9zdC5uYW1lLCAmYWRkcikpICYmCisjZW5kaWYKKyAgICAgc25pICYmCisgICAgICFTU0xfc2V0X3Rsc2V4dF9ob3N0X25hbWUoY29ubnNzbC0+aGFuZGxlLCBjb25uLT5ob3N0Lm5hbWUpKQorICAgIGluZm9mKGRhdGEsICJXQVJOSU5HOiBmYWlsZWQgdG8gY29uZmlndXJlIHNlcnZlciBuYW1lIGluZGljYXRpb24gKFNOSSkgIgorICAgICAgICAgICJUTFMgZXh0ZW5zaW9uXG4iKTsKKyNlbmRpZgorCisgIC8qIENoZWNrIGlmIHRoZXJlJ3MgYSBjYWNoZWQgSUQgd2UgY2FuL3Nob3VsZCB1c2UgaGVyZSEgKi8KKyAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmc3NsX3Nlc3Npb25pZCwgTlVMTCkpIHsKKyAgICAvKiB3ZSBnb3QgYSBzZXNzaW9uIGlkLCB1c2UgaXQhICovCisgICAgaWYoIVNTTF9zZXRfc2Vzc2lvbihjb25uc3NsLT5oYW5kbGUsIHNzbF9zZXNzaW9uaWQpKSB7CisgICAgICBmYWlsZihkYXRhLCAiU1NMOiBTU0xfc2V0X3Nlc3Npb24gZmFpbGVkOiAlcyIsCisgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSxOVUxMKSk7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorICAgIC8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLworICAgIGluZm9mIChkYXRhLCAiU1NMIHJlLXVzaW5nIHNlc3Npb24gSURcbiIpOworICB9CisKKyAgLyogcGFzcyB0aGUgcmF3IHNvY2tldCBpbnRvIHRoZSBTU0wgbGF5ZXJzICovCisgIGlmKCFTU0xfc2V0X2ZkKGNvbm5zc2wtPmhhbmRsZSwgKGludClzb2NrZmQpKSB7CisgICAgZmFpbGYoZGF0YSwgIlNTTDogU1NMX3NldF9mZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSxOVUxMKSk7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICB9CisKKyAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzI7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlCitvc3NsX2Nvbm5lY3Rfc3RlcDIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGludCBlcnI7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworCisgIERFQlVHQVNTRVJUKHNzbF9jb25uZWN0XzIgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZQorICAgICAgICAgICAgIHx8IHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlCisgICAgICAgICAgICAgfHwgc3NsX2Nvbm5lY3RfMl93cml0aW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpOworCisgIEVSUl9jbGVhcl9lcnJvcigpOworCisgIGVyciA9IFNTTF9jb25uZWN0KGNvbm5zc2wtPmhhbmRsZSk7CisKKyAgLyogMSAgaXMgZmluZQorICAgICAwICBpcyAibm90IHN1Y2Nlc3NmdWwgYnV0IHdhcyBzaHV0IGRvd24gY29udHJvbGxlZCIKKyAgICAgPDAgaXMgImhhbmRzaGFrZSB3YXMgbm90IHN1Y2Nlc3NmdWwsIGJlY2F1c2UgYSBmYXRhbCBlcnJvciBvY2N1cnJlZCIgKi8KKyAgaWYoMSAhPSBlcnIpIHsKKyAgICBpbnQgZGV0YWlsID0gU1NMX2dldF9lcnJvcihjb25uc3NsLT5oYW5kbGUsIGVycik7CisKKyAgICBpZihTU0xfRVJST1JfV0FOVF9SRUFEID09IGRldGFpbCkgeworICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzJfcmVhZGluZzsKKyAgICAgIHJldHVybiBDVVJMRV9PSzsKKyAgICB9CisgICAgZWxzZSBpZihTU0xfRVJST1JfV0FOVF9XUklURSA9PSBkZXRhaWwpIHsKKyAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8yX3dyaXRpbmc7CisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogdW50cmVhdGVkIGVycm9yICovCisgICAgICB1bnNpZ25lZCBsb25nIGVycmRldGFpbDsKKyAgICAgIGNoYXIgZXJyb3JfYnVmZmVyWzI1Nl07IC8qIE9wZW5TU0wgZG9jdW1lbnRzIHRoYXQgdGhpcyBtdXN0IGJlIGF0IGxlYXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYgYnl0ZXMgbG9uZy4gKi8KKyAgICAgIENVUkxjb2RlIHJjOworICAgICAgY29uc3QgY2hhciAqY2VydF9wcm9ibGVtID0gTlVMTDsKKworICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzI7IC8qIHRoZSBjb25uZWN0aW9uIGZhaWxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZSdyZSBub3Qgd2FpdGluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnl0aGluZyBlbHNlLiAqLworCisgICAgICBlcnJkZXRhaWwgPSBFUlJfZ2V0X2Vycm9yKCk7IC8qIEdldHMgdGhlIGVhcmxpZXN0IGVycm9yIGNvZGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkJ3MgZXJyb3IgcXVldWUgYW5kIHJlbW92ZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LiAqLworCisgICAgICBzd2l0Y2goZXJyZGV0YWlsKSB7CisgICAgICBjYXNlIDB4MTQwN0UwODY6CisgICAgICAgIC8qIDE0MDdFMDg2OgorICAgICAgICAgICBTU0wgcm91dGluZXM6CisgICAgICAgICAgIFNTTDJfU0VUX0NFUlRJRklDQVRFOgorICAgICAgICAgICBjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmFpbGVkICovCisgICAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLworICAgICAgY2FzZSAweDE0MDkwMDg2OgorICAgICAgICAvKiAxNDA5MDA4NjoKKyAgICAgICAgICAgU1NMIHJvdXRpbmVzOgorICAgICAgICAgICBTU0wzX0dFVF9TRVJWRVJfQ0VSVElGSUNBVEU6CisgICAgICAgICAgIGNlcnRpZmljYXRlIHZlcmlmeSBmYWlsZWQgKi8KKyAgICAgICAgY2VydF9wcm9ibGVtID0gIlNTTCBjZXJ0aWZpY2F0ZSBwcm9ibGVtLCB2ZXJpZnkgdGhhdCB0aGUgQ0EgY2VydCBpcyIKKyAgICAgICAgICAiIE9LLiBEZXRhaWxzOlxuIjsKKyAgICAgICAgcmMgPSBDVVJMRV9TU0xfQ0FDRVJUOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJjID0gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvKiBkZXRhaWwgaXMgYWxyZWFkeSBzZXQgdG8gdGhlIFNTTCBlcnJvciBhYm92ZSAqLworCisgICAgICAvKiBJZiB3ZSBlLmcuIHVzZSBTU0x2MiByZXF1ZXN0LW1ldGhvZCBhbmQgdGhlIHNlcnZlciBkb2Vzbid0IGxpa2UgdXMKKyAgICAgICAqIChSU1QgY29ubmVjdGlvbiBldGMuKSwgT3BlblNTTCBnaXZlcyBubyBleHBsYW5hdGlvbiB3aGF0c29ldmVyIGFuZAorICAgICAgICogdGhlIFNPX0VSUk9SIGlzIGFsc28gbG9zdC4KKyAgICAgICAqLworICAgICAgaWYoQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1IgPT0gcmMgJiYgZXJyZGV0YWlsID09IDApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlVua25vd24gU1NMIHByb3RvY29sIGVycm9yIGluIGNvbm5lY3Rpb24gdG8gJXM6JWxkICIsCisgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwgY29ubi0+cG9ydCk7CisgICAgICAgIHJldHVybiByYzsKKyAgICAgIH0KKyAgICAgIC8qIENvdWxkIGJlIGEgQ0VSVCBwcm9ibGVtICovCisKKyAgICAgIFNTTF9zdHJlcnJvcihlcnJkZXRhaWwsIGVycm9yX2J1ZmZlciwgc2l6ZW9mKGVycm9yX2J1ZmZlcikpOworICAgICAgZmFpbGYoZGF0YSwgIiVzJXMiLCBjZXJ0X3Byb2JsZW0gPyBjZXJ0X3Byb2JsZW0gOiAiIiwgZXJyb3JfYnVmZmVyKTsKKyAgICAgIHJldHVybiByYzsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogd2UgaGF2ZSBiZWVuIGNvbm5lY3RlZCBmaW5lLCB3ZSdyZSBub3Qgd2FpdGluZyBmb3IgYW55dGhpbmcgZWxzZS4gKi8KKyAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID0gc3NsX2Nvbm5lY3RfMzsKKworICAgIC8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLworICAgIGluZm9mIChkYXRhLCAiU1NMIGNvbm5lY3Rpb24gdXNpbmcgJXNcbiIsCisgICAgICAgICAgIFNTTF9nZXRfY2lwaGVyKGNvbm5zc2wtPmhhbmRsZSkpOworCisgICAgcmV0dXJuIENVUkxFX09LOworICB9Cit9CisKK3N0YXRpYyBpbnQgYXNuMV9vYmplY3RfZHVtcChBU04xX09CSkVDVCAqYSwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworICBpbnQgaSwgaWxlbjsKKworICBpZigoaWxlbiA9IChpbnQpbGVuKSA8IDApCisgICAgcmV0dXJuIDE7IC8qIGJ1ZmZlciB0b28gYmlnICovCisKKyAgaSA9IGkydF9BU04xX09CSkVDVChidWYsIGlsZW4sIGEpOworCisgIGlmKGkgPj0gaWxlbikKKyAgICByZXR1cm4gMTsgLyogYnVmZmVyIHRvbyBzbWFsbCAqLworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgQ1VSTGNvZGUgcHVzaF9jZXJ0aW5mb19sZW4oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNlcnRudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhbHVlbGVuKQoreworICBzdHJ1Y3QgY3VybF9jZXJ0aW5mbyAqY2kgPSAmZGF0YS0+aW5mby5jZXJ0czsKKyAgY2hhciAqb3V0cHV0OworICBzdHJ1Y3QgY3VybF9zbGlzdCAqbmw7CisgIENVUkxjb2RlIHJlcyA9IENVUkxFX09LOworICBzaXplX3QgbGFiZWxsZW4gPSBzdHJsZW4obGFiZWwpOworICBzaXplX3Qgb3V0bGVuID0gbGFiZWxsZW4gKyAxICsgdmFsdWVsZW4gKyAxOyAvKiBsYWJlbDp2YWx1ZVwwICovCisKKyAgb3V0cHV0ID0gbWFsbG9jKG91dGxlbik7CisgIGlmKCFvdXRwdXQpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgLyogc3ByaW50ZiB0aGUgbGFiZWwgYW5kIGNvbG9uICovCisgIHNucHJpbnRmKG91dHB1dCwgb3V0bGVuLCAiJXM6IiwgbGFiZWwpOworCisgIC8qIG1lbWNweSB0aGUgdmFsdWUgKGl0IG1pZ2h0IG5vdCBiZSB6ZXJvIHRlcm1pbmF0ZWQpICovCisgIG1lbWNweSgmb3V0cHV0W2xhYmVsbGVuKzFdLCB2YWx1ZSwgdmFsdWVsZW4pOworCisgIC8qIHplcm8gdGVybWluYXRlIHRoZSBvdXRwdXQgKi8KKyAgb3V0cHV0W2xhYmVsbGVuICsgMSArIHZhbHVlbGVuXSA9IDA7CisKKyAgLyogVE9ETzogd2Ugc2hvdWxkIHJhdGhlciBpbnRyb2R1Y2UgYW4gaW50ZXJuYWwgQVBJIHRoYXQgY2FuIGRvIHRoZQorICAgICBlcXVpdmFsZW50IG9mIGN1cmxfc2xpc3RfYXBwZW5kIGJ1dCBkb2Vzbid0IHN0cmR1cCgpIHRoZSBnaXZlbiBkYXRhIGFzCisgICAgIGxpa2UgaW4gdGhpcyBwbGFjZSB0aGUgZXh0cmEgbWFsbG9jL2ZyZWUgaXMgdG90YWxseSBwb2ludGxlc3MgKi8KKyAgbmwgPSBjdXJsX3NsaXN0X2FwcGVuZChjaS0+Y2VydGluZm9bY2VydG51bV0sIG91dHB1dCk7CisgIGZyZWUob3V0cHV0KTsKKyAgaWYoIW5sKSB7CisgICAgY3VybF9zbGlzdF9mcmVlX2FsbChjaS0+Y2VydGluZm9bY2VydG51bV0pOworICAgIGNpLT5jZXJ0aW5mb1tjZXJ0bnVtXSA9IE5VTEw7CisgICAgcmVzID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorICBlbHNlCisgICAgY2ktPmNlcnRpbmZvW2NlcnRudW1dID0gbmw7CisKKyAgcmV0dXJuIHJlczsKK30KKworLyogdGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBwdXNoX2NlcnRpbmZvX2xlbiB0aGF0IHRha2VzIGEgemVybworICAgdGVybWluYXRlZCB2YWx1ZSAqLworc3RhdGljIENVUkxjb2RlIHB1c2hfY2VydGluZm8oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2VydG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIHNpemVfdCB2YWx1ZWxlbiA9IHN0cmxlbih2YWx1ZSk7CisKKyAgcmV0dXJuIHB1c2hfY2VydGluZm9fbGVuKGRhdGEsIGNlcnRudW0sIGxhYmVsLCB2YWx1ZSwgdmFsdWVsZW4pOworfQorCitzdGF0aWMgdm9pZCBwdWJrZXlfc2hvdyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnJhdywKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4pCit7CisgIHNpemVfdCBsZWZ0OworICBpbnQgaTsKKyAgY2hhciBuYW1lYnVmWzMyXTsKKyAgY2hhciAqYnVmZmVyOworCisgIGxlZnQgPSBsZW4qMyArIDE7CisgIGJ1ZmZlciA9IG1hbGxvYyhsZWZ0KTsKKyAgaWYoYnVmZmVyKSB7CisgICAgY2hhciAqcHRyPWJ1ZmZlcjsKKyAgICBzbnByaW50ZihuYW1lYnVmLCBzaXplb2YobmFtZWJ1ZiksICIlcyglcykiLCB0eXBlLCBuYW1lKTsKKyAgICBmb3IoaT0wOyBpPCBsZW47IGkrKykgeworICAgICAgc25wcmludGYocHRyLCBsZWZ0LCAiJTAyeDoiLCByYXdbaV0pOworICAgICAgcHRyICs9IDM7CisgICAgICBsZWZ0IC09IDM7CisgICAgfQorICAgIGluZm9mKGRhdGEsICIgICAlczogJXNcbiIsIG5hbWVidWYsIGJ1ZmZlcik7CisgICAgcHVzaF9jZXJ0aW5mbyhkYXRhLCBudW0sIG5hbWVidWYsIGJ1ZmZlcik7CisgICAgZnJlZShidWZmZXIpOworICB9Cit9CisKKyNkZWZpbmUgcHJpbnRfcHVia2V5X0JOKF90eXBlLCBfbmFtZSwgX251bSkgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYocHVia2V5LT5wa2V5Ll90eXBlLT5fbmFtZSAhPSBOVUxMKSB7IFwKKyAgICBpbnQgbGVuID0gQk5fbnVtX2J5dGVzKHB1YmtleS0+cGtleS5fdHlwZS0+X25hbWUpOyAgXAorICAgIGlmKGxlbiA8IENFUlRCVUZGRVJTSVpFKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgQk5fYm4yYmluKHB1YmtleS0+cGtleS5fdHlwZS0+X25hbWUsICh1bnNpZ25lZCBjaGFyKilidWZwKTsgXAorICAgICAgYnVmcFtsZW5dID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcHVia2V5X3Nob3coZGF0YSwgX251bSwgI190eXBlLCAjX25hbWUsICh1bnNpZ25lZCBjaGFyKilidWZwLCBsZW4pOyBcCisgICAgfSBcCisgIH0gXAorfSBXSElMRV9GQUxTRQorCitzdGF0aWMgaW50IFg1MDlWM19leHQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgaW50IGNlcnRudW0sCisgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfT0YoWDUwOV9FWFRFTlNJT04pICpleHRzKQoreworICBpbnQgaTsKKyAgc2l6ZV90IGo7CisKKyAgaWYoc2tfWDUwOV9FWFRFTlNJT05fbnVtKGV4dHMpIDw9IDApCisgICAgLyogbm8gZXh0ZW5zaW9ucywgYmFpbCBvdXQgKi8KKyAgICByZXR1cm4gMTsKKworICBmb3IoaT0wOyBpPHNrX1g1MDlfRVhURU5TSU9OX251bShleHRzKTsgaSsrKSB7CisgICAgQVNOMV9PQkpFQ1QgKm9iajsKKyAgICBYNTA5X0VYVEVOU0lPTiAqZXh0ID0gc2tfWDUwOV9FWFRFTlNJT05fdmFsdWUoZXh0cywgaSk7CisgICAgQlVGX01FTSAqYmlvbWVtOworICAgIGNoYXIgYnVmWzUxMl07CisgICAgY2hhciAqcHRyPWJ1ZjsKKyAgICBjaGFyIG5hbWVidWZbMTI4XTsKKyAgICBCSU8gKmJpb19vdXQgPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKworICAgIGlmKCFiaW9fb3V0KQorICAgICAgcmV0dXJuIDE7CisKKyAgICBvYmogPSBYNTA5X0VYVEVOU0lPTl9nZXRfb2JqZWN0KGV4dCk7CisKKyAgICBhc24xX29iamVjdF9kdW1wKG9iaiwgbmFtZWJ1Ziwgc2l6ZW9mKG5hbWVidWYpKTsKKworICAgIGluZm9mKGRhdGEsICIlczogJXNcbiIsIG5hbWVidWYsCisgICAgICAgICAgWDUwOV9FWFRFTlNJT05fZ2V0X2NyaXRpY2FsKGV4dCk/Iihjcml0aWNhbCkiOiIiKTsKKworICAgIGlmKCFYNTA5VjNfRVhUX3ByaW50KGJpb19vdXQsIGV4dCwgMCwgMCkpCisgICAgICBNX0FTTjFfT0NURVRfU1RSSU5HX3ByaW50KGJpb19vdXQsIGV4dC0+dmFsdWUpOworCisgICAgQklPX2dldF9tZW1fcHRyKGJpb19vdXQsICZiaW9tZW0pOworCisgICAgLyogYmlvbWVtLT5sZW5ndGggYnl0ZXMgYXQgYmlvbWVtLT5kYXRhLCB0aGlzIGxpdHRsZSBsb29wIGhlcmUgaXMgb25seQorICAgICAgIGRvbmUgZm9yIHRoZSBpbmZvZigpIGNhbGwsIHdlIHNlbmQgdGhlICJyYXciIGRhdGEgdG8gdGhlIGNlcnRpbmZvCisgICAgICAgZnVuY3Rpb24gKi8KKyAgICBmb3Ioaj0wOyBqPChzaXplX3QpYmlvbWVtLT5sZW5ndGg7IGorKykgeworICAgICAgY29uc3QgY2hhciAqc2VwPSIiOworICAgICAgaWYoYmlvbWVtLT5kYXRhW2pdID09ICdcbicpIHsKKyAgICAgICAgc2VwPSIsICI7CisgICAgICAgIGorKzsgLyogc2tpcCB0aGUgbmV3bGluZSAqLworICAgICAgfTsKKyAgICAgIHdoaWxlKChiaW9tZW0tPmRhdGFbal0gPT0gJyAnKSAmJiAoajwoc2l6ZV90KWJpb21lbS0+bGVuZ3RoKSkKKyAgICAgICAgaisrOworICAgICAgaWYoajwoc2l6ZV90KWJpb21lbS0+bGVuZ3RoKQorICAgICAgICBwdHIrPXNucHJpbnRmKHB0ciwgc2l6ZW9mKGJ1ZiktKHB0ci1idWYpLCAiJXMlYyIsIHNlcCwKKyAgICAgICAgICAgICAgICAgICAgICBiaW9tZW0tPmRhdGFbal0pOworICAgIH0KKyAgICBpbmZvZihkYXRhLCAiICAlc1xuIiwgYnVmKTsKKworICAgIHB1c2hfY2VydGluZm8oZGF0YSwgY2VydG51bSwgbmFtZWJ1ZiwgYnVmKTsKKworICAgIEJJT19mcmVlKGJpb19vdXQpOworCisgIH0KKyAgcmV0dXJuIDA7IC8qIGFsbCBpcyBmaW5lICovCit9CisKKworc3RhdGljIHZvaWQgWDUwOV9zaWduYXR1cmUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTjFfU1RSSU5HICpzaWcpCit7CisgIGNoYXIgYnVmWzEwMjRdOworICBjaGFyICpwdHIgPSBidWY7CisgIGludCBpOworICBmb3IoaT0wOyBpPHNpZy0+bGVuZ3RoOyBpKyspCisgICAgcHRyKz1zbnByaW50ZihwdHIsIHNpemVvZihidWYpLShwdHItYnVmKSwgIiUwMng6Iiwgc2lnLT5kYXRhW2ldKTsKKworICBpbmZvZihkYXRhLCAiIFNpZ25hdHVyZTogJXNcbiIsIGJ1Zik7CisgIHB1c2hfY2VydGluZm8oZGF0YSwgbnVtY2VydCwgIlNpZ25hdHVyZSIsIGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBjZXJ0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBYNTA5ICp4LCBpbnQgbnVtY2VydCkKK3sKKyAgQklPICpiaW9fb3V0ID0gQklPX25ldyhCSU9fc19tZW0oKSk7CisgIEJVRl9NRU0gKmJpb21lbTsKKworICAvKiB0aGlzIG91dHB1dHMgdGhlIGNlcnQgaW4gdGhpcyA2NCBjb2x1bW4gd2lkZSBzdHlsZSB3aXRoIG5ld2xpbmVzIGFuZAorICAgICAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0gdGV4dHMgYW5kIG1vcmUgKi8KKyAgUEVNX3dyaXRlX2Jpb19YNTA5KGJpb19vdXQsIHgpOworCisgIEJJT19nZXRfbWVtX3B0cihiaW9fb3V0LCAmYmlvbWVtKTsKKworICBpbmZvZihkYXRhLCAiJXNcbiIsIGJpb21lbS0+ZGF0YSk7CisKKyAgcHVzaF9jZXJ0aW5mb19sZW4oZGF0YSwgbnVtY2VydCwgIkNlcnQiLCBiaW9tZW0tPmRhdGEsIGJpb21lbS0+bGVuZ3RoKTsKKworICBCSU9fZnJlZShiaW9fb3V0KTsKKworfQorCisKK3N0YXRpYyBpbnQgaW5pdF9jZXJ0aW5mbyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtKQoreworICBzdHJ1Y3QgY3VybF9jZXJ0aW5mbyAqY2kgPSAmZGF0YS0+aW5mby5jZXJ0czsKKyAgc3RydWN0IGN1cmxfc2xpc3QgKip0YWJsZTsKKworICBDdXJsX3NzbF9mcmVlX2NlcnRpbmZvKGRhdGEpOworCisgIGNpLT5udW1fb2ZfY2VydHMgPSBudW07CisgIHRhYmxlID0gY2FsbG9jKChzaXplX3QpbnVtLCBzaXplb2Yoc3RydWN0IGN1cmxfc2xpc3QgKikpOworICBpZighdGFibGUpCisgICAgcmV0dXJuIDE7CisKKyAgY2ktPmNlcnRpbmZvID0gdGFibGU7CisgIHJldHVybiAwOworfQorCisvKgorICogVGhpcyBzaXplIHdhcyBwcmV2aW91c2x5IDUxMiB3aGljaCBoYXMgYmVlbiByZXBvcnRlZCAidG9vIHNtYWxsIiB3aXRob3V0CisgKiBhbnkgc3BlY2lmaWNzLCBzbyBpdCB3YXMgZW5sYXJnZWQgdG8gYWxsb3cgbW9yZSBkYXRhIHRvIGdldCBzaG93biB1bmN1dC4KKyAqIFRoZSAicGVyZmVjdCIgc2l6ZSBpcyB5ZXQgdG8gZmlndXJlIG91dC4KKyAqLworI2RlZmluZSBDRVJUQlVGRkVSU0laRSA4MTkyCisKK3N0YXRpYyBDVVJMY29kZSBnZXRfY2VydF9jaGFpbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wpCisKK3sKKyAgU1RBQ0tfT0YoWDUwOSkgKnNrOworICBpbnQgaTsKKyAgY2hhciAqYnVmcDsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBpbnQgbnVtY2VydHM7CisKKyAgYnVmcCA9IG1hbGxvYyhDRVJUQlVGRkVSU0laRSk7CisgIGlmKCFidWZwKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHNrID0gU1NMX2dldF9wZWVyX2NlcnRfY2hhaW4oY29ubnNzbC0+aGFuZGxlKTsKKyAgaWYoIXNrKSB7CisgICAgZnJlZShidWZwKTsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIG51bWNlcnRzID0gc2tfWDUwOV9udW0oc2spOworICBpZihpbml0X2NlcnRpbmZvKGRhdGEsIG51bWNlcnRzKSkgeworICAgIGZyZWUoYnVmcCk7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICBpbmZvZihkYXRhLCAiLS0tIENlcnRpZmljYXRlIGNoYWluXG4iKTsKKyAgZm9yKGk9MDsgaTxudW1jZXJ0czsgaSsrKSB7CisgICAgbG9uZyB2YWx1ZTsKKyAgICBBU04xX0lOVEVHRVIgKm51bTsKKyAgICBBU04xX1RJTUUgKmNlcnRkYXRlOworCisgICAgLyogZ2V0IHRoZSBjZXJ0cyBpbiAiaW1wb3J0YW5jZSBvcmRlciIgKi8KKyNpZiAwCisgICAgWDUwOSAqeCA9IHNrX1g1MDlfdmFsdWUoc2ssIG51bWNlcnRzIC0gaSAtIDEpOworI2Vsc2UKKyAgICBYNTA5ICp4ID0gc2tfWDUwOV92YWx1ZShzaywgaSk7CisjZW5kaWYKKworICAgIFg1MDlfQ0lORiAqY2luZjsKKyAgICBFVlBfUEtFWSAqcHVia2V5PU5VTEw7CisgICAgaW50IGo7CisgICAgY2hhciAqcHRyOworCisgICAgKHZvaWQpeDUwOV9uYW1lX29uZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHgpLCBidWZwLCBDRVJUQlVGRkVSU0laRSk7CisgICAgaW5mb2YoZGF0YSwgIiUyZCBTdWJqZWN0OiAlc1xuIiwgaSwgYnVmcCk7CisgICAgcHVzaF9jZXJ0aW5mbyhkYXRhLCBpLCAiU3ViamVjdCIsIGJ1ZnApOworCisgICAgKHZvaWQpeDUwOV9uYW1lX29uZWxpbmUoWDUwOV9nZXRfaXNzdWVyX25hbWUoeCksIGJ1ZnAsIENFUlRCVUZGRVJTSVpFKTsKKyAgICBpbmZvZihkYXRhLCAiICAgSXNzdWVyOiAlc1xuIiwgYnVmcCk7CisgICAgcHVzaF9jZXJ0aW5mbyhkYXRhLCBpLCAiSXNzdWVyIiwgYnVmcCk7CisKKyAgICB2YWx1ZSA9IFg1MDlfZ2V0X3ZlcnNpb24oeCk7CisgICAgaW5mb2YoZGF0YSwgIiAgIFZlcnNpb246ICVsdSAoMHglbHgpXG4iLCB2YWx1ZSsxLCB2YWx1ZSk7CisgICAgc25wcmludGYoYnVmcCwgQ0VSVEJVRkZFUlNJWkUsICIlbHgiLCB2YWx1ZSk7CisgICAgcHVzaF9jZXJ0aW5mbyhkYXRhLCBpLCAiVmVyc2lvbiIsIGJ1ZnApOyAvKiBoZXggKi8KKworICAgIG51bT1YNTA5X2dldF9zZXJpYWxOdW1iZXIoeCk7CisgICAgaWYobnVtLT5sZW5ndGggPD0gNCkgeworICAgICAgdmFsdWUgPSBBU04xX0lOVEVHRVJfZ2V0KG51bSk7CisgICAgICBpbmZvZihkYXRhLCIgICBTZXJpYWwgTnVtYmVyOiAlbGQgKDB4JWx4KVxuIiwgdmFsdWUsIHZhbHVlKTsKKyAgICAgIHNucHJpbnRmKGJ1ZnAsIENFUlRCVUZGRVJTSVpFLCAiJWx4IiwgdmFsdWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGludCBsZWZ0ID0gQ0VSVEJVRkZFUlNJWkU7CisKKyAgICAgIHB0ciA9IGJ1ZnA7CisgICAgICAqcHRyKysgPSAwOworICAgICAgaWYobnVtLT50eXBlID09IFZfQVNOMV9ORUdfSU5URUdFUikKKyAgICAgICAgKnB0cisrPSctJzsKKworICAgICAgZm9yKGo9MDsgKGo8bnVtLT5sZW5ndGgpICYmIChsZWZ0Pj00KTsgaisrKSB7CisgICAgICAgIC8qIFRPRE86IGxlbmd0aCByZXN0cmljdGlvbnMgKi8KKyAgICAgICAgc25wcmludGYocHRyLCAzLCAiJTAyeCVjIixudW0tPmRhdGFbal0sCisgICAgICAgICAgICAgICAgICgoaisxID09IG51bS0+bGVuZ3RoKT8nXG4nOic6JykpOworICAgICAgICBwdHIgKz0gMzsKKyAgICAgICAgbGVmdC09NDsKKyAgICAgIH0KKyAgICAgIGlmKG51bS0+bGVuZ3RoKQorICAgICAgICBpbmZvZihkYXRhLCIgICBTZXJpYWwgTnVtYmVyOiAlc1xuIiwgYnVmcCk7CisgICAgICBlbHNlCisgICAgICAgIGJ1ZnBbMF09MDsKKyAgICB9CisgICAgaWYoYnVmcFswXSkKKyAgICAgIHB1c2hfY2VydGluZm8oZGF0YSwgaSwgIlNlcmlhbCBOdW1iZXIiLCBidWZwKTsgLyogaGV4ICovCisKKyAgICBjaW5mID0geC0+Y2VydF9pbmZvOworCisgICAgaiA9IGFzbjFfb2JqZWN0X2R1bXAoY2luZi0+c2lnbmF0dXJlLT5hbGdvcml0aG0sIGJ1ZnAsIENFUlRCVUZGRVJTSVpFKTsKKyAgICBpZighaikgeworICAgICAgaW5mb2YoZGF0YSwgIiAgIFNpZ25hdHVyZSBBbGdvcml0aG06ICVzXG4iLCBidWZwKTsKKyAgICAgIHB1c2hfY2VydGluZm8oZGF0YSwgaSwgIlNpZ25hdHVyZSBBbGdvcml0aG0iLCBidWZwKTsKKyAgICB9CisKKyAgICBjZXJ0ZGF0ZSA9IFg1MDlfZ2V0X25vdEJlZm9yZSh4KTsKKyAgICBhc24xX291dHB1dChjZXJ0ZGF0ZSwgYnVmcCwgQ0VSVEJVRkZFUlNJWkUpOworICAgIGluZm9mKGRhdGEsICIgICBTdGFydCBkYXRlOiAlc1xuIiwgYnVmcCk7CisgICAgcHVzaF9jZXJ0aW5mbyhkYXRhLCBpLCAiU3RhcnQgZGF0ZSIsIGJ1ZnApOworCisgICAgY2VydGRhdGUgPSBYNTA5X2dldF9ub3RBZnRlcih4KTsKKyAgICBhc24xX291dHB1dChjZXJ0ZGF0ZSwgYnVmcCwgQ0VSVEJVRkZFUlNJWkUpOworICAgIGluZm9mKGRhdGEsICIgICBFeHBpcmUgZGF0ZTogJXNcbiIsIGJ1ZnApOworICAgIHB1c2hfY2VydGluZm8oZGF0YSwgaSwgIkV4cGlyZSBkYXRlIiwgYnVmcCk7CisKKyAgICBqID0gYXNuMV9vYmplY3RfZHVtcChjaW5mLT5rZXktPmFsZ29yLT5hbGdvcml0aG0sIGJ1ZnAsIENFUlRCVUZGRVJTSVpFKTsKKyAgICBpZighaikgeworICAgICAgaW5mb2YoZGF0YSwgIiAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiAlc1xuIiwgYnVmcCk7CisgICAgICBwdXNoX2NlcnRpbmZvKGRhdGEsIGksICJQdWJsaWMgS2V5IEFsZ29yaXRobSIsIGJ1ZnApOworICAgIH0KKworICAgIHB1YmtleSA9IFg1MDlfZ2V0X3B1YmtleSh4KTsKKyAgICBpZighcHVia2V5KQorICAgICAgaW5mb2YoZGF0YSwgIiAgIFVuYWJsZSB0byBsb2FkIHB1YmxpYyBrZXlcbiIpOworICAgIGVsc2UgeworICAgICAgc3dpdGNoKHB1YmtleS0+dHlwZSkgeworICAgICAgY2FzZSBFVlBfUEtFWV9SU0E6CisgICAgICAgIGluZm9mKGRhdGEsICAiICAgUlNBIFB1YmxpYyBLZXkgKCVkIGJpdHMpXG4iLAorICAgICAgICAgICAgICBCTl9udW1fYml0cyhwdWJrZXktPnBrZXkucnNhLT5uKSk7CisgICAgICAgIHNucHJpbnRmKGJ1ZnAsIENFUlRCVUZGRVJTSVpFLCAiJWQiLCBCTl9udW1fYml0cyhwdWJrZXktPnBrZXkucnNhLT5uKSk7CisgICAgICAgIHB1c2hfY2VydGluZm8oZGF0YSwgaSwgIlJTQSBQdWJsaWMgS2V5IiwgYnVmcCk7CisKKyAgICAgICAgcHJpbnRfcHVia2V5X0JOKHJzYSwgbiwgaSk7CisgICAgICAgIHByaW50X3B1YmtleV9CTihyc2EsIGUsIGkpOworICAgICAgICBwcmludF9wdWJrZXlfQk4ocnNhLCBkLCBpKTsKKyAgICAgICAgcHJpbnRfcHVia2V5X0JOKHJzYSwgcCwgaSk7CisgICAgICAgIHByaW50X3B1YmtleV9CTihyc2EsIHEsIGkpOworICAgICAgICBwcmludF9wdWJrZXlfQk4ocnNhLCBkbXAxLCBpKTsKKyAgICAgICAgcHJpbnRfcHVia2V5X0JOKHJzYSwgZG1xMSwgaSk7CisgICAgICAgIHByaW50X3B1YmtleV9CTihyc2EsIGlxbXAsIGkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRVZQX1BLRVlfRFNBOgorICAgICAgICBwcmludF9wdWJrZXlfQk4oZHNhLCBwLCBpKTsKKyAgICAgICAgcHJpbnRfcHVia2V5X0JOKGRzYSwgcSwgaSk7CisgICAgICAgIHByaW50X3B1YmtleV9CTihkc2EsIGcsIGkpOworICAgICAgICBwcmludF9wdWJrZXlfQk4oZHNhLCBwcml2X2tleSwgaSk7CisgICAgICAgIHByaW50X3B1YmtleV9CTihkc2EsIHB1Yl9rZXksIGkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRVZQX1BLRVlfREg6CisgICAgICAgIHByaW50X3B1YmtleV9CTihkaCwgcCwgaSk7CisgICAgICAgIHByaW50X3B1YmtleV9CTihkaCwgZywgaSk7CisgICAgICAgIHByaW50X3B1YmtleV9CTihkaCwgcHJpdl9rZXksIGkpOworICAgICAgICBwcmludF9wdWJrZXlfQk4oZGgsIHB1Yl9rZXksIGkpOworICAgICAgICBicmVhazsKKyNpZiAwCisgICAgICBjYXNlIEVWUF9QS0VZX0VDOiAvKiBzeW1ib2wgbm90IHByZXNlbnQgaW4gT3BlblNTTCAwLjkuNiAqLworICAgICAgICAvKiBsZWZ0IFRPRE8gKi8KKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgIH0KKyAgICAgIEVWUF9QS0VZX2ZyZWUocHVia2V5KTsKKyAgICB9CisKKyAgICBYNTA5VjNfZXh0KGRhdGEsIGksIGNpbmYtPmV4dGVuc2lvbnMpOworCisgICAgWDUwOV9zaWduYXR1cmUoZGF0YSwgaSwgeC0+c2lnbmF0dXJlKTsKKworICAgIGR1bXBjZXJ0KGRhdGEsIHgsIGkpOworICB9CisKKyAgZnJlZShidWZwKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBHZXQgdGhlIHNlcnZlciBjZXJ0LCB2ZXJpZnkgaXQgYW5kIHNob3cgaXQgZXRjLCBvbmx5IGNhbGwgZmFpbGYoKSBpZiB0aGUKKyAqICdzdHJpY3QnIGFyZ3VtZW50IGlzIFRSVUUgYXMgb3RoZXJ3aXNlIGFsbCB0aGlzIGlzIGZvciBpbmZvcm1hdGlvbmFsCisgKiBwdXJwb3NlcyBvbmx5IQorICoKKyAqIFdlIGNoZWNrIGNlcnRpZmljYXRlcyB0byBhdXRoZW50aWNhdGUgdGhlIHNlcnZlcjsgb3RoZXJ3aXNlIHdlIHJpc2sKKyAqIG1hbi1pbi10aGUtbWlkZGxlIGF0dGFjay4KKyAqLworc3RhdGljIENVUkxjb2RlIHNlcnZlcmNlcnQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0cmljdCkKK3sKKyAgQ1VSTGNvZGUgcmV0Y29kZSA9IENVUkxFX09LOworICBpbnQgcmM7CisgIGxvbmcgbGVycjsKKyAgQVNOMV9USU1FICpjZXJ0ZGF0ZTsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBYNTA5ICppc3N1ZXI7CisgIEZJTEUgKmZwOworICBjaGFyIGJ1ZmZlclsyNTZdOworCisgIGlmKGRhdGEtPnNldC5zc2wuY2VydGluZm8pCisgICAgLyogd2UndmUgYmVlbiBhc2tlZCB0byBnYXRoZXIgY2VydGlmaWNhdGUgaW5mbyEgKi8KKyAgICAodm9pZClnZXRfY2VydF9jaGFpbihjb25uLCBjb25uc3NsKTsKKworICBkYXRhLT5zZXQuc3NsLmNlcnR2ZXJpZnlyZXN1bHQgPSAhWDUwOV9WX09LOworCisgIGNvbm5zc2wtPnNlcnZlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKGNvbm5zc2wtPmhhbmRsZSk7CisgIGlmKCFjb25uc3NsLT5zZXJ2ZXJfY2VydCkgeworICAgIGlmKHN0cmljdCkKKyAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvdWxkbid0IGdldCBwZWVyIGNlcnRpZmljYXRlISIpOworICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CisgIH0KKyAgaW5mb2YgKGRhdGEsICJTZXJ2ZXIgY2VydGlmaWNhdGU6XG4iKTsKKworICByYyA9IHg1MDlfbmFtZV9vbmVsaW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShjb25uc3NsLT5zZXJ2ZXJfY2VydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICBpZihyYykgeworICAgIGlmKHN0cmljdCkKKyAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNvdWxkbid0IGdldCBYNTA5LXN1YmplY3QhIik7CisgICAgWDUwOV9mcmVlKGNvbm5zc2wtPnNlcnZlcl9jZXJ0KTsKKyAgICBjb25uc3NsLT5zZXJ2ZXJfY2VydCA9IE5VTEw7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICB9CisgIGluZm9mKGRhdGEsICJcdCBzdWJqZWN0OiAlc1xuIiwgYnVmZmVyKTsKKworICBjZXJ0ZGF0ZSA9IFg1MDlfZ2V0X25vdEJlZm9yZShjb25uc3NsLT5zZXJ2ZXJfY2VydCk7CisgIGFzbjFfb3V0cHV0KGNlcnRkYXRlLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgaW5mb2YoZGF0YSwgIlx0IHN0YXJ0IGRhdGU6ICVzXG4iLCBidWZmZXIpOworCisgIGNlcnRkYXRlID0gWDUwOV9nZXRfbm90QWZ0ZXIoY29ubnNzbC0+c2VydmVyX2NlcnQpOworICBhc24xX291dHB1dChjZXJ0ZGF0ZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgIGluZm9mKGRhdGEsICJcdCBleHBpcmUgZGF0ZTogJXNcbiIsIGJ1ZmZlcik7CisKKyAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0KSB7CisgICAgcmV0Y29kZSA9IHZlcmlmeWhvc3QoY29ubiwgY29ubnNzbC0+c2VydmVyX2NlcnQpOworICAgIGlmKHJldGNvZGUpIHsKKyAgICAgIFg1MDlfZnJlZShjb25uc3NsLT5zZXJ2ZXJfY2VydCk7CisgICAgICBjb25uc3NsLT5zZXJ2ZXJfY2VydCA9IE5VTEw7CisgICAgICByZXR1cm4gcmV0Y29kZTsKKyAgICB9CisgIH0KKworICByYyA9IHg1MDlfbmFtZV9vbmVsaW5lKFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKGNvbm5zc2wtPnNlcnZlcl9jZXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgaWYocmMpIHsKKyAgICBpZihzdHJpY3QpCisgICAgICBmYWlsZihkYXRhLCAiU1NMOiBjb3VsZG4ndCBnZXQgWDUwOS1pc3N1ZXIgbmFtZSEiKTsKKyAgICByZXRjb2RlID0gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIH0KKyAgZWxzZSB7CisgICAgaW5mb2YoZGF0YSwgIlx0IGlzc3VlcjogJXNcbiIsIGJ1ZmZlcik7CisKKyAgICAvKiBXZSBjb3VsZCBkbyBhbGwgc29ydHMgb2YgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHN0dWZmIGhlcmUgYmVmb3JlCisgICAgICAgZGVhbGxvY2F0aW5nIHRoZSBjZXJ0aWZpY2F0ZS4gKi8KKworICAgIC8qIGUuZy4gbWF0Y2ggaXNzdWVyIG5hbWUgd2l0aCBwcm92aWRlZCBpc3N1ZXIgY2VydGlmaWNhdGUgKi8KKyAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfSVNTVUVSQ0VSVF0pIHsKKyAgICAgIGZwPWZvcGVuKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9JU1NVRVJDRVJUXSwiciIpOworICAgICAgaWYoIWZwKSB7CisgICAgICAgIGlmKHN0cmljdCkKKyAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBVbmFibGUgdG8gb3BlbiBpc3N1ZXIgY2VydCAoJXMpXG4iLAorICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9JU1NVRVJDRVJUXSk7CisgICAgICAgIFg1MDlfZnJlZShjb25uc3NsLT5zZXJ2ZXJfY2VydCk7CisgICAgICAgIGNvbm5zc2wtPnNlcnZlcl9jZXJ0ID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9JU1NVRVJfRVJST1I7CisgICAgICB9CisgICAgICBpc3N1ZXIgPSBQRU1fcmVhZF9YNTA5KGZwLE5VTEwsWkVST19OVUxMLE5VTEwpOworICAgICAgaWYoIWlzc3VlcikgeworICAgICAgICBpZihzdHJpY3QpCisgICAgICAgICAgZmFpbGYoZGF0YSwgIlNTTDogVW5hYmxlIHRvIHJlYWQgaXNzdWVyIGNlcnQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfSVNTVUVSQ0VSVF0pOworICAgICAgICBYNTA5X2ZyZWUoY29ubnNzbC0+c2VydmVyX2NlcnQpOworICAgICAgICBYNTA5X2ZyZWUoaXNzdWVyKTsKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9JU1NVRVJfRVJST1I7CisgICAgICB9CisgICAgICBmY2xvc2UoZnApOworICAgICAgaWYoWDUwOV9jaGVja19pc3N1ZWQoaXNzdWVyLGNvbm5zc2wtPnNlcnZlcl9jZXJ0KSAhPSBYNTA5X1ZfT0spIHsKKyAgICAgICAgaWYoc3RyaWN0KQorICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IENlcnRpZmljYXRlIGlzc3VlciBjaGVjayBmYWlsZWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfSVNTVUVSQ0VSVF0pOworICAgICAgICBYNTA5X2ZyZWUoY29ubnNzbC0+c2VydmVyX2NlcnQpOworICAgICAgICBYNTA5X2ZyZWUoaXNzdWVyKTsKKyAgICAgICAgY29ubnNzbC0+c2VydmVyX2NlcnQgPSBOVUxMOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0lTU1VFUl9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGluZm9mKGRhdGEsICJcdCBTU0wgY2VydGlmaWNhdGUgaXNzdWVyIGNoZWNrIG9rICglcylcbiIsCisgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfSVNTVUVSQ0VSVF0pOworICAgICAgWDUwOV9mcmVlKGlzc3Vlcik7CisgICAgfQorCisgICAgbGVyciA9IGRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdD0KKyAgICAgIFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdChjb25uc3NsLT5oYW5kbGUpOworICAgIGlmKGRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdCAhPSBYNTA5X1ZfT0spIHsKKyAgICAgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICAgICAgICAvKiBXZSBwcm9iYWJseSBuZXZlciByZWFjaCB0aGlzLCBiZWNhdXNlIFNTTF9jb25uZWN0KCkgd2lsbCBmYWlsCisgICAgICAgICAgIGFuZCB3ZSByZXR1cm4gZWFybGllciBpZiB2ZXJpZnlwZWVyIGlzIHNldD8gKi8KKyAgICAgICAgaWYoc3RyaWN0KQorICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0wgY2VydGlmaWNhdGUgdmVyaWZ5IHJlc3VsdDogJXMgKCVsZCkiLAorICAgICAgICAgICAgICAgIFg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGxlcnIpLCBsZXJyKTsKKyAgICAgICAgcmV0Y29kZSA9IENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgaW5mb2YoZGF0YSwgIlx0IFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgcmVzdWx0OiAlcyAoJWxkKSwiCisgICAgICAgICAgICAgICIgY29udGludWluZyBhbnl3YXkuXG4iLAorICAgICAgICAgICAgICBYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhsZXJyKSwgbGVycik7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGluZm9mKGRhdGEsICJcdCBTU0wgY2VydGlmaWNhdGUgdmVyaWZ5IG9rLlxuIik7CisgIH0KKworICBYNTA5X2ZyZWUoY29ubnNzbC0+c2VydmVyX2NlcnQpOworICBjb25uc3NsLT5zZXJ2ZXJfY2VydCA9IE5VTEw7CisgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF9kb25lOworCisgIHJldHVybiByZXRjb2RlOworfQorCisKK3N0YXRpYyBDVVJMY29kZQorb3NzbF9jb25uZWN0X3N0ZXAzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQoreworICBDVVJMY29kZSByZXRjb2RlID0gQ1VSTEVfT0s7CisgIHZvaWQgKm9sZF9zc2xfc2Vzc2lvbmlkPU5VTEw7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIGludCBpbmNhY2hlOworICBTU0xfU0VTU0lPTiAqb3VyX3NzbF9zZXNzaW9uaWQ7CisKKyAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKKworI2lmZGVmIEhBVkVfU1NMX0dFVDFfU0VTU0lPTgorICBvdXJfc3NsX3Nlc3Npb25pZCA9IFNTTF9nZXQxX3Nlc3Npb24oY29ubnNzbC0+aGFuZGxlKTsKKworICAvKiBTU0xfZ2V0MV9zZXNzaW9uKCkgd2lsbCBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZQorICAgICBjb3VudCBhbmQgdGhlIHNlc3Npb24gd2lsbCBzdGF5IGluIG1lbW9yeSB1bnRpbCBleHBsaWNpdGx5IGZyZWVkIHdpdGgKKyAgICAgU1NMX1NFU1NJT05fZnJlZSgzKSwgcmVnYXJkbGVzcyBvZiBpdHMgc3RhdGUuCisgICAgIFRoaXMgZnVuY3Rpb24gd2FzIGludHJvZHVjZWQgaW4gb3BlbnNzbCAwLjkuNWEuICovCisjZWxzZQorICBvdXJfc3NsX3Nlc3Npb25pZCA9IFNTTF9nZXRfc2Vzc2lvbihjb25uc3NsLT5oYW5kbGUpOworCisgIC8qIGlmIFNTTF9nZXQxX3Nlc3Npb24oKSBpcyB1bmF2YWlsYWJsZSwgdXNlIFNTTF9nZXRfc2Vzc2lvbigpLgorICAgICBUaGlzIGlzIGFuIGluZmVyaW9yIG9wdGlvbiBiZWNhdXNlIHRoZSBzZXNzaW9uIGNhbiBiZSBmbHVzaGVkCisgICAgIGF0IGFueSB0aW1lIGJ5IG9wZW5zc2wuIEl0IGlzIGluY2x1ZGVkIG9ubHkgc28gY3VybCBjb21waWxlcworICAgICB1bmRlciB2ZXJzaW9ucyBvZiBvcGVuc3NsIDwgMC45LjVhLgorCisgICAgIFdBUk5JTkc6IEhvdyBjdXJsIGJlaGF2ZXMgaWYgaXQncyBzZXNzaW9uIGlzIGZsdXNoZWQgaXMKKyAgICAgdW50ZXN0ZWQuCisgICovCisjZW5kaWYKKworICBpbmNhY2hlID0gIShDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zc2xfc2Vzc2lvbmlkLCBOVUxMKSk7CisgIGlmKGluY2FjaGUpIHsKKyAgICBpZihvbGRfc3NsX3Nlc3Npb25pZCAhPSBvdXJfc3NsX3Nlc3Npb25pZCkgeworICAgICAgaW5mb2YoZGF0YSwgIm9sZCBTU0wgc2Vzc2lvbiBJRCBpcyBzdGFsZSwgcmVtb3ZpbmdcbiIpOworICAgICAgQ3VybF9zc2xfZGVsc2Vzc2lvbmlkKGNvbm4sIG9sZF9zc2xfc2Vzc2lvbmlkKTsKKyAgICAgIGluY2FjaGUgPSBGQUxTRTsKKyAgICB9CisgIH0KKyAgaWYoIWluY2FjaGUpIHsKKyAgICByZXRjb2RlID0gQ3VybF9zc2xfYWRkc2Vzc2lvbmlkKGNvbm4sIG91cl9zc2xfc2Vzc2lvbmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiB1bmtub3duIHNpemUgKi8pOworICAgIGlmKHJldGNvZGUpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgdG8gc3RvcmUgc3NsIHNlc3Npb24iKTsKKyAgICAgIHJldHVybiByZXRjb2RlOworICAgIH0KKyAgfQorI2lmZGVmIEhBVkVfU1NMX0dFVDFfU0VTU0lPTgorICBlbHNlIHsKKyAgICAvKiBTZXNzaW9uIHdhcyBpbmNhY2hlLCBzbyByZWZjb3VudCBhbHJlYWR5IGluY3JlbWVudGVkIGVhcmxpZXIuCisgICAgICogQXZvaWQgZnVydGhlciBpbmNyZW1lbnRzIHdpdGggZWFjaCBTU0xfZ2V0MV9zZXNzaW9uKCkgY2FsbC4KKyAgICAgKiBUaGlzIGRvZXMgbm90IGZyZWUgdGhlIHNlc3Npb24gYXMgcmVmY291bnQgcmVtYWlucyA+IDAKKyAgICAgKi8KKyAgICBTU0xfU0VTU0lPTl9mcmVlKG91cl9zc2xfc2Vzc2lvbmlkKTsKKyAgfQorI2VuZGlmCisKKyAgLyoKKyAgICogV2UgY2hlY2sgY2VydGlmaWNhdGVzIHRvIGF1dGhlbnRpY2F0ZSB0aGUgc2VydmVyOyBvdGhlcndpc2Ugd2UgcmlzaworICAgKiBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2s7IE5FVkVSVEhFTEVTUywgaWYgd2UncmUgdG9sZCBleHBsaWNpdGx5IG5vdCB0bworICAgKiB2ZXJpZnkgdGhlIHBlZXIgaWdub3JlIGZhdWx0cyBhbmQgZmFpbHVyZXMgZnJvbSB0aGUgc2VydmVyIGNlcnQKKyAgICogb3BlcmF0aW9ucy4KKyAgICovCisKKyAgaWYoIWRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikKKyAgICAodm9pZClzZXJ2ZXJjZXJ0KGNvbm4sIGNvbm5zc2wsIEZBTFNFKTsKKyAgZWxzZQorICAgIHJldGNvZGUgPSBzZXJ2ZXJjZXJ0KGNvbm4sIGNvbm5zc2wsIFRSVUUpOworCisgIGlmKENVUkxFX09LID09IHJldGNvZGUpCisgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0X2RvbmU7CisgIHJldHVybiByZXRjb2RlOworfQorCitzdGF0aWMgQ3VybF9yZWN2IG9zc2xfcmVjdjsKK3N0YXRpYyBDdXJsX3NlbmQgb3NzbF9zZW5kOworCitzdGF0aWMgQ1VSTGNvZGUKK29zc2xfY29ubmVjdF9jb21tb24oc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICBib29sIG5vbmJsb2NraW5nLAorICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXRjb2RlOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKKyAgbG9uZyB0aW1lb3V0X21zOworICBpbnQgd2hhdDsKKworICAvKiBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkICovCisgIGlmKHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlID09IGNvbm5zc2wtPnN0YXRlKSB7CisgICAgKmRvbmUgPSBUUlVFOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorCisgIGlmKHNzbF9jb25uZWN0XzE9PWNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpIHsKKyAgICAvKiBGaW5kIG91dCBob3cgbXVjaCBtb3JlIHRpbWUgd2UncmUgYWxsb3dlZCAqLworICAgIHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOworCisgICAgaWYodGltZW91dF9tcyA8IDApIHsKKyAgICAgIC8qIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGltZSBhbHJlYWR5IGlzIHVwICovCisgICAgICBmYWlsZihkYXRhLCAiU1NMIGNvbm5lY3Rpb24gdGltZW91dCIpOworICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICB9CisgICAgcmV0Y29kZSA9IG9zc2xfY29ubmVjdF9zdGVwMShjb25uLCBzb2NraW5kZXgpOworICAgIGlmKHJldGNvZGUpCisgICAgICByZXR1cm4gcmV0Y29kZTsKKyAgfQorCisgIHdoaWxlKHNzbF9jb25uZWN0XzIgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAorICAgICAgICBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSB8fAorICAgICAgICBzc2xfY29ubmVjdF8yX3dyaXRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworCisgICAgLyogY2hlY2sgYWxsb3dlZCB0aW1lIGxlZnQgKi8KKyAgICB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCBOVUxMLCBUUlVFKTsKKworICAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CisgICAgICAvKiBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLworICAgICAgZmFpbGYoZGF0YSwgIlNTTCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgfQorCisgICAgLyogaWYgc3NsIGlzIGV4cGVjdGluZyBzb21ldGhpbmcsIGNoZWNrIGlmIGl0J3MgYXZhaWxhYmxlLiAqLworICAgIGlmKGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nCisgICAgICAgIHx8IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl93cml0aW5nKSB7CisKKyAgICAgIGN1cmxfc29ja2V0X3Qgd3JpdGVmZCA9IHNzbF9jb25uZWN0XzJfd3JpdGluZz09CisgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKKyAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nPT0KKyAgICAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZT9zb2NrZmQ6Q1VSTF9TT0NLRVRfQkFEOworCisgICAgICB3aGF0ID0gQ3VybF9zb2NrZXRfcmVhZHkocmVhZGZkLCB3cml0ZWZkLCBub25ibG9ja2luZz8wOnRpbWVvdXRfbXMpOworICAgICAgaWYod2hhdCA8IDApIHsKKyAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KKyAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoMCA9PSB3aGF0KSB7CisgICAgICAgIGlmKG5vbmJsb2NraW5nKSB7CisgICAgICAgICAgKmRvbmUgPSBGQUxTRTsKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogdGltZW91dCAqLworICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0wgY29ubmVjdGlvbiB0aW1lb3V0Iik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLyogc29ja2V0IGlzIHJlYWRhYmxlIG9yIHdyaXRhYmxlICovCisgICAgfQorCisgICAgLyogUnVuIHRyYW5zYWN0aW9uLCBhbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIgaWYgaXQgZmFpbGVkIG9yIGlmIHRoaXMKKyAgICAgKiBjb25uZWN0aW9uIGlzIGRvbmUgbm9uYmxvY2tpbmcgYW5kIHRoaXMgbG9vcCB3b3VsZCBleGVjdXRlIGFnYWluLiBUaGlzCisgICAgICogcGVybWl0cyB0aGUgb3duZXIgb2YgYSBtdWx0aSBoYW5kbGUgdG8gYWJvcnQgYSBjb25uZWN0aW9uIGF0dGVtcHQKKyAgICAgKiBiZWZvcmUgc3RlcDIgaGFzIGNvbXBsZXRlZCB3aGlsZSBlbnN1cmluZyB0aGF0IGEgY2xpZW50IHVzaW5nIHNlbGVjdCgpCisgICAgICogb3IgZXBvbGwoKSB3aWxsIGFsd2F5cyBoYXZlIGEgdmFsaWQgZmRzZXQgdG8gd2FpdCBvbi4KKyAgICAgKi8KKyAgICByZXRjb2RlID0gb3NzbF9jb25uZWN0X3N0ZXAyKGNvbm4sIHNvY2tpbmRleCk7CisgICAgaWYocmV0Y29kZSB8fCAobm9uYmxvY2tpbmcgJiYKKyAgICAgICAgICAgICAgICAgICAoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlIHx8CisgICAgICAgICAgICAgICAgICAgIHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSkpCisgICAgICByZXR1cm4gcmV0Y29kZTsKKworICB9IC8qIHJlcGVhdCBzdGVwMiB1bnRpbCBhbGwgdHJhbnNhY3Rpb25zIGFyZSBkb25lLiAqLworCisKKyAgaWYoc3NsX2Nvbm5lY3RfMz09Y29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSkgeworICAgIHJldGNvZGUgPSBvc3NsX2Nvbm5lY3Rfc3RlcDMoY29ubiwgc29ja2luZGV4KTsKKyAgICBpZihyZXRjb2RlKQorICAgICAgcmV0dXJuIHJldGNvZGU7CisgIH0KKworICBpZihzc2xfY29ubmVjdF9kb25lPT1jb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKSB7CisgICAgY29ubnNzbC0+c3RhdGUgPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZTsKKyAgICBjb25uLT5yZWN2W3NvY2tpbmRleF0gPSBvc3NsX3JlY3Y7CisgICAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gb3NzbF9zZW5kOworICAgICpkb25lID0gVFJVRTsKKyAgfQorICBlbHNlCisgICAgKmRvbmUgPSBGQUxTRTsKKworICAvKiBSZXNldCBvdXIgY29ubmVjdCBzdGF0ZSBtYWNoaW5lICovCisgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPSBzc2xfY29ubmVjdF8xOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworQ1VSTGNvZGUKK0N1cmxfb3NzbF9jb25uZWN0X25vbmJsb2NraW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICByZXR1cm4gb3NzbF9jb25uZWN0X2NvbW1vbihjb25uLCBzb2NraW5kZXgsIFRSVUUsIGRvbmUpOworfQorCitDVVJMY29kZQorQ3VybF9vc3NsX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKK3sKKyAgQ1VSTGNvZGUgcmV0Y29kZTsKKyAgYm9vbCBkb25lID0gRkFMU0U7CisKKyAgcmV0Y29kZSA9IG9zc2xfY29ubmVjdF9jb21tb24oY29ubiwgc29ja2luZGV4LCBGQUxTRSwgJmRvbmUpOworICBpZihyZXRjb2RlKQorICAgIHJldHVybiByZXRjb2RlOworCisgIERFQlVHQVNTRVJUKGRvbmUpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworYm9vbCBDdXJsX29zc2xfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29ubmluZGV4KQoreworICBpZihjb25uLT5zc2xbY29ubmluZGV4XS5oYW5kbGUpCisgICAgLyogU1NMIGlzIGluIHVzZSAqLworICAgIHJldHVybiAoMCAhPSBTU0xfcGVuZGluZyhjb25uLT5zc2xbY29ubmluZGV4XS5oYW5kbGUpKSA/IFRSVUUgOiBGQUxTRTsKKyAgZWxzZQorICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHNzaXplX3Qgb3NzbF9zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICpjdXJsY29kZSkKK3sKKyAgLyogU1NMX3dyaXRlKCkgaXMgc2FpZCB0byByZXR1cm4gJ2ludCcgd2hpbGUgd3JpdGUoKSBhbmQgc2VuZCgpIHJldHVybnMKKyAgICAgJ3NpemVfdCcgKi8KKyAgaW50IGVycjsKKyAgY2hhciBlcnJvcl9idWZmZXJbMTIwXTsgLyogT3BlblNTTCBkb2N1bWVudHMgdGhhdCB0aGlzIG11c3QgYmUgYXQgbGVhc3QgMTIwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIGxvbmcuICovCisgIHVuc2lnbmVkIGxvbmcgc3NsZXJyb3I7CisgIGludCBtZW1sZW47CisgIGludCByYzsKKworICBFUlJfY2xlYXJfZXJyb3IoKTsKKworICBtZW1sZW4gPSAobGVuID4gKHNpemVfdClJTlRfTUFYKSA/IElOVF9NQVggOiAoaW50KWxlbjsKKyAgcmMgPSBTU0xfd3JpdGUoY29ubi0+c3NsW3NvY2tpbmRleF0uaGFuZGxlLCBtZW0sIG1lbWxlbik7CisKKyAgaWYocmMgPCAwKSB7CisgICAgZXJyID0gU1NMX2dldF9lcnJvcihjb25uLT5zc2xbc29ja2luZGV4XS5oYW5kbGUsIHJjKTsKKworICAgIHN3aXRjaChlcnIpIHsKKyAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgIC8qIFRoZSBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZTsgdGhlIHNhbWUgVExTL1NTTCBJL08gZnVuY3Rpb24KKyAgICAgICAgIHNob3VsZCBiZSBjYWxsZWQgYWdhaW4gbGF0ZXIuIFRoaXMgaXMgYmFzaWNhbGx5IGFuIEVXT1VMREJMT0NLCisgICAgICAgICBlcXVpdmFsZW50LiAqLworICAgICAgKmN1cmxjb2RlID0gQ1VSTEVfQUdBSU47CisgICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTU0xfd3JpdGUoKSByZXR1cm5lZCBTWVNDQUxMLCBlcnJubyA9ICVkIiwKKyAgICAgICAgICAgIFNPQ0tFUlJOTyk7CisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKyAgICAgIC8qICBBIGZhaWx1cmUgaW4gdGhlIFNTTCBsaWJyYXJ5IG9jY3VycmVkLCB1c3VhbGx5IGEgcHJvdG9jb2wgZXJyb3IuCisgICAgICAgICAgVGhlIE9wZW5TU0wgZXJyb3IgcXVldWUgY29udGFpbnMgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZXJyb3IuICovCisgICAgICBzc2xlcnJvciA9IEVSUl9nZXRfZXJyb3IoKTsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTU0xfd3JpdGUoKSBlcnJvcjogJXMiLAorICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhzc2xlcnJvciwgZXJyb3JfYnVmZmVyKSk7CisgICAgICAqY3VybGNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAvKiBhIHRydWUgZXJyb3IgKi8KKyAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMX3dyaXRlKCkgcmV0dXJuIGVycm9yICVkIiwgZXJyKTsKKyAgICAqY3VybGNvZGUgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1cm4gKHNzaXplX3QpcmM7IC8qIG51bWJlciBvZiBieXRlcyAqLworfQorCitzdGF0aWMgc3NpemVfdCBvc3NsX3JlY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtLCAgICAgICAgICAgICAgICAgIC8qIHNvY2tldGluZGV4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCAgICAgICAgICAgICAgICAvKiBzdG9yZSByZWFkIGRhdGEgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJzaXplLCAgICAgICAgLyogbWF4IGFtb3VudCB0byByZWFkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmN1cmxjb2RlKQoreworICBjaGFyIGVycm9yX2J1ZmZlclsxMjBdOyAvKiBPcGVuU1NMIGRvY3VtZW50cyB0aGF0IHRoaXMgbXVzdCBiZSBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFzdCAxMjAgYnl0ZXMgbG9uZy4gKi8KKyAgdW5zaWduZWQgbG9uZyBzc2xlcnJvcjsKKyAgc3NpemVfdCBucmVhZDsKKyAgaW50IGJ1ZmZzaXplOworCisgIEVSUl9jbGVhcl9lcnJvcigpOworCisgIGJ1ZmZzaXplID0gKGJ1ZmZlcnNpemUgPiAoc2l6ZV90KUlOVF9NQVgpID8gSU5UX01BWCA6IChpbnQpYnVmZmVyc2l6ZTsKKyAgbnJlYWQgPSAoc3NpemVfdClTU0xfcmVhZChjb25uLT5zc2xbbnVtXS5oYW5kbGUsIGJ1ZiwgYnVmZnNpemUpOworICBpZihucmVhZCA8IDApIHsKKyAgICAvKiBmYWlsZWQgU1NMX3JlYWQgKi8KKyAgICBpbnQgZXJyID0gU1NMX2dldF9lcnJvcihjb25uLT5zc2xbbnVtXS5oYW5kbGUsIChpbnQpbnJlYWQpOworCisgICAgc3dpdGNoKGVycikgeworICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6IC8qIHRoaXMgaXMgbm90IGFuIGVycm9yICovCisgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46IC8qIG5vIG1vcmUgZGF0YSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAvKiB0aGVyZSdzIGRhdGEgcGVuZGluZywgcmUtaW52b2tlIFNTTF9yZWFkKCkgKi8KKyAgICAgICpjdXJsY29kZSA9IENVUkxFX0FHQUlOOworICAgICAgcmV0dXJuIC0xOworICAgIGRlZmF1bHQ6CisgICAgICAvKiBvcGVuc3NsL3NzbC5oIHNheXMgImxvb2sgYXQgZXJyb3Igc3RhY2svcmV0dXJuIHZhbHVlL2Vycm5vIiAqLworICAgICAgc3NsZXJyb3IgPSBFUlJfZ2V0X2Vycm9yKCk7CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMIHJlYWQ6ICVzLCBlcnJubyAlZCIsCisgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKHNzbGVycm9yLCBlcnJvcl9idWZmZXIpLAorICAgICAgICAgICAgU09DS0VSUk5PKTsKKyAgICAgICpjdXJsY29kZSA9IENVUkxFX1JFQ1ZfRVJST1I7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisgIHJldHVybiBucmVhZDsKK30KKworc2l6ZV90IEN1cmxfb3NzbF92ZXJzaW9uKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisjaWZkZWYgWUFTU0xfVkVSU0lPTgorICAvKiB5YXNzbCBwcm92aWRlcyBhbiBPcGVuU1NMIEFQSSBjb21wYXRpYmlsaXR5IGxheWVyIHNvIGl0IGxvb2tzIGlkZW50aWNhbAorICAgICB0byBPcGVuU1NMIGluIGFsbCBvdGhlciBhc3BlY3RzICovCisgIHJldHVybiBzbnByaW50ZihidWZmZXIsIHNpemUsICJ5YXNzbC8lcyIsIFlBU1NMX1ZFUlNJT04pOworI2Vsc2UgLyogWUFTU0xfVkVSU0lPTiAqLworCisjaWYoU1NMRUFZX1ZFUlNJT05fTlVNQkVSID49IDB4OTA1MDAwKQorICB7CisgICAgY2hhciBzdWJbMl07CisgICAgdW5zaWduZWQgbG9uZyBzc2xlYXlfdmFsdWU7CisgICAgc3ViWzFdPSdcMCc7CisgICAgc3NsZWF5X3ZhbHVlPVNTTGVheSgpOworICAgIGlmKHNzbGVheV92YWx1ZSA8IDB4OTA2MDAwKSB7CisgICAgICBzc2xlYXlfdmFsdWU9U1NMRUFZX1ZFUlNJT05fTlVNQkVSOworICAgICAgc3ViWzBdPSdcMCc7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYoc3NsZWF5X3ZhbHVlJjB4ZmYwKSB7CisgICAgICAgIHN1YlswXT0oY2hhcikoKChzc2xlYXlfdmFsdWU+PjQpJjB4ZmYpICsgJ2EnIC0xKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgc3ViWzBdPSdcMCc7CisgICAgfQorCisgICAgcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIk9wZW5TU0wvJWx4LiVseC4lbHglcyIsCisgICAgICAgICAgICAgICAgICAgIChzc2xlYXlfdmFsdWU+PjI4KSYweGYsCisgICAgICAgICAgICAgICAgICAgIChzc2xlYXlfdmFsdWU+PjIwKSYweGZmLAorICAgICAgICAgICAgICAgICAgICAoc3NsZWF5X3ZhbHVlPj4xMikmMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgc3ViKTsKKyAgfQorCisjZWxzZSAvKiBTU0xFQVlfVkVSU0lPTl9OVU1CRVIgaXMgbGVzcyB0aGFuIDAuOS41ICovCisKKyNpZihTU0xFQVlfVkVSU0lPTl9OVU1CRVIgPj0gMHg5MDAwMDApCisgIHJldHVybiBzbnByaW50ZihidWZmZXIsIHNpemUsICJPcGVuU1NMLyVseC4lbHguJWx4IiwKKyAgICAgICAgICAgICAgICAgIChTU0xFQVlfVkVSU0lPTl9OVU1CRVI+PjI4KSYweGZmLAorICAgICAgICAgICAgICAgICAgKFNTTEVBWV9WRVJTSU9OX05VTUJFUj4+MjApJjB4ZmYsCisgICAgICAgICAgICAgICAgICAoU1NMRUFZX1ZFUlNJT05fTlVNQkVSPj4xMikmMHhmKTsKKworI2Vsc2UgLyogKFNTTEVBWV9WRVJTSU9OX05VTUJFUiA+PSAweDkwMDAwMCkgKi8KKyAgeworICAgIGNoYXIgc3ViWzJdOworICAgIHN1YlsxXT0nXDAnOworICAgIGlmKFNTTEVBWV9WRVJTSU9OX05VTUJFUiYweDBmKSB7CisgICAgICBzdWJbMF09KFNTTEVBWV9WRVJTSU9OX05VTUJFUiYweDBmKSArICdhJyAtMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgc3ViWzBdPSdcMCc7CisKKyAgICByZXR1cm4gc25wcmludGYoYnVmZmVyLCBzaXplLCAiU1NMLyV4LiV4LiV4JXMiLAorICAgICAgICAgICAgICAgICAgICAoU1NMRUFZX1ZFUlNJT05fTlVNQkVSPj4xMikmMHhmZiwKKyAgICAgICAgICAgICAgICAgICAgKFNTTEVBWV9WRVJTSU9OX05VTUJFUj4+OCkmMHhmLAorICAgICAgICAgICAgICAgICAgICAoU1NMRUFZX1ZFUlNJT05fTlVNQkVSPj40KSYweGYsIHN1Yik7CisgIH0KKyNlbmRpZiAvKiAoU1NMRUFZX1ZFUlNJT05fTlVNQkVSID49IDB4OTAwMDAwKSAqLworI2VuZGlmIC8qIFNTTEVBWV9WRVJTSU9OX05VTUJFUiBpcyBsZXNzIHRoYW4gMC45LjUgKi8KKworI2VuZGlmIC8qIFlBU1NMX1ZFUlNJT04gKi8KK30KKyNlbmRpZiAvKiBVU0VfU1NMRUFZICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc3NsdXNlLmggYi9jdXJsLTcuMjUuMC9saWIvc3NsdXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMyZWM3YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zc2x1c2UuaApAQCAtMCwwICsxLDg3IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1NTTFVTRV9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1NTTFVTRV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBVU0VfU1NMRUFZCisvKgorICogVGhpcyBoZWFkZXIgc2hvdWxkIG9ubHkgYmUgbmVlZGVkIHRvIGdldCBpbmNsdWRlZCBieSBzc2xnZW4uYyBhbmQgc3NsdXNlLmMKKyAqLworCisjaW5jbHVkZSAidXJsZGF0YS5oIgorCitDVVJMY29kZSBDdXJsX29zc2xfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpOworQ1VSTGNvZGUgQ3VybF9vc3NsX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpOworCisvKiBjbG9zZSBhIFNTTCBjb25uZWN0aW9uICovCit2b2lkIEN1cmxfb3NzbF9jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpOworCisvKiB0ZWxsIE9wZW5TU0wgdG8gY2xvc2UgZG93biBhbGwgb3BlbiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29ubmVjdGlvbnMgKGFuZAorICAgdGh1cyBzZXNzaW9uIElEIGNhY2hpbmcgZXRjKSAqLworaW50IEN1cmxfb3NzbF9jbG9zZV9hbGwoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOworCisvKiBTZXRzIGFuIE9wZW5TU0wgZW5naW5lICovCitDVVJMY29kZSBDdXJsX29zc2xfc2V0X2VuZ2luZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgY29uc3QgY2hhciAqZW5naW5lKTsKKworLyogZnVuY3Rpb24gcHJvdmlkZWQgZm9yIHRoZSBnZW5lcmljIFNTTC1sYXllciwgY2FsbGVkIHdoZW4gYSBzZXNzaW9uIGlkCisgICBzaG91bGQgYmUgZnJlZWQgKi8KK3ZvaWQgQ3VybF9vc3NsX3Nlc3Npb25fZnJlZSh2b2lkICpwdHIpOworCisvKiBTZXRzIGVuZ2luZSBhcyBkZWZhdWx0IGZvciBhbGwgU1NMIG9wZXJhdGlvbnMgKi8KK0NVUkxjb2RlIEN1cmxfb3NzbF9zZXRfZW5naW5lX2RlZmF1bHQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOworCisvKiBCdWlsZCBsaXN0IG9mIE9wZW5TU0wgZW5naW5lcyAqLworc3RydWN0IGN1cmxfc2xpc3QgKkN1cmxfb3NzbF9lbmdpbmVzX2xpc3Qoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOworCitpbnQgQ3VybF9vc3NsX2luaXQodm9pZCk7Cit2b2lkIEN1cmxfb3NzbF9jbGVhbnVwKHZvaWQpOworCitzaXplX3QgQ3VybF9vc3NsX3ZlcnNpb24oY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitpbnQgQ3VybF9vc3NsX2NoZWNrX2N4bihzdHJ1Y3QgY29ubmVjdGRhdGEgKmN4bik7CitpbnQgQ3VybF9vc3NsX3NlZWQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpOworCitpbnQgQ3VybF9vc3NsX3NodXRkb3duKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCk7Citib29sIEN1cmxfb3NzbF9kYXRhX3BlbmRpbmcoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb25uaW5kZXgpOworCisvKiBBUEkgc2V0dXAgZm9yIE9wZW5TU0wgKi8KKyNkZWZpbmUgY3VybHNzbF9pbml0IEN1cmxfb3NzbF9pbml0CisjZGVmaW5lIGN1cmxzc2xfY2xlYW51cCBDdXJsX29zc2xfY2xlYW51cAorI2RlZmluZSBjdXJsc3NsX2Nvbm5lY3QgQ3VybF9vc3NsX2Nvbm5lY3QKKyNkZWZpbmUgY3VybHNzbF9jb25uZWN0X25vbmJsb2NraW5nIEN1cmxfb3NzbF9jb25uZWN0X25vbmJsb2NraW5nCisjZGVmaW5lIGN1cmxzc2xfc2Vzc2lvbl9mcmVlKHgpIEN1cmxfb3NzbF9zZXNzaW9uX2ZyZWUoeCkKKyNkZWZpbmUgY3VybHNzbF9jbG9zZV9hbGwgQ3VybF9vc3NsX2Nsb3NlX2FsbAorI2RlZmluZSBjdXJsc3NsX2Nsb3NlIEN1cmxfb3NzbF9jbG9zZQorI2RlZmluZSBjdXJsc3NsX3NodXRkb3duKHgseSkgQ3VybF9vc3NsX3NodXRkb3duKHgseSkKKyNkZWZpbmUgY3VybHNzbF9zZXRfZW5naW5lKHgseSkgQ3VybF9vc3NsX3NldF9lbmdpbmUoeCx5KQorI2RlZmluZSBjdXJsc3NsX3NldF9lbmdpbmVfZGVmYXVsdCh4KSBDdXJsX29zc2xfc2V0X2VuZ2luZV9kZWZhdWx0KHgpCisjZGVmaW5lIGN1cmxzc2xfZW5naW5lc19saXN0KHgpIEN1cmxfb3NzbF9lbmdpbmVzX2xpc3QoeCkKKyNkZWZpbmUgY3VybHNzbF92ZXJzaW9uIEN1cmxfb3NzbF92ZXJzaW9uCisjZGVmaW5lIGN1cmxzc2xfY2hlY2tfY3huIEN1cmxfb3NzbF9jaGVja19jeG4KKyNkZWZpbmUgY3VybHNzbF9kYXRhX3BlbmRpbmcoeCx5KSBDdXJsX29zc2xfZGF0YV9wZW5kaW5nKHgseSkKKworI2VuZGlmIC8qIFVTRV9TU0xFQVkgKi8KKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9TU0xVU0VfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3N0cmR1cC5jIGIvY3VybC03LjI1LjAvbGliL3N0cmR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZDQ4MGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc3RyZHVwLmMKQEAgLTAsMCArMSw1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSAic3RyZHVwLmgiCisKKyNpZm5kZWYgSEFWRV9TVFJEVVAKK2NoYXIgKmN1cmx4X3N0cmR1cChjb25zdCBjaGFyICpzdHIpCit7CisgIHNpemVfdCBsZW47CisgIGNoYXIgKm5ld3N0cjsKKworICBpZighc3RyKQorICAgIHJldHVybiAoY2hhciAqKU5VTEw7CisKKyAgbGVuID0gc3RybGVuKHN0cik7CisKKyAgaWYobGVuID49ICgoc2l6ZV90KS0xKSAvIHNpemVvZihjaGFyKSkKKyAgICByZXR1cm4gKGNoYXIgKilOVUxMOworCisgIG5ld3N0ciA9IG1hbGxvYygobGVuKzEpKnNpemVvZihjaGFyKSk7CisgIGlmKCFuZXdzdHIpCisgICAgcmV0dXJuIChjaGFyICopTlVMTDsKKworICBtZW1jcHkobmV3c3RyLHN0ciwobGVuKzEpKnNpemVvZihjaGFyKSk7CisKKyAgcmV0dXJuIG5ld3N0cjsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc3RyZHVwLmggYi9jdXJsLTcuMjUuMC9saWIvc3RyZHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVkYmNkNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zdHJkdXAuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1NUUkRVUF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1NUUkRVUF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZuZGVmIEhBVkVfU1RSRFVQCitleHRlcm4gY2hhciAqY3VybHhfc3RyZHVwKGNvbnN0IGNoYXIgKnN0cik7CisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NUUkRVUF9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc3RyZXF1YWwuYyBiL2N1cmwtNy4yNS4wL2xpYi9zdHJlcXVhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMmQwODIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc3RyZXF1YWwuYwpAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic3RyZXF1YWwuaCIKKworLyoKKyAqIEB1bml0dGVzdDogMTMwMQorICovCitpbnQgY3VybF9zdHJlcXVhbChjb25zdCBjaGFyICpmaXJzdCwgY29uc3QgY2hhciAqc2Vjb25kKQoreworI2lmIGRlZmluZWQoSEFWRV9TVFJDQVNFQ01QKQorICByZXR1cm4gIShzdHJjYXNlY21wKShmaXJzdCwgc2Vjb25kKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TVFJDTVBJKQorICByZXR1cm4gIShzdHJjbXBpKShmaXJzdCwgc2Vjb25kKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TVFJJQ01QKQorICByZXR1cm4gIShzdHJpY21wKShmaXJzdCwgc2Vjb25kKTsKKyNlbHNlCisgIHdoaWxlKCpmaXJzdCAmJiAqc2Vjb25kKSB7CisgICAgaWYodG91cHBlcigqZmlyc3QpICE9IHRvdXBwZXIoKnNlY29uZCkpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBmaXJzdCsrOworICAgIHNlY29uZCsrOworICB9CisgIHJldHVybiB0b3VwcGVyKCpmaXJzdCkgPT0gdG91cHBlcigqc2Vjb25kKTsKKyNlbmRpZgorfQorCisvKgorICogQHVuaXR0ZXN0OiAxMzAxCisgKi8KK2ludCBjdXJsX3N0cm5lcXVhbChjb25zdCBjaGFyICpmaXJzdCwgY29uc3QgY2hhciAqc2Vjb25kLCBzaXplX3QgbWF4KQoreworI2lmIGRlZmluZWQoSEFWRV9TVFJOQ0FTRUNNUCkKKyAgcmV0dXJuICFzdHJuY2FzZWNtcChmaXJzdCwgc2Vjb25kLCBtYXgpOworI2VsaWYgZGVmaW5lZChIQVZFX1NUUk5DTVBJKQorICByZXR1cm4gIXN0cm5jbXBpKGZpcnN0LCBzZWNvbmQsIG1heCk7CisjZWxpZiBkZWZpbmVkKEhBVkVfU1RSTklDTVApCisgIHJldHVybiAhc3RybmljbXAoZmlyc3QsIHNlY29uZCwgbWF4KTsKKyNlbHNlCisgIHdoaWxlKCpmaXJzdCAmJiAqc2Vjb25kICYmIG1heCkgeworICAgIGlmKHRvdXBwZXIoKmZpcnN0KSAhPSB0b3VwcGVyKCpzZWNvbmQpKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgbWF4LS07CisgICAgZmlyc3QrKzsKKyAgICBzZWNvbmQrKzsKKyAgfQorICBpZigwID09IG1heCkKKyAgICByZXR1cm4gMTsgLyogdGhleSBhcmUgZXF1YWwgdGhpcyBmYXIgKi8KKworICByZXR1cm4gdG91cHBlcigqZmlyc3QpID09IHRvdXBwZXIoKnNlY29uZCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9zdHJlcXVhbC5oIGIvY3VybC03LjI1LjAvbGliL3N0cmVxdWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyZDRlZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zdHJlcXVhbC5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX19TVFJFUVVBTF9ICisjZGVmaW5lIF9fU1RSRVFVQUxfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2RlZmluZSBzdHJlcXVhbChhLGIpIGN1cmxfc3RyZXF1YWwoYSxiKQorI2RlZmluZSBzdHJuZXF1YWwoYSxiLGMpIGN1cmxfc3RybmVxdWFsKGEsYixjKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9zdHJlcnJvci5jIGIvY3VybC03LjI1LjAvbGliL3N0cmVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhMTI1NwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi9zdHJlcnJvci5jCkBAIC0wLDAgKzEsNzgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX1NUUkVSUk9SX1IKKyMgIGlmICghZGVmaW5lZChIQVZFX1BPU0lYX1NUUkVSUk9SX1IpICYmIFwKKyAgICAgICAhZGVmaW5lZChIQVZFX0dMSUJDX1NUUkVSUk9SX1IpICYmIFwKKyAgICAgICAhZGVmaW5lZChIQVZFX1ZYV09SS1NfU1RSRVJST1JfUikpIHx8IFwKKyAgICAgIChkZWZpbmVkKEhBVkVfUE9TSVhfU1RSRVJST1JfUikgJiYgZGVmaW5lZChIQVZFX1ZYV09SS1NfU1RSRVJST1JfUikpIHx8IFwKKyAgICAgIChkZWZpbmVkKEhBVkVfR0xJQkNfU1RSRVJST1JfUikgJiYgZGVmaW5lZChIQVZFX1ZYV09SS1NfU1RSRVJST1JfUikpIHx8IFwKKyAgICAgIChkZWZpbmVkKEhBVkVfUE9TSVhfU1RSRVJST1JfUikgJiYgZGVmaW5lZChIQVZFX0dMSUJDX1NUUkVSUk9SX1IpKQorIyAgICBlcnJvciAic3RyZXJyb3JfciBNVVNUIGJlIGVpdGhlciBQT1NJWCwgZ2xpYmMgb3Igdnh3b3Jrcy1zdHlsZSIKKyMgIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisjaWZkZWYgVVNFX0xJQklETgorI2luY2x1ZGUgPGlkbmEuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic3RyZXJyb3IuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworCitjb25zdCBjaGFyICoKK2N1cmxfZWFzeV9zdHJlcnJvcihDVVJMY29kZSBlcnJvcikKK3sKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUworICBzd2l0Y2ggKGVycm9yKSB7CisgIGNhc2UgQ1VSTEVfT0s6CisgICAgcmV0dXJuICJObyBlcnJvciI7CisKKyAgY2FzZSBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTDoKKyAgICByZXR1cm4gIlVuc3VwcG9ydGVkIHByb3RvY29sIjsKKworICBjYXNlIENVUkxFX0ZBSUxFRF9JTklUOgorICAgIHJldHVybiAiRmFpbGVkIGluaXRpYWxpemF0aW9uIjsKKworICBjYXNlIENVUkxFX1VSTF9NQUxGT1JNQVQ6CisgICAgcmV0dXJuICJVUkwgdXNpbmcgYmFkL2lsbGVnYWwgZm9ybWF0IG9yIG1pc3NpbmcgVVJMIjsKKworICBjYXNlIENVUkxFX05PVF9CVUlMVF9JTjoKKyAgICByZXR1cm4gIkEgcmVxdWVzdGVkIGZlYXR1cmUsIHByb3RvY29sIG9yIG9wdGlvbiB3YXMgbm90IGZvdW5kIGJ1aWx0LWluIGluIgorICAgICAgIiB0aGlzIGxpYmN1cmwgZHVlIHRvIGEgYnVpbGQtdGltZSBkZWNpc2lvbi4iOworCisgIGNhc2UgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZOgorICAgIHJldHVybiAiQ291bGRuJ3QgcmVzb2x2ZSBwcm94eSBuYW1lIjsKKworICBjYXNlIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUOgorICAgIHJldHVybiAiQ291bGRuJ3QgcmVzb2x2ZSBob3N0IG5hbWUiOworCisgIGNhc2UgQ1VSTEVfQ09VTEROVF9DT05ORUNUOgorICAgIHJldHVybiAiQ291bGRuJ3QgY29ubmVjdCB0byBzZXJ2ZXIiOworCisgIGNhc2UgQ1VSTEVfRlRQX1dFSVJEX1NFUlZFUl9SRVBMWToKKyAgICByZXR1cm4gIkZUUDogd2VpcmQgc2VydmVyIHJlcGx5IjsKKworICBjYXNlIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOgorICAgIHJldHVybiAiQWNjZXNzIGRlbmllZCB0byByZW1vdGUgcmVzb3VyY2UiOworCisgIGNhc2UgQ1VSTEVfRlRQX0FDQ0VQVF9GQUlMRUQ6CisgICAgcmV0dXJuICJGVFA6IFRoZSBzZXJ2ZXIgZmFpbGVkIHRvIGNvbm5lY3QgdG8gZGF0YSBwb3J0IjsKKworICBjYXNlIENVUkxFX0ZUUF9BQ0NFUFRfVElNRU9VVDoKKyAgICByZXR1cm4gIkZUUDogQWNjZXB0aW5nIHNlcnZlciBjb25uZWN0IGhhcyB0aW1lZCBvdXQiOworCisgIGNhc2UgQ1VSTEVfRlRQX1BSRVRfRkFJTEVEOgorICAgIHJldHVybiAiRlRQOiBUaGUgc2VydmVyIGRpZCBub3QgYWNjZXB0IHRoZSBQUkVUIGNvbW1hbmQuIjsKKworICBjYXNlIENVUkxFX0ZUUF9XRUlSRF9QQVNTX1JFUExZOgorICAgIHJldHVybiAiRlRQOiB1bmtub3duIFBBU1MgcmVwbHkiOworCisgIGNhc2UgQ1VSTEVfRlRQX1dFSVJEX1BBU1ZfUkVQTFk6CisgICAgcmV0dXJuICJGVFA6IHVua25vd24gUEFTViByZXBseSI7CisKKyAgY2FzZSBDVVJMRV9GVFBfV0VJUkRfMjI3X0ZPUk1BVDoKKyAgICByZXR1cm4gIkZUUDogdW5rbm93biAyMjcgcmVzcG9uc2UgZm9ybWF0IjsKKworICBjYXNlIENVUkxFX0ZUUF9DQU5UX0dFVF9IT1NUOgorICAgIHJldHVybiAiRlRQOiBjYW4ndCBmaWd1cmUgb3V0IHRoZSBob3N0IGluIHRoZSBQQVNWIHJlc3BvbnNlIjsKKworICBjYXNlIENVUkxFX0ZUUF9DT1VMRE5UX1NFVF9UWVBFOgorICAgIHJldHVybiAiRlRQOiBjb3VsZG4ndCBzZXQgZmlsZSB0eXBlIjsKKworICBjYXNlIENVUkxFX1BBUlRJQUxfRklMRToKKyAgICByZXR1cm4gIlRyYW5zZmVycmVkIGEgcGFydGlhbCBmaWxlIjsKKworICBjYXNlIENVUkxFX0ZUUF9DT1VMRE5UX1JFVFJfRklMRToKKyAgICByZXR1cm4gIkZUUDogY291bGRuJ3QgcmV0cmlldmUgKFJFVFIgZmFpbGVkKSB0aGUgc3BlY2lmaWVkIGZpbGUiOworCisgIGNhc2UgQ1VSTEVfUVVPVEVfRVJST1I6CisgICAgcmV0dXJuICJRdW90ZSBjb21tYW5kIHJldHVybmVkIGVycm9yIjsKKworICBjYXNlIENVUkxFX0hUVFBfUkVUVVJORURfRVJST1I6CisgICAgcmV0dXJuICJIVFRQIHJlc3BvbnNlIGNvZGUgc2FpZCBlcnJvciI7CisKKyAgY2FzZSBDVVJMRV9XUklURV9FUlJPUjoKKyAgICByZXR1cm4gIkZhaWxlZCB3cml0aW5nIHJlY2VpdmVkIGRhdGEgdG8gZGlzay9hcHBsaWNhdGlvbiI7CisKKyAgY2FzZSBDVVJMRV9VUExPQURfRkFJTEVEOgorICAgIHJldHVybiAiVXBsb2FkIGZhaWxlZCAoYXQgc3RhcnQvYmVmb3JlIGl0IHRvb2sgb2ZmKSI7CisKKyAgY2FzZSBDVVJMRV9SRUFEX0VSUk9SOgorICAgIHJldHVybiAiRmFpbGVkIHRvIG9wZW4vcmVhZCBsb2NhbCBkYXRhIGZyb20gZmlsZS9hcHBsaWNhdGlvbiI7CisKKyAgY2FzZSBDVVJMRV9PVVRfT0ZfTUVNT1JZOgorICAgIHJldHVybiAiT3V0IG9mIG1lbW9yeSI7CisKKyAgY2FzZSBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ6CisgICAgcmV0dXJuICJUaW1lb3V0IHdhcyByZWFjaGVkIjsKKworICBjYXNlIENVUkxFX0ZUUF9QT1JUX0ZBSUxFRDoKKyAgICByZXR1cm4gIkZUUDogY29tbWFuZCBQT1JUIGZhaWxlZCI7CisKKyAgY2FzZSBDVVJMRV9GVFBfQ09VTEROVF9VU0VfUkVTVDoKKyAgICByZXR1cm4gIkZUUDogY29tbWFuZCBSRVNUIGZhaWxlZCI7CisKKyAgY2FzZSBDVVJMRV9SQU5HRV9FUlJPUjoKKyAgICByZXR1cm4gIlJlcXVlc3RlZCByYW5nZSB3YXMgbm90IGRlbGl2ZXJlZCBieSB0aGUgc2VydmVyIjsKKworICBjYXNlIENVUkxFX0hUVFBfUE9TVF9FUlJPUjoKKyAgICByZXR1cm4gIkludGVybmFsIHByb2JsZW0gc2V0dGluZyB1cCB0aGUgUE9TVCI7CisKKyAgY2FzZSBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjoKKyAgICByZXR1cm4gIlNTTCBjb25uZWN0IGVycm9yIjsKKworICBjYXNlIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUU6CisgICAgcmV0dXJuICJDb3VsZG4ndCByZXN1bWUgZG93bmxvYWQiOworCisgIGNhc2UgQ1VSTEVfRklMRV9DT1VMRE5UX1JFQURfRklMRToKKyAgICByZXR1cm4gIkNvdWxkbid0IHJlYWQgYSBmaWxlOi8vIGZpbGUiOworCisgIGNhc2UgQ1VSTEVfTERBUF9DQU5OT1RfQklORDoKKyAgICByZXR1cm4gIkxEQVA6IGNhbm5vdCBiaW5kIjsKKworICBjYXNlIENVUkxFX0xEQVBfU0VBUkNIX0ZBSUxFRDoKKyAgICByZXR1cm4gIkxEQVA6IHNlYXJjaCBmYWlsZWQiOworCisgIGNhc2UgQ1VSTEVfRlVOQ1RJT05fTk9UX0ZPVU5EOgorICAgIHJldHVybiAiQSByZXF1aXJlZCBmdW5jdGlvbiBpbiB0aGUgbGlicmFyeSB3YXMgbm90IGZvdW5kIjsKKworICBjYXNlIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s6CisgICAgcmV0dXJuICJPcGVyYXRpb24gd2FzIGFib3J0ZWQgYnkgYW4gYXBwbGljYXRpb24gY2FsbGJhY2siOworCisgIGNhc2UgQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOgorICAgIHJldHVybiAiQSBsaWJjdXJsIGZ1bmN0aW9uIHdhcyBnaXZlbiBhIGJhZCBhcmd1bWVudCI7CisKKyAgY2FzZSBDVVJMRV9JTlRFUkZBQ0VfRkFJTEVEOgorICAgIHJldHVybiAiRmFpbGVkIGJpbmRpbmcgbG9jYWwgY29ubmVjdGlvbiBlbmQiOworCisgIGNhc2UgQ1VSTEVfVE9PX01BTllfUkVESVJFQ1RTIDoKKyAgICByZXR1cm4gIk51bWJlciBvZiByZWRpcmVjdHMgaGl0IG1heGltdW0gYW1vdW50IjsKKworICBjYXNlIENVUkxFX1VOS05PV05fT1BUSU9OOgorICAgIHJldHVybiAiQW4gdW5rbm93biBvcHRpb24gd2FzIHBhc3NlZCBpbiB0byBsaWJjdXJsIjsKKworICBjYXNlIENVUkxFX1RFTE5FVF9PUFRJT05fU1lOVEFYIDoKKyAgICByZXR1cm4gIk1hbGZvcm1lZCB0ZWxuZXQgb3B0aW9uIjsKKworICBjYXNlIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjoKKyAgICByZXR1cm4gIlNTTCBwZWVyIGNlcnRpZmljYXRlIG9yIFNTSCByZW1vdGUga2V5IHdhcyBub3QgT0siOworCisgIGNhc2UgQ1VSTEVfR09UX05PVEhJTkc6CisgICAgcmV0dXJuICJTZXJ2ZXIgcmV0dXJuZWQgbm90aGluZyAobm8gaGVhZGVycywgbm8gZGF0YSkiOworCisgIGNhc2UgQ1VSTEVfU1NMX0VOR0lORV9OT1RGT1VORDoKKyAgICByZXR1cm4gIlNTTCBjcnlwdG8gZW5naW5lIG5vdCBmb3VuZCI7CisKKyAgY2FzZSBDVVJMRV9TU0xfRU5HSU5FX1NFVEZBSUxFRDoKKyAgICByZXR1cm4gIkNhbiBub3Qgc2V0IFNTTCBjcnlwdG8gZW5naW5lIGFzIGRlZmF1bHQiOworCisgIGNhc2UgQ1VSTEVfU1NMX0VOR0lORV9JTklURkFJTEVEOgorICAgIHJldHVybiAiRmFpbGVkIHRvIGluaXRpYWxpc2UgU1NMIGNyeXB0byBlbmdpbmUiOworCisgIGNhc2UgQ1VSTEVfU0VORF9FUlJPUjoKKyAgICByZXR1cm4gIkZhaWxlZCBzZW5kaW5nIGRhdGEgdG8gdGhlIHBlZXIiOworCisgIGNhc2UgQ1VSTEVfUkVDVl9FUlJPUjoKKyAgICByZXR1cm4gIkZhaWx1cmUgd2hlbiByZWNlaXZpbmcgZGF0YSBmcm9tIHRoZSBwZWVyIjsKKworICBjYXNlIENVUkxFX1NTTF9DRVJUUFJPQkxFTToKKyAgICByZXR1cm4gIlByb2JsZW0gd2l0aCB0aGUgbG9jYWwgU1NMIGNlcnRpZmljYXRlIjsKKworICBjYXNlIENVUkxFX1NTTF9DSVBIRVI6CisgICAgcmV0dXJuICJDb3VsZG4ndCB1c2Ugc3BlY2lmaWVkIFNTTCBjaXBoZXIiOworCisgIGNhc2UgQ1VSTEVfU1NMX0NBQ0VSVDoKKyAgICByZXR1cm4gIlBlZXIgY2VydGlmaWNhdGUgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCBnaXZlbiBDQSAiCisgICAgICAiY2VydGlmaWNhdGVzIjsKKworICBjYXNlIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRToKKyAgICByZXR1cm4gIlByb2JsZW0gd2l0aCB0aGUgU1NMIENBIGNlcnQgKHBhdGg/IGFjY2VzcyByaWdodHM/KSI7CisKKyAgY2FzZSBDVVJMRV9CQURfQ09OVEVOVF9FTkNPRElORzoKKyAgICByZXR1cm4gIlVucmVjb2duaXplZCBvciBiYWQgSFRUUCBDb250ZW50IG9yIFRyYW5zZmVyLUVuY29kaW5nIjsKKworICBjYXNlIENVUkxFX0xEQVBfSU5WQUxJRF9VUkw6CisgICAgcmV0dXJuICJJbnZhbGlkIExEQVAgVVJMIjsKKworICBjYXNlIENVUkxFX0ZJTEVTSVpFX0VYQ0VFREVEOgorICAgIHJldHVybiAiTWF4aW11bSBmaWxlIHNpemUgZXhjZWVkZWQiOworCisgIGNhc2UgQ1VSTEVfVVNFX1NTTF9GQUlMRUQ6CisgICAgcmV0dXJuICJSZXF1ZXN0ZWQgU1NMIGxldmVsIGZhaWxlZCI7CisKKyAgY2FzZSBDVVJMRV9TU0xfU0hVVERPV05fRkFJTEVEOgorICAgIHJldHVybiAiRmFpbGVkIHRvIHNodXQgZG93biB0aGUgU1NMIGNvbm5lY3Rpb24iOworCisgIGNhc2UgQ1VSTEVfU1NMX0NSTF9CQURGSUxFOgorICAgIHJldHVybiAiRmFpbGVkIHRvIGxvYWQgQ1JMIGZpbGUgKHBhdGg/IGFjY2VzcyByaWdodHM/LCBmb3JtYXQ/KSI7CisKKyAgY2FzZSBDVVJMRV9TU0xfSVNTVUVSX0VSUk9SOgorICAgIHJldHVybiAiSXNzdWVyIGNoZWNrIGFnYWluc3QgcGVlciBjZXJ0aWZpY2F0ZSBmYWlsZWQiOworCisgIGNhc2UgQ1VSTEVfU0VORF9GQUlMX1JFV0lORDoKKyAgICByZXR1cm4gIlNlbmQgZmFpbGVkIHNpbmNlIHJld2luZGluZyBvZiB0aGUgZGF0YSBzdHJlYW0gZmFpbGVkIjsKKworICBjYXNlIENVUkxFX0xPR0lOX0RFTklFRDoKKyAgICByZXR1cm4gIkxvZ2luIGRlbmllZCI7CisKKyAgY2FzZSBDVVJMRV9URlRQX05PVEZPVU5EOgorICAgIHJldHVybiAiVEZUUDogRmlsZSBOb3QgRm91bmQiOworCisgIGNhc2UgQ1VSTEVfVEZUUF9QRVJNOgorICAgIHJldHVybiAiVEZUUDogQWNjZXNzIFZpb2xhdGlvbiI7CisKKyAgY2FzZSBDVVJMRV9SRU1PVEVfRElTS19GVUxMOgorICAgIHJldHVybiAiRGlzayBmdWxsIG9yIGFsbG9jYXRpb24gZXhjZWVkZWQiOworCisgIGNhc2UgQ1VSTEVfVEZUUF9JTExFR0FMOgorICAgIHJldHVybiAiVEZUUDogSWxsZWdhbCBvcGVyYXRpb24iOworCisgIGNhc2UgQ1VSTEVfVEZUUF9VTktOT1dOSUQ6CisgICAgcmV0dXJuICJURlRQOiBVbmtub3duIHRyYW5zZmVyIElEIjsKKworICBjYXNlIENVUkxFX1JFTU9URV9GSUxFX0VYSVNUUzoKKyAgICByZXR1cm4gIlJlbW90ZSBmaWxlIGFscmVhZHkgZXhpc3RzIjsKKworICBjYXNlIENVUkxFX1RGVFBfTk9TVUNIVVNFUjoKKyAgICByZXR1cm4gIlRGVFA6IE5vIHN1Y2ggdXNlciI7CisKKyAgY2FzZSBDVVJMRV9DT05WX0ZBSUxFRDoKKyAgICByZXR1cm4gIkNvbnZlcnNpb24gZmFpbGVkIjsKKworICBjYXNlIENVUkxFX0NPTlZfUkVRRDoKKyAgICByZXR1cm4gIkNhbGxlciBtdXN0IHJlZ2lzdGVyIENVUkxPUFRfQ09OVl8gY2FsbGJhY2sgb3B0aW9ucyI7CisKKyAgY2FzZSBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQ6CisgICAgcmV0dXJuICJSZW1vdGUgZmlsZSBub3QgZm91bmQiOworCisgIGNhc2UgQ1VSTEVfU1NIOgorICAgIHJldHVybiAiRXJyb3IgaW4gdGhlIFNTSCBsYXllciI7CisKKyAgY2FzZSBDVVJMRV9BR0FJTjoKKyAgICByZXR1cm4gIlNvY2tldCBub3QgcmVhZHkgZm9yIHNlbmQvcmVjdiI7CisKKyAgY2FzZSBDVVJMRV9SVFNQX0NTRVFfRVJST1I6CisgICAgcmV0dXJuICJSVFNQIENTZXEgbWlzbWF0Y2ggb3IgaW52YWxpZCBDU2VxIjsKKworICBjYXNlIENVUkxFX1JUU1BfU0VTU0lPTl9FUlJPUjoKKyAgICByZXR1cm4gIlJUU1Agc2Vzc2lvbiBlcnJvciI7CisKKyAgY2FzZSBDVVJMRV9GVFBfQkFEX0ZJTEVfTElTVDoKKyAgICByZXR1cm4gIlVuYWJsZSB0byBwYXJzZSBGVFAgZmlsZSBsaXN0IjsKKworICBjYXNlIENVUkxFX0NIVU5LX0ZBSUxFRDoKKyAgICByZXR1cm4gIkNodW5rIGNhbGxiYWNrIGZhaWxlZCI7CisKKyAgICAvKiBlcnJvciBjb2RlcyBub3QgdXNlZCBieSBjdXJyZW50IGxpYmN1cmwgKi8KKyAgY2FzZSBDVVJMRV9PQlNPTEVURTE2OgorICBjYXNlIENVUkxFX09CU09MRVRFMjA6CisgIGNhc2UgQ1VSTEVfT0JTT0xFVEUyNDoKKyAgY2FzZSBDVVJMRV9PQlNPTEVURTI5OgorICBjYXNlIENVUkxFX09CU09MRVRFMzI6CisgIGNhc2UgQ1VSTEVfT0JTT0xFVEU0MDoKKyAgY2FzZSBDVVJMRV9PQlNPTEVURTQ0OgorICBjYXNlIENVUkxFX09CU09MRVRFNDY6CisgIGNhc2UgQ1VSTEVfT0JTT0xFVEU1MDoKKyAgY2FzZSBDVVJMRV9PQlNPTEVURTU3OgorICBjYXNlIENVUkxfTEFTVDoKKyAgICBicmVhazsKKyAgfQorICAvKgorICAgKiBCeSB1c2luZyBhIHN3aXRjaCwgZ2NjIC1XYWxsIHdpbGwgY29tcGxhaW4gYWJvdXQgZW51bSB2YWx1ZXMKKyAgICogd2hpY2ggZG8gbm90IGFwcGVhciwgaGVscGluZyBrZWVwIHRoaXMgZnVuY3Rpb24gdXAtdG8tZGF0ZS4KKyAgICogQnkgdXNpbmcgZ2NjIC1XYWxsIC1XZXJyb3IsIHlvdSBjYW4ndCBmb3JnZXQuCisgICAqCisgICAqIEEgdGFibGUgd291bGQgbm90IGhhdmUgdGhlIHNhbWUgYmVuZWZpdC4gIE1vc3QgY29tcGlsZXJzIHdpbGwKKyAgICogZ2VuZXJhdGUgY29kZSB2ZXJ5IHNpbWlsYXIgdG8gYSB0YWJsZSBpbiBhbnkgY2FzZSwgc28gdGhlcmUKKyAgICogaXMgbGl0dGxlIHBlcmZvcm1hbmNlIGdhaW4gZnJvbSBhIHRhYmxlLiAgQW5kIHNvbWV0aGluZyBpcyBicm9rZW4KKyAgICogZm9yIHRoZSB1c2VyJ3MgYXBwbGljYXRpb24sIGFueXdheXMsIHNvIGRvZXMgaXQgbWF0dGVyIGhvdyBmYXN0CisgICAqIGl0IF9kb2Vzbid0XyB3b3JrPworICAgKgorICAgKiBUaGUgbGluZSBudW1iZXIgZm9yIHRoZSBlcnJvciB3aWxsIGJlIG5lYXIgdGhpcyBjb21tZW50LCB3aGljaAorICAgKiBpcyB3aHkgaXQgaXMgaGVyZSwgYW5kIG5vdCBhdCB0aGUgc3RhcnQgb2YgdGhlIHN3aXRjaC4KKyAgICovCisgIHJldHVybiAiVW5rbm93biBlcnJvciI7CisjZWxzZQorICBpZihlcnJvciA9PSBDVVJMRV9PSykKKyAgICByZXR1cm4gIk5vIGVycm9yIjsKKyAgZWxzZQorICAgIHJldHVybiAiRXJyb3IiOworI2VuZGlmCit9CisKK2NvbnN0IGNoYXIgKgorY3VybF9tdWx0aV9zdHJlcnJvcihDVVJMTWNvZGUgZXJyb3IpCit7CisjaWZuZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKKyAgc3dpdGNoIChlcnJvcikgeworICBjYXNlIENVUkxNX0NBTExfTVVMVElfUEVSRk9STToKKyAgICByZXR1cm4gIlBsZWFzZSBjYWxsIGN1cmxfbXVsdGlfcGVyZm9ybSgpIHNvb24iOworCisgIGNhc2UgQ1VSTE1fT0s6CisgICAgcmV0dXJuICJObyBlcnJvciI7CisKKyAgY2FzZSBDVVJMTV9CQURfSEFORExFOgorICAgIHJldHVybiAiSW52YWxpZCBtdWx0aSBoYW5kbGUiOworCisgIGNhc2UgQ1VSTE1fQkFEX0VBU1lfSEFORExFOgorICAgIHJldHVybiAiSW52YWxpZCBlYXN5IGhhbmRsZSI7CisKKyAgY2FzZSBDVVJMTV9PVVRfT0ZfTUVNT1JZOgorICAgIHJldHVybiAiT3V0IG9mIG1lbW9yeSI7CisKKyAgY2FzZSBDVVJMTV9JTlRFUk5BTF9FUlJPUjoKKyAgICByZXR1cm4gIkludGVybmFsIGVycm9yIjsKKworICBjYXNlIENVUkxNX0JBRF9TT0NLRVQ6CisgICAgcmV0dXJuICJJbnZhbGlkIHNvY2tldCBhcmd1bWVudCI7CisKKyAgY2FzZSBDVVJMTV9VTktOT1dOX09QVElPTjoKKyAgICByZXR1cm4gIlVua25vd24gb3B0aW9uIjsKKworICBjYXNlIENVUkxNX0xBU1Q6CisgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gIlVua25vd24gZXJyb3IiOworI2Vsc2UKKyAgaWYoZXJyb3IgPT0gQ1VSTE1fT0spCisgICAgcmV0dXJuICJObyBlcnJvciI7CisgIGVsc2UKKyAgICByZXR1cm4gIkVycm9yIjsKKyNlbmRpZgorfQorCitjb25zdCBjaGFyICoKK2N1cmxfc2hhcmVfc3RyZXJyb3IoQ1VSTFNIY29kZSBlcnJvcikKK3sKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUworICBzd2l0Y2ggKGVycm9yKSB7CisgIGNhc2UgQ1VSTFNIRV9PSzoKKyAgICByZXR1cm4gIk5vIGVycm9yIjsKKworICBjYXNlIENVUkxTSEVfQkFEX09QVElPTjoKKyAgICByZXR1cm4gIlVua25vd24gc2hhcmUgb3B0aW9uIjsKKworICBjYXNlIENVUkxTSEVfSU5fVVNFOgorICAgIHJldHVybiAiU2hhcmUgY3VycmVudGx5IGluIHVzZSI7CisKKyAgY2FzZSBDVVJMU0hFX0lOVkFMSUQ6CisgICAgcmV0dXJuICJJbnZhbGlkIHNoYXJlIGhhbmRsZSI7CisKKyAgY2FzZSBDVVJMU0hFX05PTUVNOgorICAgIHJldHVybiAiT3V0IG9mIG1lbW9yeSI7CisKKyAgY2FzZSBDVVJMU0hFX05PVF9CVUlMVF9JTjoKKyAgICByZXR1cm4gIkZlYXR1cmUgbm90IGVuYWJsZWQgaW4gdGhpcyBsaWJyYXJ5IjsKKworICBjYXNlIENVUkxTSEVfTEFTVDoKKyAgICBicmVhazsKKyAgfQorCisgIHJldHVybiAiQ1VSTFNIY29kZSB1bmtub3duIjsKKyNlbHNlCisgIGlmKGVycm9yID09IENVUkxTSEVfT0spCisgICAgcmV0dXJuICJObyBlcnJvciI7CisgIGVsc2UKKyAgICByZXR1cm4gIkVycm9yIjsKKyNlbmRpZgorfQorCisjaWZkZWYgVVNFX1dJTlNPQ0sKKworLyogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIG1vc3QgLyBhbGwgKD8pIFdpbnNvY2sgZXJyb3JzIGNVUkwgaXMgYWJsZSB0byBwcm9kdWNlLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRfd2luc29ja19lcnJvciAoaW50IGVyciwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworICBjb25zdCBjaGFyICpwOworCisjaWZuZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKKyAgc3dpdGNoIChlcnIpIHsKKyAgY2FzZSBXU0FFSU5UUjoKKyAgICBwID0gIkNhbGwgaW50ZXJydXB0ZWQiOworICAgIGJyZWFrOworICBjYXNlIFdTQUVCQURGOgorICAgIHAgPSAiQmFkIGZpbGUiOworICAgIGJyZWFrOworICBjYXNlIFdTQUVBQ0NFUzoKKyAgICBwID0gIkJhZCBhY2Nlc3MiOworICAgIGJyZWFrOworICBjYXNlIFdTQUVGQVVMVDoKKyAgICBwID0gIkJhZCBhcmd1bWVudCI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRUlOVkFMOgorICAgIHAgPSAiSW52YWxpZCBhcmd1bWVudHMiOworICAgIGJyZWFrOworICBjYXNlIFdTQUVNRklMRToKKyAgICBwID0gIk91dCBvZiBmaWxlIGRlc2NyaXB0b3JzIjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFV09VTERCTE9DSzoKKyAgICBwID0gIkNhbGwgd291bGQgYmxvY2siOworICAgIGJyZWFrOworICBjYXNlIFdTQUVJTlBST0dSRVNTOgorICBjYXNlIFdTQUVBTFJFQURZOgorICAgIHAgPSAiQmxvY2tpbmcgY2FsbCBpbiBwcm9ncmVzcyI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRU5PVFNPQ0s6CisgICAgcCA9ICJEZXNjcmlwdG9yIGlzIG5vdCBhIHNvY2tldCI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRURFU1RBRERSUkVROgorICAgIHAgPSAiTmVlZCBkZXN0aW5hdGlvbiBhZGRyZXNzIjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFTVNHU0laRToKKyAgICBwID0gIkJhZCBtZXNzYWdlIHNpemUiOworICAgIGJyZWFrOworICBjYXNlIFdTQUVQUk9UT1RZUEU6CisgICAgcCA9ICJCYWQgcHJvdG9jb2wiOworICAgIGJyZWFrOworICBjYXNlIFdTQUVOT1BST1RPT1BUOgorICAgIHAgPSAiUHJvdG9jb2wgb3B0aW9uIGlzIHVuc3VwcG9ydGVkIjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFUFJPVE9OT1NVUFBPUlQ6CisgICAgcCA9ICJQcm90b2NvbCBpcyB1bnN1cHBvcnRlZCI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRVNPQ0tUTk9TVVBQT1JUOgorICAgIHAgPSAiU29ja2V0IGlzIHVuc3VwcG9ydGVkIjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFT1BOT1RTVVBQOgorICAgIHAgPSAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiOworICAgIGJyZWFrOworICBjYXNlIFdTQUVBRk5PU1VQUE9SVDoKKyAgICBwID0gIkFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiOworICAgIGJyZWFrOworICBjYXNlIFdTQUVQRk5PU1VQUE9SVDoKKyAgICBwID0gIlByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkIjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFQUREUklOVVNFOgorICAgIHAgPSAiQWRkcmVzcyBhbHJlYWR5IGluIHVzZSI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRUFERFJOT1RBVkFJTDoKKyAgICBwID0gIkFkZHJlc3Mgbm90IGF2YWlsYWJsZSI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRU5FVERPV046CisgICAgcCA9ICJOZXR3b3JrIGRvd24iOworICAgIGJyZWFrOworICBjYXNlIFdTQUVORVRVTlJFQUNIOgorICAgIHAgPSAiTmV0d29yayB1bnJlYWNoYWJsZSI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRU5FVFJFU0VUOgorICAgIHAgPSAiTmV0d29yayBoYXMgYmVlbiByZXNldCI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRUNPTk5BQk9SVEVEOgorICAgIHAgPSAiQ29ubmVjdGlvbiB3YXMgYWJvcnRlZCI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRUNPTk5SRVNFVDoKKyAgICBwID0gIkNvbm5lY3Rpb24gd2FzIHJlc2V0IjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFTk9CVUZTOgorICAgIHAgPSAiTm8gYnVmZmVyIHNwYWNlIjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFSVNDT05OOgorICAgIHAgPSAiU29ja2V0IGlzIGFscmVhZHkgY29ubmVjdGVkIjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFTk9UQ09OTjoKKyAgICBwID0gIlNvY2tldCBpcyBub3QgY29ubmVjdGVkIjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFU0hVVERPV046CisgICAgcCA9ICJTb2NrZXQgaGFzIGJlZW4gc2h1dCBkb3duIjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFVE9PTUFOWVJFRlM6CisgICAgcCA9ICJUb28gbWFueSByZWZlcmVuY2VzIjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFVElNRURPVVQ6CisgICAgcCA9ICJUaW1lZCBvdXQiOworICAgIGJyZWFrOworICBjYXNlIFdTQUVDT05OUkVGVVNFRDoKKyAgICBwID0gIkNvbm5lY3Rpb24gcmVmdXNlZCI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRUxPT1A6CisgICAgcCA9ICJMb29wPz8iOworICAgIGJyZWFrOworICBjYXNlIFdTQUVOQU1FVE9PTE9ORzoKKyAgICBwID0gIk5hbWUgdG9vIGxvbmciOworICAgIGJyZWFrOworICBjYXNlIFdTQUVIT1NURE9XTjoKKyAgICBwID0gIkhvc3QgZG93biI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRUhPU1RVTlJFQUNIOgorICAgIHAgPSAiSG9zdCB1bnJlYWNoYWJsZSI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRU5PVEVNUFRZOgorICAgIHAgPSAiTm90IGVtcHR5IjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFUFJPQ0xJTToKKyAgICBwID0gIlByb2Nlc3MgbGltaXQgcmVhY2hlZCI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRVVTRVJTOgorICAgIHAgPSAiVG9vIG1hbnkgdXNlcnMiOworICAgIGJyZWFrOworICBjYXNlIFdTQUVEUVVPVDoKKyAgICBwID0gIkJhZCBxdW90YSI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBRVNUQUxFOgorICAgIHAgPSAiU29tZXRoaW5nIGlzIHN0YWxlIjsKKyAgICBicmVhazsKKyAgY2FzZSBXU0FFUkVNT1RFOgorICAgIHAgPSAiUmVtb3RlIGVycm9yIjsKKyAgICBicmVhazsKKyNpZmRlZiBXU0FFRElTQ09OICAvKiBtaXNzaW5nIGluIFNhbGZvcmRDISAqLworICBjYXNlIFdTQUVESVNDT046CisgICAgcCA9ICJEaXNjb25uZWN0ZWQiOworICAgIGJyZWFrOworI2VuZGlmCisgICAgLyogRXh0ZW5kZWQgV2luc29jayBlcnJvcnMgKi8KKyAgY2FzZSBXU0FTWVNOT1RSRUFEWToKKyAgICBwID0gIldpbnNvY2sgbGlicmFyeSBpcyBub3QgcmVhZHkiOworICAgIGJyZWFrOworICBjYXNlIFdTQU5PVElOSVRJQUxJU0VEOgorICAgIHAgPSAiV2luc29jayBsaWJyYXJ5IG5vdCBpbml0aWFsaXNlZCI7CisgICAgYnJlYWs7CisgIGNhc2UgV1NBVkVSTk9UU1VQUE9SVEVEOgorICAgIHAgPSAiV2luc29jayB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQiOworICAgIGJyZWFrOworCisgICAgLyogZ2V0WGJ5WSgpIGVycm9ycyAoYWxyZWFkeSBoYW5kbGVkIGluIGhlcnJtc2cpOgorICAgICAqIEF1dGhvcml0YXRpdmUgQW5zd2VyOiBIb3N0IG5vdCBmb3VuZCAqLworICBjYXNlIFdTQUhPU1RfTk9UX0ZPVU5EOgorICAgIHAgPSAiSG9zdCBub3QgZm91bmQiOworICAgIGJyZWFrOworCisgICAgLyogTm9uLUF1dGhvcml0YXRpdmU6IEhvc3Qgbm90IGZvdW5kLCBvciBTRVJWRVJGQUlMICovCisgIGNhc2UgV1NBVFJZX0FHQUlOOgorICAgIHAgPSAiSG9zdCBub3QgZm91bmQsIHRyeSBhZ2FpbiI7CisgICAgYnJlYWs7CisKKyAgICAvKiBOb24gcmVjb3ZlcmFibGUgZXJyb3JzLCBGT1JNRVJSLCBSRUZVU0VELCBOT1RJTVAgKi8KKyAgY2FzZSBXU0FOT19SRUNPVkVSWToKKyAgICBwID0gIlVucmVjb3ZlcmFibGUgZXJyb3IgaW4gY2FsbCB0byBuYW1lc2VydmVyIjsKKyAgICBicmVhazsKKworICAgIC8qIFZhbGlkIG5hbWUsIG5vIGRhdGEgcmVjb3JkIG9mIHJlcXVlc3RlZCB0eXBlICovCisgIGNhc2UgV1NBTk9fREFUQToKKyAgICBwID0gIk5vIGRhdGEgcmVjb3JkIG9mIHJlcXVlc3RlZCB0eXBlIjsKKyAgICBicmVhazsKKworICBkZWZhdWx0OgorICAgIHJldHVybiBOVUxMOworICB9CisjZWxzZQorICBpZihlcnIgPT0gQ1VSTEVfT0spCisgICAgcmV0dXJuIE5VTEw7CisgIGVsc2UKKyAgICBwID0gImVycm9yIjsKKyNlbmRpZgorICBzdHJuY3B5IChidWYsIHAsIGxlbik7CisgIGJ1ZiBbbGVuLTFdID0gJ1wwJzsKKyAgcmV0dXJuIGJ1ZjsKK30KKyNlbmRpZiAgIC8qIFVTRV9XSU5TT0NLICovCisKKy8qCisgKiBPdXIgdGhyZWFkLXNhZmUgYW5kIHNtYXJ0IHN0cmVycm9yKCkgcmVwbGFjZW1lbnQuCisgKgorICogVGhlICdlcnInIGFyZ3VtZW50IHBhc3NlZCBpbiB0byB0aGlzIGZ1bmN0aW9uIE1VU1QgYmUgYSB0cnVlIGVycm5vIG51bWJlcgorICogYXMgcmVwb3J0ZWQgb24gdGhpcyBzeXN0ZW0uIFdlIGRvIG5vIHJhbmdlIGNoZWNraW5nIG9uIHRoZSBudW1iZXIgYmVmb3JlCisgKiB3ZSBwYXNzIGl0IHRvIHRoZSAibnVtYmVyLXRvLW1lc3NhZ2UiIGNvbnZlcnNpb24gZnVuY3Rpb24gYW5kIHRoZXJlIG1pZ2h0CisgKiBiZSBzeXN0ZW1zIHRoYXQgZG9uJ3QgZG8gcHJvcGVyIHJhbmdlIGNoZWNraW5nIGluIHRoZXJlIHRoZW1zZWx2ZXMuCisgKgorICogV2UgZG9uJ3QgZG8gcmFuZ2UgY2hlY2tpbmcgKG9uIHN5c3RlbXMgb3RoZXIgdGhhbiBXaW5kb3dzKSBzaW5jZSB0aGVyZSBpcworICogbm8gZ29vZCByZWxpYWJsZSBhbmQgcG9ydGFibGUgd2F5IHRvIGRvIGl0LgorICovCitjb25zdCBjaGFyICpDdXJsX3N0cmVycm9yKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IGVycikKK3sKKyAgY2hhciAqYnVmLCAqcDsKKyAgc2l6ZV90IG1heDsKKyAgaW50IG9sZF9lcnJubyA9IEVSUk5POworCisgIERFQlVHQVNTRVJUKGNvbm4pOworICBERUJVR0FTU0VSVChlcnIgPj0gMCk7CisKKyAgYnVmID0gY29ubi0+c3lzZXJyX2J1ZjsKKyAgbWF4ID0gc2l6ZW9mKGNvbm4tPnN5c2Vycl9idWYpLTE7CisgICpidWYgPSAnXDAnOworCisjaWZkZWYgVVNFX1dJTlNPQ0sKKworI2lmZGVmIF9XSU4zMl9XQ0UKKyAgeworICAgIHdjaGFyX3Qgd2J1ZlsyNTZdOworICAgIHdidWZbMF0gPSBMJ1wwJzsKKworICAgIEZvcm1hdE1lc3NhZ2UoRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0sIE5VTEwsIGVyciwKKyAgICAgICAgICAgICAgICAgIExBTkdfTkVVVFJBTCwgd2J1Ziwgc2l6ZW9mKHdidWYpL3NpemVvZih3Y2hhcl90KSwgTlVMTCk7CisgICAgd2NzdG9tYnMoYnVmLHdidWYsbWF4KTsKKyAgfQorI2Vsc2UKKyAgLyogJ3N5c19uZXJyJyBpcyB0aGUgbWF4aW11bSBlcnJubyBudW1iZXIsIGl0IGlzIG5vdCB3aWRlbHkgcG9ydGFibGUgKi8KKyAgaWYoZXJyID49IDAgJiYgZXJyIDwgc3lzX25lcnIpCisgICAgc3RybmNweShidWYsIHN0cmVycm9yKGVyciksIG1heCk7CisgIGVsc2UgeworICAgIGlmKCFnZXRfd2luc29ja19lcnJvcihlcnIsIGJ1ZiwgbWF4KSAmJgorICAgICAgICAhRm9ybWF0TWVzc2FnZShGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTSwgTlVMTCwgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICBMQU5HX05FVVRSQUwsIGJ1ZiwgKERXT1JEKW1heCwgTlVMTCkpCisgICAgICBzbnByaW50ZihidWYsIG1heCwgIlVua25vd24gZXJyb3IgJWQgKCUjeCkiLCBlcnIsIGVycik7CisgIH0KKyNlbmRpZgorCisjZWxzZSAvKiBub3QgVVNFX1dJTlNPQ0sgY29taW5nIHVwICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU1RSRVJST1JfUikgJiYgZGVmaW5lZChIQVZFX1BPU0lYX1NUUkVSUk9SX1IpCisgLyoKKyAgKiBUaGUgUE9TSVgtc3R5bGUgc3RyZXJyb3JfcigpIG1heSBzZXQgZXJybm8gdG8gRVJBTkdFIGlmIGluc3VmZmljaWVudAorICAqIHN0b3JhZ2UgaXMgc3VwcGxpZWQgdmlhICdzdHJlcnJidWYnIGFuZCAnYnVmbGVuJyB0byBob2xkIHRoZSBnZW5lcmF0ZWQKKyAgKiBtZXNzYWdlIHN0cmluZywgb3IgRUlOVkFMIGlmICdlcnJudW0nIGlzIG5vdCBhIHZhbGlkIGVycm9yIG51bWJlci4KKyAgKi8KKyAgaWYoMCAhPSBzdHJlcnJvcl9yKGVyciwgYnVmLCBtYXgpKSB7CisgICAgaWYoJ1wwJyA9PSBidWZbMF0pCisgICAgICBzbnByaW50ZihidWYsIG1heCwgIlVua25vd24gZXJyb3IgJWQiLCBlcnIpOworICB9CisjZWxpZiBkZWZpbmVkKEhBVkVfU1RSRVJST1JfUikgJiYgZGVmaW5lZChIQVZFX0dMSUJDX1NUUkVSUk9SX1IpCisgLyoKKyAgKiBUaGUgZ2xpYmMtc3R5bGUgc3RyZXJyb3JfcigpIG9ubHkgKm1pZ2h0KiB1c2UgdGhlIGJ1ZmZlciB3ZSBwYXNzIHRvCisgICogdGhlIGZ1bmN0aW9uLCBidXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgYXMgYSBwb2ludGVyLAorICAqIHNvIHdlIG11c3QgY29weSB0aGF0IHN0cmluZyB1bmNvbmRpdGlvbmFsbHkgKGlmIG5vbi1OVUxMKS4KKyAgKi8KKyAgeworICAgIGNoYXIgYnVmZmVyWzI1Nl07CisgICAgY2hhciAqbXNnID0gc3RyZXJyb3JfcihlcnIsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworICAgIGlmKG1zZykKKyAgICAgIHN0cm5jcHkoYnVmLCBtc2csIG1heCk7CisgICAgZWxzZQorICAgICAgc25wcmludGYoYnVmLCBtYXgsICJVbmtub3duIGVycm9yICVkIiwgZXJyKTsKKyAgfQorI2VsaWYgZGVmaW5lZChIQVZFX1NUUkVSUk9SX1IpICYmIGRlZmluZWQoSEFWRV9WWFdPUktTX1NUUkVSUk9SX1IpCisgLyoKKyAgKiBUaGUgdnh3b3Jrcy1zdHlsZSBzdHJlcnJvcl9yKCkgZG9lcyB1c2UgdGhlIGJ1ZmZlciB3ZSBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KKyAgKiBUaGUgYnVmZmVyIHNpemUgc2hvdWxkIGJlIGF0IGxlYXN0IE1BWEVSUlNUUl9TSVpFICgxNTApIGRlZmluZWQgaW4gcnRzb2xkLmgKKyAgKi8KKyAgeworICAgIGNoYXIgYnVmZmVyWzI1Nl07CisgICAgaWYoT0sgPT0gc3RyZXJyb3JfcihlcnIsIGJ1ZmZlcikpCisgICAgICBzdHJuY3B5KGJ1ZiwgYnVmZmVyLCBtYXgpOworICAgIGVsc2UKKyAgICAgIHNucHJpbnRmKGJ1ZiwgbWF4LCAiVW5rbm93biBlcnJvciAlZCIsIGVycik7CisgIH0KKyNlbHNlCisgIHsKKyAgICBjaGFyICptc2cgPSBzdHJlcnJvcihlcnIpOworICAgIGlmKG1zZykKKyAgICAgIHN0cm5jcHkoYnVmLCBtc2csIG1heCk7CisgICAgZWxzZQorICAgICAgc25wcmludGYoYnVmLCBtYXgsICJVbmtub3duIGVycm9yICVkIiwgZXJyKTsKKyAgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBlbmQgb2YgISBVU0VfV0lOU09DSyAqLworCisgIGJ1ZlttYXhdID0gJ1wwJzsgLyogbWFrZSBzdXJlIHRoZSBzdHJpbmcgaXMgemVybyB0ZXJtaW5hdGVkICovCisKKyAgLyogc3RyaXAgdHJhaWxpbmcgJ1xyXG4nIG9yICdcbicuICovCisgIGlmKChwID0gc3RycmNocihidWYsJ1xuJykpICE9IE5VTEwgJiYgKHAgLSBidWYpID49IDIpCisgICAgICpwID0gJ1wwJzsKKyAgaWYoKHAgPSBzdHJyY2hyKGJ1ZiwnXHInKSkgIT0gTlVMTCAmJiAocCAtIGJ1ZikgPj0gMSkKKyAgICAgKnAgPSAnXDAnOworCisgIGlmKG9sZF9lcnJubyAhPSBFUlJOTykKKyAgICBTRVRfRVJSTk8ob2xkX2Vycm5vKTsKKworICByZXR1cm4gYnVmOworfQorCisjaWZkZWYgVVNFX0xJQklETgorLyoKKyAqIFJldHVybiBlcnJvci1zdHJpbmcgZm9yIGxpYmlkbiBzdGF0dXMgYXMgcmV0dXJuZWQgZnJvbSBpZG5hX3RvX2FzY2lpX2x6KCkuCisgKi8KK2NvbnN0IGNoYXIgKkN1cmxfaWRuX3N0cmVycm9yIChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBlcnIpCit7CisjaWZkZWYgSEFWRV9JRE5BX1NUUkVSUk9SCisgICh2b2lkKWNvbm47CisgIHJldHVybiBpZG5hX3N0cmVycm9yKChJZG5hX3JjKSBlcnIpOworI2Vsc2UKKyAgY29uc3QgY2hhciAqc3RyOworICBjaGFyICpidWY7CisgIHNpemVfdCBtYXg7CisKKyAgREVCVUdBU1NFUlQoY29ubik7CisKKyAgYnVmID0gY29ubi0+c3lzZXJyX2J1ZjsKKyAgbWF4ID0gc2l6ZW9mKGNvbm4tPnN5c2Vycl9idWYpLTE7CisgICpidWYgPSAnXDAnOworCisjaWZuZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKKyAgc3dpdGNoICgoSWRuYV9yYyllcnIpIHsKKyAgICBjYXNlIElETkFfU1VDQ0VTUzoKKyAgICAgIHN0ciA9ICJObyBlcnJvciI7CisgICAgICBicmVhazsKKyAgICBjYXNlIElETkFfU1RSSU5HUFJFUF9FUlJPUjoKKyAgICAgIHN0ciA9ICJFcnJvciBpbiBzdHJpbmcgcHJlcGFyYXRpb24iOworICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE5BX1BVTllDT0RFX0VSUk9SOgorICAgICAgc3RyID0gIkVycm9yIGluIFB1bnljb2RlIG9wZXJhdGlvbiI7CisgICAgICBicmVhazsKKyAgICBjYXNlIElETkFfQ09OVEFJTlNfTk9OX0xESDoKKyAgICAgIHN0ciA9ICJJbGxlZ2FsIEFTQ0lJIGNoYXJhY3RlcnMiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE5BX0NPTlRBSU5TX01JTlVTOgorICAgICAgc3RyID0gIkNvbnRhaW5zIG1pbnVzIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSUROQV9JTlZBTElEX0xFTkdUSDoKKyAgICAgIHN0ciA9ICJJbnZhbGlkIG91dHB1dCBsZW5ndGgiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE5BX05PX0FDRV9QUkVGSVg6CisgICAgICBzdHIgPSAiTm8gQUNFIHByZWZpeCAoXCJ4bi0tXCIpIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSUROQV9ST1VORFRSSVBfVkVSSUZZX0VSUk9SOgorICAgICAgc3RyID0gIlJvdW5kIHRyaXAgdmVyaWZ5IGVycm9yIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSUROQV9DT05UQUlOU19BQ0VfUFJFRklYOgorICAgICAgc3RyID0gIkFscmVhZHkgaGF2ZSBBQ0UgcHJlZml4IChcInhuLS1cIikiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE5BX0lDT05WX0VSUk9SOgorICAgICAgc3RyID0gIkxvY2FsZSBjb252ZXJzaW9uIGZhaWxlZCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIElETkFfTUFMTE9DX0VSUk9SOgorICAgICAgc3RyID0gIkFsbG9jYXRpb24gZmFpbGVkIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSUROQV9ETE9QRU5fRVJST1I6CisgICAgICBzdHIgPSAiZGxvcGVuKCkgZXJyb3IiOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHNucHJpbnRmKGJ1ZiwgbWF4LCAiZXJyb3IgJWQiLCBlcnIpOworICAgICAgc3RyID0gTlVMTDsKKyAgICAgIGJyZWFrOworICB9CisjZWxzZQorICBpZigoSWRuYV9yYyllcnIgPT0gSUROQV9TVUNDRVNTKQorICAgIHN0ciA9ICJObyBlcnJvciI7CisgIGVsc2UKKyAgICBzdHIgPSAiRXJyb3IiOworI2VuZGlmCisgIGlmKHN0cikKKyAgICBzdHJuY3B5KGJ1Ziwgc3RyLCBtYXgpOworICBidWZbbWF4XSA9ICdcMCc7CisgIHJldHVybiAoYnVmKTsKKyNlbmRpZgorfQorI2VuZGlmICAvKiBVU0VfTElCSUROICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvc3RyZXJyb3IuaCBiL2N1cmwtNy4yNS4wL2xpYi9zdHJlcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMjM0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc3RyZXJyb3IuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIF9fQ1VSTF9TVFJFUlJPUl9ICisjZGVmaW5lIF9fQ1VSTF9TVFJFUlJPUl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInVybGRhdGEuaCIKKworY29uc3QgY2hhciAqQ3VybF9zdHJlcnJvciAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgZXJyKTsKKworI2lmZGVmIFVTRV9MSUJJRE4KK2NvbnN0IGNoYXIgKkN1cmxfaWRuX3N0cmVycm9yIChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBlcnIpOworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3N0cnRvay5jIGIvY3VybC03LjI1LjAvbGliL3N0cnRvay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZWFjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc3RydG9rLmMKQEAgLTAsMCArMSw2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZuZGVmIEhBVkVfU1RSVE9LX1IKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgInN0cnRvay5oIgorCitjaGFyICoKK0N1cmxfc3RydG9rX3IoY2hhciAqcHRyLCBjb25zdCBjaGFyICpzZXAsIGNoYXIgKiplbmQpCit7CisgIGlmKCFwdHIpCisgICAgLyogd2UgZ290IE5VTEwgaW5wdXQgc28gdGhlbiB3ZSBnZXQgb3VyIGxhc3QgcG9zaXRpb24gaW5zdGVhZCAqLworICAgIHB0ciA9ICplbmQ7CisKKyAgLyogcGFzcyBhbGwgbGV0dGVycyB0aGF0IGFyZSBpbmNsdWRpbmcgaW4gdGhlIHNlcGFyYXRvciBzdHJpbmcgKi8KKyAgd2hpbGUoKnB0ciAmJiBzdHJjaHIoc2VwLCAqcHRyKSkKKyAgICArK3B0cjsKKworICBpZigqcHRyKSB7CisgICAgLyogc28gdGhpcyBpcyB3aGVyZSB0aGUgbmV4dCBwaWVjZSBvZiBzdHJpbmcgc3RhcnRzICovCisgICAgY2hhciAqc3RhcnQgPSBwdHI7CisKKyAgICAvKiBzZXQgdGhlIGVuZCBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlIGFmdGVyIHRoZSBzdGFydCAqLworICAgICplbmQgPSBzdGFydCArIDE7CisKKyAgICAvKiBzY2FuIHRocm91Z2ggdGhlIHN0cmluZyB0byBmaW5kIHdoZXJlIGl0IGVuZHMsIGl0IGVuZHMgb24gYQorICAgICAgIG51bGwgYnl0ZSBvciBhIGNoYXJhY3RlciB0aGF0IGV4aXN0cyBpbiB0aGUgc2VwYXJhdG9yIHN0cmluZyAqLworICAgIHdoaWxlKCoqZW5kICYmICFzdHJjaHIoc2VwLCAqKmVuZCkpCisgICAgICArKyplbmQ7CisKKyAgICBpZigqKmVuZCkgeworICAgICAgLyogdGhlIGVuZCBpcyBub3QgYSBudWxsIGJ5dGUgKi8KKyAgICAgICoqZW5kID0gJ1wwJzsgIC8qIHplcm8gdGVybWluYXRlIGl0ISAqLworICAgICAgKysqZW5kOyAgICAgICAgLyogYWR2YW5jZSB0aGUgbGFzdCBwb2ludGVyIHRvIGJleW9uZCB0aGUgbnVsbCBieXRlICovCisgICAgfQorCisgICAgcmV0dXJuIHN0YXJ0OyAvKiByZXR1cm4gdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBzdHJpbmcgc3RhcnRzICovCisgIH0KKworICAvKiB3ZSBlbmRlZCB1cCBvbiBhIG51bGwgYnl0ZSwgdGhlcmUgYXJlIG5vIG1vcmUgc3RyaW5ncyB0byBmaW5kISAqLworICByZXR1cm4gTlVMTDsKK30KKworI2VuZGlmIC8qIHRoaXMgd2FzIG9ubHkgY29tcGlsZWQgaWYgc3RydG9rX3Igd2Fzbid0IHByZXNlbnQgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi9zdHJ0b2suaCBiL2N1cmwtNy4yNS4wL2xpYi9zdHJ0b2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmFmNzc5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3N0cnRvay5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfU1RSVE9LX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfU1RSVE9LX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZm5kZWYgSEFWRV9TVFJUT0tfUgorY2hhciAqQ3VybF9zdHJ0b2tfcihjaGFyICpzLCBjb25zdCBjaGFyICpkZWxpbSwgY2hhciAqKmxhc3QpOworI2RlZmluZSBzdHJ0b2tfciBDdXJsX3N0cnRva19yCisjZWxzZQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9TVFJUT0tfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3N0cnRvb2ZmdC5jIGIvY3VybC03LjI1LjAvbGliL3N0cnRvb2ZmdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MTQ1OWQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc3RydG9vZmZ0LmMKQEAgLTAsMCArMSwxODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgorCisvKgorICogTk9URToKKyAqCisgKiBJbiB0aGUgSVNPIEMgc3RhbmRhcmQgKElFRUUgU3RkIDEwMDMuMSksIHRoZXJlIGlzIGEgc3RydG9pbWF4KCkgZnVuY3Rpb24gd2UKKyAqIGNvdWxkIHVzZSBpbiBjYXNlIHN0cnRvbGwoKSBkb2Vzbid0IGV4aXN0Li4uICBTZWUKKyAqIGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMvc3RydG9pbWF4Lmh0bWwKKyAqLworCisjaWZkZWYgTkVFRF9DVVJMX1NUUlRPTEwKKworLyogUmFuZ2UgdGVzdHMgY2FuIGJlIHVzZWQgZm9yIGFscGhhbnVtIGRlY29kaW5nIGlmIGNoYXJhY3RlcnMgYXJlIGNvbnNlY3V0aXZlLAorICAgbGlrZSBpbiBBU0NJSS4gRWxzZSBhbiBhcnJheSBpcyBzY2FubmVkLiBEZXRlcm1pbmUgdGhpcyBjb25kaXRpb24gbm93LiAqLworCisjaWYoJzknIC0gJzAnKSAhPSA5IHx8ICgnWicgLSAnQScpICE9IDI1IHx8ICgneicgLSAnYScpICE9IDI1CisKKyNkZWZpbmUgTk9fUkFOR0VfVEVTVAorCitzdGF0aWMgY29uc3QgY2hhciB2YWxjaGFyc1tdID0KKyAgICAgICAgICAgICIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisjZW5kaWYKKworc3RhdGljIGludCBnZXRfY2hhcihjaGFyIGMsIGludCBiYXNlKTsKKworLyoqCisgKiBFbXVsYXRlZCB2ZXJzaW9uIG9mIHRoZSBzdHJ0b2xsIGZ1bmN0aW9uLiAgVGhpcyBleHRyYWN0cyBhIGxvbmcgbG9uZworICogdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gaW5wdXQgc3RyaW5nIGFuZCByZXR1cm5zIGl0LgorICovCitjdXJsX29mZl90CitjdXJseF9zdHJ0b2xsKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQoreworICBjaGFyICplbmQ7CisgIGludCBpc19uZWdhdGl2ZSA9IDA7CisgIGludCBvdmVyZmxvdzsKKyAgaW50IGk7CisgIGN1cmxfb2ZmX3QgdmFsdWUgPSAwOworICBjdXJsX29mZl90IG5ld3ZhbDsKKworICAvKiBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi8KKyAgZW5kID0gKGNoYXIgKilucHRyOworICB3aGlsZShJU1NQQUNFKGVuZFswXSkpIHsKKyAgICBlbmQrKzsKKyAgfQorCisgIC8qIEhhbmRsZSB0aGUgc2lnbiwgaWYgYW55LiAqLworICBpZihlbmRbMF0gPT0gJy0nKSB7CisgICAgaXNfbmVnYXRpdmUgPSAxOworICAgIGVuZCsrOworICB9CisgIGVsc2UgaWYoZW5kWzBdID09ICcrJykgeworICAgIGVuZCsrOworICB9CisgIGVsc2UgaWYoZW5kWzBdID09ICdcMCcpIHsKKyAgICAvKiBXZSBoYWQgbm90aGluZyBidXQgcGVyaGFwcyBzb21lIHdoaXRlc3BhY2UgLS0gdGhlcmUgd2FzIG5vIG51bWJlci4gKi8KKyAgICBpZihlbmRwdHIpIHsKKyAgICAgICplbmRwdHIgPSBlbmQ7CisgICAgfQorICAgIHJldHVybiAwOworICB9CisKKyAgLyogSGFuZGxlIHNwZWNpYWwgYmVnaW5uaW5ncywgaWYgcHJlc2VudCBhbmQgYWxsb3dlZC4gKi8KKyAgaWYoZW5kWzBdID09ICcwJyAmJiBlbmRbMV0gPT0gJ3gnKSB7CisgICAgaWYoYmFzZSA9PSAxNiB8fCBiYXNlID09IDApIHsKKyAgICAgIGVuZCArPSAyOworICAgICAgYmFzZSA9IDE2OworICAgIH0KKyAgfQorICBlbHNlIGlmKGVuZFswXSA9PSAnMCcpIHsKKyAgICBpZihiYXNlID09IDggfHwgYmFzZSA9PSAwKSB7CisgICAgICBlbmQrKzsKKyAgICAgIGJhc2UgPSA4OworICAgIH0KKyAgfQorCisgIC8qIE1hdGNoaW5nIHN0cnRvbCwgaWYgdGhlIGJhc2UgaXMgMCBhbmQgaXQgZG9lc24ndCBsb29rIGxpa2UKKyAgICogdGhlIG51bWJlciBpcyBvY3RhbCBvciBoZXgsIHdlIGFzc3VtZSBpdCdzIGJhc2UgMTAuCisgICAqLworICBpZihiYXNlID09IDApIHsKKyAgICBiYXNlID0gMTA7CisgIH0KKworICAvKiBMb29wIGhhbmRsaW5nIGRpZ2l0cy4gKi8KKyAgdmFsdWUgPSAwOworICBvdmVyZmxvdyA9IDA7CisgIGZvcihpID0gZ2V0X2NoYXIoZW5kWzBdLCBiYXNlKTsKKyAgICAgIGkgIT0gLTE7CisgICAgICBlbmQrKywgaSA9IGdldF9jaGFyKGVuZFswXSwgYmFzZSkpIHsKKyAgICBuZXd2YWwgPSBiYXNlICogdmFsdWUgKyBpOworICAgIGlmKG5ld3ZhbCA8IHZhbHVlKSB7CisgICAgICAvKiBXZSd2ZSBvdmVyZmxvd2VkLiAqLworICAgICAgb3ZlcmZsb3cgPSAxOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHZhbHVlID0gbmV3dmFsOworICB9CisKKyAgaWYoIW92ZXJmbG93KSB7CisgICAgaWYoaXNfbmVnYXRpdmUpIHsKKyAgICAgIC8qIEZpeCB0aGUgc2lnbi4gKi8KKyAgICAgIHZhbHVlICo9IC0xOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBpZihpc19uZWdhdGl2ZSkKKyAgICAgIHZhbHVlID0gQ1VSTF9PRkZfVF9NSU47CisgICAgZWxzZQorICAgICAgdmFsdWUgPSBDVVJMX09GRl9UX01BWDsKKworICAgIFNFVF9FUlJOTyhFUkFOR0UpOworICB9CisKKyAgaWYoZW5kcHRyKQorICAgICplbmRwdHIgPSBlbmQ7CisKKyAgcmV0dXJuIHZhbHVlOworfQorCisvKioKKyAqIFJldHVybnMgdGhlIHZhbHVlIG9mIGMgaW4gdGhlIGdpdmVuIGJhc2UsIG9yIC0xIGlmIGMgY2Fubm90CisgKiBiZSBpbnRlcnByZXRlZCBwcm9wZXJseSBpbiB0aGF0IGJhc2UgKGkuZS4sIGlzIG91dCBvZiByYW5nZSwKKyAqIGlzIGEgbnVsbCwgZXRjLikuCisgKgorICogQHBhcmFtIGMgICAgIHRoZSBjaGFyYWN0ZXIgdG8gaW50ZXJwcmV0IGFjY29yZGluZyB0byBiYXNlCisgKiBAcGFyYW0gYmFzZSAgdGhlIGJhc2UgaW4gd2hpY2ggdG8gaW50ZXJwcmV0IGMKKyAqCisgKiBAcmV0dXJuICB0aGUgdmFsdWUgb2YgYyBpbiBiYXNlLCBvciAtMSBpZiBjIGlzbid0IGluIHJhbmdlCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2NoYXIoY2hhciBjLCBpbnQgYmFzZSkKK3sKKyNpZm5kZWYgTk9fUkFOR0VfVEVTVAorICBpbnQgdmFsdWUgPSAtMTsKKyAgaWYoYyA8PSAnOScgJiYgYyA+PSAnMCcpIHsKKyAgICB2YWx1ZSA9IGMgLSAnMCc7CisgIH0KKyAgZWxzZSBpZihjIDw9ICdaJyAmJiBjID49ICdBJykgeworICAgIHZhbHVlID0gYyAtICdBJyArIDEwOworICB9CisgIGVsc2UgaWYoYyA8PSAneicgJiYgYyA+PSAnYScpIHsKKyAgICB2YWx1ZSA9IGMgLSAnYScgKyAxMDsKKyAgfQorI2Vsc2UKKyAgY29uc3QgY2hhciAqIGNwOworICBpbnQgdmFsdWU7CisKKyAgY3AgPSBtZW1jaHIodmFsY2hhcnMsIGMsIDEwICsgMjYgKyAyNik7CisKKyAgaWYoIWNwKQorICAgIHJldHVybiAtMTsKKworICB2YWx1ZSA9IGNwIC0gdmFsY2hhcnM7CisKKyAgaWYodmFsdWUgPj0gMTAgKyAyNikKKyAgICB2YWx1ZSAtPSAyNjsgICAgICAgICAgICAgICAgLyogTG93ZXJjYXNlLiAqLworI2VuZGlmCisKKyAgaWYodmFsdWUgPj0gYmFzZSkgeworICAgIHZhbHVlID0gLTE7CisgIH0KKworICByZXR1cm4gdmFsdWU7Cit9CisjZW5kaWYgIC8qIE9ubHkgcHJlc2VudCBpZiB3ZSBuZWVkIHN0cnRvbGwsIGJ1dCBkb24ndCBoYXZlIGl0LiAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3N0cnRvb2ZmdC5oIGIvY3VybC03LjI1LjAvbGliL3N0cnRvb2ZmdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YjBlNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvc3RydG9vZmZ0LmgKQEAgLTAsMCArMSw2OCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9TVFJUT09GRlRfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9TVFJUT09GRlRfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisvKgorICogRGV0ZXJtaW5lIHdoaWNoIHN0cmluZyB0byBpbnRlZ3JhbCBkYXRhIHR5cGUgY29udmVyc2lvbiBmdW5jdGlvbiB3ZSB1c2UKKyAqIHRvIGltcGxlbWVudCBzdHJpbmcgY29udmVyc2lvbiB0byBvdXIgY3VybF9vZmZfdCBpbnRlZ3JhbCBkYXRhIHR5cGUuCisgKgorICogTm90aWNlIHRoYXQgY3VybF9vZmZfdCBtaWdodCBiZSA2NCBvciAzMiBiaXQgd2lkZSwgYW5kIHRoYXQgaXQgbWlnaHQgdXNlCisgKiBhbiB1bmRlcmx5aW5nIGRhdGEgdHlwZSB3aGljaCBtaWdodCBiZSAnbG9uZycsICdpbnQ2NF90JywgJ2xvbmcgbG9uZycgb3IKKyAqICdfX2ludDY0JyBhbmQgbW9yZSByZW1vdGVseSBvdGhlciBkYXRhIHR5cGVzLgorICoKKyAqIE9uIHN5c3RlbXMgd2hlcmUgdGhlIHNpemUgb2YgY3VybF9vZmZfdCBpcyBncmVhdGVyIHRoYW4gdGhlIHNpemUgb2YgJ2xvbmcnCisgKiB0aGUgY29udmVyc2lvbiBmdW5jdGlvbiB0byB1c2UgaXMgc3RydG9sbCgpIGlmIGl0IGlzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlLAorICogd2UgZW11bGF0ZSBpdHMgZnVuY3Rpb25hbGl0eSB3aXRoIG91ciBvd24gY2xvbmUuCisgKgorICogT24gc3lzdGVtcyB3aGVyZSB0aGUgc2l6ZSBvZiBjdXJsX29mZl90IGlzIHNtYWxsZXIgb3IgZXF1YWwgdGhhbiB0aGUgc2l6ZQorICogb2YgJ2xvbmcnIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9uIHRvIHVzZSBpcyBzdHJ0b2woKS4KKyAqLworCisjaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPiBDVVJMX1NJWkVPRl9MT05HKQorIyAgaWZkZWYgSEFWRV9TVFJUT0xMCisjICAgIGRlZmluZSBjdXJseF9zdHJ0b29mZnQgc3RydG9sbAorIyAgZWxzZQorIyAgICBpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTMwMCkgJiYgKF9JTlRFR1JBTF9NQVhfQklUUyA+PSA2NCkKKyAgICAgICBfQ1JUSU1QIF9faW50NjQgX19jZGVjbCBfc3RydG9pNjQoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworIyAgICAgIGRlZmluZSBjdXJseF9zdHJ0b29mZnQgX3N0cnRvaTY0CisjICAgIGVsc2UKKyAgICAgICBjdXJsX29mZl90IGN1cmx4X3N0cnRvbGwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpOworIyAgICAgIGRlZmluZSBjdXJseF9zdHJ0b29mZnQgY3VybHhfc3RydG9sbAorIyAgICAgIGRlZmluZSBORUVEX0NVUkxfU1RSVE9MTCAxCisjICAgIGVuZGlmCisjICBlbmRpZgorI2Vsc2UKKyMgIGRlZmluZSBjdXJseF9zdHJ0b29mZnQgc3RydG9sCisjZW5kaWYKKworI2lmIChDVVJMX1NJWkVPRl9DVVJMX09GRl9UID09IDQpCisjICBkZWZpbmUgQ1VSTF9PRkZfVF9NQVggQ1VSTF9PRkZfVF9DKDB4N0ZGRkZGRkYpCisjZWxzZQorICAgLyogYXNzdW1lIENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPT0gOCAqLworIyAgZGVmaW5lIENVUkxfT0ZGX1RfTUFYIENVUkxfT0ZGX1RfQygweDdGRkZGRkZGRkZGRkZGRkYpCisjZW5kaWYKKyNkZWZpbmUgQ1VSTF9PRkZfVF9NSU4gKC1DVVJMX09GRl9UX01BWCAtIENVUkxfT0ZGX1RfQygxKSkKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NUUlRPT0ZGVF9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvdGVsbmV0LmMgYi9jdXJsLTcuMjUuMC9saWIvdGVsbmV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYTNhYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi90ZWxuZXQuYwpAQCAtMCwwICsxLDE2ODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfVEVMTkVUCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAidHJhbnNmZXIuaCIKKyNpbmNsdWRlICJzZW5kZi5oIgorI2luY2x1ZGUgInRlbG5ldC5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjZGVmaW5lICBURUxPUFRTCisjZGVmaW5lICBURUxDTURTCisKKyNpbmNsdWRlICJhcnBhX3RlbG5ldC5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAic3RyZXF1YWwuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorCisvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjZGVmaW5lIFNVQkJVRlNJWkUgNTEyCisKKyNkZWZpbmUgQ1VSTF9TQl9DTEVBUih4KSAgeC0+c3VicG9pbnRlciA9IHgtPnN1YmJ1ZmZlcgorI2RlZmluZSBDVVJMX1NCX1RFUk0oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB4LT5zdWJlbmQgPSB4LT5zdWJwb2ludGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENVUkxfU0JfQ0xFQVIoeCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gV0hJTEVfRkFMU0UKKyNkZWZpbmUgQ1VSTF9TQl9BQ0NVTSh4LGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKHgtPnN1YnBvaW50ZXIgPCAoeC0+c3ViYnVmZmVyK3NpemVvZiB4LT5zdWJidWZmZXIpKSAgIFwKKyAgICAgICp4LT5zdWJwb2ludGVyKysgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gV0hJTEVfRkFMU0UKKworI2RlZmluZSAgQ1VSTF9TQl9HRVQoeCkgKCgqeC0+c3VicG9pbnRlcisrKSYweGZmKQorI2RlZmluZSAgQ1VSTF9TQl9QRUVLKHgpICAgKCgqeC0+c3VicG9pbnRlcikmMHhmZikKKyNkZWZpbmUgIENVUkxfU0JfRU9GKHgpICh4LT5zdWJwb2ludGVyID49IHgtPnN1YmVuZCkKKyNkZWZpbmUgIENVUkxfU0JfTEVOKHgpICh4LT5zdWJlbmQgLSB4LT5zdWJwb2ludGVyKQorCisjaWZkZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUworI2RlZmluZSBwcmludG9wdGlvbihhLGIsYyxkKSAgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKKyNpZmRlZiBVU0VfV0lOU09DSwordHlwZWRlZiBGQVJQUk9DIFdTT0NLMl9GVU5DOworc3RhdGljIENVUkxjb2RlIGNoZWNrX3dzb2NrMiAoIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhICk7CisjZW5kaWYKKworc3RhdGljCitDVVJMY29kZSB0ZWxyY3Yoc3RydWN0IGNvbm5lY3RkYXRhICosCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYsIC8qIERhdGEgcmVjZWl2ZWQgZnJvbSBzb2NrZXQgKi8KKyAgICAgICAgICAgICAgICBzc2l6ZV90IGNvdW50KTsgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkICovCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUworc3RhdGljIHZvaWQgcHJpbnRvcHRpb24oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY21kLCBpbnQgb3B0aW9uKTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBuZWdvdGlhdGUoc3RydWN0IGNvbm5lY3RkYXRhICopOworc3RhdGljIHZvaWQgc2VuZF9uZWdvdGlhdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKiwgaW50IGNtZCwgaW50IG9wdGlvbik7CitzdGF0aWMgdm9pZCBzZXRfbG9jYWxfb3B0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqLCBpbnQgY21kLCBpbnQgb3B0aW9uKTsKK3N0YXRpYyB2b2lkIHNldF9yZW1vdGVfb3B0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqLCBpbnQgY21kLCBpbnQgb3B0aW9uKTsKKworc3RhdGljIHZvaWQgcHJpbnRzdWIoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICBpbnQgZGlyZWN0aW9uLCB1bnNpZ25lZCBjaGFyICpwb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCk7CitzdGF0aWMgdm9pZCBzdWJvcHRpb24oc3RydWN0IGNvbm5lY3RkYXRhICopOworc3RhdGljIHZvaWQgc2VuZHN1Ym9wdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBvcHRpb24pOworCitzdGF0aWMgQ1VSTGNvZGUgdGVsbmV0X2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgdGVsbmV0X2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUsIGJvb2wgcHJlbWF0dXJlKTsKK3N0YXRpYyBDVVJMY29kZSBzZW5kX3RlbG5ldF9kYXRhKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgc3NpemVfdCBucmVhZCk7CisKKy8qIEZvciBuZWdvdGlhdGlvbiBjb21wbGlhbnQgdG8gUkZDIDExNDMgKi8KKyNkZWZpbmUgQ1VSTF9OTyAgICAgICAgICAwCisjZGVmaW5lIENVUkxfWUVTICAgICAgICAgMQorI2RlZmluZSBDVVJMX1dBTlRZRVMgICAgIDIKKyNkZWZpbmUgQ1VSTF9XQU5UTk8gICAgICAzCisKKyNkZWZpbmUgQ1VSTF9FTVBUWSAgICAgICAwCisjZGVmaW5lIENVUkxfT1BQT1NJVEUgICAgMQorCisvKgorICogVGVsbmV0IHJlY2VpdmVyIHN0YXRlcyBmb3IgZnNtCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgQ1VSTF9UU19EQVRBID0gMCwKKyAgIENVUkxfVFNfSUFDLAorICAgQ1VSTF9UU19XSUxMLAorICAgQ1VSTF9UU19XT05ULAorICAgQ1VSTF9UU19ETywKKyAgIENVUkxfVFNfRE9OVCwKKyAgIENVUkxfVFNfQ1IsCisgICBDVVJMX1RTX1NCLCAgIC8qIHN1Yi1vcHRpb24gY29sbGVjdGlvbiAqLworICAgQ1VSTF9UU19TRSAgIC8qIGxvb2tpbmcgZm9yIHN1Yi1vcHRpb24gZW5kICovCit9IFRlbG5ldFJlY2VpdmU7CisKK3N0cnVjdCBURUxORVQgeworICBpbnQgcGxlYXNlX25lZ290aWF0ZTsKKyAgaW50IGFscmVhZHlfbmVnb3RpYXRlZDsKKyAgaW50IHVzWzI1Nl07CisgIGludCB1c3FbMjU2XTsKKyAgaW50IHVzX3ByZWZlcnJlZFsyNTZdOworICBpbnQgaGltWzI1Nl07CisgIGludCBoaW1xWzI1Nl07CisgIGludCBoaW1fcHJlZmVycmVkWzI1Nl07CisgIGludCBzdWJuZWdvdGlhdGlvblsyNTZdOworICBjaGFyIHN1Ym9wdF90dHlwZVszMl07ICAgICAgICAgICAgIC8qIFNldCB3aXRoIHN1Ym9wdGlvbiBUVFlQRSAqLworICBjaGFyIHN1Ym9wdF94ZGlzcGxvY1sxMjhdOyAgICAgICAgIC8qIFNldCB3aXRoIHN1Ym9wdGlvbiBYRElTUExPQyAqLworICB1bnNpZ25lZCBzaG9ydCBzdWJvcHRfd3N4OyAgICAgICAgIC8qIFNldCB3aXRoIHN1Ym9wdGlvbiBOQVdTICovCisgIHVuc2lnbmVkIHNob3J0IHN1Ym9wdF93c3k7ICAgICAgICAgLyogU2V0IHdpdGggc3Vib3B0aW9uIE5BV1MgKi8KKyAgc3RydWN0IGN1cmxfc2xpc3QgKnRlbG5ldF92YXJzOyAgICAvKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgKi8KKworICAvKiBzdWJvcHRpb25zICovCisgIHVuc2lnbmVkIGNoYXIgc3ViYnVmZmVyW1NVQkJVRlNJWkVdOworICB1bnNpZ25lZCBjaGFyICpzdWJwb2ludGVyLCAqc3ViZW5kOyAgICAgIC8qIGJ1ZmZlciBmb3Igc3ViLW9wdGlvbnMgKi8KKworICBUZWxuZXRSZWNlaXZlIHRlbHJjdl9zdGF0ZTsKK307CisKKworLyoKKyAqIFRFTE5FVCBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK2NvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3RlbG5ldCA9IHsKKyAgIlRFTE5FVCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlbWUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR1cF9jb25uZWN0aW9uICovCisgIHRlbG5ldF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9faXQgKi8KKyAgdGVsbmV0X2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb25lICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9fbW9yZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RfaXQgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW5nICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9pbmdfZ2V0c29jayAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbW9yZV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGVyZm9ybV9nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLworICBQT1JUX1RFTE5FVCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KKyAgQ1VSTFBST1RPX1RFTE5FVCwgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLworICBQUk9UT1BUX05PTkUgfCBQUk9UT1BUX05PVVJMUVVFUlkgICAgIC8qIGZsYWdzICovCit9OworCisKKyNpZmRlZiBVU0VfV0lOU09DSworc3RhdGljIENVUkxjb2RlCitjaGVja193c29jazIgKCBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSApCit7CisgIGludCBlcnI7CisgIFdPUkQgd1ZlcnNpb25SZXF1ZXN0ZWQ7CisgIFdTQURBVEEgd3NhRGF0YTsKKworICBERUJVR0FTU0VSVChkYXRhKTsKKworICAvKiB0ZWxuZXQgcmVxdWlyZXMgYXQgbGVhc3QgV2luU29jayAyLjAgc28gYXNrIGZvciBpdC4gKi8KKyAgd1ZlcnNpb25SZXF1ZXN0ZWQgPSBNQUtFV09SRCgyLCAwKTsKKworICBlcnIgPSBXU0FTdGFydHVwKHdWZXJzaW9uUmVxdWVzdGVkLCAmd3NhRGF0YSk7CisKKyAgLyogV2UgbXVzdCd2ZSBjYWxsZWQgdGhpcyBvbmNlIGFscmVhZHksIHNvIHRoaXMgY2FsbCAqLworICAvKiBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuICBCdXQsIGp1c3QgaW4gY2FzZS4uLiAqLworICBpZihlcnIgIT0gMCkgeworICAgIGZhaWxmKGRhdGEsIldTQVN0YXJ0dXAgZmFpbGVkICglZCkiLGVycik7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisKKyAgLyogV2UgaGF2ZSB0byBoYXZlIGEgV1NBQ2xlYW51cCBjYWxsIGZvciBldmVyeSBzdWNjZXNzZnVsICovCisgIC8qIFdTQVN0YXJ0dXAgY2FsbC4gKi8KKyAgV1NBQ2xlYW51cCgpOworCisgIC8qIENoZWNrIHRoYXQgb3VyIHZlcnNpb24gaXMgc3VwcG9ydGVkICovCisgIGlmKExPQllURSh3c2FEYXRhLndWZXJzaW9uKSAhPSBMT0JZVEUod1ZlcnNpb25SZXF1ZXN0ZWQpIHx8CisgICAgICBISUJZVEUod3NhRGF0YS53VmVyc2lvbikgIT0gSElCWVRFKHdWZXJzaW9uUmVxdWVzdGVkKSkgeworICAgICAgLyogT3VyIHZlcnNpb24gaXNuJ3Qgc3VwcG9ydGVkICovCisgICAgICBmYWlsZihkYXRhLCJpbnN1ZmZpY2llbnQgd2luc29jayB2ZXJzaW9uIHRvIHN1cHBvcnQgIgorICAgICAgICAgICAgInRlbG5ldCIpOworICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisKKyAgLyogT3VyIHZlcnNpb24gaXMgc3VwcG9ydGVkICovCisgIHJldHVybiBDVVJMRV9PSzsKK30KKyNlbmRpZgorCitzdGF0aWMKK0NVUkxjb2RlIGluaXRfdGVsbmV0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IFRFTE5FVCAqdG47CisKKyAgdG4gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBURUxORVQpKTsKKyAgaWYoIXRuKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIGNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLnRlbG5ldCA9ICh2b2lkICopdG47IC8qIG1ha2UgdXMga25vd24gKi8KKworICB0bi0+dGVscmN2X3N0YXRlID0gQ1VSTF9UU19EQVRBOworCisgIC8qIEluaXQgc3Vib3B0aW9ucyAqLworICBDVVJMX1NCX0NMRUFSKHRuKTsKKworICAvKiBTZXQgdGhlIG9wdGlvbnMgd2Ugd2FudCBieSBkZWZhdWx0ICovCisgIHRuLT51c19wcmVmZXJyZWRbQ1VSTF9URUxPUFRfU0dBXSA9IENVUkxfWUVTOworICB0bi0+aGltX3ByZWZlcnJlZFtDVVJMX1RFTE9QVF9TR0FdID0gQ1VSTF9ZRVM7CisKKyAgLyogVG8gYmUgY29tcGxpYW50IHdpdGggcHJldmlvdXMgcmVsZWFzZXMgb2YgbGliY3VybAorICAgICB3ZSBlbmFibGUgdGhpcyBvcHRpb24gYnkgZGVmYXVsdC4gVGhpcyBiZWhhdmlvdXIKKyAgICAgICAgIGNhbiBiZSBjaGFuZ2VkIHRoYW5rcyB0byB0aGUgIkJJTkFSWSIgb3B0aW9uIGluCisgICAgICAgICBDVVJMT1BUX1RFTE5FVE9QVElPTlMKKyAgKi8KKyAgdG4tPnVzX3ByZWZlcnJlZFtDVVJMX1RFTE9QVF9CSU5BUlldID0gQ1VSTF9ZRVM7CisgIHRuLT5oaW1fcHJlZmVycmVkW0NVUkxfVEVMT1BUX0JJTkFSWV0gPSBDVVJMX1lFUzsKKworICAvKiBXZSBtdXN0IGFsbG93IHRoZSBzZXJ2ZXIgdG8gZWNobyB3aGF0IHdlIHNlbnQKKyAgICAgICAgIGJ1dCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHJlcXVlc3QgdGhlIHNlcnZlcgorICAgICAgICAgdG8gZG8gc28gKGl0IG1pZ2h0IGZvcmNlcyB0aGUgc2VydmVyIHRvIGNsb3NlCisgICAgICAgICB0aGUgY29ubmVjdGlvbikuIEhlbmNlLCB3ZSBpZ25vcmUgRUNITyBpbiB0aGUKKyAgICAgICAgIG5lZ290aWF0ZSBmdW5jdGlvbgorICAqLworICB0bi0+aGltX3ByZWZlcnJlZFtDVVJMX1RFTE9QVF9FQ0hPXSA9IENVUkxfWUVTOworCisgIC8qIFNldCB0aGUgc3VibmVnb3RpYXRpb24gZmllbGRzIHRvIHNlbmQgaW5mb3JtYXRpb24KKyAgICBqdXN0IGFmdGVyIG5lZ290aWF0aW9uIHBhc3NlZCAoZG8vd2lsbCkKKworICAgICBEZWZhdWx0IHZhbHVlcyBhcmUgKDAsMCkgaW5pdGlhbGl6ZWQgYnkgY2FsbG9jLgorICAgICBBY2NvcmRpbmcgdG8gdGhlIFJGQzEwMTMgaXQgaXMgdmFsaWQ6CisgICAgIEEgdmFsdWUgZXF1YWwgdG8gemVybyBpcyBhY2NlcHRhYmxlIGZvciB0aGUgd2lkdGggKG9yIGhlaWdodCksCisgICAgICAgICBhbmQgbWVhbnMgdGhhdCBubyBjaGFyYWN0ZXIgd2lkdGggKG9yIGhlaWdodCkgaXMgYmVpbmcgc2VudC4KKyAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIHdpZHRoIChvciBoZWlnaHQpIHRoYXQgd2lsbCBiZSBhc3N1bWVkIGJ5IHRoZQorICAgICAgICAgVGVsbmV0IHNlcnZlciBpcyBvcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljIChpdCB3aWxsIHByb2JhYmx5IGJlCisgICAgICAgICBiYXNlZCB1cG9uIHRoZSB0ZXJtaW5hbCB0eXBlIGluZm9ybWF0aW9uIHRoYXQgbWF5IGhhdmUgYmVlbiBzZW50CisgICAgICAgICB1c2luZyB0aGUgVEVSTUlOQUwgVFlQRSBUZWxuZXQgb3B0aW9uKS4gKi8KKyAgdG4tPnN1Ym5lZ290aWF0aW9uW0NVUkxfVEVMT1BUX05BV1NdID0gQ1VSTF9ZRVM7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIHZvaWQgbmVnb3RpYXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaW50IGk7CisgIHN0cnVjdCBURUxORVQgKnRuID0gKHN0cnVjdCBURUxORVQgKikgY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8udGVsbmV0OworCisgIGZvcihpID0gMDtpIDwgQ1VSTF9OVEVMT1BUUztpKyspIHsKKyAgICBpZihpPT1DVVJMX1RFTE9QVF9FQ0hPKQorICAgICAgY29udGludWU7CisKKyAgICBpZih0bi0+dXNfcHJlZmVycmVkW2ldID09IENVUkxfWUVTKQorICAgICAgc2V0X2xvY2FsX29wdGlvbihjb25uLCBpLCBDVVJMX1lFUyk7CisKKyAgICBpZih0bi0+aGltX3ByZWZlcnJlZFtpXSA9PSBDVVJMX1lFUykKKyAgICAgIHNldF9yZW1vdGVfb3B0aW9uKGNvbm4sIGksIENVUkxfWUVTKTsKKyAgfQorfQorCisjaWZuZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKK3N0YXRpYyB2b2lkIHByaW50b3B0aW9uKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGlyZWN0aW9uLCBpbnQgY21kLCBpbnQgb3B0aW9uKQoreworICBjb25zdCBjaGFyICpmbXQ7CisgIGNvbnN0IGNoYXIgKm9wdDsKKworICBpZihkYXRhLT5zZXQudmVyYm9zZSkgeworICAgIGlmKGNtZCA9PSBDVVJMX0lBQykgeworICAgICAgaWYoQ1VSTF9URUxDTURfT0sob3B0aW9uKSkKKyAgICAgICAgaW5mb2YoZGF0YSwgIiVzIElBQyAlc1xuIiwgZGlyZWN0aW9uLCBDVVJMX1RFTENNRChvcHRpb24pKTsKKyAgICAgIGVsc2UKKyAgICAgICAgaW5mb2YoZGF0YSwgIiVzIElBQyAlZFxuIiwgZGlyZWN0aW9uLCBvcHRpb24pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGZtdCA9IChjbWQgPT0gQ1VSTF9XSUxMKSA/ICJXSUxMIiA6IChjbWQgPT0gQ1VSTF9XT05UKSA/ICJXT05UIiA6CisgICAgICAgIChjbWQgPT0gQ1VSTF9ETykgPyAiRE8iIDogKGNtZCA9PSBDVVJMX0RPTlQpID8gIkRPTlQiIDogMDsKKyAgICAgIGlmKGZtdCkgeworICAgICAgICBpZihDVVJMX1RFTE9QVF9PSyhvcHRpb24pKQorICAgICAgICAgIG9wdCA9IENVUkxfVEVMT1BUKG9wdGlvbik7CisgICAgICAgIGVsc2UgaWYob3B0aW9uID09IENVUkxfVEVMT1BUX0VYT1BMKQorICAgICAgICAgIG9wdCA9ICJFWE9QTCI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBvcHQgPSBOVUxMOworCisgICAgICAgIGlmKG9wdCkKKyAgICAgICAgICBpbmZvZihkYXRhLCAiJXMgJXMgJXNcbiIsIGRpcmVjdGlvbiwgZm10LCBvcHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgaW5mb2YoZGF0YSwgIiVzICVzICVkXG4iLCBkaXJlY3Rpb24sIGZtdCwgb3B0aW9uKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgaW5mb2YoZGF0YSwgIiVzICVkICVkXG4iLCBkaXJlY3Rpb24sIGNtZCwgb3B0aW9uKTsKKyAgICB9CisgIH0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzZW5kX25lZ290aWF0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IGNtZCwgaW50IG9wdGlvbikKK3sKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzNdOworICAgc3NpemVfdCBieXRlc193cml0dGVuOworICAgaW50IGVycjsKKyAgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICAgYnVmWzBdID0gQ1VSTF9JQUM7CisgICBidWZbMV0gPSAodW5zaWduZWQgY2hhciljbWQ7CisgICBidWZbMl0gPSAodW5zaWduZWQgY2hhcilvcHRpb247CisKKyAgIGJ5dGVzX3dyaXR0ZW4gPSBzd3JpdGUoY29ubi0+c29ja1tGSVJTVFNPQ0tFVF0sIGJ1ZiwgMyk7CisgICBpZihieXRlc193cml0dGVuIDwgMCkgeworICAgICBlcnIgPSBTT0NLRVJSTk87CisgICAgIGZhaWxmKGRhdGEsIlNlbmRpbmcgZGF0YSBmYWlsZWQgKCVkKSIsZXJyKTsKKyAgIH0KKworICAgcHJpbnRvcHRpb24oY29ubi0+ZGF0YSwgIlNFTlQiLCBjbWQsIG9wdGlvbik7Cit9CisKK3N0YXRpYwordm9pZCBzZXRfcmVtb3RlX29wdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBvcHRpb24sIGludCBuZXdzdGF0ZSkKK3sKKyAgc3RydWN0IFRFTE5FVCAqdG4gPSAoc3RydWN0IFRFTE5FVCAqKWNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLnRlbG5ldDsKKyAgaWYobmV3c3RhdGUgPT0gQ1VSTF9ZRVMpIHsKKyAgICBzd2l0Y2godG4tPmhpbVtvcHRpb25dKSB7CisgICAgY2FzZSBDVVJMX05POgorICAgICAgdG4tPmhpbVtvcHRpb25dID0gQ1VSTF9XQU5UWUVTOworICAgICAgc2VuZF9uZWdvdGlhdGlvbihjb25uLCBDVVJMX0RPLCBvcHRpb24pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxfWUVTOgorICAgICAgLyogQWxyZWFkeSBlbmFibGVkICovCisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTF9XQU5UTk86CisgICAgICBzd2l0Y2godG4tPmhpbXFbb3B0aW9uXSkgeworICAgICAgY2FzZSBDVVJMX0VNUFRZOgorICAgICAgICAvKiBBbHJlYWR5IG5lZ290aWF0aW5nIGZvciBDVVJMX1lFUywgcXVldWUgdGhlIHJlcXVlc3QgKi8KKyAgICAgICAgdG4tPmhpbXFbb3B0aW9uXSA9IENVUkxfT1BQT1NJVEU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBDVVJMX09QUE9TSVRFOgorICAgICAgICAvKiBFcnJvcjogYWxyZWFkeSBxdWV1ZWQgYW4gZW5hYmxlIHJlcXVlc3QgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTF9XQU5UWUVTOgorICAgICAgc3dpdGNoKHRuLT5oaW1xW29wdGlvbl0pIHsKKyAgICAgIGNhc2UgQ1VSTF9FTVBUWToKKyAgICAgICAgLyogRXJyb3I6IGFscmVhZHkgbmVnb3RpYXRpbmcgZm9yIGVuYWJsZSAqLworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ1VSTF9PUFBPU0lURToKKyAgICAgICAgdG4tPmhpbXFbb3B0aW9uXSA9IENVUkxfRU1QVFk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgeyAvKiBOTyAqLworICAgIHN3aXRjaCh0bi0+aGltW29wdGlvbl0pIHsKKyAgICBjYXNlIENVUkxfTk86CisgICAgICAvKiBBbHJlYWR5IGRpc2FibGVkICovCisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTF9ZRVM6CisgICAgICB0bi0+aGltW29wdGlvbl0gPSBDVVJMX1dBTlROTzsKKyAgICAgIHNlbmRfbmVnb3RpYXRpb24oY29ubiwgQ1VSTF9ET05ULCBvcHRpb24pOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxfV0FOVE5POgorICAgICAgc3dpdGNoKHRuLT5oaW1xW29wdGlvbl0pIHsKKyAgICAgIGNhc2UgQ1VSTF9FTVBUWToKKyAgICAgICAgLyogQWxyZWFkeSBuZWdvdGlhdGluZyBmb3IgTk8gKi8KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIENVUkxfT1BQT1NJVEU6CisgICAgICAgIHRuLT5oaW1xW29wdGlvbl0gPSBDVVJMX0VNUFRZOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMX1dBTlRZRVM6CisgICAgICBzd2l0Y2godG4tPmhpbXFbb3B0aW9uXSkgeworICAgICAgY2FzZSBDVVJMX0VNUFRZOgorICAgICAgICB0bi0+aGltcVtvcHRpb25dID0gQ1VSTF9PUFBPU0lURTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIENVUkxfT1BQT1NJVEU6CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9Cit9CisKK3N0YXRpYwordm9pZCByZWNfd2lsbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBvcHRpb24pCit7CisgIHN0cnVjdCBURUxORVQgKnRuID0gKHN0cnVjdCBURUxORVQgKiljb25uLT5kYXRhLT5zdGF0ZS5wcm90by50ZWxuZXQ7CisgIHN3aXRjaCh0bi0+aGltW29wdGlvbl0pIHsKKyAgY2FzZSBDVVJMX05POgorICAgIGlmKHRuLT5oaW1fcHJlZmVycmVkW29wdGlvbl0gPT0gQ1VSTF9ZRVMpIHsKKyAgICAgIHRuLT5oaW1bb3B0aW9uXSA9IENVUkxfWUVTOworICAgICAgc2VuZF9uZWdvdGlhdGlvbihjb25uLCBDVVJMX0RPLCBvcHRpb24pOworICAgIH0KKyAgICBlbHNlCisgICAgICBzZW5kX25lZ290aWF0aW9uKGNvbm4sIENVUkxfRE9OVCwgb3B0aW9uKTsKKworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTF9ZRVM6CisgICAgLyogQWxyZWFkeSBlbmFibGVkICovCisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMX1dBTlROTzoKKyAgICBzd2l0Y2godG4tPmhpbXFbb3B0aW9uXSkgeworICAgIGNhc2UgQ1VSTF9FTVBUWToKKyAgICAgIC8qIEVycm9yOiBET05UIGFuc3dlcmVkIGJ5IFdJTEwgKi8KKyAgICAgIHRuLT5oaW1bb3B0aW9uXSA9IENVUkxfTk87CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfT1BQT1NJVEU6CisgICAgICAvKiBFcnJvcjogRE9OVCBhbnN3ZXJlZCBieSBXSUxMICovCisgICAgICB0bi0+aGltW29wdGlvbl0gPSBDVVJMX1lFUzsKKyAgICAgIHRuLT5oaW1xW29wdGlvbl0gPSBDVVJMX0VNUFRZOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTF9XQU5UWUVTOgorICAgIHN3aXRjaCh0bi0+aGltcVtvcHRpb25dKSB7CisgICAgY2FzZSBDVVJMX0VNUFRZOgorICAgICAgdG4tPmhpbVtvcHRpb25dID0gQ1VSTF9ZRVM7CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfT1BQT1NJVEU6CisgICAgICB0bi0+aGltW29wdGlvbl0gPSBDVVJMX1dBTlROTzsKKyAgICAgIHRuLT5oaW1xW29wdGlvbl0gPSBDVVJMX0VNUFRZOworICAgICAgc2VuZF9uZWdvdGlhdGlvbihjb25uLCBDVVJMX0RPTlQsIG9wdGlvbik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljCit2b2lkIHJlY193b250KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IG9wdGlvbikKK3sKKyAgc3RydWN0IFRFTE5FVCAqdG4gPSAoc3RydWN0IFRFTE5FVCAqKWNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLnRlbG5ldDsKKyAgc3dpdGNoKHRuLT5oaW1bb3B0aW9uXSkgeworICBjYXNlIENVUkxfTk86CisgICAgLyogQWxyZWFkeSBkaXNhYmxlZCAqLworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTF9ZRVM6CisgICAgdG4tPmhpbVtvcHRpb25dID0gQ1VSTF9OTzsKKyAgICBzZW5kX25lZ290aWF0aW9uKGNvbm4sIENVUkxfRE9OVCwgb3B0aW9uKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxfV0FOVE5POgorICAgIHN3aXRjaCh0bi0+aGltcVtvcHRpb25dKSB7CisgICAgY2FzZSBDVVJMX0VNUFRZOgorICAgICAgdG4tPmhpbVtvcHRpb25dID0gQ1VSTF9OTzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMX09QUE9TSVRFOgorICAgICAgdG4tPmhpbVtvcHRpb25dID0gQ1VSTF9XQU5UWUVTOworICAgICAgdG4tPmhpbXFbb3B0aW9uXSA9IENVUkxfRU1QVFk7CisgICAgICBzZW5kX25lZ290aWF0aW9uKGNvbm4sIENVUkxfRE8sIG9wdGlvbik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMX1dBTlRZRVM6CisgICAgc3dpdGNoKHRuLT5oaW1xW29wdGlvbl0pIHsKKyAgICBjYXNlIENVUkxfRU1QVFk6CisgICAgICB0bi0+aGltW29wdGlvbl0gPSBDVVJMX05POworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX09QUE9TSVRFOgorICAgICAgdG4tPmhpbVtvcHRpb25dID0gQ1VSTF9OTzsKKyAgICAgIHRuLT5oaW1xW29wdGlvbl0gPSBDVVJMX0VNUFRZOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfbG9jYWxfb3B0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IG9wdGlvbiwgaW50IG5ld3N0YXRlKQoreworICBzdHJ1Y3QgVEVMTkVUICp0biA9IChzdHJ1Y3QgVEVMTkVUICopY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8udGVsbmV0OworICBpZihuZXdzdGF0ZSA9PSBDVVJMX1lFUykgeworICAgIHN3aXRjaCh0bi0+dXNbb3B0aW9uXSkgeworICAgIGNhc2UgQ1VSTF9OTzoKKyAgICAgIHRuLT51c1tvcHRpb25dID0gQ1VSTF9XQU5UWUVTOworICAgICAgc2VuZF9uZWdvdGlhdGlvbihjb25uLCBDVVJMX1dJTEwsIG9wdGlvbik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTF9ZRVM6CisgICAgICAvKiBBbHJlYWR5IGVuYWJsZWQgKi8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMX1dBTlROTzoKKyAgICAgIHN3aXRjaCh0bi0+dXNxW29wdGlvbl0pIHsKKyAgICAgIGNhc2UgQ1VSTF9FTVBUWToKKyAgICAgICAgLyogQWxyZWFkeSBuZWdvdGlhdGluZyBmb3IgQ1VSTF9ZRVMsIHF1ZXVlIHRoZSByZXF1ZXN0ICovCisgICAgICAgIHRuLT51c3Fbb3B0aW9uXSA9IENVUkxfT1BQT1NJVEU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBDVVJMX09QUE9TSVRFOgorICAgICAgICAvKiBFcnJvcjogYWxyZWFkeSBxdWV1ZWQgYW4gZW5hYmxlIHJlcXVlc3QgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTF9XQU5UWUVTOgorICAgICAgc3dpdGNoKHRuLT51c3Fbb3B0aW9uXSkgeworICAgICAgY2FzZSBDVVJMX0VNUFRZOgorICAgICAgICAvKiBFcnJvcjogYWxyZWFkeSBuZWdvdGlhdGluZyBmb3IgZW5hYmxlICovCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBDVVJMX09QUE9TSVRFOgorICAgICAgICB0bi0+dXNxW29wdGlvbl0gPSBDVVJMX0VNUFRZOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsgLyogTk8gKi8KKyAgICBzd2l0Y2godG4tPnVzW29wdGlvbl0pIHsKKyAgICBjYXNlIENVUkxfTk86CisgICAgICAvKiBBbHJlYWR5IGRpc2FibGVkICovCisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTF9ZRVM6CisgICAgICB0bi0+dXNbb3B0aW9uXSA9IENVUkxfV0FOVE5POworICAgICAgc2VuZF9uZWdvdGlhdGlvbihjb25uLCBDVVJMX1dPTlQsIG9wdGlvbik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTF9XQU5UTk86CisgICAgICBzd2l0Y2godG4tPnVzcVtvcHRpb25dKSB7CisgICAgICBjYXNlIENVUkxfRU1QVFk6CisgICAgICAgIC8qIEFscmVhZHkgbmVnb3RpYXRpbmcgZm9yIE5PICovCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBDVVJMX09QUE9TSVRFOgorICAgICAgICB0bi0+dXNxW29wdGlvbl0gPSBDVVJMX0VNUFRZOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMX1dBTlRZRVM6CisgICAgICBzd2l0Y2godG4tPnVzcVtvcHRpb25dKSB7CisgICAgICBjYXNlIENVUkxfRU1QVFk6CisgICAgICAgIHRuLT51c3Fbb3B0aW9uXSA9IENVUkxfT1BQT1NJVEU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBDVVJMX09QUE9TSVRFOgorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorfQorCitzdGF0aWMKK3ZvaWQgcmVjX2RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IG9wdGlvbikKK3sKKyAgc3RydWN0IFRFTE5FVCAqdG4gPSAoc3RydWN0IFRFTE5FVCAqKWNvbm4tPmRhdGEtPnN0YXRlLnByb3RvLnRlbG5ldDsKKyAgc3dpdGNoKHRuLT51c1tvcHRpb25dKSB7CisgIGNhc2UgQ1VSTF9OTzoKKyAgICBpZih0bi0+dXNfcHJlZmVycmVkW29wdGlvbl0gPT0gQ1VSTF9ZRVMpIHsKKyAgICAgIHRuLT51c1tvcHRpb25dID0gQ1VSTF9ZRVM7CisgICAgICBzZW5kX25lZ290aWF0aW9uKGNvbm4sIENVUkxfV0lMTCwgb3B0aW9uKTsKKyAgICAgIGlmKHRuLT5zdWJuZWdvdGlhdGlvbltvcHRpb25dID09IENVUkxfWUVTKQorICAgICAgICAvKiB0cmFuc21pc3Npb24gb2YgZGF0YSBvcHRpb24gKi8KKyAgICAgICAgc2VuZHN1Ym9wdGlvbihjb25uLCBvcHRpb24pOworICAgIH0KKyAgICBlbHNlIGlmKHRuLT5zdWJuZWdvdGlhdGlvbltvcHRpb25dID09IENVUkxfWUVTKSB7CisgICAgICAvKiBzZW5kIGluZm9ybWF0aW9uIHRvIGFjaGlldmUgdGhpcyBvcHRpb24qLworICAgICAgdG4tPnVzW29wdGlvbl0gPSBDVVJMX1lFUzsKKyAgICAgIHNlbmRfbmVnb3RpYXRpb24oY29ubiwgQ1VSTF9XSUxMLCBvcHRpb24pOworICAgICAgc2VuZHN1Ym9wdGlvbihjb25uLCBvcHRpb24pOworICAgIH0KKyAgICBlbHNlCisgICAgICBzZW5kX25lZ290aWF0aW9uKGNvbm4sIENVUkxfV09OVCwgb3B0aW9uKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxfWUVTOgorICAgIC8qIEFscmVhZHkgZW5hYmxlZCAqLworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTF9XQU5UTk86CisgICAgc3dpdGNoKHRuLT51c3Fbb3B0aW9uXSkgeworICAgIGNhc2UgQ1VSTF9FTVBUWToKKyAgICAgIC8qIEVycm9yOiBET05UIGFuc3dlcmVkIGJ5IFdJTEwgKi8KKyAgICAgIHRuLT51c1tvcHRpb25dID0gQ1VSTF9OTzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9PUFBPU0lURToKKyAgICAgIC8qIEVycm9yOiBET05UIGFuc3dlcmVkIGJ5IFdJTEwgKi8KKyAgICAgIHRuLT51c1tvcHRpb25dID0gQ1VSTF9ZRVM7CisgICAgICB0bi0+dXNxW29wdGlvbl0gPSBDVVJMX0VNUFRZOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTF9XQU5UWUVTOgorICAgIHN3aXRjaCh0bi0+dXNxW29wdGlvbl0pIHsKKyAgICBjYXNlIENVUkxfRU1QVFk6CisgICAgICB0bi0+dXNbb3B0aW9uXSA9IENVUkxfWUVTOworICAgICAgaWYodG4tPnN1Ym5lZ290aWF0aW9uW29wdGlvbl0gPT0gQ1VSTF9ZRVMpIHsKKyAgICAgICAgLyogdHJhbnNtaXNzaW9uIG9mIGRhdGEgb3B0aW9uICovCisgICAgICAgIHNlbmRzdWJvcHRpb24oY29ubiwgb3B0aW9uKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9PUFBPU0lURToKKyAgICAgIHRuLT51c1tvcHRpb25dID0gQ1VSTF9XQU5UTk87CisgICAgICB0bi0+aGltcVtvcHRpb25dID0gQ1VSTF9FTVBUWTsKKyAgICAgIHNlbmRfbmVnb3RpYXRpb24oY29ubiwgQ1VSTF9XT05ULCBvcHRpb24pOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYwordm9pZCByZWNfZG9udChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBvcHRpb24pCit7CisgIHN0cnVjdCBURUxORVQgKnRuID0gKHN0cnVjdCBURUxORVQgKiljb25uLT5kYXRhLT5zdGF0ZS5wcm90by50ZWxuZXQ7CisgIHN3aXRjaCh0bi0+dXNbb3B0aW9uXSkgeworICBjYXNlIENVUkxfTk86CisgICAgLyogQWxyZWFkeSBkaXNhYmxlZCAqLworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTF9ZRVM6CisgICAgdG4tPnVzW29wdGlvbl0gPSBDVVJMX05POworICAgIHNlbmRfbmVnb3RpYXRpb24oY29ubiwgQ1VSTF9XT05ULCBvcHRpb24pOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTF9XQU5UTk86CisgICAgc3dpdGNoKHRuLT51c3Fbb3B0aW9uXSkgeworICAgIGNhc2UgQ1VSTF9FTVBUWToKKyAgICAgIHRuLT51c1tvcHRpb25dID0gQ1VSTF9OTzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMX09QUE9TSVRFOgorICAgICAgdG4tPnVzW29wdGlvbl0gPSBDVVJMX1dBTlRZRVM7CisgICAgICB0bi0+dXNxW29wdGlvbl0gPSBDVVJMX0VNUFRZOworICAgICAgc2VuZF9uZWdvdGlhdGlvbihjb25uLCBDVVJMX1dJTEwsIG9wdGlvbik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMX1dBTlRZRVM6CisgICAgc3dpdGNoKHRuLT51c3Fbb3B0aW9uXSkgeworICAgIGNhc2UgQ1VSTF9FTVBUWToKKyAgICAgIHRuLT51c1tvcHRpb25dID0gQ1VSTF9OTzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9PUFBPU0lURToKKyAgICAgIHRuLT51c1tvcHRpb25dID0gQ1VSTF9OTzsKKyAgICAgIHRuLT51c3Fbb3B0aW9uXSA9IENVUkxfRU1QVFk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisgIH0KK30KKworCitzdGF0aWMgdm9pZCBwcmludHN1YihzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb24sICAgICAgICAgICAgIC8qICc8JyBvciAnPicgKi8KKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBvaW50ZXIsICAgIC8qIHdoZXJlIHN1Ym9wdGlvbiBkYXRhIGlzICovCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKSAgICAgICAgICAgICAvKiBsZW5ndGggb2Ygc3Vib3B0aW9uIGRhdGEgKi8KK3sKKyAgdW5zaWduZWQgaW50IGkgPSAwOworICB1bnNpZ25lZCBzaG9ydCAqcHZhbDsKKworICBpZihkYXRhLT5zZXQudmVyYm9zZSkgeworICAgIGlmKGRpcmVjdGlvbikgeworICAgICAgaW5mb2YoZGF0YSwgIiVzIElBQyBTQiAiLCAoZGlyZWN0aW9uID09ICc8Jyk/ICJSQ1ZEIjoiU0VOVCIpOworICAgICAgaWYobGVuZ3RoID49IDMpIHsKKyAgICAgICAgaW50IGo7CisKKyAgICAgICAgaSA9IHBvaW50ZXJbbGVuZ3RoLTJdOworICAgICAgICBqID0gcG9pbnRlcltsZW5ndGgtMV07CisKKyAgICAgICAgaWYoaSAhPSBDVVJMX0lBQyB8fCBqICE9IENVUkxfU0UpIHsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiKHRlcm1pbmF0ZWQgYnkgIik7CisgICAgICAgICAgaWYoQ1VSTF9URUxPUFRfT0soaSkpCisgICAgICAgICAgICBpbmZvZihkYXRhLCAiJXMgIiwgQ1VSTF9URUxPUFQoaSkpOworICAgICAgICAgIGVsc2UgaWYoQ1VSTF9URUxDTURfT0soaSkpCisgICAgICAgICAgICBpbmZvZihkYXRhLCAiJXMgIiwgQ1VSTF9URUxDTUQoaSkpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluZm9mKGRhdGEsICIldSAiLCBpKTsKKyAgICAgICAgICBpZihDVVJMX1RFTE9QVF9PSyhqKSkKKyAgICAgICAgICAgIGluZm9mKGRhdGEsICIlcyIsIENVUkxfVEVMT1BUKGopKTsKKyAgICAgICAgICBlbHNlIGlmKENVUkxfVEVMQ01EX09LKGopKQorICAgICAgICAgICAgaW5mb2YoZGF0YSwgIiVzIiwgQ1VSTF9URUxDTUQoaikpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluZm9mKGRhdGEsICIlZCIsIGopOworICAgICAgICAgIGluZm9mKGRhdGEsICIsIG5vdCBJQUMgU0UhKSAiKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgbGVuZ3RoIC09IDI7CisgICAgfQorICAgIGlmKGxlbmd0aCA8IDEpIHsKKyAgICAgIGluZm9mKGRhdGEsICIoRW1wdHkgc3Vib3B0aW9uPykiKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZihDVVJMX1RFTE9QVF9PSyhwb2ludGVyWzBdKSkgeworICAgICAgc3dpdGNoKHBvaW50ZXJbMF0pIHsKKyAgICAgIGNhc2UgQ1VSTF9URUxPUFRfVFRZUEU6CisgICAgICBjYXNlIENVUkxfVEVMT1BUX1hESVNQTE9DOgorICAgICAgY2FzZSBDVVJMX1RFTE9QVF9ORVdfRU5WSVJPTjoKKyAgICAgIGNhc2UgQ1VSTF9URUxPUFRfTkFXUzoKKyAgICAgICAgaW5mb2YoZGF0YSwgIiVzIiwgQ1VSTF9URUxPUFQocG9pbnRlclswXSkpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGluZm9mKGRhdGEsICIlcyAodW5zdXBwb3J0ZWQpIiwgQ1VSTF9URUxPUFQocG9pbnRlclswXSkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgaW5mb2YoZGF0YSwgIiVkICh1bmtub3duKSIsIHBvaW50ZXJbaV0pOworCisgICAgc3dpdGNoKHBvaW50ZXJbMF0pIHsKKyAgICBjYXNlIENVUkxfVEVMT1BUX05BV1M6CisgICAgICBwdmFsID0gKHVuc2lnbmVkIHNob3J0KikocG9pbnRlcisxKTsKKyAgICAgIGluZm9mKGRhdGEsICJXaWR0aDogJWh1IDsgSGVpZ2h0OiAlaHUiLAorICAgICAgICAgICAgbnRvaHMocHZhbFswXSksIG50b2hzKHB2YWxbMV0pKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBzd2l0Y2gocG9pbnRlclsxXSkgeworICAgICAgY2FzZSBDVVJMX1RFTFFVQUxfSVM6CisgICAgICAgIGluZm9mKGRhdGEsICIgSVMiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIENVUkxfVEVMUVVBTF9TRU5EOgorICAgICAgICBpbmZvZihkYXRhLCAiIFNFTkQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIENVUkxfVEVMUVVBTF9JTkZPOgorICAgICAgICBpbmZvZihkYXRhLCAiIElORk8vUkVQTFkiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIENVUkxfVEVMUVVBTF9OQU1FOgorICAgICAgICBpbmZvZihkYXRhLCAiIE5BTUUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHN3aXRjaChwb2ludGVyWzBdKSB7CisgICAgICBjYXNlIENVUkxfVEVMT1BUX1RUWVBFOgorICAgICAgY2FzZSBDVVJMX1RFTE9QVF9YRElTUExPQzoKKyAgICAgICAgcG9pbnRlcltsZW5ndGhdID0gMDsKKyAgICAgICAgaW5mb2YoZGF0YSwgIiBcIiVzXCIiLCAmcG9pbnRlclsyXSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBDVVJMX1RFTE9QVF9ORVdfRU5WSVJPTjoKKyAgICAgICAgaWYocG9pbnRlclsxXSA9PSBDVVJMX1RFTFFVQUxfSVMpIHsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiICIpOworICAgICAgICAgIGZvcihpID0gMztpIDwgbGVuZ3RoO2krKykgeworICAgICAgICAgICAgc3dpdGNoKHBvaW50ZXJbaV0pIHsKKyAgICAgICAgICAgIGNhc2UgQ1VSTF9ORVdfRU5WX1ZBUjoKKyAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgIiwgIik7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDVVJMX05FV19FTlZfVkFMVUU6CisgICAgICAgICAgICAgIGluZm9mKGRhdGEsICIgPSAiKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICBpbmZvZihkYXRhLCAiJWMiLCBwb2ludGVyW2ldKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZm9yKGkgPSAyOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgICAgaW5mb2YoZGF0YSwgIiAlLjJ4IiwgcG9pbnRlcltpXSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBpZihkaXJlY3Rpb24pCisgICAgICBpbmZvZihkYXRhLCAiXG4iKTsKKyAgfQorfQorCitzdGF0aWMgQ1VSTGNvZGUgY2hlY2tfdGVsbmV0X29wdGlvbnMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZDsKKyAgc3RydWN0IGN1cmxfc2xpc3QgKmJlZzsKKyAgY2hhciBvcHRpb25fa2V5d29yZFsxMjhdOworICBjaGFyIG9wdGlvbl9hcmdbMjU2XTsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgVEVMTkVUICp0biA9IChzdHJ1Y3QgVEVMTkVUICopY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8udGVsbmV0OworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgaW50IGJpbmFyeV9vcHRpb247CisKKyAgLyogQWRkIHRoZSB1c2VyIG5hbWUgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgaXQKKyAgICAgd2FzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgKi8KKyAgaWYoY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCkgeworICAgIHNucHJpbnRmKG9wdGlvbl9hcmcsIHNpemVvZihvcHRpb25fYXJnKSwgIlVTRVIsJXMiLCBjb25uLT51c2VyKTsKKyAgICBiZWcgPSBjdXJsX3NsaXN0X2FwcGVuZCh0bi0+dGVsbmV0X3ZhcnMsIG9wdGlvbl9hcmcpOworICAgIGlmKCFiZWcpIHsKKyAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwodG4tPnRlbG5ldF92YXJzKTsKKyAgICAgIHRuLT50ZWxuZXRfdmFycyA9IE5VTEw7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgICAgdG4tPnRlbG5ldF92YXJzID0gYmVnOworICAgIHRuLT51c19wcmVmZXJyZWRbQ1VSTF9URUxPUFRfTkVXX0VOVklST05dID0gQ1VSTF9ZRVM7CisgIH0KKworICBmb3IoaGVhZCA9IGRhdGEtPnNldC50ZWxuZXRfb3B0aW9uczsgaGVhZDsgaGVhZD1oZWFkLT5uZXh0KSB7CisgICAgaWYoc3NjYW5mKGhlYWQtPmRhdGEsICIlMTI3W149IF0lKlsgPV0lMjU1cyIsCisgICAgICAgICAgICAgIG9wdGlvbl9rZXl3b3JkLCBvcHRpb25fYXJnKSA9PSAyKSB7CisKKyAgICAgIC8qIFRlcm1pbmFsIHR5cGUgKi8KKyAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKG9wdGlvbl9rZXl3b3JkLCAiVFRZUEUiKSkgeworICAgICAgICBzdHJuY3B5KHRuLT5zdWJvcHRfdHR5cGUsIG9wdGlvbl9hcmcsIDMxKTsKKyAgICAgICAgdG4tPnN1Ym9wdF90dHlwZVszMV0gPSAwOyAvKiBTdHJpbmcgdGVybWluYXRpb24gKi8KKyAgICAgICAgdG4tPnVzX3ByZWZlcnJlZFtDVVJMX1RFTE9QVF9UVFlQRV0gPSBDVVJMX1lFUzsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIC8qIERpc3BsYXkgdmFyaWFibGUgKi8KKyAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKG9wdGlvbl9rZXl3b3JkLCAiWERJU1BMT0MiKSkgeworICAgICAgICBzdHJuY3B5KHRuLT5zdWJvcHRfeGRpc3Bsb2MsIG9wdGlvbl9hcmcsIDEyNyk7CisgICAgICAgIHRuLT5zdWJvcHRfeGRpc3Bsb2NbMTI3XSA9IDA7IC8qIFN0cmluZyB0ZXJtaW5hdGlvbiAqLworICAgICAgICB0bi0+dXNfcHJlZmVycmVkW0NVUkxfVEVMT1BUX1hESVNQTE9DXSA9IENVUkxfWUVTOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLyogRW52aXJvbm1lbnQgdmFyaWFibGUgKi8KKyAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKG9wdGlvbl9rZXl3b3JkLCAiTkVXX0VOViIpKSB7CisgICAgICAgIGJlZyA9IGN1cmxfc2xpc3RfYXBwZW5kKHRuLT50ZWxuZXRfdmFycywgb3B0aW9uX2FyZyk7CisgICAgICAgIGlmKCFiZWcpIHsKKyAgICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHRuLT50ZWxuZXRfdmFycyA9IGJlZzsKKyAgICAgICAgdG4tPnVzX3ByZWZlcnJlZFtDVVJMX1RFTE9QVF9ORVdfRU5WSVJPTl0gPSBDVVJMX1lFUzsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgICAgICAvKiBXaW5kb3cgU2l6ZSAqLworICAgICAgaWYoQ3VybF9yYXdfZXF1YWwob3B0aW9uX2tleXdvcmQsICJXUyIpKSB7CisgICAgICAgIGlmKHNzY2FuZihvcHRpb25fYXJnLCAiJWh1JSpbeFhdJWh1IiwKKyAgICAgICAgICAgICAgICAgICZ0bi0+c3Vib3B0X3dzeCwgJnRuLT5zdWJvcHRfd3N5KSA9PSAyKQorICAgICAgICAgIHRuLT51c19wcmVmZXJyZWRbQ1VSTF9URUxPUFRfTkFXU10gPSBDVVJMX1lFUzsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiB0ZWxuZXQgb3B0aW9uOiAlcyIsIGhlYWQtPmRhdGEpOworICAgICAgICAgIHJlc3VsdCA9IENVUkxFX1RFTE5FVF9PUFRJT05fU1lOVEFYOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICAvKiBUbyB0YWtlIGNhcmUgb3Igbm90IG9mIHRoZSA4dGggYml0IGluIGRhdGEgZXhjaGFuZ2UgKi8KKyAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKG9wdGlvbl9rZXl3b3JkLCAiQklOQVJZIikpIHsKKyAgICAgICAgYmluYXJ5X29wdGlvbj1hdG9pKG9wdGlvbl9hcmcpOworICAgICAgICBpZihiaW5hcnlfb3B0aW9uIT0xKSB7CisgICAgICAgICAgdG4tPnVzX3ByZWZlcnJlZFtDVVJMX1RFTE9QVF9CSU5BUlldID0gQ1VSTF9OTzsKKyAgICAgICAgICB0bi0+aGltX3ByZWZlcnJlZFtDVVJMX1RFTE9QVF9CSU5BUlldID0gQ1VSTF9OTzsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgZmFpbGYoZGF0YSwgIlVua25vd24gdGVsbmV0IG9wdGlvbiAlcyIsIGhlYWQtPmRhdGEpOworICAgICAgcmVzdWx0ID0gQ1VSTEVfVU5LTk9XTl9URUxORVRfT1BUSU9OOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZmFpbGYoZGF0YSwgIlN5bnRheCBlcnJvciBpbiB0ZWxuZXQgb3B0aW9uOiAlcyIsIGhlYWQtPmRhdGEpOworICAgICAgcmVzdWx0ID0gQ1VSTEVfVEVMTkVUX09QVElPTl9TWU5UQVg7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBpZihyZXN1bHQpIHsKKyAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKHRuLT50ZWxuZXRfdmFycyk7CisgICAgdG4tPnRlbG5ldF92YXJzID0gTlVMTDsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBzdWJvcHRpb24oKQorICoKKyAqIExvb2sgYXQgdGhlIHN1Yi1vcHRpb24gYnVmZmVyLCBhbmQgdHJ5IHRvIGJlIGhlbHBmdWwgdG8gdGhlIG90aGVyCisgKiBzaWRlLgorICovCisKK3N0YXRpYyB2b2lkIHN1Ym9wdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICp2OworICB1bnNpZ25lZCBjaGFyIHRlbXBbMjA0OF07CisgIHNzaXplX3QgYnl0ZXNfd3JpdHRlbjsKKyAgc2l6ZV90IGxlbjsKKyAgc2l6ZV90IHRtcGxlbjsKKyAgaW50IGVycjsKKyAgY2hhciB2YXJuYW1lWzEyOF07CisgIGNoYXIgdmFydmFsWzEyOF07CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IFRFTE5FVCAqdG4gPSAoc3RydWN0IFRFTE5FVCAqKWRhdGEtPnN0YXRlLnByb3RvLnRlbG5ldDsKKworICBwcmludHN1YihkYXRhLCAnPCcsICh1bnNpZ25lZCBjaGFyICopdG4tPnN1YmJ1ZmZlciwgQ1VSTF9TQl9MRU4odG4pKzIpOworICBzd2l0Y2ggKENVUkxfU0JfR0VUKHRuKSkgeworICAgIGNhc2UgQ1VSTF9URUxPUFRfVFRZUEU6CisgICAgICBsZW4gPSBzdHJsZW4odG4tPnN1Ym9wdF90dHlwZSkgKyA0ICsgMjsKKyAgICAgIHNucHJpbnRmKChjaGFyICopdGVtcCwgc2l6ZW9mKHRlbXApLAorICAgICAgICAgICAgICAgIiVjJWMlYyVjJXMlYyVjIiwgQ1VSTF9JQUMsIENVUkxfU0IsIENVUkxfVEVMT1BUX1RUWVBFLAorICAgICAgICAgICAgICAgQ1VSTF9URUxRVUFMX0lTLCB0bi0+c3Vib3B0X3R0eXBlLCBDVVJMX0lBQywgQ1VSTF9TRSk7CisgICAgICBieXRlc193cml0dGVuID0gc3dyaXRlKGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdLCB0ZW1wLCBsZW4pOworICAgICAgaWYoYnl0ZXNfd3JpdHRlbiA8IDApIHsKKyAgICAgICAgZXJyID0gU09DS0VSUk5POworICAgICAgICBmYWlsZihkYXRhLCJTZW5kaW5nIGRhdGEgZmFpbGVkICglZCkiLGVycik7CisgICAgICB9CisgICAgICBwcmludHN1YihkYXRhLCAnPicsICZ0ZW1wWzJdLCBsZW4tMik7CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfVEVMT1BUX1hESVNQTE9DOgorICAgICAgbGVuID0gc3RybGVuKHRuLT5zdWJvcHRfeGRpc3Bsb2MpICsgNCArIDI7CisgICAgICBzbnByaW50ZigoY2hhciAqKXRlbXAsIHNpemVvZih0ZW1wKSwKKyAgICAgICAgICAgICAgICIlYyVjJWMlYyVzJWMlYyIsIENVUkxfSUFDLCBDVVJMX1NCLCBDVVJMX1RFTE9QVF9YRElTUExPQywKKyAgICAgICAgICAgICAgIENVUkxfVEVMUVVBTF9JUywgdG4tPnN1Ym9wdF94ZGlzcGxvYywgQ1VSTF9JQUMsIENVUkxfU0UpOworICAgICAgYnl0ZXNfd3JpdHRlbiA9IHN3cml0ZShjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSwgdGVtcCwgbGVuKTsKKyAgICAgIGlmKGJ5dGVzX3dyaXR0ZW4gPCAwKSB7CisgICAgICAgIGVyciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgZmFpbGYoZGF0YSwiU2VuZGluZyBkYXRhIGZhaWxlZCAoJWQpIixlcnIpOworICAgICAgfQorICAgICAgcHJpbnRzdWIoZGF0YSwgJz4nLCAmdGVtcFsyXSwgbGVuLTIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1RFTE9QVF9ORVdfRU5WSVJPTjoKKyAgICAgIHNucHJpbnRmKChjaGFyICopdGVtcCwgc2l6ZW9mKHRlbXApLAorICAgICAgICAgICAgICAgIiVjJWMlYyVjIiwgQ1VSTF9JQUMsIENVUkxfU0IsIENVUkxfVEVMT1BUX05FV19FTlZJUk9OLAorICAgICAgICAgICAgICAgQ1VSTF9URUxRVUFMX0lTKTsKKyAgICAgIGxlbiA9IDQ7CisKKyAgICAgIGZvcih2ID0gdG4tPnRlbG5ldF92YXJzO3Y7diA9IHYtPm5leHQpIHsKKyAgICAgICAgdG1wbGVuID0gKHN0cmxlbih2LT5kYXRhKSArIDEpOworICAgICAgICAvKiBBZGQgdGhlIHZhcmlhYmxlIG9ubHkgaWYgaXQgZml0cyAqLworICAgICAgICBpZihsZW4gKyB0bXBsZW4gPCAoaW50KXNpemVvZih0ZW1wKS02KSB7CisgICAgICAgICAgc3NjYW5mKHYtPmRhdGEsICIlMTI3W14sXSwlMTI3cyIsIHZhcm5hbWUsIHZhcnZhbCk7CisgICAgICAgICAgc25wcmludGYoKGNoYXIgKikmdGVtcFtsZW5dLCBzaXplb2YodGVtcCkgLSBsZW4sCisgICAgICAgICAgICAgICAgICAgIiVjJXMlYyVzIiwgQ1VSTF9ORVdfRU5WX1ZBUiwgdmFybmFtZSwKKyAgICAgICAgICAgICAgICAgICBDVVJMX05FV19FTlZfVkFMVUUsIHZhcnZhbCk7CisgICAgICAgICAgbGVuICs9IHRtcGxlbjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgc25wcmludGYoKGNoYXIgKikmdGVtcFtsZW5dLCBzaXplb2YodGVtcCkgLSBsZW4sCisgICAgICAgICAgICAgICAiJWMlYyIsIENVUkxfSUFDLCBDVVJMX1NFKTsKKyAgICAgIGxlbiArPSAyOworICAgICAgYnl0ZXNfd3JpdHRlbiA9IHN3cml0ZShjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSwgdGVtcCwgbGVuKTsKKyAgICAgIGlmKGJ5dGVzX3dyaXR0ZW4gPCAwKSB7CisgICAgICAgIGVyciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgZmFpbGYoZGF0YSwiU2VuZGluZyBkYXRhIGZhaWxlZCAoJWQpIixlcnIpOworICAgICAgfQorICAgICAgcHJpbnRzdWIoZGF0YSwgJz4nLCAmdGVtcFsyXSwgbGVuLTIpOworICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuOworfQorCisKKy8qCisgKiBzZW5kc3Vib3B0aW9uKCkKKyAqCisgKiBTZW5kIHN1Ym9wdGlvbiBpbmZvcm1hdGlvbiB0byB0aGUgc2VydmVyIHNpZGUuCisgKi8KKworc3RhdGljIHZvaWQgc2VuZHN1Ym9wdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBvcHRpb24pCit7CisgIHNzaXplX3QgYnl0ZXNfd3JpdHRlbjsKKyAgaW50IGVycjsKKyAgdW5zaWduZWQgc2hvcnQgeCwgeTsKKyAgdW5zaWduZWQgY2hhcip1YzEsICp1YzI7CisKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgVEVMTkVUICp0biA9IChzdHJ1Y3QgVEVMTkVUICopZGF0YS0+c3RhdGUucHJvdG8udGVsbmV0OworCisgIHN3aXRjaCAob3B0aW9uKSB7CisgIGNhc2UgQ1VSTF9URUxPUFRfTkFXUzoKKyAgICAvKiBXZSBwcmVwYXJlIGRhdGEgdG8gYmUgc2VudCAqLworICAgIENVUkxfU0JfQ0xFQVIodG4pOworICAgIENVUkxfU0JfQUNDVU0odG4sIENVUkxfSUFDKTsKKyAgICBDVVJMX1NCX0FDQ1VNKHRuLCBDVVJMX1NCKTsKKyAgICBDVVJMX1NCX0FDQ1VNKHRuLCBDVVJMX1RFTE9QVF9OQVdTKTsKKyAgICAvKiBXZSBtdXN0IGRlYWwgZWl0aGVyIHdpdGggbGl0dGUgb3IgYmlnIGVuZGllbiBwcm9jZXNzb3JzICovCisgICAgLyogV2luZG93IHNpemUgbXVzdCBiZSBzZW50IGFjY29yZGluZyB0byB0aGUgJ25ldHdvcmsgb3JkZXInICovCisgICAgeD1odG9ucyh0bi0+c3Vib3B0X3dzeCk7CisgICAgeT1odG9ucyh0bi0+c3Vib3B0X3dzeSk7CisgICAgdWMxID0gKHVuc2lnbmVkIGNoYXIqKSZ4OworICAgIHVjMiA9ICh1bnNpZ25lZCBjaGFyKikmeTsKKyAgICBDVVJMX1NCX0FDQ1VNKHRuLCB1YzFbMF0pOworICAgIENVUkxfU0JfQUNDVU0odG4sIHVjMVsxXSk7CisgICAgQ1VSTF9TQl9BQ0NVTSh0biwgdWMyWzBdKTsKKyAgICBDVVJMX1NCX0FDQ1VNKHRuLCB1YzJbMV0pOworCisgICAgQ1VSTF9TQl9BQ0NVTSh0biwgQ1VSTF9JQUMpOworICAgIENVUkxfU0JfQUNDVU0odG4sIENVUkxfU0UpOworICAgIENVUkxfU0JfVEVSTSh0bik7CisgICAgLyogZGF0YSBzdWJvcHRpb24gaXMgbm93IHJlYWR5ICovCisKKyAgICBwcmludHN1YihkYXRhLCAnPicsICh1bnNpZ25lZCBjaGFyICopdG4tPnN1YmJ1ZmZlcisyLAorICAgICAgICAgICAgIENVUkxfU0JfTEVOKHRuKS0yKTsKKworICAgIC8qIHdlIHNlbmQgdGhlIGhlYWRlciBvZiB0aGUgc3Vib3B0aW9uLi4uICovCisgICAgYnl0ZXNfd3JpdHRlbiA9IHN3cml0ZShjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSwgdG4tPnN1YmJ1ZmZlciwgMyk7CisgICAgaWYoYnl0ZXNfd3JpdHRlbiA8IDApIHsKKyAgICAgIGVyciA9IFNPQ0tFUlJOTzsKKyAgICAgIGZhaWxmKGRhdGEsICJTZW5kaW5nIGRhdGEgZmFpbGVkICglZCkiLCBlcnIpOworICAgIH0KKyAgICAvKiAuLi4gdGhlbiB0aGUgd2luZG93IHNpemUgd2l0aCB0aGUgc2VuZF90ZWxuZXRfZGF0YSgpIGZ1bmN0aW9uCisgICAgICAgdG8gZGVhbCB3aXRoIDB4RkYgY2FzZXMgLi4uICovCisgICAgc2VuZF90ZWxuZXRfZGF0YShjb25uLCAoY2hhciAqKXRuLT5zdWJidWZmZXIrMywgNCk7CisgICAgLyogLi4uIGFuZCB0aGUgZm9vdGVyICovCisgICAgYnl0ZXNfd3JpdHRlbiA9IHN3cml0ZShjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSwgdG4tPnN1YmJ1ZmZlcis3LCAyKTsKKyAgICBpZihieXRlc193cml0dGVuIDwgMCkgeworICAgICAgZXJyID0gU09DS0VSUk5POworICAgICAgZmFpbGYoZGF0YSwgIlNlbmRpbmcgZGF0YSBmYWlsZWQgKCVkKSIsIGVycik7CisgICAgfQorICAgIGJyZWFrOworICB9Cit9CisKKworc3RhdGljCitDVVJMY29kZSB0ZWxyY3Yoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCAvKiBEYXRhIHJlY2VpdmVkIGZyb20gc29ja2V0ICovCisgICAgICAgICAgICAgICAgc3NpemVfdCBjb3VudCkgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCAqLworeworICB1bnNpZ25lZCBjaGFyIGM7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgaW50IGluID0gMDsKKyAgaW50IHN0YXJ0d3JpdGU9LTE7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IFRFTE5FVCAqdG4gPSAoc3RydWN0IFRFTE5FVCAqKWRhdGEtPnN0YXRlLnByb3RvLnRlbG5ldDsKKworI2RlZmluZSBzdGFydHNraXBwaW5nKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmKHN0YXJ0d3JpdGUgPj0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMSUVOVFdSSVRFX0JPRFksICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmaW5idWZbc3RhcnR3cml0ZV0sICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi1zdGFydHdyaXRlKTsgICAgICAgICAgICAgICAgXAorICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzdGFydHdyaXRlID0gLTEKKworI2RlZmluZSB3cml0ZWJ5dGUoKSBcCisgICAgaWYoc3RhcnR3cml0ZSA8IDApIFwKKyAgICAgIHN0YXJ0d3JpdGUgPSBpbgorCisjZGVmaW5lIGJ1ZmZlcmZsdXNoKCkgc3RhcnRza2lwcGluZygpCisKKyAgd2hpbGUoY291bnQtLSkgeworICAgIGMgPSBpbmJ1Zltpbl07CisKKyAgICBzd2l0Y2ggKHRuLT50ZWxyY3Zfc3RhdGUpIHsKKyAgICBjYXNlIENVUkxfVFNfQ1I6CisgICAgICB0bi0+dGVscmN2X3N0YXRlID0gQ1VSTF9UU19EQVRBOworICAgICAgaWYoYyA9PSAnXDAnKSB7CisgICAgICAgIHN0YXJ0c2tpcHBpbmcoKTsKKyAgICAgICAgYnJlYWs7ICAgLyogSWdub3JlIFwwIGFmdGVyIENSICovCisgICAgICB9CisgICAgICB3cml0ZWJ5dGUoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMX1RTX0RBVEE6CisgICAgICBpZihjID09IENVUkxfSUFDKSB7CisgICAgICAgIHRuLT50ZWxyY3Zfc3RhdGUgPSBDVVJMX1RTX0lBQzsKKyAgICAgICAgc3RhcnRza2lwcGluZygpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoYyA9PSAnXHInKQorICAgICAgICB0bi0+dGVscmN2X3N0YXRlID0gQ1VSTF9UU19DUjsKKyAgICAgIHdyaXRlYnl0ZSgpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxfVFNfSUFDOgorICAgIHByb2Nlc3NfaWFjOgorICAgICAgREVCVUdBU1NFUlQoc3RhcnR3cml0ZSA8IDApOworICAgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIENVUkxfV0lMTDoKKyAgICAgICAgdG4tPnRlbHJjdl9zdGF0ZSA9IENVUkxfVFNfV0lMTDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIENVUkxfV09OVDoKKyAgICAgICAgdG4tPnRlbHJjdl9zdGF0ZSA9IENVUkxfVFNfV09OVDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIENVUkxfRE86CisgICAgICAgIHRuLT50ZWxyY3Zfc3RhdGUgPSBDVVJMX1RTX0RPOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ1VSTF9ET05UOgorICAgICAgICB0bi0+dGVscmN2X3N0YXRlID0gQ1VSTF9UU19ET05UOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ1VSTF9TQjoKKyAgICAgICAgQ1VSTF9TQl9DTEVBUih0bik7CisgICAgICAgIHRuLT50ZWxyY3Zfc3RhdGUgPSBDVVJMX1RTX1NCOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ1VSTF9JQUM6CisgICAgICAgIHRuLT50ZWxyY3Zfc3RhdGUgPSBDVVJMX1RTX0RBVEE7CisgICAgICAgIHdyaXRlYnl0ZSgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgQ1VSTF9ETToKKyAgICAgIGNhc2UgQ1VSTF9OT1A6CisgICAgICBjYXNlIENVUkxfR0E6CisgICAgICBkZWZhdWx0OgorICAgICAgICB0bi0+dGVscmN2X3N0YXRlID0gQ1VSTF9UU19EQVRBOworICAgICAgICBwcmludG9wdGlvbihkYXRhLCAiUkNWRCIsIENVUkxfSUFDLCBjKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBDVVJMX1RTX1dJTEw6CisgICAgICAgIHByaW50b3B0aW9uKGRhdGEsICJSQ1ZEIiwgQ1VSTF9XSUxMLCBjKTsKKyAgICAgICAgdG4tPnBsZWFzZV9uZWdvdGlhdGUgPSAxOworICAgICAgICByZWNfd2lsbChjb25uLCBjKTsKKyAgICAgICAgdG4tPnRlbHJjdl9zdGF0ZSA9IENVUkxfVFNfREFUQTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQ1VSTF9UU19XT05UOgorICAgICAgICBwcmludG9wdGlvbihkYXRhLCAiUkNWRCIsIENVUkxfV09OVCwgYyk7CisgICAgICAgIHRuLT5wbGVhc2VfbmVnb3RpYXRlID0gMTsKKyAgICAgICAgcmVjX3dvbnQoY29ubiwgYyk7CisgICAgICAgIHRuLT50ZWxyY3Zfc3RhdGUgPSBDVVJMX1RTX0RBVEE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIENVUkxfVFNfRE86CisgICAgICAgIHByaW50b3B0aW9uKGRhdGEsICJSQ1ZEIiwgQ1VSTF9ETywgYyk7CisgICAgICAgIHRuLT5wbGVhc2VfbmVnb3RpYXRlID0gMTsKKyAgICAgICAgcmVjX2RvKGNvbm4sIGMpOworICAgICAgICB0bi0+dGVscmN2X3N0YXRlID0gQ1VSTF9UU19EQVRBOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBDVVJMX1RTX0RPTlQ6CisgICAgICAgIHByaW50b3B0aW9uKGRhdGEsICJSQ1ZEIiwgQ1VSTF9ET05ULCBjKTsKKyAgICAgICAgdG4tPnBsZWFzZV9uZWdvdGlhdGUgPSAxOworICAgICAgICByZWNfZG9udChjb25uLCBjKTsKKyAgICAgICAgdG4tPnRlbHJjdl9zdGF0ZSA9IENVUkxfVFNfREFUQTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQ1VSTF9UU19TQjoKKyAgICAgICAgaWYoYyA9PSBDVVJMX0lBQykKKyAgICAgICAgICB0bi0+dGVscmN2X3N0YXRlID0gQ1VSTF9UU19TRTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIENVUkxfU0JfQUNDVU0odG4sYyk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIENVUkxfVFNfU0U6CisgICAgICAgIGlmKGMgIT0gQ1VSTF9TRSkgeworICAgICAgICAgIGlmKGMgIT0gQ1VSTF9JQUMpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGlzIGlzIGFuIGVycm9yLiAgV2Ugb25seSBleHBlY3QgdG8gZ2V0ICJJQUMgSUFDIiBvciAiSUFDIFNFIi4KKyAgICAgICAgICAgICAqIFNldmVyYWwgdGhpbmdzIG1heSBoYXZlIGhhcHBlbmVkLiAgQW4gSUFDIHdhcyBub3QgZG91YmxlZCwgdGhlCisgICAgICAgICAgICAgKiBJQUMgU0Ugd2FzIGxlZnQgb2ZmLCBvciBhbm90aGVyIG9wdGlvbiBnb3QgaW5zZXJ0ZWQgaW50byB0aGUKKyAgICAgICAgICAgICAqIHN1Ym9wdGlvbiBhcmUgYWxsIHBvc3NpYmlsaXRpZXMuICBJZiB3ZSBhc3N1bWUgdGhhdCB0aGUgSUFDIHdhcworICAgICAgICAgICAgICogbm90IGRvdWJsZWQsIGFuZCByZWFsbHkgdGhlIElBQyBTRSB3YXMgbGVmdCBvZmYsIHdlIGNvdWxkIGdldAorICAgICAgICAgICAgICogaW50byBhbiBpbmZpbmF0ZSBsb29wIGhlcmUuICBTbywgaW5zdGVhZCwgd2UgdGVybWluYXRlIHRoZQorICAgICAgICAgICAgICogc3Vib3B0aW9uLCBhbmQgcHJvY2VzcyB0aGUgcGFydGlhbCBzdWJvcHRpb24gaWYgd2UgY2FuLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBDVVJMX1NCX0FDQ1VNKHRuLCBDVVJMX0lBQyk7CisgICAgICAgICAgICBDVVJMX1NCX0FDQ1VNKHRuLCBjKTsKKyAgICAgICAgICAgIHRuLT5zdWJwb2ludGVyIC09IDI7CisgICAgICAgICAgICBDVVJMX1NCX1RFUk0odG4pOworCisgICAgICAgICAgICBwcmludG9wdGlvbihkYXRhLCAiSW4gU1VCT1BUSU9OIHByb2Nlc3NpbmcsIFJDVkQiLCBDVVJMX0lBQywgYyk7CisgICAgICAgICAgICBzdWJvcHRpb24oY29ubik7ICAgLyogaGFuZGxlIHN1Yi1vcHRpb24gKi8KKyAgICAgICAgICAgIHRuLT50ZWxyY3Zfc3RhdGUgPSBDVVJMX1RTX0lBQzsKKyAgICAgICAgICAgIGdvdG8gcHJvY2Vzc19pYWM7CisgICAgICAgICAgfQorICAgICAgICAgIENVUkxfU0JfQUNDVU0odG4sYyk7CisgICAgICAgICAgdG4tPnRlbHJjdl9zdGF0ZSA9IENVUkxfVFNfU0I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgQ1VSTF9TQl9BQ0NVTSh0biwgQ1VSTF9JQUMpOworICAgICAgICAgIENVUkxfU0JfQUNDVU0odG4sIENVUkxfU0UpOworICAgICAgICAgIHRuLT5zdWJwb2ludGVyIC09IDI7CisgICAgICAgICAgQ1VSTF9TQl9URVJNKHRuKTsKKyAgICAgICAgICBzdWJvcHRpb24oY29ubik7ICAgLyogaGFuZGxlIHN1Yi1vcHRpb24gKi8KKyAgICAgICAgICB0bi0+dGVscmN2X3N0YXRlID0gQ1VSTF9UU19EQVRBOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICArK2luOworICB9CisgIGJ1ZmZlcmZsdXNoKCk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyogRXNjYXBlIGFuZCBzZW5kIGEgdGVsbmV0IGRhdGEgYmxvY2sgKi8KKy8qIFRPRE86IHdyaXRlIGxhcmdlIGNodW5rcyBvZiBkYXRhIGluc3RlYWQgb2Ygb25lIGJ5dGUgYXQgYSB0aW1lICovCitzdGF0aWMgQ1VSTGNvZGUgc2VuZF90ZWxuZXRfZGF0YShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNzaXplX3QgbnJlYWQpCit7CisgIHVuc2lnbmVkIGNoYXIgb3V0YnVmWzJdOworICBzc2l6ZV90IGJ5dGVzX3dyaXR0ZW4sIHRvdGFsX3dyaXR0ZW47CisgIGludCBvdXRfY291bnQ7CisgIENVUkxjb2RlIHJjID0gQ1VSTEVfT0s7CisKKyAgd2hpbGUocmMgPT0gQ1VSTEVfT0sgJiYgbnJlYWQtLSkgeworICAgIG91dGJ1ZlswXSA9ICpidWZmZXIrKzsKKyAgICBvdXRfY291bnQgPSAxOworICAgIGlmKG91dGJ1ZlswXSA9PSBDVVJMX0lBQykKKyAgICAgIG91dGJ1ZltvdXRfY291bnQrK10gPSBDVVJMX0lBQzsKKworICAgIHRvdGFsX3dyaXR0ZW4gPSAwOworICAgIGRvIHsKKyAgICAgIC8qIE1ha2Ugc3VyZSBzb2NrZXQgaXMgd3JpdGFibGUgdG8gYXZvaWQgRVdPVUxEQkxPQ0sgY29uZGl0aW9uICovCisgICAgICBzdHJ1Y3QgcG9sbGZkIHBmZFsxXTsKKyAgICAgIHBmZFswXS5mZCA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICAgICAgcGZkWzBdLmV2ZW50cyA9IFBPTExPVVQ7CisgICAgICBzd2l0Y2ggKEN1cmxfcG9sbChwZmQsIDEsIC0xKSkgeworICAgICAgICBjYXNlIC0xOiAgICAgICAgICAgICAgICAgICAgLyogZXJyb3IsIGFib3J0IHdyaXRpbmcgKi8KKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgIC8qIHRpbWVvdXQgKHdpbGwgbmV2ZXIgaGFwcGVuKSAqLworICAgICAgICAgIHJjID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgIC8qIHdyaXRlISAqLworICAgICAgICAgIGJ5dGVzX3dyaXR0ZW4gPSAwOworICAgICAgICAgIHJjID0gQ3VybF93cml0ZShjb25uLCBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSwgb3V0YnVmK3RvdGFsX3dyaXR0ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9jb3VudC10b3RhbF93cml0dGVuLCAmYnl0ZXNfd3JpdHRlbik7CisgICAgICAgICAgdG90YWxfd3JpdHRlbiArPSBieXRlc193cml0dGVuOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIC8qIGhhbmRsZSBwYXJ0aWFsIHdyaXRlICovCisgICAgfSB3aGlsZShyYyA9PSBDVVJMRV9PSyAmJiB0b3RhbF93cml0dGVuIDwgb3V0X2NvdW50KTsKKyAgfQorICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB0ZWxuZXRfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSBzdGF0dXMsIGJvb2wgcHJlbWF0dXJlKQoreworICBzdHJ1Y3QgVEVMTkVUICp0biA9IChzdHJ1Y3QgVEVMTkVUICopY29ubi0+ZGF0YS0+c3RhdGUucHJvdG8udGVsbmV0OworICAodm9pZClzdGF0dXM7IC8qIHVudXNlZCAqLworICAodm9pZClwcmVtYXR1cmU7IC8qIG5vdCB1c2VkICovCisKKyAgaWYoIXRuKQorICAgIHJldHVybiBDVVJMRV9PSzsKKworICBjdXJsX3NsaXN0X2ZyZWVfYWxsKHRuLT50ZWxuZXRfdmFycyk7CisgIHRuLT50ZWxuZXRfdmFycyA9IE5VTEw7CisKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5kYXRhLT5zdGF0ZS5wcm90by50ZWxuZXQpOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIENVUkxjb2RlIHRlbG5ldF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIGNvZGU7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyNpZmRlZiBVU0VfV0lOU09DSworICBITU9EVUxFIHdzb2NrMjsKKyAgV1NPQ0syX0ZVTkMgY2xvc2VfZXZlbnRfZnVuYzsKKyAgV1NPQ0syX0ZVTkMgY3JlYXRlX2V2ZW50X2Z1bmM7CisgIFdTT0NLMl9GVU5DIGV2ZW50X3NlbGVjdF9mdW5jOworICBXU09DSzJfRlVOQyBlbnVtX25ldGV2ZW50c19mdW5jOworICBXU0FFVkVOVCBldmVudF9oYW5kbGU7CisgIFdTQU5FVFdPUktFVkVOVFMgZXZlbnRzOworICBIQU5ETEUgc3RkaW5faGFuZGxlOworICBIQU5ETEUgb2Jqc1syXTsKKyAgRFdPUkQgIG9ial9jb3VudDsKKyAgRFdPUkQgIHdhaXRfdGltZW91dDsKKyAgRFdPUkQgd2FpdHJldDsKKyAgRFdPUkQgcmVhZGZpbGVfcmVhZDsKKyAgaW50IGVycjsKKyNlbHNlCisgIGludCBpbnRlcnZhbF9tczsKKyAgc3RydWN0IHBvbGxmZCBwZmRbMl07CisgIGludCBwb2xsX2NudDsKKyAgY3VybF9vZmZfdCB0b3RhbF9kbCA9IDA7CisgIGN1cmxfb2ZmX3QgdG90YWxfdWwgPSAwOworI2VuZGlmCisgIHNzaXplX3QgbnJlYWQ7CisgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKyAgYm9vbCBrZWVwb24gPSBUUlVFOworICBjaGFyICpidWYgPSBkYXRhLT5zdGF0ZS5idWZmZXI7CisgIHN0cnVjdCBURUxORVQgKnRuOworCisgICpkb25lID0gVFJVRTsgLyogdW5jb25kaXRpb25hbGx5ICovCisKKyAgY29kZSA9IGluaXRfdGVsbmV0KGNvbm4pOworICBpZihjb2RlKQorICAgIHJldHVybiBjb2RlOworCisgIHRuID0gKHN0cnVjdCBURUxORVQgKilkYXRhLT5zdGF0ZS5wcm90by50ZWxuZXQ7CisKKyAgY29kZSA9IGNoZWNrX3RlbG5ldF9vcHRpb25zKGNvbm4pOworICBpZihjb2RlKQorICAgIHJldHVybiBjb2RlOworCisjaWZkZWYgVVNFX1dJTlNPQ0sKKyAgLyoKKyAgKiogVGhpcyBmdW5jdGlvbmFsaXR5IG9ubHkgd29ya3Mgd2l0aCBXaW5Tb2NrID49IDIuMC4gIFNvLAorICAqKiBtYWtlIHN1cmUgaGF2ZSBpdC4KKyAgKi8KKyAgY29kZSA9IGNoZWNrX3dzb2NrMihkYXRhKTsKKyAgaWYoY29kZSkKKyAgICByZXR1cm4gY29kZTsKKworICAvKiBPSywgc28gd2UgaGF2ZSBXaW5Tb2NrIDIuMC4gIFdlIG5lZWQgdG8gZHluYW1pY2FsbHkgKi8KKyAgLyogbG9hZCB3czJfMzIuZGxsIGFuZCBnZXQgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIHdlIG5lZWQuICovCisgIHdzb2NrMiA9IExvYWRMaWJyYXJ5KCJXUzJfMzIuRExMIik7CisgIGlmKHdzb2NrMiA9PSBOVUxMKSB7CisgICAgZmFpbGYoZGF0YSwiZmFpbGVkIHRvIGxvYWQgV1MyXzMyLkRMTCAoJWQpIiwgRVJSTk8pOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorCisgIC8qIEdyYWIgYSBwb2ludGVyIHRvIFdTQUNyZWF0ZUV2ZW50ICovCisgIGNyZWF0ZV9ldmVudF9mdW5jID0gR2V0UHJvY0FkZHJlc3Mod3NvY2syLCJXU0FDcmVhdGVFdmVudCIpOworICBpZihjcmVhdGVfZXZlbnRfZnVuYyA9PSBOVUxMKSB7CisgICAgZmFpbGYoZGF0YSwiZmFpbGVkIHRvIGZpbmQgV1NBQ3JlYXRlRXZlbnQgZnVuY3Rpb24gKCVkKSIsCisgICAgICAgICAgRVJSTk8pOworICAgIEZyZWVMaWJyYXJ5KHdzb2NrMik7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisKKyAgLyogQW5kIFdTQUNsb3NlRXZlbnQgKi8KKyAgY2xvc2VfZXZlbnRfZnVuYyA9IEdldFByb2NBZGRyZXNzKHdzb2NrMiwiV1NBQ2xvc2VFdmVudCIpOworICBpZihjbG9zZV9ldmVudF9mdW5jID09IE5VTEwpIHsKKyAgICBmYWlsZihkYXRhLCJmYWlsZWQgdG8gZmluZCBXU0FDbG9zZUV2ZW50IGZ1bmN0aW9uICglZCkiLAorICAgICAgICAgIEVSUk5PKTsKKyAgICBGcmVlTGlicmFyeSh3c29jazIpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorCisgIC8qIEFuZCBXU0FFdmVudFNlbGVjdCAqLworICBldmVudF9zZWxlY3RfZnVuYyA9IEdldFByb2NBZGRyZXNzKHdzb2NrMiwiV1NBRXZlbnRTZWxlY3QiKTsKKyAgaWYoZXZlbnRfc2VsZWN0X2Z1bmMgPT0gTlVMTCkgeworICAgIGZhaWxmKGRhdGEsImZhaWxlZCB0byBmaW5kIFdTQUV2ZW50U2VsZWN0IGZ1bmN0aW9uICglZCkiLAorICAgICAgICAgIEVSUk5PKTsKKyAgICBGcmVlTGlicmFyeSh3c29jazIpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgfQorCisgIC8qIEFuZCBXU0FFbnVtTmV0d29ya0V2ZW50cyAqLworICBlbnVtX25ldGV2ZW50c19mdW5jID0gR2V0UHJvY0FkZHJlc3Mod3NvY2syLCJXU0FFbnVtTmV0d29ya0V2ZW50cyIpOworICBpZihlbnVtX25ldGV2ZW50c19mdW5jID09IE5VTEwpIHsKKyAgICBmYWlsZihkYXRhLCJmYWlsZWQgdG8gZmluZCBXU0FFbnVtTmV0d29ya0V2ZW50cyBmdW5jdGlvbiAoJWQpIiwKKyAgICAgICAgICBFUlJOTyk7CisgICAgRnJlZUxpYnJhcnkod3NvY2syKTsKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIH0KKworICAvKiBXZSB3YW50IHRvIHdhaXQgZm9yIGJvdGggc3RkaW4gYW5kIHRoZSBzb2NrZXQuIFNpbmNlCisgICoqIHRoZSBzZWxlY3QoKSBmdW5jdGlvbiBpbiB3aW5zb2NrIG9ubHkgd29ya3Mgb24gc29ja2V0cworICAqKiB3ZSBoYXZlIHRvIHVzZSB0aGUgV2FpdEZvck11bHRpcGxlT2JqZWN0cygpIGNhbGwuCisgICovCisKKyAgLyogRmlyc3QsIGNyZWF0ZSBhIHNvY2tldHMgZXZlbnQgb2JqZWN0ICovCisgIGV2ZW50X2hhbmRsZSA9IChXU0FFVkVOVCljcmVhdGVfZXZlbnRfZnVuYygpOworICBpZihldmVudF9oYW5kbGUgPT0gV1NBX0lOVkFMSURfRVZFTlQpIHsKKyAgICBmYWlsZihkYXRhLCJXU0FDcmVhdGVFdmVudCBmYWlsZWQgKCVkKSIsIFNPQ0tFUlJOTyk7CisgICAgRnJlZUxpYnJhcnkod3NvY2syKTsKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIH0KKworICAvKiBUZWxsIHdpbnNvY2sgd2hhdCBldmVudHMgd2Ugd2FudCB0byBsaXN0ZW4gdG8gKi8KKyAgaWYoZXZlbnRfc2VsZWN0X2Z1bmMoc29ja2ZkLCBldmVudF9oYW5kbGUsIEZEX1JFQUR8RkRfQ0xPU0UpID09CisgICAgIFNPQ0tFVF9FUlJPUikgeworICAgIGNsb3NlX2V2ZW50X2Z1bmMoZXZlbnRfaGFuZGxlKTsKKyAgICBGcmVlTGlicmFyeSh3c29jazIpOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorCisgIC8qIFRoZSBnZXQgdGhlIFdpbmRvd3MgZmlsZSBoYW5kbGUgZm9yIHN0ZGluICovCisgIHN0ZGluX2hhbmRsZSA9IEdldFN0ZEhhbmRsZShTVERfSU5QVVRfSEFORExFKTsKKworICAvKiBDcmVhdGUgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byB3YWl0IGZvciAqLworICBvYmpzWzBdID0gZXZlbnRfaGFuZGxlOworICBvYmpzWzFdID0gc3RkaW5faGFuZGxlOworCisgIC8qIElmIHN0ZGluX2hhbmRsZSBpcyBhIHBpcGUsIHVzZSBQZWVrTmFtZWRQaXBlKCkgbWV0aG9kIHRvIGNoZWNrIGl0LAorICAgICBlbHNlIHVzZSB0aGUgb2xkIFdhaXRGb3JNdWx0aXBsZU9iamVjdHMoKSB3YXkgKi8KKyAgaWYoR2V0RmlsZVR5cGUoc3RkaW5faGFuZGxlKSA9PSBGSUxFX1RZUEVfUElQRSB8fAorICAgICBkYXRhLT5zZXQuaXNfZnJlYWRfc2V0KSB7CisgICAgLyogRG9uJ3Qgd2FpdCBmb3Igc3RkaW5faGFuZGxlLCBqdXN0IHdhaXQgZm9yIGV2ZW50X2hhbmRsZSAqLworICAgIG9ial9jb3VudCA9IDE7CisgICAgLyogQ2hlY2sgc3RkaW5faGFuZGxlIHBlciAxMDAgbWlsbGlzZWNvbmRzICovCisgICAgd2FpdF90aW1lb3V0ID0gMTAwOworICB9CisgIGVsc2UgeworICAgIG9ial9jb3VudCA9IDI7CisgICAgd2FpdF90aW1lb3V0ID0gMTAwMDsKKyAgfQorCisgIC8qIEtlZXAgb24gbGlzdGVuaW5nIGFuZCBhY3Qgb24gZXZlbnRzICovCisgIHdoaWxlKGtlZXBvbikgeworICAgIHdhaXRyZXQgPSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKG9ial9jb3VudCwgb2JqcywgRkFMU0UsIHdhaXRfdGltZW91dCk7CisgICAgc3dpdGNoKHdhaXRyZXQpIHsKKyAgICBjYXNlIFdBSVRfVElNRU9VVDoKKyAgICB7CisgICAgICBmb3IoOzspIHsKKyAgICAgICAgaWYob2JqX2NvdW50ID09IDEpIHsKKyAgICAgICAgICAvKiByZWFkIGZyb20gdXNlci1zdXBwbGllZCBtZXRob2QgKi8KKyAgICAgICAgICBjb2RlID0gKGludCljb25uLT5mcmVhZF9mdW5jKGJ1ZiwgMSwgQlVGU0laRSAtIDEsIGNvbm4tPmZyZWFkX2luKTsKKyAgICAgICAgICBpZihjb2RlID09IENVUkxfUkVBREZVTkNfQUJPUlQpIHsKKyAgICAgICAgICAgIGtlZXBvbiA9IEZBTFNFOworICAgICAgICAgICAgY29kZSA9IENVUkxFX1JFQURfRVJST1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZihjb2RlID09IENVUkxfUkVBREZVTkNfUEFVU0UpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGlmKGNvZGUgPT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBieXRlcyAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICByZWFkZmlsZV9yZWFkID0gY29kZTsgLyogZmFsbCB0aHJ1IHdpdGggbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiByZWFkIGZyb20gc3RkaW4gKi8KKyAgICAgICAgICBpZighUGVla05hbWVkUGlwZShzdGRpbl9oYW5kbGUsIE5VTEwsIDAsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlYWRmaWxlX3JlYWQsIE5VTEwpKSB7CisgICAgICAgICAgICBrZWVwb24gPSBGQUxTRTsKKyAgICAgICAgICAgIGNvZGUgPSBDVVJMRV9SRUFEX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYoIXJlYWRmaWxlX3JlYWQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGlmKCFSZWFkRmlsZShzdGRpbl9oYW5kbGUsIGJ1Ziwgc2l6ZW9mKGRhdGEtPnN0YXRlLmJ1ZmZlciksCisgICAgICAgICAgICAgICAgICAgICAgICZyZWFkZmlsZV9yZWFkLCBOVUxMKSkgeworICAgICAgICAgICAga2VlcG9uID0gRkFMU0U7CisgICAgICAgICAgICBjb2RlID0gQ1VSTEVfUkVBRF9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvZGUgPSBzZW5kX3RlbG5ldF9kYXRhKGNvbm4sIGJ1ZiwgcmVhZGZpbGVfcmVhZCk7CisgICAgICAgIGlmKGNvZGUpIHsKKyAgICAgICAgICBrZWVwb24gPSBGQUxTRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICAgIGNhc2UgV0FJVF9PQkpFQ1RfMCArIDE6CisgICAgeworICAgICAgaWYoIVJlYWRGaWxlKHN0ZGluX2hhbmRsZSwgYnVmLCBzaXplb2YoZGF0YS0+c3RhdGUuYnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgICAmcmVhZGZpbGVfcmVhZCwgTlVMTCkpIHsKKyAgICAgICAga2VlcG9uID0gRkFMU0U7CisgICAgICAgIGNvZGUgPSBDVVJMRV9SRUFEX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY29kZSA9IHNlbmRfdGVsbmV0X2RhdGEoY29ubiwgYnVmLCByZWFkZmlsZV9yZWFkKTsKKyAgICAgIGlmKGNvZGUpIHsKKyAgICAgICAga2VlcG9uID0gRkFMU0U7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICAgIGNhc2UgV0FJVF9PQkpFQ1RfMDoKKworICAgICAgaWYoU09DS0VUX0VSUk9SID09IGVudW1fbmV0ZXZlbnRzX2Z1bmMoc29ja2ZkLCBldmVudF9oYW5kbGUsICZldmVudHMpKSB7CisgICAgICAgIGlmKChlcnIgPSBTT0NLRVJSTk8pICE9IEVJTlBST0dSRVNTKSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwiV1NBRW51bU5ldHdvcmtFdmVudHMgZmFpbGVkICglZCkiLCBlcnIpOworICAgICAgICAgIGtlZXBvbiA9IEZBTFNFOworICAgICAgICAgIGNvZGUgPSBDVVJMRV9SRUFEX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYoZXZlbnRzLmxOZXR3b3JrRXZlbnRzICYgRkRfUkVBRCkgeworICAgICAgICAvKiByZWFkIGRhdGEgZnJvbSBuZXR3b3JrICovCisgICAgICAgIGNvZGUgPSBDdXJsX3JlYWQoY29ubiwgc29ja2ZkLCBidWYsIEJVRlNJWkUgLSAxLCAmbnJlYWQpOworICAgICAgICAvKiByZWFkIHdvdWxkJ3ZlIGJsb2NrZWQuIExvb3AgYWdhaW4gKi8KKyAgICAgICAgaWYoY29kZSA9PSBDVVJMRV9BR0FJTikKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgLyogcmV0dXJuZWQgbm90LXplcm8sIHRoaXMgYW4gZXJyb3IgKi8KKyAgICAgICAgZWxzZSBpZihjb2RlKSB7CisgICAgICAgICAga2VlcG9uID0gRkFMU0U7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyogcmV0dXJuZWQgemVybyBidXQgYWN0dWFsbHkgcmVjZWl2ZWQgMCBvciBsZXNzIGhlcmUsCisgICAgICAgICAgIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIGFuZCB3ZSBiYWlsIG91dCAqLworICAgICAgICBlbHNlIGlmKG5yZWFkIDw9IDApIHsKKyAgICAgICAgICBrZWVwb24gPSBGQUxTRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNvZGUgPSB0ZWxyY3YoY29ubiwgKHVuc2lnbmVkIGNoYXIgKilidWYsIG5yZWFkKTsKKyAgICAgICAgaWYoY29kZSkgeworICAgICAgICAgIGtlZXBvbiA9IEZBTFNFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogTmVnb3RpYXRlIGlmIHRoZSBwZWVyIGhhcyBzdGFydGVkIG5lZ290aWF0aW5nLAorICAgICAgICAgICBvdGhlcndpc2UgZG9uJ3QuIFdlIGRvbid0IHdhbnQgdG8gc3BlYWsgdGVsbmV0IHdpdGgKKyAgICAgICAgICAgbm9uLXRlbG5ldCBzZXJ2ZXJzLCBsaWtlIFBPUCBvciBTTVRQLiAqLworICAgICAgICBpZih0bi0+cGxlYXNlX25lZ290aWF0ZSAmJiAhdG4tPmFscmVhZHlfbmVnb3RpYXRlZCkgeworICAgICAgICAgIG5lZ290aWF0ZShjb25uKTsKKyAgICAgICAgICB0bi0+YWxyZWFkeV9uZWdvdGlhdGVkID0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYoZXZlbnRzLmxOZXR3b3JrRXZlbnRzICYgRkRfQ0xPU0UpIHsKKyAgICAgICAga2VlcG9uID0gRkFMU0U7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIH0KKworICAgIGlmKGRhdGEtPnNldC50aW1lb3V0KSB7CisgICAgICBub3cgPSBDdXJsX3R2bm93KCk7CisgICAgICBpZihDdXJsX3R2ZGlmZihub3csIGNvbm4tPmNyZWF0ZWQpID49IGRhdGEtPnNldC50aW1lb3V0KSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJUaW1lLW91dCIpOworICAgICAgICBjb2RlID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgICAgICBrZWVwb24gPSBGQUxTRTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvKiBXZSBjYWxsZWQgV1NBQ3JlYXRlRXZlbnQsIHNvIGNhbGwgV1NBQ2xvc2VFdmVudCAqLworICBpZighY2xvc2VfZXZlbnRfZnVuYyhldmVudF9oYW5kbGUpKSB7CisgICAgaW5mb2YoZGF0YSwiV1NBQ2xvc2VFdmVudCBmYWlsZWQgKCVkKSIsIFNPQ0tFUlJOTyk7CisgIH0KKworICAvKiAiRm9yZ2V0IiBwb2ludGVycyBpbnRvIHRoZSBsaWJyYXJ5IHdlJ3JlIGFib3V0IHRvIGZyZWUgKi8KKyAgY3JlYXRlX2V2ZW50X2Z1bmMgPSBOVUxMOworICBjbG9zZV9ldmVudF9mdW5jID0gTlVMTDsKKyAgZXZlbnRfc2VsZWN0X2Z1bmMgPSBOVUxMOworICBlbnVtX25ldGV2ZW50c19mdW5jID0gTlVMTDsKKworICAvKiBXZSBjYWxsZWQgTG9hZExpYnJhcnksIHNvIGNhbGwgRnJlZUxpYnJhcnkgKi8KKyAgaWYoIUZyZWVMaWJyYXJ5KHdzb2NrMikpCisgICAgaW5mb2YoZGF0YSwiRnJlZUxpYnJhcnkod3NvY2syKSBmYWlsZWQgKCVkKSIsIEVSUk5PKTsKKyNlbHNlCisgIHBmZFswXS5mZCA9IHNvY2tmZDsKKyAgcGZkWzBdLmV2ZW50cyA9IFBPTExJTjsKKworICBpZihjb25uLT5mcmVhZF9mdW5jICE9IChjdXJsX3JlYWRfY2FsbGJhY2spZnJlYWQpIHsKKyAgICBwb2xsX2NudCA9IDE7CisgICAgaW50ZXJ2YWxfbXMgPSAxMDA7IC8qIHBvbGwgdXNlci1zdXBwbGllZCByZWFkIGZ1bmN0aW9uICovCisgIH0KKyAgZWxzZSB7CisgICAgLyogcmVhbGx5IHVzaW5nIGZyZWFkLCBzbyBpbmZpbGUgaXMgYSBGSUxFKiAqLworICAgIHBmZFsxXS5mZCA9IGZpbGVubygoRklMRSAqKWNvbm4tPmZyZWFkX2luKTsKKyAgICBwZmRbMV0uZXZlbnRzID0gUE9MTElOOworICAgIHBvbGxfY250ID0gMjsKKyAgICBpbnRlcnZhbF9tcyA9IDEgKiAxMDAwOworICB9CisKKyAgd2hpbGUoa2VlcG9uKSB7CisgICAgc3dpdGNoIChDdXJsX3BvbGwocGZkLCBwb2xsX2NudCwgaW50ZXJ2YWxfbXMpKSB7CisgICAgY2FzZSAtMTogICAgICAgICAgICAgICAgICAgIC8qIGVycm9yLCBzdG9wIHJlYWRpbmcgKi8KKyAgICAgIGtlZXBvbiA9IEZBTFNFOworICAgICAgY29udGludWU7CisgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgIC8qIHRpbWVvdXQgKi8KKyAgICAgIHBmZFswXS5yZXZlbnRzID0gMDsKKyAgICAgIHBmZFsxXS5yZXZlbnRzID0gMDsKKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAvKiByZWFkISAqLworICAgICAgaWYocGZkWzBdLnJldmVudHMgJiBQT0xMSU4pIHsKKyAgICAgICAgLyogcmVhZCBkYXRhIGZyb20gbmV0d29yayAqLworICAgICAgICBjb2RlID0gQ3VybF9yZWFkKGNvbm4sIHNvY2tmZCwgYnVmLCBCVUZTSVpFIC0gMSwgJm5yZWFkKTsKKyAgICAgICAgLyogcmVhZCB3b3VsZCd2ZSBibG9ja2VkLiBMb29wIGFnYWluICovCisgICAgICAgIGlmKGNvZGUgPT0gQ1VSTEVfQUdBSU4pCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qIHJldHVybmVkIG5vdC16ZXJvLCB0aGlzIGFuIGVycm9yICovCisgICAgICAgIGVsc2UgaWYoY29kZSkgeworICAgICAgICAgIGtlZXBvbiA9IEZBTFNFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8qIHJldHVybmVkIHplcm8gYnV0IGFjdHVhbGx5IHJlY2VpdmVkIDAgb3IgbGVzcyBoZXJlLAorICAgICAgICAgICB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiBhbmQgd2UgYmFpbCBvdXQgKi8KKyAgICAgICAgZWxzZSBpZihucmVhZCA8PSAwKSB7CisgICAgICAgICAga2VlcG9uID0gRkFMU0U7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICB0b3RhbF9kbCArPSBucmVhZDsKKyAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRDb3VudGVyKGRhdGEsIHRvdGFsX2RsKTsKKyAgICAgICAgY29kZSA9IHRlbHJjdihjb25uLCAodW5zaWduZWQgY2hhciAqKWJ1ZiwgbnJlYWQpOworICAgICAgICBpZihjb2RlKSB7CisgICAgICAgICAga2VlcG9uID0gRkFMU0U7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBOZWdvdGlhdGUgaWYgdGhlIHBlZXIgaGFzIHN0YXJ0ZWQgbmVnb3RpYXRpbmcsCisgICAgICAgICAgIG90aGVyd2lzZSBkb24ndC4gV2UgZG9uJ3Qgd2FudCB0byBzcGVhayB0ZWxuZXQgd2l0aAorICAgICAgICAgICBub24tdGVsbmV0IHNlcnZlcnMsIGxpa2UgUE9QIG9yIFNNVFAuICovCisgICAgICAgIGlmKHRuLT5wbGVhc2VfbmVnb3RpYXRlICYmICF0bi0+YWxyZWFkeV9uZWdvdGlhdGVkKSB7CisgICAgICAgICAgbmVnb3RpYXRlKGNvbm4pOworICAgICAgICAgIHRuLT5hbHJlYWR5X25lZ290aWF0ZWQgPSAxOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIG5yZWFkID0gMDsKKyAgICAgIGlmKHBvbGxfY250ID09IDIpIHsKKyAgICAgICAgaWYocGZkWzFdLnJldmVudHMgJiBQT0xMSU4pIHsgLyogcmVhZCBmcm9tIGluIGZpbGUgKi8KKyAgICAgICAgICBucmVhZCA9IHJlYWQocGZkWzFdLmZkLCBidWYsIEJVRlNJWkUgLSAxKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIHJlYWQgZnJvbSB1c2VyLXN1cHBsaWVkIG1ldGhvZCAqLworICAgICAgICBucmVhZCA9IChpbnQpY29ubi0+ZnJlYWRfZnVuYyhidWYsIDEsIEJVRlNJWkUgLSAxLCBjb25uLT5mcmVhZF9pbik7CisgICAgICAgIGlmKG5yZWFkID09IENVUkxfUkVBREZVTkNfQUJPUlQpIHsKKyAgICAgICAgICBrZWVwb24gPSBGQUxTRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihucmVhZCA9PSBDVVJMX1JFQURGVU5DX1BBVVNFKQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZihucmVhZCA+IDApIHsKKyAgICAgICAgY29kZSA9IHNlbmRfdGVsbmV0X2RhdGEoY29ubiwgYnVmLCBucmVhZCk7CisgICAgICAgIGlmKGNvZGUpIHsKKyAgICAgICAgICBrZWVwb24gPSBGQUxTRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB0b3RhbF91bCArPSBucmVhZDsKKyAgICAgICAgQ3VybF9wZ3JzU2V0VXBsb2FkQ291bnRlcihkYXRhLCB0b3RhbF91bCk7CisgICAgICB9CisgICAgICBlbHNlIGlmKG5yZWFkIDwgMCkKKyAgICAgICAga2VlcG9uID0gRkFMU0U7CisKKyAgICAgIGJyZWFrOworICAgIH0gLyogcG9sbCBzd2l0Y2ggc3RhdGVtZW50ICovCisKKyAgICBpZihkYXRhLT5zZXQudGltZW91dCkgeworICAgICAgbm93ID0gQ3VybF90dm5vdygpOworICAgICAgaWYoQ3VybF90dmRpZmYobm93LCBjb25uLT5jcmVhdGVkKSA+PSBkYXRhLT5zZXQudGltZW91dCkgeworICAgICAgICBmYWlsZihkYXRhLCAiVGltZS1vdXQiKTsKKyAgICAgICAgY29kZSA9IENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgICAga2VlcG9uID0gRkFMU0U7CisgICAgICB9CisgICAgfQorCisgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKSB7CisgICAgICBjb2RlID0gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorI2VuZGlmCisgIC8qIG1hcmsgdGhpcyBhcyAibm8gZnVydGhlciB0cmFuc2ZlciB3YW50ZWQiICovCisgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgLTEsIC0xLCBGQUxTRSwgTlVMTCwgLTEsIE5VTEwpOworCisgIHJldHVybiBjb2RlOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvdGVsbmV0LmggYi9jdXJsLTcuMjUuMC9saWIvdGVsbmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwZjdmZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi90ZWxuZXQuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9fVEVMTkVUX0gKKyNkZWZpbmUgX19URUxORVRfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1RFTE5FVAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX3RlbG5ldDsKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvdGZ0cC5jIGIvY3VybC03LjI1LjAvbGliL3RmdHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTQwNGRlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3RmdHAuYwpAQCAtMCwwICsxLDE0OTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfVEZUUAorCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInRyYW5zZmVyLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJ0ZnRwLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic3RyZXJyb3IuaCIKKyNpbmNsdWRlICJzb2NrYWRkci5oIiAvKiByZXF1aXJlZCBmb3IgQ3VybF9zb2NrYWRkcl9zdG9yYWdlICovCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgInJhd3N0ci5oIgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogdXNlIG91ciBmdW5jdGlvbnMgb25seSAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJzZWxlY3QuaCIKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogUkZDMjM0OCBhbGxvd3MgdGhlIGJsb2NrIHNpemUgdG8gYmUgbmVnb3RpYXRlZCAqLworI2RlZmluZSBURlRQX0JMS1NJWkVfREVGQVVMVCA1MTIKKyNkZWZpbmUgVEZUUF9CTEtTSVpFX01JTiA4CisjZGVmaW5lIFRGVFBfQkxLU0laRV9NQVggNjU0NjQKKyNkZWZpbmUgVEZUUF9PUFRJT05fQkxLU0laRSAiYmxrc2l6ZSIKKworLyogZnJvbSBSRkMyMzQ5OiAqLworI2RlZmluZSBURlRQX09QVElPTl9UU0laRSAgICAidHNpemUiCisjZGVmaW5lIFRGVFBfT1BUSU9OX0lOVEVSVkFMICJ0aW1lb3V0IgorCit0eXBlZGVmIGVudW0geworICBURlRQX01PREVfTkVUQVNDSUk9MCwKKyAgVEZUUF9NT0RFX09DVEVUCit9IHRmdHBfbW9kZV90OworCit0eXBlZGVmIGVudW0geworICBURlRQX1NUQVRFX1NUQVJUPTAsCisgIFRGVFBfU1RBVEVfUlgsCisgIFRGVFBfU1RBVEVfVFgsCisgIFRGVFBfU1RBVEVfRklOCit9IHRmdHBfc3RhdGVfdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgVEZUUF9FVkVOVF9OT05FID0gLTEsCisgIFRGVFBfRVZFTlRfSU5JVCA9IDAsCisgIFRGVFBfRVZFTlRfUlJRID0gMSwKKyAgVEZUUF9FVkVOVF9XUlEgPSAyLAorICBURlRQX0VWRU5UX0RBVEEgPSAzLAorICBURlRQX0VWRU5UX0FDSyA9IDQsCisgIFRGVFBfRVZFTlRfRVJST1IgPSA1LAorICBURlRQX0VWRU5UX09BQ0sgPSA2LAorICBURlRQX0VWRU5UX1RJTUVPVVQKK30gdGZ0cF9ldmVudF90OworCit0eXBlZGVmIGVudW0geworICBURlRQX0VSUl9VTkRFRj0wLAorICBURlRQX0VSUl9OT1RGT1VORCwKKyAgVEZUUF9FUlJfUEVSTSwKKyAgVEZUUF9FUlJfRElTS0ZVTEwsCisgIFRGVFBfRVJSX0lMTEVHQUwsCisgIFRGVFBfRVJSX1VOS05PV05JRCwKKyAgVEZUUF9FUlJfRVhJU1RTLAorICBURlRQX0VSUl9OT1NVQ0hVU0VSLCAgLyogVGhpcyB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZCBieSB0aGlzIGNvZGUgKi8KKworICAvKiBUaGUgcmVtYWluaW5nIGVycm9yIGNvZGVzIGFyZSBpbnRlcm5hbCB0byBjdXJsICovCisgIFRGVFBfRVJSX05PTkUgPSAtMTAwLAorICBURlRQX0VSUl9USU1FT1VULAorICBURlRQX0VSUl9OT1JFU1BPTlNFCit9IHRmdHBfZXJyb3JfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdGZ0cF9wYWNrZXQgeworICB1bnNpZ25lZCBjaGFyICpkYXRhOworfSB0ZnRwX3BhY2tldF90OworCit0eXBlZGVmIHN0cnVjdCB0ZnRwX3N0YXRlX2RhdGEgeworICB0ZnRwX3N0YXRlX3QgICAgc3RhdGU7CisgIHRmdHBfbW9kZV90ICAgICBtb2RlOworICB0ZnRwX2Vycm9yX3QgICAgZXJyb3I7CisgIHRmdHBfZXZlbnRfdCAgICBldmVudDsKKyAgc3RydWN0IGNvbm5lY3RkYXRhICAgICAgKmNvbm47CisgIGN1cmxfc29ja2V0X3QgICBzb2NrZmQ7CisgIGludCAgICAgICAgICAgICByZXRyaWVzOworICBpbnQgICAgICAgICAgICAgcmV0cnlfdGltZTsKKyAgaW50ICAgICAgICAgICAgIHJldHJ5X21heDsKKyAgdGltZV90ICAgICAgICAgIHN0YXJ0X3RpbWU7CisgIHRpbWVfdCAgICAgICAgICBtYXhfdGltZTsKKyAgdGltZV90ICAgICAgICAgIHJ4X3RpbWU7CisgIHVuc2lnbmVkIHNob3J0ICBibG9jazsKKyAgc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSAgIGxvY2FsX2FkZHI7CisgIHN0cnVjdCBDdXJsX3NvY2thZGRyX3N0b3JhZ2UgICByZW1vdGVfYWRkcjsKKyAgY3VybF9zb2NrbGVuX3QgIHJlbW90ZV9hZGRybGVuOworICBpbnQgICAgICAgICAgICAgcmJ5dGVzOworICBpbnQgICAgICAgICAgICAgc2J5dGVzOworICBpbnQgICAgICAgICAgICAgYmxrc2l6ZTsKKyAgaW50ICAgICAgICAgICAgIHJlcXVlc3RlZF9ibGtzaXplOworICB0ZnRwX3BhY2tldF90ICAgcnBhY2tldDsKKyAgdGZ0cF9wYWNrZXRfdCAgIHNwYWNrZXQ7Cit9IHRmdHBfc3RhdGVfZGF0YV90OworCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9yeCh0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUsIHRmdHBfZXZlbnRfdCBldmVudCkgOworc3RhdGljIENVUkxjb2RlIHRmdHBfdHgodGZ0cF9zdGF0ZV9kYXRhX3QgKnN0YXRlLCB0ZnRwX2V2ZW50X3QgZXZlbnQpIDsKK3N0YXRpYyBDVVJMY29kZSB0ZnRwX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK3N0YXRpYyBDVVJMY29kZSB0ZnRwX2Rpc2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlYWRfY29ubmVjdGlvbik7CitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpOworc3RhdGljIENVUkxjb2RlIHRmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlLCBib29sIHByZW1hdHVyZSk7CitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZXR1cF9jb25uZWN0aW9uKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4pOworc3RhdGljIENVUkxjb2RlIHRmdHBfbXVsdGlfc3RhdGVtYWNoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSk7CitzdGF0aWMgaW50IHRmdHBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKK3N0YXRpYyBDVVJMY29kZSB0ZnRwX3RyYW5zbGF0ZV9jb2RlKHRmdHBfZXJyb3JfdCBlcnJvcik7CisKKworLyoKKyAqIFRGVFAgcHJvdG9jb2wgaGFuZGxlci4KKyAqLworCitjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyIEN1cmxfaGFuZGxlcl90ZnRwID0geworICAiVEZUUCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICB0ZnRwX3NldHVwX2Nvbm5lY3Rpb24sICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgdGZ0cF9kbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICB0ZnRwX2RvbmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIHRmdHBfY29ubmVjdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICB0ZnRwX211bHRpX3N0YXRlbWFjaCwgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgdGZ0cF9kb2luZywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICB0ZnRwX2dldHNvY2ssICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgdGZ0cF9nZXRzb2NrLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgdGZ0cF9kaXNjb25uZWN0LCAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIFBPUlRfVEZUUCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICBDVVJMUFJPVE9fVEZUUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfTk9ORSB8IFBST1RPUFRfTk9VUkxRVUVSWSAgICAgLyogZmxhZ3MgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGZ0cF9zZXRfdGltZW91dHMgLQorICoKKyAqIFNldCB0aW1lb3V0cyBiYXNlZCBvbiBzdGF0ZSBtYWNoaW5lIHN0YXRlLgorICogVXNlIHVzZXIgcHJvdmlkZWQgY29ubmVjdCB0aW1lb3V0cyB1bnRpbCBEQVRBIG9yIEFDSworICogcGFja2V0IGlzIHJlY2VpdmVkLCB0aGVuIHVzZSB1c2VyLXByb3ZpZGVkIHRyYW5zZmVyIHRpbWVvdXRzCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIENVUkxjb2RlIHRmdHBfc2V0X3RpbWVvdXRzKHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSkKK3sKKyAgdGltZV90IG1heHRpbWUsIHRpbWVvdXQ7CisgIGxvbmcgdGltZW91dF9tczsKKyAgYm9vbCBzdGFydCA9IChzdGF0ZS0+c3RhdGUgPT0gVEZUUF9TVEFURV9TVEFSVCkgPyBUUlVFIDogRkFMU0U7CisKKyAgdGltZSgmc3RhdGUtPnN0YXJ0X3RpbWUpOworCisgIC8qIENvbXB1dGUgZHJvcC1kZWFkIHRpbWUgKi8KKyAgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoc3RhdGUtPmNvbm4tPmRhdGEsIE5VTEwsIHN0YXJ0KTsKKworICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgIC8qIHRpbWUtb3V0LCBiYWlsIG91dCwgZ28gaG9tZSAqLworICAgIGZhaWxmKHN0YXRlLT5jb25uLT5kYXRhLCAiQ29ubmVjdGlvbiB0aW1lLW91dCIpOworICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgIH0KKworICBpZihzdGFydCkgeworCisgICAgbWF4dGltZSA9ICh0aW1lX3QpKHRpbWVvdXRfbXMgKyA1MDApIC8gMTAwMDsKKyAgICBzdGF0ZS0+bWF4X3RpbWUgPSBzdGF0ZS0+c3RhcnRfdGltZSttYXh0aW1lOworCisgICAgLyogU2V0IHBlci1ibG9jayB0aW1lb3V0IHRvIHRvdGFsICovCisgICAgdGltZW91dCA9IG1heHRpbWUgOworCisgICAgLyogQXZlcmFnZSByZXN0YXJ0IGFmdGVyIDUgc2Vjb25kcyAqLworICAgIHN0YXRlLT5yZXRyeV9tYXggPSAoaW50KXRpbWVvdXQvNTsKKworICAgIGlmKHN0YXRlLT5yZXRyeV9tYXggPCAxKQorICAgICAgLyogYXZvaWQgZGl2aXNpb24gYnkgemVybyBiZWxvdyAqLworICAgICAgc3RhdGUtPnJldHJ5X21heCA9IDE7CisKKyAgICAvKiBDb21wdXRlIHRoZSByZS1zdGFydCBpbnRlcnZhbCB0byBzdWl0IHRoZSB0aW1lb3V0ICovCisgICAgc3RhdGUtPnJldHJ5X3RpbWUgPSAoaW50KXRpbWVvdXQvc3RhdGUtPnJldHJ5X21heDsKKyAgICBpZihzdGF0ZS0+cmV0cnlfdGltZTwxKQorICAgICAgc3RhdGUtPnJldHJ5X3RpbWU9MTsKKworICB9CisgIGVsc2UgeworICAgIGlmKHRpbWVvdXRfbXMgPiAwKQorICAgICAgbWF4dGltZSA9ICh0aW1lX3QpKHRpbWVvdXRfbXMgKyA1MDApIC8gMTAwMDsKKyAgICBlbHNlCisgICAgICBtYXh0aW1lID0gMzYwMDsKKworICAgIHN0YXRlLT5tYXhfdGltZSA9IHN0YXRlLT5zdGFydF90aW1lK21heHRpbWU7CisKKyAgICAvKiBTZXQgcGVyLWJsb2NrIHRpbWVvdXQgdG8gdG90YWwgKi8KKyAgICB0aW1lb3V0ID0gbWF4dGltZTsKKworICAgIC8qIEF2ZXJhZ2UgcmVwb3N0aW5nIGFuIEFDSyBhZnRlciA1IHNlY29uZHMgKi8KKyAgICBzdGF0ZS0+cmV0cnlfbWF4ID0gKGludCl0aW1lb3V0LzU7CisgIH0KKyAgLyogQnV0IGJvdW5kIHRoZSB0b3RhbCBudW1iZXIgKi8KKyAgaWYoc3RhdGUtPnJldHJ5X21heDwzKQorICAgIHN0YXRlLT5yZXRyeV9tYXg9MzsKKworICBpZihzdGF0ZS0+cmV0cnlfbWF4PjUwKQorICAgIHN0YXRlLT5yZXRyeV9tYXg9NTA7CisKKyAgLyogQ29tcHV0ZSB0aGUgcmUtQUNLIGludGVydmFsIHRvIHN1aXQgdGhlIHRpbWVvdXQgKi8KKyAgc3RhdGUtPnJldHJ5X3RpbWUgPSAoaW50KSh0aW1lb3V0L3N0YXRlLT5yZXRyeV9tYXgpOworICBpZihzdGF0ZS0+cmV0cnlfdGltZTwxKQorICAgIHN0YXRlLT5yZXRyeV90aW1lPTE7CisKKyAgaW5mb2Yoc3RhdGUtPmNvbm4tPmRhdGEsCisgICAgICAgICJzZXQgdGltZW91dHMgZm9yIHN0YXRlICVkOyBUb3RhbCAlbGQsIHJldHJ5ICVkIG1heHRyeSAlZFxuIiwKKyAgICAgICAgKGludClzdGF0ZS0+c3RhdGUsIChsb25nKShzdGF0ZS0+bWF4X3RpbWUtc3RhdGUtPnN0YXJ0X3RpbWUpLAorICAgICAgICBzdGF0ZS0+cmV0cnlfdGltZSwgc3RhdGUtPnJldHJ5X21heCk7CisKKyAgLyogaW5pdCBSWCB0aW1lICovCisgIHRpbWUoJnN0YXRlLT5yeF90aW1lKTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGZ0cF9zZXRfc2VuZF9maXJzdAorICoKKyAqIEV2ZW50IGhhbmRsZXIgZm9yIHRoZSBTVEFSVCBzdGF0ZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBzZXRwYWNrZXRldmVudCh0ZnRwX3BhY2tldF90ICpwYWNrZXQsIHVuc2lnbmVkIHNob3J0IG51bSkKK3sKKyAgcGFja2V0LT5kYXRhWzBdID0gKHVuc2lnbmVkIGNoYXIpKG51bSA+PiA4KTsKKyAgcGFja2V0LT5kYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKG51bSAmIDB4ZmYpOworfQorCisKK3N0YXRpYyB2b2lkIHNldHBhY2tldGJsb2NrKHRmdHBfcGFja2V0X3QgKnBhY2tldCwgdW5zaWduZWQgc2hvcnQgbnVtKQoreworICBwYWNrZXQtPmRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikobnVtID4+IDgpOworICBwYWNrZXQtPmRhdGFbM10gPSAodW5zaWduZWQgY2hhcikobnVtICYgMHhmZik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZXRycGFja2V0ZXZlbnQoY29uc3QgdGZ0cF9wYWNrZXRfdCAqcGFja2V0KQoreworICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KSgocGFja2V0LT5kYXRhWzBdIDw8IDgpIHwgcGFja2V0LT5kYXRhWzFdKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldHJwYWNrZXRibG9jayhjb25zdCB0ZnRwX3BhY2tldF90ICpwYWNrZXQpCit7CisgIHJldHVybiAodW5zaWduZWQgc2hvcnQpKChwYWNrZXQtPmRhdGFbMl0gPDwgOCkgfCBwYWNrZXQtPmRhdGFbM10pOworfQorCitzdGF0aWMgc2l6ZV90IEN1cmxfc3Rybmxlbihjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBtYXhsZW4pCit7CisgIGNvbnN0IGNoYXIgKmVuZCA9IG1lbWNociAoc3RyaW5nLCAnXDAnLCBtYXhsZW4pOworICByZXR1cm4gZW5kID8gKHNpemVfdCkgKGVuZCAtIHN0cmluZykgOiBtYXhsZW47Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp0ZnRwX29wdGlvbl9nZXQoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqb3B0aW9uLCBjb25zdCBjaGFyICoqdmFsdWUpCit7CisgIHNpemVfdCBsb2M7CisKKyAgbG9jID0gQ3VybF9zdHJubGVuKCBidWYsIGxlbiApOworICBsb2MrKzsgLyogTlVMTCB0ZXJtICovCisKKyAgaWYobG9jID49IGxlbikKKyAgICByZXR1cm4gTlVMTDsKKyAgKm9wdGlvbiA9IGJ1ZjsKKworICBsb2MgKz0gQ3VybF9zdHJubGVuKCBidWYrbG9jLCBsZW4tbG9jICk7CisgIGxvYysrOyAvKiBOVUxMIHRlcm0gKi8KKworICBpZihsb2MgPiBsZW4pCisgICAgcmV0dXJuIE5VTEw7CisgICp2YWx1ZSA9ICZidWZbc3RybGVuKCpvcHRpb24pICsgMV07CisKKyAgcmV0dXJuICZidWZbbG9jXTsKK30KKworc3RhdGljIENVUkxjb2RlIHRmdHBfcGFyc2Vfb3B0aW9uX2Fjayh0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnB0ciwgaW50IGxlbikKK3sKKyAgY29uc3QgY2hhciAqdG1wID0gcHRyOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IHN0YXRlLT5jb25uLT5kYXRhOworCisgIC8qIGlmIE9BQ0sgZG9lc24ndCBjb250YWluIGJsa3NpemUgb3B0aW9uLCB0aGUgZGVmYXVsdCAoNTEyKSBtdXN0IGJlIHVzZWQgKi8KKyAgc3RhdGUtPmJsa3NpemUgPSBURlRQX0JMS1NJWkVfREVGQVVMVDsKKworICB3aGlsZSh0bXAgPCBwdHIgKyBsZW4pIHsKKyAgICBjb25zdCBjaGFyICpvcHRpb24sICp2YWx1ZTsKKworICAgIHRtcCA9IHRmdHBfb3B0aW9uX2dldCh0bXAsIHB0ciArIGxlbiAtIHRtcCwgJm9wdGlvbiwgJnZhbHVlKTsKKyAgICBpZih0bXAgPT0gTlVMTCkgeworICAgICAgZmFpbGYoZGF0YSwgIk1hbGZvcm1lZCBBQ0sgcGFja2V0LCByZWplY3RpbmciKTsKKyAgICAgIHJldHVybiBDVVJMRV9URlRQX0lMTEVHQUw7CisgICAgfQorCisgICAgaW5mb2YoZGF0YSwgImdvdCBvcHRpb249KCVzKSB2YWx1ZT0oJXMpXG4iLCBvcHRpb24sIHZhbHVlKTsKKworICAgIGlmKGNoZWNrcHJlZml4KG9wdGlvbiwgVEZUUF9PUFRJT05fQkxLU0laRSkpIHsKKyAgICAgIGxvbmcgYmxrc2l6ZTsKKworICAgICAgYmxrc2l6ZSA9IHN0cnRvbCggdmFsdWUsIE5VTEwsIDEwICk7CisKKyAgICAgIGlmKCFibGtzaXplKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJpbnZhbGlkIGJsb2Nrc2l6ZSB2YWx1ZSBpbiBPQUNLIHBhY2tldCIpOworICAgICAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOworICAgICAgfQorICAgICAgZWxzZSBpZihibGtzaXplID4gVEZUUF9CTEtTSVpFX01BWCkgeworICAgICAgICBmYWlsZihkYXRhLCAiJXMgKCVkKSIsICJibGtzaXplIGlzIGxhcmdlciB0aGFuIG1heCBzdXBwb3J0ZWQiLAorICAgICAgICAgICAgICBURlRQX0JMS1NJWkVfTUFYKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1RGVFBfSUxMRUdBTDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoYmxrc2l6ZSA8IFRGVFBfQkxLU0laRV9NSU4pIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIiVzICglZCkiLCAiYmxrc2l6ZSBpcyBzbWFsbGVyIHRoYW4gbWluIHN1cHBvcnRlZCIsCisgICAgICAgICAgICAgIFRGVFBfQkxLU0laRV9NSU4pOworICAgICAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOworICAgICAgfQorICAgICAgZWxzZSBpZihibGtzaXplID4gc3RhdGUtPnJlcXVlc3RlZF9ibGtzaXplKSB7CisgICAgICAgIC8qIGNvdWxkIHJlYWxsb2MgcGt0IGJ1ZmZlcnMgaGVyZSwgYnV0IHRoZSBzcGVjIGRvZXNuJ3QgY2FsbCBvdXQKKyAgICAgICAgICogc3VwcG9ydCBmb3IgdGhlIHNlcnZlciByZXF1ZXN0aW5nIGEgYmlnZ2VyIGJsa3NpemUgdGhhbiB0aGUgY2xpZW50CisgICAgICAgICAqIHJlcXVlc3RzICovCisgICAgICAgIGZhaWxmKGRhdGEsICIlcyAoJWxkKSIsCisgICAgICAgICAgICAgICJzZXJ2ZXIgcmVxdWVzdGVkIGJsa3NpemUgbGFyZ2VyIHRoYW4gYWxsb2NhdGVkIiwgYmxrc2l6ZSk7CisgICAgICAgIHJldHVybiBDVVJMRV9URlRQX0lMTEVHQUw7CisgICAgICB9CisKKyAgICAgIHN0YXRlLT5ibGtzaXplID0gKGludClibGtzaXplOworICAgICAgaW5mb2YoZGF0YSwgIiVzICglZCkgJXMgKCVkKVxuIiwgImJsa3NpemUgcGFyc2VkIGZyb20gT0FDSyIsCisgICAgICAgICAgICBzdGF0ZS0+Ymxrc2l6ZSwgInJlcXVlc3RlZCIsIHN0YXRlLT5yZXF1ZXN0ZWRfYmxrc2l6ZSk7CisgICAgfQorICAgIGVsc2UgaWYoY2hlY2twcmVmaXgob3B0aW9uLCBURlRQX09QVElPTl9UU0laRSkpIHsKKyAgICAgIGxvbmcgdHNpemUgPSAwOworCisgICAgICB0c2l6ZSA9IHN0cnRvbCggdmFsdWUsIE5VTEwsIDEwICk7CisgICAgICBpbmZvZihkYXRhLCAiJXMgKCVsZClcbiIsICJ0c2l6ZSBwYXJzZWQgZnJvbSBPQUNLIiwgdHNpemUpOworCisgICAgICAvKiB0c2l6ZSBzaG91bGQgYmUgaWdub3JlZCBvbiB1cGxvYWQ6IFdobyBjYXJlcyBhYm91dCB0aGUgc2l6ZSBvZiB0aGUKKyAgICAgICAgIHJlbW90ZSBmaWxlPyAqLworICAgICAgaWYoIWRhdGEtPnNldC51cGxvYWQpIHsKKyAgICAgICAgaWYoIXRzaXplKSB7CisgICAgICAgICAgZmFpbGYoZGF0YSwgImludmFsaWQgdHNpemUgLTolczotIHZhbHVlIGluIE9BQ0sgcGFja2V0IiwgdmFsdWUpOworICAgICAgICAgIHJldHVybiBDVVJMRV9URlRQX0lMTEVHQUw7CisgICAgICAgIH0KKyAgICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIHRzaXplKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyBzaXplX3QgdGZ0cF9vcHRpb25fYWRkKHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwgc2l6ZV90IGNzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLCBjb25zdCBjaGFyICpvcHRpb24pCit7CisgIGlmKCggc3RybGVuKG9wdGlvbikgKyBjc2l6ZSArIDEgKSA+IChzaXplX3Qpc3RhdGUtPmJsa3NpemUpCisgICAgcmV0dXJuIDA7CisgIHN0cmNweShidWYsIG9wdGlvbik7CisgIHJldHVybiggc3RybGVuKG9wdGlvbikgKyAxICk7Cit9CisKK3N0YXRpYyBDVVJMY29kZSB0ZnRwX2Nvbm5lY3RfZm9yX3R4KHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdHBfZXZlbnRfdCBldmVudCkKK3sKKyAgQ1VSTGNvZGUgcmVzOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gc3RhdGUtPmNvbm4tPmRhdGE7CisKKyAgaW5mb2YoZGF0YSwgIiVzXG4iLCAiQ29ubmVjdGVkIGZvciB0cmFuc21pdCIpOworI2VuZGlmCisgIHN0YXRlLT5zdGF0ZSA9IFRGVFBfU1RBVEVfVFg7CisgIHJlcyA9IHRmdHBfc2V0X3RpbWVvdXRzKHN0YXRlKTsKKyAgaWYocmVzICE9IENVUkxFX09LKQorICAgIHJldHVybihyZXMpOworICByZXR1cm4gdGZ0cF90eChzdGF0ZSwgZXZlbnQpOworfQorCitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9jb25uZWN0X2Zvcl9yeCh0ZnRwX3N0YXRlX2RhdGFfdCAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRwX2V2ZW50X3QgZXZlbnQpCit7CisgIENVUkxjb2RlIHJlczsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IHN0YXRlLT5jb25uLT5kYXRhOworCisgIGluZm9mKGRhdGEsICIlc1xuIiwgIkNvbm5lY3RlZCBmb3IgcmVjZWl2ZSIpOworI2VuZGlmCisgIHN0YXRlLT5zdGF0ZSA9IFRGVFBfU1RBVEVfUlg7CisgIHJlcyA9IHRmdHBfc2V0X3RpbWVvdXRzKHN0YXRlKTsKKyAgaWYocmVzICE9IENVUkxFX09LKQorICAgIHJldHVybihyZXMpOworICByZXR1cm4gdGZ0cF9yeChzdGF0ZSwgZXZlbnQpOworfQorCitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zZW5kX2ZpcnN0KHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwgdGZ0cF9ldmVudF90IGV2ZW50KQoreworICBzaXplX3Qgc2J5dGVzOworICBzc2l6ZV90IHNlbmRkYXRhOworICBjb25zdCBjaGFyICptb2RlID0gIm9jdGV0IjsKKyAgY2hhciAqZmlsZW5hbWU7CisgIGNoYXIgYnVmWzY0XTsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBzdGF0ZS0+Y29ubi0+ZGF0YTsKKyAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7CisKKyAgLyogU2V0IGFzY2lpIG1vZGUgaWYgLUIgZmxhZyB3YXMgdXNlZCAqLworICBpZihkYXRhLT5zZXQucHJlZmVyX2FzY2lpKQorICAgIG1vZGUgPSAibmV0YXNjaWkiOworCisgIHN3aXRjaChldmVudCkgeworCisgIGNhc2UgVEZUUF9FVkVOVF9JTklUOiAgICAvKiBTZW5kIHRoZSBmaXJzdCBwYWNrZXQgb3V0ICovCisgIGNhc2UgVEZUUF9FVkVOVF9USU1FT1VUOiAvKiBSZXNlbmQgdGhlIGZpcnN0IHBhY2tldCBvdXQgKi8KKyAgICAvKiBJbmNyZW1lbnQgdGhlIHJldHJ5IGNvdW50ZXIsIHF1aXQgaWYgb3ZlciB0aGUgbGltaXQgKi8KKyAgICBzdGF0ZS0+cmV0cmllcysrOworICAgIGlmKHN0YXRlLT5yZXRyaWVzPnN0YXRlLT5yZXRyeV9tYXgpIHsKKyAgICAgIHN0YXRlLT5lcnJvciA9IFRGVFBfRVJSX05PUkVTUE9OU0U7CisgICAgICBzdGF0ZS0+c3RhdGUgPSBURlRQX1NUQVRFX0ZJTjsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCkgeworICAgICAgLyogSWYgd2UgYXJlIHVwbG9hZGluZywgc2VuZCBhbiBXUlEgKi8KKyAgICAgIHNldHBhY2tldGV2ZW50KCZzdGF0ZS0+c3BhY2tldCwgVEZUUF9FVkVOVF9XUlEpOworICAgICAgc3RhdGUtPmNvbm4tPmRhdGEtPnJlcS51cGxvYWRfZnJvbWhlcmUgPQorICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGErNDsKKyAgICAgIGlmKGRhdGEtPnNldC5pbmZpbGVzaXplICE9IC0xKQorICAgICAgICBDdXJsX3BncnNTZXRVcGxvYWRTaXplKGRhdGEsIGRhdGEtPnNldC5pbmZpbGVzaXplKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBJZiB3ZSBhcmUgZG93bmxvYWRpbmcsIHNlbmQgYW4gUlJRICovCisgICAgICBzZXRwYWNrZXRldmVudCgmc3RhdGUtPnNwYWNrZXQsIFRGVFBfRVZFTlRfUlJRKTsKKyAgICB9CisgICAgLyogQXMgUkZDMzYxNyBkZXNjcmliZXMgdGhlIHNlcGFyYXRvciBzbGFzaCBpcyBub3QgYWN0dWFsbHkgcGFydCBvZiB0aGUKKyAgICAgICBmaWxlIG5hbWUgc28gd2Ugc2tpcCB0aGUgYWx3YXlzLXByZXNlbnQgZmlyc3QgbGV0dGVyIG9mIHRoZSBwYXRoCisgICAgICAgc3RyaW5nLiAqLworICAgIGZpbGVuYW1lID0gY3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsICZzdGF0ZS0+Y29ubi0+ZGF0YS0+c3RhdGUucGF0aFsxXSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICBpZighZmlsZW5hbWUpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIHNucHJpbnRmKChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YSsyLAorICAgICAgICAgICAgIHN0YXRlLT5ibGtzaXplLAorICAgICAgICAgICAgICIlcyVjJXMlYyIsIGZpbGVuYW1lLCAnXDAnLCAgbW9kZSwgJ1wwJyk7CisgICAgc2J5dGVzID0gNCArIHN0cmxlbihmaWxlbmFtZSkgKyBzdHJsZW4obW9kZSk7CisKKyAgICAvKiBhZGQgdHNpemUgb3B0aW9uICovCisgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCAmJiAoZGF0YS0+c2V0LmluZmlsZXNpemUgIT0gLTEpKQorICAgICAgc25wcmludGYoIGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlIiBGT1JNQVRfT0ZGX1QsIGRhdGEtPnNldC5pbmZpbGVzaXplICk7CisgICAgZWxzZQorICAgICAgc3RyY3B5KGJ1ZiwgIjAiKTsgLyogdGhlIGRlc3RpbmF0aW9uIGlzIGxhcmdlIGVub3VnaCAqLworCisgICAgc2J5dGVzICs9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhK3NieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGVFBfT1BUSU9OX1RTSVpFKTsKKyAgICBzYnl0ZXMgKz0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCBzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGErc2J5dGVzLCBidWYpOworICAgIC8qIGFkZCBibGtzaXplIG9wdGlvbiAqLworICAgIHNucHJpbnRmKCBidWYsIHNpemVvZihidWYpLCAiJWQiLCBzdGF0ZS0+cmVxdWVzdGVkX2Jsa3NpemUgKTsKKyAgICBzYnl0ZXMgKz0gdGZ0cF9vcHRpb25fYWRkKHN0YXRlLCBzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5zcGFja2V0LmRhdGErc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZUUF9PUFRJT05fQkxLU0laRSk7CisgICAgc2J5dGVzICs9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhK3NieXRlcywgYnVmICk7CisKKyAgICAvKiBhZGQgdGltZW91dCBvcHRpb24gKi8KKyAgICBzbnByaW50ZiggYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgc3RhdGUtPnJldHJ5X3RpbWUpOworICAgIHNieXRlcyArPSB0ZnRwX29wdGlvbl9hZGQoc3RhdGUsIHNieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YStzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURlRQX09QVElPTl9JTlRFUlZBTCk7CisgICAgc2J5dGVzICs9IHRmdHBfb3B0aW9uX2FkZChzdGF0ZSwgc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhK3NieXRlcywgYnVmICk7CisKKyAgICAvKiB0aGUgdHlwZWNhc2UgZm9yIHRoZSAzcmQgYXJndW1lbnQgaXMgbW9zdGx5IGZvciBzeXN0ZW1zIHRoYXQgZG8KKyAgICAgICBub3QgaGF2ZSBhIHNpemVfdCBhcmd1bWVudCwgbGlrZSBvbGRlciB1bml4ZXMgdGhhdCB3YW50IGFuICdpbnQnICovCisgICAgc2VuZGRhdGEgPSBzZW5kdG8oc3RhdGUtPnNvY2tmZCwgKHZvaWQgKilzdGF0ZS0+c3BhY2tldC5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgIChTRU5EX1RZUEVfQVJHMylzYnl0ZXMsIDAsCisgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmNvbm4tPmlwX2FkZHItPmFpX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmNvbm4tPmlwX2FkZHItPmFpX2FkZHJsZW4pOworICAgIGlmKHNlbmRkYXRhICE9IChzc2l6ZV90KXNieXRlcykgeworICAgICAgZmFpbGYoZGF0YSwgIiVzIiwgQ3VybF9zdHJlcnJvcihzdGF0ZS0+Y29ubiwgU09DS0VSUk5PKSk7CisgICAgfQorICAgIEN1cmxfc2FmZWZyZWUoZmlsZW5hbWUpOworICAgIGJyZWFrOworCisgIGNhc2UgVEZUUF9FVkVOVF9PQUNLOgorICAgIGlmKGRhdGEtPnNldC51cGxvYWQpIHsKKyAgICAgIHJlcyA9IHRmdHBfY29ubmVjdF9mb3JfdHgoc3RhdGUsIGV2ZW50KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZXMgPSB0ZnRwX2Nvbm5lY3RfZm9yX3J4KHN0YXRlLCBldmVudCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgVEZUUF9FVkVOVF9BQ0s6IC8qIENvbm5lY3RlZCBmb3IgdHJhbnNtaXQgKi8KKyAgICByZXMgPSB0ZnRwX2Nvbm5lY3RfZm9yX3R4KHN0YXRlLCBldmVudCk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBURlRQX0VWRU5UX0RBVEE6IC8qIENvbm5lY3RlZCBmb3IgcmVjZWl2ZSAqLworICAgIHJlcyA9IHRmdHBfY29ubmVjdF9mb3Jfcngoc3RhdGUsIGV2ZW50KTsKKyAgICBicmVhazsKKworICBjYXNlIFRGVFBfRVZFTlRfRVJST1I6CisgICAgc3RhdGUtPnN0YXRlID0gVEZUUF9TVEFURV9GSU47CisgICAgYnJlYWs7CisKKyAgZGVmYXVsdDoKKyAgICBmYWlsZihzdGF0ZS0+Y29ubi0+ZGF0YSwgInRmdHBfc2VuZF9maXJzdDogaW50ZXJuYWwgZXJyb3IiKTsKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gcmVzOworfQorCisvKiB0aGUgbmV4dCBibG9ja251bSBpcyB4ICsgMSBidXQgaXQgbmVlZHMgdG8gd3JhcCBhdCBhbiB1bnNpZ25lZCAxNmJpdAorICAgYm91bmRhcnkgKi8KKyNkZWZpbmUgTkVYVF9CTE9DS05VTSh4KSAoKCh4KSsxKSYweGZmZmYpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGZ0cF9yeAorICoKKyAqIEV2ZW50IGhhbmRsZXIgZm9yIHRoZSBSWCBzdGF0ZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIENVUkxjb2RlIHRmdHBfcngodGZ0cF9zdGF0ZV9kYXRhX3QgKnN0YXRlLCB0ZnRwX2V2ZW50X3QgZXZlbnQpCit7CisgIHNzaXplX3Qgc2J5dGVzOworICBpbnQgcmJsb2NrOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IHN0YXRlLT5jb25uLT5kYXRhOworCisgIHN3aXRjaChldmVudCkgeworCisgIGNhc2UgVEZUUF9FVkVOVF9EQVRBOgorICAgIC8qIElzIHRoaXMgdGhlIGJsb2NrIHdlIGV4cGVjdD8gKi8KKyAgICByYmxvY2sgPSBnZXRycGFja2V0YmxvY2soJnN0YXRlLT5ycGFja2V0KTsKKyAgICBpZihORVhUX0JMT0NLTlVNKHN0YXRlLT5ibG9jaykgIT0gcmJsb2NrKSB7CisgICAgICAvKiBObywgbG9nIGl0ICovCisgICAgICBpbmZvZihkYXRhLAorICAgICAgICAgICAgIlJlY2VpdmVkIHVuZXhwZWN0ZWQgREFUQSBwYWNrZXQgYmxvY2sgJWQsIGV4cGVjdGluZyBibG9jayAlZFxuIiwKKyAgICAgICAgICAgIHJibG9jaywgTkVYVF9CTE9DS05VTShzdGF0ZS0+YmxvY2spKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBUaGlzIGlzIHRoZSBleHBlY3RlZCBibG9jay4gIFJlc2V0IGNvdW50ZXJzIGFuZCBBQ0sgaXQuICovCisgICAgc3RhdGUtPmJsb2NrID0gKHVuc2lnbmVkIHNob3J0KXJibG9jazsKKyAgICBzdGF0ZS0+cmV0cmllcyA9IDA7CisgICAgc2V0cGFja2V0ZXZlbnQoJnN0YXRlLT5zcGFja2V0LCBURlRQX0VWRU5UX0FDSyk7CisgICAgc2V0cGFja2V0YmxvY2soJnN0YXRlLT5zcGFja2V0LCBzdGF0ZS0+YmxvY2spOworICAgIHNieXRlcyA9IHNlbmR0byhzdGF0ZS0+c29ja2ZkLCAodm9pZCAqKXN0YXRlLT5zcGFja2V0LmRhdGEsCisgICAgICAgICAgICAgICAgICAgIDQsIFNFTkRfNFRIX0FSRywKKyAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzdGF0ZS0+cmVtb3RlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5yZW1vdGVfYWRkcmxlbik7CisgICAgaWYoc2J5dGVzIDwgMCkgeworICAgICAgZmFpbGYoZGF0YSwgIiVzIiwgQ3VybF9zdHJlcnJvcihzdGF0ZS0+Y29ubiwgU09DS0VSUk5PKSk7CisgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICB9CisKKyAgICAvKiBDaGVjayBpZiBjb21wbGV0ZWQgKFRoYXQgaXMsIGEgbGVzcyB0aGFuIGZ1bGwgcGFja2V0IGlzIHJlY2VpdmVkKSAqLworICAgIGlmKHN0YXRlLT5yYnl0ZXMgPCAoc3NpemVfdClzdGF0ZS0+Ymxrc2l6ZSs0KSB7CisgICAgICBzdGF0ZS0+c3RhdGUgPSBURlRQX1NUQVRFX0ZJTjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBzdGF0ZS0+c3RhdGUgPSBURlRQX1NUQVRFX1JYOworICAgIH0KKyAgICB0aW1lKCZzdGF0ZS0+cnhfdGltZSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBURlRQX0VWRU5UX09BQ0s6CisgICAgLyogQUNLIG9wdGlvbiBhY2tub3dsZWRnZW1lbnQgc28gd2UgY2FuIG1vdmUgb24gdG8gZGF0YSAqLworICAgIHN0YXRlLT5ibG9jayA9IDA7CisgICAgc3RhdGUtPnJldHJpZXMgPSAwOworICAgIHNldHBhY2tldGV2ZW50KCZzdGF0ZS0+c3BhY2tldCwgVEZUUF9FVkVOVF9BQ0spOworICAgIHNldHBhY2tldGJsb2NrKCZzdGF0ZS0+c3BhY2tldCwgc3RhdGUtPmJsb2NrKTsKKyAgICBzYnl0ZXMgPSBzZW5kdG8oc3RhdGUtPnNvY2tmZCwgKHZvaWQgKilzdGF0ZS0+c3BhY2tldC5kYXRhLAorICAgICAgICAgICAgICAgICAgICA0LCBTRU5EXzRUSF9BUkcsCisgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3RhdGUtPnJlbW90ZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cmVtb3RlX2FkZHJsZW4pOworICAgIGlmKHNieXRlcyA8IDApIHsKKyAgICAgIGZhaWxmKGRhdGEsICIlcyIsIEN1cmxfc3RyZXJyb3Ioc3RhdGUtPmNvbm4sIFNPQ0tFUlJOTykpOworICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgICAgfQorCisgICAgLyogd2UncmUgcmVhZHkgdG8gUlggZGF0YSAqLworICAgIHN0YXRlLT5zdGF0ZSA9IFRGVFBfU1RBVEVfUlg7CisgICAgdGltZSgmc3RhdGUtPnJ4X3RpbWUpOworICAgIGJyZWFrOworCisgIGNhc2UgVEZUUF9FVkVOVF9USU1FT1VUOgorICAgIC8qIEluY3JlbWVudCB0aGUgcmV0cnkgY291bnQgYW5kIGZhaWwgaWYgb3ZlciB0aGUgbGltaXQgKi8KKyAgICBzdGF0ZS0+cmV0cmllcysrOworICAgIGluZm9mKGRhdGEsCisgICAgICAgICAgIlRpbWVvdXQgd2FpdGluZyBmb3IgYmxvY2sgJWQgQUNLLiAgUmV0cmllcyA9ICVkXG4iLAorICAgICAgICAgIE5FWFRfQkxPQ0tOVU0oc3RhdGUtPmJsb2NrKSwgc3RhdGUtPnJldHJpZXMpOworICAgIGlmKHN0YXRlLT5yZXRyaWVzID4gc3RhdGUtPnJldHJ5X21heCkgeworICAgICAgc3RhdGUtPmVycm9yID0gVEZUUF9FUlJfVElNRU9VVDsKKyAgICAgIHN0YXRlLT5zdGF0ZSA9IFRGVFBfU1RBVEVfRklOOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFJlc2VuZCB0aGUgcHJldmlvdXMgQUNLICovCisgICAgICBzYnl0ZXMgPSBzZW5kdG8oc3RhdGUtPnNvY2tmZCwgKHZvaWQgKilzdGF0ZS0+c3BhY2tldC5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgIDQsIFNFTkRfNFRIX0FSRywKKyAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnN0YXRlLT5yZW1vdGVfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cmVtb3RlX2FkZHJsZW4pOworICAgICAgaWYoc2J5dGVzPDApIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIiVzIiwgQ3VybF9zdHJlcnJvcihzdGF0ZS0+Y29ubiwgU09DS0VSUk5PKSk7CisgICAgICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIFRGVFBfRVZFTlRfRVJST1I6CisgICAgc2V0cGFja2V0ZXZlbnQoJnN0YXRlLT5zcGFja2V0LCBURlRQX0VWRU5UX0VSUk9SKTsKKyAgICBzZXRwYWNrZXRibG9jaygmc3RhdGUtPnNwYWNrZXQsIHN0YXRlLT5ibG9jayk7CisgICAgKHZvaWQpc2VuZHRvKHN0YXRlLT5zb2NrZmQsICh2b2lkICopc3RhdGUtPnNwYWNrZXQuZGF0YSwKKyAgICAgICAgICAgICAgICAgNCwgU0VORF80VEhfQVJHLAorICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnN0YXRlLT5yZW1vdGVfYWRkciwKKyAgICAgICAgICAgICAgICAgc3RhdGUtPnJlbW90ZV9hZGRybGVuKTsKKyAgICAvKiBkb24ndCBib3RoZXIgd2l0aCB0aGUgcmV0dXJuIGNvZGUsIGJ1dCBpZiB0aGUgc29ja2V0IGlzIHN0aWxsIHVwIHdlCisgICAgICogc2hvdWxkIGJlIGEgZ29vZCBURlRQIGNsaWVudCBhbmQgbGV0IHRoZSBzZXJ2ZXIga25vdyB3ZSdyZSBkb25lICovCisgICAgc3RhdGUtPnN0YXRlID0gVEZUUF9TVEFURV9GSU47CisgICAgYnJlYWs7CisKKyAgZGVmYXVsdDoKKyAgICBmYWlsZihkYXRhLCAiJXMiLCAidGZ0cF9yeDogaW50ZXJuYWwgZXJyb3IiKTsKKyAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOyAvKiBub3QgcmVhbGx5IHRoZSBwZXJmZWN0IHJldHVybiBjb2RlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgKi8KKyAgfQorICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGZ0cF90eAorICoKKyAqIEV2ZW50IGhhbmRsZXIgZm9yIHRoZSBUWCBzdGF0ZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIENVUkxjb2RlIHRmdHBfdHgodGZ0cF9zdGF0ZV9kYXRhX3QgKnN0YXRlLCB0ZnRwX2V2ZW50X3QgZXZlbnQpCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gc3RhdGUtPmNvbm4tPmRhdGE7CisgIHNzaXplX3Qgc2J5dGVzOworICBpbnQgcmJsb2NrOworICBDVVJMY29kZSByZXMgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmZGF0YS0+cmVxOworCisgIHN3aXRjaChldmVudCkgeworCisgIGNhc2UgVEZUUF9FVkVOVF9BQ0s6CisgIGNhc2UgVEZUUF9FVkVOVF9PQUNLOgorICAgIGlmKGV2ZW50ID09IFRGVFBfRVZFTlRfQUNLKSB7CisgICAgICAvKiBBY2sgdGhlIHBhY2tldCAqLworICAgICAgcmJsb2NrID0gZ2V0cnBhY2tldGJsb2NrKCZzdGF0ZS0+cnBhY2tldCk7CisKKyAgICAgIGlmKHJibG9jayAhPSBzdGF0ZS0+YmxvY2sgJiYKKyAgICAgICAgIC8qIFRoZXJlJ3MgYSBidWcgaW4gdGZ0cGQtaHBhIHRoYXQgY2F1c2VzIGl0IHRvIHNlbmQgdXMgYW4gYWNrIGZvcgorICAgICAgICAgICogNjU1MzUgd2hlbiB0aGUgYmxvY2sgbnVtYmVyIHdyYXBzIHRvIDAuIFNvIHdoZW4gd2UncmUgZXhwZWN0aW5nCisgICAgICAgICAgKiAwLCBhbHNvIGFjY2VwdCA2NTUzNS4gU2VlCisgICAgICAgICAgKiBodHRwOi8vc3lzbGludXguenl0b3IuY29tL2FyY2hpdmVzLzIwMTAtU2VwdGVtYmVyLzAxNTI1My5odG1sCisgICAgICAgICAgKiAqLworICAgICAgICAgIShzdGF0ZS0+YmxvY2sgPT0gMCAmJiByYmxvY2sgPT0gNjU1MzUpKSB7CisgICAgICAgIC8qIFRoaXMgaXNuJ3QgdGhlIGV4cGVjdGVkIGJsb2NrLiAgTG9nIGl0IGFuZCB1cCB0aGUgcmV0cnkgY291bnRlciAqLworICAgICAgICBpbmZvZihkYXRhLCAiUmVjZWl2ZWQgQUNLIGZvciBibG9jayAlZCwgZXhwZWN0aW5nICVkXG4iLAorICAgICAgICAgICAgICByYmxvY2ssIHN0YXRlLT5ibG9jayk7CisgICAgICAgIHN0YXRlLT5yZXRyaWVzKys7CisgICAgICAgIC8qIEJhaWwgb3V0IGlmIG92ZXIgdGhlIG1heGltdW0gKi8KKyAgICAgICAgaWYoc3RhdGUtPnJldHJpZXM+c3RhdGUtPnJldHJ5X21heCkgeworICAgICAgICAgIGZhaWxmKGRhdGEsICJ0ZnRwX3R4OiBnaXZpbmcgdXAgd2FpdGluZyBmb3IgYmxvY2sgJWQgYWNrIiwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+YmxvY2spOworICAgICAgICAgIHJlcyA9IENVUkxFX1NFTkRfRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogUmUtc2VuZCB0aGUgZGF0YSBwYWNrZXQgKi8KKyAgICAgICAgICBzYnl0ZXMgPSBzZW5kdG8oc3RhdGUtPnNvY2tmZCwgKHZvaWQgKilzdGF0ZS0+c3BhY2tldC5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICA0K3N0YXRlLT5zYnl0ZXMsIFNFTkRfNFRIX0FSRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzdGF0ZS0+cmVtb3RlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5yZW1vdGVfYWRkcmxlbik7CisgICAgICAgICAgLyogQ2hlY2sgYWxsIHNieXRlcyB3ZXJlIHNlbnQgKi8KKyAgICAgICAgICBpZihzYnl0ZXM8MCkgeworICAgICAgICAgICAgZmFpbGYoZGF0YSwgIiVzIiwgQ3VybF9zdHJlcnJvcihzdGF0ZS0+Y29ubiwgU09DS0VSUk5PKSk7CisgICAgICAgICAgICByZXMgPSBDVVJMRV9TRU5EX0VSUk9SOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzOworICAgICAgfQorICAgICAgLyogVGhpcyBpcyB0aGUgZXhwZWN0ZWQgcGFja2V0LiAgUmVzZXQgdGhlIGNvdW50ZXJzIGFuZCBzZW5kIHRoZSBuZXh0CisgICAgICAgICBibG9jayAqLworICAgICAgdGltZSgmc3RhdGUtPnJ4X3RpbWUpOworICAgICAgc3RhdGUtPmJsb2NrKys7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHN0YXRlLT5ibG9jayA9IDE7IC8qIGZpcnN0IGRhdGEgYmxvY2sgaXMgMSB3aGVuIHVzaW5nIE9BQ0sgKi8KKworICAgIHN0YXRlLT5yZXRyaWVzID0gMDsKKyAgICBzZXRwYWNrZXRldmVudCgmc3RhdGUtPnNwYWNrZXQsIFRGVFBfRVZFTlRfREFUQSk7CisgICAgc2V0cGFja2V0YmxvY2soJnN0YXRlLT5zcGFja2V0LCBzdGF0ZS0+YmxvY2spOworICAgIGlmKHN0YXRlLT5ibG9jayA+IDEgJiYgc3RhdGUtPnNieXRlcyA8IChpbnQpc3RhdGUtPmJsa3NpemUpIHsKKyAgICAgIHN0YXRlLT5zdGF0ZSA9IFRGVFBfU1RBVEVfRklOOworICAgICAgcmV0dXJuIENVUkxFX09LOworICAgIH0KKyAgICByZXMgPSBDdXJsX2ZpbGxyZWFkYnVmZmVyKHN0YXRlLT5jb25uLCBzdGF0ZS0+Ymxrc2l6ZSwgJnN0YXRlLT5zYnl0ZXMpOworICAgIGlmKHJlcykKKyAgICAgIHJldHVybiByZXM7CisgICAgc2J5dGVzID0gc2VuZHRvKHN0YXRlLT5zb2NrZmQsICh2b2lkICopc3RhdGUtPnNwYWNrZXQuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgNCtzdGF0ZS0+c2J5dGVzLCBTRU5EXzRUSF9BUkcsCisgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3RhdGUtPnJlbW90ZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cmVtb3RlX2FkZHJsZW4pOworICAgIC8qIENoZWNrIGFsbCBzYnl0ZXMgd2VyZSBzZW50ICovCisgICAgaWYoc2J5dGVzPDApIHsKKyAgICAgIGZhaWxmKGRhdGEsICIlcyIsIEN1cmxfc3RyZXJyb3Ioc3RhdGUtPmNvbm4sIFNPQ0tFUlJOTykpOworICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRVJST1I7CisgICAgfQorICAgIC8qIFVwZGF0ZSB0aGUgcHJvZ3Jlc3MgbWV0ZXIgKi8KKyAgICBrLT53cml0ZWJ5dGVjb3VudCArPSBzdGF0ZS0+c2J5dGVzOworICAgIEN1cmxfcGdyc1NldFVwbG9hZENvdW50ZXIoZGF0YSwgay0+d3JpdGVieXRlY291bnQpOworICAgIGJyZWFrOworCisgIGNhc2UgVEZUUF9FVkVOVF9USU1FT1VUOgorICAgIC8qIEluY3JlbWVudCB0aGUgcmV0cnkgY291bnRlciBhbmQgbG9nIHRoZSB0aW1lb3V0ICovCisgICAgc3RhdGUtPnJldHJpZXMrKzsKKyAgICBpbmZvZihkYXRhLCAiVGltZW91dCB3YWl0aW5nIGZvciBibG9jayAlZCBBQ0suICIKKyAgICAgICAgICAiIFJldHJpZXMgPSAlZFxuIiwgTkVYVF9CTE9DS05VTShzdGF0ZS0+YmxvY2spLCBzdGF0ZS0+cmV0cmllcyk7CisgICAgLyogRGVjaWRlIGlmIHdlJ3ZlIGhhZCBlbm91Z2ggKi8KKyAgICBpZihzdGF0ZS0+cmV0cmllcyA+IHN0YXRlLT5yZXRyeV9tYXgpIHsKKyAgICAgIHN0YXRlLT5lcnJvciA9IFRGVFBfRVJSX1RJTUVPVVQ7CisgICAgICBzdGF0ZS0+c3RhdGUgPSBURlRQX1NUQVRFX0ZJTjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBSZS1zZW5kIHRoZSBkYXRhIHBhY2tldCAqLworICAgICAgc2J5dGVzID0gc2VuZHRvKHN0YXRlLT5zb2NrZmQsICh2b2lkICopc3RhdGUtPnNwYWNrZXQuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICA0K3N0YXRlLT5zYnl0ZXMsIFNFTkRfNFRIX0FSRywKKyAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnN0YXRlLT5yZW1vdGVfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cmVtb3RlX2FkZHJsZW4pOworICAgICAgLyogQ2hlY2sgYWxsIHNieXRlcyB3ZXJlIHNlbnQgKi8KKyAgICAgIGlmKHNieXRlczwwKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICIlcyIsIEN1cmxfc3RyZXJyb3Ioc3RhdGUtPmNvbm4sIFNPQ0tFUlJOTykpOworICAgICAgICByZXR1cm4gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIC8qIHNpbmNlIHRoaXMgd2FzIGEgcmUtc2VuZCwgd2UgcmVtYWluIGF0IHRoZSBzdGlsbCBieXRlIHBvc2l0aW9uICovCisgICAgICBDdXJsX3BncnNTZXRVcGxvYWRDb3VudGVyKGRhdGEsIGstPndyaXRlYnl0ZWNvdW50KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSBURlRQX0VWRU5UX0VSUk9SOgorICAgIHN0YXRlLT5zdGF0ZSA9IFRGVFBfU1RBVEVfRklOOworICAgIHNldHBhY2tldGV2ZW50KCZzdGF0ZS0+c3BhY2tldCwgVEZUUF9FVkVOVF9FUlJPUik7CisgICAgc2V0cGFja2V0YmxvY2soJnN0YXRlLT5zcGFja2V0LCBzdGF0ZS0+YmxvY2spOworICAgICh2b2lkKXNlbmR0byhzdGF0ZS0+c29ja2ZkLCAodm9pZCAqKXN0YXRlLT5zcGFja2V0LmRhdGEsIDQsIFNFTkRfNFRIX0FSRywKKyAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzdGF0ZS0+cmVtb3RlX2FkZHIsCisgICAgICAgICAgICAgICAgIHN0YXRlLT5yZW1vdGVfYWRkcmxlbik7CisgICAgLyogZG9uJ3QgYm90aGVyIHdpdGggdGhlIHJldHVybiBjb2RlLCBidXQgaWYgdGhlIHNvY2tldCBpcyBzdGlsbCB1cCB3ZQorICAgICAqIHNob3VsZCBiZSBhIGdvb2QgVEZUUCBjbGllbnQgYW5kIGxldCB0aGUgc2VydmVyIGtub3cgd2UncmUgZG9uZSAqLworICAgIHN0YXRlLT5zdGF0ZSA9IFRGVFBfU1RBVEVfRklOOworICAgIGJyZWFrOworCisgIGRlZmF1bHQ6CisgICAgZmFpbGYoZGF0YSwgInRmdHBfdHg6IGludGVybmFsIGVycm9yLCBldmVudDogJWkiLCAoaW50KShldmVudCkpOworICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHJlczsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0ZnRwX3RyYW5zbGF0ZV9jb2RlCisgKgorICogVHJhbnNsYXRlIGludGVybmFsIGVycm9yIGNvZGVzIHRvIENVUkwgZXJyb3IgY29kZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBDVVJMY29kZSB0ZnRwX3RyYW5zbGF0ZV9jb2RlKHRmdHBfZXJyb3JfdCBlcnJvcikKK3sKKyAgQ1VSTGNvZGUgY29kZSA9IENVUkxFX09LOworCisgIGlmKGVycm9yICE9IFRGVFBfRVJSX05PTkUpIHsKKyAgICBzd2l0Y2goZXJyb3IpIHsKKyAgICBjYXNlIFRGVFBfRVJSX05PVEZPVU5EOgorICAgICAgY29kZSA9IENVUkxFX1RGVFBfTk9URk9VTkQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIFRGVFBfRVJSX1BFUk06CisgICAgICBjb2RlID0gQ1VSTEVfVEZUUF9QRVJNOworICAgICAgYnJlYWs7CisgICAgY2FzZSBURlRQX0VSUl9ESVNLRlVMTDoKKyAgICAgIGNvZGUgPSBDVVJMRV9SRU1PVEVfRElTS19GVUxMOworICAgICAgYnJlYWs7CisgICAgY2FzZSBURlRQX0VSUl9VTkRFRjoKKyAgICBjYXNlIFRGVFBfRVJSX0lMTEVHQUw6CisgICAgICBjb2RlID0gQ1VSTEVfVEZUUF9JTExFR0FMOworICAgICAgYnJlYWs7CisgICAgY2FzZSBURlRQX0VSUl9VTktOT1dOSUQ6CisgICAgICBjb2RlID0gQ1VSTEVfVEZUUF9VTktOT1dOSUQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIFRGVFBfRVJSX0VYSVNUUzoKKyAgICAgIGNvZGUgPSBDVVJMRV9SRU1PVEVfRklMRV9FWElTVFM7CisgICAgICBicmVhazsKKyAgICBjYXNlIFRGVFBfRVJSX05PU1VDSFVTRVI6CisgICAgICBjb2RlID0gQ1VSTEVfVEZUUF9OT1NVQ0hVU0VSOworICAgICAgYnJlYWs7CisgICAgY2FzZSBURlRQX0VSUl9USU1FT1VUOgorICAgICAgY29kZSA9IENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVEZUUF9FUlJfTk9SRVNQT05TRToKKyAgICAgIGNvZGUgPSBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgY29kZT0gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBjb2RlID0gQ1VSTEVfT0s7CisgIH0KKworICByZXR1cm4oY29kZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGZ0cF9zdGF0ZV9tYWNoaW5lCisgKgorICogVGhlIHRmdHAgc3RhdGUgbWFjaGluZSBldmVudCBkaXNwYXRjaGVyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9zdGF0ZV9tYWNoaW5lKHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0cF9ldmVudF90IGV2ZW50KQoreworICBDVVJMY29kZSByZXMgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBzdGF0ZS0+Y29ubi0+ZGF0YTsKKyAgc3dpdGNoKHN0YXRlLT5zdGF0ZSkgeworICBjYXNlIFRGVFBfU1RBVEVfU1RBUlQ6CisgICAgREVCVUdGKGluZm9mKGRhdGEsICJURlRQX1NUQVRFX1NUQVJUXG4iKSk7CisgICAgcmVzID0gdGZ0cF9zZW5kX2ZpcnN0KHN0YXRlLCBldmVudCk7CisgICAgYnJlYWs7CisgIGNhc2UgVEZUUF9TVEFURV9SWDoKKyAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlRGVFBfU1RBVEVfUlhcbiIpKTsKKyAgICByZXMgPSB0ZnRwX3J4KHN0YXRlLCBldmVudCk7CisgICAgYnJlYWs7CisgIGNhc2UgVEZUUF9TVEFURV9UWDoKKyAgICBERUJVR0YoaW5mb2YoZGF0YSwgIlRGVFBfU1RBVEVfVFhcbiIpKTsKKyAgICByZXMgPSB0ZnRwX3R4KHN0YXRlLCBldmVudCk7CisgICAgYnJlYWs7CisgIGNhc2UgVEZUUF9TVEFURV9GSU46CisgICAgaW5mb2YoZGF0YSwgIiVzXG4iLCAiVEZUUCBmaW5pc2hlZCIpOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIERFQlVHRihpbmZvZihkYXRhLCAiU1RBVEU6ICVkXG4iLCBzdGF0ZS0+c3RhdGUpKTsKKyAgICBmYWlsZihkYXRhLCAiJXMiLCAiSW50ZXJuYWwgc3RhdGUgbWFjaGluZSBlcnJvciIpOworICAgIHJlcyA9IENVUkxFX1RGVFBfSUxMRUdBTDsKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gcmVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHRmdHBfZGlzY29ubmVjdAorICoKKyAqIFRoZSBkaXNjb25uZWN0IGNhbGxiYWNrCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCit7CisgIHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSA9IGNvbm4tPnByb3RvLnRmdHBjOworICAodm9pZCkgZGVhZF9jb25uZWN0aW9uOworCisgIC8qIGRvbmUsIGZyZWUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHBrdCBidWZmZXJzICovCisgIGlmKHN0YXRlKSB7CisgICAgQ3VybF9zYWZlZnJlZShzdGF0ZS0+cnBhY2tldC5kYXRhKTsKKyAgICBDdXJsX3NhZmVmcmVlKHN0YXRlLT5zcGFja2V0LmRhdGEpOworICAgIGZyZWUoc3RhdGUpOworICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHRmdHBfY29ubmVjdAorICoKKyAqIFRoZSBjb25uZWN0IGNhbGxiYWNrCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSkKK3sKKyAgQ1VSTGNvZGUgY29kZTsKKyAgdGZ0cF9zdGF0ZV9kYXRhX3QgKnN0YXRlOworICBpbnQgYmxrc2l6ZSwgcmM7CisKKyAgYmxrc2l6ZSA9IFRGVFBfQkxLU0laRV9ERUZBVUxUOworCisgIC8qIElmIHRoZXJlIGFscmVhZHkgaXMgYSBwcm90b2NvbC1zcGVjaWZpYyBzdHJ1Y3QgYWxsb2NhdGVkIGZvciB0aGlzCisgICAgIHNlc3Npb25oYW5kbGUsIGRlYWwgd2l0aCBpdCAqLworICBDdXJsX3Jlc2V0X3JlcXByb3RvKGNvbm4pOworCisgIHN0YXRlID0gY29ubi0+cHJvdG8udGZ0cGMgPSBjYWxsb2MoMSwgc2l6ZW9mKHRmdHBfc3RhdGVfZGF0YV90KSk7CisgIGlmKCFzdGF0ZSkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAvKiBhbGxvYyBwa3QgYnVmZmVycyBiYXNlZCBvbiBzcGVjaWZpZWQgYmxrc2l6ZSAqLworICBpZihjb25uLT5kYXRhLT5zZXQudGZ0cF9ibGtzaXplKSB7CisgICAgYmxrc2l6ZSA9IChpbnQpY29ubi0+ZGF0YS0+c2V0LnRmdHBfYmxrc2l6ZTsKKyAgICBpZihibGtzaXplID4gVEZUUF9CTEtTSVpFX01BWCB8fCBibGtzaXplIDwgVEZUUF9CTEtTSVpFX01JTiApCisgICAgICByZXR1cm4gQ1VSTEVfVEZUUF9JTExFR0FMOworICB9CisKKyAgaWYoIXN0YXRlLT5ycGFja2V0LmRhdGEpIHsKKyAgICBzdGF0ZS0+cnBhY2tldC5kYXRhID0gY2FsbG9jKDEsIGJsa3NpemUgKyAyICsgMik7CisKKyAgICBpZighc3RhdGUtPnJwYWNrZXQuZGF0YSkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgaWYoIXN0YXRlLT5zcGFja2V0LmRhdGEpIHsKKyAgICBzdGF0ZS0+c3BhY2tldC5kYXRhID0gY2FsbG9jKDEsIGJsa3NpemUgKyAyICsgMik7CisKKyAgICBpZighc3RhdGUtPnNwYWNrZXQuZGF0YSkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7IC8qIHdlIGRvbid0IGtlZXAgVEZUUCBjb25uZWN0aW9ucyB1cCBiYXNjaWFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlcmUncyBub25lIG9yIHZlcnkgbGl0dGxlIGdhaW4gZm9yIFVEUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICBzdGF0ZS0+Y29ubiA9IGNvbm47CisgIHN0YXRlLT5zb2NrZmQgPSBzdGF0ZS0+Y29ubi0+c29ja1tGSVJTVFNPQ0tFVF07CisgIHN0YXRlLT5zdGF0ZSA9IFRGVFBfU1RBVEVfU1RBUlQ7CisgIHN0YXRlLT5lcnJvciA9IFRGVFBfRVJSX05PTkU7CisgIHN0YXRlLT5ibGtzaXplID0gVEZUUF9CTEtTSVpFX0RFRkFVTFQ7CisgIHN0YXRlLT5yZXF1ZXN0ZWRfYmxrc2l6ZSA9IGJsa3NpemU7CisKKyAgKChzdHJ1Y3Qgc29ja2FkZHIgKikmc3RhdGUtPmxvY2FsX2FkZHIpLT5zYV9mYW1pbHkgPQorICAgICh1bnNpZ25lZCBzaG9ydCkoY29ubi0+aXBfYWRkci0+YWlfZmFtaWx5KTsKKworICB0ZnRwX3NldF90aW1lb3V0cyhzdGF0ZSk7CisKKyAgaWYoIWNvbm4tPmJpdHMuYm91bmQpIHsKKyAgICAvKiBJZiBub3QgYWxyZWFkeSBib3VuZCwgYmluZCB0byBhbnkgaW50ZXJmYWNlLCByYW5kb20gVURQIHBvcnQuIElmIGl0IGlzCisgICAgICogcmV1c2VkIG9yIGEgY3VzdG9tIGxvY2FsIHBvcnQgd2FzIGRlc2lyZWQsIHRoaXMgaGFzIGFscmVhZHkgYmVlbiBkb25lIQorICAgICAqCisgICAgICogV2Ugb25jZSB1c2VkIHRoZSBzaXplIG9mIHRoZSBsb2NhbF9hZGRyIHN0cnVjdCBhcyB0aGUgdGhpcmQgYXJndW1lbnQKKyAgICAgKiBmb3IgYmluZCgpIHRvIGJldHRlciB3b3JrIHdpdGggSVB2NiBvciB3aGF0ZXZlciBzaXplIHRoZSBzdHJ1Y3QgY291bGQKKyAgICAgKiBoYXZlLCBidXQgd2UgbGVhcm5lZCB0aGF0IGF0IGxlYXN0IFRydTY0LCBBSVggYW5kIElSSVggKnJlcXVpcmVzKiB0aGUKKyAgICAgKiBzaXplIG9mIHRoYXQgYXJndW1lbnQgdG8gbWF0Y2ggdGhlIGV4YWN0IHNpemUgb2YgYSAnc29ja2FkZHJfaW4nIHN0cnVjdAorICAgICAqIHdoZW4gcnVubmluZyBJUHY0LW9ubHkuCisgICAgICoKKyAgICAgKiBUaGVyZWZvcmUgd2UgdXNlIHRoZSBzaXplIGZyb20gdGhlIGFkZHJlc3Mgd2UgY29ubmVjdGVkIHRvLCB3aGljaCB3ZQorICAgICAqIGFzc3VtZSB1c2VzIHRoZSBzYW1lIElQIHZlcnNpb24gYW5kIHRodXMgaG9wZWZ1bGx5IHRoaXMgd29ya3MgZm9yIGJvdGgKKyAgICAgKiBJUHY0IGFuZCBJUHY2Li4uCisgICAgICovCisgICAgcmMgPSBiaW5kKHN0YXRlLT5zb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3RhdGUtPmxvY2FsX2FkZHIsCisgICAgICAgICAgICAgIGNvbm4tPmlwX2FkZHItPmFpX2FkZHJsZW4pOworICAgIGlmKHJjKSB7CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAiYmluZCgpIGZhaWxlZDsgJXMiLAorICAgICAgICAgICAgQ3VybF9zdHJlcnJvcihjb25uLCBTT0NLRVJSTk8pKTsKKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfQorICAgIGNvbm4tPmJpdHMuYm91bmQgPSBUUlVFOworICB9CisKKyAgQ3VybF9wZ3JzU3RhcnROb3coY29ubi0+ZGF0YSk7CisKKyAgKmRvbmUgPSBUUlVFOworICBjb2RlID0gQ1VSTEVfT0s7CisgIHJldHVybihjb2RlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0ZnRwX2RvbmUKKyAqCisgKiBUaGUgZG9uZSBjYWxsYmFjaworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIENVUkxjb2RlIHRmdHBfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIENVUkxjb2RlIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtYXR1cmUpCit7CisgIENVUkxjb2RlIGNvZGUgPSBDVVJMRV9PSzsKKyAgdGZ0cF9zdGF0ZV9kYXRhX3QgKnN0YXRlID0gKHRmdHBfc3RhdGVfZGF0YV90ICopY29ubi0+cHJvdG8udGZ0cGM7CisKKyAgKHZvaWQpc3RhdHVzOyAvKiB1bnVzZWQgKi8KKyAgKHZvaWQpcHJlbWF0dXJlOyAvKiBub3QgdXNlZCAqLworCisgIEN1cmxfcGdyc0RvbmUoY29ubik7CisKKyAgLyogSWYgd2UgaGF2ZSBlbmNvdW50ZXJlZCBhbiBlcnJvciAqLworICBjb2RlID0gdGZ0cF90cmFuc2xhdGVfY29kZShzdGF0ZS0+ZXJyb3IpOworCisgIHJldHVybiBjb2RlOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHRmdHBfZ2V0c29jaworICoKKyAqIFRoZSBnZXRzb2NrIGNhbGxiYWNrCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHRmdHBfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQoreworICBpZighbnVtc29ja3MpCisgICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7CisKKyAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKworICByZXR1cm4gR0VUU09DS19SRUFEU09DSygwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0ZnRwX3JlY2VpdmVfcGFja2V0CisgKgorICogQ2FsbGVkIG9uY2Ugc2VsZWN0IGZpcmVzIGFuZCBkYXRhIGlzIHJlYWR5IG9uIHRoZSBzb2NrZXQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBDVVJMY29kZSB0ZnRwX3JlY2VpdmVfcGFja2V0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgc3RydWN0IEN1cmxfc29ja2FkZHJfc3RvcmFnZSBmcm9tYWRkcjsKKyAgY3VybF9zb2NrbGVuX3QgICAgICAgIGZyb21sZW47CisgIENVUkxjb2RlICAgICAgICAgICAgICByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgdGZ0cF9zdGF0ZV9kYXRhX3QgICAgICpzdGF0ZSA9ICh0ZnRwX3N0YXRlX2RhdGFfdCAqKWNvbm4tPnByb3RvLnRmdHBjOworICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAgKmsgPSAmZGF0YS0+cmVxOworCisgIC8qIFJlY2VpdmUgdGhlIHBhY2tldCAqLworICBmcm9tbGVuID0gc2l6ZW9mKGZyb21hZGRyKTsKKyAgc3RhdGUtPnJieXRlcyA9IChpbnQpcmVjdmZyb20oc3RhdGUtPnNvY2tmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilzdGF0ZS0+cnBhY2tldC5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+Ymxrc2l6ZSs0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmZyb21hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJvbWxlbik7CisgIGlmKHN0YXRlLT5yZW1vdGVfYWRkcmxlbj09MCkgeworICAgIG1lbWNweSgmc3RhdGUtPnJlbW90ZV9hZGRyLCAmZnJvbWFkZHIsIGZyb21sZW4pOworICAgIHN0YXRlLT5yZW1vdGVfYWRkcmxlbiA9IGZyb21sZW47CisgIH0KKworICAvKiBTYW5pdHkgY2hlY2sgcGFja2V0IGxlbmd0aCAqLworICBpZihzdGF0ZS0+cmJ5dGVzIDwgNCkgeworICAgIGZhaWxmKGRhdGEsICJSZWNlaXZlZCB0b28gc2hvcnQgcGFja2V0Iik7CisgICAgLyogTm90IGEgdGltZW91dCwgYnV0IGhvdyBiZXN0IHRvIGhhbmRsZSBpdD8gKi8KKyAgICBzdGF0ZS0+ZXZlbnQgPSBURlRQX0VWRU5UX1RJTUVPVVQ7CisgIH0KKyAgZWxzZSB7CisgICAgLyogVGhlIGV2ZW50IGlzIGdpdmVuIGJ5IHRoZSBURlRQIHBhY2tldCB0aW1lICovCisgICAgc3RhdGUtPmV2ZW50ID0gKHRmdHBfZXZlbnRfdClnZXRycGFja2V0ZXZlbnQoJnN0YXRlLT5ycGFja2V0KTsKKworICAgIHN3aXRjaChzdGF0ZS0+ZXZlbnQpIHsKKyAgICBjYXNlIFRGVFBfRVZFTlRfREFUQToKKyAgICAgIC8qIERvbid0IHBhc3MgdG8gdGhlIGNsaWVudCBlbXB0eSBvciByZXRyYW5zbWl0dGVkIHBhY2tldHMgKi8KKyAgICAgIGlmKHN0YXRlLT5yYnl0ZXMgPiA0ICYmCisgICAgICAgICAoTkVYVF9CTE9DS05VTShzdGF0ZS0+YmxvY2spID09IGdldHJwYWNrZXRibG9jaygmc3RhdGUtPnJwYWNrZXQpKSkgeworICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXN0YXRlLT5ycGFja2V0LmRhdGErNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnJieXRlcy00KTsKKyAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgdGZ0cF9zdGF0ZV9tYWNoaW5lKHN0YXRlLCBURlRQX0VWRU5UX0VSUk9SKTsKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGstPmJ5dGVjb3VudCArPSBzdGF0ZS0+cmJ5dGVzLTQ7CisgICAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCAoY3VybF9vZmZfdCkgay0+Ynl0ZWNvdW50KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgVEZUUF9FVkVOVF9FUlJPUjoKKyAgICAgIHN0YXRlLT5lcnJvciA9ICh0ZnRwX2Vycm9yX3QpZ2V0cnBhY2tldGJsb2NrKCZzdGF0ZS0+cnBhY2tldCk7CisgICAgICBpbmZvZihkYXRhLCAiJXNcbiIsIChjb25zdCBjaGFyICopc3RhdGUtPnJwYWNrZXQuZGF0YSs0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVEZUUF9FVkVOVF9BQ0s6CisgICAgICBicmVhazsKKyAgICBjYXNlIFRGVFBfRVZFTlRfT0FDSzoKKyAgICAgIHJlc3VsdCA9IHRmdHBfcGFyc2Vfb3B0aW9uX2FjayhzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKXN0YXRlLT5ycGFja2V0LmRhdGErMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cmJ5dGVzLTIpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBURlRQX0VWRU5UX1JSUToKKyAgICBjYXNlIFRGVFBfRVZFTlRfV1JROgorICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihkYXRhLCAiJXMiLCAiSW50ZXJuYWwgZXJyb3I6IFVuZXhwZWN0ZWQgcGFja2V0Iik7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBVcGRhdGUgdGhlIHByb2dyZXNzIG1ldGVyICovCisgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKSB7CisgICAgICB0ZnRwX3N0YXRlX21hY2hpbmUoc3RhdGUsIFRGVFBfRVZFTlRfRVJST1IpOworICAgICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGZ0cF9zdGF0ZV90aW1lb3V0CisgKgorICogQ2hlY2sgaWYgdGltZW91dHMgaGF2ZSBiZWVuIHJlYWNoZWQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBsb25nIHRmdHBfc3RhdGVfdGltZW91dChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIHRmdHBfZXZlbnRfdCAqZXZlbnQpCit7CisgIHRpbWVfdCAgICAgICAgICAgICAgICBjdXJyZW50OworICB0ZnRwX3N0YXRlX2RhdGFfdCAgICAgKnN0YXRlID0gKHRmdHBfc3RhdGVfZGF0YV90ICopY29ubi0+cHJvdG8udGZ0cGM7CisKKyAgaWYoZXZlbnQpCisgICAgKmV2ZW50ID0gVEZUUF9FVkVOVF9OT05FOworCisgIHRpbWUoJmN1cnJlbnQpOworICBpZihjdXJyZW50ID4gc3RhdGUtPm1heF90aW1lKSB7CisgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJ0aW1lb3V0OiAlbGQgPiAlbGRcbiIsCisgICAgICAgICAgICAgICAgIChsb25nKWN1cnJlbnQsIChsb25nKXN0YXRlLT5tYXhfdGltZSkpOworICAgIHN0YXRlLT5lcnJvciA9IFRGVFBfRVJSX1RJTUVPVVQ7CisgICAgc3RhdGUtPnN0YXRlID0gVEZUUF9TVEFURV9GSU47CisgICAgcmV0dXJuIDA7CisgIH0KKyAgZWxzZSBpZihjdXJyZW50ID4gc3RhdGUtPnJ4X3RpbWUrc3RhdGUtPnJldHJ5X3RpbWUpIHsKKyAgICBpZihldmVudCkKKyAgICAgICpldmVudCA9IFRGVFBfRVZFTlRfVElNRU9VVDsKKyAgICB0aW1lKCZzdGF0ZS0+cnhfdGltZSk7IC8qIHVwZGF0ZSBldmVuIHRob3VnaCB3ZSByZWNlaXZlZCBub3RoaW5nICovCisgIH0KKworICAvKiB0aGVyZSdzIGEgdHlwZWNhc3QgYmVsb3cgaGVyZSBzaW5jZSAndGltZV90JyBtYXkgaW4gZmFjdCBiZSBsYXJnZXIgdGhhbgorICAgICAnbG9uZycsIGJ1dCB3ZSBlc3RpbWF0ZSB0aGF0IGEgJ2xvbmcnIHdpbGwgc3RpbGwgYmUgYWJsZSB0byBob2xkIG51bWJlcgorICAgICBvZiBzZWNvbmRzIGV2ZW4gaWYgIm9ubHkiIDMyIGJpdCAqLworICByZXR1cm4gKGxvbmcpKHN0YXRlLT5tYXhfdGltZSAtIGN1cnJlbnQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGZ0cF9lYXN5X3N0YXRlbWFjaAorICoKKyAqIEhhbmRsZSBlYXN5IHJlcXVlc3QgdW50aWwgY29tcGxldGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIENVUkxjb2RlIHRmdHBfZWFzeV9zdGF0ZW1hY2goc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBpbnQgICAgICAgICAgICAgICAgICAgcmM7CisgIGludCAgICAgICAgICAgICAgICAgICBjaGVja190aW1lID0gMDsKKyAgQ1VSTGNvZGUgICAgICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAgKmRhdGEgPSBjb25uLT5kYXRhOworICB0ZnRwX3N0YXRlX2RhdGFfdCAgICAgKnN0YXRlID0gKHRmdHBfc3RhdGVfZGF0YV90ICopY29ubi0+cHJvdG8udGZ0cGM7CisgIGN1cmxfc29ja2V0X3QgICAgICAgICBmZF9yZWFkOworICBsb25nICAgICAgICAgICAgICAgICAgdGltZW91dF9tczsKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgICprID0gJmRhdGEtPnJlcTsKKyAgc3RydWN0IHRpbWV2YWwgICAgICAgIHRyYW5zYWN0aW9uX3N0YXJ0ID0gQ3VybF90dm5vdygpOworCisgIGstPnN0YXJ0ID0gdHJhbnNhY3Rpb25fc3RhcnQ7CisgIGstPm5vdyA9IHRyYW5zYWN0aW9uX3N0YXJ0OworCisgIC8qIFJ1biB0aGUgVEZUUCBTdGF0ZSBNYWNoaW5lICovCisgIGZvcig7IChzdGF0ZS0+c3RhdGUgIT0gVEZUUF9TVEFURV9GSU4pICYmIChyZXN1bHQgPT0gQ1VSTEVfT0spOyApIHsKKworICAgIHRpbWVvdXRfbXMgPSBzdGF0ZS0+cmV0cnlfdGltZSAqIDEwMDA7CisKKyAgICBpZihkYXRhLT5zZXQudXBsb2FkKSB7CisgICAgICBpZihkYXRhLT5zZXQubWF4X3NlbmRfc3BlZWQgJiYKKyAgICAgICAgICAoZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZCA+IGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCkpIHsKKyAgICAgICAgZmRfcmVhZCA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgICAgdGltZW91dF9tcyA9IEN1cmxfc2xlZXBfdGltZShkYXRhLT5zZXQubWF4X3NlbmRfc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZCwgc3RhdGUtPmJsa3NpemUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGZkX3JlYWQgPSBzdGF0ZS0+c29ja2ZkOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmKGRhdGEtPnNldC5tYXhfcmVjdl9zcGVlZCAmJgorICAgICAgICAgKGRhdGEtPnByb2dyZXNzLmRsc3BlZWQgPiBkYXRhLT5zZXQubWF4X3JlY3Zfc3BlZWQpKSB7CisgICAgICAgIGZkX3JlYWQgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgICAgIHRpbWVvdXRfbXMgPSBDdXJsX3NsZWVwX3RpbWUoZGF0YS0+c2V0Lm1heF9yZWN2X3NwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnByb2dyZXNzLmRsc3BlZWQsIHN0YXRlLT5ibGtzaXplKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZmRfcmVhZCA9IHN0YXRlLT5zb2NrZmQ7CisgICAgfQorCisgICAgaWYoZGF0YS0+c2V0LnRpbWVvdXQpIHsKKyAgICAgIHRpbWVvdXRfbXMgPSBkYXRhLT5zZXQudGltZW91dCAtIEN1cmxfdHZkaWZmKGstPm5vdywgay0+c3RhcnQpOworICAgICAgaWYodGltZW91dF9tcyA+IHN0YXRlLT5yZXRyeV90aW1lICogMTAwMCkKKyAgICAgICAgdGltZW91dF9tcyA9IHN0YXRlLT5yZXRyeV90aW1lICogMTAwMDsKKyAgICAgIGVsc2UgaWYodGltZW91dF9tcyA8IDApCisgICAgICAgIHRpbWVvdXRfbXMgPSAwOworICAgIH0KKworCisgICAgLyogV2FpdCB1bnRpbCByZWFkeSB0byByZWFkIG9yIHRpbWVvdXQgb2NjdXJzICovCisgICAgcmMgPSBDdXJsX3NvY2tldF9yZWFkeShmZF9yZWFkLCBDVVJMX1NPQ0tFVF9CQUQsIHRpbWVvdXRfbXMpOworCisgICAgay0+bm93ID0gQ3VybF90dm5vdygpOworCisgICAgLyogRm9yY2UgYSBwcm9ncmVzcyBjYWxsYmFjayBpZiBpdCdzIGJlZW4gdG9vIGxvbmcgKi8KKyAgICBpZihDdXJsX3R2ZGlmZihrLT5ub3csIGstPnN0YXJ0KSA+PSBkYXRhLT5zZXQudGltZW91dCkgeworICAgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKSB7CisgICAgICAgIHRmdHBfc3RhdGVfbWFjaGluZShzdGF0ZSwgVEZUUF9FVkVOVF9FUlJPUik7CisgICAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOworICAgICAgfQorICAgICAgay0+c3RhcnQgPSBrLT5ub3c7CisgICAgfQorCisgICAgaWYocmMgPT0gLTEpIHsKKyAgICAgIC8qIGJhaWwgb3V0ICovCisgICAgICBpbnQgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgICBmYWlsZihkYXRhLCAiJXMiLCBDdXJsX3N0cmVycm9yKGNvbm4sIGVycm9yKSk7CisgICAgICBzdGF0ZS0+ZXZlbnQgPSBURlRQX0VWRU5UX0VSUk9SOworICAgIH0KKyAgICBlbHNlIHsKKworICAgICAgaWYocmM9PTApIHsKKyAgICAgICAgLyogQSB0aW1lb3V0IG9jY3VycmVkLCBidXQgb3VyIHRpbWVvdXQgaXMgdmFyaWFibGUsIHNvIG1heWJlCisgICAgICAgICAgIGp1c3QgY29udGludWU/ICovCisgICAgICAgIGxvbmcgcnRtcyA9IHN0YXRlLT5yZXRyeV90aW1lICogMTAwMDsKKyAgICAgICAgaWYoQ3VybF90dmRpZmYoay0+bm93LCB0cmFuc2FjdGlvbl9zdGFydCkgPiBydG1zKSB7CisgICAgICAgICAgc3RhdGUtPmV2ZW50ID0gVEZUUF9FVkVOVF9USU1FT1VUOworICAgICAgICAgIC8qIEZvcmNlIGEgbG9vayBhdCB0cmFuc2ZlciB0aW1lb3V0cyAqLworICAgICAgICAgIGNoZWNrX3RpbWUgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGNvbnRpbnVlOyAvKiBza2lwIHN0YXRlIG1hY2hpbmUgKi8KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IHRmdHBfcmVjZWl2ZV9wYWNrZXQoY29ubik7CisgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9PSykKKyAgICAgICAgICB0cmFuc2FjdGlvbl9zdGFydCA9IEN1cmxfdHZub3coKTsKKworICAgICAgICBpZihrLT5ieXRlY291bnRwKQorICAgICAgICAgICprLT5ieXRlY291bnRwID0gay0+Ynl0ZWNvdW50OyAvKiByZWFkIGNvdW50ICovCisgICAgICAgIGlmKGstPndyaXRlYnl0ZWNvdW50cCkKKyAgICAgICAgICAqay0+d3JpdGVieXRlY291bnRwID0gay0+d3JpdGVieXRlY291bnQ7IC8qIHdyaXRlIGNvdW50ICovCisgICAgICB9CisgICAgfQorCisgICAgaWYoY2hlY2tfdGltZSkgeworICAgICAgdGZ0cF9zdGF0ZV90aW1lb3V0KGNvbm4sIE5VTEwpOworICAgICAgY2hlY2tfdGltZSA9IDA7CisgICAgfQorCisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuKHJlc3VsdCk7CisKKyAgICByZXN1bHQgPSB0ZnRwX3N0YXRlX21hY2hpbmUoc3RhdGUsIHN0YXRlLT5ldmVudCk7CisgIH0KKworICAvKiBUZWxsIGN1cmwgd2UncmUgZG9uZSAqLworICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKworICByZXR1cm4ocmVzdWx0KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB0ZnRwX211bHRpX3N0YXRlbWFjaAorICoKKyAqIEhhbmRsZSBzaW5nbGUgUlggc29ja2V0IGV2ZW50IGFuZCByZXR1cm4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBDVVJMY29kZSB0ZnRwX211bHRpX3N0YXRlbWFjaChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIGludCAgICAgICAgICAgICAgICAgICByYzsKKyAgdGZ0cF9ldmVudF90ICAgICAgICAgIGV2ZW50OworICBDVVJMY29kZSAgICAgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHRmdHBfc3RhdGVfZGF0YV90ICAgICAqc3RhdGUgPSAodGZ0cF9zdGF0ZV9kYXRhX3QgKiljb25uLT5wcm90by50ZnRwYzsKKyAgbG9uZyAgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXMgPSB0ZnRwX3N0YXRlX3RpbWVvdXQoY29ubiwgJmV2ZW50KTsKKworICAqZG9uZSA9IEZBTFNFOworCisgIGlmKHRpbWVvdXRfbXMgPD0gMCkgeworICAgIGZhaWxmKGRhdGEsICJURlRQIHJlc3BvbnNlIHRpbWVvdXQiKTsKKyAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICB9CisgIGVsc2UgaWYoZXZlbnQgIT0gVEZUUF9FVkVOVF9OT05FKSB7CisgICAgcmVzdWx0ID0gdGZ0cF9zdGF0ZV9tYWNoaW5lKHN0YXRlLCBldmVudCk7CisgICAgaWYocmVzdWx0ICE9IENVUkxFX09LKQorICAgICAgcmV0dXJuKHJlc3VsdCk7CisgICAgKmRvbmUgPSAoc3RhdGUtPnN0YXRlID09IFRGVFBfU1RBVEVfRklOKSA/IFRSVUUgOiBGQUxTRTsKKyAgICBpZigqZG9uZSkKKyAgICAgIC8qIFRlbGwgY3VybCB3ZSdyZSBkb25lICovCisgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBubyB0aW1lb3V0cyB0byBoYW5kbGUsIGNoZWNrIG91ciBzb2NrZXQgKi8KKyAgICByYyA9IEN1cmxfc29ja2V0X3JlYWR5KHN0YXRlLT5zb2NrZmQsIENVUkxfU09DS0VUX0JBRCwgMCk7CisKKyAgICBpZihyYyA9PSAtMSkgeworICAgICAgLyogYmFpbCBvdXQgKi8KKyAgICAgIGludCBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICAgIGZhaWxmKGRhdGEsICIlcyIsIEN1cmxfc3RyZXJyb3IoY29ubiwgZXJyb3IpKTsKKyAgICAgIHN0YXRlLT5ldmVudCA9IFRGVFBfRVZFTlRfRVJST1I7CisgICAgfQorICAgIGVsc2UgaWYocmMgIT0gMCkgeworICAgICAgcmVzdWx0ID0gdGZ0cF9yZWNlaXZlX3BhY2tldChjb25uKTsKKyAgICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykKKyAgICAgICAgcmV0dXJuKHJlc3VsdCk7CisgICAgICByZXN1bHQgPSB0ZnRwX3N0YXRlX21hY2hpbmUoc3RhdGUsIHN0YXRlLT5ldmVudCk7CisgICAgICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spCisgICAgICAgIHJldHVybihyZXN1bHQpOworICAgICAgKmRvbmUgPSAoc3RhdGUtPnN0YXRlID09IFRGVFBfU1RBVEVfRklOKSA/IFRSVUUgOiBGQUxTRTsKKyAgICAgIGlmKCpkb25lKQorICAgICAgICAvKiBUZWxsIGN1cmwgd2UncmUgZG9uZSAqLworICAgICAgICBDdXJsX3NldHVwX3RyYW5zZmVyKGNvbm4sIC0xLCAtMSwgRkFMU0UsIE5VTEwsIC0xLCBOVUxMKTsKKyAgICB9CisgICAgLyogaWYgcmMgPT0gMCwgdGhlbiBzZWxlY3QoKSB0aW1lZCBvdXQgKi8KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGZ0cF9kb2luZworICoKKyAqIENhbGxlZCBmcm9tIG11bHRpLmMgd2hpbGUgRE9pbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBDVVJMY29kZSB0ZnRwX2RvaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9waGFzZV9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQ7CisgIHJlc3VsdCA9IHRmdHBfbXVsdGlfc3RhdGVtYWNoKGNvbm4sIGRvcGhhc2VfZG9uZSk7CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkgeworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiRE8gcGhhc2UgaXMgY29tcGxldGVcbiIpKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHRmdHBfcGVmb3JtCisgKgorICogRW50cnkgcG9pbnQgZm9yIHRyYW5zZmVyIGZyb20gdGZ0cF9kbywgc2FydHMgc3RhdGUgbWFjaAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIENVUkxjb2RlIHRmdHBfcGVyZm9ybShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvcGhhc2VfZG9uZSkKK3sKKyAgQ1VSTGNvZGUgICAgICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09LOworICB0ZnRwX3N0YXRlX2RhdGFfdCAgICAgKnN0YXRlID0gKHRmdHBfc3RhdGVfZGF0YV90ICopY29ubi0+cHJvdG8udGZ0cGM7CisKKyAgKmRvcGhhc2VfZG9uZSA9IEZBTFNFOworCisgIHJlc3VsdCA9IHRmdHBfc3RhdGVfbWFjaGluZShzdGF0ZSwgVEZUUF9FVkVOVF9JTklUKTsKKworICBpZihzdGF0ZS0+c3RhdGUgPT0gVEZUUF9TVEFURV9GSU4gfHwgcmVzdWx0ICE9IENVUkxFX09LKQorICAgIHJldHVybihyZXN1bHQpOworCisgIGlmKGNvbm4tPmRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID09IEN1cmxfaWZfbXVsdGkpCisgICAgdGZ0cF9tdWx0aV9zdGF0ZW1hY2goY29ubiwgZG9waGFzZV9kb25lKTsKKyAgZWxzZSB7CisgICAgcmVzdWx0ID0gdGZ0cF9lYXN5X3N0YXRlbWFjaChjb25uKTsKKyAgICAqZG9waGFzZV9kb25lID0gVFJVRTsgLyogd2l0aCB0aGUgZWFzeSBpbnRlcmZhY2Ugd2UgYXJlIGRvbmUgaGVyZSAqLworICB9CisKKyAgaWYoKmRvcGhhc2VfZG9uZSkKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIkRPIHBoYXNlIGlzIGNvbXBsZXRlXG4iKSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHRmdHBfZG8KKyAqCisgKiBUaGUgZG8gY2FsbGJhY2sKKyAqCisgKiBUaGlzIGNhbGxiYWNrIGluaXRpYXRlcyB0aGUgVEZUUCB0cmFuc2ZlcgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgQ1VSTGNvZGUgdGZ0cF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIHRmdHBfc3RhdGVfZGF0YV90ICAgICAqc3RhdGU7CisgIENVUkxjb2RlICAgICAgICAgICAgICBjb2RlOworCisgICpkb25lID0gRkFMU0U7CisKKyAgLyoKKyAgICBTaW5jZSBjb25uZWN0aW9ucyBjYW4gYmUgcmUtdXNlZCBiZXR3ZWVuIFNlc3Npb25IYW5kbGVzLCB0aGlzIG1pZ2h0IGJlIGEKKyAgICBjb25uZWN0aW9uIGFscmVhZHkgZXhpc3RpbmcgYnV0IG9uIGEgZnJlc2ggU2Vzc2lvbkhhbmRsZSBzdHJ1Y3Qgc28gd2UgbXVzdAorICAgIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgZ29vZCAnc3RydWN0IFRGVFAnIHRvIHBsYXkgd2l0aC4gRm9yIG5ldyBjb25uZWN0aW9ucywKKyAgICB0aGUgc3RydWN0IFRGVFAgaXMgYWxsb2NhdGVkIGFuZCBzZXR1cCBpbiB0aGUgdGZ0cF9jb25uZWN0KCkgZnVuY3Rpb24uCisgICovCisgIEN1cmxfcmVzZXRfcmVxcHJvdG8oY29ubik7CisKKyAgaWYoIWNvbm4tPnByb3RvLnRmdHBjKSB7CisgICAgY29kZSA9IHRmdHBfY29ubmVjdChjb25uLCBkb25lKTsKKyAgICBpZihjb2RlKQorICAgICAgcmV0dXJuIGNvZGU7CisgIH0KKyAgc3RhdGUgPSAodGZ0cF9zdGF0ZV9kYXRhX3QgKiljb25uLT5wcm90by50ZnRwYzsKKworICBjb2RlID0gdGZ0cF9wZXJmb3JtKGNvbm4sIGRvbmUpOworCisgIC8qIElmIHRmdHBfcGVyZm9ybSgpIHJldHVybmVkIGFuIGVycm9yLCB1c2UgdGhhdCBmb3IgcmV0dXJuIGNvZGUuIElmIGl0CisgICAgIHdhcyBPSywgc2VlIGlmIHRmdHBfdHJhbnNsYXRlX2NvZGUoKSBoYXMgYW4gZXJyb3IuICovCisgIGlmKGNvZGUgPT0gQ1VSTEVfT0spCisgICAgLyogSWYgd2UgaGF2ZSBlbmNvdW50ZXJlZCBhbiBpbnRlcm5hbCB0ZnRwIGVycm9yLCB0cmFuc2xhdGUgaXQuICovCisgICAgY29kZSA9IHRmdHBfdHJhbnNsYXRlX2NvZGUoc3RhdGUtPmVycm9yKTsKKworICByZXR1cm4gY29kZTsKK30KKworc3RhdGljIENVUkxjb2RlIHRmdHBfc2V0dXBfY29ubmVjdGlvbihzdHJ1Y3QgY29ubmVjdGRhdGEgKiBjb25uKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIGNoYXIgKiB0eXBlOworICBjaGFyIGNvbW1hbmQ7CisKKyAgY29ubi0+c29ja3R5cGUgPSBTT0NLX0RHUkFNOyAgIC8qIFVEUCBkYXRhZ3JhbSBiYXNlZCAqLworCisgIC8qIFRGVFAgVVJMcyBzdXBwb3J0IGFuIGV4dGVuc2lvbiBsaWtlICI7bW9kZT08dHlwZWNvZGU+IiB0aGF0CisgICAqIHdlJ2xsIHRyeSB0byBnZXQgbm93ISAqLworICB0eXBlID0gc3Ryc3RyKGRhdGEtPnN0YXRlLnBhdGgsICI7bW9kZT0iKTsKKworICBpZighdHlwZSkKKyAgICB0eXBlID0gc3Ryc3RyKGNvbm4tPmhvc3QucmF3YWxsb2MsICI7bW9kZT0iKTsKKworICBpZih0eXBlKSB7CisgICAgKnR5cGUgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBpdCB3YXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgaG9zdG5hbWUgKi8KKyAgICBjb21tYW5kID0gQ3VybF9yYXdfdG91cHBlcih0eXBlWzZdKTsKKworICAgIHN3aXRjaCAoY29tbWFuZCkgeworICAgIGNhc2UgJ0EnOiAvKiBBU0NJSSBtb2RlICovCisgICAgY2FzZSAnTic6IC8qIE5FVEFTQ0lJIG1vZGUgKi8KKyAgICAgIGRhdGEtPnNldC5wcmVmZXJfYXNjaWkgPSBUUlVFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdPJzogLyogb2N0ZXQgbW9kZSAqLworICAgIGNhc2UgJ0knOiAvKiBiaW5hcnkgbW9kZSAqLworICAgIGRlZmF1bHQ6CisgICAgICAvKiBzd2l0Y2ggb2ZmIEFTQ0lJICovCisgICAgICBkYXRhLT5zZXQucHJlZmVyX2FzY2lpID0gRkFMU0U7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi90ZnRwLmggYi9jdXJsLTcuMjUuMC9saWIvdGZ0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZDY3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvdGZ0cC5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX19URlRQX0gKKyNkZWZpbmUgX19URlRQX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIENVUkxfRElTQUJMRV9URlRQCitleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfdGZ0cDsKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvdGltZXZhbC5jIGIvY3VybC03LjI1LjAvbGliL3RpbWV2YWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQ3MjAxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3RpbWV2YWwuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ0aW1ldmFsLmgiCisKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChNU0RPUykKKworc3RydWN0IHRpbWV2YWwgY3VybHhfdHZub3codm9pZCkKK3sKKyAgLyoKKyAgKiogR2V0VGlja0NvdW50KCkgaXMgYXZhaWxhYmxlIG9uIF9hbGxfIFdpbmRvd3MgdmVyc2lvbnMgZnJvbSBXOTUgdXAKKyAgKiogdG8gbm93YWRheXMuIFJldHVybnMgbWlsbGlzZWNvbmRzIGVsYXBzZWQgc2luY2UgbGFzdCBzeXN0ZW0gYm9vdCwKKyAgKiogaW5jcmVhc2VzIG1vbm90b25pY2FsbHkgYW5kIHdyYXBzIG9uY2UgNDkuNyBkYXlzIGhhdmUgZWxhcHNlZC4KKyAgKi8KKyAgc3RydWN0IHRpbWV2YWwgbm93OworICBEV09SRCBtaWxsaXNlY29uZHMgPSBHZXRUaWNrQ291bnQoKTsKKyAgbm93LnR2X3NlYyA9IG1pbGxpc2Vjb25kcyAvIDEwMDA7CisgIG5vdy50dl91c2VjID0gKG1pbGxpc2Vjb25kcyAlIDEwMDApICogMTAwMDsKKyAgcmV0dXJuIG5vdzsKK30KKworI2VsaWYgZGVmaW5lZChIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDKQorCitzdHJ1Y3QgdGltZXZhbCBjdXJseF90dm5vdyh2b2lkKQoreworICAvKgorICAqKiBjbG9ja19nZXR0aW1lKCkgaXMgZ3JhbnRlZCB0byBiZSBpbmNyZWFzZWQgbW9ub3RvbmljYWxseSB3aGVuIHRoZQorICAqKiBtb25vdG9uaWMgY2xvY2sgaXMgcXVlcmllZC4gVGltZSBzdGFydGluZyBwb2ludCBpcyB1bnNwZWNpZmllZCwgaXQKKyAgKiogY291bGQgYmUgdGhlIHN5c3RlbSBzdGFydC11cCB0aW1lLCB0aGUgRXBvY2gsIG9yIHNvbWV0aGluZyBlbHNlLAorICAqKiBpbiBhbnkgY2FzZSB0aGUgdGltZSBzdGFydGluZyBwb2ludCBkb2VzIG5vdCBjaGFuZ2Ugb25jZSB0aGF0IHRoZQorICAqKiBzeXN0ZW0gaGFzIHN0YXJ0ZWQgdXAuCisgICovCisgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKyAgc3RydWN0IHRpbWVzcGVjIHRzbm93OworICBpZigwID09IGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHNub3cpKSB7CisgICAgbm93LnR2X3NlYyA9IHRzbm93LnR2X3NlYzsKKyAgICBub3cudHZfdXNlYyA9IHRzbm93LnR2X25zZWMgLyAxMDAwOworICB9CisgIC8qCisgICoqIEV2ZW4gd2hlbiB0aGUgY29uZmlndXJlIHByb2Nlc3MgaGFzIHRydWx5IGRldGVjdGVkIG1vbm90b25pYyBjbG9jaworICAqKiBhdmFpbGFiaWxpdHksIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IGl0IGlzIG5vdCBhY3R1YWxseSBhdmFpbGFibGUgYXQKKyAgKiogcnVuLXRpbWUuIFdoZW4gdGhpcyBvY2N1cnMgc2ltcGx5IGZhbGxiYWNrIHRvIG90aGVyIHRpbWUgc291cmNlLgorICAqLworI2lmZGVmIEhBVkVfR0VUVElNRU9GREFZCisgIGVsc2UKKyAgICAodm9pZClnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisjZWxzZQorICBlbHNlIHsKKyAgICBub3cudHZfc2VjID0gKGxvbmcpdGltZShOVUxMKTsKKyAgICBub3cudHZfdXNlYyA9IDA7CisgIH0KKyNlbmRpZgorICByZXR1cm4gbm93OworfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VUVElNRU9GREFZKQorCitzdHJ1Y3QgdGltZXZhbCBjdXJseF90dm5vdyh2b2lkKQoreworICAvKgorICAqKiBnZXR0aW1lb2ZkYXkoKSBpcyBub3QgZ3JhbnRlZCB0byBiZSBpbmNyZWFzZWQgbW9ub3RvbmljYWxseSwgZHVlIHRvCisgICoqIGNsb2NrIGRyaWZ0aW5nIGFuZCBleHRlcm5hbCBzb3VyY2UgdGltZSBzeW5jaHJvbml6YXRpb24gaXQgY2FuIGp1bXAKKyAgKiogZm9yd2FyZCBvciBiYWNrd2FyZCBpbiB0aW1lLgorICAqLworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgICh2b2lkKWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKyAgcmV0dXJuIG5vdzsKK30KKworI2Vsc2UKKworc3RydWN0IHRpbWV2YWwgY3VybHhfdHZub3codm9pZCkKK3sKKyAgLyoKKyAgKiogdGltZSgpIHJldHVybnMgdGhlIHZhbHVlIG9mIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgRXBvY2guCisgICovCisgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKyAgbm93LnR2X3NlYyA9IChsb25nKXRpbWUoTlVMTCk7CisgIG5vdy50dl91c2VjID0gMDsKKyAgcmV0dXJuIG5vdzsKK30KKworI2VuZGlmCisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIG1vcmUgcmVjZW50IHRpbWUsIGFzIG90aGVyd2lzZQorICogd2UnbGwgZ2V0IGEgd2VpcmQgbmVnYXRpdmUgdGltZS1kaWZmIGJhY2suLi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgdGltZSBkaWZmZXJlbmNlIGluIG51bWJlciBvZiBtaWxsaXNlY29uZHMuCisgKi8KK2xvbmcgY3VybHhfdHZkaWZmKHN0cnVjdCB0aW1ldmFsIG5ld2VyLCBzdHJ1Y3QgdGltZXZhbCBvbGRlcikKK3sKKyAgcmV0dXJuIChuZXdlci50dl9zZWMtb2xkZXIudHZfc2VjKSoxMDAwKworICAgIChuZXdlci50dl91c2VjLW9sZGVyLnR2X3VzZWMpLzEwMDA7Cit9CisKKy8qCisgKiBTYW1lIGFzIGN1cmx4X3R2ZGlmZiBidXQgd2l0aCBmdWxsIHVzZWMgcmVzb2x1dGlvbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgdGltZSBkaWZmZXJlbmNlIGluIHNlY29uZHMgd2l0aCBzdWJzZWNvbmQgcmVzb2x1dGlvbi4KKyAqLworZG91YmxlIGN1cmx4X3R2ZGlmZl9zZWNzKHN0cnVjdCB0aW1ldmFsIG5ld2VyLCBzdHJ1Y3QgdGltZXZhbCBvbGRlcikKK3sKKyAgaWYobmV3ZXIudHZfc2VjICE9IG9sZGVyLnR2X3NlYykKKyAgICByZXR1cm4gKGRvdWJsZSkobmV3ZXIudHZfc2VjLW9sZGVyLnR2X3NlYykrCisgICAgICAoZG91YmxlKShuZXdlci50dl91c2VjLW9sZGVyLnR2X3VzZWMpLzEwMDAwMDAuMDsKKyAgZWxzZQorICAgIHJldHVybiAoZG91YmxlKShuZXdlci50dl91c2VjLW9sZGVyLnR2X3VzZWMpLzEwMDAwMDAuMDsKK30KKworLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgZ2l2ZW4gaW5wdXQgdGltZXZhbCBzdHJ1Y3QgKi8KK2xvbmcgQ3VybF90dmxvbmcoc3RydWN0IHRpbWV2YWwgdDEpCit7CisgIHJldHVybiB0MS50dl9zZWM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvdGltZXZhbC5oIGIvY3VybC03LjI1LjAvbGliL3RpbWV2YWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzc5YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3RpbWV2YWwuaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIF9fVElNRVZBTF9ICisjZGVmaW5lIF9fVElNRVZBTF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENBVVRJT046IHRoaXMgaGVhZGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2hlbiBpbmNsdWRlZCBieSB0aGUgYXBwLXNpZGUKKyAqIGFzIHdlbGwgYXMgdGhlIGxpYnJhcnkuIERvIG5vdCBtaXggd2l0aCBsaWJyYXJ5IGludGVybmFscyEKKyAqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworc3RydWN0IHRpbWV2YWwgY3VybHhfdHZub3codm9pZCk7CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgKHQxKSBpcyB0aGUgbW9yZSByZWNlbnQgdGltZSBhbmQgdDIgaXMKKyAqIHRoZSBvbGRlciB0aW1lLCBhcyBvdGhlcndpc2UgeW91IGdldCBhIHdlaXJkIG5lZ2F0aXZlIHRpbWUtZGlmZiBiYWNrLi4uCisgKgorICogUmV0dXJuczogdGhlIHRpbWUgZGlmZmVyZW5jZSBpbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLgorICovCitsb25nIGN1cmx4X3R2ZGlmZihzdHJ1Y3QgdGltZXZhbCB0MSwgc3RydWN0IHRpbWV2YWwgdDIpOworCisvKgorICogU2FtZSBhcyBjdXJseF90dmRpZmYgYnV0IHdpdGggZnVsbCB1c2VjIHJlc29sdXRpb24uCisgKgorICogUmV0dXJuczogdGhlIHRpbWUgZGlmZmVyZW5jZSBpbiBzZWNvbmRzIHdpdGggc3Vic2Vjb25kIHJlc29sdXRpb24uCisgKi8KK2RvdWJsZSBjdXJseF90dmRpZmZfc2VjcyhzdHJ1Y3QgdGltZXZhbCB0MSwgc3RydWN0IHRpbWV2YWwgdDIpOworCitsb25nIEN1cmxfdHZsb25nKHN0cnVjdCB0aW1ldmFsIHQxKTsKKworLyogVGhlc2UgdHdvIGRlZmluZXMgYmVsb3cgZXhpc3QgdG8gcHJvdmlkZSB0aGUgb2xkZXIgQVBJIGZvciBsaWJyYXJ5CisgICBpbnRlcm5hbHMgb25seS4gKi8KKyNkZWZpbmUgQ3VybF90dm5vdygpIGN1cmx4X3R2bm93KCkKKyNkZWZpbmUgQ3VybF90dmRpZmYoeCx5KSBjdXJseF90dmRpZmYoeCx5KQorI2RlZmluZSBDdXJsX3R2ZGlmZl9zZWNzKHgseSkgY3VybHhfdHZkaWZmX3NlY3MoeCx5KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi90cmFuc2Zlci5jIGIvY3VybC03LjI1LjAvbGliL3RyYW5zZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwNjFiZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi90cmFuc2Zlci5jCkBAIC0wLDAgKzEsMjMzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSAic3RydG9vZmZ0LmgiCisjaW5jbHVkZSAic3RyZXF1YWwuaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TT0NLRVQKKyNlcnJvciAiV2UgY2FuJ3QgY29tcGlsZSB3aXRob3V0IHNvY2tldCgpIHN1cHBvcnQhIgorI2VuZGlmCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAibmV0cmMuaCIKKworI2luY2x1ZGUgImNvbnRlbnRfZW5jb2RpbmcuaCIKKyNpbmNsdWRlICJob3N0aXAuaCIKKyNpbmNsdWRlICJ0cmFuc2Zlci5oIgorI2luY2x1ZGUgInNlbmRmLmgiCisjaW5jbHVkZSAic3BlZWRjaGVjay5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAiaHR0cC5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgImdldGluZm8uaCIKKyNpbmNsdWRlICJzc2xnZW4uaCIKKyNpbmNsdWRlICJodHRwX2RpZ2VzdC5oIgorI2luY2x1ZGUgImN1cmxfbnRsbS5oIgorI2luY2x1ZGUgImh0dHBfbmVnb3RpYXRlLmgiCisjaW5jbHVkZSAic2hhcmUuaCIKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgIm11bHRpaWYuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAibm9uLWFzY2lpLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKy8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNkZWZpbmUgQ1VSTF9USU1FT1VUX0VYUEVDVF8xMDAgMTAwMCAvKiBjb3VudGluZyBtcyBoZXJlICovCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgcmVhZCBjYWxsYmFjayB0byBmaWxsIG91ciBidWZmZXIgd2l0aCBkYXRhCisgKiB0byB1cGxvYWQuCisgKi8KK0NVUkxjb2RlIEN1cmxfZmlsbHJlYWRidWZmZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgYnl0ZXMsIGludCAqbnJlYWRwKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHNpemVfdCBidWZmZXJzaXplID0gKHNpemVfdClieXRlczsKKyAgaW50IG5yZWFkOworI2lmZGVmIENVUkxfRE9FU19DT05WRVJTSU9OUworICBib29sIHNlbmRpbmdfaHR0cF9oZWFkZXJzID0gRkFMU0U7CisKKyAgaWYoKGNvbm4tPmhhbmRsZXItPnByb3RvY29sJihDVVJMUFJPVE9fSFRUUHxDVVJMUFJPVE9fUlRTUCkpICYmCisgICAgIChkYXRhLT5zdGF0ZS5wcm90by5odHRwLT5zZW5kaW5nID09IEhUVFBTRU5EX1JFUVVFU1QpKSB7CisgICAgLyogV2UncmUgc2VuZGluZyB0aGUgSFRUUCByZXF1ZXN0IGhlYWRlcnMsIG5vdCB0aGUgZGF0YS4KKyAgICAgICBSZW1lbWJlciB0aGF0IHNvIHdlIGRvbid0IHJlLXRyYW5zbGF0ZSB0aGVtIGludG8gZ2FyYmFnZS4gKi8KKyAgICBzZW5kaW5nX2h0dHBfaGVhZGVycyA9IFRSVUU7CisgIH0KKyNlbmRpZgorCisgIGlmKGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5KSB7CisgICAgLyogaWYgY2h1bmtlZCBUcmFuc2Zlci1FbmNvZGluZyAqLworICAgIGJ1ZmZlcnNpemUgLT0gKDggKyAyICsgMik7ICAgLyogMzJiaXQgaGV4ICsgQ1JMRiArIENSTEYgKi8KKyAgICBkYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlICs9ICg4ICsgMik7IC8qIDMyYml0IGhleCArIENSTEYgKi8KKyAgfQorCisgIC8qIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHNpemVfdCwgc28gd2UgdHlwZWNhc3QgdG8gaW50IHRvIHByZXZlbnQgd2FybmluZ3MKKyAgICAgd2l0aCBwaWNreSBjb21waWxlcnMgKi8KKyAgbnJlYWQgPSAoaW50KWNvbm4tPmZyZWFkX2Z1bmMoZGF0YS0+cmVxLnVwbG9hZF9mcm9taGVyZSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyc2l6ZSwgY29ubi0+ZnJlYWRfaW4pOworCisgIGlmKG5yZWFkID09IENVUkxfUkVBREZVTkNfQUJPUlQpIHsKKyAgICBmYWlsZihkYXRhLCAib3BlcmF0aW9uIGFib3J0ZWQgYnkgY2FsbGJhY2siKTsKKyAgICAqbnJlYWRwID0gMDsKKyAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKyAgfQorICBlbHNlIGlmKG5yZWFkID09IENVUkxfUkVBREZVTkNfUEFVU0UpIHsKKyAgICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7CisgICAgLyogQ1VSTF9SRUFERlVOQ19QQVVTRSBwYXVzZXMgcmVhZCBjYWxsYmFja3MgdGhhdCBmZWVkIHNvY2tldCB3cml0ZXMgKi8KKyAgICBrLT5rZWVwb24gfD0gS0VFUF9TRU5EX1BBVVNFOyAvKiBtYXJrIHNvY2tldCBzZW5kIGFzIHBhdXNlZCAqLworICAgIGlmKGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5KSB7CisgICAgICAvKiBCYWNrIG91dCB0aGUgcHJlYWxsb2NhdGlvbiBkb25lIGFib3ZlICovCisgICAgICBkYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlIC09ICg4ICsgMik7CisgICAgfQorICAgICpucmVhZHAgPSAwOworICAgIHJldHVybiBDVVJMRV9PSzsgLyogbm90aGluZyB3YXMgcmVhZCAqLworICB9CisgIGVsc2UgaWYoKHNpemVfdClucmVhZCA+IGJ1ZmZlcnNpemUpIHsKKyAgICAvKiB0aGUgcmVhZCBmdW5jdGlvbiByZXR1cm5lZCBhIHRvbyBsYXJnZSB2YWx1ZSAqLworICAgICpucmVhZHAgPSAwOworICAgIGZhaWxmKGRhdGEsICJyZWFkIGZ1bmN0aW9uIHJldHVybmVkIGZ1bm55IHZhbHVlIik7CisgICAgcmV0dXJuIENVUkxFX1JFQURfRVJST1I7CisgIH0KKworICBpZighZGF0YS0+cmVxLmZvcmJpZGNodW5rICYmIGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5KSB7CisgICAgLyogaWYgY2h1bmtlZCBUcmFuc2Zlci1FbmNvZGluZworICAgICAqICAgIGJ1aWxkIGNodW5rOgorICAgICAqCisgICAgICogICAgICAgIDxIRVggU0laRT4gQ1JMRgorICAgICAqICAgICAgICA8REFUQT4gQ1JMRgorICAgICAqLworICAgIC8qIE9uIG5vbi1BU0NJSSBwbGF0Zm9ybXMgdGhlIDxEQVRBPiBtYXkgb3IgbWF5IG5vdCBiZQorICAgICAgIHRyYW5zbGF0ZWQgYmFzZWQgb24gc2V0LnByZWZlcl9hc2NpaSB3aGlsZSB0aGUgcHJvdG9jb2wKKyAgICAgICBwb3J0aW9uIG11c3QgYWx3YXlzIGJlIHRyYW5zbGF0ZWQgdG8gdGhlIG5ldHdvcmsgZW5jb2RpbmcuCisgICAgICAgVG8gZnVydGhlciBjb21wbGljYXRlIG1hdHRlcnMsIGxpbmUgZW5kIGNvbnZlcnNpb24gbWlnaHQgYmUKKyAgICAgICBkb25lIGxhdGVyIG9uLCBzbyB3ZSBuZWVkIHRvIHByZXZlbnQgQ1JMRnMgZnJvbSBiZWNvbWluZworICAgICAgIENSQ1JMRnMgaWYgdGhhdCdzIHRoZSBjYXNlLiAgVG8gZG8gdGhpcyB3ZSB1c2UgYmFyZSBMRnMKKyAgICAgICBoZXJlLCBrbm93aW5nIHRoZXknbGwgYmVjb21lIENSTEZzIGxhdGVyIG9uLgorICAgICAqLworCisgICAgY2hhciBoZXhidWZmZXJbMTFdOworICAgIGNvbnN0IGNoYXIgKmVuZG9mbGluZV9uYXRpdmU7CisgICAgY29uc3QgY2hhciAqZW5kb2ZsaW5lX25ldHdvcms7CisgICAgaW50IGhleGxlbjsKKworICAgIGlmKAorI2lmZGVmIENVUkxfRE9fTElORUVORF9DT05WCisgICAgICAgKGRhdGEtPnNldC5wcmVmZXJfYXNjaWkpIHx8CisjZW5kaWYKKyAgICAgICAoZGF0YS0+c2V0LmNybGYpKSB7CisgICAgICAvKiBcbiB3aWxsIGJlY29tZSBcclxuIGxhdGVyIG9uICovCisgICAgICBlbmRvZmxpbmVfbmF0aXZlICA9ICJcbiI7CisgICAgICBlbmRvZmxpbmVfbmV0d29yayA9ICJceDBhIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBlbmRvZmxpbmVfbmF0aXZlICA9ICJcclxuIjsKKyAgICAgIGVuZG9mbGluZV9uZXR3b3JrID0gIlx4MGRceDBhIjsKKyAgICB9CisgICAgaGV4bGVuID0gc25wcmludGYoaGV4YnVmZmVyLCBzaXplb2YoaGV4YnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAiJXglcyIsIG5yZWFkLCBlbmRvZmxpbmVfbmF0aXZlKTsKKworICAgIC8qIG1vdmUgYnVmZmVyIHBvaW50ZXIgKi8KKyAgICBkYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlIC09IGhleGxlbjsKKyAgICBucmVhZCArPSBoZXhsZW47CisKKyAgICAvKiBjb3B5IHRoZSBwcmVmaXggdG8gdGhlIGJ1ZmZlciwgbGVhdmluZyBvdXQgdGhlIE5VTCAqLworICAgIG1lbWNweShkYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlLCBoZXhidWZmZXIsIGhleGxlbik7CisKKyAgICAvKiBhbHdheXMgYXBwZW5kIEFTQ0lJIENSTEYgdG8gdGhlIGRhdGEgKi8KKyAgICBtZW1jcHkoZGF0YS0+cmVxLnVwbG9hZF9mcm9taGVyZSArIG5yZWFkLAorICAgICAgICAgICBlbmRvZmxpbmVfbmV0d29yaywKKyAgICAgICAgICAgc3RybGVuKGVuZG9mbGluZV9uZXR3b3JrKSk7CisKKyNpZmRlZiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMKKyAgICBDVVJMY29kZSByZXM7CisgICAgaW50IGxlbmd0aDsKKyAgICBpZihkYXRhLT5zZXQucHJlZmVyX2FzY2lpKSB7CisgICAgICAvKiB0cmFuc2xhdGUgdGhlIHByb3RvY29sIGFuZCBkYXRhICovCisgICAgICBsZW5ndGggPSBucmVhZDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBqdXN0IHRyYW5zbGF0ZSB0aGUgcHJvdG9jb2wgcG9ydGlvbiAqLworICAgICAgbGVuZ3RoID0gc3RybGVuKGhleGJ1ZmZlcik7CisgICAgfQorICAgIHJlcyA9IEN1cmxfY29udmVydF90b19uZXR3b3JrKGRhdGEsIGRhdGEtPnJlcS51cGxvYWRfZnJvbWhlcmUsIGxlbmd0aCk7CisgICAgLyogQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsgY2FsbHMgZmFpbGYgaWYgdW5zdWNjZXNzZnVsICovCisgICAgaWYocmVzKQorICAgICAgcmV0dXJuKHJlcyk7CisjZW5kaWYgLyogQ1VSTF9ET0VTX0NPTlZFUlNJT05TICovCisKKyAgICBpZigobnJlYWQgLSBoZXhsZW4pID09IDApCisgICAgICAvKiBtYXJrIHRoaXMgYXMgZG9uZSBvbmNlIHRoaXMgY2h1bmsgaXMgdHJhbnNmZXJyZWQgKi8KKyAgICAgIGRhdGEtPnJlcS51cGxvYWRfZG9uZSA9IFRSVUU7CisKKyAgICBucmVhZCs9KGludClzdHJsZW4oZW5kb2ZsaW5lX25hdGl2ZSk7IC8qIGZvciB0aGUgYWRkZWQgZW5kIG9mIGxpbmUgKi8KKyAgfQorI2lmZGVmIENVUkxfRE9FU19DT05WRVJTSU9OUworICBlbHNlIGlmKChkYXRhLT5zZXQucHJlZmVyX2FzY2lpKSAmJiAoIXNlbmRpbmdfaHR0cF9oZWFkZXJzKSkgeworICAgIENVUkxjb2RlIHJlczsKKyAgICByZXMgPSBDdXJsX2NvbnZlcnRfdG9fbmV0d29yayhkYXRhLCBkYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlLCBucmVhZCk7CisgICAgLyogQ3VybF9jb252ZXJ0X3RvX25ldHdvcmsgY2FsbHMgZmFpbGYgaWYgdW5zdWNjZXNzZnVsICovCisgICAgaWYocmVzICE9IENVUkxFX09LKQorICAgICAgcmV0dXJuKHJlcyk7CisgIH0KKyNlbmRpZiAvKiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMgKi8KKworICAqbnJlYWRwID0gbnJlYWQ7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisKKy8qCisgKiBDdXJsX3JlYWRyZXdpbmQoKSByZXdpbmRzIHRoZSByZWFkIHN0cmVhbS4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgSFRUUAorICogUE9TVC9QVVQgd2l0aCBtdWx0aS1wYXNzIGF1dGhlbnRpY2F0aW9uIHdoZW4gYSBzZW5kaW5nIHdhcyBkZW5pZWQgYW5kIGEKKyAqIHJlc2VuZCBpcyBuZWNlc3NhcnkuCisgKi8KK0NVUkxjb2RlIEN1cmxfcmVhZHJld2luZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICBjb25uLT5iaXRzLnJld2luZGFmdGVyc2VuZCA9IEZBTFNFOyAvKiB3ZSByZXdpbmQgbm93ICovCisKKyAgLyogZXhwbGljaXRseSBzd2l0Y2ggb2ZmIHNlbmRpbmcgZGF0YSBvbiB0aGlzIGNvbm5lY3Rpb24gbm93IHNpbmNlIHdlIGFyZQorICAgICBhYm91dCB0byByZXN0YXJ0IGEgbmV3IHRyYW5zZmVyIGFuZCB0aHVzIHdlIHdhbnQgdG8gYXZvaWQgaW5hZHZlcnRlbnRseQorICAgICBzZW5kaW5nIG1vcmUgZGF0YSBvbiB0aGUgZXhpc3RpbmcgY29ubmVjdGlvbiB1bnRpbCB0aGUgbmV4dCB0cmFuc2ZlcgorICAgICBzdGFydHMgKi8KKyAgZGF0YS0+cmVxLmtlZXBvbiAmPSB+S0VFUF9TRU5EOworCisgIC8qIFdlIGhhdmUgc2VudCBhd2F5IGRhdGEuIElmIG5vdCB1c2luZyBDVVJMT1BUX1BPU1RGSUVMRFMgb3IKKyAgICAgQ1VSTE9QVF9IVFRQUE9TVCwgY2FsbCBhcHAgdG8gcmV3aW5kCisgICovCisgIGlmKGRhdGEtPnNldC5wb3N0ZmllbGRzIHx8CisgICAgIChkYXRhLT5zZXQuaHR0cHJlcSA9PSBIVFRQUkVRX1BPU1RfRk9STSkpCisgICAgOyAvKiBkbyBub3RoaW5nICovCisgIGVsc2UgeworICAgIGlmKGRhdGEtPnNldC5zZWVrX2Z1bmMpIHsKKyAgICAgIGludCBlcnI7CisKKyAgICAgIGVyciA9IChkYXRhLT5zZXQuc2Vla19mdW5jKShkYXRhLT5zZXQuc2Vla19jbGllbnQsIDAsIFNFRUtfU0VUKTsKKyAgICAgIGlmKGVycikgeworICAgICAgICBmYWlsZihkYXRhLCAic2VlayBjYWxsYmFjayByZXR1cm5lZCBlcnJvciAlZCIsIChpbnQpZXJyKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRkFJTF9SRVdJTkQ7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoZGF0YS0+c2V0LmlvY3RsX2Z1bmMpIHsKKyAgICAgIGN1cmxpb2VyciBlcnI7CisKKyAgICAgIGVyciA9IChkYXRhLT5zZXQuaW9jdGxfZnVuYykoZGF0YSwgQ1VSTElPQ01EX1JFU1RBUlRSRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuaW9jdGxfY2xpZW50KTsKKyAgICAgIGluZm9mKGRhdGEsICJ0aGUgaW9jdGwgY2FsbGJhY2sgcmV0dXJuZWQgJWRcbiIsIChpbnQpZXJyKTsKKworICAgICAgaWYoZXJyKSB7CisgICAgICAgIC8qIEZJWE1FOiBjb252ZXJ0IHRvIGEgaHVtYW4gcmVhZGFibGUgZXJyb3IgbWVzc2FnZSAqLworICAgICAgICBmYWlsZihkYXRhLCAiaW9jdGwgY2FsbGJhY2sgcmV0dXJuZWQgZXJyb3IgJWQiLCAoaW50KWVycik7CisgICAgICAgIHJldHVybiBDVVJMRV9TRU5EX0ZBSUxfUkVXSU5EOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIElmIG5vIENVUkxPUFRfUkVBREZVTkNUSU9OIGlzIHVzZWQsIHdlIGtub3cgdGhhdCB3ZSBvcGVyYXRlIG9uIGEKKyAgICAgICAgIGdpdmVuIEZJTEUgKiBzdHJlYW0gYW5kIHdlIGNhbiBhY3R1YWxseSBhdHRlbXB0IHRvIHJld2luZCB0aGF0CisgICAgICAgICBvdXJzZWx2ZXMgd2l0aCBmc2VlaygpICovCisgICAgICBpZihkYXRhLT5zZXQuZnJlYWRfZnVuYyA9PSAoY3VybF9yZWFkX2NhbGxiYWNrKWZyZWFkKSB7CisgICAgICAgIGlmKC0xICE9IGZzZWVrKGRhdGEtPnNldC5pbiwgMCwgU0VFS19TRVQpKQorICAgICAgICAgIC8qIHN1Y2Nlc3NmdWwgcmV3aW5kICovCisgICAgICAgICAgcmV0dXJuIENVUkxFX09LOworICAgICAgfQorCisgICAgICAvKiBubyBjYWxsYmFjayBzZXQgb3IgZmFpbHVyZSBhYm92ZSwgbWFrZXMgdXMgZmFpbCBhdCBvbmNlICovCisgICAgICBmYWlsZihkYXRhLCAibmVjZXNzYXJ5IGRhdGEgcmV3aW5kIHdhc24ndCBwb3NzaWJsZSIpOworICAgICAgcmV0dXJuIENVUkxFX1NFTkRfRkFJTF9SRVdJTkQ7CisgICAgfQorICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIGludCBkYXRhX3BlbmRpbmcoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICAvKiBpbiB0aGUgY2FzZSBvZiBsaWJzc2gyLCB3ZSBjYW4gbmV2ZXIgYmUgcmVhbGx5IHN1cmUgdGhhdCB3ZSBoYXZlIGVtcHRpZWQKKyAgICAgaXRzIGludGVybmFsIGJ1ZmZlcnMgc28gd2UgTVVTVCBhbHdheXMgdHJ5IHVudGlsIHdlIGdldCBFQUdBSU4gYmFjayAqLworICByZXR1cm4gY29ubi0+aGFuZGxlci0+cHJvdG9jb2wmKENVUkxQUk9UT19TQ1B8Q1VSTFBST1RPX1NGVFApIHx8CisgICAgQ3VybF9zc2xfZGF0YV9wZW5kaW5nKGNvbm4sIEZJUlNUU09DS0VUKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9yZXdpbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRoaXNtdWNoKQoreworICBERUJVR0FTU0VSVChjb25uLT5yZWFkX3BvcyA+PSB0aGlzbXVjaCk7CisKKyAgY29ubi0+cmVhZF9wb3MgLT0gdGhpc211Y2g7CisgIGNvbm4tPmJpdHMuc3RyZWFtX3dhc19yZXdvdW5kID0gVFJVRTsKKworI2lmZGVmIERFQlVHQlVJTEQKKyAgeworICAgIGNoYXIgYnVmWzUxMiArIDFdOworICAgIHNpemVfdCBzaG93OworCisgICAgc2hvdyA9IENVUkxNSU4oY29ubi0+YnVmX2xlbiAtIGNvbm4tPnJlYWRfcG9zLCBzaXplb2YoYnVmKS0xKTsKKyAgICBpZihjb25uLT5tYXN0ZXJfYnVmZmVyKSB7CisgICAgICBtZW1jcHkoYnVmLCBjb25uLT5tYXN0ZXJfYnVmZmVyICsgY29ubi0+cmVhZF9wb3MsIHNob3cpOworICAgICAgYnVmW3Nob3ddID0gJ1wwJzsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBidWZbMF0gPSAnXDAnOworICAgIH0KKworICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLAorICAgICAgICAgICAgICAgICAiQnVmZmVyIGFmdGVyIHN0cmVhbSByZXdpbmQgKHJlYWRfcG9zID0gJXp1KTogWyVzXVxuIiwKKyAgICAgICAgICAgICAgICAgY29ubi0+cmVhZF9wb3MsIGJ1ZikpOworICB9CisjZW5kaWYKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBDVVJMT1BUX1RJTUVDT05ESVRJT04gd2FzIG1ldCBieSBjb21wYXJpbmcgdGhlIHRpbWUgb2YgdGhlCisgKiByZW1vdGUgZG9jdW1lbnQgd2l0aCB0aGUgdGltZSBwcm92aWRlZCBieSBDVVJMT1BUX1RJTUVWQUwKKyAqLworYm9vbCBDdXJsX21lZXRzX3RpbWVjb25kaXRpb24oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIHRpbWVfdCB0aW1lb2Zkb2MpCit7CisgIGlmKCh0aW1lb2Zkb2MgPT0gMCkgfHwgKGRhdGEtPnNldC50aW1ldmFsdWUgPT0gMCkpCisgICAgcmV0dXJuIFRSVUU7CisKKyAgc3dpdGNoKGRhdGEtPnNldC50aW1lY29uZGl0aW9uKSB7CisgIGNhc2UgQ1VSTF9USU1FQ09ORF9JRk1PRFNJTkNFOgorICBkZWZhdWx0OgorICAgIGlmKHRpbWVvZmRvYyA8PSBkYXRhLT5zZXQudGltZXZhbHVlKSB7CisgICAgICBpbmZvZihkYXRhLAorICAgICAgICAgICAgIlRoZSByZXF1ZXN0ZWQgZG9jdW1lbnQgaXMgbm90IG5ldyBlbm91Z2hcbiIpOworICAgICAgZGF0YS0+aW5mby50aW1lY29uZCA9IFRSVUU7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGJyZWFrOworICBjYXNlIENVUkxfVElNRUNPTkRfSUZVTk1PRFNJTkNFOgorICAgIGlmKHRpbWVvZmRvYyA+PSBkYXRhLT5zZXQudGltZXZhbHVlKSB7CisgICAgICBpbmZvZihkYXRhLAorICAgICAgICAgICAgIlRoZSByZXF1ZXN0ZWQgZG9jdW1lbnQgaXMgbm90IG9sZCBlbm91Z2hcbiIpOworICAgICAgZGF0YS0+aW5mby50aW1lY29uZCA9IFRSVUU7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBHbyBhaGVhZCBhbmQgZG8gYSByZWFkIGlmIHdlIGhhdmUgYSByZWFkYWJsZSBzb2NrZXQgb3IgaWYKKyAqIHRoZSBzdHJlYW0gd2FzIHJld291bmQgKGluIHdoaWNoIGNhc2Ugd2UgaGF2ZSBkYXRhIGluIGEKKyAqIGJ1ZmZlcikKKyAqLworc3RhdGljIENVUkxjb2RlIHJlYWR3cml0ZV9kYXRhKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmRpZHdoYXQsIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzc2l6ZV90IG5yZWFkOyAvKiBudW1iZXIgb2YgYnl0ZXMgcmVhZCAqLworICBzaXplX3QgZXhjZXNzID0gMDsgLyogZXhjZXNzIGJ5dGVzIHJlYWQgKi8KKyAgYm9vbCBpc19lbXB0eV9kYXRhID0gRkFMU0U7CisgIGJvb2wgcmVhZG1vcmUgPSBGQUxTRTsgLyogdXNlZCBieSBSVFAgdG8gc2lnbmFsIGZvciBtb3JlIGRhdGEgKi8KKworICAqZG9uZSA9IEZBTFNFOworCisgIC8qIFRoaXMgaXMgd2hlcmUgd2UgbG9vcCB1bnRpbCB3ZSBoYXZlIHJlYWQgZXZlcnl0aGluZyB0aGVyZSBpcyB0bworICAgICByZWFkIG9yIHdlIGdldCBhIENVUkxFX0FHQUlOICovCisgIGRvIHsKKyAgICBzaXplX3QgYnVmZmVyc2l6ZSA9IGRhdGEtPnNldC5idWZmZXJfc2l6ZT8KKyAgICAgIGRhdGEtPnNldC5idWZmZXJfc2l6ZSA6IEJVRlNJWkU7CisgICAgc2l6ZV90IGJ5dGVzdG9yZWFkID0gYnVmZmVyc2l6ZTsKKworICAgIGlmKGstPnNpemUgIT0gLTEgJiYgIWstPmhlYWRlcikgeworICAgICAgLyogbWFrZSBzdXJlIHdlIGRvbid0IHJlYWQgInRvbyBtdWNoIiBpZiB3ZSBjYW4gaGVscCBpdCBzaW5jZSB3ZQorICAgICAgICAgbWlnaHQgYmUgcGlwZWxpbmluZyBhbmQgdGhlbiBzb21lb25lIGVsc2UgbWlnaHQgd2FudCB0byByZWFkIHdoYXQKKyAgICAgICAgIGZvbGxvd3MhICovCisgICAgICBjdXJsX29mZl90IHRvdGFsbGVmdCA9IGstPnNpemUgLSBrLT5ieXRlY291bnQ7CisgICAgICBpZih0b3RhbGxlZnQgPCAoY3VybF9vZmZfdClieXRlc3RvcmVhZCkKKyAgICAgICAgYnl0ZXN0b3JlYWQgPSAoc2l6ZV90KXRvdGFsbGVmdDsKKyAgICB9CisKKyAgICBpZihieXRlc3RvcmVhZCkgeworICAgICAgLyogcmVjZWl2ZSBkYXRhIGZyb20gdGhlIG5ldHdvcmshICovCisgICAgICByZXN1bHQgPSBDdXJsX3JlYWQoY29ubiwgY29ubi0+c29ja2ZkLCBrLT5idWYsIGJ5dGVzdG9yZWFkLCAmbnJlYWQpOworCisgICAgICAvKiByZWFkIHdvdWxkJ3ZlIGJsb2NrZWQgKi8KKyAgICAgIGlmKENVUkxFX0FHQUlOID09IHJlc3VsdCkKKyAgICAgICAgYnJlYWs7IC8qIGdldCBvdXQgb2YgbG9vcCAqLworCisgICAgICBpZihyZXN1bHQ+MCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiByZWFkIG5vdGhpbmcgYnV0IHNpbmNlIHdlIHdhbnRlZCBub3RoaW5nIHdlIGNvbnNpZGVyIHRoaXMgYW4gT0sKKyAgICAgICAgIHNpdHVhdGlvbiB0byBwcm9jZWVkIGZyb20gKi8KKyAgICAgIG5yZWFkID0gMDsKKyAgICB9CisKKyAgICBpZigoay0+Ynl0ZWNvdW50ID09IDApICYmIChrLT53cml0ZWJ5dGVjb3VudCA9PSAwKSkgeworICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9TVEFSVFRSQU5TRkVSKTsKKyAgICAgIGlmKGstPmV4cDEwMCA+IEVYUDEwMF9TRU5EX0RBVEEpCisgICAgICAgIC8qIHNldCB0aW1lIHN0YW1wIHRvIGNvbXBhcmUgd2l0aCB3aGVuIHdhaXRpbmcgZm9yIHRoZSAxMDAgKi8KKyAgICAgICAgay0+c3RhcnQxMDAgPSBDdXJsX3R2bm93KCk7CisgICAgfQorCisgICAgKmRpZHdoYXQgfD0gS0VFUF9SRUNWOworICAgIC8qIGluZGljYXRlcyBkYXRhIG9mIHplcm8gc2l6ZSwgaS5lLiBlbXB0eSBmaWxlICovCisgICAgaXNfZW1wdHlfZGF0YSA9ICgobnJlYWQgPT0gMCkgJiYgKGstPmJvZHl3cml0ZXMgPT0gMCkpID8gVFJVRSA6IEZBTFNFOworCisgICAgLyogTlVMIHRlcm1pbmF0ZSwgYWxsb3dpbmcgc3RyaW5nIG9wcyB0byBiZSB1c2VkICovCisgICAgaWYoMCA8IG5yZWFkIHx8IGlzX2VtcHR5X2RhdGEpIHsKKyAgICAgIGstPmJ1ZltucmVhZF0gPSAwOworICAgIH0KKyAgICBlbHNlIGlmKDAgPj0gbnJlYWQpIHsKKyAgICAgIC8qIGlmIHdlIHJlY2VpdmUgMCBvciBsZXNzIGhlcmUsIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uCisgICAgICAgICBhbmQgd2UgYmFpbCBvdXQgZnJvbSB0aGlzISAqLworICAgICAgREVCVUdGKGluZm9mKGRhdGEsICJucmVhZCA8PSAwLCBzZXJ2ZXIgY2xvc2VkIGNvbm5lY3Rpb24sIGJhaWxpbmdcbiIpKTsKKyAgICAgIGstPmtlZXBvbiAmPSB+S0VFUF9SRUNWOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogRGVmYXVsdCBidWZmZXIgdG8gdXNlIHdoZW4gd2Ugd3JpdGUgdGhlIGJ1ZmZlciwgaXQgbWF5IGJlIGNoYW5nZWQKKyAgICAgICBpbiB0aGUgZmxvdyBiZWxvdyBiZWZvcmUgdGhlIGFjdHVhbCBzdG9yaW5nIGlzIGRvbmUuICovCisgICAgay0+c3RyID0gay0+YnVmOworCisgICAgaWYoY29ubi0+aGFuZGxlci0+cmVhZHdyaXRlKSB7CisgICAgICByZXN1bHQgPSBjb25uLT5oYW5kbGVyLT5yZWFkd3JpdGUoZGF0YSwgY29ubiwgJm5yZWFkLCAmcmVhZG1vcmUpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgaWYocmVhZG1vcmUpCisgICAgICAgIGJyZWFrOworICAgIH0KKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorICAgIC8qIFNpbmNlIHRoaXMgaXMgYSB0d28tc3RhdGUgdGhpbmcsIHdlIGNoZWNrIGlmIHdlIGFyZSBwYXJzaW5nCisgICAgICAgaGVhZGVycyBhdCB0aGUgbW9tZW50IG9yIG5vdC4gKi8KKyAgICBpZihrLT5oZWFkZXIpIHsKKyAgICAgIC8qIHdlIGFyZSBpbiBwYXJzZS10aGUtaGVhZGVyLW1vZGUgKi8KKyAgICAgIGJvb2wgc3RvcF9yZWFkaW5nID0gRkFMU0U7CisgICAgICByZXN1bHQgPSBDdXJsX2h0dHBfcmVhZHdyaXRlX2hlYWRlcnMoZGF0YSwgY29ubiwgJm5yZWFkLCAmc3RvcF9yZWFkaW5nKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgaWYoY29ubi0+aGFuZGxlci0+cmVhZHdyaXRlICYmCisgICAgICAgICAoay0+bWF4ZG93bmxvYWQgPD0gMCAmJiBucmVhZCA+IDApKSB7CisgICAgICAgIHJlc3VsdCA9IGNvbm4tPmhhbmRsZXItPnJlYWR3cml0ZShkYXRhLCBjb25uLCAmbnJlYWQsICZyZWFkbW9yZSk7CisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZihyZWFkbW9yZSkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYoc3RvcF9yZWFkaW5nKSB7CisgICAgICAgIC8qIFdlJ3ZlIHN0b3BwZWQgZGVhbGluZyB3aXRoIGlucHV0LCBnZXQgb3V0IG9mIHRoZSBkby13aGlsZSBsb29wICovCisKKyAgICAgICAgaWYobnJlYWQgPiAwKSB7CisgICAgICAgICAgaWYoY29ubi0+ZGF0YS0+bXVsdGkgJiYgQ3VybF9tdWx0aV9jYW5QaXBlbGluZShjb25uLT5kYXRhLT5tdWx0aSkpIHsKKyAgICAgICAgICAgIGluZm9mKGRhdGEsCisgICAgICAgICAgICAgICAgICAiUmV3aW5kaW5nIHN0cmVhbSBieSA6ICV6ZCIKKyAgICAgICAgICAgICAgICAgICIgYnl0ZXMgb24gdXJsICVzICh6ZXJvLWxlbmd0aCBib2R5KVxuIiwKKyAgICAgICAgICAgICAgICAgIG5yZWFkLCBkYXRhLT5zdGF0ZS5wYXRoKTsKKyAgICAgICAgICAgIHJlYWRfcmV3aW5kKGNvbm4sIChzaXplX3QpbnJlYWQpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGluZm9mKGRhdGEsCisgICAgICAgICAgICAgICAgICAiRXhjZXNzIGZvdW5kIGluIGEgbm9uIHBpcGVsaW5lZCByZWFkOiIKKyAgICAgICAgICAgICAgICAgICIgZXhjZXNzID0gJXpkIgorICAgICAgICAgICAgICAgICAgIiB1cmwgPSAlcyAoemVyby1sZW5ndGggYm9keSlcbiIsCisgICAgICAgICAgICAgICAgICBucmVhZCwgZGF0YS0+c3RhdGUucGF0aCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENVUkxfRElTQUJMRV9IVFRQICovCisKKworICAgIC8qIFRoaXMgaXMgbm90IGFuICdlbHNlIGlmJyBzaW5jZSBpdCBtYXkgYmUgYSByZXN0IGZyb20gdGhlIGhlYWRlcgorICAgICAgIHBhcnNpbmcsIHdoZXJlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciBpcyBoZWFkZXJzIGFuZCB0aGUgZW5kCisgICAgICAgaXMgbm9uLWhlYWRlcnMuICovCisgICAgaWYoay0+c3RyICYmICFrLT5oZWFkZXIgJiYgKG5yZWFkID4gMCB8fCBpc19lbXB0eV9kYXRhKSkgeworCisjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCisgICAgICBpZigwID09IGstPmJvZHl3cml0ZXMgJiYgIWlzX2VtcHR5X2RhdGEpIHsKKyAgICAgICAgLyogVGhlc2UgY2hlY2tzIGFyZSBvbmx5IG1hZGUgdGhlIGZpcnN0IHRpbWUgd2UgYXJlIGFib3V0IHRvCisgICAgICAgICAgIHdyaXRlIGEgcGllY2Ugb2YgdGhlIGJvZHkgKi8KKyAgICAgICAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wmKENVUkxQUk9UT19IVFRQfENVUkxQUk9UT19SVFNQKSkgeworICAgICAgICAgIC8qIEhUVFAtb25seSBjaGVja3MgKi8KKworICAgICAgICAgIGlmKGRhdGEtPnJlcS5uZXd1cmwpIHsKKyAgICAgICAgICAgIGlmKGNvbm4tPmJpdHMuY2xvc2UpIHsKKyAgICAgICAgICAgICAgLyogQWJvcnQgYWZ0ZXIgdGhlIGhlYWRlcnMgaWYgImZvbGxvdyBMb2NhdGlvbiIgaXMgc2V0CisgICAgICAgICAgICAgICAgIGFuZCB3ZSdyZSBzZXQgdG8gY2xvc2UgYW55d2F5LiAqLworICAgICAgICAgICAgICBrLT5rZWVwb24gJj0gfktFRVBfUkVDVjsKKyAgICAgICAgICAgICAgKmRvbmUgPSBUUlVFOworICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBXZSBoYXZlIGEgbmV3IHVybCB0byBsb2FkLCBidXQgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlCisgICAgICAgICAgICAgICB0byByZS11c2UgdGhpcyBjb25uZWN0aW9uIHByb3Blcmx5LCB3ZSByZWFkIHRoZSBmdWxsCisgICAgICAgICAgICAgICByZXNwb25zZSBpbiAiaWdub3JlIG1vcmUiICovCisgICAgICAgICAgICBrLT5pZ25vcmVib2R5ID0gVFJVRTsKKyAgICAgICAgICAgIGluZm9mKGRhdGEsICJJZ25vcmluZyB0aGUgcmVzcG9uc2UtYm9keVxuIik7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKGRhdGEtPnN0YXRlLnJlc3VtZV9mcm9tICYmICFrLT5jb250ZW50X3JhbmdlICYmCisgICAgICAgICAgICAgKGRhdGEtPnNldC5odHRwcmVxPT1IVFRQUkVRX0dFVCkgJiYKKyAgICAgICAgICAgICAhay0+aWdub3JlYm9keSkgeworICAgICAgICAgICAgLyogd2Ugd2FudGVkIHRvIHJlc3VtZSBhIGRvd25sb2FkLCBhbHRob3VnaCB0aGUgc2VydmVyIGRvZXNuJ3QKKyAgICAgICAgICAgICAqIHNlZW0gdG8gc3VwcG9ydCB0aGlzIGFuZCB3ZSBkaWQgdGhpcyB3aXRoIGEgR0VUIChpZiBpdAorICAgICAgICAgICAgICogd2Fzbid0IGEgR0VUIHdlIGRpZCBhIFBPU1Qgb3IgUFVUIHJlc3VtZSkgKi8KKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJIVFRQIHNlcnZlciBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCAiCisgICAgICAgICAgICAgICAgICAiYnl0ZSByYW5nZXMuIENhbm5vdCByZXN1bWUuIik7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfUkFOR0VfRVJST1I7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYoZGF0YS0+c2V0LnRpbWVjb25kaXRpb24gJiYgIWRhdGEtPnN0YXRlLnJhbmdlKSB7CisgICAgICAgICAgICAvKiBBIHRpbWUgY29uZGl0aW9uIGhhcyBiZWVuIHNldCBBTkQgbm8gcmFuZ2VzIGhhdmUgYmVlbgorICAgICAgICAgICAgICAgcmVxdWVzdGVkLiBUaGlzIHNlZW1zIHRvIGJlIHdoYXQgY2hhcHRlciAxMy4zLjQgb2YKKyAgICAgICAgICAgICAgIFJGQyAyNjE2IGRlZmluZXMgdG8gYmUgdGhlIGNvcnJlY3QgYWN0aW9uIGZvciBhCisgICAgICAgICAgICAgICBIVFRQLzEuMSBjbGllbnQgKi8KKworICAgICAgICAgICAgaWYoIUN1cmxfbWVldHNfdGltZWNvbmRpdGlvbihkYXRhLCBrLT50aW1lb2Zkb2MpKSB7CisgICAgICAgICAgICAgICpkb25lID0gVFJVRTsKKyAgICAgICAgICAgICAgLyogd2UgYWJvcnQgdGhlIHRyYW5zZmVyIGJlZm9yZSBpdCBpcyBjb21wbGV0ZWQgPT0gd2UgcnVpbiB0aGUKKyAgICAgICAgICAgICAgICAgcmUtdXNlIGFiaWxpdHkuIENsb3NlIHRoZSBjb25uZWN0aW9uICovCisgICAgICAgICAgICAgIGNvbm4tPmJpdHMuY2xvc2UgPSBUUlVFOworICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSAvKiB3ZSBoYXZlIGEgdGltZSBjb25kaXRpb24gKi8KKworICAgICAgICB9IC8qIHRoaXMgaXMgSFRUUCBvciBSVFNQICovCisgICAgICB9IC8qIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2Ugd3JpdGUgYSBib2R5IHBhcnQgKi8KKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfSFRUUCAqLworCisgICAgICBrLT5ib2R5d3JpdGVzKys7CisKKyAgICAgIC8qIHBhc3MgZGF0YSB0byB0aGUgZGVidWcgZnVuY3Rpb24gYmVmb3JlIGl0IGdldHMgImRlY2h1bmtlZCIgKi8KKyAgICAgIGlmKGRhdGEtPnNldC52ZXJib3NlKSB7CisgICAgICAgIGlmKGstPmJhZGhlYWRlcikgeworICAgICAgICAgIEN1cmxfZGVidWcoZGF0YSwgQ1VSTElORk9fREFUQV9JTiwgZGF0YS0+c3RhdGUuaGVhZGVyYnVmZiwKKyAgICAgICAgICAgICAgICAgICAgIChzaXplX3Qpay0+aGJ1ZmxlbiwgY29ubik7CisgICAgICAgICAgaWYoay0+YmFkaGVhZGVyID09IEhFQURFUl9QQVJUSEVBREVSKQorICAgICAgICAgICAgQ3VybF9kZWJ1ZyhkYXRhLCBDVVJMSU5GT19EQVRBX0lOLAorICAgICAgICAgICAgICAgICAgICAgICBrLT5zdHIsIChzaXplX3QpbnJlYWQsIGNvbm4pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfSU4sCisgICAgICAgICAgICAgICAgICAgICBrLT5zdHIsIChzaXplX3QpbnJlYWQsIGNvbm4pOworICAgICAgfQorCisjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCisgICAgICBpZihrLT5jaHVuaykgeworICAgICAgICAvKgorICAgICAgICAgKiBIZXJlIGNvbWVzIGEgY2h1bmtlZCB0cmFuc2ZlciBmbHlpbmcgYW5kIHdlIG5lZWQgdG8gZGVjb2RlIHRoaXMKKyAgICAgICAgICogcHJvcGVybHkuICBXaGlsZSB0aGUgbmFtZSBzYXlzIHJlYWQsIHRoaXMgZnVuY3Rpb24gYm90aCByZWFkcworICAgICAgICAgKiBhbmQgd3JpdGVzIGF3YXkgdGhlIGRhdGEuIFRoZSByZXR1cm5lZCAnbnJlYWQnIGhvbGRzIHRoZSBudW1iZXIKKyAgICAgICAgICogb2YgYWN0dWFsIGRhdGEgaXQgd3JvdGUgdG8gdGhlIGNsaWVudC4KKyAgICAgICAgICovCisKKyAgICAgICAgQ0hVTktjb2RlIHJlcyA9CisgICAgICAgICAgQ3VybF9odHRwY2h1bmtfcmVhZChjb25uLCBrLT5zdHIsIG5yZWFkLCAmbnJlYWQpOworCisgICAgICAgIGlmKENIVU5LRV9PSyA8IHJlcykgeworICAgICAgICAgIGlmKENIVU5LRV9XUklURV9FUlJPUiA9PSByZXMpIHsKKyAgICAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgd3JpdGluZyBkYXRhIik7CisgICAgICAgICAgICByZXR1cm4gQ1VSTEVfV1JJVEVfRVJST1I7CisgICAgICAgICAgfQorICAgICAgICAgIGZhaWxmKGRhdGEsICJQcm9ibGVtICglZCkgaW4gdGhlIENodW5rZWQtRW5jb2RlZCBkYXRhIiwgKGludClyZXMpOworICAgICAgICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoQ0hVTktFX1NUT1AgPT0gcmVzKSB7CisgICAgICAgICAgc2l6ZV90IGRhdGFsZWZ0OworICAgICAgICAgIC8qIHdlJ3JlIGRvbmUgcmVhZGluZyBjaHVua3MhICovCisgICAgICAgICAgay0+a2VlcG9uICY9IH5LRUVQX1JFQ1Y7IC8qIHJlYWQgbm8gbW9yZSAqLworCisgICAgICAgICAgLyogVGhlcmUgYXJlIG5vdyBwb3NzaWJseSBOIG51bWJlciBvZiBieXRlcyBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgIHN0ciBidWZmZXIgdGhhdCB3ZXJlbid0IHdyaXR0ZW4gdG8gdGhlIGNsaWVudC4KKworICAgICAgICAgICAgIFdlIERPIGNhcmUgYWJvdXQgdGhpcyBkYXRhIGlmIHdlIGFyZSBwaXBlbGluaW5nLgorICAgICAgICAgICAgIFB1c2ggaXQgYmFjayB0byBiZSByZWFkIG9uIHRoZSBuZXh0IHBhc3MuICovCisKKyAgICAgICAgICBkYXRhbGVmdCA9IGNvbm4tPmNodW5rLmRhdGFsZWZ0OworICAgICAgICAgIGlmKGRhdGFsZWZ0ICE9IDApIHsKKyAgICAgICAgICAgIGluZm9mKGNvbm4tPmRhdGEsICJMZWZ0b3ZlcnMgYWZ0ZXIgY2h1bmtpbmc6ICV6dSBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgIGRhdGFsZWZ0KTsKKyAgICAgICAgICAgIGlmKGNvbm4tPmRhdGEtPm11bHRpICYmCisgICAgICAgICAgICAgICBDdXJsX211bHRpX2NhblBpcGVsaW5lKGNvbm4tPmRhdGEtPm11bHRpKSkgeworICAgICAgICAgICAgICAvKiBvbmx5IGF0dGVtcHQgdGhlIHJld2luZCBpZiB3ZSB0cnVseSBhcmUgcGlwZWxpbmluZyAqLworICAgICAgICAgICAgICBpbmZvZihjb25uLT5kYXRhLCAiUmV3aW5kaW5nICV6dSBieXRlc1xuIixkYXRhbGVmdCk7CisgICAgICAgICAgICAgIHJlYWRfcmV3aW5kKGNvbm4sIGRhdGFsZWZ0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogSWYgaXQgcmV0dXJuZWQgT0ssIHdlIGp1c3Qga2VlcCBnb2luZyAqLworICAgICAgfQorI2VuZGlmICAgLyogQ1VSTF9ESVNBQkxFX0hUVFAgKi8KKworICAgICAgLyogQWNjb3VudCBmb3IgYm9keSBjb250ZW50IHN0b3JlZCBpbiB0aGUgaGVhZGVyIGJ1ZmZlciAqLworICAgICAgaWYoay0+YmFkaGVhZGVyICYmICFrLT5pZ25vcmVib2R5KSB7CisgICAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiSW5jcmVhc2luZyBieXRlY291bnQgYnkgJXp1IGZyb20gaGJ1ZmxlblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGstPmhidWZsZW4pKTsKKyAgICAgICAgay0+Ynl0ZWNvdW50ICs9IGstPmhidWZsZW47CisgICAgICB9CisKKyAgICAgIGlmKCgtMSAhPSBrLT5tYXhkb3dubG9hZCkgJiYKKyAgICAgICAgIChrLT5ieXRlY291bnQgKyBucmVhZCA+PSBrLT5tYXhkb3dubG9hZCkpIHsKKworICAgICAgICBleGNlc3MgPSAoc2l6ZV90KShrLT5ieXRlY291bnQgKyBucmVhZCAtIGstPm1heGRvd25sb2FkKTsKKyAgICAgICAgaWYoZXhjZXNzID4gMCAmJiAhay0+aWdub3JlYm9keSkgeworICAgICAgICAgIGlmKGNvbm4tPmRhdGEtPm11bHRpICYmIEN1cmxfbXVsdGlfY2FuUGlwZWxpbmUoY29ubi0+ZGF0YS0+bXVsdGkpKSB7CisgICAgICAgICAgICAvKiBUaGUgJ2V4Y2VzcycgYW1vdW50IGJlbG93IGNhbid0IGJlIG1vcmUgdGhhbiBCVUZTSVpFIHdoaWNoCisgICAgICAgICAgICAgICBhbHdheXMgd2lsbCBmaXQgaW4gYSBzaXplX3QgKi8KKyAgICAgICAgICAgIGluZm9mKGRhdGEsCisgICAgICAgICAgICAgICAgICAiUmV3aW5kaW5nIHN0cmVhbSBieSA6ICV6dSIKKyAgICAgICAgICAgICAgICAgICIgYnl0ZXMgb24gdXJsICVzIChzaXplID0gJSIgRk9STUFUX09GRl9UCisgICAgICAgICAgICAgICAgICAiLCBtYXhkb3dubG9hZCA9ICUiIEZPUk1BVF9PRkZfVAorICAgICAgICAgICAgICAgICAgIiwgYnl0ZWNvdW50ID0gJSIgRk9STUFUX09GRl9UICIsIG5yZWFkID0gJXpkKVxuIiwKKyAgICAgICAgICAgICAgICAgIGV4Y2VzcywgZGF0YS0+c3RhdGUucGF0aCwKKyAgICAgICAgICAgICAgICAgIGstPnNpemUsIGstPm1heGRvd25sb2FkLCBrLT5ieXRlY291bnQsIG5yZWFkKTsKKyAgICAgICAgICAgIHJlYWRfcmV3aW5kKGNvbm4sIGV4Y2Vzcyk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW5mb2YoZGF0YSwKKyAgICAgICAgICAgICAgICAgICJFeGNlc3MgZm91bmQgaW4gYSBub24gcGlwZWxpbmVkIHJlYWQ6IgorICAgICAgICAgICAgICAgICAgIiBleGNlc3MgPSAlenUiCisgICAgICAgICAgICAgICAgICAiLCBzaXplID0gJSIgRk9STUFUX09GRl9UCisgICAgICAgICAgICAgICAgICAiLCBtYXhkb3dubG9hZCA9ICUiIEZPUk1BVF9PRkZfVAorICAgICAgICAgICAgICAgICAgIiwgYnl0ZWNvdW50ID0gJSIgRk9STUFUX09GRl9UICJcbiIsCisgICAgICAgICAgICAgICAgICBleGNlc3MsIGstPnNpemUsIGstPm1heGRvd25sb2FkLCBrLT5ieXRlY291bnQpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG5yZWFkID0gKHNzaXplX3QpIChrLT5tYXhkb3dubG9hZCAtIGstPmJ5dGVjb3VudCk7CisgICAgICAgIGlmKG5yZWFkIDwgMCApIC8qIHRoaXMgc2hvdWxkIGJlIHVudXN1YWwgKi8KKyAgICAgICAgICBucmVhZCA9IDA7CisKKyAgICAgICAgay0+a2VlcG9uICY9IH5LRUVQX1JFQ1Y7IC8qIHdlJ3JlIGRvbmUgcmVhZGluZyAqLworICAgICAgfQorCisgICAgICBrLT5ieXRlY291bnQgKz0gbnJlYWQ7CisKKyAgICAgIEN1cmxfcGdyc1NldERvd25sb2FkQ291bnRlcihkYXRhLCBrLT5ieXRlY291bnQpOworCisgICAgICBpZighay0+Y2h1bmsgJiYgKG5yZWFkIHx8IGstPmJhZGhlYWRlciB8fCBpc19lbXB0eV9kYXRhKSkgeworICAgICAgICAvKiBJZiB0aGlzIGlzIGNodW5reSB0cmFuc2ZlciwgaXQgd2FzIGFscmVhZHkgd3JpdHRlbiAqLworCisgICAgICAgIGlmKGstPmJhZGhlYWRlciAmJiAhay0+aWdub3JlYm9keSkgeworICAgICAgICAgIC8qIHdlIHBhcnNlZCBhIHBpZWNlIG9mIGRhdGEgd3JvbmdseSBhc3N1bWluZyBpdCB3YXMgYSBoZWFkZXIKKyAgICAgICAgICAgICBhbmQgbm93IHdlIG91dHB1dCBpdCBhcyBib2R5IGluc3RlYWQgKi8KKworICAgICAgICAgIC8qIERvbid0IGxldCBleGNlc3MgZGF0YSBwb2xsdXRlIGJvZHkgd3JpdGVzICovCisgICAgICAgICAgaWYoay0+bWF4ZG93bmxvYWQgPT0gLTEgfHwgKGN1cmxfb2ZmX3Qpay0+aGJ1ZmxlbiA8PSBrLT5tYXhkb3dubG9hZCkKKyAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0JPRFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5oZWFkZXJidWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgay0+aGJ1Zmxlbik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KWstPm1heGRvd25sb2FkKTsKKworICAgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYoay0+YmFkaGVhZGVyIDwgSEVBREVSX0FMTEJBRCkgeworICAgICAgICAgIC8qIFRoaXMgc3dpdGNoIGhhbmRsZXMgdmFyaW91cyBjb250ZW50IGVuY29kaW5ncy4gSWYgdGhlcmUncyBhbgorICAgICAgICAgICAgIGVycm9yIGhlcmUsIGJlIHN1cmUgdG8gY2hlY2sgb3ZlciB0aGUgYWxtb3N0IGlkZW50aWNhbCBjb2RlCisgICAgICAgICAgICAgaW4gaHR0cF9jaHVua3MuYy4KKyAgICAgICAgICAgICBNYWtlIHN1cmUgdGhhdCBBTExfQ09OVEVOVF9FTkNPRElOR1MgY29udGFpbnMgYWxsIHRoZQorICAgICAgICAgICAgIGVuY29kaW5ncyBoYW5kbGVkIGhlcmUuICovCisjaWZkZWYgSEFWRV9MSUJaCisgICAgICAgICAgc3dpdGNoIChjb25uLT5kYXRhLT5zZXQuaHR0cF9jZV9za2lwID8KKyAgICAgICAgICAgICAgICAgIElERU5USVRZIDogay0+YXV0b19kZWNvZGluZykgeworICAgICAgICAgIGNhc2UgSURFTlRJVFk6CisjZW5kaWYKKyAgICAgICAgICAgIC8qIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgc2VydmVyIHNlbmRzIG5vCisgICAgICAgICAgICAgICBDb250ZW50LUVuY29kaW5nIGhlYWRlci4gU2VlIEN1cmxfcmVhZHdyaXRlX2luaXQ7IHRoZQorICAgICAgICAgICAgICAgbWVtc2V0KCkgY2FsbCBpbml0aWFsaXplcyBrLT5hdXRvX2RlY29kaW5nIHRvIHplcm8uICovCisgICAgICAgICAgICBpZighay0+aWdub3JlYm9keSkgeworCisjaWZuZGVmIENVUkxfRElTQUJMRV9QT1AzCisgICAgICAgICAgICAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sJkNVUkxQUk9UT19QT1AzKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfcG9wM193cml0ZShjb25uLCBrLT5zdHIsIG5yZWFkKTsKKyAgICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIENVUkxfRElTQUJMRV9QT1AzICovCisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCBrLT5zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJlYWQpOworICAgICAgICAgICAgfQorI2lmZGVmIEhBVkVfTElCWgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIERFRkxBVEU6CisgICAgICAgICAgICAvKiBBc3N1bWUgQ0xJRU5UV1JJVEVfQk9EWTsgaGVhZGVycyBhcmUgbm90IGVuY29kZWQuICovCisgICAgICAgICAgICBpZighay0+aWdub3JlYm9keSkKKyAgICAgICAgICAgICAgcmVzdWx0ID0gQ3VybF91bmVuY29kZV9kZWZsYXRlX3dyaXRlKGNvbm4sIGssIG5yZWFkKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHWklQOgorICAgICAgICAgICAgLyogQXNzdW1lIENMSUVOVFdSSVRFX0JPRFk7IGhlYWRlcnMgYXJlIG5vdCBlbmNvZGVkLiAqLworICAgICAgICAgICAgaWYoIWstPmlnbm9yZWJvZHkpCisgICAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfdW5lbmNvZGVfZ3ppcF93cml0ZShjb25uLCBrLCBucmVhZCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgQ09NUFJFU1M6CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZhaWxmIChkYXRhLCAiVW5yZWNvZ25pemVkIGNvbnRlbnQgZW5jb2RpbmcgdHlwZS4gIgorICAgICAgICAgICAgICAgICAgICJsaWJjdXJsIHVuZGVyc3RhbmRzIGBpZGVudGl0eScsIGBkZWZsYXRlJyBhbmQgYGd6aXAnICIKKyAgICAgICAgICAgICAgICAgICAiY29udGVudCBlbmNvZGluZ3MuIik7CisgICAgICAgICAgICByZXN1bHQgPSBDVVJMRV9CQURfQ09OVEVOVF9FTkNPRElORzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGstPmJhZGhlYWRlciA9IEhFQURFUl9OT1JNQUw7IC8qIHRha2VuIGNhcmUgb2Ygbm93ICovCisKKyAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisKKyAgICB9IC8qIGlmKCEgaGVhZGVyIGFuZCBkYXRhIHRvIHJlYWQgKSAqLworCisgICAgaWYoY29ubi0+aGFuZGxlci0+cmVhZHdyaXRlICYmCisgICAgICAgKGV4Y2VzcyA+IDAgJiYgIWNvbm4tPmJpdHMuc3RyZWFtX3dhc19yZXdvdW5kKSkgeworICAgICAgLyogUGFyc2UgdGhlIGV4Y2VzcyBkYXRhICovCisgICAgICBrLT5zdHIgKz0gbnJlYWQ7CisgICAgICBucmVhZCA9IChzc2l6ZV90KWV4Y2VzczsKKworICAgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+cmVhZHdyaXRlKGRhdGEsIGNvbm4sICZucmVhZCwgJnJlYWRtb3JlKTsKKyAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgaWYocmVhZG1vcmUpCisgICAgICAgIGstPmtlZXBvbiB8PSBLRUVQX1JFQ1Y7IC8qIHdlJ3JlIG5vdCBkb25lIHJlYWRpbmcgKi8KKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmKGlzX2VtcHR5X2RhdGEpIHsKKyAgICAgIC8qIGlmIHdlIHJlY2VpdmVkIG5vdGhpbmcsIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIGFuZCB3ZQorICAgICAgICAgYXJlIGRvbmUgKi8KKyAgICAgIGstPmtlZXBvbiAmPSB+S0VFUF9SRUNWOworICAgIH0KKworICB9IHdoaWxlKGRhdGFfcGVuZGluZyhjb25uKSk7CisKKyAgaWYoKChrLT5rZWVwb24gJiAoS0VFUF9SRUNWfEtFRVBfU0VORCkpID09IEtFRVBfU0VORCkgJiYKKyAgICAgY29ubi0+Yml0cy5jbG9zZSApIHsKKyAgICAvKiBXaGVuIHdlJ3ZlIHJlYWQgdGhlIGVudGlyZSB0aGluZyBhbmQgdGhlIGNsb3NlIGJpdCBpcyBzZXQsIHRoZSBzZXJ2ZXIKKyAgICAgICBtYXkgbm93IGNsb3NlIHRoZSBjb25uZWN0aW9uLiBJZiB0aGVyZSdzIG5vdyBhbnkga2luZCBvZiBzZW5kaW5nIGdvaW5nCisgICAgICAgb24gZnJvbSBvdXIgc2lkZSwgd2UgbmVlZCB0byBzdG9wIHRoYXQgaW1tZWRpYXRlbHkuICovCisgICAgaW5mb2YoZGF0YSwgIndlIGFyZSBkb25lIHJlYWRpbmcgYW5kIHRoaXMgaXMgc2V0IHRvIGNsb3NlLCBzdG9wIHNlbmRcbiIpOworICAgIGstPmtlZXBvbiAmPSB+S0VFUF9TRU5EOyAvKiBubyB3cml0aW5nIGFueW1vcmUgZWl0aGVyICovCisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBTZW5kIGRhdGEgdG8gdXBsb2FkIHRvIHRoZSBzZXJ2ZXIsIHdoZW4gdGhlIHNvY2tldCBpcyB3cml0YWJsZS4KKyAqLworc3RhdGljIENVUkxjb2RlIHJlYWR3cml0ZV91cGxvYWQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZGlkd2hhdCkKK3sKKyAgc3NpemVfdCBpLCBzaTsKKyAgc3NpemVfdCBieXRlc193cml0dGVuOworICBDVVJMY29kZSByZXN1bHQ7CisgIHNzaXplX3QgbnJlYWQ7IC8qIG51bWJlciBvZiBieXRlcyByZWFkICovCisgIGJvb2wgc2VuZGluZ19odHRwX2hlYWRlcnMgPSBGQUxTRTsKKworICBpZigoay0+Ynl0ZWNvdW50ID09IDApICYmIChrLT53cml0ZWJ5dGVjb3VudCA9PSAwKSkKKyAgICBDdXJsX3BncnNUaW1lKGRhdGEsIFRJTUVSX1NUQVJUVFJBTlNGRVIpOworCisgICpkaWR3aGF0IHw9IEtFRVBfU0VORDsKKworICAvKgorICAgKiBXZSBsb29wIGhlcmUgdG8gZG8gdGhlIFJFQUQgYW5kIFNFTkQgbG9vcCB1bnRpbCB3ZSBydW4gb3V0IG9mCisgICAqIGRhdGEgdG8gc2VuZCBvciB1bnRpbCB3ZSBnZXQgRVdPVUxEQkxPQ0sgYmFjaworICAgKgorICAgKiBGSVhNRTogYWJvdmUgY29tbWVudCBpcyBtaXNsZWFkaW5nLiBDdXJyZW50bHkgbm8gbG9vcGluZyBpcworICAgKiBhY3R1YWxseSBkb25lIGluIGRvLXdoaWxlIGxvb3AgYmVsb3cuCisgICAqLworICBkbyB7CisKKyAgICAvKiBvbmx5IHJlYWQgbW9yZSBkYXRhIGlmIHRoZXJlJ3Mgbm8gdXBsb2FkIGRhdGEgYWxyZWFkeQorICAgICAgIHByZXNlbnQgaW4gdGhlIHVwbG9hZCBidWZmZXIgKi8KKyAgICBpZigwID09IGRhdGEtPnJlcS51cGxvYWRfcHJlc2VudCkgeworICAgICAgLyogaW5pdCB0aGUgInVwbG9hZCBmcm9tIGhlcmUiIHBvaW50ZXIgKi8KKyAgICAgIGRhdGEtPnJlcS51cGxvYWRfZnJvbWhlcmUgPSBrLT51cGxvYWRidWY7CisKKyAgICAgIGlmKCFrLT51cGxvYWRfZG9uZSkgeworICAgICAgICAvKiBIVFRQIHBvbGx1dGlvbiwgdGhpcyBzaG91bGQgYmUgd3JpdHRlbiBuaWNlciB0byBiZWNvbWUgbW9yZQorICAgICAgICAgICBwcm90b2NvbCBhZ25vc3RpYy4gKi8KKyAgICAgICAgaW50IGZpbGxjb3VudDsKKworICAgICAgICBpZigoay0+ZXhwMTAwID09IEVYUDEwMF9TRU5ESU5HX1JFUVVFU1QpICYmCisgICAgICAgICAgIChkYXRhLT5zdGF0ZS5wcm90by5odHRwLT5zZW5kaW5nID09IEhUVFBTRU5EX0JPRFkpKSB7CisgICAgICAgICAgLyogSWYgdGhpcyBjYWxsIGlzIHRvIHNlbmQgYm9keSBkYXRhLCB3ZSBtdXN0IHRha2Ugc29tZSBhY3Rpb246CisgICAgICAgICAgICAgV2UgaGF2ZSBzZW50IG9mZiB0aGUgZnVsbCBIVFRQIDEuMSByZXF1ZXN0LCBhbmQgd2Ugc2hhbGwgbm93CisgICAgICAgICAgICAgZ28gaW50byB0aGUgRXhwZWN0OiAxMDAgc3RhdGUgYW5kIGF3YWl0IHN1Y2ggYSBoZWFkZXIgKi8KKyAgICAgICAgICBrLT5leHAxMDAgPSBFWFAxMDBfQVdBSVRJTkdfQ09OVElOVUU7IC8qIHdhaXQgZm9yIHRoZSBoZWFkZXIgKi8KKyAgICAgICAgICBrLT5rZWVwb24gJj0gfktFRVBfU0VORDsgICAgICAgICAvKiBkaXNhYmxlIHdyaXRpbmcgKi8KKyAgICAgICAgICBrLT5zdGFydDEwMCA9IEN1cmxfdHZub3coKTsgICAgICAgLyogdGltZW91dCBjb3VudCBzdGFydHMgbm93ICovCisgICAgICAgICAgKmRpZHdoYXQgJj0gfktFRVBfU0VORDsgIC8qIHdlIGRpZG4ndCB3cml0ZSBhbnl0aGluZyBhY3R1YWxseSAqLworCisgICAgICAgICAgLyogc2V0IGEgdGltZW91dCBmb3IgdGhlIG11bHRpIGludGVyZmFjZSAqLworICAgICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIENVUkxfVElNRU9VVF9FWFBFQ1RfMTAwKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sJihDVVJMUFJPVE9fSFRUUHxDVVJMUFJPVE9fUlRTUCkpIHsKKyAgICAgICAgICBpZihkYXRhLT5zdGF0ZS5wcm90by5odHRwLT5zZW5kaW5nID09IEhUVFBTRU5EX1JFUVVFU1QpCisgICAgICAgICAgICAvKiBXZSdyZSBzZW5kaW5nIHRoZSBIVFRQIHJlcXVlc3QgaGVhZGVycywgbm90IHRoZSBkYXRhLgorICAgICAgICAgICAgICAgUmVtZW1iZXIgdGhhdCBzbyB3ZSBkb24ndCBjaGFuZ2UgdGhlIGxpbmUgZW5kaW5ncy4gKi8KKyAgICAgICAgICAgIHNlbmRpbmdfaHR0cF9oZWFkZXJzID0gVFJVRTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzZW5kaW5nX2h0dHBfaGVhZGVycyA9IEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9maWxscmVhZGJ1ZmZlcihjb25uLCBCVUZTSVpFLCAmZmlsbGNvdW50KTsKKyAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgbnJlYWQgPSAoc3NpemVfdClmaWxsY291bnQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIG5yZWFkID0gMDsgLyogd2UncmUgZG9uZSB1cGxvYWRpbmcvcmVhZGluZyAqLworCisgICAgICBpZighbnJlYWQgJiYgKGstPmtlZXBvbiAmIEtFRVBfU0VORF9QQVVTRSkpIHsKKyAgICAgICAgLyogdGhpcyBpcyBhIHBhdXNlZCB0cmFuc2ZlciAqLworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYobnJlYWQ8PTApIHsKKyAgICAgICAgLyogZG9uZSAqLworICAgICAgICBrLT5rZWVwb24gJj0gfktFRVBfU0VORDsgLyogd2UncmUgZG9uZSB3cml0aW5nICovCisKKyAgICAgICAgaWYoY29ubi0+Yml0cy5yZXdpbmRhZnRlcnNlbmQpIHsKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX3JlYWRyZXdpbmQoY29ubik7CisgICAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyogc3RvcmUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBmb3IgdXBsb2FkICovCisgICAgICBkYXRhLT5yZXEudXBsb2FkX3ByZXNlbnQgPSBucmVhZDsKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfU01UUAorICAgICAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fU01UUCkgeworICAgICAgICByZXN1bHQgPSBDdXJsX3NtdHBfZXNjYXBlX2VvYihjb25uLCBucmVhZCk7CisgICAgICAgIGlmKHJlc3VsdCkKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmIC8qIENVUkxfRElTQUJMRV9TTVRQICovCisKKyAgICAgIC8qIGNvbnZlcnQgTEYgdG8gQ1JMRiBpZiBzbyBhc2tlZCAqLworICAgICAgaWYoKCFzZW5kaW5nX2h0dHBfaGVhZGVycykgJiYgKAorI2lmZGVmIENVUkxfRE9fTElORUVORF9DT05WCisgICAgICAgICAvKiBhbHdheXMgY29udmVydCBpZiB3ZSdyZSBGVFBpbmcgaW4gQVNDSUkgbW9kZSAqLworICAgICAgICAgKGRhdGEtPnNldC5wcmVmZXJfYXNjaWkpIHx8CisjZW5kaWYKKyAgICAgICAgIChkYXRhLT5zZXQuY3JsZikpKSB7CisgICAgICAgIGlmKGRhdGEtPnN0YXRlLnNjcmF0Y2ggPT0gTlVMTCkKKyAgICAgICAgICBkYXRhLT5zdGF0ZS5zY3JhdGNoID0gbWFsbG9jKDIqQlVGU0laRSk7CisgICAgICAgIGlmKGRhdGEtPnN0YXRlLnNjcmF0Y2ggPT0gTlVMTCkgeworICAgICAgICAgIGZhaWxmIChkYXRhLCAiRmFpbGVkIHRvIGFsbG9jIHNjcmF0Y2ggYnVmZmVyISIpOworICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICAqIEFTQ0lJL0VCQ0RJQyBOb3RlOiBUaGlzIGlzIHByZXN1bWFibHkgYSB0ZXh0IChub3QgYmluYXJ5KQorICAgICAgICAgKiB0cmFuc2ZlciBzbyB0aGUgZGF0YSBzaG91bGQgYWxyZWFkeSBiZSBpbiBBU0NJSS4KKyAgICAgICAgICogVGhhdCBtZWFucyB0aGUgaGV4IHZhbHVlcyBmb3IgQVNDSUkgQ1IgKDB4MGQpICYgTEYgKDB4MGEpCisgICAgICAgICAqIG11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBlc2NhcGUgc2VxdWVuY2VzIFxyICYgXG4uCisgICAgICAgICAqLworICAgICAgICBmb3IoaSA9IDAsIHNpID0gMDsgaSA8IG5yZWFkOyBpKyssIHNpKyspIHsKKyAgICAgICAgICBpZihkYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlW2ldID09IDB4MGEpIHsKKyAgICAgICAgICAgIGRhdGEtPnN0YXRlLnNjcmF0Y2hbc2krK10gPSAweDBkOworICAgICAgICAgICAgZGF0YS0+c3RhdGUuc2NyYXRjaFtzaV0gPSAweDBhOworICAgICAgICAgICAgaWYoIWRhdGEtPnNldC5jcmxmKSB7CisgICAgICAgICAgICAgIC8qIHdlJ3JlIGhlcmUgb25seSBiZWNhdXNlIEZUUCBpcyBpbiBBU0NJSSBtb2RlLi4uCisgICAgICAgICAgICAgICAgIGJ1bXAgaW5maWxlc2l6ZSBmb3IgdGhlIExGIHdlIGp1c3QgYWRkZWQgKi8KKyAgICAgICAgICAgICAgZGF0YS0+c2V0LmluZmlsZXNpemUrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YS0+c3RhdGUuc2NyYXRjaFtzaV0gPSBkYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlW2ldOworICAgICAgICB9CisgICAgICAgIGlmKHNpICE9IG5yZWFkKSB7CisgICAgICAgICAgLyogb25seSBwZXJmb3JtIHRoZSBzcGVjaWFsIG9wZXJhdGlvbiBpZiB3ZSByZWFsbHkgZGlkIHJlcGxhY2UKKyAgICAgICAgICAgICBhbnl0aGluZyAqLworICAgICAgICAgIG5yZWFkID0gc2k7CisKKyAgICAgICAgICAvKiB1cGxvYWQgZnJvbSB0aGUgbmV3IChyZXBsYWNlZCkgYnVmZmVyIGluc3RlYWQgKi8KKyAgICAgICAgICBkYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlID0gZGF0YS0+c3RhdGUuc2NyYXRjaDsKKworICAgICAgICAgIC8qIHNldCB0aGUgbmV3IGFtb3VudCB0b28gKi8KKyAgICAgICAgICBkYXRhLT5yZXEudXBsb2FkX3ByZXNlbnQgPSBucmVhZDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gLyogaWYgMCA9PSBkYXRhLT5yZXEudXBsb2FkX3ByZXNlbnQgKi8KKyAgICBlbHNlIHsKKyAgICAgIC8qIFdlIGhhdmUgYSBwYXJ0aWFsIGJ1ZmZlciBsZWZ0IGZyb20gYSBwcmV2aW91cyAicm91bmQiLiBVc2UKKyAgICAgICAgIHRoYXQgaW5zdGVhZCBvZiByZWFkaW5nIG1vcmUgZGF0YSAqLworICAgIH0KKworICAgIC8qIHdyaXRlIHRvIHNvY2tldCAoc2VuZCBhd2F5IGRhdGEpICovCisgICAgcmVzdWx0ID0gQ3VybF93cml0ZShjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+d3JpdGVzb2NrZmQsICAgICAvKiBzb2NrZXQgdG8gc2VuZCB0byAqLworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cmVxLnVwbG9hZF9mcm9taGVyZSwgLyogYnVmZmVyIHBvaW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnJlcS51cGxvYWRfcHJlc2VudCwgIC8qIGJ1ZmZlciBzaXplICovCisgICAgICAgICAgICAgICAgICAgICAgICAmYnl0ZXNfd3JpdHRlbik7ICAgICAgICAgICAvKiBhY3R1YWxseSBzZW50ICovCisKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgaWYoZGF0YS0+c2V0LnZlcmJvc2UpCisgICAgICAvKiBzaG93IHRoZSBkYXRhIGJlZm9yZSB3ZSBjaGFuZ2UgdGhlIHBvaW50ZXIgdXBsb2FkX2Zyb21oZXJlICovCisgICAgICBDdXJsX2RlYnVnKGRhdGEsIENVUkxJTkZPX0RBVEFfT1VULCBkYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlLAorICAgICAgICAgICAgICAgICAoc2l6ZV90KWJ5dGVzX3dyaXR0ZW4sIGNvbm4pOworCisgICAgay0+d3JpdGVieXRlY291bnQgKz0gYnl0ZXNfd3JpdHRlbjsKKworICAgIGlmKGstPndyaXRlYnl0ZWNvdW50ID09IGRhdGEtPnNldC5pbmZpbGVzaXplKSB7CisgICAgICAvKiB3ZSBoYXZlIHNlbnQgYWxsIGRhdGEgd2Ugd2VyZSBzdXBwb3NlZCB0byAqLworICAgICAgay0+dXBsb2FkX2RvbmUgPSBUUlVFOworICAgICAgaW5mb2YoZGF0YSwgIldlIGFyZSBjb21wbGV0ZWx5IHVwbG9hZGVkIGFuZCBmaW5lXG4iKTsKKyAgICB9CisKKyAgICBpZihkYXRhLT5yZXEudXBsb2FkX3ByZXNlbnQgIT0gYnl0ZXNfd3JpdHRlbikgeworICAgICAgLyogd2Ugb25seSB3cm90ZSBhIHBhcnQgb2YgdGhlIGJ1ZmZlciAoaWYgYW55dGhpbmcpLCBkZWFsIHdpdGggaXQhICovCisKKyAgICAgIC8qIHN0b3JlIHRoZSBhbW91bnQgb2YgYnl0ZXMgbGVmdCBpbiB0aGUgYnVmZmVyIHRvIHdyaXRlICovCisgICAgICBkYXRhLT5yZXEudXBsb2FkX3ByZXNlbnQgLT0gYnl0ZXNfd3JpdHRlbjsKKworICAgICAgLyogYWR2YW5jZSB0aGUgcG9pbnRlciB3aGVyZSB0byBmaW5kIHRoZSBidWZmZXIgd2hlbiB0aGUgbmV4dCBzZW5kCisgICAgICAgICBpcyB0byBoYXBwZW4gKi8KKyAgICAgIGRhdGEtPnJlcS51cGxvYWRfZnJvbWhlcmUgKz0gYnl0ZXNfd3JpdHRlbjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiB3ZSd2ZSB1cGxvYWRlZCB0aGF0IGJ1ZmZlciBub3cgKi8KKyAgICAgIGRhdGEtPnJlcS51cGxvYWRfZnJvbWhlcmUgPSBrLT51cGxvYWRidWY7CisgICAgICBkYXRhLT5yZXEudXBsb2FkX3ByZXNlbnQgPSAwOyAvKiBubyBtb3JlIGJ5dGVzIGxlZnQgKi8KKworICAgICAgaWYoay0+dXBsb2FkX2RvbmUpIHsKKyAgICAgICAgLyogc3dpdGNoIG9mZiB3cml0aW5nLCB3ZSdyZSBkb25lISAqLworICAgICAgICBrLT5rZWVwb24gJj0gfktFRVBfU0VORDsgLyogd2UncmUgZG9uZSB3cml0aW5nICovCisgICAgICB9CisgICAgfQorCisgICAgQ3VybF9wZ3JzU2V0VXBsb2FkQ291bnRlcihkYXRhLCBrLT53cml0ZWJ5dGVjb3VudCk7CisKKyAgfSBXSElMRV9GQUxTRTsgLyoganVzdCB0byBicmVhayBvdXQgZnJvbSEgKi8KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBDdXJsX3JlYWR3cml0ZSgpIGlzIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gZGF0YSBpcyB0bworICogYmUgcmVhZCBhbmQgd3JpdHRlbiB0by9mcm9tIHRoZSBjb25uZWN0aW9uLgorICovCitDVVJMY29kZSBDdXJsX3JlYWR3cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprID0gJmRhdGEtPnJlcTsKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBpbnQgZGlkd2hhdD0wOworCisgIGN1cmxfc29ja2V0X3QgZmRfcmVhZDsKKyAgY3VybF9zb2NrZXRfdCBmZF93cml0ZTsKKyAgaW50IHNlbGVjdF9yZXMgPSBjb25uLT5jc2VsZWN0X2JpdHM7CisKKyAgY29ubi0+Y3NlbGVjdF9iaXRzID0gMDsKKworICAvKiBvbmx5IHVzZSB0aGUgcHJvcGVyIHNvY2tldCBpZiB0aGUgKl9IT0xEIGJpdCBpcyBub3Qgc2V0IHNpbXVsdGFuZW91c2x5IGFzCisgICAgIHRoZW4gd2UgYXJlIGluIHJhdGUgbGltaXRpbmcgc3RhdGUgaW4gdGhhdCB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KKworICBpZigoay0+a2VlcG9uICYgS0VFUF9SRUNWQklUUykgPT0gS0VFUF9SRUNWKQorICAgIGZkX3JlYWQgPSBjb25uLT5zb2NrZmQ7CisgIGVsc2UKKyAgICBmZF9yZWFkID0gQ1VSTF9TT0NLRVRfQkFEOworCisgIGlmKChrLT5rZWVwb24gJiBLRUVQX1NFTkRCSVRTKSA9PSBLRUVQX1NFTkQpCisgICAgZmRfd3JpdGUgPSBjb25uLT53cml0ZXNvY2tmZDsKKyAgZWxzZQorICAgIGZkX3dyaXRlID0gQ1VSTF9TT0NLRVRfQkFEOworCisgIGlmKCFzZWxlY3RfcmVzKSAvKiBDYWxsIGZvciBzZWxlY3QoKS9wb2xsKCkgb25seSwgaWYgcmVhZC93cml0ZS9lcnJvcgorICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIGlzIG5vdCBrbm93bi4gKi8KKyAgICBzZWxlY3RfcmVzID0gQ3VybF9zb2NrZXRfcmVhZHkoZmRfcmVhZCwgZmRfd3JpdGUsIDApOworCisgIGlmKHNlbGVjdF9yZXMgPT0gQ1VSTF9DU0VMRUNUX0VSUikgeworICAgIGZhaWxmKGRhdGEsICJzZWxlY3QvcG9sbCByZXR1cm5lZCBlcnJvciIpOworICAgIHJldHVybiBDVVJMRV9TRU5EX0VSUk9SOworICB9CisKKyAgLyogV2UgZ28gYWhlYWQgYW5kIGRvIGEgcmVhZCBpZiB3ZSBoYXZlIGEgcmVhZGFibGUgc29ja2V0IG9yIGlmCisgICAgIHRoZSBzdHJlYW0gd2FzIHJld291bmQgKGluIHdoaWNoIGNhc2Ugd2UgaGF2ZSBkYXRhIGluIGEKKyAgICAgYnVmZmVyKSAqLworICBpZigoay0+a2VlcG9uICYgS0VFUF9SRUNWKSAmJgorICAgICAoKHNlbGVjdF9yZXMgJiBDVVJMX0NTRUxFQ1RfSU4pIHx8IGNvbm4tPmJpdHMuc3RyZWFtX3dhc19yZXdvdW5kKSkgeworCisgICAgcmVzdWx0ID0gcmVhZHdyaXRlX2RhdGEoZGF0YSwgY29ubiwgaywgJmRpZHdoYXQsIGRvbmUpOworICAgIGlmKHJlc3VsdCB8fCAqZG9uZSkKKyAgICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgZWxzZSBpZihrLT5rZWVwb24gJiBLRUVQX1JFQ1YpIHsKKyAgICBERUJVR0YoaW5mb2YoZGF0YSwgImFkZGl0aW9uYWwgc3R1ZmYgbm90IGZpbmUgJXM6JWQ6ICVkICVkXG4iLAorICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sCisgICAgICAgICAgICAgICAgIHNlbGVjdF9yZXMgJiBDVVJMX0NTRUxFQ1RfSU4sCisgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMuc3RyZWFtX3dhc19yZXdvdW5kKSk7CisgIH0KKworICAvKiBJZiB3ZSBzdGlsbCBoYXZlIHdyaXRpbmcgdG8gZG8sIHdlIGNoZWNrIGlmIHdlIGhhdmUgYSB3cml0YWJsZSBzb2NrZXQuICovCisgIGlmKChrLT5rZWVwb24gJiBLRUVQX1NFTkQpICYmIChzZWxlY3RfcmVzICYgQ1VSTF9DU0VMRUNUX09VVCkpIHsKKyAgICAvKiB3cml0ZSAqLworCisgICAgcmVzdWx0ID0gcmVhZHdyaXRlX3VwbG9hZChkYXRhLCBjb25uLCBrLCAmZGlkd2hhdCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGstPm5vdyA9IEN1cmxfdHZub3coKTsKKyAgaWYoZGlkd2hhdCkgeworICAgIC8qIFVwZGF0ZSByZWFkL3dyaXRlIGNvdW50ZXJzICovCisgICAgaWYoay0+Ynl0ZWNvdW50cCkKKyAgICAgICprLT5ieXRlY291bnRwID0gay0+Ynl0ZWNvdW50OyAvKiByZWFkIGNvdW50ICovCisgICAgaWYoay0+d3JpdGVieXRlY291bnRwKQorICAgICAgKmstPndyaXRlYnl0ZWNvdW50cCA9IGstPndyaXRlYnl0ZWNvdW50OyAvKiB3cml0ZSBjb3VudCAqLworICB9CisgIGVsc2UgeworICAgIC8qIG5vIHJlYWQgbm8gd3JpdGUsIHRoaXMgaXMgYSB0aW1lb3V0PyAqLworICAgIGlmKGstPmV4cDEwMCA9PSBFWFAxMDBfQVdBSVRJTkdfQ09OVElOVUUpIHsKKyAgICAgIC8qIFRoaXMgc2hvdWxkIGFsbG93IHNvbWUgdGltZSBmb3IgdGhlIGhlYWRlciB0byBhcnJpdmUsIGJ1dCBvbmx5IGEKKyAgICAgICAgIHZlcnkgc2hvcnQgdGltZSBhcyBvdGhlcndpc2UgaXQnbGwgYmUgdG9vIG11Y2ggd2FzdGVkIHRpbWUgdG9vCisgICAgICAgICBvZnRlbi4gKi8KKworICAgICAgLyogUXVvdGluZyBSRkMyNjE2LCBzZWN0aW9uICI4LjIuMyBVc2Ugb2YgdGhlIDEwMCAoQ29udGludWUpIFN0YXR1cyI6CisKKyAgICAgICAgIFRoZXJlZm9yZSwgd2hlbiBhIGNsaWVudCBzZW5kcyB0aGlzIGhlYWRlciBmaWVsZCB0byBhbiBvcmlnaW4gc2VydmVyCisgICAgICAgICAocG9zc2libHkgdmlhIGEgcHJveHkpIGZyb20gd2hpY2ggaXQgaGFzIG5ldmVyIHNlZW4gYSAxMDAgKENvbnRpbnVlKQorICAgICAgICAgc3RhdHVzLCB0aGUgY2xpZW50IFNIT1VMRCBOT1Qgd2FpdCBmb3IgYW4gaW5kZWZpbml0ZSBwZXJpb2QgYmVmb3JlCisgICAgICAgICBzZW5kaW5nIHRoZSByZXF1ZXN0IGJvZHkuCisKKyAgICAgICovCisKKyAgICAgIGxvbmcgbXMgPSBDdXJsX3R2ZGlmZihrLT5ub3csIGstPnN0YXJ0MTAwKTsKKyAgICAgIGlmKG1zID4gQ1VSTF9USU1FT1VUX0VYUEVDVF8xMDApIHsKKyAgICAgICAgLyogd2UndmUgd2FpdGVkIGxvbmcgZW5vdWdoLCBjb250aW51ZSBhbnl3YXkgKi8KKyAgICAgICAgay0+ZXhwMTAwID0gRVhQMTAwX1NFTkRfREFUQTsKKyAgICAgICAgay0+a2VlcG9uIHw9IEtFRVBfU0VORDsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkRvbmUgd2FpdGluZyBmb3IgMTAwLWNvbnRpbnVlXG4iKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZihDdXJsX3BncnNVcGRhdGUoY29ubikpCisgICAgcmVzdWx0ID0gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKKyAgZWxzZQorICAgIHJlc3VsdCA9IEN1cmxfc3BlZWRjaGVjayhkYXRhLCBrLT5ub3cpOworICBpZihyZXN1bHQpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBpZihrLT5rZWVwb24pIHsKKyAgICBpZigwID4gQ3VybF90aW1lbGVmdChkYXRhLCAmay0+bm93LCBGQUxTRSkpIHsKKyAgICAgIGlmKGstPnNpemUgIT0gLTEpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJWxkIG1pbGxpc2Vjb25kcyB3aXRoICUiCisgICAgICAgICAgICAgIEZPUk1BVF9PRkZfVCAiIG91dCBvZiAlIiBGT1JNQVRfT0ZGX1QgIiBieXRlcyByZWNlaXZlZCIsCisgICAgICAgICAgICAgIEN1cmxfdHZkaWZmKGstPm5vdywgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZSksIGstPmJ5dGVjb3VudCwKKyAgICAgICAgICAgICAgay0+c2l6ZSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIk9wZXJhdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJWxkIG1pbGxpc2Vjb25kcyB3aXRoICUiCisgICAgICAgICAgICAgIEZPUk1BVF9PRkZfVCAiIGJ5dGVzIHJlY2VpdmVkIiwKKyAgICAgICAgICAgICAgQ3VybF90dmRpZmYoay0+bm93LCBkYXRhLT5wcm9ncmVzcy50X3N0YXJ0c2luZ2xlKSwgay0+Ynl0ZWNvdW50KTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qCisgICAgICogVGhlIHRyYW5zZmVyIGhhcyBiZWVuIHBlcmZvcm1lZC4gSnVzdCBtYWtlIHNvbWUgZ2VuZXJhbCBjaGVja3MgYmVmb3JlCisgICAgICogcmV0dXJuaW5nLgorICAgICAqLworCisgICAgaWYoIShkYXRhLT5zZXQub3B0X25vX2JvZHkpICYmIChrLT5zaXplICE9IC0xKSAmJgorICAgICAgIChrLT5ieXRlY291bnQgIT0gay0+c2l6ZSkgJiYKKyNpZmRlZiBDVVJMX0RPX0xJTkVFTkRfQ09OVgorICAgICAgIC8qIE1vc3QgRlRQIHNlcnZlcnMgZG9uJ3QgYWRqdXN0IHRoZWlyIGZpbGUgU0laRSByZXNwb25zZSBmb3IgQ1JMRnMsCisgICAgICAgICAgc28gd2UnbGwgY2hlY2sgdG8gc2VlIGlmIHRoZSBkaXNjcmVwYW5jeSBjYW4gYmUgZXhwbGFpbmVkCisgICAgICAgICAgYnkgdGhlIG51bWJlciBvZiBDUkxGcyB3ZSd2ZSBjaGFuZ2VkIHRvIExGcy4KKyAgICAgICAqLworICAgICAgIChrLT5ieXRlY291bnQgIT0gKGstPnNpemUgKyBkYXRhLT5zdGF0ZS5jcmxmX2NvbnZlcnNpb25zKSkgJiYKKyNlbmRpZiAvKiBDVVJMX0RPX0xJTkVFTkRfQ09OViAqLworICAgICAgICFkYXRhLT5yZXEubmV3dXJsKSB7CisgICAgICBmYWlsZihkYXRhLCAidHJhbnNmZXIgY2xvc2VkIHdpdGggJSIgRk9STUFUX09GRl9UCisgICAgICAgICAgICAiIGJ5dGVzIHJlbWFpbmluZyB0byByZWFkIiwKKyAgICAgICAgICAgIGstPnNpemUgLSBrLT5ieXRlY291bnQpOworICAgICAgcmV0dXJuIENVUkxFX1BBUlRJQUxfRklMRTsKKyAgICB9CisgICAgZWxzZSBpZighKGRhdGEtPnNldC5vcHRfbm9fYm9keSkgJiYKKyAgICAgICAgICAgIGstPmNodW5rICYmCisgICAgICAgICAgICAoY29ubi0+Y2h1bmsuc3RhdGUgIT0gQ0hVTktfU1RPUCkpIHsKKyAgICAgIC8qCisgICAgICAgKiBJbiBjaHVua2VkIG1vZGUsIHJldHVybiBhbiBlcnJvciBpZiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgcHJpb3IgdG8KKyAgICAgICAqIHRoZSBlbXB0eSAodGVybWluYXRpbmcpIGNodW5rIGlzIHJlYWQuCisgICAgICAgKgorICAgICAgICogVGhlIGNvbmRpdGlvbiBhYm92ZSB1c2VkIHRvIGNoZWNrIGZvcgorICAgICAgICogY29ubi0+cHJvdG8uaHR0cC0+Y2h1bmsuZGF0YXNpemUgIT0gMCB3aGljaCBpcyB0cnVlIGFmdGVyIHJlYWRpbmcKKyAgICAgICAqICphbnkqIGNodW5rLCBub3QganVzdCB0aGUgZW1wdHkgY2h1bmsuCisgICAgICAgKgorICAgICAgICovCisgICAgICBmYWlsZihkYXRhLCAidHJhbnNmZXIgY2xvc2VkIHdpdGggb3V0c3RhbmRpbmcgcmVhZCBkYXRhIHJlbWFpbmluZyIpOworICAgICAgcmV0dXJuIENVUkxFX1BBUlRJQUxfRklMRTsKKyAgICB9CisgICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKQorICAgICAgcmV0dXJuIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisgIH0KKworICAvKiBOb3cgdXBkYXRlIHRoZSAiZG9uZSIgYm9vbGVhbiB3ZSByZXR1cm4gKi8KKyAgKmRvbmUgPSAoMCA9PSAoay0+a2VlcG9uJihLRUVQX1JFQ1Z8S0VFUF9TRU5EfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFRVBfUkVDVl9QQVVTRXxLRUVQX1NFTkRfUEFVU0UpKSkgPyBUUlVFIDogRkFMU0U7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogQ3VybF9zaW5nbGVfZ2V0c29jaygpIGdldHMgY2FsbGVkIGJ5IHRoZSBtdWx0aSBpbnRlcmZhY2UgY29kZSB3aGVuIHRoZSBhcHAKKyAqIGhhcyByZXF1ZXN0ZWQgdG8gZ2V0IHRoZSBzb2NrZXRzIGZvciB0aGUgY3VycmVudCBjb25uZWN0aW9uLiBUaGlzIGZ1bmN0aW9uCisgKiB3aWxsIHRoZW4gYmUgY2FsbGVkIG9uY2UgZm9yIGV2ZXJ5IGNvbm5lY3Rpb24gdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlCisgKiBrZWVwcyB0cmFjayBvZi4gVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgYmUgY2FsbGVkIGZvciBjb25uZWN0aW9ucyB0aGF0IGFyZQorICogaW4gdGhlIHByb3BlciBzdGF0ZSB0byBoYXZlIHRoaXMgaW5mb3JtYXRpb24gYXZhaWxhYmxlLgorICovCitpbnQgQ3VybF9zaW5nbGVfZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrLCAvKiBwb2ludHMgdG8gbnVtc29ja3MgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzb2NrZXRzICovCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCit7CisgIGNvbnN0IHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgaW50IGJpdG1hcCA9IEdFVFNPQ0tfQkxBTks7CisgIHVuc2lnbmVkIHNvY2tpbmRleCA9IDA7CisKKyAgaWYoY29ubi0+aGFuZGxlci0+cGVyZm9ybV9nZXRzb2NrKQorICAgIHJldHVybiBjb25uLT5oYW5kbGVyLT5wZXJmb3JtX2dldHNvY2soY29ubiwgc29jaywgbnVtc29ja3MpOworCisgIGlmKG51bXNvY2tzIDwgMikKKyAgICAvKiBzaW1wbGUgY2hlY2sgYnV0IHdlIG1pZ2h0IG5lZWQgdHdvIHNsb3RzICovCisgICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7CisKKyAgLyogZG9uJ3QgaW5jbHVkZSBIT0xEIGFuZCBQQVVTRSBjb25uZWN0aW9ucyAqLworICBpZigoZGF0YS0+cmVxLmtlZXBvbiAmIEtFRVBfUkVDVkJJVFMpID09IEtFRVBfUkVDVikgeworCisgICAgREVCVUdBU1NFUlQoY29ubi0+c29ja2ZkICE9IENVUkxfU09DS0VUX0JBRCk7CisKKyAgICBiaXRtYXAgfD0gR0VUU09DS19SRUFEU09DSyhzb2NraW5kZXgpOworICAgIHNvY2tbc29ja2luZGV4XSA9IGNvbm4tPnNvY2tmZDsKKyAgfQorCisgIC8qIGRvbid0IGluY2x1ZGUgSE9MRCBhbmQgUEFVU0UgY29ubmVjdGlvbnMgKi8KKyAgaWYoKGRhdGEtPnJlcS5rZWVwb24gJiBLRUVQX1NFTkRCSVRTKSA9PSBLRUVQX1NFTkQpIHsKKworICAgIGlmKChjb25uLT5zb2NrZmQgIT0gY29ubi0+d3JpdGVzb2NrZmQpIHx8CisgICAgICAgIShkYXRhLT5yZXEua2VlcG9uICYgS0VFUF9SRUNWKSkgeworICAgICAgLyogb25seSBpZiB0aGV5IGFyZSBub3QgdGhlIHNhbWUgc29ja2V0IG9yIHdlIGRpZG4ndCBoYXZlIGEgcmVhZGFibGUKKyAgICAgICAgIG9uZSwgd2UgaW5jcmVhc2UgaW5kZXggKi8KKyAgICAgIGlmKGRhdGEtPnJlcS5rZWVwb24gJiBLRUVQX1JFQ1YpCisgICAgICAgIHNvY2tpbmRleCsrOyAvKiBpbmNyZWFzZSBpbmRleCBpZiB3ZSBuZWVkIHR3byBlbnRyaWVzICovCisKKyAgICAgIERFQlVHQVNTRVJUKGNvbm4tPndyaXRlc29ja2ZkICE9IENVUkxfU09DS0VUX0JBRCk7CisKKyAgICAgIHNvY2tbc29ja2luZGV4XSA9IGNvbm4tPndyaXRlc29ja2ZkOworICAgIH0KKworICAgIGJpdG1hcCB8PSBHRVRTT0NLX1dSSVRFU09DSyhzb2NraW5kZXgpOworICB9CisKKyAgcmV0dXJuIGJpdG1hcDsKK30KKworLyoKKyAqIERldGVybWluZSBvcHRpbXVtIHNsZWVwIHRpbWUgYmFzZWQgb24gY29uZmlndXJlZCByYXRlLCBjdXJyZW50IHJhdGUsCisgKiBhbmQgcGFja2V0IHNpemUuCisgKiBSZXR1cm5zIHZhbHVlIGluIG1pbGxpc2Vjb25kcy4KKyAqCisgKiBUaGUgYmFzaWMgaWRlYSBpcyB0byBhZGp1c3QgdGhlIGRlc2lyZWQgcmF0ZSB1cC9kb3duIGluIHRoaXMgbWV0aG9kCisgKiBiYXNlZCBvbiB3aGV0aGVyIHdlIGFyZSBydW5uaW5nIHRvbyBzbG93IG9yIHRvbyBmYXN0LiAgVGhlbiwgY2FsY3VsYXRlCisgKiBob3cgbWFueSBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIG5leHQgcGFja2V0IHRvIGFjaGlldmUgdGhpcyBuZXcKKyAqIHJhdGUuCisgKi8KK2xvbmcgQ3VybF9zbGVlcF90aW1lKGN1cmxfb2ZmX3QgcmF0ZV9icHMsIGN1cmxfb2ZmX3QgY3VyX3JhdGVfYnBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGt0X3NpemUpCit7CisgIGN1cmxfb2ZmX3QgbWluX3NsZWVwID0gMDsKKyAgY3VybF9vZmZfdCBydiA9IDA7CisKKyAgaWYocmF0ZV9icHMgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICAvKiBJZiBydW5uaW5nIGZhc3RlciB0aGFuIGFib3V0IC4xJSBvZiB0aGUgZGVzaXJlZCBzcGVlZCwgc2xvdworICAgKiB1cyBkb3duIGEgYml0LiAgVXNlIHNoaWZ0IGluc3RlYWQgb2YgZGl2aXNpb24gYXMgdGhlIDAuMSUKKyAgICogY3V0b2ZmIGlzIGFyYml0cmFyeSBhbnl3YXkuCisgICAqLworICBpZihjdXJfcmF0ZV9icHMgPiAocmF0ZV9icHMgKyAocmF0ZV9icHMgPj4gMTApKSkgeworICAgIC8qIHJ1bm5pbmcgdG9vIGZhc3QsIGRlY3JlYXNlIHRhcmdldCByYXRlIGJ5IDEvNjR0aCBvZiByYXRlICovCisgICAgcmF0ZV9icHMgLT0gcmF0ZV9icHMgPj4gNjsKKyAgICBtaW5fc2xlZXAgPSAxOworICB9CisgIGVsc2UgaWYoY3VyX3JhdGVfYnBzIDwgKHJhdGVfYnBzIC0gKHJhdGVfYnBzID4+IDEwKSkpIHsKKyAgICAvKiBydW5uaW5nIHRvbyBzbG93LCBpbmNyZWFzZSB0YXJnZXQgcmF0ZSBieSAxLzY0dGggb2YgcmF0ZSAqLworICAgIHJhdGVfYnBzICs9IHJhdGVfYnBzID4+IDY7CisgIH0KKworICAvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHdlIGRvCisgICAqIHRoZSBuZXh0IHBhY2tldCBhdCB0aGUgYWRqdXN0ZWQgcmF0ZS4gIFdlIHNob3VsZCB3YWl0CisgICAqIGxvbmdlciB3aGVuIHVzaW5nIGxhcmdlciBwYWNrZXRzLCBmb3IgaW5zdGFuY2UuCisgICAqLworICBydiA9ICgoY3VybF9vZmZfdCkoKHBrdF9zaXplICogOCkgKiAxMDAwKSAvIHJhdGVfYnBzKTsKKworICAvKiBDYXRjaCByb3VuZGluZyBlcnJvcnMgYW5kIGFsd2F5cyBzbG93IGRvd24gYXQgbGVhc3QgMW1zIGlmCisgICAqIHdlIGFyZSBydW5uaW5nIHRvbyBmYXN0LgorICAgKi8KKyAgaWYocnYgPCBtaW5fc2xlZXApCisgICAgcnYgPSBtaW5fc2xlZXA7CisKKyAgLyogQm91bmQgdmFsdWUgdG8gZml0IGluICdsb25nJyBvbiAzMi1iaXQgcGxhdGZvcm0uICBUaGF0J3MKKyAgICogcGxlbnR5IGxvbmcgZW5vdWdoIGFueXdheSEKKyAgICovCisgIGlmKHJ2ID4gMHg3ZmZmZmZmZikKKyAgICBydiA9IDB4N2ZmZmZmZmY7CisKKyAgcmV0dXJuIChsb25nKXJ2OworfQorCisKKy8qCisgKiBUcmFuc2ZlcigpCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB3aGF0IHBlcmZvcm1zIHRoZSBhY3R1YWwgdHJhbnNmZXIuIEl0IGlzIGNhcGFibGUgb2YgZG9pbmcKKyAqIGJvdGggd2F5cyBzaW11bHRhbmVvdXNseS4gIFRoZSB0cmFuc2ZlciBtdXN0IGFscmVhZHkgaGF2ZSBiZWVuIHNldHVwIGJ5IGEKKyAqIGNhbGwgdG8gQ3VybF9zZXR1cF90cmFuc2ZlcigpLgorICoKKyAqIE5vdGUgdGhhdCBoZWFkZXJzIGFyZSBjcmVhdGVkIGluIGEgcHJlYWxsb2NhdGVkIGJ1ZmZlciBvZiBhIGRlZmF1bHQgc2l6ZS4KKyAqIFRoYXQgYnVmZmVyIGNhbiBiZSBlbmxhcmdlZCBvbiBkZW1hbmQsIGJ1dCBpdCBpcyBuZXZlciBzaHJ1bmtlbiBhZ2Fpbi4KKyAqCisgKi8KKworc3RhdGljIENVUkxjb2RlCitUcmFuc2ZlcihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIENVUkxjb2RlIHJlc3VsdDsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7CisgIGJvb2wgZG9uZT1GQUxTRTsKKyAgYm9vbCBmaXJzdD1UUlVFOworICBsb25nIHRpbWVvdXRfbXM7CisgIGludCBidWZmZXJzaXplOworICBsb25nIHRvdG1wOworCisgIGlmKChjb25uLT5zb2NrZmQgPT0gQ1VSTF9TT0NLRVRfQkFEKSAmJgorICAgICAoY29ubi0+d3JpdGVzb2NrZmQgPT0gQ1VSTF9TT0NLRVRfQkFEKSkKKyAgICAvKiBub3RoaW5nIHRvIHJlYWQsIG5vdGhpbmcgdG8gd3JpdGUsIHdlJ3JlIGFscmVhZHkgT0shICovCisgICAgcmV0dXJuIENVUkxFX09LOworCisgIC8qIHdlIHdhbnQgaGVhZGVyIGFuZC9vciBib2R5LCBpZiBuZWl0aGVyIHRoZW4gZG9uJ3QgZG8gdGhpcyEgKi8KKyAgaWYoIWstPmdldGhlYWRlciAmJiBkYXRhLT5zZXQub3B0X25vX2JvZHkpCisgICAgcmV0dXJuIENVUkxFX09LOworCisgIHdoaWxlKCFkb25lKSB7CisgICAgY3VybF9zb2NrZXRfdCBmZF9yZWFkID0gY29ubi0+c29ja2ZkOworICAgIGN1cmxfc29ja2V0X3QgZmRfd3JpdGUgPSBjb25uLT53cml0ZXNvY2tmZDsKKyAgICBpbnQga2VlcG9uID0gay0+a2VlcG9uOworICAgIHRpbWVvdXRfbXMgPSAxMDAwOworCisgICAgaWYoY29ubi0+d2FpdGZvcikgeworICAgICAgLyogaWYgd2FpdGZvciBpcyBzZXQsIGdldCB0aGUgUkVDViBhbmQgU0VORCBiaXRzIGZyb20gdGhhdCBidXQga2VlcCB0aGUKKyAgICAgICAgIG90aGVyIGJpdHMgKi8KKyAgICAgIGtlZXBvbiAmPSB+IChLRUVQX1JFQ1Z8S0VFUF9TRU5EKTsKKyAgICAgIGtlZXBvbiB8PSBjb25uLT53YWl0Zm9yICYgKEtFRVBfUkVDVnxLRUVQX1NFTkQpOworICAgIH0KKworICAgIC8qIGxpbWl0LXJhdGUgbG9naWM6IGlmIHNwZWVkIGV4Y2VlZHMgdGhyZXNob2xkLCB0aGVuIGRvIG5vdCBpbmNsdWRlIGZkIGluCisgICAgICAgc2VsZWN0IHNldC4gVGhlIGN1cnJlbnQgc3BlZWQgaXMgcmVjYWxjdWxhdGVkIGluIGVhY2ggQ3VybF9yZWFkd3JpdGUoKQorICAgICAgIGNhbGwgKi8KKyAgICBpZigoa2VlcG9uICYgS0VFUF9TRU5EKSAmJgorICAgICAgICAoIWRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCB8fAorICAgICAgICAgKGRhdGEtPnByb2dyZXNzLnVsc3BlZWQgPCBkYXRhLT5zZXQubWF4X3NlbmRfc3BlZWQpICkpIHsKKyAgICAgIGstPmtlZXBvbiAmPSB+S0VFUF9TRU5EX0hPTEQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYoZGF0YS0+c2V0LnVwbG9hZCAmJiBkYXRhLT5zZXQubWF4X3NlbmRfc3BlZWQgJiYKKyAgICAgICAgIChkYXRhLT5wcm9ncmVzcy51bHNwZWVkID4gZGF0YS0+c2V0Lm1heF9zZW5kX3NwZWVkKSApIHsKKyAgICAgICAgLyogY2FsY3VsYXRlIHVwbG9hZCByYXRlLWxpbWl0YXRpb24gdGltZW91dC4gKi8KKyAgICAgICAgYnVmZmVyc2l6ZSA9IChpbnQpKGRhdGEtPnNldC5idWZmZXJfc2l6ZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuYnVmZmVyX3NpemUgOiBCVUZTSVpFKTsKKyAgICAgICAgdG90bXAgPSBDdXJsX3NsZWVwX3RpbWUoZGF0YS0+c2V0Lm1heF9zZW5kX3NwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5wcm9ncmVzcy51bHNwZWVkLCBidWZmZXJzaXplKTsKKyAgICAgICAgaWYodG90bXAgPCB0aW1lb3V0X21zKQorICAgICAgICAgIHRpbWVvdXRfbXMgPSB0b3RtcDsKKyAgICAgIH0KKyAgICAgIGZkX3dyaXRlID0gQ1VSTF9TT0NLRVRfQkFEOworICAgICAgaWYoa2VlcG9uICYgS0VFUF9TRU5EKQorICAgICAgICBrLT5rZWVwb24gfD0gS0VFUF9TRU5EX0hPTEQ7IC8qIGhvbGQgaXQgKi8KKyAgICB9CisKKyAgICBpZigoa2VlcG9uICYgS0VFUF9SRUNWKSAmJgorICAgICAgICAoIWRhdGEtPnNldC5tYXhfcmVjdl9zcGVlZCB8fAorICAgICAgICAgKGRhdGEtPnByb2dyZXNzLmRsc3BlZWQgPCBkYXRhLT5zZXQubWF4X3JlY3Zfc3BlZWQpKSApIHsKKyAgICAgIGstPmtlZXBvbiAmPSB+S0VFUF9SRUNWX0hPTEQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYoKCFkYXRhLT5zZXQudXBsb2FkKSAmJiBkYXRhLT5zZXQubWF4X3JlY3Zfc3BlZWQgJiYKKyAgICAgICAgIChkYXRhLT5wcm9ncmVzcy5kbHNwZWVkID4gZGF0YS0+c2V0Lm1heF9yZWN2X3NwZWVkKSkgeworICAgICAgICAvKiBDYWxjdWxhdGUgZG93bmxvYWQgcmF0ZS1saW1pdGF0aW9uIHRpbWVvdXQuICovCisgICAgICAgIGJ1ZmZlcnNpemUgPSAoaW50KShkYXRhLT5zZXQuYnVmZmVyX3NpemUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LmJ1ZmZlcl9zaXplIDogQlVGU0laRSk7CisgICAgICAgIHRvdG1wID0gQ3VybF9zbGVlcF90aW1lKGRhdGEtPnNldC5tYXhfcmVjdl9zcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCwgYnVmZmVyc2l6ZSk7CisgICAgICAgIGlmKHRvdG1wIDwgdGltZW91dF9tcykKKyAgICAgICAgICB0aW1lb3V0X21zID0gdG90bXA7CisgICAgICB9CisgICAgICBmZF9yZWFkID0gQ1VSTF9TT0NLRVRfQkFEOworICAgICAgaWYoa2VlcG9uICYgS0VFUF9SRUNWKQorICAgICAgICBrLT5rZWVwb24gfD0gS0VFUF9SRUNWX0hPTEQ7IC8qIGhvbGQgaXQgKi8KKyAgICB9CisKKyAgICAvKiBwYXVzZSBsb2dpYy4gRG9uJ3QgY2hlY2sgZGVzY3JpcHRvcnMgZm9yIHBhdXNlZCBjb25uZWN0aW9ucyAqLworICAgIGlmKGstPmtlZXBvbiAmIEtFRVBfUkVDVl9QQVVTRSkKKyAgICAgIGZkX3JlYWQgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgaWYoay0+a2VlcG9uICYgS0VFUF9TRU5EX1BBVVNFKQorICAgICAgZmRfd3JpdGUgPSBDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgICAvKiBUaGUgKl9IT0xEIGFuZCAqX1BBVVNFIGxvZ2ljIGlzIG5lY2Vzc2FyeSBzaW5jZSBldmVuIHRob3VnaCB0aGVyZSBtaWdodAorICAgICAgIGJlIG5vIHRyYWZmaWMgZHVyaW5nIHRoZSBzZWxlY3QgaW50ZXJ2YWwsIHdlIHN0aWxsIGNhbGwKKyAgICAgICBDdXJsX3JlYWR3cml0ZSgpIGZvciB0aGUgdGltZW91dCBjYXNlIGFuZCBpZiB3ZSBsaW1pdCB0cmFuc2ZlciBzcGVlZCB3ZQorICAgICAgIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHRyYW5zZmVyIGFueXRoaW5nIHdoaWxlIGluCisgICAgICAgSE9MRCBzdGF0dXMuCisKKyAgICAgICBUaGUgbm8gdGltZW91dCBmb3IgdGhlIGZpcnN0IHJvdW5kIGlzIGZvciB0aGUgcHJvdG9jb2xzIGZvciB3aGljaCBkYXRhCisgICAgICAgaGFzIGFscmVhZHkgYmVlbiBzbHVycGVkIG9mZiB0aGUgc29ja2V0IGFuZCB0aHVzIHdhaXRpbmcgZm9yIGFjdGlvbgorICAgICAgIHdvbid0IHdvcmsgc2luY2UgaXQnbGwgd2FpdCBldmVuIHRob3VnaCB0aGVyZSBpcyBhbHJlYWR5IGRhdGEgcHJlc2VudAorICAgICAgIHRvIHdvcmsgd2l0aC4gKi8KKyAgICBpZihmaXJzdCAmJgorICAgICAgICgoZmRfcmVhZCAhPSBDVVJMX1NPQ0tFVF9CQUQpIHx8IChmZF93cml0ZSAhPSBDVVJMX1NPQ0tFVF9CQUQpKSkKKyAgICAgIC8qIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGxhcCBhbmQgb25lIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3JzIGlzIGZpbmUKKyAgICAgICAgIHRvIHdvcmsgd2l0aCwgc2tpcCB0aGUgdGltZW91dCAqLworICAgICAgdGltZW91dF9tcyA9IDA7CisgICAgZWxzZSB7CisgICAgICB0b3RtcCA9IEN1cmxfdGltZWxlZnQoZGF0YSwgJmstPm5vdywgRkFMU0UpOworICAgICAgaWYodG90bXAgPCAwKQorICAgICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOworICAgICAgZWxzZSBpZighdG90bXApCisgICAgICAgIHRvdG1wID0gMTAwMDsKKworICAgICAgaWYodG90bXAgPCB0aW1lb3V0X21zKQorICAgICAgICB0aW1lb3V0X21zID0gdG90bXA7CisgICAgfQorCisgICAgc3dpdGNoIChDdXJsX3NvY2tldF9yZWFkeShmZF9yZWFkLCBmZF93cml0ZSwgdGltZW91dF9tcykpIHsKKyAgICBjYXNlIC0xOiAvKiBzZWxlY3QoKSBlcnJvciwgc3RvcCByZWFkaW5nICovCisjaWZkZWYgRUlOVFIKKyAgICAgIC8qIFRoZSBFSU5UUiBpcyBub3Qgc2VyaW91cywgYW5kIGl0IHNlZW1zIHlvdSBtaWdodCBnZXQgdGhpcyBtb3JlCisgICAgICAgICBvZnRlbiB3aGVuIHVzaW5nIHRoZSBsaWIgaW4gYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudCEgKi8KKyAgICAgIGlmKFNPQ0tFUlJOTyA9PSBFSU5UUikKKyAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgIHJldHVybiBDVVJMRV9SRUNWX0VSUk9SOyAgLyogaW5kaWNhdGUgYSBuZXR3b3JrIHByb2JsZW0gKi8KKyAgICBjYXNlIDA6ICAvKiB0aW1lb3V0ICovCisgICAgZGVmYXVsdDogLyogcmVhZGFibGUgZGVzY3JpcHRvcnMgKi8KKworICAgICAgcmVzdWx0ID0gQ3VybF9yZWFkd3JpdGUoY29ubiwgJmRvbmUpOworICAgICAgLyogImRvbmUiIHNpZ25hbHMgdG8gdXMgaWYgdGhlIHRyYW5zZmVyKHMpIGFyZSByZWFkeSAqLworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBmaXJzdCA9IEZBTFNFOyAvKiBub3QgdGhlIGZpcnN0IGxhcCBhbnltb3JlICovCisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKworLyoKKyAqIEN1cmxfcHJldHJhbnNmZXIoKSBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIGEgdHJhbnNmZXIgc3RhcnRzLgorICovCitDVVJMY29kZSBDdXJsX3ByZXRyYW5zZmVyKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBDVVJMY29kZSByZXM7CisgIGlmKCFkYXRhLT5jaGFuZ2UudXJsKSB7CisgICAgLyogd2UgY2FuJ3QgZG8gYW55dGhpbmcgd2l0aG91dCBVUkwgKi8KKyAgICBmYWlsZihkYXRhLCAiTm8gVVJMIHNldCEiKTsKKyAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKKyAgfQorCisgIC8qIEluaXQgdGhlIFNTTCBzZXNzaW9uIElEIGNhY2hlIGhlcmUuIFdlIGRvIGl0IGhlcmUgc2luY2Ugd2Ugd2FudCB0byBkbyBpdAorICAgICBhZnRlciB0aGUgKl9zZXRvcHQoKSBjYWxscyAodGhhdCBjb3VsZCBzcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBjYWNoZSkgYnV0CisgICAgIGJlZm9yZSBhbnkgdHJhbnNmZXIgdGFrZXMgcGxhY2UuICovCisgIHJlcyA9IEN1cmxfc3NsX2luaXRzZXNzaW9ucyhkYXRhLCBkYXRhLT5zZXQuc3NsLm1heF9zc2xfc2Vzc2lvbnMpOworICBpZihyZXMpCisgICAgcmV0dXJuIHJlczsKKworICBkYXRhLT5zZXQuZm9sbG93bG9jYXRpb249MDsgLyogcmVzZXQgdGhlIGxvY2F0aW9uLWZvbGxvdyBjb3VudGVyICovCisgIGRhdGEtPnN0YXRlLnRoaXNfaXNfYV9mb2xsb3cgPSBGQUxTRTsgLyogcmVzZXQgdGhpcyAqLworICBkYXRhLT5zdGF0ZS5lcnJvcmJ1ZiA9IEZBTFNFOyAvKiBubyBlcnJvciBoYXMgb2NjdXJyZWQgKi8KKyAgZGF0YS0+c3RhdGUuaHR0cHZlcnNpb24gPSAwOyAvKiBkb24ndCBhc3N1bWUgYW55IHBhcnRpY3VsYXIgc2VydmVyIHZlcnNpb24gKi8KKworICBkYXRhLT5zdGF0ZS5zc2xfY29ubmVjdF9yZXRyeSA9IEZBTFNFOworCisgIGRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtID0gRkFMU0U7CisgIGRhdGEtPnN0YXRlLmF1dGhob3N0LndhbnQgPSBkYXRhLT5zZXQuaHR0cGF1dGg7CisgIGRhdGEtPnN0YXRlLmF1dGhwcm94eS53YW50ID0gZGF0YS0+c2V0LnByb3h5YXV0aDsKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5pbmZvLndvdWxkcmVkaXJlY3QpOworICBkYXRhLT5pbmZvLndvdWxkcmVkaXJlY3QgPSBOVUxMOworCisgIC8qIElmIHRoZXJlIGlzIGEgbGlzdCBvZiBjb29raWUgZmlsZXMgdG8gcmVhZCwgZG8gaXQgbm93ISAqLworICBpZihkYXRhLT5jaGFuZ2UuY29va2llbGlzdCkKKyAgICBDdXJsX2Nvb2tpZV9sb2FkZmlsZXMoZGF0YSk7CisKKyAgLyogSWYgdGhlcmUgaXMgYSBsaXN0IG9mIGhvc3QgcGFpcnMgdG8gZGVhbCB3aXRoICovCisgIGlmKGRhdGEtPmNoYW5nZS5yZXNvbHZlKQorICAgIHJlcyA9IEN1cmxfbG9hZGhvc3RwYWlycyhkYXRhKTsKKworICBpZighcmVzKSB7CisgICAgLyogQWxsb3cgZGF0YS0+c2V0LnVzZV9wb3J0IHRvIHNldCB3aGljaCBwb3J0IHRvIHVzZS4gVGhpcyBuZWVkcyB0byBiZQorICAgICAqIGRpc2FibGVkIGZvciBleGFtcGxlIHdoZW4gd2UgZm9sbG93IExvY2F0aW9uOiBoZWFkZXJzIHRvIFVSTHMgdXNpbmcKKyAgICAgKiBkaWZmZXJlbnQgcG9ydHMhICovCisgICAgZGF0YS0+c3RhdGUuYWxsb3dfcG9ydCA9IFRSVUU7CisKKyNpZiBkZWZpbmVkKEhBVkVfU0lHTkFMKSAmJiBkZWZpbmVkKFNJR1BJUEUpICYmICFkZWZpbmVkKEhBVkVfTVNHX05PU0lHTkFMKQorICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGVsbCBzaWduYWwgaGFuZGxlciB0byBpZ25vcmUgU0lHUElQRQorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIGlmKCFkYXRhLT5zZXQubm9fc2lnbmFsKQorICAgICAgZGF0YS0+c3RhdGUucHJldl9zaWduYWwgPSBzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7CisjZW5kaWYKKworICAgIEN1cmxfaW5pdGluZm8oZGF0YSk7IC8qIHJlc2V0IHNlc3Npb24tc3BlY2lmaWMgaW5mb3JtYXRpb24gInZhcmlhYmxlcyIgKi8KKyAgICBDdXJsX3BncnNTdGFydE5vdyhkYXRhKTsKKworICAgIGlmKGRhdGEtPnNldC50aW1lb3V0KQorICAgICAgQ3VybF9leHBpcmUoZGF0YSwgZGF0YS0+c2V0LnRpbWVvdXQpOworCisgICAgaWYoZGF0YS0+c2V0LmNvbm5lY3R0aW1lb3V0KQorICAgICAgQ3VybF9leHBpcmUoZGF0YSwgZGF0YS0+c2V0LmNvbm5lY3R0aW1lb3V0KTsKKyAgfQorCisgIHJldHVybiByZXM7Cit9CisKKy8qCisgKiBDdXJsX3Bvc3R0cmFuc2ZlcigpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBhIHRyYW5zZmVyIGVuZHMKKyAqLworQ1VSTGNvZGUgQ3VybF9wb3N0dHJhbnNmZXIoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisjaWYgZGVmaW5lZChIQVZFX1NJR05BTCkgJiYgZGVmaW5lZChTSUdQSVBFKSAmJiAhZGVmaW5lZChIQVZFX01TR19OT1NJR05BTCkKKyAgLyogcmVzdG9yZSB0aGUgc2lnbmFsIGhhbmRsZXIgZm9yIFNJR1BJUEUgYmVmb3JlIHdlIGdldCBiYWNrICovCisgIGlmKCFkYXRhLT5zZXQubm9fc2lnbmFsKQorICAgIHNpZ25hbChTSUdQSVBFLCBkYXRhLT5zdGF0ZS5wcmV2X3NpZ25hbCk7CisjZWxzZQorICAodm9pZClkYXRhOyAvKiB1bnVzZWQgcGFyYW1ldGVyICovCisjZW5kaWYKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKKy8qCisgKiBzdHJsZW5fdXJsKCkgcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBnaXZlbiBVUkwgaWYgdGhlIHNwYWNlcyB3aXRoaW4gdGhlCisgKiBVUkwgd2VyZSBwcm9wZXJseSBVUkwgZW5jb2RlZC4KKyAqLworc3RhdGljIHNpemVfdCBzdHJsZW5fdXJsKGNvbnN0IGNoYXIgKnVybCkKK3sKKyAgY29uc3QgY2hhciAqcHRyOworICBzaXplX3QgbmV3bGVuPTA7CisgIGJvb2wgbGVmdD1UUlVFOyAvKiBsZWZ0IHNpZGUgb2YgdGhlID8gKi8KKworICBmb3IocHRyPXVybDsgKnB0cjsgcHRyKyspIHsKKyAgICBzd2l0Y2goKnB0cikgeworICAgIGNhc2UgJz8nOgorICAgICAgbGVmdD1GQUxTRTsKKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGRlZmF1bHQ6CisgICAgICBuZXdsZW4rKzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJyAnOgorICAgICAgaWYobGVmdCkKKyAgICAgICAgbmV3bGVuKz0zOworICAgICAgZWxzZQorICAgICAgICBuZXdsZW4rKzsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICByZXR1cm4gbmV3bGVuOworfQorCisvKiBzdHJjcHlfdXJsKCkgY29waWVzIGEgdXJsIHRvIGEgb3V0cHV0IGJ1ZmZlciBhbmQgVVJMLWVuY29kZXMgdGhlIHNwYWNlcyBpbgorICogdGhlIHNvdXJjZSBVUkwgYWNjb3JkaW5nbHkuCisgKi8KK3N0YXRpYyB2b2lkIHN0cmNweV91cmwoY2hhciAqb3V0cHV0LCBjb25zdCBjaGFyICp1cmwpCit7CisgIC8qIHdlIG11c3QgYWRkIHRoaXMgd2l0aCB3aGl0ZXNwYWNlLXJlcGxhY2luZyAqLworICBib29sIGxlZnQ9VFJVRTsKKyAgY29uc3QgY2hhciAqaXB0cjsKKyAgY2hhciAqb3B0ciA9IG91dHB1dDsKKyAgZm9yKGlwdHIgPSB1cmw7ICAgIC8qIHJlYWQgZnJvbSBoZXJlICovCisgICAgICAqaXB0cjsgICAgICAgICAvKiB1bnRpbCB6ZXJvIGJ5dGUgKi8KKyAgICAgIGlwdHIrKykgeworICAgIHN3aXRjaCgqaXB0cikgeworICAgIGNhc2UgJz8nOgorICAgICAgbGVmdD1GQUxTRTsKKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGRlZmF1bHQ6CisgICAgICAqb3B0cisrPSppcHRyOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnICc6CisgICAgICBpZihsZWZ0KSB7CisgICAgICAgICpvcHRyKys9JyUnOyAvKiBhZGQgYSAnJScgKi8KKyAgICAgICAgKm9wdHIrKz0nMic7IC8qIGFkZCBhICcyJyAqLworICAgICAgICAqb3B0cisrPScwJzsgLyogYWRkIGEgJzAnICovCisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgICpvcHRyKys9JysnOyAvKiBhZGQgYSAnKycgaGVyZSAqLworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgICpvcHRyPTA7IC8qIHplcm8gdGVybWluYXRlIG91dHB1dCBidWZmZXIgKi8KKworfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBVUkwgaXMgYWJzb2x1dGUgKGFzIG9wcG9zZWQgdG8gcmVsYXRpdmUpCisgKi8KK3N0YXRpYyBib29sIGlzX2Fic29sdXRlX3VybChjb25zdCBjaGFyICp1cmwpCit7CisgIGNoYXIgcHJvdFsxNl07IC8qIFVSTCBwcm90b2NvbCBzdHJpbmcgc3RvcmFnZSAqLworICBjaGFyIGxldHRlcjsgICAvKiB1c2VkIGZvciBhIHNpbGx5IHNzY2FuZiAqLworCisgIHJldHVybiAoMiA9PSBzc2NhbmYodXJsLCAiJTE1W14/Ji86XTovLyVjIiwgcHJvdCwgJmxldHRlcikpID8gVFJVRSA6IEZBTFNFOworfQorCisvKgorICogQ29uY2F0ZW5hdGUgYSByZWxhdGl2ZSBVUkwgdG8gYSBiYXNlIFVSTCBtYWtpbmcgaXQgYWJzb2x1dGUuCisgKiBVUkwtZW5jb2RlcyBhbnkgc3BhY2VzLgorICogVGhlIHJldHVybmVkIHBvaW50ZXIgbXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyIHVubGVzcyBOVUxMCisgKiAocmV0dXJucyBOVUxMIG9uIG91dCBvZiBtZW1vcnkpLgorICovCitzdGF0aWMgY2hhciAqY29uY2F0X3VybChjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpyZWx1cmwpCit7CisgIC8qKioKKyAgIFRSWSB0byBhcHBlbmQgdGhpcyBuZXcgcGF0aCB0byB0aGUgb2xkIFVSTAorICAgdG8gdGhlIHJpZ2h0IG9mIHRoZSBob3N0IHBhcnQuIE9oIGNyYXAsIHRoaXMgaXMgZG9vbWVkIHRvIGNhdXNlCisgICBwcm9ibGVtcyBpbiB0aGUgZnV0dXJlLi4uCisgICovCisgIGNoYXIgKm5ld2VzdDsKKyAgY2hhciAqcHJvdHNlcDsKKyAgY2hhciAqcGF0aHNlcDsKKyAgc2l6ZV90IG5ld2xlbjsKKworICBjb25zdCBjaGFyICp1c2V1cmwgPSByZWx1cmw7CisgIHNpemVfdCB1cmxsZW47CisKKyAgLyogd2UgbXVzdCBtYWtlIG91ciBvd24gY29weSBvZiB0aGUgVVJMIHRvIHBsYXkgd2l0aCwgYXMgaXQgbWF5CisgICAgIHBvaW50IHRvIHJlYWQtb25seSBkYXRhICovCisgIGNoYXIgKnVybF9jbG9uZT1zdHJkdXAoYmFzZSk7CisKKyAgaWYoIXVybF9jbG9uZSkKKyAgICByZXR1cm4gTlVMTDsgLyogc2tpcCBvdXQgb2YgdGhpcyBOT1cgKi8KKworICAvKiBwcm90c2VwIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGhvc3QgbmFtZSAqLworICBwcm90c2VwPXN0cnN0cih1cmxfY2xvbmUsICIvLyIpOworICBpZighcHJvdHNlcCkKKyAgICBwcm90c2VwPXVybF9jbG9uZTsKKyAgZWxzZQorICAgIHByb3RzZXArPTI7IC8qIHBhc3MgdGhlIHNsYXNoZXMgKi8KKworICBpZignLycgIT0gcmVsdXJsWzBdKSB7CisgICAgaW50IGxldmVsPTA7CisKKyAgICAvKiBGaXJzdCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZXJlJ3MgYSA/LWxldHRlciBpbiB0aGUgVVJMLAorICAgICAgIGFuZCBjdXQgaXQgYW5kIHRoZSByaWdodC1zaWRlIG9mIHRoYXQgb2ZmICovCisgICAgcGF0aHNlcCA9IHN0cmNocihwcm90c2VwLCAnPycpOworICAgIGlmKHBhdGhzZXApCisgICAgICAqcGF0aHNlcD0wOworCisgICAgLyogd2UgaGF2ZSBhIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBsYXN0IHNsYXNoIGlmIHRoZXJlJ3Mgb25lCisgICAgICAgYXZhaWxhYmxlLCBvciBpZiB0aGUgbmV3IFVSTCBpcyBqdXN0IGEgcXVlcnkgc3RyaW5nIChzdGFydHMgd2l0aCBhCisgICAgICAgJz8nKSAgd2UgYXBwZW5kIHRoZSBuZXcgb25lIGF0IHRoZSBlbmQgb2YgdGhlIGVudGlyZSBjdXJyZW50bHkgd29ya2VkCisgICAgICAgb3V0IFVSTCAqLworICAgIGlmKHVzZXVybFswXSAhPSAnPycpIHsKKyAgICAgIHBhdGhzZXAgPSBzdHJyY2hyKHByb3RzZXAsICcvJyk7CisgICAgICBpZihwYXRoc2VwKQorICAgICAgICAqcGF0aHNlcD0wOworICAgIH0KKworICAgIC8qIENoZWNrIGlmIHRoZXJlJ3MgYW55IHNsYXNoIGFmdGVyIHRoZSBob3N0IG5hbWUsIGFuZCBpZiBzbywgcmVtZW1iZXIKKyAgICAgICB0aGF0IHBvc2l0aW9uIGluc3RlYWQgKi8KKyAgICBwYXRoc2VwID0gc3RyY2hyKHByb3RzZXAsICcvJyk7CisgICAgaWYocGF0aHNlcCkKKyAgICAgIHByb3RzZXAgPSBwYXRoc2VwKzE7CisgICAgZWxzZQorICAgICAgcHJvdHNlcCA9IE5VTEw7CisKKyAgICAvKiBub3cgZGVhbCB3aXRoIG9uZSAiLi8iIG9yIGFueSBhbW91bnQgb2YgIi4uLyIgaW4gdGhlIG5ld3VybAorICAgICAgIGFuZCBhY3QgYWNjb3JkaW5nbHkgKi8KKworICAgIGlmKCh1c2V1cmxbMF0gPT0gJy4nKSAmJiAodXNldXJsWzFdID09ICcvJykpCisgICAgICB1c2V1cmwrPTI7IC8qIGp1c3Qgc2tpcCB0aGUgIi4vIiAqLworCisgICAgd2hpbGUoKHVzZXVybFswXSA9PSAnLicpICYmCisgICAgICAgICAgKHVzZXVybFsxXSA9PSAnLicpICYmCisgICAgICAgICAgKHVzZXVybFsyXSA9PSAnLycpKSB7CisgICAgICBsZXZlbCsrOworICAgICAgdXNldXJsKz0zOyAvKiBwYXNzIHRoZSAiLi4vIiAqLworICAgIH0KKworICAgIGlmKHByb3RzZXApIHsKKyAgICAgIHdoaWxlKGxldmVsLS0pIHsKKyAgICAgICAgLyogY3V0IG9mZiBvbmUgbW9yZSBsZXZlbCBmcm9tIHRoZSByaWdodCBvZiB0aGUgb3JpZ2luYWwgVVJMICovCisgICAgICAgIHBhdGhzZXAgPSBzdHJyY2hyKHByb3RzZXAsICcvJyk7CisgICAgICAgIGlmKHBhdGhzZXApCisgICAgICAgICAgKnBhdGhzZXA9MDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgKnByb3RzZXA9MDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBXZSBnb3QgYSBuZXcgYWJzb2x1dGUgcGF0aCBmb3IgdGhpcyBzZXJ2ZXIgKi8KKworICAgIGlmKChyZWx1cmxbMF0gPT0gJy8nKSAmJiAocmVsdXJsWzFdID09ICcvJykpIHsKKyAgICAgIC8qIHRoZSBuZXcgVVJMIHN0YXJ0cyB3aXRoIC8vLCBqdXN0IGtlZXAgdGhlIHByb3RvY29sIHBhcnQgZnJvbSB0aGUKKyAgICAgICAgIG9yaWdpbmFsIG9uZSAqLworICAgICAgKnByb3RzZXA9MDsKKyAgICAgIHVzZXVybCA9ICZyZWx1cmxbMl07IC8qIHdlIGtlZXAgdGhlIHNsYXNoZXMgZnJvbSB0aGUgb3JpZ2luYWwsIHNvIHdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwIHRoZSBuZXcgb25lcyAqLworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIGN1dCBvZmYgdGhlIG9yaWdpbmFsIFVSTCBmcm9tIHRoZSBmaXJzdCBzbGFzaCwgb3IgZGVhbCB3aXRoIFVSTHMKKyAgICAgICAgIHdpdGhvdXQgc2xhc2ggKi8KKyAgICAgIHBhdGhzZXAgPSBzdHJjaHIocHJvdHNlcCwgJy8nKTsKKyAgICAgIGlmKHBhdGhzZXApIHsKKyAgICAgICAgLyogV2hlbiBwZW9wbGUgdXNlIGJhZGx5IGZvcm1hdHRlZCBVUkxzLCBzdWNoIGFzCisgICAgICAgICAgICJodHRwOi8vd3d3LnVybC5jb20/ZGlyPS9ob21lL2RhbmllbCIgd2UgbXVzdCBub3QgdXNlIHRoZSBmaXJzdAorICAgICAgICAgICBzbGFzaCwgaWYgdGhlcmUncyBhID8tbGV0dGVyIGJlZm9yZSBpdCEgKi8KKyAgICAgICAgY2hhciAqc2VwID0gc3RyY2hyKHByb3RzZXAsICc/Jyk7CisgICAgICAgIGlmKHNlcCAmJiAoc2VwIDwgcGF0aHNlcCkpCisgICAgICAgICAgcGF0aHNlcCA9IHNlcDsKKyAgICAgICAgKnBhdGhzZXA9MDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBUaGVyZSB3YXMgbm8gc2xhc2guIE5vdywgc2luY2Ugd2UgbWlnaHQgYmUgb3BlcmF0aW5nIG9uIGEgYmFkbHkKKyAgICAgICAgICAgZm9ybWF0dGVkIFVSTCwgc3VjaCBhcyAiaHR0cDovL3d3dy51cmwuY29tP2lkPTIzODAiIHdoaWNoIGRvZXNuJ3QKKyAgICAgICAgICAgdXNlIGEgc2xhc2ggc2VwYXJhdG9yIGFzIGl0IGlzIHN1cHBvc2VkIHRvLCB3ZSBuZWVkIHRvIGNoZWNrIGZvciBhCisgICAgICAgICAgID8tbGV0dGVyIGFzIHdlbGwhICovCisgICAgICAgIHBhdGhzZXAgPSBzdHJjaHIocHJvdHNlcCwgJz8nKTsKKyAgICAgICAgaWYocGF0aHNlcCkKKyAgICAgICAgICAqcGF0aHNlcD0wOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8qIElmIHRoZSBuZXcgcGFydCBjb250YWlucyBhIHNwYWNlLCB0aGlzIGlzIGEgbWlnaHR5IHN0dXBpZCByZWRpcmVjdAorICAgICBidXQgd2Ugc3RpbGwgbWFrZSBhbiBlZmZvcnQgdG8gZG8gInJpZ2h0Ii4gVG8gdGhlIGxlZnQgb2YgYSAnPycKKyAgICAgbGV0dGVyIHdlIHJlcGxhY2UgZWFjaCBzcGFjZSB3aXRoICUyMCB3aGlsZSBpdCBpcyByZXBsYWNlZCB3aXRoICcrJworICAgICBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgJz8nIGxldHRlci4KKyAgKi8KKyAgbmV3bGVuID0gc3RybGVuX3VybCh1c2V1cmwpOworCisgIHVybGxlbiA9IHN0cmxlbih1cmxfY2xvbmUpOworCisgIG5ld2VzdCA9IG1hbGxvYyh1cmxsZW4gKyAxICsgLyogcG9zc2libGUgc2xhc2ggKi8KKyAgICAgICAgICAgICAgICAgIG5ld2xlbiArIDEgLyogemVybyBieXRlICovKTsKKworICBpZighbmV3ZXN0KSB7CisgICAgZnJlZSh1cmxfY2xvbmUpOyAvKiBkb24ndCBsZWFrIHRoaXMgKi8KKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIC8qIGNvcHkgb3ZlciB0aGUgcm9vdCB1cmwgcGFydCAqLworICBtZW1jcHkobmV3ZXN0LCB1cmxfY2xvbmUsIHVybGxlbik7CisKKyAgLyogY2hlY2sgaWYgd2UgbmVlZCB0byBhcHBlbmQgYSBzbGFzaCAqLworICBpZigoJy8nID09IHVzZXVybFswXSkgfHwgKHByb3RzZXAgJiYgISpwcm90c2VwKSB8fCAoJz8nID09IHVzZXVybFswXSkpCisgICAgOworICBlbHNlCisgICAgbmV3ZXN0W3VybGxlbisrXT0nLyc7CisKKyAgLyogdGhlbiBhcHBlbmQgdGhlIG5ldyBwaWVjZSBvbiB0aGUgcmlnaHQgc2lkZSAqLworICBzdHJjcHlfdXJsKCZuZXdlc3RbdXJsbGVuXSwgdXNldXJsKTsKKworICBmcmVlKHVybF9jbG9uZSk7CisKKyAgcmV0dXJuIG5ld2VzdDsKK30KKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfSFRUUCAqLworCisvKgorICogQ3VybF9mb2xsb3coKSBoYW5kbGVzIHRoZSBVUkwgcmVkaXJlY3QgbWFnaWMuIFBhc3MgaW4gdGhlICduZXd1cmwnIHN0cmluZworICogYXMgZ2l2ZW4gYnkgdGhlIHJlbW90ZSBzZXJ2ZXIgYW5kIHNldCB1cCB0aGUgbmV3IFVSTCB0byByZXF1ZXN0LgorICovCitDVVJMY29kZSBDdXJsX2ZvbGxvdyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5ld3VybCwgLyogdGhpcyAnbmV3dXJsJyBpcyB0aGUgTG9jYXRpb246IHN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGl0IG11c3QgYmUgbWFsbG9jKCllZCBiZWZvcmUgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgIGZvbGxvd3R5cGUgdHlwZSkgLyogc2VlIHRyYW5zZmVyLmggKi8KK3sKKyNpZmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorICAodm9pZClkYXRhOworICAodm9pZCluZXd1cmw7CisgICh2b2lkKXR5cGU7CisgIC8qIExvY2F0aW9uOiBmb2xsb3dpbmcgd2lsbCBub3QgaGFwcGVuIHdoZW4gSFRUUCBpcyBkaXNhYmxlZCAqLworICByZXR1cm4gQ1VSTEVfVE9PX01BTllfUkVESVJFQ1RTOworI2Vsc2UKKworICAvKiBMb2NhdGlvbjogcmVkaXJlY3QgKi8KKyAgYm9vbCBkaXNhbGxvd3BvcnQgPSBGQUxTRTsKKworICBpZih0eXBlID09IEZPTExPV19SRURJUikgeworICAgIGlmKChkYXRhLT5zZXQubWF4cmVkaXJzICE9IC0xKSAmJgorICAgICAgICAoZGF0YS0+c2V0LmZvbGxvd2xvY2F0aW9uID49IGRhdGEtPnNldC5tYXhyZWRpcnMpKSB7CisgICAgICBmYWlsZihkYXRhLCJNYXhpbXVtICglbGQpIHJlZGlyZWN0cyBmb2xsb3dlZCIsIGRhdGEtPnNldC5tYXhyZWRpcnMpOworICAgICAgcmV0dXJuIENVUkxFX1RPT19NQU5ZX1JFRElSRUNUUzsKKyAgICB9CisKKyAgICAvKiBtYXJrIHRoZSBuZXh0IHJlcXVlc3QgYXMgYSBmb2xsb3dlZCBsb2NhdGlvbjogKi8KKyAgICBkYXRhLT5zdGF0ZS50aGlzX2lzX2FfZm9sbG93ID0gVFJVRTsKKworICAgIGRhdGEtPnNldC5mb2xsb3dsb2NhdGlvbisrOyAvKiBjb3VudCBsb2NhdGlvbi1mb2xsb3dlcnMgKi8KKworICAgIGlmKGRhdGEtPnNldC5odHRwX2F1dG9fcmVmZXJlcikgeworICAgICAgLyogV2UgYXJlIGFza2VkIHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcmV2aW91cyBVUkwgYXMgdGhlIHJlZmVyZXIKKyAgICAgICAgIHdoZW4gd2UgZ2V0IHRoZSBuZXh0IFVSTC4gV2UgcGljayB0aGUgLT51cmwgZmllbGQsIHdoaWNoIG1heSBvciBtYXkKKyAgICAgICAgIG5vdCBiZSAxMDAlIGNvcnJlY3QgKi8KKworICAgICAgaWYoZGF0YS0+Y2hhbmdlLnJlZmVyZXJfYWxsb2MpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5jaGFuZ2UucmVmZXJlcik7CisgICAgICAgIGRhdGEtPmNoYW5nZS5yZWZlcmVyX2FsbG9jID0gRkFMU0U7CisgICAgICB9CisKKyAgICAgIGRhdGEtPmNoYW5nZS5yZWZlcmVyID0gc3RyZHVwKGRhdGEtPmNoYW5nZS51cmwpOworICAgICAgaWYoIWRhdGEtPmNoYW5nZS5yZWZlcmVyKQorICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIGRhdGEtPmNoYW5nZS5yZWZlcmVyX2FsbG9jID0gVFJVRTsgLyogeWVzLCBmcmVlIHRoaXMgbGF0ZXIgKi8KKyAgICB9CisgIH0KKworICBpZighaXNfYWJzb2x1dGVfdXJsKG5ld3VybCkpICB7CisgICAgLyoqKgorICAgICAqREFORyogdGhpcyBpcyBhbiBSRkMgMjA2OCB2aW9sYXRpb24uIFRoZSBVUkwgaXMgc3VwcG9zZWQKKyAgICAgdG8gYmUgYWJzb2x1dGUgYW5kIHRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIHRoYXQhCisgICAgICovCisgICAgY2hhciAqYWJzb2x1dGUgPSBjb25jYXRfdXJsKGRhdGEtPmNoYW5nZS51cmwsIG5ld3VybCk7CisgICAgaWYoIWFic29sdXRlKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgZnJlZShuZXd1cmwpOworICAgIG5ld3VybCA9IGFic29sdXRlOworICB9CisgIGVsc2UgeworICAgIC8qIFRoaXMgaXMgYW4gYWJzb2x1dGUgVVJMLCBkb24ndCBhbGxvdyB0aGUgY3VzdG9tIHBvcnQgbnVtYmVyICovCisgICAgZGlzYWxsb3dwb3J0ID0gVFJVRTsKKworICAgIGlmKHN0cmNocihuZXd1cmwsICcgJykpIHsKKyAgICAgIC8qIFRoaXMgbmV3IFVSTCBjb250YWlucyBhdCBsZWFzdCBvbmUgc3BhY2UsIHRoaXMgaXMgYSBtaWdodHkgc3R1cGlkCisgICAgICAgICByZWRpcmVjdCBidXQgd2Ugc3RpbGwgbWFrZSBhbiBlZmZvcnQgdG8gZG8gInJpZ2h0Ii4gKi8KKyAgICAgIGNoYXIgKm5ld2VzdDsKKyAgICAgIHNpemVfdCBuZXdsZW4gPSBzdHJsZW5fdXJsKG5ld3VybCk7CisKKyAgICAgIG5ld2VzdCA9IG1hbGxvYyhuZXdsZW4rMSk7IC8qIGdldCBtZW1vcnkgZm9yIHRoaXMgKi8KKyAgICAgIGlmKCFuZXdlc3QpCisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgc3RyY3B5X3VybChuZXdlc3QsIG5ld3VybCk7IC8qIGNyZWF0ZSBhIHNwYWNlLWZyZWUgVVJMICovCisKKyAgICAgIGZyZWUobmV3dXJsKTsgLyogdGhhdCB3YXMgbm8gZ29vZCAqLworICAgICAgbmV3dXJsID0gbmV3ZXN0OyAvKiB1c2UgdGhpcyBpbnN0ZWFkIG5vdyAqLworICAgIH0KKworICB9CisKKyAgaWYodHlwZSA9PSBGT0xMT1dfRkFLRSkgeworICAgIC8qIHdlJ3JlIG9ubHkgZmlndXJpbmcgb3V0IHRoZSBuZXcgdXJsIGlmIHdlIHdvdWxkJ3ZlIGZvbGxvd2VkIGxvY2F0aW9ucworICAgICAgIGJ1dCBub3cgd2UncmUgZG9uZSBzbyB3ZSBjYW4gZ2V0IG91dCEgKi8KKyAgICBkYXRhLT5pbmZvLndvdWxkcmVkaXJlY3QgPSBuZXd1cmw7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgaWYoZGlzYWxsb3dwb3J0KQorICAgIGRhdGEtPnN0YXRlLmFsbG93X3BvcnQgPSBGQUxTRTsKKworICBpZihkYXRhLT5jaGFuZ2UudXJsX2FsbG9jKSB7CisgICAgQ3VybF9zYWZlZnJlZShkYXRhLT5jaGFuZ2UudXJsKTsKKyAgICBkYXRhLT5jaGFuZ2UudXJsX2FsbG9jID0gRkFMU0U7CisgIH0KKworICBkYXRhLT5jaGFuZ2UudXJsID0gbmV3dXJsOworICBkYXRhLT5jaGFuZ2UudXJsX2FsbG9jID0gVFJVRTsKKyAgbmV3dXJsID0gTlVMTDsgLyogZG9uJ3QgZnJlZSEgKi8KKworICBpbmZvZihkYXRhLCAiSXNzdWUgYW5vdGhlciByZXF1ZXN0IHRvIHRoaXMgVVJMOiAnJXMnXG4iLCBkYXRhLT5jaGFuZ2UudXJsKTsKKworICAvKgorICAgKiBXZSBnZXQgaGVyZSB3aGVuIHRoZSBIVFRQIGNvZGUgaXMgMzAwLTM5OSAoYW5kIDQwMSkuIFdlIG5lZWQgdG8gcGVyZm9ybQorICAgKiBkaWZmZXJlbnRseSBiYXNlZCBvbiBleGFjdGx5IHdoYXQgcmV0dXJuIGNvZGUgdGhlcmUgd2FzLgorICAgKgorICAgKiBOZXdzIGZyb20gNy4xMC42OiB3ZSBjYW4gYWxzbyBnZXQgaGVyZSBvbiBhIDQwMSBvciA0MDcsIGluIGNhc2Ugd2UgYWN0IG9uCisgICAqIGEgSFRUUCAocHJveHktKSBhdXRoZW50aWNhdGlvbiBzY2hlbWUgb3RoZXIgdGhhbiBCYXNpYy4KKyAgICovCisgIHN3aXRjaChkYXRhLT5pbmZvLmh0dHBjb2RlKSB7CisgICAgLyogNDAxIC0gQWN0IG9uIGEgV1dXLUF1dGhlbnRpY2F0ZSwgd2Uga2VlcCBvbiBtb3ZpbmcgYW5kIGRvIHRoZQorICAgICAgIEF1dGhvcml6YXRpb246IFhYWFggaGVhZGVyIGluIHRoZSBIVFRQIHJlcXVlc3QgY29kZSBzbmlwcGV0ICovCisgICAgLyogNDA3IC0gQWN0IG9uIGEgUHJveHktQXV0aGVudGljYXRlLCB3ZSBrZWVwIG9uIG1vdmluZyBhbmQgZG8gdGhlCisgICAgICAgUHJveHktQXV0aG9yaXphdGlvbjogWFhYWCBoZWFkZXIgaW4gdGhlIEhUVFAgcmVxdWVzdCBjb2RlIHNuaXBwZXQgKi8KKyAgICAvKiAzMDAgLSBNdWx0aXBsZSBDaG9pY2VzICovCisgICAgLyogMzA2IC0gTm90IHVzZWQgKi8KKyAgICAvKiAzMDcgLSBUZW1wb3JhcnkgUmVkaXJlY3QgKi8KKyAgZGVmYXVsdDogIC8qIGZvciBhbGwgYWJvdmUgKGFuZCB0aGUgdW5rbm93biBvbmVzKSAqLworICAgIC8qIFNvbWUgY29kZXMgYXJlIGV4cGxpY2l0bHkgbWVudGlvbmVkIHNpbmNlIEkndmUgY2hlY2tlZCBSRkMyNjE2IGFuZCB0aGV5CisgICAgICogc2VlbSB0byBiZSBPSyB0byBQT1NUIHRvLgorICAgICAqLworICAgIGJyZWFrOworICBjYXNlIDMwMTogLyogTW92ZWQgUGVybWFuZW50bHkgKi8KKyAgICAvKiAocXVvdGUgZnJvbSBSRkMyNjE2LCBzZWN0aW9uIDEwLjMuMik6CisgICAgICoKKyAgICAgKiBXaGVuIGF1dG9tYXRpY2FsbHkgcmVkaXJlY3RpbmcgYSBQT1NUIHJlcXVlc3QgYWZ0ZXIgcmVjZWl2aW5nIGEgMzAxCisgICAgICogc3RhdHVzIGNvZGUsIHNvbWUgZXhpc3RpbmcgSFRUUC8xLjAgdXNlciBhZ2VudHMgd2lsbCBlcnJvbmVvdXNseSBjaGFuZ2UKKyAgICAgKiBpdCBpbnRvIGEgR0VUIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiAtLS0tCisgICAgICoKKyAgICAgKiBBcyBtb3N0IG9mIHRoZSBpbXBvcnRhbnQgdXNlciBhZ2VudHMgZG8gdGhpcyBvYnZpb3VzIFJGQzI2MTYgdmlvbGF0aW9uLAorICAgICAqIG1hbnkgd2Vic2VydmVycyBleHBlY3QgdGhpcy4gU28gdGhlc2Ugc2VydmVycyBvZnRlbiBhbnN3ZXJzIHRvIGEgUE9TVAorICAgICAqIHJlcXVlc3Qgd2l0aCBhbiBlcnJvciBwYWdlLiAgVG8gYmUgc3VyZSB0aGF0IGxpYmN1cmwgZ2V0cyB0aGUgcGFnZSB0aGF0CisgICAgICogbW9zdCB1c2VyIGFnZW50cyB3b3VsZCBnZXQsIGxpYmN1cmwgaGFzIHRvIGZvcmNlIEdFVC4KKyAgICAgKgorICAgICAqIFRoaXMgYmVoYXZpb3IgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBDVVJMT1BUX1BPU1RSRURJUi4KKyAgICAgKi8KKyAgICBpZigoZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUCisgICAgICAgIHx8IGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9GT1JNKQorICAgICAgICYmICFkYXRhLT5zZXQucG9zdDMwMSkgeworICAgICAgaW5mb2YoZGF0YSwKKyAgICAgICAgICAgICJWaW9sYXRlIFJGQyAyNjE2LzEwLjMuMiBhbmQgc3dpdGNoIGZyb20gUE9TVCB0byBHRVRcbiIpOworICAgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX0dFVDsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgMzAyOiAvKiBGb3VuZCAqLworICAgIC8qIChGcm9tIDEwLjMuMykKKworICAgIE5vdGU6IFJGQyAxOTQ1IGFuZCBSRkMgMjA2OCBzcGVjaWZ5IHRoYXQgdGhlIGNsaWVudCBpcyBub3QgYWxsb3dlZAorICAgIHRvIGNoYW5nZSB0aGUgbWV0aG9kIG9uIHRoZSByZWRpcmVjdGVkIHJlcXVlc3QuICBIb3dldmVyLCBtb3N0CisgICAgZXhpc3RpbmcgdXNlciBhZ2VudCBpbXBsZW1lbnRhdGlvbnMgdHJlYXQgMzAyIGFzIGlmIGl0IHdlcmUgYSAzMDMKKyAgICByZXNwb25zZSwgcGVyZm9ybWluZyBhIEdFVCBvbiB0aGUgTG9jYXRpb24gZmllbGQtdmFsdWUgcmVnYXJkbGVzcworICAgIG9mIHRoZSBvcmlnaW5hbCByZXF1ZXN0IG1ldGhvZC4gVGhlIHN0YXR1cyBjb2RlcyAzMDMgYW5kIDMwNyBoYXZlCisgICAgYmVlbiBhZGRlZCBmb3Igc2VydmVycyB0aGF0IHdpc2ggdG8gbWFrZSB1bmFtYmlndW91c2x5IGNsZWFyIHdoaWNoCisgICAga2luZCBvZiByZWFjdGlvbiBpcyBleHBlY3RlZCBvZiB0aGUgY2xpZW50LgorCisgICAgKEZyb20gMTAuMy40KQorCisgICAgTm90ZTogTWFueSBwcmUtSFRUUC8xLjEgdXNlciBhZ2VudHMgZG8gbm90IHVuZGVyc3RhbmQgdGhlIDMwMworICAgIHN0YXR1cy4gV2hlbiBpbnRlcm9wZXJhYmlsaXR5IHdpdGggc3VjaCBjbGllbnRzIGlzIGEgY29uY2VybiwgdGhlCisgICAgMzAyIHN0YXR1cyBjb2RlIG1heSBiZSB1c2VkIGluc3RlYWQsIHNpbmNlIG1vc3QgdXNlciBhZ2VudHMgcmVhY3QKKyAgICB0byBhIDMwMiByZXNwb25zZSBhcyBkZXNjcmliZWQgaGVyZSBmb3IgMzAzLgorCisgICAgVGhpcyBiZWhhdmlvciBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIENVUkxPUFRfUE9TVFJFRElSCisgICAgKi8KKyAgICBpZigoZGF0YS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9QT1NUCisgICAgICAgIHx8IGRhdGEtPnNldC5odHRwcmVxID09IEhUVFBSRVFfUE9TVF9GT1JNKQorICAgICAgICYmICFkYXRhLT5zZXQucG9zdDMwMikgeworICAgICAgaW5mb2YoZGF0YSwKKyAgICAgICAgICAgICJWaW9sYXRlIFJGQyAyNjE2LzEwLjMuMyBhbmQgc3dpdGNoIGZyb20gUE9TVCB0byBHRVRcbiIpOworICAgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX0dFVDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzMDM6IC8qIFNlZSBPdGhlciAqLworICAgIC8qIERpc2FibGUgYm90aCB0eXBlcyBvZiBQT1NUcywgc2luY2UgZG9pbmcgYSBzZWNvbmQgUE9TVCB3aGVuCisgICAgICogZm9sbG93aW5nIGlzbid0IHdoYXQgYW55b25lIHdvdWxkIHdhbnQhICovCisgICAgaWYoZGF0YS0+c2V0Lmh0dHByZXEgIT0gSFRUUFJFUV9HRVQpIHsKKyAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9HRVQ7IC8qIGVuZm9yY2UgR0VUIHJlcXVlc3QgKi8KKyAgICAgIGluZm9mKGRhdGEsICJEaXNhYmxlcyBQT1NULCBnb2VzIHdpdGggJXNcbiIsCisgICAgICAgICAgICBkYXRhLT5zZXQub3B0X25vX2JvZHk/IkhFQUQiOiJHRVQiKTsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgMzA0OiAvKiBOb3QgTW9kaWZpZWQgKi8KKyAgICAvKiAzMDQgbWVhbnMgd2UgZGlkIGEgY29uZGl0aW9uYWwgcmVxdWVzdCBhbmQgaXQgd2FzICJOb3QgbW9kaWZpZWQiLgorICAgICAqIFdlIHNob3VsZG4ndCBnZXQgYW55IExvY2F0aW9uOiBoZWFkZXIgaW4gdGhpcyByZXNwb25zZSEKKyAgICAgKi8KKyAgICBicmVhazsKKyAgY2FzZSAzMDU6IC8qIFVzZSBQcm94eSAqLworICAgIC8qIChxdW90ZSBmcm9tIFJGQzI2MTYsIHNlY3Rpb24gMTAuMy42KToKKyAgICAgKiAiVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBNVVNUIGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHByb3h5IGdpdmVuCisgICAgICogYnkgdGhlIExvY2F0aW9uIGZpZWxkLiBUaGUgTG9jYXRpb24gZmllbGQgZ2l2ZXMgdGhlIFVSSSBvZiB0aGUKKyAgICAgKiBwcm94eS4gIFRoZSByZWNpcGllbnQgaXMgZXhwZWN0ZWQgdG8gcmVwZWF0IHRoaXMgc2luZ2xlIHJlcXVlc3QKKyAgICAgKiB2aWEgdGhlIHByb3h5LiAzMDUgcmVzcG9uc2VzIE1VU1Qgb25seSBiZSBnZW5lcmF0ZWQgYnkgb3JpZ2luCisgICAgICogc2VydmVycy4iCisgICAgICovCisgICAgYnJlYWs7CisgIH0KKyAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9SRURJUkVDVCk7CisgIEN1cmxfcGdyc1Jlc2V0VGltZXMoZGF0YSk7CisKKyAgcmV0dXJuIENVUkxFX09LOworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9IVFRQICovCit9CisKK3N0YXRpYyBDVVJMY29kZQorY29ubmVjdF9ob3N0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqKmNvbm4pCit7CisgIENVUkxjb2RlIHJlcyA9IENVUkxFX09LOworCisgIGJvb2wgYXN5bmM7CisgIGJvb2wgcHJvdG9jb2xfZG9uZT1UUlVFOyAvKiB3aWxsIGJlIFRSVUUgYWx3YXlzIHNpbmNlIHRoaXMgaXMgb25seSB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgZWFzeSBpbnRlcmZhY2UgKi8KKyAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9TVEFSVFNJTkdMRSk7CisgIHJlcyA9IEN1cmxfY29ubmVjdChkYXRhLCBjb25uLCAmYXN5bmMsICZwcm90b2NvbF9kb25lKTsKKworICBpZigoQ1VSTEVfT0sgPT0gcmVzKSAmJiBhc3luYykgeworICAgIC8qIE5vdywgaWYgYXN5bmMgaXMgVFJVRSBoZXJlLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuYW1lCisgICAgICAgdG8gcmVzb2x2ZSAqLworICAgIHJlcyA9IEN1cmxfcmVzb2x2ZXJfd2FpdF9yZXNvbHYoKmNvbm4sIE5VTEwpOworICAgIGlmKENVUkxFX09LID09IHJlcykgeworICAgICAgLyogUmVzb2x2ZWQsIGNvbnRpbnVlIHdpdGggdGhlIGNvbm5lY3Rpb24gKi8KKyAgICAgIHJlcyA9IEN1cmxfYXN5bmNfcmVzb2x2ZWQoKmNvbm4sICZwcm90b2NvbF9kb25lKTsKKyAgICAgIGlmKHJlcykKKyAgICAgICAgKmNvbm4gPSBOVUxMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIGlmIHdlIGNhbid0IHJlc29sdmUsIHdlIGtpbGwgdGhpcyAiY29ubmVjdGlvbiIgbm93ICovCisgICAgICAodm9pZClDdXJsX2Rpc2Nvbm5lY3QoKmNvbm4sIC8qIGRlYWRfY29ubmVjdGlvbiAqLyBGQUxTRSk7CisgICAgICAqY29ubiA9IE5VTEw7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlczsKK30KKworQ1VSTGNvZGUKK0N1cmxfcmVjb25uZWN0X3JlcXVlc3Qoc3RydWN0IGNvbm5lY3RkYXRhICoqY29ubnApCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSAqY29ubnA7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICAvKiBUaGlzIHdhcyBhIHJlLXVzZSBvZiBhIGNvbm5lY3Rpb24gYW5kIHdlIGdvdCBhIHdyaXRlIGVycm9yIGluIHRoZQorICAgKiBETy1waGFzZS4gVGhlbiB3ZSBESVNDT05ORUNUIHRoaXMgY29ubmVjdGlvbiBhbmQgaGF2ZSBhbm90aGVyIGF0dGVtcHQgdG8KKyAgICogQ09OTkVDVCBhbmQgdGhlbiBETyBhZ2FpbiEgVGhlIHJldHJ5IGNhbm5vdCBwb3NzaWJseSBmaW5kIGFub3RoZXIKKyAgICogY29ubmVjdGlvbiB0byByZS11c2UsIHNpbmNlIHdlIG9ubHkga2VlcCBvbmUgcG9zc2libGUgY29ubmVjdGlvbiBmb3IKKyAgICogZWFjaC4gICovCisKKyAgaW5mb2YoZGF0YSwgIlJlLXVzZWQgY29ubmVjdGlvbiBzZWVtcyBkZWFkLCBnZXQgYSBuZXcgb25lXG4iKTsKKworICBjb25uLT5iaXRzLmNsb3NlID0gVFJVRTsgLyogZW5mb3JjZSBjbG9zZSBvZiB0aGlzIGNvbm5lY3Rpb24gKi8KKyAgcmVzdWx0ID0gQ3VybF9kb25lKCZjb25uLCByZXN1bHQsIEZBTFNFKTsgLyogd2UgYXJlIHNvIGRvbmUgd2l0aCB0aGlzICovCisKKyAgLyogY29ubiBtYXkgbm8gbG9uZ2VyIGJlIGEgZ29vZCBwb2ludGVyICovCisKKyAgLyoKKyAgICogQWNjb3JkaW5nIHRvIGJ1ZyByZXBvcnQgIzEzMzAzMTAuIFdlIG5lZWQgdG8gY2hlY2sgZm9yIENVUkxFX1NFTkRfRVJST1IKKyAgICogaGVyZSBhcyB3ZWxsLiBJIGZpZ3VyZSB0aGlzIGNvdWxkIGhhcHBlbiB3aGVuIHRoZSByZXF1ZXN0IGZhaWxlZCBvbiBhIEZUUAorICAgKiBjb25uZWN0aW9uIGFuZCB0aHVzIEN1cmxfZG9uZSgpIGl0c2VsZiB0cmllZCB0byB1c2UgdGhlIGNvbm5lY3Rpb24KKyAgICogKGFnYWluKS4gU2xpZ2h0IExhY2sgb2YgZmVlZGJhY2sgaW4gdGhlIHJlcG9ydCwgYnV0IEkgZG9uJ3QgdGhpbmsgdGhpcworICAgKiBleHRyYSBjaGVjayBjYW4gZG8gbXVjaCBoYXJtLgorICAgKi8KKyAgaWYoKENVUkxFX09LID09IHJlc3VsdCkgfHwgKENVUkxFX1NFTkRfRVJST1IgPT0gcmVzdWx0KSkgeworICAgIGJvb2wgYXN5bmM7CisgICAgYm9vbCBwcm90b2NvbF9kb25lID0gVFJVRTsKKworICAgIC8qIE5vdywgcmVkbyB0aGUgY29ubmVjdCBhbmQgZ2V0IGEgbmV3IGNvbm5lY3Rpb24gKi8KKyAgICByZXN1bHQgPSBDdXJsX2Nvbm5lY3QoZGF0YSwgY29ubnAsICZhc3luYywgJnByb3RvY29sX2RvbmUpOworICAgIGlmKENVUkxFX09LID09IHJlc3VsdCkgeworICAgICAgLyogV2UgaGF2ZSBjb25uZWN0ZWQgb3Igc2VudCBhd2F5IGEgbmFtZSByZXNvbHZlIHF1ZXJ5IGZpbmUgKi8KKworICAgICAgY29ubiA9ICpjb25ucDsgLyogc2V0dXAgY29ubiB0byBhZ2FpbiBwb2ludCB0byBzb21ldGhpbmcgbmljZSAqLworICAgICAgaWYoYXN5bmMpIHsKKyAgICAgICAgLyogTm93LCBpZiBhc3luYyBpcyBUUlVFIGhlcmUsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5hbWUKKyAgICAgICAgICAgdG8gcmVzb2x2ZSAqLworICAgICAgICByZXN1bHQgPSBDdXJsX3Jlc29sdmVyX3dhaXRfcmVzb2x2KGNvbm4sIE5VTEwpOworICAgICAgICBpZihyZXN1bHQpCisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAvKiBSZXNvbHZlZCwgY29udGludWUgd2l0aCB0aGUgY29ubmVjdGlvbiAqLworICAgICAgICByZXN1bHQgPSBDdXJsX2FzeW5jX3Jlc29sdmVkKGNvbm4sICZwcm90b2NvbF9kb25lKTsKKyAgICAgICAgaWYocmVzdWx0KQorICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogUmV0dXJucyBDVVJMRV9PSyAqYW5kKiBzZXRzICcqdXJsJyBpZiBhIHJlcXVlc3QgcmV0cnkgaXMgd2FudGVkLgorCisgICBOT1RFOiB0aGF0IHRoZSAqdXJsIGlzIG1hbGxvYygpZWQuICovCitDVVJMY29kZSBDdXJsX3JldHJ5X3JlcXVlc3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip1cmwpCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICAqdXJsID0gTlVMTDsKKworICAvKiBpZiB3ZSdyZSB0YWxraW5nIHVwbG9hZCwgd2UgY2FuJ3QgZG8gdGhlIGNoZWNrcyBiZWxvdywgdW5sZXNzIHRoZSBwcm90b2NvbAorICAgICBpcyBIVFRQIGFzIHdoZW4gdXBsb2FkaW5nIG92ZXIgSFRUUCB3ZSB3aWxsIHN0aWxsIGdldCBhIHJlc3BvbnNlICovCisgIGlmKGRhdGEtPnNldC51cGxvYWQgJiYKKyAgICAgIShjb25uLT5oYW5kbGVyLT5wcm90b2NvbCYoQ1VSTFBST1RPX0hUVFB8Q1VSTFBST1RPX1JUU1ApKSkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgaWYoLyogd29ya2Fyb3VuZCBmb3IgYnJva2VuIFRMUyBzZXJ2ZXJzICovIGRhdGEtPnN0YXRlLnNzbF9jb25uZWN0X3JldHJ5IHx8CisgICAgICAoKGRhdGEtPnJlcS5ieXRlY291bnQgKworICAgICAgICBkYXRhLT5yZXEuaGVhZGVyYnl0ZWNvdW50ID09IDApICYmCisgICAgICAgIGNvbm4tPmJpdHMucmV1c2UgJiYKKyAgICAgICAgIWRhdGEtPnNldC5vcHRfbm9fYm9keSAmJgorICAgICAgICBkYXRhLT5zZXQucnRzcHJlcSAhPSBSVFNQUkVRX1JFQ0VJVkUpKSB7CisgICAgLyogV2UgZ290IG5vIGRhdGEsIHdlIGF0dGVtcHRlZCB0byByZS11c2UgYSBjb25uZWN0aW9uIGFuZCB5ZXQgd2Ugd2FudCBhCisgICAgICAgImJvZHkiLiBUaGlzIG1pZ2h0IGhhcHBlbiBpZiB0aGUgY29ubmVjdGlvbiB3YXMgbGVmdCBhbGl2ZSB3aGVuIHdlIHdlcmUKKyAgICAgICBkb25lIHVzaW5nIGl0IGJlZm9yZSwgYnV0IHRoYXQgd2FzIGNsb3NlZCB3aGVuIHdlIHdhbnRlZCB0byByZWFkIGZyb20KKyAgICAgICBpdCBhZ2Fpbi4gQmFkIGx1Y2suIFJldHJ5IHRoZSBzYW1lIHJlcXVlc3Qgb24gYSBmcmVzaCBjb25uZWN0ISAqLworICAgIGluZm9mKGNvbm4tPmRhdGEsICJDb25uZWN0aW9uIGRpZWQsIHJldHJ5aW5nIGEgZnJlc2ggY29ubmVjdFxuIik7CisgICAgKnVybCA9IHN0cmR1cChjb25uLT5kYXRhLT5jaGFuZ2UudXJsKTsKKyAgICBpZighKnVybCkKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgICAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7IC8qIGNsb3NlIHRoaXMgY29ubmVjdGlvbiAqLworICAgIGNvbm4tPmJpdHMucmV0cnkgPSBUUlVFOyAvKiBtYXJrIHRoaXMgYXMgYSBjb25uZWN0aW9uIHdlJ3JlIGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJldHJ5LiBNYXJraW5nIGl0IHRoaXMgd2F5IHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50IGkuZSBIVFRQIHRyYW5zZmVycyB0byByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IganVzdCBiZWNhdXNlIG5vdGhpbmcgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJyZWQhICovCisKKyAgICBpZihkYXRhLT5zdGF0ZS5wcm90by5odHRwLT53cml0ZWJ5dGVjb3VudCkKKyAgICAgIHJldHVybiBDdXJsX3JlYWRyZXdpbmQoY29ubik7CisgIH0KKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgQ3VybF9kb19wZXJmb3JtKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBDVVJMY29kZSByZXM7CisgIENVUkxjb2RlIHJlczI7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubj1OVUxMOworICBjaGFyICpuZXd1cmwgPSBOVUxMOyAvKiBwb3NzaWJseSBhIG5ldyBVUkwgdG8gZm9sbG93IHRvISAqLworICBmb2xsb3d0eXBlIGZvbGxvdyA9IEZPTExPV19OT05FOworCisgIGRhdGEtPnN0YXRlLnVzZWRfaW50ZXJmYWNlID0gQ3VybF9pZl9lYXN5OworCisgIHJlcyA9IEN1cmxfcHJldHJhbnNmZXIoZGF0YSk7CisgIGlmKHJlcykKKyAgICByZXR1cm4gcmVzOworCisgIC8qCisgICAqIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZXJlIGlzIE5PICdyZXR1cm4nIGZyb20gdGhpcyBmdW5jdGlvbiBhdCBhbnkgb3RoZXIKKyAgICogcGxhY2UgdGhhbiBmYWxsaW5nIGRvd24gdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24hIFRoaXMgaXMgYmVjYXVzZSB3ZQorICAgKiBoYXZlIGNsZWFudXAgc3R1ZmYgdGhhdCBtdXN0IGJlIGRvbmUgYmVmb3JlIHdlIGdldCBiYWNrLCBhbmQgdGhhdCBpcyBvbmx5CisgICAqIHBlcmZvcm1lZCBhZnRlciB0aGlzIGRvLXdoaWxlIGxvb3AuCisgICAqLworCisgIGZvcig7OykgeworICAgIHJlcyA9IGNvbm5lY3RfaG9zdChkYXRhLCAmY29ubik7ICAgLyogcHJpbWFyeSBjb25uZWN0aW9uICovCisKKyAgICBpZihyZXMgPT0gQ1VSTEVfT0spIHsKKyAgICAgIGJvb2wgZG9fZG9uZTsKKyAgICAgIGlmKGRhdGEtPnNldC5jb25uZWN0X29ubHkpIHsKKyAgICAgICAgLyoga2VlcCBjb25uZWN0aW9uIG9wZW4gZm9yIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUgc29ja2V0ICovCisgICAgICAgIGNvbm4tPmJpdHMuY2xvc2UgPSBGQUxTRTsKKyAgICAgICAgcmVzID0gQ3VybF9kb25lKCZjb25uLCBDVVJMRV9PSywgRkFMU0UpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHJlcyA9IEN1cmxfZG8oJmNvbm4sICZkb19kb25lKTsKKworICAgICAgaWYocmVzID09IENVUkxFX09LKSB7CisgICAgICAgIGlmKGNvbm4tPmRhdGEtPnNldC53aWxkY2FyZG1hdGNoKSB7CisgICAgICAgICAgaWYoY29ubi0+ZGF0YS0+d2lsZGNhcmQuc3RhdGUgPT0gQ1VSTFdDX0RPTkUgfHwKKyAgICAgICAgICAgICBjb25uLT5kYXRhLT53aWxkY2FyZC5zdGF0ZSA9PSBDVVJMV0NfU0tJUCkgeworICAgICAgICAgICAgLyoga2VlcCBjb25uZWN0aW9uIG9wZW4gZm9yIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUgc29ja2V0ICovCisgICAgICAgICAgICBjb25uLT5iaXRzLmNsb3NlID0gRkFMU0U7CisgICAgICAgICAgICByZXMgPSBDdXJsX2RvbmUoJmNvbm4sIENVUkxFX09LLCBGQUxTRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzID0gVHJhbnNmZXIoY29ubik7IC8qIG5vdyBmZXRjaCB0aGF0IFVSTCBwbGVhc2UgKi8KKyAgICAgICAgaWYoKHJlcyA9PSBDVVJMRV9PSykgfHwgKHJlcyA9PSBDVVJMRV9SRUNWX0VSUk9SKSkgeworICAgICAgICAgIGJvb2wgcmV0cnkgPSBGQUxTRTsKKyAgICAgICAgICBDVVJMY29kZSByYyA9IEN1cmxfcmV0cnlfcmVxdWVzdChjb25uLCAmbmV3dXJsKTsKKyAgICAgICAgICBpZihyYykKKyAgICAgICAgICAgIHJlcyA9IHJjOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHJ5ID0gKG5ld3VybD9UUlVFOkZBTFNFKTsKKworICAgICAgICAgIGlmKHJldHJ5KSB7CisgICAgICAgICAgICAvKiB3ZSBrbm93IChuZXd1cmwgIT0gTlVMTCkgYXQgdGhpcyBwb2ludCAqLworICAgICAgICAgICAgcmVzID0gQ1VSTEVfT0s7CisgICAgICAgICAgICBmb2xsb3cgPSBGT0xMT1dfUkVUUlk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYocmVzID09IENVUkxFX09LKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogV2UgbXVzdCBkdXBsaWNhdGUgdGhlIG5ldyBVUkwgaGVyZSBhcyB0aGUgY29ubmVjdGlvbiBkYXRhIG1heQorICAgICAgICAgICAgICogYmUgZnJlZSgpZWQgaW4gdGhlIEN1cmxfZG9uZSgpIGZ1bmN0aW9uLiBXZSBwcmVmZXIgdGhlIG5ld3VybAorICAgICAgICAgICAgICogb25lIHNpbmNlIHRoYXQncyB1c2VkIGZvciByZWRpcmVjdHMgb3IganVzdCBmdXJ0aGVyIHJlcXVlc3RzCisgICAgICAgICAgICAgKiBmb3IgcmV0cmllcyBvciBtdWx0aS1zdGFnZSBIVFRQIGF1dGggbWV0aG9kcyBldGMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmKGRhdGEtPnJlcS5uZXd1cmwpIHsKKyAgICAgICAgICAgICAgZm9sbG93ID0gRk9MTE9XX1JFRElSOworICAgICAgICAgICAgICBuZXd1cmwgPSBzdHJkdXAoZGF0YS0+cmVxLm5ld3VybCk7CisgICAgICAgICAgICAgIGlmKCFuZXd1cmwpCisgICAgICAgICAgICAgICAgcmVzID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoZGF0YS0+cmVxLmxvY2F0aW9uKSB7CisgICAgICAgICAgICAgIGZvbGxvdyA9IEZPTExPV19GQUtFOworICAgICAgICAgICAgICBuZXd1cmwgPSBzdHJkdXAoZGF0YS0+cmVxLmxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgaWYoIW5ld3VybCkKKyAgICAgICAgICAgICAgICByZXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIC8qIGluIHRoZSBhYm92ZSBjYXNlcyB3aGVyZSAnbmV3dXJsJyBnZXRzIGFzc2lnbmVkLCB3ZSBoYXZlIGEgZnJlc2gKKyAgICAgICAgICAgKiBhbGxvY2F0ZWQgbWVtb3J5IHBvaW50ZWQgdG8gKi8KKyAgICAgICAgfQorICAgICAgICBpZihyZXMgIT0gQ1VSTEVfT0spIHsKKyAgICAgICAgICAvKiBUaGUgdHJhbnNmZXIgcGhhc2UgcmV0dXJuZWQgZXJyb3IsIHdlIG1hcmsgdGhlIGNvbm5lY3Rpb24gdG8gZ2V0CisgICAgICAgICAgICogY2xvc2VkIHRvIHByZXZlbnQgYmVpbmcgcmUtdXNlZC4gVGhpcyBpcyBiZWNhdXNlIHdlIGNhbid0CisgICAgICAgICAgICogcG9zc2libHkga25vdyBpZiB0aGUgY29ubmVjdGlvbiBpcyBpbiBhIGdvb2Qgc2hhcGUgb3Igbm90IG5vdy4gKi8KKyAgICAgICAgICBjb25uLT5iaXRzLmNsb3NlID0gVFJVRTsKKworICAgICAgICAgIGlmKENVUkxfU09DS0VUX0JBRCAhPSBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pIHsKKyAgICAgICAgICAgIC8qIGlmIHdlIGZhaWxlZCBhbnl3aGVyZSwgd2UgbXVzdCBjbGVhbiB1cCB0aGUgc2Vjb25kYXJ5IHNvY2tldCBpZgorICAgICAgICAgICAgICAgaXQgd2FzIHVzZWQgKi8KKyAgICAgICAgICAgIEN1cmxfY2xvc2Vzb2NrZXQoY29ubiwgY29ubi0+c29ja1tTRUNPTkRBUllTT0NLRVRdKTsKKyAgICAgICAgICAgIGNvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXSA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBBbHdheXMgcnVuIEN1cmxfZG9uZSgpLCBldmVuIGlmIHNvbWUgb2YgdGhlIHByZXZpb3VzIGNhbGxzCisgICAgICAgICAgIGZhaWxlZCwgYnV0IHJldHVybiB0aGUgcHJldmlvdXMgKG9yaWdpbmFsKSBlcnJvciBjb2RlICovCisgICAgICAgIHJlczIgPSBDdXJsX2RvbmUoJmNvbm4sIHJlcywgRkFMU0UpOworCisgICAgICAgIGlmKENVUkxFX09LID09IHJlcykKKyAgICAgICAgICByZXMgPSByZXMyOworICAgICAgfQorICAgICAgZWxzZSBpZihjb25uKQorICAgICAgICAvKiBDdXJsX2RvKCkgZmFpbGVkLCBjbGVhbiB1cCBsZWZ0LW92ZXJzIGluIHRoZSBkb25lLWNhbGwsIGJ1dCBub3RlCisgICAgICAgICAgIHRoYXQgYXQgc29tZSBjYXNlcyB0aGUgY29ubiBwb2ludGVyIGlzIE5VTEwgd2hlbiBDdXJsX2RvKCkgZmFpbGVkCisgICAgICAgICAgIGFuZCB0aGUgY29ubmVjdGlvbiBjYWNoZSBpcyB2ZXJ5IHNtYWxsIHNvIG9ubHkgY2FsbCBDdXJsX2RvbmUoKSBpZgorICAgICAgICAgICBjb25uIGlzIHN0aWxsICJhbGl2ZSIuICovCisgICAgICAgIC8qIGlnbm9yZSByZXR1cm4gY29kZSBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYW4gZXJyb3IgdG8gcmV0dXJuICovCisgICAgICAgICh2b2lkKUN1cmxfZG9uZSgmY29ubiwgcmVzLCBGQUxTRSk7CisKKyAgICAgIC8qCisgICAgICAgKiBJbXBvcnRhbnQ6ICdjb25uJyBjYW5ub3QgYmUgdXNlZCBoZXJlLCBzaW5jZSBpdCBtYXkgaGF2ZSBiZWVuIGNsb3NlZAorICAgICAgICogaW4gJ0N1cmxfZG9uZScgb3Igb3RoZXIgZnVuY3Rpb25zLgorICAgICAgICovCisKKyAgICAgIGlmKChyZXMgPT0gQ1VSTEVfT0spICYmIGZvbGxvdykgeworICAgICAgICByZXMgPSBDdXJsX2ZvbGxvdyhkYXRhLCBuZXd1cmwsIGZvbGxvdyk7CisgICAgICAgIGlmKENVUkxFX09LID09IHJlcykgeworICAgICAgICAgIC8qIGlmIHRoaW5ncyB3ZW50IGZpbmUsIEN1cmxfZm9sbG93KCkgZnJlZWQgb3Igb3RoZXJ3aXNlIHRvb2sKKyAgICAgICAgICAgICByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG5ld3VybCBwb2ludGVyICovCisgICAgICAgICAgbmV3dXJsID0gTlVMTDsKKyAgICAgICAgICBpZihmb2xsb3cgPj0gRk9MTE9XX1JFVFJZKSB7CisgICAgICAgICAgICBmb2xsb3cgPSBGT0xMT1dfTk9ORTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICAvKiBlbHNlIHdlIGJyZWFrIG91dCBvZiB0aGUgbG9vcCBiZWxvdyAqLworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGJyZWFrOyAvKiBpdCBvbmx5IHJlYWNoZXMgaGVyZSB3aGVuIHRoaXMgc2hvdWxkbid0IGxvb3AgKi8KKworICB9IC8qIGxvb3AgaWYgTG9jYXRpb246ICovCisKKyAgaWYobmV3dXJsKQorICAgIGZyZWUobmV3dXJsKTsKKworICBpZihyZXMgJiYgIWRhdGEtPnN0YXRlLmVycm9yYnVmKSB7CisgICAgLyoKKyAgICAgKiBBcyBhbiBleHRyYSBwcmVjYXV0aW9uOiBpZiBubyBlcnJvciBzdHJpbmcgaGFzIGJlZW4gc2V0IGFuZCB0aGVyZSB3YXMKKyAgICAgKiBhbiBlcnJvciwgdXNlIHRoZSBzdHJlcnJvcigpIHN0cmluZyBvciBpZiB0aGluZ3MgYXJlIHNvIGJhZCB0aGF0IG5vdAorICAgICAqIGV2ZW4gdGhhdCBpcyBnb29kLCBzZXQgYSBiYWQgc3RyaW5nIHRoYXQgbWVudGlvbnMgdGhlIGVycm9yIGNvZGUuCisgICAgICovCisgICAgY29uc3QgY2hhciAqc3RyID0gY3VybF9lYXN5X3N0cmVycm9yKHJlcyk7CisgICAgaWYoIXN0cikKKyAgICAgIGZhaWxmKGRhdGEsICJ1bnNwZWNpZmllZCBlcnJvciAlZCIsIChpbnQpcmVzKTsKKyAgICBlbHNlCisgICAgICBmYWlsZihkYXRhLCAiJXMiLCBzdHIpOworICB9CisKKyAgLyogcnVuIHBvc3QtdHJhbnNmZXIgdW5jb25kaXRpb25hbGx5LCBidXQgZG9uJ3QgY2xvYmJlciB0aGUgcmV0dXJuIGNvZGUgaWYKKyAgICAgd2UgYWxyZWFkeSBoYXZlIGFuIGVycm9yIGNvZGUgcmVjb3JkZXIgKi8KKyAgcmVzMiA9IEN1cmxfcG9zdHRyYW5zZmVyKGRhdGEpOworICBpZighcmVzICYmIHJlczIpCisgICAgcmVzID0gcmVzMjsKKworICByZXR1cm4gcmVzOworfQorCisvKgorICogQ3VybF9wZXJmb3JtKCkgaXMgdGhlIGludGVybmFsIGhpZ2gtbGV2ZWwgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBieSB0aGUKKyAqIGV4dGVybmFsIGN1cmxfZWFzeV9wZXJmb3JtKCkgZnVuY3Rpb24uIEl0IGluaXRzLCBwZXJmb3JtcyBhbmQgY2xlYW5zIHVwIGEKKyAqIHNpbmdsZSBmaWxlIHRyYW5zZmVyLgorICovCitDVVJMY29kZSBDdXJsX3BlcmZvcm0oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIENVUkxjb2RlIHJlczsKKyAgaWYoIWRhdGEtPnNldC53aWxkY2FyZG1hdGNoKQorICAgIHJldHVybiBDdXJsX2RvX3BlcmZvcm0oZGF0YSk7CisKKyAgLyogaW5pdCBtYWluIHdpbGRjYXJkIHN0cnVjdHVyZXMgKi8KKyAgcmVzID0gQ3VybF93aWxkY2FyZF9pbml0KCZkYXRhLT53aWxkY2FyZCk7CisgIGlmKHJlcykKKyAgICByZXR1cm4gcmVzOworCisgIHJlcyA9IEN1cmxfZG9fcGVyZm9ybShkYXRhKTsKKyAgaWYocmVzKSB7CisgICAgQ3VybF93aWxkY2FyZF9kdG9yKCZkYXRhLT53aWxkY2FyZCk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIHdpbGRjYXJkIGxvb3AgKi8KKyAgd2hpbGUoIXJlcyAmJiBkYXRhLT53aWxkY2FyZC5zdGF0ZSAhPSBDVVJMV0NfRE9ORSkKKyAgICByZXMgPSBDdXJsX2RvX3BlcmZvcm0oZGF0YSk7CisKKyAgQ3VybF93aWxkY2FyZF9kdG9yKCZkYXRhLT53aWxkY2FyZCk7CisKKyAgLyogd2lsZGNhcmQgZG93bmxvYWQgZmluaXNoZWQgb3IgZmFpbGVkICovCisgIGRhdGEtPndpbGRjYXJkLnN0YXRlID0gQ1VSTFdDX0lOSVQ7CisgIHJldHVybiByZXM7Cit9CisKKy8qCisgKiBDdXJsX3NldHVwX3RyYW5zZmVyKCkgaXMgY2FsbGVkIHRvIHNldHVwIHNvbWUgYmFzaWMgcHJvcGVydGllcyBmb3IgdGhlCisgKiB1cGNvbWluZyB0cmFuc2Zlci4KKyAqLwordm9pZAorQ3VybF9zZXR1cF90cmFuc2ZlcigKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCAvKiBjb25uZWN0aW9uIGRhdGEgKi8KKyAgaW50IHNvY2tpbmRleCwgICAgICAgICAgICAvKiBzb2NrZXQgaW5kZXggdG8gcmVhZCBmcm9tIG9yIC0xICovCisgIGN1cmxfb2ZmX3Qgc2l6ZSwgICAgICAgICAgLyogLTEgaWYgdW5rbm93biBhdCB0aGlzIHBvaW50ICovCisgIGJvb2wgZ2V0aGVhZGVyLCAgICAgICAgICAgLyogVFJVRSBpZiBoZWFkZXIgcGFyc2luZyBpcyB3YW50ZWQgKi8KKyAgY3VybF9vZmZfdCAqYnl0ZWNvdW50cCwgICAvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3IgTlVMTCAqLworICBpbnQgd3JpdGVzb2NraW5kZXgsICAgICAgIC8qIHNvY2tldCBpbmRleCB0byB3cml0ZSB0bywgaXQgbWF5IHZlcnkgd2VsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1lIHdlIHJlYWQgZnJvbS4gLTEgZGlzYWJsZXMgKi8KKyAgY3VybF9vZmZfdCAqd3JpdGVjb3VudHAgICAvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgTlVMTCAqLworICApCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhOworICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqazsKKworICBERUJVR0FTU0VSVChjb25uICE9IE5VTEwpOworCisgIGRhdGEgPSBjb25uLT5kYXRhOworICBrID0gJmRhdGEtPnJlcTsKKworICBERUJVR0FTU0VSVCgoc29ja2luZGV4IDw9IDEpICYmIChzb2NraW5kZXggPj0gLTEpKTsKKworICAvKiBub3cgY29weSBhbGwgaW5wdXQgcGFyYW1ldGVycyAqLworICBjb25uLT5zb2NrZmQgPSBzb2NraW5kZXggPT0gLTEgPworICAgICAgQ1VSTF9TT0NLRVRfQkFEIDogY29ubi0+c29ja1tzb2NraW5kZXhdOworICBjb25uLT53cml0ZXNvY2tmZCA9IHdyaXRlc29ja2luZGV4ID09IC0xID8KKyAgICAgIENVUkxfU09DS0VUX0JBRDpjb25uLT5zb2NrW3dyaXRlc29ja2luZGV4XTsKKyAgay0+Z2V0aGVhZGVyID0gZ2V0aGVhZGVyOworCisgIGstPnNpemUgPSBzaXplOworICBrLT5ieXRlY291bnRwID0gYnl0ZWNvdW50cDsKKyAgay0+d3JpdGVieXRlY291bnRwID0gd3JpdGVjb3VudHA7CisKKyAgLyogVGhlIGNvZGUgc2VxdWVuY2UgYmVsb3cgaXMgcGxhY2VkIGluIHRoaXMgZnVuY3Rpb24ganVzdCBiZWNhdXNlIGFsbAorICAgICBuZWNlc3NhcnkgaW5wdXQgaXMgbm90IGFsd2F5cyBrbm93biBpbiBkb19jb21wbGV0ZSgpIGFzIHRoaXMgZnVuY3Rpb24gbWF5CisgICAgIGJlIGNhbGxlZCBhZnRlciB0aGF0ICovCisKKyAgaWYoIWstPmdldGhlYWRlcikgeworICAgIGstPmhlYWRlciA9IEZBTFNFOworICAgIGlmKHNpemUgPiAwKQorICAgICAgQ3VybF9wZ3JzU2V0RG93bmxvYWRTaXplKGRhdGEsIHNpemUpOworICB9CisgIC8qIHdlIHdhbnQgaGVhZGVyIGFuZC9vciBib2R5LCBpZiBuZWl0aGVyIHRoZW4gZG9uJ3QgZG8gdGhpcyEgKi8KKyAgaWYoay0+Z2V0aGVhZGVyIHx8ICFkYXRhLT5zZXQub3B0X25vX2JvZHkpIHsKKworICAgIGlmKGNvbm4tPnNvY2tmZCAhPSBDVVJMX1NPQ0tFVF9CQUQpCisgICAgICBrLT5rZWVwb24gfD0gS0VFUF9SRUNWOworCisgICAgaWYoY29ubi0+d3JpdGVzb2NrZmQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICAvKiBIVFRQIDEuMSBtYWdpYzoKKworICAgICAgICAgRXZlbiBpZiB3ZSByZXF1aXJlIGEgMTAwLXJldHVybiBjb2RlIGJlZm9yZSB1cGxvYWRpbmcgZGF0YSwgd2UgbWlnaHQKKyAgICAgICAgIG5lZWQgdG8gd3JpdGUgZGF0YSBiZWZvcmUgdGhhdCBzaW5jZSB0aGUgUkVRVUVTVCBtYXkgbm90IGhhdmUgYmVlbgorICAgICAgICAgZmluaXNoZWQgc2VudCBvZmYganVzdCB5ZXQuCisKKyAgICAgICAgIFRodXMsIHdlIG11c3QgY2hlY2sgaWYgdGhlIHJlcXVlc3QgaGFzIGJlZW4gc2VudCBiZWZvcmUgd2Ugc2V0IHRoZQorICAgICAgICAgc3RhdGUgaW5mbyB3aGVyZSB3ZSB3YWl0IGZvciB0aGUgMTAwLXJldHVybiBjb2RlCisgICAgICAqLworICAgICAgaWYoKGRhdGEtPnN0YXRlLmV4cGVjdDEwMGhlYWRlcikgJiYKKyAgICAgICAgIChkYXRhLT5zdGF0ZS5wcm90by5odHRwLT5zZW5kaW5nID09IEhUVFBTRU5EX0JPRFkpKSB7CisgICAgICAgIC8qIHdhaXQgd2l0aCB3cml0ZSB1bnRpbCB3ZSBlaXRoZXIgZ290IDEwMC1jb250aW51ZSBvciBhIHRpbWVvdXQgKi8KKyAgICAgICAgay0+ZXhwMTAwID0gRVhQMTAwX0FXQUlUSU5HX0NPTlRJTlVFOworICAgICAgICBrLT5zdGFydDEwMCA9IEN1cmxfdHZub3coKTsKKworICAgICAgICAvKiBzZXQgYSB0aW1lb3V0IGZvciB0aGUgbXVsdGkgaW50ZXJmYWNlICovCisgICAgICAgIEN1cmxfZXhwaXJlKGRhdGEsIENVUkxfVElNRU9VVF9FWFBFQ1RfMTAwKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZihkYXRhLT5zdGF0ZS5leHBlY3QxMDBoZWFkZXIpCisgICAgICAgICAgLyogd2hlbiB3ZSd2ZSBzZW50IG9mZiB0aGUgcmVzdCBvZiB0aGUgaGVhZGVycywgd2UgbXVzdCBhd2FpdCBhCisgICAgICAgICAgICAgMTAwLWNvbnRpbnVlIGJ1dCBmaXJzdCBmaW5pc2ggc2VuZGluZyB0aGUgcmVxdWVzdCAqLworICAgICAgICAgIGstPmV4cDEwMCA9IEVYUDEwMF9TRU5ESU5HX1JFUVVFU1Q7CisKKyAgICAgICAgLyogZW5hYmxlIHRoZSB3cml0ZSBiaXQgd2hlbiB3ZSdyZSBub3Qgd2FpdGluZyBmb3IgY29udGludWUgKi8KKyAgICAgICAgay0+a2VlcG9uIHw9IEtFRVBfU0VORDsKKyAgICAgIH0KKyAgICB9IC8qIGlmKGNvbm4tPndyaXRlc29ja2ZkICE9IENVUkxfU09DS0VUX0JBRCkgKi8KKyAgfSAvKiBpZihrLT5nZXRoZWFkZXIgfHwgIWRhdGEtPnNldC5vcHRfbm9fYm9keSkgKi8KKworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3RyYW5zZmVyLmggYi9jdXJsLTcuMjUuMC9saWIvdHJhbnNmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGEzMWM2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3RyYW5zZmVyLmgKQEAgLTAsMCArMSw2OSBAQAorI2lmbmRlZiBfX1RSQU5TRkVSX0gKKyNkZWZpbmUgX19UUkFOU0ZFUl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0NVUkxjb2RlIEN1cmxfcGVyZm9ybShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CitDVVJMY29kZSBDdXJsX3ByZXRyYW5zZmVyKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKTsKK0NVUkxjb2RlIEN1cmxfc2Vjb25kX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK0NVUkxjb2RlIEN1cmxfcG9zdHRyYW5zZmVyKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKTsKKwordHlwZWRlZiBlbnVtIHsKKyAgRk9MTE9XX05PTkUsICAvKiBub3QgdXNlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLCBqdXN0IGEgcGxhY2Vob2xkZXIgdG8KKyAgICAgICAgICAgICAgICAgICBhbGxvdyBpbml0aW5nIHRvIHRoaXMgKi8KKyAgRk9MTE9XX0ZBS0UsICAvKiBvbmx5IHJlY29yZHMgc3R1ZmYsIG5vdCBhY3R1YWxseSBmb2xsb3dpbmcgKi8KKyAgRk9MTE9XX1JFVFJZLCAvKiBzZXQgaWYgdGhpcyBpcyBhIHJlcXVlc3QgcmV0cnkgYXMgb3Bwb3NlZCB0byBhIHJlYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3QgZm9sbG93aW5nICovCisgIEZPTExPV19SRURJUiwgLyogYSBmdWxsIHRydWUgcmVkaXJlY3QgKi8KKyAgRk9MTE9XX0xBU1QgICAvKiBuZXZlciB1c2VkICovCit9IGZvbGxvd3R5cGU7CisKK0NVUkxjb2RlIEN1cmxfZm9sbG93KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBjaGFyICpuZXd1cmwsCisgICAgICAgICAgICAgICAgICAgICBmb2xsb3d0eXBlIHR5cGUpOworCisKK0NVUkxjb2RlIEN1cmxfcmVhZHdyaXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitpbnQgQ3VybF9zaW5nbGVfZ2V0c29jayhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CitDVVJMY29kZSBDdXJsX3JlYWRyZXdpbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK0NVUkxjb2RlIEN1cmxfZmlsbHJlYWRidWZmZXIoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgYnl0ZXMsIGludCAqbnJlYWRwKTsKK0NVUkxjb2RlIEN1cmxfcmVjb25uZWN0X3JlcXVlc3Qoc3RydWN0IGNvbm5lY3RkYXRhICoqY29ubnApOworQ1VSTGNvZGUgQ3VybF9yZXRyeV9yZXF1ZXN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY2hhciAqKnVybCk7Citib29sIEN1cmxfbWVldHNfdGltZWNvbmRpdGlvbihzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwgdGltZV90IHRpbWVvZmRvYyk7CisKKy8qIFRoaXMgc2V0cyB1cCBhIGZvcnRoY29taW5nIHRyYW5zZmVyICovCit2b2lkCitDdXJsX3NldHVwX3RyYW5zZmVyIChzdHJ1Y3QgY29ubmVjdGRhdGEgKmRhdGEsCisgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LCAgICAgICAgICAgLyogc29ja2V0IGluZGV4IHRvIHJlYWQgZnJvbSBvciAtMSAqLworICAgICAgICAgICAgICAgY3VybF9vZmZfdCBzaXplLCAgICAgICAgIC8qIC0xIGlmIHVua25vd24gYXQgdGhpcyBwb2ludCAqLworICAgICAgICAgICAgICAgYm9vbCBnZXRoZWFkZXIsICAgICAgICAgIC8qIFRSVUUgaWYgaGVhZGVyIHBhcnNpbmcgaXMgd2FudGVkICovCisgICAgICAgICAgICAgICBjdXJsX29mZl90ICpieXRlY291bnRwLCAgLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkICovCisgICAgICAgICAgICAgICBpbnQgd3JpdGVzb2NraW5kZXgsICAgICAgLyogc29ja2V0IGluZGV4IHRvIHdyaXRlIHRvLCBpdCBtYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ5IHdlbGwgYmUgdGhlIHNhbWUgd2UgcmVhZCBmcm9tLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xIGRpc2FibGVzICovCisgICAgICAgICAgICAgICBjdXJsX29mZl90ICp3cml0ZWNvdW50cCAvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gKi8KKyk7CisKK2xvbmcgQ3VybF9zbGVlcF90aW1lKGN1cmxfb2ZmX3QgcmF0ZV9icHMsIGN1cmxfb2ZmX3QgY3VyX3JhdGVfYnBzLAorICAgICAgICAgICAgICAgICAgICAgaW50IHBrdF9zaXplKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvdXJsLmMgYi9jdXJsLTcuMjUuMC9saWIvdXJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlMjE3YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi91cmwuYwpAQCAtMCwwICsxLDU1MjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKworI2lmZGVmIF9fVk1TCisjaW5jbHVkZSA8aW4uaD4KKyNpbmNsdWRlIDxpbmV0Lmg+CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1NPQ0tFVAorI2Vycm9yICJXZSBjYW4ndCBjb21waWxlIHdpdGhvdXQgc29ja2V0KCkgc3VwcG9ydCEiCisjZW5kaWYKKworI2lmZGVmIEhBVkVfTElNSVRTX0gKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgorCisjaWZkZWYgVVNFX0xJQklETgorI2luY2x1ZGUgPGlkbmEuaD4KKyNpbmNsdWRlIDx0bGQuaD4KKyNpbmNsdWRlIDxzdHJpbmdwcmVwLmg+CisjaWZkZWYgSEFWRV9JRE5fRlJFRV9ICisjaW5jbHVkZSA8aWRuLWZyZWUuaD4KKyNlbHNlCisvKiBwcm90b3R5cGUgZnJvbSBpZG4tZnJlZS5oLCBub3QgcHJvdmlkZWQgYnkgbGliaWRuIDAuNC41J3MgbWFrZSBpbnN0YWxsISAqLwordm9pZCBpZG5fZnJlZSAodm9pZCAqcHRyKTsKKyNlbmRpZgorI2lmbmRlZiBIQVZFX0lETl9GUkVFCisvKiBpZiBpZG5fZnJlZSgpIHdhcyBub3QgZm91bmQgaW4gdGhpcyB2ZXJzaW9uIG9mIGxpYmlkbiB1c2UgZnJlZSgpIGluc3RlYWQgKi8KKyNkZWZpbmUgaWRuX2ZyZWUoeCkgKGZyZWUpKHgpCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoVVNFX1dJTjMyX0lETikKKy8qIHByb3RvdHlwZSBmb3IgY3VybF93aW4zMl9pZG5fdG9fYXNjaWkoKSAqLworaW50IGN1cmxfd2luMzJfaWRuX3RvX2FzY2lpKGNvbnN0IGNoYXIgKmluLCBjaGFyICoqb3V0KTsKKyNlbmRpZiAgLyogVVNFX0xJQklETiAqLworCisjaW5jbHVkZSAidXJsZGF0YS5oIgorI2luY2x1ZGUgIm5ldHJjLmgiCisKKyNpbmNsdWRlICJmb3JtZGF0YS5oIgorI2luY2x1ZGUgInNzbGdlbi5oIgorI2luY2x1ZGUgImhvc3RpcC5oIgorI2luY2x1ZGUgInRyYW5zZmVyLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImNvb2tpZS5oIgorI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic3RyZXJyb3IuaCIKKyNpbmNsdWRlICJlc2NhcGUuaCIKKyNpbmNsdWRlICJzdHJ0b2suaCIKKyNpbmNsdWRlICJzaGFyZS5oIgorI2luY2x1ZGUgImNvbnRlbnRfZW5jb2RpbmcuaCIKKyNpbmNsdWRlICJodHRwX2RpZ2VzdC5oIgorI2luY2x1ZGUgImh0dHBfbmVnb3RpYXRlLmgiCisjaW5jbHVkZSAic2VsZWN0LmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgorI2luY2x1ZGUgImVhc3lpZi5oIgorI2luY2x1ZGUgInNwZWVkY2hlY2suaCIKKyNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgIm5vbi1hc2NpaS5oIgorCisvKiBBbmQgbm93IGZvciB0aGUgcHJvdG9jb2xzICovCisjaW5jbHVkZSAiZnRwLmgiCisjaW5jbHVkZSAiZGljdC5oIgorI2luY2x1ZGUgInRlbG5ldC5oIgorI2luY2x1ZGUgInRmdHAuaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgImN1cmxfbGRhcC5oIgorI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgImltYXAuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisjaW5jbHVkZSAiY3VybF9udGxtLmgiCisjaW5jbHVkZSAiY3VybF9udGxtX3diLmgiCisjaW5jbHVkZSAic29ja3MuaCIKKyNpbmNsdWRlICJjdXJsX3J0bXAuaCIKKyNpbmNsdWRlICJnb3BoZXIuaCIKKyNpbmNsdWRlICJodHRwX3Byb3h5LmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogTG9jYWwgc3RhdGljIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBsb25nIENvbm5lY3Rpb25LaWxsT25lKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKTsKK3N0YXRpYyB2b2lkIGNvbm5fZnJlZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworc3RhdGljIHZvaWQgc2lnbmFsUGlwZUNsb3NlKHN0cnVjdCBjdXJsX2xsaXN0ICpwaXBlbGluZSwgYm9vbCBwaXBlX2Jyb2tlKTsKK3N0YXRpYyBDVVJMY29kZSBkb19pbml0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CitzdGF0aWMgQ1VSTGNvZGUgcGFyc2VfdXJsX3VzZXJwYXNzKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzZXIsIGNoYXIgKnBhc3N3ZCk7CisvKgorICogUHJvdG9jb2wgdGFibGUuCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKiBjb25zdCBwcm90b2NvbHNbXSA9IHsKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorICAmQ3VybF9oYW5kbGVyX2h0dHAsCisjZW5kaWYKKworI2lmIGRlZmluZWQoVVNFX1NTTCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApCisgICZDdXJsX2hhbmRsZXJfaHR0cHMsCisjZW5kaWYKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfRlRQCisgICZDdXJsX2hhbmRsZXJfZnRwLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVTRV9TU0wpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9GVFApCisgICZDdXJsX2hhbmRsZXJfZnRwcywKKyNlbmRpZgorCisjaWZuZGVmIENVUkxfRElTQUJMRV9URUxORVQKKyAgJkN1cmxfaGFuZGxlcl90ZWxuZXQsCisjZW5kaWYKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfRElDVAorICAmQ3VybF9oYW5kbGVyX2RpY3QsCisjZW5kaWYKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfTERBUAorICAmQ3VybF9oYW5kbGVyX2xkYXAsCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0xEQVBTKSAmJiBcCisgICAgKChkZWZpbmVkKFVTRV9PUEVOTERBUCkgJiYgZGVmaW5lZChVU0VfU1NMKSkgfHwgXAorICAgICAoIWRlZmluZWQoVVNFX09QRU5MREFQKSAmJiBkZWZpbmVkKEhBVkVfTERBUF9TU0wpKSkKKyAgJkN1cmxfaGFuZGxlcl9sZGFwcywKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZJTEUKKyAgJkN1cmxfaGFuZGxlcl9maWxlLAorI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1RGVFAKKyAgJkN1cmxfaGFuZGxlcl90ZnRwLAorI2VuZGlmCisKKyNpZmRlZiBVU0VfTElCU1NIMgorICAmQ3VybF9oYW5kbGVyX3NjcCwKKyAgJkN1cmxfaGFuZGxlcl9zZnRwLAorI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0lNQVAKKyAgJkN1cmxfaGFuZGxlcl9pbWFwLAorI2lmZGVmIFVTRV9TU0wKKyAgJkN1cmxfaGFuZGxlcl9pbWFwcywKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BPUDMKKyAgJkN1cmxfaGFuZGxlcl9wb3AzLAorI2lmZGVmIFVTRV9TU0wKKyAgJkN1cmxfaGFuZGxlcl9wb3AzcywKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1NNVFAKKyAgJkN1cmxfaGFuZGxlcl9zbXRwLAorI2lmZGVmIFVTRV9TU0wKKyAgJkN1cmxfaGFuZGxlcl9zbXRwcywKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1JUU1AKKyAgJkN1cmxfaGFuZGxlcl9ydHNwLAorI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0dPUEhFUgorICAmQ3VybF9oYW5kbGVyX2dvcGhlciwKKyNlbmRpZgorCisjaWZkZWYgVVNFX0xJQlJUTVAKKyAgJkN1cmxfaGFuZGxlcl9ydG1wLAorICAmQ3VybF9oYW5kbGVyX3J0bXB0LAorICAmQ3VybF9oYW5kbGVyX3J0bXBlLAorICAmQ3VybF9oYW5kbGVyX3J0bXB0ZSwKKyAgJkN1cmxfaGFuZGxlcl9ydG1wcywKKyAgJkN1cmxfaGFuZGxlcl9ydG1wdHMsCisjZW5kaWYKKworICAoc3RydWN0IEN1cmxfaGFuZGxlciAqKSBOVUxMCit9OworCisvKgorICogRHVtbXkgaGFuZGxlciBmb3IgdW5kZWZpbmVkIHByb3RvY29sIHNjaGVtZXMuCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2R1bW15ID0geworICAiPG5vIHByb3RvY29sPiIsICAgICAgICAgICAgICAgICAgICAgIC8qIHNjaGVtZSAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwX2Nvbm5lY3Rpb24gKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbmUgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb19tb3JlICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdF9pdCAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbm5lY3RpbmcgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZyAqLworICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb2luZ19nZXRzb2NrICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9tb3JlX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwZXJmb3JtX2dldHNvY2sgKi8KKyAgWkVST19OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNjb25uZWN0ICovCisgIFpFUk9fTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZHdyaXRlICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmcG9ydCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIFBST1RPUFRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KK307CisKK3N0YXRpYyB2b2lkIGNsb3NlX2Nvbm5lY3Rpb25zKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICAvKiBMb29wIHRocm91Z2ggYWxsIG9wZW4gY29ubmVjdGlvbnMgYW5kIGtpbGwgdGhlbSBvbmUgYnkgb25lICovCisgIGxvbmcgaTsKKyAgZG8geworICAgIGkgPSBDb25uZWN0aW9uS2lsbE9uZShkYXRhKTsKKyAgfSB3aGlsZShpICE9IC0xTCk7Cit9CisKK3ZvaWQgQ3VybF9mcmVlc2V0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICogZGF0YSkKK3sKKyAgLyogRnJlZSBhbGwgZHluYW1pYyBzdHJpbmdzIHN0b3JlZCBpbiB0aGUgZGF0YS0+c2V0IHN1YnN0cnVjdHVyZS4gKi8KKyAgZW51bSBkdXBzdHJpbmcgaTsKKyAgZm9yKGk9KGVudW0gZHVwc3RyaW5nKTA7IGkgPCBTVFJJTkdfTEFTVDsgaSsrKQorICAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c2V0LnN0cltpXSk7CisKKyAgaWYoZGF0YS0+Y2hhbmdlLnJlZmVyZXJfYWxsb2MpIHsKKyAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPmNoYW5nZS5yZWZlcmVyKTsKKyAgICBkYXRhLT5jaGFuZ2UucmVmZXJlcl9hbGxvYyA9IEZBTFNFOworICB9CisgIGRhdGEtPmNoYW5nZS5yZWZlcmVyID0gTlVMTDsKK30KKworc3RhdGljIENVUkxjb2RlIHNldHN0cm9wdChjaGFyICoqY2hhcnAsIGNoYXIgKiBzKQoreworICAvKiBSZWxlYXNlIHRoZSBwcmV2aW91cyBzdG9yYWdlIGF0IGBjaGFycCcgYW5kIHJlcGxhY2UgYnkgYSBkeW5hbWljIHN0b3JhZ2UKKyAgICAgY29weSBvZiBgcycuIFJldHVybiBDVVJMRV9PSyBvciBDVVJMRV9PVVRfT0ZfTUVNT1JZLiAqLworCisgIEN1cmxfc2FmZWZyZWUoKmNoYXJwKTsKKworICBpZihzKSB7CisgICAgcyA9IHN0cmR1cChzKTsKKworICAgIGlmKCFzKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICAqY2hhcnAgPSBzOworICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgc2V0c3Ryb3B0X3VzZXJwd2QoY2hhciAqb3B0aW9uLCBjaGFyICoqdXNlcl9zdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipwd2Rfc3RvcmFnZSkKK3sKKyAgY2hhciogc2VwYXJhdG9yOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKworICBpZighb3B0aW9uKSB7CisgICAgLyogd2UgdHJlYXQgYSBOVUxMIHBhc3NlZCBpbiBhcyBhIGhpbnQgdG8gY2xlYXIgZXhpc3RpbmcgaW5mbyAqLworICAgIEN1cmxfc2FmZWZyZWUoKnVzZXJfc3RvcmFnZSk7CisgICAgKnVzZXJfc3RvcmFnZSA9IChjaGFyICopIE5VTEw7CisgICAgQ3VybF9zYWZlZnJlZSgqcHdkX3N0b3JhZ2UpOworICAgICpwd2Rfc3RvcmFnZSA9IChjaGFyICopIE5VTEw7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgc2VwYXJhdG9yID0gc3RyY2hyKG9wdGlvbiwgJzonKTsKKyAgaWYoc2VwYXJhdG9yICE9IE5VTEwpIHsKKworICAgIC8qIHN0b3JlIHVzZXJuYW1lIHBhcnQgb2Ygb3B0aW9uICovCisgICAgY2hhciAqIHA7CisgICAgc2l6ZV90IHVzZXJuYW1lX2xlbiA9IChzaXplX3QpKHNlcGFyYXRvci1vcHRpb24pOworICAgIHAgPSBtYWxsb2ModXNlcm5hbWVfbGVuKzEpOworICAgIGlmKCFwKQorICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBlbHNlIHsKKyAgICAgIG1lbWNweShwLCBvcHRpb24sIHVzZXJuYW1lX2xlbik7CisgICAgICBwW3VzZXJuYW1lX2xlbl0gPSAnXDAnOworICAgICAgQ3VybF9zYWZlZnJlZSgqdXNlcl9zdG9yYWdlKTsKKyAgICAgICp1c2VyX3N0b3JhZ2UgPSBwOworICAgIH0KKworICAgIC8qIHN0b3JlIHBhc3N3b3JkIHBhcnQgb2Ygb3B0aW9uICovCisgICAgaWYocmVzdWx0ID09IENVUkxFX09LKQorICAgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KHB3ZF9zdG9yYWdlLCBzZXBhcmF0b3IrMSk7CisgIH0KKyAgZWxzZSB7CisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KHVzZXJfc3RvcmFnZSwgb3B0aW9uKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitDVVJMY29kZSBDdXJsX2R1cHNldChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqIGRzdCwgc3RydWN0IFNlc3Npb25IYW5kbGUgKiBzcmMpCit7CisgIENVUkxjb2RlIHIgPSBDVVJMRV9PSzsKKyAgZW51bSBkdXBzdHJpbmcgaTsKKworICAvKiBDb3B5IHNyYy0+c2V0IGludG8gZHN0LT5zZXQgZmlyc3QsIHRoZW4gZGVhbCB3aXRoIHRoZSBzdHJpbmdzCisgICAgIGFmdGVyd2FyZHMgKi8KKyAgZHN0LT5zZXQgPSBzcmMtPnNldDsKKworICAvKiBjbGVhciBhbGwgc3RyaW5nIHBvaW50ZXJzIGZpcnN0ICovCisgIG1lbXNldChkc3QtPnNldC5zdHIsIDAsIFNUUklOR19MQVNUICogc2l6ZW9mKGNoYXIgKikpOworCisgIC8qIGR1cGxpY2F0ZSBhbGwgc3RyaW5ncyAqLworICBmb3IoaT0oZW51bSBkdXBzdHJpbmcpMDsgaTwgU1RSSU5HX0xBU1Q7IGkrKykgeworICAgIHIgPSBzZXRzdHJvcHQoJmRzdC0+c2V0LnN0cltpXSwgc3JjLT5zZXQuc3RyW2ldKTsKKyAgICBpZihyICE9IENVUkxFX09LKQorICAgICAgYnJlYWs7CisgIH0KKworICAvKiBJZiBhIGZhaWx1cmUgb2NjdXJyZWQsIGZyZWVpbmcgaGFzIHRvIGJlIHBlcmZvcm1lZCBleHRlcm5hbGx5LiAqLworICByZXR1cm4gcjsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIGludGVybmFsIGZ1bmN0aW9uIGN1cmxfZWFzeV9jbGVhbnVwKCkgY2FsbHMuIFRoaXMgc2hvdWxkCisgKiBjbGVhbnVwIGFuZCBmcmVlIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbmhhbmRsZS4KKyAqCisgKiBOT1RFOiBpZiB3ZSBldmVyIGFkZCBzb21ldGhpbmcgdGhhdCBhdHRlbXB0cyB0byB3cml0ZSB0byBhIHNvY2tldCBvcgorICogc2ltaWxhciBoZXJlLCB3ZSBtdXN0IGlnbm9yZSBTSUdQSVBFIGZpcnN0LiBJdCBpcyBjdXJyZW50bHkgb25seSBkb25lCisgKiB3aGVuIGN1cmxfZWFzeV9wZXJmb3JtKCkgaXMgaW52b2tlZC4KKyAqLworCitDVVJMY29kZSBDdXJsX2Nsb3NlKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBzdHJ1Y3QgQ3VybF9tdWx0aSAqbSA9IGRhdGEtPm11bHRpOworCisjaWZkZWYgREVCVUdCVUlMRAorICAvKiBvbmx5IGZvciBkZWJ1Z2dpbmcsIHNjYW4gdGhyb3VnaCBhbGwgY29ubmVjdGlvbnMgYW5kIHNlZSBpZiB0aGVyZSdzIGEKKyAgICAgcGlwZSByZWZlcmVuY2Ugc3RpbGwgaWRlbnRpZnlpbmcgdGhpcyBoYW5kbGUgKi8KKworICBpZihkYXRhLT5zdGF0ZS5jb25uYyAmJiBkYXRhLT5zdGF0ZS5jb25uYy0+dHlwZSA9PSBDT05OQ0FDSEVfTVVMVEkpIHsKKyAgICBzdHJ1Y3QgY29ubmNhY2hlICpjID0gZGF0YS0+c3RhdGUuY29ubmM7CisgICAgbG9uZyBpOworICAgIHN0cnVjdCBjdXJsX2xsaXN0ICpwaXBlbGluZTsKKyAgICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpjdXJyOworICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubnB0cjsKKworICAgIGZvcihpPTA7IGk8IGMtPm51bTsgaSsrKSB7CisgICAgICBjb25ucHRyID0gYy0+Y29ubmVjdHNbaV07CisgICAgICBpZighY29ubnB0cikKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIHBpcGVsaW5lID0gY29ubnB0ci0+c2VuZF9waXBlOworICAgICAgaWYocGlwZWxpbmUpIHsKKyAgICAgICAgZm9yKGN1cnIgPSBwaXBlbGluZS0+aGVhZDsgY3VycjsgY3Vycj1jdXJyLT5uZXh0KSB7CisgICAgICAgICAgaWYoZGF0YSA9PSAoc3RydWN0IFNlc3Npb25IYW5kbGUgKikgY3Vyci0+cHRyKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgInByb2JsZW0gd2UgJXAgYXJlIHN0aWxsIGluIHNlbmQgcGlwZSBmb3IgJXAgZG9uZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgZGF0YSwgY29ubnB0ciwgKGludCljb25ucHRyLT5iaXRzLmRvbmUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgcGlwZWxpbmUgPSBjb25ucHRyLT5yZWN2X3BpcGU7CisgICAgICBpZihwaXBlbGluZSkgeworICAgICAgICBmb3IoY3VyciA9IHBpcGVsaW5lLT5oZWFkOyBjdXJyOyBjdXJyPWN1cnItPm5leHQpIHsKKyAgICAgICAgICBpZihkYXRhID09IChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqKSBjdXJyLT5wdHIpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAicHJvYmxlbSB3ZSAlcCBhcmUgc3RpbGwgaW4gcmVjdiBwaXBlIGZvciAlcCBkb25lICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBkYXRhLCBjb25ucHRyLCAoaW50KWNvbm5wdHItPmJpdHMuZG9uZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBwaXBlbGluZSA9IGNvbm5wdHItPmRvbmVfcGlwZTsKKyAgICAgIGlmKHBpcGVsaW5lKSB7CisgICAgICAgIGZvcihjdXJyID0gcGlwZWxpbmUtPmhlYWQ7IGN1cnI7IGN1cnI9Y3Vyci0+bmV4dCkgeworICAgICAgICAgIGlmKGRhdGEgPT0gKHN0cnVjdCBTZXNzaW9uSGFuZGxlICopIGN1cnItPnB0cikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICJwcm9ibGVtIHdlICVwIGFyZSBzdGlsbCBpbiBkb25lIHBpcGUgZm9yICVwIGRvbmUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIGRhdGEsIGNvbm5wdHIsIChpbnQpY29ubnB0ci0+Yml0cy5kb25lKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHBpcGVsaW5lID0gY29ubnB0ci0+cGVuZF9waXBlOworICAgICAgaWYocGlwZWxpbmUpIHsKKyAgICAgICAgZm9yKGN1cnIgPSBwaXBlbGluZS0+aGVhZDsgY3VycjsgY3Vycj1jdXJyLT5uZXh0KSB7CisgICAgICAgICAgaWYoZGF0YSA9PSAoc3RydWN0IFNlc3Npb25IYW5kbGUgKikgY3Vyci0+cHRyKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgInByb2JsZW0gd2UgJXAgYXJlIHN0aWxsIGluIHBlbmQgcGlwZSBmb3IgJXAgZG9uZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgZGF0YSwgY29ubnB0ciwgKGludCljb25ucHRyLT5iaXRzLmRvbmUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorI2VuZGlmCisKKyAgQ3VybF9leHBpcmUoZGF0YSwgMCk7IC8qIHNodXQgb2ZmIHRpbWVycyAqLworCisgIGlmKG0pCisgICAgLyogVGhpcyBoYW5kbGUgaXMgc3RpbGwgcGFydCBvZiBhIG11bHRpIGhhbmRsZSwgdGFrZSBjYXJlIG9mIHRoaXMgZmlyc3QKKyAgICAgICBhbmQgZGV0YWNoIHRoaXMgaGFuZGxlIGZyb20gdGhlcmUuICovCisgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGRhdGEtPm11bHRpLCBkYXRhKTsKKworICAvKiBEZXN0cm95IHRoZSB0aW1lb3V0IGxpc3QgdGhhdCBpcyBoZWxkIGluIHRoZSBlYXN5IGhhbmRsZS4gSXQgaXMKKyAgICAgL25vcm1hbGx5LyBkb25lIGJ5IGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgpIGJ1dCB0aGlzIGlzICJqdXN0IGluCisgICAgIGNhc2UiICovCisgIGlmKGRhdGEtPnN0YXRlLnRpbWVvdXRsaXN0KSB7CisgICAgQ3VybF9sbGlzdF9kZXN0cm95KGRhdGEtPnN0YXRlLnRpbWVvdXRsaXN0LCBOVUxMKTsKKyAgICBkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdCA9IE5VTEw7CisgIH0KKworICBkYXRhLT5tYWdpYyA9IDA7IC8qIGZvcmNlIGEgY2xlYXIgQUZURVIgdGhlIHBvc3NpYmx5IGVuZm9yY2VkIHJlbW92YWwgZnJvbQorICAgICAgICAgICAgICAgICAgICAgIHRoZSBtdWx0aSBoYW5kbGUsIHNpbmNlIHRoYXQgZnVuY3Rpb24gdXNlcyB0aGUgbWFnaWMKKyAgICAgICAgICAgICAgICAgICAgICBmaWVsZCEgKi8KKworICBpZihkYXRhLT5zdGF0ZS5jb25uYykgeworCisgICAgaWYoZGF0YS0+c3RhdGUuY29ubmMtPnR5cGUgPT0gQ09OTkNBQ0hFX1BSSVZBVEUpIHsKKyAgICAgIC8qIGNsb3NlIGFsbCBjb25uZWN0aW9ucyBzdGlsbCBhbGl2ZSB0aGF0IGFyZSBpbiB0aGUgcHJpdmF0ZSBjb25uZWN0aW9uCisgICAgICAgICBjYWNoZSwgYXMgd2Ugbm8gbG9uZ2VyIGhhdmUgdGhlIHBvaW50ZXIgbGVmdCB0byB0aGUgc2hhcmVkIG9uZS4gKi8KKyAgICAgIGNsb3NlX2Nvbm5lY3Rpb25zKGRhdGEpOworCisgICAgICAvKiBmcmVlIHRoZSBjb25uZWN0aW9uIGNhY2hlIGlmIGFsbG9jYXRlZCBwcml2YXRlbHkgKi8KKyAgICAgIEN1cmxfcm1fY29ubmMoZGF0YS0+c3RhdGUuY29ubmMpOworICAgICAgZGF0YS0+c3RhdGUuY29ubmMgPSBOVUxMOworICAgIH0KKyAgfQorCisgIGlmKGRhdGEtPnN0YXRlLnNoYXJlZF9jb25uKSB7CisgICAgLyogbWFya2VkIHRvIGJlIHVzZWQgYnkgYSBwZW5kaW5nIGNvbm5lY3Rpb24gc28gd2UgY2FuJ3Qga2lsbCB0aGlzIGhhbmRsZQorICAgICAgIGp1c3QgeWV0ICovCisgICAgZGF0YS0+c3RhdGUuY2xvc2VkID0gVFJVRTsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKworICBpZihkYXRhLT5kbnMuaG9zdGNhY2hldHlwZSA9PSBIQ0FDSEVfUFJJVkFURSkKKyAgICBDdXJsX2hvc3RjYWNoZV9kZXN0cm95KGRhdGEpOworCisgIGlmKGRhdGEtPnN0YXRlLnJhbmdlc3RyaW5nYWxsb2MpCisgICAgZnJlZShkYXRhLT5zdGF0ZS5yYW5nZSk7CisKKyAgLyogRnJlZSB0aGUgcGF0aGJ1ZmZlciAqLworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLnBhdGhidWZmZXIpOworICBkYXRhLT5zdGF0ZS5wYXRoID0gTlVMTDsKKworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLnByb3RvLmdlbmVyaWMpOworCisgIC8qIENsb3NlIGRvd24gYWxsIG9wZW4gU1NMIGluZm8gYW5kIHNlc3Npb25zICovCisgIEN1cmxfc3NsX2Nsb3NlX2FsbChkYXRhKTsKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5maXJzdF9ob3N0KTsKKyAgQ3VybF9zYWZlZnJlZShkYXRhLT5zdGF0ZS5zY3JhdGNoKTsKKyAgQ3VybF9zc2xfZnJlZV9jZXJ0aW5mbyhkYXRhKTsKKworICBpZihkYXRhLT5jaGFuZ2UucmVmZXJlcl9hbGxvYykgeworICAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+Y2hhbmdlLnJlZmVyZXIpOworICAgIGRhdGEtPmNoYW5nZS5yZWZlcmVyX2FsbG9jID0gRkFMU0U7CisgIH0KKyAgZGF0YS0+Y2hhbmdlLnJlZmVyZXIgPSBOVUxMOworCisgIGlmKGRhdGEtPmNoYW5nZS51cmxfYWxsb2MpIHsKKyAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPmNoYW5nZS51cmwpOworICAgIGRhdGEtPmNoYW5nZS51cmxfYWxsb2MgPSBGQUxTRTsKKyAgfQorICBkYXRhLT5jaGFuZ2UudXJsID0gTlVMTDsKKworICBDdXJsX3NhZmVmcmVlKGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYpOworCisgIEN1cmxfZmx1c2hfY29va2llcyhkYXRhLCAxKTsKKworICBDdXJsX2RpZ2VzdF9jbGVhbnVwKGRhdGEpOworCisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+aW5mby5jb250ZW50dHlwZSk7CisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+aW5mby53b3VsZHJlZGlyZWN0KTsKKworICAvKiB0aGlzIGRlc3Ryb3lzIHRoZSBjaGFubmVsIGFuZCB3ZSBjYW5ub3QgdXNlIGl0IGFueW1vcmUgYWZ0ZXIgdGhpcyAqLworICBDdXJsX3Jlc29sdmVyX2NsZWFudXAoZGF0YS0+c3RhdGUucmVzb2x2ZXIpOworCisgIEN1cmxfY29udmVydF9jbG9zZShkYXRhKTsKKworICAvKiBObyBsb25nZXIgYSBkaXJ0eSBzaGFyZSwgaWYgaXQgZXhpc3RzICovCisgIGlmKGRhdGEtPnNoYXJlKSB7CisgICAgQ3VybF9zaGFyZV9sb2NrKGRhdGEsIENVUkxfTE9DS19EQVRBX1NIQVJFLCBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7CisgICAgZGF0YS0+c2hhcmUtPmRpcnR5LS07CisgICAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfU0hBUkUpOworICB9CisKKyAgQ3VybF9mcmVlc2V0KGRhdGEpOworICBmcmVlKGRhdGEpOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qIGNyZWF0ZSBhIGNvbm5lY3Rpb24gY2FjaGUgb2YgYSBwcml2YXRlIG9yIG11bHRpIHR5cGUgKi8KK3N0cnVjdCBjb25uY2FjaGUgKkN1cmxfbWtfY29ubmMoaW50IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYW1vdW50KSAvKiBzZXQgLTEgdG8gdXNlIGRlZmF1bHQgKi8KK3sKKyAgLyogSXQgaXMgc3ViamVjdCBmb3IgZGViYXRlIGhvdyBtYW55IGRlZmF1bHQgY29ubmVjdGlvbnMgdG8gaGF2ZSBmb3IgYSBtdWx0aQorICAgICBjb25uZWN0aW9uIGNhY2hlLi4uICovCisKKyAgc3RydWN0IGNvbm5jYWNoZSAqYzsKKyAgbG9uZyBkZWZhdWx0X2Ftb3VudDsKKyAgbG9uZyBtYXhfYW1vdW50ID0gKGxvbmcpKCgoc2l6ZV90KUlOVF9NQVgpIC8gc2l6ZW9mKHN0cnVjdCBjb25uZWN0ZGF0YSAqKSk7CisKKyAgaWYodHlwZSA9PSBDT05OQ0FDSEVfUFJJVkFURSkgeworICAgIGRlZmF1bHRfYW1vdW50ID0gKGFtb3VudCA8IDFMKSA/IDVMIDogYW1vdW50OworICB9CisgIGVsc2UgeworICAgIGRlZmF1bHRfYW1vdW50ID0gKGFtb3VudCA8IDFMKSA/IDEwTCA6IGFtb3VudDsKKyAgfQorCisgIGlmKGRlZmF1bHRfYW1vdW50ID4gbWF4X2Ftb3VudCkKKyAgICBkZWZhdWx0X2Ftb3VudCA9IG1heF9hbW91bnQ7CisKKyAgYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNvbm5jYWNoZSkpOworICBpZighYykKKyAgICByZXR1cm4gTlVMTDsKKworICBjLT5jb25uZWN0cyA9IGNhbGxvYygoc2l6ZV90KWRlZmF1bHRfYW1vdW50LCBzaXplb2Yoc3RydWN0IGNvbm5lY3RkYXRhICopKTsKKyAgaWYoIWMtPmNvbm5lY3RzKSB7CisgICAgZnJlZShjKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGMtPm51bSA9IGRlZmF1bHRfYW1vdW50OworCisgIHJldHVybiBjOworfQorCisvKiBDaGFuZ2UgbnVtYmVyIG9mIGVudHJpZXMgb2YgYSBjb25uZWN0aW9uIGNhY2hlICovCitDVVJMY29kZSBDdXJsX2NoX2Nvbm5jKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmNhY2hlICpjLAorICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld2Ftb3VudCkKK3sKKyAgbG9uZyBpOworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKipuZXdwdHI7CisgIGxvbmcgbWF4X2Ftb3VudCA9IChsb25nKSgoKHNpemVfdClJTlRfTUFYKSAvIHNpemVvZihzdHJ1Y3QgY29ubmVjdGRhdGEgKikpOworCisgIGlmKG5ld2Ftb3VudCA8IDEpCisgICAgbmV3YW1vdW50ID0gMTsgLyogd2UgYmV0dGVyIGhhdmUgYXQgbGVhc3Qgb25lIGVudHJ5ICovCisKKyAgaWYoIWMpIHsKKyAgICAvKiB3ZSBnZXQgYSBOVUxMIHBvaW50ZXIgcGFzc2VkIGluIGFzIGNvbm5lY3Rpb24gY2FjaGUsIHdoaWNoIG1lYW5zIHRoYXQKKyAgICAgICB0aGVyZSBpcyBubyBjYWNoZSBjcmVhdGVkIGZvciB0aGlzIFNlc3Npb25IYW5kbGUganVzdCB5ZXQsIHdlIGNyZWF0ZSBhCisgICAgICAgYnJhbmQgbmV3IHdpdGggdGhlIHJlcXVlc3RlZCBzaXplLgorICAgICovCisgICAgZGF0YS0+c3RhdGUuY29ubmMgPSBDdXJsX21rX2Nvbm5jKENPTk5DQUNIRV9QUklWQVRFLCBuZXdhbW91bnQpOworICAgIGlmKCFkYXRhLT5zdGF0ZS5jb25uYykKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorCisgIGlmKG5ld2Ftb3VudCA8IGMtPm51bSkgeworICAgIC8qIFNpbmNlIHRoaXMgbnVtYmVyIGlzICpkZWNyZWFzZWQqIGZyb20gdGhlIGV4aXN0aW5nIG51bWJlciwgd2UgbXVzdAorICAgICAgIGNsb3NlIHRoZSBwb3NzaWJseSBvcGVuIGNvbm5lY3Rpb25zIHRoYXQgbGl2ZSBvbiB0aGUgaW5kZXhlcyB0aGF0CisgICAgICAgYXJlIGJlaW5nIHJlbW92ZWQhCisKKyAgICAgICBOT1RFOiBmb3IgY29ubmNhY2hlX211bHRpIGNhc2VzIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgd2Ugb25seQorICAgICAgIGNsb3NlIGhhbmRsZXMgbm90IGluIHVzZS4KKyAgICAqLworICAgIGZvcihpPW5ld2Ftb3VudDsgaTwgYy0+bnVtOyBpKyspIHsKKyAgICAgIEN1cmxfZGlzY29ubmVjdChjLT5jb25uZWN0c1tpXSwgLyogZGVhZF9jb25uZWN0aW9uICovIEZBTFNFKTsKKyAgICAgIGMtPmNvbm5lY3RzW2ldID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiBJZiB0aGUgbW9zdCByZWNlbnQgY29ubmVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQsIG1hcmsgaXQKKyAgICAgICBpbnZhbGlkLiAqLworICAgIGlmKGRhdGEtPnN0YXRlLmxhc3Rjb25uZWN0IDw9IG5ld2Ftb3VudCkKKyAgICAgIGRhdGEtPnN0YXRlLmxhc3Rjb25uZWN0ID0gLTE7CisgIH0KKyAgaWYobmV3YW1vdW50ID4gMCkgeworICAgIGlmKG5ld2Ftb3VudCA+IG1heF9hbW91bnQpCisgICAgICBuZXdhbW91bnQgPSBtYXhfYW1vdW50OworICAgIG5ld3B0ciA9IHJlYWxsb2MoYy0+Y29ubmVjdHMsIHNpemVvZihzdHJ1Y3QgY29ubmVjdGRhdGEgKikgKiBuZXdhbW91bnQpOworICAgIGlmKCFuZXdwdHIpCisgICAgICAvKiB3ZSBjbG9zZWQgYSBmZXcgY29ubmVjdGlvbnMgaW4gdmFpbiwgYnV0IHNvIHdoYXQ/ICovCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgIC8qIG51bGxpZnkgdGhlIG5ld2x5IGFkZGVkIHBvaW50ZXJzICovCisgICAgZm9yKGk9Yy0+bnVtOyBpPG5ld2Ftb3VudDsgaSsrKQorICAgICAgbmV3cHRyW2ldID0gTlVMTDsKKworICAgIGMtPmNvbm5lY3RzID0gbmV3cHRyOworICAgIGMtPm51bSA9IG5ld2Ftb3VudDsKKyAgfQorICAvKiB3ZSBubyBsb25nZXIgc3VwcG9ydCBsZXNzIHRoYW4gMSBhcyBzaXplIGZvciB0aGUgY29ubmVjdGlvbiBjYWNoZSwgYW5kCisgICAgIEknbSBub3Qgc3VyZSBpdCBldmVyIHdvcmtlZCB0byBzZXQgaXQgdG8gemVybyAqLworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qIEZyZWUgYSBjb25uZWN0aW9uIGNhY2hlLiBUaGlzIGlzIGNhbGxlZCBmcm9tIEN1cmxfY2xvc2UoKSBhbmQKKyAgIGN1cmxfbXVsdGlfY2xlYW51cCgpLiAqLwordm9pZCBDdXJsX3JtX2Nvbm5jKHN0cnVjdCBjb25uY2FjaGUgKmMpCit7CisgIGlmKCFjKQorICAgIHJldHVybjsKKworICBpZihjLT5jb25uZWN0cykgeworICAgIGxvbmcgaTsKKyAgICBmb3IoaSA9IDA7IGkgPCBjLT5udW07ICsraSkgeworICAgICAgY29ubl9mcmVlKGMtPmNvbm5lY3RzW2ldKTsKKyAgICAgIGMtPmNvbm5lY3RzW2ldID0gTlVMTDsKKyAgICB9CisgICAgZnJlZShjLT5jb25uZWN0cyk7CisgICAgYy0+Y29ubmVjdHMgPSBOVUxMOworICB9CisgIGMtPm51bSA9IDA7CisKKyAgZnJlZShjKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIFVzZXJEZWZpbmVkIGZpZWxkcyB3aXRoaW4gYSBTZXNzaW9uSGFuZGxlLgorICogVGhpcyBtYXkgYmUgc2FmZWx5IGNhbGxlZCBvbiBhIG5ldyBvciBleGlzdGluZyBTZXNzaW9uSGFuZGxlLgorICovCitDVVJMY29kZSBDdXJsX2luaXRfdXNlcmRlZmluZWQoc3RydWN0IFVzZXJEZWZpbmVkICpzZXQpCit7CisgIENVUkxjb2RlIHJlcyA9IENVUkxFX09LOworCisgIHNldC0+b3V0ID0gc3Rkb3V0OyAvKiBkZWZhdWx0IG91dHB1dCB0byBzdGRvdXQgKi8KKyAgc2V0LT5pbiAgPSBzdGRpbjsgIC8qIGRlZmF1bHQgaW5wdXQgZnJvbSBzdGRpbiAqLworICBzZXQtPmVyciAgPSBzdGRlcnI7ICAvKiBkZWZhdWx0IHN0ZGVyciB0byBzdGRlcnIgKi8KKworICAvKiB1c2UgZndyaXRlIGFzIGRlZmF1bHQgZnVuY3Rpb24gdG8gc3RvcmUgb3V0cHV0ICovCisgIHNldC0+ZndyaXRlX2Z1bmMgPSAoY3VybF93cml0ZV9jYWxsYmFjaylmd3JpdGU7CisKKyAgLyogdXNlIGZyZWFkIGFzIGRlZmF1bHQgZnVuY3Rpb24gdG8gcmVhZCBpbnB1dCAqLworICBzZXQtPmZyZWFkX2Z1bmMgPSAoY3VybF9yZWFkX2NhbGxiYWNrKWZyZWFkOworICBzZXQtPmlzX2ZyZWFkX3NldCA9IDA7CisgIHNldC0+aXNfZndyaXRlX3NldCA9IDA7CisKKyAgc2V0LT5zZWVrX2Z1bmMgPSBaRVJPX05VTEw7CisgIHNldC0+c2Vla19jbGllbnQgPSBaRVJPX05VTEw7CisKKyAgLyogY29udmVyc2lvbiBjYWxsYmFja3MgZm9yIG5vbi1BU0NJSSBob3N0cyAqLworICBzZXQtPmNvbnZmcm9tbmV0d29yayA9IFpFUk9fTlVMTDsKKyAgc2V0LT5jb252dG9uZXR3b3JrICAgPSBaRVJPX05VTEw7CisgIHNldC0+Y29udmZyb211dGY4ICAgID0gWkVST19OVUxMOworCisgIHNldC0+aW5maWxlc2l6ZSA9IC0xOyAgICAgIC8qIHdlIGRvbid0IGtub3cgYW55IHNpemUgKi8KKyAgc2V0LT5wb3N0ZmllbGRzaXplID0gLTE7ICAgLyogdW5rbm93biBzaXplICovCisgIHNldC0+bWF4cmVkaXJzID0gLTE7ICAgICAgIC8qIGFsbG93IGFueSBhbW91bnQgYnkgZGVmYXVsdCAqLworCisgIHNldC0+aHR0cHJlcSA9IEhUVFBSRVFfR0VUOyAvKiBEZWZhdWx0IEhUVFAgcmVxdWVzdCAqLworICBzZXQtPnJ0c3ByZXEgPSBSVFNQUkVRX09QVElPTlM7IC8qIERlZmF1bHQgUlRTUCByZXF1ZXN0ICovCisgIHNldC0+ZnRwX3VzZV9lcHN2ID0gVFJVRTsgICAvKiBGVFAgZGVmYXVsdHMgdG8gRVBTViBvcGVyYXRpb25zICovCisgIHNldC0+ZnRwX3VzZV9lcHJ0ID0gVFJVRTsgICAvKiBGVFAgZGVmYXVsdHMgdG8gRVBSVCBvcGVyYXRpb25zICovCisgIHNldC0+ZnRwX3VzZV9wcmV0ID0gRkFMU0U7ICAvKiBtYWlubHkgdXNlZnVsIGZvciBkcmZ0cGQgc2VydmVycyAqLworICBzZXQtPmZ0cF9maWxlbWV0aG9kID0gRlRQRklMRV9NVUxUSUNXRDsKKworICBzZXQtPmRuc19jYWNoZV90aW1lb3V0ID0gNjA7IC8qIFRpbWVvdXQgZXZlcnkgNjAgc2Vjb25kcyBieSBkZWZhdWx0ICovCisKKyAgLyogU2V0IHRoZSBkZWZhdWx0IHNpemUgb2YgdGhlIFNTTCBzZXNzaW9uIElEIGNhY2hlICovCisgIHNldC0+c3NsLm1heF9zc2xfc2Vzc2lvbnMgPSA1OworCisgIHNldC0+cHJveHlwb3J0ID0gQ1VSTF9ERUZBVUxUX1BST1hZX1BPUlQ7IC8qIGZyb20gdXJsLmggKi8KKyAgc2V0LT5wcm94eXR5cGUgPSBDVVJMUFJPWFlfSFRUUDsgLyogZGVmYXVsdHMgdG8gSFRUUCBwcm94eSAqLworICBzZXQtPmh0dHBhdXRoID0gQ1VSTEFVVEhfQkFTSUM7ICAvKiBkZWZhdWx0cyB0byBiYXNpYyAqLworICBzZXQtPnByb3h5YXV0aCA9IENVUkxBVVRIX0JBU0lDOyAvKiBkZWZhdWx0cyB0byBiYXNpYyAqLworCisgIC8qIG1ha2UgbGliY3VybCBxdWlldCBieSBkZWZhdWx0OiAqLworICBzZXQtPmhpZGVfcHJvZ3Jlc3MgPSBUUlVFOyAgLyogQ1VSTE9QVF9OT1BST0dSRVNTIGNoYW5nZXMgdGhlc2UgKi8KKworICAvKgorICAgKiBsaWJjdXJsIDcuMTAgaW50cm9kdWNlZCBTU0wgdmVyaWZpY2F0aW9uICpieSBkZWZhdWx0KiEgVGhpcyBuZWVkcyB0byBiZQorICAgKiBzd2l0Y2hlZCBvZmYgdW5sZXNzIHdhbnRlZC4KKyAgICovCisgIHNldC0+c3NsLnZlcmlmeXBlZXIgPSBUUlVFOworICBzZXQtPnNzbC52ZXJpZnlob3N0ID0gMjsKKyNpZmRlZiBVU0VfVExTX1NSUAorICBzZXQtPnNzbC5hdXRodHlwZSA9IENVUkxfVExTQVVUSF9OT05FOworI2VuZGlmCisgIHNldC0+c3NoX2F1dGhfdHlwZXMgPSBDVVJMU1NIX0FVVEhfREVGQVVMVDsgLyogZGVmYXVsdHMgdG8gYW55IGF1dGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgKi8KKyAgc2V0LT5zc2wuc2Vzc2lvbmlkID0gVFJVRTsgLyogc2Vzc2lvbiBJRCBjYWNoaW5nIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworCisgIHNldC0+bmV3X2ZpbGVfcGVybXMgPSAwNjQ0OyAgICAvKiBEZWZhdWx0IHBlcm1pc3Npb25zICovCisgIHNldC0+bmV3X2RpcmVjdG9yeV9wZXJtcyA9IDA3NTU7IC8qIERlZmF1bHQgcGVybWlzc2lvbnMgKi8KKworICAvKiBmb3IgdGhlICpwcm90b2NvbHMgZmllbGRzIHdlIGRvbid0IHVzZSB0aGUgQ1VSTFBST1RPX0FMTCBjb252ZW5pZW5jZQorICAgICBkZWZpbmUgc2luY2Ugd2UgaW50ZXJuYWxseSBvbmx5IHVzZSB0aGUgbG93ZXIgMTYgYml0cyBmb3IgdGhlIHBhc3NlZAorICAgICBpbiBiaXRtYXNrIHRvIG5vdCBjb25mbGljdCB3aXRoIHRoZSBwcml2YXRlIGJpdHMgKi8KKyAgc2V0LT5hbGxvd2VkX3Byb3RvY29scyA9IENVUkxQUk9UT19BTEw7CisgIHNldC0+cmVkaXJfcHJvdG9jb2xzID0KKyAgICBDVVJMUFJPVE9fQUxMICYgfihDVVJMUFJPVE9fRklMRXxDVVJMUFJPVE9fU0NQKTsgLyogbm90IEZJTEUgb3IgU0NQICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCisgIC8qCisgICAqIGRpc2FsbG93IHVucHJvdGVjdGVkIHByb3RlY3Rpb24gbmVnb3RpYXRpb24gTkVDIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgorICAgKiBzZWVtIG5vdCB0byBmb2xsb3cgcmZjMTk2MSBzZWN0aW9uIDQuMy80LjQKKyAgICovCisgIHNldC0+c29ja3M1X2dzc2FwaV9uZWMgPSBGQUxTRTsKKyAgLyogc2V0IGRlZmF1bHQgZ3NzYXBpIHNlcnZpY2UgbmFtZSAqLworICByZXMgPSBzZXRzdHJvcHQoJnNldC0+c3RyW1NUUklOR19TT0NLUzVfR1NTQVBJX1NFUlZJQ0VdLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKikgQ1VSTF9ERUZBVUxUX1NPQ0tTNV9HU1NBUElfU0VSVklDRSk7CisgIGlmKHJlcyAhPSBDVVJMRV9PSykKKyAgICByZXR1cm4gcmVzOworI2VuZGlmCisKKyAgLyogVGhpcyBpcyBvdXIgcHJlZmVycmVkIENBIGNlcnQgYnVuZGxlL3BhdGggc2luY2UgaW5zdGFsbCB0aW1lICovCisjaWYgZGVmaW5lZChDVVJMX0NBX0JVTkRMRSkKKyAgcmVzID0gc2V0c3Ryb3B0KCZzZXQtPnN0cltTVFJJTkdfU1NMX0NBRklMRV0sIChjaGFyICopIENVUkxfQ0FfQlVORExFKTsKKyNlbGlmIGRlZmluZWQoQ1VSTF9DQV9QQVRIKQorICByZXMgPSBzZXRzdHJvcHQoJnNldC0+c3RyW1NUUklOR19TU0xfQ0FQQVRIXSwgKGNoYXIgKikgQ1VSTF9DQV9QQVRIKTsKKyNlbmRpZgorCisgIHNldC0+d2lsZGNhcmRtYXRjaCAgPSBGQUxTRTsKKyAgc2V0LT5jaHVua19iZ24gICAgICA9IFpFUk9fTlVMTDsKKyAgc2V0LT5jaHVua19lbmQgICAgICA9IFpFUk9fTlVMTDsKKworICAvKiB0Y3Aga2VlcGFsaXZlcyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYnV0IHByb3ZpZGUgcmVhc29uYWJsZSB2YWx1ZXMgZm9yCisgICAqIHRoZSBpbnRlcnZhbCBhbmQgaWRsZSB0aW1lcy4KKyAgICovCisgIHNldC0+dGNwX2tlZXBhbGl2ZSA9IEZBTFNFOworICBzZXQtPnRjcF9rZWVwaW50dmwgPSA2MDsKKyAgc2V0LT50Y3Bfa2VlcGlkbGUgPSA2MDsKKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIEN1cmxfb3BlbigpCisgKgorICogQHBhcmFtIGN1cmwgaXMgYSBwb2ludGVyIHRvIGEgc2Vzc2lvbmhhbmRsZSBwb2ludGVyIHRoYXQgZ2V0cyBzZXQgYnkgdGhpcworICogZnVuY3Rpb24uCisgKiBAcmV0dXJuIENVUkxjb2RlCisgKi8KKworQ1VSTGNvZGUgQ3VybF9vcGVuKHN0cnVjdCBTZXNzaW9uSGFuZGxlICoqY3VybCkKK3sKKyAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhOworICBDVVJMY29kZSBzdGF0dXM7CisKKyAgLyogVmVyeSBzaW1wbGUgc3RhcnQtdXA6IGFsbG9jIHRoZSBzdHJ1Y3QsIGluaXQgaXQgd2l0aCB6ZXJvZXMgYW5kIHJldHVybiAqLworICBkYXRhID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSkpOworICBpZighZGF0YSkgeworICAgIC8qIHRoaXMgaXMgYSB2ZXJ5IHNlcmlvdXMgZXJyb3IgKi8KKyAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJFcnJvcjogY2FsbG9jIG9mIFNlc3Npb25IYW5kbGUgZmFpbGVkXG4iKSk7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICBkYXRhLT5tYWdpYyA9IENVUkxFQVNZX01BR0lDX05VTUJFUjsKKworICBzdGF0dXMgPSBDdXJsX3Jlc29sdmVyX2luaXQoJmRhdGEtPnN0YXRlLnJlc29sdmVyKTsKKyAgaWYoc3RhdHVzKSB7CisgICAgREVCVUdGKGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHJlc29sdmVyX2luaXQgZmFpbGVkXG4iKSk7CisgICAgZnJlZShkYXRhKTsKKyAgICByZXR1cm4gc3RhdHVzOworICB9CisKKyAgLyogV2UgZG8gc29tZSBpbml0aWFsIHNldHVwIGhlcmUsIGFsbCB0aG9zZSBmaWVsZHMgdGhhdCBjYW4ndCBiZSBqdXN0IDAgKi8KKworICBkYXRhLT5zdGF0ZS5oZWFkZXJidWZmID0gbWFsbG9jKEhFQURFUlNJWkUpOworICBpZighZGF0YS0+c3RhdGUuaGVhZGVyYnVmZikgeworICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBtYWxsb2Mgb2YgaGVhZGVyYnVmZiBmYWlsZWRcbiIpKTsKKyAgICByZXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisgIGVsc2UgeworICAgIEN1cmxfZWFzeV9pbml0SGFuZGxlRGF0YShkYXRhKTsKKyAgICByZXMgPSBDdXJsX2luaXRfdXNlcmRlZmluZWQoJmRhdGEtPnNldCk7CisKKyAgICBkYXRhLT5zdGF0ZS5oZWFkZXJzaXplPUhFQURFUlNJWkU7CisKKyAgICBDdXJsX2NvbnZlcnRfaW5pdChkYXRhKTsKKworICAgIC8qIG1vc3QgcmVjZW50IGNvbm5lY3Rpb24gaXMgbm90IHlldCBkZWZpbmVkICovCisgICAgZGF0YS0+c3RhdGUubGFzdGNvbm5lY3QgPSAtMTsKKworICAgIGRhdGEtPnByb2dyZXNzLmZsYWdzIHw9IFBHUlNfSElERTsKKyAgICBkYXRhLT5zdGF0ZS5jdXJyZW50X3NwZWVkID0gLTE7IC8qIGluaXQgdG8gbmVnYXRpdmUgPT0gaW1wb3NzaWJsZSAqLworCisgICAgZGF0YS0+d2lsZGNhcmQuc3RhdGUgPSBDVVJMV0NfSU5JVDsKKyAgICBkYXRhLT53aWxkY2FyZC5maWxlbGlzdCA9IE5VTEw7CisgICAgZGF0YS0+c2V0LmZubWF0Y2ggPSBaRVJPX05VTEw7CisgICAgLyogVGhpcyBubyBsb25nZXIgY3JlYXRlcyBhIGNvbm5lY3Rpb24gY2FjaGUgaGVyZS4gSXQgaXMgaW5zdGVhZCBtYWRlIG9uCisgICAgICAgdGhlIGZpcnN0IGNhbGwgdG8gY3VybF9lYXN5X3BlcmZvcm0oKSBvciB3aGVuIHRoZSBoYW5kbGUgaXMgYWRkZWQgdG8gYQorICAgICAgIG11bHRpIHN0YWNrLiAqLworICB9CisKKworICBpZihyZXMpIHsKKyAgICBDdXJsX3Jlc29sdmVyX2NsZWFudXAoZGF0YS0+c3RhdGUucmVzb2x2ZXIpOworICAgIGlmKGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYpCisgICAgICBmcmVlKGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmYpOworICAgIEN1cmxfZnJlZXNldChkYXRhKTsKKyAgICBmcmVlKGRhdGEpOworICAgIGRhdGEgPSBOVUxMOworICB9CisgIGVsc2UKKyAgICAqY3VybCA9IGRhdGE7CisKKyAgcmV0dXJuIHJlczsKK30KKworQ1VSTGNvZGUgQ3VybF9zZXRvcHQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIENVUkxvcHRpb24gb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBwYXJhbSkKK3sKKyAgY2hhciAqYXJncHRyOworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgbG9uZyBhcmc7CisjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCisgIGN1cmxfb2ZmX3QgYmlnc2l6ZTsKKyNlbmRpZgorCisgIHN3aXRjaChvcHRpb24pIHsKKyAgY2FzZSBDVVJMT1BUX0ROU19DQUNIRV9USU1FT1VUOgorICAgIGRhdGEtPnNldC5kbnNfY2FjaGVfdGltZW91dCA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9ETlNfVVNFX0dMT0JBTF9DQUNIRToKKyAgICAvKiByZW1lbWJlciB3ZSB3YW50IHRoaXMgZW5hYmxlZCAqLworICAgIGFyZyA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgZGF0YS0+c2V0Lmdsb2JhbF9kbnNfY2FjaGUgPSAoMCAhPSBhcmcpP1RSVUU6RkFMU0U7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9TU0xfQ0lQSEVSX0xJU1Q6CisgICAgLyogc2V0IGEgbGlzdCBvZiBjaXBoZXIgd2Ugd2FudCB0byB1c2UgaW4gdGhlIFNTTCBjb25uZWN0aW9uICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0lQSEVSX0xJU1RdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9SQU5ET01fRklMRToKKyAgICAvKgorICAgICAqIFRoaXMgaXMgdGhlIHBhdGggbmFtZSB0byBhIGZpbGUgdGhhdCBjb250YWlucyByYW5kb20gZGF0YSB0byBzZWVkCisgICAgICogdGhlIHJhbmRvbSBTU0wgc3R1ZmYgd2l0aC4gVGhlIGZpbGUgaXMgb25seSB1c2VkIGZvciByZWFkaW5nLgorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1JBTkRPTV9GSUxFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0VHRFNPQ0tFVDoKKyAgICAvKgorICAgICAqIFRoZSBFbnRyb3B5IEdhdGhlcmluZyBEYWVtb24gc29ja2V0IHBhdGhuYW1lCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfRUdEU09DS0VUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX01BWENPTk5FQ1RTOgorICAgIC8qCisgICAgICogU2V0IHRoZSBhYnNvbHV0ZSBudW1iZXIgb2YgbWF4aW11bSBzaW11bHRhbmVvdXMgYWxpdmUgY29ubmVjdGlvbiB0aGF0CisgICAgICogbGliY3VybCBpcyBhbGxvd2VkIHRvIGhhdmUuCisgICAgICovCisgICAgcmVzdWx0ID0gQ3VybF9jaF9jb25uYyhkYXRhLCBkYXRhLT5zdGF0ZS5jb25uYywgdmFfYXJnKHBhcmFtLCBsb25nKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9GT1JCSURfUkVVU0U6CisgICAgLyoKKyAgICAgKiBXaGVuIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSwgaXQgbXVzdCBub3QgYmUgbGVmdCB0byBiZSByZXVzZWQgYnkgYQorICAgICAqIHN1YnNlcXVlbnQgdHJhbnNmZXIgYnV0IHNoYWxsIGJlIGNsb3NlZCBpbW1lZGlhdGVseS4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQucmV1c2VfZm9yYmlkID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSk/VFJVRTpGQUxTRTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0ZSRVNIX0NPTk5FQ1Q6CisgICAgLyoKKyAgICAgKiBUaGlzIHRyYW5zZmVyIHNoYWxsIG5vdCB1c2UgYSBwcmV2aW91c2x5IGNhY2hlZCBjb25uZWN0aW9uIGJ1dAorICAgICAqIHNob3VsZCBiZSBtYWRlIHdpdGggYSBmcmVzaCBuZXcgY29ubmVjdCEKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQucmV1c2VfZnJlc2ggPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfVkVSQk9TRToKKyAgICAvKgorICAgICAqIFZlcmJvc2UgbWVhbnMgaW5mb2YoKSBjYWxscyB0aGF0IGdpdmUgYSBsb3Qgb2YgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgKiB0aGUgY29ubmVjdGlvbiBhbmQgdHJhbnNmZXIgcHJvY2VkdXJlcyBhcyB3ZWxsIGFzIGludGVybmFsIGNob2ljZXMuCisgICAgICovCisgICAgZGF0YS0+c2V0LnZlcmJvc2UgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfSEVBREVSOgorICAgIC8qCisgICAgICogU2V0IHRvIGluY2x1ZGUgdGhlIGhlYWRlciBpbiB0aGUgZ2VuZXJhbCBkYXRhIG91dHB1dCBzdHJlYW0uCisgICAgICovCisgICAgZGF0YS0+c2V0LmluY2x1ZGVfaGVhZGVyID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSk/VFJVRTpGQUxTRTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX05PUFJPR1JFU1M6CisgICAgLyoKKyAgICAgKiBTaHV0IG9mZiB0aGUgaW50ZXJuYWwgc3VwcG9ydGVkIHByb2dyZXNzIG1ldGVyCisgICAgICovCisgICAgZGF0YS0+c2V0LmhpZGVfcHJvZ3Jlc3MgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOworICAgIGlmKGRhdGEtPnNldC5oaWRlX3Byb2dyZXNzKQorICAgICAgZGF0YS0+cHJvZ3Jlc3MuZmxhZ3MgfD0gUEdSU19ISURFOworICAgIGVsc2UKKyAgICAgIGRhdGEtPnByb2dyZXNzLmZsYWdzICY9IH5QR1JTX0hJREU7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9OT0JPRFk6CisgICAgLyoKKyAgICAgKiBEbyBub3QgaW5jbHVkZSB0aGUgYm9keSBwYXJ0IGluIHRoZSBvdXRwdXQgZGF0YSBzdHJlYW0uCisgICAgICovCisgICAgZGF0YS0+c2V0Lm9wdF9ub19ib2R5ID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSk/VFJVRTpGQUxTRTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0ZBSUxPTkVSUk9SOgorICAgIC8qCisgICAgICogRG9uJ3Qgb3V0cHV0IHRoZSA+PTMwMCBlcnJvciBjb2RlIEhUTUwtcGFnZSwgYnV0IGluc3RlYWQgb25seQorICAgICAqIHJldHVybiBlcnJvci4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuaHR0cF9mYWlsX29uX2Vycm9yID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSk/VFJVRTpGQUxTRTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1VQTE9BRDoKKyAgY2FzZSBDVVJMT1BUX1BVVDoKKyAgICAvKgorICAgICAqIFdlIHdhbnQgdG8gc2VudCBkYXRhIHRvIHRoZSByZW1vdGUgaG9zdC4gSWYgdGhpcyBpcyBIVFRQLCB0aGF0IGVxdWFscworICAgICAqIHVzaW5nIHRoZSBQVVQgcmVxdWVzdC4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQudXBsb2FkID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSk/VFJVRTpGQUxTRTsKKyAgICBpZihkYXRhLT5zZXQudXBsb2FkKSB7CisgICAgICAvKiBJZiB0aGlzIGlzIEhUVFAsIFBVVCBpcyB3aGF0J3MgbmVlZGVkIHRvICJ1cGxvYWQiICovCisgICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfUFVUOworICAgICAgZGF0YS0+c2V0Lm9wdF9ub19ib2R5ID0gRkFMU0U7IC8qIHRoaXMgaXMgaW1wbGllZCAqLworICAgIH0KKyAgICBlbHNlCisgICAgICAvKiBJbiBIVFRQLCB0aGUgb3Bwb3NpdGUgb2YgdXBsb2FkIGlzIEdFVCAodW5sZXNzIE5PQk9EWSBpcyB0cnVlIGFzCisgICAgICAgICB0aGVuIHRoaXMgY2FuIGJlIGNoYW5nZWQgdG8gSEVBRCBsYXRlciBvbikgKi8KKyAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9HRVQ7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9GSUxFVElNRToKKyAgICAvKgorICAgICAqIFRyeSB0byBnZXQgdGhlIGZpbGUgdGltZSBvZiB0aGUgcmVtb3RlIGRvY3VtZW50LiBUaGUgdGltZSB3aWxsCisgICAgICogbGF0ZXIgKHBvc3NpYmx5KSBiZWNvbWUgYXZhaWxhYmxlIHVzaW5nIGN1cmxfZWFzeV9nZXRpbmZvKCkuCisgICAgICovCisgICAgZGF0YS0+c2V0LmdldF9maWxldGltZSA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpP1RSVUU6RkFMU0U7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9GVFBfQ1JFQVRFX01JU1NJTkdfRElSUzoKKyAgICAvKgorICAgICAqIEFuIEZUUCBvcHRpb24gdGhhdCBtb2RpZmllcyBhbiB1cGxvYWQgdG8gY3JlYXRlIG1pc3NpbmcgZGlyZWN0b3JpZXMgb24KKyAgICAgKiB0aGUgc2VydmVyLgorICAgICAqLworICAgIHN3aXRjaCh2YV9hcmcocGFyYW0sIGxvbmcpKSB7CisgICAgY2FzZSAwOgorICAgICAgZGF0YS0+c2V0LmZ0cF9jcmVhdGVfbWlzc2luZ19kaXJzID0gMDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgIGRhdGEtPnNldC5mdHBfY3JlYXRlX21pc3NpbmdfZGlycyA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICBkYXRhLT5zZXQuZnRwX2NyZWF0ZV9taXNzaW5nX2RpcnMgPSAyOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIC8qIHJlc2VydmUgb3RoZXIgdmFsdWVzIGZvciBmdXR1cmUgdXNlICovCisgICAgICByZXN1bHQgPSBDVVJMRV9VTktOT1dOX09QVElPTjsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1NFUlZFUl9SRVNQT05TRV9USU1FT1VUOgorICAgIC8qCisgICAgICogT3B0aW9uIHRoYXQgc3BlY2lmaWVzIGhvdyBxdWlja2x5IGFuIHNlcnZlciByZXNwb25zZSBtdXN0IGJlIG9idGFpbmVkCisgICAgICogYmVmb3JlIGl0IGlzIGNvbnNpZGVyZWQgZmFpbHVyZS4gRm9yIHBpbmdwb25nIHByb3RvY29scy4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuc2VydmVyX3Jlc3BvbnNlX3RpbWVvdXQgPSB2YV9hcmcoIHBhcmFtICwgbG9uZyApICogMTAwMDsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1RGVFBfQkxLU0laRToKKyAgICAvKgorICAgICAqIFRGVFAgb3B0aW9uIHRoYXQgc3BlY2lmaWVzIHRoZSBibG9jayBzaXplIHRvIHVzZSBmb3IgZGF0YSB0cmFuc21pc3Npb24KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQudGZ0cF9ibGtzaXplID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0RJUkxJU1RPTkxZOgorICAgIC8qCisgICAgICogQW4gb3B0aW9uIHRoYXQgY2hhbmdlcyB0aGUgY29tbWFuZCB0byBvbmUgdGhhdCBhc2tzIGZvciBhIGxpc3QKKyAgICAgKiBvbmx5LCBubyBmaWxlIGluZm8gZGV0YWlscy4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuZnRwX2xpc3Rfb25seSA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpP1RSVUU6RkFMU0U7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9BUFBFTkQ6CisgICAgLyoKKyAgICAgKiBXZSB3YW50IHRvIHVwbG9hZCBhbmQgYXBwZW5kIHRvIGFuIGV4aXN0aW5nIGZpbGUuCisgICAgICovCisgICAgZGF0YS0+c2V0LmZ0cF9hcHBlbmQgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfRlRQX0ZJTEVNRVRIT0Q6CisgICAgLyoKKyAgICAgKiBIb3cgZG8gYWNjZXNzIGZpbGVzIG92ZXIgRlRQLgorICAgICAqLworICAgIGRhdGEtPnNldC5mdHBfZmlsZW1ldGhvZCA9IChjdXJsX2Z0cGZpbGUpdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX05FVFJDOgorICAgIC8qCisgICAgICogUGFyc2UgdGhlICRIT01FLy5uZXRyYyBmaWxlCisgICAgICovCisgICAgZGF0YS0+c2V0LnVzZV9uZXRyYyA9IChlbnVtIENVUkxfTkVUUkNfT1BUSU9OKXZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9ORVRSQ19GSUxFOgorICAgIC8qCisgICAgICogVXNlIHRoaXMgZmlsZSBpbnN0ZWFkIG9mIHRoZSAkSE9NRS8ubmV0cmMgZmlsZQorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfTkVUUkNfRklMRV0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9UUkFOU0ZFUlRFWFQ6CisgICAgLyoKKyAgICAgKiBUaGlzIG9wdGlvbiB3YXMgcHJldmlvdXNseSBuYW1lZCAnRlRQQVNDSUknLiBSZW5hbWVkIHRvIHdvcmsgd2l0aAorICAgICAqIG1vcmUgcHJvdG9jb2xzIHRoYW4gbWVyZWx5IEZUUC4KKyAgICAgKgorICAgICAqIFRyYW5zZmVyIHVzaW5nIEFTQ0lJIChpbnN0ZWFkIG9mIEJJTkFSWSkuCisgICAgICovCisgICAgZGF0YS0+c2V0LnByZWZlcl9hc2NpaSA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpP1RSVUU6RkFMU0U7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9USU1FQ09ORElUSU9OOgorICAgIC8qCisgICAgICogU2V0IEhUVFAgdGltZSBjb25kaXRpb24uIFRoaXMgbXVzdCBiZSBvbmUgb2YgdGhlIGRlZmluZXMgaW4gdGhlCisgICAgICogY3VybC9jdXJsLmggaGVhZGVyIGZpbGUuCisgICAgICovCisgICAgZGF0YS0+c2V0LnRpbWVjb25kaXRpb24gPSAoY3VybF9UaW1lQ29uZCl2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfVElNRVZBTFVFOgorICAgIC8qCisgICAgICogVGhpcyBpcyB0aGUgdmFsdWUgdG8gY29tcGFyZSB3aXRoIHRoZSByZW1vdGUgZG9jdW1lbnQgd2l0aCB0aGUKKyAgICAgKiBtZXRob2Qgc2V0IHdpdGggQ1VSTE9QVF9USU1FQ09ORElUSU9OCisgICAgICovCisgICAgZGF0YS0+c2V0LnRpbWV2YWx1ZSA9ICh0aW1lX3QpdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1NTTFZFUlNJT046CisgICAgLyoKKyAgICAgKiBTZXQgZXhwbGljaXQgU1NMIHZlcnNpb24gdG8gdHJ5IHRvIGNvbm5lY3Qgd2l0aCwgYXMgc29tZSBTU0wKKyAgICAgKiBpbXBsZW1lbnRhdGlvbnMgYXJlIGxhbWUuCisgICAgICovCisgICAgZGF0YS0+c2V0LnNzbC52ZXJzaW9uID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorICBjYXNlIENVUkxPUFRfQVVUT1JFRkVSRVI6CisgICAgLyoKKyAgICAgKiBTd2l0Y2ggb24gYXV0b21hdGljIHJlZmVyZXIgdGhhdCBnZXRzIHNldCBpZiBjdXJsIGZvbGxvd3MgbG9jYXRpb25zLgorICAgICAqLworICAgIGRhdGEtPnNldC5odHRwX2F1dG9fcmVmZXJlciA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpP1RSVUU6RkFMU0U7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0FDQ0VQVF9FTkNPRElORzoKKyAgICAvKgorICAgICAqIFN0cmluZyB0byB1c2UgYXQgdGhlIHZhbHVlIG9mIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIuCisgICAgICoKKyAgICAgKiBJZiB0aGUgZW5jb2RpbmcgaXMgc2V0IHRvICIiIHdlIHVzZSBhbiBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyIHRoYXQKKyAgICAgKiBlbmNvbXBhc3NlcyBhbGwgdGhlIGVuY29kaW5ncyB3ZSBzdXBwb3J0LgorICAgICAqIElmIHRoZSBlbmNvZGluZyBpcyBzZXQgdG8gTlVMTCB3ZSBkb24ndCBzZW5kIGFuIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIKKyAgICAgKiBhbmQgaWdub3JlIGFuIHJlY2VpdmVkIENvbnRlbnQtRW5jb2RpbmcgaGVhZGVyLgorICAgICAqCisgICAgICovCisgICAgYXJncHRyID0gdmFfYXJnKHBhcmFtLCBjaGFyICopOworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfRU5DT0RJTkddLAorICAgICAgICAgICAgICAgICAgICAgICAoYXJncHRyICYmICEqYXJncHRyKT8KKyAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgQUxMX0NPTlRFTlRfRU5DT0RJTkdTOiBhcmdwdHIpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9UUkFOU0ZFUl9FTkNPRElORzoKKyAgICBkYXRhLT5zZXQuaHR0cF90cmFuc2Zlcl9lbmNvZGluZyA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpP1RSVUU6RkFMU0U7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OOgorICAgIC8qCisgICAgICogRm9sbG93IExvY2F0aW9uOiBoZWFkZXIgaGludHMgb24gYSBIVFRQLXNlcnZlci4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuaHR0cF9mb2xsb3dfbG9jYXRpb24gPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9VTlJFU1RSSUNURURfQVVUSDoKKyAgICAvKgorICAgICAqIFNlbmQgYXV0aGVudGljYXRpb24gKHVzZXIrcGFzc3dvcmQpIHdoZW4gZm9sbG93aW5nIGxvY2F0aW9ucywgZXZlbiB3aGVuCisgICAgICogaG9zdG5hbWUgY2hhbmdlZC4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuaHR0cF9kaXNhYmxlX2hvc3RuYW1lX2NoZWNrX2JlZm9yZV9hdXRoZW50aWNhdGlvbiA9CisgICAgICAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9NQVhSRURJUlM6CisgICAgLyoKKyAgICAgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgaG9wcyB5b3UgYWxsb3cgY3VybCB0byBmb2xsb3cgTG9jYXRpb246CisgICAgICogaGVhZGVycy4gVGhpcyBzaG91bGQgbW9zdGx5IGJlIHVzZWQgdG8gZGV0ZWN0IG5ldmVyLWVuZGluZyBsb29wcy4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQubWF4cmVkaXJzID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfUE9TVFJFRElSOgorICB7CisgICAgLyoKKyAgICAgKiBTZXQgdGhlIGJlaGF2aW91ciBvZiBQT1NUIHdoZW4gcmVkaXJlY3RpbmcKKyAgICAgKiBDVVJMX1JFRElSX0dFVF9BTEwgLSBQT1NUIGlzIGNoYW5nZWQgdG8gR0VUIGFmdGVyIDMwMSBhbmQgMzAyCisgICAgICogQ1VSTF9SRURJUl9QT1NUXzMwMSAtIFBPU1QgaXMga2VwdCBhcyBQT1NUIGFmdGVyIDMwMQorICAgICAqIENVUkxfUkVESVJfUE9TVF8zMDIgLSBQT1NUIGlzIGtlcHQgYXMgUE9TVCBhZnRlciAzMDIKKyAgICAgKiBDVVJMX1JFRElSX1BPU1RfQUxMIC0gUE9TVCBpcyBrZXB0IGFzIFBPU1QgYWZ0ZXIgMzAxIGFuZCAzMDIKKyAgICAgKiBvdGhlciAtIFBPU1QgaXMga2VwdCBhcyBQT1NUIGFmdGVyIDMwMSBhbmQgMzAyCisgICAgICovCisgICAgbG9uZyBwb3N0UmVkaXIgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGRhdGEtPnNldC5wb3N0MzAxID0gKHBvc3RSZWRpciAmIENVUkxfUkVESVJfUE9TVF8zMDEpP1RSVUU6RkFMU0U7CisgICAgZGF0YS0+c2V0LnBvc3QzMDIgPSAocG9zdFJlZGlyICYgQ1VSTF9SRURJUl9QT1NUXzMwMik/VFJVRTpGQUxTRTsKKyAgfQorICBicmVhazsKKworICBjYXNlIENVUkxPUFRfUE9TVDoKKyAgICAvKiBEb2VzIHRoaXMgb3B0aW9uIHNlcnZlIGEgcHVycG9zZSBhbnltb3JlPyBZZXMgaXQgZG9lcywgd2hlbgorICAgICAgIENVUkxPUFRfUE9TVEZJRUxEUyBpc24ndCB1c2VkIGFuZCB0aGUgUE9TVCBkYXRhIGlzIHJlYWQgb2ZmIHRoZQorICAgICAgIGNhbGxiYWNrISAqLworICAgIGlmKHZhX2FyZyhwYXJhbSwgbG9uZykpIHsKKyAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QT1NUOworICAgICAgZGF0YS0+c2V0Lm9wdF9ub19ib2R5ID0gRkFMU0U7IC8qIHRoaXMgaXMgaW1wbGllZCAqLworICAgIH0KKyAgICBlbHNlCisgICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfR0VUOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9DT1BZUE9TVEZJRUxEUzoKKyAgICAvKgorICAgICAqIEEgc3RyaW5nIHdpdGggUE9TVCBkYXRhLiBNYWtlcyBjdXJsIEhUVFAgUE9TVC4gRXZlbiBpZiBpdCBpcyBOVUxMLgorICAgICAqIElmIG5lZWRlZCwgQ1VSTE9QVF9QT1NURklFTERTSVpFIG11c3QgaGF2ZSBiZWVuIHNldCBwcmlvciB0bworICAgICAqICBDVVJMT1BUX0NPUFlQT1NURklFTERTIGFuZCBub3QgYWx0ZXJlZCBsYXRlci4KKyAgICAgKi8KKyAgICBhcmdwdHIgPSB2YV9hcmcocGFyYW0sIGNoYXIgKik7CisKKyAgICBpZighYXJncHRyIHx8IGRhdGEtPnNldC5wb3N0ZmllbGRzaXplID09IC0xKQorICAgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DT1BZUE9TVEZJRUxEU10sIGFyZ3B0cik7CisgICAgZWxzZSB7CisgICAgICAvKgorICAgICAgICogIENoZWNrIHRoYXQgcmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBvdmVyZmxvdyB0aGUgc2l6ZV90IHR5cGUuCisgICAgICAgKi8KKworICAgICAgaWYoKGRhdGEtPnNldC5wb3N0ZmllbGRzaXplIDwgMCkgfHwKKyAgICAgICAgICgoc2l6ZW9mKGN1cmxfb2ZmX3QpICE9IHNpemVvZihzaXplX3QpKSAmJgorICAgICAgICAgIChkYXRhLT5zZXQucG9zdGZpZWxkc2l6ZSA+IChjdXJsX29mZl90KSgoc2l6ZV90KS0xKSkpKQorICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgZWxzZSB7CisgICAgICAgIGNoYXIgKiBwOworCisgICAgICAgICh2b2lkKSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0NPUFlQT1NURklFTERTXSwgTlVMTCk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgZXZlbiB3aGVuIHNpemUgPT0gMC4gVGhpcyBzYXRpc2ZpZXMgdGhlIG5lZWQgb2YgcG9zc2libGUKKyAgICAgICAgICAgbGF0ZXIgYWRkcmVzcyBjb21wYXJlIHRvIGRldGVjdCB0aGUgQ09QWVBPU1RGSUVMRFMgbW9kZSwgYW5kCisgICAgICAgICAgIHRvIG1hcmsgdGhhdCBwb3N0ZmllbGRzIGlzIHVzZWQgcmF0aGVyIHRoYW4gcmVhZCBmdW5jdGlvbiBvcgorICAgICAgICAgICBmb3JtIGRhdGEuCisgICAgICAgICovCisgICAgICAgIHAgPSBtYWxsb2MoKHNpemVfdCkoZGF0YS0+c2V0LnBvc3RmaWVsZHNpemU/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnBvc3RmaWVsZHNpemU6MSkpOworCisgICAgICAgIGlmKCFwKQorICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGlmKGRhdGEtPnNldC5wb3N0ZmllbGRzaXplKQorICAgICAgICAgICAgbWVtY3B5KHAsIGFyZ3B0ciwgKHNpemVfdClkYXRhLT5zZXQucG9zdGZpZWxkc2l6ZSk7CisKKyAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19DT1BZUE9TVEZJRUxEU10gPSBwOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgZGF0YS0+c2V0LnBvc3RmaWVsZHMgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DT1BZUE9TVEZJRUxEU107CisgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX1BPU1Q7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1BPU1RGSUVMRFM6CisgICAgLyoKKyAgICAgKiBMaWtlIGFib3ZlLCBidXQgdXNlIHN0YXRpYyBkYXRhIGluc3RlYWQgb2YgY29weWluZyBpdC4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQucG9zdGZpZWxkcyA9IHZhX2FyZyhwYXJhbSwgdm9pZCAqKTsKKyAgICAvKiBSZWxlYXNlIG9sZCBjb3BpZWQgZGF0YS4gKi8KKyAgICAodm9pZCkgc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DT1BZUE9TVEZJRUxEU10sIE5VTEwpOworICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9QT1NUOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9QT1NURklFTERTSVpFOgorICAgIC8qCisgICAgICogVGhlIHNpemUgb2YgdGhlIFBPU1RGSUVMRCBkYXRhIHRvIHByZXZlbnQgbGliY3VybCB0byBkbyBzdHJsZW4oKSB0bworICAgICAqIGZpZ3VyZSBpdCBvdXQuIEVuYWJsZXMgYmluYXJ5IHBvc3RzLgorICAgICAqLworICAgIGJpZ3NpemUgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworCisgICAgaWYoZGF0YS0+c2V0LnBvc3RmaWVsZHNpemUgPCBiaWdzaXplICYmCisgICAgICAgZGF0YS0+c2V0LnBvc3RmaWVsZHMgPT0gZGF0YS0+c2V0LnN0cltTVFJJTkdfQ09QWVBPU1RGSUVMRFNdKSB7CisgICAgICAvKiBQcmV2aW91cyBDVVJMT1BUX0NPUFlQT1NURklFTERTIGlzIG5vIGxvbmdlciB2YWxpZC4gKi8KKyAgICAgICh2b2lkKSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0NPUFlQT1NURklFTERTXSwgTlVMTCk7CisgICAgICBkYXRhLT5zZXQucG9zdGZpZWxkcyA9IE5VTEw7CisgICAgfQorCisgICAgZGF0YS0+c2V0LnBvc3RmaWVsZHNpemUgPSBiaWdzaXplOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9QT1NURklFTERTSVpFX0xBUkdFOgorICAgIC8qCisgICAgICogVGhlIHNpemUgb2YgdGhlIFBPU1RGSUVMRCBkYXRhIHRvIHByZXZlbnQgbGliY3VybCB0byBkbyBzdHJsZW4oKSB0bworICAgICAqIGZpZ3VyZSBpdCBvdXQuIEVuYWJsZXMgYmluYXJ5IHBvc3RzLgorICAgICAqLworICAgIGJpZ3NpemUgPSB2YV9hcmcocGFyYW0sIGN1cmxfb2ZmX3QpOworCisgICAgaWYoZGF0YS0+c2V0LnBvc3RmaWVsZHNpemUgPCBiaWdzaXplICYmCisgICAgICAgZGF0YS0+c2V0LnBvc3RmaWVsZHMgPT0gZGF0YS0+c2V0LnN0cltTVFJJTkdfQ09QWVBPU1RGSUVMRFNdKSB7CisgICAgICAvKiBQcmV2aW91cyBDVVJMT1BUX0NPUFlQT1NURklFTERTIGlzIG5vIGxvbmdlciB2YWxpZC4gKi8KKyAgICAgICh2b2lkKSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0NPUFlQT1NURklFTERTXSwgTlVMTCk7CisgICAgICBkYXRhLT5zZXQucG9zdGZpZWxkcyA9IE5VTEw7CisgICAgfQorCisgICAgZGF0YS0+c2V0LnBvc3RmaWVsZHNpemUgPSBiaWdzaXplOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9IVFRQUE9TVDoKKyAgICAvKgorICAgICAqIFNldCB0byBtYWtlIHVzIGRvIEhUVFAgUE9TVAorICAgICAqLworICAgIGRhdGEtPnNldC5odHRwcG9zdCA9IHZhX2FyZyhwYXJhbSwgc3RydWN0IGN1cmxfaHR0cHBvc3QgKik7CisgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX1BPU1RfRk9STTsKKyAgICBkYXRhLT5zZXQub3B0X25vX2JvZHkgPSBGQUxTRTsgLyogdGhpcyBpcyBpbXBsaWVkICovCisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1JFRkVSRVI6CisgICAgLyoKKyAgICAgKiBTdHJpbmcgdG8gc2V0IGluIHRoZSBIVFRQIFJlZmVyZXI6IGZpZWxkLgorICAgICAqLworICAgIGlmKGRhdGEtPmNoYW5nZS5yZWZlcmVyX2FsbG9jKSB7CisgICAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPmNoYW5nZS5yZWZlcmVyKTsKKyAgICAgIGRhdGEtPmNoYW5nZS5yZWZlcmVyX2FsbG9jID0gRkFMU0U7CisgICAgfQorICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU0VUX1JFRkVSRVJdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGRhdGEtPmNoYW5nZS5yZWZlcmVyID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU0VUX1JFRkVSRVJdOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9VU0VSQUdFTlQ6CisgICAgLyoKKyAgICAgKiBTdHJpbmcgdG8gdXNlIGluIHRoZSBIVFRQIFVzZXItQWdlbnQgZmllbGQKKyAgICAgKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1VTRVJBR0VOVF0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0hUVFBIRUFERVI6CisgICAgLyoKKyAgICAgKiBTZXQgYSBsaXN0IHdpdGggSFRUUCBoZWFkZXJzIHRvIHVzZSAob3IgcmVwbGFjZSBpbnRlcm5hbHMgd2l0aCkKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuaGVhZGVycyA9IHZhX2FyZyhwYXJhbSwgc3RydWN0IGN1cmxfc2xpc3QgKik7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0hUVFAyMDBBTElBU0VTOgorICAgIC8qCisgICAgICogU2V0IGEgbGlzdCBvZiBhbGlhc2VzIGZvciBIVFRQIDIwMCBpbiByZXNwb25zZSBoZWFkZXIKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuaHR0cDIwMGFsaWFzZXMgPSB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX3NsaXN0ICopOworICAgIGJyZWFrOworCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NPT0tJRVMpCisgIGNhc2UgQ1VSTE9QVF9DT09LSUU6CisgICAgLyoKKyAgICAgKiBDb29raWUgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIHJlbW90ZSBzZXJ2ZXIgaW4gdGhlIHJlcXVlc3QuCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DT09LSUVdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9DT09LSUVGSUxFOgorICAgIC8qCisgICAgICogU2V0IGNvb2tpZSBmaWxlIHRvIHJlYWQgYW5kIHBhcnNlLiBDYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy4KKyAgICAgKi8KKyAgICBhcmdwdHIgPSAoY2hhciAqKXZhX2FyZyhwYXJhbSwgdm9pZCAqKTsKKyAgICBpZihhcmdwdHIpIHsKKyAgICAgIHN0cnVjdCBjdXJsX3NsaXN0ICpjbDsKKyAgICAgIC8qIGFwcGVuZCB0aGUgY29va2llIGZpbGUgbmFtZSB0byB0aGUgbGlzdCBvZiBmaWxlIG5hbWVzLCBhbmQgZGVhbCB3aXRoCisgICAgICAgICB0aGVtIGxhdGVyICovCisgICAgICBjbCA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdGEtPmNoYW5nZS5jb29raWVsaXN0LCBhcmdwdHIpOworICAgICAgaWYoIWNsKSB7CisgICAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwoZGF0YS0+Y2hhbmdlLmNvb2tpZWxpc3QpOworICAgICAgICBkYXRhLT5jaGFuZ2UuY29va2llbGlzdCA9IE5VTEw7CisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgfQorICAgICAgZGF0YS0+Y2hhbmdlLmNvb2tpZWxpc3QgPSBjbDsgLyogc3RvcmUgdGhlIGxpc3QgZm9yIGxhdGVyIHVzZSAqLworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfQ09PS0lFSkFSOgorICAgIC8qCisgICAgICogU2V0IGNvb2tpZSBmaWxlIG5hbWUgdG8gZHVtcCBhbGwgY29va2llcyB0byB3aGVuIHdlJ3JlIGRvbmUuCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DT09LSUVKQVJdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworCisgICAgLyoKKyAgICAgKiBBY3RpdmF0ZSB0aGUgY29va2llIHBhcnNlci4gVGhpcyBtYXkgb3IgbWF5IG5vdCBhbHJlYWR5CisgICAgICogaGF2ZSBiZWVuIG1hZGUuCisgICAgICovCisgICAgZGF0YS0+Y29va2llcyA9IEN1cmxfY29va2llX2luaXQoZGF0YSwgTlVMTCwgZGF0YS0+Y29va2llcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuY29va2llc2Vzc2lvbik7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0NPT0tJRVNFU1NJT046CisgICAgLyoKKyAgICAgKiBTZXQgdGhpcyBvcHRpb24gdG8gVFJVRSB0byBzdGFydCBhIG5ldyAiY29va2llIHNlc3Npb24iLiBJdCB3aWxsCisgICAgICogcHJldmVudCB0aGUgZm9ydGhjb21pbmcgcmVhZC1jb29raWVzLWZyb20tZmlsZSBhY3Rpb25zIHRvIGFjY2VwdAorICAgICAqIGNvb2tpZXMgdGhhdCBhcmUgbWFya2VkIGFzIGJlaW5nIHNlc3Npb24gY29va2llcywgYXMgdGhleSBiZWxvbmcgdG8gYQorICAgICAqIHByZXZpb3VzIHNlc3Npb24uCisgICAgICoKKyAgICAgKiBJbiB0aGUgb3JpZ2luYWwgTmV0c2NhcGUgY29va2llIHNwZWMsICJzZXNzaW9uIGNvb2tpZXMiIGFyZSBjb29raWVzCisgICAgICogd2l0aCBubyBleHBpcmUgZGF0ZSBzZXQuIFJGQzIxMDkgZGVzY3JpYmVzIHRoZSBzYW1lIGFjdGlvbiBpZiBubworICAgICAqICdNYXgtQWdlJyBpcyBzZXQgYW5kIFJGQzI5NjUgaW5jbHVkZXMgdGhlIFJGQzIxMDkgZGVzY3JpcHRpb24gYW5kIGFkZHMKKyAgICAgKiBhICdEaXNjYXJkJyBhY3Rpb24gdGhhdCBjYW4gZW5mb3JjZSB0aGUgZGlzY2FyZCBldmVuIGZvciBjb29raWVzIHRoYXQKKyAgICAgKiBoYXZlIGEgTWF4LUFnZS4KKyAgICAgKgorICAgICAqIFdlIHJ1biBtb3N0bHkgd2l0aCB0aGUgb3JpZ2luYWwgY29va2llIHNwZWMsIGFzIGhhcmRseSBhbnlvbmUgaW1wbGVtZW50cworICAgICAqIGFueXRoaW5nIGVsc2UuCisgICAgICovCisgICAgZGF0YS0+c2V0LmNvb2tpZXNlc3Npb24gPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9DT09LSUVMSVNUOgorICAgIGFyZ3B0ciA9IHZhX2FyZyhwYXJhbSwgY2hhciAqKTsKKworICAgIGlmKGFyZ3B0ciA9PSBOVUxMKQorICAgICAgYnJlYWs7CisKKyAgICBpZihDdXJsX3Jhd19lcXVhbChhcmdwdHIsICJBTEwiKSkgeworICAgICAgLyogY2xlYXIgYWxsIGNvb2tpZXMgKi8KKyAgICAgIEN1cmxfY29va2llX2NsZWFyYWxsKGRhdGEtPmNvb2tpZXMpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGVsc2UgaWYoQ3VybF9yYXdfZXF1YWwoYXJncHRyLCAiU0VTUyIpKSB7CisgICAgICAvKiBjbGVhciBzZXNzaW9uIGNvb2tpZXMgKi8KKyAgICAgIEN1cmxfY29va2llX2NsZWFyc2VzcyhkYXRhLT5jb29raWVzKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKGFyZ3B0ciwgIkZMVVNIIikpIHsKKyAgICAgIC8qIGZsdXNoIGNvb2tpZXMgdG8gZmlsZSAqLworICAgICAgQ3VybF9mbHVzaF9jb29raWVzKGRhdGEsIDApOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYoIWRhdGEtPmNvb2tpZXMpCisgICAgICAvKiBpZiBjb29raWUgZW5naW5lIHdhcyBub3QgcnVubmluZywgYWN0aXZhdGUgaXQgKi8KKyAgICAgIGRhdGEtPmNvb2tpZXMgPSBDdXJsX2Nvb2tpZV9pbml0KGRhdGEsIE5VTEwsIE5VTEwsIFRSVUUpOworCisgICAgYXJncHRyID0gc3RyZHVwKGFyZ3B0cik7CisgICAgaWYoIWFyZ3B0cikgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmKGNoZWNrcHJlZml4KCJTZXQtQ29va2llOiIsIGFyZ3B0cikpCisgICAgICAvKiBIVFRQIEhlYWRlciBmb3JtYXQgbGluZSAqLworICAgICAgQ3VybF9jb29raWVfYWRkKGRhdGEsIGRhdGEtPmNvb2tpZXMsIFRSVUUsIGFyZ3B0ciArIDExLCBOVUxMLCBOVUxMKTsKKworICAgIGVsc2UKKyAgICAgIC8qIE5ldHNjYXBlIGZvcm1hdCBsaW5lICovCisgICAgICBDdXJsX2Nvb2tpZV9hZGQoZGF0YSwgZGF0YS0+Y29va2llcywgRkFMU0UsIGFyZ3B0ciwgTlVMTCwgTlVMTCk7CisKKyAgICBmcmVlKGFyZ3B0cik7CisgICAgYnJlYWs7CisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0NPT0tJRVMgKi8KKworICBjYXNlIENVUkxPUFRfSFRUUEdFVDoKKyAgICAvKgorICAgICAqIFNldCB0byBmb3JjZSB1cyBkbyBIVFRQIEdFVAorICAgICAqLworICAgIGlmKHZhX2FyZyhwYXJhbSwgbG9uZykpIHsKKyAgICAgIGRhdGEtPnNldC5odHRwcmVxID0gSFRUUFJFUV9HRVQ7CisgICAgICBkYXRhLT5zZXQudXBsb2FkID0gRkFMU0U7IC8qIHN3aXRjaCBvZmYgdXBsb2FkICovCisgICAgICBkYXRhLT5zZXQub3B0X25vX2JvZHkgPSBGQUxTRTsgLyogdGhpcyBpcyBpbXBsaWVkICovCisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9IVFRQX1ZFUlNJT046CisgICAgLyoKKyAgICAgKiBUaGlzIHNldHMgYSByZXF1ZXN0ZWQgSFRUUCB2ZXJzaW9uIHRvIGJlIHVzZWQuIFRoZSB2YWx1ZSBpcyBvbmUgb2YKKyAgICAgKiB0aGUgbGlzdGVkIGVudW1zIGluIGN1cmwvY3VybC5oLgorICAgICAqLworICAgIGRhdGEtPnNldC5odHRwdmVyc2lvbiA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0hUVFBBVVRIOgorICAgIC8qCisgICAgICogU2V0IEhUVFAgQXV0aGVudGljYXRpb24gdHlwZSBCSVRNQVNLLgorICAgICAqLworICB7CisgICAgbG9uZyBhdXRoID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKworICAgIC8qIHRoZSBESUdFU1RfSUUgYml0IGlzIG9ubHkgdXNlZCB0byBzZXQgYSBzcGVjaWFsIG1hcmtlciwgZm9yIGFsbCB0aGUKKyAgICAgICByZXN0IHdlIG5lZWQgdG8gaGFuZGxlIGl0IGFzIG5vcm1hbCBESUdFU1QgKi8KKyAgICBkYXRhLT5zdGF0ZS5hdXRoaG9zdC5pZXN0eWxlID0gKGF1dGggJiBDVVJMQVVUSF9ESUdFU1RfSUUpP1RSVUU6RkFMU0U7CisKKyAgICBpZihhdXRoICYgQ1VSTEFVVEhfRElHRVNUX0lFKSB7CisgICAgICBhdXRoIHw9IENVUkxBVVRIX0RJR0VTVDsgLyogc2V0IHN0YW5kYXJkIGRpZ2VzdCBiaXQgKi8KKyAgICAgIGF1dGggJj0gfkNVUkxBVVRIX0RJR0VTVF9JRTsgLyogdW5zZXQgaWUgZGlnZXN0IGJpdCAqLworICAgIH0KKworICAgIC8qIHN3aXRjaCBvZmYgYml0cyB3ZSBjYW4ndCBzdXBwb3J0ICovCisjaWZuZGVmIFVTRV9OVExNCisgICAgYXV0aCAmPSB+Q1VSTEFVVEhfTlRMTTsgICAgLyogbm8gTlRMTSBzdXBwb3J0ICovCisgICAgYXV0aCAmPSB+Q1VSTEFVVEhfTlRMTV9XQjsgLyogbm8gTlRMTV9XQiBzdXBwb3J0ICovCisjZWxpZiAhZGVmaW5lZChOVExNX1dCX0VOQUJMRUQpCisgICAgYXV0aCAmPSB+Q1VSTEFVVEhfTlRMTV9XQjsgLyogbm8gTlRMTV9XQiBzdXBwb3J0ICovCisjZW5kaWYKKyNpZm5kZWYgVVNFX0hUVFBfTkVHT1RJQVRFCisgICAgYXV0aCAmPSB+Q1VSTEFVVEhfR1NTTkVHT1RJQVRFOyAvKiBubyBHU1MtTmVnb3RpYXRlIHdpdGhvdXQgR1NTQVBJIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5ET1dTX1NTUEkgKi8KKyNlbmRpZgorICAgIGlmKCFhdXRoKQorICAgICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsgLyogbm8gc3VwcG9ydGVkIHR5cGVzIGxlZnQhICovCisKKyAgICBkYXRhLT5zZXQuaHR0cGF1dGggPSBhdXRoOworICB9CisgIGJyZWFrOworCisjZW5kaWYgICAvKiBDVVJMX0RJU0FCTEVfSFRUUCAqLworCisgIGNhc2UgQ1VSTE9QVF9DVVNUT01SRVFVRVNUOgorICAgIC8qCisgICAgICogU2V0IGEgY3VzdG9tIHN0cmluZyB0byB1c2UgYXMgcmVxdWVzdAorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfQ1VTVE9NUkVRVUVTVF0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisKKyAgICAvKiB3ZSBkb24ndCBzZXQKKyAgICAgICBkYXRhLT5zZXQuaHR0cHJlcSA9IEhUVFBSRVFfQ1VTVE9NOworICAgICAgIGhlcmUsIHdlIGNvbnRpbnVlIGFzIGlmIHdlIHdlcmUgdXNpbmcgdGhlIGFscmVhZHkgc2V0IHR5cGUKKyAgICAgICBhbmQgdGhpcyBqdXN0IGNoYW5nZXMgdGhlIGFjdHVhbCByZXF1ZXN0IGtleXdvcmQgKi8KKyAgICBicmVhazsKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKyAgY2FzZSBDVVJMT1BUX0hUVFBQUk9YWVRVTk5FTDoKKyAgICAvKgorICAgICAqIFR1bm5lbCBvcGVyYXRpb25zIHRocm91Z2ggdGhlIHByb3h5IGluc3RlYWQgb2Ygbm9ybWFsIHByb3h5IHVzZQorICAgICAqLworICAgIGRhdGEtPnNldC50dW5uZWxfdGhydV9odHRwcHJveHkgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9QUk9YWVBPUlQ6CisgICAgLyoKKyAgICAgKiBFeHBsaWNpdGx5IHNldCBIVFRQIHByb3h5IHBvcnQgbnVtYmVyLgorICAgICAqLworICAgIGRhdGEtPnNldC5wcm94eXBvcnQgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9QUk9YWUFVVEg6CisgICAgLyoKKyAgICAgKiBTZXQgSFRUUCBBdXRoZW50aWNhdGlvbiB0eXBlIEJJVE1BU0suCisgICAgICovCisgIHsKKyAgICBsb25nIGF1dGggPSB2YV9hcmcocGFyYW0sIGxvbmcpOworCisgICAgLyogdGhlIERJR0VTVF9JRSBiaXQgaXMgb25seSB1c2VkIHRvIHNldCBhIHNwZWNpYWwgbWFya2VyLCBmb3IgYWxsIHRoZQorICAgICAgIHJlc3Qgd2UgbmVlZCB0byBoYW5kbGUgaXQgYXMgbm9ybWFsIERJR0VTVCAqLworICAgIGRhdGEtPnN0YXRlLmF1dGhwcm94eS5pZXN0eWxlID0gKGF1dGggJiBDVVJMQVVUSF9ESUdFU1RfSUUpP1RSVUU6RkFMU0U7CisKKyAgICBpZihhdXRoICYgQ1VSTEFVVEhfRElHRVNUX0lFKSB7CisgICAgICBhdXRoIHw9IENVUkxBVVRIX0RJR0VTVDsgLyogc2V0IHN0YW5kYXJkIGRpZ2VzdCBiaXQgKi8KKyAgICAgIGF1dGggJj0gfkNVUkxBVVRIX0RJR0VTVF9JRTsgLyogdW5zZXQgaWUgZGlnZXN0IGJpdCAqLworICAgIH0KKyAgICAvKiBzd2l0Y2ggb2ZmIGJpdHMgd2UgY2FuJ3Qgc3VwcG9ydCAqLworI2lmbmRlZiBVU0VfTlRMTQorICAgIGF1dGggJj0gfkNVUkxBVVRIX05UTE07ICAgIC8qIG5vIE5UTE0gc3VwcG9ydCAqLworICAgIGF1dGggJj0gfkNVUkxBVVRIX05UTE1fV0I7IC8qIG5vIE5UTE1fV0Igc3VwcG9ydCAqLworI2VsaWYgIWRlZmluZWQoTlRMTV9XQl9FTkFCTEVEKQorICAgIGF1dGggJj0gfkNVUkxBVVRIX05UTE1fV0I7IC8qIG5vIE5UTE1fV0Igc3VwcG9ydCAqLworI2VuZGlmCisjaWZuZGVmIFVTRV9IVFRQX05FR09USUFURQorICAgIGF1dGggJj0gfkNVUkxBVVRIX0dTU05FR09USUFURTsgLyogbm8gR1NTLU5lZ290aWF0ZSB3aXRob3V0IEdTU0FQSSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORE9XU19TU1BJICovCisjZW5kaWYKKyAgICBpZighYXV0aCkKKyAgICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47IC8qIG5vIHN1cHBvcnRlZCB0eXBlcyBsZWZ0ISAqLworCisgICAgZGF0YS0+c2V0LnByb3h5YXV0aCA9IGF1dGg7CisgIH0KKyAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1BST1hZOgorICAgIC8qCisgICAgICogU2V0IHByb3h5IHNlcnZlcjpwb3J0IHRvIHVzZSBhcyBIVFRQIHByb3h5LgorICAgICAqCisgICAgICogSWYgdGhlIHByb3h5IGlzIHNldCB0byAiIiB3ZSBleHBsaWNpdGx5IHNheSB0aGF0IHdlIGRvbid0IHdhbnQgdG8gdXNlIGEKKyAgICAgKiBwcm94eSAoZXZlbiB0aG91Z2ggdGhlcmUgbWlnaHQgYmUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNheWluZyBzbykuCisgICAgICoKKyAgICAgKiBTZXR0aW5nIGl0IHRvIE5VTEwsIG1lYW5zIG5vIHByb3h5IGJ1dCBhbGxvd3MgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAqIHRvIGRlY2lkZSBmb3IgdXMuCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWV0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1BST1hZVFlQRToKKyAgICAvKgorICAgICAqIFNldCBwcm94eSB0eXBlLiBIVFRQL0hUVFBfMV8wL1NPQ0tTNC9TT0NLUzRhL1NPQ0tTNS9TT0NLUzVfSE9TVE5BTUUKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQucHJveHl0eXBlID0gKGN1cmxfcHJveHl0eXBlKXZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1RSQU5TRkVSX01PREU6CisgICAgLyoKKyAgICAgKiBzZXQgdHJhbnNmZXIgbW9kZSAoO3R5cGU9PGF8aT4pIHdoZW4gZG9pbmcgRlRQIHZpYSBhbiBIVFRQIHByb3h5CisgICAgICovCisgICAgc3dpdGNoICh2YV9hcmcocGFyYW0sIGxvbmcpKSB7CisgICAgY2FzZSAwOgorICAgICAgZGF0YS0+c2V0LnByb3h5X3RyYW5zZmVyX21vZGUgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgIGRhdGEtPnNldC5wcm94eV90cmFuc2Zlcl9tb2RlID0gVFJVRTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvKiByZXNlcnZlIG90aGVyIHZhbHVlcyBmb3IgZnV0dXJlIHVzZSAqLworICAgICAgcmVzdWx0ID0gQ1VSTEVfVU5LTk9XTl9PUFRJT047CisgICAgICBicmVhazsKKyAgICB9CisgICAgYnJlYWs7CisjZW5kaWYgICAvKiBDVVJMX0RJU0FCTEVfUFJPWFkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgY2FzZSBDVVJMT1BUX1NPQ0tTNV9HU1NBUElfU0VSVklDRToKKyAgICAvKgorICAgICAqIFNldCBnc3NhcGkgc2VydmljZSBuYW1lCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19TT0NLUzVfR1NTQVBJX1NFUlZJQ0VdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9TT0NLUzVfR1NTQVBJX05FQzoKKyAgICAvKgorICAgICAqIHNldCBmbGFnIGZvciBuZWMgc29ja3M1IHN1cHBvcnQKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuc29ja3M1X2dzc2FwaV9uZWMgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOworICAgIGJyZWFrOworI2VuZGlmCisKKyAgY2FzZSBDVVJMT1BUX1dSSVRFSEVBREVSOgorICAgIC8qCisgICAgICogQ3VzdG9tIHBvaW50ZXIgdG8gcGFzcyB0aGUgaGVhZGVyIHdyaXRlIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgICovCisgICAgZGF0YS0+c2V0LndyaXRlaGVhZGVyID0gKHZvaWQgKil2YV9hcmcocGFyYW0sIHZvaWQgKik7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9FUlJPUkJVRkZFUjoKKyAgICAvKgorICAgICAqIEVycm9yIGJ1ZmZlciBwcm92aWRlZCBieSB0aGUgY2FsbGVyIHRvIGdldCB0aGUgaHVtYW4gcmVhZGFibGUKKyAgICAgKiBlcnJvciBzdHJpbmcgaW4uCisgICAgICovCisgICAgZGF0YS0+c2V0LmVycm9yYnVmZmVyID0gdmFfYXJnKHBhcmFtLCBjaGFyICopOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfRklMRToKKyAgICAvKgorICAgICAqIEZJTEUgcG9pbnRlciB0byB3cml0ZSB0byBvciBpbmNsdWRlIGluIHRoZSBkYXRhIHdyaXRlIGNhbGxiYWNrCisgICAgICovCisgICAgZGF0YS0+c2V0Lm91dCA9IHZhX2FyZyhwYXJhbSwgRklMRSAqKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0ZUUFBPUlQ6CisgICAgLyoKKyAgICAgKiBVc2UgRlRQIFBPUlQsIHRoaXMgYWxzbyBzcGVjaWZpZXMgd2hpY2ggSVAgYWRkcmVzcyB0byB1c2UKKyAgICAgKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0ZUUFBPUlRdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGRhdGEtPnNldC5mdHBfdXNlX3BvcnQgPSAoTlVMTCAhPSBkYXRhLT5zZXQuc3RyW1NUUklOR19GVFBQT1JUXSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFOkZBTFNFOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9GVFBfVVNFX0VQUlQ6CisgICAgZGF0YS0+c2V0LmZ0cF91c2VfZXBydCA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpP1RSVUU6RkFMU0U7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0ZUUF9VU0VfRVBTVjoKKyAgICBkYXRhLT5zZXQuZnRwX3VzZV9lcHN2ID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSk/VFJVRTpGQUxTRTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfRlRQX1VTRV9QUkVUOgorICAgIGRhdGEtPnNldC5mdHBfdXNlX3ByZXQgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9GVFBfU1NMX0NDQzoKKyAgICBkYXRhLT5zZXQuZnRwX2NjYyA9IChjdXJsX2Z0cGNjYyl2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9GVFBfU0tJUF9QQVNWX0lQOgorICAgIC8qCisgICAgICogRW5hYmxlIG9yIGRpc2FibGUgRlRQX1NLSVBfUEFTVl9JUCwgd2hpY2ggd2lsbCBkaXNhYmxlL2VuYWJsZSB0aGUKKyAgICAgKiBieXBhc3Mgb2YgdGhlIElQIGFkZHJlc3MgaW4gUEFTViByZXNwb25zZXMuCisgICAgICovCisgICAgZGF0YS0+c2V0LmZ0cF9za2lwX2lwID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSk/VFJVRTpGQUxTRTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfSU5GSUxFOgorICAgIC8qCisgICAgICogRklMRSBwb2ludGVyIHRvIHJlYWQgdGhlIGZpbGUgdG8gYmUgdXBsb2FkZWQgZnJvbS4gT3IgcG9zc2libHkKKyAgICAgKiB1c2VkIGFzIGFyZ3VtZW50IHRvIHRoZSByZWFkIGNhbGxiYWNrLgorICAgICAqLworICAgIGRhdGEtPnNldC5pbiA9IHZhX2FyZyhwYXJhbSwgRklMRSAqKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0lORklMRVNJWkU6CisgICAgLyoKKyAgICAgKiBJZiBrbm93biwgdGhpcyBzaG91bGQgaW5mb3JtIGN1cmwgYWJvdXQgdGhlIGZpbGUgc2l6ZSBvZiB0aGUKKyAgICAgKiB0by1iZS11cGxvYWRlZCBmaWxlLgorICAgICAqLworICAgIGRhdGEtPnNldC5pbmZpbGVzaXplID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0lORklMRVNJWkVfTEFSR0U6CisgICAgLyoKKyAgICAgKiBJZiBrbm93biwgdGhpcyBzaG91bGQgaW5mb3JtIGN1cmwgYWJvdXQgdGhlIGZpbGUgc2l6ZSBvZiB0aGUKKyAgICAgKiB0by1iZS11cGxvYWRlZCBmaWxlLgorICAgICAqLworICAgIGRhdGEtPnNldC5pbmZpbGVzaXplID0gdmFfYXJnKHBhcmFtLCBjdXJsX29mZl90KTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0xPV19TUEVFRF9MSU1JVDoKKyAgICAvKgorICAgICAqIFRoZSBsb3cgc3BlZWQgbGltaXQgdGhhdCBpZiB0cmFuc2ZlcnMgYXJlIGJlbG93IHRoaXMgZm9yCisgICAgICogQ1VSTE9QVF9MT1dfU1BFRURfVElNRSwgdGhlIHRyYW5zZmVyIGlzIGFib3J0ZWQuCisgICAgICovCisgICAgZGF0YS0+c2V0Lmxvd19zcGVlZF9saW1pdD12YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfTUFYX1NFTkRfU1BFRURfTEFSR0U6CisgICAgLyoKKyAgICAgKiBXaGVuIHRyYW5zZmVyIHVwbG9hZHMgYXJlIGZhc3RlciB0aGVuIENVUkxPUFRfTUFYX1NFTkRfU1BFRURfTEFSR0UKKyAgICAgKiBieXRlcyBwZXIgc2Vjb25kIHRoZSB0cmFuc2ZlciBpcyB0aHJvdHRsZWQuLgorICAgICAqLworICAgIGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZD12YV9hcmcocGFyYW0sIGN1cmxfb2ZmX3QpOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfTUFYX1JFQ1ZfU1BFRURfTEFSR0U6CisgICAgLyoKKyAgICAgKiBXaGVuIHJlY2VpdmluZyBkYXRhIGZhc3RlciB0aGFuIENVUkxPUFRfTUFYX1JFQ1ZfU1BFRURfTEFSR0UgYnl0ZXMgcGVyCisgICAgICogc2Vjb25kIHRoZSB0cmFuc2ZlciBpcyB0aHJvdHRsZWQuLgorICAgICAqLworICAgIGRhdGEtPnNldC5tYXhfcmVjdl9zcGVlZD12YV9hcmcocGFyYW0sIGN1cmxfb2ZmX3QpOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfTE9XX1NQRUVEX1RJTUU6CisgICAgLyoKKyAgICAgKiBUaGUgbG93IHNwZWVkIHRpbWUgdGhhdCBpZiB0cmFuc2ZlcnMgYXJlIGJlbG93IHRoZSBzZXQKKyAgICAgKiBDVVJMT1BUX0xPV19TUEVFRF9MSU1JVCBkdXJpbmcgdGhpcyB0aW1lLCB0aGUgdHJhbnNmZXIgaXMgYWJvcnRlZC4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQubG93X3NwZWVkX3RpbWU9dmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1VSTDoKKyAgICAvKgorICAgICAqIFRoZSBVUkwgdG8gZmV0Y2guCisgICAgICovCisgICAgaWYoZGF0YS0+Y2hhbmdlLnVybF9hbGxvYykgeworICAgICAgLyogdGhlIGFscmVhZHkgc2V0IFVSTCBpcyBhbGxvY2F0ZWQsIGZyZWUgaXQgZmlyc3QhICovCisgICAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPmNoYW5nZS51cmwpOworICAgICAgZGF0YS0+Y2hhbmdlLnVybF9hbGxvYyA9IEZBTFNFOworICAgIH0KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1NFVF9VUkxdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGRhdGEtPmNoYW5nZS51cmwgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TRVRfVVJMXTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1BPUlQ6CisgICAgLyoKKyAgICAgKiBUaGUgcG9ydCBudW1iZXIgdG8gdXNlIHdoZW4gZ2V0dGluZyB0aGUgVVJMCisgICAgICovCisgICAgZGF0YS0+c2V0LnVzZV9wb3J0ID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1RJTUVPVVQ6CisgICAgLyoKKyAgICAgKiBUaGUgbWF4aW11bSB0aW1lIHlvdSBhbGxvdyBjdXJsIHRvIHVzZSBmb3IgYSBzaW5nbGUgdHJhbnNmZXIKKyAgICAgKiBvcGVyYXRpb24uCisgICAgICovCisgICAgZGF0YS0+c2V0LnRpbWVvdXQgPSB2YV9hcmcocGFyYW0sIGxvbmcpICogMTAwMEw7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1RJTUVPVVRfTVM6CisgICAgZGF0YS0+c2V0LnRpbWVvdXQgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9DT05ORUNUVElNRU9VVDoKKyAgICAvKgorICAgICAqIFRoZSBtYXhpbXVtIHRpbWUgeW91IGFsbG93IGN1cmwgdG8gdXNlIHRvIGNvbm5lY3QuCisgICAgICovCisgICAgZGF0YS0+c2V0LmNvbm5lY3R0aW1lb3V0ID0gdmFfYXJnKHBhcmFtLCBsb25nKSAqIDEwMDBMOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9DT05ORUNUVElNRU9VVF9NUzoKKyAgICBkYXRhLT5zZXQuY29ubmVjdHRpbWVvdXQgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9BQ0NFUFRUSU1FT1VUX01TOgorICAgIC8qCisgICAgICogVGhlIG1heGltdW0gdGltZSB5b3UgYWxsb3cgY3VybCB0byB3YWl0IGZvciBzZXJ2ZXIgY29ubmVjdAorICAgICAqLworICAgIGRhdGEtPnNldC5hY2NlcHR0aW1lb3V0ID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfVVNFUlBXRDoKKyAgICAvKgorICAgICAqIHVzZXI6cGFzc3dvcmQgdG8gdXNlIGluIHRoZSBvcGVyYXRpb24KKyAgICAgKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHRfdXNlcnB3ZCh2YV9hcmcocGFyYW0sIGNoYXIgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPnNldC5zdHJbU1RSSU5HX1VTRVJOQU1FXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+c2V0LnN0cltTVFJJTkdfUEFTU1dPUkRdKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1VTRVJOQU1FOgorICAgIC8qCisgICAgICogYXV0aGVudGljYXRpb24gdXNlciBuYW1lIHRvIHVzZSBpbiB0aGUgb3BlcmF0aW9uCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSTkFNRV0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9QQVNTV09SRDoKKyAgICAvKgorICAgICAqIGF1dGhlbnRpY2F0aW9uIHBhc3N3b3JkIHRvIHVzZSBpbiB0aGUgb3BlcmF0aW9uCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19QQVNTV09SRF0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9QT1NUUVVPVEU6CisgICAgLyoKKyAgICAgKiBMaXN0IG9mIFJBVyBGVFAgY29tbWFuZHMgdG8gdXNlIGFmdGVyIGEgdHJhbnNmZXIKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQucG9zdHF1b3RlID0gdmFfYXJnKHBhcmFtLCBzdHJ1Y3QgY3VybF9zbGlzdCAqKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1BSRVFVT1RFOgorICAgIC8qCisgICAgICogTGlzdCBvZiBSQVcgRlRQIGNvbW1hbmRzIHRvIHVzZSBwcmlvciB0byBSRVRSIChXZXNsZXkgTGF4dG9uKQorICAgICAqLworICAgIGRhdGEtPnNldC5wcmVxdW90ZSA9IHZhX2FyZyhwYXJhbSwgc3RydWN0IGN1cmxfc2xpc3QgKik7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9RVU9URToKKyAgICAvKgorICAgICAqIExpc3Qgb2YgUkFXIEZUUCBjb21tYW5kcyB0byB1c2UgYmVmb3JlIGEgdHJhbnNmZXIKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQucXVvdGUgPSB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX3NsaXN0ICopOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfUkVTT0xWRToKKyAgICAvKgorICAgICAqIExpc3Qgb2YgTkFNRTpbYWRkcmVzc10gbmFtZXMgdG8gcG9wdWxhdGUgdGhlIEROUyBjYWNoZSB3aXRoCisgICAgICogUHJlZml4IHRoZSBOQU1FIHdpdGggZGFzaCAoLSkgdG8gX3JlbW92ZV8gdGhlIG5hbWUgZnJvbSB0aGUgY2FjaGUuCisgICAgICoKKyAgICAgKiBOYW1lcyBhZGRlZCB3aXRoIHRoaXMgQVBJIHdpbGwgcmVtYWluIGluIHRoZSBjYWNoZSB1bnRpbCBleHBsaWNpdGx5CisgICAgICogcmVtb3ZlZCBvciB0aGUgaGFuZGxlIGlzIGNsZWFuZWQgdXAuCisgICAgICoKKyAgICAgKiBUaGlzIEFQSSBjYW4gcmVtb3ZlIGFueSBuYW1lIGZyb20gdGhlIEROUyBjYWNoZSwgYnV0IG9ubHkgZW50cmllcworICAgICAqIHRoYXQgYXJlbid0IGFjdHVhbGx5IGluIHVzZSByaWdodCBub3cgd2lsbCBiZSBwcnVuZWQgaW1tZWRpYXRlbHkuCisgICAgICovCisgICAgZGF0YS0+c2V0LnJlc29sdmUgPSB2YV9hcmcocGFyYW0sIHN0cnVjdCBjdXJsX3NsaXN0ICopOworICAgIGRhdGEtPmNoYW5nZS5yZXNvbHZlID0gZGF0YS0+c2V0LnJlc29sdmU7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OOgorICAgIC8qCisgICAgICogUHJvZ3Jlc3MgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuZnByb2dyZXNzID0gdmFfYXJnKHBhcmFtLCBjdXJsX3Byb2dyZXNzX2NhbGxiYWNrKTsKKyAgICBpZihkYXRhLT5zZXQuZnByb2dyZXNzKQorICAgICAgZGF0YS0+cHJvZ3Jlc3MuY2FsbGJhY2sgPSBUUlVFOyAvKiBubyBsb25nZXIgaW50ZXJuYWwgKi8KKyAgICBlbHNlCisgICAgICBkYXRhLT5wcm9ncmVzcy5jYWxsYmFjayA9IEZBTFNFOyAvKiBOVUxMIGVuZm9yY2VzIGludGVybmFsICovCisKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1BST0dSRVNTREFUQToKKyAgICAvKgorICAgICAqIEN1c3RvbSBjbGllbnQgZGF0YSB0byBwYXNzIHRvIHRoZSBwcm9ncmVzcyBjYWxsYmFjaworICAgICAqLworICAgIGRhdGEtPnNldC5wcm9ncmVzc19jbGllbnQgPSB2YV9hcmcocGFyYW0sIHZvaWQgKik7CisgICAgYnJlYWs7CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisgIGNhc2UgQ1VSTE9QVF9QUk9YWVVTRVJQV0Q6CisgICAgLyoKKyAgICAgKiB1c2VyOnBhc3N3b3JkIG5lZWRlZCB0byB1c2UgdGhlIHByb3h5CisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0X3VzZXJwd2QodmFfYXJnKHBhcmFtLCBjaGFyICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWVVTRVJOQU1FXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+c2V0LnN0cltTVFJJTkdfUFJPWFlQQVNTV09SRF0pOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfUFJPWFlVU0VSTkFNRToKKyAgICAvKgorICAgICAqIGF1dGhlbnRpY2F0aW9uIHVzZXIgbmFtZSB0byB1c2UgaW4gdGhlIG9wZXJhdGlvbgorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfUFJPWFlVU0VSTkFNRV0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9QUk9YWVBBU1NXT1JEOgorICAgIC8qCisgICAgICogYXV0aGVudGljYXRpb24gcGFzc3dvcmQgdG8gdXNlIGluIHRoZSBvcGVyYXRpb24KKyAgICAgKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZUEFTU1dPUkRdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfTk9QUk9YWToKKyAgICAvKgorICAgICAqIHByb3h5IGV4Y2VwdGlvbiBsaXN0CisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19OT1BST1hZXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKyNlbmRpZgorCisgIGNhc2UgQ1VSTE9QVF9SQU5HRToKKyAgICAvKgorICAgICAqIFdoYXQgcmFuZ2Ugb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gdHJhbnNmZXIKKyAgICAgKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1NFVF9SQU5HRV0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9SRVNVTUVfRlJPTToKKyAgICAvKgorICAgICAqIFJlc3VtZSB0cmFuc2ZlciBhdCB0aGUgZ2l2ZSBmaWxlIHBvc2l0aW9uCisgICAgICovCisgICAgZGF0YS0+c2V0LnNldF9yZXN1bWVfZnJvbSA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9SRVNVTUVfRlJPTV9MQVJHRToKKyAgICAvKgorICAgICAqIFJlc3VtZSB0cmFuc2ZlciBhdCB0aGUgZ2l2ZSBmaWxlIHBvc2l0aW9uCisgICAgICovCisgICAgZGF0YS0+c2V0LnNldF9yZXN1bWVfZnJvbSA9IHZhX2FyZyhwYXJhbSwgY3VybF9vZmZfdCk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OOgorICAgIC8qCisgICAgICogc3RkZXJyIHdyaXRlIGNhbGxiYWNrLgorICAgICAqLworICAgIGRhdGEtPnNldC5mZGVidWcgPSB2YV9hcmcocGFyYW0sIGN1cmxfZGVidWdfY2FsbGJhY2spOworICAgIC8qCisgICAgICogaWYgdGhlIGNhbGxiYWNrIHByb3ZpZGVkIGlzIE5VTEwsIGl0J2xsIHVzZSB0aGUgZGVmYXVsdCBjYWxsYmFjaworICAgICAqLworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfREVCVUdEQVRBOgorICAgIC8qCisgICAgICogU2V0IHRvIGEgdm9pZCAqIHRoYXQgc2hvdWxkIHJlY2VpdmUgYWxsIGVycm9yIHdyaXRlcy4gVGhpcworICAgICAqIGRlZmF1bHRzIHRvIENVUkxPUFRfU1RERVJSIGZvciBub3JtYWwgb3BlcmF0aW9ucy4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuZGVidWdkYXRhID0gdmFfYXJnKHBhcmFtLCB2b2lkICopOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfU1RERVJSOgorICAgIC8qCisgICAgICogU2V0IHRvIGEgRklMRSAqIHRoYXQgc2hvdWxkIHJlY2VpdmUgYWxsIGVycm9yIHdyaXRlcy4gVGhpcworICAgICAqIGRlZmF1bHRzIHRvIHN0ZGVyciBmb3Igbm9ybWFsIG9wZXJhdGlvbnMuCisgICAgICovCisgICAgZGF0YS0+c2V0LmVyciA9IHZhX2FyZyhwYXJhbSwgRklMRSAqKTsKKyAgICBpZighZGF0YS0+c2V0LmVycikKKyAgICAgIGRhdGEtPnNldC5lcnIgPSBzdGRlcnI7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9IRUFERVJGVU5DVElPTjoKKyAgICAvKgorICAgICAqIFNldCBoZWFkZXIgd3JpdGUgY2FsbGJhY2sKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuZndyaXRlX2hlYWRlciA9IHZhX2FyZyhwYXJhbSwgY3VybF93cml0ZV9jYWxsYmFjayk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9XUklURUZVTkNUSU9OOgorICAgIC8qCisgICAgICogU2V0IGRhdGEgd3JpdGUgY2FsbGJhY2sKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuZndyaXRlX2Z1bmMgPSB2YV9hcmcocGFyYW0sIGN1cmxfd3JpdGVfY2FsbGJhY2spOworICAgIGlmKCFkYXRhLT5zZXQuZndyaXRlX2Z1bmMpIHsKKyAgICAgIGRhdGEtPnNldC5pc19md3JpdGVfc2V0ID0gMDsKKyAgICAgIC8qIFdoZW4gc2V0IHRvIE5VTEwsIHJlc2V0IHRvIG91ciBpbnRlcm5hbCBkZWZhdWx0IGZ1bmN0aW9uICovCisgICAgICBkYXRhLT5zZXQuZndyaXRlX2Z1bmMgPSAoY3VybF93cml0ZV9jYWxsYmFjaylmd3JpdGU7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGRhdGEtPnNldC5pc19md3JpdGVfc2V0ID0gMTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1JFQURGVU5DVElPTjoKKyAgICAvKgorICAgICAqIFJlYWQgZGF0YSBjYWxsYmFjaworICAgICAqLworICAgIGRhdGEtPnNldC5mcmVhZF9mdW5jID0gdmFfYXJnKHBhcmFtLCBjdXJsX3JlYWRfY2FsbGJhY2spOworICAgIGlmKCFkYXRhLT5zZXQuZnJlYWRfZnVuYykgeworICAgICAgZGF0YS0+c2V0LmlzX2ZyZWFkX3NldCA9IDA7CisgICAgICAvKiBXaGVuIHNldCB0byBOVUxMLCByZXNldCB0byBvdXIgaW50ZXJuYWwgZGVmYXVsdCBmdW5jdGlvbiAqLworICAgICAgZGF0YS0+c2V0LmZyZWFkX2Z1bmMgPSAoY3VybF9yZWFkX2NhbGxiYWNrKWZyZWFkOworICAgIH0KKyAgICBlbHNlCisgICAgICBkYXRhLT5zZXQuaXNfZnJlYWRfc2V0ID0gMTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1NFRUtGVU5DVElPTjoKKyAgICAvKgorICAgICAqIFNlZWsgY2FsbGJhY2suIE1pZ2h0IGJlIE5VTEwuCisgICAgICovCisgICAgZGF0YS0+c2V0LnNlZWtfZnVuYyA9IHZhX2FyZyhwYXJhbSwgY3VybF9zZWVrX2NhbGxiYWNrKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1NFRUtEQVRBOgorICAgIC8qCisgICAgICogU2VlayBjb250cm9sIGNhbGxiYWNrLiBNaWdodCBiZSBOVUxMLgorICAgICAqLworICAgIGRhdGEtPnNldC5zZWVrX2NsaWVudCA9IHZhX2FyZyhwYXJhbSwgdm9pZCAqKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0NPTlZfRlJPTV9ORVRXT1JLX0ZVTkNUSU9OOgorICAgIC8qCisgICAgICogIkNvbnZlcnQgZnJvbSBuZXR3b3JrIGVuY29kaW5nIiBjYWxsYmFjaworICAgICAqLworICAgIGRhdGEtPnNldC5jb252ZnJvbW5ldHdvcmsgPSB2YV9hcmcocGFyYW0sIGN1cmxfY29udl9jYWxsYmFjayk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9DT05WX1RPX05FVFdPUktfRlVOQ1RJT046CisgICAgLyoKKyAgICAgKiAiQ29udmVydCB0byBuZXR3b3JrIGVuY29kaW5nIiBjYWxsYmFjaworICAgICAqLworICAgIGRhdGEtPnNldC5jb252dG9uZXR3b3JrID0gdmFfYXJnKHBhcmFtLCBjdXJsX2NvbnZfY2FsbGJhY2spOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfQ09OVl9GUk9NX1VURjhfRlVOQ1RJT046CisgICAgLyoKKyAgICAgKiAiQ29udmVydCBmcm9tIFVURi04IGVuY29kaW5nIiBjYWxsYmFjaworICAgICAqLworICAgIGRhdGEtPnNldC5jb252ZnJvbXV0ZjggPSB2YV9hcmcocGFyYW0sIGN1cmxfY29udl9jYWxsYmFjayk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OOgorICAgIC8qCisgICAgICogSS9PIGNvbnRyb2wgY2FsbGJhY2suIE1pZ2h0IGJlIE5VTEwuCisgICAgICovCisgICAgZGF0YS0+c2V0LmlvY3RsX2Z1bmMgPSB2YV9hcmcocGFyYW0sIGN1cmxfaW9jdGxfY2FsbGJhY2spOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfSU9DVExEQVRBOgorICAgIC8qCisgICAgICogSS9PIGNvbnRyb2wgZGF0YSBwb2ludGVyLiBNaWdodCBiZSBOVUxMLgorICAgICAqLworICAgIGRhdGEtPnNldC5pb2N0bF9jbGllbnQgPSB2YV9hcmcocGFyYW0sIHZvaWQgKik7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9TU0xDRVJUOgorICAgIC8qCisgICAgICogU3RyaW5nIHRoYXQgaG9sZHMgZmlsZSBuYW1lIG9mIHRoZSBTU0wgY2VydGlmaWNhdGUgdG8gdXNlCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1NTTENFUlRUWVBFOgorICAgIC8qCisgICAgICogU3RyaW5nIHRoYXQgaG9sZHMgZmlsZSB0eXBlIG9mIHRoZSBTU0wgY2VydGlmaWNhdGUgdG8gdXNlCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1RZUEVdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfU1NMS0VZOgorICAgIC8qCisgICAgICogU3RyaW5nIHRoYXQgaG9sZHMgZmlsZSBuYW1lIG9mIHRoZSBTU0wga2V5IHRvIHVzZQorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1NTTEtFWVRZUEU6CisgICAgLyoKKyAgICAgKiBTdHJpbmcgdGhhdCBob2xkcyBmaWxlIHR5cGUgb2YgdGhlIFNTTCBrZXkgdG8gdXNlCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfVFlQRV0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9LRVlQQVNTV0Q6CisgICAgLyoKKyAgICAgKiBTdHJpbmcgdGhhdCBob2xkcyB0aGUgU1NMIG9yIFNTSCBwcml2YXRlIGtleSBwYXNzd29yZC4KKyAgICAgKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9QQVNTV0RdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfU1NMRU5HSU5FOgorICAgIC8qCisgICAgICogU3RyaW5nIHRoYXQgaG9sZHMgdGhlIFNTTCBjcnlwdG8gZW5naW5lLgorICAgICAqLworICAgIGFyZ3B0ciA9IHZhX2FyZyhwYXJhbSwgY2hhciAqKTsKKyAgICBpZihhcmdwdHIgJiYgYXJncHRyWzBdKQorICAgICAgcmVzdWx0ID0gQ3VybF9zc2xfc2V0X2VuZ2luZShkYXRhLCBhcmdwdHIpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9TU0xFTkdJTkVfREVGQVVMVDoKKyAgICAvKgorICAgICAqIGZsYWcgdG8gc2V0IGVuZ2luZSBhcyBkZWZhdWx0LgorICAgICAqLworICAgIHJlc3VsdCA9IEN1cmxfc3NsX3NldF9lbmdpbmVfZGVmYXVsdChkYXRhKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0NSTEY6CisgICAgLyoKKyAgICAgKiBLbHVkZ3kgb3B0aW9uIHRvIGVuYWJsZSBDUkxGIGNvbnZlcnNpb25zLiBTdWJqZWN0IGZvciByZW1vdmFsLgorICAgICAqLworICAgIGRhdGEtPnNldC5jcmxmID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSk/VFJVRTpGQUxTRTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfSU5URVJGQUNFOgorICAgIC8qCisgICAgICogU2V0IHdoYXQgaW50ZXJmYWNlIG9yIGFkZHJlc3MvaG9zdG5hbWUgdG8gYmluZCB0aGUgc29ja2V0IHRvIHdoZW4KKyAgICAgKiBwZXJmb3JtaW5nIGFuIG9wZXJhdGlvbiBhbmQgdGh1cyB3aGF0IGZyb20tSVAgeW91ciBjb25uZWN0aW9uIHdpbGwgdXNlLgorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfREVWSUNFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0xPQ0FMUE9SVDoKKyAgICAvKgorICAgICAqIFNldCB3aGF0IGxvY2FsIHBvcnQgdG8gYmluZCB0aGUgc29ja2V0IHRvIHdoZW4gcGVyZm9ybWluZyBhbiBvcGVyYXRpb24uCisgICAgICovCisgICAgZGF0YS0+c2V0LmxvY2FscG9ydCA9IGN1cmx4X3NsdG91cyh2YV9hcmcocGFyYW0sIGxvbmcpKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0xPQ0FMUE9SVFJBTkdFOgorICAgIC8qCisgICAgICogU2V0IG51bWJlciBvZiBsb2NhbCBwb3J0cyB0byB0cnksIHN0YXJ0aW5nIHdpdGggQ1VSTE9QVF9MT0NBTFBPUlQuCisgICAgICovCisgICAgZGF0YS0+c2V0LmxvY2FscG9ydHJhbmdlID0gY3VybHhfc2x0b3NpKHZhX2FyZyhwYXJhbSwgbG9uZykpOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfS1JCTEVWRUw6CisgICAgLyoKKyAgICAgKiBBIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIGtlcmJlcm9zIHNlY3VyaXR5IGxldmVsLgorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfS1JCX0xFVkVMXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBkYXRhLT5zZXQua3JiID0gKE5VTEwgIT0gZGF0YS0+c2V0LnN0cltTVFJJTkdfS1JCX0xFVkVMXSk/VFJVRTpGQUxTRTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0dTU0FQSV9ERUxFR0FUSU9OOgorICAgIC8qCisgICAgICogR1NTQVBJIGNyZWRlbnRpYWwgZGVsZWdhdGlvbgorICAgICAqLworICAgIGRhdGEtPnNldC5nc3NhcGlfZGVsZWdhdGlvbiA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUjoKKyAgICAvKgorICAgICAqIEVuYWJsZSBwZWVyIFNTTCB2ZXJpZnlpbmcuCisgICAgICovCisgICAgZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1NTTF9WRVJJRllIT1NUOgorICAgIC8qCisgICAgICogRW5hYmxlIHZlcmlmaWNhdGlvbiBvZiB0aGUgQ04gY29udGFpbmVkIGluIHRoZSBwZWVyIGNlcnRpZmljYXRlCisgICAgICovCisgICAgZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0ID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKyNpZmRlZiBVU0VfU1NMRUFZCisgICAgLyogc2luY2UgdGhlc2UgdHdvIG9wdGlvbnMgYXJlIG9ubHkgcG9zc2libGUgdG8gdXNlIG9uIGFuIE9wZW5TU0wtCisgICAgICAgcG93ZXJlZCBsaWJjdXJsIHdlICNpZmRlZiB0aGVtIG9uIHRoaXMgY29uZGl0aW9uIHNvIHRoYXQgbGliY3VybHMKKyAgICAgICBidWlsdCBhZ2FpbnN0IG90aGVyIFNTTCBsaWJzIHdpbGwgcmV0dXJuIGEgcHJvcGVyIGVycm9yIHdoZW4gdHJ5aW5nCisgICAgICAgdG8gc2V0IHRoaXMgb3B0aW9uISAqLworICBjYXNlIENVUkxPUFRfU1NMX0NUWF9GVU5DVElPTjoKKyAgICAvKgorICAgICAqIFNldCBhIFNTTF9DVFggY2FsbGJhY2sKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuc3NsLmZzc2xjdHggPSB2YV9hcmcocGFyYW0sIGN1cmxfc3NsX2N0eF9jYWxsYmFjayk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9TU0xfQ1RYX0RBVEE6CisgICAgLyoKKyAgICAgKiBTZXQgYSBTU0xfQ1RYIGNhbGxiYWNrIHBhcmFtZXRlciBwb2ludGVyCisgICAgICovCisgICAgZGF0YS0+c2V0LnNzbC5mc3NsY3R4cCA9IHZhX2FyZyhwYXJhbSwgdm9pZCAqKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0NFUlRJTkZPOgorICAgIGRhdGEtPnNldC5zc2wuY2VydGluZm8gPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOworICAgIGJyZWFrOworI2VuZGlmCisgIGNhc2UgQ1VSTE9QVF9DQUlORk86CisgICAgLyoKKyAgICAgKiBTZXQgQ0EgaW5mbyBmb3IgU1NMIGNvbm5lY3Rpb24uIFNwZWNpZnkgZmlsZSBuYW1lIG9mIHRoZSBDQSBjZXJ0aWZpY2F0ZQorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9DQVBBVEg6CisgICAgLyoKKyAgICAgKiBTZXQgQ0EgcGF0aCBpbmZvIGZvciBTU0wgY29ubmVjdGlvbi4gU3BlY2lmeSBkaXJlY3RvcnkgbmFtZSBvZiB0aGUgQ0EKKyAgICAgKiBjZXJ0aWZpY2F0ZXMgd2hpY2ggaGF2ZSBiZWVuIHByZXBhcmVkIHVzaW5nIG9wZW5zc2wgY19yZWhhc2ggdXRpbGl0eS4KKyAgICAgKi8KKyAgICAvKiBUaGlzIGRvZXMgbm90IHdvcmsgb24gd2luZG93cy4gKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfQ1JMRklMRToKKyAgICAvKgorICAgICAqIFNldCBDUkwgZmlsZSBpbmZvIGZvciBTU0wgY29ubmVjdGlvbi4gU3BlY2lmeSBmaWxlIG5hbWUgb2YgdGhlIENSTAorICAgICAqIHRvIGNoZWNrIGNlcnRpZmljYXRlcyByZXZvY2F0aW9uCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9JU1NVRVJDRVJUOgorICAgIC8qCisgICAgICogU2V0IElzc3VlciBjZXJ0aWZpY2F0ZSBmaWxlCisgICAgICogdG8gY2hlY2sgY2VydGlmaWNhdGVzIGlzc3VlcgorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfVEVMTkVUT1BUSU9OUzoKKyAgICAvKgorICAgICAqIFNldCBhIGxpbmtlZCBsaXN0IG9mIHRlbG5ldCBvcHRpb25zCisgICAgICovCisgICAgZGF0YS0+c2V0LnRlbG5ldF9vcHRpb25zID0gdmFfYXJnKHBhcmFtLCBzdHJ1Y3QgY3VybF9zbGlzdCAqKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfQlVGRkVSU0laRToKKyAgICAvKgorICAgICAqIFRoZSBhcHBsaWNhdGlvbiBraW5kbHkgYXNrcyBmb3IgYSBkaWZmZXJlbnRseSBzaXplZCByZWNlaXZlIGJ1ZmZlci4KKyAgICAgKiBJZiBpdCBzZWVtcyByZWFzb25hYmxlLCB3ZSdsbCB1c2UgaXQuCisgICAgICovCisgICAgZGF0YS0+c2V0LmJ1ZmZlcl9zaXplID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKworICAgIGlmKChkYXRhLT5zZXQuYnVmZmVyX3NpemU+IChCVUZTSVpFIC0xICkpIHx8CisgICAgICAgKGRhdGEtPnNldC5idWZmZXJfc2l6ZSA8IDEpKQorICAgICAgZGF0YS0+c2V0LmJ1ZmZlcl9zaXplID0gMDsgLyogaHVnZSBpbnRlcm5hbCBkZWZhdWx0ICovCisKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfTk9TSUdOQUw6CisgICAgLyoKKyAgICAgKiBUaGUgYXBwbGljYXRpb24gYXNrcyBub3QgdG8gc2V0IGFueSBzaWduYWwoKSBvciBhbGFybSgpIGhhbmRsZXJzLAorICAgICAqIGV2ZW4gd2hlbiB1c2luZyBhIHRpbWVvdXQuCisgICAgICovCisgICAgZGF0YS0+c2V0Lm5vX3NpZ25hbCA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpP1RSVUU6RkFMU0U7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1NIQVJFOgorICB7CisgICAgc3RydWN0IEN1cmxfc2hhcmUgKnNldDsKKyAgICBzZXQgPSB2YV9hcmcocGFyYW0sIHN0cnVjdCBDdXJsX3NoYXJlICopOworCisgICAgLyogZGlzY29ubmVjdCBmcm9tIG9sZCBzaGFyZSwgaWYgYW55ICovCisgICAgaWYoZGF0YS0+c2hhcmUpIHsKKyAgICAgIEN1cmxfc2hhcmVfbG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9TSEFSRSwgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUpOworCisgICAgICBpZihkYXRhLT5kbnMuaG9zdGNhY2hldHlwZSA9PSBIQ0FDSEVfU0hBUkVEKSB7CisgICAgICAgIGRhdGEtPmRucy5ob3N0Y2FjaGUgPSBOVUxMOworICAgICAgICBkYXRhLT5kbnMuaG9zdGNhY2hldHlwZSA9IEhDQUNIRV9OT05FOworICAgICAgfQorCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9DT09LSUVTKQorICAgICAgaWYoZGF0YS0+c2hhcmUtPmNvb2tpZXMgPT0gZGF0YS0+Y29va2llcykKKyAgICAgICAgZGF0YS0+Y29va2llcyA9IE5VTEw7CisjZW5kaWYKKworICAgICAgaWYoZGF0YS0+c2hhcmUtPnNzbHNlc3Npb24gPT0gZGF0YS0+c3RhdGUuc2Vzc2lvbikKKyAgICAgICAgZGF0YS0+c3RhdGUuc2Vzc2lvbiA9IE5VTEw7CisKKyAgICAgIGRhdGEtPnNoYXJlLT5kaXJ0eS0tOworCisgICAgICBDdXJsX3NoYXJlX3VubG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9TSEFSRSk7CisgICAgICBkYXRhLT5zaGFyZSA9IE5VTEw7CisgICAgfQorCisgICAgLyogdXNlIG5ldyBzaGFyZSBpZiBpdCBzZXQgKi8KKyAgICBkYXRhLT5zaGFyZSA9IHNldDsKKyAgICBpZihkYXRhLT5zaGFyZSkgeworCisgICAgICBDdXJsX3NoYXJlX2xvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfU0hBUkUsIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKTsKKworICAgICAgZGF0YS0+c2hhcmUtPmRpcnR5Kys7CisKKyAgICAgIGlmKGRhdGEtPnNoYXJlLT5ob3N0Y2FjaGUpIHsKKyAgICAgICAgLyogdXNlIHNoYXJlZCBob3N0IGNhY2hlLCBmaXJzdCBmcmVlIHRoZSBwcml2YXRlIG9uZSBpZiBhbnkgKi8KKyAgICAgICAgaWYoZGF0YS0+ZG5zLmhvc3RjYWNoZXR5cGUgPT0gSENBQ0hFX1BSSVZBVEUpCisgICAgICAgICAgQ3VybF9ob3N0Y2FjaGVfZGVzdHJveShkYXRhKTsKKworICAgICAgICBkYXRhLT5kbnMuaG9zdGNhY2hlID0gZGF0YS0+c2hhcmUtPmhvc3RjYWNoZTsKKyAgICAgICAgZGF0YS0+ZG5zLmhvc3RjYWNoZXR5cGUgPSBIQ0FDSEVfU0hBUkVEOworICAgICAgfQorI2lmICFkZWZpbmVkKENVUkxfRElTQUJMRV9IVFRQKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ09PS0lFUykKKyAgICAgIGlmKGRhdGEtPnNoYXJlLT5jb29raWVzKSB7CisgICAgICAgIC8qIHVzZSBzaGFyZWQgY29va2llIGxpc3QsIGZpcnN0IGZyZWUgb3duIG9uZSBpZiBhbnkgKi8KKyAgICAgICAgaWYoZGF0YS0+Y29va2llcykKKyAgICAgICAgICBDdXJsX2Nvb2tpZV9jbGVhbnVwKGRhdGEtPmNvb2tpZXMpOworICAgICAgICAvKiBlbmFibGUgY29va2llcyBzaW5jZSB3ZSBub3cgdXNlIGEgc2hhcmUgdGhhdCB1c2VzIGNvb2tpZXMhICovCisgICAgICAgIGRhdGEtPmNvb2tpZXMgPSBkYXRhLT5zaGFyZS0+Y29va2llczsKKyAgICAgIH0KKyNlbmRpZiAgIC8qIENVUkxfRElTQUJMRV9IVFRQICovCisgICAgICBpZihkYXRhLT5zaGFyZS0+c3Nsc2Vzc2lvbikgeworICAgICAgICBkYXRhLT5zZXQuc3NsLm1heF9zc2xfc2Vzc2lvbnMgPSBkYXRhLT5zaGFyZS0+bWF4X3NzbF9zZXNzaW9uczsKKyAgICAgICAgZGF0YS0+c3RhdGUuc2Vzc2lvbiA9IGRhdGEtPnNoYXJlLT5zc2xzZXNzaW9uOworICAgICAgfQorICAgICAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfU0hBUkUpOworCisgICAgfQorICAgIC8qIGNoZWNrIGZvciBob3N0IGNhY2hlIG5vdCBuZWVkZWQsCisgICAgICogaXQgd2lsbCBiZSBkb25lIGJ5IGN1cmxfZWFzeV9wZXJmb3JtICovCisgIH0KKyAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1BSSVZBVEU6CisgICAgLyoKKyAgICAgKiBTZXQgcHJpdmF0ZSBkYXRhIHBvaW50ZXIuCisgICAgICovCisgICAgZGF0YS0+c2V0LnByaXZhdGVfZGF0YSA9IHZhX2FyZyhwYXJhbSwgdm9pZCAqKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfTUFYRklMRVNJWkU6CisgICAgLyoKKyAgICAgKiBTZXQgdGhlIG1heGltdW0gc2l6ZSBvZiBhIGZpbGUgdG8gZG93bmxvYWQuCisgICAgICovCisgICAgZGF0YS0+c2V0Lm1heF9maWxlc2l6ZSA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgYnJlYWs7CisKKyNpZmRlZiBVU0VfU1NMCisgIGNhc2UgQ1VSTE9QVF9VU0VfU1NMOgorICAgIC8qCisgICAgICogTWFrZSB0cmFuc2ZlcnMgYXR0ZW1wdCB0byB1c2UgU1NML1RMUy4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQudXNlX3NzbCA9IChjdXJsX3VzZXNzbCl2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9TU0xfT1BUSU9OUzoKKyAgICBhcmcgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGRhdGEtPnNldC5zc2xfZW5hYmxlX2JlYXN0ID0gYXJnJkNVUkxTU0xPUFRfQUxMT1dfQkVBU1Q/VFJVRTpGQUxTRTsKKyAgICBicmVhazsKKworI2VuZGlmCisgIGNhc2UgQ1VSTE9QVF9GVFBTU0xBVVRIOgorICAgIC8qCisgICAgICogU2V0IGEgc3BlY2lmaWMgYXV0aCBmb3IgRlRQLVNTTCB0cmFuc2ZlcnMuCisgICAgICovCisgICAgZGF0YS0+c2V0LmZ0cHNzbGF1dGggPSAoY3VybF9mdHBhdXRoKXZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0lQUkVTT0xWRToKKyAgICBkYXRhLT5zZXQuaXB2ZXIgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9NQVhGSUxFU0laRV9MQVJHRToKKyAgICAvKgorICAgICAqIFNldCB0aGUgbWF4aW11bSBzaXplIG9mIGEgZmlsZSB0byBkb3dubG9hZC4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQubWF4X2ZpbGVzaXplID0gdmFfYXJnKHBhcmFtLCBjdXJsX29mZl90KTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfVENQX05PREVMQVk6CisgICAgLyoKKyAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSBUQ1BfTk9ERUxBWSwgd2hpY2ggd2lsbCBkaXNhYmxlL2VuYWJsZSB0aGUgTmFnbGUKKyAgICAgKiBhbGdvcml0aG0KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQudGNwX25vZGVsYXkgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9GVFBfQUNDT1VOVDoKKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0ZUUF9BQ0NPVU5UXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfSUdOT1JFX0NPTlRFTlRfTEVOR1RIOgorICAgIGRhdGEtPnNldC5pZ25vcmVjbCA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpP1RSVUU6RkFMU0U7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0NPTk5FQ1RfT05MWToKKyAgICAvKgorICAgICAqIE5vIGRhdGEgdHJhbnNmZXIsIHNldCB1cCBjb25uZWN0aW9uIGFuZCBsZXQgYXBwbGljYXRpb24gdXNlIHRoZSBzb2NrZXQKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuY29ubmVjdF9vbmx5ID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSk/VFJVRTpGQUxTRTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfRlRQX0FMVEVSTkFUSVZFX1RPX1VTRVI6CisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19GVFBfQUxURVJOQVRJVkVfVE9fVVNFUl0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1NPQ0tPUFRGVU5DVElPTjoKKyAgICAvKgorICAgICAqIHNvY2tldCBjYWxsYmFjayBmdW5jdGlvbjogY2FsbGVkIGFmdGVyIHNvY2tldCgpIGJ1dCBiZWZvcmUgY29ubmVjdCgpCisgICAgICovCisgICAgZGF0YS0+c2V0LmZzb2Nrb3B0ID0gdmFfYXJnKHBhcmFtLCBjdXJsX3NvY2tvcHRfY2FsbGJhY2spOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9TT0NLT1BUREFUQToKKyAgICAvKgorICAgICAqIHNvY2tldCBjYWxsYmFjayBkYXRhIHBvaW50ZXIuIE1pZ2h0IGJlIE5VTEwuCisgICAgICovCisgICAgZGF0YS0+c2V0LnNvY2tvcHRfY2xpZW50ID0gdmFfYXJnKHBhcmFtLCB2b2lkICopOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9PUEVOU09DS0VURlVOQ1RJT046CisgICAgLyoKKyAgICAgKiBvcGVuL2NyZWF0ZSBzb2NrZXQgY2FsbGJhY2sgZnVuY3Rpb246IGNhbGxlZCBpbnN0ZWFkIG9mIHNvY2tldCgpLAorICAgICAqIGJlZm9yZSBjb25uZWN0KCkKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuZm9wZW5zb2NrZXQgPSB2YV9hcmcocGFyYW0sIGN1cmxfb3BlbnNvY2tldF9jYWxsYmFjayk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX09QRU5TT0NLRVREQVRBOgorICAgIC8qCisgICAgICogc29ja2V0IGNhbGxiYWNrIGRhdGEgcG9pbnRlci4gTWlnaHQgYmUgTlVMTC4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQub3BlbnNvY2tldF9jbGllbnQgPSB2YV9hcmcocGFyYW0sIHZvaWQgKik7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0NMT1NFU09DS0VURlVOQ1RJT046CisgICAgLyoKKyAgICAgKiBjbG9zZSBzb2NrZXQgY2FsbGJhY2sgZnVuY3Rpb246IGNhbGxlZCBpbnN0ZWFkIG9mIGNsb3NlKCkKKyAgICAgKiB3aGVuIHNodXR0aW5nIGRvd24gYSBjb25uZWN0aW9uCisgICAgICovCisgICAgZGF0YS0+c2V0LmZjbG9zZXNvY2tldCA9IHZhX2FyZyhwYXJhbSwgY3VybF9jbG9zZXNvY2tldF9jYWxsYmFjayk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0NMT1NFU09DS0VUREFUQToKKyAgICAvKgorICAgICAqIHNvY2tldCBjYWxsYmFjayBkYXRhIHBvaW50ZXIuIE1pZ2h0IGJlIE5VTEwuCisgICAgICovCisgICAgZGF0YS0+c2V0LmNsb3Nlc29ja2V0X2NsaWVudCA9IHZhX2FyZyhwYXJhbSwgdm9pZCAqKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfU1NMX1NFU1NJT05JRF9DQUNIRToKKyAgICBkYXRhLT5zZXQuc3NsLnNlc3Npb25pZCA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpP1RSVUU6RkFMU0U7CisgICAgYnJlYWs7CisKKyNpZmRlZiBVU0VfTElCU1NIMgorICAgIC8qIHdlIG9ubHkgaW5jbHVkZSBTU0ggb3B0aW9ucyBpZiBleHBsaWNpdGx5IGJ1aWx0IHRvIHN1cHBvcnQgU1NIICovCisgIGNhc2UgQ1VSTE9QVF9TU0hfQVVUSF9UWVBFUzoKKyAgICBkYXRhLT5zZXQuc3NoX2F1dGhfdHlwZXMgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9TU0hfUFVCTElDX0tFWUZJTEU6CisgICAgLyoKKyAgICAgKiBVc2UgdGhpcyBmaWxlIGluc3RlYWQgb2YgdGhlICRIT01FLy5zc2gvaWRfZHNhLnB1YiBmaWxlCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19TU0hfUFVCTElDX0tFWV0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1NTSF9QUklWQVRFX0tFWUZJTEU6CisgICAgLyoKKyAgICAgKiBVc2UgdGhpcyBmaWxlIGluc3RlYWQgb2YgdGhlICRIT01FLy5zc2gvaWRfZHNhIGZpbGUKKyAgICAgKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9QUklWQVRFX0tFWV0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9TU0hfSE9TVF9QVUJMSUNfS0VZX01ENToKKyAgICAvKgorICAgICAqIE9wdGlvbiB0byBhbGxvdyBmb3IgdGhlIE1ENSBvZiB0aGUgaG9zdCBwdWJsaWMga2V5IHRvIGJlIGNoZWNrZWQKKyAgICAgKiBmb3IgdmFsaWRhdGlvbiBwdXJwb3Nlcy4KKyAgICAgKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1XSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKyNpZmRlZiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSQorICBjYXNlIENVUkxPUFRfU1NIX0tOT1dOSE9TVFM6CisgICAgLyoKKyAgICAgKiBTdG9yZSB0aGUgZmlsZSBuYW1lIHRvIHJlYWQga25vd24gaG9zdHMgZnJvbS4KKyAgICAgKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1NTSF9LTk9XTkhPU1RTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfU1NIX0tFWUZVTkNUSU9OOgorICAgIC8qIHNldHRpbmcgdG8gTlVMTCBpcyBmaW5lIHNpbmNlIHRoZSBzc2guYyBmdW5jdGlvbnMgdGhlbXNlbHZlcyB3aWxsCisgICAgICAgdGhlbiByZXZlciB0byB1c2UgdGhlIGludGVybmFsIGRlZmF1bHQgKi8KKyAgICBkYXRhLT5zZXQuc3NoX2tleWZ1bmMgPSB2YV9hcmcocGFyYW0sIGN1cmxfc3Noa2V5Y2FsbGJhY2spOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9TU0hfS0VZREFUQToKKyAgICAvKgorICAgICAqIEN1c3RvbSBjbGllbnQgZGF0YSB0byBwYXNzIHRvIHRoZSBTU0gga2V5ZnVuYyBjYWxsYmFjaworICAgICAqLworICAgIGRhdGEtPnNldC5zc2hfa2V5ZnVuY191c2VycCA9IHZhX2FyZyhwYXJhbSwgdm9pZCAqKTsKKyAgICBicmVhazsKKyNlbmRpZiAvKiBIQVZFX0xJQlNTSDJfS05PV05IT1NUX0FQSSAqLworCisjZW5kaWYgLyogVVNFX0xJQlNTSDIgKi8KKworICBjYXNlIENVUkxPUFRfSFRUUF9UUkFOU0ZFUl9ERUNPRElORzoKKyAgICAvKgorICAgICAqIGRpc2FibGUgbGliY3VybCB0cmFuc2ZlciBlbmNvZGluZyBpcyB1c2VkCisgICAgICovCisgICAgZGF0YS0+c2V0Lmh0dHBfdGVfc2tpcCA9ICgwID09IHZhX2FyZyhwYXJhbSwgbG9uZykpP1RSVUU6RkFMU0U7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0hUVFBfQ09OVEVOVF9ERUNPRElORzoKKyAgICAvKgorICAgICAqIHJhdyBkYXRhIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gd2hlbiBjb250ZW50IGVuY29kaW5nIGlzIHVzZWQKKyAgICAgKi8KKyAgICBkYXRhLT5zZXQuaHR0cF9jZV9za2lwID0gKDAgPT0gdmFfYXJnKHBhcmFtLCBsb25nKSk/VFJVRTpGQUxTRTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfTkVXX0ZJTEVfUEVSTVM6CisgICAgLyoKKyAgICAgKiBVc2VzIHRoZXNlIHBlcm1pc3Npb25zIGluc3RlYWQgb2YgMDY0NAorICAgICAqLworICAgIGRhdGEtPnNldC5uZXdfZmlsZV9wZXJtcyA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX05FV19ESVJFQ1RPUllfUEVSTVM6CisgICAgLyoKKyAgICAgKiBVc2VzIHRoZXNlIHBlcm1pc3Npb25zIGluc3RlYWQgb2YgMDc1NQorICAgICAqLworICAgIGRhdGEtPnNldC5uZXdfZGlyZWN0b3J5X3Blcm1zID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfQUREUkVTU19TQ09QRToKKyAgICAvKgorICAgICAqIFdlIGFsd2F5cyBnZXQgbG9uZ3Mgd2hlbiBwYXNzZWQgcGxhaW4gbnVtZXJpY2FscywgYnV0IGZvciB0aGlzIHZhbHVlIHdlCisgICAgICoga25vdyB0aGF0IGFuIHVuc2lnbmVkIGludCB3aWxsIGFsd2F5cyBob2xkIHRoZSB2YWx1ZSBzbyB3ZSBibGluZGx5CisgICAgICogdHlwZWNhc3QgdG8gdGhpcyB0eXBlCisgICAgICovCisgICAgZGF0YS0+c2V0LnNjb3BlID0gY3VybHhfc2x0b3VpKHZhX2FyZyhwYXJhbSwgbG9uZykpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9QUk9UT0NPTFM6CisgICAgLyogc2V0IHRoZSBiaXRtYXNrIGZvciB0aGUgcHJvdG9jb2xzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBmb3IgdGhlCisgICAgICAgdHJhbnNmZXIsIHdoaWNoIHRodXMgaGVscHMgdGhlIGFwcCB3aGljaCB0YWtlcyBVUkxzIGZyb20gdXNlcnMgb3Igb3RoZXIKKyAgICAgICBleHRlcm5hbCBpbnB1dHMgYW5kIHdhbnQgdG8gcmVzdHJpY3Qgd2hhdCBwcm90b2NvbChzKSB0byBkZWFsCisgICAgICAgd2l0aC4gRGVmYXVsdHMgdG8gQ1VSTFBST1RPX0FMTC4gKi8KKyAgICBkYXRhLT5zZXQuYWxsb3dlZF9wcm90b2NvbHMgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFM6CisgICAgLyogc2V0IHRoZSBiaXRtYXNrIGZvciB0aGUgcHJvdG9jb2xzIHRoYXQgbGliY3VybCBpcyBhbGxvd2VkIHRvIGZvbGxvdyB0bywKKyAgICAgICBhcyBhIHN1YnNldCBvZiB0aGUgQ1VSTE9QVF9QUk9UT0NPTFMgb25lcy4gVGhhdCBtZWFucyB0aGUgcHJvdG9jb2wgbmVlZHMKKyAgICAgICB0byBiZSBzZXQgaW4gYm90aCBiaXRtYXNrcyB0byBiZSBhbGxvd2VkIHRvIGdldCByZWRpcmVjdGVkIHRvLiBEZWZhdWx0cworICAgICAgIHRvIGFsbCBwcm90b2NvbHMgZXhjZXB0IEZJTEUgYW5kIFNDUC4gKi8KKyAgICBkYXRhLT5zZXQucmVkaXJfcHJvdG9jb2xzID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfTUFJTF9GUk9NOgorICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfTUFJTF9GUk9NXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfTUFJTF9BVVRIOgorICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfTUFJTF9BVVRIXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfTUFJTF9SQ1BUOgorICAgIC8qIGdldCBhIGxpc3Qgb2YgbWFpbCByZWNpcGllbnRzICovCisgICAgZGF0YS0+c2V0Lm1haWxfcmNwdCA9IHZhX2FyZyhwYXJhbSwgc3RydWN0IGN1cmxfc2xpc3QgKik7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1JUU1BfUkVRVUVTVDoKKyAgICB7CisgICAgICAvKgorICAgICAgICogU2V0IHRoZSBSVFNQIHJlcXVlc3QgbWV0aG9kIChPUFRJT05TLCBTRVRVUCwgUExBWSwgZXRjLi4uKQorICAgICAgICogV291bGQgdGhpcyBiZSBiZXR0ZXIgaWYgdGhlIFJUU1BSRVFfKiB3ZXJlIGp1c3QgbW92ZWQgaW50byBoZXJlPworICAgICAgICovCisgICAgICBsb25nIGN1cmxfcnRzcHJlcSA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgICBDdXJsX1J0c3BSZXEgcnRzcHJlcSA9IFJUU1BSRVFfTk9ORTsKKyAgICAgIHN3aXRjaChjdXJsX3J0c3ByZXEpIHsKKyAgICAgICAgY2FzZSBDVVJMX1JUU1BSRVFfT1BUSU9OUzoKKyAgICAgICAgICBydHNwcmVxID0gUlRTUFJFUV9PUFRJT05TOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ1VSTF9SVFNQUkVRX0RFU0NSSUJFOgorICAgICAgICAgIHJ0c3ByZXEgPSBSVFNQUkVRX0RFU0NSSUJFOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ1VSTF9SVFNQUkVRX0FOTk9VTkNFOgorICAgICAgICAgIHJ0c3ByZXEgPSBSVFNQUkVRX0FOTk9VTkNFOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ1VSTF9SVFNQUkVRX1NFVFVQOgorICAgICAgICAgIHJ0c3ByZXEgPSBSVFNQUkVRX1NFVFVQOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ1VSTF9SVFNQUkVRX1BMQVk6CisgICAgICAgICAgcnRzcHJlcSA9IFJUU1BSRVFfUExBWTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENVUkxfUlRTUFJFUV9QQVVTRToKKyAgICAgICAgICBydHNwcmVxID0gUlRTUFJFUV9QQVVTRTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENVUkxfUlRTUFJFUV9URUFSRE9XTjoKKyAgICAgICAgICBydHNwcmVxID0gUlRTUFJFUV9URUFSRE9XTjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENVUkxfUlRTUFJFUV9HRVRfUEFSQU1FVEVSOgorICAgICAgICAgIHJ0c3ByZXEgPSBSVFNQUkVRX0dFVF9QQVJBTUVURVI7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDVVJMX1JUU1BSRVFfU0VUX1BBUkFNRVRFUjoKKyAgICAgICAgICBydHNwcmVxID0gUlRTUFJFUV9TRVRfUEFSQU1FVEVSOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ1VSTF9SVFNQUkVRX1JFQ09SRDoKKyAgICAgICAgICBydHNwcmVxID0gUlRTUFJFUV9SRUNPUkQ7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDVVJMX1JUU1BSRVFfUkVDRUlWRToKKyAgICAgICAgICBydHNwcmVxID0gUlRTUFJFUV9SRUNFSVZFOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJ0c3ByZXEgPSBSVFNQUkVRX05PTkU7CisgICAgICB9CisKKyAgICAgIGRhdGEtPnNldC5ydHNwcmVxID0gcnRzcHJlcTsKKyAgICBicmVhazsKKyAgICB9CisKKworICBjYXNlIENVUkxPUFRfUlRTUF9TRVNTSU9OX0lEOgorICAgIC8qCisgICAgICogU2V0IHRoZSBSVFNQIFNlc3Npb24gSUQgbWFudWFsbHkuIFVzZWZ1bCBpZiB0aGUgYXBwbGljYXRpb24gaXMKKyAgICAgKiByZXN1bWluZyBhIHByZXZpb3VzbHkgZXN0YWJsaXNoZWQgUlRTUCBzZXNzaW9uCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19SVFNQX1NFU1NJT05fSURdLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9SVFNQX1NUUkVBTV9VUkk6CisgICAgLyoKKyAgICAgKiBTZXQgdGhlIFN0cmVhbSBVUkkgZm9yIHRoZSBSVFNQIHJlcXVlc3QuIFVubGVzcyB0aGUgcmVxdWVzdCBpcworICAgICAqIGZvciBnZW5lcmljIHNlcnZlciBvcHRpb25zLCB0aGUgYXBwbGljYXRpb24gd2lsbCBuZWVkIHRvIHNldCB0aGlzLgorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfUlRTUF9TVFJFQU1fVVJJXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfUlRTUF9UUkFOU1BPUlQ6CisgICAgLyoKKyAgICAgKiBUaGUgY29udGVudCBvZiB0aGUgVHJhbnNwb3J0OiBoZWFkZXIgZm9yIHRoZSBSVFNQIHJlcXVlc3QKKyAgICAgKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1JUU1BfVFJBTlNQT1JUXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfUlRTUF9DTElFTlRfQ1NFUToKKyAgICAvKgorICAgICAqIFNldCB0aGUgQ1NFUSBudW1iZXIgdG8gaXNzdWUgZm9yIHRoZSBuZXh0IFJUU1AgcmVxdWVzdC4gVXNlZnVsIGlmIHRoZQorICAgICAqIGFwcGxpY2F0aW9uIGlzIHJlc3VtaW5nIGEgcHJldmlvdXNseSBicm9rZW4gY29ubmVjdGlvbi4gVGhlIENTRVEKKyAgICAgKiB3aWxsIGluY3JlbWVudCBmcm9tIHRoaXMgbmV3IG51bWJlciBoZW5jZWZvcnRoLgorICAgICAqLworICAgIGRhdGEtPnN0YXRlLnJ0c3BfbmV4dF9jbGllbnRfQ1NlcSA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1JUU1BfU0VSVkVSX0NTRVE6CisgICAgLyogU2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBmb3Igc2VydmVyLWluaXRpYXRlZCByZXF1ZXN0cyAqLworICAgIGRhdGEtPnN0YXRlLnJ0c3BfbmV4dF9jbGllbnRfQ1NlcSA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0lOVEVSTEVBVkVEQVRBOgorICAgIGRhdGEtPnNldC5ydHBfb3V0ID0gdmFfYXJnKHBhcmFtLCB2b2lkICopOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfSU5URVJMRUFWRUZVTkNUSU9OOgorICAgIC8qIFNldCB0aGUgdXNlciBkZWZpbmVkIFJUUCB3cml0ZSBmdW5jdGlvbiAqLworICAgIGRhdGEtPnNldC5md3JpdGVfcnRwID0gdmFfYXJnKHBhcmFtLCBjdXJsX3dyaXRlX2NhbGxiYWNrKTsKKyAgICBicmVhazsKKworICBjYXNlIENVUkxPUFRfV0lMRENBUkRNQVRDSDoKKyAgICBkYXRhLT5zZXQud2lsZGNhcmRtYXRjaCA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpP1RSVUU6RkFMU0U7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9DSFVOS19CR05fRlVOQ1RJT046CisgICAgZGF0YS0+c2V0LmNodW5rX2JnbiA9IHZhX2FyZyhwYXJhbSwgY3VybF9jaHVua19iZ25fY2FsbGJhY2spOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfQ0hVTktfRU5EX0ZVTkNUSU9OOgorICAgIGRhdGEtPnNldC5jaHVua19lbmQgPSB2YV9hcmcocGFyYW0sIGN1cmxfY2h1bmtfZW5kX2NhbGxiYWNrKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0ZOTUFUQ0hfRlVOQ1RJT046CisgICAgZGF0YS0+c2V0LmZubWF0Y2ggPSB2YV9hcmcocGFyYW0sIGN1cmxfZm5tYXRjaF9jYWxsYmFjayk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9DSFVOS19EQVRBOgorICAgIGRhdGEtPndpbGRjYXJkLmN1c3RvbXB0ciA9IHZhX2FyZyhwYXJhbSwgdm9pZCAqKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0ZOTUFUQ0hfREFUQToKKyAgICBkYXRhLT5zZXQuZm5tYXRjaF9kYXRhID0gdmFfYXJnKHBhcmFtLCB2b2lkICopOworICAgIGJyZWFrOworI2lmZGVmIFVTRV9UTFNfU1JQCisgIGNhc2UgQ1VSTE9QVF9UTFNBVVRIX1VTRVJOQU1FOgorICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfVExTQVVUSF9VU0VSTkFNRV0sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfVExTQVVUSF9VU0VSTkFNRV0gJiYgIWRhdGEtPnNldC5zc2wuYXV0aHR5cGUpCisgICAgICBkYXRhLT5zZXQuc3NsLmF1dGh0eXBlID0gQ1VSTF9UTFNBVVRIX1NSUDsgLyogZGVmYXVsdCB0byBTUlAgKi8KKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1RMU0FVVEhfUEFTU1dPUkQ6CisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1BBU1NXT1JEXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1VTRVJOQU1FXSAmJiAhZGF0YS0+c2V0LnNzbC5hdXRodHlwZSkKKyAgICAgIGRhdGEtPnNldC5zc2wuYXV0aHR5cGUgPSBDVVJMX1RMU0FVVEhfU1JQOyAvKiBkZWZhdWx0IHRvIFNSUCAqLworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfVExTQVVUSF9UWVBFOgorICAgIGlmKHN0cm5jbXAoKGNoYXIgKil2YV9hcmcocGFyYW0sIGNoYXIgKiksICJTUlAiLCBzdHJsZW4oIlNSUCIpKSA9PSAwKQorICAgICAgZGF0YS0+c2V0LnNzbC5hdXRodHlwZSA9IENVUkxfVExTQVVUSF9TUlA7CisgICAgZWxzZQorICAgICAgZGF0YS0+c2V0LnNzbC5hdXRodHlwZSA9IENVUkxfVExTQVVUSF9OT05FOworICAgIGJyZWFrOworI2VuZGlmCisgIGNhc2UgQ1VSTE9QVF9ETlNfU0VSVkVSUzoKKyAgICByZXN1bHQgPSBDdXJsX3NldF9kbnNfc2VydmVycyhkYXRhLCB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworCisgIGNhc2UgQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFOgorICAgIGRhdGEtPnNldC50Y3Bfa2VlcGFsaXZlID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSk/VFJVRTpGQUxTRTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1RDUF9LRUVQSURMRToKKyAgICBkYXRhLT5zZXQudGNwX2tlZXBpZGxlID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1RDUF9LRUVQSU5UVkw6CisgICAgZGF0YS0+c2V0LnRjcF9rZWVwaW50dmwgPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGJyZWFrOworCisgIGRlZmF1bHQ6CisgICAgLyogdW5rbm93biB0YWcgYW5kIGl0cyBjb21wYW5pb24sIGp1c3QgaWdub3JlOiAqLworICAgIHJlc3VsdCA9IENVUkxFX1VOS05PV05fT1BUSU9OOworICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY29ubl9mcmVlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaWYoIWNvbm4pCisgICAgcmV0dXJuOworCisgIC8qIHBvc3NpYmxlIGxlZnQtb3ZlcnMgZnJvbSB0aGUgYXN5bmMgbmFtZSByZXNvbHZlcnMgKi8KKyAgQ3VybF9yZXNvbHZlcl9jYW5jZWwoY29ubik7CisKKyAgLyogY2xvc2UgdGhlIFNTTCBzdHVmZiBiZWZvcmUgd2UgY2xvc2UgYW55IHNvY2tldHMgc2luY2UgdGhleSB3aWxsL21heQorICAgICB3cml0ZSB0byB0aGUgc29ja2V0cyAqLworICBDdXJsX3NzbF9jbG9zZShjb25uLCBGSVJTVFNPQ0tFVCk7CisgIEN1cmxfc3NsX2Nsb3NlKGNvbm4sIFNFQ09OREFSWVNPQ0tFVCk7CisKKyAgLyogY2xvc2UgcG9zc2libHkgc3RpbGwgb3BlbiBzb2NrZXRzICovCisgIGlmKENVUkxfU09DS0VUX0JBRCAhPSBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pCisgICAgQ3VybF9jbG9zZXNvY2tldChjb25uLCBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0pOworICBpZihDVVJMX1NPQ0tFVF9CQUQgIT0gY29ubi0+c29ja1tGSVJTVFNPQ0tFVF0pCisgICAgQ3VybF9jbG9zZXNvY2tldChjb25uLCBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSk7CisKKyNpZiBkZWZpbmVkKFVTRV9OVExNKSAmJiBkZWZpbmVkKE5UTE1fV0JfRU5BQkxFRCkKKyAgQ3VybF9udGxtX3diX2NsZWFudXAoY29ubik7CisjZW5kaWYKKworICBDdXJsX3NhZmVmcmVlKGNvbm4tPnVzZXIpOworICBDdXJsX3NhZmVmcmVlKGNvbm4tPnBhc3N3ZCk7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+cHJveHl1c2VyKTsKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5wcm94eXBhc3N3ZCk7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkKTsKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci51YWdlbnQpOworICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLnVzZXJwd2QpOworICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLmFjY2VwdF9lbmNvZGluZyk7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIudGUpOworICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLnJhbmdlbGluZSk7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIucmVmKTsKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5ob3N0KTsKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5jb29raWVob3N0KTsKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5ydHNwX3RyYW5zcG9ydCk7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+dHJhaWxlcik7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+aG9zdC5yYXdhbGxvYyk7IC8qIGhvc3QgbmFtZSBidWZmZXIgKi8KKyAgQ3VybF9zYWZlZnJlZShjb25uLT5wcm94eS5yYXdhbGxvYyk7IC8qIHByb3h5IG5hbWUgYnVmZmVyICovCisgIEN1cmxfc2FmZWZyZWUoY29ubi0+bWFzdGVyX2J1ZmZlcik7CisKKyAgQ3VybF9sbGlzdF9kZXN0cm95KGNvbm4tPnNlbmRfcGlwZSwgTlVMTCk7CisgIEN1cmxfbGxpc3RfZGVzdHJveShjb25uLT5yZWN2X3BpcGUsIE5VTEwpOworICBDdXJsX2xsaXN0X2Rlc3Ryb3koY29ubi0+cGVuZF9waXBlLCBOVUxMKTsKKyAgQ3VybF9sbGlzdF9kZXN0cm95KGNvbm4tPmRvbmVfcGlwZSwgTlVMTCk7CisKKyAgY29ubi0+c2VuZF9waXBlID0gTlVMTDsKKyAgY29ubi0+cmVjdl9waXBlID0gTlVMTDsKKyAgY29ubi0+cGVuZF9waXBlID0gTlVMTDsKKyAgY29ubi0+ZG9uZV9waXBlID0gTlVMTDsKKworICBDdXJsX3NhZmVmcmVlKGNvbm4tPmxvY2FsZGV2KTsKKyAgQ3VybF9mcmVlX3NzbF9jb25maWcoJmNvbm4tPnNzbF9jb25maWcpOworCisgIGZyZWUoY29ubik7IC8qIGZyZWUgYWxsIHRoZSBjb25uZWN0aW9uIG9yaWVudGVkIGRhdGEgKi8KK30KKworQ1VSTGNvZGUgQ3VybF9kaXNjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhOworICBpZighY29ubikKKyAgICByZXR1cm4gQ1VSTEVfT0s7IC8qIHRoaXMgaXMgY2xvc2VkIGFuZCBmaW5lIGFscmVhZHkgKi8KKyAgZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgaWYoIWRhdGEpIHsKKyAgICBERUJVR0YoZnByaW50ZihzdGRlcnIsICJESVNDT05ORUNUIHdpdGhvdXQgZWFzeSBoYW5kbGUsIGlnbm9yaW5nXG4iKSk7CisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgaWYoY29ubi0+ZG5zX2VudHJ5ICE9IE5VTEwpIHsKKyAgICBDdXJsX3Jlc29sdl91bmxvY2soZGF0YSwgY29ubi0+ZG5zX2VudHJ5KTsKKyAgICBjb25uLT5kbnNfZW50cnkgPSBOVUxMOworICB9CisKKyAgQ3VybF9ob3N0Y2FjaGVfcHJ1bmUoZGF0YSk7IC8qIGtpbGwgb2xkIEROUyBjYWNoZSBlbnRyaWVzICovCisKKyAgeworICAgIGludCBoYXNfaG9zdF9udGxtID0gKGNvbm4tPm50bG0uc3RhdGUgIT0gTlRMTVNUQVRFX05PTkUpOworICAgIGludCBoYXNfcHJveHlfbnRsbSA9IChjb25uLT5wcm94eW50bG0uc3RhdGUgIT0gTlRMTVNUQVRFX05PTkUpOworCisgICAgLyogQXV0aGVudGljYXRpb24gZGF0YSBpcyBhIG1peCBvZiBjb25uZWN0aW9uLXJlbGF0ZWQgYW5kIHNlc3Npb25oYW5kbGUtCisgICAgICAgcmVsYXRlZCBzdHVmZi4gTlRMTSBpcyBjb25uZWN0aW9uLXJlbGF0ZWQgc28gd2hlbiB3ZSBjbG9zZSB0aGUgc2hvcAorICAgICAgIHdlIHNoYWxsIGZvcmdldC4gKi8KKworICAgIGlmKGhhc19ob3N0X250bG0pIHsKKyAgICAgIGRhdGEtPnN0YXRlLmF1dGhob3N0LmRvbmUgPSBGQUxTRTsKKyAgICAgIGRhdGEtPnN0YXRlLmF1dGhob3N0LnBpY2tlZCA9CisgICAgICAgIGRhdGEtPnN0YXRlLmF1dGhob3N0LndhbnQ7CisgICAgfQorCisgICAgaWYoaGFzX3Byb3h5X250bG0pIHsKKyAgICAgIGRhdGEtPnN0YXRlLmF1dGhwcm94eS5kb25lID0gRkFMU0U7CisgICAgICBkYXRhLT5zdGF0ZS5hdXRocHJveHkucGlja2VkID0KKyAgICAgICAgZGF0YS0+c3RhdGUuYXV0aHByb3h5LndhbnQ7CisgICAgfQorCisgICAgaWYoaGFzX2hvc3RfbnRsbSB8fCBoYXNfcHJveHlfbnRsbSkgeworICAgICAgZGF0YS0+c3RhdGUuYXV0aHByb2JsZW0gPSBGQUxTRTsKKworICAgICAgQ3VybF9odHRwX250bG1fY2xlYW51cChjb25uKTsKKyAgICB9CisgIH0KKworICAvKiBDbGVhbnVwIHBvc3NpYmxlIHJlZGlyZWN0IGp1bmsgKi8KKyAgaWYoZGF0YS0+cmVxLm5ld3VybCkgeworICAgIGZyZWUoZGF0YS0+cmVxLm5ld3VybCk7CisgICAgZGF0YS0+cmVxLm5ld3VybCA9IE5VTEw7CisgIH0KKworICBpZihjb25uLT5oYW5kbGVyLT5kaXNjb25uZWN0KQorICAgIC8qIFRoaXMgaXMgc2V0IGlmIHByb3RvY29sLXNwZWNpZmljIGNsZWFudXBzIHNob3VsZCBiZSBtYWRlICovCisgICAgY29ubi0+aGFuZGxlci0+ZGlzY29ubmVjdChjb25uLCBkZWFkX2Nvbm5lY3Rpb24pOworCisgIGlmKC0xICE9IGNvbm4tPmNvbm5lY3RpbmRleCkgeworICAgIC8qIHVubGluayBvdXJzZWx2ZXMhICovCisgICAgaW5mb2YoZGF0YSwgIkNsb3NpbmcgY29ubmVjdGlvbiAjJWxkXG4iLCBjb25uLT5jb25uZWN0aW5kZXgpOworICAgIGlmKGRhdGEtPnN0YXRlLmNvbm5jKQorICAgICAgLyogb25seSBjbGVhciB0aGUgdGFibGUgZW50cnkgaWYgd2Ugc3RpbGwga25vdyBpbiB3aGljaCBjYWNoZSB3ZQorICAgICAgICAgdXNlZCB0byBiZSBpbiAqLworICAgICAgZGF0YS0+c3RhdGUuY29ubmMtPmNvbm5lY3RzW2Nvbm4tPmNvbm5lY3RpbmRleF0gPSBOVUxMOworICB9CisKKyNpZiBkZWZpbmVkKFVTRV9MSUJJRE4pCisgIGlmKGNvbm4tPmhvc3QuZW5jYWxsb2MpCisgICAgaWRuX2ZyZWUoY29ubi0+aG9zdC5lbmNhbGxvYyk7IC8qIGVuY29kZWQgaG9zdCBuYW1lIGJ1ZmZlciwgbXVzdCBiZSBmcmVlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGlkbl9mcmVlKCkgc2luY2UgdGhpcyB3YXMgYWxsb2NhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGxpYmlkbiAqLworICBpZihjb25uLT5wcm94eS5lbmNhbGxvYykKKyAgICBpZG5fZnJlZShjb25uLT5wcm94eS5lbmNhbGxvYyk7IC8qIGVuY29kZWQgcHJveHkgbmFtZSBidWZmZXIsIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVkIHdpdGggaWRuX2ZyZWUoKSBzaW5jZSB0aGlzIHdhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkIGJ5IGxpYmlkbiAqLworI2VsaWYgZGVmaW5lZChVU0VfV0lOMzJfSUROKQorICBmcmVlKGNvbm4tPmhvc3QuZW5jYWxsb2MpOyAvKiBlbmNvZGVkIGhvc3QgbmFtZSBidWZmZXIsIG11c3QgYmUgZnJlZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZG5fZnJlZSgpIHNpbmNlIHRoaXMgd2FzIGFsbG9jYXRlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3dpbjMyX2lkbl90b19hc2NpaSAqLworICBpZihjb25uLT5wcm94eS5lbmNhbGxvYykKKyAgICBmcmVlKGNvbm4tPnByb3h5LmVuY2FsbG9jKTsgLyogZW5jb2RlZCBwcm94eSBuYW1lIGJ1ZmZlciwgbXVzdCBiZSBmcmVlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGlkbl9mcmVlKCkgc2luY2UgdGhpcyB3YXMgYWxsb2NhdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfd2luMzJfaWRuX3RvX2FzY2lpICovCisjZW5kaWYKKworICBDdXJsX3NzbF9jbG9zZShjb25uLCBGSVJTVFNPQ0tFVCk7CisKKyAgLyogSW5kaWNhdGUgdG8gYWxsIGhhbmRsZXMgb24gdGhlIHBpcGUgdGhhdCB3ZSdyZSBkZWFkICovCisgIGlmKEN1cmxfaXNQaXBlbGluaW5nRW5hYmxlZChkYXRhKSkgeworICAgIHNpZ25hbFBpcGVDbG9zZShjb25uLT5zZW5kX3BpcGUsIFRSVUUpOworICAgIHNpZ25hbFBpcGVDbG9zZShjb25uLT5yZWN2X3BpcGUsIFRSVUUpOworICAgIHNpZ25hbFBpcGVDbG9zZShjb25uLT5wZW5kX3BpcGUsIFRSVUUpOworICAgIHNpZ25hbFBpcGVDbG9zZShjb25uLT5kb25lX3BpcGUsIEZBTFNFKTsKKyAgfQorCisgIGNvbm5fZnJlZShjb25uKTsKKyAgZGF0YS0+c3RhdGUuY3VycmVudF9jb25uID0gTlVMTDsKKyAgQ3VybF9zcGVlZGluaXQoZGF0YSk7CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIFRSVUUgaWYgdGhlIHNvY2tldCBpcyB0byBiZSBhc3N1bWVkIHRvCisgKiBiZSBkZWFkLiBNb3N0IGNvbW1vbmx5IHRoaXMgaGFwcGVucyB3aGVuIHRoZSBzZXJ2ZXIgaGFzIGNsb3NlZCB0aGUKKyAqIGNvbm5lY3Rpb24gZHVlIHRvIGluYWN0aXZpdHkuCisgKi8KK3N0YXRpYyBib29sIFNvY2tldElzRGVhZChjdXJsX3NvY2tldF90IHNvY2spCit7CisgIGludCBzdmFsOworICBib29sIHJldF92YWwgPSBUUlVFOworCisgIHN2YWwgPSBDdXJsX3NvY2tldF9yZWFkeShzb2NrLCBDVVJMX1NPQ0tFVF9CQUQsIDApOworICBpZihzdmFsID09IDApCisgICAgLyogdGltZW91dCAqLworICAgIHJldF92YWwgPSBGQUxTRTsKKworICByZXR1cm4gcmV0X3ZhbDsKK30KKworc3RhdGljIGJvb2wgSXNQaXBlbGluaW5nUG9zc2libGUoY29uc3Qgc3RydWN0IFNlc3Npb25IYW5kbGUgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgaWYoKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX0hUVFApICYmCisgICAgIGhhbmRsZS0+bXVsdGkgJiYgQ3VybF9tdWx0aV9jYW5QaXBlbGluZShoYW5kbGUtPm11bHRpKSAmJgorICAgICAoaGFuZGxlLT5zZXQuaHR0cHJlcSA9PSBIVFRQUkVRX0dFVCB8fAorICAgICAgaGFuZGxlLT5zZXQuaHR0cHJlcSA9PSBIVFRQUkVRX0hFQUQpICYmCisgICAgIGhhbmRsZS0+c2V0Lmh0dHB2ZXJzaW9uICE9IENVUkxfSFRUUF9WRVJTSU9OXzFfMCkKKyAgICByZXR1cm4gVFJVRTsKKworICByZXR1cm4gRkFMU0U7Cit9CisKK2Jvb2wgQ3VybF9pc1BpcGVsaW5pbmdFbmFibGVkKGNvbnN0IHN0cnVjdCBTZXNzaW9uSGFuZGxlICpoYW5kbGUpCit7CisgIGlmKGhhbmRsZS0+bXVsdGkgJiYgQ3VybF9tdWx0aV9jYW5QaXBlbGluZShoYW5kbGUtPm11bHRpKSkKKyAgICByZXR1cm4gVFJVRTsKKworICByZXR1cm4gRkFMU0U7Cit9CisKK0NVUkxjb2RlIEN1cmxfYWRkSGFuZGxlVG9QaXBlbGluZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9sbGlzdCAqcGlwZWxpbmUpCit7CisgIGlmKCFDdXJsX2xsaXN0X2luc2VydF9uZXh0KHBpcGVsaW5lLCBwaXBlbGluZS0+dGFpbCwgZGF0YSkpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworaW50IEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfbGxpc3QgKnBpcGVsaW5lKQoreworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpjdXJyOworCisgIGN1cnIgPSBwaXBlbGluZS0+aGVhZDsKKyAgd2hpbGUoY3VycikgeworICAgIGlmKGN1cnItPnB0ciA9PSBoYW5kbGUpIHsKKyAgICAgIEN1cmxfbGxpc3RfcmVtb3ZlKHBpcGVsaW5lLCBjdXJyLCBOVUxMKTsKKyAgICAgIHJldHVybiAxOyAvKiB3ZSByZW1vdmVkIGEgaGFuZGxlICovCisgICAgfQorICAgIGN1cnIgPSBjdXJyLT5uZXh0OworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyNpZiAwIC8qIHRoaXMgY29kZSBpcyBzYXZlZCBoZXJlIGFzIGl0IGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzICovCitzdGF0aWMgdm9pZCBDdXJsX3ByaW50UGlwZWxpbmUoc3RydWN0IGN1cmxfbGxpc3QgKnBpcGVsaW5lKQoreworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpjdXJyOworCisgIGN1cnIgPSBwaXBlbGluZS0+aGVhZDsKKyAgd2hpbGUoY3VycikgeworICAgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gKHN0cnVjdCBTZXNzaW9uSGFuZGxlICopIGN1cnItPnB0cjsKKyAgICBpbmZvZihkYXRhLCAiSGFuZGxlIGluIHBpcGVsaW5lOiAlc1xuIiwgZGF0YS0+c3RhdGUucGF0aCk7CisgICAgY3VyciA9IGN1cnItPm5leHQ7CisgIH0KK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IFNlc3Npb25IYW5kbGUqIGdldGhhbmRsZWF0aGVhZChzdHJ1Y3QgY3VybF9sbGlzdCAqcGlwZWxpbmUpCit7CisgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKmN1cnIgPSBwaXBlbGluZS0+aGVhZDsKKyAgaWYoY3VycikgeworICAgIHJldHVybiAoc3RydWN0IFNlc3Npb25IYW5kbGUgKikgY3Vyci0+cHRyOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIHJlbW92ZSB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24gZnJvbSBhbGwgKHBvc3NpYmxlKSBwaXBlbGluZXMgYW5kIHJlbGF0ZWQKKyAgIHF1ZXVlcyAqLwordm9pZCBDdXJsX2dldG9mZl9hbGxfcGlwZWxpbmVzKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgYm9vbCByZWN2X2hlYWQgPSAoY29ubi0+cmVhZGNoYW5uZWxfaW51c2UgJiYKKyAgICAoZ2V0aGFuZGxlYXRoZWFkKGNvbm4tPnJlY3ZfcGlwZSkgPT0gZGF0YSkpID8gVFJVRSA6IEZBTFNFOworCisgIGJvb2wgc2VuZF9oZWFkID0gKGNvbm4tPndyaXRlY2hhbm5lbF9pbnVzZSAmJgorICAgIChnZXRoYW5kbGVhdGhlYWQoY29ubi0+c2VuZF9waXBlKSA9PSBkYXRhKSkgPyBUUlVFIDogRkFMU0U7CisKKyAgaWYoQ3VybF9yZW1vdmVIYW5kbGVGcm9tUGlwZWxpbmUoZGF0YSwgY29ubi0+cmVjdl9waXBlKSAmJiByZWN2X2hlYWQpCisgICAgY29ubi0+cmVhZGNoYW5uZWxfaW51c2UgPSBGQUxTRTsKKyAgaWYoQ3VybF9yZW1vdmVIYW5kbGVGcm9tUGlwZWxpbmUoZGF0YSwgY29ubi0+c2VuZF9waXBlKSAmJiBzZW5kX2hlYWQpCisgICAgY29ubi0+d3JpdGVjaGFubmVsX2ludXNlID0gRkFMU0U7CisgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGRhdGEsIGNvbm4tPnBlbmRfcGlwZSk7CisgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGRhdGEsIGNvbm4tPmRvbmVfcGlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNpZ25hbFBpcGVDbG9zZShzdHJ1Y3QgY3VybF9sbGlzdCAqcGlwZWxpbmUsIGJvb2wgcGlwZV9icm9rZSkKK3sKKyAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqY3VycjsKKworICBpZighcGlwZWxpbmUpCisgICAgcmV0dXJuOworCisgIGN1cnIgPSBwaXBlbGluZS0+aGVhZDsKKyAgd2hpbGUoY3VycikgeworICAgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKm5leHQgPSBjdXJyLT5uZXh0OworICAgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gKHN0cnVjdCBTZXNzaW9uSGFuZGxlICopIGN1cnItPnB0cjsKKworI2lmZGVmIERFQlVHQlVJTEQgLyogZGVidWctb25seSBjb2RlICovCisgICAgaWYoZGF0YS0+bWFnaWMgIT0gQ1VSTEVBU1lfTUFHSUNfTlVNQkVSKSB7CisgICAgICAvKiBNQUpPUiBCQURORVNTICovCisgICAgICBpbmZvZihkYXRhLCAic2lnbmFsUGlwZUNsb3NlKCkgZm91bmQgQkFBRCBlYXN5IGhhbmRsZVxuIik7CisgICAgfQorI2VuZGlmCisKKyAgICBpZihwaXBlX2Jyb2tlKQorICAgICAgZGF0YS0+c3RhdGUucGlwZV9icm9rZSA9IFRSVUU7CisgICAgQ3VybF9tdWx0aV9oYW5kbGVQaXBlQnJlYWsoZGF0YSk7CisgICAgQ3VybF9sbGlzdF9yZW1vdmUocGlwZWxpbmUsIGN1cnIsIE5VTEwpOworICAgIGN1cnIgPSBuZXh0OworICB9Cit9CisKKworLyoKKyAqIEdpdmVuIG9uZSBmaWxsZWQgaW4gY29ubmVjdGlvbiBzdHJ1Y3QgKG5hbWVkIG5lZWRsZSksIHRoaXMgZnVuY3Rpb24gc2hvdWxkCisgKiBkZXRlY3QgaWYgdGhlcmUgYWxyZWFkeSBpcyBvbmUgdGhhdCBoYXMgYWxsIHRoZSBzaWduaWZpY2FudCBkZXRhaWxzCisgKiBleGFjdGx5IHRoZSBzYW1lIGFuZCB0aHVzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgKgorICogSWYgdGhlcmUgaXMgYSBtYXRjaCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIFRSVUUgLSBhbmQgaGFzIG1hcmtlZCB0aGUKKyAqIGNvbm5lY3Rpb24gYXMgJ2luLXVzZScuIEl0IG11c3QgbGF0ZXIgYmUgY2FsbGVkIHdpdGggQ29ubmVjdGlvbkRvbmUoKSB0bworICogcmV0dXJuIGJhY2sgdG8gJ2lkbGUnICh1bnVzZWQpIHN0YXRlLgorICovCitzdGF0aWMgYm9vbAorQ29ubmVjdGlvbkV4aXN0cyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpuZWVkbGUsCisgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqKnVzZXRoaXMpCit7CisgIGxvbmcgaTsKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjaGVjazsKKyAgYm9vbCBjYW5QaXBlbGluZSA9IElzUGlwZWxpbmluZ1Bvc3NpYmxlKGRhdGEsIG5lZWRsZSk7CisKKyAgZm9yKGk9MDsgaTwgZGF0YS0+c3RhdGUuY29ubmMtPm51bTsgaSsrKSB7CisgICAgYm9vbCBtYXRjaCA9IEZBTFNFOworICAgIHNpemVfdCBwaXBlTGVuID0gMDsKKyAgICAvKgorICAgICAqIE5vdGUgdGhhdCBpZiB3ZSB1c2UgYSBIVFRQIHByb3h5LCB3ZSBjaGVjayBjb25uZWN0aW9ucyB0byB0aGF0CisgICAgICogcHJveHkgYW5kIG5vdCB0byB0aGUgYWN0dWFsIHJlbW90ZSBzZXJ2ZXIuCisgICAgICovCisgICAgY2hlY2sgPSBkYXRhLT5zdGF0ZS5jb25uYy0+Y29ubmVjdHNbaV07CisgICAgaWYoIWNoZWNrKQorICAgICAgLyogTlVMTCBwb2ludGVyIG1lYW5zIG5vdCBmaWxsZWQtaW4gZW50cnkgKi8KKyAgICAgIGNvbnRpbnVlOworCisgICAgcGlwZUxlbiA9IGNoZWNrLT5zZW5kX3BpcGUtPnNpemUgKyBjaGVjay0+cmVjdl9waXBlLT5zaXplOworCisgICAgaWYoY2hlY2stPmNvbm5lY3RpbmRleCA9PSAtMSkgeworICAgICAgY2hlY2stPmNvbm5lY3RpbmRleCA9IGk7IC8qIFNldCB0aGlzIGFwcHJvcHJpYXRlbHkgc2luY2UgaXQgbWlnaHQgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZW4gc2V0IHRvIC0xIHdoZW4gdGhlIGVhc3kgd2FzIHJlbW92ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBtdWx0aSAqLworICAgIH0KKworICAgIGlmKCFwaXBlTGVuICYmICFjaGVjay0+aW51c2UpIHsKKyAgICAgIC8qIFRoZSBjaGVjayBmb3IgYSBkZWFkIHNvY2tldCBtYWtlcyBzZW5zZSBvbmx5IGlmIHRoZXJlIGFyZSBubworICAgICAgICAgaGFuZGxlcyBpbiBwaXBlbGluZSBhbmQgdGhlIGNvbm5lY3Rpb24gaXNuJ3QgYWxyZWFkeSBtYXJrZWQgaW4KKyAgICAgICAgIHVzZSAqLworICAgICAgYm9vbCBkZWFkOworICAgICAgaWYoY2hlY2stPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1JUU1ApCisgICAgICAgIC8qIFJUU1AgaXMgYSBzcGVjaWFsIGNhc2UgZHVlIHRvIFJUUCBpbnRlcmxlYXZpbmcgKi8KKyAgICAgICAgZGVhZCA9IEN1cmxfcnRzcF9jb25uaXNkZWFkKGNoZWNrKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZGVhZCA9IFNvY2tldElzRGVhZChjaGVjay0+c29ja1tGSVJTVFNPQ0tFVF0pOworCisgICAgICBpZihkZWFkKSB7CisgICAgICAgIGNoZWNrLT5kYXRhID0gZGF0YTsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkNvbm5lY3Rpb24gIyVsZCBzZWVtcyB0byBiZSBkZWFkIVxuIiwgaSk7CisKKyAgICAgICAgLyogZGlzY29ubmVjdCByZXNvdXJjZXMgKi8KKyAgICAgICAgQ3VybF9kaXNjb25uZWN0KGNoZWNrLCAvKiBkZWFkX2Nvbm5lY3Rpb24gKi8gVFJVRSk7CisgICAgICAgIGRhdGEtPnN0YXRlLmNvbm5jLT5jb25uZWN0c1tpXT1OVUxMOyAvKiBub3RoaW5nIGhlcmUgKi8KKworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZihjYW5QaXBlbGluZSkgeworICAgICAgLyogTWFrZSBzdXJlIHRoZSBwaXBlIGhhcyBvbmx5IEdFVCByZXF1ZXN0cyAqLworICAgICAgc3RydWN0IFNlc3Npb25IYW5kbGUqIHNoID0gZ2V0aGFuZGxlYXRoZWFkKGNoZWNrLT5zZW5kX3BpcGUpOworICAgICAgc3RydWN0IFNlc3Npb25IYW5kbGUqIHJoID0gZ2V0aGFuZGxlYXRoZWFkKGNoZWNrLT5yZWN2X3BpcGUpOworICAgICAgaWYoc2gpIHsKKyAgICAgICAgaWYoIUlzUGlwZWxpbmluZ1Bvc3NpYmxlKHNoLCBjaGVjaykpCisgICAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJoKSB7CisgICAgICAgIGlmKCFJc1BpcGVsaW5pbmdQb3NzaWJsZShyaCwgY2hlY2spKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisjaWZkZWYgREVCVUdCVUlMRAorICAgICAgaWYocGlwZUxlbiA+IE1BWF9QSVBFTElORV9MRU5HVEgpIHsKKyAgICAgICAgaW5mb2YoZGF0YSwgIkJBRCEgQ29ubmVjdGlvbiAjJWxkIGhhcyB0b28gYmlnIHBpcGVsaW5lIVxuIiwKKyAgICAgICAgICAgICAgY2hlY2stPmNvbm5lY3RpbmRleCk7CisgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZihwaXBlTGVuID4gMCkgeworICAgICAgICAvKiBjYW4gb25seSBoYXBwZW4gd2l0aGluIG11bHRpIGhhbmRsZXMsIGFuZCBtZWFucyB0aGF0IGFub3RoZXIgZWFzeQorICAgICAgICAgICBoYW5kbGUgaXMgdXNpbmcgdGhpcyBjb25uZWN0aW9uICovCisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBpZihDdXJsX3Jlc29sdmVyX2FzeW5jaCgpKSB7CisgICAgICAgIC8qIGlwX2FkZHJfc3RyWzBdIGlzIE5VTCBvbmx5IGlmIHRoZSByZXNvbHZpbmcgb2YgdGhlIG5hbWUgaGFzbid0CisgICAgICAgICAgIGNvbXBsZXRlZCB5ZXQgYW5kIHVudGlsIHRoZW4gd2UgZG9uJ3QgcmUtdXNlIHRoaXMgY29ubmVjdGlvbiAqLworICAgICAgICBpZighY2hlY2stPmlwX2FkZHJfc3RyWzBdKSB7CisgICAgICAgICAgaW5mb2YoZGF0YSwKKyAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiAjJWxkIGhhc24ndCBmaW5pc2hlZCBuYW1lIHJlc29sdmUsIGNhbid0IHJldXNlXG4iLAorICAgICAgICAgICAgICAgIGNoZWNrLT5jb25uZWN0aW5kZXgpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKChjaGVjay0+c29ja1tGSVJTVFNPQ0tFVF0gPT0gQ1VSTF9TT0NLRVRfQkFEKSB8fCBjaGVjay0+Yml0cy5jbG9zZSkgeworICAgICAgICAvKiBEb24ndCBwaWNrIGEgY29ubmVjdGlvbiB0aGF0IGhhc24ndCBjb25uZWN0ZWQgeWV0IG9yIHRoYXQgaXMgZ29pbmcKKyAgICAgICAgICAgdG8gZ2V0IGNsb3NlZC4gKi8KKyAgICAgICAgaW5mb2YoZGF0YSwgIkNvbm5lY3Rpb24gIyVsZCBpc24ndCBvcGVuIGVub3VnaCwgY2FuJ3QgcmV1c2VcbiIsCisgICAgICAgICAgICAgIGNoZWNrLT5jb25uZWN0aW5kZXgpOworI2lmZGVmIERFQlVHQlVJTEQKKyAgICAgICAgaWYoY2hlY2stPnJlY3ZfcGlwZS0+c2l6ZSA+IDApIHsKKyAgICAgICAgICBpbmZvZihkYXRhLCAiQkFEISBVbmNvbm5lY3RlZCAjJWxkIGhhcyBhIG5vbi1lbXB0eSByZWN2IHBpcGVsaW5lIVxuIiwKKyAgICAgICAgICAgICAgICBjaGVjay0+Y29ubmVjdGluZGV4KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgIH0KKworICAgIGlmKChuZWVkbGUtPmhhbmRsZXItPmZsYWdzJlBST1RPUFRfU1NMKSAhPQorICAgICAgIChjaGVjay0+aGFuZGxlci0+ZmxhZ3MmUFJPVE9QVF9TU0wpKQorICAgICAgLyogZG9uJ3QgZG8gbWl4ZWQgU1NMIGFuZCBub24tU1NMIGNvbm5lY3Rpb25zICovCisgICAgICBpZighKG5lZWRsZS0+aGFuZGxlci0+cHJvdG9jb2wgJiBjaGVjay0+aGFuZGxlci0+cHJvdG9jb2wpKQorICAgICAgICAvKiBleGNlcHQgcHJvdG9jb2xzIHRoYXQgaGF2ZSBiZWVuIHVwZ3JhZGVkIHZpYSBUTFMgKi8KKyAgICAgICAgY29udGludWU7CisKKyAgICBpZihuZWVkbGUtPmhhbmRsZXItPmZsYWdzJlBST1RPUFRfU1NMKSB7CisgICAgICBpZigoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyICE9IGNoZWNrLT52ZXJpZnlwZWVyKSB8fAorICAgICAgICAgKGRhdGEtPnNldC5zc2wudmVyaWZ5aG9zdCAhPSBjaGVjay0+dmVyaWZ5aG9zdCkpCisgICAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmKG5lZWRsZS0+Yml0cy5wcm94eSAhPSBjaGVjay0+Yml0cy5wcm94eSkKKyAgICAgIC8qIGRvbid0IGRvIG1peGVkIHByb3h5IGFuZCBub24tcHJveHkgY29ubmVjdGlvbnMgKi8KKyAgICAgIGNvbnRpbnVlOworCisgICAgaWYoIWNhblBpcGVsaW5lICYmIGNoZWNrLT5pbnVzZSkKKyAgICAgIC8qIHRoaXMgcmVxdWVzdCBjYW4ndCBiZSBwaXBlbGluZWQgYnV0IHRoZSBjaGVja2VkIGNvbm5lY3Rpb24gaXMgYWxyZWFkeQorICAgICAgICAgaW4gdXNlIHNvIHdlIHNraXAgaXQgKi8KKyAgICAgIGNvbnRpbnVlOworCisgICAgaWYobmVlZGxlLT5sb2NhbGRldiB8fCBuZWVkbGUtPmxvY2FscG9ydCkgeworICAgICAgLyogSWYgd2UgYXJlIGJvdW5kIHRvIGEgc3BlY2lmaWMgbG9jYWwgZW5kIChJUCtwb3J0KSwgd2UgbXVzdCBub3QgcmUtdXNlCisgICAgICAgICBhIHJhbmRvbSBvdGhlciBvbmUsIGFsdGhvdWdoIGlmIHdlIGRpZG4ndCBhc2sgZm9yIGEgcGFydGljdWxhciBvbmUgd2UKKyAgICAgICAgIGNhbiByZXVzZSBvbmUgdGhhdCB3YXMgYm91bmQuCisKKyAgICAgICAgIFRoaXMgY29tcGFyaXNvbiBpcyBhIGJpdCByb3VnaCBhbmQgdG9vIHN0cmljdC4gU2luY2UgdGhlIGlucHV0CisgICAgICAgICBwYXJhbWV0ZXJzIGNhbiBiZSBzcGVjaWZpZWQgaW4gbnVtZXJvdXMgd2F5cyBhbmQgc3RpbGwgZW5kIHVwIHRoZQorICAgICAgICAgc2FtZSBpdCB3b3VsZCB0YWtlIGEgbG90IG9mIHByb2Nlc3NpbmcgdG8gbWFrZSBpdCByZWFsbHkgYWNjdXJhdGUuCisgICAgICAgICBJbnN0ZWFkLCB0aGlzIG1hdGNoaW5nIHdpbGwgYXNzdW1lIHRoYXQgcmUtdXNlcyBvZiBib3VuZCBjb25uZWN0aW9ucworICAgICAgICAgd2lsbCBtb3N0IGxpa2VseSBhbHNvIHJlLXVzZSB0aGUgZXhhY3Qgc2FtZSBiaW5kaW5nIHBhcmFtZXRlcnMgYW5kCisgICAgICAgICBtaXNzaW5nIG91dCBhIGZldyBlZGdlIGNhc2VzIHNob3VsZG4ndCBodXJ0IGFueW9uZSB2ZXJ5IG11Y2guCisgICAgICAqLworICAgICAgaWYoKGNoZWNrLT5sb2NhbHBvcnQgIT0gbmVlZGxlLT5sb2NhbHBvcnQpIHx8CisgICAgICAgICAoY2hlY2stPmxvY2FscG9ydHJhbmdlICE9IG5lZWRsZS0+bG9jYWxwb3J0cmFuZ2UpIHx8CisgICAgICAgICAhY2hlY2stPmxvY2FsZGV2IHx8CisgICAgICAgICAhbmVlZGxlLT5sb2NhbGRldiB8fAorICAgICAgICAgc3RyY21wKGNoZWNrLT5sb2NhbGRldiwgbmVlZGxlLT5sb2NhbGRldikpCisgICAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmKCFuZWVkbGUtPmJpdHMuaHR0cHByb3h5IHx8IG5lZWRsZS0+aGFuZGxlci0+ZmxhZ3MmUFJPVE9QVF9TU0wgfHwKKyAgICAgICAobmVlZGxlLT5iaXRzLmh0dHBwcm94eSAmJiBjaGVjay0+Yml0cy5odHRwcHJveHkgJiYKKyAgICAgICAgbmVlZGxlLT5iaXRzLnR1bm5lbF9wcm94eSAmJiBjaGVjay0+Yml0cy50dW5uZWxfcHJveHkgJiYKKyAgICAgICAgQ3VybF9yYXdfZXF1YWwobmVlZGxlLT5wcm94eS5uYW1lLCBjaGVjay0+cHJveHkubmFtZSkgJiYKKyAgICAgICAgKG5lZWRsZS0+cG9ydCA9PSBjaGVjay0+cG9ydCkpKSB7CisgICAgICAvKiBUaGUgcmVxdWVzdGVkIGNvbm5lY3Rpb24gZG9lcyBub3QgdXNlIGEgSFRUUCBwcm94eSBvciBpdCB1c2VzIFNTTCBvcgorICAgICAgICAgaXQgaXMgYSBub24tU1NMIHByb3RvY29sIHR1bm5lbGVkIG92ZXIgdGhlIHNhbWUgaHR0cCBwcm94eSBuYW1lIGFuZAorICAgICAgICAgcG9ydCBudW1iZXIgb3IgaXQgaXMgYSBub24tU1NMIHByb3RvY29sIHdoaWNoIGlzIGFsbG93ZWQgdG8gYmUKKyAgICAgICAgIHVwZ3JhZGVkIHZpYSBUTFMgKi8KKworICAgICAgaWYoKEN1cmxfcmF3X2VxdWFsKG5lZWRsZS0+aGFuZGxlci0+c2NoZW1lLCBjaGVjay0+aGFuZGxlci0+c2NoZW1lKSB8fAorICAgICAgICAgIG5lZWRsZS0+aGFuZGxlci0+cHJvdG9jb2wgJiBjaGVjay0+aGFuZGxlci0+cHJvdG9jb2wpICYmCisgICAgICAgICBDdXJsX3Jhd19lcXVhbChuZWVkbGUtPmhvc3QubmFtZSwgY2hlY2stPmhvc3QubmFtZSkgJiYKKyAgICAgICAgIG5lZWRsZS0+cmVtb3RlX3BvcnQgPT0gY2hlY2stPnJlbW90ZV9wb3J0KSB7CisgICAgICAgIGlmKG5lZWRsZS0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX1NTTCkgeworICAgICAgICAgIC8qIFRoaXMgaXMgYSBTU0wgY29ubmVjdGlvbiBzbyB2ZXJpZnkgdGhhdCB3ZSdyZSB1c2luZyB0aGUgc2FtZQorICAgICAgICAgICAgIFNTTCBvcHRpb25zIGFzIHdlbGwgKi8KKyAgICAgICAgICBpZighQ3VybF9zc2xfY29uZmlnX21hdGNoZXMoJm5lZWRsZS0+c3NsX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoZWNrLT5zc2xfY29uZmlnKSkgeworICAgICAgICAgICAgREVCVUdGKGluZm9mKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3Rpb24gIyVsZCBoYXMgZGlmZmVyZW50IFNTTCBwYXJhbWV0ZXJzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHJldXNlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrLT5jb25uZWN0aW5kZXgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKGNoZWNrLT5zc2xbRklSU1RTT0NLRVRdLnN0YXRlICE9IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlKSB7CisgICAgICAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiAjJWxkIGhhcyBub3Qgc3RhcnRlZCBTU0wgY29ubmVjdCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCByZXVzZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjay0+Y29ubmVjdGluZGV4KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYoKG5lZWRsZS0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fRlRQKSB8fAorICAgICAgICAgICAoKG5lZWRsZS0+aGFuZGxlci0+cHJvdG9jb2wgJiBDVVJMUFJPVE9fSFRUUCkgJiYKKyAgICAgICAgICAgICgoZGF0YS0+c3RhdGUuYXV0aGhvc3Qud2FudD09Q1VSTEFVVEhfTlRMTSkgfHwKKyAgICAgICAgICAgICAoZGF0YS0+c3RhdGUuYXV0aGhvc3Qud2FudD09Q1VSTEFVVEhfTlRMTV9XQikpKSkgeworICAgICAgICAgIC8qIFRoaXMgaXMgRlRQIG9yIEhUVFArTlRMTSwgdmVyaWZ5IHRoYXQgd2UncmUgdXNpbmcgdGhlIHNhbWUgbmFtZQorICAgICAgICAgICAgIGFuZCBwYXNzd29yZCBhcyB3ZWxsICovCisgICAgICAgICAgaWYoIXN0cmVxdWFsKG5lZWRsZS0+dXNlciwgY2hlY2stPnVzZXIpIHx8CisgICAgICAgICAgICAgIXN0cmVxdWFsKG5lZWRsZS0+cGFzc3dkLCBjaGVjay0+cGFzc3dkKSkgeworICAgICAgICAgICAgLyogb25lIG9mIHRoZW0gd2FzIGRpZmZlcmVudCAqLworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1hdGNoID0gVFJVRTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7IC8qIFRoZSByZXF1ZXN0ZWQgbmVlZGxlIGNvbm5lY3Rpb24gaXMgdXNpbmcgYSBwcm94eSwKKyAgICAgICAgICAgICAgaXMgdGhlIGNoZWNrZWQgb25lIHVzaW5nIHRoZSBzYW1lIGhvc3QsIHBvcnQgYW5kIHR5cGU/ICovCisgICAgICBpZihjaGVjay0+Yml0cy5wcm94eSAmJgorICAgICAgICAgKG5lZWRsZS0+cHJveHl0eXBlID09IGNoZWNrLT5wcm94eXR5cGUpICYmCisgICAgICAgICAobmVlZGxlLT5iaXRzLnR1bm5lbF9wcm94eSA9PSBjaGVjay0+Yml0cy50dW5uZWxfcHJveHkpICYmCisgICAgICAgICBDdXJsX3Jhd19lcXVhbChuZWVkbGUtPnByb3h5Lm5hbWUsIGNoZWNrLT5wcm94eS5uYW1lKSAmJgorICAgICAgICAgbmVlZGxlLT5wb3J0ID09IGNoZWNrLT5wb3J0KSB7CisgICAgICAgIC8qIFRoaXMgaXMgdGhlIHNhbWUgcHJveHkgY29ubmVjdGlvbiwgdXNlIGl0ISAqLworICAgICAgICBtYXRjaCA9IFRSVUU7CisgICAgICB9CisgICAgfQorCisgICAgaWYobWF0Y2gpIHsKKyAgICAgIGNoZWNrLT5pbnVzZSA9IFRSVUU7IC8qIG1hcmsgdGhpcyBhcyBiZWluZyBpbiB1c2Ugc28gdGhhdCBubyBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIGluIGEgbXVsdGkgc3RhY2sgbWF5IG5pY2sgaXQgKi8KKworICAgICAgKnVzZXRoaXMgPSBjaGVjazsKKyAgICAgIHJldHVybiBUUlVFOyAvKiB5ZXMsIHdlIGZvdW5kIG9uZSB0byB1c2UhICovCisgICAgfQorICB9CisKKyAgcmV0dXJuIEZBTFNFOyAvKiBubyBtYXRjaGluZyBjb25uZWN0aW5nIGV4aXN0cyAqLworfQorCisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24ga2lsbHMgYW5kIHJlbW92ZXMgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiBpbiB0aGUgY29ubmVjdGlvbgorICogY2FjaGUuIFRoZSBjb25uZWN0aW9uIHRoYXQgaGFzIGJlZW4gdW51c2VkIGZvciB0aGUgbG9uZ2VzdCB0aW1lLgorICoKKyAqIFJldHVybnMgLTEgaWYgaXQgY2FuJ3QgZmluZCBhbnkgdW51c2VkIGNvbm5lY3Rpb24gdG8ga2lsbC4KKyAqLworc3RhdGljIGxvbmcKK0Nvbm5lY3Rpb25LaWxsT25lKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKQoreworICBsb25nIGk7CisgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubjsKKyAgbG9uZyBoaWdoc2NvcmU9LTE7CisgIGxvbmcgY29ubmluZGV4PS0xOworICBsb25nIHNjb3JlOworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisKKyAgbm93ID0gQ3VybF90dm5vdygpOworCisgIGZvcihpPTA7IGRhdGEtPnN0YXRlLmNvbm5jICYmIChpPCBkYXRhLT5zdGF0ZS5jb25uYy0+bnVtKTsgaSsrKSB7CisgICAgY29ubiA9IGRhdGEtPnN0YXRlLmNvbm5jLT5jb25uZWN0c1tpXTsKKworICAgIGlmKCFjb25uIHx8IGNvbm4tPmludXNlKQorICAgICAgY29udGludWU7CisKKyAgICAvKiBTZXQgaGlnaGVyIHNjb3JlIGZvciB0aGUgYWdlIHBhc3NlZCBzaW5jZSB0aGUgY29ubmVjdGlvbiB3YXMgdXNlZCAqLworICAgIHNjb3JlID0gQ3VybF90dmRpZmYobm93LCBjb25uLT5ub3cpOworCisgICAgaWYoc2NvcmUgPiBoaWdoc2NvcmUpIHsKKyAgICAgIGhpZ2hzY29yZSA9IHNjb3JlOworICAgICAgY29ubmluZGV4ID0gaTsKKyAgICB9CisgIH0KKyAgaWYoY29ubmluZGV4ID49IDApIHsKKyAgICAvKiBTZXQgdGhlIGNvbm5lY3Rpb24ncyBvd25lciBjb3JyZWN0bHkgKi8KKyAgICBjb25uID0gZGF0YS0+c3RhdGUuY29ubmMtPmNvbm5lY3RzW2Nvbm5pbmRleF07CisgICAgY29ubi0+ZGF0YSA9IGRhdGE7CisKKyAgICAvKiB0aGUgd2lubmVyIGdldHMgdGhlIGhvbm91ciBvZiBiZWluZyBkaXNjb25uZWN0ZWQgKi8KKyAgICAodm9pZClDdXJsX2Rpc2Nvbm5lY3QoY29ubiwgLyogZGVhZF9jb25uZWN0aW9uICovIEZBTFNFKTsKKworICAgIC8qIGNsZWFuIHRoZSBhcnJheSBlbnRyeSAqLworICAgIGRhdGEtPnN0YXRlLmNvbm5jLT5jb25uZWN0c1tjb25uaW5kZXhdID0gTlVMTDsKKyAgfQorCisgIHJldHVybiBjb25uaW5kZXg7IC8qIHJldHVybiB0aGUgYXZhaWxhYmxlIGluZGV4IG9yIC0xICovCit9CisKKy8qIHRoaXMgY29ubmVjdGlvbiBjYW4gbm93IGJlIG1hcmtlZCAnaWRsZScgKi8KK3N0YXRpYyB2b2lkCitDb25uZWN0aW9uRG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGNvbm4tPmludXNlID0gRkFMU0U7Cit9CisKKy8qCisgKiBUaGUgZ2l2ZW4gaW5wdXQgY29ubmVjdGlvbiBzdHJ1Y3QgcG9pbnRlciBpcyB0byBiZSBzdG9yZWQgaW4gdGhlIGNvbm5lY3Rpb24KKyAqIGNhY2hlLiBJZiB0aGUgY2FjaGUgaXMgYWxyZWFkeSBmdWxsLCBsZWFzdCBpbnRlcmVzdGluZyBleGlzdGluZyBjb25uZWN0aW9uCisgKiAoaWYgYW55KSBnZXRzIGNsb3NlZC4KKyAqCisgKiBUaGUgZ2l2ZW4gY29ubmVjdGlvbiBzaG91bGQgYmUgdW5pcXVlLiBUaGF0IG11c3QndmUgYmVlbiBjaGVja2VkIHByaW9yIHRvCisgKiB0aGlzIGNhbGwuCisgKi8KK3N0YXRpYyB2b2lkIENvbm5lY3Rpb25TdG9yZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGxvbmcgaTsKKyAgZm9yKGk9MDsgaTwgZGF0YS0+c3RhdGUuY29ubmMtPm51bTsgaSsrKSB7CisgICAgaWYoIWRhdGEtPnN0YXRlLmNvbm5jLT5jb25uZWN0c1tpXSkKKyAgICAgIGJyZWFrOworICB9CisgIGlmKGkgPT0gZGF0YS0+c3RhdGUuY29ubmMtPm51bSkgeworICAgIC8qIHRoZXJlIHdhcyBubyByb29tIGF2YWlsYWJsZSwga2lsbCBvbmUgKi8KKyAgICBpID0gQ29ubmVjdGlvbktpbGxPbmUoZGF0YSk7CisgICAgaWYoLTEgIT0gaSkKKyAgICAgIGluZm9mKGRhdGEsICJDb25uZWN0aW9uICgjJWxkKSB3YXMga2lsbGVkIHRvIG1ha2Ugcm9vbSAoaG9sZHMgJWxkKVxuIiwKKyAgICAgICAgICAgIGksIGRhdGEtPnN0YXRlLmNvbm5jLT5udW0pOworICAgIGVsc2UKKyAgICAgIGluZm9mKGRhdGEsICJUaGlzIGNvbm5lY3Rpb24gZGlkIG5vdCBmaXQgaW4gdGhlIGNvbm5lY3Rpb24gY2FjaGVcbiIpOworICB9CisKKyAgY29ubi0+Y29ubmVjdGluZGV4ID0gaTsgLyogTWFrZSB0aGUgY2hpbGQga25vdyB3aGVyZSB0aGUgcG9pbnRlciB0byB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgZGF0YSBpcyBzdG9yZWQuIEJ1dCBub3RlIHRoYXQgdGhpcyAtMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGlzIGlzIG5vdCB3aXRoaW4gdGhlIGNhY2hlIGFuZCB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JhYmx5IG5vdCBjaGVja2VkIGZvciBldmVyeXdoZXJlICh5ZXQpLiAqLworICBjb25uLT5pbnVzZSA9IFRSVUU7CisgIGlmKC0xICE9IGkpIHsKKyAgICAvKiBPbmx5IGRvIHRoaXMgaWYgYSB0cnVlIGluZGV4IHdhcyByZXR1cm5lZCwgaWYgLTEgd2FzIHJldHVybmVkIHRoZXJlCisgICAgICAgaXMgbm8gcm9vbSBpbiB0aGUgY2FjaGUgZm9yIGFuIHVua25vd24gcmVhc29uIGFuZCB3ZSBjYW5ub3Qgc3RvcmUKKyAgICAgICB0aGlzIHRoZXJlLgorCisgICAgICAgVE9ETzogbWFrZSBzdXJlIHdlIHJlYWxseSBjYW4gd29yayB3aXRoIG1vcmUgaGFuZGxlcyB0aGFuIHBvc2l0aW9ucyBpbgorICAgICAgIHRoZSBjYWNoZSwgb3IgcG9zc2libHkgd2Ugc2hvdWxkIChhbGxvdyB0byBhdXRvbWF0aWNhbGx5KSByZXNpemUgdGhlCisgICAgICAgY29ubmVjdGlvbiBjYWNoZSB3aGVuIHdlIGFkZCBtb3JlIGVhc3kgaGFuZGxlcyB0byBhIG11bHRpIGhhbmRsZSEKKyAgICAqLworICAgIGRhdGEtPnN0YXRlLmNvbm5jLT5jb25uZWN0c1tpXSA9IGNvbm47IC8qIGZpbGwgaW4gdGhpcyAqLworICAgIGNvbm4tPmRhdGEgPSBkYXRhOworICB9Cit9CisKKy8qIGFmdGVyIGEgVENQIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IGhhcyBiZWVuIHZlcmlmaWVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMKKyAgIHRoZSBuZXh0IG1hZ2ljIHN0ZXAuCisKKyAgIE5vdGU6IHRoaXMgZnVuY3Rpb24ncyBzdWItZnVuY3Rpb25zIGNhbGwgZmFpbGYoKQorCisqLworQ1VSTGNvZGUgQ3VybF9jb25uZWN0ZWRfcHJveHkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQoreworICBzd2l0Y2goY29ubi0+cHJveHl0eXBlKSB7CisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICBjYXNlIENVUkxQUk9YWV9TT0NLUzU6CisgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRToKKyAgICByZXR1cm4gQ3VybF9TT0NLUzUoY29ubi0+cHJveHl1c2VyLCBjb25uLT5wcm94eXBhc3N3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBjb25uLT5yZW1vdGVfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgRklSU1RTT0NLRVQsIGNvbm4pOworCisgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNDoKKyAgICByZXR1cm4gQ3VybF9TT0NLUzQoY29ubi0+cHJveHl1c2VyLCBjb25uLT5ob3N0Lm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnJlbW90ZV9wb3J0LCBGSVJTVFNPQ0tFVCwgY29ubiwgRkFMU0UpOworCisgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNEE6CisgICAgcmV0dXJuIEN1cmxfU09DS1M0KGNvbm4tPnByb3h5dXNlciwgY29ubi0+aG9zdC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5yZW1vdGVfcG9ydCwgRklSU1RTT0NLRVQsIGNvbm4sIFRSVUUpOworCisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCisgIGNhc2UgQ1VSTFBST1hZX0hUVFA6CisgIGNhc2UgQ1VSTFBST1hZX0hUVFBfMV8wOgorICAgIC8qIGRvIG5vdGhpbmcgaGVyZS4gaGFuZGxlZCBsYXRlci4gKi8KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfSAvKiBzd2l0Y2ggcHJveHl0eXBlICovCisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgQ1VSTGNvZGUgQ29ubmVjdFBsZWFzZShzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbm5lY3RlZCkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBDdXJsX2FkZHJpbmZvICphZGRyOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCisgIGNoYXIgKmhvc3RuYW1lID0gY29ubi0+Yml0cy5wcm94eT9jb25uLT5wcm94eS5uYW1lOmNvbm4tPmhvc3QubmFtZTsKKworICBpbmZvZihkYXRhLCAiQWJvdXQgdG8gY29ubmVjdCgpIHRvICVzJXMgcG9ydCAlbGQgKCMlbGQpXG4iLAorICAgICAgICBjb25uLT5iaXRzLnByb3h5PyJwcm94eSAiOiIiLAorICAgICAgICBob3N0bmFtZSwgY29ubi0+cG9ydCwgY29ubi0+Y29ubmVjdGluZGV4KTsKKyNlbHNlCisgICh2b2lkKWRhdGE7CisjZW5kaWYKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBDb25uZWN0IHRvIHNlcnZlci9wcm94eQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgcmVzdWx0PSBDdXJsX2Nvbm5lY3Rob3N0KGNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5kbnNfZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+c29ja1tGSVJTVFNPQ0tFVF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZCk7CisgIGlmKENVUkxFX09LID09IHJlc3VsdCkgeworICAgIC8qIEFsbCBpcyBjb29sLCB3ZSBzdG9yZSB0aGUgY3VycmVudCBpbmZvcm1hdGlvbiAqLworICAgIGNvbm4tPmlwX2FkZHIgPSBhZGRyOworCisgICAgaWYoKmNvbm5lY3RlZCkgeworICAgICAgcmVzdWx0ID0gQ3VybF9jb25uZWN0ZWRfcHJveHkoY29ubik7CisgICAgICBpZighcmVzdWx0KSB7CisgICAgICAgIGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF0gPSBUUlVFOworICAgICAgICBDdXJsX3BncnNUaW1lKGRhdGEsIFRJTUVSX0NPTk5FQ1QpOyAvKiBjb25uZWN0IGRvbmUgKi8KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZihyZXN1bHQpCisgICAgKmNvbm5lY3RlZCA9IEZBTFNFOyAvKiBtYXJrIGl0IGFzIG5vdCBjb25uZWN0ZWQgKi8KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogdmVyYm9zZWNvbm5lY3QoKSBkaXNwbGF5cyB2ZXJib3NlIGluZm9ybWF0aW9uIGFmdGVyIGEgY29ubmVjdAorICovCisjaWZuZGVmIENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MKK3ZvaWQgQ3VybF92ZXJib3NlY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGlmKGNvbm4tPmRhdGEtPnNldC52ZXJib3NlKQorICAgIGluZm9mKGNvbm4tPmRhdGEsICJDb25uZWN0ZWQgdG8gJXMgKCVzKSBwb3J0ICVsZCAoIyVsZClcbiIsCisgICAgICAgICAgY29ubi0+Yml0cy5wcm94eSA/IGNvbm4tPnByb3h5LmRpc3BuYW1lIDogY29ubi0+aG9zdC5kaXNwbmFtZSwKKyAgICAgICAgICBjb25uLT5pcF9hZGRyX3N0ciwgY29ubi0+cG9ydCwgY29ubi0+Y29ubmVjdGluZGV4KTsKK30KKyNlbmRpZgorCitpbnQgQ3VybF9wcm90b2NvbF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3sKKyAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9fZ2V0c29jaykKKyAgICByZXR1cm4gY29ubi0+aGFuZGxlci0+cHJvdG9fZ2V0c29jayhjb25uLCBzb2NrcywgbnVtc29ja3MpOworICByZXR1cm4gR0VUU09DS19CTEFOSzsKK30KKworaW50IEN1cmxfZG9pbmdfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCit7CisgIGlmKGNvbm4gJiYgY29ubi0+aGFuZGxlci0+ZG9pbmdfZ2V0c29jaykKKyAgICByZXR1cm4gY29ubi0+aGFuZGxlci0+ZG9pbmdfZ2V0c29jayhjb25uLCBzb2NrcywgbnVtc29ja3MpOworICByZXR1cm4gR0VUU09DS19CTEFOSzsKK30KKworLyoKKyAqIFdlIGFyZSBkb2luZyBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0aW5nIGFuZCB0aGlzIGlzIGJlaW5nIGNhbGxlZCBvdmVyIGFuZAorICogb3ZlciBmcm9tIHRoZSBtdWx0aSBpbnRlcmZhY2UgdW50aWwgdGhlIGNvbm5lY3Rpb24gcGhhc2UgaXMgZG9uZSBvbgorICogcHJvdG9jb2wgbGF5ZXIuCisgKi8KKworQ1VSTGNvZGUgQ3VybF9wcm90b2NvbF9jb25uZWN0aW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQoreworICBDVVJMY29kZSByZXN1bHQ9Q1VSTEVfT0s7CisKKyAgaWYoY29ubiAmJiBjb25uLT5oYW5kbGVyLT5jb25uZWN0aW5nKSB7CisgICAgKmRvbmUgPSBGQUxTRTsKKyAgICByZXN1bHQgPSBjb25uLT5oYW5kbGVyLT5jb25uZWN0aW5nKGNvbm4sIGRvbmUpOworICB9CisgIGVsc2UKKyAgICAqZG9uZSA9IFRSVUU7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFdlIGFyZSBET0lORyB0aGlzIGlzIGJlaW5nIGNhbGxlZCBvdmVyIGFuZCBvdmVyIGZyb20gdGhlIG11bHRpIGludGVyZmFjZQorICogdW50aWwgdGhlIERPSU5HIHBoYXNlIGlzIGRvbmUgb24gcHJvdG9jb2wgbGF5ZXIuCisgKi8KKworQ1VSTGNvZGUgQ3VybF9wcm90b2NvbF9kb2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdD1DVVJMRV9PSzsKKworICBpZihjb25uICYmIGNvbm4tPmhhbmRsZXItPmRvaW5nKSB7CisgICAgKmRvbmUgPSBGQUxTRTsKKyAgICByZXN1bHQgPSBjb25uLT5oYW5kbGVyLT5kb2luZyhjb25uLCBkb25lKTsKKyAgfQorICBlbHNlCisgICAgKmRvbmUgPSBUUlVFOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBXZSBoYXZlIGRpc2NvdmVyZWQgdGhhdCB0aGUgVENQIGNvbm5lY3Rpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bCwgd2UgY2FuIG5vdworICogcHJvY2VlZCB3aXRoIHNvbWUgYWN0aW9uLgorICoKKyAqLworQ1VSTGNvZGUgQ3VybF9wcm90b2NvbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpwcm90b2NvbF9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQ9Q1VSTEVfT0s7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKworICAqcHJvdG9jb2xfZG9uZSA9IEZBTFNFOworCisgIGlmKGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF0gJiYgY29ubi0+Yml0cy5wcm90b2Nvbm5zdGFydCkgeworICAgIC8qIFdlIGFscmVhZHkgYXJlIGNvbm5lY3RlZCwgZ2V0IGJhY2suIFRoaXMgbWF5IGhhcHBlbiB3aGVuIHRoZSBjb25uZWN0CisgICAgICAgd29ya2VkIGZpbmUgaW4gdGhlIGZpcnN0IGNhbGwsIGxpa2Ugd2hlbiB3ZSBjb25uZWN0IHRvIGEgbG9jYWwgc2VydmVyCisgICAgICAgb3IgcHJveHkuIE5vdGUgdGhhdCB3ZSBkb24ndCBrbm93IGlmIHRoZSBwcm90b2NvbCBpcyBhY3R1YWxseSBkb25lLgorCisgICAgICAgVW5sZXNzIHRoaXMgcHJvdG9jb2wgZG9lc24ndCBoYXZlIGFueSBwcm90b2NvbC1jb25uZWN0IGNhbGxiYWNrLCBhcworICAgICAgIHRoZW4gd2Uga25vdyB3ZSdyZSBkb25lLiAqLworICAgIGlmKCFjb25uLT5oYW5kbGVyLT5jb25uZWN0aW5nKQorICAgICAgKnByb3RvY29sX2RvbmUgPSBUUlVFOworCisgICAgcmV0dXJuIENVUkxFX09LOworICB9CisKKyAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9DT05ORUNUKTsgLyogY29ubmVjdCBkb25lICovCisgIEN1cmxfdmVyYm9zZWNvbm5lY3QoY29ubik7CisKKyAgaWYoIWNvbm4tPmJpdHMucHJvdG9jb25uc3RhcnQpIHsKKworICAgIC8qIFNldCBzdGFydCB0aW1lIGhlcmUgZm9yIHRpbWVvdXQgcHVycG9zZXMgaW4gdGhlIGNvbm5lY3QgcHJvY2VkdXJlLCBpdAorICAgICAgIGlzIGxhdGVyIHNldCBhZ2FpbiBmb3IgdGhlIHByb2dyZXNzIG1ldGVyIHB1cnBvc2UgKi8KKyAgICBjb25uLT5ub3cgPSBDdXJsX3R2bm93KCk7CisKKyAgICByZXN1bHQgPSBDdXJsX3Byb3h5X2Nvbm5lY3QoY29ubik7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmKGNvbm4tPmhhbmRsZXItPmNvbm5lY3RfaXQpIHsKKyAgICAgIC8qIGlzIHRoZXJlIGEgcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdCgpIHByb2NlZHVyZT8gKi8KKworICAgICAgLyogQ2FsbCB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdCBmdW5jdGlvbiAqLworICAgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+Y29ubmVjdF9pdChjb25uLCBwcm90b2NvbF9kb25lKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgKnByb3RvY29sX2RvbmUgPSBUUlVFOworCisgICAgLyogaXQgaGFzIHN0YXJ0ZWQsIHBvc3NpYmx5IGV2ZW4gY29tcGxldGVkIGJ1dCB0aGF0IGtub3dsZWRnZSBpc24ndCBzdG9yZWQKKyAgICAgICBpbiB0aGlzIGJpdCEgKi8KKyAgICBpZighcmVzdWx0KQorICAgICAgY29ubi0+Yml0cy5wcm90b2Nvbm5zdGFydCA9IFRSVUU7CisgIH0KKworICByZXR1cm4gcmVzdWx0OyAvKiBwYXNzIGJhY2sgc3RhdHVzICovCit9CisKKy8qCisgKiBIZWxwZXJzIGZvciBJRE5BIGNvbnZlcnRpb25zLgorICovCitzdGF0aWMgYm9vbCBpc19BU0NJSV9uYW1lKGNvbnN0IGNoYXIgKmhvc3RuYW1lKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpjaCA9IChjb25zdCB1bnNpZ25lZCBjaGFyKilob3N0bmFtZTsKKworICB3aGlsZSgqY2gpIHsKKyAgICBpZigqY2grKyAmIDB4ODApCisgICAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKKyNpZmRlZiBVU0VfTElCSUROCisvKgorICogQ2hlY2sgaWYgY2hhcmFjdGVycyBpbiBob3N0bmFtZSBpcyBhbGxvd2VkIGluIFRvcCBMZXZlbCBEb21haW4uCisgKi8KK3N0YXRpYyBib29sIHRsZF9jaGVja19uYW1lKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYWNlX2hvc3RuYW1lKQoreworICBzaXplX3QgZXJyX3BvczsKKyAgY2hhciAqdWNfbmFtZSA9IE5VTEw7CisgIGludCByYzsKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUworICBjb25zdCBjaGFyICp0bGRfZXJybXNnID0gIjxubyBtc2c+IjsKKyNlbHNlCisgICh2b2lkKWRhdGE7CisjZW5kaWYKKworICAvKiBDb252ZXJ0IChhbmQgZG93bmNhc2UpIEFDRS1uYW1lIGJhY2sgaW50byBsb2NhbGUncyBjaGFyYWN0ZXIgc2V0ICovCisgIHJjID0gaWRuYV90b191bmljb2RlX2x6bHooYWNlX2hvc3RuYW1lLCAmdWNfbmFtZSwgMCk7CisgIGlmKHJjICE9IElETkFfU1VDQ0VTUykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmMgPSB0bGRfY2hlY2tfbHoodWNfbmFtZSwgJmVycl9wb3MsIE5VTEwpOworI2lmbmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCisjaWZkZWYgSEFWRV9UTERfU1RSRVJST1IKKyAgaWYocmMgIT0gVExEX1NVQ0NFU1MpCisgICAgdGxkX2Vycm1zZyA9IHRsZF9zdHJlcnJvcigoVGxkX3JjKXJjKTsKKyNlbmRpZgorICBpZihyYyA9PSBUTERfSU5WQUxJRCkKKyAgICBpbmZvZihkYXRhLCAiV0FSTklORzogJXM7IHBvcyAldSA9IGAlYycvMHglMDJYXG4iLAorICAgICAgICAgIHRsZF9lcnJtc2csIGVycl9wb3MsIHVjX25hbWVbZXJyX3Bvc10sCisgICAgICAgICAgdWNfbmFtZVtlcnJfcG9zXSAmIDI1NSk7CisgIGVsc2UgaWYocmMgIT0gVExEX1NVQ0NFU1MpCisgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IFRMRCBjaGVjayBmb3IgJXMgZmFpbGVkOyAlc1xuIiwKKyAgICAgICAgICB1Y19uYW1lLCB0bGRfZXJybXNnKTsKKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTICovCisgIGlmKHVjX25hbWUpCisgICAgIGlkbl9mcmVlKHVjX25hbWUpOworICBpZihyYyAhPSBUTERfU1VDQ0VTUykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYKKworLyoKKyAqIFBlcmZvcm0gYW55IG5lY2Vzc2FyeSBJRE4gY29udmVyc2lvbiBvZiBob3N0bmFtZQorICovCitzdGF0aWMgdm9pZCBmaXhfaG9zdG5hbWUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBzdHJ1Y3QgaG9zdG5hbWUgKmhvc3QpCit7CisjaWZuZGVmIFVTRV9MSUJJRE4KKyAgKHZvaWQpZGF0YTsKKyAgKHZvaWQpY29ubjsKKyNlbGlmIGRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKKyAgKHZvaWQpY29ubjsKKyNlbmRpZgorCisgIC8qIHNldCB0aGUgbmFtZSB3ZSB1c2UgdG8gZGlzcGxheSB0aGUgaG9zdCBuYW1lICovCisgIGhvc3QtPmRpc3BuYW1lID0gaG9zdC0+bmFtZTsKKyAgaWYoIWlzX0FTQ0lJX25hbWUoaG9zdC0+bmFtZSkpIHsKKyNpZmRlZiBVU0VfTElCSUROCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIENoZWNrIG5hbWUgZm9yIG5vbi1BU0NJSSBhbmQgY29udmVydCBob3N0bmFtZSB0byBBQ0UgZm9ybS4KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIGlmKHN0cmluZ3ByZXBfY2hlY2tfdmVyc2lvbihMSUJJRE5fUkVRVUlSRURfVkVSU0lPTikpIHsKKyAgICBjaGFyICphY2VfaG9zdG5hbWUgPSBOVUxMOworICAgIGludCByYyA9IGlkbmFfdG9fYXNjaWlfbHooaG9zdC0+bmFtZSwgJmFjZV9ob3N0bmFtZSwgMCk7CisgICAgaW5mb2YgKGRhdGEsICJJbnB1dCBkb21haW4gZW5jb2RlZCBhcyBgJXMnXG4iLAorICAgICAgICAgICBzdHJpbmdwcmVwX2xvY2FsZV9jaGFyc2V0ICgpKTsKKyAgICBpZihyYyAhPSBJRE5BX1NVQ0NFU1MpCisgICAgICBpbmZvZihkYXRhLCAiRmFpbGVkIHRvIGNvbnZlcnQgJXMgdG8gQUNFOyAlc1xuIiwKKyAgICAgICAgICAgIGhvc3QtPm5hbWUsIEN1cmxfaWRuX3N0cmVycm9yKGNvbm4scmMpKTsKKyAgICBlbHNlIHsKKyAgICAgIC8qIHRsZF9jaGVja19uYW1lKCkgZGlzcGxheXMgYSB3YXJuaW5nIGlmIHRoZSBob3N0IG5hbWUgY29udGFpbnMKKyAgICAgICAgICJpbGxlZ2FsIiBjaGFyYWN0ZXJzIGZvciB0aGlzIFRMRCAqLworICAgICAgKHZvaWQpdGxkX2NoZWNrX25hbWUoZGF0YSwgYWNlX2hvc3RuYW1lKTsKKworICAgICAgaG9zdC0+ZW5jYWxsb2MgPSBhY2VfaG9zdG5hbWU7CisgICAgICAvKiBjaGFuZ2UgdGhlIG5hbWUgcG9pbnRlciB0byBwb2ludCB0byB0aGUgZW5jb2RlZCBob3N0bmFtZSAqLworICAgICAgaG9zdC0+bmFtZSA9IGhvc3QtPmVuY2FsbG9jOworICAgIH0KKyAgfQorI2VsaWYgZGVmaW5lZChVU0VfV0lOMzJfSUROKQorICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBDaGVjayBuYW1lIGZvciBub24tQVNDSUkgYW5kIGNvbnZlcnQgaG9zdG5hbWUgdG8gQUNFIGZvcm0uCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIGNoYXIgKmFjZV9ob3N0bmFtZSA9IE5VTEw7CisgICAgaW50IHJjID0gY3VybF93aW4zMl9pZG5fdG9fYXNjaWkoaG9zdC0+bmFtZSwgJmFjZV9ob3N0bmFtZSk7CisgICAgaWYocmMgPT0gMCkKKyAgICAgIGluZm9mKGRhdGEsICJGYWlsZWQgdG8gY29udmVydCAlcyB0byBBQ0U7XG4iLAorICAgICAgICAgICAgaG9zdC0+bmFtZSk7CisgICAgZWxzZSB7CisgICAgICBob3N0LT5lbmNhbGxvYyA9IGFjZV9ob3N0bmFtZTsKKyAgICAgIC8qIGNoYW5nZSB0aGUgbmFtZSBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSBlbmNvZGVkIGhvc3RuYW1lICovCisgICAgICBob3N0LT5uYW1lID0gaG9zdC0+ZW5jYWxsb2M7CisgICAgfQorI2Vsc2UKKyAgICBpbmZvZihkYXRhLCAiSUROIHN1cHBvcnQgbm90IHByZXNlbnQsIGNhbid0IHBhcnNlIFVuaWNvZGUgZG9tYWluc1xuIik7CisjZW5kaWYKKyAgfQorfQorCitzdGF0aWMgdm9pZCBsbGlzdF9kdG9yKHZvaWQgKnVzZXIsIHZvaWQgKmVsZW1lbnQpCit7CisgICh2b2lkKXVzZXI7CisgICh2b2lkKWVsZW1lbnQ7CisgIC8qIERvIG5vdGhpbmcgKi8KK30KKworLyoKKyAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IGNvbm5lY3RkYXRhIG9iamVjdC4KKyAqLworc3RhdGljIHN0cnVjdCBjb25uZWN0ZGF0YSAqYWxsb2NhdGVfY29ubihzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSkKK3sKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY29ubmVjdGRhdGEpKTsKKyAgaWYoIWNvbm4pCisgICAgcmV0dXJuIE5VTEw7CisKKyAgY29ubi0+aGFuZGxlciA9ICZDdXJsX2hhbmRsZXJfZHVtbXk7ICAvKiBCZSBzdXJlIHdlIGhhdmUgYSBoYW5kbGVyIGRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGZyb20gc3RhcnQgdG8gYXZvaWQgTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpdHVhdGlvbnMgYW5kIGNoZWNrcyAqLworCisgIC8qIGFuZCB3ZSBzZXR1cCBhIGZldyBmaWVsZHMgaW4gY2FzZSB3ZSBlbmQgdXAgYWN0dWFsbHkgdXNpbmcgdGhpcyBzdHJ1Y3QgKi8KKworICBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSA9IENVUkxfU09DS0VUX0JBRDsgICAgIC8qIG5vIGZpbGUgZGVzY3JpcHRvciAqLworICBjb25uLT5zb2NrW1NFQ09OREFSWVNPQ0tFVF0gPSBDVVJMX1NPQ0tFVF9CQUQ7IC8qIG5vIGZpbGUgZGVzY3JpcHRvciAqLworICBjb25uLT5jb25uZWN0aW5kZXggPSAtMTsgICAgLyogbm8gaW5kZXggKi8KKyAgY29ubi0+cG9ydCA9IC0xOyAvKiB1bmtub3duIGF0IHRoaXMgcG9pbnQgKi8KKworICAvKiBEZWZhdWx0IHByb3RvY29sLWluZGVwZW5kZW50IGJlaGF2aW9yIGRvZXNuJ3Qgc3VwcG9ydCBwZXJzaXN0ZW50CisgICAgIGNvbm5lY3Rpb25zLCBzbyB3ZSBzZXQgdGhpcyB0byBmb3JjZS1jbG9zZS4gUHJvdG9jb2xzIHRoYXQgc3VwcG9ydAorICAgICB0aGlzIG5lZWQgdG8gc2V0IHRoaXMgdG8gRkFMU0UgaW4gdGhlaXIgImN1cmxfZG8iIGZ1bmN0aW9ucy4gKi8KKyAgY29ubi0+Yml0cy5jbG9zZSA9IFRSVUU7CisKKyAgLyogU3RvcmUgY3JlYXRpb24gdGltZSB0byBoZWxwIGZ1dHVyZSBjbG9zZSBkZWNpc2lvbiBtYWtpbmcgKi8KKyAgY29ubi0+Y3JlYXRlZCA9IEN1cmxfdHZub3coKTsKKworICBjb25uLT5kYXRhID0gZGF0YTsgLyogU2V0dXAgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gdGhpcyBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIFNlc3Npb25IYW5kbGUgKi8KKworICBjb25uLT5wcm94eXR5cGUgPSBkYXRhLT5zZXQucHJveHl0eXBlOyAvKiB0eXBlICovCisKKyNpZmRlZiBDVVJMX0RJU0FCTEVfUFJPWFkKKworICBjb25uLT5iaXRzLnByb3h5ID0gRkFMU0U7CisgIGNvbm4tPmJpdHMuaHR0cHByb3h5ID0gRkFMU0U7CisgIGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QgPSBGQUxTRTsKKyAgY29ubi0+Yml0cy50dW5uZWxfcHJveHkgPSBGQUxTRTsKKworI2Vsc2UgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCisKKyAgLyogbm90ZSB0aGF0IHRoZXNlIHR3byBwcm94eSBiaXRzIGFyZSBub3cganVzdCBvbiB3aGF0IGxvb2tzIHRvIGJlCisgICAgIHJlcXVlc3RlZCwgdGhleSBtYXkgYmUgYWx0ZXJlZCBkb3duIHRoZSByb2FkICovCisgIGNvbm4tPmJpdHMucHJveHkgPSAoZGF0YS0+c2V0LnN0cltTVFJJTkdfUFJPWFldICYmCisgICAgICAgICAgICAgICAgICAgICAgKmRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZXSk/VFJVRTpGQUxTRTsKKyAgY29ubi0+Yml0cy5odHRwcHJveHkgPSAoY29ubi0+Yml0cy5wcm94eSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ubi0+cHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX0hUVFBfMV8wKSk/VFJVRTpGQUxTRTsKKyAgY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCA9CisgICAgKE5VTEwgIT0gZGF0YS0+c2V0LnN0cltTVFJJTkdfUFJPWFlVU0VSTkFNRV0pP1RSVUU6RkFMU0U7CisgIGNvbm4tPmJpdHMudHVubmVsX3Byb3h5ID0gZGF0YS0+c2V0LnR1bm5lbF90aHJ1X2h0dHBwcm94eTsKKworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9QUk9YWSAqLworCisgIGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgPSAoTlVMTCAhPSBkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSTkFNRV0pP1RSVUU6RkFMU0U7CisgIGNvbm4tPmJpdHMuZnRwX3VzZV9lcHN2ID0gZGF0YS0+c2V0LmZ0cF91c2VfZXBzdjsKKyAgY29ubi0+Yml0cy5mdHBfdXNlX2VwcnQgPSBkYXRhLT5zZXQuZnRwX3VzZV9lcHJ0OworCisgIGNvbm4tPnZlcmlmeXBlZXIgPSBkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXI7CisgIGNvbm4tPnZlcmlmeWhvc3QgPSBkYXRhLT5zZXQuc3NsLnZlcmlmeWhvc3Q7CisKKyAgY29ubi0+aXBfdmVyc2lvbiA9IGRhdGEtPnNldC5pcHZlcjsKKworI2lmIGRlZmluZWQoVVNFX05UTE0pICYmIGRlZmluZWQoTlRMTV9XQl9FTkFCTEVEKQorICBjb25uLT5udGxtX2F1dGhfaGxwcl9zb2NrZXQgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIGNvbm4tPm50bG1fYXV0aF9obHByX3BpZCA9IDA7CisgIGNvbm4tPmNoYWxsZW5nZV9oZWFkZXIgPSBOVUxMOworICBjb25uLT5yZXNwb25zZV9oZWFkZXIgPSBOVUxMOworI2VuZGlmCisKKyAgaWYoZGF0YS0+bXVsdGkgJiYgQ3VybF9tdWx0aV9jYW5QaXBlbGluZShkYXRhLT5tdWx0aSkgJiYKKyAgICAgICFjb25uLT5tYXN0ZXJfYnVmZmVyKSB7CisgICAgLyogQWxsb2NhdGUgbWFzdGVyX2J1ZmZlciB0byBiZSB1c2VkIGZvciBwaXBlbGluaW5nICovCisgICAgY29ubi0+bWFzdGVyX2J1ZmZlciA9IGNhbGxvYyhCVUZTSVpFLCBzaXplb2YgKGNoYXIpKTsKKyAgICBpZighY29ubi0+bWFzdGVyX2J1ZmZlcikKKyAgICAgIGdvdG8gZXJyb3I7CisgIH0KKworICAvKiBJbml0aWFsaXplIHRoZSBwaXBlbGluZSBsaXN0cyAqLworICBjb25uLT5zZW5kX3BpcGUgPSBDdXJsX2xsaXN0X2FsbG9jKChjdXJsX2xsaXN0X2R0b3IpIGxsaXN0X2R0b3IpOworICBjb25uLT5yZWN2X3BpcGUgPSBDdXJsX2xsaXN0X2FsbG9jKChjdXJsX2xsaXN0X2R0b3IpIGxsaXN0X2R0b3IpOworICBjb25uLT5wZW5kX3BpcGUgPSBDdXJsX2xsaXN0X2FsbG9jKChjdXJsX2xsaXN0X2R0b3IpIGxsaXN0X2R0b3IpOworICBjb25uLT5kb25lX3BpcGUgPSBDdXJsX2xsaXN0X2FsbG9jKChjdXJsX2xsaXN0X2R0b3IpIGxsaXN0X2R0b3IpOworICBpZighY29ubi0+c2VuZF9waXBlIHx8ICFjb25uLT5yZWN2X3BpcGUgfHwgIWNvbm4tPnBlbmRfcGlwZSB8fAorICAgICAhY29ubi0+ZG9uZV9waXBlKQorICAgIGdvdG8gZXJyb3I7CisKKyNpZiBkZWZpbmVkKEhBVkVfS1JCNCkgfHwgZGVmaW5lZChIQVZFX0dTU0FQSSkKKyAgY29ubi0+ZGF0YV9wcm90ID0gUFJPVF9DTEVBUjsKKyNlbmRpZgorCisgIC8qIFN0b3JlIHRoZSBsb2NhbCBiaW5kIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoaXMgY29ubmVjdGlvbiAqLworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19ERVZJQ0VdKSB7CisgICAgY29ubi0+bG9jYWxkZXYgPSBzdHJkdXAoZGF0YS0+c2V0LnN0cltTVFJJTkdfREVWSUNFXSk7CisgICAgaWYoIWNvbm4tPmxvY2FsZGV2KQorICAgICAgZ290byBlcnJvcjsKKyAgfQorICBjb25uLT5sb2NhbHBvcnRyYW5nZSA9IGRhdGEtPnNldC5sb2NhbHBvcnRyYW5nZTsKKyAgY29ubi0+bG9jYWxwb3J0ID0gZGF0YS0+c2V0LmxvY2FscG9ydDsKKworICAvKiB0aGUgY2xvc2Ugc29ja2V0IHN0dWZmIG5lZWRzIHRvIGJlIGNvcGllZCB0byB0aGUgY29ubmVjdGlvbiBzdHJ1Y3QgYXMKKyAgICAgaXQgbWF5IGxpdmUgb24gd2l0aG91dCAodGhpcyBzcGVjaWZpYykgU2Vzc2lvbkhhbmRsZSAqLworICBjb25uLT5mY2xvc2Vzb2NrZXQgPSBkYXRhLT5zZXQuZmNsb3Nlc29ja2V0OworICBjb25uLT5jbG9zZXNvY2tldF9jbGllbnQgPSBkYXRhLT5zZXQuY2xvc2Vzb2NrZXRfY2xpZW50OworCisgIHJldHVybiBjb25uOworICBlcnJvcjoKKworICBDdXJsX2xsaXN0X2Rlc3Ryb3koY29ubi0+c2VuZF9waXBlLCBOVUxMKTsKKyAgQ3VybF9sbGlzdF9kZXN0cm95KGNvbm4tPnJlY3ZfcGlwZSwgTlVMTCk7CisgIEN1cmxfbGxpc3RfZGVzdHJveShjb25uLT5wZW5kX3BpcGUsIE5VTEwpOworICBDdXJsX2xsaXN0X2Rlc3Ryb3koY29ubi0+ZG9uZV9waXBlLCBOVUxMKTsKKworICBjb25uLT5zZW5kX3BpcGUgPSBOVUxMOworICBjb25uLT5yZWN2X3BpcGUgPSBOVUxMOworICBjb25uLT5wZW5kX3BpcGUgPSBOVUxMOworICBjb25uLT5kb25lX3BpcGUgPSBOVUxMOworCisgIEN1cmxfc2FmZWZyZWUoY29ubi0+bWFzdGVyX2J1ZmZlcik7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+bG9jYWxkZXYpOworICBDdXJsX3NhZmVmcmVlKGNvbm4pOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIENVUkxjb2RlIGZpbmRwcm90b2NvbChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm90b3N0cikKK3sKKyAgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciAqIGNvbnN0ICpwcDsKKyAgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciAqcDsKKworICAvKiBTY2FuIHByb3RvY29sIGhhbmRsZXIgdGFibGUgYW5kIG1hdGNoIGFnYWluc3QgJ3Byb3Rvc3RyJyB0byBzZXQgYSBmZXcKKyAgICAgdmFyaWFibGVzIGJhc2VkIG9uIHRoZSBVUkwuIE5vdyB0aGF0IHRoZSBoYW5kbGVyIG1heSBiZSBjaGFuZ2VkIGxhdGVyCisgICAgIHdoZW4gdGhlIHByb3RvY29sIHNwZWNpZmljIHNldHVwIGZ1bmN0aW9uIGlzIGNhbGxlZC4gKi8KKyAgZm9yKHBwID0gcHJvdG9jb2xzOyAocCA9ICpwcCkgIT0gTlVMTDsgcHArKykgeworICAgIGlmKEN1cmxfcmF3X2VxdWFsKHAtPnNjaGVtZSwgcHJvdG9zdHIpKSB7CisgICAgICAvKiBQcm90b2NvbCBmb3VuZCBpbiB0YWJsZS4gQ2hlY2sgaWYgYWxsb3dlZCAqLworICAgICAgaWYoIShkYXRhLT5zZXQuYWxsb3dlZF9wcm90b2NvbHMgJiBwLT5wcm90b2NvbCkpCisgICAgICAgIC8qIG5vcGUsIGdldCBvdXQgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGl0IGlzIGFsbG93ZWQgZm9yICJub3JtYWwiIHJlcXVlc3QsIG5vdyBkbyBhbiBleHRyYSBjaGVjayBpZiB0aGlzIGlzCisgICAgICAgICB0aGUgcmVzdWx0IG9mIGEgcmVkaXJlY3QgKi8KKyAgICAgIGlmKGRhdGEtPnN0YXRlLnRoaXNfaXNfYV9mb2xsb3cgJiYKKyAgICAgICAgICEoZGF0YS0+c2V0LnJlZGlyX3Byb3RvY29scyAmIHAtPnByb3RvY29sKSkKKyAgICAgICAgLyogbm9wZSwgZ2V0IG91dCAqLworICAgICAgICBicmVhazsKKworICAgICAgLyogUGVyZm9ybSBzZXR1cCBjb21wbGVtZW50IGlmIHNvbWUuICovCisgICAgICBjb25uLT5oYW5kbGVyID0gY29ubi0+Z2l2ZW4gPSBwOworCisgICAgICAvKiAncG9ydCcgYW5kICdyZW1vdGVfcG9ydCcgYXJlIHNldCBpbiBzZXR1cF9jb25uZWN0aW9uX2ludGVybmFscygpICovCisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisgICAgfQorICB9CisKKworICAvKiBUaGUgcHJvdG9jb2wgd2FzIG5vdCBmb3VuZCBpbiB0aGUgdGFibGUsIGJ1dCB3ZSBkb24ndCBoYXZlIHRvIGFzc2lnbiBpdAorICAgICB0byBhbnl0aGluZyBzaW5jZSBpdCBpcyBhbHJlYWR5IGFzc2lnbmVkIHRvIGEgZHVtbXktc3RydWN0IGluIHRoZQorICAgICBjcmVhdGVfY29ubigpIGZ1bmN0aW9uIHdoZW4gdGhlIGNvbm5lY3RkYXRhIHN0cnVjdCBpcyBhbGxvY2F0ZWQuICovCisgIGZhaWxmKGRhdGEsICJQcm90b2NvbCAlcyBub3Qgc3VwcG9ydGVkIG9yIGRpc2FibGVkIGluICIgTElCQ1VSTF9OQU1FLAorICAgICAgICBwcm90b3N0cik7CisKKyAgcmV0dXJuIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MOworfQorCisvKgorICogUGFyc2UgVVJMIGFuZCBmaWxsIGluIHRoZSByZWxldmFudCBtZW1iZXJzIG9mIHRoZSBjb25uZWN0aW9uIHN0cnVjdC4KKyAqLworc3RhdGljIENVUkxjb2RlIHBhcnNldXJsYW5kZmlsbGNvbm4oc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpwcm90X21pc3NpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcGFzc3dkKQoreworICBjaGFyICphdDsKKyAgY2hhciAqZnJhZ21lbnQ7CisgIGNoYXIgKnBhdGggPSBkYXRhLT5zdGF0ZS5wYXRoOworICBjaGFyICpxdWVyeTsKKyAgaW50IHJjOworICBjaGFyIHByb3RvYnVmWzE2XTsKKyAgY29uc3QgY2hhciAqcHJvdG9wOworICBDVVJMY29kZSByZXN1bHQ7CisKKyAgKnByb3RfbWlzc2luZyA9IEZBTFNFOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIFBhcnNlIHRoZSBVUkwuCisgICAqCisgICAqIFdlIG5lZWQgdG8gcGFyc2UgdGhlIHVybCBldmVuIHdoZW4gdXNpbmcgdGhlIHByb3h5LCBiZWNhdXNlIHdlIHdpbGwgbmVlZAorICAgKiB0aGUgaG9zdG5hbWUgYW5kIHBvcnQgaW4gY2FzZSB3ZSBhcmUgdHJ5aW5nIHRvIFNTTCBjb25uZWN0IHRocm91Z2ggdGhlCisgICAqIHByb3h5IC0tIGFuZCB3ZSBkb24ndCBrbm93IGlmIHdlIHdpbGwgbmVlZCB0byB1c2UgU1NMIHVudGlsIHdlIHBhcnNlIHRoZQorICAgKiB1cmwgLi4uCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIGlmKCgyID09IHNzY2FuZihkYXRhLT5jaGFuZ2UudXJsLCAiJTE1W146XTolW15cbl0iLAorICAgICAgICAgICAgICAgICAgcHJvdG9idWYsIHBhdGgpKSAmJgorICAgICBDdXJsX3Jhd19lcXVhbChwcm90b2J1ZiwgImZpbGUiKSkgeworICAgIGlmKHBhdGhbMF0gPT0gJy8nICYmIHBhdGhbMV0gPT0gJy8nKSB7CisgICAgICAvKiBBbGxvdyBvbWl0dGVkIGhvc3RuYW1lIChlLmcuIGZpbGU6LzxwYXRoPikuICBUaGlzIGlzIG5vdCBzdHJpY3RseQorICAgICAgICogc3BlYWtpbmcgYSB2YWxpZCBmaWxlOiBVUkwgYnkgUkZDIDE3MzgsIGJ1dCB0cmVhdGluZyBmaWxlOi88cGF0aD4gYXMKKyAgICAgICAqIGZpbGU6Ly9sb2NhbGhvc3QvPHBhdGg+IGlzIHNpbWlsYXIgdG8gaG93IG90aGVyIHNjaGVtZXMgdHJlYXQgbWlzc2luZworICAgICAgICogaG9zdG5hbWVzLiAgU2VlIFJGQyAxODA4LiAqLworCisgICAgICAvKiBUaGlzIGNhbm5vdCBiZSBkb25lIHdpdGggc3RyY3B5KCkgaW4gYSBwb3J0YWJsZSBtYW5uZXIsIHNpbmNlIHRoZQorICAgICAgICAgbWVtb3J5IGFyZWFzIG92ZXJsYXAhICovCisgICAgICBtZW1tb3ZlKHBhdGgsIHBhdGggKyAyLCBzdHJsZW4ocGF0aCArIDIpKzEpOworICAgIH0KKyAgICAvKgorICAgICAqIHdlIGRlYWwgd2l0aCBmaWxlOi8vPGhvc3Q+LzxwYXRoPiBkaWZmZXJlbnRseSBzaW5jZSBpdCBzdXBwb3J0cyBubworICAgICAqIGhvc3RuYW1lIG90aGVyIHRoYW4gImxvY2FsaG9zdCIgYW5kICIxMjcuMC4wLjEiLCB3aGljaCBpcyB1bmlxdWUgYW1vbmcKKyAgICAgKiB0aGUgVVJMIHByb3RvY29scyBzcGVjaWZpZWQgaW4gUkZDIDE3MzgKKyAgICAgKi8KKyAgICBpZihwYXRoWzBdICE9ICcvJykgeworICAgICAgLyogdGhlIFVSTCBpbmNsdWRlZCBhIGhvc3QgbmFtZSwgd2UgaWdub3JlIGhvc3QgbmFtZXMgaW4gZmlsZTovLyBVUkxzCisgICAgICAgICBhcyB0aGUgc3RhbmRhcmRzIGRvbid0IGRlZmluZSB3aGF0IHRvIGRvIHdpdGggdGhlbSAqLworICAgICAgY2hhciAqcHRyPXN0cmNocihwYXRoLCAnLycpOworICAgICAgaWYocHRyKSB7CisgICAgICAgIC8qIHRoZXJlIHdhcyBhIHNsYXNoIHByZXNlbnQKKworICAgICAgICAgICBSRkMxNzM4IChzZWN0aW9uIDMuMSwgcGFnZSA1KSBzYXlzOgorCisgICAgICAgICAgIFRoZSByZXN0IG9mIHRoZSBsb2NhdG9yIGNvbnNpc3RzIG9mIGRhdGEgc3BlY2lmaWMgdG8gdGhlIHNjaGVtZSwKKyAgICAgICAgICAgYW5kIGlzIGtub3duIGFzIHRoZSAidXJsLXBhdGgiLiBJdCBzdXBwbGllcyB0aGUgZGV0YWlscyBvZiBob3cgdGhlCisgICAgICAgICAgIHNwZWNpZmllZCByZXNvdXJjZSBjYW4gYmUgYWNjZXNzZWQuIE5vdGUgdGhhdCB0aGUgIi8iIGJldHdlZW4gdGhlCisgICAgICAgICAgIGhvc3QgKG9yIHBvcnQpIGFuZCB0aGUgdXJsLXBhdGggaXMgTk9UIHBhcnQgb2YgdGhlIHVybC1wYXRoLgorCisgICAgICAgICAgIEFzIG1vc3QgYWdlbnRzIHVzZSBmaWxlOi8vbG9jYWxob3N0L2ZvbyB0byBnZXQgJy9mb28nIGFsdGhvdWdoIHRoZQorICAgICAgICAgICBzbGFzaCBwcmVjZWRpbmcgZm9vIGlzIGEgc2VwYXJhdG9yIGFuZCBub3QgYSBzbGFzaCBmb3IgdGhlIHBhdGgsCisgICAgICAgICAgIGEgVVJMIGFzIGZpbGU6Ly9sb2NhbGhvc3QvL2ZvbyBtdXN0IGJlIHZhbGlkIGFzIHdlbGwsIHRvIHJlZmVyIHRvCisgICAgICAgICAgIHRoZSBzYW1lIGZpbGUgd2l0aCBhbiBhYnNvbHV0ZSBwYXRoLgorICAgICAgICAqLworCisgICAgICAgIGlmKHB0clsxXSAmJiAoJy8nID09IHB0clsxXSkpCisgICAgICAgICAgLyogaWYgdGhlcmUgd2FzIHR3byBzbGFzaGVzLCB3ZSBza2lwIHRoZSBmaXJzdCBvbmUgYXMgdGhhdCBpcyB0aGVuCisgICAgICAgICAgICAgdXNlZCB0cnVseSBhcyBhIHNlcGFyYXRvciAqLworICAgICAgICAgIHB0cisrOworCisgICAgICAgIC8qIFRoaXMgY2Fubm90IGJlIG1hZGUgd2l0aCBzdHJjcHksIGFzIHRoZSBtZW1vcnkgY2h1bmtzIG92ZXJsYXAhICovCisgICAgICAgIG1lbW1vdmUocGF0aCwgcHRyLCBzdHJsZW4ocHRyKSsxKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwcm90b3AgPSAiZmlsZSI7IC8qIHByb3RvY29sIHN0cmluZyAqLworICB9CisgIGVsc2UgeworICAgIC8qIGNsZWFyIHBhdGggKi8KKyAgICBwYXRoWzBdPTA7CisKKyAgICBpZigyID4gc3NjYW5mKGRhdGEtPmNoYW5nZS51cmwsCisgICAgICAgICAgICAgICAgICAgIiUxNVteXG46XTovLyVbXlxuLz9dJVteXG5dIiwKKyAgICAgICAgICAgICAgICAgICBwcm90b2J1ZiwKKyAgICAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsIHBhdGgpKSB7CisKKyAgICAgIC8qCisgICAgICAgKiBUaGUgVVJMIHdhcyBiYWRseSBmb3JtYXR0ZWQsIGxldCdzIHRyeSB0aGUgYnJvd3Nlci1zdHlsZSBfd2l0aG91dF8KKyAgICAgICAqIHByb3RvY29sIHNwZWNpZmllZCBsaWtlICdodHRwOi8vJy4KKyAgICAgICAqLworICAgICAgcmMgPSBzc2NhbmYoZGF0YS0+Y2hhbmdlLnVybCwgIiVbXlxuLz9dJVteXG5dIiwgY29ubi0+aG9zdC5uYW1lLCBwYXRoKTsKKyAgICAgIGlmKDEgPiByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBXZSBjb3VsZG4ndCBldmVuIGdldCB0aGlzIGZvcm1hdC4KKyAgICAgICAgICogZGpncHAgMi4wNCBoYXMgYSBzc2NhbmYoKSBidWcgd2hlcmUgJ2Nvbm4tPmhvc3QubmFtZScgaXMKKyAgICAgICAgICogYXNzaWduZWQsIGJ1dCB0aGUgcmV0dXJuIHZhbHVlIGlzIEVPRiEKKyAgICAgICAgICovCisjaWYgZGVmaW5lZChfX0RKR1BQX18pICYmIChESkdQUF9NSU5PUiA9PSA0KQorICAgICAgICBpZighKHJjID09IC0xICYmICpjb25uLT5ob3N0Lm5hbWUpKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICBmYWlsZihkYXRhLCAiPHVybD4gbWFsZm9ybWVkIik7CisgICAgICAgICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyoKKyAgICAgICAqIFNpbmNlIHRoZXJlIHdhcyBubyBwcm90b2NvbCBwYXJ0IHNwZWNpZmllZCwgd2UgZ3Vlc3Mgd2hhdCBwcm90b2NvbCBpdAorICAgICAgICogaXMgYmFzZWQgb24gdGhlIGZpcnN0IGxldHRlcnMgb2YgdGhlIHNlcnZlciBuYW1lLgorICAgICAgICovCisKKyAgICAgIC8qIE5vdGU6IGlmIHlvdSBhZGQgYSBuZXcgcHJvdG9jb2wsIHBsZWFzZSB1cGRhdGUgdGhlIGxpc3QgaW4KKyAgICAgICAqIGxpYi92ZXJzaW9uLmMgdG9vISAqLworCisgICAgICBpZihjaGVja3ByZWZpeCgiRlRQLiIsIGNvbm4tPmhvc3QubmFtZSkpCisgICAgICAgIHByb3RvcCA9ICJmdHAiOworICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiRElDVC4iLCBjb25uLT5ob3N0Lm5hbWUpKQorICAgICAgICBwcm90b3AgPSAiRElDVCI7CisgICAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJMREFQLiIsIGNvbm4tPmhvc3QubmFtZSkpCisgICAgICAgIHByb3RvcCA9ICJMREFQIjsKKyAgICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIklNQVAuIiwgY29ubi0+aG9zdC5uYW1lKSkKKyAgICAgICAgcHJvdG9wID0gIklNQVAiOworICAgICAgZWxzZSB7CisgICAgICAgIHByb3RvcCA9ICJodHRwIjsKKyAgICAgIH0KKworICAgICAgKnByb3RfbWlzc2luZyA9IFRSVUU7IC8qIG5vdCBnaXZlbiBpbiBVUkwgKi8KKyAgICB9CisgICAgZWxzZQorICAgICAgcHJvdG9wID0gcHJvdG9idWY7CisgIH0KKworICAvKiBXZSBzZWFyY2ggZm9yICc/JyBpbiB0aGUgaG9zdCBuYW1lIChidXQgb25seSBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhCisgICAqIEAtbGV0dGVyIHRvIGFsbG93ID8tbGV0dGVycyBpbiB1c2VybmFtZSBhbmQgcGFzc3dvcmQpIHRvIGhhbmRsZSB0aGluZ3MKKyAgICogbGlrZSBodHRwOi8vZXhhbXBsZS5jb20/cGFyYW09IChub3RpY2UgdGhlIG1pc3NpbmcgJy8nKS4KKyAgICovCisgIGF0ID0gc3RyY2hyKGNvbm4tPmhvc3QubmFtZSwgJ0AnKTsKKyAgaWYoYXQpCisgICAgcXVlcnkgPSBzdHJjaHIoYXQrMSwgJz8nKTsKKyAgZWxzZQorICAgIHF1ZXJ5ID0gc3RyY2hyKGNvbm4tPmhvc3QubmFtZSwgJz8nKTsKKworICBpZihxdWVyeSkgeworICAgIC8qIFdlIG11c3QgaW5zZXJ0IGEgc2xhc2ggYmVmb3JlIHRoZSAnPyctbGV0dGVyIGluIHRoZSBVUkwuIElmIHRoZSBVUkwgaGFkCisgICAgICAgYSBzbGFzaCBhZnRlciB0aGUgJz8nLCB0aGF0IGlzIHdoZXJlIHRoZSBwYXRoIGN1cnJlbnRseSBiZWdpbnMgYW5kIHRoZQorICAgICAgICc/c3RyaW5nJyBpcyBzdGlsbCBwYXJ0IG9mIHRoZSBob3N0IG5hbWUuCisKKyAgICAgICBXZSBtdXN0IG1vdmUgdGhlIHRyYWlsaW5nIHBhcnQgZnJvbSB0aGUgaG9zdCBuYW1lIGFuZCBwdXQgaXQgZmlyc3QgaW4KKyAgICAgICB0aGUgcGF0aC4gQW5kIGhhdmUgaXQgYWxsIHByZWZpeGVkIHdpdGggYSBzbGFzaC4KKyAgICAqLworCisgICAgc2l6ZV90IGhvc3RsZW4gPSBzdHJsZW4ocXVlcnkpOworICAgIHNpemVfdCBwYXRobGVuID0gc3RybGVuKHBhdGgpOworCisgICAgLyogbW92ZSB0aGUgZXhpc3RpbmcgcGF0aCBwbHVzIHRoZSB6ZXJvIGJ5dGUgZm9yd2FyZCwgdG8gbWFrZSByb29tIGZvcgorICAgICAgIHRoZSBob3N0LW5hbWUgcGFydCAqLworICAgIG1lbW1vdmUocGF0aCtob3N0bGVuKzEsIHBhdGgsIHBhdGhsZW4rMSk7CisKKyAgICAgLyogbm93IGNvcHkgdGhlIHRyYWlsaW5nIGhvc3QgcGFydCBpbiBmcm9udCBvZiB0aGUgZXhpc3RpbmcgcGF0aCAqLworICAgIG1lbWNweShwYXRoKzEsIHF1ZXJ5LCBob3N0bGVuKTsKKworICAgIHBhdGhbMF09Jy8nOyAvKiBwcmVwZW5kIHRoZSBtaXNzaW5nIHNsYXNoICovCisKKyAgICAqcXVlcnk9MDsgLyogbm93IGN1dCBvZmYgdGhlIGhvc3RuYW1lIGF0IHRoZSA/ICovCisgIH0KKyAgZWxzZSBpZighcGF0aFswXSkgeworICAgIC8qIGlmIHRoZXJlJ3Mgbm8gcGF0aCBzZXQsIHVzZSBhIHNpbmdsZSBzbGFzaCAqLworICAgIHN0cmNweShwYXRoLCAiLyIpOworICB9CisKKyAgLyogSWYgdGhlIFVSTCBpcyBtYWxmb3JtYXR0ZWQgKG1pc3NpbmcgYSAnLycgYWZ0ZXIgaG9zdG5hbWUgYmVmb3JlIHBhdGgpIHdlCisgICAqIGluc2VydCBhIHNsYXNoIGhlcmUuIFRoZSBvbmx5IGxldHRlciBleGNlcHQgJy8nIHdlIGFjY2VwdCB0byBzdGFydCBhIHBhdGgKKyAgICogaXMgJz8nLgorICAgKi8KKyAgaWYocGF0aFswXSA9PSAnPycpIHsKKyAgICAvKiBXZSBuZWVkIHRoaXMgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIG92ZXJsYXBwaW5nIG1lbW9yeSBhcmVhcy4gV2Uga25vdworICAgICAgIHRoYXQgdGhlIG1lbW9yeSBhcmVhICdwYXRoJyBwb2ludHMgdG8gaXMgJ3VybGxlbicgYnl0ZXMgYmlnIGFuZCB0aGF0CisgICAgICAgaXMgYmlnZ2VyIHRoYW4gdGhlIHBhdGguIFVzZSArMSB0byBtb3ZlIHRoZSB6ZXJvIGJ5dGUgdG9vLiAqLworICAgIG1lbW1vdmUoJnBhdGhbMV0sIHBhdGgsIHN0cmxlbihwYXRoKSsxKTsKKyAgICBwYXRoWzBdID0gJy8nOworICB9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogUGFyc2UgYSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIGluIHRoZSBVUkwgYW5kIHN0cmlwIGl0IG91dAorICAgKiBvZiB0aGUgaG9zdCBuYW1lCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICByZXN1bHQgPSBwYXJzZV91cmxfdXNlcnBhc3MoZGF0YSwgY29ubiwgdXNlciwgcGFzc3dkKTsKKyAgaWYocmVzdWx0ICE9IENVUkxFX09LKQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgaWYoY29ubi0+aG9zdC5uYW1lWzBdID09ICdbJykgeworICAgIC8qIFRoaXMgbG9va3MgbGlrZSBhbiBJUHY2IGFkZHJlc3MgbGl0ZXJhbC4gIFNlZSBpZiB0aGVyZSBpcyBhbiBhZGRyZXNzCisgICAgICAgc2NvcGUuICAqLworICAgIGNoYXIgKnBlcmNlbnQgPSBzdHJzdHIgKGNvbm4tPmhvc3QubmFtZSwgIiUyNSIpOworICAgIGlmKHBlcmNlbnQpIHsKKyAgICAgIGNoYXIgKmVuZHA7CisgICAgICB1bnNpZ25lZCBsb25nIHNjb3BlID0gc3RydG91bCAocGVyY2VudCArIDMsICZlbmRwLCAxMCk7CisgICAgICBpZigqZW5kcCA9PSAnXScpIHsKKyAgICAgICAgLyogVGhlIGFkZHJlc3Mgc2NvcGUgd2FzIHdlbGwgZm9ybWVkLiAgS25vY2sgaXQgb3V0IG9mIHRoZQorICAgICAgICAgICBob3N0bmFtZS4gKi8KKyAgICAgICAgbWVtbW92ZShwZXJjZW50LCBlbmRwLCBzdHJsZW4oZW5kcCkrMSk7CisgICAgICAgIGlmKCFkYXRhLT5zdGF0ZS50aGlzX2lzX2FfZm9sbG93KQorICAgICAgICAgIC8qIERvbid0IGhvbm91ciBhIHNjb3BlIGdpdmVuIGluIGEgTG9jYXRpb246IGhlYWRlciAqLworICAgICAgICAgIGNvbm4tPnNjb3BlID0gKHVuc2lnbmVkIGludClzY29wZTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgaW5mb2YoZGF0YSwgIkludmFsaWQgSVB2NiBhZGRyZXNzIGZvcm1hdFxuIik7CisgICAgfQorICB9CisKKyAgaWYoZGF0YS0+c2V0LnNjb3BlKQorICAgIC8qIE92ZXJyaWRlIGFueSBzY29wZSB0aGF0IHdhcyBzZXQgYWJvdmUuICAqLworICAgIGNvbm4tPnNjb3BlID0gZGF0YS0+c2V0LnNjb3BlOworCisgIC8qIFJlbW92ZSB0aGUgZnJhZ21lbnQgcGFydCBvZiB0aGUgcGF0aC4gUGVyIFJGQyAyMzk2LCB0aGlzIGlzIGFsd2F5cyB0aGUKKyAgICAgbGFzdCBwYXJ0IG9mIHRoZSBVUkkuIFdlIGFyZSBsb29raW5nIGZvciB0aGUgZmlyc3QgJyMnIHNvIHRoYXQgd2UgZGVhbAorICAgICBncmFjZWZ1bGx5IHdpdGggbm9uIGNvbmZvcm1hbnQgVVJJIHN1Y2ggYXMgaHR0cDovL2V4YW1wbGUuY29tI2ZvbyNiYXIuICovCisgIGZyYWdtZW50ID0gc3RyY2hyKHBhdGgsICcjJyk7CisgIGlmKGZyYWdtZW50KQorICAgICpmcmFnbWVudCA9IDA7CisKKyAgLyoKKyAgICogU28gaWYgdGhlIFVSTCB3YXMgQTovL0IvQyNELAorICAgKiAgIHByb3RvcCBpcyBBCisgICAqICAgY29ubi0+aG9zdC5uYW1lIGlzIEIKKyAgICogICBkYXRhLT5zdGF0ZS5wYXRoIGlzIC9DCisgICAqLworCisgIHJldHVybiBmaW5kcHJvdG9jb2woZGF0YSwgY29ubiwgcHJvdG9wKTsKK30KKworLyoKKyAqIElmIHdlJ3JlIGRvaW5nIGEgcmVzdW1lZCB0cmFuc2Zlciwgd2UgbmVlZCB0byBzZXR1cCBvdXIgc3R1ZmYKKyAqIHByb3Blcmx5LgorICovCitzdGF0aWMgQ1VSTGNvZGUgc2V0dXBfcmFuZ2Uoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEpCit7CisgIHN0cnVjdCBVcmxTdGF0ZSAqcyA9ICZkYXRhLT5zdGF0ZTsKKyAgcy0+cmVzdW1lX2Zyb20gPSBkYXRhLT5zZXQuc2V0X3Jlc3VtZV9mcm9tOworICBpZihzLT5yZXN1bWVfZnJvbSB8fCBkYXRhLT5zZXQuc3RyW1NUUklOR19TRVRfUkFOR0VdKSB7CisgICAgaWYocy0+cmFuZ2VzdHJpbmdhbGxvYykKKyAgICAgIGZyZWUocy0+cmFuZ2UpOworCisgICAgaWYocy0+cmVzdW1lX2Zyb20pCisgICAgICBzLT5yYW5nZSA9IGFwcmludGYoIiUiIEZPUk1BVF9PRkZfVFUgIi0iLCBzLT5yZXN1bWVfZnJvbSk7CisgICAgZWxzZQorICAgICAgcy0+cmFuZ2UgPSBzdHJkdXAoZGF0YS0+c2V0LnN0cltTVFJJTkdfU0VUX1JBTkdFXSk7CisKKyAgICBzLT5yYW5nZXN0cmluZ2FsbG9jID0gKHMtPnJhbmdlKT9UUlVFOkZBTFNFOworCisgICAgaWYoIXMtPnJhbmdlKQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgICAvKiB0ZWxsIG91cnNlbHZlcyB0byBmZXRjaCB0aGlzIHJhbmdlICovCisgICAgcy0+dXNlX3JhbmdlID0gVFJVRTsgICAgICAgIC8qIGVuYWJsZSByYW5nZSBkb3dubG9hZCAqLworICB9CisgIGVsc2UKKyAgICBzLT51c2VfcmFuZ2UgPSBGQUxTRTsgLyogZGlzYWJsZSByYW5nZSBkb3dubG9hZCAqLworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNldHVwIGNvbm5lY3Rpb24gaW50ZXJuYWxzIHNwZWNpZmljIHRvIHRoZSByZXF1ZXN0ZWQgcHJvdG9jb2wuCisqIFRoaXMgTVVTVCBnZXQgY2FsbGVkIGFmdGVyIHByb3h5IG1hZ2ljIGhhcyBiZWVuIGZpZ3VyZWQgb3V0LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIENVUkxjb2RlIHNldHVwX2Nvbm5lY3Rpb25faW50ZXJuYWxzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciAqIHA7CisgIENVUkxjb2RlIHJlc3VsdDsKKworICBjb25uLT5zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOyAvKiBtb3N0IG9mIHRoZW0gYXJlIFRDUCBzdHJlYW1zICovCisKKyAgLyogU2NhbiBwcm90b2NvbCBoYW5kbGVyIHRhYmxlLiAqLworCisgIC8qIFBlcmZvcm0gc2V0dXAgY29tcGxlbWVudCBpZiBzb21lLiAqLworICBwID0gY29ubi0+aGFuZGxlcjsKKworICBpZihwLT5zZXR1cF9jb25uZWN0aW9uKSB7CisgICAgcmVzdWx0ID0gKCpwLT5zZXR1cF9jb25uZWN0aW9uKShjb25uKTsKKworICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykKKyAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBwID0gY29ubi0+aGFuZGxlcjsgICAgICAgICAgICAgIC8qIE1heSBoYXZlIGNoYW5nZWQuICovCisgIH0KKworICBpZihjb25uLT5wb3J0IDwgMCkKKyAgICAvKiB3ZSBjaGVjayBmb3IgLTEgaGVyZSBzaW5jZSBpZiBwcm94eSB3YXMgZGV0ZWN0ZWQgYWxyZWFkeSwgdGhpcworICAgICAgIHdhcyB2ZXJ5IGxpa2VseSBhbHJlYWR5IHNldCB0byB0aGUgcHJveHkgcG9ydCAqLworICAgIGNvbm4tPnBvcnQgPSBwLT5kZWZwb3J0OworICBjb25uLT5yZW1vdGVfcG9ydCA9ICh1bnNpZ25lZCBzaG9ydCljb25uLT5naXZlbi0+ZGVmcG9ydDsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDaGVja3MgaWYgdGhlIGhvc3QgaXMgaW4gdGhlIG5vcHJveHkgbGlzdC4gcmV0dXJucyB0cnVlIGlmIGl0IG1hdGNoZXMKKyogYW5kIHRoZXJlZm9yZSB0aGUgcHJveHkgc2hvdWxkIE5PVCBiZSB1c2VkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBib29sIGNoZWNrX25vcHJveHkoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogbm9fcHJveHkpCit7CisgIC8qIG5vX3Byb3h5PWRvbWFpbjEuZG9tLGhvc3QuZG9tYWluMi5kb20KKyAgICogICAoYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBob3N0cyB3aGljaCBzaG91bGQKKyAgICogICBub3QgYmUgcHJveGllZCwgb3IgYW4gYXN0ZXJpc2sgdG8gb3ZlcnJpZGUKKyAgICogICBhbGwgcHJveHkgdmFyaWFibGVzKQorICAgKi8KKyAgc2l6ZV90IHRva19zdGFydDsKKyAgc2l6ZV90IHRva19lbmQ7CisgIGNvbnN0IGNoYXIqIHNlcGFyYXRvciA9ICIsICI7CisgIHNpemVfdCBub19wcm94eV9sZW47CisgIHNpemVfdCBuYW1lbGVuOworICBjaGFyICplbmRwdHI7CisKKyAgaWYobm9fcHJveHkgJiYgbm9fcHJveHlbMF0pIHsKKyAgICBpZihDdXJsX3Jhd19lcXVhbCgiKiIsIG5vX3Byb3h5KSkgeworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgLyogTk9fUFJPWFkgd2FzIHNwZWNpZmllZCBhbmQgaXQgd2Fzbid0IGp1c3QgYW4gYXN0ZXJpc2sgKi8KKworICAgIG5vX3Byb3h5X2xlbiA9IHN0cmxlbihub19wcm94eSk7CisgICAgZW5kcHRyID0gc3RyY2hyKG5hbWUsICc6Jyk7CisgICAgaWYoZW5kcHRyKQorICAgICAgbmFtZWxlbiA9IGVuZHB0ciAtIG5hbWU7CisgICAgZWxzZQorICAgICAgbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKworICAgIGZvcih0b2tfc3RhcnQgPSAwOyB0b2tfc3RhcnQgPCBub19wcm94eV9sZW47IHRva19zdGFydCA9IHRva19lbmQgKyAxKSB7CisgICAgICB3aGlsZSh0b2tfc3RhcnQgPCBub19wcm94eV9sZW4gJiYKKyAgICAgICAgICAgIHN0cmNocihzZXBhcmF0b3IsIG5vX3Byb3h5W3Rva19zdGFydF0pICE9IE5VTEwpIHsKKyAgICAgICAgLyogTG9vayBmb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUgdG9rZW4uICovCisgICAgICAgICsrdG9rX3N0YXJ0OworICAgICAgfQorCisgICAgICBpZih0b2tfc3RhcnQgPT0gbm9fcHJveHlfbGVuKQorICAgICAgICBicmVhazsgLyogSXQgd2FzIGFsbCB0cmFpbGluZyBzZXBhcmF0b3IgY2hhcnMsIG5vIG1vcmUgdG9rZW5zLiAqLworCisgICAgICBmb3IodG9rX2VuZCA9IHRva19zdGFydDsgdG9rX2VuZCA8IG5vX3Byb3h5X2xlbiAmJgorICAgICAgICAgICAgc3RyY2hyKHNlcGFyYXRvciwgbm9fcHJveHlbdG9rX2VuZF0pID09IE5VTEw7ICsrdG9rX2VuZCkKKyAgICAgICAgLyogTG9vayBmb3IgdGhlIGVuZCBvZiB0aGUgdG9rZW4uICovCisgICAgICAgIDsKKworICAgICAgLyogVG8gbWF0Y2ggcHJldmlvdXMgYmVoYXZpb3VyLCB3aGVyZSBpdCB3YXMgbmVjZXNzYXJ5IHRvIHNwZWNpZnkKKyAgICAgICAqICIubG9jYWwuY29tIiB0byBwcmV2ZW50IG1hdGNoaW5nICJub3Rsb2NhbC5jb20iLCB3ZSB3aWxsIGxlYXZlCisgICAgICAgKiB0aGUgJy4nIG9mZi4KKyAgICAgICAqLworICAgICAgaWYobm9fcHJveHlbdG9rX3N0YXJ0XSA9PSAnLicpCisgICAgICAgICsrdG9rX3N0YXJ0OworCisgICAgICBpZigodG9rX2VuZCAtIHRva19zdGFydCkgPD0gbmFtZWxlbikgeworICAgICAgICAvKiBNYXRjaCB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBuYW1lIHRvIHRoZSBkb21haW4gd2UgYXJlIGNoZWNraW5nLiAqLworICAgICAgICBjb25zdCBjaGFyICpjaGVja24gPSBuYW1lICsgbmFtZWxlbiAtICh0b2tfZW5kIC0gdG9rX3N0YXJ0KTsKKyAgICAgICAgaWYoQ3VybF9yYXdfbmVxdWFsKG5vX3Byb3h5ICsgdG9rX3N0YXJ0LCBjaGVja24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tfZW5kIC0gdG9rX3N0YXJ0KSkgeworICAgICAgICAgIGlmKCh0b2tfZW5kIC0gdG9rX3N0YXJ0KSA9PSBuYW1lbGVuIHx8ICooY2hlY2tuIC0gMSkgPT0gJy4nKSB7CisgICAgICAgICAgICAvKiBXZSBlaXRoZXIgaGF2ZSBhbiBleGFjdCBtYXRjaCwgb3IgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBpcyBhIC4KKyAgICAgICAgICAgICAqIHNvIGl0IGlzIHdpdGhpbiB0aGUgc2FtZSBkb21haW4sIHNvIG5vIHByb3h5IGZvciB0aGlzIGhvc3QuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSAvKiBpZigodG9rX2VuZCAtIHRva19zdGFydCkgPD0gbmFtZWxlbikgKi8KKyAgICB9IC8qIGZvcih0b2tfc3RhcnQgPSAwOyB0b2tfc3RhcnQgPCBub19wcm94eV9sZW47CisgICAgICAgICB0b2tfc3RhcnQgPSB0b2tfZW5kICsgMSkgKi8KKyAgfSAvKiBOT19QUk9YWSB3YXMgc3BlY2lmaWVkIGFuZCBpdCB3YXNuJ3QganVzdCBhbiBhc3RlcmlzayAqLworCisgIHJldHVybiBGQUxTRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRGV0ZWN0IHdoYXQgKGlmIGFueSkgcHJveHkgdG8gdXNlLiBSZW1lbWJlciB0aGF0IHRoaXMgc2VsZWN0cyBhIGhvc3QKKyogbmFtZSBhbmQgaXMgbm90IGxpbWl0ZWQgdG8gSFRUUCBwcm94aWVzIG9ubHkuCisqIFRoZSByZXR1cm5lZCBwb2ludGVyIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlciAodW5sZXNzIE5VTEwpCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNoYXIgKmRldGVjdF9wcm94eShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGNoYXIgKnByb3h5ID0gTlVMTDsKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfSFRUUAorICAvKiBJZiBwcm94eSB3YXMgbm90IHNwZWNpZmllZCwgd2UgY2hlY2sgZm9yIGRlZmF1bHQgcHJveHkgZW52aXJvbm1lbnQKKyAgICogdmFyaWFibGVzLCB0byBlbmFibGUgaS5lIEx5bnggY29tcGxpYW5jZToKKyAgICoKKyAgICogaHR0cF9wcm94eT1odHRwOi8vc29tZS5zZXJ2ZXIuZG9tOnBvcnQvCisgICAqIGh0dHBzX3Byb3h5PWh0dHA6Ly9zb21lLnNlcnZlci5kb206cG9ydC8KKyAgICogZnRwX3Byb3h5PWh0dHA6Ly9zb21lLnNlcnZlci5kb206cG9ydC8KKyAgICogbm9fcHJveHk9ZG9tYWluMS5kb20saG9zdC5kb21haW4yLmRvbQorICAgKiAgIChhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGhvc3RzIHdoaWNoIHNob3VsZAorICAgKiAgIG5vdCBiZSBwcm94aWVkLCBvciBhbiBhc3RlcmlzayB0byBvdmVycmlkZQorICAgKiAgIGFsbCBwcm94eSB2YXJpYWJsZXMpCisgICAqIGFsbF9wcm94eT1odHRwOi8vc29tZS5zZXJ2ZXIuZG9tOnBvcnQvCisgICAqICAgKHNlZW1zIHRvIGV4aXN0IGZvciB0aGUgQ0VSTiB3d3cgbGliLiBQcm9iYWJseQorICAgKiAgIHRoZSBmaXJzdCB0byBjaGVjayBmb3IuKQorICAgKgorICAgKiBGb3IgY29tcGF0aWJpbGl0eSwgdGhlIGFsbC11cHBlcmNhc2UgdmVyc2lvbnMgb2YgdGhlc2UgdmFyaWFibGVzIGFyZQorICAgKiBjaGVja2VkIGlmIHRoZSBsb3dlcmNhc2UgdmVyc2lvbnMgZG9uJ3QgZXhpc3QuCisgICAqLworICBjaGFyICpub19wcm94eT1OVUxMOworICBjaGFyIHByb3h5X2VudlsxMjhdOworCisgIG5vX3Byb3h5PWN1cmxfZ2V0ZW52KCJub19wcm94eSIpOworICBpZighbm9fcHJveHkpCisgICAgbm9fcHJveHk9Y3VybF9nZXRlbnYoIk5PX1BST1hZIik7CisKKyAgaWYoIWNoZWNrX25vcHJveHkoY29ubi0+aG9zdC5uYW1lLCBub19wcm94eSkpIHsKKyAgICAvKiBJdCB3YXMgbm90IGxpc3RlZCBhcyB3aXRob3V0IHByb3h5ICovCisgICAgY29uc3QgY2hhciAqcHJvdG9wID0gY29ubi0+aGFuZGxlci0+c2NoZW1lOworICAgIGNoYXIgKmVudnAgPSBwcm94eV9lbnY7CisgICAgY2hhciAqcHJveDsKKworICAgIC8qIE5vdywgYnVpbGQgPHByb3RvY29sPl9wcm94eSBhbmQgY2hlY2sgZm9yIHN1Y2ggYSBvbmUgdG8gdXNlICovCisgICAgd2hpbGUoKnByb3RvcCkKKyAgICAgICplbnZwKysgPSAoY2hhcil0b2xvd2VyKChpbnQpKnByb3RvcCsrKTsKKworICAgIC8qIGFwcGVuZCBfcHJveHkgKi8KKyAgICBzdHJjcHkoZW52cCwgIl9wcm94eSIpOworCisgICAgLyogcmVhZCB0aGUgcHJvdG9jb2wgcHJveHk6ICovCisgICAgcHJveD1jdXJsX2dldGVudihwcm94eV9lbnYpOworCisgICAgLyoKKyAgICAgKiBXZSBkb24ndCB0cnkgdGhlIHVwcGVyY2FzZSB2ZXJzaW9uIG9mIEhUVFBfUFJPWFkgYmVjYXVzZSBvZgorICAgICAqIHNlY3VyaXR5IHJlYXNvbnM6CisgICAgICoKKyAgICAgKiBXaGVuIGN1cmwgaXMgdXNlZCBpbiBhIHdlYnNlcnZlciBhcHBsaWNhdGlvbgorICAgICAqIGVudmlyb25tZW50IChjZ2kgb3IgcGhwKSwgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4KKyAgICAgKiBiZSBjb250cm9sbGVkIGJ5IHRoZSB3ZWIgc2VydmVyIHVzZXIgYnkgc2V0dGluZyB0aGUKKyAgICAgKiBodHRwIGhlYWRlciAnUHJveHk6JyB0byBzb21lIHZhbHVlLgorICAgICAqCisgICAgICogVGhpcyBjYW4gY2F1c2UgJ2ludGVybmFsJyBodHRwL2Z0cCByZXF1ZXN0cyB0byBiZQorICAgICAqIGFyYml0cmFyaWx5IHJlZGlyZWN0ZWQgYnkgYW55IGV4dGVybmFsIGF0dGFja2VyLgorICAgICAqLworICAgIGlmKCFwcm94ICYmICFDdXJsX3Jhd19lcXVhbCgiaHR0cF9wcm94eSIsIHByb3h5X2VudikpIHsKKyAgICAgIC8qIFRoZXJlIHdhcyBubyBsb3dlcmNhc2UgdmFyaWFibGUsIHRyeSB0aGUgdXBwZXJjYXNlIHZlcnNpb246ICovCisgICAgICBDdXJsX3N0cm50b3VwcGVyKHByb3h5X2VudiwgcHJveHlfZW52LCBzaXplb2YocHJveHlfZW52KSk7CisgICAgICBwcm94PWN1cmxfZ2V0ZW52KHByb3h5X2Vudik7CisgICAgfQorCisgICAgaWYocHJveCAmJiAqcHJveCkgeyAvKiBkb24ndCBjb3VudCAiIiBzdHJpbmdzICovCisgICAgICBwcm94eSA9IHByb3g7IC8qIHVzZSB0aGlzICovCisgICAgfQorICAgIGVsc2UgeworICAgICAgcHJveHkgPSBjdXJsX2dldGVudigiYWxsX3Byb3h5Iik7IC8qIGRlZmF1bHQgcHJveHkgdG8gdXNlICovCisgICAgICBpZighcHJveHkpCisgICAgICAgIHByb3h5PWN1cmxfZ2V0ZW52KCJBTExfUFJPWFkiKTsKKyAgICB9CisgIH0gLyogaWYoIWNoZWNrX25vcHJveHkoY29ubi0+aG9zdC5uYW1lLCBub19wcm94eSkpIC0gaXQgd2Fzbid0IHNwZWNpZmllZAorICAgICAgIG5vbi1wcm94eSAqLworICBpZihub19wcm94eSkKKyAgICBmcmVlKG5vX3Byb3h5KTsKKworI2Vsc2UgLyogIUNVUkxfRElTQUJMRV9IVFRQICovCisKKyAgKHZvaWQpY29ubjsKKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfSFRUUCAqLworCisgIHJldHVybiBwcm94eTsKK30KKworLyoKKyAqIElmIHRoaXMgaXMgc3VwcG9zZWQgdG8gdXNlIGEgcHJveHksIHdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcHJveHkKKyAqIGhvc3QgbmFtZSwgc28gdGhhdCB3ZSBjYW4gcmUtdXNlIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24KKyAqIHRoYXQgbWF5IGV4aXN0IHJlZ2lzdGVyZWQgdG8gdGhlIHNhbWUgcHJveHkgaG9zdC4KKyAqIHByb3h5IHdpbGwgYmUgZnJlZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KKyAqLworc3RhdGljIENVUkxjb2RlIHBhcnNlX3Byb3h5KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY2hhciAqcHJveHkpCit7CisgIGNoYXIgKnByb3hfcG9ydG5vOworICBjaGFyICplbmRvZnByb3Q7CisKKyAgLyogV2UgdXNlICdwcm94eXB0cicgdG8gcG9pbnQgdG8gdGhlIHByb3h5IG5hbWUgZnJvbSBub3cgb24uLi4gKi8KKyAgY2hhciAqcHJveHlwdHI7CisgIGNoYXIgKnBvcnRwdHI7CisgIGNoYXIgKmF0c2lnbjsKKworICAvKiBXZSBkbyB0aGUgcHJveHkgaG9zdCBzdHJpbmcgcGFyc2luZyBoZXJlLiBXZSB3YW50IHRoZSBob3N0IG5hbWUgYW5kIHRoZQorICAgKiBwb3J0IG5hbWUuIEFjY2VwdCBhIHByb3RvY29sOi8vIHByZWZpeAorICAgKi8KKworICAvKiBQYXJzZSB0aGUgcHJvdG9jb2wgcGFydCBpZiBwcmVzZW50ICovCisgIGVuZG9mcHJvdCA9IHN0cnN0cihwcm94eSwgIjovLyIpOworICBpZihlbmRvZnByb3QpIHsKKyAgICBwcm94eXB0ciA9IGVuZG9mcHJvdCszOworICAgIGlmKGNoZWNrcHJlZml4KCJzb2NrczVoIiwgcHJveHkpKQorICAgICAgY29ubi0+cHJveHl0eXBlID0gQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRTsKKyAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJzb2NrczUiLCBwcm94eSkpCisgICAgICBjb25uLT5wcm94eXR5cGUgPSBDVVJMUFJPWFlfU09DS1M1OworICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoInNvY2tzNGEiLCBwcm94eSkpCisgICAgICBjb25uLT5wcm94eXR5cGUgPSBDVVJMUFJPWFlfU09DS1M0QTsKKyAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJzb2NrczQiLCBwcm94eSkpCisgICAgICBjb25uLT5wcm94eXR5cGUgPSBDVVJMUFJPWFlfU09DS1M0OworICAgIC8qIEFueSBvdGhlciB4eHg6Ly8gOiBjaGFuZ2UgdG8gaHR0cCBwcm94eSAqLworICB9CisgIGVsc2UKKyAgICBwcm94eXB0ciA9IHByb3h5OyAvKiBObyB4eHg6Ly8gaGVhZDogSXQncyBhIEhUVFAgcHJveHkgKi8KKworICAvKiBJcyB0aGVyZSBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBnaXZlbiBpbiB0aGlzIHByb3h5IHVybD8gKi8KKyAgYXRzaWduID0gc3RyY2hyKHByb3h5cHRyLCAnQCcpOworICBpZihhdHNpZ24pIHsKKyAgICBjaGFyIHByb3h5dXNlcltNQVhfQ1VSTF9VU0VSX0xFTkdUSF07CisgICAgY2hhciBwcm94eXBhc3N3ZFtNQVhfQ1VSTF9QQVNTV09SRF9MRU5HVEhdOworICAgIHByb3h5cGFzc3dkWzBdID0gMDsKKworICAgIGlmKDEgPD0gc3NjYW5mKHByb3h5cHRyLAorICAgICAgICAgICAgICAgICAgICIlIiBNQVhfQ1VSTF9VU0VSX0xFTkdUSF9UWFQiW146QF06IgorICAgICAgICAgICAgICAgICAgICIlIiBNQVhfQ1VSTF9QQVNTV09SRF9MRU5HVEhfVFhUICJbXkBdIiwKKyAgICAgICAgICAgICAgICAgICBwcm94eXVzZXIsIHByb3h5cGFzc3dkKSkgeworICAgICAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7CisKKyAgICAgIC8qIGZvdW5kIHVzZXIgYW5kIHBhc3N3b3JkLCByaXAgdGhlbSBvdXQuICBub3RlIHRoYXQgd2UgYXJlCisgICAgICAgICB1bmVzY2FwaW5nIHRoZW0sIGFzIHRoZXJlIGlzIG90aGVyd2lzZSBubyB3YXkgdG8gaGF2ZSBhCisgICAgICAgICB1c2VybmFtZSBvciBwYXNzd29yZCB3aXRoIHJlc2VydmVkIGNoYXJhY3RlcnMgbGlrZSAnOicgaW4KKyAgICAgICAgIHRoZW0uICovCisgICAgICBDdXJsX3NhZmVmcmVlKGNvbm4tPnByb3h5dXNlcik7CisgICAgICBjb25uLT5wcm94eXVzZXIgPSBjdXJsX2Vhc3lfdW5lc2NhcGUoZGF0YSwgcHJveHl1c2VyLCAwLCBOVUxMKTsKKworICAgICAgaWYoIWNvbm4tPnByb3h5dXNlcikKKyAgICAgICAgcmVzID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIGVsc2UgeworICAgICAgICBDdXJsX3NhZmVmcmVlKGNvbm4tPnByb3h5cGFzc3dkKTsKKyAgICAgICAgY29ubi0+cHJveHlwYXNzd2QgPSBjdXJsX2Vhc3lfdW5lc2NhcGUoZGF0YSwgcHJveHlwYXNzd2QsIDAsIE5VTEwpOworCisgICAgICAgIGlmKCFjb25uLT5wcm94eXBhc3N3ZCkKKyAgICAgICAgICByZXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgfQorCisgICAgICBpZihDVVJMRV9PSyA9PSByZXMpIHsKKyAgICAgICAgY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCA9IFRSVUU7IC8qIGVuYWJsZSBpdCAqLworICAgICAgICBhdHNpZ24rKzsgLyogdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIEAtbGV0dGVyICovCisKKyAgICAgICAgaWYoYXRzaWduKQorICAgICAgICAgIHByb3h5ID0gcHJveHlwdHIgPSBhdHNpZ247IC8qIG5vdyB1c2UgdGhpcyBpbnN0ZWFkICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgfQorCisgICAgICBpZihyZXMpCisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisKKyAgLyogc3RhcnQgc2Nhbm5pbmcgZm9yIHBvcnQgbnVtYmVyIGF0IHRoaXMgcG9pbnQgKi8KKyAgcG9ydHB0ciA9IHByb3h5cHRyOworCisgIC8qIGRldGVjdCBhbmQgZXh0cmFjdCBSRkMyNzMyLXN0eWxlIElQdjYtYWRkcmVzc2VzICovCisgIGlmKCpwcm94eXB0ciA9PSAnWycpIHsKKyAgICBjaGFyICpwdHIgPSArK3Byb3h5cHRyOyAvKiBhZHZhbmNlIGJleW9uZCB0aGUgaW5pdGlhbCBicmFja2V0ICovCisgICAgd2hpbGUoKnB0ciAmJiAoSVNYRElHSVQoKnB0cikgfHwgKCpwdHIgPT0gJzonKSB8fCAoKnB0ciA9PSAnJScpIHx8CisgICAgICAgICAgICAgICAgICAgKCpwdHIgPT0gJy4nKSkpCisgICAgICBwdHIrKzsKKyAgICBpZigqcHRyID09ICddJykKKyAgICAgIC8qIHllcHMsIGl0IGVuZGVkIG5pY2VseSB3aXRoIGEgYnJhY2tldCBhcyB3ZWxsICovCisgICAgICAqcHRyKysgPSAwOworICAgIGVsc2UKKyAgICAgIGluZm9mKGRhdGEsICJJbnZhbGlkIElQdjYgYWRkcmVzcyBmb3JtYXRcbiIpOworICAgIHBvcnRwdHIgPSBwdHI7CisgICAgLyogTm90ZSB0aGF0IGlmIHRoaXMgZGlkbid0IGVuZCB3aXRoIGEgYnJhY2tldCwgd2Ugc3RpbGwgYWR2YW5jZWQgdGhlCisgICAgICogcHJveHlwdHIgZmlyc3QsIGJ1dCBJIGNhbid0IHNlZSBhbnl0aGluZyB3cm9uZyB3aXRoIHRoYXQgYXMgbm8gaG9zdAorICAgICAqIG5hbWUgbm9yIGEgbnVtZXJpYyBjYW4gbGVnYWxseSBzdGFydCB3aXRoIGEgYnJhY2tldC4KKyAgICAgKi8KKyAgfQorCisgIC8qIEdldCBwb3J0IG51bWJlciBvZmYgcHJveHkuc2VydmVyLmNvbToxMDgwICovCisgIHByb3hfcG9ydG5vID0gc3RyY2hyKHBvcnRwdHIsICc6Jyk7CisgIGlmKHByb3hfcG9ydG5vKSB7CisgICAgKnByb3hfcG9ydG5vID0gMHgwOyAvKiBjdXQgb2ZmIG51bWJlciBmcm9tIGhvc3QgbmFtZSAqLworICAgIHByb3hfcG9ydG5vICsrOworICAgIC8qIG5vdyBzZXQgdGhlIGxvY2FsIHBvcnQgbnVtYmVyICovCisgICAgY29ubi0+cG9ydCA9IHN0cnRvbChwcm94X3BvcnRubywgTlVMTCwgMTApOworICB9CisgIGVsc2UgeworICAgIGlmKHByb3h5cHRyWzBdPT0nLycpCisgICAgICAvKiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBwcm94eSBzdHJpbmcgaXMgYSBzbGFzaCwgZmFpbAorICAgICAgICAgaW1tZWRpYXRlbHkuIFRoZSBmb2xsb3dpbmcgY29kZSB3aWxsIG90aGVyd2lzZSBjbGVhciB0aGUgc3RyaW5nIHdoaWNoCisgICAgICAgICB3aWxsIGxlYWQgdG8gY29kZSBydW5uaW5nIGFzIGlmIG5vIHByb3h5IHdhcyBzZXQhICovCisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZOworCisgICAgLyogd2l0aG91dCBhIHBvcnQgbnVtYmVyIGFmdGVyIHRoZSBob3N0IG5hbWUsIHNvbWUgcGVvcGxlIHNlZW0gdG8gdXNlCisgICAgICAgYSBzbGFzaCBzbyB3ZSBzdHJpcCBldmVyeXRoaW5nIGZyb20gdGhlIGZpcnN0IHNsYXNoICovCisgICAgYXRzaWduID0gc3RyY2hyKHByb3h5cHRyLCAnLycpOworICAgIGlmKGF0c2lnbikKKyAgICAgICphdHNpZ24gPSAweDA7IC8qIGN1dCBvZmYgcGF0aCBwYXJ0IGZyb20gaG9zdCBuYW1lICovCisKKyAgICBpZihkYXRhLT5zZXQucHJveHlwb3J0KQorICAgICAgLyogTm9uZSBnaXZlbiBpbiB0aGUgcHJveHkgc3RyaW5nLCB0aGVuIGdldCB0aGUgZGVmYXVsdCBvbmUgaWYgaXQgaXMKKyAgICAgICAgIGdpdmVuICovCisgICAgICBjb25uLT5wb3J0ID0gZGF0YS0+c2V0LnByb3h5cG9ydDsKKyAgfQorCisgIC8qIG5vdywgY2xvbmUgdGhlIGNsZWFuZWQgcHJveHkgaG9zdCBuYW1lICovCisgIGNvbm4tPnByb3h5LnJhd2FsbG9jID0gc3RyZHVwKHByb3h5cHRyKTsKKyAgY29ubi0+cHJveHkubmFtZSA9IGNvbm4tPnByb3h5LnJhd2FsbG9jOworCisgIGlmKCFjb25uLT5wcm94eS5yYXdhbGxvYykKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBFeHRyYWN0IHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmcm9tIHRoZSBhdXRoZW50aWNhdGlvbiBzdHJpbmcKKyAqLworc3RhdGljIENVUkxjb2RlIHBhcnNlX3Byb3h5X2F1dGgoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGNoYXIgcHJveHl1c2VyW01BWF9DVVJMX1VTRVJfTEVOR1RIXT0iIjsKKyAgY2hhciBwcm94eXBhc3N3ZFtNQVhfQ1VSTF9QQVNTV09SRF9MRU5HVEhdPSIiOworCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZVVNFUk5BTUVdICE9IE5VTEwpIHsKKyAgICBzdHJuY3B5KHByb3h5dXNlciwgZGF0YS0+c2V0LnN0cltTVFJJTkdfUFJPWFlVU0VSTkFNRV0sCisgICAgICAgICAgICBNQVhfQ1VSTF9VU0VSX0xFTkdUSCk7CisgICAgcHJveHl1c2VyW01BWF9DVVJMX1VTRVJfTEVOR1RILTFdID0gJ1wwJzsgICAvKlRvIGJlIG9uIHNhZmUgc2lkZSovCisgIH0KKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfUFJPWFlQQVNTV09SRF0gIT0gTlVMTCkgeworICAgIHN0cm5jcHkocHJveHlwYXNzd2QsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZUEFTU1dPUkRdLAorICAgICAgICAgICAgTUFYX0NVUkxfUEFTU1dPUkRfTEVOR1RIKTsKKyAgICBwcm94eXBhc3N3ZFtNQVhfQ1VSTF9QQVNTV09SRF9MRU5HVEgtMV0gPSAnXDAnOyAvKlRvIGJlIG9uIHNhZmUgc2lkZSovCisgIH0KKworICBjb25uLT5wcm94eXVzZXIgPSBjdXJsX2Vhc3lfdW5lc2NhcGUoZGF0YSwgcHJveHl1c2VyLCAwLCBOVUxMKTsKKyAgaWYoIWNvbm4tPnByb3h5dXNlcikKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICBjb25uLT5wcm94eXBhc3N3ZCA9IGN1cmxfZWFzeV91bmVzY2FwZShkYXRhLCBwcm94eXBhc3N3ZCwgMCwgTlVMTCk7CisgIGlmKCFjb25uLT5wcm94eXBhc3N3ZCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCisKKy8qCisgKgorICogUGFyc2UgYSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIGluIHRoZSBVUkwgYW5kIHN0cmlwIGl0IG91dCBvZiB0aGUgaG9zdCBuYW1lCisgKgorICogSW5wdXRzOiBkYXRhLT5zZXQudXNlX25ldHJjIChDVVJMT1BUX05FVFJDKQorICogICAgICAgICBjb25uLT5ob3N0Lm5hbWUKKyAqCisgKiBPdXRwdXRzOiAoYWxtb3N0IDotIGFsbCBjdXJyZW50bHkgdW5kZWZpbmVkKQorICogICAgICAgICAgY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCAgLSBub24temVybyBpZiBub24tZGVmYXVsdCBwYXNzd29yZHMgZXhpc3QKKyAqICAgICAgICAgIHVzZXIgICAgICAgICAgICAgICAgICAgIC0gbm9uLXplcm8gbGVuZ3RoIGlmIGRlZmluZWQKKyAqICAgICAgICAgIHBhc3N3ZCAgICAgICAgICAgICAgICAgIC0gICBkaXR0bworICogICAgICAgICAgY29ubi0+aG9zdC5uYW1lICAgICAgICAgLSByZW1vdmUgdXNlciBuYW1lIGFuZCBwYXNzd29yZAorICovCitzdGF0aWMgQ1VSTGNvZGUgcGFyc2VfdXJsX3VzZXJwYXNzKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzZXIsIGNoYXIgKnBhc3N3ZCkKK3sKKyAgLyogQXQgdGhpcyBwb2ludCwgd2UncmUgaG9waW5nIGFsbCB0aGUgb3RoZXIgc3BlY2lhbCBjYXNlcyBoYXZlCisgICAqIGJlZW4gdGFrZW4gY2FyZSBvZiwgc28gY29ubi0+aG9zdC5uYW1lIGlzIGF0IG1vc3QKKyAgICogICAgW3VzZXJbOnBhc3N3b3JkXV1AXWhvc3RuYW1lCisgICAqCisgICAqIFdlIG5lZWQgc29tZXdoZXJlIHRvIHB1dCB0aGUgZW1iZWRkZWQgZGV0YWlscywgc28gZG8gdGhhdCBmaXJzdC4KKyAgICovCisKKyAgY2hhciAqcHRyPXN0cmNocihjb25uLT5ob3N0Lm5hbWUsICdAJyk7CisgIGNoYXIgKnVzZXJwYXNzID0gY29ubi0+aG9zdC5uYW1lOworCisgIHVzZXJbMF0gPTA7ICAgLyogdG8gbWFrZSBldmVyeXRoaW5nIHdlbGwtZGVmaW5lZCAqLworICBwYXNzd2RbMF09MDsKKworICAvKiBXZSB3aWxsIG5vdyB0cnkgdG8gZXh0cmFjdCB0aGUKKyAgICogcG9zc2libGUgdXNlcitwYXNzd29yZCBwYWlyIGluIGEgc3RyaW5nIGxpa2U6CisgICAqIGZ0cDovL3VzZXI6cGFzc3dvcmRAZnRwLm15LnNpdGU6ODAyMS9SRUFETUUgKi8KKyAgaWYocHRyICE9IE5VTEwpIHsKKyAgICAvKiB0aGVyZSdzIGEgdXNlcitwYXNzd29yZCBnaXZlbiBoZXJlLCB0byB0aGUgbGVmdCBvZiB0aGUgQCAqLworCisgICAgY29ubi0+aG9zdC5uYW1lID0gKytwdHI7CisKKyAgICAvKiBTbyB0aGUgaG9zdG5hbWUgaXMgc2FuZS4gIE9ubHkgYm90aGVyIGludGVycHJldGluZyB0aGUKKyAgICAgKiByZXN1bHRzIGlmIHdlIGNvdWxkIGNhcmUuICBJdCBjb3VsZCBzdGlsbCBiZSB3YXN0ZWQKKyAgICAgKiB3b3JrIGJlY2F1c2UgaXQgbWlnaHQgYmUgb3ZlcnRha2VuIGJ5IHRoZSBwcm9ncmFtbWF0aWNhbGx5CisgICAgICogc2V0IHVzZXIvcGFzc3dkLCBidXQgZG9pbmcgdGhhdCBmaXJzdCBhZGRzIG1vcmUgY2FzZXMgaGVyZSA6LSgKKyAgICAgKi8KKworICAgIGNvbm4tPmJpdHMudXNlcnB3ZF9pbl91cmwgPSBUUlVFOworICAgIGlmKGRhdGEtPnNldC51c2VfbmV0cmMgIT0gQ1VSTF9ORVRSQ19SRVFVSVJFRCkgeworICAgICAgLyogV2UgY291bGQgdXNlIHRoZSBvbmUgaW4gdGhlIFVSTCAqLworCisgICAgICBjb25uLT5iaXRzLnVzZXJfcGFzc3dkID0gVFJVRTsgLyogZW5hYmxlIHVzZXIrcGFzc3dvcmQgKi8KKworICAgICAgaWYoKnVzZXJwYXNzICE9ICc6JykgeworICAgICAgICAvKiB0aGUgbmFtZSBpcyBnaXZlbiwgZ2V0IHVzZXIrcGFzc3dvcmQgKi8KKyAgICAgICAgc3NjYW5mKHVzZXJwYXNzLCAiJSIgTUFYX0NVUkxfVVNFUl9MRU5HVEhfVFhUICJbXjpAXToiCisgICAgICAgICAgICAgICAiJSIgTUFYX0NVUkxfUEFTU1dPUkRfTEVOR1RIX1RYVCAiW15AXSIsCisgICAgICAgICAgICAgICB1c2VyLCBwYXNzd2QpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICAvKiBubyBuYW1lIGdpdmVuLCBnZXQgdGhlIHBhc3N3b3JkIG9ubHkgKi8KKyAgICAgICAgc3NjYW5mKHVzZXJwYXNzLCAiOiUiIE1BWF9DVVJMX1BBU1NXT1JEX0xFTkdUSF9UWFQgIlteQF0iLCBwYXNzd2QpOworCisgICAgICBpZih1c2VyWzBdKSB7CisgICAgICAgIGNoYXIgKm5ld25hbWU9Y3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsIHVzZXIsIDAsIE5VTEwpOworICAgICAgICBpZighbmV3bmFtZSkKKyAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgaWYoc3RybGVuKG5ld25hbWUpIDwgTUFYX0NVUkxfVVNFUl9MRU5HVEgpCisgICAgICAgICAgc3RyY3B5KHVzZXIsIG5ld25hbWUpOworCisgICAgICAgIC8qIGlmIHRoZSBuZXcgbmFtZSBpcyBsb25nZXIgdGhhbiBhY2NlcHRlZCwgdGhlbiBqdXN0IHVzZQorICAgICAgICAgICB0aGUgdW5jb252ZXJ0ZWQgbmFtZSwgaXQnbGwgYmUgd3JvbmcgYnV0IHdoYXQgdGhlIGhlY2sgKi8KKyAgICAgICAgZnJlZShuZXduYW1lKTsKKyAgICAgIH0KKyAgICAgIGlmKHBhc3N3ZFswXSkgeworICAgICAgICAvKiB3ZSBoYXZlIGEgcGFzc3dvcmQgZm91bmQgaW4gdGhlIFVSTCwgZGVjb2RlIGl0ISAqLworICAgICAgICBjaGFyICpuZXdwYXNzd2Q9Y3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsIHBhc3N3ZCwgMCwgTlVMTCk7CisgICAgICAgIGlmKCFuZXdwYXNzd2QpCisgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIGlmKHN0cmxlbihuZXdwYXNzd2QpIDwgTUFYX0NVUkxfUEFTU1dPUkRfTEVOR1RIKQorICAgICAgICAgIHN0cmNweShwYXNzd2QsIG5ld3Bhc3N3ZCk7CisKKyAgICAgICAgZnJlZShuZXdwYXNzd2QpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWd1cmUgb3V0IHRoZSByZW1vdGUgcG9ydCBudW1iZXIgYW5kIGZpeCBpdCBpbiB0aGUgVVJMCisgKgorICogTm8gbWF0dGVyIGlmIHdlIHVzZSBhIHByb3h5IG9yIG5vdCwgd2UgaGF2ZSB0byBmaWd1cmUgb3V0IHRoZSByZW1vdGUKKyAqIHBvcnQgbnVtYmVyIG9mIHZhcmlvdXMgcmVhc29ucy4KKyAqCisgKiBUbyBiZSBhYmxlIHRvIGRldGVjdCBwb3J0IG51bWJlciBmbGF3bGVzc2x5LCB3ZSBtdXN0IG5vdCBjb25mdXNlIHRoZW0KKyAqIElQdjYtc3BlY2lmaWVkIGFkZHJlc3NlcyBpbiB0aGUgWzA6OjFdIHN0eWxlLiAoUkZDMjczMikKKyAqCisgKiBUaGUgY29ubi0+aG9zdC5uYW1lIGlzIGN1cnJlbnRseSBbdXNlcjpwYXNzd2RAXWhvc3RbOnBvcnRdIHdoZXJlIGhvc3QKKyAqIGNvdWxkIGJlIGEgaG9zdG5hbWUsIElQdjQgYWRkcmVzcyBvciBJUHY2IGFkZHJlc3MuCisgKgorICogVGhlIHBvcnQgbnVtYmVyIGVtYmVkZGVkIGluIHRoZSBVUkwgaXMgcmVwbGFjZWQsIGlmIG5lY2Vzc2FyeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIENVUkxjb2RlIHBhcnNlX3JlbW90ZV9wb3J0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgY2hhciAqcG9ydHB0cjsKKyAgY2hhciBlbmRicmFja2V0OworCisgIC8qIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCB0aGUgSVB2NiBhZGRyZXNzIGNhbm5vdCBjb250YWluIGFueSBzY29wZQorICAgICBzdWZmaXggYXMgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgaW4gdGhlIHBhcnNldXJsYW5kZmlsbGNvbm4oKQorICAgICBmdW5jdGlvbiAqLworICBpZigoMSA9PSBzc2NhbmYoY29ubi0+aG9zdC5uYW1lLCAiWyUqNDVbMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRjouXSVjIiwKKyAgICAgICAgICAgICAgICAgICZlbmRicmFja2V0KSkgJiYKKyAgICAgKCddJyA9PSBlbmRicmFja2V0KSkgeworICAgIC8qIHRoaXMgaXMgYSBSRkMyNzMyLXN0eWxlIHNwZWNpZmllZCBJUC1hZGRyZXNzICovCisgICAgY29ubi0+Yml0cy5pcHY2X2lwID0gVFJVRTsKKworICAgIGNvbm4tPmhvc3QubmFtZSsrOyAvKiBza2lwIG92ZXIgdGhlIHN0YXJ0aW5nIGJyYWNrZXQgKi8KKyAgICBwb3J0cHRyID0gc3RyY2hyKGNvbm4tPmhvc3QubmFtZSwgJ10nKTsKKyAgICBpZihwb3J0cHRyKSB7CisgICAgICAqcG9ydHB0cisrID0gJ1wwJzsgLyogemVybyB0ZXJtaW5hdGUsIGtpbGxpbmcgdGhlIGJyYWNrZXQgKi8KKyAgICAgIGlmKCc6JyAhPSAqcG9ydHB0cikKKyAgICAgICAgcG9ydHB0ciA9IE5VTEw7IC8qIG5vIHBvcnQgbnVtYmVyIGF2YWlsYWJsZSAqLworICAgIH0KKyAgfQorICBlbHNlCisgICAgcG9ydHB0ciA9IHN0cnJjaHIoY29ubi0+aG9zdC5uYW1lLCAnOicpOworCisgIGlmKGRhdGEtPnNldC51c2VfcG9ydCAmJiBkYXRhLT5zdGF0ZS5hbGxvd19wb3J0KSB7CisgICAgLyogaWYgc2V0LCB3ZSB1c2UgdGhpcyBhbmQgaWdub3JlIHRoZSBwb3J0IHBvc3NpYmx5IGdpdmVuIGluIHRoZSBVUkwgKi8KKyAgICBjb25uLT5yZW1vdGVfcG9ydCA9ICh1bnNpZ25lZCBzaG9ydClkYXRhLT5zZXQudXNlX3BvcnQ7CisgICAgaWYocG9ydHB0cikKKyAgICAgICpwb3J0cHRyID0gJ1wwJzsgLyogY3V0IG9mZiB0aGUgbmFtZSB0aGVyZSBhbnl3YXkgLSBpZiB0aGVyZSB3YXMgYSBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIC0gc2luY2UgdGhlIHBvcnQgbnVtYmVyIGlzIHRvIGJlIGlnbm9yZWQhICovCisgICAgaWYoY29ubi0+Yml0cy5odHRwcHJveHkpIHsKKyAgICAgIC8qIHdlIG5lZWQgdG8gY3JlYXRlIG5ldyBVUkwgd2l0aCB0aGUgbmV3IHBvcnQgbnVtYmVyICovCisgICAgICBjaGFyICp1cmw7CisgICAgICBjaGFyIHR5cGVbMTJdPSIiOworCisgICAgICBpZihjb25uLT5iaXRzLnR5cGVfc2V0KQorICAgICAgICBzbnByaW50Zih0eXBlLCBzaXplb2YodHlwZSksICI7dHlwZT0lYyIsCisgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5wcmVmZXJfYXNjaWk/J0EnOgorICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LmZ0cF9saXN0X29ubHk/J0QnOidJJykpOworCisgICAgICAvKgorICAgICAgICogVGhpcyBzeW50aGVzaXplZCBVUkwgaXNuJ3QgYWx3YXlzIHJpZ2h0LS1zdWZmaXhlcyBsaWtlIDt0eXBlPUEgYXJlCisgICAgICAgKiBzdHJpcHBlZCBvZmYuIEl0IHdvdWxkIGJlIGJldHRlciB0byB3b3JrIGRpcmVjdGx5IGZyb20gdGhlIG9yaWdpbmFsCisgICAgICAgKiBVUkwgYW5kIHNpbXBseSByZXBsYWNlIHRoZSBwb3J0IHBhcnQgb2YgaXQuCisgICAgICAgKi8KKyAgICAgIHVybCA9IGFwcmludGYoIiVzOi8vJXMlcyVzOiVodSVzJXMlcyIsIGNvbm4tPmdpdmVuLT5zY2hlbWUsCisgICAgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMuaXB2Nl9pcD8iWyI6IiIsIGNvbm4tPmhvc3QubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgY29ubi0+Yml0cy5pcHY2X2lwPyJdIjoiIiwgY29ubi0+cmVtb3RlX3BvcnQsCisgICAgICAgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLnNsYXNoX3JlbW92ZWQ/Ii8iOiIiLCBkYXRhLT5zdGF0ZS5wYXRoLAorICAgICAgICAgICAgICAgICAgICB0eXBlKTsKKyAgICAgIGlmKCF1cmwpCisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgICAgICBpZihkYXRhLT5jaGFuZ2UudXJsX2FsbG9jKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+Y2hhbmdlLnVybCk7CisgICAgICAgIGRhdGEtPmNoYW5nZS51cmxfYWxsb2MgPSBGQUxTRTsKKyAgICAgIH0KKworICAgICAgZGF0YS0+Y2hhbmdlLnVybCA9IHVybDsKKyAgICAgIGRhdGEtPmNoYW5nZS51cmxfYWxsb2MgPSBUUlVFOworICAgIH0KKyAgfQorICBlbHNlIGlmKHBvcnRwdHIpIHsKKyAgICAvKiBubyBDVVJMT1BUX1BPUlQgZ2l2ZW4sIGV4dHJhY3QgdGhlIG9uZSBmcm9tIHRoZSBVUkwgKi8KKworICAgIGNoYXIgKnJlc3Q7CisgICAgdW5zaWduZWQgbG9uZyBwb3J0OworCisgICAgcG9ydD1zdHJ0b3VsKHBvcnRwdHIrMSwgJnJlc3QsIDEwKTsgIC8qIFBvcnQgbnVtYmVyIG11c3QgYmUgZGVjaW1hbCAqLworCisgICAgaWYocmVzdCAhPSAocG9ydHB0cisxKSAmJiAqcmVzdCA9PSAnXDAnKSB7CisgICAgICAvKiBUaGUgY29sb24gcmVhbGx5IGRpZCBoYXZlIG9ubHkgZGlnaXRzIGFmdGVyIGl0LAorICAgICAgICogc28gaXQgaXMgZWl0aGVyIGEgcG9ydCBudW1iZXIgb3IgYSBtaXN0YWtlICovCisKKyAgICAgIGlmKHBvcnQgPiAweGZmZmYpIHsgICAvKiBTaW5nbGUgdW5peCBzdGFuZGFyZCBzYXlzIHBvcnQgbnVtYmVycyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMTYgYml0cyBsb25nICovCisgICAgICAgIGZhaWxmKGRhdGEsICJQb3J0IG51bWJlciB0b28gbGFyZ2U6ICVsdSIsIHBvcnQpOworICAgICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKKyAgICAgIH0KKworICAgICAgKnBvcnRwdHIgPSAnXDAnOyAvKiBjdXQgb2ZmIHRoZSBuYW1lIHRoZXJlICovCisgICAgICBjb25uLT5yZW1vdGVfcG9ydCA9IGN1cmx4X3VsdG91cyhwb3J0KTsKKyAgICB9CisgICAgZWxzZSBpZighcG9ydCkKKyAgICAgIC8qIEJyb3dzZXIgYmVoYXZpb3IgYWRhcHRhdGlvbi4gSWYgdGhlcmUncyBhIGNvbG9uIHdpdGggbm8gZGlnaXRzIGFmdGVyLAorICAgICAgICAganVzdCBjdXQgb2ZmIHRoZSBuYW1lIHRoZXJlIHdoaWNoIG1ha2VzIHVzIGlnbm9yZSB0aGUgY29sb24gYW5kIGp1c3QKKyAgICAgICAgIHVzZSB0aGUgZGVmYXVsdCBwb3J0LiBGaXJlZm94IGFuZCBDaHJvbWUgYm90aCBkbyB0aGF0LiAqLworICAgICAgKnBvcnRwdHIgPSAnXDAnOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIE92ZXJyaWRlIGEgdXNlciBuYW1lIGFuZCBwYXNzd29yZCBmcm9tIHRoZSBVUkwgd2l0aCB0aGF0IGluIHRoZQorICogQ1VSTE9QVF9VU0VSUFdEIG9wdGlvbiBvciBhIC5uZXRyYyBmaWxlLCBpZiBhcHBsaWNhYmxlLgorICovCitzdGF0aWMgdm9pZCBvdmVycmlkZV91c2VycGFzcyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzZXIsIGNoYXIgKnBhc3N3ZCkKK3sKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfVVNFUk5BTUVdICE9IE5VTEwpIHsKKyAgICBzdHJuY3B5KHVzZXIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1VTRVJOQU1FXSwgTUFYX0NVUkxfVVNFUl9MRU5HVEgpOworICAgIHVzZXJbTUFYX0NVUkxfVVNFUl9MRU5HVEgtMV0gPSAnXDAnOyAgIC8qVG8gYmUgb24gc2FmZSBzaWRlKi8KKyAgfQorICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19QQVNTV09SRF0gIT0gTlVMTCkgeworICAgIHN0cm5jcHkocGFzc3dkLCBkYXRhLT5zZXQuc3RyW1NUUklOR19QQVNTV09SRF0sIE1BWF9DVVJMX1BBU1NXT1JEX0xFTkdUSCk7CisgICAgcGFzc3dkW01BWF9DVVJMX1BBU1NXT1JEX0xFTkdUSC0xXSA9ICdcMCc7IC8qVG8gYmUgb24gc2FmZSBzaWRlKi8KKyAgfQorCisgIGNvbm4tPmJpdHMubmV0cmMgPSBGQUxTRTsKKyAgaWYoZGF0YS0+c2V0LnVzZV9uZXRyYyAhPSBDVVJMX05FVFJDX0lHTk9SRUQpIHsKKyAgICBpZihDdXJsX3BhcnNlbmV0cmMoY29ubi0+aG9zdC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICB1c2VyLCBwYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX05FVFJDX0ZJTEVdKSkgeworICAgICAgaW5mb2YoZGF0YSwgIkNvdWxkbid0IGZpbmQgaG9zdCAlcyBpbiB0aGUgIgorICAgICAgICAgICAgRE9UX0NIQVIgIm5ldHJjIGZpbGU7IHVzaW5nIGRlZmF1bHRzXG4iLAorICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBzZXQgYml0cy5uZXRyYyBUUlVFIHRvIHJlbWVtYmVyIHRoYXQgd2UgZ290IHRoZSBuYW1lIGZyb20gYSAubmV0cmMKKyAgICAgICAgIGZpbGUsIHNvIHRoYXQgaXQgaXMgc2FmZSB0byB1c2UgZXZlbiBpZiB3ZSBmb2xsb3dlZCBhIExvY2F0aW9uOiB0byBhCisgICAgICAgICBkaWZmZXJlbnQgaG9zdCBvciBzaW1pbGFyLiAqLworICAgICAgY29ubi0+Yml0cy5uZXRyYyA9IFRSVUU7CisKKyAgICAgIGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgPSBUUlVFOyAvKiBlbmFibGUgdXNlcitwYXNzd29yZCAqLworICAgIH0KKyAgfQorfQorCisvKgorICogU2V0IHBhc3N3b3JkIHNvIGl0J3MgYXZhaWxhYmxlIGluIHRoZSBjb25uZWN0aW9uLgorICovCitzdGF0aWMgQ1VSTGNvZGUgc2V0X3VzZXJwYXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqcGFzc3dkKQoreworICAvKiBJZiBvdXIgcHJvdG9jb2wgbmVlZHMgYSBwYXNzd29yZCBhbmQgd2UgaGF2ZSBub25lLCB1c2UgdGhlIGRlZmF1bHRzICovCisgIGlmKChjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfTkVFRFNQV0QpICYmCisgICAgICFjb25uLT5iaXRzLnVzZXJfcGFzc3dkKSB7CisKKyAgICBjb25uLT51c2VyID0gc3RyZHVwKENVUkxfREVGQVVMVF9VU0VSKTsKKyAgICBpZihjb25uLT51c2VyKQorICAgICAgY29ubi0+cGFzc3dkID0gc3RyZHVwKENVUkxfREVGQVVMVF9QQVNTV09SRCk7CisgICAgZWxzZQorICAgICAgY29ubi0+cGFzc3dkID0gTlVMTDsKKyAgICAvKiBUaGlzIGlzIHRoZSBkZWZhdWx0IHBhc3N3b3JkLCBzbyBET04nVCBzZXQgY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCAqLworICB9CisgIGVsc2UgeworICAgIC8qIHN0b3JlIHVzZXIgKyBwYXNzd29yZCwgemVyby1sZW5ndGggaWYgbm90IHNldCAqLworICAgIGNvbm4tPnVzZXIgPSBzdHJkdXAodXNlcik7CisgICAgaWYoY29ubi0+dXNlcikKKyAgICAgIGNvbm4tPnBhc3N3ZCA9IHN0cmR1cChwYXNzd2QpOworICAgIGVsc2UKKyAgICAgIGNvbm4tPnBhc3N3ZCA9IE5VTEw7CisgIH0KKyAgaWYoIWNvbm4tPnVzZXIgfHwgIWNvbm4tPnBhc3N3ZCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZXNvbHZlIHRoZSBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXIgb3IgcHJveHkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIENVUkxjb2RlIHJlc29sdmVfc2VydmVyKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICphc3luYykKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0PUNVUkxFX09LOworICBsb25nIHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIFJlc29sdmUgdGhlIG5hbWUgb2YgdGhlIHNlcnZlciBvciBwcm94eQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgaWYoY29ubi0+Yml0cy5yZXVzZSkgeworICAgIC8qIFdlJ3JlIHJldXNpbmcgdGhlIGNvbm5lY3Rpb24gLSBubyBuZWVkIHRvIHJlc29sdmUgYW55dGhpbmcgKi8KKyAgICAqYXN5bmMgPSBGQUxTRTsKKworICAgIGlmKGNvbm4tPmJpdHMucHJveHkpCisgICAgICBmaXhfaG9zdG5hbWUoZGF0YSwgY29ubiwgJmNvbm4tPmhvc3QpOworICB9CisgIGVsc2UgeworICAgIC8qIHRoaXMgaXMgYSBmcmVzaCBjb25uZWN0ICovCisgICAgaW50IHJjOworICAgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqaG9zdGFkZHI7CisKKyAgICAvKiBzZXQgYSBwb2ludGVyIHRvIHRoZSBob3N0bmFtZSB3ZSBkaXNwbGF5ICovCisgICAgZml4X2hvc3RuYW1lKGRhdGEsIGNvbm4sICZjb25uLT5ob3N0KTsKKworICAgIGlmKCFjb25uLT5wcm94eS5uYW1lIHx8ICEqY29ubi0+cHJveHkubmFtZSkgeworICAgICAgLyogSWYgbm90IGNvbm5lY3RpbmcgdmlhIGEgcHJveHksIGV4dHJhY3QgdGhlIHBvcnQgZnJvbSB0aGUgVVJMLCBpZiBpdCBpcworICAgICAgICogdGhlcmUsIHRodXMgb3ZlcnJpZGluZyBhbnkgZGVmYXVsdHMgdGhhdCBtaWdodCBoYXZlIGJlZW4gc2V0IGFib3ZlLiAqLworICAgICAgY29ubi0+cG9ydCA9ICBjb25uLT5yZW1vdGVfcG9ydDsgLyogaXQgaXMgdGhlIHNhbWUgcG9ydCAqLworCisgICAgICAvKiBSZXNvbHZlIHRhcmdldCBob3N0IHJpZ2h0IG9uICovCisgICAgICByYyA9IEN1cmxfcmVzb2x2X3RpbWVvdXQoY29ubiwgY29ubi0+aG9zdC5uYW1lLCAoaW50KWNvbm4tPnBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3RhZGRyLCB0aW1lb3V0X21zKTsKKyAgICAgIGlmKHJjID09IENVUkxSRVNPTFZfUEVORElORykKKyAgICAgICAgKmFzeW5jID0gVFJVRTsKKworICAgICAgZWxzZSBpZihyYyA9PSBDVVJMUkVTT0xWX1RJTUVET1VUKQorICAgICAgICByZXN1bHQgPSBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisKKyAgICAgIGVsc2UgaWYoIWhvc3RhZGRyKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZG4ndCByZXNvbHZlIGhvc3QgJyVzJyIsIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworICAgICAgICByZXN1bHQgPSAgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX0hPU1Q7CisgICAgICAgIC8qIGRvbid0IHJldHVybiB5ZXQsIHdlIG5lZWQgdG8gY2xlYW4gdXAgdGhlIHRpbWVvdXQgZmlyc3QgKi8KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBUaGlzIGlzIGEgcHJveHkgdGhhdCBoYXNuJ3QgYmVlbiByZXNvbHZlZCB5ZXQuICovCisKKyAgICAgIC8qIElETi1maXggdGhlIHByb3h5IG5hbWUgKi8KKyAgICAgIGZpeF9ob3N0bmFtZShkYXRhLCBjb25uLCAmY29ubi0+cHJveHkpOworCisgICAgICAvKiByZXNvbHZlIHByb3h5ICovCisgICAgICByYyA9IEN1cmxfcmVzb2x2X3RpbWVvdXQoY29ubiwgY29ubi0+cHJveHkubmFtZSwgKGludCljb25uLT5wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0YWRkciwgdGltZW91dF9tcyk7CisKKyAgICAgIGlmKHJjID09IENVUkxSRVNPTFZfUEVORElORykKKyAgICAgICAgKmFzeW5jID0gVFJVRTsKKworICAgICAgZWxzZSBpZihyYyA9PSBDVVJMUkVTT0xWX1RJTUVET1VUKQorICAgICAgICByZXN1bHQgPSBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CisKKyAgICAgIGVsc2UgaWYoIWhvc3RhZGRyKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJDb3VsZG4ndCByZXNvbHZlIHByb3h5ICclcyciLCBjb25uLT5wcm94eS5kaXNwbmFtZSk7CisgICAgICAgIHJlc3VsdCA9IENVUkxFX0NPVUxETlRfUkVTT0xWRV9QUk9YWTsKKyAgICAgICAgLyogZG9uJ3QgcmV0dXJuIHlldCwgd2UgbmVlZCB0byBjbGVhbiB1cCB0aGUgdGltZW91dCBmaXJzdCAqLworICAgICAgfQorICAgIH0KKyAgICBERUJVR0FTU0VSVChjb25uLT5kbnNfZW50cnkgPT0gTlVMTCk7CisgICAgY29ubi0+ZG5zX2VudHJ5ID0gaG9zdGFkZHI7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ2xlYW51cCB0aGUgY29ubmVjdGlvbiBqdXN0IGFsbG9jYXRlZCBiZWZvcmUgd2UgY2FuIG1vdmUgYWxvbmcgYW5kIHVzZSB0aGUKKyAqIHByZXZpb3VzbHkgZXhpc3Rpbmcgb25lLiAgQWxsIHJlbGV2YW50IGRhdGEgaXMgY29waWVkIG92ZXIgYW5kIG9sZF9jb25uIGlzCisgKiByZWFkeSBmb3IgZnJlZWluZyBvbmNlIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KKyAqLworc3RhdGljIHZvaWQgcmV1c2VfY29ubihzdHJ1Y3QgY29ubmVjdGRhdGEgKm9sZF9jb25uLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGlmKG9sZF9jb25uLT5wcm94eS5yYXdhbGxvYykKKyAgICBmcmVlKG9sZF9jb25uLT5wcm94eS5yYXdhbGxvYyk7CisKKyAgLyogZnJlZSB0aGUgU1NMIGNvbmZpZyBzdHJ1Y3QgZnJvbSB0aGlzIGNvbm5lY3Rpb24gc3RydWN0IGFzIHRoaXMgd2FzCisgICAgIGFsbG9jYXRlZCBpbiB2YWluIGFuZCBpcyB0YXJnZXRlZCBmb3IgZGVzdHJ1Y3Rpb24gKi8KKyAgQ3VybF9mcmVlX3NzbF9jb25maWcoJm9sZF9jb25uLT5zc2xfY29uZmlnKTsKKworICBjb25uLT5kYXRhID0gb2xkX2Nvbm4tPmRhdGE7CisKKyAgLyogZ2V0IHRoZSB1c2VyK3Bhc3N3b3JkIGluZm9ybWF0aW9uIGZyb20gdGhlIG9sZF9jb25uIHN0cnVjdCBzaW5jZSBpdCBtYXkKKyAgICogYmUgbmV3IGZvciB0aGlzIHJlcXVlc3QgZXZlbiB3aGVuIHdlIHJlLXVzZSBhbiBleGlzdGluZyBjb25uZWN0aW9uICovCisgIGNvbm4tPmJpdHMudXNlcl9wYXNzd2QgPSBvbGRfY29ubi0+Yml0cy51c2VyX3Bhc3N3ZDsKKyAgaWYoY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCkgeworICAgIC8qIHVzZSB0aGUgbmV3IHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgdGhvdWdoICovCisgICAgQ3VybF9zYWZlZnJlZShjb25uLT51c2VyKTsKKyAgICBDdXJsX3NhZmVmcmVlKGNvbm4tPnBhc3N3ZCk7CisgICAgY29ubi0+dXNlciA9IG9sZF9jb25uLT51c2VyOworICAgIGNvbm4tPnBhc3N3ZCA9IG9sZF9jb25uLT5wYXNzd2Q7CisgICAgb2xkX2Nvbm4tPnVzZXIgPSBOVUxMOworICAgIG9sZF9jb25uLT5wYXNzd2QgPSBOVUxMOworICB9CisKKyAgY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCA9IG9sZF9jb25uLT5iaXRzLnByb3h5X3VzZXJfcGFzc3dkOworICBpZihjb25uLT5iaXRzLnByb3h5X3VzZXJfcGFzc3dkKSB7CisgICAgLyogdXNlIHRoZSBuZXcgcHJveHkgdXNlciBuYW1lIGFuZCBwcm94eSBwYXNzd29yZCB0aG91Z2ggKi8KKyAgICBDdXJsX3NhZmVmcmVlKGNvbm4tPnByb3h5dXNlcik7CisgICAgQ3VybF9zYWZlZnJlZShjb25uLT5wcm94eXBhc3N3ZCk7CisgICAgY29ubi0+cHJveHl1c2VyID0gb2xkX2Nvbm4tPnByb3h5dXNlcjsKKyAgICBjb25uLT5wcm94eXBhc3N3ZCA9IG9sZF9jb25uLT5wcm94eXBhc3N3ZDsKKyAgICBvbGRfY29ubi0+cHJveHl1c2VyID0gTlVMTDsKKyAgICBvbGRfY29ubi0+cHJveHlwYXNzd2QgPSBOVUxMOworICB9CisKKyAgLyogaG9zdCBjYW4gY2hhbmdlLCB3aGVuIGRvaW5nIGtlZXBhbGl2ZSB3aXRoIGEgcHJveHkgb3IgaWYgdGhlIGNhc2UgaXMKKyAgICAgZGlmZmVyZW50IHRoaXMgdGltZSBldGMgKi8KKyAgQ3VybF9zYWZlZnJlZShjb25uLT5ob3N0LnJhd2FsbG9jKTsKKyAgY29ubi0+aG9zdD1vbGRfY29ubi0+aG9zdDsKKworICAvKiBwZXJzaXN0IGNvbm5lY3Rpb24gaW5mbyBpbiBzZXNzaW9uIGhhbmRsZSAqLworICBDdXJsX3BlcnNpc3Rjb25uaW5mbyhjb25uKTsKKworICAvKiByZS11c2UgaW5pdCAqLworICBjb25uLT5iaXRzLnJldXNlID0gVFJVRTsgLyogeWVzLCB3ZSdyZSByZS11c2luZyBoZXJlICovCisKKyAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+dXNlcik7CisgIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPnBhc3N3ZCk7CisgIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPnByb3h5dXNlcik7CisgIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPnByb3h5cGFzc3dkKTsKKworICBDdXJsX2xsaXN0X2Rlc3Ryb3kob2xkX2Nvbm4tPnNlbmRfcGlwZSwgTlVMTCk7CisgIEN1cmxfbGxpc3RfZGVzdHJveShvbGRfY29ubi0+cmVjdl9waXBlLCBOVUxMKTsKKyAgQ3VybF9sbGlzdF9kZXN0cm95KG9sZF9jb25uLT5wZW5kX3BpcGUsIE5VTEwpOworICBDdXJsX2xsaXN0X2Rlc3Ryb3kob2xkX2Nvbm4tPmRvbmVfcGlwZSwgTlVMTCk7CisKKyAgb2xkX2Nvbm4tPnNlbmRfcGlwZSA9IE5VTEw7CisgIG9sZF9jb25uLT5yZWN2X3BpcGUgPSBOVUxMOworICBvbGRfY29ubi0+cGVuZF9waXBlID0gTlVMTDsKKyAgb2xkX2Nvbm4tPmRvbmVfcGlwZSA9IE5VTEw7CisKKyAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+bWFzdGVyX2J1ZmZlcik7Cit9CisKKy8qKgorICogY3JlYXRlX2Nvbm4oKSBzZXRzIHVwIGEgbmV3IGNvbm5lY3RkYXRhIHN0cnVjdCwgb3IgcmUtdXNlcyBhbiBhbHJlYWR5CisgKiBleGlzdGluZyBvbmUsIGFuZCByZXNvbHZlcyBob3N0IG5hbWUuCisgKgorICogaWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIENVUkxFX09LIGFuZCAqYXN5bmMgaXMgc2V0IHRvIFRSVUUsIHRoZSByZXNvbHZlCisgKiByZXNwb25zZSB3aWxsIGJlIGNvbWluZyBhc3luY2hyb25vdXNseS4gSWYgKmFzeW5jIGlzIEZBTFNFLCB0aGUgbmFtZSBpcworICogYWxyZWFkeSByZXNvbHZlZC4KKyAqCisgKiBAcGFyYW0gZGF0YSBUaGUgc2Vzc2lvbmhhbmRsZSBwb2ludGVyCisgKiBAcGFyYW0gaW5fY29ubmVjdCBpcyBzZXQgdG8gdGhlIG5leHQgY29ubmVjdGlvbiBkYXRhIHBvaW50ZXIKKyAqIEBwYXJhbSBhc3luYyBpcyBzZXQgVFJVRSB3aGVuIGFuIGFzeW5jIEROUyByZXNvbHV0aW9uIGlzIHBlbmRpbmcKKyAqIEBzZWUgQ3VybF9zZXR1cF9jb25uKCkKKyAqCisgKiAqTk9URSogdGhpcyBmdW5jdGlvbiBhc3NpZ25zIHRoZSBjb25uLT5kYXRhIHBvaW50ZXIhCisgKi8KKworc3RhdGljIENVUkxjb2RlIGNyZWF0ZV9jb25uKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqKmluX2Nvbm5lY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXN5bmMpCit7CisgIENVUkxjb2RlIHJlc3VsdD1DVVJMRV9PSzsKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uOworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm5fdGVtcCA9IE5VTEw7CisgIHNpemVfdCB1cmxsZW47CisgIGNoYXIgdXNlcltNQVhfQ1VSTF9VU0VSX0xFTkdUSF07CisgIGNoYXIgcGFzc3dkW01BWF9DVVJMX1BBU1NXT1JEX0xFTkdUSF07CisgIGJvb2wgcmV1c2U7CisgIGNoYXIgKnByb3h5ID0gTlVMTDsKKyAgYm9vbCBwcm90X21pc3NpbmcgPSBGQUxTRTsKKworICAqYXN5bmMgPSBGQUxTRTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBDaGVjayBpbnB1dCBkYXRhCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIGlmKCFkYXRhLT5jaGFuZ2UudXJsKQorICAgIHJldHVybiBDVVJMRV9VUkxfTUFMRk9STUFUOworCisgIC8qIEZpcnN0LCBzcGxpdCB1cCB0aGUgY3VycmVudCBVUkwgaW4gcGFydHMgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZQorICAgICBwYXJ0cyBmb3IgY2hlY2tpbmcgYWdhaW5zdCB0aGUgYWxyZWFkeSBwcmVzZW50IGNvbm5lY3Rpb25zLiBJbiBvcmRlcgorICAgICB0byBub3QgaGF2ZSB0byBtb2RpZnkgZXZlcnl0aGluZyBhdCBvbmNlLCB3ZSBhbGxvY2F0ZSBhIHRlbXBvcmFyeQorICAgICBjb25uZWN0aW9uIGRhdGEgc3RydWN0IGFuZCBmaWxsIGluIGZvciBjb21wYXJpc29uIHB1cnBvc2VzLiAqLworICBjb25uID0gYWxsb2NhdGVfY29ubihkYXRhKTsKKworICBpZighY29ubikKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAvKiBXZSBtdXN0IHNldCB0aGUgcmV0dXJuIHZhcmlhYmxlIGFzIHNvb24gYXMgcG9zc2libGUsIHNvIHRoYXQgb3VyCisgICAgIHBhcmVudCBjYW4gY2xlYW51cCBhbnkgcG9zc2libGUgYWxsb2NzIHdlIG1heSBoYXZlIGRvbmUgYmVmb3JlCisgICAgIGFueSBmYWlsdXJlICovCisgICppbl9jb25uZWN0ID0gY29ubjsKKworICAvKiBUaGlzIGluaXRpbmcgY29udGludWVzIGJlbG93LCBzZWUgdGhlIGNvbW1lbnQgIkNvbnRpbnVlIGNvbm5lY3RkYXRhCisgICAqIGluaXRpYWxpemF0aW9uIGhlcmUiICovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIFdlIG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IHRvIHN0b3JlIHRoZSBwYXRoIGluLiBXZSBnZXQgdGhlIHNpemUgb2YgdGhlCisgICAqIGZ1bGwgVVJMIHRvIGJlIHN1cmUsIGFuZCB3ZSBuZWVkIHRvIG1ha2UgaXQgYXQgbGVhc3QgMjU2IGJ5dGVzIHNpbmNlCisgICAqIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIHdpbGwgcmVseSBvbiB0aGlzIGZhY3QKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBMRUFTVF9QQVRIX0FMTE9DIDI1NgorICB1cmxsZW49c3RybGVuKGRhdGEtPmNoYW5nZS51cmwpOworICBpZih1cmxsZW4gPCBMRUFTVF9QQVRIX0FMTE9DKQorICAgIHVybGxlbj1MRUFTVF9QQVRIX0FMTE9DOworCisgIC8qCisgICAqIFdlIG1hbGxvYygpIHRoZSBidWZmZXJzIGJlbG93IHVybGxlbisyIHRvIG1ha2Ugcm9vbSBmb3IgdG8gcG9zc2liaWxpdGllczoKKyAgICogMSAtIGFuIGV4dHJhIHRlcm1pbmF0aW5nIHplcm8KKyAgICogMiAtIGFuIGV4dHJhIHNsYXNoIChpbiBjYXNlIGEgc3ludGF4IGxpa2UgInd3dy5ob3N0LmNvbT9tb28iIGlzIHVzZWQpCisgICAqLworCisgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUucGF0aGJ1ZmZlcik7CisgIGRhdGEtPnN0YXRlLnBhdGggPSBOVUxMOworCisgIGRhdGEtPnN0YXRlLnBhdGhidWZmZXIgPSBtYWxsb2ModXJsbGVuKzIpOworICBpZihOVUxMID09IGRhdGEtPnN0YXRlLnBhdGhidWZmZXIpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7IC8qIHJlYWxseSBiYWQgZXJyb3IgKi8KKyAgZGF0YS0+c3RhdGUucGF0aCA9IGRhdGEtPnN0YXRlLnBhdGhidWZmZXI7CisKKyAgY29ubi0+aG9zdC5yYXdhbGxvYyA9IG1hbGxvYyh1cmxsZW4rMik7CisgIGlmKE5VTEwgPT0gY29ubi0+aG9zdC5yYXdhbGxvYykgeworICAgIEN1cmxfc2FmZWZyZWUoZGF0YS0+c3RhdGUucGF0aGJ1ZmZlcik7CisgICAgZGF0YS0+c3RhdGUucGF0aCA9IE5VTEw7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICBjb25uLT5ob3N0Lm5hbWUgPSBjb25uLT5ob3N0LnJhd2FsbG9jOworICBjb25uLT5ob3N0Lm5hbWVbMF0gPSAwOworCisgIHJlc3VsdCA9IHBhcnNldXJsYW5kZmlsbGNvbm4oZGF0YSwgY29ubiwgJnByb3RfbWlzc2luZywgdXNlciwgcGFzc3dkKTsKKyAgaWYocmVzdWx0ICE9IENVUkxFX09LKQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogTm8gcHJvdG9jb2wgcGFydCBpbiBVUkwgd2FzIHVzZWQsIGFkZCBpdCEKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIGlmKHByb3RfbWlzc2luZykgeworICAgIC8qIFdlJ3JlIGd1ZXNzaW5nIHByZWZpeGVzIGhlcmUgYW5kIGlmIHdlJ3JlIHRvbGQgdG8gdXNlIGEgcHJveHkgb3IgaWYKKyAgICAgICB3ZSdyZSBnb25uYSBmb2xsb3cgYSBMb2NhdGlvbjogbGF0ZXIgb3IuLi4gdGhlbiB3ZSBuZWVkIHRoZSBwcm90b2NvbAorICAgICAgIHBhcnQgYWRkZWQgc28gdGhhdCB3ZSBoYXZlIGEgdmFsaWQgVVJMLiAqLworICAgIGNoYXIgKnJldXJsOworCisgICAgcmV1cmwgPSBhcHJpbnRmKCIlczovLyVzIiwgY29ubi0+aGFuZGxlci0+c2NoZW1lLCBkYXRhLT5jaGFuZ2UudXJsKTsKKworICAgIGlmKCFyZXVybCkgeworICAgICAgQ3VybF9zYWZlZnJlZShwcm94eSk7CisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisKKyAgICBpZihkYXRhLT5jaGFuZ2UudXJsX2FsbG9jKSB7CisgICAgICBDdXJsX3NhZmVmcmVlKGRhdGEtPmNoYW5nZS51cmwpOworICAgICAgZGF0YS0+Y2hhbmdlLnVybF9hbGxvYyA9IEZBTFNFOworICAgIH0KKworICAgIGRhdGEtPmNoYW5nZS51cmwgPSByZXVybDsKKyAgICBkYXRhLT5jaGFuZ2UudXJsX2FsbG9jID0gVFJVRTsgLyogZnJlZSB0aGlzIGxhdGVyICovCisgIH0KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBJZiB0aGUgcHJvdG9jb2wgY2FuJ3QgaGFuZGxlIHVybCBxdWVyeSBzdHJpbmdzLCB0aGVuIGN1dAorICAgKiBvZiB0aGUgdW5oYW5kYWJsZSBwYXJ0CisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICBpZigoY29ubi0+Z2l2ZW4tPmZsYWdzJlBST1RPUFRfTk9VUkxRVUVSWSkpIHsKKyAgICBjaGFyICpwYXRoX3Ffc2VwID0gc3RyY2hyKGNvbm4tPmRhdGEtPnN0YXRlLnBhdGgsICc/Jyk7CisgICAgaWYocGF0aF9xX3NlcCkgeworICAgICAgLyogYWNjb3JkaW5nIHRvIHJmYzM5ODYsIGFsbG93IHRoZSBxdWVyeSAoP2Zvbz1iYXIpCisgICAgICAgICBhbHNvIG9uIHByb3RvY29scyB0aGF0IGNhbid0IGhhbmRsZSBpdC4KKworICAgICAgICBjdXQgdGhlIHN0cmluZy1wYXJ0IGFmdGVyICc/JworICAgICAgICAgKi8KKworICAgICAgLyogdGVybWluYXRlIHRoZSBzdHJpbmcgKi8KKyAgICAgIHBhdGhfcV9zZXBbMF0gPSAwOworICAgIH0KKyAgfQorCisjaWZuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBFeHRyYWN0IHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmcm9tIHRoZSBhdXRoZW50aWNhdGlvbiBzdHJpbmcKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIGlmKGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QpIHsKKyAgICByZXN1bHQgPSBwYXJzZV9wcm94eV9hdXRoKGRhdGEsIGNvbm4pOworICAgIGlmKHJlc3VsdCAhPSBDVVJMRV9PSykKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIERldGVjdCB3aGF0IChpZiBhbnkpIHByb3h5IHRvIHVzZQorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfUFJPWFldKSB7CisgICAgcHJveHkgPSBzdHJkdXAoZGF0YS0+c2V0LnN0cltTVFJJTkdfUFJPWFldKTsKKyAgICAvKiBpZiBnbG9iYWwgcHJveHkgaXMgc2V0LCB0aGlzIGlzIGl0ICovCisgICAgaWYoTlVMTCA9PSBwcm94eSkgeworICAgICAgZmFpbGYoZGF0YSwgIm1lbW9yeSBzaG9ydGFnZSIpOworICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgfQorICB9CisKKyAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfTk9QUk9YWV0gJiYKKyAgICAgY2hlY2tfbm9wcm94eShjb25uLT5ob3N0Lm5hbWUsIGRhdGEtPnNldC5zdHJbU1RSSU5HX05PUFJPWFldKSkgeworICAgIGlmKHByb3h5KSB7CisgICAgICBmcmVlKHByb3h5KTsgIC8qIHByb3h5IGlzIGluIGV4Y2VwdGlvbiBsaXN0ICovCisgICAgICBwcm94eSA9IE5VTEw7CisgICAgfQorICB9CisgIGVsc2UgaWYoIXByb3h5KQorICAgIHByb3h5ID0gZGV0ZWN0X3Byb3h5KGNvbm4pOworCisgIGlmKHByb3h5ICYmICghKnByb3h5IHx8IChjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfTk9ORVRXT1JLKSkpIHsKKyAgICBmcmVlKHByb3h5KTsgIC8qIERvbid0IGJvdGhlciB3aXRoIGFuIGVtcHR5IHByb3h5IHN0cmluZyBvciBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIGRvZXNuJ3Qgd29yayB3aXRoIG5ldHdvcmsgKi8KKyAgICBwcm94eSA9IE5VTEw7CisgIH0KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogSWYgdGhpcyBpcyBzdXBwb3NlZCB0byB1c2UgYSBwcm94eSwgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcm94eSBob3N0CisgICAqIG5hbWUsIHByb3h5IHR5cGUgYW5kIHBvcnQgbnVtYmVyLCBzbyB0aGF0IHdlIGNhbiByZS11c2UgYW4gZXhpc3RpbmcKKyAgICogY29ubmVjdGlvbiB0aGF0IG1heSBleGlzdCByZWdpc3RlcmVkIHRvIHRoZSBzYW1lIHByb3h5IGhvc3QuCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgaWYocHJveHkpIHsKKyAgICByZXN1bHQgPSBwYXJzZV9wcm94eShkYXRhLCBjb25uLCBwcm94eSk7CisKKyAgICBmcmVlKHByb3h5KTsgLyogcGFyc2VfcHJveHkgY29waWVzIHRoZSBwcm94eSBzdHJpbmcgKi8KKworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZigoY29ubi0+cHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQKSB8fAorICAgICAgIChjb25uLT5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX0hUVFBfMV8wKSkgeworI2lmZGVmIENVUkxfRElTQUJMRV9IVFRQCisgICAgICAvKiBhc2tpbmcgZm9yIGEgSFRUUCBwcm94eSBpcyBhIGJpdCBmdW5ueSB3aGVuIEhUVFAgaXMgZGlzYWJsZWQuLi4gKi8KKyAgICAgIHJldHVybiBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTDsKKyNlbHNlCisgICAgICAvKiBmb3JjZSB0aGlzIGNvbm5lY3Rpb24ncyBwcm90b2NvbCB0byBiZWNvbWUgSFRUUCBpZiBub3QgYWxyZWFkeQorICAgICAgICAgY29tcGF0aWJsZSAtIGlmIGl0IGlzbid0IHR1bm5lbGluZyB0aHJvdWdoICovCisgICAgICBpZighKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX0hUVFApICYmCisgICAgICAgICAhY29ubi0+Yml0cy50dW5uZWxfcHJveHkpCisgICAgICAgIGNvbm4tPmhhbmRsZXIgPSAmQ3VybF9oYW5kbGVyX2h0dHA7CisKKyAgICAgIGNvbm4tPmJpdHMuaHR0cHByb3h5ID0gVFJVRTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgICBjb25uLT5iaXRzLmh0dHBwcm94eSA9IEZBTFNFOyAvKiBub3QgYSBIVFRQIHByb3h5ICovCisgICAgY29ubi0+Yml0cy5wcm94eSA9IFRSVUU7CisgIH0KKyAgZWxzZSB7CisgICAgLyogd2UgYXJlbid0IHVzaW5nIHRoZSBwcm94eSBhZnRlciBhbGwuLi4gKi8KKyAgICBjb25uLT5iaXRzLnByb3h5ID0gRkFMU0U7CisgICAgY29ubi0+Yml0cy5odHRwcHJveHkgPSBGQUxTRTsKKyAgICBjb25uLT5iaXRzLnByb3h5X3VzZXJfcGFzc3dkID0gRkFMU0U7CisgICAgY29ubi0+Yml0cy50dW5uZWxfcHJveHkgPSBGQUxTRTsKKyAgfQorCisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogU2V0dXAgaW50ZXJuYWxzIGRlcGVuZGluZyBvbiBwcm90b2NvbC4gTmVlZHMgdG8gYmUgZG9uZSBhZnRlcgorICAgKiB3ZSBmaWd1cmVkIG91dCB3aGF0L2lmIHByb3h5IHRvIHVzZS4KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIHJlc3VsdCA9IHNldHVwX2Nvbm5lY3Rpb25faW50ZXJuYWxzKGNvbm4pOworICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spIHsKKyAgICBDdXJsX3NhZmVmcmVlKHByb3h5KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgY29ubi0+cmVjdltGSVJTVFNPQ0tFVF0gPSBDdXJsX3JlY3ZfcGxhaW47CisgIGNvbm4tPnNlbmRbRklSU1RTT0NLRVRdID0gQ3VybF9zZW5kX3BsYWluOworICBjb25uLT5yZWN2W1NFQ09OREFSWVNPQ0tFVF0gPSBDdXJsX3JlY3ZfcGxhaW47CisgIGNvbm4tPnNlbmRbU0VDT05EQVJZU09DS0VUXSA9IEN1cmxfc2VuZF9wbGFpbjsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogZmlsZTogaXMgYSBzcGVjaWFsIGNhc2UgaW4gdGhhdCBpdCBkb2Vzbid0IG5lZWQgYSBuZXR3b3JrIGNvbm5lY3Rpb24KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBDVVJMX0RJU0FCTEVfRklMRQorICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfTk9ORVRXT1JLKSB7CisgICAgYm9vbCBkb25lOworICAgIC8qIHRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIGNvbm5lY3QgZnVuY3Rpb24gc28gd2UgYmV0dGVyIGF0IGxlYXN0IGNoZWNrCisgICAgICAgdGhhdCB0aGUgZmlsZSBpcyBwcmVzZW50IGhlcmUhICovCisgICAgREVCVUdBU1NFUlQoY29ubi0+aGFuZGxlci0+Y29ubmVjdF9pdCk7CisgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+Y29ubmVjdF9pdChjb25uLCAmZG9uZSk7CisKKyAgICAvKiBTZXR1cCBhICJmYWtlZCIgdHJhbnNmZXIgdGhhdCdsbCBkbyBub3RoaW5nICovCisgICAgaWYoQ1VSTEVfT0sgPT0gcmVzdWx0KSB7CisgICAgICBjb25uLT5kYXRhID0gZGF0YTsKKyAgICAgIGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF0gPSBUUlVFOyAvKiB3ZSBhcmUgImNvbm5lY3RlZCAqLworCisgICAgICBDb25uZWN0aW9uU3RvcmUoZGF0YSwgY29ubik7CisKKyAgICAgIC8qCisgICAgICAgKiBTZXR1cCB3aGF0ZXZlciBuZWNlc3NhcnkgZm9yIGEgcmVzdW1lZCB0cmFuc2ZlcgorICAgICAgICovCisgICAgICByZXN1bHQgPSBzZXR1cF9yYW5nZShkYXRhKTsKKyAgICAgIGlmKHJlc3VsdCkgeworICAgICAgICBERUJVR0FTU0VSVChjb25uLT5oYW5kbGVyLT5kb25lKTsKKyAgICAgICAgLyogd2UgaWdub3JlIHRoZSByZXR1cm4gY29kZSBmb3IgdGhlIHByb3RvY29sLXNwZWNpZmljIERPTkUgKi8KKyAgICAgICAgKHZvaWQpY29ubi0+aGFuZGxlci0+ZG9uZShjb25uLCByZXN1bHQsIEZBTFNFKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KKworICAgICAgQ3VybF9zZXR1cF90cmFuc2Zlcihjb25uLCAtMSwgLTEsIEZBTFNFLCBOVUxMLCAvKiBubyBkb3dubG9hZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgTlVMTCk7IC8qIG5vIHVwbG9hZCAqLworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyNlbmRpZgorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIElmIHRoZSBwcm90b2NvbCBpcyB1c2luZyBTU0wgYW5kIEhUVFAgcHJveHkgaXMgdXNlZCwgd2Ugc2V0CisgICAqIHRoZSB0dW5uZWxfcHJveHkgYml0LgorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgaWYoKGNvbm4tPmdpdmVuLT5mbGFncyZQUk9UT1BUX1NTTCkgJiYgY29ubi0+Yml0cy5odHRwcHJveHkpCisgICAgY29ubi0+Yml0cy50dW5uZWxfcHJveHkgPSBUUlVFOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIEZpZ3VyZSBvdXQgdGhlIHJlbW90ZSBwb3J0IG51bWJlciBhbmQgZml4IGl0IGluIHRoZSBVUkwKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIHJlc3VsdCA9IHBhcnNlX3JlbW90ZV9wb3J0KGRhdGEsIGNvbm4pOworICBpZihyZXN1bHQgIT0gQ1VSTEVfT0spCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBDaGVjayBmb3IgYW4gb3ZlcnJpZGRlbiB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkLCB0aGVuIHNldCBpdAorICAgKiBmb3IgdXNlCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICBvdmVycmlkZV91c2VycGFzcyhkYXRhLCBjb25uLCB1c2VyLCBwYXNzd2QpOworICByZXN1bHQgPSBzZXRfdXNlcnBhc3MoY29ubiwgdXNlciwgcGFzc3dkKTsKKyAgaWYocmVzdWx0ICE9IENVUkxFX09LKQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgLyogR2V0IGEgY2xvbmVkIGNvcHkgb2YgdGhlIFNTTCBjb25maWcgc2l0dWF0aW9uIHN0b3JlZCBpbiB0aGUKKyAgICAgY29ubmVjdGlvbiBzdHJ1Y3QuIEJ1dCB0byBnZXQgdGhpcyBnb2luZyBuaWNlbHksIHdlIG11c3QgZmlyc3QgbWFrZQorICAgICBzdXJlIHRoYXQgdGhlIHN0cmluZ3MgaW4gdGhlIG1hc3RlciBjb3B5IGFyZSBwb2ludGluZyB0byB0aGUgY29ycmVjdAorICAgICBzdHJpbmdzIGluIHRoZSBzZXNzaW9uIGhhbmRsZSBzdHJpbmdzIGFycmF5IQorCisgICAgIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBwb2ludGVycyBpbiB0aGUgbWFzdGVyIGNvcHkgYXJlIHBvaW50aW5nIHRvIHN0cmluZ3MKKyAgICAgdGhhdCB3aWxsIGJlIGZyZWVkIGFzIHBhcnQgb2YgdGhlIFNlc3Npb25IYW5kbGUgc3RydWN0LCBidXQgYWxsIGNsb25lZAorICAgICBjb3BpZXMgd2lsbCBiZSBzZXBhcmF0ZWx5IGFsbG9jYXRlZC4KKyAgKi8KKyAgZGF0YS0+c2V0LnNzbC5DQXBhdGggPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIXTsKKyAgZGF0YS0+c2V0LnNzbC5DQWZpbGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXTsKKyAgZGF0YS0+c2V0LnNzbC5DUkxmaWxlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVdOworICBkYXRhLT5zZXQuc3NsLmlzc3VlcmNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfSVNTVUVSQ0VSVF07CisgIGRhdGEtPnNldC5zc2wucmFuZG9tX2ZpbGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUkFORE9NX0ZJTEVdOworICBkYXRhLT5zZXQuc3NsLmVnZHNvY2tldCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9FR0RTT0NLRVRdOworICBkYXRhLT5zZXQuc3NsLmNpcGhlcl9saXN0ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NJUEhFUl9MSVNUXTsKKyNpZmRlZiBVU0VfVExTX1NSUAorICBkYXRhLT5zZXQuc3NsLnVzZXJuYW1lID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfVExTQVVUSF9VU0VSTkFNRV07CisgIGRhdGEtPnNldC5zc2wucGFzc3dvcmQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1BBU1NXT1JEXTsKKyNlbmRpZgorCisgIGlmKCFDdXJsX2Nsb25lX3NzbF9jb25maWcoJmRhdGEtPnNldC5zc2wsICZjb25uLT5zc2xfY29uZmlnKSkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBDaGVjayB0aGUgY3VycmVudCBsaXN0IG9mIGNvbm5lY3Rpb25zIHRvIHNlZSBpZiB3ZSBjYW4KKyAgICogcmUtdXNlIGFuIGFscmVhZHkgZXhpc3Rpbmcgb25lIG9yIGlmIHdlIGhhdmUgdG8gY3JlYXRlIGEKKyAgICogbmV3IG9uZS4KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyogcmV1c2VfZnJlc2ggaXMgVFJVRSBpZiB3ZSBhcmUgdG9sZCB0byB1c2UgYSBuZXcgY29ubmVjdGlvbiBieSBmb3JjZSwgYnV0CisgICAgIHdlIG9ubHkgYWNrbm93bGVkZ2UgdGhpcyBvcHRpb24gaWYgdGhpcyBpcyBub3QgYSByZS11c2VkIGNvbm5lY3Rpb24KKyAgICAgYWxyZWFkeSAod2hpY2ggaGFwcGVucyBkdWUgdG8gZm9sbG93LWxvY2F0aW9uIG9yIGR1cmluZyBhIEhUVFAKKyAgICAgYXV0aGVudGljYXRpb24gcGhhc2UpLiAqLworICBpZihkYXRhLT5zZXQucmV1c2VfZnJlc2ggJiYgIWRhdGEtPnN0YXRlLnRoaXNfaXNfYV9mb2xsb3cpCisgICAgcmV1c2UgPSBGQUxTRTsKKyAgZWxzZQorICAgIHJldXNlID0gQ29ubmVjdGlvbkV4aXN0cyhkYXRhLCBjb25uLCAmY29ubl90ZW1wKTsKKworICBpZihyZXVzZSkgeworICAgIC8qCisgICAgICogV2UgYWxyZWFkeSBoYXZlIGEgY29ubmVjdGlvbiBmb3IgdGhpcywgd2UgZ290IHRoZSBmb3JtZXIgY29ubmVjdGlvbgorICAgICAqIGluIHRoZSBjb25uX3RlbXAgdmFyaWFibGUgYW5kIHRodXMgd2UgbmVlZCB0byBjbGVhbnVwIHRoZSBvbmUgd2UKKyAgICAgKiBqdXN0IGFsbG9jYXRlZCBiZWZvcmUgd2UgY2FuIG1vdmUgYWxvbmcgYW5kIHVzZSB0aGUgcHJldmlvdXNseQorICAgICAqIGV4aXN0aW5nIG9uZS4KKyAgICAgKi8KKyAgICByZXVzZV9jb25uKGNvbm4sIGNvbm5fdGVtcCk7CisgICAgZnJlZShjb25uKTsgICAgICAgICAgLyogd2UgZG9uJ3QgbmVlZCB0aGlzIGFueW1vcmUgKi8KKyAgICBjb25uID0gY29ubl90ZW1wOworICAgICppbl9jb25uZWN0ID0gY29ubjsKKyAgICBpbmZvZihkYXRhLCAiUmUtdXNpbmcgZXhpc3RpbmcgY29ubmVjdGlvbiEgKCMlbGQpIHdpdGggaG9zdCAlc1xuIiwKKyAgICAgICAgICBjb25uLT5jb25uZWN0aW5kZXgsCisgICAgICAgICAgY29ubi0+cHJveHkubmFtZT9jb25uLT5wcm94eS5kaXNwbmFtZTpjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKgorICAgICAqIFRoaXMgaXMgYSBicmFuZCBuZXcgY29ubmVjdGlvbiwgc28gbGV0J3Mgc3RvcmUgaXQgaW4gdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBjYWNoZSBvZiBvdXJzIQorICAgICAqLworICAgIENvbm5lY3Rpb25TdG9yZShkYXRhLCBjb25uKTsKKyAgfQorCisgIC8qIFNldHVwIGFuZCBpbml0IHN0dWZmIGJlZm9yZSBETyBzdGFydHMsIGluIHByZXBhcmluZyBmb3IgdGhlIHRyYW5zZmVyLiAqLworICBkb19pbml0KGNvbm4pOworCisgIC8qCisgICAqIFNldHVwIHdoYXRldmVyIG5lY2Vzc2FyeSBmb3IgYSByZXN1bWVkIHRyYW5zZmVyCisgICAqLworICByZXN1bHQgPSBzZXR1cF9yYW5nZShkYXRhKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgLyogQ29udGludWUgY29ubmVjdGRhdGEgaW5pdGlhbGl6YXRpb24gaGVyZS4gKi8KKworICAvKgorICAgKiBJbmhlcml0IHRoZSBwcm9wZXIgdmFsdWVzIGZyb20gdGhlIHVybGRhdGEgc3RydWN0IEFGVEVSIHdlIGhhdmUgYXJyYW5nZWQKKyAgICogdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBzdHVmZgorICAgKi8KKyAgY29ubi0+ZnJlYWRfZnVuYyA9IGRhdGEtPnNldC5mcmVhZF9mdW5jOworICBjb25uLT5mcmVhZF9pbiA9IGRhdGEtPnNldC5pbjsKKyAgY29ubi0+c2Vla19mdW5jID0gZGF0YS0+c2V0LnNlZWtfZnVuYzsKKyAgY29ubi0+c2Vla19jbGllbnQgPSBkYXRhLT5zZXQuc2Vla19jbGllbnQ7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogUmVzb2x2ZSB0aGUgYWRkcmVzcyBvZiB0aGUgc2VydmVyIG9yIHByb3h5CisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICByZXN1bHQgPSByZXNvbHZlX3NlcnZlcihkYXRhLCBjb25uLCBhc3luYyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQ3VybF9zZXR1cF9jb25uKCkgaXMgY2FsbGVkIGFmdGVyIHRoZSBuYW1lIHJlc29sdmUgaW5pdGlhdGVkIGluCisgKiBjcmVhdGVfY29ubigpIGlzIGFsbCBkb25lLgorICoKKyAqIEN1cmxfc2V0dXBfY29ubigpIGFsc28gaGFuZGxlcyByZXVzZWQgY29ubmVjdGlvbnMKKyAqCisgKiBjb25uLT5kYXRhIE1VU1QgYWxyZWFkeSBoYXZlIGJlZW4gc2V0dXAgZmluZSAoaW4gY3JlYXRlX2Nvbm4pCisgKi8KKworQ1VSTGNvZGUgQ3VybF9zZXR1cF9jb25uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpwcm90b2NvbF9kb25lKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEgPSBjb25uLT5kYXRhOworCisgIEN1cmxfcGdyc1RpbWUoZGF0YSwgVElNRVJfTkFNRUxPT0tVUCk7CisKKyAgaWYoY29ubi0+aGFuZGxlci0+ZmxhZ3MgJiBQUk9UT1BUX05PTkVUV09SSykgeworICAgIC8qIG5vdGhpbmcgdG8gc2V0dXAgd2hlbiBub3QgdXNpbmcgYSBuZXR3b3JrICovCisgICAgKnByb3RvY29sX2RvbmUgPSBUUlVFOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgKnByb3RvY29sX2RvbmUgPSBGQUxTRTsgLyogZGVmYXVsdCB0byBub3QgZG9uZSAqLworCisgIC8qIHNldCBwcm94eV9jb25uZWN0X2Nsb3NlZCB0byBmYWxzZSB1bmNvbmRpdGlvbmFsbHkgYWxyZWFkeSBoZXJlIHNpbmNlIGl0CisgICAgIGlzIHVzZWQgc3RyaWN0bHkgdG8gcHJvdmlkZSBleHRyYSBpbmZvcm1hdGlvbiB0byBhIHBhcmVudCBmdW5jdGlvbiBpbiB0aGUKKyAgICAgY2FzZSBvZiBwcm94eSBDT05ORUNUIGZhaWx1cmVzIGFuZCB3ZSBtdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGl0CisgICAgIGxpbmdlcmluZyBzZXQgZnJvbSBhIHByZXZpb3VzIGludm9rZSAqLworICBjb25uLT5iaXRzLnByb3h5X2Nvbm5lY3RfY2xvc2VkID0gRkFMU0U7CisKKyAgLyoKKyAgICogU2V0IHVzZXItYWdlbnQuIFVzZWQgZm9yIEhUVFAsIGJ1dCBzaW5jZSB3ZSBjYW4gYXR0ZW1wdCB0byB0dW5uZWwKKyAgICogYmFzaWNhbGx5IGFueXRoaW5nIHRocm91Z2ggYSBodHRwIHByb3h5IHdlIGNhbid0IGxpbWl0IHRoaXMgYmFzZWQgb24KKyAgICogcHJvdG9jb2wuCisgICAqLworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSQUdFTlRdKSB7CisgICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci51YWdlbnQpOworICAgIGNvbm4tPmFsbG9jcHRyLnVhZ2VudCA9CisgICAgICBhcHJpbnRmKCJVc2VyLUFnZW50OiAlc1xyXG4iLCBkYXRhLT5zZXQuc3RyW1NUUklOR19VU0VSQUdFTlRdKTsKKyAgICBpZighY29ubi0+YWxsb2NwdHIudWFnZW50KQorICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKworICBkYXRhLT5yZXEuaGVhZGVyYnl0ZWNvdW50ID0gMDsKKworI2lmZGVmIENVUkxfRE9fTElORUVORF9DT05WCisgIGRhdGEtPnN0YXRlLmNybGZfY29udmVyc2lvbnMgPSAwOyAvKiByZXNldCBDUkxGIGNvbnZlcnNpb24gY291bnRlciAqLworI2VuZGlmIC8qIENVUkxfRE9fTElORUVORF9DT05WICovCisKKyAgZm9yKDs7KSB7CisgICAgLyogbG9vcCBmb3IgQ1VSTF9TRVJWRVJfQ0xPU0VEX0NPTk5FQ1RJT04gKi8KKworICAgIGlmKENVUkxfU09DS0VUX0JBRCA9PSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSkgeworICAgICAgLyogVHJ5IHRvIGNvbm5lY3Qgb25seSBpZiBub3QgYWxyZWFkeSBjb25uZWN0ZWQgKi8KKyAgICAgIGJvb2wgY29ubmVjdGVkID0gRkFMU0U7CisKKyAgICAgIHJlc3VsdCA9IENvbm5lY3RQbGVhc2UoZGF0YSwgY29ubiwgJmNvbm5lY3RlZCk7CisKKyAgICAgIGlmKHJlc3VsdCAmJiAhY29ubi0+aXBfYWRkcikgeworICAgICAgICAvKiB0cmFuc3BvcnQgY29ubmVjdGlvbiBmYWlsdXJlIG5vdCByZWxhdGVkIHdpdGggYXV0aGVudGljYXRpb24gKi8KKyAgICAgICAgY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXSA9IEZBTFNFOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorCisgICAgICBpZihjb25uZWN0ZWQpIHsKKyAgICAgICAgcmVzdWx0ID0gQ3VybF9wcm90b2NvbF9jb25uZWN0KGNvbm4sIHByb3RvY29sX2RvbmUpOworICAgICAgICBpZihDVVJMRV9PSyA9PSByZXN1bHQpCisgICAgICAgICAgY29ubi0+Yml0cy50Y3Bjb25uZWN0W0ZJUlNUU09DS0VUXSA9IFRSVUU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF0gPSBGQUxTRTsKKworICAgICAgLyogaWYgdGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBieSB0aGUgc2VydmVyIHdoaWxlIGV4Y2hhbmdpbmcKKyAgICAgICAgIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9ucywgcmV0cnkgd2l0aCB0aGUgbmV3IHNldAorICAgICAgICAgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gKi8KKyAgICAgIGlmKGNvbm4tPmJpdHMucHJveHlfY29ubmVjdF9jbG9zZWQpIHsKKyAgICAgICAgLyogcmVzZXQgdGhlIGVycm9yIGJ1ZmZlciAqLworICAgICAgICBpZihkYXRhLT5zZXQuZXJyb3JidWZmZXIpCisgICAgICAgICAgZGF0YS0+c2V0LmVycm9yYnVmZmVyWzBdID0gJ1wwJzsKKyAgICAgICAgZGF0YS0+c3RhdGUuZXJyb3JidWYgPSBGQUxTRTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmKENVUkxFX09LICE9IHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBDdXJsX3BncnNUaW1lKGRhdGEsIFRJTUVSX0NPTk5FQ1QpOyAvKiB3ZSdyZSBjb25uZWN0ZWQgYWxyZWFkeSAqLworICAgICAgQ3VybF9wZ3JzVGltZShkYXRhLCBUSU1FUl9BUFBDT05ORUNUKTsgLyogd2UncmUgY29ubmVjdGVkIGFscmVhZHkgKi8KKyAgICAgIGNvbm4tPmJpdHMudGNwY29ubmVjdFtGSVJTVFNPQ0tFVF0gPSBUUlVFOworICAgICAgKnByb3RvY29sX2RvbmUgPSBUUlVFOworICAgICAgQ3VybF92ZXJib3NlY29ubmVjdChjb25uKTsKKyAgICAgIEN1cmxfdXBkYXRlY29ubmluZm8oY29ubiwgY29ubi0+c29ja1tGSVJTVFNPQ0tFVF0pOworICAgIH0KKyAgICAvKiBTdG9wIHRoZSBsb29wIG5vdyAqLworICAgIGJyZWFrOworICB9CisKKyAgY29ubi0+bm93ID0gQ3VybF90dm5vdygpOyAvKiB0aW1lIHRoaXMgKmFmdGVyKiB0aGUgY29ubmVjdCBpcyBkb25lLCB3ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0aGlzIGhlcmUgcGVyaGFwcyBhIHNlY29uZCB0aW1lICovCisKKyNpZmRlZiBfX0VNWF9fCisgIC8qCisgICAqIFRoaXMgY2hlY2sgaXMgcXVpdGUgYSBoYWNrLiBXZSdyZSBjYWxsaW5nIF9mc2V0bW9kZSB0byBmaXggdGhlIHByb2JsZW0KKyAgICogd2l0aCBmd3JpdGUgY29udmVydGluZyBuZXdsaW5lIGNoYXJhY3RlcnMgKHlvdSBnZXQgbWFuZ2xlZCB0ZXh0IGZpbGVzLAorICAgKiBhbmQgY29ycnVwdGVkIGJpbmFyeSBmaWxlcyB3aGVuIHlvdSBkb3dubG9hZCB0byBzdGRvdXQgYW5kIHJlZGlyZWN0IGl0IHRvCisgICAqIGEgZmlsZSkuCisgICAqLworCisgIGlmKChkYXRhLT5zZXQub3V0KS0+X2hhbmRsZSA9PSBOVUxMKSB7CisgICAgX2ZzZXRtb2RlKHN0ZG91dCwgImIiKTsKKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworQ1VSTGNvZGUgQ3VybF9jb25uZWN0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqKmluX2Nvbm5lY3QsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXN5bmNwLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnByb3RvY29sX2RvbmUpCit7CisgIENVUkxjb2RlIGNvZGU7CisKKyAgKmFzeW5jcCA9IEZBTFNFOyAvKiBhc3N1bWUgc3luY2hyb25vdXMgcmVzb2x2ZXMgYnkgZGVmYXVsdCAqLworCisgIC8qIGNhbGwgdGhlIHN0dWZmIHRoYXQgbmVlZHMgdG8gYmUgY2FsbGVkICovCisgIGNvZGUgPSBjcmVhdGVfY29ubihkYXRhLCBpbl9jb25uZWN0LCBhc3luY3ApOworCisgIGlmKENVUkxFX09LID09IGNvZGUpIHsKKyAgICAvKiBubyBlcnJvciAqLworICAgIGlmKCgqaW5fY29ubmVjdCktPnNlbmRfcGlwZS0+c2l6ZSB8fCAoKmluX2Nvbm5lY3QpLT5yZWN2X3BpcGUtPnNpemUpCisgICAgICAvKiBwaXBlbGluaW5nICovCisgICAgICAqcHJvdG9jb2xfZG9uZSA9IFRSVUU7CisgICAgZWxzZSBpZighKmFzeW5jcCkgeworICAgICAgLyogRE5TIHJlc29sdXRpb24gaXMgZG9uZTogdGhhdCdzIGVpdGhlciBiZWNhdXNlIHRoaXMgaXMgYSByZXVzZWQKKyAgICAgICAgIGNvbm5lY3Rpb24sIGluIHdoaWNoIGNhc2UgRE5TIHdhcyB1bm5lY2Vzc2FyeSwgb3IgYmVjYXVzZSBETlMKKyAgICAgICAgIHJlYWxseSBkaWQgZmluaXNoIGFscmVhZHkgKHN5bmNoIHJlc29sdmVyL2Zhc3QgYXN5bmMgcmVzb2x2ZSkgKi8KKyAgICAgIGNvZGUgPSBDdXJsX3NldHVwX2Nvbm4oKmluX2Nvbm5lY3QsIHByb3RvY29sX2RvbmUpOworICAgIH0KKyAgfQorCisgIGlmKGNvZGUgJiYgKmluX2Nvbm5lY3QpIHsKKyAgICAvKiBXZSdyZSBub3QgYWxsb3dlZCB0byByZXR1cm4gZmFpbHVyZSB3aXRoIG1lbW9yeSBsZWZ0IGFsbG9jYXRlZAorICAgICAgIGluIHRoZSBjb25uZWN0ZGF0YSBzdHJ1Y3QsIGZyZWUgdGhvc2UgaGVyZSAqLworICAgIEN1cmxfZGlzY29ubmVjdCgqaW5fY29ubmVjdCwgRkFMU0UpOyAvKiBjbG9zZSB0aGUgY29ubmVjdGlvbiAqLworICAgICppbl9jb25uZWN0ID0gTlVMTDsgICAgICAgICAgIC8qIHJldHVybiBhIE5VTEwgKi8KKyAgfQorCisgIHJldHVybiBjb2RlOworfQorCitDVVJMY29kZSBDdXJsX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICoqY29ubnAsCisgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgc3RhdHVzLCAgLyogYW4gZXJyb3IgaWYgdGhpcyBpcyBjYWxsZWQgYWZ0ZXIgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciB3YXMgZGV0ZWN0ZWQgKi8KKyAgICAgICAgICAgICAgICAgICBib29sIHByZW1hdHVyZSkKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm47CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhOworCisgIERFQlVHQVNTRVJUKCpjb25ucCk7CisKKyAgY29ubiA9ICpjb25ucDsKKyAgZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgaWYoY29ubi0+Yml0cy5kb25lKQorICAgIC8qIFN0b3AgaWYgQ3VybF9kb25lKCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgKi8KKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgQ3VybF9nZXRvZmZfYWxsX3BpcGVsaW5lcyhkYXRhLCBjb25uKTsKKworICBpZigoY29ubi0+c2VuZF9waXBlLT5zaXplICsgY29ubi0+cmVjdl9waXBlLT5zaXplICE9IDAgJiYKKyAgICAgICFkYXRhLT5zZXQucmV1c2VfZm9yYmlkICYmCisgICAgICAhY29ubi0+Yml0cy5jbG9zZSkpCisgICAgLyogU3RvcCBpZiBwaXBlbGluZSBpcyBub3QgZW1wdHkgYW5kIHdlIGRvIG5vdCBoYXZlIHRvIGNsb3NlCisgICAgICAgY29ubmVjdGlvbi4gKi8KKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgY29ubi0+Yml0cy5kb25lID0gVFJVRTsgLyogY2FsbGVkIGp1c3Qgbm93ISAqLworCisgIC8qIENsZWFudXAgcG9zc2libGUgcmVkaXJlY3QganVuayAqLworICBpZihkYXRhLT5yZXEubmV3dXJsKSB7CisgICAgZnJlZShkYXRhLT5yZXEubmV3dXJsKTsKKyAgICBkYXRhLT5yZXEubmV3dXJsID0gTlVMTDsKKyAgfQorICBpZihkYXRhLT5yZXEubG9jYXRpb24pIHsKKyAgICBmcmVlKGRhdGEtPnJlcS5sb2NhdGlvbik7CisgICAgZGF0YS0+cmVxLmxvY2F0aW9uID0gTlVMTDsKKyAgfQorCisgIEN1cmxfcmVzb2x2ZXJfY2FuY2VsKGNvbm4pOworCisgIGlmKGNvbm4tPmRuc19lbnRyeSkgeworICAgIEN1cmxfcmVzb2x2X3VubG9jayhkYXRhLCBjb25uLT5kbnNfZW50cnkpOyAvKiBkb25lIHdpdGggdGhpcyAqLworICAgIGNvbm4tPmRuc19lbnRyeSA9IE5VTEw7CisgIH0KKworICAvKiB0aGlzIGNhbGxzIHRoZSBwcm90b2NvbC1zcGVjaWZpYyBmdW5jdGlvbiBwb2ludGVyIHByZXZpb3VzbHkgc2V0ICovCisgIGlmKGNvbm4tPmhhbmRsZXItPmRvbmUpCisgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+ZG9uZShjb25uLCBzdGF0dXMsIHByZW1hdHVyZSk7CisgIGVsc2UKKyAgICByZXN1bHQgPSBDVVJMRV9PSzsKKworICBDdXJsX3BncnNEb25lKGNvbm4pOyAvKiBkb25lIHdpdGggdGhlIG9wZXJhdGlvbiAqLworCisgIC8qIGlmIHRoZSB0cmFuc2ZlciB3YXMgY29tcGxldGVkIGluIGEgcGF1c2VkIHN0YXRlIHRoZXJlIGNhbiBiZSBidWZmZXJlZAorICAgICBkYXRhIGxlZnQgdG8gd3JpdGUgYW5kIHRoZW4ga2lsbCAqLworICBpZihkYXRhLT5zdGF0ZS50ZW1wd3JpdGUpIHsKKyAgICBmcmVlKGRhdGEtPnN0YXRlLnRlbXB3cml0ZSk7CisgICAgZGF0YS0+c3RhdGUudGVtcHdyaXRlID0gTlVMTDsKKyAgfQorCisgIC8qIGlmIGRhdGEtPnNldC5yZXVzZV9mb3JiaWQgaXMgVFJVRSwgaXQgbWVhbnMgdGhlIGxpYmN1cmwgY2xpZW50IGhhcworICAgICBmb3JjZWQgdXMgdG8gY2xvc2UgdGhpcyBubyBtYXR0ZXIgd2hhdCB3ZSB0aGluay4KKworICAgICBpZiBjb25uLT5iaXRzLmNsb3NlIGlzIFRSVUUsIGl0IG1lYW5zIHRoYXQgdGhlIGNvbm5lY3Rpb24gc2hvdWxkIGJlCisgICAgIGNsb3NlZCBpbiBzcGl0ZSBvZiBhbGwgb3VyIGVmZm9ydHMgdG8gYmUgbmljZSwgZHVlIHRvIHByb3RvY29sCisgICAgIHJlc3RyaWN0aW9ucyBpbiBvdXIgb3IgdGhlIHNlcnZlcidzIGVuZAorCisgICAgIGlmIHByZW1hdHVyZSBpcyBUUlVFLCBpdCBtZWFucyB0aGlzIGNvbm5lY3Rpb24gd2FzIHNhaWQgdG8gYmUgRE9ORSBiZWZvcmUKKyAgICAgdGhlIGVudGlyZSByZXF1ZXN0IG9wZXJhdGlvbiBpcyBjb21wbGV0ZSBhbmQgdGh1cyB3ZSBjYW4ndCBrbm93IGluIHdoYXQKKyAgICAgc3RhdGUgaXQgaXMgZm9yIHJlLXVzaW5nLCBzbyB3ZSdyZSBmb3JjZWQgdG8gY2xvc2UgaXQuIEluIGEgcGVyZmVjdCB3b3JsZAorICAgICB3ZSBjYW4gYWRkIGNvZGUgdGhhdCBrZWVwIHRyYWNrIG9mIGlmIHdlIHJlYWxseSBtdXN0IGNsb3NlIGl0IGhlcmUgb3Igbm90LAorICAgICBidXQgY3VycmVudGx5IHdlIGhhdmUgbm8gc3VjaCBkZXRhaWwga25vd2xlZGdlLgorCisgICAgIGNvbm5lY3RpbmRleCA9PSAtMSBoZXJlIG1lYW5zIHRoYXQgdGhlIGNvbm5lY3Rpb24gaGFzIG5vIHNwb3QgaW4gdGhlCisgICAgIGNvbm5lY3Rpb24gY2FjaGUgYW5kIHRodXMgd2UgbXVzdCBkaXNjb25uZWN0IGl0IGhlcmUuCisgICovCisgIGlmKGRhdGEtPnNldC5yZXVzZV9mb3JiaWQgfHwgY29ubi0+Yml0cy5jbG9zZSB8fCBwcmVtYXR1cmUgfHwKKyAgICAgKC0xID09IGNvbm4tPmNvbm5lY3RpbmRleCkpIHsKKyAgICBDVVJMY29kZSByZXMyID0gQ3VybF9kaXNjb25uZWN0KGNvbm4sIHByZW1hdHVyZSk7IC8qIGNsb3NlIGNvbm5lY3Rpb24gKi8KKworICAgIC8qIElmIHdlIGhhZCBhbiBlcnJvciBhbHJlYWR5LCBtYWtlIHN1cmUgd2UgcmV0dXJuIHRoYXQgb25lLiBCdXQKKyAgICAgICBpZiB3ZSBnb3QgYSBuZXcgZXJyb3IsIHJldHVybiB0aGF0LiAqLworICAgIGlmKCFyZXN1bHQgJiYgcmVzMikKKyAgICAgIHJlc3VsdCA9IHJlczI7CisgIH0KKyAgZWxzZSB7CisgICAgQ29ubmVjdGlvbkRvbmUoY29ubik7IC8qIHRoZSBjb25uZWN0aW9uIGlzIG5vIGxvbmdlciBpbiB1c2UgKi8KKworICAgIC8qIHJlbWVtYmVyIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgY29ubmVjdGlvbiAqLworICAgIGRhdGEtPnN0YXRlLmxhc3Rjb25uZWN0ID0gY29ubi0+Y29ubmVjdGluZGV4OworCisgICAgaW5mb2YoZGF0YSwgIkNvbm5lY3Rpb24gIyVsZCB0byBob3N0ICVzIGxlZnQgaW50YWN0XG4iLAorICAgICAgICAgIGNvbm4tPmNvbm5lY3RpbmRleCwKKyAgICAgICAgICBjb25uLT5iaXRzLmh0dHBwcm94eT9jb25uLT5wcm94eS5kaXNwbmFtZTpjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgfQorCisgICpjb25ucCA9IE5VTEw7IC8qIHRvIG1ha2UgdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIGJldHRlciBkZXRlY3QgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGlzIHdhcyBlaXRoZXIgY2xvc2VkIG9yIGhhbmRlZCBvdmVyIHRvIHRoZSBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGNhY2hlIGhlcmUsIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIHVzZWQgZnJvbSB0aGlzIHBvaW50IG9uCisgICAgICAgICAgICAgICAgICovCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGRvX2luaXQoKSBpbml0cyB0aGUgcmVhZHdyaXRlIHNlc3Npb24uIFRoaXMgaXMgaW5pdGVkIGVhY2ggdGltZSAoaW4gdGhlIERPCisgKiBmdW5jdGlvbiBiZWZvcmUgdGhlIHByb3RvY29sLXNwZWNpZmljIERPIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCkgZm9yIGEKKyAqIHRyYW5zZmVyLCBzb21ldGltZXMgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgU2Vzc2lvbkhhbmRsZS4gTWFrZSBzdXJlCisgKiBub3RoaW5nIGluIGhlcmUgZGVwZW5kcyBvbiBzdHVmZiB0aGF0IGFyZSBzZXR1cCBkeW5hbWljYWxseSBmb3IgdGhlCisgKiB0cmFuc2Zlci4KKyAqLworCitzdGF0aWMgQ1VSTGNvZGUgZG9faW5pdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKmsgPSAmZGF0YS0+cmVxOworCisgIGNvbm4tPmJpdHMuZG9uZSA9IEZBTFNFOyAvKiBDdXJsX2RvbmUoKSBpcyBub3QgY2FsbGVkIHlldCAqLworICBjb25uLT5iaXRzLmRvX21vcmUgPSBGQUxTRTsgLyogYnkgZGVmYXVsdCB0aGVyZSdzIG5vIGN1cmxfZG9fbW9yZSgpIHRvIHVzZSAqLworICBkYXRhLT5zdGF0ZS5leHBlY3QxMDBoZWFkZXIgPSBGQUxTRTsKKworICBpZihkYXRhLT5zZXQub3B0X25vX2JvZHkpCisgICAgLyogaW4gSFRUUCBsaW5nbywgbm8gYm9keSBtZWFucyB1c2luZyB0aGUgSEVBRCByZXF1ZXN0Li4uICovCisgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX0hFQUQ7CisgIGVsc2UgaWYoSFRUUFJFUV9IRUFEID09IGRhdGEtPnNldC5odHRwcmVxKQorICAgIC8qIC4uLiBidXQgaWYgdW5zZXQgdGhlcmUgcmVhbGx5IGlzIG5vIHBlcmZlY3QgbWV0aG9kIHRoYXQgaXMgdGhlCisgICAgICAgIm9wcG9zaXRlIiBvZiBIRUFEIGJ1dCBpbiByZWFsaXR5IG1vc3QgcGVvcGxlIHByb2JhYmx5IHRoaW5rIEdFVAorICAgICAgIHRoZW4uIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCB3ZSBjYW4ndCBsZXQgaXQgcmVtYWluIEhFQUQgaWYgdGhlCisgICAgICAgb3B0X25vX2JvZHkgaXMgc2V0IEZBTFNFIHNpbmNlIHRoZW4gd2UnbGwgYmVoYXZlIHdyb25nIHdoZW4gZ2V0dGluZworICAgICAgIEhUVFAuICovCisgICAgZGF0YS0+c2V0Lmh0dHByZXEgPSBIVFRQUkVRX0dFVDsKKworICAvKiBOQjogdGhlIGNvbnRlbnQgZW5jb2Rpbmcgc29mdHdhcmUgZGVwZW5kcyBvbiB0aGlzIGluaXRpYWxpemF0aW9uICovCisgIEN1cmxfZWFzeV9pbml0SGFuZGxlRGF0YShkYXRhKTsKKworICBrLT5zdGFydCA9IEN1cmxfdHZub3coKTsgLyogc3RhcnQgdGltZSAqLworICBrLT5ub3cgPSBrLT5zdGFydDsgICAvKiBjdXJyZW50IHRpbWUgaXMgbm93ICovCisgIGstPmhlYWRlciA9IFRSVUU7IC8qIGFzc3VtZSBoZWFkZXIgKi8KKworICBrLT5ieXRlY291bnQgPSAwOworCisgIGstPmJ1ZiA9IGRhdGEtPnN0YXRlLmJ1ZmZlcjsKKyAgay0+dXBsb2FkYnVmID0gZGF0YS0+c3RhdGUudXBsb2FkYnVmZmVyOworICBrLT5oYnVmcCA9IGRhdGEtPnN0YXRlLmhlYWRlcmJ1ZmY7CisgIGstPmlnbm9yZWJvZHk9RkFMU0U7CisKKyAgQ3VybF9zcGVlZGluaXQoZGF0YSk7CisKKyAgQ3VybF9wZ3JzU2V0VXBsb2FkQ291bnRlcihkYXRhLCAwKTsKKyAgQ3VybF9wZ3JzU2V0RG93bmxvYWRDb3VudGVyKGRhdGEsIDApOworCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIGRvX2NvbXBsZXRlIGlzIGNhbGxlZCB3aGVuIHRoZSBETyBhY3Rpb25zIGFyZSBjb21wbGV0ZS4KKyAqCisgKiBXZSBpbml0IGNodW5raW5nIGFuZCB0cmFpbGVyIGJpdHMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMgaGVyZSBpbW1lZGlhdGVseQorICogYmVmb3JlIHJlY2VpdmluZyBhbnkgaGVhZGVyIGRhdGEgZm9yIHRoZSBjdXJyZW50IHJlcXVlc3QgaW4gdGhlIHBpcGVsaW5lLgorICovCitzdGF0aWMgdm9pZCBkb19jb21wbGV0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIGNvbm4tPmRhdGEtPnJlcS5jaHVuaz1GQUxTRTsKKyAgY29ubi0+ZGF0YS0+cmVxLm1heGZkID0gKGNvbm4tPnNvY2tmZD5jb25uLT53cml0ZXNvY2tmZD8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnNvY2tmZDpjb25uLT53cml0ZXNvY2tmZCkrMTsKKyAgQ3VybF9wZ3JzVGltZShjb25uLT5kYXRhLCBUSU1FUl9QUkVUUkFOU0ZFUik7Cit9CisKK0NVUkxjb2RlIEN1cmxfZG8oc3RydWN0IGNvbm5lY3RkYXRhICoqY29ubnAsIGJvb2wgKmRvbmUpCit7CisgIENVUkxjb2RlIHJlc3VsdD1DVVJMRV9PSzsKKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gKmNvbm5wOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSA9IGNvbm4tPmRhdGE7CisKKyAgaWYoY29ubi0+aGFuZGxlci0+ZG9faXQpIHsKKyAgICAvKiBnZW5lcmljIHByb3RvY29sLXNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXIgc2V0IGluIGN1cmxfY29ubmVjdCgpICovCisgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+ZG9faXQoY29ubiwgZG9uZSk7CisKKyAgICAvKiBUaGlzIHdhcyBmb3JtZXJseSBkb25lIGluIHRyYW5zZmVyLmMsIGJ1dCB3ZSBiZXR0ZXIgZG8gaXQgaGVyZSAqLworICAgIGlmKChDVVJMRV9TRU5EX0VSUk9SID09IHJlc3VsdCkgJiYgY29ubi0+Yml0cy5yZXVzZSkgeworICAgICAgLyoKKyAgICAgICAqIElmIHRoZSBjb25uZWN0aW9uIGlzIHVzaW5nIGFuIGVhc3kgaGFuZGxlLCBjYWxsIHJlY29ubmVjdAorICAgICAgICogdG8gcmUtZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uLiAgT3RoZXJ3aXNlLCBsZXQgdGhlIG11bHRpIGxvZ2ljCisgICAgICAgKiBmaWd1cmUgb3V0IGhvdyB0byByZS1lc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24uCisgICAgICAgKi8KKyAgICAgIGlmKCFkYXRhLT5tdWx0aSkgeworICAgICAgICByZXN1bHQgPSBDdXJsX3JlY29ubmVjdF9yZXF1ZXN0KGNvbm5wKTsKKworICAgICAgICBpZihyZXN1bHQgPT0gQ1VSTEVfT0spIHsKKyAgICAgICAgICAvKiAuLi4gZmluYWxseSBiYWNrIHRvIGFjdHVhbGx5IHJldHJ5IHRoZSBETyBwaGFzZSAqLworICAgICAgICAgIGNvbm4gPSAqY29ubnA7IC8qIHJlLWFzc2lnbiBjb25uIHNpbmNlIEN1cmxfcmVjb25uZWN0X3JlcXVlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICByZXN1bHQgPSBjb25uLT5oYW5kbGVyLT5kb19pdChjb25uLCBkb25lKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGlmKChyZXN1bHQgPT0gQ1VSTEVfT0spICYmICpkb25lKQorICAgICAgLyogZG9fY29tcGxldGUgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHByb3RvY29sLXNwZWNpZmljIERPIGZ1bmN0aW9uICovCisgICAgICBkb19jb21wbGV0ZShjb25uKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ3VybF9kb19tb3JlKCkgaXMgY2FsbGVkIGR1cmluZyB0aGUgRE9fTU9SRSBtdWx0aSBzdGF0ZS4gSXQgaXMgYmFzaWNhbGx5IGEKKyAqIHNlY29uZCBzdGFnZSBETyBzdGF0ZSB3aGljaCAod3JvbmdseSkgd2FzIGludHJvZHVjZWQgdG8gc3VwcG9ydCBGVFAncworICogc2Vjb25kIGNvbm5lY3Rpb24uCisgKgorICogVE9ETzogQSBmdXR1cmUgbGliY3VybCBzaG91bGQgYmUgYWJsZSB0byB3b3JrIGF3YXkgdGhpcyBzdGF0ZS4KKyAqCisgKi8KKworQ1VSTGNvZGUgQ3VybF9kb19tb3JlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqY29tcGxldGVkKQoreworICBDVVJMY29kZSByZXN1bHQ9Q1VSTEVfT0s7CisKKyAgKmNvbXBsZXRlZCA9IEZBTFNFOworCisgIGlmKGNvbm4tPmhhbmRsZXItPmRvX21vcmUpCisgICAgcmVzdWx0ID0gY29ubi0+aGFuZGxlci0+ZG9fbW9yZShjb25uLCBjb21wbGV0ZWQpOworCisgIGlmKCFyZXN1bHQgJiYgKmNvbXBsZXRlZCkKKyAgICAvKiBkb19jb21wbGV0ZSBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgRE8gZnVuY3Rpb24gKi8KKyAgICBkb19jb21wbGV0ZShjb25uKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBDYWxsZWQgb24gY29ubmVjdCwgYW5kIGlmIHRoZXJlJ3MgYWxyZWFkeSBhIHByb3RvY29sLXNwZWNpZmljIHN0cnVjdAorICAgYWxsb2NhdGVkIGZvciBhIGRpZmZlcmVudCBjb25uZWN0aW9uLCB0aGlzIGZyZWVzIGl0IHRoYXQgaXQgY2FuIGJlIHNldHVwCisgICBwcm9wZXJseSBsYXRlciBvbi4gKi8KK3ZvaWQgQ3VybF9yZXNldF9yZXFwcm90byhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCit7CisgIHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgaWYoZGF0YS0+c3RhdGUucHJvdG8uZ2VuZXJpYyAmJiBkYXRhLT5zdGF0ZS5jdXJyZW50X2Nvbm4gIT0gY29ubikgeworICAgIGZyZWUoZGF0YS0+c3RhdGUucHJvdG8uZ2VuZXJpYyk7CisgICAgZGF0YS0+c3RhdGUucHJvdG8uZ2VuZXJpYyA9IE5VTEw7CisgIH0KKyAgZGF0YS0+c3RhdGUuY3VycmVudF9jb25uID0gY29ubjsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi91cmwuaCBiL2N1cmwtNy4yNS4wL2xpYi91cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODU4NzA2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3VybC5oCkBAIC0wLDAgKzEsOTUgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfVVJMX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVVJMX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKy8qCisgKiBQcm90b3R5cGVzIGZvciBsaWJyYXJ5LXdpZGUgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHVybC5jCisgKi8KKworQ1VSTGNvZGUgQ3VybF9vcGVuKHN0cnVjdCBTZXNzaW9uSGFuZGxlICoqY3VybCk7CitDVVJMY29kZSBDdXJsX2luaXRfdXNlcmRlZmluZWQoc3RydWN0IFVzZXJEZWZpbmVkICpzZXQpOworQ1VSTGNvZGUgQ3VybF9zZXRvcHQoc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGEsIENVUkxvcHRpb24gb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmcpOworQ1VSTGNvZGUgQ3VybF9kdXBzZXQoc3RydWN0IFNlc3Npb25IYW5kbGUgKiBkc3QsIHN0cnVjdCBTZXNzaW9uSGFuZGxlICogc3JjKTsKK3ZvaWQgQ3VybF9mcmVlc2V0KHN0cnVjdCBTZXNzaW9uSGFuZGxlICogZGF0YSk7CitDVVJMY29kZSBDdXJsX2Nsb3NlKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhKTsgLyogb3Bwb3NpdGUgb2YgY3VybF9vcGVuKCkgKi8KK0NVUkxjb2RlIEN1cmxfY29ubmVjdChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqLCBzdHJ1Y3QgY29ubmVjdGRhdGEgKiosCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXN5bmMsIGJvb2wgKnByb3RvY29sX2Nvbm5lY3QpOworQ1VSTGNvZGUgQ3VybF9kbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKiosIGJvb2wgKmRvbmUpOworQ1VSTGNvZGUgQ3VybF9kb19tb3JlKHN0cnVjdCBjb25uZWN0ZGF0YSAqLCBib29sICpjb21wbGV0ZWQpOworQ1VSTGNvZGUgQ3VybF9kb25lKHN0cnVjdCBjb25uZWN0ZGF0YSAqKiwgQ1VSTGNvZGUsIGJvb2wgcHJlbWF0dXJlKTsKK0NVUkxjb2RlIEN1cmxfZGlzY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKiwgYm9vbCBkZWFkX2Nvbm5lY3Rpb24pOworQ1VSTGNvZGUgQ3VybF9wcm90b2NvbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgYm9vbCAqZG9uZSk7CitDVVJMY29kZSBDdXJsX3Byb3RvY29sX2Nvbm5lY3Rpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK0NVUkxjb2RlIEN1cmxfcHJvdG9jb2xfZG9pbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sICpkb25lKTsKK0NVUkxjb2RlIEN1cmxfc2V0dXBfY29ubihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqcHJvdG9jb2xfZG9uZSk7CisKKy8qIGNyZWF0ZSBhIGNvbm5lY3Rpb24gY2FjaGUgKi8KK3N0cnVjdCBjb25uY2FjaGUgKkN1cmxfbWtfY29ubmMoaW50IHR5cGUsIGxvbmcgYW1vdW50KTsKKy8qIGZyZWUgYSBjb25uZWN0aW9uIGNhY2hlICovCit2b2lkIEN1cmxfcm1fY29ubmMoc3RydWN0IGNvbm5jYWNoZSAqYyk7CisvKiBDaGFuZ2UgbnVtYmVyIG9mIGVudHJpZXMgb2YgYSBjb25uZWN0aW9uIGNhY2hlICovCitDVVJMY29kZSBDdXJsX2NoX2Nvbm5jKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmNhY2hlICpjLAorICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld2Ftb3VudCk7CisKK2ludCBDdXJsX3Byb3RvY29sX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKK2ludCBDdXJsX2RvaW5nX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKworYm9vbCBDdXJsX2lzUGlwZWxpbmluZ0VuYWJsZWQoY29uc3Qgc3RydWN0IFNlc3Npb25IYW5kbGUgKmhhbmRsZSk7CitDVVJMY29kZSBDdXJsX2FkZEhhbmRsZVRvUGlwZWxpbmUoc3RydWN0IFNlc3Npb25IYW5kbGUgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9sbGlzdCAqcGlwZWxpbmUpOworaW50IEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfbGxpc3QgKnBpcGVsaW5lKTsKKy8qIHJlbW92ZSB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24gZnJvbSBhbGwgKHBvc3NpYmxlKSBwaXBlbGluZXMgYW5kIHJlbGF0ZWQKKyAgIHF1ZXVlcyAqLwordm9pZCBDdXJsX2dldG9mZl9hbGxfcGlwZWxpbmVzKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CisKK3ZvaWQgQ3VybF9jbG9zZV9jb25uZWN0aW9ucyhzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YSk7CisKKy8qIENhbGxlZCBvbiBjb25uZWN0LCBhbmQgaWYgdGhlcmUncyBhbHJlYWR5IGEgcHJvdG9jb2wtc3BlY2lmaWMgc3RydWN0CisgICBhbGxvY2F0ZWQgZm9yIGEgZGlmZmVyZW50IGNvbm5lY3Rpb24sIHRoaXMgZnJlZXMgaXQgdGhhdCBpdCBjYW4gYmUgc2V0dXAKKyAgIHByb3Blcmx5IGxhdGVyIG9uLiAqLwordm9pZCBDdXJsX3Jlc2V0X3JlcXByb3RvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CisKKyNkZWZpbmUgQ1VSTF9ERUZBVUxUX1BST1hZX1BPUlQgMTA4MCAvKiBkZWZhdWx0IHByb3h5IHBvcnQgdW5sZXNzIHNwZWNpZmllZCAqLworI2RlZmluZSBDVVJMX0RFRkFVTFRfU09DS1M1X0dTU0FQSV9TRVJWSUNFICJyY21kIiAvKiBkZWZhdWx0IHNvY2tzNSBnc3NhcGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZSAqLworCitDVVJMY29kZSBDdXJsX2Nvbm5lY3RlZF9wcm94eShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOworCisjaWZkZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUworI2RlZmluZSBDdXJsX3ZlcmJvc2Vjb25uZWN0KHgpICBDdXJsX25vcF9zdG10CisjZWxzZQordm9pZCBDdXJsX3ZlcmJvc2Vjb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CisjZW5kaWYKKworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVVJMX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi91cmxkYXRhLmggYi9jdXJsLTcuMjUuMC9saWIvdXJsZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzA2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9saWIvdXJsZGF0YS5oCkBAIC0wLDAgKzEsMTYwNiBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9VUkxEQVRBX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVVJMREFUQV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmaWxlIGlzIGZvciBsaWIgaW50ZXJuYWwgc3R1ZmYgKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNkZWZpbmUgUE9SVF9GVFAgMjEKKyNkZWZpbmUgUE9SVF9GVFBTIDk5MAorI2RlZmluZSBQT1JUX1RFTE5FVCAyMworI2RlZmluZSBQT1JUX0hUVFAgODAKKyNkZWZpbmUgUE9SVF9IVFRQUyA0NDMKKyNkZWZpbmUgUE9SVF9ESUNUIDI2MjgKKyNkZWZpbmUgUE9SVF9MREFQIDM4OQorI2RlZmluZSBQT1JUX0xEQVBTIDYzNgorI2RlZmluZSBQT1JUX1RGVFAgNjkKKyNkZWZpbmUgUE9SVF9TU0ggMjIKKyNkZWZpbmUgUE9SVF9JTUFQIDE0MworI2RlZmluZSBQT1JUX0lNQVBTIDk5MworI2RlZmluZSBQT1JUX1BPUDMgMTEwCisjZGVmaW5lIFBPUlRfUE9QM1MgOTk1CisjZGVmaW5lIFBPUlRfU01UUCAyNQorI2RlZmluZSBQT1JUX1NNVFBTIDQ2NSAvKiBzb21ldGltZXMgY2FsbGVkIFNTTVRQICovCisjZGVmaW5lIFBPUlRfUlRTUCA1NTQKKyNkZWZpbmUgUE9SVF9SVE1QIDE5MzUKKyNkZWZpbmUgUE9SVF9SVE1QVCBQT1JUX0hUVFAKKyNkZWZpbmUgUE9SVF9SVE1QUyBQT1JUX0hUVFBTCisjZGVmaW5lIFBPUlRfR09QSEVSIDcwCisKKyNkZWZpbmUgRElDVF9NQVRDSCAiL01BVENIOiIKKyNkZWZpbmUgRElDVF9NQVRDSDIgIi9NOiIKKyNkZWZpbmUgRElDVF9NQVRDSDMgIi9GSU5EOiIKKyNkZWZpbmUgRElDVF9ERUZJTkUgIi9ERUZJTkU6IgorI2RlZmluZSBESUNUX0RFRklORTIgIi9EOiIKKyNkZWZpbmUgRElDVF9ERUZJTkUzICIvTE9PS1VQOiIKKworI2RlZmluZSBDVVJMX0RFRkFVTFRfVVNFUiAiYW5vbnltb3VzIgorI2RlZmluZSBDVVJMX0RFRkFVTFRfUEFTU1dPUkQgImZ0cEBleGFtcGxlLmNvbSIKKworLyogbGVuZ3RoIG9mIGxvbmdlc3QgSVB2NiBhZGRyZXNzIHN0cmluZyBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIG51bGwgKi8KKyNkZWZpbmUgTUFYX0lQQURSX0xFTiBzaXplb2YoImZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOjI1NS4yNTUuMjU1LjI1NSIpCisKKy8qIERlZmF1bHQgRlRQL0lNQVAgZXRjIHJlc3BvbnNlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgorICAgU3ltYmlhbiBPUyBwYW5pY3Mgd2hlbiBnaXZlbiBhIHRpbWVvdXQgbXVjaCBncmVhdGVyIHRoYW4gMS8yIGhvdXIuCisqLworI2RlZmluZSBSRVNQX1RJTUVPVVQgKDE4MDAqMTAwMCkKKworI2luY2x1ZGUgImNvb2tpZS5oIgorI2luY2x1ZGUgImZvcm1kYXRhLmgiCisKKyNpZmRlZiBVU0VfU1NMRUFZCisjaWZkZWYgVVNFX09QRU5TU0wKKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC9wZW0uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisjaWZkZWYgSEFWRV9PUEVOU1NMX0VOR0lORV9ICisjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfT1BFTlNTTF9QS0NTMTJfSAorI2luY2x1ZGUgPG9wZW5zc2wvcGtjczEyLmg+CisjZW5kaWYKKyNlbHNlIC8qIFNTTGVheS1zdHlsZSBpbmNsdWRlcyAqLworI2luY2x1ZGUgPHJzYS5oPgorI2luY2x1ZGUgPGNyeXB0by5oPgorI2luY2x1ZGUgPHg1MDkuaD4KKyNpbmNsdWRlIDxwZW0uaD4KKyNpbmNsdWRlIDxzc2wuaD4KKyNpbmNsdWRlIDxlcnIuaD4KKyNpZmRlZiBIQVZFX09QRU5TU0xfRU5HSU5FX0gKKyNpbmNsdWRlIDxlbmdpbmUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfT1BFTlNTTF9QS0NTMTJfSAorI2luY2x1ZGUgPHBrY3MxMi5oPgorI2VuZGlmCisjZW5kaWYgLyogVVNFX09QRU5TU0wgKi8KKyNpZmRlZiBVU0VfR05VVExTCisjZXJyb3IgQ29uZmlndXJhdGlvbiBlcnJvcjsgY2Fubm90IHVzZSBHbnVUTFMgKmFuZCogT3BlblNTTC4KKyNlbmRpZgorI2VuZGlmIC8qIFVTRV9TU0xFQVkgKi8KKworI2lmZGVmIFVTRV9HTlVUTFMKKyNpbmNsdWRlIDxnbnV0bHMvZ251dGxzLmg+CisjZW5kaWYKKworI2lmZGVmIFVTRV9QT0xBUlNTTAorI2luY2x1ZGUgPHBvbGFyc3NsL2hhdmVnZS5oPgorI2luY2x1ZGUgPHBvbGFyc3NsL3NzbC5oPgorI2VuZGlmCisKKyNpZmRlZiBVU0VfQ1lBU1NMCisjaW5jbHVkZSA8Y3lhc3NsL29wZW5zc2wvc3NsLmg+CisjZW5kaWYKKworI2lmZGVmIFVTRV9OU1MKKyNpbmNsdWRlIDxuc3ByLmg+CisjaW5jbHVkZSA8cGsxMXB1Yi5oPgorI2VuZGlmCisKKyNpZmRlZiBVU0VfUVNPU1NMCisjaW5jbHVkZSA8cXNvc3NsLmg+CisjZW5kaWYKKworI2lmZGVmIFVTRV9BWFRMUworI2luY2x1ZGUgPGF4VExTL3NzbC5oPgorI3VuZGVmIG1hbGxvYworI3VuZGVmIGNhbGxvYworI3VuZGVmIHJlYWxsb2MKKyNlbmRpZiAvKiBVU0VfQVhUTFMgKi8KKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ0aW1ldmFsLmgiCisKKyNpZmRlZiBIQVZFX1pMSUJfSAorI2luY2x1ZGUgPHpsaWIuaD4gICAgICAgICAgICAgICAvKiBmb3IgY29udGVudC1lbmNvZGluZyAqLworI2lmZGVmIF9fU1lNQklBTjMyX18KKy8qIHpsaWIgcG9sbHV0ZXMgdGhlIG5hbWVzcGFjZSB3aXRoIHRoaXMgZGVmaW5pdGlvbiAqLworI3VuZGVmIFdJTjMyCisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpbmNsdWRlICJodHRwX2NodW5rcy5oIiAvKiBmb3IgdGhlIHN0cnVjdHMgYW5kIGVudW0gc3R1ZmYgKi8KKyNpbmNsdWRlICJob3N0aXAuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAic3BsYXkuaCIKKworI2luY2x1ZGUgImltYXAuaCIKKyNpbmNsdWRlICJwb3AzLmgiCisjaW5jbHVkZSAic210cC5oIgorI2luY2x1ZGUgImZ0cC5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAicnRzcC5oIgorI2luY2x1ZGUgIndpbGRjYXJkLmgiCisKKyNpZmRlZiBIQVZFX0dTU0FQSQorIyBpZmRlZiBIQVZFX0dTU0dOVQorIyAgaW5jbHVkZSA8Z3NzLmg+CisjIGVsaWYgZGVmaW5lZCBIQVZFX0dTU01JVAorIyAgaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaS5oPgorIyAgaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaV9nZW5lcmljLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPGdzc2FwaS5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xJQlNTSDJfSAorI2luY2x1ZGUgPGxpYnNzaDIuaD4KKyNpbmNsdWRlIDxsaWJzc2gyX3NmdHAuaD4KKyNlbmRpZiAvKiBIQVZFX0xJQlNTSDJfSCAqLworCisvKiBEb3dubG9hZCBidWZmZXIgc2l6ZSwga2VlcCBpdCBmYWlybHkgYmlnIGZvciBzcGVlZCByZWFzb25zICovCisjdW5kZWYgQlVGU0laRQorI2RlZmluZSBCVUZTSVpFIENVUkxfTUFYX1dSSVRFX1NJWkUKKworLyogSW5pdGlhbCBzaXplIG9mIHRoZSBidWZmZXIgdG8gc3RvcmUgaGVhZGVycyBpbiwgaXQnbGwgYmUgZW5sYXJnZWQgaW4gY2FzZQorICAgb2YgbmVlZC4gKi8KKyNkZWZpbmUgSEVBREVSU0laRSAyNTYKKworI2RlZmluZSBDVVJMRUFTWV9NQUdJQ19OVU1CRVIgMHhjMGRlZGJhZFUKKworLyogU29tZSBjb252ZW5pZW5jZSBtYWNyb3MgdG8gZ2V0IHRoZSBsYXJnZXIvc21hbGxlciB2YWx1ZSBvdXQgb2YgdHdvIGdpdmVuLgorICAgV2UgcHJlZml4IHdpdGggQ1VSTCB0byBwcmV2ZW50IG5hbWUgY29sbGlzaW9ucy4gKi8KKyNkZWZpbmUgQ1VSTE1BWCh4LHkpICgoeCk+KHkpPyh4KTooeSkpCisjZGVmaW5lIENVUkxNSU4oeCx5KSAoKHgpPCh5KT8oeCk6KHkpKQorCisKKyNpZiBkZWZpbmVkKEhBVkVfS1JCNCkgfHwgZGVmaW5lZChIQVZFX0dTU0FQSSkKKy8qIFR5cGVzIG5lZWRlZCBmb3Iga3JiNC81LWZ0cCBjb25uZWN0aW9ucyAqLworc3RydWN0IGtyYjRidWZmZXIgeworICB2b2lkICpkYXRhOworICBzaXplX3Qgc2l6ZTsKKyAgc2l6ZV90IGluZGV4OworICBpbnQgZW9mX2ZsYWc7Cit9OworCitlbnVtIHByb3RlY3Rpb25fbGV2ZWwgeworICBQUk9UX05PTkUsIC8qIGZpcnN0IGluIGxpc3QgKi8KKyAgUFJPVF9DTEVBUiwKKyAgUFJPVF9TQUZFLAorICBQUk9UX0NPTkZJREVOVElBTCwKKyAgUFJPVF9QUklWQVRFLAorICBQUk9UX0NNRCwKKyAgUFJPVF9MQVNUIC8qIGxhc3QgaW4gbGlzdCAqLworfTsKKyNlbmRpZgorCisvKiBlbnVtIGZvciB0aGUgbm9uYmxvY2tpbmcgU1NMIGNvbm5lY3Rpb24gc3RhdGUgbWFjaGluZSAqLwordHlwZWRlZiBlbnVtIHsKKyAgc3NsX2Nvbm5lY3RfMSwKKyAgc3NsX2Nvbm5lY3RfMiwKKyAgc3NsX2Nvbm5lY3RfMl9yZWFkaW5nLAorICBzc2xfY29ubmVjdF8yX3dyaXRpbmcsCisgIHNzbF9jb25uZWN0XzMsCisgIHNzbF9jb25uZWN0X2RvbmUKK30gc3NsX2Nvbm5lY3Rfc3RhdGU7CisKK3R5cGVkZWYgZW51bSB7CisgIHNzbF9jb25uZWN0aW9uX25vbmUsCisgIHNzbF9jb25uZWN0aW9uX25lZ290aWF0aW5nLAorICBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZQorfSBzc2xfY29ubmVjdGlvbl9zdGF0ZTsKKworLyogc3RydWN0IGZvciBkYXRhIHJlbGF0ZWQgdG8gZWFjaCBTU0wgY29ubmVjdGlvbiAqLworc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgeworICAvKiBVc2Ugc3NsIGVuY3J5cHRlZCBjb21tdW5pY2F0aW9ucyBUUlVFL0ZBTFNFLCBub3QgbmVjZXNzYXJpbHkgdXNpbmcgaXQgYXRtCisgICAgIGJ1dCBhdCBsZWFzdCBhc2tlZCB0byBvciBtZWFuaW5nIHRvIHVzZSBpdC4gU2VlICdzdGF0ZScgZm9yIHRoZSBleGFjdAorICAgICBjdXJyZW50IHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLiAqLworICBib29sIHVzZTsKKyAgc3NsX2Nvbm5lY3Rpb25fc3RhdGUgc3RhdGU7CisjaWZkZWYgVVNFX1NTTEVBWQorICAvKiB0aGVzZSBvbmVzIHJlcXVpcmVzIHNwZWNpZmljIFNTTC10eXBlcyAqLworICBTU0xfQ1RYKiBjdHg7CisgIFNTTCogICAgIGhhbmRsZTsKKyAgWDUwOSogICAgc2VydmVyX2NlcnQ7CisgIHNzbF9jb25uZWN0X3N0YXRlIGNvbm5lY3Rpbmdfc3RhdGU7CisjZW5kaWYgLyogVVNFX1NTTEVBWSAqLworI2lmZGVmIFVTRV9HTlVUTFMKKyAgZ251dGxzX3Nlc3Npb24gc2Vzc2lvbjsKKyAgZ251dGxzX2NlcnRpZmljYXRlX2NyZWRlbnRpYWxzIGNyZWQ7CisjaWZkZWYgVVNFX1RMU19TUlAKKyAgZ251dGxzX3NycF9jbGllbnRfY3JlZGVudGlhbHMgc3JwX2NsaWVudF9jcmVkOworI2VuZGlmCisgIHNzbF9jb25uZWN0X3N0YXRlIGNvbm5lY3Rpbmdfc3RhdGU7CisjZW5kaWYgLyogVVNFX0dOVVRMUyAqLworI2lmZGVmIFVTRV9QT0xBUlNTTAorICBoYXZlZ2Vfc3RhdGUgaHM7CisgIHNzbF9jb250ZXh0IHNzbDsKKyAgc3NsX3Nlc3Npb24gc3NuOworICBpbnQgc2VydmVyX2ZkOworICB4NTA5X2NlcnQgY2FjZXJ0OworICB4NTA5X2NlcnQgY2xpY2VydDsKKyAgeDUwOV9jcmwgY3JsOworICByc2FfY29udGV4dCByc2E7CisjZW5kaWYgLyogVVNFX1BPTEFSU1NMICovCisjaWZkZWYgVVNFX0NZQVNTTAorICBTU0xfQ1RYKiBjdHg7CisgIFNTTCogICAgIGhhbmRsZTsKKyAgc3NsX2Nvbm5lY3Rfc3RhdGUgY29ubmVjdGluZ19zdGF0ZTsKKyNlbmRpZiAvKiBVU0VfQ1lBU1NMICovCisjaWZkZWYgVVNFX05TUworICBQUkZpbGVEZXNjICpoYW5kbGU7CisgIGNoYXIgKmNsaWVudF9uaWNrbmFtZTsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE7CisjaWZkZWYgSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QKKyAgc3RydWN0IGN1cmxfbGxpc3QgKm9ial9saXN0OworICBQSzExR2VuZXJpY09iamVjdCAqb2JqX2NsaWNlcnQ7CisjZW5kaWYKKyNlbmRpZiAvKiBVU0VfTlNTICovCisjaWZkZWYgVVNFX1FTT1NTTAorICBTU0xIYW5kbGUgKmhhbmRsZTsKKyNlbmRpZiAvKiBVU0VfUVNPU1NMICovCisjaWZkZWYgVVNFX0FYVExTCisgIFNTTF9DVFgqIHNzbF9jdHg7CisgIFNTTCogICAgIHNzbDsKKyNlbmRpZiAvKiBVU0VfQVhUTFMgKi8KK307CisKK3N0cnVjdCBzc2xfY29uZmlnX2RhdGEgeworICBsb25nIHZlcnNpb247ICAgICAgICAgIC8qIHdoYXQgdmVyc2lvbiB0aGUgY2xpZW50IHdhbnRzIHRvIHVzZSAqLworICBsb25nIGNlcnR2ZXJpZnlyZXN1bHQ7IC8qIHJlc3VsdCBmcm9tIHRoZSBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gKi8KKyAgbG9uZyB2ZXJpZnlwZWVyOyAgICAgICAvKiBzZXQgVFJVRSBpZiB0aGlzIGlzIGRlc2lyZWQgKi8KKyAgbG9uZyB2ZXJpZnlob3N0OyAgICAgICAvKiAwOiBubyB2ZXJpZnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiBjaGVjayB0aGF0IENOIGV4aXN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI6IENOIG11c3QgbWF0Y2ggaG9zdG5hbWUgKi8KKyAgY2hhciAqQ0FwYXRoOyAgICAgICAgICAvKiBjZXJ0aWZpY2F0ZSBkaXIgKGRvZXNuJ3Qgd29yayBvbiB3aW5kb3dzKSAqLworICBjaGFyICpDQWZpbGU7ICAgICAgICAgIC8qIGNlcnRpZmljYXRlIHRvIHZlcmlmeSBwZWVyIGFnYWluc3QgKi8KKyAgY29uc3QgY2hhciAqQ1JMZmlsZTsgICAvKiBDUkwgdG8gY2hlY2sgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiAqLworICBjb25zdCBjaGFyICppc3N1ZXJjZXJ0Oy8qIG9wdGlvbmFsIGlzc3VlciBjZXJ0aWZpY2F0ZSBmaWxlbmFtZSAqLworICBjaGFyICpyYW5kb21fZmlsZTsgICAgIC8qIHBhdGggdG8gZmlsZSBjb250YWluaW5nICJyYW5kb20iIGRhdGEgKi8KKyAgY2hhciAqZWdkc29ja2V0OyAgICAgICAvKiBwYXRoIHRvIGZpbGUgY29udGFpbmluZyB0aGUgRUdEIGRhZW1vbiBzb2NrZXQgKi8KKyAgY2hhciAqY2lwaGVyX2xpc3Q7ICAgICAvKiBsaXN0IG9mIGNpcGhlcnMgdG8gdXNlICovCisgIHNpemVfdCBtYXhfc3NsX3Nlc3Npb25zOyAvKiBTU0wgc2Vzc2lvbiBpZCBjYWNoZSBzaXplICovCisgIGN1cmxfc3NsX2N0eF9jYWxsYmFjayBmc3NsY3R4OyAvKiBmdW5jdGlvbiB0byBpbml0aWFsaXplIHNzbCBjdHggKi8KKyAgdm9pZCAqZnNzbGN0eHA7ICAgICAgICAvKiBwYXJhbWV0ZXIgZm9yIGNhbGwgYmFjayAqLworICBib29sIHNlc3Npb25pZDsgICAgICAgIC8qIGNhY2hlIHNlc3Npb24gSURzIG9yIG5vdCAqLworICBib29sIGNlcnRpbmZvOyAgICAgICAgIC8qIGdhdGhlciBsb3RzIG9mIGNlcnRpZmljYXRlIGluZm8gKi8KKworI2lmZGVmIFVTRV9UTFNfU1JQCisgIGNoYXIgKnVzZXJuYW1lOyAvKiBUTFMgdXNlcm5hbWUgKGZvciwgZS5nLiwgU1JQKSAqLworICBjaGFyICpwYXNzd29yZDsgLyogVExTIHBhc3N3b3JkIChmb3IsIGUuZy4sIFNSUCkgKi8KKyAgZW51bSBDVVJMX1RMU0FVVEggYXV0aHR5cGU7IC8qIFRMUyBhdXRoZW50aWNhdGlvbiB0eXBlIChkZWZhdWx0IFNSUCkgKi8KKyNlbmRpZgorfTsKKworLyogaW5mb3JtYXRpb24gc3RvcmVkIGFib3V0IG9uZSBzaW5nbGUgU1NMIHNlc3Npb24gKi8KK3N0cnVjdCBjdXJsX3NzbF9zZXNzaW9uIHsKKyAgY2hhciAqbmFtZTsgICAgICAgLyogaG9zdCBuYW1lIGZvciB3aGljaCB0aGlzIElEIHdhcyB1c2VkICovCisgIHZvaWQgKnNlc3Npb25pZDsgIC8qIGFzIHJldHVybmVkIGZyb20gdGhlIFNTTCBsYXllciAqLworICBzaXplX3QgaWRzaXplOyAgICAvKiBpZiBrbm93biwgb3RoZXJ3aXNlIDAgKi8KKyAgbG9uZyBhZ2U7ICAgICAgICAgLyoganVzdCBhIG51bWJlciwgdGhlIGhpZ2hlciB0aGUgbW9yZSByZWNlbnQgKi8KKyAgdW5zaWduZWQgc2hvcnQgcmVtb3RlX3BvcnQ7IC8qIHJlbW90ZSBwb3J0IHRvIGNvbm5lY3QgdG8gKi8KKyAgc3RydWN0IHNzbF9jb25maWdfZGF0YSBzc2xfY29uZmlnOyAvKiBzZXR1cCBmb3IgdGhpcyBzZXNzaW9uICovCit9OworCisvKiBTdHJ1Y3QgdXNlZCBmb3IgRGlnZXN0IGNoYWxsZW5nZS1yZXNwb25zZSBhdXRoZW50aWNhdGlvbiAqLworc3RydWN0IGRpZ2VzdGRhdGEgeworICBjaGFyICpub25jZTsKKyAgY2hhciAqY25vbmNlOworICBjaGFyICpyZWFsbTsKKyAgaW50IGFsZ287CisgIGJvb2wgc3RhbGU7IC8qIHNldCB0cnVlIGZvciByZS1uZWdvdGlhdGlvbiAqLworICBjaGFyICpvcGFxdWU7CisgIGNoYXIgKnFvcDsKKyAgY2hhciAqYWxnb3JpdGhtOworICBpbnQgbmM7IC8qIG5vdW5jZSBjb3VudCAqLworfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgTlRMTVNUQVRFX05PTkUsCisgIE5UTE1TVEFURV9UWVBFMSwKKyAgTlRMTVNUQVRFX1RZUEUyLAorICBOVExNU1RBVEVfVFlQRTMsCisgIE5UTE1TVEFURV9MQVNUCit9IGN1cmxudGxtOworCisjaWZkZWYgVVNFX1dJTkRPV1NfU1NQSQorI2luY2x1ZGUgImN1cmxfc3NwaS5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENVUkxfRE9FU19DT05WRVJTSU9OUykgJiYgZGVmaW5lZChIQVZFX0lDT05WKQorI2luY2x1ZGUgPGljb252Lmg+CisjZW5kaWYKKworLyogU3RydWN0IHVzZWQgZm9yIE5UTE0gY2hhbGxlbmdlLXJlc3BvbnNlIGF1dGhlbnRpY2F0aW9uICovCitzdHJ1Y3QgbnRsbWRhdGEgeworICBjdXJsbnRsbSBzdGF0ZTsKKyNpZmRlZiBVU0VfV0lORE9XU19TU1BJCisgIENyZWRIYW5kbGUgaGFuZGxlOworICBDdHh0SGFuZGxlIGNfaGFuZGxlOworICBTRUNfV0lOTlRfQVVUSF9JREVOVElUWSBpZGVudGl0eTsKKyAgU0VDX1dJTk5UX0FVVEhfSURFTlRJVFkgKnBfaWRlbnRpdHk7CisgIGludCBoYXNfaGFuZGxlczsKKyAgdm9pZCAqdHlwZV8yOworICB1bnNpZ25lZCBsb25nIG5fdHlwZV8yOworI2Vsc2UKKyAgdW5zaWduZWQgaW50IGZsYWdzOworICB1bnNpZ25lZCBjaGFyIG5vbmNlWzhdOworI2VuZGlmCit9OworCisjaWZkZWYgVVNFX0hUVFBfTkVHT1RJQVRFCitzdHJ1Y3QgbmVnb3RpYXRlZGF0YSB7CisgIC8qIHdoZW4gZG9pbmcgTmVnb3RpYXRlIHdlIGZpcnN0IG5lZWQgdG8gcmVjZWl2ZSBhbiBhdXRoIHRva2VuIGFuZCB0aGVuIHdlCisgICAgIG5lZWQgdG8gc2VuZCBvdXIgaGVhZGVyICovCisgIGVudW0geyBHU1NfQVVUSE5PTkUsIEdTU19BVVRIUkVDViwgR1NTX0FVVEhTRU5UIH0gc3RhdGU7CisgIGJvb2wgZ3NzOyAvKiBXaGV0aGVyIHdlJ3JlIHByb2Nlc3NpbmcgR1NTLU5lZ290aWF0ZSBvciBOZWdvdGlhdGUgKi8KKyAgY29uc3QgY2hhciogcHJvdG9jb2w7IC8qICJHU1MtTmVnb3RpYXRlIiBvciAiTmVnb3RpYXRlIiAqLworI2lmZGVmIEhBVkVfR1NTQVBJCisgIE9NX3VpbnQzMiBzdGF0dXM7CisgIGdzc19jdHhfaWRfdCBjb250ZXh0OworICBnc3NfbmFtZV90IHNlcnZlcl9uYW1lOworICBnc3NfYnVmZmVyX2Rlc2Mgb3V0cHV0X3Rva2VuOworI2Vsc2UKKyNpZmRlZiBVU0VfV0lORE9XU19TU1BJCisgIERXT1JEIHN0YXR1czsKKyAgQ3R4dEhhbmRsZSAqY29udGV4dDsKKyAgQ3JlZEhhbmRsZSAqY3JlZGVudGlhbHM7CisgIGNoYXIgc2VydmVyX25hbWVbMTAyNF07CisgIHNpemVfdCBtYXhfdG9rZW5fbGVuZ3RoOworICBCWVRFICpvdXRwdXRfdG9rZW47CisgIHNpemVfdCBvdXRwdXRfdG9rZW5fbGVuZ3RoOworI2VuZGlmCisjZW5kaWYKK307CisjZW5kaWYKKworCisvKgorICogQm9vbGVhbiB2YWx1ZXMgdGhhdCBjb25jZXJucyB0aGlzIGNvbm5lY3Rpb24uCisgKi8KK3N0cnVjdCBDb25uZWN0Qml0cyB7CisgIGJvb2wgY2xvc2U7IC8qIGlmIHNldCwgd2UgY2xvc2UgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhpcyByZXF1ZXN0ICovCisgIGJvb2wgcmV1c2U7IC8qIGlmIHNldCwgdGhpcyBpcyBhIHJlLXVzZWQgY29ubmVjdGlvbiAqLworICBib29sIHByb3h5OyAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgcHJveHkgLSBhbnkgdHlwZSAqLworICBib29sIGh0dHBwcm94eTsgICAgLyogaWYgc2V0LCB0aGlzIHRyYW5zZmVyIGlzIGRvbmUgdGhyb3VnaCBhIGh0dHAgcHJveHkgKi8KKyAgYm9vbCB1c2VyX3Bhc3N3ZDsgICAgLyogZG8gd2UgdXNlIHVzZXIrcGFzc3dvcmQgZm9yIHRoaXMgY29ubmVjdGlvbj8gKi8KKyAgYm9vbCBwcm94eV91c2VyX3Bhc3N3ZDsgLyogdXNlcitwYXNzd29yZCBmb3IgdGhlIHByb3h5PyAqLworICBib29sIGlwdjZfaXA7IC8qIHdlIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgc2l0ZSBzcGVjaWZpZWQgd2l0aCBwdXJlIElQdjYKKyAgICAgICAgICAgICAgICAgICBJUCBhZGRyZXNzICovCisgIGJvb2wgaXB2NjsgICAgLyogd2UgY29tbXVuaWNhdGUgd2l0aCBhIHNpdGUgdXNpbmcgYW4gSVB2NiBhZGRyZXNzICovCisKKyAgYm9vbCBkb19tb3JlOyAvKiB0aGlzIGlzIHNldCBUUlVFIGlmIHRoZSAtPmN1cmxfZG9fbW9yZSgpIGZ1bmN0aW9uIGlzCisgICAgICAgICAgICAgICAgICAgc3VwcG9zZWQgdG8gYmUgY2FsbGVkLCBhZnRlciAtPmN1cmxfZG8oKSAqLworICBib29sIHRjcGNvbm5lY3RbMl07IC8qIHRoZSBUQ1AgbGF5ZXIgKG9yIHNpbWlsYXIpIGlzIGNvbm5lY3RlZCwgdGhpcyBpcyBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgdGltZSBvbiB0aGUgZmlyc3QgY29ubmVjdCBmdW5jdGlvbiBjYWxsICovCisgIGJvb2wgcHJvdG9jb25uc3RhcnQ7LyogdGhlIHByb3RvY29sIGxheWVyIGhhcyBTVEFSVEVEIGl0cyBvcGVyYXRpb24gYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgVENQIGxheWVyIGNvbm5lY3QgKi8KKworICBib29sIHJldHJ5OyAgICAgICAgIC8qIHRoaXMgY29ubmVjdGlvbiBpcyBhYm91dCB0byBnZXQgY2xvc2VkIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgcmUtYXR0ZW1wdGVkIGF0IGFub3RoZXIgY29ubmVjdGlvbi4gKi8KKyAgYm9vbCB0dW5uZWxfcHJveHk7ICAvKiBpZiBDT05ORUNUIGlzIHVzZWQgdG8gInR1bm5lbCIgdGhyb3VnaCB0aGUgcHJveHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBpbXBsaWNpdCB3aGVuIFNTTC1wcm90b2NvbHMgYXJlIHVzZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICAgICAgIHByb3hpZXMsIGJ1dCBjYW4gYWxzbyBiZSBlbmFibGVkIGV4cGxpY2l0bHkgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICBhcHBzICovCisgIGJvb2wgYXV0aG5lZzsgICAgICAgLyogVFJVRSB3aGVuIHRoZSBhdXRoIHBoYXNlIGhhcyBzdGFydGVkLCB3aGljaCBtZWFucworICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2UgYXJlIGNyZWF0aW5nIGEgcmVxdWVzdCB3aXRoIGFuIGF1dGggaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBpdCBpcyBub3QgdGhlIGZpbmFsIHJlcXVlc3QgaW4gdGhlIGF1dGgKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZWdvdGlhdGlvbi4gKi8KKyAgYm9vbCByZXdpbmRhZnRlcnNlbmQ7LyogVFJVRSB3aGVuIHRoZSBzZW5kaW5nIGNvdWxkbid0IGJlIHN0b3BwZWQgZXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgICB0aG91Z2ggaXQgd2lsbCBiZSBkaXNjYXJkZWQuIFdoZW4gdGhlIHdob2xlIHNlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIGlzIGRvbmUsIHdlIG11c3QgY2FsbCB0aGUgZGF0YSByZXdpbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suICovCisgIGJvb2wgZnRwX3VzZV9lcHN2OyAgLyogQXMgc2V0IHdpdGggQ1VSTE9QVF9GVFBfVVNFX0VQU1YsIGJ1dCBpZiB3ZSBmaW5kIG91dAorICAgICAgICAgICAgICAgICAgICAgICAgIEVQU1YgZG9lc24ndCB3b3JrIHdlIGRpc2FibGUgaXQgZm9yIHRoZSBmb3J0aGNvbWluZworICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzICovCisKKyAgYm9vbCBmdHBfdXNlX2VwcnQ7ICAvKiBBcyBzZXQgd2l0aCBDVVJMT1BUX0ZUUF9VU0VfRVBSVCwgYnV0IGlmIHdlIGZpbmQgb3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgRVBSVCBkb2Vzbid0IHdvcmsgd2UgZGlzYWJsZSBpdCBmb3IgdGhlIGZvcnRoY29taW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMgKi8KKyAgYm9vbCBuZXRyYzsgICAgICAgICAvKiBuYW1lK3Bhc3N3b3JkIHByb3ZpZGVkIGJ5IG5ldHJjICovCisgIGJvb2wgdXNlcnB3ZF9pbl91cmw7IC8qIG5hbWUrcGFzc3dvcmQgZm91bmQgaW4gdXJsICovCisKKyAgYm9vbCBkb25lOyAgICAgICAgICAvKiBzZXQgdG8gRkFMU0Ugd2hlbiBDdXJsX2RvKCkgaXMgY2FsbGVkIGFuZCBzZXQgdG8gVFJVRQorICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gQ3VybF9kb25lKCkgaXMgY2FsbGVkLCB0byBwcmV2ZW50IEN1cmxfZG9uZSgpIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGludm9rZWQgdHdpY2Ugd2hlbiB0aGUgbXVsdGkgaW50ZXJmYWNlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZC4gKi8KKyAgYm9vbCBzdHJlYW1fd2FzX3Jld291bmQ7IC8qIEluZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gd2FzIHJld291bmQgYWZ0ZXIgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCByZWFkIHBhc3QgdGhlIGVuZCBvZiBpdHMgcmVzcG9uc2UgYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkgKi8KKyAgYm9vbCBwcm94eV9jb25uZWN0X2Nsb3NlZDsgLyogc2V0IHRydWUgaWYgYSBwcm94eSBkaXNjb25uZWN0ZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gaW4gYSBDT05ORUNUIHJlcXVlc3Qgd2l0aCBhdXRoLCBzbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGxpYmN1cmwgc2hvdWxkIHJlY29ubmVjdCBhbmQgY29udGludWUuICovCisgIGJvb2wgYm91bmQ7IC8qIHNldCB0cnVlIGlmIGJpbmQoKSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUgb24gdGhpcyBzb2NrZXQvCisgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gKi8KKyAgYm9vbCB0eXBlX3NldDsgIC8qIHR5cGU9IHdhcyB1c2VkIGluIHRoZSBVUkwgKi8KK307CisKK3N0cnVjdCBob3N0bmFtZSB7CisgIGNoYXIgKnJhd2FsbG9jOyAvKiBhbGxvY2F0ZWQgInJhdyIgdmVyc2lvbiBvZiB0aGUgbmFtZSAqLworICBjaGFyICplbmNhbGxvYzsgLyogYWxsb2NhdGVkIElETi1lbmNvZGVkIHZlcnNpb24gb2YgdGhlIG5hbWUgKi8KKyAgY2hhciAqbmFtZTsgICAgIC8qIG5hbWUgdG8gdXNlIGludGVybmFsbHksIG1pZ2h0IGJlIGVuY29kZWQsIG1pZ2h0IGJlIHJhdyAqLworICBjb25zdCBjaGFyICpkaXNwbmFtZTsgLyogbmFtZSB0byBkaXNwbGF5LCBhcyAnbmFtZScgbWlnaHQgYmUgZW5jb2RlZCAqLworfTsKKworLyoKKyAqIEZsYWdzIG9uIHRoZSBrZWVwb24gbWVtYmVyIG9mIHRoZSBDdXJsX3RyYW5zZmVyX2tlZXBlcgorICovCisKKyNkZWZpbmUgS0VFUF9OT05FICAwCisjZGVmaW5lIEtFRVBfUkVDViAgKDE8PDApICAgICAvKiB0aGVyZSBpcyBvciBtYXkgYmUgZGF0YSB0byByZWFkICovCisjZGVmaW5lIEtFRVBfU0VORCAoMTw8MSkgICAgIC8qIHRoZXJlIGlzIG9yIG1heSBiZSBkYXRhIHRvIHdyaXRlICovCisjZGVmaW5lIEtFRVBfUkVDVl9IT0xEICgxPDwyKSAvKiB3aGVuIHNldCwgbm8gcmVhZGluZyBzaG91bGQgYmUgZG9uZSBidXQgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pZ2h0IHN0aWxsIGJlIGRhdGEgdG8gcmVhZCAqLworI2RlZmluZSBLRUVQX1NFTkRfSE9MRCAoMTw8MykgLyogd2hlbiBzZXQsIG5vIHdyaXRpbmcgc2hvdWxkIGJlIGRvbmUgYnV0IHRoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlnaHQgc3RpbGwgYmUgZGF0YSB0byB3cml0ZSAqLworI2RlZmluZSBLRUVQX1JFQ1ZfUEFVU0UgKDE8PDQpIC8qIHJlYWRpbmcgaXMgcGF1c2VkICovCisjZGVmaW5lIEtFRVBfU0VORF9QQVVTRSAoMTw8NSkgLyogd3JpdGluZyBpcyBwYXVzZWQgKi8KKworI2RlZmluZSBLRUVQX1JFQ1ZCSVRTIChLRUVQX1JFQ1YgfCBLRUVQX1JFQ1ZfSE9MRCB8IEtFRVBfUkVDVl9QQVVTRSkKKyNkZWZpbmUgS0VFUF9TRU5EQklUUyAoS0VFUF9TRU5EIHwgS0VFUF9TRU5EX0hPTEQgfCBLRUVQX1NFTkRfUEFVU0UpCisKKworI2lmZGVmIEhBVkVfTElCWgordHlwZWRlZiBlbnVtIHsKKyAgWkxJQl9VTklOSVQsICAgICAgICAgIC8qIHVuaW5pdGlhbGl6ZWQgKi8KKyAgWkxJQl9JTklULCAgICAgICAgICAgIC8qIGluaXRpYWxpemVkICovCisgIFpMSUJfR1pJUF9IRUFERVIsICAgICAvKiByZWFkaW5nIGd6aXAgaGVhZGVyICovCisgIFpMSUJfR1pJUF9JTkZMQVRJTkcsICAvKiBpbmZsYXRpbmcgZ3ppcCBzdHJlYW0gKi8KKyAgWkxJQl9JTklUX0daSVAgICAgICAgIC8qIGluaXRpYWxpemVkIGluIHRyYW5zcGFyZW50IGd6aXAgbW9kZSAqLworfSB6bGliSW5pdFN0YXRlOworI2VuZGlmCisKKyNpZmRlZiBDVVJMUkVTX0FTWU5DSAorc3RydWN0IEN1cmxfYXN5bmMgeworICBjaGFyICpob3N0bmFtZTsKKyAgaW50IHBvcnQ7CisgIHN0cnVjdCBDdXJsX2Ruc19lbnRyeSAqZG5zOworICBib29sIGRvbmU7ICAvKiBzZXQgVFJVRSB3aGVuIHRoZSBsb29rdXAgaXMgY29tcGxldGUgKi8KKyAgaW50IHN0YXR1czsgLyogaWYgZG9uZSBpcyBUUlVFLCB0aGlzIGlzIHRoZSBzdGF0dXMgZnJvbSB0aGUgY2FsbGJhY2sgKi8KKyAgdm9pZCAqb3Nfc3BlY2lmaWM7ICAvKiAnc3RydWN0IHRocmVhZF9kYXRhJyBmb3IgV2luZG93cyAqLworfTsKKyNlbmRpZgorCisjZGVmaW5lIEZJUlNUU09DS0VUICAgICAwCisjZGVmaW5lIFNFQ09OREFSWVNPQ0tFVCAxCisKKy8qIFRoZXNlIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZXMgYXJlIGhlcmUgb25seSB0byBhbGxvdyBlYXNpZXIgdHlwZWNhc3RpbmcKKyAgIHdpdGhpbiB0aGUgc291cmNlIHdoZW4gd2UgbmVlZCB0byBjYXN0IGJldHdlZW4gZGF0YSBwb2ludGVycyAoc3VjaCBhcyBOVUxMKQorICAgYW5kIGZ1bmN0aW9uIHBvaW50ZXJzLiAqLwordHlwZWRlZiBDVVJMY29kZSAoKkN1cmxfZG9fbW9yZV9mdW5jKShzdHJ1Y3QgY29ubmVjdGRhdGEgKiwgYm9vbCAqKTsKK3R5cGVkZWYgQ1VSTGNvZGUgKCpDdXJsX2RvbmVfZnVuYykoc3RydWN0IGNvbm5lY3RkYXRhICosIENVUkxjb2RlLCBib29sKTsKKworCitlbnVtIGV4cGVjdDEwMCB7CisgIEVYUDEwMF9TRU5EX0RBVEEsICAgICAgICAgICAvKiBlbm91Z2ggd2FpdGluZywganVzdCBzZW5kIHRoZSBib2R5IG5vdyAqLworICBFWFAxMDBfQVdBSVRJTkdfQ09OVElOVUUsICAgLyogd2FpdGluZyBmb3IgdGhlIDEwMCBDb250aW51ZSBoZWFkZXIgKi8KKyAgRVhQMTAwX1NFTkRJTkdfUkVRVUVTVCwgICAgIC8qIHN0aWxsIHNlbmRpbmcgdGhlIHJlcXVlc3QgYnV0IHdpbGwgd2FpdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAxMDAgaGVhZGVyIG9uY2UgZG9uZSB3aXRoIHRoZSByZXF1ZXN0ICovCisgIEVYUDEwMF9GQUlMRUQgICAgICAgICAgICAgICAvKiB1c2VkIG9uIDQxNyBFeHBlY3RhdGlvbiBGYWlsZWQgKi8KK307CisKKy8qCisgKiBSZXF1ZXN0IHNwZWNpZmljIGRhdGEgaW4gdGhlIGVhc3kgaGFuZGxlIChTZXNzaW9uSGFuZGxlKS4gIFByZXZpb3VzbHksCisgKiB0aGVzZSBtZW1iZXJzIHdlcmUgb24gdGhlIGNvbm5lY3RkYXRhIHN0cnVjdCBidXQgc2luY2UgYSBjb25uIHN0cnVjdCBtYXkKKyAqIG5vdyBiZSBzaGFyZWQgYmV0d2VlbiBkaWZmZXJlbnQgU2Vzc2lvbkhhbmRsZXMsIHdlIHN0b3JlIGNvbm5lY3Rpb24tc3BlY2lmaWMKKyAqIGRhdGEgaGVyZS4gVGhpcyBzdHJ1Y3Qgb25seSBrZWVwcyBzdHVmZiB0aGF0J3MgaW50ZXJlc3RpbmcgZm9yICp0aGlzKgorICogcmVxdWVzdCwgYXMgaXQgd2lsbCBiZSBjbGVhcmVkIGJldHdlZW4gbXVsdGlwbGUgb25lcworICovCitzdHJ1Y3QgU2luZ2xlUmVxdWVzdCB7CisgIGN1cmxfb2ZmX3Qgc2l6ZTsgICAgICAgIC8qIC0xIGlmIHVua25vd24gYXQgdGhpcyBwb2ludCAqLworICBjdXJsX29mZl90ICpieXRlY291bnRwOyAvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3IgTlVMTCAqLworCisgIGN1cmxfb2ZmX3QgbWF4ZG93bmxvYWQ7IC8qIGluIGJ5dGVzLCB0aGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB0byBmZXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgbWVhbnMgdW5saW1pdGVkICovCisgIGN1cmxfb2ZmX3QgKndyaXRlYnl0ZWNvdW50cDsgLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIE5VTEwgKi8KKworICBjdXJsX29mZl90IGJ5dGVjb3VudDsgICAgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZCAqLworICBjdXJsX29mZl90IHdyaXRlYnl0ZWNvdW50OyAgICAvKiBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiAqLworCisgIGxvbmcgaGVhZGVyYnl0ZWNvdW50OyAgICAgICAgIC8qIG9ubHkgY291bnQgcmVjZWl2ZWQgaGVhZGVycyAqLworICBsb25nIGRlZHVjdGhlYWRlcmNvdW50OyAvKiB0aGlzIGFtb3VudCBvZiBieXRlcyBkb2Vzbid0IGNvdW50IHdoZW4gd2UgY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYW55dGhpbmcgaGFzIGJlZW4gdHJhbnNmZXJyZWQgYXQgdGhlIGVuZCBvZiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uIFdlIHVzZSB0aGlzIGNvdW50ZXIgdG8gbWFrZSBvbmx5IGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwIHJlcGx5ICh3aXRob3V0IGEgZm9sbG93aW5nIHNlY29uZCByZXNwb25zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlKSByZXN1bHQgaW4gYSBDVVJMRV9HT1RfTk9USElORyBlcnJvciBjb2RlICovCisKKyAgc3RydWN0IHRpbWV2YWwgc3RhcnQ7ICAgICAgICAgLyogdHJhbnNmZXIgc3RhcnRlZCBhdCB0aGlzIHRpbWUgKi8KKyAgc3RydWN0IHRpbWV2YWwgbm93OyAgICAgICAgICAgLyogY3VycmVudCB0aW1lICovCisgIGJvb2wgaGVhZGVyOyAgICAgICAgICAgICAgICAgIC8qIGluY29taW5nIGRhdGEgaGFzIEhUVFAgaGVhZGVyICovCisgIGVudW0geworICAgIEhFQURFUl9OT1JNQUwsICAgICAgICAgICAgICAvKiBubyBiYWQgaGVhZGVyIGF0IGFsbCAqLworICAgIEhFQURFUl9QQVJUSEVBREVSLCAgICAgICAgICAvKiBwYXJ0IG9mIHRoZSBjaHVuayBpcyBhIGJhZCBoZWFkZXIsIHRoZSByZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vcm1hbCBkYXRhICovCisgICAgSEVBREVSX0FMTEJBRCAgICAgICAgICAgICAgIC8qIGFsbCB3YXMgYmVsaWV2ZWQgdG8gYmUgaGVhZGVyICovCisgIH0gYmFkaGVhZGVyOyAgICAgICAgICAgICAgICAgIC8qIHRoZSBoZWFkZXIgd2FzIGRlZW1lZCBiYWQgYW5kIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlbiBhcyBib2R5ICovCisgIGludCBoZWFkZXJsaW5lOyAgICAgICAgICAgICAgIC8qIGNvdW50cyBoZWFkZXIgbGluZXMgdG8gYmV0dGVyIHRyYWNrIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBvbmUgKi8KKyAgY2hhciAqaGJ1ZnA7ICAgICAgICAgICAgICAgICAgLyogcG9pbnRzIGF0ICplbmQqIG9mIGhlYWRlciBsaW5lICovCisgIHNpemVfdCBoYnVmbGVuOworICBjaGFyICpzdHI7ICAgICAgICAgICAgICAgICAgICAvKiB3aXRoaW4gYnVmICovCisgIGNoYXIgKnN0cl9zdGFydDsgICAgICAgICAgICAgIC8qIHdpdGhpbiBidWYgKi8KKyAgY2hhciAqZW5kX3B0cjsgICAgICAgICAgICAgICAgLyogd2l0aGluIGJ1ZiAqLworICBjaGFyICpwOyAgICAgICAgICAgICAgICAgICAgICAvKiB3aXRoaW4gaGVhZGVyYnVmZiAqLworICBib29sIGNvbnRlbnRfcmFuZ2U7ICAgICAgICAgICAvKiBzZXQgVFJVRSBpZiBDb250ZW50LVJhbmdlOiB3YXMgZm91bmQgKi8KKyAgY3VybF9vZmZfdCBvZmZzZXQ7ICAgICAgICAgICAgLyogcG9zc2libGUgcmVzdW1lIG9mZnNldCByZWFkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQtUmFuZ2U6IGhlYWRlciAqLworICBpbnQgaHR0cGNvZGU7ICAgICAgICAgICAgICAgICAvKiBlcnJvciBjb2RlIGZyb20gdGhlICdIVFRQLzEuPyBYWFgnIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSVFNQLzEuPyBYWFgnIGxpbmUgKi8KKyAgc3RydWN0IHRpbWV2YWwgc3RhcnQxMDA7ICAgICAgLyogdGltZSBzdGFtcCB0byB3YWl0IGZvciB0aGUgMTAwIGNvZGUgZnJvbSAqLworICBlbnVtIGV4cGVjdDEwMCBleHAxMDA7ICAgICAgICAvKiBleHBlY3QgMTAwIGNvbnRpbnVlIHN0YXRlICovCisKKyAgaW50IGF1dG9fZGVjb2Rpbmc7ICAgICAgICAgICAgLyogV2hhdCBjb250ZW50IGVuY29kaW5nLiBzZWMgMy41LCBSRkMyNjE2LiAqLworCisjZGVmaW5lIElERU5USVRZIDAgICAgICAgICAgICAgIC8qIE5vIGVuY29kaW5nICovCisjZGVmaW5lIERFRkxBVEUgMSAgICAgICAgICAgICAgIC8qIHpsaWIgZGVmbGF0ZSBbUkZDIDE5NTAgJiAxOTUxXSAqLworI2RlZmluZSBHWklQIDIgICAgICAgICAgICAgICAgICAvKiBnemlwIGFsZ29yaXRobSBbUkZDIDE5NTJdICovCisjZGVmaW5lIENPTVBSRVNTIDMgICAgICAgICAgICAgIC8qIE5vdCBoYW5kbGVkLCBhZGRlZCBmb3IgY29tcGxldGVuZXNzICovCisKKyNpZmRlZiBIQVZFX0xJQloKKyAgemxpYkluaXRTdGF0ZSB6bGliX2luaXQ7ICAgICAgLyogcG9zc2libGUgemxpYiBpbml0IHN0YXRlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgaWYgQ29udGVudC1FbmNvZGluZyBoZWFkZXIuICovCisgIHpfc3RyZWFtIHo7ICAgICAgICAgICAgICAgICAgIC8qIFN0YXRlIHN0cnVjdHVyZSBmb3IgemxpYi4gKi8KKyNlbmRpZgorCisgIHRpbWVfdCB0aW1lb2Zkb2M7CisgIGxvbmcgYm9keXdyaXRlczsKKworICBjaGFyICpidWY7CisgIGNoYXIgKnVwbG9hZGJ1ZjsKKyAgY3VybF9zb2NrZXRfdCBtYXhmZDsKKworICBpbnQga2VlcG9uOworCisgIGJvb2wgdXBsb2FkX2RvbmU7IC8qIHNldCB0byBUUlVFIHdoZW4gZG9pbmcgY2h1bmtlZCB0cmFuc2Zlci1lbmNvZGluZyB1cGxvYWQKKyAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdlJ3JlIHVwbG9hZGluZyB0aGUgbGFzdCBjaHVuayAqLworCisgIGJvb2wgaWdub3JlYm9keTsgIC8qIHdlIHJlYWQgYSByZXNwb25zZS1ib2R5IGJ1dCB3ZSBpZ25vcmUgaXQhICovCisgIGJvb2wgaWdub3JlY2w7ICAgIC8qIFRoaXMgSFRUUCByZXNwb25zZSBoYXMgbm8gYm9keSBzbyB3ZSBpZ25vcmUgdGhlIENvbnRlbnQtCisgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aDogaGVhZGVyICovCisKKyAgY2hhciAqbG9jYXRpb247ICAgLyogVGhpcyBwb2ludHMgdG8gYW4gYWxsb2NhdGVkIHZlcnNpb24gb2YgdGhlIExvY2F0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgZGF0YSAqLworICBjaGFyICpuZXd1cmw7ICAgICAvKiBTZXQgdG8gdGhlIG5ldyBVUkwgdG8gdXNlIHdoZW4gYSByZWRpcmVjdCBvciBhIHJldHJ5IGlzCisgICAgICAgICAgICAgICAgICAgICAgIHdhbnRlZCAqLworCisgIC8qICd1cGxvYWRfcHJlc2VudCcgaXMgdXNlZCB0byBrZWVwIGEgYnl0ZSBjb3VudGVyIG9mIGhvdyBtdWNoIGRhdGEgdGhlcmUgaXMKKyAgICAgc3RpbGwgbGVmdCBpbiB0aGUgYnVmZmVyLCBhaW1lZCBmb3IgdXBsb2FkLiAqLworICBzc2l6ZV90IHVwbG9hZF9wcmVzZW50OworCisgICAvKiAndXBsb2FkX2Zyb21oZXJlJyBpcyB1c2VkIGFzIGEgcmVhZC1wb2ludGVyIHdoZW4gd2UgdXBsb2FkZWQgcGFydHMgb2YgYQorICAgICAgYnVmZmVyLCBzbyB0aGUgbmV4dCByZWFkIHNob3VsZCByZWFkIGZyb20gd2hlcmUgdGhpcyBwb2ludGVyIHBvaW50cyB0bywKKyAgICAgIGFuZCB0aGUgJ3VwbG9hZF9wcmVzZW50JyBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCB0aGlzCisgICAgICBwb3NpdGlvbiAqLworICBjaGFyICp1cGxvYWRfZnJvbWhlcmU7CisKKyAgYm9vbCBjaHVuazsgLyogaWYgc2V0LCB0aGlzIGlzIGEgY2h1bmtlZCB0cmFuc2Zlci1lbmNvZGluZyAqLworICBib29sIHVwbG9hZF9jaHVua3k7IC8qIHNldCBUUlVFIGlmIHdlIGFyZSBkb2luZyBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgb24gdXBsb2FkICovCisgIGJvb2wgZ2V0aGVhZGVyOyAgICAgLyogVFJVRSBpZiBoZWFkZXIgcGFyc2luZyBpcyB3YW50ZWQgKi8KKworICBib29sIGZvcmJpZGNodW5rOyAgIC8qIHVzZWQgb25seSB0byBleHBsaWNpdGx5IGZvcmJpZCBjaHVuay11cGxvYWQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgdXBsb2FkIGJ1ZmZlcnMuIFNlZSByZWFkbW9yZWRhdGEoKSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAuYyBmb3IgZGV0YWlscy4gKi8KK307CisKKy8qCisgKiBTcGVjaWZpYyBwcm90b2NvbCBoYW5kbGVyLgorICovCisKK3N0cnVjdCBDdXJsX2hhbmRsZXIgeworICBjb25zdCBjaGFyICogc2NoZW1lOyAgICAgICAgLyogVVJMIHNjaGVtZSBuYW1lLiAqLworCisgIC8qIENvbXBsZW1lbnQgdG8gc2V0dXBfY29ubmVjdGlvbl9pbnRlcm5hbHMoKS4gKi8KKyAgQ1VSTGNvZGUgKCpzZXR1cF9jb25uZWN0aW9uKShzdHJ1Y3QgY29ubmVjdGRhdGEgKik7CisKKyAgLyogVGhlc2UgdHdvIGZ1bmN0aW9ucyBNVVNUIGJlIHNldCB0byBiZSBwcm90b2NvbCBkZXBlbmRlbnQgKi8KKyAgQ1VSTGNvZGUgKCpkb19pdCkoc3RydWN0IGNvbm5lY3RkYXRhICosIGJvb2wgKmRvbmUpOworICBDdXJsX2RvbmVfZnVuYyBkb25lOworCisgIC8qIElmIHRoZSBjdXJsX2RvKCkgZnVuY3Rpb24gaXMgYmV0dGVyIG1hZGUgaW4gdHdvIGhhbHZlcywgdGhpcworICAgKiBjdXJsX2RvX21vcmUoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlcndhcmRzLCBpZiBzZXQuIEZvciBleGFtcGxlCisgICAqIGZvciBkb2luZyB0aGUgRlRQIHN0dWZmIGFmdGVyIHRoZSBQQVNWL1BPUlQgY29tbWFuZC4KKyAgICovCisgIEN1cmxfZG9fbW9yZV9mdW5jIGRvX21vcmU7CisKKyAgLyogVGhpcyBmdW5jdGlvbiAqTUFZKiBiZSBzZXQgdG8gYSBwcm90b2NvbC1kZXBlbmRlbnQgZnVuY3Rpb24gdGhhdCBpcyBydW4KKyAgICogYWZ0ZXIgdGhlIGNvbm5lY3QoKSBhbmQgZXZlcnl0aGluZyBpcyBkb25lLCBhcyBhIHN0ZXAgaW4gdGhlIGNvbm5lY3Rpb24uCisgICAqIFRoZSAnZG9uZScgcG9pbnRlciBwb2ludHMgdG8gYSBib29sIHRoYXQgc2hvdWxkIGJlIHNldCB0byBUUlVFIGlmIHRoZQorICAgKiBmdW5jdGlvbiBjb21wbGV0ZXMgYmVmb3JlIHJldHVybi4gSWYgaXQgZG9lc24ndCBjb21wbGV0ZSwgdGhlIGNhbGxlcgorICAgKiBzaG91bGQgY2FsbCB0aGUgY3VybF9jb25uZWN0aW5nKCkgZnVuY3Rpb24gdW50aWwgaXQgaXMuCisgICAqLworICBDVVJMY29kZSAoKmNvbm5lY3RfaXQpKHN0cnVjdCBjb25uZWN0ZGF0YSAqLCBib29sICpkb25lKTsKKworICAvKiBTZWUgYWJvdmUuIEN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIEZUUC4gKi8KKyAgQ1VSTGNvZGUgKCpjb25uZWN0aW5nKShzdHJ1Y3QgY29ubmVjdGRhdGEgKiwgYm9vbCAqZG9uZSk7CisgIENVUkxjb2RlICgqZG9pbmcpKHN0cnVjdCBjb25uZWN0ZGF0YSAqLCBib29sICpkb25lKTsKKworICAvKiBDYWxsZWQgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIGR1cmluZyB0aGUgUFJPVE9DT05ORUNUIHBoYXNlLCBhbmQgaXQKKyAgICAgc2hvdWxkIHRoZW4gcmV0dXJuIGEgcHJvcGVyIGZkIHNldCAqLworICBpbnQgKCpwcm90b19nZXRzb2NrKShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOworCisgIC8qIENhbGxlZCBmcm9tIHRoZSBtdWx0aSBpbnRlcmZhY2UgZHVyaW5nIHRoZSBET0lORyBwaGFzZSwgYW5kIGl0IHNob3VsZAorICAgICB0aGVuIHJldHVybiBhIHByb3BlciBmZCBzZXQgKi8KKyAgaW50ICgqZG9pbmdfZ2V0c29jaykoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKworICAvKiBDYWxsZWQgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIGR1cmluZyB0aGUgRE9fTU9SRSBwaGFzZSwgYW5kIGl0IHNob3VsZAorICAgICB0aGVuIHJldHVybiBhIHByb3BlciBmZCBzZXQgKi8KKyAgaW50ICgqZG9tb3JlX2dldHNvY2spKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKTsKKworICAvKiBDYWxsZWQgZnJvbSB0aGUgbXVsdGkgaW50ZXJmYWNlIGR1cmluZyB0aGUgRE9fRE9ORSwgUEVSRk9STSBhbmQKKyAgICAgV0FJVFBFUkZPUk0gcGhhc2VzLCBhbmQgaXQgc2hvdWxkIHRoZW4gcmV0dXJuIGEgcHJvcGVyIGZkIHNldC4gTm90IHNldHRpbmcKKyAgICAgdGhpcyB3aWxsIG1ha2UgbGliY3VybCB1c2UgdGhlIGdlbmVyaWMgZGVmYXVsdCBvbmUuICovCisgIGludCAoKnBlcmZvcm1fZ2V0c29jaykoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CisKKyAgLyogVGhpcyBmdW5jdGlvbiAqTUFZKiBiZSBzZXQgdG8gYSBwcm90b2NvbC1kZXBlbmRlbnQgZnVuY3Rpb24gdGhhdCBpcyBydW4KKyAgICogYnkgdGhlIGN1cmxfZGlzY29ubmVjdCgpLCBhcyBhIHN0ZXAgaW4gdGhlIGRpc2Nvbm5lY3Rpb24uICBJZiB0aGUgaGFuZGxlcgorICAgKiBpcyBjYWxsZWQgYmVjYXVzZSB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBjb25zaWRlcmVkIGRlYWQsIGRlYWRfY29ubmVjdGlvbgorICAgKiBpcyBzZXQgdG8gVFJVRS4KKyAgICovCisgIENVUkxjb2RlICgqZGlzY29ubmVjdCkoc3RydWN0IGNvbm5lY3RkYXRhICosIGJvb2wgZGVhZF9jb25uZWN0aW9uKTsKKworICAvKiBJZiB1c2VkLCB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZyb20gdHJhbnNmZXIuYzpyZWFkd3JpdGVfZGF0YSgpIHRvCisgICAgIGFsbG93IHRoZSBwcm90b2NvbCB0byBkbyBleHRyYSByZWFkcy93cml0ZXMgKi8KKyAgQ1VSTGNvZGUgKCpyZWFkd3JpdGUpKHN0cnVjdCBTZXNzaW9uSGFuZGxlICpkYXRhLCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90ICpucmVhZCwgYm9vbCAqcmVhZG1vcmUpOworCisgIGxvbmcgZGVmcG9ydDsgICAgICAgICAgIC8qIERlZmF1bHQgcG9ydC4gKi8KKyAgdW5zaWduZWQgaW50IHByb3RvY29sOyAgLyogU2VlIENVUkxQUk9UT18qICAqLworICB1bnNpZ25lZCBpbnQgZmxhZ3M7ICAgICAvKiBFeHRyYSBwYXJ0aWN1bGFyIGNoYXJhY3RlcmlzdGljcywgc2VlIFBST1RPUFRfKiAqLworfTsKKworI2RlZmluZSBQUk9UT1BUX05PTkUgMCAgICAgICAgICAgICAvKiBub3RoaW5nIGV4dHJhICovCisjZGVmaW5lIFBST1RPUFRfU1NMICgxPDwwKSAgICAgICAgIC8qIHVzZXMgU1NMICovCisjZGVmaW5lIFBST1RPUFRfRFVBTCAoMTw8MSkgICAgICAgIC8qIHRoaXMgcHJvdG9jb2wgdXNlcyB0d28gY29ubmVjdGlvbnMgKi8KKyNkZWZpbmUgUFJPVE9QVF9DTE9TRUFDVElPTiAoMTw8MikgLyogbmVlZCBhY3Rpb24gYmVmb3JlIHNvY2tldCBjbG9zZSAqLworLyogc29tZSBwcm90b2NvbHMgd2lsbCBoYXZlIHRvIGNhbGwgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb25zIHdpdGhvdXQgcmVnYXJkIHRvCisgICB3aGF0IGV4YWN0IHN0YXRlIHRoZSBzb2NrZXQgc2lnbmFscy4gSUUgZXZlbiBpZiB0aGUgc29ja2V0IHNheXMgInJlYWRhYmxlIiwKKyAgIHRoZSBzZW5kIGZ1bmN0aW9uIG1pZ2h0IG5lZWQgdG8gYmUgY2FsbGVkIHdoaWxlIHVwbG9hZGluZywgb3IgdmljZSB2ZXJzYS4KKyovCisjZGVmaW5lIFBST1RPUFRfRElSTE9DSyAoMTw8MykKKyNkZWZpbmUgUFJPVE9QVF9OT05FVFdPUksgKDE8PDQpICAgLyogcHJvdG9jb2wgZG9lc24ndCB1c2UgdGhlIG5ldHdvcmshICovCisjZGVmaW5lIFBST1RPUFRfTkVFRFNQV0QgKDE8PDUpICAgIC8qIG5lZWRzIGEgcGFzc3dvcmQsIGFuZCBpZiBub25lIGlzIHNldCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRzIGEgZGVmYXVsdCAqLworI2RlZmluZSBQUk9UT1BUX05PVVJMUVVFUlkgKDE8PDYpICAgLyogcHJvdG9jb2wgY2FuJ3QgaGFuZGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsIHF1ZXJ5IHN0cmluZ3MgKD9mb289YmFyKSAhICovCisKKworLyogcmV0dXJuIHRoZSBjb3VudCBvZiBieXRlcyBzZW50LCBvciAtMSBvbiBlcnJvciAqLwordHlwZWRlZiBzc2l6ZV90IChDdXJsX3NlbmQpKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgLyogY29ubmVjdGlvbiBkYXRhICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwgICAgICAgICAgICAvKiBzb2NrZXRpbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgICAgICAgICAgLyogZGF0YSB0byB3cml0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sICAgICAgICAgICAgICAgLyogbWF4IGFtb3VudCB0byB3cml0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxjb2RlICplcnIpOyAgICAgICAgICAgLyogZXJyb3IgdG8gcmV0dXJuICovCisKKy8qIHJldHVybiB0aGUgY291bnQgb2YgYnl0ZXMgcmVhZCwgb3IgLTEgb24gZXJyb3IgKi8KK3R5cGVkZWYgc3NpemVfdCAoQ3VybF9yZWN2KShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIC8qIGNvbm5lY3Rpb24gZGF0YSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsICAgICAgICAgICAgLyogc29ja2V0aW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsICAgICAgICAgICAgICAgIC8qIHN0b3JlIGRhdGEgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sICAgICAgICAgICAgICAgLyogbWF4IGFtb3VudCB0byByZWFkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTGNvZGUgKmVycik7ICAgICAgICAgICAvKiBlcnJvciB0byByZXR1cm4gKi8KKworLyoKKyAqIFRoZSBjb25uZWN0ZGF0YSBzdHJ1Y3QgY29udGFpbnMgYWxsIGZpZWxkcyBhbmQgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGJlCisgKiB1bmlxdWUgZm9yIGFuIGVudGlyZSBjb25uZWN0aW9uLgorICovCitzdHJ1Y3QgY29ubmVjdGRhdGEgeworICAvKiAnZGF0YScgaXMgdGhlIENVUlJFTlQgU2Vzc2lvbkhhbmRsZSB1c2luZyB0aGlzIGNvbm5lY3Rpb24gLS0gdGFrZSBncmVhdAorICAgICBjYXV0aW9uIHRoYXQgdGhpcyBtaWdodCB2ZXJ5IHdlbGwgdmFyeSBiZXR3ZWVuIGRpZmZlcmVudCB0aW1lcyB0aGlzCisgICAgIGNvbm5lY3Rpb24gaXMgdXNlZCEgKi8KKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE7CisKKyAgLyogY2h1bmsgaXMgZm9yIEhUVFAgY2h1bmtlZCBlbmNvZGluZywgYnV0IGlzIGluIHRoZSBnZW5lcmFsIGNvbm5lY3RkYXRhCisgICAgIHN0cnVjdCBvbmx5IGJlY2F1c2Ugd2UgY2FuIGRvIGp1c3QgYWJvdXQgYW55IHByb3RvY29sIHRocm91Z2ggYSBIVFRQIHByb3h5CisgICAgIGFuZCBhIEhUVFAgcHJveHkgbWF5IGluIGZhY3QgcmVzcG9uZCB1c2luZyBjaHVua2VkIGVuY29kaW5nICovCisgIHN0cnVjdCBDdXJsX2NodW5rZXIgY2h1bms7CisKKyAgY3VybF9jbG9zZXNvY2tldF9jYWxsYmFjayBmY2xvc2Vzb2NrZXQ7IC8qIGZ1bmN0aW9uIGNsb3NpbmcgdGhlIHNvY2tldChzKSAqLworICB2b2lkICpjbG9zZXNvY2tldF9jbGllbnQ7CisKKyAgYm9vbCBpbnVzZTsgLyogVGhpcyBpcyBhIG1hcmtlciBmb3IgdGhlIGNvbm5lY3Rpb24gY2FjaGUgbG9naWMuIElmIHRoaXMgaXMKKyAgICAgICAgICAgICAgICAgVFJVRSB0aGlzIGhhbmRsZSBpcyBiZWluZyB1c2VkIGJ5IGFuIGVhc3kgaGFuZGxlIGFuZCBjYW5ub3QKKyAgICAgICAgICAgICAgICAgYmUgdXNlZCBieSBhbnkgb3RoZXIgZWFzeSBoYW5kbGUgd2l0aG91dCBjYXJlZnVsCisgICAgICAgICAgICAgICAgIGNvbnNpZGVyYXRpb24gKD09IG9ubHkgZm9yIHBpcGVsaW5pbmcpLiAqLworCisgIC8qKioqIEZpZWxkcyBzZXQgd2hlbiBpbml0ZWQgYW5kIG5vdCBtb2RpZmllZCBhZ2FpbiAqLworICBsb25nIGNvbm5lY3RpbmRleDsgLyogd2hhdCBpbmRleCBpbiB0aGUgY29ubmVjdGlvbiBjYWNoZSBjb25uZWN0cyBpbmRleCB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHN0cnVjdCBoYXMgKi8KKworICAvKiAnZG5zX2VudHJ5JyBpcyB0aGUgcGFydGljdWxhciBob3N0IHdlIHVzZS4gVGhpcyBwb2ludHMgdG8gYW4gZW50cnkgaW4gdGhlCisgICAgIEROUyBjYWNoZSBhbmQgaXQgd2lsbCBub3QgZ2V0IHBydW5lZCB3aGlsZSBsb2NrZWQuIEl0IGdldHMgdW5sb2NrZWQgaW4KKyAgICAgQ3VybF9kb25lKCkuIFRoaXMgZW50cnkgd2lsbCBiZSBOVUxMIGlmIHRoZSBjb25uZWN0aW9uIGlzIHJlLXVzZWQgYXMgdGhlbgorICAgICB0aGVyZSBpcyBubyBuYW1lIHJlc29sdmUgZG9uZS4gKi8KKyAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkbnNfZW50cnk7CisKKyAgLyogJ2lwX2FkZHInIGlzIHRoZSBwYXJ0aWN1bGFyIElQIHdlIGNvbm5lY3RlZCB0by4gSXQgcG9pbnRzIHRvIGEgc3RydWN0CisgICAgIHdpdGhpbiB0aGUgRE5TIGNhY2hlLCBzbyB0aGlzIHBvaW50ZXIgaXMgb25seSB2YWxpZCBhcyBsb25nIGFzIHRoZSBETlMKKyAgICAgY2FjaGUgZW50cnkgcmVtYWlucyBsb2NrZWQuIEl0IGdldHMgdW5sb2NrZWQgaW4gQ3VybF9kb25lKCkgKi8KKyAgQ3VybF9hZGRyaW5mbyAqaXBfYWRkcjsKKworICAvKiAnaXBfYWRkcl9zdHInIGlzIHRoZSBpcF9hZGRyIGRhdGEgYXMgYSBodW1hbiByZWFkYWJsZSBzdHJpbmcuCisgICAgIEl0IHJlbWFpbnMgYXZhaWxhYmxlIGFzIGxvbmcgYXMgdGhlIGNvbm5lY3Rpb24gZG9lcywgd2hpY2ggaXMgbG9uZ2VyIHRoYW4KKyAgICAgdGhlIGlwX2FkZHIgaXRzZWxmLiAqLworICBjaGFyIGlwX2FkZHJfc3RyW01BWF9JUEFEUl9MRU5dOworCisgIHVuc2lnbmVkIGludCBzY29wZTsgICAgLyogYWRkcmVzcyBzY29wZSBmb3IgSVB2NiAqLworCisgIGludCBzb2NrdHlwZTsgIC8qIFNPQ0tfU1RSRUFNIG9yIFNPQ0tfREdSQU0gKi8KKworICBzdHJ1Y3QgaG9zdG5hbWUgaG9zdDsKKyAgc3RydWN0IGhvc3RuYW1lIHByb3h5OworCisgIGxvbmcgcG9ydDsgICAgICAgLyogd2hpY2ggcG9ydCB0byB1c2UgbG9jYWxseSAqLworICB1bnNpZ25lZCBzaG9ydCByZW1vdGVfcG9ydDsgLyogd2hhdCByZW1vdGUgcG9ydCB0byBjb25uZWN0IHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHRoZSBwcm94eSBwb3J0ISAqLworCisgIC8qICdwcmltYXJ5X2lwJyBhbmQgJ3ByaW1hcnlfcG9ydCcgZ2V0IGZpbGxlZCB3aXRoIHBlZXIncyBudW1lcmljYWwKKyAgICAgaXAgYWRkcmVzcyBhbmQgcG9ydCBudW1iZXIgd2hlbmV2ZXIgYW4gb3V0Z29pbmcgY29ubmVjdGlvbiBpcworICAgICAqYXR0ZW1wdGVkKiBmcm9tIHRoZSBwcmltYXJ5IHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLiBXaGVuIG1vcmUKKyAgICAgdGhhbiBvbmUgYWRkcmVzcyBpcyB0cmllZCBmb3IgYSBjb25uZWN0aW9uIHRoZXNlIHdpbGwgaG9sZCBkYXRhCisgICAgIGZvciB0aGUgbGFzdCBhdHRlbXB0LiBXaGVuIHRoZSBjb25uZWN0aW9uIGlzIGFjdHVhbGx5IGVzdGFibGlzaGVkCisgICAgIHRoZXNlIGFyZSB1cGRhdGVkIHdpdGggZGF0YSB3aGljaCBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQuICovCisKKyAgY2hhciBwcmltYXJ5X2lwW01BWF9JUEFEUl9MRU5dOworICBsb25nIHByaW1hcnlfcG9ydDsKKworICAvKiAnbG9jYWxfaXAnIGFuZCAnbG9jYWxfcG9ydCcgZ2V0IGZpbGxlZCB3aXRoIGxvY2FsJ3MgbnVtZXJpY2FsCisgICAgIGlwIGFkZHJlc3MgYW5kIHBvcnQgbnVtYmVyIHdoZW5ldmVyIGFuIG91dGdvaW5nIGNvbm5lY3Rpb24gaXMKKyAgICAgKiplc3RhYmxpc2hlZCoqIGZyb20gdGhlIHByaW1hcnkgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuICovCisKKyAgY2hhciBsb2NhbF9pcFtNQVhfSVBBRFJfTEVOXTsKKyAgbG9uZyBsb2NhbF9wb3J0OworCisgIGNoYXIgKnVzZXI7ICAgIC8qIHVzZXIgbmFtZSBzdHJpbmcsIGFsbG9jYXRlZCAqLworICBjaGFyICpwYXNzd2Q7ICAvKiBwYXNzd29yZCBzdHJpbmcsIGFsbG9jYXRlZCAqLworCisgIGNoYXIgKnByb3h5dXNlcjsgICAgLyogcHJveHkgdXNlciBuYW1lIHN0cmluZywgYWxsb2NhdGVkICovCisgIGNoYXIgKnByb3h5cGFzc3dkOyAgLyogcHJveHkgcGFzc3dvcmQgc3RyaW5nLCBhbGxvY2F0ZWQgKi8KKyAgY3VybF9wcm94eXR5cGUgcHJveHl0eXBlOyAvKiB3aGF0IGtpbmQgb2YgcHJveHkgdGhhdCBpcyBpbiB1c2UgKi8KKworICBpbnQgaHR0cHZlcnNpb247ICAgICAgICAvKiB0aGUgSFRUUCB2ZXJzaW9uKjEwIHJlcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgKi8KKyAgaW50IHJ0c3B2ZXJzaW9uOyAgICAgICAgLyogdGhlIFJUU1AgdmVyc2lvbioxMCByZXBvcnRlZCBieSB0aGUgc2VydmVyICovCisKKyAgc3RydWN0IHRpbWV2YWwgbm93OyAgICAgLyogImN1cnJlbnQiIHRpbWUgKi8KKyAgc3RydWN0IHRpbWV2YWwgY3JlYXRlZDsgLyogY3JlYXRpb24gdGltZSAqLworICBjdXJsX3NvY2tldF90IHNvY2tbMl07IC8qIHR3byBzb2NrZXRzLCB0aGUgc2Vjb25kIGlzIHVzZWQgZm9yIHRoZSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXIgd2hlbiBkb2luZyBGVFAgKi8KKyAgYm9vbCBzb2NrX2FjY2VwdGVkWzJdOyAvKiBUUlVFIGlmIHRoZSBzb2NrZXQgb24gdGhpcyBpbmRleCB3YXMgY3JlYXRlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0KCkgKi8KKyAgQ3VybF9yZWN2ICpyZWN2WzJdOworICBDdXJsX3NlbmQgKnNlbmRbMl07CisKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgc3NsWzJdOyAvKiB0aGlzIGlzIGZvciBzc2wtc3R1ZmYgKi8KKyAgc3RydWN0IHNzbF9jb25maWdfZGF0YSBzc2xfY29uZmlnOworCisgIHN0cnVjdCBDb25uZWN0Qml0cyBiaXRzOyAgICAvKiB2YXJpb3VzIHN0YXRlLWZsYWdzIGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KKworIC8qIGNvbm5lY3R0aW1lOiB3aGVuIGNvbm5lY3QoKSBpcyBjYWxsZWQgb24gdGhlIGN1cnJlbnQgSVAgYWRkcmVzcy4gVXNlZCB0bworICAgIGJlIGFibGUgdG8gdHJhY2sgd2hlbiB0byBtb3ZlIG9uIHRvIHRyeSBuZXh0IElQIC0gYnV0IG9ubHkgd2hlbiB0aGUgbXVsdGkKKyAgICBpbnRlcmZhY2UgaXMgdXNlZC4gKi8KKyAgc3RydWN0IHRpbWV2YWwgY29ubmVjdHRpbWU7CisgIC8qIFRoZSB0d28gZmllbGRzIGJlbG93IGdldCBzZXQgaW4gQ3VybF9jb25uZWN0aG9zdCAqLworICBpbnQgbnVtX2FkZHI7IC8qIG51bWJlciBvZiBhZGRyZXNzZXMgdG8gdHJ5IHRvIGNvbm5lY3QgdG8gKi8KKyAgbG9uZyB0aW1lb3V0bXNfcGVyX2FkZHI7IC8qIGhvdyBsb25nIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHNwZW5kIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlpbmcgdG8gY29ubmVjdCB0byBlYWNoIElQIGFkZHJlc3MgKi8KKworICBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyICpoYW5kbGVyOyAvKiBDb25uZWN0aW9uJ3MgcHJvdG9jb2wgaGFuZGxlciAqLworICBjb25zdCBzdHJ1Y3QgQ3VybF9oYW5kbGVyICpnaXZlbjsgICAvKiBUaGUgcHJvdG9jb2wgZmlyc3QgZ2l2ZW4gKi8KKworICBsb25nIGlwX3ZlcnNpb247IC8qIGNvcGllZCBmcm9tIHRoZSBTZXNzaW9uSGFuZGxlIGF0IGNyZWF0aW9uIHRpbWUgKi8KKworICAvKioqKiBjdXJsX2dldCgpIHBoYXNlIGZpZWxkcyAqLworCisgIGN1cmxfc29ja2V0X3Qgc29ja2ZkOyAgIC8qIHNvY2tldCB0byByZWFkIGZyb20gb3IgQ1VSTF9TT0NLRVRfQkFEICovCisgIGN1cmxfc29ja2V0X3Qgd3JpdGVzb2NrZmQ7IC8qIHNvY2tldCB0byB3cml0ZSB0bywgaXQgbWF5IHZlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VsbCBiZSB0aGUgc2FtZSB3ZSByZWFkIGZyb20uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU09DS0VUX0JBRCBkaXNhYmxlcyAqLworCisgIC8qKiBEeW5hbWljbHkgYWxsb2NhdGVkIHN0cmluZ3MsIE1VU1QgYmUgZnJlZWQgYmVmb3JlIHRoaXMgKiovCisgIC8qKiBzdHJ1Y3QgaXMga2lsbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiovCisgIHN0cnVjdCBkeW5hbWljYWxseV9hbGxvY2F0ZWRfZGF0YSB7CisgICAgY2hhciAqcHJveHl1c2VycHdkOworICAgIGNoYXIgKnVhZ2VudDsKKyAgICBjaGFyICphY2NlcHRfZW5jb2Rpbmc7CisgICAgY2hhciAqdXNlcnB3ZDsKKyAgICBjaGFyICpyYW5nZWxpbmU7CisgICAgY2hhciAqcmVmOworICAgIGNoYXIgKmhvc3Q7CisgICAgY2hhciAqY29va2llaG9zdDsKKyAgICBjaGFyICpydHNwX3RyYW5zcG9ydDsKKyAgICBjaGFyICp0ZTsgLyogVEU6IHJlcXVlc3QgaGVhZGVyICovCisgIH0gYWxsb2NwdHI7CisKKyAgaW50IHNlY19jb21wbGV0ZTsgLyogaWYga2VyYmVyb3MgaXMgZW5hYmxlZCBmb3IgdGhpcyBjb25uZWN0aW9uICovCisjaWYgZGVmaW5lZChIQVZFX0tSQjQpIHx8IGRlZmluZWQoSEFWRV9HU1NBUEkpCisgIGVudW0gcHJvdGVjdGlvbl9sZXZlbCBjb21tYW5kX3Byb3Q7CisgIGVudW0gcHJvdGVjdGlvbl9sZXZlbCBkYXRhX3Byb3Q7CisgIGVudW0gcHJvdGVjdGlvbl9sZXZlbCByZXF1ZXN0X2RhdGFfcHJvdDsKKyAgc2l6ZV90IGJ1ZmZlcl9zaXplOworICBzdHJ1Y3Qga3JiNGJ1ZmZlciBpbl9idWZmZXI7CisgIHZvaWQgKmFwcF9kYXRhOworICBjb25zdCBzdHJ1Y3QgQ3VybF9zZWNfY2xpZW50X21lY2ggKm1lY2g7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiBsb2NhbF9hZGRyOworI2VuZGlmCisKKyAgLyogdGhlIHR3byBmb2xsb3dpbmcgKl9pbnVzZSBmaWVsZHMgYXJlIG9ubHkgZmxhZ3MsIG5vdCBjb3VudGVycyBpbiBhbnkgd2F5LgorICAgICBJZiBUUlVFIGl0IG1lYW5zIHRoZSBjaGFubmVsIGlzIGluIHVzZSwgYW5kIGlmIEZBTFNFIGl0IG1lYW5zIHRoZSBjaGFubmVsCisgICAgIGlzIHVwIGZvciBncmFicyBieSBvbmUuICovCisKKyAgYm9vbCByZWFkY2hhbm5lbF9pbnVzZTsgIC8qIHdoZXRoZXIgdGhlIHJlYWQgY2hhbm5lbCBpcyBpbiB1c2UgYnkgYW4gZWFzeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlICovCisgIGJvb2wgd3JpdGVjaGFubmVsX2ludXNlOyAvKiB3aGV0aGVyIHRoZSB3cml0ZSBjaGFubmVsIGlzIGluIHVzZSBieSBhbiBlYXN5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgKi8KKyAgYm9vbCBzZXJ2ZXJfc3VwcG9ydHNfcGlwZWxpbmluZzsgLyogVFJVRSBpZiBzZXJ2ZXIgc3VwcG9ydHMgcGlwZWxpbmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGFmdGVyIGZpcnN0IHJlc3BvbnNlICovCisKKyAgc3RydWN0IGN1cmxfbGxpc3QgKnNlbmRfcGlwZTsgLyogTGlzdCBvZiBoYW5kbGVzIHdhaXRpbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCBvbiB0aGlzIHBpcGVsaW5lICovCisgIHN0cnVjdCBjdXJsX2xsaXN0ICpyZWN2X3BpcGU7IC8qIExpc3Qgb2YgaGFuZGxlcyB3YWl0aW5nIHRvIHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXIgcmVzcG9uc2VzIG9uIHRoaXMgcGlwZWxpbmUgKi8KKyAgc3RydWN0IGN1cmxfbGxpc3QgKnBlbmRfcGlwZTsgLyogTGlzdCBvZiBwZW5kaW5nIGhhbmRsZXMgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBwaXBlbGluZSAqLworICBzdHJ1Y3QgY3VybF9sbGlzdCAqZG9uZV9waXBlOyAvKiBIYW5kbGVzIHRoYXQgYXJlIGZpbmlzaGVkLCBidXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGwgcmVmZXJlbmNlIHRoaXMgY29ubmVjdGRhdGEgKi8KKyNkZWZpbmUgTUFYX1BJUEVMSU5FX0xFTkdUSCA1CisKKyAgY2hhciogbWFzdGVyX2J1ZmZlcjsgLyogVGhlIG1hc3RlciBidWZmZXIgYWxsb2NhdGVkIG9uLWRlbWFuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgcGlwZWxpbmluZy4gKi8KKyAgc2l6ZV90IHJlYWRfcG9zOyAvKiBDdXJyZW50IHJlYWQgcG9zaXRpb24gaW4gdGhlIG1hc3RlciBidWZmZXIgKi8KKyAgc2l6ZV90IGJ1Zl9sZW47IC8qIExlbmd0aCBvZiB0aGUgYnVmZmVyPz8gKi8KKworCisgIGN1cmxfc2Vla19jYWxsYmFjayBzZWVrX2Z1bmM7IC8qIGZ1bmN0aW9uIHRoYXQgc2Vla3MgdGhlIGlucHV0ICovCisgIHZvaWQgKnNlZWtfY2xpZW50OyAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgc2VlaygpIGFib3ZlICovCisKKyAgLyoqKioqKioqKioqKioqKiBSZXF1ZXN0IC0gc3BlY2lmaWMgaXRlbXMgKioqKioqKioqKioqLworCisgIC8qIHByZXZpb3VzbHkgdGhpcyB3YXMgaW4gdGhlIHVybGRhdGEgc3RydWN0ICovCisgIGN1cmxfcmVhZF9jYWxsYmFjayBmcmVhZF9mdW5jOyAvKiBmdW5jdGlvbiB0aGF0IHJlYWRzIHRoZSBpbnB1dCAqLworICB2b2lkICpmcmVhZF9pbjsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnJlYWQoKSBhYm92ZSAqLworCisgIHN0cnVjdCBudGxtZGF0YSBudGxtOyAgICAgLyogTlRMTSBkaWZmZXJzIGZyb20gb3RoZXIgYXV0aGVudGljYXRpb24gc2NoZW1lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgYXV0aGVudGljYXRlcyBjb25uZWN0aW9ucywgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlIHJlcXVlc3RzISAqLworICBzdHJ1Y3QgbnRsbWRhdGEgcHJveHludGxtOyAvKiBOVExNIGRhdGEgZm9yIHByb3h5ICovCisKKyNpZiBkZWZpbmVkKFVTRV9OVExNKSAmJiBkZWZpbmVkKE5UTE1fV0JfRU5BQkxFRCkKKyAgLyogdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFNhbWJhJ3Mgd2luYmluZCBkYWVtb24gaGVscGVyIG50bG1fYXV0aCAqLworICBjdXJsX3NvY2tldF90IG50bG1fYXV0aF9obHByX3NvY2tldDsKKyAgcGlkX3QgbnRsbV9hdXRoX2hscHJfcGlkOworICBjaGFyKiBjaGFsbGVuZ2VfaGVhZGVyOworICBjaGFyKiByZXNwb25zZV9oZWFkZXI7CisjZW5kaWYKKworICBjaGFyIHN5c2Vycl9idWYgWzI1Nl07IC8qIGJ1ZmZlciBmb3IgQ3VybF9zdHJlcnJvcigpICovCisKKyNpZmRlZiBDVVJMUkVTX0FTWU5DSAorICAvKiBkYXRhIHVzZWQgZm9yIHRoZSBhc3luY2ggbmFtZSByZXNvbHZlIGNhbGxiYWNrICovCisgIHN0cnVjdCBDdXJsX2FzeW5jIGFzeW5jOworI2VuZGlmCisKKyAgLyogVGhlc2UgdGhyZWUgYXJlIHVzZWQgZm9yIGNodW5rZWQtZW5jb2RpbmcgdHJhaWxlciBzdXBwb3J0ICovCisgIGNoYXIgKnRyYWlsZXI7IC8qIGFsbG9jYXRlZCBidWZmZXIgdG8gc3RvcmUgdHJhaWxlciBpbiAqLworICBpbnQgdHJsTWF4OyAgICAvKiBhbGxvY2F0ZWQgYnVmZmVyIHNpemUgKi8KKyAgaW50IHRybFBvczsgICAgLyogaW5kZXggb2Ygd2hlcmUgdG8gc3RvcmUgZGF0YSAqLworCisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgZnRwX2Nvbm4gZnRwYzsKKyAgICBzdHJ1Y3Qgc3NoX2Nvbm4gc3NoYzsKKyAgICBzdHJ1Y3QgdGZ0cF9zdGF0ZV9kYXRhICp0ZnRwYzsKKyAgICBzdHJ1Y3QgaW1hcF9jb25uIGltYXBjOworICAgIHN0cnVjdCBwb3AzX2Nvbm4gcG9wM2M7CisgICAgc3RydWN0IHNtdHBfY29ubiBzbXRwYzsKKyAgICBzdHJ1Y3QgcnRzcF9jb25uIHJ0c3BjOworICAgIHZvaWQgKmdlbmVyaWM7CisgIH0gcHJvdG87CisKKyAgaW50IGNzZWxlY3RfYml0czsgLyogYml0bWFzayBvZiBzb2NrZXQgZXZlbnRzICovCisgIGludCB3YWl0Zm9yOyAgICAgIC8qIGN1cnJlbnQgUkVBRC9XUklURSBiaXRzIHRvIHdhaXQgZm9yICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCisgIGludCBzb2NrczVfZ3NzYXBpX2VuY3R5cGU7CisjZW5kaWYKKworICBsb25nIHZlcmlmeXBlZXI7CisgIGxvbmcgdmVyaWZ5aG9zdDsKKworICAvKiBXaGVuIHRoaXMgY29ubmVjdGlvbiBpcyBjcmVhdGVkLCBzdG9yZSB0aGUgY29uZGl0aW9ucyBmb3IgdGhlIGxvY2FsIGVuZAorICAgICBiaW5kLiBUaGlzIGlzIHN0b3JlZCBiZWZvcmUgdGhlIGFjdHVhbCBiaW5kIGFuZCBiZWZvcmUgYW55IGNvbm5lY3Rpb24gaXMKKyAgICAgbWFkZSBhbmQgd2lsbCBzZXJ2ZSB0aGUgcHVycG9zZSBvZiBiZWluZyB1c2VkIGZvciBjb21wYXJpc29uIHJlYXNvbnMgc28KKyAgICAgdGhhdCBzdWJzZXF1ZW50IGJvdW5kLXJlcXVlc3RlZCBjb25uZWN0aW9ucyBhcmVuJ3QgYWNjaWRlbnRhbGx5IHJlLXVzaW5nCisgICAgIHdyb25nIGNvbm5lY3Rpb25zLiAqLworICBjaGFyICpsb2NhbGRldjsKKyAgdW5zaWduZWQgc2hvcnQgbG9jYWxwb3J0OworICBpbnQgbG9jYWxwb3J0cmFuZ2U7CisKKyAgLyogdHVubmVsIGFzIGluIHR1bm5lbCB0aHJvdWdoIGEgSFRUUCBwcm94eSB3aXRoIENPTk5FQ1QgKi8KKyAgZW51bSB7CisgICAgVFVOTkVMX0lOSVQsICAgIC8qIGluaXQvZGVmYXVsdC9ubyB0dW5uZWwgc3RhdGUgKi8KKyAgICBUVU5ORUxfQ09OTkVDVCwgLyogQ09OTkVDVCBoYXMgYmVlbiBzZW50IG9mZiAqLworICAgIFRVTk5FTF9DT01QTEVURSAvKiBDT05ORUNUIHJlc3BvbnNlIHJlY2VpdmVkIGNvbXBsZXRlbHkgKi8KKyAgfSB0dW5uZWxfc3RhdGVbMl07IC8qIHR3byBzZXBhcmF0ZSBvbmVzIHRvIGFsbG93IEZUUCAqLworfTsKKworLyogVGhlIGVuZCBvZiBjb25uZWN0ZGF0YS4gKi8KKworLyoKKyAqIFN0cnVjdCB0byBrZWVwIHN0YXRpc3RpY2FsIGFuZCBpbmZvcm1hdGlvbmFsIGRhdGEuCisgKi8KK3N0cnVjdCBQdXJlSW5mbyB7CisgIGludCBodHRwY29kZTsgIC8qIFJlY2VudCBIVFRQLCBGVFAsIG9yIFJUU1AgcmVzcG9uc2UgY29kZSAqLworICBpbnQgaHR0cHByb3h5Y29kZTsgLyogcmVzcG9uc2UgY29kZSBmcm9tIHByb3h5IHdoZW4gcmVjZWl2ZWQgc2VwYXJhdGUgKi8KKyAgaW50IGh0dHB2ZXJzaW9uOyAvKiB0aGUgaHR0cCB2ZXJzaW9uIG51bWJlciBYLlkgPSBYKjEwK1kgKi8KKyAgbG9uZyBmaWxldGltZTsgLyogSWYgcmVxdWVzdGVkLCB0aGlzIGlzIG1pZ2h0IGdldCBzZXQuIFNldCB0byAtMSBpZiB0aGUgdGltZQorICAgICAgICAgICAgICAgICAgICB3YXMgdW5yZXRyaWV2YWJsZS4gV2UgY2Fubm90IGhhdmUgdGhpcyBvZiB0eXBlIHRpbWVfdCwKKyAgICAgICAgICAgICAgICAgICAgc2luY2UgdGltZV90IGlzIHVuc2lnbmVkIG9uIHNldmVyYWwgcGxhdGZvcm1zIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgT3BlblZNUy4gKi8KKyAgYm9vbCB0aW1lY29uZDsgIC8qIHNldCB0byBUUlVFIGlmIHRoZSB0aW1lIGNvbmRpdGlvbiBkaWRuJ3QgbWF0Y2gsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICB0aHVzIG1hZGUgdGhlIGRvY3VtZW50IE5PVCBnZXQgZmV0Y2hlZCAqLworICBsb25nIGhlYWRlcl9zaXplOyAgLyogc2l6ZSBvZiByZWFkIGhlYWRlcihzKSBpbiBieXRlcyAqLworICBsb25nIHJlcXVlc3Rfc2l6ZTsgLyogdGhlIGFtb3VudCBvZiBieXRlcyBzZW50IGluIHRoZSByZXF1ZXN0KHMpICovCisgIGxvbmcgcHJveHlhdXRoYXZhaWw7IC8qIHdoYXQgcHJveHkgYXV0aCB0eXBlcyB3ZXJlIGFubm91bmNlZCAqLworICBsb25nIGh0dHBhdXRoYXZhaWw7ICAvKiB3aGF0IGhvc3QgYXV0aCB0eXBlcyB3ZXJlIGFubm91bmNlZCAqLworICBsb25nIG51bWNvbm5lY3RzOyAvKiBob3cgbWFueSBuZXcgY29ubmVjdGlvbiBkaWQgbGliY3VybCBjcmVhdGVkICovCisgIGNoYXIgKmNvbnRlbnR0eXBlOyAvKiB0aGUgY29udGVudCB0eXBlIG9mIHRoZSBvYmplY3QgKi8KKyAgY2hhciAqd291bGRyZWRpcmVjdDsgLyogVVJMIHRoaXMgd291bGQndmUgYmVlbiByZWRpcmVjdGVkIHRvIGlmIGFza2VkIHRvICovCisKKyAgLyogUHVyZUluZm8gbWVtYmVycyAnY29ubl9wcmltYXJ5X2lwJywgJ2Nvbm5fcHJpbWFyeV9wb3J0JywgJ2Nvbm5fbG9jYWxfaXAnCisgICAgIGFuZCwgJ2Nvbm5fbG9jYWxfcG9ydCcgYXJlIGNvcGllZCBvdmVyIGZyb20gdGhlIGNvbm5lY3RkYXRhIHN0cnVjdCBpbgorICAgICBvcmRlciB0byBhbGxvdyBjdXJsX2Vhc3lfZ2V0aW5mbygpIHRvIHJldHVybiB0aGlzIGluZm9ybWF0aW9uIGV2ZW4gd2hlbgorICAgICB0aGUgc2Vzc2lvbiBoYW5kbGUgaXMgbm8gbG9uZ2VyIGFzc29jaWF0ZWQgd2l0aCBhIGNvbm5lY3Rpb24sIGFuZCBhbHNvCisgICAgIGFsbG93IGN1cmxfZWFzeV9yZXNldCgpIHRvIGNsZWFyIHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgc2Vzc2lvbiBoYW5kbGUKKyAgICAgd2l0aG91dCBkaXN0dXJiaW5nIGluZm9ybWF0aW9uIHdoaWNoIGlzIHN0aWxsIGFsaXZlLCBhbmQgdGhhdCBtaWdodCBiZQorICAgICByZXVzZWQsIGluIHRoZSBjb25uZWN0aW9uIGNhY2hlLiAqLworCisgIGNoYXIgY29ubl9wcmltYXJ5X2lwW01BWF9JUEFEUl9MRU5dOworICBsb25nIGNvbm5fcHJpbWFyeV9wb3J0OworCisgIGNoYXIgY29ubl9sb2NhbF9pcFtNQVhfSVBBRFJfTEVOXTsKKyAgbG9uZyBjb25uX2xvY2FsX3BvcnQ7CisKKyAgc3RydWN0IGN1cmxfY2VydGluZm8gY2VydHM7IC8qIGluZm8gYWJvdXQgdGhlIGNlcnRzLCBvbmx5IHBvcHVsYXRlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlblNTTCBidWlsZHMuIEFza2VkIGZvciB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0NFUlRJTkZPIC8gQ1VSTElORk9fQ0VSVElORk8gKi8KK307CisKKworc3RydWN0IFByb2dyZXNzIHsKKyAgbG9uZyBsYXN0c2hvdzsgLyogdGltZSgpIG9mIHRoZSBsYXN0IGRpc3BsYXllZCBwcm9ncmVzcyBtZXRlciBvciBOVUxMIHRvCisgICAgICAgICAgICAgICAgICAgIGZvcmNlIHJlZHJhdyBhdCBuZXh0IGNhbGwgKi8KKyAgY3VybF9vZmZfdCBzaXplX2RsOyAvKiB0b3RhbCBleHBlY3RlZCBzaXplICovCisgIGN1cmxfb2ZmX3Qgc2l6ZV91bDsgLyogdG90YWwgZXhwZWN0ZWQgc2l6ZSAqLworICBjdXJsX29mZl90IGRvd25sb2FkZWQ7IC8qIHRyYW5zZmVycmVkIHNvIGZhciAqLworICBjdXJsX29mZl90IHVwbG9hZGVkOyAvKiB0cmFuc2ZlcnJlZCBzbyBmYXIgKi8KKworICBjdXJsX29mZl90IGN1cnJlbnRfc3BlZWQ7IC8qIHVzZXMgdGhlIGN1cnJlbnRseSBmYXN0ZXN0IHRyYW5zZmVyICovCisKKyAgYm9vbCBjYWxsYmFjazsgIC8qIHNldCB3aGVuIHByb2dyZXNzIGNhbGxiYWNrIGlzIHVzZWQgKi8KKyAgaW50IHdpZHRoOyAvKiBzY3JlZW4gd2lkdGggYXQgZG93bmxvYWQgc3RhcnQgKi8KKyAgaW50IGZsYWdzOyAvKiBzZWUgcHJvZ3Jlc3MuaCAqLworCisgIGRvdWJsZSB0aW1lc3BlbnQ7CisKKyAgY3VybF9vZmZfdCBkbHNwZWVkOworICBjdXJsX29mZl90IHVsc3BlZWQ7CisKKyAgZG91YmxlIHRfbnNsb29rdXA7CisgIGRvdWJsZSB0X2Nvbm5lY3Q7CisgIGRvdWJsZSB0X2FwcGNvbm5lY3Q7CisgIGRvdWJsZSB0X3ByZXRyYW5zZmVyOworICBkb3VibGUgdF9zdGFydHRyYW5zZmVyOworICBkb3VibGUgdF9yZWRpcmVjdDsKKworICBzdHJ1Y3QgdGltZXZhbCBzdGFydDsKKyAgc3RydWN0IHRpbWV2YWwgdF9zdGFydHNpbmdsZTsKKyAgc3RydWN0IHRpbWV2YWwgdF9hY2NlcHRkYXRhOworI2RlZmluZSBDVVJSX1RJTUUgKDUrMSkgLyogNiBlbnRyaWVzIGZvciA1IHNlY29uZHMgKi8KKworICBjdXJsX29mZl90IHNwZWVkZXJbIENVUlJfVElNRSBdOworICBzdHJ1Y3QgdGltZXZhbCBzcGVlZGVyX3RpbWVbIENVUlJfVElNRSBdOworICBpbnQgc3BlZWRlcl9jOworfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgSFRUUFJFUV9OT05FLCAvKiBmaXJzdCBpbiBsaXN0ICovCisgIEhUVFBSRVFfR0VULAorICBIVFRQUkVRX1BPU1QsCisgIEhUVFBSRVFfUE9TVF9GT1JNLCAvKiB3ZSBtYWtlIGEgZGlmZmVyZW5jZSBpbnRlcm5hbGx5ICovCisgIEhUVFBSRVFfUFVULAorICBIVFRQUkVRX0hFQUQsCisgIEhUVFBSRVFfQ1VTVE9NLAorICBIVFRQUkVRX0xBU1QgLyogbGFzdCBpbiBsaXN0ICovCit9IEN1cmxfSHR0cFJlcTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBSVFNQUkVRX05PTkUsIC8qIGZpcnN0IGluIGxpc3QgKi8KKyAgICBSVFNQUkVRX09QVElPTlMsCisgICAgUlRTUFJFUV9ERVNDUklCRSwKKyAgICBSVFNQUkVRX0FOTk9VTkNFLAorICAgIFJUU1BSRVFfU0VUVVAsCisgICAgUlRTUFJFUV9QTEFZLAorICAgIFJUU1BSRVFfUEFVU0UsCisgICAgUlRTUFJFUV9URUFSRE9XTiwKKyAgICBSVFNQUkVRX0dFVF9QQVJBTUVURVIsCisgICAgUlRTUFJFUV9TRVRfUEFSQU1FVEVSLAorICAgIFJUU1BSRVFfUkVDT1JELAorICAgIFJUU1BSRVFfUkVDRUlWRSwKKyAgICBSVFNQUkVRX0xBU1QgLyogbGFzdCBpbiBsaXN0ICovCit9IEN1cmxfUnRzcFJlcTsKKworLyoKKyAqIFZhbHVlcyB0aGF0IGFyZSBnZW5lcmF0ZWQsIHRlbXBvcmFyeSBvciBjYWxjdWxhdGVkIGludGVybmFsbHkgZm9yIGEKKyAqICJzZXNzaW9uIGhhbmRsZSIgbXVzdCBiZSBkZWZpbmVkIHdpdGhpbiB0aGUgJ3N0cnVjdCBVcmxTdGF0ZScuICBUaGlzIHN0cnVjdAorICogd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgU2Vzc2lvbkhhbmRsZSBzdHJ1Y3QuIFdoZW4gdGhlICdTZXNzaW9uSGFuZGxlJworICogc3RydWN0IGlzIGNsb25lZCwgdGhpcyBkYXRhIE1VU1QgTk9UIGJlIGNvcGllZC4KKyAqCisgKiBSZW1lbWJlciB0aGF0IGFueSAic3RhdGUiIGluZm9ybWF0aW9uIGdvZXMgZ2xvYmFsbHkgZm9yIHRoZSBjdXJsIGhhbmRsZS4KKyAqIFNlc3Npb24tZGF0YSBNVVNUIGJlIHB1dCBpbiB0aGUgY29ubmVjdGRhdGEgc3RydWN0IGFuZCBoZXJlLiAgKi8KKyNkZWZpbmUgTUFYX0NVUkxfVVNFUl9MRU5HVEggMjU2CisjZGVmaW5lIE1BWF9DVVJMX1BBU1NXT1JEX0xFTkdUSCAyNTYKKyNkZWZpbmUgTUFYX0NVUkxfVVNFUl9MRU5HVEhfVFhUICIyNTUiCisjZGVmaW5lIE1BWF9DVVJMX1BBU1NXT1JEX0xFTkdUSF9UWFQgIjI1NSIKKworc3RydWN0IGF1dGggeworICBsb25nIHdhbnQ7ICAvKiBCaXRtYXNrIHNldCB0byB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kcyB3YW50ZWQgYnkgdGhlIGFwcAorICAgICAgICAgICAgICAgICAod2l0aCBDVVJMT1BUX0hUVFBBVVRIIG9yIENVUkxPUFRfUFJPWFlBVVRIKS4gKi8KKyAgbG9uZyBwaWNrZWQ7CisgIGxvbmcgYXZhaWw7IC8qIGJpdG1hc2sgZm9yIHdoYXQgdGhlIHNlcnZlciByZXBvcnRzIHRvIHN1cHBvcnQgZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAgcmVzb3VyY2UgKi8KKyAgYm9vbCBkb25lOyAgLyogVFJVRSB3aGVuIHRoZSBhdXRoIHBoYXNlIGlzIGRvbmUgYW5kIHJlYWR5IHRvIGRvIHRoZSAqYWN0dWFsKgorICAgICAgICAgICAgICAgICByZXF1ZXN0ICovCisgIGJvb2wgbXVsdGk7IC8qIFRSVUUgaWYgdGhpcyBpcyBub3QgeWV0IGF1dGhlbnRpY2F0ZWQgYnV0IHdpdGhpbiB0aGUgYXV0aAorICAgICAgICAgICAgICAgICBtdWx0aXBhc3MgbmVnb3RpYXRpb24gKi8KKyAgYm9vbCBpZXN0eWxlOyAvKiBUUlVFIGlmIGRpZ2VzdCBzaG91bGQgYmUgZG9uZSBJRS1zdHlsZSBvciBGQUxTRSBpZiBpdCBzaG91bGQKKyAgICAgICAgICAgICAgICAgICBiZSBSRkMgY29tcGxpYW50ICovCit9OworCitzdHJ1Y3QgY29ubmNhY2hlIHsKKyAgLyogJ2Nvbm5lY3RzJyB3aWxsIGJlIGFuIGFsbG9jYXRlZCBhcnJheSB3aXRoIHBvaW50ZXJzLiBJZiB0aGUgcG9pbnRlciBpcworICAgICBzZXQsIGl0IGhvbGRzIGFuIGFsbG9jYXRlZCBjb25uZWN0aW9uLiAqLworICBzdHJ1Y3QgY29ubmVjdGRhdGEgKipjb25uZWN0czsKKyAgbG9uZyBudW07ICAgICAgICAgICAvKiBudW1iZXIgb2YgZW50cmllcyBvZiB0aGUgJ2Nvbm5lY3RzJyBhcnJheSAqLworICBlbnVtIHsKKyAgICBDT05OQ0FDSEVfUFJJVkFURSwgLyogdXNlZCBmb3IgYW4gZWFzeSBoYW5kbGUgYWxvbmUgKi8KKyAgICBDT05OQ0FDSEVfTVVMVEkgICAgLyogc2hhcmVkIHdpdGhpbiBhIG11bHRpIGhhbmRsZSAqLworICB9IHR5cGU7Cit9OworCisKK3N0cnVjdCBVcmxTdGF0ZSB7CisgIGVudW0geworICAgIEN1cmxfaWZfbm9uZSwKKyAgICBDdXJsX2lmX2Vhc3ksCisgICAgQ3VybF9pZl9tdWx0aQorICB9IHVzZWRfaW50ZXJmYWNlOworCisgIHN0cnVjdCBjb25uY2FjaGUgKmNvbm5jOyAvKiBwb2ludHMgdG8gdGhlIGNvbm5lY3Rpb24gY2FjaGUgdGhpcyBoYW5kbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgKi8KKworICAvKiBidWZmZXJzIHRvIHN0b3JlIGF1dGhlbnRpY2F0aW9uIGRhdGEgaW4sIGFzIHBhcnNlZCBmcm9tIGlucHV0IG9wdGlvbnMgKi8KKyAgc3RydWN0IHRpbWV2YWwga2VlcHNfc3BlZWQ7IC8qIGZvciB0aGUgcHJvZ3Jlc3MgbWV0ZXIgcmVhbGx5ICovCisKKyAgbG9uZyBsYXN0Y29ubmVjdDsgIC8qIGluZGV4IG9mIG1vc3QgcmVjZW50IGNvbm5lY3Qgb3IgLTEgaWYgdW5kZWZpbmVkICovCisKKyAgY2hhciAqaGVhZGVyYnVmZjsgLyogYWxsb2NhdGVkIGJ1ZmZlciB0byBzdG9yZSBoZWFkZXJzIGluICovCisgIHNpemVfdCBoZWFkZXJzaXplOyAgIC8qIHNpemUgb2YgdGhlIGFsbG9jYXRpb24gKi8KKworICBjaGFyIGJ1ZmZlcltCVUZTSVpFKzFdOyAvKiBkb3dubG9hZCBidWZmZXIgKi8KKyAgY2hhciB1cGxvYWRidWZmZXJbQlVGU0laRSsxXTsgLyogdXBsb2FkIGJ1ZmZlciAqLworICBjdXJsX29mZl90IGN1cnJlbnRfc3BlZWQ7ICAvKiB0aGUgUHJvZ3Jlc3NTaG93KCkgZnVuY2lvbiBzZXRzIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIC8gc2Vjb25kICovCisgIGJvb2wgdGhpc19pc19hX2ZvbGxvdzsgLyogdGhpcyBpcyBhIGZvbGxvd2VkIExvY2F0aW9uOiByZXF1ZXN0ICovCisKKyAgY2hhciAqZmlyc3RfaG9zdDsgLyogaWYgc2V0LCB0aGlzIHNob3VsZCBiZSB0aGUgaG9zdCBuYW1lIHRoYXQgd2Ugd2lsbAorICAgICAgICAgICAgICAgICAgICAgICBzZW50IGF1dGhvcml6YXRpb24gdG8sIG5vIGVsc2UuIFVzZWQgdG8gbWFrZSBMb2NhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIG5vdCBrZWVwIHNlbmRpbmcgdXNlcitwYXNzd29yZC4uLiBUaGlzIGlzCisgICAgICAgICAgICAgICAgICAgICAgIHN0cmR1cCgpIGRhdGEuCisgICAgICAgICAgICAgICAgICAgICovCisgIHN0cnVjdCBjdXJsX3NzbF9zZXNzaW9uICpzZXNzaW9uOyAvKiBhcnJheSBvZiAnbWF4X3NzbF9zZXNzaW9ucycgc2l6ZSAqLworICBsb25nIHNlc3Npb25hZ2U7ICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHRoZSBtb3N0IHJlY2VudCBzZXNzaW9uICovCisgIGNoYXIgKnRlbXB3cml0ZTsgICAgICAvKiBhbGxvY2F0ZWQgYnVmZmVyIHRvIGtlZXAgZGF0YSBpbiB3aGVuIGEgd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrIHJldHVybnMgdG8gbWFrZSB0aGUgY29ubmVjdGlvbiBwYXVzZWQgKi8KKyAgc2l6ZV90IHRlbXB3cml0ZXNpemU7IC8qIHNpemUgb2YgdGhlICd0ZW1wd3JpdGUnIGFsbG9jYXRlZCBidWZmZXIgKi8KKyAgaW50IHRlbXB3cml0ZXR5cGU7ICAgIC8qIHR5cGUgb2YgdGhlICd0ZW1wd3JpdGUnIGJ1ZmZlciBhcyBhIGJpdG1hc2sgdGhhdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB3aXRoIEN1cmxfY2xpZW50X3dyaXRlKCkgKi8KKyAgY2hhciAqc2NyYXRjaDsgLyogaHVnZSBidWZmZXJbQlVGU0laRSoyXSB3aGVuIGRvaW5nIHVwbG9hZCBDUkxGIHJlcGxhY2luZyAqLworICBib29sIGVycm9yYnVmOyAvKiBTZXQgdG8gVFJVRSBpZiB0aGUgZXJyb3IgYnVmZmVyIGlzIGFscmVhZHkgZmlsbGVkIGluLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG11c3QgYmUgc2V0IHRvIEZBTFNFIGV2ZXJ5IHRpbWUgX2Vhc3lfcGVyZm9ybSgpIGlzCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZC4gKi8KKyAgaW50IG9zX2Vycm5vOyAgLyogZmlsbGVkIGluIHdpdGggZXJybm8gd2hlbmV2ZXIgYW4gZXJyb3Igb2NjdXJzICovCisjaWZkZWYgSEFWRV9TSUdOQUwKKyAgLyogc3RvcmFnZSBmb3IgdGhlIHByZXZpb3VzIGJhZ15IXkheSFNJR1BJUEUgc2lnbmFsIGhhbmRsZXIgOi0pICovCisgIHZvaWQgKCpwcmV2X3NpZ25hbCkoaW50IHNpZyk7CisjZW5kaWYKKyAgYm9vbCBhbGxvd19wb3J0OyAvKiBJcyBzZXQudXNlX3BvcnQgYWxsb3dlZCB0byB0YWtlIGVmZmVjdCBvciBub3QuIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICBpcyBhbHdheXMgc2V0IFRSVUUgd2hlbiBjdXJsX2Vhc3lfcGVyZm9ybSgpIGlzIGNhbGxlZC4gKi8KKyAgc3RydWN0IGRpZ2VzdGRhdGEgZGlnZXN0OyAgICAgIC8qIHN0YXRlIGRhdGEgZm9yIGhvc3QgRGlnZXN0IGF1dGggKi8KKyAgc3RydWN0IGRpZ2VzdGRhdGEgcHJveHlkaWdlc3Q7IC8qIHN0YXRlIGRhdGEgZm9yIHByb3h5IERpZ2VzdCBhdXRoICovCisKKyNpZmRlZiBVU0VfSFRUUF9ORUdPVElBVEUKKyAgc3RydWN0IG5lZ290aWF0ZWRhdGEgbmVnb3RpYXRlOyAvKiBzdGF0ZSBkYXRhIGZvciBob3N0IE5lZ290aWF0ZSBhdXRoICovCisgIHN0cnVjdCBuZWdvdGlhdGVkYXRhIHByb3h5bmVnOyAvKiBzdGF0ZSBkYXRhIGZvciBwcm94eSBOZWdvdGlhdGUgYXV0aCAqLworI2VuZGlmCisKKyAgc3RydWN0IGF1dGggYXV0aGhvc3Q7ICAvKiBhdXRoIGRldGFpbHMgZm9yIGhvc3QgKi8KKyAgc3RydWN0IGF1dGggYXV0aHByb3h5OyAvKiBhdXRoIGRldGFpbHMgZm9yIHByb3h5ICovCisKKyAgYm9vbCBhdXRocHJvYmxlbTsgLyogVFJVRSBpZiB0aGVyZSdzIHNvbWUgcHJvYmxlbSBhdXRoZW50aWNhdGluZyAqLworCisgIHZvaWQgKnJlc29sdmVyOyAvKiByZXNvbHZlciBzdGF0ZSwgaWYgaXQgaXMgdXNlZCBpbiB0aGUgVVJMIHN0YXRlIC0KKyAgICAgICAgICAgICAgICAgICAgIGFyZXNfY2hhbm5lbCBmLmUuICovCisKKyNpZiBkZWZpbmVkKFVTRV9TU0xFQVkpICYmIGRlZmluZWQoSEFWRV9PUEVOU1NMX0VOR0lORV9IKQorICBFTkdJTkUgKmVuZ2luZTsKKyNlbmRpZiAvKiBVU0VfU1NMRUFZICovCisgIHN0cnVjdCB0aW1ldmFsIGV4cGlyZXRpbWU7IC8qIHNldCB0aGlzIHdpdGggQ3VybF9leHBpcmUoKSBvbmx5ICovCisgIHN0cnVjdCBDdXJsX3RyZWUgdGltZW5vZGU7IC8qIGZvciB0aGUgc3BsYXkgc3R1ZmYgKi8KKyAgc3RydWN0IGN1cmxfbGxpc3QgKnRpbWVvdXRsaXN0OyAvKiBsaXN0IG9mIHBlbmRpbmcgdGltZW91dHMgKi8KKworICAvKiBhIHBsYWNlIHRvIHN0b3JlIHRoZSBtb3N0IHJlY2VudGx5IHNldCBGVFAgZW50cnlwYXRoICovCisgIGNoYXIgKm1vc3RfcmVjZW50X2Z0cF9lbnRyeXBhdGg7CisKKyAgLyogc2V0IGFmdGVyIGluaXRpYWwgVVNFUiBmYWlsdXJlLCB0byBwcmV2ZW50IGFuIGF1dGhlbnRpY2F0aW9uIGxvb3AgKi8KKyAgYm9vbCBmdHBfdHJ5aW5nX2FsdGVybmF0aXZlOworCisgIGludCBodHRwdmVyc2lvbjsgICAgICAgLyogdGhlIGxvd2VzdCBIVFRQIHZlcnNpb24qMTAgcmVwb3J0ZWQgYnkgYW55IHNlcnZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludm9sdmVkIGluIHRoaXMgcmVxdWVzdCAqLworICBib29sIGV4cGVjdDEwMGhlYWRlcjsgIC8qIFRSVUUgaWYgd2UgYWRkZWQgRXhwZWN0OiAxMDAtY29udGludWUgKi8KKworICBib29sIHBpcGVfYnJva2U7IC8qIFRSVUUgaWYgdGhlIGNvbm5lY3Rpb24gd2Ugd2VyZSBwaXBlbGluZWQgb24gYnJva2UKKyAgICAgICAgICAgICAgICAgICAgICBhbmQgd2UgbmVlZCB0byByZXN0YXJ0IGZyb20gdGhlIGJlZ2lubmluZyAqLworCisjaWYgIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKE1TRE9TKSAmJiAhZGVmaW5lZChfX0VNWF9fKSAmJiBcCisgICAgIWRlZmluZWQoX19TWU1CSUFOMzJfXykKKy8qIGRvIEZUUCBsaW5lLWVuZCBjb252ZXJzaW9ucyBvbiBtb3N0IHBsYXRmb3JtcyAqLworI2RlZmluZSBDVVJMX0RPX0xJTkVFTkRfQ09OVgorICAvKiBmb3IgRlRQIGRvd25sb2FkczogdHJhY2sgQ1JMRiBzZXF1ZW5jZXMgdGhhdCBzcGFuIGJsb2NrcyAqLworICBib29sIHByZXZfYmxvY2tfaGFkX3RyYWlsaW5nX2NyOworICAvKiBmb3IgRlRQIGRvd25sb2FkczogaG93IG1hbnkgQ1JMRnMgZGlkIHdlIGNvbnZlcnRlZCB0byBMRnM/ICovCisgIGN1cmxfb2ZmX3QgY3JsZl9jb252ZXJzaW9uczsKKyNlbmRpZgorICAvKiBJZiBzZXQgdG8gbm9uLU5VTEwsIHRoZXJlJ3MgYSBjb25uZWN0aW9uIGluIGEgc2hhcmVkIGNvbm5lY3Rpb24gY2FjaGUKKyAgICAgdGhhdCB1c2VzIHRoaXMgaGFuZGxlIHNvIHdlIGNhbid0IGtpbGwgdGhpcyBTZXNzaW9uSGFuZGxlIGp1c3QgeWV0IGJ1dAorICAgICBtdXN0IGtlZXAgaXQgYXJvdW5kIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgaGFuZGxlcyB0byBraWxsIG9uY2UgYWxsCisgICAgIGl0cyBjb25uZWN0aW9ucyBhcmUgZ29uZSAqLworICB2b2lkICpzaGFyZWRfY29ubjsKKyAgYm9vbCBjbG9zZWQ7IC8qIHNldCB0byBUUlVFIHdoZW4gY3VybF9lYXN5X2NsZWFudXAoKSBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcworICAgICAgICAgICAgICAgICAgaGFuZGxlLCBidXQgaXQgaXMga2VwdCBhcm91bmQgYXMgbWVudGlvbmVkIGZvcgorICAgICAgICAgICAgICAgICAgc2hhcmVkX2Nvbm4gKi8KKyAgY2hhciAqcGF0aGJ1ZmZlcjsvKiBhbGxvY2F0ZWQgYnVmZmVyIHRvIHN0b3JlIHRoZSBVUkwncyBwYXRoIHBhcnQgaW4gKi8KKyAgY2hhciAqcGF0aDsgICAgICAvKiBwYXRoIHRvIHVzZSwgcG9pbnRzIHRvIHNvbWV3aGVyZSB3aXRoaW4gdGhlIHBhdGhidWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICBhcmVhICovCisgIGJvb2wgc2xhc2hfcmVtb3ZlZDsgLyogc2V0IFRSVUUgaWYgdGhlICdwYXRoJyBwb2ludHMgdG8gYSBwYXRoIHdoZXJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgVVJMIHNsYXNoIHNlcGFyYXRvciBoYXMgYmVlbiB0YWtlbiBvZmYgKi8KKyAgYm9vbCB1c2VfcmFuZ2U7CisgIGJvb2wgcmFuZ2VzdHJpbmdhbGxvYzsgLyogdGhlIHJhbmdlIHN0cmluZyBpcyBtYWxsb2MoKSdlZCAqLworCisgIGNoYXIgKnJhbmdlOyAvKiByYW5nZSwgaWYgdXNlZC4gU2VlIFJFQURNRSBmb3IgZGV0YWlsZWQgc3BlY2lmaWNhdGlvbiBvbgorICAgICAgICAgICAgICAgICAgdGhpcyBzeW50YXguICovCisgIGN1cmxfb2ZmX3QgcmVzdW1lX2Zyb207IC8qIGNvbnRpbnVlIFtmdHBdIHRyYW5zZmVyIGZyb20gaGVyZSAqLworCisgIC8qIFRoaXMgUlRTUCBzdGF0ZSBpbmZvcm1hdGlvbiBzdXJ2aXZlcyByZXF1ZXN0cyBhbmQgY29ubmVjdGlvbnMgKi8KKyAgbG9uZyBydHNwX25leHRfY2xpZW50X0NTZXE7IC8qIHRoZSBzZXNzaW9uJ3MgbmV4dCBjbGllbnQgQ1NlcSAqLworICBsb25nIHJ0c3BfbmV4dF9zZXJ2ZXJfQ1NlcTsgLyogdGhlIHNlc3Npb24ncyBuZXh0IHNlcnZlciBDU2VxICovCisgIGxvbmcgcnRzcF9DU2VxX3JlY3Y7IC8qIG1vc3QgcmVjZW50IENTZXEgcmVjZWl2ZWQgKi8KKworICAvKiBQcm90b2NvbCBzcGVjaWZpYyBkYXRhLgorICAgKgorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBOb3RlIHRoYXQgdGhpcyBkYXRhIHdpbGwgYmUgUkVNT1ZFRCBhZnRlciBlYWNoIHJlcXVlc3QsIHNvIGFueXRoaW5nIHRoYXQKKyAgICogc2hvdWxkIGJlIGtlcHQvc3RvcmVkIG9uIGEgcGVyLWNvbm5lY3Rpb24gYmFzaXMgYW5kIHRodXMgbGl2ZSBmb3IgdGhlCisgICAqIG5leHQgcmVxdWVzdCBvbiB0aGUgc2FtZSBjb25uZWN0aW9uIE1VU1QgYmUgcHV0IGluIHRoZSBjb25uZWN0ZGF0YSBzdHJ1Y3QhCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICB1bmlvbiB7CisgICAgc3RydWN0IEhUVFAgKmh0dHA7CisgICAgc3RydWN0IEhUVFAgKmh0dHBzOyAgLyogYWxpYXMsIGp1c3QgZm9yIHRoZSBzYWtlIG9mIGJlaW5nIG1vcmUgcmVhZGFibGUgKi8KKyAgICBzdHJ1Y3QgUlRTUCAqcnRzcDsKKyAgICBzdHJ1Y3QgRlRQICpmdHA7CisgICAgLyogdm9pZCAqdGZ0cDsgICAgbm90IHVzZWQgKi8KKyAgICBzdHJ1Y3QgRklMRVBST1RPICpmaWxlOworICAgIHZvaWQgKnRlbG5ldDsgICAgICAgIC8qIHByaXZhdGUgZm9yIHRlbG5ldC5jLWV5ZXMgb25seSAqLworICAgIHZvaWQgKmdlbmVyaWM7CisgICAgc3RydWN0IFNTSFBST1RPICpzc2g7CisgICAgc3RydWN0IEZUUCAqaW1hcDsKKyAgICBzdHJ1Y3QgRlRQICpwb3AzOworICAgIHN0cnVjdCBGVFAgKnNtdHA7CisgIH0gcHJvdG87CisgIC8qIGN1cnJlbnQgdXNlciBvZiB0aGlzIFNlc3Npb25IYW5kbGUgaW5zdGFuY2UsIG9yIE5VTEwgKi8KKyAgc3RydWN0IGNvbm5lY3RkYXRhICpjdXJyZW50X2Nvbm47CisKKyAgLyogaWYgdHJ1ZSwgZm9yY2UgU1NMIGNvbm5lY3Rpb24gcmV0cnkgKHdvcmthcm91bmQgZm9yIGNlcnRhaW4gc2VydmVycykgKi8KKyAgYm9vbCBzc2xfY29ubmVjdF9yZXRyeTsKK307CisKKworLyoKKyAqIFRoaXMgJ0R5bmFtaWNTdGF0aWMnIHN0cnVjdCBkZWZpbmVzIGR5bmFtaWMgc3RhdGVzIHRoYXQgYWN0dWFsbHkgY2hhbmdlCisgKiB2YWx1ZXMgaW4gdGhlICdVc2VyRGVmaW5lZCcgYXJlYSwgd2hpY2ggTVVTVCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24KKyAqIGlmIHRoZSBVc2VyRGVmaW5lZCBzdHJ1Y3QgaXMgY2xvbmVkIG9yIHNpbWlsYXIuIFlvdSBjYW4gcHJvYmFibHkganVzdAorICogY29weSB0aGVzZSwgYnV0IGVhY2ggb25lIGluZGljYXRlIGEgc3BlY2lhbCBhY3Rpb24gb24gb3RoZXIgZGF0YS4KKyAqLworCitzdHJ1Y3QgRHluYW1pY1N0YXRpYyB7CisgIGNoYXIgKnVybDsgICAgICAgIC8qIHdvcmsgVVJMLCBjb3BpZWQgZnJvbSBVc2VyRGVmaW5lZCAqLworICBib29sIHVybF9hbGxvYzsgICAvKiBVUkwgc3RyaW5nIGlzIG1hbGxvYygpJ2VkICovCisgIGNoYXIgKnJlZmVyZXI7ICAgIC8qIHJlZmVyZXIgc3RyaW5nICovCisgIGJvb2wgcmVmZXJlcl9hbGxvYzsgLyogcmVmZXJlciBzdGluZyBpcyBtYWxsb2MoKWVkICovCisgIHN0cnVjdCBjdXJsX3NsaXN0ICpjb29raWVsaXN0OyAvKiBsaXN0IG9mIGNvb2tpZSBmaWxlcyBzZXQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoQ09PS0lFRklMRSkgY2FsbHMgKi8KKyAgc3RydWN0IGN1cmxfc2xpc3QgKnJlc29sdmU7IC8qIHNldCB0byBwb2ludCB0byB0aGUgc2V0LnJlc29sdmUgbGlzdCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHNob3VsZCBiZSBkZWFsdCB3aXRoIGluIHByZXRyYW5zZmVyICovCit9OworCisvKgorICogVGhpcyAnVXNlckRlZmluZWQnIHN0cnVjdCBtdXN0IG9ubHkgY29udGFpbiBkYXRhIHRoYXQgaXMgc2V0IG9uY2UgdG8gZ28KKyAqIGZvciBtYW55IChwZXJoYXBzKSBpbmRlcGVuZGVudCBjb25uZWN0aW9ucy4gVmFsdWVzIHRoYXQgYXJlIGdlbmVyYXRlZCBvcgorICogY2FsY3VsYXRlZCBpbnRlcm5hbGx5IGZvciB0aGUgInNlc3Npb24gaGFuZGxlIiBNVVNUIGJlIGRlZmluZWQgd2l0aGluIHRoZQorICogJ3N0cnVjdCBVcmxTdGF0ZScgaW5zdGVhZC4gVGhlIG9ubHkgZXhjZXB0aW9ucyBNVVNUIG5vdGUgdGhlIGNoYW5nZXMgaW4KKyAqIHRoZSAnRHluYW1pY1N0YXRpYycgc3RydWN0LgorICogQ2hhcmFjdGVyIHBvaW50ZXIgZmllbGRzIHBvaW50IHRvIGR5bmFtaWMgc3RvcmFnZSwgdW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQuCisgKi8KK3N0cnVjdCBDdXJsX29uZV9lYXN5OyAvKiBkZWNsYXJlZCBhbmQgdXNlZCBvbmx5IGluIG11bHRpLmMgKi8KK3N0cnVjdCBDdXJsX211bHRpOyAgICAvKiBkZWNsYXJlZCBhbmQgdXNlZCBvbmx5IGluIG11bHRpLmMgKi8KKworZW51bSBkdXBzdHJpbmcgeworICBTVFJJTkdfQ0VSVCwgICAgICAgICAgICAvKiBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBuYW1lICovCisgIFNUUklOR19DRVJUX1RZUEUsICAgICAgIC8qIGZvcm1hdCBmb3IgY2VydGlmaWNhdGUgKGRlZmF1bHQ6IFBFTSkqLworICBTVFJJTkdfQ09PS0lFLCAgICAgICAgICAvKiBIVFRQIGNvb2tpZSBzdHJpbmcgdG8gc2VuZCAqLworICBTVFJJTkdfQ09PS0lFSkFSLCAgICAgICAvKiBkdW1wIGFsbCBjb29raWVzIHRvIHRoaXMgZmlsZSAqLworICBTVFJJTkdfQ1VTVE9NUkVRVUVTVCwgICAvKiBIVFRQL0ZUUC9SVFNQIHJlcXVlc3QvbWV0aG9kIHRvIHVzZSAqLworICBTVFJJTkdfREVWSUNFLCAgICAgICAgICAvKiBsb2NhbCBuZXR3b3JrIGludGVyZmFjZS9hZGRyZXNzIHRvIHVzZSAqLworICBTVFJJTkdfRU5DT0RJTkcsICAgICAgICAvKiBBY2NlcHQtRW5jb2Rpbmcgc3RyaW5nICovCisgIFNUUklOR19GVFBfQUNDT1VOVCwgICAgIC8qIGZ0cCBhY2NvdW50IGRhdGEgKi8KKyAgU1RSSU5HX0ZUUF9BTFRFUk5BVElWRV9UT19VU0VSLCAvKiBjb21tYW5kIHRvIHNlbmQgaWYgVVNFUi9QQVNTIGZhaWxzICovCisgIFNUUklOR19GVFBQT1JULCAgICAgICAgIC8qIHBvcnQgdG8gc2VuZCB3aXRoIHRoZSBGVFAgUE9SVCBjb21tYW5kICovCisgIFNUUklOR19LRVksICAgICAgICAgICAgIC8qIHByaXZhdGUga2V5IGZpbGUgbmFtZSAqLworICBTVFJJTkdfS0VZX1BBU1NXRCwgICAgICAvKiBwbGFpbiB0ZXh0IHByaXZhdGUga2V5IHBhc3N3b3JkICovCisgIFNUUklOR19LRVlfVFlQRSwgICAgICAgIC8qIGZvcm1hdCBmb3IgcHJpdmF0ZSBrZXkgKGRlZmF1bHQ6IFBFTSkgKi8KKyAgU1RSSU5HX0tSQl9MRVZFTCwgICAgICAgLyoga3JiIHNlY3VyaXR5IGxldmVsICovCisgIFNUUklOR19ORVRSQ19GSUxFLCAgICAgIC8qIGlmIG5vdCBOVUxMLCB1c2UgdGhpcyBpbnN0ZWFkIG9mIHRyeWluZyB0byBmaW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRIT01FLy5uZXRyYyAqLworICBTVFJJTkdfQ09QWVBPU1RGSUVMRFMsICAvKiBpZiBQT1NULCBzZXQgdGhlIGZpZWxkcycgdmFsdWVzIGhlcmUgKi8KKyAgU1RSSU5HX1BST1hZLCAgICAgICAgICAgLyogcHJveHkgdG8gdXNlICovCisgIFNUUklOR19TRVRfUkFOR0UsICAgICAgIC8qIHJhbmdlLCBpZiB1c2VkICovCisgIFNUUklOR19TRVRfUkVGRVJFUiwgICAgIC8qIGN1c3RvbSBzdHJpbmcgZm9yIHRoZSBIVFRQIHJlZmVyZXIgZmllbGQgKi8KKyAgU1RSSU5HX1NFVF9VUkwsICAgICAgICAgLyogd2hhdCBvcmlnaW5hbCBVUkwgdG8gd29yayBvbiAqLworICBTVFJJTkdfU1NMX0NBUEFUSCwgICAgICAvKiBDQSBkaXJlY3RvcnkgbmFtZSAoZG9lc24ndCB3b3JrIG9uIHdpbmRvd3MpICovCisgIFNUUklOR19TU0xfQ0FGSUxFLCAgICAgIC8qIGNlcnRpZmljYXRlIGZpbGUgdG8gdmVyaWZ5IHBlZXIgYWdhaW5zdCAqLworICBTVFJJTkdfU1NMX0NJUEhFUl9MSVNULCAvKiBsaXN0IG9mIGNpcGhlcnMgdG8gdXNlICovCisgIFNUUklOR19TU0xfRUdEU09DS0VULCAgIC8qIHBhdGggdG8gZmlsZSBjb250YWluaW5nIHRoZSBFR0QgZGFlbW9uIHNvY2tldCAqLworICBTVFJJTkdfU1NMX1JBTkRPTV9GSUxFLCAvKiBwYXRoIHRvIGZpbGUgY29udGFpbmluZyAicmFuZG9tIiBkYXRhICovCisgIFNUUklOR19VU0VSQUdFTlQsICAgICAgIC8qIFVzZXItQWdlbnQgc3RyaW5nICovCisgIFNUUklOR19TU0xfQ1JMRklMRSwgICAgIC8qIGNybCBmaWxlIHRvIGNoZWNrIGNlcnRpZmljYXRlICovCisgIFNUUklOR19TU0xfSVNTVUVSQ0VSVCwgIC8qIGlzc3VlciBjZXJ0IGZpbGUgdG8gY2hlY2sgY2VydGlmaWNhdGUgKi8KKyAgU1RSSU5HX1VTRVJOQU1FLCAgICAgICAgLyogPHVzZXJuYW1lPiwgaWYgdXNlZCAqLworICBTVFJJTkdfUEFTU1dPUkQsICAgICAgICAvKiA8cGFzc3dvcmQ+LCBpZiB1c2VkICovCisgIFNUUklOR19QUk9YWVVTRVJOQU1FLCAgIC8qIFByb3h5IDx1c2VybmFtZT4sIGlmIHVzZWQgKi8KKyAgU1RSSU5HX1BST1hZUEFTU1dPUkQsICAgLyogUHJveHkgPHBhc3N3b3JkPiwgaWYgdXNlZCAqLworICBTVFJJTkdfTk9QUk9YWSwgICAgICAgICAvKiBMaXN0IG9mIGhvc3RzIHdoaWNoIHNob3VsZCBub3QgdXNlIHRoZSBwcm94eSwgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCAqLworICBTVFJJTkdfUlRTUF9TRVNTSU9OX0lELCAvKiBTZXNzaW9uIElEIHRvIHVzZSAqLworICBTVFJJTkdfUlRTUF9TVFJFQU1fVVJJLCAvKiBTdHJlYW0gVVJJIGZvciB0aGlzIHJlcXVlc3QgKi8KKyAgU1RSSU5HX1JUU1BfVFJBTlNQT1JULCAgLyogVHJhbnNwb3J0IGZvciB0aGlzIHNlc3Npb24gKi8KKyNpZmRlZiBVU0VfTElCU1NIMgorICBTVFJJTkdfU1NIX1BSSVZBVEVfS0VZLCAvKiBwYXRoIHRvIHRoZSBwcml2YXRlIGtleSBmaWxlIGZvciBhdXRoICovCisgIFNUUklOR19TU0hfUFVCTElDX0tFWSwgIC8qIHBhdGggdG8gdGhlIHB1YmxpYyBrZXkgZmlsZSBmb3IgYXV0aCAqLworICBTVFJJTkdfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDUsIC8qIG1kNSBvZiBob3N0IHB1YmxpYyBrZXkgaW4gYXNjaWkgaGV4ICovCisgIFNUUklOR19TU0hfS05PV05IT1NUUywgIC8qIGZpbGUgbmFtZSBvZiBrbm93bmhvc3RzIGZpbGUgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgU1RSSU5HX1NPQ0tTNV9HU1NBUElfU0VSVklDRSwgIC8qIEdTU0FQSSBzZXJ2aWNlIG5hbWUgKi8KKyNlbmRpZgorICBTVFJJTkdfTUFJTF9GUk9NLAorICBTVFJJTkdfTUFJTF9BVVRILAorCisjaWZkZWYgVVNFX1RMU19TUlAKKyAgU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUUsICAgICAvKiBUTFMgYXV0aCA8dXNlcm5hbWU+ICovCisgIFNUUklOR19UTFNBVVRIX1BBU1NXT1JELCAgICAgLyogVExTIGF1dGggPHBhc3N3b3JkPiAqLworI2VuZGlmCisKKyAgLyogLS0gZW5kIG9mIHN0cmluZ3MgLS0gKi8KKyAgU1RSSU5HX0xBU1QgLyogbm90IHVzZWQsIGp1c3QgYW4gZW5kLW9mLWxpc3QgbWFya2VyICovCit9OworCitzdHJ1Y3QgVXNlckRlZmluZWQgeworICBGSUxFICplcnI7ICAgICAgICAgLyogdGhlIHN0ZGVyciB1c2VyIGRhdGEgZ29lcyBoZXJlICovCisgIHZvaWQgKmRlYnVnZGF0YTsgICAvKiB0aGUgZGF0YSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGZkZWJ1ZyAqLworICBjaGFyICplcnJvcmJ1ZmZlcjsgLyogKFN0YXRpYykgc3RvcmUgZmFpbHVyZSBtZXNzYWdlcyBpbiBoZXJlICovCisgIGxvbmcgcHJveHlwb3J0OyAvKiBJZiBub24temVybywgdXNlIHRoaXMgcG9ydCBudW1iZXIgYnkgZGVmYXVsdC4gSWYgdGhlCisgICAgICAgICAgICAgICAgICAgICBwcm94eSBzdHJpbmcgZmVhdHVyZXMgYSAiOltwb3J0XSIgdGhhdCBvbmUgd2lsbCBvdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgdGhpcy4gKi8KKyAgdm9pZCAqb3V0OyAgICAgICAgIC8qIHRoZSBmZXRjaGVkIGZpbGUgZ29lcyBoZXJlICovCisgIHZvaWQgKmluOyAgICAgICAgICAvKiB0aGUgdXBsb2FkZWQgZmlsZSBpcyByZWFkIGZyb20gaGVyZSAqLworICB2b2lkICp3cml0ZWhlYWRlcjsgLyogd3JpdGUgdGhlIGhlYWRlciB0byB0aGlzIGlmIG5vbi1OVUxMICovCisgIHZvaWQgKnJ0cF9vdXQ7ICAgICAvKiB3cml0ZSBSVFAgdG8gdGhpcyBpZiBub24tTlVMTCAqLworICBsb25nIHVzZV9wb3J0OyAgICAgLyogd2hpY2ggcG9ydCB0byB1c2UgKHdoZW4gbm90IHVzaW5nIGRlZmF1bHQpICovCisgIGxvbmcgaHR0cGF1dGg7ICAgICAvKiB3aGF0IGtpbmQgb2YgSFRUUCBhdXRoZW50aWNhdGlvbiB0byB1c2UgKGJpdG1hc2spICovCisgIGxvbmcgcHJveHlhdXRoOyAgICAvKiB3aGF0IGtpbmQgb2YgcHJveHkgYXV0aGVudGljYXRpb24gdG8gdXNlIChiaXRtYXNrKSAqLworICBsb25nIGZvbGxvd2xvY2F0aW9uOyAvKiBhcyBpbiBIVFRQIExvY2F0aW9uOiAqLworICBsb25nIG1heHJlZGlyczsgICAgLyogbWF4aW11bSBuby4gb2YgaHR0cChzKSByZWRpcmVjdHMgdG8gZm9sbG93LCBzZXQgdG8gLTEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbmZpbml0eSAqLworICBib29sIHBvc3QzMDE7ICAgICAgLyogT2JleSBSRkMgMjYxNi8xMC4zLjIgYW5kIGtlZXAgUE9TVHMgYXMgUE9TVHMgYWZ0ZXIgYQorICAgICAgICAgICAgICAgICAgICAgICAgMzAxICovCisgIGJvb2wgcG9zdDMwMjsgICAgICAvKiBrZWVwIFBPU1RzIGFzIFBPU1RzIGFmdGVyIGEgMzAyICovCisgIGJvb2wgZnJlZV9yZWZlcmVyOyAvKiBzZXQgVFJVRSBpZiAncmVmZXJlcicgcG9pbnRzIHRvIGEgc3RyaW5nIHdlCisgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWQgKi8KKyAgdm9pZCAqcG9zdGZpZWxkczsgIC8qIGlmIFBPU1QsIHNldCB0aGUgZmllbGRzJyB2YWx1ZXMgaGVyZSAqLworICBjdXJsX3NlZWtfY2FsbGJhY2sgc2Vla19mdW5jOyAgICAgIC8qIGZ1bmN0aW9uIHRoYXQgc2Vla3MgdGhlIGlucHV0ICovCisgIGN1cmxfb2ZmX3QgcG9zdGZpZWxkc2l6ZTsgLyogaWYgUE9TVCwgdGhpcyBtaWdodCBoYXZlIGEgc2l6ZSB0byB1c2UgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHN0cmxlbigpLCBhbmQgdGhlbiB0aGUgZGF0YSAqbWF5KiBiZSBiaW5hcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29udGFpbiB6ZXJvIGJ5dGVzKSAqLworICB1bnNpZ25lZCBzaG9ydCBsb2NhbHBvcnQ7IC8qIGxvY2FsIHBvcnQgbnVtYmVyIHRvIGJpbmQgdG8gKi8KKyAgaW50IGxvY2FscG9ydHJhbmdlOyAvKiBudW1iZXIgb2YgYWRkaXRpb25hbCBwb3J0IG51bWJlcnMgdG8gdGVzdCBpbiBjYXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICdsb2NhbHBvcnQnIG9uZSBjYW4ndCBiZSBiaW5kKCllZCAqLworICBjdXJsX3dyaXRlX2NhbGxiYWNrIGZ3cml0ZV9mdW5jOyAgIC8qIGZ1bmN0aW9uIHRoYXQgc3RvcmVzIHRoZSBvdXRwdXQgKi8KKyAgY3VybF93cml0ZV9jYWxsYmFjayBmd3JpdGVfaGVhZGVyOyAvKiBmdW5jdGlvbiB0aGF0IHN0b3JlcyBoZWFkZXJzICovCisgIGN1cmxfd3JpdGVfY2FsbGJhY2sgZndyaXRlX3J0cDsgICAgLyogZnVuY3Rpb24gdGhhdCBzdG9yZXMgaW50ZXJsZWF2ZWQgUlRQICovCisgIGN1cmxfcmVhZF9jYWxsYmFjayBmcmVhZF9mdW5jOyAgICAgLyogZnVuY3Rpb24gdGhhdCByZWFkcyB0aGUgaW5wdXQgKi8KKyAgaW50IGlzX2ZyZWFkX3NldDsgLyogYm9vbGVhbiwgaGFzIHJlYWQgY2FsbGJhY2sgYmVlbiBzZXQgdG8gbm9uLU5VTEw/ICovCisgIGludCBpc19md3JpdGVfc2V0OyAvKiBib29sZWFuLCBoYXMgd3JpdGUgY2FsbGJhY2sgYmVlbiBzZXQgdG8gbm9uLU5VTEw/ICovCisgIGN1cmxfcHJvZ3Jlc3NfY2FsbGJhY2sgZnByb2dyZXNzOyAgLyogZnVuY3Rpb24gZm9yIHByb2dyZXNzIGluZm9ybWF0aW9uICovCisgIGN1cmxfZGVidWdfY2FsbGJhY2sgZmRlYnVnOyAgICAgIC8qIGZ1bmN0aW9uIHRoYXQgd3JpdGUgaW5mb3JtYXRpb25hbCBkYXRhICovCisgIGN1cmxfaW9jdGxfY2FsbGJhY2sgaW9jdGxfZnVuYzsgIC8qIGZ1bmN0aW9uIGZvciBJL08gY29udHJvbCAqLworICBjdXJsX3NvY2tvcHRfY2FsbGJhY2sgZnNvY2tvcHQ7ICAvKiBmdW5jdGlvbiBmb3Igc2V0dGluZyBzb2NrZXQgb3B0aW9ucyAqLworICB2b2lkICpzb2Nrb3B0X2NsaWVudDsgLyogcG9pbnRlciB0byBwYXNzIHRvIHRoZSBzb2NrZXQgb3B0aW9ucyBjYWxsYmFjayAqLworICBjdXJsX29wZW5zb2NrZXRfY2FsbGJhY2sgZm9wZW5zb2NrZXQ7IC8qIGZ1bmN0aW9uIGZvciBjaGVja2luZy90cmFuc2xhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhZGRyZXNzIGFuZCBvcGVuaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldCAqLworICB2b2lkKiBvcGVuc29ja2V0X2NsaWVudDsKKyAgY3VybF9jbG9zZXNvY2tldF9jYWxsYmFjayBmY2xvc2Vzb2NrZXQ7IC8qIGZ1bmN0aW9uIGZvciBjbG9zaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0ICovCisgIHZvaWQqIGNsb3Nlc29ja2V0X2NsaWVudDsKKworICB2b2lkICpzZWVrX2NsaWVudDsgICAgLyogcG9pbnRlciB0byBwYXNzIHRvIHRoZSBzZWVrIGNhbGxiYWNrICovCisgIC8qIHRoZSAzIGN1cmxfY29udl9jYWxsYmFjayBmdW5jdGlvbnMgYmVsb3cgYXJlIHVzZWQgb24gbm9uLUFTQ0lJIGhvc3RzICovCisgIC8qIGZ1bmN0aW9uIHRvIGNvbnZlcnQgZnJvbSB0aGUgbmV0d29yayBlbmNvZGluZzogKi8KKyAgY3VybF9jb252X2NhbGxiYWNrIGNvbnZmcm9tbmV0d29yazsKKyAgLyogZnVuY3Rpb24gdG8gY29udmVydCB0byB0aGUgbmV0d29yayBlbmNvZGluZzogKi8KKyAgY3VybF9jb252X2NhbGxiYWNrIGNvbnZ0b25ldHdvcms7CisgIC8qIGZ1bmN0aW9uIHRvIGNvbnZlcnQgZnJvbSBVVEYtOCBlbmNvZGluZzogKi8KKyAgY3VybF9jb252X2NhbGxiYWNrIGNvbnZmcm9tdXRmODsKKworICB2b2lkICpwcm9ncmVzc19jbGllbnQ7IC8qIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2sgKi8KKyAgdm9pZCAqaW9jdGxfY2xpZW50OyAgIC8qIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgaW9jdGwgY2FsbGJhY2sgKi8KKyAgbG9uZyB0aW1lb3V0OyAgICAgICAgIC8qIGluIG1pbGxpc2Vjb25kcywgMCBtZWFucyBubyB0aW1lb3V0ICovCisgIGxvbmcgY29ubmVjdHRpbWVvdXQ7ICAvKiBpbiBtaWxsaXNlY29uZHMsIDAgbWVhbnMgbm8gdGltZW91dCAqLworICBsb25nIGFjY2VwdHRpbWVvdXQ7ICAgLyogaW4gbWlsbGlzZWNvbmRzLCAwIG1lYW5zIG5vIHRpbWVvdXQgKi8KKyAgbG9uZyBzZXJ2ZXJfcmVzcG9uc2VfdGltZW91dDsgLyogaW4gbWlsbGlzZWNvbmRzLCAwIG1lYW5zIG5vIHRpbWVvdXQgKi8KKyAgbG9uZyB0ZnRwX2Jsa3NpemUgOyAvKiBpbiBieXRlcywgMCBtZWFucyB1c2UgZGVmYXVsdCAqLworICBjdXJsX29mZl90IGluZmlsZXNpemU7ICAgICAgLyogc2l6ZSBvZiBmaWxlIHRvIHVwbG9hZCwgLTEgbWVhbnMgdW5rbm93biAqLworICBsb25nIGxvd19zcGVlZF9saW1pdDsgLyogYnl0ZXMvc2Vjb25kICovCisgIGxvbmcgbG93X3NwZWVkX3RpbWU7ICAvKiBudW1iZXIgb2Ygc2Vjb25kcyAqLworICBjdXJsX29mZl90IG1heF9zZW5kX3NwZWVkOyAvKiBoaWdoIHNwZWVkIGxpbWl0IGluIGJ5dGVzL3NlY29uZCBmb3IgdXBsb2FkICovCisgIGN1cmxfb2ZmX3QgbWF4X3JlY3Zfc3BlZWQ7IC8qIGhpZ2ggc3BlZWQgbGltaXQgaW4gYnl0ZXMvc2Vjb25kIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZCAqLworICBjdXJsX29mZl90IHNldF9yZXN1bWVfZnJvbTsgIC8qIGNvbnRpbnVlIFtmdHBdIHRyYW5zZmVyIGZyb20gaGVyZSAqLworICBzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVyczsgLyogbGlua2VkIGxpc3Qgb2YgZXh0cmEgaGVhZGVycyAqLworICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqaHR0cHBvc3Q7ICAvKiBsaW5rZWQgbGlzdCBvZiBQT1NUIGRhdGEgKi8KKyAgYm9vbCBjb29raWVzZXNzaW9uOyAgIC8qIG5ldyBjb29raWUgc2Vzc2lvbj8gKi8KKyAgYm9vbCBjcmxmOyAgICAgICAgICAgIC8qIGNvbnZlcnQgY3JsZiBvbiBmdHAgdXBsb2FkKD8pICovCisgIHN0cnVjdCBjdXJsX3NsaXN0ICpxdW90ZTsgICAgIC8qIGFmdGVyIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgKi8KKyAgc3RydWN0IGN1cmxfc2xpc3QgKnBvc3RxdW90ZTsgLyogYWZ0ZXIgdGhlIHRyYW5zZmVyICovCisgIHN0cnVjdCBjdXJsX3NsaXN0ICpwcmVxdW90ZTsgLyogYmVmb3JlIHRoZSB0cmFuc2ZlciwgYWZ0ZXIgdHlwZSAqLworICBzdHJ1Y3QgY3VybF9zbGlzdCAqc291cmNlX3F1b3RlOyAgLyogM3JkIHBhcnR5IHF1b3RlICovCisgIHN0cnVjdCBjdXJsX3NsaXN0ICpzb3VyY2VfcHJlcXVvdGU7ICAvKiBpbiAzcmQgcGFydHkgdHJhbnNmZXIgbW9kZSAtIGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRyYW5zZmVyIG9uIHNvdXJjZSBob3N0ICovCisgIHN0cnVjdCBjdXJsX3NsaXN0ICpzb3VyY2VfcG9zdHF1b3RlOyAvKiBpbiAzcmQgcGFydHkgdHJhbnNmZXIgbW9kZSAtIGFmdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHJhbnNmZXIgb24gc291cmNlIGhvc3QgKi8KKyAgc3RydWN0IGN1cmxfc2xpc3QgKnRlbG5ldF9vcHRpb25zOyAvKiBsaW5rZWQgbGlzdCBvZiB0ZWxuZXQgb3B0aW9ucyAqLworICBzdHJ1Y3QgY3VybF9zbGlzdCAqcmVzb2x2ZTsgICAgIC8qIGxpc3Qgb2YgbmFtZXMgdG8gYWRkL3JlbW92ZSBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE5TIGNhY2hlICovCisgIGN1cmxfVGltZUNvbmQgdGltZWNvbmRpdGlvbjsgLyoga2luZCBvZiB0aW1lL2RhdGUgY29tcGFyaXNvbiAqLworICB0aW1lX3QgdGltZXZhbHVlOyAgICAgICAvKiB3aGF0IHRpbWUgdG8gY29tcGFyZSB3aXRoICovCisgIEN1cmxfSHR0cFJlcSBodHRwcmVxOyAgIC8qIHdoYXQga2luZCBvZiBIVFRQIHJlcXVlc3QgKGlmIGFueSkgaXMgdGhpcyAqLworICBsb25nIGh0dHB2ZXJzaW9uOyAvKiB3aGVuIG5vbi16ZXJvLCBhIHNwZWNpZmljIEhUVFAgdmVyc2lvbiByZXF1ZXN0ZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgYmUgdXNlZCBpbiB0aGUgbGlicmFyeSdzIHJlcXVlc3QocykgKi8KKyAgc3RydWN0IHNzbF9jb25maWdfZGF0YSBzc2w7ICAvKiB1c2VyIGRlZmluZWQgU1NMIHN0dWZmICovCisgIGN1cmxfcHJveHl0eXBlIHByb3h5dHlwZTsgLyogd2hhdCBraW5kIG9mIHByb3h5IHRoYXQgaXMgaW4gdXNlICovCisgIGxvbmcgZG5zX2NhY2hlX3RpbWVvdXQ7IC8qIEROUyBjYWNoZSB0aW1lb3V0ICovCisgIGxvbmcgYnVmZmVyX3NpemU7ICAgICAgLyogc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlciB0byB1c2UgKi8KKyAgdm9pZCAqcHJpdmF0ZV9kYXRhOyAvKiBhcHBsaWNhdGlvbi1wcml2YXRlIGRhdGEgKi8KKworICBzdHJ1Y3QgQ3VybF9vbmVfZWFzeSAqb25lX2Vhc3k7IC8qIFdoZW4gYWRkaW5nIGFuIGVhc3kgaGFuZGxlIHRvIGEgbXVsdGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFuIGludGVybmFsICdDdXJsX29uZV9lYXN5JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcyBjcmVhdGVkIGFuZCB0aGlzIGlzIGEgcG9pbnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBwYXJ0aWN1bGFyIHN0cnVjdCBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIFNlc3Npb25IYW5kbGUgKi8KKworICBzdHJ1Y3QgY3VybF9zbGlzdCAqaHR0cDIwMGFsaWFzZXM7IC8qIGxpbmtlZCBsaXN0IG9mIGFsaWFzZXMgZm9yIGh0dHAyMDAgKi8KKworICBsb25nIGlwdmVyOyAvKiB0aGUgQ1VSTF9JUFJFU09MVkVfKiBkZWZpbmVzIGluIHRoZSBwdWJsaWMgaGVhZGVyIGZpbGUKKyAgICAgICAgICAgICAgICAgMCAtIHdoYXRldmVyLCAxIC0gdjIsIDIgLSB2NiAqLworCisgIGN1cmxfb2ZmX3QgbWF4X2ZpbGVzaXplOyAvKiBNYXhpbXVtIGZpbGUgc2l6ZSB0byBkb3dubG9hZCAqLworCisgIGN1cmxfZnRwZmlsZSBmdHBfZmlsZW1ldGhvZDsgLyogaG93IHRvIGdldCB0byBhIGZpbGUgd2hlbiBGVFAgaXMgdXNlZCAgKi8KKworICBpbnQgZnRwX2NyZWF0ZV9taXNzaW5nX2RpcnM7IC8qIDEgLSBjcmVhdGUgZGlyZWN0b3JpZXMgdGhhdCBkb24ndCBleGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSB0aGUgc2FtZSBidXQgYWxzbyBhbGxvdyBNS0QgdG8gZmFpbCBvbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICBjdXJsX3NzaGtleWNhbGxiYWNrIHNzaF9rZXlmdW5jOyAvKiBrZXkgbWF0Y2hpbmcgY2FsbGJhY2sgKi8KKyAgdm9pZCAqc3NoX2tleWZ1bmNfdXNlcnA7ICAgICAgICAgLyogY3VzdG9tIHBvaW50ZXIgdG8gY2FsbGJhY2sgKi8KKworLyogSGVyZSBmb2xsb3dzIGJvb2xlYW4gc2V0dGluZ3MgdGhhdCBkZWZpbmUgaG93IHRvIGJlaGF2ZSBkdXJpbmcKKyAgIHRoaXMgc2Vzc2lvbi4gVGhleSBhcmUgU1RBVElDLCBzZXQgYnkgbGliY3VybCB1c2VycyBvciBhdCBsZWFzdCBpbml0aWFsbHkKKyAgIGFuZCB0aGV5IGRvbid0IGNoYW5nZSBkdXJpbmcgb3BlcmF0aW9ucy4gKi8KKworICBib29sIHByaW50aG9zdDsgICAgICAgIC8qIHByaW50aW5nIGhvc3QgbmFtZSBpbiBkZWJ1ZyBpbmZvICovCisgIGJvb2wgZ2V0X2ZpbGV0aW1lOyAgICAgLyogZ2V0IHRoZSB0aW1lIGFuZCBnZXQgb2YgdGhlIHJlbW90ZSBmaWxlICovCisgIGJvb2wgdHVubmVsX3RocnVfaHR0cHByb3h5OyAvKiB1c2UgQ09OTkVDVCB0aHJvdWdoIGEgSFRUUCBwcm94eSAqLworICBib29sIHByZWZlcl9hc2NpaTsgICAgIC8qIEFTQ0lJIHJhdGhlciB0aGFuIGJpbmFyeSAqLworICBib29sIGZ0cF9hcHBlbmQ7ICAgICAgIC8qIGFwcGVuZCwgbm90IG92ZXJ3cml0ZSwgb24gdXBsb2FkICovCisgIGJvb2wgZnRwX2xpc3Rfb25seTsgICAgLyogc3dpdGNoIEZUUCBjb21tYW5kIGZvciBsaXN0aW5nIGRpcmVjdG9yaWVzICovCisgIGJvb2wgZnRwX3VzZV9wb3J0OyAgICAgLyogdXNlIHRoZSBGVFAgUE9SVCBjb21tYW5kICovCisgIGJvb2wgaGlkZV9wcm9ncmVzczsgICAgLyogZG9uJ3QgdXNlIHRoZSBwcm9ncmVzcyBtZXRlciAqLworICBib29sIGh0dHBfZmFpbF9vbl9lcnJvcjsgIC8qIGZhaWwgb24gSFRUUCBlcnJvciBjb2RlcyA+PSAzMDAgKi8KKyAgYm9vbCBodHRwX2ZvbGxvd19sb2NhdGlvbjsgLyogZm9sbG93IEhUVFAgcmVkaXJlY3RzICovCisgIGJvb2wgaHR0cF90cmFuc2Zlcl9lbmNvZGluZzsgLyogcmVxdWVzdCBjb21wcmVzc2VkIEhUVFAgdHJhbnNmZXItZW5jb2RpbmcgKi8KKyAgYm9vbCBodHRwX2Rpc2FibGVfaG9zdG5hbWVfY2hlY2tfYmVmb3JlX2F1dGhlbnRpY2F0aW9uOworICBib29sIGluY2x1ZGVfaGVhZGVyOyAgIC8qIGluY2x1ZGUgcmVjZWl2ZWQgcHJvdG9jb2wgaGVhZGVycyBpbiBkYXRhIG91dHB1dCAqLworICBib29sIGh0dHBfc2V0X3JlZmVyZXI7IC8qIGlzIGEgY3VzdG9tIHJlZmVyZXIgdXNlZCAqLworICBib29sIGh0dHBfYXV0b19yZWZlcmVyOyAvKiBzZXQgImNvcnJlY3QiIHJlZmVyZXIgd2hlbiBmb2xsb3dpbmcgbG9jYXRpb246ICovCisgIGJvb2wgb3B0X25vX2JvZHk7ICAgICAgLyogYXMgc2V0IHdpdGggQ1VSTE9QVF9OT19CT0RZICovCisgIGJvb2wgc2V0X3BvcnQ7ICAgICAgICAgLyogY3VzdG9tIHBvcnQgbnVtYmVyIHVzZWQgKi8KKyAgYm9vbCB1cGxvYWQ7ICAgICAgICAgICAvKiB1cGxvYWQgcmVxdWVzdCAqLworICBlbnVtIENVUkxfTkVUUkNfT1BUSU9OCisgICAgICAgdXNlX25ldHJjOyAgICAgICAgLyogZGVmaW5lZCBpbiBpbmNsdWRlL2N1cmwuaCAqLworICBib29sIHZlcmJvc2U7ICAgICAgICAgIC8qIG91dHB1dCB2ZXJib3NpdHkgKi8KKyAgYm9vbCBrcmI7ICAgICAgICAgICAgICAvKiBrZXJiZXJvcyBjb25uZWN0aW9uIHJlcXVlc3RlZCAqLworICBib29sIHJldXNlX2ZvcmJpZDsgICAgIC8qIGZvcmJpZGRlbiB0byBiZSByZXVzZWQsIGNsb3NlIGFmdGVyIHVzZSAqLworICBib29sIHJldXNlX2ZyZXNoOyAgICAgIC8qIGRvIG5vdCByZS11c2UgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiAgKi8KKyAgYm9vbCBmdHBfdXNlX2Vwc3Y7ICAgICAvKiBpZiBFUFNWIGlzIHRvIGJlIGF0dGVtcHRlZCBvciBub3QgKi8KKyAgYm9vbCBmdHBfdXNlX2VwcnQ7ICAgICAvKiBpZiBFUFJUIGlzIHRvIGJlIGF0dGVtcHRlZCBvciBub3QgKi8KKyAgYm9vbCBmdHBfdXNlX3ByZXQ7ICAgICAvKiBpZiBQUkVUIGlzIHRvIGJlIHVzZWQgYmVmb3JlIFBBU1Ygb3Igbm90ICovCisKKyAgY3VybF91c2Vzc2wgdXNlX3NzbDsgICAvKiBpZiBBVVRIIFRMUyBpcyB0byBiZSBhdHRlbXB0ZWQgZXRjLCBmb3IgRlRQIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BUCBvciBQT1AzIG9yIG90aGVycyEgKi8KKyAgY3VybF9mdHBhdXRoIGZ0cHNzbGF1dGg7IC8qIHdoYXQgQVVUSCBYWFggdG8gYmUgYXR0ZW1wdGVkICovCisgIGN1cmxfZnRwY2NjIGZ0cF9jY2M7ICAgLyogRlRQIENDQyBvcHRpb25zICovCisgIGJvb2wgbm9fc2lnbmFsOyAgICAgICAgLyogZG8gbm90IHVzZSBhbnkgc2lnbmFsL2FsYXJtIGhhbmRsZXIgKi8KKyAgYm9vbCBnbG9iYWxfZG5zX2NhY2hlOyAvKiBzdWJqZWN0IGZvciBmdXR1cmUgcmVtb3ZhbCAqLworICBib29sIHRjcF9ub2RlbGF5OyAgICAgIC8qIHdoZXRoZXIgdG8gZW5hYmxlIFRDUF9OT0RFTEFZIG9yIG5vdCAqLworICBib29sIGlnbm9yZWNsOyAgICAgICAgIC8qIGlnbm9yZSBjb250ZW50IGxlbmd0aCAqLworICBib29sIGZ0cF9za2lwX2lwOyAgICAgIC8qIHNraXAgdGhlIElQIGFkZHJlc3MgdGhlIEZUUCBzZXJ2ZXIgcGFzc2VzIG9uIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXMgKi8KKyAgYm9vbCBjb25uZWN0X29ubHk7ICAgICAvKiBtYWtlIGNvbm5lY3Rpb24sIGxldCBhcHBsaWNhdGlvbiB1c2UgdGhlIHNvY2tldCAqLworICBib29sIHNzbF9lbmFibGVfYmVhc3Q7IC8qIGVzcGVjaWFsbHkgYWxsb3cgdGhpcyBmbGF3IGZvciBpbnRlcm9wZXJhYmlsaXR5J3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWtlKi8KKyAgbG9uZyBzc2hfYXV0aF90eXBlczsgICAvKiBhbGxvd2VkIFNTSCBhdXRoIHR5cGVzICovCisgIGJvb2wgaHR0cF90ZV9za2lwOyAgICAgLyogcGFzcyB0aGUgcmF3IGJvZHkgZGF0YSB0byB0aGUgdXNlciwgZXZlbiB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXItZW5jb2RlZCAoY2h1bmtlZCwgY29tcHJlc3NlZCkgKi8KKyAgYm9vbCBodHRwX2NlX3NraXA7ICAgICAvKiBwYXNzIHRoZSByYXcgYm9keSBkYXRhIHRvIHRoZSB1c2VyLCBldmVuIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LWVuY29kZWQgKGNodW5rZWQsIGNvbXByZXNzZWQpICovCisgIGxvbmcgbmV3X2ZpbGVfcGVybXM7ICAgIC8qIFBlcm1pc3Npb25zIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHJlbW90ZSBmaWxlcyAqLworICBsb25nIG5ld19kaXJlY3RvcnlfcGVybXM7IC8qIFBlcm1pc3Npb25zIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHJlbW90ZSBkaXJzICovCisgIGJvb2wgcHJveHlfdHJhbnNmZXJfbW9kZTsgLyogc2V0IHRyYW5zZmVyIG1vZGUgKDt0eXBlPTxhfGk+KSB3aGVuIGRvaW5nIEZUUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpYSBhbiBIVFRQIHByb3h5ICovCisgIGNoYXIgKnN0cltTVFJJTkdfTEFTVF07IC8qIGFycmF5IG9mIHN0cmluZ3MsIHBvaW50aW5nIHRvIGFsbG9jYXRlZCBtZW1vcnkgKi8KKyAgdW5zaWduZWQgaW50IHNjb3BlOyAgICAvKiBhZGRyZXNzIHNjb3BlIGZvciBJUHY2ICovCisgIGxvbmcgYWxsb3dlZF9wcm90b2NvbHM7CisgIGxvbmcgcmVkaXJfcHJvdG9jb2xzOworI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgbG9uZyBzb2NrczVfZ3NzYXBpX25lYzsgLyogZmxhZyB0byBzdXBwb3J0IG5lYyBzb2NrczUgc2VydmVyICovCisjZW5kaWYKKyAgc3RydWN0IGN1cmxfc2xpc3QgKm1haWxfcmNwdDsgLyogbGlua2VkIGxpc3Qgb2YgbWFpbCByZWNpcGllbnRzICovCisgIC8qIENvbW1vbiBSVFNQIGhlYWRlciBvcHRpb25zICovCisgIEN1cmxfUnRzcFJlcSBydHNwcmVxOyAvKiBSVFNQIHJlcXVlc3QgdHlwZSAqLworICBsb25nIHJ0c3B2ZXJzaW9uOyAvKiBsaWtlIGh0dHB2ZXJzaW9uLCBmb3IgUlRTUCAqLworICBib29sIHdpbGRjYXJkbWF0Y2g7IC8qIGVuYWJsZSB3aWxkY2FyZCBtYXRjaGluZyAqLworICBjdXJsX2NodW5rX2Jnbl9jYWxsYmFjayBjaHVua19iZ247IC8qIGNhbGxlZCBiZWZvcmUgcGFydCBvZiB0cmFuc2ZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0cyAqLworICBjdXJsX2NodW5rX2VuZF9jYWxsYmFjayBjaHVua19lbmQ7IC8qIGNhbGxlZCBhZnRlciBwYXJ0IHRyYW5zZmVycmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BwZWQgKi8KKyAgY3VybF9mbm1hdGNoX2NhbGxiYWNrIGZubWF0Y2g7IC8qIGNhbGxiYWNrIHRvIGRlY2lkZSB3aGljaCBmaWxlIGNvcnJlc3BvbmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwYXR0ZXJuIChlLmcuIGlmIFdJTERDQVJETUFUQ0ggaXMgb24pICovCisgIHZvaWQgKmZubWF0Y2hfZGF0YTsKKworICBsb25nIGdzc2FwaV9kZWxlZ2F0aW9uOyAvKiBHU1NBUEkgY3JlZGVudGlhbCBkZWxlZ2F0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24gb2YgQ1VSTE9QVF9HU1NBUElfREVMRUdBVElPTiAqLworCisgIGJvb2wgdGNwX2tlZXBhbGl2ZTsgICAgLyogdXNlIFRDUCBrZWVwYWxpdmVzICovCisgIGxvbmcgdGNwX2tlZXBpZGxlOyAgICAgLyogc2Vjb25kcyBpbiBpZGxlIGJlZm9yZSBzZW5kaW5nIGtlZXBhbGl2ZSBwcm9iZSAqLworICBsb25nIHRjcF9rZWVwaW50dmw7ICAgIC8qIHNlY29uZHMgYmV0d2VlbiBUQ1Aga2VlcGFsaXZlIHByb2JlcyAqLworfTsKKworc3RydWN0IE5hbWVzIHsKKyAgc3RydWN0IGN1cmxfaGFzaCAqaG9zdGNhY2hlOworICBlbnVtIHsKKyAgICBIQ0FDSEVfTk9ORSwgICAgLyogbm90IHBvaW50aW5nIHRvIGFueXRoaW5nICovCisgICAgSENBQ0hFX1BSSVZBVEUsIC8qIHBvaW50cyB0byBvdXIgb3duICovCisgICAgSENBQ0hFX0dMT0JBTCwgIC8qIHBvaW50cyB0byB0aGUgKHNocnVnKSBnbG9iYWwgb25lICovCisgICAgSENBQ0hFX01VTFRJLCAgIC8qIHBvaW50cyB0byBhIHNoYXJlZCBvbmUgaW4gdGhlIG11bHRpIGhhbmRsZSAqLworICAgIEhDQUNIRV9TSEFSRUQgICAvKiBwb2ludHMgdG8gYSBzaGFyZWQgb25lIGluIGEgc2hhcmVkIG9iamVjdCAqLworICB9IGhvc3RjYWNoZXR5cGU7Cit9OworCisvKgorICogVGhlICdjb25uZWN0ZGF0YScgc3RydWN0IE1VU1QgaGF2ZSBhbGwgdGhlIGNvbm5lY3Rpb24gb3JpZW50ZWQgc3R1ZmYgYXMgd2UKKyAqIG1heSBoYXZlIHNldmVyYWwgc2ltdWx0YW5lb3VzIGNvbm5lY3Rpb25zIGFuZCBjb25uZWN0aW9uIHN0cnVjdHMgaW4gbWVtb3J5LgorICoKKyAqIFRoZSAnc3RydWN0IFVzZXJEZWZpbmVkJyBtdXN0IG9ubHkgY29udGFpbiBkYXRhIHRoYXQgaXMgc2V0IG9uY2UgdG8gZ28gZm9yCisgKiBtYW55IChwZXJoYXBzKSBpbmRlcGVuZGVudCBjb25uZWN0aW9ucy4gVmFsdWVzIHRoYXQgYXJlIGdlbmVyYXRlZCBvcgorICogY2FsY3VsYXRlZCBpbnRlcm5hbGx5IGZvciB0aGUgInNlc3Npb24gaGFuZGxlIiBtdXN0IGJlIGRlZmluZWQgd2l0aGluIHRoZQorICogJ3N0cnVjdCBVcmxTdGF0ZScgaW5zdGVhZC4KKyAqLworCitzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSB7CisgIHN0cnVjdCBOYW1lcyBkbnM7CisgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aTsgICAgLyogaWYgbm9uLU5VTEwsIHBvaW50cyB0byB0aGUgbXVsdGkgaGFuZGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRvIHdoaWNoIHRoaXMgImJlbG9uZ3MiICovCisgIHN0cnVjdCBDdXJsX29uZV9lYXN5ICptdWx0aV9wb3M7IC8qIGlmIG5vbi1OVUxMLCBwb2ludHMgdG8gaXRzIHBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG11bHRpIGNvbnRyb2xsaW5nIHN0cnVjdHVyZSB0byBhc3Npc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gcmVtb3ZhbC4gKi8KKyAgc3RydWN0IEN1cmxfc2hhcmUgKnNoYXJlOyAgICAvKiBTaGFyZSwgaGFuZGxlcyBnbG9iYWwgdmFyaWFibGUgbXV0ZXhpbmcgKi8KKyAgc3RydWN0IFNpbmdsZVJlcXVlc3QgcmVxOyAgICAvKiBSZXF1ZXN0LXNwZWNpZmljIGRhdGEgKi8KKyAgc3RydWN0IFVzZXJEZWZpbmVkIHNldDsgICAgICAvKiB2YWx1ZXMgc2V0IGJ5IHRoZSBsaWJjdXJsIHVzZXIgKi8KKyAgc3RydWN0IER5bmFtaWNTdGF0aWMgY2hhbmdlOyAvKiBwb3NzaWJseSBtb2RpZmllZCB1c2VyZGVmaW5lZCBkYXRhICovCisgIHN0cnVjdCBDb29raWVJbmZvICpjb29raWVzOyAgLyogdGhlIGNvb2tpZXMsIHJlYWQgZnJvbSBmaWxlcyBhbmQgc2VydmVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFIHRoYXQgdGhlICdjb29raWUnIGZpZWxkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJEZWZpbmVkIHN0cnVjdCBkZWZpbmVzIGlmIHRoZSAiZW5naW5lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIHVzZWQgb3Igbm90LiAqLworICBzdHJ1Y3QgUHJvZ3Jlc3MgcHJvZ3Jlc3M7ICAgIC8qIGZvciBhbGwgdGhlIHByb2dyZXNzIG1ldGVyIGRhdGEgKi8KKyAgc3RydWN0IFVybFN0YXRlIHN0YXRlOyAgICAgICAvKiBzdHJ1Y3QgZm9yIGZpZWxkcyB1c2VkIGZvciBzdGF0ZSBpbmZvIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIGR5bmFtaWMgcHVycG9zZXMgKi8KKyAgc3RydWN0IFdpbGRjYXJkRGF0YSB3aWxkY2FyZDsgLyogd2lsZGNhcmQgZG93bmxvYWQgc3RhdGUgaW5mbyAqLworICBzdHJ1Y3QgUHVyZUluZm8gaW5mbzsgICAgICAgIC8qIHN0YXRzLCByZXBvcnRzIGFuZCBpbmZvIGRhdGEgKi8KKyNpZiBkZWZpbmVkKENVUkxfRE9FU19DT05WRVJTSU9OUykgJiYgZGVmaW5lZChIQVZFX0lDT05WKQorICBpY29udl90IG91dGJvdW5kX2NkOyAgICAgICAgIC8qIGZvciB0cmFuc2xhdGluZyB0byB0aGUgbmV0d29yayBlbmNvZGluZyAqLworICBpY29udl90IGluYm91bmRfY2Q7ICAgICAgICAgIC8qIGZvciB0cmFuc2xhdGluZyBmcm9tIHRoZSBuZXR3b3JrIGVuY29kaW5nICovCisgIGljb252X3QgdXRmOF9jZDsgICAgICAgICAgICAgLyogZm9yIHRyYW5zbGF0aW5nIHRvIFVURjggKi8KKyNlbmRpZiAvKiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMgJiYgSEFWRV9JQ09OViAqLworICB1bnNpZ25lZCBpbnQgbWFnaWM7ICAgICAgICAgIC8qIHNldCB0byBhIENVUkxFQVNZX01BR0lDX05VTUJFUiAqLworfTsKKworI2RlZmluZSBMSUJDVVJMX05BTUUgImxpYmN1cmwiCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9VUkxEQVRBX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2xpYi92YzZsaWJjdXJsLmRzcCBiL2N1cmwtNy4yNS4wL2xpYi92YzZsaWJjdXJsLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODc1MDQzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3ZjNmxpYmN1cmwuZHNwCkBAIC0wLDAgKzEsOTM4IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImxpYmN1cmwiIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBTdGF0aWMgTGlicmFyeSIgMHgwMTA0DQorDQorQ0ZHPWxpYmN1cmwgLSBXaW4zMiBMSUIgRGVidWcNCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgImxpYmN1cmwubWFrIi4NCishTUVTU0FHRSANCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgImxpYmN1cmwubWFrIiBDRkc9ImxpYmN1cmwgLSBXaW4zMiBMSUIgRGVidWciDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgImxpYmN1cmwgLSBXaW4zMiBETEwgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJsaWJjdXJsIC0gV2luMzIgRExMIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJsaWJjdXJsIC0gV2luMzIgTElCIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCishTUVTU0FHRSAibGliY3VybCAtIFdpbjMyIExJQiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KKw0KKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmN1cmwgLSBXaW4zMiBETEwgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRExMLURlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRMTC1EZWJ1ZyINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiRExMLURlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJETEwtRGVidWciDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KK0NQUD1jbC5leGUNCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLiIgL0kgIi4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9NQkNTIiAvRCAiQlVJTERJTkdfTElCQ1VSTCIgL0ZEIC9HWiAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9NQkNTIiAvRCAiQlVJTERJTkdfTElCQ1VSTCIgL0ZEIC9HWiAvYw0KK01UTD1taWRsLmV4ZQ0KKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCitSU0M9cmMuZXhlDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgd3MyXzMyLmxpYiB3bGRhcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2luY3JlbWVudGFsOm5vIC9tYXAgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiRExMLURlYnVnL2xpYmN1cmxkLmRsbCIgL2ltcGxpYjoiRExMLURlYnVnL2xpYmN1cmxkX2ltcC5saWIiIC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHdzMl8zMi5saWIgd2xkYXAzMi5saWIgL25vbG9nbyAvZGxsIC9pbmNyZW1lbnRhbDpubyAvbWFwIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6IkRMTC1EZWJ1Zy9saWJjdXJsZC5kbGwiIC9pbXBsaWI6IkRMTC1EZWJ1Zy9saWJjdXJsZF9pbXAubGliIiAvcGRidHlwZTpzZXB0DQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmN1cmwgLSBXaW4zMiBETEwgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJETEwtUmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJETEwtUmVsZWFzZSINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgT3V0cHV0X0RpciAiRExMLVJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRMTC1SZWxlYXNlIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCitDUFA9Y2wuZXhlDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4iIC9JICIuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfTUJDUyIgL0QgIkJVSUxESU5HX0xJQkNVUkwiIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLiIgL0kgIi4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9NQkNTIiAvRCAiQlVJTERJTkdfTElCQ1VSTCIgL0ZEIC9jDQorTVRMPW1pZGwuZXhlDQorIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KK1JTQz1yYy5leGUNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB3czJfMzIubGliIHdsZGFwMzIubGliIC9ub2xvZ28gL2RsbCAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJETEwtUmVsZWFzZS9saWJjdXJsLmRsbCIgL2ltcGxpYjoiRExMLVJlbGVhc2UvbGliY3VybF9pbXAubGliIg0KKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgd3MyXzMyLmxpYiB3bGRhcDMyLmxpYiAvbm9sb2dvIC9kbGwgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiRExMLVJlbGVhc2UvbGliY3VybC5kbGwiIC9pbXBsaWI6IkRMTC1SZWxlYXNlL2xpYmN1cmxfaW1wLmxpYiINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAibGliY3VybCAtIFdpbjMyIExJQiBEZWJ1ZyINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJMSUItRGVidWciDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiTElCLURlYnVnIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICJMSUItRGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkxJQi1EZWJ1ZyINCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KK0NQUD1jbC5leGUNCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLiIgL0kgIi4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9NQkNTIiAvRCAiQlVJTERJTkdfTElCQ1VSTCIgL0QgIkNVUkxfU1RBVElDTElCIiAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX01CQ1MiIC9EICJCVUlMRElOR19MSUJDVVJMIiAvRCAiQ1VSTF9TVEFUSUNMSUIiIC9GRCAvR1ogL2MNCitSU0M9cmMuZXhlDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSUIzMj1saW5rLmV4ZSAtbGliDQorIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6IkxJQi1EZWJ1Zy9saWJjdXJsZC5saWIiIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6IkxJQi1EZWJ1Zy9saWJjdXJsZC5saWIiIC9tYWNoaW5lOkkzODYNCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAibGliY3VybCAtIFdpbjMyIExJQiBSZWxlYXNlIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkxJQi1SZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkxJQi1SZWxlYXNlIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICJMSUItUmVsZWFzZSINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiTElCLVJlbGVhc2UiDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCitDUFA9Y2wuZXhlDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4iIC9JICIuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfTUJDUyIgL0QgIkJVSUxESU5HX0xJQkNVUkwiIC9EICJDVVJMX1NUQVRJQ0xJQiIgL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuIiAvSSAiLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX01CQ1MiIC9EICJCVUlMRElOR19MSUJDVVJMIiAvRCAiQ1VSTF9TVEFUSUNMSUIiIC9GRCAvYw0KK1JTQz1yYy5leGUNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJQjMyPWxpbmsuZXhlIC1saWINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiTElCLVJlbGVhc2UvbGliY3VybC5saWIiIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6IkxJQi1SZWxlYXNlL2xpYmN1cmwubGliIiAvbWFjaGluZTpJMzg2DQorDQorIUVORElGIA0KKw0KKyMgQmVnaW4gVGFyZ2V0DQorDQorIyBOYW1lICJsaWJjdXJsIC0gV2luMzIgRExMIERlYnVnIg0KKyMgTmFtZSAibGliY3VybCAtIFdpbjMyIERMTCBSZWxlYXNlIg0KKyMgTmFtZSAibGliY3VybCAtIFdpbjMyIExJQiBEZWJ1ZyINCisjIE5hbWUgImxpYmN1cmwgLSBXaW4zMiBMSUIgUmVsZWFzZSINCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGFzeW4tYXJlcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cYXN5bi10aHJlYWQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGF4dGxzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxiYXNlNjQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGNvbm5lY3QuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGNvbnRlbnRfZW5jb2RpbmcuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGNvb2tpZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9hZGRyaW5mby5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9mbm1hdGNoLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX2dldGhvc3RuYW1lLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX2dzc2FwaS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9tZW1yY2hyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX250bG0uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfbnRsbV9jb3JlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX250bG1fbXNncy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9udGxtX3diLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX3JhbmQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfcnRtcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9zc3BpLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX3RocmVhZHMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN5YXNzbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZGljdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZWFzeS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZXNjYXBlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxmaWxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxmaWxlaW5mby5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZm9ybWRhdGEuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGZ0cC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZnRwbGlzdHBhcnNlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZ2V0ZW52LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxnZXRpbmZvLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxnb3BoZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGd0bHMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGhhc2guYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGhtYWMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGhvc3Rhc3luLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxob3N0aXA0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxob3N0aXA2LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxob3N0aXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGhvc3RzeW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGh0dHAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGh0dHBfY2h1bmtzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxodHRwX2RpZ2VzdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caHR0cF9uZWdvdGlhdGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGh0dHBfbmVnb3RpYXRlX3NzcGkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGh0dHBfcHJveHkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGlkbl93aW4zMi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caWYyaXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGltYXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGluZXRfbnRvcC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caW5ldF9wdG9uLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxrcmI0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxrcmI1LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxsZGFwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxsbGlzdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbWQ0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxtZDUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXG1lbWRlYnVnLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxtcHJpbnRmLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxtdWx0aS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbmV0cmMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXG5vbi1hc2NpaS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbm9uYmxvY2suYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXG5zcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cb3BlbmxkYXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHBhcnNlZGF0ZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ccGluZ3BvbmcuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHBvbGFyc3NsLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxwb3AzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxwcm9ncmVzcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ccXNzbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ccmF3c3RyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxydHNwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzZWN1cml0eS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc2VsZWN0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzZW5kZi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc2hhcmUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNsaXN0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzbXRwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxzb2Nrcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc29ja3NfZ3NzYXBpLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxzb2Nrc19zc3BpLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzcGVlZGNoZWNrLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzcGxheS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3NoLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxzc2xnZW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNzbHVzZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3RyZHVwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzdHJlcXVhbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3RyZXJyb3IuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHN0cnRvay5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3RydG9vZmZ0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0ZWxuZXQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRmdHAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRpbWV2YWwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRyYW5zZmVyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx1cmwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHZlcnNpb24uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHdhcm5sZXNzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx3aWxkY2FyZC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cYXJwYV90ZWxuZXQuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGFzeW4uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGF4dGxzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxjb25maWctd2luMzIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGNvbm5lY3QuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGNvbnRlbnRfZW5jb2RpbmcuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGNvb2tpZS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9hZGRyaW5mby5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9iYXNlNjQuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfZm5tYXRjaC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9nZXRob3N0bmFtZS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9nc3NhcGkuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfaG1hYy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9sZGFwLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX21kNC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9tZDUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfbWVtb3J5LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX21lbXJjaHIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfbnRsbV9jb3JlLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX250bG0uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfbnRsbV9tc2dzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX250bG1fd2IuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfcmFuZC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybF9ydG1wLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxjdXJsX3NzcGkuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmxfdGhyZWFkcy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cY3VybHguaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN5YXNzbC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZGljdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZWFzeWlmLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxlc2NhcGUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGZpbGUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGZpbGVpbmZvLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxmb3JtZGF0YS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cZnRwLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxmdHBsaXN0cGFyc2VyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxnZXRpbmZvLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxnb3BoZXIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGd0bHMuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGhhc2guaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGhvc3RpcC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caHR0cF9jaHVua3MuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGh0dHBfZGlnZXN0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxodHRwLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxodHRwX25lZ290aWF0ZS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caHR0cF9wcm94eS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caWYyaXAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGltYXAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGluZXRfbnRvcC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5caW5ldF9wdG9uLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxrcmI0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxsbGlzdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbWVtZGVidWcuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXG11bHRpaWYuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXG5ldHJjLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxub24tYXNjaWkuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXG5vbmJsb2NrLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxuc3NnLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxwYXJzZWRhdGUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHBpbmdwb25nLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxwb2xhcnNzbC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ccG9wMy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ccHJvZ3Jlc3MuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHFzc2wuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHJhd3N0ci5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5ccnRzcC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc2VsZWN0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzZW5kZi5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc2V0dXAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNldHVwX29uY2UuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNoYXJlLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzbGlzdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc210cC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc29ja2FkZHIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNvY2tzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzcGVlZGNoZWNrLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzcGxheS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3NoLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llxzc2xnZW4uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHNzbHVzZS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3RyZHVwLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxzdHJlcXVhbC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3RyZXJyb3IuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHN0cnRvay5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc3RydG9vZmZ0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0ZWxuZXQuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRmdHAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRpbWV2YWwuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRyYW5zZmVyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx1cmxkYXRhLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx1cmwuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHdhcm5sZXNzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx3aWxkY2FyZC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKw0KKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxsaWJjdXJsLnJjDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgRW5kIFRhcmdldA0KKyMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWIvdmM2bGliY3VybC5kc3cgYi9jdXJsLTcuMjUuMC9saWIvdmM2bGliY3VybC5kc3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhODgxNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi92YzZsaWJjdXJsLmRzdwpAQCAtMCwwICsxLDI5IEBACitNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJsaWJjdXJsIj0iLlx2YzZsaWJjdXJsLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorR2xvYmFsOg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08Mz4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3ZlcnNpb24uYyBiL2N1cmwtNy4yNS4wL2xpYi92ZXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2YWQzOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL2xpYi92ZXJzaW9uLmMKQEAgLTAsMCArMSwzMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJzc2xnZW4uaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSB0aGUgaW50ZXJuYWwgKnByaW50ZigpIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaWZkZWYgVVNFX0FSRVMKKyMgIGlmIGRlZmluZWQoQ1VSTF9TVEFUSUNMSUIpICYmICFkZWZpbmVkKENBUkVTX1NUQVRJQ0xJQikgJiYgXAorICAgICAoZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19TWU1CSUFOMzJfXykpCisjICAgIGRlZmluZSBDQVJFU19TVEFUSUNMSUIKKyMgIGVuZGlmCisjICBpbmNsdWRlIDxhcmVzLmg+CisjZW5kaWYKKworI2lmZGVmIFVTRV9MSUJJRE4KKyNpbmNsdWRlIDxzdHJpbmdwcmVwLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9JQ09OVikgJiYgZGVmaW5lZChDVVJMX0RPRVNfQ09OVkVSU0lPTlMpCisjaW5jbHVkZSA8aWNvbnYuaD4KKyNlbmRpZgorCisjaWZkZWYgVVNFX0xJQlJUTVAKKyNpbmNsdWRlIDxsaWJydG1wL3J0bXAuaD4KKyNlbmRpZgorCisjaWZkZWYgVVNFX0xJQlNTSDIKKyNpbmNsdWRlIDxsaWJzc2gyLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTElCU1NIMl9WRVJTSU9OCisvKiBnZXQgaXQgcnVuLXRpbWUgaWYgcG9zc2libGUgKi8KKyNkZWZpbmUgQ1VSTF9MSUJTU0gyX1ZFUlNJT04gbGlic3NoMl92ZXJzaW9uKDApCisjZWxzZQorLyogdXNlIGJ1aWxkLXRpbWUgaWYgcnVuLXRpbWUgbm90IHBvc3NpYmxlICovCisjZGVmaW5lIENVUkxfTElCU1NIMl9WRVJTSU9OIExJQlNTSDJfVkVSU0lPTgorI2VuZGlmCisKK2NoYXIgKmN1cmxfdmVyc2lvbih2b2lkKQoreworICBzdGF0aWMgY2hhciB2ZXJzaW9uWzIwMF07CisgIGNoYXIgKnB0cj12ZXJzaW9uOworICBzaXplX3QgbGVuOworICBzaXplX3QgbGVmdCA9IHNpemVvZih2ZXJzaW9uKTsKKyAgc3RyY3B5KHB0ciwgTElCQ1VSTF9OQU1FICIvIiBMSUJDVVJMX1ZFUlNJT04gKTsKKyAgbGVuID0gc3RybGVuKHB0cik7CisgIGxlZnQgLT0gbGVuOworICBwdHIgKz0gbGVuOworCisgIGlmKGxlZnQgPiAxKSB7CisgICAgbGVuID0gQ3VybF9zc2xfdmVyc2lvbihwdHIgKyAxLCBsZWZ0IC0gMSk7CisKKyAgICBpZihsZW4gPiAwKSB7CisgICAgICAqcHRyID0gJyAnOworICAgICAgbGVmdCAtPSArK2xlbjsKKyAgICAgIHB0ciArPSBsZW47CisgICAgfQorICB9CisKKyNpZmRlZiBIQVZFX0xJQloKKyAgbGVuID0gc25wcmludGYocHRyLCBsZWZ0LCAiIHpsaWIvJXMiLCB6bGliVmVyc2lvbigpKTsKKyAgbGVmdCAtPSBsZW47CisgIHB0ciArPSBsZW47CisjZW5kaWYKKyNpZmRlZiBVU0VfQVJFUworICAvKiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgcHJlc2VudCBpbiBjLWFyZXMsIG5vdCBpbiB0aGUgb3JpZ2luYWwgYXJlcyAqLworICBsZW4gPSBzbnByaW50ZihwdHIsIGxlZnQsICIgYy1hcmVzLyVzIiwgYXJlc192ZXJzaW9uKE5VTEwpKTsKKyAgbGVmdCAtPSBsZW47CisgIHB0ciArPSBsZW47CisjZW5kaWYKKyNpZmRlZiBVU0VfTElCSUROCisgIGlmKHN0cmluZ3ByZXBfY2hlY2tfdmVyc2lvbihMSUJJRE5fUkVRVUlSRURfVkVSU0lPTikpIHsKKyAgICBsZW4gPSBzbnByaW50ZihwdHIsIGxlZnQsICIgbGliaWRuLyVzIiwgc3RyaW5ncHJlcF9jaGVja192ZXJzaW9uKE5VTEwpKTsKKyAgICBsZWZ0IC09IGxlbjsKKyAgICBwdHIgKz0gbGVuOworICB9CisjZW5kaWYKKyNpZmRlZiBVU0VfV0lOMzJfSUROCisgIGxlbiA9IHNucHJpbnRmKHB0ciwgbGVmdCwgIiBJRE4tV2luZG93cy1uYXRpdmUiKTsKKyAgbGVmdCAtPSBsZW47CisgIHB0ciArPSBsZW47CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfSUNPTlYpICYmIGRlZmluZWQoQ1VSTF9ET0VTX0NPTlZFUlNJT05TKQorI2lmZGVmIF9MSUJJQ09OVl9WRVJTSU9OCisgIGxlbiA9IHNucHJpbnRmKHB0ciwgbGVmdCwgIiBpY29udi8lZC4lZCIsCisgICAgICAgICAgICAgICAgIF9MSUJJQ09OVl9WRVJTSU9OID4+IDgsIF9MSUJJQ09OVl9WRVJTSU9OICYgMjU1KTsKKyNlbHNlCisgIC8qIHZlcnNpb24gdW5rbm93biAqLworICBsZW4gPSBzbnByaW50ZihwdHIsIGxlZnQsICIgaWNvbnYiKTsKKyNlbmRpZiAvKiBfTElCSUNPTlZfVkVSU0lPTiAqLworICBsZWZ0IC09IGxlbjsKKyAgcHRyICs9IGxlbjsKKyNlbmRpZgorI2lmZGVmIFVTRV9MSUJTU0gyCisgIGxlbiA9IHNucHJpbnRmKHB0ciwgbGVmdCwgIiBsaWJzc2gyLyVzIiwgQ1VSTF9MSUJTU0gyX1ZFUlNJT04pOworICBsZWZ0IC09IGxlbjsKKyAgcHRyICs9IGxlbjsKKyNlbmRpZgorI2lmZGVmIFVTRV9MSUJSVE1QCisgIHsKKyAgICBjaGFyIHN1ZmZbMl07CisgICAgaWYoUlRNUF9MSUJfVkVSU0lPTiAmIDB4ZmYpIHsKKyAgICAgIHN1ZmZbMF0gPSAoUlRNUF9MSUJfVkVSU0lPTiAmIDB4ZmYpICsgJ2EnIC0gMTsKKyAgICAgIHN1ZmZbMV0gPSAnXDAnOworICAgIH0KKyAgICBlbHNlCisgICAgICBzdWZmWzBdID0gJ1wwJzsKKworICAgIGxlbiA9IHNucHJpbnRmKHB0ciwgbGVmdCwgIiBsaWJydG1wLyVkLiVkJXMiLAorICAgICAgUlRNUF9MSUJfVkVSU0lPTiA+PiAxNiwgKFJUTVBfTElCX1ZFUlNJT04gPj4gOCkgJiAweGZmLCBzdWZmKTsKKy8qCisgIElmIGFub3RoZXIgbGliIHZlcnNpb24gaXMgYWRkZWQgYmVsb3cgdGhpcyBvbmUsIHRoaXMgY29kZSB3b3VsZAorICBhbHNvIGhhdmUgdG8gZG86CisKKyAgICBsZWZ0IC09IGxlbjsKKyAgICBwdHIgKz0gbGVuOworKi8KKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIHZlcnNpb247Cit9CisKKy8qIGRhdGEgZm9yIGN1cmxfdmVyc2lvbl9pbmZvCisKKyAgIEtlZXAgdGhlIGxpc3Qgc29ydGVkIGFscGhhYmV0aWNhbGx5LiBJdCBpcyBhbHNvIHdyaXR0ZW4gc28gdGhhdCBlYWNoCisgICBwcm90b2NvbCBsaW5lIGhhcyBpdHMgb3duICNpZiBsaW5lIHRvIG1ha2UgdGhpbmdzIGVhc2llciBvbiB0aGUgZXllLgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJvdG9jb2xzW10gPSB7CisjaWZuZGVmIENVUkxfRElTQUJMRV9ESUNUCisgICJkaWN0IiwKKyNlbmRpZgorI2lmbmRlZiBDVVJMX0RJU0FCTEVfRklMRQorICAiZmlsZSIsCisjZW5kaWYKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0ZUUAorICAiZnRwIiwKKyNlbmRpZgorI2lmIGRlZmluZWQoVVNFX1NTTCkgJiYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0ZUUCkKKyAgImZ0cHMiLAorI2VuZGlmCisjaWZuZGVmIENVUkxfRElTQUJMRV9HT1BIRVIKKyAgImdvcGhlciIsCisjZW5kaWYKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKKyAgImh0dHAiLAorI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfU1NMKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfSFRUUCkKKyAgImh0dHBzIiwKKyNlbmRpZgorI2lmbmRlZiBDVVJMX0RJU0FCTEVfSU1BUAorICAiaW1hcCIsCisjZW5kaWYKKyNpZiBkZWZpbmVkKFVTRV9TU0wpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9JTUFQKQorICAiaW1hcHMiLAorI2VuZGlmCisjaWZuZGVmIENVUkxfRElTQUJMRV9MREFQCisgICJsZGFwIiwKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfTERBUFMpICYmIFwKKyAgICAoKGRlZmluZWQoVVNFX09QRU5MREFQKSAmJiBkZWZpbmVkKFVTRV9TU0wpKSB8fCBcCisgICAgICghZGVmaW5lZChVU0VfT1BFTkxEQVApICYmIGRlZmluZWQoSEFWRV9MREFQX1NTTCkpKQorICAibGRhcHMiLAorI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BPUDMKKyAgInBvcDMiLAorI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfU1NMKSAmJiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfUE9QMykKKyAgInBvcDNzIiwKKyNlbmRpZgorI2lmZGVmIFVTRV9MSUJSVE1QCisgICJydG1wIiwKKyNlbmRpZgorI2lmbmRlZiBDVVJMX0RJU0FCTEVfUlRTUAorICAicnRzcCIsCisjZW5kaWYKKyNpZmRlZiBVU0VfTElCU1NIMgorICAic2NwIiwKKyNlbmRpZgorI2lmZGVmIFVTRV9MSUJTU0gyCisgICJzZnRwIiwKKyNlbmRpZgorI2lmbmRlZiBDVVJMX0RJU0FCTEVfU01UUAorICAic210cCIsCisjZW5kaWYKKyNpZiBkZWZpbmVkKFVTRV9TU0wpICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9TTVRQKQorICAic210cHMiLAorI2VuZGlmCisjaWZuZGVmIENVUkxfRElTQUJMRV9URUxORVQKKyAgInRlbG5ldCIsCisjZW5kaWYKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX1RGVFAKKyAgInRmdHAiLAorI2VuZGlmCisKKyAgTlVMTAorfTsKKworc3RhdGljIGN1cmxfdmVyc2lvbl9pbmZvX2RhdGEgdmVyc2lvbl9pbmZvID0geworICBDVVJMVkVSU0lPTl9OT1csCisgIExJQkNVUkxfVkVSU0lPTiwKKyAgTElCQ1VSTF9WRVJTSU9OX05VTSwKKyAgT1MsIC8qIGFzIGZvdW5kIGJ5IGNvbmZpZ3VyZSBvciBzZXQgYnkgaGFuZCBhdCBidWlsZC10aW1lICovCisgIDAgLyogZmVhdHVyZXMgaXMgMCBieSBkZWZhdWx0ICovCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgfCBDVVJMX1ZFUlNJT05fSVBWNgorI2VuZGlmCisjaWZkZWYgSEFWRV9LUkI0CisgIHwgQ1VSTF9WRVJTSU9OX0tFUkJFUk9TNAorI2VuZGlmCisjaWZkZWYgVVNFX1NTTAorICB8IENVUkxfVkVSU0lPTl9TU0wKKyNlbmRpZgorI2lmZGVmIFVTRV9OVExNCisgIHwgQ1VSTF9WRVJTSU9OX05UTE0KKyNlbmRpZgorI2lmIGRlZmluZWQoVVNFX05UTE0pICYmIGRlZmluZWQoTlRMTV9XQl9FTkFCTEVEKQorICB8IENVUkxfVkVSU0lPTl9OVExNX1dCCisjZW5kaWYKKyNpZmRlZiBVU0VfV0lORE9XU19TU1BJCisgIHwgQ1VSTF9WRVJTSU9OX1NTUEkKKyNlbmRpZgorI2lmZGVmIEhBVkVfTElCWgorICB8IENVUkxfVkVSU0lPTl9MSUJaCisjZW5kaWYKKyNpZmRlZiBVU0VfSFRUUF9ORUdPVElBVEUKKyAgfCBDVVJMX1ZFUlNJT05fR1NTTkVHT1RJQVRFCisjZW5kaWYKKyNpZmRlZiBERUJVR0JVSUxECisgIHwgQ1VSTF9WRVJTSU9OX0RFQlVHCisjZW5kaWYKKyNpZmRlZiBDVVJMREVCVUcKKyAgfCBDVVJMX1ZFUlNJT05fQ1VSTERFQlVHCisjZW5kaWYKKyNpZmRlZiBDVVJMUkVTX0FTWU5DSAorICB8IENVUkxfVkVSU0lPTl9BU1lOQ0hETlMKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1BORUdPCisgIHwgQ1VSTF9WRVJTSU9OX1NQTkVHTworI2VuZGlmCisjaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPiA0KSAmJiBcCisgICAgKCAoU0laRU9GX09GRl9UID4gNCkgfHwgZGVmaW5lZChVU0VfV0lOMzJfTEFSR0VfRklMRVMpICkKKyAgfCBDVVJMX1ZFUlNJT05fTEFSR0VGSUxFCisjZW5kaWYKKyNpZiBkZWZpbmVkKENVUkxfRE9FU19DT05WRVJTSU9OUykKKyAgfCBDVVJMX1ZFUlNJT05fQ09OVgorI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfVExTX1NSUCkKKyAgfCBDVVJMX1ZFUlNJT05fVExTQVVUSF9TUlAKKyNlbmRpZgorICAsCisgIE5VTEwsIC8qIHNzbF92ZXJzaW9uICovCisgIDAsICAgIC8qIHNzbF92ZXJzaW9uX251bSwgdGhpcyBpcyBrZXB0IGF0IHplcm8gKi8KKyAgTlVMTCwgLyogemxpYl92ZXJzaW9uICovCisgIHByb3RvY29scywKKyAgTlVMTCwgLyogYy1hcmVzIHZlcnNpb24gKi8KKyAgMCwgICAgLyogYy1hcmVzIHZlcnNpb24gbnVtZXJpY2FsICovCisgIE5VTEwsIC8qIGxpYmlkbiB2ZXJzaW9uICovCisgIDAsICAgIC8qIGljb252IHZlcnNpb24gKi8KKyAgTlVMTCwgLyogc3NoIGxpYiB2ZXJzaW9uICovCit9OworCitjdXJsX3ZlcnNpb25faW5mb19kYXRhICpjdXJsX3ZlcnNpb25faW5mbyhDVVJMdmVyc2lvbiBzdGFtcCkKK3sKKyNpZmRlZiBVU0VfTElCU1NIMgorICBzdGF0aWMgY2hhciBzc2hfYnVmZmVyWzgwXTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX1NTTAorICBzdGF0aWMgY2hhciBzc2xfYnVmZmVyWzgwXTsKKyAgQ3VybF9zc2xfdmVyc2lvbihzc2xfYnVmZmVyLCBzaXplb2Yoc3NsX2J1ZmZlcikpOworICB2ZXJzaW9uX2luZm8uc3NsX3ZlcnNpb24gPSBzc2xfYnVmZmVyOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xJQloKKyAgdmVyc2lvbl9pbmZvLmxpYnpfdmVyc2lvbiA9IHpsaWJWZXJzaW9uKCk7CisgIC8qIGxpYnogbGVmdCBOVUxMIGlmIG5vbi1leGlzdGluZyAqLworI2VuZGlmCisjaWZkZWYgVVNFX0FSRVMKKyAgeworICAgIGludCBhcmVzbnVtOworICAgIHZlcnNpb25faW5mby5hcmVzID0gYXJlc192ZXJzaW9uKCZhcmVzbnVtKTsKKyAgICB2ZXJzaW9uX2luZm8uYXJlc19udW0gPSBhcmVzbnVtOworICB9CisjZW5kaWYKKyNpZmRlZiBVU0VfTElCSUROCisgIC8qIFRoaXMgcmV0dXJucyBhIHZlcnNpb24gc3RyaW5nIGlmIHdlIHVzZSB0aGUgZ2l2ZW4gdmVyc2lvbiBvciBsYXRlciwKKyAgICAgb3RoZXJ3aXNlIGl0IHJldHVybnMgTlVMTCAqLworICB2ZXJzaW9uX2luZm8ubGliaWRuID0gc3RyaW5ncHJlcF9jaGVja192ZXJzaW9uKExJQklETl9SRVFVSVJFRF9WRVJTSU9OKTsKKyAgaWYodmVyc2lvbl9pbmZvLmxpYmlkbikKKyAgICB2ZXJzaW9uX2luZm8uZmVhdHVyZXMgfD0gQ1VSTF9WRVJTSU9OX0lETjsKKyNlbGlmIGRlZmluZWQoVVNFX1dJTjMyX0lETikKKyAgdmVyc2lvbl9pbmZvLmZlYXR1cmVzIHw9IENVUkxfVkVSU0lPTl9JRE47CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9JQ09OVikgJiYgZGVmaW5lZChDVVJMX0RPRVNfQ09OVkVSU0lPTlMpCisjaWZkZWYgX0xJQklDT05WX1ZFUlNJT04KKyAgdmVyc2lvbl9pbmZvLmljb252X3Zlcl9udW0gPSBfTElCSUNPTlZfVkVSU0lPTjsKKyNlbHNlCisgIC8qIHZlcnNpb24gdW5rbm93biAqLworICB2ZXJzaW9uX2luZm8uaWNvbnZfdmVyX251bSA9IC0xOworI2VuZGlmIC8qIF9MSUJJQ09OVl9WRVJTSU9OICovCisjZW5kaWYKKworI2lmZGVmIFVTRV9MSUJTU0gyCisgIHNucHJpbnRmKHNzaF9idWZmZXIsIHNpemVvZihzc2hfYnVmZmVyKSwgImxpYnNzaDIvJXMiLCBMSUJTU0gyX1ZFUlNJT04pOworICB2ZXJzaW9uX2luZm8ubGlic3NoX3ZlcnNpb24gPSBzc2hfYnVmZmVyOworI2VuZGlmCisKKyAgKHZvaWQpc3RhbXA7IC8qIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLCB3ZSBkb24ndCB1c2UgdGhpcyAqLworCisgIHJldHVybiAmdmVyc2lvbl9pbmZvOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3dhcm5sZXNzLmMgYi9jdXJsLTcuMjUuMC9saWIvd2Fybmxlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDE0OTBiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3dhcm5sZXNzLmMKQEAgLTAsMCArMSw0MDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgZGVmaW5lZChfX3VuaXhfXykKKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorIyAgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorIyAgaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9fSU5URUxfQ09NUElMRVIgJiYgX191bml4X18gKi8KKworI2RlZmluZSBCVUlMRElOR19XQVJOTEVTU19DIDEKKworI2luY2x1ZGUgIndhcm5sZXNzLmgiCisKKyNkZWZpbmUgQ1VSTF9NQVNLX1NDSEFSICAweDdGCisjZGVmaW5lIENVUkxfTUFTS19VQ0hBUiAgMHhGRgorCisjaWYgKFNJWkVPRl9TSE9SVCA9PSAyKQorIyAgZGVmaW5lIENVUkxfTUFTS19TU0hPUlQgIDB4N0ZGRgorIyAgZGVmaW5lIENVUkxfTUFTS19VU0hPUlQgIDB4RkZGRgorI2VsaWYgKFNJWkVPRl9TSE9SVCA9PSA0KQorIyAgZGVmaW5lIENVUkxfTUFTS19TU0hPUlQgIDB4N0ZGRkZGRkYKKyMgIGRlZmluZSBDVVJMX01BU0tfVVNIT1JUICAweEZGRkZGRkZGCisjZWxpZiAoU0laRU9GX1NIT1JUID09IDgpCisjICBkZWZpbmUgQ1VSTF9NQVNLX1NTSE9SVCAgMHg3RkZGRkZGRkZGRkZGRkZGCisjICBkZWZpbmUgQ1VSTF9NQVNLX1VTSE9SVCAgMHhGRkZGRkZGRkZGRkZGRkZGCisjZWxzZQorIyAgZXJyb3IgIlNJWkVPRl9TSE9SVCBub3QgZGVmaW5lZCIKKyNlbmRpZgorCisjaWYgKFNJWkVPRl9JTlQgPT0gMikKKyMgIGRlZmluZSBDVVJMX01BU0tfU0lOVCAgMHg3RkZGCisjICBkZWZpbmUgQ1VSTF9NQVNLX1VJTlQgIDB4RkZGRgorI2VsaWYgKFNJWkVPRl9JTlQgPT0gNCkKKyMgIGRlZmluZSBDVVJMX01BU0tfU0lOVCAgMHg3RkZGRkZGRgorIyAgZGVmaW5lIENVUkxfTUFTS19VSU5UICAweEZGRkZGRkZGCisjZWxpZiAoU0laRU9GX0lOVCA9PSA4KQorIyAgZGVmaW5lIENVUkxfTUFTS19TSU5UICAweDdGRkZGRkZGRkZGRkZGRkYKKyMgIGRlZmluZSBDVVJMX01BU0tfVUlOVCAgMHhGRkZGRkZGRkZGRkZGRkZGCisjZWxpZiAoU0laRU9GX0lOVCA9PSAxNikKKyMgIGRlZmluZSBDVVJMX01BU0tfU0lOVCAgMHg3RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgorIyAgZGVmaW5lIENVUkxfTUFTS19VSU5UICAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCisjZWxzZQorIyAgZXJyb3IgIlNJWkVPRl9JTlQgbm90IGRlZmluZWQiCisjZW5kaWYKKworI2lmIChDVVJMX1NJWkVPRl9MT05HID09IDIpCisjICBkZWZpbmUgQ1VSTF9NQVNLX1NMT05HICAweDdGRkZMCisjICBkZWZpbmUgQ1VSTF9NQVNLX1VMT05HICAweEZGRkZVTAorI2VsaWYgKENVUkxfU0laRU9GX0xPTkcgPT0gNCkKKyMgIGRlZmluZSBDVVJMX01BU0tfU0xPTkcgIDB4N0ZGRkZGRkZMCisjICBkZWZpbmUgQ1VSTF9NQVNLX1VMT05HICAweEZGRkZGRkZGVUwKKyNlbGlmIChDVVJMX1NJWkVPRl9MT05HID09IDgpCisjICBkZWZpbmUgQ1VSTF9NQVNLX1NMT05HICAweDdGRkZGRkZGRkZGRkZGRkZMCisjICBkZWZpbmUgQ1VSTF9NQVNLX1VMT05HICAweEZGRkZGRkZGRkZGRkZGRkZVTAorI2VsaWYgKENVUkxfU0laRU9GX0xPTkcgPT0gMTYpCisjICBkZWZpbmUgQ1VSTF9NQVNLX1NMT05HICAweDdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGTAorIyAgZGVmaW5lIENVUkxfTUFTS19VTE9ORyAgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRlVMCisjZWxzZQorIyAgZXJyb3IgIkNVUkxfU0laRU9GX0xPTkcgbm90IGRlZmluZWQiCisjZW5kaWYKKworI2lmIChDVVJMX1NJWkVPRl9DVVJMX09GRl9UID09IDIpCisjICBkZWZpbmUgQ1VSTF9NQVNLX1NDT0ZGVCAgQ1VSTF9PRkZfVF9DKDB4N0ZGRikKKyMgIGRlZmluZSBDVVJMX01BU0tfVUNPRkZUICBDVVJMX09GRl9UVV9DKDB4RkZGRikKKyNlbGlmIChDVVJMX1NJWkVPRl9DVVJMX09GRl9UID09IDQpCisjICBkZWZpbmUgQ1VSTF9NQVNLX1NDT0ZGVCAgQ1VSTF9PRkZfVF9DKDB4N0ZGRkZGRkYpCisjICBkZWZpbmUgQ1VSTF9NQVNLX1VDT0ZGVCAgQ1VSTF9PRkZfVFVfQygweEZGRkZGRkZGKQorI2VsaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPT0gOCkKKyMgIGRlZmluZSBDVVJMX01BU0tfU0NPRkZUICBDVVJMX09GRl9UX0MoMHg3RkZGRkZGRkZGRkZGRkZGKQorIyAgZGVmaW5lIENVUkxfTUFTS19VQ09GRlQgIENVUkxfT0ZGX1RVX0MoMHhGRkZGRkZGRkZGRkZGRkZGKQorI2VsaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPT0gMTYpCisjICBkZWZpbmUgQ1VSTF9NQVNLX1NDT0ZGVCAgQ1VSTF9PRkZfVF9DKDB4N0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYpCisjICBkZWZpbmUgQ1VSTF9NQVNLX1VDT0ZGVCAgQ1VSTF9PRkZfVFVfQygweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGKQorI2Vsc2UKKyMgIGVycm9yICJDVVJMX1NJWkVPRl9DVVJMX09GRl9UIG5vdCBkZWZpbmVkIgorI2VuZGlmCisKKyNpZiAoU0laRU9GX1NJWkVfVCA9PSBTSVpFT0ZfU0hPUlQpCisjICBkZWZpbmUgQ1VSTF9NQVNLX1NTSVpFX1QgIENVUkxfTUFTS19TU0hPUlQKKyMgIGRlZmluZSBDVVJMX01BU0tfVVNJWkVfVCAgQ1VSTF9NQVNLX1VTSE9SVAorI2VsaWYgKFNJWkVPRl9TSVpFX1QgPT0gU0laRU9GX0lOVCkKKyMgIGRlZmluZSBDVVJMX01BU0tfU1NJWkVfVCAgQ1VSTF9NQVNLX1NJTlQKKyMgIGRlZmluZSBDVVJMX01BU0tfVVNJWkVfVCAgQ1VSTF9NQVNLX1VJTlQKKyNlbGlmIChTSVpFT0ZfU0laRV9UID09IENVUkxfU0laRU9GX0xPTkcpCisjICBkZWZpbmUgQ1VSTF9NQVNLX1NTSVpFX1QgIENVUkxfTUFTS19TTE9ORworIyAgZGVmaW5lIENVUkxfTUFTS19VU0laRV9UICBDVVJMX01BU0tfVUxPTkcKKyNlbGlmIChTSVpFT0ZfU0laRV9UID09IENVUkxfU0laRU9GX0NVUkxfT0ZGX1QpCisjICBkZWZpbmUgQ1VSTF9NQVNLX1NTSVpFX1QgIENVUkxfTUFTS19TQ09GRlQKKyMgIGRlZmluZSBDVVJMX01BU0tfVVNJWkVfVCAgQ1VSTF9NQVNLX1VDT0ZGVAorI2Vsc2UKKyMgIGVycm9yICJTSVpFT0ZfU0laRV9UIG5vdCBkZWZpbmVkIgorI2VuZGlmCisKKy8qCisqKiB1bnNpZ25lZCBsb25nIHRvIHVuc2lnbmVkIHNob3J0CisqLworCit1bnNpZ25lZCBzaG9ydCBjdXJseF91bHRvdXModW5zaWduZWQgbG9uZyB1bG51bSkKK3sKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjICBwcmFnbWEgd2FybmluZyhwdXNoKQorIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo4MTApIC8qIGNvbnZlcnNpb24gbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cyAqLworI2VuZGlmCisKKyAgREVCVUdBU1NFUlQodWxudW0gPD0gKHVuc2lnbmVkIGxvbmcpIENVUkxfTUFTS19VU0hPUlQpOworICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KSh1bG51bSAmICh1bnNpZ25lZCBsb25nKSBDVVJMX01BU0tfVVNIT1JUKTsKKworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorfQorCisvKgorKiogdW5zaWduZWQgbG9uZyB0byB1bnNpZ25lZCBjaGFyCisqLworCit1bnNpZ25lZCBjaGFyIGN1cmx4X3VsdG91Yyh1bnNpZ25lZCBsb25nIHVsbnVtKQoreworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHB1c2gpCisjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjgxMCkgLyogY29udmVyc2lvbiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzICovCisjZW5kaWYKKworICBERUJVR0FTU0VSVCh1bG51bSA8PSAodW5zaWduZWQgbG9uZykgQ1VSTF9NQVNLX1VDSEFSKTsKKyAgcmV0dXJuICh1bnNpZ25lZCBjaGFyKSh1bG51bSAmICh1bnNpZ25lZCBsb25nKSBDVVJMX01BU0tfVUNIQVIpOworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCit9CisKKy8qCisqKiB1bnNpZ25lZCBzaXplX3QgdG8gc2lnbmVkIGludAorKi8KKworaW50IGN1cmx4X3V6dG9zaShzaXplX3QgdXpudW0pCit7CisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocHVzaCkKKyMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6ODEwKSAvKiBjb252ZXJzaW9uIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMgKi8KKyNlbmRpZgorCisgIERFQlVHQVNTRVJUKHV6bnVtIDw9IChzaXplX3QpIENVUkxfTUFTS19TSU5UKTsKKyAgcmV0dXJuIChpbnQpKHV6bnVtICYgKHNpemVfdCkgQ1VSTF9NQVNLX1NJTlQpOworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCit9CisKKy8qCisqKiB1bnNpZ25lZCBzaXplX3QgdG8gdW5zaWduZWQgbG9uZworKi8KKwordW5zaWduZWQgbG9uZyBjdXJseF91enRvdWwoc2l6ZV90IHV6bnVtKQoreworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgcHJhZ21hIHdhcm5pbmcocHVzaCkKKyMgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo4MTApIC8qIGNvbnZlcnNpb24gbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cyAqLworI2VuZGlmCisKKyAgREVCVUdBU1NFUlQodXpudW0gPD0gKHNpemVfdCkgQ1VSTF9NQVNLX1VMT05HKTsKKyAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSh1em51bSAmIChzaXplX3QpIENVUkxfTUFTS19VTE9ORyk7CisKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjIHByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorfQorCisvKgorKiogdW5zaWduZWQgc2l6ZV90IHRvIHVuc2lnbmVkIGludAorKi8KKwordW5zaWduZWQgaW50IGN1cmx4X3V6dG91aShzaXplX3QgdXpudW0pCit7CisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyBwcmFnbWEgd2FybmluZyhwdXNoKQorIyBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjgxMCkgLyogY29udmVyc2lvbiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzICovCisjZW5kaWYKKworICBERUJVR0FTU0VSVCh1em51bSA8PSAoc2l6ZV90KSBDVVJMX01BU0tfVUlOVCk7CisgIHJldHVybiAodW5zaWduZWQgaW50KSh1em51bSAmIChzaXplX3QpIENVUkxfTUFTS19VSU5UKTsKKworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCit9CisKKy8qCisqKiBzaWduZWQgbG9uZyB0byBzaWduZWQgaW50CisqLworCitpbnQgY3VybHhfc2x0b3NpKGxvbmcgc2xudW0pCit7CisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocHVzaCkKKyMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6ODEwKSAvKiBjb252ZXJzaW9uIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMgKi8KKyNlbmRpZgorCisgIERFQlVHQVNTRVJUKHNsbnVtID49IDApOworICBERUJVR0FTU0VSVCgodW5zaWduZWQgbG9uZykgc2xudW0gPD0gKHVuc2lnbmVkIGxvbmcpIENVUkxfTUFTS19TSU5UKTsKKyAgcmV0dXJuIChpbnQpKHNsbnVtICYgKGxvbmcpIENVUkxfTUFTS19TSU5UKTsKKworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorfQorCisvKgorKiogc2lnbmVkIGxvbmcgdG8gdW5zaWduZWQgaW50CisqLworCit1bnNpZ25lZCBpbnQgY3VybHhfc2x0b3VpKGxvbmcgc2xudW0pCit7CisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocHVzaCkKKyMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6ODEwKSAvKiBjb252ZXJzaW9uIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMgKi8KKyNlbmRpZgorCisgIERFQlVHQVNTRVJUKHNsbnVtID49IDApOworICBERUJVR0FTU0VSVCgodW5zaWduZWQgbG9uZykgc2xudW0gPD0gKHVuc2lnbmVkIGxvbmcpIENVUkxfTUFTS19VSU5UKTsKKyAgcmV0dXJuICh1bnNpZ25lZCBpbnQpKHNsbnVtICYgKGxvbmcpIENVUkxfTUFTS19VSU5UKTsKKworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorfQorCisvKgorKiogc2lnbmVkIGxvbmcgdG8gdW5zaWduZWQgc2hvcnQKKyovCisKK3Vuc2lnbmVkIHNob3J0IGN1cmx4X3NsdG91cyhsb25nIHNsbnVtKQoreworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHB1c2gpCisjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjgxMCkgLyogY29udmVyc2lvbiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzICovCisjZW5kaWYKKworICBERUJVR0FTU0VSVChzbG51bSA+PSAwKTsKKyAgREVCVUdBU1NFUlQoKHVuc2lnbmVkIGxvbmcpIHNsbnVtIDw9ICh1bnNpZ25lZCBsb25nKSBDVVJMX01BU0tfVVNIT1JUKTsKKyAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydCkoc2xudW0gJiAobG9uZykgQ1VSTF9NQVNLX1VTSE9SVCk7CisKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjICBwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKK30KKworLyoKKyoqIHVuc2lnbmVkIHNpemVfdCB0byBzaWduZWQgc3NpemVfdAorKi8KKworc3NpemVfdCBjdXJseF91enRvc3ooc2l6ZV90IHV6bnVtKQoreworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHB1c2gpCisjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjgxMCkgLyogY29udmVyc2lvbiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzICovCisjZW5kaWYKKworICBERUJVR0FTU0VSVCh1em51bSA8PSAoc2l6ZV90KSBDVVJMX01BU0tfU1NJWkVfVCk7CisgIHJldHVybiAoc3NpemVfdCkodXpudW0gJiAoc2l6ZV90KSBDVVJMX01BU0tfU1NJWkVfVCk7CisKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjICBwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKK30KKworLyoKKyoqIHNpZ25lZCBjdXJsX29mZl90IHRvIHVuc2lnbmVkIHNpemVfdAorKi8KKworc2l6ZV90IGN1cmx4X3NvdG91eihjdXJsX29mZl90IHNvbnVtKQoreworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHB1c2gpCisjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjgxMCkgLyogY29udmVyc2lvbiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzICovCisjZW5kaWYKKworICBERUJVR0FTU0VSVChzb251bSA+PSAwKTsKKyAgcmV0dXJuIChzaXplX3QpKHNvbnVtICYgKGN1cmxfb2ZmX3QpIENVUkxfTUFTS19VU0laRV9UKTsKKworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorfQorCisvKgorKiogc2lnbmVkIHNzaXplX3QgdG8gc2lnbmVkIGludAorKi8KKworaW50IGN1cmx4X3N6dG9zaShzc2l6ZV90IHN6bnVtKQoreworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgIHByYWdtYSB3YXJuaW5nKHB1c2gpCisjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjgxMCkgLyogY29udmVyc2lvbiBtYXkgbG9zZSBzaWduaWZpY2FudCBiaXRzICovCisjZW5kaWYKKworICBERUJVR0FTU0VSVChzem51bSA+PSAwKTsKKyAgREVCVUdBU1NFUlQoKHNpemVfdCkgc3pudW0gPD0gKHNpemVfdCkgQ1VSTF9NQVNLX1NJTlQpOworICByZXR1cm4gKGludCkoc3pudW0gJiAoc3NpemVfdCkgQ1VSTF9NQVNLX1NJTlQpOworCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCit9CisKKy8qCisqKiBzaWduZWQgaW50IHRvIHVuc2lnbmVkIHNpemVfdAorKi8KKworc2l6ZV90IGN1cmx4X3NpdG91eihpbnQgc2ludW0pCit7CisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgorIyAgcHJhZ21hIHdhcm5pbmcocHVzaCkKKyMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6ODEwKSAvKiBjb252ZXJzaW9uIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMgKi8KKyNlbmRpZgorCisgIERFQlVHQVNTRVJUKHNpbnVtID49IDApOworICByZXR1cm4gKHNpemVfdCkgc2ludW07CisKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjICBwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgZGVmaW5lZChfX3VuaXhfXykKKworaW50IGN1cmx4X0ZEX0lTU0VUKGludCBmZCwgZmRfc2V0ICpmZHNldCkKK3sKKyAgI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisgICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjE0NjkpIC8qIGNsb2JiZXIgaWdub3JlZCAqLworICByZXR1cm4gRkRfSVNTRVQoZmQsIGZkc2V0KTsKKyAgI3ByYWdtYSB3YXJuaW5nKHBvcCkKK30KKwordm9pZCBjdXJseF9GRF9TRVQoaW50IGZkLCBmZF9zZXQgKmZkc2V0KQoreworICAjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyAgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6MTQ2OSkgLyogY2xvYmJlciBpZ25vcmVkICovCisgIEZEX1NFVChmZCwgZmRzZXQpOworICAjcHJhZ21hIHdhcm5pbmcocG9wKQorfQorCit2b2lkIGN1cmx4X0ZEX1pFUk8oZmRfc2V0ICpmZHNldCkKK3sKKyAgI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisgICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjU5MykgLyogdmFyaWFibGUgd2FzIHNldCBidXQgbmV2ZXIgdXNlZCAqLworICBGRF9aRVJPKGZkc2V0KTsKKyAgI3ByYWdtYSB3YXJuaW5nKHBvcCkKK30KKwordW5zaWduZWQgc2hvcnQgY3VybHhfaHRvbnModW5zaWduZWQgc2hvcnQgdXNudW0pCit7CisjaWYgKF9fSU5URUxfQ09NUElMRVIgPT0gOTEwKSAmJiBkZWZpbmVkKF9faTM4Nl9fKQorICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KSgoKHVzbnVtIDw8IDgpICYgMHhGRjAwKSB8ICgodXNudW0gPj4gOCkgJiAweDAwRkYpKTsKKyNlbHNlCisgICNwcmFnbWEgd2FybmluZyhwdXNoKQorICAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo4MTApIC8qIGNvbnZlcnNpb24gbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cyAqLworICByZXR1cm4gaHRvbnModXNudW0pOworICAjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCit9CisKK3Vuc2lnbmVkIHNob3J0IGN1cmx4X250b2hzKHVuc2lnbmVkIHNob3J0IHVzbnVtKQoreworI2lmIChfX0lOVEVMX0NPTVBJTEVSID09IDkxMCkgJiYgZGVmaW5lZChfX2kzODZfXykKKyAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydCkoKCh1c251bSA8PCA4KSAmIDB4RkYwMCkgfCAoKHVzbnVtID4+IDgpICYgMHgwMEZGKSk7CisjZWxzZQorICAjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyAgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6ODEwKSAvKiBjb252ZXJzaW9uIG1heSBsb3NlIHNpZ25pZmljYW50IGJpdHMgKi8KKyAgcmV0dXJuIG50b2hzKHVzbnVtKTsKKyAgI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorfQorCisjZW5kaWYgLyogX19JTlRFTF9DT01QSUxFUiAmJiBfX3VuaXhfXyAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3dhcm5sZXNzLmggYi9jdXJsLTcuMjUuMC9saWIvd2Fybmxlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDQwYmVlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3dhcm5sZXNzLmgKQEAgLTAsMCArMSw3NiBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9XQVJOTEVTU19ICisjZGVmaW5lIEhFQURFUl9DVVJMX1dBUk5MRVNTX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit1bnNpZ25lZCBzaG9ydCBjdXJseF91bHRvdXModW5zaWduZWQgbG9uZyB1bG51bSk7CisKK3Vuc2lnbmVkIGNoYXIgY3VybHhfdWx0b3VjKHVuc2lnbmVkIGxvbmcgdWxudW0pOworCitpbnQgY3VybHhfdXp0b3NpKHNpemVfdCB1em51bSk7CisKK3Vuc2lnbmVkIGxvbmcgY3VybHhfdXp0b3VsKHNpemVfdCB1em51bSk7CisKK3Vuc2lnbmVkIGludCBjdXJseF91enRvdWkoc2l6ZV90IHV6bnVtKTsKKworaW50IGN1cmx4X3NsdG9zaShsb25nIHNsbnVtKTsKKwordW5zaWduZWQgaW50IGN1cmx4X3NsdG91aShsb25nIHNsbnVtKTsKKwordW5zaWduZWQgc2hvcnQgY3VybHhfc2x0b3VzKGxvbmcgc2xudW0pOworCitzc2l6ZV90IGN1cmx4X3V6dG9zeihzaXplX3QgdXpudW0pOworCitzaXplX3QgY3VybHhfc290b3V6KGN1cmxfb2ZmX3Qgc29udW0pOworCitpbnQgY3VybHhfc3p0b3NpKHNzaXplX3Qgc3pudW0pOworCitzaXplX3QgY3VybHhfc2l0b3V6KGludCBzaW51bSk7CisKKyNpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmIGRlZmluZWQoX191bml4X18pCisKK2ludCBjdXJseF9GRF9JU1NFVChpbnQgZmQsIGZkX3NldCAqZmRzZXQpOworCit2b2lkIGN1cmx4X0ZEX1NFVChpbnQgZmQsIGZkX3NldCAqZmRzZXQpOworCit2b2lkIGN1cmx4X0ZEX1pFUk8oZmRfc2V0ICpmZHNldCk7CisKK3Vuc2lnbmVkIHNob3J0IGN1cmx4X2h0b25zKHVuc2lnbmVkIHNob3J0IHVzbnVtKTsKKwordW5zaWduZWQgc2hvcnQgY3VybHhfbnRvaHModW5zaWduZWQgc2hvcnQgdXNudW0pOworCisjaWZuZGVmIEJVSUxESU5HX1dBUk5MRVNTX0MKKyMgIHVuZGVmICBGRF9JU1NFVAorIyAgZGVmaW5lIEZEX0lTU0VUKGEsYikgY3VybHhfRkRfSVNTRVQoKGEpLChiKSkKKyMgIHVuZGVmICBGRF9TRVQKKyMgIGRlZmluZSBGRF9TRVQoYSxiKSAgIGN1cmx4X0ZEX1NFVCgoYSksKGIpKQorIyAgdW5kZWYgIEZEX1pFUk8KKyMgIGRlZmluZSBGRF9aRVJPKGEpICAgIGN1cmx4X0ZEX1pFUk8oKGEpKQorIyAgdW5kZWYgIGh0b25zCisjICBkZWZpbmUgaHRvbnMoYSkgICAgICBjdXJseF9odG9ucygoYSkpCisjICB1bmRlZiAgbnRvaHMKKyMgIGRlZmluZSBudG9ocyhhKSAgICAgIGN1cmx4X250b2hzKChhKSkKKyNlbmRpZgorCisjZW5kaWYgLyogX19JTlRFTF9DT01QSUxFUiAmJiBfX3VuaXhfXyAqLworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfV0FSTkxFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3dpbGRjYXJkLmMgYi9jdXJsLTcuMjUuMC9saWIvd2lsZGNhcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjRjNzM4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3dpbGRjYXJkLmMKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSAid2lsZGNhcmQuaCIKKyNpbmNsdWRlICJsbGlzdC5oIgorI2luY2x1ZGUgImZpbGVpbmZvLmgiCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgorLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworQ1VSTGNvZGUgQ3VybF93aWxkY2FyZF9pbml0KHN0cnVjdCBXaWxkY2FyZERhdGEgKndjKQoreworICBERUJVR0FTU0VSVCh3Yy0+ZmlsZWxpc3QgPT0gTlVMTCk7CisgIC8qIG5vdyBhbGxvY2F0ZSBvbmx5IHdjLT5maWxlbGlzdCwgZXZlcnl0aGluZyBlbHNlCisgICAgIHdpbGwgYmUgYWxsb2NhdGVkIGlmIGl0IGlzIG5lZWRlZC4gKi8KKyAgd2MtPmZpbGVsaXN0ID0gQ3VybF9sbGlzdF9hbGxvYyhDdXJsX2ZpbGVpbmZvX2R0b3IpOworICBpZighd2MtPmZpbGVsaXN0KSB7OworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKwordm9pZCBDdXJsX3dpbGRjYXJkX2R0b3Ioc3RydWN0IFdpbGRjYXJkRGF0YSAqd2MpCit7CisgIGlmKCF3YykKKyAgICByZXR1cm47CisKKyAgaWYod2MtPnRtcF9kdG9yKSB7CisgICAgd2MtPnRtcF9kdG9yKHdjLT50bXApOworICAgIHdjLT50bXBfZHRvciA9IFpFUk9fTlVMTDsKKyAgICB3Yy0+dG1wID0gTlVMTDsKKyAgfQorICBERUJVR0FTU0VSVCh3Yy0+dG1wID09IE5VTEwpOworCisgIGlmKHdjLT5maWxlbGlzdCkgeworICAgIEN1cmxfbGxpc3RfZGVzdHJveSh3Yy0+ZmlsZWxpc3QsIE5VTEwpOworICAgIHdjLT5maWxlbGlzdCA9IE5VTEw7CisgIH0KKworICBpZih3Yy0+cGF0aCkgeworICAgIGZyZWUod2MtPnBhdGgpOworICAgIHdjLT5wYXRoID0gTlVMTDsKKyAgfQorCisgIGlmKHdjLT5wYXR0ZXJuKSB7CisgICAgZnJlZSh3Yy0+cGF0dGVybik7CisgICAgd2MtPnBhdHRlcm4gPSBOVUxMOworICB9CisKKyAgd2MtPmN1c3RvbXB0ciA9IE5VTEw7CisgIHdjLT5zdGF0ZSA9IENVUkxXQ19JTklUOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbGliL3dpbGRjYXJkLmggYi9jdXJsLTcuMjUuMC9saWIvd2lsZGNhcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjczMmQxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliL3dpbGRjYXJkLmgKQEAgLTAsMCArMSw1OCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9XSUxEQ0FSRF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1dJTERDQVJEX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworLyogbGlzdCBvZiB3aWxkY2FyZCBwcm9jZXNzIHN0YXRlcyAqLwordHlwZWRlZiBlbnVtIHsKKyAgQ1VSTFdDX0lOSVQgPSAwLAorICBDVVJMV0NfTUFUQ0hJTkcsIC8qIGxpYnJhcnkgaXMgdHJ5aW5nIHRvIGdldCBsaXN0IG9mIGFkZHJlc3NlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZGluZyAqLworICBDVVJMV0NfRE9XTkxPQURJTkcsCisgIENVUkxXQ19DTEVBTiwgLyogZGVhbGxvY2F0ZSByZXNvdXJjZXMgYW5kIHJlc2V0IHNldHRpbmdzICovCisgIENVUkxXQ19TS0lQLCAgLyogc2tpcCBvdmVyIGNvbmNyZXRlIGZpbGUgKi8KKyAgQ1VSTFdDX0VSUk9SLCAvKiBlcnJvciBjYXNlcyAqLworICBDVVJMV0NfRE9ORSAgIC8qIGlmIGlzIHdpbGRjYXJkLT5zdGF0ZSA9PSBDVVJMV0NfRE9ORSB3aWxkY2FyZCBsb29wIGluCisgICAgICAgICAgICAgICAgICAgQ3VybF9wZXJmb3JtKCkgd2lsbCBlbmQgKi8KK30gY3VybF93aWxkY2FyZF9zdGF0ZXM7CisKK3R5cGVkZWYgdm9pZCAoKmN1cmxfd2lsZGNhcmRfdG1wX2R0b3IpKHZvaWQgKnB0cik7CisKKy8qIHN0cnVjdCBrZWVwaW5nIGluZm9ybWF0aW9uIGFib3V0IHdpbGRjYXJkIGRvd25sb2FkIHByb2Nlc3MgKi8KK3N0cnVjdCBXaWxkY2FyZERhdGEgeworICBjdXJsX3dpbGRjYXJkX3N0YXRlcyBzdGF0ZTsKKyAgY2hhciAqcGF0aDsgLyogcGF0aCB0byB0aGUgZGlyZWN0b3J5LCB3aGVyZSB3ZSB0cnlpbmcgd2lsZGNhcmQtbWF0Y2ggKi8KKyAgY2hhciAqcGF0dGVybjsgLyogd2lsZGNhcmQgcGF0dGVybiAqLworICBzdHJ1Y3QgY3VybF9sbGlzdCAqZmlsZWxpc3Q7IC8qIGxsaXN0IHdpdGggc3RydWN0IEN1cmxfZmlsZWluZm8gKi8KKyAgdm9pZCAqdG1wOyAvKiBwb2ludGVyIHRvIHByb3RvY29sIHNwZWNpZmljIHRlbXBvcmFyeSBkYXRhICovCisgIGN1cmxfd2lsZGNhcmRfdG1wX2R0b3IgdG1wX2R0b3I7CisgIHZvaWQgKmN1c3RvbXB0cjsgIC8qIGZvciBDVVJMT1BUX0NIVU5LX0RBVEEgcG9pbnRlciAqLworfTsKKworQ1VSTGNvZGUgQ3VybF93aWxkY2FyZF9pbml0KHN0cnVjdCBXaWxkY2FyZERhdGEgKndjKTsKK3ZvaWQgQ3VybF93aWxkY2FyZF9kdG9yKHN0cnVjdCBXaWxkY2FyZERhdGEgKndjKTsKKworc3RydWN0IFNlc3Npb25IYW5kbGU7CisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9XSUxEQ0FSRF9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9saWJjdXJsLnBjLmluIGIvY3VybC03LjI1LjAvbGliY3VybC5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmE5YzM5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbGliY3VybC5wYy5pbgpAQCAtMCwwICsxLDM5IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIHNob3VsZCBtb3N0IHByb2JhYmx5IGJlbmVmaXQgZnJvbSBnZXR0aW5nIGEgIlJlcXVpcmVzOiIgZmllbGQgYWRkZWQKKyMgZHluYW1pY2FsbHkgYnkgY29uZmlndXJlLgorIworcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACitzdXBwb3J0ZWRfcHJvdG9jb2xzPSJAU1VQUE9SVF9QUk9UT0NPTFNAIgorc3VwcG9ydGVkX2ZlYXR1cmVzPSJAU1VQUE9SVF9GRUFUVVJFU0AiCisKK05hbWU6IGxpYmN1cmwKK1VSTDogaHR0cDovL2N1cmwuaGF4eC5zZS8KK0Rlc2NyaXB0aW9uOiBMaWJyYXJ5IHRvIHRyYW5zZmVyIGZpbGVzIHdpdGggZnRwLCBodHRwLCBldGMuCitWZXJzaW9uOiBAQ1VSTFZFUlNJT05ACitMaWJzOiAtTCR7bGliZGlyfSAtbGN1cmwgQExJQlNACitMaWJzLnByaXZhdGU6IEBMSUJDVVJMX0xJQlNAIEBMSUJTQAorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL2x0bWFpbi5zaCBiL2N1cmwtNy4yNS4wL2x0bWFpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2QwNmMzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbHRtYWluLnNoCkBAIC0wLDAgKzEsOTY2MSBAQAorCisjIGxpYnRvb2wgKEdOVSBsaWJ0b29sKSAyLjQuMgorIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKKyMgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwKKyMgb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworIyBVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIFtNT0RFLUFSR10uLi4KKyMKKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjCisjICAgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisjICAgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyMgICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKKyMgICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisjICAgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCisjICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyMgICAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworIyAgICAgICAtLW5vLXF1aWV0LCAtLW5vLXNpbGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIChkZWZhdWx0KQorIyAgICAgICAtLW5vLXdhcm4gICAgICAgICAgICBkb24ndCBkaXNwbGF5IHdhcm5pbmcgbWVzc2FnZXMKKyMgICAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworIyAgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICBwcmludCBtb3JlIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdGhhbiBkZWZhdWx0CisjICAgICAgIC0tbm8tdmVyYm9zZSAgICAgICAgIGRvbid0IHByaW50IHRoZSBleHRyYSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICAgIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KKyMgICAtaCwgLS1oZWxwLCAtLWhlbHAtYWxsICAgcHJpbnQgc2hvcnQsIGxvbmcsIG9yIGRldGFpbGVkIGhlbHAgbWVzc2FnZQorIworIyBNT0RFIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgY2xlYW4gICAgICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKyMgICAgICAgICBjb21waWxlICAgICAgICAgICAgY29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIG9iamVjdAorIyAgICAgICAgIGV4ZWN1dGUgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQorIyAgICAgICAgIGZpbmlzaCAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCisjICAgICAgICAgaW5zdGFsbCAgICAgICAgICAgIGluc3RhbGwgbGlicmFyaWVzIG9yIGV4ZWN1dGFibGVzCisjICAgICAgICAgbGluayAgICAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQorIyAgICAgICAgIHVuaW5zdGFsbCAgICAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQorIworIyBNT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuICBXaGVuIHBhc3NlZCBhcyBmaXJzdCBvcHRpb24sCisjIGAtLW1vZGU9TU9ERScgbWF5IGJlIGFiYnJldmlhdGVkIGFzIGBNT0RFJyBvciBhIHVuaXF1ZSBhYmJyZXZpYXRpb24gb2YgdGhhdC4KKyMgVHJ5IGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCisjCisjIFdoZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAorIyBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisjCisjICAgICAgICAgaG9zdC10cmlwbGV0OgkkaG9zdAorIyAgICAgICAgIHNoZWxsOgkJJFNIRUxMCisjICAgICAgICAgY29tcGlsZXI6CQkkTFRDQworIyAgICAgICAgIGNvbXBpbGVyIGZsYWdzOgkJJExUQ0ZMQUdTCisjICAgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKyMgICAgICAgICAkcHJvZ25hbWU6CShHTlUgbGlidG9vbCkgMi40LjIgRGViaWFuLTIuNC4yLTEKKyMgICAgICAgICBhdXRvbWFrZToJJGF1dG9tYWtlX3ZlcnNpb24KKyMgICAgICAgICBhdXRvY29uZjoJJGF1dG9jb25mX3ZlcnNpb24KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorIyBHTlUgbGlidG9vbCBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidG9vbC8+LgorIyBHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi4KKworUFJPR1JBTT1saWJ0b29sCitQQUNLQUdFPWxpYnRvb2wKK1ZFUlNJT049IjIuNC4yIERlYmlhbi0yLjQuMi0xIgorVElNRVNUQU1QPSIiCitwYWNrYWdlX3JldmlzaW9uPTEuMzMzNworCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKK2ZpCitCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyQxCitfTFRFQ0hPX0VPRicKK30KKworIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIHRvIHJlc3RvcmUgZHVyaW5nIGV4ZWN1dGUgbW9kZS4KK2x0X3VzZXJfbG9jYWxlPQorbHRfc2FmZV9sb2NhbGU9Citmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKK2RvCisgIGV2YWwgImlmIHRlc3QgXCJcJHskbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorICAgICAgICAgIHNhdmVfJGx0X3Zhcj1cJCRsdF92YXIKKyAgICAgICAgICAkbHRfdmFyPUMKKwkgIGV4cG9ydCAkbHRfdmFyCisJICBsdF91c2VyX2xvY2FsZT1cIiRsdF92YXI9XFxcJHNhdmVfXCRsdF92YXI7IFwkbHRfdXNlcl9sb2NhbGVcIgorCSAgbHRfc2FmZV9sb2NhbGU9XCIkbHRfdmFyPUM7IFwkbHRfc2FmZV9sb2NhbGVcIgorCWZpIgorZG9uZQorTENfQUxMPUMKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRSBMQ19BTEwKKworJGx0X3Vuc2V0IENEUEFUSAorCisKKyMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCisjIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKKyMgZnVuY3Rpb24uCitwcm9ncGF0aD0iJDAiCisKKworCis6ICR7Q1A9ImNwIC1mIn0KK3Rlc3QgIiR7RUNITytzZXR9IiA9IHNldCB8fCBFQ0hPPSR7YXNfZWNoby0ncHJpbnRmICVzXG4nfQorOiAke01BS0U9Im1ha2UifQorOiAke01LRElSPSJta2RpciJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9Cis6ICR7WHNlZD0iJFNFRCAtZSAxcy9eWC8vIn0KKworIyBHbG9iYWwgdmFyaWFibGVzOgorRVhJVF9TVUNDRVNTPTAKK0VYSVRfRkFJTFVSRT0xCitFWElUX01JU01BVENIPTYzICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1pc21hdGNoIHRvIG1pc3NpbmcuCitFWElUX1NLSVA9NzcJICAjICQ/ID0gNzcgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHNraXBwZWQgdGVzdCB0byBhdXRvbWFrZS4KKworZXhpdF9zdGF0dXM9JEVYSVRfU1VDQ0VTUworCisjIE1ha2Ugc3VyZSBJRlMgaGFzIGEgc2Vuc2libGUgZGVmYXVsdAorbHRfbmw9JworJworSUZTPSIgCSRsdF9ubCIKKworZGlybmFtZT0icywvW14vXSokLCwiCitiYXNlbmFtZT0icyxeLiovLCwiCisKKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCitmdW5jX2Rpcm5hbWUgKCkKK3sKKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCisgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisgICAgZWxzZQorICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICAgIGZpCit9ICMgZnVuY19kaXJuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCit9ICMgZnVuY19iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisjIGNhbGw6CisjICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CisjICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCit7CisgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkZGlybmFtZSJgCisgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisgICAgZWxzZQorICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICAgIGZpCisgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRiYXNlbmFtZSJgCit9ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKyMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKK2Z1bmNfc3RyaXBuYW1lICgpCit7CisgICAgY2FzZSAkezJ9IGluCisgICAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworICAgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworICAgIGVzYWMKK30gIyBmdW5jX3N0cmlwbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIFRoZXNlIFNFRCBzY3JpcHRzIHByZXN1cHBvc2UgYW4gYWJzb2x1dGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCitwYXRoY2FyPSdzLF4vXChbXi9dKlwpLiokLFwxLCcKK3BhdGhjZHI9J3MsXi9bXi9dKiwsJworcmVtb3ZlZG90cGFydHM9Jzpkb3RzbAorCQlzQC9cLi9AL0BnCisJCXQgZG90c2wKKwkJcywvXC4kLC8sJworY29sbGFwc2VzbGFzaGVzPSdzQC9cezEsXH1AL0BnJworZmluYWxzbGFzaD0ncywvKiQsLywnCisKKyMgZnVuY19ub3JtYWxfYWJzcGF0aCBQQVRICisjIFJlbW92ZSBkb3VibGVkLXVwIGFuZCB0cmFpbGluZyBzbGFzaGVzLCAiLiIgcGF0aCBjb21wb25lbnRzLAorIyBhbmQgY2FuY2VsIG91dCBhbnkgIi4uIiBwYXRoIGNvbXBvbmVudHMgaW4gUEFUSCBhZnRlciBtYWtpbmcKKyMgaXQgYW4gYWJzb2x1dGUgcGF0aC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKK2Z1bmNfbm9ybWFsX2Fic3BhdGggKCkKK3sKKyAgIyBTdGFydCBmcm9tIHJvb3QgZGlyIGFuZCByZWFzc2VtYmxlIHRoZSBwYXRoLgorICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD0kMQorICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0KKyAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCBpbgorICAgICIiKQorICAgICAgIyBFbXB0eSBwYXRoLCB0aGF0IGp1c3QgbWVhbnMgJGN3ZC4KKyAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiYHB3ZGAiCisgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgICByZXR1cm4KKyAgICA7OworICAgICMgVGhlIG5leHQgdGhyZWUgZW50cmllcyBhcmUgdXNlZCB0byBzcG90IGEgcnVuIG9mIHByZWNpc2VseQorICAgICMgdHdvIGxlYWRpbmcgc2xhc2hlcyB3aXRob3V0IHVzaW5nIG5lZ2F0ZWQgY2hhcmFjdGVyIGNsYXNzZXM7CisgICAgIyB3ZSB0YWtlIGFkdmFudGFnZSBvZiBjYXNlJ3MgZmlyc3QtbWF0Y2ggYmVoYXZpb3VyLgorICAgIC8vLyopCisgICAgICAjIFVudXN1YWwgZm9ybSBvZiBhYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgorICAgIDs7CisgICAgLy8qKQorICAgICAgIyBOb3QgbmVjZXNzYXJpbHkgYW4gb3JkaW5hcnkgcGF0aDsgUE9TSVggcmVzZXJ2ZXMgbGVhZGluZyAnLy8nCisgICAgICAjIGFuZCBmb3IgZXhhbXBsZSBDeWd3aW4gdXNlcyBpdCB0byBhY2Nlc3MgcmVtb3RlIGZpbGUgc2hhcmVzCisgICAgICAjIG92ZXIgQ0lGUy9TTUIsIHNvIHdlIGNvbnNlcnZlIGEgbGVhZGluZyBkb3VibGUgc2xhc2ggaWYgZm91bmQuCisgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0vCisgICAgOzsKKyAgICAvKikKKyAgICAgICMgQWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KKyAgICA7OworICAgICopCisgICAgICAjIFJlbGF0aXZlIHBhdGgsIHByZXBlbmQgJGN3ZC4KKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YHB3ZGAvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgKKyAgICA7OworICBlc2FjCisgICMgQ2FuY2VsIG91dCBhbGwgdGhlIHNpbXBsZSBzdHVmZiB0byBzYXZlIGl0ZXJhdGlvbnMuICBXZSBhbHNvIHdhbnQKKyAgIyB0aGUgcGF0aCB0byBlbmQgd2l0aCBhIHNsYXNoIGZvciBlYXNlIG9mIHBhcnNpbmcsIHNvIG1ha2Ugc3VyZQorICAjIHRoZXJlIGlzIG9uZSAoYW5kIG9ubHkgb25lKSBoZXJlLgorICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgIC1lICIkcmVtb3ZlZG90cGFydHMiIC1lICIkY29sbGFwc2VzbGFzaGVzIiAtZSAiJGZpbmFsc2xhc2giYAorICB3aGlsZSA6OyBkbworICAgICMgUHJvY2Vzc2VkIGl0IGFsbCB5ZXQ/CisgICAgaWYgdGVzdCAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiID0gLyA7IHRoZW4KKyAgICAgICMgSWYgd2UgYXNjZW5kZWQgdG8gdGhlIHJvb3QgdXNpbmcgIi4uIiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eSBub3cuCisgICAgICBpZiB0ZXN0IC16ICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiIDsgdGhlbgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0vCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAtZSAiJHBhdGhjYXIiYAorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgLWUgIiRwYXRoY2RyImAKKyAgICAjIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGl0CisgICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50IGluCisgICAgICAiIikKKyAgICAgICAgIyBUcmFpbGluZyBlbXB0eSBwYXRoIGNvbXBvbmVudCwgaWdub3JlIGl0LgorICAgICAgOzsKKyAgICAgIC4uKQorICAgICAgICAjIFBhcmVudCBkaXI7IHN0cmlwIGxhc3QgYXNzZW1ibGVkIGNvbXBvbmVudCBmcm9tIHJlc3VsdC4KKyAgICAgICAgZnVuY19kaXJuYW1lICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgICA7OworICAgICAgKikKKyAgICAgICAgIyBBY3R1YWwgcGF0aCBjb21wb25lbnQsIGFwcGVuZCBpdC4KKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0LyRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisgICMgUmVzdG9yZSBsZWFkaW5nIGRvdWJsZS1zbGFzaCBpZiBvbmUgd2FzIGZvdW5kIG9uIGVudHJ5LgorICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2UkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKK30KKworIyBmdW5jX3JlbGF0aXZlX3BhdGggU1JDRElSIERTVERJUgorIyBnZW5lcmF0ZXMgYSByZWxhdGl2ZSBwYXRoIGZyb20gU1JDRElSIHRvIERTVERJUiwgd2l0aCBhIHRyYWlsaW5nCisjIHNsYXNoIGlmIG5vbi1lbXB0eSwgc3VpdGFibGUgZm9yIGltbWVkaWF0ZWx5IGFwcGVuZGluZyBhIGZpbGVuYW1lCisjIHdpdGhvdXQgbmVlZGluZyB0byBhcHBlbmQgYSBzZXBhcmF0b3IuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKK2Z1bmNfcmVsYXRpdmVfcGF0aCAoKQoreworICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PQorICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMSIKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQyIgorICBmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKworICAjIEFzY2VuZCB0aGUgdHJlZSBzdGFydGluZyBmcm9tIGxpYmRpcgorICB3aGlsZSA6OyBkbworICAgICMgY2hlY2sgaWYgd2UgaGF2ZSBmb3VuZCBhIHByZWZpeCBvZiBiaW5kaXIKKyAgICBjYXNlICRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciBpbgorICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKQorICAgICAgICAjIGZvdW5kIGFuIGV4YWN0IG1hdGNoCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPQorICAgICAgICBicmVhaworICAgICAgICA7OworICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKikKKyAgICAgICAgIyBmb3VuZCBhIG1hdGNoaW5nIHByZWZpeAorICAgICAgICBmdW5jX3N0cmlwbmFtZSAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIiAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIgorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9LgorICAgICAgICBmaQorICAgICAgICBicmVhaworICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgZnVuY19kaXJuYW1lICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcgorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0ke2Z1bmNfZGlybmFtZV9yZXN1bHR9CisgICAgICAgIGlmIHRlc3QgIngkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiID0geCA7IHRoZW4KKyAgICAgICAgICAjIEhhdmUgdG8gZGVzY2VuZCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdCEKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0CisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAorICAgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICMgTm93IGNhbGN1bGF0ZSBwYXRoOyB0YWtlIGNhcmUgdG8gYXZvaWQgZG91YmxpbmctdXAgc2xhc2hlcy4KKyAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgIGZ1bmNfc3RyaXBuYW1lICcvJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZCIKKyAgaWYgdGVzdCAieCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiICE9IHggOyB0aGVuCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0ke2Z1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHR9LyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fQorICBmaQorCisgICMgTm9ybWFsaXNhdGlvbi4gSWYgYmluZGlyIGlzIGxpYmRpciwgcmV0dXJuIGVtcHR5IHN0cmluZywKKyAgIyBlbHNlIHJlbGF0aXZlIHBhdGggZW5kaW5nIHdpdGggYSBzbGFzaDsgZWl0aGVyIHdheSwgdGFyZ2V0CisgICMgZmlsZSBuYW1lIGNhbiBiZSBkaXJlY3RseSBhcHBlbmRlZC4KKyAgaWYgdGVzdCAhIC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICBmdW5jX3N0cmlwbmFtZSAnLi8nICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdC8iCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgIGZpCit9CisKKyMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtOgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJHByb2dwYXRoIgorcHJvZ25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWJzb2x1dGUgcGF0aCBmb3IgcmVleGVjdXRpb246CitjYXNlICRwcm9ncGF0aCBpbgorICBbXFwvXSp8W0EtWmEtel06XFwqKSA7OworICAqW1xcL10qKQorICAgICBwcm9nZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgIHByb2dkaXI9YGNkICIkcHJvZ2RpciIgJiYgcHdkYAorICAgICBwcm9ncGF0aD0iJHByb2dkaXIvJHByb2duYW1lIgorICAgICA7OworICAqKQorICAgICBzYXZlX0lGUz0iJElGUyIKKyAgICAgSUZTPSR7UEFUSF9TRVBBUkFUT1ItOn0KKyAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7IGRvCisgICAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgICAgdGVzdCAteCAiJHByb2dkaXIvJHByb2duYW1lIiAmJiBicmVhaworICAgICBkb25lCisgICAgIElGUz0iJHNhdmVfSUZTIgorICAgICB0ZXN0IC1uICIkcHJvZ2RpciIgfHwgcHJvZ2Rpcj1gcHdkYAorICAgICBwcm9ncGF0aD0iJHByb2dkaXIvJHByb2duYW1lIgorICAgICA7OworZXNhYworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorWHNlZD0iJHtTRUR9IicgLWUgMXMvXlgvLycKK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtgIiRcXF1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCB0dXJucyBhIHN0cmluZyBpbnRvIGEgcmVnZXggbWF0Y2hpbmcgZm9yIHRoZQorIyBzdHJpbmcgbGl0ZXJhbGx5Lgorc2VkX21ha2VfbGl0ZXJhbF9yZWdleD0ncyxbXS5bXiRcXCpcL10sXFwmLGcnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGNvbnZlcnRzIGEgdzMyIGZpbGUgbmFtZSBvciBwYXRoCisjIHdoaWNoIGNvbnRhaW5zIGZvcndhcmQgc2xhc2hlcywgaW50byBvbmUgdGhhdCBjb250YWlucworIyAoZXNjYXBlZCkgYmFja3NsYXNoZXMuICBBIHZlcnkgbmFpdmUgaW1wbGVtZW50YXRpb24uCitsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisKKyMgUmUtYFwnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBkb3VibGVfcXVvdGVfc3Vic3QgdGhhdCB3ZXJlCisjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCisjIGluIGlucHV0IHRvIGRvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tIGV4cGFuc2lvbi4KKyMgU2luY2UgZWFjaCBpbnB1dCBgXCcgaXMgbm93IHR3byBgXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyIG9mIHJ1bnMgb2YKKyMgZm91ciBgXCdzIGZvbGxvd2VkIGJ5IHR3byBgXCdzIGFuZCB0aGVuIGEgJyQnLiAgYFwnIHRoYXQgJyQnLgorYnM9J1xcJworYnMyPSdcXFxcJworYnM0PSdcXFxcXFxcXCcKK2RvbGxhcj0nXCQnCitzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAorICBzLyRiczQvJlxcCisvZworICBzL14kYnMyJGRvbGxhci8kYnMmLworICBzL1xcKFteJGJzXVxcKSRiczIkZG9sbGFyL1xcMSRiczIkYnMkZG9sbGFyL2cKKyAgcy9cbi8vZyIKKworIyBTdGFuZGFyZCBvcHRpb25zOgorb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9oZWxwPWZhbHNlCitvcHRfcXVpZXQ9ZmFsc2UKK29wdF92ZXJib3NlPWZhbHNlCitvcHRfd2FybmluZz06CisKKyMgZnVuY19lY2hvIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlLCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IG1vZGUKKyMgbmFtZSBpZiBpdCBoYXMgYmVlbiBzZXQgeWV0LgorZnVuY19lY2hvICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH0kKiIKK30KKworIyBmdW5jX3ZlcmJvc2UgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgaW4gdmVyYm9zZSBtb2RlIG9ubHkuCitmdW5jX3ZlcmJvc2UgKCkKK3sKKyAgICAkb3B0X3ZlcmJvc2UgJiYgZnVuY19lY2hvICR7MSsiJEAifQorCisgICAgIyBBIGJ1ZyBpbiBiYXNoIGhhbHRzIHRoZSBzY3JpcHQgaWYgdGhlIGxhc3QgbGluZSBvZiBhIGZ1bmN0aW9uCisgICAgIyBmYWlscyB3aGVuIHNldCAtZSBpcyBpbiBmb3JjZSwgc28gd2UgbmVlZCBhbm90aGVyIGNvbW1hbmQgdG8KKyAgICAjIHdvcmsgYXJvdW5kIHRoYXQ6CisgICAgOgorfQorCisjIGZ1bmNfZWNob19hbGwgYXJnLi4uCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiQqIgorfQorCisjIGZ1bmNfZXJyb3IgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX2Vycm9yICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH0iJHsxKyIkQCJ9IDE+JjIKK30KKworIyBmdW5jX3dhcm5pbmcgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfd2FybmluZyAoKQoreworICAgICRvcHRfd2FybmluZyAmJiAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfXdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorCisgICAgIyBiYXNoIGJ1ZyBhZ2FpbjoKKyAgICA6Cit9CisKKyMgZnVuY19mYXRhbF9lcnJvciBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2Vycm9yICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworIyBmdW5jX2ZhdGFsX2hlbHAgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfaGVscCAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19mYXRhbF9lcnJvciAiJGhlbHAiCit9CitoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICAjIyBkZWZhdWx0CisKKworIyBmdW5jX2dyZXAgZXhwcmVzc2lvbiBmaWxlbmFtZQorIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCitmdW5jX2dyZXAgKCkKK3sKKyAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCit9CisKKworIyBmdW5jX21rZGlyX3AgZGlyZWN0b3J5LXBhdGgKKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCitmdW5jX21rZGlyX3AgKCkKK3sKKyAgICBteV9kaXJlY3RvcnlfcGF0aD0iJDEiCisgICAgbXlfZGlyX2xpc3Q9CisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGlyZWN0b3J5X3BhdGgiICYmIHRlc3QgIiRvcHRfZHJ5X3J1biIgIT0gIjoiOyB0aGVuCisKKyAgICAgICMgUHJvdGVjdCBkaXJlY3RvcnkgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScKKyAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluCisgICAgICAgIC0qKSBteV9kaXJlY3RvcnlfcGF0aD0iLi8kbXlfZGlyZWN0b3J5X3BhdGgiIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KKyAgICAgIHdoaWxlIHRlc3QgISAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIjsgZG8KKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisJIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgorICAgICAgICBteV9kaXJfbGlzdD0iJG15X2RpcmVjdG9yeV9wYXRoOiRteV9kaXJfbGlzdCIKKworICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCisgICAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluICovKikgOzsgKikgYnJlYWsgOzsgZXNhYworCisgICAgICAgICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhlIGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9vcAorICAgICAgICBteV9kaXJlY3RvcnlfcGF0aD1gJEVDSE8gIiRteV9kaXJlY3RvcnlfcGF0aCIgfCAkU0VEIC1lICIkZGlybmFtZSJgCisgICAgICBkb25lCisgICAgICBteV9kaXJfbGlzdD1gJEVDSE8gIiRteV9kaXJfbGlzdCIgfCAkU0VEICdzLDoqJCwsJ2AKKworICAgICAgc2F2ZV9ta2Rpcl9wX0lGUz0iJElGUyI7IElGUz0nOicKKyAgICAgIGZvciBteV9kaXIgaW4gJG15X2Rpcl9saXN0OyBkbworCUlGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisgICAgICAgICMgbWtkaXIgY2FuIGZhaWwgd2l0aCBhIGBGaWxlIGV4aXN0JyBlcnJvciBpZiB0d28gcHJvY2Vzc2VzCisgICAgICAgICMgdHJ5IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIGNvbmN1cnJlbnRseS4gIERvbid0CisgICAgICAgICMgc3RvcCBpbiB0aGF0IGNhc2UhCisgICAgICAgICRNS0RJUiAiJG15X2RpciIgMj4vZGV2L251bGwgfHwgOgorICAgICAgZG9uZQorICAgICAgSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKKworICAgICAgIyBCYWlsIG91dCBpZiB3ZSAob3Igc29tZSBvdGhlciBwcm9jZXNzKSBmYWlsZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5LgorICAgICAgdGVzdCAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBjcmVhdGUgXGAkMSciCisgICAgZmkKK30KKworCisjIGZ1bmNfbWt0ZW1wZGlyIFtzdHJpbmddCisjIE1ha2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd29uJ3QgY2xhc2ggd2l0aCBvdGhlciBydW5uaW5nCisjIGxpYnRvb2wgcHJvY2Vzc2VzLCBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBpZiBwb3NzaWJsZS4gIElmCisjIGdpdmVuLCBTVFJJTkcgaXMgdGhlIGJhc2VuYW1lIGZvciB0aGF0IGRpcmVjdG9yeS4KK2Z1bmNfbWt0ZW1wZGlyICgpCit7CisgICAgbXlfdGVtcGxhdGU9IiR7VE1QRElSLS90bXB9LyR7MS0kcHJvZ25hbWV9IgorCisgICAgaWYgdGVzdCAiJG9wdF9kcnlfcnVuIiA9ICI6IjsgdGhlbgorICAgICAgIyBSZXR1cm4gYSBkaXJlY3RvcnkgbmFtZSwgYnV0IGRvbid0IGNyZWF0ZSBpdCBpbiBkcnktcnVuIG1vZGUKKyAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJCQiCisgICAgZWxzZQorCisgICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0CisgICAgICBteV90bXBkaXI9YG1rdGVtcCAtZCAiJHtteV90ZW1wbGF0ZX0tWFhYWFhYWFgiIDI+L2Rldi9udWxsYAorCisgICAgICBpZiB0ZXN0ICEgLWQgIiRteV90bXBkaXIiOyB0aGVuCisgICAgICAgICMgRmFpbGluZyB0aGF0LCBhdCBsZWFzdCB0cnkgYW5kIHVzZSAkUkFORE9NIHRvIGF2b2lkIGEgcmFjZQorICAgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSR7UkFORE9NLTB9JCQiCisKKyAgICAgICAgc2F2ZV9ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAorICAgICAgICB1bWFzayAwMDc3CisgICAgICAgICRNS0RJUiAiJG15X3RtcGRpciIKKyAgICAgICAgdW1hc2sgJHNhdmVfbWt0ZW1wZGlyX3VtYXNrCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKKyAgICAgIHRlc3QgLWQgIiRteV90bXBkaXIiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IFxgJG15X3RtcGRpciciCisgICAgZmkKKworICAgICRFQ0hPICIkbXlfdG1wZGlyIgorfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXZhbCBhcmcKKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyLgorIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvIHZhbHVlczogRlVOQ19RVU9URV9GT1JfRVZBTF9SRVNVTFQKKyMgaXMgZG91YmxlLXF1b3RlZCwgc3VpdGFibGUgZm9yIGEgc3Vic2VxdWVudCBldmFsLCB3aGVyZWFzCisjIEZVTkNfUVVPVEVfRk9SX0VWQUxfVU5RVU9URURfUkVTVUxUIGhhcyBtZXJlbHkgYWxsIGNoYXJhY3RlcnMKKyMgd2hpY2ggYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlIHF1b3RlcyBiYWNrc2xhc2hpZmllZC4KK2Z1bmNfcXVvdGVfZm9yX2V2YWwgKCkKK3sKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIlwkXSopCisJZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgYW5kIHZhcmlhYmxlCisgICAgICAjIGV4cGFuc2lvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iXCIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHRcIiIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQiCisgICAgZXNhYworfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXhwYW5kIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXI7IHNhbWUgYXMgYWJvdmUsCisjIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2Z1bmNfcXVvdGVfZm9yX2V4cGFuZCAoKQoreworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXSopCisJbXlfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCBcCisJICAgIC1lICIkZG91YmxlX3F1b3RlX3N1YnN0IiAtZSAiJHNlZF9kb3VibGVfYmFja3NsYXNoImAgOzsKKyAgICAgICopCisgICAgICAgIG15X2FyZz0iJDEiIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbXlfYXJnIGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcgYW5kIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIG15X2FyZz0iXCIkbXlfYXJnXCIiCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdD0iJG15X2FyZyIKK30KKworCisjIGZ1bmNfc2hvd19ldmFsIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LgorZnVuY19zaG93X2V2YWwgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbXlfY21kIgorICAgICAgbXlfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCisJZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICAgIGZpCisgICAgZmkKK30KKworCisjIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBjbWQgW2ZhaWxfZXhwXQorIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4gIFVzZSB0aGUgc2F2ZWQgbG9jYWxlIGZvciBldmFsdWF0aW9uLgorZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCit7CisgICAgbXlfY21kPSIkMSIKKyAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorCisgICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7CisgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisgICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisgICAgfQorCisgICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQorICAgICAgZXZhbCAiJGx0X3VzZXJfbG9jYWxlCisJICAgICRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGV2YWwgIiRsdF9zYWZlX2xvY2FsZSIKKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisjIGZ1bmNfdHJfc2gKKyMgVHVybiAkMSBpbnRvIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBhIHNoZWxsIHZhcmlhYmxlIG5hbWUuCisjIFJlc3VsdCBpcyBzdG9yZWQgaW4gJGZ1bmNfdHJfc2hfcmVzdWx0LiAgQWxsIGNoYXJhY3RlcnMKKyMgbm90IGluIHRoZSBzZXQgYS16QS1aMC05XyBhcmUgcmVwbGFjZWQgd2l0aCAnXycuIEZ1cnRoZXIsCisjIGlmICQxIGJlZ2lucyB3aXRoIGEgZGlnaXQsIGEgJ18nIGlzIHByZXBlbmRlZCBhcyB3ZWxsLgorZnVuY190cl9zaCAoKQoreworICBjYXNlICQxIGluCisgIFswLTldKiB8ICpbIWEtekEtWjAtOV9dKikKKyAgICBmdW5jX3RyX3NoX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgJ3MvXlwoWzAtOV1cKS9fXDEvOyBzL1teYS16QS1aMC05X10vXy9nJ2AKKyAgICA7OworICAqICkKKyAgICBmdW5jX3RyX3NoX3Jlc3VsdD0kMQorICAgIDs7CisgIGVzYWMKK30KKworCisjIGZ1bmNfdmVyc2lvbgorIyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3ZlcnNpb24gKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICAkU0VEIC1uICcvKEMpLyFiIGdvCisJOm1vcmUKKwkvXC4vIXsKKwkgIE4KKwkgIHMvXG4jIC8gLworCSAgYiBtb3JlCisJfQorCTpnbworCS9eIyAnJFBST0dSQU0nIChHTlUgLywvIyB3YXJyYW50eTsgLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKyAgICAgICAgcy9cKChDKVwpWyAwLTksLV0qXCggWzEtOV1bMC05XSpcKS9cMVwyLworICAgICAgICBwCisgICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICAgZXhpdCAkPworfQorCisjIGZ1bmNfdXNhZ2UKKyMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY191c2FnZSAoKQoreworICAgICRvcHRfZGVidWcKKworICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC9eIyAgKi4qLS1oZWxwLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKwlzL1wkcHJvZ25hbWUvJyRwcm9nbmFtZScvCisJcAorICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICBlY2hvCisgICAgJEVDSE8gInJ1biBcYCRwcm9nbmFtZSAtLWhlbHAgfCBtb3JlJyBmb3IgZnVsbCB1c2FnZSIKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19oZWxwIFtOT0VYSVRdCisjIEVjaG8gbG9uZyBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LAorIyB1bmxlc3MgJ25vZXhpdCcgaXMgcGFzc2VkIGFzIGFyZ3VtZW50LgorZnVuY19oZWxwICgpCit7CisgICAgJG9wdF9kZWJ1ZworCisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgUmVwb3J0IGJ1Z3MgdG8vIHsKKwk6cHJpbnQKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMqXCRwcm9nbmFtZSonJHByb2duYW1lJyoKKwlzKlwkaG9zdConIiRob3N0IicqCisJcypcJFNIRUxMKiciJFNIRUxMIicqCisJcypcJExUQ0MqJyIkTFRDQyInKgorCXMqXCRMVENGTEFHUyonIiRMVENGTEFHUyInKgorCXMqXCRMRConIiRMRCInKgorCXMvXCR3aXRoX2dudV9sZC8nIiR3aXRoX2dudV9sZCInLworCXMvXCRhdXRvbWFrZV92ZXJzaW9uLyciYCgke0FVVE9NQUtFLWF1dG9tYWtlfSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworCXMvXCRhdXRvY29uZl92ZXJzaW9uLyciYCgke0FVVE9DT05GLWF1dG9jb25mfSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworCXAKKwlkCisgICAgIH0KKyAgICAgL14jIC4qIGhvbWUgcGFnZTovYiBwcmludAorICAgICAvXiMgR2VuZXJhbCBoZWxwIHVzaW5nL2IgcHJpbnQKKyAgICAgJyA8ICIkcHJvZ3BhdGgiCisgICAgcmV0PSQ/CisgICAgaWYgdGVzdCAteiAiJDEiOyB0aGVuCisgICAgICBleGl0ICRyZXQKKyAgICBmaQorfQorCisjIGZ1bmNfbWlzc2luZ19hcmcgYXJnbmFtZQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yIGFuZCBzZXQgZ2xvYmFsCisjIGV4aXRfY21kLgorZnVuY19taXNzaW5nX2FyZyAoKQoreworICAgICRvcHRfZGVidWcKKworICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxLiIKKyAgICBleGl0X2NtZD1leGl0Cit9CisKKworIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBzaG9ydG9wdAorIyBTZXQgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIHNoZWxsCisjIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgU0hPUlRPUFQgYWZ0ZXIgdGhlIDJuZCBjaGFyYWN0ZXIuCitmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQoreworICAgIG15X3NlZF9zaG9ydF9vcHQ9JzFzL15cKC4uXCkuKiQvXDEvO3EnCisgICAgbXlfc2VkX3Nob3J0X3Jlc3Q9JzFzL14uLlwoLipcKSQvXDEvO3EnCisKKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9zaG9ydF9vcHQiYAorICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfcmVzdCJgCit9ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX3NwbGl0X2xvbmdfb3B0IGxvbmdvcHQKKyMgU2V0IGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9sb25nX29wdF9hcmcgc2hlbGwKKyMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBMT05HT1BUIGF0IHRoZSBgPScgc2lnbi4KK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKCkKK3sKKyAgICBteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC0tW149XSpcKT0uKi9cMS87cScKKyAgICBteV9zZWRfbG9uZ19hcmc9JzFzL14tLVtePV0qPS8vJworCisgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCisgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKK30gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCitleGl0X2NtZD06CisKKworCisKKworbWFnaWM9IiUlJU1BR0lDIHZhcmlhYmxlJSUlIgorbWFnaWNfZXhlPSIlJSVNQUdJQyBFWEUgdmFyaWFibGUlJSUiCisKKyMgR2xvYmFsIHZhcmlhYmxlcy4KK25vbm9wdD0KK3ByZXNlcnZlX2FyZ3M9CitsbzJvPSJzL1xcLmxvXCQvLiR7b2JqZXh0fS8iCitvMmxvPSJzL1xcLiR7b2JqZXh0fVwkLy5sby8iCitleHRyYWN0ZWRfYXJjaGl2ZXM9CitleHRyYWN0ZWRfc2VyaWFsPTAKKworIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0CisjIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKKyMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KK2V4ZWNfY21kPQorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICAgIGV2YWwgIiR7MX09XCQkezF9XCR7Mn0iCit9ICMgZnVuY19hcHBlbmQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKyMgZnVuY19hcHBlbmRfcXVvdGVkIHZhciB2YWx1ZQorIyBRdW90ZSBWQUxVRSBhbmQgYXBwZW5kIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLCBzZXBhcmF0ZWQKKyMgYnkgYSBzcGFjZS4KK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKQoreworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCisgICAgZXZhbCAiJHsxfT1cJCR7MX1cXCBcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorfSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCitmdW5jX2FyaXRoICgpCit7CisgICAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiR7QH0iYAorfSAjIGZ1bmNfYXJpdGggbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgICAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkezF9IiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCit9ICMgZnVuY19sZW4gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2xvMm8gb2JqZWN0CitmdW5jX2xvMm8gKCkKK3sKKyAgICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCit9ICMgZnVuY19sbzJvIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgICAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCit9ICMgZnVuY194Zm9ybSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGZ1bmNfZXJyb3IgIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgZnVuY19mYXRhbF9lcnJvciAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4iCit9CisKKworIyBmdW5jX2NvbmZpZworIyBEaXNwbGF5IHRoZSBjb25maWd1cmF0aW9uIGZvciBhbGwgdGhlIHRhZ3MgaW4gdGhpcyBzY3JpcHQuCitmdW5jX2NvbmZpZyAoKQoreworICAgIHJlX2JlZ2luY2Y9J14jICMjIyBCRUdJTiBMSUJUT09MJworICAgIHJlX2VuZGNmPSdeIyAjIyMgRU5EIExJQlRPT0wnCisKKyAgICAjIERlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICAkU0VEICIxLC8kcmVfYmVnaW5jZiBDT05GSUcvZDsvJHJlX2VuZGNmIENPTkZJRy8sXCRkIiA8ICIkcHJvZ3BhdGgiCisKKyAgICAjIE5vdyBwcmludCB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0YWdzLgorICAgIGZvciB0YWduYW1lIGluICR0YWdsaXN0OyBkbworICAgICAgJFNFRCAtbiAiLyRyZV9iZWdpbmNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvLC8kcmVfZW5kY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC9wIiA8ICIkcHJvZ3BhdGgiCisgICAgZG9uZQorCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfZmVhdHVyZXMKKyMgRGlzcGxheSB0aGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgorZnVuY19mZWF0dXJlcyAoKQoreworICAgIGVjaG8gImhvc3Q6ICRob3N0IgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBlY2hvICJlbmFibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICBlY2hvICJkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBlY2hvICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICBlY2hvICJkaXNhYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgZmkKKworICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2VuYWJsZV90YWcgdGFnbmFtZQorIyBWZXJpZnkgdGhhdCBUQUdOQU1FIGlzIHZhbGlkLCBhbmQgZWl0aGVyIGZsYWcgYW4gZXJyb3IgYW5kIGV4aXQsIG9yCisjIGVuYWJsZSB0aGUgVEFHTkFNRSB0YWcuICBXZSBhbHNvIGFkZCBUQUdOQU1FIHRvIHRoZSBnbG9iYWwgJHRhZ2xpc3QKKyMgdmFyaWFibGUgaGVyZS4KK2Z1bmNfZW5hYmxlX3RhZyAoKQoreworICAjIEdsb2JhbCB2YXJpYWJsZToKKyAgdGFnbmFtZT0iJDEiCisKKyAgcmVfYmVnaW5jZj0iXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgcmVfZW5kY2Y9Il4jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICBzZWRfZXh0cmFjdGNmPSIvJHJlX2JlZ2luY2YvLC8kcmVfZW5kY2YvcCIKKworICAjIFZhbGlkYXRlIHRhZ25hbWUuCisgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICAqWyEtX0EtWmEtejAtOSwvXSopCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIKKyAgICAgIDs7CisgIGVzYWMKKworICAjIERvbid0IHRlc3QgZm9yIHRoZSAiZGVmYXVsdCIgQyB0YWcsIGFzIHdlIGtub3cgaXQncworICAjIHRoZXJlIGJ1dCBub3Qgc3BlY2lhbGx5IG1hcmtlZC4KKyAgY2FzZSAkdGFnbmFtZSBpbgorICAgIENDKSA7OworICAgICopCisgICAgICBpZiAkR1JFUCAiJHJlX2JlZ2luY2YiICIkcHJvZ3BhdGgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCXRhZ2xpc3Q9IiR0YWdsaXN0ICR0YWduYW1lIgorCisJIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4gIEJlIGNhcmVmdWwgdG8gcXVvdGUgdGhlIHBhdGgKKwkjIGFuZCB0aGUgc2VkIHNjcmlwdCwgdG8gYXZvaWQgc3BsaXR0aW5nIG9uIHdoaXRlc3BhY2UsIGJ1dAorCSMgYWxzbyBkb24ndCB1c2Ugbm9uLXBvcnRhYmxlIHF1b3RlcyB3aXRoaW4gYmFja3F1b3RlcyB3aXRoaW4KKwkjIHF1b3RlcyB3ZSBoYXZlIHRvIGRvIGl0IGluIDIgc3RlcHM6CisJZXh0cmFjdGVkY2Y9YCRTRUQgLW4gLWUgIiRzZWRfZXh0cmFjdGNmIiA8ICIkcHJvZ3BhdGgiYAorCWV2YWwgIiRleHRyYWN0ZWRjZiIKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJpZ25vcmluZyB1bmtub3duIHRhZyAkdGFnbmFtZSIKKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCit9CisKKyMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisjIHJlbGVhc2Ugb2YgbGlidG9vbC4KK2Z1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQoreworICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAorJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgorJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgIGZpCisKKyAgICBleGl0ICRFWElUX01JU01BVENICisgIGZpCit9CisKKworIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CitjYXNlICQxIGluCitjbGVhbnxjbGVhfGNsZXxjbCkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorICA7OworY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CisgIDs7CitleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2ZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorICA7OworaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgIDs7CitsaW5rfGxpbnxsaXxsKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK3VuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICA7OworZXNhYworCisKKworIyBPcHRpb24gZGVmYXVsdHM6CitvcHRfZGVidWc9Ogorb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9jb25maWc9ZmFsc2UKK29wdF9wcmVzZXJ2ZV9kdXBfZGVwcz1mYWxzZQorb3B0X2ZlYXR1cmVzPWZhbHNlCitvcHRfZmluaXNoPWZhbHNlCitvcHRfaGVscD1mYWxzZQorb3B0X2hlbHBfYWxsPWZhbHNlCitvcHRfc2lsZW50PToKK29wdF93YXJuaW5nPToKK29wdF92ZXJib3NlPToKK29wdF9zaWxlbnQ9ZmFsc2UKK29wdF92ZXJib3NlPWZhbHNlCisKKworIyBQYXJzZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuICBUaGlzIGNvbWVzIGFzIHNvb24gYXMgcG9zc2libGUgaW4gdGhlCisjIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGAtLXZlcnNpb24nIGhhcHBlbiBhcyBxdWlja2x5IGFzIHdlIGNhbi4KK3sKKyAgIyB0aGlzIGp1c3QgZWFzZXMgZXhpdCBoYW5kbGluZworICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICAgIG9wdD0iJDEiCisgICAgc2hpZnQKKyAgICBjYXNlICRvcHQgaW4KKyAgICAgIC0tZGVidWd8LXgpCW9wdF9kZWJ1Zz0nc2V0IC14JworCQkJZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorCQkJJG9wdF9kZWJ1ZworCQkJOzsKKyAgICAgIC0tZHJ5LXJ1bnwtLWRyeXJ1bnwtbikKKwkJCW9wdF9kcnlfcnVuPToKKwkJCTs7CisgICAgICAtLWNvbmZpZykKKwkJCW9wdF9jb25maWc9OgorZnVuY19jb25maWcKKwkJCTs7CisgICAgICAtLWRsb3BlbnwtZGxvcGVuKQorCQkJb3B0YXJnPSIkMSIKKwkJCW9wdF9kbG9wZW49IiR7b3B0X2Rsb3Blbiskb3B0X2Rsb3BlbgorfSRvcHRhcmciCisJCQlzaGlmdAorCQkJOzsKKyAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMpCisJCQlvcHRfcHJlc2VydmVfZHVwX2RlcHM9OgorCQkJOzsKKyAgICAgIC0tZmVhdHVyZXMpCisJCQlvcHRfZmVhdHVyZXM9OgorZnVuY19mZWF0dXJlcworCQkJOzsKKyAgICAgIC0tZmluaXNoKQorCQkJb3B0X2ZpbmlzaD06CitzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisJCQk7OworICAgICAgLS1oZWxwKQorCQkJb3B0X2hlbHA9OgorCQkJOzsKKyAgICAgIC0taGVscC1hbGwpCisJCQlvcHRfaGVscF9hbGw9Ogorb3B0X2hlbHA9JzogaGVscC1hbGwnCisJCQk7OworICAgICAgLS1tb2RlKQorCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCisJCQlvcHRhcmc9IiQxIgorCQkJb3B0X21vZGU9IiRvcHRhcmciCitjYXNlICRvcHRhcmcgaW4KKyAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKKyAgY2xlYW58Y29tcGlsZXxleGVjdXRlfGZpbmlzaHxpbnN0YWxsfGxpbmt8cmVsaW5rfHVuaW5zdGFsbCkgOzsKKworICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKyAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKyAgICAgZXhpdF9jbWQ9ZXhpdAorICAgICBicmVhaworICAgICA7OworZXNhYworCQkJc2hpZnQKKwkJCTs7CisgICAgICAtLW5vLXNpbGVudHwtLW5vLXF1aWV0KQorCQkJb3B0X3NpbGVudD1mYWxzZQorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisJCQk7OworICAgICAgLS1uby13YXJuaW5nfC0tbm8td2FybikKKwkJCW9wdF93YXJuaW5nPWZhbHNlCitmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKwkJCTs7CisgICAgICAtLW5vLXZlcmJvc2UpCisJCQlvcHRfdmVyYm9zZT1mYWxzZQorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisJCQk7OworICAgICAgLS1zaWxlbnR8LS1xdWlldCkKKwkJCW9wdF9zaWxlbnQ9OgorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisgICAgICAgIG9wdF92ZXJib3NlPWZhbHNlCisJCQk7OworICAgICAgLS12ZXJib3NlfC12KQorCQkJb3B0X3ZlcmJvc2U9OgorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCitvcHRfc2lsZW50PWZhbHNlCisJCQk7OworICAgICAgLS10YWcpCisJCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKKwkJCW9wdGFyZz0iJDEiCisJCQlvcHRfdGFnPSIkb3B0YXJnIgorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQgJG9wdGFyZyIKK2Z1bmNfZW5hYmxlX3RhZyAiJG9wdGFyZyIKKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCTs7CisgICAgICAtLWhlbHApCQlmdW5jX2hlbHAJCQkJOzsKKyAgICAgIC0tdmVyc2lvbikJZnVuY192ZXJzaW9uCQkJCTs7CisKKyAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6CisgICAgICAtLSo9KikKKwkJCWZ1bmNfc3BsaXRfbG9uZ19vcHQgIiRvcHQiCisJCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUiICIkZnVuY19zcGxpdF9sb25nX29wdF9hcmciICR7MSsiJEAifQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisgICAgICAtXD8qfC1oKnwtbip8LXYqKQorCQkJZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRvcHQiCisJCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC0tKQkJYnJlYWsJCQkJCTs7CisgICAgICAtKikJCWZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pemVkIG9wdGlvbiBcYCRvcHQnIiA7OworICAgICAgKikJCXNldCBkdW1teSAiJG9wdCIgJHsxKyIkQCJ9OwlzaGlmdDsgYnJlYWsgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIyBWYWxpZGF0ZSBvcHRpb25zOgorCisgICMgc2F2ZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50CisgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorICAgIG5vbm9wdD0iJG9wdCIKKyAgICBzaGlmdAorICBmaQorCisgICMgcHJlc2VydmUgLS1kZWJ1ZworICB0ZXN0ICIkb3B0X2RlYnVnIiA9IDogfHwgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiIC0tZGVidWciCisKKyAgY2FzZSAkaG9zdCBpbgorICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyopCisgICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcworICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06CisgICAgICA7OworICAgICopCisgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfcHJlc2VydmVfZHVwX2RlcHMKKyAgICAgIDs7CisgIGVzYWMKKworICAkb3B0X2hlbHAgfHwgeworICAgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKyAgICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKworICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IgorICAgIGZpCisKKyAgICAjIERhcndpbiBzdWNrcworICAgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisKKyAgICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorICAgIGlmIHRlc3QgLW4gIiRvcHRfZGxvcGVuIiAmJiB0ZXN0ICIkb3B0X21vZGUiICE9IGV4ZWN1dGU7IHRoZW4KKyAgICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIKKyAgICAgICRFQ0hPICIkaGVscCIgMT4mMgorICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgZmkKKworICAgICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KKyAgICBnZW5lcmljX2hlbHA9IiRoZWxwIgorICAgIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICB9CisKKworICAjIEJhaWwgaWYgdGhlIG9wdGlvbnMgd2VyZSBzY3Jld2VkCisgICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCit9CisKKworCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyAgICBNYWluLiAgICAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworIyBmdW5jX2xhbGliX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbGFsaWJfcCAoKQoreworICAgIHRlc3QgLWYgIiQxIiAmJgorICAgICAgJFNFRCAtZSA0cSAiJDEiIDI+L2Rldi9udWxsIFwKKyAgICAgICAgfCAkR1JFUCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiID4gL2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2xhbGliX3Vuc2FmZV9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBzYW1lIGNoZWNrIGFzIGZ1bmNfbGFsaWJfcCB3aXRob3V0CisjIHJlc29ydGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRpcmVjdHMgc3RkaW4gYW5kCisjIGNsb3NlcyBpdCBhZnRlcndhcmRzLCB3aXRob3V0IHNhdmluZyB0aGUgb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yLgorIyBBcyBhIHNhZmV0eSBtZWFzdXJlLCB1c2UgaXQgb25seSB3aGVyZSBhIG5lZ2F0aXZlIHJlc3VsdCB3b3VsZCBiZQorIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiBgZmlsZScgZG9lcyBub3QgZXhpc3QuCitmdW5jX2xhbGliX3Vuc2FmZV9wICgpCit7CisgICAgbGFsaWJfcD1ubworICAgIGlmIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC1yICIkMSIgJiYgZXhlYyA1PCYwIDwiJDEiOyB0aGVuCisJZm9yIGxhbGliX3BfbCBpbiAxIDIgMyA0CisJZG8KKwkgICAgcmVhZCBsYWxpYl9wX2xpbmUKKwkgICAgY2FzZSAiJGxhbGliX3BfbGluZSIgaW4KKwkJXCNcIEdlbmVyYXRlZFwgYnlcICokUEFDS0FHRSogKSBsYWxpYl9wPXllczsgYnJlYWs7OworCSAgICBlc2FjCisJZG9uZQorCWV4ZWMgMDwmNSA1PCYtCisgICAgZmkKKyAgICB0ZXN0ICIkbGFsaWJfcCIgPSB5ZXMKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0CisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgKCkKK3sKKyAgICBmdW5jX2xhbGliX3AgIiQxIgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PQorICAgIGNhc2UgJDEgaW4KKyAgICAqLmV4ZSkgOzsKKyAgICAqKSBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0uZXhlIDs7CisgICAgZXNhYworICAgICRHUkVQICIkbWFnaWNfZXhlIiAiJDEkZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXgiID4vZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgZmlsZQorIyBBc3N1bWVzIGZpbGUgaXMgYW4gbHR3cmFwcGVyX2V4ZWN1dGFibGUKKyMgdXNlcyAkZmlsZSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZpbGVuYW1lIGZvciBhCisjIHRlbXBvcmFyeSBsdHdyYXBwZXJfc2NyaXB0LgorZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQoreworICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIiCit9CisKKyMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9yIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJDEiIHx8IGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiCit9CisKKworIyBmdW5jX2V4ZWN1dGVfY21kcyBjb21tYW5kcyBmYWlsX2NtZAorIyBFeGVjdXRlIHRpbGRlLWRlbGltaXRlZCBDT01NQU5EUy4KKyMgSWYgRkFJTF9DTUQgaXMgZ2l2ZW4sIGV2YWwgdGhhdCB1cG9uIGZhaWx1cmUuCisjIEZBSUxfQ01EIG1heSByZWFkLWFjY2VzcyB0aGUgY3VycmVudCBjb21tYW5kIGluIHZhcmlhYmxlIENNRCEKK2Z1bmNfZXhlY3V0ZV9jbWRzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKyAgICBmb3IgY21kIGluICQxOyBkbworICAgICAgSUZTPSRzYXZlX2lmcworICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgorICAgIGRvbmUKKyAgICBJRlM9JHNhdmVfaWZzCit9CisKKworIyBmdW5jX3NvdXJjZSBmaWxlCisjIFNvdXJjZSBGSUxFLCBhZGRpbmcgZGlyZWN0b3J5IGNvbXBvbmVudCBpZiBuZWNlc3NhcnkuCisjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KKyMgRklMRSBldmVuIGlmIGJvdGggRklMRSBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQorIyBiZWhhdmlvciBoYXBwZW5zIG9ubHkgZm9yIGV4ZWMoMyksIG5vdCBmb3Igb3BlbigyKSEgIEFsc28sIHNvdXJjaW5nCisjIGBGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCitmdW5jX3NvdXJjZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICQxIGluCisgICAgKi8qIHwgKlxcKikJLiAiJDEiIDs7CisgICAgKikJCS4gIi4vJDEiIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3QgUEFUSAorIyBSZXBsYWNlIGEgbGVhZGluZyA9IGluIFBBVEggd2l0aCBhIHN5c3Jvb3QuICBTdG9yZSB0aGUgcmVzdWx0IGludG8KKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CitmdW5jX3Jlc29sdmVfc3lzcm9vdCAoKQoreworICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JDEKKyAgY2FzZSAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IGluCisgID0qKQorICAgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfcmVwbGFjZV9zeXNyb290IFBBVEgKKyMgSWYgUEFUSCBiZWdpbnMgd2l0aCB0aGUgc3lzcm9vdCwgcmVwbGFjZSBpdCB3aXRoID0gYW5kCisjIHN0b3JlIHRoZSByZXN1bHQgaW50byBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQuCitmdW5jX3JlcGxhY2Vfc3lzcm9vdCAoKQoreworICBjYXNlICIkbHRfc3lzcm9vdDokMSIgaW4KKyAgPyo6IiRsdF9zeXNyb290IiopCisgICAgZnVuY19zdHJpcG5hbWUgIiRsdF9zeXNyb290IiAnJyAiJDEiCisgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKyAgICA7OworICAqKQorICAgICMgSW5jbHVkaW5nIG5vIHN5c3Jvb3QuCisgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSQxCisgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfaW5mZXJfdGFnIGFyZworIyBJbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiB0byB1c2UgaWYgYW55IGFyZSBhdmFpbGFibGUgYW5kCisjIGlmIG9uZSB3YXNuJ3QgY2hvc2VuIHZpYSB0aGUgIi0tdGFnIiBjb21tYW5kIGxpbmUgb3B0aW9uLgorIyBPbmx5IGF0dGVtcHQgdGhpcyBpZiB0aGUgY29tcGlsZXIgaW4gdGhlIGJhc2UgY29tcGlsZQorIyBjb21tYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIGRlZmF1bHQgY29tcGlsZXIuCisjIGFyZyBpcyB1c3VhbGx5IG9mIHRoZSBmb3JtICdnY2MgLi4uJworZnVuY19pbmZlcl90YWcgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgaWYgdGVzdCAtbiAiJGF2YWlsYWJsZV90YWdzIiAmJiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKyAgICAgIENDX3F1b3RlZD0KKyAgICAgIGZvciBhcmcgaW4gJENDOyBkbworCWZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisgICAgICBkb25lCisgICAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisgICAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKKyAgICAgIGNhc2UgJEAgaW4KKyAgICAgICMgQmxhbmtzIGluIHRoZSBjb21tYW5kIG1heSBoYXZlIGJlZW4gc3RyaXBwZWQgYnkgdGhlIGNhbGxpbmcgc2hlbGwsCisgICAgICAjIGJ1dCBub3QgZnJvbSB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBjb25maWd1cmUgd2FzIHJ1bi4KKyAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKKyAgICAgICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiICRDQ19xdW90ZWRfZXhwYW5kZWQgIiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikgOzsKKyAgICAgICMgQmxhbmtzIGF0IHRoZSBzdGFydCBvZiAkYmFzZV9jb21waWxlIHdpbGwgY2F1c2UgdGhpcyB0byBmYWlsCisgICAgICAjIGlmIHdlIGRvbid0IGNoZWNrIGZvciB0aGVtIGFzIHdlbGwuCisgICAgICAqKQorCWZvciB6IGluICRhdmFpbGFibGVfdGFnczsgZG8KKwkgIGlmICRHUkVQICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KKwkgICAgZXZhbCAiYCR7U0VEfSAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckeickLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckeickL3AnIDwgJHByb2dwYXRoYCIKKwkgICAgQ0NfcXVvdGVkPQorCSAgICBmb3IgYXJnIGluICRDQzsgZG8KKwkgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCisJICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKKwkgICAgZG9uZQorCSAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisJICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAorCSAgICBjYXNlICIkQCAiIGluCisJICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKKwkgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKQorCSAgICAgICMgVGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUgY29tbWFuZCBtYXRjaGVzCisJICAgICAgIyB0aGUgb25lIGluIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbi4KKwkgICAgICAjIEFzc3VtZSB0aGlzIGlzIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbiB3ZSB3YW50LgorCSAgICAgIHRhZ25hbWU9JHoKKwkgICAgICBicmVhaworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisJZG9uZQorCSMgSWYgJHRhZ25hbWUgc3RpbGwgaXNuJ3Qgc2V0LCB0aGVuIG5vIHRhZ2dlZCBjb25maWd1cmF0aW9uCisJIyB3YXMgZm91bmQgYW5kIGxldCB0aGUgdXNlciBrbm93IHRoYXQgdGhlICItLXRhZyIgY29tbWFuZAorCSMgbGluZSBvcHRpb24gbXVzdCBiZSB1c2VkLgorCWlmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorCSAgZnVuY19lY2hvICJ1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisJICBmdW5jX2ZhdGFsX2Vycm9yICJzcGVjaWZ5IGEgdGFnIHdpdGggXGAtLXRhZyciCisjCWVsc2UKKyMJICBmdW5jX3ZlcmJvc2UgInVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorfQorCisKKworIyBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0IG91dHB1dF9uYW1lIHBpY19uYW1lIG5vbnBpY19uYW1lCisjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAorIyBidXQgZG9uJ3QgY3JlYXRlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgZHJ5IHJ1bi4KK2Z1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgKCkKK3sKKyAgICB3cml0ZV9saWJvYmo9JHsxfQorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICB3cml0ZV9sb2JqPVwnJHsyfVwnCisgICAgZWxzZQorICAgICAgd3JpdGVfbG9iaj1ub25lCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHdyaXRlX29sZG9iaj1cJyR7M31cJworICAgIGVsc2UKKyAgICAgIHdyaXRlX29sZG9iaj1ub25lCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKKyMgJHdyaXRlX2xpYm9iaiAtIGEgbGlidG9vbCBvYmplY3QgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIE5hbWUgb2YgdGhlIFBJQyBvYmplY3QuCitwaWNfb2JqZWN0PSR3cml0ZV9sb2JqCisKKyMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QKK25vbl9waWNfb2JqZWN0PSR3cml0ZV9vbGRvYmoKKworRU9GCisgICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIke3dyaXRlX2xpYm9ian0iCisgICAgfQorfQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZJTEUgTkFNRSBBTkQgUEFUSCBDT05WRVJTSU9OIEhFTFBFUiBGVU5DVElPTlMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyIEFSRworIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwKKyMgYW5kICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYQorIyBjb3JyZWN0bHkgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbQorIyBpbiAkYnVpbGQncyAkUEFUSC4KKyMKKyMgQVJHIGlzIHRoZSAkYnVpbGQgZmlsZSBuYW1lIHRvIGJlIGNvbnZlcnRlZCB0byB3MzIgZm9ybWF0LgorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCwgYW5kIHdpbGwKKyMgYmUgZW1wdHkgb24gZXJyb3IgKG9yIHdoZW4gQVJHIGlzIGVtcHR5KQorZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybyBlcnJvciBjb2RlLCBzbyB3ZQorICAgICMgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2Ygc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlCisgICAgIyBjb21tYW5kIGlzIG5vdCBmb3VuZCwgdGhlIHNoZWxsIHdpbGwgc2V0IGFuIGV4aXQgY29kZSBvZiAxMjcgYW5kIHByaW50CisgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoIGVycm9yIGNvZGUgb2YKKyAgICAjIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zIHRoZSBvZGQgY29uc3RydWN0aW9uOgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIke2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wfSI7IHRoZW4KKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PWAkRUNITyAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wIiB8CisgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICBlbHNlCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0KKyAgICBmaQorICBmaQorfQorIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIKKworCisjIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgQVJHCisjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwgYW5kCisjICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYSBjb3JyZWN0bHkKKyMgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbSBpbiAkYnVpbGQncworIyAkUEFUSC4gQXNzdW1lcyBBUkcgaGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycy4KKyMKKyMgQVJHIGlzIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB3aW4zMi4KKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQuCisjIFVuY29udmVydGlibGUgZmlsZSAoZGlyZWN0b3J5KSBuYW1lcyBpbiBBUkcgYXJlIHNraXBwZWQ7IGlmIG5vIGRpcmVjdG9yeSBuYW1lcworIyBhcmUgY29udmVydGlibGUsIHRoZW4gdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkuCitmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgIyB1bmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2Vzbid0IGNvbnZlcnQgcGF0aHMsIG9ubHkgZmlsZSBuYW1lcworICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBvbGRJRlM9JElGUworICAgIElGUz06CisgICAgZm9yIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiBpbiAkMTsgZG8KKyAgICAgIElGUz0kb2xkSUZTCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIgorICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IjsgdGhlbgorICAgICAgICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCAiOyRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0kb2xkSUZTCisgIGZpCit9CisjIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMgorCisKKyMgZnVuY19jeWdwYXRoIEFSR1MuLi4KKyMgV3JhcHBlciBhcm91bmQgY2FsbGluZyB0aGUgY3lncGF0aCBwcm9ncmFtIHZpYSBMVF9DWUdQQVRILiBUaGlzIGlzIHVzZWQgd2hlbgorIyB3aGVuICgxKSAkYnVpbGQgaXMgKm5peCBhbmQgQ3lnd2luIGlzIGhvc3RlZCB2aWEgYSB3aW5lIGVudmlyb25tZW50OyBvciAoMikKKyMgJGJ1aWxkIGlzIE1TWVMgYW5kICRob3N0IGlzIEN5Z3dpbiwgb3IgKDMpICRidWlsZCBpcyBDeWd3aW4uIEluIGNhc2UgKDEpIG9yCisjICgyKSwgcmV0dXJucyB0aGUgQ3lnd2luIGZpbGUgbmFtZSBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0CisjIGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4gdzMyIGZvcm1hdCwgYXMgcHJldmlvdXNseSBjb252ZXJ0ZWQKKyMgZnJvbSAkYnVpbGQncyAqbml4IG9yIE1TWVMgZm9ybWF0KS4gSW4gY2FzZSAoMyksIHJldHVybnMgdGhlIHczMiBmaWxlIG5hbWUKKyMgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dCBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluCisjIEN5Z3dpbiBmb3JtYXQpLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBvbiBlcnJvci4KKyMKKyMgQVJHUyBhcmUgcGFzc2VkIHRvIGN5Z3BhdGgsIHdpdGggdGhlIGxhc3Qgb25lIGJlaW5nIHRoZSBmaWxlIG5hbWUgb3IgcGF0aCB0bworIyBiZSBjb252ZXJ0ZWQuCisjCisjIFNwZWNpZnkgdGhlIGFic29sdXRlICpuaXggKG9yIHczMikgbmFtZSB0byBjeWdwYXRoIGluIHRoZSBMVF9DWUdQQVRICisjIGVudmlyb25tZW50IHZhcmlhYmxlOyBkbyBub3QgcHV0IGl0IGluICRQQVRILgorZnVuY19jeWdwYXRoICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgdGVzdCAtbiAiJExUX0NZR1BBVEgiICYmIHRlc3QgLWYgIiRMVF9DWUdQQVRIIjsgdGhlbgorICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9YCRMVF9DWUdQQVRIICIkQCIgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAiJD8iIC1uZSAwOyB0aGVuCisgICAgICAjIG9uIGZhaWx1cmUsIGVuc3VyZSByZXN1bHQgaXMgZW1wdHkKKyAgICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisgICAgZmkKKyAgZWxzZQorICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisgICAgZnVuY19lcnJvciAiTFRfQ1lHUEFUSCBpcyBlbXB0eSBvciBzcGVjaWZpZXMgbm9uLWV4aXN0ZW50IGZpbGU6IFxgJExUX0NZR1BBVEgnIgorICBmaQorfQorI2VuZDogZnVuY19jeWdwYXRoCisKKworIyBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgb3IgcGF0aCBBUkcgZnJvbSBNU1lTIGZvcm1hdCB0byB3MzIgZm9ybWF0LiAgUmV0dXJuCisjIHJlc3VsdCBpbiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQuCitmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8CisgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorfQorI2VuZDogZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIKKworCisjIGZ1bmNfY29udmVydF9maWxlX2NoZWNrIEFSRzEgQVJHMgorIyBWZXJpZnkgdGhhdCBBUkcxIChhIGZpbGUgbmFtZSBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0CisjIGZvcm1hdCBpbiBBUkcyLiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlIChyZXNldHRpbmcKKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIEFSRzEpLgorZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBpZiB0ZXN0IC16ICIkMiIgJiYgdGVzdCAtbiAiJDEiIDsgdGhlbgorICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBmaWxlIG5hbWUgY29ycmVzcG9uZGluZyB0byIKKyAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICMgRmFsbGJhY2s6CisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX2NoZWNrCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayBGUk9NX1BBVEhTRVAgVE9fUEFUSFNFUCBGUk9NX1BBVEggVE9fUEFUSAorIyBWZXJpZnkgdGhhdCBGUk9NX1BBVEggKGEgcGF0aCBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0CisjIGZvcm1hdCBpbiBUT19QQVRILiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlLCByZXNldHRpbmcKKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIGEgc2ltcGxpc3RpYyBmYWxsYmFjayB2YWx1ZSAoc2VlIGJlbG93KS4KK2Z1bmNfY29udmVydF9wYXRoX2NoZWNrICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgdGVzdCAteiAiJDQiICYmIHRlc3QgLW4gIiQzIjsgdGhlbgorICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgorICAgIGZ1bmNfZXJyb3IgIiAgXGAkMyciCisgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgIyBGYWxsYmFjay4gIFRoaXMgaXMgYSBkZWxpYmVyYXRlbHkgc2ltcGxpc3RpYyAiY29udmVyc2lvbiIgYW5kCisgICAgIyBzaG91bGQgbm90IGJlICJpbXByb3ZlZCIuICBTZWUgbGlidG9vbC5pbmZvLgorICAgIGlmIHRlc3QgIngkMSIgIT0gIngkMiI7IHRoZW4KKyAgICAgIGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycz0ic3wkMXwkMnxnIgorICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkMyIgfAorICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzImAKKyAgICBlbHNlCisgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzIgorICAgIGZpCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjaworCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwIEZST05UUEFUIEJBQ0tQQVQgUkVQTCBPUklHCisjIE1vZGlmaWVzIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCBieSBwcmVwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEZST05UUEFUCisjIGFuZCBhcHBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgQkFDS1BBVC4KK2Z1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAoKQoreworICAkb3B0X2RlYnVnCisgIGNhc2UgJDQgaW4KKyAgJDEgKSBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICA7OworICBlc2FjCisgIGNhc2UgJDQgaW4KKyAgJDIgKSBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgIiQzIgorICAgIDs7CisgIGVzYWMKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRidWlsZCB0byAkaG9zdCBGSUxFIE5BTUUgQ09OVkVSU0lPTiBGVU5DVElPTlMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgaW52b2tlZCB2aWEgYCR0b19ob3N0X2ZpbGVfY21kIEFSRycKKyMKKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKyMgUmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisKKworIyBmdW5jX3RvX2hvc3RfZmlsZSBBUkcKKyMgQ29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAorIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX3RvX2hvc3RfZmlsZSAoKQoreworICAkb3B0X2RlYnVnCisgICR0b19ob3N0X2ZpbGVfY21kICIkMSIKK30KKyMgZW5kIGZ1bmNfdG9faG9zdF9maWxlCisKKworIyBmdW5jX3RvX3Rvb2xfZmlsZSBBUkcgTEFaWQorIyBjb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gdG9vbGNoYWluIGZvcm1hdC4gUmV0dXJuCisjIHJlc3VsdCBpbiBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQuICBJZiB0aGUgY29udmVyc2lvbiBpbiB1c2UgaXMgbGlzdGVkCisjIGluICh0aGUgY29tbWEgc2VwYXJhdGVkKSBMQVpZLCBubyBjb252ZXJzaW9uIHRha2VzIHBsYWNlLgorZnVuY190b190b29sX2ZpbGUgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBjYXNlICwkMiwgaW4KKyAgICAqLCIkdG9fdG9vbF9maWxlX2NtZCIsKikKKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kMQorICAgICAgOzsKKyAgICAqKQorICAgICAgJHRvX3Rvb2xfZmlsZV9jbWQgIiQxIgorICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQKKyAgICAgIDs7CisgIGVzYWMKK30KKyMgZW5kIGZ1bmNfdG9fdG9vbF9maWxlCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9ub29wIEFSRworIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9ub29wICgpCit7CisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9ub29wCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIGJlY2F1c2UgJGJ1aWxkIGlzIGN5Z3dpbiwgd2UgY2FsbCAidGhlIiBjeWdwYXRoIGluICRQQVRIOyBubyBuZWVkIHRvIHVzZQorICAgICMgTFRfQ1lHUEFUSCBpbiB0aGlzIGNhc2UuCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PWBjeWdwYXRoIC1tICIkMSJgCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQKKyMgYW5kIGEgd29ya2luZyB3aW5lcGF0aC4gUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKKyAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkCisjIGluIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgY29udmVydCBmcm9tICpuaXggdG8gdzMyLCB0aGVuIHVzZSBjeWdwYXRoIHRvIGNvbnZlcnQgZnJvbSB3MzIgdG8gY3lnd2luLgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRidWlsZCB0byAkaG9zdCBQQVRIIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfcGF0aF9jbWQgQVJHJworIworIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgorIyBUaGUgcmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisjCisjIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gIElmCisjIEFSRyBiZWdpbnMgb3IgZW5kcyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyLCBpdCBpcyBwcmVzZXJ2ZWQgKGJ1dAorIyBjb252ZXJ0ZWQgdG8gJGhvc3QgZm9ybWF0KSBvbiBvdXRwdXQuCisjCisjIEFsbCBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBuYW1lZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb246CisjICAgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgOiBmdW5jX2NvbnZlcnRfZmlsZV9YX3RvX1kgKCkKKyMgICBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgICAgICA6IGZ1bmNfY29udmVydF9wYXRoX1hfdG9fWSAoKQorIyB3aGVyZSwgZm9yIGFueSBnaXZlbiAkYnVpbGQvJGhvc3QgY29tYmluYXRpb24gdGhlICdYX3RvX1knIHZhbHVlIGlzIHRoZQorIyBzYW1lLiAgSWYgY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIGFkZGVkIGZvciBuZXcgJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9ucywKKyMgdGhlIHR3byBuZXcgZnVuY3Rpb25zIG11c3QgZm9sbG93IHRoaXMgcGF0dGVybiwgb3IgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKyMgd2lsbCBicmVhay4KKworCisjIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisjIEVuc3VyZXMgdGhhdCBmdW5jdGlvbiAicG9pbnRlciIgdmFyaWFibGUgJHRvX2hvc3RfcGF0aF9jbWQgaXMgc2V0IHRvIHRoZQorIyBhcHByb3ByaWF0ZSB2YWx1ZSwgYmFzZWQgb24gdGhlIHZhbHVlIG9mICR0b19ob3N0X2ZpbGVfY21kLgordG9faG9zdF9wYXRoX2NtZD0KK2Z1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgdGVzdCAteiAiJHRvX2hvc3RfcGF0aF9jbWQiOyB0aGVuCisgICAgZnVuY19zdHJpcG5hbWUgJ2Z1bmNfY29udmVydF9maWxlXycgJycgIiR0b19ob3N0X2ZpbGVfY21kIgorICAgIHRvX2hvc3RfcGF0aF9jbWQ9ImZ1bmNfY29udmVydF9wYXRoXyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fSIKKyAgZmkKK30KKworCisjIGZ1bmNfdG9faG9zdF9wYXRoIEFSRworIyBDb252ZXJ0cyB0aGUgcGF0aCBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAorIyBpbiBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX3RvX2hvc3RfcGF0aCAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisgICR0b19ob3N0X3BhdGhfY21kICIkMSIKK30KKyMgZW5kIGZ1bmNfdG9faG9zdF9wYXRoCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9ub29wIEFSRworIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9ub29wICgpCit7CisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9ub29wCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYworIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbSBBUkcuICBNU1lTCisgICAgIyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZTsgY3lncGF0aCB0dXJucyB0aGVtIGludG8gJy47JyBhbmQgJzsuJzsKKyAgICAjIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBjeWdwYXRoIC1tIC1wICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSJgCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50IGFuZAorIyBhIHdvcmtpbmcgd2luZXBhdGguICBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIKKworCisjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCisjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZCBpbiBhCisjIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbQorICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KKyAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbgorCisKKyMgZnVuY19tb2RlX2NvbXBpbGUgYXJnLi4uCitmdW5jX21vZGVfY29tcGlsZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICAjIEdldCB0aGUgY29tcGlsYXRpb24gY29tbWFuZCBhbmQgdGhlIHNvdXJjZSBmaWxlLgorICAgIGJhc2VfY29tcGlsZT0KKyAgICBzcmNmaWxlPSIkbm9ub3B0IiAgIyAgYWx3YXlzIGtlZXAgYSBub24tZW1wdHkgdmFsdWUgaW4gInNyY2ZpbGUiCisgICAgc3VwcHJlc3Nfb3B0PXllcworICAgIHN1cHByZXNzX291dHB1dD0KKyAgICBhcmdfbW9kZT1ub3JtYWwKKyAgICBsaWJvYmo9CisgICAgbGF0ZXI9CisgICAgcGllX2ZsYWc9CisKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZ19tb2RlIGluCisgICAgICBhcmcgICkKKwkjIGRvIG5vdCAiY29udGludWUiLiAgSW5zdGVhZCwgYWRkIHRoaXMgdG8gYmFzZV9jb21waWxlCisJbGFzdGFyZz0iJGFyZyIKKwlhcmdfbW9kZT1ub3JtYWwKKwk7OworCisgICAgICB0YXJnZXQgKQorCWxpYm9iaj0iJGFyZyIKKwlhcmdfbW9kZT1ub3JtYWwKKwljb250aW51ZQorCTs7CisKKyAgICAgIG5vcm1hbCApCisJIyBBY2NlcHQgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zLgorCWNhc2UgJGFyZyBpbgorCS1vKQorCSAgdGVzdCAtbiAiJGxpYm9iaiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgY2Fubm90IHNwZWNpZnkgXGAtbycgbW9yZSB0aGFuIG9uY2UiCisJICBhcmdfbW9kZT10YXJnZXQKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXBpZSB8IC1mcGllIHwgLWZQSUUpCisgICAgICAgICAgZnVuY19hcHBlbmQgcGllX2ZsYWcgIiAkYXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwktc2hhcmVkIHwgLXN0YXRpYyB8IC1wcmVmZXItcGljIHwgLXByZWZlci1ub24tcGljKQorCSAgZnVuY19hcHBlbmQgbGF0ZXIgIiAkYXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwktbm8tc3VwcHJlc3MpCisJICBzdXBwcmVzc19vcHQ9bm8KKwkgIGNvbnRpbnVlCisJICA7OworCisJLVhjb21waWxlcikKKwkgIGFyZ19tb2RlPWFyZyAgIyAgdGhlIG5leHQgb25lIGdvZXMgaW50byB0aGUgImJhc2VfY29tcGlsZSIgYXJnIGxpc3QKKwkgIGNvbnRpbnVlICAgICAgIyAgVGhlIGN1cnJlbnQgInNyY2ZpbGUiIHdpbGwgZWl0aGVyIGJlIHJldGFpbmVkIG9yCisJICA7OyAgICAgICAgICAgICMgIHJlcGxhY2VkIGxhdGVyLiAgSSB3b3VsZCBndWVzcyB0aGF0IHdvdWxkIGJlIGEgYnVnLgorCisJLVdjLCopCisJICBmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisJICBhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGxhc3Rhcmc9CisJICBzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwkgIGZvciBhcmcgaW4gJGFyZ3M7IGRvCisJICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBmdW5jX2FwcGVuZF9xdW90ZWQgbGFzdGFyZyAiJGFyZyIKKwkgIGRvbmUKKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKKwkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisJICAjIEFkZCB0aGUgYXJndW1lbnRzIHRvIGJhc2VfY29tcGlsZS4KKwkgIGZ1bmNfYXBwZW5kIGJhc2VfY29tcGlsZSAiICRsYXN0YXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwkqKQorCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgorCSAgIyBUaGUgcHJldmlvdXMgInNyY2ZpbGUiIGJlY29tZXMgdGhlIGN1cnJlbnQgYXJndW1lbnQuCisJICAjCisJICBsYXN0YXJnPSIkc3JjZmlsZSIKKwkgIHNyY2ZpbGU9IiRhcmciCisJICA7OworCWVzYWMgICMgIGNhc2UgJGFyZworCTs7CisgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCisgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYmFzZV9jb21waWxlICIkbGFzdGFyZyIKKyAgICBkb25lICMgZm9yIGFyZworCisgICAgY2FzZSAkYXJnX21vZGUgaW4KKyAgICBhcmcpCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGFyZ3VtZW50IGZvciAtWGNvbXBpbGUiCisgICAgICA7OworICAgIHRhcmdldCkKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2l0aCBcYC1vJyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IG9iamVjdC4KKyAgICAgIHRlc3QgLXogIiRsaWJvYmoiICYmIHsKKwlmdW5jX2Jhc2VuYW1lICIkc3JjZmlsZSIKKwlsaWJvYmo9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIH0KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBSZWNvZ25pemUgc2V2ZXJhbCBkaWZmZXJlbnQgZmlsZSBzdWZmaXhlcy4KKyAgICAjIElmIHRoZSB1c2VyIHNwZWNpZmllcyAtbyBmaWxlLm8sIGl0IGlzIHJlcGxhY2VkIHdpdGggZmlsZS5sbworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICouW2NDRlNpZm1zb10gfCBcCisgICAgKi5hZGEgfCAqLmFkYiB8ICouYWRzIHwgKi5hc20gfCBcCisgICAgKi5jKysgfCAqLmNjIHwgKi5paSB8ICouY2xhc3MgfCAqLmNwcCB8ICouY3h4IHwgXAorICAgICouW2ZGXVswOV0/IHwgKi5mb3IgfCAqLmphdmEgfCAqLmdvIHwgKi5vYmogfCAqLnN4IHwgKi5jdSB8ICouY3VwKQorICAgICAgZnVuY194Zm9ybSAiJGxpYm9iaiIKKyAgICAgIGxpYm9iaj0kZnVuY194Zm9ybV9yZXN1bHQKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5sbykgZnVuY19sbzJvICIkbGlib2JqIjsgb2JqPSRmdW5jX2xvMm9fcmVzdWx0IDs7CisgICAgKikKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tIFxgJGxpYm9iaiciCisgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKKworICAgIGZvciBhcmcgaW4gJGxhdGVyOyBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYykKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItcGljKQorCXBpY19tb2RlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1ub24tcGljKQorCXBpY19tb2RlPW5vCisJY29udGludWUKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsaWJvYmoiCisgICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IiBcCisgICAgICAmJiAkRUNITyAiWCRsaWJvYmoiIHwgJEdSRVAgJ1tdfiNeKnt9Ozw+PyInIiciJwkgJigpfGAkW10nIFwKKyAgICAgICYmIGZ1bmNfd2FybmluZyAibGlib2JqIG5hbWUgXGAkbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb2JqIiAiLyIgIiIKKyAgICBvYmpuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgbG9iaj0ke3hkaXJ9JG9iamRpci8kb2JqbmFtZQorCisgICAgdGVzdCAteiAiJGJhc2VfY29tcGlsZSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgY29tcGlsYXRpb24gY29tbWFuZCIKKworICAgICMgRGVsZXRlIGFueSBsZWZ0b3ZlciBsaWJyYXJ5IG9iamVjdHMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgcmVtb3ZlbGlzdD0iJG9iaiAkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCisgICAgZWxzZQorICAgICAgcmVtb3ZlbGlzdD0iJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGZpCisKKyAgICAjIE9uIEN5Z3dpbiB0aGVyZSdzIG5vICJyZWFsIiBQSUMgZmxhZyBzbyB3ZSBtdXN0IGJ1aWxkIGJvdGggb2JqZWN0IHR5cGVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgICA7OworICAgIGVzYWMKKyAgICBpZiB0ZXN0ICIkcGljX21vZGUiID0gbm8gJiYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorICAgICAgIyBub24tUElDIGNvZGUgaW4gc2hhcmVkIGxpYnJhcmllcyBpcyBub3Qgc3VwcG9ydGVkCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgZmkKKworICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBjb21waWxlciBkb2VzCisgICAgIyBub3Qgc3VwcG9ydCAtbyB3aXRoIC1jCisgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSBubzsgdGhlbgorICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIiRzcmNmaWxlIiB8ICRTRUQgJ3MlXi4qLyUlOyBzJVwuW14uXSokJSUnYC4ke29iamV4dH0KKyAgICAgIGxvY2tmaWxlPSIkb3V0cHV0X29iai5sb2NrIgorICAgIGVsc2UKKyAgICAgIG91dHB1dF9vYmo9CisgICAgICBuZWVkX2xvY2tzPW5vCisgICAgICBsb2NrZmlsZT0KKyAgICBmaQorCisgICAgIyBMb2NrIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCBpcyBuZWVkZWQKKyAgICAjIFdlIHVzZSB0aGlzIHNjcmlwdCBmaWxlIHRvIG1ha2UgdGhlIGxpbmssIGl0IGF2b2lkcyBjcmVhdGluZyBhIG5ldyBmaWxlCisgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0geWVzOyB0aGVuCisgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCisJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKwlzbGVlcCAyCisgICAgICBkb25lCisgICAgZWxpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuOyB0aGVuCisgICAgICBpZiB0ZXN0IC1mICIkbG9ja2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGV4aXN0cyBhbmQgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJG91dHB1dF9vYmoiCisgICAgICAkRUNITyAiJHNyY2ZpbGUiID4gIiRsb2NrZmlsZSIKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkbG9ja2ZpbGUiCisgICAgdHJhcCAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJyAxIDIgMTUKKworICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkc3JjZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICBzcmNmaWxlPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkc3JjZmlsZSIKKyAgICBxc3JjZmlsZT0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKworICAgICMgT25seSBidWlsZCBhIFBJQyBvYmplY3QgaWYgd2UgYXJlIGJ1aWxkaW5nIGxpYnRvb2wgbGlicmFyaWVzLgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICAjIFdpdGhvdXQgdGhpcyBhc3NpZ25tZW50LCBiYXNlX2NvbXBpbGUgZ2V0cyBlbXB0aWVkLgorICAgICAgZmJzZF9oaWRlb3VzX3NoX2J1Zz0kYmFzZV9jb21waWxlCisKKyAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0gbm87IHRoZW4KKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICBlbHNlCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlIgorICAgICAgZmkKKworICAgICAgZnVuY19ta2Rpcl9wICIkeGRpciRvYmpkaXIiCisKKyAgICAgIGlmIHRlc3QgLXogIiRvdXRwdXRfb2JqIjsgdGhlbgorCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgorCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkbG9iaiIKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiCVwKKyAgICAgICAgICAndGVzdCAtbiAiJG91dHB1dF9vYmoiICYmICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCisJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK2J1dCBpdCBzaG91bGQgY29udGFpbjoKKyRzcmNmaWxlCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZCwgdGhlbiBnbyBvbiB0byBjb21waWxlIHRoZSBuZXh0IG9uZQorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkbG9iaiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRsb2JqIicgXAorCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKKyAgICAgIGZpCisKKyAgICAgICMgQWxsb3cgZXJyb3IgbWVzc2FnZXMgb25seSBmcm9tIHRoZSBmaXJzdCBjb21waWxhdGlvbi4KKyAgICAgIGlmIHRlc3QgIiRzdXBwcmVzc19vcHQiID0geWVzOyB0aGVuCisJc3VwcHJlc3Nfb3V0cHV0PScgPi9kZXYvbnVsbCAyPiYxJworICAgICAgZmkKKyAgICBmaQorCisgICAgIyBPbmx5IGJ1aWxkIGEgcG9zaXRpb24tZGVwZW5kZW50IG9iamVjdCBpZiB3ZSBidWlsZCBvbGQgbGlicmFyaWVzLgorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0geWVzOyB0aGVuCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlJHBpZV9mbGFnIgorICAgICAgZWxzZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IHllczsgdGhlbgorCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkb2JqIgorICAgICAgZmkKKworICAgICAgIyBTdXBwcmVzcyBjb21waWxlciBvdXRwdXQgaWYgd2UgYWxyZWFkeSBkaWQgYSBQSUMgY29tcGlsYXRpb24uCisgICAgICBmdW5jX2FwcGVuZCBjb21tYW5kICIkc3VwcHJlc3Nfb3V0cHV0IgorICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIgXAorICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCisJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK2J1dCBpdCBzaG91bGQgY29udGFpbjoKKyRzcmNmaWxlCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZAorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkb2JqIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCisgICAgICBmaQorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAiJGxpYm9iaiIgIiRvYmpkaXIvJG9iam5hbWUiICIkb2JqbmFtZSIKKworICAgICAgIyBVbmxvY2sgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgd2FzIGxvY2tlZAorICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisJcmVtb3ZlbGlzdD0kbG9ja2ZpbGUKKyAgICAgICAgJFJNICIkbG9ja2ZpbGUiCisgICAgICBmaQorICAgIH0KKworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCiskb3B0X2hlbHAgfHwgeworICB0ZXN0ICIkb3B0X21vZGUiID0gY29tcGlsZSAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KK30KKworZnVuY19tb2RlX2hlbHAgKCkKK3sKKyAgICAjIFdlIG5lZWQgdG8gZGlzcGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rlcy4KKyAgICBjYXNlICRvcHRfbW9kZSBpbgorICAgICAgIiIpCisgICAgICAgICMgR2VuZXJpYyBoZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB1c2FnZSBjb21tZW50cworICAgICAgICAjIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZpbGUuCisgICAgICAgIGZ1bmNfaGVscAorICAgICAgICA7OworCisgICAgICBjbGVhbikKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNsZWFuIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCit0byBSTS4KKworSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgb2JqZWN0IG9yIHByb2dyYW0sIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZAord2l0aCBpdCBhcmUgZGVsZXRlZC4gT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICBjb21waWxlKQorICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNvbXBpbGUgQ09NUElMRS1DT01NQU5ELi4uIFNPVVJDRUZJTEUKKworQ29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIGxpYnJhcnkgb2JqZWN0LgorCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtbyBPVVRQVVQtRklMRSAgICBzZXQgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gT1VUUFVULUZJTEUKKyAgLW5vLXN1cHByZXNzICAgICAgZG8gbm90IHN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBmb3IgbXVsdGlwbGUgcGFzc2VzCisgIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZCBQSUMgb2JqZWN0cyBvbmx5CisgIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZCBub24tUElDIG9iamVjdHMgb25seQorICAtc2hhcmVkICAgICAgICAgICBkbyBub3QgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLVdjLEZMQUcgICAgICAgICAgcGFzcyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorCitDT01QSUxFLUNPTU1BTkQgaXMgYSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgYSBcYHN0YW5kYXJkJyBvYmplY3QgZmlsZQorZnJvbSB0aGUgZ2l2ZW4gU09VUkNFRklMRS4KKworVGhlIG91dHB1dCBmaWxlIG5hbWUgaXMgZGV0ZXJtaW5lZCBieSByZW1vdmluZyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBmcm9tCitTT1VSQ0VGSUxFLCB0aGVuIHN1YnN0aXR1dGluZyB0aGUgQyBzb3VyY2UgY29kZSBzdWZmaXggXGAuYycgd2l0aCB0aGUKK2xpYnJhcnkgb2JqZWN0IHN1ZmZpeCwgXGAubG8nLiIKKyAgICAgICAgOzsKKworICAgICAgZXhlY3V0ZSkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWV4ZWN1dGUgQ09NTUFORCBbQVJHU10uLi4KKworQXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0uCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1kbG9wZW4gRklMRSAgICAgIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRklMRSB0byB0aGUgbGlicmFyeSBwYXRoCisKK1RoaXMgbW9kZSBzZXRzIHRoZSBsaWJyYXJ5IHBhdGggZW52aXJvbm1lbnQgdmFyaWFibGUgYWNjb3JkaW5nIHRvIFxgLWRsb3BlbicKK2ZsYWdzLgorCitJZiBhbnkgb2YgdGhlIEFSR1MgYXJlIGxpYnRvb2wgZXhlY3V0YWJsZSB3cmFwcGVycywgdGhlbiB0aGV5IGFyZSB0cmFuc2xhdGVkCitpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdW5pbnN0YWxsZWQgYmluYXJ5LCBhbmQgYW55IG9mIHRoZWlyIHJlcXVpcmVkIGxpYnJhcnkKK2RpcmVjdG9yaWVzIGFyZSBhZGRlZCB0byB0aGUgbGlicmFyeSBwYXRoLgorCitUaGVuLCBDT01NQU5EIGlzIGV4ZWN1dGVkLCB3aXRoIEFSR1MgYXMgYXJndW1lbnRzLiIKKyAgICAgICAgOzsKKworICAgICAgZmluaXNoKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZmluaXNoIFtMSUJESVJdLi4uCisKK0NvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMuCisKK0VhY2ggTElCRElSIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgbGlidG9vbCBsaWJyYXJpZXMuCisKK1RoZSBjb21tYW5kcyB0aGF0IHRoaXMgbW9kZSBleGVjdXRlcyBtYXkgcmVxdWlyZSBzdXBlcnVzZXIgcHJpdmlsZWdlcy4gIFVzZQordGhlIFxgLS1kcnktcnVuJyBvcHRpb24gaWYgeW91IGp1c3Qgd2FudCB0byBzZWUgd2hhdCB3b3VsZCBiZSBleGVjdXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIGluc3RhbGwpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1pbnN0YWxsIElOU1RBTEwtQ09NTUFORC4uLgorCitJbnN0YWxsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcy4KKworSU5TVEFMTC1DT01NQU5EIGlzIHRoZSBpbnN0YWxsYXRpb24gY29tbWFuZC4gIFRoZSBmaXJzdCBjb21wb25lbnQgc2hvdWxkIGJlCitlaXRoZXIgdGhlIFxgaW5zdGFsbCcgb3IgXGBjcCcgcHJvZ3JhbS4KKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIElOU1RBTEwtQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CisKKyAgLWluc3QtcHJlZml4LWRpciBQUkVGSVgtRElSICBVc2UgUFJFRklYLURJUiBhcyBhIHN0YWdpbmcgYXJlYSBmb3IgaW5zdGFsbGF0aW9uCisKK1RoZSByZXN0IG9mIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlcnByZXRlZCBhcyBhcmd1bWVudHMgdG8gdGhhdCBjb21tYW5kIChvbmx5CitCU0QtY29tcGF0aWJsZSBpbnN0YWxsIG9wdGlvbnMgYXJlIHJlY29nbml6ZWQpLiIKKyAgICAgICAgOzsKKworICAgICAgbGluaykKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWxpbmsgTElOSy1DT01NQU5ELi4uCisKK0xpbmsgb2JqZWN0IGZpbGVzIG9yIGxpYnJhcmllcyB0b2dldGhlciB0byBmb3JtIGFub3RoZXIgbGlicmFyeSwgb3IgdG8KK2NyZWF0ZSBhbiBleGVjdXRhYmxlIHByb2dyYW0uCisKK0xJTkstQ09NTUFORCBpcyBhIGNvbW1hbmQgdXNpbmcgdGhlIEMgY29tcGlsZXIgdGhhdCB5b3Ugd291bGQgdXNlIHRvIGNyZWF0ZQorYSBwcm9ncmFtIGZyb20gc2V2ZXJhbCBvYmplY3QgZmlsZXMuCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBMSU5LLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1hbGwtc3RhdGljICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIGF0IGFsbAorICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKKyAgLWJpbmRpciBCSU5ESVIgICAgc3BlY2lmeSBwYXRoIHRvIGJpbmFyaWVzIGRpcmVjdG9yeSAoZm9yIHN5c3RlbXMgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzIG11c3QgYmUgZm91bmQgaW4gdGhlIFBBVEggc2V0dGluZyBhdCBydW50aW1lKQorICAtZGxvcGVuIEZJTEUgICAgICBcYC1kbHByZW9wZW4nIEZJTEUgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkIGF0IHJ1bnRpbWUKKyAgLWRscHJlb3BlbiBGSUxFICAgbGluayBpbiBGSUxFIGFuZCBhZGQgaXRzIHN5bWJvbHMgdG8gbHRfcHJlbG9hZGVkX3N5bWJvbHMKKyAgLWV4cG9ydC1keW5hbWljICAgYWxsb3cgc3ltYm9scyBmcm9tIE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdpdGggZGxzeW0oMykKKyAgLWV4cG9ydC1zeW1ib2xzIFNZTUZJTEUKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIGxpc3RlZCBpbiBTWU1GSUxFCisgIC1leHBvcnQtc3ltYm9scy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbWF0Y2hpbmcgUkVHRVgKKyAgLUxMSUJESVIgICAgICAgICAgc2VhcmNoIExJQkRJUiBmb3IgcmVxdWlyZWQgaW5zdGFsbGVkIGxpYnJhcmllcworICAtbE5BTUUgICAgICAgICAgICBPVVRQVVQtRklMRSByZXF1aXJlcyB0aGUgaW5zdGFsbGVkIGxpYnJhcnkgbGliTkFNRQorICAtbW9kdWxlICAgICAgICAgICBidWlsZCBhIGxpYnJhcnkgdGhhdCBjYW4gZGxvcGVuZWQKKyAgLW5vLWZhc3QtaW5zdGFsbCAgZGlzYWJsZSB0aGUgZmFzdC1pbnN0YWxsIG1vZGUKKyAgLW5vLWluc3RhbGwgICAgICAgbGluayBhIG5vdC1pbnN0YWxsYWJsZSBleGVjdXRhYmxlCisgIC1uby11bmRlZmluZWQgICAgIGRlY2xhcmUgdGhhdCBhIGxpYnJhcnkgZG9lcyBub3QgcmVmZXIgdG8gZXh0ZXJuYWwgc3ltYm9scworICAtbyBPVVRQVVQtRklMRSAgICBjcmVhdGUgT1VUUFVULUZJTEUgZnJvbSB0aGUgc3BlY2lmaWVkIG9iamVjdHMKKyAgLW9iamVjdGxpc3QgRklMRSAgVXNlIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgZm91bmQgaW4gRklMRSB0byBzcGVjaWZ5IG9iamVjdHMKKyAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBvdXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVHRVgKKyAgLXJlbGVhc2UgUkVMRUFTRSAgc3BlY2lmeSBwYWNrYWdlIHJlbGVhc2UgaW5mb3JtYXRpb24KKyAgLXJwYXRoIExJQkRJUiAgICAgdGhlIGNyZWF0ZWQgbGlicmFyeSB3aWxsIGV2ZW50dWFsbHkgYmUgaW5zdGFsbGVkIGluIExJQkRJUgorICAtUlsgXUxJQkRJUiAgICAgICBhZGQgTElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcworICAtc2hhcmVkICAgICAgICAgICBvbmx5IGRvIGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtc2hyZXh0IFNVRkZJWCAgICBvdmVycmlkZSB0aGUgc3RhbmRhcmQgc2hhcmVkIGxpYnJhcnkgZmlsZSBleHRlbnNpb24KKyAgLXN0YXRpYyAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXN0YXRpYy1saWJ0b29sLWxpYnMKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXZlcnNpb24taW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBsaWJyYXJ5IHZlcnNpb24gaW5mbyBbZWFjaCB2YXJpYWJsZSBkZWZhdWx0cyB0byAwXQorICAtd2VhayBMSUJOQU1FICAgICBkZWNsYXJlIHRoYXQgdGhlIHRhcmdldCBwcm92aWRlcyB0aGUgTElCTkFNRSBpbnRlcmZhY2UKKyAgLVdjLEZMQUcKKyAgLVhjb21waWxlciBGTEFHICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKKyAgLVdsLEZMQUcKKyAgLVhsaW5rZXIgRkxBRyAgICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgbGlua2VyCisgIC1YQ0NsaW5rZXIgRkxBRyAgIHBhc3MgbGluay1zcGVjaWZpYyBGTEFHIHRvIHRoZSBjb21waWxlciBkcml2ZXIgKENDKQorCitBbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoIFxgLScpIGFyZSBpZ25vcmVkLgorCitFdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gXGAubGEnIGFyZQordHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKK29iamVjdCBmaWxlcy4KKworSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCitvbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCityZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnIG9yIFxgLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKK3VzaW5nIFxgYXInIGFuZCBcYHJhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgXGBsaWInLgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxvJyBvciBcYC4ke29iamV4dH0nLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQoraXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpcyBjcmVhdGVkLiIKKyAgICAgICAgOzsKKworICAgICAgdW5pbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9dW5pbnN0YWxsIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgorT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgIGVjaG8KKyAgICAkRUNITyAiVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgorfQorCisjIE5vdyB0aGF0IHdlJ3ZlIGNvbGxlY3RlZCBhIHBvc3NpYmxlIC0tbW9kZSBhcmcsIHNob3cgaGVscCBpZiBuZWNlc3NhcnkKK2lmICRvcHRfaGVscDsgdGhlbgorICBpZiB0ZXN0ICIkb3B0X2hlbHAiID0gOjsgdGhlbgorICAgIGZ1bmNfbW9kZV9oZWxwCisgIGVsc2UKKyAgICB7CisgICAgICBmdW5jX2hlbHAgbm9leGl0CisgICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworCWZ1bmNfbW9kZV9oZWxwCisgICAgICBkb25lCisgICAgfSB8IHNlZCAtbiAnMXA7IDIsJHMvXlVzYWdlOi8gIG9yOiAvcCcKKyAgICB7CisgICAgICBmdW5jX2hlbHAgbm9leGl0CisgICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworCWVjaG8KKwlmdW5jX21vZGVfaGVscAorICAgICAgZG9uZQorICAgIH0gfAorICAgIHNlZCAnMWQKKyAgICAgIC9eV2hlbiByZXBvcnRpbmcvLC9eUmVwb3J0L3sKKwlICisJZAorICAgICAgfQorICAgICAgJHgKKyAgICAgIC9pbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy9kCisgICAgICAvbW9yZSBkZXRhaWxlZCAuKk1PREUvZAorICAgICAgcy9eVXNhZ2U6LiotLW1vZGU9XChbXiBdKlwpIC4qL0Rlc2NyaXB0aW9uIG9mIFwxIG1vZGU6LycKKyAgZmkKKyAgZXhpdCAkPworZmkKKworCisjIGZ1bmNfbW9kZV9leGVjdXRlIGFyZy4uLgorZnVuY19tb2RlX2V4ZWN1dGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgbmFtZS4KKyAgICBjbWQ9IiRub25vcHQiCisgICAgdGVzdCAteiAiJGNtZCIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIKKworICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCisgICAgZm9yIGZpbGUgaW4gJG9wdF9kbG9wZW47IGRvCisgICAgICB0ZXN0IC1mICIkZmlsZSIgXAorCXx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgZmlsZSIKKworICAgICAgZGlyPQorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi5sYSkKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCisJZmlsZT0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJIyBSZWFkIHRoZSBsaWJ0b29sIGxpYnJhcnkuCisJZGxuYW1lPQorCWxpYnJhcnlfbmFtZXM9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBTa2lwIHRoaXMgbGlicmFyeSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQuCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgICMgV2FybiBpZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KKwkgIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJiBcCisJICAgIGZ1bmNfd2FybmluZyAiXGAkZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCBcYC1leHBvcnQtZHluYW1pYyciCisJICBjb250aW51ZQorCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCisJICBmdW5jX2FwcGVuZCBkaXIgIi8kb2JqZGlyIgorCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBKdXN0IGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIC5sbyBmaWxlLgorCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJOzsKKworICAgICAgKikKKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGhuYW1lLgorICAgICAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSIkYWJzZGlyIgorCisgICAgICAjIE5vdyBhZGQgdGhlIGRpcmVjdG9yeSB0byBzaGxpYnBhdGhfdmFyLgorICAgICAgaWYgZXZhbCAidGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIiI7IHRoZW4KKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCisgICAgICBlbHNlCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCisgICAgICBmaQorICAgIGRvbmUKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgorICAgICMgcmF0aGVyIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2V4ZWN1dGVfbWFnaWM9IiRtYWdpYyIKKworICAgICMgQ2hlY2sgaWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgYSB3cmFwcGVyIHNjcmlwdC4KKyAgICBhcmdzPQorICAgIGZvciBmaWxlCisgICAgZG8KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgIC0qIHwgKi5sYSB8ICoubG8gKSA7OworICAgICAgKikKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgIiRmaWxlIgorCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KKwkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCWVsaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgZnVuY19zb3VyY2UgIiRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgorICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGFyZ3MgIiRmaWxlIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgIlgkb3B0X2RyeV9ydW4iID0gWGZhbHNlOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkjIEV4cG9ydCB0aGUgc2hsaWJwYXRoX3Zhci4KKwlldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorCisgICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICBmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKKyAgICAgIGRvCisJZXZhbCAiaWYgdGVzdCBcIlwke3NhdmVfJGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKyAgICAgICAgICAgICAgICAkbHRfdmFyPVwkc2F2ZV8kbHRfdmFyOyBleHBvcnQgJGx0X3ZhcgorCSAgICAgIGVsc2UKKwkJJGx0X3Vuc2V0ICRsdF92YXIKKwkgICAgICBmaSIKKyAgICAgIGRvbmUKKworICAgICAgIyBOb3cgcHJlcGFyZSB0byBhY3R1YWxseSBleGVjIHRoZSBjb21tYW5kLgorICAgICAgZXhlY19jbWQ9IlwkY21kJGFyZ3MiCisgICAgZWxzZQorICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCWV2YWwgIlwkRUNITyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCisJZWNobyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKyAgICAgICRFQ0hPICIkY21kJGFyZ3MiCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0ICIkb3B0X21vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV9maW5pc2ggYXJnLi4uCitmdW5jX21vZGVfZmluaXNoICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGxpYnM9CisgICAgbGliZGlycz0KKyAgICBhZG1pbmNtZHM9CisKKyAgICBmb3Igb3B0IGluICIkbm9ub3B0IiAkezErIiRAIn0KKyAgICBkbworICAgICAgaWYgdGVzdCAtZCAiJG9wdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBsaWJkaXJzICIgJG9wdCIKKworICAgICAgZWxpZiB0ZXN0IC1mICIkb3B0IjsgdGhlbgorCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRvcHQiOyB0aGVuCisJICBmdW5jX2FwcGVuZCBsaWJzICIgJG9wdCIKKwllbHNlCisJICBmdW5jX3dhcm5pbmcgIlxgJG9wdCcgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCWZpCisKKyAgICAgIGVsc2UKKwlmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IFxgJG9wdCciCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGlmIHRlc3QgLW4gIiRsaWJzIjsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJGx0X3N5c3Jvb3QiOyB0aGVuCisgICAgICAgIHN5c3Jvb3RfcmVnZXg9YCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisgICAgICAgIHN5c3Jvb3RfY21kPSJzL1woWyAnXVwpJHN5c3Jvb3RfcmVnZXgvXDEvZzsiCisgICAgICBlbHNlCisgICAgICAgIHN5c3Jvb3RfY21kPQorICAgICAgZmkKKworICAgICAgIyBSZW1vdmUgc3lzcm9vdCByZWZlcmVuY2VzCisgICAgICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKyAgICAgICAgICBlY2hvICJyZW1vdmluZyByZWZlcmVuY2VzIHRvICRsdF9zeXNyb290IGFuZCBcYD0nIHByZWZpeGVzIGZyb20gJGxpYiIKKyAgICAgICAgZG9uZQorICAgICAgZWxzZQorICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbworCSAgc2VkIC1lICIke3N5c3Jvb3RfY21kfSBzL1woWyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9L1wxL2ciICRsaWIgXAorCSAgICA+ICR0bXBkaXIvdG1wLWxhCisJICBtdiAtZiAkdG1wZGlyL3RtcC1sYSAkbGliCisJZG9uZQorICAgICAgICAke1JNfXIgIiR0bXBkaXIiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKwlpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMiOyB0aGVuCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgZmluaXNoIGNvbW1hbmRzLgorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRmaW5pc2hfY21kcyIgJ2FkbWluY21kcz0iJGFkbWluY21kcworJyIkY21kIiciJworCWZpCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgorCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgorCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgZnVuY19hcHBlbmQgYWRtaW5jbWRzICIKKyAgICAgICAkY21kcyIKKwlmaQorICAgICAgZG9uZQorICAgIGZpCisKKyAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KKyAgICAkb3B0X3NpbGVudCAmJiBleGl0ICRFWElUX1NVQ0NFU1MKKworICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgICAgZWNobyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgorICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKwkkRUNITyAiICAgJGxpYmRpciIKKyAgICAgIGRvbmUKKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorICAgICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCisgICAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgorICAgICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKwllY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorCWVjaG8gIiAgICAgZHVyaW5nIGxpbmtpbmciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJbGliZGlyPUxJQkRJUgorCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKworCSRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KKwkkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKwllY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKyAgICAgIGZpCisgICAgICBlY2hvCisKKyAgICAgIGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorICAgICAgY2FzZSAkaG9zdCBpbgorCXNvbGFyaXMyLls2Nzg5XXxzb2xhcmlzMi4xWzAtOV0pCisJICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3JsZSgxKSBhbmQgbGQuc28oOCkgbWFudWFsIgorCSAgZWNobyAicGFnZXMuIgorCSAgOzsKKwkqKQorCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCisJICA7OworICAgICAgZXNhYworICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICBmaQorICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCit0ZXN0ICIkb3B0X21vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV9pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAjIGluc3RhbGxfcHJvZyAoZXNwZWNpYWxseSBvbiBXaW5kb3dzIE5UKS4KKyAgICBpZiB0ZXN0ICIkbm9ub3B0IiA9ICIkU0hFTEwiIHx8IHRlc3QgIiRub25vcHQiID0gL2Jpbi9zaCB8fAorICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgorICAgICAgIGNhc2UgJG5vbm9wdCBpbiAqc2h0b29sKikgOjs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbgorICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJG5vbm9wdCIKKyAgICAgIGluc3RhbGxfcHJvZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIKKyAgICAgIGFyZz0kMQorICAgICAgc2hpZnQKKyAgICBlbHNlCisgICAgICBpbnN0YWxsX3Byb2c9CisgICAgICBhcmc9JG5vbm9wdAorICAgIGZpCisKKyAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCisgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgaW5zdGFsbF9zaGFyZWRfcHJvZz0kaW5zdGFsbF9wcm9nCisgICAgY2FzZSAiICRpbnN0YWxsX3Byb2cgIiBpbgorICAgICAgKltcXFwgL11jcFwgKikgaW5zdGFsbF9jcD06IDs7CisgICAgICAqKSBpbnN0YWxsX2NwPWZhbHNlIDs7CisgICAgZXNhYworCisgICAgIyBXZSBuZWVkIHRvIGFjY2VwdCBhdCBsZWFzdCBhbGwgdGhlIEJTRCBpbnN0YWxsIGZsYWdzLgorICAgIGRlc3Q9CisgICAgZmlsZXM9CisgICAgb3B0cz0KKyAgICBwcmV2PQorICAgIGluc3RhbGxfdHlwZT0KKyAgICBpc2Rpcj1ubworICAgIHN0cmlwbWU9CisgICAgbm9fbW9kZT06CisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBhcmcyPQorICAgICAgaWYgdGVzdCAtbiAiJGRlc3QiOyB0aGVuCisJZnVuY19hcHBlbmQgZmlsZXMgIiAkZGVzdCIKKwlkZXN0PSRhcmcKKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtZCkgaXNkaXI9eWVzIDs7CisgICAgICAtZikKKwlpZiAkaW5zdGFsbF9jcDsgdGhlbiA6OyBlbHNlCisJICBwcmV2PSRhcmcKKwlmaQorCTs7CisgICAgICAtZyB8IC1tIHwgLW8pCisJcHJldj0kYXJnCisJOzsKKyAgICAgIC1zKQorCXN0cmlwbWU9IiAtcyIKKwljb250aW51ZQorCTs7CisgICAgICAtKikKKwk7OworICAgICAgKikKKwkjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZGVkIGFuIGFyZ3VtZW50LCB0aGVuIHNraXAgaXQuCisJaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJICBpZiB0ZXN0ICJ4JHByZXYiID0geC1tICYmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiOyB0aGVuCisJICAgIGFyZzI9JGluc3RhbGxfb3ZlcnJpZGVfbW9kZQorCSAgICBub19tb2RlPWZhbHNlCisJICBmaQorCSAgcHJldj0KKwllbHNlCisJICBkZXN0PSRhcmcKKwkgIGNvbnRpbnVlCisJZmkKKwk7OworICAgICAgZXNhYworCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgIGlmIHRlc3QgLW4gIiRhcmcyIjsgdGhlbgorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmcyIgorICAgICAgZmkKKyAgICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJGluc3RhbGxfcHJvZyIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGluc3RhbGwgcHJvZ3JhbSIKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiAmJiAkbm9fbW9kZTsgdGhlbgorICAgICAgaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiCisJZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiIC1tICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRkZXN0IjsgdGhlbgorCWZ1bmNfZmF0YWxfaGVscCAibm8gZmlsZSBvciBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiCisgICAgICBlbHNlCisJZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24iCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0IgorICAgIGRlc3Q9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnkuCisgICAgdGVzdCAtZCAiJGRlc3QiICYmIGlzZGlyPXllcworICAgIGlmIHRlc3QgIiRpc2RpciIgPSB5ZXM7IHRoZW4KKyAgICAgIGRlc3RkaXI9IiRkZXN0IgorICAgICAgZGVzdG5hbWU9CisgICAgZWxzZQorICAgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJGRlc3QiICIiICIuIgorICAgICAgZGVzdGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICBkZXN0bmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisgICAgICAjIE5vdCBhIGRpcmVjdG9yeSwgc28gY2hlY2sgdG8gc2VlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlsZSBzcGVjaWZpZWQuCisgICAgICBzZXQgZHVtbXkgJGZpbGVzOyBzaGlmdAorICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKwlmdW5jX2ZhdGFsX2hlbHAgIlxgJGRlc3QnIGlzIG5vdCBhIGRpcmVjdG9yeSIKKyAgICBmaQorICAgIGNhc2UgJGRlc3RkaXIgaW4KKyAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisgICAgKikKKyAgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKwljYXNlICRmaWxlIGluCisJKi5sbykgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIgorCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgorICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0iJG1hZ2ljIgorCisgICAgc3RhdGljbGlicz0KKyAgICBmdXR1cmVfbGliZGlycz0KKyAgICBjdXJyZW50X2xpYmRpcnM9CisgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCisgICAgICAjIERvIGVhY2ggaW5zdGFsbGF0aW9uLgorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi4kbGliZXh0KQorCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCisJZnVuY19hcHBlbmQgc3RhdGljbGlicyAiICRmaWxlIgorCTs7CisKKyAgICAgICoubGEpCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwlsaWJyYXJ5X25hbWVzPQorCW9sZF9saWJyYXJ5PQorCXJlbGlua19jb21tYW5kPQorCWZ1bmNfc291cmNlICIkZmlsZSIKKworCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KKwlpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgorCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgY3VycmVudF9saWJkaXJzICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwllbHNlCisJICAjIE5vdGUgdGhlIGxpYmRpciBhcyBhIGZ1dHVyZSBsaWJkaXIuCisJICBjYXNlICIkZnV0dXJlX2xpYmRpcnMgIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZ1dHVyZV9saWJkaXJzICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIi8iICIiCisJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCisKKwlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiJGRlc3RkaXIiIHwgJFNFRCAtZSAicyUkbGliZGlyXCQlJSJgCisKKwkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKwkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCB0byB0aGUgc2FtZSBwcmVmaXguCisJICAjIEF0IHByZXNlbnQsIHRoaXMgY2hlY2sgZG9lc24ndCBhZmZlY3Qgd2luZG93cyAuZGxsJ3MgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIGludG8gJGxpYmRpci8uLi9iaW4gKGN1cnJlbnRseSwgdGhhdCB3b3JrcyBmaW5lKQorCSAgIyBidXQgaXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uCisJICB0ZXN0ICIkaW5zdF9wcmVmaXhfZGlyIiA9ICIkZGVzdGRpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogY2Fubm90IGluc3RhbGwgXGAkZmlsZScgdG8gYSBkaXJlY3Rvcnkgbm90IGVuZGluZyBpbiAkbGliZGlyIgorCisJICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCSAgICAjIFN0aWNrIHRoZSBpbnN0X3ByZWZpeF9kaXIgZGF0YSBpbnRvIHRoZSBsaW5rIGNvbW1hbmQuCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlLWluc3QtcHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSJgCisJICBlbHNlCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlJSJgCisJICBmaQorCisJICBmdW5jX3dhcm5pbmcgInJlbGlua2luZyBcYCRmaWxlJyIKKwkgIGZ1bmNfc2hvd19ldmFsICIkcmVsaW5rX2NvbW1hbmQiIFwKKwkgICAgJ2Z1bmNfZmF0YWxfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZSdcJycgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCisJZmkKKworCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzOyBzaGlmdAorCWlmIHRlc3QgLW4gIiQxIjsgdGhlbgorCSAgcmVhbG5hbWU9IiQxIgorCSAgc2hpZnQKKworCSAgc3JjbmFtZT0iJHJlYWxuYW1lIgorCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorCisJICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiIFwKKwkgICAgICAnZXhpdCAkPycKKwkgIHRzdHJpcG1lPSIkc3RyaXBtZSIKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKwkgICAgY2FzZSAkcmVhbG5hbWUgaW4KKwkgICAgKi5kbGwuYSkKKwkgICAgICB0c3RyaXBtZT0iIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgLW4gIiR0c3RyaXBtZSIgJiYgdGVzdCAtbiAiJHN0cmlwbGliIjsgdGhlbgorCSAgICBmdW5jX3Nob3dfZXZhbCAiJHN0cmlwbGliICRkZXN0ZGlyLyRyZWFsbmFtZSIgJ2V4aXQgJD8nCisJICBmaQorCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgIyBEZWxldGUgdGhlIG9sZCBzeW1saW5rcywgYW5kIGNyZWF0ZSBuZXcgb25lcy4KKwkgICAgIyBUcnkgYGxuIC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlIGBsbicgYmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgorCSAgICAjIHRoZSBzeW1saW5rIHdlIHJlcGxhY2UhICBTb2xhcmlzIC9iaW4vbG4gZG9lcyBub3QgdW5kZXJzdGFuZCAtZiwKKwkgICAgIyBzbyB3ZSBhbHNvIG5lZWQgdG8gdHJ5IHJtICYmIGxuIC1zLgorCSAgICBmb3IgbGlua25hbWUKKwkgICAgZG8KKwkgICAgICB0ZXN0ICIkbGlua25hbWUiICE9ICIkcmVhbG5hbWUiIFwKKwkJJiYgZnVuY19zaG93X2V2YWwgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkUk0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgorCSAgICBkb25lCisJICBmaQorCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisJICBsaWI9IiRkZXN0ZGlyLyRyZWFsbmFtZSIKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCSMgSW5zdGFsbCB0aGUgcHNldWRvLWxpYnJhcnkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzLgorCWZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwlpbnN0bmFtZT0iJGRpci8kbmFtZSJpCisJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGluc3RuYW1lICRkZXN0ZGlyLyRuYW1lIiAnZXhpdCAkPycKKworCSMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KKwl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwk7OworCisgICAgICAqLmxvKQorCSMgSW5zdGFsbCAoaS5lLiBjb3B5KSBhIGxpYnRvb2wgb2JqZWN0LgorCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwljYXNlICRkZXN0ZmlsZSBpbgorCSoubG8pCisJICBmdW5jX2xvMm8gIiRkZXN0ZmlsZSIKKwkgIHN0YXRpY2Rlc3Q9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIDs7CisJKi4kb2JqZXh0KQorCSAgc3RhdGljZGVzdD0iJGRlc3RmaWxlIgorCSAgZGVzdGZpbGU9CisJICA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gXGAkZGVzdGZpbGUnIgorCSAgOzsKKwllc2FjCisKKwkjIEluc3RhbGwgdGhlIGxpYnRvb2wgb2JqZWN0IGlmIHJlcXVlc3RlZC4KKwl0ZXN0IC1uICIkZGVzdGZpbGUiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisKKwkjIEluc3RhbGwgdGhlIG9sZCBvYmplY3QgaWYgZW5hYmxlZC4KKwlpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCSAgZnVuY19sbzJvICIkZmlsZSIKKwkgIHN0YXRpY29iaj0kZnVuY19sbzJvX3Jlc3VsdAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRzdGF0aWNvYmogXCRzdGF0aWNkZXN0IiAnZXhpdCAkPycKKwlmaQorCWV4aXQgJEVYSVRfU1VDQ0VTUworCTs7CisKKyAgICAgICopCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0CisJIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bworCSMgaW5zdGFsbAorCXN0cmlwcGVkX2V4dD0iIgorCWNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgc3RyaXBwZWRfZXh0PSIuZXhlIgorCSAgICBmaQorCSAgICA7OworCWVzYWMKKworCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqKQorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIGVsc2UKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmaQorCSAgICA7OworCSopCisJICAgIHdyYXBwZXI9JGZpbGUKKwkgICAgOzsKKwllc2FjCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiR3cmFwcGVyIjsgdGhlbgorCSAgbm90aW5zdF9kZXBsaWJzPQorCSAgcmVsaW5rX2NvbW1hbmQ9CisKKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCisJICB0ZXN0IC16ICIkZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgXGAkd3JhcHBlciciCisKKwkgIGZpbmFsaXplPXllcworCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbworCSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCisJICAgIGxpYmRpcj0KKwkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKwkgICAgICBmdW5jX3NvdXJjZSAiJGxpYiIKKwkgICAgZmkKKwkgICAgbGliZmlsZT0iJGxpYmRpci8iYCRFQ0hPICIkbGliIiB8ICRTRUQgJ3MlXi4qLyUlZydgICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCSAgICBpZiB0ZXN0IC1uICIkbGliZGlyIiAmJiB0ZXN0ICEgLWYgIiRsaWJmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfd2FybmluZyAiXGAkbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIFxgJGxpYmRpciciCisJICAgICAgZmluYWxpemU9bm8KKwkgICAgZmkKKwkgIGRvbmUKKworCSAgcmVsaW5rX2NvbW1hbmQ9CisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgIG91dHB1dG5hbWU9CisJICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBpZiB0ZXN0ICIkZmluYWxpemUiID0geWVzOyB0aGVuCisJICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorCQlmdW5jX2Jhc2VuYW1lICIkZmlsZSRzdHJpcHBlZF9leHQiCisJCWZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgICAgIG91dHB1dG5hbWU9IiR0bXBkaXIvJGZpbGUiCisJICAgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJICAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dG5hbWUiJyVnJ2AKKworCSAgICAgICAgJG9wdF9zaWxlbnQgfHwgeworCSAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRyZWxpbmtfY29tbWFuZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgICB9CisJICAgICAgICBpZiBldmFsICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuIDoKKwkgICAgICAgICAgZWxzZQorCQkgIGZ1bmNfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIKKwkJICAkb3B0X2RyeV9ydW4gfHwgJHtSTX1yICIkdG1wZGlyIgorCQkgIGNvbnRpbnVlCisJICAgICAgICBmaQorCSAgICAgICAgZmlsZT0iJG91dHB1dG5hbWUiCisJICAgICAgZWxzZQorCSAgICAgICAgZnVuY193YXJuaW5nICJjYW5ub3QgcmVsaW5rIFxgJGZpbGUnIgorCSAgICAgIGZpCisJICAgIH0KKwkgIGVsc2UKKwkgICAgIyBJbnN0YWxsIHRoZSBiaW5hcnkgdGhhdCB3ZSBjb21waWxlZCBlYXJsaWVyLgorCSAgICBmaWxlPWAkRUNITyAiJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRTRUQgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCisJICBmaQorCWZpCisKKwkjIHJlbW92ZSAuZXhlIHNpbmNlIGN5Z3dpbiAvdXNyL2Jpbi9pbnN0YWxsIHdpbGwgYXBwZW5kIGFub3RoZXIKKwkjIG9uZSBhbnl3YXkKKwljYXNlICRpbnN0YWxsX3Byb2csJGhvc3QgaW4KKwkqL3Vzci9iaW4vaW5zdGFsbCosKmN5Z3dpbiopCisJICBjYXNlICRmaWxlOiRkZXN0ZmlsZSBpbgorCSAgKi5leGU6Ki5leGUpCisJICAgICMgdGhpcyBpcyBvaworCSAgICA7OworCSAgKi5leGU6KikKKwkgICAgZGVzdGZpbGU9JGRlc3RmaWxlLmV4ZQorCSAgICA7OworCSAgKjoqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZGVzdGZpbGUiCisJICAgIGRlc3RmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nXCRzdHJpcG1lIFwkZmlsZSBcJGRlc3RmaWxlIiAnZXhpdCAkPycKKwkkb3B0X2RyeV9ydW4gfHwgaWYgdGVzdCAtbiAiJG91dHB1dG5hbWUiOyB0aGVuCisJICAke1JNfXIgIiR0bXBkaXIiCisJZmkKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbworICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKyAgICAgICMgU2V0IHVwIHRoZSByYW5saWIgcGFyYW1ldGVycy4KKyAgICAgIG9sZGxpYj0iJGRlc3RkaXIvJG5hbWUiCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9sZGxpYiIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgIHRvb2xfb2xkbGliPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRmaWxlIFwkb2xkbGliIiAnZXhpdCAkPycKKworICAgICAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRvbGRfc3RyaXBsaWIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgIiRvbGRfc3RyaXBsaWIgJHRvb2xfb2xkbGliIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworICAgIGRvbmUKKworICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAorICAgICAgZnVuY193YXJuaW5nICJyZW1lbWJlciB0byBydW4gXGAkcHJvZ25hbWUgLS1maW5pc2gkZnV0dXJlX2xpYmRpcnMnIgorCisgICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KKyAgICAgICMgTWF5YmUganVzdCBkbyBhIGRyeSBydW4uCisgICAgICAkb3B0X2RyeV9ydW4gJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgorICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJworICAgIGVsc2UKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCit9CisKK3Rlc3QgIiRvcHRfbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQorCisKKyMgZnVuY19nZW5lcmF0ZV9kbHN5bXMgb3V0cHV0bmFtZSBvcmlnaW5hdG9yIHBpY19wCisjIEV4dHJhY3Qgc3ltYm9scyBmcm9tIGRscHJlZmlsZXMgYW5kIGNyZWF0ZSAke291dHB1dG5hbWV9Uy5vIHdpdGgKKyMgYSBkbHByZW9wZW4gc3ltYm9sIHRhYmxlLgorZnVuY19nZW5lcmF0ZV9kbHN5bXMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbXlfb3V0cHV0bmFtZT0iJDEiCisgICAgbXlfb3JpZ2luYXRvcj0iJDIiCisgICAgbXlfcGljX3A9IiR7My1ub30iCisgICAgbXlfcHJlZml4PWAkRUNITyAiJG15X29yaWdpbmF0b3IiIHwgc2VkICdzJVteYS16QS1aMC05XSVfJWcnYAorICAgIG15X2Rsc3ltcz0KKworICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkTk0iICYmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJbXlfZGxzeW1zPSIke215X291dHB1dG5hbWV9Uy5jIgorICAgICAgZWxzZQorCWZ1bmNfZXJyb3IgIm5vdCBjb25maWd1cmVkIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSBkbHByZW9wZW5lZCBmaWxlcyIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgLW4gIiRteV9kbHN5bXMiOyB0aGVuCisgICAgICBjYXNlICRteV9kbHN5bXMgaW4KKyAgICAgICIiKSA7OworICAgICAgKi5jKQorCSMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCisJbmxpc3Q9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX0ubm0iCisKKwlmdW5jX3Nob3dfZXZhbCAiJFJNICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgorCisJIyBQYXJzZSB0aGUgbmFtZSBsaXN0IGludG8gYSBzb3VyY2UgZmlsZS4KKwlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisKKwkkb3B0X2RyeV9ydW4gfHwgJEVDSE8gPiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy8qICRteV9kbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgXGAkbXlfb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLworLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiBcIkNcIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA0KSkgfHwgKF9fR05VQ19fID4gNCkpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N0cmljdC1wcm90b3R5cGVzXCIKKyNlbmRpZgorCisvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCisvKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAorIgorCisJaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KKwkgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkb3V0cHV0JyIKKworCSAgJG9wdF9kcnlfcnVuIHx8IGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgorCisJICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgc3ltYm9sIGxpc3QuCisJICBwcm9nZmlsZXM9YCRFQ0hPICIkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQnIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgZG9uZQorCisJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIH0KKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKKwkgIGlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgZXZhbCAiJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgIic8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyInCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIH0KKwkgIGVsc2UKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICIke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKKwkgICAgICBldmFsICckR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICAgIGV2YWwgJ2NhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIH0KKwkgIGZpCisJZmkKKworCWZvciBkbHByZWZpbGUgaW4gJGRscHJlZmlsZXM7IGRvCisJICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGRscHJlZmlsZSciCisJICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlIgorCSAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICAgIyBpZiBhbiBpbXBvcnQgbGlicmFyeSwgd2UgbmVlZCB0byBvYnRhaW4gZGxuYW1lCisJICAgICAgaWYgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgIiRkbHByZWZpbGUiOyB0aGVuCisJICAgICAgICBmdW5jX3RyX3NoICIkZGxwcmVmaWxlIgorCSAgICAgICAgZXZhbCAiY3Vycl9sYWZpbGU9XCRsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdCIKKwkgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSIiCisJICAgICAgICBpZiB0ZXN0IC1uICIkY3Vycl9sYWZpbGUiICYmIGZ1bmNfbGFsaWJfcCAiJGN1cnJfbGFmaWxlIjsgdGhlbgorCSAgICAgICAgICAjIFVzZSBzdWJzaGVsbCwgdG8gYXZvaWQgY2xvYmJlcmluZyBjdXJyZW50IHZhcmlhYmxlIHZhbHVlcworCSAgICAgICAgICBkbHByZWZpbGVfZGxuYW1lPWBzb3VyY2UgIiRjdXJyX2xhZmlsZSIgJiYgZWNobyAiJGRsbmFtZSJgCisJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxuYW1lIiA7IHRoZW4KKwkgICAgICAgICAgICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlX2RsbmFtZSIKKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgIyBubyBsYWZpbGUuIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgLWRscHJlb3BlbiA8aW1wb3J0IGxpYnJhcnk+LgorCSAgICAgICAgICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCAiJGRscHJlZmlsZSIKKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0kc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKwkgICAgICAgICAgZmkKKwkgICAgICAgIGZpCisJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsYmFzZW5hbWUiIDsgdGhlbgorCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRkbHByZWZpbGVfZGxiYXNlbmFtZSIgPj4gIiRubGlzdCInCisJICAgICAgICAgIGVsc2UKKwkgICAgICAgICAgICBmdW5jX3dhcm5pbmcgIkNvdWxkIG5vdCBjb21wdXRlIERMTCBuYW1lIGZyb20gJG5hbWUiCisJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgICAgICAgZmkKKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfAorCSAgICAgICAgICAgICRTRUQgLWUgJy9JIF9faW1wL2QnIC1lICdzL0kgX19ubV8vRCAvO3MvX25tX18vLycgPj4gJyRubGlzdCciCisJICAgICAgICB9CisJICAgICAgZWxzZSAjIG5vdCBhbiBpbXBvcnQgbGliCisJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgICAgICAgIH0KKwkgICAgICBmaQorCSAgICA7OworCSAgICAqKQorCSAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgICAgIH0KKwkgICAgOzsKKyAgICAgICAgICBlc2FjCisJZG9uZQorCisJJG9wdF9kcnlfcnVuIHx8IHsKKwkgICMgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgZmlsZS4KKwkgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUCisJICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKKwkgIGZpCisKKwkgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisJICBpZiAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiIHwKKwkgICAgICBpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJc29ydCAtayAzCisJICAgICAgZWxzZQorCQlzb3J0ICsyCisJICAgICAgZmkgfAorCSAgICAgIHVuaXEgPiAiJG5saXN0IlM7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiID4gIiRubGlzdCJTCisJICBmaQorCisJICBpZiB0ZXN0IC1mICIkbmxpc3QiUzsgdGhlbgorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIicKKwkgIGVsc2UKKwkgICAgZWNobyAnLyogTk9ORSAqLycgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICBmaQorCisJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgKmFkZHJlc3M7Cit9IGx0X2Rsc3ltbGlzdDsKK2V4dGVybiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTsKK0xUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3tcCisgIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgorCisJICBjYXNlICRuZWVkX2xpYl9wcmVmaXggaW4KKwkgIG5vKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgICopCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICBlc2FjCisJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWZcCisiCisJfSAjICEkb3B0X2RyeV9ydW4KKworCXBpY19mbGFnX2Zvcl9zeW10YWJsZT0KKwljYXNlICIkY29tcGlsZV9jb21tYW5kICIgaW4KKwkqIiAtc3RhdGljICIqKSA7OworCSopCisJICBjYXNlICRob3N0IGluCisJICAjIGNvbXBpbGluZyB0aGUgc3ltYm9sIHRhYmxlIGZpbGUgd2l0aCBwaWNfZmxhZyB3b3JrcyBhcm91bmQKKwkgICMgYSBGcmVlQlNEIGJ1ZyB0aGF0IGNhdXNlcyBwcm9ncmFtcyB0byBjcmFzaCB3aGVuIC1sbSBpcworCSAgIyBsaW5rZWQgYmVmb3JlIGFueSBvdGhlciBQSUMgb2JqZWN0LiAgQnV0IHdlIG11c3Qgbm90IHVzZQorCSAgIyBwaWNfZmxhZyB3aGVuIGxpbmtpbmcgd2l0aCAtc3RhdGljLiAgVGhlIHByb2JsZW0gZXhpc3RzIGluCisJICAjIEZyZWVCU0QgMi4yLjYgYW5kIGlzIGZpeGVkIGluIEZyZWVCU0QgMy4xLgorCSAgKi0qLWZyZWVic2QyLip8Ki0qLWZyZWVic2QzLjAqfCotKi1mcmVlYnNkZWxmMy4wKikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIC1ERlJFRUJTRF9XT1JLQVJPVU5EIiA7OworCSAgKi0qLWhwdXgqKQorCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiWCRteV9waWNfcCIgIT0gWG5vOyB0aGVuCisJICAgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJc3ltdGFiX2NmbGFncz0KKwlmb3IgYXJnIGluICRMVENGTEFHUzsgZG8KKwkgIGNhc2UgJGFyZyBpbgorCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CisJICAqKSBmdW5jX2FwcGVuZCBzeW10YWJfY2ZsYWdzICIgJGFyZyIgOzsKKwkgIGVzYWMKKwlkb25lCisKKwkjIE5vdyBjb21waWxlIHRoZSBkeW5hbWljIHN5bWJvbCBmaWxlLgorCWZ1bmNfc2hvd19ldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0Mkc3ltdGFiX2NmbGFncyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkbXlfZGxzeW1zIiknICdleGl0ICQ/JworCisJIyBDbGVhbiB1cCB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCWZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiJworCisJIyBUcmFuc2Zvcm0gdGhlIHN5bWJvbCBmaWxlIGludG8gdGhlIGNvcnJlY3QgbmFtZS4KKwlzeW1maWxlb2JqPSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Uy4kb2JqZXh0IgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiI7IHRoZW4KKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorCSAgZWxzZQorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgZmkKKwkgIDs7CisJKikKKwkgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJZnVuY19mYXRhbF9lcnJvciAidW5rbm93biBzdWZmaXggZm9yIFxgJG15X2Rsc3ltcyciCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICAjIFdlIGtlZXAgZ29pbmcganVzdCBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCByZWZlciB0bworICAgICAgIyBsdF9wcmVsb2FkZWRfc3ltYm9scy4gIFRoZSBsaW5rZXIgd2lsbCBmYWlsIGlmIGdsb2JhbF9zeW1ib2xfcGlwZQorICAgICAgIyByZWFsbHkgd2FzIHJlcXVpcmVkLgorCisgICAgICAjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgorICAgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCisgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyUgQFNZTUZJTEVAJSUiYAorICAgIGZpCit9CisKKyMgZnVuY193aW4zMl9saWJpZCBhcmcKKyMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJworIworIyBOZWVkIGEgbG90IG9mIGdvbyB0byBoYW5kbGUgKmJvdGgqIERMTHMgYW5kIGltcG9ydCBsaWJzCisjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCisjIERlc3BpdGUgdGhlIG5hbWUsIGFsc28gZGVhbCB3aXRoIDY0IGJpdCBiaW5hcmllcy4KK2Z1bmNfd2luMzJfbGliaWQgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICB3aW4zMl9saWJpZF90eXBlPSJ1bmtub3duIgorICB3aW4zMl9maWxlcmVzPWBmaWxlIC1MICQxIDI+L2Rldi9udWxsYAorICBjYXNlICR3aW4zMl9maWxlcmVzIGluCisgICphclwgYXJjaGl2ZVwgaW1wb3J0XCBsaWJyYXJ5KikgIyBkZWZpbml0ZWx5IGltcG9ydAorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCIKKyAgICA7OworICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCisgICAgIyBLZWVwIHRoZSBlZ3JlcCBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QuCisgICAgaWYgZXZhbCAkT0JKRFVNUCAtZiAkMSB8ICRTRUQgLWUgJzEwcScgMj4vZGV2L251bGwgfAorICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICB3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgfAorCSRTRUQgLW4gLWUgJworCSAgICAxLDEwMHsKKwkJLyBJIC97CisJCSAgICBzLC4qLGltcG9ydCwKKwkJICAgIHAKKwkJICAgIHEKKwkJfQorCSAgICB9J2AKKyAgICAgIGNhc2UgJHdpbjMyX25tcmVzIGluCisgICAgICBpbXBvcnQqKSAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0Ijs7CisgICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICAqRExMKikKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgIDs7CisgICpleGVjdXRhYmxlKikgIyBidXQgc2hlbGwgc2NyaXB0cyBhcmUgImV4ZWN1dGFibGUiIHRvby4uLgorICAgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCisgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAkRUNITyAiJHdpbjMyX2xpYmlkX3R5cGUiCit9CisKKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliIEFSRworIworIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiAoKQoreworICAkb3B0X2RlYnVnCisgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWAkRExMVE9PTCAtLWlkZW50aWZ5LXN0cmljdCAtLWlkZW50aWZ5ICIkMSJgCit9CisKKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgU0VDVElPTl9OQU1FIExJQk5BTUVzCisjCisjIFRoZSBpcyB0aGUgY29yZSBvZiBhIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIGEKKyMgcGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUKKyMgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5IExJQk5BTUUuCisjCisjIFNFQ1RJT05fTkFNRSBpcyBlaXRoZXIgLmlkYXRhJDYgb3IgLmlkYXRhJDcsIGRlcGVuZGluZworIyBvbiB0aGUgcGxhdGZvcm0gYW5kIGNvbXBpbGVyIHRoYXQgY3JlYXRlZCB0aGUgaW1wbGliLgorIworIyBFY2hvcyB0aGUgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyMgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5LgorZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBtYXRjaF9saXRlcmFsPWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorICAkT0JKRFVNUCAtcyAtLXNlY3Rpb24gIiQxIiAiJDIiIDI+L2Rldi9udWxsIHwKKyAgICAkU0VEICcvXkNvbnRlbnRzIG9mIHNlY3Rpb24gJyIkbWF0Y2hfbGl0ZXJhbCInOi97CisgICAgICAjIFBsYWNlIG1hcmtlciBhdCBiZWdpbm5pbmcgb2YgYXJjaGl2ZSBtZW1iZXIgZGxsbmFtZSBzZWN0aW9uCisgICAgICBzLy4qLz09PT1NQVJLPT09PS8KKyAgICAgIHAKKyAgICAgIGQKKyAgICB9CisgICAgIyBUaGVzZSBsaW5lcyBjYW4gc29tZXRpbWVzIGJlIGxvbmdlciB0aGFuIDQzIGNoYXJhY3RlcnMsIGJ1dAorICAgICMgYXJlIGFsd2F5cyB1bmludGVyZXN0aW5nCisgICAgLzpbCSBdKmZpbGUgZm9ybWF0IHBlW2ldXHssMVx9LS9kCisgICAgL15JbiBhcmNoaXZlIFteOl0qOi9kCisgICAgIyBFbnN1cmUgbWFya2VyIGlzIHByaW50ZWQKKyAgICAvXj09PT1NQVJLPT09PS9wCisgICAgIyBSZW1vdmUgYWxsIGxpbmVzIHdpdGggbGVzcyB0aGFuIDQzIGNoYXJhY3RlcnMKKyAgICAvXi5cezQzXH0vIWQKKyAgICAjIEZyb20gcmVtYWluaW5nIGxpbmVzLCByZW1vdmUgZmlyc3QgNDMgY2hhcmFjdGVycworICAgIHMvXi5cezQzXH0vLycgfAorICAgICRTRUQgLW4gJworICAgICAgIyBKb2luIG1hcmtlciBhbmQgYWxsIGxpbmVzIHVudGlsIG5leHQgbWFya2VyIGludG8gYSBzaW5nbGUgbGluZQorICAgICAgL149PT09TUFSSz09PT0vIGIgcGFyYQorICAgICAgSAorICAgICAgJCBiIHBhcmEKKyAgICAgIGIKKyAgICAgIDpwYXJhCisgICAgICB4CisgICAgICBzL1xuLy9nCisgICAgICAjIFJlbW92ZSB0aGUgbWFya2VyCisgICAgICBzL149PT09TUFSSz09PT0vLworICAgICAgIyBSZW1vdmUgdHJhaWxpbmcgZG90cyBhbmQgd2hpdGVzcGFjZQorICAgICAgcy9bXC4gXHRdKiQvLworICAgICAgIyBQcmludAorICAgICAgLy4vcCcgfAorICAgICMgd2Ugbm93IGhhdmUgYSBsaXN0LCBvbmUgZW50cnkgcGVyIGxpbmUsIG9mIHRoZSBzdHJpbmdpZmllZAorICAgICMgY29udGVudHMgb2YgdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gb2YgYWxsIG1lbWJlcnMgb2YgdGhlCisgICAgIyBhcmNoaXZlIHdoaWNoIHBvc3Nlc3MgdGhhdCBzZWN0aW9uLiBIZXVyaXN0aWM6IGVsaW1pbmF0ZQorICAgICMgYWxsIHRob3NlIHdoaWNoIGhhdmUgYSBmaXJzdCBvciBzZWNvbmQgY2hhcmFjdGVyIHRoYXQgaXMKKyAgICAjIGEgJy4nICh0aGF0IGlzLCBvYmpkdW1wJ3MgcmVwcmVzZW50YXRpb24gb2YgYW4gdW5wcmludGFibGUKKyAgICAjIGNoYXJhY3Rlci4pIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBhcmNoaXZlcyB3aXRoIGxlc3MgdGhhbgorICAgICMgMHgzMDJmIGV4cG9ydHMgLS0gYnV0IHdpbGwgZmFpbCBmb3IgRExMcyB3aG9zZSBuYW1lIGFjdHVhbGx5CisgICAgIyBiZWdpbnMgd2l0aCBhIGxpdGVyYWwgJy4nIG9yIGEgc2luZ2xlIGNoYXJhY3RlciBmb2xsb3dlZCBieQorICAgICMgYSAnLicuCisgICAgIworICAgICMgT2YgdGhvc2UgdGhhdCByZW1haW4sIHByaW50IHRoZSBmaXJzdCBvbmUuCisgICAgJFNFRCAtZSAnL15cLi9kOy9eLlwuL2Q7cScKK30KKworIyBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wIEFSRworIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisjIEFSRyBpcyBhIEdOVS9iaW51dGlscy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkRUdSRVAgJyAoX2hlYWRfW0EtWmEtejAtOV9dK19bYWRdbCp8W0EtWmEtejAtOV9dK19bYWRdbCpfaW5hbWUpJCdgCisgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXAiCit9CisKKyMgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wIEFSRworIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisjIEFSRyBpcyBhbiBNUy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEdSRVAgJ19OVUxMX0lNUE9SVF9ERVNDUklQVE9SJ2AKKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wIgorfQorCisjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayBBUkcKKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisjIGltcG9ydCBsaWJyYXJ5IEFSRy4KKyMKKyMgVGhpcyBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBpcyBmb3IgdXNlIHdoZW4gJERMTFRPT0wKKyMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgLS1pZGVudGlmeS1zdHJpY3Qgb3B0aW9uLgorIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgIiQxIiA7IHRoZW4KKyAgICAjIGJpbnV0aWxzIGltcG9ydCBsaWJyYXJ5CisgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNycgIiQxImAKKyAgZWxpZiBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgIiQxIiA7IHRoZW4KKyAgICAjIG1zLWdlbmVyYXRlZCBpbXBvcnQgbGlicmFyeQorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDYnICIkMSJgCisgIGVsc2UKKyAgICAjIHVua25vd24KKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD0iIgorICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgorZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgZl9leF9hbl9hcl9kaXI9IiQxIjsgc2hpZnQKKyAgICBmX2V4X2FuX2FyX29sZGxpYj0iJDEiCisgICAgaWYgdGVzdCAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgPSB5ZXM7IHRoZW4KKyAgICAgIGxvY2tmaWxlPSRmX2V4X2FuX2FyX29sZGxpYi5sb2NrCisgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCisJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKwlzbGVlcCAyCisgICAgICBkb25lCisgICAgZmkKKyAgICBmdW5jX3Nob3dfZXZhbCAiKGNkIFwkZl9leF9hbl9hcl9kaXIgJiYgJEFSIHggXCJcJGZfZXhfYW5fYXJfb2xkbGliXCIpIiBcCisJCSAgICdzdGF0PSQ/OyBybSAtZiAiJGxvY2tmaWxlIjsgZXhpdCAkc3RhdCcKKyAgICBpZiB0ZXN0ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiA9IHllczsgdGhlbgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHJtIC1mICIkbG9ja2ZpbGUiCisgICAgZmkKKyAgICBpZiAoJEFSIHQgIiRmX2V4X2FuX2FyX29sZGxpYiIgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICA6CisgICAgZWxzZQorICAgICAgZnVuY19mYXRhbF9lcnJvciAib2JqZWN0IG5hbWUgY29uZmxpY3RzIGluIGFyY2hpdmU6ICRmX2V4X2FuX2FyX2Rpci8kZl9leF9hbl9hcl9vbGRsaWIiCisgICAgZmkKK30KKworCisjIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyBnZW50b3Agb2xkbGliIC4uLgorZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X2dlbnRvcD0iJDEiOyBzaGlmdAorICAgIG15X29sZGxpYnM9JHsxKyIkQCJ9CisgICAgbXlfb2xkb2Jqcz0iIgorICAgIG15X3hsaWI9IiIKKyAgICBteV94YWJzPSIiCisgICAgbXlfeGRpcj0iIgorCisgICAgZm9yIG15X3hsaWIgaW4gJG15X29sZGxpYnM7IGRvCisgICAgICAjIEV4dHJhY3QgdGhlIG9iamVjdHMuCisgICAgICBjYXNlICRteV94bGliIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBteV94YWJzPSIkbXlfeGxpYiIgOzsKKwkqKSBteV94YWJzPWBwd2RgIi8kbXlfeGxpYiIgOzsKKyAgICAgIGVzYWMKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRteV94bGliIgorICAgICAgbXlfeGxpYj0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgbXlfeGxpYl91PSRteV94bGliCisgICAgICB3aGlsZSA6OyBkbworICAgICAgICBjYXNlICIgJGV4dHJhY3RlZF9hcmNoaXZlcyAiIGluCisJKiIgJG15X3hsaWJfdSAiKikKKwkgIGZ1bmNfYXJpdGggJGV4dHJhY3RlZF9zZXJpYWwgKyAxCisJICBleHRyYWN0ZWRfc2VyaWFsPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgbXlfeGxpYl91PWx0JGV4dHJhY3RlZF9zZXJpYWwtJG15X3hsaWIgOzsKKwkqKSBicmVhayA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGV4dHJhY3RlZF9hcmNoaXZlcz0iJGV4dHJhY3RlZF9hcmNoaXZlcyAkbXlfeGxpYl91IgorICAgICAgbXlfeGRpcj0iJG15X2dlbnRvcC8kbXlfeGxpYl91IgorCisgICAgICBmdW5jX21rZGlyX3AgIiRteV94ZGlyIgorCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLWRhcndpbiopCisJZnVuY192ZXJib3NlICJFeHRyYWN0aW5nICRteV94YWJzIgorCSMgRG8gbm90IGJvdGhlciBkb2luZyBhbnl0aGluZyBpZiBqdXN0IGEgZHJ5IHJ1bgorCSRvcHRfZHJ5X3J1biB8fCB7CisJICBkYXJ3aW5fb3JpZ19kaXI9YHB3ZGAKKwkgIGNkICRteV94ZGlyIHx8IGV4aXQgJD8KKwkgIGRhcndpbl9hcmNoaXZlPSRteV94YWJzCisJICBkYXJ3aW5fY3VyZGlyPWBwd2RgCisJICBkYXJ3aW5fYmFzZV9hcmNoaXZlPWBiYXNlbmFtZSAiJGRhcndpbl9hcmNoaXZlImAKKwkgIGRhcndpbl9hcmNoZXM9YCRMSVBPIC1pbmZvICIkZGFyd2luX2FyY2hpdmUiIDI+L2Rldi9udWxsIHwgJEdSRVAgQXJjaGl0ZWN0dXJlcyAyPi9kZXYvbnVsbCB8fCB0cnVlYAorCSAgaWYgdGVzdCAtbiAiJGRhcndpbl9hcmNoZXMiOyB0aGVuCisJICAgIGRhcndpbl9hcmNoZXM9YCRFQ0hPICIkZGFyd2luX2FyY2hlcyIgfCAkU0VEIC1lICdzLy4qYXJlOi8vJ2AKKwkgICAgZGFyd2luX2FyY2g9CisJICAgIGZ1bmNfdmVyYm9zZSAiJGRhcndpbl9iYXNlX2FyY2hpdmUgaGFzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgJGRhcndpbl9hcmNoZXMiCisJICAgIGZvciBkYXJ3aW5fYXJjaCBpbiAgJGRhcndpbl9hcmNoZXMgOyBkbworCSAgICAgIGZ1bmNfbWtkaXJfcCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICAkTElQTyAtdGhpbiAkZGFyd2luX2FyY2ggLW91dHB1dCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IiAiJHtkYXJ3aW5fYXJjaGl2ZX0iCisJICAgICAgY2QgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCisJICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgImBwd2RgIiAiJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgICBjZCAiJGRhcndpbl9jdXJkaXIiCisJICAgICAgJFJNICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgIGRvbmUgIyAkZGFyd2luX2FyY2hlcworICAgICAgICAgICAgIyMgT2theSBub3cgd2UndmUgYSBidW5jaCBvZiB0aGluIG9iamVjdHMsIGdvdHRhIGZhdHRlbiB0aGVtIHVwIDopCisJICAgIGRhcndpbl9maWxlbGlzdD1gZmluZCB1bmZhdC0kJCAtdHlwZSBmIC1uYW1lIFwqLm8gLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICRTRUQgLWUgIiRiYXNlbmFtZSIgfCBzb3J0IC11YAorCSAgICBkYXJ3aW5fZmlsZT0KKwkgICAgZGFyd2luX2ZpbGVzPQorCSAgICBmb3IgZGFyd2luX2ZpbGUgaW4gJGRhcndpbl9maWxlbGlzdDsgZG8KKwkgICAgICBkYXJ3aW5fZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5hbWUgJGRhcndpbl9maWxlIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCisJICAgICAgJExJUE8gLWNyZWF0ZSAtb3V0cHV0ICIkZGFyd2luX2ZpbGUiICRkYXJ3aW5fZmlsZXMKKwkgICAgZG9uZSAjICRkYXJ3aW5fZmlsZWxpc3QKKwkgICAgJFJNIC1yZiB1bmZhdC0kJAorCSAgICBjZCAiJGRhcndpbl9vcmlnX2RpciIKKwkgIGVsc2UKKwkgICAgY2QgJGRhcndpbl9vcmlnX2RpcgorCSAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKwkgIGZpICMgJGRhcndpbl9hcmNoZXMKKwl9ICMgISRvcHRfZHJ5X3J1bgorCTs7CisgICAgICAqKQorICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKwk7OworICAgICAgZXNhYworICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCisgICAgZG9uZQorCisgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0iJG15X29sZG9ianMiCit9CisKKworIyBmdW5jX2VtaXRfd3JhcHBlciBbYXJnPW5vXQorIworIyBFbWl0IGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvbiBzdGRvdXQuCisjIERvbid0IGRpcmVjdGx5IG9wZW4gYSBmaWxlIGJlY2F1c2Ugd2UgbWF5IHdhbnQgdG8KKyMgaW5jb3Jwb3JhdGUgdGhlIHNjcmlwdCBjb250ZW50cyB3aXRoaW4gYSBjeWd3aW4vbWluZ3cKKyMgd3JhcHBlciBleGVjdXRhYmxlLiAgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbgorIyBmdW5jX21vZGVfbGluayBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGVzCisjIHNldCB0aGVyZWluLgorIworIyBBUkcgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSCisjIHZhcmlhYmxlIHdpbGwgdGFrZS4gIElmICd5ZXMnLCB0aGVuIHRoZSBlbWl0dGVkIHNjcmlwdAorIyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgaXMgc3RvcmVkIGlzCisjIHRoZSAkb2JqZGlyIGRpcmVjdG9yeS4gIFRoaXMgaXMgYSBjeWd3aW4vbWluZ3ctc3BlY2lmaWMKKyMgYmVoYXZpb3IuCitmdW5jX2VtaXRfd3JhcHBlciAoKQoreworCWZ1bmNfZW1pdF93cmFwcGVyX2FyZzE9JHsxLW5vfQorCisJJEVDSE8gIlwKKyMhICRTSEVMTAorCisjICRvdXRwdXQgLSB0ZW1wb3Jhcnkgd3JhcHBlciBzY3JpcHQgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyMgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgorIworIyBUaGlzIHdyYXBwZXIgc2NyaXB0IHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyMgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCitmaQorQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIgorCisjIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgZGV0ZXJtaW5lcyBvdXIgb3BlcmF0aW9uIG1vZGUuCitpZiB0ZXN0IFwiXCRsaWJ0b29sX2luc3RhbGxfbWFnaWNcIiA9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgIyBpbnN0YWxsIG1vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisgIGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb249JyRtYWNyb192ZXJzaW9uJworICBub3RpbnN0X2RlcGxpYnM9JyRub3RpbnN0X2RlcGxpYnMnCitlbHNlCisgICMgV2hlbiB3ZSBhcmUgc291cmNlZCBpbiBleGVjdXRlIG1vZGUsIFwkZmlsZSBhbmQgXCRFQ0hPIGFyZSBhbHJlYWR5IHNldC4KKyAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgIGZpbGU9XCJcJDBcIiIKKworICAgIHFFQ0hPPWAkRUNITyAiJEVDSE8iIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgJEVDSE8gIlwKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJDEKK19MVEVDSE9fRU9GJworfQorICAgIEVDSE89XCIkcUVDSE9cIgorICBmaQorCisjIFZlcnkgYmFzaWMgb3B0aW9uIHBhcnNpbmcuIFRoZXNlIG9wdGlvbnMgYXJlIChhKSBzcGVjaWZpYyB0bworIyB0aGUgbGlidG9vbCB3cmFwcGVyLCAoYikgYXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZSB3cmFwcGVyCisjIC9zY3JpcHQvIGFuZCB0aGUgd3JhcHBlciAvZXhlY3V0YWJsZS8gd2hpY2ggaXMgdXNlZCBvbmx5IG9uCisjIHdpbmRvd3MgcGxhdGZvcm1zLCBhbmQgKGMpIGFsbCBiZWdpbiB3aXRoIHRoZSBzdHJpbmcgIi0tbHQtIgorIyAoYXBwbGljYXRpb24gcHJvZ3JhbXMgYXJlIHVubGlrZWx5IHRvIGhhdmUgb3B0aW9ucyB3aGljaCBtYXRjaAorIyB0aGlzIHBhdHRlcm4pLgorIworIyBUaGVyZSBhcmUgb25seSB0d28gc3VwcG9ydGVkIG9wdGlvbnM6IC0tbHQtZGVidWcgYW5kCisjIC0tbHQtZHVtcC1zY3JpcHQuIFRoZXJlIGlzLCBkZWxpYmVyYXRlbHksIG5vIC0tbHQtaGVscC4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoaXMgcGFyc2luZyBmdW5jdGlvbiBzaG91bGQgYmUgdGhlCisjIHNjcmlwdCdzICQwIHZhbHVlLCBmb2xsb3dlZCBieSAiJEAiLgorbHRfb3B0aW9uX2RlYnVnPQorZnVuY19wYXJzZV9sdF9vcHRpb25zICgpCit7CisgIGx0X3NjcmlwdF9hcmcwPVwkMAorICBzaGlmdAorICBmb3IgbHRfb3B0CisgIGRvCisgICAgY2FzZSBcIlwkbHRfb3B0XCIgaW4KKyAgICAtLWx0LWRlYnVnKSBsdF9vcHRpb25fZGVidWc9MSA7OworICAgIC0tbHQtZHVtcC1zY3JpcHQpCisgICAgICAgIGx0X2R1bXBfRD1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJS9bXi9dKiQlJSdcYAorICAgICAgICB0ZXN0IFwiWFwkbHRfZHVtcF9EXCIgPSBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgJiYgbHRfZHVtcF9EPS4KKyAgICAgICAgbHRfZHVtcF9GPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlXi4qLyUlJ1xgCisgICAgICAgIGNhdCBcIlwkbHRfZHVtcF9EL1wkbHRfZHVtcF9GXCIKKyAgICAgICAgZXhpdCAwCisgICAgICA7OworICAgIC0tbHQtKikKKyAgICAgICAgXCRFQ0hPIFwiVW5yZWNvZ25pemVkIC0tbHQtIG9wdGlvbjogJ1wkbHRfb3B0J1wiIDE+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICMgUHJpbnQgdGhlIGRlYnVnIGJhbm5lciBpbW1lZGlhdGVseToKKyAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICBlY2hvIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlwiIDE+JjIKKyAgZmkKK30KKworIyBVc2VkIHdoZW4gLS1sdC1kZWJ1Zy4gUHJpbnRzIGl0cyBhcmd1bWVudHMgdG8gc3Rkb3V0CisjIChyZWRpcmVjdGlvbiBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlcikKK2Z1bmNfbHRfZHVtcF9hcmdzICgpCit7CisgIGx0X2R1bXBfYXJnc19OPTE7CisgIGZvciBsdF9hcmcKKyAgZG8KKyAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2W1wkbHRfZHVtcF9hcmdzX05dOiBcJGx0X2FyZ1wiCisgICAgbHRfZHVtcF9hcmdzX049XGBleHByIFwkbHRfZHVtcF9hcmdzX04gKyAxXGAKKyAgZG9uZQorfQorCisjIENvcmUgZnVuY3Rpb24gZm9yIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCitmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlICgpCit7CisiCisgIGNhc2UgJGhvc3QgaW4KKyAgIyBCYWNrc2xhc2hlcyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBvbiBwbGFpbiB3aW5kb3dzCisgICotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCisgICAgJEVDSE8gIlwKKyAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiAxPiYyCisgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorICAgICAgZmkKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgorICAgIDs7CisKKyAgKikKKyAgICAkRUNITyAiXAorICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDE+JjIKKyAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCisgICAgICBmaQorICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisgICAgOzsKKyAgZXNhYworICAkRUNITyAiXAorICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgorICAgICAgZXhpdCAxCit9CisKKyMgQSBmdW5jdGlvbiB0byBlbmNhcHN1bGF0ZSBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorIyBTdHJpcHMgb3B0aW9ucyBpbiB0aGUgLS1sdC0qIG5hbWVzcGFjZSBmcm9tIFwkQCBhbmQKKyMgbGF1bmNoZXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHdpdGggdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuCitmdW5jX2V4ZWNfcHJvZ3JhbSAoKQoreworICBjYXNlIFwiIFwkKiBcIiBpbgorICAqXFwgLS1sdC0qKQorICAgIGZvciBsdF93cl9hcmcKKyAgICBkbworICAgICAgY2FzZSBcJGx0X3dyX2FyZyBpbgorICAgICAgLS1sdC0qKSA7OworICAgICAgKikgc2V0IHggXCJcJEBcIiBcIlwkbHRfd3JfYXJnXCI7IHNoaWZ0OzsKKyAgICAgIGVzYWMKKyAgICAgIHNoaWZ0CisgICAgZG9uZSA7OworICBlc2FjCisgIGZ1bmNfZXhlY19wcm9ncmFtX2NvcmUgXCR7MStcIlwkQFwifQorfQorCisgICMgUGFyc2Ugb3B0aW9ucworICBmdW5jX3BhcnNlX2x0X29wdGlvbnMgXCJcJDBcIiBcJHsxK1wiXCRAXCJ9CisKKyAgIyBGaW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNjcmlwdCBsaXZlcyBpbi4KKyAgdGhpc2Rpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSokJSUnXGAKKyAgdGVzdCBcInhcJHRoaXNkaXJcIiA9IFwieFwkZmlsZVwiICYmIHRoaXNkaXI9LgorCisgICMgRm9sbG93IHN5bWJvbGljIGxpbmtzIHVudGlsIHdlIGdldCB0byB0aGUgcmVhbCB0aGlzZGlyLgorICBmaWxlPVxgbHMgLWxkIFwiXCRmaWxlXCIgfCAkU0VEIC1uICdzLy4qLT4gLy9wJ1xgCisgIHdoaWxlIHRlc3QgLW4gXCJcJGZpbGVcIjsgZG8KKyAgICBkZXN0ZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKlwkJSUnXGAKKworICAgICMgSWYgdGhlcmUgd2FzIGEgZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBjaGFuZ2UgdGhpc2Rpci4KKyAgICBpZiB0ZXN0IFwieFwkZGVzdGRpclwiICE9IFwieFwkZmlsZVwiOyB0aGVuCisgICAgICBjYXNlIFwiXCRkZXN0ZGlyXCIgaW4KKyAgICAgIFtcXFxcL10qIHwgW0EtWmEtel06W1xcXFwvXSopIHRoaXNkaXI9XCJcJGRlc3RkaXJcIiA7OworICAgICAgKikgdGhpc2Rpcj1cIlwkdGhpc2Rpci9cJGRlc3RkaXJcIiA7OworICAgICAgZXNhYworICAgIGZpCisKKyAgICBmaWxlPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJV4uKi8lJSdcYAorICAgIGZpbGU9XGBscyAtbGQgXCJcJHRoaXNkaXIvXCRmaWxlXCIgfCAkU0VEIC1uICdzLy4qLT4gLy9wJ1xgCisgIGRvbmUKKworICAjIFVzdWFsbHkgJ25vJywgZXhjZXB0IG9uIGN5Z3dpbi9taW5ndyB3aGVuIGVtYmVkZGVkIGludG8KKyAgIyB0aGUgY3dyYXBwZXIuCisgIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSPSRmdW5jX2VtaXRfd3JhcHBlcl9hcmcxCisgIGlmIHRlc3QgXCJcJFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSXCIgPSBcInllc1wiOyB0aGVuCisgICAgIyBzcGVjaWFsIGNhc2UgZm9yICcuJworICAgIGlmIHRlc3QgXCJcJHRoaXNkaXJcIiA9IFwiLlwiOyB0aGVuCisgICAgICB0aGlzZGlyPVxgcHdkXGAKKyAgICBmaQorICAgICMgcmVtb3ZlIC5saWJzIGZyb20gdGhpc2RpcgorICAgIGNhc2UgXCJcJHRoaXNkaXJcIiBpbgorICAgICpbXFxcXC9dJG9iamRpciApIHRoaXNkaXI9XGBcJEVDSE8gXCJcJHRoaXNkaXJcIiB8ICRTRUQgJ3MlW1xcXFwvXVteXFxcXC9dKiQlJSdcYCA7OworICAgICRvYmpkaXIgKSAgIHRoaXNkaXI9LiA7OworICAgIGVzYWMKKyAgZmkKKworICAjIFRyeSB0byBnZXQgdGhlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lLgorICBhYnNkaXI9XGBjZCBcIlwkdGhpc2RpclwiICYmIHB3ZFxgCisgIHRlc3QgLW4gXCJcJGFic2RpclwiICYmIHRoaXNkaXI9XCJcJGFic2RpclwiCisiCisKKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT1sdC0nJG91dHB1dG5hbWUnJGV4ZWV4dAorICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorCisgIGlmIHRlc3QgISAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiB8fAorICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJHtTRUR9IDFxXGA7IFxcCisgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KKworICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCisKKyAgICBpZiB0ZXN0ICEgLWQgXCJcJHByb2dkaXJcIjsgdGhlbgorICAgICAgJE1LRElSIFwiXCRwcm9nZGlyXCIKKyAgICBlbHNlCisgICAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgICBmaSIKKworCSAgJEVDSE8gIlwKKworICAgICMgcmVsaW5rIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5CisgICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgorICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcJHJlbGlua19jb21tYW5kIDI+JjFcYDsgdGhlbiA6CisgICAgICBlbHNlCisJJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgorCSRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorCWV4aXQgMQorICAgICAgZmkKKyAgICBmaQorCisgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHx8CisgICAgeyAkUk0gXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7CisgICAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH0KKyAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgZmkiCisJZWxzZQorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT0nJG91dHB1dG5hbWUnCisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisiCisJZmkKKworCSRFQ0hPICJcCisKKyAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKKworCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCisJIworCSMgRml4IHRoZSBETEwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLiAgRG8gdGhpcyBiZWZvcmUgcHJlcGVuZGluZworCSMgdG8gc2hsaWJwYXRoLCBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggYXJlIFBBVEggYW5kIHVuaW5zdGFsbGVkCisJIyBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LgorCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorCSAgJEVDSE8gIlwKKyAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAorICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICisiCisJZmkKKworCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgorCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgb3VyIG93biBsaWJyYXJ5IHBhdGggdG8gJHNobGlicGF0aF92YXIKKyAgICAkc2hsaWJwYXRoX3Zhcj1cIiR0ZW1wX3JwYXRoXCQkc2hsaWJwYXRoX3ZhclwiCisKKyAgICAjIFNvbWUgc3lzdGVtcyBjYW5ub3QgY29wZSB3aXRoIGNvbG9uLXRlcm1pbmF0ZWQgJHNobGlicGF0aF92YXIKKyAgICAjIFRoZSBzZWNvbmQgY29sb24gaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBCZU9TIFI0IHNlZAorICAgICRzaGxpYnBhdGhfdmFyPVxgXCRFQ0hPIFwiXCQkc2hsaWJwYXRoX3ZhclwiIHwgJFNFRCAncy86OipcJC8vJ1xgCisKKyAgICBleHBvcnQgJHNobGlicGF0aF92YXIKKyIKKwlmaQorCisJJEVDSE8gIlwKKyAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgICAjIFJ1biB0aGUgYWN0dWFsIHByb2dyYW0gd2l0aCBvdXIgYXJndW1lbnRzLgorICAgICAgZnVuY19leGVjX3Byb2dyYW0gXCR7MStcIlwkQFwifQorICAgIGZpCisgIGVsc2UKKyAgICAjIFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCisgICAgXCRFQ0hPIFwiXCQwOiBlcnJvcjogXFxcYFwkcHJvZ2Rpci9cJHByb2dyYW0nIGRvZXMgbm90IGV4aXN0XCIgMT4mMgorICAgIFwkRUNITyBcIlRoaXMgc2NyaXB0IGlzIGp1c3QgYSB3cmFwcGVyIGZvciBcJHByb2dyYW0uXCIgMT4mMgorICAgIFwkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCisgICAgZXhpdCAxCisgIGZpCitmaVwKKyIKK30KKworCisjIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKyMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAorIyBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UKKyMgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZSBzZXQgdGhlcmVpbi4KK2Z1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgKCkKK3sKKwljYXQgPDxFT0YKKworLyogJGN3cmFwcGVyc291cmNlIC0gdGVtcG9yYXJ5IHdyYXBwZXIgZXhlY3V0YWJsZSBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorICAgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorCisgICBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyAgIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKworICAgVGhpcyB3cmFwcGVyIGV4ZWN1dGFibGUgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorKi8KK0VPRgorCSAgICBjYXQgPDwiRU9GIgorI2lmZGVmIF9NU0NfVkVSCisjIGRlZmluZSBfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUgMQorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZmRlZiBfTVNDX1ZFUgorIyBpbmNsdWRlIDxkaXJlY3QuaD4KKyMgaW5jbHVkZSA8cHJvY2Vzcy5oPgorIyBpbmNsdWRlIDxpby5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjIGluY2x1ZGUgPHN0ZGludC5oPgorIyBpZmRlZiBfX0NZR1dJTl9fCisjICBpbmNsdWRlIDxpby5oPgorIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworLyogZGVjbGFyYXRpb25zIG9mIG5vbi1BTlNJIGZ1bmN0aW9ucyAqLworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisjIGlmZGVmIF9fU1RSSUNUX0FOU0lfXworaW50IF9wdXRlbnYgKGNvbnN0IGNoYXIgKik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjIGlmZGVmIF9fU1RSSUNUX0FOU0lfXworY2hhciAqcmVhbHBhdGggKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK2ludCBwdXRlbnYgKGNoYXIgKik7CitpbnQgc2V0ZW52IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKyMgZW5kaWYKKy8qICNlbGlmIGRlZmluZWQgKG90aGVyIHBsYXRmb3JtcykgLi4uICovCisjZW5kaWYKKworLyogcG9ydGFiaWxpdHkgZGVmaW5lcywgZXhjbHVkaW5nIHBhdGggaGFuZGxpbmcgbWFjcm9zICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKyMgZGVmaW5lIHN0YXQgICAgX3N0YXQKKyMgZGVmaW5lIGNobW9kICAgX2NobW9kCisjIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKKyMgZGVmaW5lIHB1dGVudiAgX3B1dGVudgorIyBkZWZpbmUgU19JWFVTUiBfU19JRVhFQworIyBpZm5kZWYgX0lOVFBUUl9UX0RFRklORUQKKyMgIGRlZmluZSBfSU5UUFRSX1RfREVGSU5FRAorIyAgZGVmaW5lIGludHB0cl90IGludAorIyBlbmRpZgorI2VsaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKyMgZGVmaW5lIHN0YXQgICAgX3N0YXQKKyMgZGVmaW5lIGNobW9kICAgX2NobW9kCisjIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKKyMgZGVmaW5lIHB1dGVudiAgX3B1dGVudgorI2VsaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorIyBkZWZpbmUgSEFWRV9TRVRFTlYKKyMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKKy8qICNlbGlmIGRlZmluZWQgKG90aGVyIHBsYXRmb3JtcykgLi4uICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoUEFUSF9NQVgpCisjIGRlZmluZSBMVF9QQVRITUFYIFBBVEhfTUFYCisjZWxpZiBkZWZpbmVkKE1BWFBBVEhMRU4pCisjIGRlZmluZSBMVF9QQVRITUFYIE1BWFBBVEhMRU4KKyNlbHNlCisjIGRlZmluZSBMVF9QQVRITUFYIDEwMjQKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhPVEgKKyMgZGVmaW5lIFNfSVhPVEggMAorI2VuZGlmCisjaWZuZGVmIFNfSVhHUlAKKyMgZGVmaW5lIFNfSVhHUlAgMAorI2VuZGlmCisKKy8qIHBhdGggaGFuZGxpbmcgcG9ydGFiaWxpdHkgbWFjcm9zICovCisjaWZuZGVmIERJUl9TRVBBUkFUT1IKKyMgZGVmaW5lIERJUl9TRVBBUkFUT1IgJy8nCisjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX1dJTjMyKSB8fCBkZWZpbmVkIChfX01TRE9TX18pIHx8IGRlZmluZWQgKF9fREpHUFBfXykgfHwgXAorICBkZWZpbmVkIChfX09TMl9fKQorIyBkZWZpbmUgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KKyMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKKyMgaWZuZGVmIERJUl9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIERJUl9TRVBBUkFUT1JfMiAnXFwnCisjIGVuZGlmCisjIGlmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjICBkZWZpbmUgUEFUSF9TRVBBUkFUT1JfMiAnOycKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIERJUl9TRVBBUkFUT1JfMgorIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gRElSX1NFUEFSQVRPUikKKyNlbHNlIC8qIERJUl9TRVBBUkFUT1JfMiAqLworIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgXAorCSgoKGNoKSA9PSBESVJfU0VQQVJBVE9SKSB8fCAoKGNoKSA9PSBESVJfU0VQQVJBVE9SXzIpKQorI2VuZGlmIC8qIERJUl9TRVBBUkFUT1JfMiAqLworCisjaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUikKKyNlbHNlIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUl8yKQorI2VuZGlmIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBGT1BFTl9XQgorIyBkZWZpbmUgRk9QRU5fV0IgInciCisjZW5kaWYKKyNpZm5kZWYgX09fQklOQVJZCisjIGRlZmluZSBfT19CSU5BUlkgMAorI2VuZGlmCisKKyNkZWZpbmUgWE1BTExPQyh0eXBlLCBudW0pICAgICAgKCh0eXBlICopIHhtYWxsb2MgKChudW0pICogc2l6ZW9mKHR5cGUpKSkKKyNkZWZpbmUgWEZSRUUoc3RhbGUpIGRvIHsgXAorICBpZiAoc3RhbGUpIHsgZnJlZSAoKHZvaWQgKikgc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAorfSB3aGlsZSAoMCkKKworI2lmIGRlZmluZWQoTFRfREVCVUdXUkFQUEVSKQorc3RhdGljIGludCBsdF9kZWJ1ZyA9IDE7CisjZWxzZQorc3RhdGljIGludCBsdF9kZWJ1ZyA9IDA7CisjZW5kaWYKKworY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lID0gImxpYnRvb2wtd3JhcHBlciI7IC8qIGluIGNhc2UgeHN0cmR1cCBmYWlscyAqLworCit2b2lkICp4bWFsbG9jIChzaXplX3QgbnVtKTsKK2NoYXIgKnhzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZyk7Citjb25zdCBjaGFyICpiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOworY2hhciAqZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKTsKK2NoYXIgKmNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYyk7CitpbnQgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2ludCBjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2NoYXIgKnN0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpOwordm9pZCBsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworc3RhdGljIGNvbnN0IGNoYXIgKm5vbm51bGwgKGNvbnN0IGNoYXIgKnMpOworc3RhdGljIGNvbnN0IGNoYXIgKm5vbmVtcHR5IChjb25zdCBjaGFyICpzKTsKK3ZvaWQgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitjaGFyICpsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpOwordm9pZCBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitjaGFyICoqcHJlcGFyZV9zcGF3biAoY2hhciAqKmFyZ3YpOwordm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSAqZik7CitFT0YKKworCSAgICBjYXQgPDxFT0YKK3ZvbGF0aWxlIGNvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7Citjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CitFT0YKKworCSAgICBpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkdGVtcF9ycGF0aCIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDwiRU9GIgorY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGRsbHNlYXJjaHBhdGg6IgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiUEFUSCI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIiI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIiOworRU9GCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gImx0LSRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAiJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KK0VPRgorCSAgICBmaQorCisKKwkgICAgY2F0IDw8IkVPRiIKKworI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAgICAgICAgICItLWx0LSIKKworc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7CitzdGF0aWMgY29uc3QgY2hhciAqZHVtcHNjcmlwdF9vcHQgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZHVtcC1zY3JpcHQiOworc3RhdGljIGNvbnN0IGNoYXIgKmRlYnVnX29wdCAgICAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImRlYnVnIjsKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBjaGFyICoqbmV3YXJnejsKKyAgaW50ICBuZXdhcmdjOworICBjaGFyICp0bXBfcGF0aHNwZWM7CisgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9wYXRoOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfbmFtZTsKKyAgY2hhciAqdGFyZ2V0X25hbWU7CisgIGNoYXIgKmx0X2FyZ3ZfemVybzsKKyAgaW50cHRyX3QgcnZhbCA9IDEyNzsKKworICBpbnQgaTsKKworICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKyAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworCisgIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0CisgICAqIGFsc28sIGNvcHkgYWxsIG5vbiBjd3JhcHBlciBvcHRpb25zIHRvIG5ld2FyZ3osIGV4Y2VwdAorICAgKiBhcmd6WzBdLCB3aGljaCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5CisgICAqLworICBuZXdhcmdjPTA7CisgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgeworICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZHVtcHNjcmlwdF9vcHQpID09IDApCisJeworRU9GCisJICAgIGNhc2UgIiRob3N0IiBpbgorCSAgICAgICptaW5ndyogfCAqY3lnd2luKiApCisJCSMgbWFrZSBzdGRvdXQgdXNlICJ1bml4IiBsaW5lIGVuZGluZ3MKKwkJZWNobyAiICAgICAgICAgIHNldG1vZGUoMSxfT19CSU5BUlkpOyIKKwkJOzsKKwkgICAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKKwkgIGx0X2R1bXBfc2NyaXB0IChzdGRvdXQpOworCSAgcmV0dXJuIDA7CisJfQorICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZGVidWdfb3B0KSA9PSAwKQorCXsKKyAgICAgICAgICBsdF9kZWJ1ZyA9IDE7CisgICAgICAgICAgY29udGludWU7CisJfQorICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCisgICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKKyAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKyAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgInVucmVjb2duaXplZCAlcyBvcHRpb246ICclcyciLAorICAgICAgICAgICAgICAgICAgICBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgYXJndltpXSk7CisgICAgICAgIH0KKyAgICAgIC8qIG90aGVyd2lzZSAuLi4gKi8KKyAgICAgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOworICAgIH0KKyAgbmV3YXJnelsrK25ld2FyZ2NdID0gTlVMTDsKKworRU9GCisJICAgIGNhdCA8PEVPRgorICAvKiBUaGUgR05VIGJhbm5lciBtdXN0IGJlIHRoZSBmaXJzdCBub24tZXJyb3IgZGVidWcgbWVzc2FnZSAqLworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAibGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlxuIik7CitFT0YKKwkgICAgY2F0IDw8IkVPRiIKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBhcmd2WzBdOiAlc1xuIiwgYXJndlswXSk7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgcHJvZ3JhbV9uYW1lOiAlc1xuIiwgcHJvZ3JhbV9uYW1lKTsKKworICB0bXBfcGF0aHNwZWMgPSBmaW5kX2V4ZWN1dGFibGUgKGFyZ3ZbMF0pOworICBpZiAodG1wX3BhdGhzcGVjID09IE5VTEwpCisgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAorCQkgIHRtcF9wYXRoc3BlYyk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX3BhdGggPSBjaGFzZV9zeW1saW5rcyAodG1wX3BhdGhzcGVjKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChhZnRlciBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisJCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKworICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfcGF0aCwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIC8qIHdyYXBwZXIgbmFtZSB0cmFuc2Zvcm1zICovCisgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIik7CisgIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIsIDEpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOworICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgdG1wX3BhdGhzcGVjID0gMDsKKworICAvKiB0YXJnZXRfbmFtZSB0cmFuc2Zvcm1zIC0tIHVzZSBhY3R1YWwgdGFyZ2V0IHByb2dyYW0gbmFtZTsgbWlnaHQgaGF2ZSBsdC0gcHJlZml4ICovCisgIHRhcmdldF9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChUQVJHRVRfUFJPR1JBTV9OQU1FKSk7CisgIHN0cmVuZHphcCAodGFyZ2V0X25hbWUsICIuZXhlIik7CisgIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKHRhcmdldF9uYW1lLCAiLmV4ZSIsIDEpOworICBYRlJFRSAodGFyZ2V0X25hbWUpOworICB0YXJnZXRfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgdG1wX3BhdGhzcGVjID0gMDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobWFpbikgbGlidG9vbCB0YXJnZXQgbmFtZTogJXNcbiIsCisJCSAgdGFyZ2V0X25hbWUpOworRU9GCisKKwkgICAgY2F0IDw8RU9GCisgIG5ld2FyZ3pbMF0gPQorICAgIFhNQUxMT0MgKGNoYXIsIChzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSArCisJCSAgICBzdHJsZW4gKCIkb2JqZGlyIikgKyAxICsgc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfbmFtZSkgKyAxKSk7CisgIHN0cmNweSAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIkb2JqZGlyIik7CisgIHN0cmNhdCAobmV3YXJnelswXSwgIi8iKTsKK0VPRgorCisJICAgIGNhdCA8PCJFT0YiCisgIC8qIHN0b3AgaGVyZSwgYW5kIGNvcHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIHR3aWNlICovCisgIHRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKG5ld2FyZ3pbMF0pOworCisgIC8qIGRvIE5PVCB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUsIHNvIHVzZSBhY3R1YWxfY3dyYXBwZXJfbmFtZSAqLworICBzdHJjYXQgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICAvKiBETyB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUgaWYgaXQgZXhpc3RzLCBzbyB1c2UgdGFyZ2V0X25hbWUgKi8KKyAgbHRfYXJndl96ZXJvID0gbHRfZXh0ZW5kX3N0ciAodG1wX3BhdGhzcGVjLCB0YXJnZXRfbmFtZSwgMSk7CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworICB0bXBfcGF0aHNwZWMgPSBOVUxMOworRU9GCisKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkgICAgY2F0IDw8IkVPRiIKKyAgeworICAgIGNoYXIqIHA7CisgICAgd2hpbGUgKChwID0gc3RyY2hyIChuZXdhcmd6WzBdLCAnXFwnKSkgIT0gTlVMTCkKKyAgICAgIHsKKwkqcCA9ICcvJzsKKyAgICAgIH0KKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKGx0X2FyZ3ZfemVybywgJ1xcJykpICE9IE5VTEwpCisgICAgICB7CisJKnAgPSAnLyc7CisgICAgICB9CisgIH0KK0VPRgorCSAgICA7OworCSAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICBsdF9zZXRlbnYgKCJCSU5fU0giLCAieHBnNCIpOyAvKiBmb3IgVHJ1NjQgKi8KKyAgbHRfc2V0ZW52ICgiRFVBTENBU0UiLCAiMSIpOyAgLyogZm9yIE1TSyBzaCAqLworICAvKiBVcGRhdGUgdGhlIERMTCBzZWFyY2hwYXRoLiAgRVhFX1BBVEhfVkFMVUUgKCRkbGxzZWFyY2hwYXRoKSBtdXN0CisgICAgIGJlIHByZXBlbmRlZCBiZWZvcmUgKHRoYXQgaXMsIGFwcGVhciBhZnRlcikgTElCX1BBVEhfVkFMVUUgKCR0ZW1wX3JwYXRoKQorICAgICBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggKl9WQVJOQU1FcyBhcmUgUEFUSCBidXQgdW5pbnN0YWxsZWQKKyAgICAgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4gKi8KKyAgbHRfdXBkYXRlX2V4ZV9wYXRoIChFWEVfUEFUSF9WQVJOQU1FLCBFWEVfUEFUSF9WQUxVRSk7CisgIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbHRfYXJndl96ZXJvOiAlc1xuIiwKKwkJICBub25udWxsIChsdF9hcmd2X3plcm8pKTsKKyAgZm9yIChpID0gMDsgaSA8IG5ld2FyZ2M7IGkrKykKKyAgICB7CisgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIG5ld2FyZ3pbJWRdOiAlc1xuIiwKKwkJICAgICAgaSwgbm9ubnVsbCAobmV3YXJneltpXSkpOworICAgIH0KKworRU9GCisKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkJY2F0IDw8IkVPRiIKKyAgLyogZXhlY3YgZG9lc24ndCBhY3R1YWxseSB3b3JrIG9uIG1pbmd3IGFzIGV4cGVjdGVkIG9uIHVuaXggKi8KKyAgbmV3YXJneiA9IHByZXBhcmVfc3Bhd24gKG5ld2FyZ3opOworICBydmFsID0gX3NwYXdudiAoX1BfV0FJVCwgbHRfYXJndl96ZXJvLCAoY29uc3QgY2hhciAqIGNvbnN0ICopIG5ld2FyZ3opOworICBpZiAocnZhbCA9PSAtMSkKKyAgICB7CisgICAgICAvKiBmYWlsZWQgdG8gc3RhcnQgcHJvY2VzcyAqLworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICAgIihtYWluKSBmYWlsZWQgdG8gbGF1bmNoIHRhcmdldCBcIiVzXCI6ICVzXG4iLAorCQkgICAgICBsdF9hcmd2X3plcm8sIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAgICAgIHJldHVybiAxMjc7CisgICAgfQorICByZXR1cm4gcnZhbDsKK0VPRgorCQk7OworCSAgICAgICopCisJCWNhdCA8PCJFT0YiCisgIGV4ZWN2IChsdF9hcmd2X3plcm8sIG5ld2FyZ3opOworICByZXR1cm4gcnZhbDsgLyogPTEyNywgYnV0IGF2b2lkcyB1bnVzZWQgdmFyaWFibGUgd2FybmluZyAqLworRU9GCisJCTs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorfQorCit2b2lkICoKK3htYWxsb2MgKHNpemVfdCBudW0pCit7CisgIHZvaWQgKnAgPSAodm9pZCAqKSBtYWxsb2MgKG51bSk7CisgIGlmICghcCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAibWVtb3J5IGV4aGF1c3RlZCIpOworCisgIHJldHVybiBwOworfQorCitjaGFyICoKK3hzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgcmV0dXJuIHN0cmluZyA/IHN0cmNweSAoKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChzdHJpbmcpICsgMSksCisJCQkgIHN0cmluZykgOiBOVUxMOworfQorCitjb25zdCBjaGFyICoKK2Jhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgY29uc3QgY2hhciAqYmFzZTsKKworI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICAvKiBTa2lwIG92ZXIgdGhlIGRpc2sgbmFtZSBpbiBNU0RPUyBwYXRobmFtZXMuICovCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgbmFtZVswXSkgJiYgbmFtZVsxXSA9PSAnOicpCisgICAgbmFtZSArPSAyOworI2VuZGlmCisKKyAgZm9yIChiYXNlID0gbmFtZTsgKm5hbWU7IG5hbWUrKykKKyAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAoKm5hbWUpKQorICAgICAgYmFzZSA9IG5hbWUgKyAxOworICByZXR1cm4gYmFzZTsKK30KKworaW50CitjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQoreworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGNoZWNrX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmICgoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgICAgJiYgKHN0LnN0X21vZGUgJiAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKSkpCisgICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworaW50CittYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIGludCBydmFsID0gMDsKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWtlX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmIChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgeworICAgICAgcnZhbCA9IGNobW9kIChwYXRoLCBzdC5zdF9tb2RlIHwgU19JWE9USCB8IFNfSVhHUlAgfCBTX0lYVVNSKTsKKyAgICB9CisgIHJldHVybiBydmFsOworfQorCisvKiBTZWFyY2hlcyBmb3IgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgd3JhcHBlci4gIFJldHVybnMKKyAgIG5ld2x5IGFsbG9jYXRlZCBmdWxsIHBhdGggbmFtZSBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UKKyAgIERvZXMgbm90IGNoYXNlIHN5bWxpbmtzLCBldmVuIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhlbS4KKyovCitjaGFyICoKK2ZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKK3sKKyAgaW50IGhhc19zbGFzaCA9IDA7CisgIGNvbnN0IGNoYXIgKnA7CisgIGNvbnN0IGNoYXIgKnBfbmV4dDsKKyAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCisgIGNoYXIgdG1wW0xUX1BBVEhNQVggKyAxXTsKKyAgaW50IHRtcF9sZW47CisgIGNoYXIgKmNvbmNhdF9uYW1lOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoZmluZF9leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAod3JhcHBlcikpOworCisgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogQWJzb2x1dGUgcGF0aD8gKi8KKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSB3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKKyAgICB7CisgICAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwlyZXR1cm4gY29uY2F0X25hbWU7CisgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyNlbmRpZgorICAgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKHdyYXBwZXJbMF0pKQorCXsKKwkgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisJICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCSAgICByZXR1cm4gY29uY2F0X25hbWU7CisJICBYRlJFRSAoY29uY2F0X25hbWUpOworCX0KKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgICB9CisjZW5kaWYKKworICBmb3IgKHAgPSB3cmFwcGVyOyAqcDsgcCsrKQorICAgIGlmICgqcCA9PSAnLycpCisgICAgICB7CisJaGFzX3NsYXNoID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgaWYgKCFoYXNfc2xhc2gpCisgICAgeworICAgICAgLyogbm8gc2xhc2hlczsgc2VhcmNoIFBBVEggKi8KKyAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSBnZXRlbnYgKCJQQVRIIik7CisgICAgICBpZiAocGF0aCAhPSBOVUxMKQorCXsKKwkgIGZvciAocCA9IHBhdGg7ICpwOyBwID0gcF9uZXh0KQorCSAgICB7CisJICAgICAgY29uc3QgY2hhciAqcTsKKwkgICAgICBzaXplX3QgcF9sZW47CisJICAgICAgZm9yIChxID0gcDsgKnE7IHErKykKKwkJaWYgKElTX1BBVEhfU0VQQVJBVE9SICgqcSkpCisJCSAgYnJlYWs7CisJICAgICAgcF9sZW4gPSBxIC0gcDsKKwkgICAgICBwX25leHQgPSAoKnEgPT0gJ1wwJyA/IHEgOiBxICsgMSk7CisJICAgICAgaWYgKHBfbGVuID09IDApCisJCXsKKwkJICAvKiBlbXB0eSBwYXRoOiBjdXJyZW50IGRpcmVjdG9yeSAqLworCQkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKwkJICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisJCSAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKwkJICBjb25jYXRfbmFtZSA9CisJCSAgICBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKwkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworCQkgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBjb25jYXRfbmFtZSA9CisJCSAgICBYTUFMTE9DIChjaGFyLCBwX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgcCwgcF9sZW4pOworCQkgIGNvbmNhdF9uYW1lW3BfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgcF9sZW4gKyAxLCB3cmFwcGVyKTsKKwkJfQorCSAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJCXJldHVybiBjb25jYXRfbmFtZTsKKwkgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOworCSAgICB9CisJfQorICAgICAgLyogbm90IGZvdW5kIGluIFBBVEg7IGFzc3VtZSBjdXJkaXIgKi8KKyAgICB9CisgIC8qIFJlbGF0aXZlIHBhdGggfCBub3QgZm91bmQgaW4gcGF0aDogcHJlcGVuZCBjd2QgKi8KKyAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAgY29uY2F0X25hbWUgPSBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKyAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKyAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisKKyAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKyAgICByZXR1cm4gY29uY2F0X25hbWU7CisgIFhGUkVFIChjb25jYXRfbmFtZSk7CisgIHJldHVybiBOVUxMOworfQorCitjaGFyICoKK2NoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKK3sKKyNpZm5kZWYgU19JU0xOSworICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworI2Vsc2UKKyAgY2hhciBidWZbTFRfUEFUSE1BWF07CisgIHN0cnVjdCBzdGF0IHM7CisgIGNoYXIgKnRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgY2hhciAqcDsKKyAgaW50IGhhc19zeW1saW5rcyA9IDA7CisgIHdoaWxlIChzdHJsZW4gKHRtcF9wYXRoc3BlYykgJiYgIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgICAiY2hlY2tpbmcgcGF0aCBjb21wb25lbnQgZm9yIHN5bWxpbmtzOiAlc1xuIiwKKwkJICAgICAgdG1wX3BhdGhzcGVjKTsKKyAgICAgIGlmIChsc3RhdCAodG1wX3BhdGhzcGVjLCAmcykgPT0gMCkKKwl7CisJICBpZiAoU19JU0xOSyAocy5zdF9tb2RlKSAhPSAwKQorCSAgICB7CisJICAgICAgaGFzX3N5bWxpbmtzID0gMTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICAvKiBzZWFyY2ggYmFja3dhcmRzIGZvciBsYXN0IERJUl9TRVBBUkFUT1IgKi8KKwkgIHAgPSB0bXBfcGF0aHNwZWMgKyBzdHJsZW4gKHRtcF9wYXRoc3BlYykgLSAxOworCSAgd2hpbGUgKChwID4gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHAtLTsKKwkgIGlmICgocCA9PSB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKKwkgICAgeworCSAgICAgIC8qIG5vIG1vcmUgRElSX1NFUEFSQVRPUlMgbGVmdCAqLworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAqcCA9ICdcMCc7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAiZXJyb3IgYWNjZXNzaW5nIGZpbGUgXCIlc1wiOiAlcyIsCisJCSAgICB0bXBfcGF0aHNwZWMsIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKwl9CisgICAgfQorICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKworICBpZiAoIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworICAgIH0KKworICB0bXBfcGF0aHNwZWMgPSByZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gMCkKKyAgICB7CisgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkiY291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7CisgICAgfQorICByZXR1cm4geHN0cmR1cCAodG1wX3BhdGhzcGVjKTsKKyNlbmRpZgorfQorCitjaGFyICoKK3N0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpCit7CisgIHNpemVfdCBsZW4sIHBhdGxlbjsKKworICBhc3NlcnQgKHN0ciAhPSBOVUxMKTsKKyAgYXNzZXJ0IChwYXQgIT0gTlVMTCk7CisKKyAgbGVuID0gc3RybGVuIChzdHIpOworICBwYXRsZW4gPSBzdHJsZW4gKHBhdCk7CisKKyAgaWYgKHBhdGxlbiA8PSBsZW4pCisgICAgeworICAgICAgc3RyICs9IGxlbiAtIHBhdGxlbjsKKyAgICAgIGlmIChzdHJjbXAgKHN0ciwgcGF0KSA9PSAwKQorCSpzdHIgPSAnXDAnOworICAgIH0KKyAgcmV0dXJuIHN0cjsKK30KKwordm9pZAorbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICBpZiAobHRfZGVidWcpCisgICAgeworICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUpOworICAgICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CisgICAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKKyAgICAgIHZhX2VuZCAoYXJncyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICpmaWxlLAorCSAgICAgICBpbnQgbGluZSwgY29uc3QgY2hhciAqbW9kZSwKKwkgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcCkKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICVzOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUsIG1vZGUpOworICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7CisgIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOworCisgIGlmIChleGl0X3N0YXR1cyA+PSAwKQorICAgIGV4aXQgKGV4aXRfc3RhdHVzKTsKK30KKwordm9pZAorbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7CisgIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgZmlsZSwgbGluZSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworICB2YV9lbmQgKGFwKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorbm9ubnVsbCAoY29uc3QgY2hhciAqcykKK3sKKyAgcmV0dXJuIHMgPyBzIDogIihudWxsKSI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK25vbmVtcHR5IChjb25zdCBjaGFyICpzKQoreworICByZXR1cm4gKHMgJiYgISpzKSA/ICIoZW1wdHkpIiA6IG5vbm51bGwgKHMpOworfQorCit2b2lkCitsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfc2V0ZW52KSBzZXR0aW5nICclcycgdG8gJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworICB7CisjaWZkZWYgSEFWRV9TRVRFTlYKKyAgICAvKiBhbHdheXMgbWFrZSBhIGNvcHksIGZvciBjb25zaXN0ZW5jeSB3aXRoICFIQVZFX1NFVEVOViAqLworICAgIGNoYXIgKnN0ciA9IHhzdHJkdXAgKHZhbHVlKTsKKyAgICBzZXRlbnYgKG5hbWUsIHN0ciwgMSk7CisjZWxzZQorICAgIGludCBsZW4gPSBzdHJsZW4gKG5hbWUpICsgMSArIHN0cmxlbiAodmFsdWUpICsgMTsKKyAgICBjaGFyICpzdHIgPSBYTUFMTE9DIChjaGFyLCBsZW4pOworICAgIHNwcmludGYgKHN0ciwgIiVzPSVzIiwgbmFtZSwgdmFsdWUpOworICAgIGlmIChwdXRlbnYgKHN0cikgIT0gRVhJVF9TVUNDRVNTKQorICAgICAgeworICAgICAgICBYRlJFRSAoc3RyKTsKKyAgICAgIH0KKyNlbmRpZgorICB9Cit9CisKK2NoYXIgKgorbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKQoreworICBjaGFyICpuZXdfdmFsdWU7CisgIGlmIChvcmlnX3ZhbHVlICYmICpvcmlnX3ZhbHVlKQorICAgIHsKKyAgICAgIGludCBvcmlnX3ZhbHVlX2xlbiA9IHN0cmxlbiAob3JpZ192YWx1ZSk7CisgICAgICBpbnQgYWRkX2xlbiA9IHN0cmxlbiAoYWRkKTsKKyAgICAgIG5ld192YWx1ZSA9IFhNQUxMT0MgKGNoYXIsIGFkZF9sZW4gKyBvcmlnX3ZhbHVlX2xlbiArIDEpOworICAgICAgaWYgKHRvX2VuZCkKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIG9yaWdfdmFsdWVfbGVuLCBhZGQpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgYWRkKTsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIGFkZF9sZW4sIG9yaWdfdmFsdWUpOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbmV3X3ZhbHVlID0geHN0cmR1cCAoYWRkKTsKKyAgICB9CisgIHJldHVybiBuZXdfdmFsdWU7Cit9CisKK3ZvaWQKK2x0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihsdF91cGRhdGVfZXhlX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICAvKiBzb21lIHN5c3RlbXMgY2FuJ3QgY29wZSB3aXRoIGEgJzonLXRlcm1pbmF0ZWQgcGF0aCAjJyAqLworICAgICAgaW50IGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKTsKKyAgICAgIHdoaWxlICgoKGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKSkgPiAwKSAmJiBJU19QQVRIX1NFUEFSQVRPUiAobmV3X3ZhbHVlW2xlbi0xXSkpCisgICAgICAgIHsKKyAgICAgICAgICBuZXdfdmFsdWVbbGVuLTFdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOworICAgICAgWEZSRUUgKG5ld192YWx1ZSk7CisgICAgfQorfQorCit2b2lkCitsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfdXBkYXRlX2xpYl9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKworICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgeworICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOworICAgICAgWEZSRUUgKG5ld192YWx1ZSk7CisgICAgfQorfQorCitFT0YKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkJY2F0IDw8IkVPRiIKKworLyogUHJlcGFyZXMgYW4gYXJndW1lbnQgdmVjdG9yIGJlZm9yZSBjYWxsaW5nIHNwYXduKCkuCisgICBOb3RlIHRoYXQgc3Bhd24oKSBkb2VzIG5vdCBieSBpdHNlbGYgY2FsbCB0aGUgY29tbWFuZCBpbnRlcnByZXRlcgorICAgICAoZ2V0ZW52ICgiQ09NU1BFQyIpICE9IE5VTEwgPyBnZXRlbnYgKCJDT01TUEVDIikgOgorICAgICAgKHsgT1NWRVJTSU9OSU5GTyB2OyB2LmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YoT1NWRVJTSU9OSU5GTyk7CisgICAgICAgICBHZXRWZXJzaW9uRXgoJnYpOworICAgICAgICAgdi5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UOworICAgICAgfSkgPyAiY21kLmV4ZSIgOiAiY29tbWFuZC5jb20iKS4KKyAgIEluc3RlYWQgaXQgc2ltcGx5IGNvbmNhdGVuYXRlcyB0aGUgYXJndW1lbnRzLCBzZXBhcmF0ZWQgYnkgJyAnLCBhbmQgY2FsbHMKKyAgIENyZWF0ZVByb2Nlc3MoKS4gIFdlIG11c3QgcXVvdGUgdGhlIGFyZ3VtZW50cyBzaW5jZSBXaW4zMiBDcmVhdGVQcm9jZXNzKCkKKyAgIGludGVycHJldHMgY2hhcmFjdGVycyBsaWtlICcgJywgJ1x0JywgJ1xcJywgJyInIChidXQgbm90ICc8JyBhbmQgJz4nKSBpbiBhCisgICBzcGVjaWFsIHdheToKKyAgIC0gU3BhY2UgYW5kIHRhYiBhcmUgaW50ZXJwcmV0ZWQgYXMgZGVsaW1pdGVycy4gVGhleSBhcmUgbm90IHRyZWF0ZWQgYXMKKyAgICAgZGVsaW1pdGVycyBpZiB0aGV5IGFyZSBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90ZXM6ICIuLi4iLgorICAgLSBVbmVzY2FwZWQgZG91YmxlIHF1b3RlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dC4gVGhlaXIgb25seSBlZmZlY3QgaXMKKyAgICAgdGhhdCB3aXRoaW4gZG91YmxlIHF1b3Rlcywgc3BhY2UgYW5kIHRhYiBhcmUgdHJlYXRlZCBsaWtlIG5vcm1hbAorICAgICBjaGFyYWN0ZXJzLgorICAgLSBCYWNrc2xhc2hlcyBub3QgZm9sbG93ZWQgYnkgZG91YmxlIHF1b3RlcyBhcmUgbm90IHNwZWNpYWwuCisgICAtIEJ1dCAyKm4rMSBiYWNrc2xhc2hlcyBmb2xsb3dlZCBieSBhIGRvdWJsZSBxdW90ZSBiZWNvbWUKKyAgICAgbiBiYWNrc2xhc2hlcyBmb2xsb3dlZCBieSBhIGRvdWJsZSBxdW90ZSAobiA+PSAwKToKKyAgICAgICBcIiAtPiAiCisgICAgICAgXFxcIiAtPiBcIgorICAgICAgIFxcXFxcIiAtPiBcXCIKKyAqLworI2RlZmluZSBTSEVMTF9TUEVDSUFMX0NIQVJTICJcIlxcIFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzciCisjZGVmaW5lIFNIRUxMX1NQQUNFX0NIQVJTICIgXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyIKK2NoYXIgKioKK3ByZXBhcmVfc3Bhd24gKGNoYXIgKiphcmd2KQoreworICBzaXplX3QgYXJnYzsKKyAgY2hhciAqKm5ld19hcmd2OworICBzaXplX3QgaTsKKworICAvKiBDb3VudCBudW1iZXIgb2YgYXJndW1lbnRzLiAgKi8KKyAgZm9yIChhcmdjID0gMDsgYXJndlthcmdjXSAhPSBOVUxMOyBhcmdjKyspCisgICAgOworCisgIC8qIEFsbG9jYXRlIG5ldyBhcmd1bWVudCB2ZWN0b3IuICAqLworICBuZXdfYXJndiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworCisgIC8qIFB1dCBxdW90ZWQgYXJndW1lbnRzIGludG8gdGhlIG5ldyBhcmd1bWVudCB2ZWN0b3IuICAqLworICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IGFyZ3ZbaV07CisKKyAgICAgIGlmIChzdHJpbmdbMF0gPT0gJ1wwJykKKwluZXdfYXJndltpXSA9IHhzdHJkdXAgKCJcIlwiIik7CisgICAgICBlbHNlIGlmIChzdHJwYnJrIChzdHJpbmcsIFNIRUxMX1NQRUNJQUxfQ0hBUlMpICE9IE5VTEwpCisJeworCSAgaW50IHF1b3RlX2Fyb3VuZCA9IChzdHJwYnJrIChzdHJpbmcsIFNIRUxMX1NQQUNFX0NIQVJTKSAhPSBOVUxMKTsKKwkgIHNpemVfdCBsZW5ndGg7CisJICB1bnNpZ25lZCBpbnQgYmFja3NsYXNoZXM7CisJICBjb25zdCBjaGFyICpzOworCSAgY2hhciAqcXVvdGVkX3N0cmluZzsKKwkgIGNoYXIgKnA7CisKKwkgIGxlbmd0aCA9IDA7CisJICBiYWNrc2xhc2hlcyA9IDA7CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICBsZW5ndGgrKzsKKwkgIGZvciAocyA9IHN0cmluZzsgKnMgIT0gJ1wwJzsgcysrKQorCSAgICB7CisJICAgICAgY2hhciBjID0gKnM7CisJICAgICAgaWYgKGMgPT0gJyInKQorCQlsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOworCSAgICAgIGxlbmd0aCsrOworCSAgICAgIGlmIChjID09ICdcXCcpCisJCWJhY2tzbGFzaGVzKys7CisJICAgICAgZWxzZQorCQliYWNrc2xhc2hlcyA9IDA7CisJICAgIH0KKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgIGxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7CisKKwkgIHF1b3RlZF9zdHJpbmcgPSBYTUFMTE9DIChjaGFyLCBsZW5ndGggKyAxKTsKKworCSAgcCA9IHF1b3RlZF9zdHJpbmc7CisJICBiYWNrc2xhc2hlcyA9IDA7CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICAqcCsrID0gJyInOworCSAgZm9yIChzID0gc3RyaW5nOyAqcyAhPSAnXDAnOyBzKyspCisJICAgIHsKKwkgICAgICBjaGFyIGMgPSAqczsKKwkgICAgICBpZiAoYyA9PSAnIicpCisJCXsKKwkJICB1bnNpZ25lZCBpbnQgajsKKwkJICBmb3IgKGogPSBiYWNrc2xhc2hlcyArIDE7IGogPiAwOyBqLS0pCisJCSAgICAqcCsrID0gJ1xcJzsKKwkJfQorCSAgICAgICpwKysgPSBjOworCSAgICAgIGlmIChjID09ICdcXCcpCisJCWJhY2tzbGFzaGVzKys7CisJICAgICAgZWxzZQorCQliYWNrc2xhc2hlcyA9IDA7CisJICAgIH0KKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBpbnQgajsKKwkgICAgICBmb3IgKGogPSBiYWNrc2xhc2hlczsgaiA+IDA7IGotLSkKKwkJKnArKyA9ICdcXCc7CisJICAgICAgKnArKyA9ICciJzsKKwkgICAgfQorCSAgKnAgPSAnXDAnOworCisJICBuZXdfYXJndltpXSA9IHF1b3RlZF9zdHJpbmc7CisJfQorICAgICAgZWxzZQorCW5ld19hcmd2W2ldID0gKGNoYXIgKikgc3RyaW5nOworICAgIH0KKyAgbmV3X2FyZ3ZbYXJnY10gPSBOVUxMOworCisgIHJldHVybiBuZXdfYXJndjsKK30KK0VPRgorCQk7OworCSAgICBlc2FjCisKKyAgICAgICAgICAgIGNhdCA8PCJFT0YiCit2b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFKiBmKQoreworRU9GCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyIHllcyB8CisJICAgICAgJFNFRCAtbiAtZSAnCitzL15cKC5cezc5XH1cKVwoLi4qXCkvXDFcCitcMi8KK2gKK3MvXChbXFwiXVwpL1xcXDEvZworcy8kL1xcbi8KK3MvXChbXlxuXSpcKS4qLyAgZnB1dHMgKCJcMSIsIGYpOy9wCitnCitEJworICAgICAgICAgICAgY2F0IDw8IkVPRiIKK30KK0VPRgorfQorIyBlbmQ6IGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKworIyBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCBBUkcKKyMgVHJ1ZSBpZiBBUkcgaXMgYW4gaW1wb3J0IGxpYiwgYXMgaW5kaWNhdGVkIGJ5ICRmaWxlX21hZ2ljX2NtZAorZnVuY193aW4zMl9pbXBvcnRfbGliX3AgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSBgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCB8ICRTRUQgLWUgMTBxYCBpbgorICAgICppbXBvcnQqKSA6IDs7CisgICAgKikgZmFsc2UgOzsKKyAgICBlc2FjCit9CisKKyMgZnVuY19tb2RlX2xpbmsgYXJnLi4uCitmdW5jX21vZGVfbGluayAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICRob3N0IGluCisgICAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKyAgICAgICMgSXQgaXMgaW1wb3NzaWJsZSB0byBsaW5rIGEgZGxsIHdpdGhvdXQgdGhpcyBzZXR0aW5nLCBhbmQKKyAgICAgICMgd2Ugc2hvdWxkbid0IGZvcmNlIHRoZSBtYWtlZmlsZSBtYWludGFpbmVyIHRvIGZpZ3VyZSBvdXQKKyAgICAgICMgd2hpY2ggc3lzdGVtIHdlIGFyZSBjb21waWxpbmcgZm9yIGluIG9yZGVyIHRvIHBhc3MgYW4gZXh0cmEKKyAgICAgICMgZmxhZyBmb3IgZXZlcnkgbGlidG9vbCBpbnZvY2F0aW9uLgorICAgICAgIyBhbGxvd191bmRlZmluZWQ9bm8KKworICAgICAgIyBGSVhNRTogVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhlIGFib3ZlIHdoZW4gdHJ5aW5nCisgICAgICAjIHRvIG1ha2UgYSBkbGwgd2hpY2ggaGFzIHVuZGVmaW5lZCBzeW1ib2xzLCBpbiB3aGljaCBjYXNlIG5vdAorICAgICAgIyBldmVuIGEgc3RhdGljIGxpYnJhcnkgaXMgYnVpbHQuICBGb3Igbm93LCB3ZSBuZWVkIHRvIHNwZWNpZnkKKyAgICAgICMgLW5vLXVuZGVmaW5lZCBvbiB0aGUgbGlidG9vbCBsaW5rIGxpbmUgd2hlbiB3ZSBjYW4gYmUgY2VydGFpbgorICAgICAgIyB0aGF0IGFsbCBzeW1ib2xzIGFyZSBzYXRpc2ZpZWQsIG90aGVyd2lzZSB3ZSBnZXQgYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgZXNhYworICAgIGxpYnRvb2xfYXJncz0kbm9ub3B0CisgICAgYmFzZV9jb21waWxlPSIkbm9ub3B0ICRAIgorICAgIGNvbXBpbGVfY29tbWFuZD0kbm9ub3B0CisgICAgZmluYWxpemVfY29tbWFuZD0kbm9ub3B0CisKKyAgICBjb21waWxlX3JwYXRoPQorICAgIGZpbmFsaXplX3JwYXRoPQorICAgIGNvbXBpbGVfc2hsaWJwYXRoPQorICAgIGZpbmFsaXplX3NobGlicGF0aD0KKyAgICBjb252ZW5pZW5jZT0KKyAgICBvbGRfY29udmVuaWVuY2U9CisgICAgZGVwbGlicz0KKyAgICBvbGRfZGVwbGlicz0KKyAgICBjb21waWxlcl9mbGFncz0KKyAgICBsaW5rZXJfZmxhZ3M9CisgICAgZGxsc2VhcmNocGF0aD0KKyAgICBsaWJfc2VhcmNoX3BhdGg9YHB3ZGAKKyAgICBpbnN0X3ByZWZpeF9kaXI9CisgICAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9CisKKyAgICBhdm9pZF92ZXJzaW9uPW5vCisgICAgYmluZGlyPQorICAgIGRsZmlsZXM9CisgICAgZGxwcmVmaWxlcz0KKyAgICBkbHNlbGY9bm8KKyAgICBleHBvcnRfZHluYW1pYz1ubworICAgIGV4cG9ydF9zeW1ib2xzPQorICAgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PQorICAgIGdlbmVyYXRlZD0KKyAgICBsaWJvYmpzPQorICAgIGx0bGlicz0KKyAgICBtb2R1bGU9bm8KKyAgICBub19pbnN0YWxsPW5vCisgICAgb2Jqcz0KKyAgICBub25fcGljX29iamVjdHM9CisgICAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9CisgICAgcHJlZmVyX3N0YXRpY19saWJzPW5vCisgICAgcHJlbG9hZD1ubworICAgIHByZXY9CisgICAgcHJldmFyZz0KKyAgICByZWxlYXNlPQorICAgIHJwYXRoPQorICAgIHhycGF0aD0KKyAgICBwZXJtX3JwYXRoPQorICAgIHRlbXBfcnBhdGg9CisgICAgdGhyZWFkX3NhZmU9bm8KKyAgICB2aW5mbz0KKyAgICB2aW5mb19udW1iZXI9bm8KKyAgICB3ZWFrX2xpYnM9CisgICAgc2luZ2xlX21vZHVsZT0iJHt3bH0tc2luZ2xlX21vZHVsZSIKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICAjIFdlIG5lZWQgdG8ga25vdyAtc3RhdGljLCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCBmaWxlbmFtZXMuCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1zaGFyZWQpCisJdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2FuIG5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCWJ1aWxkX29sZF9saWJzPW5vCisJYnJlYWsKKwk7OworICAgICAgLWFsbC1zdGF0aWMgfCAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJY2FzZSAkYXJnIGluCisJLWFsbC1zdGF0aWMpCisJICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjb21wbGV0ZSBzdGF0aWMgbGlua2luZyBpcyBpbXBvc3NpYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbiIKKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKwkgIDs7CisJLXN0YXRpYykKKwkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9YnVpbHQKKwkgIDs7CisJLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcworCSAgOzsKKwllc2FjCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgU2VlIGlmIG91ciBzaGFyZWQgYXJjaGl2ZXMgZGVwZW5kIG9uIHN0YXRpYyBhcmNoaXZlcy4KKyAgICB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgYnVpbGRfb2xkX2xpYnM9eWVzCisKKyAgICAjIEdvIHRocm91Z2ggdGhlIGFyZ3VtZW50cywgdHJhbnNmb3JtaW5nIHRoZW0gb24gdGhlIHdheS4KKyAgICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgICBhcmc9IiQxIgorICAgICAgc2hpZnQKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBxYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdAorICAgICAgZnVuY19hcHBlbmQgbGlidG9vbF9hcmdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCisgICAgICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgICAgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCWNhc2UgJHByZXYgaW4KKwlvdXRwdXQpCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcHJldiBpbgorCWJpbmRpcikKKwkgIGJpbmRpcj0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlkbGZpbGVzfGRscHJlZmlsZXMpCisJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSBubzsgdGhlbgorCSAgICAjIEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRoZSBsaW5raW5nIGNvbW1hbmRzLgorCSAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAU1lNRklMRUAiCisJICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAU1lNRklMRUAiCisJICAgIHByZWxvYWQ9eWVzCisJICBmaQorCSAgY2FzZSAkYXJnIGluCisJICAqLmxhIHwgKi5sbykgOzsgICMgV2UgaGFuZGxlIHRoZXNlIGNhc2VzIGJlbG93LgorCSAgZm9yY2UpCisJICAgIGlmIHRlc3QgIiRkbHNlbGYiID0gbm87IHRoZW4KKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIHNlbGYpCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlcyAmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiICE9IHllczsgdGhlbgorCSAgICAgIGRsc2VsZj15ZXMKKwkgICAgZWxzZQorCSAgICAgIGRsc2VsZj1uZWVkbGVzcworCSAgICAgIGV4cG9ydF9keW5hbWljPXllcworCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkYXJnIgorCSAgICBlbHNlCisJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRhcmciCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWV4cHN5bXMpCisJICBleHBvcnRfc3ltYm9scz0iJGFyZyIKKwkgIHRlc3QgLWYgIiRhcmciIFwKKwkgICAgfHwgZnVuY19mYXRhbF9lcnJvciAic3ltYm9sIGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlleHBzeW1zX3JlZ2V4KQorCSAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZnJhbWV3b3JrKQorCSAgY2FzZSAkaG9zdCBpbgorCSAgICAqLSotZGFyd2luKikKKwkgICAgICBjYXNlICIkZGVwbGlicyAiIGluCisJCSoiICRxYXJnLmx0ZnJhbWV3b3JrICIqKSA7OworCQkqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJHFhcmcubHRmcmFtZXdvcmsiICMgdGhpcyBpcyBmaXhlZCBsYXRlcgorCQkgICA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgZXNhYworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWluc3RfcHJlZml4KQorCSAgaW5zdF9wcmVmaXhfZGlyPSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCW9iamVjdGxpc3QpCisJICBpZiB0ZXN0IC1mICIkYXJnIjsgdGhlbgorCSAgICBzYXZlX2FyZz0kYXJnCisJICAgIG1vcmVhcmdzPQorCSAgICBmb3IgZmlsIGluIGBjYXQgIiRzYXZlX2FyZyJgCisJICAgIGRvCisjCSAgICAgIGZ1bmNfYXBwZW5kIG1vcmVhcmdzICIgJGZpbCIKKwkgICAgICBhcmc9JGZpbAorCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorCisJICAgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorCSAgICAgIGlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCisJCXBpY19vYmplY3Q9CisJCW5vbl9waWNfb2JqZWN0PQorCisJCSMgUmVhZCB0aGUgLmxvIGZpbGUKKwkJZnVuY19zb3VyY2UgIiRhcmciCisKKwkJaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CisJCSAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKwkJICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJgorCQkgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgorCQlmaQorCisJCSMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJCWZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCXhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJCWlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCisJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCQkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorCQkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCisJCSAgICAgIHByZXY9CisJCSAgICAgIGNvbnRpbnVlCisJCSAgICBlbHNlCisJCSAgICAgICMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCSAgICAgIHByZXY9ZGxwcmVmaWxlcworCQkgICAgZmkKKwkJICBmaQorCisJCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJCSAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisJCSAgICBwcmV2PQorCQkgIGZpCisKKwkJICAjIEEgUElDIG9iamVjdC4KKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgYXJnPSIkcGljX29iamVjdCIKKwkJZmkKKworCQkjIE5vbi1QSUMgb2JqZWN0LgorCQlpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKworCQkgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KKwkJICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorCQkgIGZpCisJCWVsc2UKKwkJICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisJCSAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCQkgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCWZpCisJICAgICAgZWxzZQorCQkjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkJaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisJCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQkgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJCSAgZnVuY19sbzJvICIkYXJnIgorCQkgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisJCSAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICAgICAgICBlbHNlCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkJZmkKKwkgICAgICBmaQorCSAgICBkb25lCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImxpbmsgaW5wdXQgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgZmkKKwkgIGFyZz0kc2F2ZV9hcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlwcmVjaW91c19yZWdleCkKKwkgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJlbGVhc2UpCisJICByZWxlYXNlPSItJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlycGF0aCB8IHhycGF0aCkKKwkgICMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCSAgY2FzZSAkYXJnIGluCisJICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJICAqKQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgIiRwcmV2IiA9IHJwYXRoOyB0aGVuCisJICAgIGNhc2UgIiRycGF0aCAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGFyZyIgOzsKKwkgICAgZXNhYworCSAgZWxzZQorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGFyZyIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlzaHJleHQpCisJICBzaHJleHRfY21kcz0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl3ZWFrKQorCSAgZnVuY19hcHBlbmQgd2Vha19saWJzICIgJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl4Y2NsaW5rZXIpCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4Y29tcGlsZXIpCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGxpbmtlcikKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCSopCisJICBldmFsICIkcHJldj1cIlwkYXJnXCIiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXNhYworICAgICAgZmkgIyB0ZXN0IC1uICIkcHJldiIKKworICAgICAgcHJldmFyZz0iJGFyZyIKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtYWxsLXN0YXRpYykKKwlpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICMgU2VlIGNvbW1lbnQgZm9yIC1zdGF0aWMgZmxhZyBiZWxvdywgZm9yIG1vcmUgZGV0YWlscy4KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAtYWxsb3ctdW5kZWZpbmVkKQorCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KKwlmdW5jX2ZhdGFsX2Vycm9yICJcYC1hbGxvdy11bmRlZmluZWQnIG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIKKwk7OworCisgICAgICAtYXZvaWQtdmVyc2lvbikKKwlhdm9pZF92ZXJzaW9uPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWJpbmRpcikKKwlwcmV2PWJpbmRpcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRsb3BlbikKKwlwcmV2PWRsZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbHByZW9wZW4pCisJcHJldj1kbHByZWZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LWR5bmFtaWMpCisJZXhwb3J0X2R5bmFtaWM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LXN5bWJvbHMgfCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJtb3JlIHRoYW4gb25lIC1leHBvcnRlZC1zeW1ib2xzIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIgorCWZpCisJaWYgdGVzdCAiWCRhcmciID0gIlgtZXhwb3J0LXN5bWJvbHMiOyB0aGVuCisJICBwcmV2PWV4cHN5bXMKKwllbHNlCisJICBwcmV2PWV4cHN5bXNfcmVnZXgKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWZyYW1ld29yaykKKwlwcmV2PWZyYW1ld29yaworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWluc3QtcHJlZml4LWRpcikKKwlwcmV2PWluc3RfcHJlZml4CisJY29udGludWUKKwk7OworCisgICAgICAjIFRoZSBuYXRpdmUgSVJJWCBsaW5rZXIgdW5kZXJzdGFuZHMgLUxBTkc6KiwgLUxJU1Q6KiBhbmQgLUxOTzoqCisgICAgICAjIHNvLCBpZiB3ZSBzZWUgdGhlc2UgZmxhZ3MgYmUgY2FyZWZ1bCBub3QgdG8gdHJlYXQgdGhlbSBsaWtlIC1MCisgICAgICAtTFtBLVpdW0EtWl0qOiopCisJY2FzZSAkd2l0aF9nY2MvJGhvc3QgaW4KKwluby8qLSotaXJpeCogfCAvKi0qLWlyaXgqKQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtTCopCisJZnVuY19zdHJpcG5hbWUgIi1MIiAnJyAiJGFyZyIKKwlpZiB0ZXN0IC16ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgorCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInJlcXVpcmUgbm8gc3BhY2UgYmV0d2VlbiBcYC1MJyBhbmQgXGAkMSciCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm5lZWQgcGF0aCBmb3IgXGAtTCcgb3B0aW9uIgorCSAgZmkKKwlmaQorCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCWRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSopCisJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJICB0ZXN0IC16ICIkYWJzZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKKwkgIGRpcj0iJGFic2RpciIKKwkgIDs7CisJZXNhYworCWNhc2UgIiRkZXBsaWJzICIgaW4KKwkqIiAtTCRkaXIgIiogfCAqIiAkYXJnICIqKQorCSAgIyBXaWxsIG9ubHkgaGFwcGVuIGZvciBhYnNvbHV0ZSBvciBzeXNyb290IGFyZ3VtZW50cworCSAgOzsKKwkqKQorCSAgIyBQcmVzZXJ2ZSBzeXNyb290LCBidXQgbmV2ZXIgaW5jbHVkZSByZWxhdGl2ZSBkaXJlY3RvcmllcworCSAgY2FzZSAkZGlyIGluCisJICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKiB8ID0qKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1MJGRpciIgOzsKKwkgIGVzYWMKKwkgIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiCisJICA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKwkgIHRlc3RiaW5kaXI9YCRFQ0hPICIkZGlyIiB8ICRTRUQgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGRpciI7OworCSAgZXNhYworCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbCopCisJaWYgdGVzdCAiWCRhcmciID0gIlgtbGMiIHx8IHRlc3QgIlgkYXJnIiA9ICJYLWxtIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyogfCAqLSotaGFpa3UqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW9zMiopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCisJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwllbGlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjX3IiOyB0aGVuCisJIGNhc2UgJGhvc3QgaW4KKwkgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjX3IgZGlyZWN0bHksIHVzZSAtcHRocmVhZCBmbGFnLgorCSAgIGNvbnRpbnVlCisJICAgOzsKKwkgZXNhYworCWZpCisJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAtbW9kdWxlKQorCW1vZHVsZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgVHJ1NjQgVU5JWCB1c2VzIC1tb2RlbCBbYXJnXSB0byBkZXRlcm1pbmUgdGhlIGxheW91dCBvZiBDKysKKyAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICMgRGFyd2luIHVzZXMgdGhlIC1hcmNoIGZsYWcgdG8gZGV0ZXJtaW5lIG91dHB1dCBhcmNoaXRlY3R1cmUuCisgICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290fC0tc3lzcm9vdCkKKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZSBcCisgICAgICB8LXRocmVhZHN8LWZvcGVubXB8LW9wZW5tcHwtbXB8LXhvcGVubXB8LW9tcHwtcXNtcD0qKQorCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRhcmciIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW11bHRpX21vZHVsZSkKKwlzaW5nbGVfbW9kdWxlPSIke3dsfS1tdWx0aV9tb2R1bGUiCisJY29udGludWUKKwk7OworCisgICAgICAtbm8tZmFzdC1pbnN0YWxsKQorCWZhc3RfaW5zdGFsbD1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLWluc3RhbGwpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWRhcndpbiogfCAqLWNlZ2NjKikKKwkgICMgVGhlIFBBVEggaGFja2VyeSBpbiB3cmFwcGVyIHNjcmlwdHMgaXMgcmVxdWlyZWQgb24gV2luZG93cworCSAgIyBhbmQgRGFyd2luIGluIG9yZGVyIGZvciB0aGUgbG9hZGVyIHRvIGZpbmQgYW55IGRsbHMgaXQgbmVlZHMuCisJICBmdW5jX3dhcm5pbmcgIlxgLW5vLWluc3RhbGwnIGlzIGlnbm9yZWQgZm9yICRob3N0IgorCSAgZnVuY193YXJuaW5nICJhc3N1bWluZyBcYC1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiCisJICBmYXN0X2luc3RhbGw9bm8KKwkgIDs7CisJKikgbm9faW5zdGFsbD15ZXMgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbm8tdW5kZWZpbmVkKQorCWFsbG93X3VuZGVmaW5lZD1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW9iamVjdGxpc3QpCisJcHJldj1vYmplY3RsaXN0CisJY29udGludWUKKwk7OworCisgICAgICAtbykgcHJldj1vdXRwdXQgOzsKKworICAgICAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4KQorCXByZXY9cHJlY2lvdXNfcmVnZXgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1yZWxlYXNlKQorCXByZXY9cmVsZWFzZQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXJwYXRoKQorCXByZXY9cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKQorCXByZXY9eHJwYXRoCisJY29udGludWUKKwk7OworCisgICAgICAtUiopCisJZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGFyZyIKKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwk9KikKKwkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGRpciIKKwkgIGRpcj0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgOzsKKwllc2FjCisJY2FzZSAiJHhycGF0aCAiIGluCisJKiIgJGRpciAiKikgOzsKKwkqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaGFyZWQpCisJIyBUaGUgZWZmZWN0cyBvZiAtc2hhcmVkIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaHJleHQpCisJcHJldj1zaHJleHQKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKKwkjIFRoZSBlZmZlY3RzIG9mIC1zdGF0aWMgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCSMgV2UgdXNlZCB0byBkbyB0aGUgc2FtZSBhcyAtYWxsLXN0YXRpYyBvbiBwbGF0Zm9ybXMgdGhhdAorCSMgZGlkbid0IGhhdmUgYSBQSUMgZmxhZywgYnV0IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGVmZmVjdHMKKwkjIHdvdWxkIGJlIGVxdWl2YWxlbnQgd2FzIHdyb25nLiAgSXQgd291bGQgYnJlYWsgb24gYXQgbGVhc3QKKwkjIERpZ2l0YWwgVW5peCBhbmQgQUlYLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXRocmVhZC1zYWZlKQorCXRocmVhZF9zYWZlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXZlcnNpb24taW5mbykKKwlwcmV2PXZpbmZvCisJY29udGludWUKKwk7OworCisgICAgICAtdmVyc2lvbi1udW1iZXIpCisJcHJldj12aW5mbworCXZpbmZvX251bWJlcj15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC13ZWFrKQorICAgICAgICBwcmV2PXdlYWsKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1XYywqKQorCWZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlhcmc9CisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGFyZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwk7OworCisgICAgICAtV2wsKikKKwlmdW5jX3N0cmlwbmFtZSAnLVdsLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBmdW5jX2FwcGVuZCBhcmcgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJOzsKKworICAgICAgLVhjb21waWxlcikKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVhsaW5rZXIpCisJcHJldj14bGlua2VyCisJY29udGludWUKKwk7OworCisgICAgICAtWENDbGlua2VyKQorCXByZXY9eGNjbGlua2VyCisJY29udGludWUKKwk7OworCisgICAgICAjIC1tc2dfKiBmb3Igb3NmIGNjCisgICAgICAtbXNnXyopCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwk7OworCisgICAgICAjIEZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwgd2l0aCByYXRpb25hbGU6CisgICAgICAjIC02NCwgLW1pcHNbMC05XSAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAtclswLTldWzAtOV0qICAgICAgICBzcGVjaWZ5IHByb2Nlc3NvciBmb3IgdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTdW4gY29tcGlsZXIKKyAgICAgICMgK0RBKiwgK0REKiAgICAgICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgSFAgY29tcGlsZXIKKyAgICAgICMgLXEqICAgICAgICAgICAgICAgICAgY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgorICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgZm9yIEdDQworICAgICAgIyAtRi9wYXRoICAgICAgICAgICAgICBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKyAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogIHByb2ZpbGluZyBmbGFncyBmb3IgR0NDCisgICAgICAjIEBmaWxlICAgICAgICAgICAgICAgIEdDQyByZXNwb25zZSBmaWxlcworICAgICAgIyAtdHA9KiAgICAgICAgICAgICAgICBQb3J0bGFuZCBwZ2NjIHRhcmdldCBwcm9jZXNzb3Igc2VsZWN0aW9uCisgICAgICAjIC0tc3lzcm9vdD0qICAgICAgICAgIGZvciBzeXNyb290IHN1cHBvcnQKKyAgICAgICMgLU8qLCAtZmx0byosIC1md2hvcHIqLCAtZnVzZS1saW5rZXItcGx1Z2luIEdDQyBsaW5rLXRpbWUgb3B0aW1pemF0aW9uCisgICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKKyAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKnwtdHA9KnwtLXN5c3Jvb3Q9KnwgXAorICAgICAgLU8qfC1mbHRvKnwtZndob3ByKnwtZnVzZS1saW5rZXItcGx1Z2luKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorICAgICAgICBjb250aW51ZQorICAgICAgICA7OworCisgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgZmxhZy4KKyAgICAgIC0qIHwgKyopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKworICAgICAgKi4kb2JqZXh0KQorCSMgQSBzdGFuZGFyZCBvYmplY3QuCisJZnVuY19hcHBlbmQgb2JqcyAiICRhcmciCisJOzsKKworICAgICAgKi5sbykKKwkjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCSAgcGljX29iamVjdD0KKwkgIG5vbl9waWNfb2JqZWN0PQorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAiJGFyZyIKKworCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CisJICAgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCisJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkgIGZpCisKKwkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkgIGlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgorCQlwcmV2PQorCQljb250aW51ZQorCSAgICAgIGVsc2UKKwkJIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkJcHJldj1kbHByZWZpbGVzCisJICAgICAgZmkKKwkgICAgZmkKKworCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKKwkgICAgICBwcmV2PQorCSAgICBmaQorCisJICAgICMgQSBQSUMgb2JqZWN0LgorCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJICAgIGFyZz0iJHBpY19vYmplY3QiCisJICBmaQorCisJICAjIE5vbi1QSUMgb2JqZWN0LgorCSAgaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKworCSAgICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KKwkgICAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorCSAgICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJICAgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwllbHNlCisJICAjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorCSAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCSAgICBmdW5jX2xvMm8gIiRhcmciCisJICAgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisJICAgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJICBmaQorCWZpCisJOzsKKworICAgICAgKi4kbGliZXh0KQorCSMgQW4gYXJjaGl2ZS4KKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBvbGRfZGVwbGlicyAiICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAqLmxhKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KKworCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkYXJnIgorCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCSAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICBwcmV2PQorCWVsaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwkgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgcHJldj0KKwllbHNlCisJICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGFyZ3VtZW50LgorICAgICAgKikKKwkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKKwkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKyAgICAgIGVzYWMgIyBhcmcKKworICAgICAgIyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkYXJnIjsgdGhlbgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICBmaQorICAgIGRvbmUgIyBhcmd1bWVudCBwYXJzaW5nIGxvb3AKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCisgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgIGZpCisKKyAgICBvbGRsaWJzPQorICAgICMgY2FsY3VsYXRlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCB3aXRob3V0IGl0cyBkaXJlY3RvcnkKKyAgICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorICAgIG91dHB1dG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICBsaWJvYmpzX3NhdmU9IiRsaWJvYmpzIgorCisgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisgICAgICAjIGdldCB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICRzaGxpYnBhdGhfdmFyCisgICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRFQ0hPIFwiXCR7JHNobGlicGF0aF92YXJ9XCIgXHwgXCRTRUQgXCdzLzovIC9nXCdcYAorICAgIGVsc2UKKyAgICAgIHNobGliX3NlYXJjaF9wYXRoPQorICAgIGZpCisgICAgZXZhbCBzeXNfbGliX3NlYXJjaF9wYXRoPVwiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlY1wiCisgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgorCisgICAgZnVuY19kaXJuYW1lICIkb3V0cHV0IiAiLyIgIiIKKyAgICBvdXRwdXRfb2JqZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIiCisgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyIKKyAgICB0b29sX291dHB1dF9vYmpkaXI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZGlyZWN0b3J5LgorICAgIGZ1bmNfbWtkaXJfcCAiJG91dHB1dF9vYmpkaXIiCisKKyAgICAjIERldGVybWluZSB0aGUgdHlwZSBvZiBvdXRwdXQKKyAgICBjYXNlICRvdXRwdXQgaW4KKyAgICAiIikKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQgZmlsZSIKKyAgICAgIDs7CisgICAgKi4kbGliZXh0KSBsaW5rbW9kZT1vbGRsaWIgOzsKKyAgICAqLmxvIHwgKi4kb2JqZXh0KSBsaW5rbW9kZT1vYmogOzsKKyAgICAqLmxhKSBsaW5rbW9kZT1saWIgOzsKKyAgICAqKSBsaW5rbW9kZT1wcm9nIDs7ICMgQW55dGhpbmcgZWxzZSBzaG91bGQgYmUgYSBwcm9ncmFtLgorICAgIGVzYWMKKworICAgIHNwZWNpYWxkZXBsaWJzPQorCisgICAgbGlicz0KKyAgICAjIEZpbmQgYWxsIGludGVyZGVwZW5kZW50IGRlcGxpYnMgYnkgc2VhcmNoaW5nIGZvciBsaWJyYXJpZXMKKyAgICAjIHRoYXQgYXJlIGxpbmtlZCBtb3JlIHRoYW4gb25jZSAoZS5nLiAtbGEgLWxiIC1sYSkKKyAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworICAgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKwljYXNlICIkbGlicyAiIGluCisJKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBmdW5jX2FwcGVuZCBsaWJzICIgJGRlcGxpYiIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisgICAgICBsaWJzPSIkcHJlZGVwcyAkbGlicyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICRwb3N0ZGVwcyIKKworICAgICAgIyBDb21wdXRlIGxpYnJhcmllcyB0aGF0IGFyZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UgaW4gJHByZWRlcHMKKyAgICAgICMgJHBvc3RkZXBzIGFuZCBtYXJrIHRoZW0gYXMgc3BlY2lhbCAoaS5lLiwgd2hvc2UgZHVwbGljYXRlcyBhcmUKKyAgICAgICMgbm90IHRvIGJlIGVsaW1pbmF0ZWQpLgorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICAgIGlmICRvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzOyB0aGVuCisJZm9yIHByZV9wb3N0X2RlcCBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCisJICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCisJICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRwcmVfcG9zdF9kZXBzIiA7OworCSAgZXNhYworCSAgZnVuY19hcHBlbmQgcHJlX3Bvc3RfZGVwcyAiICRwcmVfcG9zdF9kZXAiCisJZG9uZQorICAgICAgZmkKKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgZmkKKworICAgIGRlcGxpYnM9CisgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKyAgICBuZWVkX3JlbGluaz1ubyAjIHdoZXRoZXIgd2UncmUgbGlua2luZyBhbnkgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBub3RpbnN0X2RlcGxpYnM9ICMgbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfcGF0aD0gIyBwYXRocyB0aGF0IGNvbnRhaW4gbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworCisgICAgY2FzZSAkbGlua21vZGUgaW4KKyAgICBsaWIpCisJcGFzc2VzPSJjb252IGRscHJlb3BlbiBsaW5rIgorCWZvciBmaWxlIGluICRkbGZpbGVzICRkbHByZWZpbGVzOyBkbworCSAgY2FzZSAkZmlsZSBpbgorCSAgKi5sYSkgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfaGVscCAibGlicmFyaWVzIGNhbiBcYC1kbG9wZW4nIG9ubHkgbGlidG9vbCBsaWJyYXJpZXM6ICRmaWxlIgorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwk7OworICAgIHByb2cpCisJY29tcGlsZV9kZXBsaWJzPQorCWZpbmFsaXplX2RlcGxpYnM9CisJYWxsZGVwbGlicz1ubworCW5ld2RsZmlsZXM9CisJbmV3ZGxwcmVmaWxlcz0KKwlwYXNzZXM9ImNvbnYgc2NhbiBkbG9wZW4gZGxwcmVvcGVuIGxpbmsiCisJOzsKKyAgICAqKSAgcGFzc2VzPSJjb252IgorCTs7CisgICAgZXNhYworCisgICAgZm9yIHBhc3MgaW4gJHBhc3NlczsgZG8KKyAgICAgICMgVGhlIHByZW9wZW4gcGFzcyBpbiBsaWIgbW9kZSByZXZlcnNlcyAkZGVwbGliczsgcHV0IGl0IGJhY2sgaGVyZQorICAgICAgIyBzbyB0aGF0IC1MIGNvbWVzIGJlZm9yZSBsaWJzIHRoYXQgbmVlZCBpdCBmb3IgaW5zdGFuY2UuLi4KKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiOyB0aGVuCisJIyMgRklYTUU6IEZpbmQgdGhlIHBsYWNlIHdoZXJlIHRoZSBsaXN0IGlzIHJlYnVpbHQgaW4gdGhlIHdyb25nCisJIyMgICAgICAgIG9yZGVyLCBhbmQgZml4IGl0IHRoZXJlIHByb3Blcmx5CisgICAgICAgIHRtcF9kZXBsaWJzPQorCWZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICB0bXBfZGVwbGlicz0iJGRlcGxpYiAkdG1wX2RlcGxpYnMiCisJZG9uZQorCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIjsgdGhlbgorCWxpYnM9IiRkZXBsaWJzIgorCWRlcGxpYnM9CisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwljYXNlICRwYXNzIGluCisJZGxvcGVuKSBsaWJzPSIkZGxmaWxlcyIgOzsKKwlkbHByZW9wZW4pIGxpYnM9IiRkbHByZWZpbGVzIiA7OworCWxpbmspCisJICBsaWJzPSIkZGVwbGlicyAlREVQTElCUyUiCisJICB0ZXN0ICJYJGxpbmtfYWxsX2RlcGxpYnMiICE9IFhubyAmJiBsaWJzPSIkbGlicyAkZGVwZW5kZW5jeV9saWJzIgorCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsZGxwcmVvcGVuIjsgdGhlbgorCSMgQ29sbGVjdCBhbmQgZm9yd2FyZCBkZXBsaWJzIG9mIHByZW9wZW5lZCBsaWJ0b29sIGxpYnMKKwlmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgIyBJZ25vcmUgbm9uLWxpYnRvb2wtbGlicworCSAgZGVwZW5kZW5jeV9saWJzPQorCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRsaWIiCisJICBjYXNlICRsaWIgaW4KKwkgICoubGEpCWZ1bmNfc291cmNlICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworCSAgZXNhYworCisJICAjIENvbGxlY3QgcHJlb3BlbmVkIGxpYnRvb2wgZGVwbGlicywgZXhjZXB0IGFueSB0aGlzIGxpYnJhcnkKKwkgICMgaGFzIGRlY2xhcmVkIGFzIHdlYWsgbGlicworCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorICAgICAgICAgICAgZGVwbGliX2Jhc2U9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIGNhc2UgIiAkd2Vha19saWJzICIgaW4KKwkgICAgKiIgJGRlcGxpYl9iYXNlICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGRlcGxpYiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWRvbmUKKwlsaWJzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKwkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCisJc2F2ZV9kZXBsaWJzPSIkZGVwbGlicyIKKwlkZXBsaWJzPQorICAgICAgZmkKKworICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8KKwlsaWI9CisJZm91bmQ9bm8KKwljYXNlICRkZXBsaWIgaW4KKwktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlIFwKKyAgICAgICAgfC10aHJlYWRzfC1mb3Blbm1wfC1vcGVubXB8LW1wfC14b3Blbm1wfC1vbXB8LXFzbXA9KikKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZGVwbGliIgorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwktbCopCisJICBpZiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYiAmJiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2c7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJcYC1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZWxzZQorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZmkKKwkgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaGRpcnM7IGRvCisJICAgIGZvciBzZWFyY2hfZXh0IGluIC5sYSAkc3RkX3NocmV4dCAuc28gLmE7IGRvCisJICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQorCSAgICAgIGxpYj0iJHNlYXJjaGRpci9saWIke25hbWV9JHtzZWFyY2hfZXh0fSIKKwkgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCQlpZiB0ZXN0ICIkc2VhcmNoX2V4dCIgPSAiLmxhIjsgdGhlbgorCQkgIGZvdW5kPXllcworCQllbHNlCisJCSAgZm91bmQ9bm8KKwkJZmkKKwkJYnJlYWsgMgorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGRvbmUKKwkgIGlmIHRlc3QgIiRmb3VuZCIgIT0geWVzOyB0aGVuCisJICAgICMgZGVwbGliIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGxpYnRvb2wgbGlicmFyeQorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgZWxzZSAjIGRlcGxpYiBpcyBhIGxpYnRvb2wgbGlicmFyeQorCSAgICAjIElmICRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMgJiYgJGRlcGxpYiBpcyBhIHN0ZGxpYiwKKwkgICAgIyBXZSBuZWVkIHRvIGRvIHNvbWUgc3BlY2lhbCB0aGluZ3MgaGVyZSwgYW5kIG5vdCBsYXRlci4KKwkgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopCisJCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KKwkJICBsaWJyYXJ5X25hbWVzPQorCQkgIG9sZF9saWJyYXJ5PQorCQkgIGZ1bmNfc291cmNlICIkbGliIgorCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkJICAgIGxsPSIkbCIKKwkJICBkb25lCisJCSAgaWYgdGVzdCAiWCRsbCIgPSAiWCRvbGRfbGlicmFyeSIgOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKKwkJICAgIGZvdW5kPW5vCisJCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCQkgICAgbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCQkgICAgbGliPSRsYWRpci8kb2xkX2xpYnJhcnkKKwkJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkJICAgIGVsc2UKKwkJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkJICAgICAgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkJICAgIGZpCisJCSAgICBjb250aW51ZQorCQkgIGZpCisJCWZpCisJCTs7CisJICAgICAgKikgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBmaQorCSAgOzsgIyAtbAorCSoubHRmcmFtZXdvcmspCisJICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCS1MKikKKwkgIGNhc2UgJGxpbmttb2RlIGluCisJICBsaWIpCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIHRlc3QgIiRwYXNzIiA9IGNvbnYgJiYgY29udGludWUKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgICA7OworCSAgcHJvZykKKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgY29udGludWUKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gc2NhbjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkgICAgOzsKKwkgICopCisJICAgIGZ1bmNfd2FybmluZyAiXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKKwkgICAgOzsKKwkgIGVzYWMgIyBsaW5rbW9kZQorCSAgY29udGludWUKKwkgIDs7ICMgLUwKKwktUiopCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBjb250aW51ZQorCSAgOzsKKwkqLmxhKQorCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJICBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgOzsKKwkqLiRsaWJleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCisJICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCisJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAqKQorCSAgICAgIHZhbGlkX2FfbGliPW5vCisJICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkJbWF0Y2hfcGF0dGVybiopCisJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIFwKKwkJICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgIHZhbGlkX2FfbGliPXllcworCQkgIGZpCisJCTs7CisJCXBhc3NfYWxsKQorCQkgIHZhbGlkX2FfbGliPXllcworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBpZiB0ZXN0ICIkdmFsaWRfYV9saWIiICE9IHllczsgdGhlbgorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCisJCWVjaG8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2UgaGVyZS4iCisJICAgICAgZWxzZQorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICA7OyAjICouJGxpYmV4dAorCSoubG8gfCAqLiRvYmpleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbiB8fCB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkZXBsaWIiCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgorCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCSVERVBMSUJTJSkKKwkgIGFsbGRlcGxpYnM9eWVzCisJICBjb250aW51ZQorCSAgOzsKKwllc2FjICMgY2FzZSAkZGVwbGliCisKKwlpZiB0ZXN0ICIkZm91bmQiID0geWVzIHx8IHRlc3QgLWYgIiRsaWIiOyB0aGVuIDoKKwllbHNlCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCB0aGUgbGlicmFyeSBcYCRsaWInIG9yIHVuaGFuZGxlZCBhcmd1bWVudCBcYCRkZXBsaWInIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRsaWIiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKwlsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwlkbG5hbWU9CisJZGxvcGVuPQorCWRscHJlb3Blbj0KKwlsaWJkaXI9CisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQorCSMgSWYgdGhlIGxpYnJhcnkgd2FzIGluc3RhbGxlZCB3aXRoIGFuIG9sZCByZWxlYXNlIG9mIGxpYnRvb2wsCisJIyBpdCB3aWxsIG5vdCByZWRlZmluZSB2YXJpYWJsZXMgaW5zdGFsbGVkLCBvciBzaG91bGRub3RsaW5rCisJaW5zdGFsbGVkPXllcworCXNob3VsZG5vdGxpbms9bm8KKwlhdm9pZHRlbXBycGF0aD0KKworCisJIyBSZWFkIHRoZSAubGEgZmlsZQorCWZ1bmNfc291cmNlICIkbGliIgorCisJIyBDb252ZXJ0ICItZnJhbWV3b3JrIGZvbyIgdG8gImZvby5sdGZyYW1ld29yayIKKwlpZiB0ZXN0IC1uICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyI7IHRoZW4KKwkgIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCisJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCisJICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiICRkZXBlbmRlbmN5X2xpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorCSAgIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIiB8fAorCSAgIHsgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB9OyB0aGVuCisJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKKwkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZGxwcmVvcGVuIgorCWZpCisKKwlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwkgICAgZmkKKwkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgorCSAgICBmdW5jX2FwcGVuZCBjb252ZW5pZW5jZSAiICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgZnVuY19hcHBlbmQgb2xkX2NvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICB0bXBfbGlicz0KKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKwkJY2FzZSAiJHRtcF9saWJzICIgaW4KKwkJKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCisJICAgIGRvbmUKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKwkgIGZpCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBjb252CisKKworCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KKwlsaW5rbGliPQorCWlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYKKwkgICB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0geWVzIHx8CisJICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LG5vIjsgfTsgdGhlbgorCSAgbGlua2xpYj0kb2xkX2xpYnJhcnkKKwllbHNlCisJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCisJICAgIGxpbmtsaWI9IiRsIgorCSAgZG9uZQorCWZpCisJaWYgdGVzdCAteiAiJGxpbmtsaWIiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwlmaQorCisJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCisJaWYgdGVzdCAiJHBhc3MiID0gZGxvcGVuOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgLWRsb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCisJICBmaQorCSAgaWYgdGVzdCAteiAiJGRsbmFtZSIgfHwKKwkgICAgIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8CisJICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICMgSWYgdGhlcmUgaXMgbm8gZGxuYW1lLCBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nCisJICAgICMgc3RhdGljYWxseSwgd2UgbmVlZCB0byBwcmVsb2FkLiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55CisJICAgICMgZGVwZW5kZW50IGxpYnJhcmllcyBzbyBsaWJsdGRsJ3MgZGVwbGliIHByZWxvYWRlciBkb2Vzbid0CisJICAgICMgYm9tYiBvdXQgaW4gdGhlIGxvYWQgZGVwbGlicyBwaGFzZS4KKwkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKwkgIGVsc2UKKwkgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiCisJICBmaQorCSAgY29udGludWUKKwlmaSAjICRwYXNzID0gZGxvcGVuCisKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRsYWRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzX2xhZGlyPSIkbGFkaXIiIDs7CisJKikKKwkgIGFic19sYWRpcj1gY2QgIiRsYWRpciIgJiYgcHdkYAorCSAgaWYgdGVzdCAteiAiJGFic19sYWRpciI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGxhZGlyJyIKKwkgICAgZnVuY193YXJuaW5nICJwYXNzaW5nIGl0IGxpdGVyYWxseSB0byB0aGUgbGlua2VyLCBhbHRob3VnaCBpdCBtaWdodCBmYWlsIgorCSAgICBhYnNfbGFkaXI9IiRsYWRpciIKKwkgIGZpCisJICA7OworCWVzYWMKKwlmdW5jX2Jhc2VuYW1lICIkbGliIgorCWxhbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCisJaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgorCSAgaWYgdGVzdCAhIC1mICIkbHRfc3lzcm9vdCRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iCisJICAgIGRpcj0iJGxhZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKwkgIGVsc2UKKwkgICAgZGlyPSIkbHRfc3lzcm9vdCRsaWJkaXIiCisJICAgIGFic2Rpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgorCSAgZmkKKwkgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9IFh5ZXMgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCisJZWxzZQorCSAgaWYgdGVzdCAhIC1mICIkbGFkaXIvJG9iamRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgZGlyPSIkbGFkaXIiCisJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgorCSAgZWxzZQorCSAgICBkaXI9IiRsYWRpci8kb2JqZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgorCSAgZmkKKwlmaSAjICRpbnN0YWxsZWQgPSB5ZXMKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJGxhbmFtZSIKKwluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCWlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbjsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciIgJiYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBsaWJyYXJpZXMgbWF5IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorCSAgZmkKKwkgIGNhc2UgIiRob3N0IiBpbgorCSAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBsYXRmb3JtcyB3aXRoIFBFLURMTHMuCisJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICMgTGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBsaW5rIGFnYWluc3Qgc2hhcmVkIGxpYnJhcnkgaWYgYm90aAorCSAgICAgICMgc3RhdGljIGFuZCBzaGFyZWQgYXJlIHByZXNlbnQuICBUaGVyZWZvcmUsIGVuc3VyZSB3ZSBleHRyYWN0CisJICAgICAgIyBzeW1ib2xzIGZyb20gdGhlIGltcG9ydCBsaWJyYXJ5IGlmIGEgc2hhcmVkIGxpYnJhcnkgaXMgcHJlc2VudAorCSAgICAgICMgKG90aGVyd2lzZSwgdGhlIGRsb3BlbiBtb2R1bGUgbmFtZSB3aWxsIGJlIGluY29ycmVjdCkuICBXZSBkbworCSAgICAgICMgdGhpcyBieSBwdXR0aW5nIHRoZSBpbXBvcnQgbGlicmFyeSBuYW1lIGludG8gJG5ld2RscHJlZmlsZXMuCisJICAgICAgIyBXZSByZWNvdmVyIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgYnkgJ3NhdmluZycgdGhlIGxhIGZpbGUKKwkgICAgICAjIG5hbWUgaW4gYSBzcGVjaWFsIHB1cnBvc2UgdmFyaWFibGUsIGFuZCAobGF0ZXIpIGV4dHJhY3RpbmcgdGhlCisJICAgICAgIyBkbG5hbWUgZnJvbSB0aGUgbGEgZmlsZS4KKwkgICAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgICAgZnVuY190cl9zaCAiJGRpci8kbGlua2xpYiIKKwkgICAgICAgIGV2YWwgImxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0PVwkYWJzX2xhZGlyL1wkbGFuYW1lIgorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisJICAgICAgZWxzZQorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisJICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICBmaQorCSAgICA7OworCSAgICAqICkKKwkgICAgICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKwkgICAgICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKwkgICAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCSAgICAgICAgICBmdW5jX2FwcGVuZCBkbHByZWNvbnZlbmllbmNlbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCisJICAgICAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGRsbmFtZSIKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kbGlua2xpYiIKKwkgICAgICBmaQorCSAgICA7OworCSAgZXNhYworCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KKworCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAjIExpbmsgdGhlIGNvbnZlbmllbmNlIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIiAjIHVzZWQgZm9yIHByb2csc2NhbiBwYXNzCisJICBmaQorCSAgY29udGludWUKKwlmaQorCisKKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyAmJiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGxhZGlyIgorCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKworCSAgbGlua2FsbGRlcGxpYnM9bm8KKwkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubyB8fCB0ZXN0IC16ICIkbGlicmFyeV9uYW1lcyIgfHwKKwkgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgbGlua2FsbGRlcGxpYnM9eWVzCisJICBmaQorCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgICAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCQkgOzsKKwkgICAgZXNhYworCSAgICAjIE5lZWQgdG8gbGluayBhZ2FpbnN0IGFsbCBkZXBlbmRlbmN5X2xpYnM/CisJICAgIGlmIHRlc3QgIiRsaW5rYWxsZGVwbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgIyBOZWVkIHRvIGhhcmRjb2RlIHNoYXJlZCBsaWJyYXJ5IHBhdGhzCisJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIKKwkgIGRvbmUgIyBmb3IgZGVwbGliCisJICBjb250aW51ZQorCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICAgIHsgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IG5vIHx8CisJICAgICAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCx5ZXMiOyB9IHx8CisJICAgICAgIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKKwkgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLXogIiRhdm9pZHRlbXBycGF0aCIgOyB0aGVuCisJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICAgIGNhc2UgIiR0ZW1wX3JwYXRoOiIgaW4KKwkgICAgICAqIiRhYnNkaXI6IiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9ycGF0aCAiJGFic2RpcjoiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCisJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKwkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorCSAgICAjIHNlYXJjaCBwYXRoLgorCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpICMgJGxpbmttb2RlLCRwYXNzID0gcHJvZyxsaW5rLi4uCisKKwkgIGlmIHRlc3QgIiRhbGxkZXBsaWJzIiA9IHllcyAmJgorCSAgICAgeyB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiID0gcGFzc19hbGwgfHwKKwkgICAgICAgeyB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJgorCQkgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB9OyB9OyB0aGVuCisJICAgICMgV2Ugb25seSBuZWVkIHRvIHNlYXJjaCBmb3Igc3RhdGljIGxpYnJhcmllcworCSAgICBjb250aW51ZQorCSAgZmkKKwlmaQorCisJbGlua19zdGF0aWM9bm8gIyBXaGV0aGVyIHRoZSBkZXBsaWIgd2lsbCBiZSBsaW5rZWQgc3RhdGljYWxseQorCXVzZV9zdGF0aWNfbGlicz0kcHJlZmVyX3N0YXRpY19saWJzCisJaWYgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBidWlsdCAmJiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgdXNlX3N0YXRpY19saWJzPW5vCisJZmkKKwlpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICB7IHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gbm8gfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCisJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKKwkgICAgICBuZWVkX3JlbGluaz1ubworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubzsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9eWVzCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJICAjIFRoaXMgaXMgYSBzaGFyZWQgbGlicmFyeQorCisJICAjIFdhcm4gYWJvdXQgcG9ydGFiaWxpdHksIGNhbid0IGxpbmsgYWdhaW5zdCAtbW9kdWxlJ3Mgb24gc29tZQorCSAgIyBzeXN0ZW1zIChkYXJ3aW4pLiAgRG9uJ3QgYmxlYXQgYWJvdXQgZGxvcGVuZWQgbW9kdWxlcyB0aG91Z2ghCisJICBkbG9wZW5tb2R1bGU9IiIKKwkgIGZvciBkbHByZW1vZHVsZXRlc3QgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgIGlmIHRlc3QgIlgkZGxwcmVtb2R1bGV0ZXN0IiA9ICJYJGxpYiI7IHRoZW4KKwkgICAgICBkbG9wZW5tb2R1bGU9IiRkbHByZW1vZHVsZXRlc3QiCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgIGRvbmUKKwkgIGlmIHRlc3QgLXogIiRkbG9wZW5tb2R1bGUiICYmIHRlc3QgIiRzaG91bGRub3RsaW5rIiA9IHllcyAmJiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICAgIGVjaG8KKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGVsc2UKKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBmaQorCSAgICAkRUNITyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmaQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJgorCSAgICAgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIjsgdGhlbgorCSAgICAjIGZpZ3VyZSBvdXQgdGhlIHNvbmFtZQorCSAgICBzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKwkgICAgc2hpZnQKKwkgICAgcmVhbG5hbWU9IiQxIgorCSAgICBzaGlmdAorCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkgICAgIyB1c2UgZGxuYW1lIGlmIHdlIGdvdCBpdC4gaXQncyBwZXJmZWN0bHkgZ29vZCwgbm8/CisJICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgc29uYW1lPSIkZGxuYW1lIgorCSAgICBlbGlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgICAgICAjIGJsZWggd2luZG93cworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8IG1pbmd3KiB8ICpjZWdjYyopCisJICAgICAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCQltYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKwkJdmVyc3VmZml4PSItJG1ham9yIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisJICAgIGVsc2UKKwkgICAgICBzb25hbWU9IiRyZWFsbmFtZSIKKwkgICAgZmkKKworCSAgICAjIE1ha2UgYSBuZXcgbmFtZSBmb3IgdGhlIGV4dHJhY3RfZXhwc3ltc19jbWRzIHRvIHVzZQorCSAgICBzb3Jvb3Q9IiRzb25hbWUiCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRzb3Jvb3QiCisJICAgIHNvbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmRsbCcgIiRzb25hbWUiCisJICAgIG5ld2xpYj1saWJpbXAtJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5hCisKKwkgICAgIyBJZiB0aGUgbGlicmFyeSBoYXMgbm8gZXhwb3J0IGxpc3QsIHRoZW4gY3JlYXRlIG9uZSBub3cKKwkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYiOyB0aGVuIDoKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIFxgJHNvbmFtZSciCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRleHRyYWN0X2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCisJICAgIGZpCisKKwkgICAgIyBDcmVhdGUgJG5ld2xpYgorCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbmV3bGliIjsgdGhlbiA6OyBlbHNlCisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIGltcG9ydCBsaWJyYXJ5IGZvciBcYCRzb25hbWUnIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiICdleGl0ICQ/JworCSAgICBmaQorCSAgICAjIG1ha2Ugc3VyZSB0aGUgbGlicmFyeSB2YXJpYWJsZXMgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgbGlicmFyeQorCSAgICBkaXI9JG91dHB1dF9vYmpkaXIKKwkgICAgbGlua2xpYj0kbmV3bGliCisJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKKworCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KKwkgICAgYWRkX3NobGlicGF0aD0KKwkgICAgYWRkX2Rpcj0KKwkgICAgYWRkPQorCSAgICBsaWJfbGlua2VkPXllcworCSAgICBjYXNlICRoYXJkY29kZV9hY3Rpb24gaW4KKwkgICAgaW1tZWRpYXRlIHwgdW5zdXBwb3J0ZWQpCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSBubzsgdGhlbgorCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCisJCWNhc2UgJGhvc3QgaW4KKwkJICAqLSotc2NvMy4ydjUuMC5bMDI0XSopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotc3lzdjQqdXcyKikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1zeXN2NU9wZW5VTklYKiB8ICotKi1zeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgXAorCQkgICAgKi0qLXVuaXh3YXJlNyopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotZGFyd2luKiApCisJCSAgICAjIGlmIHRoZSBsaWIgaXMgYSAobm9uLWRsb3BlbmVkKSBtb2R1bGUgdGhlbiB3ZSBjYW4gbm90CisJCSAgICAjIGxpbmsgYWdhaW5zdCBpdCwgc29tZW9uZSBpcyBpZ25vcmluZyB0aGUgZWFybGllciB3YXJuaW5ncworCQkgICAgaWYgL3Vzci9iaW4vZmlsZSAtTCAkYWRkIDI+IC9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIjogW146XSogYnVuZGxlIiA+L2Rldi9udWxsIDsgdGhlbgorCQkgICAgICBpZiB0ZXN0ICJYJGRsb3Blbm1vZHVsZSIgIT0gIlgkbGliIjsgdGhlbgorCQkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaWIgJGxpbmtsaWIgaXMgYSBtb2R1bGUsIG5vdCBhIHNoYXJlZCBsaWJyYXJ5IgorCQkJaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IiA7IHRoZW4KKwkJCSAgZWNobworCQkJICBlY2hvICIqKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKKwkJCSAgZWNobyAiKioqIFRoZSBsaW5rIHdpbGwgcHJvYmFibHkgZmFpbCwgc29ycnkiCisJCQllbHNlCisJCQkgIGFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCQlmaQorCQkgICAgICBlbGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkJCWFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCSAgICAgIGZpCisJCSAgICBmaQorCQllc2FjCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1zdW5vcyopIGFkZF9zaGxpYnBhdGg9IiRkaXIiIDs7CisJCWVzYWMKKwkJYWRkX2Rpcj0iLUwkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSBubzsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICByZWxpbmspCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXMgJiYKKwkgICAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCisJCWFkZD0iJGRpci8kbGlua2xpYiIKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorCQlhZGRfZGlyPSItTCRhYnNkaXIiCisJCSMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkJICBjYXNlICRsaWJkaXIgaW4KKwkJICAgIFtcXC9dKikKKwkJICAgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICAgIDs7CisJCSAgZXNhYworCQlmaQorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikgbGliX2xpbmtlZD1ubyA7OworCSAgICBlc2FjCisKKwkgICAgaWYgdGVzdCAiJGxpYl9saW5rZWQiICE9IHllczsgdGhlbgorCSAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5zdXBwb3J0ZWQgaGFyZGNvZGUgcHJvcGVydGllcyIKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KKwkgICAgICBjYXNlIDokY29tcGlsZV9zaGxpYnBhdGg6IGluCisJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9zaGxpYnBhdGggIiRhZGRfc2hsaWJwYXRoOiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZF9kaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGQgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJCSoiOiRsaWJkaXI6IiopIDs7CisJCSopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICBmaQorCSAgZmkKKworCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCisJICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KKwkgICAgICBhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorCSAgICAgICoiOiRsaWJkaXI6IiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciIgJiYKKwkJIHRlc3QgLWYgIiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIiA7IHRoZW4KKwkJYWRkPSIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIKKwkgICAgICBlbHNlCisJCWFkZD0iJGxpYmRpci8kbGlua2xpYiIKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KKwkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCisJICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJCWNhc2UgJGxpYmRpciBpbgorCQkgIFtcXC9dKikKKwkJICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGRfZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgZmkKKwkgIGZpCisJZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IG9uZSBvZiBoYXJkY29kZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAorCSAgIyBpcyBub3QgdW5zdXBwb3J0ZWQuICBUaGlzIGlzIHZhbGlkIG9uIGFsbCBrbm93biBzdGF0aWMgYW5kCisJICAjIHNoYXJlZCBwbGF0Zm9ybXMuCisJICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGxpbmtsaWI9IiRvbGRfbGlicmFyeSIKKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGNvbXBpbGVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBmaQorCWVsaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgTm90IGEgc2hhcmVkIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgICAgIyBXZSdyZSB0cnlpbmcgbGluayBhIHNoYXJlZCBsaWJyYXJ5IGFnYWluc3QgYSBzdGF0aWMgb25lCisJICAgICMgYnV0IHRoZSBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0LgorCisJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KKwkgICAgIyB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkuCisJICAgIGVjaG8KKwkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBUaGlzIHN5c3RlbSBjYW4gbm90IGxpbmsgdG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgorCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCSAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUuIgorCSAgICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgorCSAgICAgIGVjaG8gIioqKiBCdXQgYXMgeW91IHRyeSB0byBidWlsZCBhIG1vZHVsZSBsaWJyYXJ5LCBsaWJ0b29sIHdpbGwgc3RpbGwgY3JlYXRlICIKKwkgICAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKwkgICAgICBlY2hvICIqKiogaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZyB0byByZXNvbHZlIHN5bWJvbHMgYXQgcnVudGltZS4iCisJICAgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwkJZWNobworCQllY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkJZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkJZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgorCQllY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICAgIGxpbmtfc3RhdGljPXllcworCSAgZmkKKwlmaSAjIGxpbmsgc2hhcmVkL3N0YXRpYyBsaWJyYXJ5PworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGRlcGVuZGVuY3lfbGlicyIgJiYKKwkgICAgIHsgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8CisJICAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgfHwKKwkgICAgICAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IHllczsgfTsgdGhlbgorCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKwkgICAgdGVtcF9kZXBsaWJzPQorCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkbGliZGlyIGluCisJICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkbGliZGlyIgorCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQkgICBjYXNlICIgJHhycGF0aCAiIGluCisJCSAgICoiICR0ZW1wX3hycGF0aCAiKikgOzsKKwkJICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJHRlbXBfeHJwYXRoIjs7CisJCSAgIGVzYWM7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfZGVwbGlicyAiICRsaWJkaXIiOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF9kZXBsaWJzIgorCSAgZmkKKworCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGFic2RpciIKKwkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQorCSAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IG5vICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAjIC4uLiBhbmQgaXRzIGRlcGVuZGVuY3lfbGlicworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBjYXNlICRkZXBsaWIgaW4KKyAgICAgICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorICAgICAgICAgICAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0Ijs7CisgICAgICAgICAgICAgICopIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIiA7OworICAgICAgICAgICAgZXNhYworCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCAiKikKKyAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICBkb25lCisKKwkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubzsgdGhlbgorCSAgICAjIEFkZCB0aGUgc2VhcmNoIHBhdGhzIG9mIGFsbCBkZXBlbmRlbmN5IGxpYnJhcmllcworCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgcGF0aD0KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAtTCopIHBhdGg9IiRkZXBsaWIiIDs7CisJICAgICAgKi5sYSkKKwkgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorCSAgICAgICAgZGVwbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKwkgICAgICAgIGZ1bmNfZGlybmFtZSAiJGRlcGxpYiIgIiIgIi4iCisJCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwkJY2FzZSAkZGlyIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSIkZGlyIiA7OworCQkqKQorCQkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKwkJICBpZiB0ZXN0IC16ICIkYWJzZGlyIjsgdGhlbgorCQkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciCisJCSAgICBhYnNkaXI9IiRkaXIiCisJCSAgZmkKKwkJICA7OworCQllc2FjCisJCWlmICRHUkVQICJeaW5zdGFsbGVkPW5vIiAkZGVwbGliID4gL2Rldi9udWxsOyB0aGVuCisJCWNhc2UgJGhvc3QgaW4KKwkJKi0qLWRhcndpbiopCisJCSAgZGVwZGVwbD0KKwkJICBldmFsIGRlcGxpYnJhcnlfbmFtZXM9YCR7U0VEfSAtbiAtZSAncy9ebGlicmFyeV9uYW1lcz1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgaWYgdGVzdCAtbiAiJGRlcGxpYnJhcnlfbmFtZXMiIDsgdGhlbgorCQkgICAgZm9yIHRtcCBpbiAkZGVwbGlicmFyeV9uYW1lcyA7IGRvCisJCSAgICAgIGRlcGRlcGw9JHRtcAorCQkgICAgZG9uZQorCQkgICAgaWYgdGVzdCAtZiAiJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIiA7IHRoZW4KKwkJICAgICAgZGVwZGVwbD0iJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIgorCQkgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAke09UT09MfSAtTCAkZGVwZGVwbCB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZGFyd2luX2luc3RhbGxfbmFtZSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTDY0fSAtTCAkZGVwZGVwbCAgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgZmkKKwkJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAke3dsfS1keWxpYl9maWxlICR7d2x9JHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorCQkgICAgICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAtZHlsaWJfZmlsZSAke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisJCSAgICAgIHBhdGg9CisJCSAgICBmaQorCQkgIGZpCisJCSAgOzsKKwkJKikKKwkJICBwYXRoPSItTCRhYnNkaXIvJG9iamRpciIKKwkJICA7OworCQllc2FjCisJCWVsc2UKKwkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCisJCSAgICBmdW5jX3dhcm5pbmcgIlxgJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisKKwkJICBwYXRoPSItTCRhYnNkaXIiCisJCWZpCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAgICAgKiIgJHBhdGggIiopIDs7CisJICAgICAgKikgZGVwbGlicz0iJHBhdGggJGRlcGxpYnMiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaSAjIGxpbmtfYWxsX2RlcGxpYnMgIT0gbm8KKwlmaSAjIGxpbmttb2RlID0gbGliCisgICAgICBkb25lICMgZm9yIGRlcGxpYiBpbiAkbGlicworICAgICAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSAicHJvZyI7IHRoZW4KKwkgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRjb21waWxlX2RlcGxpYnMiCisJICBmaW5hbGl6ZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGZpbmFsaXplX2RlcGxpYnMiCisJZWxzZQorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAiYCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmkKKyAgICAgIGZpCisgICAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KKwkjIExpbmsgdGhlIGRscHJlb3BlbmVkIGxpYnJhcmllcyBiZWZvcmUgb3RoZXIgbGlicmFyaWVzCisJZm9yIGRlcGxpYiBpbiAkc2F2ZV9kZXBsaWJzOyBkbworCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwlkb25lCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHBhc3MiICE9IGRsb3BlbjsgdGhlbgorCWlmIHRlc3QgIiRwYXNzIiAhPSBjb252OyB0aGVuCisJICAjIE1ha2Ugc3VyZSBsaWJfc2VhcmNoX3BhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICBsaWJfc2VhcmNoX3BhdGg9CisJICBmb3IgZGlyIGluICRuZXdsaWJfc2VhcmNoX3BhdGg7IGRvCisJICAgIGNhc2UgIiRsaWJfc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkZGlyICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIiA7OworCSAgICBlc2FjCisJICBkb25lCisJICBuZXdsaWJfc2VhcmNoX3BhdGg9CisJZmkKKworCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgIT0gInByb2csbGluayI7IHRoZW4KKwkgIHZhcnM9ImRlcGxpYnMiCisJZWxzZQorCSAgdmFycz0iY29tcGlsZV9kZXBsaWJzIGZpbmFsaXplX2RlcGxpYnMiCisJZmkKKwlmb3IgdmFyIGluICR2YXJzIGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICMgQWRkIGxpYnJhcmllcyB0byAkdmFyIGluIHJldmVyc2Ugb3JkZXIKKwkgIGV2YWwgdG1wX2xpYnM9XCJcJCR2YXJcIgorCSAgbmV3X2xpYnM9CisJICBmb3IgZGVwbGliIGluICR0bXBfbGliczsgZG8KKwkgICAgIyBGSVhNRTogUGVkYW50aWNhbGx5LCB0aGlzIGlzIHRoZSByaWdodCB0aGluZyB0byBkbywgc28KKwkgICAgIyAgICAgICAgdGhhdCBzb21lIG5hc3R5IGRlcGVuZGVuY3kgbG9vcCBpc24ndCBhY2NpZGVudGFsbHkKKwkgICAgIyAgICAgICAgYnJva2VuOgorCSAgICAjbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIgorCSAgICAjIFByYWdtYXRpY2FsbHksIHRoaXMgc2VlbXMgdG8gY2F1c2UgdmVyeSBmZXcgcHJvYmxlbXMgaW4KKwkgICAgIyBwcmFjdGljZToKKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCSAgICAtUiopIDs7CisJICAgICopCisJICAgICAgIyBBbmQgaGVyZSBpcyB0aGUgcmVhc29uOiB3aGVuIGEgbGlicmFyeSBhcHBlYXJzIG1vcmUKKwkgICAgICAjIHRoYW4gb25jZSBhcyBhbiBleHBsaWNpdCBkZXBlbmRlbmNlIG9mIGEgbGlicmFyeSwgb3IKKwkgICAgICAjIGlzIGltcGxpY2l0bHkgbGlua2VkIGluIG1vcmUgdGhhbiBvbmNlIGJ5IHRoZQorCSAgICAgICMgY29tcGlsZXIsIGl0IGlzIGNvbnNpZGVyZWQgc3BlY2lhbCwgYW5kIG11bHRpcGxlCisJICAgICAgIyBvY2N1cnJlbmNlcyB0aGVyZW9mIGFyZSBub3QgcmVtb3ZlZC4gIENvbXBhcmUgdGhpcworCSAgICAgICMgd2l0aCBoYXZpbmcgdGhlIHNhbWUgbGlicmFyeSBiZWluZyBsaXN0ZWQgYXMgYQorCSAgICAgICMgZGVwZW5kZW5jeSBvZiBtdWx0aXBsZSBvdGhlciBsaWJyYXJpZXM6IGluIHRoaXMgY2FzZSwKKwkgICAgICAjIHdlIGtub3cgKHBlZGFudGljYWxseSwgd2UgYXNzdW1lKSB0aGUgbGlicmFyeSBkb2VzIG5vdAorCSAgICAgICMgbmVlZCB0byBiZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UsIHNvIHdlIGtlZXAgb25seSB0aGUKKwkgICAgICAjIGxhc3QgY29weS4gIFRoaXMgaXMgbm90IGFsd2F5cyByaWdodCwgYnV0IGl0IGlzIHJhcmUKKwkgICAgICAjIGVub3VnaCB0aGF0IHdlIHJlcXVpcmUgdXNlcnMgdGhhdCByZWFsbHkgbWVhbiB0byBwbGF5CisJICAgICAgIyBzdWNoIHVucG9ydGFibGUgbGlua2luZyB0cmlja3MgdG8gbGluayB0aGUgbGlicmFyeQorCSAgICAgICMgdXNpbmcgLVdsLC1sbmFtZSwgc28gdGhhdCBsaWJ0b29sIGRvZXMgbm90IGNvbnNpZGVyIGl0CisJICAgICAgIyBmb3IgZHVwbGljYXRlIHJlbW92YWwuCisJICAgICAgY2FzZSAiICRzcGVjaWFsZGVwbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCSAgICAgICopCisJCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCQkqIiAkZGVwbGliICIqKSA7OworCQkqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJCWVzYWMKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRuZXdfbGliczsgZG8KKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikKKwkgICAgICBjYXNlICIgJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJICBldmFsICR2YXI9XCIkdG1wX2xpYnNcIgorCWRvbmUgIyBmb3IgdmFyCisgICAgICBmaQorICAgICAgIyBMYXN0IHN0ZXA6IHJlbW92ZSBydW50aW1lIGxpYnMgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKyAgICAgICMgKHRoZXkgc3RheSBpbiBkZXBsaWJzKQorICAgICAgdG1wX2xpYnM9CisgICAgICBmb3IgaSBpbiAkZGVwZW5kZW5jeV9saWJzIDsgZG8KKwljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggIiBpbgorCSoiICRpICIqKQorCSAgaT0iIgorCSAgOzsKKwllc2FjCisJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorCSAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkaSIKKwlmaQorICAgICAgZG9uZQorICAgICAgZGVwZW5kZW5jeV9saWJzPSR0bXBfbGlicworICAgIGRvbmUgIyBmb3IgcGFzcworICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisgICAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKyAgICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorICAgIGZpCisKKyAgICBjYXNlICRsaW5rbW9kZSBpbgorICAgIG9sZGxpYikKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorICAgICAgZmkKKworICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgorICAgICAgKlwgLWwqIHwgKlwgLUwqKQorCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBhcmNoaXZlcyIgOzsKKyAgICAgIGVzYWMKKworICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtZXhwb3J0LXN5bWJvbHMnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KKyAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgb2xkbGlicz0iJG91dHB1dCIKKyAgICAgIGZ1bmNfYXBwZW5kIG9ianMgIiRvbGRfZGVwbGlicyIKKyAgICAgIDs7CisKKyAgICBsaWIpCisgICAgICAjIE1ha2Ugc3VyZSB3ZSBvbmx5IGdlbmVyYXRlIGxpYnJhcmllcyBvZiB0aGUgZm9ybSBgbGliTkFNRS5sYScuCisgICAgICBjYXNlICRvdXRwdXRuYW1lIGluCisgICAgICBsaWIqKQorCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkb3V0cHV0bmFtZSIKKwluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCWV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgorCTs7CisgICAgICAqKQorCXRlc3QgIiRtb2R1bGUiID0gbm8gJiYgXAorCSAgZnVuY19mYXRhbF9oZWxwICJsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBtdXN0IGJlZ2luIHdpdGggXGBsaWInIgorCisJaWYgdGVzdCAiJG5lZWRfbGliX3ByZWZpeCIgIT0gbm87IHRoZW4KKwkgICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXMgaWYgcmVxdWlyZWQKKwkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKKwkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwkgIGV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgorCWVsc2UKKwkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKKwkgIGxpYm5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWZpCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgaWYgdGVzdCAtbiAiJG9ianMiOyB0aGVuCisJaWYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0aGlzIGhvc3Q6JG9ianMiCisJZWxzZQorCSAgZWNobworCSAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgorCSAgJEVDSE8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJG9ianMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgIHRlc3QgIiRkbHNlbGYiICE9IG5vICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbiBzZWxmJyBpcyBpZ25vcmVkIGZvciBsaWJ0b29sIGxpYnJhcmllcyIKKworICAgICAgc2V0IGR1bW15ICRycGF0aAorICAgICAgc2hpZnQKKyAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCisJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKworICAgICAgaW5zdGFsbF9saWJkaXI9IiQxIgorCisgICAgICBvbGRsaWJzPQorICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgorCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJICAjIEJ1aWxkaW5nIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCSAgIyBTb21lIGNvbXBpbGVycyBoYXZlIHByb2JsZW1zIHdpdGggYSBgLmFsJyBleHRlbnNpb24gc28KKwkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGV4dGVuc2lvbiBhbgorCSAgIyBhcmNoaXZlIG5vcm1hbGx5IHdvdWxkLgorCSAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCAkb2xkbGlicyIKKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1jb252ZW5pZW5jZQorCSAgYnVpbGRfb2xkX2xpYnM9eWVzCisJZmkKKworCXRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCSAgZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCisKKwl0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCSAgZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCisgICAgICBlbHNlCisKKwkjIFBhcnNlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFyZ3VtZW50LgorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSc6JworCXNldCBkdW1teSAkdmluZm8gMCAwIDAKKwlzaGlmdAorCUlGUz0iJHNhdmVfaWZzIgorCisJdGVzdCAtbiAiJDciICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAidG9vIG1hbnkgcGFyYW1ldGVycyB0byBcYC12ZXJzaW9uLWluZm8nIgorCisJIyBjb252ZXJ0IGFic29sdXRlIHZlcnNpb24gbnVtYmVycyB0byBsaWJ0b29sIGFnZXMKKwkjIHRoaXMgcmV0YWlucyBjb21wYXRpYmlsaXR5IHdpdGggLmxhIGZpbGVzIGFuZCBhdHRlbXB0cworCSMgdG8gbWFrZSB0aGUgY29kZSBiZWxvdyBhIGJpdCBtb3JlIGNvbXByZWhlbnNpYmxlCisKKwljYXNlICR2aW5mb19udW1iZXIgaW4KKwl5ZXMpCisJICBudW1iZXJfbWFqb3I9IiQxIgorCSAgbnVtYmVyX21pbm9yPSIkMiIKKwkgIG51bWJlcl9yZXZpc2lvbj0iJDMiCisJICAjCisJICAjIFRoZXJlIGFyZSByZWFsbHkgb25seSB0d28ga2luZHMgLS0gdGhvc2UgdGhhdAorCSAgIyB1c2UgdGhlIGN1cnJlbnQgcmV2aXNpb24gYXMgdGhlIG1ham9yIHZlcnNpb24KKwkgICMgYW5kIHRob3NlIHRoYXQgc3VidHJhY3QgYWdlIGFuZCB1c2UgYWdlIGFzCisJICAjIGEgbWlub3IgdmVyc2lvbi4gIEJ1dCwgdGhlbiB0aGVyZSBpcyBpcml4CisJICAjIHdoaWNoIGhhcyBhbiBleHRyYSAxIGFkZGVkIGp1c3QgZm9yIGZ1bgorCSAgIworCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICAjIGNvcnJlY3QgbGludXggdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwkgIGRhcndpbnxsaW51eHxvc2Z8d2luZG93c3xub25lKQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfcmV2aXNpb24iCisJICAgIDs7CisJICBmcmVlYnNkLWFvdXR8ZnJlZWJzZC1lbGZ8cW54fHN1bm9zKQorCSAgICBjdXJyZW50PSIkbnVtYmVyX21ham9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKKwkgICAgYWdlPSIwIgorCSAgICA7OworCSAgaXJpeHxub25zdG9wdXgpCisJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKKwkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKKwkgICAgbHRfaXJpeF9pbmNyZW1lbnQ9bm8KKwkgICAgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiJG1vZGVuYW1lOiB1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciCisJICAgIDs7CisJICBlc2FjCisJICA7OworCW5vKQorCSAgY3VycmVudD0iJDEiCisJICByZXZpc2lvbj0iJDIiCisJICBhZ2U9IiQzIgorCSAgOzsKKwllc2FjCisKKwkjIENoZWNrIHRoYXQgZWFjaCBvZiB0aGUgdGhpbmdzIGFyZSB2YWxpZCBudW1iZXJzLgorCWNhc2UgJGN1cnJlbnQgaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgXGAkY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJHJldmlzaW9uIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJSRVZJU0lPTiBcYCRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJGFnZSBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciBcYCRjdXJyZW50JyIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwlmaQorCisJIyBDYWxjdWxhdGUgdGhlIHZlcnNpb24gdmFyaWFibGVzLgorCW1ham9yPQorCXZlcnN1ZmZpeD0KKwl2ZXJzdHJpbmc9CisJY2FzZSAkdmVyc2lvbl90eXBlIGluCisJbm9uZSkgOzsKKworCWRhcndpbikKKwkgICMgTGlrZSBMaW51eCwgYnV0IHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBhdmFpbGFibGUgaW4KKwkgICMgdmVyc3RyaW5nIGZvciBjb2RpbmcgaXQgaW50byB0aGUgbGlicmFyeSBoZWFkZXIKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgICMgRGFyd2luIGxkIGRvZXNuJ3QgbGlrZSAwIGZvciB0aGVzZSBvcHRpb25zLi4uCisJICBmdW5jX2FyaXRoICRjdXJyZW50ICsgMQorCSAgbWlub3JfY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHhsY3ZlcnN0cmluZz0iJHt3bH0tY29tcGF0aWJpbGl0eV92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQgJHt3bH0tY3VycmVudF92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgOzsKKworCWZyZWVic2QtYW91dCkKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kcmV2aXNpb24iOworCSAgOzsKKworCWZyZWVic2QtZWxmKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCWlyaXggfCBub25zdG9wdXgpCisJICBpZiB0ZXN0ICJYJGx0X2lyaXhfaW5jcmVtZW50IiA9ICJYbm8iOyB0aGVuCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBlbHNlCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlICsgMQorCSAgZmkKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OworCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CisJICBlc2FjCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JHJldmlzaW9uCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJHJldmlzaW9uIC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJGlmYWNlOiR2ZXJzdHJpbmciCisJICBkb25lCisKKwkgICMgQmVmb3JlIHRoaXMgcG9pbnQsICRtYWpvciBtdXN0IG5vdCBjb250YWluIGAuJy4KKwkgIG1ham9yPS4kbWFqb3IKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlsaW51eCkgIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCisJICA7OworCisJb3NmKQorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSIkY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JGFnZQorCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbworCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2lmYWNlfS4wIgorCSAgZG9uZQorCisJICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCisJICBmdW5jX2FwcGVuZCB2ZXJzdHJpbmcgIjoke2N1cnJlbnR9LjAiCisJICA7OworCisJcW54KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCXN1bm9zKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiIKKwkgIDs7CisKKwl3aW5kb3dzKQorCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQorCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlc3lzdGVtcy4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKKwkgIDs7CisKKwkqKQorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciCisJICA7OworCWVzYWMKKworCSMgQ2xlYXIgdGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBhIHJlbGVhc2UuCisJaWYgdGVzdCAteiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkgIG1ham9yPQorCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICBkYXJ3aW4pCisJICAgICMgd2UgY2FuJ3QgY2hlY2sgZm9yICIwLjAiIGluIGFyY2hpdmVfY21kcyBkdWUgdG8gcXVvdGluZworCSAgICAjIHByb2JsZW1zLCBzbyB3ZSByZXNldCBpdCBjb21wbGV0ZWx5CisJICAgIHZlcnN0cmluZz0KKwkgICAgOzsKKwkgICopCisJICAgIHZlcnN0cmluZz0iMC4wIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgICB2ZXJzdWZmaXg9CisJICBlbHNlCisJICAgIHZlcnN1ZmZpeD0iLjAuMCIKKwkgIGZpCisJZmkKKworCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAorCWlmIHRlc3QgIiRhdm9pZF92ZXJzaW9uIiA9IHllcyAmJiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICBtYWpvcj0KKwkgIHZlcnN1ZmZpeD0KKwkgIHZlcnN0cmluZz0iIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCisJaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWRfZmxhZyIgPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXMiCisJICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBidWlsZF9vbGRfbGlicz15ZXMKKwkgIGZpCisJZWxzZQorCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkbm9fdW5kZWZpbmVkX2ZsYWciCisJZmkKKworICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCisgICAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVvYmoiCisgICAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCisgICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluazsgdGhlbgorCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5CisJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCisJcmVtb3ZlbGlzdD0KKwl0ZW1wcmVtb3ZlbGlzdD1gJEVDSE8gIiRvdXRwdXRfb2JqZGlyLyoiYAorCWZvciBwIGluICR0ZW1wcmVtb3ZlbGlzdDsgZG8KKwkgIGNhc2UgJHAgaW4KKwkgICAgKi4kb2JqZXh0IHwgKi5nY25vKQorCSAgICAgICA7OworCSAgICAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogfCAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9JHtyZWxlYXNlfS4qKQorCSAgICAgICBpZiB0ZXN0ICJYJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiAhPSAiWCI7IHRoZW4KKwkJIGlmICRFQ0hPICIkcCIgfCAkRUdSRVAgLWUgIiRwcmVjaW91c19maWxlc19yZWdleCIgPi9kZXYvbnVsbCAyPiYxCisJCSB0aGVuCisJCSAgIGNvbnRpbnVlCisJCSBmaQorCSAgICAgICBmaQorCSAgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJHAiCisJICAgICAgIDs7CisJICAgICopIDs7CisJICBlc2FjCisJZG9uZQorCXRlc3QgLW4gIiRyZW1vdmVsaXN0IiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KKwlmdW5jX2FwcGVuZCBvbGRsaWJzICIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKworCSMgVHJhbnNmb3JtIC5sbyBmaWxlcyB0byAubyBmaWxlcy4KKwlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7ICRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgICMgRWxpbWluYXRlIGFsbCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuCisgICAgICAjZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKyAgICAgICMJbGliX3NlYXJjaF9wYXRoPWAkRUNITyAiJGxpYl9zZWFyY2hfcGF0aCAiIHwgJFNFRCAicyUgJHBhdGggJSAlZyJgCisgICAgICAjCWRlcGxpYnM9YCRFQ0hPICIkZGVwbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICMJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiJGRlcGVuZGVuY3lfbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICNkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCXRlbXBfeHJwYXRoPQorCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorCSAgZnVuY19hcHBlbmQgdGVtcF94cnBhdGggIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRkZXBlbmRlbmN5X2xpYnMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIGRsZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMgdGhhdCB3b24ndCBiZSBkbHByZW9wZW5lZAorICAgICAgb2xkX2RsZmlsZXM9IiRkbGZpbGVzIgorICAgICAgZGxmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbworCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgICMgTWFrZSBzdXJlIGRscHJlZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMKKyAgICAgIG9sZF9kbHByZWZpbGVzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGRscHJlZmlsZXM9CisgICAgICBmb3IgbGliIGluICRvbGRfZGxwcmVmaWxlczsgZG8KKwljYXNlICIkZGxwcmVmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCisJICAgICMgdGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgYyBsaWJyYXJ5IChhcyBzdWNoKSEKKwkgICAgOzsKKwkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKKwkgICAgOzsKKwkgICotKi1uZXRic2QqKQorCSAgICAjIERvbid0IGxpbmsgd2l0aCBsaWJjIHVudGlsIHRoZSBhLm91dCBsZC5zbyBpcyBmaXhlZC4KKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgOzsKKwkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKKwkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCisJICAgIDs7CisJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKwkgICAgOzsKKwkgICopCisJICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCisJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCWZpCisKKwkjIFRyYW5zZm9ybSBkZXBsaWJzIGludG8gb25seSBkZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBzaGFyZWQuCisJbmFtZV9zYXZlPSRuYW1lCisJbGlibmFtZV9zYXZlPSRsaWJuYW1lCisJcmVsZWFzZV9zYXZlPSRyZWxlYXNlCisJdmVyc3VmZml4X3NhdmU9JHZlcnN1ZmZpeAorCW1ham9yX3NhdmU9JG1ham9yCisJIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKKwkjIHJlbGVhc2Ugc2hvdWxkIHNob3cgdXAgaW4gdGhlIC1sIChpZSAtbGdtcDUpIHNvIHdlIGRvbid0IHdhbnQgdG8KKwkjIGFkZCBpdCBpbiB0d2ljZS4gIElzIHRoYXQgY29ycmVjdD8KKwlyZWxlYXNlPSIiCisJdmVyc3VmZml4PSIiCisJbWFqb3I9IiIKKwluZXdkZXBsaWJzPQorCWRyb3BwZWRkZXBzPW5vCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwlwYXNzX2FsbCkKKwkgICMgRG9uJ3QgY2hlY2sgZm9yIHNoYXJlZC9zdGF0aWMuICBFdmVyeXRoaW5nIHdvcmtzLgorCSAgIyBUaGlzIG1pZ2h0IGJlIGEgbGl0dGxlIG5haXZlLiAgV2UgbWlnaHQgd2FudCB0byBjaGVjaworCSAgIyB3aGV0aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3QuICBCdXQgdGhpcyBpcyBvbgorCSAgIyBvc2YzICYgb3NmNCBhbmQgSSdtIG5vdCByZWFsbHkgc3VyZS4uLiBKdXN0CisJICAjIGltcGxlbWVudGluZyB3aGF0IHdhcyBhbHJlYWR5IHRoZSBiZWhhdmlvci4KKwkgIG5ld2RlcGxpYnM9JGRlcGxpYnMKKwkgIDs7CisJdGVzdF9jb21waWxlKQorCSAgIyBUaGlzIGNvZGUgc3RyZXNzZXMgdGhlICJsaWJyYXJpZXMgYXJlIHByb2dyYW1zIiBwYXJhZGlnbSB0byBpdHMKKwkgICMgbGltaXRzLiBNYXliZSBldmVuIGJyZWFrcyBpdC4gIFdlIGNvbXBpbGUgYSBwcm9ncmFtLCBsaW5raW5nIGl0CisJICAjIGFnYWluc3QgdGhlIGRlcGxpYnMgYXMgYSBwcm94eSBmb3IgdGhlIGxpYnJhcnkuICBUaGVuIHdlIGNhbiBjaGVjaworCSAgIyB3aGV0aGVyIHRoZXkgbGlua2VkIGluIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBsZGQuCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0LmMKKwkgIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKwkgIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQorRU9GCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CisJICBpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGliczsgdGhlbgorCSAgICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCWlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJICAqIiAkaSAiKikKKwkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKwkJICAgIGk9IiIKKwkJICAgIDs7CisJCSAgZXNhYworCQlmaQorCQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgZGVwbGliX21hdGNoPSQxCisJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgIGVsc2UKKwkJICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgZWNobworCQkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCisJCSAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCisJCSAgICBlY2hvICIqKiogaXRzIGR5bmFtaWMgZGVwZW5kZW5jeSBsaXN0IHRoYXQgcHJvZ3JhbXMgZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBlbHNlCisJICAgICMgRXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpcnN0IGNvbXBpbGUuICBMZXQncyB0cnkgdG8gc2FsdmFnZQorCSAgICAjIHRoZSBzaXR1YXRpb246IENvbXBpbGUgYSBzZXBhcmF0ZSBwcm9ncmFtIGZvciBlYWNoIGxpYnJhcnkuCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCSRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkJaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGk7IHRoZW4KKwkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgICAqIiAkaSAiKikKKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgICAgICBpPSIiCisJCSAgICAgIDs7CisJCSAgICBlc2FjCisJCSAgZmkKKwkJICBpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgICBkZXBsaWJfbWF0Y2g9JDEKKwkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgICAgZWxzZQorCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKKwkJICAgICAgZWNobworCQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJICAgICAgZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCisJCSAgICAgIGVjaG8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICAgIGZpCisJCSAgZmkKKwkJZWxzZQorCQkgIGRyb3BwZWRkZXBzPXllcworCQkgIGVjaG8KKwkJICAkRUNITyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgorCQkgIGVjaG8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKKwkJICBlY2hvICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgorCQkgIGVjaG8gIioqKiBmdW5jdGlvbmFsLiAgSW5zdGFsbGluZyBpdCBiZWZvcmUgY29udGludWluZyB3b3VsZCBiZSBldmVuIGJldHRlci4iCisJCWZpCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZmkKKwkgIDs7CisJZmlsZV9tYWdpYyopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY19nbG9iIjsgdGhlbgorCQkgIGxpYm5hbWVnbG9iPWBmdW5jX2VjaG9fYWxsICIkbGlibmFtZSIgfCAkU0VEIC1lICRmaWxlX21hZ2ljX2dsb2JgCisJCWVsc2UKKwkJICBsaWJuYW1lZ2xvYj0kbGlibmFtZQorCQlmaQorCQl0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllcyAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBpZiB0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllczsgdGhlbgorCQkgICAgc2hvcHQgLXMgbm9jYXNlZ2xvYgorCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAorCQkgICAgJG5vY2FzZWdsb2IKKwkJICBlbHNlCisJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCisJCSAgZmkKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCisJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KKwkJCWNvbnRpbnVlCisJCSAgICAgIGZpCisJCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgorCQkgICAgICAjIGVuZGxlc3MgbG9vcCBiZWxvdywgaW4gY2FzZSBvZiBjeWNsaWMgbGlua3MuCisJCSAgICAgICMgV2UgbWlnaHQgc3RpbGwgZW50ZXIgYW4gZW5kbGVzcyBsb29wLCBzaW5jZSBhIGxpbmsKKwkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAorCQkgICAgICAjIGJ1dCBzbyB3aGF0PworCQkgICAgICBwb3RsaWI9IiRwb3RlbnRfbGliIgorCQkgICAgICB3aGlsZSB0ZXN0IC1oICIkcG90bGliIiAyPi9kZXYvbnVsbDsgZG8KKwkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJHtTRUR9ICdzLy4qIC0+IC8vJ2AKKwkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KKwkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSIkcG90bGlibGluayI7OworCQkJKikgcG90bGliPWAkRUNITyAiJHBvdGxpYiIgfCAkU0VEICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKwkJCWVzYWMKKwkJICAgICAgZG9uZQorCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAorCQkJICRTRUQgLWUgMTBxIHwKKwkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkJCWFfZGVwbGliPSIiCisJCQlicmVhayAyCisJCSAgICAgIGZpCisJCSAgZG9uZQorCQlkb25lCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisJICA7OworCW1hdGNoX3BhdHRlcm4qKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJCSAgYV9kZXBsaWI9IiIKKwkJICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKKwkJICAgIGlmIGV2YWwgIlwkRUNITyBcIiRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgfCBcCisJCSAgICAgICAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCQkgICAgICBhX2RlcGxpYj0iIgorCQkgICAgICBicmVhayAyCisJCSAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIHJlZ2V4IHBhdHRlcm4gdGVzdCkiCisJCWVsc2UKKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKwkJICAkRUNITyAiKioqIHVzaW5nIGEgcmVnZXggcGF0dGVybi4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCWZpCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorCSAgOzsKKwlub25lIHwgdW5rbm93biB8ICopCisJICBuZXdkZXBsaWJzPSIiCisJICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzLyAtbGMkLy87IHMvIC1bTFJdW14gXSovL2cnYAorCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICBmb3IgaSBpbiAkcHJlZGVwcyAkcG9zdGRlcHMgOyBkbworCSAgICAgICMgY2FuJ3QgdXNlIFhzZWQgYmVsb3csIGJlY2F1c2UgJGkgbWlnaHQgY29udGFpbiAnLycKKwkgICAgICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkdG1wX2RlcGxpYnMiIHwgJFNFRCAicywkaSwsImAKKwkgICAgZG9uZQorCSAgZmkKKwkgIGNhc2UgJHRtcF9kZXBsaWJzIGluCisJICAqWyFcCVwgXSopCisJICAgIGVjaG8KKwkgICAgaWYgdGVzdCAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSAiWG5vbmUiOyB0aGVuCisJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcGxhdGZvcm0uIgorCSAgICBlbHNlCisJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKKwkgICAgZmkKKwkgICAgZWNobyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCisJICAgIGRyb3BwZWRkZXBzPXllcworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJdmVyc3VmZml4PSR2ZXJzdWZmaXhfc2F2ZQorCW1ham9yPSRtYWpvcl9zYXZlCisJcmVsZWFzZT0kcmVsZWFzZV9zYXZlCisJbGlibmFtZT0kbGlibmFtZV9zYXZlCisJbmFtZT0kbmFtZV9zYXZlCisKKwljYXNlICRob3N0IGluCisJKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgd2l0aCB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgbmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3ZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRkcm9wcGVkZGVwcyIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgIGVjaG8KKwkgICAgZWNobyAiKioqIFdhcm5pbmc6IGxpYnRvb2wgY291bGQgbm90IHNhdGlzZnkgYWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkiCisJICAgICRFQ0hPICIqKiogZGVwZW5kZW5jaWVzIG9mIG1vZHVsZSAkbGlibmFtZS4gIFRoZXJlZm9yZSwgbGlidG9vbCB3aWxsIGNyZWF0ZSIKKwkgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCisJICAgIGVjaG8gIioqKiBhcHBsaWNhdGlvbiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnLiIKKwkgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJICAgICAgZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkgICAgICBlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJICAgICAgZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCSAgICAgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCSAgICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgICBlbHNlCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGZpCisJICBlbHNlCisJICAgIGVjaG8gIioqKiBUaGUgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBoZXJlIHdpbGwgYmUiCisJICAgIGVjaG8gIioqKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCB0aGlzIGxpYnJhcnkiCisJICAgIGVjaG8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKKworCSAgICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IG5vOyB0aGVuCisJICAgICAgZWNobworCSAgICAgIGVjaG8gIioqKiBTaW5jZSB0aGlzIGxpYnJhcnkgbXVzdCBub3QgY29udGFpbiB1bmRlZmluZWQgc3ltYm9scywiCisJICAgICAgZWNobyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCisJICAgICAgZWNobyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgorCSAgICAgIGVjaG8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVhdGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBpdC4iCisJICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJCW9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkJYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgICAgZWxzZQorCQlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgICBmaQorCSAgICBmaQorCSAgZmkKKwlmaQorCSMgRG9uZSBjaGVja2luZyBkZXBsaWJzIQorCWRlcGxpYnM9JG5ld2RlcGxpYnMKKyAgICAgIGZpCisgICAgICAjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisgICAgICBjYXNlICRob3N0IGluCisJKi0qLWRhcndpbiopCisJICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIGRlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKKyAgICAgIG5ld19saWJzPQorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwljYXNlICIgJG5ld19saWJzICIgaW4KKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisJKikKKwkgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworCWNhc2UgJGRlcGxpYiBpbgorCS1MKikKKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKwkgIGVzYWMKKwkgIDs7CisJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGRlcGxpYnM9IiRuZXdfbGlicyIKKworICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgorICAgICAgbGlicmFyeV9uYW1lcz0KKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgZGxuYW1lPQorCisgICAgICAjIFRlc3QgYWdhaW4sIHdlIG1heSBoYXZlIGRlY2lkZWQgbm90IHRvIGJ1aWxkIGl0IGFueSBtb3JlCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSMgUmVtb3ZlICR7d2x9IGluc3RhbmNlcyB3aGVuIGxpbmtpbmcgd2l0aCBsZC4KKwkjIEZJWE1FOiBzaG91bGQgdGVzdCB0aGUgcmlnaHQgX2NtZHMgdmFyaWFibGUuCisJY2FzZSAkYXJjaGl2ZV9jbWRzIGluCisJICAqXCRMRFwgKikgd2w9IDs7CisgICAgICAgIGVzYWMKKwlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgorCSAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworCSAgaGFyZGNvZGVfbGliZGlycz0KKwkgIGRlcF9ycGF0aD0KKwkgIHJwYXRoPSIkZmluYWxpemVfcnBhdGgiCisJICB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCQllbHNlCisJCSAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCQkgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJCSAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQkgICAgOzsKKwkJICAqKQorCQkgICAgZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJICAgICAgZWxzZQorCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJCWZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorCSAgICAgIGZpCisJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGRvbmUKKwkgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgICAgIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICBsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCSAgICBldmFsICJkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICAgIHJwYXRoPQorCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKwkgICAgZG9uZQorCSAgICBldmFsICIkcnVucGF0aF92YXI9JyRycGF0aFwkJHJ1bnBhdGhfdmFyJzsgZXhwb3J0ICRydW5wYXRoX3ZhciIKKwkgIGZpCisJICB0ZXN0IC1uICIkZGVwX3JwYXRoIiAmJiBkZXBsaWJzPSIkZGVwX3JwYXRoICRkZXBsaWJzIgorCWZpCisKKwlzaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgiCisJdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCisJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisJZmkKKworCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgorCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJc2hpZnQKKwlyZWFsbmFtZT0iJDEiCisJc2hpZnQKKworCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwllbHNlCisJICBzb25hbWU9IiRyZWFsbmFtZSIKKwlmaQorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICBkbG5hbWU9JHNvbmFtZQorCWZpCisKKwlsaWI9IiRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZSIKKwlsaW5rbmFtZXM9CisJZm9yIGxpbmsKKwlkbworCSAgZnVuY19hcHBlbmQgbGlua25hbWVzICIgJGxpbmsiCisJZG9uZQorCisJIyBVc2Ugc3RhbmRhcmQgb2JqZWN0cyBpZiB0aGV5IGFyZSBwaWMKKwl0ZXN0IC16ICIkcGljX2ZsYWciICYmIGxpYm9ianM9YCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKworCWRlbGZpbGVzPQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMiCisJZmkKKworCW9yaWdfZXhwb3J0X3N5bWJvbHM9CisJY2FzZSAkaG9zdF9vcyBpbgorCWN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgIyBleHBvcnRpbmcgdXNpbmcgdXNlciBzdXBwbGllZCBzeW1maWxlCisJICAgIGlmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiAhPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgICMgYW5kIGl0J3MgTk9UIGFscmVhZHkgYSAuZGVmIGZpbGUuIE11c3QgZmlndXJlIG91dAorCSAgICAgICMgd2hpY2ggb2YgdGhlIGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9scyBhbmQgdGFnCisJICAgICAgIyB0aGVtIGFzIHN1Y2guIFNvLCB0cmlnZ2VyIHVzZSBvZiBleHBvcnRfc3ltYm9sc19jbWRzLgorCSAgICAgICMgZXhwb3J0X3N5bWJvbHMgZ2V0cyByZWFzc2lnbmVkIGluc2lkZSB0aGUgInByZXBhcmUKKwkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMiIGlmIHN0YXRlbWVudCwgc28gdGhlCisJICAgICAgIyBpbmNsdWRlX2V4cHN5bXMgbG9naWMgc3RpbGwgd29ya3MuCisJICAgICAgb3JpZ19leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPQorCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwkgICAgZmkKKwkgIGZpCisJICA7OworCWVzYWMKKworCSMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgaWYgdGVzdCAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgPSB5ZXMgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCisJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICBmb3IgY21kMSBpbiAkY21kczsgZG8KKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICAjIFRha2UgdGhlIG5vcm1hbCBicmFuY2ggaWYgdGhlIG5tX2ZpbGVfbGlzdF9zcGVjIGJyYW5jaAorCSAgICAgICMgZG9lc24ndCB3b3JrIG9yIGlmIHRvb2wgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkLgorCSAgICAgIGNhc2UgJG5tX2ZpbGVfbGlzdF9zcGVjfiR0b190b29sX2ZpbGVfY21kIGluCisJCSp+ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCB8ICp+ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgfCB+KikKKwkJICB0cnlfbm9ybWFsX2JyYW5jaD15ZXMKKwkJICBldmFsIGNtZD1cIiRjbWQxXCIKKwkJICBmdW5jX2xlbiAiICRjbWQiCisJCSAgbGVuPSRmdW5jX2xlbl9yZXN1bHQKKwkJICA7OworCQkqKQorCQkgIHRyeV9ub3JtYWxfYnJhbmNoPW5vCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgICAgaWYgdGVzdCAiJHRyeV9ub3JtYWxfYnJhbmNoIiA9IHllcyBcCisJCSAmJiB7IHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiBcCisJCSAgICAgIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB9CisJICAgICAgdGhlbgorCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisJICAgICAgZWxpZiB0ZXN0IC1uICIkbm1fZmlsZV9saXN0X3NwZWMiOyB0aGVuCisJCWZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisJCW91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkJc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJCXNhdmVfb3V0cHV0PSRvdXRwdXQKKwkJb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lm5tCisJCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCQlsaWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwkJZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCQlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICROTSBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCisJCWZvciBvYmogaW4gJHNhdmVfbGlib2JqczsgZG8KKwkJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkJICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKwkJZG9uZSA+ICIkb3V0cHV0IgorCQlldmFsIGNtZD1cIiRjbWQxXCIKKwkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JworCQlvdXRwdXQ9JHNhdmVfb3V0cHV0CisJCWxpYm9ianM9JHNhdmVfbGlib2JqcworCQlza2lwcGVkX2V4cG9ydD1mYWxzZQorCSAgICAgIGVsc2UKKwkJIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGV4ZWN1dGUgaW4gb25lIHN0ZXAuCisJCWZ1bmNfdmVyYm9zZSAidXNpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZSBmb3IgZXhwb3J0IGxpc3QuLi4iCisJCXNraXBwZWRfZXhwb3J0PToKKwkJIyBCcmVhayBvdXQgZWFybHksIG90aGVyd2lzZSBza2lwcGVkX2V4cG9ydCBtYXkgYmUKKwkJIyBzZXQgdG8gZmFsc2UgYnkgYSBsYXRlciBidXQgc2hvcnRlciBjbWQuCisJCWJyZWFrCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGZpCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisJZmkKKworCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKwkgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKKwkgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisJICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCisJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisJZmkKKworCXRtcF9kZXBsaWJzPQorCWZvciB0ZXN0X2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgIGNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgorCSAgKiIgJHRlc3RfZGVwbGliICIqKSA7OworCSAgKikKKwkgICAgZnVuY19hcHBlbmQgdG1wX2RlcGxpYnMgIiAkdGVzdF9kZXBsaWIiCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKKworCWlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgJiYKKwkgICAgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXMgJiYKKwkgICAgdGVzdCAteiAiJGxpYm9ianMiOyB0aGVuCisJICAgICMgZXh0cmFjdCB0aGUgYXJjaGl2ZXMsIHNvIHdlIGhhdmUgb2JqZWN0cyB0byBsaXN0LgorCSAgICAjIFRPRE86IGNvdWxkIG9wdGltaXplIHRoaXMgdG8ganVzdCBleHRyYWN0IG9uZSBhcmNoaXZlLgorCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGVsc2UKKwkgICAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgICAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAiJHRocmVhZF9zYWZlIiA9IHllcyAmJiB0ZXN0IC1uICIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCBmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZmxhZyIKKwlmaQorCisJIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCisJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1VICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKScgfHwgZXhpdCAkPworCWZpCisKKwkjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgIGZpCisJZWxzZQorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICBmaQorCWZpCisKKwlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmCisJICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIiAmJgorCSAgIGxlbj0kZnVuY19sZW5fcmVzdWx0ICYmCisJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICA6CisJZWxzZQorCSAgIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgcGllY2V3aXNlCisJICAjIG9yLCBpZiB1c2luZyBHTlUgbGQgYW5kIHNraXBwZWRfZXhwb3J0IGlzIG5vdCA6LCB1c2UgYSBsaW5rZXIKKwkgICMgc2NyaXB0LgorCisJICAjIFNhdmUgdGhlIHZhbHVlIG9mICRvdXRwdXQgYW5kICRsaWJvYmpzIGJlY2F1c2Ugd2Ugd2FudCB0bworCSAgIyB1c2UgdGhlbSBsYXRlci4gIElmIHdlIGhhdmUgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsIHdlCisJICAjIHdhbnQgdG8gdXNlIHNhdmVfbGlib2JqcyBhcyBpdCB3YXMgYmVmb3JlCisJICAjIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIHdhcyBleHBhbmRlZCwgYmVjYXVzZSB3ZSBjYW4ndAorCSAgIyBhc3N1bWUgdGhlIGxpbmtlciB1bmRlcnN0YW5kcyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYy4KKwkgICMgVGhpcyBtYXkgaGF2ZSB0byBiZSByZXZpc2l0ZWQsIGluIGNhc2UgdG9vIG1hbnkKKwkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIGdldCBsaW5rZWQgaW4gYW5kIGVuZCB1cCBleGNlZWRpbmcKKwkgICMgdGhlIHNwZWMuCisJICBpZiB0ZXN0IC16ICIkY29udmVuaWVuY2UiIHx8IHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJICBmaQorCSAgc2F2ZV9vdXRwdXQ9JG91dHB1dAorCSAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKwkgIG91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworCSAgIyBDbGVhciB0aGUgcmVsb2FkYWJsZSBvYmplY3QgY3JlYXRpb24gY29tbWFuZCBxdWV1ZSBhbmQKKwkgICMgaW5pdGlhbGl6ZSBrIHRvIG9uZS4KKwkgIHRlc3RfY21kcz0KKwkgIGNvbmNhdF9jbWRzPQorCSAgb2JqbGlzdD0KKwkgIGxhc3Rfcm9iaj0KKwkgIGs9MQorCisJICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lmxua3NjcmlwdAorCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIEdOVSBsZCBzY3JpcHQ6ICRvdXRwdXQiCisJICAgIGVjaG8gJ0lOUFVUICgnID4gJG91dHB1dAorCSAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGVjaG8gJyknID4+ICRvdXRwdXQKKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICJYJGZpbGVfbGlzdF9zcGVjIiAhPSBYOyB0aGVuCisJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCSAgICA6ID4gJG91dHB1dAorCSAgICBzZXQgeCAkc2F2ZV9saWJvYmpzCisJICAgIHNoaWZ0CisJICAgIGZpcnN0b2JqPQorCSAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllczsgdGhlbgorCSAgICAgIGZpcnN0b2JqPSIkMSAiCisJICAgICAgc2hpZnQKKwkgICAgZmkKKwkgICAgZm9yIG9iagorCSAgICBkbworCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKwkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkgICAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiCisJICAgICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgICAgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgICAgIGxlbj0kbGVuMAorCisJICAgICAgIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBiZSBsaW5rZWQuCisJICAgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisJICAgICAgZG8KKwkJZnVuY19sZW4gIiAkb2JqIgorCQlmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJCWxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJaWYgdGVzdCAiWCRvYmpsaXN0IiA9IFggfHwKKwkJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJCSAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJCWVsc2UKKwkJICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQorCQkgICMgY29tbWFuZCB0byB0aGUgcXVldWUuCisJCSAgaWYgdGVzdCAiJGsiIC1lcSAxIDsgdGhlbgorCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KKwkJICAgIHJlbG9hZF9vYmpzPSRvYmpsaXN0CisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkJICBlbHNlCisJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgorCQkgICAgIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkJICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisJCSAgZmkKKwkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBmdW5jX2FyaXRoICRrICsgMQorCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgb2JqbGlzdD0iICRvYmoiCisJCSAgZnVuY19sZW4gIiAkbGFzdF9yb2JqIgorCQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAkZnVuY19sZW5fcmVzdWx0CisJCSAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlmaQorCSAgICAgIGRvbmUKKwkgICAgICAjIEhhbmRsZSB0aGUgcmVtYWluaW5nIG9iamVjdHMgYnkgY3JlYXRpbmcgb25lIGxhc3QKKwkgICAgICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAorCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHNcIgorCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCisJICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9flwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisKKwkgICAgZWxzZQorCSAgICAgIG91dHB1dD0KKwkgICAgZmkKKworCSAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCisJICAgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICAgIGxpYm9ianM9JG91dHB1dAorCSAgICAgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgZXhwb3J0IGZpbGUuCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkZXhwb3J0X3N5bWJvbHNfY21kc1wiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICBmaQorCisJICAgIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgorCisJICAgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KKwkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgIGZvciBjbWQgaW4gJGNvbmNhdF9jbWRzOyBkbworCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkJICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgIH0KKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCQlsdF9leGl0PSQ/CisKKwkJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkJICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorCQkgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKwkJICAgICRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCisJCWZpCisKKwkJZXhpdCAkbHRfZXhpdAorCSAgICAgIH0KKwkgICAgZG9uZQorCSAgICBJRlM9IiRzYXZlX2lmcyIKKworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGZpCisJICBmaQorCisgICAgICAgICAgaWYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICAgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgICAgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAgICAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICAgICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKKwkgICAgICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgICAgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCisJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisJICAgIGZpCisJICBmaQorCisJICBsaWJvYmpzPSRvdXRwdXQKKwkgICMgUmVzdG9yZSB0aGUgdmFsdWUgb2Ygb3V0cHV0LgorCSAgb3V0cHV0PSRzYXZlX291dHB1dAorCisJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiICYmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBmaQorCSAgIyBFeHBhbmQgdGhlIGxpYnJhcnkgbGlua2luZyBjb21tYW5kcyBhZ2FpbiB0byByZXNldCB0aGUKKwkgICMgdmFsdWUgb2YgJGxpYm9ianMgZm9yIHBpZWNld2lzZSBsaW5raW5nLgorCisJICAjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisJICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisJICAgIGVsc2UKKwkgICAgICBjbWRzPSRtb2R1bGVfY21kcworCSAgICBmaQorCSAgZWxzZQorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgICAgZWxzZQorCSAgICAgIGNtZHM9JGFyY2hpdmVfY21kcworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGRlbGZpbGVzIjsgdGhlbgorCSAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcyB0byAkY21kcy4KKwkgIGV2YWwgY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiCisJZmkKKworCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCWZpCisKKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwlmb3IgY21kIGluICRjbWRzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBldmFsIGNtZD1cIiRjbWRcIgorCSAgJG9wdF9zaWxlbnQgfHwgeworCSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgIH0KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJICAgIGx0X2V4aXQ9JD8KKworCSAgICAjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICAgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCSAgICBmaQorCisJICAgIGV4aXQgJGx0X2V4aXQKKwkgIH0KKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisKKwkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCSAgICBmaQorCSAgZmkKKworCSAgZXhpdCAkRVhJVF9TVUNDRVNTCisJZmkKKworCSMgQ3JlYXRlIGxpbmtzIHRvIHRoZSByZWFsIGxpYnJhcnkuCisJZm9yIGxpbmtuYW1lIGluICRsaW5rbmFtZXM7IGRvCisJICBpZiB0ZXN0ICIkcmVhbG5hbWUiICE9ICIkbGlua25hbWUiOyB0aGVuCisJICAgIGZ1bmNfc2hvd19ldmFsICcoY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRsaW5rbmFtZSIgJiYgJExOX1MgIiRyZWFsbmFtZSIgIiRsaW5rbmFtZSIpJyAnZXhpdCAkPycKKwkgIGZpCisJZG9uZQorCisJIyBJZiAtbW9kdWxlIG9yIC1leHBvcnQtZHluYW1pYyB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGRsbmFtZS4KKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyB8fCB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzOyB0aGVuCisJICAjIE9uIGFsbCBrbm93biBvcGVyYXRpbmcgc3lzdGVtcywgdGhlc2UgYXJlIGlkZW50aWNhbC4KKwkgIGRsbmFtZT0iJHNvbmFtZSIKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvYmopCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorICAgICAgZmkKKworICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgorICAgICAgKlwgLWwqIHwgKlwgLUwqKQorCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIGNhc2UgJG91dHB1dCBpbgorICAgICAgKi5sbykKKwl0ZXN0IC1uICIkb2JqcyRvbGRfZGVwbGlicyIgJiYgXAorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIgorCisJbGlib2JqPSRvdXRwdXQKKwlmdW5jX2xvMm8gIiRsaWJvYmoiCisJb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJOzsKKyAgICAgICopCisJbGlib2JqPQorCW9iaj0iJG91dHB1dCIKKwk7OworICAgICAgZXNhYworCisgICAgICAjIERlbGV0ZSB0aGUgb2xkIG9iamVjdHMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvYmogJGxpYm9iagorCisgICAgICAjIE9iamVjdHMgZnJvbSBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBUaGlzIGFzc3VtZXMKKyAgICAgICMgc2luZ2xlLXZlcnNpb24gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgV2hlbmV2ZXIgd2UgY3JlYXRlCisgICAgICAjIGRpZmZlcmVudCBvbmVzIGZvciBQSUMvbm9uLVBJQywgdGhpcyB3ZSdsbCBoYXZlIHRvIGR1cGxpY2F0ZQorICAgICAgIyB0aGUgZXh0cmFjdGlvbi4KKyAgICAgIHJlbG9hZF9jb252X29ianM9CisgICAgICBnZW50b3A9CisgICAgICAjIHJlbG9hZF9jbWRzIHJ1bnMgJExEIGRpcmVjdGx5LCBzbyBsZXQgdXMgZ2V0IHJpZCBvZgorICAgICAgIyAtV2wgZnJvbSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBhbmQgaG9wZSB3ZSBjYW4gZ2V0IGJ5IHdpdGgKKyAgICAgICMgdHVybmluZyBjb21tYSBpbnRvIHNwYWNlLi4KKyAgICAgIHdsPQorCisgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRFQ0hPICIkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFNFRCAnc3wsfCB8ZydgCisJZWxzZQorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke29ian14IgorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisJICByZWxvYWRfY29udl9vYmpzPSIkcmVsb2FkX29ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgSWYgd2UncmUgbm90IGJ1aWxkaW5nIHNoYXJlZCwgd2UgbmVlZCB0byB1c2Ugbm9uX3BpY19vYmpzCisgICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgbGlib2Jqcz0iJG5vbl9waWNfb2JqZWN0cyIKKworICAgICAgIyBDcmVhdGUgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisgICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJHtsaWJleHR9JC9kOyAvXC5saWIkL2Q7ICRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKworICAgICAgb3V0cHV0PSIkb2JqIgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisKKyAgICAgICMgRXhpdCBpZiB3ZSBhcmVuJ3QgZG9pbmcgYSBsaWJyYXJ5IG9iamVjdCBmaWxlLgorICAgICAgaWYgdGVzdCAteiAiJGxpYm9iaiI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCWZpCisKKwkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAorCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCisJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorCSMgJG9wdF9kcnlfcnVuIHx8IGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJHBpY19mbGFnIiB8fCB0ZXN0ICIkcGljX21vZGUiICE9IGRlZmF1bHQ7IHRoZW4KKwkjIE9ubHkgZG8gY29tbWFuZHMgaWYgd2UgcmVhbGx5IGhhdmUgZGlmZmVyZW50IFBJQyBvYmplY3RzLgorCXJlbG9hZF9vYmpzPSIkbGlib2JqcyAkcmVsb2FkX2NvbnZfb2JqcyIKKwlvdXRwdXQ9IiRsaWJvYmoiCisJZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworICAgICAgZmkKKworICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworCisgICAgcHJvZykKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKikgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5leGU7OworICAgICAgZXNhYworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisKKyAgICAgIHRlc3QgIiRwcmVsb2FkIiA9IHllcyBcCisgICAgICAgICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB1bmtub3duIFwKKwkmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiID0gdW5rbm93biBcCisJJiYgdGVzdCAiJGRsb3Blbl9zZWxmX3N0YXRpYyIgPSB1bmtub3duICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGBMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IGlzIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1kYXJ3aW4qKQorCSMgRG9uJ3QgYWxsb3cgbGF6eSBsaW5raW5nLCBpdCBicmVha3MgQysrIGdsb2JhbCBjb25zdHJ1Y3RvcnMKKwkjIEJ1dCBpcyBzdXBwb3NlZGx5IGZpeGVkIG9uIDEwLjQgb3IgbGF0ZXIgKHlheSEpLgorCWlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KKwkgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0gaW4KKwkgICAgMTAuWzAxMjNdKQorCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgorCSAgICA7OworCSAgZXNhYworCWZpCisJIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIiAkZmluYWxpemVfZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCTs7CisgICAgICBlc2FjCisKKworICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CisgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAorICAgICAgbmV3X2xpYnM9CisgICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKKwkqKQorCSAgY2FzZSAiICRjb21waWxlX2RlcGxpYnMgIiBpbgorCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZm9yIGRlcGxpYiBpbiAkY29tcGlsZV9kZXBsaWJzOyBkbworCWNhc2UgJGRlcGxpYiBpbgorCS1MKikKKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKwkgIGVzYWMKKwkgIDs7CisJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19saWJzIgorCisKKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRjb21waWxlX2RlcGxpYnMiCisgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGZpbmFsaXplX2RlcGxpYnMiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCWZvciBsaWJkaXIgaW4gJHJwYXRoICR4cnBhdGg7IGRvCisJICAjIFRoaXMgaXMgdGhlIG1hZ2ljIHRvIHVzZSAtcnBhdGguCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisgICAgICBmaQorCisgICAgICAjIE5vdyBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworICAgICAgcnBhdGg9CisgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCisJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkgICAgZWxzZQorCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAke0VDSE99ICIkbGliZGlyIiB8ICR7U0VEfSAtZSAncyovbGliJCovYmluKidgCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiRsaWJkaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokbGliZGlyIjs7CisJICBlc2FjCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBjb21waWxlX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9wZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZG9uZQorICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgZmkKKyAgICAgIGZpbmFsaXplX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRsaWJvYmpzIiAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJIyBUcmFuc2Zvcm0gYWxsIHRoZSBsaWJyYXJ5IG9iamVjdHMgaW50byBzdGFuZGFyZCBvYmplY3RzLgorCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorCWZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisgICAgICBmaQorCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJG91dHB1dG5hbWUiICJAUFJPR1JBTUAiICJubyIKKworICAgICAgIyB0ZW1wbGF0ZSBwcmVsaW5raW5nIHN0ZXAKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVsaW5rX2NtZHMiOyB0aGVuCisJZnVuY19leGVjdXRlX2NtZHMgIiRwcmVsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9eWVzCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqY2VnY2MqIHwgKm1pbmd3MzJjZSopCisgICAgICAgICMgRGlzYWJsZSB3cmFwcGVycyBmb3IgY2VnY2MgYW5kIG1pbmd3MzJjZSBob3N0cywgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyBhbnl3YXkuCisgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIDs7CisgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQorICAgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgaWYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IG5vIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0ICIkd3JhcHBlcnNfcmVxdWlyZWQiID0gbm87IHRoZW4KKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCisJIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCisJZXhpdF9zdGF0dXM9MAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdF9zdGF0dXM9JD8nCisKKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKwlmaQorCisJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKwlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iJworCWZpCisKKwlleGl0ICRleGl0X3N0YXR1cworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwljb21waWxlX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCisJZmluYWxpemVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRmaW5hbGl6ZV9jb21tYW5kIgorICAgICAgZmkKKworICAgICAgY29tcGlsZV92YXI9CisgICAgICBmaW5hbGl6ZV92YXI9CisgICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgcnBhdGg9CisJICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisJICBkb25lCisJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluYWxpemVfcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJGZpbmFsaXplX3Blcm1fcnBhdGg7IGRvCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKwkgIGRvbmUKKwkgIGZpbmFsaXplX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRub19pbnN0YWxsIiA9IHllczsgdGhlbgorCSMgV2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSB3cmFwcGVyIHNjcmlwdC4KKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCSMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0CisJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0CisJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbms7IHRoZW4KKwkjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwlyZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCisJZnVuY193YXJuaW5nICJ0aGlzIHBsYXRmb3JtIGRvZXMgbm90IGxpa2UgdW5pbnN0YWxsZWQgc2hhcmVkIGxpYnJhcmllcyIKKwlmdW5jX3dhcm5pbmcgIlxgJG91dHB1dCcgd2lsbCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbGF0aW9uIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiICE9IG5vOyB0aGVuCisJICBsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFNFRCAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorCSAgZWxzZQorCSAgICAjIGZhc3RfaW5zdGFsbCBpcyBzZXQgdG8gbmVlZGxlc3MKKwkgICAgcmVsaW5rX2NvbW1hbmQ9CisJICBmaQorCWVsc2UKKwkgIGxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJ2AKKworICAgICAgIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZXMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvbHQtJG91dHB1dG5hbWUKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisgICAgICBpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiCisJcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KKyAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKKworICAgICAgIyBRdW90ZSB0aGUgcmVsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKwlmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KKwkgIGlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCSAgZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsc2UKKwkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZmkKKwlkb25lCisJcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJHJlbGlua19jb21tYW5kKSIKKwlyZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgbm90IGluIGRyeSBydW4gbW9kZS4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJIyB3aW4zMiB3aWxsIHRoaW5rIHRoZSBzY3JpcHQgaXMgYSBiaW5hcnkgaWYgaXQgaGFzCisJIyBhIC5leGUgc3VmZml4LCBzbyB3ZSBzdHJpcCBpdCBvZmYgaGVyZS4KKwljYXNlICRvdXRwdXQgaW4KKwkgICouZXhlKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwllc2FjCisJIyB0ZXN0IGZvciBjeWd3aW4gYmVjYXVzZSBtdiBmYWlscyB3L28gLmV4ZSBleHRlbnNpb25zCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiopCisJICAgIGV4ZWV4dD0uZXhlCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dG5hbWUiCisJICAgIG91dHB1dG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworCSAgKikgZXhlZXh0PSA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogKQorCSAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb3V0cHV0IiAiIiAiLiIKKwkgICAgb3V0cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIG91dHB1dF9wYXRoPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJICAgIGN3cmFwcGVyc291cmNlPSIkb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYyIKKwkgICAgY3dyYXBwZXI9IiRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlIgorCSAgICAkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgorCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjID4gJGN3cmFwcGVyc291cmNlCisKKwkgICAgIyBUaGUgd3JhcHBlciBleGVjdXRhYmxlIGlzIGJ1aWx0IHVzaW5nIHRoZSAkaG9zdCBjb21waWxlciwKKwkgICAgIyBiZWNhdXNlIGl0IGNvbnRhaW5zICRob3N0IHBhdGhzIGFuZCBmaWxlcy4gSWYgY3Jvc3MtCisJICAgICMgY29tcGlsaW5nLCBpdCwgbGlrZSB0aGUgdGFyZ2V0IGV4ZWN1dGFibGUsIG11c3QgYmUKKwkgICAgIyBleGVjdXRlZCBvbiB0aGUgJGhvc3Qgb3IgdW5kZXIgYW4gZW11bGF0aW9uIGVudmlyb25tZW50LgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRMVENDICRMVENGTEFHUyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCisJICAgICAgJFNUUklQICRjd3JhcHBlcgorCSAgICB9CisKKwkgICAgIyBOb3csIGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQgZm9yIGZ1bmNfc291cmNlIHVzZToKKwkgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAkY3dyYXBwZXIKKwkgICAgJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICB0cmFwICIkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICMgbm90ZTogdGhpcyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHNvIGRvIG5vdCBjaG1vZC4KKwkgICAgICBpZiB0ZXN0ICJ4JGJ1aWxkIiA9ICJ4JGhvc3QiIDsgdGhlbgorCQkkY3dyYXBwZXIgLS1sdC1kdW1wLXNjcmlwdCA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGVsc2UKKwkJZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmaQorCSAgICB9CisJICA7OworCSAgKiApCisJICAgICRSTSAkb3V0cHV0CisJICAgIHRyYXAgIiRSTSAkb3V0cHV0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJG91dHB1dAorCSAgICBjaG1vZCAreCAkb3V0cHV0CisJICA7OworCWVzYWMKKyAgICAgIH0KKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiB3ZSBuZWVkIHRvIGJ1aWxkIGFuIG9sZC1mYXNoaW9uZWQgYXJjaGl2ZS4KKyAgICBmb3Igb2xkbGliIGluICRvbGRsaWJzOyBkbworCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IGNvbnZlbmllbmNlOyB0aGVuCisJb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSAkc3ltZmlsZW9iaiIKKwlhZGRsaWJzPSIkY29udmVuaWVuY2UiCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBtb2R1bGU7IHRoZW4KKwkgIG9sZG9ianM9IiRsaWJvYmpzX3NhdmUiCisJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwllbHNlCisJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKwkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IHllcyAmJiB0ZXN0IC1mICIkc3ltZmlsZW9iaiI7IHRoZW4KKwkgICAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRzeW1maWxlb2JqIgorCSAgZmkKKwlmaQorCWFkZGxpYnM9IiRvbGRfY29udmVuaWVuY2UiCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkYWRkbGlicyI7IHRoZW4KKwlnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCWZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicworCWZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAgICAgIGZpCisKKyAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorICAgICAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJY21kcz0kb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworICAgICAgZWxzZQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorCisJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCisJIyB0byBhdm9pZCBjcmVhdGluZyBhcmNoaXZlcyB3aXRoIGR1cGxpY2F0ZSBiYXNlbmFtZXMgaWYgd2UKKwkjIG1pZ2h0IGhhdmUgdG8gZXh0cmFjdCB0aGVtIGFmdGVyd2FyZHMsIGUuZy4sIHdoZW4gY3JlYXRpbmcgYQorCSMgc3RhdGljIGFyY2hpdmUgb3V0IG9mIGEgY29udmVuaWVuY2UgbGlicmFyeSwgb3Igd2hlbiBsaW5raW5nCisJIyB0aGUgZW50aXJldHkgb2YgYSBsaWJ0b29sIGFyY2hpdmUgaW50byBhbm90aGVyIChjdXJyZW50bHkKKwkjIG5vdCBzdXBwb3J0ZWQgYnkgbGlidG9vbCkuCisJaWYgKGZvciBvYmogaW4gJG9sZG9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGRvbmUgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgorCSAgOgorCWVsc2UKKwkgIGVjaG8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCSAgZnVuY19ta2Rpcl9wICIkZ2VudG9wIgorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgY291bnRlcj0xCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgIG9iamJhc2U9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgY2FzZSAiICRvbGRvYmpzICIgaW4KKwkgICAgIiAiKSBvbGRvYmpzPSRvYmogOzsKKwkgICAgKltcIC9dIiRvYmpiYXNlICIqKQorCSAgICAgIHdoaWxlIDo7IGRvCisJCSMgTWFrZSBzdXJlIHdlIGRvbid0IHBpY2sgYW4gYWx0ZXJuYXRlIG5hbWUgdGhhdCBhbHNvCisJCSMgb3ZlcmxhcHMuCisJCW5ld29iaj1sdCRjb3VudGVyLSRvYmpiYXNlCisJCWZ1bmNfYXJpdGggJGNvdW50ZXIgKyAxCisJCWNvdW50ZXI9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWNhc2UgIiAkb2xkb2JqcyAiIGluCisJCSpbXCAvXSIkbmV3b2JqICIqKSA7OworCQkqKSBpZiB0ZXN0ICEgLWYgIiRnZW50b3AvJG5ld29iaiI7IHRoZW4gYnJlYWs7IGZpIDs7CisJCWVzYWMKKwkgICAgICBkb25lCisJICAgICAgZnVuY19zaG93X2V2YWwgImxuICRvYmogJGdlbnRvcC8kbmV3b2JqIHx8IGNwICRvYmogJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRvYmoiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWZ1bmNfdG9fdG9vbF9maWxlICIkb2xkbGliIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCXRvb2xfb2xkbGliPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwlldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisKKwlmdW5jX2xlbiAiICRjbWRzIgorCWxlbj0kZnVuY19sZW5fcmVzdWx0CisJaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisJZWxpZiB0ZXN0IC1uICIkYXJjaGl2ZXJfbGlzdF9zcGVjIjsgdGhlbgorCSAgZnVuY192ZXJib3NlICJ1c2luZyBjb21tYW5kIGZpbGUgYXJjaGl2ZSBsaW5raW5nLi4uIgorCSAgZm9yIG9iaiBpbiAkb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisJICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorCSAgZG9uZSA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZAorCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZCIKKwkgIG9sZG9ianM9IiAkYXJjaGl2ZXJfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKwkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKwllbHNlCisJICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cworCSAgZnVuY192ZXJib3NlICJ1c2luZyBwaWVjZXdpc2UgYXJjaGl2ZSBsaW5raW5nLi4uIgorCSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgorCSAgUkFOTElCPToKKwkgIG9iamxpc3Q9CisJICBjb25jYXRfY21kcz0KKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCSAgb2xkb2Jqcz0KKwkgICMgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGZpbmRpbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0PworCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBsYXN0X29sZG9iaj0kb2JqCisJICBkb25lCisJICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKwkgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgbGVuPSRsZW4wCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfbGVuICIgJG9iaiIKKwkgICAgZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAorCSAgICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgorCSAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkgICAgICA6CisJICAgIGVsc2UKKwkgICAgICAjIHRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCisJICAgICAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgICAgIGlmIHRlc3QgIiRvYmoiID0gIiRsYXN0X29sZG9iaiIgOyB0aGVuCisJCVJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgICAgICBmaQorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCisJICAgICAgb2JqbGlzdD0KKwkgICAgICBsZW49JGxlbjAKKwkgICAgZmkKKwkgIGRvbmUKKwkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgIG9sZG9ianM9JG9iamxpc3QKKwkgIGlmIHRlc3QgIlgkb2xkb2JqcyIgPSAiWCIgOyB0aGVuCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgorCSAgZWxzZQorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmaQorCWZpCisgICAgICBmaQorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRjbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZ2VuZXJhdGVkIiAmJiBcCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yJGdlbmVyYXRlZCIKKworICAgICMgTm93IGNyZWF0ZSB0aGUgbGlidG9vbCBhcmNoaXZlLgorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICoubGEpCisgICAgICBvbGRfbGlicmFyeT0KKyAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgb2xkX2xpYnJhcnk9IiRsaWJuYW1lLiRsaWJleHQiCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKyAgICAgIGZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwllbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwllbHNlCisJICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWZpCisgICAgICBkb25lCisgICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgorICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllcyA7IHRoZW4KKwlyZWxpbmtfY29tbWFuZD0KKyAgICAgIGZpCisKKyAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwlmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBvdXRwdXQ9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lImkKKwkgICAgIyBSZXBsYWNlIGFsbCB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQgb25lcworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAqLmxhKQorCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgIC1MKikKKwkJZnVuY19zdHJpcG5hbWUgLUwgJycgIiRkZXBsaWIiCisJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtTCRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisJCTs7CisJICAgICAgLVIqKQorCQlmdW5jX3N0cmlwbmFtZSAtUiAnJyAiJGRlcGxpYiIKKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKwkJOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIG5ld2RsZmlsZXM9CisKKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCWZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJICAgICAgKi5sYSkKKwkJIyBPbmx5IHBhc3MgcHJlb3BlbmVkIGZpbGVzIHRvIHRoZSBwc2V1ZG8tYXJjaGl2ZSAoZm9yCisJCSMgZXZlbnR1YWwgbGlua2luZyB3aXRoIHRoZSBhcHAuIHRoYXQgbGlua3MgaXQpIGlmIHdlCisJCSMgZGlkbid0IGFscmVhZHkgbGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGlyZWN0bHkgaW50bworCQkjIHRoZSBsaWJyYXJ5OgorCQlmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKwkgIGVsc2UKKwkgICAgbmV3ZGxmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRhYnMiCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkYWJzIgorCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgZmkKKwkgICRSTSAkb3V0cHV0CisJICAjIHBsYWNlIGRsbmFtZSBpbiBjb3JyZWN0IHBvc2l0aW9uIGZvciBjeWd3aW4KKwkgICMgSW4gZmFjdCwgaXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCB1c2UgdGhpcyBjb2RlIGZvciBhbGwgdGFyZ2V0CisJICAjIHN5c3RlbXMgdGhhdCBjYW4ndCBoYXJkLWNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHRoZWlyIGV4ZWN1dGFibGVzCisJICAjIGFuZCB0aGF0IGhhdmUgbm8gc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZSBpbmRlcGVuZGVudCBvZiBQQVRILAorCSAgIyBidXQgaXQgdHVybnMgb3V0IHdlIGNhbid0IGVhc2lseSBkZXRlcm1pbmUgdGhhdCBmcm9tIGluc3BlY3RpbmcKKwkgICMgbGlidG9vbCB2YXJpYWJsZXMsIHNvIHdlIGhhdmUgdG8gaGFyZC1jb2RlIHRoZSBPU3MgdG8gd2hpY2ggaXQKKwkgICMgYXBwbGllcyBoZXJlOyBhdCB0aGUgbW9tZW50LCB0aGF0IG1lYW5zIHBsYXRmb3JtcyB0aGF0IHVzZSB0aGUgUEUKKwkgICMgb2JqZWN0IGZvcm1hdCB3aXRoIERMTCBmaWxlcy4gIFNlZSB0aGUgbG9uZyBjb21tZW50IGF0IHRoZSB0b3Agb2YKKwkgICMgdGVzdHMvYmluZGlyLmF0IGZvciBmdWxsIGRldGFpbHMuCisJICB0ZGxuYW1lPSRkbG5hbWUKKwkgIGNhc2UgJGhvc3QsJG91dHB1dCwkaW5zdGFsbGVkLCRtb2R1bGUsJGRsbmFtZSBpbgorCSAgICAqY3lnd2luKiwqbGFpLHllcyxubywqLmRsbCB8ICptaW5ndyosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqY2VnY2MqLCpsYWkseWVzLG5vLCouZGxsKQorCSAgICAgICMgSWYgYSAtYmluZGlyIGFyZ3VtZW50IHdhcyBzdXBwbGllZCwgcGxhY2UgdGhlIGRsbCB0aGVyZS4KKwkgICAgICBpZiB0ZXN0ICJ4JGJpbmRpciIgIT0geCA7CisJICAgICAgdGhlbgorCQlmdW5jX3JlbGF0aXZlX3BhdGggIiRpbnN0YWxsX2xpYmRpciIgIiRiaW5kaXIiCisJCXRkbG5hbWU9JGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQkZGxuYW1lCisJICAgICAgZWxzZQorCQkjIE90aGVyd2lzZSBmYWxsIGJhY2sgb24gaGV1cmlzdGljLgorCQl0ZGxuYW1lPS4uL2Jpbi8kZGxuYW1lCisJICAgICAgZmkKKwkgICAgICA7OworCSAgZXNhYworCSAgJEVDSE8gPiAkb3V0cHV0ICJcCisjICRvdXRwdXRuYW1lIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIFRoZSBuYW1lIHRoYXQgd2UgY2FuIGRsb3BlbigzKS4KK2RsbmFtZT0nJHRkbG5hbWUnCisKKyMgTmFtZXMgb2YgdGhpcyBsaWJyYXJ5LgorbGlicmFyeV9uYW1lcz0nJGxpYnJhcnlfbmFtZXMnCisKKyMgVGhlIG5hbWUgb2YgdGhlIHN0YXRpYyBhcmNoaXZlLgorb2xkX2xpYnJhcnk9JyRvbGRfbGlicmFyeScKKworIyBMaW5rZXIgZmxhZ3MgdGhhdCBjYW4gbm90IGdvIGluIGRlcGVuZGVuY3lfbGlicy4KK2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9JyRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncycKKworIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIHVwb24uCitkZXBlbmRlbmN5X2xpYnM9JyRkZXBlbmRlbmN5X2xpYnMnCisKKyMgTmFtZXMgb2YgYWRkaXRpb25hbCB3ZWFrIGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkKK3dlYWtfbGlicmFyeV9uYW1lcz0nJHdlYWtfbGlicycKKworIyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciAkbGlibmFtZS4KK2N1cnJlbnQ9JGN1cnJlbnQKK2FnZT0kYWdlCityZXZpc2lvbj0kcmV2aXNpb24KKworIyBJcyB0aGlzIGFuIGFscmVhZHkgaW5zdGFsbGVkIGxpYnJhcnk/CitpbnN0YWxsZWQ9JGluc3RhbGxlZAorCisjIFNob3VsZCB3ZSB3YXJuIGFib3V0IHBvcnRhYmlsaXR5IHdoZW4gbGlua2luZyBhZ2FpbnN0IC1tb2R1bGVzPworc2hvdWxkbm90bGluaz0kbW9kdWxlCisKKyMgRmlsZXMgdG8gZGxvcGVuL2RscHJlb3BlbgorZGxvcGVuPSckZGxmaWxlcycKK2RscHJlb3Blbj0nJGRscHJlZmlsZXMnCisKKyMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKK2xpYmRpcj0nJGluc3RhbGxfbGliZGlyJyIKKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm8gJiYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IHllczsgdGhlbgorCSAgICAkRUNITyA+PiAkb3V0cHV0ICJcCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgorCSAgZmkKKwlkb25lCisgICAgICB9CisKKyAgICAgICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQgdGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4gYmUgZm91bmQgaW4KKyAgICAgICMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBpbnN0YWxsZWQuCisgICAgICBmdW5jX3Nob3dfZXZhbCAnKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJG91dHB1dG5hbWUiICYmICRMTl9TICIuLi8kb3V0cHV0bmFtZSIgIiRvdXRwdXRuYW1lIiApJyAnZXhpdCAkPycKKyAgICAgIDs7CisgICAgZXNhYworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCit7IHRlc3QgIiRvcHRfbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IH0gJiYKKyAgICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV91bmluc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfdW5pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIFJNPSIkbm9ub3B0IgorICAgIGZpbGVzPQorICAgIHJtZm9yY2U9CisgICAgZXhpdF9zdGF0dXM9MAorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWYpIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyI7IHJtZm9yY2U9eWVzIDs7CisgICAgICAtKikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIiA7OworICAgICAgKikgZnVuY19hcHBlbmQgZmlsZXMgIiAkYXJnIiA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIHRlc3QgLXogIiRSTSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIFJNIHByb2dyYW0iCisKKyAgICBybWRpcnM9CisKKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisgICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKyAgICAgIGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgorCW9kaXI9IiRvYmpkaXIiCisgICAgICBlbHNlCisJb2Rpcj0iJGRpci8kb2JqZGlyIgorICAgICAgZmkKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgdGVzdCAiJG9wdF9tb2RlIiA9IHVuaW5zdGFsbCAmJiBvZGlyPSIkZGlyIgorCisgICAgICAjIFJlbWVtYmVyIG9kaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworICAgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB0aGVuCisJY2FzZSAiICRybWRpcnMgIiBpbgorCSAgKiIgJG9kaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBybWRpcnMgIiAkb2RpciIgOzsKKwllc2FjCisgICAgICBmaQorCisgICAgICAjIERvbid0IGVycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kIHJtIC1mIHdhcyB1c2VkLgorICAgICAgaWYgeyB0ZXN0IC1MICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHsgdGVzdCAtaCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorCSB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwk6CisgICAgICBlbGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgorCWV4aXRfc3RhdHVzPTEKKwljb250aW51ZQorICAgICAgZWxpZiB0ZXN0ICIkcm1mb3JjZSIgPSB5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgcm1maWxlcz0iJGZpbGUiCisKKyAgICAgIGNhc2UgJG5hbWUgaW4KKyAgICAgICoubGEpCisJIyBQb3NzaWJseSBhIGxpYnRvb2wgYXJjaGl2ZSwgc28gdmVyaWZ5IGl0LgorCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisKKwkgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCisJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuIgorCSAgZG9uZQorCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG9sZF9saWJyYXJ5IgorCisJICBjYXNlICIkb3B0X21vZGUiIGluCisJICBjbGVhbikKKwkgICAgY2FzZSAiICRsaWJyYXJ5X25hbWVzICIgaW4KKwkgICAgKiIgJGRsbmFtZSAiKikgOzsKKwkgICAgKikgdGVzdCAtbiAiJGRsbmFtZSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRkbG5hbWUiIDs7CisJICAgIGVzYWMKKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1pIgorCSAgICA7OworCSAgdW5pbnN0YWxsKQorCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgb2xkX3Bvc3R1bmluc3RhbGwgY29tbWFuZHMuCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgorCSAgICA7OworCSAgZXNhYworCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBvYmplY3QsIHNvIHZlcmlmeSBpdC4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisKKwkgICMgQWRkIFBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kbm9uX3BpY19vYmplY3QiCisJICBmaQorCWZpCisJOzsKKworICAgICAgKikKKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW4gOyB0aGVuCisJICBub2V4ZW5hbWU9JG5hbWUKKwkgIGNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkbmFtZSIKKwkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgIyAkZmlsZSB3aXRoIC5leGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBybWZpbGVzLAorCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmaWxlIgorCSAgICA7OworCSAgZXNhYworCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCisJICBpZiBmdW5jX2x0d3JhcHBlcl9wICIkZmlsZSI7IHRoZW4KKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICByZWxpbmtfY29tbWFuZD0KKwkgICAgICBmdW5jX3NvdXJjZSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorCSAgICBlbHNlCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGRpci8kbm9leGVuYW1lCisJICAgIGZpCisKKwkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKwkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbmFtZSIKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiWCRub2V4ZW5hbWUiICE9ICJYJG5hbWUiIDsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0ke25vZXhlbmFtZX0uYyIKKwkgICAgZmkKKwkgIGZpCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCisgICAgZG9uZQorCisgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbworICAgICAgaWYgdGVzdCAtZCAiJGRpciI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAicm1kaXIgJGRpciA+L2Rldi9udWxsIDI+JjEiCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgJGV4aXRfc3RhdHVzCit9CisKK3sgdGVzdCAiJG9wdF9tb2RlIiA9IHVuaW5zdGFsbCB8fCB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IH0gJiYKKyAgICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQorCit0ZXN0IC16ICIkb3B0X21vZGUiICYmIHsKKyAgaGVscD0iJGdlbmVyaWNfaGVscCIKKyAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIKK30KKwordGVzdCAteiAiJGV4ZWNfY21kIiAmJiBcCisgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisKK2lmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KKyAgZXZhbCBleGVjICIkZXhlY19jbWQiCisgIGV4aXQgJEVYSVRfRkFJTFVSRQorZmkKKworZXhpdCAkZXhpdF9zdGF0dXMKKworCisjIFRoZSBUQUdzIGJlbG93IGFyZSBkZWZpbmVkIHN1Y2ggdGhhdCB3ZSBuZXZlciBnZXQgaW50byBhIHNpdHVhdGlvbgorIyBpbiB3aGljaCB3ZSBkaXNhYmxlIGJvdGgga2luZHMgb2YgbGlicmFyaWVzLiAgR2l2ZW4gY29uZmxpY3RpbmcKKyMgY2hvaWNlcywgd2UgZ28gZm9yIGEgc3RhdGljIGxpYnJhcnksIHRoYXQgaXMgdGhlIG1vc3QgcG9ydGFibGUsCisjIHNpbmNlIHdlIGNhbid0IHRlbGwgd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIHdlcmUgZGlzYWJsZWQgYmVjYXVzZQorIyB0aGUgdXNlciBhc2tlZCBmb3IgdGhhdCBvciBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQKKyMgdGhlbS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBBSVgsIGJlY2F1c2Ugd2UgZG9uJ3QKKyMgc3VwcG9ydCBoYXZpbmcgYm90aCBzdGF0aWMgYW5kIHNoYXJlZCBsaWJyYXJpZXMgZW5hYmxlZCBhdCB0aGUgc2FtZQorIyB0aW1lIG9uIHRoYXQgcGxhdGZvcm0sIHNvIHdlIGRlZmF1bHQgdG8gYSBzaGFyZWQtb25seSBjb25maWd1cmF0aW9uLgorIyBJZiBhIGRpc2FibGUtc2hhcmVkIHRhZyBpcyBnaXZlbiwgd2UnbGwgZmFsbGJhY2sgdG8gYSBzdGF0aWMtb25seQorIyBjb25maWd1cmF0aW9uLiAgQnV0IHdlJ2xsIG5ldmVyIGdvIGZyb20gc3RhdGljLW9ubHkgdG8gc2hhcmVkLW9ubHkuCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKK2J1aWxkX2xpYnRvb2xfbGlicz1ubworYnVpbGRfb2xkX2xpYnM9eWVzCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCitidWlsZF9vbGRfbGlicz1gY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluIHllcykgZWNobyBubzs7ICopIGVjaG8geWVzOzsgZXNhY2AKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOnNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjoyCisjIEVuZDoKKyMgdmk6c3c9MgorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9tNC9jdXJsLWNvbXBpbGVycy5tNCBiL2N1cmwtNy4yNS4wL200L2N1cmwtY29tcGlsZXJzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZjE4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9tNC9jdXJsLWNvbXBpbGVycy5tNApAQCAtMCwwICsxLDE0MzkgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIyBGaWxlIHZlcnNpb24gZm9yICdhY2xvY2FsJyB1c2UuIEtlZXAgaXQgYSBzaW5nbGUgbnVtYmVyLgorIyBzZXJpYWwgNTgKKworCitkbmwgQ1VSTF9DSEVDS19DT01QSUxFUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgdGhlIEMgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBrbm93bi4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfQ09NUElMRVJdLCBbCisgICMKKyAgY29tcGlsZXJfaWQ9InVua25vd24iCisgIGNvbXBpbGVyX251bT0iMCIKKyAgIworICBmbGFnc19kYmdfYWxsPSJ1bmtub3duIgorICBmbGFnc19kYmdfeWVzPSJ1bmtub3duIgorICBmbGFnc19kYmdfb2ZmPSJ1bmtub3duIgorICBmbGFnc19vcHRfYWxsPSJ1bmtub3duIgorICBmbGFnc19vcHRfeWVzPSJ1bmtub3duIgorICBmbGFnc19vcHRfb2ZmPSJ1bmtub3duIgorICAjCisgIGZsYWdzX3ByZWZlcl9jcHBmbGFncz0ibm8iCisgICMKKyAgQ1VSTF9DSEVDS19DT01QSUxFUl9ERUNfQworICBDVVJMX0NIRUNLX0NPTVBJTEVSX0hQVVhfQworICBDVVJMX0NIRUNLX0NPTVBJTEVSX0lCTV9DCisgIENVUkxfQ0hFQ0tfQ09NUElMRVJfSU5URUxfQworICBDVVJMX0NIRUNLX0NPTVBJTEVSX0NMQU5HCisgIENVUkxfQ0hFQ0tfQ09NUElMRVJfR05VX0MKKyAgQ1VSTF9DSEVDS19DT01QSUxFUl9MQ0MKKyAgQ1VSTF9DSEVDS19DT01QSUxFUl9TR0lfTUlQU1BST19DCisgIENVUkxfQ0hFQ0tfQ09NUElMRVJfU0dJX01JUFNfQworICBDVVJMX0NIRUNLX0NPTVBJTEVSX1NVTlBST19DCisgIENVUkxfQ0hFQ0tfQ09NUElMRVJfVElOWV9DCisgIENVUkxfQ0hFQ0tfQ09NUElMRVJfV0FUQ09NX0MKKyAgIworICBpZiB0ZXN0ICIkY29tcGlsZXJfaWQiID0gInVua25vd24iOyB0aGVuCisgIGNhdCA8PF9FT0YgMT4mMgorKioqCisqKiogV2FybmluZzogVGhpcyBjb25maWd1cmUgc2NyaXB0IGRvZXMgbm90IGhhdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisqKiogY29tcGlsZXIgeW91IGFyZSB1c2luZywgcmVsYXRpdmUgdG8gdGhlIGZsYWdzIHJlcXVpcmVkIHRvIGVuYWJsZSBvcgorKioqIGRpc2FibGUgZ2VuZXJhdGlvbiBvZiBkZWJ1ZyBpbmZvLCBvcHRpbWl6YXRpb24gb3B0aW9ucyBvciB3YXJuaW5ncy4KKyoqKgorKioqIFdoYXRldmVyIHNldHRpbmdzIGFyZSBwcmVzZW50IGluIENGTEFHUyB3aWxsIGJlIHVzZWQgZm9yIHRoaXMgcnVuLgorKioqCisqKiogSWYgeW91IHdpc2ggdG8gaGVscCB0aGUgY1VSTCBwcm9qZWN0IHRvIGJldHRlciBzdXBwb3J0IHlvdXIgY29tcGlsZXIKKyoqKiB5b3UgY2FuIHJlcG9ydCB0aGlzIGFuZCB0aGUgcmVxdWlyZWQgaW5mbyBvbiB0aGUgbGliY3VybCBkZXZlbG9wbWVudAorKioqIG1haWxpbmcgbGlzdDogaHR0cDovL2Nvb2wuaGF4eC5zZS9tYWlsbWFuL2xpc3RpbmZvL2N1cmwtbGlicmFyeS8KKyoqKgorX0VPRgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19DT01QSUxFUl9DTEFORworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBjbGFuZy4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfQ09NUElMRVJfQ0xBTkddLCBbCisgIEFDX0JFRk9SRShbJDBdLFtDVVJMX0NIRUNLX0NPTVBJTEVSX0dOVV9DXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBpcyBjbGFuZ10pCisgIENVUkxfQ0hFQ0tfREVGKFtfX2NsYW5nX19dLCBbXSwgW3NpbGVudF0pCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fY2xhbmdfXyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgY29tcGlsZXJfaWQ9IkNMQU5HIgorICAgIGNsYW5ndmVyPWAkQ0MgLWR1bXB2ZXJzaW9uYAorICAgIGNsYW5ndmhpPWBlY2hvICRjbGFuZ3ZlciB8IGN1dCAtZCAuIC1mMWAKKyAgICBjbGFuZ3Zsbz1gZWNobyAkY2xhbmd2ZXIgfCBjdXQgLWQgLiAtZjJgCisgICAgY29tcGlsZXJfbnVtPWAoZXhwciAkY2xhbmd2aGkgIioiIDEwMCArICRjbGFuZ3ZsbykgMj4vZGV2L251bGxgCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIC1nMSAtZzIgLWczIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1nZ2RiIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1nc3RhYnMiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdzdGFicysiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdjb2ZmIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1neGNvZmYiCisgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgLWdkd2FyZi0yIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1ndm1zIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgIGZsYWdzX2RiZ19vZmY9Ii1nMCIKKyAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtT3MgLU8zIC1PNCIKKyAgICBmbGFnc19vcHRfeWVzPSItT3MiCisgICAgZmxhZ3Nfb3B0X29mZj0iLU8wIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19DT01QSUxFUl9ERUNfQworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBERUMgQy4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfQ09NUElMRVJfREVDX0NdLCBbCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgaXMgREVDL0NvbXBhcS9IUCBDXSkKKyAgQ1VSTF9DSEVDS19ERUYoW19fREVDQ10sIFtdLCBbc2lsZW50XSkKKyAgQ1VSTF9DSEVDS19ERUYoW19fREVDQ19WRVJdLCBbXSwgW3NpbGVudF0pCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fREVDQyIgPSAieWVzIiAmJgorICAgIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fREVDQ19WRVIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGNvbXBpbGVyX2lkPSJERUNfQyIKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtZzAgLWcxIC1nMiAtZzMiCisgICAgZmxhZ3NfZGJnX3llcz0iLWcyIgorICAgIGZsYWdzX2RiZ19vZmY9Ii1nMCIKKyAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtTzMgLU80IgorICAgIGZsYWdzX29wdF95ZXM9Ii1PMSIKKyAgICBmbGFnc19vcHRfb2ZmPSItTzAiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0NPTVBJTEVSX0dOVV9DCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBjb21waWxlciBiZWluZyB1c2VkIGlzIEdOVSBDLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19DT01QSUxFUl9HTlVfQ10sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19DT01QSUxFUl9JTlRFTF9DXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19DT01QSUxFUl9DTEFOR10pZG5sCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgaXMgR05VIENdKQorICBDVVJMX0NIRUNLX0RFRihbX19HTlVDX19dLCBbXSwgW3NpbGVudF0pCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fR05VQ19fIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJGNvbXBpbGVyX2lkIiA9ICJ1bmtub3duIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgY29tcGlsZXJfaWQ9IkdOVV9DIgorICAgIGdjY3Zlcj1gJENDIC1kdW1wdmVyc2lvbmAKKyAgICBnY2N2aGk9YGVjaG8gJGdjY3ZlciB8IGN1dCAtZCAuIC1mMWAKKyAgICBnY2N2bG89YGVjaG8gJGdjY3ZlciB8IGN1dCAtZCAuIC1mMmAKKyAgICBjb21waWxlcl9udW09YChleHByICRnY2N2aGkgIioiIDEwMCArICRnY2N2bG8pIDI+L2Rldi9udWxsYAorICAgIGZsYWdzX2RiZ19hbGw9Ii1nIC1nMCAtZzEgLWcyIC1nMyIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ2dkYiIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ3N0YWJzIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1nc3RhYnMrIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1nY29mZiIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ3hjb2ZmIgorICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC1nZHdhcmYtMiIKKyAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAtZ3ZtcyIKKyAgICBmbGFnc19kYmdfeWVzPSItZyIKKyAgICBmbGFnc19kYmdfb2ZmPSItZzAiCisgICAgZmxhZ3Nfb3B0X2FsbD0iLU8gLU8wIC1PMSAtTzIgLU8zIC1PcyIKKyAgICBmbGFnc19vcHRfeWVzPSItTzIiCisgICAgZmxhZ3Nfb3B0X29mZj0iLU8wIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19DT01QSUxFUl9IUFVYX0MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbXBpbGVyIGJlaW5nIHVzZWQgaXMgSFAtVVggQy4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfQ09NUElMRVJfSFBVWF9DXSwgWworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGlzIEhQLVVYIENdKQorICBDVVJMX0NIRUNLX0RFRihbX19IUF9jY10sIFtdLCBbc2lsZW50XSkKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19IUF9jYyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgY29tcGlsZXJfaWQ9IkhQX1VYX0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLXMiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iLXMiCisgICAgZmxhZ3Nfb3B0X2FsbD0iLU8gK08wICtPMSArTzIgK08zICtPNCIKKyAgICBmbGFnc19vcHRfeWVzPSIrTzIiCisgICAgZmxhZ3Nfb3B0X29mZj0iK08wIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19DT01QSUxFUl9JQk1fQworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBJQk0gQy4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfQ09NUElMRVJfSUJNX0NdLCBbCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgaXMgSUJNIENdKQorICBDVVJMX0NIRUNLX0RFRihbX19JQk1DX19dLCBbXSwgW3NpbGVudF0pCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fSUJNQ19fIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBjb21waWxlcl9pZD0iSUJNX0MiCisgICAgZmxhZ3NfZGJnX2FsbD0iLWcgLWcwIC1nMSAtZzIgLWczIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgIGZsYWdzX2RiZ19vZmY9IiIKKyAgICBmbGFnc19vcHRfYWxsPSItTyAtTzAgLU8xIC1PMiAtTzMgLU80IC1PNSIKKyAgICBmbGFnc19vcHRfYWxsPSIkZmxhZ3Nfb3B0X2FsbCAtcW5vb3B0aW1pemUiCisgICAgZmxhZ3Nfb3B0X2FsbD0iJGZsYWdzX29wdF9hbGwgLXFvcHRpbWl6ZT0wIgorICAgIGZsYWdzX29wdF9hbGw9IiRmbGFnc19vcHRfYWxsIC1xb3B0aW1pemU9MSIKKyAgICBmbGFnc19vcHRfYWxsPSIkZmxhZ3Nfb3B0X2FsbCAtcW9wdGltaXplPTIiCisgICAgZmxhZ3Nfb3B0X2FsbD0iJGZsYWdzX29wdF9hbGwgLXFvcHRpbWl6ZT0zIgorICAgIGZsYWdzX29wdF9hbGw9IiRmbGFnc19vcHRfYWxsIC1xb3B0aW1pemU9NCIKKyAgICBmbGFnc19vcHRfYWxsPSIkZmxhZ3Nfb3B0X2FsbCAtcW9wdGltaXplPTUiCisgICAgZmxhZ3Nfb3B0X3llcz0iLU8yIgorICAgIGZsYWdzX29wdF9vZmY9Ii1xbm9vcHRpbWl6ZSIKKyAgICBmbGFnc19wcmVmZXJfY3BwZmxhZ3M9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfQ09NUElMRVJfSU5URUxfQworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBJbnRlbCBDLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19DT01QSUxFUl9JTlRFTF9DXSwgWworICBBQ19CRUZPUkUoWyQwXSxbQ1VSTF9DSEVDS19DT01QSUxFUl9HTlVfQ10pZG5sCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgaXMgSW50ZWwgQ10pCisgIENVUkxfQ0hFQ0tfREVGKFtfX0lOVEVMX0NPTVBJTEVSXSwgW10sIFtzaWxlbnRdKQorICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX0lOVEVMX0NPTVBJTEVSIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBjb21waWxlcl9udW09IiRjdXJsX2N2X2RlZl9fX0lOVEVMX0NPTVBJTEVSIgorICAgIENVUkxfQ0hFQ0tfREVGKFtfX3VuaXhfX10sIFtdLCBbc2lsZW50XSkKKyAgICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX3VuaXhfXyIgPSAieWVzIjsgdGhlbgorICAgICAgY29tcGlsZXJfaWQ9IklOVEVMX1VOSVhfQyIKKyAgICAgIGZsYWdzX2RiZ19hbGw9Ii1nIC1nMCIKKyAgICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgICAgZmxhZ3NfZGJnX29mZj0iLWcwIgorICAgICAgZmxhZ3Nfb3B0X2FsbD0iLU8gLU8wIC1PMSAtTzIgLU8zIC1PcyIKKyAgICAgIGZsYWdzX29wdF95ZXM9Ii1PMiIKKyAgICAgIGZsYWdzX29wdF9vZmY9Ii1PMCIKKyAgICBlbHNlCisgICAgICBjb21waWxlcl9pZD0iSU5URUxfV0lORE9XU19DIgorICAgICAgZmxhZ3NfZGJnX2FsbD0iL1pJIC9aaSAvekkgL3ppIC9aRCAvWmQgL3pEIC96ZCAvWjcgL3o3IC9PeSAvT3ktIgorICAgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgL2RlYnVnIgorICAgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgL2RlYnVnOm5vbmUiCisgICAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAvZGVidWc6bWluaW1hbCIKKyAgICAgIGZsYWdzX2RiZ19hbGw9IiRmbGFnc19kYmdfYWxsIC9kZWJ1ZzpwYXJ0aWFsIgorICAgICAgZmxhZ3NfZGJnX2FsbD0iJGZsYWdzX2RiZ19hbGwgL2RlYnVnOmZ1bGwiCisgICAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAvZGVidWc6c2VtYW50aWNfc3RlcHBpbmciCisgICAgICBmbGFnc19kYmdfYWxsPSIkZmxhZ3NfZGJnX2FsbCAvZGVidWc6ZXh0ZW5kZWQiCisgICAgICBmbGFnc19kYmdfeWVzPSIvWmkgL095LSIKKyAgICAgIGZsYWdzX2RiZ19vZmY9Ii9kZWJ1Zzpub25lIC9PeS0iCisgICAgICBmbGFnc19vcHRfYWxsPSIvTyAvTzAgL08xIC9PMiAvTzMgL09kIC9PZyAvT2ctIC9PaSAvT2ktIgorICAgICAgZmxhZ3Nfb3B0X3llcz0iL08yIgorICAgICAgZmxhZ3Nfb3B0X29mZj0iL09kIgorICAgIGZpCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0NPTVBJTEVSX0xDQworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29tcGlsZXIgYmVpbmcgdXNlZCBpcyBMQ0MuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0NPTVBJTEVSX0xDQ10sIFsKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBpcyBMQ0NdKQorICBDVVJMX0NIRUNLX0RFRihbX19MQ0NfX10sIFtdLCBbc2lsZW50XSkKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19MQ0NfXyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgY29tcGlsZXJfaWQ9IkxDQyIKKyAgICBmbGFnc19kYmdfYWxsPSItZyIKKyAgICBmbGFnc19kYmdfeWVzPSItZyIKKyAgICBmbGFnc19kYmdfb2ZmPSIiCisgICAgZmxhZ3Nfb3B0X2FsbD0iIgorICAgIGZsYWdzX29wdF95ZXM9IiIKKyAgICBmbGFnc19vcHRfb2ZmPSIiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0NPTVBJTEVSX1NHSV9NSVBTX0MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbXBpbGVyIGJlaW5nIHVzZWQgaXMgU0dJIE1JUFMgQy4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfQ09NUElMRVJfU0dJX01JUFNfQ10sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19DT01QSUxFUl9TR0lfTUlQU1BST19DXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBpcyBTR0kgTUlQUyBDXSkKKyAgQ1VSTF9DSEVDS19ERUYoW19fR05VQ19fXSwgW10sIFtzaWxlbnRdKQorICBDVVJMX0NIRUNLX0RFRihbX19zZ2ldLCBbXSwgW3NpbGVudF0pCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fR05VQ19fIiA9ICJubyIgJiYKKyAgICB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX3NnaSIgPSAieWVzIiAmJgorICAgIHRlc3QgIiRjb21waWxlcl9pZCIgPSAidW5rbm93biI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGNvbXBpbGVyX2lkPSJTR0lfTUlQU19DIgorICAgIGZsYWdzX2RiZ19hbGw9Ii1nIC1nMCAtZzEgLWcyIC1nMyIKKyAgICBmbGFnc19kYmdfeWVzPSItZyIKKyAgICBmbGFnc19kYmdfb2ZmPSItZzAiCisgICAgZmxhZ3Nfb3B0X2FsbD0iLU8gLU8wIC1PMSAtTzIgLU8zIC1PZmFzdCIKKyAgICBmbGFnc19vcHRfeWVzPSItTzIiCisgICAgZmxhZ3Nfb3B0X29mZj0iLU8wIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19DT01QSUxFUl9TR0lfTUlQU1BST19DCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBjb21waWxlciBiZWluZyB1c2VkIGlzIFNHSSBNSVBTcHJvIEMuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0NPTVBJTEVSX1NHSV9NSVBTUFJPX0NdLCBbCisgIEFDX0JFRk9SRShbJDBdLFtDVVJMX0NIRUNLX0NPTVBJTEVSX1NHSV9NSVBTX0NdKWRubAorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGlzIFNHSSBNSVBTcHJvIENdKQorICBDVVJMX0NIRUNLX0RFRihbX19HTlVDX19dLCBbXSwgW3NpbGVudF0pCisgIENVUkxfQ0hFQ0tfREVGKFtfQ09NUElMRVJfVkVSU0lPTl0sIFtdLCBbc2lsZW50XSkKKyAgQ1VSTF9DSEVDS19ERUYoW19TR0lfQ09NUElMRVJfVkVSU0lPTl0sIFtdLCBbc2lsZW50XSkKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19HTlVDX18iID0gIm5vIiAmJgorICAgICh0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fU0dJX0NPTVBJTEVSX1ZFUlNJT04iID0gInllcyIgfHwKKyAgICAgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX0NPTVBJTEVSX1ZFUlNJT04iID0gInllcyIpOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBjb21waWxlcl9pZD0iU0dJX01JUFNQUk9fQyIKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtZzAgLWcxIC1nMiAtZzMiCisgICAgZmxhZ3NfZGJnX3llcz0iLWciCisgICAgZmxhZ3NfZGJnX29mZj0iLWcwIgorICAgIGZsYWdzX29wdF9hbGw9Ii1PIC1PMCAtTzEgLU8yIC1PMyAtT2Zhc3QiCisgICAgZmxhZ3Nfb3B0X3llcz0iLU8yIgorICAgIGZsYWdzX29wdF9vZmY9Ii1PMCIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfQ09NUElMRVJfU1VOUFJPX0MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbXBpbGVyIGJlaW5nIHVzZWQgaXMgU3VuUHJvIEMuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0NPTVBJTEVSX1NVTlBST19DXSwgWworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGlzIFN1blBybyBDXSkKKyAgQ1VSTF9DSEVDS19ERUYoW19fU1VOUFJPX0NdLCBbXSwgW3NpbGVudF0pCisgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fU1VOUFJPX0MiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGNvbXBpbGVyX2lkPSJTVU5QUk9fQyIKKyAgICBmbGFnc19kYmdfYWxsPSItZyAtcyIKKyAgICBmbGFnc19kYmdfeWVzPSItZyIKKyAgICBmbGFnc19kYmdfb2ZmPSItcyIKKyAgICBmbGFnc19vcHRfYWxsPSItTyAteE8gLXhPMSAteE8yIC14TzMgLXhPNCAteE81IgorICAgIGZsYWdzX29wdF95ZXM9Ii14TzIiCisgICAgZmxhZ3Nfb3B0X29mZj0iIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19DT01QSUxFUl9USU5ZX0MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbXBpbGVyIGJlaW5nIHVzZWQgaXMgVGlueSBDLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19DT01QSUxFUl9USU5ZX0NdLCBbCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgaXMgVGlueSBDXSkKKyAgQ1VSTF9DSEVDS19ERUYoW19fVElOWUNfX10sIFtdLCBbc2lsZW50XSkKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfX19USU5ZQ19fIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBjb21waWxlcl9pZD0iVElOWV9DIgorICAgIGZsYWdzX2RiZ19hbGw9Ii1nIC1iIgorICAgIGZsYWdzX2RiZ195ZXM9Ii1nIgorICAgIGZsYWdzX2RiZ19vZmY9IiIKKyAgICBmbGFnc19vcHRfYWxsPSIiCisgICAgZmxhZ3Nfb3B0X3llcz0iIgorICAgIGZsYWdzX29wdF9vZmY9IiIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfQ09NUElMRVJfV0FUQ09NX0MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbXBpbGVyIGJlaW5nIHVzZWQgaXMgV2F0Y29tIEMuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0NPTVBJTEVSX1dBVENPTV9DXSwgWworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGlzIFdhdGNvbSBDXSkKKyAgQ1VSTF9DSEVDS19ERUYoW19fV0FUQ09NQ19fXSwgW10sIFtzaWxlbnRdKQorICBpZiB0ZXN0ICIkY3VybF9jdl9oYXZlX2RlZl9fX1dBVENPTUNfXyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQ1VSTF9DSEVDS19ERUYoW19fVU5JWF9fXSwgW10sIFtzaWxlbnRdKQorICAgIGlmIHRlc3QgIiRjdXJsX2N2X2hhdmVfZGVmX19fVU5JWF9fIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBjb21waWxlcl9pZD0iV0FUQ09NX1VOSVhfQyIKKyAgICAgIGZsYWdzX2RiZ19hbGw9Ii1nMSAtZzErIC1nMiAtZzMiCisgICAgICBmbGFnc19kYmdfeWVzPSItZzIiCisgICAgICBmbGFnc19kYmdfb2ZmPSIiCisgICAgICBmbGFnc19vcHRfYWxsPSItTzAgLU8xIC1PMiAtTzMiCisgICAgICBmbGFnc19vcHRfeWVzPSItTzIiCisgICAgICBmbGFnc19vcHRfb2ZmPSItTzAiCisgICAgZWxzZQorICAgICAgY29tcGlsZXJfaWQ9IldBVENPTV9XSU5ET1dTX0MiCisgICAgICBmbGFnc19kYmdfYWxsPSIiCisgICAgICBmbGFnc19kYmdfeWVzPSIiCisgICAgICBmbGFnc19kYmdfb2ZmPSIiCisgICAgICBmbGFnc19vcHRfYWxsPSIiCisgICAgICBmbGFnc19vcHRfeWVzPSIiCisgICAgICBmbGFnc19vcHRfb2ZmPSIiCisgICAgZmkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ09OVkVSVF9JTkNMVURFX1RPX0lTWVNURU0KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hhbmdlcyBzdGFuZGFyZCBpbmNsdWRlIHBhdGhzIHByZXNlbnQgaW4gQ0ZMQUdTCitkbmwgYW5kIENQUEZMQUdTIGludG8gaXN5c3RlbSBpbmNsdWRlIHBhdGhzLiBUaGlzIGlzCitkbmwgZG9uZSB0byBwcmV2ZW50IEdOVUMgZnJvbSBnZW5lcmF0aW5nIHdhcm5pbmdzIG9uCitkbmwgaGVhZGVycyBmcm9tIHRoZXNlIGxvY2F0aW9ucywgYWx0aG91Z2ggb24gYW5jaWVudAorZG5sIEdOVUMgdmVyc2lvbnMgdGhlc2Ugd2FybmluZ3MgYXJlIG5vdCBzaWxlbmNlZC4KKworQUNfREVGVU4oW0NVUkxfQ09OVkVSVF9JTkNMVURFX1RPX0lTWVNURU1dLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfU0hGVU5DX1NRVUVFWkVdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0NPTVBJTEVSXSlkbmwKKyAgaWYgdGVzdCAiJGNvbXBpbGVyX2lkIiA9ICJHTlVfQyIgfHwKKyAgICB0ZXN0ICIkY29tcGlsZXJfaWQiID0gIkNMQU5HIjsgdGhlbgorICAgIHRtcF9oYXNfaW5jbHVkZT0ibm8iCisgICAgdG1wX2NoZ19GTEFHUz0iJENGTEFHUyIKKyAgICBmb3Igd29yZDEgaW4gJHRtcF9jaGdfRkxBR1M7IGRvCisgICAgICBjYXNlICIkd29yZDEiIGluCisgICAgICAgIC1JKikKKyAgICAgICAgICB0bXBfaGFzX2luY2x1ZGU9InllcyIKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgICBpZiB0ZXN0ICIkdG1wX2hhc19pbmNsdWRlIiA9ICJ5ZXMiOyB0aGVuCisgICAgICB0bXBfY2hnX0ZMQUdTPWBlY2hvICIkdG1wX2NoZ19GTEFHUyIgfCAiJFNFRCIgJ3MvXi1JLyAtaXN5c3RlbSAvZydgCisgICAgICB0bXBfY2hnX0ZMQUdTPWBlY2hvICIkdG1wX2NoZ19GTEFHUyIgfCAiJFNFRCIgJ3MvIC1JLyAtaXN5c3RlbSAvZydgCisgICAgICBDRkxBR1M9IiR0bXBfY2hnX0ZMQUdTIgorICAgICAgc3F1ZWV6ZSBDRkxBR1MKKyAgICBmaQorICAgIHRtcF9oYXNfaW5jbHVkZT0ibm8iCisgICAgdG1wX2NoZ19GTEFHUz0iJENQUEZMQUdTIgorICAgIGZvciB3b3JkMSBpbiAkdG1wX2NoZ19GTEFHUzsgZG8KKyAgICAgIGNhc2UgIiR3b3JkMSIgaW4KKyAgICAgICAgLUkqKQorICAgICAgICAgIHRtcF9oYXNfaW5jbHVkZT0ieWVzIgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIGlmIHRlc3QgIiR0bXBfaGFzX2luY2x1ZGUiID0gInllcyI7IHRoZW4KKyAgICAgIHRtcF9jaGdfRkxBR1M9YGVjaG8gIiR0bXBfY2hnX0ZMQUdTIiB8ICIkU0VEIiAncy9eLUkvIC1pc3lzdGVtIC9nJ2AKKyAgICAgIHRtcF9jaGdfRkxBR1M9YGVjaG8gIiR0bXBfY2hnX0ZMQUdTIiB8ICIkU0VEIiAncy8gLUkvIC1pc3lzdGVtIC9nJ2AKKyAgICAgIENQUEZMQUdTPSIkdG1wX2NoZ19GTEFHUyIKKyAgICAgIHNxdWVlemUgQ1BQRkxBR1MKKyAgICBmaQorICBmaQorXSkKKworCitkbmwgQ1VSTF9DT01QSUxFUl9XT1JLU19JRkVMU0UgKFtBQ1RJT04tSUYtV09SS1NdLCBbQUNUSU9OLUlGLU5PVC1XT1JLU10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiB0aGUgQyBjb21waWxlciBzZWVtcyB0byB3b3JrIHdpdGggdGhlCitkbmwgc2V0dGluZ3MgdGhhdCBhcmUgJ2FjdGl2ZScgYXQgdGhlIHRpbWUgdGhlIHRlc3QKK2RubCBpcyBwZXJmb3JtZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NPTVBJTEVSX1dPUktTX0lGRUxTRV0sIFsKKyAgZG5sIGNvbXBpbGF0aW9uIGNhcGFiaWxpdHkgdmVyaWZpY2F0aW9uCisgIHRtcF9jb21waWxlcl93b3Jrcz0idW5rbm93biIKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgIF1dLFtbCisgICAgICBpbnQgaSA9IDE7CisgICAgICByZXR1cm4gaTsKKyAgICBdXSkKKyAgXSxbCisgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJ5ZXMiCisgIF0sWworICAgIHRtcF9jb21waWxlcl93b3Jrcz0ibm8iCisgICAgZWNobyAiICIgPiY2CisgICAgc2VkICdzL14vY2MtZmFpbDogLycgY29uZnRlc3QuZXJyID4mNgorICAgIGVjaG8gIiAiID4mNgorICBdKQorICBkbmwgbGlua2luZyBjYXBhYmlsaXR5IHZlcmlmaWNhdGlvbgorICBpZiB0ZXN0ICIkdG1wX2NvbXBpbGVyX3dvcmtzIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTElOS19JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICBdXSxbWworICAgICAgICBpbnQgaSA9IDE7CisgICAgICAgIHJldHVybiBpOworICAgICAgXV0pCisgICAgXSxbCisgICAgICB0bXBfY29tcGlsZXJfd29ya3M9InllcyIKKyAgICBdLFsKKyAgICAgIHRtcF9jb21waWxlcl93b3Jrcz0ibm8iCisgICAgICBlY2hvICIgIiA+JjYKKyAgICAgIHNlZCAncy9eL2xpbmstZmFpbDogLycgY29uZnRlc3QuZXJyID4mNgorICAgICAgZWNobyAiICIgPiY2CisgICAgXSkKKyAgZmkKKyAgZG5sIG9ubHkgZG8gcnVudGltZSB2ZXJpZmljYXRpb24gd2hlbiBub3QgY3Jvc3MtY29tcGlsaW5nCisgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICB0ZXN0ICIkdG1wX2NvbXBpbGVyX3dvcmtzIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfUlVOX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyMgICAgICAgaWZkZWYgX19TVERDX18KKyMgICAgICAgICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgICAgICAgZW5kaWYKKyAgICAgIF1dLFtbCisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgZXhpdChpKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgdG1wX2NvbXBpbGVyX3dvcmtzPSJ5ZXMiCisgICAgXSxbCisgICAgICB0bXBfY29tcGlsZXJfd29ya3M9Im5vIgorICAgICAgZWNobyAiICIgPiY2CisgICAgICBlY2hvICJydW4tZmFpbDogdGVzdCBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjYKKyAgICAgIGVjaG8gIiAiID4mNgorICAgIF0pCisgIGZpCisgIGRubCBicmFuY2ggdXBvbiB0ZXN0IHJlc3VsdAorICBpZiB0ZXN0ICIkdG1wX2NvbXBpbGVyX3dvcmtzIiA9ICJ5ZXMiOyB0aGVuCisgIGlmZWxzZSgkMSwsOixbJDFdKQorICBpZmVsc2UoJDIsLCxbZWxzZQorICAgICQyXSkKKyAgZmkKK10pCisKKworZG5sIENVUkxfU0VUX0NPTVBJTEVSX0JBU0lDX09QVFMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0cyBjb21waWxlciBzcGVjaWZpYyBvcHRpb25zL2ZsYWdzIHdoaWNoIGRvIG5vdAorZG5sIGRlcGVuZCBvbiBjb25maWd1cmUncyBkZWJ1Zywgb3B0aW1pemUgb3Igd2FybmluZ3MKK2RubCBvcHRpb25zLgorCitBQ19ERUZVTihbQ1VSTF9TRVRfQ09NUElMRVJfQkFTSUNfT1BUU10sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19DT01QSUxFUl0pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfU0hGVU5DX1NRVUVFWkVdKWRubAorICAjCisgIGlmIHRlc3QgIiRjb21waWxlcl9pZCIgIT0gInVua25vd24iOyB0aGVuCisgICAgIworICAgIGlmIHRlc3QgIiRjb21waWxlcl9pZCIgPSAiR05VX0MiIHx8CisgICAgICB0ZXN0ICIkY29tcGlsZXJfaWQiID0gIkNMQU5HIjsgdGhlbgorICAgICAgQ1VSTF9DT05WRVJUX0lOQ0xVREVfVE9fSVNZU1RFTQorICAgIGZpCisgICAgIworICAgIHRtcF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgdG1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgIHRtcF9DUFBGTEFHUz0iIgorICAgIHRtcF9DRkxBR1M9IiIKKyAgICAjCisgICAgY2FzZSAiJGNvbXBpbGVyX2lkIiBpbgorICAgICAgICAjCisgICAgICBDTEFORykKKyAgICAgICAgIworICAgICAgICBkbmwgRGlzYWJsZSB3YXJuaW5ncyBmb3IgdW51c2VkIGFyZ3VtZW50cywgb3RoZXJ3aXNlIGNsYW5nIHdpbGwKKyAgICAgICAgZG5sIHdhcm4gYWJvdXQgY29tcGlsZS10aW1lIGFyZ3VtZW50cyB1c2VkIGR1cmluZyBsaW5rLXRpbWUsIGxpa2UKKyAgICAgICAgZG5sIC1PIGFuZCAtZyBhbmQgLXBlZGFudGljLgorICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtUXVudXNlZC1hcmd1bWVudHMiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIERFQ19DKQorICAgICAgICAjCisgICAgICAgIGRubCBTZWxlY3Qgc3RyaWN0IEFOU0kgQyBjb21waWxlciBtb2RlCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1zdGQxIgorICAgICAgICBkbmwgVHVybiBvZmYgb3B0aW1pemVyIEFOU0kgQyBhbGlhc2luZyBydWxlcworICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtbm9hbnNpX2FsaWFzIgorICAgICAgICBkbmwgR2VuZXJhdGUgd2FybmluZ3MgZm9yIG1pc3NpbmcgZnVuY3Rpb24gcHJvdG90eXBlcworICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtd2FybnByb3RvcyIKKyAgICAgICAgZG5sIENoYW5nZSBzb21lIHdhcm5pbmdzIGludG8gZmF0YWwgZXJyb3JzCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1tc2dfZmF0YWwgdG9vZmV3YXJncyx0b29tYW55YXJncyIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgR05VX0MpCisgICAgICAgICMKKyAgICAgICAgZG5sIFBsYWNlaG9sZGVyCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBIUF9VWF9DKQorICAgICAgICAjCisgICAgICAgIGRubCBEaXNhbGxvdyBydW4tdGltZSBkZXJlZmVyZW5jaW5nIG9mIG51bGwgcG9pbnRlcnMKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLXoiCisgICAgICAgIGRubCBEaXNhYmxlIHNvbWUgcmVtYXJrcworICAgICAgICBkbmwgIzQyMjc6IHBhZGRpbmcgc3RydWN0IHdpdGggbiBieXRlcyB0byBhbGlnbiBtZW1iZXIKKyAgICAgICAgZG5sICM0MjU1OiBwYWRkaW5nIHNpemUgb2Ygc3RydWN0IHdpdGggbiBieXRlcyB0byBhbGlnbm1lbnQgYm91bmRhcnkKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgK1cgNDIyNyw0MjU1IgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBJQk1fQykKKyAgICAgICAgIworICAgICAgICBkbmwgRW5zdXJlIHRoYXQgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBhcmUgYWx3YXlzIHRocmVhZC1zYWZlLgorICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLXF0aHJlYWRlZCIKKyAgICAgICAgZG5sIERpc2FibGUgdHlwZSBiYXNlZCBzdHJpY3QgYWxpYXNpbmcgb3B0aW1pemF0aW9ucywgdXNpbmcgd29yc3QKKyAgICAgICAgZG5sIGNhc2UgYWxpYXNpbmcgYXNzdW1wdGlvbnMgd2hlbiBjb21waWxpbmcuIFR5cGUgYmFzZWQgYWxpYXNpbmcKKyAgICAgICAgZG5sIHdvdWxkIHJlc3RyaWN0IHRoZSBsdmFsdWVzIHRoYXQgY291bGQgYmUgc2FmZWx5IHVzZWQgdG8gYWNjZXNzCisgICAgICAgIGRubCBhIGRhdGEgb2JqZWN0LgorICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLXFub2Fuc2lhbGlhcyIKKyAgICAgICAgZG5sIEZvcmNlIGNvbXBpbGVyIHRvIHN0b3AgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIHBoYXNlLCB3aXRob3V0CisgICAgICAgIGRubCBnZW5lcmF0aW5nIGFuIG9iamVjdCBjb2RlIGZpbGUgd2hlbiBjb21waWxhdGlvbiBoYXMgZXJyb3JzLgorICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLXFoYWx0PWUiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIElOVEVMX1VOSVhfQykKKyAgICAgICAgIworICAgICAgICBkbmwgT24gdW5peCB0aGlzIGNvbXBpbGVyIHVzZXMgZ2NjJ3MgaGVhZGVyIGZpbGVzLCBzbworICAgICAgICBkbmwgd2Ugc2VsZWN0IEFOU0kgQzg5IGRpYWxlY3QgcGx1cyBHTlUgZXh0ZW5zaW9ucy4KKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLXN0ZD1nbnU4OSIKKyAgICAgICAgZG5sIENoYW5nZSBzb21lIHdhcm5pbmdzIGludG8gZXJyb3JzCisgICAgICAgIGRubCAjMTQwOiB0b28gbWFueSBhcmd1bWVudHMgaW4gZnVuY3Rpb24gY2FsbAorICAgICAgICBkbmwgIzE0NzogZGVjbGFyYXRpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggJ3ByZXZpb3VzIG9uZScKKyAgICAgICAgZG5sICMxNjU6IHRvbyBmZXcgYXJndW1lbnRzIGluIGZ1bmN0aW9uIGNhbGwKKyAgICAgICAgZG5sICMyNjY6IGZ1bmN0aW9uIGRlY2xhcmVkIGltcGxpY2l0bHkKKyAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC13ZSAxNDAsMTQ3LDE2NSwyNjYiCisgICAgICAgIGRubCBEaXNhYmxlIHNvbWUgcmVtYXJrcworICAgICAgICBkbmwgIzI3OTogY29udHJvbGxpbmcgZXhwcmVzc2lvbiBpcyBjb25zdGFudAorICAgICAgICBkbmwgIzk4MTogb3BlcmFuZHMgYXJlIGV2YWx1YXRlZCBpbiB1bnNwZWNpZmllZCBvcmRlcgorICAgICAgICBkbmwgIzE0Njk6ICJjYyIgY2xvYmJlciBpZ25vcmVkCisgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtd2QgMjc5LDk4MSwxNDY5IgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBJTlRFTF9XSU5ET1dTX0MpCisgICAgICAgICMKKyAgICAgICAgZG5sIFBsYWNlaG9sZGVyCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBMQ0MpCisgICAgICAgICMKKyAgICAgICAgZG5sIERpc2FsbG93IHJ1bi10aW1lIGRlcmVmZXJlbmNpbmcgb2YgbnVsbCBwb2ludGVycworICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtbiIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgU0dJX01JUFNfQykKKyAgICAgICAgIworICAgICAgICBkbmwgUGxhY2Vob2xkZXIKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFNHSV9NSVBTUFJPX0MpCisgICAgICAgICMKKyAgICAgICAgZG5sIFBsYWNlaG9sZGVyCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBTVU5QUk9fQykKKyAgICAgICAgIworICAgICAgICBkbmwgUGxhY2Vob2xkZXIKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFRJTllfQykKKyAgICAgICAgIworICAgICAgICBkbmwgUGxhY2Vob2xkZXIKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFdBVENPTV9VTklYX0MpCisgICAgICAgICMKKyAgICAgICAgZG5sIFBsYWNlaG9sZGVyCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgICA7OworICAgICAgICAjCisgICAgICBXQVRDT01fV0lORE9XU19DKQorICAgICAgICAjCisgICAgICAgIGRubCBQbGFjZWhvbGRlcgorICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgIGVzYWMKKyAgICAjCisgICAgc3F1ZWV6ZSB0bXBfQ1BQRkxBR1MKKyAgICBzcXVlZXplIHRtcF9DRkxBR1MKKyAgICAjCisgICAgaWYgdGVzdCAhIC16ICIkdG1wX0NGTEFHUyIgfHwgdGVzdCAhIC16ICIkdG1wX0NQUEZMQUdTIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBhY2NlcHRzIHNvbWUgYmFzaWMgb3B0aW9uc10pCisgICAgICBDUFBGTEFHUz0iJHRtcF9zYXZlX0NQUEZMQUdTICR0bXBfQ1BQRkxBR1MiCisgICAgICBDRkxBR1M9IiR0bXBfc2F2ZV9DRkxBR1MgJHRtcF9DRkxBR1MiCisgICAgICBzcXVlZXplIENQUEZMQUdTCisgICAgICBzcXVlZXplIENGTEFHUworICAgICAgQ1VSTF9DT01QSUxFUl9XT1JLU19JRkVMU0UoWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICBBQ19NU0dfTk9USUNFKFtjb21waWxlciBvcHRpb25zIGFkZGVkOiAkdG1wX0NGTEFHUyAkdG1wX0NQUEZMQUdTXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIEFDX01TR19XQVJOKFtjb21waWxlciBvcHRpb25zIHJlamVjdGVkOiAkdG1wX0NGTEFHUyAkdG1wX0NQUEZMQUdTXSkKKyAgICAgICAgZG5sIHJlc3RvcmUgaW5pdGlhbCBzZXR0aW5ncworICAgICAgICBDUFBGTEFHUz0iJHRtcF9zYXZlX0NQUEZMQUdTIgorICAgICAgICBDRkxBR1M9IiR0bXBfc2F2ZV9DRkxBR1MiCisgICAgICBdKQorICAgIGZpCisgICAgIworICBmaQorXSkKKworCitkbmwgQ1VSTF9TRVRfQ09NUElMRVJfREVCVUdfT1BUUworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXRzIGNvbXBpbGVyIHNwZWNpZmljIG9wdGlvbnMvZmxhZ3Mgd2hpY2ggZGVwZW5kCitkbmwgb24gY29uZmlndXJlJ3MgZGVidWcgb3B0aW9uLgorCitBQ19ERUZVTihbQ1VSTF9TRVRfQ09NUElMRVJfREVCVUdfT1BUU10sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19PUFRJT05fREVCVUddKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0NPTVBJTEVSXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9TSEZVTkNfU1FVRUVaRV0pZG5sCisgICMKKyAgaWYgdGVzdCAiJGNvbXBpbGVyX2lkIiAhPSAidW5rbm93biI7IHRoZW4KKyAgICAjCisgICAgdG1wX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgIHRtcF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgIworICAgIHRtcF9vcHRpb25zPSIiCisgICAgdG1wX0NGTEFHUz0iJENGTEFHUyIKKyAgICB0bXBfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICBDVVJMX1ZBUl9TVFJJUChbdG1wX0NGTEFHU10sWyRmbGFnc19kYmdfYWxsXSkKKyAgICBDVVJMX1ZBUl9TVFJJUChbdG1wX0NQUEZMQUdTXSxbJGZsYWdzX2RiZ19hbGxdKQorICAgICMKKyAgICBpZiB0ZXN0ICIkd2FudF9kZWJ1ZyIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBhY2NlcHRzIGRlYnVnIGVuYWJsaW5nIG9wdGlvbnNdKQorICAgICAgdG1wX29wdGlvbnM9IiRmbGFnc19kYmdfeWVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJHdhbnRfZGVidWciID0gIm5vIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBhY2NlcHRzIGRlYnVnIGRpc2FibGluZyBvcHRpb25zXSkKKyAgICAgIHRtcF9vcHRpb25zPSIkZmxhZ3NfZGJnX29mZiIKKyAgICBmaQorICAgICMKKyAgICBpZiB0ZXN0ICIkZmxhZ3NfcHJlZmVyX2NwcGZsYWdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBDUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAkdG1wX29wdGlvbnMiCisgICAgICBDRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgIGVsc2UKKyAgICAgIENQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIgorICAgICAgQ0ZMQUdTPSIkdG1wX0NGTEFHUyAkdG1wX29wdGlvbnMiCisgICAgZmkKKyAgICBzcXVlZXplIENQUEZMQUdTCisgICAgc3F1ZWV6ZSBDRkxBR1MKKyAgICBDVVJMX0NPTVBJTEVSX1dPUktTX0lGRUxTRShbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgQUNfTVNHX05PVElDRShbY29tcGlsZXIgb3B0aW9ucyBhZGRlZDogJHRtcF9vcHRpb25zXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIEFDX01TR19XQVJOKFtjb21waWxlciBvcHRpb25zIHJlamVjdGVkOiAkdG1wX29wdGlvbnNdKQorICAgICAgZG5sIHJlc3RvcmUgaW5pdGlhbCBzZXR0aW5ncworICAgICAgQ1BQRkxBR1M9IiR0bXBfc2F2ZV9DUFBGTEFHUyIKKyAgICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyIKKyAgICBdKQorICAgICMKKyAgZmkKK10pCisKKworZG5sIENVUkxfU0VUX0NPTVBJTEVSX09QVElNSVpFX09QVFMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0cyBjb21waWxlciBzcGVjaWZpYyBvcHRpb25zL2ZsYWdzIHdoaWNoIGRlcGVuZAorZG5sIG9uIGNvbmZpZ3VyZSdzIG9wdGltaXplIG9wdGlvbi4KKworQUNfREVGVU4oW0NVUkxfU0VUX0NPTVBJTEVSX09QVElNSVpFX09QVFNdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfT1BUSU9OX09QVElNSVpFXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19DT01QSUxFUl0pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfU0hGVU5DX1NRVUVFWkVdKWRubAorICAjCisgIGlmIHRlc3QgIiRjb21waWxlcl9pZCIgIT0gInVua25vd24iOyB0aGVuCisgICAgIworICAgIHRtcF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICB0bXBfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgICMKKyAgICB0bXBfb3B0aW9ucz0iIgorICAgIHRtcF9DRkxBR1M9IiRDRkxBR1MiCisgICAgdG1wX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgaG9ub3Jfb3B0aW1pemVfb3B0aW9uPSJ5ZXMiCisgICAgIworICAgIGRubCBJZiBvcHRpbWl6YXRpb24gcmVxdWVzdCBzZXR0aW5nIGhhcyBub3QgYmVlbiBleHBsaWNpdGx5IHNwZWNpZmllZCwKKyAgICBkbmwgaXQgaGFzIGJlZW4gZGVyaXZlZCBmcm9tIHRoZSBkZWJ1ZyBzZXR0aW5nIGFuZCBpbml0aWFsbHkgYXNzdW1lZC4KKyAgICBkbmwgVGhpcyBpbml0aWFsbHkgYXNzdW1lZCBvcHRpbWl6ZXIgc2V0dGluZyB3aWxsIGZpbmFsbHkgYmUgaWdub3JlZAorICAgIGRubCBpZiBDRkxBR1Mgb3IgQ1BQRkxBR1MgYWxyZWFkeSBob2xkIG9wdGltaXplciBmbGFncy4gVGhpcyBpbXBsaWVzCisgICAgZG5sIHRoYXQgYW4gaW5pdGlhbGx5IGFzc3VtZWQgb3B0aW1pemVyIHNldHRpbmcgbWlnaHQgbm90IGJlIGhvbm9yZWQuCisgICAgIworICAgIGlmIHRlc3QgIiR3YW50X29wdGltaXplIiA9ICJhc3N1bWVfbm8iIHx8CisgICAgICAgdGVzdCAiJHdhbnRfb3B0aW1pemUiID0gImFzc3VtZV95ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIG9wdGltaXplciBhc3N1bWVkIHNldHRpbmcgbWlnaHQgYmUgdXNlZF0pCisgICAgICBDVVJMX1ZBUl9NQVRDSF9JRkVMU0UoW3RtcF9DRkxBR1NdLFskZmxhZ3Nfb3B0X2FsbF0sWworICAgICAgICBob25vcl9vcHRpbWl6ZV9vcHRpb249Im5vIgorICAgICAgXSkKKyAgICAgIENVUkxfVkFSX01BVENIX0lGRUxTRShbdG1wX0NQUEZMQUdTXSxbJGZsYWdzX29wdF9hbGxdLFsKKyAgICAgICAgaG9ub3Jfb3B0aW1pemVfb3B0aW9uPSJubyIKKyAgICAgIF0pCisgICAgICBBQ19NU0dfUkVTVUxUKFskaG9ub3Jfb3B0aW1pemVfb3B0aW9uXSkKKyAgICAgIGlmIHRlc3QgIiRob25vcl9vcHRpbWl6ZV9vcHRpb24iID0gInllcyI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfb3B0aW1pemUiID0gImFzc3VtZV95ZXMiOyB0aGVuCisgICAgICAgICAgd2FudF9vcHRpbWl6ZT0ieWVzIgorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICIkd2FudF9vcHRpbWl6ZSIgPSAiYXNzdW1lX25vIjsgdGhlbgorICAgICAgICAgIHdhbnRfb3B0aW1pemU9Im5vIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgICMKKyAgICBpZiB0ZXN0ICIkaG9ub3Jfb3B0aW1pemVfb3B0aW9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBDVVJMX1ZBUl9TVFJJUChbdG1wX0NGTEFHU10sWyRmbGFnc19vcHRfYWxsXSkKKyAgICAgIENVUkxfVkFSX1NUUklQKFt0bXBfQ1BQRkxBR1NdLFskZmxhZ3Nfb3B0X2FsbF0pCisgICAgICBpZiB0ZXN0ICIkd2FudF9vcHRpbWl6ZSIgPSAieWVzIjsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGFjY2VwdHMgb3B0aW1pemVyIGVuYWJsaW5nIG9wdGlvbnNdKQorICAgICAgICB0bXBfb3B0aW9ucz0iJGZsYWdzX29wdF95ZXMiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdhbnRfb3B0aW1pemUiID0gIm5vIjsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIGFjY2VwdHMgb3B0aW1pemVyIGRpc2FibGluZyBvcHRpb25zXSkKKyAgICAgICAgdG1wX29wdGlvbnM9IiRmbGFnc19vcHRfb2ZmIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRmbGFnc19wcmVmZXJfY3BwZmxhZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgJHRtcF9vcHRpb25zIgorICAgICAgICBDRkxBR1M9IiR0bXBfQ0ZMQUdTIgorICAgICAgZWxzZQorICAgICAgICBDUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSIkdG1wX0NGTEFHUyAkdG1wX29wdGlvbnMiCisgICAgICBmaQorICAgICAgc3F1ZWV6ZSBDUFBGTEFHUworICAgICAgc3F1ZWV6ZSBDRkxBR1MKKyAgICAgIENVUkxfQ09NUElMRVJfV09SS1NfSUZFTFNFKFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgQUNfTVNHX05PVElDRShbY29tcGlsZXIgb3B0aW9ucyBhZGRlZDogJHRtcF9vcHRpb25zXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIEFDX01TR19XQVJOKFtjb21waWxlciBvcHRpb25zIHJlamVjdGVkOiAkdG1wX29wdGlvbnNdKQorICAgICAgICBkbmwgcmVzdG9yZSBpbml0aWFsIHNldHRpbmdzCisgICAgICAgIENQUEZMQUdTPSIkdG1wX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyIKKyAgICAgIF0pCisgICAgZmkKKyAgICAjCisgIGZpCitdKQorCisKK2RubCBDVVJMX1NFVF9DT01QSUxFUl9XQVJOSU5HX09QVFMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0cyBjb21waWxlciBvcHRpb25zL2ZsYWdzIHdoaWNoIGRlcGVuZCBvbgorZG5sIGNvbmZpZ3VyZSdzIHdhcm5pbmdzIGdpdmVuIG9wdGlvbi4KKworQUNfREVGVU4oW0NVUkxfU0VUX0NPTVBJTEVSX1dBUk5JTkdfT1BUU10sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19PUFRJT05fV0FSTklOR1NdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0NPTVBJTEVSXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9TSEZVTkNfU1FVRUVaRV0pZG5sCisgICMKKyAgaWYgdGVzdCAiJGNvbXBpbGVyX2lkIiAhPSAidW5rbm93biI7IHRoZW4KKyAgICAjCisgICAgdG1wX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0bXBfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgdG1wX0NQUEZMQUdTPSIiCisgICAgdG1wX0NGTEFHUz0iIgorICAgICMKKyAgICBjYXNlICIkY29tcGlsZXJfaWQiIGluCisgICAgICAgICMKKyAgICAgIENMQU5HKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgZG5sIEFsbCB2ZXJzaW9ucyBvZiBjbGFuZyBzdXBwb3J0IHRoZSBzYW1lIHdhcm5pbmdzIGFzIGF0IGxlYXN0CisgICAgICAgICAgZG5sIGdjYyA0LjIuMSBleGNlcHQgLVd1bnVzZWQuCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLXBlZGFudGljIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XYWxsIC1XZXh0cmEiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdwb2ludGVyLWFyaXRoIC1Xd3JpdGUtc3RyaW5ncyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3NoYWRvdyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2lubGluZSAtV25lc3RlZC1leHRlcm5zIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdtaXNzaW5nLXByb3RvdHlwZXMiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1sb25nLWxvbmciCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdmbG9hdC1lcXVhbCIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLW11bHRpY2hhciAtV3NpZ24tY29tcGFyZSIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3VuZGVmIgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xbm8tZm9ybWF0LW5vbmxpdGVyYWwiCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdlbmRpZi1sYWJlbHMgLVdzdHJpY3QtcHJvdG90eXBlcyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2Nhc3QtYWxpZ24iCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1zeXN0ZW0taGVhZGVycyIKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3Nob3J0ZW4tNjQtdG8tMzIiCisgICAgICAgICAgIworICAgICAgICAgIGRubCBPbmx5IGNsYW5nIDEuMSBvciBsYXRlcgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMTAxIjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVd1bnVzZWQiCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgREVDX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICBkbmwgU2VsZWN0IGEgaGlnaGVyIHdhcm5pbmcgbGV2ZWwgdGhhbiBkZWZhdWx0IGxldmVsMgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1tc2dfZW5hYmxlIGxldmVsMyIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgR05VX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIERvIG5vdCBlbmFibGUgLXBlZGFudGljIHdoZW4gY3Jvc3MtY29tcGlsaW5nIHdpdGggYSBnY2Mgb2xkZXIKKyAgICAgICAgICBkbmwgdGhhbiAzLjAsIHRvIGF2b2lkIHdhcm5pbmdzIGZyb20gdGhpcmQgcGFydHkgc3lzdGVtIGhlYWRlcnMuCisgICAgICAgICAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiB8fAorICAgICAgICAgICAgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIzMDAiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtcGVkYW50aWMiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIFNldCBvZiBvcHRpb25zIHdlIGJlbGlldmUgKkFMTCogZ2NjIHZlcnNpb25zIHN1cHBvcnQ6CisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdhbGwgLVciCisgICAgICAgICAgIworICAgICAgICAgIGRubCBPbmx5IGdjYyAxLjQgb3IgbGF0ZXIKKyAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjEwNCI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XcG9pbnRlci1hcml0aCAtV3dyaXRlLXN0cmluZ3MiCisgICAgICAgICAgICBkbmwgSWYgbm90IGNyb3NzLWNvbXBpbGluZyB3aXRoIGEgZ2NjIG9sZGVyIHRoYW4gMy4wCisgICAgICAgICAgICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiIHx8CisgICAgICAgICAgICAgIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzAwIjsgdGhlbgorICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3VudXNlZCAtV3NoYWRvdyIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIE9ubHkgZ2NjIDIuNyBvciBsYXRlcgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMjA3IjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdpbmxpbmUgLVduZXN0ZWQtZXh0ZXJucyIKKyAgICAgICAgICAgIGRubCBJZiBub3QgY3Jvc3MtY29tcGlsaW5nIHdpdGggYSBnY2Mgb2xkZXIgdGhhbiAzLjAKKyAgICAgICAgICAgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgfHwKKyAgICAgICAgICAgICAgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIzMDAiOyB0aGVuCisgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMiCisgICAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XbWlzc2luZy1wcm90b3R5cGVzIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICBkbmwgT25seSBnY2MgMi45NSBvciBsYXRlcgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMjk1IjsgdGhlbgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1sb25nLWxvbmciCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIE9ubHkgZ2NjIDIuOTYgb3IgbGF0ZXIKKyAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjI5NiI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XZmxvYXQtZXF1YWwiCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLW11bHRpY2hhciAtV3NpZ24tY29tcGFyZSIKKyAgICAgICAgICAgIGRubCAtV3VuZGVmIHVzZWQgb25seSBpZiBnY2MgaXMgMi45NiBvciBsYXRlciBzaW5jZSB3ZSBnZXQKKyAgICAgICAgICAgIGRubCBsb3RzIG9mICJgX1BPU0lYX0NfU09VUkNFJyBpcyBub3QgZGVmaW5lZCIgaW4gc3lzdGVtCisgICAgICAgICAgICBkbmwgaGVhZGVycyB3aXRoIGdjYyAyLjk1LjQgb24gRnJlZUJTRCA0LjkKKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XdW5kZWYiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIE9ubHkgZ2NjIDIuOTcgb3IgbGF0ZXIKKyAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjI5NyI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xbm8tZm9ybWF0LW5vbmxpdGVyYWwiCisgICAgICAgICAgZmkKKyAgICAgICAgICAjCisgICAgICAgICAgZG5sIE9ubHkgZ2NjIDMuMCBvciBsYXRlcgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzAwIjsgdGhlbgorICAgICAgICAgICAgZG5sIC1XdW5yZWFjaGFibGUtY29kZSBzZWVtcyB0b3RhbGx5IHVucmVsaWFibGUgb24gbXkgZ2NjIDMuMy4yIG9uCisgICAgICAgICAgICBkbmwgb24gaTY4Ni1MaW51eCBhcyBpdCBnaXZlcyB1cyBoZWFwcyB3aXRoIGZhbHNlIHBvc2l0aXZlcy4KKyAgICAgICAgICAgIGRubCBBbHNvLCBvbiBnY2MgNC4wLlggaXQgaXMgdG90YWxseSB1bmJlYXJhYmxlIGFuZCBjb21wbGFpbnMgYWxsCisgICAgICAgICAgICBkbmwgb3ZlciBtYWtpbmcgaXQgdW51c2FibGUgZm9yIGdlbmVyaWMgcHVycG9zZXMuIExldCdzIG5vdCB1c2UgaXQuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyIKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICBkbmwgT25seSBnY2MgMy4zIG9yIGxhdGVyCisgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIzMDMiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV2VuZGlmLWxhYmVscyAtV3N0cmljdC1wcm90b3R5cGVzIgorICAgICAgICAgIGZpCisgICAgICAgICAgIworICAgICAgICAgIGRubCBPbmx5IGdjYyAzLjQgb3IgbGF0ZXIKKyAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjMwNCI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgICAgICAgIGZpCisgICAgICAgICAgIworICAgICAgICAgIGRubCBPbmx5IGdjYyA0LjIgb3IgbGF0ZXIKKyAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjQwMiI7IHRoZW4KKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XY2FzdC1hbGlnbiIKKyAgICAgICAgICBmaQorICAgICAgICAgICMKKyAgICAgICAgICBkbmwgT25seSBnY2MgNC4zIG9yIGxhdGVyCisgICAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICI0MDMiOyB0aGVuCisgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3R5cGUtbGltaXRzIC1Xb2xkLXN0eWxlLWRlY2xhcmF0aW9uIgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdtaXNzaW5nLXBhcmFtZXRlci10eXBlIC1XZW1wdHktYm9keSIKKyAgICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XY2xvYmJlcmVkIC1XaWdub3JlZC1xdWFsaWZpZXJzIgorICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdjb252ZXJzaW9uIC1Xbm8tc2lnbi1jb252ZXJzaW9uIC1XdmxhIgorICAgICAgICAgIGZpCisgICAgICAgICAgIworICAgICAgICBmaQorICAgICAgICAjCisgICAgICAgIGRubCBEbyBub3QgaXNzdWUgd2FybmluZ3MgZm9yIGNvZGUgaW4gc3lzdGVtIGluY2x1ZGUgcGF0aHMuCisgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMzAwIjsgdGhlbgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1Xbm8tc3lzdGVtLWhlYWRlcnMiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBkbmwgV2hlbiBjcm9zcy1jb21waWxpbmcgd2l0aCBhIGdjYyBvbGRlciB0aGFuIDMuMCwgZGlzYWJsZQorICAgICAgICAgIGRubCBzb21lIHdhcm5pbmdzIHRyaWdnZXJlZCBvbiB0aGlyZCBwYXJ0eSBzeXN0ZW0gaGVhZGVycy4KKyAgICAgICAgICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1nZSAiMTA0IjsgdGhlbgorICAgICAgICAgICAgICBkbmwgZ2NjIDEuNCBvciBsYXRlcgorICAgICAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV25vLXVudXNlZCAtV25vLXNoYWRvdyIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbnVtIiAtZ2UgIjIwNyI7IHRoZW4KKyAgICAgICAgICAgICAgZG5sIGdjYyAyLjcgb3IgbGF0ZXIKKyAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1taXNzaW5nLWRlY2xhcmF0aW9ucyIKKyAgICAgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVduby1taXNzaW5nLXByb3RvdHlwZXMiCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIEhQX1VYX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICBkbmwgSXNzdWUgYWxsIHdhcm5pbmdzCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgK3cxIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgICAjCisgICAgICBJQk1fQykKKyAgICAgICAgIworICAgICAgICBkbmwgUGxhY2Vob2xkZXIKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIElOVEVMX1VOSVhfQykKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkd2FudF93YXJuaW5ncyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9udW0iIC1ndCAiNjAwIjsgdGhlbgorICAgICAgICAgICAgZG5sIFNob3cgZXJyb3JzLCB3YXJuaW5ncywgYW5kIHJlbWFya3MKKyAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtV2FsbCAtdzIiCisgICAgICAgICAgICBkbmwgUGVyZm9ybSBleHRyYSBjb21waWxlLXRpbWUgY29kZSBjaGVja2luZworICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1XY2hlY2siCisgICAgICAgICAgICBkbmwgV2FybiBvbiBuZXN0ZWQgY29tbWVudHMKKyAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtV2NvbW1lbnQiCisgICAgICAgICAgICBkbmwgU2hvdyB3YXJuaW5ncyByZWxhdGl2ZSB0byBkZXByZWNhdGVkIGZlYXR1cmVzCisgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdkZXByZWNhdGVkIgorICAgICAgICAgICAgZG5sIEVuYWJsZSB3YXJuaW5ncyBmb3IgbWlzc2luZyBwcm90b3R5cGVzCisgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdtaXNzaW5nLXByb3RvdHlwZXMiCisgICAgICAgICAgICBkbmwgRW5hYmxlIHdhcm5pbmdzIGZvciA2NC1iaXQgcG9ydGFiaWxpdHkgaXNzdWVzCisgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdwNjQiCisgICAgICAgICAgICBkbmwgRW5hYmxlIHdhcm5pbmdzIGZvciBxdWVzdGlvbmFibGUgcG9pbnRlciBhcml0aG1ldGljCisgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVdwb2ludGVyLWFyaXRoIgorICAgICAgICAgICAgZG5sIENoZWNrIGZvciBmdW5jdGlvbiByZXR1cm4gdHlwdyBpc3N1ZXMKKyAgICAgICAgICAgIHRtcF9DUFBGTEFHUz0iJHRtcF9DUFBGTEFHUyAtV3JldHVybi10eXBlIgorICAgICAgICAgICAgZG5sIFdhcm4gb24gdmFyaWFibGUgZGVjbGFyYXRpb25zIGhpZGluZyBhIHByZXZpb3VzIG9uZQorICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1Xc2hhZG93IgorICAgICAgICAgICAgZG5sIFdhcm4gd2hlbiBhIHZhcmlhYmxlIGlzIHVzZWQgYmVmb3JlIGluaXRpYWxpemVkCisgICAgICAgICAgICB0bXBfQ1BQRkxBR1M9IiR0bXBfQ1BQRkxBR1MgLVd1bmluaXRpYWxpemVkIgorICAgICAgICAgICAgZG5sIFdhcm4gaWYgYSBkZWNsYXJlZCBmdW5jdGlvbiBpcyBub3QgdXNlZAorICAgICAgICAgICAgdG1wX0NQUEZMQUdTPSIkdG1wX0NQUEZMQUdTIC1XdW51c2VkLWZ1bmN0aW9uIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIGRubCBEaXNhYmxlIHVzaW5nIEVCUCByZWdpc3RlciBpbiBvcHRpbWl6YXRpb25zCisgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIgorICAgICAgICBkbmwgRGlzYWJsZSB1c2Ugb2YgQU5TSSBDIGFsaWFzaW5nIHJ1bGVzIGluIG9wdGltaXphdGlvbnMKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLWZuby1zdHJpY3QtYWxpYXNpbmciCisgICAgICAgIGRubCBWYWx1ZS1zYWZlIG9wdGltaXphdGlvbnMgb24gZmxvYXRpbmctcG9pbnQgZGF0YQorICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtZnAtbW9kZWwgcHJlY2lzZSIKKyAgICAgICAgZG5sIE9ubHkgaWNjIDEwLjAgb3IgbGF0ZXIKKyAgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX251bSIgLWdlICIxMDAwIjsgdGhlbgorICAgICAgICAgIGRubCBEaXNhYmxlIHZlY3Rvcml6ZXIgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbgorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC12ZWMtcmVwb3J0MCIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgSU5URUxfV0lORE9XU19DKQorICAgICAgICAjCisgICAgICAgIGRubCBQbGFjZWhvbGRlcgorICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyIKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgTENDKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgZG5sIEhpZ2hlc3Qgd2FybmluZyBsZXZlbCBpcyBkb3VibGUgLUEsIG5leHQgaXMgc2luZ2xlIC1BLgorICAgICAgICAgIGRubCBEdWUgdG8gdGhlIGJpZyBudW1iZXIgb2Ygd2FybmluZ3MgdGhlc2UgdHJpZ2dlciBvbiB0aGlyZAorICAgICAgICAgIGRubCBwYXJ0eSBoZWFkZXIgZmlsZXMgaXQgaXMgaW1wcmFjdGljYWwgZm9yIHVzIHRvIHVzZSBhbnkgb2YKKyAgICAgICAgICBkbmwgdGhlbSBoZXJlLiBJZiB5b3Ugd2FudCB0aGVtIHNpbXBseSBkZWZpbmUgaXQgaW4gQ1BQRkxBR1MuCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFNHSV9NSVBTX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICBkbmwgUGVyZm9ybSBzdHJpY3RlciBzZW1hbnRpYyBhbmQgbGludC1saWtlIGNoZWNrcworICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1mdWxsd2FybiIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgU0dJX01JUFNQUk9fQykKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkd2FudF93YXJuaW5ncyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgIGRubCBQZXJmb3JtIHN0cmljdGVyIHNlbWFudGljIGFuZCBsaW50LWxpa2UgY2hlY2tzCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLWZ1bGx3YXJuIgorICAgICAgICAgIGRubCBEaXNhYmxlIHNvbWUgcmVtYXJrcworICAgICAgICAgIGRubCAjMTIwOTogY29udHJvbGxpbmcgZXhwcmVzc2lvbiBpcyBjb25zdGFudAorICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC13b2ZmIDEyMDkiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFNVTlBST19DKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgZG5sIFBlcmZvcm0gc3RyaWN0ZXIgc2VtYW50aWMgYW5kIGxpbnQtbGlrZSBjaGVja3MKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtdiIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgVElOWV9DKQorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiR3YW50X3dhcm5pbmdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgZG5sIEFjdGl2YXRlIGFsbCB3YXJuaW5ncworICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XYWxsIgorICAgICAgICAgIGRubCBNYWtlIHN0cmluZyBjb25zdGFudHMgYmUgb2YgdHlwZSBjb25zdCBjaGFyICoKKyAgICAgICAgICB0bXBfQ0ZMQUdTPSIkdG1wX0NGTEFHUyAtV3dyaXRlLXN0cmluZ3MiCisgICAgICAgICAgZG5sIFdhcm4gdXNlIG9mIHVuc3VwcG9ydGVkIEdDQyBmZWF0dXJlcyBpZ25vcmVkIGJ5IFRDQworICAgICAgICAgIHRtcF9DRkxBR1M9IiR0bXBfQ0ZMQUdTIC1XdW5zdXBwb3J0ZWQiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICAgIFdBVENPTV9VTklYX0MpCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJHdhbnRfd2FybmluZ3MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICBkbmwgSXNzdWUgYWxsIHdhcm5pbmdzCisgICAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MgLVdhbGwgLVdleHRyYSIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICAgIworICAgICAgV0FUQ09NX1dJTkRPV1NfQykKKyAgICAgICAgIworICAgICAgICBkbmwgUGxhY2Vob2xkZXIKKyAgICAgICAgdG1wX0NGTEFHUz0iJHRtcF9DRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgICMKKyAgICBlc2FjCisgICAgIworICAgIHNxdWVlemUgdG1wX0NQUEZMQUdTCisgICAgc3F1ZWV6ZSB0bXBfQ0ZMQUdTCisgICAgIworICAgIGlmIHRlc3QgISAteiAiJHRtcF9DRkxBR1MiIHx8IHRlc3QgISAteiAiJHRtcF9DUFBGTEFHUyI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgYWNjZXB0cyBzdHJpY3Qgd2FybmluZyBvcHRpb25zXSkKKyAgICAgIENQUEZMQUdTPSIkdG1wX3NhdmVfQ1BQRkxBR1MgJHRtcF9DUFBGTEFHUyIKKyAgICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyAkdG1wX0NGTEFHUyIKKyAgICAgIHNxdWVlemUgQ1BQRkxBR1MKKyAgICAgIHNxdWVlemUgQ0ZMQUdTCisgICAgICBDVVJMX0NPTVBJTEVSX1dPUktTX0lGRUxTRShbCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIEFDX01TR19OT1RJQ0UoW2NvbXBpbGVyIG9wdGlvbnMgYWRkZWQ6ICR0bXBfQ0ZMQUdTICR0bXBfQ1BQRkxBR1NdKQorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgQUNfTVNHX1dBUk4oW2NvbXBpbGVyIG9wdGlvbnMgcmVqZWN0ZWQ6ICR0bXBfQ0ZMQUdTICR0bXBfQ1BQRkxBR1NdKQorICAgICAgICBkbmwgcmVzdG9yZSBpbml0aWFsIHNldHRpbmdzCisgICAgICAgIENQUEZMQUdTPSIkdG1wX3NhdmVfQ1BQRkxBR1MiCisgICAgICAgIENGTEFHUz0iJHRtcF9zYXZlX0NGTEFHUyIKKyAgICAgIF0pCisgICAgZmkKKyAgICAjCisgIGZpCitdKQorCisKK2RubCBDVVJMX1NIRlVOQ19TUVVFRVpFCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIERlY2xhcmVzIGEgc2hlbGwgZnVuY3Rpb24gc3F1ZWV6ZSgpIHdoaWNoIHJlbW92ZXMKK2RubCByZWR1bmRhbnQgd2hpdGVzcGFjZSBvdXQgb2YgYSBzaGVsbCB2YXJpYWJsZS4KKworQUNfREVGVU4oW0NVUkxfU0hGVU5DX1NRVUVFWkVdLCBbCitzcXVlZXplKCkgeworICBfc3F6X3Jlc3VsdD0iIgorICBldmFsIF9zcXpfaW5wdXQ9XFskXVskXTEKKyAgZm9yIF9zcXpfdG9rZW4gaW4gJF9zcXpfaW5wdXQ7IGRvCisgICAgaWYgdGVzdCAteiAiJF9zcXpfcmVzdWx0IjsgdGhlbgorICAgICAgX3Nxel9yZXN1bHQ9IiRfc3F6X3Rva2VuIgorICAgIGVsc2UKKyAgICAgIF9zcXpfcmVzdWx0PSIkX3Nxel9yZXN1bHQgJF9zcXpfdG9rZW4iCisgICAgZmkKKyAgZG9uZQorICBldmFsIFskXTE9XCRfc3F6X3Jlc3VsdAorICByZXR1cm4gMAorfQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19DVVJMREVCVUcKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0dGluZ3Mgd2hpY2ggZGVwZW5kIG9uIGNvbmZpZ3VyZSdzIGN1cmxkZWJ1ZyBnaXZlbgorZG5sIG9wdGlvbiwgYW5kIG90aGVyIGFkZGl0aW9uYWwgY29uZmlndXJlIHByZS1yZXF1aXNpdGVzLgorZG5sIEFjdHVhbGx5IHRoZSBjdXJsIGRlYnVnIG1lbW9yeSB0cmFja2luZyBmZWF0dXJlIGNhbgorZG5sIG9ubHkgYmUgdXNlZC9lbmFibGVkIHdoZW4gbGliY3VybCBpcyBidWlsdCBhcyBhIHN0YXRpYworZG5sIGxpYnJhcnkgb3IgYXMgYSBzaGFyZWQgb25lIG9uIHRob3NlIHN5c3RlbXMgb24gd2hpY2gKK2RubCBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQgdW5kZWZpbmVkIHN5bWJvbHMuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0NVUkxERUJVR10sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9TSEZVTkNfU1FVRUVaRV0pZG5sCisgIHN1cHBvcnRzX2N1cmxkZWJ1Zz0idW5rbm93biIKKyAgaWYgdGVzdCAiJHdhbnRfY3VybGRlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAieCRlbmFibGVfc2hhcmVkIiAhPSAieG5vIiAmJgorICAgICAgdGVzdCAieCRlbmFibGVfc2hhcmVkIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19XQVJOKFt1bmtub3duIGVuYWJsZV9zaGFyZWQgc2V0dGluZy5dKQorICAgICAgc3VwcG9ydHNfY3VybGRlYnVnPSJubyIKKyAgICBmaQorICAgIGlmIHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgIT0gInhubyIgJiYKKyAgICAgIHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfV0FSTihbdW5rbm93biBlbmFibGVfc3RhdGljIHNldHRpbmcuXSkKKyAgICAgIHN1cHBvcnRzX2N1cmxkZWJ1Zz0ibm8iCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkc3VwcG9ydHNfY3VybGRlYnVnIiAhPSAibm8iOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSAieWVzIiAmJgorICAgICAgICB0ZXN0ICIkbmVlZF9ub191bmRlZmluZWQiID0gInllcyI7IHRoZW4KKyAgICAgICAgc3VwcG9ydHNfY3VybGRlYnVnPSJubyIKKyAgICAgICAgQUNfTVNHX1dBUk4oW3NoYXJlZCBsaWJyYXJ5IGRvZXMgbm90IHN1cHBvcnQgdW5kZWZpbmVkIHN5bWJvbHMuXSkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkd2FudF9jdXJsZGVidWciID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGN1cmwgZGVidWcgbWVtb3J5IHRyYWNraW5nIGNhbiBiZSBlbmFibGVkXSkKKyAgICB0ZXN0ICIkc3VwcG9ydHNfY3VybGRlYnVnIiA9ICJubyIgfHwgc3VwcG9ydHNfY3VybGRlYnVnPSJ5ZXMiCisgICAgQUNfTVNHX1JFU1VMVChbJHN1cHBvcnRzX2N1cmxkZWJ1Z10pCisgICAgaWYgdGVzdCAiJHN1cHBvcnRzX2N1cmxkZWJ1ZyIgPSAibm8iOyB0aGVuCisgICAgICBBQ19NU0dfV0FSTihbY2Fubm90IGVuYWJsZSBjdXJsIGRlYnVnIG1lbW9yeSB0cmFja2luZy5dKQorICAgICAgd2FudF9jdXJsZGVidWc9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHdhbnRfY3VybGRlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgICAgQ1BQRkxBR1M9Ii1EQ1VSTERFQlVHICRDUFBGTEFHUyIKKyAgICBzcXVlZXplIENQUEZMQUdTCisgIGZpCisgIGlmIHRlc3QgIiR3YW50X2RlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgICAgQ1BQRkxBR1M9Ii1EREVCVUdCVUlMRCAkQ1BQRkxBR1MiCisgICAgc3F1ZWV6ZSBDUFBGTEFHUworICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19OT19VTkRFRklORUQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSAtbm8tdW5kZWZpbmVkIGZsYWcgbXVzdCBiZSB1c2VkIHdoZW4KK2RubCBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLiBUaGlzIGlzIHJlcXVpcmVkIG9uIGFsbAorZG5sIHN5c3RlbXMgb24gd2hpY2ggc2hhcmVkIGxpYnJhcmllcyBzaG91bGQgbm90IGhhdmUKK2RubCByZWZlcmVuY2VzIHRvIHVuZGVmaW5lZCBzeW1ib2xzLiBUaGlzIGNoZWNrIHNob3VsZAorZG5sIG5vdCBiZSBkb25lIGJlZm9yZSBBQy1QUk9HLUxJQlRPT0wuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX05PX1VOREVGSU5FRF0sIFsKKyAgQUNfQkVGT1JFKFskMF0sW0NVUkxfQ0hFQ0tfQ1VSTERFQlVHXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzaGFyZWQgbGlicmFyaWVzIG5lZWQgLW5vLXVuZGVmaW5lZF0pCisgIG5lZWRfbm9fdW5kZWZpbmVkPSJubyIKKyAgY2FzZSAkaG9zdCBpbgorICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyogfCAqLSotYWl4KikKKyAgICAgIG5lZWRfbm9fdW5kZWZpbmVkPSJ5ZXMiCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgIngkYWxsb3dfdW5kZWZpbmVkIiA9ICJ4bm8iOyB0aGVuCisgICAgbmVlZF9ub191bmRlZmluZWQ9InllcyIKKyAgZWxpZiB0ZXN0ICJ4JGFsbG93X3VuZGVmaW5lZF9mbGFnIiA9ICJ4dW5zdXBwb3J0ZWQiOyB0aGVuCisgICAgbmVlZF9ub191bmRlZmluZWQ9InllcyIKKyAgZmkKKyAgQUNfTVNHX1JFU1VMVCgkbmVlZF9ub191bmRlZmluZWQpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX1BST0dfQ0MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGNvbXBpbGVyIHByb2dyYW0sIHByZXZlbnRpbmcgQ0ZMQUdTIGFuZAorZG5sIENQUEZMQUdTIGZyb20gYmVpbmcgdW5leHBlY3RlZGx5IGNoYW5nZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX1BST0dfQ0NdLCBbCisgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBhY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgIEFDX1BST0dfQ0MKKyAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyIKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfQ09NUElMRVJfSEFMVF9PTl9FUlJPUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZmllcyBpZiB0aGUgY29tcGlsZXIgYWN0dWFsbHkgaGFsdHMgYWZ0ZXIgdGhlCitkbmwgY29tcGlsYXRpb24gcGhhc2Ugd2l0aG91dCBnZW5lcmF0aW5nIGFueSBvYmplY3QKK2RubCBjb2RlIGZpbGUsIHdoZW4gdGhlIHNvdXJjZSBjb21waWxlcyB3aXRoIGVycm9ycy4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfQ09NUElMRVJfSEFMVF9PTl9FUlJPUl0sIFsKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBoYWx0cyBvbiBjb21waWxhdGlvbiBlcnJvcnNdKQorICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgXV0sW1sKKyAgICAgIGZvcmNlIGNvbXBpbGF0aW9uIGVycm9yCisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBBQ19NU0dfRVJST1IoW2NvbXBpbGVyIGRvZXMgbm90IGhhbHQgb24gY29tcGlsYXRpb24gZXJyb3JzLl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgIF0pCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0NPTVBJTEVSX0FSUkFZX1NJWkVfTkVHQVRJVkUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZpZXMgaWYgdGhlIGNvbXBpbGVyIGFjdHVhbGx5IGhhbHRzIGFmdGVyIHRoZQorZG5sIGNvbXBpbGF0aW9uIHBoYXNlIHdpdGhvdXQgZ2VuZXJhdGluZyBhbnkgb2JqZWN0CitkbmwgY29kZSBmaWxlLCB3aGVuIHRoZSBzb3VyY2UgY29kZSB0cmllcyB0byBkZWZpbmUgYQorZG5sIHR5cGUgZm9yIGEgY29uc3RhbnQgYXJyYXkgd2l0aCBuZWdhdGl2ZSBkaW1lbnNpb24uCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0NPTVBJTEVSX0FSUkFZX1NJWkVfTkVHQVRJVkVdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfQ09NUElMRVJfSEFMVF9PTl9FUlJPUl0pZG5sCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgaGFsdHMgb24gbmVnYXRpdmUgc2l6ZWQgYXJyYXlzXSkKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgdHlwZWRlZiBjaGFyIGJhZF90W3NpemVvZihjaGFyKSA9PSBzaXplb2YoaW50KSA/IC0xIDogLTEgXTsKKyAgICBdXSxbWworICAgICAgYmFkX3QgZHVtbXk7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBBQ19NU0dfRVJST1IoW2NvbXBpbGVyIGRvZXMgbm90IGhhbHQgb24gbmVnYXRpdmUgc2l6ZWQgYXJyYXlzLl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgIF0pCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0NPTVBJTEVSX1NUUlVDVF9NRU1CRVJfU0laRQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZmllcyBpZiB0aGUgY29tcGlsZXIgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyB0aGUKK2RubCBzaXplIG9mIGEgc3RydWN0IG1lbWJlciwgc3RydWN0IHdoaWNoIGlzIGEgZnVuY3Rpb24KK2RubCByZXN1bHQsIGFzIGEgY29tcGlsYXRpb24tdGltZSBjb25kaXRpb24gaW5zaWRlIHRoZQorZG5sIHR5cGUgZGVmaW5pdGlvbiBvZiBhIGNvbnN0YW50IGFycmF5LgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19DT01QSUxFUl9TVFJVQ1RfTUVNQkVSX1NJWkVdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfQ09NUElMRVJfQVJSQVlfU0laRV9ORUdBVElWRV0pZG5sCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgc3RydWN0IG1lbWJlciBzaXplIGNoZWNraW5nIHdvcmtzXSkKKyAgdHN0X2NvbXBpbGVyX2NoZWNrX29uZV93b3Jrcz0idW5rbm93biIKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgc3RydWN0IG15c3RydWN0IHsKKyAgICAgICAgaW50ICBtaTsKKyAgICAgICAgY2hhciBtYzsKKyAgICAgICAgc3RydWN0IG15c3RydWN0ICpuZXh0OworICAgICAgfTsKKyAgICAgIHN0cnVjdCBteXN0cnVjdCBteWZ1bmMoKTsKKyAgICAgIHR5cGVkZWYgY2hhciBnb29kX3QxW3NpemVvZihteWZ1bmMoKS5taSkgPT0gc2l6ZW9mKGludCkgID8gMSA6IC0xIF07CisgICAgICB0eXBlZGVmIGNoYXIgZ29vZF90MltzaXplb2YobXlmdW5jKCkubWMpID09IHNpemVvZihjaGFyKSA/IDEgOiAtMSBdOworICAgIF1dLFtbCisgICAgICBnb29kX3QxIGR1bW15MTsKKyAgICAgIGdvb2RfdDIgZHVtbXkyOworICAgIF1dKQorICBdLFsKKyAgICB0c3RfY29tcGlsZXJfY2hlY2tfb25lX3dvcmtzPSJ5ZXMiCisgIF0sWworICAgIHRzdF9jb21waWxlcl9jaGVja19vbmVfd29ya3M9Im5vIgorICAgIHNlZCAncy9eL2NjLXNyYzogLycgY29uZnRlc3QuJGFjX2V4dCA+JjYKKyAgICBzZWQgJ3MvXi9jYy1lcnI6IC8nIGNvbmZ0ZXN0LmVyciA+JjYKKyAgXSkKKyAgdHN0X2NvbXBpbGVyX2NoZWNrX3R3b193b3Jrcz0idW5rbm93biIKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgc3RydWN0IG15c3RydWN0IHsKKyAgICAgICAgaW50ICBtaTsKKyAgICAgICAgY2hhciBtYzsKKyAgICAgICAgc3RydWN0IG15c3RydWN0ICpuZXh0OworICAgICAgfTsKKyAgICAgIHN0cnVjdCBteXN0cnVjdCBteWZ1bmMoKTsKKyAgICAgIHR5cGVkZWYgY2hhciBiYWRfdDFbc2l6ZW9mKG15ZnVuYygpLm1pKSAhPSBzaXplb2YoaW50KSAgPyAxIDogLTEgXTsKKyAgICAgIHR5cGVkZWYgY2hhciBiYWRfdDJbc2l6ZW9mKG15ZnVuYygpLm1jKSAhPSBzaXplb2YoY2hhcikgPyAxIDogLTEgXTsKKyAgICBdXSxbWworICAgICAgYmFkX3QxIGR1bW15MTsKKyAgICAgIGJhZF90MiBkdW1teTI7CisgICAgXV0pCisgIF0sWworICAgIHRzdF9jb21waWxlcl9jaGVja190d29fd29ya3M9Im5vIgorICBdLFsKKyAgICB0c3RfY29tcGlsZXJfY2hlY2tfdHdvX3dvcmtzPSJ5ZXMiCisgIF0pCisgIGlmIHRlc3QgIiR0c3RfY29tcGlsZXJfY2hlY2tfb25lX3dvcmtzIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJHRzdF9jb21waWxlcl9jaGVja190d29fd29ya3MiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIEFDX01TR19FUlJPUihbY29tcGlsZXIgZmFpbHMgc3RydWN0IG1lbWJlciBzaXplIGNoZWNraW5nLl0pCisgIGZpCitdKQorCisKK2RubCBDVVJMX1ZBUl9NQVRDSCAoVkFSTkFNRSwgVkFMVUUpCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmaWVzIGlmIHNoZWxsIHZhcmlhYmxlIFZBUk5BTUUgY29udGFpbnMgVkFMVUUuCitkbmwgQ29udGVudHMgb2YgdmFyaWFibGUgVkFSTkFNRSBhbmQgVkFMVUUgYXJlIGhhbmRsZWQKK2RubCBhcyB3aGl0ZXNwYWNlIHNlcGFyYXRlZCBsaXN0cyBvZiB3b3Jkcy4gSWYgYXQgbGVhc3QKK2RubCBvbmUgd29yZCBvZiBWQUxVRSBpcyBwcmVzZW50IGluIFZBUk5BTUUgdGhlIG1hdGNoCitkbmwgaXMgY29uc2lkZXJlZCBwb3NpdGl2ZSwgb3RoZXJ3aXNlIGZhbHNlLgorCitBQ19ERUZVTihbQ1VSTF9WQVJfTUFUQ0hdLCBbCisgIGFjX3Zhcl9tYXRjaF93b3JkPSJubyIKKyAgZm9yIHdvcmQxIGluICRbJDFdOyBkbworICAgIGZvciB3b3JkMiBpbiBbJDJdOyBkbworICAgICAgaWYgdGVzdCAiJHdvcmQxIiA9ICIkd29yZDIiOyB0aGVuCisgICAgICAgIGFjX3Zhcl9tYXRjaF93b3JkPSJ5ZXMiCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorXSkKKworCitkbmwgQ1VSTF9WQVJfTUFUQ0hfSUZFTFNFIChWQVJOQU1FLCBWQUxVRSwKK2RubCAgICAgICAgICAgICAgICAgICAgICAgIFtBQ1RJT04tSUYtTUFUQ0hdLCBbQUNUSU9OLUlGLU5PVC1NQVRDSF0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRoaXMgcGVyZm9ybXMgYSBDVVJMX1ZBUl9NQVRDSCBjaGVjayBhbmQgZXhlY3V0ZXMKK2RubCBmaXJzdCBicmFuY2ggaWYgdGhlIG1hdGNoIGlzIHBvc2l0aXZlLCBvdGhlcndpc2UKK2RubCB0aGUgc2Vjb25kIGJyYW5jaCBpcyBleGVjdXRlZC4KKworQUNfREVGVU4oW0NVUkxfVkFSX01BVENIX0lGRUxTRV0sIFsKKyAgQ1VSTF9WQVJfTUFUQ0goWyQxXSxbJDJdKQorICBpZiB0ZXN0ICIkYWNfdmFyX21hdGNoX3dvcmQiID0gInllcyI7IHRoZW4KKyAgaWZlbHNlKCQzLCw6LFskM10pCisgIGlmZWxzZSgkNCwsLFtlbHNlCisgICAgJDRdKQorICBmaQorXSkKKworCitkbmwgQ1VSTF9WQVJfU1RSSVAgKFZBUk5BTUUsIFZBTFVFKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDb250ZW50cyBvZiB2YXJpYWJsZSBWQVJOQU1FIGFuZCBWQUxVRSBhcmUgaGFuZGxlZAorZG5sIGFzIHdoaXRlc3BhY2Ugc2VwYXJhdGVkIGxpc3RzIG9mIHdvcmRzLiBFYWNoIHdvcmQKK2RubCBmcm9tIFZBTFVFIGlzIHJlbW92ZWQgZnJvbSBWQVJOQU1FIHdoZW4gcHJlc2VudC4KKworQUNfREVGVU4oW0NVUkxfVkFSX1NUUklQXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX1NIRlVOQ19TUVVFRVpFXSlkbmwKKyAgYWNfdmFyX3N0cmlwcGVkPSIiCisgIGZvciB3b3JkMSBpbiAkWyQxXTsgZG8KKyAgICBhY192YXJfc3RyaXBfd29yZD0ibm8iCisgICAgZm9yIHdvcmQyIGluIFskMl07IGRvCisgICAgICBpZiB0ZXN0ICIkd29yZDEiID0gIiR3b3JkMiI7IHRoZW4KKyAgICAgICAgYWNfdmFyX3N0cmlwX3dvcmQ9InllcyIKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIHRlc3QgIiRhY192YXJfc3RyaXBfd29yZCIgPSAibm8iOyB0aGVuCisgICAgICBhY192YXJfc3RyaXBwZWQ9IiRhY192YXJfc3RyaXBwZWQgJHdvcmQxIgorICAgIGZpCisgIGRvbmUKKyAgZG5sIHNxdWVlemUgd2hpdGVzcGFjZSBvdXQgb2YgcmVzdWx0CisgIFskMV09IiRhY192YXJfc3RyaXBwZWQiCisgIHNxdWVlemUgWyQxXQorXSkKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbTQvY3VybC1jb25mb3B0cy5tNCBiL2N1cmwtNy4yNS4wL200L2N1cmwtY29uZm9wdHMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0MzE1NgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL200L2N1cmwtY29uZm9wdHMubTQKQEAgLTAsMCArMSw1NTkgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIyBGaWxlIHZlcnNpb24gZm9yICdhY2xvY2FsJyB1c2UuIEtlZXAgaXQgYSBzaW5nbGUgbnVtYmVyLgorIyBzZXJpYWwgMTYKKworZG5sIENVUkxfQ0hFQ0tfT1BUSU9OX1RIUkVBREVEX1JFU09MVkVSCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBjb25maWd1cmUgaGFzIGJlZW4gaW52b2tlZCB3aXRoIG9wdGlvbgorZG5sIC0tZW5hYmxlLXRocmVhZGVkLXJlc29sdmVyIG9yIC0tZGlzYWJsZS10aHJlYWRlZC1yZXNvbHZlciwgYW5kCitkbmwgc2V0IHNoZWxsIHZhcmlhYmxlIHdhbnRfdGhyZXMgYXMgYXBwcm9wcmlhdGUuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX09QVElPTl9USFJFQURFRF9SRVNPTFZFUl0sIFsKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSB0aGUgdGhyZWFkZWQgcmVzb2x2ZXJdKQorICBPUFRfVEhSRVM9ImRlZmF1bHQiCisgIEFDX0FSR19FTkFCTEUodGhyZWFkZWRfcmVzb2x2ZXIsCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdGhyZWFkZWQtcmVzb2x2ZXJdLFtFbmFibGUgdGhyZWFkZWQgcmVzb2x2ZXJdKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS10aHJlYWRlZC1yZXNvbHZlcl0sW0Rpc2FibGUgdGhyZWFkZWQgcmVzb2x2ZXJdKSwKKyAgT1BUX1RIUkVTPSRlbmFibGV2YWwpCisgIGNhc2UgIiRPUFRfVEhSRVMiIGluCisgICAgeWVzKQorICAgICAgZG5sIC0tZW5hYmxlLXRocmVhZGVkLXJlc29sdmVyIG9wdGlvbiB1c2VkCisgICAgICB3YW50X3RocmVzPSJ5ZXMiCisgICAgICA7OworICAgICopCisgICAgICBkbmwgY29uZmlndXJlIG9wdGlvbiBub3Qgc3BlY2lmaWVkCisgICAgICB3YW50X3RocmVzPSJubyIKKyAgICAgIDs7CisgIGVzYWMKKyAgQUNfTVNHX1JFU1VMVChbJHdhbnRfdGhyZXNdKQorXSkKKworZG5sIENVUkxfQ0hFQ0tfT1BUSU9OX0FSRVMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbmZpZ3VyZSBoYXMgYmVlbiBpbnZva2VkIHdpdGggb3B0aW9uCitkbmwgLS1lbmFibGUtYXJlcyBvciAtLWRpc2FibGUtYXJlcywgYW5kCitkbmwgc2V0IHNoZWxsIHZhcmlhYmxlIHdhbnRfYXJlcyBhcyBhcHByb3ByaWF0ZS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfT1BUSU9OX0FSRVNdLCBbCitkbmwgICBBQ19CRUZPUkUoWyQwXSxbQ1VSTF9DSEVDS19PUFRJT05fVEhSRUFEU10pZG5sCisgIEFDX0JFRk9SRShbJDBdLFtDVVJMX0NIRUNLX0xJQl9BUkVTXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBjLWFyZXMgZm9yIEROUyBsb29rdXBzXSkKKyAgT1BUX0FSRVM9ImRlZmF1bHQiCisgIEFDX0FSR19FTkFCTEUoYXJlcywKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hcmVzQDw6QD1QQVRIQDo+QF0sW0VuYWJsZSBjLWFyZXMgZm9yIEROUyBsb29rdXBzXSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtYXJlc10sW0Rpc2FibGUgYy1hcmVzIGZvciBETlMgbG9va3Vwc10pLAorICBPUFRfQVJFUz0kZW5hYmxldmFsKQorICBjYXNlICIkT1BUX0FSRVMiIGluCisgICAgbm8pCisgICAgICBkbmwgLS1kaXNhYmxlLWFyZXMgb3B0aW9uIHVzZWQKKyAgICAgIHdhbnRfYXJlcz0ibm8iCisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICBkbmwgY29uZmlndXJlIG9wdGlvbiBub3Qgc3BlY2lmaWVkCisgICAgICB3YW50X2FyZXM9Im5vIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZG5sIC0tZW5hYmxlLWFyZXMgb3B0aW9uIHVzZWQKKyAgICAgIHdhbnRfYXJlcz0ieWVzIgorICAgICAgaWYgdGVzdCAtbiAiJGVuYWJsZXZhbCIgJiYgdGVzdCAiJGVuYWJsZXZhbCIgIT0gInllcyI7IHRoZW4KKyAgICAgICAgd2FudF9hcmVzX3BhdGg9IiRlbmFibGV2YWwiCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworICBBQ19NU0dfUkVTVUxUKFskd2FudF9hcmVzXSkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfT1BUSU9OX0NVUkxERUJVRworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29uZmlndXJlIGhhcyBiZWVuIGludm9rZWQgd2l0aCBvcHRpb24KK2RubCAtLWVuYWJsZS1jdXJsZGVidWcgb3IgLS1kaXNhYmxlLWN1cmxkZWJ1ZywgYW5kIHNldAorZG5sIHNoZWxsIHZhcmlhYmxlIHdhbnRfY3VybGRlYnVnIHZhbHVlIGFzIGFwcHJvcHJpYXRlLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19PUFRJT05fQ1VSTERFQlVHXSwgWworICBBQ19CRUZPUkUoWyQwXSxbQ1VSTF9DSEVDS19DVVJMREVCVUddKWRubAorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIGN1cmwgZGVidWcgbWVtb3J5IHRyYWNraW5nXSkKKyAgT1BUX0NVUkxERUJVR19CVUlMRD0iZGVmYXVsdCIKKyAgQUNfQVJHX0VOQUJMRShjdXJsZGVidWcsCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtY3VybGRlYnVnXSxbRW5hYmxlIGN1cmwgZGVidWcgbWVtb3J5IHRyYWNraW5nXSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtY3VybGRlYnVnXSxbRGlzYWJsZSBjdXJsIGRlYnVnIG1lbW9yeSB0cmFja2luZ10pLAorICBPUFRfQ1VSTERFQlVHX0JVSUxEPSRlbmFibGV2YWwpCisgIGNhc2UgIiRPUFRfQ1VSTERFQlVHX0JVSUxEIiBpbgorICAgIG5vKQorICAgICAgZG5sIC0tZGlzYWJsZS1jdXJsZGVidWcgb3B0aW9uIHVzZWQKKyAgICAgIHdhbnRfY3VybGRlYnVnPSJubyIKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIDs7CisgICAgZGVmYXVsdCkKKyAgICAgIGRubCBjb25maWd1cmUncyBjdXJsZGVidWcgb3B0aW9uIG5vdCBzcGVjaWZpZWQuIEluaXRpYWxseSB3ZSB3aWxsCisgICAgICBkbmwgaGFuZGxlIHRoaXMgYXMgYSBhIHJlcXVlc3QgdG8gdXNlIHRoZSBzYW1lIHNldHRpbmcgYXMgb3B0aW9uCisgICAgICBkbmwgLS1lbmFibGUtZGVidWcuIElPVywgaW5pdGlhbGx5LCBmb3IgZGVidWctZW5hYmxlZCBidWlsZHMKKyAgICAgIGRubCB0aGlzIHdpbGwgYmUgaGFuZGxlZCBhcyBhIHJlcXVlc3QgdG8gZW5hYmxlIGN1cmxkZWJ1ZyBpZgorICAgICAgZG5sIHBvc3NpYmxlLCBhbmQgZm9yIGRlYnVnLWRpc2FibGVkIGJ1aWxkcyB0aGlzIHdpbGwgYmUgaGFuZGxlZAorICAgICAgZG5sIGFzIGEgcmVxdWVzdCB0byBkaXNhYmxlIGN1cmxkZWJ1Zy4KKyAgICAgIGlmIHRlc3QgIiR3YW50X2RlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIEFDX01TR19SRVNVTFQoWyhhc3N1bWVkKSB5ZXNdKQorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICBmaQorICAgICAgd2FudF9jdXJsZGVidWdfYXNzdW1lZD0ieWVzIgorICAgICAgd2FudF9jdXJsZGVidWc9IiR3YW50X2RlYnVnIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZG5sIC0tZW5hYmxlLWN1cmxkZWJ1ZyBvcHRpb24gdXNlZC4KKyAgICAgIGRubCBUaGUgdXNlIG9mIHRoaXMgb3B0aW9uIHZhbHVlIGlzIGEgcmVxdWVzdCB0byBlbmFibGUgY3VybCdzCisgICAgICBkbmwgZGVidWcgbWVtb3J5IHRyYWNraW5nIGZvciB0aGUgbGliY3VybCBsaWJyYXJ5LiBUaGlzIGNhbiBvbmx5CisgICAgICBkbmwgYmUgZG9uZSB3aGVuIHNvbWUgcmVxdWlzaXRlcyBhcmUgc2ltdWx0YW5lb3VzbHkgc2F0aXNmaWVkLgorICAgICAgZG5sIExhdGVyIG9uLCB0aGVzZSByZXF1aXNpdGVzIGFyZSB2ZXJpZmllZCBhbmQgaWYgdGhleSBhcmUgbm90CisgICAgICBkbmwgZnVsbHkgc2F0aXNmaWVkIHRoZSBvcHRpb24gd2lsbCBiZSBpZ25vcmVkIGFuZCBhY3QgYXMgaWYKKyAgICAgIGRubCAtLWRpc2FibGUtY3VybGRlYnVnIGhhZCBiZWVuIGdpdmVuIHNldHRpbmcgc2hlbGwgdmFyaWFibGUKKyAgICAgIGRubCB3YW50X2N1cmxkZWJ1ZyB0byAnbm8nLgorICAgICAgd2FudF9jdXJsZGVidWc9InllcyIKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICA7OworICBlc2FjCitdKQorCisKK2RubCBDVVJMX0NIRUNLX09QVElPTl9ERUJVRworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29uZmlndXJlIGhhcyBiZWVuIGludm9rZWQgd2l0aCBvcHRpb24KK2RubCAtLWVuYWJsZS1kZWJ1ZyBvciAtLWRpc2FibGUtZGVidWcsIGFuZCBzZXQgc2hlbGwKK2RubCB2YXJpYWJsZSB3YW50X2RlYnVnIHZhbHVlIGFzIGFwcHJvcHJpYXRlLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19PUFRJT05fREVCVUddLCBbCisgIEFDX0JFRk9SRShbJDBdLFtDVVJMX0NIRUNLX09QVElPTl9XQVJOSU5HU10pZG5sCisgIEFDX0JFRk9SRShbJDBdLFtDVVJMX0NIRUNLX09QVElPTl9DVVJMREVCVUddKWRubAorICBBQ19CRUZPUkUoWyQwXSxbQ1VSTF9DSEVDS19QUk9HX0NDXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBidWlsZCBvcHRpb25zXSkKKyAgT1BUX0RFQlVHX0JVSUxEPSJkZWZhdWx0IgorICBBQ19BUkdfRU5BQkxFKGRlYnVnLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRlYnVnXSxbRW5hYmxlIGRlYnVnIGJ1aWxkIG9wdGlvbnNdKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1kZWJ1Z10sW0Rpc2FibGUgZGVidWcgYnVpbGQgb3B0aW9uc10pLAorICBPUFRfREVCVUdfQlVJTEQ9JGVuYWJsZXZhbCkKKyAgY2FzZSAiJE9QVF9ERUJVR19CVUlMRCIgaW4KKyAgICBubykKKyAgICAgIGRubCAtLWRpc2FibGUtZGVidWcgb3B0aW9uIHVzZWQKKyAgICAgIHdhbnRfZGVidWc9Im5vIgorICAgICAgOzsKKyAgICBkZWZhdWx0KQorICAgICAgZG5sIGNvbmZpZ3VyZSBvcHRpb24gbm90IHNwZWNpZmllZAorICAgICAgd2FudF9kZWJ1Zz0ibm8iCisgICAgICA7OworICAgICopCisgICAgICBkbmwgLS1lbmFibGUtZGVidWcgb3B0aW9uIHVzZWQKKyAgICAgIHdhbnRfZGVidWc9InllcyIKKyAgICAgIDs7CisgIGVzYWMKKyAgQUNfTVNHX1JFU1VMVChbJHdhbnRfZGVidWddKQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19PUFRJT05fTk9OQkxPQ0tJTkcKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbmZpZ3VyZSBoYXMgYmVlbiBpbnZva2VkIHdpdGggb3B0aW9uCitkbmwgLS1lbmFibGUtbm9uYmxvY2tpbmcgb3IgLS1kaXNhYmxlLW5vbmJsb2NraW5nLCBhbmQKK2RubCBzZXQgc2hlbGwgdmFyaWFibGUgd2FudF9ub25ibG9ja2luZyBhcyBhcHByb3ByaWF0ZS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfT1BUSU9OX05PTkJMT0NLSU5HXSwgWworICBBQ19CRUZPUkUoWyQwXSxbQ1VSTF9DSEVDS19OT05CTE9DS0lOR19TT0NLRVRdKWRubAorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIG5vbi1ibG9ja2luZyBjb21tdW5pY2F0aW9uc10pCisgIE9QVF9OT05CTE9DS0lORz0iZGVmYXVsdCIKKyAgQUNfQVJHX0VOQUJMRShub25ibG9ja2luZywKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ub25ibG9ja2luZ10sW0VuYWJsZSBub24tYmxvY2tpbmcgY29tbXVuaWNhdGlvbnNdKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1ub25ibG9ja2luZ10sW0Rpc2FibGUgbm9uLWJsb2NraW5nIGNvbW11bmljYXRpb25zXSksCisgIE9QVF9OT05CTE9DS0lORz0kZW5hYmxldmFsKQorICBjYXNlICIkT1BUX05PTkJMT0NLSU5HIiBpbgorICAgIG5vKQorICAgICAgZG5sIC0tZGlzYWJsZS1ub25ibG9ja2luZyBvcHRpb24gdXNlZAorICAgICAgd2FudF9ub25ibG9ja2luZz0ibm8iCisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICBkbmwgY29uZmlndXJlIG9wdGlvbiBub3Qgc3BlY2lmaWVkCisgICAgICB3YW50X25vbmJsb2NraW5nPSJ5ZXMiCisgICAgICA7OworICAgICopCisgICAgICBkbmwgLS1lbmFibGUtbm9uYmxvY2tpbmcgb3B0aW9uIHVzZWQKKyAgICAgIHdhbnRfbm9uYmxvY2tpbmc9InllcyIKKyAgICAgIDs7CisgIGVzYWMKKyAgQUNfTVNHX1JFU1VMVChbJHdhbnRfbm9uYmxvY2tpbmddKQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19PUFRJT05fT1BUSU1JWkUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbmZpZ3VyZSBoYXMgYmVlbiBpbnZva2VkIHdpdGggb3B0aW9uCitkbmwgLS1lbmFibGUtb3B0aW1pemUgb3IgLS1kaXNhYmxlLW9wdGltaXplLCBhbmQgc2V0Citkbmwgc2hlbGwgdmFyaWFibGUgd2FudF9vcHRpbWl6ZSB2YWx1ZSBhcyBhcHByb3ByaWF0ZS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfT1BUSU9OX09QVElNSVpFXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX09QVElPTl9ERUJVR10pZG5sCisgIEFDX0JFRk9SRShbJDBdLFtDVVJMX0NIRUNLX1BST0dfQ0NdKWRubAorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIGNvbXBpbGVyIG9wdGltaXplcl0pCisgIE9QVF9DT01QSUxFUl9PUFRJTUlaRT0iZGVmYXVsdCIKKyAgQUNfQVJHX0VOQUJMRShvcHRpbWl6ZSwKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1vcHRpbWl6ZV0sW0VuYWJsZSBjb21waWxlciBvcHRpbWl6YXRpb25zXSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtb3B0aW1pemVdLFtEaXNhYmxlIGNvbXBpbGVyIG9wdGltaXphdGlvbnNdKSwKKyAgT1BUX0NPTVBJTEVSX09QVElNSVpFPSRlbmFibGV2YWwpCisgIGNhc2UgIiRPUFRfQ09NUElMRVJfT1BUSU1JWkUiIGluCisgICAgbm8pCisgICAgICBkbmwgLS1kaXNhYmxlLW9wdGltaXplIG9wdGlvbiB1c2VkLiBXZSB3aWxsIGhhbmRsZSB0aGlzIGFzCisgICAgICBkbmwgYSByZXF1ZXN0IHRvIGRpc2FibGUgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBpZiBwb3NzaWJsZS4KKyAgICAgIGRubCBJZiB0aGUgY29tcGlsZXIgaXMga25vd24gQ0ZMQUdTIGFuZCBDUFBGTEFHUyB3aWxsIGJlCisgICAgICBkbmwgb3ZlcnJpZGRlbiwgb3RoZXJ3aXNlIHRoaXMgY2FuIG5vdCBiZSBob25vcmVkLgorICAgICAgd2FudF9vcHRpbWl6ZT0ibm8iCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICBkbmwgY29uZmlndXJlJ3Mgb3B0aW1pemUgb3B0aW9uIG5vdCBzcGVjaWZpZWQuIEluaXRpYWxseSB3ZSB3aWxsCisgICAgICBkbmwgaGFuZGxlIHRoaXMgYXMgYSBhIHJlcXVlc3QgY29udHJhcnkgdG8gY29uZmlndXJlJ3Mgc2V0dGluZworICAgICAgZG5sIGZvciAtLWVuYWJsZS1kZWJ1Zy4gSU9XLCBpbml0aWFsbHksIGZvciBkZWJ1Zy1lbmFibGVkIGJ1aWxkcworICAgICAgZG5sIHRoaXMgd2lsbCBiZSBoYW5kbGVkIGFzIGEgcmVxdWVzdCB0byBkaXNhYmxlIG9wdGltaXphdGlvbnMgaWYKKyAgICAgIGRubCBwb3NzaWJsZSwgYW5kIGZvciBkZWJ1Zy1kaXNhYmxlZCBidWlsZHMgdGhpcyB3aWxsIGJlIGhhbmRsZWQKKyAgICAgIGRubCBpbml0aWFsbHkgYXMgYSByZXF1ZXN0IHRvIGVuYWJsZSBvcHRpbWl6YXRpb25zIGlmIHBvc3NpYmxlLgorICAgICAgZG5sIEZpbmFsbHksIGlmIHRoZSBjb21waWxlciBpcyBrbm93biBhbmQgQ0ZMQUdTIGFuZCBDUFBGTEFHUyBkbworICAgICAgZG5sIG5vdCBoYXZlIGFueSBvcHRpbWl6ZXIgZmxhZyB0aGUgcmVxdWVzdCB3aWxsIGJlIGhvbm9yZWQsIGluCisgICAgICBkbmwgYW55IG90aGVyIGNhc2UgdGhlIHJlcXVlc3QgY2FuIG5vdCBiZSBob25vcmVkLgorICAgICAgZG5sIElPVywgZXhpc3Rpbmcgb3B0aW1pemVyIGZsYWdzIGRlZmluZWQgaW4gQ0ZMQUdTIG9yIENQUEZMQUdTCisgICAgICBkbmwgd2lsbCBhbHdheXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgYW55IGluaXRpYWwgYXNzdW1wdGlvbi4KKyAgICAgIGlmIHRlc3QgIiR3YW50X2RlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIHdhbnRfb3B0aW1pemU9ImFzc3VtZV9ubyIKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbKGFzc3VtZWQpIG5vXSkKKyAgICAgIGVsc2UKKyAgICAgICAgd2FudF9vcHRpbWl6ZT0iYXNzdW1lX3llcyIKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbKGFzc3VtZWQpIHllc10pCisgICAgICBmaQorICAgICAgOzsKKyAgICAqKQorICAgICAgZG5sIC0tZW5hYmxlLW9wdGltaXplIG9wdGlvbiB1c2VkLiBXZSB3aWxsIGhhbmRsZSB0aGlzIGFzCisgICAgICBkbmwgYSByZXF1ZXN0IHRvIGVuYWJsZSBjb21waWxlciBvcHRpbWl6YXRpb25zIGlmIHBvc3NpYmxlLgorICAgICAgZG5sIElmIHRoZSBjb21waWxlciBpcyBrbm93biBDRkxBR1MgYW5kIENQUEZMQUdTIHdpbGwgYmUKKyAgICAgIGRubCBvdmVycmlkZGVuLCBvdGhlcndpc2UgdGhpcyBjYW4gbm90IGJlIGhvbm9yZWQuCisgICAgICB3YW50X29wdGltaXplPSJ5ZXMiCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgQ1VSTF9DSEVDS19PUFRJT05fVEhSRUFEUworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29uZmlndXJlIGhhcyBiZWVuIGludm9rZWQgd2l0aCBvcHRpb24KK2RubCAtLWVuYWJsZS10aHJlYWRzIG9yIC0tZGlzYWJsZS10aHJlYWRzLCBhbmQKK2RubCBzZXQgc2hlbGwgdmFyaWFibGUgd2FudF90aHJlYWRzIGFzIGFwcHJvcHJpYXRlLgorCitkbmwgQUNfREVGVU4oW0NVUkxfQ0hFQ0tfT1BUSU9OX1RIUkVBRFNdLCBbCitkbmwgICBBQ19CRUZPUkUoWyQwXSxbQ1VSTF9DSEVDS19MSUJfVEhSRUFEU10pZG5sCitkbmwgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIHRocmVhZHMgZm9yIEROUyBsb29rdXBzXSkKK2RubCAgIE9QVF9USFJFQURTPSJkZWZhdWx0IgorZG5sICAgQUNfQVJHX0VOQUJMRSh0aHJlYWRzLAorZG5sIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS10aHJlYWRzQDw6QD1QQVRIQDo+QF0sW0VuYWJsZSB0aHJlYWRzIGZvciBETlMgbG9va3Vwc10pCitkbmwgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS10aHJlYWRzXSxbRGlzYWJsZSB0aHJlYWRzIGZvciBETlMgbG9va3Vwc10pLAorZG5sICAgT1BUX1RIUkVBRFM9JGVuYWJsZXZhbCkKK2RubCAgIGNhc2UgIiRPUFRfVEhSRUFEUyIgaW4KK2RubCAgICAgbm8pCitkbmwgICAgICAgZG5sIC0tZGlzYWJsZS10aHJlYWRzIG9wdGlvbiB1c2VkCitkbmwgICAgICAgd2FudF90aHJlYWRzPSJubyIKK2RubCAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCitkbmwgICAgICAgOzsKK2RubCAgICAgZGVmYXVsdCkKK2RubCAgICAgICBkbmwgY29uZmlndXJlIG9wdGlvbiBub3Qgc3BlY2lmaWVkCitkbmwgICAgICAgd2FudF90aHJlYWRzPSJubyIKK2RubCAgICAgICBBQ19NU0dfUkVTVUxUKFsoYXNzdW1lZCkgbm9dKQorZG5sICAgICAgIDs7CitkbmwgICAgICopCitkbmwgICAgICAgZG5sIC0tZW5hYmxlLXRocmVhZHMgb3B0aW9uIHVzZWQKK2RubCAgICAgICB3YW50X3RocmVhZHM9InllcyIKK2RubCAgICAgICB3YW50X3RocmVhZHNfcGF0aD0iJGVuYWJsZXZhbCIKK2RubCAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZG5sICAgICAgIDs7CitkbmwgICBlc2FjCitkbmwgICAjCitkbmwgICBpZiB0ZXN0ICIkd2FudF9hcmVzIiA9ICJhc3N1bWVfeWVzIjsgdGhlbgorZG5sICAgICBpZiB0ZXN0ICIkd2FudF90aHJlYWRzIiA9ICJ5ZXMiOyB0aGVuCitkbmwgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGlnbm9yZSBjLWFyZXMgZW5hYmxpbmcgYXNzdW1lZCBzZXR0aW5nXSkKK2RubCAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZG5sICAgICAgIHdhbnRfYXJlcz0ibm8iCitkbmwgICAgIGVsc2UKK2RubCAgICAgICB3YW50X2FyZXM9InllcyIKK2RubCAgICAgZmkKK2RubCAgIGZpCitkbmwgICBpZiB0ZXN0ICIkd2FudF90aHJlYWRzIiA9ICJ5ZXMiICYmIHRlc3QgIiR3YW50X2FyZXMiID0gInllcyI7IHRoZW4KK2RubCAgICAgQUNfTVNHX0VSUk9SKFtvcHRpb25zIC0tZW5hYmxlLWFyZXMgYW5kIC0tZW5hYmxlLXRocmVhZHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgYXQgbW9zdCBvbmUgbWF5IGJlIGVuYWJsZWQuXSkKK2RubCAgIGZpCitkbmwgXSkKKworCitkbmwgQ1VSTF9DSEVDS19PUFRJT05fV0FSTklOR1MKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNvbmZpZ3VyZSBoYXMgYmVlbiBpbnZva2VkIHdpdGggb3B0aW9uCitkbmwgLS1lbmFibGUtd2FybmluZ3Mgb3IgLS1kaXNhYmxlLXdhcm5pbmdzLCBhbmQgc2V0Citkbmwgc2hlbGwgdmFyaWFibGUgd2FudF93YXJuaW5ncyBhcyBhcHByb3ByaWF0ZS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfT1BUSU9OX1dBUk5JTkdTXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX09QVElPTl9ERUJVR10pZG5sCisgIEFDX0JFRk9SRShbJDBdLFtDVVJMX0NIRUNLX09QVElPTl9XRVJST1JdKWRubAorICBBQ19CRUZPUkUoWyQwXSxbQ1VSTF9DSEVDS19QUk9HX0NDXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBzdHJpY3QgY29tcGlsZXIgd2FybmluZ3NdKQorICBPUFRfQ09NUElMRVJfV0FSTklOR1M9ImRlZmF1bHQiCisgIEFDX0FSR19FTkFCTEUod2FybmluZ3MsCitBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtd2FybmluZ3NdLFtFbmFibGUgc3RyaWN0IGNvbXBpbGVyIHdhcm5pbmdzXSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtd2FybmluZ3NdLFtEaXNhYmxlIHN0cmljdCBjb21waWxlciB3YXJuaW5nc10pLAorICBPUFRfQ09NUElMRVJfV0FSTklOR1M9JGVuYWJsZXZhbCkKKyAgY2FzZSAiJE9QVF9DT01QSUxFUl9XQVJOSU5HUyIgaW4KKyAgICBubykKKyAgICAgIGRubCAtLWRpc2FibGUtd2FybmluZ3Mgb3B0aW9uIHVzZWQKKyAgICAgIHdhbnRfd2FybmluZ3M9Im5vIgorICAgICAgOzsKKyAgICBkZWZhdWx0KQorICAgICAgZG5sIGNvbmZpZ3VyZSBvcHRpb24gbm90IHNwZWNpZmllZCwgc28KKyAgICAgIGRubCB1c2Ugc2FtZSBzZXR0aW5nIGFzIC0tZW5hYmxlLWRlYnVnCisgICAgICB3YW50X3dhcm5pbmdzPSIkd2FudF9kZWJ1ZyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGRubCAtLWVuYWJsZS13YXJuaW5ncyBvcHRpb24gdXNlZAorICAgICAgd2FudF93YXJuaW5ncz0ieWVzIgorICAgICAgOzsKKyAgZXNhYworICBBQ19NU0dfUkVTVUxUKFskd2FudF93YXJuaW5nc10pCitdKQorCitkbmwgQ1VSTF9DSEVDS19PUFRJT05fV0VSUk9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBjb25maWd1cmUgaGFzIGJlZW4gaW52b2tlZCB3aXRoIG9wdGlvbgorZG5sIC0tZW5hYmxlLXdlcnJvciBvciAtLWRpc2FibGUtd2Vycm9yLCBhbmQgc2V0Citkbmwgc2hlbGwgdmFyaWFibGUgd2FudF93ZXJyb3IgYXMgYXBwcm9wcmlhdGUuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX09QVElPTl9XRVJST1JdLCBbCisgIEFDX0JFRk9SRShbJDBdLFtDVVJMX0NIRUNLX0NPTVBJTEVSXSlkbmwKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBjb21waWxlciB3YXJuaW5ncyBhcyBlcnJvcnNdKQorICBPUFRfQ09NUElMRVJfV0VSUk9SPSJkZWZhdWx0IgorICBBQ19BUkdfRU5BQkxFKHdlcnJvciwKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS13ZXJyb3JdLFtFbmFibGUgY29tcGlsZXIgd2FybmluZ3MgYXMgZXJyb3JzXSkKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtd2Vycm9yXSxbRGlzYWJsZSBjb21waWxlciB3YXJuaW5ncyBhcyBlcnJvcnNdKSwKKyAgT1BUX0NPTVBJTEVSX1dFUlJPUj0kZW5hYmxldmFsKQorICBjYXNlICIkT1BUX0NPTVBJTEVSX1dFUlJPUiIgaW4KKyAgICBubykKKyAgICAgIGRubCAtLWRpc2FibGUtd2Vycm9yIG9wdGlvbiB1c2VkCisgICAgICB3YW50X3dlcnJvcj0ibm8iCisgICAgICA7OworICAgIGRlZmF1bHQpCisgICAgICBkbmwgY29uZmlndXJlIG9wdGlvbiBub3Qgc3BlY2lmaWVkCisgICAgICB3YW50X3dlcnJvcj0ibm8iCisgICAgICA7OworICAgICopCisgICAgICBkbmwgLS1lbmFibGUtd2Vycm9yIG9wdGlvbiB1c2VkCisgICAgICB3YW50X3dlcnJvcj0ieWVzIgorICAgICAgOzsKKyAgZXNhYworICBBQ19NU0dfUkVTVUxUKFskd2FudF93ZXJyb3JdKQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19OT05CTE9DS0lOR19TT0NLRVQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgZm9yIGhvdyB0byBzZXQgYSBzb2NrZXQgaW50byBub24tYmxvY2tpbmcgc3RhdGUuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX05PTkJMT0NLSU5HX1NPQ0tFVF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19PUFRJT05fTk9OQkxPQ0tJTkddKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0ZVTkNfRkNOVExdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0ZVTkNfSU9DVExdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0ZVTkNfSU9DVExTT0NLRVRdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0ZVTkNfSU9DVExTT0NLRVRfQ0FNRUxdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0NIRUNLX0ZVTkNfU0VUU09DS09QVF0pZG5sCisgICMKKyAgdHN0X21ldGhvZD0idW5rbm93biIKKyAgaWYgdGVzdCAiJHdhbnRfbm9uYmxvY2tpbmciID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBzZXQgYSBzb2NrZXQgaW50byBub24tYmxvY2tpbmcgbW9kZV0pCisgICAgaWYgdGVzdCAieCRhY19jdl9mdW5jX2ZjbnRsX29fbm9uYmxvY2siID0gInh5ZXMiOyB0aGVuCisgICAgICB0c3RfbWV0aG9kPSJmY250bCBPX05PTkJMT0NLIgorICAgIGVsaWYgdGVzdCAieCRhY19jdl9mdW5jX2lvY3RsX2Zpb25iaW8iID0gInh5ZXMiOyB0aGVuCisgICAgICB0c3RfbWV0aG9kPSJpb2N0bCBGSU9OQklPIgorICAgIGVsaWYgdGVzdCAieCRhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2Zpb25iaW8iID0gInh5ZXMiOyB0aGVuCisgICAgICB0c3RfbWV0aG9kPSJpb2N0bHNvY2tldCBGSU9OQklPIgorICAgIGVsaWYgdGVzdCAieCRhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW8iID0gInh5ZXMiOyB0aGVuCisgICAgICB0c3RfbWV0aG9kPSJJb2N0bFNvY2tldCBGSU9OQklPIgorICAgIGVsaWYgdGVzdCAieCRhY19jdl9mdW5jX3NldHNvY2tvcHRfc29fbm9uYmxvY2siID0gInh5ZXMiOyB0aGVuCisgICAgICB0c3RfbWV0aG9kPSJzZXRzb2Nrb3B0IFNPX05PTkJMT0NLIgorICAgIGZpCisgICAgQUNfTVNHX1JFU1VMVChbJHRzdF9tZXRob2RdKQorICAgIGlmIHRlc3QgIiR0c3RfbWV0aG9kIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfTVNHX1dBUk4oW2Nhbm5vdCBkZXRlcm1pbmUgbm9uLWJsb2NraW5nIHNvY2tldCBtZXRob2QuXSkKKyAgICBmaQorICBmaQorICBpZiB0ZXN0ICIkdHN0X21ldGhvZCIgPSAidW5rbm93biI7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoVVNFX0JMT0NLSU5HX1NPQ0tFVFMsIDEsCisgICAgICBbRGVmaW5lIHRvIGRpc2FibGUgbm9uLWJsb2NraW5nIHNvY2tldHMuXSkKKyAgICBBQ19NU0dfV0FSTihbbm9uLWJsb2NraW5nIHNvY2tldHMgZGlzYWJsZWQuXSkKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfTElCX0FSRVMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgV2hlbiBjLWFyZXMgbGlicmFyeSBzdXBwb3J0IGhhcyBiZWVuIHJlcXVlc3RlZCwKK2RubCBwZXJmb3JtcyBuZWNlc3NhcnkgY2hlY2tzIGFuZCBhZGp1c3RzbWVudHMgbmVlZGVkCitkbmwgdG8gZW5hYmxlIHN1cHBvcnQgb2YgdGhpcyBsaWJyYXJ5LgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19MSUJfQVJFU10sIFsKKyAgIworICBpZiB0ZXN0ICIkd2FudF9hcmVzIiA9ICJ5ZXMiOyB0aGVuCisgICAgZG5sIGMtYXJlcyBsaWJyYXJ5IHN1cHBvcnQgaGFzIGJlZW4gcmVxdWVzdGVkCisgICAgY2xlYW5fQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICBjbGVhbl9MREZMQUdTPSIkTERGTEFHUyIKKyAgICBjbGVhbl9MSUJTPSIkTElCUyIKKyAgICBlbWJlZGRlZF9hcmVzPSJ1bmtub3duIgorICAgIGNvbmZpZ3VyZV9ydW5wYXRoPWBwd2RgCisgICAgZW1iZWRkZWRfYXJlc19idWlsZGRpcj0iJGNvbmZpZ3VyZV9ydW5wYXRoL2FyZXMiCisgICAgaWYgdGVzdCAtbiAiJHdhbnRfYXJlc19wYXRoIjsgdGhlbgorICAgICAgZG5sIGMtYXJlcyBsaWJyYXJ5IHBhdGggaGFzIGJlZW4gc3BlY2lmaWVkCisgICAgICBhcmVzX0NQUEZMQUdTPSItSSR3YW50X2FyZXNfcGF0aC9pbmNsdWRlIgorICAgICAgYXJlc19MREZMQUdTPSItTCR3YW50X2FyZXNfcGF0aC9saWIiCisgICAgICBhcmVzX0xJQlM9Ii1sY2FyZXMiCisgICAgZWxzZQorICAgICAgZG5sIGMtYXJlcyBsaWJyYXJ5IHBhdGggaGFzIG5vdCBiZWVuIGdpdmVuCisgICAgICBpZiB0ZXN0IC1kICIkc3JjZGlyL2FyZXMiOyB0aGVuCisgICAgICAgIGRubCBjLWFyZXMgc291cmNlcyBlbWJlZGRlZCBpbiBjdXJsIHRyZWUKKyAgICAgICAgZW1iZWRkZWRfYXJlcz0ieWVzIgorICAgICAgICBBQ19DT05GSUdfU1VCRElSUyhhcmVzKQorICAgICAgICBkbmwgYy1hcmVzIGhhcyBpbnN0YWxsYWJsZSBjb25maWd1cmVkIGhlYWRlciBmaWxlcywgcGF0aAorICAgICAgICBkbmwgaW5jbHVzaW9uIGZ1bGx5IGRvbmUgaW4gbWFrZWZpbGVzIGZvciBpbi10cmVlIGJ1aWxkcy4KKyAgICAgICAgYXJlc19DUFBGTEFHUz0iIgorICAgICAgICBhcmVzX0xERkxBR1M9Ii1MJGVtYmVkZGVkX2FyZXNfYnVpbGRkaXIiCisgICAgICAgIGFyZXNfTElCUz0iLWxjYXJlcyIKKyAgICAgIGVsc2UKKyAgICAgICAgZG5sIGMtYXJlcyBwYXRoIG5vdCBzcGVjaWZpZWQsIHVzZSBkZWZhdWx0cworICAgICAgICBhcmVzX0NQUEZMQUdTPSIiCisgICAgICAgIGFyZXNfTERGTEFHUz0iIgorICAgICAgICBhcmVzX0xJQlM9Ii1sY2FyZXMiCisgICAgICBmaQorICAgIGZpCisgICAgIworICAgIENQUEZMQUdTPSIkYXJlc19DUFBGTEFHUyAkY2xlYW5fQ1BQRkxBR1MiCisgICAgTERGTEFHUz0iJGFyZXNfTERGTEFHUyAkY2xlYW5fTERGTEFHUyIKKyAgICBMSUJTPSIkYXJlc19MSUJTICRjbGVhbl9MSUJTIgorICAgICMKKyAgICBpZiB0ZXN0ICIkZW1iZWRkZWRfYXJlcyIgIT0gInllcyI7IHRoZW4KKyAgICAgIGRubCBjaGVjayBpZiBjLWFyZXMgbmV3IGVub3VnaCB3aGVuIG5vdCB1c2luZyBhbiBlbWJlZGRlZAorICAgICAgZG5sIHNvdXJjZSB0cmVlIG9uZSB3aGljaCBub3JtYWxseSBoYXMgbm90IGJlZW4gYnVpbHQgeWV0LgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFt0aGF0IGMtYXJlcyBpcyBnb29kIGFuZCByZWNlbnQgZW5vdWdoXSkKKyAgICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8YXJlcy5oPgorICAgICAgICAgIC8qIHNldCBvZiBkdW1teSBmdW5jdGlvbnMgaW4gY2FzZSBjLWFyZXMgd2FzIGJ1aWx0IHdpdGggZGVidWcgKi8KKyAgICAgICAgICB2b2lkIGN1cmxfZG9mcmVlKCkgeyB9CisgICAgICAgICAgdm9pZCBjdXJsX3NjbG9zZSgpIHsgfQorICAgICAgICAgIHZvaWQgY3VybF9kb21hbGxvYygpIHsgfQorICAgICAgICAgIHZvaWQgY3VybF9kb2NhbGxvYygpIHsgfQorICAgICAgICAgIHZvaWQgY3VybF9zb2NrZXQoKSB7IH0KKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBhcmVzX2NoYW5uZWwgY2hhbm5lbDsKKyAgICAgICAgICBhcmVzX2NhbmNlbChjaGFubmVsKTsgLyogYWRkZWQgaW4gMS4yLjAgKi8KKyAgICAgICAgICBhcmVzX3Byb2Nlc3NfZmQoY2hhbm5lbCwgMCwgMCk7IC8qIGFkZGVkIGluIDEuNC4wICovCisgICAgICAgICAgYXJlc19kdXAoJmNoYW5uZWwsIGNoYW5uZWwpOyAvKiBhZGRlZCBpbiAxLjYuMCAqLworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgQUNfTVNHX0VSUk9SKFtjLWFyZXMgbGlicmFyeSBkZWZlY3RpdmUgb3IgdG9vIG9sZF0pCisgICAgICAgIGRubCByZXN0b3JlIGluaXRpYWwgc2V0dGluZ3MKKyAgICAgICAgQ1BQRkxBR1M9IiRjbGVhbl9DUFBGTEFHUyIKKyAgICAgICAgTERGTEFHUz0iJGNsZWFuX0xERkxBR1MiCisgICAgICAgIExJQlM9IiRjbGVhbl9MSUJTIgorICAgICAgICAjIHByZXZlbnQgdXNhZ2UKKyAgICAgICAgd2FudF9hcmVzPSJubyIKKyAgICAgIF0pCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkd2FudF9hcmVzIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBkbmwgZmluYWxseSBjLWFyZXMgd2lsbCBiZSB1c2VkCisgICAgICBBQ19ERUZJTkUoVVNFX0FSRVMsIDEsIFtEZWZpbmUgdG8gZW5hYmxlIGMtYXJlcyBzdXBwb3J0XSkKKyAgICAgIEFDX1NVQlNUKFtVU0VfQVJFU10sIFsxXSkKKyAgICAgIGN1cmxfcmVzX21zZz0iYy1hcmVzIgorICAgIGZpCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX09QVElPTl9OVExNX1dCCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBjb25maWd1cmUgaGFzIGJlZW4gaW52b2tlZCB3aXRoIG9wdGlvbgorZG5sIC0tZW5hYmxlLW50bG0td2Igb3IgLS1kaXNhYmxlLW50bG0td2IsIGFuZCBzZXQKK2RubCBzaGVsbCB2YXJpYWJsZSB3YW50X250bG1fd2IgYW5kIHdhbnRfbnRsbV93Yl9maWxlCitkbmwgYXMgYXBwcm9wcmlhdGUuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX09QVElPTl9OVExNX1dCXSwgWworICBBQ19CRUZPUkUoWyQwXSxbQ1VSTF9DSEVDS19OVExNX1dCXSlkbmwKKyAgT1BUX05UTE1fV0I9ImRlZmF1bHQiCisgIEFDX0FSR19FTkFCTEUobnRsbS13YiwKK0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1udGxtLXdiQDw6QD1GSUxFQDo+QF0sW0VuYWJsZSBOVExNIGRlbGVnYXRpb24gdG8gd2luYmluZCdzIG50bG1fYXV0aCBoZWxwZXIsIHdoZXJlIEZJTEUgaXMgbnRsbV9hdXRoJ3MgYWJzb2x1dGUgZmlsZW5hbWUgKGRlZmF1bHQ6IC91c3IvYmluL250bG1fYXV0aCldKQorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1udGxtLXdiXSxbRGlzYWJsZSBOVExNIGRlbGVnYXRpb24gdG8gd2luYmluZCdzIG50bG1fYXV0aCBoZWxwZXJdKSwKKyAgT1BUX05UTE1fV0I9JGVuYWJsZXZhbCkKKyAgd2FudF9udGxtX3diX2ZpbGU9Ii91c3IvYmluL250bG1fYXV0aCIKKyAgY2FzZSAiJE9QVF9OVExNX1dCIiBpbgorICAgIG5vKQorICAgICAgZG5sIC0tZGlzYWJsZS1udGxtLXdiIG9wdGlvbiB1c2VkCisgICAgICB3YW50X250bG1fd2I9Im5vIgorICAgICAgOzsKKyAgICBkZWZhdWx0KQorICAgICAgZG5sIGNvbmZpZ3VyZSBvcHRpb24gbm90IHNwZWNpZmllZAorICAgICAgd2FudF9udGxtX3diPSJ5ZXMiCisgICAgICA7OworICAgICopCisgICAgICBkbmwgLS1lbmFibGUtbnRsbS13YiBvcHRpb24gdXNlZAorICAgICAgd2FudF9udGxtX3diPSJ5ZXMiCisgICAgICBpZiB0ZXN0IC1uICIkZW5hYmxldmFsIiAmJiB0ZXN0ICIkZW5hYmxldmFsIiAhPSAieWVzIjsgdGhlbgorICAgICAgICB3YW50X250bG1fd2JfZmlsZT0iJGVuYWJsZXZhbCIKKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCitdKQorCisKK2RubCBDVVJMX0NIRUNLX05UTE1fV0IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2sgaWYgc3VwcG9ydCBmb3IgTlRMTSBkZWxlZ2F0aW9uIHRvIHdpbmJpbmQncworZG5sIG50bG1fYXV0aCBoZWxwZXIgd2lsbCBmaW5hbGx5IGJlIGVuYWJsZWQgZGVwZW5kaW5nCitkbmwgb24gZ2l2ZW4gY29uZmlndXJlIG9wdGlvbnMgYW5kIHRhcmdldCBwbGF0Zm9ybS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTlRMTV9XQl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9DSEVDS19PUFRJT05fTlRMTV9XQl0pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfTkFUSVZFX1dJTkRPV1NdKWRubAorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIE5UTE0gZGVsZWdhdGlvbiB0byB3aW5iaW5kJ3MgaGVscGVyXSkKKyAgaWYgdGVzdCAiJGFjX2N2X25hdGl2ZV93aW5kb3dzIiA9ICJ5ZXMiIHx8CisgICAgdGVzdCAieCRTU0xfRU5BQkxFRCIgPSAieCI7IHRoZW4KKyAgICB3YW50X250bG1fd2JfZmlsZT0iIgorICAgIHdhbnRfbnRsbV93Yj0ibm8iCisgIGZpCisgIEFDX01TR19SRVNVTFQoWyR3YW50X250bG1fd2JdKQorICBpZiB0ZXN0ICIkd2FudF9udGxtX3diIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfREVGSU5FKE5UTE1fV0JfRU5BQkxFRCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gZW5hYmxlIE5UTE0gZGVsZWdhdGlvbiB0byB3aW5iaW5kJ3MgbnRsbV9hdXRoIGhlbHBlci5dKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChOVExNX1dCX0ZJTEUsICIkd2FudF9udGxtX3diX2ZpbGUiLAorICAgICAgW0RlZmluZSBhYnNvbHV0ZSBmaWxlbmFtZSBmb3Igd2luYmluZCdzIG50bG1fYXV0aCBoZWxwZXIuXSkKKyAgICBOVExNX1dCX0VOQUJMRUQ9MQorICBmaQorXSkKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbTQvY3VybC1mdW5jdGlvbnMubTQgYi9jdXJsLTcuMjUuMC9tNC9jdXJsLWZ1bmN0aW9ucy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDA3MDM1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbTQvY3VybC1mdW5jdGlvbnMubTQKQEAgLTAsMCArMSw3MDEzIEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyMgRmlsZSB2ZXJzaW9uIGZvciAnYWNsb2NhbCcgdXNlLiBLZWVwIGl0IGEgc2luZ2xlIG51bWJlci4KKyMgc2VyaWFsIDY5CisKKworZG5sIENVUkxfSU5DTFVERVNfQVJQQV9JTkVUCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIGFycGEvaW5ldC5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ1VSTF9JTkNMVURFU19BUlBBX0lORVRdLCBbCitjdXJsX2luY2x1ZGVzX2FycGFfaW5ldD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorIyAgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorIyAgaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCBzeXMvc29ja2V0LmggbmV0aW5ldC9pbi5oIGFycGEvaW5ldC5oLAorICAgIFtdLCBbXSwgWyRjdXJsX2luY2x1ZGVzX2FycGFfaW5ldF0pCitdKQorCisKK2RubCBDVVJMX0lOQ0xVREVTX0ZDTlRMCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIGZjbnRsLmggaXMgdG8gYmUgaW5jbHVkZWQuCisKK0FDX0RFRlVOKFtDVVJMX0lOQ0xVREVTX0ZDTlRMXSwgWworY3VybF9pbmNsdWRlc19mY250bD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjICBpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIEFDX0NIRUNLX0hFQURFUlMoCisgICAgc3lzL3R5cGVzLmggdW5pc3RkLmggZmNudGwuaCwKKyAgICBbXSwgW10sIFskY3VybF9pbmNsdWRlc19mY250bF0pCitdKQorCisKK2RubCBDVVJMX0lOQ0xVREVTX0lGQUREUlMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0IHVwIHZhcmlhYmxlIHdpdGggbGlzdCBvZiBoZWFkZXJzIHRoYXQgbXVzdCBiZQorZG5sIGluY2x1ZGVkIHdoZW4gaWZhZGRycy5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ1VSTF9JTkNMVURFU19JRkFERFJTXSwgWworY3VybF9pbmNsdWRlc19pZmFkZHJzPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyMgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lGQUREUlNfSAorIyAgaW5jbHVkZSA8aWZhZGRycy5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIEFDX0NIRUNLX0hFQURFUlMoCisgICAgc3lzL3R5cGVzLmggc3lzL3NvY2tldC5oIG5ldGluZXQvaW4uaCBpZmFkZHJzLmgsCisgICAgW10sIFtdLCBbJGN1cmxfaW5jbHVkZXNfaWZhZGRyc10pCitdKQorCisKK2RubCBDVVJMX0lOQ0xVREVTX0lOVFRZUEVTCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIGludHR5cGVzLmggaXMgdG8gYmUgaW5jbHVkZWQuCisKK0FDX0RFRlVOKFtDVVJMX0lOQ0xVREVTX0lOVFRZUEVTXSwgWworY3VybF9pbmNsdWRlc19pbnR0eXBlcz0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERJTlRfSAorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBpcml4KikKKyAgICAgIGFjX2N2X2hlYWRlcl9zdGRpbnRfaD0ibm8iCisgICAgICA7OworICBlc2FjCisgIEFDX0NIRUNLX0hFQURFUlMoCisgICAgc3lzL3R5cGVzLmggc3RkaW50LmggaW50dHlwZXMuaCwKKyAgICBbXSwgW10sIFskY3VybF9pbmNsdWRlc19pbnR0eXBlc10pCitdKQorCisKK2RubCBDVVJMX0lOQ0xVREVTX0xJQkdFTgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXQgdXAgdmFyaWFibGUgd2l0aCBsaXN0IG9mIGhlYWRlcnMgdGhhdCBtdXN0IGJlCitkbmwgaW5jbHVkZWQgd2hlbiBsaWJnZW4uaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NVUkxfSU5DTFVERVNfTElCR0VOXSwgWworY3VybF9pbmNsdWRlc19saWJnZW49IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0xJQkdFTl9ICisjICBpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBBQ19DSEVDS19IRUFERVJTKAorICAgIHN5cy90eXBlcy5oIGxpYmdlbi5oLAorICAgIFtdLCBbXSwgWyRjdXJsX2luY2x1ZGVzX2xpYmdlbl0pCitdKQorCisKK2RubCBDVVJMX0lOQ0xVREVTX05FVERCCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIG5ldGRiLmggaXMgdG8gYmUgaW5jbHVkZWQuCisKK0FDX0RFRlVOKFtDVVJMX0lOQ0xVREVTX05FVERCXSwgWworY3VybF9pbmNsdWRlc19uZXRkYj0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBBQ19DSEVDS19IRUFERVJTKAorICAgIHN5cy90eXBlcy5oIG5ldGRiLmgsCisgICAgW10sIFtdLCBbJGN1cmxfaW5jbHVkZXNfbmV0ZGJdKQorXSkKKworCitkbmwgQ1VSTF9JTkNMVURFU19QT0xMCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIHBvbGwuaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NVUkxfSU5DTFVERVNfUE9MTF0sIFsKK2N1cmxfaW5jbHVkZXNfcG9sbD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfUE9MTF9ICisjICBpbmNsdWRlIDxwb2xsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19QT0xMX0gKKyMgIGluY2x1ZGUgPHN5cy9wb2xsLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCBwb2xsLmggc3lzL3BvbGwuaCwKKyAgICBbXSwgW10sIFskY3VybF9pbmNsdWRlc19wb2xsXSkKK10pCisKKworZG5sIENVUkxfSU5DTFVERVNfU0VUSk1QCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIHNldGptcC5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ1VSTF9JTkNMVURFU19TRVRKTVBdLCBbCitjdXJsX2luY2x1ZGVzX3NldGptcD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU0VUSk1QX0gKKyMgIGluY2x1ZGUgPHNldGptcC5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIEFDX0NIRUNLX0hFQURFUlMoCisgICAgc3lzL3R5cGVzLmggc2V0am1wLmgsCisgICAgW10sIFtdLCBbJGN1cmxfaW5jbHVkZXNfc2V0am1wXSkKK10pCisKKworZG5sIENVUkxfSU5DTFVERVNfU0lHTkFMCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIHNpZ25hbC5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ1VSTF9JTkNMVURFU19TSUdOQUxdLCBbCitjdXJsX2luY2x1ZGVzX3NpZ25hbD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU0lHTkFMX0gKKyMgIGluY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIEFDX0NIRUNLX0hFQURFUlMoCisgICAgc3lzL3R5cGVzLmggc2lnbmFsLmgsCisgICAgW10sIFtdLCBbJGN1cmxfaW5jbHVkZXNfc2lnbmFsXSkKK10pCisKKworZG5sIENVUkxfSU5DTFVERVNfU09DS0VUCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIHNvY2tldC5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ1VSTF9JTkNMVURFU19TT0NLRVRdLCBbCitjdXJsX2luY2x1ZGVzX3NvY2tldD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU09DS0VUX0gKKyMgIGluY2x1ZGUgPHNvY2tldC5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIEFDX0NIRUNLX0hFQURFUlMoCisgICAgc3lzL3R5cGVzLmggc29ja2V0LmgsCisgICAgW10sIFtdLCBbJGN1cmxfaW5jbHVkZXNfc29ja2V0XSkKK10pCisKKworZG5sIENVUkxfSU5DTFVERVNfU1RESU8KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0IHVwIHZhcmlhYmxlIHdpdGggbGlzdCBvZiBoZWFkZXJzIHRoYXQgbXVzdCBiZQorZG5sIGluY2x1ZGVkIHdoZW4gc3RkaW8uaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NVUkxfSU5DTFVERVNfU1RESU9dLCBbCitjdXJsX2luY2x1ZGVzX3N0ZGlvPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERJT19ICisjICBpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIEFDX0NIRUNLX0hFQURFUlMoCisgICAgc3lzL3R5cGVzLmggc3RkaW8uaCwKKyAgICBbXSwgW10sIFskY3VybF9pbmNsdWRlc19zdGRpb10pCitdKQorCisKK2RubCBDVVJMX0lOQ0xVREVTX1NURExJQgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXQgdXAgdmFyaWFibGUgd2l0aCBsaXN0IG9mIGhlYWRlcnMgdGhhdCBtdXN0IGJlCitkbmwgaW5jbHVkZWQgd2hlbiBzdGRsaWIuaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NVUkxfSU5DTFVERVNfU1RETElCXSwgWworY3VybF9pbmNsdWRlc19zdGRsaWI9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBBQ19DSEVDS19IRUFERVJTKAorICAgIHN5cy90eXBlcy5oIHN0ZGxpYi5oLAorICAgIFtdLCBbXSwgWyRjdXJsX2luY2x1ZGVzX3N0ZGxpYl0pCitdKQorCisKK2RubCBDVVJMX0lOQ0xVREVTX1NUUklORworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXQgdXAgdmFyaWFibGUgd2l0aCBsaXN0IG9mIGhlYWRlcnMgdGhhdCBtdXN0IGJlCitkbmwgaW5jbHVkZWQgd2hlbiBzdHJpbmcocykuaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NVUkxfSU5DTFVERVNfU1RSSU5HXSwgWworY3VybF9pbmNsdWRlc19zdHJpbmc9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR19ICisjICBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HU19ICisjICBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCBzdHJpbmcuaCBzdHJpbmdzLmgsCisgICAgW10sIFtdLCBbJGN1cmxfaW5jbHVkZXNfc3RyaW5nXSkKK10pCisKKworZG5sIENVUkxfSU5DTFVERVNfU1RST1BUUworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXQgdXAgdmFyaWFibGUgd2l0aCBsaXN0IG9mIGhlYWRlcnMgdGhhdCBtdXN0IGJlCitkbmwgaW5jbHVkZWQgd2hlbiBzdHJvcHRzLmggaXMgdG8gYmUgaW5jbHVkZWQuCisKK0FDX0RFRlVOKFtDVVJMX0lOQ0xVREVTX1NUUk9QVFNdLCBbCitjdXJsX2luY2x1ZGVzX3N0cm9wdHM9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjICBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjICBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RST1BUU19ICisjICBpbmNsdWRlIDxzdHJvcHRzLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCB1bmlzdGQuaCBzeXMvc29ja2V0Lmggc3lzL2lvY3RsLmggc3Ryb3B0cy5oLAorICAgIFtdLCBbXSwgWyRjdXJsX2luY2x1ZGVzX3N0cm9wdHNdKQorXSkKKworCitkbmwgQ1VSTF9JTkNMVURFU19TWVNfU09DS0VUCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIHN5cy9zb2NrZXQuaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NVUkxfSU5DTFVERVNfU1lTX1NPQ0tFVF0sIFsKK2N1cmxfaW5jbHVkZXNfc3lzX3NvY2tldD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCBzeXMvc29ja2V0LmgsCisgICAgW10sIFtdLCBbJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldF0pCitdKQorCisKK2RubCBDVVJMX0lOQ0xVREVTX1NZU19UWVBFUworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXQgdXAgdmFyaWFibGUgd2l0aCBsaXN0IG9mIGhlYWRlcnMgdGhhdCBtdXN0IGJlCitkbmwgaW5jbHVkZWQgd2hlbiBzeXMvdHlwZXMuaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NVUkxfSU5DTFVERVNfU1lTX1RZUEVTXSwgWworY3VybF9pbmNsdWRlc19zeXNfdHlwZXM9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCwKKyAgICBbXSwgW10sIFskY3VybF9pbmNsdWRlc19zeXNfdHlwZXNdKQorXSkKKworCitkbmwgQ1VSTF9JTkNMVURFU19TWVNfVUlPCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIHN5cy91aW8uaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NVUkxfSU5DTFVERVNfU1lTX1VJT10sIFsKK2N1cmxfaW5jbHVkZXNfc3lzX3Vpbz0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1VJT19ICisjICBpbmNsdWRlIDxzeXMvdWlvLmg+CisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCBzeXMvdWlvLmgsCisgICAgW10sIFtdLCBbJGN1cmxfaW5jbHVkZXNfc3lzX3Vpb10pCitdKQorCisKK2RubCBDVVJMX0lOQ0xVREVTX1NZU19YQVRUUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTZXQgdXAgdmFyaWFibGUgd2l0aCBsaXN0IG9mIGhlYWRlcnMgdGhhdCBtdXN0IGJlCitkbmwgaW5jbHVkZWQgd2hlbiBzeXMveGF0dHIuaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NVUkxfSU5DTFVERVNfU1lTX1hBVFRSXSwgWworY3VybF9pbmNsdWRlc19zeXNfeGF0dHI9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19YQVRUUl9ICisjICBpbmNsdWRlIDxzeXMveGF0dHIuaD4KKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBBQ19DSEVDS19IRUFERVJTKAorICAgIHN5cy90eXBlcy5oIHN5cy94YXR0ci5oLAorICAgIFtdLCBbXSwgWyRjdXJsX2luY2x1ZGVzX3N5c194YXR0cl0pCitdKQorCitkbmwgQ1VSTF9JTkNMVURFU19USU1FCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIHRpbWUuaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NVUkxfSU5DTFVERVNfVElNRV0sIFsKK0FDX1JFUVVJUkUoW0FDX0hFQURFUl9USU1FXSlkbmwKK2N1cmxfaW5jbHVkZXNfdGltZT0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgIGlmZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorIyAgICBpbmNsdWRlIDx0aW1lLmg+CisjICBlbmRpZgorI2Vsc2UKKyMgIGlmZGVmIEhBVkVfVElNRV9ICisjICAgIGluY2x1ZGUgPHRpbWUuaD4KKyMgIGVuZGlmCisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQUNfQ0hFQ0tfSEVBREVSUygKKyAgICBzeXMvdHlwZXMuaCBzeXMvdGltZS5oIHRpbWUuaCwKKyAgICBbXSwgW10sIFskY3VybF9pbmNsdWRlc190aW1lXSkKK10pCisKKworZG5sIENVUkxfSU5DTFVERVNfVU5JU1RECitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGxpc3Qgb2YgaGVhZGVycyB0aGF0IG11c3QgYmUKK2RubCBpbmNsdWRlZCB3aGVuIHVuaXN0ZC5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ1VSTF9JTkNMVURFU19VTklTVERdLCBbCitjdXJsX2luY2x1ZGVzX3VuaXN0ZD0iXAorLyogaW5jbHVkZXMgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisvKiBpbmNsdWRlcyBlbmQgKi8iCisgIEFDX0NIRUNLX0hFQURFUlMoCisgICAgc3lzL3R5cGVzLmggdW5pc3RkLmgsCisgICAgW10sIFtdLCBbJGN1cmxfaW5jbHVkZXNfdW5pc3RkXSkKK10pCisKKworZG5sIENVUkxfSU5DTFVERVNfV0lOU09DSzIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0IHVwIHZhcmlhYmxlIHdpdGggbGlzdCBvZiBoZWFkZXJzIHRoYXQgbXVzdCBiZQorZG5sIGluY2x1ZGVkIHdoZW4gd2luc29jaygyKS5oIGlzIHRvIGJlIGluY2x1ZGVkLgorCitBQ19ERUZVTihbQ1VSTF9JTkNMVURFU19XSU5TT0NLMl0sIFsKK2N1cmxfaW5jbHVkZXNfd2luc29jazI9IlwKKy8qIGluY2x1ZGVzIHN0YXJ0ICovCisjaWZkZWYgSEFWRV9XSU5ET1dTX0gKKyMgIGlmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjICAgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjICBlbmRpZgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjICAgIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjICBlbHNlCisjICAgIGlmZGVmIEhBVkVfV0lOU09DS19ICisjICAgICAgaW5jbHVkZSA8d2luc29jay5oPgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorLyogaW5jbHVkZXMgZW5kICovIgorICBDVVJMX0NIRUNLX0hFQURFUl9XSU5ET1dTCisgIENVUkxfQ0hFQ0tfSEVBREVSX1dJTlNPQ0sKKyAgQ1VSTF9DSEVDS19IRUFERVJfV0lOU09DSzIKK10pCisKKworZG5sIENVUkxfSU5DTFVERVNfV1MyVENQSVAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2V0IHVwIHZhcmlhYmxlIHdpdGggbGlzdCBvZiBoZWFkZXJzIHRoYXQgbXVzdCBiZQorZG5sIGluY2x1ZGVkIHdoZW4gd3MydGNwaXAuaCBpcyB0byBiZSBpbmNsdWRlZC4KKworQUNfREVGVU4oW0NVUkxfSU5DTFVERVNfV1MyVENQSVBdLCBbCitjdXJsX2luY2x1ZGVzX3dzMnRjcGlwPSJcCisvKiBpbmNsdWRlcyBzdGFydCAqLworI2lmZGVmIEhBVkVfV0lORE9XU19ICisjICBpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGlmZGVmIEhBVkVfV0lOU09DSzJfSAorIyAgICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorIyAgICBpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyMgICAgICAgaW5jbHVkZSA8d3MydGNwaXAuaD4KKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKy8qIGluY2x1ZGVzIGVuZCAqLyIKKyAgQ1VSTF9DSEVDS19IRUFERVJfV0lORE9XUworICBDVVJMX0NIRUNLX0hFQURFUl9XSU5TT0NLMgorICBDVVJMX0NIRUNLX0hFQURFUl9XUzJUQ1BJUAorXSkKKworCitkbmwgQ1VSTF9QUkVQUk9DRVNTX0NBTExDT05WCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNldCB1cCB2YXJpYWJsZSB3aXRoIGEgcHJlcHJvY2Vzc29yIGJsb2NrIHdoaWNoCitkbmwgZGVmaW5lcyBmdW5jdGlvbiBjYWxsaW5nIGNvbnZlbnRpb24uCisKK0FDX0RFRlVOKFtDVVJMX1BSRVBST0NFU1NfQ0FMTENPTlZdLCBbCitjdXJsX3ByZXByb2Nlc3NfY2FsbGNvbnY9IlwKKy8qIHByZXByb2Nlc3Mgc3RhcnQgKi8KKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorIyAgZGVmaW5lIEZVTkNBTExDT05WIF9fc3RkY2FsbAorI2Vsc2UKKyMgIGRlZmluZSBGVU5DQUxMQ09OVgorI2VuZGlmCisvKiBwcmVwcm9jZXNzIGVuZCAqLyIKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19BTEFSTQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgYWxhcm0gaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19hbGFybSwgdGhlbgorZG5sIEhBVkVfQUxBUk0gd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0FMQVJNXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1VOSVNURF0pZG5sCisgICMKKyAgdHN0X2xpbmtzX2FsYXJtPSJ1bmtub3duIgorICB0c3RfcHJvdG9fYWxhcm09InVua25vd24iCisgIHRzdF9jb21waV9hbGFybT0idW5rbm93biIKKyAgdHN0X2FsbG93X2FsYXJtPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgYWxhcm0gY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2FsYXJtXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfYWxhcm09InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19hbGFybT0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19hbGFybSIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgYWxhcm0gaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFthbGFybV0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfdW5pc3RkCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2FsYXJtPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fYWxhcm09Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19hbGFybSIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgYWxhcm0gaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3VuaXN0ZAorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBhbGFybSgwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9hbGFybT0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX2FsYXJtPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfYWxhcm0iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGFsYXJtIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19hbGFybSIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2FsYXJtPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2FsYXJtPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgYWxhcm0gbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfYWxhcm0iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19hbGFybSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2FsYXJtIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfYWxhcm0iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0FMQVJNLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBhbGFybSBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfYWxhcm09InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2FsYXJtPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19CQVNFTkFNRQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgYmFzZW5hbWUgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19iYXNlbmFtZSwgdGhlbgorZG5sIEhBVkVfQkFTRU5BTUUgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0JBU0VOQU1FXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NUUklOR10pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfTElCR0VOXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19VTklTVERdKWRubAorICAjCisgIHRzdF9saW5rc19iYXNlbmFtZT0idW5rbm93biIKKyAgdHN0X3Byb3RvX2Jhc2VuYW1lPSJ1bmtub3duIgorICB0c3RfY29tcGlfYmFzZW5hbWU9InVua25vd24iCisgIHRzdF9hbGxvd19iYXNlbmFtZT0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGJhc2VuYW1lIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtiYXNlbmFtZV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2Jhc2VuYW1lPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfYmFzZW5hbWU9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfYmFzZW5hbWUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGJhc2VuYW1lIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbYmFzZW5hbWVdLFsKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgICAgJGN1cmxfaW5jbHVkZXNfbGliZ2VuCisgICAgICAkY3VybF9pbmNsdWRlc191bmlzdGQKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fYmFzZW5hbWU9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19iYXNlbmFtZT0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2Jhc2VuYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBiYXNlbmFtZSBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisgICAgICAgICRjdXJsX2luY2x1ZGVzX2xpYmdlbgorICAgICAgICAkY3VybF9pbmNsdWRlc191bmlzdGQKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gYmFzZW5hbWUoMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfYmFzZW5hbWU9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9iYXNlbmFtZT0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2Jhc2VuYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBiYXNlbmFtZSB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfYmFzZW5hbWUiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19iYXNlbmFtZT0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19iYXNlbmFtZT0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGJhc2VuYW1lIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2Jhc2VuYW1lIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fYmFzZW5hbWUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9iYXNlbmFtZSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2Jhc2VuYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9CQVNFTkFNRSwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYmFzZW5hbWUgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2Jhc2VuYW1lPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19iYXNlbmFtZT0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfQ0xPU0VTT0NLRVQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGNsb3Nlc29ja2V0IGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfY2xvc2Vzb2NrZXQsIHRoZW4KK2RubCBIQVZFX0NMT1NFU09DS0VUIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19DTE9TRVNPQ0tFVF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19XSU5TT0NLMl0pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU09DS0VUXSlkbmwKKyAgIworICB0c3RfbGlua3NfY2xvc2Vzb2NrZXQ9InVua25vd24iCisgIHRzdF9wcm90b19jbG9zZXNvY2tldD0idW5rbm93biIKKyAgdHN0X2NvbXBpX2Nsb3Nlc29ja2V0PSJ1bmtub3duIgorICB0c3RfYWxsb3dfY2xvc2Vzb2NrZXQ9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjbG9zZXNvY2tldCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjdXJsX2luY2x1ZGVzX3NvY2tldAorICAgIF1dLFtbCisgICAgICBpZigwICE9IGNsb3Nlc29ja2V0KDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfY2xvc2Vzb2NrZXQ9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19jbG9zZXNvY2tldD0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19jbG9zZXNvY2tldCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgY2xvc2Vzb2NrZXQgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtjbG9zZXNvY2tldF0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjdXJsX2luY2x1ZGVzX3NvY2tldAorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19jbG9zZXNvY2tldD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2Nsb3Nlc29ja2V0PSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fY2xvc2Vzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNsb3Nlc29ja2V0IGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY3VybF9pbmNsdWRlc19zb2NrZXQKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gY2xvc2Vzb2NrZXQoMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfY2xvc2Vzb2NrZXQ9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9jbG9zZXNvY2tldD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2Nsb3Nlc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjbG9zZXNvY2tldCB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfY2xvc2Vzb2NrZXQiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19jbG9zZXNvY2tldD0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19jbG9zZXNvY2tldD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNsb3Nlc29ja2V0IG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2Nsb3Nlc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fY2xvc2Vzb2NrZXQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9jbG9zZXNvY2tldCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2Nsb3Nlc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9DTE9TRVNPQ0tFVCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgY2xvc2Vzb2NrZXQgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2Nsb3Nlc29ja2V0PSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19jbG9zZXNvY2tldD0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfQ0xPU0VTT0NLRVRfQ0FNRUwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIENsb3NlU29ja2V0IGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfY2xvc2Vzb2NrZXRfY2FtZWwsCitkbmwgdGhlbiBIQVZFX0NMT1NFU09DS0VUX0NBTUVMIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19DTE9TRVNPQ0tFVF9DQU1FTF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TWVNfU09DS0VUXSlkbmwKKyAgIworICB0c3RfbGlua3NfY2xvc2Vzb2NrZXRfY2FtZWw9InVua25vd24iCisgIHRzdF9wcm90b19jbG9zZXNvY2tldF9jYW1lbD0idW5rbm93biIKKyAgdHN0X2NvbXBpX2Nsb3Nlc29ja2V0X2NhbWVsPSJ1bmtub3duIgorICB0c3RfYWxsb3dfY2xvc2Vzb2NrZXRfY2FtZWw9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBDbG9zZVNvY2tldCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgIF1dLFtbCisgICAgICBpZigwICE9IENsb3NlU29ja2V0KDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfY2xvc2Vzb2NrZXRfY2FtZWw9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19jbG9zZXNvY2tldF9jYW1lbD0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19jbG9zZXNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgQ2xvc2VTb2NrZXQgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtDbG9zZVNvY2tldF0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19jbG9zZXNvY2tldF9jYW1lbD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2Nsb3Nlc29ja2V0X2NhbWVsPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fY2xvc2Vzb2NrZXRfY2FtZWwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIENsb3NlU29ja2V0IGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IENsb3NlU29ja2V0KDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2Nsb3Nlc29ja2V0X2NhbWVsPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfY2xvc2Vzb2NrZXRfY2FtZWw9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9jbG9zZXNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgQ2xvc2VTb2NrZXQgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2Nsb3Nlc29ja2V0X2NhbWVsIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfY2xvc2Vzb2NrZXRfY2FtZWw9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfY2xvc2Vzb2NrZXRfY2FtZWw9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBDbG9zZVNvY2tldCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19jbG9zZXNvY2tldF9jYW1lbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2Nsb3Nlc29ja2V0X2NhbWVsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfY2xvc2Vzb2NrZXRfY2FtZWwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19jbG9zZXNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfQ0xPU0VTT0NLRVRfQ0FNRUwsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIENsb3NlU29ja2V0IGNhbWVsIGNhc2UgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2Nsb3Nlc29ja2V0X2NhbWVsPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19jbG9zZXNvY2tldF9jYW1lbD0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfQ09OTkVDVAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgY29ubmVjdCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X2Nvbm5lY3QsIHRoZW4KK2RubCBIQVZFX0NPTk5FQ1Qgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0NPTk5FQ1RdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfV0lOU09DSzJdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NZU19TT0NLRVRdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NPQ0tFVF0pZG5sCisgICMKKyAgdHN0X2xpbmtzX2Nvbm5lY3Q9InVua25vd24iCisgIHRzdF9wcm90b19jb25uZWN0PSJ1bmtub3duIgorICB0c3RfY29tcGlfY29ubmVjdD0idW5rbm93biIKKyAgdHN0X2FsbG93X2Nvbm5lY3Q9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb25uZWN0IGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGN1cmxfaW5jbHVkZXNfc29ja2V0CisgICAgXV0sW1sKKyAgICAgIGlmKDAgIT0gY29ubmVjdCgwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2Nvbm5lY3Q9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19jb25uZWN0PSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2Nvbm5lY3QiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbm5lY3QgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtjb25uZWN0XSxbCisgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGN1cmxfaW5jbHVkZXNfc29ja2V0CisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2Nvbm5lY3Q9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19jb25uZWN0PSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fY29ubmVjdCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgY29ubmVjdCBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY3VybF9pbmNsdWRlc19zb2NrZXQKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gY29ubmVjdCgwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9jb25uZWN0PSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfY29ubmVjdD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2Nvbm5lY3QiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbm5lY3QgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2Nvbm5lY3QiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19jb25uZWN0PSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2Nvbm5lY3Q9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb25uZWN0IG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2Nvbm5lY3QiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19jb25uZWN0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfY29ubmVjdCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2Nvbm5lY3QiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0NPTk5FQ1QsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGNvbm5lY3QgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2Nvbm5lY3Q9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2Nvbm5lY3Q9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX0ZDTlRMCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBmY250bCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X2ZjbnRsLCB0aGVuCitkbmwgSEFWRV9GQ05UTCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfRkNOVExdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfRkNOVExdKWRubAorICAjCisgIHRzdF9saW5rc19mY250bD0idW5rbm93biIKKyAgdHN0X3Byb3RvX2ZjbnRsPSJ1bmtub3duIgorICB0c3RfY29tcGlfZmNudGw9InVua25vd24iCisgIHRzdF9hbGxvd19mY250bD0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZjbnRsIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtmY250bF0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2ZjbnRsPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfZmNudGw9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZmNudGwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZjbnRsIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbZmNudGxdLFsKKyAgICAgICRjdXJsX2luY2x1ZGVzX2ZjbnRsCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2ZjbnRsPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fZmNudGw9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19mY250bCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZmNudGwgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX2ZjbnRsCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IGZjbnRsKDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2ZjbnRsPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfZmNudGw9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9mY250bCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZmNudGwgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2ZjbnRsIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfZmNudGw9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZmNudGw9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmY250bCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19mY250bCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2ZjbnRsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZmNudGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19mY250bCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfRkNOVEwsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZjbnRsIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19mY250bD0ieWVzIgorICAgIENVUkxfQ0hFQ0tfRlVOQ19GQ05UTF9PX05PTkJMT0NLCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19mY250bD0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfRkNOVExfT19OT05CTE9DSworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgZmNudGwgd2l0aCBzdGF0dXMgZmxhZyBPX05PTkJMT0NLIGlzCitkbmwgYXZhaWxhYmxlLCBjYW4gYmUgY29tcGlsZWQsIGFuZCBzZWVtcyB0byB3b3JrLiBJZgorZG5sIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgdGhlbiBIQVZFX0ZDTlRMX09fTk9OQkxPQ0sKK2RubCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfRkNOVExfT19OT05CTE9DS10sIFsKKyAgIworICB0c3RfY29tcGlfZmNudGxfb19ub25ibG9jaz0idW5rbm93biIKKyAgdHN0X2FsbG93X2ZjbnRsX29fbm9uYmxvY2s9InVua25vd24iCisgICMKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHN1bm9zNCogfCBhaXgzKiB8IGJlb3MqKQorICAgICAgZG5sIE9fTk9OQkxPQ0sgZG9lcyBub3Qgd29yayBvbiB0aGVzZSBwbGF0Zm9ybXMKKyAgICAgIGN1cmxfZGlzYWxsb3dfZmNudGxfb19ub25ibG9jaz0ieWVzIgorICAgICAgOzsKKyAgZXNhYworICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2ZjbnRsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmY250bCBPX05PTkJMT0NLIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19mY250bAorICAgICAgXV0sW1sKKyAgICAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgICAgaWYoMCAhPSBmY250bCgwLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2ZjbnRsX29fbm9uYmxvY2s9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9mY250bF9vX25vbmJsb2NrPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZmNudGxfb19ub25ibG9jayIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZmNudGwgT19OT05CTE9DSyB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZmNudGxfb19ub25ibG9jayIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2ZjbnRsX29fbm9uYmxvY2s9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZmNudGxfb19ub25ibG9jaz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZjbnRsIE9fTk9OQkxPQ0sgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZmNudGxfb19ub25ibG9jayIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2ZjbnRsX29fbm9uYmxvY2siID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0ZDTlRMX09fTk9OQkxPQ0ssIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGZjbnRsIE9fTk9OQkxPQ0sgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2ZjbnRsX29fbm9uYmxvY2s9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2ZjbnRsX29fbm9uYmxvY2s9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX0ZET1BFTgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgZmRvcGVuIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfZmRvcGVuLCB0aGVuCitkbmwgSEFWRV9GRE9QRU4gd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0ZET1BFTl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TVERJT10pZG5sCisgICMKKyAgdHN0X2xpbmtzX2Zkb3Blbj0idW5rbm93biIKKyAgdHN0X3Byb3RvX2Zkb3Blbj0idW5rbm93biIKKyAgdHN0X2NvbXBpX2Zkb3Blbj0idW5rbm93biIKKyAgdHN0X2FsbG93X2Zkb3Blbj0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZkb3BlbiBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZmRvcGVuXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfZmRvcGVuPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfZmRvcGVuPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2Zkb3BlbiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZmRvcGVuIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbZmRvcGVuXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zdGRpbworICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19mZG9wZW49InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19mZG9wZW49Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19mZG9wZW4iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZkb3BlbiBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RkaW8KKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gZmRvcGVuKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2Zkb3Blbj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX2Zkb3Blbj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2Zkb3BlbiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZmRvcGVuIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19mZG9wZW4iICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19mZG9wZW49InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZmRvcGVuPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZmRvcGVuIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2Zkb3BlbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2Zkb3BlbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2Zkb3BlbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2Zkb3BlbiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfRkRPUEVOLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmZG9wZW4gZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2Zkb3Blbj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfZmRvcGVuPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19GR0VUWEFUVFIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGZnZXR4YXR0ciBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X2ZnZXR4YXR0ciwgdGhlbgorZG5sIEhBVkVfRkdFVFhBVFRSIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19GR0VUWEFUVFJdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1lTX1hBVFRSXSlkbmwKKyAgIworICB0c3RfbGlua3NfZmdldHhhdHRyPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZmdldHhhdHRyPSJ1bmtub3duIgorICB0c3RfY29tcGlfZmdldHhhdHRyPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZmdldHhhdHRyPSJ1bmtub3duIgorICB0c3RfbmFyZ3NfZmdldHhhdHRyPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZmdldHhhdHRyIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtmZ2V0eGF0dHJdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19mZ2V0eGF0dHI9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19mZ2V0eGF0dHI9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZmdldHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmZ2V0eGF0dHIgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtmZ2V0eGF0dHJdLFsKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N5c194YXR0cgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19mZ2V0eGF0dHI9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19mZ2V0eGF0dHI9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19mZ2V0eGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2ZnZXR4YXR0ciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgZmdldHhhdHRyIHRha2VzIDQgYXJncy5dKQorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19zeXNfeGF0dHIKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBpZigwICE9IGZnZXR4YXR0cigwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICB0c3RfY29tcGlfZmdldHhhdHRyPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19mZ2V0eGF0dHI9IjQiCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICB0c3RfY29tcGlfZmdldHhhdHRyPSJubyIKKyAgICAgIF0pCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2ZnZXR4YXR0ciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgZmdldHhhdHRyIHRha2VzIDYgYXJncy5dKQorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19zeXNfeGF0dHIKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBpZigwICE9IGZnZXR4YXR0cigwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICB0c3RfY29tcGlfZmdldHhhdHRyPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19mZ2V0eGF0dHI9IjYiCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICB0c3RfY29tcGlfZmdldHhhdHRyPSJubyIKKyAgICAgIF0pCisgICAgZmkKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZnZXR4YXR0ciBpcyBjb21waWxhYmxlXSkKKyAgICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2ZnZXR4YXR0ciIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZmkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2ZnZXR4YXR0ciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZmdldHhhdHRyIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19mZ2V0eGF0dHIiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19mZ2V0eGF0dHI9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZmdldHhhdHRyPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZmdldHhhdHRyIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2ZnZXR4YXR0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2ZnZXR4YXR0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2ZnZXR4YXR0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2ZnZXR4YXR0ciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfRkdFVFhBVFRSLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmZ2V0eGF0dHIgZnVuY3Rpb24uXSkKKyAgICBkbmwgQUNfREVGSU5FX1VOUVVPVEVEKEZHRVRYQVRUUl9BUkdTLCAkdHN0X25hcmdzX2ZnZXR4YXR0ciwKKyAgICBkbmwgICBbU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGZnZXR4YXR0cl0pCisgICAgIworICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZmdldHhhdHRyIiAtZXEgIjQiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoSEFWRV9GR0VUWEFUVFJfNCwgMSwgW2ZnZXR4YXR0cigpIHRha2VzIDQgYXJnc10pCisgICAgZWxpZiB0ZXN0ICIkdHN0X25hcmdzX2ZnZXR4YXR0ciIgLWVxICI2IjsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfRkdFVFhBVFRSXzYsIDEsIFtmZ2V0eGF0dHIoKSB0YWtlcyA2IGFyZ3NdKQorICAgIGZpCisgICAgIworICAgIGFjX2N2X2Z1bmNfZmdldHhhdHRyPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19mZ2V0eGF0dHI9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX0ZMSVNUWEFUVFIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGZsaXN0eGF0dHIgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19mbGlzdHhhdHRyLCB0aGVuCitkbmwgSEFWRV9GTElTVFhBVFRSIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19GTElTVFhBVFRSXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NZU19YQVRUUl0pZG5sCisgICMKKyAgdHN0X2xpbmtzX2ZsaXN0eGF0dHI9InVua25vd24iCisgIHRzdF9wcm90b19mbGlzdHhhdHRyPSJ1bmtub3duIgorICB0c3RfY29tcGlfZmxpc3R4YXR0cj0idW5rbm93biIKKyAgdHN0X2FsbG93X2ZsaXN0eGF0dHI9InVua25vd24iCisgIHRzdF9uYXJnc19mbGlzdHhhdHRyPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZmxpc3R4YXR0ciBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZmxpc3R4YXR0cl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2ZsaXN0eGF0dHI9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19mbGlzdHhhdHRyPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2ZsaXN0eGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZsaXN0eGF0dHIgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtmbGlzdHhhdHRyXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zeXNfeGF0dHIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fZmxpc3R4YXR0cj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2ZsaXN0eGF0dHI9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19mbGlzdHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19mbGlzdHhhdHRyIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmbGlzdHhhdHRyIHRha2VzIDMgYXJncy5dKQorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19zeXNfeGF0dHIKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBpZigwICE9IGZsaXN0eGF0dHIoMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX2ZsaXN0eGF0dHI9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2ZsaXN0eGF0dHI9IjMiCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICB0c3RfY29tcGlfZmxpc3R4YXR0cj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19mbGlzdHhhdHRyIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmbGlzdHhhdHRyIHRha2VzIDQgYXJncy5dKQorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19zeXNfeGF0dHIKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBpZigwICE9IGZsaXN0eGF0dHIoMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX2ZsaXN0eGF0dHI9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2ZsaXN0eGF0dHI9IjQiCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICB0c3RfY29tcGlfZmxpc3R4YXR0cj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmbGlzdHhhdHRyIGlzIGNvbXBpbGFibGVdKQorICAgIGlmIHRlc3QgIiR0c3RfY29tcGlfZmxpc3R4YXR0ciIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZmkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2ZsaXN0eGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZsaXN0eGF0dHIgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2ZsaXN0eGF0dHIiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19mbGlzdHhhdHRyPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2ZsaXN0eGF0dHI9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmbGlzdHhhdHRyIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2ZsaXN0eGF0dHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19mbGlzdHhhdHRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZmxpc3R4YXR0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2ZsaXN0eGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0ZMSVNUWEFUVFIsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZsaXN0eGF0dHIgZnVuY3Rpb24uXSkKKyAgICBkbmwgQUNfREVGSU5FX1VOUVVPVEVEKEZMSVNUWEFUVFJfQVJHUywgJHRzdF9uYXJnc19mbGlzdHhhdHRyLAorICAgIGRubCAgIFtTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdG8gZmxpc3R4YXR0cl0pCisgICAgIworICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZmxpc3R4YXR0ciIgLWVxICIzIjsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfRkxJU1RYQVRUUl8zLCAxLCBbZmxpc3R4YXR0cigpIHRha2VzIDMgYXJnc10pCisgICAgZWxpZiB0ZXN0ICIkdHN0X25hcmdzX2ZsaXN0eGF0dHIiIC1lcSAiNCI7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX0ZMSVNUWEFUVFJfNCwgMSwgW2ZsaXN0eGF0dHIoKSB0YWtlcyA0IGFyZ3NdKQorICAgIGZpCisgICAgIworICAgIGFjX2N2X2Z1bmNfZmxpc3R4YXR0cj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfZmxpc3R4YXR0cj0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfRlJFRUFERFJJTkZPCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBmcmVlYWRkcmluZm8gaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLAorZG5sIGFuZCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwKK2RubCBhbmQgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19mcmVlYWRkcmluZm8sIHRoZW4KK2RubCBIQVZFX0ZSRUVBRERSSU5GTyB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfRlJFRUFERFJJTkZPXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1dTMlRDUElQXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TWVNfU09DS0VUXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19ORVREQl0pZG5sCisgICMKKyAgdHN0X2xpbmtzX2ZyZWVhZGRyaW5mbz0idW5rbm93biIKKyAgdHN0X3Byb3RvX2ZyZWVhZGRyaW5mbz0idW5rbm93biIKKyAgdHN0X2NvbXBpX2ZyZWVhZGRyaW5mbz0idW5rbm93biIKKyAgdHN0X2FsbG93X2ZyZWVhZGRyaW5mbz0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZyZWVhZGRyaW5mbyBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgJGN1cmxfaW5jbHVkZXNfd3MydGNwaXAKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisgICAgXV0sW1sKKyAgICAgIGZyZWVhZGRyaW5mbygwKTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfZnJlZWFkZHJpbmZvPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfZnJlZWFkZHJpbmZvPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2ZyZWVhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZnJlZWFkZHJpbmZvIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbZnJlZWFkZHJpbmZvXSxbCisgICAgICAkY3VybF9pbmNsdWRlc193czJ0Y3BpcAorICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fZnJlZWFkZHJpbmZvPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fZnJlZWFkZHJpbmZvPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZnJlZWFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmcmVlYWRkcmluZm8gaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKyAgICAgIF1dLFtbCisgICAgICAgIGZyZWVhZGRyaW5mbygwKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9mcmVlYWRkcmluZm89InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9mcmVlYWRkcmluZm89Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9mcmVlYWRkcmluZm8iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZyZWVhZGRyaW5mbyB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZnJlZWFkZHJpbmZvIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfZnJlZWFkZHJpbmZvPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2ZyZWVhZGRyaW5mbz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZyZWVhZGRyaW5mbyBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19mcmVlYWRkcmluZm8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19mcmVlYWRkcmluZm8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9mcmVlYWRkcmluZm8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19mcmVlYWRkcmluZm8iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0ZSRUVBRERSSU5GTywgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZnJlZWFkZHJpbmZvIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19mcmVlYWRkcmluZm89InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2ZyZWVhZGRyaW5mbz0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfRlJFRUlGQUREUlMKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGZyZWVpZmFkZHJzIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfZnJlZWlmYWRkcnMsIHRoZW4KK2RubCBIQVZFX0ZSRUVJRkFERFJTIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19GUkVFSUZBRERSU10sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19JRkFERFJTXSlkbmwKKyAgIworICB0c3RfbGlua3NfZnJlZWlmYWRkcnM9InVua25vd24iCisgIHRzdF9wcm90b19mcmVlaWZhZGRycz0idW5rbm93biIKKyAgdHN0X2NvbXBpX2ZyZWVpZmFkZHJzPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZnJlZWlmYWRkcnM9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmcmVlaWZhZGRycyBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZnJlZWlmYWRkcnNdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19mcmVlaWZhZGRycz0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2ZyZWVpZmFkZHJzPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2ZyZWVpZmFkZHJzIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmcmVlaWZhZGRycyBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2ZyZWVpZmFkZHJzXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19pZmFkZHJzCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2ZyZWVpZmFkZHJzPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fZnJlZWlmYWRkcnM9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19mcmVlaWZhZGRycyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZnJlZWlmYWRkcnMgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX2lmYWRkcnMKKyAgICAgIF1dLFtbCisgICAgICAgIGZyZWVpZmFkZHJzKDApOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2ZyZWVpZmFkZHJzPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfZnJlZWlmYWRkcnM9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9mcmVlaWZhZGRycyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZnJlZWlmYWRkcnMgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2ZyZWVpZmFkZHJzIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfZnJlZWlmYWRkcnM9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZnJlZWlmYWRkcnM9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmcmVlaWZhZGRycyBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19mcmVlaWZhZGRycyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2ZyZWVpZmFkZHJzIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZnJlZWlmYWRkcnMiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19mcmVlaWZhZGRycyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfRlJFRUlGQUREUlMsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZyZWVpZmFkZHJzIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19mcmVlaWZhZGRycz0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfZnJlZWlmYWRkcnM9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX0ZSRU1PVkVYQVRUUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgZnJlbW92ZXhhdHRyIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfZnJlbW92ZXhhdHRyLCB0aGVuCitkbmwgSEFWRV9GUkVNT1ZFWEFUVFIgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0ZSRU1PVkVYQVRUUl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TWVNfWEFUVFJdKWRubAorICAjCisgIHRzdF9saW5rc19mcmVtb3ZleGF0dHI9InVua25vd24iCisgIHRzdF9wcm90b19mcmVtb3ZleGF0dHI9InVua25vd24iCisgIHRzdF9jb21waV9mcmVtb3ZleGF0dHI9InVua25vd24iCisgIHRzdF9hbGxvd19mcmVtb3ZleGF0dHI9InVua25vd24iCisgIHRzdF9uYXJnc19mcmVtb3ZleGF0dHI9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmcmVtb3ZleGF0dHIgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2ZyZW1vdmV4YXR0cl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2ZyZW1vdmV4YXR0cj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2ZyZW1vdmV4YXR0cj0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19mcmVtb3ZleGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZyZW1vdmV4YXR0ciBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2ZyZW1vdmV4YXR0cl0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3hhdHRyCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2ZyZW1vdmV4YXR0cj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2ZyZW1vdmV4YXR0cj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2ZyZW1vdmV4YXR0ciIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZnJlbW92ZXhhdHRyIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmcmVtb3ZleGF0dHIgdGFrZXMgMiBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c194YXR0cgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gZnJlbW92ZXhhdHRyKDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIHRzdF9jb21waV9mcmVtb3ZleGF0dHI9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2ZyZW1vdmV4YXR0cj0iMiIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9mcmVtb3ZleGF0dHI9Im5vIgorICAgICAgXSkKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZnJlbW92ZXhhdHRyIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmcmVtb3ZleGF0dHIgdGFrZXMgMyBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c194YXR0cgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gZnJlbW92ZXhhdHRyKDAsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIHRzdF9jb21waV9mcmVtb3ZleGF0dHI9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2ZyZW1vdmV4YXR0cj0iMyIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9mcmVtb3ZleGF0dHI9Im5vIgorICAgICAgXSkKKyAgICBmaQorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZnJlbW92ZXhhdHRyIGlzIGNvbXBpbGFibGVdKQorICAgIGlmIHRlc3QgIiR0c3RfY29tcGlfZnJlbW92ZXhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZnJlbW92ZXhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmcmVtb3ZleGF0dHIgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2ZyZW1vdmV4YXR0ciIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2ZyZW1vdmV4YXR0cj0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19mcmVtb3ZleGF0dHI9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmcmVtb3ZleGF0dHIgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZnJlbW92ZXhhdHRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fZnJlbW92ZXhhdHRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZnJlbW92ZXhhdHRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfZnJlbW92ZXhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9GUkVNT1ZFWEFUVFIsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZyZW1vdmV4YXR0ciBmdW5jdGlvbi5dKQorICAgIGRubCBBQ19ERUZJTkVfVU5RVU9URUQoRlJFTU9WRVhBVFRSX0FSR1MsICR0c3RfbmFyZ3NfZnJlbW92ZXhhdHRyLAorICAgIGRubCAgIFtTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdG8gZnJlbW92ZXhhdHRyXSkKKyAgICAjCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19mcmVtb3ZleGF0dHIiIC1lcSAiMiI7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX0ZSRU1PVkVYQVRUUl8yLCAxLCBbZnJlbW92ZXhhdHRyKCkgdGFrZXMgMiBhcmdzXSkKKyAgICBlbGlmIHRlc3QgIiR0c3RfbmFyZ3NfZnJlbW92ZXhhdHRyIiAtZXEgIjMiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoSEFWRV9GUkVNT1ZFWEFUVFJfMywgMSwgW2ZyZW1vdmV4YXR0cigpIHRha2VzIDMgYXJnc10pCisgICAgZmkKKyAgICAjCisgICAgYWNfY3ZfZnVuY19mcmVtb3ZleGF0dHI9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2ZyZW1vdmV4YXR0cj0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfRlNFVFhBVFRSCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBmc2V0eGF0dHIgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19mc2V0eGF0dHIsIHRoZW4KK2RubCBIQVZFX0ZTRVRYQVRUUiB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfRlNFVFhBVFRSXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NZU19YQVRUUl0pZG5sCisgICMKKyAgdHN0X2xpbmtzX2ZzZXR4YXR0cj0idW5rbm93biIKKyAgdHN0X3Byb3RvX2ZzZXR4YXR0cj0idW5rbm93biIKKyAgdHN0X2NvbXBpX2ZzZXR4YXR0cj0idW5rbm93biIKKyAgdHN0X2FsbG93X2ZzZXR4YXR0cj0idW5rbm93biIKKyAgdHN0X25hcmdzX2ZzZXR4YXR0cj0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZzZXR4YXR0ciBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZnNldHhhdHRyXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfZnNldHhhdHRyPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfZnNldHhhdHRyPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2ZzZXR4YXR0ciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZnNldHhhdHRyIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbZnNldHhhdHRyXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zeXNfeGF0dHIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fZnNldHhhdHRyPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fZnNldHhhdHRyPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZnNldHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19mc2V0eGF0dHIiID0gInVua25vd24iOyB0aGVuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZzZXR4YXR0ciB0YWtlcyA1IGFyZ3MuXSkKKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3hhdHRyCisgICAgICAgIF1dLFtbCisgICAgICAgICAgaWYoMCAhPSBmc2V0eGF0dHIoMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX2ZzZXR4YXR0cj0ieWVzIgorICAgICAgICB0c3RfbmFyZ3NfZnNldHhhdHRyPSI1IgorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgdHN0X2NvbXBpX2ZzZXR4YXR0cj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19mc2V0eGF0dHIiID0gInVua25vd24iOyB0aGVuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZzZXR4YXR0ciB0YWtlcyA2IGFyZ3MuXSkKKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3hhdHRyCisgICAgICAgIF1dLFtbCisgICAgICAgICAgaWYoMCAhPSBmc2V0eGF0dHIoMCwgMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX2ZzZXR4YXR0cj0ieWVzIgorICAgICAgICB0c3RfbmFyZ3NfZnNldHhhdHRyPSI2IgorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgdHN0X2NvbXBpX2ZzZXR4YXR0cj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmc2V0eGF0dHIgaXMgY29tcGlsYWJsZV0pCisgICAgaWYgdGVzdCAiJHRzdF9jb21waV9mc2V0eGF0dHIiID0gInllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGZpCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9mc2V0eGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZzZXR4YXR0ciB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZnNldHhhdHRyIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfZnNldHhhdHRyPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2ZzZXR4YXR0cj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZzZXR4YXR0ciBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19mc2V0eGF0dHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19mc2V0eGF0dHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9mc2V0eGF0dHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19mc2V0eGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0ZTRVRYQVRUUiwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZnNldHhhdHRyIGZ1bmN0aW9uLl0pCisgICAgZG5sIEFDX0RFRklORV9VTlFVT1RFRChGU0VUWEFUVFJfQVJHUywgJHRzdF9uYXJnc19mc2V0eGF0dHIsCisgICAgZG5sICAgW1NwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmc2V0eGF0dHJdKQorICAgICMKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2ZzZXR4YXR0ciIgLWVxICI1IjsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfRlNFVFhBVFRSXzUsIDEsIFtmc2V0eGF0dHIoKSB0YWtlcyA1IGFyZ3NdKQorICAgIGVsaWYgdGVzdCAiJHRzdF9uYXJnc19mc2V0eGF0dHIiIC1lcSAiNiI7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX0ZTRVRYQVRUUl82LCAxLCBbZnNldHhhdHRyKCkgdGFrZXMgNiBhcmdzXSkKKyAgICBmaQorICAgICMKKyAgICBhY19jdl9mdW5jX2ZzZXR4YXR0cj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfZnNldHhhdHRyPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19GVFJVTkNBVEUKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGZ0cnVuY2F0ZSBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X2Z0cnVuY2F0ZSwgdGhlbgorZG5sIEhBVkVfRlRSVU5DQVRFIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19GVFJVTkNBVEVdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfVU5JU1REXSlkbmwKKyAgIworICB0c3RfbGlua3NfZnRydW5jYXRlPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZnRydW5jYXRlPSJ1bmtub3duIgorICB0c3RfY29tcGlfZnRydW5jYXRlPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZnRydW5jYXRlPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZnRydW5jYXRlIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtmdHJ1bmNhdGVdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19mdHJ1bmNhdGU9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19mdHJ1bmNhdGU9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZnRydW5jYXRlIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBmdHJ1bmNhdGUgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtmdHJ1bmNhdGVdLFsKKyAgICAgICRjdXJsX2luY2x1ZGVzX3VuaXN0ZAorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19mdHJ1bmNhdGU9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19mdHJ1bmNhdGU9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19mdHJ1bmNhdGUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZ0cnVuY2F0ZSBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfdW5pc3RkCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IGZ0cnVuY2F0ZSgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9mdHJ1bmNhdGU9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9mdHJ1bmNhdGU9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9mdHJ1bmNhdGUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZ0cnVuY2F0ZSB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZnRydW5jYXRlIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfZnRydW5jYXRlPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2Z0cnVuY2F0ZT0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGZ0cnVuY2F0ZSBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19mdHJ1bmNhdGUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19mdHJ1bmNhdGUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9mdHJ1bmNhdGUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19mdHJ1bmNhdGUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0ZUUlVOQ0FURSwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZnRydW5jYXRlIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19mdHJ1bmNhdGU9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2Z0cnVuY2F0ZT0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfR0VUQUREUklORk8KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGdldGFkZHJpbmZvIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgY2FuCitkbmwgYmUgY29tcGlsZWQgYW5kIHNlZW1zIHRvIHdvcmsuIElmIGFsbCBvZiB0aGVzZSBhcmUKK2RubCB0cnVlLCBhbmQgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZAorZG5sIHdpdGggc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19nZXRhZGRyaW5mbywgdGhlbgorZG5sIEhBVkVfR0VUQUREUklORk8gd2lsbCBiZSBkZWZpbmVkLiBBZGRpdGlvbmFsbHkgd2hlbgorZG5sIEhBVkVfR0VUQUREUklORk8gZ2V0cyBkZWZpbmVkIHRoaXMgd2lsbCBhbHNvIGF0dGVtcHQKK2RubCB0byBmaW5kIG91dCBpZiBnZXRhZGRyaW5mbyBoYXBwZW5zIHRvIGJlIHRocmVhZHNhZmUsCitkbmwgZGVmaW5pbmcgSEFWRV9HRVRBRERSSU5GT19USFJFQURTQUZFIHdoZW4gdHJ1ZS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19HRVRBRERSSU5GT10sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19XUzJUQ1BJUF0pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1RETElCXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TVFJJTkddKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NZU19TT0NLRVRdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX05FVERCXSlkbmwKKyAgIworICB0c3RfbGlua3NfZ2V0YWRkcmluZm89InVua25vd24iCisgIHRzdF9wcm90b19nZXRhZGRyaW5mbz0idW5rbm93biIKKyAgdHN0X2NvbXBpX2dldGFkZHJpbmZvPSJ1bmtub3duIgorICB0c3Rfd29ya3NfZ2V0YWRkcmluZm89InVua25vd24iCisgIHRzdF9hbGxvd19nZXRhZGRyaW5mbz0idW5rbm93biIKKyAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0YWRkcmluZm8gY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorICAgIF1dLFtbCisgICAgICBpZigwICE9IGdldGFkZHJpbmZvKDAsIDAsIDAsIDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfZ2V0YWRkcmluZm89InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19nZXRhZGRyaW5mbz0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0YWRkcmluZm8gaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtnZXRhZGRyaW5mb10sWworICAgICAgJGN1cmxfaW5jbHVkZXNfd3MydGNwaXAKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2dldGFkZHJpbmZvPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fZ2V0YWRkcmluZm89Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19nZXRhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0YWRkcmluZm8gaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gZ2V0YWRkcmluZm8oMCwgMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfZ2V0YWRkcmluZm89InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9nZXRhZGRyaW5mbz0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBkbmwgb25seSBkbyBydW50aW1lIHZlcmlmaWNhdGlvbiB3aGVuIG5vdCBjcm9zcy1jb21waWxpbmcKKyAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0c3RfY29tcGlfZ2V0YWRkcmluZm8iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGFkZHJpbmZvIHNlZW1zIHRvIHdvcmtdKQorICAgIEFDX1JVTl9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3dzMnRjcGlwCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0ZGxpYgorICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorICAgICAgXV0sW1sKKyAgICAgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzOworICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gKmFpID0gMDsKKyAgICAgICAgaW50IGVycm9yOworCisgICAgICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworICAgICAgICBoaW50cy5haV9mbGFncyA9IEFJX05VTUVSSUNIT1NUOworICAgICAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9VTlNQRUM7CisgICAgICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisgICAgICAgIGVycm9yID0gZ2V0YWRkcmluZm8oIjEyNy4wLjAuMSIsIDAsICZoaW50cywgJmFpKTsKKyAgICAgICAgaWYoZXJyb3IgfHwgIWFpKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgIGV4aXQoMCk7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3Rfd29ya3NfZ2V0YWRkcmluZm89InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF93b3Jrc19nZXRhZGRyaW5mbz0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGFkZHJpbmZvIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJHRzdF93b3Jrc19nZXRhZGRyaW5mbyIgIT0gIm5vIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0YWRkcmluZm8gdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2dldGFkZHJpbmZvIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfZ2V0YWRkcmluZm89InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZ2V0YWRkcmluZm89Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRhZGRyaW5mbyBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dldGFkZHJpbmZvIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZ2V0YWRkcmluZm8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19nZXRhZGRyaW5mbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3dvcmtzX2dldGFkZHJpbmZvIiAhPSAibm8iOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9HRVRBRERSSU5GTywgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ2V0YWRkcmluZm8gZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2dldGFkZHJpbmZvPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19nZXRhZGRyaW5mbz0ibm8iCisgICAgYWNfY3ZfZnVuY19nZXRhZGRyaW5mb190aHJlYWRzYWZlPSJubyIKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19nZXRhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0YWRkcmluZm8gaXMgdGhyZWFkc2FmZV0pCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4W1sxMjM0XV0uKiB8IGFpeDUuW1swMV1dLiopCisgICAgICAgIGRubCBhaXggNS4xIGFuZCBvbGRlcgorICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89Im5vIgorICAgICAgICA7OworICAgICAgYWl4KikKKyAgICAgICAgZG5sIGFpeCA1LjIgYW5kIG5ld2VyCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgICAgICA7OworICAgICAgZGFyd2luW1sxMjM0NV1dLiopCisgICAgICAgIGRubCBkYXJ3aW4gNS4wIGFuZCBtYWMgb3MgeCAxMC4xLlggYW5kIG9sZGVyCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICAgIDs7CisgICAgICBkYXJ3aW4qKQorICAgICAgICBkbmwgZGFyd2luIDYuMCBhbmQgbWFjIG9zIHggMTAuMi5YIGFuZCBuZXdlcgorICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InllcyIKKyAgICAgICAgOzsKKyAgICAgIGZyZWVic2RbWzEyMzRdXS4qIHwgZnJlZWJzZDUuW1sxMjM0XV0qKQorICAgICAgICBkbmwgZnJlZWJzZCA1LjQgYW5kIG9sZGVyCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICAgIDs7CisgICAgICBmcmVlYnNkKikKKyAgICAgICAgZG5sIGZyZWVic2QgNS41IGFuZCBuZXdlcgorICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InllcyIKKyAgICAgICAgOzsKKyAgICAgIGhwdXhbWzEyMzQ1Njc4OV1dLiogfCBocHV4MTAuKiB8IGhwdXgxMS4wKiB8IGhwdXgxMS4xMCopCisgICAgICAgIGRubCBocHV4IDExLjEwIGFuZCBvbGRlcgorICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89Im5vIgorICAgICAgICA7OworICAgICAgaHB1eCopCisgICAgICAgIGRubCBocHV4IDExLjExIGFuZCBuZXdlcgorICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89InllcyIKKyAgICAgICAgOzsKKyAgICAgIG5ldGJzZFtbMTIzXV0uKikKKyAgICAgICAgZG5sIG5ldGJzZCAzLlggYW5kIG9sZGVyCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICAgIDs7CisgICAgICBuZXRic2QqKQorICAgICAgICBkbmwgbmV0YnNkIDQuWCBhbmQgbmV3ZXIKKyAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJ5ZXMiCisgICAgICAgIDs7CisgICAgICAqYnNkKikKKyAgICAgICAgZG5sIEFsbCBvdGhlciBic2QncworICAgICAgICB0c3RfdHNhZmVfZ2V0YWRkcmluZm89Im5vIgorICAgICAgICA7OworICAgICAgc29sYXJpczIqKQorICAgICAgICBkbmwgc29sYXJpcyB3aGljaCBoYXZlIGl0CisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICBpZiB0ZXN0ICIkdHN0X3RzYWZlX2dldGFkZHJpbmZvIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgXV0sW1sKKyNpZiBkZWZpbmVkKF9QT1NJWF9DX1NPVVJDRSkgJiYgKF9QT1NJWF9DX1NPVVJDRSA+PSAyMDA4MDlMKQorICAgICAgICAgIHJldHVybiAwOworI2VsaWYgZGVmaW5lZChfWE9QRU5fU09VUkNFKSAmJiAoX1hPUEVOX1NPVVJDRSA+PSA3MDApCisgICAgICAgICAgcmV0dXJuIDA7CisjZWxzZQorICAgICAgICAgIGZvcmNlIGNvbXBpbGF0aW9uIGVycm9yCisjZW5kaWYKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgdHN0X3RzYWZlX2dldGFkZHJpbmZvPSJ5ZXMiCisgICAgICBdKQorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF90c2FmZV9nZXRhZGRyaW5mbyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIENVUkxfQ0hFQ0tfREVGX0NDKFtoX2Vycm5vXSwgWworICAgICAgICAkY3VybF9pbmNsdWRlc193czJ0Y3BpcAorICAgICAgICAkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisgICAgICAgIF0sIFtzaWxlbnRdKQorICAgICAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfaF9lcnJubyIgPSAibm8iOyB0aGVuCisgICAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ibm8iCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF90c2FmZV9nZXRhZGRyaW5mbyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIHRzdF90c2FmZV9nZXRhZGRyaW5mbz0ieWVzIgorICAgIGZpCisgICAgQUNfTVNHX1JFU1VMVChbJHRzdF90c2FmZV9nZXRhZGRyaW5mb10pCisgICAgaWYgdGVzdCAiJHRzdF90c2FmZV9nZXRhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBnZXRhZGRyaW5mbyBmdW5jdGlvbiBpcyB0aHJlYWRzYWZlLl0pCisgICAgICBhY19jdl9mdW5jX2dldGFkZHJpbmZvX3RocmVhZHNhZmU9InllcyIKKyAgICBlbHNlCisgICAgICBhY19jdl9mdW5jX2dldGFkZHJpbmZvX3RocmVhZHNhZmU9Im5vIgorICAgIGZpCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfR0VUSE9TVEJZQUREUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgZ2V0aG9zdGJ5YWRkciBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsCitkbmwgYW5kIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLAorZG5sIGFuZCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X2dldGhvc3RieWFkZHIsIHRoZW4KK2RubCBIQVZFX0dFVEhPU1RCWUFERFIgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0dFVEhPU1RCWUFERFJdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfV0lOU09DSzJdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX05FVERCXSlkbmwKKyAgIworICB0c3RfbGlua3NfZ2V0aG9zdGJ5YWRkcj0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dldGhvc3RieWFkZHI9InVua25vd24iCisgIHRzdF9jb21waV9nZXRob3N0YnlhZGRyPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZ2V0aG9zdGJ5YWRkcj0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieWFkZHIgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorICAgIF1dLFtbCisgICAgICBpZigwICE9IGdldGhvc3RieWFkZHIoMCwgMCwgMCkpCisgICAgICAgIHJldHVybiAxOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19nZXRob3N0YnlhZGRyPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfZ2V0aG9zdGJ5YWRkcj0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRob3N0YnlhZGRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRob3N0YnlhZGRyIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbZ2V0aG9zdGJ5YWRkcl0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2dldGhvc3RieWFkZHI9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnlhZGRyPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZ2V0aG9zdGJ5YWRkciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdGJ5YWRkciBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gZ2V0aG9zdGJ5YWRkcigwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9nZXRob3N0YnlhZGRyPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkcj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieWFkZHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieWFkZHIgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2dldGhvc3RieWFkZHIiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19nZXRob3N0YnlhZGRyPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2dldGhvc3RieWFkZHI9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRob3N0YnlhZGRyIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieWFkZHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0YnlhZGRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dldGhvc3RieWFkZHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dFVEhPU1RCWUFERFIsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHIgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2dldGhvc3RieWFkZHI9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2dldGhvc3RieWFkZHI9Im5vIgorICBmaQorXSkKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19HQUlfU1RSRVJST1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGdhaV9zdHJlcnJvciBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsCitkbmwgYW5kIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLAorZG5sIGFuZCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X2dhaV9zdHJlcnJvciwgdGhlbgorZG5sIEhBVkVfR0FJX1NUUkVSUk9SIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19HQUlfU1RSRVJST1JdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfV0lOU09DSzJdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX05FVERCXSlkbmwKKyAgIworICB0c3RfbGlua3NfZ2FpX3N0cmVycm9yPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2FpX3N0cmVycm9yPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ2FpX3N0cmVycm9yPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZ2FpX3N0cmVycm9yPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2FpX3N0cmVycm9yIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKyAgICBdXSxbWworICAgICAgaWYoMCAhPSBnYWlfc3RyZXJyb3IoMCkpCisgICAgICAgIHJldHVybiAxOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19nYWlfc3RyZXJyb3I9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19nYWlfc3RyZXJyb3I9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2FpX3N0cmVycm9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnYWlfc3RyZXJyb3IgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtnYWlfc3RyZXJyb3JdLFsKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19nYWlfc3RyZXJyb3I9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19nYWlfc3RyZXJyb3I9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19nYWlfc3RyZXJyb3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdhaV9zdHJlcnJvciBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gZ2FpX3N0cmVycm9yKDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2dhaV9zdHJlcnJvcj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX2dhaV9zdHJlcnJvcj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dhaV9zdHJlcnJvciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2FpX3N0cmVycm9yIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19nYWlfc3RyZXJyb3IiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19nYWlfc3RyZXJyb3I9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZ2FpX3N0cmVycm9yPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2FpX3N0cmVycm9yIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dhaV9zdHJlcnJvciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dhaV9zdHJlcnJvciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2dhaV9zdHJlcnJvciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dhaV9zdHJlcnJvciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfR0FJX1NUUkVSUk9SLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnYWlfc3RyZXJyb3IgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2dhaV9zdHJlcnJvcj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfZ2FpX3N0cmVycm9yPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19HRVRIT1NUQllBRERSX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGdldGhvc3RieWFkZHJfciBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsCitkbmwgYW5kIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X2dldGhvc3RieWFkZHJfciwgdGhlbgorZG5sIEhBVkVfR0VUSE9TVEJZQUREUl9SIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19HRVRIT1NUQllBRERSX1JdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfTkVUREJdKWRubAorICAjCisgIHRzdF9saW5rc19nZXRob3N0YnlhZGRyX3I9InVua25vd24iCisgIHRzdF9wcm90b19nZXRob3N0YnlhZGRyX3I9InVua25vd24iCisgIHRzdF9jb21waV9nZXRob3N0YnlhZGRyX3I9InVua25vd24iCisgIHRzdF9hbGxvd19nZXRob3N0YnlhZGRyX3I9InVua25vd24iCisgIHRzdF9uYXJnc19nZXRob3N0YnlhZGRyX3I9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRob3N0YnlhZGRyX3IgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2dldGhvc3RieWFkZHJfcl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2dldGhvc3RieWFkZHJfcj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2dldGhvc3RieWFkZHJfcj0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRob3N0YnlhZGRyX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieWFkZHJfciBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2dldGhvc3RieWFkZHJfcl0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fZ2V0aG9zdGJ5YWRkcl9yPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fZ2V0aG9zdGJ5YWRkcl9yPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZ2V0aG9zdGJ5YWRkcl9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19nZXRob3N0YnlhZGRyX3IiID0gInVua25vd24iOyB0aGVuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieWFkZHJfciB0YWtlcyA1IGFyZ3MuXSkKKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBpZigwICE9IGdldGhvc3RieWFkZHJfcigwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkcl9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXRob3N0YnlhZGRyX3I9IjUiCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5YWRkcl9yPSJubyIKKyAgICAgIF0pCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldGhvc3RieWFkZHJfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdGJ5YWRkcl9yIHRha2VzIDcgYXJncy5dKQorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gZ2V0aG9zdGJ5YWRkcl9yKDAsIDAsIDAsIDAsIDAsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIHRzdF9jb21waV9nZXRob3N0YnlhZGRyX3I9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2dldGhvc3RieWFkZHJfcj0iNyIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9nZXRob3N0YnlhZGRyX3I9Im5vIgorICAgICAgXSkKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0aG9zdGJ5YWRkcl9yIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRob3N0YnlhZGRyX3IgdGFrZXMgOCBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisgICAgICAgIF1dLFtbCisgICAgICAgICAgaWYoMCAhPSBnZXRob3N0YnlhZGRyX3IoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX2dldGhvc3RieWFkZHJfcj0ieWVzIgorICAgICAgICB0c3RfbmFyZ3NfZ2V0aG9zdGJ5YWRkcl9yPSI4IgorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgdHN0X2NvbXBpX2dldGhvc3RieWFkZHJfcj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRob3N0YnlhZGRyX3IgaXMgY29tcGlsYWJsZV0pCisgICAgaWYgdGVzdCAiJHRzdF9jb21waV9nZXRob3N0YnlhZGRyX3IiID0gInllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGZpCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9nZXRob3N0YnlhZGRyX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieWFkZHJfciB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZ2V0aG9zdGJ5YWRkcl9yIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfZ2V0aG9zdGJ5YWRkcl9yPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2dldGhvc3RieWFkZHJfcj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieWFkZHJfciBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRob3N0YnlhZGRyX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0YnlhZGRyX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9nZXRob3N0YnlhZGRyX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19nZXRob3N0YnlhZGRyX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dFVEhPU1RCWUFERFJfUiwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkcl9yIGZ1bmN0aW9uLl0pCisgICAgZG5sIEFDX0RFRklORV9VTlFVT1RFRChHRVRIT1NUQllBRERSX1JfQVJHUywgJHRzdF9uYXJnc19nZXRob3N0YnlhZGRyX3IsCisgICAgZG5sICAgW1NwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBnZXRob3N0YnlhZGRyX3JdKQorICAgICMKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldGhvc3RieWFkZHJfciIgLWVxICI1IjsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZQUREUl9SXzUsIDEsIFtnZXRob3N0YnlhZGRyX3IoKSB0YWtlcyA1IGFyZ3NdKQorICAgIGVsaWYgdGVzdCAiJHRzdF9uYXJnc19nZXRob3N0YnlhZGRyX3IiIC1lcSAiNyI7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX0dFVEhPU1RCWUFERFJfUl83LCAxLCBbZ2V0aG9zdGJ5YWRkcl9yKCkgdGFrZXMgNyBhcmdzXSkKKyAgICBlbGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0aG9zdGJ5YWRkcl9yIiAtZXEgIjgiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllBRERSX1JfOCwgMSwgW2dldGhvc3RieWFkZHJfcigpIHRha2VzIDggYXJnc10pCisgICAgZmkKKyAgICAjCisgICAgYWNfY3ZfZnVuY19nZXRob3N0YnlhZGRyX3I9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2dldGhvc3RieWFkZHJfcj0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfR0VUSE9TVEJZTkFNRQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgZ2V0aG9zdGJ5bmFtZSBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsCitkbmwgYW5kIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLAorZG5sIGFuZCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X2dldGhvc3RieW5hbWUsIHRoZW4KK2RubCBIQVZFX0dFVEhPU1RCWU5BTUUgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0dFVEhPU1RCWU5BTUVdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfV0lOU09DSzJdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX05FVERCXSlkbmwKKyAgIworICB0c3RfbGlua3NfZ2V0aG9zdGJ5bmFtZT0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dldGhvc3RieW5hbWU9InVua25vd24iCisgIHRzdF9jb21waV9nZXRob3N0YnluYW1lPSJ1bmtub3duIgorICB0c3RfYWxsb3dfZ2V0aG9zdGJ5bmFtZT0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieW5hbWUgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorICAgIF1dLFtbCisgICAgICBpZigwICE9IGdldGhvc3RieW5hbWUoMCkpCisgICAgICAgIHJldHVybiAxOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19nZXRob3N0YnluYW1lPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfZ2V0aG9zdGJ5bmFtZT0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nZXRob3N0YnluYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRob3N0YnluYW1lIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbZ2V0aG9zdGJ5bmFtZV0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2dldGhvc3RieW5hbWU9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnluYW1lPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZ2V0aG9zdGJ5bmFtZSIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdGJ5bmFtZSBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gZ2V0aG9zdGJ5bmFtZSgwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9nZXRob3N0YnluYW1lPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5bmFtZT0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieW5hbWUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieW5hbWUgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2dldGhvc3RieW5hbWUiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19nZXRob3N0YnluYW1lPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2dldGhvc3RieW5hbWU9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRob3N0YnluYW1lIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieW5hbWUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0YnluYW1lIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZ2V0aG9zdGJ5bmFtZSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dldGhvc3RieW5hbWUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dFVEhPU1RCWU5BTUUsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWUgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2dldGhvc3RieW5hbWU9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2dldGhvc3RieW5hbWU9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX0dFVEhPU1RCWU5BTUVfUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgZ2V0aG9zdGJ5bmFtZV9yIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwKK2RubCBhbmQgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfZ2V0aG9zdGJ5bmFtZV9yLCB0aGVuCitkbmwgSEFWRV9HRVRIT1NUQllOQU1FX1Igd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0dFVEhPU1RCWU5BTUVfUl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19ORVREQl0pZG5sCisgICMKKyAgdHN0X2xpbmtzX2dldGhvc3RieW5hbWVfcj0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dldGhvc3RieW5hbWVfcj0idW5rbm93biIKKyAgdHN0X2NvbXBpX2dldGhvc3RieW5hbWVfcj0idW5rbm93biIKKyAgdHN0X2FsbG93X2dldGhvc3RieW5hbWVfcj0idW5rbm93biIKKyAgdHN0X25hcmdzX2dldGhvc3RieW5hbWVfcj0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieW5hbWVfciBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZ2V0aG9zdGJ5bmFtZV9yXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfZ2V0aG9zdGJ5bmFtZV9yPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfZ2V0aG9zdGJ5bmFtZV9yPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieW5hbWVfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdGJ5bmFtZV9yIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbZ2V0aG9zdGJ5bmFtZV9yXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnluYW1lX3I9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19nZXRob3N0YnluYW1lX3I9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0YnluYW1lX3IiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldGhvc3RieW5hbWVfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdGJ5bmFtZV9yIHRha2VzIDMgYXJncy5dKQorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gZ2V0aG9zdGJ5bmFtZV9yKDAsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIHRzdF9jb21waV9nZXRob3N0YnluYW1lX3I9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2dldGhvc3RieW5hbWVfcj0iMyIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9nZXRob3N0YnluYW1lX3I9Im5vIgorICAgICAgXSkKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0aG9zdGJ5bmFtZV9yIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRob3N0YnluYW1lX3IgdGFrZXMgNSBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisgICAgICAgIF1dLFtbCisgICAgICAgICAgaWYoMCAhPSBnZXRob3N0YnluYW1lX3IoMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX2dldGhvc3RieW5hbWVfcj0ieWVzIgorICAgICAgICB0c3RfbmFyZ3NfZ2V0aG9zdGJ5bmFtZV9yPSI1IgorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgdHN0X2NvbXBpX2dldGhvc3RieW5hbWVfcj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19nZXRob3N0YnluYW1lX3IiID0gInVua25vd24iOyB0aGVuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieW5hbWVfciB0YWtlcyA2IGFyZ3MuXSkKKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBpZigwICE9IGdldGhvc3RieW5hbWVfcigwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5bmFtZV9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXRob3N0YnluYW1lX3I9IjYiCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICB0c3RfY29tcGlfZ2V0aG9zdGJ5bmFtZV9yPSJubyIKKyAgICAgIF0pCisgICAgZmkKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RieW5hbWVfciBpcyBjb21waWxhYmxlXSkKKyAgICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieW5hbWVfciIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZmkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieW5hbWVfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdGJ5bmFtZV9yIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19nZXRob3N0YnluYW1lX3IiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19nZXRob3N0YnluYW1lX3I9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZ2V0aG9zdGJ5bmFtZV9yPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdGJ5bmFtZV9yIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RieW5hbWVfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dldGhvc3RieW5hbWVfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RieW5hbWVfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dldGhvc3RieW5hbWVfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfR0VUSE9TVEJZTkFNRV9SLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnluYW1lX3IgZnVuY3Rpb24uXSkKKyAgICBkbmwgQUNfREVGSU5FX1VOUVVPVEVEKEdFVEhPU1RCWU5BTUVfUl9BUkdTLCAkdHN0X25hcmdzX2dldGhvc3RieW5hbWVfciwKKyAgICBkbmwgICBbU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGdldGhvc3RieW5hbWVfcl0pCisgICAgIworICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0aG9zdGJ5bmFtZV9yIiAtZXEgIjMiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1JfMywgMSwgW2dldGhvc3RieW5hbWVfcigpIHRha2VzIDMgYXJnc10pCisgICAgZWxpZiB0ZXN0ICIkdHN0X25hcmdzX2dldGhvc3RieW5hbWVfciIgLWVxICI1IjsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzUsIDEsIFtnZXRob3N0YnluYW1lX3IoKSB0YWtlcyA1IGFyZ3NdKQorICAgIGVsaWYgdGVzdCAiJHRzdF9uYXJnc19nZXRob3N0YnluYW1lX3IiIC1lcSAiNiI7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX0dFVEhPU1RCWU5BTUVfUl82LCAxLCBbZ2V0aG9zdGJ5bmFtZV9yKCkgdGFrZXMgNiBhcmdzXSkKKyAgICBmaQorICAgICMKKyAgICBhY19jdl9mdW5jX2dldGhvc3RieW5hbWVfcj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZV9yPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19HRVRIT1NUTkFNRQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgZ2V0aG9zdG5hbWUgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19nZXRob3N0bmFtZSwgdGhlbgorZG5sIEhBVkVfR0VUSE9TVE5BTUUgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0dFVEhPU1ROQU1FXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1dJTlNPQ0syXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19VTklTVERdKWRubAorICAjCisgIHRzdF9saW5rc19nZXRob3N0bmFtZT0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dldGhvc3RuYW1lPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ2V0aG9zdG5hbWU9InVua25vd24iCisgIHRzdF9hbGxvd19nZXRob3N0bmFtZT0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RuYW1lIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGN1cmxfaW5jbHVkZXNfdW5pc3RkCisgICAgXV0sW1sKKyAgICAgIGlmKDAgIT0gZ2V0aG9zdG5hbWUoMCwgMCkpCisgICAgICAgIHJldHVybiAxOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19nZXRob3N0bmFtZT0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2dldGhvc3RuYW1lPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGhvc3RuYW1lIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRob3N0bmFtZSBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2dldGhvc3RuYW1lXSxbCisgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGN1cmxfaW5jbHVkZXNfdW5pc3RkCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2dldGhvc3RuYW1lPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fZ2V0aG9zdG5hbWU9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0bmFtZSIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdG5hbWUgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3VuaXN0ZAorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBnZXRob3N0bmFtZSgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9nZXRob3N0bmFtZT0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX2dldGhvc3RuYW1lPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZ2V0aG9zdG5hbWUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGhvc3RuYW1lIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19nZXRob3N0bmFtZSIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2dldGhvc3RuYW1lPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2dldGhvc3RuYW1lPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aG9zdG5hbWUgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0aG9zdG5hbWUiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXRob3N0bmFtZSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldGhvc3RuYW1lIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfZ2V0aG9zdG5hbWUiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dFVEhPU1ROQU1FLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0bmFtZSBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfZ2V0aG9zdG5hbWU9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2dldGhvc3RuYW1lPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19HRVRJRkFERFJTCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBnZXRpZmFkZHJzIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgY2FuCitkbmwgYmUgY29tcGlsZWQgYW5kIHNlZW1zIHRvIHdvcmsuIElmIGFsbCBvZiB0aGVzZSBhcmUKK2RubCB0cnVlLCBhbmQgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZAorZG5sIHdpdGggc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19nZXRpZmFkZHJzLCB0aGVuCitkbmwgSEFWRV9HRVRJRkFERFJTIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19HRVRJRkFERFJTXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NURExJQl0pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfSUZBRERSU10pZG5sCisgICMKKyAgdHN0X2xpbmtzX2dldGlmYWRkcnM9InVua25vd24iCisgIHRzdF9wcm90b19nZXRpZmFkZHJzPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ2V0aWZhZGRycz0idW5rbm93biIKKyAgdHN0X3dvcmtzX2dldGlmYWRkcnM9InVua25vd24iCisgIHRzdF9hbGxvd19nZXRpZmFkZHJzPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aWZhZGRycyBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZ2V0aWZhZGRyc10pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2dldGlmYWRkcnM9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19nZXRpZmFkZHJzPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldGlmYWRkcnMiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGlmYWRkcnMgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtnZXRpZmFkZHJzXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19pZmFkZHJzCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2dldGlmYWRkcnM9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19nZXRpZmFkZHJzPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZ2V0aWZhZGRycyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aWZhZGRycyBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfaWZhZGRycworICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBnZXRpZmFkZHJzKDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2dldGlmYWRkcnM9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9nZXRpZmFkZHJzPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGRubCBvbmx5IGRvIHJ1bnRpbWUgdmVyaWZpY2F0aW9uIHdoZW4gbm90IGNyb3NzLWNvbXBpbGluZworICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiICYmCisgICAgdGVzdCAiJHRzdF9jb21waV9nZXRpZmFkZHJzIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRpZmFkZHJzIHNlZW1zIHRvIHdvcmtdKQorICAgIEFDX1JVTl9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0ZGxpYgorICAgICAgICAkY3VybF9pbmNsdWRlc19pZmFkZHJzCisgICAgICBdXSxbWworICAgICAgICBzdHJ1Y3QgaWZhZGRycyAqaWZhID0gMDsKKyAgICAgICAgaW50IGVycm9yOworCisgICAgICAgIGVycm9yID0gZ2V0aWZhZGRycygmaWZhKTsKKyAgICAgICAgaWYoZXJyb3IgfHwgIWlmYSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICBleGl0KDApOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3dvcmtzX2dldGlmYWRkcnM9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF93b3Jrc19nZXRpZmFkZHJzPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZ2V0aWZhZGRycyIgPSAieWVzIiAmJgorICAgIHRlc3QgIiR0c3Rfd29ya3NfZ2V0aWZhZGRycyIgIT0gIm5vIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0aWZhZGRycyB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfZ2V0aWZhZGRycyIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2dldGlmYWRkcnM9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZ2V0aWZhZGRycz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGlmYWRkcnMgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0aWZhZGRycyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dldGlmYWRkcnMiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9nZXRpZmFkZHJzIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfZ2V0aWZhZGRycyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3dvcmtzX2dldGlmYWRkcnMiICE9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dFVElGQUREUlMsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGdldGlmYWRkcnMgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2dldGlmYWRkcnM9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2dldGlmYWRkcnM9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX0dFVFNFUlZCWVBPUlRfUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgZ2V0c2VydmJ5cG9ydF9yIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwKK2RubCBhbmQgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfZ2V0c2VydmJ5cG9ydF9yLCB0aGVuCitkbmwgSEFWRV9HRVRTRVJWQllQT1JUX1Igd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0dFVFNFUlZCWVBPUlRfUl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19ORVREQl0pZG5sCisgICMKKyAgdHN0X2xpbmtzX2dldHNlcnZieXBvcnRfcj0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dldHNlcnZieXBvcnRfcj0idW5rbm93biIKKyAgdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfcj0idW5rbm93biIKKyAgdHN0X2FsbG93X2dldHNlcnZieXBvcnRfcj0idW5rbm93biIKKyAgdHN0X25hcmdzX2dldHNlcnZieXBvcnRfcj0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldHNlcnZieXBvcnRfciBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZ2V0c2VydmJ5cG9ydF9yXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfZ2V0c2VydmJ5cG9ydF9yPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldHNlcnZieXBvcnRfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0c2VydmJ5cG9ydF9yIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbZ2V0c2VydmJ5cG9ydF9yXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3I9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19nZXRzZXJ2Ynlwb3J0X3IiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2dldHNlcnZieXBvcnRfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0c2VydmJ5cG9ydF9yIHRha2VzIDQgYXJncy5dKQorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19uZXRkYgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gZ2V0c2VydmJ5cG9ydF9yKDAsIDAsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIHRzdF9jb21waV9nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2dldHNlcnZieXBvcnRfcj0iNCIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9nZXRzZXJ2Ynlwb3J0X3I9Im5vIgorICAgICAgXSkKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0c2VydmJ5cG9ydF9yIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXRzZXJ2Ynlwb3J0X3IgdGFrZXMgNSBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX25ldGRiCisgICAgICAgIF1dLFtbCisgICAgICAgICAgaWYoMCAhPSBnZXRzZXJ2Ynlwb3J0X3IoMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfcj0ieWVzIgorICAgICAgICB0c3RfbmFyZ3NfZ2V0c2VydmJ5cG9ydF9yPSI1IgorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfcj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3IiID0gInVua25vd24iOyB0aGVuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldHNlcnZieXBvcnRfciB0YWtlcyA2IGFyZ3MuXSkKKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfbmV0ZGIKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBpZigwICE9IGdldHNlcnZieXBvcnRfcigwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXRzZXJ2Ynlwb3J0X3I9IjYiCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICB0c3RfY29tcGlfZ2V0c2VydmJ5cG9ydF9yPSJubyIKKyAgICAgIF0pCisgICAgZmkKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldHNlcnZieXBvcnRfciBpcyBjb21waWxhYmxlXSkKKyAgICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfciIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZmkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0c2VydmJ5cG9ydF9yIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19nZXRzZXJ2Ynlwb3J0X3IiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19nZXRzZXJ2Ynlwb3J0X3I9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZ2V0c2VydmJ5cG9ydF9yPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0c2VydmJ5cG9ydF9yIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldHNlcnZieXBvcnRfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dldHNlcnZieXBvcnRfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldHNlcnZieXBvcnRfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2dldHNlcnZieXBvcnRfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfR0VUU0VSVkJZUE9SVF9SLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXRzZXJ2Ynlwb3J0X3IgZnVuY3Rpb24uXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoR0VUU0VSVkJZUE9SVF9SX0FSR1MsICR0c3RfbmFyZ3NfZ2V0c2VydmJ5cG9ydF9yLAorICAgICAgW1NwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBnZXRzZXJ2Ynlwb3J0X3JdKQorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0c2VydmJ5cG9ydF9yIiAtZXEgIjQiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoR0VUU0VSVkJZUE9SVF9SX0JVRlNJWkUsIHNpemVvZihzdHJ1Y3Qgc2VydmVudF9kYXRhKSwKKyAgICAgICAgW1NwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHBhc3MgdG8gZ2V0c2VydmJ5cG9ydF9yXSkKKyAgICBlbHNlCisgICAgICBBQ19ERUZJTkUoR0VUU0VSVkJZUE9SVF9SX0JVRlNJWkUsIDQwOTYsCisgICAgICAgIFtTcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byBwYXNzIHRvIGdldHNlcnZieXBvcnRfcl0pCisgICAgZmkKKyAgICBhY19jdl9mdW5jX2dldHNlcnZieXBvcnRfcj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfZ2V0c2VydmJ5cG9ydF9yPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19HRVRYQVRUUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgZ2V0eGF0dHIgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19nZXR4YXR0ciwgdGhlbgorZG5sIEhBVkVfR0VUWEFUVFIgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0dFVFhBVFRSXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NZU19YQVRUUl0pZG5sCisgICMKKyAgdHN0X2xpbmtzX2dldHhhdHRyPSJ1bmtub3duIgorICB0c3RfcHJvdG9fZ2V0eGF0dHI9InVua25vd24iCisgIHRzdF9jb21waV9nZXR4YXR0cj0idW5rbm93biIKKyAgdHN0X2FsbG93X2dldHhhdHRyPSJ1bmtub3duIgorICB0c3RfbmFyZ3NfZ2V0eGF0dHI9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXR4YXR0ciBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZ2V0eGF0dHJdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19nZXR4YXR0cj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2dldHhhdHRyPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2dldHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXR4YXR0ciBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2dldHhhdHRyXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zeXNfeGF0dHIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fZ2V0eGF0dHI9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19nZXR4YXR0cj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2dldHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19nZXR4YXR0ciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0eGF0dHIgdGFrZXMgNCBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c194YXR0cgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gZ2V0eGF0dHIoMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX2dldHhhdHRyPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXR4YXR0cj0iNCIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9nZXR4YXR0cj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19nZXR4YXR0ciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0eGF0dHIgdGFrZXMgNiBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c194YXR0cgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gZ2V0eGF0dHIoMCwgMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX2dldHhhdHRyPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19nZXR4YXR0cj0iNiIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9nZXR4YXR0cj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnZXR4YXR0ciBpcyBjb21waWxhYmxlXSkKKyAgICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dldHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfZ2V0eGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldHhhdHRyIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19nZXR4YXR0ciIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2dldHhhdHRyPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2dldHhhdHRyPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ2V0eGF0dHIgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfZ2V0eGF0dHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19nZXR4YXR0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2dldHhhdHRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfZ2V0eGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dFVFhBVFRSLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBnZXR4YXR0ciBmdW5jdGlvbi5dKQorICAgIGRubCBBQ19ERUZJTkVfVU5RVU9URUQoR0VUWEFUVFJfQVJHUywgJHRzdF9uYXJnc19nZXR4YXR0ciwKKyAgICBkbmwgICBbU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGdldHhhdHRyXSkKKyAgICAjCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19nZXR4YXR0ciIgLWVxICI0IjsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfR0VUWEFUVFJfNCwgMSwgW2dldHhhdHRyKCkgdGFrZXMgNCBhcmdzXSkKKyAgICBlbGlmIHRlc3QgIiR0c3RfbmFyZ3NfZ2V0eGF0dHIiIC1lcSAiNiI7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX0dFVFhBVFRSXzYsIDEsIFtnZXR4YXR0cigpIHRha2VzIDYgYXJnc10pCisgICAgZmkKKyAgICAjCisgICAgYWNfY3ZfZnVuY19nZXR4YXR0cj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfZ2V0eGF0dHI9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX0dNVElNRV9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBnbXRpbWVfciBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGNhbgorZG5sIGJlIGNvbXBpbGVkIGFuZCBzZWVtcyB0byB3b3JrLiBJZiBhbGwgb2YgdGhlc2UgYXJlCitkbmwgdHJ1ZSwgYW5kIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQKK2RubCB3aXRoIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfZ210aW1lX3IsIHRoZW4KK2RubCBIQVZFX0dNVElNRV9SIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19HTVRJTUVfUl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TVERMSUJdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1RJTUVdKWRubAorICAjCisgIHRzdF9saW5rc19nbXRpbWVfcj0idW5rbm93biIKKyAgdHN0X3Byb3RvX2dtdGltZV9yPSJ1bmtub3duIgorICB0c3RfY29tcGlfZ210aW1lX3I9InVua25vd24iCisgIHRzdF93b3Jrc19nbXRpbWVfcj0idW5rbm93biIKKyAgdHN0X2FsbG93X2dtdGltZV9yPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgZ210aW1lX3IgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2dtdGltZV9yXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfZ210aW1lX3I9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19nbXRpbWVfcj0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nbXRpbWVfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ210aW1lX3IgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtnbXRpbWVfcl0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfdGltZQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19nbXRpbWVfcj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2dtdGltZV9yPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fZ210aW1lX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdtdGltZV9yIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc190aW1lCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IGdtdGltZV9yKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2dtdGltZV9yPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfZ210aW1lX3I9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgZG5sIG9ubHkgZG8gcnVudGltZSB2ZXJpZmljYXRpb24gd2hlbiBub3QgY3Jvc3MtY29tcGlsaW5nCisgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X2NvbXBpX2dtdGltZV9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnbXRpbWVfciBzZWVtcyB0byB3b3JrXSkKKyAgICBBQ19SVU5fSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zdGRsaWIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfdGltZQorICAgICAgXV0sW1sKKyAgICAgICAgdGltZV90IGxvY2FsID0gMTE3MDM1MjU4NzsKKyAgICAgICAgc3RydWN0IHRtICpnbXQgPSAwOworICAgICAgICBzdHJ1Y3QgdG0gcmVzdWx0OworICAgICAgICBnbXQgPSBnbXRpbWVfcigmbG9jYWwsICZyZXN1bHQpOworICAgICAgICBpZihnbXQpCisgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGV4aXQoMSk7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3Rfd29ya3NfZ210aW1lX3I9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF93b3Jrc19nbXRpbWVfcj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2dtdGltZV9yIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJHRzdF93b3Jrc19nbXRpbWVfciIgIT0gIm5vIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgZ210aW1lX3IgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2dtdGltZV9yIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfZ210aW1lX3I9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfZ210aW1lX3I9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBnbXRpbWVfciBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19nbXRpbWVfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2dtdGltZV9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfZ210aW1lX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19nbXRpbWVfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3dvcmtzX2dtdGltZV9yIiAhPSAibm8iOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9HTVRJTUVfUiwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ210aW1lX3IgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2dtdGltZV9yPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19nbXRpbWVfcj0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfSU5FVF9OVE9BX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGluZXRfbnRvYV9yIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwKK2RubCBhbmQgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfaW5ldF9udG9hX3IsIHRoZW4KK2RubCBIQVZFX0lORVRfTlRPQV9SIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19JTkVUX05UT0FfUl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19BUlBBX0lORVRdKWRubAorICAjCisgIHRzdF9saW5rc19pbmV0X250b2Ffcj0idW5rbm93biIKKyAgdHN0X3Byb3RvX2luZXRfbnRvYV9yPSJ1bmtub3duIgorICB0c3RfY29tcGlfaW5ldF9udG9hX3I9InVua25vd24iCisgIHRzdF9hbGxvd19pbmV0X250b2Ffcj0idW5rbm93biIKKyAgdHN0X25hcmdzX2luZXRfbnRvYV9yPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9udG9hX3IgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2luZXRfbnRvYV9yXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfaW5ldF9udG9hX3I9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19pbmV0X250b2Ffcj0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pbmV0X250b2FfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9udG9hX3IgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtpbmV0X250b2Ffcl0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfYXJwYV9pbmV0CisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2luZXRfbnRvYV9yPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9faW5ldF9udG9hX3I9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19pbmV0X250b2FfciIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfaW5ldF9udG9hX3IiID0gInVua25vd24iOyB0aGVuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfbnRvYV9yIHRha2VzIDIgYXJncy5dKQorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAkY3VybF9pbmNsdWRlc19hcnBhX2luZXQKKyAgICAgICAgXV0sW1sKKyAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworICAgICAgICAgIGlmKDAgIT0gaW5ldF9udG9hX3IoYWRkciwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX2luZXRfbnRvYV9yPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19pbmV0X250b2Ffcj0iMiIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9pbmV0X250b2Ffcj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19pbmV0X250b2FfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9udG9hX3IgdGFrZXMgMyBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX2FycGFfaW5ldAorICAgICAgICBdXSxbWworICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisgICAgICAgICAgaWYoMCAhPSBpbmV0X250b2FfcihhZGRyLCAwLCAwKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBdXSkKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICB0c3RfY29tcGlfaW5ldF9udG9hX3I9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2luZXRfbnRvYV9yPSIzIgorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgdHN0X2NvbXBpX2luZXRfbnRvYV9yPSJubyIKKyAgICAgIF0pCisgICAgZmkKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfbnRvYV9yIGlzIGNvbXBpbGFibGVdKQorICAgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9udG9hX3IiID0gInllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGZpCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pbmV0X250b2FfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9udG9hX3IgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2luZXRfbnRvYV9yIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfaW5ldF9udG9hX3I9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfaW5ldF9udG9hX3I9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpbmV0X250b2FfciBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pbmV0X250b2FfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2luZXRfbnRvYV9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfaW5ldF9udG9hX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19pbmV0X250b2FfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU5FVF9OVE9BX1IsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGluZXRfbnRvYV9yIGZ1bmN0aW9uLl0pCisgICAgZG5sIEFDX0RFRklORV9VTlFVT1RFRChJTkVUX05UT0FfUl9BUkdTLCAkdHN0X25hcmdzX2luZXRfbnRvYV9yLAorICAgIGRubCAgIFtTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdG8gaW5ldF9udG9hX3JdKQorICAgICMKKyAgICBpZiB0ZXN0ICIkdHN0X25hcmdzX2luZXRfbnRvYV9yIiAtZXEgIjIiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoSEFWRV9JTkVUX05UT0FfUl8yLCAxLCBbaW5ldF9udG9hX3IoKSB0YWtlcyAyIGFyZ3NdKQorICAgIGVsaWYgdGVzdCAiJHRzdF9uYXJnc19pbmV0X250b2FfciIgLWVxICIzIjsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfSU5FVF9OVE9BX1JfMywgMSwgW2luZXRfbnRvYV9yKCkgdGFrZXMgMyBhcmdzXSkKKyAgICBmaQorICAgICMKKyAgICBhY19jdl9mdW5jX2luZXRfbnRvYV9yPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19pbmV0X250b2Ffcj0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfSU5FVF9OVE9QCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBpbmV0X250b3AgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBjYW4KK2RubCBiZSBjb21waWxlZCBhbmQgc2VlbXMgdG8gd29yay4gSWYgYWxsIG9mIHRoZXNlIGFyZQorZG5sIHRydWUsIGFuZCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkCitkbmwgd2l0aCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X2luZXRfbnRvcCwgdGhlbgorZG5sIEhBVkVfSU5FVF9OVE9QIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19JTkVUX05UT1BdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1RETElCXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19BUlBBX0lORVRdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NUUklOR10pZG5sCisgICMKKyAgdHN0X2xpbmtzX2luZXRfbnRvcD0idW5rbm93biIKKyAgdHN0X3Byb3RvX2luZXRfbnRvcD0idW5rbm93biIKKyAgdHN0X2NvbXBpX2luZXRfbnRvcD0idW5rbm93biIKKyAgdHN0X3dvcmtzX2luZXRfbnRvcD0idW5rbm93biIKKyAgdHN0X2FsbG93X2luZXRfbnRvcD0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfbnRvcCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbaW5ldF9udG9wXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfaW5ldF9udG9wPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfaW5ldF9udG9wPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2luZXRfbnRvcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9udG9wIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbaW5ldF9udG9wXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19hcnBhX2luZXQKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9faW5ldF9udG9wPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9faW5ldF9udG9wPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9faW5ldF9udG9wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpbmV0X250b3AgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX2FycGFfaW5ldAorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBpbmV0X250b3AoMCwgMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfaW5ldF9udG9wPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfaW5ldF9udG9wPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGRubCBvbmx5IGRvIHJ1bnRpbWUgdmVyaWZpY2F0aW9uIHdoZW4gbm90IGNyb3NzLWNvbXBpbGluZworICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiICYmCisgICAgdGVzdCAiJHRzdF9jb21waV9pbmV0X250b3AiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfbnRvcCBzZWVtcyB0byB3b3JrXSkKKyAgICBBQ19SVU5fSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zdGRsaWIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfYXJwYV9pbmV0CisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgICAgXV0sW1sKKyAgICAgICAgY2hhciBpcHY2cmVzW3NpemVvZigiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6MjU1LjI1NS4yNTUuMjU1IildOworICAgICAgICBjaGFyIGlwdjRyZXNbc2l6ZW9mICIyNTUuMjU1LjI1NS4yNTUiXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpcHY2YVsyNl07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaXB2NGFbNV07CisgICAgICAgIGNoYXIgKmlwdjZwdHIgPSAwOworICAgICAgICBjaGFyICppcHY0cHRyID0gMDsKKyAgICAgICAgLyogLSAqLworICAgICAgICBpcHY0cmVzWzBdID0gJ1wwJzsKKyAgICAgICAgaXB2NGFbMF0gPSAweGMwOworICAgICAgICBpcHY0YVsxXSA9IDB4YTg7CisgICAgICAgIGlwdjRhWzJdID0gMHg2NDsKKyAgICAgICAgaXB2NGFbM10gPSAweDAxOworICAgICAgICBpcHY0YVs0XSA9IDB4MDE7CisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgaXB2NHB0ciA9IGluZXRfbnRvcChBRl9JTkVULCBpcHY0YSwgaXB2NHJlcywgc2l6ZW9mKGlwdjRyZXMpKTsKKyAgICAgICAgaWYoIWlwdjRwdHIpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICBpZihpcHY0cHRyICE9IGlwdjRyZXMpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICBpZighaXB2NHB0clswXSkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKG1lbWNtcChpcHY0cmVzLCAiMTkyLjE2OC4xMDAuMSIsIDEzKSAhPSAwKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpcHY2cmVzWzBdID0gJ1wwJzsKKyAgICAgICAgbWVtc2V0KGlwdjZhLCAwLCBzaXplb2YoaXB2NmEpKTsKKyAgICAgICAgaXB2NmFbMF0gPSAweGZlOworICAgICAgICBpcHY2YVsxXSA9IDB4ODA7CisgICAgICAgIGlwdjZhWzhdID0gMHgwMjsKKyAgICAgICAgaXB2NmFbOV0gPSAweDE0OworICAgICAgICBpcHY2YVsxMF0gPSAweDRmOworICAgICAgICBpcHY2YVsxMV0gPSAweGZmOworICAgICAgICBpcHY2YVsxMl0gPSAweGZlOworICAgICAgICBpcHY2YVsxM10gPSAweDBiOworICAgICAgICBpcHY2YVsxNF0gPSAweDc2OworICAgICAgICBpcHY2YVsxNV0gPSAweGM4OworICAgICAgICBpcHY2YVsyNV0gPSAweDAxOworICAgICAgICAvKiAtICovCisgICAgICAgIGlwdjZwdHIgPSBpbmV0X250b3AoQUZfSU5FVDYsIGlwdjZhLCBpcHY2cmVzLCBzaXplb2YoaXB2NnJlcykpOworICAgICAgICBpZighaXB2NnB0cikKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKGlwdjZwdHIgIT0gaXB2NnJlcykKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKCFpcHY2cHRyWzBdKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgaWYobWVtY21wKGlwdjZyZXMsICJmZTgwOjoyMTQ6NGZmZjpmZTBiOjc2YzgiLCAyNCkgIT0gMCkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgZXhpdCgwKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF93b3Jrc19pbmV0X250b3A9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF93b3Jrc19pbmV0X250b3A9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pbmV0X250b3AiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX2luZXRfbnRvcCIgIT0gIm5vIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9udG9wIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19pbmV0X250b3AiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19pbmV0X250b3A9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfaW5ldF9udG9wPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9udG9wIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2luZXRfbnRvcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2luZXRfbnRvcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2luZXRfbnRvcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2luZXRfbnRvcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3dvcmtzX2luZXRfbnRvcCIgIT0gIm5vIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU5FVF9OVE9QLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgSVB2NiBjYXBhYmxlIHdvcmtpbmcgaW5ldF9udG9wIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19pbmV0X250b3A9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2luZXRfbnRvcD0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfSU5FVF9QVE9OCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBpbmV0X3B0b24gaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBjYW4KK2RubCBiZSBjb21waWxlZCBhbmQgc2VlbXMgdG8gd29yay4gSWYgYWxsIG9mIHRoZXNlIGFyZQorZG5sIHRydWUsIGFuZCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkCitkbmwgd2l0aCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X2luZXRfcHRvbiwgdGhlbgorZG5sIEhBVkVfSU5FVF9QVE9OIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19JTkVUX1BUT05dLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1RETElCXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19BUlBBX0lORVRdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NUUklOR10pZG5sCisgICMKKyAgdHN0X2xpbmtzX2luZXRfcHRvbj0idW5rbm93biIKKyAgdHN0X3Byb3RvX2luZXRfcHRvbj0idW5rbm93biIKKyAgdHN0X2NvbXBpX2luZXRfcHRvbj0idW5rbm93biIKKyAgdHN0X3dvcmtzX2luZXRfcHRvbj0idW5rbm93biIKKyAgdHN0X2FsbG93X2luZXRfcHRvbj0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfcHRvbiBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbaW5ldF9wdG9uXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfaW5ldF9wdG9uPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfaW5ldF9wdG9uPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2luZXRfcHRvbiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9wdG9uIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbaW5ldF9wdG9uXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19hcnBhX2luZXQKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9faW5ldF9wdG9uPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9faW5ldF9wdG9uPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9faW5ldF9wdG9uIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpbmV0X3B0b24gaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX2FycGFfaW5ldAorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBpbmV0X3B0b24oMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfaW5ldF9wdG9uPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfaW5ldF9wdG9uPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGRubCBvbmx5IGRvIHJ1bnRpbWUgdmVyaWZpY2F0aW9uIHdoZW4gbm90IGNyb3NzLWNvbXBpbGluZworICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiICYmCisgICAgdGVzdCAiJHRzdF9jb21waV9pbmV0X3B0b24iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGluZXRfcHRvbiBzZWVtcyB0byB3b3JrXSkKKyAgICBBQ19SVU5fSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zdGRsaWIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfYXJwYV9pbmV0CisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgICAgXV0sW1sKKyAgICAgICAgdW5zaWduZWQgY2hhciBpcHY2YVsxNisxXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpcHY0YVs0KzFdOworICAgICAgICBjb25zdCBjaGFyICppcHY2c3JjID0gImZlODA6OjIxNDo0ZmZmOmZlMGI6NzZjOCI7CisgICAgICAgIGNvbnN0IGNoYXIgKmlwdjRzcmMgPSAiMTkyLjE2OC4xMDAuMSI7CisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgbWVtc2V0KGlwdjRhLCAxLCBzaXplb2YoaXB2NGEpKTsKKyAgICAgICAgaWYoMSAhPSBpbmV0X3B0b24oQUZfSU5FVCwgaXB2NHNyYywgaXB2NGEpKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpZiggKGlwdjRhWzBdICE9IDB4YzApIHx8CisgICAgICAgICAgICAoaXB2NGFbMV0gIT0gMHhhOCkgfHwKKyAgICAgICAgICAgIChpcHY0YVsyXSAhPSAweDY0KSB8fAorICAgICAgICAgICAgKGlwdjRhWzNdICE9IDB4MDEpIHx8CisgICAgICAgICAgICAoaXB2NGFbNF0gIT0gMHgwMSkgKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBtZW1zZXQoaXB2NmEsIDEsIHNpemVvZihpcHY2YSkpOworICAgICAgICBpZigxICE9IGluZXRfcHRvbihBRl9JTkVUNiwgaXB2NnNyYywgaXB2NmEpKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgLyogLSAqLworICAgICAgICBpZiggKGlwdjZhWzBdICAhPSAweGZlKSB8fAorICAgICAgICAgICAgKGlwdjZhWzFdICAhPSAweDgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzhdICAhPSAweDAyKSB8fAorICAgICAgICAgICAgKGlwdjZhWzldICAhPSAweDE0KSB8fAorICAgICAgICAgICAgKGlwdjZhWzEwXSAhPSAweDRmKSB8fAorICAgICAgICAgICAgKGlwdjZhWzExXSAhPSAweGZmKSB8fAorICAgICAgICAgICAgKGlwdjZhWzEyXSAhPSAweGZlKSB8fAorICAgICAgICAgICAgKGlwdjZhWzEzXSAhPSAweDBiKSB8fAorICAgICAgICAgICAgKGlwdjZhWzE0XSAhPSAweDc2KSB8fAorICAgICAgICAgICAgKGlwdjZhWzE1XSAhPSAweGM4KSB8fAorICAgICAgICAgICAgKGlwdjZhWzE2XSAhPSAweDAxKSApCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICAvKiAtICovCisgICAgICAgIGlmKCAoaXB2NmFbMl0gICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVszXSAgIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzRdICAhPSAweDApIHx8CisgICAgICAgICAgICAoaXB2NmFbNV0gICE9IDB4MCkgfHwKKyAgICAgICAgICAgIChpcHY2YVs2XSAgIT0gMHgwKSB8fAorICAgICAgICAgICAgKGlwdjZhWzddICAhPSAweDApICkKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIC8qIC0gKi8KKyAgICAgICAgZXhpdCgwKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF93b3Jrc19pbmV0X3B0b249InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF93b3Jrc19pbmV0X3B0b249Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pbmV0X3B0b24iID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX2luZXRfcHRvbiIgIT0gIm5vIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9wdG9uIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19pbmV0X3B0b24iICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19pbmV0X3B0b249InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfaW5ldF9wdG9uPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgaW5ldF9wdG9uIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2luZXRfcHRvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2luZXRfcHRvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2luZXRfcHRvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2luZXRfcHRvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3dvcmtzX2luZXRfcHRvbiIgIT0gIm5vIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU5FVF9QVE9OLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgSVB2NiBjYXBhYmxlIHdvcmtpbmcgaW5ldF9wdG9uIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19pbmV0X3B0b249InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2luZXRfcHRvbj0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfSU9DVEwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGlvY3RsIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfaW9jdGwsIHRoZW4KK2RubCBIQVZFX0lPQ1RMIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19JT0NUTF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TVFJPUFRTXSlkbmwKKyAgIworICB0c3RfbGlua3NfaW9jdGw9InVua25vd24iCisgIHRzdF9wcm90b19pb2N0bD0idW5rbm93biIKKyAgdHN0X2NvbXBpX2lvY3RsPSJ1bmtub3duIgorICB0c3RfYWxsb3dfaW9jdGw9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpb2N0bCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbaW9jdGxdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19pb2N0bD0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2lvY3RsPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2lvY3RsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpb2N0bCBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2lvY3RsXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zdHJvcHRzCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2lvY3RsPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9faW9jdGw9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19pb2N0bCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGwgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cm9wdHMKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gaW9jdGwoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfaW9jdGw9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9pb2N0bD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3RsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpb2N0bCB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfaW9jdGwiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19pb2N0bD0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19pb2N0bD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3RsIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2lvY3RsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9faW9jdGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9pb2N0bCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3RsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JT0NUTCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW9jdGwgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2lvY3RsPSJ5ZXMiCisgICAgQ1VSTF9DSEVDS19GVU5DX0lPQ1RMX0ZJT05CSU8KKyAgICBDVVJMX0NIRUNLX0ZVTkNfSU9DVExfU0lPQ0dJRkFERFIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2lvY3RsPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19JT0NUTF9GSU9OQklPCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBpb2N0bCB3aXRoIHRoZSBGSU9OQklPIGNvbW1hbmQgaXMKK2RubCBhdmFpbGFibGUsIGNhbiBiZSBjb21waWxlZCwgYW5kIHNlZW1zIHRvIHdvcmsuIElmCitkbmwgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCB0aGVuIEhBVkVfSU9DVExfRklPTkJJTworZG5sIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19JT0NUTF9GSU9OQklPXSwgWworICAjCisgIHRzdF9jb21waV9pb2N0bF9maW9uYmlvPSJ1bmtub3duIgorICB0c3RfYWxsb3dfaW9jdGxfZmlvbmJpbz0idW5rbm93biIKKyAgIworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19pb2N0bCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGwgRklPTkJJTyBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3Ryb3B0cworICAgICAgXV0sW1sKKyAgICAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgICAgaWYoMCAhPSBpb2N0bCgwLCBGSU9OQklPLCAmZmxhZ3MpKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2lvY3RsX2Zpb25iaW89InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9pb2N0bF9maW9uYmlvPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxfZmlvbmJpbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGwgRklPTkJJTyB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfaW9jdGxfZmlvbmJpbyIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2lvY3RsX2Zpb25iaW89InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfaW9jdGxfZmlvbmJpbz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3RsIEZJT05CSU8gbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxfZmlvbmJpbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3RsX2Zpb25iaW8iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lPQ1RMX0ZJT05CSU8sIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3RsIEZJT05CSU8gZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2lvY3RsX2Zpb25iaW89InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2lvY3RsX2Zpb25iaW89Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX0lPQ1RMX1NJT0NHSUZBRERSCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBpb2N0bCB3aXRoIHRoZSBTSU9DR0lGQUREUiBjb21tYW5kIGlzIGF2YWlsYWJsZSwKK2RubCBzdHJ1Y3QgaWZyZXEgaXMgZGVmaW5lZCwgdGhleSBjYW4gYmUgY29tcGlsZWQsIGFuZCBzZWVtIHRvCitkbmwgd29yay4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCB0aGVuIEhBVkVfSU9DVExfU0lPQ0dJRkFERFIKK2RubCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfSU9DVExfU0lPQ0dJRkFERFJdLCBbCisgICMKKyAgdHN0X2NvbXBpX2lvY3RsX3Npb2NnaWZhZGRyPSJ1bmtub3duIgorICB0c3RfYWxsb3dfaW9jdGxfc2lvY2dpZmFkZHI9InVua25vd24iCisgICMKKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfaW9jdGwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3RsIFNJT0NHSUZBRERSIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJvcHRzCisgICAgICAgICNpbmNsdWRlIDxuZXQvaWYuaD4KKyAgICAgIF1dLFtbCisgICAgICAgIHN0cnVjdCBpZnJlcSBpZnI7CisgICAgICAgIGlmKDAgIT0gaW9jdGwoMCwgU0lPQ0dJRkFERFIsICZpZnIpKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2lvY3RsX3Npb2NnaWZhZGRyPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfaW9jdGxfc2lvY2dpZmFkZHI9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bF9zaW9jZ2lmYWRkciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGwgU0lPQ0dJRkFERFIgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2lvY3RsX3Npb2NnaWZhZGRyIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfaW9jdGxfc2lvY2dpZmFkZHI9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfaW9jdGxfc2lvY2dpZmFkZHI9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpb2N0bCBTSU9DR0lGQUREUiBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bF9zaW9jZ2lmYWRkciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3RsX3Npb2NnaWZhZGRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JT0NUTF9TSU9DR0lGQUREUiwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGwgU0lPQ0dJRkFERFIgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2lvY3RsX3Npb2NnaWZhZGRyPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19pb2N0bF9zaW9jZ2lmYWRkcj0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfSU9DVExTT0NLRVQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGlvY3Rsc29ja2V0IGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfaW9jdGxzb2NrZXQsIHRoZW4KK2RubCBIQVZFX0lPQ1RMU09DS0VUIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19JT0NUTFNPQ0tFVF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19XSU5TT0NLMl0pZG5sCisgICMKKyAgdHN0X2xpbmtzX2lvY3Rsc29ja2V0PSJ1bmtub3duIgorICB0c3RfcHJvdG9faW9jdGxzb2NrZXQ9InVua25vd24iCisgIHRzdF9jb21waV9pb2N0bHNvY2tldD0idW5rbm93biIKKyAgdHN0X2FsbG93X2lvY3Rsc29ja2V0PSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGxzb2NrZXQgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgXV0sW1sKKyAgICAgIGlmKDAgIT0gaW9jdGxzb2NrZXQoMCwgMCwgMCkpCisgICAgICAgIHJldHVybiAxOworICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19pb2N0bHNvY2tldD0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2lvY3Rsc29ja2V0PSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2lvY3Rsc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpb2N0bHNvY2tldCBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2lvY3Rsc29ja2V0XSxbCisgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19pb2N0bHNvY2tldD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2lvY3Rsc29ja2V0PSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9faW9jdGxzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3Rsc29ja2V0IGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBpb2N0bHNvY2tldCgwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9pb2N0bHNvY2tldD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0PSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3Rsc29ja2V0IHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19pb2N0bHNvY2tldCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2lvY3Rsc29ja2V0PSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2lvY3Rsc29ja2V0PSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGxzb2NrZXQgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfaW9jdGxzb2NrZXQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19pb2N0bHNvY2tldCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX2lvY3Rsc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfaW9jdGxzb2NrZXQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lPQ1RMU09DS0VULCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBpb2N0bHNvY2tldCBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfaW9jdGxzb2NrZXQ9InllcyIKKyAgICBDVVJMX0NIRUNLX0ZVTkNfSU9DVExTT0NLRVRfRklPTkJJTworICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfaW9jdGxzb2NrZXQ9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX0lPQ1RMU09DS0VUX0ZJT05CSU8KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGlvY3Rsc29ja2V0IHdpdGggdGhlIEZJT05CSU8gY29tbWFuZCBpcworZG5sIGF2YWlsYWJsZSwgY2FuIGJlIGNvbXBpbGVkLCBhbmQgc2VlbXMgdG8gd29yay4gSWYKK2RubCBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIHRoZW4gSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPCitkbmwgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0lPQ1RMU09DS0VUX0ZJT05CSU9dLCBbCisgICMKKyAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2Zpb25iaW89InVua25vd24iCisgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9maW9uYmlvPSJ1bmtub3duIgorICAjCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2lvY3Rsc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpb2N0bHNvY2tldCBGSU9OQklPIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgXV0sW1sKKyAgICAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgICAgaWYoMCAhPSBpb2N0bHNvY2tldCgwLCBGSU9OQklPLCAmZmxhZ3MpKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2Zpb25iaW89InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9pb2N0bHNvY2tldF9maW9uYmlvPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxzb2NrZXRfZmlvbmJpbyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgaW9jdGxzb2NrZXQgRklPTkJJTyB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfaW9jdGxzb2NrZXRfZmlvbmJpbyIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2lvY3Rsc29ja2V0X2Zpb25iaW89InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXRfZmlvbmJpbz0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGlvY3Rsc29ja2V0IEZJT05CSU8gbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxzb2NrZXRfZmlvbmJpbyIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2lvY3Rsc29ja2V0X2Zpb25iaW8iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU8sIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3Rsc29ja2V0IEZJT05CSU8gZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2Zpb25iaW89InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2Zpb25iaW89Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX0lPQ1RMU09DS0VUX0NBTUVMCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBJb2N0bFNvY2tldCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsLAorZG5sIHRoZW4gSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfSU9DVExTT0NLRVRfQ0FNRUxdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1RST1BUU10pZG5sCisgICMKKyAgdHN0X2xpbmtzX2lvY3Rsc29ja2V0X2NhbWVsPSJ1bmtub3duIgorICB0c3RfcHJvdG9faW9jdGxzb2NrZXRfY2FtZWw9InVua25vd24iCisgIHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbD0idW5rbm93biIKKyAgdHN0X2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgSW9jdGxTb2NrZXQgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW0lvY3RsU29ja2V0XSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3NfaW9jdGxzb2NrZXRfY2FtZWw9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19pb2N0bHNvY2tldF9jYW1lbD0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgSW9jdGxTb2NrZXQgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtJb2N0bFNvY2tldF0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfc3Ryb3B0cworICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19pb2N0bHNvY2tldF9jYW1lbD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2lvY3Rsc29ja2V0X2NhbWVsPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9faW9jdGxzb2NrZXRfY2FtZWwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIElvY3RsU29ja2V0IGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJvcHRzCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IElvY3RsU29ja2V0KDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2NhbWVsPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfaW9jdGxzb2NrZXRfY2FtZWw9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgSW9jdGxTb2NrZXQgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWw9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWw9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBJb2N0bFNvY2tldCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX2lvY3Rsc29ja2V0X2NhbWVsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfaW9jdGxzb2NrZXRfY2FtZWwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU9DVExTT0NLRVRfQ0FNRUwsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIElvY3RsU29ja2V0IGNhbWVsIGNhc2UgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2NhbWVsPSJ5ZXMiCisgICAgQ1VSTF9DSEVDS19GVU5DX0lPQ1RMU09DS0VUX0NBTUVMX0ZJT05CSU8KKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2NhbWVsPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19JT0NUTFNPQ0tFVF9DQU1FTF9GSU9OQklPCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBJb2N0bFNvY2tldCB3aXRoIEZJT05CSU8gY29tbWFuZCBpcyBhdmFpbGFibGUsCitkbmwgY2FuIGJlIGNvbXBpbGVkLCBhbmQgc2VlbXMgdG8gd29yay4gSWYgYWxsIG9mIHRoZXNlIGFyZQorZG5sIHRydWUsIHRoZW4gSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTF9GSU9OQklPIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19JT0NUTFNPQ0tFVF9DQU1FTF9GSU9OQklPXSwgWworICAjCisgIHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJ1bmtub3duIgorICB0c3RfYWxsb3dfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbz0idW5rbm93biIKKyAgIworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19pb2N0bHNvY2tldF9jYW1lbCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgSW9jdGxTb2NrZXQgRklPTkJJTyBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3Ryb3B0cworICAgICAgXV0sW1sKKyAgICAgICAgbG9uZyBmbGFncyA9IDA7CisgICAgICAgIGlmKDAgIT0gaW9jdGxzb2NrZXQoMCwgRklPTkJJTywgJmZsYWdzKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfaW9jdGxzb2NrZXRfY2FtZWxfZmlvbmJpbz0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW8iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIElvY3RsU29ja2V0IEZJT05CSU8gdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW8iICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW89Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBJb2N0bFNvY2tldCBGSU9OQklPIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2NvbXBpX2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW8iID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19pb2N0bHNvY2tldF9jYW1lbF9maW9uYmlvIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JT0NUTFNPQ0tFVF9DQU1FTF9GSU9OQklPLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBJb2N0bFNvY2tldCBjYW1lbCBjYXNlIEZJT05CSU8gZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW89InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2lvY3Rsc29ja2V0X2NhbWVsX2Zpb25iaW89Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX0xJU1RYQVRUUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgbGlzdHhhdHRyIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfbGlzdHhhdHRyLCB0aGVuCitkbmwgSEFWRV9MSVNUWEFUVFIgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0xJU1RYQVRUUl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TWVNfWEFUVFJdKWRubAorICAjCisgIHRzdF9saW5rc19saXN0eGF0dHI9InVua25vd24iCisgIHRzdF9wcm90b19saXN0eGF0dHI9InVua25vd24iCisgIHRzdF9jb21waV9saXN0eGF0dHI9InVua25vd24iCisgIHRzdF9hbGxvd19saXN0eGF0dHI9InVua25vd24iCisgIHRzdF9uYXJnc19saXN0eGF0dHI9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaXN0eGF0dHIgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2xpc3R4YXR0cl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX2xpc3R4YXR0cj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2xpc3R4YXR0cj0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19saXN0eGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpc3R4YXR0ciBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2xpc3R4YXR0cl0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3hhdHRyCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2xpc3R4YXR0cj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX2xpc3R4YXR0cj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX2xpc3R4YXR0ciIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfbGlzdHhhdHRyIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaXN0eGF0dHIgdGFrZXMgMyBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c194YXR0cgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gbGlzdHhhdHRyKDAsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIHRzdF9jb21waV9saXN0eGF0dHI9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2xpc3R4YXR0cj0iMyIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9saXN0eGF0dHI9Im5vIgorICAgICAgXSkKKyAgICBmaQorICAgIGlmIHRlc3QgIiR0c3RfbmFyZ3NfbGlzdHhhdHRyIiA9ICJ1bmtub3duIjsgdGhlbgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaXN0eGF0dHIgdGFrZXMgNCBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c194YXR0cgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gbGlzdHhhdHRyKDAsIDAsIDAsIDApKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIF1dKQorICAgICAgXSxbCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIHRzdF9jb21waV9saXN0eGF0dHI9InllcyIKKyAgICAgICAgdHN0X25hcmdzX2xpc3R4YXR0cj0iNCIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9saXN0eGF0dHI9Im5vIgorICAgICAgXSkKKyAgICBmaQorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlzdHhhdHRyIGlzIGNvbXBpbGFibGVdKQorICAgIGlmIHRlc3QgIiR0c3RfY29tcGlfbGlzdHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfbGlzdHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaXN0eGF0dHIgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X2xpc3R4YXR0ciIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X2xpc3R4YXR0cj0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19saXN0eGF0dHI9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaXN0eGF0dHIgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfbGlzdHhhdHRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fbGlzdHhhdHRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfbGlzdHhhdHRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfbGlzdHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9MSVNUWEFUVFIsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGxpc3R4YXR0ciBmdW5jdGlvbi5dKQorICAgIGRubCBBQ19ERUZJTkVfVU5RVU9URUQoTElTVFhBVFRSX0FSR1MsICR0c3RfbmFyZ3NfbGlzdHhhdHRyLAorICAgIGRubCAgIFtTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdG8gbGlzdHhhdHRyXSkKKyAgICAjCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19saXN0eGF0dHIiIC1lcSAiMyI7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX0xJU1RYQVRUUl8zLCAxLCBbbGlzdHhhdHRyKCkgdGFrZXMgMyBhcmdzXSkKKyAgICBlbGlmIHRlc3QgIiR0c3RfbmFyZ3NfbGlzdHhhdHRyIiAtZXEgIjQiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoSEFWRV9MSVNUWEFUVFJfNCwgMSwgW2xpc3R4YXR0cigpIHRha2VzIDQgYXJnc10pCisgICAgZmkKKyAgICAjCisgICAgYWNfY3ZfZnVuY19saXN0eGF0dHI9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2xpc3R4YXR0cj0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfTE9DQUxUSU1FX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIGxvY2FsdGltZV9yIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgY2FuCitkbmwgYmUgY29tcGlsZWQgYW5kIHNlZW1zIHRvIHdvcmsuIElmIGFsbCBvZiB0aGVzZSBhcmUKK2RubCB0cnVlLCBhbmQgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZAorZG5sIHdpdGggc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19sb2NhbHRpbWVfciwgdGhlbgorZG5sIEhBVkVfTE9DQUxUSU1FX1Igd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX0xPQ0FMVElNRV9SXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NURExJQl0pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfVElNRV0pZG5sCisgICMKKyAgdHN0X2xpbmtzX2xvY2FsdGltZV9yPSJ1bmtub3duIgorICB0c3RfcHJvdG9fbG9jYWx0aW1lX3I9InVua25vd24iCisgIHRzdF9jb21waV9sb2NhbHRpbWVfcj0idW5rbm93biIKKyAgdHN0X3dvcmtzX2xvY2FsdGltZV9yPSJ1bmtub3duIgorICB0c3RfYWxsb3dfbG9jYWx0aW1lX3I9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsb2NhbHRpbWVfciBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbbG9jYWx0aW1lX3JdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19sb2NhbHRpbWVfcj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX2xvY2FsdGltZV9yPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2xvY2FsdGltZV9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsb2NhbHRpbWVfciBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW2xvY2FsdGltZV9yXSxbCisgICAgICAkY3VybF9pbmNsdWRlc190aW1lCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX2xvY2FsdGltZV9yPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fbG9jYWx0aW1lX3I9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19sb2NhbHRpbWVfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbG9jYWx0aW1lX3IgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3RpbWUKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gbG9jYWx0aW1lX3IoMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfbG9jYWx0aW1lX3I9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9sb2NhbHRpbWVfcj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBkbmwgb25seSBkbyBydW50aW1lIHZlcmlmaWNhdGlvbiB3aGVuIG5vdCBjcm9zcy1jb21waWxpbmcKKyAgaWYgdGVzdCAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIiAmJgorICAgIHRlc3QgIiR0c3RfY29tcGlfbG9jYWx0aW1lX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxvY2FsdGltZV9yIHNlZW1zIHRvIHdvcmtdKQorICAgIEFDX1JVTl9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0ZGxpYgorICAgICAgICAkY3VybF9pbmNsdWRlc190aW1lCisgICAgICBdXSxbWworICAgICAgICB0aW1lX3QgY2xvY2sgPSAxMTcwMzUyNTg3OworICAgICAgICBzdHJ1Y3QgdG0gKnRtcCA9IDA7CisgICAgICAgIHN0cnVjdCB0bSByZXN1bHQ7CisgICAgICAgIHRtcCA9IGxvY2FsdGltZV9yKCZjbG9jaywgJnJlc3VsdCk7CisgICAgICAgIGlmKHRtcCkKKyAgICAgICAgICBleGl0KDApOworICAgICAgICBlbHNlCisgICAgICAgICAgZXhpdCgxKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF93b3Jrc19sb2NhbHRpbWVfcj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3dvcmtzX2xvY2FsdGltZV9yPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfbG9jYWx0aW1lX3IiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX2xvY2FsdGltZV9yIiAhPSAibm8iOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsb2NhbHRpbWVfciB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfbG9jYWx0aW1lX3IiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19sb2NhbHRpbWVfcj0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19sb2NhbHRpbWVfcj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxvY2FsdGltZV9yIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2xvY2FsdGltZV9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fbG9jYWx0aW1lX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9sb2NhbHRpbWVfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X2xvY2FsdGltZV9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3Rfd29ya3NfbG9jYWx0aW1lX3IiICE9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0xPQ0FMVElNRV9SLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBsb2NhbHRpbWVfciBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfbG9jYWx0aW1lX3I9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX2xvY2FsdGltZV9yPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19NRU1SQ0hSCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBtZW1yY2hyIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfbWVtcmNociwgdGhlbgorZG5sIEhBVkVfTUVNUkNIUiB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfTUVNUkNIUl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TVFJJTkddKWRubAorICAjCisgIHRzdF9saW5rc19tZW1yY2hyPSJ1bmtub3duIgorICB0c3RfbWFjcm9fbWVtcmNocj0idW5rbm93biIKKyAgdHN0X3Byb3RvX21lbXJjaHI9InVua25vd24iCisgIHRzdF9jb21waV9tZW1yY2hyPSJ1bmtub3duIgorICB0c3RfYWxsb3dfbWVtcmNocj0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIG1lbXJjaHIgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW21lbXJjaHJdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19tZW1yY2hyPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3NfbWVtcmNocj0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19tZW1yY2hyIiA9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIG1lbXJjaHIgc2VlbXMgYSBtYWNyb10pCisgICAgQUNfTElOS19JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBtZW1yY2hyKDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X21hY3JvX21lbXJjaHI9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9tYWNyb19tZW1yY2hyPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfbWVtcmNociIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbWVtcmNociBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW21lbXJjaHJdLFsKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19tZW1yY2hyPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fbWVtcmNocj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX21lbXJjaHIiID0gInllcyIgfHwKKyAgICAgdGVzdCAiJHRzdF9tYWNyb19tZW1yY2hyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBtZW1yY2hyIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gbWVtcmNocigwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9tZW1yY2hyPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfbWVtcmNocj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX21lbXJjaHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIG1lbXJjaHIgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X21lbXJjaHIiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19tZW1yY2hyPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X21lbXJjaHI9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBtZW1yY2hyIG1pZ2h0IGJlIHVzZWRdKQorICBpZiAodGVzdCAiJHRzdF9wcm90b19tZW1yY2hyIiA9ICJ5ZXMiIHx8CisgICAgICB0ZXN0ICIkdHN0X21hY3JvX21lbXJjaHIiID0gInllcyIpICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfbWVtcmNociIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X21lbXJjaHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX01FTVJDSFIsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIG1lbXJjaHIgZnVuY3Rpb24gb3IgbWFjcm8uXSkKKyAgICBhY19jdl9mdW5jX21lbXJjaHI9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX21lbXJjaHI9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1BPTEwKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIHBvbGwgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBjYW4KK2RubCBiZSBjb21waWxlZCBhbmQgc2VlbXMgdG8gd29yay4gSWYgYWxsIG9mIHRoZXNlIGFyZQorZG5sIHRydWUsIGFuZCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkCitkbmwgd2l0aCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X3BvbGwsIHRoZW4KK2RubCBIQVZFX1BPTEwgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX1BPTExdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1RETElCXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19QT0xMXSlkbmwKKyAgIworICB0c3RfbGlua3NfcG9sbD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3BvbGw9InVua25vd24iCisgIHRzdF9jb21waV9wb2xsPSJ1bmtub3duIgorICB0c3Rfd29ya3NfcG9sbD0idW5rbm93biIKKyAgdHN0X2FsbG93X3BvbGw9InVua25vd24iCisgICMKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbip8aW50ZXJpeCopCisgICAgICBkbmwgcG9sbCgpIGRvZXMgbm90IHdvcmsgb24gdGhlc2UgcGxhdGZvcm1zCisgICAgICBkbmwgSW50ZXJpeDogImRvZXMgcHJvdmlkZSBwb2xsKCksIGJ1dCB0aGUgaW1wbGVtZW50aW5nIGRldmVsb3BlciBtdXN0CisgICAgICBkbmwgaGF2ZSBiZWVuIGluIGEgYmFkIG1vb2QsIGJlY2F1c2UgcG9sbCgpIG9ubHkgd29ya3Mgb24gdGhlIC9wcm9jCisgICAgICBkbmwgZmlsZXN5c3RlbSBoZXJlIgorICAgICAgY3VybF9kaXNhbGxvd19wb2xsPSJ5ZXMiCisgICAgICA7OworICBlc2FjCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBwb2xsIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAkY3VybF9pbmNsdWRlc19wb2xsCisgICAgXV0sW1sKKyAgICAgIGlmKDAgIT0gcG9sbCgwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX3BvbGw9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19wb2xsPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3BvbGwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHBvbGwgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtwb2xsXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19wb2xsCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX3BvbGw9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19wb2xsPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fcG9sbCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgcG9sbCBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfcG9sbAorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBwb2xsKDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3BvbGw9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9wb2xsPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGRubCBvbmx5IGRvIHJ1bnRpbWUgdmVyaWZpY2F0aW9uIHdoZW4gbm90IGNyb3NzLWNvbXBpbGluZworICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiICYmCisgICAgdGVzdCAiJHRzdF9jb21waV9wb2xsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBwb2xsIHNlZW1zIHRvIHdvcmtdKQorICAgIEFDX1JVTl9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0ZGxpYgorICAgICAgICAkY3VybF9pbmNsdWRlc19wb2xsCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IHBvbGwoMCwgMCwgMTApKQorICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgIGV4aXQoMCk7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3Rfd29ya3NfcG9sbD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3dvcmtzX3BvbGw9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9wb2xsIiA9ICJ5ZXMiICYmCisgICAgdGVzdCAiJHRzdF93b3Jrc19wb2xsIiAhPSAibm8iOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBwb2xsIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19wb2xsIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfcG9sbD0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19wb2xsPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgcG9sbCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19wb2xsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fcG9sbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3BvbGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19wb2xsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3Rfd29ya3NfcG9sbCIgIT0gIm5vIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfUE9MTCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgcG9sbCBmdW5jdGlvbi5dKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1BPTExfRklORSwgMSwKKyAgICAgIFtJZiB5b3UgaGF2ZSBhIGZpbmUgcG9sbF0pCisgICAgYWNfY3ZfZnVuY19wb2xsPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19wb2xsPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19SRU1PVkVYQVRUUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgcmVtb3ZleGF0dHIgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19yZW1vdmV4YXR0ciwgdGhlbgorZG5sIEhBVkVfUkVNT1ZFWEFUVFIgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX1JFTU9WRVhBVFRSXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NZU19YQVRUUl0pZG5sCisgICMKKyAgdHN0X2xpbmtzX3JlbW92ZXhhdHRyPSJ1bmtub3duIgorICB0c3RfcHJvdG9fcmVtb3ZleGF0dHI9InVua25vd24iCisgIHRzdF9jb21waV9yZW1vdmV4YXR0cj0idW5rbm93biIKKyAgdHN0X2FsbG93X3JlbW92ZXhhdHRyPSJ1bmtub3duIgorICB0c3RfbmFyZ3NfcmVtb3ZleGF0dHI9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiByZW1vdmV4YXR0ciBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbcmVtb3ZleGF0dHJdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19yZW1vdmV4YXR0cj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3JlbW92ZXhhdHRyPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3JlbW92ZXhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiByZW1vdmV4YXR0ciBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3JlbW92ZXhhdHRyXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zeXNfeGF0dHIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fcmVtb3ZleGF0dHI9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19yZW1vdmV4YXR0cj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3JlbW92ZXhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19yZW1vdmV4YXR0ciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgcmVtb3ZleGF0dHIgdGFrZXMgMiBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c194YXR0cgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gcmVtb3ZleGF0dHIoMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX3JlbW92ZXhhdHRyPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19yZW1vdmV4YXR0cj0iMiIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9yZW1vdmV4YXR0cj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19yZW1vdmV4YXR0ciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgcmVtb3ZleGF0dHIgdGFrZXMgMyBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c194YXR0cgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gcmVtb3ZleGF0dHIoMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX3JlbW92ZXhhdHRyPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19yZW1vdmV4YXR0cj0iMyIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9yZW1vdmV4YXR0cj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiByZW1vdmV4YXR0ciBpcyBjb21waWxhYmxlXSkKKyAgICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3JlbW92ZXhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfcmVtb3ZleGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHJlbW92ZXhhdHRyIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19yZW1vdmV4YXR0ciIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X3JlbW92ZXhhdHRyPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3JlbW92ZXhhdHRyPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgcmVtb3ZleGF0dHIgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3NfcmVtb3ZleGF0dHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19yZW1vdmV4YXR0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3JlbW92ZXhhdHRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfcmVtb3ZleGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1JFTU9WRVhBVFRSLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSByZW1vdmV4YXR0ciBmdW5jdGlvbi5dKQorICAgIGRubCBBQ19ERUZJTkVfVU5RVU9URUQoUkVNT1ZFWEFUVFJfQVJHUywgJHRzdF9uYXJnc19yZW1vdmV4YXR0ciwKKyAgICBkbmwgICBbU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIHJlbW92ZXhhdHRyXSkKKyAgICAjCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19yZW1vdmV4YXR0ciIgLWVxICIyIjsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfUkVNT1ZFWEFUVFJfMiwgMSwgW3JlbW92ZXhhdHRyKCkgdGFrZXMgMiBhcmdzXSkKKyAgICBlbGlmIHRlc3QgIiR0c3RfbmFyZ3NfcmVtb3ZleGF0dHIiIC1lcSAiMyI7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX1JFTU9WRVhBVFRSXzMsIDEsIFtyZW1vdmV4YXR0cigpIHRha2VzIDMgYXJnc10pCisgICAgZmkKKyAgICAjCisgICAgYWNfY3ZfZnVuY19yZW1vdmV4YXR0cj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfcmVtb3ZleGF0dHI9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NFVFNPQ0tPUFQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIHNldHNvY2tvcHQgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19zZXRzb2Nrb3B0LCB0aGVuCitkbmwgSEFWRV9TRVRTT0NLT1BUIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19TRVRTT0NLT1BUXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1dJTlNPQ0syXSlkbmwKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TWVNfU09DS0VUXSlkbmwKKyAgIworICB0c3RfbGlua3Nfc2V0c29ja29wdD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3NldHNvY2tvcHQ9InVua25vd24iCisgIHRzdF9jb21waV9zZXRzb2Nrb3B0PSJ1bmtub3duIgorICB0c3RfYWxsb3dfc2V0c29ja29wdD0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNldHNvY2tvcHQgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0CisgICAgXV0sW1sKKyAgICAgIGlmKDAgIT0gc2V0c29ja29wdCgwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX3NldHNvY2tvcHQ9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19zZXRzb2Nrb3B0PSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NldHNvY2tvcHQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNldHNvY2tvcHQgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtzZXRzb2Nrb3B0XSxbCisgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19zZXRzb2Nrb3B0PSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fc2V0c29ja29wdD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3NldHNvY2tvcHQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNldHNvY2tvcHQgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3dpbnNvY2syCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gc2V0c29ja29wdCgwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9zZXRzb2Nrb3B0PSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc2V0c29ja29wdD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NldHNvY2tvcHQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNldHNvY2tvcHQgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3NldHNvY2tvcHQiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19zZXRzb2Nrb3B0PSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3NldHNvY2tvcHQ9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzZXRzb2Nrb3B0IG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NldHNvY2tvcHQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zZXRzb2Nrb3B0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc2V0c29ja29wdCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3NldHNvY2tvcHQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NFVFNPQ0tPUFQsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNldHNvY2tvcHQgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX3NldHNvY2tvcHQ9InllcyIKKyAgICBDVVJMX0NIRUNLX0ZVTkNfU0VUU09DS09QVF9TT19OT05CTE9DSworICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc2V0c29ja29wdD0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfU0VUU09DS09QVF9TT19OT05CTE9DSworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc2V0c29ja29wdCB3aXRoIHRoZSBTT19OT05CTE9DSyBjb21tYW5kIGlzCitkbmwgYXZhaWxhYmxlLCBjYW4gYmUgY29tcGlsZWQsIGFuZCBzZWVtcyB0byB3b3JrLiBJZgorZG5sIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgdGhlbiBIQVZFX1NFVFNPQ0tPUFRfU09fTk9OQkxPQ0sKK2RubCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfU0VUU09DS09QVF9TT19OT05CTE9DS10sIFsKKyAgIworICB0c3RfY29tcGlfc2V0c29ja29wdF9zb19ub25ibG9jaz0idW5rbm93biIKKyAgdHN0X2FsbG93X3NldHNvY2tvcHRfc29fbm9uYmxvY2s9InVua25vd24iCisgICMKKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfc2V0c29ja29wdCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc2V0c29ja29wdCBTT19OT05CTE9DSyBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfd2luc29jazIKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBzZXRzb2Nrb3B0KDAsIFNPTF9TT0NLRVQsIFNPX05PTkJMT0NLLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc2V0c29ja29wdF9zb19ub25ibG9jaz0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NldHNvY2tvcHRfc29fbm9uYmxvY2siID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNldHNvY2tvcHQgU09fTk9OQkxPQ0sgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3NldHNvY2tvcHRfc29fbm9uYmxvY2siICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3NldHNvY2tvcHRfc29fbm9uYmxvY2s9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzZXRzb2Nrb3B0IFNPX05PTkJMT0NLIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NldHNvY2tvcHRfc29fbm9uYmxvY2siID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TRVRTT0NLT1BUX1NPX05PTkJMT0NLLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBzZXRzb2Nrb3B0IFNPX05PTkJMT0NLIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19zZXRzb2Nrb3B0X3NvX25vbmJsb2NrPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19TRVRYQVRUUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc2V0eGF0dHIgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19zZXR4YXR0ciwgdGhlbgorZG5sIEhBVkVfU0VUWEFUVFIgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX1NFVFhBVFRSXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NZU19YQVRUUl0pZG5sCisgICMKKyAgdHN0X2xpbmtzX3NldHhhdHRyPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc2V0eGF0dHI9InVua25vd24iCisgIHRzdF9jb21waV9zZXR4YXR0cj0idW5rbm93biIKKyAgdHN0X2FsbG93X3NldHhhdHRyPSJ1bmtub3duIgorICB0c3RfbmFyZ3Nfc2V0eGF0dHI9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzZXR4YXR0ciBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbc2V0eGF0dHJdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19zZXR4YXR0cj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3NldHhhdHRyPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NldHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzZXR4YXR0ciBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3NldHhhdHRyXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zeXNfeGF0dHIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc2V0eGF0dHI9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19zZXR4YXR0cj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3NldHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19zZXR4YXR0ciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgc2V0eGF0dHIgdGFrZXMgNSBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c194YXR0cgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gc2V0eGF0dHIoMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX3NldHhhdHRyPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19zZXR4YXR0cj0iNSIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9zZXR4YXR0cj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19zZXR4YXR0ciIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgc2V0eGF0dHIgdGFrZXMgNiBhcmdzLl0pCisgICAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c194YXR0cgorICAgICAgICBdXSxbWworICAgICAgICAgIGlmKDAgIT0gc2V0eGF0dHIoMCwgMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2NvbXBpX3NldHhhdHRyPSJ5ZXMiCisgICAgICAgIHRzdF9uYXJnc19zZXR4YXR0cj0iNiIKKyAgICAgIF0sWworICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9jb21waV9zZXR4YXR0cj0ibm8iCisgICAgICBdKQorICAgIGZpCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzZXR4YXR0ciBpcyBjb21waWxhYmxlXSkKKyAgICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NldHhhdHRyIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc2V0eGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNldHhhdHRyIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zZXR4YXR0ciIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X3NldHhhdHRyPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3NldHhhdHRyPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc2V0eGF0dHIgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc2V0eGF0dHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zZXR4YXR0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3NldHhhdHRyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc2V0eGF0dHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NFVFhBVFRSLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzZXR4YXR0ciBmdW5jdGlvbi5dKQorICAgIGRubCBBQ19ERUZJTkVfVU5RVU9URUQoU0VUWEFUVFJfQVJHUywgJHRzdF9uYXJnc19zZXR4YXR0ciwKKyAgICBkbmwgICBbU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNldHhhdHRyXSkKKyAgICAjCisgICAgaWYgdGVzdCAiJHRzdF9uYXJnc19zZXR4YXR0ciIgLWVxICI1IjsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfU0VUWEFUVFJfNSwgMSwgW3NldHhhdHRyKCkgdGFrZXMgNSBhcmdzXSkKKyAgICBlbGlmIHRlc3QgIiR0c3RfbmFyZ3Nfc2V0eGF0dHIiIC1lcSAiNiI7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX1NFVFhBVFRSXzYsIDEsIFtzZXR4YXR0cigpIHRha2VzIDYgYXJnc10pCisgICAgZmkKKyAgICAjCisgICAgYWNfY3ZfZnVuY19zZXR4YXR0cj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc2V0eGF0dHI9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NJR0FDVElPTgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc2lnYWN0aW9uIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfc2lnYWN0aW9uLCB0aGVuCitkbmwgSEFWRV9TSUdBQ1RJT04gd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX1NJR0FDVElPTl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TSUdOQUxdKWRubAorICAjCisgIHRzdF9saW5rc19zaWdhY3Rpb249InVua25vd24iCisgIHRzdF9wcm90b19zaWdhY3Rpb249InVua25vd24iCisgIHRzdF9jb21waV9zaWdhY3Rpb249InVua25vd24iCisgIHRzdF9hbGxvd19zaWdhY3Rpb249InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzaWdhY3Rpb24gY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW3NpZ2FjdGlvbl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX3NpZ2FjdGlvbj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3NpZ2FjdGlvbj0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zaWdhY3Rpb24iID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNpZ2FjdGlvbiBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3NpZ2FjdGlvbl0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfc2lnbmFsCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX3NpZ2FjdGlvbj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX3NpZ2FjdGlvbj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3NpZ2FjdGlvbiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc2lnYWN0aW9uIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zaWduYWwKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gc2lnYWN0aW9uKDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3NpZ2FjdGlvbj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX3NpZ2FjdGlvbj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3NpZ2FjdGlvbiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc2lnYWN0aW9uIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zaWdhY3Rpb24iICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19zaWdhY3Rpb249InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfc2lnYWN0aW9uPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc2lnYWN0aW9uIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NpZ2FjdGlvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3NpZ2FjdGlvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3NpZ2FjdGlvbiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3NpZ2FjdGlvbiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU0lHQUNUSU9OLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzaWdhY3Rpb24gZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX3NpZ2FjdGlvbj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc2lnYWN0aW9uPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19TSUdJTlRFUlJVUFQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIHNpZ2ludGVycnVwdCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X3NpZ2ludGVycnVwdCwgdGhlbgorZG5sIEhBVkVfU0lHSU5URVJSVVBUIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19TSUdJTlRFUlJVUFRdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU0lHTkFMXSlkbmwKKyAgIworICB0c3RfbGlua3Nfc2lnaW50ZXJydXB0PSJ1bmtub3duIgorICB0c3RfcHJvdG9fc2lnaW50ZXJydXB0PSJ1bmtub3duIgorICB0c3RfY29tcGlfc2lnaW50ZXJydXB0PSJ1bmtub3duIgorICB0c3RfYWxsb3dfc2lnaW50ZXJydXB0PSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc2lnaW50ZXJydXB0IGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtzaWdpbnRlcnJ1cHRdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19zaWdpbnRlcnJ1cHQ9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19zaWdpbnRlcnJ1cHQ9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc2lnaW50ZXJydXB0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzaWdpbnRlcnJ1cHQgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtzaWdpbnRlcnJ1cHRdLFsKKyAgICAgICRjdXJsX2luY2x1ZGVzX3NpZ25hbAorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19zaWdpbnRlcnJ1cHQ9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19zaWdpbnRlcnJ1cHQ9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zaWdpbnRlcnJ1cHQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNpZ2ludGVycnVwdCBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc2lnbmFsCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IHNpZ2ludGVycnVwdCgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9zaWdpbnRlcnJ1cHQ9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9zaWdpbnRlcnJ1cHQ9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zaWdpbnRlcnJ1cHQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNpZ2ludGVycnVwdCB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfc2lnaW50ZXJydXB0IiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfc2lnaW50ZXJydXB0PSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3NpZ2ludGVycnVwdD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNpZ2ludGVycnVwdCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zaWdpbnRlcnJ1cHQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zaWdpbnRlcnJ1cHQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zaWdpbnRlcnJ1cHQiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zaWdpbnRlcnJ1cHQiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NJR0lOVEVSUlVQVCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2lnaW50ZXJydXB0IGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19zaWdpbnRlcnJ1cHQ9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX3NpZ2ludGVycnVwdD0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfU0lHTkFMCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBzaWduYWwgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19zaWduYWwsIHRoZW4KK2RubCBIQVZFX1NJR05BTCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfU0lHTkFMXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NJR05BTF0pZG5sCisgICMKKyAgdHN0X2xpbmtzX3NpZ25hbD0idW5rbm93biIKKyAgdHN0X3Byb3RvX3NpZ25hbD0idW5rbm93biIKKyAgdHN0X2NvbXBpX3NpZ25hbD0idW5rbm93biIKKyAgdHN0X2FsbG93X3NpZ25hbD0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNpZ25hbCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbc2lnbmFsXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3Nfc2lnbmFsPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3Nfc2lnbmFsPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NpZ25hbCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc2lnbmFsIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbc2lnbmFsXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zaWduYWwKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc2lnbmFsPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fc2lnbmFsPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc2lnbmFsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzaWduYWwgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3NpZ25hbAorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBzaWduYWwoMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfc2lnbmFsPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc2lnbmFsPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc2lnbmFsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzaWduYWwgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3NpZ25hbCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X3NpZ25hbD0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19zaWduYWw9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzaWduYWwgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc2lnbmFsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc2lnbmFsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc2lnbmFsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc2lnbmFsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TSUdOQUwsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNpZ25hbCBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfc2lnbmFsPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19zaWduYWw9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NJR1NFVEpNUAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc2lnc2V0am1wIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfc2lnc2V0am1wLCB0aGVuCitkbmwgSEFWRV9TSUdTRVRKTVAgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX1NJR1NFVEpNUF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TRVRKTVBdKWRubAorICAjCisgIHRzdF9saW5rc19zaWdzZXRqbXA9InVua25vd24iCisgIHRzdF9tYWNyb19zaWdzZXRqbXA9InVua25vd24iCisgIHRzdF9wcm90b19zaWdzZXRqbXA9InVua25vd24iCisgIHRzdF9jb21waV9zaWdzZXRqbXA9InVua25vd24iCisgIHRzdF9hbGxvd19zaWdzZXRqbXA9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzaWdzZXRqbXAgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW3NpZ3NldGptcF0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX3NpZ3NldGptcD0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3NpZ3NldGptcD0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zaWdzZXRqbXAiID0gIm5vIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc2lnc2V0am1wIHNlZW1zIGEgbWFjcm9dKQorICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zZXRqbXAKKyAgICAgIF1dLFtbCisgICAgICAgIHNpZ2ptcF9idWYgZW52OworICAgICAgICBpZigwICE9IHNpZ3NldGptcChlbnYsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X21hY3JvX3NpZ3NldGptcD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X21hY3JvX3NpZ3NldGptcD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NpZ3NldGptcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc2lnc2V0am1wIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbc2lnc2V0am1wXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zZXRqbXAKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc2lnc2V0am1wPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fc2lnc2V0am1wPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc2lnc2V0am1wIiA9ICJ5ZXMiIHx8CisgICAgIHRlc3QgIiR0c3RfbWFjcm9fc2lnc2V0am1wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzaWdzZXRqbXAgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3NldGptcAorICAgICAgXV0sW1sKKyAgICAgICAgc2lnam1wX2J1ZiBlbnY7CisgICAgICAgIGlmKDAgIT0gc2lnc2V0am1wKGVudiwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfc2lnc2V0am1wPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc2lnc2V0am1wPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc2lnc2V0am1wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzaWdzZXRqbXAgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3NpZ3NldGptcCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X3NpZ3NldGptcD0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19zaWdzZXRqbXA9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzaWdzZXRqbXAgbWlnaHQgYmUgdXNlZF0pCisgIGlmICh0ZXN0ICIkdHN0X3Byb3RvX3NpZ3NldGptcCIgPSAieWVzIiB8fAorICAgICAgdGVzdCAiJHRzdF9tYWNyb19zaWdzZXRqbXAiID0gInllcyIpICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc2lnc2V0am1wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc2lnc2V0am1wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TSUdTRVRKTVAsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNpZ3NldGptcCBmdW5jdGlvbiBvciBtYWNyby5dKQorICAgIGFjX2N2X2Z1bmNfc2lnc2V0am1wPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19zaWdzZXRqbXA9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NPQ0tFVAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc29ja2V0IGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfc29ja2V0LCB0aGVuCitkbmwgSEFWRV9TT0NLRVQgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX1NPQ0tFVF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19XSU5TT0NLMl0pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1lTX1NPQ0tFVF0pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU09DS0VUXSlkbmwKKyAgIworICB0c3RfbGlua3Nfc29ja2V0PSJ1bmtub3duIgorICB0c3RfcHJvdG9fc29ja2V0PSJ1bmtub3duIgorICB0c3RfY29tcGlfc29ja2V0PSJ1bmtub3duIgorICB0c3RfYWxsb3dfc29ja2V0PSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc29ja2V0IGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGN1cmxfaW5jbHVkZXNfc29ja2V0CisgICAgXV0sW1sKKyAgICAgIGlmKDAgIT0gc29ja2V0KDAsIDAsIDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICBdXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3Nfc29ja2V0PSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3Nfc29ja2V0PSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3NvY2tldCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc29ja2V0IGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbc29ja2V0XSxbCisgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgJGN1cmxfaW5jbHVkZXNfc3lzX3NvY2tldAorICAgICAgJGN1cmxfaW5jbHVkZXNfc29ja2V0CisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX3NvY2tldD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX3NvY2tldD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3NvY2tldCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc29ja2V0IGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc193aW5zb2NrMgorICAgICAgICAkY3VybF9pbmNsdWRlc19zeXNfc29ja2V0CisgICAgICAgICRjdXJsX2luY2x1ZGVzX3NvY2tldAorICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBzb2NrZXQoMCwgMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfc29ja2V0PSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc29ja2V0PSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzb2NrZXQgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3NvY2tldCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X3NvY2tldD0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19zb2NrZXQ9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzb2NrZXQgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc29ja2V0IiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc29ja2V0IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TT0NLRVQsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNvY2tldCBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfc29ja2V0PSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19zb2NrZXQ9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NPQ0tFVFBBSVIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIHNvY2tldHBhaXIgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19zb2NrZXRwYWlyLCB0aGVuCitkbmwgSEFWRV9TT0NLRVRQQUlSIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19TT0NLRVRQQUlSXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NZU19TT0NLRVRdKWRubAorICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NPQ0tFVF0pZG5sCisgICMKKyAgdHN0X2xpbmtzX3NvY2tldHBhaXI9InVua25vd24iCisgIHRzdF9wcm90b19zb2NrZXRwYWlyPSJ1bmtub3duIgorICB0c3RfY29tcGlfc29ja2V0cGFpcj0idW5rbm93biIKKyAgdHN0X2FsbG93X3NvY2tldHBhaXI9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzb2NrZXRwYWlyIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtzb2NrZXRwYWlyXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3Nfc29ja2V0cGFpcj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3NvY2tldHBhaXI9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc29ja2V0cGFpciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc29ja2V0cGFpciBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3NvY2tldHBhaXJdLFsKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICRjdXJsX2luY2x1ZGVzX3NvY2tldAorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19zb2NrZXRwYWlyPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fc29ja2V0cGFpcj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3NvY2tldHBhaXIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHNvY2tldHBhaXIgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c19zb2NrZXQKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc29ja2V0CisgICAgICBdXSxbWworICAgICAgICBpbnQgc3ZbMl07CisgICAgICAgIGlmKDAgIT0gc29ja2V0cGFpcigwLCAwLCAwLCBzdikpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfc29ja2V0cGFpcj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX3NvY2tldHBhaXI9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zb2NrZXRwYWlyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzb2NrZXRwYWlyIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zb2NrZXRwYWlyIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfc29ja2V0cGFpcj0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19zb2NrZXRwYWlyPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc29ja2V0cGFpciBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zb2NrZXRwYWlyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc29ja2V0cGFpciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3NvY2tldHBhaXIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zb2NrZXRwYWlyIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TT0NLRVRQQUlSLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzb2NrZXRwYWlyIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19zb2NrZXRwYWlyPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19zb2NrZXRwYWlyPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19TVFJDQVNFQ01QCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBzdHJjYXNlY21wIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfc3RyY2FzZWNtcCwgdGhlbgorZG5sIEhBVkVfU1RSQ0FTRUNNUCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfU1RSQ0FTRUNNUF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TVFJJTkddKWRubAorICAjCisgIHRzdF9saW5rc19zdHJjYXNlY21wPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RyY2FzZWNtcD0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cmNhc2VjbXA9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJjYXNlY21wPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyY2FzZWNtcCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbc3RyY2FzZWNtcF0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX3N0cmNhc2VjbXA9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19zdHJjYXNlY21wPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmNhc2VjbXAiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmNhc2VjbXAgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtzdHJjYXNlY21wXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc3RyY2FzZWNtcD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX3N0cmNhc2VjbXA9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJjYXNlY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJjYXNlY21wIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gc3RyY2FzZWNtcCgwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9zdHJjYXNlY21wPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc3RyY2FzZWNtcD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cmNhc2VjbXAiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmNhc2VjbXAgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3N0cmNhc2VjbXAiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19zdHJjYXNlY21wPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3N0cmNhc2VjbXA9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJjYXNlY21wIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmNhc2VjbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJjYXNlY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RyY2FzZWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3N0cmNhc2VjbXAiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NUUkNBU0VDTVAsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmNhc2VjbXAgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX3N0cmNhc2VjbXA9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX3N0cmNhc2VjbXA9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NUUkNBU0VTVFIKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIHN0cmNhc2VzdHIgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19zdHJjYXNlc3RyLCB0aGVuCitkbmwgSEFWRV9TVFJDQVNFU1RSIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19TVFJDQVNFU1RSXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NUUklOR10pZG5sCisgICMKKyAgdHN0X2xpbmtzX3N0cmNhc2VzdHI9InVua25vd24iCisgIHRzdF9wcm90b19zdHJjYXNlc3RyPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RyY2FzZXN0cj0idW5rbm93biIKKyAgdHN0X2FsbG93X3N0cmNhc2VzdHI9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJjYXNlc3RyIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtzdHJjYXNlc3RyXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3Nfc3RyY2FzZXN0cj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3N0cmNhc2VzdHI9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyY2FzZXN0ciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyY2FzZXN0ciBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3N0cmNhc2VzdHJdLFsKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19zdHJjYXNlc3RyPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fc3RyY2FzZXN0cj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cmNhc2VzdHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmNhc2VzdHIgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBzdHJjYXNlc3RyKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3N0cmNhc2VzdHI9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9zdHJjYXNlc3RyPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RyY2FzZXN0ciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyY2FzZXN0ciB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfc3RyY2FzZXN0ciIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X3N0cmNhc2VzdHI9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfc3RyY2FzZXN0cj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmNhc2VzdHIgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyY2FzZXN0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cmNhc2VzdHIiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJjYXNlc3RyIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RyY2FzZXN0ciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RSQ0FTRVNUUiwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyY2FzZXN0ciBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfc3RyY2FzZXN0cj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc3RyY2FzZXN0cj0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfU1RSQ01QSQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc3RyY21waSBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X3N0cmNtcGksIHRoZW4KK2RubCBIQVZFX1NUUkNNUEkgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX1NUUkNNUEldLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1RSSU5HXSlkbmwKKyAgIworICB0c3RfbGlua3Nfc3RyY21waT0idW5rbm93biIKKyAgdHN0X3Byb3RvX3N0cmNtcGk9InVua25vd24iCisgIHRzdF9jb21waV9zdHJjbXBpPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RyY21waT0idW5rbm93biIKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmNtcGkgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW3N0cmNtcGldKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19zdHJjbXBpPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0c3RfbGlua3Nfc3RyY21waT0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJjbXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJjbXBpIGlzIHByb3RvdHlwZWRdKQorICAgIEFDX0VHUkVQX0NQUChbc3RyY21waV0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX3N0cmNtcGk9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19zdHJjbXBpPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fc3RyY21waSIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyY21waSBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IHN0cmNtcGkoMCwgMCkpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfY29tcGlfc3RyY21waT0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX3N0cmNtcGk9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJjbXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJjbXBpIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zdHJjbXBpIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfc3RyY21waT0ieWVzIgorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9hbGxvd19zdHJjbXBpPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyY21waSBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJjbXBpIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfcHJvdG9fc3RyY21waSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3N0cmNtcGkiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zdHJjbXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TVFJDTVBJLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJjbXBpIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19zdHJjbXBpPSJ5ZXMiCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgYWNfY3ZfZnVuY19zdHJjbXBpPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19TVFJEVVAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIHN0cmR1cCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X3N0cmR1cCwgdGhlbgorZG5sIEhBVkVfU1RSRFVQIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19TVFJEVVBdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1RSSU5HXSlkbmwKKyAgIworICB0c3RfbGlua3Nfc3RyZHVwPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RyZHVwPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RyZHVwPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RyZHVwPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyZHVwIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtzdHJkdXBdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19zdHJkdXA9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19zdHJkdXA9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyZHVwIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJkdXAgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtzdHJkdXBdLFsKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19zdHJkdXA9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19zdHJkdXA9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJkdXAiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmR1cCBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IHN0cmR1cCgwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9zdHJkdXA9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9zdHJkdXA9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJkdXAiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmR1cCB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfc3RyZHVwIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfc3RyZHVwPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3N0cmR1cD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmR1cCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJkdXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJkdXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJkdXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zdHJkdXAiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NUUkRVUCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyZHVwIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19zdHJkdXA9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX3N0cmR1cD0ibm8iCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX0ZVTkNfU1RSRVJST1JfUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc3RyZXJyb3JfciBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGNhbiBiZSBjb21waWxlZCBhbmQKK2RubCBzZWVtcyB0byB3b3JrLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZCB1c2FnZSBoYXMgbm90IGJlZW4KK2RubCBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X3N0cmVycm9yX3IsCitkbmwgdGhlbiBIQVZFX1NUUkVSUk9SX1IgYW5kIFNUUkVSUk9SX1JfVFlQRV9BUkczIHdpbGwgYmUgZGVmaW5lZCwgYXMKK2RubCB3ZWxsIGFzIG9uZSBvZiBIQVZFX0dMSUJDX1NUUkVSUk9SX1Igb3IgSEFWRV9QT1NJWF9TVFJFUlJPUl9SLgorZG5sCitkbmwgZ2xpYmMtc3R5bGUgc3RyZXJyb3JfcjoKK2RubAorZG5sICAgICAgY2hhciAqc3RyZXJyb3JfcihpbnQgZXJybnVtLCBjaGFyICp3b3JrYnVmLCBzaXplX3QgYnVmc2l6ZSk7CitkbmwKK2RubCAgZ2xpYmMtc3R5bGUgc3RyZXJyb3JfciByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgdGhlIGVycm9yIHN0cmluZywKK2RubCAgYW5kIG1pZ2h0IHVzZSB0aGUgcHJvdmlkZWQgd29ya2J1ZiBhcyBhIHNjcmF0Y2ggYXJlYSBpZiBuZWVkZWQuIEEKK2RubCAgcXVpY2sgdGVzdCBvbiBhIGZldyBzeXN0ZW1zIHNob3dzIHRoYXQgaXQncyB1c3VhbGx5IG5vdCB1c2VkIGF0IGFsbC4KK2RubAorZG5sIFBPU0lYLXN0eWxlIHN0cmVycm9yX3I6CitkbmwKK2RubCAgICAgIGludCBzdHJlcnJvcl9yKGludCBlcnJudW0sIGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90IGJ1ZnNpemUpOworZG5sCitkbmwgIFBPU0lYLXN0eWxlIHN0cmVycm9yX3IgcmV0dXJucyAwIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIGFuZCB0aGUKK2RubCAgZXJyb3Igc3RyaW5nIGluIHRoZSBwcm92aWRlZCByZXN1bHRidWYuCitkbmwKKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19TVFJFUlJPUl9SXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NURExJQl0pZG5sCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1RSSU5HXSlkbmwKKyAgIworICB0c3RfbGlua3Nfc3RyZXJyb3Jfcj0idW5rbm93biIKKyAgdHN0X3Byb3RvX3N0cmVycm9yX3I9InVua25vd24iCisgIHRzdF9jb21waV9zdHJlcnJvcl9yPSJ1bmtub3duIgorICB0c3RfZ2xpYmNfc3RyZXJyb3Jfcj0idW5rbm93biIKKyAgdHN0X3Bvc2l4X3N0cmVycm9yX3I9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJlcnJvcl9yPSJ1bmtub3duIgorICB0c3Rfd29ya3NfZ2xpYmNfc3RyZXJyb3Jfcj0idW5rbm93biIKKyAgdHN0X3dvcmtzX3Bvc2l4X3N0cmVycm9yX3I9InVua25vd24iCisgIHRzdF9nbGliY19zdHJlcnJvcl9yX3R5cGVfYXJnMz0idW5rbm93biIKKyAgdHN0X3Bvc2l4X3N0cmVycm9yX3JfdHlwZV9hcmczPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyZXJyb3JfciBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbc3RyZXJyb3Jfcl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX3N0cmVycm9yX3I9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19zdHJlcnJvcl9yPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cmVycm9yX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmVycm9yX3IgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtzdHJlcnJvcl9yXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc3RyZXJyb3Jfcj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX3N0cmVycm9yX3I9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJlcnJvcl9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJlcnJvcl9yIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gc3RyZXJyb3JfcigwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9zdHJlcnJvcl9yPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc3RyZXJyb3Jfcj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cmVycm9yX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmVycm9yX3IgaXMgZ2xpYmMgbGlrZV0pCisgICAgdHN0X2dsaWJjX3N0cmVycm9yX3JfdHlwZV9hcmczPSJ1bmtub3duIgorICAgIGZvciBhcmczIGluICdzaXplX3QnICdpbnQnICd1bnNpZ25lZCBpbnQnOyBkbworICAgICAgaWYgdGVzdCAiJHRzdF9nbGliY19zdHJlcnJvcl9yX3R5cGVfYXJnMyIgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisgICAgICAgICAgXV0sW1sKKyAgICAgICAgICAgIGNoYXIgKnN0cmVycm9yX3IoaW50IGVycm51bSwgY2hhciAqd29ya2J1ZiwgJGFyZzMgYnVmc2l6ZSk7CisgICAgICAgICAgICBpZigwICE9IHN0cmVycm9yX3IoMCwgMCwgMCkpCisgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgIF1dKQorICAgICAgICBdLFsKKyAgICAgICAgICB0c3RfZ2xpYmNfc3RyZXJyb3Jfcl90eXBlX2FyZzM9IiRhcmczIgorICAgICAgICBdKQorICAgICAgZmkKKyAgICBkb25lCisgICAgY2FzZSAiJHRzdF9nbGliY19zdHJlcnJvcl9yX3R5cGVfYXJnMyIgaW4KKyAgICAgIHVua25vd24pCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgdHN0X2dsaWJjX3N0cmVycm9yX3I9Im5vIgorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgdHN0X2dsaWJjX3N0cmVycm9yX3I9InllcyIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgICMKKyAgZG5sIG9ubHkgZG8gcnVudGltZSB2ZXJpZmljYXRpb24gd2hlbiBub3QgY3Jvc3MtY29tcGlsaW5nCisgIGlmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X2dsaWJjX3N0cmVycm9yX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmVycm9yX3Igc2VlbXMgdG8gd29ya10pCisgICAgQUNfUlVOX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RkbGliCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworIyAgICAgICBpbmNsdWRlIDxlcnJuby5oPgorICAgICAgXV0sW1sKKyAgICAgICAgY2hhciBidWZmZXJbMTAyNF07CisgICAgICAgIGNoYXIgKnN0cmluZyA9IDA7CisgICAgICAgIGJ1ZmZlclswXSA9ICdcMCc7CisgICAgICAgIHN0cmluZyA9IHN0cmVycm9yX3IoRUFDQ0VTLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgICAgICAgaWYoIXN0cmluZykKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGlmKCFzdHJpbmdbMF0pCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICBlbHNlCisgICAgICAgICAgZXhpdCgwKTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF93b3Jrc19nbGliY19zdHJlcnJvcl9yPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3Rfd29ya3NfZ2xpYmNfc3RyZXJyb3Jfcj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cmVycm9yX3IiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX2dsaWJjX3N0cmVycm9yX3IiICE9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJlcnJvcl9yIGlzIFBPU0lYIGxpa2VdKQorICAgIHRzdF9wb3NpeF9zdHJlcnJvcl9yX3R5cGVfYXJnMz0idW5rbm93biIKKyAgICBmb3IgYXJnMyBpbiAnc2l6ZV90JyAnaW50JyAndW5zaWduZWQgaW50JzsgZG8KKyAgICAgIGlmIHRlc3QgIiR0c3RfcG9zaXhfc3RyZXJyb3Jfcl90eXBlX2FyZzMiID0gInVua25vd24iOyB0aGVuCisgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgICAgICAgIF1dLFtbCisgICAgICAgICAgICBpbnQgc3RyZXJyb3JfcihpbnQgZXJybnVtLCBjaGFyICpyZXN1bHRidWYsICRhcmczIGJ1ZnNpemUpOworICAgICAgICAgICAgaWYoMCAhPSBzdHJlcnJvcl9yKDAsIDAsIDApKQorICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICBdXSkKKyAgICAgICAgXSxbCisgICAgICAgICAgdHN0X3Bvc2l4X3N0cmVycm9yX3JfdHlwZV9hcmczPSIkYXJnMyIKKyAgICAgICAgXSkKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGNhc2UgIiR0c3RfcG9zaXhfc3RyZXJyb3Jfcl90eXBlX2FyZzMiIGluCisgICAgICB1bmtub3duKQorICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIHRzdF9wb3NpeF9zdHJlcnJvcl9yPSJubyIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgIHRzdF9wb3NpeF9zdHJlcnJvcl9yPSJ5ZXMiCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorICAjCisgIGRubCBvbmx5IGRvIHJ1bnRpbWUgdmVyaWZpY2F0aW9uIHdoZW4gbm90IGNyb3NzLWNvbXBpbGluZworICBpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiICYmCisgICAgdGVzdCAiJHRzdF9wb3NpeF9zdHJlcnJvcl9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJlcnJvcl9yIHNlZW1zIHRvIHdvcmtdKQorICAgIEFDX1JVTl9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0ZGxpYgorICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyMgICAgICAgaW5jbHVkZSA8ZXJybm8uaD4KKyAgICAgIF1dLFtbCisgICAgICAgIGNoYXIgYnVmZmVyWzEwMjRdOworICAgICAgICBpbnQgZXJyb3IgPSAxOworICAgICAgICBidWZmZXJbMF0gPSAnXDAnOworICAgICAgICBlcnJvciA9IHN0cmVycm9yX3IoRUFDQ0VTLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgICAgICAgaWYoZXJyb3IpCisgICAgICAgICAgZXhpdCgxKTsgLyogZmFpbCAqLworICAgICAgICBpZihidWZmZXJbMF0gPT0gJ1wwJykKKyAgICAgICAgICBleGl0KDEpOyAvKiBmYWlsICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICBleGl0KDApOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3dvcmtzX3Bvc2l4X3N0cmVycm9yX3I9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF93b3Jrc19wb3NpeF9zdHJlcnJvcl9yPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3Rfd29ya3NfZ2xpYmNfc3RyZXJyb3JfciIgPSAieWVzIjsgdGhlbgorICAgIHRzdF9wb3NpeF9zdHJlcnJvcl9yPSJubyIKKyAgZmkKKyAgaWYgdGVzdCAiJHRzdF93b3Jrc19wb3NpeF9zdHJlcnJvcl9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgdHN0X2dsaWJjX3N0cmVycm9yX3I9Im5vIgorICBmaQorICBpZiB0ZXN0ICIkdHN0X2dsaWJjX3N0cmVycm9yX3IiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX2dsaWJjX3N0cmVycm9yX3IiICE9ICJubyIgJiYKKyAgICB0ZXN0ICIkdHN0X3Bvc2l4X3N0cmVycm9yX3IiICE9ICJ5ZXMiOyB0aGVuCisgICAgdHN0X2FsbG93X3N0cmVycm9yX3I9ImNoZWNrIgorICBmaQorICBpZiB0ZXN0ICIkdHN0X3Bvc2l4X3N0cmVycm9yX3IiID0gInllcyIgJiYKKyAgICB0ZXN0ICIkdHN0X3dvcmtzX3Bvc2l4X3N0cmVycm9yX3IiICE9ICJubyIgJiYKKyAgICB0ZXN0ICIkdHN0X2dsaWJjX3N0cmVycm9yX3IiICE9ICJ5ZXMiOyB0aGVuCisgICAgdHN0X2FsbG93X3N0cmVycm9yX3I9ImNoZWNrIgorICBmaQorICBpZiB0ZXN0ICIkdHN0X2FsbG93X3N0cmVycm9yX3IiID0gImNoZWNrIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyZXJyb3JfciB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfc3RyZXJyb3JfciIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X3N0cmVycm9yX3I9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfc3RyZXJyb3Jfcj0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmVycm9yX3IgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyZXJyb3JfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cmVycm9yX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJlcnJvcl9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RyZXJyb3JfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgaWYgdGVzdCAiJHRzdF9nbGliY19zdHJlcnJvcl9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TVFJFUlJPUl9SLCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmVycm9yX3IgZnVuY3Rpb24uXSkKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0dMSUJDX1NUUkVSUk9SX1IsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ2xpYmMtc3R5bGUgc3RyZXJyb3JfciBmdW5jdGlvbi5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNUUkVSUk9SX1JfVFlQRV9BUkczLCAkdHN0X2dsaWJjX3N0cmVycm9yX3JfdHlwZV9hcmczLAorICAgICAgICBbRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzdHJlcnJvcl9yLl0pCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdHN0X3Bvc2l4X3N0cmVycm9yX3IiID0gInllcyI7IHRoZW4KKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NUUkVSUk9SX1IsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyZXJyb3JfciBmdW5jdGlvbi5dKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfUE9TSVhfU1RSRVJST1JfUiwgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBQT1NJWC1zdHlsZSBzdHJlcnJvcl9yIGZ1bmN0aW9uLl0pCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU1RSRVJST1JfUl9UWVBFX0FSRzMsICR0c3RfcG9zaXhfc3RyZXJyb3Jfcl90eXBlX2FyZzMsCisgICAgICAgIFtEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHN0cmVycm9yX3IuXSkKKyAgICBmaQorICAgIGFjX2N2X2Z1bmNfc3RyZXJyb3Jfcj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc3RyZXJyb3Jfcj0ibm8iCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJlcnJvcl9yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RyZXJyb3JfciIgPSAidW5rbm93biI7IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbY2Fubm90IGRldGVybWluZSBzdHJlcnJvcl9yKCkgc3R5bGU6IGVkaXQgbGliL2N1cmxfY29uZmlnLmggbWFudWFsbHkuXSkKKyAgZmkKKyAgIworXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NUUklDTVAKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVmVyaWZ5IGlmIHN0cmljbXAgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19zdHJpY21wLCB0aGVuCitkbmwgSEFWRV9TVFJJQ01QIHdpbGwgYmUgZGVmaW5lZC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfRlVOQ19TVFJJQ01QXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NUUklOR10pZG5sCisgICMKKyAgdHN0X2xpbmtzX3N0cmljbXA9InVua25vd24iCisgIHRzdF9wcm90b19zdHJpY21wPSJ1bmtub3duIgorICB0c3RfY29tcGlfc3RyaWNtcD0idW5rbm93biIKKyAgdHN0X2FsbG93X3N0cmljbXA9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJpY21wIGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtzdHJpY21wXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3Nfc3RyaWNtcD0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3N0cmljbXA9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyaWNtcCBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3N0cmljbXBdLFsKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9wcm90b19zdHJpY21wPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fc3RyaWNtcD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cmljbXAiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmljbXAgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBzdHJpY21wKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3N0cmljbXA9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9jb21waV9zdHJpY21wPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RyaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RyaWNtcCB1c2FnZSBhbGxvd2VkXSkKKyAgICBpZiB0ZXN0ICJ4JGN1cmxfZGlzYWxsb3dfc3RyaWNtcCIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X3N0cmljbXA9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfc3RyaWNtcD0ibm8iCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmljbXAgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RyaWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cmljbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9jb21waV9zdHJpY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RyaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RSSUNNUCwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyaWNtcCBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfc3RyaWNtcD0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc3RyaWNtcD0ibm8iCisgIGZpCitdKQorCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NUUk5DQVNFQ01QCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBzdHJuY2FzZWNtcCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X3N0cm5jYXNlY21wLCB0aGVuCitkbmwgSEFWRV9TVFJOQ0FTRUNNUCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfU1RSTkNBU0VDTVBdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1RSSU5HXSlkbmwKKyAgIworICB0c3RfbGlua3Nfc3RybmNhc2VjbXA9InVua25vd24iCisgIHRzdF9wcm90b19zdHJuY2FzZWNtcD0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cm5jYXNlY21wPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RybmNhc2VjbXA9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuY2FzZWNtcCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbc3RybmNhc2VjbXBdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19zdHJuY2FzZWNtcD0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3N0cm5jYXNlY21wPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cm5jYXNlY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuY2FzZWNtcCBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3N0cm5jYXNlY21wXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc3RybmNhc2VjbXA9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19zdHJuY2FzZWNtcD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cm5jYXNlY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuY2FzZWNtcCBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IHN0cm5jYXNlY21wKDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3N0cm5jYXNlY21wPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc3RybmNhc2VjbXA9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJuY2FzZWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RybmNhc2VjbXAgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3N0cm5jYXNlY21wIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfc3RybmNhc2VjbXA9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfc3RybmNhc2VjbXA9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuY2FzZWNtcCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJuY2FzZWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cm5jYXNlY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RybmNhc2VjbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zdHJuY2FzZWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RSTkNBU0VDTVAsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cm5jYXNlY21wIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19zdHJuY2FzZWNtcD0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc3RybmNhc2VjbXA9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NUUk5DTVBJCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBzdHJuY21waSBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X3N0cm5jbXBpLCB0aGVuCitkbmwgSEFWRV9TVFJOQ01QSSB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfU1RSTkNNUEldLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1RSSU5HXSlkbmwKKyAgIworICB0c3RfbGlua3Nfc3RybmNtcGk9InVua25vd24iCisgIHRzdF9wcm90b19zdHJuY21waT0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cm5jbXBpPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RybmNtcGk9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuY21waSBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbc3RybmNtcGldKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19zdHJuY21waT0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3N0cm5jbXBpPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cm5jbXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuY21waSBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3N0cm5jbXBpXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc3RybmNtcGk9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19zdHJuY21waT0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cm5jbXBpIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuY21waSBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IHN0cm5jbXBpKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3N0cm5jbXBpPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc3RybmNtcGk9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJuY21waSIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RybmNtcGkgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3N0cm5jbXBpIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfc3RybmNtcGk9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfc3RybmNtcGk9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuY21waSBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJuY21waSIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cm5jbXBpIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RybmNtcGkiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zdHJuY21waSIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RSTkNNUEksIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cm5jbXBpIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19zdHJuY21waT0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc3RybmNtcGk9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NUUk5JQ01QCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBzdHJuaWNtcCBpcyBhdmFpbGFibGUsIHByb3RvdHlwZWQsIGFuZAorZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKK2RubCB1c2FnZSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkaXNhbGxvd2VkIHdpdGgKK2RubCBzaGVsbCB2YXJpYWJsZSBjdXJsX2Rpc2FsbG93X3N0cm5pY21wLCB0aGVuCitkbmwgSEFWRV9TVFJOSUNNUCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfU1RSTklDTVBdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1RSSU5HXSlkbmwKKyAgIworICB0c3RfbGlua3Nfc3RybmljbXA9InVua25vd24iCisgIHRzdF9wcm90b19zdHJuaWNtcD0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cm5pY21wPSJ1bmtub3duIgorICB0c3RfYWxsb3dfc3RybmljbXA9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuaWNtcCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbc3RybmljbXBdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc19zdHJuaWNtcD0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3N0cm5pY21wPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cm5pY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuaWNtcCBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3N0cm5pY21wXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc3RybmljbXA9InllcyIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIHRzdF9wcm90b19zdHJuaWNtcD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cm5pY21wIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuaWNtcCBpcyBjb21waWxhYmxlXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKKyAgICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisgICAgICBdXSxbWworICAgICAgICBpZigwICE9IHN0cm5pY21wKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3N0cm5pY21wPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc3RybmljbXA9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9jb21waV9zdHJuaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RybmljbXAgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3N0cm5pY21wIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfYWxsb3dfc3RybmljbXA9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfc3RybmljbXA9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJuaWNtcCBtaWdodCBiZSB1c2VkXSkKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJuaWNtcCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cm5pY21wIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RybmljbXAiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9hbGxvd19zdHJuaWNtcCIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RSTklDTVAsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cm5pY21wIGZ1bmN0aW9uLl0pCisgICAgYWNfY3ZfZnVuY19zdHJuaWNtcD0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc3RybmljbXA9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1NUUlNUUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc3Ryc3RyIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfc3Ryc3RyLCB0aGVuCitkbmwgSEFWRV9TVFJTVFIgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX1NUUlNUUl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TVFJJTkddKWRubAorICAjCisgIHRzdF9saW5rc19zdHJzdHI9InVua25vd24iCisgIHRzdF9wcm90b19zdHJzdHI9InVua25vd24iCisgIHRzdF9jb21waV9zdHJzdHI9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJzdHI9InVua25vd24iCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJzdHIgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW3N0cnN0cl0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX3N0cnN0cj0ieWVzIgorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgdHN0X2xpbmtzX3N0cnN0cj0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJzdHIiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cnN0ciBpcyBwcm90b3R5cGVkXSkKKyAgICBBQ19FR1JFUF9DUFAoW3N0cnN0cl0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX3N0cnN0cj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX3N0cnN0cj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cnN0ciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3Ryc3RyIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gc3Ryc3RyKDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3N0cnN0cj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX3N0cnN0cj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cnN0ciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3Ryc3RyIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zdHJzdHIiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19zdHJzdHI9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfc3Ryc3RyPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3Ryc3RyIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cnN0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3N0cnN0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3N0cnN0ciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3N0cnN0ciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RSU1RSLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJzdHIgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX3N0cnN0cj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfc3Ryc3RyPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19TVFJUT0tfUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgc3RydG9rX3IgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKK2RubCBjYW4gYmUgY29tcGlsZWQuIElmIGFsbCBvZiB0aGVzZSBhcmUgdHJ1ZSwgYW5kCitkbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCitkbmwgc2hlbGwgdmFyaWFibGUgY3VybF9kaXNhbGxvd19zdHJ0b2tfciwgdGhlbgorZG5sIEhBVkVfU1RSVE9LX1Igd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX1NUUlRPS19SXSwgWworICBBQ19SRVFVSVJFKFtDVVJMX0lOQ0xVREVTX1NUUklOR10pZG5sCisgICMKKyAgdHN0X2xpbmtzX3N0cnRva19yPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RydG9rX3I9InVua25vd24iCisgIHRzdF9jb21waV9zdHJ0b2tfcj0idW5rbm93biIKKyAgdHN0X2FsbG93X3N0cnRva19yPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3RydG9rX3IgY2FuIGJlIGxpbmtlZF0pCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW3N0cnRva19yXSkKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICB0c3RfbGlua3Nfc3RydG9rX3I9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19zdHJ0b2tfcj0ibm8iCisgIF0pCisgICMKKyAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJ0b2tfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RydG9rX3IgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtzdHJ0b2tfcl0sWworICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X3Byb3RvX3N0cnRva19yPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fc3RydG9rX3I9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJ0b2tfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RydG9rX3IgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N0cmluZworICAgICAgXV0sW1sKKyAgICAgICAgaWYoMCAhPSBzdHJ0b2tfcigwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9zdHJ0b2tfcj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX3N0cnRva19yPSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RydG9rX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cnRva19yIHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zdHJ0b2tfciIgIT0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2FsbG93X3N0cnRva19yPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3N0cnRva19yPSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3RydG9rX3IgbWlnaHQgYmUgdXNlZF0pCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RydG9rX3IiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJ0b2tfciIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3N0cnRva19yIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RydG9rX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NUUlRPS19SLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJ0b2tfciBmdW5jdGlvbi5dKQorICAgIGFjX2N2X2Z1bmNfc3RydG9rX3I9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX3N0cnRva19yPSJubyIKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfRlVOQ19TVFJUT0xMCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFZlcmlmeSBpZiBzdHJ0b2xsIGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfc3RydG9sbCwgdGhlbgorZG5sIEhBVkVfU1RSVE9MTCB3aWxsIGJlIGRlZmluZWQuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfU1RSVE9MTF0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TVERMSUJdKWRubAorICAjCisgIHRzdF9saW5rc19zdHJ0b2xsPSJ1bmtub3duIgorICB0c3RfcHJvdG9fc3RydG9sbD0idW5rbm93biIKKyAgdHN0X2NvbXBpX3N0cnRvbGw9InVua25vd24iCisgIHRzdF9hbGxvd19zdHJ0b2xsPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgc3RydG9sbCBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbc3RydG9sbF0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdHN0X2xpbmtzX3N0cnRvbGw9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc19zdHJ0b2xsPSJubyIKKyAgXSkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cnRvbGwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cnRvbGwgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFtzdHJ0b2xsXSxbCisgICAgICAkY3VybF9pbmNsdWRlc19zdGRsaWIKKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fc3RydG9sbD0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X3Byb3RvX3N0cnRvbGw9Im5vIgorICAgIF0pCisgIGZpCisgICMKKyAgaWYgdGVzdCAiJHRzdF9wcm90b19zdHJ0b2xsIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJ0b2xsIGlzIGNvbXBpbGFibGVdKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgICAgICAkY3VybF9pbmNsdWRlc19zdGRsaWIKKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gc3RydG9sbCgwLCAwLCAwKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIF1dKQorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9jb21waV9zdHJ0b2xsPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfY29tcGlfc3RydG9sbD0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3N0cnRvbGwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cnRvbGwgdXNhZ2UgYWxsb3dlZF0pCisgICAgaWYgdGVzdCAieCRjdXJsX2Rpc2FsbG93X3N0cnRvbGwiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd19zdHJ0b2xsPSJ5ZXMiCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2FsbG93X3N0cnRvbGw9Im5vIgorICAgIGZpCisgIGZpCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJ0b2xsIG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3N0cnRvbGwiID0gInllcyIgJiYKKyAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJ0b2xsIiA9ICJ5ZXMiICYmCisgICAgIHRlc3QgIiR0c3RfY29tcGlfc3RydG9sbCIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3N0cnRvbGwiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NUUlRPTEwsIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cnRvbGwgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX3N0cnRvbGw9InllcyIKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBhY19jdl9mdW5jX3N0cnRvbGw9Im5vIgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19GVU5DX1dSSVRFVgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBWZXJpZnkgaWYgd3JpdGV2IGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCitkbmwgY2FuIGJlIGNvbXBpbGVkLiBJZiBhbGwgb2YgdGhlc2UgYXJlIHRydWUsIGFuZAorZG5sIHVzYWdlIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRpc2FsbG93ZWQgd2l0aAorZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfd3JpdGV2LCB0aGVuCitkbmwgSEFWRV9XUklURVYgd2lsbCBiZSBkZWZpbmVkLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19GVU5DX1dSSVRFVl0sIFsKKyAgQUNfUkVRVUlSRShbQ1VSTF9JTkNMVURFU19TWVNfVUlPXSlkbmwKKyAgIworICB0c3RfbGlua3Nfd3JpdGV2PSJ1bmtub3duIgorICB0c3RfcHJvdG9fd3JpdGV2PSJ1bmtub3duIgorICB0c3RfY29tcGlfd3JpdGV2PSJ1bmtub3duIgorICB0c3RfYWxsb3dfd3JpdGV2PSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgd3JpdGV2IGNhbiBiZSBsaW5rZWRdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFt3cml0ZXZdKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRzdF9saW5rc193cml0ZXY9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRzdF9saW5rc193cml0ZXY9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0c3RfbGlua3Nfd3JpdGV2IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3cml0ZXYgaXMgcHJvdG90eXBlZF0pCisgICAgQUNfRUdSRVBfQ1BQKFt3cml0ZXZdLFsKKyAgICAgICRjdXJsX2luY2x1ZGVzX3N5c191aW8KKyAgICBdLFsKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICB0c3RfcHJvdG9fd3JpdGV2PSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfcHJvdG9fd3JpdGV2PSJubyIKKyAgICBdKQorICBmaQorICAjCisgIGlmIHRlc3QgIiR0c3RfcHJvdG9fd3JpdGV2IiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3cml0ZXYgaXMgY29tcGlsYWJsZV0pCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisgICAgICAgICRjdXJsX2luY2x1ZGVzX3N5c191aW8KKyAgICAgIF1dLFtbCisgICAgICAgIGlmKDAgIT0gd3JpdGV2KDAsIDAsIDApKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgXV0pCisgICAgXSxbCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgdHN0X2NvbXBpX3dyaXRldj0ieWVzIgorICAgIF0sWworICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgdHN0X2NvbXBpX3dyaXRldj0ibm8iCisgICAgXSkKKyAgZmkKKyAgIworICBpZiB0ZXN0ICIkdHN0X2NvbXBpX3dyaXRldiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgd3JpdGV2IHVzYWdlIGFsbG93ZWRdKQorICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd193cml0ZXYiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIHRzdF9hbGxvd193cml0ZXY9InllcyIKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICB0c3RfYWxsb3dfd3JpdGV2PSJubyIKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgd3JpdGV2IG1pZ2h0IGJlIHVzZWRdKQorICBpZiB0ZXN0ICIkdHN0X2xpbmtzX3dyaXRldiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X3Byb3RvX3dyaXRldiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2NvbXBpX3dyaXRldiIgPSAieWVzIiAmJgorICAgICB0ZXN0ICIkdHN0X2FsbG93X3dyaXRldiIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfV1JJVEVWLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3cml0ZXYgZnVuY3Rpb24uXSkKKyAgICBhY19jdl9mdW5jX3dyaXRldj0ieWVzIgorICBlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGFjX2N2X2Z1bmNfd3JpdGV2PSJubyIKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9tNC9jdXJsLW9wZW5zc2wubTQgYi9jdXJsLTcuMjUuMC9tNC9jdXJsLW9wZW5zc2wubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5MDc0YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL200L2N1cmwtb3BlbnNzbC5tNApAQCAtMCwwICsxLDI2MCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjIEZpbGUgdmVyc2lvbiBmb3IgJ2FjbG9jYWwnIHVzZS4gS2VlcCBpdCBhIHNpbmdsZSBudW1iZXIuCisjIHNlcmlhbCA1CisKKworZG5sIENVUkxfQ0hFQ0tfT1BFTlNTTF9BUElfSEVBREVSUworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBGaW5kIG91dCBPcGVuU1NMIGhlYWRlcnMgQVBJIHZlcnNpb24sIGFzIHJlcG9ydGVkCitkbmwgYnkgT1BFTlNTTF9WRVJTSU9OX05VTUJFUi4gTm8gcnVudGltZSBjaGVja3MKK2RubCBhbGxvd2VkIGhlcmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIHN1cHBvcnQuCitkbmwgSEFWRV9PUEVOU1NMX0FQSV9IRUFERVJTIGlzIGRlZmluZWQgYXMgYXBwcnByaWF0ZQorZG5sIG9ubHkgZm9yIHN5c3RlbXMgd2hpY2ggYWN0dWFsbHkgcnVuIHRoZSBjb25maWd1cmUKK2RubCBzY3JpcHQuIENvbmZpZyBmaWxlcyBnZW5lcmF0ZWQgbWFudWFsbHkgb3IgaW4gYW55Citkbmwgb3RoZXIgd2F5IHNoYWxsIG5vdCBkZWZpbmUgdGhpcy4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfT1BFTlNTTF9BUElfSEVBREVSU10sIFsKKyAgIworICB0c3RfYXBpPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbZm9yIE9wZW5TU0wgaGVhZGVycyB2ZXJzaW9uXSkKKyAgQ1VSTF9DSEVDS19ERUYoW09QRU5TU0xfVkVSU0lPTl9OVU1CRVJdLCBbCisjICAgaWZkZWYgVVNFX09QRU5TU0wKKyMgICAgIGluY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisjICAgZWxzZQorIyAgICAgaW5jbHVkZSA8Y3J5cHRvLmg+CisjICAgZW5kaWYKKyAgICBdLCBbc2lsZW50XSkKKyAgaWYgdGVzdCAiJGN1cmxfY3ZfaGF2ZV9kZWZfT1BFTlNTTF9WRVJTSU9OX05VTUJFUiIgPSAieWVzIjsgdGhlbgorICAgIHRzdF92ZXJsZW49YGV4cHIgIiRjdXJsX2N2X2RlZl9PUEVOU1NMX1ZFUlNJT05fTlVNQkVSIiA6ICcuKidgCisgICAgY2FzZSAieCR0c3RfdmVybGVuIiBpbgorICAgICAgeDYpCisgICAgICAgIHRzdF92ZXJtYWo9YGVjaG8gJGN1cmxfY3ZfZGVmX09QRU5TU0xfVkVSU0lPTl9OVU1CRVIgfCBjdXQgLWMgM2AKKyAgICAgICAgdHN0X3Zlcm1pbj1gZWNobyAkY3VybF9jdl9kZWZfT1BFTlNTTF9WRVJTSU9OX05VTUJFUiB8IGN1dCAtYyA0YAorICAgICAgICB0c3RfdmVyZml4PWBlY2hvICRjdXJsX2N2X2RlZl9PUEVOU1NMX1ZFUlNJT05fTlVNQkVSIHwgY3V0IC1jIDVgCisgICAgICAgIHRzdF9hcGk9MHgkdHN0X3Zlcm1haiR0c3RfdmVybWluJHRzdF92ZXJmaXgKKyAgICAgICAgOzsKKyAgICAgIHgxMXx4MTApCisgICAgICAgIHRzdF92ZXJtYWo9YGVjaG8gJGN1cmxfY3ZfZGVmX09QRU5TU0xfVkVSU0lPTl9OVU1CRVIgfCBjdXQgLWMgM2AKKyAgICAgICAgdHN0X3Zlcm1pbj1gZWNobyAkY3VybF9jdl9kZWZfT1BFTlNTTF9WRVJTSU9OX05VTUJFUiB8IGN1dCAtYyA1YAorICAgICAgICB0c3RfdmVyZml4PWBlY2hvICRjdXJsX2N2X2RlZl9PUEVOU1NMX1ZFUlNJT05fTlVNQkVSIHwgY3V0IC1jIDdgCisgICAgICAgIHRzdF9hcGk9MHgkdHN0X3Zlcm1haiR0c3RfdmVybWluJHRzdF92ZXJmaXgKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIHRzdF9hcGk9InVua25vd24iCisgICAgICAgIDs7CisgICAgZXNhYworICAgIGNhc2UgJHRzdF9hcGkgaW4KKyAgICAgIDB4MTEwKSB0c3Rfc2hvdz0iMS4xLjAiIDs7CisgICAgICAweDEwMSkgdHN0X3Nob3c9IjEuMC4xIiA7OworICAgICAgMHgxMDApIHRzdF9zaG93PSIxLjAuMCIgOzsKKyAgICAgIDB4MDk5KSB0c3Rfc2hvdz0iMC45LjkiIDs7CisgICAgICAweDA5OCkgdHN0X3Nob3c9IjAuOS44IiA7OworICAgICAgMHgwOTcpIHRzdF9zaG93PSIwLjkuNyIgOzsKKyAgICAgIDB4MDk2KSB0c3Rfc2hvdz0iMC45LjYiIDs7CisgICAgICAweDA5NSkgdHN0X3Nob3c9IjAuOS41IiA7OworICAgICAgMHgwOTQpIHRzdF9zaG93PSIwLjkuNCIgOzsKKyAgICAgIDB4MDkzKSB0c3Rfc2hvdz0iMC45LjMiIDs7CisgICAgICAweDA5MikgdHN0X3Nob3c9IjAuOS4yIiA7OworICAgICAgMHgwOTEpIHRzdF9zaG93PSIwLjkuMSIgOzsKKyAgICAgICopICAgICB0c3Rfc2hvdz0idW5rbm93biIgOzsKKyAgICBlc2FjCisgICAgdHN0X3Nob3c9IiR0c3Rfc2hvdyAtICRjdXJsX2N2X2RlZl9PUEVOU1NMX1ZFUlNJT05fTlVNQkVSIgorICBlbHNlCisgICAgdHN0X3Nob3c9InVua25vd24iCisgIGZpCisgIEFDX01TR19SRVNVTFQoWyR0c3Rfc2hvd10pCisgICMKK2RubCBpZiB0ZXN0ICIkdHN0X2FwaSIgIT0gInVua25vd24iOyB0aGVuCitkbmwgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfT1BFTlNTTF9BUElfSEVBREVSUywgJHRzdF9hcGksCitkbmwgICBbT3BlblNTTCBoZWFkZXJzIGNvbmZpZ3VyZSB0aW1lIEFQSS4gRGVmaW5lZCBvbmx5IGJ5IGNvbmZpZ3VyZSBzY3JpcHQuCitkbmwgICAgTm8gbWF0dGVyIHdoYXQsIGRvIG5vdCBldmVyIGRlZmluZSB0aGlzIG1hbnVhbGx5IG9yIGJ5IGFueSBvdGhlciBtZWFucy5dKQorZG5sIGZpCisgIGN1cmxfb3BlbnNzbF9hcGlfaGVhZGVycz0kdHN0X2FwaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19PUEVOU1NMX0FQSV9MSUJSQVJZCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIEZpbmQgb3V0IE9wZW5TU0wgbGlicmFyeSBBUEkgdmVyc2lvbiwgcGVyZm9ybWluZworZG5sIG9ubHkgbGluayB0ZXN0cyBpbiBvcmRlciB0byBhdm9pZCBnZXR0aW5nIGZvb2xlZAorZG5sIGJ5IG1pc21hdGNoZWQgT3BlblNTTCBoZWFkZXJzLiBObyBydW50aW1lIGNoZWNrcworZG5sIGFsbG93ZWQgaGVyZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24gc3VwcG9ydC4KK2RubCBIQVZFX09QRU5TU0xfQVBJX0xJQlJBUlkgaXMgZGVmaW5lZCBhcyBhcHBycHJpYXRlCitkbmwgb25seSBmb3Igc3lzdGVtcyB3aGljaCBhY3R1YWxseSBydW4gdGhlIGNvbmZpZ3VyZQorZG5sIHNjcmlwdC4gQ29uZmlnIGZpbGVzIGdlbmVyYXRlZCBtYW51YWxseSBvciBpbiBhbnkKK2RubCBvdGhlciB3YXkgc2hhbGwgbm90IGRlZmluZSB0aGlzLgorZG5sCitkbmwgTW9zdCBwcm9iYWJseSB3ZSBzaG91bGQgbm90IGJvdGhlciBhdHRlbXB0aW5nIHRvCitkbmwgZGV0ZWN0IE9wZW5TU0wgbGlicmFyeSBkZXZlbG9wbWVudCBBUEkgdmVyc2lvbnMKK2RubCAwLjkuOSBhbmQgMS4xLjAuIEZvciBvdXIgaW50ZW5kZWQgdXNlLCBkZXRlY3RpbmcKK2RubCByZWxlYXNlZCB2ZXJzaW9ucyBzaG91bGQgYmUgZ29vZCBlbm91Z2guCitkbmwKK2RubCBHaXZlbiB0aGF0IGN1cnJlbnRseSB3ZSBhcmUgbm90IHVzaW5nIHRoZSByZXN1bHQKK2RubCBvZiB0aGlzIGNoZWNrLCBleGNlcHQgZm9yIGluZm9ybWF0aXZlIHB1cnBvc2VzLAorZG5sIGxldHMgdHJ5IHRvIGZpZ3VyZSBvdXQgZXZlcnl0aGluZy4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfT1BFTlNTTF9BUElfTElCUkFSWV0sIFsKKyAgIworICB0c3RfYXBpPSJ1bmtub3duIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbZm9yIE9wZW5TU0wgbGlicmFyeSB2ZXJzaW9uXSkKKyAgaWYgdGVzdCAiJHRzdF9hcGkiID0gInVua25vd24iOyB0aGVuCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi0qLXZtcyopCisgICAgICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgICAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW1NTTF9DVFhfc2V0X25vdF9yZXN1bWJsX3Nlc3NfY2JdKQorICAgICAgICBdLFsKKyAgICAgICAgICB0c3RfYXBpPSIweDExMCIKKyAgICAgICAgXSkKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgICAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW1NTTF9DVFhfc2V0X25vdF9yZXN1bWFibGVfc2Vzc2lvbl9jYWxsYmFja10pCisgICAgICAgIF0sWworICAgICAgICAgIHRzdF9hcGk9IjB4MTEwIgorICAgICAgICBdKQorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgaWYgdGVzdCAiJHRzdF9hcGkiID0gInVua25vd24iOyB0aGVuCisgICAgQUNfTElOS19JRkVMU0UoWworICAgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtTU0xfcmVuZWdvdGlhdGVfYWJicmV2aWF0ZWRdKQorICAgIF0sWworICAgICAgdHN0X2FwaT0iMHgxMDEiCisgICAgXSkKKyAgZmkKKyAgaWYgdGVzdCAiJHRzdF9hcGkiID0gInVua25vd24iOyB0aGVuCisgICAgQUNfTElOS19JRkVMU0UoWworICAgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtPQkpfYWRkX3NpZ2lkXSkKKyAgICBdLFsKKyAgICAgIHRzdF9hcGk9IjB4MTAwIgorICAgIF0pCisgIGZpCisgIGlmIHRlc3QgIiR0c3RfYXBpIiA9ICJ1bmtub3duIjsgdGhlbgorICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbRVJSX3NldF9tYXJrXSkKKyAgICBdLFsKKyAgICAgIHRzdF9hcGk9IjB4MDk4IgorICAgIF0pCisgIGZpCisgIGlmIHRlc3QgIiR0c3RfYXBpIiA9ICJ1bmtub3duIjsgdGhlbgorICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbRVJSX3BlZWtfbGFzdF9lcnJvcl0pCisgICAgXSxbCisgICAgICB0c3RfYXBpPSIweDA5NyIKKyAgICBdKQorICBmaQorICBpZiB0ZXN0ICIkdHN0X2FwaSIgPSAidW5rbm93biI7IHRoZW4KKyAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2MyaV9BU04xX09CSkVDVF0pCisgICAgXSxbCisgICAgICB0c3RfYXBpPSIweDA5NiIKKyAgICBdKQorICBmaQorICBpZiB0ZXN0ICIkdHN0X2FwaSIgPSAidW5rbm93biI7IHRoZW4KKyAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW1NTTF9DVFhfc2V0X3B1cnBvc2VdKQorICAgIF0sWworICAgICAgdHN0X2FwaT0iMHgwOTUiCisgICAgXSkKKyAgZmkKKyAgaWYgdGVzdCAiJHRzdF9hcGkiID0gInVua25vd24iOyB0aGVuCisgICAgQUNfTElOS19JRkVMU0UoWworICAgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtPQkpfb2JqMnR4dF0pCisgICAgXSxbCisgICAgICB0c3RfYXBpPSIweDA5NCIKKyAgICBdKQorICBmaQorICBpZiB0ZXN0ICIkdHN0X2FwaSIgPSAidW5rbm93biI7IHRoZW4KKyAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW1NTTF9nZXRfdmVyaWZ5X2RlcHRoXSkKKyAgICBdLFsKKyAgICAgIHRzdF9hcGk9IjB4MDkzIgorICAgIF0pCisgIGZpCisgIGlmIHRlc3QgIiR0c3RfYXBpIiA9ICJ1bmtub3duIjsgdGhlbgorICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbU1NMX2xpYnJhcnlfaW5pdF0pCisgICAgXSxbCisgICAgICB0c3RfYXBpPSIweDA5MiIKKyAgICBdKQorICBmaQorICBpZiB0ZXN0ICIkdHN0X2FwaSIgPSAidW5rbm93biI7IHRoZW4KKyAgICBBQ19MSU5LX0lGRUxTRShbCisgICAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW1NTTF9DVFhfc2V0X2NpcGhlcl9saXN0XSkKKyAgICBdLFsKKyAgICAgIHRzdF9hcGk9IjB4MDkxIgorICAgIF0pCisgIGZpCisgIGNhc2UgJHRzdF9hcGkgaW4KKyAgICAweDExMCkgdHN0X3Nob3c9IjEuMS4wIiA7OworICAgIDB4MTAxKSB0c3Rfc2hvdz0iMS4wLjEiIDs7CisgICAgMHgxMDApIHRzdF9zaG93PSIxLjAuMCIgOzsKKyAgICAweDA5OSkgdHN0X3Nob3c9IjAuOS45IiA7OworICAgIDB4MDk4KSB0c3Rfc2hvdz0iMC45LjgiIDs7CisgICAgMHgwOTcpIHRzdF9zaG93PSIwLjkuNyIgOzsKKyAgICAweDA5NikgdHN0X3Nob3c9IjAuOS42IiA7OworICAgIDB4MDk1KSB0c3Rfc2hvdz0iMC45LjUiIDs7CisgICAgMHgwOTQpIHRzdF9zaG93PSIwLjkuNCIgOzsKKyAgICAweDA5MykgdHN0X3Nob3c9IjAuOS4zIiA7OworICAgIDB4MDkyKSB0c3Rfc2hvdz0iMC45LjIiIDs7CisgICAgMHgwOTEpIHRzdF9zaG93PSIwLjkuMSIgOzsKKyAgICAqKSAgICAgdHN0X3Nob3c9InVua25vd24iIDs7CisgIGVzYWMKKyAgQUNfTVNHX1JFU1VMVChbJHRzdF9zaG93XSkKKyAgIworZG5sIGlmIHRlc3QgIiR0c3RfYXBpIiAhPSAidW5rbm93biI7IHRoZW4KK2RubCBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9PUEVOU1NMX0FQSV9MSUJSQVJZLCAkdHN0X2FwaSwKK2RubCAgIFtPcGVuU1NMIGxpYnJhcnkgbGluayB0aW1lIEFQSS4gRGVmaW5lZCBvbmx5IGJ5IGNvbmZpZ3VyZSBzY3JpcHQuCitkbmwgICAgTm8gbWF0dGVyIHdoYXQsIGRvIG5vdCBldmVyIGRlZmluZSB0aGlzIG1hbnVhbGx5IG9yIGJ5IGFueSBvdGhlciBtZWFucy5dKQorZG5sIGZpCisgIGN1cmxfb3BlbnNzbF9hcGlfbGlicmFyeT0kdHN0X2FwaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19PUEVOU1NMX0FQSQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfT1BFTlNTTF9BUEldLCBbCisgICMKKyAgQ1VSTF9DSEVDS19PUEVOU1NMX0FQSV9IRUFERVJTCisgIENVUkxfQ0hFQ0tfT1BFTlNTTF9BUElfTElCUkFSWQorICAjCisgIHRzdF9tYXRjaD0ieWVzIgorICAjCisgIEFDX01TR19DSEVDS0lORyhbZm9yIE9wZW5TU0wgaGVhZGVycyBhbmQgbGlicmFyeSB2ZXJzaW9ucyBtYXRjaGluZ10pCisgIGlmIHRlc3QgIiRjdXJsX29wZW5zc2xfYXBpX2hlYWRlcnMiID0gInVua25vd24iIHx8CisgICAgdGVzdCAiJGN1cmxfb3BlbnNzbF9hcGlfbGlicmFyeSIgPSAidW5rbm93biI7IHRoZW4KKyAgICB0c3RfbWF0Y2g9ImZhaWwiCisgICAgdHN0X3dhcm5zPSJDYW4gbm90IGNvbXBhcmUgT3BlblNTTCBoZWFkZXJzIGFuZCBsaWJyYXJ5IHZlcnNpb25zLiIKKyAgZWxpZiB0ZXN0ICIkY3VybF9vcGVuc3NsX2FwaV9oZWFkZXJzIiAhPSAiJGN1cmxfb3BlbnNzbF9hcGlfbGlicmFyeSI7IHRoZW4KKyAgICB0c3RfbWF0Y2g9Im5vIgorICAgIHRzdF93YXJucz0iT3BlblNTTCBoZWFkZXJzIGFuZCBsaWJyYXJ5IHZlcnNpb25zIGRvIG5vdCBtYXRjaC4iCisgIGZpCisgIEFDX01TR19SRVNVTFQoWyR0c3RfbWF0Y2hdKQorICBpZiB0ZXN0ICIkdHN0X21hdGNoIiAhPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19XQVJOKFskdHN0X3dhcm5zXSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9tNC9jdXJsLW92ZXJyaWRlLm00IGIvY3VybC03LjI1LjAvbTQvY3VybC1vdmVycmlkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDMxMTBlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbTQvY3VybC1vdmVycmlkZS5tNApAQCAtMCwwICsxLDEwMCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjIEZpbGUgdmVyc2lvbiBmb3IgJ2FjbG9jYWwnIHVzZS4gS2VlcCBpdCBhIHNpbmdsZSBudW1iZXIuCisjIHNlcmlhbCA1CisKK2RubCBDVVJMX09WRVJSSURFX0FVVE9DT05GCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFBsYWNpbmcgYSBjYWxsIHRvIHRoaXMgbWFjcm8gaW4gY29uZmlndXJlLmFjIGFmdGVyCitkbmwgdGhlIG9uZSB0byBBQ19JTklUIHdpbGwgbWFrZSBtYWNyb3MgaW4gdGhpcyBmaWxlCitkbmwgdmlzaWJsZSB0byB0aGUgcmVzdCBvZiB0aGUgY29tcGlsYXRpb24gb3ZlcnJpZGluZworZG5sIHRob3NlIGZyb20gQXV0b2NvbmYuCisKK0FDX0RFRlVOKFtDVVJMX09WRVJSSURFX0FVVE9DT05GXSwgWworQUNfQkVGT1JFKFskMF0sW0FDX1BST0dfTElCVE9PTF0pCisjIHVzaW5nIGN1cmwtb3ZlcnJpZGUubTQKK10pCisKK2RubCBPdmVycmlkZSBBdXRvY29uZidzIEFDX0xBTkdfUFJPR1JBTSAoQykKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZworZG5sICdmdW5jdGlvbiBkZWNsYXJhdGlvbiBpc24ndCBhIHByb3RvdHlwZScKK2RubCBpbiBmdW5jdGlvbiBtYWluLiBUaGlzIHJlcXVpcmVzIGF0IGxlYXN0CitkbmwgYSBjODkgY29tcGlsZXIgYW5kIGRvZXMgbm90IHN1cG9ydCBLJlIuCisKK200X2RlZmluZShbQUNfTEFOR19QUk9HUkFNKEMpXSwKK1skMQoraW50IG1haW4gKHZvaWQpCit7CiskMgorIDsKKyByZXR1cm4gMDsKK31dKQorCitkbmwgT3ZlcnJpZGUgQXV0b2NvbmYncyBBQ19MQU5HX0NBTEwgKEMpCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRoaXMgaXMgYSBiYWNrcG9ydCBvZiBBdXRvY29uZidzIDIuNjAgd2l0aCB0aGUKK2RubCBlbWJlZGRlZCBjb21tZW50cyB0aGF0IGhpdCB0aGUgcmVzdWx0aW5nIHNjcmlwdAorZG5sIHJlbW92ZWQuIFRoaXMgaXMgZG9uZSB0byByZWR1Y2UgY29uZmlndXJlIHNpemUKK2RubCBhbmQgdXNlIGZpeGVkIG1hY3JvIGFjcm9zcyBBdXRvY29uZiB2ZXJzaW9ucy4KKworbTRfZGVmaW5lKFtBQ19MQU5HX0NBTEwoQyldLAorW0FDX0xBTkdfUFJPR1JBTShbJDEKK200X2lmKFskMl0sIFttYWluXSwgLAorWworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDIgKCk7XSldLCBbcmV0dXJuICQyICgpO10pXSkKKworZG5sIE92ZXJyaWRlIEF1dG9jb25mJ3MgQUNfTEFOR19GVU5DX0xJTktfVFJZIChDKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUaGlzIGlzIGEgYmFja3BvcnQgb2YgQXV0b2NvbmYncyAyLjYwIHdpdGggdGhlCitkbmwgZW1iZWRkZWQgY29tbWVudHMgdGhhdCBoaXQgdGhlIHJlc3VsdGluZyBzY3JpcHQKK2RubCByZW1vdmVkLiBUaGlzIGlzIGRvbmUgdG8gcmVkdWNlIGNvbmZpZ3VyZSBzaXplCitkbmwgYW5kIHVzZSBmaXhlZCBtYWNybyBhY3Jvc3MgQXV0b2NvbmYgdmVyc2lvbnMuCisKK200X2RlZmluZShbQUNfTEFOR19GVU5DX0xJTktfVFJZKEMpXSwKK1tBQ19MQU5HX1BST0dSQU0oCitbCisjZGVmaW5lICQxIGlubm9jdW91c18kMQorI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKyN1bmRlZiAkMQorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDEgKCk7CisjaWYgZGVmaW5lZCBfX3N0dWJfJDEgfHwgZGVmaW5lZCBfX3N0dWJfX18kMQorY2hva2UgbWUKKyNlbmRpZgorXSwgW3JldHVybiAkMSAoKTtdKV0pCisKK2RubCBPdmVycmlkZSBBdXRvY29uZidzIFBBVEhfU0VQQVJBVE9SIGNoZWNrCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUgdGhhdCB0aGUgc2FtZSBjaGVjayBpcworZG5sIHVzZWQgYWNyb3NzIGRpZmZlcmVudCBBdXRvY29uZiB2ZXJzaW9ucyBhbmQgdG8KK2RubCBhbGxvdyB1cyB0byB1c2UgdGhpcyBtYWNybyBlYXJseSBlbm91Z2ggaW4gdGhlCitkbmwgY29uZmlndXJlIHNjcmlwdC4KKworbTRfZGVmdW4oW19BU19QQVRIX1NFUEFSQVRPUl9QUkVQQVJFXSwKK1tDVVJMX0NIRUNLX1BBVEhfU0VQQVJBVE9SCittNF9kZWZpbmUoWyQwXSxbXSldKQorCittNF9kZWZ1bihbX0xUX0FDX0xJQlRPT0xfU1lTX1BBVEhfU0VQQVJBVE9SXSwKK1tDVVJMX0NIRUNLX1BBVEhfU0VQQVJBVE9SCittNF9kZWZpbmUoWyQwXSxbXSldKQorCitkbmwgT3ZlcnJpZGUgQXV0b2NvbmYncyBBQ19DT05GSUdfTUFDUk9fRElSIChESVIpCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRoaXMgaXMgYW4gZW11bGF0aW9uIG9mIEF1dG9jb25mJ3MgMi42MSBtYWNyby4KK2RubCBUaGlzIGlzIGRvbmUgdG8gdXNlIGZpeGVkIG1hY3JvIGFjcm9zcyBBdXRvY29uZgorZG5sIHZlcnNpb25zLCBhbmQgYXZvaWQgd2FybmluZ3MgZnJvbSBtb2Rlcm4gbGlidG9vbAorZG5sIHdoaWNoIHRyYWNlcyB1c2FnZSBvZiB0aGlzIG1hY3JvLgorCitBQ19ERUZVTihbQUNfQ09ORklHX01BQ1JPX0RJUl0sWzpdKQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9tNC9jdXJsLXJlZW50cmFudC5tNCBiL2N1cmwtNy4yNS4wL200L2N1cmwtcmVlbnRyYW50Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMmQ4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9tNC9jdXJsLXJlZW50cmFudC5tNApAQCAtMCwwICsxLDYxNyBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjIEZpbGUgdmVyc2lvbiBmb3IgJ2FjbG9jYWwnIHVzZS4gS2VlcCBpdCBhIHNpbmdsZSBudW1iZXIuCisjIHNlcmlhbCA4CisKK2RubCBOb3RlIDEKK2RubCAtLS0tLS0KK2RubCBOb25lIG9mIHRoZSBDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UXyogbWFjcm9zIHNoYWxsIHVzZSBIQVZFX0ZPT19IIHRvCitkbmwgY29uZGl0aW9uYWxseSBpbmNsdWRlIGhlYWRlciBmaWxlcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGVhcmx5IGluIHRoZQorZG5sIGNvbmZpZ3VyZSBwcm9jZXNzIG11Y2ggYmVmb3JlIGhlYWRlciBmaWxlIGF2YWlsYWJpbGl0eSBpcyBrbm93bi4KKworCitkbmwgQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9FUlJOTworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVja3MgaWYgdGhlIHByZXByb2Nlc3NvciBfUkVFTlRSQU5UIGRlZmluaXRpb24KK2RubCBtYWtlcyBlcnJubyBhdmFpbGFibGUgYXMgYSBwcmVwcm9jZXNzb3IgbWFjcm8uCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX0VSUk5PXSwgWworICBBQ19DT01QSUxFX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8ZXJybm8uaD4KKyAgICBdXSxbWworICAgICAgaWYoMCAhPSBlcnJubykKKyAgICAgICAgcmV0dXJuIDE7CisgICAgXV0pCisgIF0sWworICAgIHRtcF9lcnJubz0ieWVzIgorICBdLFsKKyAgICB0bXBfZXJybm89Im5vIgorICBdKQorICBpZiB0ZXN0ICIkdG1wX2Vycm5vIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8ZXJybm8uaD4KKyAgICAgIF1dLFtbCisjaWZkZWYgZXJybm8KKyAgICAgICAgaW50IGR1bW15PTE7CisjZWxzZQorICAgICAgICBmb3JjZSBjb21waWxhdGlvbiBlcnJvcgorI2VuZGlmCisgICAgICBdXSkKKyAgICBdLFsKKyAgICAgIHRtcF9lcnJubz0iZXJybm9fbWFjcm9fZGVmaW5lZCIKKyAgICBdLFsKKyAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFsKKyAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxlcnJuby5oPgorICAgICAgICBdXSxbWworI2lmZGVmIGVycm5vCisgICAgICAgICAgaW50IGR1bW15PTE7CisjZWxzZQorICAgICAgICAgIGZvcmNlIGNvbXBpbGF0aW9uIGVycm9yCisjZW5kaWYKKyAgICAgICAgXV0pCisgICAgICBdLFsKKyAgICAgICAgdG1wX2Vycm5vPSJlcnJub19tYWNyb19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorICAgICAgXSkKKyAgICBdKQorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9HTVRJTUVfUgorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBDaGVja3MgaWYgdGhlIHByZXByb2Nlc3NvciBfUkVFTlRSQU5UIGRlZmluaXRpb24KK2RubCBtYWtlcyBmdW5jdGlvbiBnbXRpbWVfciBjb21waWxlciB2aXNpYmxlLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9HTVRJTUVfUl0sIFsKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZ210aW1lX3JdKQorICBdLFsKKyAgICB0bXBfZ210aW1lX3I9InllcyIKKyAgXSxbCisgICAgdG1wX2dtdGltZV9yPSJubyIKKyAgXSkKKyAgaWYgdGVzdCAiJHRtcF9nbXRpbWVfciIgPSAieWVzIjsgdGhlbgorICAgIEFDX0VHUkVQX0NQUChbZ210aW1lX3JdLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisgICAgXSxbCisgICAgICB0bXBfZ210aW1lX3I9InByb3RvX2RlY2xhcmVkIgorICAgIF0sWworICAgICAgQUNfRUdSRVBfQ1BQKFtnbXRpbWVfcl0sWworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorICAgICAgXSxbCisgICAgICAgIHRtcF9nbXRpbWVfcj0icHJvdG9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKyAgICAgIF0pCisgICAgXSkKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfTE9DQUxUSU1FX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1JFRU5UUkFOVCBkZWZpbml0aW9uCitkbmwgbWFrZXMgZnVuY3Rpb24gbG9jYWx0aW1lX3IgY29tcGlsZXIgdmlzaWJsZS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfTE9DQUxUSU1FX1JdLCBbCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2xvY2FsdGltZV9yXSkKKyAgXSxbCisgICAgdG1wX2xvY2FsdGltZV9yPSJ5ZXMiCisgIF0sWworICAgIHRtcF9sb2NhbHRpbWVfcj0ibm8iCisgIF0pCisgIGlmIHRlc3QgIiR0bXBfbG9jYWx0aW1lX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19FR1JFUF9DUFAoW2xvY2FsdGltZV9yXSxbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorICAgIF0sWworICAgICAgdG1wX2xvY2FsdGltZV9yPSJwcm90b19kZWNsYXJlZCIKKyAgICBdLFsKKyAgICAgIEFDX0VHUkVQX0NQUChbbG9jYWx0aW1lX3JdLFsKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyAgICAgIF0sWworICAgICAgICB0bXBfbG9jYWx0aW1lX3I9InByb3RvX25lZWRzX3JlZW50cmFudCIKKyAgICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisgICAgICBdKQorICAgIF0pCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX1NUUkVSUk9SX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1JFRU5UUkFOVCBkZWZpbml0aW9uCitkbmwgbWFrZXMgZnVuY3Rpb24gc3RyZXJyb3JfciBjb21waWxlciB2aXNpYmxlLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9TVFJFUlJPUl9SXSwgWworICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtzdHJlcnJvcl9yXSkKKyAgXSxbCisgICAgdG1wX3N0cmVycm9yX3I9InllcyIKKyAgXSxbCisgICAgdG1wX3N0cmVycm9yX3I9Im5vIgorICBdKQorICBpZiB0ZXN0ICIkdG1wX3N0cmVycm9yX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19FR1JFUF9DUFAoW3N0cmVycm9yX3JdLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICBdLFsKKyAgICAgIHRtcF9zdHJlcnJvcl9yPSJwcm90b19kZWNsYXJlZCIKKyAgICBdLFsKKyAgICAgIEFDX0VHUkVQX0NQUChbc3RyZXJyb3Jfcl0sWworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgICBdLFsKKyAgICAgICAgdG1wX3N0cmVycm9yX3I9InByb3RvX25lZWRzX3JlZW50cmFudCIKKyAgICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisgICAgICBdKQorICAgIF0pCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX1NUUlRPS19SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrcyBpZiB0aGUgcHJlcHJvY2Vzc29yIF9SRUVOVFJBTlQgZGVmaW5pdGlvbgorZG5sIG1ha2VzIGZ1bmN0aW9uIHN0cnRva19yIGNvbXBpbGVyIHZpc2libGUuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX1NUUlRPS19SXSwgWworICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtzdHJ0b2tfcl0pCisgIF0sWworICAgIHRtcF9zdHJ0b2tfcj0ieWVzIgorICBdLFsKKyAgICB0bXBfc3RydG9rX3I9Im5vIgorICBdKQorICBpZiB0ZXN0ICIkdG1wX3N0cnRva19yIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfRUdSRVBfQ1BQKFtzdHJ0b2tfcl0sWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorICAgIF0sWworICAgICAgdG1wX3N0cnRva19yPSJwcm90b19kZWNsYXJlZCIKKyAgICBdLFsKKyAgICAgIEFDX0VHUkVQX0NQUChbc3RydG9rX3JdLFsKKyNkZWZpbmUgX1JFRU5UUkFOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICAgXSxbCisgICAgICAgIHRtcF9zdHJ0b2tfcj0icHJvdG9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKyAgICAgIF0pCisgICAgXSkKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfSU5FVF9OVE9BX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1JFRU5UUkFOVCBkZWZpbml0aW9uCitkbmwgbWFrZXMgZnVuY3Rpb24gaW5ldF9udG9hX3IgY29tcGlsZXIgdmlzaWJsZS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfSU5FVF9OVE9BX1JdLCBbCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2luZXRfbnRvYV9yXSkKKyAgXSxbCisgICAgdG1wX2luZXRfbnRvYV9yPSJ5ZXMiCisgIF0sWworICAgIHRtcF9pbmV0X250b2Ffcj0ibm8iCisgIF0pCisgIGlmIHRlc3QgIiR0bXBfaW5ldF9udG9hX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19FR1JFUF9DUFAoW2luZXRfbnRvYV9yXSxbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAgICBdLFsKKyAgICAgIHRtcF9pbmV0X250b2Ffcj0icHJvdG9fZGVjbGFyZWQiCisgICAgXSxbCisgICAgICBBQ19FR1JFUF9DUFAoW2luZXRfbnRvYV9yXSxbCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICAgICAgXSxbCisgICAgICAgIHRtcF9pbmV0X250b2Ffcj0icHJvdG9fbmVlZHNfcmVlbnRyYW50IgorICAgICAgICB0bXBfbmVlZF9yZWVudHJhbnQ9InllcyIKKyAgICAgIF0pCisgICAgXSkKKyAgZmkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfR0VUSE9TVEJZQUREUl9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrcyBpZiB0aGUgcHJlcHJvY2Vzc29yIF9SRUVOVFJBTlQgZGVmaW5pdGlvbgorZG5sIG1ha2VzIGZ1bmN0aW9uIGdldGhvc3RieWFkZHJfciBjb21waWxlciB2aXNpYmxlLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9HRVRIT1NUQllBRERSX1JdLCBbCisgIEFDX0xJTktfSUZFTFNFKFsKKyAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2dldGhvc3RieWFkZHJfcl0pCisgIF0sWworICAgIHRtcF9nZXRob3N0YnlhZGRyX3I9InllcyIKKyAgXSxbCisgICAgdG1wX2dldGhvc3RieWFkZHJfcj0ibm8iCisgIF0pCisgIGlmIHRlc3QgIiR0bXBfZ2V0aG9zdGJ5YWRkcl9yIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfRUdSRVBfQ1BQKFtnZXRob3N0YnlhZGRyX3JdLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorICAgIF0sWworICAgICAgdG1wX2dldGhvc3RieWFkZHJfcj0icHJvdG9fZGVjbGFyZWQiCisgICAgXSxbCisgICAgICBBQ19FR1JFUF9DUFAoW2dldGhvc3RieWFkZHJfcl0sWworI2RlZmluZSBfUkVFTlRSQU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyAgICAgIF0sWworICAgICAgICB0bXBfZ2V0aG9zdGJ5YWRkcl9yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorICAgICAgXSkKKyAgICBdKQorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9HRVRIT1NUQllOQU1FX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1JFRU5UUkFOVCBkZWZpbml0aW9uCitkbmwgbWFrZXMgZnVuY3Rpb24gZ2V0aG9zdGJ5bmFtZV9yIGNvbXBpbGVyIHZpc2libGUuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX0dFVEhPU1RCWU5BTUVfUl0sIFsKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZ2V0aG9zdGJ5bmFtZV9yXSkKKyAgXSxbCisgICAgdG1wX2dldGhvc3RieW5hbWVfcj0ieWVzIgorICBdLFsKKyAgICB0bXBfZ2V0aG9zdGJ5bmFtZV9yPSJubyIKKyAgXSkKKyAgaWYgdGVzdCAiJHRtcF9nZXRob3N0YnluYW1lX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19FR1JFUF9DUFAoW2dldGhvc3RieW5hbWVfcl0sWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgXSxbCisgICAgICB0bXBfZ2V0aG9zdGJ5bmFtZV9yPSJwcm90b19kZWNsYXJlZCIKKyAgICBdLFsKKyAgICAgIEFDX0VHUkVQX0NQUChbZ2V0aG9zdGJ5bmFtZV9yXSxbCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorICAgICAgXSxbCisgICAgICAgIHRtcF9nZXRob3N0YnluYW1lX3I9InByb3RvX25lZWRzX3JlZW50cmFudCIKKyAgICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisgICAgICBdKQorICAgIF0pCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX0dFVFBST1RPQllOQU1FX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1JFRU5UUkFOVCBkZWZpbml0aW9uCitkbmwgbWFrZXMgZnVuY3Rpb24gZ2V0cHJvdG9ieW5hbWVfciBjb21waWxlciB2aXNpYmxlLgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9HRVRQUk9UT0JZTkFNRV9SXSwgWworICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtnZXRwcm90b2J5bmFtZV9yXSkKKyAgXSxbCisgICAgdG1wX2dldHByb3RvYnluYW1lX3I9InllcyIKKyAgXSxbCisgICAgdG1wX2dldHByb3RvYnluYW1lX3I9Im5vIgorICBdKQorICBpZiB0ZXN0ICIkdG1wX2dldHByb3RvYnluYW1lX3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19FR1JFUF9DUFAoW2dldHByb3RvYnluYW1lX3JdLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorICAgIF0sWworICAgICAgdG1wX2dldHByb3RvYnluYW1lX3I9InByb3RvX2RlY2xhcmVkIgorICAgIF0sWworICAgICAgQUNfRUdSRVBfQ1BQKFtnZXRwcm90b2J5bmFtZV9yXSxbCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorICAgICAgXSxbCisgICAgICAgIHRtcF9nZXRwcm90b2J5bmFtZV9yPSJwcm90b19uZWVkc19yZWVudHJhbnQiCisgICAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorICAgICAgXSkKKyAgICBdKQorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9HRVRTRVJWQllQT1JUX1IKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1JFRU5UUkFOVCBkZWZpbml0aW9uCitkbmwgbWFrZXMgZnVuY3Rpb24gZ2V0c2VydmJ5cG9ydF9yIGNvbXBpbGVyIHZpc2libGUuCisKK0FDX0RFRlVOKFtDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX0dFVFNFUlZCWVBPUlRfUl0sIFsKKyAgQUNfTElOS19JRkVMU0UoWworICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbZ2V0c2VydmJ5cG9ydF9yXSkKKyAgXSxbCisgICAgdG1wX2dldHNlcnZieXBvcnRfcj0ieWVzIgorICBdLFsKKyAgICB0bXBfZ2V0c2VydmJ5cG9ydF9yPSJubyIKKyAgXSkKKyAgaWYgdGVzdCAiJHRtcF9nZXRzZXJ2Ynlwb3J0X3IiID0gInllcyI7IHRoZW4KKyAgICBBQ19FR1JFUF9DUFAoW2dldHNlcnZieXBvcnRfcl0sWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisgICAgXSxbCisgICAgICB0bXBfZ2V0c2VydmJ5cG9ydF9yPSJwcm90b19kZWNsYXJlZCIKKyAgICBdLFsKKyAgICAgIEFDX0VHUkVQX0NQUChbZ2V0c2VydmJ5cG9ydF9yXSxbCisjZGVmaW5lIF9SRUVOVFJBTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorICAgICAgXSxbCisgICAgICAgIHRtcF9nZXRzZXJ2Ynlwb3J0X3I9InByb3RvX25lZWRzX3JlZW50cmFudCIKKyAgICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJ5ZXMiCisgICAgICBdKQorICAgIF0pCisgIGZpCitdKQorCisKK2RubCBDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX0ZVTkNUSU9OU19SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrcyBpZiB0aGUgcHJlcHJvY2Vzc29yIF9SRUVOVFJBTlQgZGVmaW5pdGlvbgorZG5sIG1ha2VzIHNldmVyYWwgX3IgZnVuY3Rpb25zIGNvbXBpbGVyIHZpc2libGUuCitkbmwgSW50ZXJuYWwgbWFjcm8gZm9yIENVUkxfQ09ORklHVVJFX1JFRU5UUkFOVC4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfRlVOQ1RJT05TX1JdLCBbCisgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorICAgIENVUkxfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfR01USU1FX1IKKyAgZmkKKyAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisgICAgQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9MT0NBTFRJTUVfUgorICBmaQorICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKyAgICBDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX1NUUkVSUk9SX1IKKyAgZmkKKyAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisgICAgQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9TVFJUT0tfUgorICBmaQorICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKyAgICBDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX0lORVRfTlRPQV9SCisgIGZpCisgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorICAgIENVUkxfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfR0VUSE9TVEJZQUREUl9SCisgIGZpCisgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorICAgIENVUkxfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfR0VUSE9TVEJZTkFNRV9SCisgIGZpCisgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorICAgIENVUkxfQ0hFQ0tfTkVFRF9SRUVOVFJBTlRfR0VUUFJPVE9CWU5BTUVfUgorICBmaQorICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJubyI7IHRoZW4KKyAgICBDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX0dFVFNFUlZCWVBPUlRfUgorICBmaQorXSkKKworCitkbmwgQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9TWVNURU0KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1JFRU5UUkFOVCBkZWZpbml0aW9uCitkbmwgbXVzdCBiZSB1bmNvbmRpdGlvbmFsbHkgZG9uZSBmb3IgdGhpcyBwbGF0Zm9ybS4KK2RubCBJbnRlcm5hbCBtYWNybyBmb3IgQ1VSTF9DT05GSUdVUkVfUkVFTlRSQU5ULgorCitBQ19ERUZVTihbQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9TWVNURU1dLCBbCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBzb2xhcmlzKikKKyAgICAgIHRtcF9uZWVkX3JlZW50cmFudD0ieWVzIgorICAgICAgOzsKKyAgICAqKQorICAgICAgdG1wX25lZWRfcmVlbnRyYW50PSJubyIKKyAgICAgIDs7CisgIGVzYWMKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfTkVFRF9USFJFQURfU0FGRV9TWVNURU0KK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgQ2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1RIUkVBRF9TQUZFIGRlZmluaXRpb24KK2RubCBtdXN0IGJlIHVuY29uZGl0aW9uYWxseSBkb25lIGZvciB0aGlzIHBsYXRmb3JtLgorZG5sIEludGVybmFsIG1hY3JvIGZvciBDVVJMX0NPTkZJR1VSRV9USFJFQURfU0FGRS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfTkVFRF9USFJFQURfU0FGRV9TWVNURU1dLCBbCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbWzEyM11dLiogfCBhaXg0LltbMDEyXV0uKikKKyAgICAgIGRubCBhaXggNC4yIGFuZCBvbGRlcgorICAgICAgdG1wX25lZWRfdGhyZWFkX3NhZmU9Im5vIgorICAgICAgOzsKKyAgICBhaXgqKQorICAgICAgZG5sIEFJWCA0LjMgYW5kIG5ld2VyCisgICAgICB0bXBfbmVlZF90aHJlYWRfc2FmZT0ieWVzIgorICAgICAgOzsKKyAgICAqKQorICAgICAgdG1wX25lZWRfdGhyZWFkX3NhZmU9Im5vIgorICAgICAgOzsKKyAgZXNhYworXSkKKworCitkbmwgQ1VSTF9DT05GSUdVUkVfRlJPTV9OT1dfT05fV0lUSF9SRUVOVFJBTlQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGhpcyBtYWNybyBlbnN1cmVzIHRoYXQgY29uZmlndXJhdGlvbiB0ZXN0cyBkb25lCitkbmwgYWZ0ZXIgdGhpcyB3aWxsIGV4ZWN1dGUgd2l0aCBwcmVwcm9jZXNzb3Igc3ltYm9sCitkbmwgX1JFRU5UUkFOVCBkZWZpbmVkLiBUaGlzIG1hY3JvIGFsc28gZW5zdXJlcyB0aGF0CitkbmwgdGhlIGdlbmVyYXRlZCBjb25maWcgZmlsZSBkZWZpbmVzIE5FRURfUkVFTlRSQU5UCitkbmwgYW5kIHRoYXQgaW4gdHVybiBzZXR1cC5oIHdpbGwgZGVmaW5lIF9SRUVOVFJBTlQuCitkbmwgSW50ZXJuYWwgbWFjcm8gZm9yIENVUkxfQ09ORklHVVJFX1JFRU5UUkFOVC4KKworQUNfREVGVU4oW0NVUkxfQ09ORklHVVJFX0ZST01fTk9XX09OX1dJVEhfUkVFTlRSQU5UXSwgWworQUNfREVGSU5FKE5FRURfUkVFTlRSQU5ULCAxLAorICBbRGVmaW5lIHRvIDEgaWYgX1JFRU5UUkFOVCBwcmVwcm9jZXNzb3Igc3ltYm9sIG11c3QgYmUgZGVmaW5lZC5dKQorY2F0ID4+Y29uZmRlZnMuaCA8PF9FT0YKKyNpZm5kZWYgX1JFRU5UUkFOVAorIyAgZGVmaW5lIF9SRUVOVFJBTlQKKyNlbmRpZgorX0VPRgorXSkKKworCitkbmwgQ1VSTF9DT05GSUdVUkVfRlJPTV9OT1dfT05fV0lUSF9USFJFQURfU0FGRQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUaGlzIG1hY3JvIGVuc3VyZXMgdGhhdCBjb25maWd1cmF0aW9uIHRlc3RzIGRvbmUKK2RubCBhZnRlciB0aGlzIHdpbGwgZXhlY3V0ZSB3aXRoIHByZXByb2Nlc3NvciBzeW1ib2wKK2RubCBfVEhSRUFEX1NBRkUgZGVmaW5lZC4gVGhpcyBtYWNybyBhbHNvIGVuc3VyZXMgdGhhdAorZG5sIHRoZSBnZW5lcmF0ZWQgY29uZmlnIGZpbGUgZGVmaW5lcyBORUVEX1RIUkVBRF9TQUZFCitkbmwgYW5kIHRoYXQgaW4gdHVybiBzZXR1cC5oIHdpbGwgZGVmaW5lIF9USFJFQURfU0FGRS4KK2RubCBJbnRlcm5hbCBtYWNybyBmb3IgQ1VSTF9DT05GSUdVUkVfVEhSRUFEX1NBRkUuCisKK0FDX0RFRlVOKFtDVVJMX0NPTkZJR1VSRV9GUk9NX05PV19PTl9XSVRIX1RIUkVBRF9TQUZFXSwgWworQUNfREVGSU5FKE5FRURfVEhSRUFEX1NBRkUsIDEsCisgIFtEZWZpbmUgdG8gMSBpZiBfVEhSRUFEX1NBRkUgcHJlcHJvY2Vzc29yIHN5bWJvbCBtdXN0IGJlIGRlZmluZWQuXSkKK2NhdCA+PmNvbmZkZWZzLmggPDxfRU9GCisjaWZuZGVmIF9USFJFQURfU0FGRQorIyAgZGVmaW5lIF9USFJFQURfU0FGRQorI2VuZGlmCitfRU9GCitdKQorCisKK2RubCBDVVJMX0NPTkZJR1VSRV9SRUVOVFJBTlQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVGhpcyBmaXJzdCBjaGVja3MgaWYgdGhlIHByZXByb2Nlc3NvciBfUkVFTlRSQU5UCitkbmwgc3ltYm9sIGlzIGFscmVhZHkgZGVmaW5lZC4gSWYgaXQgaXNuJ3QgY3VycmVudGx5CitkbmwgZGVmaW5lZCBhIHNldCBvZiBjaGVja3MgYXJlIHBlcmZvcm1lZCB0byB2ZXJpZnkKK2RubCBpZiBpdHMgZGVmaW5pdGlvbiBpcyByZXF1aXJlZCB0byBtYWtlIHZpc2libGUgdG8KK2RubCB0aGUgY29tcGlsZXIgYSBzZXQgb2YgKl9yIGZ1bmN0aW9ucy4gRmluYWxseSwgaWYKK2RubCBfUkVFTlRSQU5UIGlzIGFscmVhZHkgZGVmaW5lZCBvciBuZWVkZWQgaXQgdGFrZXMKK2RubCBjYXJlIG9mIG1ha2luZyBhZGp1c3RtZW50cyBuZWNlc3NhcnkgdG8gZW5zdXJlCitkbmwgdGhhdCBpdCBpcyBkZWZpbmVkIGVxdWFsbHkgZm9yIGZ1cnRoZXIgY29uZmlndXJlCitkbmwgdGVzdHMgYW5kIGdlbmVyYXRlZCBjb25maWcgZmlsZS4KKworQUNfREVGVU4oW0NVUkxfQ09ORklHVVJFX1JFRU5UUkFOVF0sIFsKKyAgQUNfUFJFUkVRKFsyLjUwXSlkbmwKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIF9SRUVOVFJBTlQgaXMgYWxyZWFkeSBkZWZpbmVkXSkKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgIF1dLFtbCisjaWZkZWYgX1JFRU5UUkFOVAorICAgICAgaW50IGR1bW15PTE7CisjZWxzZQorICAgICAgZm9yY2UgY29tcGlsYXRpb24gZXJyb3IKKyNlbmRpZgorICAgIF1dKQorICBdLFsKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIHRtcF9yZWVudHJhbnRfaW5pdGlhbGx5X2RlZmluZWQ9InllcyIKKyAgXSxbCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIHRtcF9yZWVudHJhbnRfaW5pdGlhbGx5X2RlZmluZWQ9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0bXBfcmVlbnRyYW50X2luaXRpYWxseV9kZWZpbmVkIiA9ICJubyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIF9SRUVOVFJBTlQgaXMgYWN0dWFsbHkgbmVlZGVkXSkKKyAgICBDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX1NZU1RFTQorICAgIGlmIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gIm5vIjsgdGhlbgorICAgICAgQ1VSTF9DSEVDS19ORUVEX1JFRU5UUkFOVF9FUlJOTworICAgIGZpCisgICAgaWYgdGVzdCAiJHRtcF9uZWVkX3JlZW50cmFudCIgPSAibm8iOyB0aGVuCisgICAgICBDVVJMX0NIRUNLX05FRURfUkVFTlRSQU5UX0ZVTkNUSU9OU19SCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkdG1wX25lZWRfcmVlbnRyYW50IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICBmaQorICAjCisgIEFDX01TR19DSEVDS0lORyhbaWYgX1JFRU5UUkFOVCBpcyBvbndhcmRzIGRlZmluZWRdKQorICBpZiB0ZXN0ICIkdG1wX3JlZW50cmFudF9pbml0aWFsbHlfZGVmaW5lZCIgPSAieWVzIiB8fAorICAgIHRlc3QgIiR0bXBfbmVlZF9yZWVudHJhbnQiID0gInllcyI7IHRoZW4KKyAgICBDVVJMX0NPTkZJR1VSRV9GUk9NX05PV19PTl9XSVRIX1JFRU5UUkFOVAorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIGZpCisgICMKK10pCisKKworZG5sIENVUkxfQ09ORklHVVJFX1RIUkVBRF9TQUZFCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFRoaXMgZmlyc3QgY2hlY2tzIGlmIHRoZSBwcmVwcm9jZXNzb3IgX1RIUkVBRF9TQUZFCitkbmwgc3ltYm9sIGlzIGFscmVhZHkgZGVmaW5lZC4gSWYgaXQgaXNuJ3QgY3VycmVudGx5CitkbmwgZGVmaW5lZCBhIHNldCBvZiBjaGVja3MgYXJlIHBlcmZvcm1lZCB0byB2ZXJpZnkKK2RubCBpZiBpdHMgZGVmaW5pdGlvbiBpcyByZXF1aXJlZC4gRmluYWxseSwgaWYKK2RubCBfVEhSRUFEX1NBRkUgaXMgYWxyZWFkeSBkZWZpbmVkIG9yIG5lZWRlZCBpdCB0YWtlcworZG5sIGNhcmUgb2YgbWFraW5nIGFkanVzdG1lbnRzIG5lY2Vzc2FyeSB0byBlbnN1cmUKK2RubCB0aGF0IGl0IGlzIGRlZmluZWQgZXF1YWxseSBmb3IgZnVydGhlciBjb25maWd1cmUKK2RubCB0ZXN0cyBhbmQgZ2VuZXJhdGVkIGNvbmZpZyBmaWxlLgorCitBQ19ERUZVTihbQ1VSTF9DT05GSUdVUkVfVEhSRUFEX1NBRkVdLCBbCisgIEFDX1BSRVJFUShbMi41MF0pZG5sCisgICMKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBfVEhSRUFEX1NBRkUgaXMgYWxyZWFkeSBkZWZpbmVkXSkKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbWworICAgIF1dLFtbCisjaWZkZWYgX1RIUkVBRF9TQUZFCisgICAgICBpbnQgZHVtbXk9MTsKKyNlbHNlCisgICAgICBmb3JjZSBjb21waWxhdGlvbiBlcnJvcgorI2VuZGlmCisgICAgXV0pCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgdG1wX3RocmVhZF9zYWZlX2luaXRpYWxseV9kZWZpbmVkPSJ5ZXMiCisgIF0sWworICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICB0bXBfdGhyZWFkX3NhZmVfaW5pdGlhbGx5X2RlZmluZWQ9Im5vIgorICBdKQorICAjCisgIGlmIHRlc3QgIiR0bXBfdGhyZWFkX3NhZmVfaW5pdGlhbGx5X2RlZmluZWQiID0gIm5vIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgX1RIUkVBRF9TQUZFIGlzIGFjdHVhbGx5IG5lZWRlZF0pCisgICAgQ1VSTF9DSEVDS19ORUVEX1RIUkVBRF9TQUZFX1NZU1RFTQorICAgIGlmIHRlc3QgIiR0bXBfbmVlZF90aHJlYWRfc2FmZSIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZmkKKyAgZmkKKyAgIworICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIF9USFJFQURfU0FGRSBpcyBvbndhcmRzIGRlZmluZWRdKQorICBpZiB0ZXN0ICIkdG1wX3RocmVhZF9zYWZlX2luaXRpYWxseV9kZWZpbmVkIiA9ICJ5ZXMiIHx8CisgICAgdGVzdCAiJHRtcF9uZWVkX3RocmVhZF9zYWZlIiA9ICJ5ZXMiOyB0aGVuCisgICAgQ1VSTF9DT05GSUdVUkVfRlJPTV9OT1dfT05fV0lUSF9USFJFQURfU0FGRQorICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgIGZpCisgICMKK10pCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL200L2N1cmwtc3lzdGVtLm00IGIvY3VybC03LjI1LjAvbTQvY3VybC1zeXN0ZW0ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzZTlmOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL200L2N1cmwtc3lzdGVtLm00CkBAIC0wLDAgKzEsODggQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIyBGaWxlIHZlcnNpb24gZm9yICdhY2xvY2FsJyB1c2UuIEtlZXAgaXQgYSBzaW5nbGUgbnVtYmVyLgorIyBzZXJpYWwgMworCisKK2RubCBDVVJMX0NIRUNLX1BBVEhfU0VQQVJBVE9SCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIENoZWNrIGFuZCBjb21wdXRlIHRoZSBwYXRoIHNlcGFyYXRvciBmb3IgdXMuIFRoaXMKK2RubCBwYXRoIHNlcGFyYXRvciBpcyB0aGUgc3ltYm9sIHVzZWQgdG8gZGlmZXJlbnRpYXRlCitkbmwgb3Igc2VwYXJhdGUgcGF0aHMgaW5zaWRlIHRoZSBQQVRIIGVudmlyb25tZW50IHZhci4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfUEFUSF9TRVBBUkFUT1JdLCBbCisgIGlmIHRlc3QgLXogIiRjdXJsX2N2X1BBVEhfU0VQQVJBVE9SIjsgdGhlbgorICAgIGlmIHRlc3QgLXogIiRQQVRIIjsgdGhlbgorICAgICAgQUNfTVNHX0VSUk9SKFtQQVRIIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IFBBVEggYmVpbmcgc2V0Ll0pCisgICAgZmkKKyAgICBkbmwgRGlyZWN0b3J5IGNvdW50IGluIFBBVEggd2hlbiB1c2luZyBhIGNvbG9uIHNlcGFyYXRvci4KKyAgICB0c3RfZGlyc19jb2w9MAorICAgIHRzdF9zYXZlX0lGUz0kSUZTOyBJRlM9JzonCisgICAgZm9yIHRzdF9kaXIgaW4gJFBBVEg7IGRvCisgICAgICBJRlM9JHRzdF9zYXZlX0lGUworICAgICAgdGVzdCAtZCAiJHRzdF9kaXIiICYmIHRzdF9kaXJzX2NvbD1gZXhwciAkdHN0X2RpcnNfY29sICsgMWAKKyAgICBkb25lCisgICAgSUZTPSR0c3Rfc2F2ZV9JRlMKKyAgICBkbmwgRGlyZWN0b3J5IGNvdW50IGluIFBBVEggd2hlbiB1c2luZyBhIHNlbWljb2xvbiBzZXBhcmF0b3IuCisgICAgdHN0X2RpcnNfc2VtPTAKKyAgICB0c3Rfc2F2ZV9JRlM9JElGUzsgSUZTPSc7JworICAgIGZvciB0c3RfZGlyIGluICRQQVRIOyBkbworICAgICAgSUZTPSR0c3Rfc2F2ZV9JRlMKKyAgICAgIHRlc3QgLWQgIiR0c3RfZGlyIiAmJiB0c3RfZGlyc19zZW09YGV4cHIgJHRzdF9kaXJzX3NlbSArIDFgCisgICAgZG9uZQorICAgIElGUz0kdHN0X3NhdmVfSUZTCisgICAgaWYgdGVzdCAkdHN0X2RpcnNfc2VtIC1lcSAkdHN0X2RpcnNfY29sOyB0aGVuCisgICAgICBkbmwgV2hlbiBib3RoIGNvdW50aW5nIG1ldGhvZHMgZ2l2ZSB0aGUgc2FtZSByZXN1bHQgd2UgZG8gbm90IHdhbnQgdG8KKyAgICAgIGRubCBjaG9zZSBvbmUgb3ZlciB0aGUgb3RoZXIsIGFuZCBjb25zaWRlciBhdXRvLWRldGVjdGlvbiBub3QgcG9zc2libGUuCisgICAgICBpZiB0ZXN0IC16ICIkUEFUSF9TRVBBUkFUT1IiOyB0aGVuCisgICAgICAgIGRubCBTdG9wIGRlYWQgdW50aWwgdXNlciBwcm92aWRlcyBQQVRIX1NFUEFSQVRPUiBkZWZpbml0aW9uLgorICAgICAgICBBQ19NU0dfRVJST1IoW1BBVEhfU0VQQVJBVE9SIG5vdCBzZXQuIENhbm5vdCBjb250aW51ZSB3aXRob3V0IGl0Ll0pCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGRubCBTZXBhcmF0b3Igd2l0aCB0aGUgZ3JlYXRlciBkaXJlY3RvcnkgY291bnQgaXMgdGhlIGF1dG8tZGV0ZWN0ZWQgb25lLgorICAgICAgaWYgdGVzdCAkdHN0X2RpcnNfc2VtIC1ndCAkdHN0X2RpcnNfY29sOyB0aGVuCisgICAgICAgIHRzdF9hdXRvX3NlcGFyYXRvcj0nOycKKyAgICAgIGVsc2UKKyAgICAgICAgdHN0X2F1dG9fc2VwYXJhdG9yPSc6JworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLXogIiRQQVRIX1NFUEFSQVRPUiI7IHRoZW4KKyAgICAgICAgZG5sIFNpbXBseSB1c2UgdGhlIGF1dG8tZGV0ZWN0ZWQgb25lIHdoZW4gbm90IGFscmVhZHkgc2V0LgorICAgICAgICBQQVRIX1NFUEFSQVRPUj0iJHRzdF9hdXRvX3NlcGFyYXRvciIKKyAgICAgIGZpCisgICAgZmkKKyAgICBjdXJsX2N2X1BBVEhfU0VQQVJBVE9SPSIkUEFUSF9TRVBBUkFUT1IiCisgIGZpCisgIEFDX1NVQlNUKFtQQVRIX1NFUEFSQVRPUl0pCisgIEFDX1NVQlNUKFtQQVRIXSkKK10pCisKKworZG5sIENVUkxfQ0hFQ0tfUEFUSF9TRVBBUkFUT1JfUkVRVUlSRUQKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgVXNlIHRoaXMgdG8gZW5zdXJlIHRoYXQgdGhlIHBhdGggc2VwYXJhdG9yIGNoZWNrCitkbmwgbWFjcm8gaXMgb25seSBleHBhbmRlZCBhbmQgaW5jbHVkZWQgb25jZS4KKworQUNfREVGVU4oW0NVUkxfQ0hFQ0tfUEFUSF9TRVBBUkFUT1JfUkVRVUlSRURdLCBbCisgIEFDX1JFUVVJUkUoW0NVUkxfQ0hFQ0tfUEFUSF9TRVBBUkFUT1JdKWRubAorXSkKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbTQvbGlidG9vbC5tNCBiL2N1cmwtNy4yNS4wL200L2xpYnRvb2wubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjN2Y5ZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL200L2xpYnRvb2wubTQKQEAgLTAsMCArMSw4MDAxIEBACisjIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyAgICAgICAgICAgICAgICAgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCittNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyAgICAgICAgICAgICAgICAgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KK10pCisKKyMgc2VyaWFsIDU3IExUX0lOSVQKKworCisjIExUX1BSRVJFUShWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gYW5kIGV4aXQgaWYgdGhpcyBsaWJ0b29sIHZlcnNpb24gaXMgbGVzcyB0aGF0IFZFUlNJT04uCittNF9kZWZ1bihbTFRfUFJFUkVRXSwKK1ttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbTFRfUEFDS0FHRV9WRVJTSU9OXSksIFskMV0pLCAtMSwKKyAgICAgICBbbTRfZGVmYXVsdChbJDNdLAorCQkgICBbbTRfZmF0YWwoW0xpYnRvb2wgdmVyc2lvbiAkMSBvciBoaWdoZXIgaXMgcmVxdWlyZWRdLAorCQkgICAgICAgICAgICAgNjMpXSldLAorICAgICAgIFskMl0pXSkKKworCisjIF9MVF9DSEVDS19CVUlMRERJUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gaWYgdGhlIGFic29sdXRlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycworbTRfZGVmdW4oW19MVF9DSEVDS19CVUlMRERJUl0sCitbY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICBBQ19NU0dfV0FSTihbTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIGBwd2RgXSkgOzsKK2VzYWMKK10pCisKKworIyBMVF9JTklUKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfSU5JVF0sCitbQUNfUFJFUkVRKFsyLjU4XSlkbmwgV2UgdXNlIEFDX0lOQ0xVREVTX0RFRkFVTFQKK0FDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVF9MQU5HXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRETF9JTklUXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19CVUlMRERJUl0pZG5sCisKK2RubCBBdXRvY29uZiBkb2Vzbid0IGNhdGNoIHVuZXhwYW5kZWQgTFRfIG1hY3JvcyBieSBkZWZhdWx0OgorbTRfcGF0dGVybl9mb3JiaWQoW15fP0xUX1tBLVpfXSskXSlkbmwKK200X3BhdHRlcm5fYWxsb3coW14oX0xUX0VPRnxMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XfExUX01VTFRJX01PRFVMRSkkXSlkbmwKK2RubCBhY2xvY2FsIGRvZXNuJ3QgcHVsbCBsdG9wdGlvbnMubTQsIGx0c3VnYXIubTQsIG9yIGx0dmVyc2lvbi5tNAorZG5sIHVubGVzcyB3ZSByZXF1aXJlIGFuIEFDX0RFRlVOZWQgbWFjcm86CitBQ19SRVFVSVJFKFtMVE9QVElPTlNfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVFNVR0FSX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRWRVJTSU9OX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRPQlNPTEVURV9WRVJTSU9OXSlkbmwKK200X3JlcXVpcmUoW19MVF9QUk9HX0xUTUFJTl0pZG5sCisKK19MVF9TSEVMTF9JTklUKFtTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofV0pCisKK2RubCBQYXJzZSBPUFRJT05TCitfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkbHRtYWluIgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCitBQ19TVUJTVChMSUJUT09MKWRubAorCitfTFRfU0VUVVAKKworIyBPbmx5IGV4cGFuZCBvbmNlOgorbTRfZGVmaW5lKFtMVF9JTklUXSkKK10pIyBMVF9JTklUCisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FDX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK0FVX0FMSUFTKFtBTV9QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BST0dfTElCVE9PTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX0xJQlRPT0xdLCBbXSkKKworCisjIF9MVF9DQ19CQVNFTkFNRShDQykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCittNF9kZWZ1bihbX0xUX0NDX0JBU0VOQU1FXSwKK1tmb3IgY2NfdGVtcCBpbiAkMSIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbW1xcL11dY29tcGlsZSB8IGNjYWNoZSB8ICpbW1xcL11dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1tcXC9dXWRpc3RjYyB8IHB1cmlmeSB8ICpbW1xcL11dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKK10pCisKKworIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSXQgaXMgb2theSB0byB1c2UgdGhlc2UgZmlsZSBjb21tYW5kcyBhbmQgYXNzdW1lIHRoZXkgaGF2ZSBiZWVuIHNldAorIyBzZW5zaWJseSBhZnRlciBgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pJy4KK200X2RlZnVuKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSwKK1s6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CitdKSMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworCisKKyMgX0xUX1NFVFVQCisjIC0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9TRVRVUF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK0FDX1JFUVVJUkUoW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSlkbmwKK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSlkbmwKKworX0xUX0RFQ0woW10sIFtQQVRIX1NFUEFSQVRPUl0sIFsxXSwgW1RoZSBQQVRIIHNlcGFyYXRvciBmb3IgdGhlIGJ1aWxkIHN5c3RlbV0pZG5sCitkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF9hbGlhc10sIFswXSwgW1RoZSBob3N0IHN5c3RlbV0pZG5sCitfTFRfREVDTChbXSwgW2hvc3RdLCBbMF0pZG5sCitfTFRfREVDTChbXSwgW2hvc3Rfb3NdLCBbMF0pZG5sCitkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRfYWxpYXNdLCBbMF0sIFtUaGUgYnVpbGQgc3lzdGVtXSlkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRdLCBbMF0pZG5sCitfTFRfREVDTChbXSwgW2J1aWxkX29zXSwgWzBdKWRubAorZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTE5fU10pZG5sCit0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCitfTFRfREVDTChbXSwgW0xOX1NdLCBbMV0sIFtXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzXSlkbmwKK2RubAorQUNfUkVRVUlSRShbTFRfQ01EX01BWF9MRU5dKWRubAorX0xUX0RFQ0woW29iamV4dF0sIFthY19vYmpleHRdLCBbMF0sIFtPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIildKWRubAorX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAorZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX1JFTE9BRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfT0xEX0FSQ0hJVkVdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCittNF9yZXF1aXJlKFtfTFRfV0lUSF9TWVNST09UXSlkbmwKKworX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCitdKQoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCitfTFRfQ0hFQ0tfT0JKRElSCisKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgIENPTExFQ1RfTkFNRVM9CisgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBHbG9iYWwgdmFyaWFibGVzOgorb2ZpbGU9bGlidG9vbAorY2FuX2J1aWxkX3NoYXJlZD15ZXMKKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorCit3aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgorCitvbGRfQ0M9IiRDQyIKK29sZF9DRkxBR1M9IiRDRkxBR1MiCisKKyMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCit0ZXN0IC16ICIkQ0MiICYmIENDPWNjCit0ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKK3Rlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwordGVzdCAteiAiJExEIiAmJiBMRD1sZAordGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KKworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCitjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorZmlsZV9tYWdpYyopCisgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKyAgICBfTFRfUEFUSF9NQUdJQworICBmaQorICA7OworZXNhYworCisjIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAorTFRfU1VQUE9SVEVEX1RBRyhbQ0NdKQorX0xUX0xBTkdfQ19DT05GSUcKK19MVF9MQU5HX0RFRkFVTFRfQ09ORklHCitfTFRfQ09ORklHX0NPTU1BTkRTCitdKSMgX0xUX1NFVFVQCisKKworIyBfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgYSBmZXcgc2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHAgdXMgZG8gcm9idXN0IHF1b3RpbmcuCittNF9kZWZ1bihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAorWyMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KKyMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSdzL1woW1siYCRcXF1dXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtbImBcXF1dXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQorIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgorZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KK2RlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucworbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCitdKQorCisjIF9MVF9QUk9HX0xUTUFJTgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tIGBjb25maWd1cmUnLCBhbmQgYGNvbmZpZy5zdGF0dXMnCisjIG5vdyB0aGF0IHdlIHVzZSBBQ19DT05GSUdfQ09NTUFORFMgdG8gZ2VuZXJhdGUgbGlidG9vbC4gIE5vdGFibHksCisjIGBjb25maWcuc3RhdHVzJyBoYXMgbm8gdmFsdWUgZm9yIGFjX2F1eF9kaXIgdW5sZXNzIHdlIGFyZSB1c2luZyBBdXRvbWFrZSwKKyMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KK200X2RlZnVuKFtfTFRfUFJPR19MVE1BSU5dLAorW200X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2x0bWFpbi5zaF0pXSlkbmwKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQorbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitdKSMgX0xUX1BST0dfTFRNQUlOCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQWNjdW11bGF0ZSBjb2RlIGZvciBjcmVhdGluZyBsaWJ0b29sLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFNvIHRoYXQgd2UgY2FuIHJlY3JlYXRlIGEgZnVsbCBsaWJ0b29sIHNjcmlwdCBpbmNsdWRpbmcgYWRkaXRpb25hbAorIyB0YWdzLCB3ZSBhY2N1bXVsYXRlIHRoZSBjaHVua3Mgb2YgY29kZSB0byBzZW5kIHRvIEFDX0NPTkZJR19DT01NQU5EUworIyBpbiBtYWNyb3MgYW5kIHRoZW4gbWFrZSBhIHNpbmdsZSBjYWxsIGF0IHRoZSBlbmQgdXNpbmcgdGhlIGBsaWJ0b29sJworIyBsYWJlbC4KKworCisjIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFtJTklULUNPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBJTklULUNPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF9JTklUXSwKK1ttNF9pZnZhbChbJDFdLAorICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdKQorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MKFtDT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBDT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSkKKworCisjIF9MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbQ09NTUFORFNdLCBbSU5JVF9DT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTXSwKK1tfTFRfQ09ORklHX0xJQlRPT0woWyQxXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFskMl0pCitdKQorCisKKyMgX0xUX0ZPUk1BVF9DT01NRU5UKFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGxlYWRpbmcgY29tbWVudCBtYXJrcyB0byB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLCBhbmQgYSB0cmFpbGluZworIyBmdWxsLXN0b3AgdG8gdGhlIHdob2xlIGNvbW1lbnQgaWYgb25lIGlzIG5vdCBwcmVzZW50IGFscmVhZHkuCittNF9kZWZpbmUoW19MVF9GT1JNQVRfQ09NTUVOVF0sCitbbTRfaWZ2YWwoWyQxXSwgWworbTRfYnBhdHN1YnN0KFttNF9icGF0c3Vic3QoWyQxXSwgW14gKl0sIFsjIF0pXSwKKyAgICAgICAgICAgICAgW1snYCRcXV0sIFtcXFwmXSldbTRfYm1hdGNoKFskMV0sIFtbIT8uXSRdLCBbXSwgWy5dKQorKV0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZJWE1FOiBFbGltaW5hdGUgVkFSTkFNRSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBfTFRfREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dLCBbSVMtVEFHR0VEP10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ09ORklHTkFNRSBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgdmFsdWUgaW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorIyBWQVJOQU1FIGlzIHRoZSAoYmFzZSkgbmFtZSB1c2VkIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorIyBWQUxVRSBtYXkgYmUgMCwgMSBvciAyIGZvciBhIGNvbXB1dGVkIHF1b3RlIGVzY2FwZWQgdmFsdWUgYmFzZWQgb24KKyMgVkFSTkFNRS4gIEFueSBvdGhlciB2YWx1ZSB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCittNF9kZWZpbmUoW19MVF9ERUNMXSwKK1tsdF9pZl9hcHBlbmRfdW5pcShbbHRfZGVjbF92YXJuYW1lc10sIFskMl0sIFssIF0sCisgICAgW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2xpYnRvb2xfbmFtZV0sCisJW200X2lmdmFsKFskMV0sIFskMV0sIFskMl0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFt2YWx1ZV0sIFskM10pCisgICAgbTRfaWZ2YWwoWyQ0XSwKKwlbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbZGVzY3JpcHRpb25dLCBbJDRdKV0pCisgICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLAorCVt0YWdnZWQ/XSwgW200X2lmdmFsKFskNV0sIFt5ZXNdLCBbbm9dKV0pXSkKK10pCisKKworIyBfTFRfVEFHREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHREVDTF0sIFtfTFRfREVDTChbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbeWVzXSldKQorCisKKyMgbHRfZGVjbF90YWdfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3RhZ192YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW3llc10sICRAKV0pCisKKworIyBfbHRfZGVjbF9maWx0ZXIoU1VCS0VZLCBWQUxVRSwgW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19sdF9kZWNsX2ZpbHRlcl0sCitbbTRfY2FzZShbJCNdLAorICBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKyAgWzFdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCM6ICQxXSldLAorICBbMl0sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgWzNdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFskM10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCAkQCldKVtdZG5sCitdKQorCisKKyMgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9xdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsxXSwgJEApXSkKKworCisjIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9kcXVvdGVfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMl0sICRAKV0pCisKKworIyBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9hc3NlcnQoWyQjIDw9IDJdKWRubAorXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisgICAgbTRfaWZ2YWwoWyQyXSwgW1skMl1dLCBbbTRfZHF1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKV0pLAorICAgIG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9xdW90ZShfTFRfVEFHUykpLCBbIF0pKV0pCittNF9kZWZpbmUoW19sdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCitbbTRfaWZ2YWwoWyQzXSwgW2x0X2NvbWJpbmUoWyQxXSwgWyQyXSwgW19dLCAkMyldKV0pCisKKworIyBsdF9kZWNsX2FsbF92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICAgbTRfaWYoWyQyXSwgW10sCisJICAgbTRfcXVvdGUobHRfZGVjbF92YXJuYW1lcyksCisJbTRfcXVvdGUobTRfc2hpZnQoJEApKSkpW11kbmwKK10pCittNF9kZWZpbmUoW19sdF9kZWNsX2FsbF92YXJuYW1lc10sCitbbHRfam9pbigkQCwgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoWyQxXSwKKwkJCWx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtbLCBdXSwgbTRfc2hpZnQoJEApKSkpZG5sCitdKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShbVkFSTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBRdW90ZSBhIHZhcmlhYmxlIHZhbHVlLCBhbmQgZm9yd2FyZCBpdCB0byBgY29uZmlnLnN0YXR1cycgc28gdGhhdCBpdHMKKyMgZGVjbGFyYXRpb24gdGhlcmUgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGluIGBjb25maWd1cmUnLiAgVkFSTkFNRQorIyBtdXN0IGhhdmUgYSBzaW5nbGUgcXVvdGUgZGVsaW1pdGVkIHZhbHVlIGZvciB0aGlzIHRvIHdvcmsuCittNF9kZWZpbmUoW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkVdLAorWyQxPSdgJEVDSE8gIiRdWyQxIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCddKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXZSBkZWxpbWl0IGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyB3aXRoIHNpbmdsZSBxdW90ZXMsIHNvIHdoZW4KKyMgd2Ugd3JpdGUgdGhlbSB0byBjb25maWcuc3RhdHVzLCB3ZSBoYXZlIHRvIGJlIHN1cmUgdG8gcXVvdGUgYWxsCisjIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMgcHJvcGVybHkuICBJbiBjb25maWd1cmUsIHRoaXMgbWFjcm8gZXhwYW5kcworIyBlYWNoIHZhcmlhYmxlIGRlY2xhcmVkIHdpdGggX0xUX0RFQ0wgKGFuZCBfTFRfVEFHREVDTCkgaW50bzoKKyMKKyMgICAgPHZhcj49J2AkRUNITyAiJDx2YXI+IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK200X2RlZnVuKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX2FsbF92YXJuYW1lcyksCisgICAgW200X24oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR1MKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgY29tbWVudCBhbmQgbGlzdCBvZiB0YWdzIHN1cHBvcnRlZCBieSB0aGUgc2NyaXB0CittNF9kZWZ1bihbX0xUX0xJQlRPT0xfVEFHU10sCitbX0xUX0ZPUk1BVF9DT01NRU5UKFtUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHRdKWRubAorYXZhaWxhYmxlX3RhZ3M9Il9MVF9UQUdTImRubAorXSkKKworCisjIF9MVF9MSUJUT09MX0RFQ0xBUkUoVkFSTkFNRSwgW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4dHJhY3QgdGhlIGRpY3Rpb25hcnkgdmFsdWVzIGZvciBWQVJOQU1FIChvcHRpb25hbGx5IHdpdGggVEFHKSBhbmQKKyMgZXhwYW5kIHRvIGEgY29tbWVudGVkIHNoZWxsIHZhcmlhYmxlIHNldHRpbmc6CisjCisjICAgICMgU29tZSBjb21tZW50IGFib3V0IHdoYXQgVkFSIGlzIGZvci4KKyMgICAgdmlzaWJsZV9uYW1lPSRsdF9pbnRlcm5hbF9uYW1lCittNF9kZWZpbmUoW19MVF9MSUJUT09MX0RFQ0xBUkVdLAorW19MVF9GT1JNQVRfQ09NTUVOVChtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLAorCQkJCQkgICBbZGVzY3JpcHRpb25dKSkpW11kbmwKK200X3B1c2hkZWYoW19saWJ0b29sX25hbWVdLAorICAgIG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFtsaWJ0b29sX25hbWVdKSkpW11kbmwKK200X2Nhc2UobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSkpLAorICAgIFswXSwgW19saWJ0b29sX25hbWU9WyRdJDFdLAorICAgIFsxXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFsyXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFtfbGlidG9vbF9uYW1lPWx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pXSlbXWRubAorbTRfaWZ2YWwoWyQyXSwgW18kMl0pW11tNF9wb3BkZWYoW19saWJ0b29sX25hbWVdKVtdZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBjb21tZW50ZWQgZGVjbGFyYXRpb25zIG9mIG5vbi10YWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzCisjIHN1aXRhYmxlIGZvciBpbnNlcnRpb24gaW4gdGhlIExJQlRPT0wgQ09ORklHIHNlY3Rpb24gb2YgdGhlIGBsaWJ0b29sJworIyBzY3JpcHQuICBUYWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIChldmVuIGZvciB0aGUgTElCVE9PTCBDT05GSUcKKyMgc2VjdGlvbikgYXJlIHByb2R1Y2VkIGJ5IF9MVF9MSUJUT09MX1RBR19WQVJTLgorbTRfZGVmdW4oW19MVF9MSUJUT09MX0NPTkZJR19WQVJTXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwKKyAgICBtNF9xdW90ZShfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbbm9dLCBbXSwgbHRfZGVjbF92YXJuYW1lcykpLAorICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIpXSldKV0pCisKKworIyBfTFRfTElCVE9PTF9UQUdfVkFSUyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX0xJQlRPT0xfVEFHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhciwgWyQxXSldKV0pXSkKKworCisjIF9MVF9UQUdWQVIoVkFSTkFNRSwgW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1RBR1ZBUl0sIFttNF9pZnZhbChbJDJdLCBbJDFfJDJdLCBbJDFdKV0pCisKKworIyBfTFRfQ09ORklHX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VuZCBhY2N1bXVsYXRlZCBvdXRwdXQgdG8gJENPTkZJR19TVEFUVVMuICBUaGFua3MgdG8gdGhlIGxpc3RzIG9mCisjIHZhcmlhYmxlcyBmb3Igc2luZ2xlIGFuZCBkb3VibGUgcXVvdGUgZXNjYXBpbmcgd2Ugc2F2ZWQgZnJvbSBjYWxscworIyB0byBfTFRfREVDTCwgd2UgY2FuIHB1dCBxdW90ZSBlc2NhcGVkIHZhcmlhYmxlcyBkZWNsYXJhdGlvbnMKKyMgaW50byBgY29uZmlnLnN0YXR1cycsIGFuZCB0aGVuIHRoZSBzaGVsbCBjb2RlIHRvIHF1b3RlIGVzY2FwZSB0aGVtIGluCisjIGZvciBsb29wcyBpbiBgY29uZmlnLnN0YXR1cycuICBGaW5hbGx5LCBhbnkgYWRkaXRpb25hbCBjb2RlIGFjY3VtdWxhdGVkCisjIGZyb20gY2FsbHMgdG8gX0xUX0NPTkZJR19MSUJUT09MX0lOSVQgaXMgZXhwYW5kZWQuCittNF9kZWZ1bihbX0xUX0NPTkZJR19DT01NQU5EU10sCitbQUNfUFJPVklERV9JRkVMU0UoW0xUX09VVFBVVF0sCisJZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBoYXMgYmVlbiBwbGFjZWQgaW4gJENPTkZJR19MVCwKKwlkbmwgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdCBhbGwgb3ZlciBhZ2FpbiBpbnRvIGNvbmZpZy5zdGF0dXMsCisJZG5sIHRoZW4gd2Ugd2lsbCBoYXZlIGNvbmZpZy5zdGF0dXMgcnVuICRDT05GSUdfTFQgbGF0ZXIsIHNvIGl0CisJZG5sIG5lZWRzIHRvIGtub3cgd2hhdCBuYW1lIGlzIHN0b3JlZCB0aGVyZToKKyAgICAgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgICAgICBbJFNIRUxMICRDT05GSUdfTFQgfHwgQVNfRVhJVCgxKV0sIFtDT05GSUdfTFQ9JyRDT05GSUdfTFQnXSldLAorICAgIGRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaXMgZGVzdGluZWQgZm9yIGNvbmZpZy5zdGF0dXMsCisgICAgZG5sIGV4cGFuZCB0aGUgYWNjdW11bGF0ZWQgY29tbWFuZHMgYW5kIGluaXQgY29kZSBub3c6CisgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLCBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdKV0pCitdKSNfTFRfQ09ORklHX0NPTU1BTkRTCisKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0sCitbCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKK2RvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSckZGVsYXlfdmFyaWFibGVfc3Vic3QnCitfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJFtdMQorX0xURUNIT19FT0YnCit9CisKKyMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKTsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCitdXSwgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVAorXSkKKworIyBfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChGSUxFLCBbQ09NTUVOVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHZW5lcmF0ZSBhIGNoaWxkIHNjcmlwdCBGSUxFIHdpdGggYWxsIGluaXRpYWxpemF0aW9uIG5lY2Vzc2FyeSB0bworIyByZXVzZSB0aGUgZW52aXJvbm1lbnQgbGVhcm5lZCBieSB0aGUgcGFyZW50IHNjcmlwdCwgYW5kIG1ha2UgdGhlCisjIGZpbGUgZXhlY3V0YWJsZS4gIElmIENPTU1FTlQgaXMgc3VwcGxpZWQsIGl0IGlzIGluc2VydGVkIGFmdGVyIHRoZQorIyBgIyEnIHNlcXVlbmNlIGJ1dCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gdGV4dCBiZWdpbnMuICBBZnRlciB0aGlzCisjIG1hY3JvLCBhZGRpdGlvbmFsIHRleHQgY2FuIGJlIGFwcGVuZGVkIHRvIEZJTEUgdG8gZm9ybSB0aGUgYm9keSBvZgorIyB0aGUgY2hpbGQgc2NyaXB0LiAgVGhlIG1hY3JvIGVuZHMgd2l0aCBub24temVybyBzdGF0dXMgaWYgdGhlCisjIGZpbGUgY291bGQgbm90IGJlIGZ1bGx5IHdyaXR0ZW4gKHN1Y2ggYXMgaWYgdGhlIGRpc2sgaXMgZnVsbCkuCittNF9pZmRlZihbQVNfSU5JVF9HRU5FUkFURURdLAorW200X2RlZnVuKFtfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVF0sW0FTX0lOSVRfR0VORVJBVEVEKCRAKV0pXSwKK1ttNF9kZWZ1bihbX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVRdLAorW200X3JlcXVpcmUoW0FTX1BSRVBBUkVdKV1kbmwKK1ttNF9wdXNoZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXWRubAorW2x0X3dyaXRlX2ZhaWw9MAorY2F0ID4kMSA8PF9BU0VPRiB8fCBsdF93cml0ZV9mYWlsPTEKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorJDIKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitleHBvcnQgU0hFTEwKK19BU0VPRgorY2F0ID4+JDEgPDxcX0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQorQVNfU0hFTExfU0FOSVRJWkUKK19BU19QUkVQQVJFCitleGVjIEFTX01FU1NBR0VfRkQ+JjEKK19BU0VPRgordGVzdCAkbHRfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJDFbXWRubAorbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXSldKSMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQKKworIyBMVF9PVVRQVVQKKyMgLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gYWxsb3dzIGVhcmx5IGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0IChiZWZvcmUKKyMgQUNfT1VUUFVUIGlzIGNhbGxlZCksIGluY2FzZSBpdCBpcyB1c2VkIGluIGNvbmZpZ3VyZSBmb3IgY29tcGlsYXRpb24KKyMgdGVzdHMuCitBQ19ERUZVTihbTFRfT1VUUFVUXSwKK1s6ICR7Q09ORklHX0xUPS4vY29uZmlnLmx0fQorQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJENPTkZJR19MVF0pCitfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChbIiRDT05GSUdfTFQiXSwKK1sjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgYSBsaWJ0b29sIHN0dWIgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLl0pCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKK2x0X2NsX3NpbGVudD1mYWxzZQorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworeworICBlY2hvCisgIEFTX0JPWChbUnVubmluZyAkYXNfbWUuXSkKK30gPiZBU19NRVNTQUdFX0xPR19GRAorCitsdF9jbF9oZWxwPSJcCitcYCRhc19tZScgY3JlYXRlcyBhIGxvY2FsIGxpYnRvb2wgc3R1YiBmcm9tIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sCitmb3IgdXNlIGluIGZ1cnRoZXIgY29uZmlndXJlIHRpbWUgdGVzdHMgYmVmb3JlIHRoZSByZWFsIGxpYnRvb2wgaXMKK2dlbmVyYXRlZC4KKworVXNhZ2U6ICRbMF0gW1tPUFRJT05TXV0KKworICAtaCwgLS1oZWxwICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLXEsIC0tcXVpZXQgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworCitSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uIgorCitsdF9jbF92ZXJzaW9uPSJcCittNF9pZnNldChbQUNfUEFDS0FHRV9OQU1FXSwgW0FDX1BBQ0tBR0VfTkFNRSBdKWNvbmZpZy5sdFtdZG5sCittNF9pZnNldChbQUNfUEFDS0FHRV9WRVJTSU9OXSwgWyBBQ19QQUNLQUdFX1ZFUlNJT05dKQorY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCisKK0NvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLmx0IHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisKK3doaWxlIHRlc3QgJFsjXSAhPSAwCitkbworICBjYXNlICRbMV0gaW4KKyAgICAtLXZlcnNpb24gfCAtLXYqIHwgLVYgKQorICAgICAgZWNobyAiJGx0X2NsX3ZlcnNpb24iOyBleGl0IDAgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgZWNobyAiJGx0X2NsX2hlbHAiOyBleGl0IDAgOzsKKyAgICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKKyAgICAgIGRlYnVnPTogOzsKKyAgICAtLXF1aWV0IHwgLS1xKiB8IC0tc2lsZW50IHwgLS1zKiB8IC1xICkKKyAgICAgIGx0X2NsX3NpbGVudD06IDs7CisKKyAgICAtKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgb3B0aW9uOiAkWzFdCitUcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKworICAgICopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIGFyZ3VtZW50OiAkWzFdCitUcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiAkbHRfY2xfc2lsZW50OyB0aGVuCisgIGV4ZWMgQVNfTUVTU0FHRV9GRD4vZGV2L251bGwKK2ZpCitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8X0xURU9GCitfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVAorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKK0FDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRvZmlsZV0pCitfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFMKK0FTX0VYSVQoMCkKK19MVEVPRgorY2htb2QgK3ggIiRDT05GSUdfTFQiCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYnV0IGNvbmZpZy5sdCBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sCisjIGFwcGVuZGluZyB0byBjb25maWcubG9nLCB3aGljaCBmYWlscyBvbiBET1MsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdAorIyBvcGVuIGJ5IGNvbmZpZ3VyZS4gIEhlcmUgd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLCBlZmZlY3RpdmVseSBjbG9zaW5nCisjIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZCBhcHBlbmRlZCB0byBieSBjb25maWcubHQuCitsdF9jbF9zdWNjZXNzPToKK3Rlc3QgIiRzaWxlbnQiID0geWVzICYmCisgIGx0X2NvbmZpZ19sdF9hcmdzPSIkbHRfY29uZmlnX2x0X2FyZ3MgLS1xdWlldCIKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+L2Rldi9udWxsCiskU0hFTEwgIiRDT05GSUdfTFQiICRsdF9jb25maWdfbHRfYXJncyB8fCBsdF9jbF9zdWNjZXNzPWZhbHNlCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCiskbHRfY2xfc3VjY2VzcyB8fCBBU19FWElUKDEpCitdKSMgTFRfT1VUUFVUCisKKworIyBfTFRfQ09ORklHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tCisjIElmIFRBRyBpcyB0aGUgYnVpbHQtaW4gdGFnLCBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdCB3aXRoIGEKKyMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlIGFkZCBjb2RlCisjIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieSBUQUcgZnJvbSB0aGUKKyMgbWF0Y2hpbmcgdGFnZ2VkIGNvbmZpZyB2YXJzLgorbTRfZGVmdW4oW19MVF9DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFsKKyAgbTRfZGVmaW5lKFtfTFRfVEFHXSwgbTRfaWYoWyQxXSwgW10sIFtDXSwgWyQxXSkpZG5sCisgIG00X2lmKF9MVF9UQUcsIFtDXSwgWworICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisKKyMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCitfTFRfQ09QWUlORworX0xUX0xJQlRPT0xfVEFHUworCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKK19MVF9MSUJUT09MX1RBR19WQVJTCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK19MVF9FT0YKKyAgICA7OworICBlc2FjCisKKyAgX0xUX1BST0dfTFRNQUlOCisKKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIF9MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlMKKworICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCitdLAorW2NhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKKworZG5sIFVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byB1c2UgJDEgaGVyZSwgc2luY2UgX0xUX1RBRyBpcyBub3QgZXhwYW5kZWQKK2RubCBpbiBhIGNvbW1lbnQgKGllIGFmdGVyIGEgIykuCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICQxCitfTFRfTElCVE9PTF9UQUdfVkFSUyhfTFRfVEFHKQorIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJDEKK19MVF9FT0YKK10pZG5sIC9tNF9pZgorXSwKK1ttNF9pZihbJDFdLCBbXSwgWworICAgIFBBQ0tBR0U9JyRQQUNLQUdFJworICAgIFZFUlNJT049JyRWRVJTSU9OJworICAgIFRJTUVTVEFNUD0nJFRJTUVTVEFNUCcKKyAgICBSTT0nJFJNJworICAgIG9maWxlPSckb2ZpbGUnXSwgW10pCitdKWRubCAvX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTCitdKSMgX0xUX0NPTkZJRworCisKKyMgTFRfU1VQUE9SVEVEX1RBRyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmFjZSB0aGlzIG1hY3JvIHRvIGRpc2NvdmVyIHdoYXQgdGFncyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBsaWJ0b29sCisjIC0tdGFnIG9wdGlvbiwgdXNpbmc6CisjICAgIGF1dG9jb25mIC0tdHJhY2UgJ0xUX1NVUFBPUlRFRF9UQUc6JDEnCitBQ19ERUZVTihbTFRfU1VQUE9SVEVEX1RBR10sIFtdKQorCisKKyMgQyBzdXBwb3J0IGlzIGJ1aWx0LWluIGZvciBub3cKK200X2RlZmluZShbX0xUX0xBTkdfQ19lbmFibGVkXSwgW10pCittNF9kZWZpbmUoW19MVF9UQUdTXSwgW10pCisKKworIyBMVF9MQU5HKExBTkcpCisjIC0tLS0tLS0tLS0tLS0KKyMgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQuCitBQ19ERUZVTihbTFRfTEFOR10sCitbQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAorbTRfY2FzZShbJDFdLAorICBbQ10sCQkJW19MVF9MQU5HKEMpXSwKKyAgW0MrK10sCQlbX0xUX0xBTkcoQ1hYKV0sCisgIFtHb10sCQkJW19MVF9MQU5HKEdPKV0sCisgIFtKYXZhXSwJCVtfTFRfTEFORyhHQ0opXSwKKyAgW0ZvcnRyYW4gNzddLAkJW19MVF9MQU5HKEY3NyldLAorICBbRm9ydHJhbl0sCQlbX0xUX0xBTkcoRkMpXSwKKyAgW1dpbmRvd3MgUmVzb3VyY2VdLAlbX0xUX0xBTkcoUkMpXSwKKyAgW200X2lmZGVmKFtfTFRfTEFOR19dJDFbX0NPTkZJR10sCisgICAgW19MVF9MQU5HKCQxKV0sCisgICAgW200X2ZhdGFsKFskMDogdW5zdXBwb3J0ZWQgbGFuZ3VhZ2U6ICIkMSJdKV0pXSlkbmwKK10pIyBMVF9MQU5HCisKKworIyBfTFRfTEFORyhMQU5HTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0xBTkddLAorW200X2lmZGVmKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSwKKyAgW0xUX1NVUFBPUlRFRF9UQUcoWyQxXSlkbmwKKyAgbTRfYXBwZW5kKFtfTFRfVEFHU10sIFskMSBdKWRubAorICBtNF9kZWZpbmUoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdKWRubAorICBfTFRfTEFOR18kMV9DT05GSUcoJDEpXSlkbmwKK10pIyBfTFRfTEFORworCisKK200X2lmbmRlZihbQUNfUFJPR19HT10sIFsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCisjICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19HTy4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgICMKKyMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIworIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK200X2RlZnVuKFtBQ19QUk9HX0dPXSwKK1tBQ19MQU5HX1BVU0goR28pZG5sCitBQ19BUkdfVkFSKFtHT0NdLCAgICAgW0dvIGNvbXBpbGVyIGNvbW1hbmRdKWRubAorQUNfQVJHX1ZBUihbR09GTEFHU10sIFtHbyBjb21waWxlciBmbGFnc10pZG5sCitfQUNfQVJHX1ZBUl9MREZMQUdTKClkbmwKK0FDX0NIRUNLX1RPT0woR09DLCBnY2NnbykKK2lmIHRlc3QgLXogIiRHT0MiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICBBQ19DSEVDS19QUk9HKEdPQywgWyR7YWNfdG9vbF9wcmVmaXh9Z2NjZ29dLCBbJHthY190b29sX3ByZWZpeH1nY2Nnb10pCisgIGZpCitmaQoraWYgdGVzdCAteiAiJEdPQyI7IHRoZW4KKyAgQUNfQ0hFQ0tfUFJPRyhHT0MsIGdjY2dvLCBnY2NnbywgZmFsc2UpCitmaQorXSkjbTRfZGVmdW4KK10pI200X2lmbmRlZgorCisKKyMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR19ERUZBVUxUX0NPTkZJR10sCitbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKKyAgW0xUX0xBTkcoQ1hYKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfQ1hYXSwgZGVmbihbQUNfUFJPR19DWFhdKVtMVF9MQU5HKENYWCldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0Y3N10sCisgIFtMVF9MQU5HKEY3NyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0Y3N10sIGRlZm4oW0FDX1BST0dfRjc3XSlbTFRfTEFORyhGNzcpXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GQ10sCisgIFtMVF9MQU5HKEZDKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfRkNdLCBkZWZuKFtBQ19QUk9HX0ZDXSlbTFRfTEFORyhGQyldKV0pCisKK2RubCBUaGUgY2FsbCB0byBbQV1bTV9QUk9HX0dDSl0gaXMgcXVvdGVkIGxpa2UgdGhhdCB0byBzdG9wIGFjbG9jYWwKK2RubCBwdWxsaW5nIHRoaW5ncyBpbiBuZWVkbGVzc2x5LgorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSwKKyAgW0xUX0xBTkcoR0NKKV0sCisgIFtBQ19QUk9WSURFX0lGRUxTRShbQV1bTV9QUk9HX0dDSl0sCisgICAgW0xUX0xBTkcoR0NKKV0sCisgICAgW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX0dDSl0sCisgICAgICBbTFRfTEFORyhHQ0opXSwKKyAgICAgIFttNF9pZmRlZihbQUNfUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0FDX1BST0dfR0NKXSwgZGVmbihbQUNfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCisgICAgICAgbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0FdW01fUFJPR19HQ0pdLCBkZWZuKFtBXVtNX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQorICAgICAgIG00X2lmZGVmKFtMVF9QUk9HX0dDSl0sCisJW200X2RlZmluZShbTFRfUFJPR19HQ0pdLCBkZWZuKFtMVF9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSldKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR09dLAorICBbTFRfTEFORyhHTyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0dPXSwgZGVmbihbQUNfUFJPR19HT10pW0xUX0xBTkcoR08pXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19SQ10sCisgIFtMVF9MQU5HKFJDKV0sCisgIFttNF9kZWZpbmUoW0xUX1BST0dfUkNdLCBkZWZuKFtMVF9QUk9HX1JDXSlbTFRfTEFORyhSQyldKV0pCitdKSMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKworIyBPYnNvbGV0ZSBtYWNyb3M6CitBVV9ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbTFRfTEFORyhDKyspXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtMVF9MQU5HKEZvcnRyYW4gNzcpXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW0xUX0xBTkcoRm9ydHJhbildKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW0xUX0xBTkcoSmF2YSldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfUkNdLCBbTFRfTEFORyhXaW5kb3dzIFJlc291cmNlKV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9SQ10sIFtdKQorCisKKyMgX0xUX1RBR19DT01QSUxFUgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1RBR19DT01QSUxFUl0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisKK19MVF9ERUNMKFtMVENDXSwgW0NDXSwgWzFdLCBbQSBDIGNvbXBpbGVyXSlkbmwKK19MVF9ERUNMKFtMVENGTEFHU10sIFtDRkxBR1NdLCBbMV0sIFtMVENDIGNvbXBpbGVyIGZsYWdzXSlkbmwKK19MVF9UQUdERUNMKFtDQ10sIFtjb21waWxlcl0sIFsxXSwgW0EgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXJdKWRubAorX0xUX1RBR0RFQ0woW3dpdGhfZ2NjXSwgW0dDQ10sIFswXSwgW0lzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyP10pZG5sCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKK10pIyBfTFRfVEFHX0NPTVBJTEVSCisKKworIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBjb21waWxlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAorIyB0aGUgc2ltcGxlIGNvbXBpbGVyIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKK10pIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKworCisjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgbGlua2VyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgbGluayB0ZXN0IGNvZGUuCittNF9kZWZ1bihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSAtciBjb25mdGVzdCoKK10pIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW5fb25jZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdLFsKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCisgICAgQUNfQ0hFQ0tfVE9PTChbRFNZTVVUSUxdLCBbZHN5bXV0aWxdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbTk1FRElUXSwgW25tZWRpdF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtMSVBPXSwgW2xpcG9dLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbT1RPT0xdLCBbb3Rvb2xdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbT1RPT0w2NF0sIFtvdG9vbDY0XSwgWzpdKQorICAgIF9MVF9ERUNMKFtdLCBbRFNZTVVUSUxdLCBbMV0sCisgICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtOTUVESVRdLCBbMV0sCisgICAgICBbVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbTElQT10sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW09UT09MXSwgWzFdLAorICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW09UT09MNjRdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjRdKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZ10sW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2RdLAorICAgICAgW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KKyAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKwkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKKwkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisJIyBsaW5rIGZsYWdzLgorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCistZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiZBU19NRVNTQUdFX0xPR19GRAorCSRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCisJICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgorICAgICAgICBfbHRfcmVzdWx0PSQ/CisJIyBJZiB0aGVyZSBpcyBhIG5vbi1lbXB0eSBlcnJvciBsb2csIGFuZCAic2luZ2xlX21vZHVsZSIKKwkjIGFwcGVhcnMgaW4gaXQsIGFzc3VtZSB0aGUgZmxhZyBjYXVzZWQgYSBsaW5rZXIgd2FybmluZworICAgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBzaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisJIyBPdGhlcndpc2UsIGlmIHRoZSBvdXRwdXQgd2FzIGNyZWF0ZWQgd2l0aCBhIDAgZXhpdCBjb2RlIGZyb20KKwkjIHRoZSBjb21waWxlciwgaXQgd29ya2VkLgorCWVsaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwOyB0aGVuCisJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorCWZpCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCXJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgIGZpXSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZ10sCisgICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0XSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCisgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXNdLAorCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm9dKQorCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgXSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWddLFtsdF9jdl9sZF9mb3JjZV9sb2FkXSwKKyAgICAgIFtsdF9jdl9sZF9mb3JjZV9sb2FkPW5vCisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBmb3JjZWRfbG9hZGVkKCkgeyByZXR1cm4gMjt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBtYWluKCkgeyByZXR1cm4gMDt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCisgICAgICBfbHRfcmVzdWx0PSQ/CisgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBmb3JjZV9sb2FkIGNvbmZ0ZXN0LmVycjsgdGhlbgorCWNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgJF9sdF9yZXN1bHQgLWVxIDAgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCWx0X2N2X2xkX2ZvcmNlX2xvYWQ9eWVzCisgICAgICBlbHNlCisJY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBmaQorICAgICAgICBybSAtZiBjb25mdGVzdC5lcnIgbGliY29uZnRlc3QuYSBjb25mdGVzdCBjb25mdGVzdC5jCisgICAgICAgIHJtIC1yZiBjb25mdGVzdC5kU1lNCisgICAgXSkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbltbOTFdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJMTAuW1swMTJdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJMTAuKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IiAmJiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAibm8iOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCisKKworIyBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrcyBmb3IgbGlua2VyIGFuZCBjb21waWxlciBmZWF0dXJlcyBvbiBkYXJ3aW4KK200X2RlZnVuKFtfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFU10sCitbCisgIG00X3JlcXVpcmUoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSkKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgaWYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gInllcyI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAke3dsfS1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworICAgIG00X2Nhc2UoWyQxXSwgW0Y3N10sIFtfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllc10sCisgICAgICAgICAgICAgICAgICBbRkNdLCAgW19MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzXSkKKyAgZWxzZQorICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJworICBmaQorICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBtNF9pZihbJDFdLCBbQ1hYXSwKK1sgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgIT0gInllcyI7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBmaQorXSxbXSkKKyAgZWxzZQorICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgIGZpCitdKQorCisjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaW5rcyBhIG1pbmltYWwgcHJvZ3JhbSBhbmQgY2hlY2tzIHRoZSBleGVjdXRhYmxlCisjIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKKyMgdGhpcyBpcyAvdXNyL2xpYjovbGliLCBidXQgd2hlbiB0aGUgTVBJIGNvbXBpbGVycyBhcmUgdXNlZAorIyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbW11bmljYXRpb24gYW5kIE1QSSBsaWJzIGFyZSBpbmNsdWRlZCB0b28uCisjIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCisjIHRvIHRoZSBhaXggbGQgbWFudWFsLgorIyBTdG9yZSB0aGUgcmVzdWx0cyBmcm9tIHRoZSBkaWZmZXJlbnQgY29tcGlsZXJzIGZvciBlYWNoIFRBR05BTUUuCisjIEFsbG93IHRvIG92ZXJyaWRlIHRoZW0gZm9yIGFsbCB0YWdzIHRocm91Z2ggbHRfY3ZfYWl4X2xpYnBhdGguCittNF9kZWZ1bihbX0xUX1NZU19NT0RVTEVfUEFUSF9BSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBBQ19DQUNIRV9WQUwoW19MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pXSwKKyAgW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLFsKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPSdbCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH1dJworICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGZpXSxbXSkKKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPSIvdXNyL2xpYjovbGliIgorICBmaQorICBdKQorICBhaXhfbGlicGF0aD0kX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkKK2ZpCitdKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKworCisjIF9MVF9TSEVMTF9JTklUKEFSRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfU0hFTExfSU5JVF0sCitbbTRfZGl2ZXJ0X3RleHQoW000U0gtSU5JVF0sIFskMQorXSldKSMgX0xUX1NIRUxMX0lOSVQKKworCisKKyMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBob3cgd2UgY2FuIGZha2UgYW4gZWNobyBjb21tYW5kIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaC4KKyMgSW4gcGFydGljdWxhciwgd2l0aCBBdXRvY29uZiAyLjYwIG9yIGxhdGVyIHdlIGFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0CisjIG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB3aGljaCB3aWxsIGZpbmQgYSBzaGVsbCB3aXRoIGEgYnVpbHRpbgorIyBwcmludGYgKHdoaWNoIHdlIGNhbiB1c2UgYXMgYW4gZWNobyBjb21tYW5kKS4KK200X2RlZnVuKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCitbRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKworQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gcHJpbnQgc3RyaW5nc10pCisjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnQgLXIgLS0nCitlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludGYgJXNcbicKK2Vsc2UKKyAgIyBVc2UgdGhpcyBmdW5jdGlvbiBhcyBhIGZhbGxiYWNrIHRoYXQgYWx3YXlzIHdvcmtzLgorICBmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyAgeworICAgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskW10xCitfTFRFQ0hPX0VPRicKKyAgfQorICBFQ0hPPSdmdW5jX2ZhbGxiYWNrX2VjaG8nCitmaQorCisjIGZ1bmNfZWNob19hbGwgYXJnLi4uCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiQqIiAKK30KKworY2FzZSAiJEVDSE8iIGluCisgIHByaW50ZiopIEFDX01TR19SRVNVTFQoW3ByaW50Zl0pIDs7CisgIHByaW50KikgQUNfTVNHX1JFU1VMVChbcHJpbnQgLXJdKSA7OworICAqKSBBQ19NU0dfUkVTVUxUKFtjYXRdKSA7OworZXNhYworCittNF9pZmRlZihbX0FTX0RFVEVDVF9TVUdHRVNURURdLAorW19BU19ERVRFQ1RfU1VHR0VTVEVEKFsKKyAgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9JHtCQVNIX1ZFUlNJT04rc2V0fSIgfHwgKAorICAgIEVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCisgICAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgICAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyAgICBQQVRIPS9lbXB0eSBGUEFUSD0vZW1wdHk7IGV4cG9ydCBQQVRIIEZQQVRICisgICAgdGVzdCAiWGBwcmludGYgJXMgJEVDSE9gIiA9ICJYJEVDSE8iIFwKKyAgICAgIHx8IHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE9gIiA9ICJYJEVDSE8iICldKV0pCisKK19MVF9ERUNMKFtdLCBbU0hFTExdLCBbMV0sIFtTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzXSkKK19MVF9ERUNMKFtdLCBbRUNIT10sIFsxXSwgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzXSkKK10pIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorCisKKyMgX0xUX1dJVEhfU1lTUk9PVAorIyAtLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX1dJVEhfU1lTUk9PVF0sCitbQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3lzcm9vdF0pCitBQ19BUkdfV0lUSChbc3lzcm9vdF0sCitbICAtLXdpdGgtc3lzcm9vdFs9RElSXSBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuXSwKK1tdLCBbd2l0aF9zeXNyb290PW5vXSkKKworZG5sIGx0X3N5c3Jvb3Qgd2lsbCBhbHdheXMgYmUgcGFzc2VkIHVucXVvdGVkLiAgV2UgcXVvdGUgaXQgaGVyZQorZG5sIGluIGNhc2UgdGhlIHVzZXIgcGFzc2VkIGEgZGlyZWN0b3J5IG5hbWUuCitsdF9zeXNyb290PQorY2FzZSAke3dpdGhfc3lzcm9vdH0gaW4gIygKKyB5ZXMpCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorICAgZmkKKyAgIDs7ICMoCisgLyopCisgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICA7OyAjKAorIG5vfCcnKQorICAgOzsgIygKKyAqKQorICAgQUNfTVNHX1JFU1VMVChbJHt3aXRoX3N5c3Jvb3R9XSkKKyAgIEFDX01TR19FUlJPUihbVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLl0pCisgICA7OworZXNhYworCisgQUNfTVNHX1JFU1VMVChbJHtsdF9zeXNyb290Oi1ub31dKQorX0xUX0RFQ0woW10sIFtsdF9zeXNyb290XSwgWzBdLCBbVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBdZG5sCitbZGVwZW5kZW50IGxpYnJhcmllcywgYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC5dKV0pCisKKyMgX0xUX0VOQUJMRV9MT0NLCisjIC0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9FTkFCTEVfTE9DS10sCitbQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidG9vbC1sb2NrXSwKKyAgICBbYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKV0pXSkKK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKKyMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorIyBsaWJ0b29sIHN1cHBvcnQuCitjYXNlICRob3N0IGluCitpYTY0LSotaHB1eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqRUxGLTMyKikKKwlIUFVYX0lBNjRfTU9ERT0iMzIiCisJOzsKKyAgICAgICpFTEYtNjQqKQorCUhQVVhfSUE2NF9NT0RFPSI2NCIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworKi0qLWlyaXg2KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdbI11saW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAorczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAgICozMi1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgorCSAgICA7OworCSAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisJICAgIDs7CisJICBzMzkweC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisJICAgIDs7CisJICBzcGFyYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKwkgICAgOzsKKwkgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCisJICAgIDs7CisJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGZdLCBsdF9jdl9jY19uZWVkc19iZWxmLAorICAgIFtBQ19MQU5HX1BVU0goQykKKyAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLFtbXV0pXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXNdLFtsdF9jdl9jY19uZWVkc19iZWxmPW5vXSkKKyAgICAgQUNfTEFOR19QT1BdKQorICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICBmaQorICA7OworKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikKKyAgICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICBpPzg2LSotc29sYXJpcyopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisgICAgICAgICAgOzsKKyAgICAgICAgc3BhcmMqLSotc29sYXJpcyopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgIyBHTlUgbGQgMi4yMSBpbnRyb2R1Y2VkIF9zb2wyIGVtdWxhdGlvbnMuICBVc2UgdGhlbSBpZiBhdmFpbGFibGUuCisgICAgICAgIGlmICR7TEQtbGR9IC1WIHwgZ3JlcCBfc29sMiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICBMRD0iJHtMRC1sZH1fc29sMiIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICopCisJaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7Citlc2FjCisKK25lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorXSkjIF9MVF9FTkFCTEVfTE9DSworCisKKyMgX0xUX1BST0dfQVIKKyMgLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfUFJPR19BUl0sCitbQUNfQ0hFQ0tfVE9PTFMoQVIsIFthcl0sIGZhbHNlKQorOiAke0FSPWFyfQorOiAke0FSX0ZMQUdTPWNydX0KK19MVF9ERUNMKFtdLCBbQVJdLCBbMV0sIFtUaGUgYXJjaGl2ZXJdKQorX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSwgW0ZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlXSkKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0XSwgW2x0X2N2X2FyX2F0X2ZpbGVdLAorICBbbHRfY3ZfYXJfYXRfZmlsZT1ubworICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sCisgICAgIFtlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiZBU19NRVNTQUdFX0xPR19GRCcKKyAgICAgIEFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQorICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorCUFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQorCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisgICAgIF0pCisgIF0pCisKK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorZWxzZQorICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKK2ZpCitfTFRfREVDTChbXSwgW2FyY2hpdmVyX2xpc3Rfc3BlY10sIFsxXSwKKyAgW0hvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlcl0pCitdKSMgX0xUX1BST0dfQVIKKworCisjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfT0xEX0FSQ0hJVkVdLAorW19MVF9QUk9HX0FSCisKK0FDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQordGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CitfTFRfREVDTChbXSwgW1NUUklQXSwgWzFdLCBbQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW1dKQorCitBQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQordGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKK19MVF9ERUNMKFtdLCBbUkFOTElCXSwgWzFdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgorZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj15ZXMgOzsKKyAgKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8gOzsKK2VzYWMKK19MVF9ERUNMKFtdLCBbb2xkX3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0pCitfTFRfREVDTChbXSwgW29sZF9wb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb25dLCBbMF0sCisgICAgW1doZXRoZXIgdG8gdXNlIGEgbG9jayBmb3Igb2xkIGFyY2hpdmUgZXh0cmFjdGlvbl0pCitdKSMgX0xUX0NNRF9PTERfQVJDSElWRQorCisKKyMgX0xUX0NPTVBJTEVSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKKyMJCVtPVVRQVVQtRklMRV0sIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY29tcGlsZXIgb3B0aW9uIHdvcmtzCitBQ19ERUZVTihbX0xUX0NPTVBJTEVSX09QVElPTl0sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBtNF9pZihbJDRdLCAsIFthY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHRdLCBbYWNfb3V0ZmlsZT0kNF0pCisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiQzIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAkMj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCitdKQorCitpZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgorICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKK2Vsc2UKKyAgICBtNF9pZihbJDZdLCAsIDosIFskNl0pCitmaQorXSkjIF9MVF9DT01QSUxFUl9PUFRJT04KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtfTFRfQ09NUElMRVJfT1BUSU9OXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbXSkKKworCisjIF9MVF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIyAgICAgICAgICAgICAgICAgIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbGlua2VyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW19MVF9MSU5LRVJfT1BUSU9OXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorICBbJDI9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAkMyIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICQyPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICAkMj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorXSkKKworaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KKyAgICBtNF9pZihbJDRdLCAsIDosIFskNF0pCitlbHNlCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZmkKK10pIyBfTFRfTElOS0VSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtfTFRfTElOS0VSX09QVElPTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtdKQorCisKKyMgTFRfQ01EX01BWF9MRU4KKyMtLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9DTURfTUFYX0xFTl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCitBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAorICBpPTAKKyAgdGVzdHN0cmluZz0iQUJDRCIKKworICBjYXNlICRidWlsZF9vcyBpbgorICBtc2Rvc2RqZ3BwKikKKyAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCisgICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgorICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCisgICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAorICAgIDs7CisKKyAgZ251KikKKyAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKKyAgICA7OworCisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKKyAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgorICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCisgICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQorICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KKyAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKKyAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbWludCopCisgICAgIyBPbiBNaU5UIHRoaXMgY2FuIHRha2UgYSBsb25nIHRpbWUgYW5kIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgYW1pZ2FvcyopCisgICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgorICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQorICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgorICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcworICAgIGZpCisgICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgOzsKKworICBpbnRlcml4KikKKyAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4CisgICAgOzsKKworICBvczIqKQorICAgICMgVGhlIHRlc3QgdGFrZXMgYSBsb25nIHRpbWUgb24gT1MvMi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MgorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qW1sJIF1dLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisgICAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgICB3aGlsZSB7IHRlc3QgIlgiYGVudiBlY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKwkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgIGRvCisgICAgICAgIGk9YGV4cHIgJGkgKyAxYAorICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAorICAgICAgdGVzdHN0cmluZz0KKyAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KKyAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCisgICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQoraWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCitlbHNlCisgIEFDX01TR19SRVNVTFQobm9uZSkKK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCitfTFRfREVDTChbXSwgW21heF9jbWRfbGVuXSwgWzBdLAorICAgIFtXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/XSkKK10pIyBMVF9DTURfTUFYX0xFTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW0xUX0NNRF9NQVhfTEVOXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbXSkKKworCisjIF9MVF9IRUFERVJfRExGQ04KKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9IRUFERVJfRExGQ05dLAorW0FDX0NIRUNLX0hFQURFUlMoW2RsZmNuLmhdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSlkbmwKK10pIyBfTFRfSEVBREVSX0RMRkNOCisKKworIyBfTFRfVFJZX0RMT1BFTl9TRUxGIChBQ1RJT04tSUYtVFJVRSwgQUNUSU9OLUlGLVRSVUUtVy1VU0NPUkUsCisjICAgICAgICAgICAgICAgICAgICAgIEFDVElPTi1JRi1GQUxTRSwgQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9UUllfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBbJDRdCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK1sjbGluZSAkTElORU5PICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIEhBVkVfRExGQ05fSAorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBSVExEX0dMT0JBTAorIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAorI2Vsc2UKKyMgIGlmZGVmIERMX0dMT0JBTAorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQorICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisjICBpZmRlZiBSVExEX0xBWlkKKyMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZmRlZiBETF9MQVpZCisjICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFJUTERfTk9XCisjICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworIyAgICAgIGVsc2UKKyMgICAgICAgIGlmZGVmIERMX05PVworIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyNlbmRpZgorCitpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7CisJfQorICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgcmV0dXJuIHN0YXR1czsKK31dCitfTFRfRU9GCisgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgJDEgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgJDIgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSAkMyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICAkMworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKK10pIyBfTFRfVFJZX0RMT1BFTl9TRUxGCisKKworIyBMVF9TWVNfRExPUEVOX1NFTEYKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfU1lTX0RMT1BFTl9TRUxGXSwKK1ttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKK2lmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorICBlbmFibGVfZGxvcGVuPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCitlbHNlCisgIGx0X2N2X2Rsb3Blbj1ubworICBsdF9jdl9kbG9wZW5fbGlicz0KKworICBjYXNlICRob3N0X29zIGluCisgIGJlb3MqKQorICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgOzsKKworICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGRhcndpbiopCisgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CisgICAgQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sWworICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICBdKQorICAgIDs7CisKKyAgKikKKyAgICBBQ19DSEVDS19GVU5DKFtzaGxfbG9hZF0sCisJICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCJdLAorICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW3NobF9sb2FkXSwKKwkgICAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdLAorCVtBQ19DSEVDS19GVU5DKFtkbG9wZW5dLAorCSAgICAgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiJdLAorCSAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKwkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLAorCSAgICBbQUNfQ0hFQ0tfTElCKFtzdmxkXSwgW2Rsb3Blbl0sCisJCSAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIl0sCisJICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKKwkJICAgIFtsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiXSkKKwkgICAgICBdKQorCSAgICBdKQorCSAgXSkKKwldKQorICAgICAgXSkKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgorICAgIGVuYWJsZV9kbG9wZW49eWVzCisgIGVsc2UKKyAgICBlbmFibGVfZGxvcGVuPW5vCisgIGZpCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCisgIGRsb3BlbikKKyAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCisKKyAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKworICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKKwkgIGx0X2N2X2Rsb3Blbl9zZWxmLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8sIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzKQorICAgIF0pCisKKyAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KKyAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKKwkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubAorCSAgX0xUX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vLCAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzKQorICAgICAgXSkKKyAgICBmaQorCisgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbZGxvcGVuX3N1cHBvcnRdLCBbZW5hYmxlX2Rsb3Blbl0sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZF0pCitfTFRfREVDTChbZGxvcGVuX3NlbGZdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl9zdGF0aWNdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpY10sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCitdKSMgTFRfU1lTX0RMT1BFTl9TRUxGCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtMVF9TWVNfRExPUEVOX1NFTEZdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW10pCisKKworIyBfTFRfQ09NUElMRVJfQ19PKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBpZiBvcHRpb25zIC1jIGFuZCAtbyBhcmUgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydGVkIGJ5IGNvbXBpbGVyLgorIyBUaGlzIG1hY3JvIGRvZXMgbm90IGhhcmQgY29kZSB0aGUgY29tcGlsZXIgbGlrZSBBQ19QUk9HX0NDX0NfTy4KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfQ19PXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0XSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKV0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKK10pCitfTFRfVEFHREVDTChbY29tcGlsZXJfY19vXSwgW2x0X2N2X3Byb2dfY29tcGlsZXJfY19vXSwgWzFdLAorCVtEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/XSkKK10pIyBfTFRfQ09NUElMRVJfQ19PCisKKworIyBfTFRfQ09NUElMRVJfRklMRV9MT0NLUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBkbyBoYXJkIGxpbmtzIHRvIGxvY2sgc29tZSBmaWxlcyBpZiBuZWVkZWQKK200X2RlZnVuKFtfTFRfQ09NUElMRVJfRklMRV9MT0NLU10sCitbbTRfcmVxdWlyZShbX0xUX0VOQUJMRV9MT0NLXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorX0xUX0NPTVBJTEVSX0NfTyhbJDFdKQorCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3NdKQorICBoYXJkX2xpbmtzPXllcworICAkUk0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICBBQ19NU0dfUkVTVUxUKFskaGFyZF9saW5rc10pCisgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisgICAgQUNfTVNHX1dBUk4oW2AkQ0MnIGRvZXMgbm90IHN1cHBvcnQgYC1jIC1vJywgc28gYG1ha2UgLWonIG1heSBiZSB1bnNhZmVdKQorICAgIG5lZWRfbG9ja3M9d2FybgorICBmaQorZWxzZQorICBuZWVkX2xvY2tzPW5vCitmaQorX0xUX0RFQ0woW10sIFtuZWVkX2xvY2tzXSwgWzFdLCBbTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/XSkKK10pIyBfTFRfQ09NUElMRVJfRklMRV9MT0NLUworCisKKyMgX0xUX0NIRUNLX09CSkRJUgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NIRUNLX09CSkRJUl0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBvYmpkaXJdLCBbbHRfY3Zfb2JqZGlyXSwKK1tybSAtZiAubGlicyAyPi9kZXYvbnVsbAorbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLmxpYnM7IHRoZW4KKyAgbHRfY3Zfb2JqZGlyPS5saWJzCitlbHNlCisgICMgTVMtRE9TIGRvZXMgbm90IGFsbG93IGZpbGVuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QuCisgIGx0X2N2X29iamRpcj1fbGlicworZmkKK3JtZGlyIC5saWJzIDI+L2Rldi9udWxsXSkKK29iamRpcj0kbHRfY3Zfb2JqZGlyCitfTFRfREVDTChbXSwgW29iamRpcl0sIFswXSwKKyAgICAgICAgIFtUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXNdKWRubAorbTRfcGF0dGVybl9hbGxvdyhbTFRfT0JKRElSXSlkbmwKK0FDX0RFRklORV9VTlFVT1RFRChMVF9PQkpESVIsICIkbHRfY3Zfb2JqZGlyLyIsCisgIFtEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLl0pCitdKSMgX0xUX0NIRUNLX09CSkRJUgorCisKKyMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgaGFyZGNvZGluZyBhdHRyaWJ1dGVzLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSF0sCitbQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zXSkKK19MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9CitpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkiIHx8CisgICB0ZXN0IC1uICIkX0xUX1RBR1ZBUihydW5wYXRoX3ZhciwgJDEpIiB8fAorICAgdGVzdCAiWCRfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpIiA9ICJYeWVzIiA7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpIiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkiICE9IG5vICYmCisgICAgIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKSIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9dW5zdXBwb3J0ZWQKK2ZpCitBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKV0pCisKK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpIiA9IHJlbGluayB8fAorICAgdGVzdCAiJF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpIiA9IHllczsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYWN0aW9uXSwgWzBdLAorICAgIFtIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZV0pCitdKSMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRICisKKworIyBfTFRfQ01EX1NUUklQTElCCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX1NUUklQTElCXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCitzdHJpcGxpYj0KK29sZF9zdHJpcGxpYj0KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlXSkKK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZmkKKyAgICA7OworICAqKQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICA7OworICBlc2FjCitmaQorX0xUX0RFQ0woW10sIFtvbGRfc3RyaXBsaWJdLCBbMV0sIFtDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzdHJpcGxpYl0sIFsxXSkKK10pIyBfTFRfQ01EX1NUUklQTElCCisKKworIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQT1JUTUUgRmlsbCBpbiB5b3VyIGxkLnNvIGNoYXJhY3RlcmlzdGljcworbTRfZGVmdW4oW19MVF9TWVNfRFlOQU1JQ19MSU5LRVJdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzXSkKK200X2lmKFskMV0sCisJW10sIFsKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7CisgICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKKyAgZXNhYworICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9InMsPVwoW1tBLVphLXpdXTpcKSxcMSxnIiA7OworICAgICopIGx0X3NlZF9zdHJpcF9lcT0icyw9LywvLGciIDs7CisgIGVzYWMKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKKyAgY2FzZSAkbHRfc2VhcmNoX3BhdGhfc3BlYyBpbgorICAqXDsqKQorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAncy87LyAvZydgCisgICAgOzsKKyAgKikKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICA7OworICBlc2FjCisgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CisgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgorICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KKyAgbHRfbXVsdGlfb3NfZGlyPWAkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbworICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciIKKyAgICBlbHNlCisgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKKwlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKKyAgICBmaQorICBkb25lCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKK0JFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKKyAgbHRfZm9vPSIiOworICBsdF9jb3VudD0wOworICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgeworICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKKyAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CisgICAgICAgIGx0X2NvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgeworICAgICAgICAgIGx0X2Zvbz0iLyIgJGx0X2kgbHRfZm9vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGx0X2NvdW50LS07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW1tsdF9mb29dXSsrOyB9CisgIGlmIChsdF9mcmVxW1tsdF9mb29dXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQorfSdgCisgICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocworICAjIGZvciB0aGVzZSBob3N0cy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAorICAgICAgJFNFRCAncywvXChbW0EtWmEtel1dOlwpLFwxLGcnYCA7OworICBlc2FjCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKK2Vsc2UKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorZmldKQorbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9Ii5zbyIKK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXhbWzQtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbW14vXV0qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisgIHllcywqKQorICAgICMgZ2NjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87CisgICAgICBmaScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiopCisgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworbTRfaWYoWyQxXSwgW10sWworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSJdKQorICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgZXNhYworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKworICAqLGNsKikKKyAgICAjIE5hdGl2ZSBNU1ZDCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKworICAgIGNhc2UgJGJ1aWxkX29zIGluCisgICAgbWluZ3cqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorICAgICAgbHRfc2F2ZV9pZnM9JElGUworICAgICAgSUZTPSc7JworICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorICAgICAgZG8KKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFtbYS16QS1aXV1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorICAgICAgOzsKKyAgICBjeWd3aW4qKQorICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICA7OworICAgICopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsXTsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICA7OworCisgICopCisgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisgIGVzYWMKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworbTRfaWYoWyQxXSwgW10sWworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFtbMjNdXS4qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMi4qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCisgIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hhaWt1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6CisgIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKKyAgOzsKKworaW50ZXJpeFtbMy05XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCisjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisKKyAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICisgIEFDX0NBQ0hFX1ZBTChbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwKKyAgICBbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgc2F2ZV9saWJkaXI9JGxpYmRpcgorICAgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKVwiOyBcCisJIExERkxBR1M9XCJcJExERkxBR1MgJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpXCIiCisgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAorICAgICAgW0FTX0lGKFsgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsXSwKKwkgW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXNdKV0pCisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorICAgIF0pCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcWyRdMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXFskXTA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKworbmV0YnNkZWxmKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJworICA7OworCitvcGVuYnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7CisgIGVzYWMKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorZmkKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCisKK19MVF9ERUNMKFtdLCBbdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmtdLCBbMV0sCisgICAgW1ZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorICAgIHJlc3RvcmVkIGF0IGxpbmsgdGltZV0pCitfTFRfREVDTChbXSwgW25lZWRfbGliX3ByZWZpeF0sIFswXSwKKyAgICBbRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzP10pCitfTFRfREVDTChbXSwgW25lZWRfdmVyc2lvbl0sIFswXSwgW0RvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/XSkKK19MVF9ERUNMKFtdLCBbdmVyc2lvbl90eXBlXSwgWzBdLCBbTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGVdKQorX0xUX0RFQ0woW10sIFtydW5wYXRoX3Zhcl0sIFswXSwgIFtTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGVdKQorX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfdmFyXSwgWzBdLFtTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlXSkKK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwgWzBdLAorICAgIFtJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/XSkKK19MVF9ERUNMKFtdLCBbbGlibmFtZV9zcGVjXSwgWzFdLCBbRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXhdKQorX0xUX0RFQ0woW10sIFtsaWJyYXJ5X25hbWVzX3NwZWNdLCBbMV0sCisgICAgW1tMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorICAgIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUVdXSkKK19MVF9ERUNMKFtdLCBbc29uYW1lX3NwZWNdLCBbMV0sCisgICAgW1tUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZV1dKQorX0xUX0RFQ0woW10sIFtpbnN0YWxsX292ZXJyaWRlX21vZGVdLCBbMV0sCisgICAgW1Blcm1pc3Npb24gbW9kZSBvdmVycmlkZSBmb3IgaW5zdGFsbGF0aW9uIG9mIHNoYXJlZCBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtwb3N0aW5zdGFsbF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW2ZpbmlzaF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnldKQorX0xUX0RFQ0woW10sIFtmaW5pc2hfZXZhbF0sIFsxXSwKKyAgICBbW0FzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorICAgIG5vdCBzaG93bl1dKQorX0xUX0RFQ0woW10sIFtoYXJkY29kZV9pbnRvX2xpYnNdLCBbMF0sCisgICAgW1doZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNdLCBbMl0sCisgICAgW0NvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorICAgIFtSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitdKSMgX0xUX1NZU19EWU5BTUlDX0xJTktFUgorCisKKyMgX0xUX1BBVEhfVE9PTF9QUkVGSVgoVE9PTCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJ5CitBQ19ERUZVTihbX0xUX1BBVEhfVE9PTF9QUkVGSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZm9yICQxXSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKK1tjYXNlICRNQUdJQ19DTUQgaW4KK1tbXFwvKl0gfCAgPzpbXFwvXSpdKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitkbmwgJGFjX2R1bW15IGZvcmNlcyBzcGxpdHRpbmcgb24gY29uc3RhbnQgdXNlci1zdXBwbGllZCBwYXRocy4KK2RubCBQT1NJWC4yIHdvcmQgc3BsaXR0aW5nIGlzIGRvbmUgb25seSBvbiB0aGUgb3V0cHV0IG9mIHdvcmQgZXhwYW5zaW9ucywKK2RubCBub3QgZXZlcnkgd29yZC4gIFRoaXMgY2xvc2VzIGEgbG9uZ3N0YW5kaW5nIHNoIHNlY3VyaXR5IGhvbGUuCisgIGFjX2R1bW15PSJtNF9pZihbJDJdLCAsICRQQVRILCBbJDJdKSIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWNdKQorTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRNQUdJQ19DTUQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorX0xUX0RFQ0woW10sIFtNQUdJQ19DTURdLCBbMF0sCisJIFtVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zIHdpdGggImZpbGUiXSlkbmwKK10pIyBfTFRfUEFUSF9UT09MX1BSRUZJWAorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbX0xUX1BBVEhfVE9PTF9QUkVGSVhdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW10pCisKKworIyBfTFRfUEFUSF9NQUdJQworIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgYSBzaGFyZWQgbGlicmFyeQorbTRfZGVmdW4oW19MVF9QQVRIX01BR0lDXSwKK1tfTFRfUEFUSF9UT09MX1BSRUZJWCgke2FjX3Rvb2xfcHJlZml4fWZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCitpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICBfTFRfUEFUSF9UT09MX1BSRUZJWChmaWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQorICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCitdKSMgX0xUX1BBVEhfTUFHSUMKKworCisjIExUX1BBVEhfTEQKKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCitBQ19ERUZVTihbTFRfUEFUSF9MRF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSlkbmwKKworQUNfQVJHX1dJVEgoW2dudS1sZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKKwlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKKyAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKKyAgICBbd2l0aF9nbnVfbGQ9bm9dKWRubAorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSAkQ0NdKQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKKyAgICAgIHJlX2RpcmVsdD0nL1tbXi9dXVtbXi9dXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorZWxzZQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKK2ZpCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCitlbHNlCisgIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaV0pCitMRD0iJGx0X2N2X3BhdGhfTEQiCitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJExEKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCitfTFRfUEFUSF9MRF9HTlUKK0FDX1NVQlNUKFtMRF0pCisKK19MVF9UQUdERUNMKFtdLCBbTERdLCBbMV0sIFtUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzXSkKK10pIyBMVF9QQVRIX0xECisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FNX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitBVV9BTElBUyhbQUNfUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xEXSwgW10pCisKKworIyBfTFRfUEFUSF9MRF9HTlUKKyMtIC0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1BBVEhfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWNdKQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCitdKSMgX0xUX1BBVEhfTERfR05VCisKKworIyBfTFRfQ01EX1JFTE9BRAorIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKKyMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgorbTRfZGVmdW4oW19MVF9DTURfUkVMT0FEXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAorICBbbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJ10pCityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKyAgICBmaQorICAgIDs7CisgIGRhcndpbiopCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBlbHNlCisgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZmkKKyAgICA7OworZXNhYworX0xUX1RBR0RFQ0woW10sIFtyZWxvYWRfZmxhZ10sIFsxXSwgW0hvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXNdKWRubAorX0xUX1RBR0RFQ0woW10sIFtyZWxvYWRfY21kc10sIFsyXSlkbmwKK10pIyBfTFRfQ01EX1JFTE9BRAorCisKKyMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBjaGVjayBmb3IgbGlicmFyeSBkZXBlbmRlbmNpZXMKKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXNdLAorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCitbbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4W1s0LTldXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpW1s0NV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICAjIGZ1bmNfd2luMzJfbGliaWQgYXNzdW1lcyBCU0Qgbm0sIHNvIGRpc2FsbG93IGl0IGlmIHVzaW5nIE1TIGR1bXBiaW4uCisgIGlmICggdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiQlNEIG5tIiAmJiBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICBlbHNlCisgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIGZpCisgIDs7CisKK2NlZ2NjKikKKyAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaSo4NiApCisgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pW1szLTldXTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICBmaQorICA7OworCitnbnUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitoYWlrdSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEZbIC1dWzAtOV1bMC05XSkoLWJpdCk/KCBbTE1dU0IpPyBzaGFyZWQgb2JqZWN0KCBmaWxlKT9bLCAtXSogUEEtUklTQyBbMC05XVwuWzAtOV0nXQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAorICAgIDs7CisgICopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18UEEtUklTQ1tbMC05XV1cLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfFwuYSkkJworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRMRCBpbgorICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7CisgICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OworICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7CisgICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgZXNhYworICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCisjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298X3BpY1wuYSkkJworICBmaQorICA7OworCituZXdvczYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK29wZW5ic2QqKQorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCityZG9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICBtb3Rvcm9sYSkKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVtbMC05XV1bWzAtOV1dKiBWZXJzaW9uIFtbMC05XV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCisgICAgOzsKKyAgbmNyKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgc2VxdWVudCkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCisgICAgOzsKKyAgc25pKQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgZHluYW1pYyBsaWIiCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisgICAgOzsKKyAgc2llbWVucykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHBjKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworICA7OworCit0cGYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworZXNhYworXSkKKworZmlsZV9tYWdpY19nbG9iPQord2FudF9ub2Nhc2VnbG9iPW5vCitpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG1pbmd3KiB8IHB3MzIqKQorICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKyAgICBlbHNlCisgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tbXDFdXVwvW1tcMV1dXC9nOy9nImAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK2ZpCisKK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCit0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKworX0xUX0RFQ0woW10sIFtkZXBsaWJzX2NoZWNrX21ldGhvZF0sIFsxXSwKKyAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQorX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2NtZF0sIFsxXSwKKyAgICBbQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCitfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfZ2xvYl0sIFsxXSwKKyAgICBbSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorX0xUX0RFQ0woW10sIFt3YW50X25vY2FzZWdsb2JdLCBbMV0sCisgICAgW0ZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCitdKSMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorCisKKyMgTFRfUEFUSF9OTQorIyAtLS0tLS0tLS0tCisjIGZpbmQgdGhlIHBhdGhuYW1lIHRvIGEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyCitBQ19ERUZVTihbTFRfUEFUSF9OTV0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pXSwgbHRfY3ZfcGF0aF9OTSwKK1tpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCisgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBsdF9jdl9wYXRoX05NPSIkTk0iCitlbHNlCisgIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKyAgZmkKKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwkgIGJyZWFrCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhaworCSAgICA7OworCSAgKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIGRvbmUKKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CitmaV0pCitpZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgorICBOTT0iJGx0X2N2X3BhdGhfTk0iCitlbHNlCisgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgorICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgorICAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBlbHNlCisgICAgQUNfQ0hFQ0tfVE9PTFMoRFVNUEJJTiwgW2R1bXBiaW4gImxpbmsgLWR1bXAiXSwgOikKKyAgICBjYXNlIGAkRFVNUEJJTiAtc3ltYm9scyAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorICAgICpDT0ZGKikKKyAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIgorICAgICAgOzsKKyAgICAqKQorICAgICAgRFVNUEJJTj06CisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgQUNfU1VCU1QoW0RVTVBCSU5dKQorICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCisgICAgTk09IiREVU1QQklOIgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KK0FDX1NVQlNUKFtOTV0pCitfTFRfREVDTChbXSwgW05NXSwgWzFdLCBbQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXJdKWRubAorCitBQ19DQUNIRV9DSEVDSyhbdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZV0sIFtsdF9jdl9ubV9pbnRlcmZhY2VdLAorICBbbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGFjX2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86IG91dHB1dFwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICBjYXQgY29uZnRlc3Qub3V0ID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitdKSMgTFRfUEFUSF9OTQorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorQVVfQUxJQVMoW0FDX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTk1dLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorCisjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBkZXRlcm1pbmUgdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5CisjIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGxpbmsgbGlicmFyeS4KKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9ETExUT09MXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzXSwKK2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kLAorW2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKyAgICA7OworICAqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworICAgIDs7CisgIGVzYWMKKyAgOzsKKyopCisgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisgIDs7Citlc2FjCitdKQorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCit0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisKK19MVF9ERUNMKFtdLCBbc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXNdKQorXSkjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisKKworIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbG9jYXRlIHRoZSBtYW5pZmVzdCB0b29sCittNF9kZWZ1bihbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0sCitbQUNfQ0hFQ0tfVE9PTChNQU5JRkVTVF9UT09MLCBtdCwgOikKK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CitBQ19DQUNIRV9DSEVDSyhbaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sXSwgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbF0sCisgIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqXSkKK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisgIE1BTklGRVNUX1RPT0w9OgorZmkKK19MVF9ERUNMKFtdLCBbTUFOSUZFU1RfVE9PTF0sIFsxXSwgW01hbmlmZXN0IHRvb2xdKWRubAorXSkjIF9MVF9QQVRIX01BTklGRVNUX1RPT0wKKworCisjIExUX0xJQl9NCisjIC0tLS0tLS0tCisjIGNoZWNrIGZvciBtYXRoIGxpYnJhcnkKK0FDX0RFRlVOKFtMVF9MSUJfTV0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorTElCTT0KK2Nhc2UgJGhvc3QgaW4KKyotKi1iZW9zKiB8ICotKi1jZWdjYyogfCAqLSotY3lnd2luKiB8ICotKi1oYWlrdSogfCAqLSotcHczMiogfCAqLSotZGFyd2luKikKKyAgIyBUaGVzZSBzeXN0ZW0gZG9uJ3QgaGF2ZSBsaWJtLCBvciBkb24ndCBuZWVkIGl0CisgIDs7CisqLW5jci1zeXN2NC4zKikKKyAgQUNfQ0hFQ0tfTElCKG13LCBfbXd2YWxpZGNoZWNrbCwgTElCTT0iLWxtdyIpCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09IiRMSUJNIC1sbSIpCisgIDs7CisqKQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSItbG0iKQorICA7OworZXNhYworQUNfU1VCU1QoW0xJQk1dKQorXSkjIExUX0xJQl9NCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfQ0hFQ0tfTElCTV0sIFtMVF9MSUJfTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9OT19SVFRJXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBudmNjKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtWGNvbXBpbGVyIC1mbm8tYnVpbHRpbicgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nIDs7CisgIGVzYWMKKworICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sCisgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMsCisgICAgWy1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLCBbXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiXSkKK2ZpCitfTFRfVEFHREVDTChbbm9fYnVpbHRpbl9mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnXSwgWzFdLAorCVtDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zXSkKK10pIyBfTFRfQ09NUElMRVJfTk9fUlRUSQorCisKKyMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgorQUNfTVNHX0NIRUNLSU5HKFtjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0XSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sCitbCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tbQkNERUdSU1RdXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW1tfQS1aYS16XV1bW19BLVphLXowLTldXSpcKScKKworIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeCopCisgIHN5bWNvZGU9J1tbQkNEVF1dJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJworICA7OworaHB1eCopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW1tCQ0RFR1FSU1RdXScKKyAgOzsKK3NvbGFyaXMqKQorICBzeW1jb2RlPSdbW0JEUlRdXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgIHN5bWNvZGU9J1tbQUJEVF1dJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tbREZOU1RVXV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7Citlc2FjCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCisjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKyMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkYnVpbGRfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorICA7OworZXNhYworCisjIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKworICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgorICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorCisgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KKyAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgorICAgICMgYW5kIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUuCisgICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCisgICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLIFsnIlwKKyIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAorIiAgICAgL15DT0ZGIFNZTUJPTCBUQUJMRS97Zm9yKGkgaW4gaGlkZSkgZGVsZXRlIGhpZGVbaV19OyJcCisiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICAnIHByZng9XiRhY19zeW1wcmZ4XSIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbWwkgXV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbWwkgXV1bWwkgXV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitfTFRfRU9GCisKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIEFDX1RSWV9FVkFMKE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3QpICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZChfX29zZl9fKQorLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKyNlbHNlCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19MVF9FT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitMVEAmdEBfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKK30KK2x0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KK3sKKyAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAorX0xUX0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisJICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorX0xUX0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIENGTEFHUz0iJENGTEFHUyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCisJICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisJICAgIHBpcGVfd29ya3M9eWVzCisJICBmaQorCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworCWVsc2UKKwkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKwlmaQorICAgICAgZWxzZQorCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBmaQorICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCisKKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KKyAgICBicmVhaworICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KKyAgZmkKK2RvbmUKK10pCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CitmaQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoZmFpbGVkKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG9rKQorZmkKKworIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCitpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tbQF1dRklMRScgPi9kZXYvbnVsbDsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2ZpCisKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKKyAgICBbVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lc10pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbl0pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXJdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkXSkKK19MVF9ERUNMKFtdLCBbbm1fZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgJE5NXSkKK10pICMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworCisKKyMgX0xUX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9QSUNdLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisKK200X2lmKFskMV0sIFtDWFhdLCBbCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisgICAgKmRqZ3BwKikKKyAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICAgOzsKKyAgICBoYWlrdSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCisgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisgICAgICA7OworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKnFueCogfCAqbnRvKikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbWzQtOV1dKikKKwkjIEFsbCBBSVggY29kZSBpcyBQSUMuCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworCWZpCisJOzsKKyAgICAgIGNob3J1cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwljeGNoNjgqKQorCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKwltNF9pZihbJDFdLCBbR0NKXSwgW10sCisJICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKwk7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICA7OworCSAgZWNwYyogKQorCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqIHwgYmd4bFtbY0NdXSogfCBtcGl4bFtbY0NdXSopCisJICAgICMgSUJNIFhMIDguMCwgOS4wIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBseW54b3MqKQorCTs7CisgICAgICBtODhrKikKKwk7OworICAgICAgbXZzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgY3h4KikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctVyBjLGV4cG9ydGFsbCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBuZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCisJOzsKKyAgICAgICpxbngqIHwgKm50byopCisgICAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgICA7OworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisJICAgIDs7CisJICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIERpZ2l0YWwvQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBwc29zKikKKwk7OworICAgICAgc29sYXJpcyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKiB8IHN1bkNDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgICA7OworCSAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN1bm9zNCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdGFuZGVtKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdnh3b3JrcyopCisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworCTs7CisgICAgZXNhYworICBmaQorXSwKK1sKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisKKyAgICBoYWlrdSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCisgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisKKyAgICBtc2Rvc2RqZ3BwKikKKyAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCisgICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIG52Y2MqKSAjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1YbGlua2VyICcKKyAgICAgIGlmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iLVhjb21waWxlciAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIgorICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKyAgICAgIGZpCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworCisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCTs7CisgICAgICBlc2FjCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICBlY2MqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisgICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKyAgICAgIGljYyogfCBpZm9ydCopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgorICAgICAgbGY5NSopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctLXNoYXJlZCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy0tc3RhdGljJworCTs7CisgICAgICBuYWdmb3IqKQorCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLC1XbCwsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCTs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICAgIDs7CisgICAgICBjY2MqKQorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICAgIDs7CisgICAgICB4bCogfCBiZ3hsKiB8IGJnZiogfCBtcGl4bCopCisJIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xLCAxMS4xIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCTs7CisgICAgICAqKQorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIENlcmVzXCBGb3J0cmFuKiB8ICpTdW4qRm9ydHJhbipcIFtbMS03XV0uKiB8ICpTdW4qRm9ydHJhbipcIDguW1swLTNdXSopCisJICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPScnCisJICA7OworCSpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgIDs7CisJKlN1blwgQyopCisJICAjIFN1biBDIDUuOQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgIDs7CisgICAgICAgICpJbnRlbCpcIFtbQ0ZdXSpDb21waWxlciopCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICA7OworCSpQb3J0bGFuZFwgR3JvdXAqKQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHJkb3MqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtjb25mb3JtX3BpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKK10pCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICA7OworICAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pIgorICAgIDs7Citlc2FjCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQ10sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSldLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgd29ya3NdLAorICAgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzLCAkMSldLAorICAgIFskX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSldLCBbXSwKKyAgICBbY2FzZSAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSIgOzsKKyAgICAgZXNhY10sCisgICAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ub10pCitmaQorX0xUX1RBR0RFQ0woW3BpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfcGljXSwgWzFdLAorCVtBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHNdKQorCitfTFRfVEFHREVDTChbd2xdLCBbbHRfcHJvZ19jb21waWxlcl93bF0sIFsxXSwKKwlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpXCIKK19MVF9MSU5LRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrc10sCisgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MsICQxKSwKKyAgJGx0X3RtcF9zdGF0aWNfZmxhZywKKyAgW10sCisgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9XSkKK19MVF9UQUdERUNMKFtsaW5rX3N0YXRpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfc3RhdGljXSwgWzFdLAorCVtDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nXSkKK10pIyBfTFRfQ09NUElMRVJfUElDCisKKworIyBfTFRfTElOS0VSX1NITElCUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGlmIHRoZSBsaW5rZXIgc3VwcG9ydHMgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK200X2RlZnVuKFtfTFRfTElOS0VSX1NITElCU10sCitbQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKK200X2lmKFskMV0sIFtDWFhdLCBbCisgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICBjYXNlICRob3N0X29zIGluCisgIGFpeFtbNC05XV0qKQorICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKyAgICAjIEFsc28sIEFJWCBubSB0cmVhdHMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwgZGVmaW5lZAorICAgICMgc3ltYm9scywgd2hlcmVhcyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisgICAgaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGZpCisgICAgOzsKKyAgcHczMiopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9IiRsdGRsbF9jbWRzIgorICAgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBjbCopCisgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPSdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUnxfSU1QT1JUX0RFU0NSSVBUT1JfLionCisgICAgICA7OworICAgICopCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgbGludXgqIHwgaypic2QqLWdudSB8IGdudSopCisgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9bm8KKyAgICA7OworICAqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgOzsKKyAgZXNhYworXSwgWworICBydW5wYXRoX3Zhcj0KKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBfTFRfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgorZG5sIE5vdGUgYWxzbyBhZGp1c3QgZXhjbHVkZV9leHBzeW1zIGZvciBDKysgYWJvdmUuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBnbnUqKQorICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPW5vCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisKKyAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCisgICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgorICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKwkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKKwkjIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIuICBIb3dldmVyLCBhcyB0aGUgd2FybmluZyBpbiB0aGUgR05VIGxkCisJIyBibG9jayBzYXlzLCB2ZXJzaW9ucyBiZWZvcmUgMi4xOS41KiBjb3VsZG4ndCByZWFsbHkgY3JlYXRlIHdvcmtpbmcKKwkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgorCWNhc2UgYCRMRCAtdiAyPiYxYCBpbgorCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuMTkuNSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bWzItOV1dKikgOzsKKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCBbWzMtOV1dKikgOzsKKwkgICopCisJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwk7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KKyAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICpHTlVcIGdvbGQqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KKyAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCisgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeFtbMy05XV0qKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi4xOSwgaXMgcmVwb3J0ZWQKKyoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgorKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91CisqKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBpbnN0YWxsIGJpbnV0aWxzCisqKiogMi4yMCBvciBhYm92ZSwgb3IgbW9kaWZ5IHlvdXIgUEFUSCBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQuCisqKiogWW91IHdpbGwgdGhlbiBuZWVkIHRvIHJlc3RhcnQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KKworX0xUX0VPRgorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZWxzZQorCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWZpfgorCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwkgIDs7CisJcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKwkJCQkJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisJeGxbW2NDXV0qIHwgYmd4bFtbY0NdXSogfCBtcGl4bFtbY0NdXSopICMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworCSAgdG1wX2FkZGZsYWc9IDs7CisJbnZjYyopCSMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKwkgIDs7CisJZXNhYworCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJZXNhYworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKyAgICAgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICBmaQorCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwl4bGYqIHwgYmdmKiB8IGJneGxmKiB8IG1waXhsZiopCisJICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgIGZpCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisJd2xhcmM9CisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCAkR1JFUCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQorKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjFbWzAtNV1dLiopCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworCSAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKwkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgZWxzZQorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm87IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgorCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorCSMgYnJva2VuIGNvbGxlY3QyLgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4W1s0LTldXSopCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKwkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisJZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSIiCisgICAgICBlbHNlCisJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisJIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorCSMgQWxzbywgQUlYIG5tIHRyZWF0cyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbAorCSMgZGVmaW5lZCBzeW1ib2xzLCB3aGVyZWFzIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKwlpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZWxzZQorCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZmkKKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKwkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKwkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKwkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKKwkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgYnJlYWsKKwkgIGZpCisJICBkb25lCisJICA7OworCWVzYWMKKworCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgZmkKKworICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICA6CisJICBlbHNlCisJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKwkgIGZpCisJICA7OworCWVzYWMKKwlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCWZpCisJX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9bm8KKyAgICAgIGVsc2UKKwkjIG5vdCB1c2luZyBnY2MKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKwllbHNlCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICBlbHNlCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICBmaQorCWZpCisgICAgICBmaQorCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKwkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGVsc2UKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgZmkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBic2RpW1s0NV1dKikKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGNsKikKKwkjIE5hdGl2ZSBNU1ZDCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9Ii5kbGwiCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZWxzZQorCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZml+CisJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisJICBsaW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCV9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKwlfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisJIyBEb24ndCB1c2UgcmFubGliCisJX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKKwlfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKwkgICAgKi5leGV8Ki5FWEUpIDs7CisJICAgICopCisJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisJICAgICAgOzsKKwkgIGVzYWN+CisJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKwkgIGZpJworCTs7CisgICAgICAqKQorCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPSIuZGxsIgorCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKyAgICAgIDs7CisKKyAgICBkZ3V4KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIuKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12IC1mICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12IC1mICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJbTRfaWYoJDEsIFtdLCBbCisJICAjIE9sZGVyIHZlcnNpb25zIG9mIHRoZSAxMS4wMCBjb21waWxlciBkbyBub3QgdW5kZXJzdGFuZCAtYiB5ZXQKKwkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQorCSAgX0xUX0xJTktFUl9PUFRJT04oW2lmICRDQyB1bmRlcnN0YW5kcyAtYl0sCisJICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9fYiwgJDEpLCBbLWJdLAorCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSwKKwkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnXSldLAorCSAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10pCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisJQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2xdLAorCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKKwkgIFtzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKwkgICBBQ19MSU5LX0lGRUxTRSgKKwkgICAgIFtBQ19MQU5HX1NPVVJDRSgKKwkgICAgICAgIFtBQ19MQU5HX0NBU0UoW0NdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKwkJCSAgICAgIFtDKytdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKwkJCSAgICAgIFtGb3J0cmFuIDc3XSwgW1sKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBlbmRdXSwKKwkJCSAgICAgIFtGb3J0cmFuXSwgW1sKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBlbmRdXSldKV0sCisJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllc10sCisJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vXSkKKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJZWxzZQorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgIG9wZW5ic2RbWzAxXV0uKiB8IG9wZW5ic2QyLltbMC03XV0gfCBvcGVuYnNkMi5bWzAtN11dLiopCisJICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgIDs7CisJICAgKikKKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICAgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IGRlZnMnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCXdsYXJjPScke3dsfScKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJKikKKwkgIHdsYXJjPScke3dsfScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCWVsc2UKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCitdKQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQordGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCitfTFRfVEFHVkFSKHdpdGhfZ251X2xkLCAkMSk9JHdpdGhfZ251X2xkCisKK19MVF9ERUNMKFtdLCBbbGliZXh0XSwgWzBdLCBbT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpXSlkbmwKK19MVF9ERUNMKFtdLCBbc2hyZXh0X2NtZHNdLCBbMV0sIFtTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4dHJhY3RfZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSwKKwlbbHRfY3ZfXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSwKKwlbJFJNIGNvbmZ0ZXN0KgorCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IHRoZW4KKwkgIHNvbmFtZT1jb25mdGVzdAorCSAgbGliPWNvbmZ0ZXN0CisJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgIGRlcGxpYnM9CisJICB3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKKwkgIHBpY19mbGFnPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisJICBsaW5rZXJfZmxhZ3M9LXYKKwkgIHZlcnN0cmluZz0KKwkgIG91dHB1dF9vYmpkaXI9LgorCSAgbGlibmFtZT1jb25mdGVzdAorCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisJICBpZiBBQ19UUllfRVZBTChfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKQorCSAgdGhlbgorCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCSAgZWxzZQorCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgIGZpCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKwlmaQorCSRSTSBjb25mdGVzdCoKKwldKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSRsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKQorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKK19MVF9UQUdERUNMKFtidWlsZF9saWJ0b29sX25lZWRfbGNdLCBbYXJjaGl2ZV9jbWRzX25lZWRfbGNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lc10sCisgICAgW2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWNdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfZHluYW1pY19mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnNdKQorX0xUX1RBR0RFQ0woW10sIFt3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbmVlZHNfb2JqZWN0XSwgWzFdLAorICAgIFtXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseV0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9jbWRzXSwgWzJdLCBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyAgICBhIHNoYXJlZCBhcmNoaXZlLl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbd2l0aF9nbnVfbGRdLCBbMV0sCisgICAgW1doZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdF0pCitfTFRfVEFHREVDTChbXSwgW2FsbG93X3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdF0pCitfTFRfVEFHREVDTChbXSwgW25vX3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyAgICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0XSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworICAgICJhYnNvbHV0ZSIsIGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisgICAgbGlicmFyeSBpcyByZWxvY2F0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9taW51c19MXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9zaGxpYnBhdGhfdmFyXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hdXRvbWF0aWNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisgICAgYWdhaW5zdCBpdF0pCitfTFRfVEFHREVDTChbXSwgW2luaGVyaXRfcnBhdGhdLCBbMF0sCisgICAgW1NldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisgICAgdG8gcnVudGltZSBwYXRoIGxpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtsaW5rX2FsbF9kZXBsaWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZF0pCitfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9zeW1ib2xzX2NtZHNdLCBbMl0sCisgICAgW1RoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtleGNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtpbmNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCitfTFRfVEFHREVDTChbXSwgW3ByZWxpbmtfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXNdKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0bGlua19jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zXSkKK19MVF9UQUdERUNMKFtdLCBbZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCitkbmwgRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK2RubCBfTFRfVEFHREVDTChbXSwgW3RocmVhZF9zYWZlX2ZsYWdfc3BlY10sIFsxXSwKK2RubCAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQgc2FmZSBvYmplY3RzXSkKK10pIyBfTFRfTElOS0VSX1NITElCUworCisKKyMgX0xUX0xBTkdfQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ19DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK2x0X3NhdmVfQ0M9IiRDQyIKK0FDX0xBTkdfUFVTSChDKQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCisKK19MVF9UQUdfQ09NUElMRVIKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQworCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisgIExUX1NZU19ETE9QRU5fU0VMRgorICBfTFRfQ01EX1NUUklQTElCCisKKyAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgZmkKKyAgICA7OworCisgIGFpeFtbNC05XV0qKQorICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorQUNfTEFOR19QT1AKK0NDPSIkbHRfc2F2ZV9DQyIKK10pIyBfTFRfTEFOR19DX0NPTkZJRworCisKKyMgX0xUX0xBTkdfQ1hYX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMrKyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKK2lmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCisgIEFDX1BST0dfQ1hYQ1BQCitlbHNlCisgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworZmkKKworQUNfTEFOR19QVVNIKEMrKykKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Y3BwCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBDWFggY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW1tdXSkgeyByZXR1cm4oMCk7IH0nCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIGx0X3NhdmVfTEQ9JExECisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgR0NDPSRHWFgKKyAgbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKyAgbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAorICBmaQorICBpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorICBmaQorICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICBDQz0ke0NYWC0iYysrIn0KKyAgQ0ZMQUdTPSRDWFhGTEFHUworICBjb21waWxlcj0kQ0MKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgICMgV2UgZG9uJ3Qgd2FudCAtZm5vLWV4Y2VwdGlvbiB3aGVuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQorICAgICMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KKyAgICBmaQorCisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICMgU2V0IHVwIGRlZmF1bHQgR05VIEMrKyBjb25maWd1cmF0aW9uCisKKyAgICAgIExUX1BBVEhfTEQKKworICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCisgICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisgICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KKyAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKyAgICAgICAgd2xhcmM9JyR7d2x9JworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBlbHNlCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgICB3bGFyYz0KKworICAgICAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorICAgICAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KKyAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICAgICAgZmkKKworICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworICAgIGVsc2UKKyAgICAgIEdYWD1ubworICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgIHdsYXJjPQorICAgIGZpCisKKyAgICAjIFBPUlRNRTogZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgQysrIGxpbmsgY2hhcmFjdGVyaXN0aWNzCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisgICAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0iIgorICAgICAgICBlbHNlCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisgICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisJICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgICAgIGNhc2UgJGxkX2ZsYWcgaW4KKwkgICAgICAqLWJydGwqKQorCSAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgICAgIGJyZWFrCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICA7OworICAgICAgICAgIGVzYWMKKworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgICBmaQorCisgICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworCisgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisgICAgICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICAgIDoKKwkgIGVsc2UKKwkgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisJICAgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKwkgIGZpCisgICAgICAgICAgZXNhYworICAgICAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJworCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCSAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgbm90IHVzaW5nIGdjYworICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSAgIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKyAgICAgICAgICBlbHNlCisJICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgICBlbHNlCisJICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8KKwkjIGV4cG9ydC4KKyAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisgICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorICAgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICMgZXhlY3V0YWJsZS4KKyAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKyAgICAgICAgICBlbHNlCisJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisJICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgZWxzZQorCSAgICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAjIGxpYnJhcmllcy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgICBiZW9zKikKKwlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKwksY2wqIHwgbm8sY2wqKQorCSAgIyBOYXRpdmUgTVNWQworCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworCSAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwkgIGxpYmV4dD1saWIKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgICRTRUQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgICBlbHNlCisJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisJICAgIGZpfgorCSAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisJICAgIGxpbmtuYW1lcz0nCisJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJICAjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisJICAjIERvbid0IHVzZSByYW5saWIKKwkgIF9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCisJICBfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorCSAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorCSAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisJICAgICAgKi5leGV8Ki5FWEUpIDs7CisJICAgICAgKikKKwkJbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorCQlsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorCQk7OworCSAgICBlc2FjfgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgorCSAgICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorCSAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisJICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisJICAgIGZpJworCSAgOzsKKwkqKQorCSAgIyBnKysKKwkgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgIGVsc2UKKwkgICAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICBmaX4KKwkgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgZWxzZQorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICBmaQorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorCTs7CisKKyAgICAgIGRndXgqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGVjKysqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZDIuKikKKyAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyByZXBvcnRlZCB0byBiZSBmYWlybHkgYnJva2VuIGJlZm9yZQorCSMgc3dpdGNoIHRvIEVMRgorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QtZWxmKikKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgICAgIyBGcmVlQlNEIDMgYW5kIGxhdGVyIHVzZSBHTlUgQysrIGFuZCBHTlUgbGQgd2l0aCBzdGFuZGFyZCBFTEYKKyAgICAgICAgIyBjb252ZW50aW9ucworICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgICA7OworCisgICAgICBnbnUqKQorICAgICAgICA7OworCisgICAgICBoYWlrdSopCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDkqKQorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKyAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICBhQ0MqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAtZiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKyAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKyAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAtZiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBocHV4MTAqfGhwdXgxMSopCisgICAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisJICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCQkgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCQkgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGFDQyopCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgaHBwYSo2NCopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgIGlhNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICBpYTY0KikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgICopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICBlc2FjCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBpbnRlcml4W1szLTldXSopCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisJIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorCSMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKwkjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisJIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworCSMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU0dJIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICBlbHNlCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworCSAgICAgIGZpCisJICAgIGZpCisJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiAtZiBcJHRlbXBsaWIgJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiAtZiBcJHRlbXBsaWIgJGxpYicKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisJICBpY3BjKiB8IGVjcGMqICkKKwkgICAgIyBJbnRlbCBDKysKKwkgICAgd2l0aF9nbnVfbGQ9eWVzCisJICAgICMgdmVyc2lvbiA4LjAgYW5kIGFib3ZlIG9mIGljcGMgY2hva2Ugb24gbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzCisJICAgICMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCisJICAgICMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCisJICAgIGNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSAgICAgICoiVmVyc2lvbiA3LiIqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgICAqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgorCSAgICAgICAgdG1wX2lkeW49CisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCQkgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKKwkJZXNhYworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICBlc2FjCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICA7OworICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQorICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgY2FzZSBgJENDIC1WYCBpbgorCSAgICAqcGdDQ1wgW1sxLTVdXS4qIHwgKnBnY3BwXCBbWzEtNV1dLiopCisJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CisJCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorCQkkUkFOTElCICRvbGRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgICopICMgVmVyc2lvbiA2IGFuZCBhYm92ZSB1c2Ugd2VhayBzeW1ib2xzCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgZXNhYworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgICAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCisJICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQllY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICAgIGZpCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisKKwkgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCisJICAgICAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQorCSAgICAgICMgd291bGQgYmUgYmV0dGVyLgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIGx5bnhvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBtODhrKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBtdnMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGN4eCopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisJICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBuZXRic2QqKQorICAgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCisJICB3bGFyYz0KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlmaQorCSMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCisJOzsKKworICAgICAgKm50byogfCAqcW54KikKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKwk7OworCisgICAgICBvcGVuYnNkMiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgb3BlbmJzZCopCisJaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGZpCisJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgLWYgXCR0ZW1wbGliICRsaWInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgICAgKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICBlc2FjCisJICAgIDs7CisgICAgICAgICAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBjeHgqKQorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCQk7OworCSAgICAgICopCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KKwkgICAgICAgICAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgorCSAgICAgICAgICAkUk0gJGxpYi5leHAnCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJCTs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICBvc2YzKikKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgICAqKQorCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICBlc2FjCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBwc29zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgc3Vub3M0KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBzb2xhcmlzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyogfCBzdW5DQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsJDEpPXllcworCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAgICAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJICAgICAgKikKKwkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4KKwkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJCV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCisJICAgICMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0teiAke3dsfWRlZnMnCisJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGVsc2UKKwkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKKwkgICAgICAgICMgcGxhdGZvcm0uCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisJICAgICAgZmkKKworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICR3bCRsaWJkaXInCisJICAgICAgY2FzZSAkaG9zdF9vcyBpbgorCQlzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworCQkqKQorCQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCQkgIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIENDKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKwkjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKwkjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKwkjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisJIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisJIyBhcyAteiBkZWZzLgorCV9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiwkbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworCV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCisJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgorCSAgICAgICciJF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpIgorCSAgICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkcmVsb2FkX29ianN+CisJICAgICAgJyIkX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpIgorCSAgICA7OworCSAgKikKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCWVzYWMKKyAgICAgIDs7CisKKyAgICAgIHRhbmRlbSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICB2eHdvcmtzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCisgICAgdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEdYWCIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoJDEpCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworICBMRENYWD0kTEQKKyAgTEQ9JGx0X3NhdmVfTEQKKyAgR0NDPSRsdF9zYXZlX0dDQworICB3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorICBsdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECisgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorICBsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKK2ZpICMgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19DWFhfQ09ORklHCisKKworIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZnVuY19zdHJpcG5hbWVfY25mIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKyMKKyMgVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIChub24tWFNJKSB2ZXJzaW9uIG9mIGZ1bmNfc3RyaXBuYW1lLAorIyBleGNlcHQgdGhpcyBvbmUgY2FuIGJlIHVzZWQgYnkgbTQgY29kZSB0aGF0IG1heSBiZSBleGVjdXRlZCBieSBjb25maWd1cmUsCisjIHJhdGhlciB0aGFuIHRoZSBsaWJ0b29sIHNjcmlwdC4KK200X2RlZnVuKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSxbZG5sCitBQ19SRVFVSVJFKFtfTFRfREVDTF9TRURdKQorQUNfUkVRVUlSRShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKQorZnVuY19zdHJpcG5hbWVfY25mICgpCit7CisgIGNhc2UgJHsyfSBpbgorICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisgIGVzYWMKK30gIyBmdW5jX3N0cmlwbmFtZV9jbmYKK10pIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisKKyMgX0xUX1NZU19ISURERU5fTElCREVQUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaWd1cmUgb3V0ICJoaWRkZW4iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZyb20gdmVyYm9zZQorIyBjb21waWxlciBvdXRwdXQgd2hlbiBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCittNF9kZWZ1bihbX0xUX1NZU19ISURERU5fTElCREVQU10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitBQ19SRVFVSVJFKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSlkbmwKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CitfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwcmVkZXBzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPQorCitkbmwgd2UgY2FuJ3QgdXNlIHRoZSBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUgaGVyZSwKK2RubCBiZWNhdXNlIGl0IGNvbnRhaW5zIGNvZGUgaW50ZW5kZWQgZm9yIGFuIGV4ZWN1dGFibGUsCitkbmwgbm90IGEgbGlicmFyeS4gIEl0J3MgcG9zc2libGUgd2Ugc2hvdWxkIGxldCBlYWNoCitkbmwgdGFnIGRlZmluZSBhIG5ldyBsdF8/Pz8/X2xpbmtfdGVzdF9jb2RlIHZhcmlhYmxlLAorZG5sIGJ1dCBpdCdzIG9ubHkgdXNlZCBoZXJlLi4uCittNF9pZihbJDFdLCBbXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitpbnQgYTsKK3ZvaWQgZm9vICh2b2lkKSB7IGEgPSAwOyB9CitfTFRfRU9GCitdLCBbJDFdLCBbQ1hYXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitjbGFzcyBGb28KK3sKK3B1YmxpYzoKKyAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Citwcml2YXRlOgorICBpbnQgYTsKK307CitfTFRfRU9GCitdLCBbJDFdLCBbRjc3XSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgaW50ZWdlcio0IGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtGQ10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIgYQorICAgICAgYT0wCisgICAgICByZXR1cm4KKyAgICAgIGVuZAorX0xUX0VPRgorXSwgWyQxXSwgW0dDSl0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorcHVibGljIGNsYXNzIGZvbyB7CisgIHByaXZhdGUgaW50IGE7CisgIHB1YmxpYyB2b2lkIGJhciAodm9pZCkgeworICAgIGEgPSAwOworICB9Cit9OworX0xUX0VPRgorXSwgWyQxXSwgW0dPXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitwYWNrYWdlIGZvbworZnVuYyBmb28oKSB7Cit9CitfTFRfRU9GCitdKQorCitfbHRfbGliZGVwc19zYXZlX0NGTEFHUz0kQ0ZMQUdTCitjYXNlICIkQ0MgJENGTEFHUyAiIGluICMoCisqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKypcIC1md2hvcHIqXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby13aG9wciIgOzsKKypcIC1mdXNlLWxpbmtlci1wbHVnaW4qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby11c2UtbGlua2VyLXBsdWdpbiIgOzsKK2VzYWMKKworZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorZG5sIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK2lmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisgICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorCisgICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKKyAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCisgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKworICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCisgICAgY2FzZSAke3ByZXZ9JHtwfSBpbgorCisgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCisgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgorICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIHx8CisgICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKwkgcHJldj0kcAorCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgorICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgorICAgICAgICAgY2FzZSAkcCBpbgorICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgZXNhYworICAgICAgIGZpCisgICAgICAgY2FzZSAkcCBpbgorICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgZXNhYworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGNhc2UgJHtwcmV2fSBpbgorCSAtTCB8IC1SKQorCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtwcmV2fSR7cH0iCisJICAgZWxzZQorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAke3ByZXZ9JHtwfSIKKwkgICBmaQorCSAgIDs7CisJICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCisJICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgorCSBlc2FjCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtwcmV2fSR7cH0iCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIHByZXY9CisgICAgICAgOzsKKworICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICouJG9iamV4dCkKKyAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KKyAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KKwkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpICRwIgorCSBmaQorICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJHAiCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKworICAgIGVzYWMKKyAgZG9uZQorCisgICMgQ2xlYW4gdXAuCisgIHJtIC1mIGEub3V0IGEuZXhlCitlbHNlCisgIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCitmaQorCiskUk0gLWYgY29uZmVzdC4kb2JqZXh0CitDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCittNF9pZihbJDFdLCBbQ1hYXSwKK1tjYXNlICRob3N0X29zIGluCitpbnRlcml4W1szLTldXSopCisgICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KKyAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KKyAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9CisgIDs7CisKK2xpbnV4KikKKyAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisgICpTdW5cIEMqKQorICAgICMgU3VuIEMrKyA1LjkKKworICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKKworc29sYXJpcyopCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIENDKiB8IHN1bkNDKikKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKKyAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCisgICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKK2VzYWMKK10pCisKK2Nhc2UgIiAkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpICIgaW4KKyoiIC1sYyAiKikgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vIDs7Citlc2FjCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT0KK2lmIHRlc3QgLW4gIiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iOyB0aGVuCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT1gZWNobyAiICR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iIHwgJHtTRUR9IC1lICdzISAtTCEgIWcnIC1lICdzIV4gISEnYAorZmkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzXSwgWzFdLAorICAgIFtUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnldKQorX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBfb2JqZWN0c10sIFsxXSwKKyAgICBbRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCisgICAgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnldKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwX29iamVjdHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW3ByZWRlcHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhdLCBbMV0sCisgICAgW1RoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisgICAgYSBzaGFyZWQgbGlicmFyeV0pCitdKSMgX0xUX1NZU19ISURERU5fTElCREVQUworCisKKyMgX0xUX0xBTkdfRjc3X0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gNzcgY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0Y3N19DT05GSUddLAorW0FDX0xBTkdfUFVTSChGb3J0cmFuIDc3KQoraWYgdGVzdCAteiAiJEY3NyIgfHwgdGVzdCAiWCRGNzciID0gIlhubyI7IHRoZW4KKyAgX2x0X2Rpc2FibGVfRjc3PXllcworZmkKKworX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmNzcgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWYKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGY3NyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEY3NyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAorICAgICAgc3Vicm91dGluZSB0CisgICAgICByZXR1cm4KKyAgICAgIGVuZAorIgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIENDPSR7Rjc3LSJmNzcifQorICBDRkxBR1M9JEZGTEFHUworICBjb21waWxlcj0kQ0MKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisgIEdDQz0kRzc3CisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisJICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworCWZpCisgICAgICAgIDs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkRzc3IgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgR0NDPSRsdF9zYXZlX0dDQworICBDQz0iJGx0X3NhdmVfQ0MiCisgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GNzdfQ09ORklHCisKKworIyBfTFRfTEFOR19GQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0ZDX0NPTkZJR10sCitbQUNfTEFOR19QVVNIKEZvcnRyYW4pCisKK2lmIHRlc3QgLXogIiRGQyIgfHwgdGVzdCAiWCRGQyIgPSAiWG5vIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GQz15ZXMKK2ZpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEZDIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBDQz0ke0ZDLSJmOTUifQorICBDRkxBR1M9JEZDRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIEdDQz0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKwkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRhY19jdl9mY19jb21waWxlcl9nbnUiCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0ZDX0NPTkZJRworCisKKyMgX0xUX0xBTkdfR0NKX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEphdmEgQ29tcGlsZXIgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0dDSl9DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfR0NKXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgSmF2YSB0ZXN0IHNvdXJjZXMuCithY19leHQ9amF2YQorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgSmF2YSB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImNsYXNzIGZvbyB7fSIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW1tdXSBhcmd2KSB7fTsgfScKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSRDQworbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworbHRfc2F2ZV9HQ0M9JEdDQworR0NDPXllcworQ0M9JHtHQ0otImdjaiJ9CitDRkxBR1M9JEdDSkZMQUdTCitjb21waWxlcj0kQ0MKK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIEdDSiBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKworX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKKworQUNfTEFOR19SRVNUT1JFCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0NDPSRsdF9zYXZlX0NDCitDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitdKSMgX0xUX0xBTkdfR0NKX0NPTkZJRworCisKKyMgX0xUX0xBTkdfR09fQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBHTlUgR28gY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0dPX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19HT10pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEdvIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1nbworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgR28gdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJwYWNrYWdlIG1haW47IGZ1bmMgbWFpbigpIHsgfSIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncGFja2FnZSBtYWluOyBmdW5jIG1haW4oKSB7IH0nCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9UQUdfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0kQ0MKK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz15ZXMKK0NDPSR7R09DLSJnY2NnbyJ9CitDRkxBR1M9JEdPRkxBR1MKK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgR28gZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisKK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0FDX0xBTkdfUkVTVE9SRQorCitHQ0M9JGx0X3NhdmVfR0NDCitDQz0kbHRfc2F2ZV9DQworQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworXSkjIF9MVF9MQU5HX0dPX0NPTkZJRworCisKKyMgX0xUX0xBTkdfUkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIFdpbmRvd3MgcmVzb3VyY2UgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX1JDX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19SQ10pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1yYworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9JworCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIgorCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9IiRDQyIKK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz0KK0NDPSR7UkMtIndpbmRyZXMifQorQ0ZMQUdTPQorY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCitfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisKK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgOgorICBfTFRfQ09ORklHKCQxKQorZmkKKworR0NDPSRsdF9zYXZlX0dDQworQUNfTEFOR19SRVNUT1JFCitDQz0kbHRfc2F2ZV9DQworQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworXSkjIF9MVF9MQU5HX1JDX0NPTkZJRworCisKKyMgTFRfUFJPR19HQ0oKKyMgLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX0dDSl0sCitbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwgW0FDX1BST0dfR0NKXSwKKyAgW200X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwgW0FdW01fUFJPR19HQ0pdLAorICAgIFtBQ19DSEVDS19UT09MKEdDSiwgZ2NqLCkKKyAgICAgIHRlc3QgIngke0dDSkZMQUdTK3NldH0iID0geHNldCB8fCBHQ0pGTEFHUz0iLWcgLU8yIgorICAgICAgQUNfU1VCU1QoR0NKRkxBR1MpXSldKVtdZG5sCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfR0NKXSwgW0xUX1BST0dfR0NKXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLCBbXSkKKworCisjIExUX1BST0dfR08KKyMgLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfR09dLAorW0FDX0NIRUNLX1RPT0woR09DLCBnY2NnbywpCitdKQorCisKKyMgTFRfUFJPR19SQworIyAtLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19SQ10sCitbQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywpCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfUkNdLCBbTFRfUFJPR19SQ10pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfUkNdLCBbXSkKKworCisjIF9MVF9ERUNMX0VHUkVQCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBncmVwCisjIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorbTRfZGVmdW4oW19MVF9ERUNMX0VHUkVQXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfRkdSRVBdKWRubAordGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAorX0xUX0RFQ0woW10sIFtHUkVQXSwgWzFdLCBbQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXNdKQorX0xUX0RFQ0woW10sIFtFR1JFUF0sIFsxXSwgW0FuIEVSRSBtYXRjaGVyXSkKK19MVF9ERUNMKFtdLCBbRkdSRVBdLCBbMV0sIFtBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXJdKQorZG5sIE5vbi1ibGVlZGluZy1lZGdlIGF1dG9jb25mIGRvZXNuJ3Qgc3Vic3QgR1JFUCwgc28gZG8gaXQgaGVyZSB0b28KK0FDX1NVQlNUKFtHUkVQXSkKK10pCisKKworIyBfTFRfREVDTF9PQkpEVU1QCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBvYmpkdW1wCisjIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorbTRfZGVmdW4oW19MVF9ERUNMX09CSkRVTVBdLAorW0FDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCitfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCitBQ19TVUJTVChbT0JKRFVNUF0pCitdKQorCisjIF9MVF9ERUNMX0RMTFRPT0wKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgRExMVE9PTCB2YXJpYWJsZSBpcyBzZXQuCittNF9kZWZ1bihbX0xUX0RFQ0xfRExMVE9PTF0sCitbQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKK19MVF9ERUNMKFtdLCBbRExMVE9PTF0sIFsxXSwgW0RMTCBjcmVhdGlvbiBwcm9ncmFtXSkKK0FDX1NVQlNUKFtETExUT09MXSkKK10pCisKKyMgX0xUX0RFQ0xfU0VECisjIC0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgYSBmdWxseS1mdW5jdGlvbmFsIHNlZCBwcm9ncmFtLCB0aGF0IHRydW5jYXRlcworIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgorbTRfZGVmdW4oW19MVF9ERUNMX1NFRF0sCitbQUNfUFJPR19TRUQKK3Rlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKK1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKK19MVF9ERUNMKFtdLCBbU0VEXSwgWzFdLCBbQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitfTFRfREVDTChbXSwgW1hzZWRdLCBbIlwkU0VEIC1lIDFzL15YLy8iXSwKKyAgICBbU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW5dKQorXSkjIF9MVF9ERUNMX1NFRAorCittNF9pZm5kZWYoW0FDX1BST0dfU0VEXSwgWworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIworIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisjICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCittNF9kZWZ1bihbQUNfUFJPR19TRURdLAorW0FDX01TR19DSEVDS0lORyhbZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX1NFRCwKK1sjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KKyMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworbHRfYWNfbWF4PTAKK2x0X2FjX2NvdW50PTAKKyMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCisjIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgorZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCisgIHRlc3QgISAtZiAkbHRfYWNfc2VkICYmIGNvbnRpbnVlCisgIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgorICBsdF9hY19jb3VudD0wCisgIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID5jb25mdGVzdC5pbgorICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgIGlmICIkbHRfYWNfc2VkIiAtLXZlcnNpb24gMj4mMSA8IC9kZXYvbnVsbCB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisgICAgYnJlYWsKKyAgZmkKKyAgd2hpbGUgdHJ1ZTsgZG8KKyAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorICAgIG12IC1mIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgorICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCisgICAgZWNobyA+PmNvbmZ0ZXN0Lm5sCisgICAgJGx0X2FjX3NlZCAtZSAncy9hJC8vJyA8IGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgfHwgYnJlYWsKKyAgICBjbXAgLXMgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sIHx8IGJyZWFrCisgICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkbHRfYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgICAgbHRfYWNfY291bnQ9YGV4cHIgJGx0X2FjX2NvdW50ICsgMWAKKyAgICBpZiB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgJGx0X2FjX21heDsgdGhlbgorICAgICAgbHRfYWNfbWF4PSRsdF9hY19jb3VudAorICAgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGZpCisgIGRvbmUKK2RvbmUKK10pCitTRUQ9JGx0X2N2X3BhdGhfU0VECitBQ19TVUJTVChbU0VEXSkKK0FDX01TR19SRVNVTFQoWyRTRURdKQorXSkjQUNfUFJPR19TRUQKK10pI200X2lmbmRlZgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfU0VEXSwgW0FDX1BST0dfU0VEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdLCBbXSkKKworCisjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBvdXQgd2hldGhlciB0aGUgc2hlbGwgaXMgQm91cm5lIG9yIFhTSSBjb21wYXRpYmxlLAorIyBvciBoYXMgc29tZSBvdGhlciB1c2VmdWwgZmVhdHVyZXMuCittNF9kZWZ1bihbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHNdKQorIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKK3hzaV9zaGVsbD1ubworKCBfbHRfZHVtbXk9ImEvYi9jIgorICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgeHNpX3NoZWxsPXllcworQUNfTVNHX1JFU1VMVChbJHhzaV9zaGVsbF0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbeHNpX3NoZWxsPSckeHNpX3NoZWxsJ10pCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgIis9Il0pCitsdF9zaGVsbF9hcHBlbmQ9bm8KKyggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiRbMV0rPVwkWzJdIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKKyAgICA+L2Rldi9udWxsIDI+JjEgXAorICAmJiBsdF9zaGVsbF9hcHBlbmQ9eWVzCitBQ19NU0dfUkVTVUxUKFskbHRfc2hlbGxfYXBwZW5kXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFtsdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnXSkKKworaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGx0X3Vuc2V0PXVuc2V0CitlbHNlCisgIGx0X3Vuc2V0PWZhbHNlCitmaQorX0xUX0RFQ0woW10sIFtsdF91bnNldF0sIFswXSwgW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICJ1bnNldCJdKWRubAorCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCisgIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCisgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworX0xUX0RFQ0woW1NQMk5MXSwgW2x0X1NQMk5MXSwgWzFdLCBbdHVybiBzcGFjZXMgaW50byBuZXdsaW5lc10pZG5sCitfTFRfREVDTChbTkwyU1BdLCBbbHRfTkwyU1BdLCBbMV0sIFt0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzXSlkbmwKK10pIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKworCisjIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UgKEZVTkNOQU1FLCBSRVBMQUNFTUVOVC1CT0RZKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW4gYCRjZmdmaWxlJywgbG9vayBmb3IgZnVuY3Rpb24gRlVOQ05BTUUgZGVsaW1pdGVkIGJ5IGBeRlVOQ05BTUUgKCkkJyBhbmQKKyMgJ159IEZVTkNOQU1FICcsIGFuZCByZXBsYWNlIGl0cyBib2R5IHdpdGggUkVQTEFDRU1FTlQtQk9EWS4KK200X2RlZnVuKFtfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFXSwKK1tkbmwgeworc2VkIC1lICcvXiQxICgpJC8sL159ICMgJDEgL2NcCiskMSAoKVwKK3tcCittNF9icGF0c3Vic3RzKFskMl0sIFskXSwgW1xcXSwgW15cKFsJIF1cKV0sIFtcXFwxXSkKK30gIyBFeHRlbmRlZC1zaGVsbCAkMSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorXSkKKworCisjIF9MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXBsYWNlIGV4aXN0aW5nIHBvcnRhYmxlIGltcGxlbWVudGF0aW9ucyBvZiBzZXZlcmFsIHNoZWxsIGZ1bmN0aW9ucyB3aXRoCisjIGVxdWl2YWxlbnQgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb25zIHdoZXJlIHRob3NlIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUuLgorbTRfZGVmdW4oW19MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlNdLAorW2lmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lXSwgW2RubAorICAgIGNhc2UgJHsxfSBpbgorICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKyAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgICBlc2FjXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Jhc2VuYW1lXSwgW2RubAorICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWVdLCBbZG5sCisgICAgY2FzZSAkezF9IGluCisgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICAgIGVzYWMKKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3N0cmlwbmFtZV0sIFtkbmwKKyAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCisgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifV0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9sb25nX29wdF0sIFtkbmwKKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn0KKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3NwbGl0X3Nob3J0X29wdF0sIFtkbmwKKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fQorICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1dKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbG8yb10sIFtkbmwKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CisgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKyAgICBlc2FjXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3hmb3JtXSwgWyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FyaXRoXSwgWyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKV0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sZW5dLCBbICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfV0pCitmaQorCitpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kXSwgWyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FwcGVuZF9xdW90ZWRdLCBbZG5sCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKK2RubCBtNCBleHBhbnNpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgdGhlbiB0aGUgc2hlbGwgZXZhbCB0dXJucyB0aGF0IGludG8gXAorICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXSkKKworICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorZWxzZQorICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorZmkKKworaWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKyAgQUNfTVNHX1dBUk4oW1VuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGVdKQorZmkKK10pCisKKyMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGV0ZXJtaW5lIHdoaWNoIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBieQorIyBmdW5jX3RvX2hvc3RfZmlsZSAoYW5kLCBpbXBsaWNpdGx5LCBieSBmdW5jX3RvX2hvc3RfcGF0aCkuICBUaGVzZSBhcmUgbmVlZGVkCisjIGZvciBjZXJ0YWluIGNyb3NzLWNvbXBpbGUgY29uZmlndXJhdGlvbnMgYW5kIG5hdGl2ZSBtaW5ndy4KK200X2RlZnVuKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl90b19ob3N0X2ZpbGVfY21kLAorW2Nhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICotKi1jeWd3aW4qICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICA7OworZXNhYworXSkKK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b19ob3N0X2ZpbGVfY21kXSkKK19MVF9ERUNMKFt0b19ob3N0X2ZpbGVfY21kXSwgW2x0X2N2X3RvX2hvc3RfZmlsZV9jbWRdLAorICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKWRubAorCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQsCitbI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCitjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKK2VzYWMKK10pCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCitBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9fdG9vbF9maWxlX2NtZF0pCitfTFRfREVDTChbdG9fdG9vbF9maWxlX2NtZF0sIFtsdF9jdl90b190b29sX2ZpbGVfY21kXSwKKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKWRubAorXSkjIF9MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9tNC9sdG9wdGlvbnMubTQgYi9jdXJsLTcuMjUuMC9tNC9sdG9wdGlvbnMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5YWNkOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL200L2x0b3B0aW9ucy5tNApAQCAtMCwwICsxLDM4NCBAQAorIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgICBJbmMuCisjICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA3IGx0b3B0aW9ucy5tNAorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQorCisKKyMgX0xUX01BTkdMRV9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTUFOR0xFX09QVElPTl0sCitbW19MVF9PUFRJT05fXW00X2JwYXRzdWJzdCgkMV9fJDIsIFtbXmEtekEtWjAtOV9dXSwgW19dKV0pCisKKworIyBfTFRfU0VUX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBvcHRpb24gT1BUSU9OLU5BTUUgZm9yIG1hY3JvIE1BQ1JPLU5BTUUsIGFuZCBpZiB0aGVyZSBpcyBhCisjIG1hdGNoaW5nIGhhbmRsZXIgZGVmaW5lZCwgZGlzcGF0Y2ggdG8gaXQuICBPdGhlciBPUFRJT04tTkFNRXMgYXJlCisjIHNhdmVkIGFzIGEgZmxhZy4KK200X2RlZmluZShbX0xUX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSlkbmwKK200X2lmZGVmKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgICAgIF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgW200X3dhcm5pbmcoW1Vua25vd24gJDEgb3B0aW9uIGAkMiddKV0pW11kbmwKK10pCisKKworIyBfTFRfSUZfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgorbTRfZGVmaW5lKFtfTFRfSUZfT1BUSU9OXSwKK1ttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSwgWyQzXSwgWyQ0XSldKQorCisKKyMgX0xUX1VOTEVTU19PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNULCBJRi1OT1QtU0VUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtTk9ULVNFVCB1bmxlc3MgYWxsIG9wdGlvbnMgaW4gT1BUSU9OLUxJU1QgZm9yIE1BQ1JPLU5BTUUKKyMgYXJlIHNldC4KK200X2RlZmluZShbX0xUX1VOTEVTU19PUFRJT05TXSwKK1ttNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKwkgICAgW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pLAorCQkgICAgICBbbTRfZGVmaW5lKFskMF9mb3VuZF0pXSldKVtdZG5sCittNF9pZmRlZihbJDBfZm91bmRdLCBbbTRfdW5kZWZpbmUoWyQwX2ZvdW5kXSldLCBbJDMKK10pW11kbmwKK10pCisKKworIyBfTFRfU0VUX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT1BUSU9OLUxJU1QgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBMaWJ0b29sIG9wdGlvbnMgYXNzb2NpYXRlZAorIyB3aXRoIE1BQ1JPLU5BTUUuICBJZiBhbnkgT1BUSU9OIGhhcyBhIG1hdGNoaW5nIGhhbmRsZXIgZGVjbGFyZWQgd2l0aAorIyBMVF9PUFRJT05fREVGSU5FLCBkaXNwYXRjaCB0byB0aGF0IG1hY3JvOyBvdGhlcndpc2UgY29tcGxhaW4gYWJvdXQKKyMgdGhlIHVua25vd24gb3B0aW9uIGFuZCBleGl0LgorbTRfZGVmdW4oW19MVF9TRVRfT1BUSU9OU10sCitbIyBTZXQgb3B0aW9ucworbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisgICAgW19MVF9TRVRfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pXSkKKworbTRfaWYoWyQxXSxbTFRfSU5JVF0sWworICBkbmwKKyAgZG5sIFNpbXBseSBzZXQgc29tZSBkZWZhdWx0IHZhbHVlcyAoaS5lIG9mZikgaWYgYm9vbGVhbiBvcHRpb25zIHdlcmUgbm90CisgIGRubCBzcGVjaWZpZWQ6CisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj1ubworICBdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwgW2VuYWJsZV93aW4zMl9kbGw9bm8KKyAgXSkKKyAgZG5sCisgIGRubCBJZiBubyByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gdmFyaW91cyBwYWlycyBvZiBvcHBvc2luZyBvcHRpb25zLCB0aGVuCisgIGRubCB3ZSBydW4gdGhlIGRlZmF1bHQgbW9kZSBoYW5kbGVyIGZvciB0aGUgcGFpci4gIEZvciBleGFtcGxlLCBpZiBuZWl0aGVyCisgIGRubCBgc2hhcmVkJyBub3IgYGRpc2FibGUtc2hhcmVkJyB3YXMgcGFzc2VkLCB3ZSBlbmFibGUgYnVpbGRpbmcgb2Ygc2hhcmVkCisgIGRubCBhcmNoaXZlcyBieSBkZWZhdWx0OgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc2hhcmVkIGRpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3N0YXRpYyBkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtwaWMtb25seSBuby1waWNdLCBbX0xUX1dJVEhfUElDXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbCBkaXNhYmxlLWZhc3QtaW5zdGFsbF0sCisgIAkJICAgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSkKKyAgXSkKK10pIyBfTFRfU0VUX09QVElPTlMKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1hY3JvcyB0byBoYW5kbGUgTFRfSU5JVCBvcHRpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgX0xUX01BTkdMRV9ERUZVTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9ERUZVTl0sCitbW19MVF9PUFRJT05fREVGVU5fXW00X2JwYXRzdWJzdChtNF90b3VwcGVyKFskMV9fJDJdKSwgW1teQS1aMC05X11dLCBbX10pXSkKKworCisjIExUX09QVElPTl9ERUZJTkUoTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIENPREUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0xUX09QVElPTl9ERUZJTkVdLAorW200X2RlZmluZShfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLCBbJDNdKVtdZG5sCitdKSMgTFRfT1BUSU9OX0RFRklORQorCisKKyMgZGxvcGVuCisjIC0tLS0tLQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj15ZXMKK10pCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGxvcGVuXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGBkbG9wZW4nIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLCBbXSkKKworCisjIHdpbjMyLWRsbAorIyAtLS0tLS0tLS0KKyMgRGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIGRsbCdzLgorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLAorW2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCisgIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzFdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCitdKSMgd2luMzItZGxsCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbd2luMzItZGxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGB3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKKworCisjIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlIGBzaGFyZWQnIGFuZAorIyBgZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc2hhcmVkPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCisKKyAgICBfTFRfREVDTChbYnVpbGRfbGlidG9vbF9saWJzXSwgW2VuYWJsZV9zaGFyZWRdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU0hBUkVECisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzaGFyZWRdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbQUNfRElTQUJMRV9TSEFSRUQoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHN0YXRpYycgYW5kCisjIGBkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCisJW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX29sZF9saWJzXSwgW2VuYWJsZV9zdGF0aWNdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU1RBVElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzdGF0aWNdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYGZhc3QtaW5zdGFsbCcKKyMgYW5kIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCisgICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorCitfTFRfREVDTChbZmFzdF9pbnN0YWxsXSwgW2VuYWJsZV9mYXN0X2luc3RhbGxdLCBbMF0sCisJIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAorXSkjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBVV9ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtmYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworQVVfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKK3RoZSBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorCisKKyMgX0xUX1dJVEhfUElDKFtNT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgcGljLW9ubHknIGFuZCBgbm8tcGljJworIyBMVF9JTklUIG9wdGlvbnMuCisjIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCittNF9kZWZpbmUoW19MVF9XSVRIX1BJQ10sCitbQUNfQVJHX1dJVEgoW3BpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljQDw6QD1QS0dTQDo+QF0sCisJW3RyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIEA8OkBkZWZhdWx0PXVzZSBib3RoQDo+QF0pXSwKKyAgICBbbHRfcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICR3aXRodmFsIGluCisgICAgeWVzfG5vKSBwaWNfbW9kZT0kd2l0aHZhbCA7OworICAgICopCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBsdF9wa2cgaW4gJHdpdGh2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRsdF9wa2ciID0gIlgkbHRfcCI7IHRoZW4KKwkgIHBpY19tb2RlPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW3BpY19tb2RlPWRlZmF1bHRdKQorCit0ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPW00X2RlZmF1bHQoWyQxXSwgW2RlZmF1bHRdKQorCitfTFRfREVDTChbXSwgW3BpY19tb2RlXSwgWzBdLCBbV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGRdKWRubAorXSkjIF9MVF9XSVRIX1BJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3BpYy1vbmx5XSwgW19MVF9XSVRIX1BJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtuby1waWNdLCBbX0xUX1dJVEhfUElDKFtub10pXSkKKworIyBPbGQgbmFtZToKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3BpYy1vbmx5XSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGBwaWMtb25seScgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLCBbXSkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIExURExfSU5JVCBPcHRpb25zICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworCittNF9kZWZpbmUoW19MVERMX01PREVdLCBbXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtub25yZWN1cnNpdmVdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtub25yZWN1cnNpdmVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbcmVjdXJzaXZlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbcmVjdXJzaXZlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3N1YnByb2plY3RdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtzdWJwcm9qZWN0XSldKQorCittNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtpbnN0YWxsYWJsZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2luc3RhbGxhYmxlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2NvbnZlbmllbmNlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbY29udmVuaWVuY2VdKV0pCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9tNC9sdHN1Z2FyLm00IGIvY3VybC03LjI1LjAvbTQvbHRzdWdhci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDAwYTA1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbTQvbHRzdWdhci5tNApAQCAtMCwwICsxLDEyMyBAQAorIyBsdHN1Z2FyLm00IC0tIGxpYnRvb2wgbTQgYmFzZSBsYXllci4gICAgICAgICAgICAgICAgICAgICAgICAgLSotQXV0b2NvbmYtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDYgbHRzdWdhci5tNAorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUU1VHQVJfVkVSU0lPTl0sIFttNF9pZihbMC4xXSldKQorCisKKyMgbHRfam9pbihTRVAsIEFSRzEsIFtBUkcyLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBBUkcxU0VQQVJHMi4uLlNFUEFSR24sIG9taXR0aW5nIFtdIGFyZ3VtZW50cyBhbmQgdGhlaXIKKyMgYXNzb2NpYXRlZCBzZXBhcmF0b3IuCisjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9qb2luIGZyb20gQXV0b2NvbmYgMi42Miwgc2luY2UgYWxsIGVhcmxpZXIKKyMgdmVyc2lvbnMgaW4gbTRzdWdhciBoYWQgYnVncy4KK200X2RlZmluZShbbHRfam9pbl0sCitbbTRfaWYoWyQjXSwgWzFdLCBbXSwKKyAgICAgICBbJCNdLCBbMl0sIFtbJDJdXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQyXV9dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQorbTRfZGVmaW5lKFtfbHRfam9pbl0sCitbbTRfaWYoWyQjJDJdLCBbMl0sIFtdLAorICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDEkMl1dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQorCisKKyMgbHRfY2FyKExJU1QpCisjIGx0X2NkcihMSVNUKQorIyAtLS0tLS0tLS0tLS0KKyMgTWFuaXB1bGF0ZSBtNCBsaXN0cy4KKyMgVGhlc2UgbWFjcm9zIGFyZSBuZWNlc3NhcnkgYXMgbG9uZyBhcyB3aWxsIHN0aWxsIG5lZWQgdG8gc3VwcG9ydAorIyBBdXRvY29uZi0yLjU5IHdoaWNoIHF1b3RlcyBkaWZmZXJlbnRseS4KK200X2RlZmluZShbbHRfY2FyXSwgW1skMV1dKQorbTRfZGVmaW5lKFtsdF9jZHJdLAorW200X2lmKFskI10sIDAsIFttNF9mYXRhbChbJDA6IGNhbm5vdCBiZSBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHNdKV0sCisgICAgICAgWyQjXSwgMSwgW10sCisgICAgICAgW200X2RxdW90ZShtNF9zaGlmdCgkQCkpXSldKQorbTRfZGVmaW5lKFtsdF91bnF1b3RlXSwgJDEpCisKKworIyBsdF9hcHBlbmQoTUFDUk8tTkFNRSwgU1RSSU5HLCBbU0VQQVJBVE9SXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZGVmaW5lIE1BQ1JPLU5BTUUgdG8gaG9sZCBpdHMgZm9ybWVyIGNvbnRlbnQgcGx1cyBgU0VQQVJBVE9SJ2BTVFJJTkcnLgorIyBOb3RlIHRoYXQgbmVpdGhlciBTRVBBUkFUT1Igbm9yIFNUUklORyBhcmUgZXhwYW5kZWQ7IHRoZXkgYXJlIGFwcGVuZGVkCisjIHRvIE1BQ1JPLU5BTUUgYXMgaXMgKGxlYXZpbmcgdGhlIGV4cGFuc2lvbiBmb3Igd2hlbiBNQUNSTy1OQU1FIGlzIGludm9rZWQpLgorIyBObyBTRVBBUkFUT1IgaXMgb3V0cHV0IGlmIE1BQ1JPLU5BTUUgd2FzIHByZXZpb3VzbHkgdW5kZWZpbmVkIChkaWZmZXJlbnQKKyMgdGhhbiBkZWZpbmVkIGFuZCBlbXB0eSkuCisjCisjIFRoaXMgbWFjcm8gaXMgbmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIEF1dG9jb25mIDIuNjIsIHNpbmNlIGVhcmxpZXIKKyMgdmVyc2lvbnMgb2YgbTRzdWdhciBtaXN0YWtlbmx5IGV4cGFuZGVkIFNFUEFSQVRPUiBidXQgbm90IFNUUklORy4KK200X2RlZmluZShbbHRfYXBwZW5kXSwKK1ttNF9kZWZpbmUoWyQxXSwKKwkgICBtNF9pZmRlZihbJDFdLCBbbTRfZGVmbihbJDFdKVskM11dKVskMl0pXSkKKworCisKKyMgbHRfY29tYmluZShTRVAsIFBSRUZJWC1MSVNULCBJTkZJWCwgU1VGRklYMSwgW1NVRkZJWDIuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgYSBTRVAgZGVsaW1pdGVkIGxpc3Qgb2YgYWxsIHBhaXJlZCBjb21iaW5hdGlvbnMgb2YgZWxlbWVudHMgb2YKKyMgUFJFRklYLUxJU1Qgd2l0aCBTVUZGSVgxIHRocm91Z2ggU1VGRklYbi4gIEVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdAorIyBoYXMgdGhlIGZvcm0gUFJFRklYbUlORklYU1VGRklYbi4KKyMgTmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIG00X2NvbWJpbmUgYWRkZWQgaW4gQXV0b2NvbmYgMi42Mi4KK200X2RlZmluZShbbHRfY29tYmluZV0sCitbbTRfaWYobTRfZXZhbChbJCMgPiAzXSksIFsxXSwKKyAgICAgICBbbTRfcHVzaGRlZihbX0x0X3NlcF0sIFttNF9kZWZpbmUoW19MdF9zZXBdLCBtNF9kZWZuKFtsdF9jYXJdKSldKV1dZG5sCitbW200X2ZvcmVhY2goW19MdF9wcmVmaXhdLCBbJDJdLAorCSAgICAgW200X2ZvcmVhY2goW19MdF9zdWZmaXhdLAorCQldbTRfZHF1b3RlKG00X2RxdW90ZShtNF9zaGlmdChtNF9zaGlmdChtNF9zaGlmdCgkQCkpKSkpWywKKwlbX0x0X3NlcChbJDFdKVtdbTRfZGVmbihbX0x0X3ByZWZpeF0pWyQzXW00X2RlZm4oW19MdF9zdWZmaXhdKV0pXSldKV0pCisKKworIyBsdF9pZl9hcHBlbmRfdW5pcShNQUNSTy1OQU1FLCBWQVJOQU1FLCBbU0VQQVJBVE9SXSwgW1VOSVFdLCBbTk9ULVVOSVFdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZmYgTUFDUk8tTkFNRSBkb2VzIG5vdCB5ZXQgY29udGFpbiBWQVJOQU1FLCB0aGVuIGFwcGVuZCBpdCAoZGVsaW1pdGVkCisjIGJ5IFNFUEFSQVRPUiBpZiBzdXBwbGllZCkgYW5kIGV4cGFuZCBVTklRLCBlbHNlIE5PVC1VTklRLgorbTRfZGVmaW5lKFtsdF9pZl9hcHBlbmRfdW5pcV0sCitbbTRfaWZkZWYoWyQxXSwKKwkgIFttNF9pZihtNF9pbmRleChbJDNdbTRfZGVmbihbJDFdKVskM10sIFskMyQyJDNdKSwgWy0xXSwKKwkJIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0sCisJCSBbJDVdKV0sCisJICBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdKV0pCisKKworIyBsdF9kaWN0X2FkZChESUNULCBLRVksIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2FkZF0sCitbbTRfZGVmaW5lKFskMSgkMildLCBbJDNdKV0pCisKKworIyBsdF9kaWN0X2FkZF9zdWJrZXkoRElDVCwgS0VZLCBTVUJLRVksIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2FkZF9zdWJrZXldLAorW200X2RlZmluZShbJDEoJDI6JDMpXSwgWyQ0XSldKQorCisKKyMgbHRfZGljdF9mZXRjaChESUNULCBLRVksIFtTVUJLRVldKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfZmV0Y2hdLAorW200X2lmdmFsKFskM10sCisJbTRfaWZkZWYoWyQxKCQyOiQzKV0sIFttNF9kZWZuKFskMSgkMjokMyldKV0pLAorICAgIG00X2lmZGVmKFskMSgkMildLCBbbTRfZGVmbihbJDEoJDIpXSldKSldKQorCisKKyMgbHRfaWZfZGljdF9mZXRjaChESUNULCBLRVksIFtTVUJLRVldLCBWQUxVRSwgSUYtVFJVRSwgW0lGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfaWZfZGljdF9mZXRjaF0sCitbbTRfaWYobHRfZGljdF9mZXRjaChbJDFdLCBbJDJdLCBbJDNdKSwgWyQ0XSwKKwlbJDVdLAorICAgIFskNl0pXSkKKworCisjIGx0X2RpY3RfZmlsdGVyKERJQ1QsIFtTVUJLRVldLCBWQUxVRSwgW1NFUEFSQVRPUl0sIEtFWSwgWy4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfZmlsdGVyXSwKK1ttNF9pZihbJDVdLCBbXSwgW10sCisgIFtsdF9qb2luKG00X3F1b3RlKG00X2RlZmF1bHQoWyQ0XSwgW1ssIF1dKSksCisgICAgICAgICAgIGx0X3VucXVvdGUobTRfc3BsaXQobTRfbm9ybWFsaXplKG00X2ZvcmVhY2goX0x0X2tleSwgbHRfY2FyKFttNF9zaGlmdG4oNCwgJEApXSksCisJCSAgICAgIFtsdF9pZl9kaWN0X2ZldGNoKFskMV0sIF9MdF9rZXksIFskMl0sIFskM10sIFtfTHRfa2V5IF0pXSkpKSkpXSlbXWRubAorXSkKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL200L2x0dmVyc2lvbi5tNCBiL2N1cmwtNy4yNS4wL200L2x0dmVyc2lvbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2E4NjAyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbTQvbHR2ZXJzaW9uLm00CkBAIC0wLDAgKzEsMjMgQEAKKyMgbHR2ZXJzaW9uLm00IC0tIHZlcnNpb24gbnVtYmVycwkJCS0qLSBBdXRvY29uZiAtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBTY290dCBKYW1lcyBSZW1uYW50LCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBAY29uZmlndXJlX2lucHV0QAorCisjIHNlcmlhbCAzMzM3IGx0dmVyc2lvbi5tNAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbAorCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjQuMl0pCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMS4zMzM3XSkKKworQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKK1ttYWNyb192ZXJzaW9uPScyLjQuMicKK21hY3JvX3JldmlzaW9uPScxLjMzMzcnCitfTFRfREVDTCgsIG1hY3JvX3ZlcnNpb24sIDAsIFtXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/XSkKK19MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCitdKQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbTQvbHR+b2Jzb2xldGUubTQgYi9jdXJsLTcuMjUuMC9tNC9sdH5vYnNvbGV0ZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTczZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbTQvbHR+b2Jzb2xldGUubTQKQEAgLTAsMCArMSw5OCBAQAorIyBsdH5vYnNvbGV0ZS5tNCAtLSBhY2xvY2FsIHNhdGlzZnlpbmcgb2Jzb2xldGUgZGVmaW5pdGlvbnMuICAgIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNC4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1IGx0fm9ic29sZXRlLm00CisKKyMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorIworIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTikKKyMgd2hpY2ggaGF2ZSBsYXRlciBiZWVuIGNoYW5nZWQgdG8gbTRfZGVmaW5lIGFzIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlCisjIGV4cG9ydGVkIEFQSSwgb3IgbW92ZWQgdG8gQXV0b2NvbmYgb3IgQXV0b21ha2Ugd2hlcmUgdGhleSBiZWxvbmcuCisjCisjIFRoZSB0cm91YmxlIGlzLCBhY2xvY2FsIGlzIGEgYml0IHRoaWNrLiAgSXQnbGwgc2VlIHRoZSBvbGQgQUNfREVGVU4KKyMgaW4gL3Vzci9zaGFyZS9hY2xvY2FsL2xpYnRvb2wubTQgYW5kIHJlbWVtYmVyIGl0LCB0aGVuIHdoZW4gaXQgc2VlcyB1cworIyB1c2luZyBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBvdXIgbG9jYWwgbTQvbGlidG9vbC5tNCBpdCdsbAorIyBwdWxsIHRoZSBvbGQgbGlidG9vbC5tNCBpbiAoaXQgZG9lc24ndCBzZWUgb3VyIHNoaW55IG5ldyBtNF9kZWZpbmUKKyMgYW5kIGRvZXNuJ3Qga25vdyBhYm91dCBBdXRvY29uZiBtYWNyb3MgYXQgYWxsLikKKyMKKyMgU28gd2UgcHJvdmlkZSB0aGlzIGZpbGUsIHdoaWNoIGhhcyBhIHNpbGx5IGZpbGVuYW1lIHNvIGl0J3MgYWx3YXlzCisjIGluY2x1ZGVkIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4gIFRoaXMgcHJvdmlkZXMgYWNsb2NhbCB3aXRoIHRoZQorIyBBQ19ERUZVTnMgaXQgd2FudHMsIGJ1dCB3aGVuIG00IHByb2Nlc3NlcyBpdCwgaXQgZG9lc24ndCBkbyBhbnl0aGluZworIyBiZWNhdXNlIHRob3NlIG1hY3JvcyBhbHJlYWR5IGV4aXN0LCBvciB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorIyBXZSB1c2UgQUNfREVGVU4gb3ZlciBBVV9ERUZVTiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFjbG9jYWwtMS42LiAKKyMKKyMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCisjIFllcywgdGhhdCBtZWFucyBldmVyeSBuYW1lIG9uY2UgdGFrZW4gd2lsbCBuZWVkIHRvIHJlbWFpbiBoZXJlIHVudGlsCisjIHdlIGdpdmUgdXAgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIGJlZm9yZSAxLjcsIGF0IHdoaWNoIHBvaW50CisjIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT0JTT0xFVEVfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0pXSkKK200X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NIRUxMX0lOSVRdLAkJW0FDX0RFRlVOKFtfTFRfQUNfU0hFTExfSU5JVF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfTFRNQUlOXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfTFRNQUlOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVEFHVkFSXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbQUNfTFRETF9QUkVPUEVOXSwJCVtBQ19ERUZVTihbQUNfTFRETF9QUkVPUEVOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTE9DS10sCQlbQUNfREVGVU4oW19MVF9BQ19MT0NLXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAlbQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xURExfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSldKQorbTRfaWZuZGVmKFtBQ19QQVRIX01BR0lDXSwJCVtBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9HTlVdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10sCVtBQ19ERUZVTihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pXSkKK200X2lmbmRlZihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAlbQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSldKQorbTRfaWZuZGVmKFtMVF9BQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19FR1JFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19TRURdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0pXSkKK200X2lmbmRlZihbX0xUX0NDX0JBU0VOQU1FXSwJCVtBQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSldKQorbTRfaWZuZGVmKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0FDX1BST0dfTElCVE9PTF0sCQlbQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU0VUVVBdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAkJW0FDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR0NPTkZJR10sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdDT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfQ09ORklHXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19GSUxFX0xURExMX0NdLAlbQUNfREVGVU4oW19MVF9BQ19GSUxFX0xURExMX0NdKV0pCittNF9pZm5kZWYoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSwJW0FDX0RFRlVOKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pXSkKK200X2lmbmRlZihbX0xUX0FDX1BST0dfQ1hYQ1BQXSwJCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfQ1hYQ1BQXSldKQorbTRfaWZuZGVmKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10sCVtBQ19ERUZVTihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfRjc3XSwJCVtBQ19ERUZVTihbX0xUX1BST0dfRjc3XSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19GQ10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0ZDXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19DWFhdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19DWFhdKV0pCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9tNC94Yy10cmFuc2xpdC5tNCBiL2N1cmwtNy4yNS4wL200L3hjLXRyYW5zbGl0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MThmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9tNC94Yy10cmFuc2xpdC5tNApAQCAtMCwwICsxLDE2NCBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyB4Yy10cmFuc2xpdC5tNAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgRGFuaWVsIFN0ZW5iZXJnIDxkYW5pZWxAaGF4eC5zZT4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisjIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyMgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBGaWxlIHZlcnNpb24gZm9yICdhY2xvY2FsJyB1c2UuIEtlZXAgaXQgYSBzaW5nbGUgbnVtYmVyLgorIyBzZXJpYWwgMgorCisKK2RubCBYQ19TSF9UUl9TSCAoZXhwcmVzc2lvbikKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2hlbGwgZXhlY3V0aW9uIHRpbWUgdHJhbnNsaXRlcmF0aW9uIG9mICdleHByZXNzaW9uJworZG5sIGFyZ3VtZW50LCB3aGVyZSBhbGwgbm9uLWFsZmFudW1lcmljIGNoYXJhY3RlcnMgYXJlCitkbmwgY29udmVydGVkIHRvIHRoZSB1bmRlcnNjb3JlICdfJyBjaGFyYWN0ZXIuCitkbmwgTm9ybWFsIHNoZWxsIGV4cGFuc2lvbiBhbmQgc3Vic3RpdHV0aW9uIHRha2VzIHBsYWNlCitkbmwgZm9yIGdpdmVuICdleHByZXNzaW9uJyBhdCBzaGVsbCBleGVjdXRpb24gdGltZSBiZWZvcmUKK2RubCB0cmFuc2xpdGVyYXRpb24gaXMgYXBwbGllZCB0byBpdC4KKworQUNfREVGVU4oW1hDX1NIX1RSX1NIXSwKK1tgZWNobyAiJDEiIHwgc2VkICdzL1tbXmEtekEtWjAtOV9dXS9fL2cnYF0pCisKKworZG5sIFhDX1NIX1RSX1NIX0VYIChleHByZXNzaW9uLCBbZXh0cmFdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBMaWtlIFhDX1NIX1RSX1NIIGJ1dCB0cmFuc2xpdGVyYXRpbmcgY2hhcmFjdGVycworZG5sIGdpdmVuIGluICdleHRyYScgYXJndW1lbnQgdG8gbG93ZXJjYXNlICdwJy4gRm9yCitkbmwgZXhhbXBsZSBbKitdLCBbKl0sIGFuZCBbK10gYXJlIHZhbGlkICdleHRyYScgYXJncy4KKworQUNfREVGVU4oW1hDX1NIX1RSX1NIX0VYXSwKK1tpZmVsc2UoWyQyXSwgW10sCisgIFtYQ19TSF9UUl9TSChbJDFdKV0sCisgIFtgZWNobyAiJDEiIHwgc2VkICdzL1tbJDJdXS9wL2cnIHwgc2VkICdzL1tbXmEtekEtWjAtOV9dXS9fL2cnYF0pXSkKKworCitkbmwgWENfTTRfVFJfU0ggKGV4cHJlc3Npb24pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIG00IGV4ZWN1dGlvbiB0aW1lIHRyYW5zbGl0ZXJhdGlvbiBvZiAnZXhwcmVzc2lvbicKK2RubCBhcmd1bWVudCwgd2hlcmUgYWxsIG5vbi1hbGZhbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZQorZG5sIGNvbnZlcnRlZCB0byB0aGUgdW5kZXJzY29yZSAnXycgY2hhcmFjdGVyLgorCitBQ19ERUZVTihbWENfTTRfVFJfU0hdLAorW3BhdHN1YnN0KFhDX1FQQVRTVUJTVChYQ19RVU9URSgkMSksCisgICAgICAgICAgICAgICAgICAgICAgIFtbXmEtekEtWjAtOV9dXSwgW19dKSwKKyAgICAgICAgICBbXChfXCguKlwpX1wpXSwgW1wyXSldKQorCisKK2RubCBYQ19NNF9UUl9TSF9FWCAoZXhwcmVzc2lvbiwgW2V4dHJhXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgTGlrZSBYQ19NNF9UUl9TSCBidXQgdHJhbnNsaXRlcmF0aW5nIGNoYXJhY3RlcnMKK2RubCBnaXZlbiBpbiAnZXh0cmEnIGFyZ3VtZW50IHRvIGxvd2VyY2FzZSAncCcuIEZvcgorZG5sIGV4YW1wbGUgWyorXSwgWypdLCBhbmQgWytdIGFyZSB2YWxpZCAnZXh0cmEnIGFyZ3MuCisKK0FDX0RFRlVOKFtYQ19NNF9UUl9TSF9FWF0sCitbaWZlbHNlKFskMl0sIFtdLAorICBbWENfTTRfVFJfU0goWyQxXSldLAorICBbcGF0c3Vic3QoWENfUVBBVFNVQlNUKFhDX1FQQVRTVUJTVChYQ19RVU9URSgkMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbJDJdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbW15hLXpBLVowLTlfXV0sIFtfXSksCisgICAgICAgICAgICBbXChfXCguKlwpX1wpXSwgW1wyXSldKV0pCisKKworZG5sIFhDX1NIX1RSX0NQUCAoZXhwcmVzc2lvbikKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2hlbGwgZXhlY3V0aW9uIHRpbWUgdHJhbnNsaXRlcmF0aW9uIG9mICdleHByZXNzaW9uJworZG5sIGFyZ3VtZW50LCB3aGVyZSBhbGwgbm9uLWFsZmFudW1lcmljIGNoYXJhY3RlcnMgYXJlCitkbmwgY29udmVydGVkIHRvIHRoZSB1bmRlcnNjb3JlICdfJyBjaGFyYWN0ZXIgYW5kIGFsbnVtCitkbmwgY2hhcmFjdGVycyBhcmUgY29udmVydGVkIHRvIHVwcGVyY2FzZS4KK2RubCBOb3JtYWwgc2hlbGwgZXhwYW5zaW9uIGFuZCBzdWJzdGl0dXRpb24gdGFrZXMgcGxhY2UKK2RubCBmb3IgZ2l2ZW4gJ2V4cHJlc3Npb24nIGF0IHNoZWxsIGV4ZWN1dGlvbiB0aW1lIGJlZm9yZQorZG5sIHRyYW5zbGl0ZXJhdGlvbiBpcyBhcHBsaWVkIHRvIGl0LgorCitBQ19ERUZVTihbWENfU0hfVFJfQ1BQXSwKK1tgZWNobyAiJDEiIHwgZG5sCitzZWQgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJyB8IGRubAorc2VkICdzL1tbXkEtWjAtOV9dXS9fL2cnYF0pCisKKworZG5sIFhDX1NIX1RSX0NQUF9FWCAoZXhwcmVzc2lvbiwgW2V4dHJhXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgTGlrZSBYQ19TSF9UUl9DUFAgYnV0IHRyYW5zbGl0ZXJhdGluZyBjaGFyYWN0ZXJzCitkbmwgZ2l2ZW4gaW4gJ2V4dHJhJyBhcmd1bWVudCB0byB1cHBlcmNhc2UgJ1AnLiBGb3IKK2RubCBleGFtcGxlIFsqK10sIFsqXSwgYW5kIFsrXSBhcmUgdmFsaWQgJ2V4dHJhJyBhcmdzLgorCitBQ19ERUZVTihbWENfU0hfVFJfQ1BQX0VYXSwKK1tpZmVsc2UoWyQyXSwgW10sCisgIFtYQ19TSF9UUl9DUFAoWyQxXSldLAorICBbYGVjaG8gIiQxIiB8IGRubAorc2VkICdzL1tbJDJdXS9QL2cnIHwgZG5sCitzZWQgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJyB8IGRubAorc2VkICdzL1tbXkEtWjAtOV9dXS9fL2cnYF0pXSkKKworCitkbmwgWENfTTRfVFJfQ1BQIChleHByZXNzaW9uKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBtNCBleGVjdXRpb24gdGltZSB0cmFuc2xpdGVyYXRpb24gb2YgJ2V4cHJlc3Npb24nCitkbmwgYXJndW1lbnQsIHdoZXJlIGFsbCBub24tYWxmYW51bWVyaWMgY2hhcmFjdGVycyBhcmUKK2RubCBjb252ZXJ0ZWQgdG8gdGhlIHVuZGVyc2NvcmUgJ18nIGNoYXJhY3RlciBhbmQgYWxudW0KK2RubCBjaGFyYWN0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLgorCitBQ19ERUZVTihbWENfTTRfVFJfQ1BQXSwKK1twYXRzdWJzdChYQ19RUEFUU1VCU1QoWENfUVRSQU5TTElUKFhDX1FVT1RFKCQxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5el0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgW1teQS1aMC05X11dLCBbX10pLAorICAgICAgICAgIFtcKF9cKC4qXClfXCldLCBbXDJdKV0pCisKKworZG5sIFhDX000X1RSX0NQUF9FWCAoZXhwcmVzc2lvbiwgW2V4dHJhXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgTGlrZSBYQ19NNF9UUl9DUFAgYnV0IHRyYW5zbGl0ZXJhdGluZyBjaGFyYWN0ZXJzCitkbmwgZ2l2ZW4gaW4gJ2V4dHJhJyBhcmd1bWVudCB0byB1cHBlcmNhc2UgJ1AnLiBGb3IKK2RubCBleGFtcGxlIFsqK10sIFsqXSwgYW5kIFsrXSBhcmUgdmFsaWQgJ2V4dHJhJyBhcmdzLgorCitBQ19ERUZVTihbWENfTTRfVFJfQ1BQX0VYXSwKK1tpZmVsc2UoWyQyXSwgW10sCisgIFtYQ19NNF9UUl9DUFAoWyQxXSldLAorICBbcGF0c3Vic3QoWENfUVBBVFNVQlNUKFhDX1FUUkFOU0xJVChYQ19RUEFUU1VCU1QoWENfUVVPVEUoJDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1skMl1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1BdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW1teQS1aMC05X11dLCBbX10pLAorICAgICAgICAgICAgW1woX1woLipcKV9cKV0sIFtcMl0pXSldKQorCisKK2RubCBYQ19RVU9URSAoZXhwcmVzc2lvbikKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgRXhwYW5kcyB0byBxdW90ZWQgcmVzdWx0IG9mICdleHByZXNzaW9uJyBleHBhbnNpb24uCisKK0FDX0RFRlVOKFtYQ19RVU9URV0sCitbWyRAXV0pCisKKworZG5sIFhDX1FQQVRTVUJTVCAoc3RyaW5nLCByZWdleHBbLCByZXBsXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgRXhwYW5kcyB0byBxdW90ZWQgcmVzdWx0IG9mICdwYXRzdWJzdCcgZXhwYW5zaW9uLgorCitBQ19ERUZVTihbWENfUVBBVFNVQlNUXSwKK1tYQ19RVU9URShwYXRzdWJzdChbJDFdLCBbJDJdLCBbJDNdKSldKQorCisKK2RubCBYQ19RVFJBTlNMSVQgKHN0cmluZywgY2hhcnMsIHJlcGwpCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIEV4cGFuZHMgdG8gcXVvdGVkIHJlc3VsdCBvZiAndHJhbnNsaXQnIGV4cGFuc2lvbi4KKworQUNfREVGVU4oW1hDX1FUUkFOU0xJVF0sCitbWENfUVVPVEUodHJhbnNsaXQoWyQxXSwgWyQyXSwgWyQzXSkpXSkKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbTQveno1MC14Yy1vdnIubTQgYi9jdXJsLTcuMjUuMC9tNC96ejUwLXhjLW92ci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTlhZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbTQveno1MC14Yy1vdnIubTQKQEAgLTAsMCArMSw2MCBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyB6ejUwLXhjLW92ci5tNAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgRGFuaWVsIFN0ZW5iZXJnIDxkYW5pZWxAaGF4eC5zZT4KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisjIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyMgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyMgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyMgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBzZXJpYWwgMQorCisKK2RubCBUaGUgZnVubnkgbmFtZSBvZiB0aGlzIGZpbGUgaXMgaW50ZW50aW9uYWwgaW4gb3JkZXIgdG8gbWFrZSBpdAorZG5sIHNvcnQgYWxwaGFiZXRpY2FsbHkgYWZ0ZXIgYW55IGxpYnRvb2wsIGF1dG9jb25mIG9yIGF1dG9tYWtlCitkbmwgcHJvdmlkZWQgLm00IG1hY3JvIGZpbGUgdGhhdCBtaWdodCBnZXQgY29waWVkIGludG8gdGhpcyBzYW1lCitkbmwgc3ViZGlyZWN0b3J5LiBUaGlzIGFsbG93cyB0aGF0IG1hY3JvIChyZSlkZWZpbml0aW9ucyBmcm9tIHRoaXMKK2RubCBmaWxlIG1heSBvdmVycmlkZSB0aG9zZSBwcm92aWRlZCBpbiBvdGhlciBmaWxlcy4KKworCitkbmwgT3ZlcnJpZGUgc29tZSBsYW5ndWFnZSByZWxhdGVkIG1hY3JvcworZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBMaWJ0b29sIDEuNS5YIGZyb20gZG9pbmcKK2RubCB1bm5lY2VzYXJ5IEMrKywgRm9ydHJhbiBhbmQgSmF2YSB0ZXN0cyB3aGVuIG9ubHkKK2RubCB1c2luZyBDIGxhbmd1YWdlIGFuZCByZWR1Y2UgcmVzdWx0aW5nIGNvbmZpZ3VyZQorZG5sIHNjcmlwdCBieSBuZWFybHkgMzAwIEtiLgorCittNF9pZmRlZihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLAorICBbbTRfdW5kZWZpbmUoW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSldKQorbTRfZGVmaW5lKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10sWzpdKQorCittNF9pZmRlZihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLAorICBbbTRfdW5kZWZpbmUoW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSldKQorbTRfZGVmaW5lKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sWzpdKQorCittNF9pZmRlZihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddLAorICBbbTRfdW5kZWZpbmUoW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSldKQorbTRfZGVmaW5lKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10sWzpdKQorCisKK2RubCBYQ19PVlJfWlo1MAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQbGFjaW5nIGEgY2FsbCB0byB0aGlzIG1hY3JvIGluIGNvbmZpZ3VyZS5hYyB3aWxsCitkbmwgbWFrZSBtYWNyb3MgaW4gdGhpcyBmaWxlIHZpc2libGUgdG8gb3RoZXIgbWFjcm9zCitkbmwgdXNlZCBmb3Igc2FtZSBjb25maWd1cmUgc2NyaXB0LCBvdmVycmlkaW5nIHRob3NlCitkbmwgcHJvdmlkZWQgZWxzZXdoZXJlLgorCitBQ19ERUZVTihbWENfT1ZSX1paNTBdLAorICBbQUNfQkVGT1JFKFskMF0sW0FDX1BST0dfTElCVE9PTF0pXSkKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbWFrZXRneiBiL2N1cmwtNy4yNS4wL21ha2V0Z3oKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWM2MzlmOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL21ha2V0Z3oKQEAgLTAsMCArMSwxODkgQEAKKyMhIC9iaW4vc2gKKyMgU2NyaXB0IHRvIGJ1aWxkIHJlbGVhc2UtYXJjaGl2ZXMgd2l0aC4gTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgYSBjaGVja291dAorIyBmcm9tIGdpdCBhbmQgeW91IHNob3VsZCBmaXJzdCBydW4gLi9idWlsZGNvbmYgYW5kIGJ1aWxkIGN1cmwgb25jZS4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit2ZXJzaW9uPSQxCisKK2lmIFsgLXogIiR2ZXJzaW9uIiBdOyB0aGVuCisgIGVjaG8gIlNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciEiCisgIGV4aXQKK2ZpCisKK2xpYnZlcnNpb249IiR2ZXJzaW9uIgorCisjIHdlIG1ha2UgY3VybCB0aGUgc2FtZSB2ZXJzaW9uIGFzIGxpYmN1cmwKK2N1cmx2ZXJzaW9uPSRsaWJ2ZXJzaW9uCisKK21ham9yPWBlY2hvICRsaWJ2ZXJzaW9uIHxjdXQgLWQuIC1mMSB8IHNlZCAtZSAicy9bXjAtOV0vL2ciYAorbWlub3I9YGVjaG8gJGxpYnZlcnNpb24gfGN1dCAtZC4gLWYyIHwgc2VkIC1lICJzL1teMC05XS8vZyJgCitwYXRjaD1gZWNobyAkbGlidmVyc2lvbiB8Y3V0IC1kLiAtZjMgfCBjdXQgLWQtIC1mMSB8IHNlZCAtZSAicy9bXjAtOV0vL2ciYAorCitudW1lcmljPWBwZXJsIC1lICdwcmludGYoIiUwMnglMDJ4JTAyeFxuIiwgJyIkbWFqb3IsICRtaW5vciwgJHBhdGNoKTsiYAorCitIRUFERVI9aW5jbHVkZS9jdXJsL2N1cmx2ZXIuaAorQ0hFQURFUj1zcmMvdG9vbF92ZXJzaW9uLmgKKworIyByZXF1aXJlcyBhIGRhdGUgY29tbWFuZCB0aGF0IGtub3dzIC11IGZvciBVVEMgdGltZSB6b25lCitkYXRlc3RhbXA9YGRhdGUgLXVgCisKKyMgUmVwbGFjZSB2ZXJzaW9uIG51bWJlciBpbiBoZWFkZXIgZmlsZToKK3NlZCAtZSAncy9eI2RlZmluZSBMSUJDVVJMX1ZFUlNJT04gLiovI2RlZmluZSBMSUJDVVJMX1ZFUlNJT04gIickbGlidmVyc2lvbiciL2cnIFwKKyAgICAtZSAncy9eI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fTlVNIC4qLyNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX05VTSAweCckbnVtZXJpYycvZycgXAorICAgIC1lICdzL14jZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9NQUpPUiAuKi8jZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9NQUpPUiAnJG1ham9yJy9nJyBcCisgICAgLWUgJ3MvXiNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX01JTk9SIC4qLyNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX01JTk9SICckbWlub3InL2cnIFwKKyAgICAtZSAncy9eI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fUEFUQ0ggLiovI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fUEFUQ0ggJyRwYXRjaCcvZycgXAorICAgIC1lICJzL14jZGVmaW5lIExJQkNVUkxfVElNRVNUQU1QIC4qLyNkZWZpbmUgTElCQ1VSTF9USU1FU1RBTVAgXCIkZGF0ZXN0YW1wXCIvZyIgXAorICRIRUFERVIgPiRIRUFERVIuZGlzdAorCisjIFJlcGxhY2UgdmVyc2lvbiBudW1iZXIgaW4gaGVhZGVyIGZpbGU6CitzZWQgJ3MvI2RlZmluZSBDVVJMX1ZFUlNJT04gLiovI2RlZmluZSBDVVJMX1ZFUlNJT04gIickY3VybHZlcnNpb24nIi9nJyAkQ0hFQURFUiA+JENIRUFERVIuZGlzdAorCisjIEdlbmVyYXRlIFZDOCwgVkM5LCBhbmQgVkMxMCB2ZXJzaW9ucyBmcm9tIHRoZSBWQzYgTWFrZWZpbGUgdmVyc2lvbnMKK2ZvciB2ZXIgaW4gdmM4IHZjOSB2YzEwOyBkbworICBtYWtlIC1mIE1ha2VmaWxlLmRpc3QgJHZlcgorICBtdiBzcmMvTWFrZWZpbGUuJHZlciBzcmMvTWFrZWZpbGUuJHZlci5kaXN0CisgIG12IGxpYi9NYWtlZmlsZS4kdmVyIGxpYi9NYWtlZmlsZS4kdmVyLmRpc3QKK2RvbmUKKworIyBSZXBsYWNlIHZlcnNpb24gbnVtYmVyIGluIHBsaXN0IGZpbGU6CitQTElTVD1saWIvbGliY3VybC5wbGlzdAorc2VkICJzLzdcLjEyXC4zLyRsaWJ2ZXJzaW9uL2ciICRQTElTVCA+ICRQTElTVC5kaXN0CisKK2VjaG8gImN1cmwgdmVyc2lvbiAkY3VybHZlcnNpb24iCitlY2hvICJsaWJjdXJsIHZlcnNpb24gJGxpYnZlcnNpb24iCitlY2hvICJsaWJjdXJsIG51bWVyaWNhbCAkbnVtZXJpYyIKK2VjaG8gImRhdGVzdGFtcCAkZGF0ZXN0YW1wIgorCitmaW5kcHJvZygpCit7CisgIGZpbGU9IiQxIgorICBmb3IgcGFydCBpbiBgZWNobyAkUEFUSHwgdHIgJzonICcgJ2A7IGRvCisgICAgcGF0aD0iJHBhcnQvJGZpbGUiCisgICAgaWYgWyAteCAiJHBhdGgiIF07IHRoZW4KKyAgICAgICMgdGhlcmUgaXQgaXMhCisgICAgICByZXR1cm4gMQorICAgIGZpCisgIGRvbmUKKworICAjIG5vIHN1Y2ggZXhlY3V0YWJsZQorICByZXR1cm4gMAorfQorCitlY2hvICJtYWtldGd6OiBjcCBsaWIvY3VybF9jb25maWcuaC5pbiBzcmMvY3VybF9jb25maWcuaC5pbiIKK2NwIGxpYi9jdXJsX2NvbmZpZy5oLmluIHNyYy9jdXJsX2NvbmZpZy5oLmluCisKK2VjaG8gIm1ha2V0Z3o6IGNwIGxpYi9jb25maWctd2luMzIuaCBzcmMvY29uZmlnLXdpbjMyLmgiCitjcCBsaWIvY29uZmlnLXdpbjMyLmggc3JjL2NvbmZpZy13aW4zMi5oCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgRW5mb3JjZSBhIHJlcnVuIG9mIGNvbmZpZ3VyZSAodXBkYXRlcyB0aGUgVkVSU0lPTikKKyMKKworZWNobyAiUmUtcnVubmluZyBjb25maWcuc3RhdHVzIgorLi9jb25maWcuc3RhdHVzIC0tcmVjaGVjayA+L2Rldi9udWxsCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgYXV0b21ha2UgaXMgbmVlZGVkIHRvIHJ1biB0byBtYWtlIGEgbm9uLUdOVSBNYWtlZmlsZS5pbiBpZiBNYWtlZmlsZS5hbSBoYXMKKyMgYmVlbiBtb2RpZmllZC4KKyMKKworaWYgeyBmaW5kcHJvZyBhdXRvbWFrZSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB9IHRoZW4KKyAgZWNobyAiLSBDb3VsZCBub3QgZmluZCBvciBydW4gYXV0b21ha2UsIEkgaG9wZSB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZyEiCitlbHNlCisgIGVjaG8gIlJ1bnMgYXV0b21ha2UgLS1pbmNsdWRlLWRlcHMiCisgIGF1dG9tYWtlIC0taW5jbHVkZS1kZXBzIE1ha2VmaWxlID4vZGV2L251bGwKK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgTWFrZSBzdXJlIHdlIGhhdmUgdXBkYXRlZCBIVE1MIHZlcnNpb25zIG9mIGFsbCBtYW4gcGFnZXM6CisjCitlY2hvICJtYWtlIGh0bWwiCittYWtlIC1zIGh0bWwKKworIyBBbmQgdGhlIFBERiB2ZXJzaW9ucworZWNobyAibWFrZSBwZGYiCittYWtlIC1zIHBkZgorCitlY2hvICJwcm9kdWNlIENIQU5HRVMiCitnaXQgbG9nIC0tcHJldHR5PWZ1bGxlciAtLW5vLWNvbG9yIC0tZGF0ZT1zaG9ydCAtLWRlY29yYXRlPWZ1bGwgLTEwMDAgfCAuL2xvZzJjaGFuZ2VzLnBsID4gQ0hBTkdFUy5kaXN0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgTm93IHJ1biBtYWtlIGRpc3QgdG8gZ2VuZXJhdGUgYSB0YXIuZ3ogYXJjaGl2ZQorIworCitlY2hvICJtYWtlIGRpc3QiCit0YXJnej0iY3VybC0kdmVyc2lvbi50YXIuZ3oiCittYWtlIC1zIGRpc3QgVkVSU0lPTj0kdmVyc2lvbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIE5vdyBtYWtlIGEgYnoyIGFyY2hpdmUgZnJvbSB0aGUgdGFyLmd6IG9yaWdpbmFsCisjCisKK2J6aXAyPSJjdXJsLSR2ZXJzaW9uLnRhci5iejIiCitlY2hvICJHZW5lcmF0aW5nICRiemlwMiIKK2d6aXAgLWRjICR0YXJneiB8IGJ6aXAyIC0tYmVzdCAtID4gJGJ6aXAyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgTm93IG1ha2UgYW4gbHptYSBhcmNoaXZlIGZyb20gdGhlIHRhci5neiBvcmlnaW5hbAorIworCitsem1hPSJjdXJsLSR2ZXJzaW9uLnRhci5sem1hIgorZWNobyAiR2VuZXJhdGluZyAkbHptYSIKK2d6aXAgLWRjICR0YXJneiB8IGx6bWEgLS1iZXN0IC0gPiAkbHptYQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIE5vdyBtYWtlIGEgemlwIGFyY2hpdmUgZnJvbSB0aGUgdGFyLmd6IG9yaWdpbmFsCisjCittYWtlemlwICgpCit7CisgIHJtIC1yZiAkdGVtcGRpcgorICBta2RpciAkdGVtcGRpcgorICBjZCAkdGVtcGRpcgorICBnemlwIC1kYyAuLi8kdGFyZ3ogfCB0YXIgLXhmIC0KKyAgZmluZCAuIHwgemlwICR6aXAgLUAgPi9kZXYvbnVsbAorICBtdiAkemlwIC4uLworICBjZCAuLgorICBybSAtcmYgJHRlbXBkaXIKK30KKworemlwPSJjdXJsLSR2ZXJzaW9uLnppcCIKK2VjaG8gIkdlbmVyYXRpbmcgJHppcCIKK3RlbXBkaXI9Ii5idWlsZGRpciIKK21ha2V6aXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tIgorZWNobyAibWFrZXRneiByZXBvcnQ6IgorZWNobyAiIgorbHMgLWwgJHRhcmd6ICRiemlwMiAkemlwICRsem1hCisKK2VjaG8gIlJ1biB0aGlzOiIKK2VjaG8gImdwZyAtYiAtYSAkdGFyZ3ogJiYgZ3BnIC1iIC1hICRiemlwMiAmJiBncGcgLWIgLWEgJHppcCAmJiBncGcgLWIgLWEgJGx6bWEiCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9taXNzaW5nIGIvY3VybC03LjI1LjAvbWlzc2luZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOWY5ZDk0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvbWlzc2luZwpAQCAtMCwwICsxLDI4MyBAQAorIyEgL2Jpbi9zaAorIyBDb21tb24gc3R1YiBmb3IgYSBmZXcgbWlzc2luZyBHTlUgcHJvZ3JhbXMgd2hpbGUgaW5zdGFsbGluZy4KKyMgQ29weXJpZ2h0IDE5OTYsIDE5OTcsIDE5OTksIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIE9yaWdpbmFsbHkgYnkgRnJhbixjb2lzIFBpbmFyZCA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+LCAxOTk2LgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyMgMDIxMTEtMTMwNywgVVNBLgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgIGV4aXQgMQorZmkKKworcnVuPToKKworIyBJbiB0aGUgY2FzZXMgd2hlcmUgdGhpcyBtYXR0ZXJzLCBgbWlzc2luZycgaXMgYmVpbmcgcnVuIGluIHRoZQorIyBzcmNkaXIgYWxyZWFkeS4KK2lmIHRlc3QgLWYgY29uZmlndXJlLmFjOyB0aGVuCisgIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuYWMKK2Vsc2UKKyAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5pbgorZmkKKworY2FzZSAiJDEiIGluCistLXJ1bikKKyAgIyBUcnkgdG8gcnVuIHJlcXVlc3RlZCBwcm9ncmFtLCBhbmQganVzdCBleGl0IGlmIGl0IHN1Y2NlZWRzLgorICBydW49CisgIHNoaWZ0CisgICIkQCIgJiYgZXhpdCAwCisgIDs7Citlc2FjCisKKyMgSWYgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGZhaWxzIHRvIHJ1biAocG9zc2libHkgYW4gb3V0ZGF0ZWQgdmVyc2lvbiksCisjIHRyeSB0byBlbXVsYXRlIGl0LgorY2FzZSAiJDEiIGluCisKKyAgLWh8LS1ofC0taGV8LS1oZWx8LS1oZWxwKQorICAgIGVjaG8gIlwKKyQwIFtPUFRJT05dLi4uIFBST0dSQU0gW0FSR1VNRU5UXS4uLgorCitIYW5kbGUgXGBQUk9HUkFNIFtBUkdVTUVOVF0uLi4nIGZvciB3aGVuIFBST0dSQU0gaXMgbWlzc2luZywgb3IgcmV0dXJuIGFuCitlcnJvciBzdGF0dXMgaWYgdGhlcmUgaXMgbm8ga25vd24gaGFuZGxpbmcgZm9yIFBST0dSQU0uCisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAtdiwgLS12ZXJzaW9uICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgLS1ydW4gICAgICAgICAgIHRyeSB0byBydW4gdGhlIGdpdmVuIGNvbW1hbmQsIGFuZCBlbXVsYXRlIGl0IGlmIGl0IGZhaWxzCisKK1N1cHBvcnRlZCBQUk9HUkFNIHZhbHVlczoKKyAgYWNsb2NhbCAgICAgIHRvdWNoIGZpbGUgXGBhY2xvY2FsLm00JworICBhdXRvY29uZiAgICAgdG91Y2ggZmlsZSBcYGNvbmZpZ3VyZScKKyAgYXV0b2hlYWRlciAgIHRvdWNoIGZpbGUgXGBjdXJsX2NvbmZpZy5oLmluJworICBhdXRvbWFrZSAgICAgdG91Y2ggYWxsIFxgTWFrZWZpbGUuaW4nIGZpbGVzCisgIGJpc29uICAgICAgICBjcmVhdGUgXGB5LnRhYi5bY2hdJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLltjaF0KKyAgZmxleCAgICAgICAgIGNyZWF0ZSBcYGxleC55eS5jJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLmMKKyAgaGVscDJtYW4gICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZQorICBsZXggICAgICAgICAgY3JlYXRlIFxgbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYworICBtYWtlaW5mbyAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlCisgIHRhciAgICAgICAgICB0cnkgdGFyLCBnbnV0YXIsIGd0YXIsIHRoZW4gdGFyIHdpdGhvdXQgbm9uLXBvcnRhYmxlIGZsYWdzCisgIHlhY2MgICAgICAgICBjcmVhdGUgXGB5LnRhYi5bY2hdJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLltjaF0iCisgICAgOzsKKworICAtdnwtLXZ8LS12ZXwtLXZlcnwtLXZlcnN8LS12ZXJzaXwtLXZlcnNpb3wtLXZlcnNpb24pCisgICAgZWNobyAibWlzc2luZyAwLjMgLSBHTlUgYXV0b21ha2UiCisgICAgOzsKKworICAtKikKKyAgICBlY2hvIDE+JjIgIiQwOiBVbmtub3duIFxgJDEnIG9wdGlvbiIKKyAgICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgICAgZXhpdCAxCisgICAgOzsKKworICBhY2xvY2FsKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbWlzc2luZyBvbiB5b3VyIHN5c3RlbS4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50CisgICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tCisgICAgICAgICBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgdG91Y2ggYWNsb2NhbC5tNAorICAgIDs7CisKKyAgYXV0b2NvbmYpCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyBtaXNzaW5nIG9uIHlvdXIgc3lzdGVtLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZQorICAgICAgICAgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tIGFueSBHTlUKKyAgICAgICAgIGFyY2hpdmUgc2l0ZS4iCisgICAgdG91Y2ggY29uZmlndXJlCisgICAgOzsKKworICBhdXRvaGVhZGVyKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbWlzc2luZyBvbiB5b3VyIHN5c3RlbS4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2NvbmZpZy5oJyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAorICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbQorICAgICAgICAgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgZmlsZXM9YHNlZCAtbiAncy9eWyBdKkFbQ01dX0NPTkZJR19IRUFERVIoXChbXildKlwpKS4qL1wxL3AnICR7Y29uZmlndXJlX2FjfWAKKyAgICB0ZXN0IC16ICIkZmlsZXMiICYmIGZpbGVzPSJjdXJsX2NvbmZpZy5oIgorICAgIHRvdWNoX2ZpbGVzPQorICAgIGZvciBmIGluICRmaWxlczsgZG8KKyAgICAgIGNhc2UgIiRmIiBpbgorICAgICAgKjoqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICJgZWNobyAiJGYiIHwKKwkJCQkgICAgICAgc2VkIC1lICdzL15bXjpdKjovLycgLWUgJ3MvOi4qLy8nYDs7CisgICAgICAqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICRmLmluIjs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIHRvdWNoICR0b3VjaF9maWxlcworICAgIDs7CisKKyAgYXV0b21ha2UpCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyBtaXNzaW5nIG9uIHlvdXIgc3lzdGVtLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBcYE1ha2VmaWxlLmFtJywgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4KKyAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgQXV0b21ha2UnIGFuZCBcYFBlcmwnIHBhY2thZ2VzLgorICAgICAgICAgR3JhYiB0aGVtIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIGZpbmQgLiAtdHlwZSBmIC1uYW1lIE1ha2VmaWxlLmFtIC1wcmludCB8CisJICAgc2VkICdzL1wuYW0kLy5pbi8nIHwKKwkgICB3aGlsZSByZWFkIGY7IGRvIHRvdWNoICIkZiI7IGRvbmUKKyAgICA7OworCisgIGJpc29ufHlhY2MpCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyBtaXNzaW5nIG9uIHlvdXIgc3lzdGVtLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLnknIGZpbGUuICBZb3UgbWF5IG5lZWQgdGhlIFxgQmlzb24nIHBhY2thZ2UKKyAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKKyAgICAgICAgIFxgQmlzb24nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHJtIC1mIHkudGFiLmMgeS50YWIuaAorICAgIGlmIFsgJCMgLW5lIDEgXTsgdGhlbgorICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKKwljYXNlICIkTEFTVEFSRyIgaW4KKwkqLnkpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9jLydgCisJICAgIGlmIFsgLWYgIiRTUkNGSUxFIiBdOyB0aGVuCisJICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5jCisJICAgIGZpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9oLydgCisJICAgIGlmIFsgLWYgIiRTUkNGSUxFIiBdOyB0aGVuCisJICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5oCisJICAgIGZpCisJICA7OworCWVzYWMKKyAgICBmaQorICAgIGlmIFsgISAtZiB5LnRhYi5oIF07IHRoZW4KKwllY2hvID55LnRhYi5oCisgICAgZmkKKyAgICBpZiBbICEgLWYgeS50YWIuYyBdOyB0aGVuCisJZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID55LnRhYi5jCisgICAgZmkKKyAgICA7OworCisgIGxleHxmbGV4KQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbWlzc2luZyBvbiB5b3VyIHN5c3RlbS4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC5sJyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEZsZXgnIHBhY2thZ2UKKyAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKKyAgICAgICAgIFxgRmxleCcgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgcm0gLWYgbGV4Lnl5LmMKKyAgICBpZiBbICQjIC1uZSAxIF07IHRoZW4KKyAgICAgICAgZXZhbCBMQVNUQVJHPSJcJHskI30iCisJY2FzZSAiJExBU1RBUkciIGluCisJKi5sKQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MvbCQvYy8nYAorCSAgICBpZiBbIC1mICIkU1JDRklMRSIgXTsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgbGV4Lnl5LmMKKwkgICAgZmkKKwkgIDs7CisJZXNhYworICAgIGZpCisgICAgaWYgWyAhIC1mIGxleC55eS5jIF07IHRoZW4KKwllY2hvICdtYWluKCkgeyByZXR1cm4gMDsgfScgPmxleC55eS5jCisgICAgZmkKKyAgICA7OworCisgIGhlbHAybWFuKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbWlzc2luZyBvbiB5b3VyIHN5c3RlbS4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisJIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kgb2YgYSBtYW51YWwgcGFnZS4gIFlvdSBtYXkgbmVlZCB0aGUKKwkgXGBIZWxwMm1hbicgcGFja2FnZSBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlCisJIGVmZmVjdC4gIFlvdSBjYW4gZ2V0IFxgSGVscDJtYW4nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICdzLy4qLW8gXChbXiBdKlwpLiovXDEvcCdgCisgICAgaWYgdGVzdCAteiAiJGZpbGUiOyB0aGVuCisJZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICdzLy4qLS1vdXRwdXQ9XChbXiBdKlwpLiovXDEvcCdgCisgICAgZmkKKyAgICBpZiBbIC1mICIkZmlsZSIgXTsgdGhlbgorCXRvdWNoICRmaWxlCisgICAgZWxzZQorCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQorCWVjaG8gIi5hYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UiCisJZXhpdCAxCisgICAgZmkKKyAgICA7OworCisgIG1ha2VpbmZvKQorICAgIGlmIHRlc3QgLXogIiRydW4iICYmIChtYWtlaW5mbyAtLXZlcnNpb24pID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAjIFdlIGhhdmUgbWFrZWluZm8sIGJ1dCBpdCBmYWlsZWQuCisgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbWlzc2luZyBvbiB5b3VyIHN5c3RlbS4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC50ZXhpJyBvciBcYC50ZXhpbmZvJyBmaWxlLCBvciBhbnkgb3RoZXIgZmlsZQorICAgICAgICAgaW5kaXJlY3RseSBhZmZlY3RpbmcgdGhlIGFzcGVjdCBvZiB0aGUgbWFudWFsLiAgVGhlIHNwdXJpb3VzCisgICAgICAgICBjYWxsIG1pZ2h0IGFsc28gYmUgdGhlIGNvbnNlcXVlbmNlIG9mIHVzaW5nIGEgYnVnZ3kgXGBtYWtlJyAoQUlYLAorICAgICAgICAgRFUsIElSSVgpLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBUZXhpbmZvJyBwYWNrYWdlIG9yCisgICAgICAgICB0aGUgXGBHTlUgbWFrZScgcGFja2FnZS4gIEdyYWIgZWl0aGVyIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAncy8uKi1vIFwoW14gXSpcKS4qL1wxL3AnYAorICAgIGlmIHRlc3QgLXogIiRmaWxlIjsgdGhlbgorICAgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkICdzLy4qIFwoW14gXSpcKSAqJC9cMS8nYAorICAgICAgZmlsZT1gc2VkIC1uICcvXkBzZXRmaWxlbmFtZS8geyBzLy4qIFwoW14gXSpcKSAqJC9cMS87IHA7IHE7IH0nICRmaWxlYAorICAgIGZpCisgICAgdG91Y2ggJGZpbGUKKyAgICA7OworCisgIHRhcikKKyAgICBzaGlmdAorICAgIGlmIHRlc3QgLW4gIiRydW4iOyB0aGVuCisgICAgICBlY2hvIDE+JjIgIkVSUk9SOiBcYHRhcicgcmVxdWlyZXMgLS1ydW4iCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgIyBXZSBoYXZlIGFscmVhZHkgdHJpZWQgdGFyIGluIHRoZSBnZW5lcmljIHBhcnQuCisgICAgIyBMb29rIGZvciBnbnV0YXIvZ3RhciBiZWZvcmUgaW52b2NhdGlvbiB0byBhdm9pZCB1Z2x5IGVycm9yCisgICAgIyBtZXNzYWdlcy4KKyAgICBpZiAoZ251dGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICAgIGdudXRhciAkezErIiRAIn0gJiYgZXhpdCAwCisgICAgZmkKKyAgICBpZiAoZ3RhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgICBndGFyICR7MSsiJEAifSAmJiBleGl0IDAKKyAgICBmaQorICAgIGZpcnN0YXJnPSIkMSIKKyAgICBpZiBzaGlmdDsgdGhlbgorCWNhc2UgIiRmaXJzdGFyZyIgaW4KKwkqbyopCisJICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvby8vYAorCSAgICB0YXIgIiRmaXJzdGFyZyIgJHsxKyIkQCJ9ICYmIGV4aXQgMAorCSAgICA7OworCWVzYWMKKwljYXNlICIkZmlyc3RhcmciIGluCisJKmgqKQorCSAgICBmaXJzdGFyZz1gZWNobyAiJGZpcnN0YXJnIiB8IHNlZCBzL2gvL2AKKwkgICAgdGFyICIkZmlyc3RhcmciICR7MSsiJEAifSAmJiBleGl0IDAKKwkgICAgOzsKKwllc2FjCisgICAgZmkKKworICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogSSBjYW4ndCBzZWVtIHRvIGJlIGFibGUgdG8gcnVuIFxgdGFyJyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCisgICAgICAgICBZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBHTlUgdGFyIG9yIEZyZWUgcGF4dXRpbHMsIG9yIGNoZWNrIHRoZQorICAgICAgICAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4iCisgICAgZXhpdCAxCisgICAgOzsKKworICAqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbmVlZGVkLCBhbmQgeW91IGRvIG5vdCBzZWVtIHRvIGhhdmUgaXQgaGFuZHkgb24geW91cgorICAgICAgICAgc3lzdGVtLiAgWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUKKyAgICAgICAgIHByb3BlciB0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLiAgQ2hlY2sgdGhlIFxgUkVBRE1FJyBmaWxlLAorICAgICAgICAgaXQgb2Z0ZW4gdGVsbHMgeW91IGFib3V0IHRoZSBuZWVkZWQgcHJlcmVxdWlyZW1lbnRzIGZvciBpbnN0YWxsaW5nCisgICAgICAgICB0aGlzIHBhY2thZ2UuICBZb3UgbWF5IGFsc28gcGVlayBhdCBhbnkgR05VIGFyY2hpdmUgc2l0ZSwgaW4gY2FzZQorICAgICAgICAgc29tZSBvdGhlciBwYWNrYWdlIHdvdWxkIGNvbnRhaW4gdGhpcyBtaXNzaW5nIFxgJDEnIHByb2dyYW0uIgorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvbWtpbnN0YWxsZGlycyBiL2N1cmwtNy4yNS4wL21raW5zdGFsbGRpcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE1ZGY0ZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL21raW5zdGFsbGRpcnMKQEAgLTAsMCArMSwzOSBAQAorIyEgL2Jpbi9zaAorIyBta2luc3RhbGxkaXJzIC0tLSBtYWtlIGRpcmVjdG9yeSBoaWVyYXJjaHkKKyMgQXV0aG9yOiBOb2FoIEZyaWVkbWFuIDxmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHU+CisjIENyZWF0ZWQ6IDE5OTMtMDUtMTYKKyMgUHVibGljIGRvbWFpbgorCisKK2VycnN0YXR1cz0wCisKK2ZvciBmaWxlCitkbworICAgc2V0IGZub3JkIGBlY2hvICI6JGZpbGUiIHwgc2VkIC1uZSAncy9eOlwvLyMvO3MvXjovLztzL1wvLyAvZztzL14jL1wvLztwJ2AKKyAgIHNoaWZ0CisKKyAgIHBhdGhjb21wPQorICAgZm9yIGQKKyAgIGRvCisgICAgIHBhdGhjb21wPSIkcGF0aGNvbXAkZCIKKyAgICAgY2FzZSAiJHBhdGhjb21wIiBpbgorICAgICAgIC0qICkgcGF0aGNvbXA9Li8kcGF0aGNvbXAgOzsKKyAgICAgZXNhYworCisgICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorICAgICAgICBlY2hvICJta2RpciAtbTA3NTUgJHBhdGhjb21wIiAxPiYyCisKKyAgICAgICAgbWtkaXIgLW0wNzU1ICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKworICAgICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKyAgCSAgZXJyc3RhdHVzPSRsYXN0ZXJyCisgICAgICAgIGZpCisgICAgIGZpCisKKyAgICAgcGF0aGNvbXA9IiRwYXRoY29tcC8iCisgICBkb25lCitkb25lCisKK2V4aXQgJGVycnN0YXR1cworCisjIG1raW5zdGFsbGRpcnMgZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9BSVgvTWFrZWZpbGUuYW0gYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9BSVgvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwMzhlZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0FJWC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDMgQEAKK1NVQkRJUlMgPSBSUE0KKworRVhUUkFfRElTVCA9IE1ha2VmaWxlLmFtCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9BSVgvTWFrZWZpbGUuaW4gYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9BSVgvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY5OWUwMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0FJWC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDU3OCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLi8uLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gcGFja2FnZXMvQUlYCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2N1cmwtY29tcGlsZXJzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtY29uZm9wdHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1mdW5jdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vcGVuc3NsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3ZlcnJpZGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1yZWVudHJhbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1zeXN0ZW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtdHJhbnNsaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQveno1MC14Yy1vdnIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9zcmMvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBcCisJcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwl1bmluc3RhbGwtcmVjdXJzaXZlCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACitBTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFID0gQEJVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFQAorQlVJTERfTElCSE9TVE5BTUVfVFJVRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9UUlVFQAorQlVJTERfVU5JVFRFU1RTX0ZBTFNFID0gQEJVSUxEX1VOSVRURVNUU19GQUxTRUAKK0JVSUxEX1VOSVRURVNUU19UUlVFID0gQEJVSUxEX1VOSVRURVNUU19UUlVFQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NPTkZJR1VSRV9PUFRJT05TID0gQENPTkZJR1VSRV9PUFRJT05TQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1JPU1NDT01QSUxJTkdfRkFMU0UgPSBAQ1JPU1NDT01QSUxJTkdfRkFMU0VACitDUk9TU0NPTVBJTElOR19UUlVFID0gQENST1NTQ09NUElMSU5HX1RSVUVACitDVVJMREVCVUdfRkFMU0UgPSBAQ1VSTERFQlVHX0ZBTFNFQAorQ1VSTERFQlVHX1RSVUUgPSBAQ1VSTERFQlVHX1RSVUVACitDVVJMVkVSU0lPTiA9IEBDVVJMVkVSU0lPTkAKK0NVUkxfQ0FfQlVORExFID0gQENVUkxfQ0FfQlVORExFQAorQ1VSTF9DRkxBR19FWFRSQVMgPSBAQ1VSTF9DRkxBR19FWFRSQVNACitDVVJMX0RJU0FCTEVfRElDVCA9IEBDVVJMX0RJU0FCTEVfRElDVEAKK0NVUkxfRElTQUJMRV9GSUxFID0gQENVUkxfRElTQUJMRV9GSUxFQAorQ1VSTF9ESVNBQkxFX0ZUUCA9IEBDVVJMX0RJU0FCTEVfRlRQQAorQ1VSTF9ESVNBQkxFX0dPUEhFUiA9IEBDVVJMX0RJU0FCTEVfR09QSEVSQAorQ1VSTF9ESVNBQkxFX0hUVFAgPSBAQ1VSTF9ESVNBQkxFX0hUVFBACitDVVJMX0RJU0FCTEVfSU1BUCA9IEBDVVJMX0RJU0FCTEVfSU1BUEAKK0NVUkxfRElTQUJMRV9MREFQID0gQENVUkxfRElTQUJMRV9MREFQQAorQ1VSTF9ESVNBQkxFX0xEQVBTID0gQENVUkxfRElTQUJMRV9MREFQU0AKK0NVUkxfRElTQUJMRV9QT1AzID0gQENVUkxfRElTQUJMRV9QT1AzQAorQ1VSTF9ESVNBQkxFX1BST1hZID0gQENVUkxfRElTQUJMRV9QUk9YWUAKK0NVUkxfRElTQUJMRV9SVFNQID0gQENVUkxfRElTQUJMRV9SVFNQQAorQ1VSTF9ESVNBQkxFX1NNVFAgPSBAQ1VSTF9ESVNBQkxFX1NNVFBACitDVVJMX0RJU0FCTEVfVEVMTkVUID0gQENVUkxfRElTQUJMRV9URUxORVRACitDVVJMX0RJU0FCTEVfVEZUUCA9IEBDVVJMX0RJU0FCTEVfVEZUUEAKK0NVUkxfTElCUyA9IEBDVVJMX0xJQlNACitDVVJMX05FVFdPUktfTElCUyA9IEBDVVJMX05FVFdPUktfTElCU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TSEFSRUQgPSBARU5BQkxFX1NIQVJFREAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfR05VVExTX1NSUCA9IEBIQVZFX0dOVVRMU19TUlBACitIQVZFX0xEQVBfU1NMID0gQEhBVkVfTERBUF9TU0xACitIQVZFX0xJQlogPSBASEFWRV9MSUJaQAorSEFWRV9MSUJaX0ZBTFNFID0gQEhBVkVfTElCWl9GQUxTRUAKK0hBVkVfTElCWl9UUlVFID0gQEhBVkVfTElCWl9UUlVFQAorSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QgPSBASEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1RACitIQVZFX1NTTEVBWV9TUlAgPSBASEFWRV9TU0xFQVlfU1JQQAorSUROX0VOQUJMRUQgPSBASUROX0VOQUJMRURACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lQVjZfRU5BQkxFRCA9IEBJUFY2X0VOQUJMRURACitLUkI0X0VOQUJMRUQgPSBAS1JCNF9FTkFCTEVEQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJDVVJMX0xJQlMgPSBATElCQ1VSTF9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQU5PUFQgPSBATUFOT1BUQAorTUlNUFVSRV9GQUxTRSA9IEBNSU1QVVJFX0ZBTFNFQAorTUlNUFVSRV9UUlVFID0gQE1JTVBVUkVfVFJVRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PX1VOREVGSU5FRF9GQUxTRSA9IEBOT19VTkRFRklORURfRkFMU0VACitOT19VTkRFRklORURfVFJVRSA9IEBOT19VTkRFRklORURfVFJVRUAKK05ST0ZGID0gQE5ST0ZGQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSCA9IEBQQVRIQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACitQS0dBRERfTkFNRSA9IEBQS0dBRERfTkFNRUAKK1BLR0FERF9QS0cgPSBAUEtHQUREX1BLR0AKK1BLR0FERF9WRU5ET1IgPSBAUEtHQUREX1ZFTkRPUkAKK1BLR0NPTkZJRyA9IEBQS0dDT05GSUdACitSQU5ET01fRklMRSA9IEBSQU5ET01fRklMRUAKK1JBTkxJQiA9IEBSQU5MSUJACitSRVFVSVJFX0xJQl9ERVBTID0gQFJFUVVJUkVfTElCX0RFUFNACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NPTkFNRV9CVU1QX0ZBTFNFID0gQFNPTkFNRV9CVU1QX0ZBTFNFQAorU09OQU1FX0JVTVBfVFJVRSA9IEBTT05BTUVfQlVNUF9UUlVFQAorU1NMX0VOQUJMRUQgPSBAU1NMX0VOQUJMRURACitTVEFUSUNMSUJfRkFMU0UgPSBAU1RBVElDTElCX0ZBTFNFQAorU1RBVElDTElCX1RSVUUgPSBAU1RBVElDTElCX1RSVUVACitTVFJJUCA9IEBTVFJJUEAKK1NVUFBPUlRfRkVBVFVSRVMgPSBAU1VQUE9SVF9GRUFUVVJFU0AKK1NVUFBPUlRfUFJPVE9DT0xTID0gQFNVUFBPUlRfUFJPVE9DT0xTQAorVEVTVF9TRVJWRVJfTElCUyA9IEBURVNUX1NFUlZFUl9MSUJTQAorVVNFX0FSRVMgPSBAVVNFX0FSRVNACitVU0VfQVhUTFMgPSBAVVNFX0FYVExTQAorVVNFX0NZQVNTTCA9IEBVU0VfQ1lBU1NMQAorVVNFX0VNQkVEREVEX0FSRVNfRkFMU0UgPSBAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VACitVU0VfRU1CRURERURfQVJFU19UUlVFID0gQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVACitVU0VfR05VVExTID0gQFVTRV9HTlVUTFNACitVU0VfR05VVExTX05FVFRMRSA9IEBVU0VfR05VVExTX05FVFRMRUAKK1VTRV9MSUJSVE1QID0gQFVTRV9MSUJSVE1QQAorVVNFX0xJQlNTSDIgPSBAVVNFX0xJQlNTSDJACitVU0VfTUFOVUFMX0ZBTFNFID0gQFVTRV9NQU5VQUxfRkFMU0VACitVU0VfTUFOVUFMX1RSVUUgPSBAVVNFX01BTlVBTF9UUlVFQAorVVNFX05TUyA9IEBVU0VfTlNTQAorVVNFX09QRU5MREFQID0gQFVTRV9PUEVOTERBUEAKK1VTRV9QT0xBUlNTTCA9IEBVU0VfUE9MQVJTU0xACitVU0VfU1NMRUFZID0gQFVTRV9TU0xFQVlACitVU0VfV0lORE9XU19TU1BJID0gQFVTRV9XSU5ET1dTX1NTUElACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9ORURfRkxBVk9VUiA9IEBWRVJTSU9ORURfRkxBVk9VUkAKK1ZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFID0gQFZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFQAorVkVSU0lPTkVEX1NZTUJPTFNfVFJVRSA9IEBWRVJTSU9ORURfU1lNQk9MU19UUlVFQAorVkVSU0lPTk5VTSA9IEBWRVJTSU9OTlVNQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbGliZXh0ID0gQGxpYmV4dEAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3ViZGlycyA9IEBzdWJkaXJzQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK1NVQkRJUlMgPSBSUE0KK0VYVFJBX0RJU1QgPSBNYWtlZmlsZS5hbQorYWxsOiBhbGwtcmVjdXJzaXZlCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBwYWNrYWdlcy9BSVgvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHBhY2thZ2VzL0FJWC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbAordW5pbnN0YWxsLWluZm8tYW06CisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCittb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi1yZWN1cnNpdmUgXAorbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmU6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKKwkgIGVzYWM7IFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKKwkgICAgZGlyPSIvJCRkaXIiOyBcCisJICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKKwkgIGVsc2UgXAorCSAgICBkaXI9Jyc7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChta2Rpcl9wKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgICAgZGlzdGRpcj1gJChhbV9fY2QpICQoZGlzdGRpcikgJiYgcHdkYDsgXAorCSAgICB0b3BfZGlzdGRpcj1gJChhbV9fY2QpICQodG9wX2Rpc3RkaXIpICYmIHB3ZGA7IFwKKwkgICAgKGNkICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCR0b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRkaXN0ZGlyLyQkc3ViZGlyIiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQorCit1bmluc3RhbGwtaW5mbzogdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKKy5QSE9OWTogJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBcCisJY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXJlY3Vyc2l2ZSBjdGFncyBcCisJY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUgXAorCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLXJlY3Vyc2l2ZSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9BSVgvUlBNL01ha2VmaWxlLmFtIGIvY3VybC03LjI1LjAvcGFja2FnZXMvQUlYL1JQTS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWU3YmY5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvQUlYL1JQTS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDIgQEAKK0VYVFJBX0RJU1QgPSBSRUFETUUgY3VybC5zcGVjLmluCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0FJWC9SUE0vTWFrZWZpbGUuaW4gYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9BSVgvUlBNL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NWQ5MDMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9BSVgvUlBNL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNDIzIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBwYWNrYWdlcy9BSVgvUlBNCitESVNUX0NPTU1PTiA9IFJFQURNRSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHNyY2RpcikvY3VybC5zcGVjLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbXBpbGVycy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbmZvcHRzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtZnVuY3Rpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3BlbnNzbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW92ZXJyaWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtcmVlbnRyYW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtc3lzdGVtLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hjLXRyYW5zbGl0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3p6NTAteGMtb3ZyLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvc3JjL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9IGN1cmwuc3BlYworU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRUAKK0JVSUxEX0xJQkhPU1ROQU1FX1RSVUUgPSBAQlVJTERfTElCSE9TVE5BTUVfVFJVRUAKK0JVSUxEX1VOSVRURVNUU19GQUxTRSA9IEBCVUlMRF9VTklUVEVTVFNfRkFMU0VACitCVUlMRF9VTklUVEVTVFNfVFJVRSA9IEBCVUlMRF9VTklUVEVTVFNfVFJVRUAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDT05GSUdVUkVfT1BUSU9OUyA9IEBDT05GSUdVUkVfT1BUSU9OU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NST1NTQ09NUElMSU5HX0ZBTFNFID0gQENST1NTQ09NUElMSU5HX0ZBTFNFQAorQ1JPU1NDT01QSUxJTkdfVFJVRSA9IEBDUk9TU0NPTVBJTElOR19UUlVFQAorQ1VSTERFQlVHX0ZBTFNFID0gQENVUkxERUJVR19GQUxTRUAKK0NVUkxERUJVR19UUlVFID0gQENVUkxERUJVR19UUlVFQAorQ1VSTFZFUlNJT04gPSBAQ1VSTFZFUlNJT05ACitDVVJMX0NBX0JVTkRMRSA9IEBDVVJMX0NBX0JVTkRMRUAKK0NVUkxfQ0ZMQUdfRVhUUkFTID0gQENVUkxfQ0ZMQUdfRVhUUkFTQAorQ1VSTF9ESVNBQkxFX0RJQ1QgPSBAQ1VSTF9ESVNBQkxFX0RJQ1RACitDVVJMX0RJU0FCTEVfRklMRSA9IEBDVVJMX0RJU0FCTEVfRklMRUAKK0NVUkxfRElTQUJMRV9GVFAgPSBAQ1VSTF9ESVNBQkxFX0ZUUEAKK0NVUkxfRElTQUJMRV9HT1BIRVIgPSBAQ1VSTF9ESVNBQkxFX0dPUEhFUkAKK0NVUkxfRElTQUJMRV9IVFRQID0gQENVUkxfRElTQUJMRV9IVFRQQAorQ1VSTF9ESVNBQkxFX0lNQVAgPSBAQ1VSTF9ESVNBQkxFX0lNQVBACitDVVJMX0RJU0FCTEVfTERBUCA9IEBDVVJMX0RJU0FCTEVfTERBUEAKK0NVUkxfRElTQUJMRV9MREFQUyA9IEBDVVJMX0RJU0FCTEVfTERBUFNACitDVVJMX0RJU0FCTEVfUE9QMyA9IEBDVVJMX0RJU0FCTEVfUE9QM0AKK0NVUkxfRElTQUJMRV9QUk9YWSA9IEBDVVJMX0RJU0FCTEVfUFJPWFlACitDVVJMX0RJU0FCTEVfUlRTUCA9IEBDVVJMX0RJU0FCTEVfUlRTUEAKK0NVUkxfRElTQUJMRV9TTVRQID0gQENVUkxfRElTQUJMRV9TTVRQQAorQ1VSTF9ESVNBQkxFX1RFTE5FVCA9IEBDVVJMX0RJU0FCTEVfVEVMTkVUQAorQ1VSTF9ESVNBQkxFX1RGVFAgPSBAQ1VSTF9ESVNBQkxFX1RGVFBACitDVVJMX0xJQlMgPSBAQ1VSTF9MSUJTQAorQ1VSTF9ORVRXT1JLX0xJQlMgPSBAQ1VSTF9ORVRXT1JLX0xJQlNACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU0hBUkVEID0gQEVOQUJMRV9TSEFSRURACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitIQVZFX0dOVVRMU19TUlAgPSBASEFWRV9HTlVUTFNfU1JQQAorSEFWRV9MREFQX1NTTCA9IEBIQVZFX0xEQVBfU1NMQAorSEFWRV9MSUJaID0gQEhBVkVfTElCWkAKK0hBVkVfTElCWl9GQUxTRSA9IEBIQVZFX0xJQlpfRkFMU0VACitIQVZFX0xJQlpfVFJVRSA9IEBIQVZFX0xJQlpfVFJVRUAKK0hBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUID0gQEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUQAorSEFWRV9TU0xFQVlfU1JQID0gQEhBVkVfU1NMRUFZX1NSUEAKK0lETl9FTkFCTEVEID0gQElETl9FTkFCTEVEQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJUFY2X0VOQUJMRUQgPSBASVBWNl9FTkFCTEVEQAorS1JCNF9FTkFCTEVEID0gQEtSQjRfRU5BQkxFREAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQ1VSTF9MSUJTID0gQExJQkNVUkxfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUFOT1BUID0gQE1BTk9QVEAKK01JTVBVUkVfRkFMU0UgPSBATUlNUFVSRV9GQUxTRUAKK01JTVBVUkVfVFJVRSA9IEBNSU1QVVJFX1RSVUVACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitOT19VTkRFRklORURfRkFMU0UgPSBATk9fVU5ERUZJTkVEX0ZBTFNFQAorTk9fVU5ERUZJTkVEX1RSVUUgPSBATk9fVU5ERUZJTkVEX1RSVUVACitOUk9GRiA9IEBOUk9GRkAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEggPSBAUEFUSEAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTCA9IEBQRVJMQAorUEtHQUREX05BTUUgPSBAUEtHQUREX05BTUVACitQS0dBRERfUEtHID0gQFBLR0FERF9QS0dACitQS0dBRERfVkVORE9SID0gQFBLR0FERF9WRU5ET1JACitQS0dDT05GSUcgPSBAUEtHQ09ORklHQAorUkFORE9NX0ZJTEUgPSBAUkFORE9NX0ZJTEVACitSQU5MSUIgPSBAUkFOTElCQAorUkVRVUlSRV9MSUJfREVQUyA9IEBSRVFVSVJFX0xJQl9ERVBTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTT05BTUVfQlVNUF9GQUxTRSA9IEBTT05BTUVfQlVNUF9GQUxTRUAKK1NPTkFNRV9CVU1QX1RSVUUgPSBAU09OQU1FX0JVTVBfVFJVRUAKK1NTTF9FTkFCTEVEID0gQFNTTF9FTkFCTEVEQAorU1RBVElDTElCX0ZBTFNFID0gQFNUQVRJQ0xJQl9GQUxTRUAKK1NUQVRJQ0xJQl9UUlVFID0gQFNUQVRJQ0xJQl9UUlVFQAorU1RSSVAgPSBAU1RSSVBACitTVVBQT1JUX0ZFQVRVUkVTID0gQFNVUFBPUlRfRkVBVFVSRVNACitTVVBQT1JUX1BST1RPQ09MUyA9IEBTVVBQT1JUX1BST1RPQ09MU0AKK1RFU1RfU0VSVkVSX0xJQlMgPSBAVEVTVF9TRVJWRVJfTElCU0AKK1VTRV9BUkVTID0gQFVTRV9BUkVTQAorVVNFX0FYVExTID0gQFVTRV9BWFRMU0AKK1VTRV9DWUFTU0wgPSBAVVNFX0NZQVNTTEAKK1VTRV9FTUJFRERFRF9BUkVTX0ZBTFNFID0gQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQAorVVNFX0VNQkVEREVEX0FSRVNfVFJVRSA9IEBVU0VfRU1CRURERURfQVJFU19UUlVFQAorVVNFX0dOVVRMUyA9IEBVU0VfR05VVExTQAorVVNFX0dOVVRMU19ORVRUTEUgPSBAVVNFX0dOVVRMU19ORVRUTEVACitVU0VfTElCUlRNUCA9IEBVU0VfTElCUlRNUEAKK1VTRV9MSUJTU0gyID0gQFVTRV9MSUJTU0gyQAorVVNFX01BTlVBTF9GQUxTRSA9IEBVU0VfTUFOVUFMX0ZBTFNFQAorVVNFX01BTlVBTF9UUlVFID0gQFVTRV9NQU5VQUxfVFJVRUAKK1VTRV9OU1MgPSBAVVNFX05TU0AKK1VTRV9PUEVOTERBUCA9IEBVU0VfT1BFTkxEQVBACitVU0VfUE9MQVJTU0wgPSBAVVNFX1BPTEFSU1NMQAorVVNFX1NTTEVBWSA9IEBVU0VfU1NMRUFZQAorVVNFX1dJTkRPV1NfU1NQSSA9IEBVU0VfV0lORE9XU19TU1BJQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVkVSU0lPTkVEX0ZMQVZPVVIgPSBAVkVSU0lPTkVEX0ZMQVZPVVJACitWRVJTSU9ORURfU1lNQk9MU19GQUxTRSA9IEBWRVJTSU9ORURfU1lNQk9MU19GQUxTRUAKK1ZFUlNJT05FRF9TWU1CT0xTX1RSVUUgPSBAVkVSU0lPTkVEX1NZTUJPTFNfVFJVRUAKK1ZFUlNJT05OVU0gPSBAVkVSU0lPTk5VTUAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpYmV4dCA9IEBsaWJleHRACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACitFWFRSQV9ESVNUID0gUkVBRE1FIGN1cmwuc3BlYy5pbgorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHBhY2thZ2VzL0FJWC9SUE0vTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHBhY2thZ2VzL0FJWC9SUE0vTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKK2N1cmwuc3BlYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2N1cmwuc3BlYy5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK2Rpc3RjbGVhbi1saWJ0b29sOgorCS1ybSAtZiBsaWJ0b29sCit1bmluc3RhbGwtaW5mby1hbToKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbAorCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKKwl1bmluc3RhbGwtaW5mby1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9BSVgvUlBNL1JFQURNRSBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0FJWC9SUE0vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MGJlYjgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9BSVgvUlBNL1JFQURNRQpAQCAtMCwwICsxLDMzIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgKCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIEFJWCBUb29sYm94CisKK0F1dGhvcjogVG9yIEFybnRzZW4KKworVGhlIHNwZWMgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeSBpcyBiYXNlZCBvbiB0aGUgTGludXggc3NsIGFuZCBub24tc3NsCitjdXJsIHNwZWMgZmlsZXMsIHBsdXMgYWRkaXRpb25zIHRvIG1ha2UgaXQgQUlYIFRvb2xib3ggY29tcGF0aWJsZS4KKworVGhlIEFJWCBUb29sYm94IHNldHVwIChpbnN0YWxscyBpbnRvIC9vcHQvZnJlZXdhcmUsIHdpdGggc3ltbGlua3MgaW4KKy91c3IvYmluLC91c3IvbGliLC91c3IvaW5jbHVkZSkgYXJlIGJhc2VkIG9uIElCTSdzIGFpeHRvb2xib3ggc3BlYworZmlsZSB3cml0dGVuIGJ5IERhdmlkIENsaXNzb2xkIDxjbGlzc0BhdXN0aW4uaWJtLmNvbT4sIHNlZQorCitmdHA6Ly9mdHAuc29mdHdhcmUuaWJtLmNvbS9haXh0b29sYm94L1NQRUNTL2N1cmwtNy45LjMtMi5zcGVjCisKK1RoaXMgc3BlYyBmaWxlIGlzIGRlc2lnbmVkIHRvIGJlIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlCitvbGQgc3BlYyBmaWxlIGZvdW5kIGF0IHRoZSBhYm92ZSBsaW5rLiBUaHVzLCBsaWtlIHRoZSBvbGQgc3BlYyBmaWxlCit0aGlzIHZlcnNpb24gaXMgYWxzbyBhIHVuaWZpZWQgc3NsL25vbi1zc2wgIHZlcnNpb24uIFRvIGdldCBub24tc3NsCitSUE1zIGp1c3QgcGFzcyAtLWRlZmluZSAnbm9zc2wgMScgdG8gdGhlIGNvbW1hbmQgbGluZSB3aGVuIGJ1aWxkaW5nCit0aGUgUlBNLCBlLmcuCisKK3JwbSAtYmIgLS1kZWZpbmUgJ25vc3NsIDEnIGN1cmwuc3BlYworCitEZWZhdWx0IGlzIHRvIGJ1aWxkIHdpdGggc3NsIHN1cHBvcnQuCisKK0xhc3RseSwgdGhlIHNwZWMgZmlsZSBleHBlY3RzIHRoZSBDdXJsIHNvdXJjZSBkaXN0cmlidXRpb24gZmlsZSB0byBiZQoraW4gLnRhci5iejIgZm9ybWF0LgorCitUaGUgbmlmdHkgY1VSTCBoZWFkZXIgb2YgdGhpcyBSRUFETUUgaXMgYSByaXBvZmYgb2YgdGhlIHZtcy9yZWFkbWUgZmlsZS4KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvQUlYL1JQTS9jdXJsLnNwZWMuaW4gYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9BSVgvUlBNL2N1cmwuc3BlYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzdlMGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvQUlYL1JQTS9jdXJsLnNwZWMuaW4KQEAgLTAsMCArMSwxMzIgQEAKKyMgVXNlIC0tZGVmaW5lICdub3NzbCAxJyBvbiB0aGUgY29tbWFuZCBsaW5lIHRvIGRpc2FibGUgU1NMIGRldGVjdGlvbgorJXshP25vc3NsOiVkZWZpbmUgU1NMIDF9Cislez9ub3NzbDolZGVmaW5lIFNTTCAwfQorCislZGVmaW5lIG5hbWUgY3VybAorJWRlZmluZSB2ZXJzaW9uIEBWRVJTSU9OQAorJWRlZmluZSByZWxlYXNlIDEleyE/bm9zc2w6c3NsfQorCislZGVmaW5lIGN1cmxyb290ICV7X2J1aWxkZGlyfS8le25hbWV9LSV7dmVyc2lvbn0KKworU3VtbWFyeTogZ2V0IGEgZmlsZSBmcm9tIGEgRlRQIG9yIEhUVFAgc2VydmVyLgorTmFtZTogJXtuYW1lfQorVmVyc2lvbjogJXt2ZXJzaW9ufQorUmVsZWFzZTogJXtyZWxlYXNlfQorTGljZW5zZTogTUlUL1ggZGVyaXZhdGUKK1ZlbmRvcjogRGFuaWVsIFN0ZW5iZXJnIDxEYW5pZWwuU3RlbmJlcmdAaGF4eC5zZT4KK0dyb3VwOiBBcHBsaWNhdGlvbnMvSW50ZXJuZXQKK1NvdXJjZTogJXtuYW1lfS0le3ZlcnNpb259LnRhci5iejIKK1VSTDogaHR0cDovL2N1cmwuaGF4eC5zZS8KK1Byb3ZpZGVzOiBjdXJsCitCdWlsZFJvb3Q6ICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1yb290CitQcmVmaXg6ICV7X3ByZWZpeH0KKworJWRlc2NyaXB0aW9uCitjdXJsIGlzIGEgY2xpZW50IHRvIGdldCBkb2N1bWVudHMvZmlsZXMgZnJvbSBzZXJ2ZXJzLCB1c2luZyBhbnkgb2YgdGhlCitzdXBwb3J0ZWQgcHJvdG9jb2xzLiAgVGhlIGNvbW1hbmQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRob3V0IHVzZXIKK2ludGVyYWN0aW9uIG9yIGFueSBraW5kIG9mIGludGVyYWN0aXZpdHkuCisKK2N1cmwgb2ZmZXJzIG1hbnkgdXNlZnVsIHRyaWNrcyBsaWtlIHByb3h5IHN1cHBvcnQsIHVzZXIgYXV0aGVudGljYXRpb24sCitmdHAgdXBsb2FkLCBIVFRQIHBvc3QsIGZpbGUgdHJhbnNmZXIgcmVzdW1lIGFuZCBtb3JlLgorCislaWYgJXtTU0x9ID09IDEKK05vdGU6IHRoaXMgdmVyc2lvbiBpcyBjb21waWxlZCB3aXRoIFNTTCBzdXBwb3J0LgorJWVsc2UKK05vdGU6IHRoaXMgdmVyc2lvbiBpcyBjb21waWxlZCB3aXRob3V0IFNTTCBzdXBwb3J0LgorJWVuZGlmCisKKyVwYWNrYWdlCWRldmVsCitTdW1tYXJ5OglEZXZlbG9wbWVudCBmaWxlcyBmb3IgdGhlIGN1cmwgbGliYXJ5CitHcm91cDoJCURldmVsb3BtZW50L0xpYnJhcmllcworJWlmICV7U1NMfSA9PSAxCitSZXF1aXJlczogb3BlbnNzbCA+PSAwLjkuNQorJWVuZGlmCitSZXF1aXJlczoJY3VybCA9ICV7dmVyc2lvbn0KK1Byb3ZpZGVzOgljdXJsLWRldmVsCisKKyVkZXNjcmlwdGlvbiBkZXZlbAorbGliY3VybCBpcyB0aGUgY29yZSBlbmdpbmUgb2YgY3VybDsgdGhpcyBwYWNrYWdlcyBjb250YWlucyBhbGwgdGhlCitsaWJzLCBoZWFkZXJzLCBhbmQgbWFudWFsIHBhZ2VzIHRvIGRldmVsb3AgYXBwbGljYXRpb25zIHVzaW5nIGxpYmN1cmwuCisKKyVkZWZpbmUgREVGQ0MgeGxjCisKKyVwcmVwCitybSAtcmYgJXtjdXJscm9vdH0KKyVzZXR1cCAtcQorCislYnVpbGQKKworIyBVc2UgdGhlIGRlZmF1bHQgY29tcGlsZXIgZm9yIHRoaXMgcGxhdGZvcm0gLSBnY2Mgb3RoZXJ3aXNlCitpZiBbWyAteiAiJENDIiBdXQordGhlbgorICAgIGlmIHRlc3QgIlhgdHlwZSAle0RFRkNDfSAyPi9kZXYvbnVsbGAiICE9ICdYJzsgdGhlbgorICAgICAgIGV4cG9ydCBDQz0le0RFRkNDfQorICAgIGVsc2UKKyAgICAgICBleHBvcnQgQ0M9Z2NjCisgICAgZmkKK2ZpCisKK2NkICV7Y3VybHJvb3R9ICYmIChpZiBbIC1mIGNvbmZpZ3VyZS5pbiBdOyB0aGVuIG12IC1mIGNvbmZpZ3VyZS5pbiBjb25maWd1cmUuaW4uCitycG07IGZpKQorCisuL2NvbmZpZ3VyZSAtLXByZWZpeD0le3ByZWZpeH0gXAorJWlmICV7U1NMfSA9PSAxCisgICAgICAgIC0td2l0aC1zc2wKKyVlbHNlCisgICAgICAgIC0td2l0aG91dC1zc2wKKyVlbmRpZgorCittYWtlCisKKyVpbnN0YWxsCitbICIle2J1aWxkcm9vdH0iICE9ICIvIiBdICYmIHJtIC1yZiAle2J1aWxkcm9vdH0KK21ha2UgREVTVERJUj0le2J1aWxkcm9vdH0gaW5zdGFsbC1zdHJpcAorCisoIGNkICRSUE1fQlVJTERfUk9PVCAgICMgc2FtZSBhcyAle2J1aWxkcm9vdH0KKworIGZvciBkaXIgaW4gYmluIGluY2x1ZGUKKyBkbworICAgIG1rZGlyIC1wIHVzci8kZGlyCisgICAgY2QgdXNyLyRkaXIKKyAgICBsbiAtc2YgLi4vLi4le3ByZWZpeH0vJGRpci8qIC4KKyAgICBjZCAtCisgZG9uZQorCisgbWtkaXIgLXAgdXNyL2xpYgorIGNkIHVzci9saWIKKyBsbiAtc2YgLi4vLi4le3ByZWZpeH0vbGliLyogLgorIGNkIC0KKykKKworJWNsZWFuCitbICIle2J1aWxkcm9vdH0iICE9ICIvIiBdICYmIHJtIC1yZiAle2J1aWxkcm9vdH0KKworJWZpbGVzCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVhdHRyKDA3NTUscm9vdCxyb290KSAle19iaW5kaXJ9L2N1cmwKKyVhdHRyKDA2NDQscm9vdCxyb290KSAle19tYW5kaXJ9L21hbjEvY3VybC4xKgorJXtfbGliZGlyfS9saWJjdXJsLmEKKyVpZiAle1NTTH0gPT0gMQorJXtfZGF0YWRpcn0vY3VybC9jdXJsLWNhLWJ1bmRsZS5jcnQKKyVlbmRpZgorJWRvYyBDSEFOR0VTIENPUFlJTkcgUkVBRE1FIFJFTEVBU0UtTk9URVMKKyVkb2MgZG9jcy9CVUdTIGRvY3MvQ09OVFJJQlVURSBkb2NzL0ZBUSBkb2NzL0ZFQVRVUkVTIGRvY3MvSElTVE9SWQorJWRvYyBkb2NzL0lOU1RBTEwgZG9jcy9LTk9XTl9CVUdTCislZG9jIGRvY3MvTUFOVUFMIGRvY3MvUkVTT1VSQ0VTIGRvY3MvVEhBTktTIGRvY3MvVkVSU0lPTlMgZG9jcy9UT0RPCislZG9jIGRvY3MvVGhlQXJ0T2ZIdHRwU2NyaXB0aW5nCislaWYgJXtTU0x9ID09IDEKKyVkb2MgZG9jcy9TU0xDRVJUUworJWVuZGlmCisvdXNyL2Jpbi9jdXJsCisvdXNyL2xpYi9saWJjdXJsLmEKKworJWZpbGVzIGRldmVsCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVhdHRyKDA3NTUscm9vdCxyb290KSAle19iaW5kaXJ9L2N1cmwtY29uZmlnCislYXR0cigwNjQ0LHJvb3Qscm9vdCkgJXtfbWFuZGlyfS9tYW4xL2N1cmwtY29uZmlnLjEqCislYXR0cigwNjQ0LHJvb3Qscm9vdCkgJXtfbWFuZGlyfS9tYW4zLyoKKyVhdHRyKDA2NDQscm9vdCxyb290KSAle19pbmNsdWRlZGlyfS9jdXJsLyoKKyV7X2xpYmRpcn0vbGliY3VybC5sYQorJWRvYyBkb2NzL0JJTkRJTkdTIGRvY3MvSU5URVJOQUxTIGRvY3MvTElDRU5TRS1NSVhJTkcKKy91c3IvYmluL2N1cmwtY29uZmlnCisvdXNyL2luY2x1ZGUvY3VybApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvRE9TL1JFQURNRSBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0RPUy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhYjliOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0RPUy9SRUFETUUKQEAgLTAsMCArMSwxMSBAQAorR2lzbGUgVmFuZW0gbWFkZSBjdXJsIGJ1aWxkIGZpbmUgb24gRE9TIChhbmQgTWluZ1cpIHdpdGggZGpncHAsIE9wZW5TU0wgYW5kIGhpcworV2F0dC0zMiBzdGFjay4KKworJ21ha2UgZGpncHAnIGluIHRoZSByb290IGN1cmwgZGlyIHNob3VsZCBidWlsZCBpdCBmaW5lLgorCitOb3RlIDE6IGRqZ3BwIDIuMDQgYmV0YSBoYXMgYSBzc2NhbmYoKSBidWcgc28gdGhlIFVSTCBwYXJzaW5nIGlzbid0CisgICAgICAgIGRvbmUgcHJvYmVybHkuIFVzZSBkamdwcCAyLjAzIHVudGlsIHRoZXkgZml4IGl0LgorCitOb3RlIDI6IENvbXBpbGUgV2F0dC0zMiAoYW5kIE9wZW5TU0wpIHdpdGggdGhlIHNhbWUgdmVyc2lvbiBvZiBkamdwcC4KKyAgICAgICAgT3RoZXJ3aXNlIHRoaW5ncyBnbyB3cm9uZyBiZWNhdXNlIHRoaW5ncyBsaWtlIEZTLWV4dGVuc2lvbnMgYW5kCisgICAgICAgIGVycm5vcyBoYXZlIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHJlbGVhc2VzLgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvRE9TL2NvbW1vbi5kaiBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0RPUy9jb21tb24uZGoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyZjEwYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0RPUy9jb21tb24uZGoKQEAgLTAsMCArMSwxMzYgQEAKKyMKKyMgQ29tbW9uIGRlZmluZXMgZm9yIGN1cmwgKGRqZ3BwL1dhdHQtMzIpCisjCisjIEFzc3VtZXMgeW91J3ZlIHVucGFja2VkIGNVUkwgd2l0aCBsb25nLWZpbGUgbmFtZXMKKyMgSS5lIHVzZSAic2V0IExGTj15IiBiZWZvcmUgdW50YXJpbmcgb24gV2luOXgvWFAuCisjIFJlcXVpcmVzIHNlZCwgeWFjYywgcm0gYW5kIHRoZSB1c3VhbCBzdHVmZi4KKyMKKyMgRGVmaW5lIFRPUERJUiBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZS4KKworLlNVRkZJWEVTOiAuZXhlIC55CisKK01BS0VGSUxFID0gTWFrZWZpbGUuZGoKK09CSl9ESVIgPSBkamdwcAorCisjCisjIEZpbmQgb3V0IGlmIHVzaW5nIGEgVU5JWC1saWtlIHNoZWxsIG9yIGEgRE9TIGNvbW1hbmQgaW50ZXJwcmV0ZXIKKyMKK2lmbmVxICgkKGZpbmRzdHJpbmcgQ09NTUFORC5DT00sJChTSEVMTCkpLENPTU1BTkQuQ09NKQorICBpZm5lcSAoJChmaW5kc3RyaW5nIENNRC5FWEUsJChTSEVMTCkpLENNRC5FWEUpCisgICAgaWZuZXEgKCQoZmluZHN0cmluZyA0RE9TLkNPTSwkKFNIRUxMKSksNERPUy5DT00pCisgICAgICBJU19VTklYX1NIRUxMID0gMQorICAgIGVuZGlmCisgIGVuZGlmCitlbmRpZgorCisjCisjIERlZmluZSBzaGVsbCBkZXBlbmRlbnQgY29tbWFuZHMgYW5kIHZhcnMKKyMKK2lmZXEgKCQoSVNfVU5JWF9TSEVMTCksMSkKKyAgQ09QWSAgID0gY3AgLWYKKyAgREVMRVRFID0gcm0gLWYKKyAgTUtESVIgID0gbWtkaXIKKyAgUk1ESVIgID0gcm0gLWYgLXIKKyAgRFMgICAgID0gLworZWxzZQorICBDT1BZICAgPSBjb3B5CisgIERFTEVURSA9IGRlbAorICBNS0RJUiAgPSBta2RpcgorICBSTURJUiAgPSBybWRpcgorICBEUyAgICAgPSBcJChOT1RISU5HKQorZW5kaWYKKworIworIyBPcGVuU1NMIGlzIGF2YWlsYWJsZSBmcm9tIHd3dy5vcGVuc3NsLm9yZyBhbmQgYnVpbGRzIG9rYXkKKyMgd2l0aCBkamdwcC9XYXR0LTMyLiBTZXQgdG8gMCBpZiB5b3UgZG9uJ3QgbmVlZCBodHRwcyBVUkxzCisjIChyZWR1Y2VzIGN1cmwuZXhlIHdpdGggYXBwcm94IDcwMCBrQikKKyMKK1VTRV9TU0wgPSAwCisKKyMKKyMgVXNlIHpsaWIgZm9yIGNvbnRlbnRzIGVuY29kaW5nCisjCitVU0VfWkxJQiA9IDAKKworIworIyBVc2UgbGliaWRuIGZvciBpbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lcworIworVVNFX0lETkEgPSAwCisKKyMKKyMgVXNlIFdhdHQtMzIgSVB2NiBzdGFjayAob25seSBJUHY2IG5hbWUgcmVzb2x1dGlvbiB3b3JraW5nIGF0IHRoZSBtb21lbnQpCisjCitVU0VfSVBWNiA9IDAKKworIworIyBVc2UgQy1BcmVzIHJlc29sdmVyIGxpYnJhcnkKKyMKK1VTRV9BUkVTID0gMAorCisjCisjIEVuYWJsZSBkZWJ1ZyBjb2RlIGluIGxpYmN1cmwvY3VybAorIworVVNFX0RFQlVHID0gMAorCisjCisjIEVuYWJsZSBtZW1vcnkgdHJhY2tpbmcgY29kZSBpbiBsaWJjdXJsL2N1cmwKKyMKK1VTRV9DVVJMREVCVUcgPSAwCisKK2RlZmF1bHQ6IGFsbAorCisjCisjIFJvb3QgZGlyZWN0b3J5IGZvciBXYXRlcmxvbyB0Y3AvaXAgZXRjLiBDaGFuZ2UgdG8gc3VpdGUuCisjIFdBVFRfUk9PVCBzaG91bGQgYmUgc2V0IGR1cmluZyBXYXR0LTMyIGluc3RhbGwuCisjCitXQVRUMzJfUk9PVCAgPSAkKHN1YnN0IFwsLywkKFdBVFRfUk9PVCkpCitPUEVOU1NMX1JPT1QgPSBlOi9uZXQvb3BlbnNzbC4wOTkKK1pMSUJfUk9PVCAgICA9ICQoREpESVIpL2NvbnRyaWIvemxpYgorTElCSUROX1JPT1QgID0gJChUT1BESVIpLy4uL0lETi9saWJpZG4KK0FSRVNfUk9PVCAgICA9ICQoVE9QRElSKS9hcmVzCisKK0NDICAgPSBnY2MKK1lBQ0MgPSBiaXNvbiAteQorCitDRkxBR1MgPSAtZyAtZ2NvZmYgLU8yIC1JLiAtSSQoVE9QRElSKS9pbmNsdWRlIC1JJChUT1BESVIpL2xpYiBcCisgICAgICAgICAtSSQoV0FUVDMyX1JPT1QpL2luYyAtV2FsbCAtREhBVkVfQ09ORklHX0gKKworaWZlcSAoJChVU0VfU1NMKSwxKQorICBDRkxBR1MgKz0gLURVU0VfU1NMRUFZIC1EVVNFX09QRU5TU0wgLUkkKE9QRU5TU0xfUk9PVCkKK2VuZGlmCisKK2lmZXEgKCQoVVNFX1pMSUIpLDEpCisgIENGTEFHUyArPSAtRFVTRV9aTElCIC1JJChaTElCX1JPT1QpCitlbmRpZgorCitpZmVxICgkKFVTRV9JUFY2KSwxKQorICBDRkxBR1MgKz0gLURFTkFCTEVfSVBWNgorZW5kaWYKKworaWZlcSAoJChVU0VfQVJFUyksMSkKKyAgQ0ZMQUdTICs9IC1EVVNFX0FSRVMgLUkkKEFSRVNfUk9PVCkKK2VuZGlmCisKK2lmZXEgKCQoVVNFX0lETkEpLDEpCisgIENGTEFHUyArPSAtREhBVkVfTElCSUROIC1ESEFWRV9JRE5fRlJFRV9IIC1ESEFWRV9JRE5fRlJFRSAtREhBVkVfVExEX0ggXAorICAgICAgICAgICAgLURIQVZFX1RMRF9TVFJFUlJPUiAtSSQoTElCSUROX1JPT1QpL2xpYgorZW5kaWYKKworaWZlcSAoJChVU0VfREVCVUcpLDEpCisgIENGTEFHUyArPSAtRERFQlVHPTEgLURERUJVR0JVSUxECitlbmRpZgorCitpZmVxICgkKFVTRV9DVVJMREVCVUcpLDEpCisgIENGTEFHUyArPSAtRENVUkxERUJVRworZW5kaWYKKworJChPQkpfRElSKToKKwkkKE1LRElSKSAkKE9CSl9ESVIpCisKKyQoT0JKX0RJUikvJS5vOiAlLmMKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgLWMgJDwKKwlAZWNobworCitkZXBlbmQ6ICQoREVQRU5EX1BSRVJFUSkgJChNQUtFRklMRSkKKwkkKENDKSAtTU0gJChDRkxBR1MpICQoQ1NPVVJDRVMpIHwgXAorCXNlZCAtZSAncy9eXChbYS16QS1aMC05Xy1dKlwubzpcKS8kJChPQkpfRElSKVwvXDEvJyA+IGRlcGVuZC5kagpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvRVBNL01ha2VmaWxlLmFtIGIvY3VybC03LjI1LjAvcGFja2FnZXMvRVBNL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMTBhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9FUE0vTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwzIEBACitBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbgorCitFWFRSQV9ESVNUID0gUkVBRE1FIGN1cmwubGlzdC5pbgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvRVBNL01ha2VmaWxlLmluIGIvY3VybC03LjI1LjAvcGFja2FnZXMvRVBNL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODZlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9FUE0vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0MjQgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK0lOU1RBTEwgPSBASU5TVEFMTEAKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IHBhY2thZ2VzL0VQTQorRElTVF9DT01NT04gPSBSRUFETUUgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCisJJChzcmNkaXIpL2N1cmwubGlzdC5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvY3VybC1jb21waWxlcnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1jb25mb3B0cy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWZ1bmN0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW9wZW5zc2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vdmVycmlkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXJlZW50cmFudC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXN5c3RlbS5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94Yy10cmFuc2xpdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC96ejUwLXhjLW92ci5tNCAkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL3NyYy9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oCitDT05GSUdfQ0xFQU5fRklMRVMgPSBjdXJsLmxpc3QKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQlVJTERfTElCSE9TVE5BTUVfRkFMU0UgPSBAQlVJTERfTElCSE9TVE5BTUVfRkFMU0VACitCVUlMRF9MSUJIT1NUTkFNRV9UUlVFID0gQEJVSUxEX0xJQkhPU1ROQU1FX1RSVUVACitCVUlMRF9VTklUVEVTVFNfRkFMU0UgPSBAQlVJTERfVU5JVFRFU1RTX0ZBTFNFQAorQlVJTERfVU5JVFRFU1RTX1RSVUUgPSBAQlVJTERfVU5JVFRFU1RTX1RSVUVACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ09ORklHVVJFX09QVElPTlMgPSBAQ09ORklHVVJFX09QVElPTlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDUk9TU0NPTVBJTElOR19GQUxTRSA9IEBDUk9TU0NPTVBJTElOR19GQUxTRUAKK0NST1NTQ09NUElMSU5HX1RSVUUgPSBAQ1JPU1NDT01QSUxJTkdfVFJVRUAKK0NVUkxERUJVR19GQUxTRSA9IEBDVVJMREVCVUdfRkFMU0VACitDVVJMREVCVUdfVFJVRSA9IEBDVVJMREVCVUdfVFJVRUAKK0NVUkxWRVJTSU9OID0gQENVUkxWRVJTSU9OQAorQ1VSTF9DQV9CVU5ETEUgPSBAQ1VSTF9DQV9CVU5ETEVACitDVVJMX0NGTEFHX0VYVFJBUyA9IEBDVVJMX0NGTEFHX0VYVFJBU0AKK0NVUkxfRElTQUJMRV9ESUNUID0gQENVUkxfRElTQUJMRV9ESUNUQAorQ1VSTF9ESVNBQkxFX0ZJTEUgPSBAQ1VSTF9ESVNBQkxFX0ZJTEVACitDVVJMX0RJU0FCTEVfRlRQID0gQENVUkxfRElTQUJMRV9GVFBACitDVVJMX0RJU0FCTEVfR09QSEVSID0gQENVUkxfRElTQUJMRV9HT1BIRVJACitDVVJMX0RJU0FCTEVfSFRUUCA9IEBDVVJMX0RJU0FCTEVfSFRUUEAKK0NVUkxfRElTQUJMRV9JTUFQID0gQENVUkxfRElTQUJMRV9JTUFQQAorQ1VSTF9ESVNBQkxFX0xEQVAgPSBAQ1VSTF9ESVNBQkxFX0xEQVBACitDVVJMX0RJU0FCTEVfTERBUFMgPSBAQ1VSTF9ESVNBQkxFX0xEQVBTQAorQ1VSTF9ESVNBQkxFX1BPUDMgPSBAQ1VSTF9ESVNBQkxFX1BPUDNACitDVVJMX0RJU0FCTEVfUFJPWFkgPSBAQ1VSTF9ESVNBQkxFX1BST1hZQAorQ1VSTF9ESVNBQkxFX1JUU1AgPSBAQ1VSTF9ESVNBQkxFX1JUU1BACitDVVJMX0RJU0FCTEVfU01UUCA9IEBDVVJMX0RJU0FCTEVfU01UUEAKK0NVUkxfRElTQUJMRV9URUxORVQgPSBAQ1VSTF9ESVNBQkxFX1RFTE5FVEAKK0NVUkxfRElTQUJMRV9URlRQID0gQENVUkxfRElTQUJMRV9URlRQQAorQ1VSTF9MSUJTID0gQENVUkxfTElCU0AKK0NVUkxfTkVUV09SS19MSUJTID0gQENVUkxfTkVUV09SS19MSUJTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NIQVJFRCA9IEBFTkFCTEVfU0hBUkVEQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSEFWRV9HTlVUTFNfU1JQID0gQEhBVkVfR05VVExTX1NSUEAKK0hBVkVfTERBUF9TU0wgPSBASEFWRV9MREFQX1NTTEAKK0hBVkVfTElCWiA9IEBIQVZFX0xJQlpACitIQVZFX0xJQlpfRkFMU0UgPSBASEFWRV9MSUJaX0ZBTFNFQAorSEFWRV9MSUJaX1RSVUUgPSBASEFWRV9MSUJaX1RSVUVACitIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVCA9IEBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVEAKK0hBVkVfU1NMRUFZX1NSUCA9IEBIQVZFX1NTTEVBWV9TUlBACitJRE5fRU5BQkxFRCA9IEBJRE5fRU5BQkxFREAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSVBWNl9FTkFCTEVEID0gQElQVjZfRU5BQkxFREAKK0tSQjRfRU5BQkxFRCA9IEBLUkI0X0VOQUJMRURACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkNVUkxfTElCUyA9IEBMSUJDVVJMX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUlOVEFJTkVSX01PREVfRkFMU0UgPSBATUFJTlRBSU5FUl9NT0RFX0ZBTFNFQAorTUFJTlRBSU5FUl9NT0RFX1RSVUUgPSBATUFJTlRBSU5FUl9NT0RFX1RSVUVACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01BTk9QVCA9IEBNQU5PUFRACitNSU1QVVJFX0ZBTFNFID0gQE1JTVBVUkVfRkFMU0VACitNSU1QVVJFX1RSVUUgPSBATUlNUFVSRV9UUlVFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorTk9fVU5ERUZJTkVEX0ZBTFNFID0gQE5PX1VOREVGSU5FRF9GQUxTRUAKK05PX1VOREVGSU5FRF9UUlVFID0gQE5PX1VOREVGSU5FRF9UUlVFQAorTlJPRkYgPSBATlJPRkZACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIID0gQFBBVEhACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkwgPSBAUEVSTEAKK1BLR0FERF9OQU1FID0gQFBLR0FERF9OQU1FQAorUEtHQUREX1BLRyA9IEBQS0dBRERfUEtHQAorUEtHQUREX1ZFTkRPUiA9IEBQS0dBRERfVkVORE9SQAorUEtHQ09ORklHID0gQFBLR0NPTkZJR0AKK1JBTkRPTV9GSUxFID0gQFJBTkRPTV9GSUxFQAorUkFOTElCID0gQFJBTkxJQkAKK1JFUVVJUkVfTElCX0RFUFMgPSBAUkVRVUlSRV9MSUJfREVQU0AKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU09OQU1FX0JVTVBfRkFMU0UgPSBAU09OQU1FX0JVTVBfRkFMU0VACitTT05BTUVfQlVNUF9UUlVFID0gQFNPTkFNRV9CVU1QX1RSVUVACitTU0xfRU5BQkxFRCA9IEBTU0xfRU5BQkxFREAKK1NUQVRJQ0xJQl9GQUxTRSA9IEBTVEFUSUNMSUJfRkFMU0VACitTVEFUSUNMSUJfVFJVRSA9IEBTVEFUSUNMSUJfVFJVRUAKK1NUUklQID0gQFNUUklQQAorU1VQUE9SVF9GRUFUVVJFUyA9IEBTVVBQT1JUX0ZFQVRVUkVTQAorU1VQUE9SVF9QUk9UT0NPTFMgPSBAU1VQUE9SVF9QUk9UT0NPTFNACitURVNUX1NFUlZFUl9MSUJTID0gQFRFU1RfU0VSVkVSX0xJQlNACitVU0VfQVJFUyA9IEBVU0VfQVJFU0AKK1VTRV9BWFRMUyA9IEBVU0VfQVhUTFNACitVU0VfQ1lBU1NMID0gQFVTRV9DWUFTU0xACitVU0VfRU1CRURERURfQVJFU19GQUxTRSA9IEBVU0VfRU1CRURERURfQVJFU19GQUxTRUAKK1VTRV9FTUJFRERFRF9BUkVTX1RSVUUgPSBAVVNFX0VNQkVEREVEX0FSRVNfVFJVRUAKK1VTRV9HTlVUTFMgPSBAVVNFX0dOVVRMU0AKK1VTRV9HTlVUTFNfTkVUVExFID0gQFVTRV9HTlVUTFNfTkVUVExFQAorVVNFX0xJQlJUTVAgPSBAVVNFX0xJQlJUTVBACitVU0VfTElCU1NIMiA9IEBVU0VfTElCU1NIMkAKK1VTRV9NQU5VQUxfRkFMU0UgPSBAVVNFX01BTlVBTF9GQUxTRUAKK1VTRV9NQU5VQUxfVFJVRSA9IEBVU0VfTUFOVUFMX1RSVUVACitVU0VfTlNTID0gQFVTRV9OU1NACitVU0VfT1BFTkxEQVAgPSBAVVNFX09QRU5MREFQQAorVVNFX1BPTEFSU1NMID0gQFVTRV9QT0xBUlNTTEAKK1VTRV9TU0xFQVkgPSBAVVNFX1NTTEVBWUAKK1VTRV9XSU5ET1dTX1NTUEkgPSBAVVNFX1dJTkRPV1NfU1NQSUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZFUlNJT05FRF9GTEFWT1VSID0gQFZFUlNJT05FRF9GTEFWT1VSQAorVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0UgPSBAVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0VACitWRVJTSU9ORURfU1lNQk9MU19UUlVFID0gQFZFUlNJT05FRF9TWU1CT0xTX1RSVUVACitWRVJTSU9OTlVNID0gQFZFUlNJT05OVU1ACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAorYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsaWJleHQgPSBAbGliZXh0QAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzdWJkaXJzID0gQHN1YmRpcnNACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAorQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24KK0VYVFJBX0RJU1QgPSBSRUFETUUgY3VybC5saXN0LmluCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgcGFja2FnZXMvRVBNL01ha2VmaWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBwYWNrYWdlcy9FUE0vTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKK2N1cmwubGlzdDogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2N1cmwubGlzdC5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK2Rpc3RjbGVhbi1saWJ0b29sOgorCS1ybSAtZiBsaWJ0b29sCit1bmluc3RhbGwtaW5mby1hbToKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbAorCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKKwl1bmluc3RhbGwtaW5mby1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9FUE0vUkVBRE1FIGIvY3VybC03LjI1LjAvcGFja2FnZXMvRVBNL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTI5ZGJmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvRVBNL1JFQURNRQpAQCAtMCwwICsxLDEyIEBACitFUE0gaXMgYSBmcmVlIFVOSVggc29mdHdhcmUvZmlsZSBwYWNrYWdpbmcgcHJvZ3JhbSB0aGF0IGdlbmVyYXRlcyBkaXN0cmlidXRpb24KK2FyY2hpdmVzIGZyb20gYSBsaXN0IG9mIGZpbGVzLiBFUE0gQ2FuOgorCisgKiBHZW5lcmF0ZSBwb3J0YWJsZSBzY3JpcHQtYmFzZWQgZGlzdHJpYnV0aW9uIHBhY2thZ2VzIGNvbXBsZXRlIHdpdGgKKyAgIGluc3RhbGxhdGlvbiBhbmQgcmVtb3ZhbCBzY3JpcHRzLgorICogR2VuZXJhdGUgdmVuZG9yIGRpc3RyaWJ1dGlvbnMgaW4gQUlYLCBCU0QsIENvbXBhcSBUcnU2NCwgRGViaWFuLCBIUC1VWCwKKyAgIElSSVgsIFJlZCBIYXQsIGFuZCBTb2xhcmlzIGZvcm1hdHMuCisgKiBQcm92aWRlIGEgY29tcGxldGUsIGNyb3NzLXBsYXRmb3JtIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzb2x1dGlvbiBmb3IgeW91cgorICAgYXBwbGljYXRpb25zLgorCitodHRwOi8vd3d3LmVhc3lzdy5jb20vZXBtLworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9FUE0vY3VybC5saXN0LmluIGIvY3VybC03LjI1LjAvcGFja2FnZXMvRVBNL2N1cmwubGlzdC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTA2MGRkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvRVBNL2N1cmwubGlzdC5pbgpAQCAtMCwwICsxLDU5IEBACisjIERpcmVjdG9yaWVzLi4uCiskcHJlZml4PUBwcmVmaXhACiskZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorJGJpbmRpcj1AYmluZGlyQAorJGNvbmZkaXI9QHN5c2NvbmZkaXJACiskZG9jZGlyPUBwcmVmaXhAL2RvYworJG1hbmRpcj1AbWFuZGlyQAorJGxpYmRpcj1AbGliZGlyQAorJHNyY2Rpcj1AdG9wX3NyY2RpckAKKyRpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorJGRhdGFyb290ZGlyPUBkYXRhcm9vdGRpckAKKworIyBQcm9kdWN0IGluZm9ybWF0aW9uCislcHJvZHVjdCBjdXJsCislY29weXJpZ2h0IDE5OTgtMjAwMiBieSBEYW5pZWwgU3RlbmJlcmcKKyV2ZW5kb3IgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+CislbGljZW5zZSAke3NyY2Rpcn0vTUlUWC50eHQKKyVyZWFkbWUgJHtzcmNkaXJ9L1JFQURNRQorJWRlc2NyaXB0aW9uIEN1cmwgaXMgYSBjb21tYW5kIGxpbmUgdG9vbCBmb3IgdHJhbnNmZXJpbmcgZGF0YSBzcGVjaWZpZWQKKyVkZXNjcmlwdGlvbiB3aXRoIFVSTCBzeW50YXgKKyV2ZXJzaW9uIEBWRVJTSU9OQAorJXBhY2thZ2VyIEdpdXNlcHBlICJDb3dvIiBDb3JiZWxsaSA8Y293b0BsdWdicy5saW51eC5pdD4KKworZiAwNjQ0IGNvd28gcHBwdXNlcnMgJHttYW5kaXJ9L21hbjEvY3VybC4xIC4vZG9jcy9jdXJsLjEKK2YgMDY0NCBjb3dvIHBwcHVzZXJzICR7bWFuZGlyfS9tYW4xL2N1cmwtY29uZmlnLjEgLi9kb2NzL2N1cmwtY29uZmlnLjEKK2YgMDY0NCBjb3dvIHBwcHVzZXJzICR7bWFuZGlyfS9tYW4zL2N1cmxfZWFzeV9jbGVhbnVwLjMgLi9kb2NzL2N1cmxfZWFzeV9jbGVhbnVwLjMKK2YgMDY0NCBjb3dvIHBwcHVzZXJzICR7bWFuZGlyfS9tYW4zL2N1cmxfZWFzeV9nZXRpbmZvLjMgLi9kb2NzL2N1cmxfZWFzeV9nZXRpbmZvLjMKK2YgMDY0NCBjb3dvIHBwcHVzZXJzICR7bWFuZGlyfS9tYW4zL2N1cmxfZWFzeV9pbml0LjMgLi9kb2NzL2N1cmxfZWFzeV9pbml0LjMKK2YgMDY0NCBjb3dvIHBwcHVzZXJzICR7bWFuZGlyfS9tYW4zL2N1cmxfZWFzeV9wZXJmb3JtLjMgLi9kb2NzL2N1cmxfZWFzeV9wZXJmb3JtLjMKK2YgMDY0NCBjb3dvIHBwcHVzZXJzICR7bWFuZGlyfS9tYW4zL2N1cmxfZWFzeV9zZXRvcHQuMyAuL2RvY3MvY3VybF9lYXN5X3NldG9wdC4zCitmIDA2NDQgY293byBwcHB1c2VycyAke21hbmRpcn0vbWFuMy9jdXJsX2Vhc3lfZHVwaGFuZGxlLjMgLi9kb2NzL2N1cmxfZWFzeV9kdXBoYW5kbGUuMworZiAwNjQ0IGNvd28gcHBwdXNlcnMgJHttYW5kaXJ9L21hbjMvY3VybF9mb3JtcGFyc2UuMyAuL2RvY3MvY3VybF9mb3JtcGFyc2UuMworZiAwNjQ0IGNvd28gcHBwdXNlcnMgJHttYW5kaXJ9L21hbjMvY3VybF9mb3JtYWRkLjMgLi9kb2NzL2N1cmxfZm9ybWFkZC4zCitmIDA2NDQgY293byBwcHB1c2VycyAke21hbmRpcn0vbWFuMy9jdXJsX2Zvcm1mcmVlLjMgLi9kb2NzL2N1cmxfZm9ybWZyZWUuMworZiAwNjQ0IGNvd28gcHBwdXNlcnMgJHttYW5kaXJ9L21hbjMvY3VybF9nZXRkYXRlLjMgLi9kb2NzL2N1cmxfZ2V0ZGF0ZS4zCitmIDA2NDQgY293byBwcHB1c2VycyAke21hbmRpcn0vbWFuMy9jdXJsX2dldGVudi4zIC4vZG9jcy9jdXJsX2dldGVudi4zCitmIDA2NDQgY293byBwcHB1c2VycyAke21hbmRpcn0vbWFuMy9jdXJsX3NsaXN0X2FwcGVuZC4zIC4vZG9jcy9jdXJsX3NsaXN0X2FwcGVuZC4zCitmIDA2NDQgY293byBwcHB1c2VycyAke21hbmRpcn0vbWFuMy9jdXJsX3NsaXN0X2ZyZWVfYWxsLjMgLi9kb2NzL2N1cmxfc2xpc3RfZnJlZV9hbGwuMworZiAwNjQ0IGNvd28gcHBwdXNlcnMgJHttYW5kaXJ9L21hbjMvY3VybF92ZXJzaW9uLjMgLi9kb2NzL2N1cmxfdmVyc2lvbi4zCitmIDA2NDQgY293byBwcHB1c2VycyAke21hbmRpcn0vbWFuMy9jdXJsX2VzY2FwZS4zIC4vZG9jcy9jdXJsX2VzY2FwZS4zCitmIDA2NDQgY293byBwcHB1c2VycyAke21hbmRpcn0vbWFuMy9jdXJsX3VuZXNjYXBlLjMgLi9kb2NzL2N1cmxfdW5lc2NhcGUuMworZiAwNjQ0IGNvd28gcHBwdXNlcnMgJHttYW5kaXJ9L21hbjMvY3VybF9zdHJlcXVhbC4zIC4vZG9jcy9jdXJsX3N0cmVxdWFsLjMKK2YgMDY0NCBjb3dvIHBwcHVzZXJzICR7bWFuZGlyfS9tYW4zL2N1cmxfc3RybmVxdWFsLjMgLi9kb2NzL2N1cmxfc3RybmVxdWFsLjMKK2YgMDY0NCBjb3dvIHBwcHVzZXJzICR7bWFuZGlyfS9tYW4zL2N1cmxfbXByaW50Zi4zIC4vZG9jcy9jdXJsX21wcmludGYuMworZiAwNjQ0IGNvd28gcHBwdXNlcnMgJHttYW5kaXJ9L21hbjMvY3VybF9nbG9iYWxfaW5pdC4zIC4vZG9jcy9jdXJsX2dsb2JhbF9pbml0LjMKK2YgMDY0NCBjb3dvIHBwcHVzZXJzICR7bWFuZGlyfS9tYW4zL2N1cmxfZ2xvYmFsX2NsZWFudXAuMyAuL2RvY3MvY3VybF9nbG9iYWxfY2xlYW51cC4zCitmIDA2NDQgY293byBwcHB1c2VycyAke21hbmRpcn0vbWFuMy9saWJjdXJsLjMgLi9kb2NzL2xpYmN1cmwuMworZiAwNzU1IGNvd28gcHBwdXNlcnMgJHtsaWJkaXJ9L2xpYmN1cmwuc28uMi4wLjIgLi9saWIvLmxpYnMvbGliY3VybC5zby4yLjAuMgorZiAwNzU1IGNvd28gcHBwdXNlcnMgJHtsaWJkaXJ9L2xpYmN1cmwubGEgLi9saWIvbGliY3VybC5sYQorZiAwNzU1IGNvd28gcHBwdXNlcnMgJHtsaWJkaXJ9L2xpYmN1cmwubGEgLi9saWIvLmxpYnMvbGliY3VybC5sYQorZiAwNjQ0IGNvd28gcHBwdXNlcnMgJHtsaWJkaXJ9L2xpYmN1cmwuYSAuL2xpYi8ubGlicy9saWJjdXJsLmEKK2YgMDc1NSBjb3dvIHBwcHVzZXJzICR7YmluZGlyfS9jdXJsIC4vc3JjL2N1cmwKK2YgMDc1NSBjb3dvIHBwcHVzZXJzICR7YmluZGlyfS9jdXJsIC4vc3JjLy5saWJzL2N1cmwKK2YgMDY0NCBjb3dvIHBwcHVzZXJzICR7aW5jbHVkZWRpcn0vY3VybC9jdXJsLmggLi9pbmNsdWRlL2N1cmwvY3VybC5oCitmIDA2NDQgY293byBwcHB1c2VycyAke2luY2x1ZGVkaXJ9L2N1cmwvZWFzeS5oIC4vaW5jbHVkZS9jdXJsL2Vhc3kuaAorZiAwNjQ0IGNvd28gcHBwdXNlcnMgJHtpbmNsdWRlZGlyfS9jdXJsL21wcmludGYuaCAuL2luY2x1ZGUvY3VybC9tcHJpbnRmLmgKK2YgMDY0NCBjb3dvIHBwcHVzZXJzICR7aW5jbHVkZWRpcn0vY3VybC9zdGRjaGVhZGVycy5oIC4vaW5jbHVkZS9jdXJsL3N0ZGNoZWFkZXJzLmgKK2YgMDY0NCBjb3dvIHBwcHVzZXJzICR7aW5jbHVkZWRpcn0vY3VybC90eXBlcy5oIC4vaW5jbHVkZS9jdXJsL3R5cGVzLmgKK2YgMDc1NSBjb3dvIHBwcHVzZXJzICR7YmluZGlyfS9jdXJsLWNvbmZpZyAuL2N1cmwtY29uZmlnCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9MaW51eC9NYWtlZmlsZS5hbSBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0xpbnV4L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NTMwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9MaW51eC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxIEBACitTVUJESVJTID0gUlBNCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9MaW51eC9NYWtlZmlsZS5pbiBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0xpbnV4L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZjBhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9MaW51eC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDU3NyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLi8uLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gcGFja2FnZXMvTGludXgKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvY3VybC1jb21waWxlcnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1jb25mb3B0cy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWZ1bmN0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW9wZW5zc2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vdmVycmlkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXJlZW50cmFudC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXN5c3RlbS5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94Yy10cmFuc2xpdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC96ejUwLXhjLW92ci5tNCAkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL3NyYy9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKwlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIFwKKwlwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbC1yZWN1cnNpdmUKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQlVJTERfTElCSE9TVE5BTUVfRkFMU0UgPSBAQlVJTERfTElCSE9TVE5BTUVfRkFMU0VACitCVUlMRF9MSUJIT1NUTkFNRV9UUlVFID0gQEJVSUxEX0xJQkhPU1ROQU1FX1RSVUVACitCVUlMRF9VTklUVEVTVFNfRkFMU0UgPSBAQlVJTERfVU5JVFRFU1RTX0ZBTFNFQAorQlVJTERfVU5JVFRFU1RTX1RSVUUgPSBAQlVJTERfVU5JVFRFU1RTX1RSVUVACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ09ORklHVVJFX09QVElPTlMgPSBAQ09ORklHVVJFX09QVElPTlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDUk9TU0NPTVBJTElOR19GQUxTRSA9IEBDUk9TU0NPTVBJTElOR19GQUxTRUAKK0NST1NTQ09NUElMSU5HX1RSVUUgPSBAQ1JPU1NDT01QSUxJTkdfVFJVRUAKK0NVUkxERUJVR19GQUxTRSA9IEBDVVJMREVCVUdfRkFMU0VACitDVVJMREVCVUdfVFJVRSA9IEBDVVJMREVCVUdfVFJVRUAKK0NVUkxWRVJTSU9OID0gQENVUkxWRVJTSU9OQAorQ1VSTF9DQV9CVU5ETEUgPSBAQ1VSTF9DQV9CVU5ETEVACitDVVJMX0NGTEFHX0VYVFJBUyA9IEBDVVJMX0NGTEFHX0VYVFJBU0AKK0NVUkxfRElTQUJMRV9ESUNUID0gQENVUkxfRElTQUJMRV9ESUNUQAorQ1VSTF9ESVNBQkxFX0ZJTEUgPSBAQ1VSTF9ESVNBQkxFX0ZJTEVACitDVVJMX0RJU0FCTEVfRlRQID0gQENVUkxfRElTQUJMRV9GVFBACitDVVJMX0RJU0FCTEVfR09QSEVSID0gQENVUkxfRElTQUJMRV9HT1BIRVJACitDVVJMX0RJU0FCTEVfSFRUUCA9IEBDVVJMX0RJU0FCTEVfSFRUUEAKK0NVUkxfRElTQUJMRV9JTUFQID0gQENVUkxfRElTQUJMRV9JTUFQQAorQ1VSTF9ESVNBQkxFX0xEQVAgPSBAQ1VSTF9ESVNBQkxFX0xEQVBACitDVVJMX0RJU0FCTEVfTERBUFMgPSBAQ1VSTF9ESVNBQkxFX0xEQVBTQAorQ1VSTF9ESVNBQkxFX1BPUDMgPSBAQ1VSTF9ESVNBQkxFX1BPUDNACitDVVJMX0RJU0FCTEVfUFJPWFkgPSBAQ1VSTF9ESVNBQkxFX1BST1hZQAorQ1VSTF9ESVNBQkxFX1JUU1AgPSBAQ1VSTF9ESVNBQkxFX1JUU1BACitDVVJMX0RJU0FCTEVfU01UUCA9IEBDVVJMX0RJU0FCTEVfU01UUEAKK0NVUkxfRElTQUJMRV9URUxORVQgPSBAQ1VSTF9ESVNBQkxFX1RFTE5FVEAKK0NVUkxfRElTQUJMRV9URlRQID0gQENVUkxfRElTQUJMRV9URlRQQAorQ1VSTF9MSUJTID0gQENVUkxfTElCU0AKK0NVUkxfTkVUV09SS19MSUJTID0gQENVUkxfTkVUV09SS19MSUJTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NIQVJFRCA9IEBFTkFCTEVfU0hBUkVEQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSEFWRV9HTlVUTFNfU1JQID0gQEhBVkVfR05VVExTX1NSUEAKK0hBVkVfTERBUF9TU0wgPSBASEFWRV9MREFQX1NTTEAKK0hBVkVfTElCWiA9IEBIQVZFX0xJQlpACitIQVZFX0xJQlpfRkFMU0UgPSBASEFWRV9MSUJaX0ZBTFNFQAorSEFWRV9MSUJaX1RSVUUgPSBASEFWRV9MSUJaX1RSVUVACitIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVCA9IEBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVEAKK0hBVkVfU1NMRUFZX1NSUCA9IEBIQVZFX1NTTEVBWV9TUlBACitJRE5fRU5BQkxFRCA9IEBJRE5fRU5BQkxFREAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSVBWNl9FTkFCTEVEID0gQElQVjZfRU5BQkxFREAKK0tSQjRfRU5BQkxFRCA9IEBLUkI0X0VOQUJMRURACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkNVUkxfTElCUyA9IEBMSUJDVVJMX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUlOVEFJTkVSX01PREVfRkFMU0UgPSBATUFJTlRBSU5FUl9NT0RFX0ZBTFNFQAorTUFJTlRBSU5FUl9NT0RFX1RSVUUgPSBATUFJTlRBSU5FUl9NT0RFX1RSVUVACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01BTk9QVCA9IEBNQU5PUFRACitNSU1QVVJFX0ZBTFNFID0gQE1JTVBVUkVfRkFMU0VACitNSU1QVVJFX1RSVUUgPSBATUlNUFVSRV9UUlVFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorTk9fVU5ERUZJTkVEX0ZBTFNFID0gQE5PX1VOREVGSU5FRF9GQUxTRUAKK05PX1VOREVGSU5FRF9UUlVFID0gQE5PX1VOREVGSU5FRF9UUlVFQAorTlJPRkYgPSBATlJPRkZACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIID0gQFBBVEhACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkwgPSBAUEVSTEAKK1BLR0FERF9OQU1FID0gQFBLR0FERF9OQU1FQAorUEtHQUREX1BLRyA9IEBQS0dBRERfUEtHQAorUEtHQUREX1ZFTkRPUiA9IEBQS0dBRERfVkVORE9SQAorUEtHQ09ORklHID0gQFBLR0NPTkZJR0AKK1JBTkRPTV9GSUxFID0gQFJBTkRPTV9GSUxFQAorUkFOTElCID0gQFJBTkxJQkAKK1JFUVVJUkVfTElCX0RFUFMgPSBAUkVRVUlSRV9MSUJfREVQU0AKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU09OQU1FX0JVTVBfRkFMU0UgPSBAU09OQU1FX0JVTVBfRkFMU0VACitTT05BTUVfQlVNUF9UUlVFID0gQFNPTkFNRV9CVU1QX1RSVUVACitTU0xfRU5BQkxFRCA9IEBTU0xfRU5BQkxFREAKK1NUQVRJQ0xJQl9GQUxTRSA9IEBTVEFUSUNMSUJfRkFMU0VACitTVEFUSUNMSUJfVFJVRSA9IEBTVEFUSUNMSUJfVFJVRUAKK1NUUklQID0gQFNUUklQQAorU1VQUE9SVF9GRUFUVVJFUyA9IEBTVVBQT1JUX0ZFQVRVUkVTQAorU1VQUE9SVF9QUk9UT0NPTFMgPSBAU1VQUE9SVF9QUk9UT0NPTFNACitURVNUX1NFUlZFUl9MSUJTID0gQFRFU1RfU0VSVkVSX0xJQlNACitVU0VfQVJFUyA9IEBVU0VfQVJFU0AKK1VTRV9BWFRMUyA9IEBVU0VfQVhUTFNACitVU0VfQ1lBU1NMID0gQFVTRV9DWUFTU0xACitVU0VfRU1CRURERURfQVJFU19GQUxTRSA9IEBVU0VfRU1CRURERURfQVJFU19GQUxTRUAKK1VTRV9FTUJFRERFRF9BUkVTX1RSVUUgPSBAVVNFX0VNQkVEREVEX0FSRVNfVFJVRUAKK1VTRV9HTlVUTFMgPSBAVVNFX0dOVVRMU0AKK1VTRV9HTlVUTFNfTkVUVExFID0gQFVTRV9HTlVUTFNfTkVUVExFQAorVVNFX0xJQlJUTVAgPSBAVVNFX0xJQlJUTVBACitVU0VfTElCU1NIMiA9IEBVU0VfTElCU1NIMkAKK1VTRV9NQU5VQUxfRkFMU0UgPSBAVVNFX01BTlVBTF9GQUxTRUAKK1VTRV9NQU5VQUxfVFJVRSA9IEBVU0VfTUFOVUFMX1RSVUVACitVU0VfTlNTID0gQFVTRV9OU1NACitVU0VfT1BFTkxEQVAgPSBAVVNFX09QRU5MREFQQAorVVNFX1BPTEFSU1NMID0gQFVTRV9QT0xBUlNTTEAKK1VTRV9TU0xFQVkgPSBAVVNFX1NTTEVBWUAKK1VTRV9XSU5ET1dTX1NTUEkgPSBAVVNFX1dJTkRPV1NfU1NQSUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZFUlNJT05FRF9GTEFWT1VSID0gQFZFUlNJT05FRF9GTEFWT1VSQAorVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0UgPSBAVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0VACitWRVJTSU9ORURfU1lNQk9MU19UUlVFID0gQFZFUlNJT05FRF9TWU1CT0xTX1RSVUVACitWRVJTSU9OTlVNID0gQFZFUlNJT05OVU1ACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAorYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsaWJleHQgPSBAbGliZXh0QAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzdWJkaXJzID0gQHN1YmRpcnNACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAorU1VCRElSUyA9IFJQTQorYWxsOiBhbGwtcmVjdXJzaXZlCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBwYWNrYWdlcy9MaW51eC9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgcGFja2FnZXMvTGludXgvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgorCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKK21haW50YWluZXItY2xlYW4tcmVjdXJzaXZlOgorCUBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQobWtkaXJfcCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKKwkgICAgdG9wX2Rpc3RkaXI9YCQoYW1fX2NkKSAkKHRvcF9kaXN0ZGlyKSAmJiBwd2RgOyBcCisJICAgIChjZCAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KKwordW5pbnN0YWxsLWluZm86IHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gXAorCWNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1yZWN1cnNpdmUgY3RhZ3MgXAorCWN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlIFwKKwltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvTGludXgvUlBNL01ha2VmaWxlLmFtIGIvY3VybC03LjI1LjAvcGFja2FnZXMvTGludXgvUlBNL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNDZkODcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9MaW51eC9SUE0vTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwyIEBACitFWFRSQV9ESVNUID0gUkVBRE1FIGN1cmwtc3NsLnNwZWMuaW4gY3VybC5zcGVjLmluIG1ha2VfY3VybF9ycG0KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvTGludXgvUlBNL01ha2VmaWxlLmluIGIvY3VybC03LjI1LjAvcGFja2FnZXMvTGludXgvUlBNL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMmQ3OTMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9MaW51eC9SUE0vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0MjUgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4KK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK0lOU1RBTEwgPSBASU5TVEFMTEAKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IHBhY2thZ2VzL0xpbnV4L1JQTQorRElTVF9DT01NT04gPSBSRUFETUUgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCisJJChzcmNkaXIpL2N1cmwtc3NsLnNwZWMuaW4gJChzcmNkaXIpL2N1cmwuc3BlYy5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvY3VybC1jb21waWxlcnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1jb25mb3B0cy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWZ1bmN0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW9wZW5zc2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vdmVycmlkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXJlZW50cmFudC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXN5c3RlbS5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94Yy10cmFuc2xpdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC96ejUwLXhjLW92ci5tNCAkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL3NyYy9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oCitDT05GSUdfQ0xFQU5fRklMRVMgPSBjdXJsLnNwZWMgY3VybC1zc2wuc3BlYworU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRUAKK0JVSUxEX0xJQkhPU1ROQU1FX1RSVUUgPSBAQlVJTERfTElCSE9TVE5BTUVfVFJVRUAKK0JVSUxEX1VOSVRURVNUU19GQUxTRSA9IEBCVUlMRF9VTklUVEVTVFNfRkFMU0VACitCVUlMRF9VTklUVEVTVFNfVFJVRSA9IEBCVUlMRF9VTklUVEVTVFNfVFJVRUAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDT05GSUdVUkVfT1BUSU9OUyA9IEBDT05GSUdVUkVfT1BUSU9OU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NST1NTQ09NUElMSU5HX0ZBTFNFID0gQENST1NTQ09NUElMSU5HX0ZBTFNFQAorQ1JPU1NDT01QSUxJTkdfVFJVRSA9IEBDUk9TU0NPTVBJTElOR19UUlVFQAorQ1VSTERFQlVHX0ZBTFNFID0gQENVUkxERUJVR19GQUxTRUAKK0NVUkxERUJVR19UUlVFID0gQENVUkxERUJVR19UUlVFQAorQ1VSTFZFUlNJT04gPSBAQ1VSTFZFUlNJT05ACitDVVJMX0NBX0JVTkRMRSA9IEBDVVJMX0NBX0JVTkRMRUAKK0NVUkxfQ0ZMQUdfRVhUUkFTID0gQENVUkxfQ0ZMQUdfRVhUUkFTQAorQ1VSTF9ESVNBQkxFX0RJQ1QgPSBAQ1VSTF9ESVNBQkxFX0RJQ1RACitDVVJMX0RJU0FCTEVfRklMRSA9IEBDVVJMX0RJU0FCTEVfRklMRUAKK0NVUkxfRElTQUJMRV9GVFAgPSBAQ1VSTF9ESVNBQkxFX0ZUUEAKK0NVUkxfRElTQUJMRV9HT1BIRVIgPSBAQ1VSTF9ESVNBQkxFX0dPUEhFUkAKK0NVUkxfRElTQUJMRV9IVFRQID0gQENVUkxfRElTQUJMRV9IVFRQQAorQ1VSTF9ESVNBQkxFX0lNQVAgPSBAQ1VSTF9ESVNBQkxFX0lNQVBACitDVVJMX0RJU0FCTEVfTERBUCA9IEBDVVJMX0RJU0FCTEVfTERBUEAKK0NVUkxfRElTQUJMRV9MREFQUyA9IEBDVVJMX0RJU0FCTEVfTERBUFNACitDVVJMX0RJU0FCTEVfUE9QMyA9IEBDVVJMX0RJU0FCTEVfUE9QM0AKK0NVUkxfRElTQUJMRV9QUk9YWSA9IEBDVVJMX0RJU0FCTEVfUFJPWFlACitDVVJMX0RJU0FCTEVfUlRTUCA9IEBDVVJMX0RJU0FCTEVfUlRTUEAKK0NVUkxfRElTQUJMRV9TTVRQID0gQENVUkxfRElTQUJMRV9TTVRQQAorQ1VSTF9ESVNBQkxFX1RFTE5FVCA9IEBDVVJMX0RJU0FCTEVfVEVMTkVUQAorQ1VSTF9ESVNBQkxFX1RGVFAgPSBAQ1VSTF9ESVNBQkxFX1RGVFBACitDVVJMX0xJQlMgPSBAQ1VSTF9MSUJTQAorQ1VSTF9ORVRXT1JLX0xJQlMgPSBAQ1VSTF9ORVRXT1JLX0xJQlNACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU0hBUkVEID0gQEVOQUJMRV9TSEFSRURACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitIQVZFX0dOVVRMU19TUlAgPSBASEFWRV9HTlVUTFNfU1JQQAorSEFWRV9MREFQX1NTTCA9IEBIQVZFX0xEQVBfU1NMQAorSEFWRV9MSUJaID0gQEhBVkVfTElCWkAKK0hBVkVfTElCWl9GQUxTRSA9IEBIQVZFX0xJQlpfRkFMU0VACitIQVZFX0xJQlpfVFJVRSA9IEBIQVZFX0xJQlpfVFJVRUAKK0hBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUID0gQEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUQAorSEFWRV9TU0xFQVlfU1JQID0gQEhBVkVfU1NMRUFZX1NSUEAKK0lETl9FTkFCTEVEID0gQElETl9FTkFCTEVEQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJUFY2X0VOQUJMRUQgPSBASVBWNl9FTkFCTEVEQAorS1JCNF9FTkFCTEVEID0gQEtSQjRfRU5BQkxFREAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQ1VSTF9MSUJTID0gQExJQkNVUkxfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUFOT1BUID0gQE1BTk9QVEAKK01JTVBVUkVfRkFMU0UgPSBATUlNUFVSRV9GQUxTRUAKK01JTVBVUkVfVFJVRSA9IEBNSU1QVVJFX1RSVUVACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitOT19VTkRFRklORURfRkFMU0UgPSBATk9fVU5ERUZJTkVEX0ZBTFNFQAorTk9fVU5ERUZJTkVEX1RSVUUgPSBATk9fVU5ERUZJTkVEX1RSVUVACitOUk9GRiA9IEBOUk9GRkAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEggPSBAUEFUSEAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTCA9IEBQRVJMQAorUEtHQUREX05BTUUgPSBAUEtHQUREX05BTUVACitQS0dBRERfUEtHID0gQFBLR0FERF9QS0dACitQS0dBRERfVkVORE9SID0gQFBLR0FERF9WRU5ET1JACitQS0dDT05GSUcgPSBAUEtHQ09ORklHQAorUkFORE9NX0ZJTEUgPSBAUkFORE9NX0ZJTEVACitSQU5MSUIgPSBAUkFOTElCQAorUkVRVUlSRV9MSUJfREVQUyA9IEBSRVFVSVJFX0xJQl9ERVBTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTT05BTUVfQlVNUF9GQUxTRSA9IEBTT05BTUVfQlVNUF9GQUxTRUAKK1NPTkFNRV9CVU1QX1RSVUUgPSBAU09OQU1FX0JVTVBfVFJVRUAKK1NTTF9FTkFCTEVEID0gQFNTTF9FTkFCTEVEQAorU1RBVElDTElCX0ZBTFNFID0gQFNUQVRJQ0xJQl9GQUxTRUAKK1NUQVRJQ0xJQl9UUlVFID0gQFNUQVRJQ0xJQl9UUlVFQAorU1RSSVAgPSBAU1RSSVBACitTVVBQT1JUX0ZFQVRVUkVTID0gQFNVUFBPUlRfRkVBVFVSRVNACitTVVBQT1JUX1BST1RPQ09MUyA9IEBTVVBQT1JUX1BST1RPQ09MU0AKK1RFU1RfU0VSVkVSX0xJQlMgPSBAVEVTVF9TRVJWRVJfTElCU0AKK1VTRV9BUkVTID0gQFVTRV9BUkVTQAorVVNFX0FYVExTID0gQFVTRV9BWFRMU0AKK1VTRV9DWUFTU0wgPSBAVVNFX0NZQVNTTEAKK1VTRV9FTUJFRERFRF9BUkVTX0ZBTFNFID0gQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQAorVVNFX0VNQkVEREVEX0FSRVNfVFJVRSA9IEBVU0VfRU1CRURERURfQVJFU19UUlVFQAorVVNFX0dOVVRMUyA9IEBVU0VfR05VVExTQAorVVNFX0dOVVRMU19ORVRUTEUgPSBAVVNFX0dOVVRMU19ORVRUTEVACitVU0VfTElCUlRNUCA9IEBVU0VfTElCUlRNUEAKK1VTRV9MSUJTU0gyID0gQFVTRV9MSUJTU0gyQAorVVNFX01BTlVBTF9GQUxTRSA9IEBVU0VfTUFOVUFMX0ZBTFNFQAorVVNFX01BTlVBTF9UUlVFID0gQFVTRV9NQU5VQUxfVFJVRUAKK1VTRV9OU1MgPSBAVVNFX05TU0AKK1VTRV9PUEVOTERBUCA9IEBVU0VfT1BFTkxEQVBACitVU0VfUE9MQVJTU0wgPSBAVVNFX1BPTEFSU1NMQAorVVNFX1NTTEVBWSA9IEBVU0VfU1NMRUFZQAorVVNFX1dJTkRPV1NfU1NQSSA9IEBVU0VfV0lORE9XU19TU1BJQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVkVSU0lPTkVEX0ZMQVZPVVIgPSBAVkVSU0lPTkVEX0ZMQVZPVVJACitWRVJTSU9ORURfU1lNQk9MU19GQUxTRSA9IEBWRVJTSU9ORURfU1lNQk9MU19GQUxTRUAKK1ZFUlNJT05FRF9TWU1CT0xTX1RSVUUgPSBAVkVSU0lPTkVEX1NZTUJPTFNfVFJVRUAKK1ZFUlNJT05OVU0gPSBAVkVSU0lPTk5VTUAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpYmV4dCA9IEBsaWJleHRACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACitFWFRSQV9ESVNUID0gUkVBRE1FIGN1cmwtc3NsLnNwZWMuaW4gY3VybC5zcGVjLmluIG1ha2VfY3VybF9ycG0KK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBwYWNrYWdlcy9MaW51eC9SUE0vTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHBhY2thZ2VzL0xpbnV4L1JQTS9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorY3VybC5zcGVjOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvY3VybC5zcGVjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKK2N1cmwtc3NsLnNwZWM6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9jdXJsLXNzbC5zcGVjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKKwkgIGVzYWM7IFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKKwkgICAgZGlyPSIvJCRkaXIiOyBcCisJICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKKwkgIGVsc2UgXAorCSAgICBkaXI9Jyc7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1pbmZvLWFtCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0xpbnV4L1JQTS9SRUFETUUgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9MaW51eC9SUE0vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OGVjZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9MaW51eC9SUE0vUkVBRE1FCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBEYW5pZWwgKEknbSBub3QgdHJ1c3R3b3J0aHksIHJlcGxhY2UgdGhpcyEpCisKK1BhdWwgTWFycXVpcydzICdtYWtlX2N1cmxfcnBtJyBzY3JpcHQgaXMgYSBmaW5lIGV4YW1wbGUgb24gaG93IHRvIGF1dG9tYXRlIHRoZQoram9icy4gWW91IG5lZWQgdG8gZmlsbCBpbiB5b3VyIG93biBuYW1lIGFuZCBlbWFpbCBhdCBsZWFzdC4KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvTGludXgvUlBNL2N1cmwtc3NsLnNwZWMuaW4gYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9MaW51eC9SUE0vY3VybC1zc2wuc3BlYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjI5MGJhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvTGludXgvUlBNL2N1cmwtc3NsLnNwZWMuaW4KQEAgLTAsMCArMSw4NCBAQAorJWRlZmluZSBuYW1lIGN1cmwtc3NsCislZGVmaW5lIHRhcmJhbGwgY3VybAorJWRlZmluZSB2ZXJzaW9uIDcuMTEuMAorJWRlZmluZSByZWxlYXNlIDEKKworJWRlZmluZSBjdXJscm9vdCAle19idWlsZGRpcn0vJXt0YXJiYWxsfS0le3ZlcnNpb259CisKK1N1bW1hcnk6IGdldCBhIGZpbGUgZnJvbSBhbiBGVFAgb3IgSFRUUCBzZXJ2ZXIuCitOYW1lOiAle25hbWV9CitWZXJzaW9uOiAle3ZlcnNpb259CitSZWxlYXNlOiAle3JlbGVhc2V9CitDb3B5cmlnaHQ6IE1JVC9YIGRlcml2YXRlCitWZW5kb3I6IERhbmllbCBTdGVuYmVyZyA8RGFuaWVsLlN0ZW5iZXJnQGhheHguc2U+CitQYWNrYWdlcjogVHJveSBFbmdlbCA8dGVuZ2VsQHNvbmljLm5ldD4KK0dyb3VwOiBVdGlsaXRpZXMvQ29uc29sZQorU291cmNlOiAle3RhcmJhbGx9LSV7dmVyc2lvbn0udGFyLmd6CitVUkw6IGh0dHA6Ly9jdXJsLmhheHguc2UvCitQcm92aWRlczogY3VybAorT2Jzb2xldGVzOiBjdXJsCitCdWlsZFJvb3Q6ICV7X3RtcHBhdGh9LyV7dGFyYmFsbH0tJXt2ZXJzaW9ufS1yb290CitSZXF1aXJlczogb3BlbnNzbCA+PSAwLjkuNQorCislZGVzY3JpcHRpb24KK2N1cmwgaXMgYSBjbGllbnQgdG8gZ2V0IGRvY3VtZW50cy9maWxlcyBmcm9tIHNlcnZlcnMsIHVzaW5nIGFueSBvZiB0aGUKK3N1cHBvcnRlZCBwcm90b2NvbHMuIFRoZSBjb21tYW5kIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aG91dCB1c2VyCitpbnRlcmFjdGlvbiBvciBhbnkga2luZCBvZiBpbnRlcmFjdGl2aXR5LgorCitjdXJsIG9mZmVycyBhIGJ1c2xvYWQgb2YgdXNlZnVsIHRyaWNrcyBsaWtlIHByb3h5IHN1cHBvcnQsIHVzZXIKK2F1dGhlbnRpY2F0aW9uLCBmdHAgdXBsb2FkLCBIVFRQIHBvc3QsIGZpbGUgdHJhbnNmZXIgcmVzdW1lIGFuZCBtb3JlLgorCislcGFja2FnZQlkZXZlbAorU3VtbWFyeToJVGhlIGluY2x1ZGVzLCBsaWJzLCBhbmQgbWFuIHBhZ2VzIHRvIGRldmVsb3Agd2l0aCBsaWJjdXJsCitHcm91cDoJCURldmVsb3BtZW50L0xpYnJhcmllcworUmVxdWlyZXM6CW9wZW5zc2wtZGV2ZWwgPj0gMC45LjUKK1Byb3ZpZGVzOgljdXJsLWRldmVsCisKKyVkZXNjcmlwdGlvbiBkZXZlbAorbGliY3VybCBpcyB0aGUgY29yZSBlbmdpbmUgb2YgY3VybDsgdGhpcyBwYWNrYWdlcyBjb250YWlucyBhbGwgdGhlIGxpYnMsCitoZWFkZXJzLCBhbmQgbWFudWFsIHBhZ2VzIHRvIGRldmVsb3AgYXBwbGljYXRpb25zIHVzaW5nIGxpYmN1cmwuCisKKyVwcmVwCisKKyVzZXR1cCAtcSAtbiAle3RhcmJhbGx9LSV7dmVyc2lvbn0KKworJWJ1aWxkCitjZCAle2N1cmxyb290fSAmJiAoaWYgWyAtZiBjb25maWd1cmUuaW4gXTsgdGhlbiBtdiAtZiBjb25maWd1cmUuaW4gY29uZmlndXJlLmluLnJwbTsgZmkpCislY29uZmlndXJlCitjZCAle2N1cmxyb290fSAmJiAoaWYgWyAtZiBjb25maWd1cmUuaW4ucnBtIF07IHRoZW4gbXYgLWYgY29uZmlndXJlLmluLnJwbSBjb25maWd1cmUuaW47IGZpKQorbWFrZQorCislaW5zdGFsbAorWyAiJXtidWlsZHJvb3R9IiAhPSAiLyIgXSAmJiBybSAtcmYgJXtidWlsZHJvb3R9CittYWtlIERFU1RESVI9JXtidWlsZHJvb3R9IGluc3RhbGwtc3RyaXAKKworJWNsZWFuCitbICIle2J1aWxkcm9vdH0iICE9ICIvIiBdICYmIHJtIC1yZiAle2J1aWxkcm9vdH0KK1sgIiV7Y3VybHJvb3R9IiAhPSAiLyIgXSAmJiBybSAtcmYgJXtjdXJscm9vdH0KKworJXBvc3QKKy9zYmluL2xkY29uZmlnCisKKyVwb3N0dW4KKy9zYmluL2xkY29uZmlnCisKKyVmaWxlcworJWRlZmF0dHIoLSxyb290LHJvb3QpCislYXR0cigwNzU1LHJvb3Qscm9vdCkgJXtfYmluZGlyfS9jdXJsCislYXR0cigwNjQ0LHJvb3Qscm9vdCkgJXtfbWFuZGlyfS9tYW4xL2N1cmwuMSoKKyV7X2xpYmRpcn0vbGliY3VybC5zbyoKKyV7X2RhdGFkaXJ9L2N1cmwvY3VybC1jYS1idW5kbGUuY3J0CislZG9jIENIQU5HRVMgQ09QWUlORyBSRUFETUUgdGVzdGN1cmwuc2ggZG9jcy9CVUdTIGRvY3MvU1NMQ0VSVFMKKyVkb2MgZG9jcy9DT05UUklCVVRFIGRvY3MvRkFRIGRvY3MvRkVBVFVSRVMgZG9jcy9ISVNUT1JZIGRvY3MvSU5TVEFMTAorJWRvYyBkb2NzL0tOT1dOX0JVR1MgZG9jcy9NQU5VQUwgZG9jcy9SRVNPVVJDRVMgZG9jcy9USEFOS1MKKyVkb2MgZG9jcy9UT0RPIGRvY3MvVkVSU0lPTlMgZG9jcy9UaGVBcnRPZkh0dHBTY3JpcHRpbmcgdGVzdHMKKworJWZpbGVzIGRldmVsCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVhdHRyKDA3NTUscm9vdCxyb290KSAle19iaW5kaXJ9L2N1cmwtY29uZmlnCislYXR0cigwNjQ0LHJvb3Qscm9vdCkgJXtfbWFuZGlyfS9tYW4xL2N1cmwtY29uZmlnLjEqCislYXR0cigwNjQ0LHJvb3Qscm9vdCkgJXtfbWFuZGlyfS9tYW4zLyoKKyVhdHRyKDA2NDQscm9vdCxyb290KSAle19pbmNsdWRlZGlyfS9jdXJsLyoKKyV7X2xpYmRpcn0vbGliY3VybC5hCisle19saWJkaXJ9L2xpYmN1cmwubGEKKyVkb2MgZG9jcy9CSU5ESU5HUyBkb2NzL0lOVEVSTkFMUyBkb2NzL2V4YW1wbGVzLyogZG9jcy9saWJjdXJsLXRoZS1ndWlkZQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvTGludXgvUlBNL2N1cmwuc3BlYy5pbiBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0xpbnV4L1JQTS9jdXJsLnNwZWMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4MmY1NwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0xpbnV4L1JQTS9jdXJsLnNwZWMuaW4KQEAgLTAsMCArMSw4NCBAQAorJWRlZmluZSBuYW1lIGN1cmwKKyVkZWZpbmUgdmVyc2lvbiBAVkVSU0lPTkAKKyVkZWZpbmUgcmVsZWFzZSAxCislZGVmaW5lIHByZWZpeCAvdXNyCisKKyVkZWZpbmUgYnVpbGRkaXIgJFJQTV9CVUlMRF9ESVIvJXtuYW1lfS0le3ZlcnNpb259CisKK1N1bW1hcnk6IGdldCBhIGZpbGUgZnJvbSBhbiBGVFAgb3IgSFRUUCBzZXJ2ZXIuCitOYW1lOiAle25hbWV9CitWZXJzaW9uOiAle3ZlcnNpb259CitSZWxlYXNlOiAle3JlbGVhc2V9CitDb3B5cmlnaHQ6IE1QTAorVmVuZG9yOiBEYW5pZWwgU3RlbmJlcmcgPERhbmllbC5TdGVuYmVyZ0BoYXh4LnNlPgorUGFja2FnZXI6IExvaWMgRGFjaGFyeSA8bG9pY0BzZW5nYS5vcmc+CitHcm91cDogVXRpbGl0aWVzL0NvbnNvbGUKK1NvdXJjZTogJXtuYW1lfS0le3ZlcnNpb259LnRhci5negorVVJMOiBodHRwOi8vY3VybC5oYXh4LnNlLworQnVpbGRSb290OiAvdG1wLyV7bmFtZX0tJXt2ZXJzaW9ufS1yb290CisKKyVkZXNjcmlwdGlvbgorY3VybCBpcyBhIGNsaWVudCB0byBnZXQgZG9jdW1lbnRzL2ZpbGVzIGZyb20gc2VydmVycywgdXNpbmcgYW55IG9mIHRoZQorc3VwcG9ydGVkIHByb3RvY29scy4gVGhlIGNvbW1hbmQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRob3V0IHVzZXIKK2ludGVyYWN0aW9uIG9yIGFueSBraW5kIG9mIGludGVyYWN0aXZpdHkuCisKK2N1cmwgb2ZmZXJzIGEgYnVzbG9hZCBvZiB1c2VmdWwgdHJpY2tzIGxpa2UgcHJveHkgc3VwcG9ydCwgdXNlcgorYXV0aGVudGljYXRpb24sIGZ0cCB1cGxvYWQsIEhUVFAgcG9zdCwgZmlsZSB0cmFuc2ZlciByZXN1bWUgYW5kIG1vcmUuCisKK05vdGU6IHRoaXMgdmVyc2lvbiBpcyBjb21waWxlZCB3aXRob3V0IFNTTCAoaHR0cHM6KSBzdXBwb3J0LgorCislcGFja2FnZQlkZXZlbAorU3VtbWFyeToJVGhlIGluY2x1ZGVzLCBsaWJzLCBhbmQgbWFuIHBhZ2VzIHRvIGRldmVsb3Agd2l0aCBsaWJjdXJsCitHcm91cDoJCURldmVsb3BtZW50L0xpYnJhcmllcworCislZGVzY3JpcHRpb24gZGV2ZWwKK2xpYmN1cmwgaXMgdGhlIGNvcmUgZW5naW5lIG9mIGN1cmw7IHRoaXMgcGFja2FnZXMgY29udGFpbnMgYWxsIHRoZSBsaWJzLAoraGVhZGVycywgYW5kIG1hbnVhbCBwYWdlcyB0byBkZXZlbG9wIGFwcGxpY2F0aW9ucyB1c2luZyBsaWJjdXJsLgorCislcHJlcAorcm0gLXJmICV7YnVpbGRkaXJ9CisKKyVzZXR1cAorCislYnVpbGQKKyVjb25maWd1cmUgLS13aXRob3V0LXNzbCAtLXByZWZpeD0le3ByZWZpeH0KK21ha2UKKworJWluc3RhbGwKK3JtIC1yZiAkUlBNX0JVSUxEX1JPT1QKK21ha2UgREVTVERJUj0kUlBNX0JVSUxEX1JPT1QgaW5zdGFsbC1zdHJpcAorCislY2xlYW4KK3JtIC1yZiAkUlBNX0JVSUxEX1JPT1QKK3JtIC1yZiAle2J1aWxkZGlyfQorCislcG9zdAorL3NiaW4vbGRjb25maWcKKworJXBvc3R1bgorL3NiaW4vbGRjb25maWcKKworJWZpbGVzCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVhdHRyKDA3NTUscm9vdCxyb290KSAle19iaW5kaXJ9L2N1cmwKKyVhdHRyKDA2NDQscm9vdCxyb290KSAle19tYW5kaXJ9L21hbjEvKgorJXtwcmVmaXh9L2xpYi9saWJjdXJsLnNvKgorJWRvYyBDSEFOR0VTIExFR0FMIE1JVFgudHh0IE1QTC0xLjEudHh0IFJFQURNRSBkb2NzL0JVR1MKKyVkb2MgZG9jcy9DT05UUklCVVRFIGRvY3MvRkFRIGRvY3MvRkVBVFVSRVMgZG9jcy9JTlNUQUxMIGRvY3MvSU5URVJOQUxTCislZG9jIGRvY3MvTElCQ1VSTCBkb2NzL01BTlVBTCBkb2NzL1JFQURNRSogZG9jcy9SRVNPVVJDRVMgZG9jcy9UT0RPCislZG9jIGRvY3MvVGhlQXJ0T2ZIdHRwU2NyaXB0aW5nCisKKyVmaWxlcyBkZXZlbAorJWRlZmF0dHIoLSxyb290LHJvb3QpCislYXR0cigwNjQ0LHJvb3Qscm9vdCkgJXtfbWFuZGlyfS9tYW4zLyoKKyVhdHRyKDA2NDQscm9vdCxyb290KSAle19pbmNsdWRlZGlyfS9jdXJsLyoKKyV7cHJlZml4fS9saWIvbGliY3VybC5hCisle3ByZWZpeH0vbGliL2xpYmN1cmwubGEKKyVkb2MgZG9jcy9leGFtcGxlcy8qCisKKyVjaGFuZ2Vsb2cKKyogU3VuIEphbiAgNyAyMDAxIExvaWMgRGFjaGFyeSAgPGxvaWNAc2VuZ2Eub3JnPgorCisgICAgICAgIC0gdXNlIF9tYW5kaXIgaW5zdGVhZCBvZiBwcmVmaXggdG8gbG9jYXRlIG1hbiBwYWdlcyBiZWNhdXNlCisJICBfbWFuZGlyIGlzIG5vdCBhbHdheXMgcHJlZml4L21hbi9tYW4/LgorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9MaW51eC9SUE0vbWFrZV9jdXJsX3JwbSBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL0xpbnV4L1JQTS9tYWtlX2N1cmxfcnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NGEyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9MaW51eC9SUE0vbWFrZV9jdXJsX3JwbQpAQCAtMCwwICsxLDYyIEBACisjISAvYmluL3NoCisjIHNjcmlwdCB0byBidWlsZCBjdXJsIFJQTSBmcm9tIHNyYyBSUE0gKFNTTCBhbmQgbm9uLVNTTCB2ZXJzaW9ucykKKworIyBpbml0aWFsaXplCit0b3BfZGlyPS91c3Ivc3JjL3JlZGhhdAorc291cmNlc19kaXI9JHRvcF9kaXIvU09VUkNFUworc3BlY3NfZGlyPSR0b3BfZGlyL1NQRUNTCitycG1zX2Rpcj0kdG9wX2Rpci9SUE1TCithcmNoPWBycG0gLS1zaG93cmMgfCBhd2sgJ05GID09IDMgJiYgJDIgPT0gIl9hcmNoIiB7IHByaW50ICQzIH0nYAorCisjIGZpbGwgaW4geW91ciBvd24gbmFtZSBhbmQgZW1haWwgaGVyZQorcGFja2FnZXJfbmFtZT0iTXIgSm9lIFBhY2thZ2VyIFBlcnNvbiIKK3BhY2thZ2VyX2VtYWlsPSc8Sm9lQHBhY2thZ2VyLnBlcnNvbj4nCisKKyMgbWFrZSBzdXJlIHdlJ3JlIHJ1bm5pbmcgYXMgcm9vdAoraWYgdGVzdCBgaWQgLXVgIC1uZSBgaWQgLXUgcm9vdGAKK3RoZW4KKyAgIGVjaG8gInlvdSBtdXN0IGJ1aWxkIHRoZSBSUE0gYXMgcm9vdCIKKyAgIGV4aXQgMQorZmkKKworIyBnZXQgdmVyc2lvbiBhbmQgcmVsZWFzZSBudW1iZXIKK2lmIHRlc3QgJCMgLWx0IDEKK3RoZW4KKyAgIGVjaG8gInZlcnNpb24gbnVtYmVyPyIKKyAgIHJlYWQgdmVyc2lvbgorZWxzZQorICAgdmVyc2lvbj0kMQorZmkKKworaWYgdGVzdCAkIyAtbHQgMgordGhlbgorICAgZWNobyAicmVsZWFzZSBudW1iZXI/IgorICAgcmVhZCByZWxlYXNlCitlbHNlCisgICByZWxlYXNlPSQyCitmaQorCisjIGJ1aWxkIGFsbCB0aGUgZmlsZXMKK3RhcmdldHM9ImN1cmwgY3VybC1zc2wiCitmb3IgdGFyZ2V0IGluICR0YXJnZXRzCitkbworICAgIyBtYWtlIHN1cmUgc3JjIFJQTSBleGlzdAorICAgc3JjX3JwbT0iJHRhcmdldC0kdmVyc2lvbi0kcmVsZWFzZS5zcmMucnBtIgorICAgaWYgdGVzdCAtZiAkc3JjX3JwbQorICAgdGhlbgorICAgICAgcnBtIC1pdmggJHNyY19ycG0KKworICAgICAgIyByZXBsYWNlIHBhY2thZ2VyIGluIHNwZWMgZmlsZQorICAgICAgc2VkIC1lICdzL15QYWNrYWdlcjogLiovUGFja2FnZXI6ICRwYWNrYWdlcl9uYW1lICRwYWNrYWdlcl9lbWFpbC8nICRzcGVjc19kaXIvJHRhcmdldC5zcGVjID4gJHNwZWNzX2Rpci8kdGFyZ2V0LSR2ZXJzaW9uLSRhcmNoLnNwZWMKKworICAgICAgIyBidWlsZCBpdAorICAgICAgaWYgISBycG0gLWJhICRzcGVjc19kaXIvJHRhcmdldC0kdmVyc2lvbi0kYXJjaC5zcGVjCisgICAgICB0aGVuCisgICAgICAgICBlY2hvICJlcnJvciBidWlsZGluZyAkdGFyZ2V0IGZvciAkYXJjaCAtLSBjaGVjayBvdXRwdXQgYWJvdmUiCisgICAgICBmaQorCisgICAgICBlY2hvICIkdGFyZ2V0IHJwbSBpcyBub3cgaW4gJHJwbXNfZGlyLyRhcmNoIgorICAgZWxzZQorICAgICAgZWNobyAkc3JjX3JwbSBkb2VzIG5vdCBleGlzdAorICAgZmkKK2RvbmUKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL01ha2VmaWxlLmFtIGIvY3VybC03LjI1LjAvcGFja2FnZXMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIxMWMwYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzIgQEAKK1NVQkRJUlMgPSBXaW4zMiBMaW51eCBTb2xhcmlzIEVQTSBBSVggdm1zCisKK0VYVFJBX0RJU1QgPSBSRUFETUUgCQkJXAorCURPUy9SRUFETUUgCQkJXAorCURPUy9jb21tb24uZGogCQkJXAorCU5ldFdhcmUvZ2V0X3Zlci5hd2sgCQlcCisJT1M0MDAvUkVBRE1FLk9TNDAwIAkJXAorCU9TNDAwL2Njc2lkY3VybC5jIAkJXAorCU9TNDAwL2Njc2lkY3VybC5oIAkJXAorCU9TNDAwL2N1cmwuaW5jLmluIAkJXAorCU9TNDAwL2luaXRzY3JpcHQuc2ggCQlcCisJT1M0MDAvbWFrZS1pbmNsdWRlLnNoIAkJXAorCU9TNDAwL21ha2UtbGliLnNoIAkJXAorCU9TNDAwL21ha2Utc3JjLnNoIAkJXAorCU9TNDAwL21ha2UtdGVzdHMuc2ggCQlcCisJT1M0MDAvbWFrZWZpbGUuc2ggCQlcCisJT1M0MDAvb3M0MDBzeXMuYyAJCVwKKwlPUzQwMC9vczQwMHN5cy5oIAkJXAorCVN5bWJpYW4vYndpbnMvbGliY3VybHUuZGVmIAlcCisJU3ltYmlhbi9lYWJpL2xpYmN1cmx1LmRlZiAJXAorCVN5bWJpYW4vZ3JvdXAvYmxkLmluZiAJCVwKKwlTeW1iaWFuL2dyb3VwL2N1cmwuaWJ5IAkJXAorCVN5bWJpYW4vZ3JvdXAvY3VybC5tbXAgCQlcCisJU3ltYmlhbi9ncm91cC9jdXJsLnBrZyAJCVwKKwlTeW1iaWFuL2dyb3VwL2xpYmN1cmwuaWJ5IAlcCisJU3ltYmlhbi9ncm91cC9saWJjdXJsLm1tcCAJXAorCVN5bWJpYW4vZ3JvdXAvbGliY3VybC5wa2cgCVwKKwlTeW1iaWFuL3JlYWRtZS50eHQgCQlcCisJVFBGL2N1cmwubWFrIAkJCVwKKwlUUEYvbWFrZXRwZi5lbnZfY3VybCAJCVwKKwlUUEYvbWFrZXRwZi5lbnZfY3VybGxpYgorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9NYWtlZmlsZS5pbiBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzcwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDYwOCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gcGFja2FnZXMKK0RJU1RfQ09NTU9OID0gUkVBRE1FICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2N1cmwtY29tcGlsZXJzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtY29uZm9wdHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1mdW5jdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vcGVuc3NsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3ZlcnJpZGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1yZWVudHJhbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1zeXN0ZW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtdHJhbnNsaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQveno1MC14Yy1vdnIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9zcmMvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBcCisJcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwl1bmluc3RhbGwtcmVjdXJzaXZlCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACitBTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFID0gQEJVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFQAorQlVJTERfTElCSE9TVE5BTUVfVFJVRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9UUlVFQAorQlVJTERfVU5JVFRFU1RTX0ZBTFNFID0gQEJVSUxEX1VOSVRURVNUU19GQUxTRUAKK0JVSUxEX1VOSVRURVNUU19UUlVFID0gQEJVSUxEX1VOSVRURVNUU19UUlVFQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NPTkZJR1VSRV9PUFRJT05TID0gQENPTkZJR1VSRV9PUFRJT05TQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1JPU1NDT01QSUxJTkdfRkFMU0UgPSBAQ1JPU1NDT01QSUxJTkdfRkFMU0VACitDUk9TU0NPTVBJTElOR19UUlVFID0gQENST1NTQ09NUElMSU5HX1RSVUVACitDVVJMREVCVUdfRkFMU0UgPSBAQ1VSTERFQlVHX0ZBTFNFQAorQ1VSTERFQlVHX1RSVUUgPSBAQ1VSTERFQlVHX1RSVUVACitDVVJMVkVSU0lPTiA9IEBDVVJMVkVSU0lPTkAKK0NVUkxfQ0FfQlVORExFID0gQENVUkxfQ0FfQlVORExFQAorQ1VSTF9DRkxBR19FWFRSQVMgPSBAQ1VSTF9DRkxBR19FWFRSQVNACitDVVJMX0RJU0FCTEVfRElDVCA9IEBDVVJMX0RJU0FCTEVfRElDVEAKK0NVUkxfRElTQUJMRV9GSUxFID0gQENVUkxfRElTQUJMRV9GSUxFQAorQ1VSTF9ESVNBQkxFX0ZUUCA9IEBDVVJMX0RJU0FCTEVfRlRQQAorQ1VSTF9ESVNBQkxFX0dPUEhFUiA9IEBDVVJMX0RJU0FCTEVfR09QSEVSQAorQ1VSTF9ESVNBQkxFX0hUVFAgPSBAQ1VSTF9ESVNBQkxFX0hUVFBACitDVVJMX0RJU0FCTEVfSU1BUCA9IEBDVVJMX0RJU0FCTEVfSU1BUEAKK0NVUkxfRElTQUJMRV9MREFQID0gQENVUkxfRElTQUJMRV9MREFQQAorQ1VSTF9ESVNBQkxFX0xEQVBTID0gQENVUkxfRElTQUJMRV9MREFQU0AKK0NVUkxfRElTQUJMRV9QT1AzID0gQENVUkxfRElTQUJMRV9QT1AzQAorQ1VSTF9ESVNBQkxFX1BST1hZID0gQENVUkxfRElTQUJMRV9QUk9YWUAKK0NVUkxfRElTQUJMRV9SVFNQID0gQENVUkxfRElTQUJMRV9SVFNQQAorQ1VSTF9ESVNBQkxFX1NNVFAgPSBAQ1VSTF9ESVNBQkxFX1NNVFBACitDVVJMX0RJU0FCTEVfVEVMTkVUID0gQENVUkxfRElTQUJMRV9URUxORVRACitDVVJMX0RJU0FCTEVfVEZUUCA9IEBDVVJMX0RJU0FCTEVfVEZUUEAKK0NVUkxfTElCUyA9IEBDVVJMX0xJQlNACitDVVJMX05FVFdPUktfTElCUyA9IEBDVVJMX05FVFdPUktfTElCU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TSEFSRUQgPSBARU5BQkxFX1NIQVJFREAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfR05VVExTX1NSUCA9IEBIQVZFX0dOVVRMU19TUlBACitIQVZFX0xEQVBfU1NMID0gQEhBVkVfTERBUF9TU0xACitIQVZFX0xJQlogPSBASEFWRV9MSUJaQAorSEFWRV9MSUJaX0ZBTFNFID0gQEhBVkVfTElCWl9GQUxTRUAKK0hBVkVfTElCWl9UUlVFID0gQEhBVkVfTElCWl9UUlVFQAorSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QgPSBASEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1RACitIQVZFX1NTTEVBWV9TUlAgPSBASEFWRV9TU0xFQVlfU1JQQAorSUROX0VOQUJMRUQgPSBASUROX0VOQUJMRURACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lQVjZfRU5BQkxFRCA9IEBJUFY2X0VOQUJMRURACitLUkI0X0VOQUJMRUQgPSBAS1JCNF9FTkFCTEVEQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJDVVJMX0xJQlMgPSBATElCQ1VSTF9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQU5PUFQgPSBATUFOT1BUQAorTUlNUFVSRV9GQUxTRSA9IEBNSU1QVVJFX0ZBTFNFQAorTUlNUFVSRV9UUlVFID0gQE1JTVBVUkVfVFJVRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PX1VOREVGSU5FRF9GQUxTRSA9IEBOT19VTkRFRklORURfRkFMU0VACitOT19VTkRFRklORURfVFJVRSA9IEBOT19VTkRFRklORURfVFJVRUAKK05ST0ZGID0gQE5ST0ZGQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSCA9IEBQQVRIQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACitQS0dBRERfTkFNRSA9IEBQS0dBRERfTkFNRUAKK1BLR0FERF9QS0cgPSBAUEtHQUREX1BLR0AKK1BLR0FERF9WRU5ET1IgPSBAUEtHQUREX1ZFTkRPUkAKK1BLR0NPTkZJRyA9IEBQS0dDT05GSUdACitSQU5ET01fRklMRSA9IEBSQU5ET01fRklMRUAKK1JBTkxJQiA9IEBSQU5MSUJACitSRVFVSVJFX0xJQl9ERVBTID0gQFJFUVVJUkVfTElCX0RFUFNACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NPTkFNRV9CVU1QX0ZBTFNFID0gQFNPTkFNRV9CVU1QX0ZBTFNFQAorU09OQU1FX0JVTVBfVFJVRSA9IEBTT05BTUVfQlVNUF9UUlVFQAorU1NMX0VOQUJMRUQgPSBAU1NMX0VOQUJMRURACitTVEFUSUNMSUJfRkFMU0UgPSBAU1RBVElDTElCX0ZBTFNFQAorU1RBVElDTElCX1RSVUUgPSBAU1RBVElDTElCX1RSVUVACitTVFJJUCA9IEBTVFJJUEAKK1NVUFBPUlRfRkVBVFVSRVMgPSBAU1VQUE9SVF9GRUFUVVJFU0AKK1NVUFBPUlRfUFJPVE9DT0xTID0gQFNVUFBPUlRfUFJPVE9DT0xTQAorVEVTVF9TRVJWRVJfTElCUyA9IEBURVNUX1NFUlZFUl9MSUJTQAorVVNFX0FSRVMgPSBAVVNFX0FSRVNACitVU0VfQVhUTFMgPSBAVVNFX0FYVExTQAorVVNFX0NZQVNTTCA9IEBVU0VfQ1lBU1NMQAorVVNFX0VNQkVEREVEX0FSRVNfRkFMU0UgPSBAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VACitVU0VfRU1CRURERURfQVJFU19UUlVFID0gQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVACitVU0VfR05VVExTID0gQFVTRV9HTlVUTFNACitVU0VfR05VVExTX05FVFRMRSA9IEBVU0VfR05VVExTX05FVFRMRUAKK1VTRV9MSUJSVE1QID0gQFVTRV9MSUJSVE1QQAorVVNFX0xJQlNTSDIgPSBAVVNFX0xJQlNTSDJACitVU0VfTUFOVUFMX0ZBTFNFID0gQFVTRV9NQU5VQUxfRkFMU0VACitVU0VfTUFOVUFMX1RSVUUgPSBAVVNFX01BTlVBTF9UUlVFQAorVVNFX05TUyA9IEBVU0VfTlNTQAorVVNFX09QRU5MREFQID0gQFVTRV9PUEVOTERBUEAKK1VTRV9QT0xBUlNTTCA9IEBVU0VfUE9MQVJTU0xACitVU0VfU1NMRUFZID0gQFVTRV9TU0xFQVlACitVU0VfV0lORE9XU19TU1BJID0gQFVTRV9XSU5ET1dTX1NTUElACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9ORURfRkxBVk9VUiA9IEBWRVJTSU9ORURfRkxBVk9VUkAKK1ZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFID0gQFZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFQAorVkVSU0lPTkVEX1NZTUJPTFNfVFJVRSA9IEBWRVJTSU9ORURfU1lNQk9MU19UUlVFQAorVkVSU0lPTk5VTSA9IEBWRVJTSU9OTlVNQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbGliZXh0ID0gQGxpYmV4dEAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3ViZGlycyA9IEBzdWJkaXJzQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK1NVQkRJUlMgPSBXaW4zMiBMaW51eCBTb2xhcmlzIEVQTSBBSVggdm1zCitFWFRSQV9ESVNUID0gUkVBRE1FIAkJCVwKKwlET1MvUkVBRE1FIAkJCVwKKwlET1MvY29tbW9uLmRqIAkJCVwKKwlOZXRXYXJlL2dldF92ZXIuYXdrIAkJXAorCU9TNDAwL1JFQURNRS5PUzQwMCAJCVwKKwlPUzQwMC9jY3NpZGN1cmwuYyAJCVwKKwlPUzQwMC9jY3NpZGN1cmwuaCAJCVwKKwlPUzQwMC9jdXJsLmluYy5pbiAJCVwKKwlPUzQwMC9pbml0c2NyaXB0LnNoIAkJXAorCU9TNDAwL21ha2UtaW5jbHVkZS5zaCAJCVwKKwlPUzQwMC9tYWtlLWxpYi5zaCAJCVwKKwlPUzQwMC9tYWtlLXNyYy5zaCAJCVwKKwlPUzQwMC9tYWtlLXRlc3RzLnNoIAkJXAorCU9TNDAwL21ha2VmaWxlLnNoIAkJXAorCU9TNDAwL29zNDAwc3lzLmMgCQlcCisJT1M0MDAvb3M0MDBzeXMuaCAJCVwKKwlTeW1iaWFuL2J3aW5zL2xpYmN1cmx1LmRlZiAJXAorCVN5bWJpYW4vZWFiaS9saWJjdXJsdS5kZWYgCVwKKwlTeW1iaWFuL2dyb3VwL2JsZC5pbmYgCQlcCisJU3ltYmlhbi9ncm91cC9jdXJsLmlieSAJCVwKKwlTeW1iaWFuL2dyb3VwL2N1cmwubW1wIAkJXAorCVN5bWJpYW4vZ3JvdXAvY3VybC5wa2cgCQlcCisJU3ltYmlhbi9ncm91cC9saWJjdXJsLmlieSAJXAorCVN5bWJpYW4vZ3JvdXAvbGliY3VybC5tbXAgCVwKKwlTeW1iaWFuL2dyb3VwL2xpYmN1cmwucGtnIAlcCisJU3ltYmlhbi9yZWFkbWUudHh0IAkJXAorCVRQRi9jdXJsLm1hayAJCQlcCisJVFBGL21ha2V0cGYuZW52X2N1cmwgCQlcCisJVFBGL21ha2V0cGYuZW52X2N1cmxsaWIKKworYWxsOiBhbGwtcmVjdXJzaXZlCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBwYWNrYWdlcy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgcGFja2FnZXMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgorCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKK21haW50YWluZXItY2xlYW4tcmVjdXJzaXZlOgorCUBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJJChta2Rpcl9wKSAkKGRpc3RkaXIpL0RPUyAkKGRpc3RkaXIpL05ldFdhcmUgJChkaXN0ZGlyKS9PUzQwMCAkKGRpc3RkaXIpL1N5bWJpYW4gJChkaXN0ZGlyKS9TeW1iaWFuL2J3aW5zICQoZGlzdGRpcikvU3ltYmlhbi9lYWJpICQoZGlzdGRpcikvU3ltYmlhbi9ncm91cCAkKGRpc3RkaXIpL1RQRgorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKG1rZGlyX3ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgICBkaXN0ZGlyPWAkKGFtX19jZCkgJChkaXN0ZGlyKSAmJiBwd2RgOyBcCisJICAgIHRvcF9kaXN0ZGlyPWAkKGFtX19jZCkgJCh0b3BfZGlzdGRpcikgJiYgcHdkYDsgXAorCSAgICAoY2QgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJHRvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJGRpc3RkaXIvJCRzdWJkaXIiIFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1yZWN1cnNpdmUKKworZHZpLWFtOgorCitodG1sOiBodG1sLXJlY3Vyc2l2ZQorCitpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCisKK3VuaW5zdGFsbC1pbmZvOiB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworLlBIT05ZOiAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIFwKKwljbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcmVjdXJzaXZlIGN0YWdzIFwKKwljdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZSBcCisJbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwltb3N0bHljbGVhbi1yZWN1cnNpdmUgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL05ldFdhcmUvZ2V0X3Zlci5hd2sgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9OZXRXYXJlL2dldF92ZXIuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmM2IzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9OZXRXYXJlL2dldF92ZXIuYXdrCkBAIC0wLDAgKzEsNzUgQEAKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIyAqCisjICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMgKgorIyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjICoKKyMgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIyAqCisjICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICoKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIGF3ayBzY3JpcHQgd2hpY2ggZmV0Y2hlcyBjdXJsIC8gYXJlcyB2ZXJzaW9uIG51bWJlciBhbmQgc3RyaW5nIGZyb20gaW5wdXQKKyMgZmlsZSBhbmQgd3JpdGVzIHRoZW0gdG8gU1RET1VULiBIZXJlIHlvdSBjYW4gZ2V0IGFuIGF3ayB2ZXJzaW9uIGZvciBXaW4zMjoKKyMgaHR0cDovL3d3dy5na253Lm5ldC9kZXZlbG9wbWVudC9wcmd0b29scy9hd2stMjAwNzA1MDEuemlwCisjCitCRUdJTiB7CisgIGlmIChtYXRjaCAoQVJHVlsxXSwgL2N1cmx2ZXIuaC8pKSB7CisgICAgd2hpbGUgKChnZXRsaW5lIDwgQVJHVlsxXSkgPiAwKSB7CisgICAgICBpZiAobWF0Y2ggKCQwLCAvXiNkZWZpbmUgTElCQ1VSTF9DT1BZUklHSFQgIlteIl0rIiQvKSkgeworICAgICAgICBsaWJjdXJsX2NvcHlyaWdodF9zdHIgPSBzdWJzdHIoJDAsIDI4LCBsZW5ndGgoJDApLTI4KTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG1hdGNoICgkMCwgL14jZGVmaW5lIExJQkNVUkxfVkVSU0lPTiAiW14iXSsiJC8pKSB7CisgICAgICAgIGxpYmN1cmxfdmVyX3N0ciA9IHN1YnN0cigkMywgMiwgbGVuZ3RoKCQzKS0yKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG1hdGNoICgkMCwgL14jZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9NQUpPUiBbMC05XSskLykpIHsKKyAgICAgICAgbGliY3VybF92ZXJfbWFqb3IgPSBzdWJzdHIoJDMsIDEsIGxlbmd0aCgkMykpOworICAgICAgfQorICAgICAgZWxzZSBpZiAobWF0Y2ggKCQwLCAvXiNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX01JTk9SIFswLTldKyQvKSkgeworICAgICAgICBsaWJjdXJsX3Zlcl9taW5vciA9IHN1YnN0cigkMywgMSwgbGVuZ3RoKCQzKSk7CisgICAgICB9CisgICAgICBlbHNlIGlmIChtYXRjaCAoJDAsIC9eI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fUEFUQ0ggWzAtOV0rJC8pKSB7CisgICAgICAgIGxpYmN1cmxfdmVyX3BhdGNoID0gc3Vic3RyKCQzLCAxLCBsZW5ndGgoJDMpKTsKKyAgICAgIH0KKyAgICB9CisgICAgbGliY3VybF92ZXIgPSBsaWJjdXJsX3Zlcl9tYWpvciAiLCIgbGliY3VybF92ZXJfbWlub3IgIiwiIGxpYmN1cmxfdmVyX3BhdGNoOworICAgIHByaW50ICJMSUJDVVJMX1ZFUlNJT04gPSAiIGxpYmN1cmxfdmVyICIiOworICAgIHByaW50ICJMSUJDVVJMX1ZFUlNJT05fU1RSID0gIiBsaWJjdXJsX3Zlcl9zdHIgIiI7CisgICAgcHJpbnQgIkxJQkNVUkxfQ09QWVJJR0hUX1NUUiA9ICIgbGliY3VybF9jb3B5cmlnaHRfc3RyICIiOworICB9CisgIGlmIChtYXRjaCAoQVJHVlsxXSwgL2FyZXNfdmVyc2lvbi5oLykpIHsKKyAgICB3aGlsZSAoKGdldGxpbmUgPCBBUkdWWzFdKSA+IDApIHsKKyAgICAgIGlmIChtYXRjaCAoJDAsIC9eI2RlZmluZSBBUkVTX0NPUFlSSUdIVCAiW14iXSsiJC8pKSB7CisgICAgICAgIGxpYmNhcmVzX2NvcHlyaWdodF9zdHIgPSBzdWJzdHIoJDAsIDI1LCBsZW5ndGgoJDApLTI1KTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG1hdGNoICgkMCwgL14jZGVmaW5lIEFSRVNfVkVSU0lPTl9TVFIgIlteIl0rIiQvKSkgeworICAgICAgICBsaWJjYXJlc192ZXJfc3RyID0gc3Vic3RyKCQzLCAyLCBsZW5ndGgoJDMpLTIpOworICAgICAgfQorICAgICAgZWxzZSBpZiAobWF0Y2ggKCQwLCAvXiNkZWZpbmUgQVJFU19WRVJTSU9OX01BSk9SIFswLTldKyQvKSkgeworICAgICAgICBsaWJjYXJlc192ZXJfbWFqb3IgPSBzdWJzdHIoJDMsIDEsIGxlbmd0aCgkMykpOworICAgICAgfQorICAgICAgZWxzZSBpZiAobWF0Y2ggKCQwLCAvXiNkZWZpbmUgQVJFU19WRVJTSU9OX01JTk9SIFswLTldKyQvKSkgeworICAgICAgICBsaWJjYXJlc192ZXJfbWlub3IgPSBzdWJzdHIoJDMsIDEsIGxlbmd0aCgkMykpOworICAgICAgfQorICAgICAgZWxzZSBpZiAobWF0Y2ggKCQwLCAvXiNkZWZpbmUgQVJFU19WRVJTSU9OX1BBVENIIFswLTldKyQvKSkgeworICAgICAgICBsaWJjYXJlc192ZXJfcGF0Y2ggPSBzdWJzdHIoJDMsIDEsIGxlbmd0aCgkMykpOworICAgICAgfQorICAgIH0KKyAgICBsaWJjYXJlc192ZXIgPSBsaWJjYXJlc192ZXJfbWFqb3IgIiwiIGxpYmNhcmVzX3Zlcl9taW5vciAiLCIgbGliY2FyZXNfdmVyX3BhdGNoOworICAgIHByaW50ICJMSUJDQVJFU19WRVJTSU9OID0gIiBsaWJjYXJlc192ZXIgIiI7CisgICAgcHJpbnQgIkxJQkNBUkVTX1ZFUlNJT05fU1RSID0gIiBsaWJjYXJlc192ZXJfc3RyICIiOworICAgIHByaW50ICJMSUJDQVJFU19DT1BZUklHSFRfU1RSID0gIiBsaWJjYXJlc19jb3B5cmlnaHRfc3RyICIiOworICB9Cit9CisKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvUkVBRE1FLk9TNDAwIGIvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvUkVBRE1FLk9TNDAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMmRjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9SRUFETUUuT1M0MDAKQEAgLTAsMCArMSwyODMgQEAKKworSW1wbGVtZW50YXRpb24gbm90ZXM6CisKKyAgVGhpcyBpcyBhIHRydWUgT1MvNDAwIGltcGxlbWVudGF0aW9uLCBub3QgYSBQQVNFIGltcGxlbWVudGF0aW9uIChmb3IgUEFTRSwKK3VzZSBBSVggaW1wbGVtZW50YXRpb24pLgorCisgIFRoZSBiaWdnZXN0IHByb2JsZW0gd2l0aCBPUy80MDAgaXMgRUJDRElDLiBMaWJjdXJsIGltcGxlbWVudHMgYW4gaW50ZXJuYWwKK2NvbnZlcnNpb24gbWVjaGFuaXNtLCBidXQgaXQgaGFzIGJlZW4gZGVzaWduZWQgZm9yIGNvbXB1dGVycyB0aGF0IGhhdmUgYQorc2luZ2xlIG5hdGl2ZSBjaGFyYWN0ZXIgc2V0LiBPUy80MDAgZGVmYXVsdCBuYXRpdmUgY2hhcmFjdGVyIHNldCB2YXJpZXMKK2RlcGVuZGluZyBvbiB0aGUgY291bnRyeSBmb3Igd2hpY2ggaXQgaGFzIGJlZW4gbG9jYWxpemVkLiBBbmQgbW9yZSwgYSBqb2IKK21heSBkeW5hbWljYWxseSBhbHRlciBpdHMgIm5hdGl2ZSIgY2hhcmFjdGVyIHNldC4KKyAgU2V2ZXJhbCBjaGFyYWN0ZXJzIHRoYXQgZG8gbm90IGhhdmUgZml4ZWQgY29kZSBpbiBFQkNESUMgdmFyaWFudHMgYXJlCit1c2VkIGluIGxpYmN1cmwgc3RyaW5ncy4gQXMgYSBjb25zZXF1ZW5jZSwgdXNpbmcgdGhlIGV4aXN0aW5nIGNvbnZlcnNpb24KK21lY2hhbmlzbSB3b3VsZCBoYXZlIGxlYWQgaW4gYSBsb2NhbGl6ZWQgYmluYXJ5IGxpYnJhcnkgLSBub3QgcG9ydGFibGUgYWNyb3NzCitjb3VudHJpZXMuCisgIEZvciB0aGlzIHJlYXNvbiwgYW5kIGJlY2F1c2UgbGliY3VybCB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCBmb3IgQVNDSUkgYmFzZWQKK29wZXJhdGluZyBzeXN0ZW1zLCB0aGUgY3VycmVudCBPUy80MDAgaW1wbGVtZW50YXRpb24gdXNlcyBBU0NJSSBhcyBpbnRlcm5hbAorY2hhcmFjdGVyIHNldC4gVGhpcyBoYXMgYmVlbiBhY2NvbXBsaXNoZWQgdXNpbmcgdGhlIFFBRFJUIGxpYnJhcnkgYW5kCitpbmNsdWRlIGZpbGVzLCBhIEMgYW5kIHN5c3RlbSBwcm9jZWR1cmVzIEFTQ0lJIHdyYXBwZXIgbGlicmFyeS4gU2VlIElCTSBRQURSVAorZGVzY3JpcHRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgIFRoaXMgdGhlbiByZXN1bHRzIGluIGxpYmN1cmwgYmVpbmcgYW4gQVNDSUkgbGlicmFyeTogYW55IGZ1bmN0aW9uIHN0cmluZworYXJndW1lbnQgaXMgdGFrZW4vcmV0dXJuZWQgaW4gQVNDSUkgYW5kIGEgQy9DKysgY2FsbGluZyBwcm9ncmFtIGJ1aWx0IGFyb3VuZAorUUFEUlQgbWF5IHVzZSBsaWJjdXJsIGZ1bmN0aW9ucyBhcyBvbiBhbnkgb3RoZXIgcGxhdGZvcm0uCisgIFFBRFJUIGRvZXMgbm90IGRlZmluZSBBU0NJSSB3cmFwcGVycyBmb3IgYWxsIEMvc3lzdGVtIHByb2NlZHVyZXM6IHRoZQorT1MvNDAwIGNvbmZpZ3VyYXRpb24gaGVhZGVyIGZpbGUgYW5kIGFuIGFkZGl0aW9uYWwgbW9kdWxlIChvczQwMHN5cy5jKSBkZWZpbmUKK3NvbWUgbW9yZSBvZiB0aGVtLCB0aGF0IGFyZSB1c2VkIGJ5IGxpYmN1cmwgYW5kIHRoYXQgUUFEUlQgbGVmdCBvdXQuCisgIFRvIHN1cHBvcnQgYWxsIHRoZSBkaWZmZXJlbnQgdmFyaWFudHMgb2YgRUJDRElDLCBub24tc3RhbmRhcmQgd3JhcHBlcgorcHJvY2VkdXJlcyBoYXZlIGJlZW4gYWRkZWQgdG8gbGliY3VybCBvbiBPUy80MDA6IHRoZXkgcHJvdmlkZSBhbiBhZGRpdGlvbmFsCitDQ1NJRCAobnVtZXJpYyBDb2RlZCBDaGFyYWN0ZXIgU2V0IElEIHNwZWNpZmljIHRvIE9TLzQwMCkgcGFyYW1ldGVyIGZvciBlYWNoCitzdHJpbmcgYXJndW1lbnQuIFN0cmluZyB2YWx1ZXMgcGFzc2VkIHRvIGNhbGxiYWNrIHByb2NlZHVyZXMgYXJlIE5PVCBjb252ZXJ0ZWQsCitzbyB0ZXh0IGdhdGhlcmVkIHRoaXMgd2F5IGlzIChwcm9iYWJseSAhKSBBU0NJSS4KKworICBBbm90aGVyIE9TLzQwMCBwcm9ibGVtIGNvbWVzIGZyb20gdGhlIGZhY3QgdGhhdCB0aGUgbGFzdCBmaXhlZCBhcmd1bWVudCBvZiBhCit2YXJhcmcgcHJvY2VkdXJlIG1heSBub3QgYmUgb2YgdHlwZSBjaGFyLCB1bnNpZ25lZCBjaGFyLCBzaG9ydCBvciB1bnNpZ25lZAorc2hvcnQuIEVudW1zIHRoYXQgYXJlIGludGVybmFsbHkgaW1wbGVtZW50ZWQgYnkgdGhlIEMgY29tcGlsZXIgYXMgb25lIG9mIHRoZXNlCit0eXBlcyBhcmUgYWxzbyBmb3JiaWRkZW4uIExpYmN1cmwgdXNlcyBlbnVtcyBhcyB2YXJhcmcgcHJvY2VkdXJlIHRhZ2ZpZWxkcy4uLgorSGFwcGlseSwgdGhlcmUgaXMgYSBwcmFnbWEgZm9yY2luZyBlbnVtcyB0byB0eXBlICJpbnQiLiBUaGUgb3JpZ2luYWwgbGliY3VybAoraGVhZGVyIGZpbGVzIGFyZSB0aHVzIGFsdGVyZWQgZHVyaW5nIGJ1aWxkIHByb2Nlc3MgdG8gdXNlIHRoaXMgcHJhZ21hLCBpbgorb3JkZXIgdG8gZm9yY2UgbGliY3VybCBlbnVtcyBvZiBiZWluZyB0eXBlIGludCAodGhlIHByYWdtYSBkaXNwb3NpdGlvbiBpbiB1c2UKK2JlZm9yZSBpbmNsdXNpb24gaXMgcmVzdG9yZWQgYmVmb3JlIHJlc3VtaW5nIHRoZSBpbmNsdWRpbmcgdW5pdCBjb21waWxhdGlvbikuCisKKyAgVGhyZWUgU1NMIGltcGxlbWVudGF0aW9ucyB3ZXJlIHByZXNlbnQgaW4gbGliY3VybC4gTmV2ZXJ0aGVsZXNzLCBub25lIG9mIHRoZW0KK2lzIGF2YWlsYWJsZSBvbiBPUy80MDAuIFRvIHN1cHBvcnQgU1NMIG9uIE9TLzQwMCwgYSBmb3VydGggaW1wbGVtZW50YXRpb24gaGFzCitiZWVuIGFkZGVkIChxc3NsLltjaF0pLiBUaGVyZSBpcyBubyB3YXkgdG8gaGF2ZSBkaWZmZXJlbnQgY2VydGlmaWNhdGUgc3RvcmVzCitmb3IgQ0FzIGFuZCBmb3IgcGVyc29uYWwvYXBwbGljYXRpb24gY2VydGlmaWNhdGVzL2tleS4gTW9yZSwgdGhlIFNTTCBjb250ZXh0CittYXkgYmUgZGVmaW5lZCBhcyBhbiBhcHBsaWNhdGlvbiBpZGVudGlmaWVyIGluIHRoZSBtYWluIGNlcnRpZmljYXRlIHN0b3JlLAorb3IgYXMgYSBrZXlyaW5nIGZpbGUuIEFzIGEgY29uc2VxdWVuY2UsIHRoZSBtZWFuaW5nIG9mIHNvbWUgZmllbGRzIGhhdmUgYmVlbgorc2xpZ2h0bHkgYWx0ZXJlZDoKK18gVGhlICJjZXJ0aWZpY2F0ZSBpZGVudGlmaWVyIiBpcyB0YWtlbiBmcm9tIENVUkxPUFRfU1NMQ0VSVCBpZiBkZWZpbmVkLCBlbHNlCitmcm9tIENVUkxPUFRfQ0FJTkZPLgorXyBUaGUgY2VydGlmaWNhdGUgaWRlbnRpZmllciBpcyB0aGVuIHVzZWQgYXMgYW4gYXBwbGljYXRpb24gaWRlbnRpZmllciBpbiB0aGUKK21haW4gY2VydGlmaWNhdGUgc3RvcmUuIElmIHN1Y2Nlc3NmdWwsIHRoaXMgY29udGV4dCBpcyB1c2VkLgorXyBJZiB0aGUgcHJldmlvdXMgc3RlcCBmYWlsZWQsIHRoZSBjZXJ0aWZpY2F0ZSBpZGVudGlmaWVyIGlzIHVzZWQgYXMgdGhlIGZpbGUKK25hbWUgb2YgYSBrZXlyaW5nLiBDVVJMT1BUX0tFWVBBU1NXRCBpcyB1c2VkIGhlcmUgYXMgdGhlIGtleXJpbmcgcGFzc3dvcmQuCitfIFRoZSBkZWZhdWx0IGNhLWJ1bmRsZSAoQ1VSTE9QVF9DQUlORk8pIGlzIHNldCB0byB0aGUgbWFpbiBjZXJ0aWZpY2F0ZSBzdG9yZSdzCitrZXlyaW5nIGZpbGUgbmFtZTogdGhpcyBhbGxvd3MgdG8gdXNlIHRoZSBzeXN0ZW0gZ2xvYmFsIENBcyBieSBkZWZhdWx0LiAoSW4gdGhhdAorY2FzZSwgdGhlIGtleXJpbmcgcGFzc3dvcmQgaXMgc2FmZWx5IHJlY292ZXJlZCBmcm9tIHRoZSBzeXN0ZW0uLi4gSUJNIGRpeGl0ISkKKworICBOb24tc3RhbmRhcmQgRUJDRElDIHdyYXBwZXIgcHJvdG90eXBlcyBhcmUgZGVmaW5lZCBpbiBhbiBhZGRpdGlvbmFsIGhlYWRlcgorZmlsZTogY2NzaWRjdXJsLmguIFRoZXNlIHNob3VsZCBiZSBzZWxmLWV4cGxhbmF0b3J5IHRvIGFuIE9TLzQwMC1hd2FyZQorZGVzaWduZXIuIENDU0lEIDAgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBjdXJyZW50IGpvYidzIENDU0lELgorICBXcmFwcGVyIHByb2NlZHVyZXMgd2l0aCB2YXJpYWJsZSBhcmd1bWVudHMgYXJlIGRlc2NyaWJlZCBiZWxvdzoKKworXyBjdXJsX2Vhc3lfc2V0b3B0X2Njc2lkKCkKKyAgVmFyaWFibGUgYXJndW1lbnRzIGFyZSBhIHN0cmluZyBwb2ludGVyIGFuZCBhIENDU0lEICh1bnNpZ25lZCBpbnQpIGZvcgorb3B0aW9uczoKKyAgICAgICAgQ1VSTE9QVF9DQUlORk8KKyAgICAgICAgQ1VSTE9QVF9DQVBBVEgKKyAgICAgICAgQ1VSTE9QVF9DT09LSUUKKyAgICAgICAgQ1VSTE9QVF9DT09LSUVGSUxFCisgICAgICAgIENVUkxPUFRfQ09PS0lFSkFSCisgICAgICAgIENVUkxPUFRfQ09PS0lFTElTVAorICAgICAgICBDVVJMT1BUX0NPUFlQT1NURklFTERTCisgICAgICAgIENVUkxPUFRfQ1JMRklMRQorICAgICAgICBDVVJMT1BUX0NVU1RPTVJFUVVFU1QKKyAgICAgICAgQ1VSTE9QVF9FR0RTT0NLRVQKKyAgICAgICAgQ1VSTE9QVF9FTkNPRElORworICAgICAgICBDVVJMT1BUX0ZUUF9BQ0NPVU5UCisgICAgICAgIENVUkxPUFRfRlRQX0FMVEVSTkFUSVZFX1RPX1VTRVIKKyAgICAgICAgQ1VSTE9QVF9GVFBQT1JUCisgICAgICAgIENVUkxPUFRfSU5URVJGQUNFCisgICAgICAgIENVUkxPUFRfSVNTVUVSQ0VSVAorICAgICAgICBDVVJMT1BUX0tFWVBBU1NXRAorICAgICAgICBDVVJMT1BUX0tSQkxFVkVMCisgICAgICAgIENVUkxPUFRfTUFJTF9GUk9NCisgICAgICAgIENVUkxPUFRfTkVUUkNfRklMRQorICAgICAgICBDVVJMT1BUX05PUFJPWFkKKyAgICAgICAgQ1VSTE9QVF9QQVNTV09SRAorICAgICAgICBDVVJMT1BUX1BST1hZCisgICAgICAgIENVUkxPUFRfUFJPWFlQQVNTV09SRAorICAgICAgICBDVVJMT1BUX1BST1hZVVNFUk5BTUUKKyAgICAgICAgQ1VSTE9QVF9QUk9YWVVTRVJQV0QKKyAgICAgICAgQ1VSTE9QVF9SQU5ET01fRklMRQorICAgICAgICBDVVJMT1BUX1JBTkdFCisgICAgICAgIENVUkxPUFRfUkVGRVJFUgorICAgICAgICBDVVJMT1BUX1JUU1BfU0VTU0lPTl9VSUQKKyAgICAgICAgQ1VSTE9QVF9SVFNQX1NUUkVBTV9VUkkKKyAgICAgICAgQ1VSTE9QVF9SVFNQX1RSQU5TUE9SVAorICAgICAgICBDVVJMT1BUX1NPQ0tTNV9HU1NBUElfU0VSVklDRQorICAgICAgICBDVVJMT1BUX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1IE5vdGU6IFNTSCBub3QgYXZhaWxhYmxlIG9uIE9TNDAwLgorICAgICAgICBDVVJMT1BUX1NTSF9LTk9XTkhPU1RTICAgICAgICAgIE5vdGU6IFNTSCBub3QgYXZhaWxhYmxlIG9uIE9TNDAwLgorICAgICAgICBDVVJMT1BUX1NTSF9QUklWQVRFX0tFWUZJTEUgICAgIE5vdGU6IFNTSCBub3QgYXZhaWxhYmxlIG9uIE9TNDAwLgorICAgICAgICBDVVJMT1BUX1NTSF9QVUJMSUNfS0VZRklMRSAgICAgIE5vdGU6IFNTSCBub3QgYXZhaWxhYmxlIG9uIE9TNDAwLgorICAgICAgICBDVVJMT1BUX1NTTENFUlQKKyAgICAgICAgQ1VSTE9QVF9TU0xDRVJUVFlQRQorICAgICAgICBDVVJMT1BUX1NTTF9DSVBIRVJfTElTVAorICAgICAgICBDVVJMT1BUX1NTTEVOR0lORQorICAgICAgICBDVVJMT1BUX1NTTEtFWQorICAgICAgICBDVVJMT1BUX1NTTEtFWVRZUEUKKyAgICAgICAgQ1VSTE9QVF9UTFNBVVRIX1BBU1NXT1JECisgICAgICAgIENVUkxPUFRfVExTQVVUSF9UWVBFCisgICAgICAgIENVUkxPUFRfVExTQVVUSF9VU0VSTkFNRQorICAgICAgICBDVVJMT1BUX1VSTAorICAgICAgICBDVVJMT1BUX1VTRVJBR0VOVAorICAgICAgICBDVVJMT1BUX1VTRVJOQU1FCisgICAgICAgIENVUkxPUFRfVVNFUlBXRAorICBFbHNlIGl0IGlzIHRoZSBzYW1lIGFzIGZvciBjdXJsX2Vhc3lfc2V0b3B0KCkuCisgIE5vdGUgdGhhdCBDVVJMT1BUX0VSUk9SQlVGRkVSIGlzIG5vdCBpbiB0aGUgbGlzdCBhYm92ZSwgc2luY2UgaXQgZ2l2ZXMgdGhlCithZGRyZXNzIG9mIGFuIChlbXB0eSkgY2hhcmFjdGVyIGJ1ZmZlciwgbm90IHRoZSBhZGRyZXNzIG9mIGEgc3RyaW5nLgorQ1VSTE9QVF9QT1NURklFTERTIHN0b3JlcyB0aGUgYWRkcmVzcyBvZiBzdGF0aWMgYmluYXJ5IGRhdGEgKG9mIHR5cGUgdm9pZCAqKSBhbmQKK3RodXMgaXMgbm90IGNvbnZlcnRlZC4gSWYgQ1VSTE9QVF9DT1BZUE9TVEZJRUxEUyBpcyBpc3N1ZWQgYWZ0ZXIKK0NVUkxPUFRfUE9TVEZJRUxEU0laRSAhPSAtMSwgdGhlIGRhdGEgc2l6ZSBpcyBhZGp1c3RlZCBhY2NvcmRpbmcgdG8gdGhlCitDQ1NJRCBjb252ZXJzaW9uIHJlc3VsdCBsZW5ndGguCisKK18gY3VybF9mb3JtYWRkX2Njc2lkKCkKKyAgSW4gdGhlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QsIHN0cmluZyBwb2ludGVycyBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSAobG9uZykKK0NDU0lEIGZvciB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisgICAgICAgIENVUkxGT1JNX0ZJTEVOQU1FCisgICAgICAgIENVUkxGT1JNX0NPTlRFTlRUWVBFCisgICAgICAgIENVUkxGT1JNX0JVRkZFUgorICAgICAgICBDVVJMRk9STV9GSUxFCisgICAgICAgIENVUkxGT1JNX0ZJTEVDT05URU5UCisgICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUworICAgICAgICBDVVJMRk9STV9DT1BZTkFNRQorICAgICAgICBDVVJMRk9STV9QVFJOQU1FCisgIElmIHRha2VuIGZyb20gYW4gYXJndW1lbnQgYXJyYXksIGFuIGFkZGl0aW9uYWwgYXJyYXkgZW50cnkgbXVzdCBmb2xsb3cgZWFjaAorZW50cnkgY29udGFpbmluZyBvbmUgb2YgdGhlIGFib3ZlIG9wdGlvbi4gVGhpcyBhZGRpdGlvbmFsIGVudHJ5IGhvbGRzIHRoZSBDQ1NJRAoraW4gaXRzIHZhbHVlIGZpZWxkLCBhbmQgdGhlIG9wdGlvbiBmaWVsZCBpcyBtZWFuaW5nbGVzcy4KKyAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYSBzdHJpbmcgcG9pbnRlciBhbmQgaXRzIENDU0lEIGFjcm9zcyBhIGZ1bmN0aW9uCitwYXJhbWV0ZXIvYXJyYXkgYm91bmRhcnkuCisgIFBsZWFzZSBub3RlIHRoYXQgQ1VSTEZPUk1fUFRSQ09OVEVOVFMgYW5kIENVUkxGT1JNX0JVRkZFUlBUUiBhcmUgY29uc2lkZXJlZAordW5jb252ZXJ0aWJsZSBzdHJpbmdzIGFuZCB0aHVzIGFyZSBOT1QgZm9sbG93ZWQgYnkgYSBDQ1NJRC4KKworXyBjdXJsX2Vhc3lfZ2V0aW5mb19jY3NpZAorICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGZvbGxvd2VkIGJ5IGEgJ2NoYXIgKiAqJyBhbmQgYSBDQ1NJRC4gVW5saWtlCitjdXJsX2Vhc3lfZ2V0aW5mbygpLCB0aGUgdmFsdWUgcmV0dXJuZWQgaW4gdGhlIHBvaW50ZXIgc2hvdWxkIGJlIGZyZWVkIGFmdGVyCit1c2U6CisgICAgICAgIENVUkxJTkZPX0VGRkVDVElWRV9VUkwKKyAgICAgICAgQ1VSTElORk9fQ09OVEVOVF9UWVBFCisgICAgICAgIENVUkxJTkZPX0ZUUF9FTlRSWV9QQVRICisgICAgICAgIENVUkxJTkZPX1JFRElSRUNUX1VSTAorICAgICAgICBDVVJMSU5GT19QUklNQVJZX0lQCisgICAgICAgIENVUkxJTkZPX1JUU1BfU0VTU0lPTl9JRAorICAgICAgICBDVVJMSU5GT19MT0NBTF9JUAorICBPdGhlciBvcHRpb25zIGFyZSBwcm9jZXNzZWQgbGlrZSBpbiBjdXJsX2Vhc3lfZ2V0aW5mbygpLgorCisgIFN0YW5kYXJkIGNvbXBpbGF0aW9uIGVudmlyb25tZW50IGRvZXMgc3VwcG9ydCBuZWl0aGVyIGF1dG90b29scyBub3IgbWFrZTsKK2luIGZhY3QsIHZlcnkgZmV3IGNvbW1vbiB1dGlsaXRpZXMgYXJlIGF2YWlsYWJsZS4gQXMgYSBjb25zZXF1ZW5jZSwgdGhlCitjb25maWctb3M0MDAuaCBoYXMgYmVlbiBjb2RlZCBtYW51YWxseSBhbmQgdGhlIGNvbXBpbGF0aW9uIHNjcmlwdHMgYXJlCithIHNldCBvZiBzaGVsbCBzY3JpcHRzIHN0b3JlZCBpbiBzdWJkaXJlY3RvcnkgcGFja2FnZXMvT1M0MDAuCisKKyAgVGhlICJjdXJsIiBjb21tYW5kIGFuZCB0aGUgdGVzdCBlbnZpcm9ubWVudCBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24KK09TLzQwMC4KKworCitQcm90b2NvbHMgY3VycmVudGx5IGltcGxlbWVudGVkIG9uIE9TLzQwMDoKK18gRElDVAorXyBGSUxFCitfIEZUUAorXyBGVFBTCitfIEZUUCB3aXRoIHNlY3VyZSB0cmFuc21pc3Npb24KK18gR09QSEVSCitfIEhUVFAKK18gSFRUUFMKK18gSU1BUAorXyBJTUFQUworXyBJTUFQIHdpdGggc2VjdXJlIHRyYW5zbWlzc2lvbgorXyBMREFQCitfIFBPUDMKK18gUE9QM1MKK18gUE9QMyB3aXRoIHNlY3VyZSB0cmFuc21pc3Npb24KK18gUlRTUAorXyBTTVRQCitfIFNNVFBTCitfIFNNVFAgd2l0aCBzZWN1cmUgdHJhbnNtaXNzaW9uCitfIFRFTE5FVAorXyBURlRQCisKKworCitDb21waWxpbmcgb24gT1MvNDAwOgorCisgIFRoZXNlIGluc3RydWN0aW9ucyB0YXJnZXRzIHBlb3BsZSB3aG8ga25vd3MgYWJvdXQgT1MvNDAwLCBjb21waWxpbmcsIElGUyBhbmQKK2FyY2hpdmUgZXh0cmFjdGlvbi4gRG8gbm90IGFzayBxdWVzdGlvbnMgYWJvdXQgdGhlc2Ugc3ViamVjdHMgaWYgeW91J3JlIG5vdAorZmFtaWxpYXIgd2l0aC4KKworXyBBcyBhIHByZXJlcXVpc2l0ZSwgUUFEUlQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgbXVzdCBiZSBpbnN0YWxsZWQuCitfIEluc3RhbGwgdGhlIGN1cmwgc291cmNlIGRpcmVjdG9yeSBpbiBJRlMuCitfIEVudGVyIHNoZWxsIChRU0gpCitfIENoYW5nZSBjdXJyZW50IGRpcmVjdG9yeSB0byB0aGUgY3VybCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5CitfIENoYW5nZSBjdXJyZW50IGRpcmVjdG9yeSB0byAuL3BhY2thZ2VzL09TNDAwCitfIEVkaXQgZmlsZSBpbmlzY3JpcHQuc2guIFlvdSBtYXkgd2FudCB0byBjaGFuZ2UgdHVuYWJsZSBjb25maWd1cmF0aW9uCisgIHBhcmFtZXRlcnMsIGxpa2UgZGVidWcgaW5mbyBnZW5lcmF0aW9uLCBvcHRpbWlzYXRpb24gbGV2ZWwsIGxpc3Rpbmcgb3B0aW9uLAorICB0YXJnZXQgbGlicmFyeSwgZXRjLgorXyBDb3B5IGFueSBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBtYWtlbG9nIChpLmUuOgorICBjcCBpbml0c2NyaXB0LnNoIG1ha2Vsb2cpOiB0aGlzIGlzIGludGVuZGVkIHRvIGNyZWF0ZSB0aGUgbWFrZWxvZyBmaWxlIHdpdGgKKyAgYW4gQVNDSUkgQ0NTSUQhCitfIEVudGVyIHRoZSBjb21tYW5kICJzaCBtYWtlZmlsZS5zaCA+IG1ha2Vsb2cgMj4mMScKK18gRXhhbWluZSB0aGUgbWFrZWxvZyBmaWxlIHRvIGNoZWNrIGZvciBjb21waWxhdGlvbiBlcnJvcnMuCisKKyAgTGVhdmluZyBmaWxlIGluaXRzY3JpcHQuc2ggdW5jaGFuZ2VkLCB0aGlzIHdpbGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIE9TLzQwMAorb2JqZWN0czoKK18gTGlicmFyeSBDVVJMLiBBbGwgb3RoZXIgb2JqZWN0cyB3aWxsIGJlIHN0b3JlZCBpbiB0aGlzIGxpYnJhcnkuCitfIE1vZHVsZXMgZm9yIGFsbCBsaWJjdXJsIHVuaXRzLgorXyBCaW5kaW5nIGRpcmVjdG9yeSBDVVJMX0EsIHRvIGJlIHVzZWQgYXQgY2FsbGluZyBwcm9ncmFtIGxpbmsgdGltZSBmb3IKKyAgc3RhdGljYWxseSBiaW5kaW5nIHRoZSBtb2R1bGVzIChzcGVjaWZ5IEJORFNSVlBHTShRQURSVFRTIFFHTERDTE5UIFFHTERCUkRSKQorICB3aGVuIGNyZWF0aW5nIGEgcHJvZ3JhbSB1c2luZyBDVVJMX0EpLgorXyBTZXJ2aWNlIHByb2dyYW0gQ1VSTC48c29uYW1lPiwgd2hlcmUgPHNvbmFtZT4gaXMgZXh0cmFjdGVkIGZyb20gdGhlCisgIGxpYi9NYWtlZmlsZS5hbSBWRVJTSU9OIHZhcmlhYmxlLiBUbyBiZSB1c2VkIGF0IGNhbGxpbmcgcHJvZ3JhbSBydW4tdGltZQorICB3aGVuIHRoaXMgcHJvZ3JhbSBoYXMgZHluYW1pY2FsbHkgYm91bmQgY3VybCBhdCBsaW5rIHRpbWUuCitfIEJpbmRpbmcgZGlyZWN0b3J5IENVUkwuIFRvIGJlIHVzZWQgdG8gZHluYW1pY2FsbHkgYmluZCBsaWJjdXJsIHdoZW4gbGlua2luZyBhCisgIGNhbGxpbmcgcHJvZ3JhbS4KK18gU291cmNlIGZpbGUgSC4gSXQgY29udGFpbnMgYWxsIHRoZSBpbmNsdWRlIG1lbWJlcnMgbmVlZGVkIHRvIGNvbXBpbGUgYSBDL0MrKworICBtb2R1bGUgdXNpbmcgbGliY3VybCwgYW5kIGFuIElMRS9SUEcgL2NvcHkgbWVtYmVyIGZvciBzdXBwb3J0IGluIHRoaXMKKyAgbGFuZ3VhZ2UuCitfIFN0YW5kYXJkIEMvQysrIGxpYmN1cmwgaW5jbHVkZSBtZW1iZXJzIGluIGZpbGUgSC4KK18gQ0NTSURDVVJMIG1lbWJlciBpbiBmaWxlIEguIFRoaXMgZGVmaW5lcyB0aGUgbm9uLXN0YW5kYXJkIEVCQ0RJQyB3cmFwcGVycyBmb3IKKyAgQyBhbmQgQysrLgorXyBDVVJMLklOQyBtZW1iZXIgaW4gZmlsZSBILiBUaGlzIGRlZmluZXMgZXZlcnl0aGluZyBuZWVkZWQgYnkgYW4gSUxFL1JQRworICBwcm9ncmFtIHVzaW5nIGxpYmN1cmwuCitfIExJQnh4eCBtb2R1bGVzIGFuZCBwcm9ncmFtcy4gQWx0aG91Z2ggdGhlIHRlc3QgZW52aXJvbm1lbnQgaXMgbm90IHN1cHBvcnRlZAorICBvbiBPUy80MDAsIHRoZSBsaWJjdXJsIHRlc3QgcHJvZ3JhbXMgYXJlIGNvbXBpbGVkIGZvciBtYW51YWwgdGVzdHMuCisKKworCitTcGVjaWFsIHByb2dyYW1taW5nIGNvbnNpZGVyYXRpb246CisKK1FBRFJUIGJlaW5nIHVzZWQsIHRoZSBmb2xsb3dpbmcgcG9pbnRzIG11c3QgYmUgY29uc2lkZXJlZDoKK18gSWYgc3RhdGljIGJpbmRpbmcgaXMgdXNlZCwgc2VydmljZSBwcm9ncmFtIFFBRFJUVFMgbXVzdCBiZSBsaW5rZWQgdG9vLgorXyBUaGUgRUJDRElDIENDU0lEIHVzZWQgYnkgUUFEUlQgaXMgMzcgYnkgZGVmYXVsdCwgTk9UIFRIRSBKT0InUyBDQ1NJRC4gSWYKKyAgYW5vdGhlciBFQkNESUMgQ0NTSUQgaXMgcmVxdWlyZWQsIGl0IG11c3QgYmUgc2V0IHZpYSBhIGxvY2FsZSB0aHJvdWdoIGEgY2FsbAorICB0byBzZXRsb2NhbGVfYSAoUUFEUlQncyBzZXRsb2NhbGUoKSBBU0NJSSB3cmFwcGVyKSB3aXRoIGNhdGVnb3J5IExDX0FMTCBvcgorICBMQ19DVFlQRSwgb3IgYnkgc2V0dGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBRQURSVF9FTlZfTE9DQUxFIHRvIHRoZSBsb2NhbGUKKyAgb2JqZWN0IHBhdGggYmVmb3JlIGV4ZWN1dGluZyB0aGUgcHJvZ3JhbS4KK18gRG8gbm90IHVzZSBvcmlnaW5hbCBzb3VyY2UgaW5jbHVkZSBmaWxlcyB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorICBVc2UgdGhlIGluc3RhbGxlZCBtZW1iZXJzIGluc3RlYWQgKGluIC9RU1lTLkxJQi9DVVJMLkxJQi9ILkZJTEUpLgorCisKKworSUxFL1JQRyBzdXBwb3J0OgorCisgIFNpbmNlIDk1JSBvZiB0aGUgT1MvNDAwIHByb2dyYW1tZXJzIHVzZSBJTEUvUlBHIGV4Y2x1c2l2ZWx5LCBhIGRlZmluaXRpb24KKyAgL0NPUFkgbWVtYmVyIGlzIHByb3ZpZGVkIGZvciB0aGlzIGxhbmd1YWdlLiBUbyBpbmNsdWRlIGFsbCBsaWJjdXJsCisgIGRlZmluaXRpb25zIGluIGFuIElMRS9SUEcgbW9kdWxlLCBsaW5lCisKKyAgICAgaCBibmRkaXIoJ0NVUkwvQ1VSTCcpCisKK211c3QgZmlndXJlIGluIHRoZSBwcm9ncmFtIGhlYWRlciwgYW5kIGxpbmUKKworICAgICBkL2NvcHkgY3VybC9oLGN1cmwuaW5jCisKK2luIHRoZSBnbG9iYWwgZGF0YSBzZWN0aW9uIG9mIHRoZSBtb2R1bGUncyBzb3VyY2UgY29kZS4KKworICBObyB2YXJhcmcgcHJvY2VkdXJlIHN1cHBvcnQgZXhpc3RzIGluIElMRS9SUEc6IGZvciB0aGlzIHJlYXNvbiwgdGhlIGZvbGxvd2luZworY29uc2lkZXJhdGlvbnMgYXBwbHk6CitfIFByb2NlZHVyZXMgY3VybF9lYXN5X3NldG9wdF9sb25nKCksIGN1cmxfZWFzeV9zZXRvcHRfb2JqZWN0KCksCisgIGN1cmxfZWFzeV9zZXRvcHRfZnVuY3Rpb24oKSBhbmQgY3VybF9lYXN5X3NldG9wdF9vZmZzZXQoKSBhcmUgYWxsIGFsaWFzCisgIHByb3RvdHlwZXMgdG8gY3VybF9lYXN5X3NldG9wdCgpLCBidXQgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVyIGxpc3RzLgorXyBQcm9jZWR1cmVzIGN1cmxfZWFzeV9nZXRpbmZvX3N0cmluZygpLCBjdXJsX2Vhc3lfZ2V0aW5mb19sb25nKCksCisgIGN1cmxfZWFzeV9nZXRpbmZvX2RvdWJsZSgpIGFuZCBjdXJsX2Vhc3lfZ2V0aW5mb19zbGlzdCgpIGFyZSBhbGwgYWxpYXMKKyAgcHJvdG90eXBlcyB0byBjdXJsX2Vhc3lfZ2V0aW5mbygpLCBidXQgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVyIGxpc3RzLgorXyBQcm9jZWR1cmVzIGN1cmxfbXVsdGlfc2V0b3B0X2xvbmcoKSwgY3VybF9tdWx0aV9zZXRvcHRfb2JqZWN0KCksCisgIGN1cmxfbXVsdGlfc2V0b3B0X2Z1bmN0aW9uKCkgYW5kIGN1cmxfbXVsdGlfc2V0b3B0X29mZnNldCgpIGFyZSBhbGwgYWxpYXMKKyAgcHJvdG90eXBlcyB0byBjdXJsX211bHRpX3NldG9wdCgpLCBidXQgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVyIGxpc3RzLgorXyBUaGUgcHJvdG90eXBlIG9mIHByb2NlZHVyZSBjdXJsX2Zvcm1hZGQoKSBhbGxvd3Mgc3BlY2lmeWluZyBhIHBvaW50ZXIgb3B0aW9uCisgIGFuZCB0aGUgQ1VSTEZPUk1fRU5EIG9wdGlvbi4gVGhpcyBtYWtlcyBwb3NzaWJsZSB0byB1c2UgYW4gb3B0aW9uIGFycmF5CisgIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgZGVmaW5pdGlvbi4gSWYgc29tZSBzcGVjaWZpYyBpbmNvbXBhdGlibGUgYXJndW1lbnQKKyAgbGlzdCBpcyB1c2VkIGluIHRoZSBJTEUvUlBHIHByb2dyYW0sIHRoZSBsYXR0ZXIgbXVzdCBkZWZpbmUgYSBzcGVjaWFsaXNlZAorICBhbGlhcy4gVGhlIHNhbWUgYXBwbGllcyB0byBjdXJsX2Zvcm1hZGRfY2NzaWQoKSB0b28uCisKKyAgU2luY2UgUlBHIGNhbm5vdCBjYXN0IGEgbG9uZyB0byBhIHBvaW50ZXIsIHByb2NlZHVyZSBjdXJsX2Zvcm1fbG9uZ192YWx1ZSgpCitpcyBwcm92aWRlZCBmb3IgdGhhdCBwdXJwb3NlOiB0aGlzIGFsbG93cyBzdG9yaW5nIGEgbG9uZyB2YWx1ZSBpbiB0aGUgY3VybF9mb3JtcworYXJyYXkuCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9jY3NpZGN1cmwuYyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL09TNDAwL2Njc2lkY3VybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NDNiYTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9jY3NpZGN1cmwuYwpAQCAtMCwwICsxLDExOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ0NTSUQgQVBJIHdyYXBwZXJzIGZvciBPUy80MDAuICovCisKKyNpbmNsdWRlIDxpY29udi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNwcmFnbWEgZW51bShpbnQpCisKKyNpbmNsdWRlICJjdXJsLmgiCisjaW5jbHVkZSAibXByaW50Zi5oIgorI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJnZXRpbmZvLmgiCisjaW5jbHVkZSAiY2NzaWRjdXJsLmgiCisKKyNpbmNsdWRlICJvczQwMHN5cy5oIgorCisjaWZuZGVmIFNJWkVfTUFYCisjZGVmaW5lIFNJWkVfTUFYICAgICAgICAoKHNpemVfdCkgfjApICAgLyogSXMgdW5zaWduZWQgb24gT1MvNDAwLiAqLworI2VuZGlmCisKKworI2RlZmluZSBBU0NJSV9DQ1NJRCAgICAgODE5ICAgICAvKiBVc2UgSVNPLTg4NTktMSBhcyBBU0NJSS4gKi8KKyNkZWZpbmUgTk9DT05WX0NDU0lEICAgIDY1NTM1ICAgLyogTm8gY29udmVyc2lvbi4gKi8KKyNkZWZpbmUgSUNPTlZfSURfU0laRSAgIDMyICAgICAgLyogU2l6ZSBvZiBpY29udl9vcGVuKCkgY29kZSBpZGVudGlmaWVyLiAqLworI2RlZmluZSBJQ09OVl9PUEVOX0VSUk9SKHQpICAgICAoKHQpLnJldHVybl92YWx1ZSA9PSAtMSkKKworI2RlZmluZSBBTExPQ19HUkFOVUxFICAgOCAgICAgICAvKiBBbGxvYy4gZ3JhbnVsZSBmb3IgY3VybF9mb3JtYWRkX2Njc2lkKCkuICovCisKKworc3RhdGljIHZvaWQKK21ha2VPUzQwMEljb252Q29kZShjaGFyIGJ1ZltJQ09OVl9JRF9TSVpFXSwgdW5zaWduZWQgaW50IGNjc2lkKQorCit7CisgIC8qKgorICAqKiogQ29udmVydCBhIENDU0lEIHRvIHRoZSBjb3JyZXNwb25kaW5nIElCTSBpY29udl9vcGVuKCkgY2hhcmFjdGVyCisgICoqKiAgY29kZSBpZGVudGlmaWVyLgorICAqKiogIFRoaXMgY29kZSBpcyBzcGVjaWZpYyB0byB0aGUgT1M0MDAgaW1wbGVtZW50YXRpb24gb2YgdGhlIGljb252IGxpYnJhcnkuCisgICoqKiAgQ0NTSUQgNjU1MzUgKG5vIGNvbnZlcnNpb24pIGlzIHJlcGxhY2VkIGJ5IHRoZSBBU0NJSSBDQ1NJRC4KKyAgKioqICBDQ1NJRCAwIGlzIGludGVycHJldGVkIGJ5IHRoZSBPUzQwMCBhcyB0aGUgam9iJ3MgQ0NTSUQuCisgICoqLworCisgIGNjc2lkICY9IDB4RkZGRjsKKworICBpZiAoY2NzaWQgPT0gTk9DT05WX0NDU0lEKQorICAgIGNjc2lkID0gQVNDSUlfQ0NTSUQ7CisKKyAgbWVtc2V0KGJ1ZiwgMCwgSUNPTlZfSURfU0laRSk7CisgIGN1cmxfbXNwcmludGYoYnVmLCAiSUJNQ0NTSUQlMDV1MDAwMDAwMCIsIGNjc2lkKTsKK30KKworCitzdGF0aWMgaWNvbnZfdAoraWNvbnZfb3Blbl9DQ1NJRCh1bnNpZ25lZCBpbnQgY2NzaWRvdXQsIHVuc2lnbmVkIGludCBjY3NpZGluLCB1bnNpZ25lZCBpbnQgY3N0cikKKworeworICBjaGFyIGZyb21jb2RlW0lDT05WX0lEX1NJWkVdOworICBjaGFyIHRvY29kZVtJQ09OVl9JRF9TSVpFXTsKKworICAvKioKKyAgKioqICBMaWtlIGljb252X29wZW4oKSwgYnV0IGNoYXJhY3RlciBjb2RlcyBhcmUgZ2l2ZW4gYXMgQ0NTSURzLgorICAqKiogIElmIGBjc3RyJyBpcyBub24temVybywgY29udmVyc2lvbiBpcyBzZXQgdXAgdG8gc3RvcCB3aGVuZXZlciBhCisgICoqKiAgIG51bGwgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkLgorICAqKiogIFNlZSBpY29udl9vcGVuKCkgSUJNIGRlc2NyaXB0aW9uIGluICJOYXRpb25hbCBMYW5ndWFnZSBTdXBwb3J0IEFQSSIuCisgICoqLworCisgIG1ha2VPUzQwMEljb252Q29kZShmcm9tY29kZSwgY2NzaWRpbik7CisgIG1ha2VPUzQwMEljb252Q29kZSh0b2NvZGUsIGNjc2lkb3V0KTsKKyAgbWVtc2V0KHRvY29kZSArIDEzLCAwLCBzaXplb2YgdG9jb2RlIC0gMTMpOyAgIC8qIERlc3QuIGNvZGUgaWQgZm9ybWF0LiAqLworCisgIGlmIChjc3RyKQorICAgIGZyb21jb2RlWzE4XSA9ICcxJzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IG51bGwtdGVybWluYXRvciBmbGFnLiAqLworCisgIHJldHVybiBpY29udl9vcGVuKHRvY29kZSwgZnJvbWNvZGUpOworfQorCisKK3N0YXRpYyBpbnQKK2NvbnZlcnQoY2hhciAqIGQsIHNpemVfdCBkbGVuLCBpbnQgZGNjc2lkLAorICAgICAgICBjb25zdCBjaGFyICogcywgaW50IHNsZW4sIGludCBzY2NzaWQpCisKK3sKKyAgaW50IGk7CisgIGljb252X3QgY2Q7CisgIHNpemVfdCBsc2xlbjsKKworICAvKioKKyAgKioqICBDb252ZXJ0IGBzY2NzaWQnLWNvZGVkIGBzbGVuJy1kYXRhIGJ5dGVzIGF0IGBzJyBpbnRvIGBkY2NzaWQnLWNvZGVkCisgICoqKiAgIGRhdGEgc3RvcmVkIGluIHRoZSBgZGxlbictYnl0ZSBidWZmZXIgYXQgYGQnLgorICAqKiogIElmIGBzbGVuJyA8IDAsIHNvdXJjZSBzdHJpbmcgaXMgbnVsbC10ZXJtaW5hdGVkLgorICAqKiogIENDU0lEIDY1NTM1IChubyBjb252ZXJzaW9uKSBpcyByZXBsYWNlZCBieSB0aGUgQVNDSUkgQ0NTSUQuCisgICoqKiAgUmV0dXJuIHRoZSBjb252ZXJ0ZWQgZGVzdGluYXRpb24gYnl0ZSBjb3VudCwgb3IgLTEgaWYgZXJyb3IuCisgICoqLworCisgIGlmIChzY2NzaWQgPT0gNjU1MzUpCisgICAgc2Njc2lkID0gQVNDSUlfQ0NTSUQ7CisKKyAgaWYgKGRjY3NpZCA9PSA2NTUzNSkKKyAgICBkY2NzaWQgPSBBU0NJSV9DQ1NJRDsKKworICBpZiAoc2Njc2lkID09IGRjY3NpZCkgeworICAgIGxzbGVuID0gc2xlbiA+PSAwPyBzbGVuOiBzdHJsZW4ocykgKyAxOworICAgIGkgPSBsc2xlbiA8IGRsZW4/IGxzbGVuOiBkbGVuOworCisgICAgaWYgKHMgIT0gZCAmJiBpID4gMCkKKyAgICAgIG1lbWNweShkLCBzLCBpKTsKKworICAgIHJldHVybiBpOworICAgIH0KKworICBpZiAoc2xlbiA8IDApIHsKKyAgICBsc2xlbiA9IDA7CisgICAgY2QgPSBpY29udl9vcGVuX0NDU0lEKGRjY3NpZCwgc2Njc2lkLCAxKTsKKyAgICB9CisgIGVsc2UgeworICAgIGxzbGVuID0gKHNpemVfdCkgc2xlbjsKKyAgICBjZCA9IGljb252X29wZW5fQ0NTSUQoZGNjc2lkLCBzY2NzaWQsIDApOworICAgIH0KKworICBpZiAoSUNPTlZfT1BFTl9FUlJPUihjZCkpCisgICAgcmV0dXJuIC0xOworCisgIGkgPSBkbGVuOworCisgIGlmICgoaW50KSBpY29udihjZCwgKGNoYXIgKiAqKSAmcywgJmxzbGVuLCAmZCwgJmRsZW4pIDwgMCkKKyAgICBpID0gLTE7CisgIGVsc2UKKyAgICBpIC09IGRsZW47CisKKyAgaWNvbnZfY2xvc2UoY2QpOworICByZXR1cm4gaTsKK30KKworCitzdGF0aWMgY2hhciAqCitkeW5jb252ZXJ0KGludCBkY2NzaWQsIGNvbnN0IGNoYXIgKiBzLCBpbnQgc2xlbiwgaW50IHNjY3NpZCkKKworeworICBjaGFyICogZDsKKyAgY2hhciAqIGNwOworICBzaXplX3QgZGxlbjsKKyAgaW50IGw7CisgIGludCBsMjsKKyAgc3RhdGljIGNvbnN0IGNoYXIgbnVsbGJ5dGUgPSAwOworCisgIC8qIExpa2UgY29udmVydCwgYnV0IHRoZSBkZXN0aW5hdGlvbiBpcyBhbGxvY2F0ZWQgYW5kIHJldHVybmVkLiAqLworCisgIGRsZW4gPSAoc2l6ZV90KSAoc2xlbiA8IDA/IHN0cmxlbihzKTogc2xlbikgKyAxOworICBkbGVuICo9IE1BWF9DT05WX0VYUEFOU0lPTjsgICAgICAgICAgIC8qIEFsbG93IHNvbWUgZXhwYW5zaW9uLiAqLworICBkID0gbWFsbG9jKGRsZW4pOworCisgIGlmICghZCkKKyAgICByZXR1cm4gKGNoYXIgKikgTlVMTDsKKworICBsID0gY29udmVydChkLCBkbGVuLCBkY2NzaWQsIHMsIHNsZW4sIHNjY3NpZCk7CisKKyAgaWYgKGwgPCAwKSB7CisgICAgZnJlZShkKTsKKyAgICByZXR1cm4gKGNoYXIgKikgTlVMTDsKKyAgICB9CisKKyAgaWYgKHNsZW4gPCAwKSB7CisgICAgLyogTmVlZCB0byBudWxsLXRlcm1pbmF0ZSBldmVuIHdoZW4gc291cmNlIGxlbmd0aCBpcyBnaXZlbi4KKyAgICAgICBTaW5jZSBkZXN0aW5hdGlvbiBjb2RlIHNpemUgaXMgdW5rbm93biwgdXNlIGEgY29udmVyc2lvbiB0byBnZW5lcmF0ZQorICAgICAgIHRlcm1pbmF0b3IuICovCisKKyAgICBsMiA9IGNvbnZlcnQoZCArIGwsIGRsZW4gLSBsLCBkY2NzaWQsICZudWxsYnl0ZSwgLTEsIEFTQ0lJX0NDU0lEKTsKKworICAgIGlmIChsMiA8IDApIHsKKyAgICAgIGZyZWUoZCk7CisgICAgICByZXR1cm4gKGNoYXIgKikgTlVMTDsKKyAgICAgIH0KKworICAgIGwgKz0gbDI7CisgICAgfQorCisgIGlmICgoc2l6ZV90KSBsIDwgZGxlbikgeworICAgIGNwID0gcmVhbGxvYyhkLCBsKTsgICAgICAgICAvKiBTaG9ydGVuIHRvIG1pbmltdW0gbmVlZGVkLiAqLworCisgICAgaWYgKGNwKQorICAgICAgZCA9IGNwOworICAgIH0KKworICByZXR1cm4gZDsKK30KKworCitjaGFyICoKK2N1cmxfdmVyc2lvbl9jY3NpZCh1bnNpZ25lZCBpbnQgY2NzaWQpCisKK3sKKyAgaW50IGk7CisgIGNoYXIgKiBhdmVyc2lvbjsKKyAgY2hhciAqIGV2ZXJzaW9uOworCisgIGF2ZXJzaW9uID0gY3VybF92ZXJzaW9uKCk7CisKKyAgaWYgKCFhdmVyc2lvbikKKyAgICByZXR1cm4gYXZlcnNpb247CisKKyAgaSA9IHN0cmxlbihhdmVyc2lvbikgKyAxOworICBpICo9IE1BWF9DT05WX0VYUEFOU0lPTjsKKworICBpZiAoIShldmVyc2lvbiA9IEN1cmxfdGhyZWFkX2J1ZmZlcihMS19DVVJMX1ZFUlNJT04sIGkpKSkKKyAgICByZXR1cm4gKGNoYXIgKikgTlVMTDsKKworICBpZiAoY29udmVydChldmVyc2lvbiwgaSwgY2NzaWQsIGF2ZXJzaW9uLCAtMSwgQVNDSUlfQ0NTSUQpIDwgMCkKKyAgICByZXR1cm4gKGNoYXIgKikgTlVMTDsKKworICByZXR1cm4gZXZlcnNpb247Cit9CisKKworY2hhciAqCitjdXJsX2Vhc3lfZXNjYXBlX2Njc2lkKENVUkwgKiBoYW5kbGUsIGNvbnN0IGNoYXIgKiBzdHJpbmcsIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzY2NzaWQsIHVuc2lnbmVkIGludCBkY2NzaWQpCisKK3sKKyAgY2hhciAqIHM7CisgIGNoYXIgKiBkOworCisgIGlmICghc3RyaW5nKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIChjaGFyICopIE5VTEw7CisgICAgfQorCisgIHMgPSBkeW5jb252ZXJ0KEFTQ0lJX0NDU0lELCBzLCBsZW5ndGg/IGxlbmd0aDogLTEsIHNjY3NpZCk7CisKKyAgaWYgKCFzKQorICAgIHJldHVybiAoY2hhciAqKSBOVUxMOworCisgIGQgPSBjdXJsX2Vhc3lfZXNjYXBlKGhhbmRsZSwgcywgMCk7CisgIGZyZWUocyk7CisKKyAgaWYgKCFkKQorICAgIHJldHVybiAoY2hhciAqKSBOVUxMOworCisgIHMgPSBkeW5jb252ZXJ0KGRjY3NpZCwgZCwgLTEsIEFTQ0lJX0NDU0lEKTsKKyAgZnJlZShkKTsKKyAgcmV0dXJuIHM7Cit9CisKKworY2hhciAqCitjdXJsX2Vhc3lfdW5lc2NhcGVfY2NzaWQoQ1VSTCAqIGhhbmRsZSwgY29uc3QgY2hhciAqIHN0cmluZywgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiBvdXRsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNjY3NpZCwgdW5zaWduZWQgaW50IGRjY3NpZCkKKworeworICBjaGFyICogczsKKyAgY2hhciAqIGQ7CisKKyAgaWYgKCFzdHJpbmcpIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gKGNoYXIgKikgTlVMTDsKKyAgICB9CisKKyAgcyA9IGR5bmNvbnZlcnQoQVNDSUlfQ0NTSUQsIHMsIGxlbmd0aD8gbGVuZ3RoOiAtMSwgc2Njc2lkKTsKKworICBpZiAoIXMpCisgICAgcmV0dXJuIChjaGFyICopIE5VTEw7CisKKyAgZCA9IGN1cmxfZWFzeV91bmVzY2FwZShoYW5kbGUsIHMsIDAsIG91dGxlbmd0aCk7CisgIGZyZWUocyk7CisKKyAgaWYgKCFkKQorICAgIHJldHVybiAoY2hhciAqKSBOVUxMOworCisgIHMgPSBkeW5jb252ZXJ0KGRjY3NpZCwgZCwgLTEsIEFTQ0lJX0NDU0lEKTsKKyAgZnJlZShkKTsKKworICBpZiAocyAmJiBvdXRsZW5ndGgpCisgICAgKm91dGxlbmd0aCA9IHN0cmxlbihzKTsKKworICByZXR1cm4gczsKK30KKworCitzdHJ1Y3QgY3VybF9zbGlzdCAqCitjdXJsX3NsaXN0X2FwcGVuZF9jY3NpZChzdHJ1Y3QgY3VybF9zbGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogZGF0YSwgdW5zaWduZWQgaW50IGNjc2lkKQorCit7CisgIGNoYXIgKiBzOworCisgIHMgPSAoY2hhciAqKSBOVUxMOworCisgIGlmICghZGF0YSkKKyAgICByZXR1cm4gY3VybF9zbGlzdF9hcHBlbmQobGlzdCwgZGF0YSk7CisKKyAgcyA9IGR5bmNvbnZlcnQoQVNDSUlfQ0NTSUQsIGRhdGEsIC0xLCBjY3NpZCk7CisKKyAgaWYgKCFzKQorICAgIHJldHVybiAoc3RydWN0IGN1cmxfc2xpc3QgKikgTlVMTDsKKworICBsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQobGlzdCwgcyk7CisgIGZyZWUocyk7CisgIHJldHVybiBsaXN0OworfQorCisKK3RpbWVfdAorY3VybF9nZXRkYXRlX2Njc2lkKGNvbnN0IGNoYXIgKiBwLCBjb25zdCB0aW1lX3QgKiB1bnVzZWQsIHVuc2lnbmVkIGludCBjY3NpZCkKKworeworICBjaGFyICogczsKKyAgdGltZV90IHQ7CisKKyAgaWYgKCFwKQorICAgIHJldHVybiBjdXJsX2dldGRhdGUocCwgdW51c2VkKTsKKworICBzID0gZHluY29udmVydChBU0NJSV9DQ1NJRCwgcCwgLTEsIGNjc2lkKTsKKworICBpZiAoIXMpCisgICAgcmV0dXJuICh0aW1lX3QpIC0xOworCisgIHQgPSBjdXJsX2dldGRhdGUocywgdW51c2VkKTsKKyAgZnJlZShzKTsKKyAgcmV0dXJuIHQ7Cit9CisKKworc3RhdGljIGludAorY29udmVydF92ZXJzaW9uX2luZm9fc3RyaW5nKGNvbnN0IGNoYXIgKiAqIHN0cmluZ3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqICogYnVmcCwgaW50ICogbGVmdCwgdW5zaWduZWQgaW50IGNjc2lkKQorCit7CisgIGludCBsOworCisgIC8qIEhlbHBlciBmb3IgY3VybF92ZXJzaW9uX2luZm9fY2NzaWQoKTogY29udmVydCBhIHN0cmluZyBpZiBkZWZpbmVkLgorICAgICBSZXN1bHQgaXMgc3RvcmVkIGluIHRoZSBgKmxlZnQnLWJ5dGUgYnVmZmVyIGF0IGAqYnVmcCcuCisgICAgIGAqYnVmcCcgYW5kIGAqbGVmdCcgYXJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCisgICAgIFJldHVybiAwIGlmIG9rLCBlbHNlIC0xLiAqLworCisgIGlmICgqc3RyaW5ncCkgeworICAgIGwgPSBjb252ZXJ0KCpidWZwLCAqbGVmdCwgY2NzaWQsICpzdHJpbmdwLCAtMSwgQVNDSUlfQ0NTSUQpOworCisgICAgaWYgKGwgPD0gMCkKKyAgICAgIHJldHVybiAtMTsKKworICAgICpzdHJpbmdwID0gKmJ1ZnA7CisgICAgKmJ1ZnAgKz0gbDsKKyAgICAqbGVmdCAtPSBsOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworCitjdXJsX3ZlcnNpb25faW5mb19kYXRhICoKK2N1cmxfdmVyc2lvbl9pbmZvX2Njc2lkKENVUkx2ZXJzaW9uIHN0YW1wLCB1bnNpZ25lZCBpbnQgY2NzaWQpCisKK3sKKyAgY3VybF92ZXJzaW9uX2luZm9fZGF0YSAqIHA7CisgIGNoYXIgKiBjcDsKKyAgaW50IG47CisgIGludCBucHJvdG87CisgIGludCBpOworICBjdXJsX3ZlcnNpb25faW5mb19kYXRhICogaWQ7CisKKyAgLyogVGhlIGFzc2VydGlvbiBiZWxvdyBpcyBwb3NzaWJsZSwgYmVjYXVzZSBhbHRob3VnaCB0aGUgc2Vjb25kIG9wZXJhbmQKKyAgICAgaXMgYW4gZW51bSBtZW1iZXIsIHRoZSBmaXJzdCBpcyBhICNkZWZpbmUuIEluIHRoYXQgY2FzZSwgdGhlIE9TLzQwMCBDCisgICAgIGNvbXBpbGVyIHNlZW1zIHRvIGNvbXBhcmUgc3RyaW5nIHZhbHVlcyBhZnRlciBzdWJzdGl0dXRpb24uICovCisKKyNpZiBDVVJMVkVSU0lPTl9OT1cgIT0gQ1VSTFZFUlNJT05fRk9VUlRICisjZXJyb3IgY3VybF92ZXJzaW9uX2luZm9fZGF0YSBzdHJ1Y3R1cmUgaGFzIGNoYW5nZWQ6IHVwZ3JhZGUgdGhpcyBwcm9jZWR1cmUgdG9vLgorI2VuZGlmCisKKyAgLyogSWYgY2FsbGVyIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYSBuZXcgdmVyc2lvbiwgZXJyb3IuICovCisKKyAgaWYgKHN0YW1wID4gQ1VSTFZFUlNJT05fTk9XKQorICAgIHJldHVybiAoY3VybF92ZXJzaW9uX2luZm9fZGF0YSAqKSBOVUxMOworCisgIHAgPSBjdXJsX3ZlcnNpb25faW5mbyhzdGFtcCk7CisKKyAgaWYgKCFwKQorICAgIHJldHVybiBwOworCisgIC8qIE1lYXN1cmUgdGhyZWFkIHNwYWNlIG5lZWRlZC4gKi8KKworICBuID0gMDsKKyAgbnByb3RvID0gMDsKKworICBpZiAocC0+cHJvdG9jb2xzKSB7CisgICAgd2hpbGUgKHAtPnByb3RvY29sc1tucHJvdG9dKQorICAgICAgbiArPSBzdHJsZW4ocC0+cHJvdG9jb2xzW25wcm90bysrXSk7CisKKyAgICBuICs9IG5wcm90bysrOworICAgIH0KKworICBpZiAocC0+dmVyc2lvbikKKyAgICBuICs9IHN0cmxlbihwLT52ZXJzaW9uKSArIDE7CisKKyAgaWYgKHAtPmhvc3QpCisgICAgbiArPSBzdHJsZW4ocC0+aG9zdCkgKyAxOworCisgIGlmIChwLT5zc2xfdmVyc2lvbikKKyAgICBuICs9IHN0cmxlbihwLT5zc2xfdmVyc2lvbikgKyAxOworCisgIGlmIChwLT5saWJ6X3ZlcnNpb24pCisgICAgbiArPSBzdHJsZW4ocC0+bGliel92ZXJzaW9uKSArIDE7CisKKyAgaWYgKHAtPmFyZXMpCisgICAgbiArPSBzdHJsZW4ocC0+YXJlcykgKyAxOworCisgIGlmIChwLT5saWJpZG4pCisgICAgbiArPSBzdHJsZW4ocC0+bGliaWRuKSArIDE7CisKKyAgaWYgKHAtPmxpYnNzaF92ZXJzaW9uKQorICAgIG4gKz0gc3RybGVuKHAtPmxpYnNzaF92ZXJzaW9uKSArIDE7CisKKyAgLyogQWxsb2NhdGUgdGhyZWFkIHNwYWNlLiAqLworCisgIG4gKj0gTUFYX0NPTlZfRVhQQU5TSU9OOworCisgIGlmIChucHJvdG8pCisgICAgbiArPSBucHJvdG8gKiBzaXplb2YoY29uc3QgY2hhciAqKTsKKworICBjcCA9IEN1cmxfdGhyZWFkX2J1ZmZlcihMS19WRVJTSU9OX0lORk9fREFUQSwgbik7CisgIGlkID0gKGN1cmxfdmVyc2lvbl9pbmZvX2RhdGEgKikgQ3VybF90aHJlYWRfYnVmZmVyKExLX1ZFUlNJT05fSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICppZCk7CisKKyAgaWYgKCFpZCB8fCAhY3ApCisgICAgcmV0dXJuIChjdXJsX3ZlcnNpb25faW5mb19kYXRhICopIE5VTEw7CisKKyAgLyogQ29weSBkYXRhIGFuZCBjb252ZXJ0IHN0cmluZ3MuICovCisKKyAgbWVtY3B5KChjaGFyICopIGlkLCAoY2hhciAqKSBwLCBzaXplb2YgKnApOworCisgIGlmIChpZC0+cHJvdG9jb2xzKSB7CisgICAgaWQtPnByb3RvY29scyA9IChjb25zdCBjaGFyICogY29uc3QgKikgY3A7CisgICAgaSA9IG5wcm90byAqIHNpemVvZiBpZC0+cHJvdG9jb2xzWzBdOworICAgIG1lbWNweShjcCwgKGNoYXIgKikgcC0+cHJvdG9jb2xzLCBpKTsKKyAgICBjcCArPSBpOworICAgIG4gLT0gaTsKKworICAgIGZvciAoaSA9IDA7IGlkLT5wcm90b2NvbHNbaV07IGkrKykKKyAgICAgIGlmIChjb252ZXJ0X3ZlcnNpb25faW5mb19zdHJpbmcoKChjb25zdCBjaGFyICogKikgaWQtPnByb3RvY29scykgKyBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZuLCBjY3NpZCkpCisgICAgICAgIHJldHVybiAoY3VybF92ZXJzaW9uX2luZm9fZGF0YSAqKSBOVUxMOworICAgIH0KKworICBpZiAoY29udmVydF92ZXJzaW9uX2luZm9fc3RyaW5nKCZpZC0+dmVyc2lvbiwgJmNwLCAmbiwgY2NzaWQpKQorICAgIHJldHVybiAoY3VybF92ZXJzaW9uX2luZm9fZGF0YSAqKSBOVUxMOworCisgIGlmIChjb252ZXJ0X3ZlcnNpb25faW5mb19zdHJpbmcoJmlkLT5ob3N0LCAmY3AsICZuLCBjY3NpZCkpCisgICAgcmV0dXJuIChjdXJsX3ZlcnNpb25faW5mb19kYXRhICopIE5VTEw7CisKKyAgaWYgKGNvbnZlcnRfdmVyc2lvbl9pbmZvX3N0cmluZygmaWQtPnNzbF92ZXJzaW9uLCAmY3AsICZuLCBjY3NpZCkpCisgICAgcmV0dXJuIChjdXJsX3ZlcnNpb25faW5mb19kYXRhICopIE5VTEw7CisKKyAgaWYgKGNvbnZlcnRfdmVyc2lvbl9pbmZvX3N0cmluZygmaWQtPmxpYnpfdmVyc2lvbiwgJmNwLCAmbiwgY2NzaWQpKQorICAgIHJldHVybiAoY3VybF92ZXJzaW9uX2luZm9fZGF0YSAqKSBOVUxMOworCisgIGlmIChjb252ZXJ0X3ZlcnNpb25faW5mb19zdHJpbmcoJmlkLT5hcmVzLCAmY3AsICZuLCBjY3NpZCkpCisgICAgcmV0dXJuIChjdXJsX3ZlcnNpb25faW5mb19kYXRhICopIE5VTEw7CisKKyAgaWYgKGNvbnZlcnRfdmVyc2lvbl9pbmZvX3N0cmluZygmaWQtPmxpYmlkbiwgJmNwLCAmbiwgY2NzaWQpKQorICAgIHJldHVybiAoY3VybF92ZXJzaW9uX2luZm9fZGF0YSAqKSBOVUxMOworCisgIGlmIChjb252ZXJ0X3ZlcnNpb25faW5mb19zdHJpbmcoJmlkLT5saWJzc2hfdmVyc2lvbiwgJmNwLCAmbiwgY2NzaWQpKQorICAgIHJldHVybiAoY3VybF92ZXJzaW9uX2luZm9fZGF0YSAqKSBOVUxMOworCisgIHJldHVybiBpZDsKK30KKworCitjb25zdCBjaGFyICoKK2N1cmxfZWFzeV9zdHJlcnJvcl9jY3NpZChDVVJMY29kZSBlcnJvciwgdW5zaWduZWQgaW50IGNjc2lkKQorCit7CisgIGludCBpOworICBjb25zdCBjaGFyICogczsKKyAgY2hhciAqIGJ1ZjsKKworICBzID0gY3VybF9lYXN5X3N0cmVycm9yKGVycm9yKTsKKworICBpZiAoIXMpCisgICAgcmV0dXJuIHM7CisKKyAgaSA9IE1BWF9DT05WX0VYUEFOU0lPTiAqIChzdHJsZW4ocykgKyAxKTsKKworICBpZiAoIShidWYgPSBDdXJsX3RocmVhZF9idWZmZXIoTEtfRUFTWV9TVFJFUlJPUiwgaSkpKQorICAgIHJldHVybiAoY29uc3QgY2hhciAqKSBOVUxMOworCisgIGlmIChjb252ZXJ0KGJ1ZiwgaSwgY2NzaWQsIHMsIC0xLCBBU0NJSV9DQ1NJRCkgPCAwKQorICAgIHJldHVybiAoY29uc3QgY2hhciAqKSBOVUxMOworCisgIHJldHVybiAoY29uc3QgY2hhciAqKSBidWY7Cit9CisKKworY29uc3QgY2hhciAqCitjdXJsX3NoYXJlX3N0cmVycm9yX2Njc2lkKENVUkxTSGNvZGUgZXJyb3IsIHVuc2lnbmVkIGludCBjY3NpZCkKKworeworICBpbnQgaTsKKyAgY29uc3QgY2hhciAqIHM7CisgIGNoYXIgKiBidWY7CisKKyAgcyA9IGN1cmxfc2hhcmVfc3RyZXJyb3IoZXJyb3IpOworCisgIGlmICghcykKKyAgICByZXR1cm4gczsKKworICBpID0gTUFYX0NPTlZfRVhQQU5TSU9OICogKHN0cmxlbihzKSArIDEpOworCisgIGlmICghKGJ1ZiA9IEN1cmxfdGhyZWFkX2J1ZmZlcihMS19TSEFSRV9TVFJFUlJPUiwgaSkpKQorICAgIHJldHVybiAoY29uc3QgY2hhciAqKSBOVUxMOworCisgIGlmIChjb252ZXJ0KGJ1ZiwgaSwgY2NzaWQsIHMsIC0xLCBBU0NJSV9DQ1NJRCkgPCAwKQorICAgIHJldHVybiAoY29uc3QgY2hhciAqKSBOVUxMOworCisgIHJldHVybiAoY29uc3QgY2hhciAqKSBidWY7Cit9CisKKworY29uc3QgY2hhciAqCitjdXJsX211bHRpX3N0cmVycm9yX2Njc2lkKENVUkxNY29kZSBlcnJvciwgdW5zaWduZWQgaW50IGNjc2lkKQorCit7CisgIGludCBpOworICBjb25zdCBjaGFyICogczsKKyAgY2hhciAqIGJ1ZjsKKworICBzID0gY3VybF9tdWx0aV9zdHJlcnJvcihlcnJvcik7CisKKyAgaWYgKCFzKQorICAgIHJldHVybiBzOworCisgIGkgPSBNQVhfQ09OVl9FWFBBTlNJT04gKiAoc3RybGVuKHMpICsgMSk7CisKKyAgaWYgKCEoYnVmID0gQ3VybF90aHJlYWRfYnVmZmVyKExLX01VTFRJX1NUUkVSUk9SLCBpKSkpCisgICAgcmV0dXJuIChjb25zdCBjaGFyICopIE5VTEw7CisKKyAgaWYgKGNvbnZlcnQoYnVmLCBpLCBjY3NpZCwgcywgLTEsIEFTQ0lJX0NDU0lEKSA8IDApCisgICAgcmV0dXJuIChjb25zdCBjaGFyICopIE5VTEw7CisKKyAgcmV0dXJuIChjb25zdCBjaGFyICopIGJ1ZjsKK30KKworCitDVVJMY29kZQorY3VybF9lYXN5X2dldGluZm9fY2NzaWQoQ1VSTCAqIGN1cmwsIENVUkxJTkZPIGluZm8sIC4uLikKKworeworICB2YV9saXN0IGFyZzsKKyAgdm9pZCAqIHBhcmFtcDsKKyAgQ1VSTGNvZGUgcmV0OworICB1bnNpZ25lZCBpbnQgY2NzaWQ7CisgIGNoYXIgKiAqIGNwcDsKKyAgY2hhciAqIHM7CisgIGNoYXIgKiBkOworICBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqIGRhdGE7CisKKyAgLyogV0FSTklORzogdW5saWtlIGN1cmxfZWFzeV9nZXRfaW5mbygpLCB0aGUgc3RyaW5ncyByZXR1cm5lZCBieSB0aGlzCisgICAgIHByb2NlZHVyZSBoYXZlIHRvIGJlIGZyZWUnZWQuICovCisKKyAgZGF0YSA9IChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqKSBjdXJsOworICB2YV9zdGFydChhcmcsIGluZm8pOworICBwYXJhbXAgPSB2YV9hcmcoYXJnLCB2b2lkICopOworICByZXQgPSBDdXJsX2dldGluZm8oZGF0YSwgaW5mbywgcGFyYW1wKTsKKworICBpZiAocmV0ICE9IENVUkxFX09LIHx8ICgoaW50KSBpbmZvICYgQ1VSTElORk9fVFlQRU1BU0spICE9IENVUkxJTkZPX1NUUklORykgeworICAgIHZhX2VuZChhcmcpOworICAgIHJldHVybiByZXQ7CisgICAgfQorCisgIGNjc2lkID0gdmFfYXJnKGFyZywgdW5zaWduZWQgaW50KTsKKyAgdmFfZW5kKGFyZyk7CisgIGNwcCA9IChjaGFyICogKikgcGFyYW1wOworICBzID0gKmNwcDsKKworICBpZiAoIXMpCisgICAgcmV0dXJuIHJldDsKKworICBkID0gZHluY29udmVydChjY3NpZCwgcywgLTEsIEFTQ0lJX0NDU0lEKTsKKyAgKmNwcCA9IGQ7CisKKyAgaWYgKCFkKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludAorQ3VybF9pc19mb3JtYWRkX3N0cmluZyhDVVJMZm9ybW9wdGlvbiBvcHRpb24pCisKK3sKKyAgc3dpdGNoIChvcHRpb24pIHsKKworICAgIGNhc2UgQ1VSTEZPUk1fRklMRU5BTUU6CisgICAgY2FzZSBDVVJMRk9STV9DT05URU5UVFlQRToKKyAgICBjYXNlIENVUkxGT1JNX0JVRkZFUjoKKyAgICBjYXNlIENVUkxGT1JNX0ZJTEU6CisgICAgY2FzZSBDVVJMRk9STV9GSUxFQ09OVEVOVDoKKyAgICBjYXNlIENVUkxGT1JNX0NPUFlDT05URU5UUzoKKyAgICBjYXNlIENVUkxGT1JNX0NPUFlOQU1FOgorICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkCitDdXJsX2Zvcm1hZGRfcmVsZWFzZV9sb2NhbChzdHJ1Y3QgY3VybF9mb3JtcyAqIGZvcm1zLCBpbnQgbmFyZ3MsIGludCBza2lwKQorCit7CisgIHdoaWxlIChuYXJncy0tKQorICAgIGlmIChuYXJncyAhPSBza2lwKQorICAgICAgaWYgKEN1cmxfaXNfZm9ybWFkZF9zdHJpbmcoZm9ybXNbbmFyZ3NdLm9wdGlvbikpCisgICAgICAgIGlmIChmb3Jtc1tuYXJnc10udmFsdWUpCisgICAgICAgICAgZnJlZSgoY2hhciAqKSBmb3Jtc1tuYXJnc10udmFsdWUpOworCisgIGZyZWUoKGNoYXIgKikgZm9ybXMpOworfQorCisKK3N0YXRpYyBpbnQKK0N1cmxfZm9ybWFkZF9jb252ZXJ0KHN0cnVjdCBjdXJsX2Zvcm1zICogZm9ybXMsCisgICAgICAgICAgICAgICAgICAgICBpbnQgZm9ybXgsIGludCBsZW5ndGh4LCB1bnNpZ25lZCBpbnQgY2NzaWQpCisKK3sKKyAgaW50IGw7CisgIGNoYXIgKiBjcDsKKyAgY2hhciAqIGNwMjsKKworICBpZiAoZm9ybXggPCAwIHx8ICFmb3Jtc1tmb3JteF0udmFsdWUpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKGxlbmd0aHggPj0gMCkKKyAgICBsID0gKGludCkgZm9ybXNbbGVuZ3RoeF0udmFsdWU7CisgIGVsc2UKKyAgICBsID0gc3RybGVuKGZvcm1zW2Zvcm14XS52YWx1ZSkgKyAxOworCisgIGNwID0gbWFsbG9jKE1BWF9DT05WX0VYUEFOU0lPTiAqIGwpOworCisgIGlmICghY3ApCisgICAgcmV0dXJuIC0xOworCisgIGwgPSBjb252ZXJ0KGNwLCBNQVhfQ09OVl9FWFBBTlNJT04gKiBsLCBBU0NJSV9DQ1NJRCwKKyAgICAgICAgICAgICAgZm9ybXNbZm9ybXhdLnZhbHVlLCBsLCBjY3NpZCk7CisKKyAgaWYgKGwgPCAwKSB7CisgICAgZnJlZShjcCk7CisgICAgcmV0dXJuIC0xOworICAgIH0KKworICBjcDIgPSByZWFsbG9jKGNwLCBsKTsgICAgICAgICAgICAgICAgIC8qIFNob3J0ZW4gYnVmZmVyIHRvIHRoZSBzdHJpbmcgc2l6ZS4gKi8KKworICBpZiAoY3AyKQorICAgIGNwID0gY3AyOworCisgIGZvcm1zW2Zvcm14XS52YWx1ZSA9IGNwOworCisgIGlmIChsZW5ndGh4ID49IDApCisgICAgZm9ybXNbbGVuZ3RoeF0udmFsdWUgPSAoY2hhciAqKSBsOyAgLyogVXBkYXRlIHRvIGxlbmd0aCBhZnRlciBjb252ZXJzaW9uLiAqLworCisgIHJldHVybiBsOworfQorCisKK0NVUkxGT1JNY29kZQorY3VybF9mb3JtYWRkX2Njc2lkKHN0cnVjdCBjdXJsX2h0dHBwb3N0ICogKiBodHRwcG9zdCwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqICogbGFzdF9wb3N0LCAuLi4pCisKK3sKKyAgdmFfbGlzdCBhcmc7CisgIENVUkxmb3Jtb3B0aW9uIG9wdGlvbjsKKyAgQ1VSTEZPUk1jb2RlIHJlc3VsdDsKKyAgc3RydWN0IGN1cmxfZm9ybXMgKiBmb3JtczsKKyAgc3RydWN0IGN1cmxfZm9ybXMgKiBsZm9ybXM7CisgIHN0cnVjdCBjdXJsX2Zvcm1zICogdGZvcm1zOworICB1bnNpZ25lZCBpbnQgbGZvcm1sZW47CisgIGNvbnN0IGNoYXIgKiB2YWx1ZTsKKyAgdW5zaWduZWQgaW50IGNjc2lkOworICBpbnQgbmFyZ3M7CisgIGludCBuYW1leDsKKyAgaW50IG5hbWVsZW5ndGh4OworICBpbnQgY29udGVudHg7CisgIGludCBsZW5ndGh4OworICB1bnNpZ25lZCBpbnQgY29udGVudGNjc2lkOworICB1bnNpZ25lZCBpbnQgbmFtZWNjc2lkOworCisgIC8qIEEgc2luZ2xlIGN1cmxfZm9ybWFkZCgpIGNhbGwgY2Fubm90IGJlIHNwbGl0dGVkIGluIHNldmVyYWwgY2FsbHMgdG8gZGVhbAorICAgICB3aXRoIGFsbCBwYXJhbWV0ZXJzOiB0aGUgb3JpZ2luYWwgcGFyYW1ldGVycyBhcmUgdGh1cyBjb3BpZWQgdG8gYSBsb2NhbAorICAgICBjdXJsX2Zvcm1zIGFycmF5IGFuZCBjb252ZXJ0ZWQgdG8gQVNDSUkgd2hlbiBuZWVkZWQuCisgICAgIENVUkxGT1JNX1BUUk5BTUUgaXMgcHJvY2Vzc2VkIGFzIGlmIGl0IHdlcmUgQ1VSTEZPUk1fQ09QWU5BTUUuCisgICAgIENVUkxGT1JNX0NPUFlOQU1FIGFuZCBDVVJMRk9STV9OQU1FTEVOR1RIIG9jY3VycmVuY2Ugb3JkZXIgaW4KKyAgICAgcGFyYW1ldGVycyBpcyBub3QgZGVmaW5lZDsgZm9yIHRoaXMgcmVhc29uLCB0aGUgYWN0dWFsIGNvbnZlcnNpb24gaXMKKyAgICAgZGVsYXllZCB0byB0aGUgZW5kIG9mIHBhcmFtZXRlciBwcm9jZXNzaW5nLiBUaGUgc2FtZSBhcHBsaWVzIHRvCisgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUy9DVVJMRk9STV9DT05URU5UU0xFTkdUSCwgYnV0IHRoZXNlIG1heSBhcHBlYXIKKyAgICAgc2V2ZXJhbCB0aW1lcyBpbiB0aGUgcGFyYW1ldGVyIGxpc3Q7IHRoZSBwcm9ibGVtIHJlc2lkZXMgaGVyZSBpbiBrbm93aW5nCisgICAgIHdoaWNoIENVUkxGT1JNX0NPTlRFTlRTTEVOR1RIIGFwcGxpZXMgdG8gd2hpY2ggQ1VSTEZPUk1fQ09QWUNPTlRFTlRTIGFuZAorICAgICB3aGVuIHdlIGNhbiBiZSBzdXJlIHRvIGhhdmUgYm90aCBpbmZvIGZvciBjb252ZXJzaW9uOiBlbmQgb2YgcGFyYW1ldGVyCisgICAgIGxpc3QgaXMgc3VjaCBhIHBvaW50LCBidXQgQ1VSTEZPUk1fQ09OVEVOVFRZUEUgaXMgYWxzbyB1c2VkIGhlcmUgYXMgYQorICAgICBuYXR1cmFsIHNlcGFyYXRvciBiZXR3ZWVuIGNvbnRlbnQgZGF0YSBkZWZpbml0aW9uczsgdGhpcyBzZWVtcyB0byBiZQorICAgICBpbiBhY2NvcmRhbmNlIHdpdGggRm9ybUFkZCgpIGJlaGF2aW9yLiAqLworCisgIC8qIEFsbG9jYXRlIHRoZSBsb2NhbCBjdXJsX2Zvcm1zIGFycmF5LiAqLworCisgIGxmb3JtbGVuID0gQUxMT0NfR1JBTlVMRTsKKyAgbGZvcm1zID0gbWFsbG9jKGxmb3JtbGVuICogc2l6ZW9mICpsZm9ybXMpOworCisgIGlmICghbGZvcm1zKQorICAgIHJldHVybiBDVVJMX0ZPUk1BRERfTUVNT1JZOworCisgIC8qIFByb2Nlc3MgdGhlIGFyZ3VtZW50cywgY29weWluZyB0aGVtIGludG8gbG9jYWwgYXJyYXksIGxhdGNoaW5nIGNvbnZlcnNpb24KKyAgICAgaW5kZXhlcyBhbmQgY29udmVydGluZyB3aGVuIG5lZWRlZC4gKi8KKworICByZXN1bHQgPSBDVVJMX0ZPUk1BRERfT0s7CisgIG5hcmdzID0gMDsKKyAgY29udGVudHggPSAtMTsKKyAgbGVuZ3RoeCA9IC0xOworICBuYW1leCA9IC0xOworICBuYW1lbGVuZ3RoeCA9IC0xOworICBmb3JtcyA9IChzdHJ1Y3QgY3VybF9mb3JtcyAqKSBOVUxMOworICB2YV9zdGFydChhcmcsIGxhc3RfcG9zdCk7CisKKyAgZm9yICg7OykgeworICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzdGlsbCByb29tIGZvciBhbiBpdGVtIGluIGxvY2FsIGFycmF5LiAqLworCisgICAgaWYgKG5hcmdzID49IGxmb3JtbGVuKSB7CisgICAgICBsZm9ybWxlbiArPSBBTExPQ19HUkFOVUxFOworICAgICAgdGZvcm1zID0gcmVhbGxvYyhsZm9ybXMsIGxmb3JtbGVuICogc2l6ZW9mICpsZm9ybXMpOworCisgICAgICBpZiAoIXRmb3JtcykgeworICAgICAgICByZXN1bHQgPSBDVVJMX0ZPUk1BRERfTUVNT1JZOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICBsZm9ybXMgPSB0Zm9ybXM7CisgICAgICB9CisKKyAgICAvKiBHZXQgbmV4dCBvcHRpb24uICovCisKKyAgICBpZiAoZm9ybXMpIHsKKyAgICAgIC8qIEdldCBvcHRpb24gZnJvbSBhcnJheS4gKi8KKworICAgICAgb3B0aW9uID0gZm9ybXMtPm9wdGlvbjsKKyAgICAgIHZhbHVlID0gZm9ybXMtPnZhbHVlOworICAgICAgZm9ybXMrKzsKKyAgICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIEdldCBvcHRpb24gZnJvbSBhcmd1bWVudHMuICovCisKKyAgICAgIG9wdGlvbiA9IHZhX2FyZyhhcmcsIENVUkxmb3Jtb3B0aW9uKTsKKworICAgICAgaWYgKG9wdGlvbiA9PSBDVVJMRk9STV9FTkQpCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgLyogRGlzcGF0Y2ggYnkgb3B0aW9uLiAqLworCisgICAgc3dpdGNoIChvcHRpb24pIHsKKworICAgIGNhc2UgQ1VSTEZPUk1fRU5EOgorICAgICAgZm9ybXMgPSAoc3RydWN0IGN1cmxfZm9ybXMgKikgTlVMTDsgICAgICAgLyogTGVhdmUgYXJyYXkgbW9kZS4gKi8KKyAgICAgIGNvbnRpbnVlOworCisgICAgY2FzZSBDVVJMRk9STV9BUlJBWToKKyAgICAgIGlmICghZm9ybXMpIHsKKyAgICAgICAgZm9ybXMgPSB2YV9hcmcoYXJnLCBzdHJ1Y3QgY3VybF9mb3JtcyAqKTsKKyAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgcmVzdWx0ID0gQ1VSTF9GT1JNQUREX0lMTEVHQUxfQVJSQVk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTEZPUk1fQ09QWU5BTUU6CisgICAgICBvcHRpb24gPSBDVVJMRk9STV9QVFJOQU1FOyAgICAgICAgICAgICAgICAvKiBTdGF0aWMgZm9yIG5vdy4gKi8KKworICAgIGNhc2UgQ1VSTEZPUk1fUFRSTkFNRToKKyAgICAgIGlmIChuYW1leCA+PSAwKQorICAgICAgICByZXN1bHQgPSBDVVJMX0ZPUk1BRERfT1BUSU9OX1RXSUNFOworCisgICAgICBuYW1leCA9IG5hcmdzOworCisgICAgICBpZiAoIWZvcm1zKSB7CisgICAgICAgIHZhbHVlID0gdmFfYXJnKGFyZywgY2hhciAqKTsKKyAgICAgICAgbmFtZWNjc2lkID0gKHVuc2lnbmVkIGludCkgdmFfYXJnKGFyZywgbG9uZyk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBuYW1lY2NzaWQgPSAodW5zaWduZWQgaW50KSBmb3Jtcy0+dmFsdWU7CisgICAgICAgIGZvcm1zKys7CisgICAgICAgIH0KKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxGT1JNX0NPUFlDT05URU5UUzoKKyAgICAgIGlmIChjb250ZW50eCA+PSAwKQorICAgICAgICByZXN1bHQgPSBDVVJMX0ZPUk1BRERfT1BUSU9OX1RXSUNFOworCisgICAgICBjb250ZW50eCA9IG5hcmdzOworCisgICAgICBpZiAoIWZvcm1zKSB7CisgICAgICAgIHZhbHVlID0gdmFfYXJnKGFyZywgY2hhciAqKTsKKyAgICAgICAgY29udGVudGNjc2lkID0gKHVuc2lnbmVkIGludCkgdmFfYXJnKGFyZywgbG9uZyk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBjb250ZW50Y2NzaWQgPSAodW5zaWduZWQgaW50KSBmb3Jtcy0+dmFsdWU7CisgICAgICAgIGZvcm1zKys7CisgICAgICAgIH0KKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxGT1JNX1BUUkNPTlRFTlRTOgorICAgIGNhc2UgQ1VSTEZPUk1fQlVGRkVSUFRSOgorICAgICAgaWYgKCFmb3JtcykKKyAgICAgICAgdmFsdWUgPSB2YV9hcmcoYXJnLCBjaGFyICopOyAgICAgICAgICAgIC8qIE5vIGNvbnZlcnNpb24uICovCisKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDVVJMRk9STV9DT05URU5UU0xFTkdUSDoKKyAgICAgIGxlbmd0aHggPSBuYXJnczsKKworICAgICAgaWYgKCFmb3JtcykKKyAgICAgICAgdmFsdWUgPSAoY2hhciAqKSB2YV9hcmcoYXJnLCBsb25nKTsKKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxGT1JNX05BTUVMRU5HVEg6CisgICAgICBuYW1lbGVuZ3RoeCA9IG5hcmdzOworCisgICAgICBpZiAoIWZvcm1zKQorICAgICAgICB2YWx1ZSA9IChjaGFyICopIHZhX2FyZyhhcmcsIGxvbmcpOworCisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTEZPUk1fQlVGRkVSTEVOR1RIOgorICAgICAgaWYgKCFmb3JtcykKKyAgICAgICAgdmFsdWUgPSAoY2hhciAqKSB2YV9hcmcoYXJnLCBsb25nKTsKKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENVUkxGT1JNX0NPTlRFTlRIRUFERVI6CisgICAgICBpZiAoIWZvcm1zKQorICAgICAgICB2YWx1ZSA9IChjaGFyICopIHZhX2FyZyhhcmcsIHN0cnVjdCBjdXJsX3NsaXN0ICopOworCisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTEZPUk1fU1RSRUFNOgorICAgICAgaWYgKCFmb3JtcykKKyAgICAgICAgdmFsdWUgPSAoY2hhciAqKSB2YV9hcmcoYXJnLCB2b2lkICopOworCisgICAgICBicmVhazsKKworICAgIGNhc2UgQ1VSTEZPUk1fQ09OVEVOVFRZUEU6CisgICAgICAvKiBJZiBhIHByZXZpb3VzIGNvbnRlbnQgaGFzIGJlZW4gZW5jb3VudGVyZWQsIGNvbnZlcnQgaXQgbm93LiAqLworCisgICAgICBpZiAoQ3VybF9mb3JtYWRkX2NvbnZlcnQobGZvcm1zLCBjb250ZW50eCwgbGVuZ3RoeCwgY29udGVudGNjc2lkKSA8IDApIHsKKyAgICAgICAgcmVzdWx0ID0gQ1VSTF9GT1JNQUREX01FTU9SWTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgY29udGVudHggPSAtMTsKKyAgICAgIGxlbmd0aHggPSAtMTsKKyAgICAgIC8qIEZhbGwgaW50byBkZWZhdWx0LiAqLworCisgICAgZGVmYXVsdDoKKyAgICAgIC8qIE11c3QgYmUgYSBjb252ZXJ0aWJsZSBzdHJpbmcuICovCisKKyAgICAgIGlmICghQ3VybF9pc19mb3JtYWRkX3N0cmluZyhvcHRpb24pKSB7CisgICAgICAgIHJlc3VsdCA9IENVUkxfRk9STUFERF9VTktOT1dOX09QVElPTjsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgaWYgKCFmb3JtcykgeworICAgICAgICB2YWx1ZSA9IHZhX2FyZyhhcmcsIGNoYXIgKik7CisgICAgICAgIGNjc2lkID0gKHVuc2lnbmVkIGludCkgdmFfYXJnKGFyZywgbG9uZyk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBjY3NpZCA9ICh1bnNpZ25lZCBpbnQpIGZvcm1zLT52YWx1ZTsKKyAgICAgICAgZm9ybXMrKzsKKyAgICAgICAgfQorCisgICAgICAvKiBEbyB0aGUgY29udmVyc2lvbi4gKi8KKworICAgICAgbGZvcm1zW25hcmdzXS52YWx1ZSA9IHZhbHVlOworCisgICAgICBpZiAoQ3VybF9mb3JtYWRkX2NvbnZlcnQobGZvcm1zLCBuYXJncywgLTEsIGNjc2lkKSA8IDApIHsKKyAgICAgICAgcmVzdWx0ID0gQ1VSTF9GT1JNQUREX01FTU9SWTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgdmFsdWUgPSBsZm9ybXNbbmFyZ3NdLnZhbHVlOworICAgICAgfQorCisgICAgaWYgKHJlc3VsdCAhPSBDVVJMX0ZPUk1BRERfT0spCisgICAgICBicmVhazsKKworICAgIGxmb3Jtc1tuYXJnc10udmFsdWUgPSB2YWx1ZTsKKyAgICBsZm9ybXNbbmFyZ3MrK10ub3B0aW9uID0gb3B0aW9uOworICAgIH0KKworICB2YV9lbmQoYXJnKTsKKworICAvKiBDb252ZXJ0IHRoZSBuYW1lIGFuZCB0aGUgbGFzdCBjb250ZW50LCBub3cgdGhhdCB3ZSBrbm93IHRoZWlyIGxlbmd0aHMuICovCisKKyAgaWYgKHJlc3VsdCA9PSBDVVJMX0ZPUk1BRERfT0sgJiYgbmFtZXggPj0gMCkgeworICAgIGlmIChDdXJsX2Zvcm1hZGRfY29udmVydChsZm9ybXMsIG5hbWV4LCBuYW1lbGVuZ3RoeCwgbmFtZWNjc2lkKSA8IDApCisgICAgICByZXN1bHQgPSBDVVJMX0ZPUk1BRERfTUVNT1JZOworICAgIGVsc2UKKyAgICAgIGxmb3Jtc1tuYW1leF0ub3B0aW9uID0gQ1VSTEZPUk1fQ09QWU5BTUU7ICAgICAgICAgLyogRm9yY2UgY29weS4gKi8KKyAgICB9CisKKyAgaWYgKHJlc3VsdCA9PSBDVVJMX0ZPUk1BRERfT0spIHsKKyAgICBpZiAoQ3VybF9mb3JtYWRkX2NvbnZlcnQobGZvcm1zLCBjb250ZW50eCwgbGVuZ3RoeCwgY29udGVudGNjc2lkKSA8IDApCisgICAgICByZXN1bHQgPSBDVVJMX0ZPUk1BRERfTUVNT1JZOworICAgIGVsc2UKKyAgICAgIGNvbnRlbnR4ID0gLTE7CisgICAgfQorCisgIC8qIERvIHRoZSBmb3JtYWRkIHdpdGggb3VyIGNvbnZlcnRlZCBwYXJhbWV0ZXJzLiAqLworCisgIGlmIChyZXN1bHQgPT0gQ1VSTF9GT1JNQUREX09LKSB7CisgICAgbGZvcm1zW25hcmdzXS5vcHRpb24gPSBDVVJMRk9STV9FTkQ7CisgICAgcmVzdWx0ID0gY3VybF9mb3JtYWRkKGh0dHBwb3N0LCBsYXN0X3Bvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0FSUkFZLCBsZm9ybXMsIENVUkxGT1JNX0VORCk7CisgICAgfQorCisgIC8qIFRlcm1pbmF0ZS4gKi8KKworICBDdXJsX2Zvcm1hZGRfcmVsZWFzZV9sb2NhbChsZm9ybXMsIG5hcmdzLCBjb250ZW50eCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjdXJsX2Zvcm1nZXRfY2FsbGJhY2sgYXBwZW5kOworICB2b2lkICogICAgICAgICAgICAgICAgYXJnOworICB1bnNpZ25lZCBpbnQgICAgICAgICAgY2NzaWQ7Cit9ICAgY2ZjZGF0YTsKKworCitzdGF0aWMgc2l6ZV90CitDdXJsX2Zvcm1nZXRfY2FsbGJhY2tfY2NzaWQodm9pZCAqIGFyZywgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGxlbikKKworeworICBjZmNkYXRhICogcDsKKyAgY2hhciAqIGI7CisgIGludCBsOworICBzaXplX3QgcmV0OworCisgIHAgPSAoY2ZjZGF0YSAqKSBhcmc7CisKKyAgaWYgKChsb25nKSBsZW4gPD0gMCkKKyAgICByZXR1cm4gKCpwLT5hcHBlbmQpKHAtPmFyZywgYnVmLCBsZW4pOworCisgIGIgPSBtYWxsb2MoTUFYX0NPTlZfRVhQQU5TSU9OICogbGVuKTsKKworICBpZiAoIWIpCisgICAgcmV0dXJuIChzaXplX3QpIC0xOworCisgIGwgPSBjb252ZXJ0KGIsIE1BWF9DT05WX0VYUEFOU0lPTiAqIGxlbiwgcC0+Y2NzaWQsIGJ1ZiwgbGVuLCBBU0NJSV9DQ1NJRCk7CisKKyAgaWYgKGwgPCAwKSB7CisgICAgZnJlZShiKTsKKyAgICByZXR1cm4gKHNpemVfdCkgLTE7CisgICAgfQorCisgIHJldCA9ICgqcC0+YXBwZW5kKShwLT5hcmcsIGIsIGwpOworICBmcmVlKGIpOworICByZXR1cm4gcmV0ID09IGw/IGxlbjogLTE7Cit9CisKKworaW50CitjdXJsX2Zvcm1nZXRfY2NzaWQoc3RydWN0IGN1cmxfaHR0cHBvc3QgKiBmb3JtLCB2b2lkICogYXJnLAorICAgICAgICAgICAgICAgICAgIGN1cmxfZm9ybWdldF9jYWxsYmFjayBhcHBlbmQsIHVuc2lnbmVkIGludCBjY3NpZCkKKworeworICBjZmNkYXRhIGxjZmM7CisKKyAgbGNmYy5hcHBlbmQgPSBhcHBlbmQ7CisgIGxjZmMuYXJnID0gYXJnOworICBsY2ZjLmNjc2lkID0gY2NzaWQ7CisgIHJldHVybiBjdXJsX2Zvcm1nZXQoZm9ybSwgKHZvaWQgKikgJmxjZmMsIEN1cmxfZm9ybWdldF9jYWxsYmFja19jY3NpZCk7Cit9CisKKworQ1VSTGNvZGUKK2N1cmxfZWFzeV9zZXRvcHRfY2NzaWQoQ1VSTCAqIGN1cmwsIENVUkxvcHRpb24gdGFnLCAuLi4pCisKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0OworICB2YV9saXN0IGFyZzsKKyAgc3RydWN0IFNlc3Npb25IYW5kbGUgKiBkYXRhOworICBjaGFyICogczsKKyAgY2hhciAqIGNwOworICB1bnNpZ25lZCBpbnQgY2NzaWQ7CisgIHNpemVfdCBsZW47CisgIGN1cmxfb2ZmX3QgcGZzaXplOworICBzdGF0aWMgY2hhciB0ZXN0d2FybiA9IDE7CisKKyAgLyogV2FybnMgaWYgdGhpcyBwcm9jZWR1cmUgaGFzIG5vdCBiZWVuIHVwZGF0ZWQgd2hlbiB0aGUgZHVwc3RyaW5nIGVudW0KKyAgICAgY2hhbmdlcy4KKyAgICAgV2UgKHRyeSB0bykgZG8gaXQgb25seSBvbmNlOiB0aGVyZSBpcyBubyBuZWVkIHRvIGlzc3VlIHNldmVyYWwgdGltZXMKKyAgICAgdGhlIHNhbWUgbWVzc2FnZTsgYnV0IHNpbmNlIHRocmVhZHNhZmVuZXNzIGlzIG5vdCBoYW5kbGVkIGhlcmUsCisgICAgIHRoaXMgbWF5IG9jY3VyIChhbmQgd2UgZG9uJ3QgY2FyZSEpLiAqLworCisgIGlmICh0ZXN0d2FybikgeworICAgIHRlc3R3YXJuID0gMDsKKworI2lmZGVmIFVTRV9UTFNfU1JQCisgICAgaWYgKChpbnQpIFNUUklOR19MQVNUICE9IChpbnQpIFNUUklOR19UTFNBVVRIX1BBU1NXT1JEICsgMSkKKyNlbHNlCisgICAgaWYgKChpbnQpIFNUUklOR19MQVNUICE9IChpbnQpIFNUUklOR19NQUlMX0ZST00gKyAxKQorI2VuZGlmCisgICAgICBjdXJsX21mcHJpbnRmKHN0ZGVyciwKKyAgICAgICAiKioqIFdBUk5JTkc6IGN1cmxfZWFzeV9zZXRvcHRfY2NzaWQoKSBzaG91bGQgYmUgcmV3b3JrZWQgKioqXG4iKTsKKyAgICB9CisKKyAgZGF0YSA9IChzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqKSBjdXJsOworICB2YV9zdGFydChhcmcsIHRhZyk7CisKKyAgc3dpdGNoICh0YWcpIHsKKworICBjYXNlIENVUkxPUFRfQ0FJTkZPOgorICBjYXNlIENVUkxPUFRfQ0FQQVRIOgorICBjYXNlIENVUkxPUFRfQ09PS0lFOgorICBjYXNlIENVUkxPUFRfQ09PS0lFRklMRToKKyAgY2FzZSBDVVJMT1BUX0NPT0tJRUpBUjoKKyAgY2FzZSBDVVJMT1BUX0NPT0tJRUxJU1Q6CisgIGNhc2UgQ1VSTE9QVF9DUkxGSUxFOgorICBjYXNlIENVUkxPUFRfQ1VTVE9NUkVRVUVTVDoKKyAgY2FzZSBDVVJMT1BUX0VHRFNPQ0tFVDoKKyAgY2FzZSBDVVJMT1BUX0VOQ09ESU5HOgorICBjYXNlIENVUkxPUFRfRlRQX0FDQ09VTlQ6CisgIGNhc2UgQ1VSTE9QVF9GVFBfQUxURVJOQVRJVkVfVE9fVVNFUjoKKyAgY2FzZSBDVVJMT1BUX0ZUUFBPUlQ6CisgIGNhc2UgQ1VSTE9QVF9JTlRFUkZBQ0U6CisgIGNhc2UgQ1VSTE9QVF9JU1NVRVJDRVJUOgorICBjYXNlIENVUkxPUFRfS0VZUEFTU1dEOgorICBjYXNlIENVUkxPUFRfS1JCTEVWRUw6CisgIGNhc2UgQ1VSTE9QVF9NQUlMX0ZST006CisgIGNhc2UgQ1VSTE9QVF9ORVRSQ19GSUxFOgorICBjYXNlIENVUkxPUFRfTk9QUk9YWToKKyAgY2FzZSBDVVJMT1BUX1BBU1NXT1JEOgorICBjYXNlIENVUkxPUFRfUFJPWFk6CisgIGNhc2UgQ1VSTE9QVF9QUk9YWVBBU1NXT1JEOgorICBjYXNlIENVUkxPUFRfUFJPWFlVU0VSTkFNRToKKyAgY2FzZSBDVVJMT1BUX1BST1hZVVNFUlBXRDoKKyAgY2FzZSBDVVJMT1BUX1JBTkRPTV9GSUxFOgorICBjYXNlIENVUkxPUFRfUkFOR0U6CisgIGNhc2UgQ1VSTE9QVF9SRUZFUkVSOgorICBjYXNlIENVUkxPUFRfUlRTUF9TRVNTSU9OX0lEOgorICBjYXNlIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJOgorICBjYXNlIENVUkxPUFRfUlRTUF9UUkFOU1BPUlQ6CisgIGNhc2UgQ1VSTE9QVF9TT0NLUzVfR1NTQVBJX1NFUlZJQ0U6CisgIGNhc2UgQ1VSTE9QVF9TU0hfSE9TVF9QVUJMSUNfS0VZX01ENToKKyAgY2FzZSBDVVJMT1BUX1NTSF9LTk9XTkhPU1RTOgorICBjYXNlIENVUkxPUFRfU1NIX1BSSVZBVEVfS0VZRklMRToKKyAgY2FzZSBDVVJMT1BUX1NTSF9QVUJMSUNfS0VZRklMRToKKyAgY2FzZSBDVVJMT1BUX1NTTENFUlQ6CisgIGNhc2UgQ1VSTE9QVF9TU0xDRVJUVFlQRToKKyAgY2FzZSBDVVJMT1BUX1NTTF9DSVBIRVJfTElTVDoKKyAgY2FzZSBDVVJMT1BUX1NTTEVOR0lORToKKyAgY2FzZSBDVVJMT1BUX1NTTEtFWToKKyAgY2FzZSBDVVJMT1BUX1NTTEtFWVRZUEU6CisgIGNhc2UgQ1VSTE9QVF9UTFNBVVRIX1BBU1NXT1JEOgorICBjYXNlIENVUkxPUFRfVExTQVVUSF9UWVBFOgorICBjYXNlIENVUkxPUFRfVExTQVVUSF9VU0VSTkFNRToKKyAgY2FzZSBDVVJMT1BUX1VSTDoKKyAgY2FzZSBDVVJMT1BUX1VTRVJBR0VOVDoKKyAgY2FzZSBDVVJMT1BUX1VTRVJOQU1FOgorICBjYXNlIENVUkxPUFRfVVNFUlBXRDoKKyAgICBzID0gdmFfYXJnKGFyZywgY2hhciAqKTsKKyAgICBjY3NpZCA9IHZhX2FyZyhhcmcsIHVuc2lnbmVkIGludCk7CisKKyAgICBpZiAocykgeworICAgICAgcyA9IGR5bmNvbnZlcnQoQVNDSUlfQ0NTSUQsIHMsIC0xLCBjY3NpZCk7CisKKyAgICAgIGlmICghcykgeworICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgcmVzdWx0ID0gY3VybF9lYXN5X3NldG9wdChjdXJsLCB0YWcsIHMpOworCisgICAgaWYgKHMpCisgICAgICBmcmVlKHMpOworCisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0NPUFlQT1NURklFTERTOgorICAgIC8qIFNwZWNpYWwgY2FzZTogYnl0ZSBjb3VudCBtYXkgaGF2ZSBiZWVuIGdpdmVuIGJ5IENVUkxPUFRfUE9TVEZJRUxEU0laRQorICAgICAgIHByaW9yIHRvIHRoaXMgY2FsbC4gSW4gdGhpcyBjYXNlLCBjb252ZXJ0IHRoZSBnaXZlbiBieXRlIGNvdW50IGFuZAorICAgICAgIHJlcGxhY2UgdGhlIGxlbmd0aCBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlcnNpb24gcmVzdWx0LiAqLworICAgIHMgPSB2YV9hcmcoYXJnLCBjaGFyICopOworICAgIGNjc2lkID0gdmFfYXJnKGFyZywgdW5zaWduZWQgaW50KTsKKworICAgIHBmc2l6ZSA9IGRhdGEtPnNldC5wb3N0ZmllbGRzaXplOworCisgICAgaWYgKCFzIHx8ICFwZnNpemUgfHwgY2NzaWQgPT0gTk9DT05WX0NDU0lEIHx8IGNjc2lkID09IEFTQ0lJX0NDU0lEKSB7CisgICAgICByZXN1bHQgPSBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ09QWVBPU1RGSUVMRFMsIHMpOworICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICBpZiAocGZzaXplID09IC0xKSB7CisgICAgICAvKiBEYXRhIGlzIG51bGwtdGVybWluYXRlZC4gKi8KKyAgICAgIHMgPSBkeW5jb252ZXJ0KEFTQ0lJX0NDU0lELCBzLCAtMSwgY2NzaWQpOworCisgICAgICBpZiAoIXMpIHsKKyAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIERhdGEgbGVuZ3RoIHNwZWNpZmllZC4gKi8KKworICAgICAgaWYgKHBmc2l6ZSA8IDAgfHwgcGZzaXplID4gU0laRV9NQVgpIHsKKyAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgbGVuID0gcGZzaXplOworICAgICAgcGZzaXplID0gbGVuICogTUFYX0NPTlZfRVhQQU5TSU9OOworCisgICAgICBpZiAocGZzaXplID4gU0laRV9NQVgpCisgICAgICAgIHBmc2l6ZSA9IFNJWkVfTUFYOworCisgICAgICBjcCA9IG1hbGxvYyhwZnNpemUpOworCisgICAgICBpZiAoIWNwKSB7CisgICAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIHBmc2l6ZSA9IGNvbnZlcnQoY3AsIHBmc2l6ZSwgQVNDSUlfQ0NTSUQsIHMsIGxlbiwgY2NzaWQpOworCisgICAgICBpZiAocGZzaXplIDwgMCkgeworICAgICAgICBmcmVlKGNwKTsKKyAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgZGF0YS0+c2V0LnBvc3RmaWVsZHNpemUgPSBwZnNpemU7ICAgICAgICAgLyogUmVwbGFjZSBkYXRhIHNpemUuICovCisgICAgICBzID0gY3A7CisgICAgICB9CisKKyAgICByZXN1bHQgPSBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9TVEZJRUxEUywgcyk7CisgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ09QWVBPU1RGSUVMRFNdID0gczsgICAvKiBHaXZlIHRvIGxpYnJhcnkuICovCisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX0VSUk9SQlVGRkVSOiAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaXMgYW4gb3V0cHV0IGJ1ZmZlci4gKi8KKyAgZGVmYXVsdDoKKyAgICByZXN1bHQgPSBDdXJsX3NldG9wdChkYXRhLCB0YWcsIGFyZyk7CisgICAgYnJlYWs7CisgICAgfQorCisgIHZhX2VuZChhcmcpOworICByZXR1cm4gcmVzdWx0OworfQorCisKK2NoYXIgKgorY3VybF9mb3JtX2xvbmdfdmFsdWUobG9uZyB2YWx1ZSkKKworeworICAvKiBJTEUvUlBHIGNhbm5vdCBjYXN0IGFuIGludGVnZXIgdG8gYSBwb2ludGVyLiBUaGlzIHByb2NlZHVyZSBkb2VzIGl0LiAqLworCisgIHJldHVybiAoY2hhciAqKSB2YWx1ZTsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL09TNDAwL2Njc2lkY3VybC5oIGIvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvY2NzaWRjdXJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzNDBjOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL09TNDAwL2Njc2lkY3VybC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0NVUkxfQ0NTSURDVVJMX0gKKyNkZWZpbmUgX19DVVJMX0NDU0lEQ1VSTF9ICisKKyNpbmNsdWRlICJjdXJsLmgiCisjaW5jbHVkZSAiZWFzeS5oIgorI2luY2x1ZGUgIm11bHRpLmgiCisKKworQ1VSTF9FWFRFUk4gY2hhciAqIGN1cmxfdmVyc2lvbl9jY3NpZCh1bnNpZ25lZCBpbnQgY2NzaWQpOworQ1VSTF9FWFRFUk4gY2hhciAqIGN1cmxfZWFzeV9lc2NhcGVfY2NzaWQoQ1VSTCAqIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBzdHJpbmcsIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2Njc2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRjY3NpZCk7CitDVVJMX0VYVEVSTiBjaGFyICogY3VybF9lYXN5X3VuZXNjYXBlX2Njc2lkKENVUkwgKiBoYW5kbGUsIGNvbnN0IGNoYXIgKiBzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsIGludCAqIG91dGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNjY3NpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRjY3NpZCk7CitDVVJMX0VYVEVSTiBzdHJ1Y3QgY3VybF9zbGlzdCAqIGN1cmxfc2xpc3RfYXBwZW5kX2Njc2lkKHN0cnVjdCBjdXJsX3NsaXN0ICogbHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNjc2lkKTsKK0NVUkxfRVhURVJOIHRpbWVfdCBjdXJsX2dldGRhdGVfY2NzaWQoY29uc3QgY2hhciAqIHAsIGNvbnN0IHRpbWVfdCAqIHVudXNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNjc2lkKTsKK0NVUkxfRVhURVJOIGN1cmxfdmVyc2lvbl9pbmZvX2RhdGEgKiBjdXJsX3ZlcnNpb25faW5mb19jY3NpZChDVVJMdmVyc2lvbiBzdGFtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY3NpZCk7CitDVVJMX0VYVEVSTiBjb25zdCBjaGFyICogY3VybF9lYXN5X3N0cmVycm9yX2Njc2lkKENVUkxjb2RlIGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2NzaWQpOworQ1VSTF9FWFRFUk4gY29uc3QgY2hhciAqIGN1cmxfc2hhcmVfc3RyZXJyb3JfY2NzaWQoQ1VSTFNIY29kZSBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjY3NpZCk7CitDVVJMX0VYVEVSTiBjb25zdCBjaGFyICogY3VybF9tdWx0aV9zdHJlcnJvcl9jY3NpZChDVVJMTWNvZGUgZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2NzaWQpOworQ1VSTF9FWFRFUk4gQ1VSTGNvZGUgY3VybF9lYXN5X2dldGluZm9fY2NzaWQoQ1VSTCAqIGN1cmwsIENVUkxJTkZPIGluZm8sIC4uLik7CitDVVJMX0VYVEVSTiBDVVJMRk9STWNvZGUgY3VybF9mb3JtYWRkX2Njc2lkKHN0cnVjdCBjdXJsX2h0dHBwb3N0ICogKiBodHRwcG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKiAqIGxhc3RfcG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKK0NVUkxfRVhURVJOIGNoYXIgKiBjdXJsX2Zvcm1fbG9uZ192YWx1ZShsb25nIHZhbHVlKTsKK0NVUkxfRVhURVJOIGludCBjdXJsX2Zvcm1nZXRfY2NzaWQoc3RydWN0IGN1cmxfaHR0cHBvc3QgKiBmb3JtLCB2b2lkICogYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2Zvcm1nZXRfY2FsbGJhY2sgYXBwZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2NzaWQpOworQ1VSTF9FWFRFUk4gQ1VSTGNvZGUgY3VybF9lYXN5X3NldG9wdF9jY3NpZChDVVJMICogY3VybCwgQ1VSTG9wdGlvbiB0YWcsIC4uLik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvY3VybC5pbmMuaW4gYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9jdXJsLmluYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzZjODNkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvY3VybC5pbmMuaW4KQEAgLTAsMCArMSwyMTAyIEBACisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgICAgICAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICAgICAgKgorICAgICAgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICAgICAgKgorICAgICAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICAgICAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgICAgICAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgICAgICAqCisgICAgICAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICAgICAgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAgICAgICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAgICAgICoKKyAgICAgICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GCisgICAgICAqIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgKgorICAgICAgKgorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICoKKyAgICAgIC9pZiBub3QgZGVmaW5lZChDVVJMX0NVUkxfSU5DXykKKyAgICAgIC9kZWZpbmUgQ1VSTF9DVVJMX0lOQ18KKyAgICAgICoKKyAgICAgICogICAgIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggQyBpbmNsdWRlIGZpbGVzLgorICAgICAgKgorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKgorICAgICBkIExJQkNVUkxfVkVSU0lPTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgICdATElCQ1VSTF9WRVJTSU9OQCcKKyAgICAgZCBMSUJDVVJMX1ZFUlNJT05fTUFKT1IuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBATElCQ1VSTF9WRVJTSU9OX01BSk9SQAorICAgICBkIExJQkNVUkxfVkVSU0lPTl9NSU5PUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIEBMSUJDVVJMX1ZFUlNJT05fTUlOT1JACisgICAgIGQgTElCQ1VSTF9WRVJTSU9OX1BBVENILi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgQExJQkNVUkxfVkVSU0lPTl9QQVRDSEAKKyAgICAgZCBMSUJDVVJMX1ZFUlNJT05fTlVNLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMEBMSUJDVVJMX1ZFUlNJT05fTlVNQCcKKyAgICAgZCBMSUJDVVJMX1RJTUVTVEFNUC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgICdATElCQ1VSTF9USU1FU1RBTVBAJworICAgICAgKgorICAgICBkIENVUkxfU09DS0VUX0JBRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIC0xCisgICAgIGQgQ1VSTF9TT0NLRVRfVElNRU9VVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIC0xCisgICAgICAqCisgICAgICAvaWYgbm90IGRlZmluZWQoQ1VSTF9NQVhfV1JJVEVfU0laRSkKKyAgICAgIC9kZWZpbmUgQ1VSTF9NQVhfV1JJVEVfU0laRQorICAgICBkIENVUkxfTUFYX1dSSVRFX1NJWkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxNjM4NAorICAgICAgL2VuZGlmCisgICAgICAqCisgICAgICAvaWYgbm90IGRlZmluZWQoQ1VSTF9NQVhfSFRUUF9IRUFERVIpCisgICAgICAvZGVmaW5lIENVUkxfTUFYX0hUVFBfSEVBREVSCisgICAgIGQgQ1VSTF9NQVhfSFRUUF9IRUFERVIuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDI0MDAKKyAgICAgIC9lbmRpZgorICAgICAgKgorICAgICBkIENVUkxJTkZPX1NUUklORy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAxMDAwMDAnCisgICAgIGQgQ1VSTElORk9fTE9ORyAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDIwMDAwMCcKKyAgICAgZCBDVVJMSU5GT19ET1VCTEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMzAwMDAwJworICAgICBkIENVUkxJTkZPX1NMSVNUICBjICAgICAgICAgICAgICAgICAgIFgnMDA0MDAwMDAnCisgICAgIGQgQ1VSTElORk9fTUFTSyAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDBGRkZGRicKKyAgICAgZCBDVVJMSU5GT19UWVBFTUFTSy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDBGMDAwMDAnCisgICAgICAqCisgICAgIGQgQ1VSTF9HTE9CQUxfU1NMLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMScKKyAgICAgZCBDVVJMX0dMT0JBTF9XSU4zMi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMDInCisgICAgIGQgQ1VSTF9HTE9CQUxfQUxMLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMycKKyAgICAgZCBDVVJMX0dMT0JBTF9OT1RISU5HLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMCcKKyAgICAgZCBDVVJMX0dMT0JBTF9ERUZBVUxULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMycKKyAgICAgICoKKyAgICAgZCBDVVJMX1ZFUlNJT05fSVBWNi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMDEnCisgICAgIGQgQ1VSTF9WRVJTSU9OX0tFUkJFUk9TNC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMDInCisgICAgIGQgQ1VSTF9WRVJTSU9OX1NTTC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMDQnCisgICAgIGQgQ1VSTF9WRVJTSU9OX0xJQlouLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDA4JworICAgICBkIENVUkxfVkVSU0lPTl9OVExNLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAxMCcKKyAgICAgZCBDVVJMX1ZFUlNJT05fR1NTTkVHT1RJQVRFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAyMCcKKyAgICAgZCBDVVJMX1ZFUlNJT05fREVCVUcuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDQwJworICAgICBkIENVUkxfVkVSU0lPTl9BU1lOQ0hETlMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDgwJworICAgICBkIENVUkxfVkVSU0lPTl9TUE5FR08uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMTAwJworICAgICBkIENVUkxfVkVSU0lPTl9MQVJHRUZJTEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMjAwJworICAgICBkIENVUkxfVkVSU0lPTl9JRE4uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwNDAwJworICAgICBkIENVUkxfVkVSU0lPTl9TU1BJLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDgwMCcKKyAgICAgZCBDVVJMX1ZFUlNJT05fQ09OVi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDEwMDAnCisgICAgIGQgQ1VSTF9WRVJTSU9OX0NVUkxERUJVRy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDIwMDAnCisgICAgIGQgQ1VSTF9WRVJTSU9OX1RMU0FVVEhfU1JQLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwNDAwMCcKKyAgICAgZCBDVVJMX1ZFUlNJT05fTlRMTV9XQi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDgwMDAnCisgICAgICAqCisgICAgIGQgSFRUUFBPU1RfRklMRU5BTUUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDAxJworICAgICBkIEhUVFBQT1NUX1JFQURGSUxFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMicKKyAgICAgZCBIVFRQUE9TVF9QVFJOQU1FLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwNCcKKyAgICAgZCBIVFRQUE9TVF9QVFJDT05URU5UUy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMDgnCisgICAgIGQgSFRUUFBPU1RfQlVGRkVSLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAxMCcKKyAgICAgZCBIVFRQUE9TVF9QVFJCVUZGRVIuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDIwJworICAgICBkIEhUVFBQT1NUX0NBTExCQUNLLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDA0MCcKKyAgICAgICoKKyAgICAgZCBDVVJMX1NFRUtGVU5DX09LLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMAorICAgICBkIENVUkxfU0VFS0ZVTkNfRkFJTC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICAgKgorICAgICBkIENVUkxfUkVBREZVTkNfQUJPUlQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzEwMDAwMDAwJworICAgICBkIENVUkxfUkVBREZVTkNfUEFVU0UuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzEwMDAwMDAxJworICAgICAgKgorICAgICBkIENVUkxfV1JJVEVGVU5DX1BBVVNFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcxMDAwMDAwMScKKyAgICAgICoKKyAgICAgZCBDVVJMQVVUSF9OT05FICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDAwJworICAgICBkIENVUkxBVVRIX0JBU0lDICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMDEnCisgICAgIGQgQ1VSTEFVVEhfRElHRVNULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMicKKyAgICAgZCBDVVJMQVVUSF9HU1NORUdPVElBVEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDA0JworICAgICBkIENVUkxBVVRIX05UTE0gICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMDgnCisgICAgIGQgQ1VSTEFVVEhfRElHRVNUX0lFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAxMCcKKyAgICAgZCBDVVJMQVVUSF9OVExNX1dCLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAyMCcKKyAgICAgZCBDVVJMQVVUSF9PTkxZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCc4MDAwMDAwMCcKKyAgICAgZCBDVVJMQVVUSF9BTlkgICAgYyAgICAgICAgICAgICAgICAgICBYJzdGRkZGRkVGJworICAgICBkIENVUkxBVVRIX0FOWVNBRkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzdGRkZGRkVFJworICAgICAgKgorICAgICBkIENVUkxTU0hfQVVUSF9BTlkuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzdGRkZGRkZGJworICAgICBkIENVUkxTU0hfQVVUSF9OT05FLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMCcKKyAgICAgZCBDVVJMU1NIX0FVVEhfUFVCTElDS0VZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMScKKyAgICAgZCBDVVJMU1NIX0FVVEhfUEFTU1dPUkQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDAyJworICAgICBkIENVUkxTU0hfQVVUSF9IT1NULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwNCcKKyAgICAgZCBDVVJMU1NIX0FVVEhfS0VZQk9BUkQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDA4JworICAgICBkIENVUkxTU0hfQVVUSF9ERUZBVUxULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCc3RkZGRkZGRicgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxTU0hfQVVUSF9BTlkKKyAgICAgICoKKyAgICAgZCBDVVJMR1NTQVBJX0RFTEVHQVRJT05fTk9ORS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAKKyAgICAgZCBDVVJMR1NTQVBJX0RFTEVHQVRJT05fUE9MSUNZX0ZMQUcuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDAxJworICAgICBkIENVUkxHU1NBUElfREVMRUdBVElPTl9GTEFHLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMicKKyAgICAgICoKKyAgICAgZCBDVVJMX0VSUk9SX1NJWkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyNTYKKyAgICAgICoKKyAgICAgZCBDVVJMT1BUVFlQRV9MT05HLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMAorICAgICBkIENVUkxPUFRUWVBFX09CSkVDVFBPSU5ULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwMDAKKyAgICAgZCBDVVJMT1BUVFlQRV9GVU5DVElPTlBPSU5ULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMjAwMDAKKyAgICAgZCBDVVJMT1BUVFlQRV9PRkZfVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDMwMDAwCisgICAgICAqCisgICAgIGQgQ1VSTF9JUFJFU09MVkVfV0hBVEVWRVIuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgQ1VSTF9JUFJFU09MVkVfVjQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgQ1VSTF9JUFJFU09MVkVfVjYuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyCisgICAgICAqCisgICAgIGQgQ1VSTF9IVFRQX1ZFUlNJT05fTk9ORS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAKKyAgICAgZCBDVVJMX0hUVFBfVkVSU0lPTl8xXzAuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgQ1VSTF9IVFRQX1ZFUlNJT05fMV8xLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICAgKgorICAgICBkIENVUkxfTkVUUkNfSUdOT1JFRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAKKyAgICAgZCBDVVJMX05FVFJDX09QVElPTkFMLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMQorICAgICBkIENVUkxfTkVUUkNfUkVRVUlSRUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyCisgICAgICAqCisgICAgIGQgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMQorICAgICBkIENVUkxfU1NMVkVSU0lPTl9TU0x2Mi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIKKyAgICAgZCBDVVJMX1NTTFZFUlNJT05fU1NMdjMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzCisgICAgICAqCisgICAgIGQgQ1VSTF9UTFNBVVRIX05PTkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgQ1VSTF9UTFNBVVRIX1NSUC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgICoKKyAgICAgZCBDVVJMX1JFRElSX0dFVF9BTEwuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgQ1VSTF9SRURJUl9QT1NUXzMwMS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCBDVVJMX1JFRElSX1BPU1RfMzAyLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICBkIENVUkxfUkVESVJfUE9TVF9BTEwuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzCisgICAgICAqCisgICAgIGQgQ1VSTF9QT0xMX05PTkUgIGMgICAgICAgICAgICAgICAgICAgMAorICAgICBkIENVUkxfUE9MTF9JTiAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCBDVVJMX1BPTExfT1VUICAgYyAgICAgICAgICAgICAgICAgICAyCisgICAgIGQgQ1VSTF9QT0xMX0lOT1VULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMworICAgICBkIENVUkxfUE9MTF9SRU1PVkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0CisgICAgICAqCisgICAgIGQgQ1VSTF9DU0VMRUNUX0lOLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMScKKyAgICAgZCBDVVJMX0NTRUxFQ1RfT1VULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMicKKyAgICAgZCBDVVJMX0NTRUxFQ1RfRVJSLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwNCcKKyAgICAgICoKKyAgICAgZCBDVVJMUEFVU0VfUkVDViAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDAxJworICAgICBkIENVUkxQQVVTRV9SRUNWX0NPTlQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDAwJworICAgICBkIENVUkxQQVVTRV9TRU5EICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMDQnCisgICAgIGQgQ1VSTFBBVVNFX1NFTkRfQ09OVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMDAnCisgICAgIGQgQ1VSTFBBVVNFX0FMTCAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwNScKKyAgICAgZCBDVVJMUEFVU0VfQ09OVCAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDAwJworICAgICAgKgorICAgICBkIENVUkxJTkZPRkxBR19LTk9XTl9GSUxFTkFNRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMDEnCisgICAgIGQgQ1VSTElORk9GTEFHX0tOT1dOX0ZJTEVUWVBFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMicKKyAgICAgZCBDVVJMSU5GT0ZMQUdfS05PV05fVElNRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMDQnCisgICAgIGQgQ1VSTElORk9GTEFHX0tOT1dOX1BFUk0uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDA4JworICAgICBkIENVUkxJTkZPRkxBR19LTk9XTl9VSUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDEwJworICAgICBkIENVUkxJTkZPRkxBR19LTk9XTl9HSUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMDIwJworICAgICBkIENVUkxJTkZPRkxBR19LTk9XTl9TSVpFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDA0MCcKKyAgICAgZCBDVVJMSU5GT0ZMQUdfS05PV05fSExJTktDT1VOVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwODAnCisgICAgICAqCisgICAgIGQgQ1VSTF9DSFVOS19CR05fRlVOQ19PSy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAKKyAgICAgZCBDVVJMX0NIVU5LX0JHTl9GVU5DX0ZBSUwuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgQ1VSTF9DSFVOS19CR05fRlVOQ19TS0lQLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICAgKgorICAgICBkIENVUkxfQ0hVTktfRU5EX0ZVTkNfT0suLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgQ1VSTF9DSFVOS19FTkRfRlVOQ19GQUlMLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMQorICAgICAgKgorICAgICBkIENVUkxfRk5NQVRDSEZVTkNfTUFUQ0guLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgQ1VSTF9GTk1BVENIRlVOQ19OT01BVENILi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMQorICAgICBkIENVUkxfRk5NQVRDSEZVTkNfRkFJTC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIKKyAgICAgICoKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlcworICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICoKKyAgICAgZCBjdXJsX3NvY2tldF90ICAgcyAgICAgICAgICAgICAxMGkgMCBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpCisgICAgICAqCisgICAgIGQgY3VybF9vZmZfdCAgICAgIHMgICAgICAgICAgICAgMjBpIDAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKQorICAgICAgKgorICAgICBkIENVUkxjb2RlICAgICAgICBzICAgICAgICAgICAgIDEwaSAwIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgICAgICAgICAgICAgICBFbnVtCisgICAgIGQgIENVUkxFX09LICAgICAgIGMgICAgICAgICAgICAgICAgICAgMAorICAgICBkICBDVVJMRV9VTlNVUFBPUlRFRF9QUk9UT0NPTC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCAgQ1VSTEVfRkFJTEVEX0lOSVQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyCisgICAgIGQgIENVUkxFX1VSTF9NQUxGT1JNQVQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzCisgICAgIGQgIENVUkxFX05PVF9CVUlMVF9JTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDQKKyAgICAgZCAgQ1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNQorICAgICBkICBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDYKKyAgICAgZCAgQ1VSTEVfQ09VTEROVF9DT05ORUNULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNworICAgICBkICBDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgOAorICAgICBkICBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDkKKyAgICAgZCAgQ1VSTEVfT0JTT0xFVEUxMC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwCisgICAgIGQgIENVUkxFX0ZUUF9XRUlSRF9QQVNTX1JFUExZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTEKKyAgICAgZCAgQ1VSTEVfT0JTT0xFVEUxMi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEyCisgICAgIGQgIENVUkxFX0ZUUF9XRUlSRF9QQVNWX1JFUExZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTMKKyAgICAgZCAgQ1VSTEVfRlRQX1dFSVJEXzIyN19GT1JNQVQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxNAorICAgICBkICBDVVJMRV9GVFBfQ0FOVF9HRVRfSE9TVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDE1CisgICAgIGQgIENVUkxFX09CU09MRVRFMTYuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxNgorICAgICBkICBDVVJMRV9GVFBfQ09VTEROVF9TRVRfVFlQRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDE3CisgICAgIGQgIENVUkxFX1BBUlRJQUxfRklMRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDE4CisgICAgIGQgIENVUkxFX0ZUUF9DT1VMRE5UX1JFVFJfRklMRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDE5CisgICAgIGQgIENVUkxFX09CU09MRVRFMjAuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMAorICAgICBkICBDVVJMRV9RVU9URV9FUlJPUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIxCisgICAgIGQgIENVUkxFX0hUVFBfUkVUVVJORURfRVJST1IuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMgorICAgICBkICBDVVJMRV9XUklURV9FUlJPUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIzCisgICAgIGQgIENVUkxFX09CU09MRVRFMjQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyNAorICAgICBkICBDVVJMRV9VUExPQURfRkFJTEVELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMjUKKyAgICAgZCAgQ1VSTEVfUkVBRF9FUlJPUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDI2CisgICAgIGQgIENVUkxFX09VVF9PRl9NRU1PUlkuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyNworICAgICBkICBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyOAorICAgICBkICBDVVJMRV9PQlNPTEVURTI5Li4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMjkKKyAgICAgZCAgQ1VSTEVfRlRQX1BPUlRfRkFJTEVELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMzAKKyAgICAgZCAgQ1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzMQorICAgICBkICBDVVJMRV9PQlNPTEVURTMyLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMzIKKyAgICAgZCAgQ1VSTEVfUkFOR0VfRVJST1IuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzMworICAgICBkICBDVVJMRV9IVFRQX1BPU1RfRVJST1IuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzNAorICAgICBkICBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDM1CisgICAgIGQgIENVUkxFX0JBRF9ET1dOTE9BRF9SRVNVTUUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzNgorICAgICBkICBDVVJMRV9GSUxFX0NPVUxETlRfUkVBRF9GSUxFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMzcKKyAgICAgZCAgQ1VSTEVfTERBUF9DQU5OT1RfQklORC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDM4CisgICAgIGQgIENVUkxFX0xEQVBfU0VBUkNIX0ZBSUxFRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDM5CisgICAgIGQgIENVUkxFX09CU09MRVRFNDAuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0MAorICAgICBkICBDVVJMRV9GVU5DVElPTl9OT1RfRk9VTkQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0MQorICAgICBkICBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNDIKKyAgICAgZCAgQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5ULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNDMKKyAgICAgZCAgQ1VSTEVfT0JTT0xFVEU0NC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDQ0CisgICAgIGQgIENVUkxFX0lOVEVSRkFDRV9GQUlMRUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0NQorICAgICBkICBDVVJMRV9PQlNPTEVURTQ2Li4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNDYKKyAgICAgZCAgQ1VSTEVfVE9PX01BTllfUkVESVJFQ1RTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNDcKKyAgICAgZCAgQ1VSTEVfVU5LTk9XTl9PUFRJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0OAorICAgICBkICBDVVJMRV9URUxORVRfT1BUSU9OX1NZTlRBWC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDQ5CisgICAgIGQgIENVUkxFX09CU09MRVRFNTAuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA1MAorICAgICBkICBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA1MQorICAgICBkICBDVVJMRV9HT1RfTk9USElORy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDUyCisgICAgIGQgIENVUkxFX1NTTF9FTkdJTkVfTk9URk9VTkQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA1MworICAgICBkICBDVVJMRV9TU0xfRU5HSU5FX1NFVEZBSUxFRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDU0CisgICAgIGQgIENVUkxFX1NFTkRfRVJST1IuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA1NQorICAgICBkICBDVVJMRV9SRUNWX0VSUk9SLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNTYKKyAgICAgZCAgQ1VSTEVfT0JTT0xFVEU1Ny4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDU3CisgICAgIGQgIENVUkxFX1NTTF9DRVJUUFJPQkxFTS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDU4CisgICAgIGQgIENVUkxFX1NTTF9DSVBIRVIuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA1OQorICAgICBkICBDVVJMRV9TU0xfQ0FDRVJULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNjAKKyAgICAgZCAgQ1VSTEVfQkFEX0NPTlRFTlRfRU5DT0RJTkcuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA2MQorICAgICBkICBDVVJMRV9MREFQX0lOVkFMSURfVVJMLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNjIKKyAgICAgZCAgQ1VSTEVfRklMRVNJWkVfRVhDRUVERUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA2MworICAgICBkICBDVVJMRV9VU0VfU1NMX0ZBSUxFRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDY0CisgICAgIGQgIENVUkxFX1NFTkRfRkFJTF9SRVdJTkQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA2NQorICAgICBkICBDVVJMRV9TU0xfRU5HSU5FX0lOSVRGQUlMRUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA2NgorICAgICBkICBDVVJMRV9MT0dJTl9ERU5JRUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA2NworICAgICBkICBDVVJMRV9URlRQX05PVEZPVU5ELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNjgKKyAgICAgZCAgQ1VSTEVfVEZUUF9QRVJNLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNjkKKyAgICAgZCAgQ1VSTEVfUkVNT1RFX0RJU0tfRlVMTC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDcwCisgICAgIGQgIENVUkxFX1RGVFBfSUxMRUdBTC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDcxCisgICAgIGQgIENVUkxFX1RGVFBfVU5LTk9XTklELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNzIKKyAgICAgZCAgQ1VSTEVfUkVNT1RFX0ZJTEVfRVhJU1RTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNzMKKyAgICAgZCAgQ1VSTEVfVEZUUF9OT1NVQ0hVU0VSLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNzQKKyAgICAgZCAgQ1VSTEVfQ09OVl9GQUlMRUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA3NQorICAgICBkICBDVVJMRV9DT05WX1JFUUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA3NgorICAgICBkICBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA3NworICAgICBkICBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA3OAorICAgICBkICBDVVJMRV9TU0guLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA3OQorICAgICBkICBDVVJMRV9TU0xfU0hVVERPV05fRkFJTEVELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgODAKKyAgICAgZCAgQ1VSTEVfQUdBSU4uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA4MQorICAgICBkICBDVVJMRV9TU0xfQ1JMX0JBREZJTEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA4MgorICAgICBkICBDVVJMRV9TU0xfSVNTVUVSX0VSUk9SLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgODMKKyAgICAgZCAgQ1VSTEVfRlRQX1BSRVRfRkFJTEVELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgODQKKyAgICAgZCAgQ1VSTEVfUlRTUF9DU0VRX0VSUk9SLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgODUKKyAgICAgZCAgQ1VSTEVfUlRTUF9TRVNTSU9OX0VSUk9SLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgODYKKyAgICAgZCAgQ1VSTEVfRlRQX0JBRF9GSUxFX0xJU1QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA4NworICAgICBkICBDVVJMRV9DSFVOS19GQUlMRUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA4OAorICAgICAgKgorICAgICAgL2lmIG5vdCBkZWZpbmVkKENVUkxfTk9fT0xESUVTKQorICAgICBkICBDVVJMRV9VUkxfTUFMRk9STUFUX1VTRVIuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0CisgICAgIGQgIENVUkxFX0ZUUF9BQ0NFU1NfREVOSUVELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgOQorICAgICBkICBDVVJMRV9GVFBfVVNFUl9QQVNTV09SRF9JTkNPUlJFQ1QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMAorICAgICBkICBDVVJMRV9GVFBfV0VJUkRfVVNFUl9SRVBMWS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEyCisgICAgIGQgIENVUkxFX0ZUUF9DQU5UX1JFQ09OTkVDVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDE2CisgICAgIGQgIENVUkxFX0ZUUF9DT1VMRE5UX1NFVF9CSU5BUlkuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxNworICAgICBkICBDVVJMRV9GVFBfUEFSVElBTF9GSUxFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTgKKyAgICAgZCAgQ1VSTEVfRlRQX1dSSVRFX0VSUk9SLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMjAKKyAgICAgZCAgQ1VSTEVfRlRQX1FVT1RFX0VSUk9SLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMjEKKyAgICAgZCAgQ1VSTEVfSFRUUF9OT1RfRk9VTkQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMgorICAgICBkICBDVVJMRV9NQUxGT1JNQVRfVVNFUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDI0CisgICAgIGQgIENVUkxFX0ZUUF9DT1VMRE5UX1NUT1JfRklMRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDI1CisgICAgIGQgIENVUkxFX09QRVJBVElPTl9USU1FT1VURUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyOAorICAgICBkICBDVVJMRV9GVFBfQ09VTEROVF9TRVRfQVNDSUkuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyOQorICAgICBkICBDVVJMRV9GVFBfQ09VTEROVF9HRVRfU0laRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDMyCisgICAgIGQgIENVUkxFX0hUVFBfUkFOR0VfRVJST1IuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzMworICAgICBkICBDVVJMRV9GVFBfQkFEX0RPV05MT0FEX1JFU1VNRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDM2CisgICAgIGQgIENVUkxFX0xJQlJBUllfTk9UX0ZPVU5ELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNDAKKyAgICAgZCAgQ1VSTEVfQkFEX0NBTExJTkdfT1JERVIuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0NAorICAgICBkICBDVVJMRV9IVFRQX1BPUlRfRkFJTEVELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNDUKKyAgICAgZCAgQ1VSTEVfQkFEX1BBU1NXT1JEX0VOVEVSRUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0NgorICAgICBkICBDVVJMRV9VTktOT1dOX1RFTE5FVF9PUFRJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0OAorICAgICBkICBDVVJMRV9PQlNPTEVURS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDUwCisgICAgIGQgIENVUkxFX1NTTF9QRUVSX0NFUlRJRklDQVRFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNTEKKyAgICAgZCAgQ1VSTEVfU0hBUkVfSU5fVVNFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNTcKKyAgICAgZCAgQ1VSTEVfRlRQX1NTTF9GQUlMRUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA2NAorICAgICBkICBDVVJMRV9URlRQX0RJU0tGVUxMLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNzAKKyAgICAgZCAgQ1VSTEVfVEZUUF9FWElTVFMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA3MworICAgICBkICBDVVJMRV9BTFJFQURZX0NPTVBMRVRFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgOTk5OTkKKyAgICAgIC9lbmRpZgorICAgICAgKgorICAgICBkIGN1cmxpb2VyciAgICAgICBzICAgICAgICAgICAgIDEwaSAwIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgICAgICAgICAgICAgICBFbnVtCisgICAgIGQgIENVUkxJT0VfT0sgICAgIGMgICAgICAgICAgICAgICAgICAgMAorICAgICBkICBDVVJMSU9FX1VOS05PV05DTUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgIENVUkxJT0VfRkFJTFJFU1RBUlQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyCisgICAgICAqCisgICAgIGQgY3VybGZpbGV0eXBlICAgIHMgICAgICAgICAgICAgMTBpIDAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSAgICAgICAgICAgICAgIEVudW0KKyAgICAgZCAgQ1VSTEZJTEVUWVBFX0ZJTEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgIENVUkxGSUxFVFlQRV9ESVJFQ1RPUlkuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgIENVUkxGSUxFVFlQRV9TWU1MSU5LLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICBkICBDVVJMRklMRVRZUEVfREVWSUNFX0JMT0NLLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMworICAgICBkICBDVVJMRklMRVRZUEVfREVWSUNFX0NIQVIuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0CisgICAgIGQgIENVUkxGSUxFVFlQRV9OQU1FRFBJUEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA1CisgICAgIGQgIENVUkxGSUxFVFlQRV9TT0NLRVQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA2CisgICAgIGQgIENVUkxGSUxFVFlQRV9ET09SLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNworICAgICAgKgorICAgICBkIGN1cmxpb2NtZCAgICAgICBzICAgICAgICAgICAgIDEwaSAwIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgICAgICAgICAgICAgICBFbnVtCisgICAgIGQgIENVUkxJT0NNRF9OT1AgIGMgICAgICAgICAgICAgICAgICAgMAorICAgICBkICBDVVJMSU9DTURfUkVTVEFSVFJFQUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgICAqCisgICAgIGQgY3VybF9pbmZvdHlwZSAgIHMgICAgICAgICAgICAgMTBpIDAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSAgICAgICAgICAgICAgIEVudW0KKyAgICAgZCAgQ1VSTElORk9fVEVYVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAKKyAgICAgZCAgQ1VSTElORk9fSEVBREVSX0lOLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMQorICAgICBkICBDVVJMSU5GT19IRUFERVJfT1VULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICBkICBDVVJMSU5GT19EQVRBX0lOLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMworICAgICBkICBDVVJMSU5GT19EQVRBX09VVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDQKKyAgICAgZCAgQ1VSTElORk9fU1NMX0RBVEFfSU4uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA1CisgICAgIGQgIENVUkxJTkZPX1NTTF9EQVRBX09VVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDYKKyAgICAgZCAgQ1VSTElORk9fRU5ELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNworICAgICAgKgorICAgICBkIGN1cmxfcHJveHl0eXBlICBzICAgICAgICAgICAgIDEwaSAwIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgICAgICAgICAgICAgICBFbnVtCisgICAgIGQgIENVUkxQUk9YWV9IVFRQLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMAorICAgICBkICBDVVJMUFJPWFlfSFRUUF8xXzAuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgIENVUkxQUk9YWV9TT0NLUzQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0CisgICAgIGQgIENVUkxQUk9YWV9TT0NLUzUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA1CisgICAgIGQgIENVUkxQUk9YWV9TT0NLUzRBLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNgorICAgICBkICBDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNworICAgICAgKgorICAgICBkIGN1cmxfa2hzdGF0ICAgICBzICAgICAgICAgICAgIDEwaSAwIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgICAgICAgICAgICAgICBFbnVtCisgICAgIGQgIENVUkxLSFNUQVRfRklORV9BRERfVE9fRklMRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAKKyAgICAgZCAgQ1VSTEtIU1RBVF9GSU5FLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMQorICAgICBkICBDVVJMS0hTVEFUX1JFSkVDVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIKKyAgICAgZCAgQ1VSTEtIU1RBVF9ERUZFUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDMKKyAgICAgZCAgQ1VSTEtIU1RBVF9MQVNULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNAorICAgICAgKgorICAgICBkIGN1cmxfa2htYXRjaCAgICBzICAgICAgICAgICAgIDEwaSAwIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgICAgICAgICAgICAgICBFbnVtCisgICAgIGQgIENVUkxLSE1BVENIX09LLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMAorICAgICBkICBDVVJMS0hNQVRDSF9NSVNNQVRDSC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCAgQ1VSTEtITUFUQ0hfTUlTU0lORy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIKKyAgICAgZCAgQ1VSTEtITUFUQ0hfTEFTVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDMKKyAgICAgICoKKyAgICAgZCBjdXJsX3VzZXNzbCAgICAgcyAgICAgICAgICAgICAxMGkgMCBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpICAgICAgICAgICAgICAgRW51bQorICAgICBkICBDVVJMVVNFU1NMX05PTkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgIENVUkxVU0VTU0xfVFJZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMQorICAgICBkICBDVVJMVVNFU1NMX0NPTlRST0wuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyCisgICAgIGQgIENVUkxVU0VTU0xfQUxMLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMworICAgICAgKgorICAgICAgL2lmIG5vdCBkZWZpbmVkKENVUkxfTk9fT0xESUVTKQorICAgICBkIGN1cmxfZnRwc3NsICAgICBzICAgICAgICAgICAgICAgICAgIGxpa2UoY3VybF91c2Vzc2wpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKQorICAgICBkICBDVVJMRlRQU1NMX05PTkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgIENVUkxGVFBTU0xfVFJZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMQorICAgICBkICBDVVJMRlRQU1NMX0NPTlRST0wuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyCisgICAgIGQgIENVUkxGVFBTU0xfQUxMLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMworICAgICAgL2VuZGlmCisgICAgICAqCisgICAgIGQgY3VybF9mdHBjY2MgICAgIHMgICAgICAgICAgICAgMTBpIDAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSAgICAgICAgICAgICAgIEVudW0KKyAgICAgZCAgQ1VSTEZUUFNTTF9DQ0NfTk9ORS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAKKyAgICAgZCAgQ1VSTEZUUFNTTF9DQ0NfUEFTU0lWRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCAgQ1VSTEZUUFNTTF9DQ0NfQUNUSVZFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICAgKgorICAgICBkIGN1cmxfZnRwYXV0aCAgICBzICAgICAgICAgICAgIDEwaSAwIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgICAgICAgICAgICAgICBFbnVtCisgICAgIGQgIENVUkxGVFBBVVRIX0RFRkFVTFQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgIENVUkxGVFBBVVRIX1NTTC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCAgQ1VSTEZUUEFVVEhfVExTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICAgKgorICAgICBkIGN1cmxfZnRwY3JlYXRlZGlyLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgMTBpIDAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSAgICAgICAgICAgICAgIEVudW0KKyAgICAgZCAgQ1VSTEZUUF9DUkVBVEVfRElSX05PTkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgIENVUkxGVFBfQ1JFQVRFX0RJUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCAgQ1VSTEZUUF9DUkVBVEVfRElSX1JFVFJZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICAgKgorICAgICBkIGN1cmxfZnRwbWV0aG9kICBzICAgICAgICAgICAgIDEwaSAwIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgICAgICAgICAgICAgICBFbnVtCisgICAgIGQgIENVUkxGVFBNRVRIT0RfREVGQVVMVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAKKyAgICAgZCAgQ1VSTEZUUE1FVEhPRF9NVUxUSUNXRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCAgQ1VSTEZUUE1FVEhPRF9OT0NXRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIKKyAgICAgZCAgQ1VSTEZUUE1FVEhPRF9TSU5HTEVDV0QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzCisgICAgICAqCisgICAgIGQgIENVUkxQUk9UT19IVFRQLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMScKKyAgICAgZCAgQ1VSTFBST1RPX0hUVFBTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwMicKKyAgICAgZCAgQ1VSTFBST1RPX0ZUUC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMDQnCisgICAgIGQgIENVUkxQUk9UT19GVFBTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAwOCcKKyAgICAgZCAgQ1VSTFBST1RPX1NDUC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwMTAnCisgICAgIGQgIENVUkxQUk9UT19TRlRQLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDAyMCcKKyAgICAgZCAgQ1VSTFBST1RPX1RFTE5FVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDAwNDAnCisgICAgIGQgIENVUkxQUk9UT19MREFQLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDA4MCcKKyAgICAgZCAgQ1VSTFBST1RPX0xEQVBTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDEwMCcKKyAgICAgZCAgQ1VSTFBST1RPX0RJQ1QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAwMjAwJworICAgICBkICBDVVJMUFJPVE9fRklMRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDA0MDAnCisgICAgIGQgIENVUkxQUk9UT19URlRQLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAwMDgwMCcKKyAgICAgZCAgQ1VSTFBST1RPX0lNQVAuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAxMDAwJworICAgICBkICBDVVJMUFJPVE9fSU1BUFMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDAyMDAwJworICAgICBkICBDVVJMUFJPVE9fUE9QMy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDQwMDAnCisgICAgIGQgIENVUkxQUk9UT19QT1AzUy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwMDgwMDAnCisgICAgIGQgIENVUkxQUk9UT19TTVRQLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAxMDAwMCcKKyAgICAgZCAgQ1VSTFBST1RPX1NNVFBTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDAyMDAwMCcKKyAgICAgZCAgQ1VSTFBST1RPX1JUU1AuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMDQwMDAwJworICAgICBkICBDVVJMUFJPVE9fUlRNUC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAwODAwMDAnCisgICAgIGQgIENVUkxQUk9UT19SVE1QVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAxMDAwMDAnCisgICAgIGQgIENVUkxQUk9UT19SVE1QVEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMjAwMDAwJworICAgICBkICBDVVJMUFJPVE9fUlRNUEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwNDAwMDAwJworICAgICBkICBDVVJMUFJPVE9fUlRNUFMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwODAwMDAwJworICAgICBkICBDVVJMUFJPVE9fUlRNUFRTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMTAwMDAwMCcKKyAgICAgZCAgQ1VSTFBST1RPX0dPUEhFUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDIwMDAwMDAnCisgICAgICAqCisgICAgIGQgQ1VSTG9wdGlvbiAgICAgIHMgICAgICAgICAgICAgMTBpIDAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSAgICAgICAgICAgICAgIEVudW0KKyAgICAgZCAgQ1VSTE9QVF9GSUxFICAgYyAgICAgICAgICAgICAgICAgICAxMDAwMQorICAgICBkICBDVVJMT1BUX1dSSVRFREFUQS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDAxCisgICAgIGQgIENVUkxPUFRfVVJMICAgIGMgICAgICAgICAgICAgICAgICAgMTAwMDIKKyAgICAgZCAgQ1VSTE9QVF9QT1JUICAgYyAgICAgICAgICAgICAgICAgICAwMDAwMworICAgICBkICBDVVJMT1BUX1BST1hZICBjICAgICAgICAgICAgICAgICAgIDEwMDA0CisgICAgIGQgIENVUkxPUFRfVVNFUlBXRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDA1CisgICAgIGQgIENVUkxPUFRfUFJPWFlVU0VSUFdELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwMDYKKyAgICAgZCAgQ1VSTE9QVF9SQU5HRSAgYyAgICAgICAgICAgICAgICAgICAxMDAwNworICAgICBkICBDVVJMT1BUX0lORklMRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDA5CisgICAgIGQgIENVUkxPUFRfUkVBRERBVEEuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDAwOQorICAgICBkICBDVVJMT1BUX0VSUk9SQlVGRkVSLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwMTAKKyAgICAgZCAgQ1VSTE9QVF9XUklURUZVTkNUSU9OLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMjAwMTEKKyAgICAgZCAgQ1VSTE9QVF9SRUFERlVOQ1RJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMDAxMgorICAgICBkICBDVVJMT1BUX1RJTUVPVVQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDAxMworICAgICBkICBDVVJMT1BUX0lORklMRVNJWkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDAxNAorICAgICBkICBDVVJMT1BUX1BPU1RGSUVMRFMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDAxNQorICAgICBkICBDVVJMT1BUX1JFRkVSRVIuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDAxNgorICAgICBkICBDVVJMT1BUX0ZUUFBPUlQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDAxNworICAgICBkICBDVVJMT1BUX1VTRVJBR0VOVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDE4CisgICAgIGQgIENVUkxPUFRfTE9XX1NQRUVEX0xJTUlULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwMTkKKyAgICAgZCAgQ1VSTE9QVF9MT1dfU1BFRURfVElNRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDIwCisgICAgIGQgIENVUkxPUFRfUkVTVU1FX0ZST00uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDAyMQorICAgICBkICBDVVJMT1BUX0NPT0tJRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDIyCisgICAgIGQgIENVUkxPUFRfSFRUUEhFQURFUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDIzCisgICAgIGQgIENVUkxPUFRfUlRTUEhFQURFUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDIzCisgICAgIGQgIENVUkxPUFRfSFRUUFBPU1QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDAyNAorICAgICBkICBDVVJMT1BUX1NTTENFUlQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDAyNQorICAgICBkICBDVVJMT1BUX0tFWVBBU1NXRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDI2CisgICAgIGQgIENVUkxPUFRfQ1JMRiAgIGMgICAgICAgICAgICAgICAgICAgMDAwMjcKKyAgICAgZCAgQ1VSTE9QVF9RVU9URSAgYyAgICAgICAgICAgICAgICAgICAxMDAyOAorICAgICBkICBDVVJMT1BUX1dSSVRFSEVBREVSLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwMjkKKyAgICAgZCAgQ1VSTE9QVF9IRUFERVJEQVRBLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwMjkKKyAgICAgZCAgQ1VSTE9QVF9DT09LSUVGSUxFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwMzEKKyAgICAgZCAgQ1VSTE9QVF9TU0xWRVJTSU9OLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwMzIKKyAgICAgZCAgQ1VSTE9QVF9USU1FQ09ORElUSU9OLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwMzMKKyAgICAgZCAgQ1VSTE9QVF9USU1FVkFMVUUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDAzNAorICAgICBkICBDVVJMT1BUX0NVU1RPTVJFUVVFU1QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDAzNgorICAgICBkICBDVVJMT1BUX1NUREVSUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDM3CisgICAgIGQgIENVUkxPUFRfUE9TVFFVT1RFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwMzkKKyAgICAgZCAgQ1VSTE9QVF9XUklURUlORk8uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDA0MAorICAgICBkICBDVVJMT1BUX1ZFUkJPU0UuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDA0MQorICAgICBkICBDVVJMT1BUX0hFQURFUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDQyCisgICAgIGQgIENVUkxPUFRfTk9QUk9HUkVTUy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDQzCisgICAgIGQgIENVUkxPUFRfTk9CT0RZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwNDQKKyAgICAgZCAgQ1VSTE9QVF9GQUlMT05FUlJPUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDQ1CisgICAgIGQgIENVUkxPUFRfVVBMT0FELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwNDYKKyAgICAgZCAgQ1VSTE9QVF9QT1NUICAgYyAgICAgICAgICAgICAgICAgICAwMDA0NworICAgICBkICBDVVJMT1BUX0RJUkxJU1RPTkxZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwNDgKKyAgICAgZCAgQ1VSTE9QVF9BUFBFTkQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDA1MAorICAgICBkICBDVVJMT1BUX05FVFJDICBjICAgICAgICAgICAgICAgICAgIDAwMDUxCisgICAgIGQgIENVUkxPUFRfRk9MTE9XTE9DQVRJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDA1MgorICAgICBkICBDVVJMT1BUX1RSQU5TRkVSVEVYVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDUzCisgICAgIGQgIENVUkxPUFRfUFVUICAgIGMgICAgICAgICAgICAgICAgICAgMDAwNTQKKyAgICAgZCAgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMjAwNTYKKyAgICAgZCAgQ1VSTE9QVF9QUk9HUkVTU0RBVEEuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDA1NworICAgICBkICBDVVJMT1BUX0FVVE9SRUZFUkVSLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwNTgKKyAgICAgZCAgQ1VSTE9QVF9QUk9YWVBPUlQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDA1OQorICAgICBkICBDVVJMT1BUX1BPU1RGSUVMRFNJWkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDA2MAorICAgICBkICBDVVJMT1BUX0hUVFBQUk9YWVRVTk5FTC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDYxCisgICAgIGQgIENVUkxPUFRfSU5URVJGQUNFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwNjIKKyAgICAgZCAgQ1VSTE9QVF9LUkJMRVZFTC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDYzCisgICAgIGQgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDA2NAorICAgICBkICBDVVJMT1BUX0NBSU5GTy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDY1CisgICAgIGQgIENVUkxPUFRfTUFYUkVESVJTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwNjgKKyAgICAgZCAgQ1VSTE9QVF9GSUxFVElNRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDY5CisgICAgIGQgIENVUkxPUFRfVEVMTkVUT1BUSU9OUy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDcwCisgICAgIGQgIENVUkxPUFRfTUFYQ09OTkVDVFMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDA3MQorICAgICBkICBDVVJMT1BUX0NMT1NFUE9MSUNZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwNzIKKyAgICAgZCAgQ1VSTE9QVF9GUkVTSF9DT05ORUNULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwNzQKKyAgICAgZCAgQ1VSTE9QVF9GT1JCSURfUkVVU0UuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDA3NQorICAgICBkICBDVVJMT1BUX1JBTkRPTV9GSUxFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwNzYKKyAgICAgZCAgQ1VSTE9QVF9FR0RTT0NLRVQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDA3NworICAgICBkICBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwNzgKKyAgICAgZCAgQ1VSTE9QVF9IRUFERVJGVU5DVElPTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIwMDc5CisgICAgIGQgIENVUkxPUFRfSFRUUEdFVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDgwCisgICAgIGQgIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDA4MQorICAgICBkICBDVVJMT1BUX0NPT0tJRUpBUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDgyCisgICAgIGQgIENVUkxPUFRfU1NMX0NJUEhFUl9MSVNULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwODMKKyAgICAgZCAgQ1VSTE9QVF9IVFRQX1ZFUlNJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDA4NAorICAgICBkICBDVVJMT1BUX0ZUUF9VU0VfRVBTVi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDg1CisgICAgIGQgIENVUkxPUFRfU1NMQ0VSVFRZUEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDA4NgorICAgICBkICBDVVJMT1BUX1NTTEtFWS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDg3CisgICAgIGQgIENVUkxPUFRfU1NMS0VZVFlQRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDg4CisgICAgIGQgIENVUkxPUFRfU1NMRU5HSU5FLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwODkKKyAgICAgZCAgQ1VSTE9QVF9TU0xFTkdJTkVfREVGQVVMVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDkwCisgICAgIGQgIENVUkxPUFRfRE5TX1VTRV9HTE9CQUxfQ0FDSEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDA5MQorICAgICBkICBDVVJMT1BUX0ROU19DQUNIRV9USU1FT1VULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwOTIKKyAgICAgZCAgQ1VSTE9QVF9QUkVRVU9URS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMDkzCisgICAgIGQgIENVUkxPUFRfREVCVUdGVU5DVElPTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIwMDk0CisgICAgIGQgIENVUkxPUFRfREVCVUdEQVRBLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwOTUKKyAgICAgZCAgQ1VSTE9QVF9DT09LSUVTRVNTSU9OLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwOTYKKyAgICAgZCAgQ1VSTE9QVF9DQVBBVEguLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDA5NworICAgICBkICBDVVJMT1BUX0JVRkZFUlNJWkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDA5OAorICAgICBkICBDVVJMT1BUX05PU0lHTkFMLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwOTkKKyAgICAgZCAgQ1VSTE9QVF9TSEFSRSAgYyAgICAgICAgICAgICAgICAgICAxMDEwMAorICAgICBkICBDVVJMT1BUX1BST1hZVFlQRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTAxCisgICAgIGQgIENVUkxPUFRfQUNDRVBUX0VOQ09ESU5HLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAxMDIKKyAgICAgZCAgQ1VSTE9QVF9QUklWQVRFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAxMDMKKyAgICAgZCAgQ1VSTE9QVF9IVFRQMjAwQUxJQVNFUy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMTA0CisgICAgIGQgIENVUkxPUFRfVU5SRVNUUklDVEVEX0FVVEguLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDEwNQorICAgICBkICBDVVJMT1BUX0ZUUF9VU0VfRVBSVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTA2CisgICAgIGQgIENVUkxPUFRfSFRUUEFVVEguLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDEwNworICAgICBkICBDVVJMT1BUX1NTTF9DVFhfRlVOQ1RJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMDEwOAorICAgICBkICBDVVJMT1BUX1NTTF9DVFhfREFUQS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMTA5CisgICAgIGQgIENVUkxPUFRfRlRQX0NSRUFURV9NSVNTSU5HX0RJUlMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDExMAorICAgICBkICBDVVJMT1BUX1BST1hZQVVUSC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTExCisgICAgIGQgIENVUkxPUFRfRlRQX1JFU1BPTlNFX1RJTUVPVVQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDExMgorICAgICBkICBDVVJMT1BUX0lQUkVTT0xWRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTEzCisgICAgIGQgIENVUkxPUFRfTUFYRklMRVNJWkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDExNAorICAgICBkICBDVVJMT1BUX0lORklMRVNJWkVfTEFSR0UuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzMDExNQorICAgICBkICBDVVJMT1BUX1JFU1VNRV9GUk9NX0xBUkdFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMzAxMTYKKyAgICAgZCAgQ1VSTE9QVF9NQVhGSUxFU0laRV9MQVJHRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDMwMTE3CisgICAgIGQgIENVUkxPUFRfTkVUUkNfRklMRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMTE4CisgICAgIGQgIENVUkxPUFRfVVNFX1NTTC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTE5CisgICAgIGQgIENVUkxPUFRfUE9TVEZJRUxEU0laRV9MQVJHRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDMwMTIwCisgICAgIGQgIENVUkxPUFRfVENQX05PREVMQVkuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDEyMQorICAgICBkICBDVVJMT1BUX0ZUUFNTTEFVVEguLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDEyOQorICAgICBkICBDVVJMT1BUX0lPQ1RMRlVOQ1RJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMDEzMAorICAgICBkICBDVVJMT1BUX0lPQ1RMREFUQS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMTMxCisgICAgIGQgIENVUkxPUFRfRlRQX0FDQ09VTlQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDEzNAorICAgICBkICBDVVJMT1BUX0NPT0tJRUxJU1QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDEzNQorICAgICBkICBDVVJMT1BUX0lHTk9SRV9DT05URU5UX0xFTkdUSC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTM2CisgICAgIGQgIENVUkxPUFRfRlRQX1NLSVBfUEFTVl9JUC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTM3CisgICAgIGQgIENVUkxPUFRfRlRQX0ZJTEVNRVRIT0QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDEzOAorICAgICBkICBDVVJMT1BUX0xPQ0FMUE9SVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTM5CisgICAgIGQgIENVUkxPUFRfTE9DQUxQT1JUUkFOR0UuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDE0MAorICAgICBkICBDVVJMT1BUX0NPTk5FQ1RfT05MWS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTQxCisgICAgIGQgIENVUkxPUFRfQ09OVl9GUk9NX05FVFdPUktfRlVOQ1RJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMDE0MgorICAgICBkICBDVVJMT1BUX0NPTlZfVE9fTkVUV09SS19GVU5DVElPTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIwMTQzCisgICAgIGQgIENVUkxPUFRfQ09OVl9GUk9NX1VURjhfRlVOQ1RJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMDE0NAorICAgICBkICBDVVJMT1BUX01BWF9TRU5EX1NQRUVEX0xBUkdFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMzAxNDUKKyAgICAgZCAgQ1VSTE9QVF9NQVhfUkVDVl9TUEVFRF9MQVJHRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDMwMTQ2CisgICAgIGQgIENVUkxPUFRfRlRQX0FMVEVSTkFUSVZFX1RPX1VTRVIuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE0NworICAgICBkICBDVVJMT1BUX1NPQ0tPUFRGVU5DVElPTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIwMTQ4CisgICAgIGQgIENVUkxPUFRfU09DS09QVERBVEEuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE0OQorICAgICBkICBDVVJMT1BUX1NTTF9TRVNTSU9OSURfQ0FDSEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDE1MAorICAgICBkICBDVVJMT1BUX1NTSF9BVVRIX1RZUEVTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAxNTEKKyAgICAgZCAgQ1VSTE9QVF9TU0hfUFVCTElDX0tFWUZJTEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE1MgorICAgICBkICBDVVJMT1BUX1NTSF9QUklWQVRFX0tFWUZJTEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE1MworICAgICBkICBDVVJMT1BUX0ZUUF9TU0xfQ0NDLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAxNTQKKyAgICAgZCAgQ1VSTE9QVF9USU1FT1VUX01TLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAxNTUKKyAgICAgZCAgQ1VSTE9QVF9DT05ORUNUVElNRU9VVF9NUy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTU2CisgICAgIGQgIENVUkxPUFRfSFRUUF9UUkFOU0ZFUl9ERUNPRElORy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTU3CisgICAgIGQgIENVUkxPUFRfSFRUUF9DT05URU5UX0RFQ09ESU5HLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAxNTgKKyAgICAgZCAgQ1VSTE9QVF9ORVdfRklMRV9QRVJNUy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTU5CisgICAgIGQgIENVUkxPUFRfTkVXX0RJUkVDVE9SWV9QRVJNUy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTYwCisgICAgIGQgIENVUkxPUFRfUE9TVFJFRElSLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAxNjEKKyAgICAgZCAgQ1VSTE9QVF9TU0hfSE9TVF9QVUJMSUNfS0VZX01ENS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMTYyCisgICAgIGQgIENVUkxPUFRfT1BFTlNPQ0tFVEZVTkNUSU9OLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMjAxNjMKKyAgICAgZCAgQ1VSTE9QVF9PUEVOU09DS0VUREFUQS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMTY0CisgICAgIGQgIENVUkxPUFRfQ09QWVBPU1RGSUVMRFMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE2NQorICAgICBkICBDVVJMT1BUX1BST1hZX1RSQU5TRkVSX01PREUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDE2NgorICAgICBkICBDVVJMT1BUX1NFRUtGVU5DVElPTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIwMTY3CisgICAgIGQgIENVUkxPUFRfU0VFS0RBVEEuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE2OAorICAgICBkICBDVVJMT1BUX0NSTEZJTEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE2OQorICAgICBkICBDVVJMT1BUX0lTU1VFUkNFUlQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE3MAorICAgICBkICBDVVJMT1BUX0FERFJFU1NfU0NPUEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDE3MQorICAgICBkICBDVVJMT1BUX0NFUlRJTkZPLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAxNzIKKyAgICAgZCAgQ1VSTE9QVF9VU0VSTkFNRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMTczCisgICAgIGQgIENVUkxPUFRfUEFTU1dPUkQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE3NAorICAgICBkICBDVVJMT1BUX1BST1hZVVNFUk5BTUUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE3NQorICAgICBkICBDVVJMT1BUX1BST1hZUEFTU1dPUkQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE3NgorICAgICBkICBDVVJMT1BUX05PUFJPWFkuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE3NworICAgICBkICBDVVJMT1BUX1RGVFBfQkxLU0laRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTc4CisgICAgIGQgIENVUkxPUFRfU09DS1M1X0dTU0FQSV9TRVJWSUNFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAxNzkKKyAgICAgZCAgQ1VSTE9QVF9TT0NLUzVfR1NTQVBJX05FQy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTgwCisgICAgIGQgIENVUkxPUFRfUFJPVE9DT0xTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAxODEKKyAgICAgZCAgQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDE4MgorICAgICBkICBDVVJMT1BUX1NTSF9LTk9XTkhPU1RTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAxODMKKyAgICAgZCAgQ1VSTE9QVF9TU0hfS0VZRlVOQ1RJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMDE4NAorICAgICBkICBDVVJMT1BUX1NTSF9LRVlEQVRBLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAxODUKKyAgICAgZCAgQ1VSTE9QVF9NQUlMX0ZST00uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE4NgorICAgICBkICBDVVJMT1BUX01BSUxfUkNQVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMTg3CisgICAgIGQgIENVUkxPUFRfRlRQX1VTRV9QUkVULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAxODgKKyAgICAgZCAgQ1VSTE9QVF9SVFNQX1JFUVVFU1QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDE4OQorICAgICBkICBDVVJMT1BUX1JUU1BfU0VTU0lPTl9JRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMTkwCisgICAgIGQgIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAxOTEKKyAgICAgZCAgQ1VSTE9QVF9SVFNQX1RSQU5TUE9SVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMTkyCisgICAgIGQgIENVUkxPUFRfUlRTUF9DTElFTlRfQ1NFUS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTkzCisgICAgIGQgIENVUkxPUFRfUlRTUF9TRVJWRVJfQ1NFUS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTk0CisgICAgIGQgIENVUkxPUFRfSU5URVJMRUFWRURBVEEuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDE5NQorICAgICBkICBDVVJMT1BUX0lOVEVSTEVBVkVGVU5DVElPTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIwMTk2CisgICAgIGQgIENVUkxPUFRfV0lMRENBUkRNQVRDSC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTk3CisgICAgIGQgIENVUkxPUFRfQ0hVTktfQkdOX0ZVTkNUSU9OLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMjAxOTgKKyAgICAgZCAgQ1VSTE9QVF9DSFVOS19FTkRfRlVOQ1RJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMDE5OQorICAgICBkICBDVVJMT1BUX0ZOTUFUQ0hfRlVOQ1RJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMDIwMAorICAgICBkICBDVVJMT1BUX0NIVU5LX0RBVEEuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDIwMQorICAgICBkICBDVVJMT1BUX0ZOTUFUQ0hfREFUQS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMjAyCisgICAgIGQgIENVUkxPUFRfUkVTT0xWRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMjAzCisgICAgIGQgIENVUkxPUFRfVExTQVVUSF9VU0VSTkFNRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMjA0CisgICAgIGQgIENVUkxPUFRfVExTQVVUSF9QQVNTV09SRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMjA1CisgICAgIGQgIENVUkxPUFRfVExTQVVUSF9UWVBFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAyMDYKKyAgICAgZCAgQ1VSTE9QVF9UUkFOU0ZFUl9FTkNPRElORy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMjA3CisgICAgIGQgIENVUkxPUFRfQ0xPU0VTT0NLRVRGVU5DVElPTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIwMjA4CisgICAgIGQgIENVUkxPUFRfQ0xPU0VTT0NLRVREQVRBLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAyMDkKKyAgICAgZCAgQ1VSTE9QVF9HU1NBUElfREVMRUdBVElPTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMjEwCisgICAgICAqCisgICAgICAvaWYgbm90IGRlZmluZWQoQ1VSTF9OT19PTERJRVMpCisgICAgIGQgIENVUkxPUFRfU1NMS0VZUEFTU1dELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwMjYKKyAgICAgZCAgQ1VSTE9QVF9TU0xDRVJUUEFTU1dELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwMjYKKyAgICAgZCAgQ1VSTE9QVF9GVFBMSVNUT05MWS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDQ4CisgICAgIGQgIENVUkxPUFRfRlRQQVBQRU5ELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAwNTAKKyAgICAgZCAgQ1VSTE9QVF9LUkI0TEVWRUwuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDA2MworICAgICBkICBDVVJMT1BUX0VOQ09ESU5HLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAxMDIKKyAgICAgZCAgQ1VSTE9QVF9TRVJWRVJfUkVTUE9OU0VfVElNRU9VVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTEyCisgICAgIGQgIENVUkxPUFRfRlRQX1NTTC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTE5CisgICAgIGQgIENVUkxPUFRfUE9TVDMwMS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMTYxCisgICAgICAvZW5kaWYKKyAgICAgICoKKyAgICAgZCBDVVJMRk9STWNvZGUgICAgcyAgICAgICAgICAgICAxMGkgMCBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpICAgICAgICAgICAgICAgRW51bQorICAgICBkICBDVVJMX0ZPUk1BRERfT0suLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgIENVUkxfRk9STUFERF9NRU1PUlkuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgIENVUkxfRk9STUFERF9PUFRJT05fVFdJQ0UuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyCisgICAgIGQgIENVUkxfRk9STUFERF9OVUxMLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMworICAgICBkICBDVVJMX0ZPUk1BRERfVU5LTk9XTl9PUFRJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0CisgICAgIGQgIENVUkxfRk9STUFERF9JTkNPTVBMRVRFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNQorICAgICBkICBDVVJMX0ZPUk1BRERfSUxMRUdBTF9BUlJBWS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDYKKyAgICAgZCAgQ1VSTF9GT1JNQUREX0RJU0FCTEVELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNworICAgICAgKgorICAgICBkIENVUkxmb3Jtb3B0aW9uICBzICAgICAgICAgICAgIDEwaSAwIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgICAgICAgICAgICAgICBFbnVtCisgICAgIGQgIENVUkxGT1JNX05PVEhJTkcuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgIENVUkxGT1JNX0NPUFlOQU1FLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMQorICAgICBkICBDVVJMRk9STV9QVFJOQU1FLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICBkICBDVVJMRk9STV9OQU1FTEVOR1RILi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMworICAgICBkICBDVVJMRk9STV9DT1BZQ09OVEVOVFMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0CisgICAgIGQgIENVUkxGT1JNX1BUUkNPTlRFTlRTLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNQorICAgICBkICBDVVJMRk9STV9DT05URU5UU0xFTkdUSC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDYKKyAgICAgZCAgQ1VSTEZPUk1fRklMRUNPTlRFTlQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA3CisgICAgIGQgIENVUkxGT1JNX0FSUkFZLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgOAorICAgICBkICBDVVJMRk9STV9PQlNPTEVURS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDkKKyAgICAgZCAgQ1VSTEZPUk1fRklMRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwCisgICAgIGQgIENVUkxGT1JNX0JVRkZFUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDExCisgICAgIGQgIENVUkxGT1JNX0JVRkZFUlBUUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEyCisgICAgIGQgIENVUkxGT1JNX0JVRkZFUkxFTkdUSC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEzCisgICAgIGQgIENVUkxGT1JNX0NPTlRFTlRUWVBFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTQKKyAgICAgZCAgQ1VSTEZPUk1fQ09OVEVOVEhFQURFUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDE1CisgICAgIGQgIENVUkxGT1JNX0ZJTEVOQU1FLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTYKKyAgICAgZCAgQ1VSTEZPUk1fRU5ELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTcKKyAgICAgZCAgQ1VSTEZPUk1fT0JTT0xFVEUyLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTgKKyAgICAgZCAgQ1VSTEZPUk1fU1RSRUFNLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTkKKyAgICAgICoKKyAgICAgZCBDVVJMSU5GTyAgICAgICAgcyAgICAgICAgICAgICAxMGkgMCBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpICAgICAgICAgICAgICAgRW51bQorICAgICBkICBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19TVFJJTkcgKyAxCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDEwMDAwMScKKyAgICAgZCAgQ1VSTElORk9fUkVTUE9OU0VfQ09ERS4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fTE9ORyAgICsgMgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAyMDAwMDInCisgICAgIGQgIENVUkxJTkZPX1RPVEFMX1RJTUUuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPX0RPVUJMRSArIDMKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMzAwMDAzJworICAgICBkICBDVVJMSU5GT19OQU1FTE9PS1VQX1RJTUUuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19ET1VCTEUgKyA0CisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDMwMDAwNCcKKyAgICAgZCAgQ1VSTElORk9fQ09OTkVDVF9USU1FLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fRE9VQkxFICsgNQorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAzMDAwMDUnCisgICAgIGQgIENVUkxJTkZPX1BSRVRSQU5TRkVSX1RJTUUuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPX0RPVUJMRSArIDYKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMzAwMDA2JworICAgICBkICBDVVJMSU5GT19TSVpFX1VQTE9BRC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19ET1VCTEUgKyA3CisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDMwMDAwNycKKyAgICAgZCAgQ1VSTElORk9fU0laRV9ET1dOTE9BRC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fRE9VQkxFICsgOAorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAzMDAwMDgnCisgICAgIGQgIENVUkxJTkZPX1NQRUVEX0RPV05MT0FELi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPX0RPVUJMRSArIDkKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMzAwMDA5JworICAgICBkICBDVVJMSU5GT19TUEVFRF9VUExPQUQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19ET1VCTEUgKyAxMAorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAzMDAwMEEnCisgICAgIGQgIENVUkxJTkZPX0hFQURFUl9TSVpFLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPX0xPTkcgICArIDExCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDIwMDAwQicKKyAgICAgZCAgQ1VSTElORk9fUkVRVUVTVF9TSVpFLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fTE9ORyAgICsgMTIKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMjAwMDBDJworICAgICBkICBDVVJMSU5GT19TU0xfVkVSSUZZUkVTVUxULi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19MT05HICAgKyAxMworICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAyMDAwMEQnCisgICAgIGQgIENVUkxJTkZPX0ZJTEVUSU1FLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPX0xPTkcgICArIDE0CisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDIwMDAwRScKKyAgICAgZCAgQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfRE9XTkxPQUQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fRE9VQkxFICsgMTUKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMzAwMDBGJworICAgICBkICBDVVJMSU5GT19DT05URU5UX0xFTkdUSF9VUExPQUQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19ET1VCTEUgKyAxNgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAzMDAwMTAnCisgICAgIGQgIENVUkxJTkZPX1NUQVJUVFJBTlNGRVJfVElNRS4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPX0RPVUJMRSArIDE3CisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDMwMDAxMScKKyAgICAgZCAgQ1VSTElORk9fQ09OVEVOVF9UWVBFLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fU1RSSU5HICsgMTgKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMTAwMDEyJworICAgICBkICBDVVJMSU5GT19SRURJUkVDVF9USU1FLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19ET1VCTEUgKyAxOQorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAzMDAwMTMnCisgICAgIGQgIENVUkxJTkZPX1JFRElSRUNUX0NPVU5ULi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPX0xPTkcgICArIDIwCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDIwMDAxNCcKKyAgICAgZCAgQ1VSTElORk9fUFJJVkFURS4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fU1RSSU5HICsgMjEKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMTAwMDE1JworICAgICBkICBDVVJMSU5GT19IVFRQX0NPTk5FQ1RDT0RFLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19MT05HICAgKyAyMgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAyMDAwMTYnCisgICAgIGQgIENVUkxJTkZPX0hUVFBBVVRIX0FWQUlMLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPX0xPTkcgICArIDIzCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDIwMDAxNycKKyAgICAgZCAgQ1VSTElORk9fUFJPWFlBVVRIX0FWQUlMLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fTE9ORyAgICsgMjQKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMjAwMDE4JworICAgICBkICBDVVJMSU5GT19PU19FUlJOTy4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19MT05HICAgKyAyNQorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAyMDAwMTknCisgICAgIGQgIENVUkxJTkZPX05VTV9DT05ORUNUUy4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPX0xPTkcgICArIDI2CisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDIwMDAxQScKKyAgICAgZCAgQ1VSTElORk9fU1NMX0VOR0lORVMuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fU0xJU1QgICsgMjcKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwNDAwMDFCJworICAgICBkICBDVVJMSU5GT19DT09LSUVMSVNULi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19TTElTVCAgKyAyOAorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDA0MDAwMUMnCisgICAgIGQgIENVUkxJTkZPX0xBU1RTT0NLRVQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPX0xPTkcgICArIDI5CisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDIwMDAxRCcKKyAgICAgZCAgQ1VSTElORk9fRlRQX0VOVFJZX1BBVEguLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fU1RSSU5HICsgMzAKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMTAwMDFFJworICAgICBkICBDVVJMSU5GT19SRURJUkVDVF9VUkwuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19TVFJJTkcgKyAzMQorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAxMDAwMUYnCisgICAgIGQgIENVUkxJTkZPX1BSSU1BUllfSVAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPX1NUUklORyArIDMyCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDEwMDAyMCcKKyAgICAgZCAgQ1VSTElORk9fQVBQQ09OTkVDVF9USU1FLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fRE9VQkxFICsgMzMKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMzAwMDIxJworICAgICBkICBDVVJMSU5GT19DRVJUSU5GTy4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19TTElTVCArIDM0CisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDQwMDAyMicKKyAgICAgZCAgQ1VSTElORk9fQ09ORElUSU9OX1VOTUVULi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fTE9ORyArIDM1CisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDIwMDAyMycKKyAgICAgZCAgQ1VSTElORk9fUlRTUF9TRVNTSU9OX0lELi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fU1RSSU5HICsgMzYKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMTAwMDI0JworICAgICBkICBDVVJMSU5GT19SVFNQX0NMSUVOVF9DU0VRLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19MT05HICsgMzcKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMjAwMDI1JworICAgICBkICBDVVJMSU5GT19SVFNQX1NFUlZFUl9DU0VRLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19MT05HICsgMzgKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMjAwMDI2JworICAgICBkICBDVVJMSU5GT19SVFNQX0NTRVFfUkVDVi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19MT05HICsgMzkKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMjAwMDI3JworICAgICBkICBDVVJMSU5GT19QUklNQVJZX1BPUlQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19MT05HICsgNDAKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMjAwMDI4JworICAgICBkICBDVVJMSU5GT19MT0NBTF9JUC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMSU5GT19TVFJJTkcgKyA0MQorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAxMDAwMjknCisgICAgIGQgIENVUkxJTkZPX0xPQ0FMX1BPUlQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxJTkZPX0xPTkcgKyA0MgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAyMDAwMkEnCisgICAgICAqCisgICAgIGQgIENVUkxJTkZPX0hUVFBfQ09ERS4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9sZCAuLi5SRVNQT05TRV9DT0RFCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDIwMDAwMicKKyAgICAgICoKKyAgICAgZCBjdXJsX2Nsb3NlcG9saWN5Li4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgMTBpIDAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSAgICAgICAgICAgICAgIEVudW0KKyAgICAgZCAgQ1VSTENMT1NFUE9MSUNZX09MREVTVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCAgQ1VSTENMT1NFUE9MSUNZX0xFQVNUX1JFQ0VOVExZX1VTRUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyCisgICAgIGQgIENVUkxDTE9TRVBPTElDWV9MRUFTVF9UUkFGRklDLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMworICAgICBkICBDVVJMQ0xPU0VQT0xJQ1lfU0xPV0VTVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDQKKyAgICAgZCAgQ1VSTENMT1NFUE9MSUNZX0NBTExCQUNLLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNQorICAgICAgKgorICAgICBkIGN1cmxfbG9ja19kYXRhLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgMTBpIDAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSAgICAgICAgICAgICAgIEVudW0KKyAgICAgZCAgQ1VSTF9MT0NLX0RBVEFfTk9ORS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAKKyAgICAgZCAgQ1VSTF9MT0NLX0RBVEFfU0hBUkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgIENVUkxfTE9DS19EQVRBX0NPT0tJRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIKKyAgICAgZCAgQ1VSTF9MT0NLX0RBVEFfRE5TLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMworICAgICBkICBDVVJMX0xPQ0tfREFUQV9TU0xfU0VTU0lPTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDQKKyAgICAgZCAgQ1VSTF9MT0NLX0RBVEFfQ09OTkVDVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDUKKyAgICAgZCAgQ1VSTF9MT0NLX0RBVEFfTEFTVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDYKKyAgICAgICoKKyAgICAgZCBjdXJsX2xvY2tfYWNjZXNzLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgMTBpIDAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSAgICAgICAgICAgICAgIEVudW0KKyAgICAgZCAgQ1VSTF9MT0NLX0FDQ0VTU19OT05FLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMAorICAgICBkICBDVVJMX0xPQ0tfQUNDRVNTX1NIQVJFRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCAgQ1VSTF9MT0NLX0FDQ0VTU19TSU5HTEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyCisgICAgICAqCisgICAgIGQgY3VybF9UaW1lQ29uZCAgIHMgICAgICAgICAgICAgMTBpIDAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSAgICAgICAgICAgICAgIEVudW0KKyAgICAgZCAgQ1VSTF9USU1FQ09ORF9OT05FLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMAorICAgICBkICBDVVJMX1RJTUVDT05EX0lGTU9EU0lOQ0UuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgIENVUkxfVElNRUNPTkRfTEFTVE1PRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIKKyAgICAgZCAgQ1VSTF9USU1FQ09ORF9MQVNULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMworICAgICAgKgorICAgICBkIENVUkxTSGNvZGUgICAgICBzICAgICAgICAgICAgIDEwaSAwIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgICAgICAgICAgICAgICBFbnVtCisgICAgIGQgIENVUkxTSEVfT0sgICAgIGMgICAgICAgICAgICAgICAgICAgMAorICAgICBkICBDVVJMU0hFX0JBRF9PUFRJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgIENVUkxTSEVfSU5fVVNFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICBkICBDVVJMU0hFX0lOVkFMSUQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzCisgICAgIGQgIENVUkxTSEVfTk9NRU0uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0CisgICAgIGQgIENVUkxTSEVfTk9UX0JVSUxUX0lOLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNQorICAgICAgKgorICAgICBkIENVUkxTSG9wdGlvbi4uLgorICAgICBkICAgICAgICAgICAgICAgICBzICAgICAgICAgICAgIDEwaSAwIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgICAgICAgICAgICAgICBFbnVtCisgICAgIGQgIENVUkxTSE9QVF9TSEFSRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCAgQ1VSTFNIT1BUX1VOU0hBUkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyCisgICAgIGQgIENVUkxTSE9QVF9MT0NLRlVOQy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDMKKyAgICAgZCAgQ1VSTFNIT1BUX1VOTE9DS0ZVTkMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0CisgICAgIGQgIENVUkxTSE9QVF9VU0VSREFUQS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDUKKyAgICAgICoKKyAgICAgZCBDVVJMdmVyc2lvbiAgICAgcyAgICAgICAgICAgICAxMGkgMCBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpICAgICAgICAgICAgICAgRW51bQorICAgICBkICBDVVJMVkVSU0lPTl9GSVJTVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAKKyAgICAgZCAgQ1VSTFZFUlNJT05fU0VDT05ELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMQorICAgICBkICBDVVJMVkVSU0lPTl9USElSRC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIKKyAgICAgZCAgQ1VSTFZFUlNJT05fRk9VUlRILi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMworICAgICBkICBDVVJMVkVSU0lPTl9OT1cuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTFZFUlNJT05fRk9VUlRICisgICAgICAqCisgICAgIGQgY3VybHNvY2t0eXBlICAgIHMgICAgICAgICAgICAgMTBpIDAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSAgICAgICAgICAgICAgIEVudW0KKyAgICAgZCAgQ1VSTFNPQ0tUWVBFX0lQQ1hOLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMAorICAgICAgKgorICAgICBkICBDVVJMX1NPQ0tPUFRfT0suLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgIENVUkxfU09DS09QVF9FUlJPUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEKKyAgICAgZCAgQ1VSTF9TT0NLT1BUX0FMUkVBRFlfQ09OTkVDVEVELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICAgKgorICAgICBkIENVUkxNY29kZSAgICAgICBzICAgICAgICAgICAgIDEwaSAwIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgICAgICAgICAgICAgICBFbnVtCisgICAgIGQgIENVUkxNX0NBTExfTVVMVElfUEVSRk9STS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIC0xCisgICAgIGQgIENVUkxNX0NBTExfTVVMVElfU09DS0VULi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgLTEKKyAgICAgZCAgQ1VSTE1fT0sgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgIENVUkxNX0JBRF9IQU5ETEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgIENVUkxNX0JBRF9FQVNZX0hBTkRMRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDIKKyAgICAgZCAgQ1VSTE1fT1VUX09GX01FTU9SWS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDMKKyAgICAgZCAgQ1VSTE1fSU5URVJOQUxfRVJST1IuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0CisgICAgIGQgIENVUkxNX0JBRF9TT0NLRVQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA1CisgICAgIGQgIENVUkxNX1VOS05PV05fT1BUSU9OLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNgorICAgICBkICBDVVJMTV9MQVNUICAgICBjICAgICAgICAgICAgICAgICAgIDcKKyAgICAgICoKKyAgICAgZCBDVVJMTVNHICAgICAgICAgcyAgICAgICAgICAgICAxMGkgMCBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpICAgICAgICAgICAgICAgRW51bQorICAgICBkICBDVVJMTVNHX05PTkUgICBjICAgICAgICAgICAgICAgICAgIDAKKyAgICAgZCAgQ1VSTE1TR19ET05FICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgICAqCisgICAgIGQgQ1VSTE1vcHRpb24gICAgIHMgICAgICAgICAgICAgMTBpIDAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSAgICAgICAgICAgICAgIEVudW0KKyAgICAgZCAgQ1VSTE1PUFRfU09DS0VURlVOQ1RJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMDAwMQorICAgICBkICBDVVJMTU9QVF9TT0NLRVREQVRBLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAwMDIKKyAgICAgZCAgQ1VSTE1PUFRfUElQRUxJTklORy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDAzCisgICAgIGQgIENVUkxNT1BUX1RJTUVSRlVOQ1RJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyMDAwNAorICAgICBkICBDVVJMTU9QVF9USU1FUkRBVEEuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDAwNQorICAgICBkICBDVVJMTU9QVF9NQVhDT05ORUNUUy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMDA2CisgICAgICAqCisgICAgICAqICBQdWJsaWMgQVBJIGVudW1zIGZvciBSVFNQIHJlcXVlc3RzLgorICAgICAgKgorICAgICBkIENVUkxSVFNQUkVRX05PTkUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwCisgICAgIGQgQ1VSTF9SVFNQUkVRX09QVElPTlMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgQ1VSTF9SVFNQUkVRX0RFU0NSSUJFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMgorICAgICBkIENVUkxfUlRTUFJFUV9BTk5PVU5DRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDMKKyAgICAgZCBDVVJMX1JUU1BSRVFfU0VUVVAuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0CisgICAgIGQgQ1VSTF9SVFNQUkVRX1BMQVkuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA1CisgICAgIGQgQ1VSTF9SVFNQUkVRX1BBVVNFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNgorICAgICBkIENVUkxfUlRTUFJFUV9URUFSRE9XTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDcKKyAgICAgZCBDVVJMX1JUU1BSRVFfR0VUX1BBUkFNRVRFUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDgKKyAgICAgZCBDVVJMX1JUU1BSRVFfU0VUX1BBUkFNRVRFUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDkKKyAgICAgZCBDVVJMX1JUU1BSRVFfUkVDT1JELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAKKyAgICAgZCBDVVJMX1JUU1BSRVFfUkVDRUlWRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEyCisgICAgIGQgQ1VSTF9SVFNQUkVRX0xBU1QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMworCisgICAgICAqCisgICAgICAqICBSZW5hbWluZyBDVVJMTXNnIHRvIENVUkxfTXNnIHRvIGF2b2lkIGNhc2UtaW5zZW5zaXZpdHkgbmFtZSBjbGFzaC4KKyAgICAgICoKKyAgICAgZCBDVVJMX01zZyAgICAgICAgZHMgICAgICAgICAgICAgICAgICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVkCisgICAgIGQgIG1zZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMTVNHKQorICAgICBkICBlYXN5X2hhbmRsZSAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMICoKKyAgICAgZCAgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgZCAgIHdoYXRldmVyICAgICAgICAgICAgICAgICAgICAgICogICBvdmVybGF5KGRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqCisgICAgIGQgICByZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheShkYXRhKSBsaWtlKENVUkxjb2RlKQorICAgICAgKgorICAgICBkIGN1cmxfaHR0cF9wb3N0Li4uCisgICAgIGQgICAgICAgICAgICAgICAgIGRzICAgICAgICAgICAgICAgICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllZAorICAgICBkICBuZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2h0dHBwb3N0ICoKKyAgICAgZCAgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqCisgICAgIGQgIG5hbWVsZW5ndGggICAgICAgICAgICAgICAgICAgMTBpIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcKKyAgICAgZCAgY29udGVudHMgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqCisgICAgIGQgIGNvbnRlbnRzbGVuZ3RoLi4uCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTBpIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcKKyAgICAgZCAgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqCisgICAgIGQgIGJ1ZmZlcmxlbmd0aC4uLgorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nCisgICAgIGQgIGNvbnRlbnR0eXBlICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKgorICAgICBkICBjb250ZW50aGVhZGVyLi4uCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc2xpc3QgKgorICAgICBkICBtb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2h0dHBwb3N0ICoKKyAgICAgZCAgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAxMGkgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZworICAgICBkICBzaG93ZmlsZW5hbWUgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoKKyAgICAgZCAgdXNlcnAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqCisgICAgICAqCisgICAgIGQgY3VybF9zb2NrYWRkciAgIGRzICAgICAgICAgICAgICAgICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllZAorICAgICBkICBmYW1pbHkgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwCisgICAgIGQgIHNvY2t0eXBlICAgICAgICAgICAgICAgICAgICAgMTBpIDAKKyAgICAgZCAgcHJvdG9jb2wgICAgICAgICAgICAgICAgICAgICAxMGkgMAorICAgICBkICBhZGRybGVuICAgICAgICAgICAgICAgICAgICAgIDEwdSAwCisgICAgIGQgIGFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcgorICAgICAgKgorICAgICBkIGN1cmxfa2hrZXkgICAgICBkcyAgICAgICAgICAgICAgICAgIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZWQKKyAgICAgZCAga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqCisgICAgIGQgIGxlbiAgICAgICAgICAgICAgICAgICAgICAgICAgMTB1IDAKKyAgICAgZCAga2V5dHlwZSAgICAgICAgICAgICAgICAgICAgICAxMGkgMAorICAgICAgKgorICAgICBkIENVUkxLSFRZUEVfVU5LTk9XTi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAKKyAgICAgZCBDVVJMS0hUWVBFX1JTQTEuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxCisgICAgIGQgQ1VSTEtIVFlQRV9SU0EuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyCisgICAgIGQgQ1VSTEtIVFlQRV9EU1MuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAzCisgICAgICAqCisgICAgIGQgY3VybF9mb3JtcyAgICAgIGRzICAgICAgICAgICAgICAgICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllZAorICAgICBkICBvcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoQ1VSTGZvcm1vcHRpb24pCisgICAgIGQgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKgorICAgICBkICAgdmFsdWVfcHRyICAgICAgICAgICAgICAgICAgICAgKiAgIG92ZXJsYXkodmFsdWUpCisgICAgIGQgICB2YWx1ZV9wcm9jcHRyLi4uCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgb3ZlcmxheSh2YWx1ZSkgcHJvY3B0cgorICAgICAgKgorICAgICBkIGN1cmxfc2xpc3QgICAgICBkcyAgICAgICAgICAgICAgICAgIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZWQKKyAgICAgZCAgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqCisgICAgIGQgIG5leHQgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0ICoKKyAgICAgICoKKyAgICAgZCBjdXJsX3ZlcnNpb25faW5mb19kYXRhLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGRzICAgICAgICAgICAgICAgICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllZAorICAgICBkICBhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoQ1VSTHZlcnNpb24pCisgICAgIGQgIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKgorICAgICBkICB2ZXJzaW9uX251bSAgICAgICAgICAgICAgICAgIDEwdSAwCisgICAgIGQgIGhvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKgorICAgICBkICBmZWF0dXJlcyAgICAgICAgICAgICAgICAgICAgIDEwaSAwCisgICAgIGQgIHNzbF92ZXJzaW9uICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKgorICAgICBkICBzc2xfdmVyc2lvbl9udW0uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMGkgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZworICAgICBkICBsaWJ6X3ZlcnNpb24gICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoKKyAgICAgZCAgcHJvdG9jb2xzICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGNvbnN0ICoKKyAgICAgZCAgYXJlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqCisgICAgIGQgIGFyZXNfbnVtICAgICAgICAgICAgICAgICAgICAgMTBpIDAKKyAgICAgZCAgbGliaWRuICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqCisgICAgIGQgIGljb252X3Zlcl9udW0uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMGkgMAorICAgICBkICBsaWJzc2hfdmVyc2lvbi4uLgorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoKKyAgICAgICoKKyAgICAgZCBjdXJsX2NlcnRpbmZvICAgZHMgICAgICAgICAgICAgICAgICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVkCisgICAgIGQgIG51bV9vZl9jZXJ0cyAgICAgICAgICAgICAgICAgMTBpIDAKKyAgICAgZCAgY2VydGluZm8gICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKioKKyAgICAgICoKKyAgICAgZCBjdXJsX2Zpc3RyZ3MgICAgZHMgICAgICAgICAgICAgICAgICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVkCisgICAgIGQgIHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKgorICAgICBkICBwZXJtICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoKKyAgICAgZCAgdXNlciAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqCisgICAgIGQgIGdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKgorICAgICBkICB0YXJnZXQgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoKKyAgICAgICoKKyAgICAgZCBjdXJsX2ZpbGVpbmZvICAgZHMgICAgICAgICAgICAgICAgICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVkCisgICAgIGQgIGZpbGVuYW1lICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKgorICAgICBkICBmaWxldHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoY3VybGZpbGV0eXBlKQorICAgICBkICB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX3QKKyAgICAgZCAgcGVybSAgICAgICAgICAgICAgICAgICAgICAgICAxMHUgMAorICAgICBkICB1aWQgICAgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwCisgICAgIGQgIGdpZCAgICAgICAgICAgICAgICAgICAgICAgICAgMTBpIDAKKyAgICAgZCAgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKGN1cmxfb2ZmX3QpCisgICAgIGQgIGhhcmRsaW5rcyAgICAgICAgICAgICAgICAgICAgMTBpIDAKKyAgICAgZCAgc3RyaW5ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlZHMoY3VybF9maXN0cmdzKQorICAgICBkICBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgIDEwdSAwCisgICAgIGQgIGJfZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKgorICAgICBkICBiX3NpemUgICAgICAgICAgICAgICAgICAgICAgIDEwdSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKKyAgICAgZCAgYl91c2VkICAgICAgICAgICAgICAgICAgICAgICAxMHUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAqCisgICAgIGQgY3VybF9mb3JtZ2V0X2NhbGxiYWNrLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgICAqICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSBwcm9jcHRyCisgICAgICAqCisgICAgIGQgY3VybF9tYWxsb2NfY2FsbGJhY2suLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcyAgICAgICAgICAgICAgICogICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpIHByb2NwdHIKKyAgICAgICoKKyAgICAgZCBjdXJsX2ZyZWVfY2FsbGJhY2suLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcyAgICAgICAgICAgICAgICogICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpIHByb2NwdHIKKyAgICAgICoKKyAgICAgZCBjdXJsX3JlYWxsb2NfY2FsbGJhY2suLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcyAgICAgICAgICAgICAgICogICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpIHByb2NwdHIKKyAgICAgICoKKyAgICAgZCBjdXJsX3N0cmR1cF9jYWxsYmFjay4uLgorICAgICBkICAgICAgICAgICAgICAgICBzICAgICAgICAgICAgICAgKiAgIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgcHJvY3B0cgorICAgICAgKgorICAgICBkIGN1cmxfY2FsbG9jX2NhbGxiYWNrLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgICAqICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSBwcm9jcHRyCisgICAgICAqCisgICAgIGQgY3VybF9sb2NrX2Z1bmN0aW9uLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgICAqICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSBwcm9jcHRyCisgICAgICAqCisgICAgIGQgY3VybF91bmxvY2tfZnVuY3Rpb24uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcyAgICAgICAgICAgICAgICogICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpIHByb2NwdHIKKyAgICAgICoKKyAgICAgZCBjdXJsX3Byb2dyZXNzX2NhbGxiYWNrLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgICAqICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSBwcm9jcHRyCisgICAgICAqCisgICAgIGQgY3VybF9yZWFkX2NhbGxiYWNrLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgICAqICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSBwcm9jcHRyCisgICAgICAqCisgICAgIGQgY3VybF93cml0ZV9jYWxsYmFjay4uLgorICAgICBkICAgICAgICAgICAgICAgICBzICAgICAgICAgICAgICAgKiAgIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgcHJvY3B0cgorICAgICAgKgorICAgICBkIGN1cmxfc2Vla19jYWxsYmFjay4uLgorICAgICBkICAgICAgICAgICAgICAgICBzICAgICAgICAgICAgICAgKiAgIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgcHJvY3B0cgorICAgICAgKgorICAgICBkIGN1cmxfc29ja29wdF9jYWxsYmFjay4uLgorICAgICBkICAgICAgICAgICAgICAgICBzICAgICAgICAgICAgICAgKiAgIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgcHJvY3B0cgorICAgICAgKgorICAgICBkIGN1cmxfaW9jdGxfY2FsbGJhY2suLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcyAgICAgICAgICAgICAgICogICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpIHByb2NwdHIKKyAgICAgICoKKyAgICAgZCBjdXJsX2RlYnVnX2NhbGxiYWNrLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgICAqICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSBwcm9jcHRyCisgICAgICAqCisgICAgIGQgY3VybF9jb252X2NhbGxiYWNrLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgICAqICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSBwcm9jcHRyCisgICAgICAqCisgICAgIGQgY3VybF9zc2xfY3R4X2NhbGxiYWNrLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgICAqICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSBwcm9jcHRyCisgICAgICAqCisgICAgIGQgY3VybF9zb2NrZXRfY2FsbGJhY2suLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcyAgICAgICAgICAgICAgICogICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpIHByb2NwdHIKKyAgICAgICoKKyAgICAgZCBjdXJsX29wZW5zb2NrZXRfY2FsbGJhY2suLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcyAgICAgICAgICAgICAgICogICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpIHByb2NwdHIKKyAgICAgICoKKyAgICAgZCBjdXJsX3NzaGtleWNhbGxiYWNrLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHMgICAgICAgICAgICAgICAqICAgYmFzZWQoIyMjIyMjcHRyIyMjIyMjKSBwcm9jcHRyCisgICAgICAqCisgICAgIGQgY3VybF9jaHVua19iZ25fY2FsbGJhY2suLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcyAgICAgICAgICAgICAgICogICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpIHByb2NwdHIKKyAgICAgICoKKyAgICAgZCBjdXJsX2NodW5rX2VuZF9jYWxsYmFjay4uLgorICAgICBkICAgICAgICAgICAgICAgICBzICAgICAgICAgICAgICAgKiAgIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgcHJvY3B0cgorICAgICAgKgorICAgICBkIGN1cmxfZm5tYXRjaF9jYWxsYmFjay4uLgorICAgICBkICAgICAgICAgICAgICAgICBzICAgICAgICAgICAgICAgKiAgIGJhc2VkKCMjIyMjI3B0ciMjIyMjIykgcHJvY3B0cgorICAgICAgKgorICAgICBkIGN1cmxfY2xvc2Vzb2NrZXRfY2FsbGJhY2suLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcyAgICAgICAgICAgICAgICogICBiYXNlZCgjIyMjIyNwdHIjIyMjIyMpIHByb2NwdHIKKyAgICAgICoKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG90eXBlcworICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICoKKyAgICAgICogIFRoaXMgcHJvY2VkdXJlIGFzIGEgdmFyaWFibGUgcGFyYW1ldGVyIGxpc3QuCisgICAgICAqICBUaGlzIHByb3RvdHlwZSBhbGxvd3MgdXNlIG9mIGFuIG9wdGlvbiBhcnJheSwgb3IgYSBzaW5nbGUgIm9iamVjdCIKKyAgICAgICogICAgb3B0aW9uLiBPdGhlciBhcmd1bWVudCBsaXN0cyBtYXkgYmUgaW1wbGVtZW50ZWQgYnkgYWxpYXMgcHJvY2VkdXJlCisgICAgICAqICAgIHByb3RvdHlwZSBkZWZpbml0aW9ucy4KKyAgICAgICoKKyAgICAgZCBjdXJsX2Zvcm1hZGQgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX2Zvcm1hZGQnKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoQ1VSTEZPUk1jb2RlKQorICAgICBkICBodHRwcG9zdCAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2h0dHBwb3N0ICoKKyAgICAgZCAgbGFzdHBvc3QgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9odHRwcG9zdCAqCisgICAgIGQgIG9wdGlvbjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMRk9STW9wdGlvbikgICAgICAgICAgIENVUkxGT1JNX0FSUkFZCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucygqbm9wYXNzKQorICAgICBkICBvYmplY3QxICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZzogKm5vcGFzcykKKyAgICAgZCAgb3B0aW9uMiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKENVUkxGT1JNb3B0aW9uKSAgICAgICAgICAgQ1VSTEZPUk1fRU5ECisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucygqbm9wYXNzKQorICAgICAgKgorICAgICAgKgorICAgICBkIGN1cmxfc3RyZXF1YWwgICBwciAgICAgICAgICAgIDEwaSAwIGV4dHByb2MoJ2N1cmxfc3RyZXF1YWwnKQorICAgICBkICBzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZykKKyAgICAgZCAgczIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpCisgICAgICAqCisgICAgIGQgY3VybF9zdHJuZXF1YWwgIHByICAgICAgICAgICAgMTBpIDAgZXh0cHJvYygnY3VybF9zdHJuZXF1YWwnKQorICAgICBkICBzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZykKKyAgICAgZCAgczIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpCisgICAgIGQgIG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTB1IDAgdmFsdWUKKyAgICAgICoKKyAgICAgZCBjdXJsX2Zvcm1nZXQgICAgcHIgICAgICAgICAgICAxMGkgMCBleHRwcm9jKCdjdXJsX2Zvcm1nZXQnKQorICAgICBkICBmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2h0dHBwb3N0ICoKKyAgICAgZCAgYXJnICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZQorICAgICBkICBhcHBlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoY3VybF9mb3JtZ2V0X2NhbGxiYWNrKQorICAgICAgKgorICAgICBkIGN1cmxfZm9ybWZyZWUgICBwciAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2N1cmxfZm9ybWZyZWUnKQorICAgICBkICBmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2h0dHBwb3N0ICoKKyAgICAgICoKKyAgICAgZCBjdXJsX2dldGVudiAgICAgcHIgICAgICAgICAgICAgICogICBleHRwcm9jKCdjdXJsX2dldGVudicpCisgICAgIGQgIHZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKQorICAgICAgKgorICAgICBkIGN1cmxfdmVyc2lvbiAgICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfdmVyc2lvbicpCisgICAgICAqCisgICAgIGQgY3VybF9lYXN5X2VzY2FwZS4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfZWFzeV9lc2NhcGUnKSAgICAgICAgICBjaGFyICoKKyAgICAgZCAgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTCAqCisgICAgIGQgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKQorICAgICBkICBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlCisgICAgICAqCisgICAgIGQgY3VybF9lc2NhcGUgICAgIHByICAgICAgICAgICAgICAqICAgZXh0cHJvYygnY3VybF9lc2NhcGUnKSAgICAgICAgICAgICAgIGNoYXIgKgorICAgICBkICBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZykKKyAgICAgZCAgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZQorICAgICAgKgorICAgICBkIGN1cmxfZWFzeV91bmVzY2FwZS4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfZWFzeV91bmVzY2FwZScpICAgICAgICBjaGFyICoKKyAgICAgZCAgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTCAqCisgICAgIGQgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKQorICAgICBkICBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlCisgICAgIGQgIG91dGxlbmd0aCAgICAgICAgICAgICAgICAgICAgMTBpIDAgb3B0aW9ucygqb21pdCkKKyAgICAgICoKKyAgICAgZCBjdXJsX3VuZXNjYXBlICAgcHIgICAgICAgICAgICAgICogICBleHRwcm9jKCdjdXJsX3VuZXNjYXBlJykgICAgICAgICAgICAgY2hhciAqCisgICAgIGQgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKQorICAgICBkICBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlCisgICAgICAqCisgICAgIGQgY3VybF9mcmVlICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9mcmVlJykKKyAgICAgZCAgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZQorICAgICAgKgorICAgICBkIGN1cmxfZ2xvYmFsX2luaXQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX2dsb2JhbF9pbml0JykKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKENVUkxjb2RlKQorICAgICBkICBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlCisgICAgICAqCisgICAgIGQgY3VybF9nbG9iYWxfaW5pdF9tZW0uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX2dsb2JhbF9pbml0X21lbScpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMY29kZSkKKyAgICAgZCAgbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGN1cmxfbWFsbG9jX2NhbGxiYWNrKQorICAgICBkICBmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoY3VybF9mcmVlX2NhbGxiYWNrKQorICAgICBkICByICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoY3VybF9yZWFsbG9jX2NhbGxiYWNrKQorICAgICBkICBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoY3VybF9zdHJkdXBfY2FsbGJhY2spCisgICAgIGQgIGMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShjdXJsX2NhbGxvY19jYWxsYmFjaykKKyAgICAgICoKKyAgICAgZCBjdXJsX2dsb2JhbF9jbGVhbnVwLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9nbG9iYWxfY2xlYW51cCcpCisgICAgICAqCisgICAgIGQgY3VybF9zbGlzdF9hcHBlbmQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICogICBleHRwcm9jKCdjdXJsX3NsaXN0X2FwcGVuZCcpICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKgorICAgICBkICBsaXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqCisgICAgIGQgIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKgorICAgICAgKgorICAgICBkIGN1cmxfc2xpc3RfZnJlZV9hbGwuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX3NsaXN0X2ZyZWVfYWxsJykKKyAgICAgZCAgbGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKgorICAgICAgKgorICAgICBkIGN1cmxfZ2V0ZGF0ZSAgICBwciAgICAgICAgICAgIDEwaSAwIGV4dHByb2MoJ2N1cmxfZ2V0ZGF0ZScpICAgICAgICAgICAgICB0aW1lX3QKKyAgICAgZCAgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgY29uc3QgY2hhciAqCisgICAgIGQgIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgMTBpIDAgY29uc3Qgb3B0aW9ucygqb21pdCkgICAgICAgICAgICAgICAgIHRpbWVfdAorICAgICAgKgorICAgICBkIGN1cmxfc2hhcmVfaW5pdC4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfc2hhcmVfaW5pdCcpICAgICAgICAgICBDVVJMU0ggKiAoPSB2b2lkICopCisgICAgICAqCisgICAgICAqICBWYXJpYWJsZSBhcmd1bWVudCB0eXBlIHByb2NlZHVyZS4KKyAgICAgICogIE11bHRpcGx5IHByb3RvdHlwZWQgdG8gc3VwcG9ydCBhbGwgcG9zc2libGUgdHlwZXMuCisgICAgICAqCisgICAgIGQgY3VybF9zaGFyZV9zZXRvcHRfaW50Li4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9zaGFyZV9zZXRvcHQnKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoQ1VSTFNIY29kZSkKKyAgICAgZCAgc2hhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTFNIICogKD0gdm9pZCAqKQorICAgICBkICBvcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoQ1VSTFNIb3B0aW9uKQorICAgICBkICBpbnRhcmcgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlIG9wdGlvbnMoKm5vcGFzcykKKyAgICAgICoKKyAgICAgZCBjdXJsX3NoYXJlX3NldG9wdF9wdHIuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX3NoYXJlX3NldG9wdCcpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMU0hjb2RlKQorICAgICBkICBzaGFyZSAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMU0ggKiAoPSB2b2lkICopCisgICAgIGQgIG9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMU0hvcHRpb24pCisgICAgIGQgIHB0cmFyZyAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqbm9wYXNzKQorICAgICAgKgorICAgICBkIGN1cmxfc2hhcmVfc2V0b3B0X3Byb2MuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX3NoYXJlX3NldG9wdCcpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMU0hjb2RlKQorICAgICBkICBzaGFyZSAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMU0ggKiAoPSB2b2lkICopCisgICAgIGQgIG9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMU0hvcHRpb24pCisgICAgIGQgIHByb2NhcmcgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgcHJvY3B0ciBvcHRpb25zKCpub3Bhc3MpCisgICAgICAqCisgICAgIGQgY3VybF9zaGFyZV9jbGVhbnVwLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9zaGFyZV9jbGVhbnVwJykKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKENVUkxTSGNvZGUpCisgICAgIGQgIHNoYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxTSCAqICg9IHZvaWQgKikKKyAgICAgICoKKyAgICAgZCBjdXJsX3ZlcnNpb25faW5mby4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfdmVyc2lvbl9pbmZvJykgICAgICAgICBjX2lfdmVyc2lvbl9kYXRhICoKKyAgICAgZCAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKENVUkx2ZXJzaW9uKQorICAgICAgKgorICAgICBkIGN1cmxfZWFzeV9zdHJlcnJvci4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfZWFzeV9zdHJlcnJvcicpICAgICAgICBjb25zdCBjaGFyICoKKyAgICAgZCAgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKENVUkxjb2RlKQorICAgICAgKgorICAgICBkIGN1cmxfc2hhcmVfc3RyZXJyb3IuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICogICBleHRwcm9jKCdjdXJsX3NoYXJlX3N0cmVycm9yJykgICAgICAgY29uc3QgY2hhciAqCisgICAgIGQgIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMU0hjb2RlKQorICAgICAgKgorICAgICBkIGN1cmxfZWFzeV9pbml0ICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfZWFzeV9pbml0JykgICAgICAgICAgICBDVVJMICoKKyAgICAgICoKKyAgICAgICogIE11bHRpcGxlIHByb3RvdHlwZXMgZm9yIHZhcmFyZyBwcm9jZWR1cmUgY3VybF9lYXN5X3NldG9wdC4KKyAgICAgICoKKyAgICAgZCBjdXJsX2Vhc3lfc2V0b3B0X2xvbmcuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX2Vhc3lfc2V0b3B0JykKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKENVUkxjb2RlKQorICAgICBkICBjdXJsICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMICoKKyAgICAgZCAgb3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKENVUkxvcHRpb24pCisgICAgIGQgIGxvbmdhcmcgICAgICAgICAgICAgICAgICAgICAgMTBpIDAgdmFsdWUgb3B0aW9ucygqbm9wYXNzKQorICAgICAgKgorICAgICBkIGN1cmxfZWFzeV9zZXRvcHRfb2JqZWN0Li4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9lYXN5X3NldG9wdCcpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMY29kZSkKKyAgICAgZCAgY3VybCAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTCAqCisgICAgIGQgIG9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMb3B0aW9uKQorICAgICBkICBvYmplY3RhcmcgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZzogKm5vcGFzcykKKyAgICAgICoKKyAgICAgZCBjdXJsX2Vhc3lfc2V0b3B0X2Z1bmN0aW9uLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9lYXN5X3NldG9wdCcpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMY29kZSkKKyAgICAgZCAgY3VybCAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTCAqCisgICAgIGQgIG9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMb3B0aW9uKQorICAgICBkICBmdW5jdGlvbmFyZyAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIHByb2NwdHIgb3B0aW9ucygqbm9wYXNzKQorICAgICAgKgorICAgICBkIGN1cmxfZWFzeV9zZXRvcHRfb2Zmc2V0Li4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9lYXN5X3NldG9wdCcpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMY29kZSkKKyAgICAgZCAgY3VybCAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTCAqCisgICAgIGQgIG9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMb3B0aW9uKQorICAgICBkICBvZmZzZXRhcmcgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoY3VybF9vZmZfdCkKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKCpub3Bhc3MpCisgICAgICAqCisgICAgICAqCisgICAgIGQgY3VybF9lYXN5X3BlcmZvcm0uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX2Vhc3lfcGVyZm9ybScpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMY29kZSkKKyAgICAgZCAgY3VybCAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTCAqCisgICAgICAqCisgICAgIGQgY3VybF9lYXN5X2NsZWFudXAuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX2Vhc3lfY2xlYW51cCcpCisgICAgIGQgIGN1cmwgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkwgKgorICAgICAgKgorICAgICAgKiAgTXVsdGlwbGUgcHJvdG90eXBlcyBmb3IgdmFyYXJnIHByb2NlZHVyZSBjdXJsX2Vhc3lfZ2V0aW5mby4KKyAgICAgICoKKyAgICAgZCBjdXJsX2Vhc3lfZ2V0aW5mb19zdHJpbmcuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX2Vhc3lfZ2V0aW5mbycpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMY29kZSkKKyAgICAgZCAgY3VybCAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTCAqCisgICAgIGQgIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMSU5GTykKKyAgICAgZCAgc3RyaW5nYXJnICAgICAgICAgICAgICAgICAgICAgICogICBvcHRpb25zKCpub3Bhc3MpICAgICAgICAgICAgICAgICAgICAgY2hhciAqCisgICAgICAqCisgICAgIGQgY3VybF9lYXN5X2dldGluZm9fbG9uZy4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2N1cmxfZWFzeV9nZXRpbmZvJykKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKENVUkxjb2RlKQorICAgICBkICBjdXJsICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMICoKKyAgICAgZCAgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKENVUkxJTkZPKQorICAgICBkICBsb25nYXJnICAgICAgICAgICAgICAgICAgICAgIDEwaSAwIG9wdGlvbnMoKm5vcGFzcykKKyAgICAgICoKKyAgICAgZCBjdXJsX2Vhc3lfZ2V0aW5mb19kb3VibGUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX2Vhc3lfZ2V0aW5mbycpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMY29kZSkKKyAgICAgZCAgY3VybCAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTCAqCisgICAgIGQgIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMSU5GTykKKyAgICAgZCAgZG91YmxlYXJnICAgICAgICAgICAgICAgICAgICAgOGYgICBvcHRpb25zKCpub3Bhc3MpCisgICAgICAqCisgICAgIGQgY3VybF9lYXN5X2dldGluZm9fc2xpc3QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX2Vhc3lfZ2V0aW5mbycpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMY29kZSkKKyAgICAgZCAgY3VybCAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTCAqCisgICAgIGQgIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMSU5GTykKKyAgICAgZCAgc2xpc3RhcmcgICAgICAgICAgICAgICAgICAgICAgICogICBvcHRpb25zKCpub3Bhc3MpICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKgorICAgICAgKgorICAgICAgKgorICAgICBkIGN1cmxfZWFzeV9kdXBoYW5kbGUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICogICBleHRwcm9jKCdjdXJsX2Vhc3lfZHVwaGFuZGxlJykgICAgICAgQ1VSTCAqCisgICAgIGQgIGN1cmwgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkwgKgorICAgICAgKgorICAgICBkIGN1cmxfZWFzeV9yZXNldC4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2N1cmxfZWFzeV9yZXNldCcpCisgICAgIGQgIGN1cmwgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkwgKgorICAgICAgKgorICAgICBkIGN1cmxfZWFzeV9yZWN2Li4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9lYXN5X3JlY3YnKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoQ1VSTGNvZGUpCisgICAgIGQgIGN1cmwgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkwgKgorICAgICBkICBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoKKyAgICAgZCAgYnVmbGVuICAgICAgICAgICAgICAgICAgICAgICAxMHUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgIGQgIG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTB1IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqCisgICAgICAqCisgICAgIGQgY3VybF9lYXN5X3NlbmQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX2Vhc3lfc2VuZCcpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMY29kZSkKKyAgICAgZCAgY3VybCAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTCAqCisgICAgIGQgIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKgorICAgICBkICBidWZsZW4gICAgICAgICAgICAgICAgICAgICAgIDEwdSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKKyAgICAgZCAgbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMHUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICoKKyAgICAgICoKKyAgICAgZCBjdXJsX2Vhc3lfcGF1c2UuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX2Vhc3lfcGF1c2UnKQorICAgICBkICBjdXJsICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMICoKKyAgICAgZCAgYml0bWFzayAgICAgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZQorICAgICAgKgorICAgICBkIGN1cmxfbXVsdGlfaW5pdC4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfbXVsdGlfaW5pdCcpICAgICAgICAgICBDVVJMTSAqCisgICAgICAqCisgICAgIGQgY3VybF9tdWx0aV9hZGRfaGFuZGxlLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9tdWx0aV9hZGRfaGFuZGxlJykKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKENVUkxNY29kZSkKKyAgICAgZCAgbXVsdGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE0gKgorICAgICBkICBjdXJsX2hhbmRsZSAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMICoKKyAgICAgICoKKyAgICAgZCBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUnKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoQ1VSTE1jb2RlKQorICAgICBkICBtdWx0aV9oYW5kbGUgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMTSAqCisgICAgIGQgIGN1cmxfaGFuZGxlICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkwgKgorICAgICAgKgorICAgICBkIGN1cmxfbXVsdGlfZmRzZXQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX211bHRpX2Zkc2V0JykKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKENVUkxNY29kZSkKKyAgICAgZCAgbXVsdGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE0gKgorICAgICBkICByZWFkX2ZkX3NldCAgICAgICAgICAgICAgIDY1NTM1ICAgIG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICAgICAgICBmZF9zZXQKKyAgICAgZCAgd3JpdGVfZmRfc2V0ICAgICAgICAgICAgICA2NTUzNSAgICBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgICAgICAgZmRfc2V0CisgICAgIGQgIGV4Y19mZF9zZXQgICAgICAgICAgICAgICAgNjU1MzUgICAgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgICAgICAgIGZkX3NldAorICAgICBkICBtYXhfZmQgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwCisgICAgICAqCisgICAgIGQgY3VybF9tdWx0aV9wZXJmb3JtLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9tdWx0aV9wZXJmb3JtJykKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKENVUkxNY29kZSkKKyAgICAgZCAgbXVsdGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE0gKgorICAgICBkICBydW5uaW5nX2hhbmRsZXMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMGkgMAorICAgICAgKgorICAgICBkIGN1cmxfbXVsdGlfY2xlYW51cC4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2N1cmxfbXVsdGlfY2xlYW51cCcpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMTWNvZGUpCisgICAgIGQgIG11bHRpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxNICoKKyAgICAgICoKKyAgICAgZCBjdXJsX211bHRpX2luZm9fcmVhZC4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfbXVsdGlfaW5mb19yZWFkJykgICAgICBDVVJMX01zZyAqCisgICAgIGQgIG11bHRpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxNICoKKyAgICAgZCAgbXNnc19pbl9xdWV1ZSAgICAgICAgICAgICAgICAxMGkgMAorICAgICAgKgorICAgICBkIGN1cmxfbXVsdGlfc3RyZXJyb3IuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICogICBleHRwcm9jKCdjdXJsX211bHRpX3N0cmVycm9yJykgICAgICAgY2hhciAqCisgICAgIGQgIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMTWNvZGUpCisgICAgICAqCisgICAgIGQgY3VybF9tdWx0aV9zb2NrZXQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX211bHRpX3NvY2tldCcpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMTWNvZGUpCisgICAgIGQgIG11bHRpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxNICoKKyAgICAgZCAgcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGN1cmxfc29ja2V0X3QpCisgICAgIGQgIHJ1bm5pbmdfaGFuZGxlcy4uLgorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwCisgICAgICAqCisgICAgIGQgY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uJykKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKENVUkxNY29kZSkKKyAgICAgZCAgbXVsdGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE0gKgorICAgICBkICBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoY3VybF9zb2NrZXRfdCkKKyAgICAgZCAgZXZfYml0bWFzayAgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZQorICAgICBkICBydW5uaW5nX2hhbmRsZXMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMGkgMAorICAgICAgKgorICAgICBkIGN1cmxfbXVsdGlfc29ja2V0X2FsbC4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2N1cmxfbXVsdGlfc29ja2V0X2FsbCcpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMTWNvZGUpCisgICAgIGQgIG11bHRpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxNICoKKyAgICAgZCAgcnVubmluZ19oYW5kbGVzLi4uCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTBpIDAKKyAgICAgICoKKyAgICAgZCBjdXJsX211bHRpX3RpbWVvdXQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX211bHRpX3RpbWVvdXQnKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoQ1VSTE1jb2RlKQorICAgICBkICBtdWx0aV9oYW5kbGUgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMTSAqCisgICAgIGQgIG1pbGxpc2Vjb25kcyAgICAgICAgICAgICAgICAgMTBpIDAKKyAgICAgICoKKyAgICAgICogIE11bHRpcGxlIHByb3RvdHlwZXMgZm9yIHZhcmFyZyBwcm9jZWR1cmUgY3VybF9tdWx0aV9zZXRvcHQuCisgICAgICAqCisgICAgIGQgY3VybF9tdWx0aV9zZXRvcHRfbG9uZy4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2N1cmxfbXVsdGlfc2V0b3B0JykKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKENVUkxNY29kZSkKKyAgICAgZCAgbXVsdGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE0gKgorICAgICBkICBvcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoQ1VSTE1vcHRpb24pCisgICAgIGQgIGxvbmdhcmcgICAgICAgICAgICAgICAgICAgICAgMTBpIDAgdmFsdWUgb3B0aW9ucygqbm9wYXNzKQorICAgICAgKgorICAgICBkIGN1cmxfbXVsdGlfc2V0b3B0X29iamVjdC4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2N1cmxfbXVsdGlfc2V0b3B0JykKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKENVUkxNY29kZSkKKyAgICAgZCAgbXVsdGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTE0gKgorICAgICBkICBvcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoQ1VSTE1vcHRpb24pCisgICAgIGQgIG9iamVjdGFyZyAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nOiAqbm9wYXNzKQorICAgICAgKgorICAgICBkIGN1cmxfbXVsdGlfc2V0b3B0X2Z1bmN0aW9uLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9tdWx0aV9zZXRvcHQnKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoQ1VSTE1jb2RlKQorICAgICBkICBtdWx0aV9oYW5kbGUgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMTSAqCisgICAgIGQgIG9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMTW9wdGlvbikKKyAgICAgZCAgZnVuY3Rpb25hcmcgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBwcm9jcHRyIG9wdGlvbnMoKm5vcGFzcykKKyAgICAgICoKKyAgICAgZCBjdXJsX211bHRpX3NldG9wdF9vZmZzZXQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX211bHRpX3NldG9wdCcpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMTWNvZGUpCisgICAgIGQgIG11bHRpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxNICoKKyAgICAgZCAgb3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKENVUkxNb3B0aW9uKQorICAgICBkICBvZmZzZXRhcmcgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoY3VybF9vZmZfdCkKKyAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKCpub3Bhc3MpCisgICAgICAqCisgICAgICAqCisgICAgIGQgY3VybF9tdWx0aV9hc3NpZ24uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX211bHRpX2Fzc2lnbicpCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZShDVVJMTWNvZGUpCisgICAgIGQgIG11bHRpX2hhbmRsZSAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxNICoKKyAgICAgZCAgc29ja2ZkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGN1cmxfc29ja2V0X3QpCisgICAgIGQgIHNvY2twICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKgorICAgICAgKgorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogICAgICAgICAgICAgICAgQ0NTSUQgd3JhcHBlciBwcm9jZWR1cmUgcHJvdG90eXBlcworICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICoKKyAgICAgZCBjdXJsX3ZlcnNpb25fY2NzaWQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICogICBleHRwcm9jKCdjdXJsX3ZlcnNpb25fY2NzaWQnKQorICAgICBkICBjY3NpZCAgICAgICAgICAgICAgICAgICAgICAgIDEwdSAwIHZhbHVlCisgICAgICAqCisgICAgIGQgY3VybF9lYXN5X2VzY2FwZV9jY3NpZC4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfZWFzeV9lc2NhcGVfY2NzaWQnKSAgICBjaGFyICoKKyAgICAgZCAgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTCAqCisgICAgIGQgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKQorICAgICBkICBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlCisgICAgIGQgIGNjc2lkICAgICAgICAgICAgICAgICAgICAgICAgMTB1IDAgdmFsdWUKKyAgICAgICoKKyAgICAgZCBjdXJsX2Vhc3lfdW5lc2NhcGVfY2NzaWQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICogICBleHRwcm9jKCdjdXJsX2Vhc3lfdW5lc2NhcGVfY2NzaWQnKSAgY2hhciAqCisgICAgIGQgIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkwgKgorICAgICBkICBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZykKKyAgICAgZCAgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZQorICAgICBkICBvdXRsZW5ndGggICAgICAgICAgICAgICAgICAgIDEwaSAwIG9wdGlvbnMoKm9taXQpCisgICAgIGQgIGNjc2lkICAgICAgICAgICAgICAgICAgICAgICAgMTB1IDAgdmFsdWUKKyAgICAgICoKKyAgICAgZCBjdXJsX3NsaXN0X2FwcGVuZF9jY3NpZC4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfc2xpc3RfYXBwZW5kX2Njc2lkJykgICBzdHJ1Y3QgY3VybF9zbGlzdCAqCisgICAgIGQgIGxpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0ICoKKyAgICAgZCAgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgY29uc3QgY2hhciAqCisgICAgIGQgIGNjc2lkICAgICAgICAgICAgICAgICAgICAgICAgMTB1IDAgdmFsdWUKKyAgICAgICoKKyAgICAgZCBjdXJsX2dldGRhdGVfY2NzaWQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAxMGkgMCBleHRwcm9jKCdjdXJsX2dldGRhdGVfY2NzaWQnKSAgICAgICAgdGltZV90CisgICAgIGQgIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKgorICAgICBkICB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwIGNvbnN0IG9wdGlvbnMoKm9taXQpICAgICAgICAgICAgICAgICB0aW1lX3QKKyAgICAgZCAgY2NzaWQgICAgICAgICAgICAgICAgICAgICAgICAxMHUgMCB2YWx1ZQorICAgICAgKgorICAgICBkIGN1cmxfdmVyc2lvbl9pbmZvX2Njc2lkLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAqICAgZXh0cHJvYygnY3VybF92ZXJzaW9uX2luZm9fY2NzaWQnKSAgIGNfaV92ZXJzaW9uX2RhdGEgKgorICAgICBkICB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoQ1VSTHZlcnNpb24pCisgICAgIGQgIGNjc2lkICAgICAgICAgICAgICAgICAgICAgICAgMTB1IDAgdmFsdWUKKyAgICAgICoKKyAgICAgZCBjdXJsX2Vhc3lfc3RyZXJyb3JfY2NzaWQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICogICBleHRwcm9jKCdjdXJsX2Vhc3lfc3RyZXJyb3JfY2NzaWQnKSAgY29uc3QgY2hhciAqCisgICAgIGQgIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMY29kZSkKKyAgICAgZCAgY2NzaWQgICAgICAgICAgICAgICAgICAgICAgICAxMHUgMCB2YWx1ZQorICAgICAgKgorICAgICBkIGN1cmxfc2hhcmVfc3RyZXJyb3JfY2NzaWQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICogICBleHRwcm9jKCdjdXJsX3NoYXJlX3N0cmVycm9yX2Njc2lkJykgY29uc3QgY2hhciAqCisgICAgIGQgIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMU0hjb2RlKQorICAgICBkICBjY3NpZCAgICAgICAgICAgICAgICAgICAgICAgIDEwdSAwIHZhbHVlCisgICAgICAqCisgICAgIGQgY3VybF9tdWx0aV9zdHJlcnJvcl9jY3NpZC4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfbXVsdGlfc3RyZXJyb3JfY2NzaWQnKSBjaGFyICoKKyAgICAgZCAgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKENVUkxNY29kZSkKKyAgICAgZCAgY2NzaWQgICAgICAgICAgICAgICAgICAgICAgICAxMHUgMCB2YWx1ZQorICAgICAgKgorICAgICBkIGN1cmxfZWFzeV9nZXRpbmZvX2Njc2lkLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIHByICAgICAgICAgICAgICAgICAgZXh0cHJvYygnY3VybF9lYXN5X2dldGluZm9fY2NzaWQnKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoQ1VSTGNvZGUpCisgICAgIGQgIGN1cmwgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkwgKgorICAgICBkICBpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoQ1VSTElORk8pCisgICAgIGQgIHN0cmluZ2FyZyAgICAgICAgICAgICAgICAgICAgICAqICAgb3B0aW9ucygqbm9wYXNzKSAgICAgICAgICAgICAgICAgICAgIGNoYXIgKgorICAgICBkICBjY3NpZCAgICAgICAgICAgICAgICAgICAgICAgIDEwdSAwIHZhbHVlIG9wdGlvbnMoKm5vcGFzcykKKyAgICAgICoKKyAgICAgZCBjdXJsX2Zvcm1hZGRfY2NzaWQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgcHIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdjdXJsX2Zvcm1hZGRfY2NzaWQnKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoQ1VSTEZPUk1jb2RlKQorICAgICBkICBodHRwcG9zdCAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX2h0dHBwb3N0ICoKKyAgICAgZCAgbGFzdHBvc3QgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9odHRwcG9zdCAqCisgICAgIGQgIG9wdGlvbjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShDVVJMRk9STW9wdGlvbikgICAgICAgICAgIENVUkxGT1JNX0FSUkFZCisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucygqbm9wYXNzKQorICAgICBkICBvYmplY3QxICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZzogKm5vcGFzcykKKyAgICAgZCAgb3B0aW9uMiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKENVUkxGT1JNb3B0aW9uKSAgICAgICAgICAgQ1VSTEZPUk1fRU5ECisgICAgIGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucygqbm9wYXNzKQorICAgICAgKgorICAgICBkIGN1cmxfZm9ybWdldF9jY3NpZC4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgIDEwaSAwIGV4dHByb2MoJ2N1cmxfZm9ybWdldF9jY3NpZCcpCisgICAgIGQgIGZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfaHR0cHBvc3QgKgorICAgICBkICBhcmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlCisgICAgIGQgIGFwcGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShjdXJsX2Zvcm1nZXRfY2FsbGJhY2spCisgICAgIGQgIGNjc2lkICAgICAgICAgICAgICAgICAgICAgICAgMTB1IDAgdmFsdWUKKyAgICAgICoKKyAgICAgZCBjdXJsX2Zvcm1fbG9uZ192YWx1ZS4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2N1cmxfZm9ybV9sb25nX3ZhbHVlJykKKyAgICAgZCAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9odHRwcG9zdCAqCisgICAgICAqCisgICAgIGQgY3VybF9lYXN5X3NldG9wdF9jY3NpZC4uLgorICAgICBkICAgICAgICAgICAgICAgICBwciAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2N1cmxfZWFzeV9zZXRvcHRfY2NzaWQnKQorICAgICBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoQ1VSTGNvZGUpCisgICAgIGQgIGN1cmwgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkwgKgorICAgICBkICBvcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoQ1VSTG9wdGlvbikKKyAgICAgZCAgb2JqZWN0YXJnICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmc6ICpub3Bhc3MpCisgICAgIGQgIGNjc2lkICAgICAgICAgICAgICAgICAgICAgICAgMTB1IDAgdmFsdWUgb3B0aW9ucygqbm9wYXNzKQorICAgICAgKgorICAgICAgL2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9pbml0c2NyaXB0LnNoIGIvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvaW5pdHNjcmlwdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2U5NzgxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvaW5pdHNjcmlwdC5zaApAQCAtMCwwICsxLDE3NiBAQAorIyEvYmluL3NoCisKKworY2FzZSAiJHtTQ1JJUFRESVJ9IiBpbgorLyopICAgICA7OworKikgICAgICBTQ1JJUFRESVI9ImBwd2RgLyR7U0NSSVBURElSfSIKK2VzYWMKKword2hpbGUgdHJ1ZQorZG8gICAgICBjYXNlICIke1NDUklQVERJUn0iIGluCisgICAgICAgICovLikgICAgU0NSSVBURElSPSIke1NDUklQVERJUiUvLn0iOzsKKyAgICAgICAgKikgICAgICBicmVhazs7CisgICAgICAgIGVzYWMKK2RvbmUKKworIyAgVGhlIHNjcmlwdCBkaXJlY3RvcnkgaXMgc3VwcG9zZWQgdG8gYmUgaW4gJFRPUERJUi9wYWNrYWdlcy9vczQwMC4KKworVE9QRElSPWBkaXJuYW1lICIke1NDUklQVERJUn0iYAorVE9QRElSPWBkaXJuYW1lICIke1RPUERJUn0iYAorZXhwb3J0IFNDUklQVERJUiBUT1BESVIKKworIyAgRXh0cmFjdCB0aGUgU09OQU1FIGZyb20gdGhlIGxpYnJhcnkgbWFrZWZpbGUuCisKK1NPTkFNRT1gc2VkIC1lICcvXlZFUlNJT05JTkZPPS8hZCcgLWUgJ3MvXi4qIFwoWzAtOV0qXCk6LiokL1wxLycgLWUgJ3EnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgIiR7VE9QRElSfS9saWIvTWFrZWZpbGUuYW0iYAorZXhwb3J0IFNPTkFNRQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICAgICAgICAgICAgICAgICAgICAgICBUdW5hYmxlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1RBUkdFVExJQj0nQ1VSTCcgICAgICAgICAgICAgICAgIyBUYXJnZXQgT1MvNDAwIHByb2dyYW0gbGlicmFyeQorU1RBVEJORERJUj0nQ1VSTF9BJyAgICAgICAgICAgICAjIFN0YXRpYyBiaW5kaW5nIGRpcmVjdG9yeS4KK0RZTkJORERJUj0nQ1VSTCcgICAgICAgICAgICAgICAgIyBEeW5hbWljIGJpbmRpbmcgZGlyZWN0b3J5LgorU1JWUEdNPSJDVVJMLiR7U09OQU1FfSIgICAgICAgICAjIFNlcnZpY2UgcHJvZ3JhbS4KK1RHVENDU0lEPSc1MDAnICAgICAgICAgICAgICAgICAgIyBUYXJnZXQgQ0NTSUQgb2Ygb2JqZWN0cworREVCVUc9JypBTEwnICAgICAgICAgICAgICAgICAgICAjIERlYnVnIGxldmVsCitPUFRJTUlaRT0nMTAnICAgICAgICAgICAgICAgICAgICMgT3B0aW1pc2F0aW9uIGxldmVsCitPVVRQVVQ9JypOT05FJyAgICAgICAgICAgICAgICAgICMgQ29tcGlsYXRpb24gb3V0cHV0IG9wdGlvbi4KK1RHVFJMUz0nVjVSM00wJyAgICAgICAgICAgICAgICAgIyBUYXJnZXQgT1MgcmVsZWFzZQorCitleHBvcnQgVEFSR0VUTElCIFNUQVRCTkRESVIgRFlOQk5ERElSIFNSVlBHTSBUR1RDQ1NJRCBERUJVRyBPUFRJTUlaRSBPVVRQVVQKK2V4cG9ydCBUR1RSTFMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICAgICAgIE5lZWQgdG8gZ2V0IHRoZSB2ZXJzaW9uIGRlZmluaXRpb25zLgorCitMSUJDVVJMX1ZFUlNJT049YGdyZXAgJ14jZGVmaW5lICAqTElCQ1VSTF9WRVJTSU9OICcgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAiJHtUT1BESVJ9L2luY2x1ZGUvY3VybC9jdXJsdmVyLmgiICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgc2VkICdzLy4qIlwoLipcKSIuKi9cMS8nYAorTElCQ1VSTF9WRVJTSU9OX01BSk9SPWBncmVwICdeI2RlZmluZSAgKkxJQkNVUkxfVkVSU0lPTl9NQUpPUiAnICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIiR7VE9QRElSfS9pbmNsdWRlL2N1cmwvY3VybHZlci5oIiAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgIHNlZCAncy9eI2RlZmluZSAgKkxJQkNVUkxfVkVSU0lPTl9NQUpPUiAgKlwoW14gXSpcKS4qL1wxLydgCitMSUJDVVJMX1ZFUlNJT05fTUlOT1I9YGdyZXAgJ14jZGVmaW5lICAqTElCQ1VSTF9WRVJTSU9OX01JTk9SICcgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAiJHtUT1BESVJ9L2luY2x1ZGUvY3VybC9jdXJsdmVyLmgiICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgc2VkICdzL14jZGVmaW5lICAqTElCQ1VSTF9WRVJTSU9OX01JTk9SICAqXChbXiBdKlwpLiovXDEvJ2AKK0xJQkNVUkxfVkVSU0lPTl9QQVRDSD1gZ3JlcCAnXiNkZWZpbmUgICpMSUJDVVJMX1ZFUlNJT05fUEFUQ0ggJyAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIke1RPUERJUn0vaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaCIgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXiNkZWZpbmUgICpMSUJDVVJMX1ZFUlNJT05fUEFUQ0ggICpcKFteIF0qXCkuKi9cMS8nYAorTElCQ1VSTF9WRVJTSU9OX05VTT1gZ3JlcCAnXiNkZWZpbmUgICpMSUJDVVJMX1ZFUlNJT05fTlVNICcgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIiR7VE9QRElSfS9pbmNsdWRlL2N1cmwvY3VybHZlci5oIiAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgIHNlZCAncy9eI2RlZmluZSAgKkxJQkNVUkxfVkVSU0lPTl9OVU0gICoweFwoW14gXSpcKS4qL1wxLydgCitMSUJDVVJMX1RJTUVTVEFNUD1gZ3JlcCAnXiNkZWZpbmUgICpMSUJDVVJMX1RJTUVTVEFNUCAnICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAiJHtUT1BESVJ9L2luY2x1ZGUvY3VybC9jdXJsdmVyLmgiICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgc2VkICdzLy4qIlwoLipcKSIuKi9cMS8nYAorZXhwb3J0IExJQkNVUkxfVkVSU0lPTgorZXhwb3J0IExJQkNVUkxfVkVSU0lPTl9NQUpPUiBMSUJDVVJMX1ZFUlNJT05fTUlOT1IgTElCQ1VSTF9WRVJTSU9OX1BBVENICitleHBvcnQgTElCQ1VSTF9WRVJTSU9OX05VTSBMSUJDVVJMX1RJTUVTVEFNUAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgICAgICAgICAgICAgICAgICAgICAgT1MvNDAwIHNwZWNpZmljIGRlZmluaXRpb25zLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTElCSUZTTkFNRT0iL1FTWVMuTElCLyR7VEFSR0VUTElCfS5MSUIiCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VkdXJlcy4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgICAgICAgYWN0aW9uX25lZWRlZCBkZXN0IFtzcmNdCisjCisjICAgICAgIGRlc3QgaXMgYW4gb2JqZWN0IHRvIGJ1aWxkCisjICAgICAgIGlmIHNwZWNpZmllZCwgc3JjIGlzIGFuIG9iamVjdCBvbiB3aGljaCBkZXN0IGRlcGVuZHMuCisjCisjICAgICAgIGV4aXQgMCAoc3VjY2VlZHMpIGlmIHNvbWUgYWN0aW9uIGhhcyB0byBiZSB0YWtlbiwgZWxzZSAxLgorCithY3Rpb25fbmVlZGVkKCkKKworeworICAgICAgICBbICEgLWUgIiR7MX0iIF0gJiYgcmV0dXJuIDAKKyAgICAgICAgWyAiJHsyfSIgXSB8fCByZXR1cm4gMQorICAgICAgICBbICIkezF9IiAtb3QgIiR7Mn0iIF0gJiYgcmV0dXJuIDAKKyAgICAgICAgcmV0dXJuIDEKK30KKworCisjICAgICAgIG1ha2VfbW9kdWxlIG1vZHVsZV9uYW1lIHNvdXJjZV9uYW1lIFthZGRpdGlvbmFsX2RlZmluaXRpb25zXQorIworIyAgICAgICBDb21waWxlIHNvdXJjZSBuYW1lIGludG8gQVNDSUkgbW9kdWxlIGlmIG5lZWRlZC4KKyMgICAgICAgQXMgc2lkZSBlZmZlY3QsIGFwcGVuZCB0aGUgbW9kdWxlIG5hbWUgdG8gdmFyaWFibGUgTU9EVUxFUy4KKyMgICAgICAgU2V0IExJTksgdG8gIllFUyIgaWYgdGhlIG1vZHVsZSBoYXMgYmVlbiBjb21waWxlZC4KKworbWFrZV9tb2R1bGUoKQorCit7CisgICAgICAgIE1PRFVMRVM9IiR7TU9EVUxFU30gJHsxfSIKKyAgICAgICAgTU9ESUZTTkFNRT0iJHtMSUJJRlNOQU1FfS8kezF9Lk1PRFVMRSIKKyAgICAgICAgYWN0aW9uX25lZWRlZCAiJHtNT0RJRlNOQU1FfSIgIiR7Mn0iIHx8IHJldHVybiAwOworCisgICAgICAgICMgICAgICAgI3ByYWdtYSBjb252ZXJ0IGhhcyB0byBiZSBpbiB0aGUgc291cmNlIGZpbGUgaXRzZWxmLCBpLmUuCisgICAgICAgICMgICAgICAgICAgICAgICBwdXR0aW5nIGl0IGluIGFuIGluY2x1ZGUgZmlsZSBtYWtlcyBpdCBvbmx5IGFjdGl2ZQorICAgICAgICAjICAgICAgICAgICAgICAgZm9yIHRoYXQgaW5jbHVkZSBmaWxlLgorICAgICAgICAjICAgICAgIFRodXMgd2UgYnVpbGQgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIHRoZSBwcmFnbWEgcHJlcGVuZGVkIHRvCisgICAgICAgICMgICAgICAgICAgICAgICB0aGUgc291cmNlIGZpbGUgYW5kIHdlIGNvbXBpbGUgdGhhdCB0aGVtcG9yYXJ5IGZpbGUuCisKKyAgICAgICAgZWNobyAiI2xpbmUgMSBcIiR7Mn1cIiIgPiBfX3RtcHNyY2YuYworICAgICAgICBlY2hvICIjcHJhZ21hIGNvbnZlcnQoODE5KSIgPj4gX190bXBzcmNmLmMKKyAgICAgICAgZWNobyAiI2xpbmUgMSIgPj4gX190bXBzcmNmLmMKKyAgICAgICAgY2F0ICIkezJ9IiA+PiBfX3RtcHNyY2YuYworICAgICAgICBDTUQ9IkNSVENNT0QgTU9EVUxFKCR7VEFSR0VUTElCfS8kezF9KSBTUkNTVE1GKCdfX3RtcHNyY2YuYycpIgorIyAgICAgICBDTUQ9IiR7Q01EfSBTWVNJRkNPUFQoKklGUzY0SU8pIE9QVElPTigqSU5DRElSRklSU1QgKlNIT1dJTkMgKlNIT1dTWVMpIgorICAgICAgICBDTUQ9IiR7Q01EfSBTWVNJRkNPUFQoKklGUzY0SU8pIE9QVElPTigqSU5DRElSRklSU1QpIgorICAgICAgICBDTUQ9IiR7Q01EfSBMT0NBTEVUWVBFKCpMT0NBTEUpIgorICAgICAgICBDTUQ9IiR7Q01EfSBJTkNESVIoJy9xaWJtL3Byb2RkYXRhL3FhZHJ0L2luY2x1ZGUnIgorICAgICAgICBDTUQ9IiR7Q01EfSAnJHtUT1BESVJ9L2luY2x1ZGUvY3VybCcgJyR7VE9QRElSfS9pbmNsdWRlJyIKKyAgICAgICAgQ01EPSIke0NNRH0gJyR7VE9QRElSfS9wYWNrYWdlcy9PUzQwMCcgJHtJTkNMVURFU30pIgorICAgICAgICBDTUQ9IiR7Q01EfSBUR1RDQ1NJRCgke1RHVENDU0lEfSkgVEdUUkxTKCR7VEdUUkxTfSkiCisgICAgICAgIENNRD0iJHtDTUR9IE9VVFBVVCgke09VVFBVVH0pIgorICAgICAgICBDTUQ9IiR7Q01EfSBPUFRJTUlaRSgke09QVElNSVpFfSkiCisgICAgICAgIENNRD0iJHtDTUR9IERCR1ZJRVcoJHtERUJVR30pIgorCisgICAgICAgIGlmIFsgIiR7M30iIF0KKyAgICAgICAgdGhlbiAgICBDTUQ9IiR7Q01EfSBERUZJTkUoJHszfSkiCisgICAgICAgIGZpCisKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCisgICAgICAgIHJtIC1mIF9fdG1wc3JjZi5jCisgICAgICAgIExJTks9WUVTCit9CisKKworIyAgICAgICBEZXRlcm1pbmUgREIyIG9iamVjdCBuYW1lIGZyb20gSUZTIG5hbWUuCisKK2RiMl9uYW1lKCkKKworeworICAgICAgICBiYXNlbmFtZSAiJHsxfSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB0ciAnYS16LScgJ0EtWl8nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICBzZWQgLWUgJ3MvXC4uKi8vJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgLWUgJ3MvXlwoLi4uLi4uLi4uLlwpLiovXDEvJworfQorCisKKyMgICAgICAgQ29weSBJRlMgZmlsZSByZXBsYWNpbmcgdmVyc2lvbiBpbmZvLgorCit2ZXJzaW9uZWRfY29weSgpCisKK3sKKyAgICAgICAgc2VkIC1lICJzL0BMSUJDVVJMX1ZFUlNJT05ALyR7TElCQ1VSTF9WRVJTSU9OfS9nIiAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIC1lICJzL0BMSUJDVVJMX1ZFUlNJT05fTUFKT1JALyR7TElCQ1VSTF9WRVJTSU9OX01BSk9SfS9nIiAgIFwKKyAgICAgICAgICAgIC1lICJzL0BMSUJDVVJMX1ZFUlNJT05fTUlOT1JALyR7TElCQ1VSTF9WRVJTSU9OX01JTk9SfS9nIiAgIFwKKyAgICAgICAgICAgIC1lICJzL0BMSUJDVVJMX1ZFUlNJT05fUEFUQ0hALyR7TElCQ1VSTF9WRVJTSU9OX1BBVENIfS9nIiAgIFwKKyAgICAgICAgICAgIC1lICJzL0BMSUJDVVJMX1ZFUlNJT05fTlVNQC8ke0xJQkNVUkxfVkVSU0lPTl9OVU19L2ciICAgICAgIFwKKyAgICAgICAgICAgIC1lICJzL0BMSUJDVVJMX1RJTUVTVEFNUEAvJHtMSUJDVVJMX1RJTUVTVEFNUH0vZyIgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA8ICIkezF9IiA+ICIkezJ9IgorfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvbWFrZS1pbmNsdWRlLnNoIGIvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvbWFrZS1pbmNsdWRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNGVlMmYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9tYWtlLWluY2x1ZGUuc2gKQEAgLTAsMCArMSw3MiBAQAorIyEvYmluL3NoCisjCisjICAgICAgIEluc3RhbGxhdGlvbiBvZiB0aGUgaW5jbHVkZSBmaWxlcyBpbiB0aGUgT1MvNDAwIGxpYnJhcnkuCisjCisKK1NDUklQVERJUj1gZGlybmFtZSAiJHswfSJgCisuICIke1NDUklQVERJUn0vaW5pdHNjcmlwdC5zaCIKK2NkICIke1RPUERJUn0vaW5jbHVkZSIKKworCisjCVByb2R1Y2UgdGhlIGN1cmxidWlsZC5oIGluY2x1ZGUgZmlsZSBpZiBub3QgeWV0IGluIGRpc3RyaWJ1dGlvbiAoQ1ZTKS4KKworaWYgYWN0aW9uX25lZWRlZCBjdXJsL2N1cmxidWlsZC5oCit0aGVuCWlmIGFjdGlvbl9uZWVkZWQgY3VybC9jdXJsYnVpbGQuaCBjdXJsL2N1cmxidWlsZC5oLmRpc3QKKwl0aGVuCWNwIC1wIGN1cmwvY3VybGJ1aWxkLmguZGlzdCBjdXJsL2N1cmxidWlsZC5oCisJZmkKK2ZpCisKKworIyAgICAgICBDcmVhdGUgdGhlIE9TLzQwMCBzb3VyY2UgcHJvZ3JhbSBmaWxlIGZvciB0aGUgaW5jbHVkZSBmaWxlcy4KKworU1JDUEY9IiR7TElCSUZTTkFNRX0vSC5GSUxFIgorCitpZiBhY3Rpb25fbmVlZGVkICIke1NSQ1BGfSIKK3RoZW4gICAgQ01EPSJDUlRTUkNQRiBGSUxFKCR7VEFSR0VUTElCfS9IKSBSQ0RMRU4oMTEyKSIKKyAgICAgICAgQ01EPSIke0NNRH0gQ0NTSUQoJHtUR1RDQ1NJRH0pIFRFWFQoJ2N1cmw6IEhlYWRlciBmaWxlcycpIgorICAgICAgICBzeXN0ZW0gIiR7Q01EfSIKK2ZpCisKKworIyAgICAgICBFbnVtZXJhdGlvbiB2YWx1ZXMgYXJlIHVzZWQgYXMgdmFfYXJnIHRhZ2ZpZWxkcywgc28gdGhleSBNVVNUIGJlCisjICAgICAgICAgICAgICAgaW50ZWdlcnMuCisKK2NvcHlfaGZpbGUoKQorCit7CisJZGVzdGZpbGU9IiR7MX0iCisJc3JjZmlsZT0iJHsyfSIKKwlzaGlmdAorCXNoaWZ0CisgICAgICAgIHNlZCAtZSAnMWlcCisjcHJhZ21hIGVudW0oaW50KVwKKycgIiR7QH0iIC1lICckYVwKKyNwcmFnbWEgZW51bShwb3ApXAorJyA8ICIke3NyY2ZpbGV9IiA+ICIke2Rlc3RmaWxlfSIKK30KKworIyAgICAgICBDb3B5IHRoZSBoZWFkZXIgZmlsZXMuCisKK2ZvciBIRklMRSBpbiBjdXJsLyouaCAke1NDUklQVERJUn0vY2NzaWRjdXJsLmgKK2RvICAgICAgREVTVD0iJHtTUkNQRn0vYGRiMl9uYW1lIFwiJHtIRklMRX1cImAuTUJSIgorICAgICAgICBpZiBhY3Rpb25fbmVlZGVkICIke0RFU1R9IiAiJHtIRklMRX0iCisgICAgICAgIHRoZW4gICAgY29weV9oZmlsZSAiJHtERVNUfSIgIiR7SEZJTEV9IgorICAgICAgICBmaQorZG9uZQorCisKKyMgICAgICAgQ29weSB0aGUgSUxFL1JQRyBpbmNsdWRlIGZpbGUsIHNldHRpbmctdXAgdmVyc2lvbiBudW1iZXIuCisKKyAgICAgICAgdmVyc2lvbmVkX2NvcHkgIiR7U0NSSVBURElSfS9jdXJsLmluYy5pbiIgIiR7U1JDUEZ9L0NVUkwuSU5DLk1CUiIKKworCisjCUR1cGxpY2F0ZSBmaWxlIEggYXMgQ1VSTCB0byBzdXBwb3J0IG1vcmUgaW5jbHVkZSBwYXRoIGZvcm1zLgorCitpZiBhY3Rpb25fbmVlZGVkICIke0xJQklGU05BTUV9L0NVUkwuRklMRSIKK3RoZW4JOgorZWxzZQlzeXN0ZW0gIkRMVEYgRklMRSgke1RBUkdFVExJQn0vQ1VSTCkiCitmaQorCitDTUQ9IkNSVERVUE9CSiBPQkooSCkgRlJPTUxJQigke1RBUkdFVExJQn0pIE9CSlRZUEUoKkZJTEUpIFRPTElCKCpGUk9NTElCKSIKK0NNRD0iJHtDTUR9IE5FV09CSihDVVJMKSBEQVRBKCpZRVMpIgorc3lzdGVtICIke0NNRH0iCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9tYWtlLWxpYi5zaCBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL09TNDAwL21ha2UtbGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YzQ3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9tYWtlLWxpYi5zaApAQCAtMCwwICsxLDE5MSBAQAorIyEvYmluL3NoCisjCisjICAgICAgIGxpYmN1cmwgY29tcGlsYXRpb24gc2NyaXB0IGZvciB0aGUgT1MvNDAwLgorIworCitTQ1JJUFRESVI9YGRpcm5hbWUgIiR7MH0iYAorLiAiJHtTQ1JJUFRESVJ9L2luaXRzY3JpcHQuc2giCitjZCAiJHtUT1BESVJ9L2xpYiIKKworCisjICAgICAgQ3JlYXRlIGFuZCBjb21waWxlIHRoZSBpZGVudGlmaWNhdGlvbiBzb3VyY2UgZmlsZS4KKworZWNobyAnI3ByYWdtYSBjb21tZW50KHVzZXIsICJsaWJjdXJsIHZlcnNpb24gJyIke0xJQkNVUkxfVkVSU0lPTn0iJyIpJyA+IG9zNDAwLmMKK2VjaG8gJyNwcmFnbWEgY29tbWVudCh1c2VyLCBfX0RBVEVfXyknID4+IG9zNDAwLmMKK2VjaG8gJyNwcmFnbWEgY29tbWVudCh1c2VyLCBfX1RJTUVfXyknID4+IG9zNDAwLmMKK2VjaG8gJyNwcmFnbWEgY29tbWVudChjb3B5cmlnaHQsICJDb3B5cmlnaHQgKEMpIDE5OTgtMjAxMSBEYW5pZWwgU3RlbmJlcmcgZXQgYWwuIE9TLzQwMCB2ZXJzaW9uIGJ5IFAuIE1vbm5lcmF0IiknID4+IG9zNDAwLmMKK21ha2VfbW9kdWxlICAgICBPUzQwMCAgICAgICAgICAgb3M0MDAuYworTElOSz0gICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vIG5lZWQgdG8gcmVidWlsZCBzZXJ2aWNlIHByb2dyYW0geWV0LgorTU9EVUxFUz0KKworCisjICAgICAgIEdldCBzb3VyY2UgbGlzdC4KKworQ1NPVVJDRVMoKQorCit7CisgICAgICAgIHNoaWZ0ICAgICAgICAgICAgICAgICAgICMgRHJvcCB0aGUgZXF1YWwgc2lnbi4KKyAgICAgICAgQ1NPVVJDRVM9IiQqIiAgICAgICAgICAgIyBHZXQgdGhlIGZpbGUgbmFtZXMuCit9CisKK0hIRUFERVJTKCkKKworeworICAgICAgICBzaGlmdCAgICAgICAgICAgICAgICAgICAjIERyb3AgdGhlIGVxdWFsIHNpZ24uCisgICAgICAgIEhIRUFERVJTPSIkKiIgICAgICAgICAgICMgR2V0IHRoZSBmaWxlIG5hbWVzLgorfQorCisuIE1ha2VmaWxlLmluYworCisKKyMgICAgICAgQ29tcGlsZSB0aGUgc291cmNlcyBpbnRvIG1vZHVsZXMuCisKK0lOQ0xVREVTPSInYHB3ZGAnIgorCittYWtlX21vZHVsZSAgICAgT1M0MDBTWVMgICAgICAgICIke1NDUklQVERJUn0vb3M0MDBzeXMuYyIKK21ha2VfbW9kdWxlICAgICBDQ1NJRENVUkwgICAgICAgIiR7U0NSSVBURElSfS9jY3NpZGN1cmwuYyIKKworZm9yIFNSQyBpbiAke0NTT1VSQ0VTfQorZG8gICAgICBNT0RVTEU9YGRiMl9uYW1lICIke1NSQ30iYAorICAgICAgICBtYWtlX21vZHVsZSAiJHtNT0RVTEV9IiAiJHtTUkN9IgorZG9uZQorCisKKyMgICAgICAgSWYgbmVlZGVkLCAocmUpY3JlYXRlIHRoZSBzdGF0aWMgYmluZGluZyBkaXJlY3RvcnkuCisKK2lmIGFjdGlvbl9uZWVkZWQgIiR7TElCSUZTTkFNRX0vJHtTVEFUQk5ERElSfS5CTkRESVIiCit0aGVuICAgIExJTks9WUVTCitmaQorCitpZiBbICIke0xJTkt9IiBdCit0aGVuICAgIHJtIC1yZiAiJHtMSUJJRlNOQU1FfS8ke1NUQVRCTkRESVJ9LkJORERJUiIKKyAgICAgICAgQ01EPSJDUlRCTkRESVIgQk5ERElSKCR7VEFSR0VUTElCfS8ke1NUQVRCTkRESVJ9KSIKKyAgICAgICAgQ01EPSIke0NNRH0gVEVYVCgnTGliQ3VybCBBUEkgc3RhdGljIGJpbmRpbmcgZGlyZWN0b3J5JykiCisgICAgICAgIHN5c3RlbSAiJHtDTUR9IgorCisgICAgICAgIGZvciBNT0RVTEUgaW4gJHtNT0RVTEVTfQorICAgICAgICBkbyAgICAgIENNRD0iQUREQk5ERElSRSBCTkRESVIoJHtUQVJHRVRMSUJ9LyR7U1RBVEJORERJUn0pIgorICAgICAgICAgICAgICAgIENNRD0iJHtDTUR9IE9CSigoJHtUQVJHRVRMSUJ9LyR7TU9EVUxFfSAqTU9EVUxFKSkiCisgICAgICAgICAgICAgICAgc3lzdGVtICIke0NNRH0iCisgICAgICAgIGRvbmUKK2ZpCisKKworIyAgICAgICBUaGUgZXhwb3J0YXRpb24gZmlsZSBmb3Igc2VydmljZSBwcm9ncmFtIGNyZWF0aW9uIG11c3QgYmUgaW4gYSBEQjIKKyMgICAgICAgICAgICAgICBzb3VyY2UgZmlsZSwgc28gbWFrZSBzdXJlIGl0IGV4aXN0cy4KKworaWYgYWN0aW9uX25lZWRlZCAiJHtMSUJJRlNOQU1FfS9UT09MUy5GSUxFIgordGhlbiAgICBDTUQ9IkNSVFNSQ1BGIEZJTEUoJHtUQVJHRVRMSUJ9L1RPT0xTKSBSQ0RMRU4oMTEyKSIKKyAgICAgICAgQ01EPSIke0NNRH0gVEVYVCgnY3VybDogYnVpbGQgdG9vbHMnKSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCitmaQorCisKKyMgICAgICAgR2F0aGVyIHRoZSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorCitFWFBPUlRTPWBncmVwICdeQ1VSTF9FWFRFUk5bIAldJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAiJHtUT1BESVJ9Ii9pbmNsdWRlL2N1cmwvKi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAiJHtTQ1JJUFRESVJ9L2Njc2lkY3VybC5oIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgc2VkIC1lICdzL14uKkNVUkxfRVhURVJOWyAJXVwoLipcKSguKiQvXDEvJyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgLWUgJ3MvWyAJXSokLy8nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIC1lICdzL14uKlsgCV1bIAldKi8vJyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAtZSAncy9eXCovLycgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAtZSAncy8oXCguKlwpKS9cMS8nYAorCisjICAgICAgIENyZWF0ZSB0aGUgc2VydmljZSBwcm9ncmFtIGV4cG9ydGF0aW9uIGZpbGUgaW4gREIyIG1lbWJlciBpZiBuZWVkZWQuCisKK0JTRj0iJHtMSUJJRlNOQU1FfS9UT09MUy5GSUxFL0JORFNSQy5NQlIiCisKK2lmIGFjdGlvbl9uZWVkZWQgIiR7QlNGfSIgTWFrZWZpbGUuYW0KK3RoZW4gICAgTElOSz1ZRVMKK2ZpCisKK2lmIFsgIiR7TElOS30iIF0KK3RoZW4gICAgZWNobyAiIFNUUlBHTUVYUCBQR01MVkwoKkNVUlJFTlQpIFNJR05BVFVSRSgnTElCQ1VSTF8ke1NPTkFNRX0nKSIgXAorICAgICAgICAgICAgPiAiJHtCU0Z9IgorICAgICAgICBmb3IgRVhQT1JUIGluICR7RVhQT1JUU30KKyAgICAgICAgZG8gICAgICBlY2hvICcgRVhQT1JUICAgIFNZTUJPTCgiJyIke0VYUE9SVH0iJyIpJyA+PiAiJHtCU0Z9IgorICAgICAgICBkb25lCisKKyAgICAgICAgZWNobyAnIEVORFBHTUVYUCcgPj4gIiR7QlNGfSIKK2ZpCisKKworIyAgICAgICBCdWlsZCB0aGUgc2VydmljZSBwcm9ncmFtIGlmIG5lZWRlZC4KKworaWYgYWN0aW9uX25lZWRlZCAiJHtMSUJJRlNOQU1FfS8ke1NSVlBHTX0uU1JWUEdNIgordGhlbiAgICBMSU5LPVlFUworZmkKKworaWYgWyAiJHtMSU5LfSIgXQordGhlbiAgICBDTUQ9IkNSVFNSVlBHTSBTUlZQR00oJHtUQVJHRVRMSUJ9LyR7U1JWUEdNfSkiCisgICAgICAgIENNRD0iJHtDTUR9IFNSQ0ZJTEUoJHtUQVJHRVRMSUJ9L1RPT0xTKSBTUkNNQlIoQk5EU1JDKSIKKyAgICAgICAgQ01EPSIke0NNRH0gTU9EVUxFKCR7VEFSR0VUTElCfS9PUzQwMCkiCisgICAgICAgIENNRD0iJHtDTUR9IEJORERJUigke1RBUkdFVExJQn0vJHtTVEFUQk5ERElSfSkiCisgICAgICAgIENNRD0iJHtDTUR9IEJORFNSVlBHTShRQURSVFRTIFFHTERDTE5UIFFHTERCUkRSKSIKKyAgICAgICAgQ01EPSIke0NNRH0gVEVYVCgnY3VybCBBUEkgbGlicmFyeScpIgorICAgICAgICBDTUQ9IiR7Q01EfSBUR1RSTFMoJHtUR1RSTFN9KSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCisgICAgICAgIExJTks9WUVTCitmaQorCisKKyMgICAgICAgSWYgbmVlZGVkLCAocmUpY3JlYXRlIHRoZSBkeW5hbWljIGJpbmRpbmcgZGlyZWN0b3J5LgorCitpZiBhY3Rpb25fbmVlZGVkICIke0xJQklGU05BTUV9LyR7RFlOQk5ERElSfS5CTkRESVIiCit0aGVuICAgIExJTks9WUVTCitmaQorCitpZiBbICIke0xJTkt9IiBdCit0aGVuICAgIHJtIC1yZiAiJHtMSUJJRlNOQU1FfS8ke0RZTkJORERJUn0uQk5ERElSIgorICAgICAgICBDTUQ9IkNSVEJORERJUiBCTkRESVIoJHtUQVJHRVRMSUJ9LyR7RFlOQk5ERElSfSkiCisgICAgICAgIENNRD0iJHtDTUR9IFRFWFQoJ0xpYkN1cmwgQVBJIGR5bmFtaWMgYmluZGluZyBkaXJlY3RvcnknKSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCisgICAgICAgIENNRD0iQUREQk5ERElSRSBCTkRESVIoJHtUQVJHRVRMSUJ9LyR7RFlOQk5ERElSfSkiCisgICAgICAgIENNRD0iJHtDTUR9IE9CSigoKkxJQkwvJHtTUlZQR019ICpTUlZQR00pKSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCitmaQorCisKKyMgICAgICAgUmVidWlsZCB0aGUgZm9ybWRhdGEgdGVzdCBpZiBuZWVkZWQuCisKK2lmIFsgIiR7VEVTVF9GT1JNREFUQX0iIF0KK3RoZW4gICAgTU9EVUxFUz0KKyAgICAgICAgbWFrZV9tb2R1bGUgVEZPUk1EQVRBICAgZm9ybWRhdGEuYyAgICAgICInX0ZPUk1fREVCVUcnICdDVVJMREVCVUcnIgorICAgICAgICBtYWtlX21vZHVsZSBUU1RSRVFVQUwgICBzdHJlcXVhbC5jICAgICAgIidfRk9STV9ERUJVRycgJ0NVUkxERUJVRyciCisgICAgICAgIG1ha2VfbW9kdWxlIFRNRU1ERUJVRyAgIG1lbWRlYnVnLmMgICAgICAiJ19GT1JNX0RFQlVHJyAnQ1VSTERFQlVHJyIKKyAgICAgICAgbWFrZV9tb2R1bGUgVE1QUklOVEYgICAgbXByaW50Zi5jICAgICAgICInX0ZPUk1fREVCVUcnICdDVVJMREVCVUcnIgorICAgICAgICBtYWtlX21vZHVsZSBUU1RSRVJST1IgICBzdHJlcnJvci5jICAgICAgIidfRk9STV9ERUJVRycgJ0NVUkxERUJVRyciCisgICAgICAgICMgICAgICAgVGhlIGZvbGxvd2luZyBtb2R1bGVzIHNob3VsZCBub3QgYmUgbmVlZGVkIChzZWUgY29tbWVudCBpbgorICAgICAgICAjICAgICAgICAgICAgICAgZm9ybWRhdGEuYy4gSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgdW5zYXRpc2ZpZWQKKyAgICAgICAgIyAgICAgICAgICAgICAgIGV4dGVybmFsIHJlZmVyZW5jZXMgbGVhZGluZyBpbiB0aGUgZm9sbG93aW5nCisgICAgICAgICMgICAgICAgICAgICAgICBtb2R1bGVzIHRvIGJlIChyZWN1cnNpdmVseSkgbmVlZGVkLgorICAgICAgICBNT0RVTEVTPSIke01PRFVMRVN9IEVBU1kgU1RSRFVQIFNTTEdFTiBRU1NMIEhPU1RJUCBIT1NUSVA0IEhPU1RJUDYiCisgICAgICAgIE1PRFVMRVM9IiR7TU9EVUxFU30gVVJMIEhBU0ggVFJBTlNGRVIgR0VUSU5GTyBDT09LSUUgU0VOREYgU0VMRUNUIgorICAgICAgICBNT0RVTEVTPSIke01PRFVMRVN9IElORVRfTlRPUCBTSEFSRSBIT1NUVEhSRSBNVUxUSSBMTElTVCBGVFAgSFRUUCIKKyAgICAgICAgTU9EVUxFUz0iJHtNT0RVTEVTfSBIVFRQX0RJR0VTIEhUVFBfQ0hVTksgSFRUUF9ORUdPVCBUSU1FVkFMIEhPU1RTWU4iCisgICAgICAgIE1PRFVMRVM9IiR7TU9EVUxFU30gQ09OTkVDVCBTT0NLUyBQUk9HUkVTUyBFU0NBUEUgSU5FVF9QVE9OIEdFVEVOViIKKyAgICAgICAgTU9EVUxFUz0iJHtNT0RVTEVTfSBESUNUIExEQVAgVEVMTkVUIEZJTEUgVEZUUCBORVRSQyBQQVJTRURBVEUiCisgICAgICAgIE1PRFVMRVM9IiR7TU9EVUxFU30gU1BFRURDSEVDSyBTUExBWSBCQVNFNjQgU0VDVVJJVFkgSUYySVAgTUQ1IgorICAgICAgICBNT0RVTEVTPSIke01PRFVMRVN9IEtSQjUgT1M0MDBTWVMiCisKKyAgICAgICAgUEdNSUZTTkFNRT0iJHtMSUJJRlNOQU1FfS9URk9STURBVEEuUEdNIgorCisgICAgICAgIGlmIGFjdGlvbl9uZWVkZWQgIiR7UEdNSUZTTkFNRX0iCisgICAgICAgIHRoZW4gICAgTElOSz1ZRVMKKyAgICAgICAgZmkKKworICAgICAgICBpZiBbICIke0xJTkt9IiBdCisgICAgICAgIHRoZW4gICAgQ01EPSJDUlRQR00gUEdNKCR7VEFSR0VUTElCfS9URk9STURBVEEpIgorICAgICAgICAgICAgICAgIENNRD0iJHtDTUR9IEVOVE1PRChRQURSVC9RQURSVE1BSU4yKSIKKyAgICAgICAgICAgICAgICBDTUQ9IiR7Q01EfSBNT0RVTEUoIgorCisgICAgICAgICAgICAgICAgZm9yIE1PRFVMRSBpbiAke01PRFVMRVN9CisgICAgICAgICAgICAgICAgZG8gICAgICBDTUQ9IiR7Q01EfSAke1RBUkdFVExJQn0vJHtNT0RVTEV9IgorICAgICAgICAgICAgICAgIGRvbmUKKworICAgICAgICAgICAgICAgIENNRD0iJHtDTUR9ICkgQk5EU1JWUEdNKFFBRFJUVFMpIgorICAgICAgICAgICAgICAgIENNRD0iJHtDTUR9IFRHVFJMUygke1RHVFJMU30pIgorICAgICAgICAgICAgICAgIHN5c3RlbSAiJHtDTUR9IgorICAgICAgICBmaQorZmkKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL09TNDAwL21ha2Utc3JjLnNoIGIvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvbWFrZS1zcmMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwYWUxMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL09TNDAwL21ha2Utc3JjLnNoCkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisjCisjCisjICAgICAgIE5vdCBpbXBsZW1lbnRlZCB5ZXQgb24gT1MvNDAwLgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvbWFrZS10ZXN0cy5zaCBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL09TNDAwL21ha2UtdGVzdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwYjQxMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL09TNDAwL21ha2UtdGVzdHMuc2gKQEAgLTAsMCArMSwxMTYgQEAKKyMhL2Jpbi9zaAorIworIyAgICAgICB0ZXN0cyBjb21waWxhdGlvbiBzY3JpcHQgZm9yIHRoZSBPUy80MDAuCisjCisKKworU0NSSVBURElSPWBkaXJuYW1lICIkezB9ImAKKy4gIiR7U0NSSVBURElSfS9pbml0c2NyaXB0LnNoIgorY2QgIiR7VE9QRElSfS90ZXN0cyIKKworCisjICAgICAgIHRlc3RzIGRpcmVjdG9yeSBub3QgaW1wbGVtZW50ZWQgeWV0LgorCisKKyMgICAgICAgUHJvY2VzcyB0aGUgbGlidGVzdCBzdWJkaXJlY3RvcnkuCisKK2NkIGxpYnRlc3QKKworIyAgICAgICBHZXQgZGVmaW5pdGlvbnMgZnJvbSB0aGUgTWFrZWZpbGUuaW5jIGZpbGUuCisjICAgICAgIFRoZSBgc2VkJyBzdGF0ZW1lbnQgd29ya3MgYXMgZm9sbG93czoKKyMgICAgICAgXyBKb2luIFxubC1zZXBhcmF0ZWQgbGluZXMuCisjICAgICAgIF8gUmV0YWluIG9ubHkgbGluZXMgdGhhdCBiZWdpbnMgd2l0aCAiaWRlbnRpZmllciA9Ii4KKyMgICAgICAgXyBUdXJuIHRoZXNlIGxpbmVzIGludG8gc2hlbGwgdmFyaWFibGUgYXNzaWdubWVudHMuCisKK3RvcF9zcmNkaXI9IiR7VE9QRElSfSIKK2V4cG9ydCB0b3Bfc3JjZGlyCitldmFsICJgc2VkIC1lICc6IGJlZ2luJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC1lICcvXFxcXCQveycgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC1lICdOJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC1lICdzL1xcXFxcXG4vIC8nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC1lICdiIGJlZ2luJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC1lICd9JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC1lICcvXltBLVphLXpfXVtBLVphLXowLTlfXSpbIAldKls9XS9iIGtlZXAnICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLWUgJ2QnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLWUgJzoga2VlcCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLWUgJ3MvWyAJXSo9WyAJXSovPS8nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLWUgJ3MvPVxcKC4qW14gCV1cXClbIAldKiQvPVxcIlxcMVxcIi8nICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtZSAncy9cXCQoXFwoW14pXSpcXCkpLyR7XFwxfS9nJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICA8IE1ha2VmaWxlLmluY2AiCisKKyMgICAgICAgU3BlY2lhbCBjYXNlOiByZWRlZmluZSBjaGtob3N0bmFtZSBjb21waWxhdGlvbiBwYXJhbWV0ZXJzLgorCitjaGtob3N0bmFtZV9TT1VSQ0VTPWNoa2hvc3RuYW1lLmMKK2Noa2hvc3RuYW1lX0xEQUREPWN1cmxfZ2V0aG9zdG5hbWUubworCisjICAgICAgIENvbXBpbGUgYWxsIHByb2dyYW1zLgorIyAgICAgICBUaGUgbGlzdCBpcyBmb3VuZCBpbiB2YXJpYWJsZSAibm9pbnN0X1BST0dSQU1TIgorCitJTkNMVURFUz0iJyR7VE9QRElSfS90ZXN0cy9saWJ0ZXN0JyAnJHtUT1BESVJ9L2xpYiciCisKK2ZvciBQR00gaW4gJHtub2luc3RfUFJPR1JBTVN9CitkbyAgICAgIERCMlBHTT1gZGIyX25hbWUgIiR7UEdNfSJgCisgICAgICAgIFBHTUlGU05BTUU9IiR7TElCSUZTTkFNRX0vJHtEQjJQR019LlBHTSIKKworICAgICAgICAjICAgICAgIEV4dHJhY3QgcHJlcHJvY2Vzc29yIHN5bWJvbCBkZWZpbml0aW9ucyBmcm9tIGNvbXBpbGF0aW9uCisgICAgICAgICMgICAgICAgICAgICAgICBvcHRpb25zIGZvciB0aGUgcHJvZ3JhbS4KKworICAgICAgICBQR01DRkxBR1M9ImBldmFsIGVjaG8gXCJcXCR7JHtQR019X0NGTEFHU31cImAiCisgICAgICAgIFBHTURFRklORVM9CisKKyAgICAgICAgZm9yIEZMQUcgaW4gJHtQR01DRkxBR1N9CisgICAgICAgIGRvICAgICAgY2FzZSAiJHtGTEFHfSIgaW4KKyAgICAgICAgICAgICAgICAtRD8qKSAgIERFRklORT0iYGVjaG8gXCIke0ZMQUd9XCIgfCBzZWQgJ3MvXi4uLy8nYCIKKyAgICAgICAgICAgICAgICAgICAgICAgIFBHTURFRklORVM9IiR7UEdNREVGSU5FU30gJyR7REVGSU5FfSciCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgZG9uZQorCisgICAgICAgICMgICAgICAgIENvbXBpbGUgYWxsIEMgc291cmNlcyBmb3IgdGhlIHByb2dyYW0gaW50byBtb2R1bGVzLgorCisgICAgICAgIFBHTVNPVVJDRVM9ImBldmFsIGVjaG8gXCJcXCR7JHtQR019X1NPVVJDRVN9XCJgIgorICAgICAgICBMSU5LPQorICAgICAgICBNT0RVTEVTPQorCisgICAgICAgIGZvciBTT1VSQ0UgaW4gJHtQR01TT1VSQ0VTfQorICAgICAgICBkbyAgICAgIGNhc2UgIiR7U09VUkNFfSIgaW4KKyAgICAgICAgICAgICAgICAqLmMpICAgICMgICAgICAgU3BlY2lhbCBwcm9jZXNzaW5nIGZvciBsaWJ4eHguYyBmaWxlczogdGhlaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICBtb2R1bGUgbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICBQUk9HUkFNIG5hbWUuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7U09VUkNFfSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYiouYykgTU9EVUxFPSIke0RCMlBHTX0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAqKSAgICAgIE1PRFVMRT1gZGIyX25hbWUgIiR7U09VUkNFfSJgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfbW9kdWxlICIke01PRFVMRX0iICIke1NPVVJDRX0iICIke1BHTURFRklORVN9IgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWN0aW9uX25lZWRlZCAiJHtQR01JRlNOQU1FfSIgIiR7TU9ESUZTTkFNRX0iCisgICAgICAgICAgICAgICAgICAgICAgICB0aGVuICAgIExJTks9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgIGRvbmUKKworICAgICAgICAjICAgICAgIExpbmsgcHJvZ3JhbSBpZiBuZWVkZWQuCisKKyAgICAgICAgaWYgWyAiJHtMSU5LfSIgXQorICAgICAgICB0aGVuICAgIFBHTUxEQUREPSJgZXZhbCBlY2hvIFwiXFwkeyR7UEdNfV9MREFERH1cImAiCisgICAgICAgICAgICAgICAgZm9yIExEQVJHIGluICR7UEdNTERBRER9CisgICAgICAgICAgICAgICAgZG8gICAgICBjYXNlICIke0xEQVJHfSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC0qKSAgICAgOzsgICAgICAgICAgICAgICMgSWdub3JlIG5vbi1tb2R1bGUuCisgICAgICAgICAgICAgICAgICAgICAgICAqKSAgICAgIE1PRFVMRVM9IiR7TU9EVUxFU30gImBkYjJfbmFtZSAiJHtMREFSR30iYAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICBNT0RVTEVTPSJgZWNobyBcIiR7TU9EVUxFU31cIiB8CisgICAgICAgICAgICAgICAgICAgIHNlZCBcInMvW14gXVteIF0qLyR7VEFSR0VUTElCfVwvJi9nXCJgIgorICAgICAgICAgICAgICAgIENNRD0iQ1JUUEdNIFBHTSgke1RBUkdFVExJQn0vJHtEQjJQR019KSIKKyAgICAgICAgICAgICAgICBDTUQ9IiR7Q01EfSBFTlRNT0QoUUFEUlQvUUFEUlRNQUlOMikiCisgICAgICAgICAgICAgICAgQ01EPSIke0NNRH0gTU9EVUxFKCR7TU9EVUxFU30pIgorICAgICAgICAgICAgICAgIENNRD0iJHtDTUR9IEJORFNSVlBHTSgke1RBUkdFVExJQn0vJHtTUlZQR019IFFBRFJUVFMpIgorICAgICAgICAgICAgICAgIENNRD0iJHtDTUR9IFRHVFJMUygke1RHVFJMU30pIgorICAgICAgICAgICAgICAgIHN5c3RlbSAiJHtDTUR9IgorICAgICAgICBmaQorZG9uZQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvbWFrZWZpbGUuc2ggYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9tYWtlZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTY3MjkwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvT1M0MDAvbWFrZWZpbGUuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisjCisjICAgICAgIGN1cmwgY29tcGlsYXRpb24gc2NyaXB0IGZvciB0aGUgT1MvNDAwLgorIworIworIyAgICAgICBUaGlzIGlzIGEgc2hlbGwgc2NyaXB0IHNpbmNlIG1ha2UgaXMgbm90IGEgc3RhbmRhcmQgY29tcG9uZW50IG9mIE9TLzQwMC4KKworU0NSSVBURElSPWBkaXJuYW1lICIkezB9ImAKKy4gIiR7U0NSSVBURElSfS9pbml0c2NyaXB0LnNoIgorY2QgIiR7VE9QRElSfSIKKworCisjICAgICAgIENyZWF0ZSB0aGUgT1MvNDAwIGxpYnJhcnkgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisKK2lmIGFjdGlvbl9uZWVkZWQgIiR7TElCSUZTTkFNRX0iCit0aGVuICAgIENNRD0iQ1JUTElCIExJQigke1RBUkdFVExJQn0pIFRFWFQoJ2N1cmw6IG11bHRpcHJvdG9jb2wgc3VwcG9ydCBBUEknKSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCitmaQorCisKKyMgICAgICAgQ3JlYXRlIHRoZSBET0NTIHNvdXJjZSBmaWxlIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorCitpZiBhY3Rpb25fbmVlZGVkICIke0xJQklGU05BTUV9L0RPQ1MuRklMRSIKK3RoZW4gICAgQ01EPSJDUlRTUkNQRiBGSUxFKCR7VEFSR0VUTElCfS9ET0NTKSBSQ0RMRU4oMTEyKSIKKyAgICAgICAgQ01EPSIke0NNRH0gQ0NTSUQoJHtUR1RDQ1NJRH0pIFRFWFQoJ0RvY3VtZW50YXRpb24gdGV4dHMnKSIKKyAgICAgICAgc3lzdGVtICIke0NNRH0iCitmaQorCisKKyMgICAgICAgQ29weSBzb21lIGRvY3VtZW50YXRpb24gZmlsZXMgaWYgbmVlZGVkLgorCitmb3IgVEVYVCBpbiAiJHtUT1BESVJ9L0NPUFlJTkciICIke1NDUklQVERJUn0vUkVBRE1FLk9TNDAwIiAgICAgICAgICAgICBcCisgICAgIiR7VE9QRElSfS9DSEFOR0VTIiAiJHtUT1BESVJ9L2RvY3MvVEhBTktTIiAiJHtUT1BESVJ9L2RvY3MvRkFRIiAgICBcCisgICAgIiR7VE9QRElSfS9kb2NzL0ZFQVRVUkVTIiAiJHtUT1BESVJ9L2RvY3MvU1NMQ0VSVFMiICAgICAgICAgICAgICAgICBcCisgICAgIiR7VE9QRElSfS9kb2NzL1JFU09VUkNFUyIgIiR7VE9QRElSfS9kb2NzL1ZFUlNJT05TIiAgICAgICAgICAgICAgICBcCisgICAgIiR7VE9QRElSfS9kb2NzL0hJU1RPUlkiCitkbyAgICAgIE1FTUJFUj0iYGJhc2VuYW1lIFwiJHtURVhUfVwiIC5PUzQwMGAiCisgICAgICAgIE1FTUJFUj0iJHtMSUJJRlNOQU1FfS9ET0NTLkZJTEUvYGRiMl9uYW1lIFwiJHtNRU1CRVJ9XCJgLk1CUiIKKworICAgICAgICBpZiBhY3Rpb25fbmVlZGVkICIke01FTUJFUn0iICIke1RFWFR9IgorICAgICAgICB0aGVuICAgIENNRD0iQ1BZIE9CSignJHtURVhUfScpIFRPT0JKKCcke01FTUJFUn0nKSBUT0NDU0lEKCR7VEdUQ0NTSUR9KSIKKyAgICAgICAgICAgICAgICBDTUQ9IiR7Q01EfSBEVEFGTVQoKlRFWFQpIFJFUExBQ0UoKllFUykiCisgICAgICAgICAgICAgICAgc3lzdGVtICIke0NNRH0iCisgICAgICAgIGZpCitkb25lCisKKworIyAgICAgICBCdWlsZCBpbiBlYWNoIGRpcmVjdG9yeS4KKworZm9yIFNVQkRJUiBpbiBpbmNsdWRlIGxpYiBzcmMgdGVzdHMKK2RvICAgICAgIiR7U0NSSVBURElSfS9tYWtlLSR7U1VCRElSfS5zaCIKK2RvbmUKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL09TNDAwL29zNDAwc3lzLmMgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9vczQwMHN5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MjdjZTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9vczQwMHN5cy5jCkBAIC0wLDAgKzEsMTA4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBPUy80MDAgYWRkaXRpb25hbCBzdXBwb3J0LiAqLworCisjaW5jbHVkZSAiY3VybGJ1aWxkLmgiCisjaW5jbHVkZSAiY29uZmlnLW9zNDAwLmgiICAgICAgIC8qIE5vdCBzZXR1cC5oOiB3ZSBvbmx5IG5lZWQgc29tZSBkZWZpbmVzLiAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8cWFkcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWZkZWYgVVNFX1FTT1NTTAorI2luY2x1ZGUgPHFzb3NzbC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0dTU0FQSQorI2luY2x1ZGUgPGdzc2FwaS5oPgorI2VuZGlmCisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0xEQVAKKyNpbmNsdWRlIDxsZGFwLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKworI2luY2x1ZGUgIm9zNDAwc3lzLmgiCisKKworLyoqCisqKiogICAgIFFBRFJUIE9TLzQwMCBBU0NJSSBydW50aW1lIGRlZmluZXMgb25seSB0aGUgbW9zdCB1c2VkIHByb2NlZHVyZXMsIGJ1dAorKioqICAgICAgICAgICAgIGJ1dCBhIGxvdCBvZiB0aGVtIGFyZSBub3Qgc3VwcG9ydGVkLiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzCisqKiogICAgICAgICAgICAgQVNDSUkgd3JhcHBlcnMgZm9yIHRob3NlIHRoYXQgYXJlIHVzZWQgYnkgbGliY3VybCwgYnV0IG5vdAorKioqICAgICAgICAgICAgIGRlZmluZWQgYnkgUUFEUlQuCisqKi8KKworI3ByYWdtYSBjb252ZXJ0KDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBFQkNESUMuICovCisKKworI2RlZmluZSBNSU5fQllURV9HQUlOICAgMTAyNCAgICAvKiBNaW5pbXVtIGdhaW4gd2hlbiBzaG9ydGVuaW5nIGEgYnVmZmVyLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgICBzaXplOyAgICAgICAgICAgICAgICAgICAvKiBCdWZmZXIgc2l6ZS4gKi8KKyAgICAgICAgY2hhciAqICAgICAgICAgIGJ1ZjsgICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBhZGRyZXNzLiAqLworfSAgICAgICAgICAgICAgIGJ1ZmZlcl90OworCisKK3N0YXRpYyBjaGFyICogICBidWZmZXJfdW5kZWYobG9jYWxrZXlfdCBrZXksIGxvbmcgc2l6ZSk7CitzdGF0aWMgY2hhciAqICAgYnVmZmVyX3RocmVhZGVkKGxvY2Fsa2V5X3Qga2V5LCBsb25nIHNpemUpOworc3RhdGljIGNoYXIgKiAgIGJ1ZmZlcl91bnRocmVhZGVkKGxvY2Fsa2V5X3Qga2V5LCBsb25nIHNpemUpOworCitzdGF0aWMgcHRocmVhZF9tdXRleF90ICBtdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CitzdGF0aWMgcHRocmVhZF9rZXlfdCAgICB0aGRrZXk7CitzdGF0aWMgYnVmZmVyX3QgKiAgICAgICBsb2NidWZzOworCitjaGFyICogICgqIEN1cmxfdGhyZWFkX2J1ZmZlcikobG9jYWxrZXlfdCBrZXksIGxvbmcgc2l6ZSkgPSBidWZmZXJfdW5kZWY7CisKKworc3RhdGljIHZvaWQKK3RoZGJ1ZmRlc3Ryb3kodm9pZCAqIHByaXZhdGUpCisKK3sKKyAgbG9jYWxrZXlfdCBpOworICBidWZmZXJfdCAqIHA7CisKKyAgaWYgKHByaXZhdGUpIHsKKyAgICBwID0gKGJ1ZmZlcl90ICopIHByaXZhdGU7CisKKyAgICBmb3IgKGkgPSAobG9jYWxrZXlfdCkgMDsgaSA8IExLX0xBU1Q7IGkrKykgeworICAgICAgaWYgKHAtPmJ1ZikKKyAgICAgICAgZnJlZShwLT5idWYpOworCisgICAgICBwKys7CisgICAgICB9CisKKyAgICBmcmVlKHByaXZhdGUpOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZAordGVybWluYXRlKHZvaWQpCisKK3sKKyAgaWYgKEN1cmxfdGhyZWFkX2J1ZmZlciA9PSBidWZmZXJfdGhyZWFkZWQpIHsKKyAgICBsb2NidWZzID0gcHRocmVhZF9nZXRzcGVjaWZpYyh0aGRrZXkpOworICAgIHB0aHJlYWRfc2V0c3BlY2lmaWModGhka2V5LCAodm9pZCAqKSBOVUxMKTsKKyAgICBwdGhyZWFkX2tleV9kZWxldGUodGhka2V5KTsKKyAgICB9CisKKyAgaWYgKEN1cmxfdGhyZWFkX2J1ZmZlciAhPSBidWZmZXJfdW5kZWYpIHsKKyAgICB0aGRidWZkZXN0cm95KCh2b2lkICopIGxvY2J1ZnMpOworICAgIGxvY2J1ZnMgPSAoYnVmZmVyX3QgKikgTlVMTDsKKyAgICB9CisKKyAgQ3VybF90aHJlYWRfYnVmZmVyID0gYnVmZmVyX3VuZGVmOworfQorCisKK3N0YXRpYyBjaGFyICoKK2dldF9idWZmZXIoYnVmZmVyX3QgKiBidWYsIGxvbmcgc2l6ZSkKKworeworICBjaGFyICogY3A7CisKKyAgLyogSWYgYHNpemUnID49IDAsIG1ha2Ugc3VyZSBidWZmZXIgYXQgYGJ1ZicgaXMgYXQgbGVhc3QgYHNpemUnLWJ5dGUgbG9uZy4KKyAgICAgUmV0dXJuIHRoZSBidWZmZXIgYWRkcmVzcy4gKi8KKworICBpZiAoc2l6ZSA8IDApCisgICAgcmV0dXJuIGJ1Zi0+YnVmOworCisgIGlmICghYnVmLT5idWYpIHsKKyAgICBpZiAoKGJ1Zi0+YnVmID0gbWFsbG9jKHNpemUpKSkKKyAgICAgIGJ1Zi0+c2l6ZSA9IHNpemU7CisKKyAgICByZXR1cm4gYnVmLT5idWY7CisgICAgfQorCisgIGlmICgodW5zaWduZWQgbG9uZykgc2l6ZSA8PSBidWYtPnNpemUpIHsKKyAgICAvKiBTaG9ydGVuIHRoZSBidWZmZXIgb25seSBpZiBpdCBmcmVlcyBhIHNpZ25pZmljYW50IGJ5dGUgY291bnQuIFRoaXMKKyAgICAgICBhdm9pZHMgc29tZSByZWFsbG9jKCkgb3ZlcmhlYWQuICovCisKKyAgICBpZiAoYnVmLT5zaXplIC0gc2l6ZSA8IE1JTl9CWVRFX0dBSU4pCisgICAgICByZXR1cm4gYnVmLT5idWY7CisgICAgfQorCisgIC8qIFJlc2l6ZSB0aGUgYnVmZmVyLiAqLworCisgIGlmICgoY3AgPSByZWFsbG9jKGJ1Zi0+YnVmLCBzaXplKSkpIHsKKyAgICBidWYtPmJ1ZiA9IGNwOworICAgIGJ1Zi0+c2l6ZSA9IHNpemU7CisgICAgfQorICBlbHNlIGlmIChzaXplIDw9IGJ1Zi0+c2l6ZSkKKyAgICBjcCA9IGJ1Zi0+YnVmOworCisgIHJldHVybiBjcDsKK30KKworCitzdGF0aWMgY2hhciAqCitidWZmZXJfdW50aHJlYWRlZChsb2NhbGtleV90IGtleSwgbG9uZyBzaXplKQorCit7CisgIHJldHVybiBnZXRfYnVmZmVyKGxvY2J1ZnMgKyBrZXksIHNpemUpOworfQorCisKK3N0YXRpYyBjaGFyICoKK2J1ZmZlcl90aHJlYWRlZChsb2NhbGtleV90IGtleSwgbG9uZyBzaXplKQorCit7CisgIGJ1ZmZlcl90ICogYnVmczsKKworICAvKiBHZXQgdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGxvY2FsIGtleSBpbiB0aGUgY3VycmVudCB0aHJlYWQsIGFuZAorICAgICBtYWtlIHN1cmUgaXQgaXMgYXQgbGVhc3QgYHNpemUnLWJ5dGUgbG9uZy4gU2V0IGBzaXplJyB0byA8IDAgdG8gZ2V0CisgICAgIGl0cyBhZGRyZXNzIG9ubHkuICovCisKKyAgYnVmcyA9IChidWZmZXJfdCAqKSBwdGhyZWFkX2dldHNwZWNpZmljKHRoZGtleSk7CisKKyAgaWYgKCFidWZzKSB7CisgICAgaWYgKHNpemUgPCAwKQorICAgICAgcmV0dXJuIChjaGFyICopIE5VTEw7ICAgICAgICAgICAgIC8qIE5vIGJ1ZmZlciB5ZXQuICovCisKKyAgICAvKiBBbGxvY2F0ZSBidWZmZXIgZGVzY3JpcHRvcnMgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4gKi8KKworICAgIGlmICghKGJ1ZnMgPSBjYWxsb2MoKHNpemVfdCkgTEtfTEFTVCwgc2l6ZW9mICpidWZzKSkpCisgICAgICByZXR1cm4gKGNoYXIgKikgTlVMTDsKKworICAgIGlmIChwdGhyZWFkX3NldHNwZWNpZmljKHRoZGtleSwgKHZvaWQgKikgYnVmcykpIHsKKyAgICAgIGZyZWUoYnVmcyk7CisgICAgICByZXR1cm4gKGNoYXIgKikgTlVMTDsKKyAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuIGdldF9idWZmZXIoYnVmcyArIGtleSwgc2l6ZSk7Cit9CisKKworc3RhdGljIGNoYXIgKgorYnVmZmVyX3VuZGVmKGxvY2Fsa2V5X3Qga2V5LCBsb25nIHNpemUpCisKK3sKKyAgLyogRGVmaW5lIHRoZSBidWZmZXIgc3lzdGVtLCBnZXQgdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGxvY2FsIGtleSBpbgorICAgICB0aGUgY3VycmVudCB0aHJlYWQsIGFuZCBtYWtlIHN1cmUgaXQgaXMgYXQgbGVhc3QgYHNpemUnLWJ5dGUgbG9uZy4KKyAgICAgU2V0IGBzaXplJyB0byA8IDAgdG8gZ2V0IGl0cyBhZGRyZXNzIG9ubHkuICovCisKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZtdXRleCk7CisKKyAgLyogRGV0ZXJtaW5lIGlmIHdlIGNhbiB1c2UgcHRocmVhZC1zcGVjaWZpYyBkYXRhLiAqLworCisgIGlmIChDdXJsX3RocmVhZF9idWZmZXIgPT0gYnVmZmVyX3VuZGVmKSB7ICAgICAvKiBJZiB1bmNoYW5nZWQgZHVyaW5nIGxvY2suICovCisgICAgaWYgKCFwdGhyZWFkX2tleV9jcmVhdGUoJnRoZGtleSwgdGhkYnVmZGVzdHJveSkpCisgICAgICBDdXJsX3RocmVhZF9idWZmZXIgPSBidWZmZXJfdGhyZWFkZWQ7CisgICAgZWxzZSBpZiAoIShsb2NidWZzID0gY2FsbG9jKChzaXplX3QpIExLX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKmxvY2J1ZnMpKSkgeworICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4KTsKKyAgICAgIHJldHVybiAoY2hhciAqKSBOVUxMOworICAgICAgfQorICAgIGVsc2UKKyAgICAgICAgQ3VybF90aHJlYWRfYnVmZmVyID0gYnVmZmVyX3VudGhyZWFkZWQ7CisKKyAgICBhdGV4aXQodGVybWluYXRlKTsKKyAgICB9CisKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4KTsKKyAgcmV0dXJuIEN1cmxfdGhyZWFkX2J1ZmZlcihrZXksIHNpemUpOworfQorCisKK2ludAorQ3VybF9nZXRuYW1laW5mb19hKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqIHNhLCBjdXJsX3NvY2tsZW5fdCBzYWxlbiwKKyAgICAgICAgICAgICAgY2hhciAqIG5vZGVuYW1lLCBjdXJsX3NvY2tsZW5fdCBub2RlbmFtZWxlbiwKKyAgICAgICAgICAgICAgY2hhciAqIHNlcnZuYW1lLCBjdXJsX3NvY2tsZW5fdCBzZXJ2bmFtZWxlbiwKKyAgICAgICAgICAgICAgaW50IGZsYWdzKQorCit7CisgIGNoYXIgKiBlbm9kZW5hbWU7CisgIGNoYXIgKiBlc2Vydm5hbWU7CisgIGludCBzdGF0dXM7CisgIGludCBpOworCisgIGVub2RlbmFtZSA9IChjaGFyICopIE5VTEw7CisgIGVzZXJ2bmFtZSA9IChjaGFyICopIE5VTEw7CisKKyAgaWYgKG5vZGVuYW1lICYmIG5vZGVuYW1lbGVuKQorICAgIGlmICghKGVub2RlbmFtZSA9IG1hbGxvYyhub2RlbmFtZWxlbikpKQorICAgICAgcmV0dXJuIEVBSV9NRU1PUlk7CisKKyAgaWYgKHNlcnZuYW1lICYmIHNlcnZuYW1lbGVuKQorICAgIGlmICghKGVzZXJ2bmFtZSA9IG1hbGxvYyhzZXJ2bmFtZWxlbikpKSB7CisgICAgICBpZiAoZW5vZGVuYW1lKQorICAgICAgICBmcmVlKGVub2RlbmFtZSk7CisKKyAgICAgIHJldHVybiBFQUlfTUVNT1JZOworICAgICAgfQorCisgIHN0YXR1cyA9IGdldG5hbWVpbmZvKHNhLCBzYWxlbiwgZW5vZGVuYW1lLCBub2RlbmFtZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgZXNlcnZuYW1lLCBzZXJ2bmFtZWxlbiwgZmxhZ3MpOworCisgIGlmICghc3RhdHVzKSB7CisgICAgaWYgKGVub2RlbmFtZSkgeworICAgICAgaSA9IFFhZHJ0Q29udmVydEUyQShub2RlbmFtZSwgZW5vZGVuYW1lLAorICAgICAgICBub2RlbmFtZWxlbiAtIDEsIHN0cmxlbihlbm9kZW5hbWUpKTsKKyAgICAgIG5vZGVuYW1lW2ldID0gJ1wwJzsKKyAgICAgIH0KKworICAgIGlmIChlc2Vydm5hbWUpIHsKKyAgICAgIGkgPSBRYWRydENvbnZlcnRFMkEoc2Vydm5hbWUsIGVzZXJ2bmFtZSwKKyAgICAgICAgc2Vydm5hbWVsZW4gLSAxLCBzdHJsZW4oZXNlcnZuYW1lKSk7CisgICAgICBzZXJ2bmFtZVtpXSA9ICdcMCc7CisgICAgICB9CisgICAgfQorCisgIGlmIChlbm9kZW5hbWUpCisgICAgZnJlZShlbm9kZW5hbWUpOworCisgIGlmIChlc2Vydm5hbWUpCisgICAgZnJlZShlc2Vydm5hbWUpOworCisgIHJldHVybiBzdGF0dXM7Cit9CisKKworaW50CitDdXJsX2dldGFkZHJpbmZvX2EoY29uc3QgY2hhciAqIG5vZGVuYW1lLCBjb25zdCBjaGFyICogc2Vydm5hbWUsCisgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiBoaW50cywKKyAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqICogcmVzKQorCit7CisgIGNoYXIgKiBlbm9kZW5hbWU7CisgIGNoYXIgKiBlc2Vydm5hbWU7CisgIGludCBzdGF0dXM7CisgIGludCBpOworCisgIGVub2RlbmFtZSA9IChjaGFyICopIE5VTEw7CisgIGVzZXJ2bmFtZSA9IChjaGFyICopIE5VTEw7CisKKyAgaWYgKG5vZGVuYW1lKSB7CisgICAgaSA9IHN0cmxlbihub2RlbmFtZSk7CisKKyAgICBpZiAoIShlbm9kZW5hbWUgPSBtYWxsb2MoaSArIDEpKSkKKyAgICAgIHJldHVybiBFQUlfTUVNT1JZOworCisgICAgaSA9IFFhZHJ0Q29udmVydEEyRShlbm9kZW5hbWUsIG5vZGVuYW1lLCBpLCBpKTsKKyAgICBlbm9kZW5hbWVbaV0gPSAnXDAnOworICAgIH0KKworICBpZiAoc2Vydm5hbWUpIHsKKyAgICBpID0gc3RybGVuKHNlcnZuYW1lKTsKKworICAgIGlmICghKGVzZXJ2bmFtZSA9IG1hbGxvYyhpICsgMSkpKSB7CisgICAgICBpZiAoZW5vZGVuYW1lKQorICAgICAgICBmcmVlKGVub2RlbmFtZSk7CisKKyAgICAgIHJldHVybiBFQUlfTUVNT1JZOworICAgICAgfQorCisgICAgUWFkcnRDb252ZXJ0QTJFKGVzZXJ2bmFtZSwgc2Vydm5hbWUsIGksIGkpOworICAgIGVzZXJ2bmFtZVtpXSA9ICdcMCc7CisgICAgfQorCisgIHN0YXR1cyA9IGdldGFkZHJpbmZvKGVub2RlbmFtZSwgZXNlcnZuYW1lLCBoaW50cywgcmVzKTsKKworICBpZiAoZW5vZGVuYW1lKQorICAgIGZyZWUoZW5vZGVuYW1lKTsKKworICBpZiAoZXNlcnZuYW1lKQorICAgIGZyZWUoZXNlcnZuYW1lKTsKKworICByZXR1cm4gc3RhdHVzOworfQorCisKKyNpZmRlZiBVU0VfUVNPU1NMCisKKy8qIEFTQ0lJIHdyYXBwZXJzIGZvciB0aGUgU1NMIHByb2NlZHVyZXMuICovCisKK2ludAorQ3VybF9TU0xfSW5pdF9BcHBsaWNhdGlvbl9hKFNTTEluaXRBcHAgKiBpbml0X2FwcCkKKworeworICBpbnQgcmM7CisgIHVuc2lnbmVkIGludCBpOworICBTU0xJbml0QXBwIGlhOworCisgIGlmICghaW5pdF9hcHAgfHwgIWluaXRfYXBwLT5hcHBsaWNhdGlvbklEIHx8ICFpbml0X2FwcC0+YXBwbGljYXRpb25JRExlbikKKyAgICByZXR1cm4gU1NMX0luaXRfQXBwbGljYXRpb24oaW5pdF9hcHApOworCisgIG1lbWNweSgoY2hhciAqKSAmaWEsIChjaGFyICopIGluaXRfYXBwLCBzaXplb2YgaWEpOworICBpID0gaWEuYXBwbGljYXRpb25JRExlbjsKKworICBpZiAoIShpYS5hcHBsaWNhdGlvbklEID0gbWFsbG9jKGkgKyAxKSkpIHsKKyAgICBlcnJubyA9IEVOT01FTTsKKyAgICByZXR1cm4gU1NMX0VSUk9SX0lPOworICAgIH0KKworICBRYWRydENvbnZlcnRBMkUoaWEuYXBwbGljYXRpb25JRCwgaW5pdF9hcHAtPmFwcGxpY2F0aW9uSUQsIGksIGkpOworICBpYS5hcHBsaWNhdGlvbklEW2ldID0gJ1wwJzsKKyAgcmMgPSBTU0xfSW5pdF9BcHBsaWNhdGlvbigmaWEpOworICBmcmVlKGlhLmFwcGxpY2F0aW9uSUQpOworICBpbml0X2FwcC0+bG9jYWxDZXJ0aWZpY2F0ZUxlbiA9IGlhLmxvY2FsQ2VydGlmaWNhdGVMZW47CisgIGluaXRfYXBwLT5zZXNzaW9uVHlwZSA9IGlhLnNlc3Npb25UeXBlOworICByZXR1cm4gcmM7Cit9CisKKworaW50CitDdXJsX1NTTF9Jbml0X2EoU1NMSW5pdCAqIGluaXQpCisKK3sKKyAgaW50IHJjOworICB1bnNpZ25lZCBpbnQgaTsKKyAgU1NMSW5pdCBpYTsKKworICBpZiAoIWluaXQgfHwgKCFpbml0LT5rZXlyaW5nRmlsZU5hbWUgJiYgIWluaXQtPmtleXJpbmdQYXNzd29yZCkpCisgICAgcmV0dXJuIFNTTF9Jbml0KGluaXQpOworCisgIG1lbWNweSgoY2hhciAqKSAmaWEsIChjaGFyICopIGluaXQsIHNpemVvZiBpYSk7CisKKyAgaWYgKGlhLmtleXJpbmdGaWxlTmFtZSkgeworICAgIGkgPSBzdHJsZW4oaWEua2V5cmluZ0ZpbGVOYW1lKTsKKworICAgIGlmICghKGlhLmtleXJpbmdGaWxlTmFtZSA9IG1hbGxvYyhpICsgMSkpKSB7CisgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgIHJldHVybiBTU0xfRVJST1JfSU87CisgICAgICB9CisKKyAgICBRYWRydENvbnZlcnRBMkUoaWEua2V5cmluZ0ZpbGVOYW1lLCBpbml0LT5rZXlyaW5nRmlsZU5hbWUsIGksIGkpOworICAgIGlhLmtleXJpbmdGaWxlTmFtZVtpXSA9ICdcMCc7CisgICAgfQorCisgIGlmIChpYS5rZXlyaW5nUGFzc3dvcmQpIHsKKyAgICBpID0gc3RybGVuKGlhLmtleXJpbmdQYXNzd29yZCk7CisKKyAgICBpZiAoIShpYS5rZXlyaW5nUGFzc3dvcmQgPSBtYWxsb2MoaSArIDEpKSkgeworICAgICAgaWYgKGlhLmtleXJpbmdGaWxlTmFtZSkKKyAgICAgICAgZnJlZShpYS5rZXlyaW5nRmlsZU5hbWUpOworCisgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgIHJldHVybiBTU0xfRVJST1JfSU87CisgICAgICB9CisKKyAgICBRYWRydENvbnZlcnRBMkUoaWEua2V5cmluZ1Bhc3N3b3JkLCBpbml0LT5rZXlyaW5nUGFzc3dvcmQsIGksIGkpOworICAgIGlhLmtleXJpbmdQYXNzd29yZFtpXSA9ICdcMCc7CisgICAgfQorCisgIHJjID0gU1NMX0luaXQoJmlhKTsKKworICBpZiAoaWEua2V5cmluZ0ZpbGVOYW1lKQorICAgIGZyZWUoaWEua2V5cmluZ0ZpbGVOYW1lKTsKKworICBpZiAoaWEua2V5cmluZ1Bhc3N3b3JkKQorICAgIGZyZWUoaWEua2V5cmluZ1Bhc3N3b3JkKTsKKworICByZXR1cm4gcmM7Cit9CisKKworY2hhciAqCitDdXJsX1NTTF9TdHJlcnJvcl9hKGludCBzc2xyZXR1cm52YWx1ZSwgU1NMRXJyb3JNc2cgKiBzZXJybXNncCkKKworeworICBpbnQgaTsKKyAgY2hhciAqIGNwOworICBjaGFyICogY3AyOworCisgIGNwID0gU1NMX1N0cmVycm9yKHNzbHJldHVybnZhbHVlLCBzZXJybXNncCk7CisKKyAgaWYgKCFjcCkKKyAgICByZXR1cm4gY3A7CisKKyAgaSA9IHN0cmxlbihjcCk7CisKKyAgaWYgKCEoY3AyID0gQ3VybF90aHJlYWRfYnVmZmVyKExLX1NTTF9FUlJPUiwgTUFYX0NPTlZfRVhQQU5TSU9OICogaSArIDEpKSkKKyAgICByZXR1cm4gY3AyOworCisgIGkgPSBRYWRydENvbnZlcnRFMkEoY3AyLCBjcCwgTUFYX0NPTlZfRVhQQU5TSU9OICogaSwgaSk7CisgIGNwMltpXSA9ICdcMCc7CisgIHJldHVybiBjcDI7Cit9CisKKyNlbmRpZiAvKiBVU0VfUVNPU1NMICovCisKKworI2lmZGVmIEhBVkVfR1NTQVBJCisKKy8qIEFTQ0lJIHdyYXBwZXJzIGZvciB0aGUgR1NTQVBJIHByb2NlZHVyZXMuICovCisKK3N0YXRpYyBpbnQKK0N1cmxfZ3NzX2NvbnZlcnRfaW5fcGxhY2UoT01fdWludDMyICogbWlub3Jfc3RhdHVzLCBnc3NfYnVmZmVyX3QgYnVmKQorCit7CisgIHVuc2lnbmVkIGludCBpOworICBjaGFyICogdDsKKworICAvKiBDb252ZXJ0IGBidWYnIGluIHBsYWNlLCBmcm9tIEVCQ0RJQyB0byBBU0NJSS4KKyAgICAgSWYgZXJyb3IsIHJlbGVhc2UgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuIC0xLiBFbHNlIHJldHVybiAwLiAqLworCisgIGkgPSBidWYtPmxlbmd0aDsKKworICBpZiAoaSkgeworICAgIGlmICghKHQgPSBtYWxsb2MoaSkpKSB7CisgICAgICBnc3NfcmVsZWFzZV9idWZmZXIobWlub3Jfc3RhdHVzLCBidWYpOworCisgICAgICBpZiAobWlub3Jfc3RhdHVzKQorICAgICAgICAqbWlub3Jfc3RhdHVzID0gRU5PTUVNOworCisgICAgICByZXR1cm4gLTE7CisgICAgICB9CisKKyAgICBRYWRydENvbnZlcnRFMkEodCwgYnVmLT52YWx1ZSwgaSwgaSk7CisgICAgbWVtY3B5KGJ1Zi0+dmFsdWUsIHQsIGkpOworICAgIGZyZWUodCk7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisKK09NX3VpbnQzMgorQ3VybF9nc3NfaW1wb3J0X25hbWVfYShPTV91aW50MzIgKiBtaW5vcl9zdGF0dXMsIGdzc19idWZmZXJfdCBpbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBnc3NfT0lEIGluX25hbWVfdHlwZSwgZ3NzX25hbWVfdCAqIG91dF9uYW1lKQorCit7CisgIGludCByYzsKKyAgdW5zaWduZWQgaW50IGk7CisgIGdzc19idWZmZXJfZGVzYyBpbjsKKworICBpZiAoIWluX25hbWUgfHwgIWluX25hbWUtPnZhbHVlIHx8ICFpbl9uYW1lLT5sZW5ndGgpCisgICAgcmV0dXJuIGdzc19pbXBvcnRfbmFtZShtaW5vcl9zdGF0dXMsIGluX25hbWUsIGluX25hbWVfdHlwZSwgb3V0X25hbWUpOworCisgIG1lbWNweSgoY2hhciAqKSAmaW4sIChjaGFyICopIGluX25hbWUsIHNpemVvZiBpbik7CisgIGkgPSBpbi5sZW5ndGg7CisKKyAgaWYgKCEoaW4udmFsdWUgPSBtYWxsb2MoaSArIDEpKSkgeworICAgIGlmIChtaW5vcl9zdGF0dXMpCisgICAgICAqbWlub3Jfc3RhdHVzID0gRU5PTUVNOworCisgICAgcmV0dXJuIEdTU19TX0ZBSUxVUkU7CisgICAgfQorCisgIFFhZHJ0Q29udmVydEEyRShpbi52YWx1ZSwgaW5fbmFtZS0+dmFsdWUsIGksIGkpOworICAoKGNoYXIgKikgaW4udmFsdWUpW2ldID0gJ1wwJzsKKyAgcmMgPSBnc3NfaW1wb3J0X25hbWUobWlub3Jfc3RhdHVzLCAmaW4sIGluX25hbWVfdHlwZSwgb3V0X25hbWUpOworICBmcmVlKGluLnZhbHVlKTsKKyAgcmV0dXJuIHJjOworfQorCisKK09NX3VpbnQzMgorQ3VybF9nc3NfZGlzcGxheV9zdGF0dXNfYShPTV91aW50MzIgKiBtaW5vcl9zdGF0dXMsIE9NX3VpbnQzMiBzdGF0dXNfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgaW50IHN0YXR1c190eXBlLCBnc3NfT0lEIG1lY2hfdHlwZSwKKyAgICAgICAgICAgICAgICAgICBnc3NfbXNnX2N0eF90ICogbWVzc2FnZV9jb250ZXh0LCBnc3NfYnVmZmVyX3Qgc3RhdHVzX3N0cmluZykKKworeworICBpbnQgcmM7CisKKyAgcmMgPSBnc3NfZGlzcGxheV9zdGF0dXMobWlub3Jfc3RhdHVzLCBzdGF0dXNfdmFsdWUsIHN0YXR1c190eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVjaF90eXBlLCBtZXNzYWdlX2NvbnRleHQsIHN0YXR1c19zdHJpbmcpOworCisgIGlmIChyYyAhPSBHU1NfU19DT01QTEVURSB8fCAhc3RhdHVzX3N0cmluZyB8fAorICAgICAgIXN0YXR1c19zdHJpbmctPmxlbmd0aCB8fCAhc3RhdHVzX3N0cmluZy0+dmFsdWUpCisgICAgcmV0dXJuIHJjOworCisgIC8qIE5vIHdheSB0byBhbGxvY2F0ZSBhIGJ1ZmZlciBoZXJlLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVsZWFzZWQgYnkKKyAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCkuIFRoZSBzb2x1dGlvbiBpcyB0byBvdmVyd3JpdGUgdGhlIEVCQ0RJQyBidWZmZXIKKyAgICAgd2l0aCBBU0NJSSB0byByZXR1cm4gaXQuICovCisKKyAgaWYgKEN1cmxfZ3NzX2NvbnZlcnRfaW5fcGxhY2UobWlub3Jfc3RhdHVzLCBzdGF0dXNfc3RyaW5nKSkKKyAgICByZXR1cm4gR1NTX1NfRkFJTFVSRTsKKworICByZXR1cm4gcmM7Cit9CisKKworT01fdWludDMyCitDdXJsX2dzc19pbml0X3NlY19jb250ZXh0X2EoT01fdWludDMyICogbWlub3Jfc3RhdHVzLCBnc3NfY3JlZF9pZF90IGNyZWRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19jdHhfaWRfdCAqIGNvbnRleHRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19uYW1lX3QgdGFyZ2V0X25hbWUsIGdzc19PSUQgbWVjaF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19mbGFnc190IHJlcV9mbGFncywgT01fdWludDMyIHRpbWVfcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19jaGFubmVsX2JpbmRpbmdzX3QgaW5wdXRfY2hhbl9iaW5kaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfYnVmZmVyX3QgaW5wdXRfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX09JRCAqIGFjdHVhbF9tZWNoX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX2J1ZmZlcl90IG91dHB1dF90b2tlbiwgZ3NzX2ZsYWdzX3QgKiByZXRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT01fdWludDMyICogdGltZV9yZWMpCisKK3sKKyAgaW50IHJjOworICB1bnNpZ25lZCBpbnQgaTsKKyAgZ3NzX2J1ZmZlcl9kZXNjIGluOworICBnc3NfYnVmZmVyX3QgaW5wOworCisgIGluLnZhbHVlID0gTlVMTDsKKworICBpZiAoKGlucCA9IGlucHV0X3Rva2VuKSkKKyAgICBpZiAoaW5wLT5sZW5ndGggJiYgaW5wLT52YWx1ZSkgeworICAgICAgaSA9IGlucC0+bGVuZ3RoOworCisgICAgICBpZiAoIShpbi52YWx1ZSA9IG1hbGxvYyhpICsgMSkpKSB7CisgICAgICAgIGlmIChtaW5vcl9zdGF0dXMpCisgICAgICAgICAgKm1pbm9yX3N0YXR1cyA9IEVOT01FTTsKKworICAgICAgICByZXR1cm4gR1NTX1NfRkFJTFVSRTsKKyAgICAgICAgfQorCisgICAgICBRYWRydENvbnZlcnRBMkUoaW4udmFsdWUsIGlucHV0X3Rva2VuLT52YWx1ZSwgaSwgaSk7CisgICAgICAoKGNoYXIgKikgaW4udmFsdWUpW2ldID0gJ1wwJzsKKyAgICAgIGluLmxlbmd0aCA9IGk7CisgICAgICBpbnAgPSAmaW47CisgICAgICB9CisKKyAgcmMgPSBnc3NfaW5pdF9zZWNfY29udGV4dChtaW5vcl9zdGF0dXMsIGNyZWRfaGFuZGxlLCBjb250ZXh0X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X25hbWUsIG1lY2hfdHlwZSwgcmVxX2ZsYWdzLCB0aW1lX3JlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfY2hhbl9iaW5kaW5ncywgaW5wLCBhY3R1YWxfbWVjaF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfdG9rZW4sIHJldF9mbGFncywgdGltZV9yZWMpOworCisgIGlmIChpbi52YWx1ZSkKKyAgICBmcmVlKGluLnZhbHVlKTsKKworICBpZiAocmMgIT0gR1NTX1NfQ09NUExFVEUgfHwgIW91dHB1dF90b2tlbiB8fAorICAgICAgIW91dHB1dF90b2tlbi0+bGVuZ3RoIHx8ICFvdXRwdXRfdG9rZW4tPnZhbHVlKQorICAgIHJldHVybiByYzsKKworICAvKiBObyB3YXkgdG8gYWxsb2NhdGUgYSBidWZmZXIgaGVyZSwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbGVhc2VkIGJ5CisgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigpLiBUaGUgc29sdXRpb24gaXMgdG8gb3ZlcndyaXRlIHRoZSBFQkNESUMgYnVmZmVyCisgICAgIHdpdGggQVNDSUkgdG8gcmV0dXJuIGl0LiAqLworCisgIGlmIChDdXJsX2dzc19jb252ZXJ0X2luX3BsYWNlKG1pbm9yX3N0YXR1cywgb3V0cHV0X3Rva2VuKSkKKyAgICByZXR1cm4gR1NTX1NfRkFJTFVSRTsKKworICByZXR1cm4gcmM7Cit9CisKKworT01fdWludDMyCitDdXJsX2dzc19kZWxldGVfc2VjX2NvbnRleHRfYShPTV91aW50MzIgKiBtaW5vcl9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfY3R4X2lkX3QgKiBjb250ZXh0X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19idWZmZXJfdCBvdXRwdXRfdG9rZW4pCisKK3sKKyAgaW50IHJjOworCisgIHJjID0gZ3NzX2RlbGV0ZV9zZWNfY29udGV4dChtaW5vcl9zdGF0dXMsIGNvbnRleHRfaGFuZGxlLCBvdXRwdXRfdG9rZW4pOworCisgIGlmIChyYyAhPSBHU1NfU19DT01QTEVURSB8fCAhb3V0cHV0X3Rva2VuIHx8CisgICAgICAhb3V0cHV0X3Rva2VuLT5sZW5ndGggfHwgIW91dHB1dF90b2tlbi0+dmFsdWUpCisgICAgcmV0dXJuIHJjOworCisgIC8qIE5vIHdheSB0byBhbGxvY2F0ZSBhIGJ1ZmZlciBoZXJlLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVsZWFzZWQgYnkKKyAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCkuIFRoZSBzb2x1dGlvbiBpcyB0byBvdmVyd3JpdGUgdGhlIEVCQ0RJQyBidWZmZXIKKyAgICAgd2l0aCBBU0NJSSB0byByZXR1cm4gaXQuICovCisKKyAgaWYgKEN1cmxfZ3NzX2NvbnZlcnRfaW5fcGxhY2UobWlub3Jfc3RhdHVzLCBvdXRwdXRfdG9rZW4pKQorICAgIHJldHVybiBHU1NfU19GQUlMVVJFOworCisgIHJldHVybiByYzsKK30KKworI2VuZGlmIC8qIEhBVkVfR1NTQVBJICovCisKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfTERBUAorCisvKiBBU0NJSSB3cmFwcGVycyBmb3IgdGhlIExEQVAgcHJvY2VkdXJlcy4gKi8KKwordm9pZCAqCitDdXJsX2xkYXBfaW5pdF9hKGNoYXIgKiBob3N0LCBpbnQgcG9ydCkKKworeworICB1bnNpZ25lZCBpbnQgaTsKKyAgY2hhciAqIGVob3N0OworICB2b2lkICogcmVzdWx0OworCisgIGlmICghaG9zdCkKKyAgICByZXR1cm4gKHZvaWQgKikgbGRhcF9pbml0KGhvc3QsIHBvcnQpOworCisgIGkgPSBzdHJsZW4oaG9zdCk7CisKKyAgaWYgKCEoZWhvc3QgPSBtYWxsb2MoaSArIDEpKSkKKyAgICByZXR1cm4gKHZvaWQgKikgTlVMTDsKKworICBRYWRydENvbnZlcnRBMkUoZWhvc3QsIGhvc3QsIGksIGkpOworICBlaG9zdFtpXSA9ICdcMCc7CisgIHJlc3VsdCA9ICh2b2lkICopIGxkYXBfaW5pdChlaG9zdCwgcG9ydCk7CisgIGZyZWUoZWhvc3QpOworICByZXR1cm4gcmVzdWx0OworfQorCisKK2ludAorQ3VybF9sZGFwX3NpbXBsZV9iaW5kX3NfYSh2b2lkICogbGQsIGNoYXIgKiBkbiwgY2hhciAqIHBhc3N3ZCkKKworeworICBpbnQgaTsKKyAgY2hhciAqIGVkbjsKKyAgY2hhciAqIGVwYXNzd2Q7CisKKyAgZWRuID0gKGNoYXIgKikgTlVMTDsKKyAgZXBhc3N3ZCA9IChjaGFyICopIE5VTEw7CisKKyAgaWYgKGRuKSB7CisgICAgaSA9IHN0cmxlbihkbik7CisKKyAgICBpZiAoIShlZG4gPSBtYWxsb2MoaSArIDEpKSkKKyAgICAgIHJldHVybiBMREFQX05PX01FTU9SWTsKKworICAgIFFhZHJ0Q29udmVydEEyRShlZG4sIGRuLCBpLCBpKTsKKyAgICBlZG5baV0gPSAnXDAnOworICAgIH0KKworICBpZiAocGFzc3dkKSB7CisgICAgaSA9IHN0cmxlbihwYXNzd2QpOworCisgICAgaWYgKCEoZXBhc3N3ZCA9IG1hbGxvYyhpICsgMSkpKSB7CisgICAgICBpZiAoZWRuKQorICAgICAgICBmcmVlKGVkbik7CisKKyAgICAgIHJldHVybiBMREFQX05PX01FTU9SWTsKKyAgICAgIH0KKworICAgIFFhZHJ0Q29udmVydEEyRShlcGFzc3dkLCBwYXNzd2QsIGksIGkpOworICAgIGVwYXNzd2RbaV0gPSAnXDAnOworICAgIH0KKworICBpID0gbGRhcF9zaW1wbGVfYmluZF9zKGxkLCBlZG4sIGVwYXNzd2QpOworCisgIGlmIChlcGFzc3dkKQorICAgIGZyZWUoZXBhc3N3ZCk7CisKKyAgaWYgKGVkbikKKyAgICBmcmVlKGVkbik7CisKKyAgcmV0dXJuIGk7Cit9CisKKworaW50CitDdXJsX2xkYXBfc2VhcmNoX3NfYSh2b2lkICogbGQsIGNoYXIgKiBiYXNlLCBpbnQgc2NvcGUsIGNoYXIgKiBmaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICBjaGFyICogKiBhdHRycywgaW50IGF0dHJzb25seSwgTERBUE1lc3NhZ2UgKiAqIHJlcykKKworeworICBpbnQgaTsKKyAgaW50IGo7CisgIGNoYXIgKiBlYmFzZTsKKyAgY2hhciAqIGVmaWx0ZXI7CisgIGNoYXIgKiAqIGVhdHRyczsKKyAgaW50IHN0YXR1czsKKworICBlYmFzZSA9IChjaGFyICopIE5VTEw7CisgIGVmaWx0ZXIgPSAoY2hhciAqKSBOVUxMOworICBlYXR0cnMgPSAoY2hhciAqICopIE5VTEw7CisgIHN0YXR1cyA9IExEQVBfU1VDQ0VTUzsKKworICBpZiAoYmFzZSkgeworICAgIGkgPSBzdHJsZW4oYmFzZSk7CisKKyAgICBpZiAoIShlYmFzZSA9IG1hbGxvYyhpICsgMSkpKQorICAgICAgc3RhdHVzID0gTERBUF9OT19NRU1PUlk7CisgICAgZWxzZSB7CisgICAgICBRYWRydENvbnZlcnRBMkUoZWJhc2UsIGJhc2UsIGksIGkpOworICAgICAgZWJhc2VbaV0gPSAnXDAnOworICAgICAgfQorICAgIH0KKworICBpZiAoZmlsdGVyICYmIHN0YXR1cyA9PSBMREFQX1NVQ0NFU1MpIHsKKyAgICBpID0gc3RybGVuKGZpbHRlcik7CisKKyAgICBpZiAoIShlZmlsdGVyID0gbWFsbG9jKGkgKyAxKSkpCisgICAgICBzdGF0dXMgPSBMREFQX05PX01FTU9SWTsKKyAgICBlbHNlIHsKKyAgICAgIFFhZHJ0Q29udmVydEEyRShlZmlsdGVyLCBmaWx0ZXIsIGksIGkpOworICAgICAgZWZpbHRlcltpXSA9ICdcMCc7CisgICAgICB9CisgICAgfQorCisgIGlmIChhdHRycyAmJiBzdGF0dXMgPT0gTERBUF9TVUNDRVNTKSB7CisgICAgZm9yIChpID0gMDsgYXR0cnNbaSsrXTspCisgICAgICA7CisKKyAgICBpZiAoIShlYXR0cnMgPSBjYWxsb2MoaSwgc2l6ZW9mICplYXR0cnMpKSkKKyAgICAgIHN0YXR1cyA9IExEQVBfTk9fTUVNT1JZOworICAgIGVsc2UgeworICAgICAgZm9yIChqID0gMDsgYXR0cnNbal07IGorKykgeworICAgICAgICBpID0gc3RybGVuKGF0dHJzW2pdKTsKKworICAgICAgICBpZiAoIShlYXR0cnNbal0gPSBtYWxsb2MoaSArIDEpKSkgeworICAgICAgICAgIHN0YXR1cyA9IExEQVBfTk9fTUVNT1JZOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICBRYWRydENvbnZlcnRBMkUoZWF0dHJzW2pdLCBhdHRyc1tqXSwgaSwgaSk7CisgICAgICAgIGVhdHRyc1tqXVtpXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgaWYgKHN0YXR1cyA9PSBMREFQX1NVQ0NFU1MpCisgICAgc3RhdHVzID0gbGRhcF9zZWFyY2hfcyhsZCwgZWJhc2U/IGViYXNlOiAiIiwgc2NvcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmlsdGVyPyBlZmlsdGVyOiAiKG9iamVjdGNsYXNzPSopIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhdHRycywgYXR0cnNvbmx5LCByZXMpOworCisgIGlmIChlYXR0cnMpIHsKKyAgICBmb3IgKGogPSAwOyBlYXR0cnNbal07IGorKykKKyAgICAgIGZyZWUoZWF0dHJzW2pdKTsKKworICAgIGZyZWUoZWF0dHJzKTsKKyAgICB9CisKKyAgaWYgKGVmaWx0ZXIpCisgICAgZnJlZShlZmlsdGVyKTsKKworICBpZiAoZWJhc2UpCisgICAgZnJlZShlYmFzZSk7CisKKyAgcmV0dXJuIHN0YXR1czsKK30KKworCitzdHJ1Y3QgYmVydmFsICogKgorQ3VybF9sZGFwX2dldF92YWx1ZXNfbGVuX2Eodm9pZCAqIGxkLCBMREFQTWVzc2FnZSAqIGVudHJ5LCBjb25zdCBjaGFyICogYXR0cikKKworeworICBpbnQgaTsKKyAgY2hhciAqIGNwOworICBzdHJ1Y3QgYmVydmFsICogKiByZXN1bHQ7CisKKyAgY3AgPSAoY2hhciAqKSBOVUxMOworCisgIGlmIChhdHRyKSB7CisgICAgaSA9IHN0cmxlbihhdHRyKTsKKworICAgIGlmICghKGNwID0gbWFsbG9jKGkgKyAxKSkpIHsKKyAgICAgIGxkYXBfc2V0X2xkZXJybm8obGQsIExEQVBfTk9fTUVNT1JZLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICBsZGFwX2VycjJzdHJpbmcoTERBUF9OT19NRU1PUlkpKTsKKyAgICAgIHJldHVybiAoc3RydWN0IGJlcnZhbCAqICopIE5VTEw7CisgICAgICB9CisKKyAgICBRYWRydENvbnZlcnRBMkUoY3AsIGF0dHIsIGksIGkpOworICAgIGNwW2ldID0gJ1wwJzsKKyAgICB9CisKKyAgcmVzdWx0ID0gbGRhcF9nZXRfdmFsdWVzX2xlbihsZCwgZW50cnksIGNwKTsKKworICBpZiAoY3ApCisgICAgZnJlZShjcCk7CisKKyAgLyogUmVzdWx0IGRhdGEgYXJlIGJpbmFyeSBpbiBuYXR1cmUsIHNvIHRoZXkgaGF2ZW4ndCBiZWVuIGNvbnZlcnRlZCB0byBFQkNESUMuCisgICAgIFRoZXJlZm9yZSBkbyBub3QgY29udmVydC4gKi8KKworICByZXR1cm4gcmVzdWx0OworfQorCisKK2NoYXIgKgorQ3VybF9sZGFwX2VycjJzdHJpbmdfYShpbnQgZXJyb3IpCisKK3sKKyAgaW50IGk7CisgIGNoYXIgKiBjcDsKKyAgY2hhciAqIGNwMjsKKworICBjcCA9IGxkYXBfZXJyMnN0cmluZyhlcnJvcik7CisKKyAgaWYgKCFjcCkKKyAgICByZXR1cm4gY3A7CisKKyAgaSA9IHN0cmxlbihjcCk7CisKKyAgaWYgKCEoY3AyID0gQ3VybF90aHJlYWRfYnVmZmVyKExLX0xEQVBfRVJST1IsIE1BWF9DT05WX0VYUEFOU0lPTiAqIGkgKyAxKSkpCisgICAgcmV0dXJuIGNwMjsKKworICBpID0gUWFkcnRDb252ZXJ0RTJBKGNwMiwgY3AsIE1BWF9DT05WX0VYUEFOU0lPTiAqIGksIGkpOworICBjcDJbaV0gPSAnXDAnOworICByZXR1cm4gY3AyOworfQorCisKK2NoYXIgKgorQ3VybF9sZGFwX2dldF9kbl9hKHZvaWQgKiBsZCwgTERBUE1lc3NhZ2UgKiBlbnRyeSkKKworeworICBpbnQgaTsKKyAgY2hhciAqIGNwOworICBjaGFyICogY3AyOworCisgIGNwID0gbGRhcF9nZXRfZG4obGQsIGVudHJ5KTsKKworICBpZiAoIWNwKQorICAgIHJldHVybiBjcDsKKworICBpID0gc3RybGVuKGNwKTsKKworICBpZiAoIShjcDIgPSBtYWxsb2MoaSArIDEpKSkKKyAgICByZXR1cm4gY3AyOworCisgIFFhZHJ0Q29udmVydEUyQShjcDIsIGNwLCBpLCBpKTsKKyAgY3AyW2ldID0gJ1wwJzsKKworICAvKiBObyB3YXkgdG8gYWxsb2NhdGUgYSBidWZmZXIgaGVyZSwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbGVhc2VkIGJ5CisgICAgIGxkYXBfbWVtZnJlZSgpIGFuZCBsZGFwX21lbWFsbG9jKCkgZG9lcyBub3QgZXhpc3QuIFRoZSBzb2x1dGlvbiBpcyB0bworICAgICBvdmVyd3JpdGUgdGhlIEVCQ0RJQyBidWZmZXIgd2l0aCBBU0NJSSB0byByZXR1cm4gaXQuICovCisKKyAgc3RyY3B5KGNwLCBjcDIpOworICBmcmVlKGNwMik7CisgIHJldHVybiBjcDsKK30KKworCitjaGFyICoKK0N1cmxfbGRhcF9maXJzdF9hdHRyaWJ1dGVfYSh2b2lkICogbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUE1lc3NhZ2UgKiBlbnRyeSwgQmVyRWxlbWVudCAqICogYmVycHRyKQorCit7CisgIGludCBpOworICBjaGFyICogY3A7CisgIGNoYXIgKiBjcDI7CisKKyAgY3AgPSBsZGFwX2ZpcnN0X2F0dHJpYnV0ZShsZCwgZW50cnksIGJlcnB0cik7CisKKyAgaWYgKCFjcCkKKyAgICByZXR1cm4gY3A7CisKKyAgaSA9IHN0cmxlbihjcCk7CisKKyAgaWYgKCEoY3AyID0gbWFsbG9jKGkgKyAxKSkpCisgICAgcmV0dXJuIGNwMjsKKworICBRYWRydENvbnZlcnRFMkEoY3AyLCBjcCwgaSwgaSk7CisgIGNwMltpXSA9ICdcMCc7CisKKyAgLyogTm8gd2F5IHRvIGFsbG9jYXRlIGEgYnVmZmVyIGhlcmUsIGJlY2F1c2UgaXQgd2lsbCBiZSByZWxlYXNlZCBieQorICAgICBsZGFwX21lbWZyZWUoKSBhbmQgbGRhcF9tZW1hbGxvYygpIGRvZXMgbm90IGV4aXN0LiBUaGUgc29sdXRpb24gaXMgdG8KKyAgICAgb3ZlcndyaXRlIHRoZSBFQkNESUMgYnVmZmVyIHdpdGggQVNDSUkgdG8gcmV0dXJuIGl0LiAqLworCisgIHN0cmNweShjcCwgY3AyKTsKKyAgZnJlZShjcDIpOworICByZXR1cm4gY3A7Cit9CisKKworY2hhciAqCitDdXJsX2xkYXBfbmV4dF9hdHRyaWJ1dGVfYSh2b2lkICogbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQTWVzc2FnZSAqIGVudHJ5LCBCZXJFbGVtZW50ICogYmVycHRyKQorCit7CisgIGludCBpOworICBjaGFyICogY3A7CisgIGNoYXIgKiBjcDI7CisKKyAgY3AgPSBsZGFwX25leHRfYXR0cmlidXRlKGxkLCBlbnRyeSwgYmVycHRyKTsKKworICBpZiAoIWNwKQorICAgIHJldHVybiBjcDsKKworICBpID0gc3RybGVuKGNwKTsKKworICBpZiAoIShjcDIgPSBtYWxsb2MoaSArIDEpKSkKKyAgICByZXR1cm4gY3AyOworCisgIFFhZHJ0Q29udmVydEUyQShjcDIsIGNwLCBpLCBpKTsKKyAgY3AyW2ldID0gJ1wwJzsKKworICAvKiBObyB3YXkgdG8gYWxsb2NhdGUgYSBidWZmZXIgaGVyZSwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlbGVhc2VkIGJ5CisgICAgIGxkYXBfbWVtZnJlZSgpIGFuZCBsZGFwX21lbWFsbG9jKCkgZG9lcyBub3QgZXhpc3QuIFRoZSBzb2x1dGlvbiBpcyB0bworICAgICBvdmVyd3JpdGUgdGhlIEVCQ0RJQyBidWZmZXIgd2l0aCBBU0NJSSB0byByZXR1cm4gaXQuICovCisKKyAgc3RyY3B5KGNwLCBjcDIpOworICBmcmVlKGNwMik7CisgIHJldHVybiBjcDsKK30KKworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9MREFQICovCisKKworc3RhdGljIGludAorY29udmVydF9zb2NrYWRkcihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqIGRzdGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqIHNyY2FkZHIsIGludCBzcmNsZW4pCisKK3sKKyAgY29uc3Qgc3RydWN0IHNvY2thZGRyX3VuICogc3JjdTsKKyAgc3RydWN0IHNvY2thZGRyX3VuICogZHN0dTsKKyAgdW5zaWduZWQgaW50IGk7CisgIHVuc2lnbmVkIGludCBkc3RzaXplOworCisgIC8qIENvbnZlcnQgYSBzb2NrZXQgYWRkcmVzcyBpbnRvIGpvYiBDQ1NJRCwgaWYgbmVlZGVkLiAqLworCisgIGlmICghc3JjYWRkciB8fCBzcmNsZW4gPCBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHIsIHNhX2ZhbWlseSkgKworICAgICAgc2l6ZW9mIHNyY2FkZHItPnNhX2ZhbWlseSB8fCBzcmNsZW4gPiBzaXplb2YgKmRzdGFkZHIpIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gLTE7CisgICAgfQorCisgIG1lbWNweSgoY2hhciAqKSBkc3RhZGRyLCAoY2hhciAqKSBzcmNhZGRyLCBzcmNsZW4pOworCisgIHN3aXRjaCAoc3JjYWRkci0+c2FfZmFtaWx5KSB7CisKKyAgY2FzZSBBRl9VTklYOgorICAgIHNyY3UgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX3VuICopIHNyY2FkZHI7CisgICAgZHN0dSA9IChzdHJ1Y3Qgc29ja2FkZHJfdW4gKikgZHN0YWRkcjsKKyAgICBkc3RzaXplID0gc2l6ZW9mICpkc3RhZGRyIC0gb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aCk7CisgICAgc3JjbGVuIC09IG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpOworICAgIGkgPSBRYWRydENvbnZlcnRBMkUoZHN0dS0+c3VuX3BhdGgsIHNyY3UtPnN1bl9wYXRoLCBkc3RzaXplIC0gMSwgc3JjbGVuKTsKKyAgICBkc3R1LT5zdW5fcGF0aFtpXSA9ICdcMCc7CisgICAgaSArPSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKTsKKyAgICBzcmNsZW4gPSBpOworICAgIH0KKworICByZXR1cm4gc3JjbGVuOworfQorCisKK2ludAorQ3VybF9vczQwMF9jb25uZWN0KGludCBzZCwgc3RydWN0IHNvY2thZGRyICogZGVzdGFkZHIsIGludCBhZGRybGVuKQorCit7CisgIGludCBpOworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsYWRkcjsKKworICBpID0gY29udmVydF9zb2NrYWRkcigmbGFkZHIsIGRlc3RhZGRyLCBhZGRybGVuKTsKKworICBpZiAoaSA8IDApCisgICAgcmV0dXJuIC0xOworCisgIHJldHVybiBjb25uZWN0KHNkLCAoc3RydWN0IHNvY2thZGRyICopICZsYWRkciwgaSk7Cit9CisKKworaW50CitDdXJsX29zNDAwX2JpbmQoaW50IHNkLCBzdHJ1Y3Qgc29ja2FkZHIgKiBsb2NhbGFkZHIsIGludCBhZGRybGVuKQorCit7CisgIGludCBpOworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsYWRkcjsKKworICBpID0gY29udmVydF9zb2NrYWRkcigmbGFkZHIsIGxvY2FsYWRkciwgYWRkcmxlbik7CisKKyAgaWYgKGkgPCAwKQorICAgIHJldHVybiAtMTsKKworICByZXR1cm4gYmluZChzZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmbGFkZHIsIGkpOworfQorCisKK2ludAorQ3VybF9vczQwMF9zZW5kdG8oaW50IHNkLCBjaGFyICogYnVmZmVyLCBpbnQgYnVmbGVuLCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqIGRzdGFkZHIsIGludCBhZGRybGVuKQorCit7CisgIGludCBpOworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsYWRkcjsKKworICBpID0gY29udmVydF9zb2NrYWRkcigmbGFkZHIsIGRzdGFkZHIsIGFkZHJsZW4pOworCisgIGlmIChpIDwgMCkKKyAgICByZXR1cm4gLTE7CisKKyAgcmV0dXJuIHNlbmR0byhzZCwgYnVmZmVyLCBidWZsZW4sIGZsYWdzLCAoc3RydWN0IHNvY2thZGRyICopICZsYWRkciwgaSk7Cit9CisKKworaW50CitDdXJsX29zNDAwX3JlY3Zmcm9tKGludCBzZCwgY2hhciAqIGJ1ZmZlciwgaW50IGJ1ZmxlbiwgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKiBmcm9tYWRkciwgaW50ICogYWRkcmxlbikKKworeworICBpbnQgaTsKKyAgaW50IHJjdmxlbjsKKyAgaW50IGxhZGRybGVuOworICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdW4gKiBzcmN1OworICBzdHJ1Y3Qgc29ja2FkZHJfdW4gKiBkc3R1OworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsYWRkcjsKKworICBpZiAoIWZyb21hZGRyIHx8ICFhZGRybGVuIHx8ICphZGRybGVuIDw9IDApCisgICAgcmV0dXJuIHJlY3Zmcm9tKHNkLCBidWZmZXIsIGJ1ZmxlbiwgZmxhZ3MsIGZyb21hZGRyLCBhZGRybGVuKTsKKworICBsYWRkcmxlbiA9IHNpemVvZiBsYWRkcjsKKyAgbGFkZHIuc3NfZmFtaWx5ID0gQUZfVU5TUEVDOyAgICAgICAgICAvKiBUbyBkZXRlY3QgaWYgdW51c2VkLiAqLworICByY3ZsZW4gPSByZWN2ZnJvbShzZCwgYnVmZmVyLCBidWZsZW4sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopICZsYWRkciwgJmxhZGRybGVuKTsKKworICBpZiAocmN2bGVuIDwgMCkKKyAgICByZXR1cm4gcmN2bGVuOworCisgIHN3aXRjaCAobGFkZHIuc3NfZmFtaWx5KSB7CisKKyAgY2FzZSBBRl9VTklYOgorICAgIHNyY3UgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX3VuICopICZsYWRkcjsKKyAgICBkc3R1ID0gKHN0cnVjdCBzb2NrYWRkcl91biAqKSBmcm9tYWRkcjsKKyAgICBpID0gKmFkZHJsZW4gLSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKTsKKyAgICBsYWRkcmxlbiAtPSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKTsKKyAgICBpID0gUWFkcnRDb252ZXJ0RTJBKGRzdHUtPnN1bl9wYXRoLCBzcmN1LT5zdW5fcGF0aCwgaSwgbGFkZHJsZW4pOworICAgIGxhZGRybGVuID0gaSArIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpOworCisgICAgaWYgKGxhZGRybGVuIDwgKmFkZHJsZW4pCisgICAgICBkc3R1LT5zdW5fcGF0aFtpXSA9ICdcMCc7CisKKyAgICBicmVhazsKKworICBjYXNlIEFGX1VOU1BFQzoKKyAgICBicmVhazsKKworICBkZWZhdWx0OgorICAgIGlmIChsYWRkcmxlbiA+ICphZGRybGVuKQorICAgICAgbGFkZHJsZW4gPSAqYWRkcmxlbjsKKworICAgIGlmIChsYWRkcmxlbikKKyAgICAgIG1lbWNweSgoY2hhciAqKSBmcm9tYWRkciwgKGNoYXIgKikgJmxhZGRyLCBsYWRkcmxlbik7CisKKyAgICBicmVhazsKKyAgICB9CisKKyAgKmFkZHJsZW4gPSBsYWRkcmxlbjsKKyAgcmV0dXJuIHJjdmxlbjsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL09TNDAwL29zNDAwc3lzLmggYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9vczQwMHN5cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDgzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9PUzQwMC9vczQwMHN5cy5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogT1MvNDAwIGFkZGl0aW9uYWwgZGVmaW5pdGlvbnMuICovCisKKyNpZm5kZWYgX19PUzQwMF9TWVNfCisjZGVmaW5lIF9fT1M0MDBfU1lTXworCisKKy8qIFBlci10aHJlYWQgaXRlbSBpZGVudGlmaWVycy4gKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgTEtfU1NMX0VSUk9SLAorICAgICAgICBMS19MREFQX0VSUk9SLAorICAgICAgICBMS19DVVJMX1ZFUlNJT04sCisgICAgICAgIExLX1ZFUlNJT05fSU5GTywKKyAgICAgICAgTEtfVkVSU0lPTl9JTkZPX0RBVEEsCisgICAgICAgIExLX0VBU1lfU1RSRVJST1IsCisgICAgICAgIExLX1NIQVJFX1NUUkVSUk9SLAorICAgICAgICBMS19NVUxUSV9TVFJFUlJPUiwKKyAgICAgICAgTEtfTEFTVAorfSAgICAgICAgICAgICAgIGxvY2Fsa2V5X3Q7CisKKworZXh0ZXJuIGNoYXIgKiAgICgqIEN1cmxfdGhyZWFkX2J1ZmZlcikobG9jYWxrZXlfdCBrZXksIGxvbmcgc2l6ZSk7CisKKworLyogTWF4aW11bSBzdHJpbmcgZXhwYW5zaW9uIGZhY3RvciBkdWUgdG8gY2hhcmFjdGVyIGNvZGUgY29udmVyc2lvbi4gKi8KKworI2RlZmluZSBNQVhfQ09OVl9FWFBBTlNJT04gICAgICA0ICAgICAgIC8qIENhbiBkZWFsIHdpdGggVVRGLTguICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvUkVBRE1FIGIvY3VybC03LjI1LjAvcGFja2FnZXMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ODdkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9SRUFETUUKQEAgLTAsMCArMSwyNyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKworUEFDS0FHRVMKKworIFRoaXMgZGlyZWN0b3J5IGFuZCBhbGwgaXRzIHN1YmRpcmVjdG9yaWVzIGFyZSBmb3Igc3BlY2lhbCBwYWNrYWdlCitpbmZvcm1hdGlvbiwgdGVtcGxhdGUsIHNjcmlwdHMgYW5kIGRvY3MuIFRoZSBmaWxlcyBoZXJlaW4gc2hvdWxkIGJlIG9mIHVzZSBmb3IKK3Rob3NlIG9mIHlvdSB3aG8gd2FudCB0byBwYWNrYWdlIGN1cmwgaW4gYSBiaW5hcnkgb3Igc291cmNlIGZvcm1hdCB1c2luZyBvbmUKK29mIHRob3NlIGN1c3RvbSBmb3JtYXRzLgorCisgVGhlIGhpZXJhcmNoeSBmb3IgdGhlc2UgZGlyZWN0b3JpZXMgaXMgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAgcGFja2FnZXMvW09TXS9bRk9STUFUXS8KKworIEN1cnJlbnRseSwgd2UgaGF2ZSBXaW4zMiBhbmQgTGludXggZm9yIFtPU10uIFRoZXJlIG1pZ2h0IGJlIGRpZmZlcmVudCBmb3JtYXRzCitmb3IgdGhlIHNhbWUgT1Mgc28gZm9yIExpbnV4IHdlIGhhdmUgUlBNIGFzIGZvcm1hdC4KKworIFdlIG1pZ2h0IG5lZWQgdG8gYWRkIHNvbWUgZGlmZmVyZW50aWF0aW9uIGZvciBDUFUgYXMgd2VsbCwgYXMgdGhlcmUgaXMKK0xpbnV4LVJQTXMgZm9yIHNldmVyYWwgQ1BVcy4gSG93ZXZlciwgaXQgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeSBzaW5jZSB0aGUKK3BhY2thZ2luZyBzaG91bGQgYmUgcHJldHR5IG11Y2ggdGhlIHNhbWUgbm8gbWF0dGVyIHdoYXQgQ1BVIHRoYXQgaXMgdXNlZC4KKworIEZvciBlYWNoIHVuaXF1ZSBPUy1GT1JNQVQgcGFpciwgdGhlcmUncyBhIGRpcmVjdG9yeSB0byAiZmlsbCIhIEknZCBsaWtlIHRvCitzZWUgYSBzaW5nbGUgUkVBRE1FIHdpdGggYXMgbXVjaCBkZXRhaWxzIGFzIHBvc3NpYmxlLCBhbmQgdGhlbiBJJ2QgbGlrZSBzb21lCit0ZW1wbGF0ZSBmaWxlcyBmb3IgdGhlIHBhY2thZ2UgcHJvY2Vzcy4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1NvbGFyaXMvTWFrZWZpbGUuYW0gYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9Tb2xhcmlzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTI5NDcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9Tb2xhcmlzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzggQEAKKyMKKyMKKworUEtHQUREX1BLRz0iQFBLR0FERF9QS0dAIgorUEtHQUREX05BTUU9IkBQQUNLQUdFQC1AVkVSU0lPTkAgLSBAUEtHQUREX05BTUVAIgorUEtHQUREX1ZFTkRPUj0iQFBLR0FERF9WRU5ET1JAIgorUEtHQUREX0FSQ0g9IkBob3N0X2NwdUAiCitQS0dBRERfREVTQz0iQFBBQ0tBR0VALUBWRVJTSU9OQCAtIEBQS0dBRERfTkFNRUAiCitQS0dBRERfQ0xBU1NFUz1ub25lCitQS0dBRERfQkFTRURJUj0vCisKK1BLR0FERF9GSUxFPSR7UEtHQUREX1BLR30tQFBBQ0tBR0VALUBWRVJTSU9OQC1AaG9zdEAucGtnCisKK3BhY2thZ2U6CisJaWYgWyAhIC1mIHJlbGVhc2UgXTsgdGhlbiBlY2hvIDAgPiByZWxlYXNlOyBmaQorCWlmIFsgYGZpbmQgcm9vdCAtbmV3ZXIgcmVsZWFzZSAtcHJpbnR8d2MgLWxgIC1ndCAwIF07IHRoZW4gZXhwciBgY2F0IHJlbGVhc2VgICsgMSA+IHJlbGVhc2U7IGZpCisJZWNobyBQS0c9JHtQS0dBRERfUEtHfSA+IHBrZ2luZm8KKwllY2hvIE5BTUU9JHtQS0dBRERfTkFNRX0gPj4gcGtnaW5mbworCWVjaG8gVkVORE9SPSR7UEtHQUREX1ZFTkRPUn0gPj4gcGtnaW5mbworCWVjaG8gQVJDSD0ke1BLR0FERF9BUkNIfSA+PiBwa2dpbmZvCisJZWNobyBERVNDPSR7UEtHQUREX0RFU0N9ID4+IHBrZ2luZm8KKwllY2hvIENMQVNTRVM9JHtQS0dBRERfQ0xBU1NFU30gPj4gcGtnaW5mbworCWVjaG8gQkFTRURJUj0ke1BLR0FERF9CQVNFRElSfSA+PiBwa2dpbmZvCisJZWNobyBDQVRFR09SWT1hcHBsaWNhdGlvbiA+PiBwa2dpbmZvCisJZWNobyBWRVJTSU9OPWBjYXQgLi9yZWxlYXNlYCA+PiBwa2dpbmZvCisJZWNobyA+IHByb3RvdHlwZQorCWZvciBzdWJkaXIgaW4gb3B0IHZhciBldGMgdXNyOyBcCisJZG8gaWYgWyAtZCByb290LyQkc3ViZGlyIF07IHRoZW4gXAorCQlwa2dwcm90byByb290LyQkc3ViZGlyPSQkc3ViZGlyID4+IHByb3RvdHlwZTtcCisJZmk7IGRvbmUKKwlmb3IgZmlsZSBpbiBwa2dpbmZvIHByZWluc3RhbGwgcG9zdGluc3RhbGwgY29weXJpZ2h0OyBcCisJZG8gaWYgWyAtZiAkJGZpbGUgXTsgdGhlbiBcCisJCWVjaG8gImkgJCRmaWxlPSQkZmlsZSIgPj4gcHJvdG90eXBlOyBcCisJZmk7IGRvbmUKKwlybSAtcmYgLi90bXAKKwlta2RpciAuL3RtcAorCXBrZ21rIC1vIC1kIC4vdG1wCisJcGtndHJhbnMgLXNvIC4vdG1wICR7dG9wX3NyY2Rpcn0vLi4vJHtQS0dBRERfRklMRX0gJHtQS0dBRERfUEtHfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvU29sYXJpcy9NYWtlZmlsZS5pbiBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1NvbGFyaXMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1YzkyNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1NvbGFyaXMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0NTMgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIworIworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLi8uLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gcGFja2FnZXMvU29sYXJpcworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbXBpbGVycy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbmZvcHRzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtZnVuY3Rpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3BlbnNzbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW92ZXJyaWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtcmVlbnRyYW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtc3lzdGVtLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hjLXRyYW5zbGl0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3p6NTAteGMtb3ZyLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvc3JjL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACitBTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFID0gQEJVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFQAorQlVJTERfTElCSE9TVE5BTUVfVFJVRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9UUlVFQAorQlVJTERfVU5JVFRFU1RTX0ZBTFNFID0gQEJVSUxEX1VOSVRURVNUU19GQUxTRUAKK0JVSUxEX1VOSVRURVNUU19UUlVFID0gQEJVSUxEX1VOSVRURVNUU19UUlVFQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NPTkZJR1VSRV9PUFRJT05TID0gQENPTkZJR1VSRV9PUFRJT05TQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1JPU1NDT01QSUxJTkdfRkFMU0UgPSBAQ1JPU1NDT01QSUxJTkdfRkFMU0VACitDUk9TU0NPTVBJTElOR19UUlVFID0gQENST1NTQ09NUElMSU5HX1RSVUVACitDVVJMREVCVUdfRkFMU0UgPSBAQ1VSTERFQlVHX0ZBTFNFQAorQ1VSTERFQlVHX1RSVUUgPSBAQ1VSTERFQlVHX1RSVUVACitDVVJMVkVSU0lPTiA9IEBDVVJMVkVSU0lPTkAKK0NVUkxfQ0FfQlVORExFID0gQENVUkxfQ0FfQlVORExFQAorQ1VSTF9DRkxBR19FWFRSQVMgPSBAQ1VSTF9DRkxBR19FWFRSQVNACitDVVJMX0RJU0FCTEVfRElDVCA9IEBDVVJMX0RJU0FCTEVfRElDVEAKK0NVUkxfRElTQUJMRV9GSUxFID0gQENVUkxfRElTQUJMRV9GSUxFQAorQ1VSTF9ESVNBQkxFX0ZUUCA9IEBDVVJMX0RJU0FCTEVfRlRQQAorQ1VSTF9ESVNBQkxFX0dPUEhFUiA9IEBDVVJMX0RJU0FCTEVfR09QSEVSQAorQ1VSTF9ESVNBQkxFX0hUVFAgPSBAQ1VSTF9ESVNBQkxFX0hUVFBACitDVVJMX0RJU0FCTEVfSU1BUCA9IEBDVVJMX0RJU0FCTEVfSU1BUEAKK0NVUkxfRElTQUJMRV9MREFQID0gQENVUkxfRElTQUJMRV9MREFQQAorQ1VSTF9ESVNBQkxFX0xEQVBTID0gQENVUkxfRElTQUJMRV9MREFQU0AKK0NVUkxfRElTQUJMRV9QT1AzID0gQENVUkxfRElTQUJMRV9QT1AzQAorQ1VSTF9ESVNBQkxFX1BST1hZID0gQENVUkxfRElTQUJMRV9QUk9YWUAKK0NVUkxfRElTQUJMRV9SVFNQID0gQENVUkxfRElTQUJMRV9SVFNQQAorQ1VSTF9ESVNBQkxFX1NNVFAgPSBAQ1VSTF9ESVNBQkxFX1NNVFBACitDVVJMX0RJU0FCTEVfVEVMTkVUID0gQENVUkxfRElTQUJMRV9URUxORVRACitDVVJMX0RJU0FCTEVfVEZUUCA9IEBDVVJMX0RJU0FCTEVfVEZUUEAKK0NVUkxfTElCUyA9IEBDVVJMX0xJQlNACitDVVJMX05FVFdPUktfTElCUyA9IEBDVVJMX05FVFdPUktfTElCU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TSEFSRUQgPSBARU5BQkxFX1NIQVJFREAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfR05VVExTX1NSUCA9IEBIQVZFX0dOVVRMU19TUlBACitIQVZFX0xEQVBfU1NMID0gQEhBVkVfTERBUF9TU0xACitIQVZFX0xJQlogPSBASEFWRV9MSUJaQAorSEFWRV9MSUJaX0ZBTFNFID0gQEhBVkVfTElCWl9GQUxTRUAKK0hBVkVfTElCWl9UUlVFID0gQEhBVkVfTElCWl9UUlVFQAorSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QgPSBASEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1RACitIQVZFX1NTTEVBWV9TUlAgPSBASEFWRV9TU0xFQVlfU1JQQAorSUROX0VOQUJMRUQgPSBASUROX0VOQUJMRURACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lQVjZfRU5BQkxFRCA9IEBJUFY2X0VOQUJMRURACitLUkI0X0VOQUJMRUQgPSBAS1JCNF9FTkFCTEVEQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJDVVJMX0xJQlMgPSBATElCQ1VSTF9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQU5PUFQgPSBATUFOT1BUQAorTUlNUFVSRV9GQUxTRSA9IEBNSU1QVVJFX0ZBTFNFQAorTUlNUFVSRV9UUlVFID0gQE1JTVBVUkVfVFJVRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PX1VOREVGSU5FRF9GQUxTRSA9IEBOT19VTkRFRklORURfRkFMU0VACitOT19VTkRFRklORURfVFJVRSA9IEBOT19VTkRFRklORURfVFJVRUAKK05ST0ZGID0gQE5ST0ZGQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSCA9IEBQQVRIQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACitQS0dBRERfTkFNRSA9ICJAUEFDS0FHRUAtQFZFUlNJT05AIC0gQFBLR0FERF9OQU1FQCIKK1BLR0FERF9QS0cgPSAiQFBLR0FERF9QS0dAIgorUEtHQUREX1ZFTkRPUiA9ICJAUEtHQUREX1ZFTkRPUkAiCitQS0dDT05GSUcgPSBAUEtHQ09ORklHQAorUkFORE9NX0ZJTEUgPSBAUkFORE9NX0ZJTEVACitSQU5MSUIgPSBAUkFOTElCQAorUkVRVUlSRV9MSUJfREVQUyA9IEBSRVFVSVJFX0xJQl9ERVBTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTT05BTUVfQlVNUF9GQUxTRSA9IEBTT05BTUVfQlVNUF9GQUxTRUAKK1NPTkFNRV9CVU1QX1RSVUUgPSBAU09OQU1FX0JVTVBfVFJVRUAKK1NTTF9FTkFCTEVEID0gQFNTTF9FTkFCTEVEQAorU1RBVElDTElCX0ZBTFNFID0gQFNUQVRJQ0xJQl9GQUxTRUAKK1NUQVRJQ0xJQl9UUlVFID0gQFNUQVRJQ0xJQl9UUlVFQAorU1RSSVAgPSBAU1RSSVBACitTVVBQT1JUX0ZFQVRVUkVTID0gQFNVUFBPUlRfRkVBVFVSRVNACitTVVBQT1JUX1BST1RPQ09MUyA9IEBTVVBQT1JUX1BST1RPQ09MU0AKK1RFU1RfU0VSVkVSX0xJQlMgPSBAVEVTVF9TRVJWRVJfTElCU0AKK1VTRV9BUkVTID0gQFVTRV9BUkVTQAorVVNFX0FYVExTID0gQFVTRV9BWFRMU0AKK1VTRV9DWUFTU0wgPSBAVVNFX0NZQVNTTEAKK1VTRV9FTUJFRERFRF9BUkVTX0ZBTFNFID0gQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQAorVVNFX0VNQkVEREVEX0FSRVNfVFJVRSA9IEBVU0VfRU1CRURERURfQVJFU19UUlVFQAorVVNFX0dOVVRMUyA9IEBVU0VfR05VVExTQAorVVNFX0dOVVRMU19ORVRUTEUgPSBAVVNFX0dOVVRMU19ORVRUTEVACitVU0VfTElCUlRNUCA9IEBVU0VfTElCUlRNUEAKK1VTRV9MSUJTU0gyID0gQFVTRV9MSUJTU0gyQAorVVNFX01BTlVBTF9GQUxTRSA9IEBVU0VfTUFOVUFMX0ZBTFNFQAorVVNFX01BTlVBTF9UUlVFID0gQFVTRV9NQU5VQUxfVFJVRUAKK1VTRV9OU1MgPSBAVVNFX05TU0AKK1VTRV9PUEVOTERBUCA9IEBVU0VfT1BFTkxEQVBACitVU0VfUE9MQVJTU0wgPSBAVVNFX1BPTEFSU1NMQAorVVNFX1NTTEVBWSA9IEBVU0VfU1NMRUFZQAorVVNFX1dJTkRPV1NfU1NQSSA9IEBVU0VfV0lORE9XU19TU1BJQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVkVSU0lPTkVEX0ZMQVZPVVIgPSBAVkVSU0lPTkVEX0ZMQVZPVVJACitWRVJTSU9ORURfU1lNQk9MU19GQUxTRSA9IEBWRVJTSU9ORURfU1lNQk9MU19GQUxTRUAKK1ZFUlNJT05FRF9TWU1CT0xTX1RSVUUgPSBAVkVSU0lPTkVEX1NZTUJPTFNfVFJVRUAKK1ZFUlNJT05OVU0gPSBAVkVSU0lPTk5VTUAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpYmV4dCA9IEBsaWJleHRACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACitQS0dBRERfQVJDSCA9ICJAaG9zdF9jcHVAIgorUEtHQUREX0RFU0MgPSAiQFBBQ0tBR0VALUBWRVJTSU9OQCAtIEBQS0dBRERfTkFNRUAiCitQS0dBRERfQ0xBU1NFUyA9IG5vbmUKK1BLR0FERF9CQVNFRElSID0gLworUEtHQUREX0ZJTEUgPSAke1BLR0FERF9QS0d9LUBQQUNLQUdFQC1AVkVSU0lPTkAtQGhvc3RALnBrZworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHBhY2thZ2VzL1NvbGFyaXMvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHBhY2thZ2VzL1NvbGFyaXMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKKwkgIGVzYWM7IFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKKwkgICAgZGlyPSIvJCRkaXIiOyBcCisJICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKKwkgIGVsc2UgXAorCSAgICBkaXI9Jyc7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1pbmZvLWFtCisKKworcGFja2FnZToKKwlpZiBbICEgLWYgcmVsZWFzZSBdOyB0aGVuIGVjaG8gMCA+IHJlbGVhc2U7IGZpCisJaWYgWyBgZmluZCByb290IC1uZXdlciByZWxlYXNlIC1wcmludHx3YyAtbGAgLWd0IDAgXTsgdGhlbiBleHByIGBjYXQgcmVsZWFzZWAgKyAxID4gcmVsZWFzZTsgZmkKKwllY2hvIFBLRz0ke1BLR0FERF9QS0d9ID4gcGtnaW5mbworCWVjaG8gTkFNRT0ke1BLR0FERF9OQU1FfSA+PiBwa2dpbmZvCisJZWNobyBWRU5ET1I9JHtQS0dBRERfVkVORE9SfSA+PiBwa2dpbmZvCisJZWNobyBBUkNIPSR7UEtHQUREX0FSQ0h9ID4+IHBrZ2luZm8KKwllY2hvIERFU0M9JHtQS0dBRERfREVTQ30gPj4gcGtnaW5mbworCWVjaG8gQ0xBU1NFUz0ke1BLR0FERF9DTEFTU0VTfSA+PiBwa2dpbmZvCisJZWNobyBCQVNFRElSPSR7UEtHQUREX0JBU0VESVJ9ID4+IHBrZ2luZm8KKwllY2hvIENBVEVHT1JZPWFwcGxpY2F0aW9uID4+IHBrZ2luZm8KKwllY2hvIFZFUlNJT049YGNhdCAuL3JlbGVhc2VgID4+IHBrZ2luZm8KKwllY2hvID4gcHJvdG90eXBlCisJZm9yIHN1YmRpciBpbiBvcHQgdmFyIGV0YyB1c3I7IFwKKwlkbyBpZiBbIC1kIHJvb3QvJCRzdWJkaXIgXTsgdGhlbiBcCisJCXBrZ3Byb3RvIHJvb3QvJCRzdWJkaXI9JCRzdWJkaXIgPj4gcHJvdG90eXBlO1wKKwlmaTsgZG9uZQorCWZvciBmaWxlIGluIHBrZ2luZm8gcHJlaW5zdGFsbCBwb3N0aW5zdGFsbCBjb3B5cmlnaHQ7IFwKKwlkbyBpZiBbIC1mICQkZmlsZSBdOyB0aGVuIFwKKwkJZWNobyAiaSAkJGZpbGU9JCRmaWxlIiA+PiBwcm90b3R5cGU7IFwKKwlmaTsgZG9uZQorCXJtIC1yZiAuL3RtcAorCW1rZGlyIC4vdG1wCisJcGtnbWsgLW8gLWQgLi90bXAKKwlwa2d0cmFucyAtc28gLi90bXAgJHt0b3Bfc3JjZGlyfS8uLi8ke1BLR0FERF9GSUxFfSAke1BLR0FERF9QS0d9CisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2J3aW5zL2xpYmN1cmx1LmRlZiBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1N5bWJpYW4vYndpbnMvbGliY3VybHUuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNjkzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2J3aW5zL2xpYmN1cmx1LmRlZgpAQCAtMCwwICsxLDYwIEBACitFWFBPUlRTCisJY3VybF9lYXN5X2NsZWFudXAgQCAxIE5PTkFNRQorCWN1cmxfZWFzeV9kdXBoYW5kbGUgQCAyIE5PTkFNRQorCWN1cmxfZWFzeV9lc2NhcGUgQCAzIE5PTkFNRQorCWN1cmxfZWFzeV9nZXRpbmZvIEAgNCBOT05BTUUKKwljdXJsX2Vhc3lfaW5pdCBAIDUgTk9OQU1FCisJY3VybF9lYXN5X3BhdXNlIEAgNiBOT05BTUUKKwljdXJsX2Vhc3lfcGVyZm9ybSBAIDcgTk9OQU1FCisJY3VybF9lYXN5X3Jlc2V0IEAgOCBOT05BTUUKKwljdXJsX2Vhc3lfc2V0b3B0IEAgOSBOT05BTUUKKwljdXJsX2Vhc3lfc3RyZXJyb3IgQCAxMCBOT05BTUUKKwljdXJsX2Vhc3lfdW5lc2NhcGUgQCAxMSBOT05BTUUKKwljdXJsX2VzY2FwZSBAIDEyIE5PTkFNRQorCWN1cmxfZm9ybWFkZCBAIDEzIE5PTkFNRQorCWN1cmxfZm9ybWZyZWUgQCAxNCBOT05BTUUKKwljdXJsX2Zvcm1nZXQgQCAxNSBOT05BTUUKKwljdXJsX2ZyZWUgQCAxNiBOT05BTUUKKwljdXJsX2dldGRhdGUgQCAxNyBOT05BTUUKKwljdXJsX2dldGVudiBAIDE4IE5PTkFNRQorCWN1cmxfZ2xvYmFsX2NsZWFudXAgQCAxOSBOT05BTUUKKwljdXJsX2dsb2JhbF9pbml0IEAgMjAgTk9OQU1FCisJY3VybF9nbG9iYWxfaW5pdF9tZW0gQCAyMSBOT05BTUUKKwljdXJsX21hcHJpbnRmIEAgMjIgTk9OQU1FCisJY3VybF9tZnByaW50ZiBAIDIzIE5PTkFNRQorCWN1cmxfbXByaW50ZiBAIDI0IE5PTkFNRQorCWN1cmxfbXNucHJpbnRmIEAgMjUgTk9OQU1FCisJY3VybF9tc3ByaW50ZiBAIDI2IE5PTkFNRQorCWN1cmxfbXVsdGlfYWRkX2hhbmRsZSBAIDI3IE5PTkFNRQorCWN1cmxfbXVsdGlfYXNzaWduIEAgMjggTk9OQU1FCisJY3VybF9tdWx0aV9jbGVhbnVwIEAgMjkgTk9OQU1FCisJY3VybF9tdWx0aV9mZHNldCBAIDMwIE5PTkFNRQorCWN1cmxfbXVsdGlfaW5mb19yZWFkIEAgMzEgTk9OQU1FCisJY3VybF9tdWx0aV9pbml0IEAgMzIgTk9OQU1FCisJY3VybF9tdWx0aV9wZXJmb3JtIEAgMzMgTk9OQU1FCisJY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlIEAgMzQgTk9OQU1FCisJY3VybF9tdWx0aV9zZXRvcHQgQCAzNSBOT05BTUUKKwljdXJsX211bHRpX3NvY2tldCBAIDM2IE5PTkFNRQorCWN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbiBAIDM3IE5PTkFNRQorCWN1cmxfbXVsdGlfc29ja2V0X2FsbCBAIDM4IE5PTkFNRQorCWN1cmxfbXVsdGlfc3RyZXJyb3IgQCAzOSBOT05BTUUKKwljdXJsX211bHRpX3RpbWVvdXQgQCA0MCBOT05BTUUKKwljdXJsX212YXByaW50ZiBAIDQxIE5PTkFNRQorCWN1cmxfbXZmcHJpbnRmIEAgNDIgTk9OQU1FCisJY3VybF9tdnByaW50ZiBAIDQzIE5PTkFNRQorCWN1cmxfbXZzbnByaW50ZiBAIDQ0IE5PTkFNRQorCWN1cmxfbXZzcHJpbnRmIEAgNDUgTk9OQU1FCisJY3VybF9zaGFyZV9jbGVhbnVwIEAgNDYgTk9OQU1FCisJY3VybF9zaGFyZV9pbml0IEAgNDcgTk9OQU1FCisJY3VybF9zaGFyZV9zZXRvcHQgQCA0OCBOT05BTUUKKwljdXJsX3NoYXJlX3N0cmVycm9yIEAgNDkgTk9OQU1FCisJY3VybF9zbGlzdF9hcHBlbmQgQCA1MCBOT05BTUUKKwljdXJsX3NsaXN0X2ZyZWVfYWxsIEAgNTEgTk9OQU1FCisJY3VybF9zdHJlcXVhbCBAIDUyIE5PTkFNRQorCWN1cmxfc3RybmVxdWFsIEAgNTMgTk9OQU1FCisJY3VybF91bmVzY2FwZSBAIDU0IE5PTkFNRQorCWN1cmxfdmVyc2lvbiBAIDU1IE5PTkFNRQorCWN1cmxfdmVyc2lvbl9pbmZvIEAgNTYgTk9OQU1FCisJY3VybF9lYXN5X3JlY3YgQCA1NyBOT05BTUUKKwljdXJsX2Vhc3lfc2VuZCBAIDU4IE5PTkFNRQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2VhYmkvbGliY3VybHUuZGVmIGIvY3VybC03LjI1LjAvcGFja2FnZXMvU3ltYmlhbi9lYWJpL2xpYmN1cmx1LmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY5M2E5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvU3ltYmlhbi9lYWJpL2xpYmN1cmx1LmRlZgpAQCAtMCwwICsxLDYwIEBACitFWFBPUlRTCisJY3VybF9lYXN5X2NsZWFudXAgQCAxIE5PTkFNRQorCWN1cmxfZWFzeV9kdXBoYW5kbGUgQCAyIE5PTkFNRQorCWN1cmxfZWFzeV9lc2NhcGUgQCAzIE5PTkFNRQorCWN1cmxfZWFzeV9nZXRpbmZvIEAgNCBOT05BTUUKKwljdXJsX2Vhc3lfaW5pdCBAIDUgTk9OQU1FCisJY3VybF9lYXN5X3BhdXNlIEAgNiBOT05BTUUKKwljdXJsX2Vhc3lfcGVyZm9ybSBAIDcgTk9OQU1FCisJY3VybF9lYXN5X3Jlc2V0IEAgOCBOT05BTUUKKwljdXJsX2Vhc3lfc2V0b3B0IEAgOSBOT05BTUUKKwljdXJsX2Vhc3lfc3RyZXJyb3IgQCAxMCBOT05BTUUKKwljdXJsX2Vhc3lfdW5lc2NhcGUgQCAxMSBOT05BTUUKKwljdXJsX2VzY2FwZSBAIDEyIE5PTkFNRQorCWN1cmxfZm9ybWFkZCBAIDEzIE5PTkFNRQorCWN1cmxfZm9ybWZyZWUgQCAxNCBOT05BTUUKKwljdXJsX2Zvcm1nZXQgQCAxNSBOT05BTUUKKwljdXJsX2ZyZWUgQCAxNiBOT05BTUUKKwljdXJsX2dldGRhdGUgQCAxNyBOT05BTUUKKwljdXJsX2dldGVudiBAIDE4IE5PTkFNRQorCWN1cmxfZ2xvYmFsX2NsZWFudXAgQCAxOSBOT05BTUUKKwljdXJsX2dsb2JhbF9pbml0IEAgMjAgTk9OQU1FCisJY3VybF9nbG9iYWxfaW5pdF9tZW0gQCAyMSBOT05BTUUKKwljdXJsX21hcHJpbnRmIEAgMjIgTk9OQU1FCisJY3VybF9tZnByaW50ZiBAIDIzIE5PTkFNRQorCWN1cmxfbXByaW50ZiBAIDI0IE5PTkFNRQorCWN1cmxfbXNucHJpbnRmIEAgMjUgTk9OQU1FCisJY3VybF9tc3ByaW50ZiBAIDI2IE5PTkFNRQorCWN1cmxfbXVsdGlfYWRkX2hhbmRsZSBAIDI3IE5PTkFNRQorCWN1cmxfbXVsdGlfYXNzaWduIEAgMjggTk9OQU1FCisJY3VybF9tdWx0aV9jbGVhbnVwIEAgMjkgTk9OQU1FCisJY3VybF9tdWx0aV9mZHNldCBAIDMwIE5PTkFNRQorCWN1cmxfbXVsdGlfaW5mb19yZWFkIEAgMzEgTk9OQU1FCisJY3VybF9tdWx0aV9pbml0IEAgMzIgTk9OQU1FCisJY3VybF9tdWx0aV9wZXJmb3JtIEAgMzMgTk9OQU1FCisJY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlIEAgMzQgTk9OQU1FCisJY3VybF9tdWx0aV9zZXRvcHQgQCAzNSBOT05BTUUKKwljdXJsX211bHRpX3NvY2tldCBAIDM2IE5PTkFNRQorCWN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbiBAIDM3IE5PTkFNRQorCWN1cmxfbXVsdGlfc29ja2V0X2FsbCBAIDM4IE5PTkFNRQorCWN1cmxfbXVsdGlfc3RyZXJyb3IgQCAzOSBOT05BTUUKKwljdXJsX211bHRpX3RpbWVvdXQgQCA0MCBOT05BTUUKKwljdXJsX212YXByaW50ZiBAIDQxIE5PTkFNRQorCWN1cmxfbXZmcHJpbnRmIEAgNDIgTk9OQU1FCisJY3VybF9tdnByaW50ZiBAIDQzIE5PTkFNRQorCWN1cmxfbXZzbnByaW50ZiBAIDQ0IE5PTkFNRQorCWN1cmxfbXZzcHJpbnRmIEAgNDUgTk9OQU1FCisJY3VybF9zaGFyZV9jbGVhbnVwIEAgNDYgTk9OQU1FCisJY3VybF9zaGFyZV9pbml0IEAgNDcgTk9OQU1FCisJY3VybF9zaGFyZV9zZXRvcHQgQCA0OCBOT05BTUUKKwljdXJsX3NoYXJlX3N0cmVycm9yIEAgNDkgTk9OQU1FCisJY3VybF9zbGlzdF9hcHBlbmQgQCA1MCBOT05BTUUKKwljdXJsX3NsaXN0X2ZyZWVfYWxsIEAgNTEgTk9OQU1FCisJY3VybF9zdHJlcXVhbCBAIDUyIE5PTkFNRQorCWN1cmxfc3RybmVxdWFsIEAgNTMgTk9OQU1FCisJY3VybF91bmVzY2FwZSBAIDU0IE5PTkFNRQorCWN1cmxfdmVyc2lvbiBAIDU1IE5PTkFNRQorCWN1cmxfdmVyc2lvbl9pbmZvIEAgNTYgTk9OQU1FCisJY3VybF9lYXN5X3JlY3YgQCA1NyBOT05BTUUKKwljdXJsX2Vhc3lfc2VuZCBAIDU4IE5PTkFNRQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2JsZC5pbmYgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2JsZC5pbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0YTg0MwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1N5bWJpYW4vZ3JvdXAvYmxkLmluZgpAQCAtMCwwICsxLDEwIEBACisvLworLy8gbGliY3VybCBhbmQgY3VybCBibGQuaW5mIGZpbGUgZm9yIFN5bWJpYW4gT1MKKy8vCitQUkpfRVhQT1JUUworICAgICAgICBsaWJjdXJsLmlieSAvZXBvYzMyL3JvbS9pbmNsdWRlL2xpYmN1cmwuaWJ5CisgICAgICAgIGN1cmwuaWJ5IC9lcG9jMzIvcm9tL2luY2x1ZGUvY3VybC5pYnkKKworUFJKX01NUEZJTEVTCisgICAgICAgIGxpYmN1cmwubW1wCisgICAgICAgIGN1cmwubW1wCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2N1cmwuaWJ5IGIvY3VybC03LjI1LjAvcGFja2FnZXMvU3ltYmlhbi9ncm91cC9jdXJsLmlieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTIxYWFhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvU3ltYmlhbi9ncm91cC9jdXJsLmlieQpAQCAtMCwwICsxLDE1IEBACisvLworLy8gY3VybCBmaWxlIHRyYW5zZmVyIHV0aWxpdHkgY29tbWFuZC1saW5lIHV0aWxpdHkKKy8vCisvLyBVc2UgdGhpcyBmaWxlIHdpdGggYnVpbGRyb20gdG8gYWRkIGN1cmwgdG8gYSBkZXZpY2UgUk9NCisvLworCisjaWZuZGVmIENVUkxfSUJZCisjZGVmaW5lIENVUkxfSUJZCisKKyNpbmNsdWRlIDxvcGVuZW52LmlieT4KKyNpbmNsdWRlIDxsaWJjdXJsLmlieT4KKworZmlsZT1BQklfRElSXEJVSUxEX0RJUlxjdXJsLmV4ZSAgICAgICAgICAgIFxzeXNcYmluXGN1cmwuZXhlCisKKyNlbmRpZiAvLyBDVVJMX0lCWQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvU3ltYmlhbi9ncm91cC9jdXJsLm1tcCBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1N5bWJpYW4vZ3JvdXAvY3VybC5tbXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2ZDIyYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1N5bWJpYW4vZ3JvdXAvY3VybC5tbXAKQEAgLTAsMCArMSw2MyBAQAorLy8KKy8vIGNVUkwgbmV0d29yayByZXRyaWV2YWwgY2xpZW50CisvLworCitUQVJHRVQgICAgICAgIGN1cmwuZXhlCitUQVJHRVRUWVBFICAgIGV4ZQorVUlEICAgICAgICAgICAweDAwMDAwMDAwIDB4RjAyMDY0NDIKKworU09VUkNFUEFUSCAgLi4vLi4vLi4vc3JjCitTT1VSQ0UgXAorICAgIGh1Z2VoZWxwLmMgXAorICAgIHRvb2xfYmlubW9kZS5jIFwKKyAgICB0b29sX2JuYW1lLmMgXAorICAgIHRvb2xfY2JfZGJnLmMgXAorICAgIHRvb2xfY2JfaGRyLmMgXAorICAgIHRvb2xfY2JfcHJnLmMgXAorICAgIHRvb2xfY2JfcmVhLmMgXAorICAgIHRvb2xfY2Jfc2VlLmMgXAorICAgIHRvb2xfY2Jfd3J0LmMgXAorICAgIHRvb2xfY2ZnYWJsZS5jIFwKKyAgICB0b29sX2NvbnZlcnQuYyBcCisgICAgdG9vbF9kaXJoaWUuYyBcCisgICAgdG9vbF9kb3N3aW4uYyBcCisgICAgdG9vbF9lYXN5c3JjLmMgXAorICAgIHRvb2xfZm9ybXBhcnNlLmMgXAorICAgIHRvb2xfZ2V0cGFyYW0uYyBcCisgICAgdG9vbF9nZXRwYXNzLmMgXAorICAgIHRvb2xfaGVscC5jIFwKKyAgICB0b29sX2hlbHBlcnMuYyBcCisgICAgdG9vbF9ob21lZGlyLmMgXAorICAgIHRvb2xfbGliaW5mby5jIFwKKyAgICB0b29sX21haW4uYyBcCisgICAgdG9vbF9tZmlsZXMuYyBcCisgICAgdG9vbF9tc2dzLmMgXAorICAgIHRvb2xfb3BlcmF0ZS5jIFwKKyAgICB0b29sX29wZXJobHAuYyBcCisgICAgdG9vbF9wYW55a2V5LmMgXAorICAgIHRvb2xfcGFyYW1obHAuYyBcCisgICAgdG9vbF9wYXJzZWNmZy5jIFwKKyAgICB0b29sX3NldG9wdC5jIFwKKyAgICB0b29sX3NsZWVwLmMgXAorICAgIHRvb2xfdXJsZ2xvYi5jIFwKKyAgICB0b29sX3V0aWwuYyBcCisgICAgdG9vbF92bXMuYyBcCisgICAgdG9vbF93cml0ZWVudi5jIFwKKyAgICB0b29sX3dyaXRlb3V0LmMgXAorICAgIHRvb2xfeGF0dHIuYworCitTT1VSQ0VQQVRIICAuLi8uLi8uLi9saWIKK1NPVVJDRSBcCisgICAgcmF3c3RyLmMgbm9uYmxvY2suYworCitVU0VSSU5DTFVERSAuLi8uLi8uLi9zcmMgLi4vLi4vLi4vbGliIC4uLy4uLy4uL2luY2x1ZGUvY3VybAorCitTWVNURU1JTkNMVURFIC4uLy4uLy4uL2luY2x1ZGUgL2Vwb2MzMi9pbmNsdWRlIC9lcG9jMzIvaW5jbHVkZS9zdGRhcGlzCisKK0xJQlJBUlkgICAgICAgZXVzZXIubGliIGxpYmMubGliIGxpYmN1cmwubGliCitTVEFUSUNMSUJSQVJZIGxpYmNydDAubGliCisKK0NBUEFCSUxJVFkgTmV0d29ya1NlcnZpY2VzCisKK0VQT0NTVEFDS1NJWkUgMHg4MDAwCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1N5bWJpYW4vZ3JvdXAvY3VybC5wa2cgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2N1cmwucGtnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYzk5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2N1cmwucGtnCkBAIC0wLDAgKzEsMjYgQEAKKzsgY3VybCBwYWNrYWdlIGRlZmludGlvbiBmaWxlCis7IFVzZSB3aXRoIG1ha2VzaXMgdG8gY3JlYXRlIGEgU3ltYmlhbiAuc2lzIHBhY2thZ2UKKworO0xhbmd1YWdlIC0gc3RhbmRhcmQgbGFuZ3VhZ2UgZGVmaW5pdGlvbnMKKyZFTgorCis7SGVhZGVyIC0gc3RhbmRhcmQgc2lzIGZpbGUgaGVhZGVyIGluY2x1ZGluZyB2ZXJzaW9uIG51bWJlcgorO1ZlcnNpb24gc2NoZW1lOiBjdXJsJ3MgbWFqb3IsIGN1cmwncyBtaW5vciwgY3VybCdzIHN1Ym1pbm9yKjEwMCArIGJ1aWxkIG51bWJlcgorOyBlLmcuIFRoZSB0aGlyZCBTeW1iaWFuIHBhY2thZ2Ugb2YgY3VybCB2ZXIuIDcuMjAuMSB3b3VsZCBoYXZlIGEgU0lTIHBhY2thZ2UKKzsgdmVyc2lvbiBvZiA3LCAyMCwgMTAzCisjeyJjdXJsIn0sICgweEYwMjA2NDQyKSwgNywgMjAsIDxwbGVhc2VfdXBkYXRlX3ZlcnNpb24+LCBUWVBFPVNBCisKKzsgVmVuZG9yIG5hbWUKKyV7ImN1cmwgcHJvamVjdCJ9Cis6ImN1cmwgcHJvamVjdCIKKworOyBFbWJlZGRlZCBjb21wb25lbnQKK0AibGliY3VybC5zaXMiLCgweEYwMjA2RDAwKQorCis7IEEgZGVwZW5kZW5jeSBvbiBQLkkuUC5TLiBhbmQgdGhlIHN0ZGlvIHNlcnZlciBhcmUgcHJvYmFibHkgZ29vZCB0byBoYXZlIGhlcmUKKzsoMHgyMDAwOUE4MCksICosICosICosIHsiT3BlbiBDIFN0YW5kYXJkIExpYnJhcmllcyJ9Cis7KDB4MjAwMDlBODEpLCAqLCAqLCAqLCB7IlAuSS5QLlMuIGZvciBVSVEgMyJ9Cis7KDB4MjAwMDlBQTIpLCAqLCAqLCAqLCB7IlN5bWJpYW4gT1MgU1RESU9TRVJWRVIifQorCis7RmlsZXMgLSBzdGFuZGFyZCBmaWxlIHNwZWNpZmljYXRpb25zCisiXGVwb2MzMlxyZWxlYXNlXGFybXY1XHVyZWxcY3VybC5leGUiIC0gIiQ6XHN5c1xiaW5cY3VybC5leGUiCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2xpYmN1cmwuaWJ5IGIvY3VybC03LjI1LjAvcGFja2FnZXMvU3ltYmlhbi9ncm91cC9saWJjdXJsLmlieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzNmNWIzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvU3ltYmlhbi9ncm91cC9saWJjdXJsLmlieQpAQCAtMCwwICsxLDE0IEBACisvLworLy8gbGliY3VybCBmaWxlIHRyYW5zZmVyIERMTAorLy8KKy8vIFVzZSB0aGlzIGZpbGUgd2l0aCBidWlsZHJvbSB0byBhZGQgbGliY3VybCB0byBhIGRldmljZSBST00KKy8vCisKKyNpZm5kZWYgTElCQ1VSTF9JQlkKKyNkZWZpbmUgTElCQ1VSTF9JQlkKKworI2luY2x1ZGUgPG9wZW5lbnYuaWJ5PgorCitmaWxlPUFCSV9ESVJcQlVJTERfRElSXGxpYmN1cmwuZGxsICAgICAgICBcc3lzXGJpblxsaWJjdXJsLmRsbAorCisjZW5kaWYgLy8gTElCQ1VSTF9JQlkKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1N5bWJpYW4vZ3JvdXAvbGliY3VybC5tbXAgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2xpYmN1cmwubW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYWIxMzEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2xpYmN1cmwubW1wCkBAIC0wLDAgKzEsNjAgQEAKKy8vCisvLyBsaWJjdXJsLmRsbCBjVVJMIG5ldHdvcmsgcmV0cmlldmFsIGNsaWVudCBsaWJyYXJ5CisvLworCisvLyBCdWlsZC10aW1lIG9wdGlvbnMgKHVuY29tbWVudCB0aGVzZSB0byBlbmFibGUpCisjZGVmaW5lIEVOQUJMRV9aTElCICAgICAvLyBFbmFibGUgZ3ppcC9kZWZsYXRlIGRlY29tcHJlc3Npb24KKy8vI2RlZmluZSBFTkFCTEVfU1NMICAgICAgLy8gRW5hYmxlIFNTTCBmb3IgSFRUUFMvRlRQUyAocmVxdWlyZXMgUzYwIE9wZW4gQyBTREspCisKK1RBUkdFVCAgICAgICAgbGliY3VybC5kbGwKK1RBUkdFVFRZUEUgICAgZGxsCitVSUQgICAgMHgxMDAwMDA4ZCAweEYwMjA2RDAwCisKK01BQ1JPICAgICAgIEJVSUxESU5HX0xJQkNVUkwKKworI2lmZGVmIEVOQUJMRV9aTElCCitNQUNSTyAgICAgICBIQVZFX0xJQloKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9TU0wKK01BQ1JPICAgICAgIFVTRV9TU0xFQVkKKyNlbmRpZgorCitTT1VSQ0VQQVRIICAuLi8uLi8uLi9saWIKK1NPVVJDRSBcCisgIGZpbGUuYyB0aW1ldmFsLmMgYmFzZTY0LmMgaG9zdGlwLmMgcHJvZ3Jlc3MuYyBmb3JtZGF0YS5jCVwKKyAgY29va2llLmMgaHR0cC5jIHNlbmRmLmMgZnRwLmMgdXJsLmMgZGljdC5jIGlmMmlwLmMgc3BlZWRjaGVjay5jCVwKKyAgbGRhcC5jIHNzbHVzZS5jIHZlcnNpb24uYyBnZXRlbnYuYyBlc2NhcGUuYyBtcHJpbnRmLmMgdGVsbmV0LmMJXAorICBuZXRyYy5jIGdldGluZm8uYyB0cmFuc2Zlci5jIHN0cmVxdWFsLmMgZWFzeS5jIHNlY3VyaXR5LmMga3JiNC5jCVwKKyAgY3VybF9mbm1hdGNoLmMgZmlsZWluZm8uYyBmdHBsaXN0cGFyc2VyLmMgd2lsZGNhcmQuYyBrcmI1LmMJCVwKKyAgbWVtZGVidWcuYyBodHRwX2NodW5rcy5jIHN0cnRvay5jIGNvbm5lY3QuYyBsbGlzdC5jIGhhc2guYyBtdWx0aS5jCVwKKyAgY29udGVudF9lbmNvZGluZy5jIHNoYXJlLmMgaHR0cF9kaWdlc3QuYyBtZDQuYyBtZDUuYyBjdXJsX3JhbmQuYwlcCisgIGh0dHBfbmVnb3RpYXRlLmMgY3VybF9udGxtX21zZ3MuYyBpbmV0X3B0b24uYyBzdHJ0b29mZnQuYyBzdHJlcnJvci5jCVwKKyAgaG9zdGFzeW4uYyBob3N0aXA0LmMgaG9zdGlwNi5jIGhvc3RzeW4uYyBpbmV0X250b3AuYyBwYXJzZWRhdGUuYwlcCisgIHNlbGVjdC5jIGd0bHMuYyBzc2xnZW4uYyB0ZnRwLmMgc3BsYXkuYyBzdHJkdXAuYyBzb2Nrcy5jIHNzaC5jIG5zcy5jCVwKKyAgcXNzbC5jIHJhd3N0ci5jIGN1cmxfYWRkcmluZm8uYyBzb2Nrc19nc3NhcGkuYyBzb2Nrc19zc3BpLmMJCVwKKyAgY3VybF9zc3BpLmMgc2xpc3QuYyBub25ibG9jay5jIGN1cmxfbWVtcmNoci5jIGltYXAuYyBwb3AzLmMgc210cC5jCVwKKyAgcGluZ3BvbmcuYyBydHNwLmMgY3VybF90aHJlYWRzLmMgd2Fybmxlc3MuYyBobWFjLmMgcG9sYXJzc2wuYwkJXAorICBjdXJsX3J0bXAuYyBvcGVubGRhcC5jIGN1cmxfZ2V0aG9zdG5hbWUuYyBnb3BoZXIuYyBheHRscy5jCQlcCisgIGlkbl93aW4zMi5jIGh0dHBfbmVnb3RpYXRlX3NzcGkuYyBjeWFzc2wuYyBodHRwX3Byb3h5LmMgbm9uLWFzY2lpLmMJXAorICBhc3luLWFyZXMuYyBhc3luLXRocmVhZC5jIGN1cmxfbnRsbS5jIGN1cmxfbnRsbV93Yi5jIGN1cmxfbnRsbV9jb3JlLmMKKworVVNFUklOQ0xVREUgICAuLi8uLi8uLi9saWIgLi4vLi4vLi4vaW5jbHVkZS9jdXJsCisjaWZkZWYgRU5BQkxFX1NTTAorU1lTVEVNSU5DTFVERSAvZXBvYzMyL2luY2x1ZGUvb3NleHRlbnNpb25zL3N0ZGFwaXMKKy8vIE9sZGVyIHZlcnNpb25zIG9mIHRoZSBTREsgbmVlZCB0aGlzIGluc3RlYWQ6CisvL1VTRVJJTkNMVURFIC9lcG9jMzIvaW5jbHVkZS9zdGRhcGlzL29wZW5zc2wKKyNlbmRpZgorCitTWVNURU1JTkNMVURFIC4uLy4uLy4uL2luY2x1ZGUgL2Vwb2MzMi9pbmNsdWRlL3N0ZGFwaXMgL2Vwb2MzMi9pbmNsdWRlCisKK0xJQlJBUlkgICAgICAgZXVzZXIubGliIGxpYmMubGliCisjaWZkZWYgRU5BQkxFX1pMSUIKK0xJQlJBUlkgICAgICAgZXpsaWIubGliCisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfU1NMCitMSUJSQVJZICAgICAgIGxpYnNzbC5saWIgbGliY3J5cHRvLmxpYgorI2VuZGlmCisKK0NBUEFCSUxJVFkgTmV0d29ya1NlcnZpY2VzCisKK0VQT0NBTExPV0RMTERBVEEKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1N5bWJpYW4vZ3JvdXAvbGliY3VybC5wa2cgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2xpYmN1cmwucGtnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjBhNTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2xpYmN1cmwucGtnCkBAIC0wLDAgKzEsMjIgQEAKKzsgbGliY3VybCBwYWNrYWdlIGRlZmludGlvbiBmaWxlCis7IFVzZSB3aXRoIG1ha2VzaXMgdG8gY3JlYXRlIGEgU3ltYmlhbiAuc2lzIHBhY2thZ2UKKworO0xhbmd1YWdlIC0gc3RhbmRhcmQgbGFuZ3VhZ2UgZGVmaW5pdGlvbnMKKyZFTgorCis7SGVhZGVyIC0gc3RhbmRhcmQgc2lzIGZpbGUgaGVhZGVyIGluY2x1ZGluZyB2ZXJzaW9uIG51bWJlcgorO1ZlcnNpb24gc2NoZW1lOiBjdXJsJ3MgbWFqb3IsIGN1cmwncyBtaW5vciwgY3VybCdzIHN1Ym1pbm9yKjEwMCArIGJ1aWxkIG51bWJlcgorOyBlLmcuIFRoZSB0aGlyZCBTeW1iaWFuIHBhY2thZ2Ugb2YgY3VybCB2ZXIuIDcuMjAuMSB3b3VsZCBoYXZlIGEgU0lTIHBhY2thZ2UKKzsgdmVyc2lvbiBvZiA3LCAyMCwgMTAzCisjeyJsaWJjdXJsIn0sICgweEYwMjA2RDAwKSwgNywgMjAsIDxwbGVhc2VfdXBkYXRlX3ZlcnNpb24+LCBUWVBFPVNBCisKKzsgVmVuZG9yIG5hbWUKKyV7ImN1cmwgcHJvamVjdCJ9Cis6ImN1cmwgcHJvamVjdCIKKworOyBBIGRlcGVuZGVuY3kgb24gUC5JLlAuUy4gaXMgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gYWRkIGhlcmUKKzsoMHgyMDAwOUE4MCksICosICosICosIHsiT3BlbiBDIFN0YW5kYXJkIExpYnJhcmllcyJ9Cis7KDB4MjAwMDlBODEpLCAqLCAqLCAqLCB7IlAuSS5QLlMuIGZvciBVSVEgMyJ9CisKKztGaWxlcyAtIHN0YW5kYXJkIGZpbGUgc3BlY2lmaWNhdGlvbnMKKyJcZXBvYzMyXHJlbGVhc2VcYXJtdjVcdXJlbFxsaWJjdXJsLmRsbCIgLSAiJDpcc3lzXGJpblxsaWJjdXJsLmRsbCIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1N5bWJpYW4vcmVhZG1lLnR4dCBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1N5bWJpYW4vcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2I4OTlmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvU3ltYmlhbi9yZWFkbWUudHh0CkBAIC0wLDAgKzEsOTMgQEAKK0N1cmwgb24gU3ltYmlhbiBPUworPT09PT09PT09PT09PT09PT09CitUaGlzIGlzIGEgYmFzaWMgcG9ydCBvZiBjdXJsIGFuZCBsaWJjdXJsIHRvIFN5bWJpYW4gT1MuICBUaGUgcG9ydCBpcworYSBzdHJhaWdodGZvcndhcmQgb25lIHVzaW5nIFN5bWJpYW4ncyBQLkkuUC5TLiBQT1NJWCBjb21wYXRpYmlsaXR5CitsYXllciwgd2hpY2ggd2FzIGZpcnN0IGF2YWlsYWJsZSBmb3IgT1MgdmVyc2lvbiA5LjEuIEEgbW9yZSBjb21wbGV0ZQorcG9ydCB3b3VsZCBpbnZvbHZlIHdyaXRpbmcgYSBTeW1iaWFuIEMrKyBiaW5kaW5nLCBvciB3cmFwcGluZyBsaWJjdXJsCithcyBhIFN5bWJpYW4gYXBwbGljYXRpb24gc2VydmVyIHdpdGggYSBDKysgQVBJIHRvIGhhbmRsZSByZXF1ZXN0cworZnJvbSBjbGllbnQgYXBwbGljYXRpb25zIGFzIHdlbGwgYXMgY3JlYXRpbmcgYSBHVUkgYXBwbGljYXRpb24gdG8gYWxsb3cKK2ZpbGUgdHJhbnNmZXJzLiAgVGhlIGF1dGhvciBoYXMgbm8gY3VycmVudCBwbGFucyB0byBkbyBzby4KKworVGhpcyBtZWFucyB0aGF0IGludGVncmF0aW9uIHdpdGggc3RhbmRhcmQgU3ltYmlhbiBPUyBwcm9ncmFtcyBjYW4gYmUKK3RyaWNreSwgc2luY2UgbGliY3VybCBpc24ndCBkZXNpZ25lZCB3aXRoIFN5bWJpYW4ncyBuYXRpdmUgYXN5bmNocm9ub3VzCittZXNzYWdlIHBhc3NpbmcgaWRpb21zIGluIG1pbmQuIEhvd2V2ZXIsIGl0IG1heSBiZSBwb3NzaWJsZSB0byB1c2UgbGliY3VybAoraW4gYW4gYWN0aXZlIG9iamVjdC1iYXNlZCBhcHBsaWNhdGlvbiB0aHJvdWdoIGxpYmN1cmwncyBtdWx0aSBpbnRlcmZhY2UuCitUaGUgcG9ydCBpcyBtb3N0IGVhc2lseSB1c2VkIHdoZW4gcG9ydGluZyBQT1NJWCBhcHBsaWNhdGlvbnMgdG8gU3ltYmlhbgorT1MgdXNpbmcgUC5JLlAuUy4gKGEuay5hLiBPcGVuIEMpLgorCitsaWJjdXJsIGlzIGJ1aWx0IGFzIGEgc3RhbmRhcmQgU3ltYmlhbiBvcmRpbmFsLWxpbmtlZCBETEwsIGFuZCBjdXJsIGlzCitidWlsdCBhcyBhIHRleHQgbW9kZSBFWEUgYXBwbGljYXRpb24uICBUaGV5IGhhdmUgbm90IGJlZW4gU3ltYmlhbgorU2lnbmVkLCB3aGljaCBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBpbnN0YWxsIHRoZW0gb24gbW9zdCBwaG9uZXMuCisKK0ZvbGxvd2luZyBhcmUgc29tZSB0aGluZ3MgdG8ga2VlcCBpbiBtaW5kIHdoZW4gdXNpbmcgdGhpcyBwb3J0LgorCisKK2N1cmwgbm90ZXMKKy0tLS0tLS0tLS0KK1doZW4gc3RhcnRpbmcgY3VybCBpbiB0aGUgV2luZG93cyBlbXVsYXRvciBmcm9tIHRoZSBXaW5kb3dzIGNvbW1hbmQtbGluZSwKK3BsYWNlIGEgZG91YmxlLWRhc2ggLS0gYmVmb3JlIHRoZSBmaXJzdCBjdXJsIGNvbW1hbmQtbGluZSBvcHRpb24uCitlLmcuIFxlcG9jMzJccmVsZWFzZVx3aW5zY3dcdWRlYlxjdXJsIC0tIC12IGh0dHA6Ly9sb2NhbGhvc3QvCitGYWlsdXJlIHRvIGRvIHNvIG1heSBtZWFuIHRoYXQgc29tZSBvZiB5b3VyIG9wdGlvbnMgd29uJ3QgYmUgY29ycmVjdGx5Citwcm9jZXNzZWQuCisKK1N5bWJpYW4ncyBFU0hFTEwgYWxsb3dzIGZvciByZWRpcmVjdGluZyBzdGRpbiBhbmQgc3Rkb3V0IHRvIGZpbGVzLCBidXQKK3N0ZGVyciBnb2VzIHRvIHRoZSBlcG9jd2luZC5vdXQgZmlsZSAob24gdGhlIGVtdWxhdG9yKS4gIFRoZSBzdGFuZGFyZAorY3VybCBvcHRpb25zIC1vLCAtLXN0ZGVyciBhbmQgLS10cmFjZS1hc2NpaSBjYW4gYmUgdXNlZCB0bworcmVkaXJlY3Qgb3V0cHV0IHRvIGEgZmlsZSAob3Igc3Rkb3V0KSBpbnN0ZWFkLgorCitQLkkuUC5TLiBkb2Vzbid0IGluaGVyaXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYXQgc3RhcnR1cCBmcm9tCit0aGUgc2hlbGwsIHNvIHJlbGF0aXZlIHBhdGggbmFtZXMgYXJlIGFsd2F5cyByZWxhdGl2ZSB0bworQzpcUHJpdmF0ZVxmMDIwNjQ0MlwuCisKK1AuSS5QLlMuIHByb3ZpZGVzIG5vIHdheSB0byBkaXNhYmxlIGVjaG9pbmcgb2YgY2hhcmFjdGVycyBhcyB0aGV5IGFyZQorZW50ZXJlZCwgc28gcGFzc3dvcmRzIHR5cGVkIGluIG9uIHRoZSBjb25zb2xlIHdpbGwgYmUgdmlzaWJsZS4gIEl0IGFsc28KK2xpbmUgYnVmZmVycyBrZXlib2FyZCBpbnB1dCBzbyBpbnRlcmFjdGl2ZSB0ZWxuZXQgc2Vzc2lvbnMgYXJlIG5vdCB2ZXJ5CitmZWFzaWJsZS4KKworQWxsIHNjcmVlbiBvdXRwdXQgZGlzYXBwZWFycyBhZnRlciBjdXJsIGV4aXRzLCBzbyBhZnRlciBhIGNvbW1hbmQgY29tcGxldGVzLAorY3VybCB3YWl0cyBieSBkZWZhdWx0IGZvciBFbnRlciB0byBiZSBwcmVzc2VkIGJlZm9yZSBleGl0aW5nLiAgVGhpcyBiZWhhdmlvdXIKK2lzIHN1cHByZXNzZWQgd2hlbiB0aGUgLXMgb3B0aW9uIGlzIGdpdmVuLgorCitjdXJsJ3MgImhvbWUgZGlyZWN0b3J5IiBpbiBTeW1iaWFuIGlzIEM6XFByaXZhdGVcZjAyMDY0NDJcLiBUaGUgLmN1cmxyYyBmaWxlCitpcyByZWFkIGZyb20gdGhpcyBkaXJlY3Rvcnkgb24gc3RhcnR1cC4KKworCitsaWJjdXJsIG5vdGVzCistLS0tLS0tLS0tLS0tCitsaWJjdXJsIHVzZXMgd3JpdGFibGUgc3RhdGljIGRhdGEsIHNvIHRoZSBFUE9DQUxMT1dETExEQVRBIG9wdGlvbiBpcwordXNlZCBpbiBpdHMgTU1QIGZpbGUsIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYWRkaXRpb25hbCBtZW1vcnkgdXNhZ2UKK2FuZCBsaW1pdGF0aW9ucyBvbiB0aGUgV2luZG93cyBlbXVsYXRvci4KKworY3VybF9nbG9iYWxfaW5pdCgpICptdXN0KiBiZSBjYWxsZWQgKGVpdGhlciBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkgdGhyb3VnaAorY2FsbGluZyBjZXJ0YWluIG90aGVyIGxpYmN1cmwgZnVuY3Rpb25zKSBiZWZvcmUgYW55IGxpYmN1cmwgZnVuY3Rpb25zCit0aGF0IGNvdWxkIGFsbG9jYXRlIG1lbW9yeSAobGlrZSBjdXJsX2dldGVudigpKS4KKworUC5JLlAuUy4gZG9lc24ndCBzdXBwb3J0IHNpZ25hbHMgb3IgdGhlIGFsYXJtKCkgY2FsbCwgc28gc29tZSB0aW1lb3V0cworKHN1Y2ggYXMgdGhlIGNvbm5lY3QgdGltZW91dCkgYXJlIG5vdCBob25vdXJlZC4gVGhpcyBzaG91bGQgbm90IGJlCithbiBpc3N1ZSBvbmNlIHN1cHBvcnQgZm9yIENVUkxSRVNfVEhSRUFERUQgaXMgYWRkZWQgZm9yIFN5bWJpYW4uCisKK1AuSS5QLlMuIGNhdXNlcyBhIFVTRVI6ODcgcGFuaWMgaWYgY2VydGFpbiB0aW1lb3V0cyBtdWNoIGxvbmdlciB0aGFuCitoYWxmIGFuIGhvdXIgYXJlIHNlbGVjdGVkLgorCitMREFQLCBTQ1Agb3IgU0ZUUCBtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIGR1ZSB0byBsYWNrIG9mIHN1cHBvcnQgZm9yCit0aGUgZGVwZW5kZW50IGxpYmFyaWVzIG9uIFN5bWJpYW4uCisKK2d6aXAgYW5kIGRlZmxhdGUgZGVjb21wcmVzc2lvbiBpcyBzdXBwb3J0ZWQgd2hlbiB0aGUgYXBwcm9wcmlhdGUgbWFjcm8KK2lzIHVuY29tbWVudGVkIGluIHRoZSBsaWJjdXJsLm1tcCBmaWxlLgorCitTU0wvVExTIGVuY3J5cHRpb24gaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIGFkZAord2hlbiB0aGUgT3BlblNTTCBsaWJyYXJpZXMgaW5jbHVkZWQgaW4gdGhlIFM2MCBPcGVuIEMgU0RLIGFyZSBhdmFpbGFibGUuCitUaGUgYXBwcm9wcmlhdGUgbWFjcm8gaW4gdGhlIGxpYmN1cmwubW1wIGZpbGUgbXVzdCBiZSB1bmNvbW1lbnRlZCB0bworZW5hYmxlIHN1cHBvcnQuCisKK05UTE0gYXV0aGVudGljYXRpb24gbWF5IG5vdCB3b3JrIG9uIHNvbWUgc2VydmVycyBkdWUgdG8gdGhlIGxhY2sgb2YKK01ENCBzdXBwb3J0IGluIHRoZSBPcGVuU1NMIGxpYnJhcmllcyBpbmNsdWRlZCB3aXRoIE9wZW4gQy4KKworRGVidWcgYnVpbGRzIGFyZSBub3Qgc3VwcG9ydGVkIChpLmUuIC0tZW5hYmxlLWRlYnVnKSBiZWNhdXNlIHRoZXkgY2F1c2UKK2FkZGl0aW9uYWwgc3ltYm9sIGV4cG9ydHMgaW4gdGhlIGxpYnJhcnkgd2hpY2ggYXJlIG5vdCBmcm96ZW4gaW4gdGhlIC5kZWYKK2ZpbGVzLgorCisKK0RhbiBGYW5kcmljaAorZGFuQGNvbmVoYXJ2ZXN0ZXJzLmNvbQorTWFyY2ggMjAxMApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvVFBGL2N1cmwubWFrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvVFBGL2N1cmwubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlOTM0MDQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9UUEYvY3VybC5tYWsKQEAgLTAsMCArMSw2MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjICBNQUtFRklMRSBOQU1FLi4uLi4gIGN1cmwubWFrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgIERFU0NSSVBUSU9OLi4uLi4gICAgVGhpcyBpcyB0aGUgbWFrZWZpbGUgZm9yIGxpYmN1cmwuICAgICAgICAgICAgICAjCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVBQIDo9IENVUkwKKworVFBGX1JVTl9UUEZTT0NISyA6PSBOTworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZpbmUgYW55IGFkZGl0aW9uYWwgbGlicyBuZWVkZWQgdG8gbGluaworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTElCUyA6PSBDUllQIENTU0wKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmaW5lIHRoZSBlbnZzIG5lZWRlZCB0byBidWlsZCB0aGlzIG1vZHVsZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbWFrZXRwZl9lbnYgOj0gY3VybGxpYgorbWFrZXRwZl9lbnYgKz0gb3BlbnNzbAorbWFrZXRwZl9lbnYgKz0gYmFzZV9ydAorbWFrZXRwZl9lbnYgKz0gc3lzdGVtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNlZ21lbnRzIHRvIGJlIGNvbXBpbGVkIHdpdGggZ2NjIGNvbXBpbGVyCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyMjIGxpYiBkaXJlY3Rvcnk6CitpbmNsdWRlICQod29yZCAxLCQod2lsZGNhcmQgJChmb3JlYWNoIGQsJChUUEZfUk9PVCksJGQvb3BlbnNvdXJjZS9jdXJsL2xpYi9NYWtlZmlsZS5pbmMpKSBNYWtlZmlsZS5pbmNfbm90X2ZvdW5kKQorQ19TUkMgOj0gJChDU09VUkNFUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWRkaXRpb25zIGFuZCBvdmVycmlkZXMgZm9yIGdjYyBjb21waWxlciBmbGFncworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBzdXBwcmVzcyBleHBlY3RlZCB3YXJuaW5ncyBpbiB0aGUgcG9ydGVkIGNvZGU6CitDRkxBR1NfQ1VSTCArPSAtdworCisjIHVzZSBTU0wKKyMgKG92ZXJyaWRlcyBDdXJsJ3MgbGliL2NvbmZpZy10cGYuaCBmaWxlKQorQ0ZMQUdTX0NVUkwgKz0gLURVU0VfT1BFTlNTTAorQ0ZMQUdTX0NVUkwgKz0gLURVU0VfU1NMRUFZCisKKyMgZGlzYWJsZSBhbGwgcHJvdG9jb2xzIGV4Y2VwdCBGVFAgYW5kIEhUVFAKKyMgKG92ZXJyaWRlcyBDdXJsJ3MgbGliL2NvbmZpZy10cGYuaCBmaWxlKQorQ0ZMQUdTX0NVUkwgKz0gLURDVVJMX0RJU0FCTEVfRElDVAorQ0ZMQUdTX0NVUkwgKz0gLURDVVJMX0RJU0FCTEVfRklMRQorQ0ZMQUdTX0NVUkwgKz0gLURDVVJMX0RJU0FCTEVfTERBUAorQ0ZMQUdTX0NVUkwgKz0gLURDVVJMX0RJU0FCTEVfVEVMTkVUCitDRkxBR1NfQ1VSTCArPSAtRENVUkxfRElTQUJMRV9URlRQCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEluY2x1ZGUgdGhlIG1ha2V0cGYucnVsZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2luY2x1ZGUgbWFrZXRwZi5ydWxlcworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9UUEYvbWFrZXRwZi5lbnZfY3VybCBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1RQRi9tYWtldHBmLmVudl9jdXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYTI1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9UUEYvbWFrZXRwZi5lbnZfY3VybApAQCAtMCwwICsxLDI1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyNlbnYgVFBGIENVUkwgSW5jbHVkZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZpbmUgdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHRoZSBzaGFyZWQgb2JqZWN0cyByZXNpZGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1JPT1RMSUJESVJTIDo9ICQoZm9yZWFjaCBkLCQoVFBGX1JPT1QpLCRkL29wZW5zb3VyY2UvY3VybC9vdXRwdXQvbGliKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTZXQgdGhlIGluY2x1ZGUvaGVhZGVyIGZpbGUgZGlyZWN0b3JpZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1JPT1RJTkNESVJTIDo9ICQoZm9yZWFjaCBkLCQoVFBGX1JPT1RfTE0pLCRkL29wZW5zb3VyY2UvY3VybC9pbmNsdWRlKQorUk9PVElOQ0RJUlMgKz0gJChmb3JlYWNoIGQsJChUUEZfUk9PVF9MTSksJGQvb3BlbnNvdXJjZS9jdXJsL2luY2x1ZGUvY3VybCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmaW5lICJUUEYiIHRvIGVuYWJsZSBUUEYtc3BlY2lmaWMgY29kZSBpbiBDdXJsIGZpbGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQ0ZMQUdTXyQoQVBQKSArPSAtRCBUUEYKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvVFBGL21ha2V0cGYuZW52X2N1cmxsaWIgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9UUEYvbWFrZXRwZi5lbnZfY3VybGxpYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmFkNWJhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvVFBGL21ha2V0cGYuZW52X2N1cmxsaWIKQEAgLTAsMCArMSw1NyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjZW52IFRQRiBDVVJMIExpYnJhcnkgU291cmNlIGFuZCBPdXRwdXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZpbmUgdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHRoZSBzaGFyZWQgb2JqZWN0cyByZXNpZGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1JPT1RMSUJESVJTIDo9ICQoZm9yZWFjaCBkLCQoVFBGX1JPT1QpLCRkL29wZW5zb3VyY2UvY3VybC9vdXRwdXQvbGliKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZpbmUgdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHRoZSBsb2FkYWJsZXMgKFhYWFhWVikgYXJlIHRvIGJlIHdyaXR0ZW4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1JPT1RMT0FERElSUyA6PSAkKGZvcmVhY2ggZCwkKFRQRl9ST09UKSwkZC9vcGVuc291cmNlL2N1cmwvb3V0cHV0L2xvYWQpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmluZSB0aGUgbG9jYXRpb24gb2YgdGhlIGV4cG9ydCBmaWxlcyB1c2VkIGJ5IHRoZSBMRCBwb3N0cHJvY2Vzc29yCisjIC0gY3VycmVudGx5IGV4cGVjdGVkIHRoYXQgLmV4cCBmaWxlcyB3aWxsIGFsc28gbGl2ZSBpbiBsaWIgZGlyCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitST09URVhQRElSUyA6PSAkKGZvcmVhY2ggZCwkKFRQRl9ST09UX0xNKSwkZC9vcGVuc291cmNlL2N1cmwvb3V0cHV0L2V4cCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmaW5lIHRoZSBvYmplY3QgZmlsZSBkaXJlY3RvcnkgbmFtZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUk9PVE9CSkRJUlMgOj0gJChmb3JlYWNoIGQsJChUUEZfUk9PVCksJGQvb3BlbnNvdXJjZS9jdXJsL291dHB1dC9vYmopCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmluZSB0aGUgbGlzdGluZyBmaWxlcyBkaXJlY3RvcnkgbmFtZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUk9PVExTVERJUlMgOj0gJChmb3JlYWNoIGQsJChUUEZfUk9PVCksJGQvb3BlbnNvdXJjZS9jdXJsL291dHB1dC9sc3QpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNldCB0aGUgaW5jbHVkZS9oZWFkZXIgZmlsZSBkaXJlY3RvcmllcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUk9PVElOQ0RJUlMgOj0gJChmb3JlYWNoIGQsJChUUEZfUk9PVF9MTSksJGQvb3BlbnNvdXJjZS9jdXJsL2xpYikKK1JPT1RJTkNESVJTICs9ICQoZm9yZWFjaCBkLCQoVFBGX1JPT1RfTE0pLCRkL29wZW5zb3VyY2UvY3VybC9pbmNsdWRlKQorUk9PVElOQ0RJUlMgKz0gJChmb3JlYWNoIGQsJChUUEZfUk9PVF9MTSksJGQvb3BlbnNvdXJjZS9jdXJsL2luY2x1ZGUvY3VybCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU2V0IHRoZSBDIGZpbGUgZGlyZWN0b3JpZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1JPT1RDRElSUyA6PSAkKGZvcmVhY2ggZCwkKFRQRl9ST09UX0xNKSwkZC9vcGVuc291cmNlL2N1cmwvbGliKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZWZpbmUgIlRQRiIgdG8gZW5hYmxlIFRQRi1zcGVjaWZpYyBjb2RlIGluIEN1cmwgZmlsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitDRkxBR1NfJChBUFApICs9IC1EIFRQRgorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9XaW4zMi9NYWtlZmlsZS5hbSBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1dpbjMyL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzUwZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9XaW4zMi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDMgQEAKK1NVQkRJUlMgPSBjeWd3aW4KKworRVhUUkFfRElTVCA9IFJFQURNRQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvV2luMzIvTWFrZWZpbGUuaW4gYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9XaW4zMi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWZlNmM0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvV2luMzIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1NzggQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK0lOU1RBTEwgPSBASU5TVEFMTEAKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IHBhY2thZ2VzL1dpbjMyCitESVNUX0NPTU1PTiA9IFJFQURNRSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbXBpbGVycy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbmZvcHRzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtZnVuY3Rpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3BlbnNzbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW92ZXJyaWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtcmVlbnRyYW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtc3lzdGVtLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hjLXRyYW5zbGl0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3p6NTAteGMtb3ZyLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvc3JjL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZXhlYy1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgXAorCXBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJdW5pbnN0YWxsLXJlY3Vyc2l2ZQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVF9TVUJESVJTID0gJChTVUJESVJTKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRUAKK0JVSUxEX0xJQkhPU1ROQU1FX1RSVUUgPSBAQlVJTERfTElCSE9TVE5BTUVfVFJVRUAKK0JVSUxEX1VOSVRURVNUU19GQUxTRSA9IEBCVUlMRF9VTklUVEVTVFNfRkFMU0VACitCVUlMRF9VTklUVEVTVFNfVFJVRSA9IEBCVUlMRF9VTklUVEVTVFNfVFJVRUAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDT05GSUdVUkVfT1BUSU9OUyA9IEBDT05GSUdVUkVfT1BUSU9OU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NST1NTQ09NUElMSU5HX0ZBTFNFID0gQENST1NTQ09NUElMSU5HX0ZBTFNFQAorQ1JPU1NDT01QSUxJTkdfVFJVRSA9IEBDUk9TU0NPTVBJTElOR19UUlVFQAorQ1VSTERFQlVHX0ZBTFNFID0gQENVUkxERUJVR19GQUxTRUAKK0NVUkxERUJVR19UUlVFID0gQENVUkxERUJVR19UUlVFQAorQ1VSTFZFUlNJT04gPSBAQ1VSTFZFUlNJT05ACitDVVJMX0NBX0JVTkRMRSA9IEBDVVJMX0NBX0JVTkRMRUAKK0NVUkxfQ0ZMQUdfRVhUUkFTID0gQENVUkxfQ0ZMQUdfRVhUUkFTQAorQ1VSTF9ESVNBQkxFX0RJQ1QgPSBAQ1VSTF9ESVNBQkxFX0RJQ1RACitDVVJMX0RJU0FCTEVfRklMRSA9IEBDVVJMX0RJU0FCTEVfRklMRUAKK0NVUkxfRElTQUJMRV9GVFAgPSBAQ1VSTF9ESVNBQkxFX0ZUUEAKK0NVUkxfRElTQUJMRV9HT1BIRVIgPSBAQ1VSTF9ESVNBQkxFX0dPUEhFUkAKK0NVUkxfRElTQUJMRV9IVFRQID0gQENVUkxfRElTQUJMRV9IVFRQQAorQ1VSTF9ESVNBQkxFX0lNQVAgPSBAQ1VSTF9ESVNBQkxFX0lNQVBACitDVVJMX0RJU0FCTEVfTERBUCA9IEBDVVJMX0RJU0FCTEVfTERBUEAKK0NVUkxfRElTQUJMRV9MREFQUyA9IEBDVVJMX0RJU0FCTEVfTERBUFNACitDVVJMX0RJU0FCTEVfUE9QMyA9IEBDVVJMX0RJU0FCTEVfUE9QM0AKK0NVUkxfRElTQUJMRV9QUk9YWSA9IEBDVVJMX0RJU0FCTEVfUFJPWFlACitDVVJMX0RJU0FCTEVfUlRTUCA9IEBDVVJMX0RJU0FCTEVfUlRTUEAKK0NVUkxfRElTQUJMRV9TTVRQID0gQENVUkxfRElTQUJMRV9TTVRQQAorQ1VSTF9ESVNBQkxFX1RFTE5FVCA9IEBDVVJMX0RJU0FCTEVfVEVMTkVUQAorQ1VSTF9ESVNBQkxFX1RGVFAgPSBAQ1VSTF9ESVNBQkxFX1RGVFBACitDVVJMX0xJQlMgPSBAQ1VSTF9MSUJTQAorQ1VSTF9ORVRXT1JLX0xJQlMgPSBAQ1VSTF9ORVRXT1JLX0xJQlNACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU0hBUkVEID0gQEVOQUJMRV9TSEFSRURACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitIQVZFX0dOVVRMU19TUlAgPSBASEFWRV9HTlVUTFNfU1JQQAorSEFWRV9MREFQX1NTTCA9IEBIQVZFX0xEQVBfU1NMQAorSEFWRV9MSUJaID0gQEhBVkVfTElCWkAKK0hBVkVfTElCWl9GQUxTRSA9IEBIQVZFX0xJQlpfRkFMU0VACitIQVZFX0xJQlpfVFJVRSA9IEBIQVZFX0xJQlpfVFJVRUAKK0hBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUID0gQEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUQAorSEFWRV9TU0xFQVlfU1JQID0gQEhBVkVfU1NMRUFZX1NSUEAKK0lETl9FTkFCTEVEID0gQElETl9FTkFCTEVEQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJUFY2X0VOQUJMRUQgPSBASVBWNl9FTkFCTEVEQAorS1JCNF9FTkFCTEVEID0gQEtSQjRfRU5BQkxFREAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQ1VSTF9MSUJTID0gQExJQkNVUkxfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUFOT1BUID0gQE1BTk9QVEAKK01JTVBVUkVfRkFMU0UgPSBATUlNUFVSRV9GQUxTRUAKK01JTVBVUkVfVFJVRSA9IEBNSU1QVVJFX1RSVUVACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitOT19VTkRFRklORURfRkFMU0UgPSBATk9fVU5ERUZJTkVEX0ZBTFNFQAorTk9fVU5ERUZJTkVEX1RSVUUgPSBATk9fVU5ERUZJTkVEX1RSVUVACitOUk9GRiA9IEBOUk9GRkAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEggPSBAUEFUSEAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTCA9IEBQRVJMQAorUEtHQUREX05BTUUgPSBAUEtHQUREX05BTUVACitQS0dBRERfUEtHID0gQFBLR0FERF9QS0dACitQS0dBRERfVkVORE9SID0gQFBLR0FERF9WRU5ET1JACitQS0dDT05GSUcgPSBAUEtHQ09ORklHQAorUkFORE9NX0ZJTEUgPSBAUkFORE9NX0ZJTEVACitSQU5MSUIgPSBAUkFOTElCQAorUkVRVUlSRV9MSUJfREVQUyA9IEBSRVFVSVJFX0xJQl9ERVBTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTT05BTUVfQlVNUF9GQUxTRSA9IEBTT05BTUVfQlVNUF9GQUxTRUAKK1NPTkFNRV9CVU1QX1RSVUUgPSBAU09OQU1FX0JVTVBfVFJVRUAKK1NTTF9FTkFCTEVEID0gQFNTTF9FTkFCTEVEQAorU1RBVElDTElCX0ZBTFNFID0gQFNUQVRJQ0xJQl9GQUxTRUAKK1NUQVRJQ0xJQl9UUlVFID0gQFNUQVRJQ0xJQl9UUlVFQAorU1RSSVAgPSBAU1RSSVBACitTVVBQT1JUX0ZFQVRVUkVTID0gQFNVUFBPUlRfRkVBVFVSRVNACitTVVBQT1JUX1BST1RPQ09MUyA9IEBTVVBQT1JUX1BST1RPQ09MU0AKK1RFU1RfU0VSVkVSX0xJQlMgPSBAVEVTVF9TRVJWRVJfTElCU0AKK1VTRV9BUkVTID0gQFVTRV9BUkVTQAorVVNFX0FYVExTID0gQFVTRV9BWFRMU0AKK1VTRV9DWUFTU0wgPSBAVVNFX0NZQVNTTEAKK1VTRV9FTUJFRERFRF9BUkVTX0ZBTFNFID0gQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQAorVVNFX0VNQkVEREVEX0FSRVNfVFJVRSA9IEBVU0VfRU1CRURERURfQVJFU19UUlVFQAorVVNFX0dOVVRMUyA9IEBVU0VfR05VVExTQAorVVNFX0dOVVRMU19ORVRUTEUgPSBAVVNFX0dOVVRMU19ORVRUTEVACitVU0VfTElCUlRNUCA9IEBVU0VfTElCUlRNUEAKK1VTRV9MSUJTU0gyID0gQFVTRV9MSUJTU0gyQAorVVNFX01BTlVBTF9GQUxTRSA9IEBVU0VfTUFOVUFMX0ZBTFNFQAorVVNFX01BTlVBTF9UUlVFID0gQFVTRV9NQU5VQUxfVFJVRUAKK1VTRV9OU1MgPSBAVVNFX05TU0AKK1VTRV9PUEVOTERBUCA9IEBVU0VfT1BFTkxEQVBACitVU0VfUE9MQVJTU0wgPSBAVVNFX1BPTEFSU1NMQAorVVNFX1NTTEVBWSA9IEBVU0VfU1NMRUFZQAorVVNFX1dJTkRPV1NfU1NQSSA9IEBVU0VfV0lORE9XU19TU1BJQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVkVSU0lPTkVEX0ZMQVZPVVIgPSBAVkVSU0lPTkVEX0ZMQVZPVVJACitWRVJTSU9ORURfU1lNQk9MU19GQUxTRSA9IEBWRVJTSU9ORURfU1lNQk9MU19GQUxTRUAKK1ZFUlNJT05FRF9TWU1CT0xTX1RSVUUgPSBAVkVSU0lPTkVEX1NZTUJPTFNfVFJVRUAKK1ZFUlNJT05OVU0gPSBAVkVSU0lPTk5VTUAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpYmV4dCA9IEBsaWJleHRACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACitTVUJESVJTID0gY3lnd2luCitFWFRSQV9ESVNUID0gUkVBRE1FCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHBhY2thZ2VzL1dpbjMyL01ha2VmaWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBwYWNrYWdlcy9XaW4zMi9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbAordW5pbnN0YWxsLWluZm8tYW06CisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCittb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi1yZWN1cnNpdmUgXAorbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmU6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKKwkgIGVzYWM7IFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKKwkgICAgZGlyPSIvJCRkaXIiOyBcCisJICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKKwkgIGVsc2UgXAorCSAgICBkaXI9Jyc7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChta2Rpcl9wKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgICAgZGlzdGRpcj1gJChhbV9fY2QpICQoZGlzdGRpcikgJiYgcHdkYDsgXAorCSAgICB0b3BfZGlzdGRpcj1gJChhbV9fY2QpICQodG9wX2Rpc3RkaXIpICYmIHB3ZGA7IFwKKwkgICAgKGNkICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCR0b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRkaXN0ZGlyLyQkc3ViZGlyIiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQorCit1bmluc3RhbGwtaW5mbzogdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKKy5QSE9OWTogJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBcCisJY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXJlY3Vyc2l2ZSBjdGFncyBcCisJY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUgXAorCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLXJlY3Vyc2l2ZSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy9XaW4zMi9SRUFETUUgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9XaW4zMi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2ZTRlYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1dpbjMyL1JFQURNRQpAQCAtMCwwICsxLDUzIEBACitBdXRob3I6IEr2cm4gSGFydHJvdGgKKworREVTQ1JJUFRJT04KKworKElmIHlvdSdyZSBvbmx5IGxvb2tpbmcgZm9yIHByZWNvbXBpbGVkIHdpbjMyIGJpbmFyaWVzLCBnbyB2aXNpdAoraHR0cDovL2N1cmwuaGF4eC5zZS9kb3dubG9hZC5odG1sKQorCitQYWNrYWdpbmcgb2YgdGhlIGN1cmwgYmluYXJpZXMgZm9yIFdpbjMyIHNob3VsZCBhdCB0aGlzIHBvaW50IGluIHRpbWUgYmUgYmFzZWQKK29uIHRoZSBJbmZvWmlwICh6aXAvdW56aXApIGFyY2hpdmVyIGZhbWlseSBhcyB0aGUgZGUtZmFjdG8gc3RhbmRhcmQgZm9yCitXaW5kb3dzIGFyY2hpdmVzLiBBIHBhY2thZ2Ugc2hvdWxkIGNvbnRhaW4gdGhlIG1haW4gYmluYXJ5IGN1cmwuZXhlIGFsb25nIHdpdGgKK3RoZSBhcHByb3ByaWF0ZSBkb2N1bWVudGF0aW9uIGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uIGZpbGVzLiBGb3IgZGV2ZWxvcG1lbnQKK3JlbGVhc2VzLCB5b3Ugc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgaGVhZGVyIGRpcmVjdG9yeSBhbmQgcHJvYmFibHkgdGhlCitjb21waWxlZCBiaW5hcmllcyBvZiBsaWJjdXJsIGFuZCB0aGUgYXBwcm9wcmlhdGUgTWFrZWZpbGVzL3Byb2plY3QgZGVmaW5pdGlvbgorZmlsZXMgZm9yIHRoZSBjb21waWxlciB1c2VkLgorCitBIHNpbXBsZSBwYWNrYWdpbmcgbWVjaGFuaXNtIGNhbiBiZSBiYXNlZCBvbiBhIHNldCBvZiBiYXRjaCBmaWxlcyB3aGljaCBjYWxsCit6aXAuZXhlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGZpbGVzIGZyb20gdGhlIGN1cmwgZGlzdHJpYnV0aW9uIC0gc2VlIHRoZQorc2FtcGxlcyBpbmNsdWRlZCBiZWxvdyAoTG9uZyBsaW5lcyBoYXZlIGJlZW4gc3BsaXQgd2l0aCAiXCIgYXMgdGhlIHNwbGl0CittYXJrZXIsIHlvdSdsbCB3YW50IHRvIHJlam9pbiB0aGUgcGllY2VzIHRvIGJlIGFsbCBvbiBvbmUgbGluZSBpbiB0aGUgYmF0Y2gKK2ZpbGUpLiBDYWxsIGFueSBvZiB0aGVzZSBiYXRjaCBmaWxlcyAtIGFmdGVyIGNvbXBpbGluZyB0aGUgY3VybCBiaW5hcmllcyAtCit3aXRoIGEgc2luZ2xlIHBhcmFtZXRlciBzcGVjaWZ5aW5nIHRoZSBuYW1lIG9mIHRoZSBhcmNoaXZlIGZpbGUgdG8gYmUgY3JlYXRlZC4KKworSXQgaXMgaW1wbGljaXRlbHkgYXNzdW1lZCB0aGF0IGFsbCBvZiB0aGUgYmluYXJ5IGZpbGVzIChjdXJsLmV4ZSwgbGliY3VybC5hLAorZXRjKSBoYXZlIHByZXZpb3VzbHkgYmVlbiBjb3BpZWQgdG8gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoZSBjdXJsIHNvdXJjZQorcGFja2FnZSAodGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgbWFpbiBSRUFETUUgcmVzaWRlcyksIGJlY2F1c2UgdGhhdCBpcyB3aGVyZQordGhleSBzaG91bGQgZW5kIHVwIGluIHRoZSB6aXAgYXJjaGl2ZS4gVGhlIGFyY2hpdmUgc2hvdWxkICpub3QqIGJlIGJ1aWx0IHdpdGgKK2Fic29sdXRlIHBhdGggaW5mb3JtYXRpb24gYmVjYXVzZSB0aGUgdXNlciB3aWxsIHdhbnQgdG8gbG9jYWxseSBleHRyYWN0IHRoZQorYXJjaGl2ZSBjb250ZW50cyBhbmQgc2hpZnQgdGhlIGJpbmFyaWVzIHRvIGhpcyBleGVjdXRhYmxlIGRpcmVjdG9yeS4KKworU0NSSVBUX1RFTVBMQVRFUworCitjdXJscGtnLmJhdDoKKwl6aXAgLTkgJTEgY3VybC5leGUgQ0hBTkdFUyBMRUdBTCBNUEwtMS4wLnR4dCBSRUFETUUgXAorCSBkb2NzL0ZBUSBkb2NzL0ZFQVRVUkVTIGRvY3MvUkVBRE1FLmN1cmwgZG9jcy9SRUFETUUud2luMzIgZG9jcy9UT0RPCisKK2N1cmxkZXZwa2cuYmF0OgorCXppcCAtOSAlMSBjdXJsLmV4ZSBpbmNsdWRlXFJFQURNRSBpbmNsdWRlXGN1cmxcKi5oIENIQU5HRVMgZG9jc1wqIFwKKwkgIGN1cmwuc3BlYyBjdXJsLXNzbC5zcGVjIExFR0FMIGxpYi9NYWtlZmlsZS5tMzIgc3JjL01ha2VmaWxlLm0zMiBcCisJICBsaWJjdXJsLmEgbGliY3VybC5kbGwgbGliY3VybGRsbC5hIE1QTC0xLjAudHh0IFJFQURNRQorCitQUk9DRURVUkVfRVhBTVBMRQorCitBIHN0YW5kYXJkIHBhY2thZ2luZyByb3V0aW5lIChmb3IgTWluZ1czMikgdXNpbmcgdGhlIGFib3ZlIGJhdGNoIGZpbGVzIGNvdWxkCitnbyBsaWtlIHRoaXM6CisoTm8gU1NMKQkJCQkJKFdpdGggU1NMKQorY2QgPGN1cmwtc291cmNlZGlyPlxsaWIJCQljZCA8Y3VybC1zb3VyY2VkaXI+XGxpYgorbWFrZSAtZiBNYWtlZmlsZS5tMzIJCQltYWtlIC1mIE1ha2VmaWxlLm0zMiBTU0w9MQorY2QgLi5cc3JjCQkJCQljZCAuLlxzcmMKK21ha2UgLWYgTWFrZWZpbGUubTMyCQkJbWFrZSAtZiBNYWtlZmlsZS5tMzIgU1NMPTEKK2NkIC4uCQkJCQkJY2QgLi4KK2NvcHkgbGliXGxpYmN1cmwuYSAuCQkJY29weSBsaWJcbGliY3VybC5hIC4KK2NvcHkgc3JjXGN1cmwuZXhlIC4JCQljb3B5IHNyY1xjdXJsLmV4ZSAuCitjdXJscGtnIGN1cmwtd2luMzItbm9zc2wuemlwCQljdXJscGtnIGN1cmwtd2luMzItc3NsLnppcApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvV2luMzIvY3lnd2luL01ha2VmaWxlLmFtIGIvY3VybC03LjI1LjAvcGFja2FnZXMvV2luMzIvY3lnd2luL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NjE0OGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy9XaW4zMi9jeWd3aW4vTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2MiBAQAorRVhUUkFfRElTVCA9IFJFQURNRQorCisjCisjIEJ1aWxkIGEgQ3lnd2luIGJpbmFyeSB0YXIgYmFsbAorIworIyBSZWFkIHRoZSBSRUFETUUgZmlsZSBmb3IgZGV0YWlscyBvbiB1c2luZyB0aGlzIE1ha2VmaWxlCisjCisjIE5PVEU6IEFzIEknbSBub3QgcGFydGljdWxhcmx5IGZhbWlsaWFyIHdpdGggTWFrZWZpbGVzLCB0aGlzIHdhcyB0aGUKKyMgIGJlc3QgSSBjb3VsZCBjb21lIHVwIHdpdGguIEl0IHNob3VsZCBwcm9iYWJseSBiZSBlbmhhbmNlZCBzb21lZGF5CisjICB0byBhY3R1YWxseSB1c2UgdGhlIGNvcnJlY3QgdGFyZ2V0IGFuZCBwcmUtcmVxdWlzaXRlIG5hbWVzLCBldGMuLi4KKyMgIElmIGFueW9uZSBlbHNlIHdhbnRzIHRvIHZvbHVudGVlciwgZmVlbCBmcmVlIDstKQorIworCisjIEN5Z3dpbiBidWlsZCBudW1iZXIgKGRlZmF1bHQgdG8gIjEiKQorQ1lHQlVJTEQgPSAxCisKKyMgQ3lnd2luIHRhcmJhbGwgYnVpbGQgZGlyIChmdWxseS1xdWFsaWZpZWQgbmFtZSwgZ2V0cyBkZWxldGVkIHdoZW4gZG9uZSkKK2N5Z3dpbnRtcCA9ICQoQ1VSRElSKS90bXBfYmluYnVpbGQKKworY3lnd2luYmluOgorCXJtIC1yZiAkKGN5Z3dpbnRtcCkKKwlybSAtcmYgJChjeWd3aW50bXApLWRldgorCSQoTUFLRSkgLUMgJCh0b3BfYnVpbGRkaXIpIERFU1RESVI9JChjeWd3aW50bXApIGluc3RhbGwtc3RyaXAKKyMgJChTVFJJUCkgJChjeWd3aW50bXApL3Vzci9iaW4vY3lnY3VybC0/LmRsbAorCSQobWtpbnN0YWxsZGlycykgXAorCSAgJChjeWd3aW50bXApJChkYXRhZGlyKS9kb2MvQ3lnd2luIFwKKwkgICQoY3lnd2ludG1wKSQoZGF0YWRpcikvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKSBcCisJICAkKGN5Z3dpbnRtcCktZGV2JChkYXRhZGlyKS9kb2MvJChQQUNLQUdFKS0kKFZFUlNJT04pL2xpYmN1cmwgXAorCSAgJChjeWd3aW50bXApLWRldiQoZGF0YWRpcikvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKS9leGFtcGxlcyBcCisJICAkKGN5Z3dpbnRtcCktZGV2JChtYW5kaXIpCisjCisjIGNvcHkgc29tZSBmaWxlcyBpbnRvIHRoZSBiaW5hcnkgaW5zdGFsbCBkaXIKKwljcCAkKHNyY2RpcikvUkVBRE1FIFwKKwkgICQoY3lnd2ludG1wKSQoZGF0YWRpcikvZG9jL0N5Z3dpbi8kKFBBQ0tBR0UpLSQoVkVSU0lPTiktJChDWUdCVUlMRCkuUkVBRE1FCisJY2QgJCh0b3Bfc3JjZGlyKSA7IGNwIENIQU5HRVMgQ09QWUlORyBSRUFETUUgUkVMRUFTRS1OT1RFUyBkb2NzLyogXAorCSAgJChjeWd3aW50bXApJChkYXRhZGlyKS9kb2MvJChQQUNLQUdFKS0kKFZFUlNJT04pIDsgcHdkCisJY2QgJChjeWd3aW50bXApJChkYXRhZGlyKS9kb2MvJChQQUNLQUdFKS0kKFZFUlNJT04pIDsgcm0gKi4xIE1ha2VmaWxlKgorIworIyBjb3B5IHNvbWUgZmlsZXMgaW50byB0aGUgLWRldiBpbnN0YWxsIGRpciwgcmVtb3ZlIHNvbWUgZnJvbSBiaW5hcnkKKwljcCAkKHRvcF9zcmNkaXIpL2RvY3MvbGliY3VybC8qLmh0bWwgXAorCSAgJChjeWd3aW50bXApLWRldiQoZGF0YWRpcikvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKS9saWJjdXJsCisJY3AgJCh0b3Bfc3JjZGlyKS9kb2NzL2V4YW1wbGVzLyogXAorCSAgJChjeWd3aW50bXApLWRldiQoZGF0YWRpcikvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKS9leGFtcGxlcworCXJtICQoY3lnd2ludG1wKS1kZXYkKGRhdGFkaXIpL2RvYy8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvZXhhbXBsZXMvTWFrZWZpbGUqCisJY3AgJCh0b3Bfc3JjZGlyKS9kb2NzL2V4YW1wbGVzL01ha2VmaWxlLmV4YW1wbGUgXAorCSAgJChjeWd3aW50bXApLWRldiQoZGF0YWRpcikvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKS9leGFtcGxlcworCW12ICQoY3lnd2ludG1wKSQoZGF0YWRpcikvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKS9CSU5ESU5HUyBcCisJICAgJChjeWd3aW50bXApLWRldiQoZGF0YWRpcikvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKQorCW12ICQoY3lnd2ludG1wKSQoZGF0YWRpcikvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKS9JTlRFUk5BTFMgXAorCSAgICQoY3lnd2ludG1wKS1kZXYkKGRhdGFkaXIpL2RvYy8kKFBBQ0tBR0UpLSQoVkVSU0lPTikKKwltdiAkKGN5Z3dpbnRtcCkvdXNyL2luY2x1ZGUgJChjeWd3aW50bXApLWRldi91c3IKKwltdiAkKGN5Z3dpbnRtcCkvdXNyL2xpYiAkKGN5Z3dpbnRtcCktZGV2L3VzcgorCW12ICQoY3lnd2ludG1wKSQobWFuZGlyKS9tYW4zICQoY3lnd2ludG1wKS1kZXYkKG1hbmRpcikKKyMKKyMgY3JlYXRlIGJvdGggdGFyIGZpbGVzLCBhbmQgZGVsZXRlIHRtcCBmb2xkZXJzCisJY2QgJChjeWd3aW50bXApIDsgdGFyIGNqZiBcCisJICAkKFBBQ0tBR0UpLSQoVkVSU0lPTiktJChDWUdCVUlMRCkudGFyLmJ6MiB1c3IKKwltdiAkKGN5Z3dpbnRtcCkvKi50YXIuYnoyIC4gJiYgcm0gLXJmICQoY3lnd2ludG1wKQorIworCWNkICQoY3lnd2ludG1wKS1kZXYgOyB0YXIgY2pmIFwKKwkgICQoUEFDS0FHRSktZGV2ZWwtJChWRVJTSU9OKS0kKENZR0JVSUxEKS50YXIuYnoyIHVzcgorCW12ICQoY3lnd2ludG1wKS1kZXYvKi50YXIuYnoyIC4gJiYgcm0gLXJmICQoY3lnd2ludG1wKS1kZXYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1dpbjMyL2N5Z3dpbi9NYWtlZmlsZS5pbiBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1dpbjMyL2N5Z3dpbi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2I1ZDY5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvV2luMzIvY3lnd2luL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNDgxIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBwYWNrYWdlcy9XaW4zMi9jeWd3aW4KK0RJU1RfQ09NTU9OID0gUkVBRE1FICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2N1cmwtY29tcGlsZXJzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtY29uZm9wdHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1mdW5jdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vcGVuc3NsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3ZlcnJpZGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1yZWVudHJhbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1zeXN0ZW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtdHJhbnNsaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQveno1MC14Yy1vdnIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9zcmMvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQlVJTERfTElCSE9TVE5BTUVfRkFMU0UgPSBAQlVJTERfTElCSE9TVE5BTUVfRkFMU0VACitCVUlMRF9MSUJIT1NUTkFNRV9UUlVFID0gQEJVSUxEX0xJQkhPU1ROQU1FX1RSVUVACitCVUlMRF9VTklUVEVTVFNfRkFMU0UgPSBAQlVJTERfVU5JVFRFU1RTX0ZBTFNFQAorQlVJTERfVU5JVFRFU1RTX1RSVUUgPSBAQlVJTERfVU5JVFRFU1RTX1RSVUVACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ09ORklHVVJFX09QVElPTlMgPSBAQ09ORklHVVJFX09QVElPTlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDUk9TU0NPTVBJTElOR19GQUxTRSA9IEBDUk9TU0NPTVBJTElOR19GQUxTRUAKK0NST1NTQ09NUElMSU5HX1RSVUUgPSBAQ1JPU1NDT01QSUxJTkdfVFJVRUAKK0NVUkxERUJVR19GQUxTRSA9IEBDVVJMREVCVUdfRkFMU0VACitDVVJMREVCVUdfVFJVRSA9IEBDVVJMREVCVUdfVFJVRUAKK0NVUkxWRVJTSU9OID0gQENVUkxWRVJTSU9OQAorQ1VSTF9DQV9CVU5ETEUgPSBAQ1VSTF9DQV9CVU5ETEVACitDVVJMX0NGTEFHX0VYVFJBUyA9IEBDVVJMX0NGTEFHX0VYVFJBU0AKK0NVUkxfRElTQUJMRV9ESUNUID0gQENVUkxfRElTQUJMRV9ESUNUQAorQ1VSTF9ESVNBQkxFX0ZJTEUgPSBAQ1VSTF9ESVNBQkxFX0ZJTEVACitDVVJMX0RJU0FCTEVfRlRQID0gQENVUkxfRElTQUJMRV9GVFBACitDVVJMX0RJU0FCTEVfR09QSEVSID0gQENVUkxfRElTQUJMRV9HT1BIRVJACitDVVJMX0RJU0FCTEVfSFRUUCA9IEBDVVJMX0RJU0FCTEVfSFRUUEAKK0NVUkxfRElTQUJMRV9JTUFQID0gQENVUkxfRElTQUJMRV9JTUFQQAorQ1VSTF9ESVNBQkxFX0xEQVAgPSBAQ1VSTF9ESVNBQkxFX0xEQVBACitDVVJMX0RJU0FCTEVfTERBUFMgPSBAQ1VSTF9ESVNBQkxFX0xEQVBTQAorQ1VSTF9ESVNBQkxFX1BPUDMgPSBAQ1VSTF9ESVNBQkxFX1BPUDNACitDVVJMX0RJU0FCTEVfUFJPWFkgPSBAQ1VSTF9ESVNBQkxFX1BST1hZQAorQ1VSTF9ESVNBQkxFX1JUU1AgPSBAQ1VSTF9ESVNBQkxFX1JUU1BACitDVVJMX0RJU0FCTEVfU01UUCA9IEBDVVJMX0RJU0FCTEVfU01UUEAKK0NVUkxfRElTQUJMRV9URUxORVQgPSBAQ1VSTF9ESVNBQkxFX1RFTE5FVEAKK0NVUkxfRElTQUJMRV9URlRQID0gQENVUkxfRElTQUJMRV9URlRQQAorQ1VSTF9MSUJTID0gQENVUkxfTElCU0AKK0NVUkxfTkVUV09SS19MSUJTID0gQENVUkxfTkVUV09SS19MSUJTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NIQVJFRCA9IEBFTkFCTEVfU0hBUkVEQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSEFWRV9HTlVUTFNfU1JQID0gQEhBVkVfR05VVExTX1NSUEAKK0hBVkVfTERBUF9TU0wgPSBASEFWRV9MREFQX1NTTEAKK0hBVkVfTElCWiA9IEBIQVZFX0xJQlpACitIQVZFX0xJQlpfRkFMU0UgPSBASEFWRV9MSUJaX0ZBTFNFQAorSEFWRV9MSUJaX1RSVUUgPSBASEFWRV9MSUJaX1RSVUVACitIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVCA9IEBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVEAKK0hBVkVfU1NMRUFZX1NSUCA9IEBIQVZFX1NTTEVBWV9TUlBACitJRE5fRU5BQkxFRCA9IEBJRE5fRU5BQkxFREAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSVBWNl9FTkFCTEVEID0gQElQVjZfRU5BQkxFREAKK0tSQjRfRU5BQkxFRCA9IEBLUkI0X0VOQUJMRURACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkNVUkxfTElCUyA9IEBMSUJDVVJMX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUlOVEFJTkVSX01PREVfRkFMU0UgPSBATUFJTlRBSU5FUl9NT0RFX0ZBTFNFQAorTUFJTlRBSU5FUl9NT0RFX1RSVUUgPSBATUFJTlRBSU5FUl9NT0RFX1RSVUVACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01BTk9QVCA9IEBNQU5PUFRACitNSU1QVVJFX0ZBTFNFID0gQE1JTVBVUkVfRkFMU0VACitNSU1QVVJFX1RSVUUgPSBATUlNUFVSRV9UUlVFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorTk9fVU5ERUZJTkVEX0ZBTFNFID0gQE5PX1VOREVGSU5FRF9GQUxTRUAKK05PX1VOREVGSU5FRF9UUlVFID0gQE5PX1VOREVGSU5FRF9UUlVFQAorTlJPRkYgPSBATlJPRkZACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIID0gQFBBVEhACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkwgPSBAUEVSTEAKK1BLR0FERF9OQU1FID0gQFBLR0FERF9OQU1FQAorUEtHQUREX1BLRyA9IEBQS0dBRERfUEtHQAorUEtHQUREX1ZFTkRPUiA9IEBQS0dBRERfVkVORE9SQAorUEtHQ09ORklHID0gQFBLR0NPTkZJR0AKK1JBTkRPTV9GSUxFID0gQFJBTkRPTV9GSUxFQAorUkFOTElCID0gQFJBTkxJQkAKK1JFUVVJUkVfTElCX0RFUFMgPSBAUkVRVUlSRV9MSUJfREVQU0AKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU09OQU1FX0JVTVBfRkFMU0UgPSBAU09OQU1FX0JVTVBfRkFMU0VACitTT05BTUVfQlVNUF9UUlVFID0gQFNPTkFNRV9CVU1QX1RSVUVACitTU0xfRU5BQkxFRCA9IEBTU0xfRU5BQkxFREAKK1NUQVRJQ0xJQl9GQUxTRSA9IEBTVEFUSUNMSUJfRkFMU0VACitTVEFUSUNMSUJfVFJVRSA9IEBTVEFUSUNMSUJfVFJVRUAKK1NUUklQID0gQFNUUklQQAorU1VQUE9SVF9GRUFUVVJFUyA9IEBTVVBQT1JUX0ZFQVRVUkVTQAorU1VQUE9SVF9QUk9UT0NPTFMgPSBAU1VQUE9SVF9QUk9UT0NPTFNACitURVNUX1NFUlZFUl9MSUJTID0gQFRFU1RfU0VSVkVSX0xJQlNACitVU0VfQVJFUyA9IEBVU0VfQVJFU0AKK1VTRV9BWFRMUyA9IEBVU0VfQVhUTFNACitVU0VfQ1lBU1NMID0gQFVTRV9DWUFTU0xACitVU0VfRU1CRURERURfQVJFU19GQUxTRSA9IEBVU0VfRU1CRURERURfQVJFU19GQUxTRUAKK1VTRV9FTUJFRERFRF9BUkVTX1RSVUUgPSBAVVNFX0VNQkVEREVEX0FSRVNfVFJVRUAKK1VTRV9HTlVUTFMgPSBAVVNFX0dOVVRMU0AKK1VTRV9HTlVUTFNfTkVUVExFID0gQFVTRV9HTlVUTFNfTkVUVExFQAorVVNFX0xJQlJUTVAgPSBAVVNFX0xJQlJUTVBACitVU0VfTElCU1NIMiA9IEBVU0VfTElCU1NIMkAKK1VTRV9NQU5VQUxfRkFMU0UgPSBAVVNFX01BTlVBTF9GQUxTRUAKK1VTRV9NQU5VQUxfVFJVRSA9IEBVU0VfTUFOVUFMX1RSVUVACitVU0VfTlNTID0gQFVTRV9OU1NACitVU0VfT1BFTkxEQVAgPSBAVVNFX09QRU5MREFQQAorVVNFX1BPTEFSU1NMID0gQFVTRV9QT0xBUlNTTEAKK1VTRV9TU0xFQVkgPSBAVVNFX1NTTEVBWUAKK1VTRV9XSU5ET1dTX1NTUEkgPSBAVVNFX1dJTkRPV1NfU1NQSUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZFUlNJT05FRF9GTEFWT1VSID0gQFZFUlNJT05FRF9GTEFWT1VSQAorVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0UgPSBAVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0VACitWRVJTSU9ORURfU1lNQk9MU19UUlVFID0gQFZFUlNJT05FRF9TWU1CT0xTX1RSVUVACitWRVJTSU9OTlVNID0gQFZFUlNJT05OVU1ACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAorYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsaWJleHQgPSBAbGliZXh0QAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzdWJkaXJzID0gQHN1YmRpcnNACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAorRVhUUkFfRElTVCA9IFJFQURNRQorCisjCisjIEJ1aWxkIGEgQ3lnd2luIGJpbmFyeSB0YXIgYmFsbAorIworIyBSZWFkIHRoZSBSRUFETUUgZmlsZSBmb3IgZGV0YWlscyBvbiB1c2luZyB0aGlzIE1ha2VmaWxlCisjCisjIE5PVEU6IEFzIEknbSBub3QgcGFydGljdWxhcmx5IGZhbWlsaWFyIHdpdGggTWFrZWZpbGVzLCB0aGlzIHdhcyB0aGUKKyMgIGJlc3QgSSBjb3VsZCBjb21lIHVwIHdpdGguIEl0IHNob3VsZCBwcm9iYWJseSBiZSBlbmhhbmNlZCBzb21lZGF5CisjICB0byBhY3R1YWxseSB1c2UgdGhlIGNvcnJlY3QgdGFyZ2V0IGFuZCBwcmUtcmVxdWlzaXRlIG5hbWVzLCBldGMuLi4KKyMgIElmIGFueW9uZSBlbHNlIHdhbnRzIHRvIHZvbHVudGVlciwgZmVlbCBmcmVlIDstKQorIworCisjIEN5Z3dpbiBidWlsZCBudW1iZXIgKGRlZmF1bHQgdG8gIjEiKQorQ1lHQlVJTEQgPSAxCisKKyMgQ3lnd2luIHRhcmJhbGwgYnVpbGQgZGlyIChmdWxseS1xdWFsaWZpZWQgbmFtZSwgZ2V0cyBkZWxldGVkIHdoZW4gZG9uZSkKK2N5Z3dpbnRtcCA9ICQoQ1VSRElSKS90bXBfYmluYnVpbGQKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBwYWNrYWdlcy9XaW4zMi9jeWd3aW4vTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHBhY2thZ2VzL1dpbjMyL2N5Z3dpbi9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbAordW5pbnN0YWxsLWluZm8tYW06Cit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWluZm8tYW0KKworCitjeWd3aW5iaW46CisJcm0gLXJmICQoY3lnd2ludG1wKQorCXJtIC1yZiAkKGN5Z3dpbnRtcCktZGV2CisJJChNQUtFKSAtQyAkKHRvcF9idWlsZGRpcikgREVTVERJUj0kKGN5Z3dpbnRtcCkgaW5zdGFsbC1zdHJpcAorIyAkKFNUUklQKSAkKGN5Z3dpbnRtcCkvdXNyL2Jpbi9jeWdjdXJsLT8uZGxsCisJJChta2luc3RhbGxkaXJzKSBcCisJICAkKGN5Z3dpbnRtcCkkKGRhdGFkaXIpL2RvYy9DeWd3aW4gXAorCSAgJChjeWd3aW50bXApJChkYXRhZGlyKS9kb2MvJChQQUNLQUdFKS0kKFZFUlNJT04pIFwKKwkgICQoY3lnd2ludG1wKS1kZXYkKGRhdGFkaXIpL2RvYy8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvbGliY3VybCBcCisJICAkKGN5Z3dpbnRtcCktZGV2JChkYXRhZGlyKS9kb2MvJChQQUNLQUdFKS0kKFZFUlNJT04pL2V4YW1wbGVzIFwKKwkgICQoY3lnd2ludG1wKS1kZXYkKG1hbmRpcikKKyMKKyMgY29weSBzb21lIGZpbGVzIGludG8gdGhlIGJpbmFyeSBpbnN0YWxsIGRpcgorCWNwICQoc3JjZGlyKS9SRUFETUUgXAorCSAgJChjeWd3aW50bXApJChkYXRhZGlyKS9kb2MvQ3lnd2luLyQoUEFDS0FHRSktJChWRVJTSU9OKS0kKENZR0JVSUxEKS5SRUFETUUKKwljZCAkKHRvcF9zcmNkaXIpIDsgY3AgQ0hBTkdFUyBDT1BZSU5HIFJFQURNRSBSRUxFQVNFLU5PVEVTIGRvY3MvKiBcCisJICAkKGN5Z3dpbnRtcCkkKGRhdGFkaXIpL2RvYy8kKFBBQ0tBR0UpLSQoVkVSU0lPTikgOyBwd2QKKwljZCAkKGN5Z3dpbnRtcCkkKGRhdGFkaXIpL2RvYy8kKFBBQ0tBR0UpLSQoVkVSU0lPTikgOyBybSAqLjEgTWFrZWZpbGUqCisjCisjIGNvcHkgc29tZSBmaWxlcyBpbnRvIHRoZSAtZGV2IGluc3RhbGwgZGlyLCByZW1vdmUgc29tZSBmcm9tIGJpbmFyeQorCWNwICQodG9wX3NyY2RpcikvZG9jcy9saWJjdXJsLyouaHRtbCBcCisJICAkKGN5Z3dpbnRtcCktZGV2JChkYXRhZGlyKS9kb2MvJChQQUNLQUdFKS0kKFZFUlNJT04pL2xpYmN1cmwKKwljcCAkKHRvcF9zcmNkaXIpL2RvY3MvZXhhbXBsZXMvKiBcCisJICAkKGN5Z3dpbnRtcCktZGV2JChkYXRhZGlyKS9kb2MvJChQQUNLQUdFKS0kKFZFUlNJT04pL2V4YW1wbGVzCisJcm0gJChjeWd3aW50bXApLWRldiQoZGF0YWRpcikvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKS9leGFtcGxlcy9NYWtlZmlsZSoKKwljcCAkKHRvcF9zcmNkaXIpL2RvY3MvZXhhbXBsZXMvTWFrZWZpbGUuZXhhbXBsZSBcCisJICAkKGN5Z3dpbnRtcCktZGV2JChkYXRhZGlyKS9kb2MvJChQQUNLQUdFKS0kKFZFUlNJT04pL2V4YW1wbGVzCisJbXYgJChjeWd3aW50bXApJChkYXRhZGlyKS9kb2MvJChQQUNLQUdFKS0kKFZFUlNJT04pL0JJTkRJTkdTIFwKKwkgICAkKGN5Z3dpbnRtcCktZGV2JChkYXRhZGlyKS9kb2MvJChQQUNLQUdFKS0kKFZFUlNJT04pCisJbXYgJChjeWd3aW50bXApJChkYXRhZGlyKS9kb2MvJChQQUNLQUdFKS0kKFZFUlNJT04pL0lOVEVSTkFMUyBcCisJICAgJChjeWd3aW50bXApLWRldiQoZGF0YWRpcikvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKQorCW12ICQoY3lnd2ludG1wKS91c3IvaW5jbHVkZSAkKGN5Z3dpbnRtcCktZGV2L3VzcgorCW12ICQoY3lnd2ludG1wKS91c3IvbGliICQoY3lnd2ludG1wKS1kZXYvdXNyCisJbXYgJChjeWd3aW50bXApJChtYW5kaXIpL21hbjMgJChjeWd3aW50bXApLWRldiQobWFuZGlyKQorIworIyBjcmVhdGUgYm90aCB0YXIgZmlsZXMsIGFuZCBkZWxldGUgdG1wIGZvbGRlcnMKKwljZCAkKGN5Z3dpbnRtcCkgOyB0YXIgY2pmIFwKKwkgICQoUEFDS0FHRSktJChWRVJTSU9OKS0kKENZR0JVSUxEKS50YXIuYnoyIHVzcgorCW12ICQoY3lnd2ludG1wKS8qLnRhci5iejIgLiAmJiBybSAtcmYgJChjeWd3aW50bXApCisjCisJY2QgJChjeWd3aW50bXApLWRldiA7IHRhciBjamYgXAorCSAgJChQQUNLQUdFKS1kZXZlbC0kKFZFUlNJT04pLSQoQ1lHQlVJTEQpLnRhci5iejIgdXNyCisJbXYgJChjeWd3aW50bXApLWRldi8qLnRhci5iejIgLiAmJiBybSAtcmYgJChjeWd3aW50bXApLWRldgorIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvV2luMzIvY3lnd2luL1JFQURNRSBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1dpbjMyL2N5Z3dpbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ1N2Y3MwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL1dpbjMyL2N5Z3dpbi9SRUFETUUKQEAgLTAsMCArMSwxMTQgQEAKK0N1cmwgaXMgYSB0b29sIGZvciB0cmFuc2ZlcnJpbmcgZmlsZXMgd2l0aCBVUkwgc3ludGF4LCBzdXBwb3J0aW5nCisgIEZUUCwgRlRQUywgSFRUUCwgSFRUUFMsIFRFTE5FVCwgRElDVCwgRklMRSBhbmQgTERBUC4KKyAgQ3VybCBzdXBwb3J0cyBIVFRQUyBjZXJ0aWZpY2F0ZXMsIEhUVFAgUE9TVCwgSFRUUCBQVVQsCisgIEZUUCB1cGxvYWRpbmcsIGtlcmJlcm9zLCBIVFRQIGZvcm0gYmFzZWQgdXBsb2FkLCBwcm94aWVzLAorICBjb29raWVzLCB1c2VyK3Bhc3N3b3JkIGF1dGhlbnRpY2F0aW9uLCBmaWxlIHRyYW5zZmVyIHJlc3VtZSwKKyAgaHR0cCBwcm94eSB0dW5uZWxpbmcgYW5kIGEgYnVzbG9hZCBvZiBvdGhlciB1c2VmdWwgdHJpY2tzLgorCitTZWUgL3Vzci9kb2MvY3VybC0kKFZFUlNJT04pL0ZFQVRVUkVTIGZvciBtb3JlIGluZm8uCisKKworRGVwZW5kZW5jaWVzOgorICAtIEN5Z3dpbgorICAtIE9wZW5TU0wgMC45LjZiLTIrICgqKQorCisgICgqKSBjVVJMIGNhbiBiZSBidWlsdCB3aXRob3V0IFNTTCBzdXBwb3J0LCBzZWUgYmVsb3cgZm9yIGRldGFpbHMKKworCitDYW5vbmljYWwgSG9tZXBhZ2UgYW5kIERvd25sb2FkczoKKyAgaHR0cDovL2N1cmwuaGF4eC5zZS8KKyAgaHR0cDovL2N1cmwuaGF4eC5zZS9kb3dubG9hZC5odG1sCisKKworQ3lnd2luIHNwZWNpZmljIHNvdXJjZSBmaWxlcyAoYSAuUkVBRE1FIHRlbXBsYXRlIGFuZCBhIE1ha2VmaWxlCisgIGZvciBidWlsZGluZyBiaW5hcnkgdGFyYmFsbHMpIGFyZSBtYWludGFpbmVkIGluIHRoZSB1cHN0cmVhbQorICBDVlMgYXQ6IDxzcmN0b3A+L3BhY2thZ2VzL1dpbjMyL2N5Z3dpbi8KKworCitCdWlsZCBJbnN0cnVjdGlvbnMgKHRvIHJlY29tcGlsZSBmcm9tIHRoZSBjeWd3aW4gc291cmNlIHRhcmJhbGwpOgorICAtLS1TVEFOREFSRCAod2l0aCBTU0wpIFJFTEVBU0UtLS0KKyAgRG93bmxvYWQgdGhlIHNvdXJjZSAoZWl0aGVyIHRoZSBvZmZpY2lhbCByZWxlYXNlIG9yIHRoZSBjeWd3aW4gdmVyc2lvbiksCisgIHVucGFjayBpdCAoZG9uZSBmb3IgeW91IGlmIHVzaW5nIHNldHVwLmV4ZSksIHRoZW46CisKKyAgJCAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNyIC0tbWFuZGlyPS91c3Ivc2hhcmUvbWFuICAjICgqKQorICAkIG1ha2UKKyAgJCBtYWtlIHRlc3QgICAgIyBvcHRpb25hbAorICAkIG1ha2UgaW5zdGFsbCAjICgqKikKKworICAoKikgVGhlIEN5Z3dpbiBwcm9qZWN0IG5vdyAoYXMgb2Ygc29tZXRpbWUgaW4gMjAwMykgcHJlZmVycyBtYW4gcGFnZXMKKyAgICAgIHdpdGhpbiAvdXNyL3NoYXJlL21hbiwgYXMgb3Bwb3NlZCB0byB0aGUgZGVmYXVsdCAvdXNyL21hbi4KKworICAoKiopIExpYlRvb2wgMS40LjIgaGFkIGEgYnVnIHJlbGF0ZWQgdG8gY3lnd2luJ3MgdXNlIG9mICIuZXhlIiBleHRlbnNpb25zLAorICAgICAgc3VjaCB0aGF0ICJtYWtlIGluc3RhbGwiIGJsZXcgdXAgYXQgY3VybC5leGUuIFNlZSB0aGlzIFVSTCBmb3IgZGV0YWlsczoKKyAgICAgICAgIGh0dHA6Ly9tYWlsLmdudS5vcmcvcGlwZXJtYWlsL2xpYnRvb2wvMjAwMS1TZXB0ZW1iZXIvMDA1NTQ5Lmh0bWwKKyAgICAgIFRoZSBjb3B5IG9mIGx0bWFpbi5zaCB0aGF0IGlzIGRpc3RyaWJ1dGVkIHdpdGggY1VSTCBpbmNsdWRlcyB0aGlzIHBhdGNoLgorCisgIEFzIG9mIGN1cmwgNy45LjEsIHRoZSBvZmZpY2lhbCBzb3VyY2UgY29tcGlsZXMgKHVuZGVyIEN5Z3dpbikgYW5kIHRlc3RzCisgICAgMTAwJSBjbGVhbmx5IE9PVEIgKE91dCBPZiBUaGUgQm94KQorCisgIC0tLU5PIFNTTCBSRUxFQVNFLS0tCisgIFNhbWUgYXMgc3RhbmRhcmQsIGV4Y2VwdCBmb3IgdGhlIGNvbmZpZ3VyZSBzdGVwLCB3aGljaCBjaGFuZ2VzIHRvOgorCisgICQgLi9jb25maWd1cmUgLS1wcmVmaXg9L3VzciAtLW1hbmRpcj0vdXNyL3NoYXJlL21hbiAtLXdpdGhvdXQtc3NsCisKKyAgTk9URTogdGhlIHN0YW5kYXJkIHJlbGVhc2UgaXMgd2hhdCBpcyBhdmFpbGFibGUgdmlhIEN5Z3dpbidzIHNldHVwLmV4ZTsKKyAgICB0aGUgbm8tc3NsIHJlbGVhc2UgaXMgb25seSBhdmFpbGFibGUgZnJvbSB0aGUgY3VybCB3ZWJzaXRlCisKKworUGFja2FnaW5nIEluc3RydWN0aW9uczoKKyAgLS0tQklOQVJZLS0tCisgIENvbXBpbGUgY2xlYW5seSBhcyBkZXNjcmliZWQgYWJvdmUsIHRoZW46CisKKyAgJCBtYWtlIGN5Z3dpbmJpbiBDWUdCVUlMRD1uCisKKyAgd2hlcmUgbiBpcyB0aGUgY3lnd2luIHJlbGVhc2UgbnVtYmVyIChlLmcuIHRoZSAiMSIgaW4gY3VybC03LjktMSksCisgIGFuZCAiQ1lHQlVJTEQ9biIgaXMgb3B0aW9uYWwgKG4gZGVmYXVsdHMgdG8gMSBpZiBub3Qgc3BlY2lmaWVkKQorCisgIEFzc3VtaW5nIGV2ZXJ5dGhpbmcgd29ya2VkLCB5b3UnbGwgZmluZCB5b3VyIGJpbmFyeSB0YXJiYWxscyBpbgorICAgJChidWlsZHRvcCkvcGFja2FnZXMvV2luMzIvY3lnd2luLworCisgIC0tLVNPVVJDRS0tLQorICAxLiBkb3dubG9hZCAmIHVucGFjayB0aGUgcHJpc3RpbmUgc291cmNlCisgIDIuIHJlbmFtZSB0aGUgc291cmNlIGRpciB0byBhZGQgdGhlICItJChSRUwpIiBzdWZmaXgsIGUuZy46CisgICAgICQgbXYgY3VybC03LjkgY3VybC03LjktMQorICAzLiB1bnBhY2sgdGhlIHByaXN0aW5lIHNvdXJjZSBvbmNlIG1vcmUsIHNvIHlvdSdsbCBlbmQgdXAKKyAgICAgd2l0aCAyIGRpcmVjdG9yaWVzOiAiY3VybC03LjkiIGFuZCAiY3VybC03LjktMSIgaW4gdGhpcyBleGFtcGxlCisgIDMuIGFkZCBhIENZR1dJTi1QQVRDSEVTIGRpcmVjdG9yeSwgYW5kIGFkZCB0aGlzIHJlYWRtZSB0byBpdAorICAgICAkIGNkIGN1cmwtNy45LTE7IG1rZGlyIENZR1dJTi1QQVRDSEVTCisgICAgICQgY3AgcGFja2FnZXMvV2luMzIvY3lnd2luL1JFQURNRSBDWUdXSU4tUEFUQ0hFUy9jdXJsLTcuOS0xLlJFQURNRQorICA0LiBpZiBhcHBsaWNhYmxlLCBkb2N1bWVudCBhbnkgY2hhbmdlcyBpbiB0aGUgUkVBRE1FIGZpbGUKKyAgNS4gY3JlYXRlIGEgcGF0Y2ggd2hpY2gsIHdoZW4gYXBwbGllZAorICAgICAodXNpbmcgYHBhdGNoIC1wMSA8IGN1cmwtNy45LSQoUkVMKS5wYXRjaGApCisgICAgIHdpbGwgcmVtb3ZlIGFueSBjaGFuZ2VzIHlvdSd2ZSBtYWRlIHRvIHRoZSBwcmlzdGluZSBzb3VyY2U6CisgICAgICQgY2QgLi4KKyAgICAgJCBkaWZmIC1OcnVwIGN1cmwtNy45LTEgY3VybC03LjkgPiBjdXJsLTcuOS0xLnBhdGNoCisgICAgIGFuZCB0aGVuIG1vdmUgaXQgaW50byB0aGUgQ1lHV0lOLVBBVENIRVMgZGlyZWN0b3J5CisgICAgICQgbXYgY3VybC03LjktMS5wYXRjaCBjdXJsLTcuOS0xL0NZR1dJTi1QQVRDSEVTCisgIDYuIHBhY2sgdGhlIG5ldyBzb3VyY2UgZGlyIGludG8gYSB0YXIuYnoyIGZpbGU6CisgICAgICQgdGFyIGNmaiBjdXJsLTcuOS0xLXNyYy50YXIuYnoyIGN1cmwtNy45LTEKKworICAtLS1TRVRVUC5ISU5ULS0tCisgIEAgY3VybAorICBzZGVzYzogImEgY2xpZW50IHRoYXQgZ3Jva3MgVVJMcyIKKyAgbGRlc2M6ICJDdXJsIGlzIGEgdG9vbCBmb3IgdHJhbnNmZXJyaW5nIGZpbGVzIHdpdGggVVJMIHN5bnRheCwKKyAgc3VwcG9ydGluZyBGVFAsIEZUUFMsIEhUVFAsIEhUVFBTLCBURUxORVQsIERJQ1QsIEZJTEUKKyAgYW5kIExEQVAuIEN1cmwgc3VwcG9ydHMgSFRUUFMgY2VydGlmaWNhdGVzLCBIVFRQIFBPU1QsIEhUVFAgUFVULAorICBGVFAgdXBsb2FkaW5nLCBrZXJiZXJvcywgSFRUUCBmb3JtIGJhc2VkIHVwbG9hZCwgcHJveGllcywKKyAgY29va2llcywgdXNlcitwYXNzd29yZCBhdXRoZW50aWNhdGlvbiwgZmlsZSB0cmFuc2ZlciByZXN1bWUsCisgIGh0dHAgcHJveHkgdHVubmVsaW5nIGFuZCBhIGJ1c2xvYWQgb2Ygb3RoZXIgdXNlZnVsIHRyaWNrcy4iCisgIGNhdGVnb3J5OiBXZWIgTGlicworICByZXF1aXJlczogY3lnd2luIG9wZW5zc2wKKworICBAIGN1cmwtZGV2ZWwKKyAgc2Rlc2M6ICIobGliKWNVUkwgaGVhZGVycywgc3RhdGljIGxpYnJhcmllcywgZGV2ZWxvcGVyIGRvY3MgYW5kIHNhbXBsZXMiCisgIGxkZXNjOiAiY3VybC1kZXZlbCBpcyB0aGUgZGV2ZWxvcGVyLW9yaWVudGVkIChub24tcnVuLXRpbWUpIHBhcnRzCisgIG9mIHRoZSBjVVJMIHBhY2thZ2UuIEl0IGluY2x1ZGVzIGhlYWRlciBmaWxlcywgc3RhdGljIGxpYnJhcmllcywKKyAgZXhhbXBsZSBzb3VyY2UgY29kZSBzbmlwcGV0cywgYW5kIHRoZSBsaWJjdXJsIG1hbiBwYWdlcy4iCisgIGNhdGVnb3J5OiBXZWIgTGlicyBEZXZlbAorICByZXF1aXJlczogY3lnd2luIG9wZW5zc2wgY3VybAorCisKK0N5Z3dpbiBwb3J0IG1haW50YWluZWQgYnk6CisgIEtldmluIFJvdGggPGtwcm90aCBAIHVzZXJzIC4gc291cmNlZm9yZ2UgLiBuZXQ+CisgIFF1ZXN0aW9ucyBhYm91dCBjVVJMIHNob3VsZCBiZSBkaXJlY3RlZCB0byBjdXJsLXVzZXJzQGNvb2wuaGF4eC5zZS4KKyAgUXVlc3Rpb25zIGFib3V0IHRoaXMgY3lnd2luIHBhY2thZ2UgZ28gdG8gY3lnd2luQGN5Z3dpbi5jb20uCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvTWFrZWZpbGUuYW0gYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4YjYyNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE2IEBACitFWFRSQV9ESVNUID0gYnVpbGRfdm1zLmNvbSBcCisgY3VybG1zZy5oIFwKKyBjdXJsbXNnLm1zZyBcCisgY3VybG1zZy5zZGwgXAorIGN1cmxtc2dfdm1zLmggXAorIGhwc3NsX2FscGhhLm9wdCBcCisgaHBzc2xfaWE2NC5vcHQgXAorIGhwc3NsX3ZheC5vcHQgXAorIGxkYXAub3B0IFwKKyBvcGVuc3NsX2FscGhhLm9wdCBcCisgb3BlbnNzbF9pYTY0Lm9wdCBcCisgb3BlbnNzbF92YXgub3B0IFwKKyBvcGVuc3NsX3NzbF9hbHBoYS5vcHQgXAorIG9wZW5zc2xfc3NsX2lhNjQub3B0IFwKKyBvcGVuc3NsX3NzbF92YXgub3B0IFwKKyByZWFkbWUKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9NYWtlZmlsZS5pbiBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2I1MGUzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNDM2IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3RvcF9idWlsZGRpciA9IC4uLy4uCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBwYWNrYWdlcy92bXMKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvY3VybC1jb21waWxlcnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1jb25mb3B0cy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWZ1bmN0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW9wZW5zc2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vdmVycmlkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXJlZW50cmFudC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXN5c3RlbS5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94Yy10cmFuc2xpdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC96ejUwLXhjLW92ci5tNCAkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL3NyYy9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRUAKK0JVSUxEX0xJQkhPU1ROQU1FX1RSVUUgPSBAQlVJTERfTElCSE9TVE5BTUVfVFJVRUAKK0JVSUxEX1VOSVRURVNUU19GQUxTRSA9IEBCVUlMRF9VTklUVEVTVFNfRkFMU0VACitCVUlMRF9VTklUVEVTVFNfVFJVRSA9IEBCVUlMRF9VTklUVEVTVFNfVFJVRUAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDT05GSUdVUkVfT1BUSU9OUyA9IEBDT05GSUdVUkVfT1BUSU9OU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NST1NTQ09NUElMSU5HX0ZBTFNFID0gQENST1NTQ09NUElMSU5HX0ZBTFNFQAorQ1JPU1NDT01QSUxJTkdfVFJVRSA9IEBDUk9TU0NPTVBJTElOR19UUlVFQAorQ1VSTERFQlVHX0ZBTFNFID0gQENVUkxERUJVR19GQUxTRUAKK0NVUkxERUJVR19UUlVFID0gQENVUkxERUJVR19UUlVFQAorQ1VSTFZFUlNJT04gPSBAQ1VSTFZFUlNJT05ACitDVVJMX0NBX0JVTkRMRSA9IEBDVVJMX0NBX0JVTkRMRUAKK0NVUkxfQ0ZMQUdfRVhUUkFTID0gQENVUkxfQ0ZMQUdfRVhUUkFTQAorQ1VSTF9ESVNBQkxFX0RJQ1QgPSBAQ1VSTF9ESVNBQkxFX0RJQ1RACitDVVJMX0RJU0FCTEVfRklMRSA9IEBDVVJMX0RJU0FCTEVfRklMRUAKK0NVUkxfRElTQUJMRV9GVFAgPSBAQ1VSTF9ESVNBQkxFX0ZUUEAKK0NVUkxfRElTQUJMRV9HT1BIRVIgPSBAQ1VSTF9ESVNBQkxFX0dPUEhFUkAKK0NVUkxfRElTQUJMRV9IVFRQID0gQENVUkxfRElTQUJMRV9IVFRQQAorQ1VSTF9ESVNBQkxFX0lNQVAgPSBAQ1VSTF9ESVNBQkxFX0lNQVBACitDVVJMX0RJU0FCTEVfTERBUCA9IEBDVVJMX0RJU0FCTEVfTERBUEAKK0NVUkxfRElTQUJMRV9MREFQUyA9IEBDVVJMX0RJU0FCTEVfTERBUFNACitDVVJMX0RJU0FCTEVfUE9QMyA9IEBDVVJMX0RJU0FCTEVfUE9QM0AKK0NVUkxfRElTQUJMRV9QUk9YWSA9IEBDVVJMX0RJU0FCTEVfUFJPWFlACitDVVJMX0RJU0FCTEVfUlRTUCA9IEBDVVJMX0RJU0FCTEVfUlRTUEAKK0NVUkxfRElTQUJMRV9TTVRQID0gQENVUkxfRElTQUJMRV9TTVRQQAorQ1VSTF9ESVNBQkxFX1RFTE5FVCA9IEBDVVJMX0RJU0FCTEVfVEVMTkVUQAorQ1VSTF9ESVNBQkxFX1RGVFAgPSBAQ1VSTF9ESVNBQkxFX1RGVFBACitDVVJMX0xJQlMgPSBAQ1VSTF9MSUJTQAorQ1VSTF9ORVRXT1JLX0xJQlMgPSBAQ1VSTF9ORVRXT1JLX0xJQlNACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU0hBUkVEID0gQEVOQUJMRV9TSEFSRURACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitIQVZFX0dOVVRMU19TUlAgPSBASEFWRV9HTlVUTFNfU1JQQAorSEFWRV9MREFQX1NTTCA9IEBIQVZFX0xEQVBfU1NMQAorSEFWRV9MSUJaID0gQEhBVkVfTElCWkAKK0hBVkVfTElCWl9GQUxTRSA9IEBIQVZFX0xJQlpfRkFMU0VACitIQVZFX0xJQlpfVFJVRSA9IEBIQVZFX0xJQlpfVFJVRUAKK0hBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUID0gQEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUQAorSEFWRV9TU0xFQVlfU1JQID0gQEhBVkVfU1NMRUFZX1NSUEAKK0lETl9FTkFCTEVEID0gQElETl9FTkFCTEVEQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJUFY2X0VOQUJMRUQgPSBASVBWNl9FTkFCTEVEQAorS1JCNF9FTkFCTEVEID0gQEtSQjRfRU5BQkxFREAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQ1VSTF9MSUJTID0gQExJQkNVUkxfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUFOT1BUID0gQE1BTk9QVEAKK01JTVBVUkVfRkFMU0UgPSBATUlNUFVSRV9GQUxTRUAKK01JTVBVUkVfVFJVRSA9IEBNSU1QVVJFX1RSVUVACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitOT19VTkRFRklORURfRkFMU0UgPSBATk9fVU5ERUZJTkVEX0ZBTFNFQAorTk9fVU5ERUZJTkVEX1RSVUUgPSBATk9fVU5ERUZJTkVEX1RSVUVACitOUk9GRiA9IEBOUk9GRkAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEggPSBAUEFUSEAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTCA9IEBQRVJMQAorUEtHQUREX05BTUUgPSBAUEtHQUREX05BTUVACitQS0dBRERfUEtHID0gQFBLR0FERF9QS0dACitQS0dBRERfVkVORE9SID0gQFBLR0FERF9WRU5ET1JACitQS0dDT05GSUcgPSBAUEtHQ09ORklHQAorUkFORE9NX0ZJTEUgPSBAUkFORE9NX0ZJTEVACitSQU5MSUIgPSBAUkFOTElCQAorUkVRVUlSRV9MSUJfREVQUyA9IEBSRVFVSVJFX0xJQl9ERVBTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTT05BTUVfQlVNUF9GQUxTRSA9IEBTT05BTUVfQlVNUF9GQUxTRUAKK1NPTkFNRV9CVU1QX1RSVUUgPSBAU09OQU1FX0JVTVBfVFJVRUAKK1NTTF9FTkFCTEVEID0gQFNTTF9FTkFCTEVEQAorU1RBVElDTElCX0ZBTFNFID0gQFNUQVRJQ0xJQl9GQUxTRUAKK1NUQVRJQ0xJQl9UUlVFID0gQFNUQVRJQ0xJQl9UUlVFQAorU1RSSVAgPSBAU1RSSVBACitTVVBQT1JUX0ZFQVRVUkVTID0gQFNVUFBPUlRfRkVBVFVSRVNACitTVVBQT1JUX1BST1RPQ09MUyA9IEBTVVBQT1JUX1BST1RPQ09MU0AKK1RFU1RfU0VSVkVSX0xJQlMgPSBAVEVTVF9TRVJWRVJfTElCU0AKK1VTRV9BUkVTID0gQFVTRV9BUkVTQAorVVNFX0FYVExTID0gQFVTRV9BWFRMU0AKK1VTRV9DWUFTU0wgPSBAVVNFX0NZQVNTTEAKK1VTRV9FTUJFRERFRF9BUkVTX0ZBTFNFID0gQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQAorVVNFX0VNQkVEREVEX0FSRVNfVFJVRSA9IEBVU0VfRU1CRURERURfQVJFU19UUlVFQAorVVNFX0dOVVRMUyA9IEBVU0VfR05VVExTQAorVVNFX0dOVVRMU19ORVRUTEUgPSBAVVNFX0dOVVRMU19ORVRUTEVACitVU0VfTElCUlRNUCA9IEBVU0VfTElCUlRNUEAKK1VTRV9MSUJTU0gyID0gQFVTRV9MSUJTU0gyQAorVVNFX01BTlVBTF9GQUxTRSA9IEBVU0VfTUFOVUFMX0ZBTFNFQAorVVNFX01BTlVBTF9UUlVFID0gQFVTRV9NQU5VQUxfVFJVRUAKK1VTRV9OU1MgPSBAVVNFX05TU0AKK1VTRV9PUEVOTERBUCA9IEBVU0VfT1BFTkxEQVBACitVU0VfUE9MQVJTU0wgPSBAVVNFX1BPTEFSU1NMQAorVVNFX1NTTEVBWSA9IEBVU0VfU1NMRUFZQAorVVNFX1dJTkRPV1NfU1NQSSA9IEBVU0VfV0lORE9XU19TU1BJQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVkVSU0lPTkVEX0ZMQVZPVVIgPSBAVkVSU0lPTkVEX0ZMQVZPVVJACitWRVJTSU9ORURfU1lNQk9MU19GQUxTRSA9IEBWRVJTSU9ORURfU1lNQk9MU19GQUxTRUAKK1ZFUlNJT05FRF9TWU1CT0xTX1RSVUUgPSBAVkVSU0lPTkVEX1NZTUJPTFNfVFJVRUAKK1ZFUlNJT05OVU0gPSBAVkVSU0lPTk5VTUAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpYmV4dCA9IEBsaWJleHRACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACitFWFRSQV9ESVNUID0gYnVpbGRfdm1zLmNvbSBcCisgY3VybG1zZy5oIFwKKyBjdXJsbXNnLm1zZyBcCisgY3VybG1zZy5zZGwgXAorIGN1cmxtc2dfdm1zLmggXAorIGhwc3NsX2FscGhhLm9wdCBcCisgaHBzc2xfaWE2NC5vcHQgXAorIGhwc3NsX3ZheC5vcHQgXAorIGxkYXAub3B0IFwKKyBvcGVuc3NsX2FscGhhLm9wdCBcCisgb3BlbnNzbF9pYTY0Lm9wdCBcCisgb3BlbnNzbF92YXgub3B0IFwKKyBvcGVuc3NsX3NzbF9hbHBoYS5vcHQgXAorIG9wZW5zc2xfc3NsX2lhNjQub3B0IFwKKyBvcGVuc3NsX3NzbF92YXgub3B0IFwKKyByZWFkbWUKKworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHBhY2thZ2VzL3Ztcy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgcGFja2FnZXMvdm1zL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK2Rpc3RjbGVhbi1saWJ0b29sOgorCS1ybSAtZiBsaWJ0b29sCit1bmluc3RhbGwtaW5mby1hbToKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbAorCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKKwl1bmluc3RhbGwtaW5mby1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvYnVpbGRfdm1zLmNvbSBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9idWlsZF92bXMuY29tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NmU3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvYnVpbGRfdm1zLmNvbQpAQCAtMCwwICsxLDU4MyBAQAorJCEgQlVJTERfVk1TLkNPTQorJCEKKyQhIEkndmUgdGFrZW4gdGhlIG9yaWdpbmFsIGJ1aWxkX3Ztcy5jb20sIHN1cHBsaWVkIGJ5IE5pY28gQmFnZ3VzLCBpZgorJCEgbWVtb3J5IHNlcnZlcyBtZSBjb3JyZWN0bHksIGFuZCBtYWRlIHNvbWUgbW9kaWZpY2F0aW9ucy4KKyQhCiskISBTU0wgc3VwcG9ydCBpcyBjb250cm9sbGVkIGJ5IGxvZ2ljYWwgbmFtZXMuICBJZiBTU0wkSU5DTFVERSBpcworJCEgZGVmaW5lZCwgdGhlbiBpdCBpcyBhc3N1bWVkIHRoYXQgSFAncyBTU0wgcHJvZHVjdCBoYXMgYmVlbiBpbnN0YWxsZWQuCiskISBJZiBPUEVOU1NMIGlzIGRlZmluZWQsIGJ1dCBTU0wkSU5DTFVERSBpcyBub3QsIHRoZW4gT3BlblNTTCB3aWxsIGJlCiskISB1c2VkLiAgSWYgbmVpdGhlciBsb2dpY2FsIG5hbWUgaXMgZGVmaW5lZCwgdGhlbiBTU0wgc3VwcG9ydCB3aWxsIG5vdAorJCEgYmUgY29tcGlsZWQvbGlua2VkIGluLiAgQ29tbWFuZC1saW5lIG9wdGlvbnMgTk9IUFNTTCBhbmQgTk9TU0wgY2FuIGJlCiskISBzcGVjaWZpZWQgdG8gb3ZlcnJpZGUgdGhlIGF1dG9tYXRpYyBTU0wgc2VsZWN0aW9uLgorJCEKKyQhIENvbW1hbmQtbGluZSBPcHRpb25zOgorJCEKKyQhICAgIENMRUFOICAgICBEZWxldGUgcHJvZHVjdCBmaWxlcyBmb3IgdGhpcyBob3N0IGFyY2hpdGVjdHVyZS4gIChObworJCEgICAgICAgICAgICAgIGJ1aWxkIGRvbmUuKQorJCEgICAgQ0xFQU5fQUxMIERlbGV0ZSBwcm9kdWN0IGZpbGVzIGZvciBhbGwgaG9zdCBhcmNoaXRlY3R1cmVzLiAgKE5vCiskISAgICAgICAgICAgICAgYnVpbGQgZG9uZS4pCiskIQorJCEgICAgNjQgICAgICAgIENvbXBpbGUgd2l0aCA2NC1iaXQgcG9pbnRlcnMuCiskISAgICBDQ1FVQUw9eCAgQWRkICJ4IiB0byB0aGUgQyBjb21waWxlciBxdWFsaWZpZXJzLgorJCEgICAgREVCVUcgICAgIENvbXBpbGUgYW5kIGxpbmsgd2l0aCBkZWJ1Zy4KKyQhICAgIElFRUUgICAgICBVc2UgSUVFRSBmbG9hdGluZyBwb2ludC4gIChBbHBoYS4pCiskISAgICBMQVJHRSAgICAgRW5hYmxlIGxhcmdlLWZpbGUgc3VwcG9ydC4gIChOb24tVkFYLCBWTVMgPj0gVjcuMi4pCiskISAgICBMREFQICAgICAgRW5hYmxlIExEQVAgc3VwcG9ydC4KKyQhICAgIExJU1QgICAgICBDcmVhdGUgQyBjb21waWxlciBsaXN0aW5ncyBhbmQgbGlua2VyIG1hcHMuCiskISAgICBOT0hQU1NMICAgRG9uJ3QgdXNlIEhQIFNTTCwgZXZlbiBpZiBhdmFpbGFibGUuCiskISAgICBOT1NTTCAgICAgRG9uJ3QgdXNlIGFueSBTU0wsIGV2ZW4gaWYgYXZhaWxhYmxlLgorJCEgICAgT1NTTE9MQiAgIFVzZSBPcGVuU1NMIG9iamVjdCBsaWJyYXJpZXMgKC5PTEIpLCBldmVuIGlmIHNoYXJlZAorJCEgICAgICAgICAgICAgIGltYWdlcyAoLkVYRSkgYXJlIGF2YWlsYWJsZS4KKyQhCiskISBEQ0wgU3ltYm9sczoKKyQhCiskISAgICBDVVJMX0NDREVGUz0iY19tYWNyb18xPXZhbHVlMSBbLCBjX21hY3JvXzI9dmFsdWUyIFsuLi5dXSIKKyQhICAgICAgICAgICAgICBDb21waWxlIHdpdGggdGhlc2UgYWRkaXRpb25hbCBDIG1hY3JvcyBkZWZpbmVkLgorJCEKKyQhIFJldmlzaW9uczoKKyQhCiskISAgMi1ERUMtMjAwMywgTVNLLCB0aGUgIm9yaWdpbmFsIiB2ZXJzaW9uLgorJCEgICAgICAgICAgICAgICAgICAgSXQgd29ya3MgZm9yIG1lLiAgWW91ciBtaWxlYWdlIG1heSB2YXJ5LgorJCEgMTMtSkFOLTIwMDQsIE1TSywgbW92ZWQgdGhpcyBwcm9jZWR1cmUgdG8gdGhlIFsucGFja2FnZXMudm1zXSBkaXJlY3RvcnkKKyQhICAgICAgICAgICAgICAgICAgIGFuZCB1cGRhdGVkIGl0IHRvIGRvIGhhcmR3YXJlIGRlcGVuZGVudCBidWlsZHMuCiskISAyOS1KQU4tMjAwNCwgTVNLLCBtb3ZlZCBsb2dpY2FsIGRlZmluZXMgaW50byBkZWZpbmVzLmNvbQorJCEgIDYtRkVCLTIwMDQsIE1TSywgcHV0IGluIHZhcmlvdXMgU1NMIHN1cHBvcnQgYml0cworJCEgIDktTUFSLTIwMDQsIE1TSywgdGhlIGNvbmZpZy12bXMuaCogZmlsZXMgYXJlIG5vdyBjb3BpZWQgdG8gdGhlIGxpYiBhbmQKKyQhICAgICAgICAgICAgICAgICAgIHNyYyBkaXJlY3RvcmllcyBhcyBjdXJsX2NvbmZpZy5oLgorJCEgMTUtTUFSLTIwMDQsIE1TSywgQWxsIG9mIHRoZSBjdXJsbXNnKi4qIGZpbGVzIGhhdmUgYWxzbyBiZWVuIG1vdmVkIHRvCiskISAgICAgICAgICAgICAgICAgICB0aGlzIGJ1aWxkIGRpcmVjdG9yeS4gIFRoZXkgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIHNyYworJCEgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGJlZm9yZSBidWlsZC4gIFRoZSAubXNnIGZpbGUgd2lsbCBiZSBjb21waWxlZAorJCEgICAgICAgICAgICAgICAgICAgdG8gZ2V0IHRoZSAub2JqIGZvciBtZXNzYWdlcywgYnV0IHRoZSAuaCBhbmQgLnNkbCBmaWxlcworJCEgICAgICAgICAgICAgICAgICAgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgc2luY2UgdGhleSBwYXJ0bHkgcmVseSBvbgorJCEgICAgICAgICAgICAgICAgICAgdGhlIGZyZWV3YXJlIFNETCB0b29sLgorJCEgIDgtRkVCLTIwMDUsIE1TSywgbWVyZ2VkIHRoZSB0d28gY29uZmlnLXZtcy5oKiBmaWxlcyBpbnRvIG9uZSB0aGF0IHVzZXMKKyQhICAgICAgICAgICAgICAgICAgIFVTRV9TU0xFQVkgdG8gZGVmaW5lIGlmIHRoZSB0YXJnZXQgaGFzIFNTTCBzdXBwb3J0IGJ1aWx0CiskISAgICAgICAgICAgICAgICAgICBpbi4gIENoYW5nZWQgdGhlIGNjL2RlZmluZSBwYXJhbWV0ZXIgYWNjb3JkaW5nbHkuCiskISAxMS1GRUItMjAwNSwgTVNLLCBJZiBbLS0uTElCXUFNSUdBT1MuQyBhbmQgTldMSUIuQyBhcmUgdGhlcmUsIHJlbmFtZSB0aGVtCiskISAyMy1NQVItMjAwNSwgTVNLLCByZWxvY2F0ZWQgY2NfcXVhbCBkZWZpbmUgc28gdGhhdCBERUJVRyBvcHRpb24gd291bGQgd29yaworJCEgMjUtQVBSLTIwMDcsIFNUTCwgYWxsb3cgY29tcGlsYXRpb24gaW4gNjQtYml0IG1vZGUuCiskISAxMy1ERUMtMjAwOS4gU01TLCBDaGFuZ2VkIHRvIHNraXAgdW53YW50ZWQgc291cmNlIGZpbGVzIHdpdGhvdXQKKyQhICAgICAgICAgICAgICAgICAgIHJlbmFtaW5nIHRoZSBvcmlnaW5hbCBmaWxlcy4KKyQhICAgICAgICAgICAgICAgICAgIEVsaW1pbmF0ZWQgbmVlZGxlc3MsIHBlcnNpc3RlbnQgbG9naWNhbCBuYW1lcy4KKyQhICAgICAgICAgICAgICAgICAgIEFkZGVkIENVUkxfQ0NERUZTIERDTCBzeW1ib2wgZm9yIHVzZXItc3BlY2lmaWVkIEMKKyQhICAgICAgICAgICAgICAgICAgIG1hY3JvIGRlZmluaXRpb25zLgorJCEgICAgICAgICAgICAgICAgICAgQWRkZWQgQ0xFQU4gYW5kIENMRUFOX0FMTCBvcHRpb25zLgorJCEgICAgICAgICAgICAgICAgICAgQWRkZWQgQ0NRVUFMIG9wdGlvbiBmb3IgdXNlci1zcGVjaWZpZWQgQyBjb21waWxlcgorJCEgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVycy4KKyQhICAgICAgICAgICAgICAgICAgIEFkZGVkIElFRUUgb3B0aW9uIGZvciBJRUVFIGZsb2F0aW5nIHBvaW50IChBbHBoYSkuCiskISAgICAgICAgICAgICAgICAgICBBZGRlZCBMQVJHRSBvcHRpb24gZm9yIGxhcmdlLWZpbGUgc3VwcG9ydC4KKyQhICAgICAgICAgICAgICAgICAgIEFkZGVkIE9TU0xPTEIgb3B0aW9uLCBhbmQgc3VwcG9ydCBmb3IgT3BlblNTTAorJCEgICAgICAgICAgICAgICAgICAgc2hhcmVkIGltYWdlcy4KKyQhICAgICAgICAgICAgICAgICAgIENoYW5nZWQgdG8gcHV0IGxpc3RpbmcgYW5kIG1hcCBmaWxlcyBpbnRvIGxpc2RpcjouCiskISAgICAgICAgICAgICAgICAgICBDaGFuZ2VkIHRvIGF2b2lkIGNhc2UgY29uZnVzaW9uIG9uIE9EUzUgZGlza3MuCiskISAgICAgICAgICAgICAgICAgICBBZGRlZCBtb3JlIGRlZmF1bHQgZGV2OltkaXJdIHNhdmUrcmVzdG9yZS4KKyQhICAgICAgICAgICAgICAgICAgIE1vdmVkIHJlbWFpbmluZyAiZGVmaW5lcy5jb20iIGNvZGUgKGJhY2spIGludG8KKyQhICAgICAgICAgICAgICAgICAgIGhlcmUsIGVsaW1pbmF0aW5nIHRoZSBoYXJkLWNvZGVkIE9wZW5TU0wgbm9uc2Vuc2UuCiskISAgICAgICAgICAgICAgICAgICBDaGFuZ2VkIHRvIHVzZSBGJEdFVFNZSSggIkFSQ0hfTkFNRSIpIChvcgorJCEgICAgICAgICAgICAgICAgICAgZXF1aXZhbGVudCkgdG8gbmFtZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcHJvZHVjdAorJCEgICAgICAgICAgICAgICAgICAgZmlsZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnksIGFuZCB0byBjcmVhdGUgdGhlCiskISAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaWYgbmVlZGVkIChvYnZpYXRpbmcgaW5jbHVzaW9uIG9mIHRoZXNlCiskISAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBhbmQgZHVtbXkgZmlsZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbgorJCEgICAgICAgICAgICAgICAgICAga2l0KS4KKyQhICAgICAgICAgICAgICAgICAgIENoYW5nZWQgdGhlICJjb21waWxlIiBzdWJyb3V0aW5lIHRvIGJyZWFrIHRoZSBDQworJCEgICAgICAgICAgICAgICAgICAgY29tbWFuZCBhY3Jvc3MgbXVsdGlwbGUgbGluZXMgdG8gYXZvaWQgRENMCiskISAgICAgICAgICAgICAgICAgICBsaW5lLXRvby1sb25nIHByb2JsZW1zLgorJCEgICAgICAgICAgICAgICAgICAgQ2hhbmdlZCAidm9fYyIgbWVzc2FnZXMgdG8gc2hvdyB0aGUgQ0MgcXVhbGlmaWVycworJCEgICAgICAgICAgICAgICAgICAgb25jZSwgbm90IHdpdGggZXZlcnkgY29tcGlsZSBjb21tYW5kLgorJCEKKyQhCiskISBTYXZlIHRoZSBvcmlnaW5hbCBkZWZhdWx0IGRldjpbZGlyXSwgYW5kIGFycmFuZ2UgZm9yIGl0cyByZXN0b3JhdGlvbgorJCEgYXQgZXhpdC4KKyQhCiskIGN1cmwgPSAiIgorJCBvcmlnX2RlZiA9IGYkZW52aXJvbm1lbnQoICJERUZBVUxUIikKKyQgb24gZXJyb3IgdGhlbiBnb3RvIENvbW1vbl9FeGl0CiskIG9uIGNvbnRyb2xfeSB0aGVuIGdvdG8gQ29tbW9uX0V4aXQKKyQhCiskIGN0cmxfeSAgPSAxNTU2CiskIHByb2MgPSBmJGVudmlyb25tZW50KCAiUFJPQ0VEVVJFIikKKyQgcHJvY19kZXZfZGlyID0gLQorICAgZiRwYXJzZSggcHJvYywgLCAsICJERVZJQ0UiKSsgZiRwYXJzZSggcHJvYywgLCAsICJESVJFQ1RPUlkiKQorJCEKKyQhIFZlcmJvc2Ugb3V0cHV0IG1lc3NhZ2Ugc3R1ZmYuICBEZWZpbmUgc3ltYm9sIHRvICJ3cml0ZSBzeXMkb3V0cHV0IiBvciAiISIuCiskISB2b19jIC0gdmVyYm9zZSBvdXRwdXQgZm9yIGNvbXBpbGUKKyQhIHZvX2wgLSBsaW5rCiskISB2b19vIC0gb2JqZWN0IGNoZWNrCiskIQorJCB2b19jID0gIndyaXRlIHN5cyRvdXRwdXQiCiskIHZvX2wgPSAid3JpdGUgc3lzJG91dHB1dCIKKyQgdm9fbyA9ICIhIgorJCEKKyQhIERldGVybWluZSB0aGUgbWFpbiBkaXN0cmlidXRpb24gZGlyZWN0b3J5ICgiWy0tXSIpIGluIGFuCiskISBPRFM1LXRvbGVyYW50IChjYXNlLWluc2Vuc2l0aXZlKSB3YXkuICAoV2UgZG8gYXNzdW1lIHRoYXQgdGhlIG9ubHkKKyQhICJdIiBpcyB0aGUgb25lIGF0IHRoZSBlbmQuKQorJCEKKyQgc2V0IGRlZmF1bHQgJ3Byb2NfZGV2X2RpcicKKyQgc2V0IGRlZmF1bHQgWy0tXQorJCB0b3BfZGV2X2RpciA9IGYkZW52aXJvbm1lbnQoICJERUZBVUxUIiktICJdIgorJCEKKyQhIERlZmluZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHByb2R1Y3QgZmlsZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKKyQhIG5hbWUocykuCiskIQorJCBpZiAoZiRnZXRzeWkoICJIV19NT0RFTCIpIC5sdC4gMTAyNCkKKyQgdGhlbgorJCAgICBhcmNoX25hbWUgPSAiVkFYIgorJCBlbHNlCiskICAgIGFyY2hfbmFtZSA9ICIiCiskICAgIGFyY2hfbmFtZSA9IGFyY2hfbmFtZSsgZiRlZGl0KCBmJGdldHN5aSggIkFSQ0hfTkFNRSIpLCAiVVBDQVNFIikKKyQgICAgaWYgKGFyY2hfbmFtZSAuZXFzLiAiIikgdGhlbiBhcmNoX25hbWUgPSAiVU5LIgorJCBlbmRpZgorJCEKKyQgZXhlZGlyID0gcHJvY19kZXZfZGlyLSAiXSIrICIuJydhcmNoX25hbWUnXSIKKyQgbGlzZGlyID0gZXhlZGlyCiskIG9iamRpciA9IGV4ZWRpcgorJCEKKyQhIEludGVycHJldCBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKyQhCiskIGhwc3NsID0gMAorJCBsZGFwID0gMAorJCBsaXN0ID0gMAorJCBub2hwc3NsID0gMAorJCBub3NzbCA9IDAKKyQgb3BlbnNzbCA9IDAKKyQgb3NzbG9sYiA9IDAKKyQgY2NfcXVhbDEgPSAiIgorJCBjY19xdWFsMiA9ICIiCiskIGNjX2RlZnMgPSAiSEFWRV9DT05GSUdfSD0xIgorJCBpZiAoZiR0eXBlKCBDVVJMX0NDREVGUykgLm5lcy4gIiIpCiskIHRoZW4KKyQgICAgQ1VSTF9DQ0RFRlMgPSBmJGVkaXQoIENVUkxfQ0NERUZTLCAiVFJJTSIpCiskICAgIGNjX2RlZnMgPSBjY19kZWZzKyAiLCAiKyBDVVJMX0NDREVGUworJCBlbmRpZgorJCBsaW5rX3F1YWwgPSAiIgorJCBtc2dfcXVhbCA9ICIvb2JqZWN0ID0gJydvYmpkaXInIgorJCBzc2xfb3B0ID0gIiIKKyQhCiskIGFyZyA9IDEKKyRhcmdfbG9vcDoKKyQgICAgcCA9ICJwJydhcmcnIgorJCAgICBhcmdfdmFsID0gJ3AnCiskICAgIGlmIChhcmdfdmFsIC5lcXMuICIiKSB0aGVuIGdvdG8gYXJnX2xvb3Bfb3V0CiskICAgIGFyZ192YWwgPSBmJGVkaXQoIGFyZ192YWwsICJ1cGNhc2UiKQorJCEKKyQgICAgaWYgKGFyZ192YWwgLmVxcy4gIkNMRUFOIikKKyQgICAgdGhlbgorJCAgICAgICBwcm9kcyA9ICInJ2V4ZWRpcicqLio7KiIKKyQgICAgICAgaWYgKGYkc2VhcmNoKCBwcm9kcykgLm5lcy4gIiIpIHRoZW4gZGVsZXRlIC9sb2cgJ3Byb2RzJworJCAgICAgICBwcm9kcyA9IHByb2NfZGV2X2RpcisgYXJjaF9uYW1lKyAiLkRJUjsxIgorJCAgICAgICBpZiAoZiRzZWFyY2goIHByb2RzKSAubmVzLiAiIikgdGhlbiBkZWxldGUgL2xvZyAncHJvZHMnCiskICAgICAgIGdvdG8gQ29tbW9uX0V4aXQKKyQgICAgZW5kaWYKKyQhCiskICAgIGlmIChhcmdfdmFsIC5lcXMuICJDTEVBTl9BTEwiKQorJCAgICB0aGVuCiskICAgICAgIHByb2RzID0gcHJvY19kZXZfZGlyLSAiXSIrICIuQUxQSEFdKi4qOyoiCiskICAgICAgIGlmIChmJHNlYXJjaCggcHJvZHMpIC5uZXMuICIiKSB0aGVuIGRlbGV0ZSAvbG9nICdwcm9kcycKKyQgICAgICAgcHJvZHMgPSBwcm9jX2Rldl9kaXIrICJBTFBIQSIrICIuRElSOzEiCiskICAgICAgIGlmIChmJHNlYXJjaCggcHJvZHMpIC5uZXMuICIiKSB0aGVuIGRlbGV0ZSAvbG9nICdwcm9kcycKKyQgICAgICAgcHJvZHMgPSBwcm9jX2Rldl9kaXItICJdIisgIi5JQTY0XSouKjsqIgorJCAgICAgICBpZiAoZiRzZWFyY2goIHByb2RzKSAubmVzLiAiIikgdGhlbiBkZWxldGUgL2xvZyAncHJvZHMnCiskICAgICAgIHByb2RzID0gcHJvY19kZXZfZGlyKyAiSUE2NCIrICIuRElSOzEiCiskICAgICAgIGlmIChmJHNlYXJjaCggcHJvZHMpIC5uZXMuICIiKSB0aGVuIGRlbGV0ZSAvbG9nICdwcm9kcycKKyQgICAgICAgcHJvZHMgPSBwcm9jX2Rldl9kaXItICJdIisgIi5WQVhdKi4qOyoiCiskICAgICAgIGlmIChmJHNlYXJjaCggcHJvZHMpIC5uZXMuICIiKSB0aGVuIGRlbGV0ZSAvbG9nICdwcm9kcycKKyQgICAgICAgcHJvZHMgPSBwcm9jX2Rldl9kaXIrICJWQVgiKyAiLkRJUjsxIgorJCAgICAgICBpZiAoZiRzZWFyY2goIHByb2RzKSAubmVzLiAiIikgdGhlbiBkZWxldGUgL2xvZyAncHJvZHMnCiskICAgICAgIGdvdG8gQ29tbW9uX0V4aXQKKyQgICAgZW5kaWYKKyQhCiskICAgIGlmIChhcmdfdmFsIC5lcXMuICI2NCIpCiskICAgIHRoZW4KKyQgICAgICAgY2NfcXVhbDEgPSBjY19xdWFsMSsgIiAvUE9JTlRFUiA9IDY0IgorJCAgICAgICBnb3RvIGFyZ19sb29wX2VuZAorJCAgICBlbmRpZgorJCEKKyQgICAgaWYgKGYkZXh0cmFjdCggMCwgNiwgYXJnX3ZhbCkgLmVxcy4gIkNDUVVBTCIpCiskICAgIHRoZW4KKyQgICAgICAgb3B0cyA9IGYkZWRpdCggYXJnX3ZhbCwgIkNPTExBUFNFIikKKyQgICAgICAgZXEgPSBmJGxvY2F0ZSggIj0iLCBvcHRzKQorJCAgICAgICBjY19xdWFsMiA9IGYkZXh0cmFjdCggKGVxKyAxKSwgMTAwMCwgb3B0cykKKyQgICAgICAgZ290byBhcmdfbG9vcF9lbmQKKyQgICAgZW5kaWYKKyQhCiskICAgIGlmIChhcmdfdmFsIC5lcXMuICJERUJVRyIpCiskICAgIHRoZW4KKyQgICAgICAgY2NfcXVhbDEgPSBjY19xdWFsMSsgIiAvZGVidWcgL25vb3B0aW1pemUiCiskICAgICAgIGxpbmtfcXVhbCA9IGxpbmtfcXVhbCsgIiAvZGVidWciCiskICAgICAgIGdvdG8gYXJnX2xvb3BfZW5kCiskICAgIGVuZGlmCiskIQorJCAgICBpZiAoYXJnX3ZhbCAuZXFzLiAiSUVFRSIpCiskICAgIHRoZW4KKyQgICAgICAgY2NfcXVhbDEgPSBjY19xdWFsMSsgIiAvRkxPQVQgPSBJRUVFX0ZMT0FUIgorJCAgICAgICBnb3RvIGFyZ19sb29wX2VuZAorJCAgICBlbmRpZgorJCEKKyQgICAgaWYgKGFyZ192YWwgLmVxcy4gIkxBUkdFIikKKyQgICAgdGhlbgorJCAgICAgICBpZiAoYXJjaF9uYW1lIC5lcXMuICJWQVgiKQorJCAgICAgICB0aGVuCiskICAgICAgICAgIHdyaXRlIHN5cyRvdXRwdXQgIiIiTEFSR0UiIiBpcyBpZ25vcmVkIG9uIFZBWC4iCiskICAgICAgIGVsc2UKKyQgICAgICAgICAgY2NfZGVmcyA9IGNjX2RlZnMrICIsIF9MQVJHRUZJTEU9MSIKKyQgICAgICAgZW5kaWYKKyQgICAgICAgZ290byBhcmdfbG9vcF9lbmQKKyQgICAgZW5kaWYKKyQhCiskICAgIGlmIChhcmdfdmFsIC5lcXMuICJMREFQIikKKyQgICAgdGhlbgorJCAgICAgICBsZGFwID0gMQorJCAgICAgICBnb3RvIGFyZ19sb29wX2VuZAorJCAgICBlbmRpZgorJCEKKyQgICAgaWYgKGYkZXh0cmFjdCggMCwgNCwgYXJnX3ZhbCkgLmVxcy4gIkxJU1QiKQorJCAgICB0aGVuCiskICAgICAgIGxpc3QgPSAxCiskICAgICAgIGNjX3F1YWwxID0gY2NfcXVhbDErICIgL2xpc3QgPSAnJ2xpc2RpcicgL3Nob3cgPSAoYWxsLCBub21lc3NhZ2VzKSIKKyQgICAgICAgbGlua19xdWFsID0gbGlua19xdWFsKyAiIC9tYXAgPSAnJ2xpc2RpciciCiskICAgICAgIG1zZ19xdWFsID0gbXNnX3F1YWwrICIgL2xpc3QgPSAnJ2xpc2RpciciCiskICAgICAgIGdvdG8gYXJnX2xvb3BfZW5kCiskICAgIGVuZGlmCiskIQorJCAgICBpZiAoYXJnX3ZhbCAuZXFzLiAiTk9IUFNTTCIpCiskICAgIHRoZW4KKyQgICAgICAgbm9ocHNzbCA9IDEKKyQgICAgICAgZ290byBhcmdfbG9vcF9lbmQKKyQgICAgZW5kaWYKKyQhCiskICAgIGlmIChhcmdfdmFsIC5lcXMuICJOT1NTTCIpCiskICAgIHRoZW4KKyQgICAgICAgbm9zc2wgPSAxCiskICAgICAgIGdvdG8gYXJnX2xvb3BfZW5kCiskICAgIGVuZGlmCiskIQorJCAgICBpZiAoYXJnX3ZhbCAuZXFzLiAiT1NTTE9MQiIpCiskICAgIHRoZW4KKyQgICAgICAgb3NzbG9sYiA9IDEKKyQgICAgICAgZ290byBhcmdfbG9vcF9lbmQKKyQgICAgZW5kaWYKKyQhCiskICAgIHdyaXRlIHN5cyRvdXRwdXQgIlVucmVjb2duaXplZCBjb21tYW5kLWxpbmUgb3B0aW9uOiAnJ2FyZ192YWwnIgorJCAgICBnb3RvIENvbW1vbl9FeGl0CiskIQorJGFyZ19sb29wX2VuZDoKKyQgYXJnID0gYXJnKyAxCiskIGdvdG8gYXJnX2xvb3AKKyRhcmdfbG9vcF9vdXQ6CiskIQorJCEgQ0MgL0xJU1QsIExJTksgL01BUCwgYW5kIE1FU1NBR0UgL0xJU1QgYXJlIGRlZmF1bHRzIGluIGJhdGNoIG1vZGUsCiskISBzbyBiZSBleHBsaWNpdCB3aGVuIHRoZXkncmUgbm90IGRlc2lyZWQuCiskIQorJCBpZiAobGlzdCAuZXEuIDApCiskIHRoZW4KKyQgICAgY2NfcXVhbDEgPSBjY19xdWFsMSsgIiAvbm9saXN0IgorJCAgICBsaW5rX3F1YWwgPSBsaW5rX3F1YWwrICIgL25vbWFwIgorJCAgICBtc2dfcXVhbCA9IG1zZ19xdWFsKyAiIC9ub2xpc3QiCiskIGVuZGlmCiskIQorJCEgQ3JlYXRlIHByb2R1Y3QgZGlyZWN0b3J5LCBpZiBuZWVkZWQuCiskIQorJCBpZiAoZiRzZWFyY2goIHByb2NfZGV2X2RpcisgYXJjaF9uYW1lKyAiLkRJUjsxIikgLmVxcy4gIiIpCiskIHRoZW4KKyQgICAgY3JlYXRlIC9kaXJlY3RvcnkgJ2V4ZWRpcicKKyQgZW5kaWYKKyQhCiskISBEZXRlY3QgYXZhaWxhYmxlIChidXQgbm90IHByb2hpYml0ZWQpIFNTTCBzb2Z0d2FyZS4KKyQhCiskIGlmICgubm90LiBub3NzbCkKKyQgdGhlbgorJCAgICBpZiAoZiR0cm5sbm0oICJPUEVOU1NMIikgLm5lcy4gIiIpCiskICAgIHRoZW4KKyQgICAgICAgY2NfZGVmcyA9IGNjX2RlZnMrICIsIFVTRV9TU0xFQVk9MSIKKyQgICAgICAgaWYgKChmJHRybmxubSggIlNTTCRJTkNMVURFIikgLm5lcy4gIiIpIC5hbmQuICgubm90LiBub2hwc3NsKSkKKyQgICAgICAgdGhlbgorJCEgICAgICAgICBVc2UgSFAgU1NMLgorJCAgICAgICAgICBocHNzbCA9IDEKKyQgICAgICAgICAgc3NsX29wdCA9ICIsICcncHJvY19kZXZfZGlyJ2hwc3NsXyIrIC0KKyAgICAgICAgICAgIGYkZ2V0c3lpKCJBUkNIX05BTUUiKSsgIi5vcHQgL29wdGlvbnMiCiskICAgICAgIGVsc2UKKyQhICAgICAgICAgVXNlIE9wZW5TU0wuICBBc3N1bWUgb2JqZWN0IGxpYnJhcmllcywgdW5sZXNzIHNoYXJlZCBpbWFnZXMKKyQhICAgICAgICAgYXJlIGZvdW5kIChhbmQgbm90IHByb2hpYml0ZWQpLgorJCAgICAgICAgICBvcGVuc3NsID0gMQorJCAgICAgICAgICBzc2xfb3B0ID0gIiwgc3NsbGliOmxpYnNzbC5vbGIgL2xpYnJhcnkiKyAtCisgICAgICAgICAgICAiLCBzc2xsaWI6bGliY3J5cHRvLm9sYiAvbGlicmFyeSIKKyQgICAgICAgICAgaWYgKG9zc2xvbGIgLmVxLiAwKQorJCAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgIGlmICgoZiRzZWFyY2goICJzc2xsaWI6c3NsX2xpYmNyeXB0by5leGUiKSAubmVzLiAiIikgLmFuZC4gLQorICAgICAgICAgICAgICAgKGYkc2VhcmNoKCAic3NsbGliOnNzbF9saWJzc2wuZXhlIikgLm5lcy4gIiIpKQorJCAgICAgICAgICAgICB0aGVuCiskISAgICAgICAgICAgICAgIE9wZW5TU0wgc2hhcmVkIGltYWdlcyB3aXRoICJTU0xfeHh4LkVYRSBuYW1lcy4KKyQgICAgICAgICAgICAgICAgb3BlbnNzbCA9IDIKKyQgICAgICAgICAgICAgICAgc3NsX29wdCA9ICIsICcncHJvY19kZXZfZGlyJ29wZW5zc2xfc3NsXyIrIC0KKyAgICAgICAgICAgICAgICAgIGYkZ2V0c3lpKCJBUkNIX05BTUUiKSsgIi5vcHQgL29wdGlvbnMiCiskICAgICAgICAgICAgIGVsc2UKKyQgICAgICAgICAgICAgICAgaWYgKChmJHNlYXJjaCggInNzbGxpYjpsaWJjcnlwdG8uZXhlIikgLm5lcy4gIiIpIC5hbmQuIC0KKyAgICAgICAgICAgICAgICAgIChmJHNlYXJjaCggInNzbGxpYjpsaWJzc2wuZXhlIikgLm5lcy4gIiIpKQorJCAgICAgICAgICAgICAgICB0aGVuCiskISAgICAgICAgICAgICAgICAgIE9wZW5TU0wgc2hhcmVkIGltYWdlcyB3aXRoICJ4eHguRVhFIG5hbWVzLgorJCAgICAgICAgICAgICAgICAgICBvcGVuc3NsID0gMworJCAgICAgICAgICAgICAgICAgICBzc2xfb3B0ID0gIiwgJydwcm9jX2Rldl9kaXInb3BlbnNzbF8iKyAtCisgICAgICAgICAgICAgICAgICAgICBmJGdldHN5aSgiQVJDSF9OQU1FIikrICIub3B0IC9vcHRpb25zIgorJCAgICAgICAgICAgICAgICBlbmRpZgorJCAgICAgICAgICAgICBlbmRpZgorJCAgICAgICAgICBlbmRpZgorJCAgICAgICBlbmRpZgorJCAgICBlbmRpZgorJCBlbmRpZgorJCEKKyQhIExEQVAuCiskIQorJCBpZiAobGRhcCAuZXEuIDApCiskIHRoZW4KKyQgICAgY2NfZGVmcyA9IGNjX2RlZnMrICIsIENVUkxfRElTQUJMRV9MREFQPTEiCiskIGVuZGlmCiskIQorJCEgRm9ybSBDQyBxdWFsaWZpZXJzLgorJCEKKyQgY2NfZGVmcyA9ICIvZGVmaW5lID0gKCcnY2NfZGVmcycpIgorJCBjY19xdWFsMiA9IGNjX3F1YWwyKyAiIC9vYmplY3QgPSAnJ29iamRpciciKyAtCisgICAiIC9pbmNsdWRlID0gKFstLmxpYl0sIFstLnNyY10sIisgLQorICAgIiBbLS5wYWNrYWdlcy52bXNdLCBbLS5wYWNrYWdlcy52bXMuJydhcmNoX25hbWUnXSkiCiskIQorJCAndm9fYycgIkNDIG9wdHM6IiwgLQorICAiICcnY2NfZGVmcyciLCAtCisgICIgJydjY19xdWFsMSciLCAtCisgICIgJydjY19xdWFsMiciCiskIQorJCEgSW5mb3JtIHRoZSB2aWN0aW0gb2Ygb3VyIHBsYW5zLgorJCEKKyQgaWYgKGhwc3NsKQorJCB0aGVuCiskICAgICd2b19jJyAiJUNVUkwtSS1CTERIUFNTTCwgYnVpbGRpbmcgd2l0aCBIUCBTU0wgc3VwcG9ydCIKKyQgZWxzZQorJCAgICBpZiAob3BlbnNzbCAubmUuIDApCiskICAgIHRoZW4KKyQgICAgICAgaWYgKG9wZW5zc2wgLmVxLiAxKQorJCAgICAgICB0aGVuCiskICAgICAgICAgICd2b19jJyAtCisgIiVDVVJMLUktQkxET1NTTF9PTEIsIGJ1aWxkaW5nIHdpdGggT3BlblNTTCAob2JqZWN0IGxpYnJhcnkpIHN1cHBvcnQiCiskICAgICAgIGVsc2UKKyQgICAgICAgICAgJ3ZvX2MnIC0KKyAiJUNVUkwtSS1CTERPU1NMX0VYRSwgYnVpbGRpbmcgd2l0aCBPcGVuU1NMIChzaGFyZWQgaW1hZ2UpIHN1cHBvcnQiCiskICAgICAgIGVuZGlmCiskICAgIGVsc2UKKyQgICAgICAgJ3ZvX2MnICIlQ1VSTC1JLUJMRE5PU1NMLCBidWlsZGluZyB3aXRoIE5PIFNTTCBzdXBwb3J0IgorJCAgICBlbmRpZgorJCBlbmRpZgorJCEKKyQhIEFubm91bmNlIGRlc3RpbmF0aW9uIGFuZCBTU0wgZGlyZWN0b3JpZXMuCiskIQorJCAndm9fYycgIiAgIE9CSkRJUiA9ICcnb2JqZGlyJyIKKyQgJ3ZvX2MnICIgICBFWEVESVIgPSAnJ2V4ZWRpciciCiskIQorJCBpZiAob3BlbnNzbCAubmUuIDApCiskIHRoZW4KKyQgICAgc3NsbGliID0gZiR0cm5sbm0oICJzc2xsaWIiKQorJCAgICBpZiAoc3NsbGliIC5lcXMuICIiKQorJCAgICB0aGVuCiskICAgICAgICBzc2xsaWIgPSAiKHVuZGVmaW5lZCkiCiskICAgIGVuZGlmCiskICAgICd2b19jJyAiICAgU1NMTElCID0gJydzc2xsaWInIgorJCEKKyQgICAgaWYgKG9wZW5zc2wgLmVxLiAxKQorJCAgICB0aGVuCiskICAgICAgIG9zc2xfbGliMSA9IGYkdHJubG5tKCAic3NsbGliIikrICJMSUJTU0wuT0xCIgorJCAgICAgICBvc3NsX2xpYjIgPSBmJHRybmxubSggInNzbGxpYiIpKyAiTElCQ1JZUFRPLk9MQiIKKyQgICAgICAgbXNnID0gIm9iamVjdCBsaWJyYXJpZXMiCiskICAgIGVsc2UKKyQgICAgICAgaWYgKG9wZW5zc2wgLmVxLiAyKQorJCAgICAgICB0aGVuCiskICAgICAgICAgIG9zc2xfbGliMSA9IGYkdHJubG5tKCAic3NsbGliIikrICJTU0xfTElCU1NMLkVYRSIKKyQgICAgICAgICAgb3NzbF9saWIyID0gZiR0cm5sbm0oICJzc2xsaWIiKSsgIlNTTF9MSUJDUllQVE8uRVhFIgorJCAgICAgICBlbHNlCiskICAgICAgICAgIG9zc2xfbGliMSA9IGYkdHJubG5tKCAic3NsbGliIikrICJMSUJTU0wuRVhFIgorJCAgICAgICAgICBvc3NsX2xpYjIgPSBmJHRybmxubSggInNzbGxpYiIpKyAiTElCQ1JZUFRPLkVYRSIKKyQgICAgICAgZW5kaWYKKyQgICAgICAgbXNnID0gInNoYXJlZCBpbWFnZXMiCiskICAgIGVuZGlmCiskICAgIGlmICgoZiRzZWFyY2goIG9zc2xfbGliMSkgLmVxcy4gIiIpIC5vci4gLQorICAgICAgKGYkc2VhcmNoKCBvc3NsX2xpYjIpIC5lcXMuICIiKSkKKyQgICAgdGhlbgorJCAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJDYW4ndCBmaW5kIE9wZW5TU0wgJydtc2cnOiIKKyQgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiICAgJydvc3NsX2xpYjEnIgorJCAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICIgICAnJ29zc2xfbGliMiciCiskICAgICAgIGdvdG8gQ29tbW9uX0V4aXQKKyQgICAgZW5kaWYKKyQgZW5kaWYKKyQhCiskISBEZWZpbmUgdGhlICJjdXJsIiAocHJvY2VzcykgbG9naWNhbCBuYW1lIGZvciAiI2luY2x1ZGUgPGN1cmwveHh4Lmg+Ii4KKyQhCiskIGN1cmwgPSBmJHRybmxubSggImN1cmwiLCAiTE5NJFBST0NFU1MiKQorJCBpZiAoY3VybCAubmVzLiAiIikKKyQgdGhlbgorJCAgICB3cml0ZSBzeXMkb3V0cHV0ICIiCiskICAgIHdyaXRlIHN5cyRvdXRwdXQgLQorICJQcm9jZXNzIGxvZ2ljYWwgbmFtZSAiImN1cmwiIiBpcyBhbHJlYWR5IGRlZmluZWQsIGJ1dCB0aGlzIHByb2NlZHVyZSIKKyQgICAgd3JpdGUgc3lzJG91dHB1dCAtCisgIndvdWxkIG92ZXJyaWRlIHRoYXQgZGVmaW5pdGlvbi4gIFVzZSBhIGNvbW1hbmQgbGlrZSIKKyQgICAgd3JpdGUgc3lzJG91dHB1dCAtCisgIiAgICAgIGRlYXNzaWduIC9wcm9jZXNzIGN1cmwiCiskICAgIHdyaXRlIHN5cyRvdXRwdXQgLQorICJ0byBjYW5jZWwgdGhhdCBsb2dpY2FsIG5hbWUgZGVmaW5pdGlvbiwgYW5kIHRoZW4gYW5kIHJlLXJ1biB0aGlzIHByb2NlZHVyZS4iCiskICAgIHdyaXRlIHN5cyRvdXRwdXQgIiIKKyQgICAgZ290byBDb21tb25fRXhpdAorJCBlbmRpZgorJCBkZWZpbmUgY3VybCAndG9wX2Rldl9kaXInLmluY2x1ZGUuY3VybF0KKyQhCiskISBDb3B5IHRoZSBWTVMtc3BlY2lmaWMgY29uZmlnIGZpbGUgaW50byB0aGUgcHJvZHVjdCBkaXJlY3RvcnkuCiskIQorJCBjYWxsIE1vdmVJZkRpZmYgJ3RvcF9kZXZfZGlyJy5saWJdY29uZmlnLXZtcy5oICdvYmpkaXInY3VybF9jb25maWcuaAorJCEKKyQgb24gY29udHJvbF95IHRoZW4gZ290byBDb21tb25fRXhpdAorJCEKKyQgc2V0IGRlZmF1bHQgJ3Byb2NfZGV2X2RpcicKKyQgY2FsbCBidWlsZCAiWy0tLmxpYl0iICIqLmMiICInJ29iamRpcidDVVJMTElCLk9MQiIgImFtaWdhb3MsIG53bGliLCBud29zIgorJCBpZiAoJHN0YXR1cyAuZXEuIGN0cmxfeSkgdGhlbiBnb3RvIENvbW1vbl9FeGl0CiskIGNhbGwgYnVpbGQgIlstLS5zcmNdIiAiKi5jIiAiJydvYmpkaXInQ1VSTFNSQy5PTEIiCiskIGlmICgkc3RhdHVzIC5lcS4gY3RybF95KSB0aGVuIGdvdG8gQ29tbW9uX0V4aXQKKyQgY2FsbCBidWlsZCAiW10iICIqLm1zZyIgIicnb2JqZGlyJ0NVUkxTUkMuT0xCIgorJCBpZiAoJHN0YXR1cyAuZXEuIGN0cmxfeSkgdGhlbiBnb3RvIENvbW1vbl9FeGl0CiskIQorJCBsZGFwX29wdCA9ICIiCiskIGlmIChsZGFwIC5uZS4gMCkgdGhlbiBsZGFwX29wdCA9ICIsICcncHJvY19kZXZfZGlyJ2xkYXAub3B0IC9vcHRpb25zIgorJCEKKyQgaWYgKG9wZW5zc2wgLm5lLiAwKQorJCB0aGVuCiskICAgIGlmIChvcGVuc3NsIC5lcS4gMSkKKyQgICAgdGhlbgorJCAgICAgICAndm9fbCcgIiVDVVJMLUktTElOS19PU1NMLCBsaW5raW5nIHdpdGggT3BlblNTTCAob2JqZWN0IGxpYnJhcnkpIgorJCAgICBlbHNlCiskICAgICAgICd2b19sJyAiJUNVUkwtSS1MSU5LX0hQU1NMLCBsaW5raW5nIHdpdGggT3BlblNTTCAoc2hhcmVkIGltYWdlKSIKKyQgICAgZW5kaWYKKyQgZWxzZQorJCAgICBpZiAoaHBzc2wpCiskICAgIHRoZW4KKyQgICAgICAgJ3ZvX2wnICIlQ1VSTC1JLUxJTktfSFBTU0wsIGxpbmtpbmcgd2l0aCBIUCBTU0wiCiskICAgIGVsc2UKKyQgICAgICAgJ3ZvX2wnICIlQ1VSTC1JLUxJTktfTk9TU0wsIGxpbmtpbmcgd2l0aCBOTyBTU0wgc3VwcG9ydCIKKyQgICAgZW5kaWYKKyQgZW5kaWYKKyQhCiskIGxpbmsgJ2xpbmtfcXVhbCcgL2V4ZWN1dGFibGUgPSAnZXhlZGlyJ0NVUkwuRVhFIC0KKyAgICdvYmpkaXInY3VybHNyYy5vbGIgL2xpYnJhcnkgL2luY2x1ZGUgPSAobWFpbiwgY3VybG1zZyksIC0KKyAgICdvYmpkaXInY3VybGxpYi5vbGIgL2xpYnJhcnkgLQorICAgJ3NzbF9vcHQnIC0KKyAgICdsZGFwX29wdCcKKyQhCiskIGdvdG8gQ29tbW9uX0V4aXQKKyQhCiskISBTdWJyb3V0aW5lIHRvIGJ1aWxkIGV2ZXJ5dGhpbmcgd2l0aCBhIGZpbGV0eXBlIHBhc3NlZCBpbiB2aWEgUDIgaW4KKyQhIHRoZSBkaXJlY3RvcnkgcGFzc2VkIGluIHZpYSBQMSBhbmQgcHV0IGl0IGluIHRoZSBvYmplY3QgbGlicmFyeSBuYW1lZAorJCEgdmlhIFAzLiAgRXhjbHVkZSBpdGVtcyBpbiBQNC4KKyQhCiskYnVpbGQ6ICAgc3Vicm91dGluZQorJCAgICBidWlsZF9kZWYgPSBmJGVudmlyb25tZW50KCAiZGVmYXVsdCIpCiskICAgIG9uIGNvbnRyb2xfeSB0aGVuIGdvdG8gRW5kTG9vcCAhIFNTJF9DT05UUk9MWQorJCAgICBzdHMgPSAxICEgU1MkX05PUk1BTC4KKyQhICAgIHNldCBub29uCiskICAgIHNldCBkZWZhdWx0ICdwMScKKyQgICAgc2VhcmNoID0gcDIKKyQgICAgcmVzZXQgPSBmJHNlYXJjaCgicmVzZXQiKQorJCAgICBpZiBmJHNlYXJjaCggcDMpIC5lcXMuICIiCiskICAgIHRoZW4KKyQgICAgICAgbGlicmFyaWFuIC9jcmVhdGUgL29iamVjdCAncDMnCiskICAgIGVuZGlmCiskICAgIHJlamVjdF9saXN0X18gPSAiLCIrIGYkZWRpdCggcDQsICJDT0xMQVBTRSwgVVBDQVNFIikrICIsIgorJCAgICByZWplY3RfbGlzdF9fX2xlbiA9IGYkbGVuZ3RoKCByZWplY3RfbGlzdF9fKQorJCAgICByZXNldCA9IGYkc2VhcmNoKCAicmVzZXQiLCAxKQorJExvb3A6CiskICAgIGZpbGUgPSBmJHNlYXJjaCggc2VhcmNoLCAxKQorJCAgICBpZiBmaWxlIC5lcXMuICIiIHRoZW4gZ290byBFbmRMb29wCiskISAgICAgIFNraXAgYSBuYW1lIGlmIGl0J3MgaW4gdGhlIFA0IGV4Y2x1c2lvbiBsaXN0LgorJCAgICAgICBpZiAocDQgLm5lcy4gIiIpCiskICAgICAgIHRoZW4KKyQgICAgICAgICAgbmFtZV9fID0gIiwiKyAtCisgICAgICAgICAgICBmJGVkaXQoIGYkcGFyc2UoIGZpbGUsICwgLCAiTkFNRSIsICJTWU5UQVhfT05MWSIpLCAiVVBDQVNFIikrIC0KKyAgICAgICAgICAgICIsIgorJCAgICAgICAgICBpZiAoZiRsb2NhdGUoIG5hbWVfXywgcmVqZWN0X2xpc3RfXykgLmx0LiByZWplY3RfbGlzdF9fX2xlbikKKyQgICAgICAgICAgdGhlbgorJCAgICAgICAgICAgICBnb3RvIExvb3AKKyQgICAgICAgICAgZW5kaWYKKyQgICAgICAgZW5kaWYKKyQgICAgICAgb2JqZmlsZSA9IGYkcGFyc2UoICInJ29iamRpcicuT0JKOyIsIGZpbGUpCiskICAgICAgIG9iaiA9IGYkc2VhcmNoKCBvYmpmaWxlLCAyKQorJCAgICAgICBpZiAob2JqIC5uZXMuICIiKQorJCAgICAgICB0aGVuCiskICAgICAgICAgIGlmIChmJGN2dGltZShmJGZpbGUoZmlsZSwicmR0IikpIC5ndHMuIGYkY3Z0aW1lKGYkZmlsZShvYmosInJkdCIpKSkKKyQgICAgICAgICAgdGhlbgorJCAgICAgICAgICAgICBjYWxsIGNvbXBpbGUgJ2ZpbGUnCiskICAgICAgICAgICAgIHN0cyA9ICRzdGF0dXMKKyQgICAgICAgICAgICAgaWYgLm5vdC4gc3RzCiskICAgICAgICAgICAgIHRoZW4KKyQgICAgICAgICAgICAgICAgZ290byBFbmRMb29wCiskICAgICAgICAgICAgIGVuZGlmCiskICAgICAgICAgICAgIGxpYnJhcmlhbiAvb2JqZWN0ICdwMycgJ29iamZpbGUnCiskICAgICAgICAgIGVsc2UKKyQgICAgICAgICAgICAgJ3ZvX28nICIlQ1VSTC1JLU9CSlVURCwgIiwgb2JqZmlsZSwgIiBpcyB1cCB0byBkYXRlIgorJCAgICAgICAgICBlbmRpZgorJCAgICAgICBlbHNlCiskICAgICAgICAgICd2b19vJyAiJUNVUkwtSS1PQkpETkUsICIsIGZpbGUsICIgZG9lcyBub3QgZXhpc3QiCiskICAgICAgICAgIGNhbGwgY29tcGlsZSAnZmlsZScKKyQgICAgICAgICAgc3RzID0gJHN0YXR1cworJCAgICAgICAgICBpZiAubm90LiBzdHMKKyQgICAgICAgICAgdGhlbgorJCAgICAgICAgICAgICBnb3RvIEVuZExvb3AKKyQgICAgICAgICAgZW5kaWYKKyQgICAgICAgICAgbGlicmFyaWFuIC9vYmplY3QgJ3AzJyAnb2JqZmlsZScKKyQgICAgICAgZW5kaWYKKyQgICAgZ290byBMb29wCiskRW5kTG9vcDoKKyQhISEgICAgcHVyZ2UKKyQgICAgc2V0IGRlZmF1bHQgJ2J1aWxkX2RlZicKKyQgICAgZXhpdCAnc3RzJworJCBlbmRzdWJyb3V0aW5lICAgISBCdWlsZAorJCEKKyQhIEJhc2VkIG9uIHRoZSBmaWxlIFRZUEUsIGRvIHRoZSByaWdodCBjb21waWxlIGNvbW1hbmQuCiskISBPbmx5IEMgYW5kIE1TRyBzdXBwb3J0ZWQuCiskIQorJGNvbXBpbGU6ICAgc3Vicm91dGluZQorJCAgICBvbiBjb250cm9sX3kgdGhlbiByZXR1cm4gY3RybF95ICEgU1MkX0NPTlRST0xZCiskISAgICBzZXQgbm9vbgorJCAgICBmaWxlID0gcDEKKyQgICAgcXVhbCA9IHAyKyBwMysgcDQrIHA1KyBwNisgcDcrIHA4CiskICAgIHR5cCA9IGYkZWRpdCggZiRwYXJzZSggZmlsZSwgLCAsICJUWVBFIiksICJVUENBU0UiKSAtICIuIgorJCAgICBpZiAodHlwIC5lcXMuICJDIikKKyQgICAgdGhlbgorJCAgICAgICAndm9fYycgIkNDIChvcHRzKSAiLCBmaWxlCiskICAgICAgIENDICdjY19kZWZzJyAtCisgICAgICAgICAnY2NfcXVhbDEnIC0KKyAgICAgICAgICdjY19xdWFsMicgLQorICAgICAgICAgJ2ZpbGUnCiskICAgIGVsc2UKKyQgICAgICAgY21kX21zZyA9ICJNRVNTQUdFICIrIG1zZ19xdWFsCiskICAgICAgIHggPSBjbWRfJ3R5cCcKKyQgICAgICAgJ3ZvX2MnIHgsIiAiLGZpbGUKKyQgICAgICAgJ3gnICdmaWxlJworJCAgICBlbmRpZgorJCBFTkRTVUJST1VUSU5FICAgISBDb21waWxlCiskIQorJCEgRG8gYSBkaWZmIG9mIHRoZSBmaWxlIHNwZWNpZmllZCBpbiBQMSB3aXRoIHRoYXQgaW4gUDIuICBJZiBkaWZmZXJlbnQKKyQhIGNvcHkgUDEgdG8gUDIuICBUaGlzIGFsc28gY292ZXJzIGlmIFAyIGRvZXNuJ3QgZXhpc3QsIGJ1dCBub3QgaWYgUDIKKyQhIGlzIGFuIGludmFsaWQgZmlsZXNwZWMuCiskIQorJE1vdmVJZkRpZmY6ICBzdWJyb3V0aW5lCiskICAgIHNldCBOb09uCiskICAgIGRlZmluZSAvdXNlcl9tb2RlIHN5cyRlcnJvciBubDoKKyQgICAgZGVmaW5lIC91c2VyX21vZGUgc3lzJG91dHB1dCBubDoKKyQgICAgZGlmZmVyZW5jZXMgJ3AxJyAncDInCiskICAgIHN0YXR1cyA9ICRzdGF0dXMKKyQgICAgaWYgKCBzdGF0dXMgLm5lLiAlWDAwNkM4MDA5KSAhIGlmIHN0YXR1cyBpcyBub3QgIm5vIGRpZmYiCiskICAgIHRoZW4KKyQgICAgICAgY29weSAncDEnICdwMicKKyQgICAgICAgcHVyZ2UgL25vbG9nICdwMicKKyQgICAgZW5kaWYKKyQgICAgb24gY29udHJvbF95IHRoZW4gcmV0dXJuIGN0cmxfeSAhIFNTJF9DT05UUk9MWQorJCBFTkRTVUJST1VUSU5FICAgISBNb3ZlSWZEaWZmCiskIQorJENvbW1vbl9FeGl0OgorJCBzZXQgZGVmYXVsdCAnb3JpZ19kZWYnCiskIGlmICgoY3VybCAuZXFzLiAiIikgLmFuZC4gKGYkdHJubG5tKCAiY3VybCIsICJMTk0kUFJPQ0VTUyIpIC5uZXMuICIiKSkKKyQgdGhlbgorJCAgICBkZWFzc2lnbiBjdXJsCiskIGVuZGlmCiskIGV4aXQKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9jdXJsbXNnLmggYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvY3VybG1zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NzNiZTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvY3VybG1zZy5oCkBAIC0wLDAgKzEsMTQwIEBACisjaWZuZGVmIEhFQURFUl9DVVJMTVNHX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxNU0dfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNwcmFnbWEgX19tZW1iZXJfYWxpZ25tZW50IF9fc2F2ZQorI3ByYWdtYSBfX25vbWVtYmVyX2FsaWdubWVudAorCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIENVUkxNU0cuSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBTREwgRmlsZSBHZW5lcmF0ZWQgYnkgVkFYLTExIE1lc3NhZ2UgVjA0LTAwIG9uIDMtU0VQLTIwMDggMTM6MzM6NTQuMDkgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogVEhFU0UgVk1TIEVSUk9SIENPREVTIEFSRSBHRU5FUkFURUQgQlkgVEFLSU5HIEFQQVJUIFRIRSBDVVJMLkggICAgICAgICAgICovCisvKiBGSUxFIEFORCBQVVRUSU5HIEFMTCBUSEUgQ1VSTEVfKiBFTlVNIFNUVUZGIElOVE8gVEhJUyBGSUxFLCAgICAgICAgICAgICAgKi8KKy8qIENVUkxNU0cuTVNHLiAgQU4gLlNETCBGSUxFIElTIENSRUFURUQgRlJPTSBUSElTIEZJTEUgV0lUSCAgICAgICAgICAgICAgICAqLworLyogTUVTU0FHRS9TREwuICBUSEUgLkggRklMRSBJUyBDUkVBVEVEIFVTSU5HIFRIRSBGUkVFV0FSRSBTREwgVE9PTCAgICAgICAgICovCisvKiBBR0FJTlNUIFRIRSAuU0RMIEZJTEUgV0lUSCBTREwvQUxQSEEvTEFORz1DQyBDT01NQU5ELiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogV0lUSCBUSEUgRVhDRVBUSU9OIE9GIENVUkxFX09LLCBBTEwgT0YgVEhFIE1FU1NBR0VTIEFSRSBBVCAgICAgICAgICAgICAgICovCisvKiBUSEUgRVJST1IgU0VWRVJJVFkgTEVWRUwuICBXSVRIIFRIRSBFWENFUFRJT04gT0YgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFBFRVJfRkFJTEVEX1ZFUklGLCBXSElDSCBJUyBBIFNIT1JURU5FRCBGT1JNIE9GICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OLCBUSEVTRSBBUkUgVEhFIFNBTUUgTkFNRVMgQVMgVEhFICAgICAgICAgICAgICAgICovCisvKiBDVVJMRV8gT05FUyBJTiBJTkNMVURFL0NVUkwuSC4gIFRIRSBNRVNTQUdFIFVUSUxJVFkgTUFOVUFMIFNUQVRFUyAgICAgICAgKi8KKy8qICJUSEUgQ09NQklORUQgTEVOR1RIIE9GIFRIRSBQUkVGSVggQU5EIFRIRSBNRVNTQUdFIFNZTUJPTCBOQU1FIENBTk5PVCAgICAqLworLyogRVhDRUVEIDMxIENIQVJBQ1RFUlMuIiAgV0lUSCBBIFBSRUZJWCBPRiBGSVZFIFRIQVQgTEVBVkVTIFVTIFdJVEggMjYgICAgICovCisvKiBGT1IgVEhFIE1FU1NBR0UgTkFNRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogSUYgWU9VIFVQREFURSBUSElTIEZJTEUsIFVQREFURSBDVVJMTVNHX1ZNUy5IIFNPIFRIQVQgVEhFWSBBUkUgSU4gU1lOQyAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDVVJMX0ZBQ0lMSVRZIDM4NDEKKyNkZWZpbmUgQ1VSTF9PSyAyNTE3NTY1NTMKKyNkZWZpbmUgQ1VSTF9VTlNVUFBPUlRFRF9QUk9UT0NPTCAyNTE3NTY1NjIKKyNkZWZpbmUgQ1VSTF9GQUlMRURfSU5JVCAyNTE3NTY1NzAKKyNkZWZpbmUgQ1VSTF9VUkxfTUFMRk9STUFUIDI1MTc1NjU3OAorI2RlZmluZSBDVVJMX09CU09MRVRFNCAyNTE3NTY1ODYKKyNkZWZpbmUgQ1VSTF9DT1VMRE5UX1JFU09MVkVfUFJPWFkgMjUxNzU2NTk0CisjZGVmaW5lIENVUkxfQ09VTEROVF9SRVNPTFZFX0hPU1QgMjUxNzU2NjAyCisjZGVmaW5lIENVUkxfQ09VTEROVF9DT05ORUNUIDI1MTc1NjYxMAorI2RlZmluZSBDVVJMX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFkgMjUxNzU2NjE4CisjZGVmaW5lIENVUkxfRlRQX0FDQ0VTU19ERU5JRUQgMjUxNzU2NjI2CisjZGVmaW5lIENVUkxfT0JTT0xFVEUxMCAyNTE3NTY2MzQKKyNkZWZpbmUgQ1VSTF9GVFBfV0VJUkRfUEFTU19SRVBMWSAyNTE3NTY2NDIKKyNkZWZpbmUgQ1VSTF9PQlNPTEVURTEyIDI1MTc1NjY1MAorI2RlZmluZSBDVVJMX0ZUUF9XRUlSRF9QQVNWX1JFUExZIDI1MTc1NjY1OAorI2RlZmluZSBDVVJMX0ZUUF9XRUlSRF8yMjdfRk9STUFUIDI1MTc1NjY2NgorI2RlZmluZSBDVVJMX0ZUUF9DQU5UX0dFVF9IT1NUIDI1MTc1NjY3NAorI2RlZmluZSBDVVJMX09CU09MRVRFMTYgMjUxNzU2NjgyCisjZGVmaW5lIENVUkxfRlRQX0NPVUxETlRfU0VUX1RZUEUgMjUxNzU2NjkwCisjZGVmaW5lIENVUkxfUEFSVElBTF9GSUxFIDI1MTc1NjY5OAorI2RlZmluZSBDVVJMX0ZUUF9DT1VMRE5UX1JFVFJfRklMRSAyNTE3NTY3MDYKKyNkZWZpbmUgQ1VSTF9PQlNPTEVURTIwIDI1MTc1NjcxNAorI2RlZmluZSBDVVJMX1FVT1RFX0VSUk9SIDI1MTc1NjcyMgorI2RlZmluZSBDVVJMX0hUVFBfUkVUVVJORURfRVJST1IgMjUxNzU2NzMwCisjZGVmaW5lIENVUkxfV1JJVEVfRVJST1IgMjUxNzU2NzM4CisjZGVmaW5lIENVUkxfT0JTT0xFVEUyNCAyNTE3NTY3NDYKKyNkZWZpbmUgQ1VSTF9VUExPQURfRkFJTEVEIDI1MTc1Njc1NAorI2RlZmluZSBDVVJMX1JFQURfRVJST1IgMjUxNzU2NzYyCisjZGVmaW5lIENVUkxfT1VUX09GX01FTU9SWSAyNTE3NTY3NzAKKyNkZWZpbmUgQ1VSTF9PUEVSQVRJT05fVElNRU9VVEVEIDI1MTc1Njc3OAorI2RlZmluZSBDVVJMX09CU09MRVRFMjkgMjUxNzU2Nzg2CisjZGVmaW5lIENVUkxfRlRQX1BPUlRfRkFJTEVEIDI1MTc1Njc5NAorI2RlZmluZSBDVVJMX0ZUUF9DT1VMRE5UX1VTRV9SRVNUIDI1MTc1NjgwMgorI2RlZmluZSBDVVJMX09CU09MRVRFMzIgMjUxNzU2ODEwCisjZGVmaW5lIENVUkxfUkFOR0VfRVJST1IgMjUxNzU2ODE4CisjZGVmaW5lIENVUkxfSFRUUF9QT1NUX0VSUk9SIDI1MTc1NjgyNgorI2RlZmluZSBDVVJMX1NTTF9DT05ORUNUX0VSUk9SIDI1MTc1NjgzNAorI2RlZmluZSBDVVJMX0JBRF9ET1dOTE9BRF9SRVNVTUUgMjUxNzU2ODQyCisjZGVmaW5lIENVUkxfRklMRV9DT1VMRE5UX1JFQURfRklMRSAyNTE3NTY4NTAKKyNkZWZpbmUgQ1VSTF9MREFQX0NBTk5PVF9CSU5EIDI1MTc1Njg1OAorI2RlZmluZSBDVVJMX0xEQVBfU0VBUkNIX0ZBSUxFRCAyNTE3NTY4NjYKKyNkZWZpbmUgQ1VSTF9PQlNPTEVURTQwIDI1MTc1Njg3NAorI2RlZmluZSBDVVJMX0ZVTkNUSU9OX05PVF9GT1VORCAyNTE3NTY4ODIKKyNkZWZpbmUgQ1VSTF9BQk9SVEVEX0JZX0NBTExCQUNLIDI1MTc1Njg5MAorI2RlZmluZSBDVVJMX0JBRF9GVU5DVElPTl9BUkdVTUVOVCAyNTE3NTY4OTgKKyNkZWZpbmUgQ1VSTF9PQlNPTEVURTQ0IDI1MTc1NjkwNgorI2RlZmluZSBDVVJMX0lOVEVSRkFDRV9GQUlMRUQgMjUxNzU2OTE0CisjZGVmaW5lIENVUkxfT0JTT0xFVEU0NiAyNTE3NTY5MjIKKyNkZWZpbmUgQ1VSTF9UT09fTUFOWV9SRURJUkVDVFMgMjUxNzU2OTMwCisjZGVmaW5lIENVUkxfVU5LTk9XTl9URUxORVRfT1BUSU9OIDI1MTc1NjkzOAorI2RlZmluZSBDVVJMX1RFTE5FVF9PUFRJT05fU1lOVEFYIDI1MTc1Njk0NgorI2RlZmluZSBDVVJMX09CU09MRVRFNTAgMjUxNzU2OTU0CisjZGVmaW5lIENVUkxfUEVFUl9GQUlMRURfVkVSSUYgMjUxNzU2OTYyCisjZGVmaW5lIENVUkxfR09UX05PVEhJTkcgMjUxNzU2OTcwCisjZGVmaW5lIENVUkxfU1NMX0VOR0lORV9OT1RGT1VORCAyNTE3NTY5NzgKKyNkZWZpbmUgQ1VSTF9TU0xfRU5HSU5FX1NFVEZBSUxFRCAyNTE3NTY5ODYKKyNkZWZpbmUgQ1VSTF9TRU5EX0VSUk9SIDI1MTc1Njk5NAorI2RlZmluZSBDVVJMX1JFQ1ZfRVJST1IgMjUxNzU3MDAyCisjZGVmaW5lIENVUkxfT0JTT0xFVEU1NyAyNTE3NTcwMTAKKyNkZWZpbmUgQ1VSTF9TU0xfQ0VSVFBST0JMRU0gMjUxNzU3MDE4CisjZGVmaW5lIENVUkxfU1NMX0NJUEhFUiAyNTE3NTcwMjYKKyNkZWZpbmUgQ1VSTF9TU0xfQ0FDRVJUIDI1MTc1NzAzNAorI2RlZmluZSBDVVJMX0JBRF9DT05URU5UX0VOQ09ESU5HIDI1MTc1NzA0MgorI2RlZmluZSBDVVJMX0xEQVBfSU5WQUxJRF9VUkwgMjUxNzU3MDUwCisjZGVmaW5lIENVUkxfRklMRVNJWkVfRVhDRUVERUQgMjUxNzU3MDU4CisjZGVmaW5lIENVUkxfVVNFX1NTTF9GQUlMRUQgMjUxNzU3MDY2CisjZGVmaW5lIENVUkxfU0VORF9GQUlMX1JFV0lORCAyNTE3NTcwNzQKKyNkZWZpbmUgQ1VSTF9TU0xfRU5HSU5FX0lOSVRGQUlMRUQgMjUxNzU3MDgyCisjZGVmaW5lIENVUkxfTE9HSU5fREVOSUVEIDI1MTc1NzA5MAorI2RlZmluZSBDVVJMX1RGVFBfTk9URk9VTkQgMjUxNzU3MDk4CisjZGVmaW5lIENVUkxfVEZUUF9QRVJNIDI1MTc1NzEwNgorI2RlZmluZSBDVVJMX1JFTU9URV9ESVNLX0ZVTEwgMjUxNzU3MTE0CisjZGVmaW5lIENVUkxfVEZUUF9JTExFR0FMIDI1MTc1NzEyMgorI2RlZmluZSBDVVJMX1RGVFBfVU5LTk9XTklEIDI1MTc1NzEzMAorI2RlZmluZSBDVVJMX1JFTU9URV9GSUxFX0VYSVNUUyAyNTE3NTcxMzgKKyNkZWZpbmUgQ1VSTF9URlRQX05PU1VDSFVTRVIgMjUxNzU3MTQ2CisjZGVmaW5lIENVUkxfQ09OVl9GQUlMRUQgMjUxNzU3MTU0CisjZGVmaW5lIENVUkxfQ09OVl9SRVFEIDI1MTc1NzE2MgorI2RlZmluZSBDVVJMX1NTTF9DQUNFUlRfQkFERklMRSAyNTE3NTcxNzAKKyNkZWZpbmUgQ1VSTF9SRU1PVEVfRklMRV9OT1RfRk9VTkQgMjUxNzU3MTc4CisjZGVmaW5lIENVUkxfU1NIIDI1MTc1NzE4NgorI2RlZmluZSBDVVJMX1NTTF9TSFVURE9XTl9GQUlMRUQgMjUxNzU3MTk0CisjZGVmaW5lIENVUkxfQUdBSU4gMjUxNzU3MjAyCisjZGVmaW5lIENVUkxfU1NMX0NSTF9CQURGSUxFIDI1MTc1NzIxMAorI2RlZmluZSBDVVJMX1NTTF9JU1NVRVJfRVJST1IgMjUxNzU3MjE4CisjZGVmaW5lIENVUkxfQ1VSTF9MQVNUIDI1MTc1NzIyNgorCisjcHJhZ21hIF9fbWVtYmVyX2FsaWdubWVudCBfX3Jlc3RvcmUKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMTVNHX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9jdXJsbXNnLm1zZyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9jdXJsbXNnLm1zZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmQ0NDgzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL2N1cmxtc2cubXNnCkBAIC0wLDAgKzEsMTExIEBACishCishIFRoZXNlIFZNUyBlcnJvciBjb2RlcyBhcmUgZ2VuZXJhdGVkIGJ5IHRha2luZyBhcGFydCB0aGUgY3VybC5oCishIGZpbGUgYW5kIHB1dHRpbmcgYWxsIHRoZSBDVVJMRV8qIGVudW0gc3R1ZmYgaW50byB0aGlzIGZpbGUsCishIENVUkxNU0cuTVNHLiAgQW4gLlNETCBmaWxlIGlzIGNyZWF0ZWQgZnJvbSB0aGlzIGZpbGUgd2l0aAorISBNRVNTQUdFL1NETC4gIFRoZSAuSCBmaWxlIGlzIGNyZWF0ZWQgdXNpbmcgdGhlIGZyZWV3YXJlIFNETCB0b29sCishIGFnYWluc3QgdGhlIC5TREwgZmlsZSB3aXRoIFNETC9BTFBIQS9MQU5HPUNDIGNvbW1hbmQuCishCishIFdpdGggdGhlIGV4Y2VwdGlvbiBvZiBDVVJMRV9PSywgYWxsIG9mIHRoZSBtZXNzYWdlcyBhcmUgYXQKKyEgdGhlIGVycm9yIHNldmVyaXR5IGxldmVsLiAgV2l0aCB0aGUgZXhjZXB0aW9uIG9mCishIFBFRVJfRkFJTEVEX1ZFUklGLCB3aGljaCBpcyBhIHNob3J0ZW5lZCBmb3JtIG9mCishIFBFRVJfRkFJTEVEX1ZFUklGSUNBVElPTiwgdGhlc2UgYXJlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZQorISBDVVJMRV8gb25lcyBpbiBpbmNsdWRlL2N1cmwuaC4gIFRoZSBNZXNzYWdlIFV0aWxpdHkgbWFudWFsIHN0YXRlcworISAiVGhlIGNvbWJpbmVkIGxlbmd0aCBvZiB0aGUgcHJlZml4IGFuZCB0aGUgbWVzc2FnZSBzeW1ib2wgbmFtZSBjYW5ub3QKKyEgZXhjZWVkIDMxIGNoYXJhY3RlcnMuIiAgV2l0aCBhIHByZWZpeCBvZiBmaXZlIHRoYXQgbGVhdmVzIHVzIHdpdGggMjYKKyEgZm9yIHRoZSBtZXNzYWdlIG5hbWUuCishCishIElmIHlvdSB1cGRhdGUgdGhpcyBmaWxlIGFsc28gdXBkYXRlIGN1cmxtc2dfdm1zLmggc28gdGhhdCB0aGV5IGFyZSBpbiBzeW5jCishCisuVElUTEUJCUNVUkxNU0cgTWVzc2FnZSBmaWxlcworLkZBQ0lMSVRZCUNVUkwsMTc5MwkvUFJFRklYPUNVUkxfCisuQkFTRQkJMQorLlNFVkVSSVRZCVNVQ0NFU1MKK09LCQk8bm9ybWFsIHN1Y2Nlc3NmdWwgY29tcGxldGlvbj4KKworLlNFVkVSSVRZCUVSUk9SCitVTlNVUFBPUlRFRF9QUk9UT0NPTAk8dW5zdXBwb3J0ZWQgcHJvdG9jb2w+CitGQUlMRURfSU5JVAkJPGZhaWxlZCBpbml0PgorVVJMX01BTEZPUk1BVAkJPFVSTCBtYWxmb3JtYXQ+CitPQlNPTEVURTQJCTxvYnNvbGV0ZSBlcnJvciBjb2RlPgorQ09VTEROVF9SRVNPTFZFX1BST1hZCTxjb3VsZCBub3QgcmVzb2x2ZSBwcm94eT4KK0NPVUxETlRfUkVTT0xWRV9IT1NUCTxjb3VsZCBub3QgcmVzb2x2ZSBob3N0PgorQ09VTEROVF9DT05ORUNUCQk8Y291bGQgbm90IGNvbm5lY3Q+CitGVFBfV0VJUkRfU0VSVkVSX1JFUExZCTxGVFAgd2VpcmQgc2VydmVyIHJlcGx5PgorRlRQX0FDQ0VTU19ERU5JRUQJPEZUUCBhY2Nlc3MgZGVuaWVkPgorT0JTT0xFVEUxMAkJPG9ic29sZXRlIGVycm9yIGNvZGU+CitGVFBfV0VJUkRfUEFTU19SRVBMWQk8RlRQIHdlaXJkIFBBU1MgcmVwbHk+CitPQlNPTEVURTEyCQk8b2Jzb2xldGUgZXJyb3IgY29kZT4KK0ZUUF9XRUlSRF9QQVNWX1JFUExZCTxGVFAgd2VpcmQgUEFTViByZXBseT4KK0ZUUF9XRUlSRF8yMjdfRk9STUFUCTxGVFAgd2VpcmQgMjI3IGZvcm1hdD4KK0ZUUF9DQU5UX0dFVF9IT1NUCTxGVFAgY2FuIG5vdCBnZXQgaG9zdD4KK09CU09MRVRFMTYJCTxvYnNvbGV0ZSBlcnJvciBjb2RlPgorRlRQX0NPVUxETlRfU0VUX1RZUEUJPEZUUCBjb3VsZCBub3Qgc2V0IHR5cGU+CitQQVJUSUFMX0ZJTEUJCTxwYXJ0aWFsIGZpbGU+CitGVFBfQ09VTEROVF9SRVRSX0ZJTEUJPEZUUCBjb3VsZCBub3QgUkVUUiBmaWxlPgorT0JTT0xFVEUyMAkJPG9ic29sZXRlIGVycm9yIGNvZGU+CitRVU9URV9FUlJPUgkJPHF1b3RlIGNvbW1hbmQgZXJyb3I+CitIVFRQX1JFVFVSTkVEX0VSUk9SCTxIVFRQIHJldHVybmVkIGVycm9yPgorV1JJVEVfRVJST1IJCTx3cml0ZSBlcnJvcj4KK09CU09MRVRFMjQgICAgCQk8b2Jzb2xldGUgZXJyb3IgY29kZT4KK1VQTE9BRF9GQUlMRUQJCTxmYWlsZWQgdXBsb2FkIGNvbW1hbmQ+CitSRUFEX0VSUk9SCQk8cmVhZCBlcnJvciwgY291bGQgbm90IG9wZW4vcmVhZCBmaWxlPgorT1VUX09GX01FTU9SWQkJPG91dCBvZiBtZW1vcnk+CitPUEVSQVRJT05fVElNRU9VVEVECTxvcGVyYXRpb24gdGltZWQgb3V0LCB0aW1lb3V0IHRpbWUgd2FzIHJlYWNoZWQ+CitPQlNPTEVURTI5CQk8b2Jzb2xldGUgZXJyb3IgY29kZT4KK0ZUUF9QT1JUX0ZBSUxFRAkJPEZUUCBQT1JUIG9wZXJhdGlvbiBmYWlsZWQ+CitGVFBfQ09VTEROVF9VU0VfUkVTVAk8RlRQIFJFU1QgY29tbWFuZCBmYWlsZWQ+CitPQlNPTEVURTMyCQk8b2Jzb2xldGUgZXJyb3IgY29kZT4KK1JBTkdFX0VSUk9SCQk8UkFOR0UgY29tbWFuZCBlcnJvcj4KK0hUVFBfUE9TVF9FUlJPUgkJPEhUVFAgUE9TVCBlcnJvcj4KK1NTTF9DT05ORUNUX0VSUk9SCTxTU0wgY29ubmVjdCBlcnJvcj4KK0JBRF9ET1dOTE9BRF9SRVNVTUUJPGJhZCBkb3dubG9hZCByZXN1bWU+CitGSUxFX0NPVUxETlRfUkVBRF9GSUxFCTxGSUxFIGNvdWxkIG5vdCByZWFkIGZpbGU+CitMREFQX0NBTk5PVF9CSU5ECTxMREFQIGNhbm5vdCBiaW5kPgorTERBUF9TRUFSQ0hfRkFJTEVECTxMREFQIHNlYXJjaCBmYWlsZWQ+CitPQlNPTEVURTQwCQk8b2Jzb2xldGUgZXJyb3IgY29kZT4KK0ZVTkNUSU9OX05PVF9GT1VORAk8ZnVuY3Rpb24gbm90IGZvdW5kPgorQUJPUlRFRF9CWV9DQUxMQkFDSwk8YWJvcnRlZCBieSBjYWxsYmFjaz4KK0JBRF9GVU5DVElPTl9BUkdVTUVOVAk8YmFkIGZ1bmN0aW9uIGFyZ3VtZW50PgorT0JTT0xFVEU0NAkJPG9ic29sZXRlIGVycm9yIGNvZGU+CitJTlRFUkZBQ0VfRkFJTEVECTxDVVJMT1BUX0lOVEVSRkFDRSBmYWlsZWQ+CitPQlNPTEVURTQ2CQk8b2Jzb2xldGUgZXJyb3IgY29kZT4KK1RPT19NQU5ZX1JFRElSRUNUUwk8dG9vIG1hbnkgcmVkaXJlY3RzPgorVU5LTk9XTl9URUxORVRfT1BUSU9OCTx1bmtub3duIFRFTE5FVCBvcHRpb24+CitURUxORVRfT1BUSU9OX1NZTlRBWAk8bWFsZm9ybWVkIFRFTE5FVCBvcHRpb24gc3ludGF4PgorT0JTT0xFVEU1MAkJPG9ic29sZXRlIGVycm9yIGNvZGU+CitQRUVSX0ZBSUxFRF9WRVJJRgk8cGVlciBjZXJ0aWZpY2F0ZSBvciBmaW5nZXJwcmludCBmYWlsZWQ+CitHT1RfTk9USElORwkJPGdvdCBub3RoaW5nPgorU1NMX0VOR0lORV9OT1RGT1VORAk8U1NMIGNyeXB0byBlbmdpbmUgbm90IGZvdW5kPgorU1NMX0VOR0lORV9TRVRGQUlMRUQJPFNTTCBjYW4gbm90IHNldCBTU0wgY3J5cHRvIGVuZ2luZSBhcyBkZWZhdWx0PgorU0VORF9FUlJPUgkJPFNFTkQgZXJyb3IsIGZhaWx1cmUgc2VuZGluZyBuZXR3b3JrIGRhdGE+CitSRUNWX0VSUk9SCQk8UkVDViBlcnJvciwgZmFpbHVyZSByZWNlaXZpbmcgbmV0d29yayBkYXRhPgorT0JTT0xFVEU1NyAgCQk8b2Jzb2xldGUgZXJyb3IgY29kZT4KK1NTTF9DRVJUUFJPQkxFTQkJPFNTTCBwcm9ibGVtIHdpdGggdGhlIGxvY2FsIGNlcnRpZmljYXRlPgorU1NMX0NJUEhFUiAgICAgICAgICAgICAgPFNTTCBDSVBIRVIsIGNvdWxkIG5vdCB1c2Ugc3BlY2lmaWVkIGNpcGhlcj4KK1NTTF9DQUNFUlQJCTxTU0wgQ0FDRVJULCBwcm9ibGVtIHdpdGggdGhlIENBIGNlcnQgKHBhdGg/KT4KK0JBRF9DT05URU5UX0VOQ09ESU5HCTx1bnJlY29nbml6ZWQgdHJhbnNmZXIgZW5jb2Rpbmc+CitMREFQX0lOVkFMSURfVVJMCTxMREFQIGludmFsaWQgdXJsPgorRklMRVNJWkVfRVhDRUVERUQJPG1heGltdW0gZmlsZSBzaXplIGV4Y2VlZGVkPgorVVNFX1NTTF9GQUlMRUQJCTxyZXF1ZXN0ZWQgRlRQIFNTTCBsZXZlbCBmYWlsZWQ+CitTRU5EX0ZBSUxfUkVXSU5ECTxzZW5kaW5nIGRhdGEgcmVxdWlyZXMgYSByZXdpbmQgdGhhdCBmYWlsZWQ+CitTU0xfRU5HSU5FX0lOSVRGQUlMRUQJPGZhaWxlZCB0byBpbml0aWFsaXNlIEVOR0lORT4KK0xPR0lOX0RFTklFRAkJPHVzZXIgb3IgcGFzc3dvcmQgbm90IGFjY2VwdGVkLiBmYWlsZWQgdG8gbG9naW4+CitURlRQX05PVEZPVU5ECQk8ZmlsZSBub3QgZm91bmQgb24gc2VydmVyPgorVEZUUF9QRVJNCQk8cGVybWlzc2lvbiBwcm9ibGVtIG9uIHNlcnZlcj4KK1JFTU9URV9ESVNLX0ZVTEwJPG91dCBvZiBkaXNrIHNwYWNlIG9uIHNlcnZlcj4KK1RGVFBfSUxMRUdBTAkJPGlsbGVnYWwgVEZUUCBvcGVyYXRpb24+CitURlRQX1VOS05PV05JRAkJPHVua25vd24gdHJhbnNmZXIgSUQ+CitSRU1PVEVfRklMRV9FWElTVFMJPGZpbGUgYWxyZWFkeSBleGlzdHM+CitURlRQX05PU1VDSFVTRVIJCTxubyBzdWNoIHVzZXI+CitDT05WX0ZBSUxFRAkJPGNvbnZlcnNpb24gZmFpbGVkPgorQ09OVl9SRVFECQk8Y2FsbGVyIG11c3QgcmVnaXN0ZXIgY29udmVyc2lvbiBjYWxsYmFja3M+CitTU0xfQ0FDRVJUX0JBREZJTEUJPGNvdWxkIG5vdCBsb2FkIENBQ0VSVCBmaWxlPgorUkVNT1RFX0ZJTEVfTk9UX0ZPVU5ECTxyZW1vdGUgZmlsZSBub3QgZm91bmQ+CitTU0gJCQk8dW5zcGVjaWZpZWQgZXJyb3IgZnJvbSB0aGUgU1NIIGxheWVyPgorU1NMX1NIVVRET1dOX0ZBSUxFRAk8ZmFpbGVkIHRvIHNodXQgZG93biB0aGUgU1NMIGNvbm5lY3Rpb24+CitBR0FJTgkJCTxzb2NrZXQgbm90IHJlYWR5LCB3YWl0IGFuZCB0cnkgYWdhaW4+CitTU0xfQ1JMX0JBREZJTEUJCTxjb3VsZCBub3QgbG9hZCBDUkwgZmlsZSwgbWlzc2luZyBvciB3cm9uZyBmb3JtYXQ+CitTU0xfSVNTVUVSX0VSUk9SCTxpc3N1ZXIgY2hlY2sgZmFpbGVkPgorQ1VSTF9MQVNUCQk8Q1VSTE1TRy5NU0cgaXMgb3V0IG9mIHN5bmMgd2l0aCB0aGUgc291cmNlIGNvZGU+CisKKy5FTkQKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9jdXJsbXNnLnNkbCBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9jdXJsbXNnLnNkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTkyYzA3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL2N1cmxtc2cuc2RsCkBAIC0wLDAgKzEsMTE1IEBACisKKworIE1PRFVMRSAkQ1VSREVGOworCisvKgorLyogVGhpcyBTREwgRmlsZSBHZW5lcmF0ZWQgYnkgVkFYLTExIE1lc3NhZ2UgVjA0LTAwIG9uICAzLVNFUC0yMDA4IDEzOjMzOjU0LjA5CisvKgorLyogJElEOiBDVVJMTVNHLk1TRyxWIDEuNyAyMDA4LTA1LTMwIDIzOjUxOjA5IENVUkxWTVMgRVhQICQKKy8qCisvKiBUSEVTRSBWTVMgRVJST1IgQ09ERVMgQVJFIEdFTkVSQVRFRCBCWSBUQUtJTkcgQVBBUlQgVEhFIENVUkwuSAorLyogRklMRSBBTkQgUFVUVElORyBBTEwgVEhFIENVUkxFXyogRU5VTSBTVFVGRiBJTlRPIFRISVMgRklMRSwKKy8qIENVUkxNU0cuTVNHLiAgQU4gLlNETCBGSUxFIElTIENSRUFURUQgRlJPTSBUSElTIEZJTEUgV0lUSAorLyogTUVTU0FHRS9TREwuICBUSEUgLkggRklMRSBJUyBDUkVBVEVEIFVTSU5HIFRIRSBGUkVFV0FSRSBTREwgVE9PTAorLyogQUdBSU5TVCBUSEUgLlNETCBGSUxFIFdJVEggU0RML0FMUEhBL0xBTkc9Q0MgQ09NTUFORC4KKy8qCisvKiBXSVRIIFRIRSBFWENFUFRJT04gT0YgQ1VSTEVfT0ssIEFMTCBPRiBUSEUgTUVTU0FHRVMgQVJFIEFUCisvKiBUSEUgRVJST1IgU0VWRVJJVFkgTEVWRUwuICBXSVRIIFRIRSBFWENFUFRJT04gT0YKKy8qIFBFRVJfRkFJTEVEX1ZFUklGLCBXSElDSCBJUyBBIFNIT1JURU5FRCBGT1JNIE9GCisvKiBQRUVSX0ZBSUxFRF9WRVJJRklDQVRJT04sIFRIRVNFIEFSRSBUSEUgU0FNRSBOQU1FUyBBUyBUSEUKKy8qIENVUkxFXyBPTkVTIElOIElOQ0xVREUvQ1VSTC5ILiAgVEhFIE1FU1NBR0UgVVRJTElUWSBNQU5VQUwgU1RBVEVTCisvKiAiVEhFIENPTUJJTkVEIExFTkdUSCBPRiBUSEUgUFJFRklYIEFORCBUSEUgTUVTU0FHRSBTWU1CT0wgTkFNRSBDQU5OT1QKKy8qIEVYQ0VFRCAzMSBDSEFSQUNURVJTLiIgIFdJVEggQSBQUkVGSVggT0YgRklWRSBUSEFUIExFQVZFUyBVUyBXSVRIIDI2CisvKiBGT1IgVEhFIE1FU1NBR0UgTkFNRS4KKy8qCisvKiBJRiBZT1UgVVBEQVRFIFRISVMgRklMRSBBTFNPIFVQREFURSBDVVJMTVNHX1ZNUy5IIFNPIFRIQVQgVEhFWSBBUkUgSU4gU1lOQworLyoKKyAgICBDT05TVEFOVAorICAgICAgICAiRkFDSUxJVFkiICAgICBFUVVBTFMgMzg0MSAgICAgICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiT0siICAgICAgICAgICBFUVVBTFMgJVgwRjAxODAwOSAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlVOU1VQUE9SVEVEX1BST1RPQ09MIiBFUVVBTFMgJVgwRjAxODAxMiBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiRkFJTEVEX0lOSVQiICBFUVVBTFMgJVgwRjAxODAxQSAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlVSTF9NQUxGT1JNQVQiIEVRVUFMUyAlWDBGMDE4MDIyICAgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJPQlNPTEVURTQiICAgIEVRVUFMUyAlWDBGMDE4MDJBICAgICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiQ09VTEROVF9SRVNPTFZFX1BST1hZIiBFUVVBTFMgJVgwRjAxODAzMiBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiQ09VTEROVF9SRVNPTFZFX0hPU1QiIEVRVUFMUyAlWDBGMDE4MDNBIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJDT1VMRE5UX0NPTk5FQ1QiIEVRVUFMUyAlWDBGMDE4MDQyICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiRlRQX1dFSVJEX1NFUlZFUl9SRVBMWSIgRVFVQUxTICVYMEYwMTgwNEEgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIkZUUF9BQ0NFU1NfREVOSUVEIiBFUVVBTFMgJVgwRjAxODA1MiBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiT0JTT0xFVEUxMCIgICBFUVVBTFMgJVgwRjAxODA1QSAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIkZUUF9XRUlSRF9QQVNTX1JFUExZIiBFUVVBTFMgJVgwRjAxODA2MiBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiT0JTT0xFVEUxMiIgICBFUVVBTFMgJVgwRjAxODA2QSAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIkZUUF9XRUlSRF9QQVNWX1JFUExZIiBFUVVBTFMgJVgwRjAxODA3MiBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiRlRQX1dFSVJEXzIyN19GT1JNQVQiIEVRVUFMUyAlWDBGMDE4MDdBIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJGVFBfQ0FOVF9HRVRfSE9TVCIgRVFVQUxTICVYMEYwMTgwODIgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIk9CU09MRVRFMTYiICAgRVFVQUxTICVYMEYwMTgwOEEgICAgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJGVFBfQ09VTEROVF9TRVRfVFlQRSIgRVFVQUxTICVYMEYwMTgwOTIgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlBBUlRJQUxfRklMRSIgRVFVQUxTICVYMEYwMTgwOUEgICAgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJGVFBfQ09VTEROVF9SRVRSX0ZJTEUiIEVRVUFMUyAlWDBGMDE4MEEyIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJPQlNPTEVURTIwIiAgIEVRVUFMUyAlWDBGMDE4MEFBICAgICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiUVVPVEVfRVJST1IiICBFUVVBTFMgJVgwRjAxODBCMiAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIkhUVFBfUkVUVVJORURfRVJST1IiIEVRVUFMUyAlWDBGMDE4MEJBIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJXUklURV9FUlJPUiIgIEVRVUFMUyAlWDBGMDE4MEMyICAgICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiT0JTT0xFVEUyNCIgICBFUVVBTFMgJVgwRjAxODBDQSAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlVQTE9BRF9GQUlMRUQiIEVRVUFMUyAlWDBGMDE4MEQyICAgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJSRUFEX0VSUk9SIiAgIEVRVUFMUyAlWDBGMDE4MERBICAgICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiT1VUX09GX01FTU9SWSIgRVFVQUxTICVYMEYwMTgwRTIgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIk9QRVJBVElPTl9USU1FT1VURUQiIEVRVUFMUyAlWDBGMDE4MEVBIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJPQlNPTEVURTI5IiAgIEVRVUFMUyAlWDBGMDE4MEYyICAgICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiRlRQX1BPUlRfRkFJTEVEIiBFUVVBTFMgJVgwRjAxODBGQSAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIkZUUF9DT1VMRE5UX1VTRV9SRVNUIiBFUVVBTFMgJVgwRjAxODEwMiBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiT0JTT0xFVEUzMiIgICBFUVVBTFMgJVgwRjAxODEwQSAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlJBTkdFX0VSUk9SIiAgRVFVQUxTICVYMEYwMTgxMTIgICAgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJIVFRQX1BPU1RfRVJST1IiIEVRVUFMUyAlWDBGMDE4MTFBICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiU1NMX0NPTk5FQ1RfRVJST1IiIEVRVUFMUyAlWDBGMDE4MTIyIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJCQURfRE9XTkxPQURfUkVTVU1FIiBFUVVBTFMgJVgwRjAxODEyQSBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiRklMRV9DT1VMRE5UX1JFQURfRklMRSIgRVFVQUxTICVYMEYwMTgxMzIgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIkxEQVBfQ0FOTk9UX0JJTkQiIEVRVUFMUyAlWDBGMDE4MTNBIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJMREFQX1NFQVJDSF9GQUlMRUQiIEVRVUFMUyAlWDBGMDE4MTQyIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJPQlNPTEVURTQwIiAgIEVRVUFMUyAlWDBGMDE4MTRBICAgICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiRlVOQ1RJT05fTk9UX0ZPVU5EIiBFUVVBTFMgJVgwRjAxODE1MiBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiQUJPUlRFRF9CWV9DQUxMQkFDSyIgRVFVQUxTICVYMEYwMTgxNUEgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIkJBRF9GVU5DVElPTl9BUkdVTUVOVCIgRVFVQUxTICVYMEYwMTgxNjIgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIk9CU09MRVRFNDQiICAgRVFVQUxTICVYMEYwMTgxNkEgICAgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJJTlRFUkZBQ0VfRkFJTEVEIiBFUVVBTFMgJVgwRjAxODE3MiBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiT0JTT0xFVEU0NiIgICBFUVVBTFMgJVgwRjAxODE3QSAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlRPT19NQU5ZX1JFRElSRUNUUyIgRVFVQUxTICVYMEYwMTgxODIgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlVOS05PV05fVEVMTkVUX09QVElPTiIgRVFVQUxTICVYMEYwMTgxOEEgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlRFTE5FVF9PUFRJT05fU1lOVEFYIiBFUVVBTFMgJVgwRjAxODE5MiBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiT0JTT0xFVEU1MCIgICBFUVVBTFMgJVgwRjAxODE5QSAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlBFRVJfRkFJTEVEX1ZFUklGIiBFUVVBTFMgJVgwRjAxODFBMiBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiR09UX05PVEhJTkciICBFUVVBTFMgJVgwRjAxODFBQSAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlNTTF9FTkdJTkVfTk9URk9VTkQiIEVRVUFMUyAlWDBGMDE4MUIyIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJTU0xfRU5HSU5FX1NFVEZBSUxFRCIgRVFVQUxTICVYMEYwMTgxQkEgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlNFTkRfRVJST1IiICAgRVFVQUxTICVYMEYwMTgxQzIgICAgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJSRUNWX0VSUk9SIiAgIEVRVUFMUyAlWDBGMDE4MUNBICAgICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiT0JTT0xFVEU1NyIgICBFUVVBTFMgJVgwRjAxODFEMiAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlNTTF9DRVJUUFJPQkxFTSIgRVFVQUxTICVYMEYwMTgxREEgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJTU0xfQ0lQSEVSIiAgIEVRVUFMUyAlWDBGMDE4MUUyICAgICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiU1NMX0NBQ0VSVCIgICBFUVVBTFMgJVgwRjAxODFFQSAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIkJBRF9DT05URU5UX0VOQ09ESU5HIiBFUVVBTFMgJVgwRjAxODFGMiBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiTERBUF9JTlZBTElEX1VSTCIgRVFVQUxTICVYMEYwMTgxRkEgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIkZJTEVTSVpFX0VYQ0VFREVEIiBFUVVBTFMgJVgwRjAxODIwMiBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiVVNFX1NTTF9GQUlMRUQiIEVRVUFMUyAlWDBGMDE4MjBBICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlNFTkRfRkFJTF9SRVdJTkQiIEVRVUFMUyAlWDBGMDE4MjEyIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJTU0xfRU5HSU5FX0lOSVRGQUlMRUQiIEVRVUFMUyAlWDBGMDE4MjFBIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJMT0dJTl9ERU5JRUQiIEVRVUFMUyAlWDBGMDE4MjIyICAgICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiVEZUUF9OT1RGT1VORCIgRVFVQUxTICVYMEYwMTgyMkEgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlRGVFBfUEVSTSIgICAgRVFVQUxTICVYMEYwMTgyMzIgICAgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJSRU1PVEVfRElTS19GVUxMIiBFUVVBTFMgJVgwRjAxODIzQSBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiVEZUUF9JTExFR0FMIiBFUVVBTFMgJVgwRjAxODI0MiAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIlRGVFBfVU5LTk9XTklEIiBFUVVBTFMgJVgwRjAxODI0QSAgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJSRU1PVEVfRklMRV9FWElTVFMiIEVRVUFMUyAlWDBGMDE4MjUyIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJURlRQX05PU1VDSFVTRVIiIEVRVUFMUyAlWDBGMDE4MjVBICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiQ09OVl9GQUlMRUQiICBFUVVBTFMgJVgwRjAxODI2MiAgICAgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIkNPTlZfUkVRRCIgICAgRVFVQUxTICVYMEYwMTgyNkEgICAgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJTU0xfQ0FDRVJUX0JBREZJTEUiIEVRVUFMUyAlWDBGMDE4MjcyIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJSRU1PVEVfRklMRV9OT1RfRk9VTkQiIEVRVUFMUyAlWDBGMDE4MjdBIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJTU0giICAgICAgICAgIEVRVUFMUyAlWDBGMDE4MjgyICAgICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiU1NMX1NIVVRET1dOX0ZBSUxFRCIgRVFVQUxTICVYMEYwMTgyOEEgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIkFHQUlOIiAgICAgICAgRVFVQUxTICVYMEYwMTgyOTIgICAgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJTU0xfQ1JMX0JBREZJTEUiIEVRVUFMUyAlWDBGMDE4MjlBICBQUkVGSVggIkNVUkwiIFRBRyAiIgorICAgICAgICwiU1NMX0lTU1VFUl9FUlJPUiIgRVFVQUxTICVYMEYwMTgyQTIgUFJFRklYICJDVVJMIiBUQUcgIiIKKyAgICAgICAsIkNVUkxfTEFTVCIgICAgRVFVQUxTICVYMEYwMTgyQUEgICAgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgOworIEVORF9NT0RVTEU7CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvY3VybG1zZ192bXMuaCBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9jdXJsbXNnX3Ztcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzY5NzMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvY3VybG1zZ192bXMuaApAQCAtMCwwICsxLDE0MSBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTE1TR19WTVNfSAorI2RlZmluZSBIRUFERVJfQ1VSTE1TR19WTVNfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogQ1VSTE1TR19WTVMuSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFRoaXMgZGVmaW5lcyB0aGUgbmVjZXNzYXJ5IGJpdHMgdG8gY2hhbmdlIENVUkxFXyogZXJyb3IgY29kZXMgdG8gVk1TICAgICAqLworLyogc3R5bGUgZXJyb3IgY29kZXMuICBDVVJMTVNHLkggaXMgYnVpbHQgZnJvbSBDVVJMTVNHLlNETCB3aGljaCBpcyBidWlsdCAgICovCisvKiBmcm9tIENVUkxNU0cuTVNHLiAgVGhlIHZtc19jb25kIGFycmF5IGlzIHVzZWQgdG8gcmV0dXJuIFZNUyBlcnJvcnMgYnkgICAgKi8KKy8qIHB1dHRpbmcgdGhlIFZNUyBlcnJvciBjb2RlcyBpbnRvIHRoZSBhcnJheSBvZmZzZXQgYmFzZWQgb24gQ1VSTEVfKiBjb2RlLiAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBJZiB5b3UgdXBkYXRlIENVUkxNU0cuTVNHIG1ha2Ugc3VyZSB0byB1cGRhdGUgdGhpcyBmaWxlIHRvIG1hdGNoLiAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaW5jbHVkZSAiY3VybG1zZy5oIgorCisvKgorI2RlZmluZSAgIEZBQ19DVVJMICAgICAgMHhDMDEKKyNkZWZpbmUgICBGQUNfU1lTVEVNICAgIDAKKyNkZWZpbmUgICBNU0dfTk9STUFMICAgIDAKKyovCisKKy8qCisjZGVmaW5lICAgU0VWX1dBUk5JTkcgICAwCisjZGVmaW5lICAgU0VWX1NVQ0NFU1MgICAxCisjZGVmaW5lICAgU0VWX0VSUk9SICAgICAyCisjZGVmaW5lICAgU0VWX0lORk8gICAgICAzCisjZGVmaW5lICAgU0VWX0ZBVEFMICAgICA0CisqLworCitzdGF0aWMgY29uc3QgbG9uZyB2bXNfY29uZFtdID0KKyAgICAgICAgeworICAgICAgICBDVVJMX09LLAorCUNVUkxfVU5TVVBQT1JURURfUFJPVE9DT0wsCisJQ1VSTF9GQUlMRURfSU5JVCwKKwlDVVJMX1VSTF9NQUxGT1JNQVQsCisJQ1VSTF9PQlNPTEVURTQsCisJQ1VSTF9DT1VMRE5UX1JFU09MVkVfUFJPWFksCisJQ1VSTF9DT1VMRE5UX1JFU09MVkVfSE9TVCwKKwlDVVJMX0NPVUxETlRfQ09OTkVDVCwKKwlDVVJMX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFksCisJQ1VSTF9GVFBfQUNDRVNTX0RFTklFRCwKKwlDVVJMX09CU09MRVRFMTAsCisJQ1VSTF9GVFBfV0VJUkRfUEFTU19SRVBMWSwKKwlDVVJMX09CU09MRVRFMTIsCisJQ1VSTF9GVFBfV0VJUkRfUEFTVl9SRVBMWSwKKwlDVVJMX0ZUUF9XRUlSRF8yMjdfRk9STUFULAorCUNVUkxfRlRQX0NBTlRfR0VUX0hPU1QsCisJQ1VSTF9PQlNPTEVURTE2LAorCUNVUkxfRlRQX0NPVUxETlRfU0VUX1RZUEUsCisJQ1VSTF9QQVJUSUFMX0ZJTEUsCisJQ1VSTF9GVFBfQ09VTEROVF9SRVRSX0ZJTEUsCisJQ1VSTF9PQlNPTEVURTIwLAorCUNVUkxfUVVPVEVfRVJST1IsCisJQ1VSTF9IVFRQX1JFVFVSTkVEX0VSUk9SLAorCUNVUkxfV1JJVEVfRVJST1IsCisJQ1VSTF9PQlNPTEVURTI0LAorCUNVUkxfVVBMT0FEX0ZBSUxFRCwKKwlDVVJMX1JFQURfRVJST1IsCisJQ1VSTF9PVVRfT0ZfTUVNT1JZLAorCUNVUkxfT1BFUkFUSU9OX1RJTUVPVVRFRCwKKwlDVVJMX09CU09MRVRFMjksCisJQ1VSTF9GVFBfUE9SVF9GQUlMRUQsCisJQ1VSTF9GVFBfQ09VTEROVF9VU0VfUkVTVCwKKwlDVVJMX09CU09MRVRFMzIsCisJQ1VSTF9SQU5HRV9FUlJPUiwKKwlDVVJMX0hUVFBfUE9TVF9FUlJPUiwKKwlDVVJMX1NTTF9DT05ORUNUX0VSUk9SLAorCUNVUkxfQkFEX0RPV05MT0FEX1JFU1VNRSwKKwlDVVJMX0ZJTEVfQ09VTEROVF9SRUFEX0ZJTEUsCisJQ1VSTF9MREFQX0NBTk5PVF9CSU5ELAorCUNVUkxfTERBUF9TRUFSQ0hfRkFJTEVELAorCUNVUkxfT0JTT0xFVEU0MCwKKwlDVVJMX0ZVTkNUSU9OX05PVF9GT1VORCwKKwlDVVJMX0FCT1JURURfQllfQ0FMTEJBQ0ssCisJQ1VSTF9CQURfRlVOQ1RJT05fQVJHVU1FTlQsCisJQ1VSTF9PQlNPTEVURTQ0LAorCUNVUkxfSU5URVJGQUNFX0ZBSUxFRCwKKwlDVVJMX09CU09MRVRFNDYsCisJQ1VSTF9UT09fTUFOWV9SRURJUkVDVFMsCisJQ1VSTF9VTktOT1dOX1RFTE5FVF9PUFRJT04sCisJQ1VSTF9URUxORVRfT1BUSU9OX1NZTlRBWCwKKwlDVVJMX09CU09MRVRFNTAsCisJQ1VSTF9QRUVSX0ZBSUxFRF9WRVJJRiwKKwlDVVJMX0dPVF9OT1RISU5HLAorCUNVUkxfU1NMX0VOR0lORV9OT1RGT1VORCwKKwlDVVJMX1NTTF9FTkdJTkVfU0VURkFJTEVELAorCUNVUkxfU0VORF9FUlJPUiwKKwlDVVJMX1JFQ1ZfRVJST1IsCisJQ1VSTF9PQlNPTEVURTU3LAorCUNVUkxfU1NMX0NFUlRQUk9CTEVNLAorCUNVUkxfU1NMX0NJUEhFUiwKKwlDVVJMX1NTTF9DQUNFUlQsCisJQ1VSTF9CQURfQ09OVEVOVF9FTkNPRElORywKKwlDVVJMX0xEQVBfSU5WQUxJRF9VUkwsCisJQ1VSTF9GSUxFU0laRV9FWENFRURFRCwKKwlDVVJMX1VTRV9TU0xfRkFJTEVELAorCUNVUkxfU0VORF9GQUlMX1JFV0lORCwKKwlDVVJMX1NTTF9FTkdJTkVfSU5JVEZBSUxFRCwKKwlDVVJMX0xPR0lOX0RFTklFRCwKKwlDVVJMX1RGVFBfTk9URk9VTkQsCisJQ1VSTF9URlRQX1BFUk0sCisJQ1VSTF9SRU1PVEVfRElTS19GVUxMLAorCUNVUkxfVEZUUF9JTExFR0FMLAorCUNVUkxfVEZUUF9VTktOT1dOSUQsCisJQ1VSTF9SRU1PVEVfRklMRV9FWElTVFMsCisJQ1VSTF9URlRQX05PU1VDSFVTRVIsCisJQ1VSTF9DT05WX0ZBSUxFRCwKKwlDVVJMX0NPTlZfUkVRRCwKKwlDVVJMX1NTTF9DQUNFUlRfQkFERklMRSwKKwlDVVJMX1JFTU9URV9GSUxFX05PVF9GT1VORCwKKwlDVVJMX1NTSCwKKwlDVVJMX1NTTF9TSFVURE9XTl9GQUlMRUQsCisJQ1VSTF9BR0FJTiwKKwlDVVJMRV9TU0xfQ1JMX0JBREZJTEUsCisJQ1VSTEVfU1NMX0lTU1VFUl9FUlJPUiwKKyAgICAgICAgQ1VSTF9DVVJMX0xBU1QKKyAgICAgICAgfTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMTVNHX1ZNU19IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvaHBzc2xfYWxwaGEub3B0IGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL2hwc3NsX2FscGhhLm9wdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQ5ZmJkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL2hwc3NsX2FscGhhLm9wdApAQCAtMCwwICsxLDIgQEAKK1NZUyRMSUJSQVJZOlNTTCRMSUJDUllQVE9fU0hSMzIuRVhFL1NIQVJFCitTWVMkTElCUkFSWTpTU0wkTElCU1NMX1NIUjMyLkVYRS9TSEFSRQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL2hwc3NsX2lhNjQub3B0IGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL2hwc3NsX2lhNjQub3B0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMjIwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvaHBzc2xfaWE2NC5vcHQKQEAgLTAsMCArMSwyIEBACitTWVMkTElCUkFSWTpTU0wkTElCQ1JZUFRPX1NIUi5FWEUvU0hBUkUKK1NZUyRMSUJSQVJZOlNTTCRMSUJTU0xfU0hSLkVYRS9TSEFSRQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL2hwc3NsX3ZheC5vcHQgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvaHBzc2xfdmF4Lm9wdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQ5ZmJkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL2hwc3NsX3ZheC5vcHQKQEAgLTAsMCArMSwyIEBACitTWVMkTElCUkFSWTpTU0wkTElCQ1JZUFRPX1NIUjMyLkVYRS9TSEFSRQorU1lTJExJQlJBUlk6U1NMJExJQlNTTF9TSFIzMi5FWEUvU0hBUkUKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9sZGFwLm9wdCBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9sZGFwLm9wdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2YxZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL2xkYXAub3B0CkBAIC0wLDAgKzEgQEAKK1NZUyRTSEFSRTpMREFQJFNIUi5FWEUgL1NIQVJFCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvb3BlbnNzbF9hbHBoYS5vcHQgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvb3BlbnNzbF9hbHBoYS5vcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0NTExOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9vcGVuc3NsX2FscGhhLm9wdApAQCAtMCwwICsxLDIgQEAKK1NTTExJQjpMSUJDUllQVE8uRVhFIC9TSEFSRQorU1NMTElCOkxJQlNTTC5FWEUgL1NIQVJFCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvb3BlbnNzbF9pYTY0Lm9wdCBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9vcGVuc3NsX2lhNjQub3B0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDUxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvb3BlbnNzbF9pYTY0Lm9wdApAQCAtMCwwICsxLDIgQEAKK1NTTExJQjpMSUJDUllQVE8uRVhFIC9TSEFSRQorU1NMTElCOkxJQlNTTC5FWEUgL1NIQVJFCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvb3BlbnNzbF9zc2xfYWxwaGEub3B0IGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL29wZW5zc2xfc3NsX2FscGhhLm9wdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzI2YzJmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL29wZW5zc2xfc3NsX2FscGhhLm9wdApAQCAtMCwwICsxLDIgQEAKK1NTTExJQjpTU0xfTElCQ1JZUFRPLkVYRSAvU0hBUkUKK1NTTExJQjpTU0xfTElCU1NMLkVYRSAvU0hBUkUKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9vcGVuc3NsX3NzbF9pYTY0Lm9wdCBiL2N1cmwtNy4yNS4wL3BhY2thZ2VzL3Ztcy9vcGVuc3NsX3NzbF9pYTY0Lm9wdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzI2YzJmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL29wZW5zc2xfc3NsX2lhNjQub3B0CkBAIC0wLDAgKzEsMiBAQAorU1NMTElCOlNTTF9MSUJDUllQVE8uRVhFIC9TSEFSRQorU1NMTElCOlNTTF9MSUJTU0wuRVhFIC9TSEFSRQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL29wZW5zc2xfc3NsX3ZheC5vcHQgYi9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvb3BlbnNzbF9zc2xfdmF4Lm9wdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzI2YzJmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL29wZW5zc2xfc3NsX3ZheC5vcHQKQEAgLTAsMCArMSwyIEBACitTU0xMSUI6U1NMX0xJQkNSWVBUTy5FWEUgL1NIQVJFCitTU0xMSUI6U1NMX0xJQlNTTC5FWEUgL1NIQVJFCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvb3BlbnNzbF92YXgub3B0IGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL29wZW5zc2xfdmF4Lm9wdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQ1MTE5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL29wZW5zc2xfdmF4Lm9wdApAQCAtMCwwICsxLDIgQEAKK1NTTExJQjpMSUJDUllQVE8uRVhFIC9TSEFSRQorU1NMTElCOkxJQlNTTC5FWEUgL1NIQVJFCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9wYWNrYWdlcy92bXMvcmVhZG1lIGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL3JlYWRtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmZkZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvcGFja2FnZXMvdm1zL3JlYWRtZQpAQCAtMCwwICsxLDcwIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgKCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBPcGVuVk1TCisKK0hpc3Rvcnk6CisKKyA5LU1BUi0yMDA0LCBDcmVhdGVkIHRoaXMgcmVhZG1lLiBmaWxlLiAgTWFydHkgS3VocnQgKE1TSykuCisxNS1NQVItMjAwNCwgTVNLLCBVcGRhdGVkIHRvIHJlZmxlY3QgdGhlIG5ldyBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4KKzE0LUZFQi0yMDA1LCBNU0ssIHJlbW92ZWQgY29uZmlnLXZtcy5oX3dpdGgqIGZpbGUgY29tbWVudHMKKzEwLUZFQi0yMDEwLCBTTVMuIEdlbmVyYWwgdXBkYXRlLgorCitQcmVyZXF1aXNpdGVzOgorCitPcGVuVk1TIFY3LjAgb3IgbGF0ZXIgKGFueSBwbGF0Zm9ybSkKK0RFQ0MgVjYuNSBvciBsYXRlcgorT3BlblNTTCBvciBocCBTU0wsIGlmIHlvdSB3YW50IFNTTCBzdXBwb3J0CisKK1doYXQgaXMgSGVyZToKKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmaWxlczoKKworYnVpbGRfdm1zLmNvbSAgICAgICAgICAgQnVpbGQgcHJvY2VkdXJlLgorY29uZmlnLXZtcy5oICAgICAgICAgICAgVk1TLXNwZWNpZmljIGNvbmZpZy5oLgorY3VybG1zZy5oICAgICAgICAgICAgICAgQyBoZWFkZXIgZGVmaW5pbmcgY1VSTCBzdGF0dXMgY29kZSBtYWNyb3MuCitjdXJsbXNnLm1zZyAgICAgICAgICAgICBFcnJvciBtZXNzYWdlIHNvdXJjZSBmb3IgY3VybG1zZy5oIGFuZCBjdXJsbXNnLnNkbC4KK2N1cmxtc2cuc2RsICAgICAgICAgICAgIFNETCBzb3VyY2UgZGVmaW5pbmcgY1VSTCBzdGF0dXMgY29kZSBjb25zdGFudHMuCitjdXJsbXNnX3Ztcy5oICAgICAgICAgICBNYXBwaW5nIG9mIGNVUkwgc3RhdHVzIGNvZGVzIHRvIFZNUy1mb3JtIGNvZGVzLgoraHBzc2xfYWxwaGEub3B0ICAgICAgICAgTElOSyBvcHRpb25zIGZpbGUgZm9yIEhQIFNTTCBvbiBBbHBoYS4KK2hwc3NsX2lhNjQub3B0ICAgICAgICAgIExJTksgb3B0aW9ucyBmaWxlIGZvciBIUCBTU0wgb24gSUE2NC4KK2hwc3NsX3ZheC5vcHQgICAgICAgICAgIExJTksgb3B0aW9ucyBmaWxlIGZvciBIUCBTU0wgb24gVkFYLgorbGRhcC5vcHQgICAgICAgICAgICAgICAgTElOSyBvcHRpb25zIGZpbGUgZm9yIExEQVAuCitNYWtlZmlsZS5hbSAgICAgICAgICAgICBjVVJMIGtpdCBmaWxlIGxpc3QgZm9yIHRoaXMgZGlyZWN0b3J5LgorTWFrZWZpbGUuaW4gICAgICAgICAgICAgY1VSTCBraXQgbWFrZWZpbGUgc291cmNlIGZvciB0aGlzIGRpcmVjdG9yeS4KK29wZW5zc2xfYWxwaGEub3B0ICAgICAgIExJTksgb3B0aW9ucyBmaWxlIGZvciBPcGVuU1NMIG9uIEFscGhhLgorb3BlbnNzbF9pYTY0Lm9wdCAgICAgICAgTElOSyBvcHRpb25zIGZpbGUgZm9yIE9wZW5TU0wgb24gSUE2NC4KK29wZW5zc2xfc3NsX2FscGhhLm9wdCAgIExJTksgb3B0aW9ucyBmaWxlIGZvciBPcGVuU1NMIChTU0xfIHByZWZpeCkgb24gQWxwaGEuCitvcGVuc3NsX3NzbF9pYTY0Lm9wdCAgICBMSU5LIG9wdGlvbnMgZmlsZSBmb3IgT3BlblNTTCAoU1NMXyBwcmVmaXgpIG9uIElBNjQuCitvcGVuc3NsX3NzbF92YXgub3B0ICAgICBMSU5LIG9wdGlvbnMgZmlsZSBmb3IgT3BlblNTTCAoU1NMXyBwcmVmaXgpIG9uIFZBWC4KK29wZW5zc2xfdmF4Lm9wdCAgICAgICAgIExJTksgb3B0aW9ucyBmaWxlIGZvciBPcGVuU1NMIG9uIFZBWC4KK3JlYWRtZS4gICAgICAgICAgICAgICAgIFRoaXMgZmlsZS4KKworCitIb3cgdG8gQnVpbGQ6CisKK1RoZSAoYnJ1dGUtZm9yY2UpIGJ1aWxkZXIgaXMgWy5wYWNrYWdlcy52bXNdYnVpbGRfdm1zLmNvbS4gIENvbW1lbnRzIGluCit0aGlzIHByb2NlZHVyZSBkZXNjcmliZSB2YXJpb3VzIG9wdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggZW5hYmxlIG9yCitkaXNhYmxlIG9wdGlvbmFsIHByb2dyYW0gZmVhdHVyZXMsIG9yIHdoaWNoIGNvbnRyb2wgdGhlIGJ1aWxkIGluIG90aGVyCit3YXlzLiAgUHJvZHVjdCBmaWxlcyAoLkVYRSwgLkgsIC5MSVMsIC5NQVAsIC5PQkosIC5PTEIsIC4uLikgc2hvdWxkIGJlCitwcm9kdWNlZCBpbiBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3ViZGlyZWN0b3J5IHVuZGVyIHRoaXMgZGlyZWN0b3J5CisoWy5BTFBIQV0sIFsuSUE2NF0sIFsuVkFYXSkuCisKKyAgIEV4YW1wbGUgYnVpbGQgY29tbWFuZHM6CisKKyAgICAgIEAgWy5wYWNrYWdlcy52bXNdYnVpbGRfdm1zLmNvbSBDTEVBTgorICAgICAgQCBbLnBhY2thZ2VzLnZtc11idWlsZF92bXMuY29tIExBUkdFIExEQVAKKyAgICAgIHN1Ym1pdCAvbm9wcmludCBbLnBhY2thZ2VzLnZtc11idWlsZF92bXMuY29tIC9wYXJhbSA9IChMQVJHRSwgTERBUCkKKworCitPdGhlciBOb3RlczoKKworVGhlIHRlc3Qgc3VpdGVzIGFyZSBub3Qgc3VwcG9ydGVkIGFzIG9mIDcuMTEuMC4KKworVGhlIGN1cmxtc2cuc2RsIGFuZCBjdXJsbXNnLmggZmlsZXMgYXJlIGdlbmVyYXRlZCBmcm9tIGN1cmxtc2cubXNnLgorVGhpcyBpcyBub3QgZG9uZSBhdXRvbWF0aWNhbGx5LCBzaW5jZSB0aGUgLk1TRyBmaWxlIGlzIGEgaGFuZCBlZGl0CitvZiB0aGUgcmVsZXZhbnQgc3R1ZmYgZnJvbSB0aGUgY3VybC5oIGZpbGUuICBJZiB5b3Ugd2FudCB0byBkbyB0aGlzCit5b3Vyc2VsZiB5b3UnbGwgbmVlZCB0aGUgU0RMIHBhY2thZ2UgZnJvbSB0aGUgZnJlZXdhcmUgY29sbGVjdGlvbi4KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc2FtcGxlLmVtYWNzIGIvY3VybC03LjI1LjAvc2FtcGxlLmVtYWNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NDcwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zYW1wbGUuZW1hY3MKQEAgLTAsMCArMSw0NSBAQAorCis7OyBUaGlzIGZpbGUgd2FzIGNvbnRyaWJ1dGVkIGJ5IE1hdHMgTGlkZWxsCisKKzs7IEhlcmUncyBhIHNhbXBsZSAuZW1hY3MgZmlsZSB0aGF0IG1pZ2h0IGhlbHAgeW91IGFsb25nIHRoZSB3YXkuCisKKzs7IEZpcnN0IGNvbWVzIGEgc2V0dXAgdGhhdCBpcyBpZGVhbCB3aGVuIHlvdSBhcmUgb25seSB3b3JraW5nIHdpdGggY3VybC4gSnVzdAorOzsgc2VsZWN0IHRoZSBuZXh0IGZldyBsaW5lcywgcGFzdGUgaXQgaW50byB5b3VyIC5lbWFjcyBhbmQgY2hhbmdlIHRoZSBwYXRoIHRvCis7OyB0aGUgdG9vbHMgZm9sZGVyLiAoSWYgeW91IGFyZSB1c2luZyBtb3JlIHRoYW4gb25lIHN0eWxlLiBMb29rIGZ1cnRoZXIgZG93bgorOzsgdGhpcyBmaWxlLikKKworKGxvYWQtZmlsZSAiPFlPVVItUEFUSC1UTy1DVVJMPi9jdXJsLXN0eWxlLmVsIikKKyhhZGQtaG9vayAnYy1tb2RlLWNvbW1vbi1ob29rICdjdXJsLWMtbW9kZS1jb21tb24taG9vaykKKworOzsgSWYgeW91IGFyZSB1c2luZyBtb3JlIHRoYW4gb25lIHN0eWxlIGluIG1heWJlIG1vcmUgdGhhbiBvbmUgcHJvamVjdCB0aGUKKzs7IGV4YW1wbGUgYmVsb3cgbWlnaHQgaGVscCBvdXQuIEl0IHVzZXMgYSBwcmVkaWNhdGUgaG9vayBwYWlyIHRvIHNlbGVjdCB0aGUKKzs7IHJpZ2h0IGhvb2sgdG8gdXNlLgorCisoZGVmdmFyIG15LXN0eWxlLXNlbGVjdGl2ZS1tb2RlLWhvb2sgbmlsCisgICJIb2xkcyBhIGxpc3Qgb2YgcHJlZGljYXRlIGFuZCBob29rcyBwYWlycy4gKGxpc3QgKFBSRURJQ0FURSAuIEhPT0spCisuLi4pIEl0IGlzIHVzZWQgYnkgbXktbW9kZS1zZWxlY3RpdmUtbW9vZC1ob29rLWZ1bmN0aW9uIGZvciBjaG9vc2luZwordGhlIHJpZ2h0IGhvb2sgdG8gcnVuLiIpCisKKyhkZWZ1biBteS1zdHlsZS1zZWxlY3RpdmUtbW9kZS1ob29rLWZ1bmN0aW9uICgpCisgICJSdW4gZWFjaCBQUkVESUNBVEUgaW4gYG15LXN0eWxlLXNlbGVjdGl2ZS1tb2RlLWhvb2snIHRvIHNlZSBpZiB0aGUgCitIT09LIGluIHRoZSBwYWlyIHNob3VsZCBiZSBleGVjdXRlZC4gSWYgdGhlIFBSRURJQ0FURSBldmFsdWF0ZSB0byBub24KK25pbCBIT09LIGlzIGV4ZWN1dGVkIGFuZCB0aGUgcmVzdCBvZiB0aGUgaG9va3MgYXJlIGlnbm9yZWQuIgorICAobGV0ICgoaCBteS1zdHlsZS1zZWxlY3RpdmUtbW9kZS1ob29rKSkKKyAgICAod2hpbGUgKG5vdCAoZXZhbCAoY2FhciBoKSkpCisgICAgICAoc2V0cSBoIChjZHIgaCkpKQorICAgIChmdW5jYWxsIChjZGFyIGgpKSkpCisKKzs7OyBFeGFtcGxlIGNvbmZpZ3VyYXRpb24uCis7OyBBZGQgdGhlIHNlbGVjdGl2ZSBob29rIHRvIHRoZSBjLW1vZGUtY29tbW9uLWhvb2sKKyhhZGQtaG9vayAnYy1tb2RlLWNvbW1vbi1ob29rICdteS1zdHlsZS1zZWxlY3RpdmUtbW9kZS1ob29rLWZ1bmN0aW9uKQorCis7OyBBZGQgeW91ciBvd24gaG9va3MgYW5kIHByZWRpY2F0ZXMuIFRoZSBwcmVkaWNhdGUgc2hvdWxkIGV2YWx1YXRlIHRvCis7OyBub24gbmlsIGlmIHRoZSBob29rIGluIHRoZSBwYWlyIGlzIHN1cHBvc2VkIHRvIGJlIGV2YWx1YXRlZC4gSW4gdGhlCis7OyBleGFtcGxlIGEgcGFydCBvZiB0aGUgcGF0aCBpcyB1c2VkIHRvIHNlbGVjdCB3aGF0IHN0eWxlIHRvCis7OyB1c2UuIENob29zZSB3aGF0IGlzIGFwcHJvcHJpYXRlIGZvciB5b3UuCisoYWRkLWhvb2sgJ215LXN0eWxlLXNlbGVjdGl2ZS1tb2RlLWhvb2sgCisJICAnKChzdHJpbmctbWF0Y2ggImN1cmwiIChidWZmZXItZmlsZS1uYW1lKSkgLiBjdXJsLWMtbW9kZS1jb21tb24taG9vaykpCisoYWRkLWhvb2sgJ215LXN0eWxlLXNlbGVjdGl2ZS1tb2RlLWhvb2sgCisJICAnKChzdHJpbmctbWF0Y2ggIm90aGVyIiAoYnVmZmVyLWZpbGUtbmFtZSkpIC4gb3RoZXItYy1tb2RlLWNvbW1vbi1ob29rKSkKKzs7IE1ha2Ugc3VyZSB0aGUgZGVmYXVsdCBzdHlsZSBpcyBhcHBlbmRlZC4KKyhhZGQtaG9vayAnbXktc3R5bGUtc2VsZWN0aXZlLW1vZGUtaG9vayAnKHQgLiBteS1jLW1vZGUtY29tbW9uLWhvb2spIHQpCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvQ01ha2VMaXN0cy50eHQgYi9jdXJsLTcuMjUuMC9zcmMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI2OTMzZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDU4IEBACitzZXQoRVhFX05BTUUgY3VybCkKKworIyBGaXJzdCB0cnkgdG8gbG9jYXRlIGh1Z2VoZWxwLmMgdG8gc2VlIGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZAorIyBUT0RPIEZpbmQgdGhlIGZpbGUgV0lUSE9VVCBhZGRpbmcgYSBjYWNoZSBlbnRyeSEhISBPciBlbHNlIHRoZSB1c2VyIGNhbiBkZWxldGUgdGhlIGZpbGUgYWZ0ZXIgdGhlIHNjcmlwdCB3YXMgZmlyc3QgcnVuLCBhbmQgdGhlIHNjcmlwdCB3b24ndCBub3RpY2UgaXQgaGFzIGdvbmUuCitmaW5kX2ZpbGUoSFVHRUhFTFBfQ19GSUxFIGh1Z2VoZWxwLmMgUEFUSFMgLiBOT19ERUZBVUxUX1BBVEgpCitpZiAoTk9UIEhVR0VIRUxQX0NfRklMRSkKKyAgbWVzc2FnZShTVEFUVVMgIldhcm5pbmc6IGh1Z2VoZWxwLmMgZmlsZSB3YXMgbm90IGdlbmVyYXRlZCBiZWZvcmUuIEdlbmVyYXRpbmcgYW4gJ2VtcHR5JyBmaWxlLi4uIikKKyAgZmlsZShXUklURSBodWdlaGVscC5jICIvKiBidWlsdC1pbiBtYW51YWwgaXMgZGlzYWJsZWQsIGJsYW5rIGZ1bmN0aW9uICovXG4jaW5jbHVkZSBcImh1Z2VoZWxwLmhcIlxudm9pZCBodWdlaGVscCh2b2lkKSB7fVxuXG4iKQorZW5kaWYoKQorCit0cmFuc2Zvcm1fbWFrZWZpbGVfaW5jKCJNYWtlZmlsZS5pbmMiICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vTWFrZWZpbGUuaW5jLmNtYWtlIikKK2luY2x1ZGUoJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L01ha2VmaWxlLmluYy5jbWFrZSkKKworaWYoTVNWQykKKyAgbGlzdChBUFBFTkQgQ1VSTF9TT1VSQ0UgY3VybC5yYykKK2VuZGlmKCkKKworYWRkX2V4ZWN1dGFibGUoCisgICR7RVhFX05BTUV9CisgICR7Y3VybF9TT1VSQ0VTfQorICApCisKK3NvdXJjZV9ncm91cCgiY1VSTFggc291cmNlIGZpbGVzIiBGSUxFUyAke0NVUkxYX09ORVN9KQorc291cmNlX2dyb3VwKCJjVVJMIHNvdXJjZSBmaWxlcyIgRklMRVMgJHtDVVJMX0NGSUxFU30pCitzb3VyY2VfZ3JvdXAoImNVUkwgaGVhZGVyIGZpbGVzIiBGSUxFUyAke0NVUkxfSEZJTEVTfSkKKworaW5jbHVkZV9kaXJlY3RvcmllcygKKyAgJHtDVVJMX1NPVVJDRV9ESVJ9L2xpYiAgICAgICAgICAgICAgICAjIFRvIGJlIGFibGUgdG8gcmVhY2ggInNldHVwX29uY2UuaCIKKyAgJHtDVVJMX0JJTkFSWV9ESVJ9L2xpYiAgICAgICAgICAgICAgICAjIFRvIGJlIGFibGUgdG8gcmVhY2ggImN1cmxfY29uZmlnLmgiCisgICR7Q1VSTF9CSU5BUllfRElSfS9pbmNsdWRlICAgICMgVG8gYmUgYWJsZSB0byByZWFjaCAiY3VybC9jdXJsYnVpbGQuaCIKKyAgKQorCisKKyMgU2V0dXAgZGVwZW5kZW5jaWVzCitzZXR1cF9jdXJsX2RlcGVuZGVuY2llcygke0VYRV9OQU1FfSkKK3RhcmdldF9saW5rX2xpYnJhcmllcyggJHtFWEVfTkFNRX0gbGliY3VybCApCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworI1NFVF9UQVJHRVRfUFJPUEVSVElFUygke0VYRV9OQU1FfSBBUkNISVZFX09VVFBVVF9ESVJFQ1RPUlkgImJsYWggYmxhaCBibGFoIikKKyNTRVRfVEFSR0VUX1BST1BFUlRJRVMoJHtFWEVfTkFNRX0gUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICJibGFoIGJsYWggYmxhaCIpCisjU0VUX1RBUkdFVF9QUk9QRVJUSUVTKCR7RVhFX05BTUV9IExJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAiYmxhaCBibGFoIGJsYWgiKQorCisjIEFkZCB0aGUgcG9zdGZpeCB0byB0aGUgZXhlY3V0YWJsZSBzaW5jZSBpdCBpcyBub3QgYWRkZWQgYXV0b21hdGljYWxseSBhcyBmb3IgbW9kdWxlcyBhbmQgc2hhcmVkIGxpYnJhcmllcworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7RVhFX05BTUV9IFBST1BFUlRJRVMKKyAgREVCVUdfUE9TVEZJWCAiJHtDTUFLRV9ERUJVR19QT1NURklYfSIpCisKK2lmKE1TVkMpCisgIGlmKE5PVCBCVUlMRF9SRUxFQVNFX0RFQlVHX0RJUlMpCisgICAgIyBVZ2x5IHdvcmthcm91bmQgdG8gcmVtb3ZlIHRoZSAiL2RlYnVnIiBvciAiL3JlbGVhc2UiIGluIGVhY2ggb3V0cHV0CisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7RVhFX05BTUV9IFBST1BFUlRJRVMgUFJFRklYICIuLi8iKQorICBlbmRpZigpCitlbmRpZigpCisKKyNJTkNMVURFKE1vZHVsZUluc3RhbGwgT1BUSU9OQUwpCisKK2luc3RhbGwoVEFSR0VUUyAke0VYRV9OQU1FfSBERVNUSU5BVElPTiBiaW4pCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUuV2F0Y29tIGIvY3VybC03LjI1LjAvc3JjL01ha2VmaWxlLldhdGNvbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWJlOWMyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL01ha2VmaWxlLldhdGNvbQpAQCAtMCwwICsxLDIxMiBAQAorIworIyAgV2F0Y29tIC8gT3BlbldhdGNvbSAvIFdpbjMyIG1ha2VmaWxlIGZvciBjVVJMLgorIyAgRy4gVmFuZW0gPGd2YW5lbUBicm9hZHBhcmsubm8+CisjCisKKyFpZm5kZWYgJXdhdGNvbQorIWVycm9yIFdBVENPTSBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0IQorIWVuZGlmCisKKyFpZmRlZiAlbGlibmFtZQorTElCTkFNRSA9ICQoJWxpYm5hbWUpCishZWxzZQorTElCTkFNRSA9IGxpYmN1cmwKKyFlbmRpZgorVEFSR0VUUyA9ICQoTElCTkFNRSkuZGxsICQoTElCTkFNRSlfaW1wLmxpYiAkKExJQk5BTUUpLmxpYgorCitDQyA9IHdjYzM4NgorTEQgPSB3bGluaworQVIgPSB3bGliCitSQyA9IHdyYworCishaWZkZWYgX19MT0FERExMX18KKyEgIGxvYWRkbGwgd2NjMzg2ICB3Y2NkMzg2CishICBsb2FkZGxsIHdwcDM4NiAgd3BwZDM4NgorISAgbG9hZGRsbCB3bGliICAgIHdsaWJkCishICBpZiAkKF9fVkVSU0lPTl9fKSA+IDEyNzAKKyEgICAgbG9hZGRsbCB3bGluayAgIHdsaW5rZAorISAgZWxzZQorISAgICBsb2FkZGxsIHdsaW5rICAgd2xpbmsKKyEgIGVuZGlmCishZW5kaWYKKworIWlmZGVmIF9fTElOVVhfXworRFMgPSAvCitDUCA9IGNwCitNRCA9IG1rZGlyIC1wCitSRCA9IHJtZGlyIC1wCitSTSA9IHJtIC1mCishZWxzZQorRFMgPSAkKFgpXCQoWCkKK0NQID0gY29weSAyPk5VTAorTUQgPSBta2RpcgorUkQgPSBybWRpciAvcSAvcyAyPk5VTAorIWlmICQoX19WRVJTSU9OX18pIDwgMTI1MAorUk0gPSBkZWwgL3EgL2YgMj5OVUwKKyFlbHNlCitSTSA9IHJtIC1mCishZW5kaWYKKyFlbmRpZgorCitTWVNfSU5DTCA9IC1JJCgld2F0Y29tKSQoRFMpaCQoRFMpbnQgLUkkKCV3YXRjb20pJChEUyloCitTWVNfTElCUyA9ICQoJXdhdGNvbSkkKERTKWxpYjM4NiQoRFMpbnQ7JCgld2F0Y29tKSQoRFMpbGliMzg2CisKK0NGTEFHUyA9IC0zciAtbWYgLWhjIC16ZmYgLXpnZiAtenEgLXptIC1zIC1mcj1jb24gLXcyIC1mcGkgLW9pbHJ0Zm0gJgorICAgICAgICAgLXdjZD0yMDEgLWJ0PW50IC1iYyAtZCsgLWRXSU4zMiAtZEhBVkVfU1RSVE9MTCAgICAgICAgICAgICAmCisgICAgICAgICAtSS4uJChEUylpbmNsdWRlIC1JLi4kKERTKWxpYiAkKFNZU19JTkNMKQorCishaWZkZWYgJWRlYnVnCitERUJVRyAgPSAtZERFQlVHPTEgLWRERUJVR0JVSUxECitDRkxBR1MgKz0gLWQzICQoREVCVUcpCishZWxzZQorQ0ZMQUdTICs9IC1kMAorIWVuZGlmCisKKyFpZmRlZiAldXNlX2lwdjYKK0NGTEFHUyArPSAtZF9XSU4zMl9XSU5OVD0weDA1MDEgLWRFTkFCTEVfSVBWNgorIWVuZGlmCisKKyMKKyMgQ2hhbmdlIHRvIHN1aXRlLgorIworIWlmZGVmICV6bGliX3Jvb3QKK1pMSUJfUk9PVCA9ICQoJXpsaWJfcm9vdCkKKyFlbHNlCitaTElCX1JPT1QgPSAuLiQoRFMpLi4kKERTKXpsaWItMS4yLjUKKyFlbmRpZgorCishaWZkZWYgJWxpYnNzaDJfcm9vdAorTElCU1NIMl9ST09UID0gJCglbGlic3NoMl9yb290KQorIWVsc2UKK0xJQlNTSDJfUk9PVCA9IC4uJChEUykuLiQoRFMpbGlic3NoMi0xLjMuMAorIWVuZGlmCisKKyFpZmRlZiAlbGlicnRtcF9yb290CitMSUJSVE1QX1JPT1QgPSAkKCVsaWJydG1wX3Jvb3QpCishZWxzZQorTElCUlRNUF9ST09UID0gLi4kKERTKS4uJChEUylydG1wZHVtcC0yLjMKKyFlbmRpZgorCishaWZkZWYgJW9wZW5zc2xfcm9vdAorT1BFTlNTTF9ST09UID0gJCglb3BlbnNzbF9yb290KQorIWVsc2UKK09QRU5TU0xfUk9PVCA9IC4uJChEUykuLiQoRFMpb3BlbnNzbC0wLjkuOHIKKyFlbmRpZgorCishaWZkZWYgJWFyZXNfcm9vdAorQVJFU19ST09UID0gJCglYXJlc19yb290KQorIWVsc2UKK0FSRVNfUk9PVCA9IC4uJChEUylhcmVzCishZW5kaWYKKworIWlmZGVmICV1c2Vfc3NsCitDRkxBR1MgKz0gLXdjZD0xMzggLWRVU0VfT1BFTlNTTCAtZFVTRV9TU0xFQVkgLUkkKE9QRU5TU0xfUk9PVCkkKERTKWluYzMyCishZW5kaWYKKworT0JKX0RJUiAgPSBXQ19XaW4zMi5vYmoKK0xJTktfQVJHID0gJChPQkpfRElSKSQoRFMpd2xpbmsuYXJnCisKKyMgSW4gb3JkZXIgdG8gcHJvY2VzcyBNYWtlZmlsZS5pbmMgd21ha2UgbXVzdCBiZSBjYWxsZWQgd2l0aCAtdSBzd2l0Y2ghCishaWZuZGVmICVNQUtFRkxBR1MKKyFlcnJvciBZb3UgTVVTVCBjYWxsIHdtYWtlIHdpdGggdGhlIC11IHN3aXRjaCEKKyFlbHNlCishaW5jbHVkZSBNYWtlZmlsZS5pbmMKKyFlbmRpZgorIyBGb3Igbm93IHdlIHN0aWxsIGRlZmluZSB0aGUgQ1VSTFhfT05FUyBzb3VyY2VzIGhlcmUgdW5sZXNzIHdlIGtub3cgaG93CisjIHRvIHNwbGl0IG9mZiB0aGUgcHJlZml4ZWQgcGF0aC4KK0NVUkxYX1NPVVJDRVMgPSByYXdzdHIuYyBub25ibG9jay5jCisKK09CSlMgPSAkKENVUkxfQ0ZJTEVTOi5jPS5vYmopCishaWZkZWYgJWN1cmxfc3RhdGljCitDRkxBR1MgKz0gLURDVVJMX1NUQVRJQ0xJQgorIWVsc2UKK0NGTEFHUyArPSAtYnIKK09CSlMgKz0gJChDVVJMWF9TT1VSQ0VTOi5jPS5vYmopCishZW5kaWYKKyFpZmRlZiBfX0xJTlVYX18KK09CSlMgPSAkT0JKX0RJUi8kKE9CSlM6ID0gJE9CSl9ESVIvKQorCishZWxzZQorT0JKUyA9ICRPQkpfRElSXCQoT0JKUzogPSAkT0JKX0RJUlwpCishZW5kaWYKKworUkVTT1VSQ0UgPSAkKE9CSl9ESVIpJChEUyljdXJsLnJlcworCithbGw6IGh1Z2VoZWxwLmMgJChPQkpfRElSKSBjdXJsLmV4ZSAuU1lNQk9MSUMKKwlAZWNobyBXZWxjb21lIHRvIGNVUkwKKworY2xlYW46IC5TWU1CT0xJQworCS0kKFJNKSAkKE9CSlMpCisJLSQoUk0pICQoUkVTT1VSQ0UpICQoTElOS19BUkcpCisKK3ZjbGVhbiBkaXN0Y2xlYW46IGNsZWFuIC5TWU1CT0xJQworCS0kKFJEKSAkKE9CSl9ESVIpCisJLSQoUk0pIGN1cmwuZXhlIGN1cmwubWFwIGN1cmwuc3ltIGh1Z2VoZWxwLmMKKworaHVnZWhlbHAuYzogaHVnZWhlbHAuYy5jdnMKKwkkKENQKSAkW0AgJF5ACisKK2h1Z2VoZWxwLmMuY3ZzOiAuRVhJU1RTT05MWQorCSQoQ1ApIGh1Z2VoZWxwLmMgJF5ACisKKyQoT0JKX0RJUik6CisJLSQoTUQpICReQAorCitjdXJsLmV4ZTogJChPQkpTKSAkKFJFU09VUkNFKSAkKExJTktfQVJHKQorCSQoTEQpIG5hbWUgJF5AIEAkXUAKKworJChSRVNPVVJDRSk6IGN1cmwucmMKKwkkKFJDKSAkKERFQlVHKSAtcSAtciAtem0gLWJ0PW50IC1JLi4kKERTKWluY2x1ZGUgJChTWVNfSU5DTCkgJFtAIC1mbz0kXkAKKworIyBzdWZmaXggc2VhcmNoIHBhdGggLSB2cGF0aC1saWtlIGhhY2sKKy5jOiAuLiQoRFMpbGliCisKKy5FUkFTRQorLmN7JChPQkpfRElSKX0ub2JqOgorCSQoQ0MpICQoQ0ZMQUdTKSAkW0AgLWZvPSReQAorCiskKExJTktfQVJHKTogJChfX01BS0VGSUxFU19fKQorCSVjcmVhdGUgJF5ACisJQCVhcHBlbmQgJF5AIHN5c3RlbSBudAorCUAlYXBwZW5kICReQCBmaWxlIHsgJChPQkpTKSB9CishaWZkZWYgJWRlYnVnCisJQCVhcHBlbmQgJF5AIGRlYnVnIGFsbAorCUAlYXBwZW5kICReQCBvcHRpb24gc3ltZmlsZQorIWVuZGlmCisJQCVhcHBlbmQgJF5AIG9wdGlvbiBxdWlldCwgbWFwLCBjYXNlZXhhY3QsIGVsaW1pbmF0ZSwKKwlAJWFwcGVuZCAkXkAgcmVzPSQoUkVTT1VSQ0UpIGxpYnBhdGggJChTWVNfTElCUykKKyFpZmRlZiAlY3VybF9zdGF0aWMKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSB3bGRhcDMyLmxpYgorCUAlYXBwZW5kICReQCBsaWJyYXJ5IC4uJChEUylsaWIkKERTKSQoTElCTkFNRSkubGliCishaWZkZWYgJXVzZV96bGliCisJQCVhcHBlbmQgJF5AIGxpYnJhcnkgJChaTElCX1JPT1QpJChEUyl6bGliLmxpYgorIWVuZGlmCishaWZkZWYgJXVzZV9ydG1wCisJQCVhcHBlbmQgJF5AIGxpYnJhcnkgJChMSUJSVE1QX1JPT1QpJChEUylsaWJydG1wJChEUylsaWJydG1wLmxpYiwgd2lubW0ubGliCishZW5kaWYKKyFpZmRlZiAldXNlX3NzaDIKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSAkKExJQlNTSDJfUk9PVCkkKERTKXdpbjMyJChEUylsaWJzc2gyLmxpYgorIWVuZGlmCishaWZkZWYgJXVzZV9zc2wKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSAkKE9QRU5TU0xfUk9PVCkkKERTKW91dDMyJChEUylsaWJlYXkzMi5saWIsICQoT1BFTlNTTF9ST09UKSQoRFMpb3V0MzIkKERTKXNzbGVheTMyLmxpYgorIWVuZGlmCishaWZkZWYgJXVzZV9hcmVzCisJQCVhcHBlbmQgJF5AIGxpYnJhcnkgJChBUkVTX1JPT1QpJChEUyljYXJlcy5saWIKKyFlbmRpZgorIWlmZGVmICV1c2Vfd2luaWRuCishICBpZiAkKF9fVkVSU0lPTl9fKSA+IDEyOTAKKwlAJWFwcGVuZCAkXkAgbGlicmFyeSBub3JtYWxpei5saWIKKyEgIGVsc2UKKwlAJWFwcGVuZCAkXkAgaW1wb3J0ICdfSWRuVG9Bc2NpaUAyMCcgJ05PUk1BTElaLkRMTCcuJ0lkblRvQXNjaWknCisJQCVhcHBlbmQgJF5AIGltcG9ydCAnX0lkblRvVW5pY29kZUAyMCcgJ05PUk1BTElaLkRMTCcuJ0lkblRvVW5pY29kZScKKyEgIGVuZGlmCishZW5kaWYKKyFlbHNlCisJQCVhcHBlbmQgJF5AIGxpYnJhcnkgLi4kKERTKWxpYiQoRFMpJChMSUJOQU1FKV9pbXAubGliCishZW5kaWYKKyFpZmVxIFVTRV9XQVRUMzIgMQorCUAlYXBwZW5kICReQCBsaWJyYXJ5ICQoJXdhdHRfcm9vdCkkKERTKWxpYiQoRFMpd2F0dGNwd19pbXAubGliCishZWxzZQorCUAlYXBwZW5kICReQCBsaWJyYXJ5IHdzMl8zMi5saWIKKyFlbmRpZgorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUuYW0gYi9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4MWYwNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDExMiBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBub3N0ZGluYworCisjIFNwZWNpZnkgb3VyIGluY2x1ZGUgcGF0aHMgaGVyZSwgYW5kIGRvIGl0IHJlbGF0aXZlIHRvICQodG9wX3NyY2RpcikgYW5kCisjICQodG9wX2J1aWxkZGlyKSwgdG8gZW5zdXJlIHRoYXQgdGhlc2UgcGF0aHMgd2hpY2ggYmVsb25nIHRvIHRoZSBsaWJyYXJ5CisjIGJlaW5nIGN1cnJlbnRseSBidWlsdCBhbmQgdGVzdGVkIGFyZSBzZWFyY2hlZCBiZWZvcmUgdGhlIGxpYnJhcnkgd2hpY2gKKyMgbWlnaHQgcG9zc2libHkgYWxyZWFkeSBiZSBpbnN0YWxsZWQgaW4gdGhlIHN5c3RlbS4KKyMKKyMgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBmb3IgZ2VuZXJhdGVkIGN1cmxidWlsZC5oIGluY2x1ZGVkIGZyb20gY3VybC5oCisjICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlIGZvciBnZW5lcmF0ZWQgY3VybGJ1aWxkLmggaW5jbHVkZWQgZnJvbSBsaWIvc2V0dXAuaAorIyAkKHRvcF9zcmNkaXIpL2luY2x1ZGUgaXMgZm9yIGxpYmN1cmwncyBleHRlcm5hbCBpbmNsdWRlIGZpbGVzCisjICQodG9wX2J1aWxkZGlyKS9saWIgaXMgZm9yIGxpYmN1cmwncyBnZW5lcmF0ZWQgbGliL2N1cmxfY29uZmlnLmggZmlsZQorIyAkKHRvcF9idWlsZGRpcikvc3JjIGlzIGZvciBjdXJsJ3MgZ2VuZXJhdGVkIHNyYy9jdXJsX2NvbmZpZy5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS9saWIgaXMgZm9yIGxpYmN1cmwncyBsaWIvc2V0dXAuaCBhbmQgb3RoZXIgImJvcnJvd2VkIiBmaWxlcworIyAkKHRvcF9zcmNkaXIpL3NyYyBpcyBmb3IgY3VybCdzIHNyYy9zZXR1cC5oIGFuZCAiY3VybC1wcml2YXRlIiBmaWxlcworCitJTkNMVURFUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2xpYiAgICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL3NyYyAgICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9saWIgICAgICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMKKworYmluX1BST0dSQU1TID0gY3VybAorCitpbmNsdWRlIE1ha2VmaWxlLmluYworCisjIFRoaXMgbWlnaHQgaG9sZCAtV2Vycm9yCitDRkxBR1MgKz0gQENVUkxfQ0ZMQUdfRVhUUkFTQAorCitjdXJsX0xEQUREID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhIEBDVVJMX0xJQlNACitjdXJsX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorQlVJTFRfU09VUkNFUyA9IGh1Z2VoZWxwLmMgY29uZmlnLXdpbjMyLmgKK0NMRUFORklMRVMgPSBodWdlaGVscC5jIGNvbmZpZy13aW4zMi5oCisjIFVzZSB0aGUgQyBsb2NhbGUgdG8gZW5zdXJlIHRoYXQgb25seSBBU0NJSSBjaGFyYWN0ZXJzIGFwcGVhciBpbiB0aGUKKyMgZW1iZWRkZWQgdGV4dC4KK05ST0ZGPWVudiBMQ19BTEw9QyBATlJPRkZAIEBNQU5PUFRAICMgZmlndXJlZCBvdXQgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQKKworRVhUUkFfRElTVCA9IG1raGVscC5wbCBtYWtlZmlsZS5kaiBNYWtlZmlsZS52YzYgTWFrZWZpbGUuYjMyIE1ha2VmaWxlLm0zMiBcCisJY3VybF9jb25maWcuaC5pbiBtYWNvcy9jdXJsLm1jcC54bWwuc2l0LmhxeAkJCSAgXAorCW1hY29zL01BQ0lOU1RBTEwuVFhUIG1hY29zL3NyYy9jdXJsX0dVU0lDb25maWcuY3BwIHZjNmN1cmxzcmMuZHNwIFwKKwltYWNvcy9zcmMvbWFjb3NfbWFpbi5jcHAgY29uZmlnLWFtaWdhb3MuaCBtYWtlZmlsZS5hbWlnYSBjdXJsLnJjICBcCisJTWFrZWZpbGUubmV0d2FyZSBNYWtlZmlsZS5pbmMgTWFrZWZpbGUuV2F0Y29tIHZjNmN1cmxzcmMuZHN3ICAgICAgXAorCUNNYWtlTGlzdHMudHh0CisKK01BTlBBR0U9JCh0b3Bfc3JjZGlyKS9kb2NzL2N1cmwuMQorUkVBRE1FPSQodG9wX3NyY2RpcikvZG9jcy9NQU5VQUwKK01LSEVMUD0kKHRvcF9zcmNkaXIpL3NyYy9ta2hlbHAucGwKK0hVR0U9aHVnZWhlbHAuYworQ0ZHV0lOMzI9Y29uZmlnLXdpbjMyLmgKKworJChDRkdXSU4zMik6ICQodG9wX3NyY2RpcikvbGliL2NvbmZpZy13aW4zMi5oCisJZWNobyAiY3JlYXRpbmcgJChDRkdXSU4zMikiCisJQChjcCAkKHRvcF9zcmNkaXIpL2xpYi9jb25maWctd2luMzIuaCAkKENGR1dJTjMyKSkKKworaWYgVVNFX01BTlVBTAorIyBIZXJlIGFyZSB0aGUgc3R1ZmYgdG8gY3JlYXRlIGEgYnVpbHQtaW4gbWFudWFsCisKK2lmIEhBVkVfTElCWgorIyBUaGlzIGdlbmVyYXRlcyB0aGUgaHVnZWhlbHAuYyBmaWxlIGluIGJvdGggdW5jb21wcmVzc2VkIGFuZCBjb21wcmVzc2VkIGZvcm1hdHMKKyQoSFVHRSk6ICQoUkVBRE1FKSAkKE1BTlBBR0UpICBta2hlbHAucGwKKwllY2hvICcjaW5jbHVkZSAic2V0dXAuaCInID4gJChIVUdFKQorCWVjaG8gJyNpZm5kZWYgSEFWRV9MSUJaJyA+PiAkKEhVR0UpCisJJChOUk9GRikgJChNQU5QQUdFKSB8ICQoUEVSTCkgJChNS0hFTFApICQoUkVBRE1FKSA+PiAkKEhVR0UpCisJZWNobyAnI2Vsc2UnID4+ICQoSFVHRSkKKwkkKE5ST0ZGKSAkKE1BTlBBR0UpIHwgJChQRVJMKSAkKE1LSEVMUCkgLWMgJChSRUFETUUpID4+ICQoSFVHRSkKKwllY2hvICcjZW5kaWYgLyogSEFWRV9MSUJaICovJyA+PiAkKEhVR0UpCitlbHNlICMgSEFWRV9MSUJaCisjIFRoaXMgZ2VuZXJhdGVzIHRoZSBodWdlaGVscC5jIGZpbGUgdW5jb21wcmVzc2VkIG9ubHkKKyQoSFVHRSk6ICQoUkVBRE1FKSAkKE1BTlBBR0UpICBta2hlbHAucGwKKwllY2hvICcjaW5jbHVkZSAic2V0dXAuaCInID4gJChIVUdFKQorCSQoTlJPRkYpICQoTUFOUEFHRSkgfCAkKFBFUkwpICQoTUtIRUxQKSAkKFJFQURNRSkgPj4gJChIVUdFKQorZW5kaWYKKworZWxzZSAjIFVTRV9NQU5VQUwKKyMgYnVpbHQtaW4gbWFudWFsIGhhcyBiZWVuIGRpc2FibGVkLCBtYWtlIGEgYmxhbmsgZmlsZQorJChIVUdFKToKKwllY2hvICIvKiBidWlsdC1pbiBtYW51YWwgaXMgZGlzYWJsZWQsIGJsYW5rIGZ1bmN0aW9uICovIiA+ICQoSFVHRSkKKwllY2hvICcjaW5jbHVkZSAiaHVnZWhlbHAuaCInID4+ICQoSFVHRSkKKwllY2hvICJ2b2lkIGh1Z2VoZWxwKHZvaWQpIHt9IiA+PiQoSFVHRSkKK2VuZGlmCisKKyMgaWdub3JlIGh1Z2VoZWxwLmMgc2luY2UgaXQgaXMgZ2VuZXJhdGVkIHNvdXJjZSBjb2RlIGFuZCBpdCBwbGF5cyBieSBzbGlnaHRseQorIyBkaWZmZXJlbnQgcnVsZXMhIGNvbmZpZy13aW4zMi5oIGFscmVhZHkgY2hlY2tlZCBpbiBsaWIgc3ViZGlyLgorY2hlY2tzcmM6CisJQEBQRVJMQCAkKHRvcF9zcmNkaXIpL2xpYi9jaGVja3NyYy5wbCAtRCQodG9wX3NyY2Rpcikvc3JjIC1XaHVnZWhlbHAuYyAtV2NvbmZpZy13aW4zMi5oICQoY3VybF9TT1VSQ0VTKQorCitpZiBDVVJMREVCVUcKKyMgZm9yIGRlYnVnIGJ1aWxkcywgd2Ugc2NhbiB0aGUgc291cmNlcyBvbiBhbGwgcmVndWxhciBtYWtlIGludm9rZXMKK2FsbC1sb2NhbDogY2hlY2tzcmMKK2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUuYjMyIGIvY3VybC03LjI1LjAvc3JjL01ha2VmaWxlLmIzMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzk4MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL01ha2VmaWxlLmIzMgpAQCAtMCwwICsxLDExOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICBNYWtlZmlsZS5iMzIgLSBCb3JsYW5kJ3MgQysrIENvbXBpbGVyIDUuWAorIworIyAgJ3NyYycgZGlyZWN0b3J5CisjCisjICAnQkNDRElSJyBoYXMgdG8gYmUgc2V0IHVwIHRvIHBvaW50IHRvIHRoZSBiYXNlIGRpcmVjdG9yeQorIyAgb2YgdGhlIGNvbXBpbGVyLCBpLmUuIFNFVCBCQ0NESVIgPSBjOlxCb3JsYW5kXEJDQzU1CisjCisjICBJbml0aWFsbHkgd3JpdHRlbiBieSBKYWVwaWwgS2ltLCBwaXRAcGFyYWRpc2UubmV0Lm56CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIWlmICIkKF9fTUFLRV9fKSIgPT0gIiIKKyFlcnJvciBfX01BS0VfXyBub3QgZGVmaW5lZC4gVXNlIEJvcmxhbmRzJ3MgTUFLRSB0byBwcm9jZXNzIHRoaXMgbWFrZWZpbGUuCishZW5kaWYKKworIyBCb3JsYW5kJ3MgJChNQUtFRElSKSBleHBhbmRzIHRvIHRoZSBwYXRoIHdoZXJlIG1ha2UuZXhlIGlzIGxvY2F0ZWQsCisjIHVzZSB0aGlzIGZlYXR1cmUgdG8gZGVmaW5lIEJDQ0RJUiB3aGVuIHVzZXIgaGFzIG5vdCBkZWZpbmVkIEJDQ0RJUi4KKyFpZm5kZWYgQkNDRElSCitCQ0NESVIgPSAkKE1BS0VESVIpXC4uCishZW5kaWYKKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgWmxpYiBzb3VyY2VzLgorIWlmbmRlZiBaTElCX1BBVEgKK1pMSUJfUEFUSCA9IC4uXC4uXHpsaWItMS4yLjUKKyFlbmRpZgorCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBPcGVuU1NMIHBhY2thZ2UuCishaWZuZGVmIE9QRU5TU0xfUEFUSAorT1BFTlNTTF9QQVRIID0gLi5cLi5cb3BlbnNzbC0wLjkuOHEKKyFlbmRpZgorCisjIFNldCBwcm9ncmFtJ3MgbmFtZQorUFJPR05BTUUgPSBjdXJsLmV4ZQorCisjIFNldHVwIGVudmlyb25tZW50CitDQ19DTUQgICA9IGJjYzMyIC1xIC1jCitMRCAgICAgICA9IGJjYzMyCitSTSAgICAgICA9IGRlbCAyPk5VTAorTUtESVIgICAgPSBtZAorUk1ESVIgICAgPSByZCAvcSAyPm51bAorQ09QWSAgICAgPSAkKENPTVNQRUMpIC9jIGNvcHkgL3kKKworQ0NfRkxBR1MgPSAtNSAtTzIgLXRXTSAtdyAtdy1hdXMgLXctY2NjIC13LWR1cCAtdy1wcmMgLXctcHJvIC13LXJjaCAtdy1zaWcgLXctc3BhIC13LWlubCAtdy1waWEgLXctcGluIC1EaW5saW5lPV9faW5saW5lCitMREZMQUdTICA9IC1xIC1scSAtbGFwCisKK1NSQ0RJUlMgID0gLjsuLlxsaWIKK09CSkRJUiAgID0gLlxCQ0Nfb2JqcworSU5DRElSUyAgPSAtSS47Li5caW5jbHVkZTsuLlxsaWIKK0xJTktMSUIgID0gJChCQ0NESVIpXGxpYlxjdzMybXQubGliCitERUZJTkVTICA9IC1ETkRFQlVHIC1EV0lOMzIKKworIWlmZGVmIERZTkFNSUMKK0xJQkNVUkxfTElCID0gLi5cbGliXGxpYmN1cmxfaW1wLmxpYgorIWVsc2UKK0xJQkNVUkxfTElCID0gLi5cbGliXGxpYmN1cmwubGliCitERUZJTkVTID0gJChERUZJTkVTKSAtRENVUkxfU1RBVElDTElCCishZW5kaWYKKworIyBaTElCIHN1cHBvcnQgaXMgZW5hYmxlZCBzZXR0aW5nIFdJVEhfWkxJQj0xCishaWZkZWYgV0lUSF9aTElCCitERUZJTkVTICA9ICQoREVGSU5FUykgLURIQVZFX0xJQlogLURIQVZFX1pMSUJfSAorSU5DRElSUyAgPSAkKElOQ0RJUlMpOyQoWkxJQl9QQVRIKQorTElOS0xJQiAgPSAkKExJTktMSUIpICQoWkxJQl9QQVRIKVx6bGliLmxpYgorIWVuZGlmCisKKyMgU1NMIHN1cHBvcnQgaXMgZW5hYmxlZCBzZXR0aW5nIFdJVEhfU1NMPTEKKyFpZmRlZiBXSVRIX1NTTAorREVGSU5FUyAgPSAkKERFRklORVMpIC1EVVNFX1NTTEVBWQorSU5DRElSUyAgPSAkKElOQ0RJUlMpOyQoT1BFTlNTTF9QQVRIKVxpbmMzMjskKE9QRU5TU0xfUEFUSClcaW5jMzJcb3BlbnNzbAorTElOS0xJQiAgPSAkKExJTktMSUIpICQoT1BFTlNTTF9QQVRIKVxvdXQzMlxzc2xlYXkzMi5saWIgJChPUEVOU1NMX1BBVEgpXG91dDMyXGxpYmVheTMyLmxpYgorIWVuZGlmCisKKy5hdXRvZGVwZW5kCisKKy5wYXRoLmMgICA9ICQoU1JDRElSUykKKy5wYXRoLm9iaiA9ICQoT0JKRElSKQorCisjIE1ha2VmaWxlLmluYyBwcm92aWRlcyB0aGUgQ1NPVVJDRVMgYW5kIEhIRUFERVJTIGRlZmluZXMKKyF1bmRlZiB0b3Bfc3JjZGlyCishaW5jbHVkZSBNYWtlZmlsZS5pbmMKKworQ1NPVVJDRVMgPSAkKENVUkxfQ0ZJTEVTKSAkKENVUkxYX09ORVM6L2xpYi89KQorT0JKRUNUUyAgPSAkKENTT1VSQ0VTOi5jPS5vYmopCisKKy5jLm9iajoKKwkkKENDX0NNRCkgJChDQ19GTEFHUykgJChJTkNESVJTKSAkKERFRklORVMpIC1vJEAgJDwKKworYWxsOgkkKE9CSkRJUikgaHVnZWhlbHAgJChQUk9HTkFNRSkKKworY2xlYW46CisJY2QgJChPQkpESVIpCisJQC0kKFJNKSAkKE9CSkVDVFMpCisJY2QgLi4KKwlALSQoUk1ESVIpICQoT0JKRElSKQorCUAtJChSTSkgJChQUk9HTkFNRSkKKwlALSQoUk0pIGN1cmwudGRzCisKKyQoT0JKRElSKToKKwlALSQoUk1ESVIpICQoT0JKRElSKQorCUAtJChNS0RJUikgJChPQkpESVIpCisKKyFpZmRlZiBXSVRIX1pMSUIKK2h1Z2VoZWxwOiAuLlxkb2NzXE1BTlVBTCAuLlxkb2NzXGN1cmwuMSBta2hlbHAucGwKKyAgICAgICAgZ3JvZmYgLVRhc2NpaSAtbWFuIC1QIC1jIC4uL2RvY3MvY3VybC4xID4gaHVnZWhlbHAudG1wCisgICAgICAgIHBlcmwgLXcgbWtoZWxwLnBsIC1jIC4uL2RvY3MvTUFOVUFMIDwgaHVnZWhlbHAudG1wID4gaHVnZWhlbHAuYworCUAtJChSTSkgaHVnZWhlbHAudG1wCishZWxzZQoraHVnZWhlbHA6CisJJChDT1BZKSBodWdlaGVscC5jLmN2cyBodWdlaGVscC5jCishZW5kaWYKKworJChQUk9HTkFNRSk6ICQoT0JKRUNUUykgJChMSUJDVVJMX0xJQikgJChMSU5LTElCKQorCUAtJChSTSkgJChQUk9HTkFNRSkKKwkkKExEKSAkKExERkxBR1MpIC1lJEAgJCoqCisKKworIyBFbmQgb2YgTWFrZWZpbGUuYjMyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUuaW4gYi9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjMWZiOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDg4NyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIC4vc3JjL01ha2VmaWxlLmluYworIyBVc2luZyB0aGUgYmFja3NsYXNoIGFzIGxpbmUgY29udGludWF0aW9uIGNoYXJhY3RlciBtaWdodCBiZSBwcm9ibGVtYXRpYworIyB3aXRoIHNvbWUgbWFrZSBmbGF2b3VycywgYXMgV2F0Y29tJ3Mgd21ha2Ugc2hvd2VkIHVzIGFscmVhZHkuIElmIHdlCisjIGV2ZXIgd2FudCB0byBjaGFuZ2UgdGhpcyBpbiBhIHBvcnRhYmxlIG1hbm5lciB0aGVuIHdlIHNob3VsZCBjb25zaWRlcgorIyB0aGlzIGlkZWEgKHBvc3RlZCB0byB0aGUgbGliY3VybCBsaXN0IGJ5IEFkYW0gS2VsbGFzKToKKyMgQ1NSQzEgPSBmaWxlMS5jIGZpbGUyLmMgZmlsZTMuYworIyBDU1JDMiA9IGZpbGU0LmMgZmlsZTUuYyBmaWxlNi5jCisjIENTT1VSQ0VTID0gJChDU1JDMSkgJChDU1JDMikKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorYmluX1BST0dSQU1TID0gY3VybCQoRVhFRVhUKQorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW5jICQoc3JjZGlyKS9jdXJsX2NvbmZpZy5oLmluCitzdWJkaXIgPSBzcmMKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2N1cmwtY29tcGlsZXJzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtY29uZm9wdHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1mdW5jdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vcGVuc3NsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3ZlcnJpZGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1yZWVudHJhbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1zeXN0ZW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtdHJhbnNsaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQveno1MC14Yy1vdnIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2N1cmxfY29uZmlnLmggY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChiaW5kaXIpIgorYmluUFJPR1JBTVNfSU5TVEFMTCA9ICQoSU5TVEFMTF9QUk9HUkFNKQorUFJPR1JBTVMgPSAkKGJpbl9QUk9HUkFNUykKK2FtX19vYmplY3RzXzEgPSBodWdlaGVscC4kKE9CSkVYVCkgdG9vbF9iaW5tb2RlLiQoT0JKRVhUKSBcCisJdG9vbF9ibmFtZS4kKE9CSkVYVCkgdG9vbF9jYl9kYmcuJChPQkpFWFQpIFwKKwl0b29sX2NiX2hkci4kKE9CSkVYVCkgdG9vbF9jYl9wcmcuJChPQkpFWFQpIFwKKwl0b29sX2NiX3JlYS4kKE9CSkVYVCkgdG9vbF9jYl9zZWUuJChPQkpFWFQpIFwKKwl0b29sX2NiX3dydC4kKE9CSkVYVCkgdG9vbF9jZmdhYmxlLiQoT0JKRVhUKSBcCisJdG9vbF9jb252ZXJ0LiQoT0JKRVhUKSB0b29sX2RpcmhpZS4kKE9CSkVYVCkgXAorCXRvb2xfZG9zd2luLiQoT0JKRVhUKSB0b29sX2Vhc3lzcmMuJChPQkpFWFQpIFwKKwl0b29sX2Zvcm1wYXJzZS4kKE9CSkVYVCkgdG9vbF9nZXRwYXJhbS4kKE9CSkVYVCkgXAorCXRvb2xfZ2V0cGFzcy4kKE9CSkVYVCkgdG9vbF9oZWxwLiQoT0JKRVhUKSBcCisJdG9vbF9oZWxwZXJzLiQoT0JKRVhUKSB0b29sX2hvbWVkaXIuJChPQkpFWFQpIFwKKwl0b29sX2xpYmluZm8uJChPQkpFWFQpIHRvb2xfbWFpbi4kKE9CSkVYVCkgXAorCXRvb2xfbWZpbGVzLiQoT0JKRVhUKSB0b29sX21zZ3MuJChPQkpFWFQpIFwKKwl0b29sX29wZXJhdGUuJChPQkpFWFQpIHRvb2xfb3BlcmhscC4kKE9CSkVYVCkgXAorCXRvb2xfcGFueWtleS4kKE9CSkVYVCkgdG9vbF9wYXJhbWhscC4kKE9CSkVYVCkgXAorCXRvb2xfcGFyc2VjZmcuJChPQkpFWFQpIHRvb2xfc2V0b3B0LiQoT0JKRVhUKSBcCisJdG9vbF9zbGVlcC4kKE9CSkVYVCkgdG9vbF91cmxnbG9iLiQoT0JKRVhUKSBcCisJdG9vbF91dGlsLiQoT0JKRVhUKSB0b29sX3Ztcy4kKE9CSkVYVCkgdG9vbF93cml0ZWVudi4kKE9CSkVYVCkgXAorCXRvb2xfd3JpdGVvdXQuJChPQkpFWFQpIHRvb2xfeGF0dHIuJChPQkpFWFQpCithbV9fb2JqZWN0c18yID0gc3RydG9vZmZ0LiQoT0JKRVhUKSBzdHJkdXAuJChPQkpFWFQpIHJhd3N0ci4kKE9CSkVYVCkgXAorCW5vbmJsb2NrLiQoT0JKRVhUKQorYW1fX29iamVjdHNfMyA9CithbV9jdXJsX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgJChhbV9fb2JqZWN0c18zKQorY3VybF9PQkpFQ1RTID0gJChhbV9jdXJsX09CSkVDVFMpCitERUZBVUxUX0lOQ0xVREVTID0gCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChjdXJsX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGN1cmxfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQlVJTERfTElCSE9TVE5BTUVfRkFMU0UgPSBAQlVJTERfTElCSE9TVE5BTUVfRkFMU0VACitCVUlMRF9MSUJIT1NUTkFNRV9UUlVFID0gQEJVSUxEX0xJQkhPU1ROQU1FX1RSVUVACitCVUlMRF9VTklUVEVTVFNfRkFMU0UgPSBAQlVJTERfVU5JVFRFU1RTX0ZBTFNFQAorQlVJTERfVU5JVFRFU1RTX1RSVUUgPSBAQlVJTERfVU5JVFRFU1RTX1RSVUVACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACisKKyMgVGhpcyBtaWdodCBob2xkIC1XZXJyb3IKK0NGTEFHUyA9IEBDRkxBR1NAIEBDVVJMX0NGTEFHX0VYVFJBU0AKK0NPTkZJR1VSRV9PUFRJT05TID0gQENPTkZJR1VSRV9PUFRJT05TQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1JPU1NDT01QSUxJTkdfRkFMU0UgPSBAQ1JPU1NDT01QSUxJTkdfRkFMU0VACitDUk9TU0NPTVBJTElOR19UUlVFID0gQENST1NTQ09NUElMSU5HX1RSVUVACitDVVJMREVCVUdfRkFMU0UgPSBAQ1VSTERFQlVHX0ZBTFNFQAorQ1VSTERFQlVHX1RSVUUgPSBAQ1VSTERFQlVHX1RSVUVACitDVVJMVkVSU0lPTiA9IEBDVVJMVkVSU0lPTkAKK0NVUkxfQ0FfQlVORExFID0gQENVUkxfQ0FfQlVORExFQAorQ1VSTF9DRkxBR19FWFRSQVMgPSBAQ1VSTF9DRkxBR19FWFRSQVNACitDVVJMX0RJU0FCTEVfRElDVCA9IEBDVVJMX0RJU0FCTEVfRElDVEAKK0NVUkxfRElTQUJMRV9GSUxFID0gQENVUkxfRElTQUJMRV9GSUxFQAorQ1VSTF9ESVNBQkxFX0ZUUCA9IEBDVVJMX0RJU0FCTEVfRlRQQAorQ1VSTF9ESVNBQkxFX0dPUEhFUiA9IEBDVVJMX0RJU0FCTEVfR09QSEVSQAorQ1VSTF9ESVNBQkxFX0hUVFAgPSBAQ1VSTF9ESVNBQkxFX0hUVFBACitDVVJMX0RJU0FCTEVfSU1BUCA9IEBDVVJMX0RJU0FCTEVfSU1BUEAKK0NVUkxfRElTQUJMRV9MREFQID0gQENVUkxfRElTQUJMRV9MREFQQAorQ1VSTF9ESVNBQkxFX0xEQVBTID0gQENVUkxfRElTQUJMRV9MREFQU0AKK0NVUkxfRElTQUJMRV9QT1AzID0gQENVUkxfRElTQUJMRV9QT1AzQAorQ1VSTF9ESVNBQkxFX1BST1hZID0gQENVUkxfRElTQUJMRV9QUk9YWUAKK0NVUkxfRElTQUJMRV9SVFNQID0gQENVUkxfRElTQUJMRV9SVFNQQAorQ1VSTF9ESVNBQkxFX1NNVFAgPSBAQ1VSTF9ESVNBQkxFX1NNVFBACitDVVJMX0RJU0FCTEVfVEVMTkVUID0gQENVUkxfRElTQUJMRV9URUxORVRACitDVVJMX0RJU0FCTEVfVEZUUCA9IEBDVVJMX0RJU0FCTEVfVEZUUEAKK0NVUkxfTElCUyA9IEBDVVJMX0xJQlNACitDVVJMX05FVFdPUktfTElCUyA9IEBDVVJMX05FVFdPUktfTElCU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TSEFSRUQgPSBARU5BQkxFX1NIQVJFREAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfR05VVExTX1NSUCA9IEBIQVZFX0dOVVRMU19TUlBACitIQVZFX0xEQVBfU1NMID0gQEhBVkVfTERBUF9TU0xACitIQVZFX0xJQlogPSBASEFWRV9MSUJaQAorSEFWRV9MSUJaX0ZBTFNFID0gQEhBVkVfTElCWl9GQUxTRUAKK0hBVkVfTElCWl9UUlVFID0gQEhBVkVfTElCWl9UUlVFQAorSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QgPSBASEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1RACitIQVZFX1NTTEVBWV9TUlAgPSBASEFWRV9TU0xFQVlfU1JQQAorSUROX0VOQUJMRUQgPSBASUROX0VOQUJMRURACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lQVjZfRU5BQkxFRCA9IEBJUFY2X0VOQUJMRURACitLUkI0X0VOQUJMRUQgPSBAS1JCNF9FTkFCTEVEQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJDVVJMX0xJQlMgPSBATElCQ1VSTF9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQU5PUFQgPSBATUFOT1BUQAorTUlNUFVSRV9GQUxTRSA9IEBNSU1QVVJFX0ZBTFNFQAorTUlNUFVSRV9UUlVFID0gQE1JTVBVUkVfVFJVRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PX1VOREVGSU5FRF9GQUxTRSA9IEBOT19VTkRFRklORURfRkFMU0VACitOT19VTkRFRklORURfVFJVRSA9IEBOT19VTkRFRklORURfVFJVRUAKKyMgVXNlIHRoZSBDIGxvY2FsZSB0byBlbnN1cmUgdGhhdCBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMgYXBwZWFyIGluIHRoZQorIyBlbWJlZGRlZCB0ZXh0LgorTlJPRkYgPSBlbnYgTENfQUxMPUMgQE5ST0ZGQCBATUFOT1BUQCAjIGZpZ3VyZWQgb3V0IGJ5IHRoZSBjb25maWd1cmUgc2NyaXB0CitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIID0gQFBBVEhACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkwgPSBAUEVSTEAKK1BLR0FERF9OQU1FID0gQFBLR0FERF9OQU1FQAorUEtHQUREX1BLRyA9IEBQS0dBRERfUEtHQAorUEtHQUREX1ZFTkRPUiA9IEBQS0dBRERfVkVORE9SQAorUEtHQ09ORklHID0gQFBLR0NPTkZJR0AKK1JBTkRPTV9GSUxFID0gQFJBTkRPTV9GSUxFQAorUkFOTElCID0gQFJBTkxJQkAKK1JFUVVJUkVfTElCX0RFUFMgPSBAUkVRVUlSRV9MSUJfREVQU0AKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU09OQU1FX0JVTVBfRkFMU0UgPSBAU09OQU1FX0JVTVBfRkFMU0VACitTT05BTUVfQlVNUF9UUlVFID0gQFNPTkFNRV9CVU1QX1RSVUVACitTU0xfRU5BQkxFRCA9IEBTU0xfRU5BQkxFREAKK1NUQVRJQ0xJQl9GQUxTRSA9IEBTVEFUSUNMSUJfRkFMU0VACitTVEFUSUNMSUJfVFJVRSA9IEBTVEFUSUNMSUJfVFJVRUAKK1NUUklQID0gQFNUUklQQAorU1VQUE9SVF9GRUFUVVJFUyA9IEBTVVBQT1JUX0ZFQVRVUkVTQAorU1VQUE9SVF9QUk9UT0NPTFMgPSBAU1VQUE9SVF9QUk9UT0NPTFNACitURVNUX1NFUlZFUl9MSUJTID0gQFRFU1RfU0VSVkVSX0xJQlNACitVU0VfQVJFUyA9IEBVU0VfQVJFU0AKK1VTRV9BWFRMUyA9IEBVU0VfQVhUTFNACitVU0VfQ1lBU1NMID0gQFVTRV9DWUFTU0xACitVU0VfRU1CRURERURfQVJFU19GQUxTRSA9IEBVU0VfRU1CRURERURfQVJFU19GQUxTRUAKK1VTRV9FTUJFRERFRF9BUkVTX1RSVUUgPSBAVVNFX0VNQkVEREVEX0FSRVNfVFJVRUAKK1VTRV9HTlVUTFMgPSBAVVNFX0dOVVRMU0AKK1VTRV9HTlVUTFNfTkVUVExFID0gQFVTRV9HTlVUTFNfTkVUVExFQAorVVNFX0xJQlJUTVAgPSBAVVNFX0xJQlJUTVBACitVU0VfTElCU1NIMiA9IEBVU0VfTElCU1NIMkAKK1VTRV9NQU5VQUxfRkFMU0UgPSBAVVNFX01BTlVBTF9GQUxTRUAKK1VTRV9NQU5VQUxfVFJVRSA9IEBVU0VfTUFOVUFMX1RSVUVACitVU0VfTlNTID0gQFVTRV9OU1NACitVU0VfT1BFTkxEQVAgPSBAVVNFX09QRU5MREFQQAorVVNFX1BPTEFSU1NMID0gQFVTRV9QT0xBUlNTTEAKK1VTRV9TU0xFQVkgPSBAVVNFX1NTTEVBWUAKK1VTRV9XSU5ET1dTX1NTUEkgPSBAVVNFX1dJTkRPV1NfU1NQSUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZFUlNJT05FRF9GTEFWT1VSID0gQFZFUlNJT05FRF9GTEFWT1VSQAorVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0UgPSBAVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0VACitWRVJTSU9ORURfU1lNQk9MU19UUlVFID0gQFZFUlNJT05FRF9TWU1CT0xTX1RSVUVACitWRVJTSU9OTlVNID0gQFZFUlNJT05OVU1ACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAorYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsaWJleHQgPSBAbGliZXh0QAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzdWJkaXJzID0gQHN1YmRpcnNACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduIG5vc3RkaW5jCisKKyMgU3BlY2lmeSBvdXIgaW5jbHVkZSBwYXRocyBoZXJlLCBhbmQgZG8gaXQgcmVsYXRpdmUgdG8gJCh0b3Bfc3JjZGlyKSBhbmQKKyMgJCh0b3BfYnVpbGRkaXIpLCB0byBlbnN1cmUgdGhhdCB0aGVzZSBwYXRocyB3aGljaCBiZWxvbmcgdG8gdGhlIGxpYnJhcnkKKyMgYmVpbmcgY3VycmVudGx5IGJ1aWx0IGFuZCB0ZXN0ZWQgYXJlIHNlYXJjaGVkIGJlZm9yZSB0aGUgbGlicmFyeSB3aGljaAorIyBtaWdodCBwb3NzaWJseSBhbHJlYWR5IGJlIGluc3RhbGxlZCBpbiB0aGUgc3lzdGVtLgorIworIyAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIGZvciBnZW5lcmF0ZWQgY3VybGJ1aWxkLmggaW5jbHVkZWQgZnJvbSBjdXJsLmgKKyMgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgZm9yIGdlbmVyYXRlZCBjdXJsYnVpbGQuaCBpbmNsdWRlZCBmcm9tIGxpYi9zZXR1cC5oCisjICQodG9wX3NyY2RpcikvaW5jbHVkZSBpcyBmb3IgbGliY3VybCdzIGV4dGVybmFsIGluY2x1ZGUgZmlsZXMKKyMgJCh0b3BfYnVpbGRkaXIpL2xpYiBpcyBmb3IgbGliY3VybCdzIGdlbmVyYXRlZCBsaWIvY3VybF9jb25maWcuaCBmaWxlCisjICQodG9wX2J1aWxkZGlyKS9zcmMgaXMgZm9yIGN1cmwncyBnZW5lcmF0ZWQgc3JjL2N1cmxfY29uZmlnLmggZmlsZQorIyAkKHRvcF9zcmNkaXIpL2xpYiBpcyBmb3IgbGliY3VybCdzIGxpYi9zZXR1cC5oIGFuZCBvdGhlciAiYm9ycm93ZWQiIGZpbGVzCisjICQodG9wX3NyY2Rpcikvc3JjIGlzIGZvciBjdXJsJ3Mgc3JjL3NldHVwLmggYW5kICJjdXJsLXByaXZhdGUiIGZpbGVzCitJTkNMVURFUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2xpYiAgICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL3NyYyAgICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9saWIgICAgICAgICAgICBcCisgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMKKworCisjIGxpYmN1cmwgaGFzIHNvdXJjZXMgdGhhdCBwcm92aWRlIGZ1bmN0aW9ucyBuYW1lZCBjdXJseF8qIHRoYXQgYXJlbid0IHBhcnQgb2YKKyMgdGhlIG9mZmljaWFsIEFQSSwgYnV0IHdlIHJlLXVzZSB0aGUgY29kZSBoZXJlIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgorQ1VSTFhfT05FUyA9ICQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jIFwKKwkkKHRvcF9zcmNkaXIpL2xpYi9zdHJkdXAuYyBcCisJJCh0b3Bfc3JjZGlyKS9saWIvcmF3c3RyLmMgXAorCSQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMKKworQ1VSTF9DRklMRVMgPSBodWdlaGVscC5jIFwKKwl0b29sX2Jpbm1vZGUuYyBcCisJdG9vbF9ibmFtZS5jIFwKKwl0b29sX2NiX2RiZy5jIFwKKwl0b29sX2NiX2hkci5jIFwKKwl0b29sX2NiX3ByZy5jIFwKKwl0b29sX2NiX3JlYS5jIFwKKwl0b29sX2NiX3NlZS5jIFwKKwl0b29sX2NiX3dydC5jIFwKKwl0b29sX2NmZ2FibGUuYyBcCisJdG9vbF9jb252ZXJ0LmMgXAorCXRvb2xfZGlyaGllLmMgXAorCXRvb2xfZG9zd2luLmMgXAorCXRvb2xfZWFzeXNyYy5jIFwKKwl0b29sX2Zvcm1wYXJzZS5jIFwKKwl0b29sX2dldHBhcmFtLmMgXAorCXRvb2xfZ2V0cGFzcy5jIFwKKwl0b29sX2hlbHAuYyBcCisJdG9vbF9oZWxwZXJzLmMgXAorCXRvb2xfaG9tZWRpci5jIFwKKwl0b29sX2xpYmluZm8uYyBcCisJdG9vbF9tYWluLmMgXAorCXRvb2xfbWZpbGVzLmMgXAorCXRvb2xfbXNncy5jIFwKKwl0b29sX29wZXJhdGUuYyBcCisJdG9vbF9vcGVyaGxwLmMgXAorCXRvb2xfcGFueWtleS5jIFwKKwl0b29sX3BhcmFtaGxwLmMgXAorCXRvb2xfcGFyc2VjZmcuYyBcCisJdG9vbF9zZXRvcHQuYyBcCisJdG9vbF9zbGVlcC5jIFwKKwl0b29sX3VybGdsb2IuYyBcCisJdG9vbF91dGlsLmMgXAorCXRvb2xfdm1zLmMgXAorCXRvb2xfd3JpdGVlbnYuYyBcCisJdG9vbF93cml0ZW91dC5jIFwKKwl0b29sX3hhdHRyLmMKKworQ1VSTF9IRklMRVMgPSBodWdlaGVscC5oIHNldHVwLmggY29uZmlnLXdpbjMyLmggY29uZmlnLW1hYy5oIFwKKwljb25maWctcmlzY29zLmggXAorCXRvb2xfYmlubW9kZS5oIFwKKwl0b29sX2JuYW1lLmggXAorCXRvb2xfY2JfZGJnLmggXAorCXRvb2xfY2JfaGRyLmggXAorCXRvb2xfY2JfcHJnLmggXAorCXRvb2xfY2JfcmVhLmggXAorCXRvb2xfY2Jfc2VlLmggXAorCXRvb2xfY2Jfd3J0LmggXAorCXRvb2xfY2ZnYWJsZS5oIFwKKwl0b29sX2NvbnZlcnQuaCBcCisJdG9vbF9kaXJoaWUuaCBcCisJdG9vbF9kb3N3aW4uaCBcCisJdG9vbF9lYXN5c3JjLmggXAorCXRvb2xfZm9ybXBhcnNlLmggXAorCXRvb2xfZ2V0cGFyYW0uaCBcCisJdG9vbF9nZXRwYXNzLmggXAorCXRvb2xfaGVscC5oIFwKKwl0b29sX2hlbHBlcnMuaCBcCisJdG9vbF9ob21lZGlyLmggXAorCXRvb2xfbGliaW5mby5oIFwKKwl0b29sX21haW4uaCBcCisJdG9vbF9tZmlsZXMuaCBcCisJdG9vbF9tc2dzLmggXAorCXRvb2xfb3BlcmF0ZS5oIFwKKwl0b29sX29wZXJobHAuaCBcCisJdG9vbF9wYW55a2V5LmggXAorCXRvb2xfcGFyYW1obHAuaCBcCisJdG9vbF9wYXJzZWNmZy5oIFwKKwl0b29sX3NkZWNscy5oIFwKKwl0b29sX3NldG9wdC5oIFwKKwl0b29sX3NsZWVwLmggXAorCXRvb2xfdXJsZ2xvYi5oIFwKKwl0b29sX3V0aWwuaCBcCisJdG9vbF92ZXJzaW9uLmggXAorCXRvb2xfdm1zLmggXAorCXRvb2xfd3JpdGVlbnYuaCBcCisJdG9vbF93cml0ZW91dC5oIFwKKwl0b29sX3hhdHRyLmgKKworY3VybF9TT1VSQ0VTID0gJChDVVJMX0NGSUxFUykgJChDVVJMWF9PTkVTKSAkKENVUkxfSEZJTEVTKQorY3VybF9MREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYSBAQ1VSTF9MSUJTQAorY3VybF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK0JVSUxUX1NPVVJDRVMgPSBodWdlaGVscC5jIGNvbmZpZy13aW4zMi5oCitDTEVBTkZJTEVTID0gaHVnZWhlbHAuYyBjb25maWctd2luMzIuaAorRVhUUkFfRElTVCA9IG1raGVscC5wbCBtYWtlZmlsZS5kaiBNYWtlZmlsZS52YzYgTWFrZWZpbGUuYjMyIE1ha2VmaWxlLm0zMiBcCisJY3VybF9jb25maWcuaC5pbiBtYWNvcy9jdXJsLm1jcC54bWwuc2l0LmhxeAkJCSAgXAorCW1hY29zL01BQ0lOU1RBTEwuVFhUIG1hY29zL3NyYy9jdXJsX0dVU0lDb25maWcuY3BwIHZjNmN1cmxzcmMuZHNwIFwKKwltYWNvcy9zcmMvbWFjb3NfbWFpbi5jcHAgY29uZmlnLWFtaWdhb3MuaCBtYWtlZmlsZS5hbWlnYSBjdXJsLnJjICBcCisJTWFrZWZpbGUubmV0d2FyZSBNYWtlZmlsZS5pbmMgTWFrZWZpbGUuV2F0Y29tIHZjNmN1cmxzcmMuZHN3ICAgICAgXAorCUNNYWtlTGlzdHMudHh0CisKK01BTlBBR0UgPSAkKHRvcF9zcmNkaXIpL2RvY3MvY3VybC4xCitSRUFETUUgPSAkKHRvcF9zcmNkaXIpL2RvY3MvTUFOVUFMCitNS0hFTFAgPSAkKHRvcF9zcmNkaXIpL3NyYy9ta2hlbHAucGwKK0hVR0UgPSBodWdlaGVscC5jCitDRkdXSU4zMiA9IGNvbmZpZy13aW4zMi5oCithbGw6ICQoQlVJTFRfU09VUkNFUykgY3VybF9jb25maWcuaAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbmMgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHNyYy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgc3JjL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK2N1cmxfY29uZmlnLmg6IHN0YW1wLWgyCisJQGlmIHRlc3QgISAtZiAkQDsgdGhlbiBcCisJICBybSAtZiBzdGFtcC1oMjsgXAorCSAgJChNQUtFKSBzdGFtcC1oMjsgXAorCWVsc2UgOjsgZmkKKworc3RhbXAtaDI6ICQoc3JjZGlyKS9jdXJsX2NvbmZpZy5oLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQHJtIC1mIHN0YW1wLWgyCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyBzcmMvY3VybF9jb25maWcuaAorJChzcmNkaXIpL2N1cmxfY29uZmlnLmguaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpIAorCWNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPSEVBREVSKQorCXJtIC1mIHN0YW1wLWgyCisJdG91Y2ggJEAKKworZGlzdGNsZWFuLWhkcjoKKwktcm0gLWYgY3VybF9jb25maWcuaCBzdGFtcC1oMgoraW5zdGFsbC1iaW5QUk9HUkFNUzogJChiaW5fUFJPR1JBTVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChiaW5kaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChiaW5kaXIpIgorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIHAxPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJICBpZiB0ZXN0IC1mICQkcCBcCisJICAgICB8fCB0ZXN0IC1mICQkcDEgXAorCSAgOyB0aGVuIFwKKwkgICAgZj1gZWNobyAiJCRwMSIgfCBzZWQgJ3MsXi4qLywsOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nYDsgXAorCSAgIGVjaG8gIiAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChiaW5QUk9HUkFNU19JTlNUQUxMKSAnJCRwJyAnJChERVNURElSKSQoYmluZGlyKS8kJGYnIjsgXAorCSAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKGJpblBST0dSQU1TX0lOU1RBTEwpICIkJHAiICIkKERFU1RESVIpJChiaW5kaXIpLyQkZiIgfHwgZXhpdCAxOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZG9uZQorCit1bmluc3RhbGwtYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBmPWBlY2hvICIkJHAiIHwgc2VkICdzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLydgOyBcCisJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKGJpbmRpcikvJCRmJyI7IFwKKwkgIHJtIC1mICIkKERFU1RESVIpJChiaW5kaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWJpblBST0dSQU1TOgorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGY9YGVjaG8gJCRwfHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwkgIGVjaG8gIiBybSAtZiAkJHAgJCRmIjsgXAorCSAgcm0gLWYgJCRwICQkZiA7IFwKKwlkb25lCitjdXJsJChFWEVFWFQpOiAkKGN1cmxfT0JKRUNUUykgJChjdXJsX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGN1cmwkKEVYRUVYVCkKKwkkKExJTkspICQoY3VybF9MREZMQUdTKSAkKGN1cmxfT0JKRUNUUykgJChjdXJsX0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9odWdlaGVscC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbm9uYmxvY2suUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Jhd3N0ci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RyZHVwLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJ0b29mZnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rvb2xfYmlubW9kZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9ibmFtZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9jYl9kYmcuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rvb2xfY2JfaGRyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90b29sX2NiX3ByZy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9jYl9yZWEuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rvb2xfY2Jfc2VlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90b29sX2NiX3dydC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9jZmdhYmxlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90b29sX2NvbnZlcnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rvb2xfZGlyaGllLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90b29sX2Rvc3dpbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9lYXN5c3JjLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90b29sX2Zvcm1wYXJzZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9nZXRwYXJhbS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9nZXRwYXNzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90b29sX2hlbHAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rvb2xfaGVscGVycy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9ob21lZGlyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90b29sX2xpYmluZm8uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rvb2xfbWFpbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9tZmlsZXMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rvb2xfbXNncy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9vcGVyYXRlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90b29sX29wZXJobHAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rvb2xfcGFueWtleS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9wYXJhbWhscC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9wYXJzZWNmZy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF9zZXRvcHQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rvb2xfc2xlZXAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rvb2xfdXJsZ2xvYi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF91dGlsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90b29sX3Ztcy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF93cml0ZWVudi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF93cml0ZW91dC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdG9vbF94YXR0ci5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2A7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBsbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitzdHJ0b29mZnQubzogJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzdHJ0b29mZnQubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3N0cnRvb2ZmdC5UcG8iIC1jIC1vIHN0cnRvb2ZmdC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zdHJ0b29mZnQuVHBvIiAiJChERVBESVIpL3N0cnRvb2ZmdC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zdHJ0b29mZnQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnIG9iamVjdD0nc3RydG9vZmZ0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN0cnRvb2ZmdC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMKKworc3RydG9vZmZ0Lm9iajogJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzdHJ0b29mZnQub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvc3RydG9vZmZ0LlRwbyIgLWMgLW8gc3RydG9vZmZ0Lm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc3RydG9vZmZ0LlRwbyIgIiQoREVQRElSKS9zdHJ0b29mZnQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvc3RydG9vZmZ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJyBvYmplY3Q9J3N0cnRvb2ZmdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN0cnRvb2ZmdC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IGZpYAorCitzdHJkdXAubzogJCh0b3Bfc3JjZGlyKS9saWIvc3RyZHVwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzdHJkdXAubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3N0cmR1cC5UcG8iIC1jIC1vIHN0cmR1cC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJkdXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RyZHVwLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zdHJkdXAuVHBvIiAiJChERVBESVIpL3N0cmR1cC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zdHJkdXAuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvc3RyZHVwLmMnIG9iamVjdD0nc3RyZHVwLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN0cmR1cC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJkdXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RyZHVwLmMKKworc3RyZHVwLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvc3RyZHVwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzdHJkdXAub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvc3RyZHVwLlRwbyIgLWMgLW8gc3RyZHVwLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZHVwLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZHVwLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cmR1cC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc3RyZHVwLlRwbyIgIiQoREVQRElSKS9zdHJkdXAuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvc3RyZHVwLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3N0cmR1cC5jJyBvYmplY3Q9J3N0cmR1cC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN0cmR1cC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cmR1cC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cmR1cC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9zdHJkdXAuYyc7IGZpYAorCityYXdzdHIubzogJCh0b3Bfc3JjZGlyKS9saWIvcmF3c3RyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCByYXdzdHIubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3Jhd3N0ci5UcG8iIC1jIC1vIHJhd3N0ci5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9yYXdzdHIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvcmF3c3RyLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9yYXdzdHIuVHBvIiAiJChERVBESVIpL3Jhd3N0ci5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9yYXdzdHIuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvcmF3c3RyLmMnIG9iamVjdD0ncmF3c3RyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJhd3N0ci5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9yYXdzdHIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvcmF3c3RyLmMKKworcmF3c3RyLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvcmF3c3RyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCByYXdzdHIub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmF3c3RyLlRwbyIgLWMgLW8gcmF3c3RyLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvcmF3c3RyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvcmF3c3RyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3Jhd3N0ci5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvcmF3c3RyLlRwbyIgIiQoREVQRElSKS9yYXdzdHIuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcmF3c3RyLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3Jhd3N0ci5jJyBvYmplY3Q9J3Jhd3N0ci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJhd3N0ci5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3Jhd3N0ci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3Jhd3N0ci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9yYXdzdHIuYyc7IGZpYAorCitub25ibG9jay5vOiAkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbm9uYmxvY2subyAtTUQgLU1QIC1NRiAiJChERVBESVIpL25vbmJsb2NrLlRwbyIgLWMgLW8gbm9uYmxvY2subyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL25vbmJsb2NrLlRwbyIgIiQoREVQRElSKS9ub25ibG9jay5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9ub25ibG9jay5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJyBvYmplY3Q9J25vbmJsb2NrLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIG5vbmJsb2NrLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMKKworbm9uYmxvY2sub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbm9uYmxvY2sub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbm9uYmxvY2suVHBvIiAtYyAtbyBub25ibG9jay5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL25vbmJsb2NrLlRwbyIgIiQoREVQRElSKS9ub25ibG9jay5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9ub25ibG9jay5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJyBvYmplY3Q9J25vbmJsb2NrLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbm9uYmxvY2sub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyBmaWAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgY3VybF9jb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBjdXJsX2NvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSBjdXJsX2NvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGN1cmxfY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCSQobWtkaXJfcCkgJChkaXN0ZGlyKS9tYWNvcyAkKGRpc3RkaXIpL21hY29zL3NyYworCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stYW0KK0BDVVJMREVCVUdfRkFMU0VAYWxsLWxvY2FsOgorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKSBjdXJsX2NvbmZpZy5oIGFsbC1sb2NhbAoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoYmluZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKG1rZGlyX3ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKEJVSUxUX1NPVVJDRVMpIiB8fCBybSAtZiAkKEJVSUxUX1NPVVJDRVMpCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWJpblBST0dSQU1TIHVuaW5zdGFsbC1pbmZvLWFtCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBhbGwtbG9jYWwgY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorCWNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1iaW5QUk9HUkFNUyBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWJpblBST0dSQU1TIFwKKwl1bmluc3RhbGwtaW5mby1hbQorCisKKyQoQ0ZHV0lOMzIpOiAkKHRvcF9zcmNkaXIpL2xpYi9jb25maWctd2luMzIuaAorCWVjaG8gImNyZWF0aW5nICQoQ0ZHV0lOMzIpIgorCUAoY3AgJCh0b3Bfc3JjZGlyKS9saWIvY29uZmlnLXdpbjMyLmggJChDRkdXSU4zMikpCisKKyMgSGVyZSBhcmUgdGhlIHN0dWZmIHRvIGNyZWF0ZSBhIGJ1aWx0LWluIG1hbnVhbAorCisjIFRoaXMgZ2VuZXJhdGVzIHRoZSBodWdlaGVscC5jIGZpbGUgaW4gYm90aCB1bmNvbXByZXNzZWQgYW5kIGNvbXByZXNzZWQgZm9ybWF0cworQEhBVkVfTElCWl9UUlVFQEBVU0VfTUFOVUFMX1RSVUVAJChIVUdFKTogJChSRUFETUUpICQoTUFOUEFHRSkgIG1raGVscC5wbAorQEhBVkVfTElCWl9UUlVFQEBVU0VfTUFOVUFMX1RSVUVACWVjaG8gJyNpbmNsdWRlICJzZXR1cC5oIicgPiAkKEhVR0UpCitASEFWRV9MSUJaX1RSVUVAQFVTRV9NQU5VQUxfVFJVRUAJZWNobyAnI2lmbmRlZiBIQVZFX0xJQlonID4+ICQoSFVHRSkKK0BIQVZFX0xJQlpfVFJVRUBAVVNFX01BTlVBTF9UUlVFQAkkKE5ST0ZGKSAkKE1BTlBBR0UpIHwgJChQRVJMKSAkKE1LSEVMUCkgJChSRUFETUUpID4+ICQoSFVHRSkKK0BIQVZFX0xJQlpfVFJVRUBAVVNFX01BTlVBTF9UUlVFQAllY2hvICcjZWxzZScgPj4gJChIVUdFKQorQEhBVkVfTElCWl9UUlVFQEBVU0VfTUFOVUFMX1RSVUVACSQoTlJPRkYpICQoTUFOUEFHRSkgfCAkKFBFUkwpICQoTUtIRUxQKSAtYyAkKFJFQURNRSkgPj4gJChIVUdFKQorQEhBVkVfTElCWl9UUlVFQEBVU0VfTUFOVUFMX1RSVUVACWVjaG8gJyNlbmRpZiAvKiBIQVZFX0xJQlogKi8nID4+ICQoSFVHRSkKKyMgVGhpcyBnZW5lcmF0ZXMgdGhlIGh1Z2VoZWxwLmMgZmlsZSB1bmNvbXByZXNzZWQgb25seQorQEhBVkVfTElCWl9GQUxTRUBAVVNFX01BTlVBTF9UUlVFQCQoSFVHRSk6ICQoUkVBRE1FKSAkKE1BTlBBR0UpICBta2hlbHAucGwKK0BIQVZFX0xJQlpfRkFMU0VAQFVTRV9NQU5VQUxfVFJVRUAJZWNobyAnI2luY2x1ZGUgInNldHVwLmgiJyA+ICQoSFVHRSkKK0BIQVZFX0xJQlpfRkFMU0VAQFVTRV9NQU5VQUxfVFJVRUAJJChOUk9GRikgJChNQU5QQUdFKSB8ICQoUEVSTCkgJChNS0hFTFApICQoUkVBRE1FKSA+PiAkKEhVR0UpCisKKyMgYnVpbHQtaW4gbWFudWFsIGhhcyBiZWVuIGRpc2FibGVkLCBtYWtlIGEgYmxhbmsgZmlsZQorQFVTRV9NQU5VQUxfRkFMU0VAJChIVUdFKToKK0BVU0VfTUFOVUFMX0ZBTFNFQAllY2hvICIvKiBidWlsdC1pbiBtYW51YWwgaXMgZGlzYWJsZWQsIGJsYW5rIGZ1bmN0aW9uICovIiA+ICQoSFVHRSkKK0BVU0VfTUFOVUFMX0ZBTFNFQAllY2hvICcjaW5jbHVkZSAiaHVnZWhlbHAuaCInID4+ICQoSFVHRSkKK0BVU0VfTUFOVUFMX0ZBTFNFQAllY2hvICJ2b2lkIGh1Z2VoZWxwKHZvaWQpIHt9IiA+PiQoSFVHRSkKKworIyBpZ25vcmUgaHVnZWhlbHAuYyBzaW5jZSBpdCBpcyBnZW5lcmF0ZWQgc291cmNlIGNvZGUgYW5kIGl0IHBsYXlzIGJ5IHNsaWdodGx5CisjIGRpZmZlcmVudCBydWxlcyEgY29uZmlnLXdpbjMyLmggYWxyZWFkeSBjaGVja2VkIGluIGxpYiBzdWJkaXIuCitjaGVja3NyYzoKKwlAQFBFUkxAICQodG9wX3NyY2RpcikvbGliL2NoZWNrc3JjLnBsIC1EJCh0b3Bfc3JjZGlyKS9zcmMgLVdodWdlaGVscC5jIC1XY29uZmlnLXdpbjMyLmggJChjdXJsX1NPVVJDRVMpCisKKyMgZm9yIGRlYnVnIGJ1aWxkcywgd2Ugc2NhbiB0aGUgc291cmNlcyBvbiBhbGwgcmVndWxhciBtYWtlIGludm9rZXMKK0BDVVJMREVCVUdfVFJVRUBhbGwtbG9jYWw6IGNoZWNrc3JjCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUuaW5jIGIvY3VybC03LjI1LjAvc3JjL01ha2VmaWxlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDNhYzUxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL01ha2VmaWxlLmluYwpAQCAtMCwwICsxLDk3IEBACisjIC4vc3JjL01ha2VmaWxlLmluYworIyBVc2luZyB0aGUgYmFja3NsYXNoIGFzIGxpbmUgY29udGludWF0aW9uIGNoYXJhY3RlciBtaWdodCBiZSBwcm9ibGVtYXRpYworIyB3aXRoIHNvbWUgbWFrZSBmbGF2b3VycywgYXMgV2F0Y29tJ3Mgd21ha2Ugc2hvd2VkIHVzIGFscmVhZHkuIElmIHdlCisjIGV2ZXIgd2FudCB0byBjaGFuZ2UgdGhpcyBpbiBhIHBvcnRhYmxlIG1hbm5lciB0aGVuIHdlIHNob3VsZCBjb25zaWRlcgorIyB0aGlzIGlkZWEgKHBvc3RlZCB0byB0aGUgbGliY3VybCBsaXN0IGJ5IEFkYW0gS2VsbGFzKToKKyMgQ1NSQzEgPSBmaWxlMS5jIGZpbGUyLmMgZmlsZTMuYworIyBDU1JDMiA9IGZpbGU0LmMgZmlsZTUuYyBmaWxlNi5jCisjIENTT1VSQ0VTID0gJChDU1JDMSkgJChDU1JDMikKKworIyBsaWJjdXJsIGhhcyBzb3VyY2VzIHRoYXQgcHJvdmlkZSBmdW5jdGlvbnMgbmFtZWQgY3VybHhfKiB0aGF0IGFyZW4ndCBwYXJ0IG9mCisjIHRoZSBvZmZpY2lhbCBBUEksIGJ1dCB3ZSByZS11c2UgdGhlIGNvZGUgaGVyZSB0byBhdm9pZCBkdXBsaWNhdGlvbi4KK0NVUkxYX09ORVMgPSAkKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyBcCisJJCh0b3Bfc3JjZGlyKS9saWIvc3RyZHVwLmMgXAorCSQodG9wX3NyY2RpcikvbGliL3Jhd3N0ci5jIFwKKwkkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jCisKK0NVUkxfQ0ZJTEVTID0gaHVnZWhlbHAuYyBcCisJdG9vbF9iaW5tb2RlLmMgXAorCXRvb2xfYm5hbWUuYyBcCisJdG9vbF9jYl9kYmcuYyBcCisJdG9vbF9jYl9oZHIuYyBcCisJdG9vbF9jYl9wcmcuYyBcCisJdG9vbF9jYl9yZWEuYyBcCisJdG9vbF9jYl9zZWUuYyBcCisJdG9vbF9jYl93cnQuYyBcCisJdG9vbF9jZmdhYmxlLmMgXAorCXRvb2xfY29udmVydC5jIFwKKwl0b29sX2RpcmhpZS5jIFwKKwl0b29sX2Rvc3dpbi5jIFwKKwl0b29sX2Vhc3lzcmMuYyBcCisJdG9vbF9mb3JtcGFyc2UuYyBcCisJdG9vbF9nZXRwYXJhbS5jIFwKKwl0b29sX2dldHBhc3MuYyBcCisJdG9vbF9oZWxwLmMgXAorCXRvb2xfaGVscGVycy5jIFwKKwl0b29sX2hvbWVkaXIuYyBcCisJdG9vbF9saWJpbmZvLmMgXAorCXRvb2xfbWFpbi5jIFwKKwl0b29sX21maWxlcy5jIFwKKwl0b29sX21zZ3MuYyBcCisJdG9vbF9vcGVyYXRlLmMgXAorCXRvb2xfb3BlcmhscC5jIFwKKwl0b29sX3BhbnlrZXkuYyBcCisJdG9vbF9wYXJhbWhscC5jIFwKKwl0b29sX3BhcnNlY2ZnLmMgXAorCXRvb2xfc2V0b3B0LmMgXAorCXRvb2xfc2xlZXAuYyBcCisJdG9vbF91cmxnbG9iLmMgXAorCXRvb2xfdXRpbC5jIFwKKwl0b29sX3Ztcy5jIFwKKwl0b29sX3dyaXRlZW52LmMgXAorCXRvb2xfd3JpdGVvdXQuYyBcCisJdG9vbF94YXR0ci5jCisKK0NVUkxfSEZJTEVTID0gaHVnZWhlbHAuaCBzZXR1cC5oIGNvbmZpZy13aW4zMi5oIGNvbmZpZy1tYWMuaCBcCisJY29uZmlnLXJpc2Nvcy5oIFwKKwl0b29sX2Jpbm1vZGUuaCBcCisJdG9vbF9ibmFtZS5oIFwKKwl0b29sX2NiX2RiZy5oIFwKKwl0b29sX2NiX2hkci5oIFwKKwl0b29sX2NiX3ByZy5oIFwKKwl0b29sX2NiX3JlYS5oIFwKKwl0b29sX2NiX3NlZS5oIFwKKwl0b29sX2NiX3dydC5oIFwKKwl0b29sX2NmZ2FibGUuaCBcCisJdG9vbF9jb252ZXJ0LmggXAorCXRvb2xfZGlyaGllLmggXAorCXRvb2xfZG9zd2luLmggXAorCXRvb2xfZWFzeXNyYy5oIFwKKwl0b29sX2Zvcm1wYXJzZS5oIFwKKwl0b29sX2dldHBhcmFtLmggXAorCXRvb2xfZ2V0cGFzcy5oIFwKKwl0b29sX2hlbHAuaCBcCisJdG9vbF9oZWxwZXJzLmggXAorCXRvb2xfaG9tZWRpci5oIFwKKwl0b29sX2xpYmluZm8uaCBcCisJdG9vbF9tYWluLmggXAorCXRvb2xfbWZpbGVzLmggXAorCXRvb2xfbXNncy5oIFwKKwl0b29sX29wZXJhdGUuaCBcCisJdG9vbF9vcGVyaGxwLmggXAorCXRvb2xfcGFueWtleS5oIFwKKwl0b29sX3BhcmFtaGxwLmggXAorCXRvb2xfcGFyc2VjZmcuaCBcCisJdG9vbF9zZGVjbHMuaCBcCisJdG9vbF9zZXRvcHQuaCBcCisJdG9vbF9zbGVlcC5oIFwKKwl0b29sX3VybGdsb2IuaCBcCisJdG9vbF91dGlsLmggXAorCXRvb2xfdmVyc2lvbi5oIFwKKwl0b29sX3Ztcy5oIFwKKwl0b29sX3dyaXRlZW52LmggXAorCXRvb2xfd3JpdGVvdXQuaCBcCisJdG9vbF94YXR0ci5oCisKK2N1cmxfU09VUkNFUyA9ICQoQ1VSTF9DRklMRVMpICQoQ1VSTFhfT05FUykgJChDVVJMX0hGSUxFUykKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL01ha2VmaWxlLm0zMiBiL2N1cmwtNy4yNS4wL3NyYy9NYWtlZmlsZS5tMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmNDUxZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy9NYWtlZmlsZS5tMzIKQEAgLTAsMCArMSwyMzkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyMgTWFrZWZpbGUgZm9yIGJ1aWxkaW5nIGN1cmwuZXhlIHdpdGggTWluZ1cgKEdDQy0zLjIgb3IgbGF0ZXIpCisjIyBhbmQgb3B0aW9uYWxseSBPcGVuU1NMICgwLjkuOCksIGxpYnNzaDIgKDEuMyksIHpsaWIgKDEuMi41KSwgbGlicnRtcCAoMi4zKQorIyMKKyMjIFVzYWdlOiAgIG1pbmd3MzItbWFrZSAtZiBNYWtlZmlsZS5tMzIgQ0ZHPS1mZWF0dXJlMVstZmVhdHVyZTJdWy1mZWF0dXJlM11bLi4uXQorIyMgRXhhbXBsZTogbWluZ3czMi1tYWtlIC1mIE1ha2VmaWxlLm0zMiBDRkc9LXpsaWItc3NsLXNwaS13aW5pZG4KKyMjCisjIyBIaW50OiB5b3UgY2FuIGFsc28gc2V0IGVudmlyb25tZW50IHZhcnMgdG8gY29udHJvbCB0aGUgYnVpbGQsIGYuZS46CisjIyBzZXQgWkxJQl9QQVRIPWM6L3psaWItMS4yLjUKKyMjIHNldCBaTElCPTEKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBabGliIHNvdXJjZXMuCitpZm5kZWYgWkxJQl9QQVRICitaTElCX1BBVEggPSAuLi8uLi96bGliLTEuMi41CitlbmRpZgorIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgT3BlblNTTCBwYWNrYWdlLgoraWZuZGVmIE9QRU5TU0xfUEFUSAorT1BFTlNTTF9QQVRIID0gLi4vLi4vb3BlbnNzbC0wLjkuOHIKK2VuZGlmCitpZm5kZWYgT1BFTlNTTF9MSUJQQVRICitPUEVOU1NMX0xJQlBBVEggPSAkKE9QRU5TU0xfUEFUSCkvb3V0CitlbmRpZgoraWZuZGVmIE9QRU5TU0xfTElCUworT1BFTlNTTF9MSUJTID0gLWxlYXkzMiAtbHNzbDMyCitlbmRpZgorIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgTGliU1NIMiBwYWNrYWdlLgoraWZuZGVmIExJQlNTSDJfUEFUSAorTElCU1NIMl9QQVRIID0gLi4vLi4vbGlic3NoMi0xLjMuMAorZW5kaWYKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIGxpYnJ0bXAgcGFja2FnZS4KK2lmbmRlZiBMSUJSVE1QX1BBVEgKK0xJQlJUTVBfUEFUSCA9IC4uLy4uL2xpYnJ0bXAtMi4zCitlbmRpZgorIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgbGliaWRuIHBhY2thZ2UuCitpZm5kZWYgTElCSUROX1BBVEgKK0xJQklETl9QQVRIID0gLi4vLi4vbGliaWRuLTEuMTgKK2VuZGlmCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBNUyBJRE4gcGFja2FnZS4KKyMgTWljcm9zb2Z0IEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyAoSUROKSBNaXRpZ2F0aW9uIEFQSXMgMS4xCisjIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9kb3dubG9hZHMvZW4vZGV0YWlscy5hc3B4P0ZhbWlseUlEPWFkNjE1OGQ3LWRkYmEtNDE2YS05MTA5LTA3NjA3NDI1YTgxNQoraWZuZGVmIFdJTklETl9QQVRICitXSU5JRE5fUEFUSCA9IC4uLy4uL01pY3Jvc29mdCBJRE4gTWl0aWdhdGlvbiBBUElzCitlbmRpZgorIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgTm92ZWxsIExEQVAgTkRLLgoraWZuZGVmIExEQVBfU0RLCitMREFQX1NESyA9IGM6L25vdmVsbC9uZGsvY2xkYXBzZGsvd2luMzIKK2VuZGlmCisKK1BST09UID0gLi4KKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgYy1hcmVzIHBhY2thZ2UuCitpZm5kZWYgTElCQ0FSRVNfUEFUSAorTElCQ0FSRVNfUEFUSCA9ICQoUFJPT1QpL2FyZXMKK2VuZGlmCisKKyMgRWRpdCB0aGUgdmFyIGJlbG93IHRvIHNldCB0byB5b3VyIGFyY2hpdGVjdHVyZSBvciBzZXQgZW52aXJvbm1lbnQgdmFyLgoraWZuZGVmIEFSQ0gKK0FSQ0ggPSB3MzIKK2VuZGlmCisKK0NDID0gZ2NjCitDRkxBR1MgPSAtZyAtTzIgLVdhbGwKK0NGTEFHUyArPSAtZm5vLXN0cmljdC1hbGlhc2luZworaWZlcSAoJChBUkNIKSx3NjQpCitDRkxBR1MgKz0gLURfQU1ENjRfCitlbmRpZgorIyBjb21tZW50IExERkxBR1MgYmVsb3cgdG8ga2VlcCBkZWJ1ZyBpbmZvCitMREZMQUdTID0gLXMKK1JDID0gd2luZHJlcworUkNGTEFHUyA9IC0taW5jbHVkZS1kaXI9JChQUk9PVCkvaW5jbHVkZSAtTyBDT0ZGIC1pCisKK1JNID0gZGVsIC9xIC9mIDI+TlVMCitDUCA9IGNvcHkKKworIyBXZSBtYXkgbmVlZCB0aGVzZSBzb21lZGF5CisjIFBFUkwgPSBwZXJsCisjIE5ST0ZGID0gbnJvZmYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIE5vdGhpbmcgbW9yZSB0byBkbyBiZWxvdyB0aGlzIGxpbmUhCisKK2lmZXEgKCQoZmluZHN0cmluZyAtZHluLCQoQ0ZHKSksLWR5bikKK0RZTiA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLWFyZXMsJChDRkcpKSwtYXJlcykKK0FSRVMgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1ydG1wLCQoQ0ZHKSksLXJ0bXApCitSVE1QID0gMQorU1NMID0gMQorWkxJQiA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLXNzaDIsJChDRkcpKSwtc3NoMikKK1NTSDIgPSAxCitTU0wgPSAxCitaTElCID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtc3NsLCQoQ0ZHKSksLXNzbCkKK1NTTCA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLXpsaWIsJChDRkcpKSwtemxpYikKK1pMSUIgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1pZG4sJChDRkcpKSwtaWRuKQorSUROID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtd2luaWRuLCQoQ0ZHKSksLXdpbmlkbikKK1dJTklETiA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLXNzcGksJChDRkcpKSwtc3NwaSkKK1NTUEkgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1zcG5lZ28sJChDRkcpKSwtc3BuZWdvKQorU1BORUdPID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtbGRhcHMsJChDRkcpKSwtbGRhcHMpCitMREFQUyA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLWlwdjYsJChDRkcpKSwtaXB2NikKK0lQVjYgPSAxCitlbmRpZgorCitJTkNMVURFUyA9IC1JLiAtSS4uIC1JLi4vaW5jbHVkZSAtSS4uL2xpYgorCitpZmRlZiBEWU4KKyAgY3VybF9ERVBFTkRFTkNJRVMgPSAkKFBST09UKS9saWIvbGliY3VybGRsbC5hICQoUFJPT1QpL2xpYi9saWJjdXJsLmRsbAorICBjdXJsX0xEQUREID0gLUwkKFBST09UKS9saWIgLWxjdXJsZGxsCitlbHNlCisgIGN1cmxfREVQRU5ERU5DSUVTID0gJChQUk9PVCkvbGliL2xpYmN1cmwuYQorICBjdXJsX0xEQUREID0gLUwkKFBST09UKS9saWIgLWxjdXJsCisgIENGTEFHUyArPSAtRENVUkxfU1RBVElDTElCCitlbmRpZgoraWZkZWYgQVJFUworICBpZm5kZWYgRFlOCisgICAgY3VybF9ERVBFTkRFTkNJRVMgKz0gJChMSUJDQVJFU19QQVRIKS9saWJjYXJlcy5hCisgIGVuZGlmCisgIENGTEFHUyArPSAtRFVTRV9BUkVTCisgIGN1cmxfTERBREQgKz0gLUwiJChMSUJDQVJFU19QQVRIKSIgLWxjYXJlcworZW5kaWYKK2lmZGVmIFJUTVAKKyAgQ0ZMQUdTICs9IC1EVVNFX0xJQlJUTVAKKyAgY3VybF9MREFERCArPSAtTCIkKExJQlJUTVBfUEFUSCkvbGlicnRtcCIgLWxydG1wIC1sd2lubW0KK2VuZGlmCitpZmRlZiBTU0gyCisgIENGTEFHUyArPSAtRFVTRV9MSUJTU0gyIC1ESEFWRV9MSUJTU0gyX0gKKyAgY3VybF9MREFERCArPSAtTCIkKExJQlNTSDJfUEFUSCkvd2luMzIiIC1sc3NoMgorZW5kaWYKK2lmZGVmIFNTTAorICBDRkxBR1MgKz0gLURVU0VfU1NMRUFZIC1ESEFWRV9PUEVOU1NMX0VOR0lORV9ICisgIGN1cmxfTERBREQgKz0gLUwiJChPUEVOU1NMX0xJQlBBVEgpIiAkKE9QRU5TU0xfTElCUykKK2VuZGlmCitpZmRlZiBaTElCCisgIElOQ0xVREVTICs9IC1JIiQoWkxJQl9QQVRIKSIKKyAgQ0ZMQUdTICs9IC1ESEFWRV9MSUJaIC1ESEFWRV9aTElCX0gKKyAgY3VybF9MREFERCArPSAtTCIkKFpMSUJfUEFUSCkiIC1segorZW5kaWYKK2lmZGVmIElETgorICBDRkxBR1MgKz0gLURVU0VfTElCSUROCisgIGN1cmxfTERBREQgKz0gLUwiJChMSUJJRE5fUEFUSCkvbGliIiAtbGlkbgorZWxzZQoraWZkZWYgV0lOSUROCisgIENGTEFHUyArPSAtRFVTRV9XSU4zMl9JRE4KKyAgY3VybF9MREFERCArPSAtTCIkKFdJTklETl9QQVRIKSIgLWxub3JtYWxpegorZW5kaWYKK2VuZGlmCitpZmRlZiBTU1BJCisgIENGTEFHUyArPSAtRFVTRV9XSU5ET1dTX1NTUEkKK2VuZGlmCitpZmRlZiBTUE5FR08KKyAgQ0ZMQUdTICs9IC1ESEFWRV9TUE5FR08KK2VuZGlmCitpZmRlZiBJUFY2CisgIENGTEFHUyArPSAtREVOQUJMRV9JUFY2IC1EX1dJTjMyX1dJTk5UPTB4MDUwMQorZW5kaWYKK2lmZGVmIExEQVBTCisgIENGTEFHUyArPSAtREhBVkVfTERBUF9TU0wKK2VuZGlmCitpZmRlZiBVU0VfTERBUF9OT1ZFTEwKKyAgQ0ZMQUdTICs9IC1EQ1VSTF9IQVNfTk9WRUxMX0xEQVBTREsKKyAgY3VybF9MREFERCArPSAtTCIkKExEQVBfU0RLKS9saWIvbXNjdmMiIC1sbGRhcHNkayAtbGxkYXBzc2wgLWxsZGFweAorZW5kaWYKK2lmZGVmIFVTRV9MREFQX09QRU5MREFQCisgIENGTEFHUyArPSAtRENVUkxfSEFTX09QRU5MREFQX0xEQVBTREsKKyAgY3VybF9MREFERCArPSAtTCIkKExEQVBfU0RLKS9saWIiIC1sbGRhcCAtbGxiZXIKK2VuZGlmCitpZm5kZWYgVVNFX0xEQVBfTk9WRUxMCitpZm5kZWYgVVNFX0xEQVBfT1BFTkxEQVAKK2N1cmxfTERBREQgKz0gLWx3bGRhcDMyCitlbmRpZgorZW5kaWYKK2N1cmxfTERBREQgKz0gLWx3czJfMzIKKworIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgdGhlIENTT1VSQ0VTIGFuZCBISEVBREVSUyBkZWZpbmVzCitpbmNsdWRlIE1ha2VmaWxlLmluYworCitjdXJsX1BST0dSQU1TID0gY3VybC5leGUKK2N1cmxfT0JKRUNUUyA6PSAkKHBhdHN1YnN0ICUuYywlLm8sJChzdHJpcCAkKENVUkxfQ0ZJTEVTKSkpCitjdXJseF9PQkpFQ1RTIDo9ICQocGF0c3Vic3QgJS5jLCUubywkKG5vdGRpciAkKHN0cmlwICQoQ1VSTFhfT05FUykpKSkKK2lmZGVmIERZTgorY3VybF9PQkpFQ1RTICs9ICQoY3VybHhfT0JKRUNUUykKK3ZwYXRoICUuYyAkKFBST09UKS9saWIKK2VuZGlmCisKK1JFU09VUkNFID0gY3VybC5yZXMKKworCithbGw6ICQoY3VybF9QUk9HUkFNUykKKworY3VybC5leGU6ICQoUkVTT1VSQ0UpICQoY3VybF9PQkpFQ1RTKSAkKGN1cmxfREVQRU5ERU5DSUVTKQorCS0kKFJNKSAkQAorCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJDwgJChjdXJsX09CSkVDVFMpICQoY3VybF9MREFERCkKKworIyBXZSBkb24ndCBoYXZlIG5yb2ZmIG5vcm1hbGx5IHVuZGVyIHdpbjMyCisjIGh1Z2VoZWxwLmM6ICQoUFJPT1QpL1JFQURNRS5jdXJsICQoUFJPT1QpL2N1cmwuMSBta2hlbHAucGwKKyMgCS0kKFJNKSBodWdlaGVscC5jCisjIAkkKE5ST0ZGKSAtbWFuICQoUFJPT1QpL2N1cmwuMSB8ICQoUEVSTCkgbWtoZWxwLnBsICQoUFJPT1QpL1JFQURNRS5jdXJsID4gaHVnZWhlbHAuYworCitodWdlaGVscC5jOgorCUBlY2hvIENyZWF0aW5nICRACisJQCQoQ1ApIGh1Z2VoZWxwLmMuY3ZzICRACisKKyUubzogJS5jCisJJChDQykgJChJTkNMVURFUykgJChDRkxBR1MpIC1jICQ8CisKKyUucmVzOiAlLnJjCisJJChSQykgJChSQ0ZMQUdTKSAkPCAtbyAkQAorCitjbGVhbjoKK2lmZXEgIiQod2lsZGNhcmQgaHVnZWhlbHAuYy5jdnMpIiAiaHVnZWhlbHAuYy5jdnMiCisJLSQoUk0pIGh1Z2VoZWxwLmMKK2VuZGlmCisJLSQoUk0pICQoY3VybF9PQkpFQ1RTKSAkKGN1cmx4X09CSkVDVFMpICQoUkVTT1VSQ0UpCisKK2Rpc3RjbGVhbiB2Y2xlYW46IGNsZWFuCisJLSQoUk0pICQoY3VybF9QUk9HUkFNUykKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL01ha2VmaWxlLm5ldHdhcmUgYi9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUubmV0d2FyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTY2Zjc5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL01ha2VmaWxlLm5ldHdhcmUKQEAgLTAsMCArMSw2NjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgY3VybC5ubG0gKE5ldFdhcmUgdmVyc2lvbiAtIGdudSBtYWtlKQorIyMgVXNlOiBtYWtlIC1mIE1ha2VmaWxlLm5ldHdhcmUKKyMjCisjIyBDb21tZW50cyB0bzogR3VlbnRlciBLbmF1ZiBodHRwOi8vd3d3LmdrbncubmV0L3BocGJiCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBOb3ZlbGwgTkRLLgoraWZuZGVmIE5ES0JBU0UKK05ES0JBU0UJPSBjOi9ub3ZlbGwKK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIFpsaWIgc291cmNlcy4KK2lmbmRlZiBaTElCX1BBVEgKK1pMSUJfUEFUSCA9IC4uLy4uL3psaWItMS4yLjUKK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIE9wZW5TU0wgcGFja2FnZS4KK2lmbmRlZiBPUEVOU1NMX1BBVEgKK09QRU5TU0xfUEFUSCA9IC4uLy4uL29wZW5zc2wtMC45LjhyCitlbmRpZgorCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBMaWJTU0gyIHBhY2thZ2UuCitpZm5kZWYgTElCU1NIMl9QQVRICitMSUJTU0gyX1BBVEggPSAuLi8uLi9saWJzc2gyLTEuMy4wCitlbmRpZgorCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBheFRMUyBwYWNrYWdlLgoraWZuZGVmIEFYVExTX1BBVEgKK0FYVExTX1BBVEggPSAuLi8uLi9heFRMUy0xLjIuNworZW5kaWYKKworIyBFZGl0IHRoZSBwYXRoIGJlbG93IHRvIHBvaW50IHRvIHRoZSBiYXNlIG9mIHlvdXIgbGliaWRuIHBhY2thZ2UuCitpZm5kZWYgTElCSUROX1BBVEgKK0xJQklETl9QQVRIID0gLi4vLi4vbGliaWRuLTEuMTgKK2VuZGlmCisKKyMgRWRpdCB0aGUgcGF0aCBiZWxvdyB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIGxpYnJ0bXAgcGFja2FnZS4KK2lmbmRlZiBMSUJSVE1QX1BBVEgKK0xJQlJUTVBfUEFUSCA9IC4uLy4uL2xpYnJ0bXAtMi4zCitlbmRpZgorCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBmYm9wZW5zc2wgcGFja2FnZS4KK2lmbmRlZiBGQk9QRU5TU0xfUEFUSAorRkJPUEVOU1NMX1BBVEggPSAuLi8uLi9mYm9wZW5zc2wtMC40CitlbmRpZgorCisjIEVkaXQgdGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGJhc2Ugb2YgeW91ciBjLWFyZXMgcGFja2FnZS4KK2lmbmRlZiBMSUJDQVJFU19QQVRICitMSUJDQVJFU19QQVRIID0gLi4vYXJlcworZW5kaWYKKworaWZuZGVmIElOU1RESVIKK0lOU1RESVIJPSAuLiQoRFMpY3VybC0kKExJQkNVUkxfVkVSU0lPTl9TVFIpLWJpbi1udworZW5kaWYKKworIyBFZGl0IHRoZSB2YXJzIGJlbG93IHRvIGNoYW5nZSBOTE0gdGFyZ2V0IHNldHRpbmdzLgorVEFSR0VUICA9IGN1cmwKK1ZFUlNJT04JPSAkKExJQkNVUkxfVkVSU0lPTikKK0NPUFlSCT0gQ29weXJpZ2h0IChDKSAkKExJQkNVUkxfQ09QWVJJR0hUX1NUUikKK0RFU0NSCT0gY1VSTCAkKExJQkNVUkxfVkVSU0lPTl9TVFIpICgkKExJQkFSQ0gpKSAtIGh0dHA6Ly9jdXJsLmhheHguc2UKK01UU0FGRQk9IFlFUworU1RBQ0sJPSA2NDAwMAorU0NSRUVOCT0gJChUQVJHRVQpIGNvbW1hbmRsaW5lIHV0aWxpdHkKKyMgQ29tbWVudCB0aGUgbGluZSBiZWxvdyBpZiB5b3UgZG9udCB3YW50IHRvIGxvYWQgcHJvdGVjdGVkIGF1dG9tYXRpY2FsbHkuCisjIExEUklORyA9IDMKKworIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBlbmFibGUgbGlua2luZyB3aXRoIFBPU0lYIHNlbWFudGljcy4KKyMgUE9TSVhGTCA9IDEKKworIyBFZGl0IHRoZSB2YXIgYmVsb3cgdG8gcG9pbnQgdG8geW91ciBsaWIgYXJjaGl0ZWN0dXJlLgoraWZuZGVmIExJQkFSQ0gKK0xJQkFSQ0ggPSBMSUJDCitlbmRpZgorCisjIG11c3QgYmUgZXF1YWwgdG8gTkRFQlVHIG9yIERFQlVHLCBDVVJMREVCVUcKK2lmbmRlZiBEQgorREIJPSBOREVCVUcKK2VuZGlmCisjIE9wdGltaXphdGlvbjogLU88bj4gb3IgZGVidWdnaW5nOiAtZworaWZlcSAoJChEQiksTkRFQlVHKQorCU9QVAk9IC1PMgorCU9CSkRJUgk9IHJlbGVhc2UKK2Vsc2UKKwlPUFQJPSAtZworCU9CSkRJUgk9IGRlYnVnCitlbmRpZgorCisjIFRoZSBmb2xsb3dpbmcgbGluZXMgZGVmaW5lcyB5b3VyIGNvbXBpbGVyLgoraWZkZWYgQ1dGb2xkZXIKKwlNRVRST1dFUktTID0gJChDV0ZvbGRlcikKK2VuZGlmCitpZmRlZiBNRVRST1dFUktTCisJIyBNV0NXX1BBVEggPSAkKHN1YnN0IFwsLywkKE1FVFJPV0VSS1MpKS9Ob3ZlbGwgU3VwcG9ydAorCU1XQ1dfUEFUSCA9ICQoc3Vic3QgXCwvLCQoTUVUUk9XRVJLUykpL05vdmVsbCBTdXBwb3J0L01ldHJvd2Vya3MgU3VwcG9ydAorCUNDID0gbXdjY25sbQorZWxzZQorCUNDID0gZ2NjCitlbmRpZgorUEVSTAk9IHBlcmwKKyMgSGVyZSB5b3UgY2FuIGZpbmQgYSBuYXRpdmUgV2luMzIgYmluYXJ5IG9mIHRoZSBvcmlnaW5hbCBhd2s6CisjIGh0dHA6Ly93d3cuZ2tudy5uZXQvZGV2ZWxvcG1lbnQvcHJndG9vbHMvYXdrLTIwMTAwNTIzLnppcAorQVdLCT0gYXdrCitDUAk9IGNwIC1hZnYKK01LRElSCT0gbWtkaXIKKyMgUk0JPSBybSAtZgorIyBJZiB5b3Ugd2FudCB0byBtYXJrIHRoZSB0YXJnZXQgYXMgTVRTQUZFIHlvdSB3aWxsIG5lZWQgYSB0b29sIGZvcgorIyBnZW5lcmF0aW5nIHRoZSB4ZGMgZGF0YSBmb3IgdGhlIGxpbmtlcjsgaGVyZSdzIGEgbWluaW1hbCB0b29sOgorIyBodHRwOi8vd3d3LmdrbncubmV0L2RldmVsb3BtZW50L3ByZ3Rvb2xzL21reGRjLnppcAorTVBLWERDCT0gbWt4ZGMKKworIyBMSUJBUkNIX1UgPSAkKHNoZWxsICQoQVdLKSAnQkVHSU4ge3ByaW50IHRvdXBwZXIoQVJHVlsxXSl9JyAkKExJQkFSQ0gpKQorTElCQVJDSF9MID0gJChzaGVsbCAkKEFXSykgJ0JFR0lOIHtwcmludCB0b2xvd2VyKEFSR1ZbMV0pfScgJChMSUJBUkNIKSkKKworIyBJbmNsdWRlIHRoZSB2ZXJzaW9uIGluZm8gcmV0cmlldmVkIGZyb20gY3VybHZlci5oCistaW5jbHVkZSAkKE9CSkRJUikvdmVyc2lvbi5pbmMKKworIyBHbG9iYWwgZmxhZ3MgZm9yIGFsbCBjb21waWxlcnMKK0NGTEFHUwkrPSAkKE9QVCkgLUQkKERCKSAtRE5FVFdBUkUgLURIQVZFX0NPTkZJR19IIC1ub3N0ZGluYworCitpZmVxICgkKENDKSxtd2NjbmxtKQorTEQJPSBtd2xkbmxtCitMREZMQUdTCT0gLW5vc3RkbGliICQoT0JKUykgJChQUkVMVURFKSAkKExETElCUykgLW8gJEAgLWNvbW1hbmRmaWxlCitMSUJFWFQJPSBsaWIKK0NGTEFHUwkrPSAtZ2NjaW5jIC1pbmxpbmUgb2ZmIC1vcHQgbm9pbnRyaW5zaWNzIC1wcm9jIDU4NgorQ0ZMQUdTCSs9IC1yZWxheF9wb2ludGVycworI0NGTEFHUwkrPSAtdyBvbgoraWZlcSAoJChMSUJBUkNIKSxMSUJDKQoraWZlcSAoJChQT1NJWEZMKSwxKQorCVBSRUxVREUgPSAkKE5ES19MSUJDKS9pbXBvcnRzL3Bvc2l4cHJlLm8KK2Vsc2UKKwlQUkVMVURFID0gJChOREtfTElCQykvaW1wb3J0cy9saWJjcHJlLm8KK2VuZGlmCisJQ0ZMQUdTICs9IC1hbGlnbiA0CitlbHNlCisJIyBQUkVMVURFID0gJChOREtfQ0xJQikvaW1wb3J0cy9jbGlicHJlLm8KKwkjIHRvIGF2b2lkIHRoZSBfX2luaXRfKiAvIF9fZGVpbml0Xyogd2hvZXMgZG9udCB1c2UgcHJlbHVkZSBmcm9tIE5ESworCVBSRUxVREUgPSAiJChNV0NXX1BBVEgpL2xpYnJhcmllcy9ydW50aW1lL3ByZWx1ZGUub2JqIgorCSMgQ0ZMQUdTICs9IC1pbmNsdWRlICIkKE1XQ1dfUEFUSCkvaGVhZGVycy9ubG1fY2xpYl9wcmVmaXguaCIKKwlDRkxBR1MgKz0gLWFsaWduIDEKK2VuZGlmCitlbHNlCitMRAk9IG5sbWNvbnYKK0xERkxBR1MJPSAtVAorTElCRVhUCT0gYQorQ0ZMQUdTCSs9IC1tMzIKK0NGTEFHUyAgKz0gLWZuby1idWlsdGluIC1mbm8tc3RyaWN0LWFsaWFzaW5nCitpZmVxICgkKGZpbmRzdHJpbmcgZ2NjLCQoQ0MpKSxnY2MpCitDRkxBR1MgICs9IC1mcGNjLXN0cnVjdC1yZXR1cm4KK2VuZGlmCitDRkxBR1MJKz0gLVdhbGwgIyAtcGVkYW50aWMKK2lmZXEgKCQoTElCQVJDSCksTElCQykKK2lmZXEgKCQoUE9TSVhGTCksMSkKKwlQUkVMVURFID0gJChOREtfTElCQykvaW1wb3J0cy9wb3NpeHByZS5nY2MubworZWxzZQorCVBSRUxVREUgPSAkKE5ES19MSUJDKS9pbXBvcnRzL2xpYmNwcmUuZ2NjLm8KK2VuZGlmCitlbHNlCisJIyBQUkVMVURFID0gJChOREtfQ0xJQikvaW1wb3J0cy9jbGlicHJlLmdjYy5vCisJIyB0byBhdm9pZCB0aGUgX19pbml0XyogLyBfX2RlaW5pdF8qIHdob2VzIGRvbnQgdXNlIHByZWx1ZGUgZnJvbSBOREsKKwkjIGh0dHA6Ly93d3cuZ2tudy5uZXQvZGV2ZWxvcG1lbnQvbWtfbmxtL2djY19wcmUuemlwCisJUFJFTFVERSA9ICQoTkRLX1JPT1QpL3ByZS9wcmVsdWRlLm8KKwlDRkxBR1MgKz0gLWluY2x1ZGUgJChOREtCQVNFKS9ubG1jb252L2dlbmxtLmgKK2VuZGlmCitlbmRpZgorCitOREtfUk9PVCA9ICQoTkRLQkFTRSkvbmRrCitpZm5kZWYgTkRLX0NMSUIKK05ES19DTElCID0gJChOREtfUk9PVCkvbndzZGsKK2VuZGlmCitpZm5kZWYgTkRLX0xJQkMKK05ES19MSUJDID0gJChOREtfUk9PVCkvbGliYworZW5kaWYKK2lmbmRlZiBOREtfTERBUAorTkRLX0xEQVAgPSAkKE5ES19ST09UKS9jbGRhcHNkay9uZXR3YXJlCitlbmRpZgorQ1VSTF9JTkMgPSAuLi9pbmNsdWRlCitDVVJMX0xJQiA9IC4uL2xpYgorCitJTkNMVURFUyA9IC1JJChDVVJMX0lOQykgLUkkKENVUkxfTElCKQorCitpZmVxICgkKGZpbmRzdHJpbmcgLXN0YXRpYywkKENGRykpLC1zdGF0aWMpCitMSU5LX1NUQVRJQyA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLWFyZXMsJChDRkcpKSwtYXJlcykKK1dJVEhfQVJFUyA9IDEKK2VuZGlmCitpZmVxICgkKGZpbmRzdHJpbmcgLXJ0bXAsJChDRkcpKSwtcnRtcCkKK1dJVEhfUlRNUCA9IDEKK1dJVEhfU1NMID0gMQorV0lUSF9aTElCID0gMQorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyAtc3NoMiwkKENGRykpLC1zc2gyKQorV0lUSF9TU0gyID0gMQorV0lUSF9TU0wgPSAxCitXSVRIX1pMSUIgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1heHRscywkKENGRykpLC1heHRscykKK1dJVEhfQVhUTFMgPSAxCitXSVRIX1NTTCA9CitlbHNlCitpZmVxICgkKGZpbmRzdHJpbmcgLXNzbCwkKENGRykpLC1zc2wpCitXSVRIX1NTTCA9IDEKK2VuZGlmCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC16bGliLCQoQ0ZHKSksLXpsaWIpCitXSVRIX1pMSUIgPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1pZG4sJChDRkcpKSwtaWRuKQorV0lUSF9JRE4gPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1zcG5lZ28sJChDRkcpKSwtc3BuZWdvKQorV0lUSF9TUE5FR08gPSAxCitlbmRpZgoraWZlcSAoJChmaW5kc3RyaW5nIC1pcHY2LCQoQ0ZHKSksLWlwdjYpCitFTkFCTEVfSVBWNiA9IDEKK2VuZGlmCisKK2lmZGVmIExJTktfU1RBVElDCisJTERMSUJTCT0gJChDVVJMX0xJQikvbGliY3VybC4kKExJQkVYVCkKK2lmZGVmIFdJVEhfQVJFUworCUxETElCUyArPSAkKExJQkNBUkVTX1BBVEgpL2xpYmNhcmVzLiQoTElCRVhUKQorZW5kaWYKK2Vsc2UKKwlNT0RVTEVTCT0gbGliY3VybC5ubG0KKwlJTVBPUlRTCT0gQCQoQ1VSTF9MSUIpL2xpYmN1cmwuaW1wCitlbmRpZgoraWZkZWYgV0lUSF9TU0gyCisJIyBJTkNMVURFUyArPSAtSSQoTElCU1NIMl9QQVRIKS9pbmNsdWRlCitpZmRlZiBMSU5LX1NUQVRJQworCUxETElCUyArPSAkKExJQlNTSDJfUEFUSCkvbncvbGlic3NoMi4kKExJQkVYVCkKK2Vsc2UKKwlNT0RVTEVTICs9IGxpYnNzaDIubmxtCisJSU1QT1JUUyArPSBAJChMSUJTU0gyX1BBVEgpL253L2xpYnNzaDIuaW1wCitlbmRpZgorZW5kaWYKK2lmZGVmIFdJVEhfUlRNUAorCSMgSU5DTFVERVMgKz0gLUkkKExJQlJUTVBfUEFUSCkKK2lmZGVmIExJTktfU1RBVElDCisJTERMSUJTICs9ICQoTElCUlRNUF9QQVRIKS9saWJydG1wL2xpYnJ0bXAuJChMSUJFWFQpCitlbmRpZgorZW5kaWYKK2lmZGVmIFdJVEhfU1NMCisJIyBJTkNMVURFUyArPSAtSSQoT1BFTlNTTF9QQVRIKS9vdXRpbmNfbndfJChMSUJBUkNIX0wpCisJTERMSUJTICs9ICQoT1BFTlNTTF9QQVRIKS9vdXRfbndfJChMSUJBUkNIX0wpL3NzbC4kKExJQkVYVCkKKwlMRExJQlMgKz0gJChPUEVOU1NMX1BBVEgpL291dF9ud18kKExJQkFSQ0hfTCkvY3J5cHRvLiQoTElCRVhUKQorCUlNUE9SVFMgKz0gR2V0UHJvY2Vzc1N3aXRjaENvdW50IFJ1bm5pbmdQcm9jZXNzCitpZmRlZiBXSVRIX1NQTkVHTworCSMgSU5DTFVERVMgKz0gLUkkKEZCT1BFTlNTTF9QQVRIKS9pbmNsdWRlCisJTERMSUJTICs9ICQoRkJPUEVOU1NMX1BBVEgpL253L2Zib3BlbnNzbC4kKExJQkVYVCkKK2VuZGlmCitlbHNlCitpZmRlZiBXSVRIX0FYVExTCisJIyBJTkNMVURFUyArPSAtSSQoQVhUTFNfUEFUSCkvaW5jCitpZmRlZiBMSU5LX1NUQVRJQworCUxETElCUyArPSAkKEFYVExTX1BBVEgpL2xpYi9saWJheHRscy4kKExJQkVYVCkKK2Vsc2UKKwlNT0RVTEVTICs9IGxpYmF4dGxzLm5sbQorCUlNUE9SVFMgKz0gJChBWFRMU19QQVRIKS9saWIvbGliYXh0bHMuaW1wCitlbmRpZgorZW5kaWYKK2VuZGlmCitpZmRlZiBXSVRIX1pMSUIKKwlJTkNMVURFUyArPSAtSSQoWkxJQl9QQVRIKQoraWZkZWYgTElOS19TVEFUSUMKKwlMRExJQlMgKz0gJChaTElCX1BBVEgpL253LyQoTElCQVJDSCkvbGliei4kKExJQkVYVCkKK2Vsc2UKKwlNT0RVTEVTICs9IGxpYnoubmxtCisJSU1QT1JUUyArPSBAJChaTElCX1BBVEgpL253LyQoTElCQVJDSCkvbGliei5pbXAKK2VuZGlmCitlbmRpZgoraWZkZWYgV0lUSF9JRE4KKwkjIElOQ0xVREVTICs9IC1JJChMSUJJRE5fUEFUSCkvaW5jbHVkZQorCUxETElCUyArPSAkKExJQklETl9QQVRIKS9saWIvbGliaWRuLiQoTElCRVhUKQorZW5kaWYKKworaWZlcSAoJChMSUJBUkNIKSxMSUJDKQorCUlOQ0xVREVTICs9IC1JJChOREtfTElCQykvaW5jbHVkZQorCSMgSU5DTFVERVMgKz0gLUkkKE5ES19MSUJDKS9pbmNsdWRlL25rcworCSMgSU5DTFVERVMgKz0gLUkkKE5ES19MSUJDKS9pbmNsdWRlL3dpbnNvY2sKKwlDRkxBR1MgKz0gLURfUE9TSVhfU09VUkNFCitlbHNlCisJSU5DTFVERVMgKz0gLUkkKE5ES19DTElCKS9pbmNsdWRlL25sbQorCSMgSU5DTFVERVMgKz0gLUkkKE5ES19DTElCKS9pbmNsdWRlCitlbmRpZgoraWZuZGVmIERJU0FCTEVfTERBUAorCSMgSU5DTFVERVMgKz0gLUkkKE5ES19MREFQKS8kKExJQkFSQ0hfTCkvaW5jCitlbmRpZgorQ0ZMQUdTCSs9ICQoSU5DTFVERVMpCisKK2lmZXEgKCQoTVRTQUZFKSxZRVMpCisJWERDT1BUID0gLW4KK2VuZGlmCitpZmVxICgkKE1UU0FGRSksTk8pCisJWERDT1BUID0gLXUKK2VuZGlmCitpZmRlZiBYRENPUFQKKwlYRENEQVRBID0gJChPQkpESVIpLyQoVEFSR0VUKS54ZGMKK2VuZGlmCisKK2lmZXEgKCQoZmluZHN0cmluZyAvc2gsJChTSEVMTCkpLC9zaCkKK0RMCT0gJworRFMJPSAvCitQQ1QJPSAlCisjLWluY2x1ZGUgJChOREtCQVNFKS9ubG1jb252L25jcGZzLmluYworZWxzZQorRFMJPSBcXAorUENUCT0gJSUKK2VuZGlmCisKKyMgTWFrZWZpbGUuaW5jIHByb3ZpZGVzIHRoZSBDU09VUkNFUyBhbmQgSEhFQURFUlMgZGVmaW5lcworaW5jbHVkZSBNYWtlZmlsZS5pbmMKKworT0JKWAk6PSAkKHBhdHN1YnN0ICUuYywkKE9CSkRJUikvJS5vLCQobm90ZGlyICQoc3RyaXAgJChDVVJMWF9PTkVTKSkpKQorT0JKUwk6PSAkKHBhdHN1YnN0ICUuYywkKE9CSkRJUikvJS5vLCQoc3RyaXAgJChDVVJMX0NGSUxFUykpKQoraWZuZGVmIExJTktfU1RBVElDCitPQkpTCSs9ICQoT0JKWCkKK2VuZGlmCisKK3ZwYXRoICUuYyAkKENVUkxfTElCKQorCithbGw6IHByZWJ1aWxkICQoVEFSR0VUKS5ubG0KKworcHJlYnVpbGQ6ICQoT0JKRElSKSAkKE9CSkRJUikvdmVyc2lvbi5pbmMgY3VybF9jb25maWcuaAorCiskKE9CSkRJUikvJS5vOiAlLmMKKyMJQGVjaG8gQ29tcGlsaW5nICQ8CisJJChDQykgJChDRkxBR1MpIC1jICQ8IC1vICRACisKKyQoT0JKRElSKS92ZXJzaW9uLmluYzogJChDVVJMX0lOQykvY3VybC9jdXJsdmVyLmggJChPQkpESVIpCisJQGVjaG8gQ3JlYXRpbmcgJEAKKwlAJChBV0spIC1mIC4uL3BhY2thZ2VzL05ldFdhcmUvZ2V0X3Zlci5hd2sgJDwgPiAkQAorCitpbnN0YWxsOiAkKElOU1RESVIpIGFsbAorCUAtJChDUCkgLi4vZG9jcy8kKFRBUkdFVCkucGRmICQoSU5TVERJUikKKwlALSQoQ1ApIC4uL2RvY3MvJChUQVJHRVQpLmh0bWwgJChJTlNURElSKQorCUAkKENQKSAkKFRBUkdFVCkubmxtICQoSU5TVERJUikKKworY2xlYW46CitpZmVxICIkKHdpbGRjYXJkIGh1Z2VoZWxwLmMuY3ZzKSIgImh1Z2VoZWxwLmMuY3ZzIgorCS0kKFJNKSBodWdlaGVscC5jCitlbmRpZgorCS0kKFJNKSBjdXJsX2NvbmZpZy5oCisJLSQoUk0pIC1yICQoT0JKRElSKQorCitkaXN0Y2xlYW4gdmNsZWFuOiBjbGVhbgorCS0kKFJNKSAkKFRBUkdFVCkubmxtCisKKyQoT0JKRElSKSAkKElOU1RESVIpOgorCUAkKE1LRElSKSAkQAorCiskKFRBUkdFVCkubmxtOiAkKE9CSlMpICQoT0JKRElSKS8kKFRBUkdFVCkuZGVmICQoWERDREFUQSkKKwlAZWNobyBMaW5raW5nICRACisJQC0kKFJNKSAkQAorCUAkKExEKSAkKExERkxBR1MpICQoT0JKRElSKS8kKFRBUkdFVCkuZGVmCisKKyQoT0JKRElSKS8lLnhkYzogTWFrZWZpbGUubmV0d2FyZQorCUBlY2hvIENyZWF0aW5nICRACisJQCQoTVBLWERDKSAkKFhEQ09QVCkgJEAKKworJChPQkpESVIpLyUuZGVmOiBNYWtlZmlsZS5uZXR3YXJlCisJQGVjaG8gJChETCkjIERFRiBmaWxlIGZvciBsaW5raW5nIHdpdGggJChMRCkkKERMKSA+ICRACisJQGVjaG8gJChETCkjIERvIG5vdCBlZGl0IHRoaXMgZmlsZSAtIGl0IGlzIGNyZWF0ZWQgYnkgbWFrZSEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpIyBBbGwgeW91ciBjaGFuZ2VzIHdpbGwgYmUgbG9zdCEhJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSMkKERMKSA+PiAkQAorCUBlY2hvICQoREwpY29weXJpZ2h0ICIkKENPUFlSKSIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpZGVzY3JpcHRpb24gIiQoREVTQ1IpIiQoREwpID4+ICRACisJQGVjaG8gJChETCl2ZXJzaW9uICQoVkVSU0lPTikkKERMKSA+PiAkQAoraWZkZWYgTkxNVFlQRQorCUBlY2hvICQoREwpdHlwZSAkKE5MTVRZUEUpJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBTVEFDSworCUBlY2hvICQoREwpc3RhY2sgJChTVEFDSykkKERMKSA+PiAkQAorZW5kaWYKK2lmZGVmIFNDUkVFTgorCUBlY2hvICQoREwpc2NyZWVubmFtZSAiJChTQ1JFRU4pIiQoREwpID4+ICRACitlbHNlCisJQGVjaG8gJChETClzY3JlZW5uYW1lICJERUZBVUxUIiQoREwpID4+ICRACitlbmRpZgoraWZuZXEgKCQoREIpLE5ERUJVRykKKwlAZWNobyAkKERMKWRlYnVnJChETCkgPj4gJEAKK2VuZGlmCisJQGVjaG8gJChETCl0aHJlYWRuYW1lICIkKFRBUkdFVCkiJChETCkgPj4gJEAKK2lmZGVmIFhEQ0RBVEEKKwlAZWNobyAkKERMKXhkY2RhdGEgJChYRENEQVRBKSQoREwpID4+ICRACitlbmRpZgoraWZlcSAoJChMRFJJTkcpLDApCisJQGVjaG8gJChETClmbGFnX29uIDE2JChETCkgPj4gJEAKK2VuZGlmCitpZmVxICgkKExEUklORyksMykKKwlAZWNobyAkKERMKWZsYWdfb24gNTEyJChETCkgPj4gJEAKK2VuZGlmCitpZmVxICgkKExJQkFSQ0gpLENMSUIpCisJQGVjaG8gJChETClzdGFydCBfUHJlbHVkZSQoREwpID4+ICRACisJQGVjaG8gJChETClleGl0IF9TdG9wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfQ0xJQikvaW1wb3J0cy9jbGliLmltcCQoREwpID4+ICRACisJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0NMSUIpL2ltcG9ydHMvdGhyZWFkcy5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19DTElCKS9pbXBvcnRzL25sbWxpYi5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19DTElCKS9pbXBvcnRzL3NvY2tsaWIuaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKW1vZHVsZSBjbGliJChETCkgPj4gJEAKK2lmbmRlZiBESVNBQkxFX0xEQVAKKwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfTERBUCkvY2xpYi9pbXBvcnRzL2xkYXBzZGsuaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfTERBUCkvY2xpYi9pbXBvcnRzL2xkYXBzc2wuaW1wJChETCkgPj4gJEAKKyMJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0xEQVApL2NsaWIvaW1wb3J0cy9sZGFweC5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpbW9kdWxlIGxkYXBzZGsgbGRhcHNzbCQoREwpID4+ICRACitlbmRpZgorZWxzZQoraWZlcSAoJChQT1NJWEZMKSwxKQorCUBlY2hvICQoREwpZmxhZ19vbiA0MTk0MzA0JChETCkgPj4gJEAKK2VuZGlmCisJQGVjaG8gJChETClmbGFnX29uIDY0JChETCkgPj4gJEAKKwlAZWNobyAkKERMKXBzZXVkb3ByZWVtcHRpb24kKERMKSA+PiAkQAoraWZlcSAoJChmaW5kc3RyaW5nIHBvc2l4cHJlLCQoUFJFTFVERSkpLHBvc2l4cHJlKQorCUBlY2hvICQoREwpc3RhcnQgUE9TSVhfU3RhcnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpZXhpdCBQT1NJWF9TdG9wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWNoZWNrIFBPU0lYX0NoZWNrVW5sb2FkJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKXN0YXJ0IF9MaWJDUHJlbHVkZSQoREwpID4+ICRACisJQGVjaG8gJChETClleGl0IF9MaWJDUG9zdGx1ZGUkKERMKSA+PiAkQAorCUBlY2hvICQoREwpY2hlY2sgX0xpYkNDaGVja1VubG9hZCQoREwpID4+ICRACitlbmRpZgorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19MSUJDKS9pbXBvcnRzL2xpYmMuaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKWltcG9ydCBAJChOREtfTElCQykvaW1wb3J0cy9uZXR3YXJlLmltcCQoREwpID4+ICRACisJQGVjaG8gJChETCltb2R1bGUgbGliYyQoREwpID4+ICRACitpZm5kZWYgRElTQUJMRV9MREFQCisJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0xEQVApL2xpYmMvaW1wb3J0cy9sbGRhcHNkay5pbXAkKERMKSA+PiAkQAorCUBlY2hvICQoREwpaW1wb3J0IEAkKE5ES19MREFQKS9saWJjL2ltcG9ydHMvbGxkYXBzc2wuaW1wJChETCkgPj4gJEAKKyMJQGVjaG8gJChETClpbXBvcnQgQCQoTkRLX0xEQVApL2xpYmMvaW1wb3J0cy9sbGRhcHguaW1wJChETCkgPj4gJEAKKwlAZWNobyAkKERMKW1vZHVsZSBsbGRhcHNkayBsbGRhcHNzbCQoREwpID4+ICRACitlbmRpZgorZW5kaWYKK2lmZGVmIE1PRFVMRVMKKwlAZWNobyAkKERMKW1vZHVsZSAkKE1PRFVMRVMpJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBFWFBPUlRTCisJQGVjaG8gJChETClleHBvcnQgJChFWFBPUlRTKSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgSU1QT1JUUworCUBlY2hvICQoREwpaW1wb3J0ICQoSU1QT1JUUykkKERMKSA+PiAkQAorZW5kaWYKK2lmZXEgKCQoZmluZHN0cmluZyBubG1jb252LCQoTEQpKSxubG1jb252KQorCUBlY2hvICQoREwpaW5wdXQgJChQUkVMVURFKSQoREwpID4+ICRACisJQGVjaG8gJChETClpbnB1dCAkKE9CSlMpJChETCkgPj4gJEAKK2lmZGVmIExETElCUworCUBlY2hvICQoREwpaW5wdXQgJChMRExJQlMpJChETCkgPj4gJEAKK2VuZGlmCisJQGVjaG8gJChETClvdXRwdXQgJChUQVJHRVQpLm5sbSQoREwpID4+ICRACitlbmRpZgorCitjdXJsX2NvbmZpZy5oOiBNYWtlZmlsZS5uZXR3YXJlCisJQGVjaG8gQ3JlYXRpbmcgJEAKKwlAZWNobyAkKERMKS8qICRAIGZvciBOZXRXYXJlIHRhcmdldC4kKERMKSA+ICRACisJQGVjaG8gJChETCkqKiBEbyBub3QgZWRpdCB0aGlzIGZpbGUgLSBpdCBpcyBjcmVhdGVkIGJ5IG1ha2UhJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSoqIEFsbCB5b3VyIGNoYW5nZXMgd2lsbCBiZSBsb3N0ISEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpKi8kKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2lmbmRlZiBORVRXQVJFJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNlcnJvciBUaGlzICQobm90ZGlyICRAKSBpcyBjcmVhdGVkIGZvciBOZXRXYXJlIHBsYXRmb3JtISQoREwpID4+ICRACisJQGVjaG8gJChETCkjZW5kaWYkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBWRVJTSU9OICIkKExJQkNVUkxfVkVSU0lPTl9TVFIpIiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJhIHN1aXRhYmxlIGN1cmwgbWFpbGluZyBsaXN0ID0+IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC8iJChETCkgPj4gJEAKK2lmZXEgKCQoTElCQVJDSCksQ0xJQikKKwlAZWNobyAkKERMKSNkZWZpbmUgT1MgImk1ODYtcGMtY2xpYi1OZXRXYXJlIiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIE5FVERCX1VTRV9JTlRFUk5FVCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJJQ01QIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUk5JQ01QIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfQVJHMSBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfQVJHMiBjaGFyICokKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfQVJHMyBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfQVJHNCBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWX1RZUEVfUkVUViBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyIGNoYXIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzMgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc0IGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNSBzdHJ1Y3Qgc29ja2FkZHIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzYgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9SRVRWIGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfUVVBTF9BUkcyJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX0FSRzEgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX0FSRzIgY2hhciAqJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX0FSRzMgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX0FSRzQgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0VORF9UWVBFX1JFVFYgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0laRU9GX1NJWkVfVCA0JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgcHJlc3NhbnlrZXkgUHJlc3NBbnlLZXlUb0NvbnRpbnVlJChETCkgPj4gJEAKK2Vsc2UKKwlAZWNobyAkKERMKSNkZWZpbmUgT1MgImk1ODYtcGMtbGliYy1OZXRXYXJlIiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfRlRSVU5DQVRFIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xPTkdMT05HIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NURElOVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSTENBVCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJMQ1BZIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUlRPTEwgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1BBUkFNX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1RFUk1JT1NfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzEgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzIgdm9pZCAqJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzMgc2l6ZV90JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX0FSRzQgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVl9UWVBFX1JFVFYgc3NpemVfdCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMSBpbnQkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzIgdm9pZCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMyBzaXplX3QkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkciQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBzaXplX3QkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBSRUNWRlJPTV9UWVBFX1JFVFYgc3NpemVfdCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHMl9JU19WT0lEIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTRU5EX1FVQUxfQVJHMiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkcxIGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkcyIHZvaWQgKiQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkczIHNpemVfdCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9BUkc0IGludCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNFTkRfVFlQRV9SRVRWIHNzaXplX3QkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTSVpFT0ZfT0ZGX1QgOCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNJWkVPRl9TSVpFX1QgOCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIF9MQVJHRUZJTEUgMSQoREwpID4+ICRACitpZmRlZiBFTkFCTEVfSVBWNgorCUBlY2hvICQoREwpI2RlZmluZSBFTkFCTEVfSVBWNiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9BRl9JTkVUNiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9QRl9JTkVUNiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9GUkVFQUREUklORk8gMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSVUNUX0FERFJJTkZPIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUlVDVF9JTjZfQUREUiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42IDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTSVpFT0ZfU1RSVUNUX0lONl9BRERSIDE2JChETCkgPj4gJEAKK2VuZGlmCitlbmRpZgorCUBlY2hvICQoREwpI2RlZmluZSBVU0VfTUFOVUFMIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0FTU0VSVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0VSUk5PX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfRVJSX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfRkNOVExfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfR0VUUFJPVE9CWU5BTUUgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfR01USU1FX1IgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfSU5FVF9BRERSIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0lPQ1RMIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0lPQ1RMX0ZJT05CSU8gMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTElNSVRTX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTEwgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTE9DQUxUSU1FX1IgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTUFMTE9DX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1JFQ1YgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfUkVDVkZST00gMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU0VMRUNUIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NFTkQgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU0VUSk1QX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NJR05BTCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TSUdfQVRPTUlDX1QgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU09DS0VUIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NURExJQl9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NUUkRVUCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJGVElNRSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TVFJTVFIgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1RSVUNUX1RJTUVWQUwgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX0lPQ1RMX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1RJTUVfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9VTkFNRSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9VTklTVERfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9VVElNRSAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9VVElNRV9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1dSSVRFViAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0laRU9GX0lOVCA0JChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgU0laRU9GX1NIT1JUIDIkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBTSVpFT0ZfU1RSVUNUX0lOX0FERFIgNCQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIFNURENfSEVBREVSUyAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEkKERMKSA+PiAkQAoraWZkZWYgRElTQUJMRV9MREFQCisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfRElTQUJMRV9MREFQIDEkKERMKSA+PiAkQAorZWxzZQorCUBlY2hvICQoREwpI2RlZmluZSBDVVJMX0hBU19OT1ZFTExfTERBUFNESyAxJChETCkgPj4gJEAKK2lmbmRlZiBESVNBQkxFX0xEQVBTCisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTERBUF9TU0wgMSQoREwpID4+ICRACitlbmRpZgorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xEQVBfU1NMX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTERBUF9VUkxfUEFSU0UgMSQoREwpID4+ICRACitlbmRpZgoraWZkZWYgTldfV0lOU09DSworCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0NMT1NFU09DS0VUIDEkKERMKSA+PiAkQAorZWxzZQorCUBlY2hvICQoREwpI2RlZmluZSBVU0VfQlNEX1NPQ0tFVFMgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NZU19TT0NLSU9fSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9ORVREQl9IIDEkKERMKSA+PiAkQAorZW5kaWYKK2lmZGVmIFdJVEhfQVJFUworCUBlY2hvICQoREwpI2RlZmluZSBVU0VfQVJFUyAxJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBXSVRIX1pMSUIKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9aTElCX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTElCWiAxJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBXSVRIX1NTTAorCUBlY2hvICQoREwpI2RlZmluZSBVU0VfU1NMRUFZIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBVU0VfT1BFTlNTTCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9PUEVOU1NMX1g1MDlfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9PUEVOU1NMX1NTTF9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX09QRU5TU0xfUlNBX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfT1BFTlNTTF9QRU1fSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9PUEVOU1NMX0VSUl9IIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX09QRU5TU0xfQ1JZUFRPX0ggMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfT1BFTlNTTF9FTkdJTkVfSCAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9MSUJTU0wgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZGVmaW5lIEhBVkVfTElCQ1JZUFRPIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBPUEVOU1NMX05PX0tSQjUgMSQoREwpID4+ICRACitpZmRlZiBXSVRIX1NQTkVHTworCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1NQTkVHTyAxJChETCkgPj4gJEAKK2VuZGlmCitlbHNlCitpZmRlZiBXSVRIX0FYVExTCisJQGVjaG8gJChETCkjZGVmaW5lIFVTRV9BWFRMUyAxJChETCkgPj4gJEAKK2VuZGlmCitlbmRpZgoraWZkZWYgV0lUSF9TU0gyCisJQGVjaG8gJChETCkjZGVmaW5lIFVTRV9MSUJTU0gyIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xJQlNTSDJfSCAxJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBXSVRIX0lETgorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX0xJQklETiAxJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9UTERfSCAxJChETCkgPj4gJEAKK2VuZGlmCitpZmRlZiBXSVRIX1JUTVAKKwlAZWNobyAkKERMKSNkZWZpbmUgVVNFX0xJQlJUTVAgMSQoREwpID4+ICRACitlbmRpZgorCUBlY2hvICQoREwpI2lmZGVmIF9fR05VQ19fJChETCkgPj4gJEAKKwlAZWNobyAkKERMKSNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfR0NDIDEkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2Vsc2UkKERMKSA+PiAkQAorCUBlY2hvICQoREwpI2RlZmluZSBIQVZFX1ZBUklBRElDX01BQ1JPU19DOTkgMSQoREwpID4+ICRACisJQGVjaG8gJChETCkjZW5kaWYkKERMKSA+PiAkQAoraWZkZWYgQ0FCVU5ETEUKKwlAZWNobyAkKERMKSNkZWZpbmUgQ1VSTF9DQV9CVU5ETEUgIiQoQ0FCVU5ETEUpIiQoREwpID4+ICRACitlbHNlCisJQGVjaG8gJChETCkjZGVmaW5lIENVUkxfQ0FfQlVORExFIGdldGVudigiQ1VSTF9DQV9CVU5ETEUiKSQoREwpID4+ICRACitlbmRpZgorCitodWdlaGVscC5jOgorCUBlY2hvIENyZWF0aW5nICRACisJQCQoQ1ApIGh1Z2VoZWxwLmMuY3ZzICRACisKKyQoTElCQ0FSRVNfUEFUSCkvbGliY2FyZXMuJChMSUJFWFQpOgorCSQoTUFLRSkgLUMgJChMSUJDQVJFU19QQVRIKSAtZiBNYWtlZmlsZS5uZXR3YXJlIGxpYgorCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy9NYWtlZmlsZS52YzEwIGIvY3VybC03LjI1LjAvc3JjL01ha2VmaWxlLnZjMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4ZjM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy9NYWtlZmlsZS52YzEwCkBAIC0wLDAgKzEsNTE1IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfDQorIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfA0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wNCisjDQorIyBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoDQorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zDQorIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLg0KKyMNCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbA0KKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIw0KKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisjIEFsbCBmaWxlcyBpbiB0aGUgTWFrZWZpbGUudmMqIHNlcmllcyBhcmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUNCisjIG9uZSBtYWRlIGZvciBNU1ZDIHZlcnNpb24gNi4gQWxhcywgaWYgeW91IHdhbnQgdG8gZG8gY2hhbmdlcyB0byBhbnkgb2YgdGhlDQorIyBmaWVscyBhbmQgc2VuZCBiYWNrIHRvIHRoZSBwcm9qZWN0LCBlZGl0IHRoZSB2ZXJzaW9uIHNpeCwgbWFrZSB5b3VyIGRpZmYgYW5kDQorIyBtYWlsIGN1cmwtdXNlcnMuDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMNCisjIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgY3VybC5leGUgd2l0aCBNU1ZDMTANCisjIyBVc2U6IG5tYWtlIC1mIG1ha2VmaWxlLnZjMTAgW3JlbGVhc2UgfCBkZWJ1Z10gW0NGRz1yZWxlYXNlLXNzbF0NCisjIyAgICAgIChkZWZhdWx0IGlzIHJlbGVhc2UpDQorIyMgIm5tYWtlIC1mIG1ha2VmaWxlLnZjMTAgQ0ZHPXJlbGVhc2Utc3NsIiBzdGF0aWNhbGx5IGxpbmtzIE9wZW5TU0wNCisjIyBpbnRvIGN1cmwuZXhlIHByb2R1Y2luZyBhIHN0YW5kYWxvbmUgU1NMLWVuYWJsZWQgZXhlY3V0YWJsZS4NCisjIw0KKyMNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUFJPR1JBTV9OQU1FID0gY3VybC5leGUNCisNCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIFZlcmlmeSB0aGF0IGN1cnJlbnQgc3ViZGlyIGlzIGN1cmwncyAnc3JjJw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyFJRiAhIEVYSVNUKC5cdG9vbF9tYWluLmMpDQorISAgTUVTU0FHRSBDYW4gbm90IHByb2Nlc3MgdGhpcyBtYWtlZmlsZSBmcm9tIG91dHNpZGUgb2YgY3VybCdzICdzcmMnIHN1YmRpcmVjdG9yeS4NCishICBNRVNTQUdFIENoYW5nZSB0byBjdXJsJ3MgJ3NyYycgc3ViZGlyZWN0b3J5LCBhbmQgdHJ5IGFnYWluLg0KKyEgIEVSUk9SICAgU2VlIHByZXZpb3VzIG1lc3NhZ2UuDQorIUVORElGDQorDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIE1ha2VmaWxlLm1zdmMubmFtZXMgcHJvdmlkZXMgbGliY3VybCBmaWxlIG5hbWVzDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCishSU5DTFVERSAuLlxNYWtlZmlsZS5tc3ZjLm5hbWVzDQorDQorDQorDQorIUlGTkRFRiBPUEVOU1NMX1BBVEgNCitPUEVOU1NMX1BBVEggPSAuLi8uLi9vcGVuc3NsLTAuOS44cg0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgWkxJQl9QQVRIDQorWkxJQl9QQVRIID0gLi4vLi4vemxpYi0xLjIuNQ0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgTUFDSElORQ0KK01BQ0hJTkUgID0gWDg2DQorIUVORElGDQorDQorIyBVU0VfV0lORE9XU19TU1BJIHVzZXMgd2luZG93cyBsaWJyYXJpZXMgdG8gYWxsb3cgTlRMTSBhdXRoZW50aWNhdGlvbg0KKyMgd2l0aG91dCBhbiBvcGVuc3NsIGluc3RhbGxhdGlvbiBhbmQgb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGF1dGhlbnRpY2F0ZQ0KKyMgdXNpbmcgdGhlICJjdXJyZW50IGxvZ2dlZCBpbiB1c2VyIi4gU2luY2UgYXQgbGVhc3Qgd2l0aCBNU1ZDMTAgdGhlIHNzcGkuaA0KKyMgaGVhZGVyIGlzIGJyb2tlbiBpdCBpcyBlaXRoZXIgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgV2luZG93cyBTREssDQorIyBvciB0byBmaXggc3NwaS5oIHdpdGggYWRkaW5nIHRoaXMgZGVmaW5lIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3NwaS5oOg0KKyMgI2RlZmluZSBGcmVlQ3JlZGVudGlhbEhhbmRsZSBGcmVlQ3JlZGVudGlhbHNIYW5kbGUNCisjDQorIyBJZiwgZm9yIHNvbWUgcmVhc29uIHRoZSBXaW5kb3dzIFNESyBpcyBpbnN0YWxsZWQgYnV0IG5vdCBpbnN0YWxsZWQNCisjIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uLCB5b3UgY2FuIHNwZWNpZnkgV0lORE9XU19TREtfUEFUSC4NCisjIEl0IGNhbiBiZSBkb3dubG9hZGVkIGZyb206DQorIyBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbXNkb3dubG9hZC9wbGF0Zm9ybXNkay9zZGt1cGRhdGUvDQorDQorIyBXSU5ET1dTX1NTUEkgPSAxDQorDQorIUlGREVGIFdJTkRPV1NfU1NQSQ0KKyFJRk5ERUYgV0lORE9XU19TREtfUEFUSA0KK1dJTkRPV1NfU0RLX1BBVEggPSAiJChQUk9HUkFNRklMRVMpXE1pY3Jvc29mdCBTREsiDQorIUVORElGDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIyBOb3RoaW5nIG1vcmUgdG8gZG8gYmVsb3cgdGhpcyBsaW5lIQ0KK1pMSUJfQ0ZMQUdTICAgPSAvREhBVkVfWkxJQl9IIC9ESEFWRV9aTElCIC9ESEFWRV9MSUJaIC9JICIkKFpMSUJfUEFUSCkiDQorWkxJQl9MRkxBR1MgICA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorWkxJQl9MSUJTICAgICA9IHpsaWIubGliDQorWkxJQl9JTVBfTElCUyA9IHpkbGwubGliDQorDQorU1NMX0NGTEFHUyAgICAgPSAvRFVTRV9TU0xFQVkNCitTU0xfTEZMQUdTICAgICA9IC9MSUJQQVRIOiIkKE9QRU5TU0xfUEFUSCkvb3V0MzIiDQorU1NMX0lNUF9MRkxBR1MgPSAvTElCUEFUSDoiJChPUEVOU1NMX1BBVEgpL291dDMyZGxsIg0KK1NTTF9MSUJTICAgICAgID0gbGliZWF5MzIubGliIHNzbGVheTMyLmxpYiBnZGkzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWINCisNCisjIFJ1bnRpbWUgbGlicmFyeSBjb25maWd1cmF0aW9uDQorUlRMSUIgICA9IC9NRA0KK1JUTElCRCAgPSAvTURkDQorDQorIUlGICIkKFJUTElCQ0ZHKSIgPT0gInN0YXRpYyINCitSVExJQiAgPSAvTVQNCitSVExJQkQgPSAvTVRkDQorIUVORElGDQorDQorIyMgUmVsZWFzZQ0KK0NDUiAgID0gY2wuZXhlICQoUlRMSUIpIC9PMiAvRE5ERUJVRw0KK0xJTktSID0gbGluay5leGUgL2luY3JlbWVudGFsOm5vIC9saWJwYXRoOiIuLi9saWIiDQorUkNSICAgPSByYy5leGUgL2RERUJVR0JVSUxEPTANCisNCisjIyBEZWJ1Zw0KK0NDRCAgID0gY2wuZXhlICQoUlRMSUJEKSAvR20gL1pJIC9PZCAvRF9ERUJVRyAvUlRDMQ0KK0xJTktEID0gbGluay5leGUgL2luY3JlbWVudGFsOnllcyAvZGVidWcgL2xpYnBhdGg6Ii4uL2xpYiINCitSQ0QgICA9IHJjLmV4ZSAvZERFQlVHQlVJTEQ9MQ0KKw0KK0NGTEFHUyAgID0gL0kuLi9saWIgL0kuLi9pbmNsdWRlIC9ub2xvZ28gL1czIC9FSHNjIC9EV0lOMzIgL0ZEIC9jIC9EX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTj0xDQorTEZMQUdTICAgPSAvbm9sb2dvIC9vdXQ6JChQUk9HUkFNX05BTUUpIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTokKE1BQ0hJTkUpDQorUkVTRkxBR1MgPSAvaS4uL2luY2x1ZGUNCisNCisjIFRoaXMgbWFuaWZlc3QgdGhpbmcgaXMgZm9yIFZDOCwgZW5hYmxlZCBieSB0aGUgbWFrZXRneiBzY3JpcHQgdGhhdA0KKyMgYnVpbGRzIHRoZSBWQzggdmVyc2lvbiBvZiB0aGlzIG1ha2VmaWxlLiBMZWZ0IGNvbW1lbnRlZCBvdXQgaW4gdGhlIFZDMTANCisjIHZlcnNpb24hDQorI01BTklGRVNUVE9PTCA9IG10IC1tYW5pZmVzdCAkKFBST0dSQU1fTkFNRSkubWFuaWZlc3QgLW91dHB1dHJlc291cmNlOiQoUFJPR1JBTV9OQU1FKTsxDQorDQorIUlGREVGIFdJTkRPV1NfU1NQSQ0KK0NGTEFHUyA9ICQoQ0ZMQUdTKSAvRFVTRV9XSU5ET1dTX1NTUEkgL0kkKFdJTkRPV1NfU0RLX1BBVEgpXGluY2x1ZGUNCishRU5ESUYNCisNCitSRUxFQVNFX09CSlM9IFwNCisJaHVnZWhlbHByLm9iaiBcDQorCW5vbmJsb2Nrci5vYmogXA0KKwlyYXdzdHJyLm9iaiBcDQorCXN0cnRvb2ZmdHIub2JqIFwNCisJdG9vbF9iaW5tb2Rlci5vYmogXA0KKwl0b29sX2JuYW1lci5vYmogXA0KKwl0b29sX2NiX2RiZ3Iub2JqIFwNCisJdG9vbF9jYl9oZHJyLm9iaiBcDQorCXRvb2xfY2JfcHJnci5vYmogXA0KKwl0b29sX2NiX3JlYXIub2JqIFwNCisJdG9vbF9jYl9zZWVyLm9iaiBcDQorCXRvb2xfY2Jfd3J0ci5vYmogXA0KKwl0b29sX2NmZ2FibGVyLm9iaiBcDQorCXRvb2xfY29udmVydHIub2JqIFwNCisJdG9vbF9kaXJoaWVyLm9iaiBcDQorCXRvb2xfZG9zd2luci5vYmogXA0KKwl0b29sX2Vhc3lzcmNyLm9iaiBcDQorCXRvb2xfZm9ybXBhcnNlci5vYmogXA0KKwl0b29sX2dldHBhcmFtci5vYmogXA0KKwl0b29sX2dldHBhc3NyLm9iaiBcDQorCXRvb2xfaGVscHIub2JqIFwNCisJdG9vbF9oZWxwZXJzci5vYmogXA0KKwl0b29sX2hvbWVkaXJyLm9iaiBcDQorCXRvb2xfbGliaW5mb3Iub2JqIFwNCisJdG9vbF9tYWluci5vYmogXA0KKwl0b29sX21maWxlc3Iub2JqIFwNCisJdG9vbF9tc2dzci5vYmogXA0KKwl0b29sX29wZXJhdGVyLm9iaiBcDQorCXRvb2xfb3BlcmhscHIub2JqIFwNCisJdG9vbF9wYW55a2V5ci5vYmogXA0KKwl0b29sX3BhcmFtaGxwci5vYmogXA0KKwl0b29sX3BhcnNlY2Znci5vYmogXA0KKwl0b29sX3NldG9wdHIub2JqIFwNCisJdG9vbF9zbGVlcHIub2JqIFwNCisJdG9vbF91cmxnbG9ici5vYmogXA0KKwl0b29sX3V0aWxyLm9iaiBcDQorCXRvb2xfdm1zci5vYmogXA0KKwl0b29sX3dyaXRlZW52ci5vYmogXA0KKwl0b29sX3dyaXRlb3V0ci5vYmogXA0KKwl0b29sX3hhdHRyci5vYmogXA0KKwljdXJsci5yZXMNCisNCitERUJVR19PQkpTPSBcDQorCWh1Z2VoZWxwZC5vYmogXA0KKwlub25ibG9ja2Qub2JqIFwNCisJcmF3c3RyZC5vYmogXA0KKwlzdHJ0b29mZnRkLm9iaiBcDQorCXRvb2xfYmlubW9kZWQub2JqIFwNCisJdG9vbF9ibmFtZWQub2JqIFwNCisJdG9vbF9jYl9kYmdkLm9iaiBcDQorCXRvb2xfY2JfaGRyZC5vYmogXA0KKwl0b29sX2NiX3ByZ2Qub2JqIFwNCisJdG9vbF9jYl9yZWFkLm9iaiBcDQorCXRvb2xfY2Jfc2VlZC5vYmogXA0KKwl0b29sX2NiX3dydGQub2JqIFwNCisJdG9vbF9jZmdhYmxlZC5vYmogXA0KKwl0b29sX2NvbnZlcnRkLm9iaiBcDQorCXRvb2xfZGlyaGllZC5vYmogXA0KKwl0b29sX2Rvc3dpbmQub2JqIFwNCisJdG9vbF9lYXN5c3JjZC5vYmogXA0KKwl0b29sX2Zvcm1wYXJzZWQub2JqIFwNCisJdG9vbF9nZXRwYXJhbWQub2JqIFwNCisJdG9vbF9nZXRwYXNzZC5vYmogXA0KKwl0b29sX2hlbHBkLm9iaiBcDQorCXRvb2xfaGVscGVyc2Qub2JqIFwNCisJdG9vbF9ob21lZGlyZC5vYmogXA0KKwl0b29sX2xpYmluZm9kLm9iaiBcDQorCXRvb2xfbWFpbmQub2JqIFwNCisJdG9vbF9tZmlsZXNkLm9iaiBcDQorCXRvb2xfbXNnc2Qub2JqIFwNCisJdG9vbF9vcGVyYXRlZC5vYmogXA0KKwl0b29sX29wZXJobHBkLm9iaiBcDQorCXRvb2xfcGFueWtleWQub2JqIFwNCisJdG9vbF9wYXJhbWhscGQub2JqIFwNCisJdG9vbF9wYXJzZWNmZ2Qub2JqIFwNCisJdG9vbF9zZXRvcHRkLm9iaiBcDQorCXRvb2xfc2xlZXBkLm9iaiBcDQorCXRvb2xfdXJsZ2xvYmQub2JqIFwNCisJdG9vbF91dGlsZC5vYmogXA0KKwl0b29sX3Ztc2Qub2JqIFwNCisJdG9vbF93cml0ZWVudmQub2JqIFwNCisJdG9vbF93cml0ZW91dGQub2JqIFwNCisJdG9vbF94YXR0cmQub2JqIFwNCisJY3VybGQucmVzDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgSWYgQ0ZHIG5vdCBzcGVjaWZpZWQsIHVzZSBzdGF0aWMgbGlicw0KKw0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpIC9EQ1VSTF9TVEFUSUNMSUINCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIGR5bmFtaWMgbGlicmFyeQ0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwiDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfSU1QX0xJQl9SRUwpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfSU1QX0xJQl9EQkcpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIHpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtemxpYiINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFpMSUJfQ0ZMQUdTKSAvRENVUkxfU1RBVElDTElCDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpICQoWkxJQl9MSUJTKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKSAkKFpMSUJfTElCUykNCitMRkxBR1MgICAgICAgICA9ICQoTEZMQUdTKSAkKFpMSUJfTEZMQUdTKQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsIg0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpICQoU1NMX0NGTEFHUykgL0RDVVJMX1NUQVRJQ0xJQg0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKSAkKFNTTF9MSUJTKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKSAkKFNTTF9MSUJTKQ0KK0xGTEFHUyAgICAgICAgID0gJChMRkxBR1MpICQoU1NMX0xGTEFHUykNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC1zc2wtZGxsIg0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpICQoU1NMX0NGTEFHUykNCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9JTVBfTElCX1JFTCkgJChTU0xfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9JTVBfTElCX0RCRykgJChTU0xfTElCUykNCitMRkxBR1MgICAgICAgICA9ICQoTEZMQUdTKSAkKFNTTF9JTVBfTEZMQUdTKQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBzc2wgYW5kIHpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLXpsaWIiDQorQ0ZMQUdTICAgICAgICAgPSAkKENGTEFHUykgJChTU0xfQ0ZMQUdTKSAkKFpMSUJfQ0ZMQUdTKSAvRENVUkxfU1RBVElDTElCDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpICQoU1NMX0xJQlMpICQoWkxJQl9MSUJTKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKSAkKFNTTF9MSUJTKSAkKFpMSUJfTElCUykNCitMRkxBR1MgICAgICAgICA9ICQoTEZMQUdTKSAkKFNTTF9MRkxBR1MpICQoWkxJQl9MRkxBR1MpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC1kbGwiDQorQ0ZMQUdTICAgICAgICAgPSAkKENGTEFHUykgJChTU0xfQ0ZMQUdTKSAvRENVUkxfU1RBVElDTElCDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpICQoU1NMX0xJQlMpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpICQoU1NMX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChTU0xfSU1QX0xGTEFHUykNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyB6bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXpsaWItZGxsIg0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpICQoWkxJQl9DRkxBR1MpIC9EQ1VSTF9TVEFUSUNMSUINCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkgJChaTElCX0lNUF9MSUJTKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKSAkKFpMSUJfSU1QX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChaTElCX0xGTEFHUykNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtemxpYi1kbGwiDQorQ0ZMQUdTICAgICAgICAgPSAkKENGTEFHUykgJChaTElCX0NGTEFHUykNCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9JTVBfTElCX1JFTCkgJChaTElCX0lNUF9MSUJTKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX0lNUF9MSUJfREJHKSAkKFpMSUJfSU1QX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChaTElCX0xGTEFHUykNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wgYW5kIGR5bmFtaWMgemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1zc2wtZGxsLXpsaWItZGxsIg0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpICQoU1NMX0NGTEFHUykgJChaTElCX0NGTEFHUykgL0RDVVJMX1NUQVRJQ0xJQg0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKSAkKFNTTF9MSUJTKSAkKFpMSUJfSU1QX0xJQlMpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpICQoU1NMX0xJQlMpICQoWkxJQl9JTVBfTElCUykNCitMRkxBR1MgICAgICAgICA9ICQoTEZMQUdTKSAkKFNTTF9JTVBfTEZMQUdTKSAkKFpMSUJfTEZMQUdTKQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wgYW5kIGR5bmFtaWMgemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtc3NsLWRsbC16bGliLWRsbCINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFNTTF9DRkxBR1MpICQoWkxJQl9DRkxBR1MpDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfSU1QX0xJQl9SRUwpICQoU1NMX0xJQlMpICQoWkxJQl9JTVBfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9JTVBfTElCX0RCRykgJChTU0xfTElCUykgJChaTElCX0lNUF9MSUJTKQ0KK0xGTEFHUyAgICAgICAgID0gJChMRkxBR1MpICQoU1NMX0lNUF9MRkxBR1MpICQoWkxJQl9MRkxBR1MpDQorIUVORElGDQorDQorDQorTElOS0xJQlMgICAgICAgPSAkKExJTktMSUJTKSB3czJfMzIubGliIHdsZGFwMzIubGliDQorTElOS0xJQlNfREVCVUcgPSAkKExJTktMSUJTX0RFQlVHKSB3czJfMzIubGliIHdsZGFwMzIubGliDQorDQorYWxsIDogcmVsZWFzZQ0KKw0KK3JlbGVhc2U6ICQoUkVMRUFTRV9PQkpTKQ0KKwkkKExJTktSKSAkKExGTEFHUykgJChMSU5LTElCUykgJChSRUxFQVNFX09CSlMpDQorICAgICAgICAkKE1BTklGRVNUVE9PTCkNCisNCitkZWJ1ZzogJChERUJVR19PQkpTKQ0KKwkkKExJTktEKSAkKExGTEFHUykgJChMSU5LTElCU19ERUJVRykgJChERUJVR19PQkpTKQ0KKyAgICAgICAgJChNQU5JRkVTVFRPT0wpDQorDQorIyMgUmVsZWFzZQ0KK2h1Z2VoZWxwci5vYmo6IGh1Z2VoZWxwLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvWm0yMDAgL0ZvIiRAIiBodWdlaGVscC5jDQorbm9uYmxvY2tyLm9iajogLi4vbGliL25vbmJsb2NrLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9ub25ibG9jay5jDQorcmF3c3Ryci5vYmo6IC4uL2xpYi9yYXdzdHIuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgLi4vbGliL3Jhd3N0ci5jDQorc3RydG9vZmZ0ci5vYmo6IC4uL2xpYi9zdHJ0b29mZnQuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgLi4vbGliL3N0cnRvb2ZmdC5jDQordG9vbF9iaW5tb2Rlci5vYmo6IHRvb2xfYmlubW9kZS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2Jpbm1vZGUuYw0KK3Rvb2xfYm5hbWVyLm9iajogdG9vbF9ibmFtZS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2JuYW1lLmMNCit0b29sX2NiX2RiZ3Iub2JqOiB0b29sX2NiX2RiZy5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX2RiZy5jDQordG9vbF9jYl9oZHJyLm9iajogdG9vbF9jYl9oZHIuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9oZHIuYw0KK3Rvb2xfY2JfcHJnci5vYmo6IHRvb2xfY2JfcHJnLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2JfcHJnLmMNCit0b29sX2NiX3JlYXIub2JqOiB0b29sX2NiX3JlYS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX3JlYS5jDQordG9vbF9jYl9zZWVyLm9iajogdG9vbF9jYl9zZWUuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9zZWUuYw0KK3Rvb2xfY2Jfd3J0ci5vYmo6IHRvb2xfY2Jfd3J0LmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2Jfd3J0LmMNCit0b29sX2NmZ2FibGVyLm9iajogdG9vbF9jZmdhYmxlLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2ZnYWJsZS5jDQordG9vbF9jb252ZXJ0ci5vYmo6IHRvb2xfY29udmVydC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NvbnZlcnQuYw0KK3Rvb2xfZGlyaGllci5vYmo6IHRvb2xfZGlyaGllLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZGlyaGllLmMNCit0b29sX2Rvc3dpbnIub2JqOiB0b29sX2Rvc3dpbi5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2Rvc3dpbi5jDQordG9vbF9lYXN5c3Jjci5vYmo6IHRvb2xfZWFzeXNyYy5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2Vhc3lzcmMuYw0KK3Rvb2xfZm9ybXBhcnNlci5vYmo6IHRvb2xfZm9ybXBhcnNlLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZm9ybXBhcnNlLmMNCit0b29sX2dldHBhcmFtci5vYmo6IHRvb2xfZ2V0cGFyYW0uYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9nZXRwYXJhbS5jDQordG9vbF9nZXRwYXNzci5vYmo6IHRvb2xfZ2V0cGFzcy5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2dldHBhc3MuYw0KK3Rvb2xfaGVscHIub2JqOiB0b29sX2hlbHAuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9oZWxwLmMNCit0b29sX2hlbHBlcnNyLm9iajogdG9vbF9oZWxwZXJzLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfaGVscGVycy5jDQordG9vbF9ob21lZGlyci5vYmo6IHRvb2xfaG9tZWRpci5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2hvbWVkaXIuYw0KK3Rvb2xfbGliaW5mb3Iub2JqOiB0b29sX2xpYmluZm8uYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9saWJpbmZvLmMNCit0b29sX21haW5yLm9iajogdG9vbF9tYWluLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfbWFpbi5jDQordG9vbF9tZmlsZXNyLm9iajogdG9vbF9tZmlsZXMuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9tZmlsZXMuYw0KK3Rvb2xfbXNnc3Iub2JqOiB0b29sX21zZ3MuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9tc2dzLmMNCit0b29sX29wZXJhdGVyLm9iajogdG9vbF9vcGVyYXRlLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfb3BlcmF0ZS5jDQordG9vbF9vcGVyaGxwci5vYmo6IHRvb2xfb3BlcmhscC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX29wZXJobHAuYw0KK3Rvb2xfcGFueWtleXIub2JqOiB0b29sX3BhbnlrZXkuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9wYW55a2V5LmMNCit0b29sX3BhcmFtaGxwci5vYmo6IHRvb2xfcGFyYW1obHAuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9wYXJhbWhscC5jDQordG9vbF9wYXJzZWNmZ3Iub2JqOiB0b29sX3BhcnNlY2ZnLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfcGFyc2VjZmcuYw0KK3Rvb2xfc2V0b3B0ci5vYmo6IHRvb2xfc2V0b3B0LmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfc2V0b3B0LmMNCit0b29sX3NsZWVwci5vYmo6IHRvb2xfc2xlZXAuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9zbGVlcC5jDQordG9vbF91cmxnbG9ici5vYmo6IHRvb2xfdXJsZ2xvYi5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3VybGdsb2IuYw0KK3Rvb2xfdXRpbHIub2JqOiB0b29sX3V0aWwuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF91dGlsLmMNCit0b29sX3Ztc3Iub2JqOiB0b29sX3Ztcy5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3Ztcy5jDQordG9vbF93cml0ZWVudnIub2JqOiB0b29sX3dyaXRlZW52LmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfd3JpdGVlbnYuYw0KK3Rvb2xfd3JpdGVvdXRyLm9iajogdG9vbF93cml0ZW91dC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3dyaXRlb3V0LmMNCit0b29sX3hhdHRyci5vYmo6IHRvb2xfeGF0dHIuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF94YXR0ci5jDQorY3VybHIucmVzIDogY3VybC5yYw0KKwkkKFJDUikgJChSRVNGTEFHUykgL0ZvIiRAIiBjdXJsLnJjDQorDQorIyMgRGVidWcNCitodWdlaGVscGQub2JqOiBodWdlaGVscC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL1ptMjAwIC9GbyIkQCIgaHVnZWhlbHAuYw0KK25vbmJsb2NrZC5vYmo6IC4uL2xpYi9ub25ibG9jay5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiAuLi9saWIvbm9uYmxvY2suYw0KK3Jhd3N0cmQub2JqOiAuLi9saWIvcmF3c3RyLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9yYXdzdHIuYw0KK3N0cnRvb2ZmdGQub2JqOiAuLi9saWIvc3RydG9vZmZ0LmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9zdHJ0b29mZnQuYw0KK3Rvb2xfYmlubW9kZWQub2JqOiB0b29sX2Jpbm1vZGUuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9iaW5tb2RlLmMNCit0b29sX2JuYW1lZC5vYmo6IHRvb2xfYm5hbWUuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9ibmFtZS5jDQordG9vbF9jYl9kYmdkLm9iajogdG9vbF9jYl9kYmcuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9kYmcuYw0KK3Rvb2xfY2JfaGRyZC5vYmo6IHRvb2xfY2JfaGRyLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2JfaGRyLmMNCit0b29sX2NiX3ByZ2Qub2JqOiB0b29sX2NiX3ByZy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX3ByZy5jDQordG9vbF9jYl9yZWFkLm9iajogdG9vbF9jYl9yZWEuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9yZWEuYw0KK3Rvb2xfY2Jfc2VlZC5vYmo6IHRvb2xfY2Jfc2VlLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2Jfc2VlLmMNCit0b29sX2NiX3dydGQub2JqOiB0b29sX2NiX3dydC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX3dydC5jDQordG9vbF9jZmdhYmxlZC5vYmo6IHRvb2xfY2ZnYWJsZS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NmZ2FibGUuYw0KK3Rvb2xfY29udmVydGQub2JqOiB0b29sX2NvbnZlcnQuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jb252ZXJ0LmMNCit0b29sX2RpcmhpZWQub2JqOiB0b29sX2RpcmhpZS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2RpcmhpZS5jDQordG9vbF9kb3N3aW5kLm9iajogdG9vbF9kb3N3aW4uYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9kb3N3aW4uYw0KK3Rvb2xfZWFzeXNyY2Qub2JqOiB0b29sX2Vhc3lzcmMuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9lYXN5c3JjLmMNCit0b29sX2Zvcm1wYXJzZWQub2JqOiB0b29sX2Zvcm1wYXJzZS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2Zvcm1wYXJzZS5jDQordG9vbF9nZXRwYXJhbWQub2JqOiB0b29sX2dldHBhcmFtLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZ2V0cGFyYW0uYw0KK3Rvb2xfZ2V0cGFzc2Qub2JqOiB0b29sX2dldHBhc3MuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9nZXRwYXNzLmMNCit0b29sX2hlbHBkLm9iajogdG9vbF9oZWxwLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfaGVscC5jDQordG9vbF9oZWxwZXJzZC5vYmo6IHRvb2xfaGVscGVycy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2hlbHBlcnMuYw0KK3Rvb2xfaG9tZWRpcmQub2JqOiB0b29sX2hvbWVkaXIuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9ob21lZGlyLmMNCit0b29sX2xpYmluZm9kLm9iajogdG9vbF9saWJpbmZvLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfbGliaW5mby5jDQordG9vbF9tYWluZC5vYmo6IHRvb2xfbWFpbi5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX21haW4uYw0KK3Rvb2xfbWZpbGVzZC5vYmo6IHRvb2xfbWZpbGVzLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfbWZpbGVzLmMNCit0b29sX21zZ3NkLm9iajogdG9vbF9tc2dzLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfbXNncy5jDQordG9vbF9vcGVyYXRlZC5vYmo6IHRvb2xfb3BlcmF0ZS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX29wZXJhdGUuYw0KK3Rvb2xfb3BlcmhscGQub2JqOiB0b29sX29wZXJobHAuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9vcGVyaGxwLmMNCit0b29sX3BhbnlrZXlkLm9iajogdG9vbF9wYW55a2V5LmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfcGFueWtleS5jDQordG9vbF9wYXJhbWhscGQub2JqOiB0b29sX3BhcmFtaGxwLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfcGFyYW1obHAuYw0KK3Rvb2xfcGFyc2VjZmdkLm9iajogdG9vbF9wYXJzZWNmZy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3BhcnNlY2ZnLmMNCit0b29sX3NldG9wdGQub2JqOiB0b29sX3NldG9wdC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3NldG9wdC5jDQordG9vbF9zbGVlcGQub2JqOiB0b29sX3NsZWVwLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfc2xlZXAuYw0KK3Rvb2xfdXJsZ2xvYmQub2JqOiB0b29sX3VybGdsb2IuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF91cmxnbG9iLmMNCit0b29sX3V0aWxkLm9iajogdG9vbF91dGlsLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfdXRpbC5jDQordG9vbF92bXNkLm9iajogdG9vbF92bXMuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF92bXMuYw0KK3Rvb2xfd3JpdGVlbnZkLm9iajogdG9vbF93cml0ZWVudi5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3dyaXRlZW52LmMNCit0b29sX3dyaXRlb3V0ZC5vYmo6IHRvb2xfd3JpdGVvdXQuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF93cml0ZW91dC5jDQordG9vbF94YXR0cmQub2JqOiB0b29sX3hhdHRyLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfeGF0dHIuYw0KK2N1cmxkLnJlcyA6IGN1cmwucmMNCisJJChSQ0QpICQoUkVTRkxBR1MpIC9GbyIkQCIgY3VybC5yYw0KKw0KK2NsZWFuOg0KKwlALWVyYXNlICQoUFJPR1JBTV9OQU1FKSAyPiBOVUwNCisJQC1lcmFzZSAkKFJFTEVBU0VfT0JKUykgMj4gTlVMDQorCUAtZXJhc2UgJChERUJVR19PQkpTKSAyPiBOVUwNCisJQC1lcmFzZSAqLmlkYiAyPiBOVUwNCisJQC1lcmFzZSAqLnBkYiAyPiBOVUwNCisJQC1lcmFzZSAqLnBjaCAyPiBOVUwNCisJQC1lcmFzZSAqLmlsayAyPiBOVUwNCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUudmM2IGIvY3VybC03LjI1LjAvc3JjL01ha2VmaWxlLnZjNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTZjNThlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL01ha2VmaWxlLnZjNgpAQCAtMCwwICsxLDUxNSBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXw0KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8DQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXw0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198DQorIw0KKyMgQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4NCisjDQorIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaA0KKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcw0KKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4NCisjDQorIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwNCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4NCisjDQorIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyMNCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorIyBBbGwgZmlsZXMgaW4gdGhlIE1ha2VmaWxlLnZjKiBzZXJpZXMgYXJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlDQorIyBvbmUgbWFkZSBmb3IgTVNWQyB2ZXJzaW9uIDYuIEFsYXMsIGlmIHlvdSB3YW50IHRvIGRvIGNoYW5nZXMgdG8gYW55IG9mIHRoZQ0KKyMgZmllbHMgYW5kIHNlbmQgYmFjayB0byB0aGUgcHJvamVjdCwgZWRpdCB0aGUgdmVyc2lvbiBzaXgsIG1ha2UgeW91ciBkaWZmIGFuZA0KKyMgbWFpbCBjdXJsLXVzZXJzLg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjDQorIyMgTWFrZWZpbGUgZm9yIGJ1aWxkaW5nIGN1cmwuZXhlIHdpdGggTVNWQzYNCisjIyBVc2U6IG5tYWtlIC1mIG1ha2VmaWxlLnZjNiBbcmVsZWFzZSB8IGRlYnVnXSBbQ0ZHPXJlbGVhc2Utc3NsXQ0KKyMjICAgICAgKGRlZmF1bHQgaXMgcmVsZWFzZSkNCisjIyAibm1ha2UgLWYgbWFrZWZpbGUudmM2IENGRz1yZWxlYXNlLXNzbCIgc3RhdGljYWxseSBsaW5rcyBPcGVuU1NMDQorIyMgaW50byBjdXJsLmV4ZSBwcm9kdWNpbmcgYSBzdGFuZGFsb25lIFNTTC1lbmFibGVkIGV4ZWN1dGFibGUuDQorIyMNCisjDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1BST0dSQU1fTkFNRSA9IGN1cmwuZXhlDQorDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyBWZXJpZnkgdGhhdCBjdXJyZW50IHN1YmRpciBpcyBjdXJsJ3MgJ3NyYycNCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCishSUYgISBFWElTVCguXHRvb2xfbWFpbi5jKQ0KKyEgIE1FU1NBR0UgQ2FuIG5vdCBwcm9jZXNzIHRoaXMgbWFrZWZpbGUgZnJvbSBvdXRzaWRlIG9mIGN1cmwncyAnc3JjJyBzdWJkaXJlY3RvcnkuDQorISAgTUVTU0FHRSBDaGFuZ2UgdG8gY3VybCdzICdzcmMnIHN1YmRpcmVjdG9yeSwgYW5kIHRyeSBhZ2Fpbi4NCishICBFUlJPUiAgIFNlZSBwcmV2aW91cyBtZXNzYWdlLg0KKyFFTkRJRg0KKw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyBNYWtlZmlsZS5tc3ZjLm5hbWVzIHByb3ZpZGVzIGxpYmN1cmwgZmlsZSBuYW1lcw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorIUlOQ0xVREUgLi5cTWFrZWZpbGUubXN2Yy5uYW1lcw0KKw0KKw0KKw0KKyFJRk5ERUYgT1BFTlNTTF9QQVRIDQorT1BFTlNTTF9QQVRIID0gLi4vLi4vb3BlbnNzbC0wLjkuOHINCishRU5ESUYNCisNCishSUZOREVGIFpMSUJfUEFUSA0KK1pMSUJfUEFUSCA9IC4uLy4uL3psaWItMS4yLjUNCishRU5ESUYNCisNCishSUZOREVGIE1BQ0hJTkUNCitNQUNISU5FICA9IFg4Ng0KKyFFTkRJRg0KKw0KKyMgVVNFX1dJTkRPV1NfU1NQSSB1c2VzIHdpbmRvd3MgbGlicmFyaWVzIHRvIGFsbG93IE5UTE0gYXV0aGVudGljYXRpb24NCisjIHdpdGhvdXQgYW4gb3BlbnNzbCBpbnN0YWxsYXRpb24gYW5kIG9mZmVycyB0aGUgYWJpbGl0eSB0byBhdXRoZW50aWNhdGUNCisjIHVzaW5nIHRoZSAiY3VycmVudCBsb2dnZWQgaW4gdXNlciIuIFNpbmNlIGF0IGxlYXN0IHdpdGggTVNWQzYgdGhlIHNzcGkuaA0KKyMgaGVhZGVyIGlzIGJyb2tlbiBpdCBpcyBlaXRoZXIgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgV2luZG93cyBTREssDQorIyBvciB0byBmaXggc3NwaS5oIHdpdGggYWRkaW5nIHRoaXMgZGVmaW5lIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3NwaS5oOg0KKyMgI2RlZmluZSBGcmVlQ3JlZGVudGlhbEhhbmRsZSBGcmVlQ3JlZGVudGlhbHNIYW5kbGUNCisjDQorIyBJZiwgZm9yIHNvbWUgcmVhc29uIHRoZSBXaW5kb3dzIFNESyBpcyBpbnN0YWxsZWQgYnV0IG5vdCBpbnN0YWxsZWQNCisjIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uLCB5b3UgY2FuIHNwZWNpZnkgV0lORE9XU19TREtfUEFUSC4NCisjIEl0IGNhbiBiZSBkb3dubG9hZGVkIGZyb206DQorIyBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbXNkb3dubG9hZC9wbGF0Zm9ybXNkay9zZGt1cGRhdGUvDQorDQorIyBXSU5ET1dTX1NTUEkgPSAxDQorDQorIUlGREVGIFdJTkRPV1NfU1NQSQ0KKyFJRk5ERUYgV0lORE9XU19TREtfUEFUSA0KK1dJTkRPV1NfU0RLX1BBVEggPSAiJChQUk9HUkFNRklMRVMpXE1pY3Jvc29mdCBTREsiDQorIUVORElGDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIyBOb3RoaW5nIG1vcmUgdG8gZG8gYmVsb3cgdGhpcyBsaW5lIQ0KK1pMSUJfQ0ZMQUdTICAgPSAvREhBVkVfWkxJQl9IIC9ESEFWRV9aTElCIC9ESEFWRV9MSUJaIC9JICIkKFpMSUJfUEFUSCkiDQorWkxJQl9MRkxBR1MgICA9ICIvTElCUEFUSDokKFpMSUJfUEFUSCkiDQorWkxJQl9MSUJTICAgICA9IHpsaWIubGliDQorWkxJQl9JTVBfTElCUyA9IHpkbGwubGliDQorDQorU1NMX0NGTEFHUyAgICAgPSAvRFVTRV9TU0xFQVkNCitTU0xfTEZMQUdTICAgICA9IC9MSUJQQVRIOiIkKE9QRU5TU0xfUEFUSCkvb3V0MzIiDQorU1NMX0lNUF9MRkxBR1MgPSAvTElCUEFUSDoiJChPUEVOU1NMX1BBVEgpL291dDMyZGxsIg0KK1NTTF9MSUJTICAgICAgID0gbGliZWF5MzIubGliIHNzbGVheTMyLmxpYiBnZGkzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWINCisNCisjIFJ1bnRpbWUgbGlicmFyeSBjb25maWd1cmF0aW9uDQorUlRMSUIgICA9IC9NRA0KK1JUTElCRCAgPSAvTURkDQorDQorIUlGICIkKFJUTElCQ0ZHKSIgPT0gInN0YXRpYyINCitSVExJQiAgPSAvTVQNCitSVExJQkQgPSAvTVRkDQorIUVORElGDQorDQorIyMgUmVsZWFzZQ0KK0NDUiAgID0gY2wuZXhlICQoUlRMSUIpIC9PMiAvRE5ERUJVRw0KK0xJTktSID0gbGluay5leGUgL2luY3JlbWVudGFsOm5vIC9saWJwYXRoOiIuLi9saWIiDQorUkNSICAgPSByYy5leGUgL2RERUJVR0JVSUxEPTANCisNCisjIyBEZWJ1Zw0KK0NDRCAgID0gY2wuZXhlICQoUlRMSUJEKSAvR20gL1pJIC9PZCAvRF9ERUJVRyAvR1oNCitMSU5LRCA9IGxpbmsuZXhlIC9pbmNyZW1lbnRhbDp5ZXMgL2RlYnVnIC9saWJwYXRoOiIuLi9saWIiDQorUkNEICAgPSByYy5leGUgL2RERUJVR0JVSUxEPTENCisNCitDRkxBR1MgICA9IC9JLi4vbGliIC9JLi4vaW5jbHVkZSAvbm9sb2dvIC9XMyAvR1ggL0RXSU4zMiAvWVggL0ZEIC9jIC9EX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTj0xDQorTEZMQUdTICAgPSAvbm9sb2dvIC9vdXQ6JChQUk9HUkFNX05BTUUpIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTokKE1BQ0hJTkUpDQorUkVTRkxBR1MgPSAvaS4uL2luY2x1ZGUNCisNCisjIFRoaXMgbWFuaWZlc3QgdGhpbmcgaXMgZm9yIFZDOCwgZW5hYmxlZCBieSB0aGUgbWFrZXRneiBzY3JpcHQgdGhhdA0KKyMgYnVpbGRzIHRoZSBWQzggdmVyc2lvbiBvZiB0aGlzIG1ha2VmaWxlLiBMZWZ0IGNvbW1lbnRlZCBvdXQgaW4gdGhlIFZDNg0KKyMgdmVyc2lvbiENCisjTUFOSUZFU1RUT09MID0gbXQgLW1hbmlmZXN0ICQoUFJPR1JBTV9OQU1FKS5tYW5pZmVzdCAtb3V0cHV0cmVzb3VyY2U6JChQUk9HUkFNX05BTUUpOzENCisNCishSUZERUYgV0lORE9XU19TU1BJDQorQ0ZMQUdTID0gJChDRkxBR1MpIC9EVVNFX1dJTkRPV1NfU1NQSSAvSSQoV0lORE9XU19TREtfUEFUSClcaW5jbHVkZQ0KKyFFTkRJRg0KKw0KK1JFTEVBU0VfT0JKUz0gXA0KKwlodWdlaGVscHIub2JqIFwNCisJbm9uYmxvY2tyLm9iaiBcDQorCXJhd3N0cnIub2JqIFwNCisJc3RydG9vZmZ0ci5vYmogXA0KKwl0b29sX2Jpbm1vZGVyLm9iaiBcDQorCXRvb2xfYm5hbWVyLm9iaiBcDQorCXRvb2xfY2JfZGJnci5vYmogXA0KKwl0b29sX2NiX2hkcnIub2JqIFwNCisJdG9vbF9jYl9wcmdyLm9iaiBcDQorCXRvb2xfY2JfcmVhci5vYmogXA0KKwl0b29sX2NiX3NlZXIub2JqIFwNCisJdG9vbF9jYl93cnRyLm9iaiBcDQorCXRvb2xfY2ZnYWJsZXIub2JqIFwNCisJdG9vbF9jb252ZXJ0ci5vYmogXA0KKwl0b29sX2RpcmhpZXIub2JqIFwNCisJdG9vbF9kb3N3aW5yLm9iaiBcDQorCXRvb2xfZWFzeXNyY3Iub2JqIFwNCisJdG9vbF9mb3JtcGFyc2VyLm9iaiBcDQorCXRvb2xfZ2V0cGFyYW1yLm9iaiBcDQorCXRvb2xfZ2V0cGFzc3Iub2JqIFwNCisJdG9vbF9oZWxwci5vYmogXA0KKwl0b29sX2hlbHBlcnNyLm9iaiBcDQorCXRvb2xfaG9tZWRpcnIub2JqIFwNCisJdG9vbF9saWJpbmZvci5vYmogXA0KKwl0b29sX21haW5yLm9iaiBcDQorCXRvb2xfbWZpbGVzci5vYmogXA0KKwl0b29sX21zZ3NyLm9iaiBcDQorCXRvb2xfb3BlcmF0ZXIub2JqIFwNCisJdG9vbF9vcGVyaGxwci5vYmogXA0KKwl0b29sX3BhbnlrZXlyLm9iaiBcDQorCXRvb2xfcGFyYW1obHByLm9iaiBcDQorCXRvb2xfcGFyc2VjZmdyLm9iaiBcDQorCXRvb2xfc2V0b3B0ci5vYmogXA0KKwl0b29sX3NsZWVwci5vYmogXA0KKwl0b29sX3VybGdsb2JyLm9iaiBcDQorCXRvb2xfdXRpbHIub2JqIFwNCisJdG9vbF92bXNyLm9iaiBcDQorCXRvb2xfd3JpdGVlbnZyLm9iaiBcDQorCXRvb2xfd3JpdGVvdXRyLm9iaiBcDQorCXRvb2xfeGF0dHJyLm9iaiBcDQorCWN1cmxyLnJlcw0KKw0KK0RFQlVHX09CSlM9IFwNCisJaHVnZWhlbHBkLm9iaiBcDQorCW5vbmJsb2NrZC5vYmogXA0KKwlyYXdzdHJkLm9iaiBcDQorCXN0cnRvb2ZmdGQub2JqIFwNCisJdG9vbF9iaW5tb2RlZC5vYmogXA0KKwl0b29sX2JuYW1lZC5vYmogXA0KKwl0b29sX2NiX2RiZ2Qub2JqIFwNCisJdG9vbF9jYl9oZHJkLm9iaiBcDQorCXRvb2xfY2JfcHJnZC5vYmogXA0KKwl0b29sX2NiX3JlYWQub2JqIFwNCisJdG9vbF9jYl9zZWVkLm9iaiBcDQorCXRvb2xfY2Jfd3J0ZC5vYmogXA0KKwl0b29sX2NmZ2FibGVkLm9iaiBcDQorCXRvb2xfY29udmVydGQub2JqIFwNCisJdG9vbF9kaXJoaWVkLm9iaiBcDQorCXRvb2xfZG9zd2luZC5vYmogXA0KKwl0b29sX2Vhc3lzcmNkLm9iaiBcDQorCXRvb2xfZm9ybXBhcnNlZC5vYmogXA0KKwl0b29sX2dldHBhcmFtZC5vYmogXA0KKwl0b29sX2dldHBhc3NkLm9iaiBcDQorCXRvb2xfaGVscGQub2JqIFwNCisJdG9vbF9oZWxwZXJzZC5vYmogXA0KKwl0b29sX2hvbWVkaXJkLm9iaiBcDQorCXRvb2xfbGliaW5mb2Qub2JqIFwNCisJdG9vbF9tYWluZC5vYmogXA0KKwl0b29sX21maWxlc2Qub2JqIFwNCisJdG9vbF9tc2dzZC5vYmogXA0KKwl0b29sX29wZXJhdGVkLm9iaiBcDQorCXRvb2xfb3BlcmhscGQub2JqIFwNCisJdG9vbF9wYW55a2V5ZC5vYmogXA0KKwl0b29sX3BhcmFtaGxwZC5vYmogXA0KKwl0b29sX3BhcnNlY2ZnZC5vYmogXA0KKwl0b29sX3NldG9wdGQub2JqIFwNCisJdG9vbF9zbGVlcGQub2JqIFwNCisJdG9vbF91cmxnbG9iZC5vYmogXA0KKwl0b29sX3V0aWxkLm9iaiBcDQorCXRvb2xfdm1zZC5vYmogXA0KKwl0b29sX3dyaXRlZW52ZC5vYmogXA0KKwl0b29sX3dyaXRlb3V0ZC5vYmogXA0KKwl0b29sX3hhdHRyZC5vYmogXA0KKwljdXJsZC5yZXMNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyBJZiBDRkcgbm90IHNwZWNpZmllZCwgdXNlIHN0YXRpYyBsaWJzDQorDQorQ0ZMQUdTICAgICAgICAgPSAkKENGTEFHUykgL0RDVVJMX1NUQVRJQ0xJQg0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UgZHluYW1pYyBsaWJyYXJ5DQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbCINCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9JTVBfTElCX1JFTCkNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9JTVBfTElCX0RCRykNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS16bGliIg0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpICQoWkxJQl9DRkxBR1MpIC9EQ1VSTF9TVEFUSUNMSUINCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkgJChaTElCX0xJQlMpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpICQoWkxJQl9MSUJTKQ0KK0xGTEFHUyAgICAgICAgID0gJChMRkxBR1MpICQoWkxJQl9MRkxBR1MpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIHNzbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1zc2wiDQorQ0ZMQUdTICAgICAgICAgPSAkKENGTEFHUykgJChTU0xfQ0ZMQUdTKSAvRENVUkxfU1RBVElDTElCDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpICQoU1NMX0xJQlMpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpICQoU1NMX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChTU0xfTEZMQUdTKQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtZGxsLXNzbC1kbGwiDQorQ0ZMQUdTICAgICAgICAgPSAkKENGTEFHUykgJChTU0xfQ0ZMQUdTKQ0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX0lNUF9MSUJfUkVMKSAkKFNTTF9MSUJTKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX0lNUF9MSUJfREJHKSAkKFNTTF9MSUJTKQ0KK0xGTEFHUyAgICAgICAgID0gJChMRkxBR1MpICQoU1NMX0lNUF9MRkxBR1MpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIHNzbCBhbmQgemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1zc2wtemxpYiINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFNTTF9DRkxBR1MpICQoWkxJQl9DRkxBR1MpIC9EQ1VSTF9TVEFUSUNMSUINCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkgJChTU0xfTElCUykgJChaTElCX0xJQlMpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpICQoU1NMX0xJQlMpICQoWkxJQl9MSUJTKQ0KK0xGTEFHUyAgICAgICAgID0gJChMRkxBR1MpICQoU1NMX0xGTEFHUykgJChaTElCX0xGTEFHUykNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggZHluYW1pYyBzc2wNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLWRsbCINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFNTTF9DRkxBR1MpIC9EQ1VSTF9TVEFUSUNMSUINCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkgJChTU0xfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykgJChTU0xfTElCUykNCitMRkxBR1MgICAgICAgICA9ICQoTEZMQUdTKSAkKFNTTF9JTVBfTEZMQUdTKQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtemxpYi1kbGwiDQorQ0ZMQUdTICAgICAgICAgPSAkKENGTEFHUykgJChaTElCX0NGTEFHUykgL0RDVVJMX1NUQVRJQ0xJQg0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKSAkKFpMSUJfSU1QX0xJQlMpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpICQoWkxJQl9JTVBfTElCUykNCitMRkxBR1MgICAgICAgICA9ICQoTEZMQUdTKSAkKFpMSUJfTEZMQUdTKQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2UgZHluYW1pYyBsaWJyYXJ5IHdpdGggZHluYW1pYyB6bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC16bGliLWRsbCINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFpMSUJfQ0ZMQUdTKQ0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX0lNUF9MSUJfUkVMKSAkKFpMSUJfSU1QX0xJQlMpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfSU1QX0xJQl9EQkcpICQoWkxJQl9JTVBfTElCUykNCitMRkxBR1MgICAgICAgICA9ICQoTEZMQUdTKSAkKFpMSUJfTEZMQUdTKQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC1kbGwtemxpYi1kbGwiDQorQ0ZMQUdTICAgICAgICAgPSAkKENGTEFHUykgJChTU0xfQ0ZMQUdTKSAkKFpMSUJfQ0ZMQUdTKSAvRENVUkxfU1RBVElDTElCDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpICQoU1NMX0xJQlMpICQoWkxJQl9JTVBfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykgJChTU0xfTElCUykgJChaTElCX0lNUF9MSUJTKQ0KK0xGTEFHUyAgICAgICAgID0gJChMRkxBR1MpICQoU1NMX0lNUF9MRkxBR1MpICQoWkxJQl9MRkxBR1MpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbCBhbmQgZHluYW1pYyB6bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLWRsbC1zc2wtZGxsLXpsaWItZGxsIg0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpICQoU1NMX0NGTEFHUykgJChaTElCX0NGTEFHUykNCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9JTVBfTElCX1JFTCkgJChTU0xfTElCUykgJChaTElCX0lNUF9MSUJTKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX0lNUF9MSUJfREJHKSAkKFNTTF9MSUJTKSAkKFpMSUJfSU1QX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChTU0xfSU1QX0xGTEFHUykgJChaTElCX0xGTEFHUykNCishRU5ESUYNCisNCisNCitMSU5LTElCUyAgICAgICA9ICQoTElOS0xJQlMpIHdzMl8zMi5saWIgd2xkYXAzMi5saWINCitMSU5LTElCU19ERUJVRyA9ICQoTElOS0xJQlNfREVCVUcpIHdzMl8zMi5saWIgd2xkYXAzMi5saWINCisNCithbGwgOiByZWxlYXNlDQorDQorcmVsZWFzZTogJChSRUxFQVNFX09CSlMpDQorCSQoTElOS1IpICQoTEZMQUdTKSAkKExJTktMSUJTKSAkKFJFTEVBU0VfT0JKUykNCisgICAgICAgICQoTUFOSUZFU1RUT09MKQ0KKw0KK2RlYnVnOiAkKERFQlVHX09CSlMpDQorCSQoTElOS0QpICQoTEZMQUdTKSAkKExJTktMSUJTX0RFQlVHKSAkKERFQlVHX09CSlMpDQorICAgICAgICAkKE1BTklGRVNUVE9PTCkNCisNCisjIyBSZWxlYXNlDQoraHVnZWhlbHByLm9iajogaHVnZWhlbHAuYw0KKwkkKENDUikgJChDRkxBR1MpIC9abTIwMCAvRm8iJEAiIGh1Z2VoZWxwLmMNCitub25ibG9ja3Iub2JqOiAuLi9saWIvbm9uYmxvY2suYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgLi4vbGliL25vbmJsb2NrLmMNCityYXdzdHJyLm9iajogLi4vbGliL3Jhd3N0ci5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiAuLi9saWIvcmF3c3RyLmMNCitzdHJ0b29mZnRyLm9iajogLi4vbGliL3N0cnRvb2ZmdC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiAuLi9saWIvc3RydG9vZmZ0LmMNCit0b29sX2Jpbm1vZGVyLm9iajogdG9vbF9iaW5tb2RlLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfYmlubW9kZS5jDQordG9vbF9ibmFtZXIub2JqOiB0b29sX2JuYW1lLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfYm5hbWUuYw0KK3Rvb2xfY2JfZGJnci5vYmo6IHRvb2xfY2JfZGJnLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2JfZGJnLmMNCit0b29sX2NiX2hkcnIub2JqOiB0b29sX2NiX2hkci5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX2hkci5jDQordG9vbF9jYl9wcmdyLm9iajogdG9vbF9jYl9wcmcuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9wcmcuYw0KK3Rvb2xfY2JfcmVhci5vYmo6IHRvb2xfY2JfcmVhLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2JfcmVhLmMNCit0b29sX2NiX3NlZXIub2JqOiB0b29sX2NiX3NlZS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX3NlZS5jDQordG9vbF9jYl93cnRyLm9iajogdG9vbF9jYl93cnQuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl93cnQuYw0KK3Rvb2xfY2ZnYWJsZXIub2JqOiB0b29sX2NmZ2FibGUuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jZmdhYmxlLmMNCit0b29sX2NvbnZlcnRyLm9iajogdG9vbF9jb252ZXJ0LmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY29udmVydC5jDQordG9vbF9kaXJoaWVyLm9iajogdG9vbF9kaXJoaWUuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9kaXJoaWUuYw0KK3Rvb2xfZG9zd2luci5vYmo6IHRvb2xfZG9zd2luLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZG9zd2luLmMNCit0b29sX2Vhc3lzcmNyLm9iajogdG9vbF9lYXN5c3JjLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZWFzeXNyYy5jDQordG9vbF9mb3JtcGFyc2VyLm9iajogdG9vbF9mb3JtcGFyc2UuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9mb3JtcGFyc2UuYw0KK3Rvb2xfZ2V0cGFyYW1yLm9iajogdG9vbF9nZXRwYXJhbS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2dldHBhcmFtLmMNCit0b29sX2dldHBhc3NyLm9iajogdG9vbF9nZXRwYXNzLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZ2V0cGFzcy5jDQordG9vbF9oZWxwci5vYmo6IHRvb2xfaGVscC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2hlbHAuYw0KK3Rvb2xfaGVscGVyc3Iub2JqOiB0b29sX2hlbHBlcnMuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9oZWxwZXJzLmMNCit0b29sX2hvbWVkaXJyLm9iajogdG9vbF9ob21lZGlyLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfaG9tZWRpci5jDQordG9vbF9saWJpbmZvci5vYmo6IHRvb2xfbGliaW5mby5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2xpYmluZm8uYw0KK3Rvb2xfbWFpbnIub2JqOiB0b29sX21haW4uYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9tYWluLmMNCit0b29sX21maWxlc3Iub2JqOiB0b29sX21maWxlcy5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX21maWxlcy5jDQordG9vbF9tc2dzci5vYmo6IHRvb2xfbXNncy5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX21zZ3MuYw0KK3Rvb2xfb3BlcmF0ZXIub2JqOiB0b29sX29wZXJhdGUuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9vcGVyYXRlLmMNCit0b29sX29wZXJobHByLm9iajogdG9vbF9vcGVyaGxwLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfb3BlcmhscC5jDQordG9vbF9wYW55a2V5ci5vYmo6IHRvb2xfcGFueWtleS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3BhbnlrZXkuYw0KK3Rvb2xfcGFyYW1obHByLm9iajogdG9vbF9wYXJhbWhscC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3BhcmFtaGxwLmMNCit0b29sX3BhcnNlY2Znci5vYmo6IHRvb2xfcGFyc2VjZmcuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9wYXJzZWNmZy5jDQordG9vbF9zZXRvcHRyLm9iajogdG9vbF9zZXRvcHQuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9zZXRvcHQuYw0KK3Rvb2xfc2xlZXByLm9iajogdG9vbF9zbGVlcC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3NsZWVwLmMNCit0b29sX3VybGdsb2JyLm9iajogdG9vbF91cmxnbG9iLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfdXJsZ2xvYi5jDQordG9vbF91dGlsci5vYmo6IHRvb2xfdXRpbC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3V0aWwuYw0KK3Rvb2xfdm1zci5vYmo6IHRvb2xfdm1zLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfdm1zLmMNCit0b29sX3dyaXRlZW52ci5vYmo6IHRvb2xfd3JpdGVlbnYuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF93cml0ZWVudi5jDQordG9vbF93cml0ZW91dHIub2JqOiB0b29sX3dyaXRlb3V0LmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfd3JpdGVvdXQuYw0KK3Rvb2xfeGF0dHJyLm9iajogdG9vbF94YXR0ci5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3hhdHRyLmMNCitjdXJsci5yZXMgOiBjdXJsLnJjDQorCSQoUkNSKSAkKFJFU0ZMQUdTKSAvRm8iJEAiIGN1cmwucmMNCisNCisjIyBEZWJ1Zw0KK2h1Z2VoZWxwZC5vYmo6IGh1Z2VoZWxwLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvWm0yMDAgL0ZvIiRAIiBodWdlaGVscC5jDQorbm9uYmxvY2tkLm9iajogLi4vbGliL25vbmJsb2NrLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9ub25ibG9jay5jDQorcmF3c3RyZC5vYmo6IC4uL2xpYi9yYXdzdHIuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgLi4vbGliL3Jhd3N0ci5jDQorc3RydG9vZmZ0ZC5vYmo6IC4uL2xpYi9zdHJ0b29mZnQuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgLi4vbGliL3N0cnRvb2ZmdC5jDQordG9vbF9iaW5tb2RlZC5vYmo6IHRvb2xfYmlubW9kZS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2Jpbm1vZGUuYw0KK3Rvb2xfYm5hbWVkLm9iajogdG9vbF9ibmFtZS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2JuYW1lLmMNCit0b29sX2NiX2RiZ2Qub2JqOiB0b29sX2NiX2RiZy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX2RiZy5jDQordG9vbF9jYl9oZHJkLm9iajogdG9vbF9jYl9oZHIuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9oZHIuYw0KK3Rvb2xfY2JfcHJnZC5vYmo6IHRvb2xfY2JfcHJnLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2JfcHJnLmMNCit0b29sX2NiX3JlYWQub2JqOiB0b29sX2NiX3JlYS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX3JlYS5jDQordG9vbF9jYl9zZWVkLm9iajogdG9vbF9jYl9zZWUuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9zZWUuYw0KK3Rvb2xfY2Jfd3J0ZC5vYmo6IHRvb2xfY2Jfd3J0LmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2Jfd3J0LmMNCit0b29sX2NmZ2FibGVkLm9iajogdG9vbF9jZmdhYmxlLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2ZnYWJsZS5jDQordG9vbF9jb252ZXJ0ZC5vYmo6IHRvb2xfY29udmVydC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NvbnZlcnQuYw0KK3Rvb2xfZGlyaGllZC5vYmo6IHRvb2xfZGlyaGllLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZGlyaGllLmMNCit0b29sX2Rvc3dpbmQub2JqOiB0b29sX2Rvc3dpbi5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2Rvc3dpbi5jDQordG9vbF9lYXN5c3JjZC5vYmo6IHRvb2xfZWFzeXNyYy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2Vhc3lzcmMuYw0KK3Rvb2xfZm9ybXBhcnNlZC5vYmo6IHRvb2xfZm9ybXBhcnNlLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZm9ybXBhcnNlLmMNCit0b29sX2dldHBhcmFtZC5vYmo6IHRvb2xfZ2V0cGFyYW0uYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9nZXRwYXJhbS5jDQordG9vbF9nZXRwYXNzZC5vYmo6IHRvb2xfZ2V0cGFzcy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2dldHBhc3MuYw0KK3Rvb2xfaGVscGQub2JqOiB0b29sX2hlbHAuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9oZWxwLmMNCit0b29sX2hlbHBlcnNkLm9iajogdG9vbF9oZWxwZXJzLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfaGVscGVycy5jDQordG9vbF9ob21lZGlyZC5vYmo6IHRvb2xfaG9tZWRpci5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2hvbWVkaXIuYw0KK3Rvb2xfbGliaW5mb2Qub2JqOiB0b29sX2xpYmluZm8uYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9saWJpbmZvLmMNCit0b29sX21haW5kLm9iajogdG9vbF9tYWluLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfbWFpbi5jDQordG9vbF9tZmlsZXNkLm9iajogdG9vbF9tZmlsZXMuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9tZmlsZXMuYw0KK3Rvb2xfbXNnc2Qub2JqOiB0b29sX21zZ3MuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9tc2dzLmMNCit0b29sX29wZXJhdGVkLm9iajogdG9vbF9vcGVyYXRlLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfb3BlcmF0ZS5jDQordG9vbF9vcGVyaGxwZC5vYmo6IHRvb2xfb3BlcmhscC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX29wZXJobHAuYw0KK3Rvb2xfcGFueWtleWQub2JqOiB0b29sX3BhbnlrZXkuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9wYW55a2V5LmMNCit0b29sX3BhcmFtaGxwZC5vYmo6IHRvb2xfcGFyYW1obHAuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9wYXJhbWhscC5jDQordG9vbF9wYXJzZWNmZ2Qub2JqOiB0b29sX3BhcnNlY2ZnLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfcGFyc2VjZmcuYw0KK3Rvb2xfc2V0b3B0ZC5vYmo6IHRvb2xfc2V0b3B0LmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfc2V0b3B0LmMNCit0b29sX3NsZWVwZC5vYmo6IHRvb2xfc2xlZXAuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9zbGVlcC5jDQordG9vbF91cmxnbG9iZC5vYmo6IHRvb2xfdXJsZ2xvYi5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3VybGdsb2IuYw0KK3Rvb2xfdXRpbGQub2JqOiB0b29sX3V0aWwuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF91dGlsLmMNCit0b29sX3Ztc2Qub2JqOiB0b29sX3Ztcy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3Ztcy5jDQordG9vbF93cml0ZWVudmQub2JqOiB0b29sX3dyaXRlZW52LmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfd3JpdGVlbnYuYw0KK3Rvb2xfd3JpdGVvdXRkLm9iajogdG9vbF93cml0ZW91dC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3dyaXRlb3V0LmMNCit0b29sX3hhdHRyZC5vYmo6IHRvb2xfeGF0dHIuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF94YXR0ci5jDQorY3VybGQucmVzIDogY3VybC5yYw0KKwkkKFJDRCkgJChSRVNGTEFHUykgL0ZvIiRAIiBjdXJsLnJjDQorDQorY2xlYW46DQorCUAtZXJhc2UgJChQUk9HUkFNX05BTUUpIDI+IE5VTA0KKwlALWVyYXNlICQoUkVMRUFTRV9PQkpTKSAyPiBOVUwNCisJQC1lcmFzZSAkKERFQlVHX09CSlMpIDI+IE5VTA0KKwlALWVyYXNlICouaWRiIDI+IE5VTA0KKwlALWVyYXNlICoucGRiIDI+IE5VTA0KKwlALWVyYXNlICoucGNoIDI+IE5VTA0KKwlALWVyYXNlICouaWxrIDI+IE5VTA0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy9NYWtlZmlsZS52YzggYi9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUudmM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZTI4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUudmM4CkBAIC0wLDAgKzEsNTE1IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfDQorIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfA0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wNCisjDQorIyBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoDQorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zDQorIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLg0KKyMNCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbA0KKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIw0KKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisjIEFsbCBmaWxlcyBpbiB0aGUgTWFrZWZpbGUudmMqIHNlcmllcyBhcmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUNCisjIG9uZSBtYWRlIGZvciBNU1ZDIHZlcnNpb24gNi4gQWxhcywgaWYgeW91IHdhbnQgdG8gZG8gY2hhbmdlcyB0byBhbnkgb2YgdGhlDQorIyBmaWVscyBhbmQgc2VuZCBiYWNrIHRvIHRoZSBwcm9qZWN0LCBlZGl0IHRoZSB2ZXJzaW9uIHNpeCwgbWFrZSB5b3VyIGRpZmYgYW5kDQorIyBtYWlsIGN1cmwtdXNlcnMuDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMNCisjIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgY3VybC5leGUgd2l0aCBNU1ZDOA0KKyMjIFVzZTogbm1ha2UgLWYgbWFrZWZpbGUudmM2IFtyZWxlYXNlIHwgZGVidWddIFtDRkc9cmVsZWFzZS1zc2xdDQorIyMgICAgICAoZGVmYXVsdCBpcyByZWxlYXNlKQ0KKyMjICJubWFrZSAtZiBtYWtlZmlsZS52YzYgQ0ZHPXJlbGVhc2Utc3NsIiBzdGF0aWNhbGx5IGxpbmtzIE9wZW5TU0wNCisjIyBpbnRvIGN1cmwuZXhlIHByb2R1Y2luZyBhIHN0YW5kYWxvbmUgU1NMLWVuYWJsZWQgZXhlY3V0YWJsZS4NCisjIw0KKyMNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUFJPR1JBTV9OQU1FID0gY3VybC5leGUNCisNCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIFZlcmlmeSB0aGF0IGN1cnJlbnQgc3ViZGlyIGlzIGN1cmwncyAnc3JjJw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyFJRiAhIEVYSVNUKC5cdG9vbF9tYWluLmMpDQorISAgTUVTU0FHRSBDYW4gbm90IHByb2Nlc3MgdGhpcyBtYWtlZmlsZSBmcm9tIG91dHNpZGUgb2YgY3VybCdzICdzcmMnIHN1YmRpcmVjdG9yeS4NCishICBNRVNTQUdFIENoYW5nZSB0byBjdXJsJ3MgJ3NyYycgc3ViZGlyZWN0b3J5LCBhbmQgdHJ5IGFnYWluLg0KKyEgIEVSUk9SICAgU2VlIHByZXZpb3VzIG1lc3NhZ2UuDQorIUVORElGDQorDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIE1ha2VmaWxlLm1zdmMubmFtZXMgcHJvdmlkZXMgbGliY3VybCBmaWxlIG5hbWVzDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCishSU5DTFVERSAuLlxNYWtlZmlsZS5tc3ZjLm5hbWVzDQorDQorDQorDQorIUlGTkRFRiBPUEVOU1NMX1BBVEgNCitPUEVOU1NMX1BBVEggPSAuLi8uLi9vcGVuc3NsLTAuOS44cg0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgWkxJQl9QQVRIDQorWkxJQl9QQVRIID0gLi4vLi4vemxpYi0xLjIuNQ0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgTUFDSElORQ0KK01BQ0hJTkUgID0gWDg2DQorIUVORElGDQorDQorIyBVU0VfV0lORE9XU19TU1BJIHVzZXMgd2luZG93cyBsaWJyYXJpZXMgdG8gYWxsb3cgTlRMTSBhdXRoZW50aWNhdGlvbg0KKyMgd2l0aG91dCBhbiBvcGVuc3NsIGluc3RhbGxhdGlvbiBhbmQgb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGF1dGhlbnRpY2F0ZQ0KKyMgdXNpbmcgdGhlICJjdXJyZW50IGxvZ2dlZCBpbiB1c2VyIi4gU2luY2UgYXQgbGVhc3Qgd2l0aCBNU1ZDOCB0aGUgc3NwaS5oDQorIyBoZWFkZXIgaXMgYnJva2VuIGl0IGlzIGVpdGhlciByZXF1aXJlZCB0byBpbnN0YWxsIHRoZSBXaW5kb3dzIFNESywNCisjIG9yIHRvIGZpeCBzc3BpLmggd2l0aCBhZGRpbmcgdGhpcyBkZWZpbmUgYXQgdGhlIGJlZ2lubmluZyBvZiBzc3BpLmg6DQorIyAjZGVmaW5lIEZyZWVDcmVkZW50aWFsSGFuZGxlIEZyZWVDcmVkZW50aWFsc0hhbmRsZQ0KKyMNCisjIElmLCBmb3Igc29tZSByZWFzb24gdGhlIFdpbmRvd3MgU0RLIGlzIGluc3RhbGxlZCBidXQgbm90IGluc3RhbGxlZA0KKyMgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24sIHlvdSBjYW4gc3BlY2lmeSBXSU5ET1dTX1NES19QQVRILg0KKyMgSXQgY2FuIGJlIGRvd25sb2FkZWQgZnJvbToNCisjIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9tc2Rvd25sb2FkL3BsYXRmb3Jtc2RrL3Nka3VwZGF0ZS8NCisNCisjIFdJTkRPV1NfU1NQSSA9IDENCisNCishSUZERUYgV0lORE9XU19TU1BJDQorIUlGTkRFRiBXSU5ET1dTX1NES19QQVRIDQorV0lORE9XU19TREtfUEFUSCA9ICIkKFBST0dSQU1GSUxFUylcTWljcm9zb2Z0IFNESyINCishRU5ESUYNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMjIE5vdGhpbmcgbW9yZSB0byBkbyBiZWxvdyB0aGlzIGxpbmUhDQorWkxJQl9DRkxBR1MgICA9IC9ESEFWRV9aTElCX0ggL0RIQVZFX1pMSUIgL0RIQVZFX0xJQlogL0kgIiQoWkxJQl9QQVRIKSINCitaTElCX0xGTEFHUyAgID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitaTElCX0xJQlMgICAgID0gemxpYi5saWINCitaTElCX0lNUF9MSUJTID0gemRsbC5saWINCisNCitTU0xfQ0ZMQUdTICAgICA9IC9EVVNFX1NTTEVBWQ0KK1NTTF9MRkxBR1MgICAgID0gL0xJQlBBVEg6IiQoT1BFTlNTTF9QQVRIKS9vdXQzMiINCitTU0xfSU1QX0xGTEFHUyA9IC9MSUJQQVRIOiIkKE9QRU5TU0xfUEFUSCkvb3V0MzJkbGwiDQorU1NMX0xJQlMgICAgICAgPSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliIGdkaTMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYg0KKw0KKyMgUnVudGltZSBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24NCitSVExJQiAgID0gL01EDQorUlRMSUJEICA9IC9NRGQNCisNCishSUYgIiQoUlRMSUJDRkcpIiA9PSAic3RhdGljIg0KK1JUTElCICA9IC9NVA0KK1JUTElCRCA9IC9NVGQNCishRU5ESUYNCisNCisjIyBSZWxlYXNlDQorQ0NSICAgPSBjbC5leGUgJChSVExJQikgL08yIC9ETkRFQlVHDQorTElOS1IgPSBsaW5rLmV4ZSAvaW5jcmVtZW50YWw6bm8gL2xpYnBhdGg6Ii4uL2xpYiINCitSQ1IgICA9IHJjLmV4ZSAvZERFQlVHQlVJTEQ9MA0KKw0KKyMjIERlYnVnDQorQ0NEICAgPSBjbC5leGUgJChSVExJQkQpIC9HbSAvWkkgL09kIC9EX0RFQlVHIC9SVEMxDQorTElOS0QgPSBsaW5rLmV4ZSAvaW5jcmVtZW50YWw6eWVzIC9kZWJ1ZyAvbGlicGF0aDoiLi4vbGliIg0KK1JDRCAgID0gcmMuZXhlIC9kREVCVUdCVUlMRD0xDQorDQorQ0ZMQUdTICAgPSAvSS4uL2xpYiAvSS4uL2luY2x1ZGUgL25vbG9nbyAvVzMgL0VIc2MgL0RXSU4zMiAvRkQgL2MgL0RfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OPTENCitMRkxBR1MgICA9IC9ub2xvZ28gL291dDokKFBST0dSQU1fTkFNRSkgL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOiQoTUFDSElORSkNCitSRVNGTEFHUyA9IC9pLi4vaW5jbHVkZQ0KKw0KKyMgVGhpcyBtYW5pZmVzdCB0aGluZyBpcyBmb3IgVkM4LCBlbmFibGVkIGJ5IHRoZSBtYWtldGd6IHNjcmlwdCB0aGF0DQorIyBidWlsZHMgdGhlIFZDOCB2ZXJzaW9uIG9mIHRoaXMgbWFrZWZpbGUuIExlZnQgY29tbWVudGVkIG91dCBpbiB0aGUgVkM4DQorIyB2ZXJzaW9uIQ0KKyNNQU5JRkVTVFRPT0wgPSBtdCAtbWFuaWZlc3QgJChQUk9HUkFNX05BTUUpLm1hbmlmZXN0IC1vdXRwdXRyZXNvdXJjZTokKFBST0dSQU1fTkFNRSk7MQ0KKw0KKyFJRkRFRiBXSU5ET1dTX1NTUEkNCitDRkxBR1MgPSAkKENGTEFHUykgL0RVU0VfV0lORE9XU19TU1BJIC9JJChXSU5ET1dTX1NES19QQVRIKVxpbmNsdWRlDQorIUVORElGDQorDQorUkVMRUFTRV9PQkpTPSBcDQorCWh1Z2VoZWxwci5vYmogXA0KKwlub25ibG9ja3Iub2JqIFwNCisJcmF3c3Ryci5vYmogXA0KKwlzdHJ0b29mZnRyLm9iaiBcDQorCXRvb2xfYmlubW9kZXIub2JqIFwNCisJdG9vbF9ibmFtZXIub2JqIFwNCisJdG9vbF9jYl9kYmdyLm9iaiBcDQorCXRvb2xfY2JfaGRyci5vYmogXA0KKwl0b29sX2NiX3ByZ3Iub2JqIFwNCisJdG9vbF9jYl9yZWFyLm9iaiBcDQorCXRvb2xfY2Jfc2Vlci5vYmogXA0KKwl0b29sX2NiX3dydHIub2JqIFwNCisJdG9vbF9jZmdhYmxlci5vYmogXA0KKwl0b29sX2NvbnZlcnRyLm9iaiBcDQorCXRvb2xfZGlyaGllci5vYmogXA0KKwl0b29sX2Rvc3dpbnIub2JqIFwNCisJdG9vbF9lYXN5c3Jjci5vYmogXA0KKwl0b29sX2Zvcm1wYXJzZXIub2JqIFwNCisJdG9vbF9nZXRwYXJhbXIub2JqIFwNCisJdG9vbF9nZXRwYXNzci5vYmogXA0KKwl0b29sX2hlbHByLm9iaiBcDQorCXRvb2xfaGVscGVyc3Iub2JqIFwNCisJdG9vbF9ob21lZGlyci5vYmogXA0KKwl0b29sX2xpYmluZm9yLm9iaiBcDQorCXRvb2xfbWFpbnIub2JqIFwNCisJdG9vbF9tZmlsZXNyLm9iaiBcDQorCXRvb2xfbXNnc3Iub2JqIFwNCisJdG9vbF9vcGVyYXRlci5vYmogXA0KKwl0b29sX29wZXJobHByLm9iaiBcDQorCXRvb2xfcGFueWtleXIub2JqIFwNCisJdG9vbF9wYXJhbWhscHIub2JqIFwNCisJdG9vbF9wYXJzZWNmZ3Iub2JqIFwNCisJdG9vbF9zZXRvcHRyLm9iaiBcDQorCXRvb2xfc2xlZXByLm9iaiBcDQorCXRvb2xfdXJsZ2xvYnIub2JqIFwNCisJdG9vbF91dGlsci5vYmogXA0KKwl0b29sX3Ztc3Iub2JqIFwNCisJdG9vbF93cml0ZWVudnIub2JqIFwNCisJdG9vbF93cml0ZW91dHIub2JqIFwNCisJdG9vbF94YXR0cnIub2JqIFwNCisJY3VybHIucmVzDQorDQorREVCVUdfT0JKUz0gXA0KKwlodWdlaGVscGQub2JqIFwNCisJbm9uYmxvY2tkLm9iaiBcDQorCXJhd3N0cmQub2JqIFwNCisJc3RydG9vZmZ0ZC5vYmogXA0KKwl0b29sX2Jpbm1vZGVkLm9iaiBcDQorCXRvb2xfYm5hbWVkLm9iaiBcDQorCXRvb2xfY2JfZGJnZC5vYmogXA0KKwl0b29sX2NiX2hkcmQub2JqIFwNCisJdG9vbF9jYl9wcmdkLm9iaiBcDQorCXRvb2xfY2JfcmVhZC5vYmogXA0KKwl0b29sX2NiX3NlZWQub2JqIFwNCisJdG9vbF9jYl93cnRkLm9iaiBcDQorCXRvb2xfY2ZnYWJsZWQub2JqIFwNCisJdG9vbF9jb252ZXJ0ZC5vYmogXA0KKwl0b29sX2RpcmhpZWQub2JqIFwNCisJdG9vbF9kb3N3aW5kLm9iaiBcDQorCXRvb2xfZWFzeXNyY2Qub2JqIFwNCisJdG9vbF9mb3JtcGFyc2VkLm9iaiBcDQorCXRvb2xfZ2V0cGFyYW1kLm9iaiBcDQorCXRvb2xfZ2V0cGFzc2Qub2JqIFwNCisJdG9vbF9oZWxwZC5vYmogXA0KKwl0b29sX2hlbHBlcnNkLm9iaiBcDQorCXRvb2xfaG9tZWRpcmQub2JqIFwNCisJdG9vbF9saWJpbmZvZC5vYmogXA0KKwl0b29sX21haW5kLm9iaiBcDQorCXRvb2xfbWZpbGVzZC5vYmogXA0KKwl0b29sX21zZ3NkLm9iaiBcDQorCXRvb2xfb3BlcmF0ZWQub2JqIFwNCisJdG9vbF9vcGVyaGxwZC5vYmogXA0KKwl0b29sX3BhbnlrZXlkLm9iaiBcDQorCXRvb2xfcGFyYW1obHBkLm9iaiBcDQorCXRvb2xfcGFyc2VjZmdkLm9iaiBcDQorCXRvb2xfc2V0b3B0ZC5vYmogXA0KKwl0b29sX3NsZWVwZC5vYmogXA0KKwl0b29sX3VybGdsb2JkLm9iaiBcDQorCXRvb2xfdXRpbGQub2JqIFwNCisJdG9vbF92bXNkLm9iaiBcDQorCXRvb2xfd3JpdGVlbnZkLm9iaiBcDQorCXRvb2xfd3JpdGVvdXRkLm9iaiBcDQorCXRvb2xfeGF0dHJkLm9iaiBcDQorCWN1cmxkLnJlcw0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIElmIENGRyBub3Qgc3BlY2lmaWVkLCB1c2Ugc3RhdGljIGxpYnMNCisNCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAvRENVUkxfU1RBVElDTElCDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtZGxsIg0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX0lNUF9MSUJfUkVMKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX0lNUF9MSUJfREJHKQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCB6bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXpsaWIiDQorQ0ZMQUdTICAgICAgICAgPSAkKENGTEFHUykgJChaTElCX0NGTEFHUykgL0RDVVJMX1NUQVRJQ0xJQg0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKSAkKFpMSUJfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykgJChaTElCX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChaTElCX0xGTEFHUykNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbCINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFNTTF9DRkxBR1MpIC9EQ1VSTF9TVEFUSUNMSUINCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkgJChTU0xfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykgJChTU0xfTElCUykNCitMRkxBR1MgICAgICAgICA9ICQoTEZMQUdTKSAkKFNTTF9MRkxBR1MpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtc3NsLWRsbCINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFNTTF9DRkxBR1MpDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfSU1QX0xJQl9SRUwpICQoU1NMX0xJQlMpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfSU1QX0xJQl9EQkcpICQoU1NMX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChTU0xfSU1QX0xGTEFHUykNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsIGFuZCB6bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC16bGliIg0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpICQoU1NMX0NGTEFHUykgJChaTElCX0NGTEFHUykgL0RDVVJMX1NUQVRJQ0xJQg0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKSAkKFNTTF9MSUJTKSAkKFpMSUJfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykgJChTU0xfTElCUykgJChaTElCX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChTU0xfTEZMQUdTKSAkKFpMSUJfTEZMQUdTKQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1zc2wtZGxsIg0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpICQoU1NMX0NGTEFHUykgL0RDVVJMX1NUQVRJQ0xJQg0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKSAkKFNTTF9MSUJTKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKSAkKFNTTF9MSUJTKQ0KK0xGTEFHUyAgICAgICAgID0gJChMRkxBR1MpICQoU1NMX0lNUF9MRkxBR1MpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS16bGliLWRsbCINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFpMSUJfQ0ZMQUdTKSAvRENVUkxfU1RBVElDTElCDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpICQoWkxJQl9JTVBfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykgJChaTElCX0lNUF9MSUJTKQ0KK0xGTEFHUyAgICAgICAgID0gJChMRkxBR1MpICQoWkxJQl9MRkxBR1MpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtZGxsLXpsaWItZGxsIg0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpICQoWkxJQl9DRkxBR1MpDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfSU1QX0xJQl9SRUwpICQoWkxJQl9JTVBfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9JTVBfTElCX0RCRykgJChaTElCX0lNUF9MSUJTKQ0KK0xGTEFHUyAgICAgICAgID0gJChMRkxBR1MpICQoWkxJQl9MRkxBR1MpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLWRsbC16bGliLWRsbCINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFNTTF9DRkxBR1MpICQoWkxJQl9DRkxBR1MpIC9EQ1VSTF9TVEFUSUNMSUINCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkgJChTU0xfTElCUykgJChaTElCX0lNUF9MSUJTKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKSAkKFNTTF9MSUJTKSAkKFpMSUJfSU1QX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChTU0xfSU1QX0xGTEFHUykgJChaTElCX0xGTEFHUykNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGwiDQorQ0ZMQUdTICAgICAgICAgPSAkKENGTEFHUykgJChTU0xfQ0ZMQUdTKSAkKFpMSUJfQ0ZMQUdTKQ0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX0lNUF9MSUJfUkVMKSAkKFNTTF9MSUJTKSAkKFpMSUJfSU1QX0xJQlMpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfSU1QX0xJQl9EQkcpICQoU1NMX0xJQlMpICQoWkxJQl9JTVBfTElCUykNCitMRkxBR1MgICAgICAgICA9ICQoTEZMQUdTKSAkKFNTTF9JTVBfTEZMQUdTKSAkKFpMSUJfTEZMQUdTKQ0KKyFFTkRJRg0KKw0KKw0KK0xJTktMSUJTICAgICAgID0gJChMSU5LTElCUykgd3MyXzMyLmxpYiBidWZmZXJvdmVyZmxvd3UubGliIHdsZGFwMzIubGliDQorTElOS0xJQlNfREVCVUcgPSAkKExJTktMSUJTX0RFQlVHKSB3czJfMzIubGliIGJ1ZmZlcm92ZXJmbG93dS5saWIgd2xkYXAzMi5saWINCisNCithbGwgOiByZWxlYXNlDQorDQorcmVsZWFzZTogJChSRUxFQVNFX09CSlMpDQorCSQoTElOS1IpICQoTEZMQUdTKSAkKExJTktMSUJTKSAkKFJFTEVBU0VfT0JKUykNCisgICAgICAgICQoTUFOSUZFU1RUT09MKQ0KKw0KK2RlYnVnOiAkKERFQlVHX09CSlMpDQorCSQoTElOS0QpICQoTEZMQUdTKSAkKExJTktMSUJTX0RFQlVHKSAkKERFQlVHX09CSlMpDQorICAgICAgICAkKE1BTklGRVNUVE9PTCkNCisNCisjIyBSZWxlYXNlDQoraHVnZWhlbHByLm9iajogaHVnZWhlbHAuYw0KKwkkKENDUikgJChDRkxBR1MpIC9abTIwMCAvRm8iJEAiIGh1Z2VoZWxwLmMNCitub25ibG9ja3Iub2JqOiAuLi9saWIvbm9uYmxvY2suYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgLi4vbGliL25vbmJsb2NrLmMNCityYXdzdHJyLm9iajogLi4vbGliL3Jhd3N0ci5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiAuLi9saWIvcmF3c3RyLmMNCitzdHJ0b29mZnRyLm9iajogLi4vbGliL3N0cnRvb2ZmdC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiAuLi9saWIvc3RydG9vZmZ0LmMNCit0b29sX2Jpbm1vZGVyLm9iajogdG9vbF9iaW5tb2RlLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfYmlubW9kZS5jDQordG9vbF9ibmFtZXIub2JqOiB0b29sX2JuYW1lLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfYm5hbWUuYw0KK3Rvb2xfY2JfZGJnci5vYmo6IHRvb2xfY2JfZGJnLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2JfZGJnLmMNCit0b29sX2NiX2hkcnIub2JqOiB0b29sX2NiX2hkci5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX2hkci5jDQordG9vbF9jYl9wcmdyLm9iajogdG9vbF9jYl9wcmcuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9wcmcuYw0KK3Rvb2xfY2JfcmVhci5vYmo6IHRvb2xfY2JfcmVhLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2JfcmVhLmMNCit0b29sX2NiX3NlZXIub2JqOiB0b29sX2NiX3NlZS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX3NlZS5jDQordG9vbF9jYl93cnRyLm9iajogdG9vbF9jYl93cnQuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl93cnQuYw0KK3Rvb2xfY2ZnYWJsZXIub2JqOiB0b29sX2NmZ2FibGUuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jZmdhYmxlLmMNCit0b29sX2NvbnZlcnRyLm9iajogdG9vbF9jb252ZXJ0LmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY29udmVydC5jDQordG9vbF9kaXJoaWVyLm9iajogdG9vbF9kaXJoaWUuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9kaXJoaWUuYw0KK3Rvb2xfZG9zd2luci5vYmo6IHRvb2xfZG9zd2luLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZG9zd2luLmMNCit0b29sX2Vhc3lzcmNyLm9iajogdG9vbF9lYXN5c3JjLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZWFzeXNyYy5jDQordG9vbF9mb3JtcGFyc2VyLm9iajogdG9vbF9mb3JtcGFyc2UuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9mb3JtcGFyc2UuYw0KK3Rvb2xfZ2V0cGFyYW1yLm9iajogdG9vbF9nZXRwYXJhbS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2dldHBhcmFtLmMNCit0b29sX2dldHBhc3NyLm9iajogdG9vbF9nZXRwYXNzLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZ2V0cGFzcy5jDQordG9vbF9oZWxwci5vYmo6IHRvb2xfaGVscC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2hlbHAuYw0KK3Rvb2xfaGVscGVyc3Iub2JqOiB0b29sX2hlbHBlcnMuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9oZWxwZXJzLmMNCit0b29sX2hvbWVkaXJyLm9iajogdG9vbF9ob21lZGlyLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfaG9tZWRpci5jDQordG9vbF9saWJpbmZvci5vYmo6IHRvb2xfbGliaW5mby5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2xpYmluZm8uYw0KK3Rvb2xfbWFpbnIub2JqOiB0b29sX21haW4uYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9tYWluLmMNCit0b29sX21maWxlc3Iub2JqOiB0b29sX21maWxlcy5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX21maWxlcy5jDQordG9vbF9tc2dzci5vYmo6IHRvb2xfbXNncy5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX21zZ3MuYw0KK3Rvb2xfb3BlcmF0ZXIub2JqOiB0b29sX29wZXJhdGUuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9vcGVyYXRlLmMNCit0b29sX29wZXJobHByLm9iajogdG9vbF9vcGVyaGxwLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfb3BlcmhscC5jDQordG9vbF9wYW55a2V5ci5vYmo6IHRvb2xfcGFueWtleS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3BhbnlrZXkuYw0KK3Rvb2xfcGFyYW1obHByLm9iajogdG9vbF9wYXJhbWhscC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3BhcmFtaGxwLmMNCit0b29sX3BhcnNlY2Znci5vYmo6IHRvb2xfcGFyc2VjZmcuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9wYXJzZWNmZy5jDQordG9vbF9zZXRvcHRyLm9iajogdG9vbF9zZXRvcHQuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9zZXRvcHQuYw0KK3Rvb2xfc2xlZXByLm9iajogdG9vbF9zbGVlcC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3NsZWVwLmMNCit0b29sX3VybGdsb2JyLm9iajogdG9vbF91cmxnbG9iLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfdXJsZ2xvYi5jDQordG9vbF91dGlsci5vYmo6IHRvb2xfdXRpbC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3V0aWwuYw0KK3Rvb2xfdm1zci5vYmo6IHRvb2xfdm1zLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfdm1zLmMNCit0b29sX3dyaXRlZW52ci5vYmo6IHRvb2xfd3JpdGVlbnYuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF93cml0ZWVudi5jDQordG9vbF93cml0ZW91dHIub2JqOiB0b29sX3dyaXRlb3V0LmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfd3JpdGVvdXQuYw0KK3Rvb2xfeGF0dHJyLm9iajogdG9vbF94YXR0ci5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3hhdHRyLmMNCitjdXJsci5yZXMgOiBjdXJsLnJjDQorCSQoUkNSKSAkKFJFU0ZMQUdTKSAvRm8iJEAiIGN1cmwucmMNCisNCisjIyBEZWJ1Zw0KK2h1Z2VoZWxwZC5vYmo6IGh1Z2VoZWxwLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvWm0yMDAgL0ZvIiRAIiBodWdlaGVscC5jDQorbm9uYmxvY2tkLm9iajogLi4vbGliL25vbmJsb2NrLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9ub25ibG9jay5jDQorcmF3c3RyZC5vYmo6IC4uL2xpYi9yYXdzdHIuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgLi4vbGliL3Jhd3N0ci5jDQorc3RydG9vZmZ0ZC5vYmo6IC4uL2xpYi9zdHJ0b29mZnQuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgLi4vbGliL3N0cnRvb2ZmdC5jDQordG9vbF9iaW5tb2RlZC5vYmo6IHRvb2xfYmlubW9kZS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2Jpbm1vZGUuYw0KK3Rvb2xfYm5hbWVkLm9iajogdG9vbF9ibmFtZS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2JuYW1lLmMNCit0b29sX2NiX2RiZ2Qub2JqOiB0b29sX2NiX2RiZy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX2RiZy5jDQordG9vbF9jYl9oZHJkLm9iajogdG9vbF9jYl9oZHIuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9oZHIuYw0KK3Rvb2xfY2JfcHJnZC5vYmo6IHRvb2xfY2JfcHJnLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2JfcHJnLmMNCit0b29sX2NiX3JlYWQub2JqOiB0b29sX2NiX3JlYS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX3JlYS5jDQordG9vbF9jYl9zZWVkLm9iajogdG9vbF9jYl9zZWUuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9zZWUuYw0KK3Rvb2xfY2Jfd3J0ZC5vYmo6IHRvb2xfY2Jfd3J0LmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2Jfd3J0LmMNCit0b29sX2NmZ2FibGVkLm9iajogdG9vbF9jZmdhYmxlLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2ZnYWJsZS5jDQordG9vbF9jb252ZXJ0ZC5vYmo6IHRvb2xfY29udmVydC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NvbnZlcnQuYw0KK3Rvb2xfZGlyaGllZC5vYmo6IHRvb2xfZGlyaGllLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZGlyaGllLmMNCit0b29sX2Rvc3dpbmQub2JqOiB0b29sX2Rvc3dpbi5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2Rvc3dpbi5jDQordG9vbF9lYXN5c3JjZC5vYmo6IHRvb2xfZWFzeXNyYy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2Vhc3lzcmMuYw0KK3Rvb2xfZm9ybXBhcnNlZC5vYmo6IHRvb2xfZm9ybXBhcnNlLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZm9ybXBhcnNlLmMNCit0b29sX2dldHBhcmFtZC5vYmo6IHRvb2xfZ2V0cGFyYW0uYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9nZXRwYXJhbS5jDQordG9vbF9nZXRwYXNzZC5vYmo6IHRvb2xfZ2V0cGFzcy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2dldHBhc3MuYw0KK3Rvb2xfaGVscGQub2JqOiB0b29sX2hlbHAuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9oZWxwLmMNCit0b29sX2hlbHBlcnNkLm9iajogdG9vbF9oZWxwZXJzLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfaGVscGVycy5jDQordG9vbF9ob21lZGlyZC5vYmo6IHRvb2xfaG9tZWRpci5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2hvbWVkaXIuYw0KK3Rvb2xfbGliaW5mb2Qub2JqOiB0b29sX2xpYmluZm8uYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9saWJpbmZvLmMNCit0b29sX21haW5kLm9iajogdG9vbF9tYWluLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfbWFpbi5jDQordG9vbF9tZmlsZXNkLm9iajogdG9vbF9tZmlsZXMuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9tZmlsZXMuYw0KK3Rvb2xfbXNnc2Qub2JqOiB0b29sX21zZ3MuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9tc2dzLmMNCit0b29sX29wZXJhdGVkLm9iajogdG9vbF9vcGVyYXRlLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfb3BlcmF0ZS5jDQordG9vbF9vcGVyaGxwZC5vYmo6IHRvb2xfb3BlcmhscC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX29wZXJobHAuYw0KK3Rvb2xfcGFueWtleWQub2JqOiB0b29sX3BhbnlrZXkuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9wYW55a2V5LmMNCit0b29sX3BhcmFtaGxwZC5vYmo6IHRvb2xfcGFyYW1obHAuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9wYXJhbWhscC5jDQordG9vbF9wYXJzZWNmZ2Qub2JqOiB0b29sX3BhcnNlY2ZnLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfcGFyc2VjZmcuYw0KK3Rvb2xfc2V0b3B0ZC5vYmo6IHRvb2xfc2V0b3B0LmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfc2V0b3B0LmMNCit0b29sX3NsZWVwZC5vYmo6IHRvb2xfc2xlZXAuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9zbGVlcC5jDQordG9vbF91cmxnbG9iZC5vYmo6IHRvb2xfdXJsZ2xvYi5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3VybGdsb2IuYw0KK3Rvb2xfdXRpbGQub2JqOiB0b29sX3V0aWwuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF91dGlsLmMNCit0b29sX3Ztc2Qub2JqOiB0b29sX3Ztcy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3Ztcy5jDQordG9vbF93cml0ZWVudmQub2JqOiB0b29sX3dyaXRlZW52LmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfd3JpdGVlbnYuYw0KK3Rvb2xfd3JpdGVvdXRkLm9iajogdG9vbF93cml0ZW91dC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3dyaXRlb3V0LmMNCit0b29sX3hhdHRyZC5vYmo6IHRvb2xfeGF0dHIuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF94YXR0ci5jDQorY3VybGQucmVzIDogY3VybC5yYw0KKwkkKFJDRCkgJChSRVNGTEFHUykgL0ZvIiRAIiBjdXJsLnJjDQorDQorY2xlYW46DQorCUAtZXJhc2UgJChQUk9HUkFNX05BTUUpIDI+IE5VTA0KKwlALWVyYXNlICQoUkVMRUFTRV9PQkpTKSAyPiBOVUwNCisJQC1lcmFzZSAkKERFQlVHX09CSlMpIDI+IE5VTA0KKwlALWVyYXNlICouaWRiIDI+IE5VTA0KKwlALWVyYXNlICoucGRiIDI+IE5VTA0KKwlALWVyYXNlICoucGNoIDI+IE5VTA0KKwlALWVyYXNlICouaWxrIDI+IE5VTA0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy9NYWtlZmlsZS52YzkgYi9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUudmM5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZTE4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvTWFrZWZpbGUudmM5CkBAIC0wLDAgKzEsNTE1IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfDQorIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfA0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwNCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fDQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wNCisjDQorIyBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoDQorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zDQorIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLg0KKyMNCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbA0KKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLg0KKyMNCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIw0KKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisjIEFsbCBmaWxlcyBpbiB0aGUgTWFrZWZpbGUudmMqIHNlcmllcyBhcmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUNCisjIG9uZSBtYWRlIGZvciBNU1ZDIHZlcnNpb24gNi4gQWxhcywgaWYgeW91IHdhbnQgdG8gZG8gY2hhbmdlcyB0byBhbnkgb2YgdGhlDQorIyBmaWVscyBhbmQgc2VuZCBiYWNrIHRvIHRoZSBwcm9qZWN0LCBlZGl0IHRoZSB2ZXJzaW9uIHNpeCwgbWFrZSB5b3VyIGRpZmYgYW5kDQorIyBtYWlsIGN1cmwtdXNlcnMuDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMNCisjIyBNYWtlZmlsZSBmb3IgYnVpbGRpbmcgY3VybC5leGUgd2l0aCBNU1ZDOQ0KKyMjIFVzZTogbm1ha2UgLWYgbWFrZWZpbGUudmM5IFtyZWxlYXNlIHwgZGVidWddIFtDRkc9cmVsZWFzZS1zc2xdDQorIyMgICAgICAoZGVmYXVsdCBpcyByZWxlYXNlKQ0KKyMjICJubWFrZSAtZiBtYWtlZmlsZS52YzkgQ0ZHPXJlbGVhc2Utc3NsIiBzdGF0aWNhbGx5IGxpbmtzIE9wZW5TU0wNCisjIyBpbnRvIGN1cmwuZXhlIHByb2R1Y2luZyBhIHN0YW5kYWxvbmUgU1NMLWVuYWJsZWQgZXhlY3V0YWJsZS4NCisjIw0KKyMNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUFJPR1JBTV9OQU1FID0gY3VybC5leGUNCisNCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIFZlcmlmeSB0aGF0IGN1cnJlbnQgc3ViZGlyIGlzIGN1cmwncyAnc3JjJw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyFJRiAhIEVYSVNUKC5cdG9vbF9tYWluLmMpDQorISAgTUVTU0FHRSBDYW4gbm90IHByb2Nlc3MgdGhpcyBtYWtlZmlsZSBmcm9tIG91dHNpZGUgb2YgY3VybCdzICdzcmMnIHN1YmRpcmVjdG9yeS4NCishICBNRVNTQUdFIENoYW5nZSB0byBjdXJsJ3MgJ3NyYycgc3ViZGlyZWN0b3J5LCBhbmQgdHJ5IGFnYWluLg0KKyEgIEVSUk9SICAgU2VlIHByZXZpb3VzIG1lc3NhZ2UuDQorIUVORElGDQorDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIE1ha2VmaWxlLm1zdmMubmFtZXMgcHJvdmlkZXMgbGliY3VybCBmaWxlIG5hbWVzDQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCishSU5DTFVERSAuLlxNYWtlZmlsZS5tc3ZjLm5hbWVzDQorDQorDQorDQorIUlGTkRFRiBPUEVOU1NMX1BBVEgNCitPUEVOU1NMX1BBVEggPSAuLi8uLi9vcGVuc3NsLTAuOS44cg0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgWkxJQl9QQVRIDQorWkxJQl9QQVRIID0gLi4vLi4vemxpYi0xLjIuNQ0KKyFFTkRJRg0KKw0KKyFJRk5ERUYgTUFDSElORQ0KK01BQ0hJTkUgID0gWDg2DQorIUVORElGDQorDQorIyBVU0VfV0lORE9XU19TU1BJIHVzZXMgd2luZG93cyBsaWJyYXJpZXMgdG8gYWxsb3cgTlRMTSBhdXRoZW50aWNhdGlvbg0KKyMgd2l0aG91dCBhbiBvcGVuc3NsIGluc3RhbGxhdGlvbiBhbmQgb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGF1dGhlbnRpY2F0ZQ0KKyMgdXNpbmcgdGhlICJjdXJyZW50IGxvZ2dlZCBpbiB1c2VyIi4gU2luY2UgYXQgbGVhc3Qgd2l0aCBNU1ZDOSB0aGUgc3NwaS5oDQorIyBoZWFkZXIgaXMgYnJva2VuIGl0IGlzIGVpdGhlciByZXF1aXJlZCB0byBpbnN0YWxsIHRoZSBXaW5kb3dzIFNESywNCisjIG9yIHRvIGZpeCBzc3BpLmggd2l0aCBhZGRpbmcgdGhpcyBkZWZpbmUgYXQgdGhlIGJlZ2lubmluZyBvZiBzc3BpLmg6DQorIyAjZGVmaW5lIEZyZWVDcmVkZW50aWFsSGFuZGxlIEZyZWVDcmVkZW50aWFsc0hhbmRsZQ0KKyMNCisjIElmLCBmb3Igc29tZSByZWFzb24gdGhlIFdpbmRvd3MgU0RLIGlzIGluc3RhbGxlZCBidXQgbm90IGluc3RhbGxlZA0KKyMgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24sIHlvdSBjYW4gc3BlY2lmeSBXSU5ET1dTX1NES19QQVRILg0KKyMgSXQgY2FuIGJlIGRvd25sb2FkZWQgZnJvbToNCisjIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9tc2Rvd25sb2FkL3BsYXRmb3Jtc2RrL3Nka3VwZGF0ZS8NCisNCisjIFdJTkRPV1NfU1NQSSA9IDENCisNCishSUZERUYgV0lORE9XU19TU1BJDQorIUlGTkRFRiBXSU5ET1dTX1NES19QQVRIDQorV0lORE9XU19TREtfUEFUSCA9ICIkKFBST0dSQU1GSUxFUylcTWljcm9zb2Z0IFNESyINCishRU5ESUYNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMjIE5vdGhpbmcgbW9yZSB0byBkbyBiZWxvdyB0aGlzIGxpbmUhDQorWkxJQl9DRkxBR1MgICA9IC9ESEFWRV9aTElCX0ggL0RIQVZFX1pMSUIgL0RIQVZFX0xJQlogL0kgIiQoWkxJQl9QQVRIKSINCitaTElCX0xGTEFHUyAgID0gIi9MSUJQQVRIOiQoWkxJQl9QQVRIKSINCitaTElCX0xJQlMgICAgID0gemxpYi5saWINCitaTElCX0lNUF9MSUJTID0gemRsbC5saWINCisNCitTU0xfQ0ZMQUdTICAgICA9IC9EVVNFX1NTTEVBWQ0KK1NTTF9MRkxBR1MgICAgID0gL0xJQlBBVEg6IiQoT1BFTlNTTF9QQVRIKS9vdXQzMiINCitTU0xfSU1QX0xGTEFHUyA9IC9MSUJQQVRIOiIkKE9QRU5TU0xfUEFUSCkvb3V0MzJkbGwiDQorU1NMX0xJQlMgICAgICAgPSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliIGdkaTMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYg0KKw0KKyMgUnVudGltZSBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24NCitSVExJQiAgID0gL01EDQorUlRMSUJEICA9IC9NRGQNCisNCishSUYgIiQoUlRMSUJDRkcpIiA9PSAic3RhdGljIg0KK1JUTElCICA9IC9NVA0KK1JUTElCRCA9IC9NVGQNCishRU5ESUYNCisNCisjIyBSZWxlYXNlDQorQ0NSICAgPSBjbC5leGUgJChSVExJQikgL08yIC9ETkRFQlVHDQorTElOS1IgPSBsaW5rLmV4ZSAvaW5jcmVtZW50YWw6bm8gL2xpYnBhdGg6Ii4uL2xpYiINCitSQ1IgICA9IHJjLmV4ZSAvZERFQlVHQlVJTEQ9MA0KKw0KKyMjIERlYnVnDQorQ0NEICAgPSBjbC5leGUgJChSVExJQkQpIC9HbSAvWkkgL09kIC9EX0RFQlVHIC9SVEMxDQorTElOS0QgPSBsaW5rLmV4ZSAvaW5jcmVtZW50YWw6eWVzIC9kZWJ1ZyAvbGlicGF0aDoiLi4vbGliIg0KK1JDRCAgID0gcmMuZXhlIC9kREVCVUdCVUlMRD0xDQorDQorQ0ZMQUdTICAgPSAvSS4uL2xpYiAvSS4uL2luY2x1ZGUgL25vbG9nbyAvVzMgL0VIc2MgL0RXSU4zMiAvRkQgL2MgL0RfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OPTENCitMRkxBR1MgICA9IC9ub2xvZ28gL291dDokKFBST0dSQU1fTkFNRSkgL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOiQoTUFDSElORSkNCitSRVNGTEFHUyA9IC9pLi4vaW5jbHVkZQ0KKw0KKyMgVGhpcyBtYW5pZmVzdCB0aGluZyBpcyBmb3IgVkM4LCBlbmFibGVkIGJ5IHRoZSBtYWtldGd6IHNjcmlwdCB0aGF0DQorIyBidWlsZHMgdGhlIFZDOCB2ZXJzaW9uIG9mIHRoaXMgbWFrZWZpbGUuIExlZnQgY29tbWVudGVkIG91dCBpbiB0aGUgVkM5DQorIyB2ZXJzaW9uIQ0KKyNNQU5JRkVTVFRPT0wgPSBtdCAtbWFuaWZlc3QgJChQUk9HUkFNX05BTUUpLm1hbmlmZXN0IC1vdXRwdXRyZXNvdXJjZTokKFBST0dSQU1fTkFNRSk7MQ0KKw0KKyFJRkRFRiBXSU5ET1dTX1NTUEkNCitDRkxBR1MgPSAkKENGTEFHUykgL0RVU0VfV0lORE9XU19TU1BJIC9JJChXSU5ET1dTX1NES19QQVRIKVxpbmNsdWRlDQorIUVORElGDQorDQorUkVMRUFTRV9PQkpTPSBcDQorCWh1Z2VoZWxwci5vYmogXA0KKwlub25ibG9ja3Iub2JqIFwNCisJcmF3c3Ryci5vYmogXA0KKwlzdHJ0b29mZnRyLm9iaiBcDQorCXRvb2xfYmlubW9kZXIub2JqIFwNCisJdG9vbF9ibmFtZXIub2JqIFwNCisJdG9vbF9jYl9kYmdyLm9iaiBcDQorCXRvb2xfY2JfaGRyci5vYmogXA0KKwl0b29sX2NiX3ByZ3Iub2JqIFwNCisJdG9vbF9jYl9yZWFyLm9iaiBcDQorCXRvb2xfY2Jfc2Vlci5vYmogXA0KKwl0b29sX2NiX3dydHIub2JqIFwNCisJdG9vbF9jZmdhYmxlci5vYmogXA0KKwl0b29sX2NvbnZlcnRyLm9iaiBcDQorCXRvb2xfZGlyaGllci5vYmogXA0KKwl0b29sX2Rvc3dpbnIub2JqIFwNCisJdG9vbF9lYXN5c3Jjci5vYmogXA0KKwl0b29sX2Zvcm1wYXJzZXIub2JqIFwNCisJdG9vbF9nZXRwYXJhbXIub2JqIFwNCisJdG9vbF9nZXRwYXNzci5vYmogXA0KKwl0b29sX2hlbHByLm9iaiBcDQorCXRvb2xfaGVscGVyc3Iub2JqIFwNCisJdG9vbF9ob21lZGlyci5vYmogXA0KKwl0b29sX2xpYmluZm9yLm9iaiBcDQorCXRvb2xfbWFpbnIub2JqIFwNCisJdG9vbF9tZmlsZXNyLm9iaiBcDQorCXRvb2xfbXNnc3Iub2JqIFwNCisJdG9vbF9vcGVyYXRlci5vYmogXA0KKwl0b29sX29wZXJobHByLm9iaiBcDQorCXRvb2xfcGFueWtleXIub2JqIFwNCisJdG9vbF9wYXJhbWhscHIub2JqIFwNCisJdG9vbF9wYXJzZWNmZ3Iub2JqIFwNCisJdG9vbF9zZXRvcHRyLm9iaiBcDQorCXRvb2xfc2xlZXByLm9iaiBcDQorCXRvb2xfdXJsZ2xvYnIub2JqIFwNCisJdG9vbF91dGlsci5vYmogXA0KKwl0b29sX3Ztc3Iub2JqIFwNCisJdG9vbF93cml0ZWVudnIub2JqIFwNCisJdG9vbF93cml0ZW91dHIub2JqIFwNCisJdG9vbF94YXR0cnIub2JqIFwNCisJY3VybHIucmVzDQorDQorREVCVUdfT0JKUz0gXA0KKwlodWdlaGVscGQub2JqIFwNCisJbm9uYmxvY2tkLm9iaiBcDQorCXJhd3N0cmQub2JqIFwNCisJc3RydG9vZmZ0ZC5vYmogXA0KKwl0b29sX2Jpbm1vZGVkLm9iaiBcDQorCXRvb2xfYm5hbWVkLm9iaiBcDQorCXRvb2xfY2JfZGJnZC5vYmogXA0KKwl0b29sX2NiX2hkcmQub2JqIFwNCisJdG9vbF9jYl9wcmdkLm9iaiBcDQorCXRvb2xfY2JfcmVhZC5vYmogXA0KKwl0b29sX2NiX3NlZWQub2JqIFwNCisJdG9vbF9jYl93cnRkLm9iaiBcDQorCXRvb2xfY2ZnYWJsZWQub2JqIFwNCisJdG9vbF9jb252ZXJ0ZC5vYmogXA0KKwl0b29sX2RpcmhpZWQub2JqIFwNCisJdG9vbF9kb3N3aW5kLm9iaiBcDQorCXRvb2xfZWFzeXNyY2Qub2JqIFwNCisJdG9vbF9mb3JtcGFyc2VkLm9iaiBcDQorCXRvb2xfZ2V0cGFyYW1kLm9iaiBcDQorCXRvb2xfZ2V0cGFzc2Qub2JqIFwNCisJdG9vbF9oZWxwZC5vYmogXA0KKwl0b29sX2hlbHBlcnNkLm9iaiBcDQorCXRvb2xfaG9tZWRpcmQub2JqIFwNCisJdG9vbF9saWJpbmZvZC5vYmogXA0KKwl0b29sX21haW5kLm9iaiBcDQorCXRvb2xfbWZpbGVzZC5vYmogXA0KKwl0b29sX21zZ3NkLm9iaiBcDQorCXRvb2xfb3BlcmF0ZWQub2JqIFwNCisJdG9vbF9vcGVyaGxwZC5vYmogXA0KKwl0b29sX3BhbnlrZXlkLm9iaiBcDQorCXRvb2xfcGFyYW1obHBkLm9iaiBcDQorCXRvb2xfcGFyc2VjZmdkLm9iaiBcDQorCXRvb2xfc2V0b3B0ZC5vYmogXA0KKwl0b29sX3NsZWVwZC5vYmogXA0KKwl0b29sX3VybGdsb2JkLm9iaiBcDQorCXRvb2xfdXRpbGQub2JqIFwNCisJdG9vbF92bXNkLm9iaiBcDQorCXRvb2xfd3JpdGVlbnZkLm9iaiBcDQorCXRvb2xfd3JpdGVvdXRkLm9iaiBcDQorCXRvb2xfeGF0dHJkLm9iaiBcDQorCWN1cmxkLnJlcw0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIElmIENGRyBub3Qgc3BlY2lmaWVkLCB1c2Ugc3RhdGljIGxpYnMNCisNCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAvRENVUkxfU1RBVElDTElCDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfU1RBX0xJQl9EQkcpDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkNCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtZGxsIg0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX0lNUF9MSUJfUkVMKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX0lNUF9MSUJfREJHKQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCB6bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXpsaWIiDQorQ0ZMQUdTICAgICAgICAgPSAkKENGTEFHUykgJChaTElCX0NGTEFHUykgL0RDVVJMX1NUQVRJQ0xJQg0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKSAkKFpMSUJfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykgJChaTElCX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChaTElCX0xGTEFHUykNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbCINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFNTTF9DRkxBR1MpIC9EQ1VSTF9TVEFUSUNMSUINCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkgJChTU0xfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykgJChTU0xfTElCUykNCitMRkxBR1MgICAgICAgICA9ICQoTEZMQUdTKSAkKFNTTF9MRkxBR1MpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1kbGwtc3NsLWRsbCINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFNTTF9DRkxBR1MpDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfSU1QX0xJQl9SRUwpICQoU1NMX0xJQlMpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfSU1QX0xJQl9EQkcpICQoU1NMX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChTU0xfSU1QX0xGTEFHUykNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIHN0YXRpYyBsaWJyYXJ5IHdpdGggc3NsIGFuZCB6bGliDQorDQorIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzbC16bGliIg0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpICQoU1NMX0NGTEFHUykgJChaTElCX0NGTEFHUykgL0RDVVJMX1NUQVRJQ0xJQg0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKSAkKFNTTF9MSUJTKSAkKFpMSUJfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykgJChTU0xfTElCUykgJChaTElCX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChTU0xfTEZMQUdTKSAkKFpMSUJfTEZMQUdTKQ0KKyFFTkRJRg0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIHJlbGVhc2Ugc3RhdGljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHNzbA0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS1zc2wtZGxsIg0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpICQoU1NMX0NGTEFHUykgL0RDVVJMX1NUQVRJQ0xJQg0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX1NUQV9MSUJfUkVMKSAkKFNTTF9MSUJTKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKSAkKFNTTF9MSUJTKQ0KK0xGTEFHUyAgICAgICAgID0gJChMRkxBR1MpICQoU1NMX0lNUF9MRkxBR1MpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgemxpYg0KKw0KKyFJRiAiJChDRkcpIiA9PSAicmVsZWFzZS16bGliLWRsbCINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFpMSUJfQ0ZMQUdTKSAvRENVUkxfU1RBVElDTElCDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfU1RBX0xJQl9SRUwpICQoWkxJQl9JTVBfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9TVEFfTElCX0RCRykgJChaTElCX0lNUF9MSUJTKQ0KK0xGTEFHUyAgICAgICAgID0gJChMRkxBR1MpICQoWkxJQl9MRkxBR1MpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBkeW5hbWljIGxpYnJhcnkgd2l0aCBkeW5hbWljIHpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtZGxsLXpsaWItZGxsIg0KK0NGTEFHUyAgICAgICAgID0gJChDRkxBR1MpICQoWkxJQl9DRkxBR1MpDQorTElOS0xJQlMgICAgICAgPSAkKExJQkNVUkxfSU1QX0xJQl9SRUwpICQoWkxJQl9JTVBfTElCUykNCitMSU5LTElCU19ERUJVRyA9ICQoTElCQ1VSTF9JTVBfTElCX0RCRykgJChaTElCX0lNUF9MSUJTKQ0KK0xGTEFHUyAgICAgICAgID0gJChMRkxBR1MpICQoWkxJQl9MRkxBR1MpDQorIUVORElGDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgcmVsZWFzZSBzdGF0aWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2Utc3NsLWRsbC16bGliLWRsbCINCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAkKFNTTF9DRkxBR1MpICQoWkxJQl9DRkxBR1MpIC9EQ1VSTF9TVEFUSUNMSUINCitMSU5LTElCUyAgICAgICA9ICQoTElCQ1VSTF9TVEFfTElCX1JFTCkgJChTU0xfTElCUykgJChaTElCX0lNUF9MSUJTKQ0KK0xJTktMSUJTX0RFQlVHID0gJChMSUJDVVJMX1NUQV9MSUJfREJHKSAkKFNTTF9MSUJTKSAkKFpMSUJfSU1QX0xJQlMpDQorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgJChTU0xfSU1QX0xGTEFHUykgJChaTElCX0xGTEFHUykNCishRU5ESUYNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIyByZWxlYXNlIGR5bmFtaWMgbGlicmFyeSB3aXRoIGR5bmFtaWMgc3NsIGFuZCBkeW5hbWljIHpsaWINCisNCishSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UtZGxsLXNzbC1kbGwtemxpYi1kbGwiDQorQ0ZMQUdTICAgICAgICAgPSAkKENGTEFHUykgJChTU0xfQ0ZMQUdTKSAkKFpMSUJfQ0ZMQUdTKQ0KK0xJTktMSUJTICAgICAgID0gJChMSUJDVVJMX0lNUF9MSUJfUkVMKSAkKFNTTF9MSUJTKSAkKFpMSUJfSU1QX0xJQlMpDQorTElOS0xJQlNfREVCVUcgPSAkKExJQkNVUkxfSU1QX0xJQl9EQkcpICQoU1NMX0xJQlMpICQoWkxJQl9JTVBfTElCUykNCitMRkxBR1MgICAgICAgICA9ICQoTEZMQUdTKSAkKFNTTF9JTVBfTEZMQUdTKSAkKFpMSUJfTEZMQUdTKQ0KKyFFTkRJRg0KKw0KKw0KK0xJTktMSUJTICAgICAgID0gJChMSU5LTElCUykgd3MyXzMyLmxpYiB3bGRhcDMyLmxpYg0KK0xJTktMSUJTX0RFQlVHID0gJChMSU5LTElCU19ERUJVRykgd3MyXzMyLmxpYiB3bGRhcDMyLmxpYg0KKw0KK2FsbCA6IHJlbGVhc2UNCisNCityZWxlYXNlOiAkKFJFTEVBU0VfT0JKUykNCisJJChMSU5LUikgJChMRkxBR1MpICQoTElOS0xJQlMpICQoUkVMRUFTRV9PQkpTKQ0KKyAgICAgICAgJChNQU5JRkVTVFRPT0wpDQorDQorZGVidWc6ICQoREVCVUdfT0JKUykNCisJJChMSU5LRCkgJChMRkxBR1MpICQoTElOS0xJQlNfREVCVUcpICQoREVCVUdfT0JKUykNCisgICAgICAgICQoTUFOSUZFU1RUT09MKQ0KKw0KKyMjIFJlbGVhc2UNCitodWdlaGVscHIub2JqOiBodWdlaGVscC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL1ptMjAwIC9GbyIkQCIgaHVnZWhlbHAuYw0KK25vbmJsb2Nrci5vYmo6IC4uL2xpYi9ub25ibG9jay5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiAuLi9saWIvbm9uYmxvY2suYw0KK3Jhd3N0cnIub2JqOiAuLi9saWIvcmF3c3RyLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9yYXdzdHIuYw0KK3N0cnRvb2ZmdHIub2JqOiAuLi9saWIvc3RydG9vZmZ0LmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9zdHJ0b29mZnQuYw0KK3Rvb2xfYmlubW9kZXIub2JqOiB0b29sX2Jpbm1vZGUuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9iaW5tb2RlLmMNCit0b29sX2JuYW1lci5vYmo6IHRvb2xfYm5hbWUuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9ibmFtZS5jDQordG9vbF9jYl9kYmdyLm9iajogdG9vbF9jYl9kYmcuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9kYmcuYw0KK3Rvb2xfY2JfaGRyci5vYmo6IHRvb2xfY2JfaGRyLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2JfaGRyLmMNCit0b29sX2NiX3ByZ3Iub2JqOiB0b29sX2NiX3ByZy5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX3ByZy5jDQordG9vbF9jYl9yZWFyLm9iajogdG9vbF9jYl9yZWEuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9yZWEuYw0KK3Rvb2xfY2Jfc2Vlci5vYmo6IHRvb2xfY2Jfc2VlLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2Jfc2VlLmMNCit0b29sX2NiX3dydHIub2JqOiB0b29sX2NiX3dydC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX3dydC5jDQordG9vbF9jZmdhYmxlci5vYmo6IHRvb2xfY2ZnYWJsZS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NmZ2FibGUuYw0KK3Rvb2xfY29udmVydHIub2JqOiB0b29sX2NvbnZlcnQuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jb252ZXJ0LmMNCit0b29sX2RpcmhpZXIub2JqOiB0b29sX2RpcmhpZS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2RpcmhpZS5jDQordG9vbF9kb3N3aW5yLm9iajogdG9vbF9kb3N3aW4uYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9kb3N3aW4uYw0KK3Rvb2xfZWFzeXNyY3Iub2JqOiB0b29sX2Vhc3lzcmMuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9lYXN5c3JjLmMNCit0b29sX2Zvcm1wYXJzZXIub2JqOiB0b29sX2Zvcm1wYXJzZS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2Zvcm1wYXJzZS5jDQordG9vbF9nZXRwYXJhbXIub2JqOiB0b29sX2dldHBhcmFtLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZ2V0cGFyYW0uYw0KK3Rvb2xfZ2V0cGFzc3Iub2JqOiB0b29sX2dldHBhc3MuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9nZXRwYXNzLmMNCit0b29sX2hlbHByLm9iajogdG9vbF9oZWxwLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfaGVscC5jDQordG9vbF9oZWxwZXJzci5vYmo6IHRvb2xfaGVscGVycy5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2hlbHBlcnMuYw0KK3Rvb2xfaG9tZWRpcnIub2JqOiB0b29sX2hvbWVkaXIuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9ob21lZGlyLmMNCit0b29sX2xpYmluZm9yLm9iajogdG9vbF9saWJpbmZvLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfbGliaW5mby5jDQordG9vbF9tYWluci5vYmo6IHRvb2xfbWFpbi5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX21haW4uYw0KK3Rvb2xfbWZpbGVzci5vYmo6IHRvb2xfbWZpbGVzLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfbWZpbGVzLmMNCit0b29sX21zZ3NyLm9iajogdG9vbF9tc2dzLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfbXNncy5jDQordG9vbF9vcGVyYXRlci5vYmo6IHRvb2xfb3BlcmF0ZS5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX29wZXJhdGUuYw0KK3Rvb2xfb3BlcmhscHIub2JqOiB0b29sX29wZXJobHAuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9vcGVyaGxwLmMNCit0b29sX3BhbnlrZXlyLm9iajogdG9vbF9wYW55a2V5LmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfcGFueWtleS5jDQordG9vbF9wYXJhbWhscHIub2JqOiB0b29sX3BhcmFtaGxwLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfcGFyYW1obHAuYw0KK3Rvb2xfcGFyc2VjZmdyLm9iajogdG9vbF9wYXJzZWNmZy5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3BhcnNlY2ZnLmMNCit0b29sX3NldG9wdHIub2JqOiB0b29sX3NldG9wdC5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3NldG9wdC5jDQordG9vbF9zbGVlcHIub2JqOiB0b29sX3NsZWVwLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfc2xlZXAuYw0KK3Rvb2xfdXJsZ2xvYnIub2JqOiB0b29sX3VybGdsb2IuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF91cmxnbG9iLmMNCit0b29sX3V0aWxyLm9iajogdG9vbF91dGlsLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfdXRpbC5jDQordG9vbF92bXNyLm9iajogdG9vbF92bXMuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF92bXMuYw0KK3Rvb2xfd3JpdGVlbnZyLm9iajogdG9vbF93cml0ZWVudi5jDQorCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3dyaXRlZW52LmMNCit0b29sX3dyaXRlb3V0ci5vYmo6IHRvb2xfd3JpdGVvdXQuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF93cml0ZW91dC5jDQordG9vbF94YXR0cnIub2JqOiB0b29sX3hhdHRyLmMNCisJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfeGF0dHIuYw0KK2N1cmxyLnJlcyA6IGN1cmwucmMNCisJJChSQ1IpICQoUkVTRkxBR1MpIC9GbyIkQCIgY3VybC5yYw0KKw0KKyMjIERlYnVnDQoraHVnZWhlbHBkLm9iajogaHVnZWhlbHAuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9abTIwMCAvRm8iJEAiIGh1Z2VoZWxwLmMNCitub25ibG9ja2Qub2JqOiAuLi9saWIvbm9uYmxvY2suYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgLi4vbGliL25vbmJsb2NrLmMNCityYXdzdHJkLm9iajogLi4vbGliL3Jhd3N0ci5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiAuLi9saWIvcmF3c3RyLmMNCitzdHJ0b29mZnRkLm9iajogLi4vbGliL3N0cnRvb2ZmdC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiAuLi9saWIvc3RydG9vZmZ0LmMNCit0b29sX2Jpbm1vZGVkLm9iajogdG9vbF9iaW5tb2RlLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfYmlubW9kZS5jDQordG9vbF9ibmFtZWQub2JqOiB0b29sX2JuYW1lLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfYm5hbWUuYw0KK3Rvb2xfY2JfZGJnZC5vYmo6IHRvb2xfY2JfZGJnLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2JfZGJnLmMNCit0b29sX2NiX2hkcmQub2JqOiB0b29sX2NiX2hkci5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX2hkci5jDQordG9vbF9jYl9wcmdkLm9iajogdG9vbF9jYl9wcmcuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl9wcmcuYw0KK3Rvb2xfY2JfcmVhZC5vYmo6IHRvb2xfY2JfcmVhLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY2JfcmVhLmMNCit0b29sX2NiX3NlZWQub2JqOiB0b29sX2NiX3NlZS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2NiX3NlZS5jDQordG9vbF9jYl93cnRkLm9iajogdG9vbF9jYl93cnQuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jYl93cnQuYw0KK3Rvb2xfY2ZnYWJsZWQub2JqOiB0b29sX2NmZ2FibGUuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9jZmdhYmxlLmMNCit0b29sX2NvbnZlcnRkLm9iajogdG9vbF9jb252ZXJ0LmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfY29udmVydC5jDQordG9vbF9kaXJoaWVkLm9iajogdG9vbF9kaXJoaWUuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9kaXJoaWUuYw0KK3Rvb2xfZG9zd2luZC5vYmo6IHRvb2xfZG9zd2luLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZG9zd2luLmMNCit0b29sX2Vhc3lzcmNkLm9iajogdG9vbF9lYXN5c3JjLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZWFzeXNyYy5jDQordG9vbF9mb3JtcGFyc2VkLm9iajogdG9vbF9mb3JtcGFyc2UuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9mb3JtcGFyc2UuYw0KK3Rvb2xfZ2V0cGFyYW1kLm9iajogdG9vbF9nZXRwYXJhbS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2dldHBhcmFtLmMNCit0b29sX2dldHBhc3NkLm9iajogdG9vbF9nZXRwYXNzLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfZ2V0cGFzcy5jDQordG9vbF9oZWxwZC5vYmo6IHRvb2xfaGVscC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2hlbHAuYw0KK3Rvb2xfaGVscGVyc2Qub2JqOiB0b29sX2hlbHBlcnMuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9oZWxwZXJzLmMNCit0b29sX2hvbWVkaXJkLm9iajogdG9vbF9ob21lZGlyLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfaG9tZWRpci5jDQordG9vbF9saWJpbmZvZC5vYmo6IHRvb2xfbGliaW5mby5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX2xpYmluZm8uYw0KK3Rvb2xfbWFpbmQub2JqOiB0b29sX21haW4uYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9tYWluLmMNCit0b29sX21maWxlc2Qub2JqOiB0b29sX21maWxlcy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX21maWxlcy5jDQordG9vbF9tc2dzZC5vYmo6IHRvb2xfbXNncy5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX21zZ3MuYw0KK3Rvb2xfb3BlcmF0ZWQub2JqOiB0b29sX29wZXJhdGUuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9vcGVyYXRlLmMNCit0b29sX29wZXJobHBkLm9iajogdG9vbF9vcGVyaGxwLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfb3BlcmhscC5jDQordG9vbF9wYW55a2V5ZC5vYmo6IHRvb2xfcGFueWtleS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3BhbnlrZXkuYw0KK3Rvb2xfcGFyYW1obHBkLm9iajogdG9vbF9wYXJhbWhscC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3BhcmFtaGxwLmMNCit0b29sX3BhcnNlY2ZnZC5vYmo6IHRvb2xfcGFyc2VjZmcuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9wYXJzZWNmZy5jDQordG9vbF9zZXRvcHRkLm9iajogdG9vbF9zZXRvcHQuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF9zZXRvcHQuYw0KK3Rvb2xfc2xlZXBkLm9iajogdG9vbF9zbGVlcC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3NsZWVwLmMNCit0b29sX3VybGdsb2JkLm9iajogdG9vbF91cmxnbG9iLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfdXJsZ2xvYi5jDQordG9vbF91dGlsZC5vYmo6IHRvb2xfdXRpbC5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3V0aWwuYw0KK3Rvb2xfdm1zZC5vYmo6IHRvb2xfdm1zLmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfdm1zLmMNCit0b29sX3dyaXRlZW52ZC5vYmo6IHRvb2xfd3JpdGVlbnYuYw0KKwkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgdG9vbF93cml0ZWVudi5jDQordG9vbF93cml0ZW91dGQub2JqOiB0b29sX3dyaXRlb3V0LmMNCisJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIHRvb2xfd3JpdGVvdXQuYw0KK3Rvb2xfeGF0dHJkLm9iajogdG9vbF94YXR0ci5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiB0b29sX3hhdHRyLmMNCitjdXJsZC5yZXMgOiBjdXJsLnJjDQorCSQoUkNEKSAkKFJFU0ZMQUdTKSAvRm8iJEAiIGN1cmwucmMNCisNCitjbGVhbjoNCisJQC1lcmFzZSAkKFBST0dSQU1fTkFNRSkgMj4gTlVMDQorCUAtZXJhc2UgJChSRUxFQVNFX09CSlMpIDI+IE5VTA0KKwlALWVyYXNlICQoREVCVUdfT0JKUykgMj4gTlVMDQorCUAtZXJhc2UgKi5pZGIgMj4gTlVMDQorCUAtZXJhc2UgKi5wZGIgMj4gTlVMDQorCUAtZXJhc2UgKi5wY2ggMj4gTlVMDQorCUAtZXJhc2UgKi5pbGsgMj4gTlVMDQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL2NvbmZpZy1hbWlnYW9zLmggYi9jdXJsLTcuMjUuMC9zcmMvY29uZmlnLWFtaWdhb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhlMGE4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL2NvbmZpZy1hbWlnYW9zLmgKQEAgLTAsMCArMSw3MCBAQAorI2lmbmRlZiBDVVJMX0NPTkZJR19BTUlHQU9TX0gKKyNkZWZpbmUgQ1VSTF9DT05GSUdfQU1JR0FPU19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIF9fQU1JR0FfXyAvKiBBbnkgQW1pZ2FPUyBmbGF2b3VyICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSB3YW50IHRoZSBidWlsdC1pbiBtYW51YWwgKi8KKyNkZWZpbmUgVVNFX01BTlVBTCAxCisKKyNkZWZpbmUgT1MgIkFtaWdhT1MiCisKKyNkZWZpbmUgSEFWRV9DTE9TRVNPQ0tFVF9DQU1FTCAgMQorI2RlZmluZSBIQVZFX0VSUk5PX0ggICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TVFJEVVAgICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1VUSU1FICAgICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfVVRJTUVfSCAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAgICAgICAgMQorI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAgICAgICAxCisjZGVmaW5lIEhBVkVfV1JJVEFCTEVfQVJHViAgICAgIDEKKyNkZWZpbmUgSEFWRV9TWVNfVElNRV9IICAgICAgICAgMQorI2RlZmluZSBIQVZFX1RJTUVfSCAgICAgICAgICAgICAxCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAgICAgIDEKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVZBTCAgICAgMQorCisjaWYgMAorIyBkZWZpbmUgSEFWRV9URVJNSU9TX0ggICAgICAgICAxCisjIGRlZmluZSBIQVZFX0ZUUlVOQ0FURSAgICAgICAgIDEKKyNlbmRpZgorCisjZGVmaW5lIEhBVkVfUFdEX0ggICAgICAgICAgICAgIDEKKworI2lmbmRlZiBGX09LCisjIGRlZmluZSBGX09LIDAKKyNlbmRpZgorI2lmbmRlZiBPX1JET05MWQorIyBkZWZpbmUJT19SRE9OTFkJMHgwMDAwCQkvKiBvcGVuIGZvciByZWFkaW5nIG9ubHkgKi8KKyNlbmRpZgorI2lmbmRlZiBMT05HX01BWAorIyBkZWZpbmUgICAgICAgIExPTkdfTUFYICAgICAgICAweDdmZmZmZmZmTCAgICAgICAgICAgICAvKiBtYXggdmFsdWUgZm9yIGEgbG9uZyAqLworI2VuZGlmCisjaWZuZGVmIExPTkdfTUlOCisjIGRlZmluZSAgICAgICAgTE9OR19NSU4gICAgICAgICgtMHg3ZmZmZmZmZkwtMSkgICAgICAgIC8qIG1pbiB2YWx1ZSBmb3IgYSBsb25nICovCisjZW5kaWYKKworI2RlZmluZSBTSVpFT0ZfSU5UICAgICAgICAgICAgICA0CisjZGVmaW5lIFNJWkVPRl9TSE9SVCAgICAgICAgICAgIDIKKworI2VuZGlmIC8qIF9fQU1JR0FfXyAqLworI2VuZGlmIC8qIENVUkxfQ09ORklHX0FNSUdBT1NfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL2NvbmZpZy1tYWMuaCBiL2N1cmwtNy4yNS4wL3NyYy9jb25maWctbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljMjRjNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy9jb25maWctbWFjLmgKQEAgLTAsMCArMSw1NyBAQAorI2lmbmRlZiBfX1NSQ19DT05GSUdfTUFDX0gKKyNkZWZpbmUgX19TUkNfQ09ORklHX01BQ19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICBzcmMvY29uZmlnLW1hYy5oIC0gSGFuZCBjcmFmdGVkIGNvbmZpZyBmaWxlIGZvciBNYWMgT1MgOSAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogIE9uIE1hYyBPUyBYIHlvdSBtdXN0IHJ1biBjb25maWd1cmUgdG8gZ2VuZXJhdGUgY3VybF9jb25maWcuaCBmaWxlICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0aGUgYnVpbHQtaW4gbWFudWFsICovCisjZGVmaW5lIFVTRV9NQU5VQUwgMQorCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9FUlJOT19IICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX0ZDTlRMX0ggICAgICAgICAgICAxCisjZGVmaW5lIEhBVkVfVVRJTUVfSCAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TWVNfVVRJTUVfSCAgICAgICAgMQorCisjZGVmaW5lIEhBVkVfU0VUVkJVRiAgICAgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9VVElNRSAgICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAgICAgICAgICAxCisKKyNkZWZpbmUgSEFWRV9USU1FX0ggICAgICAgICAgICAgMQorI2RlZmluZSBIQVZFX1NZU19USU1FX0ggICAgICAgICAxCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAgICAgIDEKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVZBTCAgICAgMQorCisjZGVmaW5lIFNJWkVPRl9JTlQgICAgICAgICAgICAgIDQKKyNkZWZpbmUgU0laRU9GX1NIT1JUICAgICAgICAgICAgMgorCisjZGVmaW5lIG1haW4oeCx5KSBjdXJsX21haW4oeCx5KQorCisvKiB3ZSBwcm92aWRlIG91ciBvd24gc3RyZHVwIHByb3RvdHlwZSAqLworY2hhciAqc3RyZHVwKGNoYXIgKnMxKTsKKworI2VuZGlmIC8qIF9fU1JDX0NPTkZJR19NQUNfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL2NvbmZpZy1yaXNjb3MuaCBiL2N1cmwtNy4yNS4wL3NyYy9jb25maWctcmlzY29zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlhYTdiYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy9jb25maWctcmlzY29zLmgKQEAgLTAsMCArMSw0MDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTmFtZSBvZiB0aGlzIHBhY2thZ2UhICovCisjdW5kZWYgUEFDS0FHRQorCisvKiBWZXJzaW9uIG51bWJlciBvZiB0aGlzIGFyY2hpdmUuICovCisjdW5kZWYgVkVSU0lPTgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBhc3MgZnVuY3Rpb24uICAqLworI3VuZGVmIEhBVkVfR0VUUEFTUworCisvKiBEZWZpbmUgY3B1LW1hY2hpbmUtT1MgKi8KKyNkZWZpbmUgT1MgIkFSTS1SSVNDIE9TIgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0aGUgYnVpbHQtaW4gbWFudWFsICovCisjZGVmaW5lIFVTRV9NQU5VQUwgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHJfcigpIGZ1bmN0aW9uIHdpdGggNSBhcmd1bWVudHMgKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUl81CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkcl9yKCkgZnVuY3Rpb24gd2l0aCA3IGFyZ3VtZW50cyAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZQUREUl9SXzcKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnlhZGRyX3IoKSBmdW5jdGlvbiB3aXRoIDggYXJndW1lbnRzICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllBRERSX1JfOAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWVfcigpIGZ1bmN0aW9uIHdpdGggMyBhcmd1bWVudHMgKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5bmFtZV9yKCkgZnVuY3Rpb24gd2l0aCA1IGFyZ3VtZW50cyAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnluYW1lX3IoKSBmdW5jdGlvbiB3aXRoIDYgYXJndW1lbnRzICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNgorCisvKiBEZWZpbmUgaWYgeW91IG5lZWQgdGhlIF9SRUVOVFJBTlQgZGVmaW5lIGZvciBzb21lIGZ1bmN0aW9ucyAqLworI3VuZGVmIE5FRURfUkVFTlRSQU5UCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgS2VyYmVyb3M0IGxpYnJhcmllcyAoaW5jbHVkaW5nIC1sZGVzKSAqLworI3VuZGVmIEhBVkVfS1JCNAorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydCAqLworI3VuZGVmIEVOQUJMRV9JUFY2CisKKy8qIERlZmluZSBpZiBzdHJ1Y3Qgc29ja2FkZHJfaW42IGhhcyB0aGUgc2luNl9zY29wZV9pZCBtZW1iZXIgKi8KKyNkZWZpbmUgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxCisKKy8qIERlZmluZSB0aGlzIHRvICdpbnQnIGlmIHNzaXplX3QgaXMgbm90IGFuIGF2YWlsYWJsZSB0eXBlZGVmZWQgdHlwZSAqLworI3VuZGVmIHNzaXplX3QKKworLyogRGVmaW5lIHRoaXMgYXMgYSBzdWl0YWJsZSBmaWxlIHRvIHJlYWQgcmFuZG9tIGRhdGEgZnJvbSAqLworI3VuZGVmIFJBTkRPTV9GSUxFCisKKy8qIERlZmluZSB0aGlzIHRvIHlvdXIgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldCBwYXRobmFtZSAqLworI3VuZGVmIEVHRF9TT0NLRVQKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBJUHY2IHN1cHBvcnQgKi8KKyN1bmRlZiBFTkFCTEVfSVBWNgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxhbGxvY2EuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQUxMT0NBX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8YXJwYS9pbmV0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGNsb3Nlc29ja2V0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NMT1NFU09DS0VUCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGNyeXB0by5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0NSWVBUT19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGRlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0RFU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0VSUk5PX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZXJyLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRVJSX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfRkNOVExfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBmdHJ1bmNhdGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZUUlVOQ0FURQorCisvKiBEZWZpbmUgaWYgZ2V0YWRkcmluZm8gZXhpc3RzIGFuZCB3b3JrcyAqLworI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldGV1aWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VURVVJRAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0YnlhZGRyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldGhvc3RieWFkZHJfcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllBRERSX1IKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdGJ5bmFtZV9yJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0bmFtZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUSE9TVE5BTUUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8Z2V0b3B0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0dFVE9QVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBhc3NfcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRQQVNTX1IKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHd1aWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUUFdVSUQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZ2V0c2VydmJ5bmFtZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRTRVJWQllOQU1FCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGdldHRpbWVvZmRheScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHRpbWV2YWwnIHN0cnVjdC4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVZBTAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBpbmV0X2FkZHInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSU5FVF9BRERSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0lOVFRZUEVTX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8aW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JT19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGtyYl9nZXRfb3VyX2lwX2Zvcl9yZWFsbScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9LUkJfR0VUX09VUl9JUF9GT1JfUkVBTE0KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8a3JiLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfS1JCX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgY3J5cHRvJyBsaWJyYXJ5ICgtbGNyeXB0bykuICovCisjdW5kZWYgSEFWRV9MSUJDUllQVE8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgbnNsJyBsaWJyYXJ5ICgtbG5zbCkuICovCisjdW5kZWYgSEFWRV9MSUJOU0wKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgcmVzb2x2JyBsaWJyYXJ5ICgtbHJlc29sdikuICovCisjdW5kZWYgSEFWRV9MSUJSRVNPTFYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgcmVzb2x2ZScgbGlicmFyeSAoLWxyZXNvbHZlKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlJFU09MVkUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBsaWJyYXJ5ICgtbHNvY2tldCkuICovCisjdW5kZWYgSEFWRV9MSUJTT0NLRVQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3NsJyBsaWJyYXJ5ICgtbHNzbCkuICovCisjdW5kZWYgSEFWRV9MSUJTU0wKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgdWNiJyBsaWJyYXJ5ICgtbHVjYikuICovCisjdW5kZWYgSEFWRV9MSUJVQ0IKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgbG9jYWx0aW1lX3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTE9DQUxUSU1FX1IKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bWFsbG9jLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX01BTExPQ19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRoZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSBldmVuIHdpdGggc3RkbGliLmggKi8KKy8qICNkZWZpbmUgTkVFRF9NQUxMT0NfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01FTU9SWV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGRiLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX05FVERCX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pZl9ldGhlci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVElORVRfSUZfRVRIRVJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX05FVElORVRfSU5fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUX0lGX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9jcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9PUEVOU1NMX0NSWVBUT19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZXJyLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9FUlJfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3BlbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfUEVNX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9yc2EuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9PUEVOU1NMX1JTQV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvc3NsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9TU0xfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxvcGVuc3NsL3g1MDkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9PUEVOU1NMX1g1MDlfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxwZW0uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9QRU1fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBwZXJyb3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUEVSUk9SCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHB3ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1BXRF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfZWdkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1JBTkRfRUdECisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfc2NyZWVuJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1JBTkRfU0NSRUVOCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfc3RhdHVzJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1JBTkRfU1RBVFVTCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHJzYS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1JTQV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHNlbGVjdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VMRUNUCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHNldHZidWYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUVkJVRgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzZ3R0eS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TR1RUWV9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2FjdGlvbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TSUdBQ1RJT04KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc2lnbmFsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdOQUwKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TT0NLRVQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3NsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1NMX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU5UX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNhc2VjbXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSQ0FTRUNNUAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJjbXBpJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkNNUEkKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJEVVAKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RyZnRpbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkZUSU1FCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmljbXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUklDTVAKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR1NfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNhdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJMQ0FUCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjcHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTENQWQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJzdHInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUlNUUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b2tfcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJUT0tfUgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfUEFSQU1fSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NraW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU09DS0lPX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19UWVBFU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHRjZ2V0YXR0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVENHRVRBVFRSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHRjc2V0YXR0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVENTRVRBVFRSCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVEVSTUlPU19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pby5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1RFUk1JT19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9USU1FX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgdW5hbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VOQU1FCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV0lOU09DS19ICisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHg1MDkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9YNTA5X0gKKworLyogTmFtZSBvZiBwYWNrYWdlICovCisjdW5kZWYgUEFDS0FHRQorCisvKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoYGludCcgb3IgYHZvaWQnKS4gKi8KKyNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCisKKy8qIFRoZSBzaXplIG9mIGBpbnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9JTlQgNAorCisvKiBUaGUgc2l6ZSBvZiBgbG9uZyBkb3VibGUnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0xPTkdfRE9VQkxFCisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0xPTkdfTE9ORworCisvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9TSE9SVCAyCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KKyN1bmRlZiBTVERDX0hFQURFUlMKKworLyogRGVmaW5lIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLworI3VuZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjdW5kZWYgVkVSU0lPTgorCisvKiBEZWZpbmUgaWYgb24gQUlYIDMuCisgICBTeXN0ZW0gaGVhZGVycyBzb21ldGltZXMgZGVmaW5lIHRoaXMuCisgICBXZSBqdXN0IHdhbnQgdG8gYXZvaWQgYSByZWRlZmluaXRpb24gZXJyb3IgbWVzc2FnZS4gICovCisjaWZuZGVmIF9BTExfU09VUkNFCisjIHVuZGVmIF9BTExfU09VUkNFCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBmaWxlIG9mZnNldCwgb24gaG9zdHMgd2hlcmUgdGhpcyBpcyBzZXR0YWJsZS4gKi8KKyN1bmRlZiBfRklMRV9PRkZTRVRfQklUUworCisvKiBEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuICovCisjdW5kZWYgX0xBUkdFX0ZJTEVTCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworI3VuZGVmIGNvbnN0CisKKy8qIERlZmluZSB0byBgdW5zaWduZWQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHNpemVfdAorCisvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjdW5kZWYgc3NpemVfdAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGlvY3RsIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0lPQ1RMCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGwgRklPTkJJTyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTF9GSU9OQklPCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvY29uZmlnLXdpbjMyLmggYi9jdXJsLTcuMjUuMC9zcmMvY29uZmlnLXdpbjMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZiY2E5YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy9jb25maWctd2luMzIuaApAQCAtMCwwICsxLDY3NCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9DT05GSUdfV0lOMzJfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9DT05GSUdfV0lOMzJfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgSGFuZCBjcmFmdGVkIGNvbmZpZyBmaWxlIGZvciBXaW5kb3dzICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgIEhFQURFUiBGSUxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxhcnBhL2luZXQuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjZGVmaW5lIEhBVkVfQVJQQV9JTkVUX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxhc3NlcnQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQVNTRVJUX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxjcnlwdG8uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjZGVmaW5lIEhBVkVfQ1JZUFRPX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxlcnJuby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9FUlJOT19IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZXJyLmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX0VSUl9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfRkNOVExfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGdldG9wdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9fUE9DQ19fKQorI2RlZmluZSBIQVZFX0dFVE9QVF9IIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9JT19IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bGltaXRzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xJTUlUU19IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bG9jYWxlLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBuZWVkIDxtYWxsb2MuaD4gaGVhZGVyIGV2ZW4gd2l0aCA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI2lmICFkZWZpbmVkKF9fU0FMRk9SRENfXykgJiYgIWRlZmluZWQoX19QT0NDX18pCisjZGVmaW5lIE5FRURfTUFMTE9DX0ggMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGRiLmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX05FVERCX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHByb2Nlc3MuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIF9fU0FMRk9SRENfXworI2RlZmluZSBIQVZFX1BST0NFU1NfSCAxCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NJR05BTF9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c2d0dHkuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjZGVmaW5lIEhBVkVfU0dUVFlfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNzbC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICNkZWZpbmUgSEFWRV9TU0xfSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICNkZWZpbmUgSEFWRV9TWVNfUEFSQU1fSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2lvLmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX1NZU19TT0NLSU9fSCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBfX0JPUkxBTkRDX18KKyNkZWZpbmUgSEFWRV9TWVNfVVRJTUVfSCAxCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvLmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX1RFUk1JT19IIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvcy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICNkZWZpbmUgSEFWRV9URVJNSU9TX0ggMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1RJTUVfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fTENDX18pIHx8IFwKKyAgICBkZWZpbmVkKF9fUE9DQ19fKQorI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx3aW5kb3dzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1dJTkRPV1NfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2suaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfV0lOU09DS19IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jazIuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIF9fU0FMRk9SRENfXworI2RlZmluZSBIQVZFX1dJTlNPQ0syX0ggMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHdzMnRjcGlwLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBfX1NBTEZPUkRDX18KKyNkZWZpbmUgSEFWRV9XUzJUQ1BJUF9IIDEKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIE9USEVSIEhFQURFUiBJTkZPICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSBpZiBzaWdfYXRvbWljX3QgaXMgYW4gYXZhaWxhYmxlIHR5cGVkZWYuICovCisjZGVmaW5lIEhBVkVfU0lHX0FUT01JQ19UIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI2RlZmluZSBTVERDX0hFQURFUlMgMQorCisvKiBEZWZpbmUgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCisvKiAjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBjbG9zZXNvY2tldCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DTE9TRVNPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgZG9uJ3QgaGF2ZSB2cHJpbnRmIGJ1dCBkbyBoYXZlIF9kb3BybnQuICovCisvKiAjZGVmaW5lIEhBVkVfRE9QUk5UIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmdHJ1bmNhdGUgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRlRSVU5DQVRFIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRob3N0YnlhZGRyIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFIgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RuYW1lIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEhPU1ROQU1FIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwYXNzIGZ1bmN0aW9uLiAqLworLyogI2RlZmluZSBIQVZFX0dFVFBBU1MgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHNlcnZieW5hbWUgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUU0VSVkJZTkFNRSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cHJvdG9ieW5hbWUgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUUFJPVE9CWU5BTUUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXR0aW1lb2ZkYXkgZnVuY3Rpb24uICovCisvKiAjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpbmV0X2FkZHIgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU5FVF9BRERSIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpb2N0bHNvY2tldCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGxzb2NrZXQgRklPTkJJTyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JT0NUTFNPQ0tFVF9GSU9OQklPIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwZXJyb3IgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUEVSUk9SIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBSQU5EX3NjcmVlbiBmdW5jdGlvbiB3aGVuIHVzaW5nIFNTTC4gKi8KKyNkZWZpbmUgSEFWRV9SQU5EX1NDUkVFTiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfc3RhdHVzJyBmdW5jdGlvbiB3aGVuIHVzaW5nIFNTTC4gKi8KKyNkZWZpbmUgSEFWRV9SQU5EX1NUQVRVUyAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYENSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhJyBmdW5jdGlvbi4KKyAgIFRoaXMgaXMgcHJlc2VudCBpbiBPcGVuU1NMIHZlcnNpb25zIGFmdGVyIDAuOS42YiAqLworI2RlZmluZSBIQVZFX0NSWVBUT19DTEVBTlVQX0FMTF9FWF9EQVRBIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZWxlY3QgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VMRUNUIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRsb2NhbGUgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRtb2RlIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVE1PREUgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHZidWYgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VUVkJVRiAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc29ja2V0IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NPQ0tFVCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyY2FzZWNtcCBmdW5jdGlvbi4gKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJDQVNFQ01QIDEgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJkdXAgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSRFVQIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJmdGltZSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJGVElNRSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyaWNtcCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJQ01QIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJuY2FzZWNtcCBmdW5jdGlvbi4gKi8KKy8qICNkZWZpbmUgSEFWRV9TVFJOQ0FTRUNNUCAxICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RybmljbXAgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSTklDTVAgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cnN0ciBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJTVFIgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cnRvbGwgZnVuY3Rpb24uICovCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX1dBVENPTUNfXykgfHwgZGVmaW5lZChfX1BPQ0NfXykKKyNkZWZpbmUgSEFWRV9TVFJUT0xMIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHRjZ2V0YXR0ciBmdW5jdGlvbi4gKi8KKy8qICNkZWZpbmUgSEFWRV9UQ0dFVEFUVFIgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHRjc2V0YXR0ciBmdW5jdGlvbi4gKi8KKy8qICNkZWZpbmUgSEFWRV9UQ1NFVEFUVFIgMSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHV0aW1lIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBfX0JPUkxBTkRDX18KKyNkZWZpbmUgSEFWRV9VVElNRSAxCisjZW5kaWYKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisjZGVmaW5lIEdFVE5BTUVJTkZPX1FVQUxfQVJHMSBjb25zdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzEgc3RydWN0IHNvY2thZGRyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkcyIHNvY2tsZW5fdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyA0IGFuZCA2IGZvciBnZXRuYW1laW5mby4gKi8KKyNkZWZpbmUgR0VUTkFNRUlORk9fVFlQRV9BUkc0NiBEV09SRAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDcgZm9yIGdldG5hbWVpbmZvLiAqLworI2RlZmluZSBHRVROQU1FSU5GT19UWVBFX0FSRzcgaW50CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcmVjdiBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUNWIDEKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMSBTT0NLRVQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAyIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMiBjaGFyICoKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHMyBpbnQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2LiAqLworI2RlZmluZSBSRUNWX1RZUEVfQVJHNCBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdi4gKi8KKyNkZWZpbmUgUkVDVl9UWVBFX1JFVFYgaW50CisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcmVjdmZyb20gZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUkVDVkZST00gMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzEgU09DS0VUCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyAyIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkcyIGNoYXIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHJlY3Zmcm9tLiAqLworI2RlZmluZSBSRUNWRlJPTV9UWVBFX0FSRzQgaW50CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA1IGZvciByZWN2ZnJvbS4gKi8KKyNkZWZpbmUgUkVDVkZST01fVFlQRV9BUkc1IHN0cnVjdCBzb2NrYWRkcgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfQVJHNiBpbnQKKworLyogRGVmaW5lIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBmb3IgcmVjdmZyb20uICovCisjZGVmaW5lIFJFQ1ZGUk9NX1RZUEVfUkVUViBpbnQKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZW5kIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFTkQgMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcxIFNPQ0tFVAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1FVQUxfQVJHMiBjb25zdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkcyIGNoYXIgKgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkczIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDQgZm9yIHNlbmQuICovCisjZGVmaW5lIFNFTkRfVFlQRV9BUkc0IGludAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciBzZW5kLiAqLworI2RlZmluZSBTRU5EX1RZUEVfUkVUViBpbnQKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgIFRZUEVERUYgUkVQTEFDRU1FTlRTICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgaWYgaW5fYWRkcl90IGlzIG5vdCBhbiBhdmFpbGFibGUgJ3R5cGVkZWZlZCcgdHlwZS4gKi8KKyNkZWZpbmUgaW5fYWRkcl90IHVuc2lnbmVkIGxvbmcKKworLyogRGVmaW5lIHRvIHRoZSByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMgKGludCBvciB2b2lkKS4gKi8KKyNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCisKKy8qIERlZmluZSBpZiBzc2l6ZV90IGlzIG5vdCBhbiBhdmFpbGFibGUgJ3R5cGVkZWZlZCcgdHlwZS4gKi8KKyNpZm5kZWYgX1NTSVpFX1RfREVGSU5FRAorIyAgaWYgKGRlZmluZWQoX19XQVRDT01DX18pICYmIChfX1dBVENPTUNfXyA+PSAxMjQwKSkgfHwgXAorICAgICAgZGVmaW5lZChfX1BPQ0NfXykgfHwgXAorICAgICAgZGVmaW5lZChfX01JTkdXMzJfXykKKyMgIGVsaWYgZGVmaW5lZChfV0lONjQpCisjICAgIGRlZmluZSBfU1NJWkVfVF9ERUZJTkVECisjICAgIGRlZmluZSBzc2l6ZV90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIF9TU0laRV9UX0RFRklORUQKKyMgICAgZGVmaW5lIHNzaXplX3QgaW50CisjICBlbmRpZgorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRZUEUgU0laRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRGVmaW5lIHRvIHRoZSBzaXplIG9mIGBpbnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9JTlQgNAorCisvKiBEZWZpbmUgdG8gdGhlIHNpemUgb2YgYGxvbmcgZG91YmxlJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfTE9OR19ET1VCTEUgMTYKKworLyogRGVmaW5lIHRvIHRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOCAqLworCisvKiBEZWZpbmUgdG8gdGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgorCisvKiBEZWZpbmUgdG8gdGhlIHNpemUgb2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNpZiBkZWZpbmVkKF9XSU42NCkKKyMgIGRlZmluZSBTSVpFT0ZfU0laRV9UIDgKKyNlbHNlCisjICBkZWZpbmUgU0laRU9GX1NJWkVfVCA0CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgIFNUUlVDVCBSRUxBVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UuICovCisjaWYgIWRlZmluZWQoX19TQUxGT1JEQ19fKSAmJiAhZGVmaW5lZChfX0JPUkxBTkRDX18pCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgMQorI2VuZGlmCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBzdHJ1Y3QgdGltZXZhbC4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVZBTCAxCisKKy8qIERlZmluZSBpZiBzdHJ1Y3Qgc29ja2FkZHJfaW42IGhhcyB0aGUgc2luNl9zY29wZV9pZCBtZW1iZXIuICovCisjZGVmaW5lIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgMQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgIEJTRC1zdHlsZSBsd0lQIFRDUC9JUCBzdGFjayBTUEVDSUZJQyAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSB0byB1c2UgQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrLiAqLworLyogI2RlZmluZSBVU0VfTFdJUFNPQ0sgMSAqLworCisjaWZkZWYgVVNFX0xXSVBTT0NLCisjICB1bmRlZiBVU0VfV0lOU09DSworIyAgdW5kZWYgSEFWRV9XSU5TT0NLX0gKKyMgIHVuZGVmIEhBVkVfV0lOU09DSzJfSAorIyAgdW5kZWYgSEFWRV9XUzJUQ1BJUF9ICisjICB1bmRlZiBIQVZFX0VSUk5PX0gKKyMgIHVuZGVmIEhBVkVfR0VUSE9TVE5BTUUKKyMgIHVuZGVmIEhBVkVfR0VUTkFNRUlORk8KKyMgIHVuZGVmIExXSVBfUE9TSVhfU09DS0VUU19JT19OQU1FUworIyAgdW5kZWYgUkVDVl9UWVBFX0FSRzEKKyMgIHVuZGVmIFJFQ1ZfVFlQRV9BUkczCisjICB1bmRlZiBTRU5EX1RZUEVfQVJHMQorIyAgdW5kZWYgU0VORF9UWVBFX0FSRzMKKyMgIGRlZmluZSBIQVZFX0ZSRUVBRERSSU5GTworIyAgZGVmaW5lIEhBVkVfR0VUQUREUklORk8KKyMgIGRlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUKKyMgIGRlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUgorIyAgZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzYKKyMgIGRlZmluZSBMV0lQX1BPU0lYX1NPQ0tFVFNfSU9fTkFNRVMgMAorIyAgZGVmaW5lIFJFQ1ZfVFlQRV9BUkcxIGludAorIyAgZGVmaW5lIFJFQ1ZfVFlQRV9BUkczIHNpemVfdAorIyAgZGVmaW5lIFNFTkRfVFlQRV9BUkcxIGludAorIyAgZGVmaW5lIFNFTkRfVFlQRV9BUkczIHNpemVfdAorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgV2F0dC0zMiB0Y3AvaXAgU1BFQ0lGSUMgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIFVTRV9XQVRUMzIKKyAgI2luY2x1ZGUgPHRjcC5oPgorICAjdW5kZWYgYnl0ZQorICAjdW5kZWYgd29yZAorICAjdW5kZWYgVVNFX1dJTlNPQ0sKKyAgI3VuZGVmIEhBVkVfV0lOU09DS19ICisgICN1bmRlZiBIQVZFX1dJTlNPQ0syX0gKKyAgI3VuZGVmIEhBVkVfV1MyVENQSVBfSAorICAjZGVmaW5lIEhBVkVfR0VUQUREUklORk8KKyAgI2RlZmluZSBIQVZFX0dFVE5BTUVJTkZPCisgICNkZWZpbmUgSEFWRV9TWVNfSU9DVExfSAorICAjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9ICisgICNkZWZpbmUgSEFWRV9ORVRJTkVUX0lOX0gKKyAgI2RlZmluZSBIQVZFX05FVERCX0gKKyAgI2RlZmluZSBIQVZFX0FSUEFfSU5FVF9ICisgICNkZWZpbmUgSEFWRV9GUkVFQUREUklORk8KKyAgI2RlZmluZSBTT0NLRVQgaW50CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVSIFNQRUNJRklDICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERlZmluZSB0byBub3RoaW5nIGlmIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgJ2NvbnN0JyBxdWFsaWZpZXIuICovCisvKiAjZGVmaW5lIGNvbnN0ICovCisKKy8qIERlZmluZSB0byBub3RoaW5nIGlmIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgJ3ZvbGF0aWxlJyBxdWFsaWZpZXIuICovCisvKiAjZGVmaW5lIHZvbGF0aWxlICovCisKKy8qIFdpbmRvd3Mgc2hvdWxkIG5vdCBoYXZlIEhBVkVfR01USU1FX1IgZGVmaW5lZCAqLworLyogI3VuZGVmIEhBVkVfR01USU1FX1IgKi8KKworLyogRGVmaW5lIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBDOTkgdmFyaWFkaWMgbWFjcm8gc3R5bGUuICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE0MDApCisjZGVmaW5lIEhBVkVfVkFSSUFESUNfTUFDUk9TX0M5OSAxCisjZW5kaWYKKworLyogRGVmaW5lIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgJ2xvbmcgbG9uZycgZGF0YSB0eXBlLiAqLworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pCisjZGVmaW5lIEhBVkVfTE9OR0xPTkcgMQorI2VuZGlmCisKKy8qIERlZmluZSB0byBhdm9pZCBWUzIwMDUgY29tcGxhaW5pbmcgYWJvdXQgcG9ydGFibGUgQyBmdW5jdGlvbnMuICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE0MDApCisjZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSAxCisjZGVmaW5lIF9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUgMQorI2VuZGlmCisKKy8qIFZTMjAwNSBhbmQgbGF0ZXIgZGFmYXVsdCBzaXplIGZvciB0aW1lX3QgaXMgNjQtYml0LCB1bmxlc3MKKyAgIF9VU0VfMzJCSVRfVElNRV9UIGhhcyBiZWVuIGRlZmluZWQgdG8gZ2V0IGEgMzItYml0IHRpbWVfdC4gKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTQwMCkKKyMgIGlmbmRlZiBfVVNFXzMyQklUX1RJTUVfVAorIyAgICBkZWZpbmUgU0laRU9GX1RJTUVfVCA4CisjICBlbHNlCisjICAgIGRlZmluZSBTSVpFT0ZfVElNRV9UIDQKKyMgIGVuZGlmCisjZW5kaWYKKworLyogT2ZmaWNpYWxseSwgTWljcm9zb2Z0J3MgV2luZG93cyBTREsgdmVyc2lvbnMgNi5YIGRvIG5vdCBzdXBwb3J0IFdpbmRvd3MKKyAgIDIwMDAgYXMgYSBzdXBwb3J0ZWQgYnVpbGQgdGFyZ2V0LiBWUzIwMDggZGVmYXVsdCBpbnN0YWxsYXRpb25zIHByb3ZpZGUKKyAgIGFuIGVtYmVkZGVkIFdpbmRvd3MgU0RLIHY2LjBBIGFsb25nIHdpdGggdGhlIGNsYWltIHRoYXQgV2luZG93cyAyMDAwIGlzCisgICBhIHZhbGlkIGJ1aWxkIHRhcmdldCBmb3IgVlMyMDA4LiBQb3B1bGFyIGJlbGllZiBpcyB0aGF0IGJpbmFyaWVzIGJ1aWx0CisgICB3aXRoIFZTMjAwOCB1c2luZyBXaW5kb3dzIFNESyB2ZXJzaW9ucyA2LlggYW5kIFdpbmRvd3MgMjAwMCBhcyBhIGJ1aWxkCisgICB0YXJnZXQgYXJlIGZ1bmN0aW9uYWwuICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE1MDApCisjICBkZWZpbmUgVlMyMDA4X01JTl9UQVJHRVQgMHgwNTAwCisjZW5kaWYKKworLyogV2hlbiBubyBidWlsZCB0YXJnZXQgaXMgc3BlY2lmaWVkIFZTMjAwOCBkZWZhdWx0IGJ1aWxkIHRhcmdldCBpcyBXaW5kb3dzCisgICBWaXN0YSwgd2hpY2ggbGVhdmVzIG91dCBldmVuIFdpbnNvd3MgWFAuIElmIG5vIGJ1aWxkIHRhcmdldCBoYXMgYmVlbiBnaXZlbgorICAgZm9yIFZTMjAwOCB3ZSB3aWxsIHRhcmdldCB0aGUgbWluaW11bSBPZmZpY2lhbGx5IHN1cHBvcnRlZCBidWlsZCB0YXJnZXQsCisgICB3aGljaCBoYXBwZW5zIHRvIGJlIFdpbmRvd3MgWFAuICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE1MDApCisjICBkZWZpbmUgVlMyMDA4X0RFRl9UQVJHRVQgIDB4MDUwMQorI2VuZGlmCisKKy8qIFZTMjAwOCBkZWZhdWx0IHRhcmdldCBzZXR0aW5ncyBhbmQgbWluaW11bSBidWlsZCB0YXJnZXQgY2hlY2suICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDE1MDApCisjICBpZm5kZWYgX1dJTjMyX1dJTk5UCisjICAgIGRlZmluZSBfV0lOMzJfV0lOTlQgVlMyMDA4X0RFRl9UQVJHRVQKKyMgIGVuZGlmCisjICBpZm5kZWYgV0lOVkVSCisjICAgIGRlZmluZSBXSU5WRVIgVlMyMDA4X0RFRl9UQVJHRVQKKyMgIGVuZGlmCisjICBpZiAoX1dJTjMyX1dJTk5UIDwgVlMyMDA4X01JTl9UQVJHRVQpIHx8IChXSU5WRVIgPCBWUzIwMDhfTUlOX1RBUkdFVCkKKyMgICAgZXJyb3IgVlMyMDA4IGRvZXMgbm90IHN1cHBvcnQgV2luZG93cyBidWlsZCB0YXJnZXRzIHByaW9yIHRvIFdpbmRvd3MgMjAwMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXaGVuIG5vIGJ1aWxkIHRhcmdldCBpcyBzcGVjaWZpZWQgUGVsbGVzIEMgNS4wMCBhbmQgbGF0ZXIgZGVmYXVsdCBidWlsZAorICAgdGFyZ2V0IGlzIFdpbmRvd3MgVmlzdGEuIFdlIG92ZXJyaWRlIGRlZmF1bHQgdGFyZ2V0IHRvIGJlIFdpbmRvd3MgMjAwMC4gKi8KKyNpZiBkZWZpbmVkKF9fUE9DQ19fKSAmJiAoX19QT0NDX18gPj0gNTAwKQorIyAgaWZuZGVmIF9XSU4zMl9XSU5OVAorIyAgICBkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDUwMAorIyAgZW5kaWYKKyMgIGlmbmRlZiBXSU5WRVIKKyMgICAgZGVmaW5lIFdJTlZFUiAweDA1MDAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogQXZhaWxhYmlsaXR5IG9mIGZyZWVhZGRyaW5mbywgZ2V0YWRkcmluZm8gYW5kIGdldG5hbWVpbmZvIGZ1bmN0aW9ucyBpcworICAgcXVpdGUgY29udm9sdXRlZCwgY29tcGlsZXIgZGVwZW5kZW50IGFuZCBldmVuIGJ1aWxkIHRhcmdldCBkZXBlbmRlbnQuICovCisjaWYgZGVmaW5lZChIQVZFX1dTMlRDUElQX0gpCisjICBpZiBkZWZpbmVkKF9fUE9DQ19fKQorIyAgICBkZWZpbmUgSEFWRV9GUkVFQUREUklORk8gICAgICAgICAgIDEKKyMgICAgZGVmaW5lIEhBVkVfR0VUQUREUklORk8gICAgICAgICAgICAxCisjICAgIGRlZmluZSBIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUgMQorIyAgICBkZWZpbmUgSEFWRV9HRVROQU1FSU5GTyAgICAgICAgICAgIDEKKyMgIGVsaWYgZGVmaW5lZChfV0lOMzJfV0lOTlQpICYmIChfV0lOMzJfV0lOTlQgPj0gMHgwNTAxKQorIyAgICBkZWZpbmUgSEFWRV9GUkVFQUREUklORk8gICAgICAgICAgIDEKKyMgICAgZGVmaW5lIEhBVkVfR0VUQUREUklORk8gICAgICAgICAgICAxCisjICAgIGRlZmluZSBIQVZFX0dFVEFERFJJTkZPX1RIUkVBRFNBRkUgMQorIyAgICBkZWZpbmUgSEFWRV9HRVROQU1FSU5GTyAgICAgICAgICAgIDEKKyMgIGVsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDEyMDApCisjICAgIGRlZmluZSBIQVZFX0ZSRUVBRERSSU5GTyAgICAgICAgICAgMQorIyAgICBkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAgICAgICAgICAgIDEKKyMgICAgZGVmaW5lIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSAxCisjICAgIGRlZmluZSBIQVZFX0dFVE5BTUVJTkZPICAgICAgICAgICAgMQorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1BPQ0NfXykKKyMgIGlmbmRlZiBfTVNDX1ZFUgorIyAgICBlcnJvciBNaWNyb3NvZnQgZXh0ZW5zaW9ucyAvWmUgY29tcGlsZXIgb3B0aW9uIGlzIHJlcXVpcmVkCisjICBlbmRpZgorIyAgaWZuZGVmIF9fUE9DQ19fT0xETkFNRVMKKyMgICAgZXJyb3IgQ29tcGF0aWJpbGl0eSBuYW1lcyAvR28gY29tcGlsZXIgb3B0aW9uIGlzIHJlcXVpcmVkCisjICBlbmRpZgorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgTEFSR0UgRklMRSBTVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpCisjICBpZiAoX01TQ19WRVIgPj0gOTAwKSAmJiAoX0lOVEVHUkFMX01BWF9CSVRTID49IDY0KQorIyAgICBkZWZpbmUgVVNFX1dJTjMyX0xBUkdFX0ZJTEVTCisjICBlbHNlCisjICAgIGRlZmluZSBVU0VfV0lOMzJfU01BTExfRklMRVMKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pICYmICFkZWZpbmVkKFVTRV9XSU4zMl9MQVJHRV9GSUxFUykKKyMgIGRlZmluZSBVU0VfV0lOMzJfTEFSR0VfRklMRVMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoVVNFX1dJTjMyX0xBUkdFX0ZJTEVTKQorIyAgZGVmaW5lIFVTRV9XSU4zMl9MQVJHRV9GSUxFUworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fUE9DQ19fKQorIyAgdW5kZWYgVVNFX1dJTjMyX0xBUkdFX0ZJTEVTCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFVTRV9XSU4zMl9MQVJHRV9GSUxFUykgJiYgIWRlZmluZWQoVVNFX1dJTjMyX1NNQUxMX0ZJTEVTKQorIyAgZGVmaW5lIFVTRV9XSU4zMl9TTUFMTF9GSUxFUworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICBETlMgUkVTT0xWRVIgU1BFQ0lBTFRZICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIFVuZGVmaW5lIGJvdGggVVNFX0FSRVMgYW5kIFVTRV9USFJFQURTX1dJTjMyIGZvciBzeW5jaHJvbm91cyBETlMuCisgKi8KKworLyogRGVmaW5lIHRvIGVuYWJsZSBjLWFyZXMgYXN5bmNocm9ub3VzIEROUyBsb29rdXBzLiAqLworLyogI2RlZmluZSBVU0VfQVJFUyAxICovCisKKy8qIERlZmluZSB0byBlbmFibGUgdGhyZWFkZWQgYXN5bmNocm9ub3VzIEROUyBsb29rdXBzLiAqLworI2RlZmluZSBVU0VfVEhSRUFEU19XSU4zMiAxCisKKyNpZiBkZWZpbmVkKFVTRV9BUkVTKSAmJiBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKQorIyAgZXJyb3IgIk9ubHkgb25lIEROUyBsb29rdXAgc3BlY2lhbHR5IG1heSBiZSBkZWZpbmVkIGF0IG1vc3QiCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQIFNVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDVVJMX0hBU19OT1ZFTExfTERBUFNESykgfHwgZGVmaW5lZChDVVJMX0hBU19NT1pJTExBX0xEQVBTREspCisjdW5kZWYgQ1VSTF9MREFQX1dJTgorI2RlZmluZSBIQVZFX0xEQVBfU1NMX0ggMQorI2RlZmluZSBIQVZFX0xEQVBfVVJMX1BBUlNFIDEKKyNlbGlmIGRlZmluZWQoQ1VSTF9IQVNfT1BFTkxEQVBfTERBUFNESykKKyN1bmRlZiBDVVJMX0xEQVBfV0lOCisjZGVmaW5lIEhBVkVfTERBUF9VUkxfUEFSU0UgMQorI2Vsc2UKKyN1bmRlZiBIQVZFX0xEQVBfVVJMX1BBUlNFCisjZGVmaW5lIENVUkxfTERBUF9XSU4gMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiBkZWZpbmVkKENVUkxfTERBUF9XSU4pCisjaWYgX19XQVRDT01DX18gPCAxMjgwCisjZGVmaW5lIFdJTkJFUkFQSSAgX19kZWNsc3BlYyhjZGVjbCkKKyNkZWZpbmUgV0lOTERBUEFQSSBfX2RlY2xzcGVjKGNkZWNsKQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19QT0NDX18pICYmIGRlZmluZWQoQ1VSTF9MREFQX1dJTikKKyMgIGRlZmluZSBDVVJMX0RJU0FCTEVfTERBUCAxCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgIEFERElUSU9OQUwgREVGSU5JVElPTlMgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBEZWZpbmUgY3B1LW1hY2hpbmUtT1MgKi8KKyN1bmRlZiBPUworI2lmIGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfX2kzODZfXykgLyogeDg2IChNU1ZDIG9yIGdjYykgKi8KKyNkZWZpbmUgT1MgImkzODYtcGMtd2luMzIiCisjZWxpZiBkZWZpbmVkKF9NX1g2NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAvKiB4ODZfNjQgKE1TVkMgPj0yMDA1IG9yIGdjYykgKi8KKyNkZWZpbmUgT1MgIng4Nl82NC1wYy13aW4zMiIKKyNlbGlmIGRlZmluZWQoX01fSUE2NCkgLyogSXRhbml1bSAqLworI2RlZmluZSBPUyAiaWE2NC1wYy13aW4zMiIKKyNlbHNlCisjZGVmaW5lIE9TICJ1bmtub3duLXBjLXdpbjMyIgorI2VuZGlmCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFICJjdXJsIgorCisvKiBJZiB5b3Ugd2FudCB0byBidWlsZCBjdXJsIHdpdGggdGhlIGJ1aWx0LWluIG1hbnVhbCAqLworI2RlZmluZSBVU0VfTUFOVUFMIDEKKworI2lmIGRlZmluZWQoX19QT0NDX18pIHx8IChVU0VfSVBWNikKKyMgIGRlZmluZSBFTkFCTEVfSVBWNiAxCisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0NPTkZJR19XSU4zMl9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvY3VybC5yYyBiL2N1cmwtNy4yNS4wL3NyYy9jdXJsLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYjU5YmQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvY3VybC5yYwpAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDx3aW52ZXIuaD4KKyNpbmNsdWRlICJ0b29sX3ZlcnNpb24uaCIKKworTEFOR1VBR0UgIDB4MDksMHgwMQorCisjZGVmaW5lIFJDX1ZFUlNJT04gIENVUkxfVkVSU0lPTl9NQUpPUiwgQ1VSTF9WRVJTSU9OX01JTk9SLCBDVVJMX1ZFUlNJT05fUEFUQ0gsIDAKKworVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCisgIEZJTEVWRVJTSU9OICAgICBSQ19WRVJTSU9OCisgIFBST0RVQ1RWRVJTSU9OICBSQ19WRVJTSU9OCisgIEZJTEVGTEFHU01BU0sgICAweDNmTAorI2lmIGRlZmluZWQoREVCVUdCVUlMRCkgfHwgZGVmaW5lZChfREVCVUcpCisgIEZJTEVGTEFHUyAxCisjZWxzZQorICBGSUxFRkxBR1MgMAorI2VuZGlmCisgIEZJTEVPUyAgICAgIFZPU19fV0lORE9XUzMyCisgIEZJTEVUWVBFICAgIFZGVF9BUFAKKyAgRklMRVNVQlRZUEUgMHgwTAorCitCRUdJTgorICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCisgIEJFR0lOCisgICAgQkxPQ0sgIjA0MDkwNGIwIgorICAgIEJFR0lOCisgICAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAgICAgICJjVVJMLCBodHRwOi8vY3VybC5oYXh4LnNlL1wwIgorICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICAiVGhlIGNVUkwgZXhlY3V0YWJsZVwwIgorICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgICAgICBDVVJMX1ZFUlNJT04gIlwwIgorICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICAgICAiY3VybFwwIgorICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAiY3VybC5leGVcMCIKKyAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICAgICAgIlRoZSBjVVJMIGV4ZWN1dGFibGVcMCIKKyAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsICAgQ1VSTF9WRVJTSU9OICJcMCIKKyAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICAgIqkgIiBDVVJMX0NPUFlSSUdIVCAiXDAiCisgICAgICBWQUxVRSAiTGljZW5zZSIsICAgICAgICAgICJodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWxcMCIKKyAgICBFTkQKKyAgRU5ECisKKyAgQkxPQ0sgIlZhckZpbGVJbmZvIgorICBCRUdJTgorICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAxMjAwCisgIEVORAorRU5ECmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvY3VybF9jb25maWcuaC5pbiBiL2N1cmwtNy4yNS4wL3NyYy9jdXJsX2NvbmZpZy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MjM5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvY3VybF9jb25maWcuaC5pbgpAQCAtMCwwICsxLDEwNjcgQEAKKy8qIGxpYi9jdXJsX2NvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworCisvKiB3aGVuIGJ1aWxkaW5nIGxpYmN1cmwgaXRzZWxmICovCisjdW5kZWYgQlVJTERJTkdfTElCQ1VSTAorCisvKiBMb2NhdGlvbiBvZiBkZWZhdWx0IGNhIGJ1bmRsZSAqLworI3VuZGVmIENVUkxfQ0FfQlVORExFCisKKy8qIExvY2F0aW9uIG9mIGRlZmF1bHQgY2EgcGF0aCAqLworI3VuZGVmIENVUkxfQ0FfUEFUSAorCisvKiB0byBkaXNhYmxlIGNvb2tpZXMgc3VwcG9ydCAqLworI3VuZGVmIENVUkxfRElTQUJMRV9DT09LSUVTCisKKy8qIHRvIGRpc2FibGUgY3J5cHRvZ3JhcGhpYyBhdXRoZW50aWNhdGlvbiAqLworI3VuZGVmIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSAorCisvKiB0byBkaXNhYmxlIERJQ1QgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfRElDVAorCisvKiB0byBkaXNhYmxlIEZJTEUgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfRklMRQorCisvKiB0byBkaXNhYmxlIEZUUCAqLworI3VuZGVmIENVUkxfRElTQUJMRV9GVFAKKworLyogdG8gZGlzYWJsZSBHb3BoZXIgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfR09QSEVSCisKKy8qIHRvIGRpc2FibGUgSFRUUCAqLworI3VuZGVmIENVUkxfRElTQUJMRV9IVFRQCisKKy8qIHRvIGRpc2FibGUgSU1BUCAqLworI3VuZGVmIENVUkxfRElTQUJMRV9JTUFQCisKKy8qIHRvIGRpc2FibGUgTERBUCAqLworI3VuZGVmIENVUkxfRElTQUJMRV9MREFQCisKKy8qIHRvIGRpc2FibGUgTERBUFMgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfTERBUFMKKworLyogdG8gZGlzYWJsZSAtLWxpYmN1cmwgQyBjb2RlIGdlbmVyYXRpb24gb3B0aW9uICovCisjdW5kZWYgQ1VSTF9ESVNBQkxFX0xJQkNVUkxfT1BUSU9OCisKKy8qIHRvIGRpc2FibGUgUE9QMyAqLworI3VuZGVmIENVUkxfRElTQUJMRV9QT1AzCisKKy8qIHRvIGRpc2FibGUgcHJveGllcyAqLworI3VuZGVmIENVUkxfRElTQUJMRV9QUk9YWQorCisvKiB0byBkaXNhYmxlIFJUU1AgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfUlRTUAorCisvKiB0byBkaXNhYmxlIFNNVFAgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfU01UUAorCisvKiB0byBkaXNhYmxlIFRFTE5FVCAqLworI3VuZGVmIENVUkxfRElTQUJMRV9URUxORVQKKworLyogdG8gZGlzYWJsZSBURlRQICovCisjdW5kZWYgQ1VSTF9ESVNBQkxFX1RGVFAKKworLyogdG8gZGlzYWJsZSBUTFMtU1JQIGF1dGhlbnRpY2F0aW9uICovCisjdW5kZWYgQ1VSTF9ESVNBQkxFX1RMU19TUlAKKworLyogdG8gZGlzYWJsZSB2ZXJib3NlIHN0cmluZ3MgKi8KKyN1bmRlZiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTCisKKy8qIHRvIG1ha2UgYSBzeW1ib2wgdmlzaWJsZSAqLworI3VuZGVmIENVUkxfRVhURVJOX1NZTUJPTAorCisvKiB0byBlbmFibGUgaGlkZGVuIHN5bWJvbHMgKi8KKyN1bmRlZiBDVVJMX0hJRERFTl9TWU1CT0xTCisKKy8qIFVzZSBXaW5kb3dzIExEQVAgaW1wbGVtZW50YXRpb24gKi8KKyN1bmRlZiBDVVJMX0xEQVBfV0lOCisKKy8qIHdoZW4gbm90IGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgKi8KKyN1bmRlZiBDVVJMX1NUQVRJQ0xJQgorCisvKiB5b3VyIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vbiBzb2NrZXQgcGF0aG5hbWUgKi8KKyN1bmRlZiBFR0RfU09DS0VUCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgSVB2NiBzdXBwb3J0ICovCisjdW5kZWYgRU5BQkxFX0lQVjYKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHF1YWxpZmllciBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisjdW5kZWYgR0VUTkFNRUlORk9fUVVBTF9BUkcxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgZ2V0bmFtZWluZm8uICovCisjdW5kZWYgR0VUTkFNRUlORk9fVFlQRV9BUkcxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgZ2V0bmFtZWluZm8uICovCisjdW5kZWYgR0VUTkFNRUlORk9fVFlQRV9BUkcyCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDQgYW5kIDYgZm9yIGdldG5hbWVpbmZvLiAqLworI3VuZGVmIEdFVE5BTUVJTkZPX1RZUEVfQVJHNDYKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA3IGZvciBnZXRuYW1laW5mby4gKi8KKyN1bmRlZiBHRVROQU1FSU5GT19UWVBFX0FSRzcKKworLyogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGdldHNlcnZieXBvcnRfciAqLworI3VuZGVmIEdFVFNFUlZCWVBPUlRfUl9BUkdTCisKKy8qIFNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHBhc3MgdG8gZ2V0c2VydmJ5cG9ydF9yICovCisjdW5kZWYgR0VUU0VSVkJZUE9SVF9SX0JVRlNJWkUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGFsYXJtIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQUxBUk0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhbGxvY2EuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9BTExPQ0FfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0FSUEFfSU5FVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXJwYS90ZnRwLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfQVJQQV9URlRQX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhc3NlcnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9BU1NFUlRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYmFzZW5hbWUgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9CQVNFTkFNRQorCisvKiBEZWZpbmUgdG8gMSBpZiBib29sIGlzIGFuIGF2YWlsYWJsZSB0eXBlLiAqLworI3VuZGVmIEhBVkVfQk9PTF9UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBjbG9ja19nZXR0aW1lIGZ1bmN0aW9uIGFuZCBtb25vdG9uaWMgdGltZXIuICovCisjdW5kZWYgSEFWRV9DTE9DS19HRVRUSU1FX01PTk9UT05JQworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgY2xvc2Vzb2NrZXQgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DTE9TRVNPQ0tFVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQ2xvc2VTb2NrZXQgY2FtZWwgY2FzZSBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NMT1NFU09DS0VUX0NBTUVMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBjb25uZWN0IGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQ09OTkVDVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYENSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NSWVBUT19DTEVBTlVQX0FMTF9FWF9EQVRBCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Y3J5cHRvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfQ1JZUFRPX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ERVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRExGQ05fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEVOR0lORV9jbGVhbnVwJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0VOR0lORV9DTEVBTlVQCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0VOR0lORV9MT0FEX0JVSUxUSU5fRU5HSU5FUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRVJSTk9fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVyci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VSUl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmY250bCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZDTlRMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9GQ05UTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBmY250bCBPX05PTkJMT0NLIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRkNOVExfT19OT05CTE9DSworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZmRvcGVuIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRkRPUEVOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZm9yaycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GT1JLCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBmcmVlYWRkcmluZm8gZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GUkVFQUREUklORk8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZyZWVpZmFkZHJzIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRlJFRUlGQUREUlMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZzZXR4YXR0ciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZTRVRYQVRUUgorCisvKiBmc2V0eGF0dHIoKSB0YWtlcyA1IGFyZ3MgKi8KKyN1bmRlZiBIQVZFX0ZTRVRYQVRUUl81CisKKy8qIGZzZXR4YXR0cigpIHRha2VzIDYgYXJncyAqLworI3VuZGVmIEhBVkVfRlNFVFhBVFRSXzYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZ0cnVuY2F0ZSBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZUUlVOQ0FURQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2FpX3N0cmVycm9yIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0FJX1NUUkVSUk9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBnZXRhZGRyaW5mbyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEFERFJJTkZPCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBnZXRhZGRyaW5mbyBmdW5jdGlvbiBpcyB0aHJlYWRzYWZlLiAqLworI3VuZGVmIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGV1aWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VURVVJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5YWRkciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieWFkZHJfciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUgorCisvKiBnZXRob3N0YnlhZGRyX3IoKSB0YWtlcyA1IGFyZ3MgKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWUFERFJfUl81CisKKy8qIGdldGhvc3RieWFkZHJfcigpIHRha2VzIDcgYXJncyAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZQUREUl9SXzcKKworLyogZ2V0aG9zdGJ5YWRkcl9yKCkgdGFrZXMgOCBhcmdzICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllBRERSX1JfOAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5bmFtZSBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldGhvc3RieW5hbWVfciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUgorCisvKiBnZXRob3N0YnluYW1lX3IoKSB0YWtlcyAzIGFyZ3MgKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zCisKKy8qIGdldGhvc3RieW5hbWVfcigpIHRha2VzIDUgYXJncyAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzUKKworLyogZ2V0aG9zdGJ5bmFtZV9yKCkgdGFrZXMgNiBhcmdzICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FX1JfNgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdG5hbWUgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRIT1NUTkFNRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgZ2V0aWZhZGRycyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVElGQUREUlMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldG5hbWVpbmZvIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUTkFNRUlORk8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwYXNzX3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUUEFTU19SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHBpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRQUElECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHJvdG9ieW5hbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUUFJPVE9CWU5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwd3VpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRQV1VJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHJsaW1pdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRSTElNSVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGdldHNlcnZieXBvcnRfciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFNFUlZCWVBPUlRfUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHRpbWVvZmRheScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGdsaWJjLXN0eWxlIHN0cmVycm9yX3IgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HTElCQ19TVFJFUlJPUl9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBnbXRpbWVfciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dNVElNRV9SCisKKy8qIGlmIHlvdSBoYXZlIHRoZSBmdW5jdGlvbiBnbnV0bHNfc3JwX3ZlcmlmaWVyICovCisjdW5kZWYgSEFWRV9HTlVUTFNfU1JQCisKKy8qIGlmIHlvdSBoYXZlIHRoZSBnc3NhcGkgbGlicmFyaWVzICovCisjdW5kZWYgSEFWRV9HU1NBUEkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnc3NhcGkvZ3NzYXBpX2dlbmVyaWMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9HU1NBUElfR1NTQVBJX0dFTkVSSUNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGdzc2FwaS9nc3NhcGkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9HU1NBUElfR1NTQVBJX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnc3NhcGkvZ3NzYXBpX2tyYjUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9HU1NBUElfR1NTQVBJX0tSQjVfSAorCisvKiBpZiB5b3UgaGF2ZSB0aGUgR05VIGdzc2FwaSBsaWJyYXJpZXMgKi8KKyN1bmRlZiBIQVZFX0dTU0dOVQorCisvKiBpZiB5b3UgaGF2ZSB0aGUgSGVpbWRhbCBnc3NhcGkgbGlicmFyaWVzICovCisjdW5kZWYgSEFWRV9HU1NIRUlNREFMCisKKy8qIGlmIHlvdSBoYXZlIHRoZSBNSVQgZ3NzYXBpIGxpYnJhcmllcyAqLworI3VuZGVmIEhBVkVfR1NTTUlUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRuYV9zdHJlcnJvcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JRE5BX1NUUkVSUk9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRuX2ZyZWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSUROX0ZSRUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpZG4tZnJlZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lETl9GUkVFX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpZmFkZHJzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSUZBRERSU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9hZGRyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lORVRfQUREUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW5ldF9udG9hX3IgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JTkVUX05UT0FfUgorCisvKiBpbmV0X250b2FfcigpIHRha2VzIDIgYXJncyAqLworI3VuZGVmIEhBVkVfSU5FVF9OVE9BX1JfMgorCisvKiBpbmV0X250b2FfcigpIHRha2VzIDMgYXJncyAqLworI3VuZGVmIEhBVkVfSU5FVF9OVE9BX1JfMworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfbnRvcCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lORVRfTlRPUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIElQdjYgY2FwYWJsZSB3b3JraW5nIGluZXRfcHRvbiBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lORVRfUFRPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSU5UVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW9jdGwgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JT0NUTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgaW9jdGxzb2NrZXQgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JT0NUTFNPQ0tFVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgSW9jdGxTb2NrZXQgY2FtZWwgY2FzZSBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBJb2N0bFNvY2tldCBjYW1lbCBjYXNlIEZJT05CSU8gZnVuY3Rpb24uCisgICAqLworI3VuZGVmIEhBVkVfSU9DVExTT0NLRVRfQ0FNRUxfRklPTkJJTworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgaW9jdGxzb2NrZXQgRklPTkJJTyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lPQ1RMU09DS0VUX0ZJT05CSU8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGlvY3RsIEZJT05CSU8gZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JT0NUTF9GSU9OQklPCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBpb2N0bCBTSU9DR0lGQUREUiBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lPQ1RMX1NJT0NHSUZBRERSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JT19ICisKKy8qIGlmIHlvdSBoYXZlIHRoZSBLZXJiZXJvczQgbGlicmFyaWVzIChpbmNsdWRpbmcgLWxkZXMpICovCisjdW5kZWYgSEFWRV9LUkI0CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3JiX2dldF9vdXJfaXBfZm9yX3JlYWxtJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0tSQl9HRVRfT1VSX0lQX0ZPUl9SRUFMTQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGtyYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0tSQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBsYmVyLmggaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MQkVSX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGxkYXBzc2wuaCBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xEQVBTU0xfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbGRhcC5oIGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTERBUF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGRhcF9pbml0X2ZkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xEQVBfSU5JVF9GRAorCisvKiBVc2UgTERBUFMgaW1wbGVtZW50YXRpb24gKi8KKyN1bmRlZiBIQVZFX0xEQVBfU1NMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBsZGFwX3NzbC5oIGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTERBUF9TU0xfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxkYXBfdXJsX3BhcnNlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xEQVBfVVJMX1BBUlNFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGliZ2VuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTElCR0VOX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZG4nIGxpYnJhcnkgKC1saWRuKS4gKi8KKyN1bmRlZiBIQVZFX0xJQklETgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlc29sdicgbGlicmFyeSAoLWxyZXNvbHYpLiAqLworI3VuZGVmIEhBVkVfTElCUkVTT0xWCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVzb2x2ZScgbGlicmFyeSAoLWxyZXNvbHZlKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlJFU09MVkUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJydG1wL3J0bXAuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSUJSVE1QX1JUTVBfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNzaDInIGxpYnJhcnkgKC1sc3NoMikuICovCisjdW5kZWYgSEFWRV9MSUJTU0gyCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGlic3NoMl9leGl0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xJQlNTSDJfRVhJVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpYnNzaDIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSUJTU0gyX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsaWJzc2gyX2luaXQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTElCU1NIMl9JTklUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGlic3NoMl9zY3Bfc2VuZDY0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xJQlNTSDJfU0NQX1NFTkQ2NAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxpYnNzaDJfc2Vzc2lvbl9oYW5kc2hha2UnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTElCU1NIMl9TRVNTSU9OX0hBTkRTSEFLRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxpYnNzaDJfdmVyc2lvbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9MSUJTU0gyX1ZFUlNJT04KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzc2wnIGxpYnJhcnkgKC1sc3NsKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNTTAorCisvKiBpZiB6bGliIGlzIGF2YWlsYWJsZSAqLworI3VuZGVmIEhBVkVfTElCWgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTUlUU19ICisKKy8qIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgTEwgKi8KKyN1bmRlZiBIQVZFX0xMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bG9jYWxlLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTE9DQUxFX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGxvY2FsdGltZV9yIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTE9DQUxUSU1FX1IKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAnbG9uZyBsb25nJyBkYXRhIHR5cGUuICovCisjdW5kZWYgSEFWRV9MT05HTE9ORworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbWFsbG9jLmggaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NQUxMT0NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbWVtb3J5LmggaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NRU1PUllfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgbWVtcmNociBmdW5jdGlvbiBvciBtYWNyby4gKi8KKyN1bmRlZiBIQVZFX01FTVJDSFIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1TR19OT1NJR05BTCBmbGFnLiAqLworI3VuZGVmIEhBVkVfTVNHX05PU0lHTkFMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0ZGIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVREQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVElORVRfSU5fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvdGNwLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUSU5FVF9UQ1BfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9pZi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVF9JRl9ICisKKy8qIERlZmluZSB0byAxIGlmIE5JX1dJVEhTQ09QRUlEIGV4aXN0cyBhbmQgd29ya3MuICovCisjdW5kZWYgSEFWRV9OSV9XSVRIU0NPUEVJRAorCisvKiBpZiB5b3UgaGF2ZSBhbiBvbGQgTUlUIGdzc2FwaSBsaWJyYXJ5LCBsYWNraW5nIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFCisgICAqLworI3VuZGVmIEhBVkVfT0xEX0dTU01JVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvY3J5cHRvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9DUllQVE9fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZW5naW5lLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9FTkdJTkVfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZXJyLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9FUlJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcGVtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9QRU1fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcGtjczEyLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9QS0NTMTJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvcnNhLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9SU0FfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvc3NsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfT1BFTlNTTF9TU0xfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wveDUwOS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX09QRU5TU0xfWDUwOV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cGVtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUEVNX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwZXJyb3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUEVSUk9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGlwZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QSVBFCisKKy8qIGlmIHlvdSBoYXZlIHRoZSBmdW5jdGlvbiBQSzExX0NyZWF0ZUdlbmVyaWNPYmplY3QgKi8KKyN1bmRlZiBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgcG9sbCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BPTEwKKworLyogSWYgeW91IGhhdmUgYSBmaW5lIHBvbGwgKi8KKyN1bmRlZiBIQVZFX1BPTExfRklORQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBvbGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9QT0xMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIFBPU0lYLXN0eWxlIHN0cmVycm9yX3IgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QT1NJWF9TVFJFUlJPUl9SCisKKy8qIGlmIHlvdSBoYXZlIDxwdGhyZWFkLmg+ICovCisjdW5kZWYgSEFWRV9QVEhSRUFEX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwd2QuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9QV0RfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFJBTkRfZWdkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1JBTkRfRUdECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgUkFORF9zY3JlZW4nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkFORF9TQ1JFRU4KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBSQU5EX3N0YXR1cycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SQU5EX1NUQVRVUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgcmVjdiBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1JFQ1YKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHJlY3Zmcm9tIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkVDVkZST00KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxyc2EuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9SU0FfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2VsZWN0IGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VMRUNUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzZW5kIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VORAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNldGptcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NFVEpNUF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVExPQ0FMRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldG1vZGUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUTU9ERQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHJsaW1pdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRSTElNSVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNldHNvY2tvcHQgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRTT0NLT1BUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBzZXRzb2Nrb3B0IFNPX05PTkJMT0NLIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUU09DS09QVF9TT19OT05CTE9DSworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNndHR5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU0dUVFlfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc2lnYWN0aW9uIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0lHQUNUSU9OCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzaWdpbnRlcnJ1cHQgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TSUdJTlRFUlJVUFQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHNpZ25hbCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NJR05BTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNpZ25hbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NJR05BTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzaWdzZXRqbXAgZnVuY3Rpb24gb3IgbWFjcm8uICovCisjdW5kZWYgSEFWRV9TSUdTRVRKTVAKKworLyogRGVmaW5lIHRvIDEgaWYgc2lnX2F0b21pY190IGlzIGFuIGF2YWlsYWJsZSB0eXBlZGVmLiAqLworI3VuZGVmIEhBVkVfU0lHX0FUT01JQ19UCisKKy8qIERlZmluZSB0byAxIGlmIHNpZ19hdG9taWNfdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgdm9sYXRpbGUuICovCisjdW5kZWYgSEFWRV9TSUdfQVRPTUlDX1RfVk9MQVRJTEUKKworLyogRGVmaW5lIHRvIDEgaWYgc3RydWN0IHNvY2thZGRyX2luNiBoYXMgdGhlIHNpbjZfc2NvcGVfaWQgbWVtYmVyICovCisjdW5kZWYgSEFWRV9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc29ja2V0IGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU09DS0VUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzb2NrZXRwYWlyIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU09DS0VUUEFJUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NPQ0tFVF9ICisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSBTUE5FR08gbGlicmFyeSBmYm9wZW5zc2wgKi8KKyN1bmRlZiBIQVZFX1NQTkVHTworCisvKiBpZiB5b3UgaGF2ZSB0aGUgZnVuY3Rpb24gU1JQX0NhbGNfY2xpZW50X2tleSAqLworI3VuZGVmIEhBVkVfU1NMRUFZX1NSUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFNTTHYyX2NsaWVudF9tZXRob2QnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1NMVjJfQ0xJRU5UX01FVEhPRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFNTTF9nZXRfc2h1dGRvd24nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1NMX0dFVF9TSFVURE9XTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNzbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NTTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkYm9vbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUREJPT0xfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURElOVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJT19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RETElCX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmNhc2VjbXAgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJDQVNFQ01QCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJjYXNlc3RyIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSQ0FTRVNUUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyY21waSBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkNNUEkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmR1cCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkRVUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RyZXJyb3JfciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkVSUk9SX1IKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cmljbXAgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJJQ01QCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBzdHJsY2F0IGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTENBVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjcHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTENQWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmNhc2VjbXAgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJOQ0FTRUNNUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmNtcGkgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJOQ01QSQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybmljbXAgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJOSUNNUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cm9wdHMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJPUFRTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHN0cnN0ciBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUlNUUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RydG9rX3IgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJUT0tfUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RydG9sbCBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUlRPTEwKKworLyogaWYgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgaXMgZGVmaW5lZCAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHRpbWV2YWwgc3RydWN0LiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1RJTUVWQUwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZmlsaW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfRklMSU9fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pb2N0bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19JT0NUTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1BBUkFNX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19QT0xMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcmVzb3VyY2UuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfUkVTT1VSQ0VfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU0VMRUNUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TT0NLSU9fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NUQVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RJTUVfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19UWVBFU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Vpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19VSU9fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91bi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19VTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1VUSU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvd2FpdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19XQUlUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMveGF0dHIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfWEFUVFJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9URVJNSU9TX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9URVJNSU9fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9USU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0bGQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9UTERfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRsZF9zdHJlcnJvcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9UTERfU1RSRVJST1IKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bmFtZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9VTkFNRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1VOSVNURF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXRpbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVVRJTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1VUSU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgY29tcGlsZXIgc3VwcG9ydHMgQzk5IHZhcmlhZGljIG1hY3JvIHN0eWxlLiAqLworI3VuZGVmIEhBVkVfVkFSSUFESUNfTUFDUk9TX0M5OQorCisvKiBEZWZpbmUgdG8gMSBpZiBjb21waWxlciBzdXBwb3J0cyBvbGQgZ2NjIHZhcmlhZGljIG1hY3JvIHN0eWxlLiAqLworI3VuZGVmIEhBVkVfVkFSSUFESUNfTUFDUk9TX0dDQworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd2luYmVyLmggaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XSU5CRVJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd2luZG93cy5oIGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV0lORE9XU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5sZGFwLmggaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XSU5MREFQX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdpbnNvY2syLmggaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XSU5TT0NLMl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSB3aW5zb2NrLmggaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XSU5TT0NLX0gKKworLyogRGVmaW5lIHRoaXMgc3ltYm9sIGlmIHlvdXIgT1Mgc3VwcG9ydHMgY2hhbmdpbmcgdGhlIGNvbnRlbnRzIG9mIGFyZ3YgKi8KKyN1bmRlZiBIQVZFX1dSSVRBQkxFX0FSR1YKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIHdyaXRldiBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1dSSVRFVgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgd3MydGNwaXAuaCBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dTMlRDUElQX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx4NTA5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfWDUwOV9ICisKKy8qIGlmIHlvdSBoYXZlIHRoZSB6bGliLmggaGVhZGVyIGZpbGUgKi8KKyN1bmRlZiBIQVZFX1pMSUJfSAorCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgorICAgKi8KKyN1bmRlZiBMVF9PQkpESVIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGFyZSBidWlsZGluZyBhIG5hdGl2ZSBXaW5kb3dzIHRhcmdldC4gKi8KKyN1bmRlZiBOQVRJVkVfV0lORE9XUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0aGUgbGJlci5oIGhlYWRlciBmaWxlIGV2ZW4gd2l0aCBsZGFwLmggKi8KKyN1bmRlZiBORUVEX0xCRVJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0aGUgbWFsbG9jLmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIHN0ZGxpYi5oICovCisjdW5kZWYgTkVFRF9NQUxMT0NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0aGUgbWVtb3J5LmggaGVhZGVyIGZpbGUgZXZlbiB3aXRoIHN0ZGxpYi5oICovCisjdW5kZWYgTkVFRF9NRU1PUllfSAorCisvKiBEZWZpbmUgdG8gMSBpZiBfUkVFTlRSQU5UIHByZXByb2Nlc3NvciBzeW1ib2wgbXVzdCBiZSBkZWZpbmVkLiAqLworI3VuZGVmIE5FRURfUkVFTlRSQU5UCisKKy8qIERlZmluZSB0byAxIGlmIF9USFJFQURfU0FGRSBwcmVwcm9jZXNzb3Igc3ltYm9sIG11c3QgYmUgZGVmaW5lZC4gKi8KKyN1bmRlZiBORUVEX1RIUkVBRF9TQUZFCisKKy8qIERlZmluZSB0byBlbmFibGUgTlRMTSBkZWxlZ2F0aW9uIHRvIHdpbmJpbmQncyBudGxtX2F1dGggaGVscGVyLiAqLworI3VuZGVmIE5UTE1fV0JfRU5BQkxFRAorCisvKiBEZWZpbmUgYWJzb2x1dGUgZmlsZW5hbWUgZm9yIHdpbmJpbmQncyBudGxtX2F1dGggaGVscGVyLiAqLworI3VuZGVmIE5UTE1fV0JfRklMRQorCisvKiBjcHUtbWFjaGluZS1PUyAqLworI3VuZGVmIE9TCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI3VuZGVmIFBBQ0tBR0UKKworLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCisjdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfTkFNRQorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9TVFJJTkcKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVEFSTkFNRQorCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVVJMCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9WRVJTSU9OCisKKy8qIGEgc3VpdGFibGUgZmlsZSB0byByZWFkIHJhbmRvbSBkYXRhIGZyb20gKi8KKyN1bmRlZiBSQU5ET01fRklMRQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tLiAqLworI3VuZGVmIFJFQ1ZGUk9NX1FVQUxfQVJHNQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHJlY3Zmcm9tLiAqLworI3VuZGVmIFJFQ1ZGUk9NX1RZUEVfQVJHMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgMiBmb3IgcmVjdmZyb20uICovCisjdW5kZWYgUkVDVkZST01fVFlQRV9BUkcyCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDIgZm9yIHJlY3Zmcm9tIGlzIHZvaWQuICovCisjdW5kZWYgUkVDVkZST01fVFlQRV9BUkcyX0lTX1ZPSUQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciByZWN2ZnJvbS4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzMKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2ZnJvbS4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIHBvaW50ZWQgYnkgYXJnIDUgZm9yIHJlY3Zmcm9tLiAqLworI3VuZGVmIFJFQ1ZGUk9NX1RZUEVfQVJHNQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA1IGZvciByZWN2ZnJvbSBpcyB2b2lkLiAqLworI3VuZGVmIFJFQ1ZGUk9NX1RZUEVfQVJHNV9JU19WT0lECisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBwb2ludGVkIGJ5IGFyZyA2IGZvciByZWN2ZnJvbS4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzYKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHR5cGUgcG9pbnRlZCBieSBhcmcgNiBmb3IgcmVjdmZyb20gaXMgdm9pZC4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX0FSRzZfSVNfVk9JRAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciByZWN2ZnJvbS4gKi8KKyN1bmRlZiBSRUNWRlJPTV9UWVBFX1JFVFYKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciByZWN2LiAqLworI3VuZGVmIFJFQ1ZfVFlQRV9BUkcxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMiBmb3IgcmVjdi4gKi8KKyN1bmRlZiBSRUNWX1RZUEVfQVJHMgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHJlY3YuICovCisjdW5kZWYgUkVDVl9UWVBFX0FSRzMKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA0IGZvciByZWN2LiAqLworI3VuZGVmIFJFQ1ZfVFlQRV9BUkc0CisKKy8qIERlZmluZSB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUgZm9yIHJlY3YuICovCisjdW5kZWYgUkVDVl9UWVBFX1JFVFYKKworLyogRGVmaW5lIGFzIHRoZSByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMgKGBpbnQnIG9yIGB2b2lkJykuICovCisjdW5kZWYgUkVUU0lHVFlQRQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyA1IGZvciBzZWxlY3QuICovCisjdW5kZWYgU0VMRUNUX1FVQUxfQVJHNQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIHNlbGVjdC4gKi8KKyN1bmRlZiBTRUxFQ1RfVFlQRV9BUkcxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDIsIDMgYW5kIDQgZm9yIHNlbGVjdC4gKi8KKyN1bmRlZiBTRUxFQ1RfVFlQRV9BUkcyMzQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA1IGZvciBzZWxlY3QuICovCisjdW5kZWYgU0VMRUNUX1RZUEVfQVJHNQorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciBzZWxlY3QuICovCisjdW5kZWYgU0VMRUNUX1RZUEVfUkVUVgorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgcXVhbGlmaWVyIG9mIGFyZyAyIGZvciBzZW5kLiAqLworI3VuZGVmIFNFTkRfUVVBTF9BUkcyCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3Igc2VuZC4gKi8KKyN1bmRlZiBTRU5EX1RZUEVfQVJHMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDIgZm9yIHNlbmQuICovCisjdW5kZWYgU0VORF9UWVBFX0FSRzIKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAzIGZvciBzZW5kLiAqLworI3VuZGVmIFNFTkRfVFlQRV9BUkczCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgNCBmb3Igc2VuZC4gKi8KKyN1bmRlZiBTRU5EX1RZUEVfQVJHNAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGZvciBzZW5kLiAqLworI3VuZGVmIFNFTkRfVFlQRV9SRVRWCisKKy8qIFRoZSBzaXplIG9mIGBpbnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0lOVAorCisvKiBUaGUgc2l6ZSBvZiBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfTE9ORworCisvKiBUaGUgc2l6ZSBvZiBgb2ZmX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX09GRl9UCisKKy8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfU0hPUlQKKworLyogVGhlIHNpemUgb2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfU0laRV9UCisKKy8qIFRoZSBzaXplIG9mIGB0aW1lX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX1RJTUVfVAorCisvKiBUaGUgc2l6ZSBvZiBgdm9pZConLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX1ZPSURQCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI3VuZGVmIFNURENfSEVBREVSUworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDMgZm9yIHN0cmVycm9yX3IuICovCisjdW5kZWYgU1RSRVJST1JfUl9UWVBFX0FSRzMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCisjdW5kZWYgVElNRV9XSVRIX1NZU19USU1FCisKKy8qIERlZmluZSB0byBlbmFibGUgYy1hcmVzIHN1cHBvcnQgKi8KKyN1bmRlZiBVU0VfQVJFUworCisvKiBpZiBheFRMUyBpcyBlbmFibGVkICovCisjdW5kZWYgVVNFX0FYVExTCisKKy8qIERlZmluZSB0byBkaXNhYmxlIG5vbi1ibG9ja2luZyBzb2NrZXRzLiAqLworI3VuZGVmIFVTRV9CTE9DS0lOR19TT0NLRVRTCisKKy8qIGlmIEN5YVNTTCBpcyBlbmFibGVkICovCisjdW5kZWYgVVNFX0NZQVNTTAorCisvKiBpZiBHbnVUTFMgaXMgZW5hYmxlZCAqLworI3VuZGVmIFVTRV9HTlVUTFMKKworLyogaWYgR251VExTIHVzZXMgbmV0dGxlIGFzIGNyeXB0byBiYWNrZW5kICovCisjdW5kZWYgVVNFX0dOVVRMU19ORVRUTEUKKworLyogaWYgbGlicnRtcCBpcyBpbiB1c2UgKi8KKyN1bmRlZiBVU0VfTElCUlRNUAorCisvKiBpZiBsaWJTU0gyIGlzIGluIHVzZSAqLworI3VuZGVmIFVTRV9MSUJTU0gyCisKKy8qIElmIHlvdSB3YW50IHRvIGJ1aWxkIGN1cmwgd2l0aCB0aGUgYnVpbHQtaW4gbWFudWFsICovCisjdW5kZWYgVVNFX01BTlVBTAorCisvKiBpZiBOU1MgaXMgZW5hYmxlZCAqLworI3VuZGVmIFVTRV9OU1MKKworLyogVXNlIE9wZW5MREFQLXNwZWNpZmljIGNvZGUgKi8KKyN1bmRlZiBVU0VfT1BFTkxEQVAKKworLyogaWYgT3BlblNTTCBpcyBpbiB1c2UgKi8KKyN1bmRlZiBVU0VfT1BFTlNTTAorCisvKiBpZiBQb2xhclNTTCBpcyBlbmFibGVkICovCisjdW5kZWYgVVNFX1BPTEFSU1NMCisKKy8qIGlmIFNTTCBpcyBlbmFibGVkICovCisjdW5kZWYgVVNFX1NTTEVBWQorCisvKiBpZiB5b3Ugd2FudCBQT1NJWCB0aHJlYWRlZCBETlMgbG9va3VwICovCisjdW5kZWYgVVNFX1RIUkVBRFNfUE9TSVgKKworLyogVXNlIFRMUy1TUlAgYXV0aGVudGljYXRpb24gKi8KKyN1bmRlZiBVU0VfVExTX1NSUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgV2luZG93cyB0YXJnZXQgd2l0aCBsYXJnZSBmaWxlIHN1cHBvcnQuCisgICAqLworI3VuZGVmIFVTRV9XSU4zMl9MQVJHRV9GSUxFUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgV2luZG93cyB0YXJnZXQgd2l0aG91dCBsYXJnZSBmaWxlCisgICBzdXBwb3J0LiAqLworI3VuZGVmIFVTRV9XSU4zMl9TTUFMTF9GSUxFUworCisvKiB0byBlbmFibGUgU1NQSSBzdXBwb3J0ICovCisjdW5kZWYgVVNFX1dJTkRPV1NfU1NQSQorCisvKiBEZWZpbmUgdG8gMSBpZiB1c2luZyB5YVNTTCBpbiBPcGVuU1NMIGNvbXBhdGliaWxpdHkgbW9kZS4gKi8KKyN1bmRlZiBVU0VfWUFTU0xFTVVMCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KKyN1bmRlZiBWRVJTSU9OCisKKy8qIERlZmluZSB0byBhdm9pZCBhdXRvbWF0aWMgaW5jbHVzaW9uIG9mIHdpbnNvY2suaCAqLworI3VuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKworLyogRGVmaW5lIHRvIDEgaWYgT1MgaXMgQUlYLiAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyAgdW5kZWYgX0FMTF9TT1VSQ0UKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLworI3VuZGVmIF9GSUxFX09GRlNFVF9CSVRTCisKKy8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyN1bmRlZiBfTEFSR0VfRklMRVMKKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCisjdW5kZWYgY29uc3QKKworLyogVHlwZSB0byB1c2UgaW4gcGxhY2Ugb2YgaW5fYWRkcl90IHdoZW4gc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgaXQuICovCisjdW5kZWYgaW5fYWRkcl90CisKKy8qIERlZmluZSB0byBgX19pbmxpbmVfXycgb3IgYF9faW5saW5lJyBpZiB0aGF0J3Mgd2hhdCB0aGUgQyBjb21waWxlcgorICAgY2FsbHMgaXQsIG9yIHRvIG5vdGhpbmcgaWYgJ2lubGluZScgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBhbnkgbmFtZS4gICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjdW5kZWYgaW5saW5lCisjZW5kaWYKKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHNpemVfdAorCisvKiB0aGUgc2lnbmVkIHZlcnNpb24gb2Ygc2l6ZV90ICovCisjdW5kZWYgc3NpemVfdApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL2h1Z2VoZWxwLmMgYi9jdXJsLTcuMjUuMC9zcmMvaHVnZWhlbHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWMyZDVmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL2h1Z2VoZWxwLmMKQEAgLTAsMCArMSw3NTA0IEBACisjaW5jbHVkZSAic2V0dXAuaCIKKyNpZm5kZWYgSEFWRV9MSUJaCisvKgorICogTkVWRVIgRVZFUiBlZGl0IHRoaXMgbWFudWFsbHksIGZpeCB0aGUgbWtoZWxwLnBsIHNjcmlwdCBpbnN0ZWFkIQorICogR2VuZXJhdGlvbiB0aW1lOiBUaHUgTWFyICA4IDIwOjM4OjEzIDIwMTIKKyAqLworI2lmZGVmIFVTRV9NQU5VQUwKKyNpbmNsdWRlICJodWdlaGVscC5oIgordm9pZCBodWdlaGVscCh2b2lkKQoreworICAgZnB1dHMoCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF9cbiIKKyIgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFxcfCB8XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXF9fX3xcXF9fXy98X3wgXFxfXFxfX19fX3xcbiIKKyJcbiIKKyJOQU1FXG4iCisiICAgICAgIGN1cmwgLSB0cmFuc2ZlciBhIFVSTFxuIgorIlxuIgorIlNZTk9QU0lTXG4iCisiICAgICAgIGN1cmwgW29wdGlvbnNdIFtVUkwuLi5dXG4iCisiXG4iCisiREVTQ1JJUFRJT05cbiIKKyIgICAgICAgY3VybCAgaXMgIGEgdG9vbCB0byB0cmFuc2ZlciBkYXRhIGZyb20gb3IgdG8gYSBzZXJ2ZXIsIHVzaW5nIG9uZSBvZiB0aGVcbiIKKyIgICAgICAgc3VwcG9ydGVkIHByb3RvY29scyAoRElDVCwgRklMRSwgRlRQLCBGVFBTLCBHT1BIRVIsIEhUVFAsIEhUVFBTLCAgSU1BUCxcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgSU1BUFMsICBMREFQLCAgTERBUFMsICBQT1AzLCBQT1AzUywgUlRNUCwgUlRTUCwgU0NQLCBTRlRQLCBTTVRQLCBTTVRQUyxcbiIKKyIgICAgICAgVEVMTkVUIGFuZCBURlRQKS4gIFRoZSBjb21tYW5kIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aG91dCB1c2VyICBpbnRlci1cbiIKKyIgICAgICAgYWN0aW9uLlxuIgorIlxuIgorIiAgICAgICBjdXJsIG9mZmVycyBhIGJ1c2xvYWQgb2YgdXNlZnVsIHRyaWNrcyBsaWtlIHByb3h5IHN1cHBvcnQsIHVzZXIgYXV0aGVuLVxuIgorIiAgICAgICB0aWNhdGlvbiwgRlRQIHVwbG9hZCwgSFRUUCBwb3N0LCBTU0wgY29ubmVjdGlvbnMsIGNvb2tpZXMsIGZpbGUgIHRyYW5zLVxuIgorIiAgICAgICBmZXIgcmVzdW1lIGFuZCBtb3JlLiBBcyB5b3Ugd2lsbCBzZWUgYmVsb3csIHRoZSBudW1iZXIgb2YgZmVhdHVyZXMgd2lsbFxuIgorIiAgICAgICBtYWtlIHlvdXIgaGVhZCBzcGluIVxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICBjdXJsIGlzIHBvd2VyZWQgYnkgIGxpYmN1cmwgIGZvciAgYWxsICB0cmFuc2Zlci1yZWxhdGVkICBmZWF0dXJlcy4gIFNlZVxuIgorIiAgICAgICBsaWJjdXJsKDMpIGZvciBkZXRhaWxzLlxuIgorIlxuIgorIlVSTFxuIgorIiAgICAgICBUaGUgIFVSTCAgc3ludGF4IGlzIHByb3RvY29sLWRlcGVuZGVudC4gWW91J2xsIGZpbmQgYSBkZXRhaWxlZCBkZXNjcmlwLVxuIgorIiAgICAgICB0aW9uIGluIFJGQyAzOTg2LlxuIgorIlxuIgorIiAgICAgICBZb3UgY2FuIHNwZWNpZnkgbXVsdGlwbGUgVVJMcyBvciBwYXJ0cyBvZiBVUkxzICBieSAgd3JpdGluZyAgcGFydCAgc2V0c1xuIgorIiAgICAgICB3aXRoaW4gYnJhY2VzIGFzIGluOlxuIgorIlxuIgorIiAgICAgICAgaHR0cDovL3NpdGUue29uZSx0d28sdGhyZWV9LmNvbVxuIgorIlxuIgorIiAgICAgICBvciB5b3UgY2FuIGdldCBzZXF1ZW5jZXMgb2YgYWxwaGFudW1lcmljIHNlcmllcyBieSB1c2luZyBbXSBhcyBpbjpcbiIKKyJcbiIKKyIgICAgICAgIGZ0cDovL2Z0cC5udW1lcmljYWxzLmNvbS9maWxlWzEtMTAwXS50eHRcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgIGZ0cDovL2Z0cC5udW1lcmljYWxzLmNvbS9maWxlWzAwMS0xMDBdLnR4dCAgICAod2l0aCBsZWFkaW5nIHplcm9zKVxuIgorIiAgICAgICAgZnRwOi8vZnRwLmxldHRlcnMuY29tL2ZpbGVbYS16XS50eHRcbiIKKyJcbiIKKyIgICAgICAgTmVzdGVkICBzZXF1ZW5jZXMgIGFyZSBub3Qgc3VwcG9ydGVkLCBidXQgeW91IGNhbiB1c2Ugc2V2ZXJhbCBvbmVzIG5leHRcbiIKKyIgICAgICAgdG8gZWFjaCBvdGhlcjpcbiIKKyJcbiIKKyIgICAgICAgIGh0dHA6Ly9hbnkub3JnL2FyY2hpdmVbMTk5Ni0xOTk5XS92b2xbMS00XS9wYXJ0e2EsYixjfS5odG1sXG4iCisiXG4iCisiICAgICAgIFlvdSBjYW4gc3BlY2lmeSBhbnkgYW1vdW50IG9mIFVSTHMgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoZXkgIHdpbGwgIGJlXG4iCisiICAgICAgIGZldGNoZWQgaW4gYSBzZXF1ZW50aWFsIG1hbm5lciBpbiB0aGUgc3BlY2lmaWVkIG9yZGVyLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICBZb3UgIGNhbiAgc3BlY2lmeSBhIHN0ZXAgY291bnRlciBmb3IgdGhlIHJhbmdlcyB0byBnZXQgZXZlcnkgTnRoIG51bWJlclxuIgorIiAgICAgICBvciBsZXR0ZXI6XG4iCisiXG4iCisiICAgICAgICBodHRwOi8vd3d3Lm51bWVyaWNhbHMuY29tL2ZpbGVbMS0xMDA6MTBdLnR4dFxuIgorIiAgICAgICAgaHR0cDovL3d3dy5sZXR0ZXJzLmNvbS9maWxlW2EtejoyXS50eHRcbiIKKyJcbiIKKyIgICAgICAgSWYgeW91IHNwZWNpZnkgVVJMIHdpdGhvdXQgcHJvdG9jb2w6Ly8gcHJlZml4LCAgY3VybCAgd2lsbCAgYXR0ZW1wdCAgdG9cbiIKKyIgICAgICAgZ3Vlc3MgIHdoYXQgIHByb3RvY29sICB5b3UgbWlnaHQgd2FudC4gSXQgd2lsbCB0aGVuIGRlZmF1bHQgdG8gSFRUUCBidXRcbiIKKyIgICAgICAgdHJ5IG90aGVyIHByb3RvY29scyBiYXNlZCBvbiBvZnRlbi11c2VkIGhvc3QgbmFtZSBwcmVmaXhlcy4gIEZvciAgZXhhbS1cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgcGxlLCAgZm9yICBob3N0IG5hbWVzIHN0YXJ0aW5nIHdpdGggXCJmdHAuXCIgY3VybCB3aWxsIGFzc3VtZSB5b3Ugd2FudCB0b1xuIgorIiAgICAgICBzcGVhayBGVFAuXG4iCisiXG4iCisiICAgICAgIGN1cmwgd2lsbCBkbyBpdHMgYmVzdCB0byB1c2Ugd2hhdCB5b3UgcGFzcyB0byBpdCBhcyBhIFVSTC4gIEl0ICBpcyAgbm90XG4iCisiICAgICAgIHRyeWluZyAgdG8gIHZhbGlkYXRlIGl0IGFzIGEgc3ludGFjdGljYWxseSBjb3JyZWN0IFVSTCBieSBhbnkgbWVhbnMgYnV0XG4iCisiICAgICAgIGlzIGluc3RlYWQgdmVyeSBsaWJlcmFsIHdpdGggd2hhdCBpdCBhY2NlcHRzLlxuIgorIlxuIgorIiAgICAgICBDdXJsIHdpbGwgYXR0ZW1wdCB0byByZS11c2UgY29ubmVjdGlvbnMgZm9yIG11bHRpcGxlIGZpbGUgdHJhbnNmZXJzLCBzb1xuIgorIiAgICAgICB0aGF0ICBnZXR0aW5nIG1hbnkgZmlsZXMgZnJvbSB0aGUgc2FtZSBzZXJ2ZXIgd2lsbCBub3QgZG8gbXVsdGlwbGUgY29uLVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICBuZWN0cyAvIGhhbmRzaGFrZXMuIFRoaXMgaW1wcm92ZXMgc3BlZWQuIE9mIGNvdXJzZSB0aGlzIGlzIG9ubHkgZG9uZSBvblxuIgorIiAgICAgICBmaWxlcyAgc3BlY2lmaWVkICBvbiAgYSAgc2luZ2xlIGNvbW1hbmQgbGluZSBhbmQgY2Fubm90IGJlIHVzZWQgYmV0d2VlblxuIgorIiAgICAgICBzZXBhcmF0ZSBjdXJsIGludm9rZXMuXG4iCisiXG4iCisiUFJPR1JFU1MgTUVURVJcbiIKKyIgICAgICAgY3VybCBub3JtYWxseSBkaXNwbGF5cyBhIHByb2dyZXNzIG1ldGVyIGR1cmluZyAgb3BlcmF0aW9ucywgIGluZGljYXRpbmdcbiIKKyIgICAgICAgdGhlICBhbW91bnQgIG9mICB0cmFuc2ZlcnJlZCAgZGF0YSwgIHRyYW5zZmVyIHNwZWVkcyBhbmQgZXN0aW1hdGVkIHRpbWVcbiIKKyIgICAgICAgbGVmdCwgZXRjLlxuIgorIlxuIgorIiAgICAgICBjdXJsIGRpc3BsYXlzIHRoaXMgZGF0YSB0byB0aGUgdGVybWluYWwgYnkgZGVmYXVsdCwgc28gIGlmICB5b3UgIGludm9rZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICBjdXJsICB0byBkbyBhbiBvcGVyYXRpb24gYW5kIGl0IGlzIGFib3V0IHRvIHdyaXRlIGRhdGEgdG8gdGhlIHRlcm1pbmFsLFxuIgorIiAgICAgICBpdCBkaXNhYmxlcyB0aGUgcHJvZ3Jlc3MgbWV0ZXIgYXMgb3RoZXJ3aXNlIGl0IHdvdWxkIG1lc3MgdXAgdGhlIG91dHB1dFxuIgorIiAgICAgICBtaXhpbmcgcHJvZ3Jlc3MgbWV0ZXIgYW5kIHJlc3BvbnNlIGRhdGEuXG4iCisiXG4iCisiICAgICAgIElmIHlvdSB3YW50IGEgcHJvZ3Jlc3MgbWV0ZXIgZm9yIEhUVFAgUE9TVCBvciBQVVQgcmVxdWVzdHMsIHlvdSBuZWVkIHRvXG4iCisiICAgICAgIHJlZGlyZWN0IHRoZSByZXNwb25zZSBvdXRwdXQgdG8gYSBmaWxlLCB1c2luZyBzaGVsbCAgcmVkaXJlY3QgICg+KSwgIC1vXG4iCisiICAgICAgIFtmaWxlXSBvciBzaW1pbGFyLlxuIgorIlxuIgorIiAgICAgICBJdCAgaXMgbm90IHRoZSBzYW1lIGNhc2UgZm9yIEZUUCB1cGxvYWQgYXMgdGhhdCBvcGVyYXRpb24gZG9lcyBub3Qgc3BpdFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICBvdXQgYW55IHJlc3BvbnNlIGRhdGEgdG8gdGhlIHRlcm1pbmFsLlxuIgorIlxuIgorIiAgICAgICBJZiB5b3UgcHJlZmVyIGEgcHJvZ3Jlc3MgXCJiYXJcIiBpbnN0ZWFkIG9mIHRoZSByZWd1bGFyIG1ldGVyLCAtIyBpcyB5b3VyXG4iCisiICAgICAgIGZyaWVuZC5cbiIKKyJPUFRJT05TXG4iCisiICAgICAgIEluIGdlbmVyYWwsIGFsbCBib29sZWFuIG9wdGlvbnMgYXJlIGVuYWJsZWQgd2l0aCAtLW9wdGlvbiBhbmQgeWV0IGFnYWluXG4iCisiICAgICAgIGRpc2FibGVkIHdpdGggLS1uby1vcHRpb24uIFRoYXQgaXMsIHlvdSB1c2UgdGhlIGV4YWN0IHNhbWUgb3B0aW9uICBuYW1lXG4iCisiICAgICAgIGJ1dCBwcmVmaXggaXQgd2l0aCBcIm5vLVwiLiBIb3dldmVyLCBpbiB0aGlzIGxpc3Qgd2UgbW9zdGx5IG9ubHkgbGlzdCBhbmRcbiIKKyIgICAgICAgc2hvdyB0aGUgLS1vcHRpb24gdmVyc2lvbiBvZiB0aGVtLiAoVGhpcyBjb25jZXB0IHdpdGggLS1ubyBvcHRpb25zICB3YXNcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgYWRkZWQgIGluICA3LjE5LjAuICBQcmV2aW91c2x5ICBtb3N0ICBvcHRpb25zICB3ZXJlICB0b2dnbGVkICBvbi9vZmYgb25cbiIKKyIgICAgICAgcmVwZWF0ZWQgdXNlIG9mIHRoZSBzYW1lIGNvbW1hbmQgbGluZSBvcHRpb24uKVxuIgorIlxuIgorIiAgICAgICAtIywgLS1wcm9ncmVzcy1iYXJcbiIKKyIgICAgICAgICAgICAgIE1ha2UgY3VybCBkaXNwbGF5IHByb2dyZXNzIGFzIGEgc2ltcGxlIHByb2dyZXNzIGJhciAgaW5zdGVhZCAgb2ZcbiIKKyIgICAgICAgICAgICAgIHRoZSBzdGFuZGFyZCwgbW9yZSBpbmZvcm1hdGlvbmFsLCBtZXRlci5cbiIKKyJcbiIKKyIgICAgICAgLTAsIC0taHR0cDEuMFxuIgorIiAgICAgICAgICAgICAgKEhUVFApICBGb3JjZXMgY3VybCB0byBpc3N1ZSBpdHMgcmVxdWVzdHMgdXNpbmcgSFRUUCAxLjAgaW5zdGVhZFxuIgorIiAgICAgICAgICAgICAgb2YgdXNpbmcgaXRzIGludGVybmFsbHkgcHJlZmVycmVkOiBIVFRQIDEuMS5cbiIKKyJcbiIKKyIgICAgICAgLTEsIC0tdGxzdjFcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIChTU0wpIEZvcmNlcyBjdXJsIHRvIHVzZSBUTFMgdmVyc2lvbiAxIHdoZW4gbmVnb3RpYXRpbmcgIHdpdGggIGFcbiIKKyIgICAgICAgICAgICAgIHJlbW90ZSBUTFMgc2VydmVyLlxuIgorIlxuIgorIiAgICAgICAtMiwgLS1zc2x2MlxuIgorIiAgICAgICAgICAgICAgKFNTTCkgIEZvcmNlcyAgY3VybCB0byB1c2UgU1NMIHZlcnNpb24gMiB3aGVuIG5lZ290aWF0aW5nIHdpdGggYVxuIgorIiAgICAgICAgICAgICAgcmVtb3RlIFNTTCBzZXJ2ZXIuXG4iCisiXG4iCisiICAgICAgIC0zLCAtLXNzbHYzXG4iCisiICAgICAgICAgICAgICAoU1NMKSBGb3JjZXMgY3VybCB0byB1c2UgU1NMIHZlcnNpb24gMyB3aGVuIG5lZ290aWF0aW5nICB3aXRoICBhXG4iCisiICAgICAgICAgICAgICByZW1vdGUgU1NMIHNlcnZlci5cbiIKKyJcbiIKKyIgICAgICAgLTQsIC0taXB2NFxuIgorIiAgICAgICAgICAgICAgSWYgIGxpYmN1cmwgIGlzICBjYXBhYmxlICBvZiByZXNvbHZpbmcgYW4gYWRkcmVzcyB0byBtdWx0aXBsZSBJUFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgdmVyc2lvbnMgKHdoaWNoIGl0IGlzIGlmIGl0IGlzIElQdjYtY2FwYWJsZSksIHRoaXMgb3B0aW9uICB0ZWxsc1xuIgorIiAgICAgICAgICAgICAgbGliY3VybCB0byByZXNvbHZlIG5hbWVzIHRvIElQdjQgYWRkcmVzc2VzIG9ubHkuXG4iCisiXG4iCisiICAgICAgIC02LCAtLWlwdjZcbiIKKyIgICAgICAgICAgICAgIElmICBsaWJjdXJsICBpcyAgY2FwYWJsZSAgb2YgcmVzb2x2aW5nIGFuIGFkZHJlc3MgdG8gbXVsdGlwbGUgSVBcbiIKKyIgICAgICAgICAgICAgIHZlcnNpb25zICh3aGljaCBpdCBpcyBpZiBpdCBpcyBJUHY2LWNhcGFibGUpLCB0aGlzIG9wdGlvbiAgdGVsbHNcbiIKKyIgICAgICAgICAgICAgIGxpYmN1cmwgIHRvICByZXNvbHZlIG5hbWVzIHRvIElQdjYgYWRkcmVzc2VzIG9ubHkuICBkZWZhdWx0IHN0YS1cbiIKKyIgICAgICAgICAgICAgIHRpc3RpY3MuXG4iCisiXG4iCisiICAgICAgIC1hLCAtLWFwcGVuZFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgKEZUUC9TRlRQKSBXaGVuIHVzZWQgaW4gYW4gdXBsb2FkLCB0aGlzIHdpbGwgdGVsbCBjdXJsIHRvIGFwcGVuZFxuIgorIiAgICAgICAgICAgICAgdG8gIHRoZSAgdGFyZ2V0ICBmaWxlICBpbnN0ZWFkICBvZiAgb3ZlcndyaXRpbmcgIGl0LiBJZiB0aGUgZmlsZVxuIgorIiAgICAgICAgICAgICAgZG9lc24ndCBleGlzdCwgaXQgd2lsbCBiZSAgY3JlYXRlZC4gICBOb3RlICB0aGF0ICB0aGlzICBmbGFnICBpc1xuIgorIiAgICAgICAgICAgICAgaWdub3JlZCBieSBzb21lIFNTSCBzZXJ2ZXJzIChpbmNsdWRpbmcgT3BlblNTSCkuXG4iCisiXG4iCisiICAgICAgIC1BLCAtLXVzZXItYWdlbnQgPGFnZW50IHN0cmluZz5cbiIKKyIgICAgICAgICAgICAgIChIVFRQKSBTcGVjaWZ5IHRoZSBVc2VyLUFnZW50IHN0cmluZyB0byBzZW5kIHRvIHRoZSBIVFRQIHNlcnZlci5cbiIKKyIgICAgICAgICAgICAgIFNvbWUgIGJhZGx5ICBkb25lICBDR0lzICBmYWlsICBpZiAgdGhpcyAgZmllbGQgIGlzbid0ICAgc2V0ICAgdG9cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIFwiTW96aWxsYS80LjBcIi4gIFRvICBlbmNvZGUgIGJsYW5rcyAgaW4gIHRoZSBzdHJpbmcsIHN1cnJvdW5kIHRoZVxuIgorIiAgICAgICAgICAgICAgc3RyaW5nIHdpdGggc2luZ2xlIHF1b3RlIG1hcmtzLiBUaGlzIGNhbiBhbHNvIGJlICBzZXQgIHdpdGggIHRoZVxuIgorIiAgICAgICAgICAgICAgLUgsIC0taGVhZGVyIG9wdGlvbiBvZiBjb3Vyc2UuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiAgdGhpcyAgb3B0aW9uIGlzIHNldCBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdGhlXG4iCisiICAgICAgICAgICAgICBvbmUgdGhhdCdzIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC0tYW55YXV0aFxuIgorIiAgICAgICAgICAgICAgKEhUVFApIFRlbGxzIGN1cmwgdG8gZmlndXJlIG91dCBhdXRoZW50aWNhdGlvbiBtZXRob2QgYnkgaXRzZWxmLFxuIgorIiAgICAgICAgICAgICAgYW5kICB1c2UgIHRoZSBtb3N0IHNlY3VyZSBvbmUgdGhlIHJlbW90ZSBzaXRlIGNsYWltcyB0byBzdXBwb3J0LlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGRvaW5nIGEgcmVxdWVzdCBhbmQgY2hlY2tpbmcgdGhlIHJlc3BvbnNlLVxuIgorIiAgICAgICAgICAgICAgaGVhZGVycywgIHRodXMgIHBvc3NpYmx5ICBpbmR1Y2luZyAgYW4gZXh0cmEgbmV0d29yayByb3VuZC10cmlwLlxuIgorIiAgICAgICAgICAgICAgVGhpcyBpcyAgdXNlZCAgaW5zdGVhZCAgb2YgIHNldHRpbmcgIGEgIHNwZWNpZmljICBhdXRoZW50aWNhdGlvblxuIgorIiAgICAgICAgICAgICAgbWV0aG9kLCAgd2hpY2ggIHlvdSAgY2FuICBkbyB3aXRoIC0tYmFzaWMsIC0tZGlnZXN0LCAtLW50bG0sIGFuZFxuIgorIiAgICAgICAgICAgICAgLS1uZWdvdGlhdGUuXG4iCisiXG4iCisiICAgICAgICAgICAgICBOb3RlIHRoYXQgdXNpbmcgLS1hbnlhdXRoIGlzIG5vdCByZWNvbW1lbmRlZCBpZiB5b3UgIGRvICB1cGxvYWRzXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBmcm9tICBzdGRpbiwgc2luY2UgaXQgbWF5IHJlcXVpcmUgZGF0YSB0byBiZSBzZW50IHR3aWNlIGFuZCB0aGVuXG4iCisiICAgICAgICAgICAgICB0aGUgY2xpZW50IG11c3QgYmUgYWJsZSB0byByZXdpbmQuIElmIHRoZSBuZWVkIHNob3VsZCBhcmlzZSB3aGVuXG4iCisiICAgICAgICAgICAgICB1cGxvYWRpbmcgZnJvbSBzdGRpbiwgdGhlIHVwbG9hZCBvcGVyYXRpb24gd2lsbCBmYWlsLlxuIgorIlxuIgorIiAgICAgICAtYiwgLS1jb29raWUgPG5hbWU9ZGF0YT5cbiIKKyIgICAgICAgICAgICAgIChIVFRQKSAgUGFzcyB0aGUgZGF0YSB0byB0aGUgSFRUUCBzZXJ2ZXIgYXMgYSBjb29raWUuIEl0IGlzIHN1cC1cbiIKKyIgICAgICAgICAgICAgIHBvc2VkbHkgdGhlIGRhdGEgcHJldmlvdXNseSByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgaW4gYSAgXCJTZXQtXG4iCisiICAgICAgICAgICAgICBDb29raWU6XCIgIGxpbmUuICBUaGUgZGF0YSBzaG91bGQgYmUgaW4gdGhlIGZvcm1hdCBcIk5BTUUxPVZBTFVFMTtcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIE5BTUUyPVZBTFVFMlwiLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgSWYgbm8gJz0nIHN5bWJvbCBpcyB1c2VkIGluIHRoZSBsaW5lLCBpdCBpcyB0cmVhdGVkIGFzICBhICBmaWxlLVxuIgorIiAgICAgICAgICAgICAgbmFtZSAgdG8gIHVzZSB0byByZWFkIHByZXZpb3VzbHkgc3RvcmVkIGNvb2tpZSBsaW5lcyBmcm9tLCB3aGljaFxuIgorIiAgICAgICAgICAgICAgc2hvdWxkIGJlIHVzZWQgaW4gdGhpcyBzZXNzaW9uIGlmIHRoZXkgbWF0Y2guIFVzaW5nIHRoaXMgIG1ldGhvZFxuIgorIiAgICAgICAgICAgICAgYWxzbyAgYWN0aXZhdGVzICB0aGUgXCJjb29raWUgcGFyc2VyXCIgd2hpY2ggd2lsbCBtYWtlIGN1cmwgcmVjb3JkXG4iCisiICAgICAgICAgICAgICBpbmNvbWluZyBjb29raWVzIHRvbywgd2hpY2ggbWF5IGJlIGhhbmR5IGlmIHlvdSdyZSB1c2luZyB0aGlzIGluXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBjb21iaW5hdGlvbiAgd2l0aCAgdGhlIC1MLCAtLWxvY2F0aW9uIG9wdGlvbi4gVGhlIGZpbGUgZm9ybWF0IG9mXG4iCisiICAgICAgICAgICAgICB0aGUgZmlsZSB0byByZWFkIGNvb2tpZXMgZnJvbSBzaG91bGQgYmUgcGxhaW4gIEhUVFAgIGhlYWRlcnMgIG9yXG4iCisiICAgICAgICAgICAgICB0aGUgTmV0c2NhcGUvTW96aWxsYSBjb29raWUgZmlsZSBmb3JtYXQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBOT1RFICB0aGF0ICB0aGUgZmlsZSBzcGVjaWZpZWQgd2l0aCAtYiwgLS1jb29raWUgaXMgb25seSB1c2VkIGFzXG4iCisiICAgICAgICAgICAgICBpbnB1dC4gTm8gY29va2llcyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgZmlsZS4gVG8gc3RvcmUgIGNvb2tpZXMsXG4iCisiICAgICAgICAgICAgICB1c2UgIHRoZSAtYywgLS1jb29raWUtamFyIG9wdGlvbiBvciB5b3UgY291bGQgZXZlbiBzYXZlIHRoZSBIVFRQXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBoZWFkZXJzIHRvIGEgZmlsZSB1c2luZyAtRCwgLS1kdW1wLWhlYWRlciFcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHNldCBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3Qgb25lIHdpbGwgIGJlICB0aGVcbiIKKyIgICAgICAgICAgICAgIG9uZSB0aGF0J3MgdXNlZC5cbiIKKyJcbiIKKyIgICAgICAgLUIsIC0tdXNlLWFzY2lpXG4iCisiICAgICAgICAgICAgICBFbmFibGUgIEFTQ0lJIHRyYW5zZmVyIHdoZW4gdXNpbmcgRlRQIG9yIExEQVAuIEZvciBGVFAsIHRoaXMgY2FuXG4iCisiICAgICAgICAgICAgICBhbHNvIGJlIGVuZm9yY2VkIGJ5IHVzaW5nIGFuIFVSTCB0aGF0IGVuZHMgd2l0aCBcIjt0eXBlPUFcIi4gIFRoaXNcbiIKKyIgICAgICAgICAgICAgIG9wdGlvbiAgY2F1c2VzICBkYXRhIHNlbnQgdG8gc3Rkb3V0IHRvIGJlIGluIHRleHQgbW9kZSBmb3Igd2luMzJcbiIKKyIgICAgICAgICAgICAgIHN5c3RlbXMuXG4iCisiXG4iCisiICAgICAgIC0tYmFzaWNcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIChIVFRQKSBUZWxscyBjdXJsIHRvIHVzZSBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGlzICB0aGVcbiIKKyIgICAgICAgICAgICAgIGRlZmF1bHQgIGFuZCB0aGlzIG9wdGlvbiBpcyB1c3VhbGx5IHBvaW50bGVzcywgdW5sZXNzIHlvdSB1c2UgaXRcbiIKKyIgICAgICAgICAgICAgIHRvIG92ZXJyaWRlIGEgIHByZXZpb3VzbHkgIHNldCAgb3B0aW9uICB0aGF0ICBzZXRzICBhICBkaWZmZXJlbnRcbiIKKyIgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uICBtZXRob2QgIChzdWNoICBhcyAtLW50bG0sIC0tZGlnZXN0LCBvciAtLW5lZ290aS1cbiIKKyIgICAgICAgICAgICAgIGF0ZSkuXG4iCisiXG4iCisiICAgICAgIC1jLCAtLWNvb2tpZS1qYXIgPGZpbGUgbmFtZT5cbiIKKyIgICAgICAgICAgICAgIFNwZWNpZnkgdG8gd2hpY2ggZmlsZSB5b3Ugd2FudCBjdXJsIHRvIHdyaXRlIGFsbCBjb29raWVzIGFmdGVyIGFcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGNvbXBsZXRlZCAgb3BlcmF0aW9uLiAgQ3VybCAgd3JpdGVzICBhbGwgY29va2llcyBwcmV2aW91c2x5IHJlYWRcbiIKKyIgICAgICAgICAgICAgIGZyb20gYSBzcGVjaWZpZWQgZmlsZSBhcyAgd2VsbCAgYXMgIGFsbCAgY29va2llcyAgcmVjZWl2ZWQgIGZyb21cbiIKKyIgICAgICAgICAgICAgIHJlbW90ZSBzZXJ2ZXIocykuIElmIG5vIGNvb2tpZXMgYXJlIGtub3duLCBubyBmaWxlIHdpbGwgYmUgd3JpdC1cbiIKKyIgICAgICAgICAgICAgIHRlbi4gVGhlIGZpbGUgd2lsbCBiZSB3cml0dGVuIHVzaW5nICB0aGUgIE5ldHNjYXBlICBjb29raWUgIGZpbGVcbiIKKyIgICAgICAgICAgICAgIGZvcm1hdC4gIElmICB5b3UgIHNldCAgdGhlICBmaWxlIG5hbWUgdG8gYSBzaW5nbGUgZGFzaCwgXCItXCIsIHRoZVxuIgorIiAgICAgICAgICAgICAgY29va2llcyB3aWxsIGJlIHdyaXR0ZW4gdG8gc3Rkb3V0LlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGxpbmUgb3B0aW9uIHdpbGwgYWN0aXZhdGUgdGhlICBjb29raWUgIGVuZ2luZSAgdGhhdFxuIgorIiAgICAgICAgICAgICAgbWFrZXMgY3VybCByZWNvcmQgYW5kIHVzZSBjb29raWVzLiBBbm90aGVyIHdheSB0byBhY3RpdmF0ZSBpdCBpc1xuIgorIiAgICAgICAgICAgICAgdG8gdXNlIHRoZSAtYiwgLS1jb29raWUgb3B0aW9uLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgSWYgdGhlIGNvb2tpZSBqYXIgY2FuJ3QgYmUgY3JlYXRlZCBvciB3cml0dGVuIHRvLCB0aGUgd2hvbGUgY3VybFxuIgorIiAgICAgICAgICAgICAgb3BlcmF0aW9uICB3b24ndCAgZmFpbCBvciBldmVuIHJlcG9ydCBhbiBlcnJvciBjbGVhcmx5LiBVc2luZyAtdlxuIgorIiAgICAgICAgICAgICAgd2lsbCBnZXQgYSB3YXJuaW5nIGRpc3BsYXllZCwgYnV0IHRoYXQgaXMgdGhlIG9ubHkgdmlzaWJsZSBmZWVkLVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgYmFjayB5b3UgZ2V0IGFib3V0IHRoaXMgcG9zc2libHkgbGV0aGFsIHNpdHVhdGlvbi5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmICB0aGlzICBvcHRpb24gIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgc3BlY2lmaWVkIGZpbGVcbiIKKyIgICAgICAgICAgICAgIG5hbWUgd2lsbCBiZSB1c2VkLlxuIgorIlxuIgorIiAgICAgICAtQywgLS1jb250aW51ZS1hdCA8b2Zmc2V0PlxuIgorIiAgICAgICAgICAgICAgQ29udGludWUvUmVzdW1lIGEgcHJldmlvdXMgZmlsZSB0cmFuc2ZlciBhdCAgdGhlICBnaXZlbiAgb2Zmc2V0LlxuIgorIiAgICAgICAgICAgICAgVGhlICBnaXZlbiAgb2Zmc2V0ICBpcyAgdGhlICBleGFjdCAgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZVxuIgorIiAgICAgICAgICAgICAgc2tpcHBlZCwgY291bnRpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzb3VyY2UgIGZpbGUgIGJlZm9yZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgaXQgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIGRlc3RpbmF0aW9uLiAgSWYgdXNlZCB3aXRoIHVwbG9hZHMsIHRoZVxuIgorIiAgICAgICAgICAgICAgRlRQIHNlcnZlciBjb21tYW5kIFNJWkUgd2lsbCBub3QgYmUgdXNlZCBieSBjdXJsLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgVXNlIFwiLUMgLVwiIHRvIHRlbGwgY3VybCB0byBhdXRvbWF0aWNhbGx5IGZpbmQgb3V0ICB3aGVyZS9ob3cgIHRvXG4iCisiICAgICAgICAgICAgICByZXN1bWUgIHRoZSAgdHJhbnNmZXIuIEl0IHRoZW4gdXNlcyB0aGUgZ2l2ZW4gb3V0cHV0L2lucHV0IGZpbGVzXG4iCisiICAgICAgICAgICAgICB0byBmaWd1cmUgdGhhdCBvdXQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC0tY2lwaGVycyA8bGlzdCBvZiBjaXBoZXJzPlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgKFNTTCkgU3BlY2lmaWVzIHdoaWNoIGNpcGhlcnMgdG8gdXNlIGluIHRoZSBjb25uZWN0aW9uLiBUaGUgbGlzdFxuIgorIiAgICAgICAgICAgICAgb2YgIGNpcGhlcnMgIG11c3QgIHNwZWNpZnkgIHZhbGlkIGNpcGhlcnMuIFJlYWQgdXAgb24gU1NMIGNpcGhlclxuIgorIiAgICAgICAgICAgICAgbGlzdCAgICAgICAgICBkZXRhaWxzICAgICAgICAgICBvbiAgICAgICAgICAgdGhpcyAgICAgICAgICAgVVJMOlxuIgorIiAgICAgICAgICAgICAgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2FwcHMvY2lwaGVycy5odG1sXG4iCisiXG4iCisiICAgICAgICAgICAgICBOU1MgIGNpcGhlcnMgIGFyZSAgZG9uZSBkaWZmZXJlbnRseSB0aGFuIE9wZW5TU0wgYW5kIEdudVRMUy4gVGhlXG4iCisiICAgICAgICAgICAgICBmdWxsIGxpc3Qgb2YgTlNTIGNpcGhlcnMgaXMgaW4gdGhlIE5TU0NpcGhlclN1aXRlIGVudHJ5IGF0ICB0aGlzXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBVUkw6IGh0dHA6Ly9kaXJlY3RvcnkuZmVkb3JhLnJlZGhhdC5jb20vZG9jcy9tb2RfbnNzLmh0bWwjRGlyZWMtXG4iCisiICAgICAgICAgICAgICB0aXZlc1xuIgorIlxuIgorIiAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBvdmVycmlkZVxuIgorIiAgICAgICAgICAgICAgdGhlIG90aGVycy5cbiIKKyJcbiIKKyIgICAgICAgLS1jb21wcmVzc2VkXG4iCisiICAgICAgICAgICAgICAoSFRUUCkgUmVxdWVzdCBhIGNvbXByZXNzZWQgcmVzcG9uc2UgdXNpbmcgb25lIG9mIHRoZSBhbGdvcml0aG1zXG4iCisiICAgICAgICAgICAgICBsaWJjdXJsIHN1cHBvcnRzLCBhbmQgc2F2ZSB0aGUgdW5jb21wcmVzc2VkIGRvY3VtZW50LiAgIElmICB0aGlzXG4iCisiICAgICAgICAgICAgICBvcHRpb24gIGlzICB1c2VkICBhbmQgIHRoZSBzZXJ2ZXIgc2VuZHMgYW4gdW5zdXBwb3J0ZWQgZW5jb2RpbmcsXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBjdXJsIHdpbGwgcmVwb3J0IGFuIGVycm9yLlxuIgorIlxuIgorIiAgICAgICAtLWNvbm5lY3QtdGltZW91dCA8c2Vjb25kcz5cbiIKKyIgICAgICAgICAgICAgIE1heGltdW0gdGltZSBpbiBzZWNvbmRzIHRoYXQgeW91IGFsbG93ICB0aGUgIGNvbm5lY3Rpb24gIHRvICB0aGVcbiIKKyIgICAgICAgICAgICAgIHNlcnZlciAgdG8gIHRha2UuICAgVGhpcyAgb25seSBsaW1pdHMgdGhlIGNvbm5lY3Rpb24gcGhhc2UsIG9uY2VcbiIKKyIgICAgICAgICAgICAgIGN1cmwgaGFzIGNvbm5lY3RlZCB0aGlzIG9wdGlvbiBpcyBvZiBubyBtb3JlIHVzZS4gU2VlICBhbHNvICB0aGVcbiIKKyIgICAgICAgICAgICAgIC1tLCAtLW1heC10aW1lIG9wdGlvbi5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC5cbiIKKyJcbiIKKyIgICAgICAgLS1jcmVhdGUtZGlyc1xuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgV2hlbiAgdXNlZCAgaW4gIGNvbmp1bmN0aW9uIHdpdGggdGhlIC1vIG9wdGlvbiwgY3VybCB3aWxsIGNyZWF0ZVxuIgorIiAgICAgICAgICAgICAgdGhlIG5lY2Vzc2FyeSBsb2NhbCBkaXJlY3RvcnkgaGllcmFyY2h5IGFzIG5lZWRlZC4gIFRoaXMgIG9wdGlvblxuIgorIiAgICAgICAgICAgICAgY3JlYXRlcyAgdGhlIGRpcnMgbWVudGlvbmVkIHdpdGggdGhlIC1vIG9wdGlvbiwgbm90aGluZyBlbHNlLiBJZlxuIgorIiAgICAgICAgICAgICAgdGhlIC1vIGZpbGUgbmFtZSB1c2VzIG5vIGRpciBvciBpZiB0aGUgZGlycyBpdCBtZW50aW9ucyAgYWxyZWFkeVxuIgorIiAgICAgICAgICAgICAgZXhpc3QsIG5vIGRpciB3aWxsIGJlIGNyZWF0ZWQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBUbyAgY3JlYXRlIHJlbW90ZSBkaXJlY3RvcmllcyB3aGVuIHVzaW5nIEZUUCBvciBTRlRQLCB0cnkgLS1mdHAtXG4iCisiICAgICAgICAgICAgICBjcmVhdGUtZGlycy5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgLS1jcmxmIChGVFApIENvbnZlcnQgTEYgdG8gQ1JMRiBpbiB1cGxvYWQuIFVzZWZ1bCBmb3IgTVZTIChPUy8zOTApLlxuIgorIlxuIgorIiAgICAgICAtLWNybGZpbGUgPGZpbGU+XG4iCisiICAgICAgICAgICAgICAoSFRUUFMvRlRQUykgUHJvdmlkZSBhIGZpbGUgdXNpbmcgUEVNIGZvcm1hdCB3aXRoIGEgIENlcnRpZmljYXRlXG4iCisiICAgICAgICAgICAgICBSZXZvY2F0aW9uICBMaXN0ICB0aGF0IG1heSBzcGVjaWZ5IHBlZXIgY2VydGlmaWNhdGVzIHRoYXQgYXJlIHRvXG4iCisiICAgICAgICAgICAgICBiZSBjb25zaWRlcmVkIHJldm9rZWQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgICAgICAgICAoQWRkZWQgaW4gNy4xOS43KVxuIgorIiAgICAgICAtZCwgLS1kYXRhIDxkYXRhPlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgKEhUVFApIFNlbmRzIHRoZSBzcGVjaWZpZWQgZGF0YSBpbiBhIFBPU1QgcmVxdWVzdCAgdG8gIHRoZSAgSFRUUFxuIgorIiAgICAgICAgICAgICAgc2VydmVyLCAgaW4gIHRoZSAgc2FtZSAgd2F5ICB0aGF0IGEgYnJvd3NlciBkb2VzIHdoZW4gYSB1c2VyIGhhc1xuIgorIiAgICAgICAgICAgICAgZmlsbGVkIGluIGFuIEhUTUwgZm9ybSBhbmQgcHJlc3NlcyB0aGUgc3VibWl0IGJ1dHRvbi4gVGhpcyAgd2lsbFxuIgorIiAgICAgICAgICAgICAgY2F1c2UgY3VybCB0byBwYXNzIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbnRlbnQtdHlwZVxuIgorIiAgICAgICAgICAgICAgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkLiAgQ29tcGFyZSB0byAtRiwgLS1mb3JtLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgLWQsIC0tZGF0YSBpcyB0aGUgc2FtZSBhcyAgLS1kYXRhLWFzY2lpLiAgVG8gIHBvc3QgIGRhdGEgIHB1cmVseVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgYmluYXJ5LCB5b3Ugc2hvdWxkIGluc3RlYWQgdXNlIHRoZSAtLWRhdGEtYmluYXJ5IG9wdGlvbi4gVG8gVVJMLVxuIgorIiAgICAgICAgICAgICAgZW5jb2RlIHRoZSB2YWx1ZSBvZiBhIGZvcm0gZmllbGQgeW91IG1heSB1c2UgLS1kYXRhLXVybGVuY29kZS5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmIGFueSBvZiB0aGVzZSBvcHRpb25zIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgIGNvbS1cbiIKKyIgICAgICAgICAgICAgIG1hbmQgIGxpbmUsICB0aGUgIGRhdGEgIHBpZWNlcyBzcGVjaWZpZWQgd2lsbCBiZSBtZXJnZWQgdG9nZXRoZXJcbiIKKyIgICAgICAgICAgICAgIHdpdGggYSBzZXBhcmF0aW5nICAmLXN5bWJvbC4gIFRodXMsICB1c2luZyAgJy1kICBuYW1lPWRhbmllbCAgLWRcbiIKKyIgICAgICAgICAgICAgIHNraWxsPWxvdXN5JyAgd291bGQgIGdlbmVyYXRlICBhICBwb3N0ICBjaHVuayAgdGhhdCAgbG9va3MgIGxpa2VcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgICduYW1lPWRhbmllbCZza2lsbD1sb3VzeScuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB5b3Ugc3RhcnQgdGhlIGRhdGEgd2l0aCB0aGUgbGV0dGVyIEAsIHRoZSByZXN0ICBzaG91bGQgIGJlICBhXG4iCisiICAgICAgICAgICAgICBmaWxlICBuYW1lICB0byByZWFkIHRoZSBkYXRhIGZyb20sIG9yIC0gaWYgeW91IHdhbnQgY3VybCB0byByZWFkXG4iCisiICAgICAgICAgICAgICB0aGUgZGF0YSBmcm9tIHN0ZGluLiAgVGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIG11c3QgIGFscmVhZHkgIGJlXG4iCisiICAgICAgICAgICAgICBVUkwtZW5jb2RlZC4gIE11bHRpcGxlIGZpbGVzIGNhbiBhbHNvIGJlIHNwZWNpZmllZC4gUG9zdGluZyBkYXRhXG4iCisiICAgICAgICAgICAgICBmcm9tIGEgZmlsZSBuYW1lZCAnZm9vYmFyJyB3b3VsZCB0aHVzIGJlIGRvbmUgd2l0aCAtLWRhdGEgIEBmb28tXG4iCisiICAgICAgICAgICAgICBiYXIuXG4iCisiXG4iCisiICAgICAgIC1ELCAtLWR1bXAtaGVhZGVyIDxmaWxlPlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgV3JpdGUgdGhlIHByb3RvY29sIGhlYWRlcnMgdG8gdGhlIHNwZWNpZmllZCBmaWxlLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhpcyAgb3B0aW9uICBpcyBoYW5keSB0byB1c2Ugd2hlbiB5b3Ugd2FudCB0byBzdG9yZSB0aGUgaGVhZGVyc1xuIgorIiAgICAgICAgICAgICAgdGhhdCBhIEhUVFAgc2l0ZSBzZW5kcyB0byB5b3UuIENvb2tpZXMgZnJvbSAgdGhlICBoZWFkZXJzICBjb3VsZFxuIgorIiAgICAgICAgICAgICAgdGhlbiAgYmUgIHJlYWQgIGluICBhICBzZWNvbmQgIGN1cmwgIGludm9jYXRpb24gYnkgdXNpbmcgdGhlIC1iLFxuIgorIiAgICAgICAgICAgICAgLS1jb29raWUgb3B0aW9uISBUaGUgLWMsIC0tY29va2llLWphciBvcHRpb24gaXMgaG93ZXZlciBhIGJldHRlclxuIgorIiAgICAgICAgICAgICAgd2F5IHRvIHN0b3JlIGNvb2tpZXMuXG4iCisiXG4iCisiICAgICAgICAgICAgICBXaGVuICB1c2VkICBpbiBGVFAsIHRoZSBGVFAgc2VydmVyIHJlc3BvbnNlIGxpbmVzIGFyZSBjb25zaWRlcmVkXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBiZWluZyBcImhlYWRlcnNcIiBhbmQgdGh1cyBhcmUgc2F2ZWQgdGhlcmUuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiICAgICAgICAgICAgICBJUCBcIi0tZGF0YS1hc2NpaSA8ZGF0YT5cIiBTZWUgLWQsIC0tZGF0YS5cbiIKKyJcbiIKKyIgICAgICAgLS1kYXRhLWJpbmFyeSA8ZGF0YT5cbiIKKyIgICAgICAgICAgICAgIChIVFRQKSAgVGhpcyAgcG9zdHMgZGF0YSBleGFjdGx5IGFzIHNwZWNpZmllZCB3aXRoIG5vIGV4dHJhIHByby1cbiIKKyIgICAgICAgICAgICAgIGNlc3Npbmcgd2hhdHNvZXZlci5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmIHlvdSBzdGFydCB0aGUgZGF0YSB3aXRoIHRoZSBsZXR0ZXIgQCwgdGhlIHJlc3QgIHNob3VsZCAgYmUgIGFcbiIKKyIgICAgICAgICAgICAgIGZpbGVuYW1lLiAgIERhdGEgIGlzICBwb3N0ZWQgaW4gYSBzaW1pbGFyIG1hbm5lciBhcyAtLWRhdGEtYXNjaWlcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGRvZXMsIGV4Y2VwdCB0aGF0IG5ld2xpbmVzIGFyZSAgcHJlc2VydmVkICBhbmQgIGNvbnZlcnNpb25zICBhcmVcbiIKKyIgICAgICAgICAgICAgIG5ldmVyIGRvbmUuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiAgdGhpcyAgb3B0aW9uICBpcyAgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgb25lcyBmb2xsb3dpbmcgdGhlXG4iCisiICAgICAgICAgICAgICBmaXJzdCB3aWxsIGFwcGVuZCBkYXRhIGFzIGRlc2NyaWJlZCBpbiAtZCwgLS1kYXRhLlxuIgorIlxuIgorIiAgICAgICAtLWRhdGEtdXJsZW5jb2RlIDxkYXRhPlxuIgorIiAgICAgICAgICAgICAgKEhUVFApIFRoaXMgcG9zdHMgZGF0YSwgc2ltaWxhciB0byB0aGUgb3RoZXIgLS1kYXRhIG9wdGlvbnMgd2l0aFxuIgorIiAgICAgICAgICAgICAgdGhlIGV4Y2VwdGlvbiB0aGF0IHRoaXMgcGVyZm9ybXMgVVJMLWVuY29kaW5nLiAoQWRkZWQgaW4gNy4xOC4wKVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgVG8gIGJlICBDR0ktY29tcGxpYW50LCAgdGhlIDxkYXRhPiBwYXJ0IHNob3VsZCBiZWdpbiB3aXRoIGEgbmFtZVxuIgorIiAgICAgICAgICAgICAgZm9sbG93ZWQgYnkgYSBzZXBhcmF0b3IgYW5kIGEgY29udGVudCBzcGVjaWZpY2F0aW9uLiBUaGUgIDxkYXRhPlxuIgorIiAgICAgICAgICAgICAgcGFydCBjYW4gYmUgcGFzc2VkIHRvIGN1cmwgdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3ludGF4ZXM6XG4iCisiXG4iCisiICAgICAgICAgICAgICBjb250ZW50XG4iCisiICAgICAgICAgICAgICAgICAgICAgVGhpcyAgd2lsbCBtYWtlIGN1cmwgVVJMLWVuY29kZSB0aGUgY29udGVudCBhbmQgcGFzcyB0aGF0XG4iCisiICAgICAgICAgICAgICAgICAgICAgb24uIEp1c3QgYmUgY2FyZWZ1bCBzbyB0aGF0IHRoZSBjb250ZW50ICBkb2Vzbid0ICBjb250YWluXG4iCisiICAgICAgICAgICAgICAgICAgICAgYW55ICA9ICBvciAgQCAgc3ltYm9scywgYXMgdGhhdCB3aWxsIHRoZW4gbWFrZSB0aGUgc3ludGF4XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggb25lIG9mIHRoZSBvdGhlciBjYXNlcyBiZWxvdyFcbiIKKyJcbiIKKyIgICAgICAgICAgICAgID1jb250ZW50XG4iCisiICAgICAgICAgICAgICAgICAgICAgVGhpcyB3aWxsIG1ha2UgY3VybCBVUkwtZW5jb2RlIHRoZSBjb250ZW50IGFuZCBwYXNzICB0aGF0XG4iCisiICAgICAgICAgICAgICAgICAgICAgb24uIFRoZSBwcmVjZWRpbmcgPSBzeW1ib2wgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBkYXRhLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgbmFtZT1jb250ZW50XG4iCisiICAgICAgICAgICAgICAgICAgICAgVGhpcyAgd2lsbCBtYWtlIGN1cmwgVVJMLWVuY29kZSB0aGUgY29udGVudCBwYXJ0IGFuZCBwYXNzXG4iCisiICAgICAgICAgICAgICAgICAgICAgdGhhdCBvbi4gTm90ZSB0aGF0IHRoZSBuYW1lIHBhcnQgaXMgZXhwZWN0ZWQgdG8gIGJlICBVUkwtXG4iCisiICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZCBhbHJlYWR5LlxuIgorIlxuIgorIiAgICAgICAgICAgICAgQGZpbGVuYW1lXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAgICAgICAgVGhpcyAgd2lsbCAgbWFrZSAgY3VybCAgbG9hZCAgZGF0YSAgZnJvbSAgdGhlICBnaXZlbiBmaWxlXG4iCisiICAgICAgICAgICAgICAgICAgICAgKGluY2x1ZGluZyBhbnkgbmV3bGluZXMpLCBVUkwtZW5jb2RlIHRoYXQgZGF0YSAgYW5kICBwYXNzXG4iCisiICAgICAgICAgICAgICAgICAgICAgaXQgb24gaW4gdGhlIFBPU1QuXG4iCisiXG4iCisiICAgICAgICAgICAgICBuYW1lQGZpbGVuYW1lXG4iCisiICAgICAgICAgICAgICAgICAgICAgVGhpcyAgd2lsbCAgbWFrZSAgY3VybCAgbG9hZCAgZGF0YSAgZnJvbSAgdGhlICBnaXZlbiBmaWxlXG4iCisiICAgICAgICAgICAgICAgICAgICAgKGluY2x1ZGluZyBhbnkgbmV3bGluZXMpLCBVUkwtZW5jb2RlIHRoYXQgZGF0YSAgYW5kICBwYXNzXG4iCisiICAgICAgICAgICAgICAgICAgICAgaXQgIG9uICBpbiAgdGhlICBQT1NULiAgVGhlICBuYW1lIHBhcnQgZ2V0cyBhbiBlcXVhbCBzaWduXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAgICAgICAgYXBwZW5kZWQsIHJlc3VsdGluZyBpbiBuYW1lPXVybGVuY29kZWQtZmlsZS1jb250ZW50LiBOb3RlXG4iCisiICAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgbmFtZSBpcyBleHBlY3RlZCB0byBiZSBVUkwtZW5jb2RlZCBhbHJlYWR5LlxuIgorIlxuIgorIiAgICAgICAtLWRlbGVnYXRpb24gTEVWRUxcbiIKKyIgICAgICAgICAgICAgIFNldCBMRVZFTCB0byB0ZWxsIHRoZSBzZXJ2ZXIgd2hhdCBpdCBpcyBhbGxvd2VkIHRvIGRlbGVnYXRlIHdoZW5cbiIKKyIgICAgICAgICAgICAgIGl0IGNvbWVzIHRvIHVzZXIgY3JlZGVudGlhbHMuIFVzZWQgd2l0aCBHU1Mva2VyYmVyb3MuXG4iCisiXG4iCisiICAgICAgICAgICAgICBub25lICAgRG9uJ3QgYWxsb3cgYW55IGRlbGVnYXRpb24uXG4iCisiXG4iCisiICAgICAgICAgICAgICBwb2xpY3kgRGVsZWdhdGVzIGlmIGFuZCBvbmx5IGlmIHRoZSBPSy1BUy1ERUxFR0FURSBmbGFnICBpcyAgc2V0XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAgICAgICAgaW4gIHRoZSAgS2VyYmVyb3MgIHNlcnZpY2UgIHRpY2tldCwgIHdoaWNoIGlzIGEgbWF0dGVyIG9mXG4iCisiICAgICAgICAgICAgICAgICAgICAgcmVhbG0gcG9saWN5LlxuIgorIlxuIgorIiAgICAgICAgICAgICAgYWx3YXlzIFVuY29uZGl0aW9uYWxseSBhbGxvdyB0aGUgc2VydmVyIHRvIGRlbGVnYXRlLlxuIgorIlxuIgorIiAgICAgICAtLWRpZ2VzdFxuIgorIiAgICAgICAgICAgICAgKEhUVFApIEVuYWJsZXMgSFRUUCBEaWdlc3QgYXV0aGVudGljYXRpb24uIFRoaXMgaXMgYSBhdXRoZW50aWNhLVxuIgorIiAgICAgICAgICAgICAgdGlvbiB0aGF0IHByZXZlbnRzIHRoZSBwYXNzd29yZCBmcm9tIGJlaW5nIHNlbnQgb3ZlciB0aGUgd2lyZSBpblxuIgorIiAgICAgICAgICAgICAgY2xlYXIgdGV4dC4gVXNlIHRoaXMgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgbm9ybWFsICAtdSwgIC0tdXNlclxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgb3B0aW9uIHRvIHNldCB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkLiBTZWUgYWxzbyAtLW50bG0sIC0tbmVnb3RpLVxuIgorIiAgICAgICAgICAgICAgYXRlIGFuZCAtLWFueWF1dGggZm9yIHJlbGF0ZWQgb3B0aW9ucy5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGZvbGxvd2luZyAgb2NjdXJyZW5jZXNcbiIKKyIgICAgICAgICAgICAgIG1ha2Ugbm8gZGlmZmVyZW5jZS5cbiIKKyJcbiIKKyIgICAgICAgLS1kaXNhYmxlLWVwcnRcbiIKKyIgICAgICAgICAgICAgIChGVFApIFRlbGwgY3VybCB0byBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIEVQUlQgYW5kIExQUlQgY29tbWFuZHNcbiIKKyIgICAgICAgICAgICAgIHdoZW4gZG9pbmcgYWN0aXZlIEZUUCB0cmFuc2ZlcnMuIEN1cmwgd2lsbCBub3JtYWxseSBhbHdheXMgZmlyc3RcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGF0dGVtcHQgIHRvIHVzZSBFUFJULCB0aGVuIExQUlQgYmVmb3JlIHVzaW5nIFBPUlQsIGJ1dCB3aXRoIHRoaXNcbiIKKyIgICAgICAgICAgICAgIG9wdGlvbiwgaXQgd2lsbCB1c2UgUE9SVCByaWdodCBhd2F5LiBFUFJUIGFuZCAgTFBSVCAgYXJlICBleHRlbi1cbiIKKyIgICAgICAgICAgICAgIHNpb25zICB0byAgdGhlICBvcmlnaW5hbCAgRlRQICBwcm90b2NvbCwgYW5kIG1heSBub3Qgd29yayBvbiBhbGxcbiIKKyIgICAgICAgICAgICAgIHNlcnZlcnMsIGJ1dCB0aGV5IGVuYWJsZSBtb3JlIGZ1bmN0aW9uYWxpdHkgaW4gYSBiZXR0ZXIgd2F5IHRoYW5cbiIKKyIgICAgICAgICAgICAgIHRoZSB0cmFkaXRpb25hbCBQT1JUIGNvbW1hbmQuXG4iCisiXG4iCisiICAgICAgICAgICAgICAtLWVwcnQgY2FuIGJlIHVzZWQgdG8gZXhwbGljaXRseSBlbmFibGUgRVBSVCBhZ2FpbiBhbmQgLS1uby1lcHJ0XG4iCisiICAgICAgICAgICAgICBpcyBhbiBhbGlhcyBmb3IgLS1kaXNhYmxlLWVwcnQuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBEaXNhYmxpbmcgRVBSVCBvbmx5IGNoYW5nZXMgdGhlIGFjdGl2ZSBiZWhhdmlvci4gSWYgeW91IHdhbnQgIHRvXG4iCisiICAgICAgICAgICAgICBzd2l0Y2ggIHRvICBwYXNzaXZlICBtb2RlICB5b3UgbmVlZCB0byBub3QgdXNlIC1QLCAtLWZ0cC1wb3J0IG9yXG4iCisiICAgICAgICAgICAgICBmb3JjZSBpdCB3aXRoIC0tZnRwLXBhc3YuXG4iCisiXG4iCisiICAgICAgIC0tZGlzYWJsZS1lcHN2XG4iCisiICAgICAgICAgICAgICAoRlRQKSBUZWxsIGN1cmwgdG8gZGlzYWJsZSB0aGUgdXNlICBvZiAgdGhlICBFUFNWICBjb21tYW5kICB3aGVuXG4iCisiICAgICAgICAgICAgICBkb2luZyAgcGFzc2l2ZSAgRlRQICB0cmFuc2ZlcnMuICBDdXJsIHdpbGwgbm9ybWFsbHkgYWx3YXlzIGZpcnN0XG4iCisiICAgICAgICAgICAgICBhdHRlbXB0IHRvIHVzZSBFUFNWIGJlZm9yZSBQQVNWLCBidXQgd2l0aCB0aGlzIG9wdGlvbiwgIGl0ICB3aWxsXG4iCisiICAgICAgICAgICAgICBub3QgdHJ5IHVzaW5nIEVQU1YuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAtLWVwc3YgY2FuIGJlIHVzZWQgdG8gZXhwbGljaXRseSBlbmFibGUgRVBTViBhZ2FpbiBhbmQgLS1uby1lcHN2XG4iCisiICAgICAgICAgICAgICBpcyBhbiBhbGlhcyBmb3IgLS1kaXNhYmxlLWVwc3YuXG4iCisiXG4iCisiICAgICAgICAgICAgICBEaXNhYmxpbmcgRVBTViBvbmx5IGNoYW5nZXMgdGhlIHBhc3NpdmUgYmVoYXZpb3IuIElmIHlvdSB3YW50IHRvXG4iCisiICAgICAgICAgICAgICBzd2l0Y2ggdG8gYWN0aXZlIG1vZGUgeW91IG5lZWQgdG8gdXNlIC1QLCAtLWZ0cC1wb3J0LlxuIgorIlxuIgorIiAgICAgICAtZSwgLS1yZWZlcmVyIDxVUkw+XG4iCisiICAgICAgICAgICAgICAoSFRUUCkgIFNlbmRzIHRoZSBcIlJlZmVyZXIgUGFnZVwiIGluZm9ybWF0aW9uIHRvIHRoZSBIVFRQIHNlcnZlci5cbiIKKyIgICAgICAgICAgICAgIFRoaXMgY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIC1ILCAtLWhlYWRlciBmbGFnIG9mIGNvdXJzZS4gIFdoZW5cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHVzZWQgd2l0aCAtTCwgLS1sb2NhdGlvbiB5b3UgY2FuIGFwcGVuZCBcIjthdXRvXCIgdG8gdGhlIC0tcmVmZXJlclxuIgorIiAgICAgICAgICAgICAgVVJMIHRvIG1ha2UgY3VybCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgcHJldmlvdXMgVVJMIHdoZW4gaXQgZm9sLVxuIgorIiAgICAgICAgICAgICAgbG93cyAgYSAgTG9jYXRpb246IGhlYWRlci4gVGhlIFwiO2F1dG9cIiBzdHJpbmcgY2FuIGJlIHVzZWQgYWxvbmUsXG4iCisiICAgICAgICAgICAgICBldmVuIGlmIHlvdSBkb24ndCBzZXQgYW4gaW5pdGlhbCAtLXJlZmVyZXIuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC1FLCAtLWNlcnQgPGNlcnRpZmljYXRlWzpwYXNzd29yZF0+XG4iCisiICAgICAgICAgICAgICAoU1NMKSBUZWxscyBjdXJsIHRvIHVzZSB0aGUgc3BlY2lmaWVkICBjbGllbnQgIGNlcnRpZmljYXRlICBmaWxlXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICB3aGVuIGdldHRpbmcgYSBmaWxlIHdpdGggSFRUUFMsIEZUUFMgb3IgYW5vdGhlciBTU0wtYmFzZWQgcHJvdG8tXG4iCisiICAgICAgICAgICAgICBjb2wuIFRoZSBjZXJ0aWZpY2F0ZSBtdXN0IGJlIGluIFBFTSAgZm9ybWF0LiAgIElmICB0aGUgIG9wdGlvbmFsXG4iCisiICAgICAgICAgICAgICBwYXNzd29yZCAgaXNuJ3QgIHNwZWNpZmllZCwgaXQgd2lsbCBiZSBxdWVyaWVkIGZvciBvbiB0aGUgdGVybWktXG4iCisiICAgICAgICAgICAgICBuYWwuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBhc3N1bWVzIGEgXCJjZXJ0aWZpY2F0ZVwiIGZpbGUgdGhhdCAgaXNcbiIKKyIgICAgICAgICAgICAgIHRoZSAgcHJpdmF0ZSAga2V5ICBhbmQgdGhlIHByaXZhdGUgY2VydGlmaWNhdGUgY29uY2F0ZW5hdGVkISBTZWVcbiIKKyIgICAgICAgICAgICAgIC0tY2VydCBhbmQgLS1rZXkgdG8gc3BlY2lmeSB0aGVtIGluZGVwZW5kZW50bHkuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBJZiBjdXJsIGlzIGJ1aWx0IGFnYWluc3QgdGhlIE5TUyBTU0wgbGlicmFyeSAgdGhlbiAgdGhpcyAgb3B0aW9uXG4iCisiICAgICAgICAgICAgICBjYW4gIHRlbGwgY3VybCB0aGUgbmlja25hbWUgb2YgdGhlIGNlcnRpZmljYXRlIHRvIHVzZSB3aXRoaW4gdGhlXG4iCisiICAgICAgICAgICAgICBOU1MgZGF0YWJhc2UgZGVmaW5lZCBieSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgU1NMX0RJUiAob3IgIGJ5XG4iCisiICAgICAgICAgICAgICBkZWZhdWx0ICAvZXRjL3BraS9uc3NkYikuICBJZiAgdGhlICBOU1MgUEVNIFBLQ1MjMTEgbW9kdWxlIChsaWItXG4iCisiICAgICAgICAgICAgICBuc3NwZW0uc28pIGlzIGF2YWlsYWJsZSB0aGVuIFBFTSBmaWxlcyBtYXkgIGJlICBsb2FkZWQuICBJZiAgeW91XG4iCisiICAgICAgICAgICAgICB3YW50IHRvIHVzZSBhIGZpbGUgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHBsZWFzZSBwcmVjZWRlIGl0XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICB3aXRoIFwiLi9cIiBwcmVmaXgsIGluIG9yZGVyIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIGEgbmlja25hbWUuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC0tZW5naW5lIDxuYW1lPlxuIgorIiAgICAgICAgICAgICAgU2VsZWN0IHRoZSBPcGVuU1NMIGNyeXB0byBlbmdpbmUgdG8gdXNlIGZvciAgY2lwaGVyICBvcGVyYXRpb25zLlxuIgorIiAgICAgICAgICAgICAgVXNlICAtLWVuZ2luZSAgbGlzdCAgdG8gIHByaW50ICBhICBsaXN0ICBvZiBidWlsZC10aW1lIHN1cHBvcnRlZFxuIgorIiAgICAgICAgICAgICAgZW5naW5lcy4gTm90ZSB0aGF0IG5vdCBhbGwgKG9yICBub25lKSAgb2YgIHRoZSAgZW5naW5lcyAgbWF5ICBiZVxuIgorIiAgICAgICAgICAgICAgYXZhaWxhYmxlIGF0IHJ1bi10aW1lLlxuIgorIlxuIgorIiAgICAgICAtLWVudmlyb25tZW50XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAoUklTQyAgT1MgT05MWSkgU2V0cyBhIHJhbmdlIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcywgdXNpbmcgdGhlXG4iCisiICAgICAgICAgICAgICBuYW1lcyB0aGUgLXcgb3B0aW9uIHN1cHBvcnRzLCB0byBhbGxvdyBlYXNpZXIgZXh0cmFjdGlvbiBvZiB1c2UtXG4iCisiICAgICAgICAgICAgICBmdWwgaW5mb3JtYXRpb24gYWZ0ZXIgaGF2aW5nIHJ1biBjdXJsLlxuIgorIlxuIgorIiAgICAgICAtLWVnZC1maWxlIDxmaWxlPlxuIgorIiAgICAgICAgICAgICAgKFNTTCkgIFNwZWNpZnkgIHRoZSAgcGF0aCAgbmFtZSAgdG8gdGhlIEVudHJvcHkgR2F0aGVyaW5nIERhZW1vblxuIgorIiAgICAgICAgICAgICAgc29ja2V0LiBUaGUgc29ja2V0IGlzIHVzZWQgdG8gc2VlZCB0aGUgIHJhbmRvbSAgZW5naW5lICBmb3IgIFNTTFxuIgorIiAgICAgICAgICAgICAgY29ubmVjdGlvbnMuIFNlZSBhbHNvIHRoZSAtLXJhbmRvbS1maWxlIG9wdGlvbi5cbiIKKyJcbiIKKyIgICAgICAgLS1jZXJ0LXR5cGUgPHR5cGU+XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAoU1NMKSAgVGVsbHMgY3VybCB3aGF0IGNlcnRpZmljYXRlIHR5cGUgdGhlIHByb3ZpZGVkIGNlcnRpZmljYXRlXG4iCisiICAgICAgICAgICAgICBpcyBpbi4gUEVNLCBERVIgYW5kIEVORyBhcmUgcmVjb2duaXplZCB0eXBlcy4gIElmIG5vdCBzcGVjaWZpZWQsXG4iCisiICAgICAgICAgICAgICBQRU0gaXMgYXNzdW1lZC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC5cbiIKKyJcbiIKKyIgICAgICAgLS1jYWNlcnQgPENBIGNlcnRpZmljYXRlPlxuIgorIiAgICAgICAgICAgICAgKFNTTCkgVGVsbHMgY3VybCB0byB1c2UgdGhlIHNwZWNpZmllZCBjZXJ0aWZpY2F0ZSBmaWxlIHRvIHZlcmlmeVxuIgorIiAgICAgICAgICAgICAgdGhlIHBlZXIuIFRoZSBmaWxlIG1heSBjb250YWluICBtdWx0aXBsZSAgQ0EgIGNlcnRpZmljYXRlcy4gIFRoZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgY2VydGlmaWNhdGUocykgIG11c3QgYmUgaW4gUEVNIGZvcm1hdC4gTm9ybWFsbHkgY3VybCBpcyBidWlsdCB0b1xuIgorIiAgICAgICAgICAgICAgdXNlIGEgZGVmYXVsdCBmaWxlIGZvciB0aGlzLCBzbyB0aGlzIG9wdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCB0b1xuIgorIiAgICAgICAgICAgICAgYWx0ZXIgdGhhdCBkZWZhdWx0IGZpbGUuXG4iCisiXG4iCisiICAgICAgICAgICAgICBjdXJsICByZWNvZ25pemVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lZCAnQ1VSTF9DQV9CVU5ETEUnXG4iCisiICAgICAgICAgICAgICBpZiBpdCBpcyBzZXQsIGFuZCB1c2VzIHRoZSBnaXZlbiBwYXRoIGFzIGEgcGF0aCAgdG8gIGEgIENBICBjZXJ0XG4iCisiICAgICAgICAgICAgICBidW5kbGUuIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyB0aGF0IHZhcmlhYmxlLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhlICB3aW5kb3dzICB2ZXJzaW9uICBvZiAgY3VybCB3aWxsIGF1dG9tYXRpY2FsbHkgbG9vayBmb3IgYSBDQVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgY2VydHMgZmlsZSBuYW1lZCAnY3VybC1jYS1idW5kbGUuY3J0JywgZWl0aGVyIGluIHRoZSBzYW1lIGRpcmVjLVxuIgorIiAgICAgICAgICAgICAgdG9yeSBhcyBjdXJsLmV4ZSwgb3IgaW4gdGhlIEN1cnJlbnQgV29ya2luZyBEaXJlY3RvcnksIG9yIGluIGFueVxuIgorIiAgICAgICAgICAgICAgZm9sZGVyIGFsb25nIHlvdXIgUEFUSC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmIGN1cmwgaXMgYnVpbHQgYWdhaW5zdCB0aGUgTlNTIFNTTCBsaWJyYXJ5ICB0aGVuICB0aGlzICBvcHRpb25cbiIKKyIgICAgICAgICAgICAgIHRlbGxzICBjdXJsIHRoZSBuaWNrbmFtZSBvZiB0aGUgQ0EgY2VydGlmaWNhdGUgdG8gdXNlIHdpdGhpbiB0aGVcbiIKKyIgICAgICAgICAgICAgIE5TUyBkYXRhYmFzZSBkZWZpbmVkIGJ5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBTU0xfRElSIChvciAgYnlcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGRlZmF1bHQgIC9ldGMvcGtpL25zc2RiKS4gICBJZiAgdGhlIE5TUyBQRU0gUEtDUyMxMSBtb2R1bGUgKGxpYi1cbiIKKyIgICAgICAgICAgICAgIG5zc3BlbS5zbykgaXMgYXZhaWxhYmxlIHRoZW4gUEVNIGZpbGVzIG1heSBiZSBsb2FkZWQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC0tY2FwYXRoIDxDQSBjZXJ0aWZpY2F0ZSBkaXJlY3Rvcnk+XG4iCisiICAgICAgICAgICAgICAoU1NMKSBUZWxscyBjdXJsIHRvIHVzZSB0aGUgc3BlY2lmaWVkIGNlcnRpZmljYXRlICBkaXJlY3RvcnkgIHRvXG4iCisiICAgICAgICAgICAgICB2ZXJpZnkgIHRoZSAgcGVlci4gIE11bHRpcGxlIHBhdGhzIGNhbiBiZSBwcm92aWRlZCBieSBzZXBhcmF0aW5nXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICB0aGVtIHdpdGggXCI6XCIgKGUuZy4gIFwicGF0aDE6cGF0aDI6cGF0aDNcIikuIFRoZSBjZXJ0aWZpY2F0ZXMgbXVzdFxuIgorIiAgICAgICAgICAgICAgYmUgIGluICBQRU0gIGZvcm1hdCwgIGFuZCAgaWYgY3VybCBpcyBidWlsdCBhZ2FpbnN0IE9wZW5TU0wsIHRoZVxuIgorIiAgICAgICAgICAgICAgZGlyZWN0b3J5IG11c3QgaGF2ZSBiZWVuIHByb2Nlc3NlZCB1c2luZyAgdGhlICBjX3JlaGFzaCAgdXRpbGl0eVxuIgorIiAgICAgICAgICAgICAgc3VwcGxpZWQgIHdpdGggT3BlblNTTC4gVXNpbmcgLS1jYXBhdGggY2FuIGFsbG93IE9wZW5TU0wtcG93ZXJlZFxuIgorIiAgICAgICAgICAgICAgY3VybCB0byBtYWtlIFNTTC1jb25uZWN0aW9ucyBtdWNoIG1vcmUgIGVmZmljaWVudGx5ICB0aGFuICB1c2luZ1xuIgorIiAgICAgICAgICAgICAgLS1jYWNlcnQgaWYgdGhlIC0tY2FjZXJ0IGZpbGUgY29udGFpbnMgbWFueSBDQSBjZXJ0aWZpY2F0ZXMuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBkZWZhdWx0IGNhcGF0aCB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQsXG4iCisiICAgICAgICAgICAgICBhbmQgaWYgaXQgaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLlxuIgorIlxuIgorIiAgICAgICAtZiwgLS1mYWlsXG4iCisiICAgICAgICAgICAgICAoSFRUUCkgRmFpbCBzaWxlbnRseSAobm8gb3V0cHV0IGF0IGFsbCkgb24gc2VydmVyICBlcnJvcnMuICBUaGlzXG4iCisiICAgICAgICAgICAgICBpcyAgbW9zdGx5IGRvbmUgdG8gYmV0dGVyIGVuYWJsZSBzY3JpcHRzIGV0YyB0byBiZXR0ZXIgZGVhbCB3aXRoXG4iCisiICAgICAgICAgICAgICBmYWlsZWQgYXR0ZW1wdHMuIEluIG5vcm1hbCBjYXNlcyB3aGVuIGEgIEhUVFAgIHNlcnZlciAgZmFpbHMgIHRvXG4iCisiICAgICAgICAgICAgICBkZWxpdmVyICBhICBkb2N1bWVudCwgIGl0ICByZXR1cm5zICBhbiAgSFRNTCBkb2N1bWVudCBzdGF0aW5nIHNvXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAod2hpY2ggb2Z0ZW4gYWxzbyBkZXNjcmliZXMgd2h5IGFuZCBtb3JlKS4gVGhpcyBmbGFnICB3aWxsICBwcmUtXG4iCisiICAgICAgICAgICAgICB2ZW50IGN1cmwgZnJvbSBvdXRwdXR0aW5nIHRoYXQgYW5kIHJldHVybiBlcnJvciAyMi5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoaXMgIG1ldGhvZCBpcyBub3QgZmFpbC1zYWZlIGFuZCB0aGVyZSBhcmUgb2NjYXNpb25zIHdoZXJlIG5vbi1cbiIKKyIgICAgICAgICAgICAgIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgY29kZXMgd2lsbCAgc2xpcCAgdGhyb3VnaCwgIGVzcGVjaWFsbHkgIHdoZW5cbiIKKyIgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uIGlzIGludm9sdmVkIChyZXNwb25zZSBjb2RlcyA0MDEgYW5kIDQwNykuXG4iCisiXG4iCisiICAgICAgIC1GLCAtLWZvcm0gPG5hbWU9Y29udGVudD5cbiIKKyIgICAgICAgICAgICAgIChIVFRQKSAgVGhpcyAgbGV0cyBjdXJsIGVtdWxhdGUgYSBmaWxsZWQtaW4gZm9ybSBpbiB3aGljaCBhIHVzZXJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGhhcyBwcmVzc2VkIHRoZSBzdWJtaXQgYnV0dG9uLiBUaGlzIGNhdXNlcyAgY3VybCAgdG8gIFBPU1QgIGRhdGFcbiIKKyIgICAgICAgICAgICAgIHVzaW5nICB0aGUgIENvbnRlbnQtVHlwZSAgbXVsdGlwYXJ0L2Zvcm0tZGF0YSAgYWNjb3JkaW5nICB0byBSRkNcbiIKKyIgICAgICAgICAgICAgIDIzODguIFRoaXMgZW5hYmxlcyB1cGxvYWRpbmcgb2YgYmluYXJ5IGZpbGVzIGV0Yy4gVG8gIGZvcmNlICB0aGVcbiIKKyIgICAgICAgICAgICAgICdjb250ZW50JyAgcGFydCAgdG8gIGJlICBhICBmaWxlLCBwcmVmaXggdGhlIGZpbGUgbmFtZSB3aXRoIGFuIEBcbiIKKyIgICAgICAgICAgICAgIHNpZ24uIFRvIGp1c3QgZ2V0IHRoZSBjb250ZW50IHBhcnQgZnJvbSBhIGZpbGUsIHByZWZpeCB0aGUgIGZpbGVcbiIKKyIgICAgICAgICAgICAgIG5hbWUgIHdpdGggIHRoZSBzeW1ib2wgPC4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBAIGFuZCA8IGlzIHRoZW5cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHRoYXQgQCBtYWtlcyBhIGZpbGUgZ2V0IGF0dGFjaGVkIGluIHRoZSBwb3N0IGFzIGEgIGZpbGUgIHVwbG9hZCxcbiIKKyIgICAgICAgICAgICAgIHdoaWxlICB0aGUgIDwgIG1ha2VzICBhIHRleHQgZmllbGQgYW5kIGp1c3QgZ2V0IHRoZSBjb250ZW50cyBmb3JcbiIKKyIgICAgICAgICAgICAgIHRoYXQgdGV4dCBmaWVsZCBmcm9tIGEgZmlsZS5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIEV4YW1wbGUsIHRvIHNlbmQgeW91ciBwYXNzd29yZCBmaWxlIHRvIHRoZSBzZXJ2ZXIsIHdoZXJlICAncGFzcy1cbiIKKyIgICAgICAgICAgICAgIHdvcmQnIGlzIHRoZSBuYW1lIG9mIHRoZSBmb3JtLWZpZWxkIHRvIHdoaWNoIC9ldGMvcGFzc3dkIHdpbGwgYmVcbiIKKyIgICAgICAgICAgICAgIHRoZSBpbnB1dDpcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIGN1cmwgLUYgcGFzc3dvcmQ9QC9ldGMvcGFzc3dkIHd3dy5teXBhc3N3b3Jkcy5jb21cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIFRvIHJlYWQgY29udGVudCBmcm9tIHN0ZGluIGluc3RlYWQgb2YgYSBmaWxlLCB1c2UgLSBhcyB0aGUgZmlsZS1cbiIKKyIgICAgICAgICAgICAgIG5hbWUuIFRoaXMgZ29lcyBmb3IgYm90aCBAIGFuZCA8IGNvbnN0cnVjdHMuXG4iCisiXG4iCisiICAgICAgICAgICAgICBZb3UgIGNhbiAgYWxzbyAgdGVsbCAgY3VybCAgd2hhdCAgQ29udGVudC1UeXBlICB0byAgdXNlIGJ5IHVzaW5nXG4iCisiICAgICAgICAgICAgICAndHlwZT0nLCBpbiBhIG1hbm5lciBzaW1pbGFyIHRvOlxuIgorIlxuIgorIiAgICAgICAgICAgICAgY3VybCAtRiBcIndlYj1AaW5kZXguaHRtbDt0eXBlPXRleHQvaHRtbFwiIHVybC5jb21cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIG9yXG4iCisiXG4iCisiICAgICAgICAgICAgICBjdXJsIC1GIFwibmFtZT1kYW5pZWw7dHlwZT10ZXh0L2Zvb1wiIHVybC5jb21cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBleHBsaWNpdGx5IGNoYW5nZSB0aGUgbmFtZSBmaWVsZCBvZiBhICBmaWxlICB1cGxvYWRcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHBhcnQgYnkgc2V0dGluZyBmaWxlbmFtZT0sIGxpa2UgdGhpczpcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIGN1cmwgLUYgXCJmaWxlPUBsb2NhbGZpbGU7ZmlsZW5hbWU9bmFtZWlucG9zdFwiIHVybC5jb21cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFNlZSBmdXJ0aGVyIGV4YW1wbGVzIGFuZCBkZXRhaWxzIGluIHRoZSBNQU5VQUwuXG4iCisiXG4iCisiICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy5cbiIKKyJcbiIKKyIgICAgICAgLS1mdHAtYWNjb3VudCBbZGF0YV1cbiIKKyIgICAgICAgICAgICAgIChGVFApIFdoZW4gYW4gRlRQIHNlcnZlciBhc2tzIGZvciBcImFjY291bnQgZGF0YVwiIGFmdGVyIHVzZXIgbmFtZVxuIgorIiAgICAgICAgICAgICAgYW5kIHBhc3N3b3JkIGhhcyBiZWVuIHByb3ZpZGVkLCB0aGlzIGRhdGEgaXMgc2VudCBvZmYgdXNpbmcgIHRoZVxuIgorIiAgICAgICAgICAgICAgQUNDVCBjb21tYW5kLiAoQWRkZWQgaW4gNy4xMy4wKVxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgSWYgIHRoaXMgb3B0aW9uIGlzIHVzZWQgdHdpY2UsIHRoZSBzZWNvbmQgd2lsbCBvdmVycmlkZSB0aGUgcHJlLVxuIgorIiAgICAgICAgICAgICAgdmlvdXMgdXNlLlxuIgorIlxuIgorIiAgICAgICAtLWZ0cC1hbHRlcm5hdGl2ZS10by11c2VyIDxjb21tYW5kPlxuIgorIiAgICAgICAgICAgICAgKEZUUCkgSWYgYXV0aGVudGljYXRpbmcgd2l0aCB0aGUgVVNFUiBhbmQgUEFTUyAgY29tbWFuZHMgIGZhaWxzLFxuIgorIiAgICAgICAgICAgICAgc2VuZCAgdGhpcyAgY29tbWFuZC4gICBXaGVuICBjb25uZWN0aW5nICB0byAgVHVtYmxld2VlZCdzIFNlY3VyZVxuIgorIiAgICAgICAgICAgICAgVHJhbnNwb3J0IHNlcnZlciBvdmVyIEZUUFMgdXNpbmcgIGEgIGNsaWVudCAgY2VydGlmaWNhdGUsICB1c2luZ1xuIgorIiAgICAgICAgICAgICAgXCJTSVRFICBBVVRIXCIgIHdpbGwgdGVsbCB0aGUgc2VydmVyIHRvIHJldHJpZXZlIHRoZSB1c2VybmFtZSBmcm9tXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICB0aGUgY2VydGlmaWNhdGUuIChBZGRlZCBpbiA3LjE1LjUpXG4iCisiXG4iCisiICAgICAgIC0tZnRwLWNyZWF0ZS1kaXJzXG4iCisiICAgICAgICAgICAgICAoRlRQL1NGVFApIFdoZW4gYW4gRlRQIG9yIFNGVFAgVVJML29wZXJhdGlvbiB1c2VzICBhICBwYXRoICB0aGF0XG4iCisiICAgICAgICAgICAgICBkb2Vzbid0ICBjdXJyZW50bHkgZXhpc3Qgb24gdGhlIHNlcnZlciwgdGhlIHN0YW5kYXJkIGJlaGF2aW9yIG9mXG4iCisiICAgICAgICAgICAgICBjdXJsIGlzIHRvIGZhaWwuIFVzaW5nIHRoaXMgb3B0aW9uLCBjdXJsIHdpbGwgaW5zdGVhZCBhdHRlbXB0IHRvXG4iCisiICAgICAgICAgICAgICBjcmVhdGUgbWlzc2luZyBkaXJlY3Rvcmllcy5cbiIKKyJcbiIKKyIgICAgICAgLS1mdHAtbWV0aG9kIFttZXRob2RdXG4iCisiICAgICAgICAgICAgICAoRlRQKSAgQ29udHJvbCAgd2hhdCBtZXRob2QgY3VybCBzaG91bGQgdXNlIHRvIHJlYWNoIGEgZmlsZSBvbiBhXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBGVFAoUykgc2VydmVyLiBUaGUgbWV0aG9kIGFyZ3VtZW50IHNob3VsZCBiZSBvbmUgb2YgdGhlICBmb2xsb3ctXG4iCisiICAgICAgICAgICAgICBpbmcgYWx0ZXJuYXRpdmVzOlxuIgorIlxuIgorIiAgICAgICAgICAgICAgbXVsdGljd2RcbiIKKyIgICAgICAgICAgICAgICAgICAgICBjdXJsICBkb2VzICBhICBzaW5nbGUgQ1dEIG9wZXJhdGlvbiBmb3IgZWFjaCBwYXRoIHBhcnQgaW5cbiIKKyIgICAgICAgICAgICAgICAgICAgICB0aGUgZ2l2ZW4gVVJMLiBGb3IgZGVlcCBoaWVyYXJjaGllcyB0aGlzIG1lYW5zIHZlcnkgIG1hbnlcbiIKKyIgICAgICAgICAgICAgICAgICAgICBjb21tYW5kcy4gIFRoaXMgIGlzICBob3cgUkZDIDE3Mzggc2F5cyBpdCBzaG91bGQgYmUgZG9uZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgc2xvd2VzdCBiZWhhdmlvci5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIG5vY3dkICBjdXJsIGRvZXMgbm8gQ1dEIGF0IGFsbC4gY3VybCB3aWxsIGRvICBTSVpFLCAgUkVUUiwgIFNUT1JcbiIKKyIgICAgICAgICAgICAgICAgICAgICBldGMgYW5kIGdpdmUgYSBmdWxsIHBhdGggdG8gdGhlIHNlcnZlciBmb3IgYWxsIHRoZXNlIGNvbS1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBtYW5kcy4gVGhpcyBpcyB0aGUgZmFzdGVzdCBiZWhhdmlvci5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIHNpbmdsZWN3ZFxuIgorIiAgICAgICAgICAgICAgICAgICAgIGN1cmwgZG9lcyBvbmUgQ1dEIHdpdGggdGhlIGZ1bGwgdGFyZ2V0IGRpcmVjdG9yeSBhbmQgdGhlblxuIgorIiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGVzICBvbiAgdGhlICBmaWxlICBcIm5vcm1hbGx5XCIgKGxpa2UgaW4gdGhlIG11bHRpY3dkXG4iCisiICAgICAgICAgICAgICAgICAgICAgY2FzZSkuIFRoaXMgaXMgc29tZXdoYXQgIG1vcmUgIHN0YW5kYXJkcyAgY29tcGxpYW50ICB0aGFuXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAgICAgICAgJ25vY3dkJyBidXQgd2l0aG91dCB0aGUgZnVsbCBwZW5hbHR5IG9mICdtdWx0aWN3ZCcuXG4iCisiICAgICAgIChBZGRlZCBpbiA3LjE1LjEpXG4iCisiXG4iCisiICAgICAgIC0tZnRwLXBhc3ZcbiIKKyIgICAgICAgICAgICAgIChGVFApICBVc2UgIHBhc3NpdmUgbW9kZSBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbi4gUGFzc2l2ZSBpcyB0aGVcbiIKKyIgICAgICAgICAgICAgIGludGVybmFsIGRlZmF1bHQgYmVoYXZpb3IsIGJ1dCB1c2luZyB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCAgdG9cbiIKKyIgICAgICAgICAgICAgIG92ZXJyaWRlIGEgcHJldmlvdXMgLVAvLWZ0cC1wb3J0IG9wdGlvbi4gKEFkZGVkIGluIDcuMTEuMClcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmICB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBmb2xsb3dpbmcgb2NjdXJyZW5jZXNcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIG1ha2Ugbm8gZGlmZmVyZW5jZS4gVW5kb2luZyBhbiAgZW5mb3JjZWQgIHBhc3NpdmUgIHJlYWxseSAgaXNuJ3RcbiIKKyIgICAgICAgICAgICAgIGRvYWJsZSAgYnV0IHlvdSBtdXN0IHRoZW4gaW5zdGVhZCBlbmZvcmNlIHRoZSBjb3JyZWN0IC1QLCAtLWZ0cC1cbiIKKyIgICAgICAgICAgICAgIHBvcnQgYWdhaW4uXG4iCisiXG4iCisiICAgICAgICAgICAgICBQYXNzaXZlIG1vZGUgbWVhbnMgdGhhdCBjdXJsIHdpbGwgdHJ5IHRoZSBFUFNWIGNvbW1hbmQgZmlyc3QgYW5kXG4iCisiICAgICAgICAgICAgICB0aGVuIFBBU1YsIHVubGVzcyAtLWRpc2FibGUtZXBzdiBpcyB1c2VkLlxuIgorIlxuIgorIiAgICAgICAtLWZ0cC1za2lwLXBhc3YtaXBcbiIKKyIgICAgICAgICAgICAgIChGVFApIFRlbGwgY3VybCB0byBub3QgdXNlIHRoZSBJUCBhZGRyZXNzIHRoZSBzZXJ2ZXIgc3VnZ2VzdHMgaW5cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGl0cyByZXNwb25zZSB0byBjdXJsJ3MgUEFTViBjb21tYW5kIHdoZW4gY3VybCBjb25uZWN0cyB0aGUgIGRhdGFcbiIKKyIgICAgICAgICAgICAgIGNvbm5lY3Rpb24uICBJbnN0ZWFkICBjdXJsICB3aWxsICByZS11c2UgIHRoZSBzYW1lIElQIGFkZHJlc3MgaXRcbiIKKyIgICAgICAgICAgICAgIGFscmVhZHkgdXNlcyBmb3IgdGhlIGNvbnRyb2wgY29ubmVjdGlvbi4gKEFkZGVkIGluIDcuMTQuMilcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgaWYgUE9SVCwgRVBSVCBvciBFUFNWIGlzIHVzZWQgIGluc3RlYWRcbiIKKyIgICAgICAgICAgICAgIG9mIFBBU1YuXG4iCisiXG4iCisiICAgICAgIC0tZnRwLXByZXRcbiIKKyIgICAgICAgICAgICAgIChGVFApICBUZWxsICBjdXJsIHRvIHNlbmQgYSBQUkVUIGNvbW1hbmQgYmVmb3JlIFBBU1YgKGFuZCBFUFNWKS5cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIENlcnRhaW4gRlRQIHNlcnZlcnMsIG1haW5seSBkcmZ0cGQsICByZXF1aXJlICB0aGlzICBub24tc3RhbmRhcmRcbiIKKyIgICAgICAgICAgICAgIGNvbW1hbmQgIGZvciAgZGlyZWN0b3J5ICBsaXN0aW5ncyBhcyB3ZWxsIGFzIHVwIGFuZCBkb3dubG9hZHMgaW5cbiIKKyIgICAgICAgICAgICAgIFBBU1YgbW9kZS4gIChBZGRlZCBpbiA3LjIwLngpXG4iCisiXG4iCisiICAgICAgIC0tZnRwLXNzbC1jY2NcbiIKKyIgICAgICAgICAgICAgIChGVFApIFVzZSBDQ0MgKENsZWFyIENvbW1hbmQgQ2hhbm5lbCkgIFNodXRzICBkb3duICB0aGUgIFNTTC9UTFNcbiIKKyIgICAgICAgICAgICAgIGxheWVyIGFmdGVyIGF1dGhlbnRpY2F0aW5nLiBUaGUgcmVzdCBvZiB0aGUgY29udHJvbCBjaGFubmVsIGNvbS1cbiIKKyIgICAgICAgICAgICAgIG11bmljYXRpb24gd2lsbCBiZSB1bmVuY3J5cHRlZC4gVGhpcyBhbGxvd3MgTkFUIHJvdXRlcnMgdG8gIGZvbC1cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGxvdyB0aGUgRlRQIHRyYW5zYWN0aW9uLiBUaGUgZGVmYXVsdCBtb2RlIGlzIHBhc3NpdmUuIFNlZSAtLWZ0cC1cbiIKKyIgICAgICAgICAgICAgIHNzbC1jY2MtbW9kZSBmb3Igb3RoZXIgbW9kZXMuICAoQWRkZWQgaW4gNy4xNi4xKVxuIgorIlxuIgorIiAgICAgICAtLWZ0cC1zc2wtY2NjLW1vZGUgW2FjdGl2ZS9wYXNzaXZlXVxuIgorIiAgICAgICAgICAgICAgKEZUUCkgVXNlIENDQyAoQ2xlYXIgQ29tbWFuZCBDaGFubmVsKSBTZXRzICB0aGUgIENDQyAgbW9kZS4gIFRoZVxuIgorIiAgICAgICAgICAgICAgcGFzc2l2ZSAgbW9kZSAgd2lsbCAgbm90IGluaXRpYXRlIHRoZSBzaHV0ZG93biwgYnV0IGluc3RlYWQgd2FpdFxuIgorIiAgICAgICAgICAgICAgZm9yIHRoZSBzZXJ2ZXIgdG8gZG8gaXQsIGFuZCB3aWxsIG5vdCByZXBseSB0byB0aGUgc2h1dGRvd24gZnJvbVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgdGhlIHNlcnZlci4gVGhlIGFjdGl2ZSBtb2RlIGluaXRpYXRlcyB0aGUgc2h1dGRvd24gYW5kIHdhaXRzIGZvclxuIgorIiAgICAgICAgICAgICAgYSByZXBseSBmcm9tIHRoZSBzZXJ2ZXIuICAoQWRkZWQgaW4gNy4xNi4yKVxuIgorIlxuIgorIiAgICAgICAtLWZ0cC1zc2wtY29udHJvbFxuIgorIiAgICAgICAgICAgICAgKEZUUCkgUmVxdWlyZSBTU0wvVExTIGZvciB0aGUgRlRQICBsb2dpbiwgIGNsZWFyICBmb3IgIHRyYW5zZmVyLlxuIgorIiAgICAgICAgICAgICAgQWxsb3dzICBzZWN1cmUgIGF1dGhlbnRpY2F0aW9uLCBidXQgbm9uLWVuY3J5cHRlZCBkYXRhIHRyYW5zZmVyc1xuIgorIiAgICAgICAgICAgICAgZm9yIGVmZmljaWVuY3kuICBGYWlscyB0aGUgdHJhbnNmZXIgaWYgdGhlIHNlcnZlciAgZG9lc24ndCAgc3VwLVxuIgorIiAgICAgICAgICAgICAgcG9ydCBTU0wvVExTLiAgKEFkZGVkIGluIDcuMTYuMCkgdGhhdCBjYW4gc3RpbGwgYmUgdXNlZCBidXQgd2lsbFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuIgorIlxuIgorIiAgICAgICAtLWZvcm0tc3RyaW5nIDxuYW1lPXN0cmluZz5cbiIKKyIgICAgICAgICAgICAgIChIVFRQKSBTaW1pbGFyIHRvIC0tZm9ybSBleGNlcHQgdGhhdCB0aGUgdmFsdWUgIHN0cmluZyAgZm9yICB0aGVcbiIKKyIgICAgICAgICAgICAgIG5hbWVkICBwYXJhbWV0ZXIgIGlzIHVzZWQgbGl0ZXJhbGx5LiBMZWFkaW5nICdAJyBhbmQgJzwnIGNoYXJhYy1cbiIKKyIgICAgICAgICAgICAgIHRlcnMsIGFuZCB0aGUgJzt0eXBlPScgc3RyaW5nIGluIHRoZSB2YWx1ZSBoYXZlIG5vIHNwZWNpYWwgbWVhbi1cbiIKKyIgICAgICAgICAgICAgIGluZy4gVXNlIHRoaXMgaW4gcHJlZmVyZW5jZSB0byAtLWZvcm0gaWYgdGhlcmUncyBhbnkgcG9zc2liaWxpdHlcbiIKKyIgICAgICAgICAgICAgIHRoYXQgdGhlIHN0cmluZyB2YWx1ZSBtYXkgYWNjaWRlbnRhbGx5IHRyaWdnZXIgdGhlICAnQCcgIG9yICAnPCdcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGZlYXR1cmVzIG9mIC0tZm9ybS5cbiIKKyJcbiIKKyIgICAgICAgLWcsIC0tZ2xvYm9mZlxuIgorIiAgICAgICAgICAgICAgVGhpcyBvcHRpb24gc3dpdGNoZXMgb2ZmIHRoZSBcIlVSTCBnbG9iYmluZyBwYXJzZXJcIi4gV2hlbiB5b3Ugc2V0XG4iCisiICAgICAgICAgICAgICB0aGlzIG9wdGlvbiwgeW91IGNhbiBzcGVjaWZ5IFVSTHMgdGhhdCBjb250YWluIHRoZSBsZXR0ZXJzICB7fVtdXG4iCisiICAgICAgICAgICAgICB3aXRob3V0ICBoYXZpbmcgdGhlbSBiZWluZyBpbnRlcnByZXRlZCBieSBjdXJsIGl0c2VsZi4gTm90ZSB0aGF0XG4iCisiICAgICAgICAgICAgICB0aGVzZSBsZXR0ZXJzIGFyZSBub3Qgbm9ybWFsIGxlZ2FsIFVSTCBjb250ZW50cyBidXQgdGhleSAgc2hvdWxkXG4iCisiICAgICAgICAgICAgICBiZSBlbmNvZGVkIGFjY29yZGluZyB0byB0aGUgVVJJIHN0YW5kYXJkLlxuIgorIlxuIgorIiAgICAgICAtRywgLS1nZXRcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIFdoZW4gIHVzZWQsICB0aGlzICBvcHRpb24gIHdpbGwgbWFrZSBhbGwgZGF0YSBzcGVjaWZpZWQgd2l0aCAtZCxcbiIKKyIgICAgICAgICAgICAgIC0tZGF0YSBvciAtLWRhdGEtYmluYXJ5IHRvIGJlIHVzZWQgaW4gYSBIVFRQIEdFVCByZXF1ZXN0IGluc3RlYWRcbiIKKyIgICAgICAgICAgICAgIG9mICB0aGUgUE9TVCByZXF1ZXN0IHRoYXQgb3RoZXJ3aXNlIHdvdWxkIGJlIHVzZWQuIFRoZSBkYXRhIHdpbGxcbiIKKyIgICAgICAgICAgICAgIGJlIGFwcGVuZGVkIHRvIHRoZSBVUkwgd2l0aCBhICc/JyBzZXBhcmF0b3IuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggLUksIHRoZSBQT1NUIGRhdGEgIHdpbGwgIGluc3RlYWQgIGJlXG4iCisiICAgICAgICAgICAgICBhcHBlbmRlZCB0byB0aGUgVVJMIHdpdGggYSBIRUFEIHJlcXVlc3QuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBJZiAgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgZm9sbG93aW5nIG9jY3VycmVuY2VzXG4iCisiICAgICAgICAgICAgICBtYWtlIG5vIGRpZmZlcmVuY2UuIFRoaXMgaXMgYmVjYXVzZSB1bmRvaW5nIGEgR0VUICBkb2Vzbid0ICBtYWtlXG4iCisiICAgICAgICAgICAgICBzZW5zZSwgIGJ1dCAgeW91ICBzaG91bGQgIHRoZW4gIGluc3RlYWQgIGVuZm9yY2UgdGhlIGFsdGVybmF0aXZlXG4iCisiICAgICAgICAgICAgICBtZXRob2QgeW91IHByZWZlci5cbiIKKyJcbiIKKyIgICAgICAgLUgsIC0taGVhZGVyIDxoZWFkZXI+XG4iCisiICAgICAgICAgICAgICAoSFRUUCkgRXh0cmEgaGVhZGVyIHRvIHVzZSB3aGVuIGdldHRpbmcgIGEgIHdlYiAgcGFnZS4gIFlvdSAgbWF5XG4iCisiICAgICAgICAgICAgICBzcGVjaWZ5IGFueSBudW1iZXIgb2YgZXh0cmEgaGVhZGVycy4gTm90ZSB0aGF0IGlmIHlvdSBzaG91bGQgYWRkXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBhIGN1c3RvbSBoZWFkZXIgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBvbmUgIG9mICB0aGUgIGludGVybmFsXG4iCisiICAgICAgICAgICAgICBvbmVzICBjdXJsICB3b3VsZCAgdXNlLCAgeW91ciBleHRlcm5hbGx5IHNldCBoZWFkZXIgd2lsbCBiZSB1c2VkXG4iCisiICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBpbnRlcm5hbCBvbmUuIFRoaXMgYWxsb3dzIHlvdSB0byBtYWtlIGV2ZW4gdHJpY2stXG4iCisiICAgICAgICAgICAgICBpZXIgIHN0dWZmICB0aGFuICBjdXJsIHdvdWxkIG5vcm1hbGx5IGRvLiBZb3Ugc2hvdWxkIG5vdCByZXBsYWNlXG4iCisiICAgICAgICAgICAgICBpbnRlcm5hbGx5IHNldCAgaGVhZGVycyAgd2l0aG91dCAga25vd2luZyAgcGVyZmVjdGx5ICB3ZWxsICB3aGF0XG4iCisiICAgICAgICAgICAgICB5b3UncmUgIGRvaW5nLiBSZW1vdmUgYW4gaW50ZXJuYWwgaGVhZGVyIGJ5IGdpdmluZyBhIHJlcGxhY2VtZW50XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICB3aXRob3V0IGNvbnRlbnQgb24gdGhlIHJpZ2h0ICBzaWRlICBvZiAgdGhlICBjb2xvbiwgIGFzICBpbjogIC1IXG4iCisiICAgICAgICAgICAgICBcIkhvc3Q6XCIuICBJZiAgeW91ICBzZW5kIHRoZSBjdXN0b20gaGVhZGVyIHdpdGggbm8tdmFsdWUgdGhlbiBpdHNcbiIKKyIgICAgICAgICAgICAgIGhlYWRlciBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCBhIHNlbWljb2xvbiwgc3VjaCBhcyAgLUggIFwiWC1DdXMtXG4iCisiICAgICAgICAgICAgICB0b20tSGVhZGVyO1wiIHRvIHNlbmQgXCJYLUN1c3RvbS1IZWFkZXI6XCIuXG4iCisiXG4iCisiICAgICAgICAgICAgICBjdXJsICB3aWxsICBtYWtlICBzdXJlICB0aGF0IGVhY2ggaGVhZGVyIHlvdSBhZGQvcmVwbGFjZSBpcyBzZW50XG4iCisiICAgICAgICAgICAgICB3aXRoIHRoZSBwcm9wZXIgZW5kLW9mLWxpbmUgbWFya2VyLCB5b3Ugc2hvdWxkIHRodXMgbm90IGFkZCB0aGF0XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBhcyBhIHBhcnQgb2YgdGhlIGhlYWRlciBjb250ZW50OiBkbyBub3QgYWRkIG5ld2xpbmVzIG9yIGNhcnJpYWdlXG4iCisiICAgICAgICAgICAgICByZXR1cm5zLCB0aGV5IHdpbGwgb25seSBtZXNzIHRoaW5ncyB1cCBmb3IgeW91LlxuIgorIlxuIgorIiAgICAgICAgICAgICAgU2VlIGFsc28gdGhlIC1BLCAtLXVzZXItYWdlbnQgYW5kIC1lLCAtLXJlZmVyZXIgb3B0aW9ucy5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkICBtdWx0aXBsZSAgdGltZXMgIHRvICBhZGQvcmVwbGFjZS9yZW1vdmVcbiIKKyIgICAgICAgICAgICAgIG11bHRpcGxlIGhlYWRlcnMuXG4iCisiXG4iCisiICAgICAgIC0taG9zdHB1Ym1kNSA8bWQ1PlxuIgorIiAgICAgICAgICAgICAgUGFzcyAgYSAgc3RyaW5nICBjb250YWluaW5nICAzMiAgaGV4YWRlY2ltYWwgIGRpZ2l0cy4gVGhlIHN0cmluZ1xuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgc2hvdWxkIGJlIHRoZSAxMjggYml0IE1ENSBjaGVja3N1bSBvZiB0aGUgcmVtb3RlICBob3N0J3MgIHB1YmxpY1xuIgorIiAgICAgICAgICAgICAga2V5LCAgY3VybCAgd2lsbCAgcmVmdXNlIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIGhvc3QgdW5sZXNzIHRoZVxuIgorIiAgICAgICAgICAgICAgbWQ1c3VtcyBtYXRjaC4gVGhpcyBvcHRpb24gaXMgb25seSBmb3IgU0NQIGFuZCAgU0ZUUCAgdHJhbnNmZXJzLlxuIgorIiAgICAgICAgICAgICAgKEFkZGVkIGluIDcuMTcuMSlcbiIKKyJcbiIKKyIgICAgICAgLS1pZ25vcmUtY29udGVudC1sZW5ndGhcbiIKKyIgICAgICAgICAgICAgIChIVFRQKSAgSWdub3JlICB0aGUgIENvbnRlbnQtTGVuZ3RoIGhlYWRlci4gVGhpcyBpcyBwYXJ0aWN1bGFybHlcbiIKKyIgICAgICAgICAgICAgIHVzZWZ1bCBmb3Igc2VydmVycyBydW5uaW5nIEFwYWNoZSAxLngsIHdoaWNoIHdpbGwgcmVwb3J0ICBpbmNvci1cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHJlY3QgQ29udGVudC1MZW5ndGggZm9yIGZpbGVzIGxhcmdlciB0aGFuIDIgZ2lnYWJ5dGVzLlxuIgorIlxuIgorIiAgICAgICAtaSwgLS1pbmNsdWRlXG4iCisiICAgICAgICAgICAgICAoSFRUUCkgIEluY2x1ZGUgIHRoZSAgSFRUUC1oZWFkZXIgaW4gdGhlIG91dHB1dC4gVGhlIEhUVFAtaGVhZGVyXG4iCisiICAgICAgICAgICAgICBpbmNsdWRlcyB0aGluZ3MgbGlrZSBzZXJ2ZXItbmFtZSwgZGF0ZSBvZiAgdGhlICBkb2N1bWVudCwgIEhUVFAtXG4iCisiICAgICAgICAgICAgICB2ZXJzaW9uIGFuZCBtb3JlLi4uXG4iCisiXG4iCisiICAgICAgIC1JLCAtLWhlYWRcbiIKKyIgICAgICAgICAgICAgIChIVFRQL0ZUUC9GSUxFKSBGZXRjaCB0aGUgSFRUUC1oZWFkZXIgb25seSEgSFRUUC1zZXJ2ZXJzIGZlYXR1cmVcbiIKKyIgICAgICAgICAgICAgIHRoZSBjb21tYW5kIEhFQUQgd2hpY2ggdGhpcyB1c2VzIHRvIGdldCBub3RoaW5nIGJ1dCAgdGhlICBoZWFkZXJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIG9mICBhICBkb2N1bWVudC4gIFdoZW4gdXNlZCBvbiBhIEZUUCBvciBGSUxFIGZpbGUsIGN1cmwgZGlzcGxheXNcbiIKKyIgICAgICAgICAgICAgIHRoZSBmaWxlIHNpemUgYW5kIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb25seS5cbiIKKyJcbiIKKyIgICAgICAgLS1pbnRlcmZhY2UgPG5hbWU+XG4iCisiICAgICAgICAgICAgICBQZXJmb3JtIGFuIG9wZXJhdGlvbiB1c2luZyBhIHNwZWNpZmllZCBpbnRlcmZhY2UuIFlvdSBjYW4gIGVudGVyXG4iCisiICAgICAgICAgICAgICBpbnRlcmZhY2UgIG5hbWUsICBJUCBhZGRyZXNzIG9yIGhvc3QgbmFtZS4gQW4gZXhhbXBsZSBjb3VsZCBsb29rXG4iCisiICAgICAgICAgICAgICBsaWtlOlxuIgorIlxuIgorIiAgICAgICAgICAgICAgIGN1cmwgLS1pbnRlcmZhY2UgZXRoMDoxIGh0dHA6Ly93d3cubmV0c2NhcGUuY29tL1xuIgorIlxuIgorIiAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAtaiwgLS1qdW5rLXNlc3Npb24tY29va2llc1xuIgorIiAgICAgICAgICAgICAgKEhUVFApIFdoZW4gY3VybCBpcyB0b2xkIHRvIHJlYWQgY29va2llcyBmcm9tIGEgZ2l2ZW4gZmlsZSwgdGhpc1xuIgorIiAgICAgICAgICAgICAgb3B0aW9uICB3aWxsICBtYWtlICBpdCAgZGlzY2FyZCBhbGwgXCJzZXNzaW9uIGNvb2tpZXNcIi4gVGhpcyB3aWxsXG4iCisiICAgICAgICAgICAgICBiYXNpY2FsbHkgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgaWYgYSBuZXcgc2Vzc2lvbiAgaXMgIHN0YXJ0ZWQuXG4iCisiICAgICAgICAgICAgICBUeXBpY2FsICBicm93c2VycyAgYWx3YXlzICBkaXNjYXJkICBzZXNzaW9uIGNvb2tpZXMgd2hlbiB0aGV5J3JlXG4iCisiICAgICAgICAgICAgICBjbG9zZWQgZG93bi5cbiIKKyJcbiIKKyIgICAgICAgLUosIC0tcmVtb3RlLWhlYWRlci1uYW1lXG4iCisiICAgICAgICAgICAgICAoSFRUUCkgVGhpcyBvcHRpb24gdGVsbHMgdGhlIC1PLCAtLXJlbW90ZS1uYW1lIG9wdGlvbiB0byB1c2UgdGhlXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBzZXJ2ZXItc3BlY2lmaWVkICAgQ29udGVudC1EaXNwb3NpdGlvbiAgIGZpbGVuYW1lICAgaW5zdGVhZCAgIG9mXG4iCisiICAgICAgICAgICAgICBleHRyYWN0aW5nIGEgZmlsZW5hbWUgZnJvbSB0aGUgVVJMLlxuIgorIlxuIgorIiAgICAgICAtaywgLS1pbnNlY3VyZVxuIgorIiAgICAgICAgICAgICAgKFNTTCkgVGhpcyBvcHRpb24gZXhwbGljaXRseSBhbGxvd3MgY3VybCB0byAgcGVyZm9ybSAgXCJpbnNlY3VyZVwiXG4iCisiICAgICAgICAgICAgICBTU0wgY29ubmVjdGlvbnMgYW5kIHRyYW5zZmVycy4gQWxsIFNTTCBjb25uZWN0aW9ucyBhcmUgYXR0ZW1wdGVkXG4iCisiICAgICAgICAgICAgICB0byBiZSBtYWRlIHNlY3VyZSBieSB1c2luZyB0aGUgQ0EgY2VydGlmaWNhdGUgIGJ1bmRsZSAgaW5zdGFsbGVkXG4iCisiICAgICAgICAgICAgICBieSAgZGVmYXVsdC4gIFRoaXMgIG1ha2VzICBhbGwgY29ubmVjdGlvbnMgY29uc2lkZXJlZCBcImluc2VjdXJlXCJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGZhaWwgdW5sZXNzIC1rLCAtLWluc2VjdXJlIGlzIHVzZWQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBTZWUgICAgdGhpcyAgICBvbmxpbmUgICAgcmVzb3VyY2UgICAgZm9yICAgIGZ1cnRoZXIgICAgIGRldGFpbHM6XG4iCisiICAgICAgICAgICAgICBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3Mvc3NsY2VydHMuaHRtbFxuIgorIlxuIgorIiAgICAgICAtSywgLS1jb25maWcgPGNvbmZpZyBmaWxlPlxuIgorIiAgICAgICAgICAgICAgU3BlY2lmeSAgd2hpY2ggY29uZmlnIGZpbGUgdG8gcmVhZCBjdXJsIGFyZ3VtZW50cyBmcm9tLiBUaGUgY29uLVxuIgorIiAgICAgICAgICAgICAgZmlnIGZpbGUgaXMgYSB0ZXh0IGZpbGUgaW4gd2hpY2ggY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAgY2FuICBiZVxuIgorIiAgICAgICAgICAgICAgd3JpdHRlbiAgd2hpY2ggIHRoZW4gd2lsbCBiZSB1c2VkIGFzIGlmIHRoZXkgd2VyZSB3cml0dGVuIG9uIHRoZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgYWN0dWFsIGNvbW1hbmQgbGluZS4gT3B0aW9ucyBhbmQgdGhlaXIgcGFyYW1ldGVycyBtdXN0IGJlIHNwZWNpLVxuIgorIiAgICAgICAgICAgICAgZmllZCAgb24gIHRoZSAgc2FtZSAgY29uZmlnICBmaWxlIGxpbmUsIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLFxuIgorIiAgICAgICAgICAgICAgY29sb24sIHRoZSBlcXVhbHMgc2lnbiBvciBhbnkgY29tYmluYXRpb24gdGhlcmVvZiAoaG93ZXZlciwgIHRoZVxuIgorIiAgICAgICAgICAgICAgcHJlZmVycmVkICBzZXBhcmF0b3IgaXMgdGhlIGVxdWFscyBzaWduKS4gSWYgdGhlIHBhcmFtZXRlciBpcyB0b1xuIgorIiAgICAgICAgICAgICAgY29udGFpbiAgd2hpdGVzcGFjZSwgIHRoZSAgcGFyYW1ldGVyICBtdXN0ICBiZSAgZW5jbG9zZWQgIHdpdGhpblxuIgorIiAgICAgICAgICAgICAgcXVvdGVzLiBXaXRoaW4gZG91YmxlIHF1b3RlcywgdGhlIGZvbGxvd2luZyBlc2NhcGUgc2VxdWVuY2VzIGFyZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgYXZhaWxhYmxlOiBcXFxcLCBcXFwiLCBcXHQsIFxcbiwgXFxyIGFuZCBcXHYuIEEgYmFja3NsYXNoIHByZWNlZGluZyAgYW55XG4iCisiICAgICAgICAgICAgICBvdGhlciBsZXR0ZXIgaXMgaWdub3JlZC4gSWYgdGhlIGZpcnN0IGNvbHVtbiBvZiBhIGNvbmZpZyBsaW5lIGlzXG4iCisiICAgICAgICAgICAgICBhICcjJyBjaGFyYWN0ZXIsIHRoZSByZXN0IG9mIHRoZSBsaW5lIHdpbGwgYmUgdHJlYXRlZCBhcyBhICBjb20tXG4iCisiICAgICAgICAgICAgICBtZW50LiAgT25seSAgd3JpdGUgIG9uZSAgb3B0aW9uICBwZXIgcGh5c2ljYWwgbGluZSBpbiB0aGUgY29uZmlnXG4iCisiICAgICAgICAgICAgICBmaWxlLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgU3BlY2lmeSB0aGUgZmlsZW5hbWUgdG8gLUssIC0tY29uZmlnIGFzICctJyB0byAgbWFrZSAgY3VybCAgcmVhZFxuIgorIiAgICAgICAgICAgICAgdGhlIGZpbGUgZnJvbSBzdGRpbi5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIE5vdGUgIHRoYXQgIHRvICBiZSBhYmxlIHRvIHNwZWNpZnkgYSBVUkwgaW4gdGhlIGNvbmZpZyBmaWxlLCB5b3VcbiIKKyIgICAgICAgICAgICAgIG5lZWQgdG8gc3BlY2lmeSBpdCB1c2luZyB0aGUgLS11cmwgb3B0aW9uLCAgYW5kICBub3QgIGJ5ICBzaW1wbHlcbiIKKyIgICAgICAgICAgICAgIHdyaXRpbmcgIHRoZSAgVVJMICBvbiBpdHMgb3duIGxpbmUuIFNvLCBpdCBjb3VsZCBsb29rIHNpbWlsYXIgdG9cbiIKKyIgICAgICAgICAgICAgIHRoaXM6XG4iCisiXG4iCisiICAgICAgICAgICAgICB1cmwgPSBcImh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9cIlxuIgorIlxuIgorIiAgICAgICAgICAgICAgTG9uZyBvcHRpb24gbmFtZXMgY2FuIG9wdGlvbmFsbHkgYmUgZ2l2ZW4gIGluICB0aGUgIGNvbmZpZyAgZmlsZVxuIgorIiAgICAgICAgICAgICAgd2l0aG91dCB0aGUgaW5pdGlhbCBkb3VibGUgZGFzaGVzLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgV2hlbiBjdXJsIGlzIGludm9rZWQsIGl0IGFsd2F5cyAodW5sZXNzIC1xIGlzIHVzZWQpIGNoZWNrcyBmb3IgYVxuIgorIiAgICAgICAgICAgICAgZGVmYXVsdCBjb25maWcgZmlsZSBhbmQgdXNlcyBpdCBpZiAgZm91bmQuICBUaGUgIGRlZmF1bHQgIGNvbmZpZ1xuIgorIiAgICAgICAgICAgICAgZmlsZSBpcyBjaGVja2VkIGZvciBpbiB0aGUgZm9sbG93aW5nIHBsYWNlcyBpbiB0aGlzIG9yZGVyOlxuIgorIlxuIgorIiAgICAgICAgICAgICAgMSkgIGN1cmwgIHRyaWVzICB0byBmaW5kIHRoZSBcImhvbWUgZGlyXCI6IEl0IGZpcnN0IGNoZWNrcyBmb3IgdGhlXG4iCisiICAgICAgICAgICAgICBDVVJMX0hPTUUgYW5kIHRoZW4gdGhlIEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBGYWlsaW5nIHRoYXQsXG4iCisiICAgICAgICAgICAgICBpdCAgdXNlcyBnZXRwd3VpZCgpIG9uIFVOSVgtbGlrZSBzeXN0ZW1zICh3aGljaCByZXR1cm5zIHRoZSBob21lXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBkaXIgZ2l2ZW4gdGhlIGN1cnJlbnQgdXNlciBpbiB5b3VyIHN5c3RlbSkuIE9uIFdpbmRvd3MsIGl0ICB0aGVuXG4iCisiICAgICAgICAgICAgICBjaGVja3MgZm9yIHRoZSBBUFBEQVRBIHZhcmlhYmxlLCBvciBhcyBhIGxhc3QgcmVzb3J0IHRoZSAnJVVTRVItXG4iCisiICAgICAgICAgICAgICBQUk9GSUxFJVxcQXBwbGljYXRpb24gRGF0YScuXG4iCisiXG4iCisiICAgICAgICAgICAgICAyKSBPbiB3aW5kb3dzLCBpZiB0aGVyZSBpcyBubyBfY3VybHJjIGZpbGUgaW4gdGhlIGhvbWUgIGRpciwgIGl0XG4iCisiICAgICAgICAgICAgICBjaGVja3MgZm9yIG9uZSBpbiB0aGUgc2FtZSBkaXIgdGhlIGN1cmwgZXhlY3V0YWJsZSBpcyBwbGFjZWQuIE9uXG4iCisiICAgICAgICAgICAgICBVTklYLWxpa2Ugc3lzdGVtcywgaXQgd2lsbCBzaW1wbHkgdHJ5IHRvIGxvYWQgLmN1cmxyYyAgZnJvbSAgdGhlXG4iCisiICAgICAgICAgICAgICBkZXRlcm1pbmVkIGhvbWUgZGlyLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgIyAtLS0gRXhhbXBsZSBmaWxlIC0tLVxuIgorIiAgICAgICAgICAgICAgIyB0aGlzIGlzIGEgY29tbWVudFxuIgorIiAgICAgICAgICAgICAgdXJsID0gXCJjdXJsLmhheHguc2VcIlxuIgorIiAgICAgICAgICAgICAgb3V0cHV0ID0gXCJjdXJsaGVyZS5odG1sXCJcbiIKKyIgICAgICAgICAgICAgIHVzZXItYWdlbnQgPSBcInN1cGVyYWdlbnQvMS4wXCJcbiIKKyJcbiIKKyIgICAgICAgICAgICAgICMgYW5kIGZldGNoIGFub3RoZXIgVVJMIHRvb1xuIgorIiAgICAgICAgICAgICAgdXJsID0gXCJjdXJsLmhheHguc2UvZG9jcy9tYW5wYWdlLmh0bWxcIlxuIgorIiAgICAgICAgICAgICAgLU9cbiIKKyIgICAgICAgICAgICAgIHJlZmVyZXIgPSBcImh0dHA6Ly9ub3doZXJlYXRhbGwuY29tL1wiXG4iCisiICAgICAgICAgICAgICAjIC0tLSBFbmQgb2YgZXhhbXBsZSBmaWxlIC0tLVxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhpcyAgb3B0aW9uICBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyB0byBsb2FkIG11bHRpcGxlIGNvbmZpZ1xuIgorIiAgICAgICAgICAgICAgZmlsZXMuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgIC0ta2VlcGFsaXZlLXRpbWUgPHNlY29uZHM+XG4iCisiICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBzZXRzIHRoZSB0aW1lIGEgIGNvbm5lY3Rpb24gIG5lZWRzICB0byAgcmVtYWluICBpZGxlXG4iCisiICAgICAgICAgICAgICBiZWZvcmUgIHNlbmRpbmcga2VlcGFsaXZlIHByb2JlcyBhbmQgdGhlIHRpbWUgYmV0d2VlbiBpbmRpdmlkdWFsXG4iCisiICAgICAgICAgICAgICBrZWVwYWxpdmUgcHJvYmVzLiBJdCBpcyBjdXJyZW50bHkgZWZmZWN0aXZlIG9uIG9wZXJhdGluZyBzeXN0ZW1zXG4iCisiICAgICAgICAgICAgICBvZmZlcmluZyAgdGhlICBUQ1BfS0VFUElETEUgIGFuZCAgVENQX0tFRVBJTlRWTCAgc29ja2V0ICBvcHRpb25zXG4iCisiICAgICAgICAgICAgICAobWVhbmluZyBMaW51eCwgcmVjZW50IEFJWCwgSFAtVVggYW5kIG1vcmUpLiBUaGlzIG9wdGlvbiBoYXMgIG5vXG4iCisiICAgICAgICAgICAgICBlZmZlY3QgaWYgLS1uby1rZWVwYWxpdmUgaXMgdXNlZC4gKEFkZGVkIGluIDcuMTguMClcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIElmICB0aGlzIG9wdGlvbiBpcyB1c2VkIG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCBvY2N1cnJlbmNlIHNldHNcbiIKKyIgICAgICAgICAgICAgIHRoZSBhbW91bnQuIElmIHVuc3BlY2lmaWVkLCB0aGUgb3B0aW9uIGRlZmF1bHRzIHRvIDYwIHNlY29uZHMuXG4iCisiXG4iCisiICAgICAgIC0ta2V5IDxrZXk+XG4iCisiICAgICAgICAgICAgICAoU1NML1NTSCkgUHJpdmF0ZSBrZXkgZmlsZSBuYW1lLiBBbGxvd3MgeW91IHRvIHByb3ZpZGUgeW91ciBwcmktXG4iCisiICAgICAgICAgICAgICB2YXRlIGtleSBpbiB0aGlzIHNlcGFyYXRlIGZpbGUuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC0ta2V5LXR5cGUgPHR5cGU+XG4iCisiICAgICAgICAgICAgICAoU1NMKSAgUHJpdmF0ZSBrZXkgZmlsZSB0eXBlLiBTcGVjaWZ5IHdoaWNoIHR5cGUgeW91ciAtLWtleSBwcm8tXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICB2aWRlZCBwcml2YXRlIGtleSBpcy4gREVSLCBQRU0sIGFuZCBFTkcgYXJlICBzdXBwb3J0ZWQuICBJZiAgbm90XG4iCisiICAgICAgICAgICAgICBzcGVjaWZpZWQsIFBFTSBpcyBhc3N1bWVkLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLlxuIgorIlxuIgorIiAgICAgICAtLWtyYiA8bGV2ZWw+XG4iCisiICAgICAgICAgICAgICAoRlRQKSAgRW5hYmxlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGFuZCB1c2UuIFRoZSBsZXZlbCBtdXN0IGJlXG4iCisiICAgICAgICAgICAgICBlbnRlcmVkIGFuZCBzaG91bGQgYmUgb25lIG9mICdjbGVhcicsICdzYWZlJywgJ2NvbmZpZGVudGlhbCcsIG9yXG4iCisiICAgICAgICAgICAgICAncHJpdmF0ZScuICBTaG91bGQgIHlvdSAgdXNlICBhICBsZXZlbCB0aGF0IGlzIG5vdCBvbmUgb2YgdGhlc2UsXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAncHJpdmF0ZScgd2lsbCBpbnN0ZWFkIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBUaGlzIG9wdGlvbiByZXF1aXJlcyBhIGxpYnJhcnkgYnVpbHQgd2l0aCAga2VyYmVyb3M0ICBvciAgR1NTQVBJXG4iCisiICAgICAgICAgICAgICAoR1NTLU5lZ290aWF0ZSkgc3VwcG9ydC4gVGhpcyBpcyBub3QgdmVyeSBjb21tb24uIFVzZSAtViwgLS12ZXItXG4iCisiICAgICAgICAgICAgICBzaW9uIHRvIHNlZSBpZiB5b3VyIGN1cmwgc3VwcG9ydHMgaXQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC1sLCAtLWxpc3Qtb25seVxuIgorIiAgICAgICAgICAgICAgKEZUUCkgV2hlbiBsaXN0aW5nIGFuIEZUUCBkaXJlY3RvcnksIHRoaXMgc3dpdGNoIGZvcmNlcyBhICBuYW1lLVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgb25seSAgdmlldy4gICBFc3BlY2lhbGx5IHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBtYWNoaW5lLXBhcnNlIHRoZVxuIgorIiAgICAgICAgICAgICAgY29udGVudHMgb2YgYW4gRlRQIGRpcmVjdG9yeSBzaW5jZSAgdGhlICBub3JtYWwgIGRpcmVjdG9yeSAgdmlld1xuIgorIiAgICAgICAgICAgICAgZG9lc24ndCB1c2UgYSBzdGFuZGFyZCBsb29rIG9yIGZvcm1hdC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoaXMgIG9wdGlvbiAgY2F1c2VzICBhbiAgRlRQIE5MU1QgY29tbWFuZCB0byBiZSBzZW50LiAgU29tZSBGVFBcbiIKKyIgICAgICAgICAgICAgIHNlcnZlcnMgbGlzdCBvbmx5IGZpbGVzIGluIHRoZWlyIHJlc3BvbnNlIHRvIE5MU1Q7IHRoZXkgIGRvICBub3RcbiIKKyIgICAgICAgICAgICAgIGluY2x1ZGUgc3ViZGlyZWN0b3JpZXMgYW5kIHN5bWJvbGljIGxpbmtzLlxuIgorIlxuIgorIiAgICAgICAtTCwgLS1sb2NhdGlvblxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgKEhUVFAvSFRUUFMpICBJZiAgdGhlIHNlcnZlciByZXBvcnRzIHRoYXQgdGhlIHJlcXVlc3RlZCBwYWdlIGhhc1xuIgorIiAgICAgICAgICAgICAgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24gKGluZGljYXRlZCB3aXRoIGEgTG9jYXRpb246IGhlYWRlclxuIgorIiAgICAgICAgICAgICAgYW5kICBhICAzWFggIHJlc3BvbnNlIGNvZGUpLCB0aGlzIG9wdGlvbiB3aWxsIG1ha2UgY3VybCByZWRvIHRoZVxuIgorIiAgICAgICAgICAgICAgcmVxdWVzdCBvbiB0aGUgbmV3IHBsYWNlLiBJZiB1c2VkIHRvZ2V0aGVyIHdpdGggLWksIC0taW5jbHVkZSBvclxuIgorIiAgICAgICAgICAgICAgLUksIC0taGVhZCwgaGVhZGVycyBmcm9tIGFsbCByZXF1ZXN0ZWQgcGFnZXMgd2lsbCBiZSBzaG93bi4gV2hlblxuIgorIiAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24gaXMgdXNlZCwgY3VybCBvbmx5IHNlbmRzIGl0cyBjcmVkZW50aWFscyAgdG8gIHRoZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgaW5pdGlhbCAgaG9zdC4gIElmIGEgcmVkaXJlY3QgdGFrZXMgY3VybCB0byBhIGRpZmZlcmVudCBob3N0LCBpdFxuIgorIiAgICAgICAgICAgICAgd29uJ3QgYmUgYWJsZSB0byBpbnRlcmNlcHQgdGhlIHVzZXIrcGFzc3dvcmQuIFNlZSAgYWxzbyAgLS1sb2NhLVxuIgorIiAgICAgICAgICAgICAgdGlvbi10cnVzdGVkICBvbiBob3cgdG8gY2hhbmdlIHRoaXMuIFlvdSBjYW4gbGltaXQgdGhlIGFtb3VudCBvZlxuIgorIiAgICAgICAgICAgICAgcmVkaXJlY3RzIHRvIGZvbGxvdyBieSB1c2luZyB0aGUgLS1tYXgtcmVkaXJzIG9wdGlvbi5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFdoZW4gY3VybCBmb2xsb3dzIGEgcmVkaXJlY3QgYW5kIHRoZSByZXF1ZXN0IGlzIG5vdCBhIHBsYWluICBHRVRcbiIKKyIgICAgICAgICAgICAgIChmb3IgZXhhbXBsZSBQT1NUIG9yIFBVVCksIGl0IHdpbGwgZG8gdGhlIGZvbGxvd2luZyByZXF1ZXN0IHdpdGhcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGEgR0VUIGlmIHRoZSBIVFRQIHJlc3BvbnNlIHdhcyAzMDEsIDMwMiwgb3IgMzAzLiBJZiB0aGUgcmVzcG9uc2VcbiIKKyIgICAgICAgICAgICAgIGNvZGUgIHdhcyAgYW55ICBvdGhlciAgM3h4IGNvZGUsIGN1cmwgd2lsbCByZS1zZW5kIHRoZSBmb2xsb3dpbmdcbiIKKyIgICAgICAgICAgICAgIHJlcXVlc3QgdXNpbmcgdGhlIHNhbWUgdW5tb2RpZmllZCBtZXRob2QuXG4iCisiXG4iCisiICAgICAgIC0tbGliY3VybCA8ZmlsZT5cbiIKKyIgICAgICAgICAgICAgIEFwcGVuZCB0aGlzIG9wdGlvbiB0byBhbnkgb3JkaW5hcnkgY3VybCBjb21tYW5kICBsaW5lLCAgYW5kICB5b3VcbiIKKyIgICAgICAgICAgICAgIHdpbGwgIGdldCBhIGxpYmN1cmwtdXNpbmcgQyBzb3VyY2UgY29kZSB3cml0dGVuIHRvIHRoZSBmaWxlIHRoYXRcbiIKKyIgICAgICAgICAgICAgIGRvZXMgdGhlIGVxdWl2YWxlbnQgb2Ygd2hhdCB5b3VyIGNvbW1hbmQtbGluZSBvcGVyYXRpb24gZG9lcyFcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3QgZ2l2ZW4gIGZpbGUgIG5hbWVcbiIKKyIgICAgICAgICAgICAgIHdpbGwgYmUgdXNlZC4gKEFkZGVkIGluIDcuMTYuMSlcbiIKKyJcbiIKKyIgICAgICAgLS1saW1pdC1yYXRlIDxzcGVlZD5cbiIKKyIgICAgICAgICAgICAgIFNwZWNpZnkgIHRoZSAgbWF4aW11bSAgdHJhbnNmZXIgIHJhdGUgeW91IHdhbnQgY3VybCB0byB1c2UuIFRoaXNcbiIKKyIgICAgICAgICAgICAgIGZlYXR1cmUgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIGEgbGltaXRlZCBwaXBlIGFuZCB5b3UnZCBsaWtlIHlvdXJcbiIKKyIgICAgICAgICAgICAgIHRyYW5zZmVyIG5vdCB0byB1c2UgeW91ciBlbnRpcmUgYmFuZHdpZHRoLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhlICBnaXZlbiBzcGVlZCBpcyBtZWFzdXJlZCBpbiBieXRlcy9zZWNvbmQsIHVubGVzcyBhIHN1ZmZpeCBpc1xuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgYXBwZW5kZWQuICBBcHBlbmRpbmcgJ2snIG9yICdLJyB3aWxsIGNvdW50IHRoZSBudW1iZXIgIGFzICBraWxvLVxuIgorIiAgICAgICAgICAgICAgYnl0ZXMsICAnbScgIG9yIE0nIG1ha2VzIGl0IG1lZ2FieXRlcywgd2hpbGUgJ2cnIG9yICdHJyBtYWtlcyBpdFxuIgorIiAgICAgICAgICAgICAgZ2lnYWJ5dGVzLiBFeGFtcGxlczogMjAwSywgM20gYW5kIDFHLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhlIGdpdmVuIHJhdGUgaXMgdGhlIGF2ZXJhZ2Ugc3BlZWQgY291bnRlZCAgZHVyaW5nICB0aGUgIGVudGlyZVxuIgorIiAgICAgICAgICAgICAgdHJhbnNmZXIuIEl0IG1lYW5zIHRoYXQgY3VybCBtaWdodCB1c2UgaGlnaGVyIHRyYW5zZmVyIHNwZWVkcyBpblxuIgorIiAgICAgICAgICAgICAgc2hvcnQgYnVyc3RzLCBidXQgb3ZlciB0aW1lIGl0IHVzZXMgbm8gbW9yZSB0aGFuIHRoZSBnaXZlbiByYXRlLlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgSWYgeW91IGFsc28gdXNlIHRoZSAtWSwgLS1zcGVlZC1saW1pdCBvcHRpb24sIHRoYXQgIG9wdGlvbiAgd2lsbFxuIgorIiAgICAgICAgICAgICAgdGFrZSBwcmVjZWRlbmNlIGFuZCBtaWdodCBjcmlwcGxlIHRoZSByYXRlLWxpbWl0aW5nIHNsaWdodGx5LCB0b1xuIgorIiAgICAgICAgICAgICAgaGVscCBrZWVwaW5nIHRoZSBzcGVlZC1saW1pdCBsb2dpYyB3b3JraW5nLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLlxuIgorIlxuIgorIiAgICAgICAtLWxvY2FsLXBvcnQgPG51bT5bLW51bV1cbiIKKyIgICAgICAgICAgICAgIFNldCBhIHByZWZlcnJlZCBudW1iZXIgb3IgcmFuZ2Ugb2YgbG9jYWwgcG9ydCBudW1iZXJzIHRvIHVzZSBmb3JcbiIKKyIgICAgICAgICAgICAgIHRoZSAgY29ubmVjdGlvbihzKS4gICBOb3RlICB0aGF0ICBwb3J0ICBudW1iZXJzICBieSBuYXR1cmUgYXJlIGFcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHNjYXJjZSByZXNvdXJjZSB0aGF0IHdpbGwgYmUgYnVzeSBhdCB0aW1lcyBzbyBzZXR0aW5nIHRoaXMgcmFuZ2VcbiIKKyIgICAgICAgICAgICAgIHRvIHNvbWV0aGluZyB0b28gbmFycm93IG1pZ2h0IGNhdXNlIHVubmVjZXNzYXJ5IGNvbm5lY3Rpb24gc2V0dXBcbiIKKyIgICAgICAgICAgICAgIGZhaWx1cmVzLiAoQWRkZWQgaW4gNy4xNS4yKVxuIgorIlxuIgorIiAgICAgICAtLWxvY2F0aW9uLXRydXN0ZWRcbiIKKyIgICAgICAgICAgICAgIChIVFRQL0hUVFBTKSBMaWtlIC1MLCAtLWxvY2F0aW9uLCBidXQgIHdpbGwgIGFsbG93ICBzZW5kaW5nICB0aGVcbiIKKyIgICAgICAgICAgICAgIG5hbWUgKyBwYXNzd29yZCB0byBhbGwgaG9zdHMgdGhhdCB0aGUgc2l0ZSBtYXkgcmVkaXJlY3QgdG8uIFRoaXNcbiIKKyIgICAgICAgICAgICAgIG1heSBvciBtYXkgbm90IGludHJvZHVjZSBhIHNlY3VyaXR5IGJyZWFjaCBpZiB0aGUgc2l0ZSByZWRpcmVjdHNcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHlvdSAgdG8gIGEgIHNpdGUgIHRvICB3aGljaCB5b3UnbGwgc2VuZCB5b3VyIGF1dGhlbnRpY2F0aW9uIGluZm9cbiIKKyIgICAgICAgICAgICAgICh3aGljaCBpcyBwbGFpbnRleHQgaW4gdGhlIGNhc2Ugb2YgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbikuXG4iCisiXG4iCisiICAgICAgIC1tLCAtLW1heC10aW1lIDxzZWNvbmRzPlxuIgorIiAgICAgICAgICAgICAgTWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCB5b3UgYWxsb3cgdGhlICB3aG9sZSAgb3BlcmF0aW9uICB0b1xuIgorIiAgICAgICAgICAgICAgdGFrZS4gICBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJldmVudGluZyB5b3VyIGJhdGNoIGpvYnMgZnJvbSBoYW5nLVxuIgorIiAgICAgICAgICAgICAgaW5nIGZvciBob3VycyBkdWUgdG8gc2xvdyBuZXR3b3JrcyBvciAgbGlua3MgIGdvaW5nICBkb3duLiAgIFNlZVxuIgorIiAgICAgICAgICAgICAgYWxzbyB0aGUgLS1jb25uZWN0LXRpbWVvdXQgb3B0aW9uLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLlxuIgorIlxuIgorIiAgICAgICAtLW1haWwtYXV0aCA8YWRkcmVzcz5cbiIKKyIgICAgICAgICAgICAgIChTTVRQKSAgU3BlY2lmeSAgYSAgc2luZ2xlIGFkZHJlc3MuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHNwZWNpZnlcbiIKKyIgICAgICAgICAgICAgIHRoZSBhdXRoZW50aWNhdGlvbiBhZGRyZXNzIChpZGVudGl0eSkgIG9mICBhICBzdWJtaXR0ZWQgIG1lc3NhZ2VcbiIKKyIgICAgICAgICAgICAgIHRoYXQgaXMgYmVpbmcgcmVsYXllZCB0byBhbm90aGVyIHNlcnZlci5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIChBZGRlZCBpbiA3LjI1LjApXG4iCisiXG4iCisiICAgICAgIC0tbWFpbC1mcm9tIDxhZGRyZXNzPlxuIgorIiAgICAgICAgICAgICAgKFNNVFApICBTcGVjaWZ5ICBhIHNpbmdsZSBhZGRyZXNzIHRoYXQgdGhlIGdpdmVuIG1haWwgc2hvdWxkIGdldFxuIgorIiAgICAgICAgICAgICAgc2VudCBmcm9tLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgKEFkZGVkIGluIDcuMjAuMClcbiIKKyJcbiIKKyIgICAgICAgLS1tYXgtZmlsZXNpemUgPGJ5dGVzPlxuIgorIiAgICAgICAgICAgICAgU3BlY2lmeSB0aGUgbWF4aW11bSBzaXplIChpbiBieXRlcykgb2YgYSBmaWxlICB0byAgZG93bmxvYWQuICBJZlxuIgorIiAgICAgICAgICAgICAgdGhlICBmaWxlIHJlcXVlc3RlZCBpcyBsYXJnZXIgdGhhbiB0aGlzIHZhbHVlLCB0aGUgdHJhbnNmZXIgd2lsbFxuIgorIiAgICAgICAgICAgICAgbm90IHN0YXJ0IGFuZCBjdXJsIHdpbGwgcmV0dXJuIHdpdGggZXhpdCBjb2RlIDYzLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgTk9URTogVGhlIGZpbGUgc2l6ZSBpcyBub3QgYWx3YXlzIGtub3duIHByaW9yIHRvICBkb3dubG9hZCwgIGFuZFxuIgorIiAgICAgICAgICAgICAgZm9yIHN1Y2ggZmlsZXMgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBldmVuIGlmIHRoZSBmaWxlIHRyYW5zLVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgZmVyIGVuZHMgdXAgYmVpbmcgbGFyZ2VyIHRoYW4gdGhpcyBnaXZlbiAgbGltaXQuICBUaGlzICBjb25jZXJuc1xuIgorIiAgICAgICAgICAgICAgYm90aCBGVFAgYW5kIEhUVFAgdHJhbnNmZXJzLlxuIgorIlxuIgorIiAgICAgICAtLW1haWwtcmNwdCA8YWRkcmVzcz5cbiIKKyIgICAgICAgICAgICAgIChTTVRQKSAgU3BlY2lmeSAgYSBzaW5nbGUgYWRkcmVzcyB0aGF0IHRoZSBnaXZlbiBtYWlsIHNob3VsZCBnZXRcbiIKKyIgICAgICAgICAgICAgIHNlbnQgdG8uIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzIHRvIHNwZWNpZnkgIG1hbnlcbiIKKyIgICAgICAgICAgICAgIHJlY2lwaWVudHMuXG4iCisiXG4iCisiICAgICAgICAgICAgICAoQWRkZWQgaW4gNy4yMC4wKVxuIgorIlxuIgorIiAgICAgICAtLW1heC1yZWRpcnMgPG51bT5cbiIKKyIgICAgICAgICAgICAgIFNldCAgbWF4aW11bSAgbnVtYmVyICBvZiAgcmVkaXJlY3Rpb24tZm9sbG93aW5ncyBhbGxvd2VkLiBJZiAtTCxcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIC0tbG9jYXRpb24gaXMgdXNlZCwgdGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcHJldmVudCBjdXJsIGZyb21cbiIKKyIgICAgICAgICAgICAgIGZvbGxvd2luZyAgcmVkaXJlY3Rpb25zICBcImluIGFic3VyZHVtXCIuIEJ5IGRlZmF1bHQsIHRoZSBsaW1pdCBpc1xuIgorIiAgICAgICAgICAgICAgc2V0IHRvIDUwIHJlZGlyZWN0aW9ucy4gU2V0IHRoaXMgb3B0aW9uIHRvIC0xIHRvIG1ha2UgaXQgIGxpbWl0LVxuIgorIiAgICAgICAgICAgICAgbGVzcy5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC5cbiIKKyJcbiIKKyIgICAgICAgLW4sIC0tbmV0cmNcbiIKKyIgICAgICAgICAgICAgIE1ha2VzICBjdXJsICBzY2FuICB0aGUgIC5uZXRyYyAgKF9uZXRyYyAgb24gV2luZG93cykgZmlsZSBpbiB0aGVcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHVzZXIncyBob21lIGRpcmVjdG9yeSBmb3IgbG9naW4gbmFtZSBhbmQgcGFzc3dvcmQuIFRoaXMgaXMgdHlwaS1cbiIKKyIgICAgICAgICAgICAgIGNhbGx5ICB1c2VkIGZvciBGVFAgb24gVU5JWC4gSWYgdXNlZCB3aXRoIEhUVFAsIGN1cmwgd2lsbCBlbmFibGVcbiIKKyIgICAgICAgICAgICAgIHVzZXIgYXV0aGVudGljYXRpb24uIFNlZSBuZXRyYyg0KSBvciBmdHAoMSkgZm9yIGRldGFpbHMgIG9uICB0aGVcbiIKKyIgICAgICAgICAgICAgIGZpbGUgIGZvcm1hdC4gIEN1cmwgIHdpbGwgbm90IGNvbXBsYWluIGlmIHRoYXQgZmlsZSBkb2Vzbid0IGhhdmVcbiIKKyIgICAgICAgICAgICAgIHRoZSByaWdodCBwZXJtaXNzaW9ucyAoaXQgc2hvdWxkIG5vdCBiZSBlaXRoZXIgd29ybGQtIG9yICBncm91cC1cbiIKKyIgICAgICAgICAgICAgIHJlYWRhYmxlKS4gIFRoZSAgZW52aXJvbm1lbnQgdmFyaWFibGUgXCJIT01FXCIgaXMgdXNlZCB0byBmaW5kIHRoZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgaG9tZSBkaXJlY3RvcnkuXG4iCisiXG4iCisiICAgICAgICAgICAgICBBIHF1aWNrIGFuZCB2ZXJ5IHNpbXBsZSBleGFtcGxlIG9mIGhvdyAgdG8gIHNldHVwICBhICAubmV0cmMgIHRvXG4iCisiICAgICAgICAgICAgICBhbGxvdyAgY3VybCB0byBGVFAgdG8gdGhlIG1hY2hpbmUgaG9zdC5kb21haW4uY29tIHdpdGggdXNlciBuYW1lXG4iCisiICAgICAgICAgICAgICAnbXlzZWxmJyBhbmQgcGFzc3dvcmQgJ3NlY3JldCcgc2hvdWxkIGxvb2sgc2ltaWxhciB0bzpcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIG1hY2hpbmUgaG9zdC5kb21haW4uY29tIGxvZ2luIG15c2VsZiBwYXNzd29yZCBzZWNyZXRcbiIKKyJcbiIKKyIgICAgICAgLU4sIC0tbm8tYnVmZmVyXG4iCisiICAgICAgICAgICAgICBEaXNhYmxlcyB0aGUgYnVmZmVyaW5nIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiBJbiBub3JtYWwgd29yayBzaXQtXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICB1YXRpb25zLCAgY3VybCAgd2lsbCAgdXNlIGEgc3RhbmRhcmQgYnVmZmVyZWQgb3V0cHV0IHN0cmVhbSB0aGF0XG4iCisiICAgICAgICAgICAgICB3aWxsIGhhdmUgdGhlIGVmZmVjdCB0aGF0IGl0IHdpbGwgb3V0cHV0IHRoZSBkYXRhIGluIGNodW5rcywgbm90XG4iCisiICAgICAgICAgICAgICBuZWNlc3NhcmlseSAgZXhhY3RseSAgd2hlbiAgdGhlIGRhdGEgYXJyaXZlcy4gIFVzaW5nIHRoaXMgb3B0aW9uXG4iCisiICAgICAgICAgICAgICB3aWxsIGRpc2FibGUgdGhhdCBidWZmZXJpbmcuXG4iCisiXG4iCisiICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgbmVnYXRlZCBvcHRpb24gbmFtZSAgZG9jdW1lbnRlZC4gIFlvdSAgY2FuXG4iCisiICAgICAgICAgICAgICB0aHVzIHVzZSAtLWJ1ZmZlciB0byBlbmZvcmNlIHRoZSBidWZmZXJpbmcuXG4iCisiXG4iCisiICAgICAgIC0tbmV0cmMtZmlsZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgVGhpcyAgb3B0aW9uICBpcyBzaW1pbGFyIHRvIC0tbmV0cmMsIGV4Y2VwdCB0aGF0IHlvdSBwcm92aWRlIHRoZVxuIgorIiAgICAgICAgICAgICAgcGF0aCAoYWJzb2x1dGUgb3IgcmVsYXRpdmUpIHRvIHRoZSBuZXRyYyBmaWxlIHRoYXQgIEN1cmwgIHNob3VsZFxuIgorIiAgICAgICAgICAgICAgdXNlLiAgIFlvdSAgY2FuICBvbmx5ICBzcGVjaWZ5IG9uZSBuZXRyYyBmaWxlIHBlciBpbnZvY2F0aW9uLiBJZlxuIgorIiAgICAgICAgICAgICAgc2V2ZXJhbCAtLW5ldHJjLWZpbGUgb3B0aW9ucyBhcmUgcHJvdmlkZWQsICBvbmx5ICB0aGUgIGxhc3QgIG9uZVxuIgorIiAgICAgICAgICAgICAgd2lsbCBiZSB1c2VkLiAgKEFkZGVkIGluIDcuMjEuNSlcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoaXMgIG9wdGlvbiAgb3ZlcnJpZGVzICBhbnkgdXNlIG9mIC0tbmV0cmMgYXMgdGhleSBhcmUgbXV0dWFsbHlcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGV4Y2x1c2l2ZS4gIEl0IHdpbGwgYWxzbyBhYmlkZSBieSAtLW5ldHJjLW9wdGlvbmFsIGlmIHNwZWNpZmllZC5cbiIKKyJcbiIKKyIgICAgICAgLS1uZXRyYy1vcHRpb25hbFxuIgorIiAgICAgICAgICAgICAgVmVyeSBzaW1pbGFyIHRvIC0tbmV0cmMsIGJ1dCB0aGlzIG9wdGlvbiBtYWtlcyB0aGUgLm5ldHJjICB1c2FnZVxuIgorIiAgICAgICAgICAgICAgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRvcnkgYXMgdGhlIC0tbmV0cmMgb3B0aW9uIGRvZXMuXG4iCisiXG4iCisiICAgICAgIC0tbmVnb3RpYXRlXG4iCisiICAgICAgICAgICAgICAoSFRUUCkgIEVuYWJsZXMgIEdTUy1OZWdvdGlhdGUgYXV0aGVudGljYXRpb24uIFRoZSBHU1MtTmVnb3RpYXRlXG4iCisiICAgICAgICAgICAgICBtZXRob2Qgd2FzIGRlc2lnbmVkIGJ5IE1pY3Jvc29mdCBhbmQgaXMgdXNlZCBpbiB0aGVpciB3ZWIgYXBwbGktXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBjYXRpb25zLiAgSXQgIGlzICBwcmltYXJpbHkgIG1lYW50ICBhcyAgYSAgc3VwcG9ydCBmb3IgS2VyYmVyb3M1XG4iCisiICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbiBidXQgbWF5IGJlIGFsc28gdXNlZCBhbG9uZyB3aXRoIGFub3RoZXIgYXV0aGVudGktXG4iCisiICAgICAgICAgICAgICBjYXRpb24gbWV0aG9kLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgSUVURiBkcmFmdCBkcmFmdC1icmV6YWstXG4iCisiICAgICAgICAgICAgICBzcG5lZ28taHR0cC0wNC50eHQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBlbmFibGUgTmVnb3RpYXRlIGZvciB5b3VyICBwcm94eSAgYXV0aGVudGljYXRpb24sXG4iCisiICAgICAgICAgICAgICB0aGVuIHVzZSAtLXByb3h5LW5lZ290aWF0ZS5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoaXMgIG9wdGlvbiAgcmVxdWlyZXMgYSBsaWJyYXJ5IGJ1aWx0IHdpdGggR1NTQVBJIHN1cHBvcnQuIFRoaXNcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGlzIG5vdCB2ZXJ5IGNvbW1vbi4gVXNlIC1WLCAtLXZlcnNpb24gdG8gIHNlZSAgaWYgIHlvdXIgIHZlcnNpb25cbiIKKyIgICAgICAgICAgICAgIHN1cHBvcnRzIEdTUy1OZWdvdGlhdGUuXG4iCisiXG4iCisiICAgICAgICAgICAgICBXaGVuICB1c2luZyB0aGlzIG9wdGlvbiwgeW91IG11c3QgYWxzbyBwcm92aWRlIGEgZmFrZSAtdSwgLS11c2VyXG4iCisiICAgICAgICAgICAgICBvcHRpb24gdG8gYWN0aXZhdGUgdGhlIGF1dGhlbnRpY2F0aW9uIGNvZGUgcHJvcGVybHkuICBTZW5kaW5nICBhXG4iCisiICAgICAgICAgICAgICAnLXUgIDonICBpcyAgZW5vdWdoICBhcyAgdGhlICB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIGZyb20gdGhlIC11XG4iCisiICAgICAgICAgICAgICBvcHRpb24gYXJlbid0IGFjdHVhbGx5IHVzZWQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBmb2xsb3dpbmcgIG9jY3VycmVuY2VzXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBtYWtlIG5vIGRpZmZlcmVuY2UuXG4iCisiXG4iCisiICAgICAgIC0tbm8ta2VlcGFsaXZlXG4iCisiICAgICAgICAgICAgICBEaXNhYmxlcyB0aGUgdXNlIG9mIGtlZXBhbGl2ZSBtZXNzYWdlcyBvbiB0aGUgVENQIGNvbm5lY3Rpb24sIGFzXG4iCisiICAgICAgICAgICAgICBieSBkZWZhdWx0IGN1cmwgZW5hYmxlcyB0aGVtLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG5lZ2F0ZWQgb3B0aW9uIG5hbWUgIGRvY3VtZW50ZWQuICBZb3UgIGNhblxuIgorIiAgICAgICAgICAgICAgdGh1cyB1c2UgLS1rZWVwYWxpdmUgdG8gZW5mb3JjZSBrZWVwYWxpdmUuXG4iCisiXG4iCisiICAgICAgIC0tbm8tc2Vzc2lvbmlkXG4iCisiICAgICAgICAgICAgICAoU1NMKSAgRGlzYWJsZSBjdXJsJ3MgdXNlIG9mIFNTTCBzZXNzaW9uLUlEIGNhY2hpbmcuICBCeSBkZWZhdWx0XG4iCisiICAgICAgICAgICAgICBhbGwgdHJhbnNmZXJzIGFyZSBkb25lIHVzaW5nIHRoZSBjYWNoZS4gTm90ZSB0aGF0IHdoaWxlICBub3RoaW5nXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBzaG91bGQgIGV2ZXIgIGdldCAgaHVydCAgYnkgYXR0ZW1wdGluZyB0byByZXVzZSBTU0wgc2Vzc2lvbi1JRHMsXG4iCisiICAgICAgICAgICAgICB0aGVyZSBzZWVtIHRvIGJlIGJyb2tlbiBTU0wgaW1wbGVtZW50YXRpb25zIGluIHRoZSB3aWxkIHRoYXQgbWF5XG4iCisiICAgICAgICAgICAgICByZXF1aXJlICB5b3UgdG8gZGlzYWJsZSB0aGlzIGluIG9yZGVyIGZvciB5b3UgdG8gc3VjY2VlZC4gKEFkZGVkXG4iCisiICAgICAgICAgICAgICBpbiA3LjE2LjApXG4iCisiXG4iCisiICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgbmVnYXRlZCBvcHRpb24gbmFtZSAgZG9jdW1lbnRlZC4gIFlvdSAgY2FuXG4iCisiICAgICAgICAgICAgICB0aHVzIHVzZSAtLXNlc3Npb25pZCB0byBlbmZvcmNlIHNlc3Npb24tSUQgY2FjaGluZy5cbiIKKyJcbiIKKyIgICAgICAgLS1ub3Byb3h5IDxuby1wcm94eS1saXN0PlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgQ29tbWEtc2VwYXJhdGVkICBsaXN0ICBvZiBob3N0cyB3aGljaCBkbyBub3QgdXNlIGEgcHJveHksIGlmIG9uZVxuIgorIiAgICAgICAgICAgICAgaXMgc3BlY2lmaWVkLiAgVGhlIG9ubHkgd2lsZGNhcmQgaXMgYSBzaW5nbGUgKiBjaGFyYWN0ZXIsICB3aGljaFxuIgorIiAgICAgICAgICAgICAgbWF0Y2hlcyBhbGwgaG9zdHMsIGFuZCBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGUgcHJveHkuIEVhY2ggbmFtZVxuIgorIiAgICAgICAgICAgICAgaW4gdGhpcyBsaXN0IGlzIG1hdGNoZWQgYXMgZWl0aGVyIGEgZG9tYWluICB3aGljaCAgY29udGFpbnMgIHRoZVxuIgorIiAgICAgICAgICAgICAgaG9zdG5hbWUsICBvciAgdGhlIGhvc3RuYW1lIGl0c2VsZi4gRm9yIGV4YW1wbGUsIGxvY2FsLmNvbSB3b3VsZFxuIgorIiAgICAgICAgICAgICAgbWF0Y2ggIGxvY2FsLmNvbSwgIGxvY2FsLmNvbTo4MCwgIGFuZCAgd3d3LmxvY2FsLmNvbSwgIGJ1dCAgIG5vdFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgd3d3Lm5vdGxvY2FsLmNvbS4gIChBZGRlZCBpbiA3LjE5LjQpLlxuIgorIlxuIgorIiAgICAgICAtLW50bG0gKEhUVFApICBFbmFibGVzICBOVExNICBhdXRoZW50aWNhdGlvbi4gIFRoZSAgTlRMTSBhdXRoZW50aWNhdGlvblxuIgorIiAgICAgICAgICAgICAgbWV0aG9kIHdhcyBkZXNpZ25lZCBieSBNaWNyb3NvZnQgYW5kIGlzIHVzZWQgYnkgSUlTIHdlYiBzZXJ2ZXJzLlxuIgorIiAgICAgICAgICAgICAgSXQgIGlzIGEgcHJvcHJpZXRhcnkgcHJvdG9jb2wsIHJldmVyc2UtZW5naW5lZXJlZCBieSBjbGV2ZXIgcGVvLVxuIgorIiAgICAgICAgICAgICAgcGxlIGFuZCBpbXBsZW1lbnRlZCBpbiBjdXJsIGJhc2VkIG9uIHRoZWlyIGVmZm9ydHMuIFRoaXMga2luZCBvZlxuIgorIiAgICAgICAgICAgICAgYmVoYXZpb3IgIHNob3VsZCAgbm90IGJlIGVuZG9yc2VkLCB5b3Ugc2hvdWxkIGVuY291cmFnZSBldmVyeW9uZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgd2hvIHVzZXMgTlRMTSB0byBzd2l0Y2ggdG8gYSBwdWJsaWMgYW5kICBkb2N1bWVudGVkICBhdXRoZW50aWNhLVxuIgorIiAgICAgICAgICAgICAgdGlvbiBtZXRob2QgaW5zdGVhZCwgc3VjaCBhcyBEaWdlc3QuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiAgeW91ICB3YW50IHRvIGVuYWJsZSBOVExNIGZvciB5b3VyIHByb3h5IGF1dGhlbnRpY2F0aW9uLCB0aGVuXG4iCisiICAgICAgICAgICAgICB1c2UgLS1wcm94eS1udGxtLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhpcyBvcHRpb24gcmVxdWlyZXMgYSBsaWJyYXJ5IGJ1aWx0IHdpdGggU1NMIHN1cHBvcnQuICBVc2UgIC1WLFxuIgorIiAgICAgICAgICAgICAgLS12ZXJzaW9uIHRvIHNlZSBpZiB5b3VyIGN1cmwgc3VwcG9ydHMgTlRMTS5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmICB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBmb2xsb3dpbmcgb2NjdXJyZW5jZXNcbiIKKyIgICAgICAgICAgICAgIG1ha2Ugbm8gZGlmZmVyZW5jZS5cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgLW8sIC0tb3V0cHV0IDxmaWxlPlxuIgorIiAgICAgICAgICAgICAgV3JpdGUgb3V0cHV0IHRvIDxmaWxlPiBpbnN0ZWFkIG9mIHN0ZG91dC4gSWYgeW91IGFyZSB1c2luZyB7fSBvclxuIgorIiAgICAgICAgICAgICAgW10gIHRvICBmZXRjaCAgbXVsdGlwbGUgZG9jdW1lbnRzLCB5b3UgY2FuIHVzZSAnIycgZm9sbG93ZWQgYnkgYVxuIgorIiAgICAgICAgICAgICAgbnVtYmVyIGluIHRoZSA8ZmlsZT4gc3BlY2lmaWVyLiBUaGF0IHZhcmlhYmxlIHdpbGwgIGJlICByZXBsYWNlZFxuIgorIiAgICAgICAgICAgICAgd2l0aCB0aGUgY3VycmVudCBzdHJpbmcgZm9yIHRoZSBVUkwgYmVpbmcgZmV0Y2hlZC4gTGlrZSBpbjpcbiIKKyJcbiIKKyIgICAgICAgICAgICAgICAgY3VybCBodHRwOi8ve29uZSx0d299LnNpdGUuY29tIC1vIFwiZmlsZV8jMS50eHRcIlxuIgorIlxuIgorIiAgICAgICAgICAgICAgb3IgdXNlIHNldmVyYWwgdmFyaWFibGVzIGxpa2U6XG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAgIGN1cmwgaHR0cDovL3tzaXRlLGhvc3R9Lmhvc3RbMS01XS5jb20gLW8gXCIjMV8jMlwiXG4iCisiXG4iCisiICAgICAgICAgICAgICBZb3UgIG1heSB1c2UgdGhpcyBvcHRpb24gYXMgbWFueSB0aW1lcyBhcyB0aGUgbnVtYmVyIG9mIFVSTHMgeW91XG4iCisiICAgICAgICAgICAgICBoYXZlLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgU2VlIGFsc28gdGhlIC0tY3JlYXRlLWRpcnMgb3B0aW9uIHRvIGNyZWF0ZSB0aGUgIGxvY2FsICBkaXJlY3RvLVxuIgorIiAgICAgICAgICAgICAgcmllcyAgZHluYW1pY2FsbHkuICBTcGVjaWZ5aW5nIHRoZSBvdXRwdXQgYXMgJy0nIChhIHNpbmdsZSBkYXNoKVxuIgorIiAgICAgICAgICAgICAgd2lsbCBmb3JjZSB0aGUgb3V0cHV0IHRvIGJlIGRvbmUgdG8gc3Rkb3V0LlxuIgorIlxuIgorIiAgICAgICAtTywgLS1yZW1vdGUtbmFtZVxuIgorIiAgICAgICAgICAgICAgV3JpdGUgb3V0cHV0IHRvIGEgbG9jYWwgZmlsZSBuYW1lZCBsaWtlIHRoZSByZW1vdGUgZmlsZSB3ZSAgZ2V0LlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgKE9ubHkgIHRoZSBmaWxlIHBhcnQgb2YgdGhlIHJlbW90ZSBmaWxlIGlzIHVzZWQsIHRoZSBwYXRoIGlzIGN1dFxuIgorIiAgICAgICAgICAgICAgb2ZmLilcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoZSByZW1vdGUgZmlsZSBuYW1lIHRvIHVzZSBmb3Igc2F2aW5nICBpcyAgZXh0cmFjdGVkICBmcm9tICB0aGVcbiIKKyIgICAgICAgICAgICAgIGdpdmVuIFVSTCwgbm90aGluZyBlbHNlLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgQ29uc2VxdWVudGlhbGx5LCAgdGhlICBmaWxlIHdpbGwgYmUgc2F2ZWQgaW4gdGhlIGN1cnJlbnQgd29ya2luZ1xuIgorIiAgICAgICAgICAgICAgZGlyZWN0b3J5LiBJZiB5b3Ugd2FudCB0aGUgZmlsZSBzYXZlZCBpbiBhIGRpZmZlcmVudCAgZGlyZWN0b3J5LFxuIgorIiAgICAgICAgICAgICAgbWFrZSBzdXJlIHlvdSBjaGFuZ2UgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBiZWZvcmUgeW91IGludm9rZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgY3VybCB3aXRoIHRoZSAtTywgLS1yZW1vdGUtbmFtZSBmbGFnIVxuIgorIlxuIgorIiAgICAgICAgICAgICAgWW91IG1heSB1c2UgdGhpcyBvcHRpb24gYXMgbWFueSB0aW1lcyBhcyB0aGUgbnVtYmVyIG9mIFVSTHMgIHlvdVxuIgorIiAgICAgICAgICAgICAgaGF2ZS5cbiIKKyJcbiIKKyIgICAgICAgLXAsIC0tcHJveHl0dW5uZWxcbiIKKyIgICAgICAgICAgICAgIFdoZW4gYW4gSFRUUCBwcm94eSBpcyB1c2VkICgteCwgLS1wcm94eSksIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2VcbiIKKyIgICAgICAgICAgICAgIG5vbi1IVFRQIHByb3RvY29scyAgdG8gIGF0dGVtcHQgIHRvICB0dW5uZWwgIHRocm91Z2ggIHRoZSAgcHJveHlcbiIKKyIgICAgICAgICAgICAgIGluc3RlYWQgIG9mIG1lcmVseSB1c2luZyBpdCB0byBkbyBIVFRQLWxpa2Ugb3BlcmF0aW9ucy4gVGhlIHR1bi1cbiIKKyIgICAgICAgICAgICAgIG5lbCBhcHByb2FjaCBpcyBtYWRlIHdpdGggdGhlIEhUVFAgIHByb3h5ICBDT05ORUNUICByZXF1ZXN0ICBhbmRcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHJlcXVpcmVzIHRoYXQgdGhlIHByb3h5IGFsbG93cyBkaXJlY3QgY29ubmVjdCB0byB0aGUgcmVtb3RlIHBvcnRcbiIKKyIgICAgICAgICAgICAgIG51bWJlciBjdXJsIHdhbnRzIHRvIHR1bm5lbCB0aHJvdWdoIHRvLlxuIgorIlxuIgorIiAgICAgICAtUCwgLS1mdHAtcG9ydCA8YWRkcmVzcz5cbiIKKyIgICAgICAgICAgICAgIChGVFApIFJldmVyc2VzIHRoZSBkZWZhdWx0IGluaXRpYXRvci9saXN0ZW5lciAgcm9sZXMgIHdoZW4gIGNvbi1cbiIKKyIgICAgICAgICAgICAgIG5lY3RpbmcgIHdpdGggIEZUUC4gIFRoaXMgIHN3aXRjaCBtYWtlcyBjdXJsIHVzZSBhY3RpdmUgbW9kZS4gSW5cbiIKKyIgICAgICAgICAgICAgIHByYWN0aWNlLCBjdXJsIHRoZW4gdGVsbHMgdGhlIHNlcnZlciAgdG8gIGNvbm5lY3QgIGJhY2sgIHRvICB0aGVcbiIKKyIgICAgICAgICAgICAgIGNsaWVudCdzIHNwZWNpZmllZCBhZGRyZXNzIGFuZCBwb3J0LCB3aGlsZSBwYXNzaXZlIG1vZGUgYXNrcyB0aGVcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHNlcnZlciB0byBzZXR1cCBhbiBJUCBhZGRyZXNzIGFuZCBwb3J0IGZvciAgaXQgIHRvICBjb25uZWN0ICB0by5cbiIKKyIgICAgICAgICAgICAgIDxhZGRyZXNzPiBzaG91bGQgYmUgb25lIG9mOlxuIgorIlxuIgorIiAgICAgICAgICAgICAgaW50ZXJmYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgaS5lICBcImV0aDBcIiAgdG8gIHNwZWNpZnkgd2hpY2ggaW50ZXJmYWNlJ3MgSVAgYWRkcmVzcyB5b3VcbiIKKyIgICAgICAgICAgICAgICAgICAgICB3YW50IHRvIHVzZSAoVW5peCBvbmx5KVxuIgorIlxuIgorIiAgICAgICAgICAgICAgSVAgYWRkcmVzc1xuIgorIiAgICAgICAgICAgICAgICAgICAgIGkuZSBcIjE5Mi4xNjguMTAuMVwiIHRvIHNwZWNpZnkgdGhlIGV4YWN0IElQIGFkZHJlc3NcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIGhvc3QgbmFtZVxuIgorIiAgICAgICAgICAgICAgICAgICAgIGkuZSBcIm15Lmhvc3QuZG9tYWluXCIgdG8gc3BlY2lmeSB0aGUgbWFjaGluZVxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgLSAgICAgIG1ha2UgY3VybCBwaWNrIHRoZSBzYW1lIElQIGFkZHJlc3MgdGhhdCBpcyAgYWxyZWFkeSAgdXNlZFxuIgorIiAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uXG4iCisiXG4iCisiICAgICAgIElmICB0aGlzICBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLiBEaXMtXG4iCisiICAgICAgIGFibGUgdGhlIHVzZSBvZiBQT1JUIHdpdGggLS1mdHAtcGFzdi4gRGlzYWJsZSB0aGUgYXR0ZW1wdCAgdG8gIHVzZSAgdGhlXG4iCisiICAgICAgIEVQUlQgIGNvbW1hbmQgIGluc3RlYWQgIG9mIFBPUlQgYnkgdXNpbmcgLS1kaXNhYmxlLWVwcnQuIEVQUlQgaXMgcmVhbGx5XG4iCisiICAgICAgIFBPUlQrKy5cbiIKKyJcbiIKKyIgICAgICAgU3RhcnRpbmcgaW4gNy4xOS41LCB5b3UgY2FuIGFwcGVuZCBcIjpbc3RhcnRdLVtlbmRdXCIgdG8gdGhlIHJpZ2h0IG9mIHRoZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICBhZGRyZXNzLCAgdG8gdGVsbCBjdXJsIHdoYXQgVENQIHBvcnQgcmFuZ2UgdG8gdXNlLiBUaGF0IG1lYW5zIHlvdSBzcGVjLVxuIgorIiAgICAgICBpZnkgYSBwb3J0IHJhbmdlLCBmcm9tIGEgbG93ZXIgdG8gYSAgaGlnaGVyICBudW1iZXIuICBBICBzaW5nbGUgIG51bWJlclxuIgorIiAgICAgICB3b3JrcyAgYXMgd2VsbCwgYnV0IGRvIG5vdGUgdGhhdCBpdCBpbmNyZWFzZXMgdGhlIHJpc2sgb2YgZmFpbHVyZSBzaW5jZVxuIgorIiAgICAgICB0aGUgcG9ydCBtYXkgbm90IGJlIGF2YWlsYWJsZS5cbiIKKyJcbiIKKyIgICAgICAgLS1wYXNzIDxwaHJhc2U+XG4iCisiICAgICAgICAgICAgICAoU1NML1NTSCkgUGFzc3BocmFzZSBmb3IgdGhlIHByaXZhdGUga2V5XG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC0tcG9zdDMwMVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgVGVsbHMgY3VybCB0byByZXNwZWN0ICBSRkMgIDI2MTYvMTAuMy4yICBhbmQgIG5vdCAgY29udmVydCAgUE9TVFxuIgorIiAgICAgICAgICAgICAgcmVxdWVzdHMgaW50byBHRVQgcmVxdWVzdHMgd2hlbiBmb2xsb3dpbmcgYSAzMDEgcmVkaXJlY3Rpb24uIFRoZVxuIgorIiAgICAgICAgICAgICAgbm9uLVJGQyBiZWhhdmlvdXIgaXMgdWJpcXVpdG91cyBpbiB3ZWIgYnJvd3NlcnMsICBzbyAgY3VybCAgZG9lc1xuIgorIiAgICAgICAgICAgICAgdGhlICBjb252ZXJzaW9uICBieSAgZGVmYXVsdCB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4gSG93ZXZlciwgYVxuIgorIiAgICAgICAgICAgICAgc2VydmVyIG1heSByZXF1aXJlIGEgUE9TVCB0byByZW1haW4gYSBQT1NUIGFmdGVyICBzdWNoICBhICByZWRpLVxuIgorIiAgICAgICAgICAgICAgcmVjdGlvbi4gIFRoaXMgIG9wdGlvbiBpcyBtZWFuaW5nZnVsIG9ubHkgd2hlbiB1c2luZyAtTCwgLS1sb2NhLVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgdGlvbiAoQWRkZWQgaW4gNy4xNy4xKVxuIgorIlxuIgorIiAgICAgICAtLXBvc3QzMDJcbiIKKyIgICAgICAgICAgICAgIFRlbGxzIGN1cmwgdG8gcmVzcGVjdCAgUkZDICAyNjE2LzEwLjMuMiAgYW5kICBub3QgIGNvbnZlcnQgIFBPU1RcbiIKKyIgICAgICAgICAgICAgIHJlcXVlc3RzIGludG8gR0VUIHJlcXVlc3RzIHdoZW4gZm9sbG93aW5nIGEgMzAyIHJlZGlyZWN0aW9uLiBUaGVcbiIKKyIgICAgICAgICAgICAgIG5vbi1SRkMgYmVoYXZpb3VyIGlzIHViaXF1aXRvdXMgaW4gd2ViIGJyb3dzZXJzLCAgc28gIGN1cmwgIGRvZXNcbiIKKyIgICAgICAgICAgICAgIHRoZSAgY29udmVyc2lvbiAgYnkgIGRlZmF1bHQgdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kuIEhvd2V2ZXIsIGFcbiIKKyIgICAgICAgICAgICAgIHNlcnZlciBtYXkgcmVxdWlyZSBhIFBPU1QgdG8gcmVtYWluIGEgUE9TVCBhZnRlciAgc3VjaCAgYSAgcmVkaS1cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHJlY3Rpb24uICBUaGlzICBvcHRpb24gaXMgbWVhbmluZ2Z1bCBvbmx5IHdoZW4gdXNpbmcgLUwsIC0tbG9jYS1cbiIKKyIgICAgICAgICAgICAgIHRpb24gKEFkZGVkIGluIDcuMTkuMSlcbiIKKyJcbiIKKyIgICAgICAgLS1wcm90byA8cHJvdG9jb2xzPlxuIgorIiAgICAgICAgICAgICAgVGVsbHMgIGN1cmwgIHRvICB1c2UgIHRoZSAgbGlzdGVkICBwcm90b2NvbHMgIGZvciAgaXRzICAgaW5pdGlhbFxuIgorIiAgICAgICAgICAgICAgcmV0cmlldmFsLiBQcm90b2NvbHMgYXJlIGV2YWx1YXRlZCBsZWZ0IHRvIHJpZ2h0LCBhcmUgY29tbWEgc2VwLVxuIgorIiAgICAgICAgICAgICAgYXJhdGVkLCBhbmQgYXJlIGVhY2ggYSBwcm90b2NvbCBuYW1lIG9yICdhbGwnLCAgb3B0aW9uYWxseSAgcHJlLVxuIgorIiAgICAgICAgICAgICAgZml4ZWQgYnkgemVybyBvciBtb3JlIG1vZGlmaWVycy4gQXZhaWxhYmxlIG1vZGlmaWVycyBhcmU6XG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICArICBQZXJtaXQgdGhpcyBwcm90b2NvbCBpbiBhZGRpdGlvbiB0byBwcm90b2NvbHMgYWxyZWFkeSBwZXJtaXQtXG4iCisiICAgICAgICAgICAgICAgICB0ZWQgKHRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgbm8gbW9kaWZpZXIgaXMgdXNlZCkuXG4iCisiXG4iCisiICAgICAgICAgICAgICAtICBEZW55IHRoaXMgcHJvdG9jb2wsIHJlbW92aW5nIGl0IGZyb20gdGhlICBsaXN0ICBvZiAgcHJvdG9jb2xzXG4iCisiICAgICAgICAgICAgICAgICBhbHJlYWR5IHBlcm1pdHRlZC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgID0gIFBlcm1pdCAgb25seSB0aGlzIHByb3RvY29sIChpZ25vcmluZyB0aGUgbGlzdCBhbHJlYWR5IHBlcm1pdC1cbiIKKyIgICAgICAgICAgICAgICAgIHRlZCksIHRob3VnaCBzdWJqZWN0ICB0byAgbGF0ZXIgIG1vZGlmaWNhdGlvbiAgYnkgIHN1YnNlcXVlbnRcbiIKKyIgICAgICAgICAgICAgICAgIGVudHJpZXMgaW4gdGhlIGNvbW1hIHNlcGFyYXRlZCBsaXN0LlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6XG4iCisiXG4iCisiICAgICAgICAgICAgICAtLXByb3RvIC1mdHBzICB1c2VzIHRoZSBkZWZhdWx0IHByb3RvY29scywgYnV0IGRpc2FibGVzIGZ0cHNcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIC0tcHJvdG8gLWFsbCxodHRwcywraHR0cFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seSBlbmFibGVzIGh0dHAgYW5kIGh0dHBzXG4iCisiXG4iCisiICAgICAgICAgICAgICAtLXByb3RvID1odHRwLGh0dHBzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHNvIG9ubHkgZW5hYmxlcyBodHRwIGFuZCBodHRwc1xuIgorIlxuIgorIiAgICAgICAgICAgICAgVW5rbm93biAgcHJvdG9jb2xzICBwcm9kdWNlICBhICB3YXJuaW5nLiAgVGhpcyBhbGxvd3Mgc2NyaXB0cyB0b1xuIgorIiAgICAgICAgICAgICAgc2FmZWx5IHJlbHkgb24gYmVpbmcgYWJsZSB0byBkaXNhYmxlIHBvdGVudGlhbGx5IGRhbmdlcm91cyAgcHJvLVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgdG9jb2xzLCAgd2l0aG91dCAgcmVseWluZyAgdXBvbiAgc3VwcG9ydCBmb3IgdGhhdCBwcm90b2NvbCBiZWluZ1xuIgorIiAgICAgICAgICAgICAgYnVpbHQgaW50byBjdXJsIHRvIGF2b2lkIGFuIGVycm9yLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMsIGluIHdoaWNoIGNhc2UgdGhlIGVmZmVjdFxuIgorIiAgICAgICAgICAgICAgaXMgIHRoZSBzYW1lIGFzIGNvbmNhdGVuYXRpbmcgdGhlIHByb3RvY29scyBpbnRvIG9uZSBpbnN0YW5jZSBvZlxuIgorIiAgICAgICAgICAgICAgdGhlIG9wdGlvbi5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIChBZGRlZCBpbiA3LjIwLjIpXG4iCisiXG4iCisiICAgICAgIC0tcHJvdG8tcmVkaXIgPHByb3RvY29scz5cbiIKKyIgICAgICAgICAgICAgIFRlbGxzIGN1cmwgdG8gdXNlIHRoZSBsaXN0ZWQgcHJvdG9jb2xzICBhZnRlciAgYSAgcmVkaXJlY3QuICBTZWVcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIC0tcHJvdG8gZm9yIGhvdyBwcm90b2NvbHMgYXJlIHJlcHJlc2VudGVkLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgKEFkZGVkIGluIDcuMjAuMilcbiIKKyJcbiIKKyIgICAgICAgLS1wcm94eS1hbnlhdXRoXG4iCisiICAgICAgICAgICAgICBUZWxscyAgY3VybCB0byBwaWNrIGEgc3VpdGFibGUgYXV0aGVudGljYXRpb24gbWV0aG9kIHdoZW4gY29tbXUtXG4iCisiICAgICAgICAgICAgICBuaWNhdGluZyB3aXRoICB0aGUgIGdpdmVuICBwcm94eS4gIFRoaXMgIG1pZ2h0ICBjYXVzZSAgYW4gIGV4dHJhXG4iCisiICAgICAgICAgICAgICByZXF1ZXN0L3Jlc3BvbnNlIHJvdW5kLXRyaXAuIChBZGRlZCBpbiA3LjEzLjIpXG4iCisiXG4iCisiICAgICAgIC0tcHJveHktYmFzaWNcbiIKKyIgICAgICAgICAgICAgIFRlbGxzICBjdXJsICB0byB1c2UgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiB3aGVuIGNvbW11bmljYXRpbmdcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIHByb3h5LiBVc2UgLS1iYXNpYyBmb3IgZW5hYmxpbmcgSFRUUCBCYXNpYyB3aXRoIGFcbiIKKyIgICAgICAgICAgICAgIHJlbW90ZSAgaG9zdC4gIEJhc2ljICBpcyAgdGhlIGRlZmF1bHQgYXV0aGVudGljYXRpb24gbWV0aG9kIGN1cmxcbiIKKyIgICAgICAgICAgICAgIHVzZXMgd2l0aCBwcm94aWVzLlxuIgorIlxuIgorIiAgICAgICAtLXByb3h5LWRpZ2VzdFxuIgorIiAgICAgICAgICAgICAgVGVsbHMgY3VybCB0byB1c2UgSFRUUCBEaWdlc3QgYXV0aGVudGljYXRpb24gd2hlbiAgY29tbXVuaWNhdGluZ1xuIgorIiAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gcHJveHkuIFVzZSAtLWRpZ2VzdCBmb3IgZW5hYmxpbmcgSFRUUCBEaWdlc3Qgd2l0aFxuIgorIiAgICAgICAgICAgICAgYSByZW1vdGUgaG9zdC5cbiIKKyJcbiIKKyIgICAgICAgLS1wcm94eS1uZWdvdGlhdGVcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIFRlbGxzIGN1cmwgdG8gdXNlIEhUVFAgTmVnb3RpYXRlIGF1dGhlbnRpY2F0aW9uIHdoZW4gY29tbXVuaWNhdC1cbiIKKyIgICAgICAgICAgICAgIGluZyAgd2l0aCAgdGhlICBnaXZlbiAgcHJveHkuICBVc2UgLS1uZWdvdGlhdGUgZm9yIGVuYWJsaW5nIEhUVFBcbiIKKyIgICAgICAgICAgICAgIE5lZ290aWF0ZSB3aXRoIGEgcmVtb3RlIGhvc3QuIChBZGRlZCBpbiA3LjE3LjEpXG4iCisiXG4iCisiICAgICAgIC0tcHJveHktbnRsbVxuIgorIiAgICAgICAgICAgICAgVGVsbHMgY3VybCB0byB1c2UgSFRUUCBOVExNICBhdXRoZW50aWNhdGlvbiAgd2hlbiAgY29tbXVuaWNhdGluZ1xuIgorIiAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gcHJveHkuIFVzZSAtLW50bG0gZm9yIGVuYWJsaW5nIE5UTE0gd2l0aCBhIHJlbW90ZVxuIgorIiAgICAgICAgICAgICAgaG9zdC5cbiIKKyJcbiIKKyIgICAgICAgLS1wcm94eTEuMCA8cHJveHlob3N0Wzpwb3J0XT5cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIFVzZSB0aGUgc3BlY2lmaWVkIEhUVFAgMS4wIHByb3h5LiBJZiAgdGhlICBwb3J0ICBudW1iZXIgIGlzICBub3RcbiIKKyIgICAgICAgICAgICAgIHNwZWNpZmllZCwgaXQgaXMgYXNzdW1lZCBhdCBwb3J0IDEwODAuXG4iCisiXG4iCisiICAgICAgICAgICAgICBUaGUgIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBIVFRQIHByb3h5IG9wdGlvbiAoLXgsXG4iCisiICAgICAgICAgICAgICAtLXByb3h5KSwgaXMgdGhhdCBhdHRlbXB0cyB0byB1c2UgQ09OTkVDVCB0aHJvdWdoIHRoZSBwcm94eSB3aWxsXG4iCisiICAgICAgICAgICAgICBzcGVjaWZ5IGFuIEhUVFAgMS4wIHByb3RvY29sIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgSFRUUCAxLjEuXG4iCisiXG4iCisiICAgICAgIC0tcHVia2V5IDxrZXk+XG4iCisiICAgICAgICAgICAgICAoU1NIKSAgUHVibGljICBrZXkgIGZpbGUgbmFtZS4gQWxsb3dzIHlvdSB0byBwcm92aWRlIHlvdXIgcHVibGljXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBrZXkgaW4gdGhpcyBzZXBhcmF0ZSBmaWxlLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLlxuIgorIlxuIgorIiAgICAgICAtcSAgICAgSWYgdXNlZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIG9uIHRoZSBjb21tYW5kIGxpbmUsICB0aGUgIGN1cmxyY1xuIgorIiAgICAgICAgICAgICAgY29uZmlnICBmaWxlIHdpbGwgbm90IGJlIHJlYWQgYW5kIHVzZWQuIFNlZSB0aGUgLUssIC0tY29uZmlnIGZvclxuIgorIiAgICAgICAgICAgICAgZGV0YWlscyBvbiB0aGUgZGVmYXVsdCBjb25maWcgZmlsZSBzZWFyY2ggcGF0aC5cbiIKKyJcbiIKKyIgICAgICAgLVEsIC0tcXVvdGUgPGNvbW1hbmQ+XG4iCisiICAgICAgICAgICAgICAoRlRQL1NGVFApIFNlbmQgYW4gYXJiaXRyYXJ5IGNvbW1hbmQgdG8gdGhlIHJlbW90ZSBGVFAgIG9yICBTRlRQXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBzZXJ2ZXIuICBRdW90ZSBjb21tYW5kcyBhcmUgc2VudCBCRUZPUkUgdGhlIHRyYW5zZmVyIHRha2VzIHBsYWNlXG4iCisiICAgICAgICAgICAgICAoanVzdCBhZnRlciB0aGUgaW5pdGlhbCBQV0QgY29tbWFuZCBpbiBhbiBGVFAgIHRyYW5zZmVyLCAgdG8gIGJlXG4iCisiICAgICAgICAgICAgICBleGFjdCkuIFRvIG1ha2UgY29tbWFuZHMgdGFrZSBwbGFjZSBhZnRlciBhIHN1Y2Nlc3NmdWwgdHJhbnNmZXIsXG4iCisiICAgICAgICAgICAgICBwcmVmaXggdGhlbSB3aXRoIGEgZGFzaCAnLScuICBUbyBtYWtlICBjb21tYW5kcyAgYmUgIHNlbnQgIGFmdGVyXG4iCisiICAgICAgICAgICAgICBsaWJjdXJsICBoYXMgIGNoYW5nZWQgIHRoZSAgd29ya2luZyAgZGlyZWN0b3J5LCAganVzdCBiZWZvcmUgdGhlXG4iCisiICAgICAgICAgICAgICB0cmFuc2ZlciBjb21tYW5kKHMpLCBwcmVmaXggdGhlIGNvbW1hbmQgd2l0aCBhICcrJyAodGhpcyBpcyBvbmx5XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBzdXBwb3J0ZWQgIGZvciAgRlRQKS4gWW91IG1heSBzcGVjaWZ5IGFueSBudW1iZXIgb2YgY29tbWFuZHMuIElmXG4iCisiICAgICAgICAgICAgICB0aGUgc2VydmVyIHJldHVybnMgZmFpbHVyZSBmb3Igb25lIG9mIHRoZSBjb21tYW5kcywgIHRoZSAgZW50aXJlXG4iCisiICAgICAgICAgICAgICBvcGVyYXRpb24gIHdpbGwgIGJlIGFib3J0ZWQuIFlvdSBtdXN0IHNlbmQgc3ludGFjdGljYWxseSBjb3JyZWN0XG4iCisiICAgICAgICAgICAgICBGVFAgY29tbWFuZHMgYXMgUkZDIDk1OSBkZWZpbmVzIHRvIEZUUCBzZXJ2ZXJzLCBvciAgb25lICBvZiAgdGhlXG4iCisiICAgICAgICAgICAgICBjb21tYW5kcyAgbGlzdGVkIGJlbG93IHRvIFNGVFAgc2VydmVycy4gIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkXG4iCisiICAgICAgICAgICAgICBtdWx0aXBsZSB0aW1lcy4gV2hlbiBzcGVha2luZyB0byBhIEZUUCBzZXJ2ZXIsIHByZWZpeCAgdGhlICBjb20tXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBtYW5kICB3aXRoICBhbiBhc3RlcmlzayAoKikgdG8gbWFrZSBsaWJjdXJsIGNvbnRpbnVlIGV2ZW4gaWYgdGhlXG4iCisiICAgICAgICAgICAgICBjb21tYW5kIGZhaWxzIGFzIGJ5IGRlZmF1bHQgY3VybCB3aWxsIHN0b3AgYXQgZmlyc3QgZmFpbHVyZS5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFNGVFAgaXMgYSBiaW5hcnkgcHJvdG9jb2wuIFVubGlrZSBmb3IgIEZUUCwgIGxpYmN1cmwgIGludGVycHJldHNcbiIKKyIgICAgICAgICAgICAgIFNGVFAgIHF1b3RlICBjb21tYW5kcyAgaXRzZWxmIGJlZm9yZSBzZW5kaW5nIHRoZW0gdG8gdGhlIHNlcnZlci5cbiIKKyIgICAgICAgICAgICAgIEZpbGUgbmFtZXMgbWF5IGJlIHF1b3RlZCBzaGVsbC1zdHlsZSB0byBlbWJlZCBzcGFjZXMgb3IgIHNwZWNpYWxcbiIKKyIgICAgICAgICAgICAgIGNoYXJhY3RlcnMuICAgRm9sbG93aW5nICBpcyB0aGUgbGlzdCBvZiBhbGwgc3VwcG9ydGVkIFNGVFAgcXVvdGVcbiIKKyIgICAgICAgICAgICAgIGNvbW1hbmRzOlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgY2hncnAgZ3JvdXAgZmlsZVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFRoZSBjaGdycCBjb21tYW5kIHNldHMgdGhlIGdyb3VwIElEIG9mIHRoZSBmaWxlIG5hbWVkICBieVxuIgorIiAgICAgICAgICAgICAgICAgICAgIHRoZSAgZmlsZSAgb3BlcmFuZCB0byB0aGUgZ3JvdXAgSUQgc3BlY2lmaWVkIGJ5IHRoZSBncm91cFxuIgorIiAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmQuIFRoZSBncm91cCBvcGVyYW5kIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGdyb3VwIElELlxuIgorIlxuIgorIiAgICAgICAgICAgICAgY2htb2QgbW9kZSBmaWxlXG4iCisiICAgICAgICAgICAgICAgICAgICAgVGhlIGNobW9kIGNvbW1hbmQgbW9kaWZpZXMgdGhlICBmaWxlICBtb2RlICBiaXRzICBvZiAgdGhlXG4iCisiICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGZpbGUuIFRoZSBtb2RlIG9wZXJhbmQgaXMgYW4gb2N0YWwgaW50ZWdlciBtb2RlXG4iCisiICAgICAgICAgICAgICAgICAgICAgbnVtYmVyLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgY2hvd24gdXNlciBmaWxlXG4iCisiICAgICAgICAgICAgICAgICAgICAgVGhlIGNob3duIGNvbW1hbmQgc2V0cyB0aGUgb3duZXIgb2YgdGhlIGZpbGUgbmFtZWQgYnkgdGhlXG4iCisiICAgICAgICAgICAgICAgICAgICAgZmlsZSAgb3BlcmFuZCAgdG8gdGhlIHVzZXIgSUQgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIG9wZXItXG4iCisiICAgICAgICAgICAgICAgICAgICAgYW5kLiBUaGUgdXNlciBvcGVyYW5kIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIHVzZXIgSUQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBsbiBzb3VyY2VfZmlsZSB0YXJnZXRfZmlsZVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFRoZSBsbiBhbmQgc3ltbGluayBjb21tYW5kcyBjcmVhdGUgYSBzeW1ib2xpYyBsaW5rIGF0IHRoZVxuIgorIiAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9maWxlICBsb2NhdGlvbiAgcG9pbnRpbmcgIHRvIHRoZSBzb3VyY2VfZmlsZSBsb2NhLVxuIgorIiAgICAgICAgICAgICAgICAgICAgIHRpb24uXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBta2RpciBkaXJlY3RvcnlfbmFtZVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFRoZSBta2RpciBjb21tYW5kIGNyZWF0ZXMgIHRoZSAgZGlyZWN0b3J5ICBuYW1lZCAgYnkgIHRoZVxuIgorIiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9uYW1lIG9wZXJhbmQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBwd2QgICAgVGhlIHB3ZCBjb21tYW5kIHJldHVybnMgdGhlIGFic29sdXRlIHBhdGhuYW1lIG9mIHRoZSBjdXItXG4iCisiICAgICAgICAgICAgICAgICAgICAgcmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIHJlbmFtZSBzb3VyY2UgdGFyZ2V0XG4iCisiICAgICAgICAgICAgICAgICAgICAgVGhlIHJlbmFtZSBjb21tYW5kIHJlbmFtZXMgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVkIGJ5XG4iCisiICAgICAgICAgICAgICAgICAgICAgdGhlICBzb3VyY2UgIG9wZXJhbmQgdG8gdGhlIGRlc3RpbmF0aW9uIHBhdGggbmFtZWQgYnkgdGhlXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IG9wZXJhbmQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBybSBmaWxlXG4iCisiICAgICAgICAgICAgICAgICAgICAgVGhlIHJtIGNvbW1hbmQgcmVtb3ZlcyB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgdGhlIGZpbGUgb3AtXG4iCisiICAgICAgICAgICAgICAgICAgICAgZXJhbmQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBybWRpciBkaXJlY3RvcnlcbiIKKyIgICAgICAgICAgICAgICAgICAgICBUaGUgIHJtZGlyICBjb21tYW5kIHJlbW92ZXMgdGhlIGRpcmVjdG9yeSBlbnRyeSBzcGVjaWZpZWRcbiIKKyIgICAgICAgICAgICAgICAgICAgICBieSB0aGUgZGlyZWN0b3J5IG9wZXJhbmQsIHByb3ZpZGVkIGl0IGlzIGVtcHR5LlxuIgorIlxuIgorIiAgICAgICAgICAgICAgc3ltbGluayBzb3VyY2VfZmlsZSB0YXJnZXRfZmlsZVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFNlZSBsbi5cbiIKKyJcbiIKKyIgICAgICAgLXIsIC0tcmFuZ2UgPHJhbmdlPlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgKEhUVFAvRlRQL1NGVFAvRklMRSkgUmV0cmlldmUgYSBieXRlIHJhbmdlIChpLmUgYSBwYXJ0aWFsICBkb2N1LVxuIgorIiAgICAgICAgICAgICAgbWVudCkgIGZyb20gIGEgIEhUVFAvMS4xLCAgRlRQICBvciAgU0ZUUCBzZXJ2ZXIgb3IgYSBsb2NhbCBGSUxFLlxuIgorIiAgICAgICAgICAgICAgUmFuZ2VzIGNhbiBiZSBzcGVjaWZpZWQgaW4gYSBudW1iZXIgb2Ygd2F5cy5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIDAtNDk5ICAgICBzcGVjaWZpZXMgdGhlIGZpcnN0IDUwMCBieXRlc1xuIgorIlxuIgorIiAgICAgICAgICAgICAgNTAwLTk5OSAgIHNwZWNpZmllcyB0aGUgc2Vjb25kIDUwMCBieXRlc1xuIgorIlxuIgorIiAgICAgICAgICAgICAgLTUwMCAgICAgIHNwZWNpZmllcyB0aGUgbGFzdCA1MDAgYnl0ZXNcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIDk1MDAtICAgICBzcGVjaWZpZXMgdGhlIGJ5dGVzIGZyb20gb2Zmc2V0IDk1MDAgYW5kIGZvcndhcmRcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIDAtMCwtMSAgICBzcGVjaWZpZXMgdGhlIGZpcnN0IGFuZCBsYXN0IGJ5dGUgb25seSgqKShIKVxuIgorIlxuIgorIiAgICAgICAgICAgICAgNTAwLTcwMCw2MDAtNzk5XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIDMwMCBieXRlcyBmcm9tIG9mZnNldCA1MDAoSClcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIDEwMC0xOTksNTAwLTU5OVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0d28gc2VwYXJhdGUgMTAwLWJ5dGUgcmFuZ2VzKCopKEgpXG4iCisiXG4iCisiICAgICAgICgqKSA9IE5PVEUgdGhhdCB0aGlzIHdpbGwgY2F1c2UgdGhlIHNlcnZlciB0byByZXBseSAgd2l0aCAgYSAgbXVsdGlwYXJ0XG4iCisiICAgICAgIHJlc3BvbnNlIVxuIgorIlxuIgorIiAgICAgICBPbmx5ICBkaWdpdCBjaGFyYWN0ZXJzICgwLTkpIGFyZSB2YWxpZCBpbiB0aGUgJ3N0YXJ0JyBhbmQgJ3N0b3AnIGZpZWxkc1xuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICBvZiB0aGUgJ3N0YXJ0LXN0b3AnIHJhbmdlIHN5bnRheC4gSWYgYSBub24tZGlnaXQgY2hhcmFjdGVyIGlzIGdpdmVuICBpblxuIgorIiAgICAgICB0aGUgIHJhbmdlLCB0aGUgc2VydmVyJ3MgcmVzcG9uc2Ugd2lsbCBiZSB1bnNwZWNpZmllZCwgZGVwZW5kaW5nIG9uIHRoZVxuIgorIiAgICAgICBzZXJ2ZXIncyBjb25maWd1cmF0aW9uLlxuIgorIlxuIgorIiAgICAgICBZb3Ugc2hvdWxkIGFsc28gYmUgYXdhcmUgdGhhdCBtYW55IEhUVFAvMS4xIHNlcnZlcnMgZG8gIG5vdCAgaGF2ZSAgdGhpc1xuIgorIiAgICAgICBmZWF0dXJlICBlbmFibGVkLCAgc28gIHRoYXQgIHdoZW4gIHlvdSAgYXR0ZW1wdCAgdG8gZ2V0IGEgcmFuZ2UsIHlvdSdsbFxuIgorIiAgICAgICBpbnN0ZWFkIGdldCB0aGUgd2hvbGUgZG9jdW1lbnQuXG4iCisiXG4iCisiICAgICAgIEZUUCBhbmQgU0ZUUCByYW5nZSBkb3dubG9hZHMgb25seSBzdXBwb3J0IHRoZSBzaW1wbGUgJ3N0YXJ0LXN0b3AnICBzeW4tXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgIHRheCAgKG9wdGlvbmFsbHkgIHdpdGggIG9uZSBvZiB0aGUgbnVtYmVycyBvbWl0dGVkKS4gRlRQIHVzZSBkZXBlbmRzIG9uXG4iCisiICAgICAgIHRoZSBleHRlbmRlZCBGVFAgY29tbWFuZCBTSVpFLlxuIgorIlxuIgorIiAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC1SLCAtLXJlbW90ZS10aW1lXG4iCisiICAgICAgICAgICAgICBXaGVuIHVzZWQsIHRoaXMgd2lsbCBtYWtlIGxpYmN1cmwgIGF0dGVtcHQgIHRvICBmaWd1cmUgIG91dCAgdGhlXG4iCisiICAgICAgICAgICAgICB0aW1lc3RhbXAgIG9mIHRoZSByZW1vdGUgZmlsZSwgYW5kIGlmIHRoYXQgaXMgYXZhaWxhYmxlIG1ha2UgdGhlXG4iCisiICAgICAgICAgICAgICBsb2NhbCBmaWxlIGdldCB0aGF0IHNhbWUgdGltZXN0YW1wLlxuIgorIlxuIgorIiAgICAgICAtLXJhbmRvbS1maWxlIDxmaWxlPlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgKFNTTCkgU3BlY2lmeSB0aGUgcGF0aCBuYW1lIHRvIGZpbGUgY29udGFpbmluZyB3aGF0IHdpbGwgYmUgY29uLVxuIgorIiAgICAgICAgICAgICAgc2lkZXJlZCAgYXMgIHJhbmRvbSAgZGF0YS4gIFRoZSAgZGF0YSBpcyB1c2VkIHRvIHNlZWQgdGhlIHJhbmRvbVxuIgorIiAgICAgICAgICAgICAgZW5naW5lIGZvciBTU0wgY29ubmVjdGlvbnMuICBTZWUgYWxzbyB0aGUgLS1lZ2QtZmlsZSBvcHRpb24uXG4iCisiXG4iCisiICAgICAgIC0tcmF3ICBXaGVuIHVzZWQsIGl0IGRpc2FibGVzIGFsbCBpbnRlcm5hbCBIVFRQIGRlY29kaW5nIG9mIGNvbnRlbnQgIG9yXG4iCisiICAgICAgICAgICAgICB0cmFuc2ZlciAgZW5jb2RpbmdzICBhbmQgaW5zdGVhZCBtYWtlcyB0aGVtIHBhc3NlZCBvbiB1bmFsdGVyZWQsXG4iCisiICAgICAgICAgICAgICByYXcuIChBZGRlZCBpbiA3LjE2LjIpXG4iCisiXG4iCisiICAgICAgIC0tcmVtb3RlLW5hbWUtYWxsXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgYWxsIGdpdmVuIFVSTHMgdG8gIGJlXG4iCisiICAgICAgICAgICAgICBkZWFsdCB3aXRoIGFzIGlmIC1PLCAtLXJlbW90ZS1uYW1lIHdlcmUgdXNlZCBmb3IgZWFjaCBvbmUuIFNvIGlmXG4iCisiICAgICAgICAgICAgICB5b3Ugd2FudCB0byBkaXNhYmxlIHRoYXQgZm9yIGEgc3BlY2lmaWMgVVJMIGFmdGVyIC0tcmVtb3RlLW5hbWUtXG4iCisiICAgICAgICAgICAgICBhbGwgIGhhcyAgYmVlbiAgdXNlZCwgIHlvdSAgbXVzdCB1c2UgXCItbyAtXCIgb3IgLS1uby1yZW1vdGUtbmFtZS5cbiIKKyIgICAgICAgICAgICAgIChBZGRlZCBpbiA3LjE5LjApXG4iCisiXG4iCisiICAgICAgIC0tcmVzb2x2ZSA8aG9zdDpwb3J0OmFkZHJlc3M+XG4iCisiICAgICAgICAgICAgICBQcm92aWRlIGEgY3VzdG9tIGFkZHJlc3MgZm9yIGEgIHNwZWNpZmljICBob3N0ICBhbmQgIHBvcnQgIHBhaXIuXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBVc2luZyAgdGhpcywgIHlvdSAgY2FuIG1ha2UgdGhlIGN1cmwgcmVxdWVzdHMocykgdXNlIGEgc3BlY2lmaWVkXG4iCisiICAgICAgICAgICAgICBhZGRyZXNzIGFuZCBwcmV2ZW50IHRoZSBvdGhlcndpc2Ugbm9ybWFsbHkgcmVzb2x2ZWQgIGFkZHJlc3MgIHRvXG4iCisiICAgICAgICAgICAgICBiZSAgdXNlZC4gIENvbnNpZGVyIGl0IGEgc29ydCBvZiAvZXRjL2hvc3RzIGFsdGVybmF0aXZlIHByb3ZpZGVkXG4iCisiICAgICAgICAgICAgICBvbiB0aGUgY29tbWFuZCBsaW5lLiBUaGUgcG9ydCBudW1iZXIgc2hvdWxkIGJlIHRoZSAgbnVtYmVyICB1c2VkXG4iCisiICAgICAgICAgICAgICBmb3IgIHRoZSAgc3BlY2lmaWMgIHByb3RvY29sIHRoZSBob3N0IHdpbGwgYmUgdXNlZCBmb3IuIEl0IG1lYW5zXG4iCisiICAgICAgICAgICAgICB5b3UgbmVlZCBzZXZlcmFsIGVudHJpZXMgaWYgeW91IHdhbnQgdG8gcHJvdmlkZSBhZGRyZXNzIGZvciAgdGhlXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBzYW1lIGhvc3QgYnV0IGRpZmZlcmVudCBwb3J0cy5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoaXMgIG9wdGlvbiAgY2FuICBiZSAgdXNlZCBtYW55IHRpbWVzIHRvIGFkZCBtYW55IGhvc3QgbmFtZXMgdG9cbiIKKyIgICAgICAgICAgICAgIHJlc29sdmUuXG4iCisiXG4iCisiICAgICAgICAgICAgICAoQWRkZWQgaW4gNy4yMS4zKVxuIgorIlxuIgorIiAgICAgICAtLXJldHJ5IDxudW0+XG4iCisiICAgICAgICAgICAgICBJZiBhIHRyYW5zaWVudCBlcnJvciBpcyByZXR1cm5lZCB3aGVuIGN1cmwgdHJpZXMgIHRvICBwZXJmb3JtICBhXG4iCisiICAgICAgICAgICAgICB0cmFuc2ZlciwgIGl0ICB3aWxsIHJldHJ5IHRoaXMgbnVtYmVyIG9mIHRpbWVzIGJlZm9yZSBnaXZpbmcgdXAuXG4iCisiICAgICAgICAgICAgICBTZXR0aW5nIHRoZSBudW1iZXIgdG8gMCBtYWtlcyBjdXJsIGRvIG5vIHJldHJpZXMgKHdoaWNoICBpcyAgdGhlXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBkZWZhdWx0KS4gIFRyYW5zaWVudCAgZXJyb3IgIG1lYW5zIGVpdGhlcjogYSB0aW1lb3V0LCBhbiBGVFAgNHh4XG4iCisiICAgICAgICAgICAgICByZXNwb25zZSBjb2RlIG9yIGFuIEhUVFAgNXh4IHJlc3BvbnNlIGNvZGUuXG4iCisiXG4iCisiICAgICAgICAgICAgICBXaGVuIGN1cmwgaXMgYWJvdXQgdG8gcmV0cnkgYSB0cmFuc2ZlciwgaXQgd2lsbCBmaXJzdCAgd2FpdCAgb25lXG4iCisiICAgICAgICAgICAgICBzZWNvbmQgIGFuZCAgdGhlbiBmb3IgYWxsIGZvcnRoY29taW5nIHJldHJpZXMgaXQgd2lsbCBkb3VibGUgdGhlXG4iCisiICAgICAgICAgICAgICB3YWl0aW5nIHRpbWUgdW50aWwgaXQgcmVhY2hlcyAxMCBtaW51dGVzIHdoaWNoIHRoZW4gd2lsbCBiZSAgdGhlXG4iCisiICAgICAgICAgICAgICBkZWxheSAgYmV0d2VlbiAgdGhlIHJlc3Qgb2YgdGhlIHJldHJpZXMuICBCeSB1c2luZyAtLXJldHJ5LWRlbGF5XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICB5b3UgIGRpc2FibGUgIHRoaXMgIGV4cG9uZW50aWFsICBiYWNrb2ZmICBhbGdvcml0aG0uICBTZWUgICBhbHNvXG4iCisiICAgICAgICAgICAgICAtLXJldHJ5LW1heC10aW1lICB0byAgbGltaXQgIHRoZSB0b3RhbCB0aW1lIGFsbG93ZWQgZm9yIHJldHJpZXMuXG4iCisiICAgICAgICAgICAgICAoQWRkZWQgaW4gNy4xMi4zKVxuIgorIlxuIgorIiAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgIHVzZWQgIG11bHRpcGxlICB0aW1lcywgIHRoZSAgbGFzdCAgb2NjdXJyZW5jZVxuIgorIiAgICAgICAgICAgICAgZGVjaWRlIHRoZSBhbW91bnQuXG4iCisiXG4iCisiICAgICAgIC0tcmV0cnktZGVsYXkgPHNlY29uZHM+XG4iCisiICAgICAgICAgICAgICBNYWtlICBjdXJsICBzbGVlcCAgdGhpcyAgYW1vdW50IG9mIHRpbWUgYmVmb3JlIGVhY2ggcmV0cnkgd2hlbiBhXG4iCisiICAgICAgICAgICAgICB0cmFuc2ZlciBoYXMgZmFpbGVkIHdpdGggIGEgIHRyYW5zaWVudCAgZXJyb3IgIChpdCAgY2hhbmdlcyAgdGhlXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBkZWZhdWx0ICBiYWNrb2ZmIHRpbWUgYWxnb3JpdGhtIGJldHdlZW4gcmV0cmllcykuIFRoaXMgb3B0aW9uIGlzXG4iCisiICAgICAgICAgICAgICBvbmx5IGludGVyZXN0aW5nIGlmIC0tcmV0cnkgaXMgYWxzbyB1c2VkLiBTZXR0aW5nIHRoaXMgZGVsYXkgIHRvXG4iCisiICAgICAgICAgICAgICB6ZXJvICB3aWxsICBtYWtlICBjdXJsICB1c2UgdGhlIGRlZmF1bHQgYmFja29mZiB0aW1lLiAgKEFkZGVkIGluXG4iCisiICAgICAgICAgICAgICA3LjEyLjMpXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyAgdXNlZCAgbXVsdGlwbGUgIHRpbWVzLCAgdGhlICBsYXN0ICBvY2N1cnJlbmNlXG4iCisiICAgICAgICAgICAgICBkZXRlcm1pbmVzIHRoZSBhbW91bnQuXG4iCisiXG4iCisiICAgICAgIC0tcmV0cnktbWF4LXRpbWUgPHNlY29uZHM+XG4iCisiICAgICAgICAgICAgICBUaGUgIHJldHJ5ICB0aW1lciAgaXMgIHJlc2V0ICBiZWZvcmUgdGhlIGZpcnN0IHRyYW5zZmVyIGF0dGVtcHQuXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBSZXRyaWVzIHdpbGwgYmUgZG9uZSBhcyB1c3VhbCAoc2VlIC0tcmV0cnkpIGFzIGxvbmcgYXMgdGhlIHRpbWVyXG4iCisiICAgICAgICAgICAgICBoYXNuJ3QgcmVhY2hlZCB0aGlzIGdpdmVuIGxpbWl0LiBOb3RpY2UgdGhhdCBpZiB0aGUgdGltZXIgaGFzbid0XG4iCisiICAgICAgICAgICAgICByZWFjaGVkIHRoZSBsaW1pdCwgdGhlIHJlcXVlc3Qgd2lsbCBiZSBtYWRlIGFuZCAgd2hpbGUgIHBlcmZvcm0tXG4iCisiICAgICAgICAgICAgICBpbmcsICBpdCBtYXkgdGFrZSBsb25nZXIgdGhhbiB0aGlzIGdpdmVuIHRpbWUgcGVyaW9kLiBUbyBsaW1pdCBhXG4iCisiICAgICAgICAgICAgICBzaW5nbGUgcmVxdWVzdCdzIG1heGltdW0gdGltZSwgdXNlICAtbSwgIC0tbWF4LXRpbWUuICAgU2V0ICB0aGlzXG4iCisiICAgICAgICAgICAgICBvcHRpb24gdG8gemVybyB0byBub3QgdGltZW91dCByZXRyaWVzLiAoQWRkZWQgaW4gNy4xMi4zKVxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgSWYgIHRoaXMgIG9wdGlvbiAgaXMgIHVzZWQgIG11bHRpcGxlICB0aW1lcywgdGhlIGxhc3Qgb2NjdXJyZW5jZVxuIgorIiAgICAgICAgICAgICAgZGV0ZXJtaW5lcyB0aGUgYW1vdW50LlxuIgorIlxuIgorIiAgICAgICAtcywgLS1zaWxlbnRcbiIKKyIgICAgICAgICAgICAgIFNpbGVudCBvciBxdWlldCBtb2RlLiBEb24ndCBzaG93IHByb2dyZXNzIG1ldGVyICBvciAgZXJyb3IgIG1lcy1cbiIKKyIgICAgICAgICAgICAgIHNhZ2VzLiAgTWFrZXMgQ3VybCBtdXRlLlxuIgorIlxuIgorIiAgICAgICAtUywgLS1zaG93LWVycm9yXG4iCisiICAgICAgICAgICAgICBXaGVuICB1c2VkICB3aXRoICAtcyAgaXQgIG1ha2VzIGN1cmwgc2hvdyBhbiBlcnJvciBtZXNzYWdlIGlmIGl0XG4iCisiICAgICAgICAgICAgICBmYWlscy5cbiIKKyJcbiIKKyIgICAgICAgLS1zc2wgIChGVFAsIFBPUDMsIElNQVAsIFNNVFApIFRyeSB0byB1c2UgU1NML1RMUyBmb3IgIHRoZSAgY29ubmVjdGlvbi5cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIFJldmVydHMgdG8gYSBub24tc2VjdXJlIGNvbm5lY3Rpb24gaWYgdGhlIHNlcnZlciBkb2Vzbid0IHN1cHBvcnRcbiIKKyIgICAgICAgICAgICAgIFNTTC9UTFMuICBTZWUgYWxzbyAtLWZ0cC1zc2wtY29udHJvbCBhbmQgLS1zc2wtcmVxZCBmb3IgIGRpZmZlci1cbiIKKyIgICAgICAgICAgICAgIGVudCBsZXZlbHMgb2YgZW5jcnlwdGlvbiByZXF1aXJlZC4gKEFkZGVkIGluIDcuMjAuMClcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoaXMgIG9wdGlvbiAgd2FzIGZvcm1lcmx5IGtub3duIGFzIC0tZnRwLXNzbCAoQWRkZWQgaW4gNy4xMS4wKS5cbiIKKyIgICAgICAgICAgICAgIFRoYXQgb3B0aW9uIG5hbWUgY2FuIHN0aWxsIGJlIHVzZWQgYnV0ICB3aWxsICBiZSAgcmVtb3ZlZCAgaW4gIGFcbiIKKyIgICAgICAgICAgICAgIGZ1dHVyZSB2ZXJzaW9uLlxuIgorIlxuIgorIiAgICAgICAtLXNzbC1yZXFkXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAoRlRQLCAgUE9QMywgIElNQVAsICBTTVRQKSAgUmVxdWlyZSAgU1NML1RMUyBmb3IgdGhlIGNvbm5lY3Rpb24uXG4iCisiICAgICAgICAgICAgICBUZXJtaW5hdGVzIHRoZSBjb25uZWN0aW9uIGlmIHRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IFNTTC9UTFMuXG4iCisiICAgICAgICAgICAgICAoQWRkZWQgaW4gNy4yMC4wKVxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhpcyAgb3B0aW9uICB3YXMgIGZvcm1lcmx5ICBrbm93biAgYXMgIC0tZnRwLXNzbC1yZXFkIChhZGRlZCBpblxuIgorIiAgICAgICAgICAgICAgNy4xNS41KS4gVGhhdCBvcHRpb24gbmFtZSBjYW4gc3RpbGwgYmUgdXNlZCBidXQgd2lsbCBiZSAgcmVtb3ZlZFxuIgorIiAgICAgICAgICAgICAgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiIKKyJcbiIKKyIgICAgICAgLS1zc2wtYWxsb3ctYmVhc3RcbiIKKyIgICAgICAgICAgICAgIChTU0wpICBUaGlzIG9wdGlvbiB0ZWxscyBjdXJsIHRvIG5vdCB3b3JrIGFyb3VuZCBhIHNlY3VyaXR5IGZsYXdcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGluIHRoZSBTU0wzIGFuZCBUTFMxLjAgcHJvdG9jb2xzIGtub3duIGFzIEJFQVNULiAgSWYgdGhpcyBvcHRpb25cbiIKKyIgICAgICAgICAgICAgIGlzbid0ICB1c2VkLCAgdGhlICBTU0wgbGF5ZXIgbWF5IHVzZSB3b3JrLWFyb3VuZHMga25vd24gdG8gY2F1c2VcbiIKKyIgICAgICAgICAgICAgIGludGVyb3BlcmFiaWxpdHkgcHJvYmxlbXMgd2l0aCBzb21lIG9sZGVyICBTU0wgIGltcGxlbWVudGF0aW9ucy5cbiIKKyIgICAgICAgICAgICAgIFdBUk5JTkc6IHRoaXMgb3B0aW9uIGxvb3NlbnMgdGhlIFNTTCBzZWN1cml0eSwgYW5kIGJ5IHVzaW5nIHRoaXNcbiIKKyIgICAgICAgICAgICAgIGZsYWcgeW91IGFzayBmb3IgZXhhY3RseSB0aGF0LiAgKEFkZGVkIGluIDcuMjUuMClcbiIKKyJcbiIKKyIgICAgICAgLS1zb2NrczQgPGhvc3RbOnBvcnRdPlxuIgorIiAgICAgICAgICAgICAgVXNlIHRoZSBzcGVjaWZpZWQgU09DS1M0IHByb3h5LiBJZiB0aGUgcG9ydCBudW1iZXIgaXMgbm90IHNwZWNpLVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgZmllZCwgaXQgaXMgYXNzdW1lZCBhdCBwb3J0IDEwODAuIChBZGRlZCBpbiA3LjE1LjIpXG4iCisiXG4iCisiICAgICAgICAgICAgICBUaGlzICBvcHRpb24gIG92ZXJyaWRlcyBhbnkgcHJldmlvdXMgdXNlIG9mIC14LCAtLXByb3h5LCBhcyB0aGV5XG4iCisiICAgICAgICAgICAgICBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgU2luY2UgNy4yMS43LCB0aGlzIG9wdGlvbiBpcyBzdXBlcmZsdW91cyBzaW5jZSB5b3UgY2FuIHNwZWNpZnkgYVxuIgorIiAgICAgICAgICAgICAgc29ja3M0IHByb3h5IHdpdGggLXgsIC0tcHJveHkgdXNpbmcgYSBzb2NrczQ6Ly8gcHJvdG9jb2wgcHJlZml4LlxuIgorIiAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLlxuIgorIlxuIgorIiAgICAgICAtLXNvY2tzNGEgPGhvc3RbOnBvcnRdPlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgVXNlIHRoZSBzcGVjaWZpZWQgU09DS1M0YSBwcm94eS4gSWYgdGhlIHBvcnQgbnVtYmVyIGlzIG5vdCBzcGVjLVxuIgorIiAgICAgICAgICAgICAgaWZpZWQsIGl0IGlzIGFzc3VtZWQgYXQgcG9ydCAxMDgwLiAoQWRkZWQgaW4gNy4xOC4wKVxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhpcyBvcHRpb24gb3ZlcnJpZGVzIGFueSBwcmV2aW91cyB1c2Ugb2YgLXgsIC0tcHJveHksICBhcyAgdGhleVxuIgorIiAgICAgICAgICAgICAgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFNpbmNlIDcuMjEuNywgdGhpcyBvcHRpb24gaXMgc3VwZXJmbHVvdXMgc2luY2UgeW91IGNhbiBzcGVjaWZ5IGFcbiIKKyIgICAgICAgICAgICAgIHNvY2tzNGEgcHJveHkgd2l0aCAteCwgLS1wcm94eSB1c2luZyBhIHNvY2tzNGE6Ly8gcHJvdG9jb2wgIHByZS1cbiIKKyIgICAgICAgICAgICAgIGZpeC5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC5cbiIKKyJcbiIKKyIgICAgICAgLS1zb2NrczUtaG9zdG5hbWUgPGhvc3RbOnBvcnRdPlxuIgorIiAgICAgICAgICAgICAgVXNlICB0aGUgIHNwZWNpZmllZCAgU09DS1M1IHByb3h5IChhbmQgbGV0IHRoZSBwcm94eSByZXNvbHZlIHRoZVxuIgorIiAgICAgICAgICAgICAgaG9zdCBuYW1lKS4gSWYgdGhlIHBvcnQgbnVtYmVyIGlzIG5vdCBzcGVjaWZpZWQsIGl0ICBpcyAgYXNzdW1lZFxuIgorIiAgICAgICAgICAgICAgYXQgcG9ydCAxMDgwLiAoQWRkZWQgaW4gNy4xOC4wKVxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhpcyAgb3B0aW9uICBvdmVycmlkZXMgYW55IHByZXZpb3VzIHVzZSBvZiAteCwgLS1wcm94eSwgYXMgdGhleVxuIgorIiAgICAgICAgICAgICAgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIFNpbmNlIDcuMjEuNywgdGhpcyBvcHRpb24gaXMgc3VwZXJmbHVvdXMgc2luY2UgeW91IGNhbiBzcGVjaWZ5IGFcbiIKKyIgICAgICAgICAgICAgIHNvY2tzNSBob3N0bmFtZSBwcm94eSB3aXRoIC14LCAtLXByb3h5IHVzaW5nIGEgc29ja3M1aDovLyBwcm90by1cbiIKKyIgICAgICAgICAgICAgIGNvbCBwcmVmaXguXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiICAgICAgICAgICAgICAoVGhpcyAgb3B0aW9uICB3YXMgIHByZXZpb3VzbHkgIHdyb25nbHkgIGRvY3VtZW50ZWQgIGFuZCB1c2VkIGFzXG4iCisiICAgICAgICAgICAgICAtLXNvY2tzIHdpdGhvdXQgdGhlIG51bWJlciBhcHBlbmRlZC4pXG4iCisiXG4iCisiICAgICAgIC0tc29ja3M1IDxob3N0Wzpwb3J0XT5cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIFVzZSB0aGUgc3BlY2lmaWVkIFNPQ0tTNSBwcm94eSAgLSAgYnV0ICByZXNvbHZlICB0aGUgIGhvc3QgIG5hbWVcbiIKKyIgICAgICAgICAgICAgIGxvY2FsbHkuICBJZiAgdGhlIHBvcnQgbnVtYmVyIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIGFzc3VtZWQgYXRcbiIKKyIgICAgICAgICAgICAgIHBvcnQgMTA4MC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyBhbnkgcHJldmlvdXMgdXNlIG9mIC14LCAtLXByb3h5LCAgYXMgIHRoZXlcbiIKKyIgICAgICAgICAgICAgIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4iCisiXG4iCisiICAgICAgICAgICAgICBTaW5jZSA3LjIxLjcsIHRoaXMgb3B0aW9uIGlzIHN1cGVyZmx1b3VzIHNpbmNlIHlvdSBjYW4gc3BlY2lmeSBhXG4iCisiICAgICAgICAgICAgICBzb2NrczUgcHJveHkgd2l0aCAteCwgLS1wcm94eSB1c2luZyBhIHNvY2tzNTovLyBwcm90b2NvbCBwcmVmaXguXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiICAgICAgICAgICAgICAoVGhpcyAgb3B0aW9uICB3YXMgIHByZXZpb3VzbHkgIHdyb25nbHkgIGRvY3VtZW50ZWQgIGFuZCB1c2VkIGFzXG4iCisiICAgICAgICAgICAgICAtLXNvY2tzIHdpdGhvdXQgdGhlIG51bWJlciBhcHBlbmRlZC4pXG4iCisiXG4iCisiICAgICAgICAgICAgICBUaGlzIG9wdGlvbiAoYXMgd2VsbCBhcyAtLXNvY2tzNCkgZG9lcyBub3Qgd29yayB3aXRoIElQVjYsICBGVFBTXG4iCisiICAgICAgICAgICAgICBvciBMREFQLlxuIgorIlxuIgorIiAgICAgICAtLXNvY2tzNS1nc3NhcGktc2VydmljZSA8c2VydmljZW5hbWU+XG4iCisiICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBzZXJ2aWNlIG5hbWUgZm9yIGEgc29ja3Mgc2VydmVyIGlzIHJjbWQvc2VydmVyLWZxZG4uXG4iCisiICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNoYW5nZSBpdC5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIEV4YW1wbGVzOiAgLS1zb2NrczUgIHByb3h5LW5hbWUgIC0tc29ja3M1LWdzc2FwaS1zZXJ2aWNlICAgc29ja2RcbiIKKyIgICAgICAgICAgICAgIHdvdWxkICB1c2Ugc29ja2QvcHJveHktbmFtZSAtLXNvY2tzNSBwcm94eS1uYW1lIC0tc29ja3M1LWdzc2FwaS1cbiIKKyIgICAgICAgICAgICAgIHNlcnZpY2Ugc29ja2QvcmVhbC1uYW1lICB3b3VsZCAgdXNlICBzb2NrZC9yZWFsLW5hbWUgIGZvciAgY2FzZXNcbiIKKyIgICAgICAgICAgICAgIHdoZXJlICB0aGUgcHJveHktbmFtZSBkb2VzIG5vdCBtYXRjaCB0aGUgcHJpbmNpcGFsIG5hbWUuICAoQWRkZWRcbiIKKyIgICAgICAgICAgICAgIGluIDcuMTkuNCkuXG4iCisiXG4iCisiICAgICAgIC0tc29ja3M1LWdzc2FwaS1uZWNcbiIKKyIgICAgICAgICAgICAgIEFzIHBhcnQgb2YgdGhlIGdzc2FwaSBuZWdvdGlhdGlvbiBhIHByb3RlY3Rpb24gbW9kZSAgaXMgIG5lZ290aS1cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGF0ZWQuICBSRkMgIDE5NjEgc2F5cyBpbiBzZWN0aW9uIDQuMy80LjQgaXQgc2hvdWxkIGJlIHByb3RlY3RlZCxcbiIKKyIgICAgICAgICAgICAgIGJ1dCB0aGUgTkVDICByZWZlcmVuY2UgIGltcGxlbWVudGF0aW9uICBkb2VzICBub3QuICAgVGhlICBvcHRpb25cbiIKKyIgICAgICAgICAgICAgIC0tc29ja3M1LWdzc2FwaS1uZWMgIGFsbG93cyB0aGUgdW5wcm90ZWN0ZWQgZXhjaGFuZ2Ugb2YgdGhlIHByby1cbiIKKyIgICAgICAgICAgICAgIHRlY3Rpb24gbW9kZSBuZWdvdGlhdGlvbi4gKEFkZGVkIGluIDcuMTkuNCkuXG4iCisiXG4iCisiICAgICAgIC0tc3RkZXJyIDxmaWxlPlxuIgorIiAgICAgICAgICAgICAgUmVkaXJlY3QgYWxsIHdyaXRlcyB0byBzdGRlcnIgdG8gdGhlIHNwZWNpZmllZCBmaWxlIGluc3RlYWQuICBJZlxuIgorIiAgICAgICAgICAgICAgdGhlIGZpbGUgbmFtZSBpcyBhIHBsYWluICctJywgaXQgaXMgaW5zdGVhZCB3cml0dGVuIHRvIHN0ZG91dC5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC5cbiIKKyJcbiIKKyIgICAgICAgLXQsIC0tdGVsbmV0LW9wdGlvbiA8T1BUPXZhbD5cbiIKKyIgICAgICAgICAgICAgIFBhc3Mgb3B0aW9ucyB0byB0aGUgdGVsbmV0IHByb3RvY29sLiBTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6XG4iCisiXG4iCisiICAgICAgICAgICAgICBUVFlQRT08dGVybT4gU2V0cyB0aGUgdGVybWluYWwgdHlwZS5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFhESVNQTE9DPTxYIGRpc3BsYXk+IFNldHMgdGhlIFggZGlzcGxheSBsb2NhdGlvbi5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIE5FV19FTlY9PHZhcix2YWw+IFNldHMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4iCisiXG4iCisiICAgICAgIC1ULCAtLXVwbG9hZC1maWxlIDxmaWxlPlxuIgorIiAgICAgICAgICAgICAgVGhpcyAgdHJhbnNmZXJzICB0aGUgIHNwZWNpZmllZCBsb2NhbCBmaWxlIHRvIHRoZSByZW1vdGUgVVJMLiBJZlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgdGhlcmUgaXMgbm8gZmlsZSBwYXJ0IGluIHRoZSBzcGVjaWZpZWQgVVJMLCBDdXJsIHdpbGwgYXBwZW5kIHRoZVxuIgorIiAgICAgICAgICAgICAgbG9jYWwgZmlsZSBuYW1lLiBOT1RFIHRoYXQgeW91IG11c3QgdXNlIGEgdHJhaWxpbmcgLyBvbiB0aGUgbGFzdFxuIgorIiAgICAgICAgICAgICAgZGlyZWN0b3J5IHRvIHJlYWxseSBwcm92ZSB0byBDdXJsIHRoYXQgdGhlcmUgaXMgbm8gZmlsZSBuYW1lICBvclxuIgorIiAgICAgICAgICAgICAgY3VybCB3aWxsIHRoaW5rIHRoYXQgeW91ciBsYXN0IGRpcmVjdG9yeSBuYW1lIGlzIHRoZSByZW1vdGUgZmlsZVxuIgorIiAgICAgICAgICAgICAgbmFtZSB0byB1c2UuIFRoYXQgd2lsbCBtb3N0IGxpa2VseSBjYXVzZSB0aGUgdXBsb2FkIG9wZXJhdGlvbiB0b1xuIgorIiAgICAgICAgICAgICAgZmFpbC4gIElmIHRoaXMgaXMgdXNlZCBvbiBhIEhUVFAoUykgc2VydmVyLCB0aGUgUFVUIGNvbW1hbmQgd2lsbFxuIgorIiAgICAgICAgICAgICAgYmUgdXNlZC5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIFVzZSB0aGUgZmlsZSBuYW1lIFwiLVwiIChhIHNpbmdsZSBkYXNoKSB0byB1c2Ugc3RkaW4gaW5zdGVhZCBvZiAgYVxuIgorIiAgICAgICAgICAgICAgZ2l2ZW4gIGZpbGUuICAgQWx0ZXJuYXRlbHksICB0aGUgZmlsZSBuYW1lIFwiLlwiIChhIHNpbmdsZSBwZXJpb2QpXG4iCisiICAgICAgICAgICAgICBtYXkgYmUgc3BlY2lmaWVkIGluc3RlYWQgb2YgXCItXCIgdG8gIHVzZSAgc3RkaW4gIGluICBub24tYmxvY2tpbmdcbiIKKyIgICAgICAgICAgICAgIG1vZGUgIHRvICBhbGxvdyAgcmVhZGluZyAgc2VydmVyICBvdXRwdXQgIHdoaWxlICBzdGRpbiAgaXMgYmVpbmdcbiIKKyIgICAgICAgICAgICAgIHVwbG9hZGVkLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IG9uZSAtVCBmb3IgZWFjaCBVUkwgb24gdGhlIGNvbW1hbmQgbGluZS4gRWFjaCAtVFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgKyBVUkwgcGFpciBzcGVjaWZpZXMgd2hhdCB0byB1cGxvYWQgYW5kIHRvIHdoZXJlLiBjdXJsIGFsc28gc3VwLVxuIgorIiAgICAgICAgICAgICAgcG9ydHMgXCJnbG9iYmluZ1wiIG9mIHRoZSAtVCBhcmd1bWVudCwgbWVhbmluZyB0aGF0IHlvdSBjYW4gdXBsb2FkXG4iCisiICAgICAgICAgICAgICBtdWx0aXBsZSAgZmlsZXMgIHRvICBhIHNpbmdsZSBVUkwgYnkgdXNpbmcgdGhlIHNhbWUgVVJMIGdsb2JiaW5nXG4iCisiICAgICAgICAgICAgICBzdHlsZSBzdXBwb3J0ZWQgaW4gdGhlIFVSTCwgbGlrZSB0aGlzOlxuIgorIlxuIgorIiAgICAgICAgICAgICAgY3VybCAtVCBcIntmaWxlMSxmaWxlMn1cIiBodHRwOi8vd3d3LnVwbG9hZHRvdGhpc3NpdGUuY29tXG4iCisiXG4iCisiICAgICAgICAgICAgICBvciBldmVuXG4iCisiXG4iCisiICAgICAgICAgICAgICBjdXJsIC1UIFwiaW1nWzEtMTAwMF0ucG5nXCIgZnRwOi8vZnRwLnBpY3R1cmVtYW5pYS5jb20vdXBsb2FkL1xuIgorIlxuIgorIiAgICAgICAtLXRjcC1ub2RlbGF5XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBUdXJuIG9uIHRoZSBUQ1BfTk9ERUxBWSBvcHRpb24uIFNlZSB0aGUgY3VybF9lYXN5X3NldG9wdCgzKSAgbWFuXG4iCisiICAgICAgICAgICAgICBwYWdlIGZvciBkZXRhaWxzIGFib3V0IHRoaXMgb3B0aW9uLiAoQWRkZWQgaW4gNy4xMS4yKVxuIgorIlxuIgorIiAgICAgICAtLXRmdHAtYmxrc2l6ZSA8dmFsdWU+XG4iCisiICAgICAgICAgICAgICAoVEZUUCkgU2V0IFRGVFAgQkxLU0laRSBvcHRpb24gKG11c3QgYmUgPjUxMikuIFRoaXMgaXMgdGhlIGJsb2NrXG4iCisiICAgICAgICAgICAgICBzaXplIHRoYXQgY3VybCB3aWxsIHRyeSB0byB1c2Ugd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSB0byBvciBmcm9tXG4iCisiICAgICAgICAgICAgICBhIFRGVFAgc2VydmVyLiBCeSBkZWZhdWx0IDUxMiBieXRlcyB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAoQWRkZWQgaW4gNy4yMC4wKVxuIgorIlxuIgorIiAgICAgICAtLXRsc2F1dGh0eXBlIDxhdXRodHlwZT5cbiIKKyIgICAgICAgICAgICAgIFNldCAgVExTICBhdXRoZW50aWNhdGlvbiAgdHlwZS4gIEN1cnJlbnRseSwgIHRoZSAgb25seSBzdXBwb3J0ZWRcbiIKKyIgICAgICAgICAgICAgIG9wdGlvbiBpcyBcIlNSUFwiLCAgZm9yICBUTFMtU1JQICAoUkZDICA1MDU0KS4gIElmICAtLXRsc3VzZXIgIGFuZFxuIgorIiAgICAgICAgICAgICAgLS10bHNwYXNzd29yZCAgYXJlIHNwZWNpZmllZCBidXQgLS10bHNhdXRodHlwZSBpcyBub3QsIHRoZW4gdGhpc1xuIgorIiAgICAgICAgICAgICAgb3B0aW9uIGRlZmF1bHRzIHRvIFwiU1JQXCIuICAoQWRkZWQgaW4gNy4yMS40KVxuIgorIlxuIgorIiAgICAgICAtLXRsc3VzZXIgPHVzZXI+XG4iCisiICAgICAgICAgICAgICBTZXQgdXNlcm5hbWUgZm9yIHVzZSB3aXRoIHRoZSBUTFMgYXV0aGVudGljYXRpb24gIG1ldGhvZCAgc3BlY2ktXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBmaWVkICB3aXRoICAtLXRsc2F1dGh0eXBlLiAgUmVxdWlyZXMgIHRoYXQgLS10bHNwYXNzd29yZCBhbHNvIGJlXG4iCisiICAgICAgICAgICAgICBzZXQuICAoQWRkZWQgaW4gNy4yMS40KVxuIgorIlxuIgorIiAgICAgICAtLXRsc3Bhc3N3b3JkIDxwYXNzd29yZD5cbiIKKyIgICAgICAgICAgICAgIFNldCBwYXNzd29yZCBmb3IgdXNlIHdpdGggdGhlIFRMUyBhdXRoZW50aWNhdGlvbiAgbWV0aG9kICBzcGVjaS1cbiIKKyIgICAgICAgICAgICAgIGZpZWQgIHdpdGggIC0tdGxzYXV0aHR5cGUuICBSZXF1aXJlcyB0aGF0IC0tdGxzdXNlciBhbHNvIGJlIHNldC5cbiIKKyIgICAgICAgICAgICAgIChBZGRlZCBpbiA3LjIxLjQpXG4iCisiXG4iCisiICAgICAgIC0tdHItZW5jb2RpbmdcbiIKKyIgICAgICAgICAgICAgIChIVFRQKSBSZXF1ZXN0IGEgY29tcHJlc3NlZCBUcmFuc2Zlci1FbmNvZGluZyByZXNwb25zZSB1c2luZyBvbmVcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIG9mICB0aGUgIGFsZ29yaXRobXMgIGxpYmN1cmwgIHN1cHBvcnRzLCAgYW5kIHVuY29tcHJlc3MgdGhlIGRhdGFcbiIKKyIgICAgICAgICAgICAgIHdoaWxlIHJlY2VpdmluZyBpdC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIChBZGRlZCBpbiA3LjIxLjYpXG4iCisiXG4iCisiICAgICAgIC0tdHJhY2UgPGZpbGU+XG4iCisiICAgICAgICAgICAgICBFbmFibGVzIGEgZnVsbCB0cmFjZSBkdW1wIG9mIGFsbCAgaW5jb21pbmcgIGFuZCAgb3V0Z29pbmcgIGRhdGEsXG4iCisiICAgICAgICAgICAgICBpbmNsdWRpbmcgZGVzY3JpcHRpdmUgaW5mb3JtYXRpb24sIHRvIHRoZSBnaXZlbiBvdXRwdXQgZmlsZS4gVXNlXG4iCisiICAgICAgICAgICAgICBcIi1cIiBhcyBmaWxlbmFtZSB0byBoYXZlIHRoZSBvdXRwdXQgc2VudCB0byBzdGRvdXQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBvdmVycmlkZXMgcHJldmlvdXMgdXNlcyBvZiAtdiwgLS12ZXJib3NlIG9yIC0tdHJhY2UtXG4iCisiICAgICAgICAgICAgICBhc2NpaS5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC5cbiIKKyJcbiIKKyIgICAgICAgLS10cmFjZS1hc2NpaSA8ZmlsZT5cbiIKKyIgICAgICAgICAgICAgIEVuYWJsZXMgIGEgIGZ1bGwgIHRyYWNlICBkdW1wIG9mIGFsbCBpbmNvbWluZyBhbmQgb3V0Z29pbmcgZGF0YSxcbiIKKyIgICAgICAgICAgICAgIGluY2x1ZGluZyBkZXNjcmlwdGl2ZSBpbmZvcm1hdGlvbiwgdG8gdGhlIGdpdmVuIG91dHB1dCBmaWxlLiBVc2VcbiIKKyIgICAgICAgICAgICAgIFwiLVwiIGFzIGZpbGVuYW1lIHRvIGhhdmUgdGhlIG91dHB1dCBzZW50IHRvIHN0ZG91dC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIC0tdHJhY2UsIGJ1dCBsZWF2ZXMgb3V0IHRoZSBoZXggcGFydCBhbmRcbiIKKyIgICAgICAgICAgICAgIG9ubHkgc2hvd3MgdGhlIEFTQ0lJIHBhcnQgb2YgdGhlIGR1bXAuIEl0IG1ha2VzICBzbWFsbGVyICBvdXRwdXRcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHRoYXQgbWlnaHQgYmUgZWFzaWVyIHRvIHJlYWQgZm9yIHVudHJhaW5lZCBodW1hbnMuXG4iCisiXG4iCisiICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBvdmVycmlkZXMgcHJldmlvdXMgdXNlcyBvZiAtdiwgLS12ZXJib3NlIG9yIC0tdHJhY2UuXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC0tdHJhY2UtdGltZVxuIgorIiAgICAgICAgICAgICAgUHJlcGVuZHMgIGEgIHRpbWUgIHN0YW1wIHRvIGVhY2ggdHJhY2Ugb3IgdmVyYm9zZSBsaW5lIHRoYXQgY3VybFxuIgorIiAgICAgICAgICAgICAgZGlzcGxheXMuICAoQWRkZWQgaW4gNy4xNC4wKVxuIgorIlxuIgorIiAgICAgICAtdSwgLS11c2VyIDx1c2VyOnBhc3N3b3JkPlxuIgorIiAgICAgICAgICAgICAgU3BlY2lmeSB0aGUgdXNlciBuYW1lIGFuZCBwYXNzd29yZCB0byB1c2UgZm9yIHNlcnZlciBhdXRoZW50aWNhLVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgdGlvbi4gT3ZlcnJpZGVzIC1uLCAtLW5ldHJjIGFuZCAtLW5ldHJjLW9wdGlvbmFsLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgSWYgIHlvdSAganVzdCBnaXZlIHRoZSB1c2VyIG5hbWUgKHdpdGhvdXQgZW50ZXJpbmcgYSBjb2xvbikgY3VybFxuIgorIiAgICAgICAgICAgICAgd2lsbCBwcm9tcHQgZm9yIGEgcGFzc3dvcmQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB5b3UgdXNlIGFuIFNTUEktZW5hYmxlZCBjdXJsIGJpbmFyeSBhbmQgZG8gIE5UTE0gIGF1dGhlbnRpY2EtXG4iCisiICAgICAgICAgICAgICB0aW9uLCAgeW91ICBjYW4gZm9yY2UgY3VybCB0byBwaWNrIHVwIHRoZSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkXG4iCisiICAgICAgICAgICAgICBmcm9tIHlvdXIgZW52aXJvbm1lbnQgYnkgc2ltcGx5IHNwZWNpZnlpbmcgYSBzaW5nbGUgIGNvbG9uICB3aXRoXG4iCisiICAgICAgICAgICAgICB0aGlzIG9wdGlvbjogXCItdSA6XCIuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC1VLCAtLXByb3h5LXVzZXIgPHVzZXI6cGFzc3dvcmQ+XG4iCisiICAgICAgICAgICAgICBTcGVjaWZ5ICB0aGUgdXNlciBuYW1lIGFuZCBwYXNzd29yZCB0byB1c2UgZm9yIHByb3h5IGF1dGhlbnRpY2EtXG4iCisiICAgICAgICAgICAgICB0aW9uLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgSWYgeW91IHVzZSBhbiBTU1BJLWVuYWJsZWQgY3VybCBiaW5hcnkgYW5kIGRvICBOVExNICBhdXRoZW50aWNhLVxuIgorIiAgICAgICAgICAgICAgdGlvbiwgIHlvdSAgY2FuIGZvcmNlIGN1cmwgdG8gcGljayB1cCB0aGUgdXNlciBuYW1lIGFuZCBwYXNzd29yZFxuIgorIiAgICAgICAgICAgICAgZnJvbSB5b3VyIGVudmlyb25tZW50IGJ5IHNpbXBseSBzcGVjaWZ5aW5nIGEgc2luZ2xlICBjb2xvbiAgd2l0aFxuIgorIiAgICAgICAgICAgICAgdGhpcyBvcHRpb246IFwiLVUgOlwiLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLlxuIgorIlxuIgorIiAgICAgICAtLXVybCA8VVJMPlxuIgorIiAgICAgICAgICAgICAgU3BlY2lmeSAgYSAgVVJMICB0byAgZmV0Y2guIFRoaXMgb3B0aW9uIGlzIG1vc3RseSBoYW5keSB3aGVuIHlvdVxuIgorIiAgICAgICAgICAgICAgd2FudCB0byBzcGVjaWZ5IFVSTChzKSBpbiBhIGNvbmZpZyBmaWxlLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhpcyBvcHRpb24gbWF5IGJlIHVzZWQgYW55IG51bWJlciBvZiB0aW1lcy4gIFRvICBjb250cm9sICB3aGVyZVxuIgorIiAgICAgICAgICAgICAgdGhpcyAgVVJMICBpcyB3cml0dGVuLCB1c2UgdGhlIC1vLCAtLW91dHB1dCBvciB0aGUgLU8sIC0tcmVtb3RlLVxuIgorIiAgICAgICAgICAgICAgbmFtZSBvcHRpb25zLlxuIgorIiAgICAgICAtdiwgLS12ZXJib3NlXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBNYWtlcyB0aGUgZmV0Y2hpbmcgbW9yZSAgdmVyYm9zZS90YWxrYXRpdmUuICBNb3N0bHkgIHVzZWZ1bCAgZm9yXG4iCisiICAgICAgICAgICAgICBkZWJ1Z2dpbmcuICBBIGxpbmUgc3RhcnRpbmcgd2l0aCAnPicgbWVhbnMgXCJoZWFkZXIgZGF0YVwiIHNlbnQgYnlcbiIKKyIgICAgICAgICAgICAgIGN1cmwsICc8JyBtZWFucyBcImhlYWRlciBkYXRhXCIgcmVjZWl2ZWQgYnkgY3VybCB0aGF0IGlzIGhpZGRlbiBpblxuIgorIiAgICAgICAgICAgICAgbm9ybWFsIGNhc2VzLCBhbmQgYSBsaW5lIHN0YXJ0aW5nIHdpdGggJyonIG1lYW5zIGFkZGl0aW9uYWwgaW5mb1xuIgorIiAgICAgICAgICAgICAgcHJvdmlkZWQgYnkgY3VybC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIE5vdGUgdGhhdCBpZiB5b3Ugb25seSB3YW50ICBIVFRQICBoZWFkZXJzICBpbiAgdGhlICBvdXRwdXQsICAtaSxcbiIKKyIgICAgICAgICAgICAgIC0taW5jbHVkZSBtaWdodCBiZSB0aGUgb3B0aW9uIHlvdSdyZSBsb29raW5nIGZvci5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIElmICB5b3UgdGhpbmsgdGhpcyBvcHRpb24gc3RpbGwgZG9lc24ndCBnaXZlIHlvdSBlbm91Z2ggZGV0YWlscyxcbiIKKyIgICAgICAgICAgICAgIGNvbnNpZGVyIHVzaW5nIC0tdHJhY2Ugb3IgLS10cmFjZS1hc2NpaSBpbnN0ZWFkLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhpcyBvcHRpb24gb3ZlcnJpZGVzIHByZXZpb3VzIHVzZXMgb2YgLS10cmFjZS1hc2NpaSBvciAtLXRyYWNlLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgVXNlIC1zLCAtLXNpbGVudCB0byBtYWtlIGN1cmwgcXVpZXQuXG4iCisiXG4iCisiICAgICAgIC13LCAtLXdyaXRlLW91dCA8Zm9ybWF0PlxuIgorIiAgICAgICAgICAgICAgRGVmaW5lcyB3aGF0IHRvIGRpc3BsYXkgb24gc3Rkb3V0IGFmdGVyIGEgY29tcGxldGVkIGFuZCBzdWNjZXNzLVxuIgorIiAgICAgICAgICAgICAgZnVsICBvcGVyYXRpb24uICBUaGUgIGZvcm1hdCAgaXMgYSBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBwbGFpblxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgdGV4dCBtaXhlZCB3aXRoIGFueSBudW1iZXIgb2YgdmFyaWFibGVzLiBUaGUgc3RyaW5nIGNhbiBiZSBzcGVjLVxuIgorIiAgICAgICAgICAgICAgaWZpZWQgIGFzIFwic3RyaW5nXCIsIHRvIGdldCByZWFkIGZyb20gYSBwYXJ0aWN1bGFyIGZpbGUgeW91IHNwZWMtXG4iCisiICAgICAgICAgICAgICBpZnkgaXQgXCJAZmlsZW5hbWVcIiBhbmQgdG8gdGVsbCBjdXJsICB0byAgcmVhZCAgdGhlICBmb3JtYXQgIGZyb21cbiIKKyIgICAgICAgICAgICAgIHN0ZGluIHlvdSB3cml0ZSBcIkAtXCIuXG4iCisiXG4iCisiICAgICAgICAgICAgICBUaGUgIHZhcmlhYmxlcyAgcHJlc2VudCBpbiB0aGUgb3V0cHV0IGZvcm1hdCB3aWxsIGJlIHN1YnN0aXR1dGVkXG4iCisiICAgICAgICAgICAgICBieSB0aGUgdmFsdWUgb3IgdGV4dCB0aGF0IGN1cmwgdGhpbmtzIGZpdCwgYXMgIGRlc2NyaWJlZCAgYmVsb3cuXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBBbGwgIHZhcmlhYmxlcyBhcmUgc3BlY2lmaWVkIGFzICV7dmFyaWFibGVfbmFtZX0gYW5kIHRvIG91dHB1dCBhXG4iCisiICAgICAgICAgICAgICBub3JtYWwgJSB5b3UganVzdCB3cml0ZSB0aGVtIGFzICUlLiBZb3UgY2FuIG91dHB1dCBhIG5ld2xpbmUgIGJ5XG4iCisiICAgICAgICAgICAgICB1c2luZyBcXG4sIGEgY2FycmlhZ2UgcmV0dXJuIHdpdGggXFxyIGFuZCBhIHRhYiBzcGFjZSB3aXRoIFxcdC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIE5PVEU6IFRoZSAlLXN5bWJvbCBpcyBhIHNwZWNpYWwgc3ltYm9sIGluIHRoZSB3aW4zMi1lbnZpcm9ubWVudCxcbiIKKyIgICAgICAgICAgICAgIHdoZXJlIGFsbCBvY2N1cnJlbmNlcyBvZiAlICBtdXN0ICBiZSAgZG91YmxlZCAgd2hlbiAgdXNpbmcgIHRoaXNcbiIKKyIgICAgICAgICAgICAgIG9wdGlvbi5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQgYXJlOlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgdXJsX2VmZmVjdGl2ZSAgVGhlIFVSTCB0aGF0IHdhcyBmZXRjaGVkIGxhc3QuIFRoaXMgaXMgbW9zdCBtZWFuLVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5nZnVsIGlmIHlvdSd2ZSB0b2xkIGN1cmwgIHRvICBmb2xsb3cgIGxvY2F0aW9uOlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycy5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIGh0dHBfY29kZSAgICAgIFRoZSBudW1lcmljYWwgcmVzcG9uc2UgY29kZSB0aGF0IHdhcyBmb3VuZCBpbiB0aGVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgcmV0cmlldmVkIEhUVFAoUykgIG9yICBGVFAocykgIHRyYW5zZmVyLiAgSW5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuMTguMiAgdGhlIGFsaWFzIHJlc3BvbnNlX2NvZGUgd2FzIGFkZGVkIHRvIHNob3dcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1lIGluZm8uXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBodHRwX2Nvbm5lY3QgICBUaGUgbnVtZXJpY2FsIGNvZGUgdGhhdCB3YXMgIGZvdW5kICBpbiAgdGhlICBsYXN0XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSAgIChmcm9tICBhICBwcm94eSkgIHRvICBhICBjdXJsICBDT05ORUNUXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LiAoQWRkZWQgaW4gNy4xMi40KVxuIgorIlxuIgorIiAgICAgICAgICAgICAgdGltZV90b3RhbCAgICAgVGhlIHRvdGFsIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgdGhlIGZ1bGwgIG9wZXJhLVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlvbiBsYXN0ZWQuIFRoZSB0aW1lIHdpbGwgYmUgZGlzcGxheWVkIHdpdGggbWlsLVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzZWNvbmQgcmVzb2x1dGlvbi5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIHRpbWVfbmFtZWxvb2t1cFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRpbWUsIGluIHNlY29uZHMsICBpdCAgdG9vayAgZnJvbSAgdGhlICBzdGFydFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW50aWwgdGhlIG5hbWUgcmVzb2x2aW5nIHdhcyBjb21wbGV0ZWQuXG4iCisiXG4iCisiICAgICAgICAgICAgICB0aW1lX2Nvbm5lY3QgICBUaGUgIHRpbWUsICBpbiAgc2Vjb25kcywgIGl0ICB0b29rIGZyb20gdGhlIHN0YXJ0XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgVENQIGNvbm5lY3QgIHRvICB0aGUgIHJlbW90ZSAgaG9zdCAgKG9yXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eSkgd2FzIGNvbXBsZXRlZC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIHRpbWVfYXBwY29ubmVjdFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlICB0aW1lLCAgaW4gIHNlY29uZHMsICBpdCAgdG9vayBmcm9tIHRoZSBzdGFydFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW50aWwgdGhlIFNTTC9TU0gvZXRjICBjb25uZWN0L2hhbmRzaGFrZSAgdG8gIHRoZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlIGhvc3Qgd2FzIGNvbXBsZXRlZC4gKEFkZGVkIGluIDcuMTkuMClcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIHRpbWVfcHJldHJhbnNmZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAgdGltZSwgIGluICBzZWNvbmRzLCAgaXQgIHRvb2sgZnJvbSB0aGUgc3RhcnRcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudGlsIHRoZSBmaWxlIHRyYW5zZmVyIHdhcyBqdXN0IGFib3V0IHRvICBiZWdpbi5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaW5jbHVkZXMgYWxsIHByZS10cmFuc2ZlciBjb21tYW5kcyBhbmQgbmVnby1cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpYXRpb25zIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBwYXJ0aWN1bGFyIHByby1cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvY29sKHMpIGludm9sdmVkLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgdGltZV9yZWRpcmVjdCAgVGhlIHRpbWUsIGluIHNlY29uZHMsIGl0IHRvb2sgZm9yIGFsbCByZWRpcmVjdGlvblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHMgaW5jbHVkZSBuYW1lIGxvb2t1cCwgIGNvbm5lY3QsICBwcmV0cmFuc2ZlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kICB0cmFuc2ZlciAgYmVmb3JlICB0aGUgIGZpbmFsIHRyYW5zYWN0aW9uIHdhc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZC4gdGltZV9yZWRpcmVjdCBzaG93cyB0aGUgY29tcGxldGUgIGV4ZWN1LVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlvbiAgdGltZSAgZm9yICBtdWx0aXBsZSByZWRpcmVjdGlvbnMuIChBZGRlZCBpblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy4xMi4zKVxuIgorIlxuIgorIiAgICAgICAgICAgICAgdGltZV9zdGFydHRyYW5zZmVyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGltZSwgaW4gc2Vjb25kcywgIGl0ICB0b29rICBmcm9tICB0aGUgIHN0YXJ0XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCAgdGhlIGZpcnN0IGJ5dGUgd2FzIGp1c3QgYWJvdXQgdG8gYmUgdHJhbnMtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXJyZWQuIFRoaXMgaW5jbHVkZXMgdGltZV9wcmV0cmFuc2ZlciAgYW5kICBhbHNvXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgIHRpbWUgIHRoZSAgc2VydmVyICBuZWVkZWQgIHRvICBjYWxjdWxhdGUgdGhlXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBzaXplX2Rvd25sb2FkICBUaGUgdG90YWwgYW1vdW50IG9mIGJ5dGVzIHRoYXQgd2VyZSBkb3dubG9hZGVkLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgc2l6ZV91cGxvYWQgICAgVGhlIHRvdGFsIGFtb3VudCBvZiBieXRlcyB0aGF0IHdlcmUgdXBsb2FkZWQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBzaXplX2hlYWRlciAgICBUaGUgdG90YWwgYW1vdW50IG9mIGJ5dGVzIG9mIHRoZSBkb3dubG9hZGVkIGhlYWQtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnMuXG4iCisiXG4iCisiICAgICAgICAgICAgICBzaXplX3JlcXVlc3QgICBUaGUgIHRvdGFsICBhbW91bnQgb2YgYnl0ZXMgdGhhdCB3ZXJlIHNlbnQgaW4gdGhlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQIHJlcXVlc3QuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBzcGVlZF9kb3dubG9hZCBUaGUgYXZlcmFnZSBkb3dubG9hZCBzcGVlZCB0aGF0IGN1cmwgbWVhc3VyZWQgZm9yXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tcGxldGUgZG93bmxvYWQuIEJ5dGVzIHBlciBzZWNvbmQuXG4iCisiXG4iCisiICAgICAgICAgICAgICBzcGVlZF91cGxvYWQgICBUaGUgIGF2ZXJhZ2UgIHVwbG9hZCBzcGVlZCB0aGF0IGN1cmwgbWVhc3VyZWQgZm9yXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tcGxldGUgdXBsb2FkLiBCeXRlcyBwZXIgc2Vjb25kLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgY29udGVudF90eXBlICAgVGhlIENvbnRlbnQtVHlwZSBvZiB0aGUgIHJlcXVlc3RlZCAgZG9jdW1lbnQsICBpZlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlcmUgd2FzIGFueS5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIG51bV9jb25uZWN0cyAgIE51bWJlciAgb2YgbmV3IGNvbm5lY3RzIG1hZGUgaW4gdGhlIHJlY2VudCB0cmFucy1cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlci4gKEFkZGVkIGluIDcuMTIuMylcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIG51bV9yZWRpcmVjdHMgIE51bWJlciBvZiByZWRpcmVjdHMgdGhhdCAgd2VyZSAgZm9sbG93ZWQgIGluICB0aGVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuIChBZGRlZCBpbiA3LjEyLjMpXG4iCisiXG4iCisiICAgICAgICAgICAgICByZWRpcmVjdF91cmwgICBXaGVuIGEgSFRUUCByZXF1ZXN0IHdhcyBtYWRlIHdpdGhvdXQgLUwgdG8gZm9sbG93XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdHMsIHRoaXMgdmFyaWFibGUgd2lsbCBzaG93IHRoZSBhY3R1YWwgVVJMXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlZGlyZWN0IHdvdWxkIHRha2UgeW91IHRvLiAoQWRkZWQgaW4gNy4xOC4yKVxuIgorIlxuIgorIiAgICAgICAgICAgICAgZnRwX2VudHJ5X3BhdGggVGhlIGluaXRpYWwgcGF0aCBsaWJjdXJsIGVuZGVkIHVwIGluIHdoZW4gbG9nZ2luZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdG8gdGhlIHJlbW90ZSBGVFAgc2VydmVyLiAoQWRkZWQgaW4gNy4xNS40KVxuIgorIlxuIgorIiAgICAgICAgICAgICAgc3NsX3ZlcmlmeV9yZXN1bHRcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHQgb2YgdGhlIFNTTCBwZWVyIGNlcnRpZmljYXRlICB2ZXJpZmljYS1cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpb24gdGhhdCB3YXMgcmVxdWVzdGVkLiAwIG1lYW5zIHRoZSB2ZXJpZmljYXRpb25cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcyBzdWNjZXNzZnVsLiAoQWRkZWQgaW4gNy4xOS4wKVxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC14LCAtLXByb3h5IDxbcHJvdG9jb2w6Ly9dW3VzZXJAcGFzc3dvcmRdcHJveHlob3N0Wzpwb3J0XT5cbiIKKyIgICAgICAgICAgICAgIFVzZSB0aGUgc3BlY2lmaWVkIEhUVFAgcHJveHkuIElmIHRoZSBwb3J0IG51bWJlciBpcyAgbm90ICBzcGVjaS1cbiIKKyIgICAgICAgICAgICAgIGZpZWQsIGl0IGlzIGFzc3VtZWQgYXQgcG9ydCAxMDgwLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgVGhpcyAgb3B0aW9uICBvdmVycmlkZXMgIGV4aXN0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHNldFxuIgorIiAgICAgICAgICAgICAgdGhlIHByb3h5IHRvIHVzZS4gSWYgdGhlcmUncyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSAgc2V0dGluZyAgYVxuIgorIiAgICAgICAgICAgICAgcHJveHksIHlvdSBjYW4gc2V0IHByb3h5IHRvIFwiXCIgdG8gb3ZlcnJpZGUgaXQuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBBbGwgIG9wZXJhdGlvbnMgdGhhdCBhcmUgcGVyZm9ybWVkIG92ZXIgYSBIVFRQIHByb3h5IHdpbGwgdHJhbnMtXG4iCisiICAgICAgICAgICAgICBwYXJlbnRseSBiZSBjb252ZXJ0ZWQgdG8gSFRUUC4gSXQgbWVhbnMgIHRoYXQgIGNlcnRhaW4gIHByb3RvY29sXG4iCisiICAgICAgICAgICAgICBzcGVjaWZpYyBvcGVyYXRpb25zIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUuIFRoaXMgaXMgbm90IHRoZSBjYXNlXG4iCisiICAgICAgICAgICAgICBpZiB5b3UgY2FuIHR1bm5lbCB0aHJvdWdoIHRoZSBwcm94eSwgYXMgb25lIHdpdGggdGhlIC1wLCAtLXByb3gtXG4iCisiICAgICAgICAgICAgICB5dHVubmVsIG9wdGlvbi5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoZSAgcHJveHkgaG9zdCBjYW4gYmUgc3BlY2lmaWVkIHRoZSBleGFjdCBzYW1lIHdheSBhcyB0aGUgcHJveHlcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlcywgaW5jbHVkaW5nIHRoZSBwcm90b2NvbCAgcHJlZml4ICAoaHR0cDovLylcbiIKKyIgICAgICAgICAgICAgIGFuZCB0aGUgZW1iZWRkZWQgdXNlciArIHBhc3N3b3JkLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgRnJvbSAgNy4yMS43LCAgdGhlICBwcm94eSAgc3RyaW5nIG1heSBiZSBzcGVjaWZpZWQgd2l0aCBhIHByb3RvLVxuIgorIiAgICAgICAgICAgICAgY29sOi8vICBwcmVmaXggIHRvICBzcGVjaWZ5ICBhbHRlcm5hdGl2ZSAgcHJveHkgIHByb3RvY29scy4gIFVzZVxuIgorIiAgICAgICAgICAgICAgc29ja3M0Oi8vLCAgc29ja3M0YTovLywgIHNvY2tzNTovLyAgb3Igc29ja3M1aDovLyB0byByZXF1ZXN0IHRoZVxuIgorIiAgICAgICAgICAgICAgc3BlY2lmaWMgU09DS1MgIHZlcnNpb24gIHRvICBiZSAgdXNlZC4gIE5vICBwcm90b2NvbCAgc3BlY2lmaWVkLFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgaHR0cDovLyBhbmQgYWxsIG90aGVycyB3aWxsIGJlIHRyZWF0ZWQgYXMgSFRUUCBwcm94aWVzLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLlxuIgorIlxuIgorIiAgICAgICAtWCwgLS1yZXF1ZXN0IDxjb21tYW5kPlxuIgorIiAgICAgICAgICAgICAgKEhUVFApIFNwZWNpZmllcyBhIGN1c3RvbSByZXF1ZXN0IG1ldGhvZCB0byB1c2Ugd2hlbiBjb21tdW5pY2F0LVxuIgorIiAgICAgICAgICAgICAgaW5nIHdpdGggdGhlIEhUVFAgc2VydmVyLiAgVGhlIHNwZWNpZmllZCByZXF1ZXN0ICB3aWxsICBiZSAgdXNlZFxuIgorIiAgICAgICAgICAgICAgaW5zdGVhZCAgb2YgIHRoZSAgbWV0aG9kIG90aGVyd2lzZSB1c2VkICh3aGljaCBkZWZhdWx0cyB0byBHRVQpLlxuIgorIiAgICAgICAgICAgICAgUmVhZCB0aGUgSFRUUCAxLjEgc3BlY2lmaWNhdGlvbiBmb3IgIGRldGFpbHMgIGFuZCAgZXhwbGFuYXRpb25zLlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgQ29tbW9uICBhZGRpdGlvbmFsICBIVFRQICByZXF1ZXN0cyAgaW5jbHVkZSAgUFVUIGFuZCBERUxFVEUsIGJ1dFxuIgorIiAgICAgICAgICAgICAgcmVsYXRlZCB0ZWNobm9sb2dpZXMgbGlrZSBXZWJEQVYgb2ZmZXJzIFBST1BGSU5ELCBDT1BZLCBNT1ZFIGFuZFxuIgorIiAgICAgICAgICAgICAgbW9yZS5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIChGVFApIFNwZWNpZmllcyBhIGN1c3RvbSBGVFAgY29tbWFuZCB0byB1c2UgaW5zdGVhZCBvZiBMSVNUIHdoZW5cbiIKKyIgICAgICAgICAgICAgIGRvaW5nIGZpbGUgbGlzdHMgd2l0aCBGVFAuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC0teGF0dHJcbiIKKyIgICAgICAgICAgICAgIFdoZW4gc2F2aW5nIG91dHB1dCB0byBhIGZpbGUsIHRoaXMgb3B0aW9uIHRlbGxzICBjdXJsICB0byAgc3RvcmVcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGNlcnRhaW4gZmlsZSBtZXRhZGF0YSBpbiBleHRlbmVkIGZpbGUgYXR0cmlidXRlcy4gQ3VycmVudGx5LCB0aGVcbiIKKyIgICAgICAgICAgICAgIFVSTCBpcyBzdG9yZWQgaW4gdGhlIHhkZy5vcmlnaW4udXJsIGF0dHJpYnV0ZSBhbmQsIGZvciBIVFRQLCB0aGVcbiIKKyIgICAgICAgICAgICAgIGNvbnRlbnQgIHR5cGUgIGlzIHN0b3JlZCBpbiB0aGUgbWltZV90eXBlIGF0dHJpYnV0ZS4gSWYgdGhlIGZpbGVcbiIKKyIgICAgICAgICAgICAgIHN5c3RlbSBkb2VzICBub3QgIHN1cHBvcnQgIGV4dGVuZGVkICBhdHRyaWJ1dGVzLCAgYSAgd2FybmluZyAgaXNcbiIKKyIgICAgICAgICAgICAgIGlzc3VlZC5cbiIKKyJcbiIKKyIgICAgICAgLXksIC0tc3BlZWQtdGltZSA8dGltZT5cbiIKKyIgICAgICAgICAgICAgIElmIGEgZG93bmxvYWQgaXMgc2xvd2VyIHRoYW4gc3BlZWQtbGltaXQgYnl0ZXMgcGVyIHNlY29uZCBkdXJpbmdcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIGEgc3BlZWQtdGltZSBwZXJpb2QsIHRoZSBkb3dubG9hZCBnZXRzIGFib3J0ZWQuIElmIHNwZWVkLXRpbWUgaXNcbiIKKyIgICAgICAgICAgICAgIHVzZWQsIHRoZSBkZWZhdWx0IHNwZWVkLWxpbWl0IHdpbGwgYmUgMSB1bmxlc3Mgc2V0IHdpdGggLVkuXG4iCisiXG4iCisiICAgICAgICAgICAgICBUaGlzICBvcHRpb24gIGNvbnRyb2xzICB0cmFuc2ZlcnMgIGFuZCB0aHVzIHdpbGwgbm90IGFmZmVjdCBzbG93XG4iCisiICAgICAgICAgICAgICBjb25uZWN0cyBldGMuIElmIHRoaXMgaXMgYSBjb25jZXJuIGZvciB5b3UsIHRyeSAgdGhlICAtLWNvbm5lY3QtXG4iCisiICAgICAgICAgICAgICB0aW1lb3V0IG9wdGlvbi5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC5cbiIKKyJcbiIKKyIgICAgICAgLVksIC0tc3BlZWQtbGltaXQgPHNwZWVkPlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgSWYgYSBkb3dubG9hZCBpcyBzbG93ZXIgdGhhbiB0aGlzIGdpdmVuIHNwZWVkIChpbiBieXRlcyBwZXIgc2VjLVxuIgorIiAgICAgICAgICAgICAgb25kKSBmb3Igc3BlZWQtdGltZSBzZWNvbmRzIGl0IGdldHMgYWJvcnRlZC4gc3BlZWQtdGltZSAgaXMgIHNldFxuIgorIiAgICAgICAgICAgICAgd2l0aCAteSBhbmQgaXMgMzAgaWYgbm90IHNldC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC5cbiIKKyJcbiIKKyIgICAgICAgLXosIC0tdGltZS1jb25kIDxkYXRlIGV4cHJlc3Npb24+XG4iCisiICAgICAgICAgICAgICAoSFRUUC9GVFAvRklMRSkgUmVxdWVzdCBhIGZpbGUgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBsYXRlciB0aGFuXG4iCisiICAgICAgICAgICAgICB0aGUgZ2l2ZW4gdGltZSBhbmQgZGF0ZSwgb3Igb25lIHRoYXQgaGFzICBiZWVuICBtb2RpZmllZCAgYmVmb3JlXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICB0aGF0ICB0aW1lLiBUaGUgZGF0ZSBleHByZXNzaW9uIGNhbiBiZSBhbGwgc29ydHMgb2YgZGF0ZSBzdHJpbmdzXG4iCisiICAgICAgICAgICAgICBvciBpZiBpdCBkb2Vzbid0IG1hdGNoIGFueSBpbnRlcm5hbCBvbmVzLCBpdCB0cmllcyAgdG8gIGdldCAgdGhlXG4iCisiICAgICAgICAgICAgICB0aW1lIGZyb20gYSBnaXZlbiBmaWxlIG5hbWUgaW5zdGVhZCEgU2VlIHRoZSBjdXJsX2dldGRhdGUoMykgbWFuXG4iCisiICAgICAgICAgICAgICBwYWdlcyBmb3IgZGF0ZSBleHByZXNzaW9uIGRldGFpbHMuXG4iCisiXG4iCisiICAgICAgICAgICAgICBTdGFydCB0aGUgZGF0ZSBleHByZXNzaW9uIHdpdGggYSBkYXNoICgtKSB0byBtYWtlIGl0IHJlcXVlc3QgZm9yXG4iCisiICAgICAgICAgICAgICBhICBkb2N1bWVudCB0aGF0IGlzIG9sZGVyIHRoYW4gdGhlIGdpdmVuIGRhdGUvdGltZSwgZGVmYXVsdCBpcyBhXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBkb2N1bWVudCB0aGF0IGlzIG5ld2VyIHRoYW4gdGhlIHNwZWNpZmllZCBkYXRlL3RpbWUuXG4iCisiXG4iCisiICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuXG4iCisiXG4iCisiICAgICAgIC1oLCAtLWhlbHBcbiIKKyIgICAgICAgICAgICAgIFVzYWdlIGhlbHAuXG4iCisiXG4iCisiICAgICAgIC1NLCAtLW1hbnVhbFxuIgorIiAgICAgICAgICAgICAgTWFudWFsLiBEaXNwbGF5IHRoZSBodWdlIGhlbHAgdGV4dC5cbiIKKyJcbiIKKyIgICAgICAgLVYsIC0tdmVyc2lvblxuIgorIiAgICAgICAgICAgICAgRGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQgY3VybCBhbmQgdGhlIGxpYmN1cmwgdmVyc2lvbiBpdCB1c2VzLlxuIgorIiAgICAgICAgICAgICAgVGhlIGZpcnN0IGxpbmUgaW5jbHVkZXMgdGhlIGZ1bGwgdmVyc2lvbiBvZiAgY3VybCwgIGxpYmN1cmwgIGFuZFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgb3RoZXIgM3JkIHBhcnR5IGxpYnJhcmllcyBsaW5rZWQgd2l0aCB0aGUgZXhlY3V0YWJsZS5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoZSAgc2Vjb25kICBsaW5lIChzdGFydHMgd2l0aCBcIlByb3RvY29sczpcIikgc2hvd3MgYWxsIHByb3RvY29sc1xuIgorIiAgICAgICAgICAgICAgdGhhdCBsaWJjdXJsIHJlcG9ydHMgdG8gc3VwcG9ydC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRoZSB0aGlyZCBsaW5lIChzdGFydHMgd2l0aCBcIkZlYXR1cmVzOlwiKSBzaG93cyBzcGVjaWZpYyBmZWF0dXJlc1xuIgorIiAgICAgICAgICAgICAgbGliY3VybCByZXBvcnRzIHRvIG9mZmVyLiBBdmFpbGFibGUgZmVhdHVyZXMgaW5jbHVkZTpcbiIKKyJcbiIKKyIgICAgICAgICAgICAgIElQdjYgICBZb3UgY2FuIHVzZSBJUHY2IHdpdGggdGhpcy5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIGtyYjQgICBLcmI0IGZvciBGVFAgaXMgc3VwcG9ydGVkLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgU1NMICAgIEhUVFBTIGFuZCBGVFBTIGFyZSBzdXBwb3J0ZWQuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICAgICAgICBsaWJ6ICAgQXV0b21hdGljICBkZWNvbXByZXNzaW9uIG9mIGNvbXByZXNzZWQgZmlsZXMgb3ZlciBIVFRQIGlzXG4iCisiICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgTlRMTSAgIE5UTE0gYXV0aGVudGljYXRpb24gaXMgc3VwcG9ydGVkLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgR1NTLU5lZ290aWF0ZVxuIgorIiAgICAgICAgICAgICAgICAgICAgIE5lZ290aWF0ZSBhdXRoZW50aWNhdGlvbiBhbmQga3JiNSBmb3IgRlRQIGlzIHN1cHBvcnRlZC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIERlYnVnICBUaGlzIGN1cmwgdXNlcyBhIGxpYmN1cmwgYnVpbHQgd2l0aCBEZWJ1Zy4gIFRoaXMgIGVuYWJsZXNcbiIKKyIgICAgICAgICAgICAgICAgICAgICBtb3JlICBlcnJvci10cmFja2luZyAgYW5kIG1lbW9yeSBkZWJ1Z2dpbmcgZXRjLiBGb3IgY3VybC1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wZXJzIG9ubHkhXG4iCisiXG4iCisiICAgICAgICAgICAgICBBc3luY2hETlNcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgICAgICAgICBUaGlzIGN1cmwgdXNlcyBhc3luY2hyb25vdXMgbmFtZSByZXNvbHZlcy5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFNQTkVHTyBTUE5FR08gTmVnb3RpYXRlIGF1dGhlbnRpY2F0aW9uIGlzIHN1cHBvcnRlZC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIExhcmdlZmlsZVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFRoaXMgY3VybCBzdXBwb3J0cyB0cmFuc2ZlcnMgb2YgbGFyZ2UgZmlsZXMsIGZpbGVzIGxhcmdlclxuIgorIiAgICAgICAgICAgICAgICAgICAgIHRoYW4gMkdCLlxuIgorIlxuIgorIiAgICAgICAgICAgICAgSUROICAgIFRoaXMgY3VybCBzdXBwb3J0cyBJRE4gLSBpbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lcy5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFNTUEkgICBTU1BJICBpcyAgc3VwcG9ydGVkLiBJZiB5b3UgdXNlIE5UTE0gYW5kIHNldCBhIGJsYW5rIHVzZXJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgICAgICAgICBuYW1lLCBjdXJsIHdpbGwgYXV0aGVudGljYXRlIHdpdGggeW91ciBjdXJyZW50ICB1c2VyICBhbmRcbiIKKyIgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZC5cbiIKKyJcbiIKKyIgICAgICAgICAgICAgIFRMUy1TUlBcbiIKKyIgICAgICAgICAgICAgICAgICAgICBTUlAgIChTZWN1cmUgUmVtb3RlIFBhc3N3b3JkKSBhdXRoZW50aWNhdGlvbiBpcyBzdXBwb3J0ZWRcbiIKKyIgICAgICAgICAgICAgICAgICAgICBmb3IgVExTLlxuIgorIlxuIgorIkZJTEVTXG4iCisiICAgICAgIH4vLmN1cmxyY1xuIgorIiAgICAgICAgICAgICAgRGVmYXVsdCBjb25maWcgZmlsZSwgc2VlIC1LLCAtLWNvbmZpZyBmb3IgZGV0YWlscy5cbiIKKyJcbiIKKyJFTlZJUk9OTUVOVFxuIgorIiAgICAgICBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbiBiZSBzcGVjaWZpZWQgaW4gbG93ZXIgY2FzZSBvciB1cHBlciBjYXNlLlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICBUaGUgbG93ZXIgY2FzZSB2ZXJzaW9uIGhhcyBwcmVjZWRlbmNlLiBodHRwX3Byb3h5IGlzIGFuIGV4Y2VwdGlvbiBhcyBpdFxuIgorIiAgICAgICBpcyBvbmx5IGF2YWlsYWJsZSBpbiBsb3dlciBjYXNlLlxuIgorIlxuIgorIiAgICAgICBVc2luZyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQgdGhlIHByb3h5IGhhcyB0aGUgc2FtZSAgZWZmZWN0ICBhc1xuIgorIiAgICAgICB1c2luZyB0aGUgLS1wcm94eSBvcHRpb24uXG4iCisiXG4iCisiICAgICAgIGh0dHBfcHJveHkgW3Byb3RvY29sOi8vXTxob3N0Pls6cG9ydF1cbiIKKyIgICAgICAgICAgICAgIFNldHMgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yIEhUVFAuXG4iCisiICAgICAgIEhUVFBTX1BST1hZIFtwcm90b2NvbDovL108aG9zdD5bOnBvcnRdXG4iCisiICAgICAgICAgICAgICBTZXRzIHRoZSBwcm94eSBzZXJ2ZXIgdG8gdXNlIGZvciBIVFRQUy5cbiIKKyJcbiIKKyIgICAgICAgW3VybC1wcm90b2NvbF1fUFJPWFkgW3Byb3RvY29sOi8vXTxob3N0Pls6cG9ydF1cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIFNldHMgIHRoZSBwcm94eSBzZXJ2ZXIgdG8gdXNlIGZvciBbdXJsLXByb3RvY29sXSwgd2hlcmUgdGhlIHByby1cbiIKKyIgICAgICAgICAgICAgIHRvY29sIGlzIGEgcHJvdG9jb2wgdGhhdCBjdXJsIHN1cHBvcnRzIGFuZCAgYXMgIHNwZWNpZmllZCAgaW4gIGFcbiIKKyIgICAgICAgICAgICAgIFVSTC4gRlRQLCBGVFBTLCBQT1AzLCBJTUFQLCBTTVRQLCBMREFQIGV0Yy5cbiIKKyJcbiIKKyIgICAgICAgQUxMX1BST1hZIFtwcm90b2NvbDovL108aG9zdD5bOnBvcnRdXG4iCisiICAgICAgICAgICAgICBTZXRzICB0aGUgIHByb3h5ICBzZXJ2ZXIgdG8gdXNlIGlmIG5vIHByb3RvY29sLXNwZWNpZmljIHByb3h5IGlzXG4iCisiICAgICAgICAgICAgICBzZXQuXG4iCisiXG4iCisiICAgICAgIE5PX1BST1hZIDxjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBob3N0cz5cbiIKKyIgICAgICAgICAgICAgIGxpc3Qgb2YgaG9zdCBuYW1lcyB0aGF0IHNob3VsZG4ndCBnbyB0aHJvdWdoIGFueSBwcm94eS4gIElmICBzZXRcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIHRvIGEgYXN0ZXJpc2sgJyonIG9ubHksIGl0IG1hdGNoZXMgYWxsIGhvc3RzLlxuIgorIlxuIgorIlBST1hZIFBST1RPQ09MIFBSRUZJWEVTXG4iCisiICAgICAgIFNpbmNlICBjdXJsICB2ZXJzaW9uICA3LjIxLjcsICB0aGUgcHJveHkgc3RyaW5nIG1heSBiZSBzcGVjaWZpZWQgd2l0aCBhXG4iCisiICAgICAgIHByb3RvY29sOi8vIHByZWZpeCB0byBzcGVjaWZ5IGFsdGVybmF0aXZlIHByb3h5IHByb3RvY29scy5cbiIKKyJcbiIKKyIgICAgICAgSWYgbm8gcHJvdG9jb2wgaXMgc3BlY2lmaWVkIGluICB0aGUgIHByb3h5ICBzdHJpbmcgIG9yICBpZiAgdGhlICBzdHJpbmdcbiIKKyIgICAgICAgZG9lc24ndCAgbWF0Y2ggIGEgIHN1cHBvcnRlZCAgb25lLCAgdGhlIHByb3h5IHdpbGwgYmUgdHJlYXRlZCBhcyBhIEhUVFBcbiIKKyIgICAgICAgcHJveHkuXG4iCisiXG4iCisiICAgICAgIFRoZSBzdXBwb3J0ZWQgcHJveHkgcHJvdG9jb2wgcHJlZml4ZXMgYXJlIGFzIGZvbGxvd3M6XG4iCisiXG4iCisiICAgICAgIHNvY2tzNDovL1xuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgICAgICAgTWFrZXMgaXQgdGhlIGVxdWl2YWxlbnQgb2YgLS1zb2NrczRcbiIKKyJcbiIKKyIgICAgICAgc29ja3M0YTovL1xuIgorIiAgICAgICAgICAgICAgTWFrZXMgaXQgdGhlIGVxdWl2YWxlbnQgb2YgLS1zb2NrczRhXG4iCisiXG4iCisiICAgICAgIHNvY2tzNTovL1xuIgorIiAgICAgICAgICAgICAgTWFrZXMgaXQgdGhlIGVxdWl2YWxlbnQgb2YgLS1zb2NrczVcbiIKKyJcbiIKKyIgICAgICAgc29ja3M1aDovL1xuIgorIiAgICAgICAgICAgICAgTWFrZXMgaXQgdGhlIGVxdWl2YWxlbnQgb2YgLS1zb2NrczUtaG9zdG5hbWVcbiIKKyJcbiIKKyJFWElUIENPREVTXG4iCisiICAgICAgIFRoZXJlIGFyZSBhIGJ1bmNoIG9mIGRpZmZlcmVudCAgZXJyb3IgIGNvZGVzICBhbmQgIHRoZWlyICBjb3JyZXNwb25kaW5nXG4iCisiICAgICAgIGVycm9yICBtZXNzYWdlcyAgdGhhdCAgbWF5IGFwcGVhciBkdXJpbmcgYmFkIGNvbmRpdGlvbnMuIEF0IHRoZSB0aW1lIG9mXG4iCisiICAgICAgIHRoaXMgd3JpdGluZywgdGhlIGV4aXQgY29kZXMgYXJlOlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAxICAgICAgVW5zdXBwb3J0ZWQgcHJvdG9jb2wuIFRoaXMgYnVpbGQgb2YgY3VybCBoYXMgbm8gc3VwcG9ydCBmb3IgdGhpc1xuIgorIiAgICAgICAgICAgICAgcHJvdG9jb2wuXG4iCisiXG4iCisiICAgICAgIDIgICAgICBGYWlsZWQgdG8gaW5pdGlhbGl6ZS5cbiIKKyJcbiIKKyIgICAgICAgMyAgICAgIFVSTCBtYWxmb3JtZWQuIFRoZSBzeW50YXggd2FzIG5vdCBjb3JyZWN0LlxuIgorIlxuIgorIiAgICAgICA0ICAgICAgQSAgZmVhdHVyZSAgb3IgIG9wdGlvbiAgdGhhdCAgd2FzICBuZWVkZWQgdG8gcGVyZm9ybSB0aGUgZGVzaXJlZFxuIgorIiAgICAgICAgICAgICAgcmVxdWVzdCB3YXMgbm90IGVuYWJsZWQgb3Igd2FzICBleHBsaWNpdGx5ICBkaXNhYmxlZCAgYXQgIGJ1aWxkLVxuIgorIiAgICAgICAgICAgICAgdGltZS4gIFRvICBtYWtlICBjdXJsIGFibGUgdG8gZG8gdGhpcywgeW91IHByb2JhYmx5IG5lZWQgYW5vdGhlclxuIgorIiAgICAgICAgICAgICAgYnVpbGQgb2YgbGliY3VybCFcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgNSAgICAgIENvdWxkbid0IHJlc29sdmUgcHJveHkuICBUaGUgIGdpdmVuICBwcm94eSAgaG9zdCAgY291bGQgIG5vdCAgYmVcbiIKKyIgICAgICAgICAgICAgIHJlc29sdmVkLlxuIgorIlxuIgorIiAgICAgICA2ICAgICAgQ291bGRuJ3QgcmVzb2x2ZSBob3N0LiBUaGUgZ2l2ZW4gcmVtb3RlIGhvc3Qgd2FzIG5vdCByZXNvbHZlZC5cbiIKKyJcbiIKKyIgICAgICAgNyAgICAgIEZhaWxlZCB0byBjb25uZWN0IHRvIGhvc3QuXG4iCisiXG4iCisiICAgICAgIDggICAgICBGVFAgIHdlaXJkICBzZXJ2ZXIgIHJlcGx5LiAgVGhlICBzZXJ2ZXIgIHNlbnQgZGF0YSBjdXJsIGNvdWxkbid0XG4iCisiICAgICAgICAgICAgICBwYXJzZS5cbiIKKyJcbiIKKyIgICAgICAgOSAgICAgIEZUUCBhY2Nlc3MgZGVuaWVkLiBUaGUgc2VydmVyIGRlbmllZCBsb2dpbiBvciBkZW5pZWQgIGFjY2VzcyAgdG9cbiIKKyIgICAgICAgICAgICAgIHRoZSAgcGFydGljdWxhciAgcmVzb3VyY2Ugb3IgZGlyZWN0b3J5IHlvdSB3YW50ZWQgdG8gcmVhY2guIE1vc3RcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgICAgICAgIG9mdGVuIHlvdSB0cmllZCB0byBjaGFuZ2UgdG8gYSBkaXJlY3RvcnkgdGhhdCBkb2Vzbid0ICBleGlzdCAgb25cbiIKKyIgICAgICAgICAgICAgIHRoZSBzZXJ2ZXIuXG4iCisiXG4iCisiICAgICAgIDExICAgICBGVFAgIHdlaXJkIFBBU1MgcmVwbHkuIEN1cmwgY291bGRuJ3QgcGFyc2UgdGhlIHJlcGx5IHNlbnQgdG8gdGhlXG4iCisiICAgICAgICAgICAgICBQQVNTIHJlcXVlc3QuXG4iCisiXG4iCisiICAgICAgIDEzICAgICBGVFAgd2VpcmQgUEFTViByZXBseSwgQ3VybCBjb3VsZG4ndCBwYXJzZSB0aGUgcmVwbHkgc2VudCB0byAgdGhlXG4iCisiICAgICAgICAgICAgICBQQVNWIHJlcXVlc3QuXG4iCisiXG4iCisiICAgICAgIDE0ICAgICBGVFAgIHdlaXJkICAyMjcgIGZvcm1hdC4gIEN1cmwgIGNvdWxkbid0ICBwYXJzZSB0aGUgMjI3LWxpbmUgdGhlXG4iCisiICAgICAgICAgICAgICBzZXJ2ZXIgc2VudC5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgMTUgICAgIEZUUCBjYW4ndCBnZXQgaG9zdC4gQ291bGRuJ3QgcmVzb2x2ZSB0aGUgaG9zdCBJUCB3ZSBnb3QgIGluICB0aGVcbiIKKyIgICAgICAgICAgICAgIDIyNy1saW5lLlxuIgorIlxuIgorIiAgICAgICAxNyAgICAgRlRQICBjb3VsZG4ndCAgc2V0ICBiaW5hcnkuICBDb3VsZG4ndCAgY2hhbmdlIHRyYW5zZmVyIG1ldGhvZCB0b1xuIgorIiAgICAgICAgICAgICAgYmluYXJ5LlxuIgorIlxuIgorIiAgICAgICAxOCAgICAgUGFydGlhbCBmaWxlLiBPbmx5IGEgcGFydCBvZiB0aGUgZmlsZSB3YXMgdHJhbnNmZXJyZWQuXG4iCisiXG4iCisiICAgICAgIDE5ICAgICBGVFAgY291bGRuJ3QgZG93bmxvYWQvYWNjZXNzIHRoZSBnaXZlbiBmaWxlLCB0aGUgUkVUUiAob3IgIHNpbWktXG4iCisiICAgICAgICAgICAgICBsYXIpIGNvbW1hbmQgZmFpbGVkLlxuIgorIlxuIgorIiAgICAgICAyMSAgICAgRlRQIHF1b3RlIGVycm9yLiBBIHF1b3RlIGNvbW1hbmQgcmV0dXJuZWQgZXJyb3IgZnJvbSB0aGUgc2VydmVyLlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAyMiAgICAgSFRUUCAgcGFnZSAgbm90ICByZXRyaWV2ZWQuICBUaGUgIHJlcXVlc3RlZCB1cmwgd2FzIG5vdCBmb3VuZCBvclxuIgorIiAgICAgICAgICAgICAgcmV0dXJuZWQgYW5vdGhlciBlcnJvciB3aXRoIHRoZSBIVFRQIGVycm9yICBjb2RlICBiZWluZyAgNDAwICBvclxuIgorIiAgICAgICAgICAgICAgYWJvdmUuIFRoaXMgcmV0dXJuIGNvZGUgb25seSBhcHBlYXJzIGlmIC1mLCAtLWZhaWwgaXMgdXNlZC5cbiIKKyJcbiIKKyIgICAgICAgMjMgICAgIFdyaXRlICBlcnJvci4gIEN1cmwgY291bGRuJ3Qgd3JpdGUgZGF0YSB0byBhIGxvY2FsIGZpbGVzeXN0ZW0gb3JcbiIKKyIgICAgICAgICAgICAgIHNpbWlsYXIuXG4iCisiXG4iCisiICAgICAgIDI1ICAgICBGVFAgY291bGRuJ3QgU1RPUiBmaWxlLiBUaGUgc2VydmVyIGRlbmllZCAgdGhlICBTVE9SICBvcGVyYXRpb24sXG4iCisiICAgICAgICAgICAgICB1c2VkIGZvciBGVFAgdXBsb2FkaW5nLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAyNiAgICAgUmVhZCBlcnJvci4gVmFyaW91cyByZWFkaW5nIHByb2JsZW1zLlxuIgorIlxuIgorIiAgICAgICAyNyAgICAgT3V0IG9mIG1lbW9yeS4gQSBtZW1vcnkgYWxsb2NhdGlvbiByZXF1ZXN0IGZhaWxlZC5cbiIKKyJcbiIKKyIgICAgICAgMjggICAgIE9wZXJhdGlvbiAgdGltZW91dC4gIFRoZSAgc3BlY2lmaWVkICB0aW1lLW91dCBwZXJpb2Qgd2FzIHJlYWNoZWRcbiIKKyIgICAgICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgY29uZGl0aW9ucy5cbiIKKyJcbiIKKyIgICAgICAgMzAgICAgIEZUUCBQT1JUIGZhaWxlZC4gVGhlIFBPUlQgY29tbWFuZCBmYWlsZWQuIE5vdCAgYWxsICBGVFAgIHNlcnZlcnNcbiIKKyIgICAgICAgICAgICAgIHN1cHBvcnQgIHRoZSAgUE9SVCAgY29tbWFuZCwgIHRyeSAgZG9pbmcgIGEgIHRyYW5zZmVyIHVzaW5nIFBBU1ZcbiIKKyIgICAgICAgICAgICAgIGluc3RlYWQhXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgIDMxICAgICBGVFAgY291bGRuJ3QgdXNlIFJFU1QuIFRoZSBSRVNUIGNvbW1hbmQgZmFpbGVkLiBUaGlzIGNvbW1hbmQgIGlzXG4iCisiICAgICAgICAgICAgICB1c2VkIGZvciByZXN1bWVkIEZUUCB0cmFuc2ZlcnMuXG4iCisiXG4iCisiICAgICAgIDMzICAgICBIVFRQIHJhbmdlIGVycm9yLiBUaGUgcmFuZ2UgXCJjb21tYW5kXCIgZGlkbid0IHdvcmsuXG4iCisiXG4iCisiICAgICAgIDM0ICAgICBIVFRQIHBvc3QgZXJyb3IuIEludGVybmFsIHBvc3QtcmVxdWVzdCBnZW5lcmF0aW9uIGVycm9yLlxuIgorIlxuIgorIiAgICAgICAzNSAgICAgU1NMIGNvbm5lY3QgZXJyb3IuIFRoZSBTU0wgaGFuZHNoYWtpbmcgZmFpbGVkLlxuIgorIlxuIgorIiAgICAgICAzNiAgICAgRlRQICBiYWQgIGRvd25sb2FkICByZXN1bWUuIENvdWxkbid0IGNvbnRpbnVlIGFuIGVhcmxpZXIgYWJvcnRlZFxuIgorIiAgICAgICAgICAgICAgZG93bmxvYWQuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgIDM3ICAgICBGSUxFIGNvdWxkbid0IHJlYWQgZmlsZS4gRmFpbGVkIHRvIG9wZW4gdGhlIGZpbGUuIFBlcm1pc3Npb25zP1xuIgorIlxuIgorIiAgICAgICAzOCAgICAgTERBUCBjYW5ub3QgYmluZC4gTERBUCBiaW5kIG9wZXJhdGlvbiBmYWlsZWQuXG4iCisiXG4iCisiICAgICAgIDM5ICAgICBMREFQIHNlYXJjaCBmYWlsZWQuXG4iCisiXG4iCisiICAgICAgIDQxICAgICBGdW5jdGlvbiBub3QgZm91bmQuIEEgcmVxdWlyZWQgTERBUCBmdW5jdGlvbiB3YXMgbm90IGZvdW5kLlxuIgorIlxuIgorIiAgICAgICA0MiAgICAgQWJvcnRlZCBieSBjYWxsYmFjay4gQW4gYXBwbGljYXRpb24gdG9sZCBjdXJsIHRvIGFib3J0IHRoZSBvcGVyLVxuIgorIiAgICAgICAgICAgICAgYXRpb24uXG4iCisiXG4iCisiICAgICAgIDQzICAgICBJbnRlcm5hbCBlcnJvci4gQSBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGggYSBiYWQgcGFyYW1ldGVyLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICA0NSAgICAgSW50ZXJmYWNlICBlcnJvci4gIEEgIHNwZWNpZmllZCAgb3V0Z29pbmcgaW50ZXJmYWNlIGNvdWxkIG5vdCBiZVxuIgorIiAgICAgICAgICAgICAgdXNlZC5cbiIKKyJcbiIKKyIgICAgICAgNDcgICAgIFRvbyBtYW55IHJlZGlyZWN0cy4gV2hlbiBmb2xsb3dpbmcgcmVkaXJlY3RzLCBjdXJsIGhpdCB0aGUgbWF4aS1cbiIKKyIgICAgICAgICAgICAgIG11bSBhbW91bnQuXG4iCisiXG4iCisiICAgICAgIDQ4ICAgICBVbmtub3duICBvcHRpb24gIHNwZWNpZmllZCAgdG8gIGxpYmN1cmwuIFRoaXMgaW5kaWNhdGVzIHRoYXQgeW91XG4iCisiICAgICAgICAgICAgICBwYXNzZWQgYSB3ZWlyZCBvcHRpb24gdG8gY3VybCB0aGF0IHdhcyBwYXNzZWQgb24gdG8gbGliY3VybCAgYW5kXG4iCisiICAgICAgICAgICAgICByZWplY3RlZC4gUmVhZCB1cCBpbiB0aGUgbWFudWFsIVxuIgorIlxuIgorIiAgICAgICA0OSAgICAgTWFsZm9ybWVkIHRlbG5ldCBvcHRpb24uXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgIDUxICAgICBUaGUgcGVlcidzIFNTTCBjZXJ0aWZpY2F0ZSBvciBTU0ggTUQ1IGZpbmdlcnByaW50IHdhcyBub3QgT0suXG4iCisiXG4iCisiICAgICAgIDUyICAgICBUaGUgIHNlcnZlciAgZGlkbid0ICByZXBseSBhbnl0aGluZywgd2hpY2ggaGVyZSBpcyBjb25zaWRlcmVkIGFuXG4iCisiICAgICAgICAgICAgICBlcnJvci5cbiIKKyJcbiIKKyIgICAgICAgNTMgICAgIFNTTCBjcnlwdG8gZW5naW5lIG5vdCBmb3VuZC5cbiIKKyJcbiIKKyIgICAgICAgNTQgICAgIENhbm5vdCBzZXQgU1NMIGNyeXB0byBlbmdpbmUgYXMgZGVmYXVsdC5cbiIKKyJcbiIKKyIgICAgICAgNTUgICAgIEZhaWxlZCBzZW5kaW5nIG5ldHdvcmsgZGF0YS5cbiIKKyJcbiIKKyIgICAgICAgNTYgICAgIEZhaWx1cmUgaW4gcmVjZWl2aW5nIG5ldHdvcmsgZGF0YS5cbiIKKyJcbiIKKyIgICAgICAgNTggICAgIFByb2JsZW0gd2l0aCB0aGUgbG9jYWwgY2VydGlmaWNhdGUuXG4iCisiXG4iCisiICAgICAgIDU5ICAgICBDb3VsZG4ndCB1c2Ugc3BlY2lmaWVkIFNTTCBjaXBoZXIuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgIDYwICAgICBQZWVyIGNlcnRpZmljYXRlIGNhbm5vdCBiZSBhdXRoZW50aWNhdGVkIHdpdGgga25vd24gQ0EgIGNlcnRpZmktXG4iCisiICAgICAgICAgICAgICBjYXRlcy5cbiIKKyJcbiIKKyIgICAgICAgNjEgICAgIFVucmVjb2duaXplZCB0cmFuc2ZlciBlbmNvZGluZy5cbiIKKyJcbiIKKyIgICAgICAgNjIgICAgIEludmFsaWQgTERBUCBVUkwuXG4iCisiXG4iCisiICAgICAgIDYzICAgICBNYXhpbXVtIGZpbGUgc2l6ZSBleGNlZWRlZC5cbiIKKyJcbiIKKyIgICAgICAgNjQgICAgIFJlcXVlc3RlZCBGVFAgU1NMIGxldmVsIGZhaWxlZC5cbiIKKyJcbiIKKyIgICAgICAgNjUgICAgIFNlbmRpbmcgdGhlIGRhdGEgcmVxdWlyZXMgYSByZXdpbmQgdGhhdCBmYWlsZWQuXG4iCisiXG4iCisiICAgICAgIDY2ICAgICBGYWlsZWQgdG8gaW5pdGlhbGlzZSBTU0wgRW5naW5lLlxuIgorIlxuIgorIiAgICAgICA2NyAgICAgVGhlICB1c2VyICBuYW1lLCAgcGFzc3dvcmQsIG9yIHNpbWlsYXIgd2FzIG5vdCBhY2NlcHRlZCBhbmQgY3VybFxuIgorIiAgICAgICAgICAgICAgZmFpbGVkIHRvIGxvZyBpbi5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgNjggICAgIEZpbGUgbm90IGZvdW5kIG9uIFRGVFAgc2VydmVyLlxuIgorIlxuIgorIiAgICAgICA2OSAgICAgUGVybWlzc2lvbiBwcm9ibGVtIG9uIFRGVFAgc2VydmVyLlxuIgorIlxuIgorIiAgICAgICA3MCAgICAgT3V0IG9mIGRpc2sgc3BhY2Ugb24gVEZUUCBzZXJ2ZXIuXG4iCisiXG4iCisiICAgICAgIDcxICAgICBJbGxlZ2FsIFRGVFAgb3BlcmF0aW9uLlxuIgorIlxuIgorIiAgICAgICA3MiAgICAgVW5rbm93biBURlRQIHRyYW5zZmVyIElELlxuIgorIlxuIgorIiAgICAgICA3MyAgICAgRmlsZSBhbHJlYWR5IGV4aXN0cyAoVEZUUCkuXG4iCisiXG4iCisiICAgICAgIDc0ICAgICBObyBzdWNoIHVzZXIgKFRGVFApLlxuIgorIlxuIgorIiAgICAgICA3NSAgICAgQ2hhcmFjdGVyIGNvbnZlcnNpb24gZmFpbGVkLlxuIgorIlxuIgorIiAgICAgICA3NiAgICAgQ2hhcmFjdGVyIGNvbnZlcnNpb24gZnVuY3Rpb25zIHJlcXVpcmVkLlxuIgorIlxuIgorIiAgICAgICA3NyAgICAgUHJvYmxlbSB3aXRoIHJlYWRpbmcgdGhlIFNTTCBDQSBjZXJ0IChwYXRoPyBhY2Nlc3MgcmlnaHRzPykuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgIDc4ICAgICBUaGUgcmVzb3VyY2UgcmVmZXJlbmNlZCBpbiB0aGUgVVJMIGRvZXMgbm90IGV4aXN0LlxuIgorIlxuIgorIiAgICAgICA3OSAgICAgQW4gdW5zcGVjaWZpZWQgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZSBTU0ggc2Vzc2lvbi5cbiIKKyJcbiIKKyIgICAgICAgODAgICAgIEZhaWxlZCB0byBzaHV0IGRvd24gdGhlIFNTTCBjb25uZWN0aW9uLlxuIgorIlxuIgorIiAgICAgICA4MiAgICAgQ291bGQgbm90IGxvYWQgQ1JMIGZpbGUsICBtaXNzaW5nICBvciAgd3JvbmcgIGZvcm1hdCAgKGFkZGVkICBpblxuIgorIiAgICAgICAgICAgICAgNy4xOS4wKS5cbiIKKyJcbiIKKyIgICAgICAgODMgICAgIElzc3VlciBjaGVjayBmYWlsZWQgKGFkZGVkIGluIDcuMTkuMCkuXG4iCisiXG4iCisiICAgICAgIDg0ICAgICBUaGUgRlRQIFBSRVQgY29tbWFuZCBmYWlsZWRcbiIKKyJcbiIKKyIgICAgICAgODUgICAgIFJUU1A6IG1pc21hdGNoIG9mIENTZXEgbnVtYmVyc1xuIgorIlxuIgorIiAgICAgICA4NiAgICAgUlRTUDogbWlzbWF0Y2ggb2YgU2Vzc2lvbiBJZGVudGlmaWVyc1xuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICA4NyAgICAgdW5hYmxlIHRvIHBhcnNlIEZUUCBmaWxlIGxpc3RcbiIKKyJcbiIKKyIgICAgICAgODggICAgIEZUUCBjaHVuayBjYWxsYmFjayByZXBvcnRlZCBlcnJvclxuIgorIlxuIgorIiAgICAgICBYWCAgICAgTW9yZSBlcnJvciBjb2RlcyB3aWxsIGFwcGVhciBoZXJlIGluIGZ1dHVyZSByZWxlYXNlcy4gVGhlIGV4aXN0LVxuIgorIiAgICAgICAgICAgICAgaW5nIG9uZXMgYXJlIG1lYW50IHRvIG5ldmVyIGNoYW5nZS5cbiIKKyJcbiIKKyJBVVRIT1JTIC8gQ09OVFJJQlVUT1JTXG4iCisiICAgICAgIERhbmllbCBTdGVuYmVyZyBpcyB0aGUgbWFpbiBhdXRob3IsIGJ1dCB0aGUgd2hvbGUgbGlzdCBvZiAgY29udHJpYnV0b3JzXG4iCisiICAgICAgIGlzIGZvdW5kIGluIHRoZSBzZXBhcmF0ZSBUSEFOS1MgZmlsZS5cbiIKKyJcbiIKKyJXV1dcbiIKKyIgICAgICAgaHR0cDovL2N1cmwuaGF4eC5zZVxuIgorIlxuIgorIkZUUFxuIgorIiAgICAgICBmdHA6Ly9mdHAuc3VuZXQuc2UvcHViL3d3dy91dGlsaXRpZXMvY3VybC9cbiIKKyJcbiIKKyJTRUUgQUxTT1xuIgorIiAgICAgICBmdHAoMSksIHdnZXQoMSlcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyJMQVRFU1QgVkVSU0lPTlxuIgorIlxuIgorIiAgWW91IGFsd2F5cyBmaW5kIG5ld3MgYWJvdXQgd2hhdCdzIGdvaW5nIG9uIGFzIHdlbGwgYXMgdGhlIGxhdGVzdCB2ZXJzaW9uc1xuIgorIiAgZnJvbSB0aGUgY3VybCB3ZWIgcGFnZXMsIGxvY2F0ZWQgYXQ6XG4iCisiXG4iCisiICAgICAgICBodHRwOi8vY3VybC5oYXh4LnNlXG4iCisiXG4iCisiU0lNUExFIFVTQUdFXG4iCisiXG4iCisiICBHZXQgdGhlIG1haW4gcGFnZSBmcm9tIE5ldHNjYXBlJ3Mgd2ViLXNlcnZlcjpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgaHR0cDovL3d3dy5uZXRzY2FwZS5jb20vXG4iCisiXG4iCisiICBHZXQgdGhlIFJFQURNRSBmaWxlIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgYXQgZnVuZXQncyBmdHAtc2VydmVyOlxuIgorIlxuIgorIiAgICAgICAgY3VybCBmdHA6Ly9mdHAuZnVuZXQuZmkvUkVBRE1FXG4iCisiXG4iCisiICBHZXQgYSB3ZWIgcGFnZSBmcm9tIGEgc2VydmVyIHVzaW5nIHBvcnQgODAwMDpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgaHR0cDovL3d3dy53ZWlyZHNlcnZlci5jb206ODAwMC9cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIEdldCBhIGxpc3Qgb2YgYSBkaXJlY3Rvcnkgb2YgYW4gRlRQIHNpdGU6XG4iCisiXG4iCisiICAgICAgICBjdXJsIGZ0cDovL2Nvb2wuaGF4eC5zZS9cbiIKKyJcbiIKKyIgIEdldCB0aGUgZGVmaW5pdGlvbiBvZiBjdXJsIGZyb20gYSBkaWN0aW9uYXJ5OlxuIgorIlxuIgorIiAgICAgICAgY3VybCBkaWN0Oi8vZGljdC5vcmcvbTpjdXJsXG4iCisiXG4iCisiICBGZXRjaCB0d28gZG9jdW1lbnRzIGF0IG9uY2U6XG4iCisiXG4iCisiICAgICAgICBjdXJsIGZ0cDovL2Nvb2wuaGF4eC5zZS8gaHR0cDovL3d3dy53ZWlyZHNlcnZlci5jb206ODAwMC9cbiIKKyJcbiIKKyIgIEdldCBhIGZpbGUgb2ZmIGFuIEZUUFMgc2VydmVyOlxuIgorIlxuIgorIiAgICAgICAgY3VybCBmdHBzOi8vZmlsZXMuYXJlLnNlY3VyZS5jb20vc2VjcmV0cy50eHRcbiIKKyJcbiIKKyIgIG9yIHVzZSB0aGUgbW9yZSBhcHByb3ByaWF0ZSBGVFBTIHdheSB0byBnZXQgdGhlIHNhbWUgZmlsZTpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLS1mdHAtc3NsIGZ0cDovL2ZpbGVzLmFyZS5zZWN1cmUuY29tL3NlY3JldHMudHh0XG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBHZXQgYSBmaWxlIGZyb20gYW4gU1NIIHNlcnZlciB1c2luZyBTRlRQOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtdSB1c2VybmFtZSBzZnRwOi8vc2hlbGwuZXhhbXBsZS5jb20vZXRjL2lzc3VlXG4iCisiXG4iCisiICBHZXQgYSBmaWxlIGZyb20gYW4gU1NIIHNlcnZlciB1c2luZyBTQ1AgdXNpbmcgYSBwcml2YXRlIGtleSB0byBhdXRoZW50aWNhdGU6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC11IHVzZXJuYW1lOiAtLWtleSB+Ly5zc2gvaWRfZHNhIC0tcHVia2V5IH4vLnNzaC9pZF9kc2EucHViIFxcXG4iCisiICAgICAgICAgICAgc2NwOi8vc2hlbGwuZXhhbXBsZS5jb20vfi9wZXJzb25hbC50eHRcbiIKKyJcbiIKKyIgIEdldCB0aGUgbWFpbiBwYWdlIGZyb20gYW4gSVB2NiB3ZWIgc2VydmVyOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtZyBcImh0dHA6Ly9bMjAwMToxODkwOjExMTI6MTo6MjBdL1wiXG4iCisiXG4iCisiRE9XTkxPQUQgVE8gQSBGSUxFXG4iCisiXG4iCisiICBHZXQgYSB3ZWIgcGFnZSBhbmQgc3RvcmUgaW4gYSBsb2NhbCBmaWxlOlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgY3VybCAtbyB0aGF0cGFnZS5odG1sIGh0dHA6Ly93d3cubmV0c2NhcGUuY29tL1xuIgorIlxuIgorIiAgR2V0IGEgd2ViIHBhZ2UgYW5kIHN0b3JlIGluIGEgbG9jYWwgZmlsZSwgbWFrZSB0aGUgbG9jYWwgZmlsZSBnZXQgdGhlIG5hbWVcbiIKKyIgIG9mIHRoZSByZW1vdGUgZG9jdW1lbnQgKGlmIG5vIGZpbGUgbmFtZSBwYXJ0IGlzIHNwZWNpZmllZCBpbiB0aGUgVVJMLCB0aGlzXG4iCisiICB3aWxsIGZhaWwpOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtTyBodHRwOi8vd3d3Lm5ldHNjYXBlLmNvbS9pbmRleC5odG1sXG4iCisiXG4iCisiICBGZXRjaCB0d28gZmlsZXMgYW5kIHN0b3JlIHRoZW0gd2l0aCB0aGVpciByZW1vdGUgbmFtZXM6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC1PIHd3dy5oYXh4LnNlL2luZGV4Lmh0bWwgLU8gY3VybC5oYXh4LnNlL2Rvd25sb2FkLmh0bWxcbiIKKyJcbiIKKyJVU0lORyBQQVNTV09SRFNcbiIKKyJcbiIKKyIgRlRQXG4iCisiXG4iCisiICAgVG8gZnRwIGZpbGVzIHVzaW5nIG5hbWUrcGFzc3dkLCBpbmNsdWRlIHRoZW0gaW4gdGhlIFVSTCBsaWtlOlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgY3VybCBmdHA6Ly9uYW1lOnBhc3N3ZEBtYWNoaW5lLmRvbWFpbjpwb3J0L2Z1bGwvcGF0aC90by9maWxlXG4iCisiXG4iCisiICAgb3Igc3BlY2lmeSB0aGVtIHdpdGggdGhlIC11IGZsYWcgbGlrZVxuIgorIlxuIgorIiAgICAgICAgY3VybCAtdSBuYW1lOnBhc3N3ZCBmdHA6Ly9tYWNoaW5lLmRvbWFpbjpwb3J0L2Z1bGwvcGF0aC90by9maWxlXG4iCisiXG4iCisiIEZUUFNcbiIKKyJcbiIKKyIgICBJdCBpcyBqdXN0IGxpa2UgZm9yIEZUUCwgYnV0IHlvdSBtYXkgYWxzbyB3YW50IHRvIHNwZWNpZnkgYW5kIHVzZVxuIgorIiAgIFNTTC1zcGVjaWZpYyBvcHRpb25zIGZvciBjZXJ0aWZpY2F0ZXMgZXRjLlxuIgorIlxuIgorIiAgIE5vdGUgdGhhdCB1c2luZyBGVFBTOi8vIGFzIHByZWZpeCBpcyB0aGUgXCJpbXBsaWNpdFwiIHdheSBhcyBkZXNjcmliZWQgaW4gdGhlXG4iCisiICAgc3RhbmRhcmRzIHdoaWxlIHRoZSByZWNvbW1lbmRlZCBcImV4cGxpY2l0XCIgd2F5IGlzIGRvbmUgYnkgdXNpbmcgRlRQOi8vIGFuZFxuIgorIiAgIHRoZSAtLWZ0cC1zc2wgb3B0aW9uLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiBTRlRQIC8gU0NQXG4iCisiXG4iCisiICAgVGhpcyBpcyBzaW1pbGFyIHRvIEZUUCwgYnV0IHlvdSBjYW4gc3BlY2lmeSBhIHByaXZhdGUga2V5IHRvIHVzZSBpbnN0ZWFkIG9mXG4iCisiICAgYSBwYXNzd29yZC4gTm90ZSB0aGF0IHRoZSBwcml2YXRlIGtleSBtYXkgaXRzZWxmIGJlIHByb3RlY3RlZCBieSBhIHBhc3N3b3JkXG4iCisiICAgdGhhdCBpcyB1bnJlbGF0ZWQgdG8gdGhlIGxvZ2luIHBhc3N3b3JkIG9mIHRoZSByZW1vdGUgc3lzdGVtLiAgSWYgeW91XG4iCisiICAgcHJvdmlkZSBhIHByaXZhdGUga2V5IGZpbGUgeW91IG11c3QgYWxzbyBwcm92aWRlIGEgcHVibGljIGtleSBmaWxlLlxuIgorIlxuIgorIiBIVFRQXG4iCisiXG4iCisiICAgQ3VybCBhbHNvIHN1cHBvcnRzIHVzZXIgYW5kIHBhc3N3b3JkIGluIEhUVFAgVVJMcywgdGh1cyB5b3UgY2FuIHBpY2sgYSBmaWxlXG4iCisiICAgbGlrZTpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgaHR0cDovL25hbWU6cGFzc3dkQG1hY2hpbmUuZG9tYWluL2Z1bGwvcGF0aC90by9maWxlXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgb3Igc3BlY2lmeSB1c2VyIGFuZCBwYXNzd29yZCBzZXBhcmF0ZWx5IGxpa2UgaW5cbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLXUgbmFtZTpwYXNzd2QgaHR0cDovL21hY2hpbmUuZG9tYWluL2Z1bGwvcGF0aC90by9maWxlXG4iCisiXG4iCisiICAgSFRUUCBvZmZlcnMgbWFueSBkaWZmZXJlbnQgbWV0aG9kcyBvZiBhdXRoZW50aWNhdGlvbiBhbmQgY3VybCBzdXBwb3J0c1xuIgorIiAgIHNldmVyYWw6IEJhc2ljLCBEaWdlc3QsIE5UTE0gYW5kIE5lZ290aWF0ZS4gV2l0aG91dCB0ZWxsaW5nIHdoaWNoIG1ldGhvZCB0b1xuIgorIiAgIHVzZSwgY3VybCBkZWZhdWx0cyB0byBCYXNpYy4gWW91IGNhbiBhbHNvIGFzayBjdXJsIHRvIHBpY2sgdGhlIG1vc3Qgc2VjdXJlXG4iCisiICAgb25lcyBvdXQgb2YgdGhlIG9uZXMgdGhhdCB0aGUgc2VydmVyIGFjY2VwdHMgZm9yIHRoZSBnaXZlbiBVUkwsIGJ5IHVzaW5nXG4iCisiICAgLS1hbnlhdXRoLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgIE5PVEUhIFNpbmNlIEhUVFAgVVJMcyBkb24ndCBzdXBwb3J0IHVzZXIgYW5kIHBhc3N3b3JkLCB5b3UgY2FuJ3QgdXNlIHRoYXRcbiIKKyIgICBzdHlsZSB3aGVuIHVzaW5nIEN1cmwgdmlhIGEgcHJveHkuIFlvdSBfbXVzdF8gdXNlIHRoZSAtdSBzdHlsZSBmZXRjaFxuIgorIiAgIGR1cmluZyBzdWNoIGNpcmN1bXN0YW5jZXMuXG4iCisiXG4iCisiIEhUVFBTXG4iCisiXG4iCisiICAgUHJvYmFibHkgbW9zdCBjb21tb25seSB1c2VkIHdpdGggcHJpdmF0ZSBjZXJ0aWZpY2F0ZXMsIGFzIGV4cGxhaW5lZCBiZWxvdy5cbiIKKyJcbiIKKyJQUk9YWVxuIgorIlxuIgorIiBjdXJsIHN1cHBvcnRzIGJvdGggSFRUUCBhbmQgU09DS1MgcHJveHkgc2VydmVycywgd2l0aCBvcHRpb25hbCBhdXRoZW50aWNhdGlvbi5cbiIKKyIgSXQgZG9lcyBub3QgaGF2ZSBzcGVjaWFsIHN1cHBvcnQgZm9yIEZUUCBwcm94eSBzZXJ2ZXJzIHNpbmNlIHRoZXJlIGFyZSBub1xuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiBzdGFuZGFyZHMgZm9yIHRob3NlLCBidXQgaXQgY2FuIHN0aWxsIGJlIG1hZGUgdG8gd29yayB3aXRoIG1hbnkgb2YgdGhlbS4gWW91XG4iCisiIGNhbiBhbHNvIHVzZSBib3RoIEhUVFAgYW5kIFNPQ0tTIHByb3hpZXMgdG8gdHJhbnNmZXIgZmlsZXMgdG8gYW5kIGZyb20gRlRQXG4iCisiIHNlcnZlcnMuXG4iCisiXG4iCisiIEdldCBhbiBmdHAgZmlsZSB1c2luZyBhbiBIVFRQIHByb3h5IG5hbWVkIG15LXByb3h5IHRoYXQgdXNlcyBwb3J0IDg4ODpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLXggbXktcHJveHk6ODg4IGZ0cDovL2Z0cC5sZWFjaHNpdGUuY29tL1JFQURNRVxuIgorIlxuIgorIiBHZXQgYSBmaWxlIGZyb20gYSBIVFRQIHNlcnZlciB0aGF0IHJlcXVpcmVzIHVzZXIgYW5kIHBhc3N3b3JkLCB1c2luZyB0aGVcbiIKKyIgc2FtZSBwcm94eSBhcyBhYm92ZTpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLXUgdXNlcjpwYXNzd2QgLXggbXktcHJveHk6ODg4IGh0dHA6Ly93d3cuZ2V0LnRoaXMvXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiIFNvbWUgcHJveGllcyByZXF1aXJlIHNwZWNpYWwgYXV0aGVudGljYXRpb24uIFNwZWNpZnkgYnkgdXNpbmcgLVUgYXMgYWJvdmU6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC1VIHVzZXI6cGFzc3dkIC14IG15LXByb3h5Ojg4OCBodHRwOi8vd3d3LmdldC50aGlzL1xuIgorIlxuIgorIiBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGhvc3RzIGFuZCBkb21haW5zIHdoaWNoIGRvIG5vdCB1c2UgdGhlIHByb3h5IGNhblxuIgorIiBiZSBzcGVjaWZpZWQgYXM6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC0tbm9wcm94eSBsb2NhbGhvc3QsZ2V0LnRoaXMgLXggbXktcHJveHk6ODg4IGh0dHA6Ly93d3cuZ2V0LnRoaXMvXG4iCisiXG4iCisiIElmIHRoZSBwcm94eSBpcyBzcGVjaWZpZWQgd2l0aCAtLXByb3h5MS4wIGluc3RlYWQgb2YgLS1wcm94eSBvciAteCwgdGhlblxuIgorIiBjdXJsIHdpbGwgdXNlIEhUVFAvMS4wIGluc3RlYWQgb2YgSFRUUC8xLjEgZm9yIGFueSBDT05ORUNUIGF0dGVtcHRzLlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiBjdXJsIGFsc28gc3VwcG9ydHMgU09DS1M0IGFuZCBTT0NLUzUgcHJveGllcyB3aXRoIC0tc29ja3M0IGFuZCAtLXNvY2tzNS5cbiIKKyJcbiIKKyIgU2VlIGFsc28gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBDdXJsIHN1cHBvcnRzIHRoYXQgb2ZmZXIgZnVydGhlciBwcm94eVxuIgorIiBjb250cm9sLlxuIgorIlxuIgorIiBNb3N0IEZUUCBwcm94eSBzZXJ2ZXJzIGFyZSBzZXQgdXAgdG8gYXBwZWFyIGFzIGEgbm9ybWFsIEZUUCBzZXJ2ZXIgZnJvbSB0aGVcbiIKKyIgY2xpZW50J3MgcGVyc3BlY3RpdmUsIHdpdGggc3BlY2lhbCBjb21tYW5kcyB0byBzZWxlY3QgdGhlIHJlbW90ZSBGVFAgc2VydmVyLlxuIgorIiBjdXJsIHN1cHBvcnRzIHRoZSAtdSwgLVEgYW5kIC0tZnRwLWFjY291bnQgb3B0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvXG4iCisiIHNldCB1cCB0cmFuc2ZlcnMgdGhyb3VnaCBtYW55IEZUUCBwcm94aWVzLiBGb3IgZXhhbXBsZSwgYSBmaWxlIGNhbiBiZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiB1cGxvYWRlZCB0byBhIHJlbW90ZSBGVFAgc2VydmVyIHVzaW5nIGEgQmx1ZSBDb2F0IEZUUCBwcm94eSB3aXRoIHRoZVxuIgorIiBvcHRpb25zOlxuIgorIlxuIgorIiAgIGN1cmwgLXUgXCJSZW1vdGUtRlRQLVVzZXJuYW1lQHJlbW90ZS5mdHAuc2VydmVyIFByb3h5LVVzZXJuYW1lOlJlbW90ZS1QYXNzXCIgXFxcbiIKKyIgICAgLS1mdHAtYWNjb3VudCBQcm94eS1QYXNzd29yZCAtLXVwbG9hZC1maWxlIGxvY2FsLWZpbGUgXFxcbiIKKyIgICAgZnRwOi8vbXktZnRwLnByb3h5LnNlcnZlcjoyMS9yZW1vdGUvdXBsb2FkL3BhdGgvXG4iCisiXG4iCisiIFNlZSB0aGUgbWFudWFsIGZvciB5b3VyIEZUUCBwcm94eSB0byBkZXRlcm1pbmUgdGhlIGZvcm0gaXQgZXhwZWN0cyB0byBzZXQgdXBcbiIKKyIgdHJhbnNmZXJzLCBhbmQgY3VybCdzIC12IG9wdGlvbiB0byBzZWUgZXhhY3RseSB3aGF0IGN1cmwgaXMgc2VuZGluZy5cbiIKKyJcbiIKKyJSQU5HRVNcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIFdpdGggSFRUUCAxLjEgYnl0ZS1yYW5nZXMgd2VyZSBpbnRyb2R1Y2VkLiBVc2luZyB0aGlzLCBhIGNsaWVudCBjYW4gcmVxdWVzdFxuIgorIiAgdG8gZ2V0IG9ubHkgb25lIG9yIG1vcmUgc3VicGFydHMgb2YgYSBzcGVjaWZpZWQgZG9jdW1lbnQuIEN1cmwgc3VwcG9ydHNcbiIKKyIgIHRoaXMgd2l0aCB0aGUgLXIgZmxhZy5cbiIKKyJcbiIKKyIgIEdldCB0aGUgZmlyc3QgMTAwIGJ5dGVzIG9mIGEgZG9jdW1lbnQ6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC1yIDAtOTkgaHR0cDovL3d3dy5nZXQudGhpcy9cbiIKKyJcbiIKKyIgIEdldCB0aGUgbGFzdCA1MDAgYnl0ZXMgb2YgYSBkb2N1bWVudDpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLXIgLTUwMCBodHRwOi8vd3d3LmdldC50aGlzL1xuIgorIlxuIgorIiAgQ3VybCBhbHNvIHN1cHBvcnRzIHNpbXBsZSByYW5nZXMgZm9yIEZUUCBmaWxlcyBhcyB3ZWxsLiBUaGVuIHlvdSBjYW4gb25seVxuIgorIiAgc3BlY2lmeSBzdGFydCBhbmQgc3RvcCBwb3NpdGlvbi5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIEdldCB0aGUgZmlyc3QgMTAwIGJ5dGVzIG9mIGEgZG9jdW1lbnQgdXNpbmcgRlRQOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtciAwLTk5IGZ0cDovL3d3dy5nZXQudGhpcy9SRUFETUVcbiIKKyJcbiIKKyJVUExPQURJTkdcbiIKKyJcbiIKKyIgRlRQIC8gRlRQUyAvIFNGVFAgLyBTQ1BcbiIKKyJcbiIKKyIgIFVwbG9hZCBhbGwgZGF0YSBvbiBzdGRpbiB0byBhIHNwZWNpZmllZCBzZXJ2ZXI6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC1UIC0gZnRwOi8vZnRwLnVwbG9hZC5jb20vbXlmaWxlXG4iCisiXG4iCisiICBVcGxvYWQgZGF0YSBmcm9tIGEgc3BlY2lmaWVkIGZpbGUsIGxvZ2luIHdpdGggdXNlciBhbmQgcGFzc3dvcmQ6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC1UIHVwbG9hZGZpbGUgLXUgdXNlcjpwYXNzd2QgZnRwOi8vZnRwLnVwbG9hZC5jb20vbXlmaWxlXG4iCisiXG4iCisiICBVcGxvYWQgYSBsb2NhbCBmaWxlIHRvIHRoZSByZW1vdGUgc2l0ZSwgYW5kIHVzZSB0aGUgbG9jYWwgZmlsZSBuYW1lIHJlbW90ZVxuIgorIiAgdG9vOlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgY3VybCAtVCB1cGxvYWRmaWxlIC11IHVzZXI6cGFzc3dkIGZ0cDovL2Z0cC51cGxvYWQuY29tL1xuIgorIlxuIgorIiAgVXBsb2FkIGEgbG9jYWwgZmlsZSB0byBnZXQgYXBwZW5kZWQgdG8gdGhlIHJlbW90ZSBmaWxlOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtVCBsb2NhbGZpbGUgLWEgZnRwOi8vZnRwLnVwbG9hZC5jb20vcmVtb3RlZmlsZVxuIgorIlxuIgorIiAgQ3VybCBhbHNvIHN1cHBvcnRzIGZ0cCB1cGxvYWQgdGhyb3VnaCBhIHByb3h5LCBidXQgb25seSBpZiB0aGUgcHJveHkgaXNcbiIKKyIgIGNvbmZpZ3VyZWQgdG8gYWxsb3cgdGhhdCBraW5kIG9mIHR1bm5lbGluZy4gSWYgaXQgZG9lcywgeW91IGNhbiBydW4gY3VybCBpblxuIgorIiAgYSBmYXNoaW9uIHNpbWlsYXIgdG86XG4iCisiXG4iCisiICAgICAgICBjdXJsIC0tcHJveHl0dW5uZWwgLXggcHJveHk6cG9ydCAtVCBsb2NhbGZpbGUgZnRwLnVwbG9hZC5jb21cbiIKKyJcbiIKKyIgSFRUUFxuIgorIlxuIgorIiAgVXBsb2FkIGFsbCBkYXRhIG9uIHN0ZGluIHRvIGEgc3BlY2lmaWVkIGh0dHAgc2l0ZTpcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgIGN1cmwgLVQgLSBodHRwOi8vd3d3LnVwbG9hZC5jb20vbXlmaWxlXG4iCisiXG4iCisiICBOb3RlIHRoYXQgdGhlIGh0dHAgc2VydmVyIG11c3QgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgdG8gYWNjZXB0IFBVVCBiZWZvcmVcbiIKKyIgIHRoaXMgY2FuIGJlIGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIgorIlxuIgorIiAgRm9yIG90aGVyIHdheXMgdG8gZG8gaHR0cCBkYXRhIHVwbG9hZCwgc2VlIHRoZSBQT1NUIHNlY3Rpb24gYmVsb3cuXG4iCisiXG4iCisiVkVSQk9TRSAvIERFQlVHXG4iCisiXG4iCisiICBJZiBjdXJsIGZhaWxzIHdoZXJlIGl0IGlzbid0IHN1cHBvc2VkIHRvLCBpZiB0aGUgc2VydmVycyBkb24ndCBsZXQgeW91IGluLFxuIgorIiAgaWYgeW91IGNhbid0IHVuZGVyc3RhbmQgdGhlIHJlc3BvbnNlczogdXNlIHRoZSAtdiBmbGFnIHRvIGdldCB2ZXJib3NlXG4iCisiICBmZXRjaGluZy4gQ3VybCB3aWxsIG91dHB1dCBsb3RzIG9mIGluZm8gYW5kIHdoYXQgaXQgc2VuZHMgYW5kIHJlY2VpdmVzIGluXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBvcmRlciB0byBsZXQgdGhlIHVzZXIgc2VlIGFsbCBjbGllbnQtc2VydmVyIGludGVyYWN0aW9uIChidXQgaXQgd29uJ3Qgc2hvd1xuIgorIiAgeW91IHRoZSBhY3R1YWwgZGF0YSkuXG4iCisiXG4iCisiICAgICAgICBjdXJsIC12IGZ0cDovL2Z0cC51cGxvYWQuY29tL1xuIgorIlxuIgorIiAgVG8gZ2V0IGV2ZW4gbW9yZSBkZXRhaWxzIGFuZCBpbmZvcm1hdGlvbiBvbiB3aGF0IGN1cmwgZG9lcywgdHJ5IHVzaW5nIHRoZVxuIgorIiAgLS10cmFjZSBvciAtLXRyYWNlLWFzY2lpIG9wdGlvbnMgd2l0aCBhIGdpdmVuIGZpbGUgbmFtZSB0byBsb2cgdG8sIGxpa2VcbiIKKyIgIHRoaXM6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC0tdHJhY2UgdHJhY2UudHh0IHd3dy5oYXh4LnNlXG4iCisiXG4iCisiXG4iCisiREVUQUlMRUQgSU5GT1JNQVRJT05cbiIKKyJcbiIKKyIgIERpZmZlcmVudCBwcm90b2NvbHMgcHJvdmlkZSBkaWZmZXJlbnQgd2F5cyBvZiBnZXR0aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBhYm91dCBzcGVjaWZpYyBmaWxlcy9kb2N1bWVudHMuIFRvIGdldCBjdXJsIHRvIHNob3cgZGV0YWlsZWQgaW5mb3JtYXRpb25cbiIKKyIgIGFib3V0IGEgc2luZ2xlIGZpbGUsIHlvdSBzaG91bGQgdXNlIC1JLy0taGVhZCBvcHRpb24uIEl0IGRpc3BsYXlzIGFsbFxuIgorIiAgYXZhaWxhYmxlIGluZm8gb24gYSBzaW5nbGUgZmlsZSBmb3IgSFRUUCBhbmQgRlRQLiBUaGUgSFRUUCBpbmZvcm1hdGlvbiBpcyBhXG4iCisiICBsb3QgbW9yZSBleHRlbnNpdmUuXG4iCisiXG4iCisiICBGb3IgSFRUUCwgeW91IGNhbiBnZXQgdGhlIGhlYWRlciBpbmZvcm1hdGlvbiAodGhlIHNhbWUgYXMgLUkgd291bGQgc2hvdylcbiIKKyIgIHNob3duIGJlZm9yZSB0aGUgZGF0YSBieSB1c2luZyAtaS8tLWluY2x1ZGUuIEN1cmwgdW5kZXJzdGFuZHMgdGhlXG4iCisiICAtRC8tLWR1bXAtaGVhZGVyIG9wdGlvbiB3aGVuIGdldHRpbmcgZmlsZXMgZnJvbSBib3RoIEZUUCBhbmQgSFRUUCwgYW5kIGl0XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICB3aWxsIHRoZW4gc3RvcmUgdGhlIGhlYWRlcnMgaW4gdGhlIHNwZWNpZmllZCBmaWxlLlxuIgorIlxuIgorIiAgU3RvcmUgdGhlIEhUVFAgaGVhZGVycyBpbiBhIHNlcGFyYXRlIGZpbGUgKGhlYWRlcnMudHh0IGluIHRoZSBleGFtcGxlKTpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLS1kdW1wLWhlYWRlciBoZWFkZXJzLnR4dCBjdXJsLmhheHguc2VcbiIKKyJcbiIKKyIgIE5vdGUgdGhhdCBoZWFkZXJzIHN0b3JlZCBpbiBhIHNlcGFyYXRlIGZpbGUgY2FuIGJlIHZlcnkgdXNlZnVsIGF0IGEgbGF0ZXJcbiIKKyIgIHRpbWUgaWYgeW91IHdhbnQgY3VybCB0byB1c2UgY29va2llcyBzZW50IGJ5IHRoZSBzZXJ2ZXIuIE1vcmUgYWJvdXQgdGhhdCBpblxuIgorIiAgdGhlIGNvb2tpZXMgc2VjdGlvbi5cbiIKKyJcbiIKKyJQT1NUIChIVFRQKVxuIgorIlxuIgorIiAgSXQncyBlYXN5IHRvIHBvc3QgZGF0YSB1c2luZyBjdXJsLiBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIC1kIDxkYXRhPlxuIgorIiAgb3B0aW9uLiAgVGhlIHBvc3QgZGF0YSBtdXN0IGJlIHVybGVuY29kZWQuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBQb3N0IGEgc2ltcGxlIFwibmFtZVwiIGFuZCBcInBob25lXCIgZ3Vlc3Rib29rLlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtZCBcIm5hbWU9UmFmYWVsJTIwU2FndWxhJnBob25lPTMzMjA3ODBcIiBcXFxuIgorIiAgICAgICAgICAgICAgICBodHRwOi8vd3d3LndoZXJlLmNvbS9ndWVzdC5jZ2lcbiIKKyJcbiIKKyIgIEhvdyB0byBwb3N0IGEgZm9ybSB3aXRoIGN1cmwsIGxlc3NvbiAjMTpcbiIKKyJcbiIKKyIgIERpZyBvdXQgYWxsIHRoZSA8aW5wdXQ+IHRhZ3MgaW4gdGhlIGZvcm0gdGhhdCB5b3Ugd2FudCB0byBmaWxsIGluLiAoVGhlcmUnc1xuIgorIiAgYSBwZXJsIHByb2dyYW0gY2FsbGVkIGZvcm1maW5kLnBsIG9uIHRoZSBjdXJsIHNpdGUgdGhhdCBoZWxwcyB3aXRoIHRoaXMpLlxuIgorIlxuIgorIiAgSWYgdGhlcmUncyBhIFwibm9ybWFsXCIgcG9zdCwgeW91IHVzZSAtZCB0byBwb3N0LiAtZCB0YWtlcyBhIGZ1bGwgXCJwb3N0XG4iCisiICBzdHJpbmdcIiwgd2hpY2ggaXMgaW4gdGhlIGZvcm1hdFxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgPHZhcmlhYmxlMT49PGRhdGExPiY8dmFyaWFibGUyPj08ZGF0YTI+Ji4uLlxuIgorIlxuIgorIiAgVGhlICd2YXJpYWJsZScgbmFtZXMgYXJlIHRoZSBuYW1lcyBzZXQgd2l0aCBcIm5hbWU9XCIgaW4gdGhlIDxpbnB1dD4gdGFncywgYW5kXG4iCisiICB0aGUgZGF0YSBpcyB0aGUgY29udGVudHMgeW91IHdhbnQgdG8gZmlsbCBpbiBmb3IgdGhlIGlucHV0cy4gVGhlIGRhdGEgKm11c3QqXG4iCisiICBiZSBwcm9wZXJseSBVUkwgZW5jb2RlZC4gVGhhdCBtZWFucyB5b3UgcmVwbGFjZSBzcGFjZSB3aXRoICsgYW5kIHRoYXQgeW91XG4iCisiICB3cml0ZSB3ZWlyZCBsZXR0ZXJzIHdpdGggJVhYIHdoZXJlIFhYIGlzIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZlxuIgorIiAgdGhlIGxldHRlcidzIEFTQ0lJIGNvZGUuXG4iCisiXG4iCisiICBFeGFtcGxlOlxuIgorIlxuIgorIiAgKHBhZ2UgbG9jYXRlZCBhdCBodHRwOi8vd3d3LmZvcm1wb3N0LmNvbS9nZXR0aGlzL1xuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgPGZvcm0gYWN0aW9uPVwicG9zdC5jZ2lcIiBtZXRob2Q9XCJwb3N0XCI+XG4iCisiICAgICAgICA8aW5wdXQgbmFtZT11c2VyIHNpemU9MTA+XG4iCisiICAgICAgICA8aW5wdXQgbmFtZT1wYXNzIHR5cGU9cGFzc3dvcmQgc2l6ZT0xMD5cbiIKKyIgICAgICAgIDxpbnB1dCBuYW1lPWlkIHR5cGU9aGlkZGVuIHZhbHVlPVwiYmxhYmxhYmxhXCI+XG4iCisiICAgICAgICA8aW5wdXQgbmFtZT1kaW5nIHZhbHVlPVwic3VibWl0XCI+XG4iCisiICAgICAgICA8L2Zvcm0+XG4iCisiXG4iCisiICBXZSB3YW50IHRvIGVudGVyIHVzZXIgJ2Zvb2Jhcicgd2l0aCBwYXNzd29yZCAnMTIzNDUnLlxuIgorIlxuIgorIiAgVG8gcG9zdCB0byB0aGlzLCB5b3UgZW50ZXIgYSBjdXJsIGNvbW1hbmQgbGluZSBsaWtlOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtZCBcInVzZXI9Zm9vYmFyJnBhc3M9MTIzNDUmaWQ9YmxhYmxhYmxhJmRpbmc9c3VibWl0XCIgIChjb250aW51ZXMpXG4iCisiICAgICAgICAgIGh0dHA6Ly93d3cuZm9ybXBvc3QuY29tL2dldHRoaXMvcG9zdC5jZ2lcbiIKKyJcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIFdoaWxlIC1kIHVzZXMgdGhlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBtaW1lLXR5cGUsIGdlbmVyYWxseVxuIgorIiAgdW5kZXJzdG9vZCBieSBDR0kncyBhbmQgc2ltaWxhciwgY3VybCBhbHNvIHN1cHBvcnRzIHRoZSBtb3JlIGNhcGFibGVcbiIKKyIgIG11bHRpcGFydC9mb3JtLWRhdGEgdHlwZS4gVGhpcyBsYXR0ZXIgdHlwZSBzdXBwb3J0cyB0aGluZ3MgbGlrZSBmaWxlIHVwbG9hZC5cbiIKKyJcbiIKKyIgIC1GIGFjY2VwdHMgcGFyYW1ldGVycyBsaWtlIC1GIFwibmFtZT1jb250ZW50c1wiLiBJZiB5b3Ugd2FudCB0aGUgY29udGVudHMgdG9cbiIKKyIgIGJlIHJlYWQgZnJvbSBhIGZpbGUsIHVzZSA8QGZpbGVuYW1lPiBhcyBjb250ZW50cy4gV2hlbiBzcGVjaWZ5aW5nIGEgZmlsZSxcbiIKKyIgIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBmaWxlIGNvbnRlbnQgdHlwZSBieSBhcHBlbmRpbmcgJzt0eXBlPTxtaW1lIHR5cGU+J1xuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgdG8gdGhlIGZpbGUgbmFtZS4gWW91IGNhbiBhbHNvIHBvc3QgdGhlIGNvbnRlbnRzIG9mIHNldmVyYWwgZmlsZXMgaW4gb25lXG4iCisiICBmaWVsZC4gIEZvciBleGFtcGxlLCB0aGUgZmllbGQgbmFtZSAnY29vbGZpbGVzJyBpcyB1c2VkIHRvIHNlbmQgdGhyZWUgZmlsZXMsXG4iCisiICB3aXRoIGRpZmZlcmVudCBjb250ZW50IHR5cGVzIHVzaW5nIHRoZSBmb2xsb3dpbmcgc3ludGF4OlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtRiBcImNvb2xmaWxlcz1AZmlsMS5naWY7dHlwZT1pbWFnZS9naWYsZmlsMi50eHQsZmlsMy5odG1sXCIgXFxcbiIKKyIgICAgICAgIGh0dHA6Ly93d3cucG9zdC5jb20vcG9zdGl0LmNnaVxuIgorIlxuIgorIiAgSWYgdGhlIGNvbnRlbnQtdHlwZSBpcyBub3Qgc3BlY2lmaWVkLCBjdXJsIHdpbGwgdHJ5IHRvIGd1ZXNzIGZyb20gdGhlIGZpbGVcbiIKKyIgIGV4dGVuc2lvbiAoaXQgb25seSBrbm93cyBhIGZldyksIG9yIHVzZSB0aGUgcHJldmlvdXNseSBzcGVjaWZpZWQgdHlwZSAoZnJvbVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgYW4gZWFybGllciBmaWxlIGlmIHNldmVyYWwgZmlsZXMgYXJlIHNwZWNpZmllZCBpbiBhIGxpc3QpIG9yIGVsc2UgaXQgd2lsbFxuIgorIiAgdXNlIHRoZSBkZWZhdWx0IHR5cGUgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScuXG4iCisiXG4iCisiICBFbXVsYXRlIGEgZmlsbC1pbiBmb3JtIHdpdGggLUYuIExldCdzIHNheSB5b3UgZmlsbCBpbiB0aHJlZSBmaWVsZHMgaW4gYVxuIgorIiAgZm9ybS4gT25lIGZpZWxkIGlzIGEgZmlsZSBuYW1lIHdoaWNoIHRvIHBvc3QsIG9uZSBmaWVsZCBpcyB5b3VyIG5hbWUgYW5kIG9uZVxuIgorIiAgZmllbGQgaXMgYSBmaWxlIGRlc2NyaXB0aW9uLiBXZSB3YW50IHRvIHBvc3QgdGhlIGZpbGUgd2UgaGF2ZSB3cml0dGVuIG5hbWVkXG4iCisiICBcImNvb2x0ZXh0LnR4dFwiLiBUbyBsZXQgY3VybCBkbyB0aGUgcG9zdGluZyBvZiB0aGlzIGRhdGEgaW5zdGVhZCBvZiB5b3VyXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBmYXZvdXJpdGUgYnJvd3NlciwgeW91IGhhdmUgdG8gcmVhZCB0aGUgSFRNTCBzb3VyY2Ugb2YgdGhlIGZvcm0gcGFnZSBhbmRcbiIKKyIgIGZpbmQgdGhlIG5hbWVzIG9mIHRoZSBpbnB1dCBmaWVsZHMuIEluIG91ciBleGFtcGxlLCB0aGUgaW5wdXQgZmllbGQgbmFtZXNcbiIKKyIgIGFyZSAnZmlsZScsICd5b3VybmFtZScgYW5kICdmaWxlZGVzY3JpcHRpb24nLlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtRiBcImZpbGU9QGNvb2x0ZXh0LnR4dFwiIC1GIFwieW91cm5hbWU9RGFuaWVsXCIgXFxcbiIKKyIgICAgICAgICAgICAgLUYgXCJmaWxlZGVzY3JpcHRpb249Q29vbCB0ZXh0IGZpbGUgd2l0aCBjb29sIHRleHQgaW5zaWRlXCIgXFxcbiIKKyIgICAgICAgICAgICAgaHR0cDovL3d3dy5wb3N0LmNvbS9wb3N0aXQuY2dpXG4iCisiXG4iCisiICBUbyBzZW5kIHR3byBmaWxlcyBpbiBvbmUgcG9zdCB5b3UgY2FuIGRvIGl0IGluIHR3byB3YXlzOlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgMS4gU2VuZCBtdWx0aXBsZSBmaWxlcyBpbiBhIHNpbmdsZSBcImZpZWxkXCIgd2l0aCBhIHNpbmdsZSBmaWVsZCBuYW1lOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtRiBcInBpY3R1cmVzPUBkb2cuZ2lmLGNhdC5naWZcIlxuIgorIlxuIgorIiAgMi4gU2VuZCB0d28gZmllbGRzIHdpdGggdHdvIGZpZWxkIG5hbWVzOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtRiBcImRvY3BpY3R1cmU9QGRvZy5naWZcIiAtRiBcImNhdHBpY3R1cmU9QGNhdC5naWZcIlxuIgorIlxuIgorIiAgVG8gc2VuZCBhIGZpZWxkIHZhbHVlIGxpdGVyYWxseSB3aXRob3V0IGludGVycHJldGluZyBhIGxlYWRpbmcgJ0AnXG4iCisiICBvciAnPCcsIG9yIGFuIGVtYmVkZGVkICc7dHlwZT0nLCB1c2UgLS1mb3JtLXN0cmluZyBpbnN0ZWFkIG9mXG4iCisiICAtRi4gVGhpcyBpcyByZWNvbW1lbmRlZCB3aGVuIHRoZSB2YWx1ZSBpcyBvYnRhaW5lZCBmcm9tIGEgdXNlciBvclxuIgorIiAgc29tZSBvdGhlciB1bnByZWRpY3RhYmxlIHNvdXJjZS4gVW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcywgdXNpbmdcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIC1GIGluc3RlYWQgb2YgLS1mb3JtLXN0cmluZyB3b3VsZCBhbGxvdyBhIHVzZXIgdG8gdHJpY2sgY3VybCBpbnRvXG4iCisiICB1cGxvYWRpbmcgYSBmaWxlLlxuIgorIlxuIgorIlJFRkVSUkVSXG4iCisiXG4iCisiICBBIEhUVFAgcmVxdWVzdCBoYXMgdGhlIG9wdGlvbiB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIGFkZHJlc3NcbiIKKyIgIHRoYXQgcmVmZXJyZWQgdG8gYWN0dWFsIHBhZ2UuICBDdXJsIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGVcbiIKKyIgIHJlZmVycmVyIHRvIGJlIHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gSXQgaXMgZXNwZWNpYWxseSB1c2VmdWwgdG9cbiIKKyIgIGZvb2wgb3IgdHJpY2sgc3R1cGlkIHNlcnZlcnMgb3IgQ0dJIHNjcmlwdHMgdGhhdCByZWx5IG9uIHRoYXQgaW5mb3JtYXRpb25cbiIKKyIgIGJlaW5nIGF2YWlsYWJsZSBvciBjb250YWluIGNlcnRhaW4gZGF0YS5cbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLWUgd3d3LmNvb2xzaXRlLmNvbSBodHRwOi8vd3d3LnNob3dtZS5jb20vXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBOT1RFOiBUaGUgUmVmZXJlcjogW3NpY10gZmllbGQgaXMgZGVmaW5lZCBpbiB0aGUgSFRUUCBzcGVjIHRvIGJlIGEgZnVsbCBVUkwuXG4iCisiXG4iCisiVVNFUiBBR0VOVFxuIgorIlxuIgorIiAgQSBIVFRQIHJlcXVlc3QgaGFzIHRoZSBvcHRpb24gdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnJvd3NlclxuIgorIiAgdGhhdCBnZW5lcmF0ZWQgdGhlIHJlcXVlc3QuIEN1cmwgYWxsb3dzIGl0IHRvIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZFxuIgorIiAgbGluZS4gSXQgaXMgZXNwZWNpYWxseSB1c2VmdWwgdG8gZm9vbCBvciB0cmljayBzdHVwaWQgc2VydmVycyBvciBDR0lcbiIKKyIgIHNjcmlwdHMgdGhhdCBvbmx5IGFjY2VwdCBjZXJ0YWluIGJyb3dzZXJzLlxuIgorIlxuIgorIiAgRXhhbXBsZTpcbiIKKyJcbiIKKyIgIGN1cmwgLUEgJ01vemlsbGEvMy4wIChXaW45NTsgSSknIGh0dHA6Ly93d3cubmF0aW9uc2JhbmsuY29tL1xuIgorIlxuIgorIiAgT3RoZXIgY29tbW9uIHN0cmluZ3M6XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICdNb3ppbGxhLzMuMCAoV2luOTU7IEkpJyAgICAgTmV0c2NhcGUgVmVyc2lvbiAzIGZvciBXaW5kb3dzIDk1XG4iCisiICAgICdNb3ppbGxhLzMuMDQgKFdpbjk1OyBVKScgICAgTmV0c2NhcGUgVmVyc2lvbiAzIGZvciBXaW5kb3dzIDk1XG4iCisiICAgICdNb3ppbGxhLzIuMDIgKE9TLzI7IFUpJyAgICAgTmV0c2NhcGUgVmVyc2lvbiAyIGZvciBPUy8yXG4iCisiICAgICdNb3ppbGxhLzQuMDQgW2VuXSAoWDExOyBVOyBBSVggNC4yOyBOYXYpJyAgICAgICAgICAgTlMgZm9yIEFJWFxuIgorIiAgICAnTW96aWxsYS80LjA1IFtlbl0gKFgxMTsgVTsgTGludXggMi4wLjMyIGk1ODYpJyAgICAgIE5TIGZvciBMaW51eFxuIgorIlxuIgorIiAgTm90ZSB0aGF0IEludGVybmV0IEV4cGxvcmVyIHRyaWVzIGhhcmQgdG8gYmUgY29tcGF0aWJsZSBpbiBldmVyeSB3YXk6XG4iCisiICAgICdNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA0LjAxOyBXaW5kb3dzIDk1KScgICAgTVNJRSBmb3IgVzk1XG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBNb3ppbGxhIGlzIG5vdCB0aGUgb25seSBwb3NzaWJsZSBVc2VyLUFnZW50IG5hbWU6XG4iCisiICAgICdLb25xdWVyb3IvMS4wJyAgICAgICAgICAgICBLREUgRmlsZSBNYW5hZ2VyIGRlc2t0b3AgY2xpZW50XG4iCisiICAgICdMeW54LzIuNy4xIGxpYnd3dy1GTS8yLjE0JyBMeW54IGNvbW1hbmQgbGluZSBicm93c2VyXG4iCisiXG4iCisiQ09PS0lFU1xuIgorIlxuIgorIiAgQ29va2llcyBhcmUgZ2VuZXJhbGx5IHVzZWQgYnkgd2ViIHNlcnZlcnMgdG8ga2VlcCBzdGF0ZSBpbmZvcm1hdGlvbiBhdCB0aGVcbiIKKyIgIGNsaWVudCdzIHNpZGUuIFRoZSBzZXJ2ZXIgc2V0cyBjb29raWVzIGJ5IHNlbmRpbmcgYSByZXNwb25zZSBsaW5lIGluIHRoZVxuIgorIiAgaGVhZGVycyB0aGF0IGxvb2tzIGxpa2UgJ1NldC1Db29raWU6IDxkYXRhPicgd2hlcmUgdGhlIGRhdGEgcGFydCB0aGVuXG4iCisiICB0eXBpY2FsbHkgY29udGFpbnMgYSBzZXQgb2YgTkFNRT1WQUxVRSBwYWlycyAoc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMgJzsnXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBsaWtlIFwiTkFNRTE9VkFMVUUxOyBOQU1FMj1WQUxVRTI7XCIpLiBUaGUgc2VydmVyIGNhbiBhbHNvIHNwZWNpZnkgZm9yIHdoYXRcbiIKKyIgIHBhdGggdGhlIFwiY29va2llXCIgc2hvdWxkIGJlIHVzZWQgZm9yIChieSBzcGVjaWZ5aW5nIFwicGF0aD12YWx1ZVwiKSwgd2hlbiB0aGVcbiIKKyIgIGNvb2tpZSBzaG91bGQgZXhwaXJlIChcImV4cGlyZT1EQVRFXCIpLCBmb3Igd2hhdCBkb21haW4gdG8gdXNlIGl0XG4iCisiICAoXCJkb21haW49TkFNRVwiKSBhbmQgaWYgaXQgc2hvdWxkIGJlIHVzZWQgb24gc2VjdXJlIGNvbm5lY3Rpb25zIG9ubHlcbiIKKyIgIChcInNlY3VyZVwiKS5cbiIKKyJcbiIKKyIgIElmIHlvdSd2ZSByZWNlaXZlZCBhIHBhZ2UgZnJvbSBhIHNlcnZlciB0aGF0IGNvbnRhaW5zIGEgaGVhZGVyIGxpa2U6XG4iCisiICAgICAgICBTZXQtQ29va2llOiBzZXNzaW9uaWQ9Ym9vMTIzOyBwYXRoPVwiL2Zvb1wiO1xuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgaXQgbWVhbnMgdGhlIHNlcnZlciB3YW50cyB0aGF0IGZpcnN0IHBhaXIgcGFzc2VkIG9uIHdoZW4gd2UgZ2V0IGFueXRoaW5nIGluXG4iCisiICBhIHBhdGggYmVnaW5uaW5nIHdpdGggXCIvZm9vXCIuXG4iCisiXG4iCisiICBFeGFtcGxlLCBnZXQgYSBwYWdlIHRoYXQgd2FudHMgbXkgbmFtZSBwYXNzZWQgaW4gYSBjb29raWU6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC1iIFwibmFtZT1EYW5pZWxcIiB3d3cuc2lsbHlwYWdlLmNvbVxuIgorIlxuIgorIiAgQ3VybCBhbHNvIGhhcyB0aGUgYWJpbGl0eSB0byB1c2UgcHJldmlvdXNseSByZWNlaXZlZCBjb29raWVzIGluIGZvbGxvd2luZ1xuIgorIiAgc2Vzc2lvbnMuIElmIHlvdSBnZXQgY29va2llcyBmcm9tIGEgc2VydmVyIGFuZCBzdG9yZSB0aGVtIGluIGEgZmlsZSBpbiBhXG4iCisiICBtYW5uZXIgc2ltaWxhciB0bzpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLS1kdW1wLWhlYWRlciBoZWFkZXJzIHd3dy5leGFtcGxlLmNvbVxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgLi4uIHlvdSBjYW4gdGhlbiBpbiBhIHNlY29uZCBjb25uZWN0IHRvIHRoYXQgKG9yIGFub3RoZXIpIHNpdGUsIHVzZSB0aGVcbiIKKyIgIGNvb2tpZXMgZnJvbSB0aGUgJ2hlYWRlcnMnIGZpbGUgbGlrZTpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLWIgaGVhZGVycyB3d3cuZXhhbXBsZS5jb21cbiIKKyJcbiIKKyIgIFdoaWxlIHNhdmluZyBoZWFkZXJzIHRvIGEgZmlsZSBpcyBhIHdvcmtpbmcgd2F5IHRvIHN0b3JlIGNvb2tpZXMsIGl0IGlzXG4iCisiICBob3dldmVyIGVycm9yLXByb25lIGFuZCBub3QgdGhlIHByZWZlcnJlZCB3YXkgdG8gZG8gdGhpcy4gSW5zdGVhZCwgbWFrZSBjdXJsXG4iCisiICBzYXZlIHRoZSBpbmNvbWluZyBjb29raWVzIHVzaW5nIHRoZSB3ZWxsLWtub3duIG5ldHNjYXBlIGNvb2tpZSBmb3JtYXQgbGlrZVxuIgorIiAgdGhpczpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLWMgY29va2llcy50eHQgd3d3LmV4YW1wbGUuY29tXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBOb3RlIHRoYXQgYnkgc3BlY2lmeWluZyAtYiB5b3UgZW5hYmxlIHRoZSBcImNvb2tpZSBhd2FyZW5lc3NcIiBhbmQgd2l0aCAtTFxuIgorIiAgeW91IGNhbiBtYWtlIGN1cmwgZm9sbG93IGEgbG9jYXRpb246ICh3aGljaCBvZnRlbiBpcyB1c2VkIGluIGNvbWJpbmF0aW9uXG4iCisiICB3aXRoIGNvb2tpZXMpLiBTbyB0aGF0IGlmIGEgc2l0ZSBzZW5kcyBjb29raWVzIGFuZCBhIGxvY2F0aW9uLCB5b3UgY2FuXG4iCisiICB1c2UgYSBub24tZXhpc3RpbmcgZmlsZSB0byB0cmlnZ2VyIHRoZSBjb29raWUgYXdhcmVuZXNzIGxpa2U6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC1MIC1iIGVtcHR5LnR4dCB3d3cuZXhhbXBsZS5jb21cbiIKKyJcbiIKKyIgIFRoZSBmaWxlIHRvIHJlYWQgY29va2llcyBmcm9tIG11c3QgYmUgZm9ybWF0dGVkIHVzaW5nIHBsYWluIEhUVFAgaGVhZGVycyBPUlxuIgorIiAgYXMgbmV0c2NhcGUncyBjb29raWUgZmlsZS4gQ3VybCB3aWxsIGRldGVybWluZSB3aGF0IGtpbmQgaXQgaXMgYmFzZWQgb24gdGhlXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBmaWxlIGNvbnRlbnRzLiAgSW4gdGhlIGFib3ZlIGNvbW1hbmQsIGN1cmwgd2lsbCBwYXJzZSB0aGUgaGVhZGVyIGFuZCBzdG9yZVxuIgorIiAgdGhlIGNvb2tpZXMgcmVjZWl2ZWQgZnJvbSB3d3cuZXhhbXBsZS5jb20uICBjdXJsIHdpbGwgc2VuZCB0byB0aGUgc2VydmVyIHRoZVxuIgorIiAgc3RvcmVkIGNvb2tpZXMgd2hpY2ggbWF0Y2ggdGhlIHJlcXVlc3QgYXMgaXQgZm9sbG93cyB0aGUgbG9jYXRpb24uICBUaGVcbiIKKyIgIGZpbGUgXCJlbXB0eS50eHRcIiBtYXkgYmUgYSBub25leGlzdGVudCBmaWxlLlxuIgorIlxuIgorIiAgQWxhcywgdG8gYm90aCByZWFkIGFuZCB3cml0ZSBjb29raWVzIGZyb20gYSBuZXRzY2FwZSBjb29raWUgZmlsZSwgeW91IGNhblxuIgorIiAgc2V0IGJvdGggLWIgYW5kIC1jIHRvIHVzZSB0aGUgc2FtZSBmaWxlOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtYiBjb29raWVzLnR4dCAtYyBjb29raWVzLnR4dCB3d3cuZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJQUk9HUkVTUyBNRVRFUlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgVGhlIHByb2dyZXNzIG1ldGVyIGV4aXN0cyB0byBzaG93IGEgdXNlciB0aGF0IHNvbWV0aGluZyBhY3R1YWxseSBpc1xuIgorIiAgaGFwcGVuaW5nLiBUaGUgZGlmZmVyZW50IGZpZWxkcyBpbiB0aGUgb3V0cHV0IGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOlxuIgorIlxuIgorIiAgJSBUb3RhbCAgICAlIFJlY2VpdmVkICUgWGZlcmQgIEF2ZXJhZ2UgU3BlZWQgICAgICAgICAgVGltZSAgICAgICAgICAgICBDdXJyLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERsb2FkICBVcGxvYWQgVG90YWwgICAgQ3VycmVudCAgTGVmdCAgICBTcGVlZFxuIgorIiAgMCAgMTUxTSAgICAwIDM4NjA4ICAgIDAgICAgIDAgICA5NDA2ICAgICAgMCAgNDo0MTo0MyAgMDowMDowNCAgNDo0MTozOSAgOTI4N1xuIgorIlxuIgorIiAgRnJvbSBsZWZ0LXRvLXJpZ2h0OlxuIgorIiAgICUgICAgICAgICAgICAgLSBwZXJjZW50YWdlIGNvbXBsZXRlZCBvZiB0aGUgd2hvbGUgdHJhbnNmZXJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICBUb3RhbCAgICAgICAgIC0gdG90YWwgc2l6ZSBvZiB0aGUgd2hvbGUgZXhwZWN0ZWQgdHJhbnNmZXJcbiIKKyIgICAlICAgICAgICAgICAgIC0gcGVyY2VudGFnZSBjb21wbGV0ZWQgb2YgdGhlIGRvd25sb2FkXG4iCisiICAgUmVjZWl2ZWQgICAgICAtIGN1cnJlbnRseSBkb3dubG9hZGVkIGFtb3VudCBvZiBieXRlc1xuIgorIiAgICUgICAgICAgICAgICAgLSBwZXJjZW50YWdlIGNvbXBsZXRlZCBvZiB0aGUgdXBsb2FkXG4iCisiICAgWGZlcmQgICAgICAgICAtIGN1cnJlbnRseSB1cGxvYWRlZCBhbW91bnQgb2YgYnl0ZXNcbiIKKyIgICBBdmVyYWdlIFNwZWVkXG4iCisiICAgRGxvYWQgICAgICAgICAtIHRoZSBhdmVyYWdlIHRyYW5zZmVyIHNwZWVkIG9mIHRoZSBkb3dubG9hZFxuIgorIiAgIEF2ZXJhZ2UgU3BlZWRcbiIKKyIgICBVcGxvYWQgICAgICAgIC0gdGhlIGF2ZXJhZ2UgdHJhbnNmZXIgc3BlZWQgb2YgdGhlIHVwbG9hZFxuIgorIiAgIFRpbWUgVG90YWwgICAgLSBleHBlY3RlZCB0aW1lIHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb25cbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICBUaW1lIEN1cnJlbnQgIC0gdGltZSBwYXNzZWQgc2luY2UgdGhlIGludm9rZVxuIgorIiAgIFRpbWUgTGVmdCAgICAgLSBleHBlY3RlZCB0aW1lIGxlZnQgdG8gY29tcGxldGlvblxuIgorIiAgIEN1cnIuU3BlZWQgICAgLSB0aGUgYXZlcmFnZSB0cmFuc2ZlciBzcGVlZCB0aGUgbGFzdCA1IHNlY29uZHMgKHRoZSBmaXJzdFxuIgorIiAgICAgICAgICAgICAgICAgICA1IHNlY29uZHMgb2YgYSB0cmFuc2ZlciBpcyBiYXNlZCBvbiBsZXNzIHRpbWUgb2YgY291cnNlLilcbiIKKyJcbiIKKyIgIFRoZSAtIyBvcHRpb24gd2lsbCBkaXNwbGF5IGEgdG90YWxseSBkaWZmZXJlbnQgcHJvZ3Jlc3MgYmFyIHRoYXQgZG9lc24ndFxuIgorIiAgbmVlZCBtdWNoIGV4cGxhbmF0aW9uIVxuIgorIlxuIgorIlNQRUVEIExJTUlUXG4iCisiXG4iCisiICBDdXJsIGFsbG93cyB0aGUgdXNlciB0byBzZXQgdGhlIHRyYW5zZmVyIHNwZWVkIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgdG8gbGV0IHRoZSB0cmFuc2ZlciBrZWVwIGdvaW5nLiBCeSB1c2luZyB0aGUgc3dpdGNoIC15IGFuZCAtWSB5b3VcbiIKKyIgIGNhbiBtYWtlIGN1cmwgYWJvcnQgdHJhbnNmZXJzIGlmIHRoZSB0cmFuc2ZlciBzcGVlZCBpcyBiZWxvdyB0aGUgc3BlY2lmaWVkXG4iCisiICBsb3dlc3QgbGltaXQgZm9yIGEgc3BlY2lmaWVkIHRpbWUuXG4iCisiXG4iCisiICBUbyBoYXZlIGN1cmwgYWJvcnQgdGhlIGRvd25sb2FkIGlmIHRoZSBzcGVlZCBpcyBzbG93ZXIgdGhhbiAzMDAwIGJ5dGVzIHBlclxuIgorIiAgc2Vjb25kIGZvciAxIG1pbnV0ZSwgcnVuOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtWSAzMDAwIC15IDYwIHd3dy5mYXItYXdheS1zaXRlLmNvbVxuIgorIlxuIgorIiAgVGhpcyBjYW4gdmVyeSB3ZWxsIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgb3ZlcmFsbCB0aW1lIGxpbWl0LCBzb1xuIgorIiAgdGhhdCB0aGUgYWJvdmUgb3BlcmF0aW9uIG11c3QgYmUgY29tcGxldGVkIGluIHdob2xlIHdpdGhpbiAzMCBtaW51dGVzOlxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICAgICAgY3VybCAtbSAxODAwIC1ZIDMwMDAgLXkgNjAgd3d3LmZhci1hd2F5LXNpdGUuY29tXG4iCisiXG4iCisiICBGb3JjaW5nIGN1cmwgbm90IHRvIHRyYW5zZmVyIGRhdGEgZmFzdGVyIHRoYW4gYSBnaXZlbiByYXRlIGlzIGFsc28gcG9zc2libGUsXG4iCisiICB3aGljaCBtaWdodCBiZSB1c2VmdWwgaWYgeW91J3JlIHVzaW5nIGEgbGltaXRlZCBiYW5kd2lkdGggY29ubmVjdGlvbiBhbmQgeW91XG4iCisiICBkb24ndCB3YW50IHlvdXIgdHJhbnNmZXIgdG8gdXNlIGFsbCBvZiBpdCAoc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzXG4iCisiICBcImJhbmR3aWR0aCB0aHJvdHRsZVwiKS5cbiIKKyJcbiIKKyIgIE1ha2UgY3VybCB0cmFuc2ZlciBkYXRhIG5vIGZhc3RlciB0aGFuIDEwIGtpbG9ieXRlcyBwZXIgc2Vjb25kOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtLWxpbWl0LXJhdGUgMTBLIHd3dy5mYXItYXdheS1zaXRlLmNvbVxuIgorIlxuIgorIiAgICBvclxuIgorIlxuIgorIiAgICAgICAgY3VybCAtLWxpbWl0LXJhdGUgMTAyNDAgd3d3LmZhci1hd2F5LXNpdGUuY29tXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBPciBwcmV2ZW50IGN1cmwgZnJvbSB1cGxvYWRpbmcgZGF0YSBmYXN0ZXIgdGhhbiAxIG1lZ2FieXRlIHBlciBzZWNvbmQ6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC1UIHVwbG9hZCAtLWxpbWl0LXJhdGUgMU0gZnRwOi8vdXBsb2Fkc2hlcmVwbGVhc2UuY29tXG4iCisiXG4iCisiICBXaGVuIHVzaW5nIHRoZSAtLWxpbWl0LXJhdGUgb3B0aW9uLCB0aGUgdHJhbnNmZXIgcmF0ZSBpcyByZWd1bGF0ZWQgb24gYVxuIgorIiAgcGVyLXNlY29uZCBiYXNpcywgd2hpY2ggd2lsbCBjYXVzZSB0aGUgdG90YWwgdHJhbnNmZXIgc3BlZWQgdG8gYmVjb21lIGxvd2VyXG4iCisiICB0aGFuIHRoZSBnaXZlbiBudW1iZXIuIFNvbWV0aW1lcyBvZiBjb3Vyc2Ugc3Vic3RhbnRpYWxseSBsb3dlciwgaWYgeW91clxuIgorIiAgdHJhbnNmZXIgc3RhbGxzIGR1cmluZyBwZXJpb2RzLlxuIgorIlxuIgorIkNPTkZJRyBGSUxFXG4iCisiXG4iCisiICBDdXJsIGF1dG9tYXRpY2FsbHkgdHJpZXMgdG8gcmVhZCB0aGUgLmN1cmxyYyBmaWxlIChvciBfY3VybHJjIGZpbGUgb24gd2luMzJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIHN5c3RlbXMpIGZyb20gdGhlIHVzZXIncyBob21lIGRpciBvbiBzdGFydHVwLlxuIgorIlxuIgorIiAgVGhlIGNvbmZpZyBmaWxlIGNvdWxkIGJlIG1hZGUgdXAgd2l0aCBub3JtYWwgY29tbWFuZCBsaW5lIHN3aXRjaGVzLCBidXQgeW91XG4iCisiICBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBsb25nIG9wdGlvbnMgd2l0aG91dCB0aGUgZGFzaGVzIHRvIG1ha2UgaXQgbW9yZVxuIgorIiAgcmVhZGFibGUuIFlvdSBjYW4gc2VwYXJhdGUgdGhlIG9wdGlvbnMgYW5kIHRoZSBwYXJhbWV0ZXIgd2l0aCBzcGFjZXMsIG9yXG4iCisiICB3aXRoID0gb3IgOi4gQ29tbWVudHMgY2FuIGJlIHVzZWQgd2l0aGluIHRoZSBmaWxlLiBJZiB0aGUgZmlyc3QgbGV0dGVyIG9uIGFcbiIKKyIgIGxpbmUgaXMgYSAnIyctc3ltYm9sIHRoZSByZXN0IG9mIHRoZSBsaW5lIGlzIHRyZWF0ZWQgYXMgYSBjb21tZW50LlxuIgorIlxuIgorIiAgSWYgeW91IHdhbnQgdGhlIHBhcmFtZXRlciB0byBjb250YWluIHNwYWNlcywgeW91IG11c3QgZW5jbG9zZSB0aGUgZW50aXJlXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBwYXJhbWV0ZXIgd2l0aGluIGRvdWJsZSBxdW90ZXMgKFwiKS4gV2l0aGluIHRob3NlIHF1b3RlcywgeW91IHNwZWNpZnkgYVxuIgorIiAgcXVvdGUgYXMgXFxcIi5cbiIKKyJcbiIKKyIgIE5PVEU6IFlvdSBtdXN0IHNwZWNpZnkgb3B0aW9ucyBhbmQgdGhlaXIgYXJndW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUuXG4iCisiXG4iCisiICBFeGFtcGxlLCBzZXQgZGVmYXVsdCB0aW1lIG91dCBhbmQgcHJveHkgaW4gYSBjb25maWcgZmlsZTpcbiIKKyJcbiIKKyIgICAgICAgICMgV2Ugd2FudCBhIDMwIG1pbnV0ZSB0aW1lb3V0OlxuIgorIiAgICAgICAgLW0gMTgwMFxuIgorIiAgICAgICAgIyAuLi4gYW5kIHdlIHVzZSBhIHByb3h5IGZvciBhbGwgYWNjZXNzZXM6XG4iCisiICAgICAgICBwcm94eSA9IHByb3h5Lm91ci5kb21haW4uY29tOjgwODBcbiIKKyJcbiIKKyIgIFdoaXRlIHNwYWNlcyBBUkUgc2lnbmlmaWNhbnQgYXQgdGhlIGVuZCBvZiBsaW5lcywgYnV0IGFsbCB3aGl0ZSBzcGFjZXNcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIGxlYWRpbmcgdXAgdG8gdGhlIGZpcnN0IGNoYXJhY3RlcnMgb2YgZWFjaCBsaW5lIGFyZSBpZ25vcmVkLlxuIgorIlxuIgorIiAgUHJldmVudCBjdXJsIGZyb20gcmVhZGluZyB0aGUgZGVmYXVsdCBmaWxlIGJ5IHVzaW5nIC1xIGFzIHRoZSBmaXJzdCBjb21tYW5kXG4iCisiICBsaW5lIHBhcmFtZXRlciwgbGlrZTpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLXEgd3d3LnRoYXRzaXRlLmNvbVxuIgorIlxuIgorIiAgRm9yY2UgY3VybCB0byBnZXQgYW5kIGRpc3BsYXkgYSBsb2NhbCBoZWxwIHBhZ2UgaW4gY2FzZSBpdCBpcyBpbnZva2VkXG4iCisiICB3aXRob3V0IFVSTCBieSBtYWtpbmcgYSBjb25maWcgZmlsZSBzaW1pbGFyIHRvOlxuIgorIlxuIgorIiAgICAgICAgIyBkZWZhdWx0IHVybCB0byBnZXRcbiIKKyIgICAgICAgIHVybCA9IFwiaHR0cDovL2hlbHAud2l0aC5jdXJsLmNvbS9jdXJsaGVscC5odG1sXCJcbiIKKyJcbiIKKyIgIFlvdSBjYW4gc3BlY2lmeSBhbm90aGVyIGNvbmZpZyBmaWxlIHRvIGJlIHJlYWQgYnkgdXNpbmcgdGhlIC1LLy0tY29uZmlnXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBmbGFnLiBJZiB5b3Ugc2V0IGNvbmZpZyBmaWxlIG5hbWUgdG8gXCItXCIgaXQnbGwgcmVhZCB0aGUgY29uZmlnIGZyb20gc3RkaW4sXG4iCisiICB3aGljaCBjYW4gYmUgaGFuZHkgaWYgeW91IHdhbnQgdG8gaGlkZSBvcHRpb25zIGZyb20gYmVpbmcgdmlzaWJsZSBpbiBwcm9jZXNzXG4iCisiICB0YWJsZXMgZXRjOlxuIgorIlxuIgorIiAgICAgICAgZWNobyBcInVzZXIgPSB1c2VyOnBhc3N3ZFwiIHwgY3VybCAtSyAtIGh0dHA6Ly90aGF0LnNlY3JldC5zaXRlLmNvbVxuIgorIlxuIgorIkVYVFJBIEhFQURFUlNcbiIKKyJcbiIKKyIgIFdoZW4gdXNpbmcgY3VybCBpbiB5b3VyIG93biB2ZXJ5IHNwZWNpYWwgcHJvZ3JhbXMsIHlvdSBtYXkgZW5kIHVwIG5lZWRpbmdcbiIKKyIgIHRvIHBhc3Mgb24geW91ciBvd24gY3VzdG9tIGhlYWRlcnMgd2hlbiBnZXR0aW5nIGEgd2ViIHBhZ2UuIFlvdSBjYW4gZG9cbiIKKyIgIHRoaXMgYnkgdXNpbmcgdGhlIC1IIGZsYWcuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBFeGFtcGxlLCBzZW5kIHRoZSBoZWFkZXIgXCJYLXlvdS1hbmQtbWU6IHllc1wiIHRvIHRoZSBzZXJ2ZXIgd2hlbiBnZXR0aW5nIGFcbiIKKyIgIHBhZ2U6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC1IIFwiWC15b3UtYW5kLW1lOiB5ZXNcIiB3d3cubG92ZS5jb21cbiIKKyJcbiIKKyIgIFRoaXMgY2FuIGFsc28gYmUgdXNlZnVsIGluIGNhc2UgeW91IHdhbnQgY3VybCB0byBzZW5kIGEgZGlmZmVyZW50IHRleHQgaW4gYVxuIgorIiAgaGVhZGVyIHRoYW4gaXQgbm9ybWFsbHkgZG9lcy4gVGhlIC1IIGhlYWRlciB5b3Ugc3BlY2lmeSB0aGVuIHJlcGxhY2VzIHRoZVxuIgorIiAgaGVhZGVyIGN1cmwgd291bGQgbm9ybWFsbHkgc2VuZC4gSWYgeW91IHJlcGxhY2UgYW4gaW50ZXJuYWwgaGVhZGVyIHdpdGggYW5cbiIKKyIgIGVtcHR5IG9uZSwgeW91IHByZXZlbnQgdGhhdCBoZWFkZXIgZnJvbSBiZWluZyBzZW50LiBUbyBwcmV2ZW50IHRoZSBIb3N0OlxuIgorIiAgaGVhZGVyIGZyb20gYmVpbmcgdXNlZDpcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgIGN1cmwgLUggXCJIb3N0OlwiIHd3dy5zZXJ2ZXIuY29tXG4iCisiXG4iCisiRlRQIGFuZCBQQVRIIE5BTUVTXG4iCisiXG4iCisiICBEbyBub3RlIHRoYXQgd2hlbiBnZXR0aW5nIGZpbGVzIHdpdGggdGhlIGZ0cDovLyBVUkwsIHRoZSBnaXZlbiBwYXRoIGlzXG4iCisiICByZWxhdGl2ZSB0aGUgZGlyZWN0b3J5IHlvdSBlbnRlci4gVG8gZ2V0IHRoZSBmaWxlICdSRUFETUUnIGZyb20geW91ciBob21lXG4iCisiICBkaXJlY3RvcnkgYXQgeW91ciBmdHAgc2l0ZSwgZG86XG4iCisiXG4iCisiICAgICAgICBjdXJsIGZ0cDovL3VzZXI6cGFzc3dkQG15LnNpdGUuY29tL1JFQURNRVxuIgorIlxuIgorIiAgQnV0IGlmIHlvdSB3YW50IHRoZSBSRUFETUUgZmlsZSBmcm9tIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGF0IHZlcnkgc2FtZVxuIgorIiAgc2l0ZSwgeW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgYWJzb2x1dGUgZmlsZSBuYW1lOlxuIgorIlxuIgorIiAgICAgICAgY3VybCBmdHA6Ly91c2VyOnBhc3N3ZEBteS5zaXRlLmNvbS8vUkVBRE1FXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAoSS5lIHdpdGggYW4gZXh0cmEgc2xhc2ggaW4gZnJvbnQgb2YgdGhlIGZpbGUgbmFtZS4pXG4iCisiXG4iCisiU0ZUUCBhbmQgU0NQIGFuZCBQQVRIIE5BTUVTXG4iCisiXG4iCisiICBXaXRoIHNmdHA6IGFuZCBzY3A6IFVSTHMsIHRoZSBwYXRoIG5hbWUgZ2l2ZW4gaXMgdGhlIGFic29sdXRlIG5hbWUgb24gdGhlXG4iCisiICBzZXJ2ZXIuIFRvIGFjY2VzcyBhIGZpbGUgcmVsYXRpdmUgdG8gdGhlIHJlbW90ZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksXG4iCisiICBwcmVmaXggdGhlIGZpbGUgd2l0aCAvfi8gLCBzdWNoIGFzOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtdSAkVVNFUiBzZnRwOi8vaG9tZS5leGFtcGxlLmNvbS9+Ly5iYXNocmNcbiIKKyJcbiIKKyJGVFAgYW5kIGZpcmV3YWxsc1xuIgorIlxuIgorIiAgVGhlIEZUUCBwcm90b2NvbCByZXF1aXJlcyBvbmUgb2YgdGhlIGludm9sdmVkIHBhcnRpZXMgdG8gb3BlbiBhIHNlY29uZFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgY29ubmVjdGlvbiBhcyBzb29uIGFzIGRhdGEgaXMgYWJvdXQgdG8gZ2V0IHRyYW5zZmVyZWQuIFRoZXJlIGFyZSB0d28gd2F5cyB0b1xuIgorIiAgZG8gdGhpcy5cbiIKKyJcbiIKKyIgIFRoZSBkZWZhdWx0IHdheSBmb3IgY3VybCBpcyB0byBpc3N1ZSB0aGUgUEFTViBjb21tYW5kIHdoaWNoIGNhdXNlcyB0aGVcbiIKKyIgIHNlcnZlciB0byBvcGVuIGFub3RoZXIgcG9ydCBhbmQgYXdhaXQgYW5vdGhlciBjb25uZWN0aW9uIHBlcmZvcm1lZCBieSB0aGVcbiIKKyIgIGNsaWVudC4gVGhpcyBpcyBnb29kIGlmIHRoZSBjbGllbnQgaXMgYmVoaW5kIGEgZmlyZXdhbGwgdGhhdCBkb24ndCBhbGxvd1xuIgorIiAgaW5jb21pbmcgY29ubmVjdGlvbnMuXG4iCisiXG4iCisiICAgICAgICBjdXJsIGZ0cC5kb3dubG9hZC5jb21cbiIKKyJcbiIKKyIgIElmIHRoZSBzZXJ2ZXIgZm9yIGV4YW1wbGUsIGlzIGJlaGluZCBhIGZpcmV3YWxsIHRoYXQgZG9uJ3QgYWxsb3cgY29ubmVjdGlvbnNcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIG9uIG90aGVyIHBvcnRzIHRoYW4gMjEgKG9yIGlmIGl0IGp1c3QgZG9lc24ndCBzdXBwb3J0IHRoZSBQQVNWIGNvbW1hbmQpLCB0aGVcbiIKKyIgIG90aGVyIHdheSB0byBkbyBpdCBpcyB0byB1c2UgdGhlIFBPUlQgY29tbWFuZCBhbmQgaW5zdHJ1Y3QgdGhlIHNlcnZlciB0b1xuIgorIiAgY29ubmVjdCB0byB0aGUgY2xpZW50IG9uIHRoZSBnaXZlbiAoYXMgcGFyYW1ldGVycyB0byB0aGUgUE9SVCBjb21tYW5kKSBJUFxuIgorIiAgbnVtYmVyIGFuZCBwb3J0LlxuIgorIlxuIgorIiAgVGhlIC1QIGZsYWcgdG8gY3VybCBzdXBwb3J0cyBhIGZldyBkaWZmZXJlbnQgb3B0aW9ucy4gWW91ciBtYWNoaW5lIG1heSBoYXZlXG4iCisiICBzZXZlcmFsIElQLWFkZHJlc3NlcyBhbmQvb3IgbmV0d29yayBpbnRlcmZhY2VzIGFuZCBjdXJsIGFsbG93cyB5b3UgdG8gc2VsZWN0XG4iCisiICB3aGljaCBvZiB0aGVtIHRvIHVzZS4gRGVmYXVsdCBhZGRyZXNzIGNhbiBhbHNvIGJlIHVzZWQ6XG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICBjdXJsIC1QIC0gZnRwLmRvd25sb2FkLmNvbVxuIgorIlxuIgorIiAgRG93bmxvYWQgd2l0aCBQT1JUIGJ1dCB1c2UgdGhlIElQIGFkZHJlc3Mgb2Ygb3VyICdsZTAnIGludGVyZmFjZSAodGhpcyBkb2VzXG4iCisiICBub3Qgd29yayBvbiB3aW5kb3dzKTpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLVAgbGUwIGZ0cC5kb3dubG9hZC5jb21cbiIKKyJcbiIKKyIgIERvd25sb2FkIHdpdGggUE9SVCBidXQgdXNlIDE5Mi4xNjguMC4xMCBhcyBvdXIgSVAgYWRkcmVzcyB0byB1c2U6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC1QIDE5Mi4xNjguMC4xMCBmdHAuZG93bmxvYWQuY29tXG4iCisiXG4iCisiTkVUV09SSyBJTlRFUkZBQ0VcbiIKKyJcbiIKKyIgIEdldCBhIHdlYiBwYWdlIGZyb20gYSBzZXJ2ZXIgdXNpbmcgYSBzcGVjaWZpZWQgcG9ydCBmb3IgdGhlIGludGVyZmFjZTpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLS1pbnRlcmZhY2UgZXRoMDoxIGh0dHA6Ly93d3cubmV0c2NhcGUuY29tL1xuIgorIlxuIgorIiAgb3JcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgIGN1cmwgLS1pbnRlcmZhY2UgMTkyLjE2OC4xLjEwIGh0dHA6Ly93d3cubmV0c2NhcGUuY29tL1xuIgorIlxuIgorIkhUVFBTXG4iCisiXG4iCisiICBTZWN1cmUgSFRUUCByZXF1aXJlcyBTU0wgbGlicmFyaWVzIHRvIGJlIGluc3RhbGxlZCBhbmQgdXNlZCB3aGVuIGN1cmwgaXNcbiIKKyIgIGJ1aWx0LiBJZiB0aGF0IGlzIGRvbmUsIGN1cmwgaXMgY2FwYWJsZSBvZiByZXRyaWV2aW5nIGFuZCBwb3N0aW5nIGRvY3VtZW50c1xuIgorIiAgdXNpbmcgdGhlIEhUVFBTIHByb3RvY29sLlxuIgorIlxuIgorIiAgRXhhbXBsZTpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgaHR0cHM6Ly93d3cuc2VjdXJlLXNpdGUuY29tXG4iCisiXG4iCisiICBDdXJsIGlzIGFsc28gY2FwYWJsZSBvZiB1c2luZyB5b3VyIHBlcnNvbmFsIGNlcnRpZmljYXRlcyB0byBnZXQvcG9zdCBmaWxlc1xuIgorIiAgZnJvbSBzaXRlcyB0aGF0IHJlcXVpcmUgdmFsaWQgY2VydGlmaWNhdGVzLiBUaGUgb25seSBkcmF3YmFjayBpcyB0aGF0IHRoZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgY2VydGlmaWNhdGUgbmVlZHMgdG8gYmUgaW4gUEVNLWZvcm1hdC4gUEVNIGlzIGEgc3RhbmRhcmQgYW5kIG9wZW4gZm9ybWF0IHRvXG4iCisiICBzdG9yZSBjZXJ0aWZpY2F0ZXMgd2l0aCwgYnV0IGl0IGlzIG5vdCB1c2VkIGJ5IHRoZSBtb3N0IGNvbW1vbmx5IHVzZWRcbiIKKyIgIGJyb3dzZXJzIChOZXRzY2FwZSBhbmQgTVNJRSBib3RoIHVzZSB0aGUgc28gY2FsbGVkIFBLQ1MjMTIgZm9ybWF0KS4gSWYgeW91XG4iCisiICB3YW50IGN1cmwgdG8gdXNlIHRoZSBjZXJ0aWZpY2F0ZXMgeW91IHVzZSB3aXRoIHlvdXIgKGZhdm91cml0ZSkgYnJvd3NlciwgeW91XG4iCisiICBtYXkgbmVlZCB0byBkb3dubG9hZC9jb21waWxlIGEgY29udmVydGVyIHRoYXQgY2FuIGNvbnZlcnQgeW91ciBicm93c2VyJ3NcbiIKKyIgIGZvcm1hdHRlZCBjZXJ0aWZpY2F0ZXMgdG8gUEVNIGZvcm1hdHRlZCBvbmVzLiBUaGlzIGtpbmQgb2YgY29udmVydGVyIGlzXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBpbmNsdWRlZCBpbiByZWNlbnQgdmVyc2lvbnMgb2YgT3BlblNTTCwgYW5kIGZvciBvbGRlciB2ZXJzaW9ucyBEciBTdGVwaGVuXG4iCisiICBOLiBIZW5zb24gaGFzIHdyaXR0ZW4gYSBwYXRjaCBmb3IgU1NMZWF5IHRoYXQgYWRkcyB0aGlzIGZ1bmN0aW9uYWxpdHkuIFlvdVxuIgorIiAgY2FuIGdldCBoaXMgcGF0Y2ggKHRoYXQgcmVxdWlyZXMgYW4gU1NMZWF5IGluc3RhbGxhdGlvbikgZnJvbSBoaXMgc2l0ZSBhdDpcbiIKKyIgIGh0dHA6Ly93d3cuZHJoLWNvbnN1bHRhbmN5LmRlbW9uLmNvLnVrL1xuIgorIlxuIgorIiAgRXhhbXBsZSBvbiBob3cgdG8gYXV0b21hdGljYWxseSByZXRyaWV2ZSBhIGRvY3VtZW50IHVzaW5nIGEgY2VydGlmaWNhdGUgd2l0aFxuIgorIiAgYSBwZXJzb25hbCBwYXNzd29yZDpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLUUgL3BhdGgvdG8vY2VydC5wZW06cGFzc3dvcmQgaHR0cHM6Ly9zZWN1cmUuc2l0ZS5jb20vXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBJZiB5b3UgbmVnbGVjdCB0byBzcGVjaWZ5IHRoZSBwYXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB5b3Ugd2lsbCBiZVxuIgorIiAgcHJvbXB0ZWQgZm9yIHRoZSBjb3JyZWN0IHBhc3N3b3JkIGJlZm9yZSBhbnkgZGF0YSBjYW4gYmUgcmVjZWl2ZWQuXG4iCisiXG4iCisiICBNYW55IG9sZGVyIFNTTC1zZXJ2ZXJzIGhhdmUgcHJvYmxlbXMgd2l0aCBTU0x2MyBvciBUTFMsIHRoYXQgbmV3ZXIgdmVyc2lvbnNcbiIKKyIgIG9mIE9wZW5TU0wgZXRjIGlzIHVzaW5nLCB0aGVyZWZvcmUgaXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBzcGVjaWZ5IHdoYXRcbiIKKyIgIFNTTC12ZXJzaW9uIGN1cmwgc2hvdWxkIHVzZS4gVXNlIC0zLCAtMiBvciAtMSB0byBzcGVjaWZ5IHRoYXQgZXhhY3QgU1NMXG4iCisiICB2ZXJzaW9uIHRvIHVzZSAoZm9yIFNTTHYzLCBTU0x2MiBvciBUTFN2MSByZXNwZWN0aXZlbHkpOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtMiBodHRwczovL3NlY3VyZS5zaXRlLmNvbS9cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIE90aGVyd2lzZSwgY3VybCB3aWxsIGZpcnN0IGF0dGVtcHQgdG8gdXNlIHYzIGFuZCB0aGVuIHYyLlxuIgorIlxuIgorIiAgVG8gdXNlIE9wZW5TU0wgdG8gY29udmVydCB5b3VyIGZhdm91cml0ZSBicm93c2VyJ3MgY2VydGlmaWNhdGUgaW50byBhIFBFTVxuIgorIiAgZm9ybWF0dGVkIG9uZSB0aGF0IGN1cmwgY2FuIHVzZSwgZG8gc29tZXRoaW5nIGxpa2UgdGhpcyAoYXNzdW1pbmcgbmV0c2NhcGUsXG4iCisiICBidXQgSUUgaXMgbGlrZWx5IHRvIHdvcmsgc2ltaWxhcmx5KTpcbiIKKyJcbiIKKyIgICAgWW91IHN0YXJ0IHdpdGggaGl0dGluZyB0aGUgJ3NlY3VyaXR5JyBtZW51IGJ1dHRvbiBpbiBuZXRzY2FwZS5cbiIKKyJcbiIKKyIgICAgU2VsZWN0ICdjZXJ0aWZpY2F0ZXMtPnlvdXJzJyBhbmQgdGhlbiBwaWNrIGEgY2VydGlmaWNhdGUgaW4gdGhlIGxpc3RcbiIKKyJcbiIKKyIgICAgUHJlc3MgdGhlICdleHBvcnQnIGJ1dHRvblxuIgorIlxuIgorIiAgICBlbnRlciB5b3VyIFBJTiBjb2RlIGZvciB0aGUgY2VydHNcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgc2VsZWN0IGEgcHJvcGVyIHBsYWNlIHRvIHNhdmUgaXRcbiIKKyJcbiIKKyIgICAgUnVuIHRoZSAnb3BlbnNzbCcgYXBwbGljYXRpb24gdG8gY29udmVydCB0aGUgY2VydGlmaWNhdGUuIElmIHlvdSBjZCB0byB0aGVcbiIKKyIgICAgb3BlbnNzbCBpbnN0YWxsYXRpb24sIHlvdSBjYW4gZG8gaXQgbGlrZTpcbiIKKyJcbiIKKyIgICAgICMgLi9hcHBzL29wZW5zc2wgcGtjczEyIC1pbiBbZmlsZSB5b3Ugc2F2ZWRdIC1jbGNlcnRzIC1vdXQgW1BFTWZpbGVdXG4iCisiXG4iCisiXG4iCisiUkVTVU1JTkcgRklMRSBUUkFOU0ZFUlNcbiIKKyJcbiIKKyIgVG8gY29udGludWUgYSBmaWxlIHRyYW5zZmVyIHdoZXJlIGl0IHdhcyBwcmV2aW91c2x5IGFib3J0ZWQsIGN1cmwgc3VwcG9ydHNcbiIKKyIgcmVzdW1lIG9uIGh0dHAocykgZG93bmxvYWRzIGFzIHdlbGwgYXMgZnRwIHVwbG9hZHMgYW5kIGRvd25sb2Fkcy5cbiIKKyJcbiIKKyIgQ29udGludWUgZG93bmxvYWRpbmcgYSBkb2N1bWVudDpcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgICAgICAgIGN1cmwgLUMgLSAtbyBmaWxlIGZ0cDovL2Z0cC5zZXJ2ZXIuY29tL3BhdGgvZmlsZVxuIgorIlxuIgorIiBDb250aW51ZSB1cGxvYWRpbmcgYSBkb2N1bWVudCgqMSk6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC1DIC0gLVQgZmlsZSBmdHA6Ly9mdHAuc2VydmVyLmNvbS9wYXRoL2ZpbGVcbiIKKyJcbiIKKyIgQ29udGludWUgZG93bmxvYWRpbmcgYSBkb2N1bWVudCBmcm9tIGEgd2ViIHNlcnZlcigqMik6XG4iCisiXG4iCisiICAgICAgICBjdXJsIC1DIC0gLW8gZmlsZSBodHRwOi8vd3d3LnNlcnZlci5jb20vXG4iCisiXG4iCisiICgqMSkgPSBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGZ0cCBzZXJ2ZXIgc3VwcG9ydHMgdGhlIG5vbi1zdGFuZGFyZCBjb21tYW5kXG4iCisiICAgICAgICBTSVpFLiBJZiBpdCBkb2Vzbid0LCBjdXJsIHdpbGwgc2F5IHNvLlxuIgorIlxuIgorIiAoKjIpID0gVGhpcyByZXF1aXJlcyB0aGF0IHRoZSB3ZWIgc2VydmVyIHN1cHBvcnRzIGF0IGxlYXN0IEhUVFAvMS4xLiBJZiBpdFxuIgorIiAgICAgICAgZG9lc24ndCwgY3VybCB3aWxsIHNheSBzby5cbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyJUSU1FIENPTkRJVElPTlNcbiIKKyJcbiIKKyIgSFRUUCBhbGxvd3MgYSBjbGllbnQgdG8gc3BlY2lmeSBhIHRpbWUgY29uZGl0aW9uIGZvciB0aGUgZG9jdW1lbnQgaXRcbiIKKyIgcmVxdWVzdHMuIEl0IGlzIElmLU1vZGlmaWVkLVNpbmNlIG9yIElmLVVubW9kaWZpZWQtU2luY2UuIEN1cmwgYWxsb3cgeW91IHRvXG4iCisiIHNwZWNpZnkgdGhlbSB3aXRoIHRoZSAtei8tLXRpbWUtY29uZCBmbGFnLlxuIgorIlxuIgorIiBGb3IgZXhhbXBsZSwgeW91IGNhbiBlYXNpbHkgbWFrZSBhIGRvd25sb2FkIHRoYXQgb25seSBnZXRzIHBlcmZvcm1lZCBpZiB0aGVcbiIKKyIgcmVtb3RlIGZpbGUgaXMgbmV3ZXIgdGhhbiBhIGxvY2FsIGNvcHkuIEl0IHdvdWxkIGJlIG1hZGUgbGlrZTpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLXogbG9jYWwuaHRtbCBodHRwOi8vcmVtb3RlLnNlcnZlci5jb20vcmVtb3RlLmh0bWxcbiIKKyJcbiIKKyIgT3IgeW91IGNhbiBkb3dubG9hZCBhIGZpbGUgb25seSBpZiB0aGUgbG9jYWwgZmlsZSBpcyBuZXdlciB0aGFuIHRoZSByZW1vdGVcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgb25lLiBEbyB0aGlzIGJ5IHByZXBlbmRpbmcgdGhlIGRhdGUgc3RyaW5nIHdpdGggYSAnLScsIGFzIGluOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAteiAtbG9jYWwuaHRtbCBodHRwOi8vcmVtb3RlLnNlcnZlci5jb20vcmVtb3RlLmh0bWxcbiIKKyJcbiIKKyIgWW91IGNhbiBzcGVjaWZ5IGEgXCJmcmVlIHRleHRcIiBkYXRlIGFzIGNvbmRpdGlvbi4gVGVsbCBjdXJsIHRvIG9ubHkgZG93bmxvYWRcbiIKKyIgdGhlIGZpbGUgaWYgaXQgd2FzIHVwZGF0ZWQgc2luY2UgSmFudWFyeSAxMiwgMjAxMjpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLXogXCJKYW4gMTIgMjAxMlwiIGh0dHA6Ly9yZW1vdGUuc2VydmVyLmNvbS9yZW1vdGUuaHRtbFxuIgorIlxuIgorIiBDdXJsIHdpbGwgdGhlbiBhY2NlcHQgYSB3aWRlIHJhbmdlIG9mIGRhdGUgZm9ybWF0cy4gWW91IGFsd2F5cyBtYWtlIHRoZSBkYXRlXG4iCisiIGNoZWNrIHRoZSBvdGhlciB3YXkgYXJvdW5kIGJ5IHByZXBlbmRpbmcgaXQgd2l0aCBhIGRhc2ggJy0nLlxuIgorIlxuIgorIkRJQ1RcbiIKKyJcbiIKKyIgIEZvciBmdW4gdHJ5XG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgICAgICBjdXJsIGRpY3Q6Ly9kaWN0Lm9yZy9tOmN1cmxcbiIKKyIgICAgICAgIGN1cmwgZGljdDovL2RpY3Qub3JnL2Q6aGVpc2VuYnVnOmphcmdvblxuIgorIiAgICAgICAgY3VybCBkaWN0Oi8vZGljdC5vcmcvZDpkYW5pZWw6d2ViMTkxM1xuIgorIlxuIgorIiAgQWxpYXNlcyBmb3IgJ20nIGFyZSAnbWF0Y2gnIGFuZCAnZmluZCcsIGFuZCBhbGlhc2VzIGZvciAnZCcgYXJlICdkZWZpbmUnXG4iCisiICBhbmQgJ2xvb2t1cCcuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgICAgICAgY3VybCBkaWN0Oi8vZGljdC5vcmcvZmluZDpjdXJsXG4iCisiXG4iCisiICBDb21tYW5kcyB0aGF0IGJyZWFrIHRoZSBVUkwgZGVzY3JpcHRpb24gb2YgdGhlIFJGQyAoYnV0IG5vdCB0aGUgRElDVFxuIgorIiAgcHJvdG9jb2wpIGFyZVxuIgorIlxuIgorIiAgICAgICAgY3VybCBkaWN0Oi8vZGljdC5vcmcvc2hvdzpkYlxuIgorIiAgICAgICAgY3VybCBkaWN0Oi8vZGljdC5vcmcvc2hvdzpzdHJhdFxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgQXV0aGVudGljYXRpb24gaXMgc3RpbGwgbWlzc2luZyAoYnV0IHRoaXMgaXMgbm90IHJlcXVpcmVkIGJ5IHRoZSBSRkMpXG4iCisiXG4iCisiTERBUFxuIgorIlxuIgorIiAgSWYgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBPcGVuTERBUCBsaWJyYXJ5LCBjdXJsIGNhbiB0YWtlIGFkdmFudGFnZSBvZiBpdFxuIgorIiAgYW5kIG9mZmVyIGxkYXA6Ly8gc3VwcG9ydC5cbiIKKyJcbiIKKyIgIExEQVAgaXMgYSBjb21wbGV4IHRoaW5nIGFuZCB3cml0aW5nIGFuIExEQVAgcXVlcnkgaXMgbm90IGFuIGVhc3kgdGFzay4gSSBkb1xuIgorIiAgYWR2aWNlIHlvdSB0byBkaWcgdXAgdGhlIHN5bnRheCBkZXNjcmlwdGlvbiBmb3IgdGhhdCBlbHNld2hlcmUuIFR3byBwbGFjZXNcbiIKKyIgIHRoYXQgbWlnaHQgc3VpdCB5b3UgYXJlOlxuIgorIlxuIgorIiAgTmV0c2NhcGUncyBcIk5ldHNjYXBlIERpcmVjdG9yeSBTREsgMy4wIGZvciBDIFByb2dyYW1tZXIncyBHdWlkZSBDaGFwdGVyIDEwOlxuIgorIiAgV29ya2luZyB3aXRoIExEQVAgVVJMc1wiOlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgaHR0cDovL2RldmVsb3Blci5uZXRzY2FwZS5jb20vZG9jcy9tYW51YWxzL2RpcnNkay9jc2RrMzAvdXJsLmh0bVxuIgorIlxuIgorIiAgUkZDIDIyNTUsIFwiVGhlIExEQVAgVVJMIEZvcm1hdFwiIGh0dHA6Ly9jdXJsLmhheHguc2UvcmZjL3JmYzIyNTUudHh0XG4iCisiXG4iCisiICBUbyBzaG93IHlvdSBhbiBleGFtcGxlLCB0aGlzIGlzIG5vdyBJIGNhbiBnZXQgYWxsIHBlb3BsZSBmcm9tIG15IGxvY2FsIExEQVBcbiIKKyIgIHNlcnZlciB0aGF0IGhhcyBhIGNlcnRhaW4gc3ViLWRvbWFpbiBpbiB0aGVpciBlbWFpbCBhZGRyZXNzOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtQiBcImxkYXA6Ly9sZGFwLmZyb250ZWMuc2Uvbz1mcm9udGVjPz9zdWI/bWFpbD0qc3RoLmZyb250ZWMuc2VcIlxuIgorIlxuIgorIiAgSWYgSSB3YW50IHRoZSBzYW1lIGluZm8gaW4gSFRNTCBmb3JtYXQsIEkgY2FuIGdldCBpdCBieSBub3QgdXNpbmcgdGhlIC1CXG4iCisiICAoZW5mb3JjZSBBU0NJSSkgZmxhZy5cbiIKKyJcbiIKKyJFTlZJUk9OTUVOVCBWQVJJQUJMRVNcbiIKKyJcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIEN1cmwgcmVhZHMgYW5kIHVuZGVyc3RhbmRzIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzOlxuIgorIlxuIgorIiAgICAgICAgaHR0cF9wcm94eSwgSFRUUFNfUFJPWFksIEZUUF9QUk9YWVxuIgorIlxuIgorIiAgVGhleSBzaG91bGQgYmUgc2V0IGZvciBwcm90b2NvbC1zcGVjaWZpYyBwcm94aWVzLiBHZW5lcmFsIHByb3h5IHNob3VsZCBiZVxuIgorIiAgc2V0IHdpdGhcbiIKKyJcbiIKKyIgICAgICAgIEFMTF9QUk9YWVxuIgorIlxuIgorIiAgQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBob3N0IG5hbWVzIHRoYXQgc2hvdWxkbid0IGdvIHRocm91Z2ggYW55IHByb3h5IGlzXG4iCisiICBzZXQgaW4gKG9ubHkgYW4gYXN0ZXJpc2ssICcqJyBtYXRjaGVzIGFsbCBob3N0cylcbiIKKyJcbiIKKyIgICAgICAgIE5PX1BST1hZXG4iCisiXG4iCisiICBJZiB0aGUgaG9zdCBuYW1lIG1hdGNoZXMgb25lIG9mIHRoZXNlIHN0cmluZ3MsIG9yIHRoZSBob3N0IGlzIHdpdGhpbiB0aGVcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIGRvbWFpbiBvZiBvbmUgb2YgdGhlc2Ugc3RyaW5ncywgdHJhbnNhY3Rpb25zIHdpdGggdGhhdCBub2RlIHdpbGwgbm90IGJlXG4iCisiICBwcm94aWVkLlxuIgorIlxuIgorIlxuIgorIiAgVGhlIHVzYWdlIG9mIHRoZSAteC8tLXByb3h5IGZsYWcgb3ZlcnJpZGVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4iCisiXG4iCisiTkVUUkNcbiIKKyJcbiIKKyIgIFVuaXggaW50cm9kdWNlZCB0aGUgLm5ldHJjIGNvbmNlcHQgYSBsb25nIHRpbWUgYWdvLiBJdCBpcyBhIHdheSBmb3IgYSB1c2VyXG4iCisiICB0byBzcGVjaWZ5IG5hbWUgYW5kIHBhc3N3b3JkIGZvciBjb21tb25seSB2aXNpdGVkIGZ0cCBzaXRlcyBpbiBhIGZpbGUgc29cbiIKKyIgIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gdHlwZSB0aGVtIGluIGVhY2ggdGltZSB5b3UgdmlzaXQgdGhvc2Ugc2l0ZXMuIFlvdVxuIgorIiAgcmVhbGl6ZSB0aGlzIGlzIGEgYmlnIHNlY3VyaXR5IHJpc2sgaWYgc29tZW9uZSBlbHNlIGdldHMgaG9sZCBvZiB5b3VyXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBwYXNzd29yZHMsIHNvIHRoZXJlZm9yZSBtb3N0IHVuaXggcHJvZ3JhbXMgd29uJ3QgcmVhZCB0aGlzIGZpbGUgdW5sZXNzIGl0IGlzXG4iCisiICBvbmx5IHJlYWRhYmxlIGJ5IHlvdXJzZWxmIChjdXJsIGRvZXNuJ3QgY2FyZSB0aG91Z2gpLlxuIgorIlxuIgorIiAgQ3VybCBzdXBwb3J0cyAubmV0cmMgZmlsZXMgaWYgdG9sZCBzbyAodXNpbmcgdGhlIC1uLy0tbmV0cmMgYW5kXG4iCisiICAtLW5ldHJjLW9wdGlvbmFsIG9wdGlvbnMpLiBUaGlzIGlzIG5vdCByZXN0cmljdGVkIHRvIG9ubHkgZnRwLFxuIgorIiAgYnV0IGN1cmwgY2FuIHVzZSBpdCBmb3IgYWxsIHByb3RvY29scyB3aGVyZSBhdXRoZW50aWNhdGlvbiBpcyB1c2VkLlxuIgorIlxuIgorIiAgQSB2ZXJ5IHNpbXBsZSAubmV0cmMgZmlsZSBjb3VsZCBsb29rIHNvbWV0aGluZyBsaWtlOlxuIgorIlxuIgorIiAgICAgICAgbWFjaGluZSBjdXJsLmhheHguc2UgbG9naW4gaWFtZGFuaWVsIHBhc3N3b3JkIG15c2VjcmV0XG4iCisiXG4iCisiQ1VTVE9NIE9VVFBVVFxuIgorIlxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgVG8gYmV0dGVyIGFsbG93IHNjcmlwdCBwcm9ncmFtbWVycyB0byBnZXQgdG8ga25vdyBhYm91dCB0aGUgcHJvZ3Jlc3Mgb2ZcbiIKKyIgIGN1cmwsIHRoZSAtdy8tLXdyaXRlLW91dCBvcHRpb24gd2FzIGludHJvZHVjZWQuIFVzaW5nIHRoaXMsIHlvdSBjYW4gc3BlY2lmeVxuIgorIiAgd2hhdCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBwcmV2aW91cyB0cmFuc2ZlciB5b3Ugd2FudCB0byBleHRyYWN0LlxuIgorIlxuIgorIiAgVG8gZGlzcGxheSB0aGUgYW1vdW50IG9mIGJ5dGVzIGRvd25sb2FkZWQgdG9nZXRoZXIgd2l0aCBzb21lIHRleHQgYW5kIGFuXG4iCisiICBlbmRpbmcgbmV3bGluZTpcbiIKKyJcbiIKKyIgICAgICAgIGN1cmwgLXcgJ1dlIGRvd25sb2FkZWQgJXtzaXplX2Rvd25sb2FkfSBieXRlc1xcbicgd3d3LmRvd25sb2FkLmNvbVxuIgorIlxuIgorIktFUkJFUk9TIEZUUCBUUkFOU0ZFUlxuIgorIlxuIgorIiAgQ3VybCBzdXBwb3J0cyBrZXJiZXJvczQgYW5kIGtlcmJlcm9zNS9HU1NBUEkgZm9yIEZUUCB0cmFuc2ZlcnMuIFlvdSBuZWVkXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICB0aGUga2VyYmVyb3MgcGFja2FnZSBpbnN0YWxsZWQgYW5kIHVzZWQgYXQgY3VybCBidWlsZCB0aW1lIGZvciBpdCB0byBiZVxuIgorIiAgdXNlZC5cbiIKKyJcbiIKKyIgIEZpcnN0LCBnZXQgdGhlIGtyYi10aWNrZXQgdGhlIG5vcm1hbCB3YXksIGxpa2Ugd2l0aCB0aGUga2luaXQva2F1dGggdG9vbC5cbiIKKyIgIFRoZW4gdXNlIGN1cmwgaW4gd2F5IHNpbWlsYXIgdG86XG4iCisiXG4iCisiICAgICAgICBjdXJsIC0ta3JiIHByaXZhdGUgZnRwOi8va3JiNHNpdGUuY29tIC11IHVzZXJuYW1lOmZha2Vwd2RcbiIKKyJcbiIKKyIgIFRoZXJlJ3Mgbm8gdXNlIGZvciBhIHBhc3N3b3JkIG9uIHRoZSAtdSBzd2l0Y2gsIGJ1dCBhIGJsYW5rIG9uZSB3aWxsIG1ha2VcbiIKKyIgIGN1cmwgYXNrIGZvciBvbmUgYW5kIHlvdSBhbHJlYWR5IGVudGVyZWQgdGhlIHJlYWwgcGFzc3dvcmQgdG8ga2luaXQva2F1dGguXG4iCisiXG4iCisiVEVMTkVUXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBUaGUgY3VybCB0ZWxuZXQgc3VwcG9ydCBpcyBiYXNpYyBhbmQgdmVyeSBlYXN5IHRvIHVzZS4gQ3VybCBwYXNzZXMgYWxsIGRhdGFcbiIKKyIgIHBhc3NlZCB0byBpdCBvbiBzdGRpbiB0byB0aGUgcmVtb3RlIHNlcnZlci4gQ29ubmVjdCB0byBhIHJlbW90ZSB0ZWxuZXRcbiIKKyIgIHNlcnZlciB1c2luZyBhIGNvbW1hbmQgbGluZSBzaW1pbGFyIHRvOlxuIgorIlxuIgorIiAgICAgICAgY3VybCB0ZWxuZXQ6Ly9yZW1vdGUuc2VydmVyLmNvbVxuIgorIlxuIgorIiAgQW5kIGVudGVyIHRoZSBkYXRhIHRvIHBhc3MgdG8gdGhlIHNlcnZlciBvbiBzdGRpbi4gVGhlIHJlc3VsdCB3aWxsIGJlIHNlbnRcbiIKKyIgIHRvIHN0ZG91dCBvciB0byB0aGUgZmlsZSB5b3Ugc3BlY2lmeSB3aXRoIC1vLlxuIgorIlxuIgorIiAgWW91IG1pZ2h0IHdhbnQgdGhlIC1OLy0tbm8tYnVmZmVyIG9wdGlvbiB0byBzd2l0Y2ggb2ZmIHRoZSBidWZmZXJlZCBvdXRwdXRcbiIKKyIgIGZvciBzbG93IGNvbm5lY3Rpb25zIG9yIHNpbWlsYXIuXG4iCisiXG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBQYXNzIG9wdGlvbnMgdG8gdGhlIHRlbG5ldCBwcm90b2NvbCBuZWdvdGlhdGlvbiwgYnkgdXNpbmcgdGhlIC10IG9wdGlvbi4gVG9cbiIKKyIgIHRlbGwgdGhlIHNlcnZlciB3ZSB1c2UgYSB2dDEwMCB0ZXJtaW5hbCwgdHJ5IHNvbWV0aGluZyBsaWtlOlxuIgorIlxuIgorIiAgICAgICAgY3VybCAtdFRUWVBFPXZ0MTAwIHRlbG5ldDovL3JlbW90ZS5zZXJ2ZXIuY29tXG4iCisiXG4iCisiICBPdGhlciBpbnRlcmVzdGluZyBvcHRpb25zIGZvciBpdCAtdCBpbmNsdWRlOlxuIgorIlxuIgorIiAgIC0gWERJU1BMT0M9PFggZGlzcGxheT4gU2V0cyB0aGUgWCBkaXNwbGF5IGxvY2F0aW9uLlxuIgorIlxuIgorIiAgIC0gTkVXX0VOVj08dmFyLHZhbD4gU2V0cyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiIKKyJcbiIKKyIgIE5PVEU6IHRoZSB0ZWxuZXQgcHJvdG9jb2wgZG9lcyBub3Qgc3BlY2lmeSBhbnkgd2F5IHRvIGxvZ2luIHdpdGggYSBzcGVjaWZpZWRcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIHVzZXIgYW5kIHBhc3N3b3JkIHNvIGN1cmwgY2FuJ3QgZG8gdGhhdCBhdXRvbWF0aWNhbGx5LiBUbyBkbyB0aGF0LCB5b3UgbmVlZFxuIgorIiAgdG8gdHJhY2sgd2hlbiB0aGUgbG9naW4gcHJvbXB0IGlzIHJlY2VpdmVkIGFuZCBzZW5kIHRoZSB1c2VybmFtZSBhbmRcbiIKKyIgIHBhc3N3b3JkIGFjY29yZGluZ2x5LlxuIgorIlxuIgorIlBFUlNJU1RFTlQgQ09OTkVDVElPTlNcbiIKKyJcbiIKKyIgIFNwZWNpZnlpbmcgbXVsdGlwbGUgZmlsZXMgb24gYSBzaW5nbGUgY29tbWFuZCBsaW5lIHdpbGwgbWFrZSBjdXJsIHRyYW5zZmVyXG4iCisiICBhbGwgb2YgdGhlbSwgb25lIGFmdGVyIHRoZSBvdGhlciBpbiB0aGUgc3BlY2lmaWVkIG9yZGVyLlxuIgorIlxuIgorIiAgbGliY3VybCB3aWxsIGF0dGVtcHQgdG8gdXNlIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgZm9yIHRoZSB0cmFuc2ZlcnMgc28gdGhhdFxuIgorIiAgdGhlIHNlY29uZCB0cmFuc2ZlciB0byB0aGUgc2FtZSBob3N0IGNhbiB1c2UgdGhlIHNhbWUgY29ubmVjdGlvbiB0aGF0IHdhc1xuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgYWxyZWFkeSBpbml0aWF0ZWQgYW5kIHdhcyBsZWZ0IG9wZW4gaW4gdGhlIHByZXZpb3VzIHRyYW5zZmVyLiBUaGlzIGdyZWF0bHlcbiIKKyIgIGRlY3JlYXNlcyBjb25uZWN0aW9uIHRpbWUgZm9yIGFsbCBidXQgdGhlIGZpcnN0IHRyYW5zZmVyIGFuZCBpdCBtYWtlcyBhIGZhclxuIgorIiAgYmV0dGVyIHVzZSBvZiB0aGUgbmV0d29yay5cbiIKKyJcbiIKKyIgIE5vdGUgdGhhdCBjdXJsIGNhbm5vdCB1c2UgcGVyc2lzdGVudCBjb25uZWN0aW9ucyBmb3IgdHJhbnNmZXJzIHRoYXQgYXJlIHVzZWRcbiIKKyIgIGluIHN1YnNlcXVlbmNlIGN1cmwgaW52b2tlcy4gVHJ5IHRvIHN0dWZmIGFzIG1hbnkgVVJMcyBhcyBwb3NzaWJsZSBvbiB0aGVcbiIKKyIgIHNhbWUgY29tbWFuZCBsaW5lIGlmIHRoZXkgYXJlIHVzaW5nIHRoZSBzYW1lIGhvc3QsIGFzIHRoYXQnbGwgbWFrZSB0aGVcbiIKKyIgIHRyYW5zZmVycyBmYXN0ZXIuIElmIHlvdSB1c2UgYSBodHRwIHByb3h5IGZvciBmaWxlIHRyYW5zZmVycywgcHJhY3RpY2FsbHlcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIGFsbCB0cmFuc2ZlcnMgd2lsbCBiZSBwZXJzaXN0ZW50LlxuIgorIlxuIgorIk1VTFRJUExFIFRSQU5TRkVSUyBXSVRIIEEgU0lOR0xFIENPTU1BTkQgTElORVxuIgorIlxuIgorIiAgQXMgaXMgbWVudGlvbmVkIGFib3ZlLCB5b3UgY2FuIGRvd25sb2FkIG11bHRpcGxlIGZpbGVzIHdpdGggb25lIGNvbW1hbmQgbGluZVxuIgorIiAgYnkgc2ltcGx5IGFkZGluZyBtb3JlIFVSTHMuIElmIHlvdSB3YW50IHRob3NlIHRvIGdldCBzYXZlZCB0byBhIGxvY2FsIGZpbGVcbiIKKyIgIGluc3RlYWQgb2YganVzdCBwcmludGVkIHRvIHN0ZG91dCwgeW91IG5lZWQgdG8gYWRkIG9uZSBzYXZlIG9wdGlvbiBmb3IgZWFjaFxuIgorIiAgVVJMIHlvdSBzcGVjaWZ5LiBOb3RlIHRoYXQgdGhpcyBhbHNvIGdvZXMgZm9yIHRoZSAtTyBvcHRpb24gKGJ1dCBub3RcbiIKKyIgIC0tcmVtb3RlLW5hbWUtYWxsKS5cbiIKKyJcbiIKKyIgIEZvciBleGFtcGxlOiBnZXQgdHdvIGZpbGVzIGFuZCB1c2UgLU8gZm9yIHRoZSBmaXJzdCBhbmQgYSBjdXN0b20gZmlsZVxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgbmFtZSBmb3IgdGhlIHNlY29uZDpcbiIKKyJcbiIKKyIgICAgY3VybCAtTyBodHRwOi8vdXJsLmNvbS9maWxlLnR4dCBmdHA6Ly9mdHAuY29tL21vby5leGUgLW8gbW9vLmpwZ1xuIgorIlxuIgorIiAgWW91IGNhbiBhbHNvIHVwbG9hZCBtdWx0aXBsZSBmaWxlcyBpbiBhIHNpbWlsYXIgZmFzaGlvbjpcbiIKKyJcbiIKKyIgICAgY3VybCAtVCBsb2NhbDEgZnRwOi8vZnRwLmNvbS9tb28uZXhlIC1UIGxvY2FsMiBmdHA6Ly9mdHAuY29tL21vbzIudHh0XG4iCisiXG4iCisiSVB2NlxuIgorIlxuIgorIiAgY3VybCB3aWxsIGNvbm5lY3QgdG8gYSBzZXJ2ZXIgd2l0aCBJUHY2IHdoZW4gYSBob3N0IGxvb2t1cCByZXR1cm5zIGFuIElQdjZcbiIKKyIgIGFkZHJlc3MgYW5kIGZhbGwgYmFjayB0byBJUHY0IGlmIHRoZSBjb25uZWN0aW9uIGZhaWxzLiBUaGUgLS1pcHY0IGFuZCAtLWlwdjZcbiIKKyIgIG9wdGlvbnMgY2FuIHNwZWNpZnkgd2hpY2ggYWRkcmVzcyB0byB1c2Ugd2hlbiBib3RoIGFyZSBhdmFpbGFibGUuIElQdjZcbiIKKywgc3Rkb3V0KTsKKyBmcHV0cygKKyIgIGFkZHJlc3NlcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgZGlyZWN0bHkgaW4gVVJMcyB1c2luZyB0aGUgc3ludGF4OlxuIgorIlxuIgorIiAgICBodHRwOi8vWzIwMDE6MTg5MDoxMTEyOjE6OjIwXS9vdmVydmlldy5odG1sXG4iCisiXG4iCisiICBXaGVuIHRoaXMgc3R5bGUgaXMgdXNlZCwgdGhlIC1nIG9wdGlvbiBtdXN0IGJlIGdpdmVuIHRvIHN0b3AgY3VybCBmcm9tXG4iCisiICBpbnRlcnByZXRpbmcgdGhlIHNxdWFyZSBicmFja2V0cyBhcyBzcGVjaWFsIGdsb2JiaW5nIGNoYXJhY3RlcnMuICBMaW5rIGxvY2FsXG4iCisiICBhbmQgc2l0ZSBsb2NhbCBhZGRyZXNzZXMgaW5jbHVkaW5nIGEgc2NvcGUgaWRlbnRpZmllciwgc3VjaCBhcyBmZTgwOjoxMjM0JTEsXG4iCisiICBtYXkgYWxzbyBiZSB1c2VkLCBidXQgdGhlIHNjb3BlIHBvcnRpb24gbXVzdCBiZSBudW1lcmljIGFuZCB0aGUgcGVyY2VudFxuIgorIiAgY2hhcmFjdGVyIG11c3QgYmUgVVJMIGVzY2FwZWQuIFRoZSBwcmV2aW91cyBleGFtcGxlIGluIGFuIFNGVFAgVVJMIG1pZ2h0XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICBsb29rIGxpa2U6XG4iCisiXG4iCisiICAgIHNmdHA6Ly9bZmU4MDo6MTIzNCUyNTFdL1xuIgorIlxuIgorIiAgSVB2NiBhZGRyZXNzZXMgcHJvdmlkZWQgb3RoZXIgdGhhbiBpbiBVUkxzIChlLmcuIHRvIHRoZSAtLXByb3h5LCAtLWludGVyZmFjZVxuIgorIiAgb3IgLS1mdHAtcG9ydCBvcHRpb25zKSBzaG91bGQgbm90IGJlIFVSTCBlbmNvZGVkLlxuIgorIlxuIgorIlxuIgorIk1BSUxJTkcgTElTVFNcbiIKKyJcbiIKKyIgIEZvciB5b3VyIGNvbnZlbmllbmNlLCB3ZSBoYXZlIHNldmVyYWwgb3BlbiBtYWlsaW5nIGxpc3RzIHRvIGRpc2N1c3MgY3VybCxcbiIKKyIgIGl0cyBkZXZlbG9wbWVudCBhbmQgdGhpbmdzIHJlbGV2YW50IHRvIHRoaXMuIEdldCBhbGwgaW5mbyBhdFxuIgorIiAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsLy4gU29tZSBvZiB0aGUgbGlzdHMgYXZhaWxhYmxlIGFyZTpcbiIKKyJcbiIKKyIgIGN1cmwtdXNlcnNcbiIKKyJcbiIKKyIgICAgVXNlcnMgb2YgdGhlIGNvbW1hbmQgbGluZSB0b29sLiBIb3cgdG8gdXNlIGl0LCB3aGF0IGRvZXNuJ3Qgd29yaywgbmV3XG4iCissIHN0ZG91dCk7CisgZnB1dHMoCisiICAgIGZlYXR1cmVzLCByZWxhdGVkIHRvb2xzLCBxdWVzdGlvbnMsIG5ld3MsIGluc3RhbGxhdGlvbnMsIGNvbXBpbGF0aW9ucyxcbiIKKyIgICAgcnVubmluZywgcG9ydGluZyBldGMuXG4iCisiXG4iCisiICBjdXJsLWxpYnJhcnlcbiIKKyJcbiIKKyIgICAgRGV2ZWxvcGVycyB1c2luZyBvciBkZXZlbG9waW5nIGxpYmN1cmwuIEJ1Z3MsIGV4dGVuc2lvbnMsIGltcHJvdmVtZW50cy5cbiIKKyJcbiIKKyIgIGN1cmwtYW5ub3VuY2VcbiIKKyJcbiIKKyIgICAgTG93LXRyYWZmaWMuIE9ubHkgcmVjZWl2ZXMgYW5ub3VuY2VtZW50cyBvZiBuZXcgcHVibGljIHZlcnNpb25zLiBBdCB3b3JzdCxcbiIKKyIgICAgdGhhdCBtYWtlcyBzb21ldGhpbmcgbGlrZSBvbmUgb3IgdHdvIG1haWxzIHBlciBtb250aCwgYnV0IHVzdWFsbHkgb25seSBvbmVcbiIKKyIgICAgbWFpbCBldmVyeSBzZWNvbmQgbW9udGguXG4iCisiXG4iCisiICBjdXJsLWFuZC1waHBcbiIKKyJcbiIKKyIgICAgVXNpbmcgdGhlIGN1cmwgZnVuY3Rpb25zIGluIFBIUC4gRXZlcnl0aGluZyBjdXJsIHdpdGggYSBQSFAgYW5nbGUuIE9yIFBIUFxuIgorLCBzdGRvdXQpOworIGZwdXRzKAorIiAgICB3aXRoIGEgY3VybCBhbmdsZS5cbiIKKyJcbiIKKyIgIGN1cmwtYW5kLXB5dGhvblxuIgorIlxuIgorIiAgICBQeXRob24gaGFja2VycyB1c2luZyBjdXJsIHdpdGggb3Igd2l0aG91dCB0aGUgcHl0aG9uIGJpbmRpbmcgcHljdXJsLlxuIgorIlxuIgorIiAgUGxlYXNlIGRpcmVjdCBjdXJsIHF1ZXN0aW9ucywgZmVhdHVyZSByZXF1ZXN0cyBhbmQgdHJvdWJsZSByZXBvcnRzIHRvIG9uZSBvZlxuIgorIiAgdGhlc2UgbWFpbGluZyBsaXN0cyBpbnN0ZWFkIG9mIG1haWxpbmcgYW55IGluZGl2aWR1YWwuXG4iCissIHN0ZG91dCkgOworfQorI2VuZGlmIC8qIFVTRV9NQU5VQUwgKi8KKyNlbHNlCisvKgorICogTkVWRVIgRVZFUiBlZGl0IHRoaXMgbWFudWFsbHksIGZpeCB0aGUgbWtoZWxwLnBsIHNjcmlwdCBpbnN0ZWFkIQorICogR2VuZXJhdGlvbiB0aW1lOiBUaHUgTWFyICA4IDIwOjM4OjE0IDIwMTIKKyAqLworI2lmZGVmIFVTRV9NQU5VQUwKKyNpbmNsdWRlICJodWdlaGVscC5oIgorI2luY2x1ZGUgPHpsaWIuaD4KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBodWdlaGVscGd6W10gPSB7CisgIC8qIFRoaXMgbXVtYm8tanVtYm8gaXMgdGhlIGh1Z2UgaGVscCB0ZXh0IGNvbXByZXNzZWQgd2l0aCBnemlwLgorICAgICBUaGFua3MgdG8gdGhpcyBvcGVyYXRpb24sIHRoZSBzaXplIG9mIHRoaXMgZGF0YSBzaHJ1bmsgZnJvbSAxNDE4MzkKKyAgICAgdG8gNDM0NjcgYnl0ZXMuIFlvdSBjYW4gZGlzYWJsZSB0aGUgdXNlIG9mIGNvbXByZXNzZWQgaGVscAorICAgICB0ZXh0cyBieSBOT1QgcGFzc2luZyAtYyB0byB0aGUgbWtoZWxwLnBsIHRvb2wuICovCisgIDB4MWYsIDB4OGIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDMsIDB4ZWQsIDB4YmQsCisgIDB4NmIsIDB4NzcsIDB4MWIsIDB4NDcsIDB4YjIsIDB4MjUsIDB4ZmEsIDB4OWQsIDB4YmYsIDB4YTIsIDB4MWEsIDB4N2QsCisgIDB4ZmIsIDB4ODAsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4ODcsIDB4MjQsIDB4ZGIsIDB4NjIsIDB4NGIsIDB4M2UsIDB4YTYsCisgIDB4NDksIDB4Y2EsIDB4ZTYsIDB4OTgsIDB4MTIsIDB4MzksIDB4MDQsIDB4ZTUsIDB4YzcsIDB4YjgsIDB4YmQsIDB4YjQsCisgIDB4MGEsIDB4NDAsIDB4OTEsIDB4YWMsIDB4MjYsIDB4NTAsIDB4ODUsIDB4YWUsIDB4MmEsIDB4OTAsIDB4YTIsIDB4Y2YsCisgIDB4ZjQsIDB4ZmMsIDB4ZjYsIDB4MWIsIDB4YjEsIDB4MjMsIDB4MjIsIDB4MzMsIDB4ZWIsIDB4MDEsIDB4NGEsIDB4NzYsCisgIDB4ZGIsIDB4M2QsIDB4MzMsIDB4NzcsIDB4ZGQsIDB4MzMsIDB4ZDMsIDB4YjIsIDB4NDQsIDB4NTYsIDB4NjUsIDB4ZTUsCisgIDB4MjMsIDB4MzIsIDB4MzIsIDB4MzIsIDB4NjIsIDB4YzcsIDB4OGUsIDB4MjgsIDB4ZmEsIDB4ZDAsIDB4ZmYsIDB4YmQsCisgIDB4YzMsIDB4ZmYsIDB4ZGUsIDB4ZDEsIDB4ZmYsIDB4ZDEsIDB4N2YsIDB4MzcsIDB4YTIsIDB4ZTgsIDB4YmMsIDB4YzgsCisgIDB4ZmYsIDB4OWUsIDB4NGMsIDB4YWIsIDB4ZWUsIDB4NjcsIDB4ZGYsIDB4YmQsIDB4ZmIsIDB4OWYsIDB4OTEsIDB4ZmMsCisgIDB4M2YsIDB4N2EsIDB4ZTcsIDB4NmYsIDB4ZjQsIDB4ZGYsIDB4OGQsIDB4NDcsIDB4ZGIsIDB4ZGUsIDB4OGUsIDB4ZmMsCisgIDB4MGIsIDB4ZmYsIDB4ZjMsIDB4ZGQsIDB4NTYsIDB4ZjQsIDB4YTEsIDB4MTcsIDB4ZmUsIDB4NjcsIDB4YjQsIDB4ODksCisgIDB4MTcsIDB4ZGUsIDB4ZTksIDB4MTcsIDB4NWUsIDB4ZjAsIDB4ZGYsIDB4ZGYsIDB4YmQsIDB4N2IsIDB4ZmMsIDB4MjMsCisgIDB4N2YsIDB4ZTMsIDB4NWUsIDB4ZjEsIDB4MWYsIDB4ZGIsIDB4ZmMsIDB4ZGUsIDB4ZGYsIDB4ZGUsIDB4ZjEsIDB4NWYsCisgIDB4ZTksIDB4MjcsIDB4MWIsIDB4MWIsIDB4NmYsIDB4MGUsIDB4NWUsIDB4MWYsIDB4ZGIsIDB4YWIsIDB4ZDMsIDB4NTUsCisgIDB4MzEsIDB4OGYsIDB4ODYsIDB4NTEsIDB4NTUsIDB4YzQsIDB4NTksIDB4NzksIDB4OTUsIDB4MTQsIDB4NTEsIDB4MWMsCisgIDB4YmQsIDB4YmQsIDB4MzgsIDB4ZGQsIDB4ZDgsIDB4MTgsIDB4ZmYsIDB4ZjAsIDB4ZTYsIDB4ZWMsIDB4N2MsIDB4N2MsCisgIDB4MzIsIDB4YWUsIDB4M2QsIDB4ZjYsIDB4NjMsIDB4YmUsIDB4YWMsIDB4ZDIsIDB4M2MsIDB4MmIsIDB4N2YsIDB4OGEsCisgIDB4N2UsIDB4YTQsIDB4ODcsIDB4NDYsIDB4YTMsIDB4ZDEsIDB4NGYsIDB4MWIsIDB4MWIsIDB4NDcsIDB4YzcsIDB4ZTMsCisgIDB4YzMsIDB4OGIsIDB4OTMsIDB4ZjMsIDB4Y2IsIDB4OTMsIDB4YjMsIDB4MzcsIDB4YjUsIDB4NjcsIDB4YTMsIDB4YjQsCisgIDB4OGMsIDB4YTgsIDB4YjEsIDB4MmEsIDB4Y2YsIDB4ZTcsIDB4ZjQsIDB4ODcsIDB4NmYsIDB4N2YsIDB4MTYsIDB4NTcsCisgIDB4NzEsIDB4NzQsIDB4NTUsIDB4ZTQsIDB4OGIsIDB4MjgsIDB4MmYsIDB4ZjgsIDB4MTcsIDB4NzEsIDB4NTQsIDB4MjYsCisgIDB4YzUsIDB4NWQsIDB4NTIsIDB4MGMsIDB4YTIsIDB4NTUsIDB4OTksIDB4NjYsIDB4ZDcsIDB4NTEsIDB4OWUsIDB4MjUsCisgIDB4NTEsIDB4N2UsIDB4MTUsIDB4NTUsIDB4MzcsIDB4ODksIDB4MzUsIDB4NTcsIDB4YWUsIDB4OTYsIDB4Y2IsIDB4YmMsCisgIDB4YTgsIDB4OTIsIDB4NTksIDB4YjQsIDB4MmMsIDB4ZjIsIDB4MmEsIDB4OWYsIDB4ZTYsIDB4ZjMsIDB4MzIsIDB4ZGEsCisgIDB4M2MsIDB4M2EsIDB4MzksIDB4YmMsIDB4MWMsIDB4NDQsIDB4YWYsIDB4NGUsIDB4NGUsIDB4OGYsIDB4ZTksIDB4Y2YsCisgIDB4Y2IsIDB4NzMsIDB4ZmMsIDB4MzEsIDB4MWUsIDB4NDQsIDB4NWYsIDB4OWQsIDB4OWQsIDB4N2YsIDB4N2QsIDB4N2MsCisgIDB4MzEsIDB4ODgsIDB4YmUsIDB4YmUsIDB4ZTQsIDB4OWYsIDB4ZjEsIDB4OWYsIDB4ZjQsIDB4YzMsIDB4ZTgsIDB4ZTQsCisgIDB4ZjUsIDB4YzEsIDB4ZjksIDB4YzAsIDB4OWEsIDB4ZTMsIDB4N2YsIDB4ZjAsIDB4MGYsIDB4NGYsIDB4OGYsIDB4ZTgsCisgIDB4ODcsIDB4ZjIsIDB4MWYsIDB4ZmUsIDB4ZTcsIDB4ZjksIDB4ZDksIDB4ZjksIDB4OTMsIDB4MDEsIDB4ZmUsIDB4YTQsCisgIDB4N2YsIDB4NWQsIDB4NWMsIDB4YmUsIDB4M2UsIDB4ZTcsIDB4M2YsIDB4YzcsIDB4ZjQsIDB4ZTcsIDB4ZjgsIDB4OTAsCisgIDB4ZmYsIDB4YzAsIDB4MzcsIDB4YzYsIDB4YWYsIDB4ZWQsIDB4Y2YsIDB4YjEsIDB4NmIsIDB4ZWUsIDB4ZjIsIDB4ZjgsCisgIDB4ZjQsIDB4Y2QsIDB4ZjEsIDB4NjUsIDB4MTQsIDB4NjcsIDB4YjMsIDB4ZTgsIDB4OTIsIDB4MWUsIDB4ZGEsIDB4MWEsCisgIDB4ZDEsIDB4OGYsIDB4NmUsIDB4OTIsIDB4NjgsIDB4OWEsIDB4MmYsIDB4MTYsIDB4ZmMsIDB4MzMsIDB4OWEsIDB4ODUsCisgIDB4NTksIDB4NTIsIDB4YTYsIDB4ZDcsIDB4MTksIDB4NzUsIDB4OWYsIDB4NDYsIDB4N2IsIDB4OWYsIDB4MTcsIDB4YjcsCisgIDB4ZDEsIDB4N2QsIDB4NWEsIDB4ZGQsIDB4ZTQsIDB4YWIsIDB4OGEsIDB4MDYsIDB4NGMsIDB4ZjMsIDB4MTEsIDB4YTUsCisgIDB4NTksIDB4OTUsIDB4MTQsIDB4NDMsIDB4NmIsIDB4MmUsIDB4OWUsIDB4ZjIsIDB4MGMsIDB4OGYsIDB4MzYsIDB4NmEsCisgIDB4NzMsIDB4OTksIDB4NWYsIDB4ZDEsIDB4Y2MsIDB4OTUsIDB4MzQsIDB4NTUsIDB4OTMsIDB4NTUsIDB4MzksIDB4Y2YsCisgIDB4ZTMsIDB4MTksIDB4NGYsIDB4MTAsIDB4YmQsIDB4N2MsIDB4YjUsIDB4YTIsIDB4YTksIDB4MmQsIDB4ZDIsIDB4ZTksCisgIDB4NmQsIDB4MTksIDB4Y2QsIDB4ZDMsIDB4ZGIsIDB4ODQsIDB4YTcsIDB4ZTcsIDB4ZmQsIDB4ODMsIDB4NGQsIDB4ZDcsCisgIDB4NDAsIDB4OWEsIDB4OGYsIDB4NTcsIDB4MzQsIDB4OTMsIDB4OTksIDB4NmIsIDB4YmUsIDB4NGEsIDB4YTcsIDB4MzEsCisgIDB4N2YsIDB4MDAsIDB4ZjMsIDB4MTUsIDB4YWQsIDB4OTYsIDB4ZGMsIDB4OWEsIDB4Y2MsIDB4NTMsIDB4YjQsIDB4Y2MsCisgIDB4NGIsIDB4N2EsIDB4NjksIDB4M2MsIDB4M2UsIDB4YTUsIDB4YmUsIDB4NjcsIDB4NTksIDB4ODIsIDB4N2UsIDB4OTQsCisgIDB4MDMsIDB4ZmEsIDB4NDcsIDB4N2UsIDB4OWIsIDB4MjYsIDB4ZjQsIDB4OTcsIDB4YWIsIDB4NzQsIDB4OWUsIDB4NDQsCisgIDB4YjIsIDB4OGUsIDB4YWUsIDB4MzksIDB4NWUsIDB4ZDAsIDB4MjIsIDB4MjksIDB4NTcsIDB4OGIsIDB4MDQsIDB4MTMsCisgIDB4YjAsIDB4YzgsIDB4OGIsIDB4NjQsIDB4MTQsIDB4MWQsIDB4OTQsIDB4ZDEsIDB4NDMsIDB4YmUsIDB4YTIsIDB4NTEsCisgIDB4Y2UsIDB4ZTcsIDB4YjQsIDB4YjYsIDB4NDksIDB4MzQsIDB4NDksIDB4ZTYsIDB4ZjksIDB4ZmQsIDB4ODAsIDB4NTcsCisgIDB4MzQsIDB4Y2EsIDB4NTYsIDB4OGIsIDB4MDksIDB4YmQsIDB4NDIsIDB4ZGQsIDB4YmYsIDB4NGEsIDB4ZTIsIDB4NmEsCisgIDB4NDUsIDB4YWYsIDB4ZTIsIDB4MzEsIDB4NmIsIDB4NmUsIDB4MTEsIDB4ZDMsIDB4MjgsIDB4ZTgsIDB4ZGQsIDB4MjIsCisgIDB4YmEsIDB4NDksIDB4NjgsIDB4OTQsIDB4ZTUsIDB4MzIsIDB4Y2QsIDB4ZmUsIDB4NTAsIDB4OWYsIDB4MDksIDB4OWEsCisgIDB4Y2UsIDB4NjUsIDB4N2UsIDB4OWYsIDB4MTQsIDB4MzQsIDB4OWIsIDB4OTMsIDB4ODcsIDB4ODgsIDB4ODYsIDB4M2QsCisgIDB4MTEsIDB4NjEsIDB4YmIsIDB4MjIsIDB4NjEsIDB4OGEsIDB4NjIsIDB4ZmEsIDB4YTAsIDB4MTMsIDB4YjQsIDB4NjEsCisgIDB4OTEsIDB4Y2MsIDB4NjMsIDB4MTYsIDB4MWEsIDB4ZjcsIDB4MjksIDB4NWEsIDB4OTksIDB4NzEsIDB4ZTIsIDB4YTQsCisgIDB4NGEsIDB4NWYsIDB4ZGQsIDB4N2MsIDB4YjIsIDB4ODUsIDB4OTcsIDB4NjcsIDB4NDksIDB4MTUsIDB4YTcsIDB4ZjMsCisgIDB4OTIsIDB4MjYsIDB4OWUsIDB4YzUsIDB4ZGYsIDB4ZDYsIDB4OTYsIDB4YmEsIDB4Y2MsIDB4ZGIsIDB4ODEsIDB4NjQsCisgIDB4ZjAsIDB4MjEsIDB4YWIsIDB4ZTIsIDB4ZjcsIDB4ZjgsIDB4YmMsIDB4Y2EsIDB4ZTAsIDB4NzAsIDB4OTYsIDB4MmMsCisgIDB4OTMsIDB4NmMsIDB4OTYsIDB4NjQsIDB4ZDUsIDB4MjgsIDB4ZmEsIDB4MjEsIDB4NWYsIDB4ZjUsIDB4ZTksIDB4ZGIsCisgIDB4NTcsIDB4MjksIDB4Y2QsIDB4NDEsIDB4YWMsIDB4NGQsIDB4ZDEsIDB4OTcsIDB4NjksIDB4ZTEsIDB4YTcsIDB4NDUsCisgIDB4YmEsIDB4MGMsIDB4MjYsIDB4M2YsIDB4Y2YsIDB4NjgsIDB4YjksIDB4YTMsIDB4OGIsIDB4NTcsIDB4ODcsIDB4ZDEsCisgIDB4OTMsIDB4ZTcsIDB4OWYsIDB4N2QsIDB4ZTIsIDB4NTcsIDB4OTksIDB4MWEsIDB4ODgsIDB4YTYsIDB4NzEsIDB4NDYsCisgIDB4MjMsIDB4NGUsIDB4YTYsIDB4ZTksIDB4ZDUsIDB4NDMsIDB4YjQsIDB4NTgsIDB4Y2QsIDB4YWIsIDB4NzQsIDB4NDksCisgIDB4ZjMsIDB4NGQsIDB4MWYsIDB4MmYsIDB4NzksIDB4YTMsIDB4MmMsIDB4ZTMsIDB4YTIsIDB4MmEsIDB4NzksIDB4ZGUsCisgIDB4ZjAsIDB4MDMsIDB4OGMsIDB4ZmQsIDB4YmUsIDB4NDgsIDB4MmIsIDB4ZGUsIDB4MzAsIDB4ZjgsIDB4MWQsIDB4ZjUsCisgIDB4MzAsIDB4YTksIDB4NGEsIDB4NmIsIDB4OGUsIDB4MDUsIDB4OGMsIDB4YmUsIDB4MzMsIDB4MjksIDB4ZTIsIDB4MjksCisgIDB4Y2QsIDB4NzAsIDB4NWMsIDB4ZDIsIDB4NDcsIDB4ZjcsIDB4ZGQsIDB4YjcsIDB4YTIsIDB4OWIsIDB4YWEsIDB4NWEsCisgIDB4ZWUsIDB4NmYsIDB4NmYsIDB4OTcsIDB4NjksIDB4OTUsIDB4OGMsIDB4ZmUsIDB4OGIsIDB4YjYsIDB4ZGIsIDB4YTAsCisgIDB4YmEsIDB4Y2YsIDB4MDcsIDB4ZDUsIDB4NGQsIDB4OTEsIDB4MjQsIDB4ZmYsIDB4MWMsIDB4OTEsIDB4ZDgsIDB4YmEsCisgIDB4MDcsIDB4ZTksIDB4YjMsIDB4MGYsIDB4ZGEsIDB4YWYsIDB4ZWIsIDB4YTQsIDB4YTIsIDB4MGYsIDB4ZmMsIDB4NjMsCisgIDB4OTUsIDB4NjQsIDB4ZGMsIDB4MjAsIDB4NzUsIDB4MjMsIDB4OWUsIDB4MmYsIDB4NmYsIDB4NjIsIDB4NWEsIDB4Y2QsCisgIDB4ODQsIDB4YzQsIDB4OGYsIDB4MzcsIDB4MzAsIDB4NDksIDB4MDgsIDB4NzcsIDB4NGEsIDB4YjYsIDB4ZjAsIDB4OGYsCisgIDB4M2YsIDB4YjUsIDB4YmUsIDB4NzksIDB4ODUsIDB4NGYsIDB4ZDIsIDB4OWYsIDB4MjMsIDB4N2QsIDB4MjksIDB4YTYsCisgIDB4YjksIDB4YTYsIDB4OGYsIDB4NmQsIDB4YjMsIDB4NTQsIDB4ZmQsIDB4YjgsIDB4M2IsIDB4ZGMsIDB4ZGQsIDB4ZDksCisgIDB4ZjksIDB4NjksIDB4NTQsIDB4YmQsIDB4YWYsIDB4M2UsIDB4ZjIsIDB4ODUsIDB4OWQsIDB4MWQsIDB4ZmYsIDB4MGEsCisgIDB4M2YsIDB4YmQsIDB4YzksIDB4MjMsIDB4OGUsIDB4ZTYsIDB4MjQsIDB4MzQsIDB4ZmMsIDB4ZmQsIDB4OWYsIDB4OTMsCisgIDB4MjIsIDB4MmYsIDB4YjcsIDB4M2EsIDB4OWEsIDB4OWEsIDB4MjcsIDB4MTUsIDB4ZWQsIDB4YjUsIDB4YTAsIDB4OWQsCisgIDB4NzgsIDB4ZjgsIDB4YjMsIDB4N2MsIDB4ZDYsIDB4MWUsIDB4N2UsIDB4OTMsIDB4OTQsIDB4OTAsIDB4MTksIDB4M2YsCisgIDB4ZDgsIDB4MjgsIDB4MmUsIDB4NDgsIDB4NmUsIDB4ZjMsIDB4Y2EsIDB4YWIsIDB4YTEsIDB4MDEsIDB4NmQsIDB4YzMsCisgIDB4Y2EsIDB4NGQsIDB4MGQsIDB4ZWQsIDB4MzIsIDB4N2EsIDB4OWEsIDB4MTQsIDB4NTgsIDB4M2MsIDB4NjcsIDB4ZGQsCisgIDB4NTUsIDB4NDYsIDB4NTksIDB4ZTIsIDB4ODcsIDB4NDEsIDB4M2IsIDB4M2UsIDB4ODksIDB4YTcsIDB4MzcsIDB4NTEsCisgIDB4NGUsIDB4YzIsIDB4NWYsIDB4YjQsIDB4OTcsIDB4MjAsIDB4Y2UsIDB4MWUsIDB4NDYsIDB4NzksIDB4NzEsIDB4YmQsCisgIDB4MWQsIDB4MTcsIDB4ZDMsIDB4OWIsIDB4ZjQsIDB4OGUsIDB4ZTYsIDB4ZTEsIDB4ZjksIDB4ZjMsIDB4NGYsIDB4ODYsCisgIDB4ZjQsIDB4YzcsIDB4ZjMsIDB4OWYsIDB4YjYsIDB4ZWYsIDB4ZjIsIDB4MzksIDB4NGQsIDB4Y2IsIDB4ZDMsIDB4OWYsCisgIDB4YjYsIDB4NzksIDB4NzUsIDB4ZmYsIDB4MmIsIDB4MWUsIDB4NGMsIDB4MDYsIDB4ZDMsIDB4N2YsIDB4OGUsIDB4NmUsCisgIDB4YWEsIDB4YzUsIDB4N2MsIDB4YWQsIDB4Y2MsIDB4NTAsIDB4NjMsIDB4NTEsIDB4YmMsIDB4YzgsIDB4NTcsIDB4NTksCisgIDB4ZTUsIDB4ZTQsIDB4ODQsIDB4YzQsIDB4YWQsIDB4MGEsIDB4NzQsIDB4ZDEsIDB4M2MsIDB4Y2QsIDB4MTIsIDB4NTEsCisgIDB4NGYsIDB4MmMsIDB4M2UsIDB4YmMsIDB4M2QsIDB4NjksIDB4NmYsIDB4ZmEsIDB4YWQsIDB4NWMsIDB4NGQsIDB4NmYsCisgIDB4NjgsIDB4ZTgsIDB4MjQsIDB4MzcsIDB4YjEsIDB4MGUsIDB4YmYsIDB4NGEsIDB4NjksIDB4NGMsIDB4ZjQsIDB4NjYsCisgIDB4NDYsIDB4NWIsIDB4MzYsIDB4OTUsIDB4YTYsIDB4ZTQsIDB4NjMsIDB4MjksIDB4M2QsIDB4OTcsIDB4MTcsIDB4YjMsCisgIDB4YTQsIDB4YTgsIDB4NGIsIDB4MzAsIDB4YmEsIDB4ZTMsIDB4ZmIsIDB4MTMsIDB4ZDEsIDB4NTQsIDB4MmUsIDB4ZTksCisgIDB4ZTMsIDB4MmIsIDB4NTYsIDB4NzAsIDB4ZDgsIDB4NjQsIDB4ZGMsIDB4MDIsIDB4NmQsIDB4Y2YsIDB4NmIsIDB4OWEsCisgIDB4MjUsIDB4OWEsIDB4MTksIDB4MTYsIDB4MmEsIDB4OWUsIDB4YjgsIDB4ODcsIDB4ZTgsIDB4MGQsIDB4MmQsIDB4OWUsCisgIDB4YTgsIDB4ODYsIDB4NDAsIDB4ZjYsIDB4NjQsIDB4YjEsIDB4ZGEsIDB4OTMsIDB4NzYsIDB4N2YsIDB4N2YsIDB4YmYsCisgIDB4NWUsIDB4ODgsIDB4ZjYsIDB4NzcsIDB4MWIsIDB4NzIsIDB4MTQsIDB4YmMsIDB4ZDQsIDB4YjUsIDB4ZmEsIDB4ZmIsCisgIDB4N2IsIDB4ZjUsIDB4ZjUsIDB4M2YsIDB4YjksIDB4YzIsIDB4YzIsIDB4ZGEsIDB4MTgsIDB4NzgsIDB4ZWYsIDB4OWIsCisgIDB4YjYsIDB4YjYsIDB4OGQsIDB4NGYsIDB4YWQsIDB4ZDEsIDB4ZGYsIDB4OTMsIDB4YWIsIDB4ZjQsIDB4ZmQsIDB4YzAsCisgIDB4OGUsIDB4M2EsIDB4OTksIDB4Y2IsIDB4OTgsIDB4OWEsIDB4NWYsIDB4MmMsIDB4MmIsIDB4NWUsIDB4NzUsIDB4NmIsCisgIDB4ZWUsIDB4N2EsIDB4OTUsIDB4OTQsIDB4MjQsIDB4NDIsIDB4ZjcsIDB4MzcsIDB4MzEsIDB4ZmQsIDB4ZDgsIDB4MWEsCisgIDB4ODgsIDB4ZjAsIDB4ODksIDB4NDUsIDB4N2EsIDB4N2QsIDB4NTMsIDB4NDUsIDB4ZjcsIDB4MzEsIDB4ZWIsIDB4OGYsCisgIDB4OTMsIDB4NGEsIDB4OWEsIDB4NjAsIDB4NTUsIDB4NGQsIDB4NWEsIDB4ZTMsIDB4MmEsIDB4YTYsIDB4ZWQsIDB4Y2YsCisgIDB4MzMsIDB4MDQsIDB4YmQsIDB4NGMsIDB4YzIsIDB4ZTYsIDB4YzQsIDB4ODksIDB4ZTYsIDB4MGEsIDB4YTIsIDB4MTQsCisgIDB4OWMsIDB4ODQsIDB4OTMsIDB4YjgsIDB4ZTQsIDB4ZDUsIDB4YzgsIDB4NjgsIDB4ZDEsIDB4MmIsIDB4NTIsIDB4ZjQsCisgIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4MGQsIDB4YTksIDB4ZjIsIDB4MjgsIDB4OGIsIDB4MTcsIDB4ODksIDB4NzYsIDB4MTQsCisgIDB4YmEsIDB4ZWYsIDB4MTUsIDB4YWIsIDB4YzgsIDB4ZTQsIDB4N2QsIDB4YmMsIDB4NzAsIDB4ZmEsIDB4ODgsIDB4MTQsCisgIDB4Y2MsIDB4NDAsIDB4NTUsIDB4YTcsIDB4N2IsIDB4YTMsIDB4YTQsIDB4NTUsIDB4MjMsIDB4ODksIDB4ZTMsIDB4NmQsCisgIDB4ODQsIDB4M2QsIDB4ZDUsIDB4ZTMsIDB4N2QsIDB4ZDMsIDB4OTMsIDB4NzEsIDB4YTIsIDB4OGYsIDB4NzEsIDB4MDksCisgIDB4NzUsIDB4MGYsIDB4MGQsIDB4NGYsIDB4OWQsIDB4MGYsIDB4MDYsIDB4NGIsIDB4OTMsIDB4MTYsIDB4ZGYsIDB4ZjIsCisgIDB4YjksIDB4ZDIsIDB4MzgsIDB4YmQsIDB4ZjAsIDB4ZGEsIDB4MmMsIDB4OGYsIDB4NTIsIDB4ZDIsIDB4NjAsIDB4MTMsCisgIDB4ZGEsIDB4NWYsIDB4M2MsIDB4MzIsIDB4ZGUsIDB4MzUsIDB4OTgsIDB4MTUsIDB4NmUsIDB4NjcsIDB4NDksIDB4NmQsCisgIDB4ZjIsIDB4MGYsIDB4ZDMsIDB4OGEsIDB4ZjUsIDB4MDYsIDB4MGMsIDB4MTAsIDB4ZWEsIDB4MmYsIDB4NGQsIDB4MGEsCisgIDB4NmMsIDB4MDgsIDB4ZGEsIDB4N2IsIDB4YzEsIDB4ZjgsIDB4YTEsIDB4ZjEsIDB4ZTgsIDB4ZDksIDB4ZTgsIDB4MmUsCisgIDB4OWUsIDB4YTcsIDB4NjQsIDB4NGIsIDB4MjQsIDB4ZWUsIDB4MmQsIDB4YTgsIDB4ZTgsIDB4MjksIDB4MWYsIDB4NzAsCisgIDB4ZjMsIDB4ZjksIDB4MDMsIDB4ODksIDB4NWQsIDB4NTEsIDB4YjAsIDB4YjEsIDB4YzYsIDB4MmIsIDB4MzgsIDB4OTEsCisgIDB4Y2QsIDB4YjEsIDB4NDgsIDB4ZTgsIDB4NjQsIDB4MDgsIDB4YTcsIDB4MzMsIDB4NjUsIDB4MjUsIDB4NDUsIDB4NDIsCisgIDB4NGEsIDB4NDcsIDB4MGQsIDB4YzQsIDB4OTAsIDB4OGUsIDB4MDQsIDB4NmMsIDB4NjMsIDB4MGMsIDB4MWMsIDB4YmQsCisgIDB4ZTMsIDB4YjYsIDB4YTcsIDB4ZDMsIDB4NjQsIDB4NTksIDB4OTUsIDB4N2UsIDB4NGMsIDB4ODcsIDB4N2UsIDB4MmEsCisgIDB4NzQsIDB4YzEsIDB4YTksIDB4M2IsIDB4NDUsIDB4YzIsIDB4MzMsIDB4MWYsIDB4OWUsIDB4OWMsIDB4OTgsIDB4NTcsCisgIDB4YTcsIDB4YzcsIDB4NzEsIDB4NzgsIDB4ZGEsIDB4ZDEsIDB4NDQsIDB4ODcsIDB4NjksIDB4ZTksIDB4NjYsIDB4YWQsCisgIDB4ODIsIDB4NmMsIDB4ZDAsIDB4NWUsIDB4YzAsIDB4OWMsIDB4MmYsIDB4YjgsIDB4YTMsIDB4ZmMsIDB4NzAsIDB4MjksCisgIDB4MzYsIDB4MTIsIDB4ZjYsIDB4MWMsIDB4MmYsIDB4YTQsIDB4MTgsIDB4NDksIDB4ZjIsIDB4NWQsIDB4ZDYsIDB4NDYsCisgIDB4MzQsIDB4OWYsIDB4YWUsIDB4NzEsIDB4ZmEsIDB4YWEsIDB4NWIsIDB4NTMsIDB4ZmUsIDB4N2MsIDB4NDksIDB4ZTYsCisgIDB4MjUsIDB4NjksIDB4ZTcsIDB4NTksIDB4NzksIDB4NDMsIDB4ZTcsIDB4MjksIDB4MmQsIDB4ZmQsIDB4ZTUsIDB4MGQsCisgIDB4OGYsIDB4NzQsIDB4NDEsIDB4MzIsIDB4NzMsIDB4YzcsIDB4ZWIsIDB4YmIsIDB4NGMsIDB4OTIsIDB4ZDksIDB4MjgsCisgIDB4M2EsIDB4YmIsIDB4ZTIsIDB4YWQsIDB4NTksIDB4NTAsIDB4YTcsIDB4MmIsIDB4ZmMsIDB4OWEsIDB4YjUsIDB4MDUsCisgIDB4Y2QsIDB4ZGIsIDB4MGMsIDB4ZjYsIDB4NTcsIDB4ZTYsIDB4YjQsIDB4MDIsIDB4YmEsIDB4MTIsIDB4NmMsIDB4N2IsCisgIDB4OTYsIDB4MzQsIDB4OWEsIDB4ZWMsIDB4ODgsIDB4MTUsIDB4ZmQsIDB4YmMsIDB4YWUsIDB4NWEsIDB4NjAsIDB4MDIsCisgIDB4OTAsIDB4MGEsIDB4ZTAsIDB4ZWUsIDB4NGQsIDB4OTIsIDB4MDgsIDB4OTIsIDB4MzgsIDB4NDksIDB4YWEsIDB4ZmIsCisgIDB4MjQsIDB4NzEsIDB4Y2QsIDB4OTUsIDB4MDksIDB4YTksIDB4MzMsIDB4NWUsIDB4MzQsIDB4MzksIDB4Y2MsIDB4YjMsCisgIDB4YmIsIDB4OWMsIDB4M2IsIDB4YjgsIDB4YjEsIDB4NzEsIDB4N2UsIDB4NzEsIDB4ZjYsIDB4ZDUsIDB4YzUsIDB4ZjEsCisgIDB4NzgsIDB4MWMsIDB4YmQsIDB4M2UsIDB4YmUsIDB4M2MsIDB4YmUsIDB4YTgsIDB4NDksIDB4NGYsIDB4OTYsIDB4MTcsCisgIDB4MGIsIDB4YWMsIDB4ZTgsIDB4MmMsIDB4MmQsIDB4OTcsIDB4ZjMsIDB4ZjgsIDB4ODEsIDB4OTcsIDB4OWEsIDB4NDYsCisgIDB4NzIsIDB4NWQsIDB4ZjAsIDB4Y2UsIDB4NWEsIDB4MjQsIDB4YWMsIDB4NWEsIDB4NjYsIDB4YWIsIDB4MDIsIDB4NjIsCisgIDB4OTEsIDB4MmYsIDB4NjksIDB4ZjksIDB4ZDQsIDB4NmMsIDB4YTEsIDB4YzYsIDB4NjcsIDB4YjAsIDB4NzUsIDB4YjIsCisgIDB4NmIsIDB4M2YsIDB4ZDMsIDB4NzQsIDB4OWEsIDB4YWIsIDB4ODYsIDB4NjQsIDB4MTUsIDB4ZTksIDB4ZDYsIDB4ODMsCisgIDB4YWQsIDB4MDksIDB4ZDgsIDB4YTUsIDB4MDMsIDB4ZmYsIDB4MzMsIDB4OTksIDB4YTYsIDB4MTIsIDB4NjMsIDB4MjIsCisgIDB4OTksIDB4NGQsIDB4MTcsIDB4YjAsIDB4MjUsIDB4ZTgsIDB4YmYsIDB4ZGUsIDB4ODAsIDB4NDgsIDB4YWUsIDB4YzgsCisgIDB4NWUsIDB4MjIsIDB4YWQsIDB4ZDksIDB4MTAsIDB4NzcsIDB4ZDcsIDB4NGYsIDB4Y2MsIDB4MmIsIDB4Y2MsIDB4NWQsCisgIDB4YjYsIDB4N2YsIDB4ZTksIDB4ZTMsIDB4ZDQsIDB4ZDcsIDB4NDUsIDB4OWEsIDB4OTEsIDB4ODAsIDB4OTEsIDB4NDAsCisgIDB4ZWEsIDB4MmUsIDB4NjcsIDB4NDksIDB4YTAsIDB4YmUsIDB4NWUsIDB4ODksIDB4NGUsIDB4ZDAsIDB4MTksIDB4YTksCisgIDB4ZGIsIDB4ZDEsIDB4ZjQsIDB4MzIsIDB4MmQsIDB4MzYsIDB4NjksIDB4NTYsIDB4MzcsIDB4M2MsIDB4NzQsIDB4OGEsCisgIDB4NDQsIDB4OTMsIDB4OWEsIDB4OGYsIDB4MjcsIDB4YWMsIDB4OWEsIDB4ZDgsIDB4YjAsIDB4MjQsIDB4NmIsIDB4MjAsCisgIDB4ZTksIDB4ZmMsIDB4OWEsIDB4YjMsIDB4NTQsIDB4ZTksIDB4MGQsIDB4ZWEsIDB4NWIsIDB4M2MsIDB4ZTEsIDB4MTUsCisgIDB4ZTUsIDB4MDcsIDB4MWEsIDB4YjMsIDB4NDgsIDB4OWIsIDB4MDgsIDB4YmEsIDB4ZTUsIDB4M2UsIDB4MmQsIDB4YjEsCisgIDB4YTksIDB4ZWUsIDB4ZjMsIDB4ZDUsIDB4OWMsIDB4NGMsIDB4M2EsIDB4N2UsIDB4NjAsIDB4YjUsIDB4YzQsIDB4MGIsCisgIDB4ZjQsIDB4YTksIDB4YTUsIDB4ZGYsIDB4M2QsIDB4OGIsIDB4ZjQsIDB4M2QsIDB4Y2YsIDB4N2EsIDB4YjMsIDB4MTUsCisgIDB4ZWEsIDB4MWEsIDB4ZmQsIDB4NzMsIDB4NDksIDB4OGIsIDB4MjAsIDB4ZGQsIDB4MTksIDB4MzUsIDB4NzUsIDB4MmIsCisgIDB4YjQsIDB4NDYsIDB4NmIsIDB4MGQsIDB4NzksIDB4YjcsIDB4NDAsIDB4ZGQsIDB4OWQsIDB4OWYsIDB4OGQsIDB4MmYsCisgIDB4NTksIDB4ZmQsIDB4OWYsIDB4YmYsIDB4YmQsIDB4YTQsIDB4ODYsIDB4ZTgsIDB4MTgsIDB4MmEsIDB4MmIsIDB4NWEsCisgIDB4NGUsIDB4N2UsIDB4MzEsIDB4NGIsIDB4NjAsIDB4NDMsIDB4NWIsIDB4NzMsIDB4YjQsIDB4NmEsIDB4MjksIDB4YjYsCisgIDB4MzgsIDB4NGUsIDB4MTUsIDB4ZmIsIDB4YTQsIDB4ZjQsIDB4NTEsIDB4MmUsIDB4MTYsIDB4MmMsIDB4YmMsIDB4NzYsCisgIDB4YWQsIDB4MjgsIDB4NmYsIDB4MTIsIDB4ZDYsIDB4ZDEsIDB4ZWUsIDB4YTUsIDB4NjgsIDB4ZjMsIDB4ZjMsIDB4MmQsCisgIDB4NWEsIDB4ZWUsIDB4YTEsIDB4NmIsIDB4ZWUsIDB4NDcsIDB4N2UsIDB4ZmEsIDB4MjcsIDB4ZmUsIDB4NzIsIDB4OTksCisgIDB4MmUsIDB4ZDIsIDB4NzksIDB4MWMsIDB4OWMsIDB4NmQsIDB4YWEsIDB4ODksIDB4NTgsIDB4YWUsIDB4ZGQsIDB4N2UsCisgIDB4OWMsIDB4OTIsIDB4ZGEsIDB4NDUsIDB4YTcsIDB4YmQsIDB4MWQsIDB4Y2QsIDB4MzMsIDB4ODgsIDB4ZGQsIDB4ZWMsCisgIDB4MTcsIDB4NmEsIDB4OTYsIDB4MjcsIDB4ZjIsIDB4MWUsIDB4OTksIDB4YjIsIDB4NmUsIDB4ZTIsIDB4NzgsIDB4YzUsCisgIDB4NzgsIDB4OWIsIDB4ZDcsIDB4YTYsIDB4YTksIDB4YjksIDB4NmEsIDB4YWQsIDB4NjksIDB4NjMsIDB4NGQsIDB4OGUsCisgIDB4ZWIsIDB4OTksIDB4OWIsIDB4YjgsIDB4ZGUsIDB4MjQsIDB4MmUsIDB4N2EsIDB4NGUsIDB4ODMsIDB4YzksIDB4OWQsCisgIDB4ODksIDB4MWEsIDB4YmQsIDB4NWUsIDB4NTEsIDB4ZTcsIDB4NjUsIDB4NTYsIDB4MDcsIDB4ZDEsIDB4ZjAsIDB4OGYsCisgIDB4ZGMsIDB4NzMsIDB4MzYsIDB4YTksIDB4ZGQsIDB4OGUsIDB4MjYsIDB4NWIsIDB4MmQsIDB4OWIsIDB4OGQsIDB4MzYsCisgIDB4Y2UsIDB4NzAsIDB4NjUsIDB4NzMsIDB4ZjcsIDB4YmIsIDB4MTMsIDB4MzYsIDB4ZjIsIDB4MzIsIDB4NTYsIDB4N2YsCisgIDB4MDMsIDB4ZDgsIDB4ZDEsIDB4MTMsIDB4YmEsIDB4YjcsIDB4MjUsIDB4MTAsIDB4M2EsIDB4ZDEsIDB4NjYsIDB4NmMsCisgIDB4MDUsIDB4MjUsIDB4MTksIDB4MGIsIDB4Y2YsIDB4NGMsIDB4ZjQsIDB4ZTMsIDB4NzAsIDB4MjgsIDB4YmYsIDB4YzIsCisgIDB4OGEsIDB4M2YsIDB4ZDAsIDB4NTEsIDB4MWUsIDB4NWYsIDB4YzcsIDB4YTksIDB4ZGIsIDB4ZTgsIDB4MmEsIDB4NjgsCisgIDB4ZWUsIDB4ZDksIDB4MmMsIDB4ZDcsIDB4YzcsIDB4NTksIDB4MWIsIDB4YjEsIDB4NjIsIDB4ZDUsIDB4MzUsIDB4NWQsCisgIDB4NDEsIDB4ZmYsIDB4MjQsIDB4N2MsIDB4MmUsIDB4ZDEsIDB4YTIsIDB4NjAsIDB4NjYsIDB4YjUsIDB4NTksIDB4OWMsCisgIDB4NDYsIDB4ZDYsIDB4ZGMsIDB4MDQsIDB4ZTcsIDB4MmYsIDB4MWYsIDB4NjUsIDB4OTAsIDB4NGMsIDB4MWMsIDB4NGMsCisgIDB4ZDQsIDB4NjQsIDB4NmYsIDB4MTQsIDB4N2QsIDB4NGQsIDB4YjcsIDB4MDEsIDB4ZGMsIDB4MWUsIDB4NjEsIDB4YTAsCisgIDB4YTQsIDB4N2MsIDB4MTMsIDB4YTIsIDB4MTMsIDB4ZTYsIDB4M2UsIDB4YTEsIDB4YmIsIDB4NDgsIDB4NTksIDB4OTEsCisgIDB4ZDYsIDB4ODAsIDB4NTIsIDB4YzMsIDB4Y2YsIDB4YTgsIDB4OWYsIDB4NGUsIDB4MGQsIDB4ZGQsIDB4ZTQsIDB4ZjcsCisgIDB4ZjgsIDB4YWMsIDB4MWIsIDB4MDQsIDB4MzUsIDB4NTEsIDB4YTYsIDB4MzgsIDB4NDQsIDB4ZjksIDB4ZTcsIDB4OGIsCisgIDB4NTEsIDB4YjQsIDB4MDksIDB4YTUsIDB4NDksIDB4OWEsIDB4OTUsIDB4YjUsIDB4YmYsIDB4MWYsIDB4ODUsIDB4OWIsCisgIDB4MGYsIDB4MTIsIDB4NjMsIDB4NjcsIDB4NmUsIDB4YzcsIDB4YjMsIDB4MTksIDB4NmIsIDB4MTAsIDB4ZWEsIDB4NDEsCisgIDB4ZjQsIDB4ZTksIDB4NjgsIDB4ZjcsIDB4ZjksIDB4NjgsIDB4NjcsIDB4YzQsIDB4Y2UsIDB4ODIsIDB4ZTQsIDB4MmUsCisgIDB4Y2QsIDB4ZTksIDB4YmEsIDB4NDYsIDB4YTYsIDB4MTYsIDB4NzcsIDB4MjUsIDB4MGEsIDB4ZGUsIDB4YTQsIDB4ZWIsCisgIDB4MGIsIDB4NmYsIDB4ZWIsIDB4ZWIsIDB4ZWIsIDB4YjksIDB4MjgsIDB4ZDQsIDB4NmQsIDB4YmEsIDB4ZGYsIDB4MDUsCisgIDB4M2EsIDB4YjcsIDB4YTAsIDB4OGIsIDB4MDUsIDB4YjQsIDB4MGQsIDB4NGYsIDB4OGUsIDB4MmUsIDB4YWIsIDB4YzgsCisgIDB4NWMsIDB4YTgsIDB4NmMsIDB4NzUsIDB4M2EsIDB4YjcsIDB4OWMsIDB4OWMsIDB4MGMsIDB4ZmYsIDB4NDgsIDB4Y2IsCisgIDB4M2QsIDB4MzQsIDB4ZTksIDB4MTgsIDB4OTIsIDB4NzAsIDB4MzQsIDB4YmMsIDB4MDMsIDB4YWYsIDB4ZjksIDB4NzYsCisgIDB4MTUsIDB4YWEsIDB4MjgsIDB4MmYsIDB4NGEsIDB4NzIsIDB4ODAsIDB4ZDIsIDB4MTEsIDB4MzEsIDB4MGYsIDB4ZDQsCisgIDB4MDIsIDB4YjUsIDB4MTAsIDB4MzksIDB4ZjEsIDB4YTIsIDB4OGUsIDB4MzQsIDB4OWEsIDB4NDMsIDB4YjcsIDB4MmEsCisgIDB4ZWEsIDB4NGYsIDB4NWMsIDB4OTAsIDB4NDksIDB4Y2MsIDB4NTcsIDB4M2YsIDB4N2EsIDB4ZjgsIDB4OGEsIDB4YjUsCisgIDB4MzUsIDB4NzcsIDB4OGMsIDB4ZTUsIDB4MDgsIDB4MzIsIDB4ZTgsIDB4MDUsIDB4NzksIDB4YjgsIDB4YzMsIDB4MWQsCisgIDB4NjQsIDB4ODMsIDB4NmMsIDB4NzcsIDB4YjQsIDB4ZDMsIDB4NjgsIDB4NmMsIDB4OTMsIDB4ZjcsIDB4ZmUsIDB4MTYsCisgIDB4OGMsIDB4MTQsIDB4MzYsIDB4YmEsIDB4ZDEsIDB4NGIsIDB4YjYsIDB4MDgsIDB4YzgsIDB4ZDgsIDB4NDgsIDB4NjAsCisgIDB4MzgsIDB4OTgsIDB4MmEsIDB4ZDAsIDB4ZWQsIDB4MGMsIDB4NTUsIDB4NDEsIDB4Y2QsIDB4NTgsIDB4ZmYsIDB4MWEsCisgIDB4Y2QsIDB4ZTEsIDB4N2UsIDB4Y2MsIDB4Y2YsIDB4ZjEsIDB4YWIsIDB4YjgsIDB4NjAsIDB4NjcsIDB4MzgsIDB4NDMsCisgIDB4NjQsIDB4MTMsIDB4OTEsIDB4MTIsIDB4ZDgsIDB4YjcsIDB4MTYsIDB4NzYsIDB4ODMsIDB4ZmUsIDB4ZWQsIDB4NzIsCisgIDB4ZmYsIDB4YWEsIDB4NzksIDB4NzksIDB4YjcsIDB4ZGIsIDB4ZWMsIDB4MWQsIDB4ZGQsIDB4OGEsIDB4YjcsIDB4OWEsCisgIDB4N2QsIDB4ZTMsIDB4ZDUsIDB4YjksIDB4M2MsIDB4MWQsIDB4M2IsIDB4ZDEsIDB4ZDksIDB4MjUsIDB4OTMsIDB4ODEsCisgIDB4Y2MsIDB4YjcsIDB4MmMsIDB4YjksIDB4Y2UsIDB4YzksIDB4NzAsIDB4OTYsIDB4YWIsIDB4MTksIDB4ZTQsIDB4MjYsCisgIDB4OGEsIDB4MWIsIDB4Y2QsIDB4MTUsIDB4YzksIDB4MjIsIDB4YWYsIDB4ZTQsIDB4NjUsIDB4MzksIDB4ZDYsIDB4ODMsCisgIDB4M2UsIDB4ZWMsIDB4NzEsIDB4MWYsIDB4Y2EsIDB4NzIsIDB4N2UsIDB4YjcsIDB4ZDcsIDB4ZDksIDB4MDcsIDB4ZWIsCisgIDB4NDQsIDB4YWQsIDB4MTcsIDB4N2MsIDB4NjcsIDB4YjcsIDB4NWUsIDB4ZWMsIDB4YjUsIDB4N2IsIDB4ODEsIDB4NGUsCisgIDB4YWMsIDB4ZTksIDB4MDMsIDB4YmYsIDB4ZGEsIDB4ZWEsIDB4YzMsIDB4MTMsIDB4ZWIsIDB4YzMsIDB4OTMsIDB4OGYsCisgIDB4OWQsIDB4ODcsIDB4YjAsIDB4MDcsIDB4NGYsIDB4N2UsIDB4ZTksIDB4M2MsIDB4NzQsIDB4ZjYsIDB4ZTEsIDB4MjksCisgIDB4ZjcsIDB4MjEsIDB4NWQsIDB4ZGUsIDB4M2QsIDB4NmQsIDB4YmMsIDB4NDMsIDB4ZGEsIDB4ZDAsIDB4ZGYsIDB4ZmEsCisgIDB4ZDksIDB4M2MsIDB4OWMsIDB4YzYsIDB4NGIsIDB4ZDYsIDB4MzQsIDB4NTgsIDB4NzMsIDB4MTIsIDB4ZGIsIDB4N2MsCisgIDB4N2UsIDB4YzcsIDB4NWYsIDB4MjQsIDB4Y2QsIDB4NDUsIDB4YmIsIDB4MTIsIDB4NjIsIDB4NWMsIDB4MDUsIDB4OTYsCisgIDB4ZDIsIDB4YzksIDB4NzksIDB4YTMsIDB4MzksIDB4ZWQsIDB4NzQsIDB4NDksIDB4MzcsIDB4YzgsIDB4OWIsIDB4OTQsCisgIDB4MmUsIDB4NmEsIDB4NzIsIDB4YWEsIDB4ZDIsIDB4NzksIDB4MmMsIDB4N2YsIDB4MzksIDB4MzksIDB4YmYsIDB4ZmIsCisgIDB4NjQsIDB4YTgsIDB4NWYsIDB4ZDgsIDB4MWEsIDB4ODgsIDB4ODIsIDB4MzEsIDB4ZmQsIDB4NTQsIDB4ZDEsIDB4ODEsCisgIDB4NTIsIDB4MzYsIDB4OWEsIDB4YjMsIDB4OWUsIDB4YzEsIDB4MjIsIDB4ZTQsIDB4YmUsIDB4MjQsIDB4NmEsIDB4NTQsCisgIDB4ZDMsIDB4MGYsIDB4YTgsIDB4YWQsIDB4YTcsIDB4ZDYsIDB4YTksIDB4NDQsIDB4YWMsIDB4YWQsIDB4NjAsIDB4YmMsCisgIDB4OWYsIDB4ZTgsIDB4NzgsIDB4M2YsIDB4ZjksIDB4YmYsIDB4NzIsIDB4YmMsIDB4YjAsIDB4YzgsIDB4YmIsIDB4NDYsCisgIDB4ZmMsIDB4NDksIDB4NzMsIDB4YzQsIDB4OTEsIDB4YmIsIDB4ZGYsIDB4OTAsIDB4ZWUsIDB4MTgsIDB4MzYsIDB4NTUsCisgIDB4MGEsIDB4ZTksIDB4ZTksIDB4NzQsIDB4MWEsIDB4ZDgsIDB4ZGEsIDB4YzMsIDB4OTgsIDB4YTcsIDB4MjUsIDB4NWUsCisgIDB4YjIsIDB4YTcsIDB4YTUsIDB4MjksIDB4OGIsIDB4NzQsIDB4ZjAsIDB4NmUsIDB4YjMsIDB4NWIsIDB4NmUsIDB4MmIsCisgIDB4ZmEsIDB4OGUsIDB4ZTUsIDB4MGQsIDB4ZTYsIDB4MjYsIDB4NWYsIDB4NWUsIDB4MzMsIDB4ZTcsIDB4ZDYsIDB4NDIsCisgIDB4ZjcsIDB4ZTUsIDB4NjIsIDB4YzUsIDB4ODcsIDB4YmYsIDB4YWQsIDB4NGMsIDB4NjcsIDB4NzMsIDB4M2MsIDB4MDAsCisgIDB4MTgsIDB4ODgsIDB4NzQsIDB4ZmIsIDB4ZTEsIDB4OGIsIDB4YTksIDB4YmEsIDB4YmIsIDB4MDIsIDB4ZjUsIDB4NDcsCisgIDB4ZmYsIDB4YTMsIDB4ZDksIDB4NzMsIDB4NWUsIDB4OTcsIDB4OTQsIDB4ZWYsIDB4NmQsIDB4YTIsIDB4OWMsIDB4ZjksCisgIDB4ZDEsIDB4NDYsIDB4NzMsIDB4N2MsIDB4ZjAsIDB4NjcsIDB4N2QsIDB4YmEsIDB4ZGYsIDB4YmUsIDB4NGYsIDB4ZDksCisgIDB4YWIsIDB4OTYsIDB4ZWEsIDB4MDUsIDB4OGYsIDB4Y2MsIDB4ZTIsIDB4NjgsIDB4NWEsIDB4NDAsIDB4YmIsIDB4OGYsCisgIDB4ZDgsIDB4ZGIsIDB4YzAsIDB4ZTIsIDB4YWYsIDB4MzcsIDB4MDAsIDB4NzQsIDB4MzYsIDB4YmEsIDB4OWEsIDB4YzcsCisgIDB4ZGMsIDB4NzYsIDB4NzMsIDB4OWUsIDB4ZDMsIDB4NmIsIDB4MzIsIDB4ODMsIDB4YzUsIDB4ZTcsIDB4NTUsIDB4ZTYsCisgIDB4MGIsIDB4ZGUsIDB4MzIsIDB4NWYsIDB4ZWIsIDB4OTYsIDB4YTEsIDB4OTUsIDB4NGMsIDB4YjMsIDB4ZTksIDB4N2MsCisgIDB4MDUsIDB4YzcsIDB4YzcsIDB4MTksIDB4MGQsIDB4OGMsIDB4N2UsIDB4YjUsIDB4MTUsIDB4NGMsIDB4ZTAsIDB4MDEsCisgIDB4NGYsIDB4MjAsIDB4N2IsIDB4MDIsIDB4ODcsIDB4MzEsIDB4OWQsIDB4ZWYsIDB4NTUsIDB4ZjQsIDB4NDIsIDB4ZmUsCisgIDB4NTMsIDB4NTYsIDB4NmMsIDB4MzIsIDB4N2YsIDB4ZGUsIDB4YWQsIDB4ODUsIDB4YzcsIDB4N2EsIDB4ZmIsIDB4ZTUsCisgIDB4YjEsIDB4YmQsIDB4ZTUsIDB4NTcsIDB4MGYsIDB4ODIsIDB4NzcsIDB4NzgsIDB4YTYsIDB4NGEsIDB4OWEsIDB4M2YsCisgIDB4MzMsIDB4NTgsIDB4YTAsIDB4NDcsIDB4NmQsIDB4ZmIsIDB4ZDYsIDB4OWIsIDB4MWIsIDB4NzMsIDB4NTcsIDB4ZTksCisgIDB4MTgsIDB4OTksIDB4ZjEsIDB4MjEsIDB4ODgsIDB4OGIsIDB4NDUsIDB4NzQsIDB4ZjgsIDB4ZDUsIDB4MDksIDB4OGYsCisgIDB4MzIsIDB4NGUsIDB4ZTcsIDB4NjIsIDB4ZjUsIDB4ZWEsIDB4YTgsIDB4ZDMsIDB4NjQsIDB4Y2UsIDB4MDcsIDB4MjgsCisgIDB4YTYsIDB4MGMsIDB4YWUsIDB4YWMsIDB4MjgsIDB4YmMsIDB4NDUsIDB4ZWIsIDB4ZmYsIDB4ZjUsIDB4NWUsIDB4ZTcsCisgIDB4M2YsIDB4ZDMsIDB4MjQsIDB4YzYsIDB4ZGIsIDB4NGYsIDB4NDcsIDB4M2IsIDB4M2QsIDB4ZjYsIDB4NjMsIDB4ZDAsCisgIDB4OTIsIDB4MjUsIDB4ZDksIDB4MzQsIDB4OWYsIDB4ZjEsIDB4NDcsIDB4ZTYsIDB4NzEsIDB4NzYsIDB4NWIsIDB4Y2EsCisgIDB4MTksIDB4MmMsIDB4MDcsIDB4MTMsIDB4ZjcsIDB4OTUsIDB4YWMsIDB4ZWIsIDB4NTUsIDB4NTEsIDB4OTAsIDB4YzEsCisgIDB4M2YsIDB4MGIsIDB4ZmQsIDB4YzksIDB4NjYsIDB4MDQsIDB4YzgsIDB4NzAsIDB4YTAsIDB4OWEsIDB4ZjQsIDB4MzYsCisgIDB4ZjMsIDB4OGYsIDB4MTUsIDB4MmYsIDB4YzgsIDB4MjIsIDB4MmUsIDB4NmUsIDB4ZWQsIDB4ZDYsIDB4YzQsIDB4MWUsCisgIDB4OGQsIDB4NzgsIDB4NGUsIDB4MzYsIDB4M2EsIDB4YWYsIDB4MWMsIDB4ZmEsIDB4MjUsIDB4YWEsIDB4YWMsIDB4ZGQsCisgIDB4ZGMsIDB4ZjAsIDB4NmIsIDB4OWMsIDB4NmUsIDB4MjQsIDB4MmMsIDB4ZWMsIDB4ZTAsIDB4OTQsIDB4M2QsIDB4OTMsCisgIDB4ZGIsIDB4MWQsIDB4Y2IsIDB4MmYsIDB4NDgsIDB4YjAsIDB4YWQsIDB4NjUsIDB4ZWMsIDB4ZmEsIDB4MjgsIDB4ZmQsCisgIDB4OTUsIDB4OWIsIDB4YzcsIDB4MzEsIDB4NGEsIDB4MDIsIDB4NDEsIDB4ZWYsIDB4OTIsIDB4ZTUsIDB4MjEsIDB4NGUsCisgIDB4ZDMsIDB4NzksIDB4NGMsIDB4ZTYsIDB4MDMsIDB4Y2YsIDB4OWUsIDB4ODksIDB4NTAsIDB4ZmIsIDB4ZTMsIDB4ZmMsCisgIDB4NWIsIDB4MTYsIDB4YTMsIDB4N2UsIDB4ODksIDB4N2QsIDB4MTAsIDB4YWMsIDB4ZmYsIDB4OTAsIDB4MmMsIDB4NGQsCisgIDB4ZjYsIDB4MDEsIDB4NzcsIDB4YWYsIDB4ZjQsIDB4MjUsIDB4ZWYsIDB4NjksIDB4YjcsIDB4MzEsIDB4YWUsIDB4ZDIsCisgIDB4ZWIsIDB4NTUsIDB4OTEsIDB4ODgsIDB4N2QsIDB4MGEsIDB4YjcsIDB4YjEsIDB4NzksIDB4OGIsIDB4ZjksIDB4MjQsCisgIDB4YmYsIDB4YzksIDB4MjEsIDB4N2UsIDB4NzQsIDB4YTAsIDB4MjYsIDB4ZjMsIDB4YWIsIDB4NDEsIDB4YTMsIDB4MzksCisgIDB4YjYsIDB4NGEsIDB4NzAsIDB4MTAsIDB4YTAsIDB4YzMsIDB4YjAsIDB4NzcsIDB4Y2EsIDB4NjQsIDB4OGEsIDB4YzYsCisgIDB4YjIsIDB4NDQsIDB4ZWQsIDB4NTIsIDB4ZTgsIDB4N2EsIDB4NzYsIDB4M2EsIDB4NDYsIDB4ZDMsIDB4NzksIDB4OWMsCisgIDB4MmUsIDB4YTAsIDB4MjEsIDB4ZDQsIDB4YTcsIDB4ZDYsIDB4MTQsIDB4OWMsIDB4NGIsIDB4YmQsIDB4OTEsIDB4NDIsCisgIDB4NjYsIDB4MjYsIDB4N2MsIDB4MjEsIDB4MmUsIDB4NGEsIDB4YmUsIDB4ZjIsIDB4NDIsIDB4ZDMsIDB4OTksIDB4MjksCisgIDB4MjAsIDB4ZDcsIDB4Y2QsIDB4OWIsIDB4NjQsIDB4N2EsIDB4MGIsIDB4YTksIDB4MGMsIDB4MmUsIDB4MDEsIDB4NGQsCisgIDB4YjUsIDB4MjIsIDB4OGIsIDB4YzIsIDB4OTcsIDB4YzIsIDB4ZWEsIDB4NjYsIDB4NDUsIDB4NTMsIDB4YmUsIDB4Y2MsCisgIDB4Y2IsIDB4MzIsIDB4OWQsIDB4YjAsIDB4NTAsIDB4ZDIsIDB4MjUsIDB4NzEsIDB4MzUsIDB4YzUsIDB4NzYsIDB4YTYsCisgIDB4MTksIDB4NGYsIDB4ZGUsIDB4ZDMsIDB4ZTUsIDB4OGYsIDB4Y2UsIDB4YWQsIDB4MGEsIDB4NGUsIDB4N2EsIDB4ODgsCisgIDB4Y2QsIDB4OTAsIDB4NjQsIDB4NjQsIDB4YjksIDB4YWUsIDB4NzcsIDB4YTIsIDB4NzIsIDB4ZWEsIDB4MmEsIDB4YTIsCisgIDB4ZDQsIDB4N2IsIDB4M2MsIDB4YWUsIDB4YzgsIDB4NzIsIDB4NjksIDB4OWUsIDB4NDYsIDB4OGQsIDB4ZDksIDB4NmMsCisgIDB4MzQsIDB4MjcsIDB4NzMsIDB4M2IsIDB4NjAsIDB4MmYsIDB4MTEsIDB4NmIsIDB4NjQsIDB4YjksIDB4MDgsIDB4YzIsCisgIDB4OTMsIDB4NDYsIDB4ZDcsIDB4M2UsIDB4MzUsIDB4M2MsIDB4MjcsIDB4NzEsIDB4OTksIDB4NGUsIDB4NTksIDB4YmUsCisgIDB4NjYsIDB4ZTksIDB4NzUsIDB4YzIsIDB4MGEsIDB4ODUsIDB4NmMsIDB4ZDEsIDB4NmEsIDB4YmUsIDB4MTgsIDB4ODQsCisgIDB4NDYsIDB4YWQsIDB4NWIsIDB4NzEsIDB4M2IsIDB4NzksIDB4ZGIsIDB4NTIsIDB4MDcsIDB4N2QsIDB4MDMsIDB4NzUsCisgIDB4MjMsIDB4ZDYsIDB4OTEsIDB4OTMsIDB4MGUsIDB4YmIsIDB4ZGUsIDB4ZDAsIDB4ZDUsIDB4ODgsIDB4NmMsIDB4NGMsCisgIDB4NzYsIDB4NmIsIDB4Y2YsIDB4NzgsIDB4N2IsIDB4YTIsIDB4MmIsIDB4ZDQsIDB4MGIsIDB4ZDUsIDB4YTgsIDB4NGQsCisgIDB4YWQsIDB4MDQsIDB4MGYsIDB4MDUsIDB4ZWQsIDB4MjMsIDB4ZDIsIDB4M2QsIDB4MDMsIDB4ZGUsIDB4NDIsIDB4NTMsCisgIDB4ZGMsIDB4MWIsIDB4MTcsIDB4ZjEsIDB4MDMsIDB4OTYsIDB4ODgsIDB4ZWUsIDB4NTksIDB4ZWUsIDB4NjYsIDB4MzMsCisgIDB4NjEsIDB4MDcsIDB4MDYsIDB4M2IsIDB4OGIsIDB4ZWUsIDB4ZDMsIDB4YTksIDB4ZjgsIDB4MDksIDB4NzgsIDB4NDIsCisgIDB4M2EsIDB4MGMsIDB4Y2EsIDB4ZTksIDB4M2MsIDB4ZTUsIDB4ZTcsIDB4MTYsIDB4YWIsIDB4MTIsIDB4M2UsIDB4MDQsCisgIDB4OWMsIDB4NzQsIDB4MzgsIDB4NGMsIDB4ZWYsIDB4NjksIDB4YTksIDB4OWMsIDB4YzIsIDB4YzUsIDB4NGQsIDB4OTAsCisgIDB4OGMsIDB4NzgsIDB4YmUsIDB4YTAsIDB4YzYsIDB4NDUsIDB4MGEsIDB4NWYsIDB4NTIsIDB4YWIsIDB4MzksIDB4ZTksCisgIDB4MzMsIDB4MGYsIDB4MTMsIDB4ZmQsIDB4ZDQsIDB4NmUsIDB4ZjIsIDB4ZWIsIDB4N2EsIDB4NWQsIDB4ZjMsIDB4ZDcsCisgIDB4MzQsIDB4NmMsIDB4MmMsIDB4NTYsIDB4NGEsIDB4YzEsIDB4YzYsIDB4OTksIDB4ZjAsIDB4MjQsIDB4NGIsIDB4ZjAsCisgIDB4MjMsIDB4N2EsIDB4YzEsIDB4NDcsIDB4ZGEsIDB4NGIsIDB4MWUsIDB4Y2MsIDB4MWEsIDB4OGQsIDB4MTksIDB4OWQsCisgIDB4YzMsIDB4ODUsIDB4NzUsIDB4NTMsIDB4YmYsIDB4Y2IsIDB4MDUsIDB4YWEsIDB4NTEsIDB4MmMsIDB4NmMsIDB4NjksCisgIDB4MGUsIDB4ZmUsIDB4M2UsIDB4ZGUsIDB4ZWYsIDB4YWIsIDB4NjUsIDB4NTMsIDB4NTIsIDB4NDksIDB4MzIsIDB4MTMsCisgIDB4ZDYsIDB4OTYsIDB4YWUsIDB4YTUsIDB4YTUsIDB4YmYsIDB4NDYsIDB4ZDAsIDB4ZGEsIDB4MjQsIDB4ZTksIDB4MWQsCisgIDB4MGQsIDB4ZGMsIDB4M2IsIDB4ODYsIDB4YTQsIDB4NjksIDB4NzgsIDB4NmMsIDB4YTMsIDB4ZGUsIDB4MzgsIDB4YTksCisgIDB4OWEsIDB4Y2QsIDB4MWQsIDB4ZTIsIDB4N2IsIDB4ZmIsIDB4YmQsIDB4MjgsIDB4NzAsIDB4ZmQsIDB4NGEsIDB4YmIsCisgIDB4M2EsIDB4NzksIDB4OTMsIDB4YzQsIDB4MWMsIDB4YmIsIDB4NjIsIDB4YjgsIDB4NDcsIDB4M2QsIDB4MGUsIDB4MGQsCisgIDB4ZWUsIDB4YmUsIDB4ZmMsIDB4ZjYsIDB4ZTAsIDB4ZjQsIDB4ZWQsIDB4ZjEsIDB4ZWUsIDB4NWYsIDB4OWIsIDB4ZTIsCisgIDB4NDMsIDB4YmYsIDB4ZGIsIDB4OTMsIDB4ZGYsIDB4ZWQsIDB4ZjUsIDB4YmEsIDB4NTQsIDB4MWEsIDB4ZGQsIDB4OGYsCisgIDB4ZmEsIDB4MmYsIDB4ZmIsIDB4NTEsIDB4ZjksIDB4YjAsIDB4OTgsIDB4ZTQsIDB4ODgsIDB4ZDUsIDB4ZDgsIDB4YTEsCisgIDB4MGMsIDB4MzUsIDB4NDYsIDB4NWQsIDB4MTgsIDB4YTgsIDB4OWQsIDB4NTEsIDB4YzksIDB4MTksIDB4YzgsIDB4YjMsCisgIDB4YzIsIDB4N2QsIDB4ZTcsIDB4MDMsIDB4YjQsIDB4ZDksIDB4NzcsIDB4YjgsIDB4MmYsIDB4NzEsIDB4MmMsIDB4ZTMsCisgIDB4OGUsIDB4YzgsIDB4MzIsIDB4MTAsIDB4Y2YsIDB4YzIsIDB4ZjksIDB4MjgsIDB4MmIsIDB4MWMsIDB4ODksIDB4YmEsCisgIDB4NDQsIDB4ZGMsIDB4YmEsIDB4ZjgsIDB4Y2MsIDB4MDYsIDB4YjIsIDB4OTEsIDB4OWEsIDB4ZGEsIDB4ZGUsIDB4MGQsCisgIDB4ZDgsIDB4ZjcsIDB4MDksIDB4M2EsIDB4YjcsIDB4ODQsIDB4ZDEsIDB4OWEsIDB4NDIsIDB4YjAsIDB4MWUsIDB4NDgsCisgIDB4NzgsIDB4YWIsIDB4ZTksIDB4Y2QsIDB4ODgsIDB4NGUsIDB4M2QsIDB4ZDEsIDB4MjksIDB4YmMsIDB4Y2IsIDB4NjUsCisgIDB4N2YsIDB4MzYsIDB4MTUsIDB4MWUsIDB4OWYsIDB4MDksIDB4MDgsIDB4ZDYsIDB4ZGQsIDB4ZDEsIDB4NDAsIDB4NGEsCisgIDB4MTEsIDB4ZGUsIDB4OWUsIDB4ZjYsIDB4NjUsIDB4MTksIDB4OTMsIDB4Y2EsIDB4YTcsIDB4YWIsIDB4YjksIDB4NmMsCisgIDB4NjgsIDB4MDgsIDB4ZDcsIDB4YzIsIDB4ZGQsIDB4YmQsIDB4NzgsIDB4OGIsIDB4MTUsIDB4Y2QsIDB4ZTYsIDB4NjgsCisgIDB4ZWYsIDB4ZTQsIDB4MGIsIDB4ZmUsIDB4YTQsIDB4NDYsIDB4ZGIsIDB4MzgsIDB4NmMsIDB4YWEsIDB4ZTMsIDB4YzAsCisgIDB4N2UsIDB4YTIsIDB4NmUsIDB4YjMsIDB4NDMsIDB4ZWYsIDB4NDEsIDB4MzcsIDB4NjUsIDB4YmYsIDB4NDgsIDB4NzQsCisgIDB4MDcsIDB4OGIsIDB4ZWYsIDB4YWUsIDB4MjksIDB4ZmEsIDB4ZDQsIDB4ZDgsIDB4MjQsIDB4Y2QsIDB4NDQsIDB4YjYsCisgIDB4ZmQsIDB4ODEsIDB4MTUsIDB4MGQsIDB4NGYsIDB4NTksIDB4YTYsIDB4ZTcsIDB4YjksIDB4MmEsIDB4NzUsIDB4N2YsCisgIDB4MjEsIDB4NTcsIDB4ZmYsIDB4YTQsIDB4Y2EsIDB4NDAsIDB4ZTcsIDB4NGQsIDB4NGYsIDB4MWMsIDB4OTgsIDB4YmEsCisgIDB4MGEsIDB4ZDYsIDB4NGIsIDB4ZDksIDB4NTgsIDB4NmUsIDB4NjYsIDB4ZTksIDB4NGUsIDB4YzksIDB4ZTcsIDB4MmYsCisgIDB4YzQsIDB4ZGUsIDB4OTQsIDB4MmUsIDB4YmIsIDB4ZjIsIDB4M2IsIDB4OWEsIDB4N2IsIDB4OTMsIDB4NTQsIDB4MjUsCisgIDB4ZDksIDB4OTksIDB4YzksIDB4YjYsIDB4OWUsIDB4ZTksIDB4YjYsIDB4OGMsIDB4NDEsIDB4M2YsIDB4ZGEsIDB4ZGEsCisgIDB4ZWIsIDB4ZWMsIDB4ZjIsIDB4ZDgsIDB4NWIsIDB4NGIsIDB4ZmEsIDB4YWMsIDB4ZjcsIDB4NGMsIDB4OGEsIDB4YWEsCisgIDB4MGMsIDB4YjcsIDB4YWQsIDB4ZjksIDB4MzQsIDB4YjEsIDB4ZTIsIDB4NzEsIDB4Y2IsIDB4YTYsIDB4Y2EsIDB4OTYsCisgIDB4MmIsIDB4YjIsIDB4ZTEsIDB4ZGUsIDB4ZTQsIDB4NmUsIDB4MzgsIDB4NzYsIDB4YmUsIDB4YWEsIDB4NjQsIDB4ZDksCisgIDB4Y2UsIDB4YTAsIDB4Y2YsIDB4OGMsIDB4ZDgsIDB4ZDgsIDB4YzAsIDB4OGYsIDB4MjMsIDB4MTcsIDB4MTAsIDB4NmQsCisgIDB4YWEsIDB4MWIsIDB4M2IsIDB4ZmQsIDB4ODYsIDB4NTMsIDB4ZGYsIDB4ODUsIDB4ZTEsIDB4ZGYsIDB4NjMsIDB4NmYsCisgIDB4MGMsIDB4NjgsIDB4MzgsIDB4MGQsIDB4YjMsIDB4OTUsIDB4ZGMsIDB4OTEsIDB4YzksIDB4NWEsIDB4YzYsIDB4NzcsCisgIDB4ODksIDB4NTMsIDB4MTQsIDB4ZGQsIDB4NjcsIDB4OTYsIDB4NzcsIDB4NjQsIDB4OTksIDB4Y2EsIDB4M2UsIDB4YzIsCisgIDB4MzEsIDB4YjAsIDB4NWEsIDB4MmMsIDB4ZDUsIDB4ZDYsIDB4ZjgsIDB4NDMsIDB4YzcsIDB4M2UsIDB4MGMsIDB4ZWQsCisgIDB4ZjYsIDB4OGYsIDB4MzYsIDB4MmMsIDB4NjAsIDB4ZTIsIDB4ZmMsIDB4MTIsIDB4ZDMsIDB4ZTIsIDB4NGIsIDB4MzUsCisgIDB4MmQsIDB4ODcsIDB4NzEsIDB4MzksIDB4NGQsIDB4ZDMsIDB4YzYsIDB4NmIsIDB4YzcsIDB4OTksIDB4ZGMsIDB4NTIsCisgIDB4MGUsIDB4YzYsIDB4ODcsIDB4MjcsIDB4MjcsIDB4ZGUsIDB4YWIsIDB4N2EsIDB4MmYsIDB4YTYsIDB4M2EsIDB4OGYsCisgIDB4ODQsIDB4MWQsIDB4NjcsIDB4MzQsIDB4MjcsIDB4MWMsIDB4N2YsIDB4MWYsIDB4MjEsIDB4MzgsIDB4ODEsIDB4MTAsCisgIDB4N2IsIDB4YTUsIDB4NTYsIDB4NTcsIDB4ZDcsIDB4N2UsIDB4OWIsIDB4YjAsIDB4MGIsIDB4ZWEsIDB4OGEsIDB4NmYsCisgIDB4OWYsIDB4MzMsIDB4MWYsIDB4NmMsIDB4YTQsIDB4MTEsIDB4YjEsIDB4OGYsIDB4MWYsIDB4NjIsIDB4NDEsIDB4MDcsCisgIDB4NTcsIDB4YTksIDB4ZGUsIDB4YTEsIDB4YmYsIDB4NTYsIDB4MGYsIDB4Y2IsIDB4ZTQsIDB4ZTUsIDB4MDEsIDB4ZWMsCisgIDB4YzQsIDB4OWIsIDB4OTYsIDB4M2QsIDB4NmQsIDB4NzcsIDB4OWEsIDB4NjksIDB4YmMsIDB4ZTIsIDB4OWIsIDB4ODksCisgIDB4ZWEsIDB4NDQsIDB4OWMsIDB4NTAsIDB4YmMsIDB4Y2UsIDB4MzMsIDB4NzUsIDB4YWEsIDB4YWEsIDB4N2EsIDB4MjQsCisgIDB4YzMsIDB4ODAsIDB4ZTYsIDB4NmYsIDB4MjYsIDB4ZmUsIDB4M2UsIDB4M2EsIDB4ODgsIDB4OWUsIDB4MzQsIDB4ZWYsCisgIDB4ZTYsIDB4ZTUsIDB4MDMsIDB4OTksIDB4MDAsIDB4OGIsIDB4ZjAsIDB4ZGUsIDB4MjIsIDB4MjcsIDB4ZjYsIDB4YzcsCisgIDB4MTgsIDB4NWQsIDB4MmMsIDB4MzcsIDB4ZDgsIDB4MzEsIDB4NWYsIDB4ZjIsIDB4MWIsIDB4MGQsIDB4NTMsIDB4NjEsCisgIDB4ZTQsIDB4OGQsIDB4OGQsIDB4ZjYsIDB4Y2EsIDB4ZDgsIDB4NDUsIDB4NGEsIDB4Y2YsIDB4ZDMsIDB4ZGEsIDB4OTIsCisgIDB4YWYsIDB4Y2EsIDB4OTUsIDB4MzgsIDB4M2MsIDB4YzgsIDB4NjYsIDB4YWEsIDB4ZTYsIDB4YTQsIDB4ZTQsIDB4MDYsCisgIDB4ZDEsIDB4MmEsIDB4ZTMsIDB4ZmYsIDB4M2EsIDB4YWYsIDB4OWIsIDB4ZjcsIDB4NDcsIDB4ZmEsIDB4MWIsIDB4MTAsCisgIDB4NWYsIDB4NzAsIDB4OGEsIDB4OTQsIDB4MDYsIDB4MWEsIDB4NDcsIDB4YTEsIDB4YTYsIDB4MTUsIDB4YzMsIDB4ZDcsCisgIDB4ZGQsIDB4MDMsIDB4YjEsIDB4MDEsIDB4MzksIDB4ZGMsIDB4MGMsIDB4ZGQsIDB4M2QsIDB4NGIsIDB4MTksIDB4OWMsCisgIDB4NDAsIDB4NWQsIDB4NmUsIDB4YWUsIDB4NTgsIDB4ZGQsIDB4ODIsIDB4MzQsIDB4MTMsIDB4MzIsIDB4ZGEsIDB4MmMsCisgIDB4NTcsIDB4NmMsIDB4ZTUsIDB4OTAsIDB4ZTYsIDB4MzcsIDB4MWIsIDB4YzYsIDB4NWIsIDB4MzUsIDB4MzQsIDB4YmQsCisgIDB4NjYsIDB4YmUsIDB4MzQsIDB4OGYsIDB4MDMsIDB4ZDIsIDB4YjIsIDB4ZTEsIDB4YjUsIDB4YTYsIDB4YjksIDB4YzcsCisgIDB4NWUsIDB4NjAsIDB4OGIsIDB4ZjAsIDB4OTksIDB4ZDEsIDB4M2MsIDB4YTEsIDB4ZGQsIDB4NjUsIDB4MjYsIDB4NTcsCisgIDB4N2QsIDB4OGEsIDB4MjcsIDB4OWQsIDB4MjMsIDB4ZGEsIDB4OTYsIDB4NDEsIDB4ZmMsIDB4ZTcsIDB4ZWMsIDB4ZjksCisgIDB4MzQsIDB4NmQsIDB4MTAsIDB4NWYsIDB4YzEsIDB4OWYsIDB4ZGQsIDB4NTYsIDB4YWQsIDB4NzQsIDB4YjEsIDB4NDYsCisgIDB4OGMsIDB4ZDgsIDB4ZDksIDB4MGYsIDB4MjMsIDB4MGQsIDB4MGEsIDB4NDksIDB4MjMsIDB4NjUsIDB4NTQsIDB4NmIsCisgIDB4YTYsIDB4NzYsIDB4ODIsIDB4YjcsIDB4MWMsIDB4NTUsIDB4ZDAsIDB4YTAsIDB4NzEsIDB4YTAsIDB4YzUsIDB4ZDAsCisgIDB4YmIsIDB4MTgsIDB4NWUsIDB4NDIsIDB4YzQsIDB4MTQsIDB4YjUsIDB4MzUsIDB4ZDcsIDB4OWMsIDB4MzcsIDB4MDMsCisgIDB4ZjAsIDB4NmUsIDB4YjcsIDB4NDcsIDB4NDUsIDB4MGMsIDB4ODMsIDB4Y2QsIDB4NzIsIDB4NmIsIDB4YTQsIDB4YTcsCisgIDB4YjIsIDB4MWIsIDB4MTMsIDB4MjksIDB4ODEsIDB4ZGIsIDB4MmMsIDB4YmYsIDB4MjcsIDB4NDMsIDB4MjgsIDB4Y2IsCisgIDB4ZTUsIDB4NWIsIDB4YTYsIDB4ZjQsIDB4YjgsIDB4ZWYsIDB4YWQsIDB4ZmIsIDB4NzgsIDB4MTIsIDB4MWUsIDB4MGYsCisgIDB4ZTEsIDB4OTMsIDB4OTUsIDB4ZGIsIDB4YzYsIDB4NzIsIDB4NmIsIDB4MzYsIDB4N2QsIDB4NmUsIDB4MWQsIDB4OGQsCisgIDB4YmEsIDB4MmUsIDB4YzUsIDB4YWEsIDB4ZDcsIDB4ZTUsIDB4ZjYsIDB4MDMsIDB4ZGIsIDB4MTIsIDB4ODIsIDB4ODUsCisgIDB4MDYsIDB4ZGMsIDB4ZmEsIDB4MjksIDB4MjYsIDB4NDgsIDB4MmUsIDB4NjQsIDB4YjMsIDB4YjgsIDB4YmMsIDB4MTksCisgIDB4NDQsIDB4YmQsIDB4NjEsIDB4NmYsIDB4ZDAsIDB4MjEsIDB4ZmYsIDB4NGQsIDB4YjUsIDB4NmQsIDB4ZmQsIDB4NzIsCisgIDB4NWIsIDB4YjgsIDB4NzUsIDB4ODIsIDB4YTgsIDB4NGYsIDB4YjcsIDB4ZTUsIDB4NDUsIDB4ZDUsIDB4NzAsIDB4OWUsCisgIDB4OWUsIDB4ZTYsIDB4ZDIsIDB4MjEsIDB4MWIsIDB4NDcsIDB4OTIsIDB4NWQsIDB4ZjMsIDB4ODMsIDB4MTAsIDB4ZmIsCisgIDB4YTYsIDB4ZTUsIDB4Y2UsIDB4ZTEsIDB4YjUsIDB4ZjAsIDB4NTQsIDB4YzcsIDB4NGUsIDB4OTQsIDB4MzgsIDB4MjAsCisgIDB4YmEsIDB4MzYsIDB4OGEsIDB4MGUsIDB4MzIsIDB4ODksIDB4ZDcsIDB4ZGUsIDB4YzcsIDB4OTAsIDB4NDAsIDB4ZjcsCisgIDB4MDksIDB4OTgsIDB4NDEsIDB4ZWQsIDB4MGQsIDB4NjgsIDB4ZWUsIDB4ZjAsIDB4ZGEsIDB4MzEsIDB4YTYsIDB4ZTcsCisgIDB4NzQsIDB4YTcsIDB4OWUsIDB4YjcsIDB4NGYsIDB4NDUsIDB4YmMsIDB4MDksIDB4NDgsIDB4NmQsIDB4ZjYsIDB4NjEsCisgIDB4MzYsIDB4YWIsIDB4OGIsIDB4ODEsIDB4ZjcsIDB4OTMsIDB4OWYsIDB4MTQsIDB4ZDEsIDB4ZjksIDB4ZjcsIDB4MzcsCisgIDB4ZjksIDB4NWMsIDB4MmMsIDB4OTEsIDB4OTYsIDB4NGEsIDB4MzQsIDB4NmIsIDB4MzgsIDB4YmEsIDB4Y2YsIDB4NzEsCisgIDB4MGYsIDB4YzcsIDB4MmQsIDB4OWQsIDB4OWEsIDB4YzAsIDB4NTksIDB4NTUsIDB4MjQsIDB4N2MsIDB4NTEsIDB4YzMsCisgIDB4MzUsIDB4ODksIDB4NmUsIDB4ZDQsIDB4ZjQsIDB4YWQsIDB4NzksIDB4MTIsIDB4MTcsIDB4ZWMsIDB4Y2YsIDB4MTEsCisgIDB4NTMsIDB4NjksIDB4NzgsIDB4ZDcsIDB4NjgsIDB4MGUsIDB4MzMsIDB4Y2EsIDB4OGUsIDB4OTQsIDB4OTgsIDB4YzYsCisgIDB4NWUsIDB4NjQsIDB4ZmMsIDB4OGMsIDB4N2EsIDB4OWQsIDB4MGQsIDB4NDAsIDB4NTEsIDB4NDksIDB4MWMsIDB4NDAsCisgIDB4MjIsIDB4NGIsIDB4N2MsIDB4NGMsIDB4ZGYsIDB4YTUsIDB4N2MsIDB4MmIsIDB4MjMsIDB4NjEsIDB4MjMsIDB4ZWIsCisgIDB4YmUsIDB4MjksIDB4ODksIDB4OTMsIDB4NzgsIDB4N2EsIDB4MGIsIDB4OTEsIDB4NDEsIDB4OTMsIDB4MTIsIDB4ZjQsCisgIDB4YmEsIDB4MDEsIDB4MTgsIDB4NDgsIDB4YWYsIDB4NzIsIDB4YjQsIDB4MjcsIDB4NmYsIDB4ZTIsIDB4MzksIDB4ZGYsCisgIDB4MmYsIDB4NTcsIDB4ZjEsIDB4YmEsIDB4ZTksIDB4YWEsIDB4ZGYsIDB4YjgsIDB4OWQsIDB4N2QsIDB4NmEsIDB4ZTgsCisgIDB4MGQsIDB4MGUsIDB4ZWUsIDB4OTUsIDB4YzEsIDB4YzksIDB4NTgsIDB4ZGYsIDB4OTQsIDB4NWQsIDB4ZTYsIDB4YTksCisgIDB4NDksIDB4NWUsIDB4ZTMsIDB4NjAsIDB4M2MsIDB4OTQsIDB4YzUsIDB4MjMsIDB4ZTUsIDB4OTcsIDB4YWQsIDB4ZTgsCisgIDB4NzQsIDB4YWMsIDB4YTIsIDB4MTcsIDB4ZjksIDB4ZDUsIDB4MTUsIDB4ODksIDB4ZmEsIDB4ZTcsIDB4MmQsIDB4ZjMsCisgIDB4NWMsIDB4MWUsIDB4ZDksIDB4YmUsIDB4NTAsIDB4MDgsIDB4OTUsIDB4NTMsIDB4MTYsIDB4ZjUsIDB4NzgsIDB4NzEsCisgIDB4NjQsIDB4MTYsIDB4NGYsIDB4NzQsIDB4OWQsIDB4ZjIsIDB4NWEsIDB4NDQsIDB4ZDIsIDB4NWMsIDB4ZmIsIDB4NWUsCisgIDB4ZGEsIDB4N2MsIDB4MjIsIDB4YjIsIDB4OTMsIDB4MjMsIDB4ZDIsIDB4MDAsIDB4NGIsIDB4MDAsIDB4YzAsIDB4OWEsCisgIDB4M2MsIDB4NTQsIDB4ODksIDB4YzYsIDB4YWIsIDB4NzQsIDB4MTgsIDB4Y2QsIDB4NDMsIDB4ZWQsIDB4MzYsIDB4NWQsCisgIDB4MmUsIDB4NzksIDB4YjEsIDB4ODAsIDB4ZTAsIDB4NzAsIDB4ZjcsIDB4MjgsIDB4NmUsIDB4NmQsIDB4OTIsIDB4ZDAsCisgIDB4OWUsIDB4YzAsIDB4OWEsIDB4NWEsIDB4NzgsIDB4MjIsIDB4NWYsIDB4ZDEsIDB4YTksIDB4NmMsIDB4NGUsIDB4YjMsCisgIDB4NDksIDB4NDIsIDB4M2IsIDB4YmQsIDB4ZDksIDB4OWMsIDB4MTksIDB4ZmUsIDB4M2UsIDB4ZTQsIDB4YWEsIDB4YjcsCisgIDB4YTQsIDB4MTksIDB4ODcsIDB4NTcsIDB4MzMsIDB4NTMsIDB4YTQsIDB4MjcsIDB4NTcsIDB4YjIsIDB4MjgsIDB4MzgsCisgIDB4YzUsIDB4ZjUsIDB4ZGEsIDB4ZDksIDB4YjUsIDB4ZjksIDB4NWYsIDB4ZjksIDB4YWIsIDB4OTUsIDB4NmQsIDB4ZTgsCisgIDB4ZjEsIDB4YzksIDB4ZmYsIDB4MzgsIDB4ZjYsIDB4MDEsIDB4NzIsIDB4MTcsIDB4ODEsIDB4N2UsIDB4ODAsIDB4YjQsCisgIDB4YjcsIDB4ZTQsIDB4ZTEsIDB4MmQsIDB4NmQsIDB4YjUsIDB4ZGUsIDB4ZjAsIDB4MzAsIDB4MWEsIDB4ZjYsIDB4ZDAsCisgIDB4OTEsIDB4OWEsIDB4ODMsIDB4NzAsIDB4NTUsIDB4ZTUsIDB4MWMsIDB4YzUsIDB4MTAsIDB4MjQsIDB4MDEsIDB4NTAsCisgIDB4NWQsIDB4MmMsIDB4NzAsIDB4NmMsIDB4YmMsIDB4MTQsIDB4YzksIDB4MzYsIDB4YzcsIDB4OGUsIDB4ZGEsIDB4Y2UsCisgIDB4MjksIDB4NDUsIDB4YzEsIDB4YTksIDB4MGYsIDB4NTEsIDB4NDcsIDB4ODksIDB4OWIsIDB4NWUsIDB4YTUsIDB4ZGUsCisgIDB4NDksIDB4OTEsIDB4NzQsIDB4NTksIDB4MWYsIDB4ODksIDB4NTIsIDB4NmUsIDB4YzMsIDB4MDQsIDB4OTUsIDB4MTgsCisgIDB4N2IsIDB4NWIsIDB4MTcsIDB4YTgsIDB4MzcsIDB4NDYsIDB4MjIsIDB4OGEsIDB4MWQsIDB4Y2EsIDB4YWMsIDB4NmQsCisgIDB4ZTcsIDB4M2QsIDB4MmEsIDB4Y2QsIDB4YTEsIDB4MDMsIDB4YTksIDB4ZTksIDB4MjMsIDB4OWEsIDB4YTYsIDB4Y2IsCisgIDB4MWIsIDB4MzYsIDB4MzYsIDB4NWYsIDB4MjAsIDB4NTAsIDB4YzYsIDB4NWUsIDB4MmIsIDB4ZjksIDB4YzEsIDB4ZTcsCisgIDB4OWQsIDB4ZmUsIDB4ZmYsIDB4YjEsIDB4ZWUsIDB4OGIsIDB4NTIsIDB4MGYsIDB4NTQsIDB4N2IsIDB4NWIsIDB4ZjUsCisgIDB4NTcsIDB4NmEsIDB4YTAsIDB4MjMsIDB4ODMsIDB4NDIsIDB4YzgsIDB4MTEsIDB4YzIsIDB4NGQsIDB4YjcsIDB4YTMsCisgIDB4MzQsIDB4ZWUsIDB4NjUsIDB4YjksIDB4ZjIsIDB4M2IsIDB4ZTAsIDB4OGQsIDB4YzAsIDB4M2IsIDB4ZWMsIDB4YjcsCisgIDB4YTMsIDB4ZTgsIDB4ODIsIDB4YWYsIDB4MWQsIDB4YWIsIDB4MjUsIDB4YTMsIDB4MGYsIDB4ODAsIDB4NTAsIDB4YzQsCisgIDB4Y2YsIDB4NWIsIDB4Y2UsIDB4ZTgsIDB4YjIsIDB4MGEsIDB4YWQsIDB4MjMsIDB4MDAsIDB4ZmEsIDB4NmEsIDB4OTYsCisgIDB4NmMsIDB4ZWQsIDB4MTIsIDB4OTIsIDB4ODYsIDB4YmYsIDB4MjMsIDB4MTMsIDB4NzIsIDB4YmYsIDB4NjksIDB4ODEsCisgIDB4N2IsIDB4ZTQsIDB4MTAsIDB4ZTksIDB4YzYsIDB4YWMsIDB4MmMsIDB4ZTcsIDB4YzAsIDB4NmEsIDB4Y2QsIDB4ZjIsCisgIDB4NjksIDB4YjksIDB4MWQsIDB4MmYsIDB4OTcsIDB4ZTUsIDB4YjYsIDB4NzUsIDB4YWUsIDB4ODYsIDB4Y2EsIDB4YjIsCisgIDB4YmIsIDB4Y2EsIDB4NzgsIDB4MWMsIDB4OGMsIDB4OGQsIDB4OGYsIDB4NWQsIDB4NzEsIDB4NjYsIDB4MzksIDB4NmIsCisgIDB4MDksIDB4OTcsIDB4N2MsIDB4ZDIsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4M2QsIDB4YzUsIDB4YzksIDB4ZjEsIDB4NTUsCisgIDB4YjYsIDB4YmEsIDB4M2MsIDB4MWQsIDB4NjMsIDB4YmEsIDB4OWEsIDB4MjcsIDB4ZTcsIDB4OGEsIDB4MTYsIDB4Y2UsCisgIDB4MTYsIDB4ODcsIDB4ZGIsIDB4YjYsIDB4YTYsIDB4NzEsIDB4ZmIsIDB4OTMsIDB4MWIsIDB4ZDUsIDB4NzgsIDB4N2MsCisgIDB4ODgsIDB4MWYsIDB4OGUsIDB4NTcsIDB4NmMsIDB4YzksIDB4ZDAsIDB4MjcsIDB4OGEsIDB4ODcsIDB4YzgsIDB4MWMsCisgIDB4Y2IsIDB4NGQsIDB4ZDksIDB4YTcsIDB4ZDEsIDB4ZGEsIDB4ZjgsIDB4MjQsIDB4MWUsIDB4OWUsIDB4MTcsIDB4MGYsCisgIDB4YTMsIDB4YWIsIDB4NjQsIDB4OTYsIDB4MTcsIDB4ZjEsIDB4ODgsIDB4YjYsIDB4MjYsIDB4ODksIDB4MWMsIDB4NTAsCisgIDB4NTIsIDB4MTgsIDB4MmIsIDB4NTksIDB4YmUsIDB4ZWYsIDB4NjgsIDB4ZjQsIDB4MTgsIDB4ZTYsIDB4MWYsIDB4OGYsCisgIDB4ZjgsIDB4ZTksIDB4YjYsIDB4ZGIsIDB4ZmUsIDB4OGUsIDB4MDQsIDB4ZjgsIDB4MzcsIDB4MTIsIDB4NGYsIDB4YjMsCisgIDB4NDEsIDB4M2IsIDB4MmUsIDB4OGQsIDB4MzgsIDB4NGEsIDB4NmIsIDB4NTYsIDB4MzYsIDB4NWIsIDB4NjMsIDB4ODgsCisgIDB4MmUsIDB4Y2MsIDB4YmEsIDB4NGQsIDB4ZWQsIDB4MGIsIDB4NzMsIDB4MTUsIDB4NDYsIDB4ZmUsIDB4NDksIDB4MWYsCisgIDB4NzcsIDB4NmYsIDB4MDIsIDB4OGUsIDB4YzksIDB4ZDIsIDB4YmEsIDB4Y2UsIDB4ZTksIDB4YmMsIDB4YmMsIDB4NTksCisgIDB4YWMsIDB4OGIsIDB4NzMsIDB4YTgsIDB4YmYsIDB4YjIsIDB4ODQsIDB4ZTMsIDB4Y2QsIDB4ZGYsIDB4ZGYsIDB4NTYsCisgIDB4NTksIDB4ZDAsIDB4M2MsIDB4NGQsIDB4MWEsIDB4NjksIDB4MDIsIDB4ODYsIDB4NzUsIDB4ZjksIDB4NDMsIDB4NjcsCisgIDB4Y2QsIDB4ZjUsIDB4YzMsIDB4M2IsIDB4MTEsIDB4ZTEsIDB4NDAsIDB4MGQsIDB4N2MsIDB4M2EsIDB4MjUsIDB4YWUsCisgIDB4MzIsIDB4MWMsIDB4Y2IsIDB4YzgsIDB4M2MsIDB4ZmMsIDB4MTksIDB4Y2UsIDB4NmUsIDB4NzYsIDB4NmIsIDB4MzcsCisgIDB4MGQsIDB4MjEsIDB4ODcsIDB4NDgsIDB4NmEsIDB4OWMsIDB4ZDIsIDB4ZjUsIDB4YTksIDB4YzIsIDB4N2UsIDB4MWMsCisgIDB4ZjIsIDB4YzQsIDB4YjMsIDB4MzYsIDB4N2IsIDB4NTEsIDB4OTIsIDB4YzksIDB4NDIsIDB4MWYsIDB4ZjksIDB4YmMsCisgIDB4MTUsIDB4MjUsIDB4N2UsIDB4OWYsIDB4MmUsIDB4NTYsIDB4MGIsIDB4MmMsIDB4MTAsIDB4Y2IsIDB4OTYsIDB4M2UsCisgIDB4MjYsIDB4N2EsIDB4ODgsIDB4NGYsIDB4NjAsIDB4NTIsIDB4OGEsIDB4ZDAsIDB4ODAsIDB4NjIsIDB4MjQsIDB4ZDksCisgIDB4MjYsIDB4NzcsIDB4MTEsIDB4OTQsIDB4ZTYsIDB4MjksIDB4MjIsIDB4ZTMsIDB4OTEsIDB4ZGYsIDB4OTIsIDB4YmQsCisgIDB4MzQsIDB4MzIsIDB4MzMsIDB4Y2MsIDB4MjIsIDB4ZjMsIDB4MGIsIDB4MGUsIDB4ZDEsIDB4ZDYsIDB4MTUsIDB4NDYsCisgIDB4YjQsIDB4YmMsIDB4ODksIDB4NGIsIDB4YmEsIDB4YTMsIDB4ZjIsIDB4NGQsIDB4YjUsIDB4NmIsIDB4YTgsIDB4ZjQsCisgIDB4NWIsIDB4N2IsIDB4M2EsIDB4NjksIDB4ZGQsIDB4N2MsIDB4NzIsIDB4MTgsIDB4YmMsIDB4YjgsIDB4ZWUsIDB4ZDIsCisgIDB4ZDQsIDB4OGUsIDB4MTgsIDB4ZjIsIDB4NmIsIDB4ZWUsIDB4OWEsIDB4MGUsIDB4YTcsIDB4M2QsIDB4YWUsIDB4MWYsCisgIDB4OGIsIDB4ZjgsIDB4M2QsIDB4YTYsIDB4ZTUsIDB4NTEsIDB4NGIsIDB4ZWIsIDB4MzcsIDB4ZDIsIDB4YjQsIDB4YjAsCisgIDB4Y2MsIDB4ZTgsIDB4YzIsIDB4NTMsIDB4MzQsIDB4NjUsIDB4MDIsIDB4NDEsIDB4MmMsIDB4ZTcsIDB4NTIsIDB4YzYsCisgIDB4ZDQsIDB4ZmUsIDB4OWQsIDB4ZTQsIDB4NGEsIDB4Y2QsIDB4NTMsIDB4M2EsIDB4MGMsIDB4NjEsIDB4MTcsIDB4MWEsCisgIDB4MDAsIDB4NjEsIDB4MTAsIDB4MmMsIDB4YmEsIDB4YjQsIDB4ZDksIDB4YjEsIDB4NWYsIDB4NjgsIDB4ODIsIDB4NDgsCisgIDB4MjQsIDB4NjMsIDB4NDYsIDB4YjYsIDB4ZTUsIDB4NzQsIDB4OTYsIDB4NDUsIDB4NmUsIDB4YWIsIDB4NDcsIDB4MzcsCisgIDB4MjksIDB4ZjUsIDB4YmMsIDB4OTgsIDB4ZGUsIDB4M2MsIDB4ZjAsIDB4MDUsIDB4ODMsIDB4YmQsIDB4YTksIDB4ODgsCisgIDB4NDcsIDB4NWQsIDB4MDYsIDB4ZTYsIDB4NTEsIDB4NzMsIDB4ZGUsIDB4ZjEsIDB4MGQsIDB4MzUsIDB4MjYsIDB4YjgsCisgIDB4ZjcsIDB4MTEsIDB4OGIsIDB4MzgsIDB4M2QsIDB4NjcsIDB4NDcsIDB4NzUsIDB4YTMsIDB4NzcsIDB4NmMsIDB4ZjYsCisgIDB4ZjIsIDB4ZTYsIDB4NGEsIDB4ZTYsIDB4YmMsIDB4MDYsIDB4MjcsIDB4NWQsIDB4MWUsIDB4YTUsIDB4NjEsIDB4MWUsCisgIDB4MTgsIDB4ZmQsIDB4MzgsIDB4MWYsIDB4NjksIDB4ZGQsIDB4YTgsIDB4NjksIDB4MzYsIDB4MzksIDB4YzUsIDB4MWQsCisgIDB4MjcsIDB4MWYsIDB4NjIsIDB4OTcsIDB4YjIsIDB4N2MsIDB4MGIsIDB4NzcsIDB4MjEsIDB4YmUsIDB4NDQsIDB4M2QsCisgIDB4MzQsIDB4OWEsIDB4ZDMsIDB4MjgsIDB4OWIsIDB4YmUsIDB4NmYsIDB4NzMsIDB4NmYsIDB4ODEsIDB4YjYsIDB4ZDYsCisgIDB4MmQsIDB4MjAsIDB4YjcsIDB4ZjEsIDB4ZDgsIDB4N2QsIDB4YzksIDB4MjYsIDB4NDYsIDB4Y2UsIDB4YjQsIDB4YTYsCisgIDB4ODcsIDB4NDIsIDB4YjAsIDB4ZmYsIDB4YWMsIDB4NGUsIDB4ODcsIDB4YzMsIDB4YWIsIDB4YWEsIDB4ZTUsIDB4YjMsCisgIDB4MGQsIDB4OTYsIDB4YjQsIDB4YmUsIDB4ZDIsIDB4ZjMsIDB4MmIsIDB4MDQsIDB4MjksIDB4YjcsIDB4ZDgsIDB4Y2UsCisgIDB4MjMsIDB4NDksIDB4YTksIDB4YTIsIDB4ZDMsIDB4NTcsIDB4YmMsIDB4MGQsIDB4MGUsIDB4MmYsIDB4ZTgsIDB4YmYsCisgIDB4YTksIDB4NDUsIDB4MjksIDB4ZDksIDB4ODAsIDB4MDYsIDB4OTAsIDB4OWYsIDB4N2QsIDB4MGIsIDB4YWYsIDB4YmYsCisgIDB4MWQsIDB4NDcsIDB4OWIsIDB4NjcsIDB4ZTMsIDB4ZWQsIDB4MjcsIDB4Y2YsIDB4NzcsIDB4YjYsIDB4OWEsIDB4NmQsCisgIDB4ZjEsIDB4NTQsIDB4ZTEsIDB4OTYsIDB4ZGIsIDB4ZTksIDB4ODIsIDB4MWUsIDB4NmYsIDB4NzMsIDB4ZmUsIDB4YzMsCisgIDB4MTYsIDB4ZTcsIDB4YTgsIDB4ZGMsIDB4YzksIDB4MDUsIDB4M2UsIDB4ZjAsIDB4MTksIDB4OWQsIDB4MWYsIDB4YmYsCisgIDB4MzYsIDB4ZGYsIDB4OWUsIDB4NjAsIDB4MDEsIDB4YzgsIDB4ZjQsIDB4YTQsIDB4ZmUsIDB4NzAsIDB4NmMsIDB4YTIsCisgIDB4MmQsIDB4MzgsIDB4MTcsIDB4YzksIDB4OWQsIDB4MzksIDB4MDgsIDB4YTMsIDB4NTMsIDB4OWMsIDB4YTgsIDB4ZDgsCisgIDB4ZjksIDB4ZWMsIDB4ODUsIDB4YjQsIDB4YzMsIDB4NzksIDB4OTksIDB4YjAsIDB4ZDUsIDB4ZTUsIDB4NWIsIDB4NTAsCisgIDB4ZTUsIDB4YzAsIDB4YTcsIDB4NWMsIDB4Y2IsIDB4MmUsIDB4OWEsIDB4NjAsIDB4NjMsIDB4OTcsIDB4ZDQsIDB4YTcsCisgIDB4MDIsIDB4YWEsIDB4OTcsIDB4ZjEsIDB4NmQsIDB4YjMsIDB4ZGYsIDB4NmYsIDB4ODcsIDB4ZDksIDB4OWMsIDB4MWMsCisgIDB4MDAsIDB4OTIsIDB4NDMsIDB4YjMsIDB4MGMsIDB4NDAsIDB4Y2UsIDB4YTcsIDB4MGUsIDB4MGMsIDB4M2UsIDB4OWMsCisgIDB4YzEsIDB4ZGYsIDB4YzAsIDB4ZWUsIDB4OWUsIDB4MTcsIDB4OGYsIDB4ZjgsIDB4ZjMsIDB4YzcsIDB4ODksIDB4YTgsCisgIDB4YmMsIDB4ZDAsIDB4YmYsIDB4ODgsIDB4OTcsIDB4ZTAsIDB4NmIsIDB4MDcsIDB4NDQsIDB4Y2QsIDB4YTIsIDB4NTAsCisgIDB4M2UsIDB4NzIsIDB4ZGMsIDB4ZTEsIDB4YzUsIDB4YjMsIDB4ZDQsIDB4MTYsIDB4MTcsIDB4OTcsIDB4MTQsIDB4MjAsCisgIDB4MGYsIDB4YWUsIDB4ODMsIDB4M2EsIDB4NjksIDB4ZDEsIDB4YTQsIDB4YzgsIDB4ZWYsIDB4MzksIDB4NTMsIDB4MDMsCisgIDB4NTgsIDB4MzEsIDB4NDgsIDB4NWYsIDB4MmMsIDB4YTksIDB4MWIsIDB4MzcsIDB4MmQsIDB4OTcsIDB4MjUsIDB4YWQsCisgIDB4ZTksIDB4ZGMsIDB4NDUsIDB4YjksIDB4YmYsIDB4YmUsIDB4N2MsIDB4N2QsIDB4OGEsIDB4NjUsIDB4YzUsIDB4ZTEsCisgIDB4YjEsIDB4ZDQsIDB4MjAsIDB4M2IsIDB4ZmEsIDB4YmMsIDB4OWEsIDB4OTAsIDB4NTYsIDB4ZTUsIDB4NGIsIDB4NTYsCisgIDB4ZTUsIDB4NWMsIDB4NDgsIDB4YjUsIDB4M2MsIDB4MGIsIDB4OTMsIDB4ZGMsIDB4MTgsIDB4NzcsIDB4NTUsIDB4YjUsCisgIDB4N2EsIDB4OTcsIDB4NWQsIDB4MjEsIDB4MGMsIDB4NTUsIDB4ZGYsIDB4ZTYsIDB4NmMsIDB4YzYsIDB4NjIsIDB4ZDIsCisgIDB4NzUsIDB4OTIsIDB4OGUsIDB4OTEsIDB4ODcsIDB4NjUsIDB4NTMsIDB4NzIsIDB4YzgsIDB4MjgsIDB4OWEsIDB4YWIsCisgIDB4YmIsIDB4NjcsIDB4ZmIsIDB4ZmQsIDB4OTAsIDB4ZWMsIDB4YTYsIDB4MjEsIDB4ZjcsIDB4NmUsIDB4NDgsIDB4Y2QsCisgIDB4NGIsIDB4OTQsIDB4OTYsIDB4NTUsIDB4Y2MsIDB4MjEsIDB4OWQsIDB4OTMsIDB4MjIsIDB4MjcsIDB4ZDEsIDB4ZjAsCisgIDB4MTUsIDB4MmYsIDB4MDUsIDB4M2YsIDB4ZDIsIDB4NWEsIDB4YmUsIDB4NjAsIDB4OTUsIDB4ZjQsIDB4ODIsIDB4ODgsCisgIDB4NjksIDB4NjMsIDB4NjcsIDB4ODgsIDB4ZmMsIDB4NTgsIDB4NWMsIDB4OGUsIDB4MWEsIDB4MDMsIDB4NWUsIDB4MDIsCisgIDB4NWUsIDB4ODUsIDB4YTcsIDB4YTMsIDB4MjUsIDB4OTksIDB4Y2MsIDB4ZjMsIDB4YTYsIDB4N2EsIDB4NjAsIDB4NWYsCisgIDB4NzgsIDB4ZjEsIDB4MjAsIDB4ODAsIDB4MzMsIDB4ZjUsIDB4NTYsIDB4NWIsIDB4ZDAsIDB4Y2UsIDB4NWQsIDB4YjgsCisgIDB4YTUsIDB4NTksIDB4NzksIDB4ZDIsIDB4N2IsIDB4YzYsIDB4NzMsIDB4MzYsIDB4OTUsIDB4OWEsIDB4MWIsIDB4NWUsCisgIDB4NjMsIDB4Y2UsIDB4ZmMsIDB4MWEsIDB4NTksIDB4YTksIDB4MmIsIDB4NTgsIDB4MGYsIDB4YjEsIDB4YWMsIDB4ODQsCisgIDB4MDQsIDB4YjIsIDB4MDEsIDB4ZWYsIDB4OGUsIDB4ZTEsIDB4NzcsIDB4YjYsIDB4ODYsIDB4ZGQsIDB4MjQsIDB4NzQsCisgIDB4ODksIDB4M2UsIDB4ODMsIDB4MDEsIDB4YzUsIDB4MDIsIDB4MjksIDB4MTMsIDB4MDcsIDB4MTMsIDB4YjMsIDB4M2QsCisgIDB4NTAsIDB4NzcsIDB4ZGMsIDB4MWEsIDB4YTQsIDB4NWYsIDB4YzQsIDB4ODgsIDB4YWMsIDB4OGUsIDB4NjEsIDB4Y2IsCisgIDB4MjcsIDB4YzEsIDB4OTYsIDB4ODQsIDB4YzQsIDB4NWEsIDB4NDQsIDB4ZTIsIDB4NzQsIDB4NjIsIDB4NTIsIDB4M2UsCisgIDB4MGMsIDB4NmEsIDB4ZWUsIDB4NzIsIDB4ZDksIDB4M2YsIDB4OGIsIDB4YTQsIDB4YjgsIDB4YzYsIDB4NjUsIDB4OGMsCisgIDB4NmUsIDB4ZDYsIDB4NmQsIDB4OWIsIDB4NWEsIDB4ZjUsIDB4ODUsIDB4ZTIsIDB4NzYsIDB4ZTEsIDB4ZWYsIDB4ZjksCisgIDB4OGYsIDB4YTEsIDB4YzQsIDB4NzcsIDB4NzAsIDB4NjAsIDB4YWMsIDB4MzgsIDB4YWEsIDB4YWEsIDB4OGUsIDB4YTAsCisgIDB4ZmUsIDB4NzAsIDB4MjYsIDB4ZjcsIDB4ZTIsIDB4OTcsIDB4YjMsIDB4MzgsIDB4YTMsIDB4ODksIDB4ZTAsIDB4NzUsCisgIDB4NmMsIDB4ZGYsIDB4MjksIDB4ZTcsIDB4ZjMsIDB4OTcsIDB4NzMsIDB4YmEsIDB4ZTEsIDB4M2UsIDB4ZjQsIDB4MjMsCisgIDB4NDUsIDB4OTgsIDB4MmEsIDB4ZWUsIDB4OTAsIDB4OTEsIDB4MTAsIDB4YjEsIDB4MmQsIDB4ZTYsIDB4ZjQsIDB4NjYsCisgIDB4OTUsIDB4ZGQsIDB4OWEsIDB4YWIsIDB4NzEsIDB4OWUsIDB4ZTcsIDB4MWMsIDB4ZGEsIDB4ZTcsIDB4MTQsIDB4YTcsCisgIDB4NDYsIDB4NzMsIDB4ZmQsIDB4ZTAsIDB4NmIsIDB4ZmYsIDB4MTEsIDB4YjYsIDB4ZGQsIDB4MzUsIDB4Y2IsIDB4NTgsCisgIDB4N2QsIDB4YzYsIDB4YjYsIDB4N2IsIDB4MjEsIDB4NzcsIDB4MjcsIDB4OTcsIDB4YTQsIDB4MDYsIDB4NDQsIDB4NWYsCisgIDB4MGMsIDB4MmMsIDB4OGUsIDB4NWMsIDB4YjksIDB4ODgsIDB4MTEsIDB4ZGMsIDB4ZTIsIDB4NzEsIDB4N2IsIDB4MjMsCisgIDB4MjYsIDB4NDEsIDB4ODgsIDB4MGEsIDB4NDEsIDB4MTEsIDB4ZDcsIDB4YWEsIDB4MDQsIDB4YTEsIDB4ZDgsIDB4OTcsCisgIDB4NjksIDB4MzEsIDB4ZDQsIDB4OWEsIDB4YTcsIDB4YjEsIDB4YzMsIDB4MGIsIDB4NTgsIDB4N2IsIDB4NTUsIDB4MjIsCisgIDB4OTUsIDB4MmUsIDB4OGQsIDB4MGMsIDB4ZGIsIDB4YWQsIDB4MzQsIDB4MGIsIDB4MTUsIDB4MWYsIDB4OTYsIDB4YWIsCisgIDB4OTIsIDB4MWUsIDB4ODUsIDB4NTEsIDB4ZmIsIDB4ZTYsIDB4Y2UsIDB4MzIsIDB4ZWIsIDB4YjcsIDB4ZGMsIDB4ZWIsCisgIDB4MTAsIDB4ODMsIDB4NWUsIDB4NDcsIDB4MzQsIDB4MzgsIDB4NjksIDB4MTgsIDB4NDUsIDB4ZTcsIDB4NzksIDB4ODksCisgIDB4ZTUsIDB4ZTUsIDB4NmUsIDB4NzQsIDB4ZmIsIDB4MjgsIDB4ZGQsIDB4NjEsIDB4M2QsIDB4OGIsIDB4ZmEsIDB4NTcsCisgIDB4NzksIDB4M2UsIDB4ODksIDB4OGIsIDB4YmUsIDB4YWUsIDB4MjAsIDB4YTIsIDB4ZWEsIDB4ZDQsIDB4ZGMsIDB4NGMsCisgIDB4ZjQsIDB4MzIsIDB4MjIsIDB4ZDYsIDB4MjIsIDB4NzUsIDB4NWYsIDB4ZDAsIDB4ODMsIDB4NmQsIDB4NTcsIDB4NGUsCisgIDB4NjgsIDB4OTcsIDB4MzYsIDB4YzMsIDB4MTksIDB4ZGQsIDB4NjcsIDB4ZGMsIDB4NzcsIDB4ZjAsIDB4Y2UsIDB4MmEsCisgIDB4NjgsIDB4NTksIDB4OTIsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDksIDB4NWQsIDB4NGYsIDB4MjMsIDB4NWUsIDB4ZDMsCisgIDB4ZTksIDB4ZjksIDB4MGIsIDB4ZWQsIDB4NmUsIDB4MDksIDB4YTcsIDB4YjksIDB4NGMsIDB4MDQsIDB4ZDIsIDB4YmEsCisgIDB4NDEsIDB4NDYsIDB4ODMsIDB4ODYsIDB4N2EsIDB4YjgsIDB4NWQsIDB4ZmQsIDB4NGMsIDB4NmIsIDB4YzEsIDB4YTAsCisgIDB4YmEsIDB4MjUsIDB4YzAsIDB4OWIsIDB4YzIsIDB4ZTMsIDB4OGEsIDB4MDMsIDB4MjMsIDB4ZTcsIDB4NTYsIDB4NDYsCisgIDB4MWEsIDB4NzcsIDB4ZDUsIDB4ZjgsIDB4OTgsIDB4ZWMsIDB4NDIsIDB4MTcsIDB4MGUsIDB4NDMsIDB4ZmMsIDB4YTcsCisgIDB4YmQsIDB4ZmUsIDB4OTksIDB4MDgsIDB4MWEsIDB4MjQsIDB4MDksIDB4YTcsIDB4MDUsIDB4MDMsIDB4MDgsIDB4NjAsCisgIDB4N2EsIDB4YmIsIDB4N2MsIDB4Y2EsIDB4Y2MsIDB4MWQsIDB4Y2MsIDB4MmUsIDB4ZjgsIDB4YTEsIDB4YmUsIDB4YzIsCisgIDB4MTYsIDB4MDQsIDB4YTAsIDB4ZTYsIDB4MzksIDB4ZmMsIDB4MDMsIDB4MjQsIDB4NjksIDB4NWQsIDB4NTgsIDB4OGEsCisgIDB4ZTcsIDB4NDIsIDB4MzAsIDB4YjQsIDB4N2MsIDB4MTYsIDB4NjEsIDB4MWYsIDB4MzQsIDB4NzUsIDB4ODAsIDB4ZjgsCisgIDB4MmUsIDB4NjUsIDB4NGUsIDB4Y2MsIDB4YjMsIDB4YjksIDB4ZjEsIDB4YjgsIDB4ZjksIDB4YWEsIDB4YjEsIDB4OWMsCisgIDB4MjQsIDB4ZjQsIDB4ZDMsIDB4YjgsIDB4N2IsIDB4OTcsIDB4YzQsIDB4NmEsIDB4ZTMsIDB4MjIsIDB4MzQsIDB4MGQsCisgIDB4NWEsIDB4NjYsIDB4MDMsIDB4MGYsIDB4YWYsIDB4YTcsIDB4YjMsIDB4ZDYsIDB4ZDMsIDB4MTAsIDB4YzcsIDB4NGEsCisgIDB4ZGUsIDB4ZTIsIDB4N2IsIDB4MTcsIDB4ZjYsIDB4NWIsIDB4OTEsIDB4ZmMsIDB4ZjYsIDB4OTYsIDB4NDQsIDB4YTMsCisgIDB4YjksIDB4ZjMsIDB4YTgsIDB4MTcsIDB4MWUsIDB4MzksIDB4NmEsIDB4MzUsIDB4ZjQsIDB4NzAsIDB4YWQsIDB4ZjAsCisgIDB4YzcsIDB4NTQsIDB4NjgsIDB4YWMsIDB4ODUsIDB4MDcsIDB4YzksIDB4NjMsIDB4MzYsIDB4ODYsIDB4Y2EsIDB4MjQsCisgIDB4MmIsIDB4M2MsIDB4NGQsIDB4MTMsIDB4ODAsIDB4OGYsIDB4NmUsIDB4MGUsIDB4OWIsIDB4YmMsIDB4MTEsIDB4ZDYsCisgIDB4MjQsIDB4Y2IsIDB4NTYsIDB4ZDAsIDB4MjksIDB4MjQsIDB4ZmUsIDB4MmQsIDB4ZmIsIDB4OTMsIDB4NDMsIDB4ZDgsCisgIDB4MGMsIDB4NjQsIDB4MjIsIDB4OTksIDB4MmMsIDB4ZjMsIDB4YTQsIDB4MDYsIDB4YTMsIDB4ZmMsIDB4ZmQsIDB4YjQsCisgIDB4MWYsIDB4MmIsIDB4MDIsIDB4YmUsIDB4Y2IsIDB4MWQsIDB4NjEsIDB4OWYsIDB4ZGIsIDB4NDAsIDB4NWMsIDB4ZmUsCisgIDB4OTgsIDB4NDAsIDB4ZTgsIDB4MmQsIDB4NzksIDB4MGMsIDB4YzEsIDB4MWUsIDB4M2YsIDB4ODksIDB4MWQsIDB4NTgsCisgIDB4YjksIDB4MDEsIDB4OGQsIDB4MGYsIDB4NDgsIDB4NmIsIDB4ZWMsIDB4YWMsIDB4MmMsIDB4YjksIDB4ZjcsIDB4MzIsCisgIDB4MDIsIDB4ZDMsIDB4ODYsIDB4MjUsIDB4YzgsIDB4YWUsIDB4YzksIDB4NTMsIDB4OTgsIDB4ZDMsIDB4YTUsIDB4NWUsCisgIDB4MDgsIDB4NWEsIDB4OGUsIDB4YzYsIDB4MGMsIDB4YjIsIDB4Y2MsIDB4YmEsIDB4ZTgsIDB4ZTMsIDB4N2MsIDB4YzAsCisgIDB4NmIsIDB4MDUsIDB4MDQsIDB4ZDksIDB4N2MsIDB4NTcsIDB4MzksIDB4NWYsIDB4NzcsIDB4NzUsIDB4YWYsIDB4YjUsCisgIDB4ZTYsIDB4ODEsIDB4NjEsIDB4NDksIDB4MTIsIDB4M2IsIDB4MDAsIDB4YTYsIDB4NTAsIDB4ZTYsIDB4MzUsIDB4MmUsCisgIDB4MzUsIDB4ZjMsIDB4NzMsIDB4MjIsIDB4ZDMsIDB4ZjEsIDB4ODgsIDB4OTgsIDB4MzgsIDB4YjMsIDB4ZTAsIDB4NTEsCisgIDB4NDksIDB4YjksIDB4NTQsIDB4NGYsIDB4YjcsIDB4Y2EsIDB4YzksIDB4YzAsIDB4NGQsIDB4YWYsIDB4ZWEsIDB4M2UsCisgIDB4MDksIDB4MzEsIDB4YTgsIDB4Y2UsIDB4MzUsIDB4ZmIsIDB4ODEsIDB4NTcsIDB4YjcsIDB4ZTMsIDB4OTgsIDB4OTEsCisgIDB4NjksIDB4NGUsIDB4NjEsIDB4NDYsIDB4YzQsIDB4ZTYsIDB4NDQsIDB4NGYsIDB4MGEsIDB4YjYsIDB4NWUsIDB4NGEsCisgIDB4N2YsIDB4NzAsIDB4ZDAsIDB4NzgsIDB4NDcsIDB4NzUsIDB4MjMsIDB4ZmEsIDB4YjMsIDB4ZDEsIDB4Y2UsIDB4NTYsCisgIDB4YzcsIDB4M2QsIDB4NmEsIDB4MjIsIDB4OTgsIDB4M2UsIDB4MzgsIDB4NjIsIDB4ZTYsIDB4MjksIDB4NjksIDB4NGYsCisgIDB4YjUsIDB4M2EsIDB4NjQsIDB4MzgsIDB4OTIsIDB4OWEsIDB4ZWEsIDB4MDAsIDB4MDIsIDB4ZDcsIDB4NjksIDB4NjYsCisgIDB4MDYsIDB4NDUsIDB4MDgsIDB4ZWUsIDB4NzcsIDB4ZDEsIDB4MjEsIDB4OWUsIDB4NjksIDB4ZjEsIDB4ZDgsIDB4M2EsCisgIDB4OGIsIDB4MjMsIDB4OTcsIDB4OGMsIDB4OTIsIDB4ZDgsIDB4MGUsIDB4NDIsIDB4MDcsIDB4YWEsIDB4OGEsIDB4YmQsCisgIDB4NjcsIDB4YjEsIDB4N2IsIDB4ZWUsIDB4ZjAsIDB4NjksIDB4M2UsIDB4ZWMsIDB4MTgsIDB4OTgsIDB4MTAsIDB4YzMsCisgIDB4MzMsIDB4NDMsIDB4ZDMsIDB4MDUsIDB4NTUsIDB4ZGEsIDB4ZjIsIDB4ZmIsIDB4ZjgsIDB4NDUsIDB4OTYsIDB4M2MsCisgIDB4ZGYsIDB4YTQsIDB4ZGMsIDB4ZGYsIDB4NjgsIDB4MDUsIDB4OWIsIDB4ZjAsIDB4ZmQsIDB4ZWUsIDB4ODQsIDB4N2IsCisgIDB4NmYsIDB4NjEsIDB4MDcsIDB4NDAsIDB4MGYsIDB4N2YsIDB4MGEsIDB4ODcsIDB4ODYsIDB4YjMsIDB4MTgsIDB4ZWIsCisgIDB4NjIsIDB4NmEsIDB4YzcsIDB4NmIsIDB4OWEsIDB4ZTMsIDB4ODEsIDB4ZmQsIDB4MzcsIDB4NDUsIDB4NDAsIDB4NGQsCisgIDB4NDksIDB4YzAsIDB4ZjksIDB4N2EsIDB4NTgsIDB4ZTYsIDB4YjYsIDB4NjAsIDB4YmUsIDB4MjksIDB4ODcsIDB4MzIsCisgIDB4YzUsIDB4NGYsIDB4ZTIsIDB4MTYsIDB4MGMsIDB4YzQsIDB4ODEsIDB4ZjMsIDB4YzgsIDB4NDgsIDB4NzgsIDB4ODksCisgIDB4OWMsIDB4Y2EsIDB4ZTgsIDB4OGIsIDB4NDgsIDB4ZDEsIDB4MzksIDB4ZWMsIDB4YzIsIDB4MGEsIDB4ZGQsIDB4ZmYsCisgIDB4MzgsIDB4ODIsIDB4ZDAsIDB4NzksIDB4OWMsIDB4YTYsIDB4OTgsIDB4ODYsIDB4ZWUsIDB4ZTYsIDB4MDAsIDB4OTEsCisgIDB4MDksIDB4NjcsIDB4NGYsIDB4YzQsIDB4OGYsIDB4MTMsIDB4NjIsIDB4NGEsIDB4YzksIDB4ZjUsIDB4NmUsIDB4NDEsCisgIDB4MTIsIDB4NWUsIDB4N2UsIDB4NzgsIDB4ZjYsIDB4N2UsIDB4ZTEsIDB4ZTQsIDB4N2QsIDB4NjAsIDB4ZjYsIDB4MmUsCisgIDB4NjEsIDB4MjksIDB4OTAsIDB4YzUsIDB4MGIsIDB4ZmMsIDB4ZDcsIDB4Y2IsIDB4MDAsIDB4OTEsIDB4YzQsIDB4YTEsCisgIDB4MDEsIDB4MDEsIDB4Y2MsIDB4N2EsIDB4ODQsIDB4NDcsIDB4N2QsIDB4NmIsIDB4MDYsIDB4MDEsIDB4OWUsIDB4OTcsCisgIDB4YmYsIDB4ZDksIDB4YWEsIDB4NDMsIDB4MWEsIDB4YWQsIDB4ZjcsIDB4ZGQsIDB4Y2QsIDB4ODksIDB4YTMsIDB4M2YsCisgIDB4MWIsIDB4MDUsIDB4MjgsIDB4M2QsIDB4MzgsIDB4NzEsIDB4OTAsIDB4YzYsIDB4YzksIDB4YWYsIDB4ZDMsIDB4ZDcsCisgIDB4OTIsIDB4ZjcsIDB4NGIsIDB4NzUsIDB4N2EsIDB4ZTksIDB4ZGUsIDB4ZWIsIDB4YjgsIDB4OWUsIDB4ZDQsIDB4NmUsCisgIDB4MjksIDB4MzMsIDB4MzMsIDB4MTMsIDB4NWIsIDB4ZTMsIDB4ZmIsIDB4YzIsIDB4YjQsIDB4ZjgsIDB4MDcsIDB4MDcsCisgIDB4MjcsIDB4YTMsIDB4NTMsIDB4MmIsIDB4MDQsIDB4YzgsIDB4MzksIDB4YmQsIDB4NTMsIDB4MDQsIDB4ZTYsIDB4OGQsCisgIDB4ODQsIDB4MzUsIDB4M2EsIDB4ZTIsIDB4NjQsIDB4YTYsIDB4YzksIDB4M2MsIDB4NDgsIDB4OTksIDB4YzUsIDB4ZDEsCisgIDB4MTQsIDB4ZmMsIDB4ZDYsIDB4YTAsIDB4M2UsIDB4NjEsIDB4MzQsIDB4NjYsIDB4NjksIDB4MWEsIDB4OGEsIDB4N2UsCisgIDB4ZmQsIDB4NWMsIDB4YTUsIDB4M2MsIDB4NTMsIDB4YjYsIDB4N2MsIDB4N2MsIDB4MWQsIDB4ZWYsIDB4NWMsIDB4YmUsCisgIDB4ZmYsIDB4ZGIsIDB4ODcsIDB4ODgsIDB4ODgsIDB4ODUsIDB4ZjMsIDB4MWMsIDB4NjAsIDB4OTgsIDB4MWEsIDB4ZTUsCisgIDB4ZjMsIDB4NDIsIDB4NzEsIDB4Y2QsIDB4MzgsIDB4MGMsIDB4ZjYsIDB4ZjcsIDB4ZmUsIDB4NjMsIDB4ODUsIDB4ZjAsCisgIDB4ZTcsIDB4ZjUsIDB4M2EsIDB4MjUsIDB4ODAsIDB4MDMsIDB4OGEsIDB4YzMsIDB4NzksIDB4MWMsIDB4YTksIDB4OWEsCisgIDB4YzMsIDB4ZDYsIDB4YTcsIDB4YTYsIDB4MjEsIDB4ZTUsIDB4ZmUsIDB4ODYsIDB4M2UsIDB4MDQsIDB4MTIsIDB4NGYsCisgIDB4ODUsIDB4NTYsIDB4MjQsIDB4ZjEsIDB4MTEsIDB4NjEsIDB4NzUsIDB4ZTIsIDB4ZDksIDB4OTAsIDB4Y2MsIDB4NDksCisgIDB4MTIsIDB4NWUsIDB4NDEsIDB4ZGEsIDB4MTIsIDB4NDgsIDB4MjcsIDB4NTUsIDB4MzIsIDB4NGYsIDB4YWUsIDB4YzUsCisgIDB4OTYsIDB4M2QsIDB4M2QsIDB4ZmUsIDB4ZjYsIDB4ZjgsIDB4YjQsIDB4ODksIDB4ZDksIDB4NDgsIDB4MmEsIDB4ZjksCisgIDB4YjksIDB4MGIsIDB4Y2QsIDB4MDUsIDB4YmUsIDB4MDgsIDB4NGIsIDB4Y2MsIDB4ZTUsIDB4ZWMsIDB4NDcsIDB4M2QsCisgIDB4MzEsIDB4MzgsIDB4NDUsIDB4NTIsIDB4NWEsIDB4ZWMsIDB4NDQsIDB4ODIsIDB4ZDIsIDB4YzMsIDB4NzQsIDB4M2UsCisgIDB4MjUsIDB4MTYsIDB4YTEsIDB4MmEsIDB4ZDgsIDB4NjUsIDB4MzcsIDB4OTMsIDB4ZjQsIDB4ZjYsIDB4MTIsIDB4ZmUsCisgIDB4MzcsIDB4YjUsIDB4YjIsIDB4YmUsIDB4MWEsIDB4OGYsIDB4YjcsIDB4NmYsIDB4OTMsIDB4NjIsIDB4YzIsIDB4ZjQsCisgIDB4MDEsIDB4NmQsIDB4ODEsIDB4MDIsIDB4N2UsIDB4M2QsIDB4M2EsIDB4NDIsIDB4NmMsIDB4NWMsIDB4N2MsIDB4ZTAsCisgIDB4YmMsIDB4Y2MsIDB4N2UsIDB4MjQsIDB4YWQsIDB4MzcsIDB4OTYsIDB4ZjksIDB4M2MsIDB4OWQsIDB4M2UsIDB4NDQsCisgIDB4NDcsIDB4ZGEsIDB4MzMsIDB4YTQsIDB4NTksIDB4ZjAsIDB4YTIsIDB4YzMsIDB4ZjEsIDB4YWQsIDB4MWUsIDB4Y2UsCisgIDB4YjMsIDB4NmYsIDB4ODYsIDB4MDcsIDB4ZTMsIDB4ZTEsIDB4ZDEsIDB4ZjEsIDB4ZTksIDB4ZjEsIDB4NTcsIDB4MDcsCisgIDB4OTcsIDB4YzcsIDB4MGUsIDB4ZmUsIDB4MGYsIDB4NjQsIDB4YzQsIDB4MWEsIDB4YjksIDB4MzAsIDB4NzksIDB4ZjgsCisgIDB4NDYsIDB4N2IsIDB4MmEsIDB4NWUsIDB4MjYsIDB4YzYsIDB4ZDUsIDB4MzIsIDB4YmIsIDB4YzcsIDB4NmQsIDB4NTIsCisgIDB4MzksIDB4MjgsIDB4MzEsIDB4Y2YsIDB4MTAsIDB4YWIsIDB4ZWIsIDB4MGEsIDB4MTEsIDB4ZGYsIDB4ZWUsIDB4ZTYsCisgIDB4NjgsIDB4NjksIDB4ZTYsIDB4MGIsIDB4ZWQsIDB4NmEsIDB4NmIsIDB4MDQsIDB4ZjEsIDB4ZmMsIDB4OWUsIDB4MTMsCisgIDB4NTksIDB4ZGYsIDB4NjYsIDB4N2MsIDB4MGYsIDB4NDksIDB4MjUsIDB4YWQsIDB4OGIsIDB4ZWQsIDB4NTMsIDB4OGMsCisgIDB4M2UsIDB4NTgsIDB4OTIsIDB4NjAsIDB4ZmUsIDB4NmIsIDB4YWIsIDB4MGMsIDB4NTgsIDB4NGYsIDB4YjcsIDB4NGQsCisgIDB4MjMsIDB4ZjgsIDB4YjAsIDB4NTIsIDB4YWUsIDB4NTAsIDB4NDcsIDB4NzgsIDB4NzAsIDB4MmQsIDB4ZjYsIDB4MjksCisgIDB4MGUsIDB4N2UsIDB4ZDMsIDB4OGUsIDB4M2QsIDB4OTksIDB4MjksIDB4YzMsIDB4YjEsIDB4NzMsIDB4NWMsIDB4OTUsCisgIDB4NzEsIDB4NGQsIDB4YTQsIDB4N2QsIDB4NzUsIDB4Y2YsIDB4ODgsIDB4MGMsIDB4NmMsIDB4NjAsIDB4YjksIDB4NGQsCisgIDB4MDAsIDB4ZGYsIDB4OTUsIDB4YTMsIDB4YmYsIDB4MGMsIDB4ODQsIDB4NDgsIDB4OTEsIDB4YjAsIDB4ZDYsIDB4M2MsCisgIDB4ZTYsIDB4MTksIDB4ZDYsIDB4MDAsIDB4YzQsIDB4MTcsIDB4MDQsIDB4YzMsIDB4ZjAsIDB4OTUsIDB4MzUsIDB4NDQsCisgIDB4YTUsIDB4YjMsIDB4OWIsIDB4MjUsIDB4MzUsIDB4OTksIDB4NDYsIDB4YmEsIDB4ZTIsIDB4NGMsIDB4NTIsIDB4NjQsCisgIDB4NTksIDB4NzQsIDB4MDcsIDB4N2EsIDB4OTAsIDB4MzIsIDB4YTEsIDB4N2MsIDB4MmYsIDB4ZDgsIDB4MzAsIDB4NzYsCisgIDB4MTIsIDB4NzAsIDB4MTcsIDB4MjUsIDB4NDQsIDB4ODEsIDB4MmIsIDB4YjksIDB4NDcsIDB4NDQsIDB4YWQsIDB4MDUsCisgIDB4NDEsIDB4ZTEsIDB4NTUsIDB4OGYsIDB4ZGIsIDB4NjYsIDB4YWYsIDB4YjEsIDB4MTEsIDB4OWQsIDB4YTgsIDB4ZTUsCisgIDB4ZjcsIDB4MmYsIDB4NWMsIDB4ODksIDB4YmMsIDB4MWQsIDB4MTQsIDB4ZTUsIDB4NTMsIDB4NTIsIDB4ODYsIDB4MDUsCisgIDB4MjgsIDB4MzAsIDB4M2EsIDB4NTAsIDB4MmYsIDB4ZTIsIDB4NmEsIDB4OTcsIDB4NTAsIDB4ZTYsIDB4YjQsIDB4YjEsCisgIDB4ZTYsIDB4NDgsIDB4ZmMsIDB4MWMsIDB4MjYsIDB4Y2IsIDB4YTIsIDB4ZWEsIDB4YzgsIDB4ZDgsIDB4MTEsIDB4ZjQsCisgIDB4OWIsIDB4ZjMsIDB4ODUsIDB4ZTgsIDB4ZDMsIDB4MTIsIDB4NDQsIDB4ZjMsIDB4ZDksIDB4OGUsIDB4YzcsIDB4ZTcsCisgIDB4MTcsIDB4YzIsIDB4YTgsIDB4NzMsIDB4Y2EsIDB4N2YsIDB4ZDEsIDB4ZjgsIDB4N2UsIDB4YjMsIDB4MWYsIDB4YjgsCisgIDB4YjQsIDB4NmIsIDB4NGUsIDB4MDAsIDB4YzMsIDB4NmEsIDB4ZTQsIDB4YWUsIDB4ZTksIDB4NzIsIDB4ZWMsIDB4NDcsCisgIDB4NDEsIDB4YTIsIDB4YmUsIDB4Y2IsIDB4MjEsIDB4NTcsIDB4ODEsIDB4ODYsIDB4ZTEsIDB4ZGUsIDB4OWEsIDB4NWIsCisgIDB4YzcsIDB4ZGUsIDB4ODAsIDB4YWUsIDB4NzAsIDB4MWYsIDB4MDYsIDB4NjIsIDB4MTYsIDB4YTEsIDB4MTcsIDB4MDIsCisgIDB4NmEsIDB4MzAsIDB4OGYsIDB4ZmEsIDB4MTksIDB4ZmYsIDB4OTIsIDB4NTEsIDB4MmMsIDB4MmEsIDB4MGMsIDB4NmIsCisgIDB4NDIsIDB4N2MsIDB4M2UsIDB4ZjMsIDB4ODcsIDB4OWIsIDB4ZTQsIDB4YjcsIDB4YTIsIDB4MDIsIDB4YmMsIDB4MGYsCisgIDB4MzEsIDB4ZjUsIDB4NjMsIDB4ZTQsIDB4YzcsIDB4MjksIDB4OWYsIDB4OTAsIDB4ZWIsIDB4MGUsIDB4YzksIDB4NWUsCisgIDB4NDAsIDB4ZDgsIDB4NjMsIDB4OGUsIDB4MzMsIDB4YjksIDB4ZWQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4NGUsIDB4Y2QsCisgIDB4MjAsIDB4OTUsIDB4MWMsIDB4ODMsIDB4NzYsIDB4NWUsIDB4MTEsIDB4ODksIDB4NGIsIDB4YjIsIDB4ZWYsIDB4OTEsCisgIDB4ZWQsIDB4MWMsIDB4ZTQsIDB4MzEsIDB4NzAsIDB4ODYsIDB4NmUsIDB4Y2IsIDB4ZjMsIDB4YWIsIDB4YjksIDB4NDMsCisgIDB4MDYsIDB4YzQsIDB4NDksIDB4MWUsIDB4MzQsIDB4YjcsIDB4NTcsIDB4YmMsIDB4OGQsIDB4NTcsIDB4MWEsIDB4NzcsCisgIDB4OGEsIDB4ZTcsIDB4NjksIDB4ZjUsIDB4MjAsIDB4MTcsIDB4M2EsIDB4NzEsIDB4MGMsIDB4ODgsIDB4MmIsIDB4ZTAsCisgIDB4MjYsIDB4ZWUsIDB4NDIsIDB4ZWUsIDB4ZDMsIDB4YzQsIDB4OWIsIDB4OGEsIDB4OTAsIDB4ODEsIDB4ZWEsIDB4YjIsCisgIDB4YjUsIDB4OWQsIDB4YmIsIDB4OTAsIDB4MGQsIDB4MzMsIDB4Y2QsIDB4NTcsIDB4NmEsIDB4OTgsIDB4ZDMsIDB4ZjksCisgIDB4NDEsIDB4MmEsIDB4MjgsIDB4ZTUsIDB4ZWIsIDB4YWYsIDB4NzYsIDB4NDUsIDB4MjYsIDB4ODcsIDB4OTMsIDB4OGEsCisgIDB4NTUsIDB4ZTYsIDB4YjMsIDB4YmMsIDB4NGIsIDB4YWEsIDB4NTIsIDB4MWMsIDB4N2YsIDB4ZDQsIDB4ZDUsIDB4NTgsCisgIDB4MjgsIDB4MTcsIDB4ZWEsIDB4MjIsIDB4ZDgsIDB4ZmEsIDB4ZmEsIDB4MTEsIDB4N2UsIDB4YzksIDB4NmIsIDB4ODgsCisgIDB4ZjYsIDB4YTEsIDB4OGIsIDB4YTcsIDB4MzcsIDB4Y2EsIDB4NDksIDB4YzIsIDB4MjEsIDB4NjAsIDB4MTEsIDB4YTUsCisgIDB4NDksIDB4NzIsIDB4MTMsIDB4ZGYsIDB4YTUsIDB4NzksIDB4MzEsIDB4YWEsIDB4NjUsIDB4YWQsIDB4YjcsIDB4YzMsCisgIDB4MWIsIDB4MjUsIDB4YWQsIDB4M2YsIDB4YzMsIDB4MTksIDB4NzksIDB4NjEsIDB4NzgsIDB4NDMsIDB4ZjMsIDB4YmIsCisgIDB4ODIsIDB4MTUsIDB4MGQsIDB4NTMsIDB4ZDYsIDB4YjEsIDB4MWEsIDB4ZjAsIDB4MDYsIDB4OWYsIDB4MGYsIDB4MzQsCisgIDB4ODgsIDB4ODQsIDB4MzgsIDB4NmQsIDB4MGIsIDB4MWEsIDB4MGQsIDB4NzAsIDB4YWIsIDB4NGIsIDB4NzEsIDB4ZDYsCisgIDB4MjcsIDB4ZTMsIDB4ZjIsIDB4YWUsIDB4N2IsIDB4ODcsIDB4OTUsIDB4NzcsIDB4YmYsIDB4N2MsIDB4ODcsIDB4MDksCisgIDB4ZjEsIDB4MDEsIDB4OGIsIDB4ZDAsIDB4ZjEsIDB4ZjksIDB4ZjgsIDB4ZGIsIDB4YzgsIDB4ODEsIDB4NjcsIDB4YmEsCisgIDB4Y2UsIDB4NGQsIDB4ZDksIDB4NWMsIDB4N2UsIDB4NWMsIDB4MTAsIDB4YjUsIDB4NjAsIDB4ODMsIDB4ZmQsIDB4Y2EsCisgIDB4MWQsIDB4ZTYsIDB4MzYsIDB4MTgsIDB4N2QsIDB4NWYsIDB4NzcsIDB4ZDUsIDB4ZjksIDB4YzEsIDB4ZjgsIDB4ZGIsCisgIDB4YzYsIDB4N2UsIDB4NzIsIDB4M2IsIDB4MDgsIDB4OTYsIDB4NTAsIDB4NDcsIDB4ZjQsIDB4MDIsIDB4ZTksIDB4ZjgsCisgIDB4ODUsIDB4NzksIDB4YzIsIDB4YjgsIDB4YjUsIDB4NGUsIDB4NTEsIDB4MmIsIDB4ZWYsIDB4M2UsIDB4NDYsIDB4ZDQsCisgIDB4YTgsIDB4MmIsIDB4MmQsIDB4NTEsIDB4NmIsIDB4NGQsIDB4ZWYsIDB4NjMsIDB4YTIsIDB4MTYsIDB4YWUsIDB4NTEsCisgIDB4ODcsIDB4YTgsIDB4NTEsIDB4ZmIsIDB4MmQsIDB4NTEsIDB4YjMsIDB4NzksIDB4ZWQsIDB4OTYsIDB4YjUsIDB4NzUsCisgIDB4YTIsIDB4NjYsIDB4MjgsIDB4YzIsIDB4NDQsIDB4YzQsIDB4MmMsIDB4OTQsIDB4YjIsIDB4YjYsIDB4ODQsIDB4MDUsCisgIDB4NzIsIDB4OTMsIDB4ZjAsIDB4Y2YsIDB4OTEsIDB4ZmUsIDB4Y2MsIDB4NGUsIDB4NTYsIDB4YjIsIDB4Y2YsIDB4ZDYsCisgIDB4YjksIDB4YTUsIDB4N2MsIDB4ZWMsIDB4YWIsIDB4NzcsIDB4YTEsIDB4OGYsIDB4OWYsIDB4YzcsIDB4ZDcsIDB4NDksCisgIDB4MmYsIDB4Y2MsIDB4ZWUsIDB4ZmUsIDB4ODgsIDB4ZTQsIDB4YmYsIDB4NTYsIDB4ZmEsIDB4MWMsIDB4OWYsIDB4ODAsCisgIDB4M2UsIDB4NTQsIDB4MWMsIDB4NjYsIDB4Y2IsIDB4YzEsIDB4ZWEsIDB4ZjEsIDB4YjksIDB4NzIsIDB4ZTIsIDB4NGMsCisgIDB4NmMsIDB4YzMsIDB4ZWIsIDB4MGQsIDB4ZTIsIDB4NWYsIDB4Y2YsIDB4NjIsIDB4MzAsIDB4MWUsIDB4MjYsIDB4ZjUsCisgIDB4YzAsIDB4ZjQsIDB4ZmUsIDB4Y2EsIDB4ZTgsIDB4YWQsIDB4OWUsIDB4NzUsIDB4ZDAsIDB4MGQsIDB4YjksIDB4ZWQsCisgIDB4MjIsIDB4NDcsIDB4YTIsIDB4YWMsIDB4YmIsIDB4YjcsIDB4ZDUsIDB4MzEsIDB4NWYsIDB4ZGMsIDB4NTcsIDB4ZjEsCisgIDB4MzYsIDB4MmIsIDB4MWUsIDB4MGYsIDB4NDQsIDB4NDAsIDB4N2MsIDB4MTYsIDB4OTAsIDB4MzAsIDB4ZDIsIDB4MjksCisgIDB4ZDksIDB4NTQsIDB4Y2YsIDB4NzQsIDB4NmEsIDB4MGEsIDB4MWEsIDB4ZmEsIDB4NTQsIDB4YmIsIDB4YjUsIDB4YWYsCisgIDB4MGUsIDB4NWYsIDB4YjksIDB4OGEsIDB4NWEsIDB4YTcsIDB4MzQsIDB4ZTUsIDB4MzAsIDB4OTQsIDB4YzcsIDB4NzgsCisgIDB4Y2UsIDB4MGMsIDB4NWMsIDB4Y2QsIDB4MDgsIDB4MTMsIDB4ZGYsIDB4MzQsIDB4MzQsIDB4NzYsIDB4MzAsIDB4ODMsCisgIDB4YzEsIDB4YzksIDB4MWQsIDB4OGEsIDB4ZjksIDB4YzYsIDB4OTMsIDB4ODIsIDB4OTQsIDB4YzksIDB4MGQsIDB4ZWIsCisgIDB4NzcsIDB4YzQsIDB4MmEsIDB4MWMsIDB4YzMsIDB4NWYsIDB4Y2MsIDB4NzEsIDB4ZWIsIDB4MTcsIDB4NDEsIDB4YWMsCisgIDB4ZjcsIDB4YzcsIDB4N2QsIDB4YjMsIDB4NWIsIDB4N2UsIDB4ZWEsIDB4NDYsIDB4ODcsIDB4YjUsIDB4ZDEsIDB4ZWQsCisgIDB4NzUsIDB4ZjcsIDB4YmMsIDB4YTUsIDB4NzgsIDB4ODUsIDB4MDEsIDB4ZTQsIDB4NGUsIDB4YjQsIDB4MzAsIDB4YTYsCisgIDB4ZGIsIDB4NzgsIDB4NzEsIDB4NjIsIDB4ODMsIDB4MjAsIDB4OTMsIDB4MDAsIDB4MjgsIDB4YWIsIDB4MWYsIDB4MDcsCisgIDB4YmMsIDB4MjMsIDB4ZjgsIDB4ODcsIDB4YzQsIDB4MDEsIDB4NDEsIDB4NWYsIDB4MWYsIDB4MGEsIDB4MTksIDB4MTIsCisgIDB4NGUsIDB4YzMsIDB4OTYsIDB4OWIsIDB4OTQsIDB4MjMsIDB4NTYsIDB4MDgsIDB4YTksIDB4MDQsIDB4ZGYsIDB4YjUsCisgIDB4M2MsIDB4MzMsIDB4ZGEsIDB4ZjgsIDB4MWMsIDB4MjQsIDB4ZjcsIDB4MDgsIDB4NjUsIDB4NzUsIDB4MTUsIDB4MjYsCisgIDB4NzYsIDB4OTAsIDB4YzcsIDB4ZjMsIDB4OTYsIDB4N2IsIDB4NDksIDB4MGQsIDB4NGMsIDB4Y2IsIDB4NWEsIDB4NzUsCisgIDB4MjMsIDB4YWMsIDB4NjUsIDB4ZmIsIDB4ZmUsIDB4NjMsIDB4YzUsIDB4ZGMsIDB4NjgsIDB4MzMsIDB4YTgsIDB4MGIsCisgIDB4MGQsIDB4ZGQsIDB4ODEsIDB4ZTEsIDB4YTMsIDB4OWQsIDB4ZWQsIDB4MzQsIDB4YWYsIDB4NWYsIDB4ZmMsIDB4ZmQsCisgIDB4MTIsIDB4MGEsIDB4ZTEsIDB4MTIsIDB4NWIsIDB4YzEsIDB4YmQsIDB4YTAsIDB4ZWIsIDB4M2QsIDB4ODUsIDB4ODgsCisgIDB4MjIsIDB4NDIsIDB4ZDYsIDB4ODYsIDB4MTIsIDB4ZGYsIDB4YzAsIDB4NmYsIDB4MmEsIDB4NTgsIDB4ZTMsIDB4ZTgsCisgIDB4OTYsIDB4ZjksIDB4YmUsIDB4MzQsIDB4ZTksIDB4Y2UsIDB4ZmQsIDB4MzQsIDB4OWMsIDB4MDYsIDB4YTYsIDB4YjksCisgIDB4YTAsIDB4ZmYsIDB4NjYsIDB4NmMsIDB4NDYsIDB4ZmUsIDB4MjEsIDB4MjQsIDB4YzksIDB4ZjMsIDB4MDEsIDB4ODUsCisgIDB4NDQsIDB4ZmQsIDB4MTcsIDB4YzMsIDB4MjEsIDB4YjcsIDB4YzYsIDB4MDYsIDB4YWQsIDB4NGYsIDB4MTIsIDB4NWUsCisgIDB4NzAsIDB4MWUsIDB4YTUsIDB4YjEsIDB4ZTEsIDB4Y2QsIDB4MWYsIDB4YmEsIDB4NjQsIDB4ZDIsIDB4YzgsIDB4ZmIsCisgIDB4MjYsIDB4YWIsIDB4NzQsIDB4YWUsIDB4NTQsIDB4MjEsIDB4NjUsIDB4NjUsIDB4YjgsIDB4MzUsIDB4NDAsIDB4ZmEsCisgIDB4ZTYsIDB4ZTksIDB4YTQsIDB4NjAsIDB4OTcsIDB4YjksIDB4MDYsIDB4NDMsIDB4YWEsIDB4NDcsIDB4YjAsIDB4MjgsCisgIDB4YjEsIDB4NjYsIDB4YTMsIDB4YWIsIDB4OTQsIDB4YjEsIDB4MjUsIDB4NGUsIDB4MTcsIDB4MWYsIDB4MTgsIDB4ZDYsCisgIDB4NmEsIDB4NDAsIDB4ODYsIDB4ODMsIDB4YjMsIDB4MTgsIDB4OGYsIDB4NzAsIDB4ZTIsIDB4YjUsIDB4YmQsIDB4YjgsCisgIDB4ZGMsIDB4MDEsIDB4YmUsIDB4OTEsIDB4YjMsIDB4ZWMsIDB4NzAsIDB4NGUsIDB4NDUsIDB4OWEsIDB4ODksIDB4MGYsCisgIDB4MTIsIDB4ZGUsIDB4ZDIsIDB4ZWMsIDB4MmUsIDB4MmQsIDB4ZjIsIDB4OGMsIDB4ZjEsIDB4MjcsIDB4ZDEsIDB4NWQsCisgIDB4NWMsIDB4YTQsIDB4MzgsIDB4MmQsIDB4YTgsIDB4YjcsIDB4ZWYsIDB4OGUsIDB4NGUsIDB4MmUsIDB4YTIsIDB4NGQsCisgIDB4NzYsIDB4YTgsIDB4NGQsIDB4MWUsIDB4ZDYsIDB4NjUsIDB4NjUsIDB4NmMsIDB4MjcsIDB4ZDUsIDB4NzQsIDB4N2IsCisgIDB4NzksIDB4OWIsIDB4NmUsIDB4NjcsIDB4NjUsIDB4MzksIDB4OWIsIDB4NmMsIDB4OGQsIDB4MDIsIDB4OTksIDB4ZTIsCisgIDB4NGYsIDB4YjIsIDB4YmMsIDB4OWQsIDB4N2YsIDB4NzMsIDB4MzgsIDB4ZmUsIDB4ZTMsIDB4ZWUsIDB4MmUsIDB4NmIsCisgIDB4ZjIsIDB4MTUsIDB4MzUsIDB4YmMsIDB4NDksIDB4NzMsIDB4ZDAsIDB4MTIsIDB4OGMsIDB4OTIsIDB4MjYsIDB4N2EsCisgIDB4MzEsIDB4MmEsIDB4ZjMsIDB4MmQsIDB4MWMsIDB4M2YsIDB4NzcsIDB4NzEsIDB4M2EsIDB4YjcsIDB4ZjMsIDB4NWMsCisgIDB4NjQsIDB4NTYsIDB4YTIsIDB4N2EsIDB4NmMsIDB4ZjIsIDB4YzEsIDB4MjEsIDB4YzQsIDB4Y2UsIDB4MGIsIDB4ODQsCisgIDB4ZmQsIDB4MTQsIDB4NjMsIDB4ZGYsIDB4OGEsIDB4ZTUsIDB4NjQsIDB4ZWUsIDB4MDAsIDB4ZDYsIDB4M2QsIDB4ZTUsCisgIDB4NTAsIDB4YmQsIDB4NjIsIDB4ZjAsIDB4NTcsIDB4MWUsIDB4MjYsIDB4MzQsIDB4NjAsIDB4ODYsIDB4MzAsIDB4OWUsCisgIDB4MTUsIDB4NzEsIDB4YTUsIDB4NzUsIDB4ZTQsIDB4OGMsIDB4NDgsIDB4YWUsIDB4Y2QsIDB4NjgsIDB4YmIsIDB4ZTcsCisgIDB4MTgsIDB4ZDEsIDB4ZDIsIDB4NGMsIDB4OTgsIDB4ZTEsIDB4NzAsIDB4NGUsIDB4ZGQsIDB4ZTUsIDB4OGMsIDB4ZTEsCisgIDB4Y2MsIDB4YjMsIDB4YWIsIDB4NTUsIDB4ZTksIDB4MmUsIDB4NGUsIDB4YjEsIDB4NWIsIDB4YWMsIDB4ZGYsIDB4MTMsCisgIDB4NjcsIDB4YTUsIDB4YTgsIDB4ZmQsIDB4MTcsIDB4OWQsIDB4MTksIDB4MjEsIDB4NzQsIDB4NTUsIDB4NTUsIDB4ZGEsCisgIDB4MjAsIDB4NDMsIDB4NWYsIDB4NGUsIDB4OGIsIDB4ODcsIDB4MjUsIDB4NWIsIDB4MDYsIDB4ZjIsIDB4OTYsIDB4Y2UsCisgIDB4MGYsIDB4ODgsIDB4ZDEsIDB4MDQsIDB4NjgsIDB4MTksIDB4NzIsIDB4NGIsIDB4OGQsIDB4M2EsIDB4ODAsIDB4YzQsCisgIDB4ZmUsIDB4OGIsIDB4OGEsIDB4NDIsIDB4ODUsIDB4M2QsIDB4NDgsIDB4Y2EsIDB4YmUsIDB4YzIsIDB4YTksIDB4MjAsCisgIDB4M2YsIDB4NjMsIDB4ZDAsIDB4MzUsIDB4ODksIDB4ZmYsIDB4NGMsIDB4YjAsIDB4NjYsIDB4MGUsIDB4ZDYsIDB4ZDcsCisgIDB4NDIsIDB4MTcsIDB4NzAsIDB4M2IsIDB4NjUsIDB4YTgsIDB4MGQsIDB4ZDgsIDB4ZDIsIDB4ZTEsIDB4MjQsIDB4MTAsCisgIDB4MDgsIDB4MWMsIDB4ZmIsIDB4MjEsIDB4YjYsIDB4MDIsIDB4MzMsIDB4NGUsIDB4OWYsIDB4OGYsIDB4NGMsIDB4MDQsCisgIDB4OWEsIDB4NDYsIDB4OTcsIDB4OTMsIDB4MTgsIDB4NmEsIDB4YTgsIDB4NTgsIDB4NjUsIDB4ZjgsIDB4NzgsIDB4N2QsCisgIDB4YTYsIDB4OWMsIDB4ODgsIDB4MzcsIDB4ZjUsIDB4ZjksIDB4YzUsIDB4YzksIDB4ZjgsIDB4MzAsIDB4OGEsIDB4Y2UsCisgIDB4YzYsIDB4ZDEsIDB4ZDksIDB4OWIsIDB4ZDMsIDB4MWYsIDB4MTgsIDB4MTQsIDB4YzMsIDB4YWUsIDB4MjYsIDB4MjEsCisgIDB4ZjAsIDB4ZTMsIDB4ZWYsIDB4NzcsIDB4NmQsIDB4OGUsIDB4NzIsIDB4ZTAsIDB4MjMsIDB4OTMsIDB4MWQsIDB4MWUsCisgIDB4MzksIDB4YjEsIDB4MmIsIDB4ODYsIDB4ZjcsIDB4YjYsIDB4YzQsIDB4MWUsIDB4NGYsIDB4YzksIDB4ZTIsIDB4MDIsCisgIDB4YjcsIDB4MDIsIDB4MDksIDB4NWMsIDB4NGEsIDB4MTMsIDB4OGUsIDB4NzAsIDB4ZDcsIDB4ZDQsIDB4YjIsIDB4ZTgsCisgIDB4NTcsIDB4ZWQsIDB4YTQsIDB4NmUsIDB4NzYsIDB4OGEsIDB4ODcsIDB4MTYsIDB4ODksIDB4YTQsIDB4ZWIsIDB4YjAsCisgIDB4MjUsIDB4NDUsIDB4NWYsIDB4YTcsIDB4ODEsIDB4MzYsIDB4NTAsIDB4ZGYsIDB4MzQsIDB4ZDAsIDB4NmIsIDB4NzEsCisgIDB4NmYsIDB4YWQsIDB4NDEsIDB4NTEsIDB4MDksIDB4YmQsIDB4OGEsIDB4NjUsIDB4MGIsIDB4YTksIDB4MDYsIDB4OGQsCisgIDB4MzksIDB4NzUsIDB4ZDIsIDB4ODUsIDB4ZjksIDB4NzEsIDB4MzUsIDB4Y2QsIDB4YWEsIDB4MjIsIDB4NWYsIDB4M2UsCisgIDB4NDQsIDB4NWYsIDB4YzUsIDB4N2MsIDB4ZTgsIDB4ZjAsIDB4YjcsIDB4OGUsIDB4ZTIsIDB4NjQsIDB4ZDEsIDB4ZDIsCisgIDB4NTEsIDB4NjUsIDB4Y2UsIDB4OWUsIDB4MTgsIDB4MzksIDB4NzAsIDB4ZTQsIDB4ZWYsIDB4NGUsIDB4OWMsIDB4ZTEsCisgIDB4MGMsIDB4OTAsIDB4ZjgsIDB4NjUsIDB4YzQsIDB4OTMsIDB4MzksIDB4NjMsIDB4MGYsIDB4YTMsIDB4NDksIDB4MGYsCisgIDB4NjQsIDB4OGUsIDB4YmEsIDB4ZDIsIDB4OGUsIDB4M2UsIDB4MTgsIDB4YWYsIDB4NWMsIDB4ZTAsIDB4MmUsIDB4NTAsCisgIDB4MDMsIDB4MDcsIDB4NGQsIDB4YzgsIDB4ZDAsIDB4OWEsIDB4MDAsIDB4NDYsIDB4NTEsIDB4ZGMsIDB4MDAsIDB4ZWIsCisgIDB4NDQsIDB4MmYsIDB4ZjgsIDB4Y2YsIDB4MzUsIDB4YzMsIDB4MGUsIDB4MGUsIDB4NmQsIDB4YjgsIDB4ZDcsIDB4NmEsCisgIDB4ZmEsIDB4OTMsIDB4NWYsIDB4ZDYsIDB4ZDAsIDB4M2IsIDB4NjMsIDB4Y2IsIDB4NjYsIDB4ZTEsIDB4NmYsIDB4ZGIsCisgIDB4MTYsIDB4MzIsIDB4NDMsIDB4MTcsIDB4NDgsIDB4MmYsIDB4MGQsIDB4YTIsIDB4YTMsIDB4ZTMsIDB4MGIsIDB4OWMsCisgIDB4MTgsIDB4YzcsIDB4NmYsIDB4YmUsIDB4YzIsIDB4YzUsIDB4OTYsIDB4NTMsIDB4NjQsIDB4YWUsIDB4YjMsIDB4ZjQsCisgIDB4NjcsIDB4MWUsIDB4M2EsIDB4MzUsIDB4NTksIDB4OGUsIDB4MzQsIDB4NjUsIDB4MzgsIDB4NDgsIDB4YjQsIDB4NjgsCisgIDB4ZGEsIDB4NDEsIDB4YWMsIDB4ZGYsIDB4NTgsIDB4ZWIsIDB4ZTEsIDB4MDQsIDB4OWMsIDB4ZmQsIDB4YWUsIDB4YjgsCisgIDB4Y2MsIDB4NTgsIDB4MmMsIDB4OWQsIDB4YzMsIDB4ODMsIDB4NzAsIDB4NzQsIDB4YmYsIDB4Y2UsIDB4YzIsIDB4MDksCisgIDB4MjcsIDB4Y2YsIDB4ZDIsIDB4NjYsIDB4YTksIDB4NDcsIDB4MjQsIDB4NTYsIDB4MWQsIDB4YTcsIDB4MzQsIDB4NjMsCisgIDB4ZTksIDB4ODIsIDB4MWMsIDB4MmIsIDB4ZGUsIDB4YzQsIDB4MWEsIDB4Y2MsIDB4ODksIDB4M2MsIDB4OGQsIDB4NGIsCisgIDB4NDQsIDB4ZGQsIDB4YWEsIDB4MDEsIDB4ZWUsIDB4YzQsIDB4MGYsIDB4ZGMsIDB4MGEsIDB4MDQsIDB4YmIsIDB4MDcsCisgIDB4MzYsIDB4Y2IsIDB4YWQsIDB4YTgsIDB4NjksIDB4ZGMsIDB4OTgsIDB4NmQsIDB4ZjMsIDB4YzYsIDB4YWUsIDB4NmEsCisgIDB4ZjUsIDB4MzMsIDB4YjksIDB4NzUsIDB4ZGYsIDB4OTAsIDB4MjMsIDB4YzIsIDB4OGUsIDB4MzMsIDB4NGIsIDB4Y2MsCisgIDB4YzUsIDB4OGMsIDB4MGYsIDB4MjQsIDB4MWMsIDB4NTUsIDB4OWIsIDB4N2EsIDB4NWEsIDB4NTMsIDB4MzUsIDB4OWUsCisgIDB4NTUsIDB4Y2EsIDB4NWIsIDB4YmUsIDB4YzQsIDB4MGEsIDB4OWUsIDB4MzcsIDB4ZjYsIDB4N2YsIDB4MDcsIDB4NmQsCisgIDB4YjYsIDB4MTYsIDB4NTUsIDB4N2MsIDB4ZjAsIDB4NGUsIDB4NTgsIDB4Y2EsIDB4ZjUsIDB4ZTcsIDB4YjAsIDB4NjIsCisgIDB4NTEsIDB4MGUsIDB4YzksIDB4MzYsIDB4N2YsIDB4NzcsIDB4NzgsIDB4ZjAsIDB4ZWUsIDB4Y2IsIDB4YjcsIDB4NmYsCisgIDB4OGUsIDB4NGUsIDB4OGYsIDB4ZmIsIDB4NGQsIDB4ODksIDB4MzQsIDB4NmEsIDB4OWIsIDB4OTIsIDB4MWQsIDB4YTMsCisgIDB4OWEsIDB4OWYsIDB4MTUsIDB4YTYsIDB4NjIsIDB4NjAsIDB4OGYsIDB4MjMsIDB4M2IsIDB4NWYsIDB4NzYsIDB4M2IsCisgIDB4NmIsIDB4ZWUsIDB4ZDgsIDB4Y2YsIDB4NzgsIDB4MTMsIDB4OTcsIDB4YjAsIDB4Y2EsIDB4NjYsIDB4NDgsIDB4MDcsCisgIDB4MGUsIDB4MDYsIDB4NmYsIDB4ODgsIDB4NzUsIDB4MGQsIDB4YTcsIDB4NTksIDB4ZmYsIDB4M2EsIDB4MzAsIDB4MjgsCisgIDB4OGMsIDB4ZmMsIDB4MjMsIDB4NTMsIDB4MDksIDB4OTcsIDB4MDUsIDB4YTMsIDB4NGIsIDB4OTIsIDB4MmMsIDB4MDgsCisgIDB4Y2YsIDB4MjksIDB4NTksIDB4YmIsIDB4ODcsIDB4MzAsIDB4ZjQsIDB4MDksIDB4YjMsIDB4MWUsIDB4NTMsIDB4ODcsCisgIDB4M2EsIDB4OTYsIDB4YmIsIDB4YWMsIDB4YTEsIDB4NzIsIDB4YjgsIDB4MTUsIDB4OTIsIDB4ZTQsIDB4YTEsIDB4NzYsCisgIDB4NzIsIDB4NWEsIDB4NTQsIDB4ZmQsIDB4NDEsIDB4OTQsIDB4YTQsIDB4YjAsIDB4OGUsIDB4ZDMsIDB4MDAsIDB4MzcsCisgIDB4MzYsIDB4ZWIsIDB4MDQsIDB4ZjEsIDB4MzMsIDB4MmUsIDB4MzgsIDB4MTYsIDB4YjksIDB4MWUsIDB4MjUsIDB4ZWYsCisgIDB4MTMsIDB4MjAsIDB4OTgsIDB4ZjQsIDB4YWQsIDB4NDMsIDB4YjUsIDB4MGMsIDB4YmUsIDB4Y2IsIDB4MGIsIDB4OTAsCisgIDB4NmQsIDB4MWMsIDB4NzksIDB4MGIsIDB4NDEsIDB4MWUsIDB4OGEsIDB4YjMsIDB4ODcsIDB4NzYsIDB4MzQsIDB4OTcsCisgIDB4YWQsIDB4MDAsIDB4YmUsIDB4ZGUsIDB4NWMsIDB4MGIsIDB4YTUsIDB4ZjMsIDB4ZjksIDB4YzEsIDB4ZTUsIDB4ZDcsCisgIDB4YmYsIDB4YjcsIDB4NjksIDB4MDgsIDB4OGUsIDB4YTIsIDB4NjgsIDB4YmQsIDB4NWQsIDB4NTgsIDB4ZGYsIDB4ZGUsCisgIDB4ZmYsIDB4MDcsIDB4OTksIDB4ODYsIDB4Y2UsIDB4MzYsIDB4ZmMsIDB4N2QsIDB4NGMsIDB4NDMsIDB4ZDIsIDB4MDIsCisgIDB4NmEsIDB4MTgsIDB4ZmUsIDB4YWUsIDB4M2EsIDB4MTQsIDB4M2IsIDB4YTgsIDB4YTEsIDB4NDMsIDB4YmQsIDB4MzksCisgIDB4ZjksIDB4YWYsIDB4NmIsIDB4ZDMsIDB4MDAsIDB4YzEsIDB4ZGUsIDB4NTYsIDB4MzAsIDB4YTIsIDB4NjIsIDB4ZWQsCisgIDB4ZTQsIDB4ODYsIDB4NWEsIDB4ZjUsIDB4ZDgsIDB4MzcsIDB4ZWUsIDB4NTksIDB4ZTksIDB4ZTAsIDB4MDAsIDB4NzYsCisgIDB4OTAsIDB4MzEsIDB4OWQsIDB4OTIsIDB4NDMsIDB4MzYsIDB4YjYsIDB4OTUsIDB4ZjMsIDB4NDIsIDB4ZWQsIDB4ZGIsCisgIDB4ZmQsIDB4NWUsIDB4YjQsIDB4OTksIDB4OGMsIDB4YWUsIDB4YTksIDB4YmQsIDB4MWUsIDB4YjcsIDB4YjMsIDB4YmIsCisgIDB4Y2YsIDB4N2YsIDB4ZWUsIDB4ZTEsIDB4Y2YsIDB4MjcsIDB4YmQsIDB4YWQsIDB4ZDYsIDB4YWQsIDB4YjIsIDB4ODQsCisgIDB4ZTYsIDB4NmQsIDB4ZTMsIDB4YTAsIDB4MTEsIDB4YmEsIDB4MDksIDB4YWUsIDB4OTksIDB4MDMsIDB4OGQsIDB4MDEsCisgIDB4YTYsIDB4ZWIsIDB4ZjYsIDB4ODAsIDB4NWEsIDB4YTcsIDB4NWQsIDB4ZTksIDB4NmYsIDB4N2UsIDB4MjIsIDB4YTAsCisgIDB4ZTUsIDB4NmYsIDB4NjIsIDB4ZjgsIDB4OTEsIDB4NTgsIDB4OWQsIDB4MTUsIDB4ZjksIDB4NTQsIDB4ZjIsIDB4NTAsCisgIDB4YzIsIDB4ZjQsIDB4ZGMsIDB4ZTksIDB4YmIsIDB4MjIsIDB4YjksIDB4ODksIDB4NGIsIDB4NTIsIDB4NmYsIDB4YWIsCisgIDB4MmEsIDB4NjUsIDB4YWYsIDB4NmUsIDB4ZDMsIDB4NWMsIDB4NTksIDB4MzEsIDB4NzYsIDB4OTcsIDB4NmYsIDB4ZTcsCisgIDB4MTgsIDB4YjEsIDB4N2UsIDB4ZDgsIDB4MjUsIDB4NzcsIDB4ZGEsIDB4ZDIsIDB4OGEsIDB4M2IsIDB4ODcsIDB4YWQsCisgIDB4MzQsIDB4N2QsIDB4NjIsIDB4YTgsIDB4NjQsIDB4ZWMsIDB4NWQsIDB4M2EsIDB4ZGMsIDB4ZGMsIDB4MmIsIDB4ZmMsCisgIDB4NTgsIDB4YzgsIDB4OGIsIDB4YmIsIDB4ZTAsIDB4ZmMsIDB4NmYsIDB4ZjgsIDB4OTksIDB4YTMsIDB4ZTQsIDB4OGEsCisgIDB4NjYsIDB4MmMsIDB4OTUsIDB4NmMsIDB4MjgsIDB4YzEsIDB4YjgsIDB4NGEsIDB4YWYsIDB4ZGIsIDB4ZDcsIDB4NGYsCisgIDB4MzksIDB4OWUsIDB4MzUsIDB4NjgsIDB4ZTYsIDB4ZmUsIDB4MGQsIDB4ZTUsIDB4YTcsIDB4YzcsIDB4NjUsIDB4MjksCisgIDB4ZGMsIDB4YjksIDB4NzUsIDB4ZTEsIDB4ZmIsIDB4OTgsIDB4NjAsIDB4MDgsIDB4MGUsIDB4MDYsIDB4NDksIDB4NDQsCisgIDB4OTQsIDB4ZWQsIDB4YTksIDB4ODMsIDB4MTUsIDB4NmMsIDB4YWYsIDB4MDksIDB4YmIsIDB4MzIsIDB4NzAsIDB4NzUsCisgIDB4MTEsIDB4MWYsIDB4YjksIDB4MjMsIDB4ZTYsIDB4ZDcsIDB4ZWUsIDB4OWMsIDB4MmIsIDB4YjgsIDB4ZWMsIDB4NjgsCisgIDB4ZmIsIDB4NzYsIDB4N2IsIDB4ZTQsIDB4NWUsIDB4NzEsIDB4MWUsIDB4NmUsIDB4YzksIDB4YTEsIDB4NmMsIDB4OWUsCisgIDB4YTcsIDB4NGQsIDB4MjYsIDB4YTEsIDB4MTQsIDB4OTIsIDB4ZDMsIDB4MTgsIDB4ZDcsIDB4ODIsIDB4MmQsIDB4NzYsCisgIDB4MmMsIDB4NTgsIDB4OWEsIDB4MGQsIDB4ZDIsIDB4N2UsIDB4Y2EsIDB4NmUsIDB4ZDIsIDB4MDMsIDB4OTAsIDB4OTksCisgIDB4MDgsIDB4MmIsIDB4MjYsIDB4OTAsIDB4OWEsIDB4ODgsIDB4ZDQsIDB4YzIsIDB4YWQsIDB4YWYsIDB4NmUsIDB4NTAsCisgIDB4YjAsIDB4ZDUsIDB4ZDMsIDB4OTksIDB4NDIsIDB4ZGEsIDB4MjksIDB4ZjgsIDB4ZTUsIDB4MmMsIDB4NTEsIDB4NGEsCisgIDB4ZTQsIDB4YTYsIDB4ODYsIDB4MTcsIDB4OTIsIDB4N2IsIDB4ZjUsIDB4ZWEsIDB4ZDIsIDB4MzcsIDB4NGYsIDB4MzIsCisgIDB4OGIsIDB4ODgsIDB4MDksIDB4MTYsIDB4NDQsIDB4YjEsIDB4ZWMsIDB4Y2EsIDB4MDcsIDB4NjIsIDB4M2QsIDB4YmMsCisgIDB4OTIsIDB4YWMsIDB4YmMsIDB4ZDYsIDB4ZjYsIDB4OWQsIDB4MjUsIDB4ZjMsIDB4MTQsIDB4MGYsIDB4MzAsIDB4YTcsCisgIDB4ODAsIDB4YTYsIDB4NTAsIDB4YTksIDB4ZjMsIDB4YjcsIDB4NDgsIDB4YWEsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MTcsCisgIDB4ZDgsIDB4NDUsIDB4NWUsIDB4OWYsIDB4YmEsIDB4MDcsIDB4MTgsIDB4ZDIsIDB4MDYsIDB4ZmYsIDB4NTAsIDB4ZDksCisgIDB4NmMsIDB4NGUsIDB4ZjksIDB4ZWQsIDB4NDAsIDB4OGEsIDB4MmQsIDB4ZDYsIDB4YjIsIDB4NjEsIDB4YjIsIDB4YjgsCisgIDB4NjMsIDB4MGYsIDB4YWUsIDB4NWMsIDB4YzEsIDB4OTYsIDB4OWUsIDB4ZTUsIDB4MTIsIDB4NzksIDB4MTUsIDB4MzAsCisgIDB4MDAsIDB4ZGQsIDB4NjUsIDB4ODcsIDB4MmQsIDB4ZTUsIDB4NjIsIDB4MDgsIDB4NWUsIDB4MjksIDB4NWQsIDB4ODEsCisgIDB4MDUsIDB4YTgsIDB4ZTQsIDB4YTIsIDB4MTMsIDB4NTcsIDB4Y2EsIDB4N2EsIDB4Y2IsIDB4YmQsIDB4ZDQsIDB4ZjQsCisgIDB4ZTgsIDB4YmQsIDB4YmQsIDB4MzUsIDB4MTAsIDB4NTQsIDB4YTUsIDB4NDEsIDB4NTAsIDB4MjQsIDB4MGEsIDB4NGYsCisgIDB4YzYsIDB4YjAsIDB4OGMsIDB4YWYsIDB4MWMsIDB4MjcsIDB4MTIsIDB4ZWQsIDB4MGEsIDB4YjYsIDB4OTUsIDB4ZjMsCisgIDB4MjksIDB4NGQsIDB4YTEsIDB4YzAsIDB4YjgsIDB4ZjAsIDB4YjMsIDB4MmMsIDB4NmYsIDB4NDcsIDB4ODQsIDB4NTYsCisgIDB4NTMsIDB4ZGUsIDB4ZTgsIDB4N2MsIDB4MGQsIDB4NzIsIDB4YzAsIDB4NGEsIDB4OGUsIDB4YjcsIDB4MmIsIDB4OTQsCisgIDB4MjYsIDB4MmEsIDB4ZTcsIDB4ZTksIDB4OTIsIDB4MzcsIDB4NTUsIDB4OTEsIDB4YWYsIDB4YWUsIDB4NmYsIDB4NjgsCisgIDB4MjIsIDB4MTMsIDB4YTgsIDB4NTQsIDB4NTgsIDB4MTUsIDB4NWQsIDB4YmUsIDB4ZmUsIDB4MDYsIDB4NWQsIDB4MDMsCisgIDB4MGMsIDB4ZjksIDB4M2IsIDB4YTYsIDB4ZjMsIDB4OWIsIDB4NDUsIDB4OWIsIDB4OGQsIDB4ZjYsIDB4OWYsIDB4ZWUsCisgIDB4ZWMsIDB4YTIsIDB4YmIsIDB4NGYsIDB4NzcsIDB4M2UsIDB4MGQsIDB4YjMsIDB4NTQsIDB4MWMsIDB4OWMsIDB4NWYsCisgIDB4ZTksIDB4OTIsIDB4MTQsIDB4NDUsIDB4ZjAsIDB4MzgsIDB4ZmEsIDB4NzEsIDB4Y2UsIDB4NzcsIDB4NGEsIDB4Y2MsCisgIDB4NmIsIDB4NDIsIDB4ZDYsIDB4MmUsIDB4ZTIsIDB4OWIsIDB4OWEsIDB4ZTUsIDB4MzAsIDB4MjQsIDB4NmQsIDB4ODksCisgIDB4ZDYsIDB4MTgsIDB4MzQsIDB4ODYsIDB4YjUsIDB4OTQsIDB4YjQsIDB4ODgsIDB4NjYsIDB4OTYsIDB4NjYsIDB4NWMsCisgIDB4NDYsIDB4OTYsIDB4NzksIDB4YjcsIDB4MmUsIDB4ZjcsIDB4YzEsIDB4NTgsIDB4M2UsIDB4M2MsIDB4NTUsIDB4MjEsCisgIDB4MzIsIDB4MzgsIDB4YmEsIDB4YjAsIDB4Y2UsIDB4YTEsIDB4ZDIsIDB4M2MsIDB4ZDQsIDB4NTQsIDB4ODcsIDB4NGIsCisgIDB4YmUsIDB4MDAsIDB4YTksIDB4MzEsIDB4MWUsIDB4MTcsIDB4ZDUsIDB4MzYsIDB4YjIsIDB4MWEsIDB4MTQsIDB4YzMsCisgIDB4MzEsIDB4ZTUsIDB4YjQsIDB4N2YsIDB4ZTMsIDB4MjQsIDB4YmYsIDB4NzgsIDB4NzUsIDB4ZDgsIDB4NjgsIDB4NmUsCisgIDB4ZWYsIDB4YzksIDB4NjcsIDB4OWYsIDB4NjksIDB4MjcsIDB4MTIsIDB4MGQsIDB4NzgsIDB4N2IsIDB4NWEsIDB4MmEsCisgIDB4ZjYsIDB4MDcsIDB4MDgsIDB4NGMsIDB4NTQsIDB4MGUsIDB4NmEsIDB4YTYsIDB4OTIsIDB4MDYsIDB4YTgsIDB4NGUsCisgIDB4YTIsIDB4NDAsIDB4MWQsIDB4NWEsIDB4YmYsIDB4YWYsIDB4NzMsIDB4ZGEsIDB4YjcsIDB4YTIsIDB4MGYsIDB4MDYsCisgIDB4MDMsIDB4NTIsIDB4MGUsIDB4YTUsIDB4ODEsIDB4OTEsIDB4ZTQsIDB4M2EsIDB4YTgsIDB4YjgsIDB4YTYsIDB4YTksCisgIDB4YjMsIDB4ODksIDB4OWIsIDB4NDUsIDB4NWYsIDB4YjQsIDB4ODIsIDB4OGEsIDB4ZDcsIDB4OTIsIDB4ZTQsIDB4ZjAsCisgIDB4NzcsIDB4M2UsIDB4NDMsIDB4YWUsIDB4OTMsIDB4YWEsIDB4MGQsIDB4NTksIDB4MGEsIDB4YjAsIDB4ZGYsIDB4YjUsCisgIDB4YzYsIDB4ZDcsIDB4YTYsIDB4YzQsIDB4MDcsIDB4NzQsIDB4NDMsIDB4MGEsIDB4YmEsIDB4N2EsIDB4MjEsIDB4MDcsCisgIDB4YTQsIDB4MGYsIDB4MTcsIDB4MWIsIDB4MjksIDB4NzgsIDB4ZjQsIDB4MDUsIDB4YzQsIDB4ZTgsIDB4ODUsIDB4ZTYsCisgIDB4NzgsIDB4NjQsIDB4NWQsIDB4MTgsIDB4ZWIsIDB4MmYsIDB4OTQsIDB4NjQsIDB4NDEsIDB4N2QsIDB4NTUsIDB4YzgsCisgIDB4ZmUsIDB4YWYsIDB4YWEsIDB4ZDgsIDB4MmEsIDB4MTUsIDB4ZTAsIDB4MDYsIDB4YzUsIDB4MTksIDB4MDMsIDB4MzAsCisgIDB4ZTAsIDB4MTUsIDB4OTYsIDB4YWYsIDB4ZjQsIDB4OGYsIDB4MmQsIDB4NzcsIDB4YjIsIDB4ZDQsIDB4MmYsIDB4MDEsCisgIDB4NjAsIDB4ZDAsIDB4YjgsIDB4MWIsIDB4YjgsIDB4NDAsIDB4MGQsIDB4YjMsIDB4YmIsIDB4NDgsIDB4ZGUsIDB4MDYsCisgIDB4ZjcsIDB4YTYsIDB4NmIsIDB4MmEsIDB4MTAsIDB4ZWQsIDB4ZTksIDB4ZWEsIDB4NWQsIDB4ZjAsIDB4NmUsIDB4MzAsCisgIDB4NTEsIDB4YWQsIDB4OWQsIDB4N2YsIDB4ZmMsIDB4M2UsIDB4NWUsIDB4ODAsIDB4NmIsIDB4ZGYsIDB4YTgsIDB4MTMsCisgIDB4NjEsIDB4MGYsIDB4N2IsIDB4ODgsIDB4ODIsIDB4ZGUsIDB4MTEsIDB4M2QsIDB4YTAsIDB4NjIsIDB4YTAsIDB4ZGIsCisgIDB4M2UsIDB4ZWEsIDB4ZjMsIDB4NDMsIDB4Y2QsIDB4OWQsIDB4Y2YsIDB4MmYsIDB4ZjUsIDB4MmQsIDB4MzEsIDB4MjYsCisgIDB4YjQsIDB4NmUsIDB4MjEsIDB4OTgsIDB4ZDIsIDB4MWQsIDB4YzcsIDB4NzYsIDB4MjIsIDB4YTYsIDB4MjYsIDB4N2YsCisgIDB4NmEsIDB4YjYsIDB4MjYsIDB4Y2YsIDB4OWYsIDB4ZGYsIDB4NDQsIDB4MjIsIDB4ZmEsIDB4N2UsIDB4ZTcsIDB4NTUsCisgIDB4NmMsIDB4ZjgsIDB4Y2EsIDB4ZjUsIDB4ZjQsIDB4ZTUsIDB4MTcsIDB4YjUsIDB4ZDYsIDB4ZWUsIDB4ZWYsIDB4NDcsCisgIDB4OGIsIDB4MDcsIDB4ZmIsIDB4NWQsIDB4NTksIDB4MmIsIDB4MWQsIDB4ZTIsIDB4MTEsIDB4YTIsIDB4Y2EsIDB4MTcsCisgIDB4MjUsIDB4MjIsIDB4ZTUsIDB4ZDMsIDB4MWIsIDB4NDIsIDB4ZGEsIDB4NmEsIDB4NGYsIDB4ZDQsIDB4NGQsIDB4NDcsCisgIDB4YmIsIDB4YTAsIDB4MTIsIDB4OTMsIDB4YjUsIDB4OTQsIDB4NjAsIDB4YmEsIDB4OWIsIDB4YWUsIDB4ZjMsIDB4NDQsCisgIDB4NjIsIDB4NzAsIDB4OTMsIDB4OWMsIDB4YzQsIDB4Y2QsIDB4MDQsIDB4ODksIDB4ZTEsIDB4ZTQsIDB4NTUsIDB4YjEsCisgIDB4OWEsIDB4NTYsIDB4ZWQsIDB4NzMsIDB4ZGYsIDB4ZDcsIDB4YTcsIDB4ZDAsIDB4NWMsIDB4NTAsIDB4ZDAsIDB4YWIsCisgIDB4NjgsIDB4ZjksIDB4MDYsIDB4MzgsIDB4ZDEsIDB4ZWIsIDB4ZGIsIDB4ZGQsIDB4ODgsIDB4YzcsIDB4MGMsIDB4NmEsCisgIDB4ZGYsIDB4ZGMsIDB4ODksIDB4YTAsIDB4MTcsIDB4ZWEsIDB4MGYsIDB4MjQsIDB4M2EsIDB4YWUsIDB4MzAsIDB4NjcsCisgIDB4MGYsIDB4Y2IsIDB4NWQsIDB4M2IsIDB4OTUsIDB4YmQsIDB4ZmIsIDB4NjQsIDB4ZjIsIDB4ZjIsIDB4MGIsIDB4NzYsCisgIDB4OTcsIDB4YmYsIDB4NDcsIDB4NDIsIDB4YjUsIDB4ZDAsIDB4MTQsIDB4YjEsIDB4MWMsIDB4NmQsIDB4ZjMsIDB4M2YsCisgIDB4N2IsIDB4MTEsIDB4ZGYsIDB4YmUsIDB4M2EsIDB4NjYsIDB4OTIsIDB4ZTQsIDB4NmYsIDB4NWQsIDB4OGIsIDB4NDEsCisgIDB4MGUsIDB4NGMsIDB4ZDAsIDB4ZGEsIDB4NTUsIDB4OWUsIDB4YWYsIDB4NmQsIDB4Y2MsIDB4MmEsIDB4ODcsIDB4NjAsCisgIDB4MjYsIDB4ODIsIDB4NjgsIDB4YTgsIDB4MDQsIDB4MjcsIDB4YmQsIDB4NTgsIDB4ODksIDB4MjgsIDB4NjEsIDB4ODUsCisgIDB4NmEsIDB4NWIsIDB4YWIsIDB4MGIsIDB4NjksIDB4MGIsIDB4NTMsIDB4NWEsIDB4NGUsIDB4NDQsIDB4NDMsIDB4ZGQsCisgIDB4YmQsIDB4MWMsIDB4NDgsIDB4NTksIDB4MjIsIDB4YjYsIDB4YjcsIDB4ZDYsIDB4NGYsIDB4MDgsIDB4M2YsIDB4ZmQsCisgIDB4ZjIsIDB4MGIsIDB4MjQsIDB4YTgsIDB4ZjIsIDB4NWYsIDB4ZmYsIDB4ZWEsIDB4ZGUsIDB4ZTYsIDB4M2YsIDB4NDgsCisgIDB4MmUsIDB4NjksIDB4NzcsIDB4YWYsIDB4MWQsIDB4MDgsIDB4N2IsIDB4YzIsIDB4YWUsIDB4NTYsIDB4MDUsIDB4MmUsCisgIDB4YjgsIDB4ODksIDB4NmMsIDB4MzIsIDB4NjEsIDB4ZWMsIDB4YjcsIDB4ZTQsIDB4N2YsIDB4NTUsIDB4MTEsIDB4YWYsCisgIDB4MGYsIDB4ZGUsIDB4YmMsIDB4M2QsIDB4MzgsIDB4ZWQsIDB4M2UsIDB4OTEsIDB4ZDUsIDB4MTAsIDB4MGMsIDB4NjMsCisgIDB4NzIsIDB4Y2UsIDB4ZWYsIDB4MDIsIDB4MWIsIDB4MmUsIDB4YmMsIDB4ZTIsIDB4NzAsIDB4NWMsIDB4OTUsIDB4NzUsCisgIDB4M2UsIDB4OTcsIDB4MTAsIDB4ZjgsIDB4OTEsIDB4OGYsIDB4ODAsIDB4OWYsIDB4M2EsIDB4MjMsIDB4ZjAsIDB4NDgsCisgIDB4ODYsIDB4ODgsIDB4YjMsIDB4MzAsIDB4ZjksIDB4MjEsIDB4MmUsIDB4NmYsIDB4NDUsIDB4NjAsIDB4N2IsIDB4ZjYsCisgIDB4M2UsIDB4YmYsIDB4ZGUsIDB4NTMsIDB4YjcsIDB4YTUsIDB4NDMsIDB4MDYsIDB4NzUsIDB4OTgsIDB4OTcsIDB4NGUsCisgIDB4NGYsIDB4ZjAsIDB4NTEsIDB4NjcsIDB4MzYsIDB4M2UsIDB4ZWUsIDB4MmYsIDB4ODMsIDB4YTAsIDB4YzQsIDB4MDAsCisgIDB4MGMsIDB4NTksIDB4OTQsIDB4N2UsIDB4YjksIDB4MGEsIDB4MGUsIDB4YjEsIDB4NDYsIDB4NzMsIDB4MDcsIDB4ODcsCisgIDB4ODcsIDB4MWUsIDB4OTcsIDB4NTEsIDB4YzcsIDB4NzcsIDB4M2YsIDB4NjEsIDB4N2MsIDB4ZjcsIDB4M2EsIDB4YjgsCisgIDB4N2MsIDB4ZTMsIDB4NzIsIDB4MDgsIDB4MTYsIDB4YzcsIDB4ODEsIDB4ZWEsIDB4MmIsIDB4YTQsIDB4YTgsIDB4ZDQsCisgIDB4MzIsIDB4ZjcsIDB4MmQsIDB4NzIsIDB4ZGEsIDB4YjIsIDB4YTEsIDB4MTAsIDB4NDksIDB4NWQsIDB4OTUsIDB4NDksCisgIDB4NmIsIDB4NDYsIDB4ZTcsIDB4MjAsIDB4ZTgsIDB4ZTYsIDB4YTAsIDB4ZjYsIDB4YjAsIDB4Y2EsIDB4ODEsIDB4YTMsCisgIDB4OGEsIDB4NWUsIDB4NjgsIDB4MzcsIDB4M2YsIDB4ZWYsIDB4OWMsIDB4NjAsIDB4NGUsIDB4OWEsIDB4MGIsIDB4MGMsCisgIDB4MTYsIDB4YTMsIDB4NzEsIDB4MDUsIDB4NjEsIDB4ZWQsIDB4NTgsIDB4ZmQsIDB4OGUsIDB4ZTcsIDB4MDcsIDB4ZTAsCisgIDB4NjAsIDB4NTAsIDB4ZjAsIDB4OTAsIDB4MWEsIDB4OWUsIDB4ODMsIDB4MTYsIDB4MTAsIDB4NDYsIDB4MTIsIDB4ZWYsCisgIDB4YzEsIDB4YWMsIDB4NmMsIDB4MTMsIDB4NjMsIDB4ZDksIDB4MmMsIDB4NzYsIDB4NmIsIDB4YjEsIDB4OTIsIDB4MjMsCisgIDB4OTcsIDB4YWIsIDB4MDUsIDB4MWQsIDB4ZTEsIDB4NzQsIDB4NzQsIDB4Y2QsIDB4ZmEsIDB4MjUsIDB4YzksIDB4MWUsCisgIDB4ZjMsIDB4OWIsIDB4MzYsIDB4MjUsIDB4OGEsIDB4YzEsIDB4MTEsIDB4ODAsIDB4NzYsIDB4ZTgsIDB4YjIsIDB4MDMsCisgIDB4NmUsIDB4ODYsIDB4NDgsIDB4YTUsIDB4MmUsIDB4NGEsIDB4ZGMsIDB4MTksIDB4MDAsIDB4MWQsIDB4NzQsIDB4NWYsCisgIDB4N2MsIDB4N2EsIDB4ZTMsIDB4MTMsIDB4YTYsIDB4YmMsIDB4M2IsIDB4NzgsIDB4N2IsIDB4ZjksIDB4NzUsIDB4MmYsCisgIDB4MGEsIDB4OTgsIDB4OGMsIDB4ZWIsIDB4ZDAsIDB4M2IsIDB4MzIsIDB4M2MsIDB4OGIsIDB4MzQsIDB4YjksIDB4NzMsCisgIDB4MTgsIDB4OGYsIDB4NDIsIDB4MzYsIDB4NmYsIDB4OWIsIDB4MWQsIDB4YWEsIDB4MTEsIDB4MTksIDB4NmIsIDB4NDgsCisgIDB4YzAsIDB4YjMsIDB4ZDEsIDB4YjMsIDB4YWQsIDB4YzYsIDB4YzIsIDB4YWMsIDB4Y2YsIDB4NTYsIDB4NmYsIDB4YjIsCisgIDB4MmYsIDB4YWIsIDB4YjAsIDB4NmIsIDB4YjYsIDB4MzQsIDB4ODcsIDB4Y2IsIDB4YjcsIDB4M2QsIDB4YTEsIDB4OTAsCisgIDB4NTgsIDB4NWYsIDB4YjEsIDB4ZjksIDB4ZDMsIDB4M2IsIDB4YTAsIDB4ZGIsIDB4MWUsIDB4YzgsIDB4MmUsIDB4OWUsCisgIDB4MjYsIDB4ODYsIDB4NjYsIDB4YmMsIDB4MDcsIDB4ZGQsIDB4NDUsIDB4NTYsIDB4M2IsIDB4MTYsIDB4NDMsIDB4Y2UsCisgIDB4NzksIDB4ODcsIDB4OWIsIDB4NjgsIDB4NjMsIDB4MWIsIDB4ZWQsIDB4M2EsIDB4Y2QsIDB4MmMsIDB4MmEsIDB4Y2MsCisgIDB4ZWEsIDB4MTksIDB4ZjIsIDB4MzksIDB4YjYsIDB4ZjMsIDB4ZTcsIDB4ZWQsIDB4MjgsIDB4ZjIsIDB4ZjgsIDB4OTQsCisgIDB4Y2UsIDB4MGMsIDB4ZWYsIDB4NjgsIDB4OTEsIDB4NGEsIDB4YTIsIDB4NGQsIDB4OTAsIDB4MmQsIDB4ZGUsIDB4OTQsCisgIDB4NjQsIDB4YjUsIDB4ZWUsIDB4N2YsIDB4OTQsIDB4ZmYsIDB4NzYsIDB4MmIsIDB4MDcsIDB4MWMsIDB4MzQsIDB4NDUsCisgIDB4NmUsIDB4ZTcsIDB4OGUsIDB4YmUsIDB4MjIsIDB4ZjQsIDB4MTIsIDB4OTIsIDB4MjksIDB4ZTEsIDB4MDksIDB4MmYsCisgIDB4NjEsIDB4ZjUsIDB4OGEsIDB4NjcsIDB4M2YsIDB4NmIsIDB4YTUsIDB4ZTEsIDB4NTAsIDB4NmIsIDB4OWIsIDB4ZTMsCisgIDB4MmQsIDB4ODMsIDB4NWYsIDB4YzAsIDB4YzgsIDB4ZDIsIDB4YzYsIDB4ZTIsIDB4ZTIsIDB4NWEsIDB4YWYsIDB4NDcsCisgIDB4OGUsIDB4OWIsIDB4MzEsIDB4YzAsIDB4ZWIsIDB4MmIsIDB4Y2MsIDB4NmYsIDB4ZDgsIDB4ZTIsIDB4NDMsIDB4YmMsCisgIDB4OGUsIDB4ODIsIDB4OWQsIDB4ZDgsIDB4NTYsIDB4ZDksIDB4NTAsIDB4OGIsIDB4ZDMsIDB4ZmIsIDB4NTksIDB4MzcsCisgIDB4OTAsIDB4NTQsIDB4OGUsIDB4NTIsIDB4MjQsIDB4MzEsIDB4MDcsIDB4ZjUsIDB4NjEsIDB4MGUsIDB4YmYsIDB4M2IsCisgIDB4MGEsIDB4OTgsIDB4YTUsIDB4NTgsIDB4ZmYsIDB4NjEsIDB4NTAsIDB4MTAsIDB4MDQsIDB4MDEsIDB4YjUsIDB4NjcsCisgIDB4ZWIsIDB4MDAsIDB4YzYsIDB4ZTYsIDB4YTAsIDB4NDUsIDB4MzUsIDB4YTAsIDB4NTcsIDB4MjgsIDB4ZDEsIDB4OTYsCisgIDB4MmMsIDB4MWQsIDB4NzMsIDB4MDEsIDB4NDgsIDB4MzIsIDB4NzksIDB4M2QsIDB4YTUsIDB4YWEsIDB4MGYsIDB4ZWEsCisgIDB4ZjcsIDB4YzAsIDB4MDMsIDB4YjAsIDB4YTYsIDB4NzcsIDB4YWEsIDB4MDYsIDB4MWMsIDB4Y2IsIDB4MDEsIDB4ZmYsCisgIDB4OGYsIDB4OTksIDB4N2MsIDB4YjgsIDB4MTYsIDB4ZGIsIDB4ZWUsIDB4YTcsIDB4NGYsIDB4M2UsIDB4OGIsIDB4NGEsCisgIDB4ODYsIDB4MmQsIDB4YTUsIDB4ZTEsIDB4OTQsIDB4NDksIDB4MGEsIDB4ZDEsIDB4N2EsIDB4ZTgsIDB4YjgsIDB4NWEsCisgIDB4NjAsIDB4ZTYsIDB4MzYsIDB4NTAsIDB4MjgsIDB4MWQsIDB4NWQsIDB4YmMsIDB4ZjIsIDB4ZmIsIDB4MDQsIDB4OWUsCisgIDB4NzcsIDB4ODUsIDB4ZjUsIDB4YjQsIDB4OTEsIDB4YzQsIDB4MzQsIDB4ODksIDB4NTYsIDB4MmMsIDB4NDYsIDB4MGEsCisgIDB4ODQsIDB4NjAsIDB4OWUsIDB4ZTQsIDB4M2EsIDB4M2YsIDB4YWEsIDB4MTcsIDB4NGQsIDB4MDIsIDB4YWIsIDB4MTEsCisgIDB4YTksIDB4ODcsIDB4OGIsIDB4ZTMsIDB4Y2IsIDB4MGIsIDB4ZmEsIDB4Y2YsIDB4ZjgsIDB4ZjIsIDB4ZWMsIDB4NjIsCisgIDB4MGQsIDB4ZGUsIDB4OWYsIDB4MmUsIDB4ZWQsIDB4YWMsIDB4ZjYsIDB4NzgsIDB4ZDIsIDB4NTgsIDB4NjgsIDB4OTgsCisgIDB4MzEsIDB4MDYsIDB4ZDMsIDB4NWMsIDB4Y2YsIDB4ZTQsIDB4ODYsIDB4MzMsIDB4NTksIDB4NTQsIDB4MDgsIDB4MmUsCisgIDB4NzQsIDB4OGIsIDB4ZTEsIDB4YmEsIDB4MmMsIDB4MGYsIDB4Y2MsIDB4NTYsIDB4MzgsIDB4ZDAsIDB4YWIsIDB4OTgsCisgIDB4ZjYsIDB4YzksIDB4NjMsIDB4MDMsIDB4OTMsIDB4MzUsIDB4N2YsIDB4NWMsIDB4NDIsIDB4MzAsIDB4NjAsIDB4MTYsCisgIDB4NDYsIDB4MWUsIDB4YjEsIDB4NTMsIDB4ZGEsIDB4ZTgsIDB4YWQsIDB4MzIsIDB4YWYsIDB4N2IsIDB4ZDcsIDB4ZDYsCisgIDB4MWEsIDB4OWUsIDB4ZTAsIDB4MWEsIDB4NjEsIDB4NTksIDB4NTIsIDB4MGEsIDB4NGMsIDB4ZGUsIDB4OTMsIDB4YzgsCisgIDB4NzEsIDB4NjUsIDB4MTAsIDB4ODksIDB4NzAsIDB4ZjQsIDB4ZDgsIDB4NmQsIDB4N2EsIDB4ZWIsIDB4MTgsIDB4ODksCisgIDB4M2UsIDB4MjAsIDB4YmYsIDB4NzEsIDB4ZTksIDB4OWMsIDB4MDEsIDB4N2MsIDB4OTgsIDB4ZTYsIDB4OGIsIDB4NDQsCisgIDB4ZWMsIDB4NDIsIDB4NzEsIDB4NTUsIDB4OTksIDB4ZDYsIDB4MjksIDB4OTUsIDB4MDIsIDB4MzAsIDB4MTUsIDB4M2MsCisgIDB4NjAsIDB4MWIsIDB4MGIsIDB4ZTksIDB4NTIsIDB4OTMsIDB4NzksIDB4OTUsIDB4ZmIsIDB4MGUsIDB4ZDMsIDB4OTYsCisgIDB4YWIsIDB4NzQsIDB4YzgsIDB4YmEsIDB4OTAsIDB4ODUsIDB4MzMsIDB4YWYsIDB4OTAsIDB4ZjQsIDB4ZGQsIDB4YjcsCisgIDB4NWUsIDB4ZjUsIDB4OWQsIDB4YTgsIDB4MzUsIDB4YjQsIDB4ZjIsIDB4NmUsIDB4NTMsIDB4MmIsIDB4MzMsIDB4MjAsCisgIDB4YjAsIDB4NWIsIDB4YjMsIDB4MjAsIDB4MTQsIDB4NmQsIDB4YjAsIDB4MzIsIDB4YzcsIDB4NTgsIDB4ZTksIDB4MTIsCisgIDB4ZmUsIDB4NDIsIDB4NGEsIDB4YTYsIDB4NzMsIDB4N2QsIDB4NGEsIDB4ZDYsIDB4YjYsIDB4YTUsIDB4MGEsIDB4YTQsCisgIDB4NjIsIDB4ODYsIDB4OTcsIDB4NmQsIDB4NWQsIDB4NzIsIDB4YzEsIDB4ZTgsIDB4YWQsIDB4OWEsIDB4ZGEsIDB4YjQsCisgIDB4NjYsIDB4M2QsIDB4YjUsIDB4ZjUsIDB4NjcsIDB4NDAsIDB4MmIsIDB4ZTksIDB4MDAsIDB4NTUsIDB4YzMsIDB4ZjMsCisgIDB4ZWQsIDB4MDAsIDB4MDcsIDB4YTksIDB4ZjksIDB4ZjYsIDB4YjUsIDB4OTEsIDB4ZWYsIDB4ZmUsIDB4MDIsIDB4OGIsCisgIDB4ZTQsIDB4NTEsIDB4MmMsIDB4ZjMsIDB4MmYsIDB4ODIsIDB4MzIsIDB4NDcsIDB4NmYsIDB4MzMsIDB4YzUsIDB4MTQsCisgIDB4NjcsIDB4OTEsIDB4NjcsIDB4MWIsIDB4ZjUsIDB4MTgsIDB4NDgsIDB4YzYsIDB4Y2IsIDB4ODMsIDB4MzksIDB4OWMsCisgIDB4Y2YsIDB4YWIsIDB4ZDYsIDB4MjksIDB4MjYsIDB4OWMsIDB4YTcsIDB4NTYsIDB4MWUsIDB4MTAsIDB4YWUsIDB4NTksCisgIDB4NzgsIDB4ZTMsIDB4ZWQsIDB4ODgsIDB4ZDEsIDB4MDYsIDB4ZjUsIDB4NzIsIDB4MjksIDB4MTUsIDB4Y2EsIDB4M2MsCisgIDB4NjIsIDB4YWYsIDB4OTUsIDB4M2YsIDB4NTAsIDB4YTgsIDB4MmYsIDB4YjgsIDB4YjUsIDB4ZDMsIDB4Y2UsIDB4YzMsCisgIDB4MzUsIDB4MTYsIDB4MGQsIDB4ODgsIDB4MGIsIDB4YTksIDB4NTcsIDB4MWQsIDB4OGMsIDB4OGMsIDB4MTQsIDB4MjgsCisgIDB4ZjUsIDB4ZjgsIDB4NWIsIDB4MDcsIDB4ZjIsIDB4OTQsIDB4ODQsIDB4YzUsIDB4MzYsIDB4NjcsIDB4YjgsIDB4NDQsCisgIDB4MGMsIDB4ODAsIDB4YzEsIDB4NTQsIDB4OTYsIDB4ZDAsIDB4M2EsIDB4YjQsIDB4ZDEsIDB4ZTYsIDB4YjksIDB4NzksCisgIDB4ZGMsIDB4MzEsIDB4NDUsIDB4MWMsIDB4YzQsIDB4NzEsIDB4OTgsIDB4MmUsIDB4M2YsIDB4MGMsIDB4NDUsIDB4MzUsCisgIDB4MTAsIDB4MmMsIDB4NzcsIDB4ZWIsIDB4ZTQsIDB4ZGMsIDB4ZDcsIDB4YWIsIDB4MDgsIDB4NTgsIDB4OGYsIDB4NTYsCisgIDB4ZDcsIDB4ZDcsIDB4MjgsIDB4ZjIsIDB4OTIsIDB4YjYsIDB4NTMsIDB4MzgsIDB4NGEsIDB4ZWYsIDB4ZTYsIDB4ZDIsCisgIDB4M2MsIDB4M2UsIDB4MzIsIDB4YzIsIDB4YjgsIDB4Y2YsIDB4NmUsIDB4NzQsIDB4ZjAsIDB4MzcsIDB4ZTIsIDB4NjMsCisgIDB4MmEsIDB4ZTgsIDB4YTUsIDB4MjcsIDB4NDAsIDB4NTgsIDB4MWIsIDB4NGYsIDB4ZTcsIDB4MjgsIDB4YjQsIDB4MTEsCisgIDB4YjgsIDB4ODcsIDB4YzUsIDB4ZmMsIDB4YjQsIDB4YTAsIDB4OWIsIDB4MGYsIDB4OWEsIDB4MDUsIDB4M2QsIDB4NmUsCisgIDB4YzEsIDB4NjAsIDB4MmMsIDB4MTUsIDB4MWYsIDB4ODYsIDB4OGUsIDB4NmQsIDB4YjksIDB4YTksIDB4MWUsIDB4ZjMsCisgIDB4ZTEsIDB4YjcsIDB4NmEsIDB4MDIsIDB4ZmUsIDB4NzQsIDB4YjQsIDB4YjcsIDB4ZjUsIDB4ZDgsIDB4OTUsIDB4ODQsCisgIDB4ZWQsIDB4N2QsIDB4NGUsIDB4ZmMsIDB4MjUsIDB4ZDksIDB4OWMsIDB4YzIsIDB4ZjcsIDB4MmQsIDB4YTgsIDB4NzMsCisgIDB4YzEsIDB4MmQsIDB4MTcsIDB4YjIsIDB4YjIsIDB4YjYsIDB4MDEsIDB4ZDYsIDB4ZDcsIDB4YzEsIDB4ZTEsIDB4MjksCisgIDB4NmEsIDB4YWUsIDB4MWIsIDB4ZWQsIDB4YzIsIDB4NmUsIDB4NzAsIDB4YmUsIDB4MmMsIDB4OTgsIDB4NWIsIDB4MzEsCisgIDB4NTgsIDB4YzcsIDB4NzEsIDB4NzQsIDB4NGUsIDB4ODcsIDB4OGYsIDB4OWIsIDB4ZTUsIDB4MDAsIDB4YjEsIDB4MWIsCisgIDB4NmQsIDB4MjIsIDB4YmUsIDB4NGYsIDB4ZmQsIDB4ZDgsIDB4NmEsIDB4OWUsIDB4OTMsIDB4Y2MsIDB4MmYsIDB4MTMsCisgIDB4YTcsIDB4ZTEsIDB4MGQsIDB4ODgsIDB4YjYsIDB4ZTUsIDB4ODIsIDB4N2UsIDB4YzIsIDB4Y2UsIDB4ZTcsIDB4ODIsCisgIDB4ZmEsIDB4YzAsIDB4ODQsIDB4ZjcsIDB4YzYsIDB4MTIsIDB4YWYsIDB4ZjYsIDB4MzcsIDB4M2IsIDB4MzksIDB4NGQsCisgIDB4Y2QsIDB4NmUsIDB4NzQsIDB4MWUsIDB4ZGYsIDB4OGEsIDB4OGYsIDB4MDgsIDB4YTIsIDB4NDAsIDB4OGMsIDB4YWMsCisgIDB4YTEsIDB4ZGQsIDB4OGEsIDB4MGEsIDB4NDYsIDB4NjAsIDB4NGMsIDB4OGQsIDB4NTEsIDB4YWQsIDB4MGMsIDB4NzcsCisgIDB4YzAsIDB4ZmMsIDB4M2UsIDB4MDMsIDB4N2QsIDB4NjAsIDB4NWIsIDB4OWEsIDB4ZDAsIDB4NzksIDB4ZGUsIDB4M2IsCisgIDB4YTMsIDB4YmEsIDB4YjYsIDB4ZGQsIDB4ZGIsIDB4MTksIDB4YmQsIDB4NmYsIDB4NmEsIDB4ZGIsIDB4YjIsIDB4OWMsCisgIDB4MGYsIDB4YTcsIDB4ZDMsIDB4NjksIDB4ZTcsIDB4NzQsIDB4YjEsIDB4YmUsIDB4M2QsIDB4M2MsIDB4M2MsIDB4OGMsCisgIDB4MzYsIDB4MGYsIDB4OTEsIDB4MzYsIDB4NzIsIDB4YTgsIDB4YmQsIDB4M2MsIDB4YmMsIDB4NjEsIDB4N2YsIDB4YzAsCisgIDB4OWMsIDB4ZTEsIDB4MjQsIDB4MzcsIDB4MmIsIDB4YTYsIDB4YzksIDB4ZTUsIDB4YWUsIDB4ZTgsIDB4MTEsIDB4MzUsCisgIDB4MWUsIDB4OWYsIDB4NmUsIDB4NWYsIDB4OWUsIDB4OGUsIDB4OWIsIDB4ZjgsIDB4ZDEsIDB4ZjgsIDB4ODEsIDB4ZWYsCisgIDB4ODgsIDB4YzIsIDB4MzgsIDB4NWIsIDB4YmIsIDB4ZDgsIDB4ODgsIDB4NWQsIDB4ODcsIDB4OWMsIDB4NmMsIDB4YzMsCisgIDB4YjYsIDB4OTksIDB4NWMsIDB4YzksIDB4NTcsIDB4M2EsIDB4NDksIDB4NDAsIDB4NTYsIDB4OTksIDB4MzksIDB4NzIsCisgIDB4NWQsIDB4YzgsIDB4MjEsIDB4MjMsIDB4ZjUsIDB4YzYsIDB4MjgsIDB4MjcsIDB4MDYsIDB4ODcsIDB4NDEsIDB4Y2EsCisgIDB4MTAsIDB4YzgsIDB4MjksIDB4YTMsIDB4MzcsIDB4MDcsIDB4OTcsIDB4NWMsIDB4ZWIsIDB4YTAsIDB4NTIsIDB4MmUsCisgIDB4ODUsIDB4MzUsIDB4ZTgsIDB4NTYsIDB4OTcsIDB4Y2IsIDB4MGYsIDB4ZjgsIDB4NzcsIDB4MWMsIDB4ZjAsIDB4ZmEsCisgIDB4ZDksIDB4MTEsIDB4MDEsIDB4NTUsIDB4YzQsIDB4YzksIDB4YzQsIDB4YTIsIDB4OWEsIDB4MDQsIDB4YTYsIDB4ZDIsCisgIDB4YTksIDB4ZDcsIDB4NzQsIDB4NDYsIDB4ODcsIDB4ZWUsIDB4ODAsIDB4MTIsIDB4ZmMsIDB4MjYsIDB4ZmYsIDB4YjMsCisgIDB4NmMsIDB4MmMsIDB4YzgsIDB4ZWUsIDB4MjcsIDB4ZWQsIDB4ZTMsIDB4YWYsIDB4ZjYsIDB4ZmEsIDB4OGYsIDB4ODIsCisgIDB4ODUsIDB4ZGUsIDB4ZDYsIDB4YWYsIDB4ZmUsIDB4ZjQsIDB4YWIsIDB4OTYsIDB4MDksIDB4YzAsIDB4MjYsIDB4ZjUsCisgIDB4ZjksIDB4ZDIsIDB4NjMsIDB4MjYsIDB4MTksIDB4NmQsIDB4ODQsIDB4NDUsIDB4MDMsIDB4ZTEsIDB4MmYsIDB4OWEsCisgIDB4NDIsIDB4MzIsIDB4NGEsIDB4NTMsIDB4NTQsIDB4NWMsIDB4MTAsIDB4NzUsIDB4NDEsIDB4OGIsIDB4M2UsIDB4MDMsCisgIDB4YzcsIDB4MmUsIDB4MWYsIDB4MDQsIDB4YTYsIDB4ZmEsIDB4ZWYsIDB4ZTMsIDB4OTYsIDB4ZGEsIDB4MzAsIDB4NGQsCisgIDB4MTEsIDB4NjQsIDB4NTEsIDB4NzEsIDB4MTEsIDB4NGMsIDB4ODEsIDB4MjksIDB4MzgsIDB4MjIsIDB4Y2IsIDB4MjIsCisgIDB4NTksIDB4Y2UsIDB4MWYsIDB4OWMsIDB4MTUsIDB4YTcsIDB4NmQsIDB4YWYsIDB4YmIsIDB4ZGUsIDB4ODUsIDB4OTcsCisgIDB4ODEsIDB4MTAsIDB4MjYsIDB4NmUsIDB4MWQsIDB4MmMsIDB4ZWIsIDB4YWQsIDB4ZTAsIDB4NDMsIDB4NzEsIDB4ZGEsCisgIDB4ZTksIDB4ZTEsIDB4OGMsIDB4ZjUsIDB4Y2IsIDB4OGQsIDB4NzIsIDB4MDMsIDB4ZWQsIDB4MTUsIDB4ZGEsIDB4ZWIsCisgIDB4NWMsIDB4MjEsIDB4OTEsIDB4ZDIsIDB4Y2UsIDB4ZjUsIDB4YjgsIDB4ZDAsIDB4N2QsIDB4YWYsIDB4N2IsIDB4YzEsCisgIDB4Y2QsIDB4MDMsIDB4ZjIsIDB4MGIsIDB4ZTYsIDB4ZjksIDB4MzUsIDB4ZDcsIDB4NjksIDB4ZDAsIDB4NGMsIDB4MmMsCisgIDB4ZDksIDB4ZjAsIDB4OGUsIDB4NGYsIDB4YjMsIDB4ZTksIDB4Y2YsIDB4MTAsIDB4MTEsIDB4YjYsIDB4NWEsIDB4MjMsCisgIDB4OGQsIDB4MjAsIDB4ODYsIDB4Y2MsIDB4M2YsIDB4NmIsIDB4MTUsIDB4MjcsIDB4ZmEsIDB4Y2EsIDB4NmQsIDB4NjQsCisgIDB4MjksIDB4MGMsIDB4MWQsIDB4ZWIsIDB4NjEsIDB4MjEsIDB4YzksIDB4MjksIDB4OTcsIDB4MmEsIDB4N2EsIDB4MDUsCisgIDB4MjcsIDB4OTIsIDB4NjYsIDB4YjcsIDB4MDgsIDB4MTUsIDB4YWIsIDB4ODYsIDB4MjAsIDB4MmQsIDB4OWEsIDB4ZTUsCisgIDB4MmUsIDB4YWUsIDB4OWQsIDB4YzUsIDB4MWMsIDB4ZTgsIDB4ZmMsIDB4ZDYsIDB4MzEsIDB4YjYsIDB4NjcsIDB4NmQsCisgIDB4NjcsIDB4NGIsIDB4OGYsIDB4NmMsIDB4MmUsIDB4ZTEsIDB4NWIsIDB4MDUsIDB4ODEsIDB4NDEsIDB4MzUsIDB4MTksCisgIDB4NWIsIDB4ZjksIDB4MGUsIDB4MTMsIDB4YTEsIDB4MmIsIDB4YmIsIDB4MzMsIDB4OGUsIDB4ODUsIDB4YWIsIDB4MTUsCisgIDB4NTcsIDB4YjUsIDB4MzYsIDB4MWMsIDB4NDksIDB4NGQsIDB4YzUsIDB4YjMsIDB4MWYsIDB4NTgsIDB4YjEsIDB4ZTYsCisgIDB4MTIsIDB4OGIsIDB4NzksIDB4YmMsIDB4ZGMsIDB4OGYsIDB4NjcsIDB4MTMsIDB4ZDAsIDB4MDAsIDB4NGUsIDB4YzgsCisgIDB4YzUsIDB4ZTAsIDB4NjksIDB4OGUsIDB4MGMsIDB4YmUsIDB4YWUsIDB4NmIsIDB4ZDIsIDB4MDksIDB4ZjAsIDB4ODMsCisgIDB4YTksIDB4NTQsIDB4YzQsIDB4NTIsIDB4ZDMsIDB4ZDEsIDB4OWQsIDB4NGUsIDB4ZjMsIDB4YjQsIDB4NjIsIDB4ZjMsCisgIDB4OGMsIDB4ZTksIDB4ODIsIDB4NGYsIDB4YjUsIDB4NDYsIDB4NzMsIDB4ZmYsIDB4OGIsIDB4M2UsIDB4YTQsIDB4YWYsCisgIDB4ZmYsIDB4YTIsIDB4Y2YsIDB4OWEsIDB4YWMsIDB4ODgsIDB4ZGIsIDB4ODAsIDB4MTQsIDB4OWMsIDB4MTksIDB4MDYsCisgIDB4NWIsIDB4ZWUsIDB4OGIsIDB4NmYsIDB4YjMsIDB4NmYsIDB4OWQsIDB4NTAsIDB4OWIsIDB4NWUsIDB4N2EsIDB4ODYsCisgIDB4ZjAsIDB4NzcsIDB4YTYsIDB4OTgsIDB4NjQsIDB4YWUsIDB4NTksIDB4NGMsIDB4MTYsIDB4NTEsIDB4YzcsIDB4ZjUsCisgIDB4YjYsIDB4OWUsIDB4ZDIsIDB4MjcsIDB4YjUsIDB4ZTAsIDB4MTAsIDB4OTAsIDB4ZjAsIDB4MjMsIDB4OTcsIDB4ZTUsCisgIDB4MmQsIDB4OTIsIDB4N2UsIDB4ODksIDB4ZWMsIDB4NGUsIDB4YTEsIDB4MTcsIDB4ZWUsIDB4OGEsIDB4OTgsIDB4YmIsCisgIDB4YjksIDB4ZDEsIDB4ZmUsIDB4NDgsIDB4NDcsIDB4MTgsIDB4NmIsIDB4MTEsIDB4NGYsIDB4YTcsIDB4MjksIDB4MDMsCisgIDB4YTEsIDB4NjEsIDB4MjcsIDB4ZDIsIDB4MmYsIDB4YzksIDB4YTQsIDB4MTEsIDB4ZjEsIDB4YzYsIDB4OTgsIDB4OTEsCisgIDB4ODUsIDB4NGYsIDB4ODMsIDB4NmUsIDB4OGEsIDB4OWUsIDB4OTUsIDB4NDMsIDB4MjcsIDB4MjUsIDB4ZGYsIDB4MjQsCisgIDB4YzUsIDB4MWEsIDB4NWUsIDB4YjMsIDB4ODEsIDB4NzgsIDB4M2QsIDB4Y2YsIDB4MjcsIDB4ZjksIDB4ZDUsIDB4ZDUsCisgIDB4MjMsIDB4ZjYsIDB4ODIsIDB4MjQsIDB4ODgsIDB4YTAsIDB4MGQsIDB4MTEsIDB4ZDIsIDB4MWUsIDB4NjcsIDB4MmQsCisgIDB4ZjAsIDB4N2IsIDB4MTMsIDB4MTQsIDB4ZWEsIDB4OTQsIDB4YWEsIDB4MTQsIDB4MjMsIDB4NzEsIDB4ZDgsIDB4ODAsCisgIDB4MGYsIDB4YTQsIDB4NjUsIDB4MDUsIDB4ZDQsIDB4M2MsIDB4MjQsIDB4MGYsIDB4OGQsIDB4MDIsIDB4ZDMsIDB4MjgsCisgIDB4MjksIDB4MmQsIDB4MzIsIDB4YWIsIDB4MDgsIDB4MzUsIDB4NGYsIDB4MWUsIDB4NDIsIDB4OWIsIDB4ZjAsIDB4YmYsCisgIDB4ZmUsIDB4ZjksIDB4ZTMsIDB4NGYsIDB4MWQsIDB4ZjAsIDB4NjAsIDB4MzAsIDB4ZTcsIDB4MmEsIDB4MmMsIDB4MTMsCisgIDB4OTgsIDB4MGEsIDB4NDksIDB4YzYsIDB4YzQsIDB4MTUsIDB4ODMsIDB4ZWQsIDB4MTAsIDB4NGYsIDB4ZDEsIDB4YWIsCisgIDB4YjUsIDB4ODUsIDB4MDIsIDB4ZTQsIDB4NmIsIDB4NWIsIDB4YzEsIDB4OTUsIDB4ZmUsIDB4ODMsIDB4NTYsIDB4OTcsCisgIDB4NWIsIDB4NjMsIDB4Y2UsIDB4OWMsIDB4N2UsIDB4OGEsIDB4ZjQsIDB4N2IsIDB4MWYsIDB4YjUsIDB4NzEsIDB4YzksCisgIDB4NmQsIDB4N2EsIDB4YTksIDB4NmYsIDB4NmYsIDB4MjgsIDB4OTcsIDB4YTIsIDB4ZWMsIDB4ZTIsIDB4NzgsIDB4YWEsCisgIDB4NjcsIDB4ZGYsIDB4NWUsIDB4OWMsIDB4YjgsIDB4MmIsIDB4NWYsIDB4YjAsIDB4MTIsIDB4NWYsIDB4NjEsIDB4MjUsCisgIDB4NWEsIDB4ZDMsIDB4ZTYsIDB4YzksIDB4NmYsIDB4MDYsIDB4NGQsIDB4ODIsIDB4MTEsIDB4NGYsIDB4MGYsIDB4YzAsCisgIDB4YjcsIDB4NmUsIDB4YTksIDB4MzMsIDB4ZDAsIDB4MjgsIDB4NTksIDB4MzEsIDB4NmIsIDB4ZjMsIDB4ZjcsIDB4MDgsCisgIDB4OTMsIDB4NDcsIDB4ZDEsIDB4NjAsIDB4OTMsIDB4OTEsIDB4ZDQsIDB4NmEsIDB4NTcsIDB4ZTgsIDB4NGMsIDB4MDIsCisgIDB4ZWIsIDB4NWYsIDB4MWQsIDB4N2IsIDB4MmUsIDB4YmEsIDB4YjUsIDB4NDYsIDB4YTAsIDB4Y2IsIDB4OTMsIDB4NzcsCisgIDB4OGYsIDB4MGEsIDB4ZGIsIDB4ODAsIDB4YWIsIDB4ZjcsIDB4N2EsIDB4MWYsIDB4NTYsIDB4NDcsIDB4MTksIDB4ZjksCisgIDB4M2EsIDB4MzEsIDB4ZGQsIDB4N2EsIDB4YzgsIDB4OTIsIDB4YzksIDB4ZmQsIDB4NmMsIDB4OWQsIDB4MWEsIDB4YjgsCisgIDB4YmIsIDB4ZmYsIDB4OWYsIDB4N2QsIDB4Y2YsIDB4ZGQsIDB4ZDEsIDB4ODUsIDB4YmUsIDB4YjAsIDB4ZWUsIDB4YjcsCisgIDB4MzIsIDB4NmEsIDB4ODcsIDB4MjcsIDB4MDMsIDB4ZGYsIDB4NGQsIDB4MDksIDB4YWYsIDB4Y2EsIDB4MDEsIDB4ZWIsCisgIDB4MGEsIDB4MmMsIDB4NGQsIDB4M2EsIDB4MTgsIDB4ZTcsIDB4ZDYsIDB4ZjUsIDB4ZTMsIDB4ZWIsIDB4ZTMsIDB4ODMsCisgIDB4MjMsIDB4MWIsIDB4ZWMsIDB4ZTgsIDB4N2YsIDB4YzMsIDB4MzUsIDB4ZDIsIDB4ZmMsIDB4MDgsIDB4OTMsIDB4NDQsCisgIDB4NTgsIDB4ZjYsIDB4NTYsIDB4NzYsIDB4YWQsIDB4YzQsIDB4ODIsIDB4ZjksIDB4NzMsIDB4ODMsIDB4ZGYsIDB4NmQsCisgIDB4ZmIsIDB4YTQsIDB4OTksIDB4ZmQsIDB4MTQsIDB4ZTIsIDB4YWIsIDB4MzQsIDB4ZjksIDB4NGEsIDB4YzYsIDB4MjMsCisgIDB4ZjgsIDB4MzcsIDB4MzcsIDB4MWYsIDB4ZTEsIDB4NmQsIDB4MzIsIDB4ZjAsIDB4ZGMsIDB4NzUsIDB4ZDYsIDB4OTcsCisgIDB4MGEsIDB4NmEsIDB4YzgsIDB4MDYsIDB4ZjIsIDB4MWMsIDB4NjYsIDB4NjEsIDB4YmQsIDB4OTAsIDB4ZmYsIDB4YWUsCisgIDB4MzksIDB4MjQsIDB4OGUsIDB4NDEsIDB4M2YsIDB4YTQsIDB4OGYsIDB4ODYsIDB4YjQsIDB4NTksIDB4ZDcsIDB4NDEsCisgIDB4YzUsIDB4YWIsIDB4ZmIsIDB4NjQsIDB4YzIsIDB4ZmEsIDB4ZmYsIDB4OWEsIDB4YWQsIDB4MjcsIDB4MDQsIDB4ZGMsCisgIDB4NDgsIDB4MWYsIDB4MzYsIDB4MDcsIDB4MTcsIDB4NTQsIDB4YWIsIDB4ZjcsIDB4NjQsIDB4ZTQsIDB4NDksIDB4ZDAsCisgIDB4N2EsIDB4MGQsIDB4ZmEsIDB4YWUsIDB4NDksIDB4NTAsIDB4NTYsIDB4ZWIsIDB4NjksIDB4ZDYsIDB4YWEsIDB4YzMsCisgIDB4NDMsIDB4OWEsIDB4YTMsIDB4YWMsIDB4YzgsIDB4NDAsIDB4YjEsIDB4OWUsIDB4ZjEsIDB4NGIsIDB4MzcsIDB4NzEsCisgIDB4NDAsIDB4MWEsIDB4OTgsIDB4MjksIDB4NzMsIDB4MjAsIDB4ZDIsIDB4ZjcsIDB4MWQsIDB4NmEsIDB4ZGUsIDB4M2MsCisgIDB4MWMsIDB4ZWQsIDB4NjIsIDB4MjcsIDB4MGUsIDB4MjcsIDB4YTAsIDB4ZWMsIDB4NzQsIDB4MmIsIDB4YWMsIDB4MDUsCisgIDB4MjIsIDB4YjYsIDB4OWMsIDB4OTksIDB4YWIsIDB4ODUsIDB4NDQsIDB4MzksIDB4MWYsIDB4NGIsIDB4M2YsIDB4MTksCisgIDB4ODIsIDB4N2EsIDB4NWEsIDB4NjcsIDB4NGUsIDB4YWQsIDB4MzYsIDB4YWYsIDB4NzMsIDB4YWIsIDB4YjAsIDB4NjMsCisgIDB4YjEsIDB4NjYsIDB4ODQsIDB4ZjMsIDB4MTgsIDB4MGQsIDB4MmYsIDB4ODUsIDB4ZTQsIDB4MmYsIDB4M2EsIDB4MzcsCisgIDB4YTYsIDB4YjcsIDB4YWQsIDB4MjMsIDB4OGMsIDB4Y2YsIDB4ZDQsIDB4YjIsIDB4NWEsIDB4NWQsIDB4NWQsIDB4MTksCisgIDB4NWEsIDB4NGEsIDB4ZWUsIDB4ZmIsIDB4ZTgsIDB4YTgsIDB4YWYsIDB4OTMsIDB4OWQsIDB4OGYsIDB4MzAsIDB4ZjksCisgIDB4M2EsIDB4NjcsIDB4NjYsIDB4NDIsIDB4YzYsIDB4ZDMsIDB4NzUsIDB4NWUsIDB4MWUsIDB4MWQsIDB4OGUsIDB4YTcsCisgIDB4MjgsIDB4NzMsIDB4NmEsIDB4OWIsIDB4NGIsIDB4NDUsIDB4NDgsIDB4MGEsIDB4NjgsIDB4NTIsIDB4ZjAsIDB4MjUsCisgIDB4MTQsIDB4ZDgsIDB4MTEsIDB4ZGMsIDB4MTAsIDB4ZWYsIDB4ZGIsIDB4ZGEsIDB4NTksIDB4ZWIsIDB4MTIsIDB4NDksCisgIDB4ZDYsIDB4MjgsIDB4MzMsIDB4NzYsIDB4YjMsIDB4YWQsIDB4MjIsIDB4NDksIDB4NmIsIDB4M2EsIDB4NmMsIDB4OWQsCisgIDB4MzAsIDB4NTIsIDB4ZjcsIDB4ZDcsIDB4ZTksIDB4OWQsIDB4ZDUsIDB4NzIsIDB4NDMsIDB4Y2YsIDB4M2EsIDB4YjIsCisgIDB4MGYsIDB4YWMsIDB4MTMsIDB4MTYsIDB4M2IsIDB4ZDYsIDB4NDgsIDB4ODAsIDB4YTQsIDB4NGYsIDB4NDcsIDB4Y2MsCisgIDB4MWEsIDB4MTYsIDB4MmMsIDB4ZTcsIDB4MzQsIDB4OWYsIDB4MjMsIDB4NTUsIDB4MzQsIDB4NDYsIDB4MDksIDB4YzAsCisgIDB4N2QsIDB4OTYsIDB4ZWMsIDB4NjYsIDB4MjgsIDB4ZTUsIDB4ZWIsIDB4YmMsIDB4YWMsIDB4ZjYsIDB4N2IsIDB4ZjUsCisgIDB4ZTIsIDB4MTMsIDB4NmEsIDB4NWIsIDB4ZDQsIDB4NDUsIDB4NDgsIDB4MDksIDB4YjcsIDB4ODYsIDB4NzIsIDB4YTIsCisgIDB4OGIsIDB4ZmIsIDB4YTYsIDB4MmEsIDB4M2IsIDB4Y2IsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4YjUsIDB4NTYsIDB4NmQsCisgIDB4YWUsIDB4NGMsIDB4YTcsIDB4MzMsIDB4N2YsIDB4ZDEsIDB4MjIsIDB4ZDUsIDB4NWUsIDB4YTEsIDB4ZTAsIDB4MDksCisgIDB4YjgsIDB4MmIsIDB4YmYsIDB4YTYsIDB4N2UsIDB4N2MsIDB4M2YsIDB4M2MsIDB4NWMsIDB4OTUsIDB4NmQsIDB4ZjAsCisgIDB4ZWQsIDB4NjIsIDB4ZjgsIDB4MzUsIDB4OWEsIDB4ZmMsIDB4NmIsIDB4Y2YsIDB4NWQsIDB4YmMsIDB4ZTUsIDB4NTEsCisgIDB4ZmYsIDB4YWIsIDB4ZmQsIDB4ZGUsIDB4MWEsIDB4YjAsIDB4NzQsIDB4NDgsIDB4NjEsIDB4NTIsIDB4YWUsIDB4MGEsCisgIDB4MmIsIDB4MjksIDB4MDksIDB4NGYsIDB4YmIsIDB4NzYsIDB4MTQsIDB4YzQsIDB4Y2QsIDB4YjMsIDB4ZDksIDB4YjYsCisgIDB4Y2UsIDB4YjcsIDB4ODUsIDB4MGIsIDB4YmIsIDB4ZDIsIDB4NzksIDB4MTQsIDB4ZWEsIDB4YmYsIDB4MDQsIDB4MmUsCisgIDB4NmMsIDB4MzYsIDB4Y2MsIDB4YWYsIDB4ODYsIDB4YTgsIDB4OTQsIDB4YzEsIDB4NTUsIDB4MTEsIDB4MzksIDB4MDQsCisgIDB4MTMsIDB4NmMsIDB4NDcsIDB4MTAsIDB4YjIsIDB4MjEsIDB4MzksIDB4NjUsIDB4MzYsIDB4ZWIsIDB4M2EsIDB4YWYsCisgIDB4MTUsIDB4NTUsIDB4NWQsIDB4YjgsIDB4YWIsIDB4YWIsIDB4NzYsIDB4NDYsIDB4OTcsIDB4NzQsIDB4OWYsIDB4YWYsCisgIDB4M2IsIDB4ZjYsIDB4YmEsIDB4YTMsIDB4ZmMsIDB4ZTIsIDB4ZGEsIDB4MTIsIDB4NzEsIDB4NTEsIDB4YTQsIDB4YTQsCisgIDB4NDUsIDB4NWEsIDB4MTQsIDB4ZmIsIDB4ODAsIDB4ODEsIDB4MGQsIDB4ZTQsIDB4NGMsIDB4OTcsIDB4OTAsIDB4MjMsCisgIDB4ZmIsIDB4MTMsIDB4MTYsIDB4ZTIsIDB4NDUsIDB4ODIsIDB4MWIsIDB4ODAsIDB4ZWUsIDB4ZmUsIDB4NTcsIDB4NTIsCisgIDB4NjgsIDB4NjksIDB4ZDQsIDB4MTUsIDB4MmMsIDB4ZjYsIDB4NjksIDB4MTMsIDB4Y2QsIDB4YmEsIDB4OTgsIDB4YzgsCisgIDB4NmQsIDB4YWIsIDB4ZTUsIDB4YzgsIDB4YWUsIDB4YTMsIDB4NTMsIDB4NTgsIDB4MTcsIDB4MzUsIDB4MGUsIDB4ZTAsCisgIDB4ZmEsIDB4MzgsIDB4M2YsIDB4MTQsIDB4NGEsIDB4ZWUsIDB4MjcsIDB4N2QsIDB4NWIsIDB4Y2MsIDB4ZjcsIDB4YWUsCisgIDB4YTgsIDB4MGEsIDB4YmYsIDB4NjUsIDB4ZGEsIDB4MmYsIDB4MzAsIDB4ZTQsIDB4NmYsIDB4NDgsIDB4NjYsIDB4OTcsCisgIDB4YWIsIDB4YzksIDB4NjIsIDB4ZjYsIDB4MmMsIDB4N2EsIDB4NDEsIDB4N2YsIDB4N2MsIDB4ZGUsIDB4ZTEsIDB4MDUsCisgIDB4OTQsIDB4NjAsIDB4OGIsIDB4MWEsIDB4ZTYsIDB4NmEsIDB4OTcsIDB4ZTEsIDB4ZWYsIDB4NGYsIDB4ZjYsIDB4NTgsCisgIDB4NGEsIDB4ZGYsIDB4NTMsIDB4OWIsIDB4ZDMsIDB4MTQsIDB4MmMsIDB4MTUsIDB4YjMsIDB4ZjQsIDB4M2EsIDB4YWQsCisgIDB4NGEsIDB4NGQsIDB4NDksIDB4YzEsIDB4MGIsIDB4NmIsIDB4NGIsIDB4YTQsIDB4ZjEsIDB4MGMsIDB4ZWQsIDB4ZWUsCisgIDB4N2QsIDB4MTYsIDB4NGQsIDB4ZDIsIDB4MmEsIDB4N2EsIDB4N2QsIDB4ZjQsIDB4NGMsIDB4YWEsIDB4MmMsIDB4OTYsCisgIDB4YWIsIDB4ODUsIDB4MmYsIDB4MzIsIDB4MGUsIDB4ZGEsIDB4ZTQsIDB4ODgsIDB4ZmIsIDB4ZDcsIDB4NjcsIDB4ZWEsCisgIDB4YjcsIDB4ZDUsIDB4NjQsIDB4ZGUsIDB4YWEsIDB4NzYsIDB4NzQsIDB4OWIsIDB4M2MsIDB4MGMsIDB4OWEsIDB4M2UsCisgIDB4YjUsIDB4MmIsIDB4ZjMsIDB4ZmYsIDB4MDUsIDB4NjQsIDB4ZGYsIDB4NGUsIDB4ZTgsIDB4YjgsIDB4MzUsIDB4ZjMsCisgIDB4M2YsIDB4YjYsIDB4NmYsIDB4MTcsIDB4MzQsIDB4N2UsIDB4ZWEsIDB4NDEsIDB4NjksIDB4MTUsIDB4ZGEsIDB4MmUsCisgIDB4MWIsIDB4YWMsIDB4ZGYsIDB4MmMsIDB4MDgsIDB4YmMsIDB4ZjIsIDB4ZTMsIDB4YzMsIDB4NzMsIDB4NDEsIDB4ZDUsCisgIDB4OGUsIDB4MWIsIDB4ZDksIDB4ZWEsIDB4OGYsIDB4MzEsIDB4MDQsIDB4N2YsIDB4NWEsIDB4ZjcsIDB4MzIsIDB4MDgsCisgIDB4ZDYsIDB4ZDMsIDB4NjgsIDB4NzAsIDB4ODYsIDB4ZjMsIDB4MjQsIDB4YmIsIDB4NWUsIDB4NTcsIDB4NDAsIDB4MzMsCisgIDB4M2EsIDB4YzEsIDB4YjMsIDB4MGQsIDB4YzQsIDB4ZDgsIDB4MjksIDB4ZGUsIDB4MDgsIDB4NTIsIDB4ODAsIDB4YzUsCisgIDB4MTYsIDB4ZTAsIDB4YWQsIDB4OTAsIDB4NGUsIDB4YjksIDB4M2MsIDB4N2IsIDB4OGIsIDB4YTIsIDB4NzYsIDB4ZTUsCisgIDB4NDksIDB4YTAsIDB4YWQsIDB4YWUsIDB4NmIsIDB4YjEsIDB4OTIsIDB4MTIsIDB4MWIsIDB4MDcsIDB4NGIsIDB4ODYsCisgIDB4M2IsIDB4NDUsIDB4YmIsIDB4YTMsIDB4ZjcsIDB4ODMsIDB4YjAsIDB4YTIsIDB4OWMsIDB4NTIsIDB4YmQsIDB4YTMsCisgIDB4NzQsIDB4NWMsIDB4MzEsIDB4NmMsIDB4NmQsIDB4OTUsIDB4NjksIDB4ZDUsIDB4ZWMsIDB4MGQsIDB4YjcsIDB4MmQsCisgIDB4NDAsIDB4YjMsIDB4MzksIDB4MDcsIDB4NWEsIDB4MGEsIDB4MzksIDB4NDIsIDB4ZjYsIDB4NDgsIDB4MTcsIDB4NWYsCisgIDB4YzcsIDB4MjgsIDB4MDYsIDB4MTIsIDB4NDgsIDB4NWUsIDB4OGEsIDB4NmEsIDB4YzQsIDB4NDIsIDB4OTMsIDB4YjUsCisgIDB4NmUsIDB4ZTAsIDB4ZjIsIDB4ZGIsIDB4ODAsIDB4ZmIsIDB4ZDgsIDB4MGMsIDB4MDksIDB4YmQsIDB4MTgsIDB4MDgsCisgIDB4NDYsIDB4NTIsIDB4ZTQsIDB4MmQsIDB4ZjgsIDB4NzUsIDB4YmIsIDB4ZjIsIDB4MWQsIDB4MzcsIDB4ZTMsIDB4MzYsCisgIDB4MzAsIDB4MDIsIDB4MzYsIDB4MzIsIDB4MDUsIDB4NDMsIDB4M2UsIDB4YmEsIDB4MDcsIDB4NmMsIDB4MGEsIDB4MjYsCisgIDB4NWUsIDB4ZDMsIDB4MDcsIDB4ZDAsIDB4NTAsIDB4MzQsIDB4ZGEsIDB4NWQsIDB4ZGYsIDB4ZDgsIDB4YzEsIDB4M2IsCisgIDB4NDcsIDB4YTMsIDB4NjAsIDB4NTQsIDB4MjcsIDB4NjYsIDB4ZWQsIDB4NzQsIDB4MGQsIDB4ODksIDB4MDksIDB4YjQsCisgIDB4YjcsIDB4NWYsIDB4OWQsIDB4OWMsIDB4MWUsIDB4NmYsIDB4NDUsIDB4YWYsIDB4MTIsIDB4MjQsIDB4ZGEsIDB4ZDcsCisgIDB4ZmIsIDB4MGQsIDB4MTEsIDB4ZmIsIDB4ODMsIDB4ZmMsIDB4YzQsIDB4OTYsIDB4NDgsIDB4NmYsIDB4NmQsIDB4NWQsCisgIDB4NjEsIDB4NzYsIDB4ZjUsIDB4MzEsIDB4YzEsIDB4MGMsIDB4OTUsIDB4NTUsIDB4ODMsIDB4YzEsIDB4MjksIDB4YzksCisgIDB4MjcsIDB4MzksIDB4MTAsIDB4NjYsIDB4YzYsIDB4OTEsIDB4MGUsIDB4M2IsIDB4MmYsIDB4MjAsIDB4MDksIDB4ZWQsCisgIDB4MzAsIDB4ZGYsIDB4MDMsIDB4NGMsIDB4YWMsIDB4YTYsIDB4YzcsIDB4OGIsIDB4Y2UsIDB4ZTEsIDB4OTEsIDB4NWEsCisgIDB4ZTAsIDB4OWQsIDB4ZmIsIDB4YWUsIDB4NDgsIDB4YWEsIDB4YjAsIDB4YzgsIDB4N2IsIDB4YjksIDB4YWUsIDB4OTgsCisgIDB4NWYsIDB4OTksIDB4ZmUsIDB4MmMsIDB4YjAsIDB4NTMsIDB4YzAsIDB4OTMsIDB4MTcsIDB4ZjksIDB4Y2MsIDB4ZDEsCisgIDB4ZWEsIDB4MDksIDB4ZjcsIDB4N2YsIDB4YTMsIDB4NDAsIDB4ZjUsIDB4MTAsIDB4YzcsIDB4ZjgsIDB4MTUsIDB4MWYsCisgIDB4MWUsIDB4OWQsIDB4NTksIDB4OTUsIDB4ZTcsIDB4NDIsIDB4MjIsIDB4YzgsIDB4MDcsIDB4N2UsIDB4MTgsIDB4ZjksCisgIDB4OTcsIDB4NjMsIDB4ZGUsIDB4NWYsIDB4NzksIDB4NWMsIDB4MmIsIDB4MjMsIDB4MDcsIDB4NDMsIDB4ZTIsIDB4NWEsCisgIDB4MTUsIDB4MWQsIDB4NzIsIDB4NjEsIDB4NWYsIDB4OGIsIDB4NDQsIDB4MGMsIDB4NDIsIDB4MDcsIDB4M2MsIDB4OGQsCisgIDB4MTYsIDB4Y2EsIDB4NDIsIDB4MDAsIDB4NjEsIDB4MDcsIDB4OTksIDB4ODEsIDB4N2YsIDB4YjQsIDB4YjgsIDB4MWUsCisgIDB4NjcsIDB4Y2QsIDB4YjQsIDB4MGEsIDB4MzgsIDB4ZGMsIDB4MjYsIDB4YWQsIDB4ODAsIDB4YjYsIDB4ODIsIDB4OTAsCisgIDB4ODIsIDB4OTEsIDB4OTEsIDB4YTksIDB4YmMsIDB4YjMsIDB4YmYsIDB4MWIsIDB4OTYsIDB4ZmUsIDB4YzgsIDB4YjQsCisgIDB4YjAsIDB4MTUsIDB4ZWEsIDB4NjEsIDB4ZmMsIDB4N2UsIDB4YzksIDB4MTMsIDB4N2YsIDB4NjcsIDB4ZDEsIDB4ZmMsCisgIDB4ZmIsIDB4MmEsIDB4YmIsIDB4MWQsIDB4NmEsIDB4NDUsIDB4NGEsIDB4NjUsIDB4NmEsIDB4MmQsIDB4YmIsIDB4NzcsCisgIDB4ZGYsIDB4NzcsIDB4MmUsIDB4ZDQsIDB4MDEsIDB4OTQsIDB4ODMsIDB4MDAsIDB4ZmUsIDB4ZGEsIDB4YTUsIDB4MTksCisgIDB4ZTMsIDB4ODAsIDB4YjQsIDB4NmMsIDB4ZjAsIDB4NTgsIDB4MjEsIDB4OGEsIDB4ZDAsIDB4ODIsIDB4NjAsIDB4YzQsCisgIDB4MzUsIDB4YzksIDB4Y2UsIDB4OTQsIDB4MjEsIDB4MTYsIDB4N2MsIDB4NjcsIDB4ZWQsIDB4NTksIDB4OGQsIDB4NGMsCisgIDB4NmQsIDB4YmEsIDB4MzcsIDB4ZjIsIDB4OGMsIDB4N2QsIDB4MmQsIDB4NmEsIDB4ZGYsIDB4NTIsIDB4MTMsIDB4OTcsCisgIDB4NmUsIDB4YWMsIDB4MzQsIDB4MDYsIDB4NmMsIDB4NzAsIDB4MGQsIDB4NjEsIDB4YzQsIDB4NDIsIDB4ODEsIDB4YzUsCisgIDB4NjcsIDB4YmQsIDB4MmIsIDB4YmMsIDB4MjksIDB4NjQsIDB4NTcsIDB4NGMsIDB4NGMsIDB4ZGEsIDB4MjYsIDB4NWYsCisgIDB4YmQsIDB4OTQsIDB4OTQsIDB4YjIsIDB4YzgsIDB4MjgsIDB4ZDIsIDB4NGIsIDB4YzcsIDB4NDgsIDB4ZTUsIDB4M2EsCisgIDB4MTgsIDB4MzUsIDB4M2EsIDB4MjcsIDB4NzcsIDB4MTIsIDB4MzYsIDB4MTAsIDB4ZmEsIDB4YWQsIDB4N2QsIDB4MzksCisgIDB4OWQsIDB4ZTcsIDB4NTIsIDB4OWYsIDB4ZTMsIDB4M2UsIDB4ZjQsIDB4OTYsIDB4ZmQsIDB4MzcsIDB4MzksIDB4ZjMsCisgIDB4ZjksIDB4NDAsIDB4ZDMsIDB4OWQsIDB4M2UsIDB4ZWMsIDB4MDAsIDB4NjIsIDB4ODUsIDB4NGMsIDB4OWMsIDB4NDYsCisgIDB4ZWEsIDB4ODQsIDB4YzQsIDB4MTUsIDB4MTgsIDB4MTMsIDB4NjcsIDB4NDEsIDB4MWIsIDB4MDIsIDB4YzgsIDB4NzQsCisgIDB4YmMsIDB4NGYsIDB4N2EsIDB4ZTAsIDB4NzUsIDB4ZjIsIDB4ZWYsIDB4MGMsIDB4MDMsIDB4NTYsIDB4MDQsIDB4YTcsCisgIDB4YWQsIDB4OGYsIDB4NjgsIDB4ZGIsIDB4ZTYsIDB4NjUsIDB4MmEsIDB4ZWIsIDB4ZTIsIDB4YjAsIDB4NzQsIDB4YzEsCisgIDB4NjUsIDB4MjIsIDB4NmEsIDB4ZTMsIDB4NWQsIDB4MmMsIDB4NTksIDB4ZDYsIDB4MTEsIDB4MjUsIDB4MzgsIDB4MDQsCisgIDB4OTAsIDB4NWQsIDB4OGIsIDB4ODMsIDB4MDEsIDB4ZGYsIDB4OGEsIDB4NmUsIDB4MmYsIDB4YmIsIDB4ZjAsIDB4NGIsCisgIDB4OWEsIDB4OTIsIDB4MTMsIDB4OGMsIDB4MzIsIDB4ODAsIDB4MDcsIDB4ZWEsIDB4NWQsIDB4YzUsIDB4ODIsIDB4NDMsCisgIDB4NDYsIDB4MWIsIDB4NGEsIDB4MzYsIDB4YWQsIDB4YjUsIDB4ZDYsIDB4NmIsIDB4OWEsIDB4NWMsIDB4ZTMsIDB4ZDMsCisgIDB4MzAsIDB4NzUsIDB4NTUsIDB4OWMsIDB4NzksIDB4OWUsIDB4M2YsIDB4ZTYsIDB4ODAsIDB4YTQsIDB4YWIsIDB4ZjUsCisgIDB4MDgsIDB4MjMsIDB4ZTAsIDB4MDUsIDB4ODgsIDB4OTMsIDB4NzQsIDB4ZDQsIDB4NjgsIDB4NjcsIDB4YzIsIDB4NzIsCisgIDB4NWEsIDB4MjMsIDB4ZjMsIDB4ZjgsIDB4ZDYsIDB4ODgsIDB4OTAsIDB4MWIsIDB4NzksIDB4NDcsIDB4OWEsIDB4YWIsCisgIDB4MjcsIDB4MTMsIDB4MTcsIDB4MzMsIDB4YTQsIDB4YmMsIDB4MjksIDB4YWQsIDB4MGYsIDB4MmUsIDB4MjUsIDB4Y2IsCisgIDB4YzEsIDB4NDIsIDB4MGMsIDB4MTYsIDB4M2MsIDB4OWYsIDB4ZDcsIDB4N2EsIDB4MTUsIDB4OTQsIDB4MzAsIDB4NTgsCisgIDB4M2IsIDB4NTgsIDB4OTQsIDB4NGIsIDB4YjMsIDB4ZjAsIDB4NjksIDB4NmQsIDB4OTIsIDB4ZGIsIDB4ZTEsIDB4ZDMsCisgIDB4YzAsIDB4MjQsIDB4OGQsIDB4N2MsIDB4MmQsIDB4MjIsIDB4ZDIsIDB4YjgsIDB4NDgsIDB4MDIsIDB4NDYsIDB4MzUsCisgIDB4MjksIDB4YWQsIDB4YTgsIDB4YTUsIDB4ZGUsIDB4ZDYsIDB4YzgsIDB4ZTEsIDB4MWMsIDB4MjUsIDB4NTcsIDB4MDIsCisgIDB4ZjAsIDB4YzYsIDB4MzUsIDB4MTUsIDB4OGIsIDB4OTAsIDB4YzEsIDB4NzcsIDB4MTMsIDB4YmYsIDB4N2YsIDB4M2YsCisgIDB4MmEsIDB4MTMsIDB4MjksIDB4ZTEsIDB4NTMsIDB4OTYsIDB4NzMsIDB4NjQsIDB4MGIsIDB4ZDYsIDB4NGIsIDB4MTUsCisgIDB4MGQsIDB4YmYsIDB4ZDEsIDB4M2EsIDB4NjUsIDB4NTcsIDB4ZTksIDB4MzUsIDB4ZTMsIDB4ZWQsIDB4ZjAsIDB4ZGYsCisgIDB4YWUsIDB4ZGMsIDB4NjgsIDB4OTcsIDB4MTQsIDB4YWQsIDB4ZjUsIDB4OWUsIDB4ZmMsIDB4OTMsIDB4NWUsIDB4ZWQsCisgIDB4ODAsIDB4NDMsIDB4NDUsIDB4NjEsIDB4NDcsIDB4YTIsIDB4N2QsIDB4NDYsIDB4NDYsIDB4NjAsIDB4ZGUsIDB4Y2EsCisgIDB4ZGMsIDB4YjYsIDB4OTcsIDB4NDEsIDB4ZWQsIDB4YTYsIDB4MTgsIDB4ZWEsIDB4NzksIDB4ZTIsIDB4ODEsIDB4ZmUsCisgIDB4YjUsIDB4MGEsIDB4N2QsIDB4YmUsIDB4NTEsIDB4MzksIDB4MmMsIDB4NWEsIDB4NGUsIDB4MjAsIDB4YWIsIDB4NzAsCisgIDB4NjcsIDB4ZjUsIDB4YjMsIDB4NzEsIDB4NjMsIDB4MGIsIDB4ZDUsIDB4YWMsIDB4ZWEsIDB4MWQsIDB4YjksIDB4MzUsCisgIDB4MzAsIDB4YWMsIDB4ZGEsIDB4ZGUsIDB4YzgsIDB4YmIsIDB4NzIsIDB4ZmUsIDB4NjgsIDB4MWYsIDB4MzEsIDB4OTMsCisgIDB4NjIsIDB4ZDgsIDB4ODcsIDB4NTEsIDB4NzQsIDB4YjYsIDB4MGMsIDB4MDQsIDB4ZjgsIDB4MjYsIDB4NDksIDB4MGIsCisgIDB4ZWYsIDB4ZTUsIDB4MmUsIDB4ZGQsIDB4MjUsIDB4MTAsIDB4YmIsIDB4YjksIDB4M2QsIDB4NTgsIDB4OTQsIDB4OGEsCisgIDB4YWMsIDB4OTcsIDB4N2YsIDB4ZDAsIDB4MTksIDB4OTQsIDB4NjEsIDB4MGIsIDB4NTcsIDB4YmYsIDB4ZmEsIDB4Y2MsCisgIDB4YzQsIDB4MWIsIDB4NGEsIDB4MjMsIDB4MjEsIDB4N2IsIDB4OGMsIDB4ZWMsIDB4YmUsIDB4MTYsIDB4MzMsIDB4OGMsCisgIDB4NWUsIDB4MjksIDB4OTEsIDB4ODAsIDB4YzgsIDB4OGMsIDB4OGYsIDB4MjUsIDB4NDAsIDB4ZmMsIDB4NDIsIDB4ODMsCisgIDB4ZjIsIDB4NTAsIDB4ZjMsIDB4YTksIDB4YzEsIDB4OGQsIDB4NGQsIDB4YjYsIDB4YzMsIDB4YTYsIDB4YjIsIDB4N2IsCisgIDB4MGYsIDB4YmEsIDB4NWMsIDB4ZjYsIDB4ZTIsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MGUsIDB4MDgsIDB4NzcsIDB4MTUsCisgIDB4ZWUsIDB4MTMsIDB4YjQsIDB4YmYsIDB4ZTUsIDB4MmEsIDB4NmYsIDB4N2IsIDB4ZTcsIDB4M2UsIDB4MGUsIDB4OWUsCisgIDB4MGUsIDB4OTIsIDB4NWMsIDB4NjQsIDB4MmUsIDB4MDcsIDB4MDMsIDB4NzAsIDB4YTksIDB4ZjQsIDB4MmUsIDB4MmEsCisgIDB4MjAsIDB4ZjQsIDB4ZjUsIDB4MTMsIDB4NzAsIDB4MTcsIDB4YTgsIDB4NGUsIDB4ZDYsIDB4MTQsIDB4Y2MsIDB4NDYsCisgIDB4NzMsIDB4ZmYsIDB4NTgsIDB4ZTUsIDB4YzgsIDB4NzUsIDB4ZmUsIDB4NGUsIDB4ZjIsIDB4MzMsIDB4NjcsIDB4ZjksCisgIDB4OGEsIDB4ZTEsIDB4MTUsIDB4ZjIsIDB4ZDMsIDB4YTYsIDB4NzcsIDB4MmUsIDB4OTEsIDB4ZjIsIDB4OTMsIDB4MjUsCisgIDB4N2IsIDB4ZmMsIDB4ZDgsIDB4NDUsIDB4ZDcsIDB4NDEsIDB4MGMsIDB4ZWQsIDB4MzIsIDB4MjQsIDB4ZjcsIDB4YTMsCisgIDB4YmYsIDB4ZmQsIDB4NmQsIDB4MTAsIDB4ZmQsIDB4YWQsIDB4NDcsIDB4ZmYsIDB4MjMsIDB4M2IsIDB4ZjIsIDB4NmYsCisgIDB4MzQsIDB4OWYsIDB4N2YsIDB4MTMsIDB4OWEsIDB4ZTEsIDB4YmYsIDB4ZGQsIDB4OTEsIDB4NTIsIDB4NDIsIDB4YWQsCisgIDB4YzEsIDB4NzIsIDB4Y2UsIDB4ZDksIDB4NzIsIDB4OWUsIDB4NDIsIDB4YjYsIDB4MjMsIDB4YzMsIDB4NTUsIDB4YTIsCisgIDB4OTYsIDB4Y2EsIDB4OWQsIDB4Y2QsIDB4MDYsIDB4YmUsIDB4NjQsIDB4ODgsIDB4YjksIDB4YTksIDB4MTIsIDB4YjAsCisgIDB4MDUsIDB4MmQsIDB4ZDgsIDB4NmEsIDB4OTEsIDB4MDksIDB4ODgsIDB4NWEsIDB4OTcsIDB4MWQsIDB4NjIsIDB4ZGQsCisgIDB4M2EsIDB4OGEsIDB4ZTMsIDB4YTgsIDB4ZmYsIDB4NDcsIDB4MGIsIDB4ODUsIDB4NTQsIDB4ODYsIDB4NzUsIDB4MGMsCisgIDB4ZTMsIDB4YmUsIDB4NzgsIDB4Y2QsIDB4ZTQsIDB4M2EsIDB4MjgsIDB4YTAsIDB4MWQsIDB4NzcsIDB4ZDcsIDB4ODEsCisgIDB4MTAsIDB4NTMsIDB4ZjEsIDB4MmMsIDB4ODMsIDB4Y2YsIDB4MDYsIDB4ZjQsIDB4ZjksIDB4ZWEsIDB4MDIsIDB4ZDMsCisgIDB4MjMsIDB4OWYsIDB4ZWYsIDB4ZjcsIDB4Y2IsIDB4OWIsIDB4MDcsIDB4MWMsIDB4ZDgsIDB4ZGEsIDB4MjUsIDB4NTcsCisgIDB4YjgsIDB4OGQsIDB4N2EsIDB4ZDksIDB4NDEsIDB4ZjksIDB4ZGQsIDB4NTYsIDB4NWYsIDB4OWUsIDB4MDIsIDB4YzYsCisgIDB4OWYsIDB4M2EsIDB4MWMsIDB4NGIsIDB4MDksIDB4MTUsIDB4MGIsIDB4ZjUsIDB4YjAsIDB4M2YsIDB4ZWMsIDB4ZTMsCisgIDB4YzAsIDB4MDgsIDB4NDksIDB4NTYsIDB4ZDcsIDB4NTQsIDB4NDEsIDB4ZjAsIDB4OGMsIDB4MjQsIDB4NTIsIDB4MDUsCisgIDB4YTEsIDB4YjMsIDB4ODIsIDB4YmQsIDB4ZDUsIDB4ODAsIDB4OTYsIDB4ZTQsIDB4MTcsIDB4YWIsIDB4MTEsIDB4ZWYsCisgIDB4M2MsIDB4OGIsIDB4NzAsIDB4MDMsIDB4ZDcsIDB4MDYsIDB4YTMsIDB4MDYsIDB4NTAsIDB4OWIsIDB4MGUsIDB4YzUsCisgIDB4OTgsIDB4YjMsIDB4ZWMsIDB4ZGQsIDB4YjQsIDB4MGEsIDB4ODksIDB4ZjUsIDB4OTksIDB4OWUsIDB4ZGIsIDB4ZDMsCisgIDB4OTAsIDB4ZTEsIDB4NTYsIDB4YzksIDB4ZWUsIDB4MGEsIDB4MWMsIDB4MWMsIDB4NjUsIDB4NGEsIDB4MDYsIDB4ZTcsCisgIDB4NDMsIDB4ODcsIDB4MmEsIDB4ZjIsIDB4ZjksIDB4NDMsIDB4ZGMsIDB4MGQsIDB4ZDAsIDB4ZDQsIDB4NzIsIDB4ZjksCisgIDB4ODYsIDB4ZmIsIDB4NGMsIDB4NTUsIDB4YzksIDB4MzgsIDB4MWYsIDB4MDgsIDB4MjEsIDB4YTksIDB4NTksIDB4YWEsCisgIDB4NDEsIDB4ZGEsIDB4NDAsIDB4NDcsIDB4MzQsIDB4YTYsIDB4NjUsIDB4YjQsIDB4NzIsIDB4OWYsIDB4NWUsIDB4NDYsCisgIDB4YmQsIDB4YjUsIDB4YmEsIDB4YmUsIDB4ZDcsIDB4N2MsIDB4ZTEsIDB4OTQsIDB4MzMsIDB4YjAsIDB4NzUsIDB4ZDUsCisgIDB4ODUsIDB4ODMsIDB4NjMsIDB4MWEsIDB4NjcsIDB4OGUsIDB4ZDYsIDB4NjgsIDB4OGUsIDB4ZTQsIDB4NjAsIDB4YWQsCisgIDB4MWEsIDB4ZTksIDB4YjgsIDB4NDUsIDB4NDMsIDB4MDUsIDB4YjUsIDB4YzYsIDB4MmYsIDB4MjcsIDB4MGUsIDB4NGQsCisgIDB4YTEsIDB4YTMsIDB4ZDIsIDB4OWQsIDB4YzksIDB4ZDUsIDB4NWEsIDB4ZDcsIDB4OTUsIDB4MDYsIDB4MzAsIDB4NjMsCisgIDB4OTUsIDB4YjMsIDB4Y2EsIDB4NmUsIDB4OTUsIDB4MjQsIDB4NDksIDB4OGQsIDB4YjksIDB4NGQsIDB4M2IsIDB4MzQsCisgIDB4ZmYsIDB4NjEsIDB4MDcsIDB4ZTUsIDB4OTYsIDB4N2EsIDB4MWMsIDB4MDQsIDB4YWQsIDB4YjgsIDB4MjYsIDB4OGIsCisgIDB4M2EsIDB4M2MsIDB4ODYsIDB4NWMsIDB4NWUsIDB4N2YsIDB4MGEsIDB4OTcsIDB4MzEsIDB4YmQsIDB4YjcsIDB4Y2EsCisgIDB4NjYsIDB4NDYsIDB4OTYsIDB4ZWIsIDB4ZDIsIDB4YWUsIDB4ZDcsIDB4NGEsIDB4MzYsIDB4N2YsIDB4MTcsIDB4NWYsCisgIDB4NTQsIDB4YTYsIDB4MjYsIDB4YWIsIDB4ZmMsIDB4ZWQsIDB4YjQsIDB4MGIsIDB4ZmMsIDB4MzcsIDB4YTUsIDB4YWIsCisgIDB4MWEsIDB4MGYsIDB4ODYsIDB4OWIsIDB4ZDYsIDB4Y2EsIDB4ZWMsIDB4NmUsIDB4YjksIDB4MTQsIDB4MzMsIDB4NTQsCisgIDB4OTIsIDB4OTIsIDB4MjIsIDB4OGUsIDB4ZWEsIDB4NjMsIDB4ZWMsIDB4ZGQsIDB4ZTQsIDB4OTIsIDB4NzksIDB4ZGYsCisgIDB4ZGIsIDB4ZTcsIDB4YTIsIDB4OTAsIDB4YWEsIDB4MWMsIDB4ZmMsIDB4MjgsIDB4ZGIsIDB4YmEsIDB4MTksIDB4YmMsCisgIDB4MDYsIDB4NWYsIDB4OWYsIDB4YmQsIDB4M2UsIDB4NzYsIDB4MzgsIDB4NDgsIDB4YjksIDB4OTIsIDB4ZjIsIDB4NGYsCisgIDB4M2EsIDB4YTksIDB4NTcsIDB4NDYsIDB4ODgsIDB4NTcsIDB4NWIsIDB4NGUsIDB4ZTIsIDB4YTAsIDB4NGQsIDB4ODIsCisgIDB4MmIsIDB4NTMsIDB4NDQsIDB4NTcsIDB4Y2YsIDB4ZTUsIDB4ZmQsIDB4MmEsIDB4OWQsIDB4NmQsIDB4MjIsIDB4NzEsCisgIDB4ZjQsIDB4ZWQsIDB4OWIsIDB4OTMsIDB4ZWYsIDB4ODcsIDB4NzIsIDB4ZTksIDB4OTYsIDB4MjIsIDB4ZDYsIDB4OTYsCisgIDB4MzksIDB4NjksIDB4NDksIDB4OTcsIDB4ZTIsIDB4OTksIDB4NTksIDB4NzQsIDB4MjQsIDB4MjAsIDB4YWIsIDB4ZDQsCisgIDB4ODQsIDB4ZDQsIDB4NDEsIDB4ODAsIDB4ZWUsIDB4YTcsIDB4OTksIDB4YjgsIDB4Y2IsIDB4YTUsIDB4NDEsIDB4M2EsCisgIDB4M2IsIDB4Y2UsIDB4MzIsIDB4NTIsIDB4ZTEsIDB4YTAsIDB4M2QsIDB4YzAsIDB4YjIsIDB4NzcsIDB4NjEsIDB4M2EsCisgIDB4ZWIsIDB4MzMsIDB4MTEsIDB4MWQsIDB4OWMsIDB4OWYsIDB4MWYsIDB4MWQsIDB4NWMsIDB4MWUsIDB4YjgsIDB4YjEsCisgIDB4ODEsIDB4NjcsIDB4MDAsIDB4YmEsIDB4MGUsIDB4MTcsIDB4MjksIDB4MzYsIDB4OGYsIDB4YjQsIDB4OTIsIDB4NDEsCisgIDB4ZmYsIDB4NGYsIDB4MGMsIDB4ZjgsIDB4NmYsIDB4NmEsIDB4YmYsIDB4ZjMsIDB4OGIsIDB4MzMsIDB4YmUsIDB4MGUsCisgIDB4ZmYsIDB4ZTksIDB4NmYsIDB4MDcsIDB4YmUsIDB4MjYsIDB4MTEsIDB4NGEsIDB4MTUsIDB4YjQsIDB4MmIsIDB4YzMsCisgIDB4ZWMsIDB4NmQsIDB4NzEsIDB4ZmYsIDB4ZWUsIDB4NWQsIDB4ZmYsIDB4MzQsIDB4MDAsIDB4MmMsIDB4MTksIDB4OWEsCisgIDB4ZDEsIDB4M2IsIDB4NWUsIDB4ZDAsIDB4NjIsIDB4ZWEsIDB4MGMsIDB4MTQsIDB4OWIsIDB4MGQsIDB4NGMsIDB4MDAsCisgIDB4ZDIsIDB4NTMsIDB4ZDcsIDB4MGYsIDB4MjQsIDB4ZjcsIDB4M2EsIDB4ZDUsIDB4NjgsIDB4MTcsIDB4NmMsIDB4YjIsCisgIDB4ZTYsIDB4NjQsIDB4NTcsIDB4OTMsIDB4NjksIDB4NTgsIDB4NDEsIDB4NzcsIDB4YjEsIDB4NjcsIDB4ODgsIDB4ZTUsCisgIDB4NmIsIDB4YzYsIDB4MzMsIDB4ZDUsIDB4MjQsIDB4MTcsIDB4NmEsIDB4MmUsIDB4OGYsIDB4NjcsIDB4MTcsIDB4MTMsCisgIDB4MGQsIDB4MjQsIDB4NDAsIDB4YmYsIDB4NWMsIDB4NDgsIDB4YWIsIDB4NDcsIDB4ZGEsIDB4NWIsIDB4NGYsIDB4NWIsCisgIDB4ZGQsIDB4ZGEsIDB4M2IsIDB4ZTIsIDB4YTksIDB4MjYsIDB4MzksIDB4MzcsIDB4NzksIDB4NmMsIDB4NGQsIDB4YzgsCisgIDB4MWYsIDB4NDksIDB4ZjEsIDB4MGQsIDB4MmQsIDB4NjcsIDB4NGQsIDB4MDYsIDB4NGUsIDB4M2YsIDB4NjgsIDB4M2QsCisgIDB4NTQsIDB4MzksIDB4NzIsIDB4NWUsIDB4MzYsIDB4OTUsIDB4ZGEsIDB4YmUsIDB4NjQsIDB4ZDUsIDB4NTMsIDB4YTEsCisgIDB4ODIsIDB4NmEsIDB4NWEsIDB4Y2MsIDB4OWEsIDB4YzYsIDB4YWMsIDB4NGYsIDB4YTEsIDB4OWMsIDB4MDcsIDB4OTIsCisgIDB4YTAsIDB4ZGEsIDB4YmUsIDB4MzEsIDB4ZjMsIDB4ZDIsIDB4ZDIsIDB4YTMsIDB4ZTUsIDB4OGEsIDB4YmQsIDB4MGIsCisgIDB4ZmMsIDB4YWYsIDB4ZWQsIDB4ZGQsIDB4ZDEsIDB4NGUsIDB4YWYsIDB4ZGQsIDB4N2IsIDB4MDAsIDB4MWQsIDB4ZTEsCisgIDB4YzEsIDB4MzEsIDB4NjYsIDB4MzgsIDB4MjEsIDB4ZmIsIDB4Y2IsIDB4M2YsIDB4ZGMsIDB4NDEsIDB4MmQsIDB4NzgsCisgIDB4MTksIDB4NjcsIDB4ODgsIDB4NjEsIDB4NzUsIDB4ZjUsIDB4NjUsIDB4NzgsIDB4ZDYsIDB4ZjIsIDB4YjQsIDB4ODksCisgIDB4YjcsIDB4ZDgsIDB4YWIsIDB4ZTQsIDB4MmMsIDB4NDcsIDB4ZjIsIDB4NWUsIDB4Y2MsIDB4NzcsIDB4MGUsIDB4NzgsCisgIDB4MGQsIDB4N2EsIDB4ZGQsIDB4MTMsIDB4OWMsIDB4Y2QsIDB4MjQsIDB4ZjIsIDB4ZDUsIDB4OTgsIDB4ZTcsIDB4NDcsCisgIDB4MGIsIDB4ZDcsIDB4YWMsIDB4Y2YsIDB4NTIsIDB4NzIsIDB4MzIsIDB4ZTAsIDB4N2UsIDB4YmMsIDB4NTYsIDB4ZGIsCisgIDB4ZDUsIDB4NWMsIDB4Y2MsIDB4YjcsIDB4MDksIDB4ZDksIDB4N2QsIDB4NzMsIDB4NjQsIDB4ZGUsIDB4YjAsIDB4ZDMsCisgIDB4NjcsIDB4NWQsIDB4NTUsIDB4YzgsIDB4MWEsIDB4Y2UsIDB4MjAsIDB4NTEsIDB4NjQsIDB4MjUsIDB4ZGUsIDB4ODgsCisgIDB4ZWIsIDB4NTUsIDB4MjAsIDB4ZjksIDB4NDQsIDB4NTUsIDB4ZDcsIDB4MzcsIDB4NWQsIDB4ODgsIDB4NjEsIDB4MGMsCisgIDB4YTYsIDB4YjMsIDB4ZDYsIDB4MjEsIDB4YTIsIDB4MjAsIDB4NDIsIDB4YzQsIDB4MzksIDB4NTgsIDB4NjEsIDB4YjksCisgIDB4NWUsIDB4NzAsIDB4ZTQsIDB4NjEsIDB4OTIsIDB4MzgsIDB4NDMsIDB4NWIsIDB4M2UsIDB4NjEsIDB4ZjksIDB4YTIsCisgIDB4YjQsIDB4NDcsIDB4ZDMsIDB4YmIsIDB4NzQsIDB4YjYsIDB4NmEsIDB4ODUsIDB4ZWQsIDB4OWEsIDB4YWYsIDB4YTMsCisgIDB4ZWUsIDB4NmUsIDB4NWEsIDB4ODYsIDB4ZDksIDB4MjQsIDB4ZjAsIDB4NDAsIDB4ZjAsIDB4MTMsIDB4YjksIDB4ZjMsCisgIDB4NGYsIDB4YTEsIDB4ZGMsIDB4MDMsIDB4MzYsIDB4NTUsIDB4Y2IsIDB4ZTMsIDB4NzYsIDB4MjUsIDB4ZDQsIDB4NGUsCisgIDB4NzIsIDB4MTgsIDB4NWUsIDB4MWUsIDB4OWUsIDB4YmYsIDB4ZmIsIDB4ZTYsIDB4ZjgsIDB4ZjgsIDB4ZmMsIDB4ZTQsCisgIDB4ZTgsIDB4ZjQsIDB4NTgsIDB4Y2QsIDB4MDAsIDB4ZjcsIDB4YTMsIDB4MzcsIDB4OTcsIDB4ZGYsIDB4OWUsIDB4MWEsCisgIDB4ZGIsIDB4OTMsIDB4MmQsIDB4NTMsIDB4Y2IsIDB4NjcsIDB4YzMsIDB4NzAsIDB4MTQsIDB4NmUsIDB4ZWUsIDB4MzQsCisgIDB4Y2QsIDB4NTYsIDB4ZWYsIDB4MDcsIDB4YTgsIDB4ZTAsIDB4NGUsIDB4YjIsIDB4N2MsIDB4NzAsIDB4ZjIsIDB4ZmQsCisgIDB4MjAsIDB4ZmEsIDB4ZmEsIDB4N2MsIDB4ZjgsIDB4ZjYsIDB4ZmIsIDB4NTYsIDB4MzIsIDB4N2EsIDB4MDAsIDB4MDAsCisgIDB4MjUsIDB4MjUsIDB4ZDQsIDB4YmMsIDB4ZWMsIDB4M2IsIDB4M2MsIDB4MjgsIDB4NzgsIDB4NGEsIDB4ZmQsIDB4ZDgsCisgIDB4ZWQsIDB4OTYsIDB4ZDksIDB4NTEsIDB4YjgsIDB4ZTMsIDB4MjMsIDB4ZTMsIDB4ZGYsIDB4NzUsIDB4OTEsIDB4MGEsCisgIDB4M2QsIDB4NTcsIDB4MmUsIDB4ZjYsIDB4OGQsIDB4ZDUsIDB4ZWYsIDB4MzAsIDB4ZGMsIDB4ZTIsIDB4MDUsIDB4MjcsCisgIDB4YjUsIDB4YzEsIDB4ZjgsIDB4NWQsIDB4NjUsIDB4MDEsIDB4MTcsIDB4MjIsIDB4M2MsIDB4YzEsIDB4ZjIsIDB4MTUsCisgIDB4M2QsIDB4ODcsIDB4MjEsIDB4YWEsIDB4OWYsIDB4ZWMsIDB4NTgsIDB4NjEsIDB4ZDEsIDB4YmEsIDB4MzAsIDB4M2UsCisgIDB4NDQsIDB4MmYsIDB4ZTgsIDB4OGYsIDB4MmUsIDB4YTYsIDB4OTAsIDB4ZWQsIDB4ZjEsIDB4ZjgsIDB4NmIsIDB4YWUsCisgIDB4NmYsIDB4MjgsIDB4ZWMsIDB4ODUsIDB4ZmMsIDB4YTQsIDB4NGIsIDB4NzAsIDB4MWUsIDB4MTksIDB4MTAsIDB4NGMsCisgIDB4YzMsIDB4YTgsIDB4OWEsIDB4MWYsIDB4YTcsIDB4NjksIDB4YjYsIDB4NDUsIDB4ZWIsIDB4NGUsIDB4ZTYsIDB4NWEsCisgIDB4YjAsIDB4ZjMsIDB4ZGMsIDB4MmUsIDB4NWYsIDB4ZGQsIDB4NjYsIDB4ZWUsIDB4NmYsIDB4NDgsIDB4OTEsIDB4NDIsCisgIDB4MWYsIDB4ZmQsIDB4MzAsIDB4MTksIDB4NTcsIDB4NmIsIDB4OGMsIDB4ZmMsIDB4ZWMsIDB4YzgsIDB4NTksIDB4ZGIsCisgIDB4ZWEsIDB4NGQsIDB4ZTYsIDB4NTYsIDB4MzAsIDB4NDAsIDB4OTksIDB4YjYsIDB4OGUsIDB4YzIsIDB4NDAsIDB4YzIsCisgIDB4NzEsIDB4YjIsIDB4MGMsIDB4NWEsIDB4NGIsIDB4NjksIDB4NjcsIDB4MWMsIDB4MWQsIDB4NWYsIDB4MGMsIDB4ODQsCisgIDB4YTAsIDB4MmIsIDB4MjQsIDB4ZTcsIDB4ZjIsIDB4NzQsIDB4NzQsIDB4MWEsIDB4MjEsIDB4MjUsIDB4ZDUsIDB4ZDksCisgIDB4MTksIDB4YjksIDB4YzcsIDB4YTIsIDB4ZmUsIDB4ZmIsIDB4NzgsIDB4YjksIDB4NmUsIDB4OGIsIDB4NDksIDB4ZjQsCisgIDB4NjIsIDB4NGUsIDB4MmYsIDB4Y2UsIDB4YmIsIDB4MTMsIDB4MDEsIDB4OTUsIDB4NDcsIDB4ZGUsIDB4OTMsIDB4ZTEsCisgIDB4MzcsIDB4NzgsIDB4MGMsIDB4ZDQsIDB4MzAsIDB4ZDQsIDB4MTIsIDB4ZDQsIDB4ZGMsIDB4OGUsIDB4NWQsIDB4ZDcsCisgIDB4NWIsIDB4YjQsIDB4N2IsIDB4MTUsIDB4ZGMsIDB4M2IsIDB4YTgsIDB4ZWIsIDB4ZGIsIDB4Y2MsIDB4OWEsIDB4ZWEsCisgIDB4MDMsIDB4OGMsIDB4ZDgsIDB4MWYsIDB4NDQsIDB4N2QsIDB4ZTYsIDB4NmEsIDB4ZTAsIDB4ZmYsIDB4NDIsIDB4YjksCisgIDB4NmEsIDB4MGQsIDB4ODEsIDB4ZmUsIDB4YTAsIDB4NGQsIDB4ZTQsIDB4ZGMsIDB4ZDcsIDB4NjksIDB4ZWYsIDB4OGYsCisgIDB4MTgsIDB4MDQsIDB4MmMsIDB4NDgsIDB4MDIsIDB4MDQsIDB4OWQsIDB4MDEsIDB4MmEsIDB4NjcsIDB4NGEsIDB4NDAsCisgIDB4ZjQsIDB4NDUsIDB4MzAsIDB4MGUsIDB4MTIsIDB4NDQsIDB4ZjUsIDB4MTksIDB4NWEsIDB4NjUsIDB4ZWIsIDB4ZGEsCisgIDB4ZWYsIDB4OWEsIDB4YWIsIDB4NjcsIDB4YWMsIDB4YWQsIDB4MmIsIDB4N2YsIDB4MTksIDB4MmEsIDB4MTEsIDB4MDUsCisgIDB4NTksIDB4YzMsIDB4NzYsIDB4NTIsIDB4MWUsIDB4MjUsIDB4NjEsIDB4OTksIDB4OTEsIDB4NDQsIDB4N2QsIDB4YWIsCisgIDB4NzcsIDB4ZjAsIDB4NTQsIDB4OTAsIDB4NjksIDB4NWYsIDB4OGQsIDB4YzcsIDB4MDcsIDB4ZTcsIDB4MjcsIDB4Y2QsCisgIDB4YTksIDB4YTYsIDB4OWYsIDB4MGUsIDB4ZGYsIDB4ODAsIDB4OTEsIDB4OWUsIDB4ZmEsIDB4YjAsIDB4NjUsIDB4YjIsCisgIDB4ZTIsIDB4MDMsIDB4NWIsIDB4ZGMsIDB4N2QsIDB4NjQsIDB4NjAsIDB4YjEsIDB4MjksIDB4YzAsIDB4YzAsIDB4NjAsCisgIDB4YzYsIDB4ZDksIDB4MGQsIDB4YmYsIDB4ZTUsIDB4NWIsIDB4MjAsIDB4YmIsIDB4MzksIDB4M2IsIDB4YjgsIDB4Y2MsCisgIDB4OTUsIDB4MDUsIDB4NGYsIDB4ZjEsIDB4MWQsIDB4NDUsIDB4NTQsIDB4YWIsIDB4YWUsIDB4NGMsIDB4MjYsIDB4Y2UsCisgIDB4ZWYsIDB4MjgsIDB4NTMsIDB4NzMsIDB4ZDAsIDB4MDcsIDB4YTcsIDB4NjUsIDB4MzUsIDB4ZTQsIDB4MDgsIDB4YzcsCisgIDB4ZmEsIDB4ZmMsIDB4NWQsIDB4ODUsIDB4OTYsIDB4NWIsIDB4NmEsIDB4NjMsIDB4YzAsIDB4OGEsIDB4MjksIDB4M2EsCisgIDB4NDMsIDB4ZTgsIDB4OTgsIDB4ODEsIDB4YzAsIDB4YzEsIDB4MjUsIDB4OWMsIDB4MzUsIDB4ZDEsIDB4YjAsIDB4ODUsCisgIDB4MjcsIDB4ZTEsIDB4ZWIsIDB4ZjcsIDB4NWQsIDB4OWEsIDB4ZGMsIDB4NzMsIDB4NTYsIDB4ZTksIDB4YjEsIDB4YTcsCisgIDB4ZTAsIDB4ZDAsIDB4NzgsIDB4NWYsIDB4NWEsIDB4MjMsIDB4N2MsIDB4YTYsIDB4MGIsIDB4ZjIsIDB4ZjQsIDB4ODYsCisgIDB4OGMsIDB4YjMsIDB4MjEsIDB4YTAsIDB4N2EsIDB4MWQsIDB4ZTYsIDB4NWIsIDB4NTgsIDB4MGQsIDB4YjAsIDB4ZDksCisgIDB4MmQsIDB4Y2UsIDB4YmUsIDB4OWEsIDB4NWEsIDB4MzgsIDB4Y2UsIDB4MmEsIDB4MTMsIDB4MDQsIDB4NDgsIDB4NzksCisgIDB4ZWUsIDB4YzQsIDB4OWEsIDB4YWMsIDB4NGIsIDB4NjEsIDB4N2EsIDB4NzMsIDB4NzksIDB4OTUsIDB4YjgsIDB4OTQsCisgIDB4ZTYsIDB4ODUsIDB4MTEsIDB4YzYsIDB4N2QsIDB4YzgsIDB4MjIsIDB4ZDEsIDB4ZWMsIDB4Y2UsIDB4NGMsIDB4ZjgsCisgIDB4YzEsIDB4ZGYsIDB4OWMsIDB4OGUsIDB4N2QsIDB4YWUsIDB4NDAsIDB4YTUsIDB4YzQsIDB4Y2YsIDB4NzAsIDB4NDUsCisgIDB4OGMsIDB4ZDksIDB4ZTAsIDB4N2MsIDB4YjUsIDB4YTYsIDB4NDQsIDB4NmEsIDB4YTksIDB4ZDUsIDB4Y2QsIDB4MTEsCisgIDB4YzYsIDB4NDUsIDB4OTAsIDB4NTIsIDB4MmMsIDB4ZTcsIDB4YjQsIDB4YTgsIDB4YTUsIDB4N2QsIDB4NzAsIDB4ZWIsCisgIDB4N2YsIDB4NTUsIDB4NGMsIDB4MWYsIDB4MjcsIDB4YzcsIDB4YjUsIDB4YjUsIDB4OTQsIDB4YzYsIDB4MTMsIDB4OTksCisgIDB4MDcsIDB4MjQsIDB4YWMsIDB4ZWEsIDB4OGIsIDB4NmQsIDB4MGQsIDB4M2UsIDB4OGEsIDB4NzQsIDB4Y2EsIDB4MTcsCisgIDB4ZjEsIDB4ZGIsIDB4ZjAsIDB4ZGMsIDB4YTksIDB4MTEsIDB4NGEsIDB4NzcsIDB4YzYsIDB4MDYsIDB4NDEsIDB4MzksCisgIDB4YmMsIDB4ZTUsIDB4NTksIDB4YmEsIDB4NWMsIDB4NDUsIDB4M2IsIDB4OTEsIDB4NTcsIDB4MDcsIDB4MDYsIDB4NTUsCisgIDB4YzAsIDB4MTksIDB4YWIsIDB4NWQsIDB4YjIsIDB4MjAsIDB4M2IsIDB4MmEsIDB4YjgsIDB4MGEsIDB4N2UsIDB4OTcsCisgIDB4YzksIDB4MmUsIDB4N2QsIDB4MjksIDB4ZjgsIDB4YzgsIDB4NzEsIDB4NTksIDB4NmYsIDB4YjIsIDB4ODUsIDB4MzMsCisgIDB4MGQsIDB4NjEsIDB4MjQsIDB4NGQsIDB4M2UsIDB4ZTksIDB4OGUsIDB4ZmMsIDB4NzAsIDB4OTYsIDB4YmQsIDB4MjcsCisgIDB4ZGYsIDB4N2YsIDB4MWYsIDB4ZDUsIDB4NjksIDB4NjAsIDB4YjYsIDB4MDYsIDB4YjUsIDB4ZmQsIDB4ZDIsIDB4YTgsCisgIDB4NTIsIDB4NDQsIDB4OWEsIDB4MmUsIDB4ZWYsIDB4OTAsIDB4MmYsIDB4MDMsIDB4MDcsIDB4MmEsIDB4ZDYsIDB4ODYsCisgIDB4ZTMsIDB4MzQsIDB4YjgsIDB4OTksIDB4OGMsIDB4MWMsIDB4NzAsIDB4Y2YsIDB4Y2EsIDB4ODQsIDB4MmEsIDB4NjQsCisgIDB4MmYsIDB4OGMsIDB4MTMsIDB4YjcsIDB4OTUsIDB4YTAsIDB4MGYsIDB4YjgsIDB4MGUsIDB4MWMsIDB4YjgsIDB4NDgsCisgIDB4ZTIsIDB4NTIsIDB4ODgsIDB4NWYsIDB4ODcsIDB4NTMsIDB4NTUsIDB4YmEsIDB4ZGQsIDB4NGEsIDB4Y2EsIDB4ZjcsCisgIDB4M2UsIDB4MWIsIDB4NzUsIDB4NTEsIDB4ODAsIDB4YjcsIDB4MjksIDB4NmEsIDB4MDQsIDB4NzEsIDB4ODksIDB4MTEsCisgIDB4NDEsIDB4NzIsIDB4YTQsIDB4MGEsIDB4MjMsIDB4ZmIsIDB4NWIsIDB4ODIsIDB4MGEsIDB4MmYsIDB4ZWIsIDB4MmEsCisgIDB4OTMsIDB4OWIsIDB4ZjMsIDB4MDIsIDB4YTEsIDB4NDQsIDB4MzksIDB4ZjUsIDB4MTgsIDB4OGYsIDB4MjQsIDB4NTIsCisgIDB4ODMsIDB4NWEsIDB4ZTUsIDB4M2UsIDB4ZDYsIDB4MTEsIDB4YWUsIDB4MTYsIDB4M2YsIDB4M2UsIDB4ZTgsIDB4YTAsCisgIDB4YzIsIDB4MDUsIDB4NGYsIDB4NzcsIDB4ZTAsIDB4OGYsIDB4NDIsIDB4NTQsIDB4NTEsIDB4NzEsIDB4ZDQsIDB4OTIsCisgIDB4OTcsIDB4ZmQsIDB4OTcsIDB4N2EsIDB4YzksIDB4MGYsIDB4NjUsIDB4YTIsIDB4MTAsIDB4ZDEsIDB4ZWIsIDB4YWEsCisgIDB4NmIsIDB4MzIsIDB4YWMsIDB4OGEsIDB4MTUsIDB4NjYsIDB4ODgsIDB4MTcsIDB4ODQsIDB4OTMsIDB4NTUsIDB4MzksCisgIDB4ZjEsIDB4YzksIDB4MzgsIDB4MWEsIDB4ZjgsIDB4MmMsIDB4YjcsIDB4MDgsIDB4MmEsIDB4YWEsIDB4YTgsIDB4MDcsCisgIDB4NjYsIDB4NTgsIDB4M2IsIDB4NDIsIDB4NjQsIDB4ZTMsIDB4OTIsIDB4OWMsIDB4NjgsIDB4ZjgsIDB4MzUsIDB4MWEsCisgIDB4NTUsIDB4MjQsIDB4NTEsIDB4MDUsIDB4MWQsIDB4OGYsIDB4OTUsIDB4ZWIsIDB4ZWEsIDB4YTAsIDB4N2IsIDB4NDcsCisgIDB4OGUsIDB4YjQsIDB4NTAsIDB4ODYsIDB4MTMsIDB4NjYsIDB4MTYsIDB4YmIsIDB4YzMsIDB4YTIsIDB4MmEsIDB4MzQsCisgIDB4ODgsIDB4MjUsIDB4ODgsIDB4NmYsIDB4MDEsIDB4NWYsIDB4MWQsIDB4NWYsIDB4MzYsIDB4YjcsIDB4MTYsIDB4ZjAsCisgIDB4ZjYsIDB4N2EsIDB4ZmYsIDB4MDEsIDB4ZWEsIDB4OTMsIDB4ZmUsIDB4N2QsIDB4ZmUsIDB4ZjYsIDB4NzIsIDB4Y2IsCisgIDB4ZGYsIDB4NzEsIDB4NDUsIDB4NGEsIDB4MDMsIDB4NDcsIDB4OGMsIDB4YjUsIDB4ZGUsIDB4YzEsIDB4NDcsIDB4MjUsCisgIDB4YzgsIDB4NGEsIDB4YzUsIDB4ZTcsIDB4MDMsIDB4MWEsIDB4ZWIsIDB4MzYsIDB4YzQsIDB4M2QsIDB4MTksIDB4ZDIsCisgIDB4NGYsIDB4NzYsIDB4NzYsIDB4MDcsIDB4ZjQsIDB4YzcsIDB4MWUsIDB4NWMsIDB4MDksIDB4NGYsIDB4NzYsIDB4OWUsCisgIDB4MzgsIDB4M2YsIDB4YWQsIDB4M2QsIDB4ZDUsIDB4ZDIsIDB4YjUsIDB4NDgsIDB4ZjEsIDB4ODgsIDB4NGIsIDB4MmQsCisgIDB4YTAsIDB4MjYsIDB4NTcsIDB4YzksIDB4ZTgsIDB4YzksIDB4ZmIsIDB4ZjcsIDB4ZjgsIDB4NTUsIDB4OTgsIDB4NDAsCisgIDB4NWUsIDB4MjQsIDB4NDMsIDB4ODcsIDB4MjUsIDB4NzMsIDB4NWQsIDB4NWQsIDB4YjMsIDB4YjUsIDB4ZmMsIDB4OGMsCisgIDB4YzMsIDB4MjcsIDB4YjAsIDB4Y2EsIDB4MjQsIDB4ZjAsIDB4Y2UsIDB4YzYsIDB4MzcsIDB4NzAsIDB4OWEsIDB4YTEsCisgIDB4ZjEsIDB4NDMsIDB4ZTcsIDB4MzUsIDB4M2UsIDB4ZDIsIDB4NDksIDB4NTgsIDB4N2IsIDB4MjAsIDB4N2MsIDB4ZjcsCisgIDB4ZTEsIDB4MjYsIDB4NjcsIDB4NDEsIDB4ZTUsIDB4NTIsIDB4YzIsIDB4OGMsIDB4NjQsIDB4ZTYsIDB4NzMsIDB4NWUsCisgIDB4NzMsIDB4ZTEsIDB4MTYsIDB4YjUsIDB4OWEsIDB4YzAsIDB4ZjgsIDB4N2IsIDB4MDcsIDB4MzEsIDB4MzQsIDB4MjIsCisgIDB4YzAsIDB4ZTAsIDB4ZDcsIDB4ODksIDB4ZjQsIDB4YmIsIDB4NDMsIDB4ZTksIDB4ZWIsIDB4NjEsIDB4YTQsIDB4YjEsCisgIDB4MjgsIDB4Y2MsIDB4ODgsIDB4YzUsIDB4NGUsIDB4MTQsIDB4NzEsIDB4ZWIsIDB4NDgsIDB4YzgsIDB4M2IsIDB4OGUsCisgIDB4MTYsIDB4OGIsIDB4MjIsIDB4OTAsIDB4ZTUsIDB4MzIsIDB4MTcsIDB4NmEsIDB4MGEsIDB4YzksIDB4NzgsIDB4OTcsCisgIDB4MDMsIDB4NWYsIDB4YmEsIDB4MjUsIDB4ZDgsIDB4MzIsIDB4MGYsIDB4MTgsIDB4ZTAsIDB4ZjcsIDB4ZmUsIDB4ZjAsCisgIDB4MmYsIDB4OWUsIDB4ZmQsIDB4ZWEsIDB4Y2MsIDB4ZjQsIDB4MzUsIDB4N2EsIDB4YmIsIDB4ODYsIDB4ZWEsIDB4YTAsCisgIDB4Y2UsIDB4OGYsIDB4YTUsIDB4MWIsIDB4NjEsIDB4NWYsIDB4MGQsIDB4NzEsIDB4MzMsIDB4NzgsIDB4NDEsIDB4NjcsCisgIDB4NzcsIDB4MzIsIDB4NWIsIDB4MWIsIDB4MTksIDB4YzMsIDB4YTksIDB4NGIsIDB4M2IsIDB4MjgsIDB4NWQsIDB4YWMsCisgIDB4MTYsIDB4MWUsIDB4NzUsIDB4YzQsIDB4ZmMsIDB4YmUsIDB4NTUsIDB4ZDIsIDB4MmUsIDB4MDEsIDB4YWMsIDB4MTYsCisgIDB4NjksIDB4MmIsIDB4MDYsIDB4YTAsIDB4NzgsIDB4MTIsIDB4MWQsIDB4NjEsIDB4NjAsIDB4MjAsIDB4MjAsIDB4OWMsCisgIDB4MWUsIDB4Y2IsIDB4M2UsIDB4NjcsIDB4OGQsIDB4OTksIDB4MmUsIDB4YzUsIDB4ZTcsIDB4YzksIDB4OTgsIDB4Y2IsCisgIDB4OTksIDB4NjAsIDB4NjYsIDB4NzgsIDB4NTYsIDB4OWIsIDB4M2EsIDB4YzQsIDB4YmEsIDB4ODEsIDB4NTIsIDB4MTksCisgIDB4MTIsIDB4OGIsIDB4MTYsIDB4MjAsIDB4MmIsIDB4NjksIDB4NDYsIDB4OGUsIDB4OWUsIDB4NTIsIDB4MTMsIDB4ZjcsCisgIDB4ZTksIDB4YWMsIDB4YmEsIDB4ZTksIDB4YTYsIDB4MmEsIDB4OTUsIDB4NzksIDB4YzQsIDB4YjgsIDB4MjMsIDB4NDksCisgIDB4YjQsIDB4NjcsIDB4NzAsIDB4MjEsIDB4YTYsIDB4MGEsIDB4NzgsIDB4YTEsIDB4NmQsIDB4YjksIDB4YzEsIDB4YjksCisgIDB4OWMsIDB4NTEsIDB4MzIsIDB4MjEsIDB4NTYsIDB4NTcsIDB4NGMsIDB4MTAsIDB4ZDUsIDB4OGUsIDB4NmQsIDB4MjgsCisgIDB4NGUsIDB4N2IsIDB4NjQsIDB4NjIsIDB4OGIsIDB4MGMsIDB4OTAsIDB4ZGIsIDB4M2UsIDB4NmYsIDB4YzUsIDB4ZmUsCisgIDB4MzcsIDB4NmEsIDB4ZDQsIDB4MGEsIDB4MmIsIDB4MGEsIDB4Y2UsIDB4MWQsIDB4YzEsIDB4MDUsIDB4MDMsIDB4MzMsCisgIDB4NzksIDB4OWIsIDB4Y2UsIDB4ZGIsIDB4MTUsIDB4ODQsIDB4MWYsIDB4MTAsIDB4MDAsIDB4OGEsIDB4ZmEsIDB4MGIsCisgIDB4YzksIDB4YTcsIDB4NzgsIDB4ZGQsIDB4ZDcsIDB4YjgsIDB4NmQsIDB4Y2EsIDB4NzQsIDB4MGEsIDB4OGEsIDB4NjYsCisgIDB4MWEsIDB4MjgsIDB4ZTMsIDB4NTMsIDB4ZmYsIDB4NWEsIDB4M2UsIDB4ZjMsIDB4OTUsIDB4N2YsIDB4YTgsIDB4ZDEsCisgIDB4OWMsIDB4MDcsIDB4NDAsIDB4OTksIDB4ZDcsIDB4YWIsIDB4ZGMsIDB4OGYsIDB4ZjYsIDB4NzYsIDB4NzYsIDB4YmUsCisgIDB4MjEsIDB4N2QsIDB4MjEsIDB4YzUsIDB4ZDUsIDB4NzcsIDB4YmYsIDB4ZWEsIDB4OWMsIDB4MjEsIDB4OTksIDB4MjAsCisgIDB4MmMsIDB4YjEsIDB4YzYsIDB4Y2MsIDB4ZTIsIDB4M2IsIDB4ZjgsIDB4YTYsIDB4NzQsIDB4ZDIsIDB4MzAsIDB4MjIsCisgIDB4NTYsIDB4ZGYsIDB4YjMsIDB4NTUsIDB4ZTAsIDB4NGUsIDB4OTAsIDB4YzksIDB4NWYsIDB4YjMsIDB4NTQsIDB4ZjAsCisgIDB4NWMsIDB4MzQsIDB4MTMsIDB4N2EsIDB4MTcsIDB4YzAsIDB4YmMsIDB4ZjIsIDB4ZWEsIDB4ZGQsIDB4ZDAsIDB4ZGYsCisgIDB4MTgsIDB4YjksIDB4NjUsIDB4MGIsIDB4OGIsIDB4ZWYsIDB4NzQsIDB4MjQsIDB4MzgsIDB4ZDIsIDB4MjEsIDB4Y2EsCisgIDB4OWMsIDB4M2MsIDB4YWIsIDB4YTIsIDB4YWMsIDB4YjQsIDB4YzgsIDB4OGYsIDB4ZDQsIDB4YmQsIDB4NjIsIDB4NmYsCisgIDB4MGEsIDB4NjIsIDB4MWMsIDB4YzIsIDB4M2EsIDB4ZTAsIDB4NmIsIDB4OGIsIDB4NTcsIDB4YjUsIDB4ZTEsIDB4OGMsCisgIDB4YmEsIDB4ZWIsIDB4YzcsIDB4ZTIsIDB4YmMsIDB4NzIsIDB4MTUsIDB4ZDMsIDB4N2YsIDB4ZTAsIDB4YzMsIDB4MWQsCisgIDB4MWQsIDB4OTAsIDB4N2QsIDB4ZTIsIDB4MjIsIDB4MjUsIDB4MTIsIDB4OWQsIDB4MDksIDB4YTEsIDB4MjUsIDB4Y2QsCisgIDB4YzEsIDB4YjIsIDB4MWQsIDB4YTIsIDB4OWMsIDB4ZjIsIDB4NmMsIDB4YjMsIDB4YzIsIDB4ZmQsIDB4ODEsIDB4MzEsCisgIDB4MzIsIDB4MDEsIDB4ZTEsIDB4NTIsIDB4YWIsIDB4ZDUsIDB4NzAsIDB4NDcsIDB4YTQsIDB4NjUsIDB4NzgsIDB4NmEsCisgIDB4ZTYsIDB4ZmMsIDB4YzAsIDB4OWMsIDB4YWQsIDB4ZWYsIDB4YmMsIDB4ODUsIDB4YzUsIDB4OWQsIDB4MmYsIDB4ZTEsCisgIDB4MDIsIDB4NzIsIDB4OWEsIDB4MzUsIDB4ZTgsIDB4MTQsIDB4YTcsIDB4OTMsIDB4NGQsIDB4NTEsIDB4MDksIDB4ODksCisgIDB4NTEsIDB4YzksIDB4YmYsIDB4ZTMsIDB4NGQsIDB4MTUsIDB4MGMsIDB4NDYsIDB4OTIsIDB4Y2UsIDB4ZmUsIDB4ODIsCisgIDB4MDQsIDB4ZjgsIDB4ZjMsIDB4MWYsIDB4ODcsIDB4ZjQsIDB4ZTcsIDB4NGYsIDB4MWQsIDB4ODUsIDB4ZWQsIDB4ZTIsCisgIDB4MjAsIDB4ZWEsIDB4NmEsIDB4MDgsIDB4ZjgsIDB4YzIsIDB4YjMsIDB4YWEsIDB4YTMsIDB4MWQsIDB4YzksIDB4MWQsCisgIDB4OTMsIDB4ZGYsIDB4OTYsIDB4MDEsIDB4MWYsIDB4N2QsIDB4NTcsIDB4OTksIDB4MDcsIDB4ZWYsIDB4N2QsIDB4ZGIsCisgIDB4MmMsIDB4NDEsIDB4MjUsIDB4MWIsIDB4YzYsIDB4YzgsIDB4MDQsIDB4MjMsIDB4NjgsIDB4MGQsIDB4ZjEsIDB4OTEsCisgIDB4OWYsIDB4ODksIDB4OGEsIDB4MDEsIDB4Y2UsIDB4YTIsIDB4MjksIDB4MzUsIDB4ZDMsIDB4OTgsIDB4ZjUsIDB4YmMsCisgIDB4MDMsIDB4MWYsIDB4ZjgsIDB4ZWEsIDB4YTAsIDB4MzQsIDB4ZGUsIDB4YzksIDB4YWEsIDB4N2MsIDB4NjAsIDB4OGEsCisgIDB4MGEsIDB4ZjEsIDB4MzYsIDB4OTYsIDB4YjksIDB4YTMsIDB4N2IsIDB4YzIsIDB4MDQsIDB4YTIsIDB4ZmIsIDB4NmQsCisgIDB4YjgsIDB4MDYsIDB4YjMsIDB4MjgsIDB4MDgsIDB4YzgsIDB4YWQsIDB4Y2EsIDB4NzMsIDB4ZmEsIDB4NzQsIDB4NTEsCisgIDB4OTAsIDB4ZGQsIDB4YTEsIDB4NGIsIDB4YWQsIDB4NjksIDB4MTEsIDB4MTksIDB4ZDcsIDB4YTUsIDB4MmYsIDB4NzEsCisgIDB4NWMsIDB4NzksIDB4MzcsIDB4MjIsIDB4YjUsIDB4YmQsIDB4NWEsIDB4NzYsIDB4ZTAsIDB4MmIsIDB4MzgsIDB4NDUsCisgIDB4YWEsIDB4NDUsIDB4NWIsIDB4NTMsIDB4Y2IsIDB4M2YsIDB4MzQsIDB4NWIsIDB4ZGEsIDB4NmMsIDB4YTcsIDB4YzcsCisgIDB4Y2MsIDB4ZjksIDB4NTMsIDB4ZDYsIDB4OWIsIDB4NzUsIDB4ZWIsIDB4NWYsIDB4MzYsIDB4OGIsIDB4OWUsIDB4ODYsCisgIDB4NDIsIDB4NzUsIDB4ZWEsIDB4OWMsIDB4OTQsIDB4NmIsIDB4NTIsIDB4ZGUsIDB4YTIsIDB4YmYsIDB4NzgsIDB4OGEsCisgIDB4MjYsIDB4NjEsIDB4YjEsIDB4ODcsIDB4ODksIDB4MTgsIDB4ZGMsIDB4MGEsIDB4NTAsIDB4MjEsIDB4OWMsIDB4NTMsCisgIDB4YzMsIDB4YmMsIDB4NzUsIDB4OTksIDB4NzcsIDB4ZWEsIDB4N2YsIDB4N2UsIDB4MjYsIDB4MmYsIDB4NWMsIDB4ZmQsCisgIDB4YWUsIDB4OTQsIDB4NTMsIDB4MjgsIDB4NjcsIDB4YWIsIDB4MjksIDB4NmUsIDB4NjcsIDB4OGMsIDB4MjQsIDB4ZTEsCisgIDB4NzIsIDB4NWMsIDB4MTMsIDB4YTEsIDB4ODUsIDB4YjEsIDB4M2MsIDB4NDQsIDB4NmUsIDB4ZGEsIDB4MTksIDB4NzcsCisgIDB4NmQsIDB4NDQsIDB4YmUsIDB4ZTMsIDB4YjMsIDB4YzYsIDB4ODMsIDB4ZjgsIDB4ODcsIDB4ZjgsIDB4OGYsIDB4ZjgsCisgIDB4ZTQsIDB4ZTAsIDB4MjAsIDB4ODIsIDB4YTMsIDB4YTMsIDB4NmIsIDB4NWEsIDB4ZDcsIDB4ZDksIDB4ZDUsIDB4MWEsCisgIDB4NGEsIDB4NGQsIDB4MDksIDB4NTcsIDB4YjAsIDB4NzUsIDB4ZmIsIDB4YmUsIDB4NzIsIDB4NjEsIDB4ZDYsIDB4NTgsCisgIDB4OGEsIDB4YjcsIDB4YzEsIDB4ZWMsIDB4ZmEsIDB4OTIsIDB4NTEsIDB4NjAsIDB4OGQsIDB4ZjYsIDB4NDIsIDB4YTIsCisgIDB4NDgsIDB4MTQsIDB4YjgsIDB4NjMsIDB4NmIsIDB4ZjMsIDB4NTEsIDB4OGYsIDB4ZjMsIDB4NmIsIDB4M2QsIDB4NGMsCisgIDB4NDUsIDB4NjcsIDB4NjUsIDB4ZTYsIDB4MmUsIDB4OTQsIDB4NTksIDB4MTUsIDB4NmQsIDB4NjQsIDB4NzksIDB4YzksCisgIDB4MzQsIDB4YTQsIDB4N2MsIDB4OWUsIDB4MDQsIDB4MzUsIDB4MWEsIDB4M2EsIDB4MzgsIDB4MjgsIDB4NTgsIDB4ZTcsCisgIDB4OGMsIDB4MDIsIDB4ZTYsIDB4OTYsIDB4MDAsIDB4NzAsIDB4YWIsIDB4ODUsIDB4MDMsIDB4NTMsIDB4MjMsIDB4YWEsCisgIDB4OWUsIDB4YTAsIDB4YzAsIDB4ZWQsIDB4ZGYsIDB4ZjMsIDB4ODksIDB4ZGUsIDB4NTYsIDB4ZDgsIDB4ZTIsIDB4ZWUsCisgIDB4MjIsIDB4Y2IsIDB4YjksIDB4MDIsIDB4MGMsIDB4OTEsIDB4NzQsIDB4MmMsIDB4ZTksIDB4NzcsIDB4ODksIDB4NDAsCisgIDB4NzMsIDB4ODcsIDB4YjIsIDB4YTQsIDB4NjIsIDB4NmQsIDB4MDMsIDB4OTAsIDB4YTIsIDB4ZGMsIDB4MzQsIDB4ZTksCisgIDB4ODQsIDB4OTEsIDB4NDIsIDB4NWEsIDB4NDAsIDB4OWUsIDB4MDksIDB4ZWMsIDB4YTcsIDB4NDUsIDB4MjAsIDB4ZTAsCisgIDB4ZTgsIDB4ZmMsIDB4NzUsIDB4MTcsIDB4NjAsIDB4NzIsIDB4MzgsIDB4Y2UsIDB4YmEsIDB4YzYsIDB4MTYsIDB4ZmYsCisgIDB4MGQsIDB4MzUsIDB4ZDcsIDB4ODIsIDB4NDksIDB4NDgsIDB4NTEsIDB4NGQsIDB4ZjAsIDB4ODUsIDB4MDIsIDB4MmMsCisgIDB4ZGIsIDB4OGUsIDB4YzksIDB4ZDcsIDB4NTIsIDB4MWEsIDB4Y2EsIDB4Y2MsIDB4MWQsIDB4NGYsIDB4ZjAsIDB4YTMsCisgIDB4NmYsIDB4MDQsIDB4OTgsIDB4YzAsIDB4YjAsIDB4ZDQsIDB4OTYsIDB4YzYsIDB4ZDUsIDB4YmIsIDB4ZmMsIDB4YzUsCisgIDB4MGQsIDB4M2YsIDB4OWQsIDB4MjIsIDB4M2IsIDB4MzcsIDB4YzUsIDB4YTksIDB4NTYsIDB4M2QsIDB4NmMsIDB4MzksCisgIDB4ZTAsIDB4YWIsIDB4MzAsIDB4N2EsIDB4ZTIsIDB4MWMsIDB4NjUsIDB4YTQsIDB4N2YsIDB4M2IsIDB4MmYsIDB4YzAsCisgIDB4OWMsIDB4NjgsIDB4OTIsIDB4NTgsIDB4YzgsIDB4ZDUsIDB4MTAsIDB4MWYsIDB4ZjQsIDB4OGUsIDB4YWQsIDB4ZjEsCisgIDB4MWYsIDB4MmIsIDB4NTAsIDB4ZjUsIDB4MDgsIDB4MDQsIDB4N2MsIDB4ZWYsIDB4NTksIDB4ZTgsIDB4MjYsIDB4ZDcsCisgIDB4MzksIDB4YzEsIDB4ZWEsIDB4ZmYsIDB4ODIsIDB4MzksIDB4YTksIDB4NGYsIDB4ODksIDB4ZGYsIDB4ZmYsIDB4NzIsCisgIDB4YjAsIDB4MmUsIDB4NDAsIDB4ZTMsIDB4MmIsIDB4YmUsIDB4YzAsIDB4NzYsIDB4MGEsIDB4NjEsIDB4NjksIDB4ZmMsCisgIDB4ODgsIDB4OGYsIDB4NzcsIDB4NzMsIDB4YTcsIDB4ZDksIDB4Y2QsIDB4ZjcsIDB4MjgsIDB4ZmMsIDB4MDAsIDB4MmMsCisgIDB4ZWYsIDB4MGIsIDB4MTgsIDB4MzEsIDB4OWYsIDB4M2YsIDB4MDIsIDB4ZDIsIDB4MzAsIDB4MDMsIDB4MTUsIDB4OGYsCisgIDB4NmYsIDB4OWEsIDB4MWQsIDB4YjcsIDB4ZTUsIDB4NDksIDB4MTgsIDB4NDUsIDB4NDMsIDB4MTgsIDB4NzMsIDB4MDIsCisgIDB4MmUsIDB4YzUsIDB4NWQsIDB4NDcsIDB4MGUsIDB4MWUsIDB4ZjUsIDB4MTcsIDB4ZjgsIDB4YjQsIDB4MGUsIDB4MjksCisgIDB4ODcsIDB4NWMsIDB4MjIsIDB4N2IsIDB4NjYsIDB4NTAsIDB4Y2YsIDB4OWQsIDB4NWUsIDB4NTMsIDB4YzQsIDB4NGQsCisgIDB4Y2EsIDB4ZDIsIDB4YjMsIDB4MTEsIDB4MTAsIDB4NWUsIDB4YTksIDB4NDAsIDB4YTYsIDB4MGIsIDB4MmYsIDB4NDMsCisgIDB4ZjIsIDB4MWUsIDB4NzgsIDB4MDksIDB4YmEsIDB4N2MsIDB4N2MsIDB4ZjIsIDB4YTQsIDB4MGQsIDB4MDgsIDB4MzksCisgIDB4YmIsIDB4M2MsIDB4ZGUsIDB4ZjcsIDB4ZjUsIDB4MTMsIDB4MzAsIDB4MzIsIDB4YmIsIDB4N2EsIDB4MGEsIDB4YmMsCisgIDB4ODAsIDB4OTMsIDB4OTgsIDB4MzgsIDB4ZGIsIDB4OTcsIDB4OTksIDB4YzIsIDB4YzIsIDB4ZDEsIDB4YzksIDB4NWQsCisgIDB4YTgsIDB4MjMsIDB4MDUsIDB4MWMsIDB4ZjksIDB4M2EsIDB4ZTIsIDB4ODQsIDB4YWEsIDB4ZDYsIDB4ZDIsIDB4NzEsCisgIDB4NTgsIDB4ODksIDB4MmUsIDB4N2YsIDB4MDksIDB4ZTIsIDB4NTEsIDB4YjYsIDB4ZDAsIDB4NWYsIDB4OTIsIDB4NDQsCisgIDB4ODMsIDB4YmMsIDB4MTQsIDB4MTEsIDB4Y2YsIDB4ZDYsIDB4NDQsIDB4ZTksIDB4NmQsIDB4MDUsIDB4ZDYsIDB4OGEsCisgIDB4ODMsIDB4MjEsIDB4NzIsIDB4NDEsIDB4YTYsIDB4YTQsIDB4NjgsIDB4NDUsIDB4OTIsIDB4NDAsIDB4NzYsIDB4YzksCisgIDB4NWUsIDB4MzYsIDB4NDAsIDB4Y2IsIDB4MmYsIDB4NmIsIDB4ZTUsIDB4MmUsIDB4OWIsIDB4YzIsIDB4NWIsIDB4NGMsCisgIDB4OTcsIDB4ZDUsIDB4YmYsIDB4NTUsIDB4NzgsIDB4ZWQsIDB4NGMsIDB4ZmIsIDB4MzAsIDB4YTMsIDB4NjIsIDB4ODgsCisgIDB4YjgsIDB4ZTksIDB4ZTIsIDB4ZWMsIDB4YTIsIDB4YjMsIDB4MmMsIDB4NWQsIDB4MzIsIDB4NDcsIDB4NWUsIDB4ZjksCisgIDB4OGIsIDB4MzcsIDB4ODMsIDB4M2EsIDB4MzAsIDB4NjAsIDB4ODEsIDB4NzUsIDB4ZDgsIDB4NWUsIDB4ZmUsIDB4OGEsCisgIDB4NjYsIDB4NzcsIDB4MGMsIDB4NTYsIDB4MzIsIDB4NzYsIDB4N2UsIDB4YjIsIDB4ZDksIDB4ZTAsIDB4ZWUsIDB4ZWYsCisgIDB4YWUsIDB4YmEsIDB4MzAsIDB4MWMsIDB4MDUsIDB4NjQsIDB4MjUsIDB4YjQsIDB4OTIsIDB4NzQsIDB4OWQsIDB4ZGIsCisgIDB4Y2UsIDB4NzksIDB4YTIsIDB4ZDYsIDB4NTEsIDB4MjIsIDB4MjEsIDB4MjYsIDB4OTUsIDB4ZDQsIDB4MzksIDB4YTQsCisgIDB4ZGIsIDB4ZjUsIDB4MTIsIDB4YWMsIDB4ZjQsIDB4NmEsIDB4ZDAsIDB4OWQsIDB4MTIsIDB4ZTAsIDB4ZGEsIDB4MjgsCisgIDB4OWUsIDB4ZDAsIDB4Y2QsIDB4NmIsIDB4YjYsIDB4NWEsIDB4ZjQsIDB4NDYsIDB4ZDEsIDB4OTcsIDB4MGYsIDB4MTYsCisgIDB4NDcsIDB4NTMsIDB4ZWQsIDB4MGUsIDB4MmIsIDB4YjcsIDB4NjUsIDB4NDksIDB4YTAsIDB4ODAsIDB4NWQsIDB4MWUsCisgIDB4M2QsIDB4ZGIsIDB4YTksIDB4YjUsIDB4MzYsIDB4YzIsIDB4MjQsIDB4MzQsIDB4NWMsIDB4MDYsIDB4YzMsIDB4NWQsCisgIDB4OTcsIDB4N2EsIDB4YzgsIDB4ZTAsIDB4MGMsIDB4YjksIDB4ZjMsIDB4MzYsIDB4ZTEsIDB4ZjMsIDB4YWMsIDB4ZTIsCisgIDB4N2YsIDB4YmYsIDB4MjMsIDB4MjgsIDB4OTMsIDB4OTIsIDB4YjcsIDB4NTUsIDB4MzEsIDB4NmQsIDB4MTksIDB4MDEsCisgIDB4YjcsIDB4M2UsIDB4MjEsIDB4YjMsIDB4OTQsIDB4YzIsIDB4NWYsIDB4YWMsIDB4ODAsIDB4NDYsIDB4NzgsIDB4OTgsCisgIDB4YzQsIDB4ZTEsIDB4OWQsIDB4ZmUsIDB4MjUsIDB4NzcsIDB4MTAsIDB4OTMsIDB4YWQsIDB4MTAsIDB4YWIsIDB4ZDEsCisgIDB4ODEsIDB4MjQsIDB4ZTgsIDB4OTcsIDB4MGUsIDB4ZmEsIDB4YTAsIDB4YWUsIDB4NzEsIDB4ZGUsIDB4ZjMsIDB4NjAsCisgIDB4OWQsIDB4ZTgsIDB4YWEsIDB4Y2QsIDB4ZWIsIDB4MDgsIDB4ZDAsIDB4MWUsIDB4OTYsIDB4YWQsIDB4MzgsIDB4YTIsCisgIDB4NDAsIDB4ZGQsIDB4NjUsIDB4ZDQsIDB4ZGMsIDB4MDgsIDB4MTIsIDB4MzEsIDB4MDQsIDB4NTIsIDB4ZTMsIDB4M2QsCisgIDB4YTYsIDB4YWUsIDB4NjQsIDB4NWQsIDB4ZTgsIDB4MzEsIDB4MTIsIDB4MzIsIDB4ZTgsIDB4OGUsIDB4ZGUsIDB4YjUsCisgIDB4NmEsIDB4MjAsIDB4YjMsIDB4YTMsIDB4MTAsIDB4NjMsIDB4ZGMsIDB4N2MsIDB4YmEsIDB4MDUsIDB4YTcsIDB4N2MsCisgIDB4YjUsIDB4ZGMsIDB4ZGMsIDB4ZGQsIDB4YzIsIDB4ZTcsIDB4OGMsIDB4ZTQsIDB4ZDQsIDB4ZDAsIDB4YTUsIDB4NWQsCisgIDB4YzAsIDB4MjYsIDB4NWYsIDB4ZDEsIDB4ZWUsIDB4ZDAsIDB4MjcsIDB4NjIsIDB4YjEsIDB4NzIsIDB4MDQsIDB4ODksCisgIDB4MTksIDB4M2IsIDB4ZTYsIDB4YTAsIDB4YzMsIDB4NjIsIDB4ODUsIDB4ZTAsIDB4NWEsIDB4NDQsIDB4ODAsIDB4ZmQsCisgIDB4MGQsIDB4MWQsIDB4OGEsIDB4NWYsIDB4OTIsIDB4MmYsIDB4OTcsIDB4MGMsIDB4MjEsIDB4MjksIDB4ODUsIDB4OWUsCisgIDB4N2MsIDB4ZDMsIDB4MzMsIDB4ZTYsIDB4NzEsIDB4YWIsIDB4OWMsIDB4NTIsIDB4MmYsIDB4ZjUsIDB4NDYsIDB4NjgsCisgIDB4ZjYsIDB4ZTYsIDB4YjMsIDB4MjEsIDB4OGMsIDB4YTAsIDB4ZWIsIDB4MjIsIDB4NmYsIDB4OTMsIDB4NjMsIDB4MzAsCisgIDB4ZmUsIDB4OGYsIDB4ZTcsIDB4NjAsIDB4Y2IsIDB4NTAsIDB4NWEsIDB4OWQsIDB4ZjUsIDB4MzQsIDB4N2EsIDB4OGMsCisgIDB4NzYsIDB4ZWEsIDB4ODUsIDB4YTUsIDB4OTMsIDB4MGMsIDB4NTAsIDB4ZDUsIDB4YmMsIDB4MDMsIDB4ZDYsIDB4OTYsCisgIDB4YjQsIDB4MjUsIDB4YWEsIDB4MDcsIDB4ZDEsIDB4M2YsIDB4NTYsIDB4ZTksIDB4ZjQsIDB4MTYsIDB4NmIsIDB4OGIsCisgIDB4NDAsIDB4MTUsIDB4YzAsIDB4MzMsIDB4ODksIDB4ZjMsIDB4M2UsIDB4OTIsIDB4MTYsIDB4NjAsIDB4ZmYsIDB4MmEsCisgIDB4Y2UsIDB4MDcsIDB4ZGMsIDB4M2QsIDB4NjAsIDB4NzksIDB4OTgsIDB4OTQsIDB4NzUsIDB4ZDQsIDB4YjIsIDB4YzEsCisgIDB4YzUsIDB4YzAsIDB4ZGMsIDB4MzksIDB4ZTAsIDB4YzUsIDB4YzksIDB4ZjUsIDB4ODQsIDB4NDUsIDB4MDQsIDB4NDcsCisgIDB4N2MsIDB4Y2EsIDB4YjMsIDB4OWMsIDB4MDEsIDB4MTAsIDB4OGMsIDB4MDEsIDB4MTEsIDB4MjksIDB4NTgsIDB4YzcsCisgIDB4ZjIsIDB4ZGEsIDB4NWYsIDB4M2MsIDB4MzAsIDB4ZjEsIDB4NDEsIDB4YmYsIDB4NGUsIDB4ZjcsIDB4ZGEsIDB4MjcsCisgIDB4OGIsIDB4OTcsIDB4OGUsIDB4YzEsIDB4YmUsIDB4Y2QsIDB4NmYsIDB4MDMsIDB4MmIsIDB4ZDgsIDB4YTYsIDB4NjcsCisgIDB4NWMsIDB4ZjMsIDB4NjksIDB4MTEsIDB4NmQsIDB4ZjksIDB4ODQsIDB4NmYsIDB4NWQsIDB4MWEsIDB4ZjcsIDB4NWIsCisgIDB4ZjAsIDB4Y2QsIDB4NDAsIDB4ZTAsIDB4MDQsIDB4OTMsIDB4MTUsIDB4ZmIsIDB4YjksIDB4M2IsIDB4MmIsIDB4OTksCisgIDB4YWEsIDB4NDcsIDB4NGYsIDB4OWUsIDB4NTAsIDB4MDIsIDB4NzMsIDB4OWYsIDB4ZTgsIDB4YzUsIDB4MzksIDB4ODUsCisgIDB4NDksIDB4YmMsIDB4MDgsIDB4Y2IsIDB4MDAsIDB4YTAsIDB4ZmUsIDB4NzAsIDB4ZDksIDB4ZDYsIDB4MjYsIDB4MmIsCisgIDB4MjksIDB4YTQsIDB4ZDYsIDB4YzgsIDB4MGUsIDB4NmMsIDB4NDQsIDB4YTEsIDB4ZTQsIDB4MzMsIDB4OWMsIDB4ZTMsCisgIDB4MTQsIDB4MzYsIDB4ZGYsIDB4ZTUsIDB4NmIsIDB4YzQsIDB4ZWIsIDB4MmUsIDB4ZTEsIDB4NDQsIDB4Y2YsIDB4ZTcsCisgIDB4NGEsIDB4YWIsIDB4YzQsIDB4NGIsIDB4OWEsIDB4YTgsIDB4MzQsIDB4ZTEsIDB4ODgsIDB4ZjAsIDB4OTgsIDB4N2UsCisgIDB4ZTAsIDB4NjYsIDB4NDUsIDB4YTYsIDB4ZjksIDB4YTAsIDB4MjMsIDB4ODIsIDB4NjQsIDB4MTcsIDB4ZDIsIDB4OTQsCisgIDB4ZjcsIDB4MzYsIDB4MDksIDB4ODgsIDB4YTYsIDB4M2QsIDB4NmIsIDB4ZTksIDB4MTksIDB4NmQsIDB4ODEsIDB4MzMsCisgIDB4NTQsIDB4ZWYsIDB4NDAsIDB4NTcsIDB4ZDQsIDB4YTIsIDB4MTYsIDB4ZWQsIDB4ZWEsIDB4OWQsIDB4YWYsIDB4YzIsCisgIDB4MWIsIDB4NTcsIDB4N2UsIDB4MDIsIDB4YmIsIDB4ZDEsIDB4YWQsIDB4YmUsIDB4MDAsIDB4YTQsIDB4NTEsIDB4N2MsCisgIDB4YTMsIDB4YjAsIDB4ZmEsIDB4MmMsIDB4YzQsIDB4NzAsIDB4ZmEsIDB4NzQsIDB4MzAsIDB4MzgsIDB4ZDUsIDB4OGMsCisgIDB4ZGMsIDB4YmEsIDB4YjUsIDB4NjUsIDB4ODUsIDB4NmYsIDB4OTcsIDB4NTYsIDB4NTYsIDB4YmUsIDB4ODksIDB4ZWEsCisgIDB4YjcsIDB4MDEsIDB4NjksIDB4NDAsIDB4NDcsIDB4NGYsIDB4NTQsIDB4MGYsIDB4MGYsIDB4M2IsIDB4OTAsIDB4OWYsCisgIDB4ZjUsIDB4YzAsIDB4MWYsIDB4ODcsIDB4NDAsIDB4NDMsIDB4ZTIsIDB4MTgsIDB4YmMsIDB4MzYsIDB4YTgsIDB4NTEsCisgIDB4YzcsIDB4MDgsIDB4ZTUsIDB4ODAsIDB4NjAsIDB4MzEsIDB4M2EsIDB4YjAsIDB4ZTcsIDB4NGMsIDB4NGUsIDB4YjksCisgIDB4NDksIDB4NDcsIDB4NWIsIDB4M2UsIDB4NWYsIDB4NzEsIDB4ODYsIDB4OWYsIDB4MTYsIDB4MzIsIDB4YTcsIDB4NjksCisgIDB4ZGQsIDB4YjIsIDB4ZGQsIDB4MjQsIDB4ZmIsIDB4MmYsIDB4MjgsIDB4NzQsIDB4MjksIDB4NGEsIDB4YWMsIDB4OTMsCisgIDB4Y2QsIDB4MDMsIDB4M2UsIDB4ZDUsIDB4OTAsIDB4ZTcsIDB4NWIsIDB4NjIsIDB4YWYsIDB4NjYsIDB4NjcsIDB4ZjAsCisgIDB4ZTksIDB4MTMsIDB4MzQsIDB4YjcsIDB4MDQsIDB4NGUsIDB4ZjEsIDB4MmUsIDB4MzcsIDB4MzUsIDB4ZGIsIDB4YjIsCisgIDB4NzMsIDB4ZWQsIDB4MTQsIDB4MGIsIDB4ZTcsIDB4YzMsIDB4ZjAsIDB4M2QsIDB4NzAsIDB4OWUsIDB4NzgsIDB4MTIsCisgIDB4NjYsIDB4ZmQsIDB4MTIsIDB4MGUsIDB4MjYsIDB4OWMsIDB4NzQsIDB4ZmMsIDB4YjEsIDB4NDcsIDB4N2QsIDB4Y2UsCisgIDB4NzUsIDB4MzMsIDB4NjYsIDB4MzcsIDB4MjQsIDB4ZGUsIDB4ZWQsIDB4OWMsIDB4NmIsIDB4NWYsIDB4NjEsIDB4MGEsCisgIDB4MGUsIDB4N2UsIDB4YWQsIDB4OTQsIDB4YWUsIDB4NWQsIDB4NTMsIDB4YzYsIDB4ZjQsIDB4MDcsIDB4ZjQsIDB4NmEsCisgIDB4YjEsIDB4ZTIsIDB4ZWMsIDB4ODUsIDB4NTYsIDB4NTgsIDB4OWIsIDB4NTYsIDB4NjUsIDB4YmUsIDB4MTIsIDB4NWEsCisgIDB4MmUsIDB4NzYsIDB4MzAsIDB4NGEsIDB4YTUsIDB4MjksIDB4YmUsIDB4NzMsIDB4YzYsIDB4MTMsIDB4NWUsIDB4OWMsCisgIDB4YzksIDB4ODMsIDB4MWIsIDB4YTcsIDB4ZTEsIDB4ODIsIDB4ZjksIDB4NWMsIDB4NzAsIDB4ODgsIDB4OGYsIDB4YjYsCisgIDB4NzgsIDB4YWMsIDB4YTksIDB4OGEsIDB4ZmEsIDB4YWQsIDB4ZWEsIDB4ZDYsIDB4OTYsIDB4NTgsIDB4MDgsIDB4MTUsCisgIDB4OGIsIDB4MzcsIDB4MTYsIDB4YzQsIDB4MTUsIDB4Y2IsIDB4NTMsIDB4NjYsIDB4NGEsIDB4NzYsIDB4ZDUsIDB4NzEsCisgIDB4YjMsIDB4NzMsIDB4OWQsIDB4NjEsIDB4YzUsIDB4YzgsIDB4ZTcsIDB4MGIsIDB4ODcsIDB4MGMsIDB4NjIsIDB4YWIsCisgIDB4NTQsIDB4MjUsIDB4ZjcsIDB4NjUsIDB4NzksIDB4ZGQsIDB4MjAsIDB4NDYsIDB4NzksIDB4MWQsIDB4ZGQsIDB4OTYsCisgIDB4MTksIDB4NjgsIDB4NjEsIDB4NGQsIDB4MTIsIDB4ZWIsIDB4YjEsIDB4MTYsIDB4NjUsIDB4ODgsIDB4NmEsIDB4MDgsCisgIDB4ODcsIDB4ZDYsIDB4MjEsIDB4Y2MsIDB4MDcsIDB4NTQsIDB4ZWQsIDB4ODksIDB4NmUsIDB4OGEsIDB4MGQsIDB4MGUsCisgIDB4MTYsIDB4ZDEsIDB4MjIsIDB4YTUsIDB4ZDcsIDB4NWEsIDB4MjYsIDB4ZWEsIDB4NzUsIDB4M2EsIDB4MmQsIDB4ZjIsCisgIDB4MzIsIDB4YmYsIDB4OTIsIDB4Y2IsIDB4OGQsIDB4MWQsIDB4NjIsIDB4MmUsIDB4YjAsIDB4Y2QsIDB4NmMsIDB4MTksCisgIDB4MzEsIDB4ZTMsIDB4NTMsIDB4ZGIsIDB4NzYsIDB4ODUsIDB4NWEsIDB4NmIsIDB4YmMsIDB4NTYsIDB4NDgsIDB4OTAsCisgIDB4YTMsIDB4ZGIsIDB4Y2IsIDB4NDIsIDB4MzUsIDB4MTIsIDB4M2IsIDB4ODcsIDB4MmIsIDB4ZjEsIDB4OGQsIDB4YzcsCisgIDB4MGUsIDB4YjYsIDB4MDMsIDB4N2IsIDB4YzAsIDB4MzAsIDB4MzAsIDB4Y2YsIDB4MWUsIDB4OGYsIDB4OWIsIDB4ZjIsCisgIDB4NTIsIDB4NjgsIDB4NGQsIDB4MjgsIDB4NzMsIDB4ZTgsIDB4Y2UsIDB4YjQsIDB4NGUsIDB4OTcsIDB4MTYsIDB4OGEsCisgIDB4OTAsIDB4NWIsIDB4YjMsIDB4YmQsIDB4ZDYsIDB4ZGQsIDB4M2IsIDB4MGIsIDB4NTcsIDB4ODEsIDB4OTksIDB4MTcsCisgIDB4N2UsIDB4ZTQsIDB4YjAsIDB4MTgsIDB4MjMsIDB4NDMsIDB4M2IsIDB4NGUsIDB4OGUsIDB4MmYsIDB4NWYsIDB4NDUsCisgIDB4YjMsIDB4MjIsIDB4YTYsIDB4ZTEsIDB4ZTMsIDB4Y2YsIDB4ZTEsIDB4YTQsIDB4NDgsIDB4N2UsIDB4OGUsIDB4NWIsCisgIDB4YTQsIDB4MTYsIDB4ZTUsIDB4OTIsIDB4MTcsIDB4NjksIDB4YzgsIDB4ZTAsIDB4YzksIDB4ZTEsIDB4Y2UsIDB4ZDMsCisgIDB4NTEsIDB4ZjUsIDB4YmUsIDB4MTMsIDB4ZmIsIDB4MTEsIDB4YTIsIDB4MjQsIDB4YjQsIDB4NWEsIDB4OGQsIDB4NWYsCisgIDB4MmUsIDB4Y2QsIDB4ZjgsIDB4MmYsIDB4NzgsIDB4OWUsIDB4ZjIsIDB4ZjcsIDB4MGYsIDB4MmQsIDB4MWUsIDB4YjAsCisgIDB4MmUsIDB4YjYsIDB4NGIsIDB4NTEsIDB4OGIsIDB4NzgsIDB4ZGUsIDB4NGIsIDB4YzksIDB4MDcsIDB4YjAsIDB4MGUsCisgIDB4OGYsIDB4NDMsIDB4NjksIDB4MDQsIDB4M2EsIDB4NTMsIDB4MDcsIDB4YzcsIDB4YjQsIDB4MmIsIDB4ZjAsIDB4M2MsCisgIDB4MGUsIDB4OTUsIDB4MzEsIDB4NjgsIDB4MGMsIDB4MjYsIDB4MTAsIDB4NDgsIDB4NzYsIDB4MTksIDB4OTcsIDB4ZmUsCisgIDB4YWEsIDB4YTMsIDB4NmEsIDB4MTMsIDB4ZjAsIDB4MDcsIDB4MzUsIDB4ZDksIDB4ZWMsIDB4MGUsIDB4ZGIsIDB4YjYsCisgIDB4NDksIDB4NWIsIDB4MDcsIDB4OWUsIDB4YTMsIDB4MTQsIDB4NzIsIDB4NjAsIDB4OWEsIDB4M2EsIDB4OGUsIDB4YWUsCisgIDB4ZjgsIDB4MmUsIDB4MzAsIDB4NWMsIDB4MTksIDB4NDMsIDB4NDIsIDB4NzcsIDB4Y2UsIDB4YTgsIDB4ZDUsIDB4MjEsCisgIDB4MzcsIDB4ZDYsIDB4YmIsIDB4ODYsIDB4OTQsIDB4ZTEsIDB4YmUsIDB4MmUsIDB4MzQsIDB4MTIsIDB4NGMsIDB4ZmIsCisgIDB4ODUsIDB4YWEsIDB4ZTIsIDB4OTIsIDB4NDgsIDB4ZDMsIDB4MzQsIDB4N2UsIDB4ODYsIDB4YTQsIDB4YjAsIDB4ZjcsCisgIDB4ZmIsIDB4MjIsIDB4ZTcsIDB4NDksIDB4YzYsIDB4ZDUsIDB4NmEsIDB4NDQsIDB4YmEsIDB4YTEsIDB4NGYsIDB4OWQsCisgIDB4YzksIDB4NTQsIDB4YjcsIDB4OGQsIDB4NWMsIDB4NmEsIDB4ZTMsIDB4NzAsIDB4ZDUsIDB4ZGQsIDB4M2IsIDB4ZDIsCisgIDB4ODUsIDB4NmMsIDB4YzcsIDB4NGEsIDB4MzIsIDB4OTcsIDB4ZDYsIDB4MjQsIDB4ZmMsIDB4MTcsIDB4MmUsIDB4MzAsCisgIDB4YzEsIDB4ZWQsIDB4ZWMsIDB4MTcsIDB4ZDEsIDB4MDAsIDB4ODUsIDB4YWEsIDB4MjgsIDB4ODAsIDB4NmEsIDB4M2UsCisgIDB4NjYsIDB4NWUsIDB4YTksIDB4NzIsIDB4ZjcsIDB4YjAsIDB4NGUsIDB4NzUsIDB4N2EsIDB4OTUsIDB4ODYsIDB4Y2EsCisgIDB4YjgsIDB4M2MsIDB4M2MsIDB4MGYsIDB4NWMsIDB4ZTUsIDB4ODMsIDB4YTgsIDB4ODUsIDB4MzEsIDB4OTksIDB4M2MsCisgIDB4ZjgsIDB4MWMsIDB4MDksIDB4NDAsIDB4Y2QsIDB4MzMsIDB4ZDcsIDB4ZmEsIDB4ZTIsIDB4ZGYsIDB4NjgsIDB4NzIsCisgIDB4ZjgsIDB4MTEsIDB4MDQsIDB4NTYsIDB4ODcsIDB4ZmIsIDB4NjEsIDB4NjMsIDB4NmEsIDB4MzQsIDB4OGQsIDB4MzcsCisgIDB4OWQsIDB4NzUsIDB4NDMsIDB4MjIsIDB4NzUsIDB4ODYsIDB4OGMsIDB4ZjYsIDB4NTUsIDB4ZTcsIDB4ODgsIDB4NzMsCisgIDB4NDcsIDB4MmQsIDB4NWQsIDB4ZmEsIDB4ZTQsIDB4ODgsIDB4N2EsIDB4YzMsIDB4MDYsIDB4MzAsIDB4OTcsIDB4NjksCisgIDB4ZjMsIDB4OTcsIDB4ZTQsIDB4YjYsIDB4ZTEsIDB4ZWUsIDB4NWQsIDB4MjYsIDB4MzgsIDB4MzAsIDB4NTEsIDB4MDksCisgIDB4Y2IsIDB4MDcsIDB4ZTUsIDB4YjksIDB4OGQsIDB4MjQsIDB4MjQsIDB4MjAsIDB4ZDIsIDB4YjIsIDB4MzEsIDB4OWEsCisgIDB4YWIsIDB4ZGYsIDB4Y2QsIDB4OTgsIDB4YzEsIDB4Y2UsIDB4YTAsIDB4NDIsIDB4ODIsIDB4ZTcsIDB4ZDEsIDB4Y2QsCisgIDB4YWEsIDB4OTAsIDB4MGMsIDB4MjEsIDB4NGQsIDB4NjIsIDB4NTUsIDB4NGUsIDB4YjEsIDB4MjIsIDB4ZTEsIDB4M2UsCisgIDB4ZDcsIDB4M2IsIDB4NWMsIDB4NzYsIDB4MjgsIDB4YTYsIDB4ODIsIDB4YjEsIDB4NDUsIDB4YzksIDB4NDIsIDB4OTEsCisgIDB4NTMsIDB4OTMsIDB4MjIsIDB4YmYsIDB4YTUsIDB4YmQsIDB4Y2IsIDB4YWYsIDB4ZTEsIDB4YmUsIDB4YzIsIDB4YjMsCisgIDB4MmYsIDB4NjcsIDB4ODMsIDB4MzksIDB4ZGUsIDB4ZTksIDB4MjQsIDB4MTcsIDB4ZWEsIDB4OTUsIDB4MGUsIDB4YWEsCisgIDB4MjUsIDB4NDcsIDB4YWYsIDB4YWEsIDB4YjAsIDB4NTgsIDB4NmYsIDB4ODQsIDB4MGEsIDB4MDEsIDB4OWUsIDB4ZDQsCisgIDB4NjksIDB4NTYsIDB4ZTUsIDB4MDksIDB4OWYsIDB4MGMsIDB4OTcsIDB4OTQsIDB4ZjIsIDB4MzEsIDB4ZjEsIDB4OTYsCisgIDB4Y2IsIDB4ZGIsIDB4ODgsIDB4MGIsIDB4ZmYsIDB4N2QsIDB4MzIsIDB4ZTQsIDB4YzQsIDB4MjIsIDB4OTQsIDB4YTEsCisgIDB4OGUsIDB4MjUsIDB4YWYsIDB4MDksIDB4OTMsIDB4MWMsIDB4MDIsIDB4MmYsIDB4NDgsIDB4YWEsIDB4NDQsIDB4YmQsCisgIDB4MzMsIDB4YjIsIDB4YWMsIDB4ZTksIDB4MGMsIDB4MDIsIDB4MDcsIDB4ZTgsIDB4ZDAsIDB4MjcsIDB4NWQsIDB4ZmEsCisgIDB4MTIsIDB4Y2QsIDB4MTIsIDB4YmIsIDB4OTEsIDB4NTAsIDB4YzcsIDB4Y2MsIDB4OTMsIDB4MTYsIDB4YzcsIDB4NzIsCisgIDB4YjYsIDB4MjAsIDB4NDEsIDB4YTQsIDB4NmQsIDB4ZGUsIDB4YjEsIDB4MzEsIDB4ZWMsIDB4OGMsIDB4MjUsIDB4YjksCisgIDB4ZDAsIDB4YzIsIDB4MjgsIDB4ZTQsIDB4ZTUsIDB4NDEsIDB4OWUsIDB4M2EsIDB4MTIsIDB4MjUsIDB4ZDQsIDB4YzUsCisgIDB4ZjYsIDB4ZTcsIDB4MzAsIDB4Y2IsIDB4NGYsIDB4YmUsIDB4ZDQsIDB4ZDIsIDB4MjQsIDB4NDIsIDB4ZTQsIDB4ZTcsCisgIDB4NjIsIDB4NDksIDB4MDIsIDB4ZDYsIDB4NzUsIDB4MjAsIDB4NzYsIDB4NjYsIDB4NzksIDB4MGEsIDB4NzUsIDB4MDYsCisgIDB4YmEsIDB4MzYsIDB4OGEsIDB4OGUsIDB4MzksIDB4MzAsIDB4ZDQsIDB4NzEsIDB4YmYsIDB4MzQsIDB4OTgsIDB4MzMsCisgIDB4YzYsIDB4OTgsIDB4MmEsIDB4ODUsIDB4OGEsIDB4MjQsIDB4MGYsIDB4ZWEsIDB4NmQsIDB4M2QsIDB4OGUsIDB4ZTQsCisgIDB4YzIsIDB4ZTgsIDB4OTIsIDB4NjgsIDB4NWQsIDB4NTEsIDB4YmQsIDB4Y2UsIDB4YmIsIDB4NzYsIDB4NTksIDB4MjksCisgIDB4MjcsIDB4ODMsIDB4MTIsIDB4NDEsIDB4YmEsIDB4MWYsIDB4MzksIDB4MGEsIDB4YmYsIDB4NTcsIDB4MWUsIDB4ZGEsCisgIDB4MzMsIDB4OTAsIDB4OTAsIDB4YTYsIDB4NWMsIDB4ODMsIDB4M2IsIDB4MGMsIDB4NzcsIDB4ZjQsIDB4MjYsIDB4ZjIsCisgIDB4MGYsIDB4MGQsIDB4ODIsIDB4YmYsIDB4ZWYsIDB4N2YsIDB4YjYsIDB4NjMsIDB4OTAsIDB4MTUsIDB4MjYsIDB4NjMsCisgIDB4MDgsIDB4OWYsIDB4NDEsIDB4OWMsIDB4YWUsIDB4ZTMsIDB4ZmEsIDB4MDYsIDB4ZDIsIDB4ODYsIDB4YmMsIDB4NzIsCisgIDB4OGYsIDB4MzYsIDB4OTksIDB4MzcsIDB4OWYsIDB4OGYsIDB4OWUsIDB4NmUsIDB4ZDUsIDB4ZTQsIDB4YTUsIDB4OWEsCisgIDB4MmYsIDB4ZGEsIDB4ZjYsIDB4ZTAsIDB4OWIsIDB4Y2IsIDB4ZDMsIDB4ZDcsIDB4NTEsIDB4Y2IsIDB4MGUsIDB4MTQsCisgIDB4NGYsIDB4MDUsIDB4N2UsIDB4NTcsIDB4ZmYsIDB4ZDUsIDB4YmYsIDB4NjIsIDB4MGYsIDB4ZDIsIDB4MmYsIDB4NGUsCisgIDB4NGUsIDB4YzYsIDB4YjAsIDB4MDYsIDB4MTUsIDB4MGIsIDB4ZDksIDB4MGEsIDB4YmYsIDB4OGIsIDB4MTUsIDB4MDgsCisgIDB4MTEsIDB4MjQsIDB4NGIsIDB4MzAsIDB4YTksIDB4ZDgsIDB4ZjIsIDB4YTAsIDB4YmYsIDB4NTcsIDB4ZjksIDB4MzQsCisgIDB4OWYsIDB4NzMsIDB4M2UsIDB4MDEsIDB4YmYsIDB4OTQsIDB4NjgsIDB4MDUsIDB4NzIsIDB4ZGMsIDB4OTksIDB4OTksCisgIDB4NTEsIDB4NzEsIDB4MGUsIDB4YWQsIDB4YjQsIDB4NGMsIDB4NWEsIDB4ZjAsIDB4ODksIDB4YTUsIDB4MjYsIDB4Y2MsCisgIDB4MzksIDB4OTUsIDB4YTIsIDB4ODQsIDB4N2MsIDB4N2MsIDB4NTYsIDB4NzAsIDB4YTUsIDB4ZDMsIDB4OTksIDB4OWUsCisgIDB4MzQsIDB4MjksIDB4ZDgsIDB4NTAsIDB4ZDksIDB4YzAsIDB4NTAsIDB4MzcsIDB4ZDgsIDB4NmQsIDB4OGEsIDB4OWMsCisgIDB4OTUsIDB4NTYsIDB4MmUsIDB4ODcsIDB4OTYsIDB4ZTEsIDB4NzAsIDB4ZWEsIDB4ZDAsIDB4M2MsIDB4NDEsIDB4ZDksCisgIDB4MmMsIDB4MmYsIDB4ZTAsIDB4MTcsIDB4MGQsIDB4MzgsIDB4YTMsIDB4OTgsIDB4NzEsIDB4NzEsIDB4MDUsIDB4OGMsCisgIDB4MDQsIDB4NzcsIDB4ZWYsIDB4YTEsIDB4ZTMsIDB4YTYsIDB4NzQsIDB4OTMsIDB4MGIsIDB4M2UsIDB4MDEsIDB4ZDMsCisgIDB4Y2MsIDB4NWEsIDB4NDksIDB4ODAsIDB4YjYsIDB4NDAsIDB4ZTEsIDB4MDksIDB4ZDEsIDB4OTAsIDB4MDgsIDB4ODQsCisgIDB4NTcsIDB4MjUsIDB4ZTEsIDB4NDIsIDB4NzUsIDB4ZTEsIDB4ZTgsIDB4NWMsIDB4ZDEsIDB4M2QsIDB4ODEsIDB4NGQsCisgIDB4N2IsIDB4NDYsIDB4YWUsIDB4YTMsIDB4ZjQsIDB4N2EsIDB4MWQsIDB4M2QsIDB4MjAsIDB4NjIsIDB4YTcsIDB4NGQsCisgIDB4OGIsIDB4OTMsIDB4N2IsIDB4ZTQsIDB4OGMsIDB4NGQsIDB4NTEsIDB4MzMsIDB4NGQsIDB4Y2EsIDB4ZDksIDB4OGUsCisgIDB4ZGMsIDB4YjYsIDB4OWEsIDB4YTksIDB4NDksIDB4ZDIsIDB4ZjYsIDB4MmYsIDB4YzAsIDB4YjUsIDB4NzEsIDB4ODAsCisgIDB4OTgsIDB4ODEsIDB4YTksIDB4OTUsIDB4ZTcsIDB4YmYsIDB4NmQsIDB4N2IsIDB4YTYsIDB4MDMsIDB4NGIsIDB4NzIsCisgIDB4M2QsIDB4YzgsIDB4OWEsIDB4NDcsIDB4ZjMsIDB4YmYsIDB4ODEsIDB4MTksIDB4ZDEsIDB4ZWQsIDB4YmMsIDB4OWMsCisgIDB4ZWQsIDB4NGIsIDB4ZjUsIDB4Y2MsIDB4NzQsIDB4MjIsIDB4ZGMsIDB4YmUsIDB4NDMsIDB4ZDYsIDB4YjIsIDB4ZjksCisgIDB4NmUsIDB4NzIsIDB4N2QsIDB4MjgsIDB4MjQsIDB4ZDUsIDB4MmIsIDB4YWIsIDB4NTksIDB4YmUsIDB4OTIsIDB4YTQsCisgIDB4MTMsIDB4NDQsIDB4ODQsIDB4MGIsIDB4M2IsIDB4Y2EsIDB4ZmYsIDB4ZWIsIDB4OWYsIDB4NmQsIDB4MzQsIDB4ZWEsCisgIDB4OGYsIDB4M2YsIDB4ODksIDB4N2YsIDB4NGYsIDB4NzIsIDB4YzMsIDB4N2MsIDB4NDgsIDB4YzIsIDB4ZTQsIDB4YTgsCisgIDB4ZjQsIDB4OGMsIDB4YTcsIDB4YmMsIDB4NjIsIDB4OWMsIDB4OGQsIDB4MmQsIDB4NDMsIDB4OTQsIDB4ZmQsIDB4ZDQsCisgIDB4YjQsIDB4NWIsIDB4MzUsIDB4ODAsIDB4YTAsIDB4ZTcsIDB4YjAsIDB4ZjYsIDB4Y2QsIDB4MGUsIDB4MDEsIDB4OTAsCisgIDB4M2UsIDB4MDUsIDB4YjUsIDB4YTAsIDB4ZDUsIDB4YzUsIDB4MzUsIDB4NDEsIDB4MDEsIDB4MDEsIDB4NDksIDB4ZjYsCisgIDB4NWIsIDB4NDcsIDB4YmQsIDB4NjYsIDB4YTksIDB4OTQsIDB4Y2EsIDB4ZTksIDB4NjUsIDB4MTksIDB4OTEsIDB4OWMsCisgIDB4YzMsIDB4MjYsIDB4MTEsIDB4MjQsIDB4ZjQsIDB4OWYsIDB4OGYsIDB4OTksIDB4NTMsIDB4YTksIDB4NmQsIDB4ZDEsCisgIDB4YTYsIDB4YjUsIDB4OTEsIDB4ODUsIDB4ZDYsIDB4NzQsIDB4YjQsIDB4ZmYsIDB4YTIsIDB4MmQsIDB4MzYsIDB4YTgsCisgIDB4ZWUsIDB4ZjMsIDB4N2YsIDB4OGUsIDB4MTgsIDB4MDIsIDB4MDAsIDB4MmQsIDB4M2MsIDB4Y2MsIDB4YTUsIDB4ZWMsCisgIDB4ZDYsIDB4YmIsIDB4M2YsIDB4ZWUsIDB4ZjIsIDB4N2QsIDB4YWIsIDB4ZDcsIDB4MmUsIDB4MzYsIDB4ODYsIDB4MTksCisgIDB4YjAsIDB4MzUsIDB4NzcsIDB4MDksIDB4YTYsIDB4NmIsIDB4NTgsIDB4NzQsIDB4ZWEsIDB4OWYsIDB4ZTMsIDB4YWYsCisgIDB4MGMsIDB4ZjgsIDB4M2MsIDB4ZjgsIDB4ZTcsIDB4ODgsIDB4ZmYsIDB4ZmMsIDB4NzEsIDB4NzcsIDB4ZjgsIDB4ZWMsCisgIDB4MjcsIDB4ZjcsIDB4ZDUsIDB4M2YsIDB4ZWUsIDB4YmUsIDB4ZmIsIDB4ZTMsIDB4NWUsIDB4YWYsIDB4YjMsIDB4MzYsCisgIDB4MWIsIDB4NWYsIDB4NDksIDB4NTcsIDB4NDYsIDB4Y2YsIDB4NmIsIDB4NTYsIDB4YmMsIDB4MTYsIDB4NzUsIDB4OTUsCisgIDB4YTgsIDB4OTEsIDB4NWUsIDB4ZjksIDB4M2QsIDB4NmIsIDB4MjQsIDB4MDgsIDB4NjksIDB4ZGIsIDB4NTAsIDB4NDYsCisgIDB4NzYsIDB4MDUsIDB4N2UsIDB4ODAsIDB4ZmQsIDB4MmQsIDB4YWMsIDB4NmMsIDB4MTQsIDB4NWMsIDB4NjgsIDB4YjQsCisgIDB4ZDAsIDB4OGYsIDB4NzgsIDB4NzIsIDB4ODAsIDB4YzMsIDB4MzEsIDB4OWYsIDB4NzIsIDB4Y2IsIDB4N2QsIDB4OGQsCisgIDB4MDQsIDB4ZGYsIDB4ZDksIDB4MDMsIDB4MWQsIDB4N2EsIDB4YzIsIDB4NzgsIDB4MzMsIDB4NzIsIDB4YzEsIDB4MzQsCisgIDB4MzMsIDB4MjUsIDB4YWQsIDB4NDgsIDB4YWIsIDB4ZTQsIDB4YmYsIDB4NmYsIDB4YmEsIDB4ZTMsIDB4OWYsIDB4YjMsCisgIDB4YTQsIDB4YjcsIDB4YmEsIDB4ZGMsIDB4NDMsIDB4ZGUsIDB4MmYsIDB4ZTcsIDB4NjUsIDB4NWUsIDB4Y2IsIDB4ZDAsCisgIDB4NjAsIDB4MjcsIDB4OGIsIDB4YjAsIDB4ZmIsIDB4YTMsIDB4YWIsIDB4YzksIDB4M2EsIDB4ZjMsIDB4ODEsIDB4ZWQsCisgIDB4MTMsIDB4ZWIsIDB4OTAsIDB4ODIsIDB4OGEsIDB4ZTEsIDB4NWEsIDB4OWUsIDB4Y2QsIDB4MTEsIDB4YmEsIDB4ZTEsCisgIDB4NTcsIDB4ZjcsIDB4MDksIDB4NGMsIDB4ZDksIDB4MTYsIDB4NjEsIDB4ZGEsIDB4OTksIDB4ZjMsIDB4NzIsIDB4ODksCisgIDB4MDcsIDB4MmQsIDB4ZTAsIDB4ZjUsIDB4MGIsIDB4NWYsIDB4MGYsIDB4ODIsIDB4NjEsIDB4NTIsIDB4NzYsIDB4NTksCisgIDB4MTIsIDB4ZjEsIDB4YWEsIDB4NzYsIDB4OGUsIDB4ZGQsIDB4NjgsIDB4YWIsIDB4MGIsIDB4NTQsIDB4MTcsIDB4YjYsCisgIDB4NjUsIDB4ODQsIDB4MDIsIDB4OGEsIDB4N2UsIDB4OGEsIDB4NGEsIDB4YTEsIDB4MTEsIDB4OTYsIDB4YWIsIDB4YTIsCisgIDB4NzAsIDB4ZGUsIDB4YjAsIDB4ZjYsIDB4NWYsIDB4OTcsIDB4ZWQsIDB4ZWEsIDB4ZWEsIDB4MDcsIDB4MGQsIDB4MWMsCisgIDB4ZDcsIDB4NTYsIDB4MzIsIDB4MmYsIDB4ZGIsIDB4YjIsIDB4NzEsIDB4YzgsIDB4ZjAsIDB4NWYsIDB4ZTYsIDB4OGQsCisgIDB4YTgsIDB4OTAsIDB4OWMsIDB4MzEsIDB4MDgsIDB4YTMsIDB4ZGMsIDB4MGUsIDB4OTYsIDB4MWUsIDB4ZGYsIDB4ZjksCisgIDB4OTIsIDB4OTMsIDB4YjYsIDB4NDcsIDB4MTUsIDB4NTYsIDB4YjYsIDB4YWUsIDB4MzYsIDB4ZjMsIDB4YTgsIDB4ZWUsCisgIDB4YjksIDB4NzAsIDB4MzEsIDB4ZWEsIDB4ZDgsIDB4NzEsIDB4NzgsIDB4N2IsIDB4NTQsIDB4NzksIDB4OTAsIDB4NWYsCisgIDB4ZDIsIDB4YTUsIDB4NDMsIDB4NDEsIDB4ZWIsIDB4MDgsIDB4ZjUsIDB4MjQsIDB4ZjgsIDB4ZWYsIDB4NDYsIDB4MGYsCisgIDB4ODIsIDB4NjgsIDB4OTYsIDB4YTYsIDB4NTYsIDB4ZjIsIDB4YjMsIDB4OTIsIDB4NmIsIDB4ZGYsIDB4NDUsIDB4MTksCisgIDB4ZTksIDB4YjQsIDB4NGQsIDB4OWIsIDB4YmEsIDB4ODgsIDB4MGIsIDB4ZTEsIDB4ZmUsIDB4YTEsIDB4NmIsIDB4ODcsCisgIDB4ZmUsIDB4ZGEsIDB4MGQsIDB4ZmEsIDB4YzEsIDB4MWQsIDB4M2EsIDB4NWMsIDB4MGUsIDB4ZWMsIDB4N2MsIDB4YWMsCisgIDB4MTgsIDB4MGYsIDB4MzYsIDB4ZWYsIDB4ZjIsIDB4NWYsIDB4OTAsIDB4NTYsIDB4NDYsIDB4YzAsIDB4NWIsIDB4NGUsCisgIDB4NWQsIDB4M2IsIDB4OTYsIDB4MzYsIDB4ODcsIDB4ZWYsIDB4ZGQsIDB4YmIsIDB4NWQsIDB4MTksIDB4MGYsIDB4MDAsCisgIDB4OTksIDB4YjUsIDB4MjAsIDB4MDcsIDB4ZDksIDB4ZDAsIDB4OWEsIDB4ODIsIDB4MDUsIDB4NjUsIDB4NGMsIDB4OGQsCisgIDB4NWEsIDB4ZmUsIDB4NGIsIDB4ZDIsIDB4MDUsIDB4ZDAsIDB4MTEsIDB4NTcsIDB4M2YsIDB4ZDcsIDB4NDgsIDB4NGMsCisgIDB4ZjgsIDB4M2IsIDB4NmIsIDB4MzgsIDB4NWUsIDB4NzksIDB4YmMsIDB4MGIsIDB4NWEsIDB4Y2IsIDB4YjksIDB4YTEsCisgIDB4ZWEsIDB4ZDMsIDB4NGEsIDB4MTksIDB4ZmQsIDB4NDEsIDB4MTksIDB4ODcsIDB4YWQsIDB4ZTYsIDB4MDAsIDB4NGEsCisgIDB4NGEsIDB4YzMsIDB4NDgsIDB4NWYsIDB4NjksIDB4ZDUsIDB4YjgsIDB4YTQsIDB4YWYsIDB4YzYsIDB4NGIsIDB4ZmEsCisgIDB4NTAsIDB4MmMsIDB4NTAsIDB4MmIsIDB4YjAsIDB4MWQsIDB4YjksIDB4ZTUsIDB4OTIsIDB4NTIsIDB4Y2EsIDB4ZWEsCisgIDB4ZTUsIDB4M2EsIDB4M2MsIDB4N2IsIDB4ZjMsIDB4ZTYsIDB4ZjgsIDB4ZjAsIDB4ZDIsIDB4NjMsIDB4Y2IsIDB4M2IsCisgIDB4ZjAsIDB4MGMsIDB4Y2UsIDB4OWMsIDB4NzAsIDB4ZjEsIDB4N2MsIDB4MzUsIDB4NWIsIDB4MDQsIDB4YmYsIDB4YWYsCisgIDB4NzAsIDB4MzQsIDB4NzUsIDB4MjcsIDB4OTgsIDB4ZGIsIDB4NWQsIDB4YjcsIDB4MjAsIDB4OWIsIDB4MDksIDB4ZGQsCisgIDB4ODcsIDB4OWUsIDB4YzgsIDB4NTAsIDB4OWMsIDB4NDksIDB4M2EsIDB4ODEsIDB4Y2UsIDB4OTUsIDB4NGQsIDB4NTUsCisgIDB4OTUsIDB4MDcsIDB4NGIsIDB4ZWIsIDB4NmEsIDB4ZGIsIDB4MDgsIDB4MzAsIDB4NzIsIDB4MWQsIDB4MWMsIDB4NDEsCisgIDB4Y2IsIDB4MDIsIDB4YzAsIDB4OGUsIDB4YWQsIDB4NTcsIDB4ZDUsIDB4ZDIsIDB4YzIsIDB4MDUsIDB4NzksIDB4YjEsCisgIDB4Y2QsIDB4YjcsIDB4OTcsIDB4MjQsIDB4MDMsIDB4YTgsIDB4M2EsIDB4ODcsIDB4OGQsIDB4N2UsIDB4NmYsIDB4NDUsCisgIDB4ZmEsIDB4ZGEsIDB4NzMsIDB4YTgsIDB4NDUsIDB4ZmIsIDB4MjQsIDB4YzUsIDB4OGQsIDB4MWEsIDB4NzcsIDB4YzAsCisgIDB4MGEsIDB4MzUsIDB4MjYsIDB4MTcsIDB4M2UsIDB4YmIsIDB4MDMsIDB4OTcsIDB4M2IsIDB4NWYsIDB4MjksIDB4ODEsCisgIDB4ZTMsIDB4NTcsIDB4MmQsIDB4OTIsIDB4MWMsIDB4ZmUsIDB4ZmQsIDB4ZDQsIDB4MjAsIDB4ZmYsIDB4YzIsIDB4YzQsCisgIDB4ZTAsIDB4YzgsIDB4YmYsIDB4YWMsIDB4MTIsIDB4MDAsIDB4NGIsIDB4OGQsIDB4Y2QsIDB4MjMsIDB4MjgsIDB4NjQsCisgIDB4ZDYsIDB4ZTUsIDB4OWQsIDB4NDgsIDB4ZjksIDB4YmYsIDB4N2UsIDB4NzAsIDB4NjMsIDB4NzQsIDB4YTAsIDB4MGIsCisgIDB4ZjgsIDB4YjgsIDB4NjgsIDB4YTIsIDB4MGMsIDB4YmIsIDB4NWMsIDB4MmIsIDB4ZTUsIDB4ODQsIDB4MGEsIDB4OTIsCisgIDB4ZWIsIDB4YTgsIDB4YzQsIDB4YzQsIDB4ZDQsIDB4YWIsIDB4NTAsIDB4ZmEsIDB4MjQsIDB4NjQsIDB4Y2EsIDB4YjMsCisgIDB4MTYsIDB4ODUsIDB4NDUsIDB4MmEsIDB4YWQsIDB4MWEsIDB4ZmQsIDB4ZTQsIDB4YjUsIDB4YWEsIDB4MzcsIDB4ZTcsCisgIDB4OTYsIDB4YTgsIDB4OTUsIDB4MDUsIDB4ZDksIDB4M2EsIDB4ZjgsIDB4MWQsIDB4NmQsIDB4NWUsIDB4NzcsIDB4MDUsCisgIDB4YWMsIDB4NzQsIDB4YzQsIDB4YjUsIDB4YjgsIDB4OTgsIDB4NTEsIDB4YWYsIDB4YTcsIDB4ODEsIDB4ZDUsIDB4NWEsCisgIDB4MDIsIDB4YWIsIDB4N2IsIDB4OWIsIDB4NjYsIDB4MjIsIDB4ZTgsIDB4NzAsIDB4NWIsIDB4NTksIDB4ZDgsIDB4MTEsCisgIDB4YTksIDB4YjYsIDB4MzgsIDB4YWYsIDB4ZDcsIDB4ZTYsIDB4ZGIsIDB4MmMsIDB4N2QsIDB4OGYsIDB4MWIsIDB4NzYsCisgIDB4M2IsIDB4YjUsIDB4ZDksIDB4MzUsIDB4YjUsIDB4YmUsIDB4NTcsIDB4YmQsIDB4ZGQsIDB4ZTcsIDB4N2IsIDB4YTMsCisgIDB4ZGQsIDB4NGYsIDB4M2UsIDB4MWIsIDB4ZWQsIDB4ZWUsIDB4OGMsIDB4NzYsIDB4N2IsIDB4MjEsIDB4MWEsIDB4MDUsCisgIDB4MDEsIDB4NDQsIDB4MGUsIDB4ZjksIDB4ODUsIDB4ZWQsIDB4NzQsIDB4NWMsIDB4N2YsIDB4YmIsIDB4NmUsIDB4ZDksCisgIDB4ZTEsIDB4MDcsIDB4MTYsIDB4MGYsIDB4YTMsIDB4MjAsIDB4MGMsIDB4ZGIsIDB4ZmEsIDB4ODQsIDB4ODYsIDB4NmEsCisgIDB4OWIsIDB4MmQsIDB4MGYsIDB4MDMsIDB4ODUsIDB4MGYsIDB4NTEsIDB4NWIsIDB4NzIsIDB4Y2MsIDB4YmEsIDB4YWIsCisgIDB4MDIsIDB4OTEsIDB4NDEsIDB4ZGUsIDB4NWMsIDB4ZTUsIDB4YTEsIDB4MmUsIDB4ZjYsIDB4ZTksIDB4MDAsIDB4ZDIsCisgIDB4ZDQsIDB4NWQsIDB4OGYsIDB4YzgsIDB4N2QsIDB4ZGYsIDB4NTksIDB4ZmQsIDB4YmYsIDB4MWEsIDB4Y2IsIDB4YzEsCisgIDB4MWUsIDB4M2EsIDB4YjcsIDB4MGQsIDB4ZDUsIDB4Y2IsIDB4ZTQsIDB4N2MsIDB4OTksIDB4NWMsIDB4YjcsIDB4NDgsCisgIDB4MTMsIDB4YzYsIDB4NWMsIDB4MDEsIDB4YjMsIDB4OTEsIDB4ZjMsIDB4ZTksIDB4YzEsIDB4NzksIDB4MWMsIDB4ZWEsCisgIDB4NWUsIDB4YWIsIDB4YmIsIDB4NjQsIDB4Y2QsIDB4YTEsIDB4ZTAsIDB4OTEsIDB4Y2YsIDB4NjMsIDB4MDksIDB4MTUsCisgIDB4MmUsIDB4NWEsIDB4NzYsIDB4NzksIDB4NGMsIDB4NjEsIDB4ZDEsIDB4MmEsIDB4YmUsIDB4MjAsIDB4ZTEsIDB4NDUsCisgIDB4MDYsIDB4MjcsIDB4MjcsIDB4NjEsIDB4NDgsIDB4OGMsIDB4ZGYsIDB4ZjksIDB4Y2IsIDB4NWYsIDB4YmMsIDB4OGUsCisgIDB4MWEsIDB4MzMsIDB4ZmMsIDB4NGMsIDB4NGIsIDB4NGEsIDB4YzAsIDB4M2YsIDB4ZjAsIDB4Y2MsIDB4NWYsIDB4MDQsCisgIDB4MjQsIDB4NzEsIDB4MjEsIDB4ZWEsIDB4ZWQsIDB4ZmYsIDB4MDgsIDB4OTAsIDB4ZGEsIDB4NGYsIDB4YzMsIDB4MWYsCisgIDB4ZTksIDB4OWYsIDB4M2YsIDB4ZjUsIDB4OWMsIDB4YTIsIDB4MDQsIDB4MWUsIDB4NDIsIDB4OGMsIDB4MjAsIDB4MzcsCisgIDB4NzgsIDB4NTksIDB4YTIsIDB4MDEsIDB4YzYsIDB4NTIsIDB4YjksIDB4ZmEsIDB4NTcsIDB4YzgsIDB4N2MsIDB4NjEsCisgIDB4ZDcsIDB4MmQsIDB4NzYsIDB4YTMsIDB4YTAsIDB4YmQsIDB4N2QsIDB4MjYsIDB4NDgsIDB4NmMsIDB4YTAsIDB4N2YsCisgIDB4ZGMsIDB4OTQsIDB4NDksIDB4NTIsIDB4ZGMsIDB4NWMsIDB4MGEsIDB4YTMsIDB4OTEsIDB4N2YsIDB4NjksIDB4NjAsCisgIDB4Y2MsIDB4OGUsIDB4N2MsIDB4MzEsIDB4MjksIDB4YzQsIDB4YWUsIDB4YjMsIDB4YjQsIDB4MDAsIDB4NTUsIDB4Y2YsCisgIDB4OWMsIDB4NjUsIDB4ZTEsIDB4ZjAsIDB4OTksIDB4ZmEsIDB4YjMsIDB4MGQsIDB4OTcsIDB4YTUsIDB4YzYsIDB4ZDAsCisgIDB4NTQsIDB4YWIsIDB4OTYsIDB4MjQsIDB4NzEsIDB4MzksIDB4ZjEsIDB4NzIsIDB4MjUsIDB4MmUsIDB4NjQsIDB4OWUsCisgIDB4NjYsIDB4NmMsIDB4MDcsIDB4OWIsIDB4MjIsIDB4MmUsIDB4ZDIsIDB4ZjIsIDB4OTYsIDB4ODcsIDB4YTgsIDB4ZjAsCisgIDB4NmIsIDB4NDksIDB4MzMsIDB4ZGQsIDB4MDgsIDB4NDAsIDB4MjEsIDB4ZTgsIDB4OWIsIDB4NDEsIDB4OTYsIDB4MzksCisgIDB4YTgsIDB4NjQsIDB4MzQsIDB4NWIsIDB4YTEsIDB4OTcsIDB4ODUsIDB4MzUsIDB4NTksIDB4ZjQsIDB4NjIsIDB4NzksCisgIDB4NTMsIDB4NTAsIDB4YmIsIDB4OGYsIDB4NjQsIDB4ZjcsIDB4ZDMsIDB4NTMsIDB4ZjIsIDB4OGMsIDB4OTMsIDB4ZGEsCisgIDB4MjAsIDB4N2QsIDB4ZmQsIDB4NzcsIDB4ODQsIDB4YzAsIDB4NzIsIDB4OTUsIDB4ZTEsIDB4MjcsIDB4M2IsIDB4YmIsCisgIDB4NGQsIDB4NzMsIDB4MTQsIDB4NGEsIDB4ZGUsIDB4NTAsIDB4MWUsIDB4OWMsIDB4MjcsIDB4MDYsIDB4YTUsIDB4YzksCisgIDB4MjUsIDB4MjMsIDB4YTMsIDB4YmQsIDB4NGYsIDB4NzYsIDB4M2YsIDB4ZDksIDB4MjYsIDB4ZmQsIDB4ZjEsIDB4NjQsCisgIDB4YjQsIDB4MTcsIDB4NTIsIDB4NDMsIDB4ZDEsIDB4ZTYsIDB4YTIsIDB4YWYsIDB4NTcsIDB4NTIsIDB4NjEsIDB4YmUsCisgIDB4M2IsIDB4MDUsIDB4OGMsIDB4N2QsIDB4YWYsIDB4ZDQsIDB4NWMsIDB4NTAsIDB4YjcsIDB4NDEsIDB4NTksIDB4MmIsCisgIDB4ZmQsIDB4ODUsIDB4M2EsIDB4ZTYsIDB4NmMsIDB4YjUsIDB4MTAsIDB4YjksIDB4MzUsIDB4ZWEsIDB4MjgsIDB4NDYsCisgIDB4YzQsIDB4NzYsIDB4MGMsIDB4NzcsIDB4NDUsIDB4ZmQsIDB4MmYsIDB4MmIsIDB4OTAsIDB4OTAsIDB4YWQsIDB4MjYsCisgIDB4MjksIDB4MWQsIDB4ZjgsIDB4MTUsIDB4NTcsIDB4ZDgsIDB4NjMsIDB4M2EsIDB4YmQsIDB4NjQsIDB4ZTIsIDB4YjgsCisgIDB4MzMsIDB4MDcsIDB4NGMsIDB4NTMsIDB4MTEsIDB4OTYsIDB4ZTksIDB4NWMsIDB4OTMsIDB4NGIsIDB4NjAsIDB4YmUsCisgIDB4ODMsIDB4OTAsIDB4MWUsIDB4NTEsIDB4MDAsIDB4NjIsIDB4YTksIDB4OTAsIDB4YmIsIDB4ODEsIDB4MGIsIDB4OTEsCisgIDB4OGYsIDB4NjIsIDB4MmUsIDB4OTEsIDB4ZjMsIDB4YjUsIDB4OTEsIDB4Y2IsIDB4YzUsIDB4ZGQsIDB4YzcsIDB4OTIsCisgIDB4YTAsIDB4ZGUsIDB4YzUsIDB4MGYsIDB4MWQsIDB4NGIsIDB4OTIsIDB4MWYsIDB4YTYsIDB4MTIsIDB4Y2UsIDB4NDYsCisgIDB4ZmQsIDB4ODEsIDB4OTQsIDB4YmQsIDB4MTIsIDB4YTcsIDB4MGMsIDB4NGIsIDB4MzMsIDB4OGYsIDB4YmIsIDB4OGIsCisgIDB4ZDAsIDB4ZDgsIDB4NWMsIDB4NzAsIDB4NzUsIDB4M2QsIDB4YTUsIDB4ZTQsIDB4MWEsIDB4MGMsIDB4ZTYsIDB4MTYsCisgIDB4OTcsIDB4YWIsIDB4NDQsIDB4ZjcsIDB4YTAsIDB4MGYsIDB4MWMsIDB4YjQsIDB4YmYsIDB4ZDMsIDB4MmIsIDB4ZjQsCisgIDB4MTgsIDB4MDUsIDB4YjQsIDB4MDgsIDB4YzQsIDB4ZGUsIDB4ZmYsIDB4NDksIDB4MDIsIDB4YjEsIDB4ZjcsIDB4ZmYsCisgIDB4MGIsIDB4YzQsIDB4YmYsIDB4NTMsIDB4MjAsIDB4OWUsIDB4MzcsIDB4MDQsIDB4ODIsIDB4MmYsIDB4MGIsIDB4YTQsCisgIDB4YzEsIDB4ZWMsIDB4Y2UsIDB4ZjAsIDB4NzksIDB4YTcsIDB4NjgsIDB4MTgsIDB4ZmYsIDB4NTcsIDB4NzAsIDB4OGEsCisgIDB4NDksIDB4NjgsIDB4MDEsIDB4ODUsIDB4OTEsIDB4ZmMsIDB4N2QsIDB4NDMsIDB4YWQsIDB4YjEsIDB4ZDIsIDB4YTcsCisgIDB4MjEsIDB4YjcsIDB4YjksIDB4ZWUsIDB4YjksIDB4YTYsIDB4NzMsIDB4M2MsIDB4MWYsIDB4NDUsIDB4ZTcsIDB4ZWUsCisgIDB4MzUsIDB4ZjYsIDB4NmYsIDB4ZjEsIDB4Y2YsIDB4NTYsIDB4MDgsIDB4NTksIDB4Y2MsIDB4OTMsIDB4MmIsIDB4YWMsCisgIDB4MDMsIDB4MGUsIDB4YTEsIDB4MDEsIDB4N2UsIDB4ODksIDB4MzMsIDB4OTIsIDB4ZDksIDB4NGMsIDB4OWEsIDB4YzMsCisgIDB4OTMsIDB4MjgsIDB4ODcsIDB4NDQsIDB4MTEsIDB4ZDAsIDB4OGEsIDB4NTQsIDB4MTYsIDB4YjYsIDB4MWUsIDB4YzksCisgIDB4NDUsIDB4OWIsIDB4YjMsIDB4ZTQsIDB4ZTgsIDB4YTAsIDB4ZWMsIDB4MGYsIDB4YTIsIDB4OTAsIDB4MWQsIDB4YWUsCisgIDB4YWIsIDB4OTIsIDB4ZjcsIDB4NTUsIDB4ZmEsIDB4NWUsIDB4OWMsIDB4NjIsIDB4M2YsIDB4MjcsIDB4NDUsIDB4MWUsCisgIDB4MTksIDB4MDAsIDB4NDAsIDB4MzMsIDB4NTksIDB4YzEsIDB4ZWMsIDB4NmEsIDB4NjcsIDB4ODAsIDB4ZmYsIDB4MjEsCisgIDB4N2YsIDB4YjcsIDB4NjUsIDB4NDIsIDB4ZmUsIDB4MDUsIDB4YmMsIDB4ZDEsIDB4OTIsIDB4YmMsIDB4Y2MsIDB4NzksCisgIDB4MjUsIDB4ZDYsIDB4OWYsIDB4MTQsIDB4MTksIDB4MDEsIDB4YTksIDB4ZjksIDB4NjUsIDB4ZmMsIDB4Y2MsIDB4OTksCisgIDB4YmQsIDB4MDMsIDB4MGMsIDB4NjIsIDB4ZDUsIDB4NTEsIDB4YmIsIDB4OTYsIDB4NjcsIDB4NjYsIDB4YjMsIDB4ZWEsCisgIDB4MjgsIDB4Y2YsIDB4OWIsIDB4NWUsIDB4NDksIDB4YzYsIDB4OWIsIDB4NzQsIDB4YzcsIDB4MzEsIDB4Y2QsIDB4OGQsCisgIDB4M2EsIDB4OGMsIDB4YjAsIDB4YTMsIDB4ODQsIDB4YWYsIDB4YjQsIDB4NjEsIDB4ODcsIDB4MDYsIDB4NTIsIDB4N2EsCisgIDB4NGIsIDB4YWYsIDB4NzUsIDB4MmUsIDB4ZmEsIDB4ZWMsIDB4YTMsIDB4NDYsIDB4YmUsIDB4OGIsIDB4ZWQsIDB4MmUsCisgIDB4ZDUsIDB4ZmIsIDB4NWMsIDB4NzUsIDB4MDQsIDB4YTIsIDB4NWYsIDB4YmEsIDB4NjksIDB4MTAsIDB4OTEsIDB4YWQsCisgIDB4NGYsIDB4YzYsIDB4MjYsIDB4OTgsIDB4MjUsIDB4Y2QsIDB4YWQsIDB4ODQsIDB4NGYsIDB4N2UsIDB4Y2MsIDB4MzQsCisgIDB4ZTAsIDB4M2UsIDB4OGMsIDB4MWIsIDB4NTksIDB4YjksIDB4OWEsIDB4ZmMsIDB4NWQsIDB4Y2QsIDB4N2QsIDB4NDYsCisgIDB4MjgsIDB4MDksIDB4MDksIDB4NjcsIDB4YzgsIDB4ZjcsIDB4MmQsIDB4OGMsIDB4ODYsIDB4YWIsIDB4ODksIDB4N2EsCisgIDB4NDEsIDB4ZGEsIDB4Y2QsIDB4ZDEsIDB4MGYsIDB4ZTEsIDB4ZjEsIDB4NzIsIDB4YWMsIDB4OGEsIDB4MmEsIDB4NjcsCisgIDB4MWEsIDB4M2QsIDB4ZTMsIDB4M2UsIDB4YjUsIDB4MDYsIDB4MTUsIDB4ODQsIDB4ODAsIDB4NWEsIDB4ZWIsIDB4NmUsCisgIDB4ZmIsIDB4ODksIDB4Y2QsIDB4YzEsIDB4NTIsIDB4NzksIDB4ZTksIDB4YzIsIDB4YzUsIDB4NzIsIDB4YjMsIDB4YTksCisgIDB4MTYsIDB4OGEsIDB4MDUsIDB4YmIsIDB4ZjgsIDB4ZjEsIDB4YjUsIDB4NmQsIDB4OTEsIDB4YjgsIDB4MGUsIDB4ZDgsCisgIDB4MGIsIDB4NTksIDB4MGUsIDB4ZmUsIDB4YzIsIDB4ZmYsIDB4ZTksIDB4YjYsIDB4ODYsIDB4NmIsIDB4Y2MsIDB4MWMsCisgIDB4MTYsIDB4MTksIDB4ZTcsIDB4YzcsIDB4YjEsIDB4MzcsIDB4ZjAsIDB4ZmEsIDB4YmEsIDB4MGYsIDB4YmMsIDB4ZTQsCisgIDB4ZGYsIDB4Y2EsIDB4MTcsIDB4MWUsIDB4NmYsIDB4MWIsIDB4N2UsIDB4YzYsIDB4NWYsIDB4ZjAsIDB4ODEsIDB4YjcsCisgIDB4OTksIDB4ZTQsIDB4MjgsIDB4ODQsIDB4MWEsIDB4NjIsIDB4YTksIDB4OTksIDB4NWYsIDB4MjgsIDB4YWIsIDB4MTMsCisgIDB4MTcsIDB4OTksIDB4MDQsIDB4YjYsIDB4YzMsIDB4OWEsIDB4MzEsIDB4MjUsIDB4MjcsIDB4NGIsIDB4NTYsIDB4MWQsCisgIDB4MmMsIDB4YWMsIDB4Y2MsIDB4NTEsIDB4MzMsIDB4NjcsIDB4MmQsIDB4M2IsIDB4NjcsIDB4ZDgsIDB4OWIsIDB4N2EsCisgIDB4OGQsIDB4OGQsIDB4OTUsIDB4YzAsIDB4ODIsIDB4YzAsIDB4Y2IsIDB4YmMsIDB4MzIsIDB4N2YsIDB4NTcsIDB4MzQsCisgIDB4NjMsIDB4YzMsIDB4YjIsIDB4ZTAsIDB4MjMsIDB4YTIsIDB4OGIsIDB4NDYsIDB4YzgsIDB4MTYsIDB4YzIsIDB4OTcsCisgIDB4ODUsIDB4ZTEsIDB4OTYsIDB4NzEsIDB4YmYsIDB4NWUsIDB4MmQsIDB4NTksIDB4NzgsIDB4NDIsIDB4MGMsIDB4MTIsCisgIDB4NmMsIDB4NDgsIDB4MjcsIDB4YjksIDB4ZjgsIDB4NzQsIDB4MzMsIDB4NWMsIDB4ODQsIDB4NjgsIDB4MDYsIDB4NGUsCisgIDB4M2MsIDB4YzcsIDB4YWUsIDB4NzAsIDB4OTcsIDB4YTcsIDB4Y2MsIDB4YmMsIDB4MTMsIDB4MjUsIDB4NDUsIDB4ZDEsCisgIDB4NTEsIDB4MzQsIDB4ZWEsIDB4ZTMsIDB4OTIsIDB4MGEsIDB4MDYsIDB4MDEsIDB4N2YsIDB4NzAsIDB4NWMsIDB4ODYsCisgIDB4NTgsIDB4ZDAsIDB4NzYsIDB4YWMsIDB4ZDYsIDB4ZGYsIDB4YTksIDB4NjIsIDB4NzAsIDB4M2IsIDB4MzMsIDB4ZTUsCisgIDB4NDYsIDB4MTYsIDB4NTcsIDB4YjYsIDB4YzUsIDB4ZmMsIDB4MzIsIDB4YTAsIDB4OWIsIDB4YzIsIDB4ZTMsIDB4YzcsCisgIDB4YzAsIDB4ZDQsIDB4NjksIDB4ZDIsIDB4MGUsIDB4N2YsIDB4NzksIDB4ODIsIDB4YWIsIDB4MGYsIDB4MjUsIDB4MmIsCisgIDB4ZWMsIDB4YjUsIDB4Y2UsIDB4MTMsIDB4NDksIDB4NTcsIDB4ZjgsIDB4ZTAsIDB4YTksIDB4MTIsIDB4YTQsIDB4OGQsCisgIDB4M2IsIDB4MTUsIDB4MDAsIDB4NjYsIDB4MjcsIDB4MjcsIDB4MmQsIDB4N2EsIDB4NjIsIDB4YzYsIDB4M2UsIDB4NzksCisgIDB4NjAsIDB4ZDQsIDB4OTUsIDB4NjYsIDB4NjYsIDB4OTIsIDB4MmMsIDB4OTksIDB4NmIsIDB4ZjcsIDB4YTEsIDB4NWUsCisgIDB4MmQsIDB4ZDgsIDB4ZWQsIDB4NDMsIDB4YWEsIDB4YmUsIDB4OTQsIDB4ZTAsIDB4ZmMsIDB4MmYsIDB4MWMsIDB4Y2EsCisgIDB4ZmIsIDB4ODcsIDB4NjEsIDB4OWMsIDB4M2QsIDB4NzAsIDB4MmMsIDB4ZWMsIDB4OTEsIDB4NjMsIDB4OTEsIDB4MTUsCisgIDB4MzksIDB4NDAsIDB4ZDgsIDB4MjQsIDB4MzEsIDB4YTksIDB4NTAsIDB4MWYsIDB4MzYsIDB4NDAsIDB4NDMsIDB4MTYsCisgIDB4MzcsIDB4MDUsIDB4Y2YsIDB4MDQsIDB4ZTksIDB4OTgsIDB4NTUsIDB4Y2IsIDB4YjMsIDB4YTMsIDB4NTUsIDB4NTEsCisgIDB4ZDUsIDB4YjMsIDB4NTMsIDB4ZjksIDB4MzQsIDB4NzUsIDB4OGIsIDB4ODEsIDB4MWIsIDB4OGYsIDB4YjcsIDB4OTQsCisgIDB4MDksIDB4OTIsIDB4MjQsIDB4NTMsIDB4YTksIDB4ZTUsIDB4Y2MsIDB4ZmUsIDB4ZTIsIDB4NmUsIDB4MDMsIDB4NmMsCisgIDB4ZGIsIDB4MTEsIDB4NDUsIDB4MTQsIDB4Y2MsIDB4MWIsIDB4M2EsIDB4MjQsIDB4NWQsIDB4YjcsIDB4NmMsIDB4NjQsCisgIDB4OTksIDB4M2UsIDB4ZTksIDB4MWEsIDB4MzIsIDB4ZTgsIDB4ZWUsIDB4M2YsIDB4NjAsIDB4MDcsIDB4ZjAsIDB4ZjcsCisgIDB4ZDcsIDB4NjYsIDB4NDUsIDB4MDYsIDB4MjMsIDB4YjUsIDB4OTEsIDB4YWQsIDB4MGIsIDB4MGIsIDB4YzksIDB4MjgsCisgIDB4NzUsIDB4OTAsIDB4NmYsIDB4MDUsIDB4ZDMsIDB4OGIsIDB4MTYsIDB4NDEsIDB4YTIsIDB4YzEsIDB4NmEsIDB4ODYsCisgIDB4YTcsIDB4MjUsIDB4ZjgsIDB4OTIsIDB4NjAsIDB4ZjksIDB4NWEsIDB4MDMsIDB4ZjYsIDB4ODUsIDB4NWIsIDB4MTgsCisgIDB4MjcsIDB4ODMsIDB4MjcsIDB4ZGQsIDB4OGUsIDB4MzAsIDB4ZWQsIDB4ZGIsIDB4YmQsIDB4MmEsIDB4M2MsIDB4YTQsCisgIDB4NzYsIDB4NjQsIDB4YjMsIDB4OTQsIDB4MGYsIDB4NzEsIDB4YzcsIDB4ZDIsIDB4M2EsIDB4ZjYsIDB4NTIsIDB4ZTYsCisgIDB4NjgsIDB4ODYsIDB4MTAsIDB4ZWIsIDB4MDcsIDB4YzUsIDB4MWEsIDB4MWQsIDB4OTcsIDB4NzAsIDB4NmMsIDB4ZTcsCisgIDB4MWMsIDB4ZmQsIDB4ZWEsIDB4NDksIDB4OTIsIDB4ZWYsIDB4NzcsIDB4Y2MsIDB4OTIsIDB4N2UsIDB4YWMsIDB4OTMsCisgIDB4NDgsIDB4NDQsIDB4YTcsIDB4MDksIDB4YjMsIDB4ZDQsIDB4MWEsIDB4ZDEsIDB4M2EsIDB4NGMsIDB4ZTksIDB4OWEsCisgIDB4NDEsIDB4YWQsIDB4NDMsIDB4OTUsIDB4MzYsIDB4ZDcsIDB4YmUsIDB4MmIsIDB4YzMsIDB4ZjQsIDB4MTEsIDB4MzEsCisgIDB4OTcsIDB4ZDEsIDB4NjUsIDB4MzUsIDB4MGMsIDB4NjQsIDB4NmQsIDB4ODAsIDB4NGQsIDB4OGMsIDB4OGUsIDB4N2IsCisgIDB4NTIsIDB4OTksIDB4ODUsIDB4YzIsIDB4MzEsIDB4M2UsIDB4N2UsIDB4MTUsIDB4NzIsIDB4ODEsIDB4ZWIsIDB4OGYsCisgIDB4MWMsIDB4NzAsIDB4MDcsIDB4NzQsIDB4MjIsIDB4ZmEsIDB4MTcsIDB4NTcsIDB4MTEsIDB4MjAsIDB4OGQsIDB4ZGEsCisgIDB4MTAsIDB4ZjEsIDB4OTUsIDB4ZGEsIDB4NTAsIDB4M2EsIDB4ZGMsIDB4NzQsIDB4YWQsIDB4YzUsIDB4ZGIsIDB4MWQsCisgIDB4ZWQsIDB4NDAsIDB4ZGIsIDB4YmUsIDB4N2YsIDB4NDAsIDB4NmMsIDB4NzIsIDB4OWYsIDB4Y2YsIDB4YWQsIDB4OWYsCisgIDB4OWEsIDB4NGEsIDB4ZjcsIDB4YWQsIDB4YWEsIDB4NTksIDB4ZWYsIDB4OWYsIDB4YzUsIDB4YjgsIDB4ZjgsIDB4NWQsCisgIDB4ZWQsIDB4OTQsIDB4ZDEsIDB4NDAsIDB4ZDUsIDB4ZDIsIDB4ZWIsIDB4NjUsIDB4MWYsIDB4M2QsIDB4Y2EsIDB4OWIsCisgIDB4ODcsIDB4NGMsIDB4MmQsIDB4YTMsIDB4Y2QsIDB4ZTMsIDB4NjQsIDB4N2EsIDB4YmMsIDB4YmYsIDB4YmIsIDB4ZjMsCisgIDB4ZDksIDB4NGUsIDB4MzcsIDB4MDMsIDB4MDcsIDB4NmMsIDB4MDgsIDB4MWYsIDB4M2IsIDB4NzcsIDB4NDQsIDB4OTgsCisgIDB4YjAsIDB4MGYsIDB4OGQsIDB4NzAsIDB4MjcsIDB4MDgsIDB4OGIsIDB4ZTgsIDB4MjEsIDB4YzksIDB4NTEsIDB4OTEsCisgIDB4MmUsIDB4Y2QsIDB4OGYsIDB4MTgsIDB4NDksIDB4YWEsIDB4ZGUsIDB4NDMsIDB4NzUsIDB4YjksIDB4MzksIDB4NzYsCisgIDB4MDEsIDB4OGIsIDB4MjYsIDB4MzgsIDB4MzcsIDB4YmUsIDB4OGIsIDB4MTUsIDB4NzQsIDB4YTQsIDB4NmQsIDB4ZmEsCisgIDB4MmEsIDB4N2UsIDB4YjUsIDB4YjksIDB4MzEsIDB4ZTMsIDB4YmQsIDB4NTYsIDB4ZjUsIDB4Y2UsIDB4YjQsIDB4OGEsCisgIDB4M2UsIDB4YjgsIDB4NWIsIDB4NWIsIDB4OTQsIDB4ZDUsIDB4ZTQsIDB4MTEsIDB4Y2UsIDB4YzcsIDB4YWYsIDB4OTksCisgIDB4MGMsIDB4NTEsIDB4MTAsIDB4MWYsIDB4YTAsIDB4MmYsIDB4ZmMsIDB4NTgsIDB4YzYsIDB4YzcsIDB4MzUsIDB4ZDUsCisgIDB4YTgsIDB4ZmUsIDB4ZWQsIDB4NzQsIDB4OGYsIDB4ZmYsIDB4YjAsIDB4ZjYsIDB4YWMsIDB4MGEsIDB4ODEsIDB4YTcsCisgIDB4ODUsIDB4ZjcsIDB4NzQsIDB4ZjgsIDB4NzksIDB4NTYsIDB4MmIsIDB4MTgsIDB4YTQsIDB4MmMsIDB4M2QsIDB4NzIsCisgIDB4ZjksIDB4MDYsIDB4OWIsIDB4NmYsIDB4OWIsIDB4MDMsIDB4Y2UsIDB4ZDcsIDB4MGUsIDB4NzAsIDB4ZTksIDB4NWMsCisgIDB4MjgsIDB4MGUsIDB4MWMsIDB4Y2YsIDB4OGMsIDB4ZWYsIDB4NTAsIDB4MTksIDB4YTYsIDB4MTAsIDB4ZTEsIDB4MGIsCisgIDB4YzksIDB4ZDgsIDB4ZGIsIDB4MTQsIDB4MTIsIDB4OTYsIDB4NDQsIDB4YTYsIDB4ZGQsIDB4ZTgsIDB4MjIsIDB4ZDcsCisgIDB4MmUsIDB4OTMsIDB4YjgsIDB4MjAsIDB4YWIsIDB4OGEsIDB4NjMsIDB4YjksIDB4YzEsIDB4ZTAsIDB4ZmUsIDB4M2IsCisgIDB4MzcsIDB4MGIsIDB4MmUsIDB4N2UsIDB4YWUsIDB4MWQsIDB4ODEsIDB4Y2UsIDB4NzcsIDB4ODUsIDB4NzUsIDB4YjYsCisgIDB4YzcsIDB4ODgsIDB4ZWQsIDB4OGMsIDB4NTEsIDB4NDksIDB4OWUsIDB4NzEsIDB4YjksIDB4OTMsIDB4YjQsIDB4MmEsCisgIDB4NjIsIDB4YzUsIDB4M2YsIDB4MmIsIDB4NDcsIDB4NWMsIDB4MTAsIDB4NzMsIDB4NDIsIDB4ZDEsIDB4MmUsIDB4YmUsCisgIDB4MWMsIDB4OGYsIDB4ZDcsIDB4MzEsIDB4YzUsIDB4OTEsIDB4ZWUsIDB4ZmIsIDB4ZWYsIDB4ZjgsIDB4YWEsIDB4MzYsCisgIDB4MjAsIDB4YjYsIDB4MGIsIDB4MzIsIDB4NTAsIDB4YmYsIDB4M2MsIDB4N2UsIDB4NzUsIDB4NzYsIDB4NzEsIDB4NWMsCisgIDB4Y2YsIDB4MzksIDB4MTYsIDB4MWUsIDB4YWYsIDB4YWUsIDB4ZjIsIDB4ODcsIDB4OWIsIDB4N2YsIDB4MDcsIDB4ZjQsCisgIDB4MTksIDB4OTYsIDB4NTMsIDB4NDgsIDB4NjYsIDB4N2UsIDB4ZmUsIDB4ZGQsIDB4OTEsIDB4ZWIsIDB4NWMsIDB4OWEsCisgIDB4MTksIDB4Y2YsIDB4OWUsIDB4NmIsIDB4NzEsIDB4NjAsIDB4YzQsIDB4ZjMsIDB4YWQsIDB4MTQsIDB4OGIsIDB4NzgsCisgIDB4NWEsIDB4MzEsIDB4ODEsIDB4YWIsIDB4ZTYsIDB4NTIsIDB4YmEsIDB4ZWUsIDB4MDksIDB4ZGIsIDB4MDksIDB4YWEsCisgIDB4ZWUsIDB4NjksIDB4ODEsIDB4NzcsIDB4MDEsIDB4NWEsIDB4OTYsIDB4MjUsIDB4YmIsIDB4MjgsIDB4NWMsIDB4YjMsCisgIDB4MWQsIDB4OTUsIDB4MTksIDB4ZDIsIDB4ZjcsIDB4NTIsIDB4MzEsIDB4NTcsIDB4ZDUsIDB4MWMsIDB4MDMsIDB4MDcsCisgIDB4MTgsIDB4NGIsIDB4YzAsIDB4NDYsIDB4NGUsIDB4NmUsIDB4NjQsIDB4ZmEsIDB4ZjYsIDB4MTUsIDB4NjAsIDB4NGIsCisgIDB4MzAsIDB4MGIsIDB4ZjIsIDB4OTUsIDB4NTYsIDB4ZmQsIDB4MjMsIDB4YTEsIDB4OTIsIDB4MTIsIDB4NGUsIDB4NTksCisgIDB4MDksIDB4MjIsIDB4Y2YsIDB4NTQsIDB4Y2MsIDB4MmMsIDB4ODYsIDB4MWMsIDB4NTIsIDB4MWMsIDB4NDYsIDB4N2YsCisgIDB4MTcsIDB4OTYsIDB4Y2MsIDB4MmIsIDB4NjEsIDB4ODgsIDB4NTksIDB4NDcsIDB4NTcsIDB4NjMsIDB4ZGYsIDB4ZGYsCisgIDB4MmMsIDB4NDksIDB4YjMsIDB4ZjgsIDB4MmUsIDB4YmIsIDB4ZjksIDB4YjMsIDB4YTIsIDB4YjAsIDB4N2YsIDB4ZTksCisgIDB4ZmIsIDB4NGIsIDB4NzksIDB4MDcsIDB4ZWIsIDB4YTIsIDB4MjMsIDB4MWYsIDB4NTUsIDB4Y2YsIDB4MDgsIDB4OGIsCisgIDB4Y2MsIDB4YzgsIDB4MDUsIDB4OWQsIDB4YmIsIDB4NGIsIDB4ODYsIDB4ZGEsIDB4YzgsIDB4NDcsIDB4ZGQsIDB4MzksCisgIDB4ZWEsIDB4OGUsIDB4YTEsIDB4NGYsIDB4NTgsIDB4Y2MsIDB4Y2QsIDB4N2IsIDB4NmQsIDB4YmMsIDB4ZGMsIDB4YWEsCisgIDB4OWIsIDB4YWMsIDB4OTEsIDB4YzEsIDB4NjMsIDB4ZGMsIDB4M2MsIDB4MDEsIDB4YWQsIDB4ODQsIDB4ODMsIDB4ZjEsCisgIDB4YzQsIDB4MTMsIDB4MjUsIDB4NGIsIDB4ZmQsIDB4YzEsIDB4MzAsIDB4ZjQsIDB4NjAsIDB4ZDIsIDB4MjgsIDB4MWYsCisgIDB4YjIsIDB4MGEsIDB4YzEsIDB4NDIsIDB4ZGMsIDB4YWIsIDB4YTYsIDB4NzksIDB4NTEsIDB4YjQsIDB4ZWYsIDB4MWYsCisgIDB4MmMsIDB4NGQsIDB4NWUsIDB4NzYsIDB4NGIsIDB4NzgsIDB4MGYsIDB4OWYsIDB4M2YsIDB4N2IsIDB4Y2UsIDB4NWIsCisgIDB4MGYsIDB4MDUsIDB4MTAsIDB4MzUsIDB4YTEsIDB4NTAsIDB4YjEsIDB4ODAsIDB4YTAsIDB4MmIsIDB4YWIsIDB4MTUsCisgIDB4MmYsIDB4NmQsIDB4ZTksIDB4MDMsIDB4OTMsIDB4MDAsIDB4YmQsIDB4MTYsIDB4NGMsIDB4OTIsIDB4YjksIDB4NTAsCisgIDB4YzUsIDB4OGQsIDB4ODMsIDB4NjYsIDB4NDYsIDB4NmIsIDB4YWYsIDB4NTEsIDB4ZWIsIDB4Y2EsIDB4MTEsIDB4NDIsCisgIDB4Y2YsIDB4NjksIDB4YjEsIDB4NjgsIDB4NWEsIDB4ODEsIDB4ZjgsIDB4NTYsIDB4OTEsIDB4Y2MsIDB4NzEsIDB4ZDAsCisgIDB4M2IsIDB4YjcsIDB4ZTYsIDB4ZTYsIDB4MmMsIDB4NmMsIDB4OTcsIDB4YTEsIDB4MTAsIDB4ZWMsIDB4MjYsIDB4Y2MsCisgIDB4MTgsIDB4ZGUsIDB4ZmUsIDB4ZDQsIDB4NDMsIDB4MDQsIDB4MTQsIDB4MzYsIDB4ZmYsIDB4YmMsIDB4ZTUsIDB4YjIsCisgIDB4OGUsIDB4NGQsIDB4MzYsIDB4MzksIDB4NDAsIDB4OTUsIDB4NjYsIDB4YWIsIDB4MjQsIDB4Y2MsIDB4YWQsIDB4ZWYsCisgIDB4MWUsIDB4MmMsIDB4OTYsIDB4MTMsIDB4OTMsIDB4ZDcsIDB4YzQsIDB4YmEsIDB4MGIsIDB4MzMsIDB4N2EsIDB4OTUsCisgIDB4MmYsIDB4YTMsIDB4ZDgsIDB4NDgsIDB4ZjYsIDB4NzUsIDB4ZTksIDB4ZGIsIDB4ODgsIDB4MjAsIDB4MWUsIDB4MDcsCisgIDB4NjAsIDB4OTUsIDB4NWEsIDB4NWUsIDB4ZDksIDB4MGUsIDB4MzAsIDB4MzIsIDB4M2EsIDB4MzIsIDB4ODQsIDB4ZWIsCisgIDB4NGQsIDB4MTYsIDB4MDcsIDB4YzEsIDB4ZmUsIDB4NzEsIDB4NzUsIDB4YWIsIDB4Y2IsIDB4YWUsIDB4ZTYsIDB4YTQsCisgIDB4MzgsIDB4NDksIDB4YjgsIDB4MjgsIDB4MDIsIDB4ODgsIDB4YjUsIDB4OWQsIDB4NjQsIDB4NTQsIDB4MzIsIDB4ZDgsCisgIDB4ZDYsIDB4YWEsIDB4ZjksIDB4OGMsIDB4OWQsIDB4YTIsIDB4MjEsIDB4MjUsIDB4NzYsIDB4ZDQsIDB4OTUsIDB4OTYsCisgIDB4YWMsIDB4ODMsIDB4YTYsIDB4OTksIDB4OWMsIDB4OTYsIDB4Y2MsIDB4YWUsIDB4NjEsIDB4NTksIDB4M2QsIDB4YzgsCisgIDB4N2QsIDB4M2UsIDB4YTEsIDB4ZmQsIDB4NDAsIDB4M2YsIDB4NWMsIDB4YTIsIDB4M2UsIDB4MDEsIDB4NDAsIDB4OTgsCisgIDB4YzIsIDB4MzEsIDB4ZGEsIDB4YTIsIDB4YTUsIDB4NTcsIDB4YzQsIDB4MzEsIDB4NGIsIDB4NDIsIDB4ZjQsIDB4Y2EsCisgIDB4YTcsIDB4MzMsIDB4YTgsIDB4OTcsIDB4NGMsIDB4ZDgsIDB4MzcsIDB4YWYsIDB4ODAsIDB4MzgsIDB4ZjYsIDB4YmIsCisgIDB4MTEsIDB4NjMsIDB4YzIsIDB4NzcsIDB4ZDcsIDB4MDgsIDB4NWQsIDB4Y2IsIDB4YjEsIDB4MzMsIDB4YmQsIDB4YjksCisgIDB4MmUsIDB4OTYsIDB4OTIsIDB4ZjEsIDB4ZGIsIDB4NTUsIDB4M2MsIDB4MjIsIDB4MzAsIDB4NmUsIDB4ZTQsIDB4NDksCisgIDB4NWIsIDB4NTAsIDB4YzcsIDB4MjksIDB4MmUsIDB4YWYsIDB4OWUsIDB4MWMsIDB4ZDksIDB4MGUsIDB4MGQsIDB4ZDAsCisgIDB4NGEsIDB4YjQsIDB4ZDgsIDB4ZGQsIDB4Y2QsIDB4NzksIDB4YjQsIDB4OGUsIDB4ZWMsIDB4NTUsIDB4N2YsIDB4YWEsCisgIDB4YjgsIDB4ZDYsIDB4YmMsIDB4MmQsIDB4MzcsIDB4NzksIDB4ZjAsIDB4YmYsIDB4ZTksIDB4NmUsIDB4NGUsIDB4ZGIsCisgIDB4MTAsIDB4ODgsIDB4ODYsIDB4YjQsIDB4NjAsIDB4Y2QsIDB4NDIsIDB4NWMsIDB4YWMsIDB4YTIsIDB4MjYsIDB4OGIsCisgIDB4MDIsIDB4NzMsIDB4MzksIDB4ZDgsIDB4NDcsIDB4ZGEsIDB4ZDUsIDB4NTksIDB4NmYsIDB4MTYsIDB4ZjksIDB4NGMsCisgIDB4ODIsIDB4ZjcsIDB4MWYsIDB4OWEsIDB4MGIsIDB4N2UsIDB4ZDAsIDB4ZTYsIDB4NDIsIDB4N2QsIDB4OTQsIDB4NjUsCisgIDB4MzgsIDB4MmUsIDB4MzQsIDB4YzIsIDB4ZjUsIDB4MzgsIDB4Y2IsIDB4NzUsIDB4N2EsIDB4YTAsIDB4NjksIDB4NmQsCisgIDB4OGEsIDB4NzEsIDB4ODMsIDB4ZTYsIDB4ZjEsIDB4NzIsIDB4MzgsIDB4ODQsIDB4MmMsIDB4Y2EsIDB4YTcsIDB4NTUsCisgIDB4MzAsIDB4MDIsIDB4N2UsIDB4YTAsIDB4YmIsIDB4MzksIDB4OGQsIDB4MjgsIDB4YjYsIDB4NDcsIDB4YzYsIDB4ZmUsCisgIDB4MmEsIDB4MjQsIDB4ZTcsIDB4N2MsIDB4NjgsIDB4NjQsIDB4ZmMsIDB4NjAsIDB4NmIsIDB4OTUsIDB4ZTksIDB4ODcsCisgIDB4YTIsIDB4YzUsIDB4MWIsIDB4NGIsIDB4MmMsIDB4OGIsIDB4YjMsIDB4MjYsIDB4OGUsIDB4NWQsIDB4NWIsIDB4NjAsCisgIDB4NWIsIDB4NjEsIDB4ZjQsIDB4YTEsIDB4NmIsIDB4ODEsIDB4ZjEsIDB4MGIsIDB4N2UsIDB4N2EsIDB4ZDgsIDB4ZGQsCisgIDB4OWMsIDB4NWIsIDB4NjEsIDB4ZjcsIDB4ZTAsIDB4ZGEsIDB4MDUsIDB4ZDYsIDB4NmYsIDB4YjQsIDB4NjYsIDB4NjEsCisgIDB4OWUsIDB4MjksIDB4MzUsIDB4ZTIsIDB4M2IsIDB4NDksIDB4NTEsIDB4NjUsIDB4NmEsIDB4OGYsIDB4ZWEsIDB4ZGQsCisgIDB4ZTMsIDB4MTMsIDB4MzIsIDB4Y2YsIDB4OGMsIDB4OGIsIDB4OTYsIDB4YjksIDB4ODEsIDB4YmMsIDB4YTIsIDB4NTAsCisgIDB4ZTgsIDB4NjEsIDB4NWMsIDB4NjcsIDB4YTksIDB4OGQsIDB4MDQsIDB4YjQsIDB4YjMsIDB4NDYsIDB4ZWMsIDB4ZmQsCisgIDB4ZjcsIDB4MjIsIDB4Y2YsIDB4MjEsIDB4NGIsIDB4NzcsIDB4OGEsIDB4MzQsIDB4ZDMsIDB4MmEsIDB4MzQsIDB4YWEsCisgIDB4NjAsIDB4ODIsIDB4M2UsIDB4NzYsIDB4YzUsIDB4M2UsIDB4ODIsIDB4MTAsIDB4NDgsIDB4NmIsIDB4ODgsIDB4OGIsCisgIDB4NWIsIDB4NzYsIDB4NTAsIDB4MzksIDB4YzMsIDB4ZTAsIDB4ZGQsIDB4N2EsIDB4ZGMsIDB4MDMsIDB4MDQsIDB4MGQsCisgIDB4NGYsIDB4ZGIsIDB4NmEsIDB4Y2IsIDB4OTAsIDB4MmMsIDB4OTMsIDB4MmIsIDB4YTAsIDB4MjIsIDB4NzYsIDB4ZGIsCisgIDB4ZjksIDB4MTEsIDB4MzksIDB4YWUsIDB4N2YsIDB4ZDIsIDB4ZWQsIDB4YzksIDB4NjYsIDB4ZmYsIDB4OTYsIDB4ZjcsCisgIDB4MzMsIDB4ZmIsIDB4MzgsIDB4ZmYsIDB4ZDUsIDB4M2UsIDB4MWQsIDB4MTYsIDB4MmYsIDB4NzEsIDB4MTksIDB4YzYsCisgIDB4NmMsIDB4YzAsIDB4NGEsIDB4NjMsIDB4NTcsIDB4ODYsIDB4ZTIsIDB4NWIsIDB4MzMsIDB4MTUsIDB4ZGQsIDB4ZDAsCisgIDB4YmEsIDB4ZDYsIDB4YzcsIDB4MGIsIDB4YTksIDB4NzgsIDB4NjQsIDB4NmMsIDB4NjksIDB4NTgsIDB4OGUsIDB4ZjUsCisgIDB4OTMsIDB4YTMsIDB4NGYsIDB4ZmIsIDB4MmUsIDB4OGEsIDB4NzYsIDB4NzcsIDB4M2IsIDB4MjAsIDB4MGYsIDB4ZTYsCisgIDB4ZDksIDB4NmQsIDB4ODcsIDB4NDcsIDB4MTQsIDB4OWUsIDB4NTUsIDB4ODgsIDB4NmIsIDB4YTgsIDB4YmMsIDB4NTksCisgIDB4YzIsIDB4YjQsIDB4ZDUsIDB4MjIsIDB4MGIsIDB4ODAsIDB4NWYsIDB4N2UsIDB4NzgsIDB4NjcsIDB4NDksIDB4Y2YsCisgIDB4ZDcsIDB4Y2UsIDB4NzEsIDB4YjEsIDB4ZjgsIDB4YzAsIDB4MjYsIDB4YTcsIDB4MDcsIDB4ZmMsIDB4YTgsIDB4OTgsCisgIDB4ZTEsIDB4MzgsIDB4MTgsIDB4NTUsIDB4NmIsIDB4NWYsIDB4NmEsIDB4MjIsIDB4ZjUsIDB4OWEsIDB4OTksIDB4NWYsCisgIDB4ZDcsIDB4ODMsIDB4OWEsIDB4MTQsIDB4YWUsIDB4ZWYsIDB4ODksIDB4M2UsIDB4ZDksIDB4ZDksIDB4MWQsIDB4M2YsCisgIDB4YjksIDB4MWMsIDB4Y2QsIDB4NzgsIDB4ZjAsIDB4M2QsIDB4ZWIsIDB4NmUsIDB4NGUsIDB4YmIsIDB4ZWIsIDB4ZGYsCisgIDB4ZDIsIDB4ZTksIDB4MTksIDB4YjgsIDB4Y2MsIDB4NmYsIDB4YmQsIDB4Y2UsIDB4ZjMsIDB4MmQsIDB4YmEsIDB4MmQsCisgIDB4MWIsIDB4YjYsIDB4YzEsIDB4N2YsIDB4OTEsIDB4ODIsIDB4ZTAsIDB4M2IsIDB4ZGIsIDB4M2MsIDB4MmMsIDB4NGUsCisgIDB4NTksIDB4MDAsIDB4OWQsIDB4MDksIDB4YjAsIDB4YzgsIDB4MGIsIDB4ZmMsIDB4ZTcsIDB4ZjMsIDB4YjUsIDB4YTUsCisgIDB4NmIsIDB4YzcsIDB4YmUsIDB4N2UsIDB4ZWQsIDB4ODUsIDB4MDQsIDB4MGYsIDB4NTksIDB4OWIsIDB4MzAsIDB4YzEsCisgIDB4OTMsIDB4YTIsIDB4NGQsIDB4MzYsIDB4MTksIDB4OTksIDB4MjQsIDB4ZjUsIDB4YjgsIDB4NDEsIDB4N2IsIDB4Y2MsCisgIDB4YjgsIDB4ZjcsIDB4YWUsIDB4YWEsIDB4NjEsIDB4NWIsIDB4MDYsIDB4YTgsIDB4OGQsIDB4YTUsIDB4YzQsIDB4ZWUsCisgIDB4MzYsIDB4ZGQsIDB4ZDksIDB4MDcsIDB4NTEsIDB4ZmQsIDB4NjYsIDB4NjYsIDB4ZTYsIDB4MzUsIDB4NTcsIDB4ZTUsCisgIDB4NTEsIDB4NTgsIDB4MzEsIDB4N2YsIDB4YmEsIDB4NjksIDB4YzQsIDB4NWMsIDB4ZjAsIDB4ODcsIDB4NGIsIDB4YjMsCisgIDB4MzYsIDB4YzMsIDB4MjIsIDB4YjAsIDB4NWMsIDB4MDUsIDB4ZDQsIDB4OTksIDB4ZjIsIDB4NGMsIDB4ZDMsIDB4ZDQsCisgIDB4OWEsIDB4YzAsIDB4OWQsIDB4ZTEsIDB4ZDMsIDB4ZTcsIDB4Y2YsIDB4NmIsIDB4NDcsIDB4NWEsIDB4NzgsIDB4N2YsCisgIDB4N2UsIDB4YjYsIDB4YjMsIDB4MjMsIDB4ZTQsIDB4NTUsIDB4Y2QsIDB4ZDcsIDB4ZTgsIDB4MTcsIDB4YzMsIDB4ZTcsCisgIDB4NzgsIDB4YjEsIDB4ZmUsIDB4OWEsIDB4ZDAsIDB4YzcsIDB4YWQsIDB4N2YsIDB4NmYsIDB4YzgsIDB4YmYsIDB4ZTksCisgIDB4ZjgsIDB4MWMsIDB4ZWUsIDB4ZjgsIDB4NmIsIDB4ZGYsIDB4N2EsIDB4Y2UsIDB4OWYsIDB4ZWIsIDB4NzgsIDB4MGIsCisgIDB4MGYsIDB4Y2IsIDB4MzQsIDB4ZTYsIDB4NTcsIDB4NTcsIDB4NGMsIDB4YzYsIDB4YzMsIDB4NGYsIDB4NGEsIDB4NjksCisgIDB4OWEsIDB4YmMsIDB4YjgsIDB4OGYsIDB4OGIsIDB4NTksIDB4N2IsIDB4YjgsIDB4M2IsIDB4ODMsIDB4ZTEsIDB4ZWUsCisgIDB4YmEsIDB4ZTEsIDB4YmEsIDB4MzIsIDB4YmQsIDB4NTgsIDB4NGYsIDB4YmUsIDB4NDEsIDB4OTEsIDB4MDEsIDB4YmQsCisgIDB4ZjksIDB4ZjUsIDB4NTYsIDB4ZDcsIDB4ZTgsIDB4M2YsIDB4ZGQsIDB4ZDksIDB4MTksIDB4N2MsIDB4YzIsIDB4ZmYsCisgIDB4N2QsIDB4ZmUsIDB4N2MsIDB4NmQsIDB4OTgsIDB4Y2EsIDB4N2YsIDB4ZTMsIDB4ODksIDB4MGQsIDB4YWQsIDB4ZDYsCisgIDB4NWIsIDB4NmEsIDB4YTcsIDB4YTMsIDB4ZjUsIDB4NWQsIDB4NmEsIDB4NzUsIDB4ZjcsIDB4ZjksIDB4ZjMsIDB4MDEsCisgIDB4N2YsIDB4ZTUsIDB4ZDksIDB4NDcsIDB4YjUsIDB4NWUsIDB4ZGQsIDB4ZTcsIDB4ZGUsIDB4ZGIsIDB4YzIsIDB4YWYsCisgIDB4N2IsIDB4NzksIDB4MmMsIDB4MWIsIDB4MjMsIDB4ZTAsIDB4MWIsIDB4YzEsIDB4NGIsIDB4ZDAsIDB4NzksIDB4MDUsCisgIDB4YTksIDB4ODQsIDB4MWUsIDB4YzQsIDB4MWIsIDB4NWUsIDB4ZWEsIDB4MDAsIDB4MTgsIDB4NTgsIDB4ODIsIDB4OTUsCisgIDB4NDMsIDB4MmUsIDB4MTYsIDB4NzYsIDB4NmQsIDB4ODksIDB4M2QsIDB4NjAsIDB4ZDUsIDB4NWMsIDB4ZmEsIDB4MWUsCisgIDB4Y2EsIDB4MmMsIDB4ZjgsIDB4NzUsIDB4NTQsIDB4NDEsIDB4MGYsIDB4Y2MsIDB4ZTEsIDB4NjgsIDB4OTMsIDB4ZTQsCisgIDB4NjUsIDB4MGIsIDB4M2UsIDB4ODQsIDB4YmIsIDB4NzgsIDB4OWUsIDB4M2EsIDB4ODgsIDB4NzcsIDB4MWYsIDB4ODAsCisgIDB4MmYsIDB4YTEsIDB4NjQsIDB4ZTksIDB4ZjMsIDB4ODUsIDB4YTIsIDB4Y2YsIDB4YTUsIDB4MWMsIDB4ZTcsIDB4MzMsCisgIDB4NjcsIDB4ZjYsIDB4ZWIsIDB4MjEsIDB4MjIsIDB4Y2YsIDB4MGQsIDB4ZTUsIDB4MDksIDB4ZDksIDB4NjgsIDB4YjgsCisgIDB4MDQsIDB4YmUsIDB4MWYsIDB4MDksIDB4YTEsIDB4MzgsIDB4ODMsIDB4MzIsIDB4MWEsIDB4ZGYsIDB4OGMsIDB4M2MsCisgIDB4ZWIsIDB4OTcsIDB4MjcsIDB4NmUsIDB4ODUsIDB4NGEsIDB4NTcsIDB4ODQsIDB4OTcsIDB4MWYsIDB4NmEsIDB4YmYsCisgIDB4MGMsIDB4NDgsIDB4YWMsIDB4Y2QsIDB4YzksIDB4MTQsIDB4OTYsIDB4NTcsIDB4OTksIDB4MjUsIDB4NDYsIDB4YTcsCisgIDB4NWIsIDB4MmYsIDB4NjYsIDB4ZTksIDB4NWUsIDB4MTcsIDB4NDcsIDB4Y2UsIDB4NGEsIDB4MmUsIDB4YjAsIDB4N2UsCisgIDB4OTMsIDB4ZmQsIDB4ZTAsIDB4MzMsIDB4YjIsIDB4MTAsIDB4YWQsIDB4ZTQsIDB4MmIsIDB4ZWQsIDB4N2QsIDB4NWMsCisgIDB4MjQsIDB4OTYsIDB4NGIsIDB4NGEsIDB4NTcsIDB4NmQsIDB4ZGIsIDB4ZmIsIDB4OGUsIDB4YTEsIDB4NWYsIDB4MDksCisgIDB4ZjcsIDB4MDUsIDB4YmUsIDB4MWQsIDB4ZDUsIDB4Y2EsIDB4MDksIDB4MWIsIDB4NzEsIDB4YjEsIDB4MDYsIDB4M2MsCisgIDB4NjcsIDB4OGEsIDB4MmQsIDB4MTEsIDB4ZDIsIDB4MGUsIDB4NzEsIDB4ZmQsIDB4MjIsIDB4YTEsIDB4MmEsIDB4YzQsCisgIDB4ZjksIDB4MDksIDB4ZDcsIDB4YjQsIDB4MGUsIDB4NTksIDB4ZTgsIDB4MjgsIDB4MzcsIDB4MWEsIDB4OTgsIDB4ZWEsCisgIDB4ZWIsIDB4NDQsIDB4MzAsIDB4Y2IsIDB4YzIsIDB4ZWYsIDB4ZTgsIDB4MmEsIDB4NjAsIDB4YmIsIDB4NTEsIDB4MTgsCisgIDB4MTUsIDB4MWEsIDB4NTQsIDB4OTIsIDB4NGMsIDB4YmUsIDB4YjEsIDB4YmIsIDB4NjksIDB4NDksIDB4NzgsIDB4OGIsCisgIDB4NGQsIDB4MGEsIDB4NTcsIDB4MjYsIDB4YjgsIDB4N2UsIDB4NmEsIDB4MmIsIDB4YzYsIDB4OGIsIDB4ZTUsIDB4OTQsCisgIDB4MjAsIDB4YWQsIDB4MWEsIDB4YzksIDB4NjEsIDB4ODgsIDB4N2QsIDB4MTAsIDB4ZjksIDB4MGEsIDB4MWMsIDB4MDYsCisgIDB4YzYsIDB4YTQsIDB4OWEsIDB4NGIsIDB4MjQsIDB4N2YsIDB4NmIsIDB4ODQsIDB4M2UsIDB4YjAsIDB4N2MsIDB4Y2EsCisgIDB4NGEsIDB4ZjAsIDB4NjcsIDB4YzMsIDB4MjUsIDB4NGQsIDB4ZGUsIDB4NTcsIDB4NjAsIDB4M2UsIDB4MGUsIDB4NmYsCisgIDB4ZmQsIDB4ZDEsIDB4ZjgsIDB4ZTQsIDB4N2YsIDB4MWMsIDB4OGYsIDB4NDIsIDB4ZjAsIDB4ZTUsIDB4NmYsIDB4ZTQsCisgIDB4NmYsIDB4YmMsIDB4MDgsIDB4YjAsIDB4ZmMsIDB4ZmMsIDB4NWEsIDB4MTcsIDB4OGUsIDB4M2UsIDB4MjAsIDB4MmEsCisgIDB4ZjMsIDB4MzUsIDB4MDEsIDB4ZGMsIDB4ZWQsIDB4YjYsIDB4ODYsIDB4YzMsIDB4ODQsIDB4ZGMsIDB4MjQsIDB4MjgsCisgIDB4ZDMsIDB4ZDUsIDB4NjUsIDB4YTgsIDB4YTEsIDB4NjMsIDB4NTUsIDB4YmMsIDB4NTgsIDB4NDYsIDB4MWQsIDB4NjksCisgIDB4MjAsIDB4MDIsIDB4MzUsIDB4MzEsIDB4NmUsIDB4MjksIDB4YjYsIDB4YWEsIDB4M2QsIDB4MjIsIDB4MjQsIDB4YmUsCisgIDB4ZWQsIDB4NzIsIDB4MjksIDB4MDUsIDB4YzksIDB4MjksIDB4YjIsIDB4ZWMsIDB4ZjQsIDB4MWUsIDB4NDIsIDB4YjQsCisgIDB4ZWUsIDB4M2IsIDB4YTEsIDB4ZTMsIDB4OTgsIDB4NGYsIDB4ZTIsIDB4N2MsIDB4MjEsIDB4YWMsIDB4MmMsIDB4OWQsCisgIDB4YzksIDB4NjMsIDB4OTIsIDB4MzgsIDB4MWUsIDB4OTIsIDB4MWYsIDB4M2EsIDB4NjMsIDB4NDgsIDB4NjgsIDB4YTQsCisgIDB4YTQsIDB4NDIsIDB4MTYsIDB4MDMsIDB4OTgsIDB4MTAsIDB4NGYsIDB4MGMsIDB4YTksIDB4NmUsIDB4M2IsIDB4MjAsCisgIDB4ZTUsIDB4NTYsIDB4ZmQsIDB4MTcsIDB4Y2MsIDB4MDQsIDB4ZjIsIDB4ZjEsIDB4MDgsIDB4NGMsIDB4NDAsIDB4YWUsCisgIDB4YzgsIDB4MjAsIDB4NzgsIDB4ODUsIDB4M2MsIDB4NGYsIDB4NTUsIDB4ODksIDB4Y2EsIDB4OTIsIDB4YTAsIDB4MzEsCisgIDB4ZTYsIDB4ODcsIDB4NWIsIDB4ZDUsIDB4NjYsIDB4MzgsIDB4NTUsIDB4MTMsIDB4MGUsIDB4ODYsIDB4NDYsIDB4MDEsCisgIDB4ZTQsIDB4NTEsIDB4MmIsIDB4NTUsIDB4MjksIDB4YjksIDB4OWUsIDB4ODUsIDB4ZWMsIDB4MzMsIDB4ZjUsIDB4NTksCisgIDB4YjgsIDB4YWYsIDB4MmQsIDB4NmIsIDB4MWEsIDB4NDAsIDB4MjUsIDB4ZTIsIDB4YjksIDB4NWMsIDB4NjAsIDB4MGEsCisgIDB4ZTYsIDB4NGYsIDB4ODEsIDB4ZWYsIDB4OWQsIDB4YWUsIDB4MzUsIDB4ZjksIDB4NGMsIDB4NzksIDB4OWIsIDB4YjQsCisgIDB4OTIsIDB4NDgsIDB4ZDQsIDB4NGUsIDB4OTMsIDB4ZjMsIDB4ZGMsIDB4ZTUsIDB4OWMsIDB4YWEsIDB4MzksIDB4MDMsCisgIDB4MTMsIDB4OWUsIDB4MmMsIDB4YTYsIDB4NmUsIDB4NGEsIDB4NDcsIDB4ZGQsIDB4YjIsIDB4MDAsIDB4M2UsIDB4NWQsCisgIDB4ZDIsIDB4NDUsIDB4NTcsIDB4ZjQsIDB4MTUsIDB4MTQsIDB4ZDAsIDB4NjksIDB4ZmEsIDB4MzEsIDB4YTksIDB4OGIsCisgIDB4MmQsIDB4OGUsIDB4ZjUsIDB4NWEsIDB4MjgsIDB4MzUsIDB4YzgsIDB4M2QsIDB4NjEsIDB4MDQsIDB4YzcsIDB4NjMsCisgIDB4YjEsIDB4ZmYsIDB4MWIsIDB4MzEsIDB4MjcsIDB4NmEsIDB4YTEsIDB4NGEsIDB4ZTEsIDB4MGIsIDB4NDYsIDB4OWQsCisgIDB4NDgsIDB4MWEsIDB4YjAsIDB4Y2IsIDB4ZjgsIDB4MjksIDB4YmIsIDB4OWQsIDB4YjQsIDB4YjMsIDB4MjQsIDB4YjYsCisgIDB4NTQsIDB4NGEsIDB4MjksIDB4MGEsIDB4ZGMsIDB4Y2UsIDB4N2YsIDB4NDEsIDB4ODUsIDB4NjAsIDB4NDcsIDB4ZTksCisgIDB4MDYsIDB4YTAsIDB4NTQsIDB4MmUsIDB4NzUsIDB4M2IsIDB4ZTksIDB4ZjksIDB4MGUsIDB4ODIsIDB4NWQsIDB4YzMsCisgIDB4YTUsIDB4ZDcsIDB4MjgsIDB4OWUsIDB4ZDAsIDB4MWYsIDB4M2IsIDB4MDcsIDB4YTcsIDB4NDgsIDB4ZGUsIDB4MTMsCisgIDB4ZGYsIDB4NmYsIDB4N2QsIDB4YmMsIDB4MWQsIDB4ZWMsIDB4MDQsIDB4ZTIsIDB4YTAsIDB4OWQsIDB4MjQsIDB4NDIsCisgIDB4ZDksIDB4MDEsIDB4NGQsIDB4MGEsIDB4Y2QsIDB4MDksIDB4MWYsIDB4MjMsIDB4ZWIsIDB4OTksIDB4ZGUsIDB4MzAsCisgIDB4OGYsIDB4ODYsIDB4M2QsIDB4YjYsIDB4YmMsIDB4NDAsIDB4OWMsIDB4MTAsIDB4MzQsIDB4MzcsIDB4N2EsIDB4MjQsCisgIDB4NjYsIDB4YmYsIDB4ZmIsIDB4YmMsIDB4Y2UsIDB4OTUsIDB4YzgsIDB4MWMsIDB4Y2YsIDB4NzMsIDB4ZDIsIDB4ZTIsCisgIDB4MmYsIDB4MzgsIDB4MGUsIDB4ODYsIDB4MzAsIDB4ZDgsIDB4ZmUsIDB4OWEsIDB4ZGMsIDB4OGMsIDB4NzMsIDB4NDcsCisgIDB4MGIsIDB4MzIsIDB4YTUsIDB4MmUsIDB4MzAsIDB4ZjQsIDB4NTgsIDB4MzEsIDB4ZTgsIDB4MzIsIDB4NDYsIDB4M2YsCisgIDB4NDgsIDB4MDEsIDB4YzYsIDB4MGIsIDB4ZjQsIDB4NTEsIDB4ZTIsIDB4NjIsIDB4Y2IsIDB4MzgsIDB4NmQsIDB4ZjksCisgIDB4YjUsIDB4ODQsIDB4MmUsIDB4MGIsIDB4MGEsIDB4YzgsIDB4ODYsIDB4YzYsIDB4ZTYsIDB4YTEsIDB4MjksIDB4MDUsCisgIDB4MmIsIDB4NGYsIDB4MjIsIDB4MzAsIDB4YzgsIDB4Y2QsIDB4NzIsIDB4Y2IsIDB4NjgsIDB4YzEsIDB4ZDYsIDB4MTgsCisgIDB4ZWIsIDB4YjUsIDB4M2MsIDB4MDcsIDB4YTUsIDB4NTgsIDB4ODQsIDB4ODMsIDB4ODEsIDB4ZDMsIDB4ZGEsIDB4ZWYsCisgIDB4ZDMsIDB4MzIsIDB4NTEsIDB4MmUsIDB4MzIsIDB4ZTAsIDB4NjEsIDB4MzAsIDB4ZTQsIDB4OTksIDB4N2YsIDB4YTksCisgIDB4MGQsIDB4OWQsIDB4OTksIDB4MDgsIDB4ZTUsIDB4MDgsIDB4ZTcsIDB4ZjAsIDB4MWYsIDB4NmEsIDB4YzksIDB4NmYsCisgIDB4MTQsIDB4MmEsIDB4OGQsIDB4NTAsIDB4NmYsIDB4OTIsIDB4ZjYsIDB4Y2QsIDB4NzYsIDB4NTIsIDB4NGQsIDB4YjcsCisgIDB4ODUsIDB4MjIsIDB4MDAsIDB4MDIsIDB4OWYsIDB4ODEsIDB4YjAsIDB4Y2EsIDB4NWQsIDB4MDksIDB4NWEsIDB4ZTUsCisgIDB4N2YsIDB4NWEsIDB4YjEsIDB4MWQsIDB4ZjEsIDB4MzksIDB4MDQsIDB4ZjQsIDB4ZGUsIDB4NDEsIDB4OWUsIDB4ODUsCisgIDB4OTQsIDB4ZWUsIDB4ZDEsIDB4NjAsIDB4NjIsIDB4ODcsIDB4NmYsIDB4ZjYsIDB4Y2EsIDB4ZDIsIDB4ZWQsIDB4ODMsCisgIDB4NDksIDB4NzcsIDB4NTEsIDB4MzcsIDB4NGIsIDB4YzMsIDB4YWYsIDB4NzMsIDB4ZjAsIDB4ZDIsIDB4MmIsIDB4OWUsCisgIDB4NTIsIDB4YmUsIDB4NDMsIDB4N2EsIDB4NTEsIDB4MDAsIDB4ZDcsIDB4OGUsIDB4MWEsIDB4ODcsIDB4ZjIsIDB4YWEsCisgIDB4ZjMsIDB4ZWQsIDB4MzgsIDB4NjIsIDB4OTgsIDB4NjAsIDB4ZTEsIDB4YmIsIDB4MTIsIDB4NTEsIDB4NzgsIDB4ZjcsCisgIDB4YTAsIDB4MDcsIDB4MDIsIDB4ZDksIDB4YjIsIDB4Y2MsIDB4MzYsIDB4NjQsIDB4MWIsIDB4OGYsIDB4M2UsIDB4NWMsCisgIDB4ZDcsIDB4ZDAsIDB4NGQsIDB4N2UsIDB4OTgsIDB4NTIsIDB4YzYsIDB4MGUsIDB4ZTcsIDB4OTksIDB4ZmUsIDB4YzQsCisgIDB4MjUsIDB4NWUsIDB4NzQsIDB4NjAsIDB4OWUsIDB4NzQsIDB4NzEsIDB4MWYsIDB4YzcsIDB4YWQsIDB4ZWMsIDB4OGUsCisgIDB4OWUsIDB4ZDQsIDB4ZjcsIDB4MDAsIDB4NWYsIDB4MDMsIDB4YmIsIDB4YTgsIDB4NDIsIDB4NjEsIDB4YjksIDB4NDEsCisgIDB4MTEsIDB4NzIsIDB4YWEsIDB4OGUsIDB4YzAsIDB4OTIsIDB4MjQsIDB4OTEsIDB4ODAsIDB4ZGQsIDB4MGEsIDB4ODksCisgIDB4MjEsIDB4NTQsIDB4MTAsIDB4ZjksIDB4NzYsIDB4YTUsIDB4NWUsIDB4MTksIDB4OGMsIDB4YzcsIDB4MGMsIDB4NDgsCisgIDB4NmQsIDB4OGEsIDB4OWIsIDB4MjAsIDB4NzQsIDB4OTQsIDB4MWEsIDB4YjksIDB4YjgsIDB4N2MsIDB4MWMsIDB4ZTcsCisgIDB4YjAsIDB4YmYsIDB4MDgsIDB4YzksIDB4OTgsIDB4ZDUsIDB4NTcsIDB4NGMsIDB4YmEsIDB4OGMsIDB4YjcsIDB4Y2EsCisgIDB4NmEsIDB4MzksIDB4NmEsIDB4MTMsIDB4OTksIDB4M2EsIDB4YTgsIDB4OTIsIDB4YmUsIDB4NGIsIDB4OWYsIDB4ZGYsCisgIDB4MDksIDB4OTMsIDB4OWEsIDB4MDAsIDB4ZTksIDB4NTcsIDB4MTAsIDB4YTksIDB4YWIsIDB4ZTgsIDB4NmEsIDB4MzgsCisgIDB4OGYsIDB4ZWUsIDB4N2EsIDB4YmEsIDB4MjAsIDB4NjIsIDB4NzQsIDB4NDMsIDB4ZDYsIDB4MzEsIDB4NmIsIDB4NTYsCisgIDB4ODIsIDB4YjAsIDB4NDQsIDB4ZWMsIDB4ZjMsIDB4YTQsIDB4MDgsIDB4MmIsIDB4ZjUsIDB4YzAsIDB4YzIsIDB4NjIsCisgIDB4NGYsIDB4ZGYsIDB4YmYsIDB4NmYsIDB4YWYsIDB4ODQsIDB4YWYsIDB4NDIsIDB4MjQsIDB4ODUsIDB4YzksIDB4ZTUsCisgIDB4ZjgsIDB4NzksIDB4ZjYsIDB4ZmUsIDB4N2QsIDB4ZmQsIDB4OTcsIDB4OGYsIDB4MTcsIDB4MGEsIDB4OGUsIDB4MjcsCisgIDB4YjksIDB4ZTQsIDB4YWQsIDB4Y2EsIDB4NGMsIDB4YzUsIDB4YzEsIDB4MmMsIDB4MWEsIDB4YWQsIDB4OWYsIDB4ZGMsCisgIDB4OGQsIDB4NDgsIDB4NGUsIDB4ZDMsIDB4NGUsIDB4Y2UsIDB4MzUsIDB4YmQsIDB4ZjIsIDB4ODksIDB4NDYsIDB4YWEsCisgIDB4MDQsIDB4NTAsIDB4MmQsIDB4YzcsIDB4MDQsIDB4OTMsIDB4MWEsIDB4ZGMsIDB4ZDAsIDB4YWUsIDB4MTQsIDB4YmUsCisgIDB4NjgsIDB4MTUsIDB4N2EsIDB4NTcsIDB4NzIsIDB4NjYsIDB4YTUsIDB4NTksIDB4MjksIDB4NGQsIDB4N2MsIDB4NDIsCisgIDB4MmMsIDB4OTUsIDB4MDgsIDB4NDAsIDB4NDgsIDB4YmUsIDB4Y2EsIDB4YWEsIDB4NzQsIDB4Y2UsIDB4ZWYsIDB4ODAsCisgIDB4OGQsIDB4OWQsIDB4NWUsIDB4ZGYsIDB4YTUsIDB4ZjksIDB4NGYsIDB4YjMsIDB4MTUsIDB4NWYsIDB4YTQsIDB4YjQsCisgIDB4NDAsIDB4NWYsIDB4NTgsIDB4ODYsIDB4YmUsIDB4NzMsIDB4ZGEsIDB4ZTcsIDB4ZjEsIDB4NDMsIDB4ZTQsIDB4NDIsCisgIDB4ZmEsIDB4YWQsIDB4NzIsIDB4ZGYsIDB4ZGEsIDB4MmYsIDB4NjEsIDB4YjMsIDB4YjEsIDB4ZmMsIDB4MTYsIDB4Y2MsCisgIDB4YzUsIDB4MTAsIDB4YWYsIDB4NzYsIDB4NzEsIDB4YmQsIDB4ZGIsIDB4MTksIDB4YTQsIDB4YzksIDB4M2MsIDB4YzksCisgIDB4N2IsIDB4OWEsIDB4NmMsIDB4NDEsIDB4ZjksIDB4NDksIDB4NGEsIDB4MWEsIDB4ZGQsIDB4ZWUsIDB4ZjgsIDB4OTQsCisgIDB4YjksIDB4Y2UsIDB4MGIsIDB4NWEsIDB4ZDAsIDB4ODUsIDB4OWEsIDB4MWEsIDB4ODIsIDB4NTcsIDB4NmMsIDB4ZTEsCisgIDB4MDUsIDB4ZTQsIDB4NTMsIDB4OGUsIDB4YTYsIDB4NWQsIDB4YjAsIDB4YTMsIDB4MjAsIDB4OWIsIDB4OTUsIDB4MDAsCisgIDB4NmIsIDB4NWUsIDB4YTksIDB4NzEsIDB4NmEsIDB4M2MsIDB4YjksIDB4OTgsIDB4NWQsIDB4ZWIsIDB4ZjUsIDB4NjMsCisgIDB4NDcsIDB4ZDEsIDB4NWUsIDB4YjgsIDB4MGQsIDB4ZDcsIDB4MWEsIDB4YzEsIDB4YTIsIDB4MGEsIDB4N2MsIDB4M2MsCisgIDB4Y2EsIDB4MGMsIDB4ZTEsIDB4MWEsIDB4Y2YsIDB4OWUsIDB4MjMsIDB4MWUsIDB4NjgsIDB4NGQsIDB4ZWUsIDB4NTQsCisgIDB4NDksIDB4MDcsIDB4YWQsIDB4MzAsIDB4NjUsIDB4NzMsIDB4ZGYsIDB4Y2IsIDB4MjQsIDB4M2UsIDB4YzIsIDB4M2UsCisgIDB4ZWYsIDB4NGIsIDB4OTUsIDB4OTcsIDB4ZjMsIDB4MjQsIDB4NTksIDB4ZGEsIDB4OWMsIDB4YmEsIDB4MDIsIDB4NGIsCisgIDB4NTYsIDB4OWEsIDB4MTQsIDB4N2IsIDB4MTUsIDB4NjYsIDB4ODIsIDB4MDgsIDB4MmEsIDB4NTQsIDB4YzMsIDB4M2EsCisgIDB4MGQsIDB4ODAsIDB4ZDMsIDB4OWQsIDB4MDMsIDB4NTIsIDB4NDYsIDB4MGMsIDB4Y2IsIDB4MjcsIDB4NjgsIDB4ZDUsCisgIDB4ZGEsIDB4NzUsIDB4Y2MsIDB4YWEsIDB4ZWEsIDB4Y2MsIDB4OWQsIDB4ZjUsIDB4NWIsIDB4ZDYsIDB4MmYsIDB4YWEsCisgIDB4YWUsIDB4ODMsIDB4MmUsIDB4YWMsIDB4MTMsIDB4MmEsIDB4NWQsIDB4OGQsIDB4NDYsIDB4NTksIDB4ZDEsIDB4MTYsCisgIDB4MmQsIDB4MTksIDB4NmUsIDB4NGEsIDB4YjAsIDB4MTUsIDB4MTMsIDB4MjksIDB4NzksIDB4ODcsIDB4ZGEsIDB4YTIsCisgIDB4MzIsIDB4MWMsIDB4ZTAsIDB4NGQsIDB4OTUsIDB4MjUsIDB4NmUsIDB4MTQsIDB4YTgsIDB4OWUsIDB4YjQsIDB4MzQsCisgIDB4MDksIDB4NmUsIDB4ZTksIDB4NjIsIDB4ODAsIDB4YzIsIDB4MzUsIDB4NTQsIDB4MWEsIDB4OTYsIDB4N2MsIDB4YjcsCisgIDB4NWIsIDB4YmMsIDB4ZjUsIDB4M2UsIDB4ZWMsIDB4N2MsIDB4YzgsIDB4ZDIsIDB4ZDIsIDB4NjgsIDB4ZWUsIDB4ZGYsCisgIDB4MjUsIDB4MzEsIDB4NWEsIDB4MTksIDB4YjksIDB4N2MsIDB4NTQsIDB4NmEsIDB4M2UsIDB4NTgsIDB4YjYsIDB4NDAsCisgIDB4YmMsIDB4OTAsIDB4OTgsIDB4M2EsIDB4N2MsIDB4NWYsIDB4NjEsIDB4NDEsIDB4MGMsIDB4YWMsIDB4YWMsIDB4YTIsCisgIDB4MjAsIDB4YTAsIDB4YWUsIDB4Y2EsIDB4Y2IsIDB4MDksIDB4ODYsIDB4ZGUsIDB4YmMsIDB4NWEsIDB4MWUsIDB4MzQsCisgIDB4ZDUsIDB4NGUsIDB4YTYsIDB4NDgsIDB4NDAsIDB4MDYsIDB4MTAsIDB4ZjMsIDB4MzUsIDB4NjMsIDB4NDUsIDB4ZGIsCisgIDB4NmYsIDB4OTMsIDB4ZDksIDB4M2QsIDB4YjQsIDB4NmIsIDB4NWIsIDB4ZmMsIDB4NjMsIDB4YjAsIDB4ZjgsIDB4YzUsCisgIDB4YmUsIDB4M2EsIDB4NmYsIDB4ZDEsIDB4NGEsIDB4YmMsIDB4MDYsIDB4YmQsIDB4YWYsIDB4MjgsIDB4YWQsIDB4NTksCisgIDB4NDgsIDB4NDAsIDB4YWUsIDB4ZmMsIDB4ZTMsIDB4NmYsIDB4NzIsIDB4Y2UsIDB4NzQsIDB4ZDUsIDB4NWIsIDB4ZGIsCisgIDB4OTUsIDB4NmYsIDB4NDcsIDB4ZGYsIDB4NmMsIDB4OTMsIDB4ZjgsIDB4NmEsIDB4M2IsIDB4NGEsIDB4NDQsIDB4M2QsCisgIDB4YTgsIDB4OTUsIDB4MDAsIDB4YjMsIDB4NGUsIDB4MjMsIDB4ODcsIDB4NTksIDB4MDIsIDB4YzEsIDB4YzIsIDB4YTYsCisgIDB4YTUsIDB4MjcsIDB4NjUsIDB4MDcsIDB4ZTQsIDB4NGQsIDB4OGUsIDB4NDgsIDB4OGUsIDB4NzgsIDB4MDIsIDB4MzYsCisgIDB4YzEsIDB4ZTMsIDB4ZTksIDB4NjAsIDB4NGIsIDB4YzcsIDB4MGEsIDB4NTAsIDB4MjMsIDB4MjksIDB4MTMsIDB4MTAsCisgIDB4NWUsIDB4ZTYsIDB4YWEsIDB4OTcsIDB4NWEsIDB4MTksIDB4MjcsIDB4OTIsIDB4MDEsIDB4YTcsIDB4YmQsIDB4ZTksCisgIDB4OTcsIDB4OGUsIDB4ZmMsIDB4OWIsIDB4NWYsIDB4MWYsIDB4NDgsIDB4ODIsIDB4MDYsIDB4MTcsIDB4YTMsIDB4MDgsCisgIDB4YWEsIDB4NTEsIDB4NDgsIDB4NzUsIDB4ODYsIDB4YWEsIDB4ZWUsIDB4ZGMsIDB4NjgsIDB4ZjEsIDB4ZGUsIDB4NDEsCisgIDB4YzAsIDB4MmIsIDB4ZTEsIDB4ODYsIDB4YjIsIDB4MzIsIDB4MGQsIDB4NGUsIDB4NWQsIDB4N2YsIDB4OGMsIDB4YWEsCisgIDB4YWIsIDB4MjcsIDB4NWIsIDB4M2UsIDB4MjYsIDB4YmIsIDB4MWQsIDB4MTUsIDB4NzgsIDB4N2YsIDB4YTEsIDB4ZTAsCisgIDB4OTYsIDB4MjgsIDB4ZDMsIDB4OTMsIDB4Y2UsIDB4ZGIsIDB4YjgsIDB4ZmUsIDB4NzEsIDB4MmEsIDB4NjUsIDB4YjksCisgIDB4MGEsIDB4MjYsIDB4NDcsIDB4YTYsIDB4NDEsIDB4NGIsIDB4ZmEsIDB4ZjMsIDB4MTEsIDB4ZWEsIDB4ZDgsIDB4OTUsCisgIDB4MGEsIDB4MGYsIDB4YmUsIDB4ODYsIDB4YzUsIDB4MjcsIDB4NDgsIDB4MjUsIDB4NzgsIDB4N2YsIDB4OWQsIDB4NWQsCisgIDB4ZDAsIDB4ZTIsIDB4YmEsIDB4MDcsIDB4NDksIDB4ZGQsIDB4YzgsIDB4MzgsIDB4YmIsIDB4YzEsIDB4ZDQsIDB4YmEsCisgIDB4NTgsIDB4ODUsIDB4NzQsIDB4ODQsIDB4YzMsIDB4MzEsIDB4YmEsIDB4NDIsIDB4MmQsIDB4MGYsIDB4ZDEsIDB4Y2EsCisgIDB4MWEsIDB4OWEsIDB4YzIsIDB4YzQsIDB4MDEsIDB4MDYsIDB4ODYsIDB4YTUsIDB4MTgsIDB4NGMsIDB4ODEsIDB4NjEsCisgIDB4ODMsIDB4N2UsIDB4MTksIDB4NTIsIDB4ZGMsIDB4YTgsIDB4ZjEsIDB4NTgsIDB4NTIsIDB4NWIsIDB4NTUsIDB4OWQsCisgIDB4MDAsIDB4MTEsIDB4MDgsIDB4MzcsIDB4NzAsIDB4NTksIDB4Y2UsIDB4MDUsIDB4OTIsIDB4MzQsIDB4ODgsIDB4Y2UsCisgIDB4Y2YsIDB4Y2UsIDB4OWYsIDB4MGMsIDB4YTIsIDB4OTMsIDB4ZDcsIDB4MDcsIDB4ZjQsIDB4NzcsIDB4NjEsIDB4YzIsCisgIDB4YmYsIDB4OTQsIDB4MmEsIDB4ZWEsIDB4NGEsIDB4ZDIsIDB4YjYsIDB4N2QsIDB4NzksIDB4M2EsIDB4MGUsIDB4YWMsCisgIDB4NmQsIDB4N2YsIDB4M2QsIDB4NmYsIDB4NmYsIDB4NGYsIDB4NGUsIDB4ZWUsIDB4MTIsIDB4MzMsIDB4MTUsIDB4YWUsCisgIDB4M2UsIDB4OTQsIDB4NjksIDB4NDksIDB4YzIsIDB4NTIsIDB4MzYsIDB4NTYsIDB4YTgsIDB4NDUsIDB4NWMsIDB4OTcsCisgIDB4NDYsIDB4YjAsIDB4YWQsIDB4N2UsIDB4YTksIDB4ZTYsIDB4OGEsIDB4YzgsIDB4YTcsIDB4NDMsIDB4MWYsIDB4ODAsCisgIDB4NjQsIDB4Y2MsIDB4NTIsIDB4ZGYsIDB4ODcsIDB4OTYsIDB4YmYsIDB4Y2IsIDB4MWIsIDB4MDksIDB4YTMsIDB4YTEsCisgIDB4N2QsIDB4ZmYsIDB4MGYsIDB4MzksIDB4NzUsIDB4ZDUsIDB4ZGEsIDB4MWUsIDB4YjYsIDB4NmIsIDB4ZGEsIDB4NGEsCisgIDB4OWQsIDB4NTksIDB4MTQsIDB4MGMsIDB4MjUsIDB4ZDksIDB4MjksIDB4MWUsIDB4NmEsIDB4MjQsIDB4NDMsIDB4OGQsCisgIDB4ZWEsIDB4NjcsIDB4NzUsIDB4M2UsIDB4ZmQsIDB4NGUsIDB4M2IsIDB4OWQsIDB4MTksIDB4YWQsIDB4NzgsIDB4ZTcsCisgIDB4MzIsIDB4YTksIDB4YTMsIDB4MTYsIDB4NTYsIDB4YTAsIDB4OWYsIDB4YjgsIDB4M2UsIDB4ZDYsIDB4ODUsIDB4N2YsCisgIDB4OTcsIDB4OWEsIDB4MWIsIDB4YjUsIDB4OWEsIDB4OGIsIDB4YWIsIDB4MWEsIDB4MjMsIDB4MWMsIDB4NWIsIDB4ZmUsCisgIDB4NzQsIDB4ZTgsIDB4MDQsIDB4NTcsIDB4OTYsIDB4YTAsIDB4MDAsIDB4OGYsIDB4ZjAsIDB4ZTUsIDB4NDgsIDB4Y2QsCisgIDB4NGMsIDB4NmUsIDB4YjQsIDB4YjUsIDB4YzUsIDB4YWYsIDB4NTYsIDB4NzAsIDB4M2IsIDB4NmEsIDB4OGEsIDB4NWEsCisgIDB4NjMsIDB4YjUsIDB4MzEsIDB4M2YsIDB4MWQsIDB4OTAsIDB4YjQsIDB4NDEsIDB4YTQsIDB4MDIsIDB4YTAsIDB4MTIsCisgIDB4YTAsIDB4MjIsIDB4NDAsIDB4OGIsIDB4YTksIDB4N2MsIDB4NzksIDB4YTEsIDB4MDQsIDB4NjgsIDB4ZTYsIDB4ZjQsCisgIDB4OWEsIDB4ZjUsIDB4YmYsIDB4YzQsIDB4ZDYsIDB4NDMsIDB4OTQsIDB4YjMsIDB4ZmUsIDB4ZTAsIDB4ZTMsIDB4Y2IsCisgIDB4ZWUsIDB4MTYsIDB4ZmEsIDB4YTMsIDB4YWIsIDB4MWIsIDB4YWMsIDB4NWQsIDB4MGQsIDB4YmYsIDB4MWMsIDB4YmEsCisgIDB4MWUsIDB4ZjAsIDB4NTAsIDB4NzksIDB4YTksIDB4ODEsIDB4OGMsIDB4NmMsIDB4YzYsIDB4NmIsIDB4OGYsIDB4ZDYsCisgIDB4NjcsIDB4YTMsIDB4NjcsIDB4NWIsIDB4YTMsIDB4OGYsIDB4NWQsIDB4MTYsIDB4NjcsIDB4Y2UsIDB4ZWEsIDB4YTIsCisgIDB4YjQsIDB4NzksIDB4ZTYsIDB4ZTIsIDB4MGYsIDB4MmMsIDB4MDksIDB4NmMsIDB4YzUsIDB4ZTEsIDB4MjQsIDB4ODksCisgIDB4NWIsIDB4OTgsIDB4NzAsIDB4NjUsIDB4N2EsIDB4MGMsIDB4MGQsIDB4OTUsIDB4YWEsIDB4MDYsIDB4MzAsIDB4NjYsCisgIDB4NmQsIDB4MGIsIDB4NDYsIDB4ZjEsIDB4MTgsIDB4MjgsIDB4ZmQsIDB4YjAsIDB4MjYsIDB4ZDIsIDB4ZDUsIDB4M2MsCisgIDB4YmUsIDB4ZWYsIDB4ZTIsIDB4YmMsIDB4YzMsIDB4NjYsIDB4N2UsIDB4ODIsIDB4MWQsIDB4NDMsIDB4YjMsIDB4MWQsCisgIDB4ODIsIDB4NTQsIDB4NGIsIDB4MmYsIDB4YmQsIDB4NWYsIDB4MWUsIDB4MWYsIDB4OGMsIDB4MmYsIDB4NDcsIDB4NGQsCisgIDB4ODMsIDB4YTIsIDB4OTUsIDB4MzQsIDB4YzIsIDB4Y2IsIDB4NjcsIDB4MWUsIDB4MTksIDB4NjgsIDB4MDUsIDB4NzYsCisgIDB4ZGMsIDB4NzEsIDB4YTksIDB4OTksIDB4YzIsIDB4MzEsIDB4YTMsIDB4NzAsIDB4ZWYsIDB4ODYsIDB4ZDIsIDB4M2IsCisgIDB4NmIsIDB4OWYsIDB4YjMsIDB4NWMsIDB4M2EsIDB4MzgsIDB4NDgsIDB4NjAsIDB4NmMsIDB4MjEsIDB4YTAsIDB4MzgsCisgIDB4NDksIDB4ZTcsIDB4M2MsIDB4MDIsIDB4YWUsIDB4NWIsIDB4M2YsIDB4NGYsIDB4MTYsIDB4OGEsIDB4YTYsIDB4ZTcsCisgIDB4YjIsIDB4NTksIDB4NTEsIDB4M2UsIDB4NjcsIDB4ZWYsIDB4MDMsIDB4M2UsIDB4ZDMsIDB4NjQsIDB4N2YsIDB4NmMsCisgIDB4Y2EsIDB4Y2QsIDB4NzcsIDB4MDcsIDB4MTcsIDB4NmYsIDB4NGUsIDB4ZGUsIDB4N2MsIDB4YjUsIDB4NWYsIDB4YjMsCisgIDB4ODgsIDB4ZTYsIDB4NzksIDB4NWUsIDB4MjYsIDB4MWEsIDB4MDMsIDB4MTcsIDB4ZTIsIDB4NDksIDB4OTksIDB4MmQsCisgIDB4NzEsIDB4Y2QsIDB4MDYsIDB4YzUsIDB4M2YsIDB4ZGIsIDB4NjUsIDB4MDgsIDB4ZTcsIDB4ZjEsIDB4YjUsIDB4MTAsCisgIDB4NmEsIDB4OTUsIDB4YjcsIDB4OTEsIDB4MTYsIDB4ZTksIDB4MDQsIDB4MGIsIDB4M2EsIDB4OWIsIDB4MDUsIDB4YTMsCisgIDB4YzcsIDB4MGIsIDB4ZTcsIDB4OTQsIDB4ZjksIDB4ZjQsIDB4YjYsIDB4N2MsIDB4MmEsIDB4N2UsIDB4YTUsIDB4OGYsCisgIDB4YzYsIDB4NTcsIDB4OGYsIDB4Y2YsIDB4MGUsIDB4YmYsIDB4MTksIDB4M2YsIDB4MGQsIDB4ZDAsIDB4ZDUsIDB4NTUsCisgIDB4YzMsIDB4NDcsIDB4YTIsIDB4YzQsIDB4YjksIDB4NzgsIDB4YTMsIDB4OWQsIDB4OGMsIDB4ZjgsIDB4MDEsIDB4NjgsCisgIDB4ZjUsIDB4MjMsIDB4ZjUsIDB4YzIsIDB4M2EsIDB4YjcsIDB4OTUsIDB4NjcsIDB4ZGIsIDB4NjYsIDB4YWYsIDB4MDMsCisgIDB4N2IsIDB4OTUsIDB4ZDIsIDB4N2MsIDB4ZTUsIDB4NDgsIDB4NDcsIDB4MDMsIDB4YzYsIDB4OTksIDB4ODEsIDB4NTEsCisgIDB4NmYsIDB4YjcsIDB4YjIsIDB4MmQsIDB4M2QsIDB4MTEsIDB4NzcsIDB4NDAsIDB4YmQsIDB4ZGQsIDB4MDIsIDB4YTAsCisgIDB4YTEsIDB4NjAsIDB4MzMsIDB4ZmMsIDB4MTIsIDB4OWYsIDB4MGUsIDB4OWEsIDB4YzYsIDB4MmMsIDB4NjksIDB4MGEsCisgIDB4MzIsIDB4OTIsIDB4ZTYsIDB4MmIsIDB4ZmUsIDB4YjIsIDB4NTQsIDB4NzYsIDB4MzYsIDB4NGUsIDB4MDIsIDB4MDcsCisgIDB4ODcsIDB4NmMsIDB4OWUsIDB4YmYsIDB4MzIsIDB4ZjMsIDB4ODYsIDB4ZDksIDB4NjYsIDB4YjYsIDB4MDUsIDB4ZGYsCisgIDB4NTUsIDB4NWQsIDB4ZWMsIDB4NTgsIDB4OWYsIDB4ZGEsIDB4ZGYsIDB4ZGUsIDB4ZjYsIDB4OWUsIDB4MjMsIDB4YzEsCisgIDB4ZjAsIDB4OGQsIDB4N2UsIDB4YmYsIDB4ZWMsIDB4N2EsIDB4ZjksIDB4NjYsIDB4ZmMsIDB4YWIsIDB4ODQsIDB4MjIsCisgIDB4ZmUsIDB4MzgsIDB4YTksIDB4NjgsIDB4OTksIDB4OTIsIDB4YmYsIDB4NTAsIDB4MmEsIDB4M2UsIDB4NWIsIDB4YTcsCisgIDB4NmMsIDB4NzUsIDB4ZjgsIDB4YmYsIDB4NDAsIDB4MjYsIDB4OGMsIDB4YmMsIDB4ZjgsIDB4ZmYsIDB4MjQsIDB4YTksCisgIDB4ODgsIDB4M2YsIDB4NGUsIDB4MmMsIDB4ZTIsIDB4OWEsIDB4NWMsIDB4YWMsIDB4YzksIDB4ZmMsIDB4ZmQsIDB4M2QsCisgIDB4NGIsIDB4OTEsIDB4YTEsIDB4MWIsIDB4Y2YsIDB4ODYsIDB4OGUsIDB4NGUsIDB4ZjQsIDB4NDMsIDB4MTIsIDB4NTMsCisgIDB4ZjMsIDB4ODYsIDB4YjIsIDB4OTEsIDB4MDAsIDB4YTEsIDB4NzksIDB4YTYsIDB4YTMsIDB4ZGQsIDB4ODQsIDB4ZDMsCisgIDB4MzUsIDB4MDksIDB4NzksIDB4OGYsIDB4Y2MsIDB4ZWYsIDB4ZGQsIDB4Y2QsIDB4NmEsIDB4OGEsIDB4YjMsIDB4NmYsCisgIDB4ZWIsIDB4ODMsIDB4MWEsIDB4YzgsIDB4YzksIDB4OTYsIDB4NTAsIDB4YjAsIDB4ODgsIDB4NzQsIDB4MzUsIDB4NTcsCisgIDB4ZmIsIDB4NTcsIDB4YzgsIDB4ZGEsIDB4ZmYsIDB4MjcsIDB4MzQsIDB4ZDAsIDB4MzMsIDB4NGYsIDB4MDYsIDB4ZmIsCisgIDB4MzEsIDB4MzIsIDB4ZjcsIDB4ZWMsIDB4YzYsIDB4YzksIDB4NWMsIDB4OGIsIDB4NjgsIDB4M2UsIDB4ZDAsIDB4NGQsCisgIDB4YmYsIDB4YjUsIDB4YzgsIDB4MzUsIDB4NmMsIDB4OGYsIDB4MGUsIDB4YmIsIDB4Y2EsIDB4NjYsIDB4MWQsIDB4NjEsCisgIDB4ZTAsIDB4ODIsIDB4ZWUsIDB4YTEsIDB4NDAsIDB4MGYsIDB4ODQsIDB4OWMsIDB4YTMsIDB4OWEsIDB4NmEsIDB4ZDEsCisgIDB4MjYsIDB4ZTAsIDB4NTYsIDB4MzksIDB4NzYsIDB4MDksIDB4YjMsIDB4ODEsIDB4YTMsIDB4ZDYsIDB4NTUsIDB4YzIsCisgIDB4NmQsIDB4OWQsIDB4OTksIDB4Y2YsIDB4N2UsIDB4OGQsIDB4N2EsIDB4MzQsIDB4NDksIDB4ZTcsIDB4YWMsIDB4ZjUsCisgIDB4ODksIDB4YTQsIDB4ZTYsIDB4OGEsIDB4N2MsIDB4Y2IsIDB4YzYsIDB4OTAsIDB4ODgsIDB4NGMsIDB4MDcsIDB4NjYsCisgIDB4MGYsIDB4YzEsIDB4NTYsIDB4OTAsIDB4MTYsIDB4NWEsIDB4MmEsIDB4ZDMsIDB4MDcsIDB4NjUsIDB4YmQsIDB4YTYsCisgIDB4NDcsIDB4OWIsIDB4MjgsIDB4YmMsIDB4NDcsIDB4ZDIsIDB4OTgsIDB4ZmUsIDB4YmYsIDB4YTIsIDB4NDMsIDB4OWYsCisgIDB4N2QsIDB4OWMsIDB4MzgsIDB4ZmYsIDB4M2IsIDB4NGUsIDB4ZDYsIDB4ZmYsIDB4ODMsIDB4ODQsIDB4YjcsIDB4NjMsCisgIDB4OTksIDB4MzcsIDB4OTUsIDB4NWMsIDB4NDgsIDB4NmUsIDB4ODYsIDB4NzIsIDB4YjAsIDB4NmMsIDB4NDksIDB4NDEsCisgIDB4NzAsIDB4NjcsIDB4YzIsIDB4NjMsIDB4MTIsIDB4NGYsIDB4Y2UsIDB4YmYsIDB4ZmQsIDB4NDQsIDB4ODAsIDB4NjUsCisgIDB4ZTMsIDB4MzYsIDB4MDEsIDB4ZTksIDB4ZTksIDB4ZDEsIDB4YzEsIDB4NzksIDB4YzcsIDB4YzksIDB4NzAsIDB4NGQsCisgIDB4MTcsIDB4ZmUsIDB4NjUsIDB4M2EsIDB4ZTQsIDB4NmIsIDB4MTUsIDB4ZmIsIDB4YTksIDB4NWUsIDB4ZTgsIDB4NWYsCisgIDB4NTgsIDB4YzQsIDB4YmIsIDB4M2MsIDB4NzEsIDB4ZTYsIDB4NmEsIDB4YjQsIDB4ZTcsIDB4ODUsIDB4ZTEsIDB4NTAsCisgIDB4ODIsIDB4YjMsIDB4MTgsIDB4YTUsIDB4ZGUsIDB4Y2YsIDB4MzgsIDB4YjYsIDB4MzMsIDB4NWQsIDB4Y2MsIDB4YjYsCisgIDB4ZTUsIDB4OWYsIDB4YzMsIDB4YWIsIDB4N2YsIDB4Y2MsIDB4ZGEsIDB4NTcsIDB4YmQsIDB4OTAsIDB4ZjYsIDB4YjAsCisgIDB4OTYsIDB4N2MsIDB4YTYsIDB4OTQsIDB4OGMsIDB4NjksIDB4OWIsIDB4MDIsIDB4YzEsIDB4OTcsIDB4OTMsIDB4ZjYsCisgIDB4YmIsIDB4M2MsIDB4ZDIsIDB4N2MsIDB4NGEsIDB4ZDAsIDB4YTEsIDB4YWYsIDB4MWIsIDB4OTcsIDB4YzgsIDB4NWMsCisgIDB4OGIsIDB4MjMsIDB4NTYsIDB4ZTgsIDB4OTUsIDB4YzEsIDB4Y2QsIDB4Y2EsIDB4YmYsIDB4ZGUsIDB4MGUsIDB4OWEsCisgIDB4NzIsIDB4ZWQsIDB4NzcsIDB4ZmMsIDB4Y2MsIDB4NWEsIDB4ZWYsIDB4YzgsIDB4YTcsIDB4ZTIsIDB4OGYsIDB4NDksCisgIDB4NWIsIDB4NGMsIDB4OTIsIDB4YTUsIDB4YmQsIDB4MGEsIDB4YmUsIDB4ZDMsIDB4ZmUsIDB4MjUsIDB4ZmMsIDB4MGQsCisgIDB4OWMsIDB4NjEsIDB4NWYsIDB4YjYsIDB4ODgsIDB4OWIsIDB4MzksIDB4NzIsIDB4ZWUsIDB4Y2YsIDB4NWEsIDB4NzksCisgIDB4ZGUsIDB4YWQsIDB4YmIsIDB4ZDAsIDB4N2MsIDB4MmIsIDB4YTUsIDB4NTMsIDB4MzYsIDB4NGQsIDB4OTcsIDB4ZjEsCisgIDB4NWMsIDB4NTMsIDB4ZjksIDB4MWUsIDB4YTMsIDB4OWIsIDB4NmYsIDB4YjIsIDB4NzUsIDB4ZDcsIDB4MDcsIDB4NDQsCisgIDB4OTcsIDB4ZWQsIDB4NjYsIDB4YTEsIDB4YWYsIDB4YjIsIDB4NDYsIDB4NGMsIDB4MmEsIDB4Y2YsIDB4NDUsIDB4OTYsCisgIDB4MjYsIDB4OGIsIDB4YjUsIDB4YzMsIDB4ZjYsIDB4ZDQsIDB4NWIsIDB4YmEsIDB4YzAsIDB4ZWEsIDB4OTEsIDB4YjcsCisgIDB4ODksIDB4NDcsIDB4NWEsIDB4MTEsIDB4NzksIDB4MjEsIDB4YWEsIDB4MDcsIDB4YzEsIDB4Y2YsIDB4ZWUsIDB4ZjMsCisgIDB4NGYsIDB4NzYsIDB4YTMsIDB4OTIsIDB4MmIsIDB4NGEsIDB4NGEsIDB4MzUsIDB4NWEsIDB4MzQsIDB4ZjAsIDB4NzQsCisgIDB4ZjQsIDB4NjQsIDB4ZmIsIDB4ZTksIDB4ZTgsIDB4NjksIDB4ZTQsIDB4Y2IsIDB4YTAsIDB4NGQsIDB4MTIsIDB4ZmIsCisgIDB4NDAsIDB4MWIsIDB4MGMsIDB4MzEsIDB4ZDEsIDB4ZmQsIDB4ZjQsIDB4ZTYsIDB4ZjgsIDB4OTAsIDB4NTUsIDB4YjUsCisgIDB4YTUsIDB4NzUsIDB4MzYsIDB4YWUsIDB4NzcsIDB4YzIsIDB4YzYsIDB4MDMsIDB4YWMsIDB4ZDUsIDB4YzgsIDB4NjUsCisgIDB4ODIsIDB4NzYsIDB4NWQsIDB4NGEsIDB4M2IsIDB4YTYsIDB4MjMsIDB4MzIsIDB4ZDksIDB4MDQsIDB4MDQsIDB4M2UsCisgIDB4NzMsIDB4M2QsIDB4NjEsIDB4NjUsIDB4NzksIDB4NjMsIDB4MjUsIDB4YTYsIDB4NzUsIDB4ODksIDB4NWEsIDB4NDQsCisgIDB4MGYsIDB4ZTEsIDB4YTQsIDB4MDQsIDB4NTMsIDB4MzYsIDB4N2EsIDB4OWMsIDB4NDAsIDB4YmQsIDB4YWMsIDB4ZTgsCisgIDB4OWUsIDB4NWEsIDB4NzQsIDB4YTMsIDB4NzAsIDB4MmUsIDB4YWMsIDB4ZTAsIDB4MzEsIDB4NDcsIDB4ZGQsIDB4ZWUsCisgIDB4OTksIDB4OTAsIDB4YjYsIDB4NTQsIDB4MmEsIDB4NWIsIDB4N2UsIDB4YzUsIDB4ZjAsIDB4ZTksIDB4YjUsIDB4OTQsCisgIDB4MDUsIDB4YzMsIDB4OTksIDB4YWMsIDB4MmIsIDB4M2UsIDB4ZWEsIDB4ODksIDB4NjEsIDB4ODUsIDB4MTIsIDB4MWQsCisgIDB4NDUsIDB4ZWMsIDB4ZmEsIDB4YzMsIDB4YmUsIDB4MWQsIDB4NTIsIDB4MDYsIDB4NTMsIDB4ZTEsIDB4YWYsIDB4NTUsCisgIDB4NDksIDB4ZDYsIDB4YzUsIDB4OWMsIDB4ZmIsIDB4OWIsIDB4ZGIsIDB4YWQsIDB4MTUsIDB4OWYsIDB4MDYsIDB4NTUsCisgIDB4MzIsIDB4Y2YsIDB4OTIsIDB4NGEsIDB4MmIsIDB4MjMsIDB4NDUsIDB4MmYsIDB4Y2UsIDB4Y2UsIDB4MmYsIDB4NWYsCisgIDB4ZGUsIDB4YzUsIDB4ZjMsIDB4MTYsIDB4OWMsIDB4ODIsIDB4ODksIDB4ZDAsIDB4YWMsIDB4OGUsIDB4OTQsIDB4NGUsCisgIDB4ODAsIDB4YmMsIDB4MTksIDB4ZTQsIDB4MWYsIDB4OGQsIDB4NWQsIDB4MDYsIDB4NGUsIDB4NTAsIDB4NzEsIDB4YWEsCisgIDB4OTUsIDB4NmIsIDB4NzMsIDB4NzksIDB4ZjksIDB4YzMsIDB4ZjksIDB4ZjEsIDB4Y2IsIDB4MTcsIDB4ZWMsIDB4ZmUsCisgIDB4ZmQsIDB4OWMsIDB4YmQsIDB4ZDYsIDB4ZWEsIDB4ZjYsIDB4MTcsIDB4OTcsIDB4ZDQsIDB4OWMsIDB4MmIsIDB4MTYsCisgIDB4YjYsIDB4NGYsIDB4YzYsIDB4ZWYsIDB4OGYsIDB4NGUsIDB4YzYsIDB4ZTcsIDB4YTcsIDB4NjcsIDB4ODcsIDB4MmYsCisgIDB4NWYsIDB4N2MsIDB4Y2YsIDB4ZDEsIDB4NDIsIDB4OWEsIDB4YmQsIDB4ODcsIDB4ZTAsIDB4NWQsIDB4ZjcsIDB4MzMsCisgIDB4OTcsIDB4NGUsIDB4ZDAsIDB4YWUsIDB4MTcsIDB4NzIsIDB4ZmMsIDB4ZGQsIDB4YmIsIDB4ZTMsIDB4MzcsIDB4ZGYsCisgIDB4YmUsIDB4N2MsIDB4NzEsIDB4MTcsIDB4MTcsIDB4MDMsIDB4MWUsIDB4OWYsIDB4YmMsIDB4Y2QsIDB4MmUsIDB4ZDksCisgIDB4OGUsIDB4MDIsIDB4N2UsIDB4YzEsIDB4MWMsIDB4NWQsIDB4YTIsIDB4OWMsIDB4Y2MsIDB4OTIsIDB4YjEsIDB4NzksCisgIDB4OGYsIDB4YzAsIDB4YjYsIDB4ZTQsIDB4MmMsIDB4ZjMsIDB4MjUsIDB4M2EsIDB4OWEsIDB4MDYsIDB4N2UsIDB4ODAsCisgIDB4MTIsIDB4YWIsIDB4MjcsIDB4OGUsIDB4YmUsIDB4YmQsIDB4MzgsIDB4ZWQsIDB4Y2UsIDB4MDQsIDB4MmMsIDB4YjQsCisgIDB4MWUsIDB4NmMsIDB4YzAsIDB4NWEsIDB4YWMsIDB4YmUsIDB4MjEsIDB4ZGYsIDB4MmEsIDB4MjgsIDB4ODIsIDB4MGYsCisgIDB4NWQsIDB4ZmUsIDB4OTgsIDB4YjIsIDB4ZmUsIDB4M2QsIDB4OGEsIDB4NTEsIDB4MTMsIDB4ZDUsIDB4ZTUsIDB4ZTEsCisgIDB4YWEsIDB4YWUsIDB4OTYsIDB4OGUsIDB4ZTAsIDB4NTUsIDB4NjgsIDB4MDQsIDB4MjksIDB4ZjIsIDB4ZDQsIDB4YjcsCisgIDB4MGQsIDB4MDQsIDB4MzIsIDB4NmYsIDB4YmIsIDB4YmMsIDB4M2MsIDB4YjYsIDB4MWMsIDB4NjEsIDB4NmUsIDB4MTgsCisgIDB4MzUsIDB4MGMsIDB4YjYsIDB4YzAsIDB4ZDgsIDB4MGUsIDB4ODUsIDB4NmIsIDB4NTQsIDB4MTIsIDB4NDAsIDB4ZWEsCisgIDB4ODMsIDB4MTAsIDB4NDUsIDB4ZGMsIDB4NzIsIDB4YTAsIDB4ZmIsIDB4MDQsIDB4MzgsIDB4ZTYsIDB4M2EsIDB4YmUsCisgIDB4NzUsIDB4ZmQsIDB4MmEsIDB4NDQsIDB4N2UsIDB4ZWIsIDB4YzksIDB4MDUsIDB4OTYsIDB4ZjgsIDB4MTUsIDB4NjAsCisgIDB4ZjYsIDB4YmEsIDB4NmEsIDB4OWIsIDB4ZDcsIDB4MjgsIDB4MGEsIDB4MDUsIDB4MzAsIDB4YzgsIDB4MzYsIDB4MjUsCisgIDB4YTcsIDB4YzcsIDB4NzEsIDB4ODIsIDB4YTMsIDB4NDMsIDB4ZTYsIDB4Y2EsIDB4YzIsIDB4MDYsIDB4YTksIDB4OTIsCisgIDB4YWQsIDB4YTgsIDB4MjAsIDB4ZmIsIDB4ZTMsIDB4MDMsIDB4MmYsIDB4OWIsIDB4ZWQsIDB4MzYsIDB4NjgsIDB4NjQsCisgIDB4YzYsIDB4MDcsIDB4NmMsIDB4OGUsIDB4YjcsIDB4NWMsIDB4NTYsIDB4MjEsIDB4YjcsIDB4NzgsIDB4ZmUsIDB4ZjYsCisgIDB4MzIsIDB4NDgsIDB4MjMsIDB4NmQsIDB4MDEsIDB4YzMsIDB4NWEsIDB4OWIsIDB4YjAsIDB4NjEsIDB4MjgsIDB4ZmIsCisgIDB4ODksIDB4ZWEsIDB4MGQsIDB4N2IsIDB4NGQsIDB4ZjYsIDB4NmQsIDB4NzMsIDB4ZjUsIDB4OTMsIDB4NjIsIDB4ZTAsCisgIDB4MGEsIDB4OTgsIDB4M2UsIDB4NWYsIDB4YmQsIDB4NjUsIDB4ZmEsIDB4MjksIDB4NGUsIDB4NTcsIDB4NzIsIDB4YTksCisgIDB4ZTgsIDB4NzgsIDB4NTEsIDB4Y2MsIDB4NGYsIDB4ZTIsIDB4NTgsIDB4YTIsIDB4ODMsIDB4ZWYsIDB4OGMsIDB4YzIsCisgIDB4ZWYsIDB4NDgsIDB4NzQsIDB4NmEsIDB4YWIsIDB4YTMsIDB4YzAsIDB4N2IsIDB4MDMsIDB4MDksIDB4ZWYsIDB4YmUsCisgIDB4Y2QsIDB4ZmQsIDB4NzQsIDB4YzQsIDB4NjEsIDB4ZDIsIDB4MzMsIDB4ZjgsIDB4YmMsIDB4MzksIDB4YWMsIDB4MzAsCisgIDB4MjEsIDB4YzksIDB4ZWIsIDB4NjAsIDB4OWEsIDB4OTYsIDB4ZTMsIDB4MGIsIDB4ZTQsIDB4YzUsIDB4NTIsIDB4OTEsCisgIDB4OTIsIDB4NzMsIDB4YzAsIDB4ODEsIDB4YWYsIDB4MzIsIDB4NTYsIDB4NWEsIDB4YTUsIDB4ZmYsIDB4YjYsIDB4YzAsCisgIDB4OWIsIDB4MzUsIDB4NWIsIDB4NzYsIDB4NTIsIDB4ZjMsIDB4YzgsIDB4MjIsIDB4NzYsIDB4NGMsIDB4ZWEsIDB4MGYsCisgIDB4MGQsIDB4MDMsIDB4OTksIDB4NTUsIDB4ZTEsIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4ZTQsIDB4MTgsIDB4ZGYsIDB4ZDYsCisgIDB4ODksIDB4NzUsIDB4NDIsIDB4NDUsIDB4OTIsIDB4ZTEsIDB4NjUsIDB4OGIsIDB4ZjUsIDB4OGIsIDB4NWYsIDB4NjAsCisgIDB4NzQsIDB4NTgsIDB4MDAsIDB4MTUsIDB4MDcsIDB4MDIsIDB4OTMsIDB4ZDcsIDB4NDUsIDB4MjQsIDB4NDksIDB4MzMsCisgIDB4NWEsIDB4NjAsIDB4NTQsIDB4OGMsIDB4NDQsIDB4YjQsIDB4MTEsIDB4MGYsIDB4MjksIDB4ZGIsIDB4YTUsIDB4NDQsCisgIDB4YTUsIDB4OWMsIDB4NDEsIDB4ZWYsIDB4N2EsIDB4OWUsIDB4NGYsIDB4MjYsIDB4MzQsIDB4YTgsIDB4OWUsIDB4MWQsCisgIDB4NzEsIDB4ZDQsIDB4YzMsIDB4YjgsIDB4YjgsIDB4ODYsIDB4YzksIDB4M2IsIDB4MzAsIDB4NTYsIDB4MzgsIDB4YmYsCisgIDB4NTksIDB4YzEsIDB4ZjMsIDB4OGYsIDB4NmYsIDB4YWQsIDB4Y2IsIDB4ODAsIDB4ZDUsIDB4MWEsIDB4ZDAsIDB4MzIsCisgIDB4YmYsIDB4YjYsIDB4YWUsIDB4ZTAsIDB4ZTEsIDB4N2YsIDB4MDgsIDB4MmEsIDB4MDYsIDB4MDEsIDB4ZjYsIDB4YzQsCisgIDB4M2YsIDB4YjUsIDB4ZWYsIDB4MzcsIDB4YWQsIDB4MmMsIDB4NjQsIDB4NmEsIDB4ZmEsIDB4OWMsIDB4NGEsIDB4NTUsCisgIDB4M2UsIDB4NTAsIDB4MzksIDB4Y2EsIDB4YmYsIDB4OWUsIDB4NzYsIDB4ZTQsIDB4NTEsIDB4ZjIsIDB4ODAsIDB4NjksCisgIDB4MDAsIDB4YmQsIDB4ZmYsIDB4ZTIsIDB4NGUsIDB4ZWMsIDB4MGUsIDB4ZjgsIDB4Y2YsIDB4YmQsIDB4N2YsIDB4ZjYsCisgIDB4OGMsIDB4NjUsIDB4OWYsIDB4OGIsIDB4OWMsIDB4NDgsIDB4ZTcsIDB4MmIsIDB4MjYsIDB4MzYsIDB4MmYsIDB4OGQsCisgIDB4ZGEsIDB4YmYsIDB4ODMsIDB4YzksIDB4OWYsIDB4MzEsIDB4NzEsIDB4NmIsIDB4NWIsIDB4NGYsIDB4MTcsIDB4ZDcsCisgIDB4M2YsIDB4ZWUsIDB4MGUsIDB4NzcsIDB4NzcsIDB4NzYsIDB4NzYsIDB4N2UsIDB4MWEsIDB4MmQsIDB4NzksIDB4ZWEsCisgIDB4YWUsIDB4ZDAsIDB4M2MsIDB4ZmQsIDB4MzksIDB4NWEsIDB4YTYsIDB4NTMsIDB4NzYsIDB4ZTQsIDB4ZDMsIDB4NjIsCisgIDB4YTYsIDB4MzEsIDB4MzcsIDB4YmQsIDB4MmQsIDB4ZGYsIDB4ZGIsIDB4MGUsIDB4NGUsIDB4ZmUsIDB4NmEsIDB4YmEsCisgIDB4MWMsIDB4NjYsIDB4NzksIDB4MTcsIDB4MWEsIDB4ZTUsIDB4OTIsIDB4OGIsIDB4NzcsIDB4ZmIsIDB4N2EsIDB4NTUsCisgIDB4ZWYsIDB4ZGUsIDB4OWMsIDB4MWQsIDB4MWQsIDB4OWYsIDB4MWUsIDB4ZmMsIDB4NjAsIDB4MTAsIDB4NTYsIDB4NDcsCisgIDB4NGUsIDB4YzAsIDB4MWQsIDB4NzksIDB4OTcsIDB4YzQsIDB4ZTUsIDB4YzMsIDB4YmIsIDB4MzIsIDB4YTksIDB4ZTgsCisgIDB4OTcsIDB4OWIsIDB4NGYsIDB4YjYsIDB4OTAsIDB4MzMsIDB4ZGMsIDB4MmEsIDB4MTUsIDB4NzksIDB4OWQsIDB4ZDQsCisgIDB4NGEsIDB4ZGUsIDB4MmEsIDB4MzgsIDB4YzgsIDB4OWYsIDB4ZGUsIDB4YTMsIDB4NjYsIDB4ZTgsIDB4YTksIDB4ODYsCisgIDB4MzEsIDB4YWQsIDB4MzgsIDB4MWEsIDB4MzIsIDB4OTksIDB4ZGYsIDB4NGEsIDB4OTksIDB4NzQsIDB4OTQsIDB4MjYsCisgIDB4NmYsIDB4ZTEsIDB4ODUsIDB4MmYsIDB4OTUsIDB4YTcsIDB4YTAsIDB4OGEsIDB4ZjgsIDB4NmYsIDB4ZDEsIDB4OTcsCisgIDB4YTcsIDB4ZGYsIDB4MzAsIDB4NGMsIDB4ZGIsIDB4NWQsIDB4NmEsIDB4MTYsIDB4OTIsIDB4MGYsIDB4MWYsIDB4N2QsCisgIDB4ZmUsIDB4NmMsIDB4NzcsIDB4NmYsIDB4MmIsIDB4MjgsIDB4MGIsIDB4Y2MsIDB4YzksIDB4MWUsIDB4YmMsIDB4MzksCisgIDB4NWIsIDB4YjEsIDB4ZTcsIDB4OWYsIDB4MzUsIDB4OGEsIDB4MWUsIDB4NjgsIDB4NjUsIDB4MWYsIDB4NjMsIDB4MDQsCisgIDB4NDgsIDB4YzQsIDB4NGUsIDB4MzksIDB4NTAsIDB4YmIsIDB4MDEsIDB4M2YsIDB4NWMsIDB4ODEsIDB4NGMsIDB4YWYsCisgIDB4YTMsIDB4M2EsIDB4NzQsIDB4MmMsIDB4OWQsIDB4MzIsIDB4MDYsIDB4MDQsIDB4NWYsIDB4ZGYsIDB4MmEsIDB4YTIsCisgIDB4ZWUsIDB4NjgsIDB4ZmUsIDB4NDYsIDB4YjcsIDB4NmQsIDB4ZjIsIDB4NWIsIDB4ZGIsIDB4M2EsIDB4MWYsIDB4OGMsCisgIDB4NTQsIDB4ZDEsIDB4NmMsIDB4Y2YsIDB4NGIsIDB4NjYsIDB4N2YsIDB4NjEsIDB4ZmIsIDB4MjMsIDB4N2EsIDB4NjEsCisgIDB4N2YsIDB4ZWIsIDB4YWMsIDB4YzYsIDB4Y2QsIDB4NDEsIDB4YjYsIDB4MTYsIDB4NTMsIDB4MGMsIDB4ZWMsIDB4MTYsCisgIDB4OTQsIDB4ZmEsIDB4NjQsIDB4ZjgsIDB4YTAsIDB4YTcsIDB4ZTMsIDB4MGYsIDB4ZjEsIDB4ZmMsIDB4NmQsIDB4YTQsCisgIDB4YTUsIDB4MWIsIDB4NTcsIDB4NmYsIDB4N2MsIDB4NzEsIDB4ZGUsIDB4MWIsIDB4ZTgsIDB4M2QsIDB4ODUsIDB4M2UsCisgIDB4MzAsIDB4YTQsIDB4N2YsIDB4NTMsIDB4N2YsIDB4NjEsIDB4YzIsIDB4M2YsIDB4ZGIsIDB4NzksIDB4ZjYsIDB4NzQsCisgIDB4NGIsIDB4OWQsIDB4MWUsIDB4ZTgsIDB4MjcsIDB4MzIsIDB4M2IsIDB4M2IsIDB4NjgsIDB4ZDMsIDB4ZjEsIDB4NGIsCisgIDB4NTcsIDB4NmQsIDB4NGUsIDB4MTgsIDB4MjYsIDB4N2MsIDB4MjIsIDB4MWIsIDB4ODksIDB4NWUsIDB4N2QsIDB4OTQsCisgIDB4ZTIsIDB4MzAsIDB4MTksIDB4MjgsIDB4MzUsIDB4ZjgsIDB4NWEsIDB4ZTgsIDB4ODAsIDB4YWUsIDB4MTksIDB4ZWMsCisgIDB4M2UsIDB4NzQsIDB4YjMsIDB4NWQsIDB4MDksIDB4ZjQsIDB4NjksIDB4NjMsIDB4MjIsIDB4ZDEsIDB4YzEsIDB4MTcsCisgIDB4ZmMsIDB4NjcsIDB4ZDcsIDB4MDQsIDB4ZjIsIDB4Y2YsIDB4ZGQsIDB4OTUsIDB4MTYsIDB4NzIsIDB4NjUsIDB4MWMsCisgIDB4M2EsIDB4M2MsIDB4YjMsIDB4Y2QsIDB4ODksIDB4NTUsIDB4MWUsIDB4YTcsIDB4ZjUsIDB4NTEsIDB4MTQsIDB4MTcsCisgIDB4NzcsIDB4MGYsIDB4MDcsIDB4MzcsIDB4NzIsIDB4ODEsIDB4ZDEsIDB4NTIsIDB4MTMsIDB4M2EsIDB4ZWEsIDB4OTMsCisgIDB4YTMsIDB4ZTksIDB4MjMsIDB4ZWQsIDB4ZmEsIDB4ZTMsIDB4MWYsIDB4MWUsIDB4OWMsIDB4NmIsIDB4ZTMsIDB4ODUsCisgIDB4ZmQsIDB4YWQsIDB4NmIsIDB4OTAsIDB4YmUsIDB4ZTgsIDB4ZGYsIDB4YmYsIDB4NjcsIDB4OTAsIDB4N2UsIDB4OGMsCisgIDB4NTIsIDB4OTAsIDB4NWIsIDB4ZDMsIDB4NjMsIDB4Y2EsIDB4OGUsIDB4OTIsIDB4MTgsIDB4OGYsIDB4MGQsIDB4YWYsCisgIDB4MTgsIDB4MWEsIDB4N2UsIDB4YmUsIDB4YmIsIDB4ZjYsIDB4ZTgsIDB4ODUsIDB4ODIsIDB4NjQsIDB4NjIsIDB4OTQsCisgIDB4ZTIsIDB4NjYsIDB4OTgsIDB4MDUsIDB4MzUsIDB4NzUsIDB4YTksIDB4MmEsIDB4NjEsIDB4NzgsIDB4YWMsIDB4ZWYsCisgIDB4N2EsIDB4YzQsIDB4YTQsIDB4OWMsIDB4MzgsIDB4NmQsIDB4OTQsIDB4NjMsIDB4NmUsIDB4NWMsIDB4NDQsIDB4MGUsCisgIDB4ZmUsIDB4NTUsIDB4MDYsIDB4NzQsIDB4MDUsIDB4NTYsIDB4ZWQsIDB4NDcsIDB4YWIsIDB4NjgsIDB4YWQsIDB4MzIsCisgIDB4ZmIsIDB4OTgsIDB4MmIsIDB4NjUsIDB4ZGMsIDB4YmEsIDB4YzUsIDB4YTcsIDB4YzAsIDB4Y2MsIDB4NGMsIDB4OTMsCisgIDB4NTQsIDB4ZTksIDB4MmUsIDB4M2YsIDB4ODQsIDB4YTksIDB4ZmQsIDB4YTQsIDB4M2UsIDB4NmMsIDB4ZTYsIDB4MzksCisgIDB4ZTksIDB4MzQsIDB4ZWQsIDB4YWQsIDB4YjYsIDB4MTYsIDB4ODcsIDB4ODgsIDB4YTUsIDB4MGMsIDB4MWYsIDB4M2QsCisgIDB4MzksIDB4NWIsIDB4MmQsIDB4OTYsIDB4YzYsIDB4M2IsIDB4YzAsIDB4YzQsIDB4ZDMsIDB4ODIsIDB4YzksIDB4MTQsCisgIDB4YjAsIDB4MTAsIDB4YTksIDB4ZjgsIDB4ZWIsIDB4NWMsIDB4ODgsIDB4NDksIDB4YTgsIDB4OWYsIDB4ODMsIDB4OTYsCisgIDB4N2YsIDB4NjAsIDB4M2EsIDB4NWYsIDB4NjEsIDB4OGEsIDB4NjYsIDB4ODksIDB4NTAsIDB4MjEsIDB4MzIsIDB4MTAsCisgIDB4M2IsIDB4MjgsIDB4NDIsIDB4M2EsIDB4NzAsIDB4MjQsIDB4MDAsIDB4YjAsIDB4ZTEsIDB4ZDQsIDB4MTIsIDB4MTIsCisgIDB4NGIsIDB4ZWUsIDB4NmQsIDB4MmIsIDB4MjIsIDB4Y2IsIDB4ZDYsIDB4MTcsIDB4ODMsIDB4MWIsIDB4MTgsIDB4MTMsCisgIDB4YTMsIDB4ODYsIDB4YWYsIDB4MmIsIDB4MjksIDB4NmQsIDB4MTUsIDB4YTgsIDB4MTMsIDB4YzEsIDB4NDMsIDB4YWYsCisgIDB4YjksIDB4NGUsIDB4NzYsIDB4YmIsIDB4M2EsIDB4NDMsIDB4MzcsIDB4MjcsIDB4NjAsIDB4MTgsIDB4YzMsIDB4M2IsCisgIDB4YWQsIDB4ZjUsIDB4MzksIDB4YzksIDB4Y2IsIDB4NDQsIDB4NjAsIDB4ZmMsIDB4OTgsIDB4OGEsIDB4OTYsIDB4ZWIsCisgIDB4YTEsIDB4OWMsIDB4YTYsIDB4ZTksIDB4ZWYsIDB4MTksIDB4NmIsIDB4OTEsIDB4YWYsIDB4ZTIsIDB4MzMsIDB4OGYsCisgIDB4MmYsIDB4MTgsIDB4NjMsIDB4MTQsIDB4YjEsIDB4NjQsIDB4YmEsIDB4NjYsIDB4YjUsIDB4NDUsIDB4NzMsIDB4NmIsCisgIDB4YzYsIDB4NGIsIDB4ZTYsIDB4NTYsIDB4ZWMsIDB4ZmYsIDB4OWUsIDB4MDUsIDB4YTMsIDB4ZmYsIDB4N2YsIDB4ZDcsCisgIDB4MmEsIDB4NWEsIDB4OGMsIDB4NzEsIDB4MGEsIDB4ZjUsIDB4ZTgsIDB4M2MsIDB4ODksIDB4MzksIDB4ODEsIDB4ZDgsCisgIDB4M2MsIDB4YTEsIDB4MzcsIDB4YzksIDB4N2IsIDB4YjksIDB4NDMsIDB4YjYsIDB4Y2YsIDB4MGMsIDB4MzksIDB4OWYsCisgIDB4NmUsIDB4Y2MsIDB4ZjksIDB4NzIsIDB4MzAsIDB4M2UsIDB4M2MsIDB4MzksIDB4YTksIDB4MzksIDB4YTMsIDB4NzgsCisgIDB4ZGEsIDB4MDQsIDB4OGMsIDB4MGYsIDB4M2MsIDB4NTMsIDB4NTQsIDB4NzIsIDB4NWUsIDB4ODIsIDB4MzcsIDB4ZDIsCisgIDB4NWIsIDB4NTcsIDB4NTcsIDB4NGUsIDB4YzQsIDB4MDMsIDB4OGQsIDB4MjEsIDB4ZDcsIDB4NTIsIDB4OGIsIDB4Y2IsCisgIDB4ZDQsIDB4MzIsIDB4MWYsIDB4NjMsIDB4NTUsIDB4ODUsIDB4MTksIDB4NWYsIDB4MzIsIDB4MTksIDB4OGQsIDB4N2UsCisgIDB4YjMsIDB4MjIsIDB4OTMsIDB4YTksIDB4ZmMsIDB4YWQsIDB4MDUsIDB4NzIsIDB4ZjQsIDB4N2IsIDB4OGIsIDB4NWUsCisgIDB4NDcsIDB4OGEsIDB4ZGEsIDB4NzksIDB4YTEsIDB4NTksIDB4NzQsIDB4YzAsIDB4YzUsIDB4MDIsIDB4NzcsIDB4MmMsCisgIDB4MjksIDB4NjYsIDB4Y2MsIDB4NzQsIDB4YzIsIDB4NzcsIDB4MDksIDB4OTEsIDB4NDAsIDB4ZWEsIDB4YTQsIDB4ZjUsCisgIDB4OTcsIDB4ZWYsIDB4MTksIDB4ZGUsIDB4ZDAsIDB4NmEsIDB4NWQsIDB4YjAsIDB4ZTEsIDB4Y2QsIDB4MjgsIDB4OWIsCisgIDB4MzUsIDB4MDAsIDB4OWYsIDB4ZDYsIDB4MGMsIDB4MTYsIDB4NTcsIDB4ZTgsIDB4NTYsIDB4MGUsIDB4ZGEsIDB4ZmQsCisgIDB4YjUsIDB4ODcsIDB4NTEsIDB4OTAsIDB4NGMsIDB4YjYsIDB4YTYsIDB4MmUsIDB4NmQsIDB4NTgsIDB4YWIsIDB4NDgsCisgIDB4NmUsIDB4NjAsIDB4OGYsIDB4NTcsIDB4YTYsIDB4MWIsIDB4NDUsIDB4NjcsIDB4NmUsIDB4NjEsIDB4ODYsIDB4ZDksCisgIDB4YzAsIDB4OTcsIDB4ZjQsIDB4MDYsIDB4YzYsIDB4YWIsIDB4NWUsIDB4NmEsIDB4N2IsIDB4N2QsIDB4OTksIDB4M2EsCisgIDB4NzAsIDB4MzUsIDB4NWQsIDB4YTcsIDB4NzcsIDB4NDksIDB4YTMsIDB4NmIsIDB4OWIsIDB4ZTYsIDB4YzMsIDB4NjcsCisgIDB4YTcsIDB4N2YsIDB4MjEsIDB4NTEsIDB4OGEsIDB4NjksIDB4M2UsIDB4Y2YsIDB4YjMsIDB4YWQsIDB4YWUsIDB4YzksCisgIDB4YzIsIDB4NjIsIDB4MmQsIDB4YzksIDB4ZjYsIDB4NWMsIDB4NWEsIDB4ZmUsIDB4OTIsIDB4MGQsIDB4NmIsIDB4NWQsCisgIDB4NDEsIDB4NjYsIDB4YjgsIDB4M2EsIDB4YjgsIDB4M2MsIDB4ZTksIDB4ZjksIDB4YzksIDB4NTAsIDB4MTMsIDB4M2YsCisgIDB4YjUsIDB4OGEsIDB4YTAsIDB4MTAsIDB4ZWEsIDB4ZjAsIDB4MjgsIDB4MzgsIDB4NjksIDB4YjQsIDB4YzksIDB4MDgsCisgIDB4ZDgsIDB4MzUsIDB4MTMsIDB4NjEsIDB4MzIsIDB4OTAsIDB4MTQsIDB4YzIsIDB4YWEsIDB4NzEsIDB4ODYsIDB4YWUsCisgIDB4OTYsIDB4OGYsIDB4NGMsIDB4N2IsIDB4ZjMsIDB4OTQsIDB4ZTcsIDB4NDQsIDB4NjYsIDB4ZjgsIDB4M2QsIDB4NDIsCisgIDB4OTcsIDB4ZDQsIDB4ZTQsIDB4NDEsIDB4MTIsIDB4NDAsIDB4MWQsIDB4OWYsIDB4OTQsIDB4NDYsIDB4NmQsIDB4YjQsCisgIDB4NGMsIDB4MDIsIDB4ZTYsIDB4MjUsIDB4ZWEsIDB4YTIsIDB4ODMsIDB4MGMsIDB4ODQsIDB4N2UsIDB4OWYsIDB4YjQsCisgIDB4Y2UsIDB4MmEsIDB4ZGEsIDB4ZWYsIDB4ZmQsIDB4OGUsIDB4NmEsIDB4ZjksIDB4YWQsIDB4MGIsIDB4MmMsIDB4ZmQsCisgIDB4MTIsIDB4OTEsIDB4ZmMsIDB4NDgsIDB4OTksIDB4NmMsIDB4OTYsIDB4MmMsIDB4ZWMsIDB4MTQsIDB4YzksIDB4ZmYsCisgIDB4N2YsIDB4YjEsIDB4ZmQsIDB4NjIsIDB4YmYsIDB4ZmQsIDB4N2QsIDB4MTcsIDB4N2IsIDB4YzgsIDB4YTMsIDB4N2UsCisgIDB4ZjEsIDB4ZjYsIDB4ZTIsIDB4NzQsIDB4ZWQsIDB4YmEsIDB4OTIsIDB4MWEsIDB4NjQsIDB4ZGYsIDB4ODIsIDB4MmYsCisgIDB4NWMsIDB4ZDgsIDB4ODQsIDB4ZjIsIDB4YzMsIDB4MWYsIDB4NDcsIDB4ZTMsIDB4YmMsIDB4YTEsIDB4MzksIDB4ZDIsCisgIDB4ZTQsIDB4ODMsIDB4NzYsIDB4MDksIDB4MWQsIDB4Y2IsIDB4ZTQsIDB4MzIsIDB4ZmYsIDB4MGQsIDB4MzUsIDB4YzksCisgIDB4YTksIDB4NzUsIDB4YzAsIDB4ZWIsIDB4MDUsIDB4NGMsIDB4N2YsIDB4OGYsIDB4OWUsIDB4MjAsIDB4ZWEsIDB4YmEsCisgIDB4OTIsIDB4YTAsIDB4NjEsIDB4OGQsIDB4ODksIDB4NGQsIDB4OTksIDB4YzIsIDB4MTgsIDB4ODgsIDB4ZWQsIDB4OGEsCisgIDB4Y2MsIDB4ODgsIDB4ZTMsIDB4YTYsIDB4NmIsIDB4NzIsIDB4NjUsIDB4M2MsIDB4OWMsIDB4N2UsIDB4MmMsIDB4MGUsCisgIDB4ZmEsIDB4ODEsIDB4Y2IsIDB4MGIsIDB4YTgsIDB4NTUsIDB4ODQsIDB4NTQsIDB4ZTgsIDB4NjUsIDB4MmQsIDB4M2YsCisgIDB4YjMsIDB4Y2IsIDB4NDEsIDB4YTksIDB4MGUsIDB4NzIsIDB4NWYsIDB4NTYsIDB4MzIsIDB4M2MsIDB4Y2QsIDB4M2EsCisgIDB4OTIsIDB4M2EsIDB4OTQsIDB4NTUsIDB4ODEsIDB4YTcsIDB4OTIsIDB4NjUsIDB4MDIsIDB4YzQsIDB4ZjUsIDB4NzYsCisgIDB4OTgsIDB4NmMsIDB4NTcsIDB4ZjEsIDB4ZmMsIDB4MTYsIDB4MDksIDB4N2QsIDB4MGMsIDB4NjMsIDB4OTYsIDB4NzksCisgIDB4ZTUsIDB4ZGUsIDB4MzEsIDB4NGYsIDB4NWYsIDB4MjcsIDB4NzUsIDB4ZTIsIDB4NjQsIDB4NzUsIDB4N2QsIDB4MmQsCisgIDB4YzQsIDB4ZGMsIDB4MDcsIDB4NzIsIDB4MTAsIDB4OTUsIDB4NTYsIDB4NGIsIDB4MDYsIDB4NzcsIDB4OGMsIDB4ZmUsCisgIDB4ZTcsIDB4N2QsIDB4NGQsIDB4YTAsIDB4ZWEsIDB4ZGQsIDB4ZDAsIDB4YTksIDB4Y2QsIDB4MzgsIDB4NTAsIDB4YjIsCisgIDB4OGIsIDB4N2EsIDB4NjIsIDB4OTcsIDB4YjQsIDB4YjgsIDB4NWQsIDB4NzgsIDB4MGIsIDB4MGMsIDB4YTIsIDB4ZmUsCisgIDB4OGIsIDB4ZWUsIDB4NzcsIDB4YzQsIDB4MjIsIDB4ZDcsIDB4ZDIsIDB4YWUsIDB4Y2UsIDB4MzUsIDB4NGMsIDB4ZDMsCisgIDB4NzgsIDB4OTMsIDB4ZDIsIDB4YzEsIDB4OTYsIDB4YjUsIDB4YjEsIDB4OWQsIDB4OTIsIDB4ZjcsIDB4MjgsIDB4OTEsCisgIDB4M2EsIDB4MjUsIDB4ZmUsIDB4ZWYsIDB4ZWMsIDB4ZTMsIDB4OWYsIDB4ZWQsIDB4N2IsIDB4NDYsIDB4YjgsIDB4MGYsCisgIDB4ZTIsIDB4YTMsIDB4YWIsIDB4YmMsIDB4YzUsIDB4NDcsIDB4YTgsIDB4YTQsIDB4MjcsIDB4ZmEsIDB4ZmQsIDB4NDcsCisgIDB4MGEsIDB4ODksIDB4NmIsIDB4ZmEsIDB4YTAsIDB4MTQsIDB4NWYsIDB4NjAsIDB4YzksIDB4ZDMsIDB4YjIsIDB4NjUsCisgIDB4MzIsIDB4OWUsIDB4NTIsIDB4YmMsIDB4OWEsIDB4NzIsIDB4YTUsIDB4YzcsIDB4NWEsIDB4MzMsIDB4MDIsIDB4M2YsCisgIDB4NmQsIDB4MTMsIDB4OTYsIDB4OGEsIDB4YmQsIDB4OTgsIDB4NzgsIDB4MWIsIDB4YzgsIDB4MzMsIDB4NmQsIDB4ODMsCisgIDB4MmUsIDB4YTAsIDB4ZTAsIDB4ZjQsIDB4ODAsIDB4ZmMsIDB4NTYsIDB4OGIsIDB4NjQsIDB4YWUsIDB4M2QsIDB4MWQsCisgIDB4Y2QsIDB4MTcsIDB4ZWUsIDB4MjUsIDB4NTksIDB4NzAsIDB4YWQsIDB4MDYsIDB4YzksIDB4YzUsIDB4YjksIDB4YzksCisgIDB4MGYsIDB4NmEsIDB4ZWQsIDB4NzksIDB4NzUsIDB4MzEsIDB4MGQsIDB4ZGEsIDB4YjQsIDB4OWIsIDB4OTIsIDB4MGUsCisgIDB4NmEsIDB4YTksIDB4NTgsIDB4Y2UsIDB4MTIsIDB4YTksIDB4NWIsIDB4ZDIsIDB4MTYsIDB4YmQsIDB4ZmEsIDB4YjUsCisgIDB4YzYsIDB4NTgsIDB4YWQsIDB4YjEsIDB4ZDAsIDB4MTgsIDB4ZWIsIDB4ZjAsIDB4NzMsIDB4ODcsIDB4ZDgsIDB4N2UsCisgIDB4YzcsIDB4YTYsIDB4MDcsIDB4ZTEsIDB4MDAsIDB4YTAsIDB4M2YsIDB4NTAsIDB4MzQsIDB4ZjcsIDB4ZmMsIDB4MjAsCisgIDB4ZTIsIDB4NmYsIDB4YmMsIDB4YmYsIDB4YzgsIDB4ZGMsIDB4ODcsIDB4Y2QsIDB4ZGQsIDB4ZDQsIDB4M2EsIDB4NDcsCisgIDB4Y2EsIDB4NDAsIDB4NjgsIDB4YWUsIDB4NTgsIDB4MGIsIDB4MDYsIDB4NjEsIDB4Y2UsIDB4ZDgsIDB4ODQsIDB4NzYsCisgIDB4MDQsIDB4OTYsIDB4N2MsIDB4OGIsIDB4OWMsIDB4MjcsIDB4NTUsIDB4MjIsIDB4N2UsIDB4NWEsIDB4YTUsIDB4YjMsCisgIDB4NmMsIDB4ZGQsIDB4YjYsIDB4NzksIDB4ZGIsIDB4YjgsIDB4ODgsIDB4ODAsIDB4MjUsIDB4Y2EsIDB4Y2IsIDB4YTcsCisgIDB4YjUsIDB4YTAsIDB4YjEsIDB4MTYsIDB4MzksIDB4YjUsIDB4MDIsIDB4ZTYsIDB4OTYsIDB4OTEsIDB4MmYsIDB4NTEsCisgIDB4YmQsIDB4NTYsIDB4NzgsIDB4ZjIsIDB4M2QsIDB4MWIsIDB4YzQsIDB4ZWYsIDB4MmQsIDB4NzUsIDB4YWEsIDB4YWUsCisgIDB4ODQsIDB4NWMsIDB4OTEsIDB4NTIsIDB4NDksIDB4YjAsIDB4ZDUsIDB4ODYsIDB4MDMsIDB4ZTYsIDB4OTksIDB4NGUsCisgIDB4ODQsIDB4MjAsIDB4ODAsIDB4MjYsIDB4M2QsIDB4NzksIDB4YjgsIDB4MzcsIDB4MzAsIDB4NTYsIDB4MGEsIDB4MzEsCisgIDB4YjEsIDB4YTUsIDB4Y2MsIDB4MTIsIDB4ZTgsIDB4NzIsIDB4YTYsIDB4MmIsIDB4YmUsIDB4MWEsIDB4YzAsIDB4ZDUsCisgIDB4ZGYsIDB4MmEsIDB4ZDAsIDB4ZTQsIDB4OWEsIDB4N2IsIDB4ZTAsIDB4MDAsIDB4NjQsIDB4ZWYsIDB4MGIsIDB4YmIsCisgIDB4OTAsIDB4ZjQsIDB4Y2MsIDB4ODUsIDB4ZWQsIDB4NmIsIDB4NDAsIDB4NDEsIDB4OGIsIDB4YTMsIDB4NzEsIDB4YTUsCisgIDB4NzYsIDB4ZDMsIDB4YTksIDB4ZTgsIDB4NzAsIDB4ZjgsIDB4ODksIDB4YTMsIDB4MWUsIDB4NTksIDB4YjgsIDB4MjgsCisgIDB4ZTMsIDB4ZDksIDB4ZmIsIDB4NjIsIDB4ZDgsIDB4ZWIsIDB4ZTYsIDB4MDgsIDB4ZjYsIDB4ZDUsIDB4NTksIDB4MjMsCisgIDB4YTUsIDB4NmYsIDB4MzcsIDB4MTcsIDB4YjMsIDB4NWQsIDB4YTAsIDB4ZTQsIDB4MmIsIDB4YWUsIDB4OTAsIDB4ZTUsCisgIDB4NmEsIDB4NDIsIDB4MWIsIDB4YTAsIDB4NWEsIDB4YjUsIDB4N2QsIDB4NjgsIDB4Y2EsIDB4NzgsIDB4MDQsIDB4ZjcsCisgIDB4MjgsIDB4ZjQsIDB4MmYsIDB4NGYsIDB4YjgsIDB4ZjcsIDB4NjEsIDB4NjIsIDB4MjMsIDB4ZjEsIDB4ODUsIDB4YWIsCisgIDB4MDIsIDB4ZWEsIDB4NGMsIDB4NmYsIDB4NzEsIDB4MTMsIDB4MzAsIDB4NzksIDB4MzEsIDB4ZTUsIDB4NjQsIDB4ZjMsCisgIDB4YmUsIDB4NzAsIDB4YzAsIDB4MzcsIDB4NDYsIDB4ZGYsIDB4YmIsIDB4YmEsIDB4MGYsIDB4OGQsIDB4MWEsIDB4ZjgsCisgIDB4ZDMsIDB4N2YsIDB4ZDksIDB4MmYsIDB4NDEsIDB4ZjEsIDB4ZjUsIDB4NGYsIDB4OWIsIDB4MmYsIDB4YWIsIDB4OWIsCisgIDB4ZGEsIDB4YWQsIDB4Y2YsIDB4ZmUsIDB4ODQsIDB4NDksIDB4ODEsIDB4YzUsIDB4MmIsIDB4MzMsIDB4MDMsIDB4MjIsCisgIDB4MDIsIDB4NmUsIDB4ZWUsIDB4NGYsIDB4MjMsIDB4MTcsIDB4YTcsIDB4YjAsIDB4MjYsIDB4YTIsIDB4MmMsIDB4YjksCisgIDB4ODcsIDB4Y2UsIDB4NmIsIDB4NmIsIDB4NWIsIDB4ZDksIDB4YzYsIDB4N2YsIDB4YTMsIDB4ZTMsIDB4ODcsIDB4YTQsCisgIDB4MzksIDB4YTYsIDB4ZWQsIDB4YzgsIDB4MmUsIDB4NjYsIDB4YzksIDB4ZWYsIDB4MTUsIDB4ZjEsIDB4ZmEsIDB4NWIsCisgIDB4YTEsIDB4NGEsIDB4YjMsIDB4OGEsIDB4MjcsIDB4YzIsIDB4YWYsIDB4YTgsIDB4M2YsIDB4NmYsIDB4NWYsIDB4MjQsCisgIDB4MzksIDB4MGEsIDB4YjgsIDB4OGYsIDB4ZDUsIDB4ZjgsIDB4ZDMsIDB4NTAsIDB4ZTgsIDB4ZGIsIDB4NTQsIDB4YmEsCisgIDB4ODUsIDB4OGEsIDB4MzEsIDB4YjIsIDB4OWYsIDB4YzksIDB4YjIsIDB4ZGMsIDB4YTcsIDB4ZDksIDB4OTMsIDB4YmQsCisgIDB4NjEsIDB4NjAsIDB4YWQsIDB4MGMsIDB4M2EsIDB4ODEsIDB4MTQsIDB4N2MsIDB4YjksIDB4MGUsIDB4MGEsIDB4MmIsCisgIDB4YjMsIDB4OGMsIDB4ZmYsIDB4NDksIDB4NjksIDB4MDAsIDB4MDAsIDB4YzEsIDB4OTcsIDB4M2MsIDB4ZDUsIDB4OTksCisgIDB4ZDEsIDB4YWIsIDB4YWMsIDB4N2MsIDB4NWUsIDB4N2QsIDB4YTcsIDB4ZjMsIDB4YjEsIDB4NTMsIDB4NzgsIDB4ODIsCisgIDB4ZDUsIDB4NzEsIDB4ZjQsIDB4MWMsIDB4NDYsIDB4YmQsIDB4MDMsIDB4MWEsIDB4YjksIDB4Y2UsIDB4YjgsIDB4MzMsCisgIDB4N2MsIDB4ZjYsIDB4NTYsIDB4OGEsIDB4NWUsIDB4MWEsIDB4ZTIsIDB4MzMsIDB4MWQsIDB4OTIsIDB4ODIsIDB4MDQsCisgIDB4MTEsIDB4MjksIDB4NTAsIDB4MGMsIDB4ZWIsIDB4YzcsIDB4N2IsIDB4Y2EsIDB4MTEsIDB4MzcsIDB4ZTQsIDB4OTMsCisgIDB4NjYsIDB4ZjgsIDB4NzgsIDB4ZjEsIDB4MGMsIDB4MmQsIDB4ZGQsIDB4MjMsIDB4ODcsIDB4NDgsIDB4MWYsIDB4YjEsCisgIDB4ZDAsIDB4ZjksIDB4MmMsIDB4ZDgsIDB4M2YsIDB4NTIsIDB4MTQsIDB4YzksIDB4MTMsIDB4ZGUsIDB4ZWQsIDB4M2YsCisgIDB4ZGUsIDB4OWMsIDB4MWUsIDB4M2EsIDB4YWQsIDB4ZTEsIDB4NzMsIDB4MjAsIDB4ZTUsIDB4MWQsIDB4NTIsIDB4OTQsCisgIDB4ZGQsIDB4NmMsIDB4OTAsIDB4MzIsIDB4YTEsIDB4NWIsIDB4MTIsIDB4NDcsIDB4NzgsIDB4ZWIsIDB4MzksIDB4Y2MsCisgIDB4N2UsIDB4NjAsIDB4YzgsIDB4M2IsIDB4NDgsIDB4YjMsIDB4ZjUsIDB4NGMsIDB4NmEsIDB4MmUsIDB4NTAsIDB4Y2MsCisgIDB4ODYsIDB4OWYsIDB4ZDYsIDB4ZjAsIDB4NTEsIDB4ZmUsIDB4NzAsIDB4OGUsIDB4NmYsIDB4NDYsIDB4NGEsIDB4MjgsCisgIDB4Y2EsIDB4YzYsIDB4OTcsIDB4NzMsIDB4ZmYsIDB4YjMsIDB4M2YsIDB4M2EsIDB4N2IsIDB4YmMsIDB4MzksIDB4ODAsCisgIDB4NDYsIDB4ZjcsIDB4NDQsIDB4NmIsIDB4YzQsIDB4ZjMsIDB4MzQsIDB4ZjYsIDB4YWMsIDB4NDAsIDB4MzIsIDB4MDQsCisgIDB4ZWUsIDB4OWMsIDB4YTQsIDB4NzgsIDB4YjAsIDB4OTEsIDB4NzcsIDB4OTMsIDB4ZGYsIDB4M2YsIDB4ZGUsIDB4OWMsCisgIDB4MGIsIDB4NWIsIDB4ZjEsIDB4MzksIDB4YmYsIDB4NmUsIDB4NjYsIDB4YjQsIDB4NDIsIDB4NjQsIDB4NjMsIDB4NjYsCisgIDB4ZWEsIDB4MTMsIDB4YTIsIDB4MzMsIDB4ZTIsIDB4MGYsIDB4ZjQsIDB4OGUsIDB4MjAsIDB4NzcsIDB4YjQsIDB4MjYsCisgIDB4M2QsIDB4OWMsIDB4YWUsIDB4ZTQsIDB4OGUsIDB4NjYsIDB4NGMsIDB4YjgsIDB4YzksIDB4MmQsIDB4ZDIsIDB4YTYsCisgIDB4OGIsIDB4YWQsIDB4ODQsIDB4ZTQsIDB4MWYsIDB4NmEsIDB4MGUsIDB4NWUsIDB4ZDQsIDB4NTYsIDB4ZGEsIDB4ZGQsCisgIDB4ZDMsIDB4MTYsIDB4NDQsIDB4OGQsIDB4YWQsIDB4ZDQsIDB4NzcsIDB4OTIsIDB4YjUsIDB4NmMsIDB4MGIsIDB4ZWUsCisgIDB4NzMsIDB4OTgsIDB4MDcsIDB4OGEsIDB4ZTksIDB4YzksIDB4YzEsIDB4MDUsIDB4ZWMsIDB4NmEsIDB4YTUsIDB4OGEsCisgIDB4ZDcsIDB4MGIsIDB4NDcsIDB4ZDgsIDB4MDcsIDB4YTQsIDB4NTYsIDB4MzIsIDB4MmUsIDB4OTgsIDB4ZGUsIDB4NTYsCisgIDB4NTksIDB4MjUsIDB4ZTEsIDB4YmMsIDB4NzAsIDB4NTksIDB4OWIsIDB4NzIsIDB4OTAsIDB4ZGEsIDB4YzksIDB4YjUsCisgIDB4NDgsIDB4ZTcsIDB4MWYsIDB4NjgsIDB4NmUsIDB4OWUsIDB4NmEsIDB4ZjIsIDB4M2EsIDB4ZjAsIDB4OWMsIDB4YWIsCisgIDB4Y2UsIDB4MGQsIDB4OGMsIDB4MDEsIDB4YjEsIDB4ZTYsIDB4NjQsIDB4MmIsIDB4NjgsIDB4ZjUsIDB4ODEsIDB4NzIsCisgIDB4MzcsIDB4ZDYsIDB4YTUsIDB4ZmEsIDB4NDAsIDB4YjUsIDB4MjAsIDB4NjgsIDB4N2UsIDB4MWIsIDB4ZDQsIDB4NTAsCisgIDB4OGUsIDB4YzQsIDB4NDAsIDB4N2MsIDB4YmMsIDB4MzksIDB4NDksIDB4N2YsIDB4MDcsIDB4MzQsIDB4OTAsIDB4ZTUsCisgIDB4NDgsIDB4NTAsIDB4YTcsIDB4YjAsIDB4MjksIDB4NTEsIDB4NTAsIDB4NDUsIDB4OGQsIDB4ODMsIDB4ZWUsIDB4MmUsCisgIDB4ZDcsIDB4NDUsIDB4NGIsIDB4N2IsIDB4MDUsIDB4MTEsIDB4ZWEsIDB4ZTgsIDB4OTcsIDB4MmIsIDB4YjUsIDB4ZjQsCisgIDB4OGIsIDB4M2EsIDB4YzUsIDB4NzUsIDB4MTYsIDB4ODMsIDB4MWEsIDB4YTcsIDB4YzYsIDB4YWUsIDB4MTUsIDB4MTQsCisgIDB4YmYsIDB4NjAsIDB4OWUsIDB4YTcsIDB4ZTIsIDB4ZjEsIDB4ZTYsIDB4NTQsIDB4MjgsIDB4M2YsIDB4NjIsIDB4NDQsCisgIDB4ZjEsIDB4NzIsIDB4YTksIDB4NWYsIDB4ZmIsIDB4ZjAsIDB4MjIsIDB4ZmMsIDB4MmUsIDB4ZTMsIDB4ZDUsIDB4MDIsCisgIDB4OGEsIDB4NGMsIDB4NGUsIDB4ZTIsIDB4YjIsIDB4MTUsIDB4YjcsIDB4ZjksIDB4NDYsIDB4NTgsIDB4ZGUsIDB4MjAsCisgIDB4ZmYsIDB4YmEsIDB4YmIsIDB4MTAsIDB4NmQsIDB4NmIsIDB4MmIsIDB4YjksIDB4ODIsIDB4MTAsIDB4OGQsIDB4NDEsCisgIDB4M2YsIDB4YzIsIDB4MjQsIDB4MTMsIDB4NGUsIDB4MDMsIDB4YjMsIDB4MjIsIDB4YWIsIDB4NGUsIDB4ZmIsIDB4ZGYsCisgIDB4MzQsIDB4MGYsIDB4ODIsIDB4MGIsIDB4YjIsIDB4OTQsIDB4NmEsIDB4MWUsIDB4ODQsIDB4NzAsIDB4YmMsIDB4MWIsCisgIDB4OTUsIDB4MDQsIDB4ZWQsIDB4NDUsIDB4YmEsIDB4YWYsIDB4OGQsIDB4M2UsIDB4ZDQsIDB4M2IsIDB4YTAsIDB4YzgsCisgIDB4NzAsIDB4ZjksIDB4MTAsIDB4MWEsIDB4MjUsIDB4Y2UsIDB4ODMsIDB4NjgsIDB4MzIsIDB4OWUsIDB4MGIsIDB4ZTUsCisgIDB4MGMsIDB4YTMsIDB4ZTQsIDB4M2UsIDB4YTgsIDB4MTksIDB4NjIsIDB4MDUsIDB4N2IsIDB4YTEsIDB4ZWEsIDB4ODIsCisgIDB4YjcsIDB4ODIsIDB4YTYsIDB4ZTYsIDB4ZWUsIDB4MGUsIDB4NGMsIDB4Y2MsIDB4MGUsIDB4NTQsIDB4NWUsIDB4YjMsCisgIDB4MzksIDB4NDYsIDB4ODgsIDB4YzksIDB4ZTUsIDB4ZmQsIDB4MGUsIDB4NzQsIDB4MzYsIDB4ZGQsIDB4MjIsIDB4NjksCisgIDB4NjUsIDB4ODAsIDB4ZDYsIDB4ZWQsIDB4N2MsIDB4MTQsIDB4YTcsIDB4Y2UsIDB4NmYsIDB4MWQsIDB4MjMsIDB4NDYsCisgIDB4NTAsIDB4NWEsIDB4ZjAsIDB4ZjEsIDB4ZWYsIDB4OTMsIDB4ODYsIDB4NWIsIDB4YmEsIDB4ZTksIDB4OTEsIDB4ZGQsCisgIDB4MmYsIDB4ZmEsIDB4NjcsIDB4ZTAsIDB4MjQsIDB4NmYsIDB4MDAsIDB4NGIsIDB4ZjQsIDB4ZTMsIDB4NDQsIDB4NDEsCisgIDB4YjgsIDB4MzksIDB4MWMsIDB4ZTUsIDB4OTQsIDB4ZTYsIDB4YzcsIDB4MWIsIDB4ZjMsIDB4MzEsIDB4NjAsIDB4NmMsCisgIDB4ZmMsIDB4NGIsIDB4YTUsIDB4NzksIDB4YmEsIDB4OGYsIDB4Y2IsIDB4MGYsIDB4ZjUsIDB4MmUsIDB4MTYsIDB4NWEsCisgIDB4ZjYsIDB4ZmEsIDB4MjQsIDB4NzgsIDB4YWYsIDB4YmMsIDB4MDksIDB4MzUsIDB4OTMsIDB4NjMsIDB4MjQsIDB4NmQsCisgIDB4ZmUsIDB4Y2IsIDB4MmUsIDB4YWQsIDB4YWUsIDB4N2UsIDB4NjgsIDB4YzQsIDB4OTMsIDB4MWQsIDB4MzYsIDB4MjQsCisgIDB4OTgsIDB4YWYsIDB4MzAsIDB4ZTcsIDB4ZmIsIDB4ODMsIDB4YzcsIDB4NzgsIDB4NTcsIDB4NDIsIDB4MzgsIDB4ZmEsCisgIDB4OGEsIDB4OWUsIDB4N2YsIDB4ZmMsIDB4ZjYsIDB4ZjksIDB4Y2QsIDB4NzUsIDB4NzksIDB4YzAsIDB4NDksIDB4MDAsCisgIDB4OGUsIDB4YzYsIDB4ZjYsIDB4ZTYsIDB4OTksIDB4ZTgsIDB4ZDYsIDB4ZmEsIDB4YzAsIDB4OWMsIDB4MzEsIDB4YTAsCisgIDB4NDEsIDB4MGUsIDB4YzEsIDB4NzAsIDB4MWIsIDB4MzUsIDB4MTUsIDB4ODQsIDB4YWUsIDB4N2MsIDB4MDcsIDB4ZjMsCisgIDB4NDgsIDB4ODcsIDB4YWQsIDB4YTIsIDB4MmIsIDB4MjAsIDB4MDMsIDB4NTIsIDB4NjAsIDB4MTMsIDB4MTMsIDB4MTcsCisgIDB4MjUsIDB4MzMsIDB4MmQsIDB4NjcsIDB4MWQsIDB4Y2YsIDB4NzksIDB4ZmIsIDB4NTQsIDB4YzksIDB4YzcsIDB4MjgsCisgIDB4YjksIDB4OTIsIDB4OTYsIDB4YjAsIDB4Y2QsIDB4ZDYsIDB4OWEsIDB4ZmUsIDB4OWMsIDB4YmMsIDB4MzMsIDB4ZWEsCisgIDB4YzAsIDB4ZDAsIDB4MzgsIDB4ZjAsIDB4NzQsIDB4MWYsIDB4MDIsIDB4YjIsIDB4MTAsIDB4ZDMsIDB4ODcsIDB4ZWQsCisgIDB4NzMsIDB4N2IsIDB4YmEsIDB4NjMsIDB4MDcsIDB4YTIsIDB4MzUsIDB4YzUsIDB4MzEsIDB4NDUsIDB4MWYsIDB4ZDcsCisgIDB4ZGEsIDB4NWEsIDB4ZTgsIDB4MTUsIDB4ZGEsIDB4NTIsIDB4NGYsIDB4ZDAsIDB4YTMsIDB4NmQsIDB4NTksIDB4OTAsCisgIDB4YzksIDB4NzUsIDB4MGIsIDB4YTYsIDB4ZWYsIDB4MDcsIDB4MTYsIDB4YWIsIDB4Y2IsIDB4MzIsIDB4YzYsIDB4MTcsCisgIDB4NWQsIDB4NDksIDB4NzksIDB4NTUsIDB4ZDYsIDB4NjIsIDB4MzcsIDB4YWQsIDB4ZWYsIDB4N2YsIDB4NzAsIDB4ZWYsCisgIDB4N2MsIDB4ZmMsIDB4OGIsIDB4NzAsIDB4MDUsIDB4OTksIDB4ZDUsIDB4YjYsIDB4ZDEsIDB4MmUsIDB4MmIsIDB4OTMsCisgIDB4Y2MsIDB4ZmMsIDB4M2EsIDB4ZjAsIDB4YTcsIDB4NjMsIDB4NzYsIDB4YWEsIDB4MDYsIDB4YmMsIDB4OGUsIDB4ZjIsCisgIDB4NGMsIDB4NzAsIDB4MmQsIDB4YTUsIDB4MmIsIDB4NDUsIDB4YjksIDB4MmEsIDB4ODQsIDB4N2UsIDB4ZTYsIDB4YzMsCisgIDB4YTIsIDB4ZTQsIDB4ZjYsIDB4YmYsIDB4YjUsIDB4YzcsIDB4NjAsIDB4MWEsIDB4MWUsIDB4Y2EsIDB4OTIsIDB4OTksCisgIDB4YjgsIDB4YjAsIDB4OTcsIDB4ZDYsIDB4ZjQsIDB4Y2EsIDB4YWQsIDB4MjcsIDB4MjYsIDB4YzQsIDB4YmEsIDB4NjUsCisgIDB4NzAsIDB4YjUsIDB4ZGYsIDB4YTgsIDB4NTcsIDB4ZDIsIDB4ZGEsIDB4NDcsIDB4ZjQsIDB4NDksIDB4ZjksIDB4ZmIsCisgIDB4ZGUsIDB4MDEsIDB4N2UsIDB4MjIsIDB4N2QsIDB4M2EsIDB4OTQsIDB4MWYsIDB4MGQsIDB4MmYsIDB4ZjksIDB4NDcsCisgIDB4MmEsIDB4MGQsIDB4MzYsIDB4ZDMsIDB4YmMsIDB4NTMsIDB4MmMsIDB4ZmQsIDB4ODMsIDB4NTUsIDB4YzUsIDB4ZDUsCisgIDB4MDcsIDB4ZmIsIDB4NTQsIDB4ZTgsIDB4YWQsIDB4MjIsIDB4NmIsIDB4NTMsIDB4MWIsIDB4ZDMsIDB4NmQsIDB4YzAsCisgIDB4OGMsIDB4MzgsIDB4MmUsIDB4NjAsIDB4ZmEsIDB4NDYsIDB4MDksIDB4Y2IsIDB4ZTgsIDB4OTMsIDB4NzQsIDB4ZGQsCisgIDB4OGUsIDB4ZGMsIDB4NmYsIDB4YzAsIDB4ZmEsIDB4YTEsIDB4NzcsIDB4NWUsIDB4ZjYsIDB4NWUsIDB4NjYsIDB4ZDUsCisgIDB4YzcsIDB4ZWEsIDB4OGYsIDB4OGYsIDB4MjAsIDB4ZDEsIDB4ZTAsIDB4M2UsIDB4OTgsIDB4MGUsIDB4MmUsIDB4NWQsCisgIDB4MWYsIDB4YTgsIDB4MGIsIDB4ZmUsIDB4ODcsIDB4NGEsIDB4M2UsIDB4OGEsIDB4YTQsIDB4MDQsIDB4YjksIDB4MzQsCisgIDB4MjYsIDB4ZmUsIDB4YWEsIDB4ZjIsIDB4ZWIsIDB4NmUsIDB4MTUsIDB4ZWQsIDB4N2UsIDB4ZDgsIDB4ZTcsIDB4ZGUsCisgIDB4ZTEsIDB4Y2EsIDB4MjIsIDB4MWMsIDB4MTYsIDB4NzEsIDB4NGQsIDB4YzgsIDB4MzEsIDB4OGQsIDB4OTgsIDB4MGIsCisgIDB4OGIsIDB4YzYsIDB4MGQsIDB4NGYsIDB4YzEsIDB4NDAsIDB4ODksIDB4MmUsIDB4N2QsIDB4YTgsIDB4MWYsIDB4M2EsCisgIDB4MTgsIDB4NGQsIDB4NjIsIDB4YjIsIDB4ZmIsIDB4YmEsIDB4OTYsIDB4YjksIDB4NjAsIDB4MmUsIDB4MGMsIDB4NWMsCisgIDB4MDksIDB4YTcsIDB4OWMsIDB4MTEsIDB4YzUsIDB4OTcsIDB4ZjAsIDB4MGYsIDB4MWMsIDB4YjYsIDB4YWUsIDB4NDEsCisgIDB4NGQsIDB4ZjEsIDB4MDAsIDB4YzcsIDB4OGEsIDB4NjQsIDB4YjEsIDB4YjQsIDB4NzIsIDB4MTQsIDB4ZGIsIDB4NTksCisgIDB4ZDIsIDB4NTcsIDB4NzQsIDB4MmYsIDB4MDQsIDB4NzUsIDB4ZjYsIDB4M2IsIDB4NTAsIDB4NjksIDB4NWUsIDB4MDYsCisgIDB4MzUsIDB4NzMsIDB4ZjAsIDB4MDMsIDB4MDMsIDB4OWQsIDB4MDgsIDB4ZTEsIDB4ZTksIDB4NmEsIDB4MjksIDB4MDUsCisgIDB4MTksIDB4OTksIDB4NWIsIDB4MjYsIDB4ODcsIDB4OWIsIDB4ZmMsIDB4NDMsIDB4MDUsIDB4MzksIDB4M2IsIDB4NGEsCisgIDB4MDEsIDB4MTksIDB4ZTAsIDB4YWQsIDB4OTEsIDB4YzEsIDB4ZGQsIDB4YmUsIDB4ZGQsIDB4OTUsIDB4ZTUsIDB4ZmMsCisgIDB4MWQsIDB4M2QsIDB4OTksIDB4NWUsIDB4M2QsIDB4YmMsIDB4MTMsIDB4MTUsIDB4ZmYsIDB4ZTEsIDB4MjMsIDB4NTQsCisgIDB4OWUsIDB4YjMsIDB4OWQsIDB4YzIsIDB4MTksIDB4ZjIsIDB4YjQsIDB4ODcsIDB4YzksIDB4YmUsIDB4NGIsIDB4YzgsCisgIDB4MWEsIDB4NDMsIDB4NjUsIDB4NTQsIDB4MDksIDB4MGMsIDB4ZTAsIDB4ZWYsIDB4MWYsIDB4NjMsIDB4MjcsIDB4YjgsCisgIDB4NWIsIDB4YjEsIDB4ZGIsIDB4NzMsIDB4MjMsIDB4MjYsIDB4NjUsIDB4ODMsIDB4NmYsIDB4MWQsIDB4N2UsIDB4MzUsCisgIDB4NmQsIDB4ZWIsIDB4YzMsIDB4MzYsIDB4MTYsIDB4MzcsIDB4ZTIsIDB4NGIsIDB4MDQsIDB4M2QsIDB4NjYsIDB4N2UsCisgIDB4ZmYsIDB4NzYsIDB4YTEsIDB4YTgsIDB4MjAsIDB4YTEsIDB4ZWQsIDB4YzUsIDB4OGYsIDB4OTYsIDB4ODksIDB4YjAsCisgIDB4YmYsIDB4YmQsIDB4ZmQsIDB4ZDMsIDB4OGYsIDB4MWMsIDB4ODYsIDB4ZmIsIDB4YzIsIDB4YTIsIDB4NmYsIDB4M2YsCisgIDB4ZmQsIDB4Y2EsIDB4ZTIsIDB4NjksIDB4OGYsIDB4MjYsIDB4NzEsIDB4MGIsIDB4YWIsIDB4ZjAsIDB4YWYsIDB4NGIsCisgIDB4ZWUsIDB4ZmYsIDB4ZDgsIDB4NDQsIDB4NWEsIDB4YjIsIDB4ZjcsIDB4NTIsIDB4MjEsIDB4YjcsIDB4ZWEsIDB4Y2EsCisgIDB4NTMsIDB4NTAsIDB4NmQsIDB4NTEsIDB4MjYsIDB4NTUsIDB4NDcsIDB4YzYsIDB4ODksIDB4Y2MsIDB4OGEsIDB4MjEsCisgIDB4ZTEsIDB4NjUsIDB4MDgsIDB4NDUsIDB4ZDIsIDB4NWYsIDB4OWIsIDB4ZjQsIDB4MDAsIDB4ZjQsIDB4OWIsIDB4NTQsCisgIDB4NjAsIDB4ODgsIDB4MzcsIDB4M2EsIDB4ZWUsIDB4OTQsIDB4MDMsIDB4OWYsIDB4NzAsIDB4MjgsIDB4NTksIDB4MWYsCisgIDB4ZDIsIDB4N2EsIDB4MGYsIDB4ZjAsIDB4NmYsIDB4ZWIsIDB4NzEsIDB4MTcsIDB4ZjAsIDB4ZWEsIDB4NjAsIDB4MWUsCisgIDB4M2EsIDB4ZDQsIDB4ODMsIDB4MWIsIDB4ODUsIDB4ZjIsIDB4MjksIDB4MzEsIDB4OWMsIDB4MWUsIDB4OTgsIDB4ODMsCisgIDB4YjAsIDB4MjYsIDB4OWMsIDB4NDIsIDB4NGYsIDB4M2IsIDB4MTQsIDB4MmYsIDB4ZGQsIDB4M2IsIDB4MDAsIDB4YjAsCisgIDB4NTQsIDB4Y2EsIDB4NWIsIDB4NjYsIDB4YjIsIDB4MTEsIDB4MGYsIDB4MTIsIDB4YmYsIDB4ZWQsIDB4NTksIDB4MjMsCisgIDB4OGQsIDB4YzYsIDB4OTksIDB4MzcsIDB4MDYsIDB4ZmIsIDB4ZTYsIDB4NWQsIDB4OWUsIDB4NGEsIDB4NzcsIDB4OWQsCisgIDB4YmIsIDB4NjksIDB4ZDgsIDB4NDMsIDB4ODksIDB4ZGQsIDB4NjgsIDB4ODEsIDB4MzIsIDB4ZTcsIDB4NjMsIDB4ZjQsCisgIDB4NGUsIDB4NDEsIDB4MzAsIDB4MjgsIDB4ZjEsIDB4MDEsIDB4MTgsIDB4YjcsIDB4MjksIDB4MzIsIDB4YWUsIDB4ZGMsCisgIDB4MzQsIDB4NTUsIDB4MmIsIDB4M2EsIDB4NTIsIDB4ZTYsIDB4ZWQsIDB4Y2EsIDB4NzQsIDB4ZjAsIDB4NDMsIDB4OGIsCisgIDB4NGMsIDB4MmIsIDB4MjIsIDB4NzAsIDB4YjgsIDB4MzQsIDB4MzEsIDB4NmUsIDB4MGUsIDB4ZjYsIDB4NDEsIDB4MWIsCisgIDB4NzksIDB4YzQsIDB4MWIsIDB4YWEsIDB4MTMsIDB4ODYsIDB4MGIsIDB4NzAsIDB4OGIsIDB4YjIsIDB4NWUsIDB4YzgsCisgIDB4OWMsIDB4ZTMsIDB4YTksIDB4OTIsIDB4MTIsIDB4ZGYsIDB4YzcsIDB4MGYsIDB4YzYsIDB4YjMsIDB4ODUsIDB4YjcsCisgIDB4NWEsIDB4Y2MsIDB4M2IsIDB4MWQsIDB4MzIsIDB4MzYsIDB4MDgsIDB4MjAsIDB4NTAsIDB4NjEsIDB4OTksIDB4NTksCisgIDB4NTcsIDB4ZWMsIDB4MmIsIDB4ZGEsIDB4NTQsIDB4NzgsIDB4NzcsIDB4MzMsIDB4NmQsIDB4YzAsIDB4NGEsIDB4ZmQsCisgIDB4YTEsIDB4ZDgsIDB4MGYsIDB4OTQsIDB4MmIsIDB4ODcsIDB4YzYsIDB4ZmYsIDB4YjIsIDB4MWUsIDB4YTAsIDB4ZjEsCisgIDB4MGEsIDB4MzcsIDB4MDAsIDB4NGIsIDB4ODAsIDB4ZDUsIDB4NWEsIDB4ODUsIDB4OTIsIDB4MjksIDB4YWMsIDB4OTEsCisgIDB4OTEsIDB4NTYsIDB4MjYsIDB4ODIsIDB4OTYsIDB4ZWEsIDB4NWEsIDB4OTcsIDB4ODksIDB4Y2QsIDB4NzksIDB4YWQsCisgIDB4YmUsIDB4ZGEsIDB4NTMsIDB4ZWUsIDB4NGIsIDB4MDAsIDB4ZDYsIDB4NzgsIDB4NTAsIDB4ZWQsIDB4MjMsIDB4OGUsCisgIDB4NjYsIDB4NDUsIDB4MmEsIDB4NTUsIDB4NzYsIDB4NzIsIDB4MTIsIDB4NTAsIDB4OGIsIDB4ODMsIDB4MjgsIDB4MjAsCisgIDB4MWUsIDB4YjAsIDB4N2YsIDB4MjAsIDB4ODUsIDB4OTYsIDB4M2QsIDB4YTUsIDB4NDEsIDB4N2UsIDB4MzgsIDB4NzAsCisgIDB4NGYsIDB4NzIsIDB4OWMsIDB4NzYsIDB4MTAsIDB4OGYsIDB4OWEsIDB4ZTAsIDB4MjEsIDB4MjUsIDB4M2EsIDB4OGEsCisgIDB4NWMsIDB4YzEsIDB4N2EsIDB4YjksIDB4ZjEsIDB4M2IsIDB4NDYsIDB4ZDcsIDB4MzcsIDB4NzksIDB4NDAsIDB4OTcsCisgIDB4MWEsIDB4NjQsIDB4MzcsIDB4NzcsIDB4ZjgsIDB4M2YsIDB4ZjksIDB4OWIsIDB4ZjAsIDB4ZmUsIDB4YjMsIDB4MTMsCisgIDB4OWUsIDB4YjcsIDB4YmIsIDB4ODcsIDB4NTcsIDB4NTcsIDB4YTgsIDB4NmEsIDB4ODIsIDB4MDgsIDB4ODYsIDB4ZGIsCisgIDB4NjUsIDB4YjUsIDB4Y2EsIDB4YTcsIDB4YmYsIDB4YjksIDB4NmEsIDB4ZmUsIDB4NWUsIDB4NDIsIDB4ZTAsIDB4MzIsCisgIDB4ZmMsIDB4YjUsIDB4YjUsIDB4ZjYsIDB4MDQsIDB4NTUsIDB4M2EsIDB4NzYsIDB4ZjksIDB4MTQsIDB4OGUsIDB4YWYsCisgIDB4ZDcsIDB4ZGUsIDB4NTQsIDB4NjQsIDB4NmMsIDB4ODgsIDB4NDAsIDB4N2YsIDB4YmMsIDB4ZmEsIDB4YTgsIDB4ZGIsCisgIDB4NTUsIDB4MTgsIDB4YTcsIDB4YWIsIDB4YmUsIDB4NzcsIDB4NTksIDB4ZDMsIDB4ZWUsIDB4ZWUsIDB4YTIsIDB4ZTAsCisgIDB4MTksIDB4OWIsIDB4M2EsIDB4OTgsIDB4NmIsIDB4MmQsIDB4Y2QsIDB4YzUsIDB4YTMsIDB4NTUsIDB4YjUsIDB4MzcsCisgIDB4OWUsIDB4YTcsIDB4MTcsIDB4YjMsIDB4YTMsIDB4NGMsIDB4YTUsIDB4MjEsIDB4NTAsIDB4ZmEsIDB4YWIsIDB4ZTMsCisgIDB4Y2IsIDB4YWQsIDB4MzYsIDB4ZWQsIDB4NTYsIDB4MWMsIDB4ZDQsIDB4YmUsIDB4MDQsIDB4NDcsIDB4YmQsIDB4Y2EsCisgIDB4NDAsIDB4ZWMsIDB4ZTgsIDB4YTAsIDB4NWQsIDB4YWUsIDB4ODAsIDB4ZGMsIDB4MzQsIDB4OTMsIDB4ZjcsIDB4Y2IsCisgIDB4NzksIDB4OWMsIDB4NzUsIDB4ZDMsIDB4ZTcsIDB4MWMsIDB4ZDIsIDB4MzQsIDB4YjAsIDB4YmMsIDB4MDQsIDB4MTEsCisgIDB4NzAsIDB4MGQsIDB4NTksIDB4MWIsIDB4MTEsIDB4NzEsIDB4ZTQsIDB4M2MsIDB4MWUsIDB4YzgsIDB4NGIsIDB4ZTIsCisgIDB4MTYsIDB4OGYsIDB4OGUsIDB4NGYsIDB4OGYsIDB4MmYsIDB4OGYsIDB4MDEsIDB4MTIsIDB4NmMsIDB4ZDksIDB4ODQsCisgIDB4NzMsIDB4NDgsIDB4NDgsIDB4OTUsIDB4NGMsIDB4NmYsIDB4YjIsIDB4OWMsIDB4OGMsIDB4MWYsIDB4NWUsIDB4MGUsCisgIDB4YTQsIDB4N2EsIDB4N2MsIDB4OTcsIDB4NGMsIDB4OGUsIDB4MGUsIDB4YmUsIDB4ZTUsIDB4MjIsIDB4MGIsIDB4MmMsCisgIDB4NTEsIDB4ZTcsIDB4MTcsIDB4NjcsIDB4ZTcsIDB4YWYsIDB4NGUsIDB4ZGUsIDB4MWMsIDB4MGQsIDB4YTIsIDB4YzMsCisgIDB4YjMsIDB4ZjMsIDB4MWYsIDB4MDYsIDB4ZDEsIDB4ZWIsIDB4YjMsIDB4NmYsIDB4OGYsIDB4M2IsIDB4NzAsIDB4ODUsCisgIDB4MGMsIDB4NTEsIDB4NjgsIDB4NjMsIDB4NzAsIDB4NWYsIDB4YWQsIDB4NTksIDB4ZWQsIDB4OTAsIDB4NjcsIDB4NWUsCisgIDB4OTcsIDB4M2EsIDB4YzgsIDB4MzEsIDB4M2EsIDB4M2QsIDB4MTksIDB4NWYsIDB4NjIsIDB4ZTksIDB4OWIsIDB4NTAsCisgIDB4MDYsIDB4YTAsIDB4MzYsIDB4YTUsIDB4NDIsIDB4NTAsIDB4Y2EsIDB4ZTMsIDB4YzUsIDB4ZGEsIDB4NTMsIDB4NWIsCisgIDB4YmYsIDB4MjcsIDB4ZjgsIDB4ZTUsIDB4N2QsIDB4NWMsIDB4NTUsIDB4OWQsIDB4MjQsIDB4NzAsIDB4NjUsIDB4MGMsCisgIDB4NWYsIDB4YjIsIDB4NDYsIDB4ZjEsIDB4YzAsIDB4YWQsIDB4MjYsIDB4OWMsIDB4ZjIsIDB4NTUsIDB4OGIsIDB4MWMsCisgIDB4MmEsIDB4MDgsIDB4MGMsIDB4ZDEsIDB4ZjAsIDB4NWIsIDB4ODgsIDB4MTMsIDB4M2IsIDB4YjMsIDB4MzAsIDB4MzIsCisgIDB4MTIsIDB4YjksIDB4NTgsIDB4NjgsIDB4ZGEsIDB4MzMsIDB4ZTEsIDB4ZTUsIDB4YjcsIDB4OGMsIDB4NTMsIDB4ZWUsCisgIDB4NDcsIDB4M2EsIDB4NjEsIDB4ZWUsIDB4ZDYsIDB4NTEsIDB4OTgsIDB4NzYsIDB4ZDAsIDB4ZDYsIDB4MzQsIDB4MWMsCisgIDB4ZTYsIDB4NjIsIDB4MDYsIDB4MDEsIDB4ZmUsIDB4OTIsIDB4Y2IsIDB4ZTQsIDB4NzksIDB4M2YsIDB4YmIsIDB4MWUsCisgIDB4ZTUsIDB4NDUsIDB4Y2EsIDB4OGUsIDB4NDUsIDB4NjQsIDB4MjksIDB4NTksIDB4NjMsIDB4MTEsIDB4OGEsIDB4YzUsCisgIDB4YjAsIDB4MjgsIDB4YjIsIDB4MmMsIDB4MGQsIDB4M2EsIDB4YWIsIDB4ZDksIDB4MjksIDB4MDksIDB4YmIsIDB4ZGMsCisgIDB4ZTIsIDB4NWEsIDB4MmQsIDB4MmYsIDB4MTAsIDB4YjIsIDB4ZTAsIDB4ZGYsIDB4YjksIDB4NDYsIDB4OWQsIDB4MDksCisgIDB4ZDUsIDB4OTEsIDB4YjAsIDB4NTcsIDB4M2UsIDB4ZDAsIDB4M2EsIDB4MmYsIDB4N2MsIDB4ZjIsIDB4YjAsIDB4YWYsCisgIDB4Y2MsIDB4ZWUsIDB4Y2IsIDB4MTAsIDB4MDQsIDB4NjMsIDB4MWQsIDB4ODQsIDB4YjUsIDB4ZTUsIDB4YTMsIDB4MzYsCisgIDB4MmIsIDB4NjgsIDB4NGEsIDB4ZTYsIDB4NTYsIDB4NmQsIDB4YzEsIDB4MWUsIDB4ODAsIDB4MzYsIDB4ZTAsIDB4OGIsCisgIDB4YWUsIDB4NTIsIDB4NjAsIDB4ZjIsIDB4OWYsIDB4OWQsIDB4ZDQsIDB4YzksIDB4ZWUsIDB4YjIsIDB4Y2UsIDB4NDMsCisgIDB4ZTIsIDB4OGIsIDB4OTcsIDB4NTIsIDB4MzgsIDB4Y2EsIDB4Y2IsIDB4YzIsIDB4ZDYsIDB4MzgsIDB4NjksIDB4NWMsCisgIDB4NzEsIDB4YTMsIDB4ZDksIDB4YWEsIDB4NjgsIDB4NWYsIDB4MTIsIDB4ZTIsIDB4MjgsIDB4ZjgsIDB4YTAsIDB4ZTQsCisgIDB4ZDQsIDB4MGQsIDB4NmEsIDB4N2UsIDB4MGUsIDB4MGUsIDB4ZDgsIDB4OTcsIDB4YmUsIDB4MWMsIDB4MjMsIDB4N2QsCisgIDB4M2UsIDB4NzgsIDB4YTEsIDB4MzUsIDB4MjYsIDB4YWIsIDB4N2UsIDB4MTAsIDB4MzAsIDB4MDMsIDB4MDQsIDB4NWQsCisgIDB4MzIsIDB4NDEsIDB4ZGQsIDB4OGQsIDB4NTYsIDB4ZDksIDB4OWMsIDB4MzEsIDB4ZjIsIDB4NmMsIDB4OWYsIDB4MDksCisgIDB4ZGYsIDB4YzMsIDB4MGYsIDB4MWYsIDB4MjIsIDB4YjAsIDB4MTYsIDB4ZGMsIDB4NTMsIDB4M2QsIDB4NzcsIDB4NTUsCisgIDB4OGUsIDB4ZWQsIDB4NTUsIDB4ZTksIDB4Y2IsIDB4YjQsIDB4YzYsIDB4MDgsIDB4OWIsIDB4NjIsIDB4NGUsIDB4ZGEsCisgIDB4YjIsIDB4MjAsIDB4ZDcsIDB4ZTYsIDB4YTQsIDB4OWEsIDB4OGUsIDB4YzIsIDB4MmMsIDB4NDksIDB4MjAsIDB4YjQsCisgIDB4NDgsIDB4OGUsIDB4NDUsIDB4YWIsIDB4OTEsIDB4NDksIDB4MzQsIDB4ODgsIDB4ODQsIDB4NWMsIDB4ZjQsIDB4MDYsCisgIDB4ZmMsIDB4MDEsIDB4ZmEsIDB4ZGUsIDB4YjAsIDB4YzMsIDB4YTcsIDB4YzgsIDB4NzcsIDB4Y2QsIDB4MzUsIDB4ZTYsCisgIDB4Y2UsIDB4NmYsIDB4YjcsIDB4OGIsIDB4N2YsIDB4ZjAsIDB4NDIsIDB4MjEsIDB4OTMsIDB4ZjgsIDB4MDIsIDB4ZmYsCisgIDB4ZjgsIDB4NDUsIDB4NjIsIDB4MTEsIDB4MzAsIDB4N2IsIDB4OGEsIDB4MWYsIDB4NjUsIDB4OTMsIDB4MzYsIDB4NDAsCisgIDB4NGQsIDB4M2UsIDB4ODYsIDB4MmQsIDB4YWMsIDB4ZjUsIDB4NmMsIDB4NGIsIDB4NTAsIDB4YjYsIDB4N2UsIDB4YjEsCisgIDB4ZDUsIDB4MTMsIDB4Y2EsIDB4OTcsIDB4ODUsIDB4YmEsIDB4NGMsIDB4MDQsIDB4Y2YsIDB4ZTAsIDB4YjYsIDB4ZDEsCisgIDB4YjYsIDB4ZjIsIDB4NjUsIDB4OGQsIDB4MDUsIDB4YzMsIDB4OTgsIDB4NzIsIDB4NGQsIDB4MWMsIDB4YjYsIDB4M2UsCisgIDB4NDEsIDB4ODEsIDB4OTIsIDB4ZmMsIDB4OWUsIDB4NjksIDB4ZTMsIDB4M2YsIDB4MjMsIDB4NmQsIDB4OWMsIDB4OWUsCisgIDB4MWYsIDB4NjIsIDB4MDMsIDB4YmMsIDB4OTgsIDB4ZjEsIDB4OWQsIDB4OTMsIDB4MGUsIDB4MmEsIDB4Y2UsIDB4Y2YsCisgIDB4YTAsIDB4YTYsIDB4ZDcsIDB4ZDcsIDB4N2EsIDB4YjIsIDB4MzIsIDB4NGYsIDB4OTYsIDB4NDEsIDB4MjIsIDB4NzEsCisgIDB4MGYsIDB4YjYsIDB4ZDIsIDB4OTksIDB4NWYsIDB4MTgsIDB4YzUsIDB4MDMsIDB4YjQsIDB4ODgsIDB4MjAsIDB4NDcsCisgIDB4ZTEsIDB4MmIsIDB4OWQsIDB4ZTcsIDB4OGUsIDB4YWIsIDB4NGQsIDB4NDAsIDB4YTcsIDB4MGEsIDB4ZmMsIDB4MjYsCisgIDB4M2QsIDB4OGIsIDB4ODIsIDB4YTMsIDB4NzksIDB4MTYsIDB4YjQsIDB4YTcsIDB4ZDUsIDB4MDgsIDB4NWMsIDB4OGIsCisgIDB4ZWEsIDB4YTUsIDB4ZWYsIDB4YzIsIDB4YWIsIDB4MmIsIDB4OTcsIDB4ZWYsIDB4YTUsIDB4ZTQsIDB4OTYsIDB4ODQsCisgIDB4ODMsIDB4MzEsIDB4OGIsIDB4MWEsIDB4MDUsIDB4MjYsIDB4OTEsIDB4YjAsIDB4NDksIDB4YzcsIDB4MTEsIDB4OWUsCisgIDB4MTEsIDB4ODMsIDB4YjQsIDB4NmMsIDB4NjcsIDB4MmUsIDB4ODIsIDB4ZDUsIDB4ZDMsIDB4ZTEsIDB4YjQsIDB4ODQsCisgIDB4M2YsIDB4ODIsIDB4NDEsIDB4M2YsIDB4YWUsIDB4YWEsIDB4MDUsIDB4ZjUsIDB4NTIsIDB4NDMsIDB4MTksIDB4OWUsCisgIDB4ODQsIDB4ZmQsIDB4M2EsIDB4NTksIDB4NWIsIDB4YWMsIDB4YzQsIDB4MjAsIDB4M2QsIDB4MzIsIDB4ZTgsIDB4ODAsCisgIDB4NDcsIDB4NDAsIDB4Y2UsIDB4YzcsIDB4M2YsIDB4ZDQsIDB4YjMsIDB4MTIsIDB4YTksIDB4MjEsIDB4ZWUsIDB4MWUsCisgIDB4NjcsIDB4MjQsIDB4NzYsIDB4MjcsIDB4MjQsIDB4MGEsIDB4MTEsIDB4N2UsIDB4NzMsIDB4OTgsIDB4NmEsIDB4NzUsCisgIDB4YjQsIDB4MjksIDB4NjksIDB4ZDgsIDB4MTEsIDB4NmYsIDB4NDksIDB4MzcsIDB4YjUsIDB4MzcsIDB4YzIsIDB4ZWEsCisgIDB4YmUsIDB4OWIsIDB4NDMsIDB4NWYsIDB4MTYsIDB4MTUsIDB4ZTQsIDB4ZTIsIDB4YjIsIDB4YzIsIDB4NmQsIDB4MjcsCisgIDB4NjIsIDB4ZWMsIDB4ZmQsIDB4NzksIDB4MGUsIDB4MDksIDB4MjgsIDB4ODQsIDB4ODEsIDB4YmEsIDB4YTMsIDB4NmMsCisgIDB4NmQsIDB4ZjksIDB4NmIsIDB4ZGIsIDB4MTIsIDB4MmQsIDB4MzAsIDB4OTUsIDB4YzcsIDB4NGEsIDB4YTUsIDB4NzUsCisgIDB4ZmUsIDB4MzcsIDB4ZGEsIDB4Y2EsIDB4OTIsIDB4ZmIsIDB4YjAsIDB4MmQsIDB4NmYsIDB4ZWYsIDB4YjksIDB4ZjYsCisgIDB4N2UsIDB4YzcsIDB4N2QsIDB4NzEsIDB4YzMsIDB4ZmIsIDB4ZTIsIDB4MjYsIDB4OTksIDB4MmYsIDB4NWIsIDB4YmUsCisgIDB4MDUsIDB4NzYsIDB4YjksIDB4ZjIsIDB4MmYsIDB4ODIsIDB4ODcsIDB4NWYsIDB4MGYsIDB4YzAsIDB4ZGYsIDB4OWIsCisgIDB4YWQsIDB4NWEsIDB4MzUsIDB4NGYsIDB4NWYsIDB4ZTMsIDB4ODcsIDB4YTMsIDB4ZTgsIDB4NDgsIDB4NjEsIDB4NmMsCisgIDB4YzgsIDB4ZGYsIDB4NTgsIDB4NjksIDB4MGIsIDB4NDAsIDB4MzcsIDB4MDUsIDB4Y2QsIDB4N2MsIDB4YWIsIDB4YjAsCisgIDB4ZDEsIDB4YjIsIDB4ZWQsIDB4OWQsIDB4ZDEsIDB4ZjcsIDB4Y2IsIDB4MzAsIDB4NTcsIDB4NDUsIDB4YzMsIDB4MjIsCisgIDB4OTIsIDB4OTcsIDB4OWMsIDB4MTksIDB4MDMsIDB4YjIsIDB4ZjgsIDB4YmYsIDB4ZWMsIDB4ZmUsIDB4OTEsIDB4MjIsCisgIDB4NDEsIDB4YWYsIDB4MWMsIDB4NzUsIDB4NWMsIDB4MzUsIDB4MjUsIDB4ZDAsIDB4MDIsIDB4NjgsIDB4OTIsIDB4MGYsCisgIDB4OTEsIDB4MTgsIDB4ZTAsIDB4YzAsIDB4ZGUsIDB4NjcsIDB4NWIsIDB4NTksIDB4NDAsIDB4YTEsIDB4NDEsIDB4ODEsCisgIDB4OWUsIDB4NzYsIDB4ZGEsIDB4MDksIDB4NWIsIDB4ZDAsIDB4ZDEsIDB4OTMsIDB4NjIsIDB4ODYsIDB4MzgsIDB4ZTIsCisgIDB4MDMsIDB4M2YsIDB4NWEsIDB4YzQsIDB4ODUsIDB4OTgsIDB4OWMsIDB4ZDksIDB4YWQsIDB4NWQsIDB4ZWMsIDB4ZTQsCisgIDB4ZmEsIDB4OWEsIDB4NGMsIDB4NTcsIDB4NTUsIDB4OWQsIDB4OTYsIDB4MjEsIDB4YmMsIDB4ZmUsIDB4MWEsIDB4NWYsCisgIDB4M2UsIDB4YmEsIDB4YjUsIDB4ODksIDB4YzgsIDB4OTEsIDB4MWEsIDB4ODIsIDB4YmQsIDB4NzMsIDB4YmIsIDB4Y2YsCisgIDB4ZWQsIDB4ZjcsIDB4YjYsIDB4MzQsIDB4OWEsIDB4MjYsIDB4ODEsIDB4NTEsIDB4ZmQsIDB4NzEsIDB4OTcsIDB4MmUsCisgIDB4YjAsIDB4M2UsIDB4MTcsIDB4ODksIDB4MjQsIDB4NjgsIDB4NTcsIDB4YjksIDB4ZDksIDB4MjMsIDB4OWQsIDB4OWYsCisgIDB4MjcsIDB4ZDksIDB4MjksIDB4NjYsIDB4NWQsIDB4ZGYsIDB4N2UsIDB4MjUsIDB4YjUsIDB4YTUsIDB4ODIsIDB4NGYsCisgIDB4YmIsIDB4MGIsIDB4OWYsIDB4OTYsIDB4OWQsIDB4MmEsIDB4ZDcsIDB4MTQsIDB4YmIsIDB4MGUsIDB4YmUsIDB4MGMsCisgIDB4OTMsIDB4N2IsIDB4MTQsIDB4MWQsIDB4MzgsIDB4OTgsIDB4OTMsIDB4YmQsIDB4NmEsIDB4ZjMsIDB4ZGYsIDB4NDIsCisgIDB4MzksIDB4OWQsIDB4OWMsIDB4ZGYsIDB4N2QsIDB4MTIsIDB4YTQsIDB4YmUsIDB4YjMsIDB4MjEsIDB4OGQsIDB4MWYsCisgIDB4ZTksIDB4NzQsIDB4YTYsIDB4ZWQsIDB4MmQsIDB4N2UsIDB4NWIsIDB4NGMsIDB4OWUsIDB4ZDIsIDB4N2YsIDB4YmUsCisgIDB4ZTEsIDB4ZmYsIDB4YjAsIDB4NmEsIDB4ZDAsIDB4ZmEsIDB4YzIsIDB4MmUsIDB4NjUsIDB4YjUsIDB4YWQsIDB4MTMsCisgIDB4OTgsIDB4ZGEsIDB4NTMsIDB4YWUsIDB4MWEsIDB4NjMsIDB4NDgsIDB4ZDEsIDB4MmIsIDB4ZmMsIDB4YTUsIDB4NDgsCisgIDB4MWUsIDB4NzksIDB4ODcsIDB4YzYsIDB4ZjYsIDB4MzMsIDB4YmIsIDB4ODIsIDB4NTYsIDB4NjQsIDB4ZWMsIDB4OTMsCisgIDB4MjQsIDB4NGUsIDB4YzEsIDB4NzUsIDB4YWYsIDB4MzksIDB4N2QsIDB4MmEsIDB4MzQsIDB4NDEsIDB4M2UsIDB4YTEsCisgIDB4NjQsIDB4YjAsIDB4YzMsIDB4MjksIDB4ODQsIDB4MGIsIDB4NGQsIDB4YmEsIDB4MjYsIDB4N2UsIDB4YmEsIDB4ZmUsCisgIDB4N2IsIDB4MDIsIDB4ZTcsIDB4OTcsIDB4ZmYsIDB4MzQsIDB4NzIsIDB4MmQsIDB4MWYsIDB4MWQsIDB4ZGIsIDB4NTcsCisgIDB4ZTMsIDB4ZjEsIDB4ZjAsIDB4OGQsIDB4NzIsIDB4YzgsIDB4YWMsIDB4ZjEsIDB4YjYsIDB4YmIsIDB4NWYsIDB4MzcsCisgIDB4MWIsIDB4ZTYsIDB4YTksIDB4YTAsIDB4YzksIDB4N2MsIDB4ZjYsIDB4NzEsIDB4YjMsIDB4NzgsIDB4YzQsIDB4MzAsCisgIDB4NmMsIDB4YjUsIDB4YzcsIDB4YjAsIDB4ZWMsIDB4YzAsIDB4ZDIsIDB4YzYsIDB4NGUsIDB4MGEsIDB4MjYsIDB4YWIsCisgIDB4ZDQsIDB4NmEsIDB4ZmUsIDB4ZTAsIDB4NTEsIDB4MmIsIDB4ODUsIDB4YWQsIDB4YjUsIDB4Y2EsIDB4ZDYsIDB4Y2MsCisgIDB4ODgsIDB4MDAsIDB4YzMsIDB4NDEsIDB4MzMsIDB4MGQsIDB4MDQsIDB4ZWUsIDB4YWQsIDB4Y2IsIDB4NGIsIDB4NWMsCisgIDB4MjQsIDB4MGIsIDB4MjYsIDB4ZDEsIDB4NzAsIDB4ZTgsIDB4NmYsIDB4YjEsIDB4ZDgsIDB4NWUsIDB4NTEsIDB4NTcsCisgIDB4ZjksIDB4NzMsIDB4NmIsIDB4M2MsIDB4YzUsIDB4MzMsIDB4YTYsIDB4NjEsIDB4NjYsIDB4YzcsIDB4OTgsIDB4ZDQsCisgIDB4MjUsIDB4ZmIsIDB4NDMsIDB4Y2IsIDB4YjUsIDB4NTcsIDB4M2UsIDB4NjQsIDB4ZDMsIDB4OWIsIDB4YTMsIDB4MzcsCisgIDB4ZTMsIDB4OGQsIDB4ZjUsIDB4OTgsIDB4ODQsIDB4NjAsIDB4NzAsIDB4NzgsIDB4YmEsIDB4YzgsIDB4MzMsIDB4ODYsCisgIDB4MGUsIDB4MDcsIDB4MDgsIDB4OWMsIDB4MGUsIDB4MzcsIDB4YzQsIDB4ZjgsIDB4ZmMsIDB4Y2QsIDB4ZjEsIDB4NTcsCisgIDB4NjcsIDB4ZjYsIDB4OWYsIDB4YjUsIDB4NTMsIDB4ZmUsIDB4ZTgsIDB4MGMsIDB4OWYsIDB4NzIsIDB4ZGQsIDB4Y2EsCisgIDB4YzcsIDB4NGEsIDB4ODAsIDB4NWEsIDB4ZTcsIDB4MmMsIDB4ZGIsIDB4MzQsIDB4MzAsIDB4ODIsIDB4NDksIDB4MWUsCisgIDB4ZTcsIDB4ZmMsIDB4YmEsIDB4ODgsIDB4ZTIsIDB4NDAsIDB4MjUsIDB4MTIsIDB4M2YsIDB4MmEsIDB4ZDYsIDB4MTUsCisgIDB4MzcsIDB4YTUsIDB4ZWQsIDB4YjYsIDB4ZjcsIDB4ZDUsIDB4OTcsIDB4ZWQsIDB4MDMsIDB4ZTYsIDB4ZTgsIDB4Y2QsCisgIDB4OWEsIDB4Y2YsIDB4ZjEsIDB4NmYsIDB4ODYsIDB4NjYsIDB4MTcsIDB4ZTgsIDB4MGQsIDB4N2UsIDB4NDYsIDB4ZmIsCisgIDB4MjMsIDB4MTUsIDB4MzYsIDB4ZTMsIDB4OGUsIDB4NTksIDB4MTksIDB4OWYsIDB4OWYsIDB4YjgsIDB4ZmYsIDB4YzAsCisgIDB4MjYsIDB4NzQsIDB4ODMsIDB4MGYsIDB4ZjMsIDB4NWQsIDB4NDQsIDB4ZWEsIDB4YTUsIDB4NzAsIDB4MzEsIDB4MTcsCisgIDB4ZDMsIDB4OWMsIDB4YzcsIDB4ZDksIDB4MmQsIDB4N2MsIDB4NmYsIDB4NmIsIDB4OGEsIDB4MjUsIDB4YzcsIDB4N2MsCisgIDB4Y2MsIDB4ZmEsIDB4ODQsIDB4ZmYsIDB4NjAsIDB4OGUsIDB4ZDUsIDB4NDcsIDB4ODksIDB4NDQsIDB4MTUsIDB4YzEsCisgIDB4NzQsIDB4MGEsIDB4OWIsIDB4NzAsIDB4NjcsIDB4ZjYsIDB4YjksIDB4MzMsIDB4MzIsIDB4ZDYsIDB4NzgsIDB4ZjcsCisgIDB4MzQsIDB4YWIsIDB4N2QsIDB4NGQsIDB4MGQsIDB4NTEsIDB4YTQsIDB4YmIsIDB4OGYsIDB4ODUsIDB4ODcsIDB4ZmMsCisgIDB4NDIsIDB4NDIsIDB4MjksIDB4ZTcsIDB4ZGEsIDB4ZDIsIDB4ZDYsIDB4NjMsIDB4Y2IsIDB4YmUsIDB4YTYsIDB4ZWEsCisgIDB4MzIsIDB4YzksIDB4MzUsIDB4OTgsIDB4YWEsIDB4MzcsIDB4ZDgsIDB4ZTgsIDB4NzQsIDB4ZTIsIDB4ZjksIDB4YmYsCisgIDB4YjYsIDB4NDcsIDB4M2MsIDB4Y2UsIDB4NjIsIDB4ZGEsIDB4ODYsIDB4OTAsIDB4NGIsIDB4MzEsIDB4NzYsIDB4OWYsCisgIDB4NTUsIDB4MzIsIDB4ODgsIDB4NTAsIDB4YTUsIDB4ZTAsIDB4OWIsIDB4ODEsIDB4ZGMsIDB4NTYsIDB4ZjAsIDB4NjMsCisgIDB4NGYsIDB4ZTUsIDB4NDAsIDB4MGQsIDB4MWYsIDB4YmYsIDB4ZjksIDB4ZjYsIDB4ZTQsIDB4ZTIsIDB4ZWMsIDB4Y2QsCisgIDB4ZWIsIDB4ZTMsIDB4MzcsIDB4MGUsIDB4ZWMsIDB4YzcsIDB4MDcsIDB4NDIsIDB4YjcsIDB4OWYsIDB4YmUsIDB4YWIsCisgIDB4OTYsIDB4YTgsIDB4NWMsIDB4MjUsIDB4ZDgsIDB4ODcsIDB4Y2MsIDB4NjYsIDB4MjMsIDB4OGQsIDB4NDcsIDB4ZmYsCisgIDB4MzUsIDB4MGEsIDB4OWIsIDB4MGIsIDB4MWUsIDB4YjIsIDB4MDMsIDB4OTYsIDB4OGQsIDB4ZGIsIDB4MjUsIDB4ODcsCisgIDB4MjYsIDB4NjcsIDB4MGMsIDB4YjEsIDB4MWQsIDB4MDksIDB4ZjIsIDB4NTEsIDB4M2MsIDB4OTgsIDB4NTIsIDB4MjUsCisgIDB4M2IsIDB4NzksIDB4M2YsIDB4NGQsIDB4OTQsIDB4ZjEsIDB4YWQsIDB4MGMsIDB4MTgsIDB4ZTYsIDB4NTMsIDB4MmQsCisgIDB4MmUsIDB4ZTgsIDB4NDEsIDB4YjMsIDB4YjUsIDB4NGUsIDB4ZjgsIDB4ZjUsIDB4OTIsIDB4NjIsIDB4NTcsIDB4ZWIsCisgIDB4YzIsIDB4MDQsIDB4YTgsIDB4MTIsIDB4MTcsIDB4OTIsIDB4OTMsIDB4ZGUsIDB4YTgsIDB4NDcsIDB4MTksIDB4MWUsCisgIDB4ZTYsIDB4NDgsIDB4MjAsIDB4YjYsIDB4NTEsIDB4YzAsIDB4ZDAsIDB4ZTcsIDB4NDksIDB4NDcsIDB4MmMsIDB4NTQsCisgIDB4ZDMsIDB4YmMsIDB4ZGUsIDB4MDUsIDB4MjMsIDB4YTgsIDB4MDUsIDB4NzEsIDB4NDAsIDB4MmQsIDB4ZjksIDB4YjksCisgIDB4ODYsIDB4NmMsIDB4ZGEsIDB4MzksIDB4ZjYsIDB4ODEsIDB4MjMsIDB4M2IsIDB4YTgsIDB4YjEsIDB4NjksIDB4NTksCisgIDB4NjMsIDB4MDgsIDB4MDcsIDB4NmMsIDB4MDQsIDB4ZjEsIDB4ZmIsIDB4ZjEsIDB4YmIsIDB4ZjMsIDB4OGIsIDB4YjMsCisgIDB4ZWYsIDB4N2YsIDB4ZjgsIDB4OGQsIDB4M2YsIDB4MzEsIDB4ZjYsIDB4YzMsIDB4ZjgsIDB4OTEsIDB4MTUsIDB4YTksCisgIDB4MzUsIDB4ZmUsIDB4ZDMsIDB4YWYsIDB4ZmEsIDB4ZGEsIDB4YTMsIDB4OWYsIDB4YWIsIDB4YjcsIDB4M2YsIDB4NTAsCisgIDB4YzQsIDB4ZjUsIDB4M2EsIDB4NWEsIDB4MzQsIDB4ZjgsIDB4OGIsIDB4ODUsIDB4NmMsIDB4Y2MsIDB4MTcsIDB4ZGIsCisgIDB4YjIsIDB4NDAsIDB4YmYsIDB4ZDMsIDB4NDEsIDB4ODIsIDB4NjcsIDB4MjksIDB4NmIsIDB4NmMsIDB4YjQsIDB4NWQsCisgIDB4OTQsIDB4ZjUsIDB4MjAsIDB4YWEsIDB4MDIsIDB4MGIsIDB4M2QsIDB4OWYsIDB4ZjYsIDB4ZWQsIDB4NWEsIDB4MDQsCisgIDB4MDMsIDB4NTAsIDB4MWYsIDB4ZTIsIDB4NTAsIDB4NzEsIDB4ZjMsIDB4NzEsIDB4NzAsIDB4N2EsIDB4ZmEsIDB4ZWIsCisgIDB4MjcsIDB4YzEsIDB4MzksIDB4ZmUsIDB4NmIsIDB4ZDMsIDB4ODAsIDB4MGIsIDB4YWUsIDB4MWIsIDB4ZDAsIDB4ZDAsCisgIDB4OTksIDB4NTQsIDB4MjYsIDB4ZmUsIDB4MWQsIDB4N2MsIDB4MGUsIDB4YWUsIDB4M2IsIDB4NmYsIDB4Y2UsIDB4YjQsCisgIDB4MzcsIDB4ZTIsIDB4OGMsIDB4MWUsIDB4NWEsIDB4ODUsIDB4ZDcsIDB4MTksIDB4OWMsIDB4ODcsIDB4YWMsIDB4ZjIsCisgIDB4NTEsIDB4MjEsIDB4ZWQsIDB4ZjMsIDB4OTYsIDB4ZTksIDB4ZTIsIDB4N2YsIDB4NjksIDB4NzUsIDB4YmMsIDB4MTAsCisgIDB4NzUsIDB4MDMsIDB4NzEsIDB4MWUsIDB4NzIsIDB4NzEsIDB4NzIsIDB4MTcsIDB4ZTQsIDB4MTEsIDB4OGEsIDB4NTAsCisgIDB4MDQsIDB4MGQsIDB4OTEsIDB4Y2EsIDB4ZDMsIDB4MTEsIDB4OWEsIDB4NjMsIDB4YmYsIDB4MjAsIDB4MjMsIDB4NmUsCisgIDB4OGIsIDB4YjQsIDB4YmMsIDB4NDUsIDB4MWUsIDB4MTMsIDB4NmYsIDB4Y2EsIDB4ODEsIDB4ZDQsIDB4MGYsIDB4YTksCisgIDB4NTAsIDB4OTQsIDB4ODksIDB4NmQsIDB4NTQsIDB4NzQsIDB4ODUsIDB4ZmEsIDB4MmUsIDB4M2QsIDB4YTYsIDB4M2YsCisgIDB4MmYsIDB4Y2YsIDB4MGUsIDB4Y2YsIDB4NGUsIDB4ZTksIDB4MmYsIDB4YzcsIDB4YWYsIDB4NGUsIDB4YmUsIDB4ZjcsCisgIDB4MGEsIDB4NGQsIDB4MjgsIDB4NDMsIDB4ZDUsIDB4OWQsIDB4ZTgsIDB4MjIsIDB4MDgsIDB4YjUsIDB4MDgsIDB4OGEsCisgIDB4NGEsIDB4ZDMsIDB4YTMsIDB4ZjEsIDB4OTMsIDB4MGQsIDB4MWYsIDB4ZTgsIDB4YjMsIDB4NjUsIDB4YjIsIDB4YTgsCisgIDB4NDksIDB4OTAsIDB4N2YsIDB4ZDcsIDB4MjgsIDB4MWQsIDB4ZjcsIDB4ZmUsIDB4MjEsIDB4MDgsIDB4OTgsIDB4ODQsCisgIDB4YjEsIDB4ZGQsIDB4NjAsIDB4ODUsIDB4YTAsIDB4YWEsIDB4NDMsIDB4YTUsIDB4ZDcsIDB4MTUsIDB4ZDQsIDB4MDEsCisgIDB4YmUsIDB4M2MsIDB4YmQsIDB4NzIsIDB4ZDgsIDB4YWYsIDB4ZDAsIDB4YTEsIDB4NjYsIDB4ZjcsIDB4NjgsIDB4YmQsCisgIDB4NDgsIDB4YTMsIDB4NzQsIDB4OWYsIDB4MjMsIDB4MjUsIDB4ZTIsIDB4ZGIsIDB4NTgsIDB4NmQsIDB4OTQsIDB4MWQsCisgIDB4ZDEsIDB4MGUsIDB4ODksIDB4MmEsIDB4NmUsIDB4ODQsIDB4OTEsIDB4NGMsIDB4ZGYsIDB4NTksIDB4MDQsIDB4MDUsCisgIDB4NWMsIDB4NzMsIDB4ZjUsIDB4MzEsIDB4ZTksIDB4MDQsIDB4NjgsIDB4MGUsIDB4MDgsIDB4NzAsIDB4ZjQsIDB4ZTAsCisgIDB4MjgsIDB4ZjQsIDB4MjYsIDB4YjcsIDB4MGIsIDB4MDgsIDB4NzUsIDB4MjYsIDB4ZWMsIDB4YTUsIDB4YTIsIDB4MjMsCisgIDB4OTksIDB4OWYsIDB4ZTMsIDB4MmUsIDB4OTYsIDB4OTIsIDB4MjUsIDB4NTcsIDB4OGUsIDB4NTksIDB4YjQsIDB4ZDEsCisgIDB4NDYsIDB4ZmMsIDB4YWIsIDB4MWEsIDB4ODksIDB4ZWIsIDB4YWQsIDB4M2MsIDB4ZmIsIDB4MzUsIDB4OGQsIDB4M2MsCisgIDB4NmIsIDB4YjQsIDB4NzEsIDB4ZjMsIDB4YWIsIDB4MWEsIDB4NzEsIDB4ZDQsIDB4ZDcsIDB4NzQsIDB4MmMsIDB4N2UsCisgIDB4N2YsIDB4NzIsIDB4MTksIDB4MWQsIDB4OWUsIDB4MWQsIDB4NzksIDB4MTksIDB4YmQsIDB4OTQsIDB4YzQsIDB4OTAsCisgIDB4MDIsIDB4ODUsIDB4YmQsIDB4NTcsIDB4MTksIDB4NTcsIDB4YTYsIDB4YmMsIDB4MGEsIDB4MGEsIDB4ZWQsIDB4NTksCisgIDB4NmQsIDB4MTYsIDB4YzYsIDB4ZTgsIDB4OTcsIDB4YmUsIDB4ZWMsIDB4OTksIDB4ZDQsIDB4NDMsIDB4MmYsIDB4MDQsCisgIDB4NzgsIDB4MWYsIDB4ZjIsIDB4OTEsIDB4ZjgsIDB4NTIsIDB4MmUsIDB4MjgsIDB4ZGQsIDB4NjIsIDB4MmUsIDB4MWMsCisgIDB4OTYsIDB4NmMsIDB4NjYsIDB4YzAsIDB4OGIsIDB4MGIsIDB4NzUsIDB4YzksIDB4NDYsIDB4OTMsIDB4NzgsIDB4YzYsCisgIDB4MDcsIDB4YmEsIDB4MDQsIDB4NDcsIDB4NGEsIDB4YmEsIDB4NDUsIDB4NTUsIDB4YWUsIDB4MzAsIDB4MTAsIDB4ZjUsCisgIDB4NjAsIDB4MjMsIDB4Y2MsIDB4ZWUsIDB4ZTQsIDB4OWMsIDB4MWMsIDB4OTQsIDB4ZjEsIDB4OTEsIDB4MGIsIDB4MjcsCisgIDB4OTcsIDB4M2QsIDB4NDYsIDB4NmYsIDB4NmEsIDB4NzksIDB4MjQsIDB4YmIsIDB4YWEsIDB4MDksIDB4YjMsIDB4OWEsCisgIDB4YzQsIDB4MjgsIDB4ZjcsIDB4MjEsIDB4Y2MsIDB4M2IsIDB4YjYsIDB4ZDksIDB4MTEsIDB4YjAsIDB4YzAsIDB4N2UsCisgIDB4ZTQsIDB4NzMsIDB4MzEsIDB4NzMsIDB4YjcsIDB4NDcsIDB4MmQsIDB4Y2IsIDB4ZDEsIDB4NTIsIDB4NTEsIDB4YWUsCisgIDB4MDksIDB4ZjcsIDB4OWQsIDB4M2QsIDB4MGQsIDB4ODYsIDB4NGEsIDB4YmQsIDB4MmQsIDB4ZGEsIDB4N2YsIDB4MGEsCisgIDB4NTcsIDB4NDksIDB4N2YsIDB4MGUsIDB4Y2UsIDB4ZTgsIDB4MjcsIDB4ZGUsIDB4YjUsIDB4YmYsIDB4ODgsIDB4ZTcsCisgIDB4MTIsIDB4NDYsIDB4ZDcsIDB4MWMsIDB4MzIsIDB4ZDQsIDB4NzEsIDB4MDYsIDB4MWEsIDB4ODMsIDB4N2QsIDB4ODEsCisgIDB4OTgsIDB4YzMsIDB4NjksIDB4YTAsIDB4MDYsIDB4OWYsIDB4YWEsIDB4NzIsIDB4MGUsIDB4Y2EsIDB4MWYsIDB4ZjMsCisgIDB4N2MsIDB4OWEsIDB4NGIsIDB4NTgsIDB4ZjEsIDB4NDcsIDB4NzEsIDB4ZTksIDB4YzAsIDB4OGEsIDB4OWMsIDB4ZGYsCisgIDB4YWMsIDB4MzUsIDB4MDIsIDB4YzUsIDB4MDUsIDB4NWQsIDB4NzIsIDB4MTEsIDB4OTYsIDB4OGQsIDB4NGUsIDB4ZWMsCisgIDB4OTEsIDB4ZmIsIDB4YWMsIDB4ZTUsIDB4NWEsIDB4ZTcsIDB4MDIsIDB4NjgsIDB4NDYsIDB4MjAsIDB4MmIsIDB4OWQsCisgIDB4YTYsIDB4OTUsIDB4MTQsIDB4YjMsIDB4MmUsIDB4ZTUsIDB4OTcsIDB4OGMsIDB4ODksIDB4OTAsIDB4NDksIDB4ZWIsCisgIDB4NzIsIDB4MDQsIDB4NmIsIDB4NmUsIDB4NmUsIDB4NTAsIDB4OGIsIDB4Y2IsIDB4ZWMsIDB4OGYsIDB4NTksIDB4YWUsCisgIDB4OTUsIDB4MzgsIDB4ZDksIDB4ZTIsIDB4ZTUsIDB4MWEsIDB4MTQsIDB4ZjQsIDB4OGIsIDB4MDcsIDB4MjksIDB4MGEsCisgIDB4MTksIDB4NjcsIDB4ZjAsIDB4MmMsIDB4YjQsIDB4MTgsIDB4NGMsIDB4NzUsIDB4NjEsIDB4ZjQsIDB4NzYsIDB4ZTUsCisgIDB4MmYsIDB4MzIsIDB4Y2YsIDB4MmMsIDB4OTYsIDB4YTYsIDB4YmEsIDB4ZGMsIDB4OTgsIDB4YTgsIDB4NGQsIDB4ODksCisgIDB4YzMsIDB4YzUsIDB4YTAsIDB4NzQsIDB4N2EsIDB4YWEsIDB4YjUsIDB4MDQsIDB4ODgsIDB4M2YsIDB4MTUsIDB4YjYsCisgIDB4NTksIDB4MDQsIDB4MmMsIDB4NWEsIDB4M2MsIDB4NDIsIDB4NTYsIDB4YjQsIDB4ZDMsIDB4Y2YsIDB4ZmEsIDB4MjcsCisgIDB4NmIsIDB4YmUsIDB4YzMsIDB4OGQsIDB4YzksIDB4YmEsIDB4YzksIDB4NDcsIDB4OWEsIDB4NzAsIDB4NzYsIDB4NmUsCisgIDB4YmYsIDB4ZGQsIDB4ZGEsIDB4YTcsIDB4NGQsIDB4MTEsIDB4YjEsIDB4YjQsIDB4MDEsIDB4YTYsIDB4MTMsIDB4YzksCisgIDB4NDMsIDB4ODgsIDB4ZTIsIDB4NjcsIDB4ZmEsIDB4MjQsIDB4ODcsIDB4MDUsIDB4ZWYsIDB4MTMsIDB4ZjYsIDB4NTUsCisgIDB4MzgsIDB4MmMsIDB4MmEsIDB4OGEsIDB4OTEsIDB4OGYsIDB4OWMsIDB4MTcsIDB4NDUsIDB4N2UsIDB4MDgsIDB4NDQsCisgIDB4MjQsIDB4YzIsIDB4NGQsIDB4OTgsIDB4ZjEsIDB4YTksIDB4ZjYsIDB4YjcsIDB4OGQsIDB4YzEsIDB4MDgsIDB4MGQsCisgIDB4YzYsIDB4ZTcsIDB4ZmUsIDB4MjMsIDB4MzEsIDB4ZjAsIDB4M2YsIDB4MjQsIDB4MjQsIDB4NTksIDB4ZWEsIDB4MDQsCisgIDB4NTIsIDB4OGIsIDB4YzksIDB4ZTAsIDB4NDcsIDB4OGMsIDB4YWEsIDB4YTIsIDB4NjMsIDB4MjAsIDB4NzcsIDB4ZmYsCisgIDB4YjYsIDB4MzcsIDB4ZGEsIDB4ZDQsIDB4OGIsIDB4NzIsIDB4NTIsIDB4NzgsIDB4OTQsIDB4MzksIDB4ZTYsIDB4NjEsCisgIDB4NTUsIDB4NDgsIDB4ZmEsIDB4YWEsIDB4YTcsIDB4ODUsIDB4YjQsIDB4OWEsIDB4OWYsIDB4MzIsIDB4MTEsIDB4YTgsCisgIDB4ZWQsIDB4MzUsIDB4NDIsIDB4MWEsIDB4NzQsIDB4OGIsIDB4NzEsIDB4YTgsIDB4OTIsIDB4MmMsIDB4NzMsIDB4ZjgsCisgIDB4NWQsIDB4NjcsIDB4MDEsIDB4MDUsIDB4MzIsIDB4OGUsIDB4ZTQsIDB4ODAsIDB4ZDUsIDB4OTIsIDB4NzcsIDB4ODAsCisgIDB4M2IsIDB4NzcsIDB4MDAsIDB4YzAsIDB4ODksIDB4YTIsIDB4YmMsIDB4Y2IsIDB4MGYsIDB4YWQsIDB4YzEsIDB4NjUsCisgIDB4YWYsIDB4MjEsIDB4NzYsIDB4OWIsIDB4OTMsIDB4N2QsIDB4N2UsIDB4MzAsIDB4MWUsIDB4ZGIsIDB4NDQsIDB4MWYsCisgIDB4ODYsIDB4MTMsIDB4MmEsIDB4NTMsIDB4YTgsIDB4YzAsIDB4MzEsIDB4NjQsIDB4ZmMsIDB4NmIsIDB4MzYsIDB4NmMsCisgIDB4ZGIsIDB4MDksIDB4YWMsIDB4NmQsIDB4MzQsIDB4YjAsIDB4YTcsIDB4YmIsIDB4NGYsIDB4ZGMsIDB4YjcsIDB4ZGMsCisgIDB4YTcsIDB4YmUsIDB4OTUsIDB4YjYsIDB4MDYsIDB4MWYsIDB4ZjksIDB4YTksIDB4ZWUsIDB4NmYsIDB4N2QsIDB4ZGIsCisgIDB4ZjEsIDB4YWQsIDB4YTcsIDB4MmQsIDB4MjEsIDB4ZGEsIDB4ZGIsIDB4ZmIsIDB4ZDQsIDB4MzIsIDB4NDEsIDB4ODUsCisgIDB4ZjUsIDB4NmMsIDB4MWUsIDB4ZjksIDB4MGYsIDB4MDYsIDB4NWYsIDB4YTQsIDB4ZTcsIDB4ODYsIDB4NGEsIDB4NzYsCisgIDB4OTIsIDB4NzQsIDB4MTAsIDB4MzksIDB4MjMsIDB4NGUsIDB4MTIsIDB4MTYsIDB4ZmUsIDB4ZGEsIDB4N2QsIDB4ZTYsCisgIDB4M2UsIDB4NDUsIDB4NzcsIDB4YTYsIDB4M2UsIDB4ODIsIDB4MjIsIDB4YmEsIDB4NDksIDB4NWEsIDB4N2IsIDB4YzcsCisgIDB4ZDUsIDB4OGUsIDB4M2QsIDB4ZTEsIDB4MzksIDB4MjAsIDB4MzMsIDB4YWMsIDB4NWEsIDB4MDcsIDB4OTQsIDB4YjQsCisgIDB4NWUsIDB4MDQsIDB4ZGYsIDB4ZjksIDB4ZDQsIDB4MGYsIDB4YzksIDB4ZjcsIDB4NWIsIDB4YWEsIDB4ZGQsIDB4ODEsCisgIDB4MTksIDB4NjIsIDB4MTQsIDB4NmMsIDB4NTYsIDB4MjcsIDB4MjgsIDB4MDYsIDB4MDMsIDB4NzcsIDB4YTAsIDB4ODQsCisgIDB4YTYsIDB4OWUsIDB4OTEsIDB4NTcsIDB4ZmQsIDB4NTcsIDB4NjQsIDB4ZmIsIDB4OWQsIDB4YjMsIDB4MTAsIDB4MmIsCisgIDB4MDUsIDB4ZWIsIDB4MjgsIDB4M2EsIDB4YzMsIDB4MjUsIDB4YWMsIDB4YzYsIDB4YjEsIDB4MDMsIDB4YWYsIDB4M2UsCisgIDB4NmYsIDB4NzcsIDB4NDcsIDB4YWUsIDB4MTcsIDB4ZWUsIDB4ZjYsIDB4ZGQsIDB4ZTcsIDB4N2UsIDB4NGUsIDB4YWMsCisgIDB4NGIsIDB4MTYsIDB4OTQsIDB4ZGEsIDB4ZDYsIDB4ZWQsIDB4ZTMsIDB4NWQsIDB4ZTcsIDB4MTYsIDB4NzMsIDB4YTYsCisgIDB4NmIsIDB4ZjQsIDB4ZjEsIDB4ZTUsIDB4MDUsIDB4MjcsIDB4MGMsIDB4NDUsIDB4YTAsIDB4MDksIDB4NmEsIDB4YWEsCisgIDB4NTgsIDB4ZGEsIDB4NTIsIDB4NWIsIDB4MmUsIDB4ZTYsIDB4MmUsIDB4YzUsIDB4MWQsIDB4ODMsIDB4MzMsIDB4YzgsCisgIDB4NGIsIDB4ZjIsIDB4M2YsIDB4NTYsIDB4YWMsIDB4OTAsIDB4NzAsIDB4ZWEsIDB4ZDIsIDB4MTksIDB4YWEsIDB4ZmYsCisgIDB4YjQsIDB4ZjcsIDB4NWMsIDB4NjksIDB4NTksIDB4MzksIDB4OTUsIDB4N2QsIDB4ZmUsIDB4OGIsIDB4ZWUsIDB4MGMsCisgIDB4MzcsIDB4ZmYsIDB4MWUsIDB4NDUsIDB4MmQsIDB4YjQsIDB4ODgsIDB4YTIsIDB4MzgsIDB4NWQsIDB4YWUsIDB4ZTEsCisgIDB4YzgsIDB4OTUsIDB4MjAsIDB4MzQsIDB4ZTAsIDB4MmYsIDB4ZGMsIDB4MTEsIDB4YWEsIDB4MDAsIDB4MjUsIDB4NWYsCisgIDB4YWYsIDB4MTUsIDB4NGQsIDB4NzAsIDB4MWYsIDB4NTcsIDB4YTUsIDB4YWYsIDB4OWQsIDB4YTgsIDB4MDMsIDB4NDAsCisgIDB4MDIsIDB4ZWIsIDB4MjIsIDB4MTIsIDB4ZmEsIDB4NTAsIDB4M2EsIDB4MDIsIDB4NzcsIDB4NzYsIDB4M2EsIDB4ODgsCisgIDB4NjgsIDB4ZTMsIDB4NDksIDB4N2UsIDB4NjcsIDB4MjAsIDB4MmYsIDB4NGQsIDB4YTksIDB4OTUsIDB4NjIsIDB4YjAsCisgIDB4NTgsIDB4MmYsIDB4OTgsIDB4MTYsIDB4NTIsIDB4N2MsIDB4ZmIsIDB4OGEsIDB4N2QsIDB4MDIsIDB4M2MsIDB4NjMsCisgIDB4MTYsIDB4MmQsIDB4MDgsIDB4ZTYsIDB4NGQsIDB4NzYsIDB4ZTUsIDB4NzcsIDB4YzgsIDB4ZjEsIDB4YjUsIDB4NDksCisgIDB4NmIsIDB4NmMsIDB4NDcsIDB4NDksIDB4MDAsIDB4MzYsIDB4ZTYsIDB4YzQsIDB4MzgsIDB4YTAsIDB4ZTcsIDB4ZDUsCisgIDB4NTAsIDB4NzgsIDB4YWIsIDB4NjcsIDB4Y2EsIDB4ZjIsIDB4MTQsIDB4N2MsIDB4ZTYsIDB4NTksIDB4NWIsIDB4MjIsCisgIDB4YzYsIDB4OTcsIDB4NjcsIDB4MTcsIDB4MmEsIDB4NjEsIDB4NmQsIDB4YWQsIDB4YWIsIDB4YjUsIDB4OWYsIDB4ZjgsCisgIDB4MTEsIDB4MGYsIDB4NzQsIDB4MWIsIDB4NzQsIDB4ODQsIDB4OTksIDB4OWQsIDB4ZjMsIDB4NTIsIDB4MzAsIDB4ZGQsCisgIDB4NGMsIDB4MTMsIDB4ZTEsIDB4YmYsIDB4ZmEsIDB4ODksIDB4ODcsIDB4YjEsIDB4ZTgsIDB4ZDAsIDB4YmUsIDB4OGQsCisgIDB4MGIsIDB4MTAsIDB4MDEsIDB4MTgsIDB4ODMsIDB4YWIsIDB4MTUsIDB4ODQsIDB4MGEsIDB4NWUsIDB4OTIsIDB4OGQsCisgIDB4NzYsIDB4YjYsIDB4ODIsIDB4YjAsIDB4OGIsIDB4MTcsIDB4OTIsIDB4ZTUsIDB4NDgsIDB4ZmQsIDB4OTEsIDB4Y2MsCisgIDB4MDAsIDB4YWIsIDB4NWUsIDB4MWQsIDB4MTcsIDB4MzYsIDB4NmEsIDB4Y2EsIDB4YTIsIDB4NmMsIDB4YTIsIDB4MzMsCisgIDB4NDcsIDB4ZDIsIDB4NmIsIDB4NjEsIDB4NjIsIDB4NzcsIDB4NzYsIDB4ZjksIDB4YWIsIDB4MmIsIDB4YzIsIDB4OTIsCisgIDB4MWMsIDB4ZTIsIDB4OTAsIDB4YTAsIDB4YmIsIDB4MDIsIDB4NWIsIDB4NTEsIDB4ZWUsIDB4YjEsIDB4YjksIDB4ZGEsCisgIDB4NTMsIDB4YjIsIDB4OGMsIDB4MDQsIDB4ZDQsIDB4OTYsIDB4NWIsIDB4MTUsIDB4MzQsIDB4MzMsIDB4MTUsIDB4YmQsCisgIDB4OTUsIDB4YjUsIDB4ZTMsIDB4ZTYsIDB4ZjksIDB4ZmMsIDB4ZWMsIDB4ZTIsIDB4ZDIsIDB4YmEsIDB4ODYsIDB4Y2YsCisgIDB4ZTIsIDB4MDcsIDB4OGQsIDB4ZmQsIDB4YzMsIDB4NzQsIDB4MTIsIDB4NWEsIDB4MTAsIDB4MWQsIDB4OWEsIDB4NDUsCisgIDB4MTYsIDB4YTEsIDB4NzUsIDB4MmIsIDB4MzUsIDB4N2MsIDB4MDMsIDB4MTYsIDB4MDUsIDB4ZWQsIDB4NTgsIDB4NDMsCisgIDB4N2MsIDB4OWIsIDB4MjksIDB4MWUsIDB4MGMsIDB4ZDksIDB4ZTIsIDB4Y2EsIDB4YWMsIDB4NWUsIDB4MzksIDB4MDYsCisgIDB4MDcsIDB4NTYsIDB4ZDAsIDB4ZGQsIDB4MjgsIDB4MjUsIDB4NmYsIDB4ZDMsIDB4M2MsIDB4ZDksIDB4NmQsIDB4NGIsCisgIDB4MDcsIDB4NWYsIDB4OWUsIDB4MmYsIDB4OGUsIDB4YjksIDB4NjIsIDB4ZDgsIDB4ZTUsIDB4OGQsIDB4ZmMsIDB4YWQsCisgIDB4ZDUsIDB4NzcsIDB4ZjEsIDB4NTAsIDB4ZWEsIDB4MGYsIDB4YmIsIDB4NDEsIDB4MDgsIDB4NWEsIDB4MmMsIDB4NTcsCisgIDB4MDAsIDB4YWQsIDB4ZGMsIDB4YmUsIDB4ZjMsIDB4OTgsIDB4MDYsIDB4NzMsIDB4ZjYsIDB4MjQsIDB4YzgsIDB4OTgsCisgIDB4ODAsIDB4ZGEsIDB4NTQsIDB4NTksIDB4MDEsIDB4N2EsIDB4MTksIDB4M2YsIDB4ZTgsIDB4ZTksIDB4NTcsIDB4N2EsCisgIDB4NzQsIDB4ZWEsIDB4Y2EsIDB4OTYsIDB4YzgsIDB4OGIsIDB4ZGIsIDB4YTAsIDB4ODUsIDB4YTcsIDB4YmUsIDB4ODUsCisgIDB4MjUsIDB4ZWIsIDB4NzcsIDB4NmQsIDB4ZTAsIDB4YzQsIDB4MjIsIDB4YTgsIDB4ZmMsIDB4NDMsIDB4MDcsIDB4MmQsCisgIDB4YmIsIDB4NGUsIDB4MzIsIDB4MTMsIDB4MGMsIDB4NzksIDB4Y2UsIDB4YjcsIDB4ZjMsIDB4Y2MsIDB4YzUsIDB4MmIsCisgIDB4Y2MsIDB4M2UsIDB4MGEsIDB4YmEsIDB4YzIsIDB4M2YsIDB4YjYsIDB4NjQsIDB4NDMsIDB4YzAsIDB4ODgsIDB4MWEsCisgIDB4NjIsIDB4ZjcsIDB4ZTQsIDB4MTMsIDB4N2YsIDB4NDIsIDB4ZjAsIDB4NTUsIDB4YzIsIDB4ZTMsIDB4MDAsIDB4NzQsCisgIDB4MDYsIDB4ODIsIDB4MTMsIDB4ODksIDB4NzEsIDB4MTQsIDB4NjksIDB4YjYsIDB4MDIsIDB4ZDUsIDB4MTAsIDB4YTksCisgIDB4ODksIDB4MzksIDB4OTMsIDB4OWUsIDB4NjksIDB4MjAsIDB4YmYsIDB4MTUsIDB4YjIsIDB4ZDQsIDB4MDQsIDB4MGUsCisgIDB4ZmYsIDB4MWQsIDB4M2QsIDB4ODksIDB4NGUsIDB4NGUsIDB4OGYsIDB4ZmQsIDB4NzIsIDB4MDksIDB4OTcsIDB4MDMsCisgIDB4MzYsIDB4YjMsIDB4MzcsIDB4ZjIsIDB4NjgsIDB4ZTMsIDB4NjYsIDB4ZWUsIDB4YjgsIDB4MTgsIDB4NDUsIDB4ZTcsCisgIDB4NGMsIDB4OTksIDB4OGUsIDB4ZjAsIDB4NDksIDB4ZjksIDB4OWYsIDB4YmUsIDB4MzUsIDB4ZDksIDB4MmMsIDB4NzAsCisgIDB4YzYsIDB4ZDAsIDB4MDEsIDB4MGEsIDB4MGMsIDB4NmIsIDB4OWEsIDB4ZDEsIDB4ZWEsIDB4ZTIsIDB4MjcsIDB4ZmMsCisgIDB4ZDcsIDB4ODAsIDB4ZWQsIDB4YmEsIDB4MzUsIDB4ZTQsIDB4ZTcsIDB4ZmUsIDB4ZTUsIDB4OTIsIDB4YzYsIDB4NDEsCisgIDB4NTcsIDB4YjUsIDB4ZTYsIDB4MjMsIDB4NGYsIDB4NTUsIDB4YjYsIDB4ZTgsIDB4MWUsIDB4MjcsIDB4NjUsIDB4ZjcsCisgIDB4NGMsIDB4M2QsIDB4ZjMsIDB4OWUsIDB4YjYsIDB4MDIsIDB4OGQsIDB4ZDIsIDB4YzIsIDB4OTUsIDB4M2QsIDB4NTMsCisgIDB4NTMsIDB4ZTMsIDB4NDEsIDB4NTMsIDB4NzIsIDB4MjgsIDB4MWMsIDB4YzgsIDB4M2MsIDB4ODEsIDB4YTEsIDB4ODUsCisgIDB4NzYsIDB4MGUsIDB4OTcsIDB4ZDcsIDB4YTUsIDB4YjYsIDB4MzIsIDB4ZDYsIDB4YjgsIDB4NzMsIDB4NzMsIDB4ZjgsCisgIDB4ZmEsIDB4NjQsIDB4N2EsIDB4ZDYsIDB4OTgsIDB4ZmMsIDB4ODIsIDB4ZDIsIDB4YWEsIDB4YjQsIDB4YWIsIDB4NDcsCisgIDB4MzYsIDB4ZjgsIDB4ZGYsIDB4OWYsIDB4OGEsIDB4MzQsIDB4M2EsIDB4ZDEsIDB4NzEsIDB4ZTcsIDB4NTgsIDB4YWQsCisgIDB4NzcsIDB4ZmMsIDB4NjEsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4ZDUsIDB4NjYsIDB4ZDcsIDB4MTAsIDB4ZWEsIDB4ODcsCisgIDB4MDYsIDB4NGQsIDB4M2QsIDB4ZjMsIDB4NGQsIDB4NWQsIDB4ODEsIDB4NTEsIDB4ZDAsIDB4ZjQsIDB4ZmIsIDB4NDEsCisgIDB4NGQsIDB4MDcsIDB4MzksIDB4M2EsIDB4YzEsIDB4ZDQsIDB4M2QsIDB4MjksIDB4OTcsIDB4MDUsIDB4MDEsIDB4MTQsCisgIDB4NzcsIDB4NmMsIDB4YWIsIDB4ZTAsIDB4MWIsIDB4MjIsIDB4MGMsIDB4OTcsIDB4NzksIDB4MmUsIDB4YzUsIDB4ZTMsCisgIDB4NWQsIDB4MmEsIDB4YzUsIDB4NDgsIDB4MzAsIDB4NjYsIDB4ZTIsIDB4ODMsIDB4MTAsIDB4ODYsIDB4NGQsIDB4OTcsCisgIDB4NjQsIDB4MjEsIDB4YjcsIDB4NGQsIDB4YmQsIDB4YTAsIDB4NzMsIDB4YjUsIDB4ZDgsIDB4NjEsIDB4OGIsIDB4MWIsCisgIDB4N2EsIDB4ZDEsIDB4YWEsIDB4YjAsIDB4ZmEsIDB4ZjQsIDB4MzMsIDB4YmQsIDB4Y2QsIDB4NmEsIDB4ZmQsIDB4NDUsCisgIDB4YmIsIDB4ZmYsIDB4ODUsIDB4Y2EsIDB4MzQsIDB4NzcsIDB4NDEsIDB4NDksIDB4OTcsIDB4MTgsIDB4MzcsIDB4NDMsCisgIDB4NTgsIDB4YTAsIDB4NzQsIDB4ODQsIDB4ZDQsIDB4MWIsIDB4NmQsIDB4ZTcsIDB4M2YsIDB4MWYsIDB4YzgsIDB4NmEsCisgIDB4MjYsIDB4ZmEsIDB4ZTIsIDB4YjMsIDB4OWUsIDB4ZmMsIDB4ODcsIDB4ZTcsIDB4NWIsIDB4MWYsIDB4OTMsIDB4NWYsCisgIDB4M2QsIDB4MTIsIDB4MjUsIDB4MmUsIDB4OTIsIDB4YmYsIDB4YTMsIDB4MGUsIDB4YzQsIDB4NDgsIDB4MGUsIDB4MWQsCisgIDB4NDksIDB4Y2UsIDB4OTAsIDB4NTEsIDB4NzIsIDB4OTAsIDB4ZGMsIDB4YWIsIDB4YmMsIDB4YTcsIDB4Y2YsIDB4ZDUsCisgIDB4NTUsIDB4YTEsIDB4NTcsIDB4NjEsIDB4MmIsIDB4NGUsIDB4ZDAsIDB4ZjQsIDB4MzQsIDB4M2YsIDB4ZGIsIDB4NzUsCisgIDB4N2UsIDB4MWYsIDB4NGUsIDB4OWIsIDB4ZTgsIDB4OTcsIDB4YTIsIDB4MWQsIDB4ODIsIDB4ZTQsIDB4MDksIDB4NTIsCisgIDB4NzAsIDB4ZTMsIDB4ZjEsIDB4ZDcsIDB4ZDEsIDB4ZWIsIDB4YTMsIDB4NjcsIDB4OWMsIDB4YzksIDB4NzksIDB4OWQsCisgIDB4MTQsIDB4NWMsIDB4ZjcsIDB4YzMsIDB4ZGYsIDB4YzUsIDB4Y2UsIDB4YmUsIDB4MDksIDB4MWEsIDB4ZGIsIDB4MGIsCisgIDB4YTMsIDB4ZDAsIDB4NzIsIDB4N2YsIDB4NTIsIDB4ODUsIDB4YTYsIDB4OTYsIDB4MzYsIDB4MmQsIDB4MjEsIDB4ZjMsCisgIDB4OGYsIDB4NWMsIDB4MGYsIDB4YjQsIDB4YmEsIDB4YmEsIDB4NTEsIDB4ZTIsIDB4MWIsIDB4MmQsIDB4MGYsIDB4NmMsCisgIDB4OTcsIDB4MjYsIDB4MDgsIDB4YmIsIDB4YWUsIDB4YzQsIDB4OWUsIDB4M2QsIDB4ZjEsIDB4NGEsIDB4OGMsIDB4MGIsCisgIDB4YTEsIDB4ZTYsIDB4NzQsIDB4YjUsIDB4YmUsIDB4NjYsIDB4ODMsIDB4YmEsIDB4NjMsIDB4NDcsIDB4M2QsIDB4MTMsCisgIDB4YzUsIDB4NzksIDB4MjgsIDB4ZmIsIDB4OWUsIDB4OGQsIDB4ZDksIDB4ZjYsIDB4NmIsIDB4NzEsIDB4NjksIDB4ODgsCisgIDB4OGEsIDB4ZTAsIDB4YmQsIDB4NjcsIDB4ZTEsIDB4NzUsIDB4OTIsIDB4MGMsIDB4NzIsIDB4OWMsIDB4OGIsIDB4MzQsCisgIDB4N2YsIDB4YTgsIDB4N2EsIDB4YzMsIDB4OTYsIDB4NGEsIDB4ZjAsIDB4ZWMsIDB4MjcsIDB4ZWUsIDB4NTksIDB4ZjYsCisgIDB4MWQsIDB4YTQsIDB4NTksIDB4YzAsIDB4YmEsIDB4YmEsIDB4ZTYsIDB4MGQsIDB4MzUsIDB4ODIsIDB4YzUsIDB4MzQsCisgIDB4ZjAsIDB4ZTYsIDB4OTksIDB4ZDgsIDB4M2QsIDB4YzEsIDB4ZGMsIDB4MDcsIDB4YWYsIDB4M2MsIDB4YWYsIDB4ZGYsCisgIDB4OTYsIDB4YzEsIDB4N2EsIDB4ZWYsIDB4NmIsIDB4NDgsIDB4ZjEsIDB4YTAsIDB4ZDIsIDB4ZTUsIDB4NGQsIDB4YjgsCisgIDB4MzksIDB4M2YsIDB4OTEsIDB4OTMsIDB4ZmEsIDB4YmMsIDB4OTksIDB4MGIsIDB4NjMsIDB4M2EsIDB4YjAsIDB4MTYsCisgIDB4M2EsIDB4YjQsIDB4YWQsIDB4MmUsIDB4YTIsIDB4N2YsIDB4NzgsIDB4MTAsIDB4ZDksIDB4MmIsIDB4MmQsIDB4MDQsCisgIDB4MzksIDB4Y2IsIDB4N2EsIDB4ZjAsIDB4OTEsIDB4NWQsIDB4ZGQsIDB4MzMsIDB4MzQsIDB4ZTQsIDB4ZmMsIDB4M2EsCisgIDB4NGIsIDB4N2YsIDB4NjYsIDB4NDEsIDB4YjMsIDB4ZjMsIDB4ZDksIDB4NzgsIDB4NzMsIDB4ODMsIDB4YzcsIDB4ZjcsCisgIDB4NTQsIDB4NjEsIDB4ZGMsIDB4YzUsIDB4ZjMsIDB4NTQsIDB4OTUsIDB4MjIsIDB4ZmIsIDB4ZDEsIDB4ZmQsIDB4MDMsCisgIDB4NGYsIDB4NTQsIDB4NmEsIDB4YTUsIDB4YzAsIDB4MzMsIDB4NmUsIDB4MDEsIDB4YTAsIDB4ZTAsIDB4ZTYsIDB4MDgsCisgIDB4NGUsIDB4NTIsIDB4Y2IsIDB4YWIsIDB4ZmMsIDB4ZTQsIDB4YTksIDB4ZGEsIDB4NWUsIDB4NjYsIDB4MWYsIDB4ZjMsCisgIDB4YjksIDB4ODQsIDB4NWEsIDB4OWUsIDB4MWMsIDB4YTIsIDB4NmQsIDB4YTksIDB4ZTksIDB4NGYsIDB4ZjQsIDB4ZTgsCisgIDB4ZDMsIDB4YTUsIDB4MzQsIDB4ZDYsIDB4NWMsIDB4ZDMsIDB4ZDAsIDB4MjUsIDB4OTIsIDB4YWEsIDB4ZWUsIDB4ZDMsCisgIDB4NGMsIDB4OTMsIDB4ZmYsIDB4NWEsIDB4YWYsIDB4N2YsIDB4YjIsIDB4YzYsIDB4MDUsIDB4MjUsIDB4ODUsIDB4ODYsCisgIDB4YTMsIDB4NjMsIDB4YzgsIDB4NTIsIDB4ZjAsIDB4ZmMsIDB4YTcsIDB4N2UsIDB4MjcsIDB4NDgsIDB4NzgsIDB4NTAsCisgIDB4ODIsIDB4OGEsIDB4MmUsIDB4MTgsIDB4MDgsIDB4NzgsIDB4OTYsIDB4OTEsIDB4OTUsIDB4ZGEsIDB4NWUsIDB4ZTIsCisgIDB4YWIsIDB4Y2IsIDB4ZDIsIDB4ZDgsIDB4OTgsIDB4M2EsIDB4YTgsIDB4MWQsIDB4YWYsIDB4ZGMsIDB4ZTcsIDB4ZTcsCisgIDB4MzksIDB4NmIsIDB4ZDMsIDB4ZTAsIDB4N2IsIDB4MjIsIDB4NTIsIDB4YWYsIDB4MDAsIDB4ODYsIDB4ZjIsIDB4MTcsCisgIDB4ODQsIDB4YWMsIDB4YzYsIDB4MzcsIDB4ZWUsIDB4OWYsIDB4N2UsIDB4YWUsIDB4YjIsIDB4NjEsIDB4ZTcsIDB4YTUsCisgIDB4OTksIDB4YTksIDB4NmIsIDB4ZGYsIDB4ZjgsIDB4NzQsIDB4MjcsIDB4MzQsIDB4NWEsIDB4NjcsIDB4ZWMsIDB4YTksCisgIDB4MTcsIDB4MmUsIDB4OWQsIDB4YjUsIDB4MmYsIDB4ODgsIDB4NjQsIDB4OWMsIDB4ZDAsIDB4MzEsIDB4NzIsIDB4NGQsCisgIDB4NDIsIDB4OGQsIDB4NjcsIDB4M2MsIDB4ODcsIDB4OTQsIDB4N2YsIDB4NmMsIDB4YWYsIDB4YTYsIDB4NzQsIDB4MmYsCisgIDB4NDMsIDB4MTMsIDB4MmEsIDB4M2EsIDB4MzksIDB4MGEsIDB4MWUsIDB4N2MsIDB4ZTIsIDB4MDcsIDB4MTgsIDB4Y2YsCisgIDB4ZDksIDB4MWEsIDB4NzgsIDB4MTAsIDB4NGYsIDB4NDQsIDB4YTksIDB4OTQsIDB4ZWYsIDB4YzEsIDB4YTMsIDB4MjIsCisgIDB4MTksIDB4NmYsIDB4ZDgsIDB4ZDMsIDB4NDgsIDB4MmEsIDB4MDYsIDB4ZDMsIDB4ZGYsIDB4N2EsIDB4NDYsIDB4YzQsCisgIDB4ZTEsIDB4ZjAsIDB4ODYsIDB4NGUsIDB4YjUsIDB4NjksIDB4MDUsIDB4M2EsIDB4ODAsIDB4Y2MsIDB4YTIsIDB4MDUsCisgIDB4Y2QsIDB4YjUsIDB4ZmYsIDB4ZjQsIDB4OTMsIDB4NDcsIDB4OWUsIDB4ZDUsIDB4NDMsIDB4YjMsIDB4ZjQsIDB4YjUsCisgIDB4OTgsIDB4ZmQsIDB4N2IsIDB4OWYsIDB4YjYsIDB4YjcsIDB4YjksIDB4NWQsIDB4MGIsIDB4MmMsIDB4NTUsIDB4OGQsCisgIDB4YjYsIDB4MWEsIDB4ZWYsIDB4YjQsIDB4NjgsIDB4OTMsIDB4MzMsIDB4ZWYsIDB4ZmUsIDB4ZDMsIDB4NWMsIDB4M2YsCisgIDB4MDUsIDB4YTcsIDB4ZGIsIDB4OTQsIDB4ZmYsIDB4MTksIDB4ZjYsIDB4ZjcsIDB4YjMsIDB4MzAsIDB4ZGYsIDB4NGQsCisgIDB4OWMsIDB4M2UsIDB4YWUsIDB4ZjAsIDB4NTAsIDB4NTgsIDB4OGMsIDB4YzAsIDB4MTcsIDB4NmEsIDB4YzIsIDB4ZWMsCisgIDB4MDQsIDB4MmQsIDB4YzgsIDB4OWEsIDB4OTMsIDB4MWQsIDB4YjEsIDB4Y2EsIDB4YmMsIDB4ZTYsIDB4OTAsIDB4Y2IsCisgIDB4YTAsIDB4ZjIsIDB4MTMsIDB4MTksIDB4NzYsIDB4NTcsIDB4N2IsIDB4ZjcsIDB4MzUsIDB4MmQsIDB4NmEsIDB4NTksCisgIDB4MmYsIDB4ZmUsIDB4ZmIsIDB4ZDksIDB4NGUsIDB4NjMsIDB4MWIsIDB4OTQsIDB4MzcsIDB4MmIsIDB4YjksIDB4N2EsCisgIDB4YmIsIDB4MTEsIDB4ODUsIDB4NDUsIDB4OTYsIDB4ZGQsIDB4NmIsIDB4N2IsIDB4NWUsIDB4N2IsIDB4YTEsIDB4NmYsCisgIDB4YjAsIDB4MWEsIDB4MGYsIDB4YTksIDB4YjcsIDB4NzIsIDB4MzcsIDB4OGYsIDB4MjAsIDB4ODYsIDB4MTYsIDB4ZjgsCisgIDB4NDAsIDB4YTEsIDB4MzMsIDB4Y2YsIDB4YWEsIDB4YTUsIDB4NDUsIDB4OGYsIDB4M2IsIDB4YWIsIDB4MWUsIDB4M2YsCisgIDB4NDcsIDB4NjksIDB4NmEsIDB4ZjcsIDB4MTksIDB4MzUsIDB4NmQsIDB4MTgsIDB4ZjAsIDB4NGMsIDB4YWIsIDB4NzQsCisgIDB4OTMsIDB4NGMsIDB4NmYsIDB4NmQsIDB4Y2IsIDB4YjgsIDB4Y2EsIDB4YzksIDB4MWQsIDB4NmYsIDB4M2QsIDB4NzUsCisgIDB4NTMsIDB4OGIsIDB4NmIsIDB4Y2QsIDB4YzUsIDB4NzEsIDB4ZjMsIDB4MjYsIDB4ZTAsIDB4MWYsIDB4MTUsIDB4YTksCisgIDB4YjksIDB4YjgsIDB4MWMsIDB4OWYsIDB4ZWYsIDB4NzMsIDB4OWYsIDB4MjUsIDB4MDQsIDB4NDMsIDB4MWIsIDB4ZTIsCisgIDB4NzAsIDB4OWMsIDB4ZmMsIDB4NDMsIDB4MTMsIDB4ZTEsIDB4NGEsIDB4ZmYsIDB4ZjQsIDB4MjcsIDB4NmIsIDB4OWUsCisgIDB4MWUsIDB4MmIsIDB4YzYsIDB4ZTcsIDB4NjQsIDB4YzYsIDB4ZWEsIDB4OTcsIDB4ZDYsIDB4MjEsIDB4N2MsIDB4ZTksCisgIDB4NTMsIDB4NGQsIDB4ZTYsIDB4MzcsIDB4ZDcsIDB4YWUsIDB4NzgsIDB4OGUsIDB4YjgsIDB4NjcsIDB4MGUsIDB4ZDYsCisgIDB4ZWYsIDB4MWYsIDB4ZmUsIDB4Y2MsIDB4ZGYsIDB4NmIsIDB4NmUsIDB4NTYsIDB4ZDksIDB4YWQsIDB4YjMsIDB4MTcsCisgIDB4MTUsIDB4MzIsIDB4NjUsIDB4MGIsIDB4ZWMsIDB4NWUsIDB4ZjgsIDB4ZmUsIDB4N2IsIDB4ZDEsIDB4YWYsIDB4MGMsCisgIDB4OGEsIDB4OTEsIDB4YTUsIDB4MTcsIDB4YjcsIDB4YmUsIDB4MmIsIDB4OTcsIDB4NDMsIDB4Y2EsIDB4NDgsIDB4OGUsCisgIDB4ZTQsIDB4Y2MsIDB4MGEsIDB4NDAsIDB4MTcsIDB4YzksIDB4M2MsIDB4NjEsIDB4ZWUsIDB4NDEsIDB4YjksIDB4MjMsCisgIDB4NDAsIDB4YTgsIDB4YmEsIDB4OTIsIDB4NGMsIDB4MTgsIDB4YzMsIDB4MjksIDB4NjUsIDB4ZmQsIDB4MTIsIDB4MjUsCisgIDB4YTksIDB4Y2MsIDB4MTgsIDB4MzAsIDB4YTgsIDB4OGUsIDB4MjIsIDB4OWEsIDB4ZWQsIDB4ODMsIDB4YjcsIDB4OTcsCisgIDB4NWYsIDB4OWYsIDB4NWQsIDB4OGMsIDB4YTMsIDB4NmQsIDB4MjYsIDB4MDQsIDB4YmEsIDB4YmMsIDB4MzgsIDB4ZjksCisgIDB4ZjIsIDB4MmQsIDB4ZGQsIDB4YmQsIDB4NWQsIDB4NDgsIDB4ZTQsIDB4MjgsIDB4YTYsIDB4NWIsIDB4ZjksIDB4M2MsCisgIDB4MWEsIDB4NTcsIDB4NDksIDB4NDYsIDB4NzMsIDB4NzgsIDB4NmQsIDB4MjUsIDB4MTksIDB4MDAsIDB4ZmQsIDB4ZTAsCisgIDB4NzMsIDB4MmEsIDB4MmYsIDB4MDYsIDB4YWUsIDB4ZWEsIDB4ZDYsIDB4ZmQsIDB4NGQsIDB4YWUsIDB4MTMsIDB4MjEsCisgIDB4ZDAsIDB4M2EsIDB4ODYsIDB4NmMsIDB4MzMsIDB4MTQsIDB4M2UsIDB4ZjcsIDB4ZjcsIDB4Y2EsIDB4YjQsIDB4NGUsCisgIDB4ZjIsIDB4MTQsIDB4NTksIDB4NjQsIDB4MzMsIDB4YmEsIDB4ZmMsIDB4ZmEsIDB4ZTAsIDB4Y2QsIDB4MzcsIDB4NjMsCisgIDB4NjMsIDB4YzksIDB4ZmMsIDB4ZWUsIDB4YmIsIDB4ZWYsIDB4MzYsIDB4ZWEsIDB4ZDksIDB4NDIsIDB4MzAsIDB4ZWQsCisgIDB4NmUsIDB4ZTIsIDB4ZjcsIDB4ZWYsIDB4NDcsIDB4NjUsIDB4YjIsIDB4YjEsIDB4ZjEsIDB4Y2EsIDB4YzcsIDB4YzksCisgIDB4N2MsIDB4NDEsIDB4OGQsIDB4NzIsIDB4NDUsIDB4YTcsIDB4M2EsIDB4ZmQsIDB4N2EsIDB4N2IsIDB4YjksIDB4OWEsCisgIDB4NzAsIDB4MDEsIDB4OGYsIDB4ZWQsIDB4NTUsIDB4YzUsIDB4YjUsIDB4OWYsIDB4ZDMsIDB4YTQsIDB4YzQsIDB4ZGIsCisgIDB4ZGIsIDB4MWIsIDB4MWIsIDB4ZTMsIDB4ZTMsIDB4ZTMsIDB4ZTgsIDB4ZTAsIDB4NzQsIDB4N2MsIDB4MTYsIDB4YmMsCisgIDB4YmIsIDB4YjksIDB4YmIsIDB4NDUsIDB4MjYsIDB4Y2YsIDB4NzUsIDB4NTIsIDB4ZDEsIDB4NWYsIDB4MzYsIDB4MzYsCisgIDB4NGUsIDB4MGYsIDB4MmUsIDB4ZjksIDB4YmUsIDB4ZjksIDB4ZWQsIDB4ZjEsIDB4YzUsIDB4ZjgsIDB4ZTQsIDB4ZWMsCisgIDB4MGQsIDB4YWYsIDB4MGUsIDB4YzMsIDB4ZDMsIDB4ZTIsIDB4ZjksIDB4M2QsIDB4YTMsIDB4MTMsIDB4YWYsIDB4NTIsCisgIDB4MTAsIDB4OTIsIDB4ZGMsIDB4NWIsIDB4NzUsIDB4MGMsIDB4NjYsIDB4ZjEsIDB4MjMsIDB4YjMsIDB4NGMsIDB4MmMsCisgIDB4NjgsIDB4ODEsIDB4MzAsIDB4NTgsIDB4NTksIDB4M2UsIDB4MDEsIDB4NjEsIDB4NTYsIDB4N2MsIDB4ZTksIDB4NTMsCisgIDB4ODUsIDB4YzQsIDB4MzMsIDB4ZTAsIDB4N2MsIDB4NGUsIDB4ODIsIDB4NjAsIDB4NDksIDB4MjYsIDB4MDIsIDB4NzMsCisgIDB4MWQsIDB4MDgsIDB4ZDUsIDB4MTYsIDB4MTIsIDB4MmYsIDB4MDMsIDB4OTQsIDB4NWMsIDB4ZTcsIDB4YzAsIDB4YzcsCisgIDB4MjcsIDB4YWYsIDB4Y2YsIDB4ZTksIDB4ZjYsIDB4ZjUsIDB4NzYsIDB4N2MsIDB4ZjAsIDB4ZDUsIDB4MzEsIDB4M2YsCisgIDB4ZmEsIDB4NTUsIDB4NTIsIDB4ZjksIDB4ZjUsIDB4OTAsIDB4MmEsIDB4MWUsIDB4ZmMsIDB4OTEsIDB4MzcsIDB4NDksCisgIDB4NTUsIDB4NGUsIDB4ZTMsIDB4MjUsIDB4ZTcsIDB4NTAsIDB4ZDIsIDB4NjcsIDB4ODYsIDB4NzIsIDB4MDYsIDB4MDQsCisgIDB4NmQsIDB4OGIsIDB4MWQsIDB4ZWUsIDB4NGIsIDB4OWQsIDB4NjQsIDB4ZmEsIDB4M2MsIDB4ZWEsIDB4OTAsIDB4ODQsCisgIDB4ZWQsIDB4NWUsIDB4MWMsIDB4MWYsIDB4MWMsIDB4YmQsIDB4M2UsIDB4MzYsIDB4ZmMsIDB4YjMsIDB4NTAsIDB4YzYsCisgIDB4NTIsIDB4YTMsIDB4MzcsIDB4NWMsIDB4M2YsIDB4ZGIsIDB4ZmIsIDB4YTEsIDB4ZjksIDB4NWMsIDB4ZTYsIDB4YzksCisgIDB4YTcsIDB4ZGYsIDB4YTAsIDB4MmMsIDB4N2EsIDB4ZTcsIDB4ZTcsIDB4ZmMsIDB4NDIsIDB4ZTEsIDB4ZDksIDB4ZDEsCisgIDB4NTUsIDB4YmEsIDB4MmQsIDB4YWQsIDB4ZGIsIDB4ZjcsIDB4NjIsIDB4MzcsIDB4MjUsIDB4MDYsIDB4MjQsIDB4NTYsCisgIDB4NTMsIDB4NTUsIDB4ZmMsIDB4MDksIDB4NzAsIDB4NDQsIDB4N2MsIDB4YjYsIDB4YjMsIDB4YjMsIDB4ZjMsIDB4YzgsCisgIDB4MzgsIDB4NjAsIDB4Y2IsIDB4ZWIsIDB4ODksIDB4NDcsIDB4NDMsIDB4ZDksIDB4ZTcsIDB4YzcsIDB4YjcsIDB4N2QsCisgIDB4ZmIsIDB4MjYsIDB4OWEsIDB4YTEsIDB4MGYsIDB4OWQsIDB4ZmYsIDB4OTksIDB4NDksIDB4MmUsIDB4NzQsIDB4NWEsCisgIDB4MjUsIDB4ZGQsIDB4OWQsIDB4OWUsIDB4ZTYsIDB4YjksIDB4NWIsIDB4ODMsIDB4ZGEsIDB4ZjQsIDB4Y2MsIDB4OTgsCisgIDB4ZDAsIDB4MzEsIDB4YWQsIDB4MGMsIDB4MTcsIDB4ODgsIDB4MzcsIDB4YTQsIDB4ZWIsIDB4NzQsIDB4ZmIsIDB4MDAsCisgIDB4NGUsIDB4YWEsIDB4NzgsIDB4NjgsIDB4MzYsIDB4YzksIDB4YmYsIDB4YTEsIDB4MzYsIDB4ZjksIDB4M2YsIDB4YTMsCisgIDB4YmMsIDB4YjgsIDB4ZGUsIDB4NWUsIDB4ZWMsIDB4YzMsIDB4YTAsIDB4YTAsIDB4ODcsIDB4NWUsIDB4MjUsIDB4YTgsCisgIDB4ZTAsIDB4NzcsIDB4OWYsIDB4M2IsIDB4YjgsIDB4NzAsIDB4YzksIDB4NTMsIDB4Y2IsIDB4ZDksIDB4MDksIDB4MWYsCisgIDB4ZDEsIDB4YWYsIDB4NWYsIDB4MzAsIDB4MGYsIDB4NTgsIDB4Y2UsIDB4ZmMsIDB4Y2EsIDB4NDYsIDB4M2UsIDB4OGUsCisgIDB4ZDYsIDB4YWUsIDB4NTgsIDB4YzksIDB4NGIsIDB4YzYsIDB4ZmUsIDB4YmUsIDB4MTEsIDB4YTksIDB4OTAsIDB4MTEsCisgIDB4MmEsIDB4OWMsIDB4OGIsIDB4OTAsIDB4ZDAsIDB4NWYsIDB4MGIsIDB4MTIsIDB4OWEsIDB4NTEsIDB4ZjUsIDB4MWUsCisgIDB4NWEsIDB4NGYsIDB4MmIsIDB4NDcsIDB4NDAsIDB4MTQsIDB4NTksIDB4ODcsIDB4OTEsIDB4Y2EsIDB4MmEsIDB4NzIsCisgIDB4YmEsIDB4OGYsIDB4YzQsIDB4OTIsIDB4NjcsIDB4M2UsIDB4NDYsIDB4M2UsIDB4YTcsIDB4YjIsIDB4M2YsIDB4M2EsCisgIDB4MDQsIDB4MGUsIDB4MzcsIDB4ZGMsIDB4ZmMsIDB4ZTYsIDB4NzAsIDB4MDgsIDB4MDksIDB4MmEsIDB4OWQsIDB4YmMsCisgIDB4N2MsIDB4YzQsIDB4YzcsIDB4ODMsIDB4NDEsIDB4YzksIDB4ZWMsIDB4NjcsIDB4N2EsIDB4NDgsIDB4MDYsIDB4ZDIsCisgIDB4MzMsIDB4YTYsIDB4NWUsIDB4YjQsIDB4YmUsIDB4YjUsIDB4ZjIsIDB4MDUsIDB4M2UsIDB4NGEsIDB4ZjksIDB4NWMsCisgIDB4NzksIDB4NDMsIDB4M2IsIDB4NzgsIDB4OTQsIDB4NDgsIDB4NTksIDB4NDksIDB4N2MsIDB4OGIsIDB4ZDYsIDB4NjQsCisgIDB4MWIsIDB4OTksIDB4M2EsIDB4MWYsIDB4ZmQsIDB4YTUsIDB4YzMsIDB4NzMsIDB4NTcsIDB4YjIsIDB4OTQsIDB4NjYsCisgIDB4ZTAsIDB4OGUsIDB4YTcsIDB4ZTAsIDB4MzYsIDB4YzEsIDB4ZTgsIDB4NDMsIDB4YzMsIDB4ZmUsIDB4OTEsIDB4Y2UsCisgIDB4ZWMsIDB4ZDMsIDB4MmMsIDB4ZjAsIDB4MWIsIDB4ZmYsIDB4NmIsIDB4N2IsIDB4NTQsIDB4OTYsIDB4MzcsIDB4ZGIsCisgIDB4ZTksIDB4ZWMsIDB4ZGQsIDB4YWMsIDB4OGMsIDB4MTksIDB4OTIsIDB4YjQsIDB4OWEsIDB4YjQsIDB4N2UsIDB4M2MsCisgIDB4YTIsIDB4MWYsIDB4NDYsIDB4N2YsIDB4YWIsIDB4ZTksIDB4ZmQsIDB4NzIsIDB4ZGEsIDB4M2QsIDB4OTIsIDB4ZmYsCisgIDB4YjUsIDB4Y2QsIDB4ZjAsIDB4NDgsIDB4MzAsIDB4OWQsIDB4MDcsIDB4MTMsIDB4ZDcsIDB4YTEsIDB4M2QsIDB4NjgsCisgIDB4NTQsIDB4ODIsIDB4YzQsIDB4YTUsIDB4ZWQsIDB4ZDgsIDB4MmQsIDB4MTksIDB4YzMsIDB4ZWIsIDB4YTgsIDB4YTcsCisgIDB4ZTIsIDB4ZjYsIDB4ZTMsIDB4ZGUsIDB4Y2UsIDB4Y2UsIDB4ZWUsIDB4ZmUsIDB4ZWUsIDB4NjcsIDB4Y2YsIDB4NzcsCisgIDB4ZjYsIDB4NzcsIDB4NzcsIDB4NzcsIDB4ZjcsIDB4ZjYsIDB4NzcsIDB4ZjcsIDB4ZjcsIDB4ZjcsIDB4NzYsIDB4N2UsCisgIDB4ZGEsIDB4ZWUsIDB4NmQsIDB4NmMsIDB4MWMsIDB4OWQsIDB4N2QsIDB4ZjcsIDB4ZTYsIDB4ZjQsIDB4ZWMsIDB4ZTAsCisgIDB4MjgsIDB4YmEsIDB4M2MsIDB4OGIsIDB4MGUsIDB4ZTAsIDB4MzUsIDB4ZWEsIDB4ZDgsIDB4ZTksIDB4MDAsIDB4ZmYsCisgIDB4NzEsIDB4NTIsIDB4OTYsIDB4OTAsIDB4MjUsIDB4N2IsIDB4MGYsIDB4NzMsIDB4ZWIsIDB4OTMsIDB4MzksIDB4MmUsCisgIDB4MDAsIDB4ZmMsIDB4ZDIsIDB4ZTgsIDB4YTYsIDB4NWEsIDB4N2MsIDB4NTgsIDB4N2QsIDB4N2QsIDB4Y2MsIDB4NDcsCisgIDB4MDYsIDB4MTIsIDB4YjMsIDB4ZjUsIDB4NzcsIDB4M2MsIDB4MmMsIDB4YWQsIDB4MDksIDB4YTksIDB4ZDYsIDB4ZjUsCisgIDB4ZDUsIDB4YzgsIDB4ODcsIDB4YzYsIDB4M2IsIDB4MWQsIDB4OTIsIDB4N2YsIDB4NTMsIDB4MTAsIDB4M2UsIDB4M2UsCisgIDB4Y2QsIDB4NDEsIDB4NGEsIDB4ZGYsIDB4MzUsIDB4NTAsIDB4MjQsIDB4YWUsIDB4MTQsIDB4OTUsIDB4MDYsIDB4ZDQsCisgIDB4NzEsIDB4YTAsIDB4YjMsIDB4ZjUsIDB4YjIsIDB4ZDUsIDB4MWEsIDB4ZTAsIDB4ZDksIDB4ZGEsIDB4MjEsIDB4ZDEsCisgIDB4YzEsIDB4OTMsIDB4YmMsIDB4YzcsIDB4YTgsIDB4ZWIsIDB4NmEsIDB4NDIsIDB4YjAsIDB4OWUsIDB4N2UsIDB4NzQsCisgIDB4YTAsIDB4ZWEsIDB4YjQsIDB4NWIsIDB4NmIsIDB4NWEsIDB4NTgsIDB4OTcsIDB4MDEsIDB4MDUsIDB4ZWEsIDB4ZjgsCisgIDB4MWMsIDB4N2YsIDB4YzcsIDB4YjQsIDB4ODcsIDB4ZmYsIDB4MDQsIDB4ZmYsIDB4MjYsIDB4M2MsIDB4NzQsIDB4YjYsCisgIDB4OWQsIDB4MjMsIDB4NTAsIDB4M2EsIDB4ZjAsIDB4NzYsIDB4N2MsIDB4ZjIsIDB4ZTYsIDB4MmIsIDB4ODQsIDB4ZmEsCisgIDB4YmUsIDB4M2IsIDB4YmIsIDB4MzgsIDB4MWEsIDB4NTMsIDB4YjMsIDB4N2MsIDB4MWEsIDB4NmYsIDB4YzAsIDB4MTcsCisgIDB4YzQsIDB4OWIsIDB4NTYsIDB4N2IsIDB4MjUsIDB4NWIsIDB4ODAsIDB4M2YsIDB4ZmQsIDB4MTcsIDB4NWMsIDB4YWQsCisgIDB4NjYsIDB4MDMsIDB4OTcsIDB4ZTIsIDB4ODksIDB4NmUsIDB4MDYsIDB4OTYsIDB4MzEsIDB4YTcsIDB4NmUsIDB4NzYsCisgIDB4MmIsIDB4MzgsIDB4ZWMsIDB4MDYsIDB4NzksIDB4ZmQsIDB4OGIsIDB4NDUsIDB4Y2MsIDB4OGMsIDB4ZDIsIDB4YzksCisgIDB4NDgsIDB4NzAsIDB4YTcsIDB4YzAsIDB4NjQsIDB4NmQsIDB4MzMsIDB4OWMsIDB4N2YsIDB4OWIsIDB4MmQsIDB4ZjQsCisgIDB4ZWQsIDB4MmEsIDB4ODcsIDB4YWEsIDB4NDAsIDB4MmIsIDB4NzksIDB4ZTEsIDB4ODAsIDB4NDAsIDB4YjUsIDB4MTksCisgIDB4ZTEsIDB4M2QsIDB4NzYsIDB4MzUsIDB4OGYsIDB4YWYsIDB4ZjEsIDB4YzEsIDB4ZjYsIDB4ZjYsIDB4MGIsIDB4M2UsCisgIDB4YTYsIDB4OWYsIDB4ZmYsIDB4ZDgsIDB4NGYsIDB4YTIsIDB4YzIsIDB4MmUsIDB4YjcsIDB4NzcsIDB4MDIsIDB4MDEsCisgIDB4MDAsIDB4YWQsIDB4MTMsIDB4ZjIsIDB4NTEsIDB4MzUsIDB4NDQsIDB4MjEsIDB4MjYsIDB4MTIsIDB4MmEsIDB4MTgsCisgIDB4MzIsIDB4ZjYsIDB4ODMsIDB4MGIsIDB4ZGUsIDB4MzQsIDB4MTksIDB4YzMsIDB4YjUsIDB4NWUsIDB4ZjAsIDB4ODYsCisgIDB4MzgsIDB4NTAsIDB4ODYsIDB4NDEsIDB4YWUsIDB4YmYsIDB4ZGMsIDB4NjIsIDB4YjgsIDB4YTUsIDB4YzAsIDB4NWIsCisgIDB4NTAsIDB4N2EsIDB4ZmMsIDB4OWEsIDB4ZTcsIDB4ODUsIDB4OTYsIDB4MjksIDB4ZTcsIDB4Y2UsIDB4MjAsIDB4YmQsCisgIDB4YmEsIDB4MzQsIDB4NjAsIDB4OTQsIDB4ZGEsIDB4NmMsIDB4M2QsIDB4MjYsIDB4NmMsIDB4NjcsIDB4NjQsIDB4NDMsCisgIDB4Y2YsIDB4YjIsIDB4ZWIsIDB4M2QsIDB4YzMsIDB4YWMsIDB4NjcsIDB4MTYsIDB4MmEsIDB4MmIsIDB4ZWEsIDB4NGEsCisgIDB4NGMsIDB4YTcsIDB4ODcsIDB4NTYsIDB4YWEsIDB4NTEsIDB4NzYsIDB4MTksIDB4YjIsIDB4YmIsIDB4MjUsIDB4YzEsCisgIDB4YjEsIDB4NjcsIDB4ZjgsIDB4MDgsIDB4NjksIDB4ODUsIDB4ZGEsIDB4OWUsIDB4NzEsIDB4YTYsIDB4ODksIDB4MmIsCisgIDB4ZDksIDB4YzYsIDB4N2EsIDB4NTYsIDB4OTIsIDB4YmIsIDB4MzcsIDB4MzQsIDB4ZjYsIDB4ZWMsIDB4NTUsIDB4YmEsCisgIDB4ZjcsIDB4NzEsIDB4YjEsIDB4M2EsIDB4MjYsIDB4OGIsIDB4OTMsIDB4NzQsIDB4YTUsIDB4NDgsIDB4OGUsIDB4ZTYsCisgIDB4ZTIsIDB4MDUsIDB4NDUsIDB4NDIsIDB4NmEsIDB4ZDMsIDB4NTYsIDB4MmIsIDB4MWUsIDB4ZGQsIDB4ZDQsIDB4YWEsCisgIDB4ZjUsIDB4MTQsIDB4ZGMsIDB4MGQsIDB4MjQsIDB4ZWYsIDB4MzgsIDB4NjgsIDB4NmYsIDB4MzAsIDB4M2QsIDB4NWEsCisgIDB4MWEsIDB4ZDcsIDB4YmQsIDB4Y2EsIDB4NmIsIDB4OTEsIDB4NTYsIDB4NjUsIDB4MzIsIDB4YmYsIDB4YWEsIDB4ZDUsCisgIDB4OTQsIDB4ZTUsIDB4YTEsIDB4YzQsIDB4MzUsIDB4MzYsIDB4N2MsIDB4Y2IsIDB4ZDksIDB4NTksIDB4NjUsIDB4MmUsCisgIDB4ZjMsIDB4MzgsIDB4NTcsIDB4OWQsIDB4NzEsIDB4MGQsIDB4YzUsIDB4YTksIDB4ODUsIDB4MDAsIDB4ZWEsIDB4OGEsCisgIDB4NDIsIDB4NDIsIDB4NjQsIDB4MjMsIDB4ZTMsIDB4ZjcsIDB4ZGYsIDB4ODgsIDB4MWMsIDB4YzcsIDB4NzcsIDB4NjMsCisgIDB4MDgsIDB4OGUsIDB4ZjYsIDB4MTgsIDB4ZGMsIDB4YjMsIDB4OTAsIDB4OGUsIDB4ZTAsIDB4YzEsIDB4ZDUsIDB4ODQsCisgIDB4NjYsIDB4ZGIsIDB4M2QsIDB4YzcsIDB4NzMsIDB4MDcsIDB4OTQsIDB4MTgsIDB4MzcsIDB4NzcsIDB4MTgsIDB4MTYsCisgIDB4ZWQsIDB4MTMsIDB4OTAsIDB4YTQsIDB4NTQsIDB4NTQsIDB4MGEsIDB4YWIsIDB4MTMsIDB4NTAsIDB4MDcsIDB4MTEsCisgIDB4OWUsIDB4YTAsIDB4OGQsIDB4ODYsIDB4ZWMsIDB4YTAsIDB4NTUsIDB4ZTksIDB4NjYsIDB4MTQsIDB4YjUsIDB4MDAsCisgIDB4NjIsIDB4OTcsIDB4ZTksIDB4ZGEsIDB4YjUsIDB4MGQsIDB4NTUsIDB4MjMsIDB4YWQsIDB4ZGYsIDB4ODcsIDB4MWYsCisgIDB4ZGUsIDB4ODIsIDB4ZWQsIDB4MmUsIDB4OTksIDB4ZDEsIDB4M2YsIDB4N2YsIDB4OTAsIDB4NWQsIDB4OTIsIDB4NjYsCisgIDB4OGYsIDB4NmYsIDB4NDYsIDB4ZWQsIDB4YzQsIDB4NDcsIDB4N2QsIDB4MTgsIDB4NjMsIDB4ZDUsIDB4ZmMsIDB4NmYsCisgIDB4ZjgsIDB4YTUsIDB4M2QsIDB4N2MsIDB4NGIsIDB4NDIsIDB4ZTEsIDB4NDAsIDB4Y2MsIDB4NzcsIDB4ZTQsIDB4NDMsCisgIDB4ZDQsIDB4YzAsIDB4YTYsIDB4ZDgsIDB4MDgsIDB4OTIsIDB4NTcsIDB4YjUsIDB4MWYsIDB4N2QsIDB4MTksIDB4OTcsCisgIDB4ZTksIDB4NzQsIDB4MTAsIDB4MWQsIDB4YTUsIDB4NjQsIDB4YWIsIDB4NTcsIDB4MDMsIDB4OGYsIDB4NTksIDB4NzcsCisgIDB4NTgsIDB4ZmYsIDB4NTEsIDB4ZjQsIDB4OWQsIDB4ZDUsIDB4ZjIsIDB4YTYsIDB4MzMsIDB4MTcsIDB4OTksIDB4ZmQsCisgIDB4ZjAsIDB4YTEsIDB4ZDYsIDB4NjIsIDB4ZWYsIDB4MzQsIDB4MGQsIDB4ZWEsIDB4ZmYsIDB4MGUsIDB4OTMsIDB4ZWYsCisgIDB4ZDEsIDB4YjYsIDB4ZTcsIDB4NTUsIDB4YzYsIDB4NjIsIDB4YzYsIDB4ZTUsIDB4NmQsIDB4YmQsIDB4NWMsIDB4ODMsCisgIDB4NTgsIDB4NTUsIDB4MjUsIDB4ZmIsIDB4NDksIDB4ZDksIDB4MDQsIDB4YzIsIDB4ZmMsIDB4NjYsIDB4NWEsIDB4MzMsCisgIDB4NDcsIDB4NjUsIDB4MGUsIDB4ZmYsIDB4NzYsIDB4NTIsIDB4NmUsIDB4YTUsIDB4NTEsIDB4ZTAsIDB4YjUsIDB4MmEsCisgIDB4MTUsIDB4Y2YsIDB4NjUsIDB4NTEsIDB4NzcsIDB4OWMsIDB4NDYsIDB4YjYsIDB4NWQsIDB4MzcsIDB4OTAsIDB4MjgsCisgIDB4NGUsIDB4ZjMsIDB4YzQsIDB4MzMsIDB4YTIsIDB4ZmEsIDB4ZTQsIDB4ZWMsIDB4ZjIsIDB4ZjgsIDB4MGYsIDB4MGEsCisgIDB4ZDcsIDB4NzQsIDB4OTIsIDB4YzMsIDB4OWIsIDB4YmMsIDB4NWYsIDB4YjksIDB4NzgsIDB4NjAsIDB4NmIsIDB4NGQsCisgIDB4MWQsIDB4ZTUsIDB4OGEsIDB4YmEsIDB4NDAsIDB4YjksIDB4MmIsIDB4YTIsIDB4NGQsIDB4YjgsIDB4MzgsIDB4MjMsCisgIDB4YjgsIDB4MTAsIDB4NDQsIDB4M2QsIDB4NDAsIDB4NjYsIDB4ZWYsIDB4ZDIsIDB4NTgsIDB4YzAsIDB4YmUsIDB4MGMsCisgIDB4NWMsIDB4ZTIsIDB4YjEsIDB4YmYsIDB4NjMsIDB4ZDEsIDB4N2YsIDB4ZTcsIDB4MGIsIDB4MTUsIDB4YWMsIDB4ZjQsCisgIDB4NDUsIDB4MzAsIDB4MWQsIDB4NzMsIDB4M2IsIDB4ZWEsIDB4ZmYsIDB4ODAsIDB4ZGYsIDB4NjgsIDB4OWEsIDB4MTYsCisgIDB4NzQsIDB4MDQsIDB4YjMsIDB4OWUsIDB4OWEsIDB4OGEsIDB4Y2IsIDB4MTMsIDB4ZTAsIDB4NjYsIDB4ZjQsIDB4ZmQsCisgIDB4ZGMsIDB4MTAsIDB4NTYsIDB4OTgsIDB4YWUsIDB4MjksIDB4NjgsIDB4MDcsIDB4ZTYsIDB4MGYsIDB4MTIsIDB4MTAsCisgIDB4YzQsIDB4MjksIDB4NjAsIDB4ZmIsIDB4MmUsIDB4NTQsIDB4YTUsIDB4NjAsIDB4MzksIDB4MDEsIDB4N2QsIDB4MDEsCisgIDB4OGEsIDB4ZmQsIDB4MjgsIDB4ZDcsIDB4YjYsIDB4ZTAsIDB4NTksIDB4YTksIDB4ZDUsIDB4M2EsIDB4MGEsIDB4NzksCisgIDB4OTIsIDB4NTMsIDB4MmIsIDB4OTgsIDB4MTYsIDB4MWUsIDB4YmUsIDB4MTAsIDB4NjIsIDB4ODQsIDB4MjgsIDB4NjgsCisgIDB4NmEsIDB4MGQsIDB4MWYsIDB4YjIsIDB4YTIsIDB4MzIsIDB4MGQsIDB4NTEsIDB4MWIsIDB4NmQsIDB4ZjAsIDB4MTksCisgIDB4ZTEsIDB4NWMsIDB4NDEsIDB4MjgsIDB4YTgsIDB4ZTQsIDB4NTgsIDB4YWMsIDB4MDMsIDB4ZjgsIDB4ZGQsIDB4MmIsCisgIDB4NDcsIDB4MmYsIDB4YTMsIDB4Y2QsIDB4NzIsIDB4NjksIDB4OGQsIDB4NjksIDB4YTIsIDB4YzQsIDB4NjEsIDB4N2MsCisgIDB4OWQsIDB4Y2YsIDB4NDgsIDB4YWEsIDB4YmMsIDB4YWUsIDB4OTYsIDB4MjUsIDB4Y2UsIDB4NGIsIDB4MmQsIDB4YWEsCisgIDB4OTQsIDB4MGEsIDB4YzEsIDB4OGEsIDB4MTAsIDB4ZjEsIDB4NGYsIDB4MTIsIDB4YTEsIDB4YzcsIDB4ZTIsIDB4NmEsCisgIDB4OWYsIDB4YWUsIDB4MzYsIDB4M2MsIDB4ZjYsIDB4ODYsIDB4MDgsIDB4Y2YsIDB4MDIsIDB4NmIsIDB4YjAsIDB4ZTEsCisgIDB4MDUsIDB4OTAsIDB4OTcsIDB4NjEsIDB4ZGQsIDB4MzgsIDB4NTMsIDB4MjksIDB4MzAsIDB4ZWQsIDB4NWMsIDB4ODEsCisgIDB4NzIsIDB4ZDgsIDB4YjMsIDB4NmQsIDB4OWIsIDB4MjksIDB4YTUsIDB4M2IsIDB4ZWUsIDB4ZTYsIDB4ZGEsIDB4NmIsCisgIDB4NWUsIDB4MWQsIDB4ZDgsIDB4NjIsIDB4OTksIDB4YjMsIDB4MGMsIDB4Y2MsIDB4MzYsIDB4Y2UsIDB4NDIsIDB4MGUsCisgIDB4MWQsIDB4ZGUsIDB4ZWQsIDB4YjMsIDB4NjgsIDB4ZjEsIDB4YTAsIDB4YTgsIDB4N2IsIDB4M2QsIDB4Y2QsIDB4MzgsCisgIDB4M2QsIDB4MTksIDB4OTcsIDB4YmUsIDB4Y2YsIDB4M2UsIDB4NmIsIDB4NTksIDB4MmYsIDB4ZWYsIDB4ZGQsIDB4ZDMsCisgIDB4ZmIsIDB4ZjQsIDB4ZWIsIDB4ZTAsIDB4NzIsIDB4MzksIDB4ZTcsIDB4MTgsIDB4YmEsIDB4OTUsIDB4ZWIsIDB4ZjQsCisgIDB4MzcsIDB4Y2MsIDB4OTYsIDB4ZTUsIDB4MWUsIDB4OTIsIDB4NmUsIDB4YzgsIDB4MDcsIDB4OWQsIDB4YzcsIDB4YjksCisgIDB4NDMsIDB4YmEsIDB4NWQsIDB4NjYsIDB4YzAsIDB4ODYsIDB4NWMsIDB4NWQsIDB4YjQsIDB4ZDAsIDB4NGIsIDB4MjksCisgIDB4NTAsIDB4OGMsIDB4MzUsIDB4YjYsIDB4YmMsIDB4ZTksIDB4YWYsIDB4NjYsIDB4NjcsIDB4MDMsIDB4MzMsIDB4OGYsCisgIDB4NGMsIDB4Y2QsIDB4MTEsIDB4NWIsIDB4ODYsIDB4NmMsIDB4YjUsIDB4OGUsIDB4NzMsIDB4NmQsIDB4OTgsIDB4ZTcsCisgIDB4NTgsIDB4M2IsIDB4ZTMsIDB4ODQsIDB4YTMsIDB4MjEsIDB4NDYsIDB4YWUsIDB4ODAsIDB4ODksIDB4M2IsIDB4NzcsCisgIDB4ODcsIDB4NmYsIDB4ZDcsIDB4NzcsIDB4ZTcsIDB4ZWQsIDB4YWYsIDB4ZTksIDB4Y2UsIDB4NDEsIDB4ZjQsIDB4MjgsCisgIDB4ZjgsIDB4NWMsIDB4ZWIsIDB4ZDEsIDB4YjAsIDB4MmEsIDB4MmUsIDB4NTUsIDB4ZGYsIDB4Y2QsIDB4NzIsIDB4MDgsCisgIDB4YjUsIDB4ZWQsIDB4NjIsIDB4OTksIDB4YTMsIDB4MjksIDB4ODcsIDB4OGQsIDB4MjYsIDB4NzUsIDB4NmEsIDB4ZmEsCisgIDB4ZjYsIDB4YTUsIDB4MmYsIDB4Y2IsIDB4ZTUsIDB4NjksIDB4NTgsIDB4ZTEsIDB4ZGMsIDB4ZmUsIDB4YzAsIDB4YmEsCisgIDB4ZjIsIDB4YjEsIDB4ZGQsIDB4M2QsIDB4YjksIDB4MGEsIDB4M2UsIDB4NWEsIDB4YjMsIDB4YzIsIDB4MjUsIDB4ZjksCisgIDB4NWMsIDB4NWEsIDB4ZDgsIDB4MWQsIDB4ZWQsIDB4ODQsIDB4NzQsIDB4MWQsIDB4MmUsIDB4Y2QsIDB4YTMsIDB4MDAsCisgIDB4NDEsIDB4NTcsIDB4MDUsIDB4ZTIsIDB4MGUsIDB4OWYsIDB4NWYsIDB4YzQsIDB4MjMsIDB4NDEsIDB4NGUsIDB4NzgsCisgIDB4ZTMsIDB4MzUsIDB4ZmQsIDB4ZDksIDB4YWUsIDB4YjAsIDB4YmIsIDB4ZDIsIDB4NDYsIDB4NTIsIDB4MmEsIDB4NmQsCisgIDB4MjYsIDB4N2YsIDB4NDgsIDB4MTYsIDB4NGIsIDB4YzAsIDB4ZTEsIDB4ZWIsIDB4MjUsIDB4NzUsIDB4NDUsIDB4NzksCisgIDB4NjAsIDB4MWIsIDB4M2QsIDB4ZjUsIDB4M2IsIDB4ZWEsIDB4OTksIDB4NWIsIDB4NmUsIDB4ZWQsIDB4YTMsIDB4YTAsCisgIDB4YTUsIDB4YjUsIDB4M2EsIDB4OTUsIDB4MDAsIDB4OTYsIDB4NjEsIDB4MmQsIDB4MjUsIDB4ODksIDB4YjQsIDB4NTQsCisgIDB4YWQsIDB4NGQsIDB4ZGIsIDB4MzksIDB4YWMsIDB4YTcsIDB4ODcsIDB4YjEsIDB4M2MsIDB4ZTMsIDB4MTQsIDB4OGMsCisgIDB4YWUsIDB4NTYsIDB4MDUsIDB4MTAsIDB4NDcsIDB4Y2EsIDB4YTIsIDB4YTQsIDB4M2MsIDB4MGEsIDB4ZGMsIDB4MmEsCisgIDB4MjMsIDB4MGYsIDB4M2IsIDB4MTQsIDB4MGQsIDB4ZDIsIDB4MjMsIDB4YjksIDB4ZjYsIDB4MjUsIDB4OGEsIDB4ODIsCisgIDB4YTksIDB4ZWYsIDB4MTEsIDB4ZjAsIDB4NzQsIDB4YWQsIDB4MTAsIDB4ZTAsIDB4YTMsIDB4MGEsIDB4Y2UsIDB4YTMsCisgIDB4NDUsIDB4ZWQsIDB4Y2UsIDB4NTMsIDB4ZWEsIDB4NTAsIDB4MWYsIDB4ODQsIDB4MDIsIDB4M2MsIDB4ZjUsIDB4MGMsCisgIDB4YmQsIDB4NTcsIDB4NTUsIDB4NjgsIDB4MjIsIDB4ZWMsIDB4ODgsIDB4N2QsIDB4OTEsIDB4OTcsIDB4MzMsIDB4MDcsCisgIDB4MDgsIDB4YjQsIDB4OTMsIDB4OGQsIDB4YWUsIDB4YTksIDB4NzMsIDB4ZTUsIDB4NDgsIDB4MTgsIDB4NDQsIDB4YzMsCisgIDB4ZmYsIDB4YWUsIDB4MzMsIDB4YzMsIDB4ZjYsIDB4MjQsIDB4YTMsIDB4NjIsIDB4YzAsIDB4OTUsIDB4YjksIDB4MGMsCisgIDB4YjgsIDB4YmEsIDB4MzQsIDB4NzksIDB4MDksIDB4ZmEsIDB4OWUsIDB4OGYsIDB4NWQsIDB4MWIsIDB4ODcsIDB4Y2IsCisgIDB4OTYsIDB4YjMsIDB4ZWMsIDB4MDcsIDB4YTgsIDB4YmYsIDB4NTcsIDB4MDEsIDB4YmIsIDB4MTAsIDB4ZjIsIDB4MGIsCisgIDB4ZjUsIDB4YjYsIDB4M2MsIDB4MzAsIDB4NGQsIDB4MjEsIDB4Y2QsIDB4NmQsIDB4MzgsIDB4ZjIsIDB4NTAsIDB4NDEsCisgIDB4NDEsIDB4YjUsIDB4M2EsIDB4ZWMsIDB4YWUsIDB4ZmIsIDB4NWYsIDB4NzIsIDB4NjEsIDB4ODcsIDB4YzMsIDB4M2MsCisgIDB4MGUsIDB4YTcsIDB4ZDUsIDB4MmUsIDB4MWYsIDB4MWIsIDB4ZDYsIDB4NTMsIDB4MTEsIDB4N2UsIDB4ZDMsIDB4MTMsCisgIDB4M2QsIDB4YzksIDB4MjAsIDB4MWIsIDB4ZDIsIDB4MGIsIDB4YzMsIDB4YjcsIDB4N2EsIDB4ZmYsIDB4ZmYsIDB4NDIsCisgIDB4YmUsIDB4MzAsIDB4ODIsIDB4NTMsIDB4NTMsIDB4YmUsIDB4NzAsIDB4OGUsIDB4ODIsIDB4NTUsIDB4ZjYsIDB4YzAsCisgIDB4YmUsIDB4YmUsIDB4YzQsIDB4NjksIDB4NjcsIDB4M2QsIDB4YmQsIDB4ZmQsIDB4ZDcsIDB4NjcsIDB4NDUsIDB4OWUsCisgIDB4YjcsIDB4YjQsIDB4YjQsIDB4NDYsIDB4NjEsIDB4NzgsIDB4NmMsIDB4MzIsIDB4ZjksIDB4YWIsIDB4YmMsIDB4YWIsCisgIDB4YjcsIDB4OWQsIDB4ODcsIDB4MjEsIDB4ZWEsIDB4MTIsIDB4ZTMsIDB4NTgsIDB4ZDYsIDB4N2IsIDB4ZmYsIDB4ZGUsCisgIDB4ZWUsIDB4YjYsIDB4NzQsIDB4YzYsIDB4YWEsIDB4MTMsIDB4YzMsIDB4ZTAsIDB4NTIsIDB4OTEsIDB4ZjQsIDB4ZTEsCisgIDB4NmQsIDB4YTMsIDB4Y2UsIDB4MDgsIDB4MGYsIDB4MmUsIDB4NDYsIDB4M2YsIDB4MzMsIDB4MmMsIDB4NjEsIDB4YTEsCisgIDB4OTgsIDB4NGEsIDB4YzQsIDB4MGQsIDB4ZjgsIDB4NjQsIDB4YTIsIDB4YTMsIDB4NTYsIDB4ZjgsIDB4MjMsIDB4NzMsCisgIDB4NWQsIDB4OWYsIDB4MGQsIDB4YmYsIDB4NDAsIDB4MDMsIDB4NjcsIDB4OGIsIDB4OTEsIDB4MjgsIDB4MGQsIDB4ZWYsCisgIDB4ODIsIDB4YjAsIDB4M2MsIDB4ZTcsIDB4YjgsIDB4ODEsIDB4MWYsIDB4OGMsIDB4OGIsIDB4ZGUsIDB4YjgsIDB4ZWMsCisgIDB4MjAsIDB4ZGUsIDB4ZTgsIDB4MTIsIDB4MzksIDB4MjQsIDB4ODksIDB4YmUsIDB4MzgsIDB4NzgsIDB4ZjMsIDB4ZDUsCisgIDB4MzEsIDB4MGMsIDB4MDEsIDB4YjYsIDB4YzcsIDB4M2MsIDB4NzcsIDB4MTEsIDB4MzMsIDB4NWQsIDB4MGMsIDB4ODEsCisgIDB4ZTcsIDB4MjksIDB4ODUsIDB4YWUsIDB4MzIsIDB4ZTUsIDB4M2QsIDB4MzAsIDB4NWIsIDB4NGQsIDB4MzksIDB4NWMsCisgIDB4ZmYsIDB4NTYsIDB4MzUsIDB4M2IsIDB4ODMsIDB4YjQsIDB4NjMsIDB4MTUsIDB4NjMsIDB4MmMsIDB4YmMsIDB4YTIsCisgIDB4NzYsIDB4MzYsIDB4MjIsIDB4ZjMsIDB4NWIsIDB4YzEsIDB4OTQsIDB4ZTAsIDB4YmIsIDB4MGUsIDB4OGQsIDB4MTUsCisgIDB4NGUsIDB4YWUsIDB4NzIsIDB4MzUsIDB4NTksIDB4YzYsIDB4Y2EsIDB4YjQsIDB4MTAsIDB4ODcsIDB4MjksIDB4ZmMsCisgIDB4ZWEsIDB4MjIsIDB4MTgsIDB4ZDUsIDB4NzcsIDB4ZTUsIDB4ODYsIDB4NDEsIDB4ZjgsIDB4ZGQsIDB4NzUsIDB4YjQsCisgIDB4YzAsIDB4NzUsIDB4NzQsIDB4MTQsIDB4YmEsIDB4NjIsIDB4MjQsIDB4NzEsIDB4N2QsIDB4NzcsIDB4NjcsIDB4YzcsCisgIDB4YjMsIDB4Y2UsIDB4YzYsIDB4YWUsIDB4YzEsIDB4OTYsIDB4ZGUsIDB4MmMsIDB4YTIsIDB4OWQsIDB4ZTEsIDB4ZjMsCisgIDB4ZTcsIDB4ZWIsIDB4NTQsIDB4YTIsIDB4NmIsIDB4MTQsIDB4N2MsIDB4MDAsIDB4Y2YsIDB4M2UsIDB4YmEsIDB4Y2QsCisgIDB4MjEsIDB4M2YsIDB4YmEsIDB4YWUsIDB4Y2QsIDB4OGUsIDB4NGIsIDB4MDcsIDB4MmEsIDB4ODEsIDB4MjksIDB4NjIsCisgIDB4YWEsIDB4NzQsIDB4ZTYsIDB4OGIsIDB4M2EsIDB4MjcsIDB4YzQsIDB4MjksIDB4OGUsIDB4MjAsIDB4NDUsIDB4ZTYsCisgIDB4NmUsIDB4MWUsIDB4M2MsIDB4OTUsIDB4MWIsIDB4OWUsIDB4ZTIsIDB4MGMsIDB4ZTksIDB4ZTgsIDB4ZTYsIDB4YzcsCisgIDB4NTgsIDB4MzIsIDB4NjgsIDB4MmEsIDB4NzUsIDB4NzEsIDB4YWEsIDB4OGYsIDB4OWEsIDB4OTgsIDB4ZTAsIDB4ZWUsCisgIDB4YjksIDB4NjYsIDB4OGEsIDB4YWUsIDB4ZGEsIDB4YTMsIDB4MzEsIDB4ZGIsIDB4ZTAsIDB4ZWQsIDB4MzksIDB4N2IsCisgIDB4YTksIDB4NGUsIDB4ZGUsIDB4N2MsIDB4MjUsIDB4MzcsIDB4NzksIDB4YmEsIDB4OTYsIDB4YzIsIDB4NjMsIDB4YjksCisgIDB4ZGQsIDB4YjgsIDB4YTQsIDB4YmUsIDB4ZDUsIDB4YmEsIDB4ZTksIDB4NWMsIDB4ZGEsIDB4ODgsIDB4MDMsIDB4ZDQsCisgIDB4NTIsIDB4YjQsIDB4MjcsIDB4Y2QsIDB4NDQsIDB4MjksIDB4ZjgsIDB4ZDUsIDB4NWYsIDB4ZTMsIDB4MzEsIDB4YmIsCisgIDB4OGMsIDB4ODYsIDB4ODEsIDB4OTUsIDB4YTIsIDB4M2MsIDB4YjQsIDB4NmMsIDB4YTIsIDB4MmMsIDB4MWUsIDB4ZWMsCisgIDB4ZjIsIDB4YTIsIDB4NWYsIDB4NDAsIDB4ZWIsIDB4ZTYsIDB4MDEsIDB4NzcsIDB4Y2QsIDB4OGEsIDB4YmIsIDB4NGEsCisgIDB4NmUsIDB4OWMsIDB4OTAsIDB4YTAsIDB4OTYsIDB4OTUsIDB4ZDIsIDB4ZjEsIDB4NDksIDB4ZjksIDB4MGMsIDB4NzYsCisgIDB4N2EsIDB4YzMsIDB4MjYsIDB4ZjksIDB4YjgsIDB4YWUsIDB4ODQsIDB4YmUsIDB4YjIsIDB4MDYsIDB4N2IsIDB4MjgsCisgIDB4OWIsIDB4NTgsIDB4MDMsIDB4NzMsIDB4NWIsIDB4MzQsIDB4M2QsIDB4NjgsIDB4OWEsIDB4MzIsIDB4Y2QsIDB4MGYsCisgIDB4NjIsIDB4ZmYsIDB4ZTQsIDB4ZmYsIDB4N2EsIDB4ZGYsIDB4MWUsIDB4ZTksIDB4MTUsIDB4NmYsIDB4NGUsIDB4M2UsCisgIDB4YTcsIDB4YjIsIDB4OTksIDB4YmYsIDB4OWEsIDB4NmIsIDB4MmYsIDB4M2IsIDB4M2QsIDB4ODksIDB4OTcsIDB4ZjIsCisgIDB4YmUsIDB4N2MsIDB4M2EsIDB4ZWUsIDB4ZmUsIDB4OWMsIDB4YmMsIDB4NmYsIDB4ZDMsIDB4ZDEsIDB4MjEsIDB4ZjQsCisgIDB4NmMsIDB4Y2YsIDB4MmEsIDB4MzcsIDB4YjEsIDB4NGIsIDB4YTksIDB4MzMsIDB4ZDYsIDB4NDQsIDB4MzYsIDB4YzEsCisgIDB4YTEsIDB4MmQsIDB4ZDIsIDB4YmEsIDB4NTEsIDB4YjIsIDB4MTEsIDB4NjksIDB4ZGUsIDB4MmUsIDB4OTgsIDB4OGIsCisgIDB4NTksIDB4NmUsIDB4NTAsIDB4NmEsIDB4MDUsIDB4NDcsIDB4ZDcsIDB4MmQsIDB4MDAsIDB4NmYsIDB4NTcsIDB4Y2EsCisgIDB4YzUsIDB4ODgsIDB4YTIsIDB4NjcsIDB4MjcsIDB4OGUsIDB4OWYsIDB4YzUsIDB4MzMsIDB4NWEsIDB4MTYsIDB4YWIsCisgIDB4NGMsIDB4MzUsIDB4MWYsIDB4NDcsIDB4NWQsIDB4YTksIDB4ZjMsIDB4NzEsIDB4NzksIDB4ODMsIDB4OWEsIDB4NWIsCisgIDB4Y2UsIDB4NzMsIDB4ZDIsIDB4MzYsIDB4YWUsIDB4ZjAsIDB4NzksIDB4YTUsIDB4NjcsIDB4MjQsIDB4NmIsIDB4NGEsCisgIDB4NGMsIDB4MjksIDB4NTgsIDB4ZDYsIDB4YjUsIDB4YTksIDB4YTgsIDB4Y2YsIDB4NDAsIDB4ZTAsIDB4NjgsIDB4ZjgsCisgIDB4NTgsIDB4YzksIDB4NjcsIDB4OTUsIDB4ZDEsIDB4MTksIDB4NDUsIDB4ODEsIDB4ZjAsIDB4MDcsIDB4MGEsIDB4YTUsCisgIDB4NTMsIDB4ZTQsIDB4ZWEsIDB4OGUsIDB4MWEsIDB4NjksIDB4NGIsIDB4MGUsIDB4M2YsIDB4ZjgsIDB4NDUsIDB4NzAsCisgIDB4NTUsIDB4MDIsIDB4NTEsIDB4NGUsIDB4NjMsIDB4MGEsIDB4NzEsIDB4YzksIDB4MDUsIDB4NmIsIDB4OWMsIDB4YTMsCisgIDB4Y2QsIDB4ODEsIDB4OWEsIDB4NTUsIDB4NWIsIDB4MDAsIDB4ZGUsIDB4MjksIDB4NGYsIDB4ZjYsIDB4M2EsIDB4MTcsCisgIDB4Y2MsIDB4M2IsIDB4OWYsIDB4ZjYsIDB4ODIsIDB4YzQsIDB4NDYsIDB4NjgsIDB4NGYsIDB4MzIsIDB4NzUsIDB4ZjAsCisgIDB4NGQsIDB4OGMsIDB4NTAsIDB4M2EsIDB4MjgsIDB4ODksIDB4ZDUsIDB4MTUsIDB4MTAsIDB4YjQsIDB4ZTMsIDB4NGIsCisgIDB4YmUsIDB4N2QsIDB4ZTMsIDB4MzAsIDB4YjIsIDB4MGIsIDB4ZTIsIDB4YjcsIDB4YzcsIDB4MTcsIDB4NWYsIDB4OWUsCisgIDB4OGQsIDB4OGYsIDB4NDksIDB4NDMsIDB4MWMsIDB4MWQsIDB4N2YsIDB4ZjksIDB4OTYsIDB4YjUsIDB4MDcsIDB4YWYsCisgIDB4OTgsIDB4NzgsIDB4MmYsIDB4NDEsIDB4OGMsIDB4MjcsIDB4NTksIDB4YWYsIDB4ZTAsIDB4NTYsIDB4NzUsIDB4OTcsCisgIDB4NjcsIDB4YjEsIDB4NGMsIDB4MDYsIDB4MjYsIDB4MTksIDB4NjYsIDB4NzQsIDB4YzksIDB4ZjUsIDB4N2EsIDB4OWUsCisgIDB4ODgsIDB4YmIsIDB4MmIsIDB4MDUsIDB4ZTAsIDB4ZDksIDB4MTMsIDB4NzQsIDB4ZjIsIDB4YTUsIDB4M2EsIDB4ZTMsCisgIDB4MmEsIDB4M2IsIDB4OTUsIDB4NTEsIDB4YTEsIDB4NTgsIDB4OTUsIDB4OTcsIDB4NzIsIDB4ZGYsIDB4NWYsIDB4OWEsCisgIDB4ZWYsIDB4YzQsIDB4YjksIDB4YTksIDB4MWIsIDB4YzIsIDB4NTcsIDB4ZTgsIDB4YjMsIDB4NWEsIDB4N2MsIDB4N2EsCisgIDB4MWMsIDB4YzEsIDB4YjIsIDB4NTUsIDB4ZWEsIDB4YjcsIDB4NzksIDB4MmUsIDB4YTcsIDB4MTcsIDB4MTMsIDB4YWYsCisgIDB4NjAsIDB4MmYsIDB4ZTMsIDB4NjQsIDB4NGQsIDB4NTEsIDB4ZDksIDB4NTcsIDB4MmIsIDB4MzAsIDB4NjgsIDB4NWQsCisgIDB4YmMsIDB4NTIsIDB4MDQsIDB4OGUsIDB4ZDQsIDB4OGMsIDB4YTQsIDB4YjgsIDB4Y2UsIDB4NTUsIDB4MmQsIDB4NDMsCisgIDB4MGIsIDB4OTUsIDB4ODksIDB4ZjAsIDB4MGUsIDB4YzksIDB4ZTksIDB4YTksIDB4ZjEsIDB4M2YsIDB4MDEsIDB4MTUsCisgIDB4NmEsIDB4NjEsIDB4ODEsIDB4NGQsIDB4YmQsIDB4OTUsIDB4ZGUsIDB4OGIsIDB4MWIsIDB4NDEsIDB4MmEsIDB4ZTgsCisgIDB4NDgsIDB4ZjUsIDB4MzgsIDB4NDcsIDB4YWYsIDB4Y2MsIDB4MzMsIDB4MWYsIDB4ODQsIDB4ZmYsIDB4NTUsIDB4NzQsCisgIDB4ZWUsIDB4ZDYsIDB4YWIsIDB4ODMsIDB4NGIsIDB4MTksIDB4NjksIDB4NzIsIDB4MDcsIDB4M2EsIDB4MjYsIDB4YTYsCisgIDB4OGMsIDB4NTcsIDB4NDYsIDB4NDIsIDB4ZDAsIDB4NGMsIDB4MDUsIDB4NWMsIDB4MzIsIDB4OGMsIDB4OWQsIDB4NzQsCisgIDB4MjYsIDB4ODMsIDB4ZWMsIDB4MjcsIDB4YzYsIDB4MmUsIDB4MDcsIDB4OTcsIDB4YmEsIDB4ZjUsIDB4ZjUsIDB4ZTYsCisgIDB4Y2MsIDB4YmUsIDB4NTQsIDB4YzQsIDB4NjUsIDB4OTMsIDB4ZGIsIDB4NDgsIDB4MjEsIDB4M2YsIDB4YmMsIDB4YTQsCisgIDB4ZjAsIDB4MmEsIDB4OGIsIDB4ZjAsIDB4YjUsIDB4ZjcsIDB4YTAsIDB4YjQsIDB4MmUsIDB4YTUsIDB4ZTYsIDB4YWEsCisgIDB4ZjcsIDB4NTUsIDB4ZTgsIDB4N2IsIDB4ZGYsIDB4ZDgsIDB4ZDgsIDB4MzgsIDB4M2EsIDB4YmUsIDB4M2MsIDB4MzgsCisgIDB4MzksIDB4M2QsIDB4M2UsIDB4OGEsIDB4NGUsIDB4ZGUsIDB4YmMsIDB4M2EsIDB4YmIsIDB4NzgsIDB4N2QsIDB4NzAsCisgIDB4YTksIDB4ZDEsIDB4ZTcsIDB4MjMsIDB4ZTcsIDB4YmMsIDB4NzIsIDB4ZjksIDB4YWIsIDB4Y2UsIDB4MzcsIDB4ZTgsCisgIDB4MWQsIDB4NWIsIDB4MTAsIDB4NjEsIDB4NWEsIDB4YzUsIDB4NmIsIDB4NjUsIDB4YzUsIDB4OTUsIDB4NjksIDB4NDgsCisgIDB4NmEsIDB4NzMsIDB4YjAsIDB4MTEsIDB4NjksIDB4ZDQsIDB4ZGEsIDB4NzMsIDB4YmIsIDB4ZjAsIDB4ZjksIDB4YmMsCisgIDB4ZWQsIDB4MjIsIDB4OGQsIDB4MjMsIDB4OWIsIDB4NGUsIDB4NzMsIDB4M2QsIDB4ODEsIDB4ZmQsIDB4ZmEsIDB4ZDEsCisgIDB4YTYsIDB4NWMsIDB4YmQsIDB4NGYsIDB4MzksIDB4OWIsIDB4NTAsIDB4YjksIDB4MGQsIDB4YTksIDB4YzYsIDB4OTAsCisgIDB4YzksIDB4ZTEsIDB4YzksIDB4MzYsIDB4OTMsIDB4MGMsIDB4YzUsIDB4ODYsIDB4YWQsIDB4MDQsIDB4ZTEsIDB4YWQsCisgIDB4MTUsIDB4MGMsIDB4NjYsIDB4NzEsIDB4ZTEsIDB4NzYsIDB4ODIsIDB4MDQsIDB4N2YsIDB4OTIsIDB4NDAsIDB4NzYsCisgIDB4YzUsIDB4ODUsIDB4NmQsIDB4YmEsIDB4ZDQsIDB4NzUsIDB4MjMsIDB4NmYsIDB4MTEsIDB4YWMsIDB4ODMsIDB4MzAsCisgIDB4YWQsIDB4MDQsIDB4ZWIsIDB4YWIsIDB4ODQsIDB4NGIsIDB4MjQsIDB4Y2QsIDB4MjIsIDB4MDcsIDB4NjAsIDB4ZTMsCisgIDB4MmIsIDB4YjksIDB4Y2MsIDB4YTQsIDB4ZWQsIDB4NzUsIDB4NjEsIDB4MDgsIDB4MzQsIDB4MjUsIDB4NmEsIDB4MDEsCisgIDB4MWUsIDB4YTUsIDB4ZmQsIDB4MGYsIDB4OWIsIDB4ZGEsIDB4NzQsIDB4ZDEsIDB4NDksIDB4YjIsIDB4NWMsIDB4ODYsCisgIDB4MjcsIDB4Y2EsIDB4ZTMsIDB4Y2QsIDB4NzMsIDB4YzEsIDB4OWMsIDB4YjEsIDB4ZmMsIDB4ZGYsIDB4Y2MsIDB4OGEsCisgIDB4NjgsIDB4MzgsIDB4YTgsIDB4OWEsIDB4YmYsIDB4ODMsIDB4YTcsIDB4ZGIsIDB4YWUsIDB4YWMsIDB4YTIsIDB4ZWUsCisgIDB4MzYsIDB4YmYsIDB4NmYsIDB4NGIsIDB4OTMsIDB4YjQsIDB4MjMsIDB4N2EsIDB4ODgsIDB4NGIsIDB4NTUsIDB4MGYsCisgIDB4ZjUsIDB4ZjMsIDB4NmEsIDB4ZTMsIDB4YzIsIDB4NDksIDB4NjYsIDB4NGIsIDB4MjgsIDB4YzYsIDB4MTMsIDB4OGMsCisgIDB4MDAsIDB4NzgsIDB4NjIsIDB4NWUsIDB4ZTksIDB4MWMsIDB4YzgsIDB4MzgsIDB4MjAsIDB4ZGYsIDB4OTUsIDB4NDUsCisgIDB4OTMsIDB4MmEsIDB4NTAsIDB4M2EsIDB4NWEsIDB4MDAsIDB4YzgsIDB4NTUsIDB4ODEsIDB4NGMsIDB4OWIsIDB4Y2MsCisgIDB4NTIsIDB4YWUsIDB4MDIsIDB4ZTksIDB4ZDgsIDB4M2QsIDB4OGIsIDB4OTksIDB4MGMsIDB4NWUsIDB4ODgsIDB4M2QsCisgIDB4MjAsIDB4MDMsIDB4ZjMsIDB4YmYsIDB4NjksIDB4ZDUsIDB4YmQsIDB4NTgsIDB4NjQsIDB4YjUsIDB4NDEsIDB4YmQsCisgIDB4MjQsIDB4YjUsIDB4ZTMsIDB4NTcsIDB4YjUsIDB4NDEsIDB4ODUsIDB4MmYsIDB4ZDYsIDB4MjEsIDB4MGMsIDB4YTEsCisgIDB4YTYsIDB4YjcsIDB4NGYsIDB4N2IsIDB4NWEsIDB4YzYsIDB4NjYsIDB4MGYsIDB4NTQsIDB4OGIsIDB4YTMsIDB4ODQsCisgIDB4YjgsIDB4NTYsIDB4MGEsIDB4OGQsIDB4MTEsIDB4Y2EsIDB4NjcsIDB4ZDYsIDB4YjUsIDB4MGQsIDB4ZTUsIDB4MWQsCisgIDB4NTMsIDB4NGQsIDB4ODksIDB4OTgsIDB4OGEsIDB4ODksIDB4ZWYsIDB4MGEsIDB4ZDUsIDB4YzUsIDB4ZjIsIDB4NWIsCisgIDB4YmUsIDB4NWQsIDB4NmIsIDB4M2QsIDB4ZDAsIDB4MzAsIDB4ZGYsIDB4NDcsIDB4YTAsIDB4MzYsIDB4NWEsIDB4N2IsCisgIDB4MDMsIDB4NGEsIDB4MmYsIDB4ZGIsIDB4YjAsIDB4NWEsIDB4MDEsIDB4ZjYsIDB4OTIsIDB4ODEsIDB4YTUsIDB4YTAsCisgIDB4ZmQsIDB4ODUsIDB4ZmYsIDB4MTUsIDB4NGEsIDB4OWUsIDB4YWYsIDB4YjksIDB4NDksIDB4NWMsIDB4ZTIsIDB4OGEsCisgIDB4MDMsIDB4ZDQsIDB4YmYsIDB4OWMsIDB4MTksIDB4MTAsIDB4ODEsIDB4MTAsIDB4ODIsIDB4YWMsIDB4YTEsIDB4OTEsCisgIDB4ODAsIDB4NTUsIDB4NDIsIDB4MzgsIDB4ZTgsIDB4NjIsIDB4NGUsIDB4ZGMsIDB4YjcsIDB4NGQsIDB4MjEsIDB4MDgsCisgIDB4NWYsIDB4ZDcsIDB4MGEsIDB4Y2UsIDB4M2EsIDB4YmUsIDB4YzIsIDB4MTYsIDB4NzMsIDB4YzAsIDB4MzQsIDB4MTUsCisgIDB4YjcsIDB4NzYsIDB4OWUsIDB4OTcsIDB4YjIsIDB4ZGYsIDB4NjAsIDB4NjksIDB4ZjcsIDB4N2MsIDB4ZmQsIDB4YzMsCisgIDB4ZGUsIDB4ZjIsIDB4ODYsIDB4YmUsIDB4ZDEsIDB4OGIsIDB4YWUsIDB4ZjksIDB4YWUsIDB4MzIsIDB4YTEsIDB4YWUsCisgIDB4YjcsIDB4MTQsIDB4ZTgsIDB4NGMsIDB4MWUsIDB4N2YsIDB4NzksIDB4MTEsIDB4NWYsIDB4YzUsIDB4YzksIDB4ZmMsCisgIDB4NGYsIDB4N2IsIDB4M2IsIDB4ZTMsIDB4ZjgsIDB4N2EsIDB4MzUsIDB4OGYsIDB4ZmYsIDB4MDMsIDB4MmYsIDB4YmUsCisgIDB4N2MsIDB4ZjIsIDB4NjQsIDB4NmYsIDB4ZTcsIDB4ZDMsIDB4Y2YsIDB4NzYsIDB4N2EsIDB4OGQsIDB4MTgsIDB4NzIsCisgIDB4MDAsIDB4NDAsIDB4MDEsIDB4OWUsIDB4ODAsIDB4NGYsIDB4MzIsIDB4ZTgsIDB4NWQsIDB4N2MsIDB4NjcsIDB4MzQsCisgIDB4YmQsIDB4NGUsIDB4ZjksIDB4MzMsIDB4NWYsIDB4YjMsIDB4ZjEsIDB4YTIsIDB4NzMsIDB4MTAsIDB4Y2IsIDB4ZmQsCisgIDB4MGUsIDB4NmEsIDB4NTIsIDB4NDgsIDB4YjUsIDB4OTgsIDB4ZTEsIDB4OTEsIDB4ZTQsIDB4ZmEsIDB4OGYsIDB4YmIsCisgIDB4ZmIsIDB4YTIsIDB4Y2EsIDB4NDAsIDB4MzgsIDB4OGEsIDB4NzMsIDB4ODIsIDB4ZTcsIDB4ZTIsIDB4NDUsIDB4OWEsCisgIDB4ZDEsIDB4MDksIDB4ZjQsIDB4NzksIDB4NTQsIDB4YzUsIDB4ZDcsIDB4NGUsIDB4NTYsIDB4MzUsIDB4NzMsIDB4NTcsCisgIDB4ZjAsIDB4ZGEsIDB4MmUsIDB4NDQsIDB4NzYsIDB4YzUsIDB4NDIsIDB4OWUsIDB4ZDIsIDB4NTQsIDB4NmQsIDB4NWUsCisgIDB4MGEsIDB4MmYsIDB4MzgsIDB4MGMsIDB4OWYsIDB4NjUsIDB4NTIsIDB4ODAsIDB4MWYsIDB4ZWIsIDB4YmEsIDB4ODgsCisgIDB4MTcsIDB4ODYsIDB4OGEsIDB4ZTcsIDB4ZjcsIDB4MTksIDB4YTUsIDB4MzMsIDB4NWEsIDB4Y2UsIDB4ODEsIDB4ZDgsCisgIDB4MzYsIDB4YTgsIDB4NGQsIDB4OTksIDB4N2EsIDB4ODEsIDB4OWIsIDB4MmYsIDB4NGIsIDB4NGYsIDB4MzEsIDB4MjUsCisgIDB4YzcsIDB4NGQsIDB4YzgsIDB4MzgsIDB4NGUsIDB4OTMsIDB4MDUsIDB4MmYsIDB4NDcsIDB4MGYsIDB4YTMsIDB4MWEsCisgIDB4MzgsIDB4YTYsIDB4OWEsIDB4ZTEsIDB4Y2MsIDB4NDYsIDB4M2EsIDB4YzIsIDB4ZGYsIDB4OTEsIDB4NjksIDB4MWUsCisgIDB4MGIsIDB4OWYsIDB4NTgsIDB4NmYsIDB4MjksIDB4MzksIDB4OWMsIDB4YWUsIDB4Y2MsIDB4YTUsIDB4YjgsIDB4YzMsCisgIDB4ZDIsIDB4ZGEsIDB4YjgsIDB4NjIsIDB4OGYsIDB4MGUsIDB4OGIsIDB4NWUsIDB4OTgsIDB4ZGYsIDB4NjYsIDB4ZjcsCisgIDB4ZjMsIDB4OTcsIDB4MTAsIDB4ODgsIDB4ZGQsIDB4Y2YsIDB4ZmYsIDB4YzMsIDB4ZmQsIDB4NmMsIDB4NGYsIDB4N2YsCisgIDB4YjYsIDB4ZjcsIDB4ZjksIDB4N2YsIDB4OGMsIDB4NDYsIDB4ZTgsIDB4MWYsIDB4NGIsIDB4NDgsIDB4ZGYsIDB4N2UsCisgIDB4ZGQsIDB4NTcsIDB4NjYsIDB4ODcsIDB4NTgsIDB4YjcsIDB4YjAsIDB4ZmMsIDB4Y2IsIDB4MTEsIDB4NjksIDB4Y2EsCisgIDB4NWEsIDB4ZjcsIDB4ZWMsIDB4Y2IsIDB4ZTEsIDB4MmMsIDB4MGYsIDB4MzQsIDB4MjgsIDB4ZTcsIDB4ZjQsIDB4NTYsCisgIDB4NmEsIDB4MjUsIDB4N2IsIDB4YzAsIDB4OTIsIDB4NWEsIDB4NzYsIDB4NGQsIDB4YmEsIDB4OGIsIDB4MWQsIDB4YTAsCisgIDB4OWQsIDB4ZDIsIDB4MzEsIDB4MGYsIDB4YzYsIDB4ZDEsIDB4OWYsIDB4NTksIDB4NTIsIDB4ZmYsIDB4YmMsIDB4MTEsCisgIDB4NjksIDB4ZWMsIDB4OGMsIDB4OTcsIDB4MDMsIDB4NzUsIDB4OGYsIDB4MjMsIDB4MTMsIDB4NWIsIDB4N2EsIDB4MzQsCisgIDB4MzYsIDB4ODYsIDB4NzMsIDB4NmUsIDB4OTksIDB4NzEsIDB4ZTYsIDB4N2MsIDB4MDYsIDB4MDYsIDB4YTUsIDB4MWUsCisgIDB4ZmYsIDB4YTIsIDB4ZDQsIDB4NmUsIDB4MGUsIDB4YTAsIDB4MmYsIDB4MDksIDB4NjcsIDB4ODIsIDB4YzgsIDB4MjcsCisgIDB4MGIsIDB4YTMsIDB4MTIsIDB4NWUsIDB4NjgsIDB4N2EsIDB4ZjIsIDB4NGYsIDB4ZGYsIDB4N2YsIDB4YWYsIDB4ZTYsCisgIDB4MTQsIDB4ZmQsIDB4NDUsIDB4ZmIsIDB4N2QsIDB4NDMsIDB4OWEsIDB4NjgsIDB4NDYsIDB4Y2EsIDB4NmQsIDB4ODEsCisgIDB4ODIsIDB4ODIsIDB4NWEsIDB4OWIsIDB4NTMsIDB4MGYsIDB4ZmMsIDB4MmIsIDB4MWQsIDB4YTcsIDB4MzQsIDB4NDIsCisgIDB4MGIsIDB4N2IsIDB4MzAsIDB4M2UsIDB4M2MsIDB4MzksIDB4MDEsIDB4YTgsIDB4MGUsIDB4NTMsIDB4N2EsIDB4MmMsCisgIDB4NGEsIDB4MGMsIDB4OTIsIDB4YjksIDB4MDksIDB4OGMsIDB4ODAsIDB4YzcsIDB4NjAsIDB4ODUsIDB4ODIsIDB4Y2YsCisgIDB4MmIsIDB4ODcsIDB4NDUsIDB4ODcsIDB4ZWMsIDB4NTMsIDB4NjMsIDB4NzYsIDB4MGQsIDB4ZDYsIDB4ODUsIDB4ODQsCisgIDB4YzQsIDB4OGEsIDB4OGQsIDB4ZjMsIDB4YjIsIDB4MjcsIDB4MGYsIDB4NWUsIDB4YTcsIDB4M2QsIDB4OGQsIDB4ZmMsCisgIDB4YzgsIDB4NGYsIDB4N2EsIDB4OWUsIDB4YTYsIDB4NDMsIDB4NTYsIDB4MDMsIDB4NGIsIDB4ZjYsIDB4NTIsIDB4MGMsCisgIDB4YTcsIDB4ZjQsIDB4ZTcsIDB4ZTQsIDB4ZTUsIDB4ZWUsIDB4NGUsIDB4ZjcsIDB4MTMsIDB4N2MsIDB4MWIsIDB4MDIsCisgIDB4NzMsIDB4ZWQsIDB4NGIsIDB4MWYsIDB4MzksIDB4N2IsIDB4ZWMsIDB4ZjksIDB4NzQsIDB4MjYsIDB4NGYsIDB4NmIsCisgIDB4YzEsIDB4NjIsIDB4OTQsIDB4MTksIDB4N2QsIDB4ZDksIDB4OWIsIDB4ZjAsIDB4ZjksIDB4Y2EsIDB4ZmYsIDB4N2YsCisgIDB4NGQsIDB4M2YsIDB4ODAsIDB4N2EsIDB4ZDUsIDB4NjcsIDB4Y2IsIDB4ZDUsIDB4NjQsIDB4OTEsIDB4ZDYsIDB4M2EsCisgIDB4YmMsIDB4Y2QsIDB4MDMsIDB4ZmMsIDB4MWMsIDB4MmUsIDB4OTUsIDB4YzQsIDB4YzksIDB4MDYsIDB4YWEsIDB4ZGQsCisgIDB4OGIsIDB4ZTUsIDB4ZDcsIDB4YmYsIDB4Y2EsIDB4ZjMsIDB4NDksIDB4NWMsIDB4ZjQsIDB4MzUsIDB4YmEsIDB4NjIsCisgIDB4ZmQsIDB4ZWMsIDB4ZWYsIDB4ZWUsIDB4M2QsIDB4NzksIDB4ZmEsIDB4YWMsIDB4M2YsIDB4NTIsIDB4MmIsIDB4MGQsCisgIDB4MGEsIDB4YTIsIDB4MGEsIDB4NTMsIDB4ZTEsIDB4YTUsIDB4MDksIDB4OTcsIDB4YmEsIDB4MmQsIDB4YTAsIDB4NGUsCisgIDB4NjQsIDB4ZGYsIDB4NzYsIDB4NDUsIDB4MjEsIDB4NTksIDB4ODcsIDB4ZjEsIDB4ZTcsIDB4NWUsIDB4Y2EsIDB4ZDcsCisgIDB4ZmUsIDB4ODMsIDB4YmYsIDB4ZjMsIDB4MTIsIDB4OWYsIDB4ZjgsIDB4OGYsIDB4NzQsIDB4ZjYsIDB4ZDIsIDB4OGQsCisgIDB4ZjAsIDB4M2YsIDB4NzgsIDB4MmMsIDB4MmYsIDB4NzUsIDB4MTAsIDB4YjQsIDB4YWUsIDB4OTYsIDB4ZWIsIDB4NTQsCisgIDB4ODYsIDB4NzQsIDB4ZWYsIDB4MWYsIDB4NWEsIDB4NWMsIDB4NWIsIDB4YzQsIDB4MGQsIDB4MGMsIDB4MWEsIDB4MjEsCisgIDB4ZjAsIDB4ZTEsIDB4NGMsIDB4ODIsIDB4MTEsIDB4YjAsIDB4NTUsIDB4N2QsIDB4YWUsIDB4Y2YsIDB4ZjYsIDB4ZmIsCisgIDB4MjEsIDB4YjUsIDB4MzIsIDB4ZTQsIDB4NTYsIDB4ODYsIDB4NWUsIDB4NWQsIDB4ODMsIDB4NTQsIDB4NzgsIDB4YzgsCisgIDB4MGIsIDB4MzEsIDB4ZDAsIDB4ODQsIDB4YWYsIDB4MzksIDB4N2MsIDB4MWQsIDB4NmEsIDB4MDgsIDB4ZTQsIDB4MzksCisgIDB4MDIsIDB4Y2MsIDB4ODcsIDB4NWYsIDB4OWQsIDB4ZjQsIDB4MTUsIDB4YjksIDB4MjEsIDB4MTcsIDB4YjcsIDB4NDEsCisgIDB4OTcsIDB4YmYsIDB4ZDgsIDB4YzEsIDB4YTksIDB4YTYsIDB4ZjEsIDB4OTIsIDB4ZjcsIDB4ZmUsIDB4ODYsIDB4MTUsCisgIDB4YzgsIDB4OGEsIDB4MTksIDB4ODgsIDB4YzAsIDB4ZGYsIDB4OTUsIDB4ZGMsIDB4NGMsIDB4ZmEsIDB4OTgsIDB4OWUsCisgIDB4MzksIDB4NzMsIDB4ZjYsIDB4NDAsIDB4MTcsIDB4YzIsIDB4NzcsIDB4MWMsIDB4MzQsIDB4YzMsIDB4ZmMsIDB4OWYsCisgIDB4OGEsIDB4NDgsIDB4NDAsIDB4MDgsIDB4NjYsIDB4ZTksIDB4MTIsIDB4YmIsIDB4ODYsIDB4YWYsIDB4NWMsIDB4OTgsCisgIDB4ZDAsIDB4MjUsIDB4MTIsIDB4ZTksIDB4YTMsIDB4ZjQsIDB4MmIsIDB4ZDEsIDB4MjYsIDB4YTYsIDB4MjAsIDB4N2EsCisgIDB4OGUsIDB4YmIsIDB4NGIsIDB4MjQsIDB4MjEsIDB4ZDQsIDB4MWQsIDB4MDgsIDB4NzIsIDB4NGUsIDB4OTIsIDB4NWEsCisgIDB4NjksIDB4NWYsIDB4MzEsIDB4MGIsIDB4NTksIDB4N2IsIDB4YmUsIDB4NzAsIDB4NTUsIDB4N2IsIDB4M2YsIDB4OGYsCisgIDB4NTAsIDB4ZjksIDB4NGUsIDB4ZGUsIDB4ZDIsIDB4NTQsIDB4YTEsIDB4NWEsIDB4MDksIDB4NzksIDB4YmMsIDB4YTQsCisgIDB4OTcsIDB4MDMsIDB4MTcsIDB4OTEsIDB4MGEsIDB4ZTAsIDB4MWMsIDB4NmEsIDB4MTYsIDB4MjgsIDB4YjMsIDB4MzMsCisgIDB4MDYsIDB4M2EsIDB4NzksIDB4ZDAsIDB4ZWIsIDB4M2YsIDB4YjcsIDB4ZDAsIDB4ZmYsIDB4MmIsIDB4MzYsIDB4YzEsCisgIDB4MGIsIDB4NWUsIDB4MDYsIDB4ZmMsIDB4ZmEsIDB4ZjMsIDB4YmUsIDB4YjgsIDB4ZjAsIDB4ZGMsIDB4YmIsIDB4ZGMsCisgIDB4OGQsIDB4NDYsIDB4YzgsIDB4NTUsIDB4MDQsIDB4MzQsIDB4MWMsIDB4MGYsIDB4OTksIDB4ZDMsIDB4NDYsIDB4YWMsCisgIDB4MjksIDB4YjYsIDB4MTgsIDB4NTMsIDB4MDEsIDB4NjQsIDB4YjgsIDB4NGUsIDB4YTUsIDB4YzksIDB4OWMsIDB4YjMsCisgIDB4ODAsIDB4NmIsIDB4MGUsIDB4NjMsIDB4NjksIDB4M2MsIDB4NjEsIDB4MTQsIDB4MzUsIDB4ZGIsIDB4OGUsIDB4N2QsCisgIDB4NDYsIDB4ZTYsIDB4ZTEsIDB4YmQsIDB4YmUsIDB4ZTMsIDB4ZTksIDB4ODQsIDB4MGYsIDB4MTMsIDB4ZWEsIDB4YWUsCisgIDB4NDgsIDB4OGMsIDB4YWQsIDB4NmQsIDB4NDMsIDB4YTksIDB4NzEsIDB4YmQsIDB4MmQsIDB4MWYsIDB4MGUsIDB4YWMsCisgIDB4MGMsIDB4NGMsIDB4MDcsIDB4OWYsIDB4NGUsIDB4MjUsIDB4YWMsIDB4MTksIDB4YWQsIDB4MmQsIDB4ZjIsIDB4OGEsCisgIDB4NzMsIDB4MTUsIDB4ZjUsIDB4YTMsIDB4MmYsIDB4NzksIDB4YmEsIDB4NzcsIDB4NDcsIDB4ZDcsIDB4ZTksIDB4OTUsCisgIDB4NGMsIDB4MDYsIDB4YTksIDB4YzgsIDB4ZWIsIDB4NjQsIDB4OWIsIDB4ZmUsIDB4MzksIDB4YTAsIDB4OWYsIDB4ZWYsCisgIDB4YjEsIDB4NGQsIDB4YzYsIDB4N2YsIDB4NzksIDB4MDIsIDB4NDAsIDB4NGYsIDB4NzgsIDB4ZjIsIDB4MDcsIDB4N2IsCisgIDB4YzMsIDB4ZWQsIDB4MGIsIDB4ZmUsIDB4NGIsIDB4ZWEsIDB4NGUsIDB4N2MsIDB4OGQsIDB4YjIsIDB4NjgsIDB4MmYsCisgIDB4MjEsIDB4ZTYsIDB4NTYsIDB4NjYsIDB4YzIsIDB4ZjMsIDB4ZmQsIDB4MDcsIDB4MTEsIDB4MTQsIDB4YmUsIDB4NjYsCisgIDB4ZjEsIDB4ODUsIDB4NzQsIDB4YzUsIDB4ZTgsIDB4NzksIDB4ODcsIDB4N2YsIDB4NTUsIDB4YzQsIDB4ODEsIDB4OWEsCisgIDB4ZTksIDB4NmMsIDB4NzUsIDB4YTcsIDB4ZWEsIDB4MzAsIDB4ZTEsIDB4NmMsIDB4MDMsIDB4OWMsIDB4YWIsIDB4YzksCisgIDB4ZmQsIDB4ZDYsIDB4MjAsIDB4NDQsIDB4MTUsIDB4NWEsIDB4MjEsIDB4NmYsIDB4MjYsIDB4MDUsIDB4ZjAsIDB4MzUsCisgIDB4MjMsIDB4ZjgsIDB4ZjMsIDB4OWIsIDB4NWEsIDB4ZGQsIDB4MzksIDB4NDgsIDB4NjgsIDB4YzQsIDB4MzIsIDB4YTcsCisgIDB4Y2QsIDB4MTUsIDB4YWMsIDB4MTcsIDB4NDgsIDB4MTYsIDB4MjQsIDB4NTgsIDB4NWEsIDB4NTYsIDB4NWIsIDB4ZmMsCisgIDB4OTksIDB4NjQsIDB4NWUsIDB4ZTIsIDB4YTYsIDB4Y2UsIDB4OWQsIDB4ZGUsIDB4ODgsIDB4ZGMsIDB4NTcsIDB4OGQsCisgIDB4ZDEsIDB4MTUsIDB4MWYsIDB4ZWEsIDB4ODcsIDB4N2IsIDB4M2YsIDB4OWYsIDB4NTYsIDB4MDksIDB4ZGQsIDB4NzQsCisgIDB4OTksIDB4YmUsIDB4NjcsIDB4MjEsIDB4N2EsIDB4ZWUsIDB4NzgsIDB4MjEsIDB4MjUsIDB4ZDIsIDB4MjAsIDB4YzIsCisgIDB4ZjMsIDB4YTEsIDB4OWMsIDB4OWQsIDB4NmEsIDB4MTAsIDB4MGQsIDB4NWYsIDB4OGQsIDB4YTIsIDB4NTMsIDB4ZTAsCisgIDB4NjMsIDB4Y2IsIDB4NTgsIDB4NzgsIDB4MjAsIDB4ZWMsIDB4N2MsIDB4MzUsIDB4NjksIDB4MjAsIDB4ZDEsIDB4MTEsCisgIDB4MGIsIDB4N2MsIDB4NDMsIDB4MDAsIDB4ZjYsIDB4OWMsIDB4N2MsIDB4NmYsIDB4MjIsIDB4MDUsIDB4NmEsIDB4MmMsCisgIDB4N2YsIDB4ZTUsIDB4MTQsIDB4ZWIsIDB4NDIsIDB4YWQsIDB4OTEsIDB4MDEsIDB4M2MsIDB4ZDIsIDB4ZWUsIDB4MzksCisgIDB4ZjgsIDB4ZTAsIDB4ZjEsIDB4NTQsIDB4OGMsIDB4MzQsIDB4MTMsIDB4MjcsIDB4YjAsIDB4NDEsIDB4MjMsIDB4ODIsCisgIDB4ZmEsIDB4NTEsIDB4ZjMsIDB4MzMsIDB4NTAsIDB4ZWIsIDB4NmUsIDB4MTMsIDB4NDgsIDB4OGUsIDB4N2YsIDB4MjIsCisgIDB4MmUsIDB4MTcsIDB4M2UsIDB4OTIsIDB4OTksIDB4OGUsIDB4MDIsIDB4MjEsIDB4NWEsIDB4NmEsIDB4MGQsIDB4NTIsCisgIDB4MDYsIDB4NmUsIDB4NTcsIDB4MTIsIDB4YTMsIDB4MWUsIDB4NmUsIDB4OGQsIDB4ZjMsIDB4YzQsIDB4NWQsIDB4YWQsCisgIDB4YjUsIDB4ZmEsIDB4OGMsIDB4MTQsIDB4ODIsIDB4YzksIDB4OTUsIDB4YjAsIDB4NTYsIDB4MzksIDB4ZTEsIDB4NWQsCisgIDB4ZjgsIDB4OGMsIDB4M2IsIDB4YzksIDB4ZmQsIDB4OGEsIDB4ZWYsIDB4ZTgsIDB4MmYsIDB4N2MsIDB4ZTAsIDB4NGYsCisgIDB4MGEsIDB4NWEsIDB4ZjUsIDB4YTQsIDB4OTAsIDB4YTMsIDB4MDEsIDB4NWYsIDB4MTUsIDB4N2UsIDB4MGMsIDB4YWIsCisgIDB4NDEsIDB4ZjAsIDB4ZmEsIDB4MzQsIDB4MzIsIDB4M2UsIDB4OGQsIDB4MmIsIDB4NmYsIDB4MjgsIDB4MWEsIDB4YjQsCisgIDB4MGYsIDB4NDMsIDB4NTQsIDB4YmYsIDB4ODgsIDB4NTgsIDB4NDMsIDB4ZmEsIDB4OTQsIDB4OWMsIDB4NzIsIDB4MzIsCisgIDB4YjcsIDB4OWMsIDB4OTMsIDB4MWIsIDB4ZjEsIDB4ZTQsIDB4ZDQsIDB4YjYsIDB4NmMsIDB4ZjAsIDB4ODQsIDB4YmMsCisgIDB4Y2EsIDB4NzIsIDB4NDQsIDB4NjIsIDB4ZDIsIDB4ZTcsIDB4MjksIDB4ZTgsIDB4MGYsIDB4YTIsIDB4M2UsIDB4NzcsCisgIDB4OTUsIDB4N2YsIDB4ZDEsIDB4YzcsIDB4N2MsIDB4ZTIsIDB4YzcsIDB4YzEsIDB4ZjQsIDB4ZjUsIDB4NDcsIDB4MWQsCisgIDB4YmIsIDB4OTAsIDB4OWYsIDB4NzksIDB4ZjksIDB4NDUsIDB4NmQsIDB4OTYsIDB4ZjAsIDB4NzMsIDB4NmIsIDB4ZWEsCisgIDB4YTUsIDB4NDAsIDB4ZWEsIDB4NWIsIDB4MTYsIDB4YjcsIDB4YmQsIDB4MWIsIDB4YjQsIDB4ZmYsIDB4ZjIsIDB4MzAsCisgIDB4NjcsIDB4MmUsIDB4MzQsIDB4MmUsIDB4MTMsIDB4MmUsIDB4NmIsIDB4MDIsIDB4ZTMsIDB4ZGEsIDB4ZmQsIDB4MmMsCisgIDB4NDUsIDB4NmEsIDB4NWUsIDB4YWIsIDB4YTEsIDB4MGYsIDB4ZWYsIDB4ZTIsIDB4NGIsIDB4NTMsIDB4NDUsIDB4MGUsCisgIDB4NDMsIDB4MjgsIDB4ZGEsIDB4NGQsIDB4NDQsIDB4YzAsIDB4MzQsIDB4MmYsIDB4YWQsIDB4NjYsIDB4MmEsIDB4YjcsCisgIDB4YmUsIDB4ZmIsIDB4MWMsIDB4M2UsIDB4MDYsIDB4ZTgsIDB4OWMsIDB4ZGQsIDB4MTEsIDB4NzIsIDB4YjUsIDB4N2MsCisgIDB4YTUsIDB4NDYsIDB4ZDcsIDB4ODAsIDB4YmIsIDB4YmEsIDB4ZjcsIDB4MzAsIDB4YTEsIDB4M2QsIDB4NzMsIDB4OTksCisgIDB4YjgsIDB4MGIsIDB4YmQsIDB4Y2QsIDB4NzIsIDB4OTcsIDB4ZWUsIDB4NWEsIDB4YTYsIDB4NTMsIDB4ZDAsIDB4YzUsCisgIDB4YmUsIDB4ZmMsIDB4NjIsIDB4OTYsIDB4NWYsIDB4YjMsIDB4ZTYsIDB4MWEsIDB4ZDAsIDB4NDYsIDB4ZTMsIDB4ZmYsCisgIDB4ZjYsIDB4ZjgsIDB4ZTEsIDB4M2QsIDB4ZmQsIDB4YTgsIDB4NzQsIDB4MTgsIDB4N2IsIDB4NDUsIDB4NmMsIDB4NzgsCisgIDB4ZmIsIDB4ZjcsIDB4MWEsIDB4OGMsIDB4MjMsIDB4MzUsIDB4M2MsIDB4Y2IsIDB4YTcsIDB4ZGEsIDB4YjYsIDB4NmIsCisgIDB4NWEsIDB4ZDYsIDB4ODMsIDB4ZGEsIDB4NzcsIDB4YmYsIDB4MDgsIDB4YmYsIDB4NjUsIDB4OTMsIDB4MTMsIDB4NmIsCisgIDB4Y2IsIDB4NTIsIDB4YWUsIDB4N2QsIDB4OWUsIDB4NTYsIDB4NzIsIDB4OTQsIDB4YmIsIDB4MmEsIDB4NjMsIDB4NzAsCisgIDB4NmYsIDB4NzEsIDB4YzUsIDB4NDUsIDB4MzksIDB4YjcsIDB4ZTYsIDB4OWEsIDB4NDAsIDB4ZDQsIDB4ZmYsIDB4YTIsCisgIDB4MmYsIDB4NzgsIDB4ZTgsIDB4ZmUsIDB4OGIsIDB4M2UsIDB4MzQsIDB4MTgsIDB4ZWIsIDB4MjUsIDB4MmIsIDB4MmIsCisgIDB4YTMsIDB4ODcsIDB4NTMsIDB4NWYsIDB4NGUsIDB4YzUsIDB4YTEsIDB4ZDgsIDB4MGUsIDB4Y2EsIDB4MmQsIDB4NTYsCisgIDB4ODMsIDB4YjAsIDB4YjEsIDB4YzIsIDB4YjAsIDB4NGIsIDB4NjQsIDB4ODgsIDB4YmUsIDB4ODMsIDB4OTMsIDB4YzAsCisgIDB4MTcsIDB4OTEsIDB4NjcsIDB4YTIsIDB4YzQsIDB4NDksIDB4MjUsIDB4YjgsIDB4MTUsIDB4M2QsIDB4NzQsIDB4NjEsCisgIDB4OTYsIDB4ODEsIDB4OTcsIDB4YTEsIDB4NjQsIDB4M2MsIDB4ODEsIDB4MzgsIDB4MzksIDB4NTcsIDB4ZDksIDB4OTIsCisgIDB4YjMsIDB4NzAsIDB4YTcsIDB4MjAsIDB4MjcsIDB4ZDYsIDB4YmQsIDB4MzQsIDB4OGEsIDB4ZGUsIDB4NjYsIDB4YzIsCisgIDB4NjcsIDB4OWQsIDB4ZjAsIDB4NTUsIDB4MzksIDB4MDQsIDB4ZDUsIDB4MGMsIDB4MWMsIDB4MzgsIDB4ODgsIDB4MjYsCisgIDB4YWEsIDB4MTYsIDB4MmUsIDB4MGYsIDB4M2IsIDB4MmMsIDB4YWUsIDB4MTEsIDB4NzEsIDB4NjEsIDB4ZWIsIDB4NzcsCisgIDB4ODEsIDB4MGMsIDB4NjEsIDB4YzgsIDB4OTIsIDB4YmEsIDB4YTgsIDB4NjEsIDB4MTUsIDB4MzgsIDB4N2UsIDB4MDYsCisgIDB4NTUsIDB4NDAsIDB4MWMsIDB4YTksIDB4M2IsIDB4N2UsIDB4NzUsIDB4N2MsIDB4NzEsIDB4NzEsIDB4N2MsIDB4YzEsCisgIDB4ZjMsIDB4N2QsIDB4NTAsIDB4YWYsIDB4ZTYsIDB4NjYsIDB4MWMsIDB4OGQsIDB4M2UsIDB4ZjIsIDB4NjcsIDB4YjAsCisgIDB4ZDEsIDB4MzYsIDB4M2IsIDB4YjQsIDB4NjgsIDB4YzIsIDB4NzgsIDB4MzYsIDB4NjMsIDB4MzYsIDB4ZGUsIDB4OGQsCisgIDB4YzgsIDB4NjAsIDB4MWMsIDB4YzIsIDB4NGEsIDB4MjIsIDB4Y2UsIDB4NjEsIDB4NzgsIDB4MTYsIDB4MDEsIDB4MWEsCisgIDB4NzYsIDB4NWUsIDB4N2MsIDB4YTYsIDB4NDYsIDB4ZDMsIDB4YTIsIDB4NmMsIDB4YTEsIDB4NjEsIDB4YjEsIDB4MTEsCisgIDB4ZDksIDB4YWIsIDB4ODUsIDB4NTYsIDB4ZTMsIDB4NWMsIDB4NTksIDB4ZTYsIDB4ZWYsIDB4NGQsIDB4NTIsIDB4YjMsCisgIDB4NTEsIDB4NDcsIDB4OGEsIDB4ZjMsIDB4NGMsIDB4MzQsIDB4YjIsIDB4M2QsIDB4NzcsIDB4YWUsIDB4MDksIDB4OGMsCisgIDB4ZjcsIDB4OGEsIDB4MzcsIDB4MjgsIDB4NWYsIDB4OWIsIDB4MzAsIDB4MTMsIDB4NjUsIDB4YjUsIDB4NWEsIDB4YTYsCisgIDB4MzMsIDB4ZTcsIDB4ZTgsIDB4YTUsIDB4OWYsIDB4OTMsIDB4ZWQsIDB4MTcsIDB4YzksIDB4MTYsIDB4MmYsIDB4YWQsCisgIDB4YzcsIDB4MDgsIDB4MmMsIDB4OWEsIDB4MWYsIDB4MjIsIDB4NzQsIDB4YjQsIDB4MDksIDB4MGQsIDB4ODgsIDB4NzcsCisgIDB4OTMsIDB4MjEsIDB4MzEsIDB4MjgsIDB4NDMsIDB4YzksIDB4MGQsIDB4MmIsIDB4YmQsIDB4NTEsIDB4NGYsIDB4NjEsCisgIDB4NTUsIDB4YzEsIDB4NGYsIDB4ZTAsIDB4NjAsIDB4NjQsIDB4NTUsIDB4NjEsIDB4NTAsIDB4OTgsIDB4NTAsIDB4MmQsCisgIDB4YjAsIDB4MWIsIDB4NmIsIDB4ZTEsIDB4ZDEsIDB4ZDIsIDB4OGMsIDB4ZjgsIDB4ZGEsIDB4MTcsIDB4YjYsIDB4MDUsCisgIDB4NjQsIDB4YWUsIDB4MTUsIDB4ZmIsIDB4ZDEsIDB4OGYsIDB4NjUsIDB4M2EsIDB4ZmQsIDB4YzksIDB4OWYsIDB4MWMsCisgIDB4YzgsIDB4NzMsIDB4ZjAsIDB4ODAsIDB4NjYsIDB4ODEsIDB4Y2UsIDB4ZDAsIDB4ZTAsIDB4NzUsIDB4YTIsIDB4ZjQsCisgIDB4MWUsIDB4MmMsIDB4MTksIDB4YTMsIDB4NmYsIDB4YzcsIDB4YzcsIDB4MTcsIDB4ZDEsIDB4YzEsIDB4NTcsIDB4NGMsCisgIDB4MzYsIDB4ZmEsIDB4YWYsIDB4YWQsIDB4MmUsIDB4M2YsIDB4YTcsIDB4MjcsIDB4ODMsIDB4YWQsIDB4YWQsIDB4MzIsCisgIDB4MjgsIDB4MjQsIDB4ZTYsIDB4MDQsIDB4ZDcsIDB4MmEsIDB4ODIsIDB4ZTEsIDB4YzIsIDB4YTYsIDB4NTYsIDB4NGIsCisgIDB4ZDUsIDB4MWYsIDB4ZjUsIDB4ZjUsIDB4MjUsIDB4ZGMsIDB4ODgsIDB4M2UsIDB4YjgsIDB4ODgsIDB4MWYsIDB4YjMsCisgIDB4ODQsIDB4YmMsIDB4YzEsIDB4YzIsIDB4NDUsIDB4MTQsIDB4ZWUsIDB4MTUsIDB4MDksIDB4NDYsIDB4ZDgsIDB4ZDIsCisgIDB4NjgsIDB4ZWYsIDB4Y2IsIDB4ZDYsIDB4OTUsIDB4NTMsIDB4MTYsIDB4ZTksIDB4MjAsIDB4ZWEsIDB4YmYsIDB4Y2UsCisgIDB4N2YsIDB4MjYsIDB4NDMsIDB4MjAsIDB4ZGUsIDB4N2UsIDB4MzIsIDB4ZGEsIDB4ODksIDB4MzYsIDB4YmYsIDB4NGIsCisgIDB4YjMsIDB4ZTcsIDB4Y2YsIDB4ZmUsIDB4MWEsIDB4OWQsIDB4NmMsIDB4ZjUsIDB4NmIsIDB4NDgsIDB4NzAsIDB4YTksCisgIDB4YTksIDB4MzMsIDB4ODksIDB4YjMsIDB4NWIsIDB4YjcsIDB4NjIsIDB4NjcsIDB4ZDgsIDB4ZDUsIDB4ODIsIDB4NmYsCisgIDB4MzMsIDB4N2UsIDB4ZmYsIDB4N2QsIDB4ODgsIDB4YzAsIDB4ZGEsIDB4MTYsIDB4ODUsIDB4MTAsIDB4NWEsIDB4NDAsCisgIDB4ZTUsIDB4ZDEsIDB4YjcsIDB4OWEsIDB4MjUsIDB4ZjksIDB4MDQsIDB4ZjcsIDB4N2IsIDB4N2EsIDB4NmEsIDB4YzYsCisgIDB4NTMsIDB4ZjcsIDB4ZmMsIDB4NTksIDB4YWIsIDB4ODksIDB4YTcsIDB4YWUsIDB4OGQsIDB4YjcsIDB4ZDIsIDB4YzYsCisgIDB4MmYsIDB4NmMsIDB4NjIsIDB4NmYsIDB4YjQsIDB4YjMsIDB4MTcsIDB4NmQsIDB4OWUsIDB4OGQsIDB4YjcsIDB4ZjcsCisgIDB4NWMsIDB4MGIsIDB4ZWQsIDB4MjYsIDB4ZjYsIDB4ZDAsIDB4MDQsIDB4M2YsIDB4NTQsIDB4N2YsIDB4ZjksIDB4MjksCisgIDB4N2YsIDB4ZmYsIDB4YzcsIDB4MjQsIDB4ZmIsIDB4MjksIDB4ZGEsIDB4ZmMsIDB4N2UsIDB4NzcsIDB4OTcsIDB4MWEsCisgIDB4ZjgsIDB4NmIsIDB4NzQsIDB4NzAsIDB4ZjIsIDB4N2QsIDB4ZjQsIDB4NzQsIDB4NDQsIDB4OGQsIDB4YmQsIDB4ODksCisgIDB4ZWYsIDB4YjQsIDB4MzksIDB4YTUsIDB4Y2MsIDB4MWMsIDB4YTMsIDB4MTEsIDB4ZmEsIDB4N2QsIDB4YWIsIDB4OGQsCisgIDB4NjcsIDB4OGQsIDB4MzYsIDB4NGUsIDB4ZTksIDB4NGUsIDB4ZjgsIDB4OWUsIDB4OGUsIDB4OTQsIDB4OWQsIDB4ZDEsCisgIDB4OTMsIDB4YmQsIDB4MjgsIDB4N2QsIDB4ZjYsIDB4ZDksIDB4MjcsIDB4ZDYsIDB4OTAsIDB4YjYsIDB4ODEsIDB4ZGYsCisgIDB4ZDcsIDB4ZmQsIDB4OTQsIDB4NDIsIDB4Y2EsIDB4NDAsIDB4NjYsIDB4Y2UsIDB4ZjEsIDB4N2IsIDB4NTIsIDB4NjYsCisgIDB4ZDAsIDB4MTAsIDB4NjAsIDB4ODAsIDB4YmYsIDB4ODksIDB4OGIsIDB4OTksIDB4OGEsIDB4MWIsIDB4OTMsIDB4ODIsCisgIDB4ZDMsIDB4NGEsIDB4MjksIDB4NTksIDB4NmQsIDB4MDIsIDB4ODcsIDB4MjUsIDB4MWQsIDB4OWEsIDB4ZmIsIDB4YWQsCisgIDB4ZWUsIDB4ZjAsIDB4YmQsIDB4ZDQsIDB4MWUsIDB4ZmQsIDB4NmIsIDB4ZjQsIDB4N2EsIDB4N2MsIDB4NzIsIDB4NGMsCisgIDB4MjMsIDB4ZGEsIDB4YTEsIDB4YWUsIDB4ZjksIDB4MzksIDB4OTQsIDB4MGUsIDB4ZTEsIDB4NTcsIDB4OTgsIDB4ZGMsCisgIDB4ZTcsIDB4ZTAsIDB4M2UsIDB4ZDQsIDB4MzYsIDB4YzIsIDB4YjIsIDB4NmUsIDB4MTAsIDB4M2EsIDB4M2EsIDB4YjQsCisgIDB4NGIsIDB4N2MsIDB4OTcsIDB4ZTEsIDB4MjEsIDB4YzMsIDB4ODMsIDB4NmIsIDB4YmUsIDB4M2UsIDB4YzgsIDB4MzEsCisgIDB4OGIsIDB4NGYsIDB4N2YsIDB4OTMsIDB4NjcsIDB4YjQsIDB4NGQsIDB4OGEsIDB4YmMsIDB4NjAsIDB4MTQsIDB4NTMsCisgIDB4YmYsIDB4NjYsIDB4MjksIDB4N2MsIDB4NzMsIDB4NzQsIDB4MmMsIDB4ODksIDB4YmIsIDB4YWYsIDB4ZTMsIDB4OGMsCisgIDB4NTQsIDB4MjQsIDB4NzMsIDB4ZjAsIDB4OTQsIDB4YjcsIDB4MWMsIDB4ODEsIDB4OTcsIDB4NDAsIDB4OGUsIDB4YmMsCisgIDB4N2YsIDB4ZmEsIDB4OTAsIDB4YmQsIDB4YTcsIDB4NzUsIDB4ZmMsIDB4NzQsIDB4YjQsIDB4Y2IsIDB4ZmMsIDB4MDcsCisgIDB4N2MsIDB4ZTMsIDB4N2QsIDB4ZjUsIDB4OWEsIDB4ZmUsIDB4YmQsIDB4ZmIsIDB4YjQsIDB4MWYsIDB4ZjEsIDB4YWYsCisgIDB4ZWEsIDB4YjcsIDB4NzcsIDB4ZGIsIDB4YWYsIDB4MWIsIDB4ODcsIDB4NjcsIDB4NjcsIDB4ZGYsIDB4OWMsIDB4MDgsCisgIDB4MTgsIDB4ZTMsIDB4NTAsIDB4MWQsIDB4YWEsIDB4NmMsIDB4NTgsIDB4YjksIDB4MWIsIDB4YjEsIDB4MjgsIDB4NTcsCisgIDB4YmEsIDB4YjksIDB4ZjksIDB4MjQsIDB4MTMsIDB4ODQsIDB4ZTEsIDB4NmUsIDB4OTMsIDB4NjQsIDB4YzksIDB4NzgsCisgIDB4ODAsIDB4YWEsIDB4YTEsIDB4MTEsIDB4YWMsIDB4MmUsIDB4OTksIDB4YzMsIDB4MTksIDB4YjEsIDB4ZTksIDB4NTMsCisgIDB4ZTMsIDB4MGYsIDB4MmEsIDB4OTksIDB4OTAsIDB4ZDUsIDB4OWMsIDB4YjcsIDB4OTMsIDB4MDcsIDB4NDcsIDB4MGUsCisgIDB4MTAsIDB4YmIsIDB4NjAsIDB4OTksIDB4ZDUsIDB4MDMsIDB4ZDAsIDB4YTYsIDB4Y2MsIDB4ZjksIDB4MmMsIDB4NjQsCisgIDB4ZmEsIDB4ZjQsIDB4YTIsIDB4ZGUsIDB4N2IsIDB4ZmIsIDB4NjMsIDB4YjIsIDB4ZWMsIDB4YTUsIDB4ZDMsIDB4ZmIsCisgIDB4ZWEsIDB4YWYsIDB4ZWQsIDB4MDcsIDB4MGMsIDB4YjYsIDB4YjAsIDB4NjYsIDB4OTcsIDB4NWEsIDB4NmMsIDB4MDIsCisgIDB4NGUsIDB4ZTMsIDB4MDcsIDB4YjIsIDB4MjMsIDB4MzAsIDB4MjYsIDB4NTUsIDB4Y2QsIDB4MjUsIDB4YmMsIDB4ZDgsCisgIDB4ODAsIDB4Y2EsIDB4YmQsIDB4MzksIDB4NzgsIDB4N2QsIDB4ZmMsIDB4ZjIsIDB4ZGIsIDB4ODMsIDB4ZDMsIDB4YjcsCisgIDB4YzcsIDB4ZjQsIDB4NGEsIDB4NGEsIDB4MWYsIDB4ZGIsIDB4ZjQsIDB4NzAsIDB4M2EsIDB4ZjQsIDB4NzEsIDB4OTEsCisgIDB4NGUsIDB4ZjMsIDB4MzksIDB4YzcsIDB4OTcsIDB4ZmEsIDB4N2YsIDB4ZWQsIDB4NmYsIDB4MDgsIDB4MDYsIDB4M2IsCisgIDB4ZWEsIDB4ZjEsIDB4NWIsIDB4YmIsIDB4ZjIsIDB4MWEsIDB4YzksIDB4MDUsIDB4ZmYsIDB4NmIsIDB4NGYsIDB4ZmUsCisgIDB4YjUsIDB4ZjcsIDB4ZDcsIDB4ZGUsIDB4NTYsIDB4NmQsIDB4ZDAsIDB4YWQsIDB4MWIsIDB4MzIsIDB4Y2IsIDB4Y2IsCisgIDB4YmQsIDB4ODAsIDB4NmYsIDB4NTEsIDB4MzMsIDB4MTQsIDB4YzAsIDB4N2YsIDB4OTksIDB4OTUsIDB4OWUsIDB4NDUsCisgIDB4NjcsIDB4ZWMsIDB4NjgsIDB4ZTMsIDB4NjcsIDB4MzcsIDB4MjcsIDB4MGYsIDB4ZTEsIDB4ZmQsIDB4YmIsIDB4YzcsCisgIDB4MmYsIDB4YmQsIDB4ODQsIDB4NzEsIDB4ZDEsIDB4ZGIsIDB4MWEsIDB4MzgsIDB4NzMsIDB4MDMsIDB4ODEsIDB4NmIsCisgIDB4NmUsIDB4YzMsIDB4OWEsIDB4NDgsIDB4ZGUsIDB4MmYsIDB4MTksIDB4OWQsIDB4YjgsIDB4ZDksIDB4OTMsIDB4YmYsCisgIDB4YmMsIDB4M2MsIDB4M2EsIDB4YjgsIDB4M2MsIDB4ZTYsIDB4MTcsIDB4ZWMsIDB4ZjMsIDB4YzYsIDB4MGUsIDB4NmUsCisgIDB4ZjAsIDB4N2MsIDB4ZWUsIDB4Y2YsIDB4NjYsIDB4NGYsIDB4N2UsIDB4ZjgsIDB4OTIsIDB4MDcsIDB4ZDQsIDB4ZGIsCisgIDB4OTIsIDB4MjgsIDB4MDYsIDB4NDIsIDB4ZGMsIDB4OGQsIDB4N2UsIDB4ZTUsIDB4OTksIDB4MjIsIDB4OWQsIDB4ODMsCisgIDB4OWMsIDB4ZTUsIDB4ZDIsIDB4MzAsIDB4MjMsIDB4OWIsIDB4M2QsIDB4ZjksIDB4NWQsIDB4Y2YsIDB4ZjksIDB4NmUsCisgIDB4ZTksIDB4MjgsIDB4ZWYsIDB4ZGYsIDB4MjUsIDB4MTYsIDB4YTgsIDB4OWMsIDB4MDEsIDB4YmMsIDB4ZGYsIDB4Y2EsCisgIDB4MjEsIDB4MTQsIDB4NzgsIDB4OTgsIDB4NWYsIDB4MWYsIDB4MGQsIDB4NTMsIDB4ODgsIDB4YjcsIDB4MjksIDB4ZTAsCisgIDB4ZjQsIDB4NzUsIDB4MGIsIDB4YWYsIDB4MjksIDB4ZDYsIDB4ZWMsIDB4NWYsIDB4Y2EsIDB4ZjMsIDB4ZGQsIDB4YmQsCisgIDB4MjcsIDB4N2YsIDB4YzUsIDB4N2MsIDB4YmUsIDB4ZWMsIDB4NmQsIDB4ZDMsIDB4ZDksIDB4ZDAsIDB4ZmIsIDB4MmIsCisgIDB4N2YsIDB4M2EsIDB4YWQsIDB4ODIsIDB4ZTIsIDB4YTMsIDB4ZmEsIDB4MTksIDB4YmUsIDB4NGIsIDB4YTksIDB4NDQsCisgIDB4MDksIDB4NjAsIDB4ODUsIDB4NTcsIDB4M2QsIDB4MjAsIDB4MTEsIDB4YzEsIDB4ODQsIDB4ZGUsIDB4NGIsIDB4OGEsCisgIDB4OTEsIDB4NTEsIDB4NmUsIDB4NTgsIDB4MjgsIDB4MWYsIDB4ZWIsIDB4MzUsIDB4NDksIDB4YWUsIDB4ZDMsIDB4MmMsCisgIDB4NzMsIDB4ZDUsIDB4ZTEsIDB4ZTQsIDB4NzMsIDB4ZTEsIDB4ZjksIDB4MzEsIDB4OTAsIDB4NzcsIDB4NjUsIDB4OGMsCisgIDB4NGEsIDB4NTMsIDB4YzIsIDB4ZGYsIDB4NWMsIDB4M2MsIDB4NTgsIDB4MTYsIDB4MTIsIDB4YmUsIDB4MDUsIDB4N2IsCisgIDB4NWMsIDB4ZDYsIDB4YWMsIDB4NjUsIDB4MTUsIDB4NGYsIDB4ZDQsIDB4YWYsIDB4NjMsIDB4MTcsIDB4MTEsIDB4OTgsCisgIDB4MDQsIDB4YTQsIDB4NWEsIDB4MWUsIDB4NjAsIDB4MjcsIDB4NDksIDB4ZWMsIDB4M2YsIDB4ODAsIDB4M2MsIDB4ZDgsCisgIDB4OTksIDB4MWQsIDB4NGYsIDB4MzgsIDB4OWQsIDB4ZDYsIDB4YTUsIDB4NWMsIDB4MDQsIDB4MzcsIDB4NzIsIDB4MzcsCisgIDB4ZjUsIDB4YjYsIDB4ZmQsIDB4ZDIsIDB4ODAsIDB4ZmYsIDB4ODUsIDB4MGYsIDB4NGEsIDB4OTksIDB4Y2IsIDB4ZDIsCisgIDB4ZjksIDB4OGYsIDB4MTAsIDB4NjcsIDB4ZDQsIDB4NjcsIDB4ZWIsIDB4ZWIsIDB4ZDQsIDB4NDgsIDB4NjYsIDB4YzIsCisgIDB4MzAsIDB4ZTQsIDB4M2EsIDB4MmYsIDB4NzcsIDB4NjMsIDB4NTIsIDB4MzUsIDB4NTksIDB4NTIsIDB4M2MsIDB4MGEsCisgIDB4NzcsIDB4ZTgsIDB4MDgsIDB4NDMsIDB4NjEsIDB4ODgsIDB4NDEsIDB4MmUsIDB4MWMsIDB4YmYsIDB4MzMsIDB4MWEsCisgIDB4OGQsIDB4N2MsIDB4MDEsIDB4NGMsIDB4NWUsIDB4MTYsIDB4OGQsIDB4M2UsIDB4YTEsIDB4NDYsIDB4NDcsIDB4YzAsCisgIDB4NTIsIDB4ODksIDB4MzksIDB4ZGUsIDB4ODQsIDB4MjEsIDB4MGYsIDB4NjMsIDB4N2EsIDB4NGIsIDB4YTEsIDB4MmYsCisgIDB4ZWEsIDB4MjMsIDB4NzAsIDB4NWIsIDB4MjMsIDB4ZjAsIDB4NmYsIDB4ZjQsIDB4ZjUsIDB4YjMsIDB4N2QsIDB4NGIsCisgIDB4MGQsIDB4YmYsIDB4ZWQsIDB4NWEsIDB4ODQsIDB4NDcsIDB4ZmEsIDB4MjYsIDB4N2UsIDB4NDcsIDB4MmQsIDB4ZDMsCisgIDB4ZTYsIDB4ZjQsIDB4NTQsIDB4ZWUsIDB4ZTYsIDB4ODIsIDB4MjUsIDB4OTgsIDB4YjEsIDB4ZGMsIDB4OTAsIDB4MTMsCisgIDB4YzksIDB4YWMsIDB4OTQsIDB4NDksIDB4ZDMsIDB4YWUsIDB4NjgsIDB4NDUsIDB4NTcsIDB4NTYsIDB4NzIsIDB4ZjksCisgIDB4M2QsIDB4ZDIsIDB4YmQsIDB4YTUsIDB4ZDAsIDB4YzIsIDB4YjIsIDB4ZTAsIDB4NWIsIDB4MWUsIDB4Y2YsIDB4YjEsCisgIDB4OWQsIDB4MjAsIDB4NGIsIDB4NjcsIDB4MmUsIDB4NmIsIDB4M2IsIDB4Y2EsIDB4NTgsIDB4Y2EsIDB4ZjcsIDB4NjUsCisgIDB4ZDgsIDB4ZmQsIDB4OWEsIDB4MjIsIDB4YTcsIDB4YTQsIDB4MTcsIDB4NjUsIDB4YWMsIDB4NmMsIDB4ODYsIDB4NjQsCisgIDB4YjYsIDB4ZTUsIDB4MGIsIDB4MDQsIDB4YmMsIDB4NzQsIDB4ZjAsIDB4ZGUsIDB4NTUsIDB4YzUsIDB4NzgsIDB4YWYsCisgIDB4YTEsIDB4ZDAsIDB4NDYsIDB4NTgsIDB4MTYsIDB4OWIsIDB4NjksIDB4MGYsIDB4YTUsIDB4MGUsIDB4NzgsIDB4MmMsCisgIDB4NTIsIDB4M2UsIDB4YjUsIDB4MTYsIDB4NWQsIDB4OTgsIDB4YmMsIDB4MzEsIDB4MzcsIDB4ZmUsIDB4NTQsIDB4YWUsCisgIDB4YWIsIDB4MmUsIDB4OWEsIDB4NTEsIDB4ZjEsIDB4MmMsIDB4NGIsIDB4ODIsIDB4YmUsIDB4ZDcsIDB4N2IsIDB4NTEsCisgIDB4N2MsIDB4Y2YsIDB4ODUsIDB4NTgsIDB4MTMsIDB4YzYsIDB4NGEsIDB4MDIsIDB4ZTMsIDB4MDAsIDB4OGYsIDB4Y2MsCisgIDB4NjksIDB4ZTAsIDB4NjMsIDB4NzQsIDB4MjMsIDB4NTQsIDB4YTksIDB4NTUsIDB4ODQsIDB4MTEsIDB4ZWIsIDB4OWQsCisgIDB4N2QsIDB4MmIsIDB4OTksIDB4MjgsIDB4YTQsIDB4OWMsIDB4ZTYsIDB4Y2MsIDB4NGIsIDB4NTEsIDB4ZGIsIDB4OTEsCisgIDB4NDksIDB4MTQsIDB4ZDUsIDB4NTAsIDB4YjcsIDB4YWIsIDB4MzksIDB4ZjcsIDB4OWMsIDB4NTQsIDB4ZjQsIDB4NTgsCisgIDB4ZTUsIDB4MjYsIDB4MDUsIDB4MzIsIDB4OTAsIDB4N2QsIDB4MWMsIDB4ODIsIDB4YTgsIDB4YjAsIDB4ZDksIDB4NDIsCisgIDB4ZWQsIDB4NGIsIDB4ZjcsIDB4MTEsIDB4MTcsIDB4OTksIDB4NTYsIDB4ZDcsIDB4MTMsIDB4NDMsIDB4NmQsIDB4YjMsCisgIDB4YTEsIDB4MmIsIDB4YTgsIDB4ZWIsIDB4ZDAsIDB4NTcsIDB4NDUsIDB4N2EsIDB4N2QsIDB4MmQsIDB4MzcsIDB4YjYsCisgIDB4YTgsIDB4MzksIDB4YjQsIDB4NmUsIDB4MjEsIDB4M2IsIDB4ZTUsIDB4NTksIDB4NjEsIDB4NDQsIDB4ZjIsIDB4YzMsCisgIDB4YmEsIDB4ZDksIDB4YmMsIDB4MzQsIDB4N2YsIDB4OGYsIDB4NzksIDB4NWMsIDB4NmEsIDB4YzIsIDB4NmMsIDB4ZDEsCisgIDB4NDgsIDB4NTksIDB4MzcsIDB4OTAsIDB4MWQsIDB4NGEsIDB4MmUsIDB4MzYsIDB4ZTcsIDB4NGEsIDB4ZDQsIDB4YTMsCisgIDB4YzcsIDB4NjcsIDB4MTcsIDB4MWIsIDB4YTAsIDB4NjcsIDB4Y2YsIDB4N2MsIDB4ZWEsIDB4YjksIDB4MmQsIDB4M2EsCisgIDB4MzgsIDB4YzAsIDB4M2MsIDB4ZjYsIDB4YzQsIDB4YTMsIDB4NDIsIDB4ZWYsIDB4MWQsIDB4ZjAsIDB4NDksIDB4MGEsCisgIDB4MTAsIDB4NGYsIDB4NjIsIDB4N2YsIDB4ZTMsIDB4ODIsIDB4NTcsIDB4YzcsIDB4N2IsIDB4N2EsIDB4YjksIDB4ZDAsCisgIDB4ZTksIDB4NDksIDB4YTYsIDB4N2EsIDB4MjgsIDB4YmYsIDB4NGIsIDB4M2MsIDB4MGQsIDB4OWQsIDB4NzcsIDB4MzYsCisgIDB4N2EsIDB4MmUsIDB4NGYsIDB4ZGQsIDB4ZmQsIDB4NGUsIDB4OTksIDB4MzQsIDB4NDIsIDB4YmIsIDB4NGUsIDB4NWYsCisgIDB4NjEsIDB4OTAsIDB4OGQsIDB4NTksIDB4MTksIDB4NDUsIDB4NDEsIDB4OTMsIDB4ZTIsIDB4MjYsIDB4YzksIDB4NDMsCisgIDB4MTUsIDB4MmYsIDB4N2QsIDB4ZDMsIDB4ODgsIDB4YjUsIDB4YjUsIDB4YTgsIDB4MDksIDB4M2YsIDB4MjAsIDB4OTIsCisgIDB4MDgsIDB4YWUsIDB4MjYsIDB4NTIsIDB4ZDYsIDB4YzAsIDB4ZjgsIDB4YjgsIDB4MWQsIDB4NGEsIDB4Y2UsIDB4NDcsCisgIDB4N2UsIDB4NmQsIDB4OTQsIDB4M2QsIDB4YjcsIDB4NDgsIDB4M2QsIDB4NjMsIDB4M2UsIDB4ODcsIDB4MTAsIDB4NDAsCisgIDB4MDYsIDB4ZDgsIDB4YTAsIDB4NzMsIDB4YzEsIDB4ZmIsIDB4ODMsIDB4NzksIDB4Y2MsIDB4ZjAsIDB4OTUsIDB4NWMsCisgIDB4NzAsIDB4MDEsIDB4NTgsIDB4MzIsIDB4MDgsIDB4MzUsIDB4MWMsIDB4NjksIDB4MGQsIDB4OWQsIDB4ZGEsIDB4ZGEsCisgIDB4N2UsIDB4MGUsIDB4YTcsIDB4MjEsIDB4YjIsIDB4YzYsIDB4NDYsIDB4MGEsIDB4OWEsIDB4MjEsIDB4MjksIDB4MDEsCisgIDB4YjIsIDB4N2EsIDB4NmEsIDB4Y2EsIDB4ZmQsIDB4ZjEsIDB4MWMsIDB4ZWQsIDB4NDksIDB4NmQsIDB4OGYsIDB4N2UsCisgIDB4NjgsIDB4Y2IsIDB4OWUsIDB4NWYsIDB4OWMsIDB4N2QsIDB4NzUsIDB4NzEsIDB4M2MsIDB4MWUsIDB4NDcsIDB4YWYsCisgIDB4OGYsIDB4MmYsIDB4ZTUsIDB4Y2EsIDB4N2YsIDB4MjksIDB4OTgsIDB4YjgsIDB4NmIsIDB4YmUsIDB4YjYsIDB4NDcsCisgIDB4MDgsIDB4MzksIDB4MTgsIDB4NjUsIDB4OGMsIDB4ZTEsIDB4NGUsIDB4Y2MsIDB4OWYsIDB4MDAsIDB4ZmEsIDB4ZmEsCisgIDB4OWMsIDB4YzMsIDB4NjksIDB4MzAsIDB4ZTUsIDB4NzAsIDB4OWQsIDB4OWYsIDB4MmIsIDB4OTQsIDB4ZWUsIDB4MDYsCisgIDB4NGUsIDB4N2YsIDB4MDAsIDB4OWIsIDB4MTAsIDB4OTUsIDB4NzQsIDB4M2UsIDB4NzQsIDB4ZWYsIDB4NGQsIDB4ODUsCisgIDB4OGQsIDB4MmMsIDB4NTAsIDB4YTcsIDB4MWIsIDB4ZDMsIDB4NWMsIDB4ZGUsIDB4OTMsIDB4Y2UsIDB4YTcsIDB4MzcsCisgIDB4ZmQsIDB4MTcsIDB4YzMsIDB4ZmIsIDB4NTMsIDB4NzQsIDB4OTksIDB4NTcsIDB4NWMsIDB4OTcsIDB4OTQsIDB4ZmYsCisgIDB4N2EsIDB4NjEsIDB4ZjIsIDB4ZjEsIDB4YTcsIDB4ZTgsIDB4N2IsIDB4NmEsIDB4NzMsIDB4NDYsIDB4YjMsIDB4Y2UsCisgIDB4OGUsIDB4NjQsIDB4M2EsIDB4NzAsIDB4YzcsIDB4MjgsIDB4OWYsIDB4ZTcsIDB4MGIsIDB4ODUsIDB4YTAsIDB4ZTYsCisgIDB4NWQsIDB4NTgsIDB4ZTksIDB4NzQsIDB4NTUsIDB4MTQsIDB4YTMsIDB4YzcsIDB4OGIsIDB4OGYsIDB4ODMsIDB4NTUsCisgIDB4NDMsIDB4ZDgsIDB4ZjksIDB4MTQsIDB4NTgsIDB4ZTcsIDB4YmUsIDB4N2MsIDB4NjgsIDB4ODUsIDB4NGIsIDB4NGUsCisgIDB4OTMsIDB4YWIsIDB4MGEsIDB4MDYsIDB4MDksIDB4N2YsIDB4OGUsIDB4OWEsIDB4ZGIsIDB4NjEsIDB4YmEsIDB4ZDksCisgIDB4NWQsIDB4YWUsIDB4MTMsIDB4NDQsIDB4N2YsIDB4N2QsIDB4ZjIsIDB4ZDksIDB4MjcsIDB4M2IsIDB4OWYsIDB4YzksCisgIDB4NWYsIDB4ZWQsIDB4Y2YsIDB4ZTcsIDB4NGYsIDB4NzcsIDB4OTQsIDB4YjYsIDB4OTksIDB4ZmUsIDB4ZjUsIDB4NzQsCisgIDB4ZmYsIDB4ZTksIDB4ZWUsIDB4M2UsIDB4YjMsIDB4YzksIDB4ZWQsIDB4ZWMsIDB4ZWYsIDB4ZDAsIDB4ZmYsIDB4N2YsCisgIDB4YWEsIDB4M2YsIDB4NjEsIDB4Y2EsIDB4YmMsIDB4ZTcsIDB4N2IsIDB4OWYsIDB4N2QsIDB4MGEsIDB4NDgsIDB4MGMsCisgIDB4Y2IsIDB4YzcsIDB4OWMsIDB4M2UsIDB4MzIsIDB4YWMsIDB4ZjIsIDB4MjEsIDB4NDgsIDB4NmQsIDB4NjAsIDB4MDQsCisgIDB4ZmQsIDB4YTksIDB4ZWUsIDB4OTAsIDB4ZTQsIDB4MTgsIDB4ZmIsIDB4OTQsIDB4NjMsIDB4YWEsIDB4ZDcsIDB4NzIsCisgIDB4YmQsIDB4OTksIDB4MjcsIDB4YWMsIDB4MDEsIDB4ZDQsIDB4YjksIDB4MmEsIDB4NjQsIDB4MWYsIDB4MDYsIDB4ZGMsCisgIDB4OTYsIDB4ZjQsIDB4NWYsIDB4MWQsIDB4ODYsIDB4YmUsIDB4NWQsIDB4ZTEsIDB4ZGYsIDB4NjAsIDB4ODksIDB4YWEsCisgIDB4YmQsIDB4MjMsIDB4ZjgsIDB4ZWYsIDB4ODAsIDB4OTAsIDB4ZWEsIDB4OTcsIDB4N2UsIDB4ZGEsIDB4MTIsIDB4OTIsCisgIDB4MzcsIDB4NDAsIDB4MzMsIDB4YTUsIDB4NGIsIDB4YTUsIDB4ZWYsIDB4NGQsIDB4YWQsIDB4YmMsIDB4YTgsIDB4N2IsCisgIDB4OGEsIDB4MmQsIDB4YzIsIDB4ODUsIDB4YTQsIDB4MGEsIDB4NWMsIDB4MDksIDB4NzYsIDB4ZjgsIDB4OTcsIDB4N2UsCisgIDB4NGYsIDB4MWMsIDB4NTgsIDB4ZmMsIDB4OTYsIDB4NGEsIDB4NDMsIDB4ZDQsIDB4ZmUsIDB4OWEsIDB4NGIsIDB4MTEsCisgIDB4ZTgsIDB4ZjgsIDB4NTYsIDB4NGQsIDB4NzgsIDB4MzYsIDB4ZmMsIDB4ZjIsIDB4ZmIsIDB4OTksIDB4NjIsIDB4YWQsCisgIDB4YTYsIDB4MGYsIDB4YjksIDB4Y2MsIDB4MmEsIDB4YTksIDB4ZDQsIDB4ZDgsIDB4MzEsIDB4ZTQsIDB4NTYsIDB4NzMsCisgIDB4MmEsIDB4NDYsIDB4YmYsIDB4YTAsIDB4MzksIDB4M2YsIDB4MjIsIDB4NDgsIDB4YjAsIDB4NWIsIDB4YjksIDB4NjEsCisgIDB4YjAsIDB4MzgsIDB4YTksIDB4YTAsIDB4ZGIsIDB4NmMsIDB4MzYsIDB4MWMsIDB4OGQsIDB4YTEsIDB4OWQsIDB4NzgsCisgIDB4ZjIsIDB4YWEsIDB4MTMsIDB4ZDksIDB4YTEsIDB4YmMsIDB4YTEsIDB4ZTYsIDB4YTcsIDB4Y2IsIDB4NTYsIDB4YTMsCisgIDB4NWQsIDB4NzgsIDB4OTcsIDB4ZTMsIDB4YjQsIDB4OTcsIDB4ZTcsIDB4NGQsIDB4YjIsIDB4NWIsIDB4OWYsIDB4NjIsCisgIDB4NjksIDB4MGMsIDB4YmUsIDB4YTcsIDB4ZGYsIDB4YzAsIDB4N2UsIDB4NzIsIDB4OWIsIDB4ZWUsIDB4ZDEsIDB4YTEsCisgIDB4NzksIDB4YTAsIDB4YmIsIDB4YWIsIDB4NTQsIDB4YjksIDB4ZTksIDB4ODAsIDB4ZTMsIDB4NWQsIDB4NWIsIDB4ZDIsCisgIDB4M2YsIDB4MDcsIDB4MmMsIDB4YjksIDB4NmIsIDB4MmUsIDB4M2MsIDB4ODgsIDB4NTAsIDB4YTUsIDB4NTQsIDB4NzksCisgIDB4ZjgsIDB4OTksIDB4MWIsIDB4OTEsIDB4YzksIDB4YzQsIDB4YjcsIDB4NGMsIDB4ODUsIDB4MGQsIDB4ZmYsIDB4ZTgsCisgIDB4YjAsIDB4NWIsIDB4MzgsIDB4ZDcsIDB4YjQsIDB4MGMsIDB4NWUsIDB4MmMsIDB4OTIsIDB4M2YsIDB4MGYsIDB4NzMsCisgIDB4NGYsIDB4OWQsIDB4YjYsIDB4OWIsIDB4YzQsIDB4NDUsIDB4OGQsIDB4YjYsIDB4N2IsIDB4NDMsIDB4YzgsIDB4ZWIsCisgIDB4ZTksIDB4YTQsIDB4YTUsIDB4OTMsIDB4MjMsIDB4YTgsIDB4YTEsIDB4ZmMsIDB4ODcsIDB4OGQsIDB4OGQsIDB4ZjEsCisgIDB4ZjksIDB4ZjEsIDB4ZjEsIDB4NTEsIDB4NzQsIDB4N2EsIDB4ZjIsIDB4ZmEsIDB4ZTQsIDB4MzIsIDB4MzAsIDB4YzgsCisgIDB4ZGQsIDB4NDEsIDB4NjIsIDB4MGUsIDB4NTcsIDB4MmIsIDB4NzEsIDB4ZDMsIDB4OTgsIDB4MGUsIDB4NGYsIDB4MTIsCisgIDB4MmIsIDB4ZGYsIDB4YjMsIDB4YTMsIDB4N2MsIDB4OTEsIDB4NjgsIDB4NGEsIDB4YzMsIDB4YmMsIDB4ZjksIDB4MWUsCisgIDB4YWUsIDB4ZGUsIDB4NjAsIDB4YjMsIDB4MTksIDB4NDUsIDB4NWYsIDB4MDYsIDB4ZTgsIDB4YzgsIDB4YTgsIDB4MjQsCisgIDB4ZTMsIDB4NjYsIDB4ZWEsIDB4ZWEsIDB4NzcsIDB4MGUsIDB4N2YsIDB4NTAsIDB4YjAsIDB4NDYsIDB4ZGQsIDB4NzIsCisgIDB4NTIsIDB4YWUsIDB4NGIsIDB4OTcsIDB4NjksIDB4YTMsIDB4MDAsIDB4ZDcsIDB4NDYsIDB4YWYsIDB4NzgsIDB4NmUsCisgIDB4MTMsIDB4YzEsIDB4M2MsIDB4MDcsIDB4MWUsIDB4M2EsIDB4NjAsIDB4ZjcsIDB4ZWUsIDB4MTMsIDB4NjQsIDB4Y2QsCisgIDB4MmYsIDB4NTIsIDB4YzksIDB4ODAsIDB4MGMsIDB4ODEsIDB4YzUsIDB4YWUsIDB4MWMsIDB4ZTIsIDB4NjUsIDB4MmUsCisgIDB4N2EsIDB4M2MsIDB4ZmMsIDB4NjIsIDB4NTgsIDB4YWIsIDB4ZDYsIDB4NTAsIDB4YjUsIDB4ZjYsIDB4YWQsIDB4YjAsCisgIDB4MDgsIDB4ZWEsIDB4OTMsIDB4MWQsIDB4OTcsIDB4M2IsIDB4YjAsIDB4ODQsIDB4Y2UsIDB4NTEsIDB4NTMsIDB4OWYsCisgIDB4M2YsIDB4YjYsIDB4MWIsIDB4OTEsIDB4M2QsIDB4YjIsIDB4NjIsIDB4YWIsIDB4YmUsIDB4NTgsIDB4NjUsIDB4YWQsCisgIDB4ZTMsIDB4ZWUsIDB4MDcsIDB4NzksIDB4OTcsIDB4YzYsIDB4ZmYsIDB4YzksIDB4MGUsIDB4OGUsIDB4YjcsIDB4YWIsCisgIDB4YjgsIDB4MTgsIDB4OTIsIDB4ZTUsIDB4ZjUsIDB4MzAsIDB4MzQsIDB4ZTcsIDB4YWEsIDB4NDgsIDB4ODQsIDB4ODIsCisgIDB4OGUsIDB4YzUsIDB4ZjUsIDB4OTMsIDB4ZjgsIDB4Y2EsIDB4OGIsIDB4MGQsIDB4NmIsIDB4ZDEsIDB4MjcsIDB4ODAsCisgIDB4ZTQsIDB4MDgsIDB4NGYsIDB4Y2UsIDB4NzUsIDB4MDMsIDB4ZjAsIDB4ZDAsIDB4MDcsIDB4NzQsIDB4ZGEsIDB4OTksCisgIDB4YjMsIDB4ZDMsIDB4ZGIsIDB4M2EsIDB4OWUsIDB4MDcsIDB4ZDUsIDB4NTYsIDB4ZDEsIDB4ZWIsIDB4MjgsIDB4NGUsCisgIDB4MDcsIDB4ODAsIDB4NWEsIDB4ZTUsIDB4NTYsIDB4NTMsIDB4MWUsIDB4YTYsIDB4OGUsIDB4YTUsIDB4NmQsIDB4NWEsCisgIDB4MmYsIDB4YTIsIDB4ZGQsIDB4Y2YsIDB4NzgsIDB4MWMsIDB4MWYsIDB4MzcsIDB4OWUsIDB4NTcsIDB4NzksIDB4MzEsCisgIDB4MzUsIDB4NDQsIDB4OWIsIDB4NWMsIDB4MTcsIDB4ODIsIDB4YjQsIDB4NGYsIDB4YzksIDB4NTEsIDB4NDAsIDB4NzEsCisgIDB4MTgsIDB4OTksIDB4NWQsIDB4NDMsIDB4YzYsIDB4MDIsIDB4YjksIDB4YzcsIDB4ZjcsIDB4MTMsIDB4MGQsIDB4YWIsCisgIDB4YzMsIDB4MzMsIDB4ODUsIDB4MzgsIDB4YjcsIDB4NTgsIDB4NDgsIDB4N2MsIDB4ZDYsIDB4ZTgsIDB4YmMsIDB4YjAsCisgIDB4YWYsIDB4NTUsIDB4OTAsIDB4N2IsIDB4ZmQsIDB4YzIsIDB4YTUsIDB4ODUsIDB4Y2EsIDB4MzQsIDB4YjAsIDB4NzcsCisgIDB4ODQsIDB4NjQsIDB4ZWQsIDB4M2UsIDB4OWQsIDB4YzEsIDB4YWEsIDB4MzYsIDB4MjcsIDB4MDAsIDB4ZTQsIDB4NGYsCisgIDB4ODQsIDB4NGYsIDB4MDAsIDB4ZDMsIDB4MDgsIDB4NWQsIDB4MjIsIDB4ZTYsIDB4ZTksIDB4N2EsIDB4YTYsIDB4MDYsCisgIDB4MGMsIDB4MGEsIDB4Y2IsIDB4YzMsIDB4YjksIDB4YjAsIDB4MDksIDB4ZmIsIDB4ODEsIDB4OGIsIDB4NjMsIDB4ZDYsCisgIDB4NDMsIDB4MDMsIDB4YWMsIDB4OWEsIDB4N2IsIDB4ZmUsIDB4MmIsIDB4MGMsIDB4ZTIsIDB4YWYsIDB4YWEsIDB4YjksCisgIDB4ZjksIDB4MTUsIDB4NWUsIDB4M2IsIDB4YzEsIDB4YWUsIDB4OGYsIDB4OTksIDB4MTksIDB4M2YsIDB4ODIsIDB4NjEsCisgIDB4ZWYsIDB4ZWUsIDB4OTAsIDB4ZmQsIDB4M2EsIDB4Y2YsIDB4OWIsIDB4YjUsIDB4OTYsIDB4ZGIsIDB4OTcsIDB4NTIsCisgIDB4MGMsIDB4NmIsIDB4ODgsIDB4ZDksIDB4ZDksIDB4ZGQsIDB4ZjksIDB4NjYsIDB4ZmQsIDB4YWMsIDB4ODMsIDB4ZWQsCisgIDB4ZmIsIDB4ZDEsIDB4OTcsIDB4ZjcsIDB4OWUsIDB4M2UsIDB4YjIsIDB4NjgsIDB4NjcsIDB4MDUsIDB4ZWUsIDB4ZTUsCisgIDB4ODksIDB4MDEsIDB4MjEsIDB4NjEsIDB4MDgsIDB4ZmEsIDB4MDAsIDB4NGMsIDB4NmIsIDB4ZDksIDB4NDgsIDB4ZjAsCisgIDB4OTMsIDB4ZWIsIDB4OTgsIDB4YmIsIDB4ZmYsIDB4NTgsIDB4ZWYsIDB4MmQsIDB4NTksIDB4YTMsIDB4ZDEsIDB4OTUsCisgIDB4ZDcsIDB4MGEsIDB4Y2QsIDB4OTYsIDB4NWYsIDB4OTYsIDB4ZWMsIDB4MjEsIDB4NWIsIDB4ODIsIDB4OTMsIDB4Y2MsCisgIDB4NWYsIDB4NjMsIDB4NWQsIDB4ZGUsIDB4YjcsIDB4MTAsIDB4NDEsIDB4MDQsIDB4NmYsIDB4OGIsIDB4ZTYsIDB4MWMsCisgIDB4ZDQsIDB4OTUsIDB4ODQsIDB4NDksIDB4NGYsIDB4OTEsIDB4NWMsIDB4YWYsIDB4ODQsIDB4NjksIDB4MjEsIDB4OTcsCisgIDB4NmIsIDB4M2YsIDB4ZDMsIDB4ZTcsIDB4ZWEsIDB4N2UsIDB4MjUsIDB4ZGQsIDB4Y2MsIDB4MjgsIDB4MjIsIDB4OTEsCisgIDB4MjcsIDB4MjgsIDB4ZGUsIDB4NjksIDB4NmMsIDB4MjYsIDB4YWIsIDB4OTgsIDB4MWMsIDB4Y2QsIDB4ODMsIDB4ODEsCisgIDB4ZmQsIDB4YjMsIDB4NTMsIDB4MGUsIDB4ODYsIDB4NDEsIDB4MWIsIDB4NmMsIDB4NDQsIDB4Y2QsIDB4MTIsIDB4YWUsCisgIDB4YzIsIDB4MGYsIDB4MzcsIDB4NDIsIDB4MDIsIDB4YWUsIDB4MDgsIDB4OGEsIDB4NTMsIDB4ZjYsIDB4OWMsIDB4ZTMsCisgIDB4YzUsIDB4NDEsIDB4YjEsIDB4NGEsIDB4MjIsIDB4MDQsIDB4NjgsIDB4NjAsIDB4YTAsIDB4NTIsIDB4OGIsIDB4OTYsCisgIDB4ZGMsIDB4YTcsIDB4NTgsIDB4ZTMsIDB4OTcsIDB4OTYsIDB4YTcsIDB4MmUsIDB4OWMsIDB4ZGUsIDB4ZWMsIDB4ZjcsCisgIDB4M2YsIDB4M2MsIDB4N2IsIDB4ZjMsIDB4ZWEsIDB4ZTQsIDB4MmIsIDB4YzcsIDB4N2UsIDB4MjMsIDB4NGEsIDB4ZGMsCisgIDB4NmEsIDB4NGIsIDB4YTIsIDB4NGQsIDB4ZjEsIDB4MjQsIDB4ODcsIDB4MDEsIDB4NmYsIDB4YWQsIDB4ZmMsIDB4YTYsCisgIDB4MTAsIDB4NWMsIDB4NTIsIDB4NGYsIDB4ZWYsIDB4YzIsIDB4MWYsIDB4NDAsIDB4ODEsIDB4NjQsIDB4NGYsIDB4ZDgsCisgIDB4NTcsIDB4MmUsIDB4MTQsIDB4MTMsIDB4ZTUsIDB4OTYsIDB4ZjcsIDB4M2MsIDB4MzQsIDB4ZjgsIDB4YjksIDB4MjQsCisgIDB4NTUsIDB4MjMsIDB4MmUsIDB4YWEsIDB4ZDUsIDB4ZDIsIDB4MjEsIDB4MDksIDB4ODMsIDB4Y2EsIDB4NzEsIDB4Y2EsCisgIDB4ZjYsIDB4NmIsIDB4MDksIDB4ZTIsIDB4YWIsIDB4YTUsIDB4YTgsIDB4MjYsIDB4Y2QsIDB4ZjMsIDB4YWMsIDB4MzksCisgIDB4NzYsIDB4ZTUsIDB4MGMsIDB4NjAsIDB4Y2YsIDB4ODIsIDB4NzIsIDB4NzIsIDB4ZTgsIDB4MDEsIDB4ZDAsIDB4ODIsCisgIDB4ZTcsIDB4Y2MsIDB4OTksIDB4MjMsIDB4MzAsIDB4MDQsIDB4Y2QsIDB4NWIsIDB4MjgsIDB4ODcsIDB4ZWIsIDB4ZWYsCisgIDB4Y2EsIDB4NDAsIDB4YWQsIDB4ZmEsIDB4ZWUsIDB4NDIsIDB4NmUsIDB4NjYsIDB4M2MsIDB4NmUsIDB4MTQsIDB4NGQsCisgIDB4NzUsIDB4OTgsIDB4MWMsIDB4MDcsIDB4MDEsIDB4ZjYsIDB4YTEsIDB4YTIsIDB4ZDIsIDB4NTUsIDB4ODEsIDB4NzUsCisgIDB4MzAsIDB4MjUsIDB4Y2IsIDB4MmUsIDB4OGQsIDB4MTEsIDB4YjEsIDB4NDQsIDB4YzgsIDB4MTMsIDB4M2YsIDB4NzksCisgIDB4YzksIDB4MTEsIDB4OWEsIDB4N2QsIDB4ZTYsIDB4YmMsIDB4NWUsIDB4MDgsIDB4ODcsIDB4NTYsIDB4OTgsIDB4MTUsCisgIDB4YWEsIDB4NWEsIDB4ZDIsIDB4NzMsIDB4NTMsIDB4YmIsIDB4NzIsIDB4ZWYsIDB4MjgsIDB4MTgsIDB4MGIsIDB4YjgsCisgIDB4YTAsIDB4MDksIDB4OWQsIDB4YjgsIDB4OGIsIDB4ZDksIDB4ZDcsIDB4ZDIsIDB4ZmYsIDB4NjMsIDB4N2YsIDB4NTgsCisgIDB4M2UsIDB4MmMsIDB4MjYsIDB4ZjksIDB4ZGMsIDB4YjIsIDB4MmYsIDB4MWMsIDB4ZjMsIDB4ODIsIDB4M2QsIDB4NTQsCisgIDB4MmIsIDB4ZTQsIDB4MjQsIDB4MDEsIDB4ZGIsIDB4MmEsIDB4ZjAsIDB4NTAsIDB4N2EsIDB4YzgsIDB4OTQsIDB4ZWYsCisgIDB4YmYsIDB4NTQsIDB4NDMsIDB4NDEsIDB4YTQsIDB4YzgsIDB4NDYsIDB4ZTEsIDB4NjgsIDB4NDAsIDB4OTIsIDB4NmMsCisgIDB4M2EsIDB4Y2YsIDB4NTUsIDB4YWEsIDB4MzksIDB4ZWYsIDB4MWIsIDB4MzMsIDB4NTUsIDB4MWYsIDB4M2EsIDB4YzcsCisgIDB4ZmUsIDB4ZjIsIDB4MTUsIDB4M2IsIDB4M2IsIDB4NTAsIDB4ZTksIDB4ODAsIDB4Y2MsIDB4MWQsIDB4NzYsIDB4MGUsCisgIDB4N2YsIDB4NjcsIDB4MDMsIDB4ZTQsIDB4YjcsIDB4ZTUsIDB4MTcsIDB4MGEsIDB4Y2QsIDB4MzcsIDB4ZmUsIDB4MTQsCisgIDB4NmEsIDB4NDgsIDB4NGEsIDB4MjMsIDB4NTAsIDB4NTcsIDB4ZmYsIDB4MjYsIDB4YmUsIDB4NDUsIDB4ODksIDB4MDAsCisgIDB4ZmUsIDB4NjAsIDB4MWYsIDB4YjcsIDB4NDcsIDB4MWIsIDB4NTMsIDB4NGYsIDB4ZjIsIDB4MTQsIDB4MTcsIDB4ZDcsCisgIDB4NGEsIDB4NGMsIDB4YTYsIDB4NDEsIDB4MzUsIDB4NWMsIDB4MTIsIDB4NWQsIDB4YzEsIDB4MGEsIDB4ZTcsIDB4YTMsCisgIDB4NjQsIDB4YTMsIDB4YzQsIDB4ODEsIDB4NjcsIDB4NjAsIDB4M2UsIDB4YWQsIDB4MjQsIDB4YzEsIDB4NGYsIDB4NTMsCisgIDB4YTEsIDB4YzQsIDB4M2IsIDB4ZTksIDB4MDQsIDB4MzEsIDB4ZDAsIDB4MzgsIDB4N2YsIDB4NzQsIDB4OTAsIDB4OTQsCisgIDB4ZDgsIDB4OWYsIDB4NjUsIDB4YzYsIDB4YTMsIDB4ZWYsIDB4NWQsIDB4YjUsIDB4N2EsIDB4OTgsIDB4MDUsIDB4YWYsCisgIDB4YjEsIDB4M2YsIDB4MGYsIDB4MzcsIDB4ZTEsIDB4NDQsIDB4N2QsIDB4MjgsIDB4ZjIsIDB4MjksIDB4ZDgsIDB4MTIsCisgIDB4Y2MsIDB4Y2EsIDB4ODcsIDB4MGMsIDB4YTAsIDB4YTQsIDB4ZjQsIDB4NGQsIDB4YzgsIDB4ZWYsIDB4NWYsIDB4MmEsCisgIDB4MGYsIDB4MDUsIDB4ZWQsIDB4NjcsIDB4NjUsIDB4MTYsIDB4NTEsIDB4YzYsIDB4YjQsIDB4Y2YsIDB4NzYsIDB4ZDQsCisgIDB4MTMsIDB4NTcsIDB4MjksIDB4NjYsIDB4YjUsIDB4OGMsIDB4MGUsIDB4MmUsIDB4OGUsIDB4YzksIDB4YjIsIDB4YmQsCisgIDB4Y2UsIDB4YzAsIDB4MWMsIDB4YzEsIDB4M2QsIDB4ZDQsIDB4NGEsIDB4NTMsIDB4OTksIDB4NTYsIDB4ZWMsIDB4YzksCisgIDB4NmMsIDB4N2YsIDB4ZjAsIDB4MDcsIDB4ZWYsIDB4ODMsIDB4MzcsIDB4NTksIDB4OTgsIDB4MTQsIDB4MWYsIDB4MjAsCisgIDB4NjksIDB4ZDUsIDB4NWUsIDB4ZTQsIDB4YTYsIDB4YzYsIDB4NWUsIDB4MGEsIDB4YWQsIDB4YzMsIDB4ZTQsIDB4MDUsCisgIDB4MjIsIDB4NTIsIDB4MWMsIDB4MmQsIDB4YTEsIDB4NGYsIDB4ZTUsIDB4YzYsIDB4NWMsIDB4N2EsIDB4ZGUsIDB4NTIsCisgIDB4ZWIsIDB4MjEsIDB4NjUsIDB4YTksIDB4Y2QsIDB4MzUsIDB4NzYsIDB4YjUsIDB4Y2YsIDB4NDcsIDB4ZjgsIDB4ODcsCisgIDB4OTEsIDB4MTEsIDB4ZWEsIDB4YjcsIDB4NmEsIDB4MTEsIDB4NTAsIDB4MmYsIDB4NGUsIDB4ODMsIDB4NmUsIDB4ZWYsCisgIDB4ZDEsIDB4M2YsIDB4NzAsIDB4Y2UsIDB4YjAsIDB4MmQsIDB4ZDIsIDB4YjQsIDB4MGIsIDB4MTIsIDB4MDcsIDB4YjMsCisgIDB4MTcsIDB4NDcsIDB4ZjYsIDB4MmMsIDB4MzAsIDB4N2UsIDB4MjUsIDB4MzcsIDB4MGYsIDB4MjUsIDB4YTAsIDB4ZTEsCisgIDB4YTMsIDB4NjYsIDB4ZTMsIDB4MjcsIDB4MmUsIDB4MzUsIDB4MGYsIDB4NGEsIDB4YWYsIDB4MDMsIDB4MzMsIDB4ZGQsCisgIDB4YWIsIDB4MmMsIDB4MTUsIDB4OGMsIDB4MTksIDB4OWUsIDB4MzAsIDB4MWIsIDB4Y2YsIDB4YWQsIDB4MTgsIDB4MDAsCisgIDB4YTEsIDB4N2UsIDB4ZWEsIDB4NzQsIDB4ZjMsIDB4ZmUsIDB4ZDEsIDB4OGQsIDB4ZDYsIDB4ZjcsIDB4YzEsIDB4ZmQsCisgIDB4OTIsIDB4N2YsIDB4ZjQsIDB4ZDIsIDB4OTEsIDB4OTMsIDB4YTEsIDB4OTQsIDB4MzUsIDB4N2YsIDB4MDgsIDB4MmEsCisgIDB4MTUsIDB4ZTEsIDB4NTMsIDB4ZmUsIDB4MGIsIDB4N2UsIDB4MGMsIDB4ZjAsIDB4OWIsIDB4NTEsIDB4M2MsIDB4ZDYsCisgIDB4MDgsIDB4ODYsIDB4YjQsIDB4NDYsIDB4NDcsIDB4ZDgsIDB4MTEsIDB4ODksIDB4ZjEsIDB4NDEsIDB4NDMsIDB4NGYsCisgIDB4NDIsIDB4ZDMsIDB4NzgsIDB4ZjgsIDB4Y2QsIDB4YjYsIDB4MTUsIDB4ZGQsIDB4NjQsIDB4NTcsIDB4MGUsIDB4NjcsCisgIDB4ZjMsIDB4ZGEsIDB4ODYsIDB4MmYsIDB4OTMsIDB4NWEsIDB4OTUsIDB4NGUsIDB4OTcsIDB4MmUsIDB4ZDQsIDB4MWIsCisgIDB4ZjYsIDB4NjgsIDB4MmUsIDB4ZmEsIDB4ZjMsIDB4YjksIDB4NTcsIDB4ZjgsIDB4ZjYsIDB4MTgsIDB4YWYsIDB4MmEsCisgIDB4MzIsIDB4ZWIsIDB4YmMsIDB4YzEsIDB4YTQsIDB4YmEsIDB4OGIsIDB4ZTksIDB4ZmYsIDB4MWYsIDB4NmEsIDB4NzksCisgIDB4MGUsIDB4NWMsIDB4M2YsIDB4ODksIDB4ZDMsIDB4ODAsIDB4MWMsIDB4NDEsIDB4MTQsIDB4NzIsIDB4NDUsIDB4MDAsCisgIDB4MTcsIDB4YjgsIDB4NGIsIDB4NGIsIDB4OGIsIDB4NDMsIDB4OTIsIDB4NmMsIDB4NGYsIDB4MTUsIDB4MWIsIDB4MjEsCisgIDB4M2MsIDB4MDEsIDB4NDksIDB4MzUsIDB4MGQsIDB4YTYsIDB4MzIsIDB4OTksIDB4ZGUsIDB4ZTQsIDB4MDIsIDB4YWQsCisgIDB4YTUsIDB4NDksIDB4MGIsIDB4NTIsIDB4MzAsIDB4N2IsIDB4ZDEsIDB4ZmYsIDB4NTQsIDB4MTksIDB4ZjgsIDB4YzYsCisgIDB4NjcsIDB4ZWUsIDB4YjEsIDB4MjAsIDB4OGMsIDB4ODQsIDB4N2EsIDB4NmYsIDB4ZTQsIDB4MDUsIDB4ZTIsIDB4ZjgsCisgIDB4ZmIsIDB4Y2IsIDB4OGIsIDB4ODMsIDB4ZTgsIDB4ZWIsIDB4ZTMsIDB4ODMsIDB4YTMsIDB4ZTMsIDB4OGIsIDB4NzEsCisgIDB4ZTMsIDB4ZDAsIDB4NTcsIDB4MTQsIDB4ODgsIDB4NTgsIDB4NjgsIDB4ZWMsIDB4MGYsIDB4ODYsIDB4NjksIDB4NmMsCisgIDB4N2MsIDB4MDAsIDB4MGEsIDB4ZGUsIDB4MzcsIDB4YWQsIDB4NDcsIDB4YzIsIDB4YzMsIDB4MWIsIDB4ODksIDB4ZjYsCisgIDB4MDcsIDB4NWYsIDB4ODgsIDB4MjQsIDB4NzAsIDB4MDAsIDB4OWEsIDB4ZDUsIDB4MTIsIDB4Y2EsIDB4YzYsIDB4YjUsCisgIDB4MzEsIDB4MjUsIDB4MGQsIDB4YzUsIDB4NzAsIDB4MDYsIDB4ZjMsIDB4OWUsIDB4ODcsIDB4NjksIDB4MzMsIDB4OWUsCisgIDB4ZjMsIDB4Y2QsIDB4MWYsIDB4MjYsIDB4YjMsIDB4ZGMsIDB4MzIsIDB4MDIsIDB4ZWIsIDB4MmIsIDB4ZjcsIDB4YjUsCisgIDB4NGYsIDB4YmUsIDB4MGUsIDB4ZDQsIDB4OTYsIDB4MWUsIDB4MzIsIDB4ZWEsIDB4NDAsIDB4ZWMsIDB4N2QsIDB4M2YsCisgIDB4YTQsIDB4ZWYsIDB4MGUsIDB4NjksIDB4ZjIsIDB4ODcsIDB4NGMsIDB4Y2IsIDB4ZjcsIDB4OTAsIDB4OTQsIDB4YmQsCisgIDB4ODYsIDB4MzcsIDB4YjAsIDB4ZmUsIDB4ZjksIDB4MGQsIDB4YTksIDB4MTksIDB4ZDMsIDB4ZGEsIDB4NDksIDB4NWYsCisgIDB4NzcsIDB4YjYsIDB4YzQsIDB4YmIsIDB4NmIsIDB4Y2UsIDB4OTUsIDB4NWMsIDB4OWEsIDB4MzcsIDB4MDgsIDB4MWMsCisgIDB4YWEsIDB4ODEsIDB4OTEsIDB4YWMsIDB4M2IsIDB4YTgsIDB4OTUsIDB4ZTMsIDB4YTIsIDB4MzgsIDB4MjUsIDB4N2YsCisgIDB4Y2QsIDB4NTQsIDB4NTgsIDB4MTgsIDB4M2EsIDB4YTIsIDB4NDMsIDB4ODAsIDB4YWQsIDB4NDMsIDB4N2IsIDB4NGYsCisgIDB4MGUsIDB4NzUsIDB4ZjgsIDB4NDUsIDB4OGMsIDB4MzMsIDB4OTYsIDB4YmEsIDB4YTUsIDB4MGYsIDB4ODUsIDB4ZTcsCisgIDB4MDMsIDB4NjIsIDB4MjEsIDB4MGEsIDB4ZDYsIDB4MmYsIDB4NmIsIDB4YTEsIDB4NTIsIDB4ZjUsIDB4OGIsIDB4MmEsCisgIDB4NTksIDB4YjAsIDB4MzYsIDB4YzcsIDB4N2QsIDB4NzAsIDB4MzIsIDB4NmYsIDB4MTgsIDB4N2YsIDB4ZmUsIDB4YTQsCisgIDB4ZDUsIDB4MzEsIDB4ZDAsIDB4NzcsIDB4MDUsIDB4MGMsIDB4YzYsIDB4OTcsIDB4N2EsIDB4YjgsIDB4M2EsIDB4YTUsCisgIDB4MjAsIDB4YTIsIDB4NTQsIDB4NDUsIDB4MTMsIDB4YzUsIDB4MTYsIDB4MjQsIDB4MDQsIDB4ODUsIDB4YzIsIDB4OGMsCisgIDB4YTIsIDB4NGIsIDB4MDAsIDB4OTEsIDB4YmIsIDB4ZTcsIDB4OTIsIDB4ZTgsIDB4ZWIsIDB4YmMsIDB4YzQsIDB4NTksCisgIDB4ZDAsIDB4N2UsIDB4OWMsIDB4MGYsIDB4ZjksIDB4YWUsIDB4ZTksIDB4YzcsIDB4MWIsIDB4MWEsIDB4ZWEsIDB4NzIsCisgIDB4YmMsIDB4OTgsIDB4MjAsIDB4OTIsIDB4ODUsIDB4ZmEsIDB4M2EsIDB4M2YsIDB4YjgsIDB4ZmMsIDB4MWEsIDB4ODEsCisgIDB4NTYsIDB4ODgsIDB4ZjAsIDB4MTEsIDB4ODgsIDB4NGMsIDB4MmMsIDB4YmMsIDB4ZDYsIDB4Y2UsIDB4Y2IsIDB4NzIsCisgIDB4MTcsIDB4MzgsIDB4YjEsIDB4N2YsIDB4OGQsIDB4ZTAsIDB4Y2YsIDB4ZWMsIDB4NDksIDB4MDQsIDB4ZjIsIDB4ZTAsCisgIDB4YTIsIDB4MDQsIDB4NWYsIDB4NTgsIDB4YWEsIDB4OGUsIDB4YzcsIDB4N2EsIDB4MjEsIDB4MzAsIDB4MjAsIDB4ZTAsCisgIDB4NWQsIDB4ZDIsIDB4OWQsIDB4ODMsIDB4NWQsIDB4ZjYsIDB4MjUsIDB4MmIsIDB4YmQsIDB4MmYsIDB4NjMsIDB4ODIsCisgIDB4ZDAsIDB4YjMsIDB4MzEsIDB4YzcsIDB4MzcsIDB4OWUsIDB4OTAsIDB4NmUsIDB4MTUsIDB4YmYsIDB4YjgsIDB4ZDIsCisgIDB4NzQsIDB4ZGIsIDB4MDEsIDB4YWQsIDB4NjksIDB4MzcsIDB4N2YsIDB4NWUsIDB4YjAsIDB4YTUsIDB4YmYsIDB4NTgsCisgIDB4M2MsIDB4OGMsIDB4ZGEsIDB4YjQsIDB4MzgsIDB4ZDEsIDB4OTcsIDB4YWIsIDB4YWEsIDB4YWUsIDB4NTYsIDB4MWEsCisgIDB4YTQsIDB4YWYsIDB4Y2UsIDB4YjIsIDB4MmMsIDB4ZjIsIDB4YmMsIDB4YWEsIDB4ZDMsIDB4YTYsIDB4NjIsIDB4NzYsCisgIDB4NjQsIDB4NDcsIDB4MGIsIDB4NTEsIDB4YTIsIDB4ZjQsIDB4ODUsIDB4OWIsIDB4Y2EsIDB4ZDQsIDB4ZWUsIDB4MGUsCisgIDB4MGQsIDB4YzMsIDB4NzgsIDB4NTIsIDB4ZTYsIDB4ZjMsIDB4NTUsIDB4MTUsIDB4ODAsIDB4YjAsIDB4N2YsIDB4NTksCisgIDB4OWYsIDB4ODMsIDB4NGUsIDB4NmYsIDB4OWUsIDB4OGMsIDB4MTIsIDB4MTMsIDB4MjgsIDB4NDYsIDB4MTEsIDB4MTcsCisgIDB4MzEsIDB4ZGQsIDB4ZjQsIDB4YzksIDB4YmMsIDB4NDQsIDB4ZGMsIDB4YjEsIDB4YzgsIDB4YjMsIDB4N2EsIDB4YjUsCisgIDB4MmEsIDB4ZTAsIDB4YmQsIDB4YjcsIDB4MzYsIDB4MzYsIDB4YzYsIDB4YjYsIDB4ZDgsIDB4Y2MsIDB4ZDAsIDB4ZDksCisgIDB4NWUsIDB4NzQsIDB4NzAsIDB4NDYsIDB4ODAsIDB4MDYsIDB4NTQsIDB4ZTIsIDB4MDYsIDB4NTMsIDB4ZmEsIDB4OGIsCisgIDB4OTEsIDB4YTYsIDB4MjUsIDB4YjIsIDB4YTYsIDB4NTAsIDB4ZTEsIDB4YjIsIDB4YzYsIDB4NjksIDB4NTksIDB4MWYsCisgIDB4MTQsIDB4N2UsIDB4ZTUsIDB4MjIsIDB4MTcsIDB4OTYsIDB4NjQsIDB4NzYsIDB4OTksIDB4MWIsIDB4NzMsIDB4YjgsCisgIDB4NDYsIDB4ZWUsIDB4YmMsIDB4NDAsIDB4ZDQsIDB4ZDIsIDB4ZDQsIDB4M2IsIDB4NjksIDB4NzUsIDB4ZjksIDB4MTAsCisgIDB4YjAsIDB4ZDIsIDB4YTYsIDB4MGUsIDB4OTUsIDB4Y2IsIDB4OWQsIDB4ZGMsIDB4ZmUsIDB4NWYsIDB4ZGIsIDB4ZDEsCisgIDB4NDAsIDB4YjgsIDB4YjAsIDB4M2EsIDB4YjgsIDB4NzQsIDB4NTYsIDB4ZDEsIDB4ZmYsIDB4MDMsIDB4MDgsIDB4OTYsCisgIDB4MzIsIDB4OWEsIDB4NzIsIDB4OWIsIDB4MGQsIDB4MWEsIDB4ZDAsIDB4MTEsIDB4NWQsIDB4YTEsIDB4NmUsIDB4OGEsCisgIDB4YTksIDB4OTcsIDB4N2UsIDB4YjIsIDB4MGUsIDB4OTIsIDB4N2IsIDB4YmUsIDB4YmYsIDB4ZDgsIDB4MWQsIDB4NDEsCisgIDB4NTksIDB4M2MsIDB4YTQsIDB4YmEsIDB4YTgsIDB4ZTMsIDB4NDUsIDB4MDIsIDB4ZjcsIDB4YzUsIDB4OTUsIDB4ZjMsCisgIDB4ZWEsIDB4NzEsIDB4YTEsIDB4M2YsIDB4YTksIDB4N2EsIDB4MjcsIDB4NjYsIDB4M2QsIDB4OGEsIDB4YmUsIDB4NTgsCisgIDB4MDQsIDB4NTUsIDB4NTIsIDB4ZGQsIDB4ZGQsIDB4YmQsIDB4YmQsIDB4OGMsIDB4Y2EsIDB4NWMsIDB4ZmUsIDB4NmIsCisgIDB4OTksIDB4NDcsIDB4OGEsIDB4ZjEsIDB4NTIsIDB4ZjEsIDB4ZDcsIDB4NmIsIDB4OTQsIDB4NTYsIDB4MmMsIDB4NTIsCisgIDB4OGEsIDB4MmIsIDB4YzMsIDB4OWQsIDB4MGEsIDB4YWMsIDB4Y2UsIDB4MDIsIDB4OTMsIDB4ZDYsIDB4NDcsIDB4MzMsCisgIDB4MDIsIDB4MzgsIDB4NmUsIDB4NzksIDB4YTUsIDB4YzUsIDB4ZTEsIDB4YjEsIDB4MmMsIDB4NzksIDB4MDQsIDB4YmUsCisgIDB4NTYsIDB4NDksIDB4ZGMsIDB4ZTYsIDB4MmEsIDB4NzEsIDB4NzYsIDB4OTEsIDB4YjEsIDB4MTMsIDB4ZDUsIDB4OTIsCisgIDB4MzksIDB4MzYsIDB4YzIsIDB4OWEsIDB4YmQsIDB4ZDIsIDB4N2IsIDB4M2QsIDB4ZmEsIDB4OTEsIDB4MWMsIDB4OGYsCisgIDB4MTgsIDB4ZGQsIDB4N2QsIDB4OWMsIDB4NTYsIDB4YTEsIDB4NDUsIDB4NjAsIDB4MjMsIDB4ZDIsIDB4M2EsIDB4OTMsCisgIDB4MDIsIDB4ZTMsIDB4MDgsIDB4YTEsIDB4MjksIDB4MWUsIDB4YjcsIDB4NzksIDB4Y2QsIDB4YjksIDB4MWUsIDB4ZWEsCisgIDB4OTEsIDB4NTIsIDB4NWUsIDB4MTEsIDB4YjgsIDB4YmYsIDB4NmUsIDB4NTIsIDB4NDUsIDB4OTcsIDB4Y2EsIDB4YTQsCisgIDB4OWIsIDB4M2IsIDB4OTAsIDB4ZmQsIDB4MTksIDB4NzAsIDB4ZWYsIDB4MzEsIDB4YjQsIDB4YzAsIDB4NDcsIDB4NTcsCisgIDB4MWQsIDB4MDAsIDB4NjIsIDB4ZDQsIDB4ZGUsIDB4MmQsIDB4MjMsIDB4NDcsIDB4Y2QsIDB4YTksIDB4MjcsIDB4YzgsCisgIDB4NDksIDB4OTgsIDB4NTUsIDB4OGUsIDB4NTksIDB4NzEsIDB4NzAsIDB4ZTcsIDB4OGYsIDB4ZmEsIDB4NzQsIDB4ZjgsCisgIDB4M2QsIDB4NDYsIDB4YjEsIDB4NjYsIDB4OTEsIDB4OWYsIDB4OGYsIDB4NTIsIDB4MGIsIDB4YzcsIDB4ZWYsIDB4ZTIsCisgIDB4NGEsIDB4MmEsIDB4YzAsIDB4MGQsIDB4MzAsIDB4NWQsIDB4NWEsIDB4MDEsIDB4NDIsIDB4ZTMsIDB4MmYsIDB4NmIsCisgIDB4Y2UsIDB4ZmIsIDB4ZDYsIDB4NDAsIDB4MjcsIDB4YzgsIDB4MjUsIDB4ZGMsIDB4NmIsIDB4OWMsIDB4NTksIDB4MmMsCisgIDB4YzIsIDB4MjAsIDB4ZTIsIDB4NTQsIDB4MmIsIDB4NTQsIDB4MjUsIDB4NDksIDB4ZGMsIDB4NjUsIDB4NTUsIDB4YWMsCisgIDB4YTYsIDB4MzUsIDB4NTYsIDB4M2IsIDB4MDgsIDB4NDMsIDB4MmQsIDB4M2UsIDB4ZWYsIDB4YTYsIDB4MzcsIDB4MGYsCisgIDB4NmYsIDB4ZjUsIDB4OWIsIDB4NzEsIDB4MmQsIDB4YTUsIDB4NDUsIDB4OWYsIDB4MGMsIDB4M2YsIDB4YjEsIDB4MTUsCisgIDB4OWQsIDB4MzAsIDB4OGQsIDB4YjgsIDB4NWMsIDB4ZmYsIDB4ZTUsIDB4NzYsIDB4NDIsIDB4ZmQsIDB4NzcsIDB4MDIsCisgIDB4MzYsIDB4M2MsIDB4NzcsIDB4MDksIDB4ZjUsIDB4OGQsIDB4NGEsIDB4ZDQsIDB4OWMsIDB4OWUsIDB4MTAsIDB4OWMsCisgIDB4YmEsIDB4NmEsIDB4ODIsIDB4YzEsIDB4ZTQsIDB4MjgsIDB4MjIsIDB4YTUsIDB4MjksIDB4ODQsIDB4NDEsIDB4YzMsCisgIDB4Y2UsIDB4Y2EsIDB4MGQsIDB4NDcsIDB4MjUsIDB4NDgsIDB4OWYsIDB4MWIsIDB4MmEsIDB4NTgsIDB4NTUsIDB4NDIsCisgIDB4YzAsIDB4ZGIsIDB4MzQsIDB4OTEsIDB4NTYsIDB4ODksIDB4YzQsIDB4OTUsIDB4ZTAsIDB4MjksIDB4M2QsIDB4MWQsCisgIDB4NjEsIDB4MDMsIDB4YWIsIDB4MGEsIDB4Y2UsIDB4MjQsIDB4NjcsIDB4MTksIDB4MmEsIDB4NzksIDB4OWIsIDB4Y2UsCisgIDB4ZGYsIDB4YzgsIDB4NTUsIDB4ODYsIDB4ZDcsIDB4MmYsIDB4MzQsIDB4MGQsIDB4ODksIDB4ZjYsIDB4YTksIDB4NzgsCisgIDB4MmUsIDB4OGMsIDB4MjQsIDB4MmQsIDB4MjEsIDB4M2EsIDB4MzIsIDB4NmYsIDB4MmEsIDB4OTQsIDB4MGQsIDB4MjYsCisgIDB4OGMsIDB4ZWYsIDB4MzQsIDB4YjYsIDB4NDgsIDB4MjcsIDB4ZTcsIDB4ZWUsIDB4MTMsIDB4ZDQsIDB4MDUsIDB4MWUsCisgIDB4NzEsIDB4N2YsIDB4OWUsIDB4ZWMsIDB4ZjQsIDB4ODMsIDB4MWEsIDB4NDIsIDB4OWIsIDB4ODIsIDB4ZmEsIDB4Y2YsCisgIDB4NzEsIDB4ZWYsIDB4NjEsIDB4Y2YsIDB4MjEsIDB4MDYsIDB4MjgsIDB4N2UsIDB4MGIsIDB4NDYsIDB4YjgsIDB4NmQsCisgIDB4NzUsIDB4NzQsIDB4ODUsIDB4OWEsIDB4ZjgsIDB4YTUsIDB4OWQsIDB4ZDksIDB4N2QsIDB4YmUsIDB4MzcsIDB4ZGEsCisgIDB4ZmQsIDB4ZTQsIDB4YjMsIDB4ZDEsIDB4Y2UsIDB4NjgsIDB4NzcsIDB4ODcsIDB4MzUsIDB4MGIsIDB4NzcsIDB4MjUsCisgIDB4ZTgsIDB4OWMsIDB4Y2MsIDB4NGIsIDB4YzcsIDB4YTcsIDB4NmEsIDB4ZWYsIDB4YjUsIDB4YmYsIDB4ZjksIDB4ZTYsCisgIDB4ZjgsIDB4ZjIsIDB4YmIsIDB4YjMsIDB4OGIsIDB4NmYsIDB4YTIsIDB4OTMsIDB4MzcsIDB4OTcsIDB4YzcsIDB4MTcsCisgIDB4YWYsIDB4MGUsIDB4MGUsIDB4M2YsIDB4OTYsIDB4OWYsIDB4M2MsIDB4NzQsIDB4NTgsIDB4MDcsIDB4NjUsIDB4NzQsCisgIDB4MTMsIDB4M2YsIDB4MzEsIDB4NmQsIDB4YWYsIDB4YTAsIDB4OWYsIDB4YjMsIDB4YTQsIDB4YmEsIDB4ZDksIDB4ZDksCisgIDB4ZGYsIDB4N2QsIDB4OTQsIDB4ZDQsIDB4YjgsIDB4YzMsIDB4MzEsIDB4ZTgsIDB4ZGYsIDB4YjcsIDB4NDEsIDB4ZWQsCisgIDB4ZjIsIDB4YTAsIDB4ZDYsIDB4YjcsIDB4ZTIsIDB4YTgsIDB4MTIsIDB4YzcsIDB4MDIsIDB4YjAsIDB4NzIsIDB4ZTAsCisgIDB4NWMsIDB4MjgsIDB4NzgsIDB4NTQsIDB4NjksIDB4NDksIDB4MjcsIDB4NDUsIDB4NmMsIDB4MmUsIDB4YTksIDB4ODksCisgIDB4MzAsIDB4YWIsIDB4NGEsIDB4NzYsIDB4YWQsIDB4NzIsIDB4YmQsIDB4MjgsIDB4MDgsIDB4NWQsIDB4ZDUsIDB4ZWQsCisgIDB4ODYsIDB4OTQsIDB4YWMsIDB4YWQsIDB4ZDQsIDB4OTEsIDB4MjIsIDB4NDQsIDB4YTksIDB4MzMsIDB4MTgsIDB4NzcsCisgIDB4YTYsIDB4OTAsIDB4MzUsIDB4NzksIDB4OGQsIDB4YTUsIDB4NDUsIDB4YWIsIDB4MjgsIDB4MGEsIDB4MDEsIDB4ZTAsCisgIDB4Y2MsIDB4MjUsIDB4OGEsIDB4MzgsIDB4MTIsIDB4MDIsIDB4ZTAsIDB4MWYsIDB4Y2MsIDB4NDIsIDB4NDcsIDB4NWYsCisgIDB4ZWIsIDB4NTUsIDB4ODcsIDB4NDMsIDB4MGMsIDB4NmQsIDB4ODMsIDB4YTUsIDB4YjQsIDB4MzQsIDB4NmMsIDB4MzMsCisgIDB4MDYsIDB4NTYsIDB4NzMsIDB4OGEsIDB4MWUsIDB4NmEsIDB4NDcsIDB4YjAsIDB4MWIsIDB4ODIsIDB4ZGUsIDB4YzgsCisgIDB4YTcsIDB4NjAsIDB4NGEsIDB4MTksIDB4MzMsIDB4NzYsIDB4OWQsIDB4NjMsIDB4NTcsIDB4NGUsIDB4MjcsIDB4MjQsCisgIDB4NGYsIDB4ODgsIDB4ZTUsIDB4NjcsIDB4MjQsIDB4ZmUsIDB4ZGMsIDB4N2EsIDB4NTksIDB4NjMsIDB4MGQsIDB4OGMsCisgIDB4YTQsIDB4NzIsIDB4NGUsIDB4ZjgsIDB4YmEsIDB4MTgsIDB4ZDksIDB4ODAsIDB4NjgsIDB4Y2UsIDB4OGEsIDB4ZjgsCisgIDB4MWUsIDB4ZTUsIDB4MWYsIDB4NTIsIDB4Y2YsIDB4ZDIsIDB4YjksIDB4MTEsIDB4ZDUsIDB4Y2EsIDB4ZmYsIDB4YjAsCisgIDB4YzksIDB4ZTQsIDB4ZTcsIDB4M2MsIDB4M2EsIDB4M2YsIDB4N2UsIDB4M2QsIDB4YjQsIDB4YTIsIDB4YTUsIDB4ZjQsCisgIDB4NzcsIDB4NzEsIDB4NDMsIDB4MTksIDB4ZGYsIDB4YTMsIDB4MjQsIDB4ZjcsIDB4MmMsIDB4OTMsIDB4Y2MsIDB4MDAsCisgIDB4MzUsIDB4ZDAsIDB4ODksIDB4OGEsIDB4MDAsIDB4MGEsIDB4MDcsIDB4YzAsIDB4OWIsIDB4YzYsIDB4MzEsIDB4NDIsCisgIDB4MmEsIDB4NmUsIDB4ZDQsIDB4ODAsIDB4OTcsIDB4OGUsIDB4NTUsIDB4YjQsIDB4NDYsIDB4OTMsIDB4YzksIDB4ZWIsCisgIDB4YTksIDB4YTgsIDB4ZTUsIDB4NjgsIDB4ZDMsIDB4MjEsIDB4NzUsIDB4ZjksIDB4N2IsIDB4ODAsIDB4YTMsIDB4MDIsCisgIDB4MmQsIDB4ZTAsIDB4MDAsIDB4MDIsIDB4YjksIDB4MjUsIDB4NWUsIDB4OWYsIDB4N2YsIDB4NzMsIDB4MzgsIDB4ZmUsCisgIDB4ZTMsIDB4ZWUsIDB4OWUsIDB4NzYsIDB4NjcsIDB4NmIsIDB4ZTQsIDB4MzksIDB4NmYsIDB4NWIsIDB4MzksIDB4ZjksCisgIDB4NTAsIDB4ZDcsIDB4NjEsIDB4MWYsIDB4MmQsIDB4YzMsIDB4MWEsIDB4MWIsIDB4MWMsIDB4OGIsIDB4YjEsIDB4ZTksCisgIDB4MzIsIDB4ODMsIDB4YjYsIDB4NmEsIDB4YTksIDB4NDEsIDB4MWIsIDB4NTIsIDB4M2IsIDB4ZGIsIDB4OGMsIDB4NGIsCisgIDB4NTcsIDB4NTgsIDB4OTQsIDB4ODMsIDB4MjEsIDB4MjgsIDB4M2YsIDB4YTMsIDB4MDUsIDB4NjAsIDB4MmEsIDB4ODcsCisgIDB4ZjcsIDB4OGIsIDB4MzMsIDB4ZmIsIDB4OTEsIDB4YjQsIDB4YWMsIDB4YWQsIDB4MjEsIDB4ODUsIDB4ZGMsIDB4NjMsCisgIDB4NWEsIDB4OWEsIDB4NmIsIDB4Y2UsIDB4ZjMsIDB4ZWQsIDB4N2YsIDB4Y2IsIDB4ZDQsIDB4YWEsIDB4N2EsIDB4YTgsCisgIDB4MWIsIDB4NDcsIDB4OGYsIDB4ZmYsIDB4MGMsIDB4MzYsIDB4ODAsIDB4NDIsIDB4ZDgsIDB4NjcsIDB4NTYsIDB4NjIsCisgIDB4MmEsIDB4ZjMsIDB4NTUsIDB4MWYsIDB4ZjgsIDB4ZTksIDB4MzMsIDB4NWEsIDB4MjgsIDB4ZGEsIDB4NTksIDB4NDIsCisgIDB4ZGIsIDB4YzAsIDB4NGEsIDB4MjEsIDB4OWYsIDB4ZjMsIDB4YTUsIDB4YzUsIDB4M2QsIDB4NzIsIDB4NTQsIDB4NzAsCisgIDB4NzksIDB4OGQsIDB4YTUsIDB4ODAsIDB4NDksIDB4ZGYsIDB4OGMsIDB4YTIsIDB4YWYsIDB4OTMsIDB4OGMsIDB4ZjMsCisgIDB4ZTYsIDB4MTksIDB4NzYsIDB4NjcsIDB4YzksIDB4NTcsIDB4MDAsIDB4MDcsIDB4NzIsIDB4OGQsIDB4M2IsIDB4ZDQsCisgIDB4ZmMsIDB4M2EsIDB4NGQsIDB4NjIsIDB4ZTUsIDB4YzgsIDB4MjQsIDB4NWQsIDB4NTcsIDB4Y2EsIDB4ZGQsIDB4ZDYsCisgIDB4ZWEsIDB4ZGQsIDB4YzQsIDB4MGMsIDB4ZDEsIDB4NTMsIDB4NDIsIDB4NGYsIDB4YzcsIDB4NzUsIDB4YzEsIDB4MGYsCisgIDB4NDgsIDB4MDMsIDB4OWIsIDB4NzUsIDB4YTYsIDB4NGIsIDB4ZjAsIDB4ZDcsIDB4YTMsIDB4MzksIDB4ZGQsIDB4ZTYsCisgIDB4ODgsIDB4MzIsIDB4YTksIDB4M2YsIDB4ZjksIDB4MDYsIDB4ODQsIDB4Y2MsIDB4ZWMsIDB4MjcsIDB4OTQsIDB4YmIsCisgIDB4OTYsIDB4NTcsIDB4MmEsIDB4YjMsIDB4ZTIsIDB4ODYsIDB4OWQsIDB4MWUsIDB4MjUsIDB4MWQsIDB4MzcsIDB4NzEsCisgIDB4MzYsIDB4N2QsIDB4MTgsIDB4Y2QsIDB4YzgsIDB4OGEsIDB4NjUsIDB4YjcsIDB4ZDksIDB4NjgsIDB4NzUsIDB4YmIsCisgIDB4MWQsIDB4NmMsIDB4NTMsIDB4NTYsIDB4ZjksIDB4MzcsIDB4NDIsIDB4MTEsIDB4NTAsIDB4NzcsIDB4NzksIDB4NWIsCisgIDB4MzEsIDB4ZDUsIDB4MzYsIDB4ODMsIDB4NTcsIDB4NWMsIDB4ZGIsIDB4MTMsIDB4MmMsIDB4MTIsIDB4OTYsIDB4ZWMsCisgIDB4MmYsIDB4ZGIsIDB4NzMsIDB4MmQsIDB4ZDcsIDB4ZDUsIDB4NzEsIDB4ZTQsIDB4YjgsIDB4ODAsIDB4YjksIDB4ODUsCisgIDB4ZDEsIDB4MzIsIDB4NTksIDB4ZWMsIDB4YmIsIDB4NzQsIDB4NjQsIDB4ZDMsIDB4MGYsIDB4NWEsIDB4NDIsIDB4YzAsCisgIDB4NWQsIDB4MjksIDB4MDIsIDB4ZjcsIDB4NmMsIDB4OTYsIDB4NWMsIDB4Y2YsIDB4ZDUsIDB4YTAsIDB4MDgsIDB4MmYsCisgIDB4MmQsIDB4OWUsIDB4ZGIsIDB4YjksIDB4OWQsIDB4MDYsIDB4MjIsIDB4NTcsIDB4OWQsIDB4N2IsIDB4YTEsIDB4NTgsCisgIDB4ODUsIDB4YWQsIDB4NGUsIDB4NzIsIDB4NTgsIDB4MjksIDB4YWUsIDB4NTYsIDB4MWUsIDB4NDYsIDB4NDEsIDB4NzMsCisgIDB4ZGYsIDB4ODgsIDB4MTIsIDB4ODcsIDB4ODAsIDB4OTYsIDB4MTgsIDB4ODUsIDB4YWIsIDB4YzUsIDB4YjksIDB4NjMsCisgIDB4NzAsIDB4MjQsIDB4MGQsIDB4M2MsIDB4MzEsIDB4MzEsIDB4MmIsIDB4MjQsIDB4MDQsIDB4NDQsIDB4ZTAsIDB4MGEsCisgIDB4OGQsIDB4NDYsIDB4ZDgsIDB4ZDMsIDB4NmEsIDB4OTYsIDB4Y2EsIDB4NWUsIDB4YTEsIDB4NWYsIDB4ZGYsIDB4M2QsCisgIDB4NjEsIDB4NWYsIDB4ZjcsIDB4ZTUsIDB4ZTksIDB4NzgsIDB4MjAsIDB4ZjIsIDB4OTAsIDB4MjUsIDB4ZjcsIDB4ODEsCisgIDB4NjQsIDB4MDksIDB4NzcsIDB4YmQsIDB4OGEsIDB4MWYsIDB4N2IsIDB4N2UsIDB4MDQsIDB4YmUsIDB4NjYsIDB4ZTUsCisgIDB4ZTMsIDB4MGIsIDB4ZTksIDB4OGQsIDB4NjgsIDB4MDYsIDB4MWYsIDB4MjQsIDB4ZjMsIDB4NTksIDB4MTAsIDB4MzYsCisgIDB4MTEsIDB4OGEsIDB4MjcsIDB4ZTYsIDB4ZWUsIDB4NTgsIDB4NzksIDB4MjUsIDB4MzEsIDB4ODgsIDB4MWMsIDB4ZDksCisgIDB4MGIsIDB4ZDMsIDB4ZTgsIDB4OTEsIDB4YzEsIDB4ZjQsIDB4NjQsIDB4MTAsIDB4MGQsIDB4ZjcsIDB4NDAsIDB4YTEsCisgIDB4YjMsIDB4NWIsIDB4OWYsIDB4YzgsIDB4YjgsIDB4MTIsIDB4ZWUsIDB4M2UsIDB4NmUsIDB4ODMsIDB4NWEsIDB4YjIsCisgIDB4NTYsIDB4NTQsIDB4MjUsIDB4NmMsIDB4YWEsIDB4NTgsIDB4ZGYsIDB4ZDEsIDB4ZmIsIDB4ZmMsIDB4OWYsIDB4M2QsCisgIDB4MWQsIDB4ZDQsIDB4ZGQsIDB4MmUsIDB4YTAsIDB4ZGIsIDB4NDIsIDB4MjYsIDB4MzksIDB4N2YsIDB4NjgsIDB4OWIsCisgIDB4MGQsIDB4N2IsIDB4OGYsIDB4YWUsIDB4MmMsIDB4OTIsIDB4MjQsIDB4ZWUsIDB4NTMsIDB4YzcsIDB4YmIsIDB4MmMsCisgIDB4ZDQsIDB4ZmIsIDB4NzAsIDB4ODQsIDB4MmEsIDB4NGYsIDB4YTcsIDB4NzUsIDB4ODAsIDB4YTYsIDB4NTEsIDB4NWQsCisgIDB4ZGMsIDB4NTksIDB4NzQsIDB4YjcsIDB4NjcsIDB4OTEsIDB4NjYsIDB4ZmUsIDB4OGQsIDB4NGQsIDB4OWUsIDB4YjgsCisgIDB4ZWEsIDB4YmQsIDB4MjIsIDB4NjksIDB4ZTUsIDB4MmUsIDB4MzIsIDB4ZGMsIDB4MmQsIDB4OTAsIDB4NWMsIDB4NGUsCisgIDB4N2QsIDB4MjIsIDB4YjksIDB4MjUsIDB4NGQsIDB4NTIsIDB4ZDMsIDB4MzQsIDB4NzksIDB4YTYsIDB4NGUsIDB4MDUsCisgIDB4YzksIDB4N2IsIDB4OGYsIDB4MzMsIDB4YTEsIDB4ODUsIDB4MjYsIDB4NWIsIDB4ZDgsIDB4ODMsIDB4OWMsIDB4MDAsCisgIDB4MDEsIDB4YzcsIDB4OWUsIDB4MjYsIDB4MGIsIDB4YjYsIDB4NWMsIDB4MmQsIDB4YjQsIDB4NWMsIDB4MWQsIDB4MTQsCisgIDB4ZjEsIDB4MDAsIDB4YzcsIDB4NmQsIDB4MTUsIDB4OTEsIDB4MjYsIDB4NGUsIDB4MDUsIDB4ZjIsIDB4MzcsIDB4N2YsCisgIDB4NzAsIDB4YmMsIDB4YmUsIDB4ZWEsIDB4MmMsIDB4ZjUsIDB4MTMsIDB4YzUsIDB4MWUsIDB4MzAsIDB4YTEsIDB4ZDYsCisgIDB4ODMsIDB4YmMsIDB4ZGMsIDB4YTQsIDB4ZTIsIDB4YzMsIDB4MDAsIDB4NDIsIDB4MTUsIDB4MTMsIDB4NDYsIDB4YWEsCisgIDB4YTIsIDB4MWYsIDB4ZDEsIDB4ZWUsIDB4NWIsIDB4NzEsIDB4YTMsIDB4NTUsIDB4MGUsIDB4MDgsIDB4YWMsIDB4MzMsCisgIDB4MTgsIDB4YTQsIDB4OGQsIDB4YjEsIDB4MTAsIDB4NzUsIDB4ZjYsIDB4NDMsIDB4MWQsIDB4MzksIDB4ZmMsIDB4OWMsCisgIDB4ZTcsIDB4YTAsIDB4ZWMsIDB4ZmIsIDB4NDksIDB4NTMsIDB4MjYsIDB4ZjEsIDB4ZmEsIDB4MGMsIDB4NjgsIDB4NzgsCisgIDB4YzQsIDB4Y2EsIDB4MjIsIDB4OWQsIDB4MTcsIDB4NTYsIDB4ZmQsIDB4YjksIDB4OWYsIDB4YmMsIDB4NjcsIDB4MDMsCisgIDB4YTksIDB4YWYsIDB4NWYsIDB4OTUsIDB4NWYsIDB4MGIsIDB4MjMsIDB4MDAsIDB4MjYsIDB4ZjcsIDB4ZmMsIDB4ZTQsCisgIDB4OGQsIDB4ZDQsIDB4MzMsIDB4NzYsIDB4MWIsIDB4MjksIDB4NjEsIDB4ZmEsIDB4YzQsIDB4MGQsIDB4MjksIDB4YzUsCisgIDB4OGQsIDB4ZmUsIDB4YzQsIDB4Y2EsIDB4MzksIDB4MTEsIDB4ODksIDB4YmYsIDB4ODksIDB4ODUsIDB4OGQsIDB4MzcsCisgIDB4NDgsIDB4YWEsIDB4ZGYsIDB4YmEsIDB4NTgsIDB4YzksIDB4ZDcsIDB4ZmIsIDB4N2MsIDB4NDgsIDB4OTYsIDB4ZTUsCisgIDB4YmMsIDB4ZGYsIDB4YTgsIDB4ZDEsIDB4ZTksIDB4MTYsIDB4YjMsIDB4NzEsIDB4MWEsIDB4MzksIDB4NDcsIDB4ZDYsCisgIDB4NzQsIDB4MTYsIDB4NTYsIDB4MzgsIDB4ZDcsIDB4NTYsIDB4NmEsIDB4NGEsIDB4NzIsIDB4ZDAsIDB4YzgsIDB4OTMsCisgIDB4MGMsIDB4M2QsIDB4ZTgsIDB4N2YsIDB4OGMsIDB4NDYsIDB4ZGIsIDB4ZjQsIDB4YzEsIDB4NzIsIDB4ZGIsIDB4NWUsCisgIDB4NWMsIDB4ZGUsIDB4NGUsIDB4NGIsIDB4M2EsIDB4MWUsIDB4MzksIDB4MjksIDB4ZjgsIDB4NDcsIDB4NDcsIDB4ZjcsCisgIDB4Y2UsIDB4M2QsIDB4OWUsIDB4ZmQsIDB4MTQsIDB4MGQsIDB4YTcsIDB4NzMsIDB4OGMsIDB4MmYsIDB4NDIsIDB4MzUsCisgIDB4ZTAsIDB4MWYsIDB4NDksIDB4NjQsIDB4ZjgsIDB4ODksIDB4OWYsIDB4MzYsIDB4MzgsIDB4NGIsIDB4NmUsIDB4ZmMsCisgIDB4ZjYsIDB4MzUsIDB4MTcsIDB4NWIsIDB4NDAsIDB4YzUsIDB4ZDUsIDB4Y2IsIDB4OGIsIDB4ODMsIDB4MzcsIDB4ZTMsCisgIDB4NTcsIDB4ZTIsIDB4NjQsIDB4YmQsIDB4Y2MsIDB4ODMsIDB4NDIsIDB4YWUsIDB4ZWEsIDB4YTEsIDB4YjYsIDB4NDgsCisgIDB4YTQsIDB4NjMsIDB4MWQsIDB4YmIsIDB4OTcsIDB4MGEsIDB4MDAsIDB4MDYsIDB4ZDIsIDB4ZDYsIDB4MmEsIDB4YWYsCisgIDB4ODMsIDB4MjYsIDB4ZDMsIDB4YjksIDB4OTQsIDB4ODgsIDB4ODUsIDB4YWUsIDB4YTYsIDB4Y2QsIDB4YjQsIDB4NTksCisgIDB4NmUsIDB4YjksIDB4ODMsIDB4YjUsIDB4MGMsIDB4NGIsIDB4MWEsIDB4NzksIDB4YmUsIDB4M2IsIDB4YTMsIDB4ZmUsCisgIDB4ZDUsIDB4ODcsIDB4NTgsIDB4NTAsIDB4MGUsIDB4YWQsIDB4MzMsIDB4ZjYsIDB4NTMsIDB4ZDEsIDB4ZTUsIDB4NmIsCisgIDB4MzksIDB4MjYsIDB4MGYsIDB4ZTksIDB4ZWEsIDB4MzEsIDB4ZDQsIDB4ZGEsIDB4MTksIDB4NDEsIDB4MDEsIDB4MjcsCisgIDB4ZTcsIDB4OTgsIDB4MTMsIDB4NWQsIDB4YWUsIDB4Y2MsIDB4NzAsIDB4YWUsIDB4ZjEsIDB4MzAsIDB4OTEsIDB4ZDAsCisgIDB4OWEsIDB4ZGUsIDB4ZmMsIDB4ZjMsIDB4ZWUsIDB4NTYsIDB4NzcsIDB4ZjMsIDB4OTcsIDB4YmYsIDB4YjQsIDB4ZjksCisgIDB4ZWUsIDB4YmUsIDB4OWIsIDB4YWQsIDB4ZWYsIDB4ZjMsIDB4NTQsIDB4MzYsIDB4ZmYsIDB4YmMsIDB4YjcsIDB4ZjUsCisgIDB4ZTgsIDB4ODgsIDB4YzIsIDB4NGMsIDB4M2IsIDB4ZmYsIDB4NGQsIDB4N2EsIDB4ODMsIDB4M2IsIDB4MWIsIDB4YmQsCisgIDB4YjQsIDB4YmEsIDB4ZGQsIDB4N2EsIDB4MDYsIDB4M2IsIDB4YWMsIDB4YzcsIDB4OTUsIDB4NjcsIDB4YmMsIDB4YWIsCisgIDB4MzEsIDB4NDAsIDB4MzAsIDB4MTYsIDB4ZDgsIDB4NTksIDB4N2UsIDB4M2UsIDB4ODQsIDB4YTMsIDB4MjksIDB4MGIsCisgIDB4MjcsIDB4ZmYsIDB4ZTMsIDB4MzgsIDB4NjQsIDB4MGEsIDB4YTQsIDB4OGIsIDB4NzgsIDB4YTgsIDB4ZWUsIDB4MzgsCisgIDB4ZGQsIDB4YmMsIDB4Y2MsIDB4NDcsIDB4ZjgsIDB4ZjYsIDB4ZGUsIDB4MjMsIDB4ZGYsIDB4ZjYsIDB4YTMsIDB4MGIsCisgIDB4YWUsIDB4YjksIDB4MWMsIDB4MGYsIDB4NjUsIDB4NDAsIDB4OTUsIDB4ZDEsIDB4MWQsIDB4ZWIsIDB4NzcsIDB4MzYsCisgIDB4N2MsIDB4ODUsIDB4ZTAsIDB4ZjUsIDB4ZGYsIDB4YmIsIDB4M2MsIDB4NzksIDB4N2QsIDB4Y2MsIDB4YjQsIDB4YzgsCisgIDB4NDcsIDB4MjcsIDB4Y2MsIDB4NjUsIDB4MzYsIDB4NTYsIDB4MzYsIDB4NDEsIDB4YmIsIDB4ZDEsIDB4M2EsIDB4YTIsCisgIDB4ZDUsIDB4YjAsIDB4MDIsIDB4ODYsIDB4MDQsIDB4MGEsIDB4MWQsIDB4NmUsIDB4YzksIDB4ZWQsIDB4N2UsIDB4YjcsCisgIDB4MTIsIDB4ZmMsIDB4NjksIDB4MDUsIDB4ZDYsIDB4OTYsIDB4OTYsIDB4YmUsIDB4NzcsIDB4NzIsIDB4MzUsIDB4N2MsCisgIDB4OWQsIDB4Y2YsIDB4NzAsIDB4ZWIsIDB4MWEsIDB4MGEsIDB4NjcsIDB4M2QsIDB4YmQsIDB4NDUsIDB4M2YsIDB4N2MsCisgIDB4OWIsIDB4MmQsIDB4NmEsIDB4M2YsIDB4MGUsIDB4OTMsIDB4MDQsIDB4ZjUsIDB4NDIsIDB4YmQsIDB4YjEsIDB4YWUsCisgIDB4NGEsIDB4YzgsIDB4Y2YsIDB4ZGIsIDB4YzMsIDB4MjEsIDB4Y2EsIDB4NzMsIDB4MGIsIDB4M2UsIDB4NDgsIDB4YTMsCisgIDB4MDQsIDB4MzUsIDB4YmUsIDB4MDcsIDB4ZGIsIDB4ZmIsIDB4MzQsIDB4M2YsIDB4ZTksIDB4ZmMsIDB4NDEsIDB4MjIsCisgIDB4ZGEsIDB4YjEsIDB4YzcsIDB4MjEsIDB4ZjksIDB4OGMsIDB4YzAsIDB4NmIsIDB4Y2UsIDB4NGEsIDB4ZjIsIDB4Y2UsCisgIDB4MjIsIDB4NzEsIDB4MDcsIDB4NmQsIDB4ODQsIDB4ZjQsIDB4OTQsIDB4YjAsIDB4Y2IsIDB4OTMsIDB4N2IsIDB4MGYsCisgIDB4YTQsIDB4ZDEsIDB4NmEsIDB4YTMsIDB4ZjksIDB4ZjIsIDB4MDEsIDB4ODMsIDB4YmMsIDB4YWYsIDB4YzUsIDB4ZTgsCisgIDB4M2IsIDB4MDMsIDB4NzUsIDB4M2YsIDB4Y2IsIDB4M2IsIDB4YjUsIDB4YmEsIDB4MzgsIDB4Y2EsIDB4MjEsIDB4MWMsCisgIDB4MDgsIDB4YTAsIDB4ZmUsIDB4NDQsIDB4Y2IsIDB4YzgsIDB4OWMsIDB4MTUsIDB4ODEsIDB4MDIsIDB4ZDMsIDB4NmUsCisgIDB4NWIsIDB4NjUsIDB4YTgsIDB4ODAsIDB4YmEsIDB4MzIsIDB4NjAsIDB4ZGEsIDB4YWMsIDB4ZjcsIDB4ZDMsIDB4N2IsCisgIDB4MmYsIDB4MzcsIDB4ZjgsIDB4NTgsIDB4MWIsIDB4YjEsIDB4ZDMsIDB4ZGMsIDB4YTIsIDB4MmMsIDB4YTQsIDB4NzUsCisgIDB4OTYsIDB4ZjUsIDB4N2EsIDB4OWUsIDB4NDksIDB4NjQsIDB4NDksIDB4YzMsIDB4OTIsIDB4MTMsIDB4ZGUsIDB4MWYsCisgIDB4ZjYsIDB4NDEsIDB4YmIsIDB4OWYsIDB4NjYsIDB4MWQsIDB4ODMsIDB4MTksIDB4ZmUsIDB4ZjIsIDB4ZDEsIDB4YjQsCisgIDB4NjIsIDB4NzgsIDB4NTEsIDB4ZWYsIDB4OGEsIDB4ODksIDB4MTUsIDB4MzgsIDB4MjAsIDB4ZDIsIDB4OTMsIDB4MGUsCisgIDB4MDgsIDB4ZWYsIDB4ODgsIDB4YzgsIDB4MTYsIDB4ZDksIDB4ZjMsIDB4YWMsIDB4ZDYsIDB4ZWMsIDB4NWUsIDB4MjIsCisgIDB4NzcsIDB4MzQsIDB4MDcsIDB4YjEsIDB4NzQsIDB4ZGUsIDB4NTYsIDB4NzEsIDB4NzIsIDB4YjEsIDB4MWUsIDB4NWQsCisgIDB4MmQsIDB4NjcsIDB4ODgsIDB4ZWUsIDB4MGIsIDB4YWUsIDB4ZjEsIDB4YmYsIDB4MzEsIDB4ZTksIDB4NzEsIDB4ZjEsCisgIDB4MTAsIDB4ZWQsIDB4ZWUsIDB4MGQsIDB4YTIsIDB4YmQsIDB4OWQsIDB4ZGQsIDB4YmQsIDB4OGUsIDB4MzEsIDB4ZjQsCisgIDB4ZmUsIDB4MWIsIDB4YTMsIDB4NmIsIDB4ZjYsIDB4ZjAsIDB4ZWIsIDB4ZGUsIDB4YzcsIDB4OGUsIDB4YzIsIDB4NjMsCisgIDB4ZTQsIDB4NzEsIDB4YWEsIDB4NmEsIDB4MzYsIDB4MjksIDB4ZTksIDB4MWUsIDB4MGUsIDB4ZjQsIDB4NDksIDB4NDEsCisgIDB4NzIsIDB4MmUsIDB4ZjIsIDB4MDksIDB4NzIsIDB4MzQsIDB4ZDgsIDB4MTQsIDB4ZTIsIDB4NzMsIDB4YjIsIDB4MDIsCisgIDB4NzUsIDB4YWUsIDB4OTYsIDB4MTEsIDB4M2YsIDB4YjEsIDB4YTEsIDB4NzUsIDB4MTYsIDB4MDEsIDB4YTEsIDB4NzAsCisgIDB4OGUsIDB4YjcsIDB4YjgsIDB4NDAsIDB4ZjUsIDB4YmQsIDB4ZmEsIDB4MWEsIDB4YTUsIDB4OTUsIDB4MmQsIDB4MGIsCisgIDB4NjMsIDB4MzQsIDB4NzgsIDB4NmQsIDB4NDgsIDB4ZGUsIDB4OGYsIDB4NGUsIDB4MGUsIDB4MmYsIDB4OGQsIDB4M2QsCisgIDB4ZWYsIDB4OGEsIDB4OGYsIDB4ZDMsIDB4ZTIsIDB4ZTEsIDB4ZTMsIDB4MGEsIDB4OTksIDB4M2QsIDB4ZmEsIDB4Y2MsCisgIDB4NmMsIDB4ZmYsIDB4MjYsIDB4MjEsIDB4OGIsIDB4MmMsIDB4OWIsIDB4YWMsIDB4YWUsIDB4ZjcsIDB4ZmYsIDB4MWUsCisgIDB4MTcsIDB4ZDcsIDB4NzksIDB4ZjYsIDB4YTEsIDB4ZTcsIDB4NjcsIDB4NDgsIDB4NTIsIDB4ZGEsIDB4MjcsIDB4MDUsCisgIDB4YjUsIDB4ZmIsIDB4N2MsIDB4ZjcsIDB4ODksIDB4MjAsIDB4ZTAsIDB4NTMsIDB4YWUsIDB4N2IsIDB4MDgsIDB4ZmQsCisgIDB4ZDAsIDB4NWYsIDB4ZjQsIDB4ODUsIDB4YjAsIDB4MDEsIDB4ZDAsIDB4N2IsIDB4YzcsIDB4ZDIsIDB4OTAsIDB4Y2QsCisgIDB4ZmEsIDB4NzIsIDB4ZGQsIDB4OGEsIDB4YzMsIDB4NjcsIDB4NjcsIDB4ZmEsIDB4YWMsIDB4NjQsIDB4MzMsIDB4ZjcsCisgIDB4YzEsIDB4MTksIDB4NDIsIDB4OGYsIDB4NzMsIDB4ZWEsIDB4ZGYsIDB4NmEsIDB4ZDksIDB4YWYsIDB4NTMsIDB4ODAsCisgIDB4N2YsIDB4NjAsIDB4YWMsIDB4ZmMsIDB4MDksIDB4NTcsIDB4YjcsIDB4ZWQsIDB4ZDAsIDB4MTEsIDB4OWIsIDB4MjMsCisgIDB4MmIsIDB4YTUsIDB4NDgsIDB4ZTIsIDB4NWIsIDB4NWYsIDB4ZjUsIDB4ZDMsIDB4YjMsIDB4MzksIDB4OTgsIDB4ZWYsCisgIDB4ZmMsIDB4ZTIsIDB4ZDUsIDB4YTEsIDB4ZjAsIDB4NjEsIDB4NWEsIDB4MGUsIDB4MGUsIDB4YTYsIDB4M2EsIDB4NzIsCisgIDB4OWUsIDB4OGUsIDB4MmQsIDB4ZWUsIDB4ZTUsIDB4MDcsIDB4YmUsIDB4Y2YsIDB4MjAsIDB4ZjksIDB4ZmQsIDB4ZDksCisgIDB4ZTQsIDB4MjMsIDB4MWUsIDB4YTIsIDB4N2QsIDB4MjcsIDB4ZDQsIDB4NjMsIDB4MDcsIDB4ZjUsIDB4OWEsIDB4MjcsCisgIDB4NmMsIDB4ZjMsIDB4YTMsIDB4M2MsIDB4ODQsIDB4OTUsIDB4ZjgsIDB4ZGMsIDB4OTQsIDB4MzIsIDB4OGUsIDB4ZTIsCisgIDB4YmIsIDB4ZTYsIDB4YWUsIDB4YjksIDB4MWEsIDB4ZTksIDB4ZWEsIDB4MmMsIDB4YTAsIDB4N2UsIDB4NzMsIDB4ODksCisgIDB4YzQsIDB4YTMsIDB4ODMsIDB4ZjMsIDB4ZTAsIDB4ZGUsIDB4ODQsIDB4N2IsIDB4ODksIDB4ZjcsIDB4MTEsIDB4ZjEsCisgIDB4NzMsIDB4NmMsIDB4MzMsIDB4YTMsIDB4ODIsIDB4YjAsIDB4YjgsIDB4OTIsIDB4MWUsIDB4MDYsIDB4ZGUsIDB4ZGEsCisgIDB4YWQsIDB4YTAsIDB4MjcsIDB4NjcsIDB4NzcsIDB4YjEsIDB4MjAsIDB4YWQsIDB4NzMsIDB4M2QsIDB4NGUsIDB4ZTAsCisgIDB4Y2UsIDB4MDAsIDB4NWIsIDB4ZmQsIDB4N2MsIDB4MTYsIDB4MjMsIDB4YTIsIDB4YTYsIDB4ODcsIDB4MTAsIDB4OGMsCisgIDB4NTAsIDB4YjQsIDB4OTUsIDB4MmEsIDB4YWMsIDB4ODYsIDB4ZDYsIDB4ZTYsIDB4N2QsIDB4YTQsIDB4ZDksIDB4MDAsCisgIDB4OWEsIDB4ZjYsIDB4YTAsIDB4ZTUsIDB4MjQsIDB4ZjAsIDB4MTgsIDB4NjcsIDB4YmEsIDB4M2UsIDB4ZDgsIDB4MDAsCisgIDB4NDQsIDB4M2YsIDB4NTMsIDB4ZTcsIDB4ZTMsIDB4ZjIsIDB4OTYsIDB4NTQsIDB4YTksIDB4NDQsIDB4ODIsIDB4ZTksCisgIDB4ZWIsIDB4ZTksIDB4MzQsIDB4MzEsIDB4OWYsIDB4ZWEsIDB4MmMsIDB4MTUsIDB4NDQsIDB4MDYsIDB4N2IsIDB4MzMsCisgIDB4YzAsIDB4YWIsIDB4NTMsIDB4NWIsIDB4MzAsIDB4MzksIDB4ODEsIDB4ZjgsIDB4ZjIsIDB4MzIsIDB4MmYsIDB4MTMsCisgIDB4ZTEsIDB4YzAsIDB4OGIsIDB4MmUsIDB4ZWYsIDB4NzMsIDB4MzEsIDB4M2EsIDB4MWQsIDB4ZTEsIDB4ODAsIDB4NjAsCisgIDB4MWEsIDB4Y2IsIDB4NTUsIDB4MmEsIDB4ZDQsIDB4MTksIDB4YjQsIDB4NzgsIDB4ZDAsIDB4MDcsIDB4NDEsIDB4MGQsCisgIDB4YzYsIDB4OWUsIDB4NzMsIDB4YTQsIDB4MWMsIDB4YjksIDB4MDAsIDB4ZGEsIDB4ZjgsIDB4ZTgsIDB4OWIsIDB4ODgsCisgIDB4NzMsIDB4YjQsIDB4ZjksIDB4MWIsIDB4ODcsIDB4Y2MsIDB4ZDcsIDB4Y2UsIDB4YjEsIDB4ZjAsIDB4MDUsIDB4MmUsCisgIDB4MTIsIDB4NWYsIDB4YWQsIDB4NzgsIDB4YmYsIDB4MWYsIDB4ZGUsIDB4YzQsIDB4NGIsIDB4MzYsIDB4ODksIDB4NzcsCisgIDB4NzcsIDB4ZjgsIDB4ZjYsIDB4ZmQsIDB4OWQsIDB4NjUsIDB4N2IsIDB4ZjEsIDB4NDYsIDB4YjUsIDB4ZmEsIDB4Y2MsCisgIDB4NjUsIDB4MmYsIDB4YjgsIDB4OTgsIDB4Y2YsIDB4YjgsIDB4YmMsIDB4MzIsIDB4ZGIsIDB4YzQsIDB4NzUsIDB4OWYsCisgIDB4MWYsIDB4OWQsIDB4OWUsIDB4ZTUsIDB4YjYsIDB4YjAsIDB4YjQsIDB4OTcsIDB4MjQsIDB4MWEsIDB4NDUsIDB4MzksCisgIDB4YmIsIDB4ZGQsIDB4OWUsIDB4ZDIsIDB4MWYsIDB4NGYsIDB4NzYsIDB4YjYsIDB4NDEsIDB4Y2IsIDB4NTgsIDB4YzEsCisgIDB4NDUsIDB4YzYsIDB4MzIsIDB4YjksIDB4YjcsIDB4ZjcsIDB4ZWMsIDB4ZDksIDB4MjAsIDB4ZWEsIDB4YjEsIDB4ZDMsCisgIDB4Y2EsIDB4M2UsIDB4YzAsIDB4NWIsIDB4ODIsIDB4NzYsIDB4NTYsIDB4YWYsIDB4YWIsIDB4MTgsIDB4ZTUsIDB4NzYsCisgIDB4NzEsIDB4MzUsIDB4ZTUsIDB4ZmYsIDB4ZjEsIDB4NmIsIDB4NTYsIDB4NTAsIDB4ZWUsIDB4NTIsIDB4ZDMsIDB4MzcsCisgIDB4MzAsIDB4MGYsIDB4NTksIDB4YzgsIDB4YjUsIDB4NjIsIDB4NjIsIDB4NzUsIDB4NGYsIDB4ZWIsIDB4NjAsIDB4NmUsCisgIDB4MDksIDB4OGUsIDB4NDAsIDB4MmMsIDB4OTMsIDB4N2MsIDB4NjksIDB4NjEsIDB4YzYsIDB4ODUsIDB4ZDYsIDB4N2YsCisgIDB4YzAsIDB4ZTcsIDB4ODMsIDB4ZTAsIDB4MGMsIDB4MDIsIDB4YzMsIDB4ODIsIDB4YWIsIDB4ZDIsIDB4YzQsIDB4ZmEsCisgIDB4NzIsIDB4MzUsIDB4MTksIDB4NmEsIDB4ODYsIDB4YTksIDB4ZGMsIDB4MzMsIDB4NTIsIDB4ZGEsIDB4YjksIDB4ZjQsCisgIDB4Y2YsIDB4YjksIDB4NzksIDB4N2YsIDB4NWIsIDB4MWEsIDB4ZjksIDB4Y2IsIDB4YTgsIDB4YTcsIDB4YjIsIDB4YzUsCisgIDB4ZmYsIDB4MTksIDB4MjEsIDB4NGEsIDB4OTgsIDB4NGMsIDB4NzksIDB4MTgsIDB4ZjksIDB4NGIsIDB4ZmQsIDB4YzcsCisgIDB4N2YsIDB4ZmUsIDB4MjcsIDB4MzUsIDB4ZmIsIDB4OWYsIDB4ZGMsIDB4Y2EsIDB4Y2IsIDB4M2YsIDB4OTcsIDB4ZDUsCisgIDB4NGQsIDB4ZjAsIDB4NGMsIDB4NGYsIDB4MDUsIDB4ZmUsIDB4YzQsIDB4YzcsIDB4NDgsIDB4ODEsIDB4N2IsIDB4MDIsCisgIDB4NjksIDB4MjksIDB4MTIsIDB4YTEsIDB4NWUsIDB4OWYsIDB4YWEsIDB4NDYsIDB4MWUsIDB4MDQsIDB4ZTMsIDB4NGIsCisgIDB4OTEsIDB4YTIsIDB4MjYsIDB4M2UsIDB4MzcsIDB4MDcsIDB4M2IsIDB4ZjgsIDB4OTIsIDB4ZTMsIDB4OTcsIDB4MDksCisgIDB4YTcsIDB4MzYsIDB4OTMsIDB4MTQsIDB4ODIsIDB4OTUsIDB4NmUsIDB4Y2IsIDB4NGMsIDB4OGMsIDB4ZTMsIDB4MzcsCisgIDB4ZGYsIDB4OWUsIDB4NWMsIDB4OWMsIDB4YmQsIDB4NzksIDB4N2QsIDB4ZmMsIDB4ZTYsIDB4MzIsIDB4ZmEsIDB4ZjYsCisgIDB4ZTAsIDB4ZTIsIDB4ZTQsIDB4ZTAsIDB4Y2IsIDB4NTMsIDB4Y2QsIDB4YTAsIDB4ZTYsIDB4MjEsIDB4MzAsIDB4NWEsCisgIDB4NDQsIDB4NGMsIDB4ZWYsIDB4MDYsIDB4YTcsIDB4NjgsIDB4OTAsIDB4ZDEsIDB4ZDIsIDB4NTksIDB4MWIsIDB4YTIsCisgIDB4NTEsIDB4NTMsIDB4ZjQsIDB4OWQsIDB4OTIsIDB4NTQsIDB4YzMsIDB4YmQsIDB4ZmEsIDB4MGUsIDB4NTUsIDB4NmUsCisgIDB4MDYsIDB4MWMsIDB4ZjAsIDB4N2IsIDB4NjcsIDB4MDUsIDB4NmYsIDB4ZDgsIDB4NmQsIDB4ZjksIDB4MTAsIDB4ZTQsCisgIDB4ZTQsIDB4MzIsIDB4OTAsIDB4ODUsIDB4YTUsIDB4ZDQsIDB4ZjQsIDB4OTMsIDB4MmYsIDB4NGUsIDB4ZTYsIDB4OGEsCisgIDB4MjcsIDB4N2MsIDB4MjUsIDB4NjksIDB4ZGQsIDB4NTYsIDB4NDksIDB4YzIsIDB4NWUsIDB4ZDUsIDB4MTQsIDB4MjMsCisgIDB4YjgsIDB4NzEsIDB4NWMsIDB4MWYsIDB4MGUsIDB4NGUsIDB4NGYsIDB4ZmQsIDB4YTcsIDB4MWUsIDB4MmYsIDB4MzIsCisgIDB4YTIsIDB4NzQsIDB4M2UsIDB4OTIsIDB4MDUsIDB4NzQsIDB4NjMsIDB4MjUsIDB4ZDYsIDB4YWYsIDB4NzMsIDB4Y2YsCisgIDB4YjgsIDB4OWQsIDB4M2QsIDB4ODQsIDB4ZTQsIDB4ZGEsIDB4ZmMsIDB4MzEsIDB4NWEsIDB4OGUsIDB4NGQsIDB4ZTEsCisgIDB4NjIsIDB4ZTAsIDB4NzAsIDB4MjMsIDB4NmQsIDB4YTAsIDB4YjQsIDB4YmMsIDB4MWQsIDB4NDQsIDB4ZmQsIDB4M2YsCisgIDB4ZjcsIDB4MjUsIDB4M2IsIDB4MmIsIDB4MDEsIDB4ZjUsIDB4YWMsIDB4OTQsIDB4MzAsIDB4ZDksIDB4ZjIsIDB4OWQsCisgIDB4N2EsIDB4NzMsIDB4ZTYsIDB4ZmIsIDB4YTQsIDB4NDEsIDB4MzQsIDB4ZDcsIDB4MDEsIDB4ZjcsIDB4YTIsIDB4OGYsCisgIDB4N2YsIDB4OTYsIDB4NjYsIDB4Y2YsIDB4MDAsIDB4NzgsIDB4ZTgsIDB4MWYsIDB4NTcsIDB4NzYsIDB4N2YsIDB4OTcsCisgIDB4NjIsIDB4YWUsIDB4MzIsIDB4Y2EsIDB4NzEsIDB4OTIsIDB4Y2UsIDB4NzcsIDB4NzEsIDB4NjksIDB4OGIsIDB4YTcsCisgIDB4MDEsIDB4YzMsIDB4YjAsIDB4YjgsIDB4NzEsIDB4ZjgsIDB4ZjIsIDB4MGIsIDB4M2IsIDB4NDAsIDB4MmEsIDB4YzIsCisgIDB4Y2IsIDB4ZTEsIDB4NDAsIDB4NTMsIDB4Y2QsIDB4MmUsIDB4MjIsIDB4OGQsIDB4NGUsIDB4YWQsIDB4NGEsIDB4ZDUsCisgIDB4YTAsIDB4OTAsIDB4YWEsIDB4ZjcsIDB4ZGIsIDB4NTYsIDB4Y2EsIDB4MDQsIDB4MjEsIDB4MmIsIDB4MDYsIDB4OTYsCisgIDB4MTcsIDB4ZTksIDB4NGMsIDB4MzksIDB4ZWIsIDB4M2EsIDB4YTUsIDB4NjIsIDB4ODQsIDB4NDgsIDB4YzcsIDB4YzUsCisgIDB4MjEsIDB4MDgsIDB4YmUsIDB4MzMsIDB4YWUsIDB4MTIsIDB4ZTcsIDB4OGEsIDB4MjIsIDB4MDgsIDB4MDgsIDB4OTUsCisgIDB4YjQsIDB4NDgsIDB4YzEsIDB4OTksIDB4NWQsIDB4OTksIDB4MWEsIDB4MjEsIDB4MDAsIDB4NzYsIDB4YzIsIDB4NDQsCisgIDB4OGYsIDB4YWYsIDB4NzMsIDB4MzMsIDB4YmYsIDB4NjMsIDB4MTcsIDB4N2UsIDB4OTUsIDB4OGMsIDB4MmQsIDB4YzEsCisgIDB4ZWMsIDB4OTgsIDB4MTUsIDB4ZTYsIDB4ODgsIDB4YTgsIDB4OWMsIDB4MDcsIDB4MGMsIDB4ODEsIDB4NWEsIDB4ZjMsCisgIDB4MzcsIDB4MzMsIDB4NGUsIDB4MDksIDB4ZmUsIDB4MzIsIDB4YzUsIDB4MzEsIDB4OTQsIDB4NDEsIDB4YmEsIDB4YWYsCisgIDB4ODcsIDB4YzEsIDB4YjMsIDB4MmUsIDB4OTEsIDB4MTAsIDB4YTUsIDB4MzEsIDB4NDMsIDB4ODEsIDB4OGQsIDB4Y2IsCisgIDB4ZDIsIDB4ODMsIDB4ODEsIDB4OTgsIDB4NDMsIDB4YjcsIDB4ZjgsIDB4NDEsIDB4MzQsIDB4YTksIDB4ZTAsIDB4NDcsCisgIDB4MzQsIDB4NjksIDB4YWUsIDB4NTAsIDB4ZGEsIDB4M2QsIDB4NzMsIDB4Y2UsIDB4NDQsIDB4MzIsIDB4NGQsIDB4MTQsCisgIDB4NDcsIDB4OTMsIDB4ZjQsIDB4M2EsIDB4MzIsIDB4MmYsIDB4NDgsIDB4YzQsIDB4NTIsIDB4MDIsIDB4YzYsIDB4YjAsCisgIDB4N2MsIDB4OTEsIDB4ZjAsIDB4NTIsIDB4ODEsIDB4MGYsIDB4MGMsIDB4YjYsIDB4ZmIsIDB4NGQsIDB4M2UsIDB4MGYsCisgIDB4NDksIDB4YWIsIDB4NmMsIDB4MjQsIDB4MjUsIDB4MjMsIDB4ZjUsIDB4MDMsIDB4MmYsIDB4MWEsIDB4M2MsIDB4ZTksCisgIDB4MmIsIDB4OWUsIDB4NDcsIDB4ODMsIDB4MzUsIDB4MjksIDB4ZDcsIDB4YjUsIDB4ODIsIDB4YmMsIDB4ZDgsIDB4NDUsCisgIDB4MGIsIDB4ZWEsIDB4YmQsIDB4MGMsIDB4MjksIDB4MjUsIDB4OTYsIDB4OWUsIDB4OGIsIDB4NzksIDB4MzAsIDB4MDAsCisgIDB4MmMsIDB4NmIsIDB4MGIsIDB4NzgsIDB4NTYsIDB4YjgsIDB4MjQsIDB4ZGQsIDB4YTYsIDB4MjMsIDB4YWIsIDB4ZTYsCisgIDB4NTYsIDB4YTYsIDB4NDIsIDB4ZjcsIDB4YzksIDB4NDIsIDB4MmYsIDB4ZjgsIDB4ZjQsIDB4N2EsIDB4YmQsIDB4MTcsCisgIDB4NWQsIDB4MmMsIDB4YTUsIDB4NjIsIDB4MjIsIDB4OTksIDB4ZTAsIDB4NGUsIDB4NTMsIDB4ZmYsIDB4MzYsIDB4MDMsCisgIDB4YzUsIDB4OTMsIDB4OTEsIDB4ODgsIDB4YzgsIDB4NjMsIDB4NzIsIDB4N2YsIDB4ZDQsIDB4N2YsIDB4MGQsIDB4NWQsCisgIDB4YTUsIDB4MmEsIDB4MGQsIDB4NjMsIDB4NmUsIDB4ZjksIDB4MDgsIDB4YjYsIDB4NTgsIDB4MDEsIDB4MmMsIDB4YWQsCisgIDB4NTMsIDB4YWQsIDB4N2EsIDB4ODcsIDB4ZmUsIDB4ZDIsIDB4N2EsIDB4OTksIDB4MjMsIDB4MmEsIDB4ZjQsIDB4NjMsCisgIDB4NDUsIDB4OTYsIDB4YjksIDB4MzEsIDB4OWYsIDB4MDcsIDB4NzQsIDB4ZDUsIDB4ZTIsIDB4OGUsIDB4ODgsIDB4NWIsCisgIDB4YzYsIDB4MDcsIDB4MDcsIDB4MWIsIDB4MjQsIDB4YTEsIDB4NTEsIDB4MzEsIDB4MjQsIDB4NDIsIDB4NmQsIDB4MWIsCisgIDB4OGMsIDB4NDQsIDB4ZDEsIDB4YzksIDB4NmMsIDB4OWUsIDB4MzUsIDB4ZGMsIDB4NjMsIDB4ODEsIDB4NDYsIDB4YjMsCisgIDB4NjgsIDB4NmIsIDB4NzgsIDB4MzIsIDB4NjksIDB4OTUsIDB4ODQsIDB4MzQsIDB4NWUsIDB4ODgsIDB4ZjEsIDB4ZTgsCisgIDB4YzUsIDB4NmYsIDB4ZjEsIDB4MjAsIDB4ZjgsIDB4YjUsIDB4OGQsIDB4OGQsIDB4YzMsIDB4YjcsIDB4ZTMsIDB4Y2IsCisgIDB4YjMsIDB4ZDcsIDB4ZDEsIDB4ZDksIDB4ZGIsIDB4Y2IsIDB4ZjMsIDB4YjcsIDB4OTcsIDB4N2EsIDB4NzQsIDB4NGQsCisgIDB4MDQsIDB4ZmQsIDB4MmIsIDB4NzcsIDB4NDQsIDB4YjEsIDB4MDIsIDB4NmMsIDB4MzUsIDB4MTcsIDB4MWEsIDB4NDIsCisgIDB4MDYsIDB4NTgsIDB4MjEsIDB4MDcsIDB4NGQsIDB4NWQsIDB4YzAsIDB4NTIsIDB4ZTMsIDB4YjIsIDB4N2IsIDB4YzAsCisgIDB4ZGQsIDB4MjQsIDB4ZWMsIDB4YjcsIDB4OTgsIDB4ZjMsIDB4N2IsIDB4OWEsIDB4NzMsIDB4NjQsIDB4NjYsIDB4YzIsCisgIDB4YjcsIDB4NjMsIDB4YzksIDB4NDIsIDB4YjgsIDB4ZjcsIDB4NzQsIDB4NTcsIDB4MjAsIDB4NjksIDB4MTQsIDB4M2IsCisgIDB4NDQsIDB4YjAsIDB4YjcsIDB4NGUsIDB4MGEsIDB4ZTQsIDB4MTEsIDB4MzksIDB4ZTYsIDB4ZGIsIDB4ZjEsIDB4YWUsCisgIDB4OWYsIDB4MTAsIDB4MWMsIDB4MDgsIDB4NTgsIDB4Y2MsIDB4YjQsIDB4MzIsIDB4NjcsIDB4YTYsIDB4ZTEsIDB4MzMsCisgIDB4MDEsIDB4NWEsIDB4YTksIDB4YTcsIDB4YTgsIDB4ODUsIDB4OTksIDB4NzIsIDB4NTUsIDB4NGUsIDB4MjMsIDB4YmMsCisgIDB4NzEsIDB4ZDgsIDB4NmEsIDB4YzYsIDB4YTMsIDB4MDAsIDB4NTMsIDB4MjYsIDB4MDEsIDB4NzksIDB4MDYsIDB4NmYsCisgIDB4YzksIDB4OTUsIDB4ODEsIDB4MmUsIDB4ODIsIDB4ZWMsIDB4MDIsIDB4NmYsIDB4MWQsIDB4YjMsIDB4ZjcsIDB4NTEsCisgIDB4ZmYsIDB4YmIsIDB4MjQsIDB4NmMsIDB4ZjAsIDB4NGYsIDB4ZmYsIDB4YzUsIDB4MDksIDB4ODAsIDB4ZWYsIDB4ZWMsCisgIDB4MjcsIDB4ZmYsIDB4OTQsIDB4NGYsIDB4ZmUsIDB4MmQsIDB4ZWIsIDB4MDMsIDB4OGEsIDB4NTUsIDB4OGYsIDB4YmMsCisgIDB4N2UsIDB4NzMsIDB4N2MsIDB4ZjEsIDB4ZTUsIDB4ZjEsIDB4YzUsIDB4ZDksIDB4MTgsIDB4ZjAsIDB4MTMsIDB4NzMsCisgIDB4NzcsIDB4YjUsIDB4ODUsIDB4ZmQsIDB4MzYsIDB4MjksIDB4MjYsIDB4NDksIDB4OTEsIDB4NmIsIDB4OWQsIDB4MjQsCisgIDB4ZmIsIDB4ZDcsIDB4YjMsIDB4ZWQsIDB4YWYsIDB4YzYsIDB4ZTMsIDB4ODMsIDB4ZjMsIDB4MTMsIDB4NTcsIDB4N2YsCisgIDB4YzQsIDB4YTUsIDB4MjIsIDB4YzksIDB4MWQsIDB4MjksIDB4OTMsIDB4NjQsIDB4MzksIDB4MWUsIDB4YmYsIDB4YmQsCisgIDB4NDIsIDB4NzIsIDB4MzEsIDB4YmQsIDB4MTUsIDB4ODgsIDB4NmEsIDB4MmIsIDB4YzYsIDB4NjksIDB4M2UsIDB4NWEsCisgIDB4MGUsIDB4NmUsIDB4NmEsIDB4ODYsIDB4MWEsIDB4MzcsIDB4NmMsIDB4ZWMsIDB4NDIsIDB4OTIsIDB4YTgsIDB4MmQsCisgIDB4MDIsIDB4ZmMsIDB4OGEsIDB4NWQsIDB4Y2EsIDB4MDMsIDB4MDcsIDB4ZTMsIDB4YmEsIDB4MmQsIDB4MjYsIDB4NDMsCisgIDB4MTIsIDB4ZjQsIDB4NWIsIDB4MmIsIDB4MjIsIDB4MmIsIDB4NjAsIDB4N2EsIDB4NTIsIDB4OTMsIDB4ODIsIDB4YjIsCisgIDB4ZjUsIDB4N2UsIDB4ODYsIDB4NWIsIDB4MmUsIDB4MWQsIDB4YmQsIDB4N2QsIDB4Y2IsIDB4NWIsIDB4ODMsIDB4NGIsCisgIDB4NjQsIDB4Y2MsIDB4NDcsIDB4YTIsIDB4ZDksIDB4NjUsIDB4MmYsIDB4MTksIDB4NzQsIDB4OTIsIDB4ZDUsIDB4ZWIsCisgIDB4NjMsIDB4NjQsIDB4MDcsIDB4ZjQsIDB4MzUsIDB4NTcsIDB4ZDQsIDB4NGUsIDB4NWMsIDB4NWQsIDB4ZjQsIDB4OTMsCisgIDB4YTcsIDB4OGUsIDB4ZjQsIDB4MjksIDB4YWMsIDB4MmEsIDB4N2MsIDB4NDUsIDB4YzYsIDB4ZjcsIDB4ZjIsIDB4N2UsCisgIDB4YTYsIDB4MDcsIDB4MDgsIDB4ZTgsIDB4OGUsIDB4MzMsIDB4ZjEsIDB4NzIsIDB4OGIsIDB4ZmUsIDB4NmUsIDB4YzYsCisgIDB4M2EsIDB4YjgsIDB4MGEsIDB4MWYsIDB4NTAsIDB4ZmYsIDB4OGEsIDB4NjksIDB4OGUsIDB4MjYsIDB4ZjMsIDB4MzgsCisgIDB4YmIsIDB4YzUsIDB4NDksIDB4ODYsIDB4YjMsIDB4ODksIDB4YWYsIDB4OWIsIDB4YzYsIDB4NjUsIDB4YzQsIDB4MzUsCisgIDB4MGIsIDB4MTEsIDB4ZGEsIDB4NTIsIDB4N2EsIDB4MDEsIDB4MTgsIDB4ODAsIDB4NzMsIDB4NTYsIDB4NmMsIDB4MGYsCisgIDB4ZTIsIDB4ZDksIDB4NzUsIDB4OTQsIDB4NGQsIDB4NDEsIDB4MTAsIDB4MDcsIDB4M2IsIDB4YzksIDB4NGYsIDB4MDIsCisgIDB4N2IsIDB4OGQsIDB4OGUsIDB4NGYsIDB4ZTksIDB4NTAsIDB4NzIsIDB4OTksIDB4MGEsIDB4YjgsIDB4OWUsIDB4MjcsCisgIDB4NzMsIDB4MjYsIDB4ZGUsIDB4MzEsIDB4NzAsIDB4ODksIDB4MjQsIDB4ZTcsIDB4YTUsIDB4NTAsIDB4NjIsIDB4YTIsCisgIDB4MzgsIDB4OGMsIDB4ODksIDB4MWIsIDB4NjEsIDB4MDgsIDB4NDgsIDB4MGEsIDB4NzIsIDB4MTAsIDB4NGIsIDB4NTcsCisgIDB4YWYsIDB4NDIsIDB4YjUsIDB4YjYsIDB4MjgsIDB4MzAsIDB4MTAsIDB4NGQsIDB4ZmEsIDB4ZjIsIDB4MTUsIDB4NjEsCisgIDB4NDEsIDB4MTMsIDB4YzUsIDB4NmMsIDB4MWQsIDB4N2EsIDB4NjgsIDB4ODksIDB4YWIsIDB4ZjUsIDB4MjQsIDB4OWQsCisgIDB4ZjAsIDB4MjYsIDB4YTksIDB4MGIsIDB4NTYsIDB4ZDUsIDB4NTIsIDB4MjQsIDB4ZDYsIDB4MmUsIDB4OTMsIDB4YmMsCisgIDB4ZGUsIDB4ZTUsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MDYsIDB4YzQsIDB4ZmIsIDB4ZWQsIDB4ZTgsIDB4NjUsCisgIDB4MGMsIDB4ZjcsIDB4NWEsIDB4YzcsIDB4OWEsIDB4NWEsIDB4YzcsIDB4MjUsIDB4YjAsIDB4Y2MsIDB4N2UsIDB4ZGIsCisgIDB4NzksIDB4NjUsIDB4ZjEsIDB4MjcsIDB4ZTAsIDB4MjQsIDB4ZjUsIDB4ZjQsIDB4YWQsIDB4NjYsIDB4ZDAsIDB4MzYsCisgIDB4NDUsIDB4OGQsIDB4ZjUsIDB4MzQsIDB4ODQsIDB4NzgsIDB4MGEsIDB4MDMsIDB4MDIsIDB4ZGMsIDB4ODIsIDB4MDIsCisgIDB4ZmEsIDB4YzcsIDB4MGQsIDB4YzYsIDB4ZDksIDB4YjYsIDB4YzMsIDB4MzcsIDB4N2MsIDB4NTQsIDB4ZTQsIDB4YzMsCisgIDB4YzksIDB4MGEsIDB4NzcsIDB4YjIsIDB4YTAsIDB4MDYsIDB4OTMsIDB4MjQsIDB4MDIsIDB4NzIsIDB4ZTUsIDB4NzAsCisgIDB4OTAsIDB4NzMsIDB4ZTEsIDB4ZjcsIDB4MWMsIDB4ZDYsIDB4NDAsIDB4OGEsIDB4YjUsIDB4NDQsIDB4M2EsIDB4OTAsCisgIDB4NzMsIDB4NTcsIDB4MjcsIDB4NmUsIDB4NzEsIDB4NzQsIDB4MWQsIDB4MDIsIDB4NjQsIDB4MDcsIDB4YTAsIDB4ZDcsCisgIDB4YWEsIDB4NzYsIDB4NDksIDB4MGYsIDB4NzUsIDB4OTEsIDB4MWQsIDB4ZTQsIDB4MmMsIDB4ZDMsIDB4ZDIsIDB4OWEsCisgIDB4ZjAsIDB4YjMsIDB4ZDcsIDB4NjEsIDB4YmIsIDB4OTUsIDB4NjMsIDB4NGUsIDB4YmYsIDB4ODQsIDB4ODksIDB4OTAsCisgIDB4MjgsIDB4OWYsIDB4YjgsIDB4ZTEsIDB4NzEsIDB4MGQsIDB4ZmQsIDB4N2YsIDB4NTcsIDB4NzEsIDB4YWQsIDB4MjAsCisgIDB4NjEsIDB4MWEsIDB4ODgsIDB4ZTcsIDB4NTIsIDB4ZjAsIDB4NjEsIDB4ZWQsIDB4MjksIDB4MjIsIDB4OWIsIDB4YTksCisgIDB4YmEsIDB4YmMsIDB4ZmMsIDB4ZTEsIDB4ZmMsIDB4ZjgsIDB4YTUsIDB4YmQsIDB4ZjksIDB4ZDgsIDB4OWEsIDB4MDksCisgIDB4MDEsIDB4MTcsIDB4ZTAsIDB4MTcsIDB4ODksIDB4OTIsIDB4NWQsIDB4MDYsIDB4ODUsIDB4N2EsIDB4NDksIDB4YzgsCisgIDB4ODYsIDB4OTUsIDB4ODUsIDB4ODUsIDB4ZTUsIDB4MzMsIDB4YzMsIDB4ZTgsIDB4ZmIsIDB4YTMsIDB4OTMsIDB4ZjEsCisgIDB4ZjksIDB4ZTksIDB4ZDksIDB4ZTEsIDB4Y2IsIDB4MTcsIDB4ZGYsIDB4OWIsIDB4MzYsIDB4ZmUsIDB4OWMsIDB4MTksCisgIDB4NjcsIDB4YzQsIDB4NDYsIDB4NzMsIDB4M2YsIDB4ZjMsIDB4MDQsIDB4MDEsIDB4ZmEsIDB4ZGUsIDB4OWIsIDB4ZTMsCisgIDB4ZWYsIDB4ZGUsIDB4ZDEsIDB4Y2QsIDB4ZTAsIDB4MjUsIDB4MTMsIDB4ODQsIDB4MGYsIDB4ZWUsIDB4ZTIsIDB4YjksCisgIDB4YmUsIDB4YzQsIDB4ZDcsIDB4YWIsIDB4MGUsIDB4YmIsIDB4MmUsIDB4NDgsIDB4ZTcsIDB4ZTgsIDB4OWEsIDB4NTgsCisgIDB4NTcsIDB4NzksIDB4ZDIsIDB4ODMsIDB4ZGQsIDB4MWYsIDB4MGMsIDB4OTEsIDB4MTUsIDB4ZDQsIDB4MTYsIDB4OGEsCisgIDB4NmIsIDB4YjksIDB4OTksIDB4MWQsIDB4MTUsIDB4NWMsIDB4NzMsIDB4NzcsIDB4ZjIsIDB4ZjcsIDB4MmIsIDB4NDEsCisgIDB4ZTYsIDB4NzEsIDB4MzQsIDB4M2EsIDB4MGMsIDB4ZjIsIDB4MDIsIDB4ZmMsIDB4YTgsIDB4YmYsIDB4ZjEsIDB4YTAsCisgIDB4NTAsIDB4YTUsIDB4ZTIsIDB4MmQsIDB4MTgsIDB4MGIsIDB4ZTEsIDB4YjgsIDB4MGMsIDB4YjUsIDB4OGMsIDB4MmUsCisgIDB4YzIsIDB4YTcsIDB4NGEsIDB4NzgsIDB4YTgsIDB4NGMsIDB4M2UsIDB4OGMsIDB4YzMsIDB4MzQsIDB4NDgsIDB4YjYsCisgIDB4MmIsIDB4ZDUsIDB4MmUsIDB4ZTYsIDB4OGIsIDB4ZWIsIDB4MGIsIDB4OTcsIDB4M2MsIDB4MmIsIDB4ZjgsIDB4NTAsCisgIDB4NDIsIDB4NjksIDB4OTcsIDB4ZjMsIDB4ZTMsIDB4OGIsIDB4ZjEsIDB4YzksIDB4ZjgsIDB4OTIsIDB4YWYsIDB4NTAsCisgIDB4NWEsIDB4OTQsIDB4NGYsIDB4ZGQsIDB4Y2YsIDB4NTYsIDB4MzEsIDB4MTEsIDB4ODksIDB4ZmYsIDB4NzUsIDB4ZWUsCisgIDB4Y2EsIDB4YjAsIDB4ZWMsIDB4NDQsIDB4NmQsIDB4NDcsIDB4M2IsIDB4MzUsIDB4NTcsIDB4Y2YsIDB4MDQsIDB4NjQsCisgIDB4MmYsIDB4ODIsIDB4YTQsIDB4MTcsIDB4YjIsIDB4MTEsIDB4MmEsIDB4MGMsIDB4YWMsIDB4ZjEsIDB4OTUsIDB4NmQsCisgIDB4ZTAsIDB4NWMsIDB4NDUsIDB4YTMsIDB4NTEsIDB4N2QsIDB4MDEsIDB4OTUsIDB4NTMsIDB4YjAsIDB4M2EsIDB4ZjMsCisgIDB4NzQsIDB4ZTIsIDB4MWQsIDB4ZTYsIDB4OGQsIDB4NDgsIDB4MjQsIDB4MDcsIDB4YmEsIDB4OTUsIDB4ZjEsIDB4MjEsCisgIDB4ZGMsIDB4NDIsIDB4ZTYsIDB4MGEsIDB4ZjcsIDB4ZTksIDB4YjUsIDB4NjUsIDB4NmUsIDB4MzUsIDB4NTYsIDB4NDUsCisgIDB4ZjgsIDB4ZTEsIDB4YWEsIDB4MGUsIDB4OTMsIDB4MjAsIDB4ZGQsIDB4MjUsIDB4MTUsIDB4MTcsIDB4MTMsIDB4MzMsCisgIDB4ZDEsIDB4ZGMsIDB4NGYsIDB4MDMsIDB4MjgsIDB4YTMsIDB4OTIsIDB4MDgsIDB4ODEsIDB4ZmIsIDB4NTQsIDB4NTUsCisgIDB4MzYsIDB4MmIsIDB4ZTUsIDB4NTQsIDB4ZDIsIDB4OTksIDB4ZDgsIDB4YzksIDB4NDIsIDB4MDYsIDB4MGIsIDB4ZDIsCisgIDB4YjMsIDB4MDEsIDB4MzksIDB4ZDEsIDB4OTEsIDB4YjUsIDB4YWMsIDB4MGYsIDB4MzUsIDB4MWIsIDB4YWYsIDB4MzksCisgIDB4MGYsIDB4MGEsIDB4NGMsIDB4NGQsIDB4MzMsIDB4MzYsIDB4YjUsIDB4ZTAsIDB4N2QsIDB4MGIsIDB4M2YsIDB4NjYsCisgIDB4MjcsIDB4MjksIDB4Y2YsIDB4ZTAsIDB4NjQsIDB4MTUsIDB4ZDYsIDB4ZjYsIDB4NzIsIDB4YmQsIDB4OTcsIDB4ZjIsCisgIDB4MTYsIDB4OTgsIDB4NzgsIDB4ODAsIDB4ZWQsIDB4ZTIsIDB4MDIsIDB4NGMsIDB4ODgsIDB4OTUsIDB4YjIsIDB4OGUsCisgIDB4ZGIsIDB4YTUsIDB4NDcsIDB4OTEsIDB4NzMsIDB4YTMsIDB4M2EsIDB4MjksIDB4OGMsIDB4YzksIDB4YTUsIDB4NTUsCisgIDB4YTIsIDB4N2MsIDB4NmMsIDB4NDYsIDB4ODMsIDB4YjIsIDB4ODAsIDB4MmMsIDB4YmUsIDB4NDUsIDB4NjIsIDB4MTAsCisgIDB4MTgsIDB4NzEsIDB4MzEsIDB4OTQsIDB4MWMsIDB4NmIsIDB4YzgsIDB4YTYsIDB4ZWUsIDB4MzAsIDB4ZTYsIDB4Y2MsCisgIDB4MTUsIDB4ODYsIDB4ODIsIDB4MTQsIDB4NGEsIDB4YjgsIDB4NDMsIDB4ZWEsIDB4OGYsIDB4YmQsIDB4Y2EsIDB4YTgsCisgIDB4MjUsIDB4ODgsIDB4MjIsIDB4YjksIDB4MWMsIDB4NzAsIDB4MzMsIDB4MzIsIDB4MzYsIDB4OGYsIDB4MDUsIDB4OTYsCisgIDB4ZTksIDB4MGUsIDB4YzQsIDB4NGEsIDB4NWMsIDB4ZWIsIDB4MGYsIDB4ZmEsIDB4NDEsIDB4OTcsIDB4NjUsIDB4NmQsCisgIDB4OGIsIDB4MzUsIDB4OTAsIDB4YTQsIDB4OWQsIDB4MTgsIDB4MzksIDB4MjIsIDB4ZTYsIDB4ZDMsIDB4MGQsIDB4NzIsCisgIDB4MGQsIDB4NGIsIDB4Y2QsIDB4ZTAsIDB4NzQsIDB4YzEsIDB4NGEsIDB4NTEsIDB4NzgsIDB4YTgsIDB4NWUsIDB4ZTQsCisgIDB4NzMsIDB4OWUsIDB4NmEsIDB4NDEsIDB4NDEsIDB4YjIsIDB4MmMsIDB4OTcsIDB4MjgsIDB4YzUsIDB4MzMsIDB4NTUsCisgIDB4MzYsIDB4NzIsIDB4ODAsIDB4M2YsIDB4NWQsIDB4N2IsIDB4NzYsIDB4ODYsIDB4ZjgsIDB4YjksIDB4YTIsIDB4NDksCisgIDB4N2QsIDB4ZmQsIDB4ZjYsIDB4ZjQsIDB4ZjIsIDB4ZTQsIDB4M2MsIDB4MGMsIDB4M2MsIDB4NDYsIDB4ZGYsIDB4OWQsCisgIDB4NWMsIDB4N2UsIDB4NGQsIDB4ZjYsIDB4M2EsIDB4MTcsIDB4ODAsIDB4M2YsIDB4ZTUsIDB4ZTgsIDB4Y2UsIDB4ZWIsCisgIDB4ZDcsIDB4MDcsIDB4NmYsIDB4MzgsIDB4NDMsIDB4ZmQsIDB4MGQsIDB4MzAsIDB4NzIsIDB4MDcsIDB4YjgsIDB4MzMsCisgIDB4YjAsIDB4MzYsIDB4YTIsIDB4MTksIDB4NjYsIDB4ZDEsIDB4ZTEsIDB4ZGMsIDB4ZTUsIDB4NDEsIDB4M2IsIDB4Y2EsCisgIDB4ZDAsIDB4ZDgsIDB4N2QsIDB4NTIsIDB4MmUsIDB4MzcsIDB4YWIsIDB4Y2YsIDB4MTEsIDB4MmYsIDB4YjgsIDB4ZGUsCisgIDB4MDksIDB4MWUsIDB4ZDgsIDB4YTcsIDB4ODMsIDB4NWQsIDB4Y2IsIDB4ZjcsIDB4MmMsIDB4OWUsIDB4ZTcsIDB4MjYsCisgIDB4MGQsIDB4MzksIDB4ZjIsIDB4ZTQsIDB4YzQsIDB4MzYsIDB4NDcsIDB4NGMsIDB4NTUsIDB4OGUsIDB4NmUsIDB4MWYsCisgIDB4YjksIDB4YzAsIDB4ODIsIDB4M2EsIDB4MTIsIDB4NTMsIDB4NjAsIDB4NTYsIDB4YzksIDB4NjQsIDB4Y2EsIDB4ZjQsCisgIDB4NGEsIDB4MjMsIDB4YzcsIDB4NjUsIDB4MWQsIDB4YjcsIDB4NGUsIDB4NWYsIDB4NDQsIDB4OTcsIDB4MTAsIDB4NTQsCisgIDB4Y2UsIDB4YmQsIDB4MzMsIDB4OTAsIDB4MmYsIDB4OWIsIDB4N2MsIDB4NWYsIDB4YmUsIDB4MzgsIDB4MGQsIDB4Y2YsCisgIDB4ZDMsIDB4N2EsIDB4OTEsIDB4NzEsIDB4MDMsIDB4OWEsIDB4NWQsIDB4ZTcsIDB4ODksIDB4ZGYsIDB4YjgsIDB4YzMsCisgIDB4MzMsIDB4NmIsIDB4YzYsIDB4M2MsIDB4YmYsIDB4YjgsIDB4ODEsIDB4YzksIDB4ZDksIDB4MzIsIDB4NjQsIDB4YjUsCisgIDB4MzYsIDB4YTQsIDB4MjUsIDB4ZDksIDB4NzIsIDB4ZjUsIDB4NmEsIDB4ZDQsIDB4NzMsIDB4YjYsIDB4MmYsIDB4NTYsCisgIDB4YTUsIDB4YTMsIDB4ZTksIDB4YjUsIDB4NzIsIDB4NmIsIDB4ZDQsIDB4OWMsIDB4YjUsIDB4YWMsIDB4ODAsIDB4MDYsCisgIDB4ZTAsIDB4N2EsIDB4MzUsIDB4MzUsIDB4NDYsIDB4YzcsIDB4MGMsIDB4NjUsIDB4NjksIDB4OGYsIDB4ZDUsIDB4MzIsCisgIDB4N2IsIDB4ZTUsIDB4YjgsIDB4M2IsIDB4MzMsIDB4YWYsIDB4OWUsIDB4YTUsIDB4NDYsIDB4MjEsIDB4MjEsIDB4OTIsCisgIDB4MjksIDB4NWMsIDB4N2MsIDB4Y2MsIDB4MTQsIDB4MjUsIDB4YmEsIDB4ZjIsIDB4N2MsIDB4OTQsIDB4YmMsIDB4NGYsCisgIDB4MzgsIDB4YmMsIDB4YzksIDB4N2YsIDB4ZmQsIDB4ZmIsIDB4ZjIsIDB4M2EsIDB4Y2MsIDB4OWEsIDB4OTIsIDB4OGEsCisgIDB4YzEsIDB4Y2IsIDB4YWUsIDB4OTUsIDB4NTUsIDB4NGUsIDB4NjAsIDB4YjEsIDB4OGEsIDB4YjQsIDB4NTAsIDB4NTksCisgIDB4YWQsIDB4MDcsIDB4NWEsIDB4N2QsIDB4NmMsIDB4NzcsIDB4ZGQsIDB4MDcsIDB4ZjUsIDB4ZjcsIDB4N2IsIDB4ZWQsCisgIDB4ZGYsIDB4ZWYsIDB4ODksIDB4YzcsIDB4ZjEsIDB4ZTQsIDB4ZmMsIDB4ZWUsIDB4MTMsIDB4YzcsIDB4YTcsIDB4MjksCisgIDB4YjksIDB4YzAsIDB4YTEsIDB4ZjUsIDB4NjYsIDB4MzYsIDB4MDEsIDB4NGIsIDB4MTgsIDB4M2YsIDB4MmEsIDB4NDcsCisgIDB4NGUsIDB4MmMsIDB4MmEsIDB4NTEsIDB4ZGMsIDB4ZmUsIDB4OGMsIDB4NDUsIDB4NWEsIDB4MTUsIDB4YzgsIDB4NzEsCisgIDB4YzQsIDB4MjMsIDB4ZjAsIDB4MTAsIDB4MGIsIDB4ODAsIDB4MTQsIDB4NzAsIDB4MmQsIDB4YTgsIDB4MjksIDB4M2UsCisgIDB4YWQsIDB4YTgsIDB4NDEsIDB4ZmEsIDB4ZmQsIDB4NTMsIDB4MDcsIDB4ZTgsIDB4ZjYsIDB4MmEsIDB4MGQsIDB4YzUsCisgIDB4YmUsIDB4MzQsIDB4YTMsIDB4NjYsIDB4OTgsIDB4MmUsIDB4ZWYsIDB4YWMsIDB4N2UsIDB4MmIsIDB4ZmQsIDB4ZjUsCisgIDB4MTMsIDB4NTcsIDB4ZTgsIDB4YTUsIDB4YWMsIDB4ODUsIDB4YTcsIDB4NmEsIDB4YzQsIDB4YjUsIDB4YTYsIDB4ZmIsCisgIDB4ZDEsIDB4MzksIDB4MDAsIDB4ZWMsIDB4NTgsIDB4MzEsIDB4MzgsIDB4Y2UsIDB4ZDcsIDB4NTEsIDB4YTMsIDB4NWYsCisgIDB4NDksIDB4MWQsIDB4ZGEsIDB4MWIsIDB4OTQsIDB4OWQsIDB4ODQsIDB4NmYsIDB4NzksIDB4OGUsIDB4ZWMsIDB4NGEsCisgIDB4YTgsIDB4YTMsIDB4NDAsIDB4YjcsIDB4ODQsIDB4OWMsIDB4ZjEsIDB4YmEsIDB4ZWEsIDB4M2YsIDB4ZWUsIDB4ZWQsCisgIDB4ZWMsIDB4ZWMsIDB4ZWUsIDB4ZWYsIDB4N2UsIDB4ZjYsIDB4N2MsIDB4NjcsIDB4N2YsIDB4NzcsIDB4NzcsIDB4NzcsCisgIDB4NmYsIDB4N2YsIDB4NzcsIDB4N2YsIDB4N2YsIDB4NmYsIDB4ZTcsIDB4YTcsIDB4NmQsIDB4NzYsIDB4MWQsIDB4ZGQsCisgIDB4YTUsIDB4YzksIDB4YmQsIDB4YzUsIDB4YTQsIDB4MjQsIDB4OWYsIDB4MGIsIDB4NjIsIDB4MmQsIDB4MzUsIDB4YjksCisgIDB4ZjUsIDB4ZWUsIDB4YWUsIDB4MzcsIDB4NWMsIDB4MzMsIDB4N2MsIDB4MWMsIDB4MzMsIDB4ODEsIDB4ODAsIDB4YWYsCisgIDB4ODUsIDB4OTAsIDB4NmMsIDB4ZTksIDB4YjMsIDB4MTUsIDB4YjEsIDB4MDcsIDB4MDMsIDB4YzIsIDB4NjQsIDB4ZjQsCisgIDB4ZWEsIDB4MWYsIDB4MmIsIDB4MWUsIDB4ZTksIDB4ODQsIDB4YWQsIDB4MDEsIDB4OTgsIDB4MzQsIDB4YTUsIDB4Y2IsCisgIDB4MGQsIDB4YmIsIDB4OWUsIDB4ZTcsIDB4OTMsIDB4MDksIDB4MDAsIDB4ZjAsIDB4MmUsIDB4M2QsIDB4NzIsIDB4MTQsCisgIDB4MzEsIDB4MzMsIDB4ZTcsIDB4YWQsIDB4ODgsIDB4ODQsIDB4MDYsIDB4MGQsIDB4MDAsIDB4NGYsIDB4OTMsIDB4OGQsCisgIDB4ZWUsIDB4NjcsIDB4NDcsIDB4ZWMsIDB4MmUsIDB4ODUsIDB4ZTQsIDB4NGUsIDB4NzMsIDB4NjYsIDB4YTgsIDB4OWYsCisgIDB4YjEsIDB4NTIsIDB4YTIsIDB4NDksIDB4MmEsIDB4NWMsIDB4ZGEsIDB4NDQsIDB4NzQsIDB4OTUsIDB4N2MsIDB4YjYsCisgIDB4YjMsIDB4YmYsIDB4Y2YsIDB4NDUsIDB4MjQsIDB4ZmUsIDB4YjQsIDB4M2IsIDB4NTAsIDB4NjQsIDB4NjEsIDB4MDgsCisgIDB4OTcsIDB4MWUsIDB4YjgsIDB4ZDMsIDB4NDksIDB4ZGEsIDB4ZTAsIDB4ZGIsIDB4NDcsIDB4MzgsIDB4Y2UsIDB4NmMsCisgIDB4YjUsIDB4NDgsIDB4MGEsIDB4YmQsIDB4ODcsIDB4ZTAsIDB4M2MsIDB4MTQsIDB4MDIsIDB4MTksIDB4MTYsIDB4NDYsCisgIDB4ZWIsIDB4YjIsIDB4N2IsIDB4MTYsIDB4NjUsIDB4NTEsIDB4ZTAsIDB4OTIsIDB4OTcsIDB4ZmMsIDB4MDYsIDB4N2YsCisgIDB4NzgsIDB4ZWEsIDB4M2UsIDB4YzcsIDB4NTYsIDB4YzksIDB4YTQsIDB4ZTAsIDB4MjQsIDB4M2YsIDB4MGMsIDB4ODMsCisgIDB4MWMsIDB4YWMsIDB4MTgsIDB4ZjksIDB4NmQsIDB4NjgsIDB4YWIsIDB4NmEsIDB4NGUsIDB4YzcsIDB4OGYsIDB4NDEsCisgIDB4ZTcsIDB4ZjcsIDB4OWUsIDB4ZWQsIDB4ZmUsIDB4MjQsIDB4NDAsIDB4MzYsIDB4MTYsIDB4NzAsIDB4M2YsIDB4MGIsCisgIDB4NWEsIDB4MjYsIDB4NmMsIDB4YTYsIDB4ZjYsIDB4ODgsIDB4YTQsIDB4ODEsIDB4YTksIDB4NjAsIDB4NmMsIDB4MjYsCisgIDB4YTMsIDB4ZWIsIDB4OTEsIDB4MTksIDB4MDksIDB4ZWEsIDB4MzgsIDB4MWMsIDB4ODQsIDB4NzAsIDB4NjIsIDB4NjEsCisgIDB4YjAsIDB4OTYsIDB4OTIsIDB4YjIsIDB4YjgsIDB4NzYsIDB4OTksIDB4NmYsIDB4YzgsIDB4N2MsIDB4YmIsIDB4ZTIsCisgIDB4OTcsIDB4YWMsIDB4ZDUsIDB4N2IsIDB4ZDksIDB4YTAsIDB4MjMsIDB4ZTMsIDB4ZTAsIDB4ZTQsIDB4OTQsIDB4ZjEsCisgIDB4MmEsIDB4YTcsIDB4NjQsIDB4ODEsIDB4OGQsIDB4NGQsIDB4OTUsIDB4MDEsIDB4ZDIsIDB4MDMsIDB4YmMsIDB4NGQsCisgIDB4OTYsIDB4ZjIsIDB4NjksIDB4M2EsIDB4NzAsIDB4ZDQsIDB4ZjIsIDB4MDYsIDB4OGIsIDB4ODcsIDB4NTksIDB4YzEsCisgIDB4N2UsIDB4NzcsIDB4YjEsIDB4Y2MsIDB4OTUsIDB4MDcsIDB4OGEsIDB4ZWMsIDB4NjEsIDB4ZDIsIDB4NjcsIDB4YTUsCisgIDB4YjgsIDB4NTMsIDB4NDAsIDB4YjcsIDB4YzgsIDB4M2MsIDB4YzQsIDB4ODgsIDB4NzEsIDB4YzAsIDB4ZTIsIDB4OTUsCisgIDB4ODksIDB4NDcsIDB4NjUsIDB4OGIsIDB4MjIsIDB4OTksIDB4MjcsIDB4NzcsIDB4ZWEsIDB4ZjcsIDB4MTAsIDB4ZjIsCisgIDB4YmEsIDB4YWYsIDB4MzQsIDB4YmMsIDB4MjAsIDB4ODUsIDB4ZWQsIDB4MmEsIDB4MWYsIDB4MjUsIDB4YTksIDB4NDUsCisgIDB4MzAsIDB4ZjgsIDB4OWIsIDB4ZGIsIDB4OTIsIDB4ZjcsIDB4ZWYsIDB4ZDMsIDB4YjksIDB4NTEsIDB4ZGIsIDB4ZGEsCisgIDB4MTEsIDB4MmUsIDB4NWIsIDB4MzQsIDB4ODcsIDB4ZGYsIDB4MWIsIDB4YjIsIDB4MDksIDB4YWEsIDB4MzgsIDB4YTQsCisgIDB4YjcsIDB4YTUsIDB4NjYsIDB4ZWMsIDB4MzYsIDB4NTEsIDB4ODEsIDB4NzIsIDB4OTUsIDB4YjcsIDB4ZDIsIDB4NDgsCisgIDB4ZTIsIDB4MTYsIDB4MWIsIDB4MTgsIDB4MjcsIDB4YTYsIDB4MzgsIDB4ZjMsIDB4ZDgsIDB4NmEsIDB4MTksIDB4YjAsCisgIDB4MGIsIDB4NDUsIDB4OGEsIDB4ZWYsIDB4OTIsIDB4YmQsIDB4YzQsIDB4Y2MsIDB4ZTcsIDB4MDMsIDB4NDksIDB4MGUsCisgIDB4YzIsIDB4MDEsIDB4OTQsIDB4Y2YsIDB4ZTksIDB4OWYsIDB4MDAsIDB4M2EsIDB4ZjAsIDB4YWMsIDB4ZTMsIDB4NTksCisgIDB4ZTYsIDB4ZjQsIDB4MGIsIDB4ZTAsIDB4NDcsIDB4ZjQsIDB4NGYsIDB4ODEsIDB4YmQsIDB4ZWEsIDB4YmYsIDB4ZDAsCisgIDB4NTQsIDB4YjEsIDB4MDIsIDB4NzUsIDB4ZTQsIDB4NDAsIDB4ODQsIDB4OTUsIDB4ZTMsIDB4MDEsIDB4ZDUsIDB4NzQsCisgIDB4ZTQsIDB4N2EsIDB4YWYsIDB4ZTEsIDB4MzgsIDB4ZTksIDB4ZmYsIDB4OTEsIDB4NDUsIDB4OGIsIDB4NGMsIDB4NGQsCisgIDB4ZTQsIDB4ODUsIDB4Y2QsIDB4YWUsIDB4YWMsIDB4YzIsIDB4NDQsIDB4MmEsIDB4NTksIDB4N2QsIDB4YjksIDB4NjIsCisgIDB4M2YsIDB4YjUsIDB4YWIsIDB4ZDQsIDB4YzAsIDB4YmQsIDB4NTgsIDB4YjAsIDB4NjgsIDB4MjUsIDB4NTIsIDB4MzQsCisgIDB4Y2UsIDB4MzUsIDB4Y2UsIDB4MDYsIDB4ZDcsIDB4OGEsIDB4NTYsIDB4NTcsIDB4NWEsIDB4M2YsIDB4Y2QsIDB4ZWYsCisgIDB4YjksIDB4ZTIsIDB4ZGQsIDB4ZDUsIDB4NTUsIDB4M2EsIDB4ZTUsIDB4NDIsIDB4MDYsIDB4OWUsIDB4MjIsIDB4OTIsCisgIDB4YjUsIDB4YWEsIDB4M2MsIDB4YjgsIDB4YjAsIDB4MzIsIDB4MWIsIDB4MzQsIDB4YjYsIDB4NjgsIDB4YjksIDB4OWEsCisgIDB4Y2MsIDB4NjksIDB4MmYsIDB4MTksIDB4NzAsIDB4NzEsIDB4MTQsIDB4MWQsIDB4NjAsIDB4OTYsIDB4YzgsIDB4MTYsCisgIDB4NDIsIDB4NzMsIDB4MTIsIDB4NjYsIDB4ODMsIDB4MzksIDB4ZDgsIDB4YzAsIDB4YzksIDB4NjksIDB4MzksIDB4NWUsCisgIDB4M2UsIDB4MjEsIDB4MTcsIDB4MjgsIDB4ZmQsIDB4YzcsIDB4OTgsIDB4YjAsIDB4NDUsIDB4OWUsIDB4MTksIDB4ZWMsCisgIDB4NzksIDB4NTUsIDB4MGEsIDB4NjEsIDB4OTgsIDB4ZDUsIDB4ZWUsIDB4ZGQsIDB4MTAsIDB4OWYsIDB4NjEsIDB4M2EsCisgIDB4NTcsIDB4ODYsIDB4NWUsIDB4MzUsIDB4OWMsIDB4ZjEsIDB4NDYsIDB4MzgsIDB4OTgsIDB4ZDksIDB4NzAsIDB4NzksCisgIDB4YjMsIDB4YjQsIDB4OTUsIDB4MzYsIDB4N2QsIDB4MjUsIDB4Y2EsIDB4NGMsIDB4ODEsIDB4YjYsIDB4MzgsIDB4ZGUsCisgIDB4Y2UsIDB4YmYsIDB4M2UsIDB4MWYsIDB4NDUsIDB4YzcsIDB4ZGMsIDB4OTIsIDB4ZjQsIDB4NDksIDB4Y2YsIDB4MjEsCisgIDB4ZGMsIDB4YTAsIDB4ZTgsIDB4NzcsIDB4MzQsIDB4ZDgsIDB4NmIsIDB4NTYsIDB4ZTAsIDB4NjcsIDB4MDUsIDB4ZmYsCisgIDB4MGIsIDB4YWQsIDB4ZTksIDB4MmYsIDB4YzUsIDB4NjksIDB4ODIsIDB4ZGYsIDB4ZDYsIDB4YmYsIDB4NGEsIDB4MGQsCisgIDB4MTksIDB4MjIsIDB4ZWUsIDB4MWMsIDB4N2YsIDB4YTcsIDB4YWQsIDB4NDIsIDB4ZGEsIDB4ZDEsIDB4MmQsIDB4OTMsCisgIDB4ZmYsIDB4NDIsIDB4NWUsIDB4ZDQsIDB4ZTgsIDB4MTUsIDB4ZTQsIDB4Y2QsIDB4ODgsIDB4OTQsIDB4MjYsIDB4NTQsCisgIDB4ZGYsIDB4ZjIsIDB4MDEsIDB4ZWIsIDB4ODcsIDB4MGIsIDB4MzcsIDB4MzgsIDB4MzksIDB4ZjQsIDB4NzgsIDB4OTAsCisgIDB4MDYsIDB4MDIsIDB4ZDEsIDB4NTIsIDB4ZjEsIDB4NzMsIDB4YzAsIDB4MWEsIDB4ZDksIDB4NTcsIDB4ODUsIDB4MTAsCisgIDB4MGIsIDB4MTQsIDB4ODksIDB4YzIsIDB4OTAsIDB4NzIsIDB4MGQsIDB4NjAsIDB4YzgsIDB4N2QsIDB4YTMsIDB4NGMsCisgIDB4MWEsIDB4ZGIsIDB4MzUsIDB4MzAsIDB4YWYsIDB4ZWMsIDB4MTcsIDB4NmMsIDB4MTQsIDB4NzMsIDB4NWYsIDB4NDgsCisgIDB4MDksIDB4ZDEsIDB4MTIsIDB4OGMsIDB4MzYsIDB4ZmUsIDB4NWYsIDB4ZmQsIDB4NGMsIDB4OTYsIDB4YjcsIDB4MGYsCisgIDB4MmEsIDB4MDIsIDB4MDAsCit9OworI2RlZmluZSBCVUZfU0laRSAweDEwMDAwCitzdGF0aWMgdm9pZHBmIHphbGxvY19mdW5jKHZvaWRwZiBvcGFxdWUsIHVuc2lnbmVkIGludCBpdGVtcywgdW5zaWduZWQgaW50IHNpemUpCit7CisgICh2b2lkKSBvcGFxdWU7CisgIC8qIG5vdCBhIHR5cG8sIGtlZXAgaXQgY2FsbG9jKCkgKi8KKyAgcmV0dXJuICh2b2lkcGYpIGNhbGxvYyhpdGVtcywgc2l6ZSk7Cit9CitzdGF0aWMgdm9pZCB6ZnJlZV9mdW5jKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpCit7CisgICh2b2lkKSBvcGFxdWU7CisgIGZyZWUocHRyKTsKK30KKy8qIERlY29tcHJlc3MgYW5kIHNlbmQgdG8gc3Rkb3V0IGEgZ3ppcC1jb21wcmVzc2VkIGJ1ZmZlciAqLwordm9pZCBodWdlaGVscCh2b2lkKQoreworICB1bnNpZ25lZCBjaGFyKiBidWY7CisgIGludCBzdGF0dXMsaGVhZGVybGVuOworICB6X3N0cmVhbSB6OworCisgIC8qIE1ha2Ugc3VyZSBubyBnemlwIG9wdGlvbnMgYXJlIHNldCAqLworICBpZiAoaHVnZWhlbHBnelszXSAmIDB4ZmUpCisgICAgcmV0dXJuOworCisgIGhlYWRlcmxlbiA9IDEwOworICBtZW1zZXQoJnosIDAsIHNpemVvZih6X3N0cmVhbSkpOworICB6LnphbGxvYyA9IChhbGxvY19mdW5jKXphbGxvY19mdW5jOworICB6LnpmcmVlID0gKGZyZWVfZnVuYyl6ZnJlZV9mdW5jOworICB6LmF2YWlsX2luID0gKHVuc2lnbmVkIGludCkoc2l6ZW9mKGh1Z2VoZWxwZ3opIC0gaGVhZGVybGVuKTsKKyAgei5uZXh0X2luID0gKHVuc2lnbmVkIGNoYXIgKilodWdlaGVscGd6ICsgaGVhZGVybGVuOworCisgIGlmIChpbmZsYXRlSW5pdDIoJnosIC1NQVhfV0JJVFMpICE9IFpfT0spCisgICAgcmV0dXJuOworCisgIGJ1ZiA9IG1hbGxvYyhCVUZfU0laRSk7CisgIGlmIChidWYpIHsKKyAgICB3aGlsZSgxKSB7CisgICAgICB6LmF2YWlsX291dCA9IEJVRl9TSVpFOworICAgICAgei5uZXh0X291dCA9IGJ1ZjsKKyAgICAgIHN0YXR1cyA9IGluZmxhdGUoJnosIFpfU1lOQ19GTFVTSCk7CisgICAgICBpZiAoc3RhdHVzID09IFpfT0sgfHwgc3RhdHVzID09IFpfU1RSRUFNX0VORCkgeworICAgICAgICBmd3JpdGUoYnVmLCBCVUZfU0laRSAtIHouYXZhaWxfb3V0LCAxLCBzdGRvdXQpOworICAgICAgICBpZiAoc3RhdHVzID09IFpfU1RSRUFNX0VORCkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgYnJlYWs7ICAgIC8qIEVycm9yICovCisgICAgfQorICAgIGZyZWUoYnVmKTsKKyAgfQorICBpbmZsYXRlRW5kKCZ6KTsKK30KKyNlbmRpZiAvKiBVU0VfTUFOVUFMICovCisjZW5kaWYgLyogSEFWRV9MSUJaICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvaHVnZWhlbHAuaCBiL2N1cmwtNy4yNS4wL3NyYy9odWdlaGVscC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MjgzNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvaHVnZWhlbHAuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX0hVR0VIRUxQX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfSFVHRUhFTFBfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKwordm9pZCBodWdlaGVscCh2b2lkKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX0hVR0VIRUxQX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy9tYWNvcy9NQUNJTlNUQUxMLlRYVCBiL2N1cmwtNy4yNS4wL3NyYy9tYWNvcy9NQUNJTlNUQUxMLlRYVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2RhMTMzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL21hY29zL01BQ0lOU1RBTEwuVFhUCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy9tYWNvcy9jdXJsLm1jcC54bWwuc2l0LmhxeCBiL2N1cmwtNy4yNS4wL3NyYy9tYWNvcy9jdXJsLm1jcC54bWwuc2l0LmhxeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTY1MGI5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL21hY29zL2N1cmwubWNwLnhtbC5zaXQuaHF4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy9tYWNvcy9zcmMvY3VybF9HVVNJQ29uZmlnLmNwcCBiL2N1cmwtNy4yNS4wL3NyYy9tYWNvcy9zcmMvY3VybF9HVVNJQ29uZmlnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzkzNzhhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL21hY29zL3NyYy9jdXJsX0dVU0lDb25maWcuY3BwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy9tYWNvcy9zcmMvbWFjb3NfbWFpbi5jcHAgYi9jdXJsLTcuMjUuMC9zcmMvbWFjb3Mvc3JjL21hY29zX21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMzA3NWYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvbWFjb3Mvc3JjL21hY29zX21haW4uY3BwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy9tYWtlZmlsZS5hbWlnYSBiL2N1cmwtNy4yNS4wL3NyYy9tYWtlZmlsZS5hbWlnYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzk4NDgxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL21ha2VmaWxlLmFtaWdhCkBAIC0wLDAgKzEsMzIgQEAKKyMKKyMgJFZFUjogY1VSTCBNYWtlZmlsZSBmb3IgQW1pZ2FPUyAuLi4KKyMKKworIyBjaGFuZ2UgdGhlIGZvbGxvdyB0byB3aGVyZSB5b3UgaGF2ZSB0aGUgQW1pVENQIFNESyB2NC4zIGluY2x1ZGVzOgorCitBVENQU0RLST0JL0dHL25ldGluY2x1ZGUKKworCitDQwk9CW02OGstYW1pZ2Fvcy1nY2MKK0NGTEFHUwk9CS1JJChBVENQU0RLSSkgLW02ODAyMC02MCAtTzIgLW1zb2Z0LWZsb2F0IC1ub2l4ZW11bCAtZyAtSS4gLUkuLi9pbmNsdWRlIC1XIC1XYWxsCitMSUJTCT0JLi4vbGliL2xpYmN1cmwuYSAtbHNzbCAtbGNyeXB0byAtbHoKK01BTlBBR0UgPQkuLi9kb2NzL2N1cmwuMQorUkVBRE1FCT0JLi4vZG9jcy9NQU5VQUwKK01LSEVMUAk9CS4uL3NyYy9ta2hlbHAucGwKKwordG9wX3NyY2RpciA9IC4uCisKK2luY2x1ZGUgTWFrZWZpbGUuaW5jCisKK09CSlMgPSAkKENVUkxfQ0ZJTEVTOi5jPS5vKSAkKENVUkxYX09ORVM6LmM9Lm8pCisKK2FsbDoJaHVnZWhlbHAuYyAkKE9CSlMpCisJJChDQykgJChDRkxBR1MpIC1vIGNVUkwgJChPQkpTKSAkKExJQlMpIC1XbCwtTWFwLGNVUkwubWFwLC0tY3JlZgorCitodWdlaGVscC5jOiAkKFJFQURNRSkgJChNQU5QQUdFKSAgbWtoZWxwLnBsCisJcm0gLWYgaHVnZWhlbHAuYworCS9iaW4vbnJvZmYgLW1hbiAkKE1BTlBBR0UpIHwgL2Jpbi9wZXJsICQoTUtIRUxQKSAtYyAkKFJFQURNRSkgPiBodWdlaGVscC5jCisKK2luc3RhbGw6CisJJChJTlNUQUxMKSAtYyBjVVJMIC9jL2NVUkwKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL21ha2VmaWxlLmRqIGIvY3VybC03LjI1LjAvc3JjL21ha2VmaWxlLmRqCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZTk1ODYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvbWFrZWZpbGUuZGoKQEAgLTAsMCArMSw4MyBAQAorIworIyAgQWRhcHRlZCBmb3IgZGpncHAyIC8gV2F0dC0zMiAvIERPUyBieQorIyAgR2lzbGUgVmFuZW0gPGd2YW5lbUBicm9hZHBhcmsubm8+CisjCisKK0RFUEVORF9QUkVSRVEgPSBjdXJsX2NvbmZpZy5oICMgaHVnZWhlbHAuYworCit0b3Bfc3JjZGlyID0gLi4KK1RPUERJUiA9IC4uCisKK2luY2x1ZGUgLi4vcGFja2FnZXMvRE9TL2NvbW1vbi5kagoraW5jbHVkZSBNYWtlZmlsZS5pbmMKKworQ1NPVVJDRVMgPSAkKENVUkxfQ0ZJTEVTKQorCitpZmVxICgkKFVTRV9TU0wpLDEpCisgIEVYX0xJQlMgKz0gJChPUEVOU1NMX1JPT1QpL2xpYi9saWJzc2wuYSAkKE9QRU5TU0xfUk9PVCkvbGliL2xpYmNyeXB0LmEKK2VuZGlmCisKK2lmZXEgKCQoVVNFX0FSRVMpLDEpCisgIEVYX0xJQlMgKz0gJChBUkVTX1JPT1QpL2xpYmNhcmVzLmEKK2VuZGlmCisKK2lmZXEgKCQoVVNFX1pMSUIpLDEpCisgIEVYX0xJQlMgKz0gJChaTElCX1JPT1QpL2xpYnouYQorICBDRkxBR1MgICs9IC1EVVNFX01BTlVBTAorZW5kaWYKKworaWZlcSAoJChVU0VfSUROQSksMSkKKyAgRVhfTElCUyArPSAkKExJQklETl9ST09UKS9saWIvZGpfb2JqL2xpYmlkbi5hIC1saWNvbnYKK2VuZGlmCisKK0VYX0xJQlMgKz0gJChXQVRUMzJfUk9PVCkvbGliL2xpYndhdHQuYQorCitDRkxBR1MgKz0gLURVU0VfRU5WSVJPTk1FTlQKKworUFJPR1JBTSAgPSBjdXJsLmV4ZQorT0JKRUNUUyArPSAkKGFkZHByZWZpeCAkKE9CSl9ESVIpLywgJChDU09VUkNFUzouYz0ubykpCisKK2FsbDogJChPQkpfRElSKSBjdXJsX2NvbmZpZy5oICQoUFJPR1JBTSkKKwlAZWNobyBXZWxjb21lIHRvIGNVUkwKKworJChQUk9HUkFNKTogJChPQkpFQ1RTKSAuLi9saWIvbGliY3VybC5hCisJJChDQykgLW8gJEAgJF4gJChMREZMQUdTKSAkKEVYX0xJQlMpCisKK2N1cmxfY29uZmlnLmg6CitpZmVxICgkKElTX1VOSVhfU0hFTEwpLDEpCisJQGVjaG8gJyNpbmNsdWRlICIuLi9saWIvY29uZmlnLWRvcy5oIicgPiAkQAorZWxzZQorCUBlY2hvICNpbmNsdWRlICIuLi9saWIvY29uZmlnLWRvcy5oIiA+ICRACitlbmRpZgorCisjCisjIGdyb2ZmIDEuMTgrIHJlcXVpcmVzICItUCAtYyIKKyMKK2h1Z2VoZWxwLmM6IC4uL2RvY3MvTUFOVUFMIC4uL2RvY3MvY3VybC4xIG1raGVscC5wbAorCWdyb2ZmIC1UYXNjaWkgLW1hbiAuLi9kb2NzL2N1cmwuMSB8IFwKKwlwZXJsIC13IG1raGVscC5wbCAuLi9kb2NzL01BTlVBTCA+ICRACisKKyMgY2xlYW4gZ2VuZXJhdGVkIGZpbGVzCisjCitnZW5jbGVhbjoKKwktICQoREVMRVRFKSBjdXJsX2NvbmZpZy5oCisJLSAkKERFTEVURSkgaHVnZWhlbHAuYworCisjIGNsZWFuIG9iamVjdCBmaWxlcyBhbmQgc3ViZGlyCisjCitvYmpjbGVhbjogZ2VuY2xlYW4KKwktICQoREVMRVRFKSAkKE9CSl9ESVIpJChEUykqLm8KKwktICQoUk1ESVIpICQoT0JKX0RJUikKKworIyBjbGVhbiB3aXRob3V0IHJlbW92aW5nIGJ1aWx0IHByb2dyYW0KKyMKK2NsZWFuOiBvYmpjbGVhbgorCS0gJChERUxFVEUpIGRlcGVuZC5kagorCisjIGNsZWFuIGV2ZXJ5dGhpbmcKKyMKK3JlYWxjbGVhbiB2Y2xlYW46IGNsZWFuCisJLSAkKERFTEVURSkgJChQUk9HUkFNKQorCistaW5jbHVkZSBkZXBlbmQuZGoKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL21raGVscC5wbCBiL2N1cmwtNy4yNS4wL3NyYy9ta2hlbHAucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0NjA0MQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy9ta2hlbHAucGwKQEAgLTAsMCArMSwyNjIgQEAKKyMhL3Vzci9sb2NhbC9iaW4vcGVybAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgWWVhaCwgSSBrbm93LCBwcm9iYWJseSAxMDAwIG90aGVyIHBlcnNvbnMgYWxyZWFkeSB3cm90ZSBhIHNjcmlwdCBsaWtlCisjIHRoaXMsIGJ1dCBJJ2xsIHRlbGwgeWE6CisKKyMgVEhFWSBET04nVCBGSVQgTUUgOi0pCisKKyMgR2V0IHJlYWRtZSBmaWxlIGFzIHBhcmFtZXRlcjoKKworaWYoJEFSR1ZbMF0gZXEgIi1jIikgeworICAgICRjPTE7CisgICAgc2hpZnQgQEFSR1Y7Cit9CisKK215ICRSRUFETUUgPSAkQVJHVlswXTsKKworaWYoJFJFQURNRSBlcSAiIikgeworICAgIHByaW50ICJ1c2FnZTogbWtyZWFkbWUucGwgWy1jXSA8UkVBRE1FPiA8IG1hbnBhZ2VcbiI7CisgICAgZXhpdDsKK30KKworCitwdXNoIEBvdXQsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgX1xuIjsKK3B1c2ggQG91dCwgIiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXFx8IHxcbiI7CitwdXNoIEBvdXQsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHxcbiI7CitwdXNoIEBvdXQsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX19cbiI7CitwdXNoIEBvdXQsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcX19ffFxcX19fL3xffCBcXF9cXF9fX19ffFxuIjsKKworbXkgJG9sZW49MDsKK3doaWxlICg8U1RESU4+KSB7CisgICAgbXkgJGxpbmUgPSAkXzsKKworICAgICMgdGhpcyBzaG91bGQgYmUgcmVtb3ZlZDoKKyAgICAkbGluZSA9fiBzLygILnxfCCkvL2c7CisKKyAgICBpZigkbGluZSA9fiAvXihbIFx0XSpcbnxjdXJsKS9pKSB7CisgICAgICAgICMgY3V0IG9mZiBoZWFkZXJzIGFuZCBlbXB0eSBsaW5lcworICAgICAgICAkd2xpbmUrKzsgIyBjb3VudCBudW1iZXIgb2YgY3V0IG9mZiBsaW5lcworICAgICAgICBuZXh0OworICAgIH0KKworICAgIG15ICR0ZXh0ID0gJGxpbmU7CisgICAgJHRleHQgPX4gcy9eXHMrLy9nOyAjIGN1dCBvZmYgcHJlY2VkaW5nLi4uCisgICAgJHRleHQgPX4gcy9ccyskLy9nOyAjIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcworCisgICAgJHRsZW4gPSBsZW5ndGgoJHRleHQpOworCisgICAgaWYoJHdsaW5lICYmICgkb2xlbiA9PSAkdGxlbikpIHsKKyAgICAgICAgIyBpZiB0aGUgcHJldmlvdXMgbGluZSB3aXRoIGNvbnRlbnRzIHdhcyBleGFjdGx5IGFzIGxvbmcgYXMKKyAgICAgICAgIyB0aGlzIGxpbmUsIHRoZW4gd2UgaWdub3JlIHRoZSBuZXdsaW5lcyEKKworICAgICAgICAjIFdlIGRvIHRoaXMgbWFnaWMgYmVjYXVzZSBhIGhlYWRlciBtYXkgYWJvcnQgYSBwYXJhZ3JhcGggYXQKKyAgICAgICAgIyBhbnkgbGluZSwgYnV0IHdlIGRvbid0IHdhbnQgdGhhdCB0byBiZSBub3RpY2VkIGluIHRoZSBvdXRwdXQKKyAgICAgICAgIyBoZXJlCisgICAgICAgICR3bGluZT0wOworICAgIH0KKyAgICAkb2xlbiA9ICR0bGVuOworCisgICAgaWYoJHdsaW5lKSB7CisgICAgICAgICMgd2Ugb25seSBtYWtlIG9uZSBlbXB0eSBsaW5lIG1heAorICAgICAgICAkd2xpbmUgPSAwOworICAgICAgICBwdXNoIEBvdXQsICJcbiI7CisgICAgfQorICAgIHB1c2ggQG91dCwgJGxpbmU7Cit9CitwdXNoIEBvdXQsICJcbiI7ICMganVzdCBhbiBleHRyYSBuZXdsaW5lCisKK29wZW4oUkVBRCwgIjwkUkVBRE1FIikgfHwKKyAgICBkaWUgImNvdWxkbid0IHJlYWQgdGhlIFJFQURNRSBpbmZpbGUgJFJFQURNRSI7CisKK3doaWxlKDxSRUFEPikgeworICAgIHB1c2ggQG91dCwgJF87Cit9CitjbG9zZShSRUFEKTsKKworIyBpZiBjb21wcmVzc2VkCitpZigkYykgeworICAgIG15IEB0ZXN0ID0gYGd6aXAgLS12ZXJzaW9uIDI+JjFgOworICAgIGlmKCR0ZXN0WzBdID1+IC9nemlwLykgeworICAgICAgICBvcGVuKEdaSVAsICI+ZHVtcGl0IikgfHwKKyAgICAgICAgICAgIGRpZSAiY2FuJ3QgY3JlYXRlIHRoZSBkdW1waXQgZmlsZSwgdHJ5IHdpdGhvdXQgLWMiOworICAgICAgICBiaW5tb2RlIEdaSVA7CisgICAgICAgIGZvcihAb3V0KSB7CisgICAgICAgICAgICBwcmludCBHWklQICRfOworICAgICAgICAgICAgJGd6aXAgKz0gbGVuZ3RoKCRfKTsKKyAgICAgICAgfQorICAgICAgICBjbG9zZShHWklQKTsKKworICAgICAgICBzeXN0ZW0oImd6aXAgLS1iZXN0IC0tbm8tbmFtZSBkdW1waXQiKTsKKworICAgICAgICBvcGVuKEdaSVAsICI8ZHVtcGl0Lmd6IikgfHwKKyAgICAgICAgICAgICBkaWUgImNhbid0IHJlYWQgdGhlIGR1bXBpdC5neiBmaWxlLCB0cnkgd2l0aG91dCAtYyI7CisgICAgICAgIGJpbm1vZGUgR1pJUDsKKyAgICAgICAgd2hpbGUoPEdaSVA+KSB7CisgICAgICAgICAgICBwdXNoIEBnemlwLCAkXzsKKyAgICAgICAgICAgICRnemlwcGVkICs9IGxlbmd0aCgkXyk7CisgICAgICAgIH0KKyAgICAgICAgY2xvc2UoR1pJUCk7CisKKyAgICAgICAgdW5saW5rKCJkdW1waXQuZ3oiKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgICMgbm8gZ3ppcCwgbm8gY29tcHJlc3Npb24hCisgICAgICAgIHVuZGVmICRjOworICAgICAgICBwcmludCBTVERFUlIgIk1FRUVQOiBDb3VsZG4ndCBmaW5kIGd6aXAsIGRpc2FibGUgY29tcHJlc3Npb25cbiI7CisgICAgfQorfQorCiskbm93ID0gbG9jYWx0aW1lOworcHJpbnQgPDxIRUFECisvKgorICogTkVWRVIgRVZFUiBlZGl0IHRoaXMgbWFudWFsbHksIGZpeCB0aGUgbWtoZWxwLnBsIHNjcmlwdCBpbnN0ZWFkIQorICogR2VuZXJhdGlvbiB0aW1lOiAkbm93CisgKi8KKyNpZmRlZiBVU0VfTUFOVUFMCisjaW5jbHVkZSAiaHVnZWhlbHAuaCIKK0hFQUQKKyAgICA7CitpZigkYykgeworICAgIHByaW50IDw8SEVBRAorI2luY2x1ZGUgPHpsaWIuaD4KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBodWdlaGVscGd6W10gPSB7CisgIC8qIFRoaXMgbXVtYm8tanVtYm8gaXMgdGhlIGh1Z2UgaGVscCB0ZXh0IGNvbXByZXNzZWQgd2l0aCBnemlwLgorICAgICBUaGFua3MgdG8gdGhpcyBvcGVyYXRpb24sIHRoZSBzaXplIG9mIHRoaXMgZGF0YSBzaHJ1bmsgZnJvbSAkZ3ppcAorICAgICB0byAkZ3ppcHBlZCBieXRlcy4gWW91IGNhbiBkaXNhYmxlIHRoZSB1c2Ugb2YgY29tcHJlc3NlZCBoZWxwCisgICAgIHRleHRzIGJ5IE5PVCBwYXNzaW5nIC1jIHRvIHRoZSBta2hlbHAucGwgdG9vbC4gKi8KK0hFQUQKKzsKKyAgICBteSAkYz0wOworICAgIHByaW50ICIgIjsKKyAgICBmb3IoQGd6aXApIHsKKyAgICAgICAgbXkgQGFsbD1zcGxpdCgvLywgJF8pOworICAgICAgICBmb3IoQGFsbCkgeworICAgICAgICAgICAgbXkgJG51bT1vcmQoJF8pOworICAgICAgICAgICAgcHJpbnRmKCIgMHglMDJ4LCIsIDArJG51bSk7CisgICAgICAgICAgICBpZigrKyRjPjExKSB7CisgICAgICAgICAgICAgICAgcHJpbnQgIlxuICI7CisgICAgICAgICAgICAgICAgJGM9MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBwcmludCAiXG59O1xuIjsKKworICAgIHByaW50IDw8RU9GCisjZGVmaW5lIEJVRl9TSVpFIDB4MTAwMDAKK3N0YXRpYyB2b2lkcGYgemFsbG9jX2Z1bmModm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaW50IGl0ZW1zLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKyAgKHZvaWQpIG9wYXF1ZTsKKyAgLyogbm90IGEgdHlwbywga2VlcCBpdCBjYWxsb2MoKSAqLworICByZXR1cm4gKHZvaWRwZikgY2FsbG9jKGl0ZW1zLCBzaXplKTsKK30KK3N0YXRpYyB2b2lkIHpmcmVlX2Z1bmModm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikKK3sKKyAgKHZvaWQpIG9wYXF1ZTsKKyAgZnJlZShwdHIpOworfQorLyogRGVjb21wcmVzcyBhbmQgc2VuZCB0byBzdGRvdXQgYSBnemlwLWNvbXByZXNzZWQgYnVmZmVyICovCit2b2lkIGh1Z2VoZWxwKHZvaWQpCit7CisgIHVuc2lnbmVkIGNoYXIqIGJ1ZjsKKyAgaW50IHN0YXR1cyxoZWFkZXJsZW47CisgIHpfc3RyZWFtIHo7CisKKyAgLyogTWFrZSBzdXJlIG5vIGd6aXAgb3B0aW9ucyBhcmUgc2V0ICovCisgIGlmIChodWdlaGVscGd6WzNdICYgMHhmZSkKKyAgICByZXR1cm47CisKKyAgaGVhZGVybGVuID0gMTA7CisgIG1lbXNldCgmeiwgMCwgc2l6ZW9mKHpfc3RyZWFtKSk7CisgIHouemFsbG9jID0gKGFsbG9jX2Z1bmMpemFsbG9jX2Z1bmM7CisgIHouemZyZWUgPSAoZnJlZV9mdW5jKXpmcmVlX2Z1bmM7CisgIHouYXZhaWxfaW4gPSAodW5zaWduZWQgaW50KShzaXplb2YoaHVnZWhlbHBneikgLSBoZWFkZXJsZW4pOworICB6Lm5leHRfaW4gPSAodW5zaWduZWQgY2hhciAqKWh1Z2VoZWxwZ3ogKyBoZWFkZXJsZW47CisKKyAgaWYgKGluZmxhdGVJbml0MigmeiwgLU1BWF9XQklUUykgIT0gWl9PSykKKyAgICByZXR1cm47CisKKyAgYnVmID0gbWFsbG9jKEJVRl9TSVpFKTsKKyAgaWYgKGJ1ZikgeworICAgIHdoaWxlKDEpIHsKKyAgICAgIHouYXZhaWxfb3V0ID0gQlVGX1NJWkU7CisgICAgICB6Lm5leHRfb3V0ID0gYnVmOworICAgICAgc3RhdHVzID0gaW5mbGF0ZSgmeiwgWl9TWU5DX0ZMVVNIKTsKKyAgICAgIGlmIChzdGF0dXMgPT0gWl9PSyB8fCBzdGF0dXMgPT0gWl9TVFJFQU1fRU5EKSB7CisgICAgICAgIGZ3cml0ZShidWYsIEJVRl9TSVpFIC0gei5hdmFpbF9vdXQsIDEsIHN0ZG91dCk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gWl9TVFJFQU1fRU5EKQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBicmVhazsgICAgLyogRXJyb3IgKi8KKyAgICB9CisgICAgZnJlZShidWYpOworICB9CisgIGluZmxhdGVFbmQoJnopOworfQorRU9GCisgICAgOworZm9vdCgpOworZXhpdDsKK30KK2Vsc2UgeworICAgIHByaW50IDw8SEVBRAordm9pZCBodWdlaGVscCh2b2lkKQoreworICAgZnB1dHMoCitIRUFECisgICAgICAgICA7Cit9CisKKyRvdXRzaXplPTA7Citmb3IoQG91dCkgeworICAgIGNob3A7CisKKyAgICAkbmV3ID0gJF87CisKKyAgICAkb3V0c2l6ZSArPSBsZW5ndGgoJG5ldykrMTsgIyBvbmUgZm9yIHRoZSBuZXdsaW5lCisKKyAgICAkbmV3ID1+IHMvXFwvXFxcXC9nOworICAgICRuZXcgPX4gcy9cIi9cXFwiL2c7CisKKyAgICAjIGdjYyAyLjk2IGNsYWltcyBJU08gQzg5IG9ubHkgaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCA1MDkgbGV0dGVyIHN0cmluZ3MKKyAgICBpZigkb3V0c2l6ZSA+IDUwMCkgeworICAgICAgICAjIHRlcm1pbmF0ZSBhbmQgbWFrZSBhbm90aGVyIGZwdXRzKCkgY2FsbCBoZXJlCisgICAgICAgIHByaW50ICIsIHN0ZG91dCk7XG4gZnB1dHMoXG4iOworICAgICAgICAkb3V0c2l6ZT1sZW5ndGgoJG5ldykrMTsKKyAgICB9CisgICAgcHJpbnRmKCJcIiVzXFxuXCJcbiIsICRuZXcpOworCit9CisKK3ByaW50ICIsIHN0ZG91dCkgO1xufVxuIjsKKworZm9vdCgpOworCitzdWIgZm9vdCB7CisgIHByaW50IDw8Rk9PVAorI2VuZGlmIC8qIFVTRV9NQU5VQUwgKi8KK0ZPT1QKKyAgOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3NldHVwLmggYi9jdXJsLTcuMjUuMC9zcmMvc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmIwNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3NldHVwLmgKQEAgLTAsMCArMSwyOTYgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfU1JDX1NFVFVQX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfU1JDX1NFVFVQX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIENVUkxfTk9fT0xESUVTCisKKy8qCisgKiBEZWZpbmUgV0lOMzIgd2hlbiBidWlsZCB0YXJnZXQgaXMgV2luMzIgQVBJCisgKi8KKworI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1dJTjMyX18pKSAmJiAhZGVmaW5lZChXSU4zMikgJiYgXAorICAhZGVmaW5lZChfX1NZTUJJQU4zMl9fKQorI2RlZmluZSBXSU4zMgorI2VuZGlmCisKKy8qCisgKiBJbmNsdWRlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IHJlc3VsdHMgb3IgaGFuZC1jcmFmdGVkCisgKiBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHBsYXRmb3JtcyB3aGljaCBsYWNrIGNvbmZpZyB0b29sLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY3VybF9jb25maWcuaCIKKyNlbHNlCisKKyNpZmRlZiBXSU4zMgorI2luY2x1ZGUgImNvbmZpZy13aW4zMi5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKG1hY2ludG9zaCkgJiYgZGVmaW5lZChfX01SQ19fKQorIyAgaW5jbHVkZSAiY29uZmlnLW1hYy5oIgorI2VuZGlmCisKKyNpZmRlZiBfX3Jpc2Nvc19fCisjaW5jbHVkZSAiY29uZmlnLXJpc2Nvcy5oIgorI2VuZGlmCisKKyNpZmRlZiBfX0FNSUdBX18KKyNpbmNsdWRlICJjb25maWctYW1pZ2Fvcy5oIgorI2VuZGlmCisKKyNpZmRlZiBfX1NZTUJJQU4zMl9fCisjaW5jbHVkZSAiY29uZmlnLXN5bWJpYW4uaCIKKyNlbmRpZgorCisjaWZkZWYgVFBGCisjaW5jbHVkZSAiY29uZmlnLXRwZi5oIgorI2VuZGlmCisKKyNlbmRpZiAvKiBIQVZFX0NPTkZJR19IICovCisKKy8qCisgKiBBSVggNC4zIGFuZCBuZXdlciBuZWVkcyBfVEhSRUFEX1NBRkUgZGVmaW5lZCB0byBidWlsZAorICogcHJvcGVyIHJlZW50cmFudCBjb2RlLiBPdGhlcnMgbWF5IGFsc28gbmVlZCBpdC4KKyAqLworCisjaWZkZWYgTkVFRF9USFJFQURfU0FGRQorIyAgaWZuZGVmIF9USFJFQURfU0FGRQorIyAgICBkZWZpbmUgX1RIUkVBRF9TQUZFCisjICBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBUcnU2NCBuZWVkcyBfUkVFTlRSQU5UIHNldCBmb3IgYSBmZXcgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQKKyAqIHRoaW5ncyB0byBhcHBlYXIgaW4gdGhlIHN5c3RlbSBoZWFkZXIgZmlsZXMuIFVuaXh3YXJlIG5lZWRzIGl0CisgKiB0byBidWlsZCBwcm9wZXIgcmVlbnRyYW50IGNvZGUuIE90aGVycyBtYXkgYWxzbyBuZWVkIGl0LgorICovCisKKyNpZmRlZiBORUVEX1JFRU5UUkFOVAorIyAgaWZuZGVmIF9SRUVOVFJBTlQKKyMgICAgZGVmaW5lIF9SRUVOVFJBTlQKKyMgIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIEluY2x1ZGUgaGVhZGVyIGZpbGVzIGZvciB3aW5kb3dzIGJ1aWxkcyBiZWZvcmUgcmVkZWZpbmluZyBhbnl0aGluZy4KKyAqIFVzZSB0aGlzIHByZXByb2Vzc29yIGJsb2NrIG9ubHkgdG8gaW5jbHVkZSBvciBleGNsdWRlIHdpbmRvd3MuaCwKKyAqIHdpbnNvY2syLmgsIHdzMnRjcGlwLmggb3Igd2luc29jay5oLiBBbnkgb3RoZXIgd2luZG93cyB0aGluZyBiZWxvbmdzCisgKiB0byBhbnkgb3RoZXIgZnVydGhlciBhbmQgaW5kZXBlbmRlbnQgYmxvY2suICBVbmRlciBDeWd3aW4gdGhpbmdzIHdvcmsKKyAqIGp1c3QgYXMgdW5kZXIgbGludXggKGUuZy4gPHN5cy9zb2NrZXQuaD4pIGFuZCB0aGUgd2luc29jayBoZWFkZXJzIHNob3VsZAorICogbmV2ZXIgYmUgaW5jbHVkZWQgd2hlbiBfX0NZR1dJTl9fIGlzIGRlZmluZWQuICBjb25maWd1cmUgc2NyaXB0IHRha2VzCisgKiBjYXJlIG9mIHRoaXMsIG5vdCBkZWZpbmluZyBIQVZFX1dJTkRPV1NfSCwgSEFWRV9XSU5TT0NLX0gsIEhBVkVfV0lOU09DSzJfSCwKKyAqIG5laXRoZXIgSEFWRV9XUzJUQ1BJUF9IIHdoZW4gX19DWUdXSU5fXyBpcyBkZWZpbmVkLgorICovCisKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorIyAgaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgICAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgIGVuZGlmCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjICBpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyMgICAgaW5jbHVkZSA8d2luc29jazIuaD4KKyMgICAgaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjICAgICAgIGluY2x1ZGUgPHdzMnRjcGlwLmg+CisjICAgIGVuZGlmCisjICBlbHNlCisjICAgIGlmZGVmIEhBVkVfV0lOU09DS19ICisjICAgICAgaW5jbHVkZSA8d2luc29jay5oPgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKgorICogRGVmaW5lIFVTRV9XSU5TT0NLIHRvIDIgaWYgd2UgaGF2ZSBhbmQgdXNlIFdJTlNPQ0syIEFQSSwgZWxzZQorICogZGVmaW5lIFVTRV9XSU5TT0NLIHRvIDEgaWYgd2UgaGF2ZSBhbmQgdXNlIFdJTlNPQ0sgIEFQSSwgZWxzZQorICogdW5kZWZpbmUgVVNFX1dJTlNPQ0suCisgKi8KKworI3VuZGVmIFVTRV9XSU5TT0NLCisKKyNpZmRlZiBIQVZFX1dJTlNPQ0syX0gKKyMgIGRlZmluZSBVU0VfV0lOU09DSyAyCisjZWxzZQorIyAgaWZkZWYgSEFWRV9XSU5TT0NLX0gKKyMgICAgZGVmaW5lIFVTRV9XSU5TT0NLIDEKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFVTRV9MV0lQU09DSworIyAgaW5jbHVkZSA8bHdpcC9zb2NrZXRzLmg+CisjICBpbmNsdWRlIDxsd2lwL25ldGRiLmg+CisjZW5kaWYKKworI2lmZGVmIFRQRgorIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgLyogY2hhbmdlIHdoaWNoIHNlbGVjdCBpcyB1c2VkIGZvciB0aGUgY3VybCBjb21tYW5kIGxpbmUgdG9vbCAqLworIyAgZGVmaW5lIHNlbGVjdChhLGIsYyxkLGUpIHRwZl9zZWxlY3RfYnNkKGEsYixjLGQsZSkKKyAgIC8qIGFuZCB0dXJuIG9mZiB0aGUgcHJvZ3Jlc3MgbWV0ZXIgKi8KKyMgIGRlZmluZSBDT05GX0RFRkFVTFQgKDB8Q09ORl9OT1BST0dSRVNTKQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfQVNTRVJUX0gKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisKKyNpZmRlZiBfX1RBTkRFTQorI2luY2x1ZGUgPGZsb3NzLmg+CisjZW5kaWYKKworLyoKKyAqIExhcmdlIGZpbGUgKD4yR2IpIHN1cHBvcnQgdXNpbmcgV0lOMzIgZnVuY3Rpb25zLgorICovCisKKyNpZmRlZiBVU0VfV0lOMzJfTEFSR0VfRklMRVMKKyMgIGluY2x1ZGUgPGlvLmg+CisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjICB1bmRlZiAgbHNlZWsKKyMgIGRlZmluZSBsc2VlayhmZGVzLG9mZnNldCx3aGVuY2UpICBfbHNlZWtpNjQoZmRlcywgb2Zmc2V0LCB3aGVuY2UpCisjICBkZWZpbmUgZnN0YXQoZmRlcyxzdHApICAgICAgICAgICAgX2ZzdGF0aTY0KGZkZXMsIHN0cCkKKyMgIGRlZmluZSBzdGF0KGZuYW1lLHN0cCkgICAgICAgICAgICBfc3RhdGk2NChmbmFtZSwgc3RwKQorIyAgZGVmaW5lIHN0cnVjdF9zdGF0ICAgICAgICAgICAgICAgIHN0cnVjdCBfc3RhdGk2NAorIyAgZGVmaW5lIExTRUVLX0VSUk9SICAgICAgICAgICAgICAgIChfX2ludDY0KS0xCisjZW5kaWYKKworLyoKKyAqIFNtYWxsIGZpbGUgKDwyR2IpIHN1cHBvcnQgdXNpbmcgV0lOMzIgZnVuY3Rpb25zLgorICovCisKKyNpZmRlZiBVU0VfV0lOMzJfU01BTExfRklMRVMKKyMgIGluY2x1ZGUgPGlvLmg+CisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjICB1bmRlZiAgbHNlZWsKKyMgIGRlZmluZSBsc2VlayhmZGVzLG9mZnNldCx3aGVuY2UpICBfbHNlZWsoZmRlcywgKGxvbmcpb2Zmc2V0LCB3aGVuY2UpCisjICBkZWZpbmUgZnN0YXQoZmRlcyxzdHApICAgICAgICAgICAgX2ZzdGF0KGZkZXMsIHN0cCkKKyMgIGRlZmluZSBzdGF0KGZuYW1lLHN0cCkgICAgICAgICAgICBfc3RhdChmbmFtZSwgc3RwKQorIyAgZGVmaW5lIHN0cnVjdF9zdGF0ICAgICAgICAgICAgICAgIHN0cnVjdCBfc3RhdAorIyAgZGVmaW5lIExTRUVLX0VSUk9SICAgICAgICAgICAgICAgIChsb25nKS0xCisjZW5kaWYKKworI2lmbmRlZiBzdHJ1Y3Rfc3RhdAorIyAgZGVmaW5lIHN0cnVjdF9zdGF0IHN0cnVjdCBzdGF0CisjZW5kaWYKKworI2lmbmRlZiBMU0VFS19FUlJPUgorIyAgZGVmaW5lIExTRUVLX0VSUk9SIChvZmZfdCktMQorI2VuZGlmCisKKyNpZm5kZWYgT1MKKyNkZWZpbmUgT1MgInVua25vd24iCisjZW5kaWYKKworI2lmICFkZWZpbmVkKGZpbGVubykgJiYgIWRlZmluZWQoV0lOMzIpIC8qIHN1bm9zIDQgaGF2ZSB0aGlzIGFzIGEgbWFjcm8hICovCitpbnQgZmlsZW5vKCBGSUxFICpzdHJlYW0pOworI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorI2RlZmluZSBESVJfQ0hBUiAgICAgICJcXCIKKyNkZWZpbmUgRE9UX0NIQVIgICAgICAiXyIKKyNlbHNlCisjaWZkZWYgX19FTVhfXworLyogMjAwMDAzMTggbWdzCisgKiBPUy8yIHN1cHBvcnRzIGxlYWRpbmcgZG90cyBpbiBmaWxlbmFtZXMgaWYgdGhlIHZvbHVtZSBpcyBmb3JtYXR0ZWQKKyAqIHdpdGggSkZTIG9yIEhQRlMuICovCisjZGVmaW5lIERJUl9DSEFSICAgICAgIlxcIgorI2RlZmluZSBET1RfQ0hBUiAgICAgICIuIgorI2Vsc2UKKworI2lmZGVmIERKR1BQCisjaW5jbHVkZSA8dGNwLmg+CisjaWZkZWYgd29yZAorI3VuZGVmIHdvcmQKKyNlbmRpZgorI2RlZmluZSBESVJfQ0hBUiAgICAgICIvIgorI2RlZmluZSBET1RfQ0hBUiAgICAgICJfIgorI2Vsc2UKKworI2RlZmluZSBESVJfQ0hBUiAgICAgICIvIgorI2RlZmluZSBET1RfQ0hBUiAgICAgICIuIgorCisjZW5kaWYgLyogIURKR1BQICovCisjZW5kaWYgLyogIV9fRU1YX18gKi8KKyNlbmRpZiAvKiAhV0lOMzIgKi8KKworI2lmZGVmIF9fcmlzY29zX18KKyNkZWZpbmUgVVNFX0VOVklST05NRU5UCisjZW5kaWYKKworI2lmZGVmIF9fQkVPU19fCisjZGVmaW5lIHR5cGVkZWZfYm9vbAorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChORVRXQVJFKSAmJiAhZGVmaW5lZChfX05PVkVMTF9MSUJDX18pKQorI2luY2x1ZGUgPHN5cy90aW1ldmFsLmg+CisjZW5kaWYKKworI2lmbmRlZiBVTlBSSU5UQUJMRV9DSEFSCisvKiBkZWZpbmUgd2hhdCB0byB1c2UgZm9yIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUgVU5QUklOVEFCTEVfQ0hBUiAnLicKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfU1RSRFVQCisjaW5jbHVkZSAic3RyZHVwLmgiCisjZGVmaW5lIHN0cmR1cChwdHIpIGN1cmx4X3N0cmR1cChwdHIpCisjZW5kaWYKKworLyogRGVmaW5lIFNfSVNSRUcgaWYgbm90IGRlZmluZWQgYnkgc3lzdGVtIGhlYWRlcnMsIGYuZS4gTVNWQyAqLworI2lmICFkZWZpbmVkKFNfSVNSRUcpICYmIGRlZmluZWQoU19JRk1UKSAmJiBkZWZpbmVkKFNfSUZSRUcpCisjZGVmaW5lIFNfSVNSRUcobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZSRUcpCisjZW5kaWYKKworLyoKKyAqIEluY2x1ZGUgbWFjcm9zIGFuZCBkZWZpbmVzIHRoYXQgc2hvdWxkIG9ubHkgYmUgcHJvY2Vzc2VkIG9uY2UuCisgKi8KKworI2lmbmRlZiBfX1NFVFVQX09OQ0VfSAorI2luY2x1ZGUgInNldHVwX29uY2UuaCIKKyNlbmRpZgorCisvKgorICogRGVmaW5pdGlvbiBvZiBvdXIgTk9QIHN0YXRlbWVudCBPYmplY3QtbGlrZSBtYWNybworICovCisKKyNpZm5kZWYgQ3VybF9ub3Bfc3RtdAorIyAgZGVmaW5lIEN1cmxfbm9wX3N0bXQgZG8geyB9IFdISUxFX0ZBTFNFCisjZW5kaWYKKworLyoKKyAqIEVuc3VyZSB0aGF0IFdpbnNvY2sgYW5kIGx3SVAgVENQL0lQIHN0YWNrcyBhcmUgbm90IG1peGVkLgorICovCisKKyNpZiBkZWZpbmVkKF9fTFdJUF9PUFRfSF9fKQorIyAgaWYgZGVmaW5lZChTT0NLRVQpIHx8IFwKKyAgICAgZGVmaW5lZChVU0VfV0lOU09DSykgfHwgXAorICAgICBkZWZpbmVkKEhBVkVfRVJSTk9fSCkgfHwgXAorICAgICBkZWZpbmVkKEhBVkVfV0lOU09DS19IKSB8fCBcCisgICAgIGRlZmluZWQoSEFWRV9XSU5TT0NLMl9IKSB8fCBcCisgICAgIGRlZmluZWQoSEFWRV9XUzJUQ1BJUF9IKQorIyAgICBlcnJvciAiV2luc29jayBhbmQgbHdJUCBUQ1AvSVAgc3RhY2sgZGVmaW5pdGlvbnMgc2hhbGwgbm90IGNvZXhpc3QhIgorIyAgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfU1JDX1NFVFVQX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfYmlubW9kZS5jIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfYmlubW9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NDIyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9iaW5tb2RlLmMKQEAgLTAsMCArMSw1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU0VUTU9ERQorCisjaWZkZWYgSEFWRV9JT19ICisjICBpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgIGluY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInRvb2xfYmlubW9kZS5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCit2b2lkIHNldF9iaW5tb2RlKEZJTEUgKnN0cmVhbSkKK3sKKyNpZmRlZiBPX0JJTkFSWQorIyAgaWZkZWYgX19ISUdIQ19fCisgIF9zZXRtb2RlKHN0cmVhbSwgT19CSU5BUlkpOworIyAgZWxzZQorICBzZXRtb2RlKGZpbGVubyhzdHJlYW0pLCBPX0JJTkFSWSk7CisjICBlbmRpZgorI2Vsc2UKKyAgKHZvaWQpc3RyZWFtOworI2VuZGlmCit9CisKKyNlbmRpZiAvKiBIQVZFX1NFVE1PREUgKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfYmlubW9kZS5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfYmlubW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDIyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9iaW5tb2RlLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9UT09MX0JJTk1PREVfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX0JJTk1PREVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfU0VUTU9ERQorCit2b2lkIHNldF9iaW5tb2RlKEZJTEUgKnN0cmVhbSk7CisKKyNlbHNlCisKKyNkZWZpbmUgc2V0X2Jpbm1vZGUoeCkgQ3VybF9ub3Bfc3RtdAorCisjZW5kaWYgLyogSEFWRV9TRVRNT0RFICovCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9UT09MX0JJTk1PREVfSCAqLworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9ibmFtZS5jIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfYm5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWM2ZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfYm5hbWUuYwpAQCAtMCwwICsxLDUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSAidG9vbF9ibmFtZS5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCisjaWZuZGVmIEhBVkVfQkFTRU5BTUUKKworY2hhciAqdG9vbF9iYXNlbmFtZShjaGFyICpwYXRoKQoreworICBjaGFyICpzMTsKKyAgY2hhciAqczI7CisKKyAgczEgPSBzdHJyY2hyKHBhdGgsICcvJyk7CisgIHMyID0gc3RycmNocihwYXRoLCAnXFwnKTsKKworICBpZihzMSAmJiBzMikgeworICAgIHBhdGggPSAoczEgPiBzMikgPyBzMSArIDEgOiBzMiArIDE7CisgIH0KKyAgZWxzZSBpZihzMSkKKyAgICBwYXRoID0gczEgKyAxOworICBlbHNlIGlmKHMyKQorICAgIHBhdGggPSBzMiArIDE7CisKKyAgcmV0dXJuIHBhdGg7Cit9CisKKyNlbmRpZiAvKiBIQVZFX0JBU0VOQU1FICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX2JuYW1lLmggYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9ibmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkN2JhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9ibmFtZS5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfVE9PTF9CTkFNRV9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfQk5BTUVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmbmRlZiBIQVZFX0JBU0VOQU1FCisKK2NoYXIgKnRvb2xfYmFzZW5hbWUoY2hhciAqcGF0aCk7CisKKyNkZWZpbmUgYmFzZW5hbWUoeCkgdG9vbF9iYXNlbmFtZSgoeCkpCisKKyNlbmRpZiAvKiBIQVZFX0JBU0VOQU1FICovCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9UT09MX0JOQU1FX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2JfZGJnLmMgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl9kYmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWM5YTczCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2JfZGJnLmMKQEAgLTAsMCArMSwyNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCisvKiB1c2Ugb3VyIG93biBwcmludGYoKSBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJjdXJseC5oIgorCisjaW5jbHVkZSAidG9vbF9jZmdhYmxlLmgiCisjaW5jbHVkZSAidG9vbF9tc2dzLmgiCisjaW5jbHVkZSAidG9vbF9jYl9kYmcuaCIKKyNpbmNsdWRlICJ0b29sX3V0aWwuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiIC8qIGtlZXAgdGhpcyBhcyBMQVNUIGluY2x1ZGUgKi8KKworc3RhdGljIHZvaWQgZHVtcChjb25zdCBjaGFyICp0aW1lYnVmLCBjb25zdCBjaGFyICp0ZXh0LAorICAgICAgICAgICAgICAgICBGSUxFICpzdHJlYW0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0ciwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgIHRyYWNlIHRyYWNldHlwZSwgY3VybF9pbmZvdHlwZSBpbmZvdHlwZSk7CisKKy8qCisqKiBjYWxsYmFjayBmb3IgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OCisqLworCitpbnQgdG9vbF9kZWJ1Z19jYihDVVJMICpoYW5kbGUsIGN1cmxfaW5mb3R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmRhdGEpCit7CisgIHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZyA9IHVzZXJkYXRhOworICBGSUxFICpvdXRwdXQgPSBjb25maWctPmVycm9yczsKKyAgY29uc3QgY2hhciAqdGV4dDsKKyAgc3RydWN0IHRpbWV2YWwgdHY7CisgIHN0cnVjdCB0bSAqbm93OworICBjaGFyIHRpbWVidWZbMjBdOworICB0aW1lX3Qgc2VjczsKKyAgc3RhdGljIHRpbWVfdCBlcG9jaF9vZmZzZXQ7CisgIHN0YXRpYyBpbnQgICAga25vd25fb2Zmc2V0OworCisgICh2b2lkKWhhbmRsZTsgLyogbm90IHVzZWQgKi8KKworICBpZihjb25maWctPnRyYWNldGltZSkgeworICAgIHR2ID0gdHZub3coKTsKKyAgICBpZigha25vd25fb2Zmc2V0KSB7CisgICAgICBlcG9jaF9vZmZzZXQgPSB0aW1lKE5VTEwpIC0gdHYudHZfc2VjOworICAgICAga25vd25fb2Zmc2V0ID0gMTsKKyAgICB9CisgICAgc2VjcyA9IGVwb2NoX29mZnNldCArIHR2LnR2X3NlYzsKKyAgICBub3cgPSBsb2NhbHRpbWUoJnNlY3MpOyAgLyogbm90IHRocmVhZCBzYWZlIGJ1dCB3ZSBkb24ndCBjYXJlICovCisgICAgc25wcmludGYodGltZWJ1Ziwgc2l6ZW9mKHRpbWVidWYpLCAiJTAyZDolMDJkOiUwMmQuJTA2bGQgIiwKKyAgICAgICAgICAgICBub3ctPnRtX2hvdXIsIG5vdy0+dG1fbWluLCBub3ctPnRtX3NlYywgKGxvbmcpdHYudHZfdXNlYyk7CisgIH0KKyAgZWxzZQorICAgIHRpbWVidWZbMF0gPSAwOworCisgIGlmKCFjb25maWctPnRyYWNlX3N0cmVhbSkgeworICAgIC8qIG9wZW4gZm9yIGFwcGVuZCAqLworICAgIGlmKGN1cmx4X3N0cmVxdWFsKCItIiwgY29uZmlnLT50cmFjZV9kdW1wKSkKKyAgICAgIGNvbmZpZy0+dHJhY2Vfc3RyZWFtID0gc3Rkb3V0OworICAgIGVsc2UgaWYoY3VybHhfc3RyZXF1YWwoIiUiLCBjb25maWctPnRyYWNlX2R1bXApKQorICAgICAgLyogT2ssIHRoaXMgaXMgc29tZXdoYXQgaGFja2lzaCBidXQgd2UgZG8gaXQgdW5kb2N1bWVudGVkIGZvciBub3cgKi8KKyAgICAgIGNvbmZpZy0+dHJhY2Vfc3RyZWFtID0gY29uZmlnLT5lcnJvcnM7ICAvKiBha2Egc3RkZXJyICovCisgICAgZWxzZSB7CisgICAgICBjb25maWctPnRyYWNlX3N0cmVhbSA9IGZvcGVuKGNvbmZpZy0+dHJhY2VfZHVtcCwgInciKTsKKyAgICAgIGNvbmZpZy0+dHJhY2VfZm9wZW5lZCA9IFRSVUU7CisgICAgfQorICB9CisKKyAgaWYoY29uZmlnLT50cmFjZV9zdHJlYW0pCisgICAgb3V0cHV0ID0gY29uZmlnLT50cmFjZV9zdHJlYW07CisKKyAgaWYoIW91dHB1dCkgeworICAgIHdhcm5mKGNvbmZpZywgIkZhaWxlZCB0byBjcmVhdGUvb3BlbiBvdXRwdXQiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlmKGNvbmZpZy0+dHJhY2V0eXBlID09IFRSQUNFX1BMQUlOKSB7CisgICAgLyoKKyAgICAgKiBUaGlzIGlzIHRoZSB0cmFjZSBsb29rIHRoYXQgaXMgc2ltaWxhciB0byB3aGF0IGxpYmN1cmwgbWFrZXMgb24gaXRzCisgICAgICogb3duLgorICAgICAqLworICAgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc19pbmZvdHlwZVtdID0geworICAgICAgIioiLCAiPCIsICI+IiwgInsiLCAifSIsICJ7IiwgIn0iCisgICAgfTsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3Qgc3QgPSAwOworICAgIHN0YXRpYyBib29sIG5ld2wgPSBGQUxTRTsKKyAgICBzdGF0aWMgYm9vbCB0cmFjZWRfZGF0YSA9IEZBTFNFOworCisgICAgc3dpdGNoKHR5cGUpIHsKKyAgICBjYXNlIENVUkxJTkZPX0hFQURFUl9PVVQ6CisgICAgICBmb3IoaSA9IDA7IGkgPCBzaXplIC0gMTsgaSsrKSB7CisgICAgICAgIGlmKGRhdGFbaV0gPT0gJ1xuJykgeyAvKiBMRiAqLworICAgICAgICAgIGlmKCFuZXdsKSB7CisgICAgICAgICAgICBmcHJpbnRmKG91dHB1dCwgIiVzJXMgIiwgdGltZWJ1Ziwgc19pbmZvdHlwZVt0eXBlXSk7CisgICAgICAgICAgfQorICAgICAgICAgICh2b2lkKWZ3cml0ZShkYXRhICsgc3QsIGkgLSBzdCArIDEsIDEsIG91dHB1dCk7CisgICAgICAgICAgc3QgPSBpICsgMTsKKyAgICAgICAgICBuZXdsID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmKCFuZXdsKQorICAgICAgICBmcHJpbnRmKG91dHB1dCwgIiVzJXMgIiwgdGltZWJ1Ziwgc19pbmZvdHlwZVt0eXBlXSk7CisgICAgICAodm9pZClmd3JpdGUoZGF0YSArIHN0LCBpIC0gc3QgKyAxLCAxLCBvdXRwdXQpOworICAgICAgbmV3bCA9IChzaXplICYmIChkYXRhW3NpemUgLSAxXSAhPSAnXG4nKSkgPyBUUlVFIDogRkFMU0U7CisgICAgICB0cmFjZWRfZGF0YSA9IEZBTFNFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMSU5GT19URVhUOgorICAgIGNhc2UgQ1VSTElORk9fSEVBREVSX0lOOgorICAgICAgaWYoIW5ld2wpCisgICAgICAgIGZwcmludGYob3V0cHV0LCAiJXMlcyAiLCB0aW1lYnVmLCBzX2luZm90eXBlW3R5cGVdKTsKKyAgICAgICh2b2lkKWZ3cml0ZShkYXRhLCBzaXplLCAxLCBvdXRwdXQpOworICAgICAgbmV3bCA9IChzaXplICYmIChkYXRhW3NpemUgLSAxXSAhPSAnXG4nKSkgPyBUUlVFIDogRkFMU0U7CisgICAgICB0cmFjZWRfZGF0YSA9IEZBTFNFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMSU5GT19EQVRBX09VVDoKKyAgICBjYXNlIENVUkxJTkZPX0RBVEFfSU46CisgICAgY2FzZSBDVVJMSU5GT19TU0xfREFUQV9JTjoKKyAgICBjYXNlIENVUkxJTkZPX1NTTF9EQVRBX09VVDoKKyAgICAgIGlmKCF0cmFjZWRfZGF0YSkgeworICAgICAgICAvKiBpZiB0aGUgZGF0YSBpcyBvdXRwdXQgdG8gYSB0dHkgYW5kIHdlJ3JlIHNlbmRpbmcgdGhpcyBkZWJ1ZyB0cmFjZQorICAgICAgICAgICB0byBzdGRlcnIgb3Igc3Rkb3V0LCB3ZSBkb24ndCBkaXNwbGF5IHRoZSBhbGVydCBhYm91dCB0aGUgZGF0YSBub3QKKyAgICAgICAgICAgYmVpbmcgc2hvd24gYXMgdGhlIGRhdGEgX2lzXyBzaG93biB0aGVuIGp1c3Qgbm90IHZpYSB0aGlzCisgICAgICAgICAgIGZ1bmN0aW9uICovCisgICAgICAgIGlmKCFjb25maWctPmlzYXR0eSB8fAorICAgICAgICAgICAoKG91dHB1dCAhPSBzdGRlcnIpICYmIChvdXRwdXQgIT0gc3Rkb3V0KSkpIHsKKyAgICAgICAgICBpZighbmV3bCkKKyAgICAgICAgICAgIGZwcmludGYob3V0cHV0LCAiJXMlcyAiLCB0aW1lYnVmLCBzX2luZm90eXBlW3R5cGVdKTsKKyAgICAgICAgICBmcHJpbnRmKG91dHB1dCwgIltkYXRhIG5vdCBzaG93bl1cbiIpOworICAgICAgICAgIG5ld2wgPSBGQUxTRTsKKyAgICAgICAgICB0cmFjZWRfZGF0YSA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IC8qIG5hZGEgKi8KKyAgICAgIG5ld2wgPSBGQUxTRTsKKyAgICAgIHRyYWNlZF9kYXRhID0gRkFMU0U7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgIC8qIFNwZWNpYWwgcHJvY2Vzc2luZyBpcyBuZWVkZWQgZm9yIENVUkxJTkZPX0hFQURFUl9PVVQgYmxvY2tzCisgICAqIGlmIHRoZXkgY29udGFpbiBib3RoIGhlYWRlcnMgYW5kIGRhdGEgKHNlcGFyYXRlZCBieSBDUkxGQ1JMRikuCisgICAqIFdlIGR1bXAgdGhlIGhlYWRlciB0ZXh0IGFuZCB0aGVuIHN3aXRjaCB0eXBlIHRvIENVUkxJTkZPX0RBVEFfT1VULgorICAgKi8KKyAgaWYoKHR5cGUgPT0gQ1VSTElORk9fSEVBREVSX09VVCkgJiYgKHNpemUgPiA0KSkgeworICAgIHNpemVfdCBpOworICAgIGZvcihpID0gMDsgaSA8IHNpemUgLSA0OyBpKyspIHsKKyAgICAgIGlmKG1lbWNtcCgmZGF0YVtpXSwgIlxyXG5cclxuIiwgNCkgPT0gMCkgeworICAgICAgICAvKiBkdW1wIGV2ZXJ5dGhpbmcgdGhyb3VnaCB0aGUgQ1JMRkNSTEYgYXMgYSBzZW50IGhlYWRlciAqLworICAgICAgICB0ZXh0ID0gIj0+IFNlbmQgaGVhZGVyIjsKKyAgICAgICAgZHVtcCh0aW1lYnVmLCB0ZXh0LCBvdXRwdXQsIGRhdGEsIGkgKyA0LCBjb25maWctPnRyYWNldHlwZSwgdHlwZSk7CisgICAgICAgIGRhdGEgKz0gaSArIDM7CisgICAgICAgIHNpemUgLT0gaSArIDQ7CisgICAgICAgIHR5cGUgPSBDVVJMSU5GT19EQVRBX09VVDsKKyAgICAgICAgZGF0YSArPSAxOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKyNlbmRpZiAvKiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMgKi8KKworICBzd2l0Y2ggKHR5cGUpIHsKKyAgY2FzZSBDVVJMSU5GT19URVhUOgorICAgIGZwcmludGYob3V0cHV0LCAiJXM9PSBJbmZvOiAlcyIsIHRpbWVidWYsIGRhdGEpOworICBkZWZhdWx0OiAvKiBpbiBjYXNlIGEgbmV3IG9uZSBpcyBpbnRyb2R1Y2VkIHRvIHNob2NrIHVzICovCisgICAgcmV0dXJuIDA7CisKKyAgY2FzZSBDVVJMSU5GT19IRUFERVJfT1VUOgorICAgIHRleHQgPSAiPT4gU2VuZCBoZWFkZXIiOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0RBVEFfT1VUOgorICAgIHRleHQgPSAiPT4gU2VuZCBkYXRhIjsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19IRUFERVJfSU46CisgICAgdGV4dCA9ICI8PSBSZWN2IGhlYWRlciI7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fREFUQV9JTjoKKyAgICB0ZXh0ID0gIjw9IFJlY3YgZGF0YSI7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fU1NMX0RBVEFfSU46CisgICAgdGV4dCA9ICI8PSBSZWN2IFNTTCBkYXRhIjsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19TU0xfREFUQV9PVVQ6CisgICAgdGV4dCA9ICI9PiBTZW5kIFNTTCBkYXRhIjsKKyAgICBicmVhazsKKyAgfQorCisgIGR1bXAodGltZWJ1ZiwgdGV4dCwgb3V0cHV0LCBkYXRhLCBzaXplLCBjb25maWctPnRyYWNldHlwZSwgdHlwZSk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IGNoYXIgKnRpbWVidWYsIGNvbnN0IGNoYXIgKnRleHQsCisgICAgICAgICAgICAgICAgIEZJTEUgKnN0cmVhbSwgY29uc3QgdW5zaWduZWQgY2hhciAqcHRyLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgdHJhY2UgdHJhY2V0eXBlLCBjdXJsX2luZm90eXBlIGluZm90eXBlKQoreworICBzaXplX3QgaTsKKyAgc2l6ZV90IGM7CisKKyAgdW5zaWduZWQgaW50IHdpZHRoID0gMHgxMDsKKworICBpZih0cmFjZXR5cGUgPT0gVFJBQ0VfQVNDSUkpCisgICAgLyogd2l0aG91dCB0aGUgaGV4IG91dHB1dCwgd2UgY2FuIGZpdCBtb3JlIG9uIHNjcmVlbiAqLworICAgIHdpZHRoID0gMHg0MDsKKworICBmcHJpbnRmKHN0cmVhbSwgIiVzJXMsICV6ZCBieXRlcyAoMHglengpXG4iLCB0aW1lYnVmLCB0ZXh0LCBzaXplLCBzaXplKTsKKworICBmb3IoaSA9IDA7IGkgPCBzaXplOyBpICs9IHdpZHRoKSB7CisKKyAgICBmcHJpbnRmKHN0cmVhbSwgIiUwNHp4OiAiLCBpKTsKKworICAgIGlmKHRyYWNldHlwZSA9PSBUUkFDRV9CSU4pIHsKKyAgICAgIC8qIGhleCBub3QgZGlzYWJsZWQsIHNob3cgaXQgKi8KKyAgICAgIGZvcihjID0gMDsgYyA8IHdpZHRoOyBjKyspCisgICAgICAgIGlmKGkrYyA8IHNpemUpCisgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlMDJ4ICIsIHB0cltpK2NdKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGZwdXRzKCIgICAiLCBzdHJlYW0pOworICAgIH0KKworICAgIGZvcihjID0gMDsgKGMgPCB3aWR0aCkgJiYgKGkrYyA8IHNpemUpOyBjKyspIHsKKyAgICAgIC8qIGNoZWNrIGZvciAwRDBBOyBpZiBmb3VuZCwgc2tpcCBwYXN0IGFuZCBzdGFydCBhIG5ldyBsaW5lIG9mIG91dHB1dCAqLworICAgICAgaWYoKHRyYWNldHlwZSA9PSBUUkFDRV9BU0NJSSkgJiYKKyAgICAgICAgIChpK2MrMSA8IHNpemUpICYmIChwdHJbaStjXSA9PSAweDBEKSAmJiAocHRyW2krYysxXSA9PSAweDBBKSkgeworICAgICAgICBpICs9IChjKzItd2lkdGgpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyNpZmRlZiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMKKyAgICAgIC8qIHJlcGVhdCB0aGUgMEQwQSBjaGVjayBhYm92ZSBidXQgdXNlIHRoZSBob3N0IGVuY29kaW5nIGZvciBDUkxGICovCisgICAgICBpZigodHJhY2V0eXBlID09IFRSQUNFX0FTQ0lJKSAmJgorICAgICAgICAgKGkrYysxIDwgc2l6ZSkgJiYgKHB0cltpK2NdID09ICdccicpICYmIChwdHJbaStjKzFdID09ICdcbicpKSB7CisgICAgICAgIGkgKz0gKGMrMi13aWR0aCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgLyogY29udmVydCB0byBob3N0IGVuY29kaW5nIGFuZCBwcmludCB0aGlzIGNoYXJhY3RlciAqLworICAgICAgZnByaW50ZihzdHJlYW0sICIlYyIsIGNvbnZlcnRfY2hhcihpbmZvdHlwZSwgcHRyW2krY10pKTsKKyNlbHNlCisgICAgICAodm9pZClpbmZvdHlwZTsKKyAgICAgIGZwcmludGYoc3RyZWFtLCAiJWMiLCAoKHB0cltpK2NdID49IDB4MjApICYmIChwdHJbaStjXSA8IDB4ODApKSA/CisgICAgICAgICAgICAgIHB0cltpK2NdIDogVU5QUklOVEFCTEVfQ0hBUik7CisjZW5kaWYgLyogQ1VSTF9ET0VTX0NPTlZFUlNJT05TICovCisgICAgICAvKiBjaGVjayBhZ2FpbiBmb3IgMEQwQSwgdG8gYXZvaWQgYW4gZXh0cmEgXG4gaWYgaXQncyBhdCB3aWR0aCAqLworICAgICAgaWYoKHRyYWNldHlwZSA9PSBUUkFDRV9BU0NJSSkgJiYKKyAgICAgICAgIChpK2MrMiA8IHNpemUpICYmIChwdHJbaStjKzFdID09IDB4MEQpICYmIChwdHJbaStjKzJdID09IDB4MEEpKSB7CisgICAgICAgIGkgKz0gKGMrMy13aWR0aCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBmcHV0YygnXG4nLCBzdHJlYW0pOyAvKiBuZXdsaW5lICovCisgIH0KKyAgZmZsdXNoKHN0cmVhbSk7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX2RiZy5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2JfZGJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0NDQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX2RiZy5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfVE9PTF9DQl9EQkdfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX0NCX0RCR19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisvKgorKiogY2FsbGJhY2sgZm9yIENVUkxPUFRfREVCVUdGVU5DVElPTgorKi8KKworaW50IHRvb2xfZGVidWdfY2IoQ1VSTCAqaGFuZGxlLCBjdXJsX2luZm90eXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJkYXRhKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfQ0JfREJHX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2JfaGRyLmMgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl9oZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWE3MzM4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2JfaGRyLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2luY2x1ZGUgInJhd3N0ci5oIgorCisjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKKy8qIHVzZSBvdXIgb3duIHByaW50ZigpIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgImN1cmx4LmgiCisKKyNpbmNsdWRlICJ0b29sX2NmZ2FibGUuaCIKKyNpbmNsdWRlICJ0b29sX21zZ3MuaCIKKyNpbmNsdWRlICJ0b29sX2NiX2hkci5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCitzdGF0aWMgY2hhciAqcGFyc2VfZmlsZW5hbWUoY29uc3QgY2hhciAqcHRyLCBzaXplX3QgbGVuKTsKKworLyoKKyoqIGNhbGxiYWNrIGZvciBDVVJMT1BUX0hFQURFUkZVTkNUSU9OCisqLworCitzaXplX3QgdG9vbF9oZWFkZXJfY2Iodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICp1c2VyZGF0YSkKK3sKKyAgc3RydWN0IE91dFN0cnVjdCAqb3V0cyA9IHVzZXJkYXRhOworICBjb25zdCBjaGFyICpzdHIgPSBwdHI7CisgIGNvbnN0IHNpemVfdCBjYiA9IHNpemUgKiBubWVtYjsKKyAgY29uc3QgY2hhciAqZW5kID0gKGNoYXIqKXB0ciArIGNiOworCisgIC8qCisgICAqIE9uY2UgdGhhdCBsaWJjdXJsIGhhcyBjYWxsZWQgYmFjayB0b29sX2hlYWRlcl9jYigpIHRoZSByZXR1cm5lZCB2YWx1ZQorICAgKiBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGFtb3VudCB0aGF0IHdhcyBpbnRlbmRlZCB0byBiZSB3cml0dGVuLCBpZgorICAgKiBpdCBkb2VzIG5vdCBtYXRjaCB0aGVuIGl0IGZhaWxzIHdpdGggQ1VSTEVfV1JJVEVfRVJST1IuIFNvIGF0IHRoaXMKKyAgICogcG9pbnQgcmV0dXJuaW5nIGEgdmFsdWUgZGlmZmVyZW50IGZyb20gc3oqbm1lbWIgaW5kaWNhdGVzIGZhaWx1cmUuCisgICAqLworICBzaXplX3QgZmFpbHVyZSA9IChzaXplICogbm1lbWIpID8gMCA6IDE7CisKKyAgaWYoIW91dHMtPmNvbmZpZykKKyAgICByZXR1cm4gZmFpbHVyZTsKKworI2lmZGVmIERFQlVHQlVJTEQKKyAgaWYoc2l6ZSAqIG5tZW1iID4gKHNpemVfdClDVVJMX01BWF9IVFRQX0hFQURFUikgeworICAgIHdhcm5mKG91dHMtPmNvbmZpZywgIkhlYWRlciBkYXRhIGV4Y2VlZHMgc2luZ2xlIGNhbGwgd3JpdGUgbGltaXQhXG4iKTsKKyAgICByZXR1cm4gZmFpbHVyZTsKKyAgfQorI2VuZGlmCisKKyAgaWYoKGNiID4gMjApICYmIGNoZWNrcHJlZml4KCJDb250ZW50LWRpc3Bvc2l0aW9uOiIsIHN0cikpIHsKKyAgICBjb25zdCBjaGFyICpwID0gc3RyICsgMjA7CisKKyAgICAvKiBsb29rIGZvciB0aGUgJ2ZpbGVuYW1lPScgcGFyYW1ldGVyCisgICAgICAgKGVuY29kZWQgZmlsZW5hbWVzICgqPSkgYXJlIG5vdCBzdXBwb3J0ZWQpICovCisgICAgZm9yKDs7KSB7CisgICAgICBjaGFyICpmaWxlbmFtZTsKKyAgICAgIHNpemVfdCBsZW47CisKKyAgICAgIHdoaWxlKCpwICYmIChwIDwgZW5kKSAmJiAhSVNBTFBIQSgqcCkpCisgICAgICAgIHArKzsKKyAgICAgIGlmKHAgPiBlbmQgLSA5KQorICAgICAgICBicmVhazsKKworICAgICAgaWYobWVtY21wKHAsICJmaWxlbmFtZT0iLCA5KSkgeworICAgICAgICAvKiBubyBtYXRjaCwgZmluZCBuZXh0IHBhcmFtZXRlciAqLworICAgICAgICB3aGlsZSgocCA8IGVuZCkgJiYgKCpwICE9ICc7JykpCisgICAgICAgICAgcCsrOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIHAgKz0gOTsKKworICAgICAgLyogdGhpcyBleHByZXNzaW9uIGJlbG93IHR5cGVjYXN0cyAnY2InIG9ubHkgdG8gYXZvaWQKKyAgICAgICAgIHdhcm5pbmc6IHNpZ25lZCBhbmQgdW5zaWduZWQgdHlwZSBpbiBjb25kaXRpb25hbCBleHByZXNzaW9uCisgICAgICAqLworICAgICAgbGVuID0gKHNzaXplX3QpY2IgLSAocCAtIHN0cik7CisgICAgICBmaWxlbmFtZSA9IHBhcnNlX2ZpbGVuYW1lKHAsIGxlbik7CisgICAgICBpZihmaWxlbmFtZSkgeworICAgICAgICBvdXRzLT5maWxlbmFtZSA9IGZpbGVuYW1lOworICAgICAgICBvdXRzLT5hbGxvY19maWxlbmFtZSA9IFRSVUU7CisgICAgICAgIG91dHMtPnNfaXNyZWcgPSBUUlVFOworICAgICAgICBvdXRzLT5mb3BlbmVkID0gRkFMU0U7CisgICAgICAgIG91dHMtPnN0cmVhbSA9IE5VTEw7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFpbHVyZTsKKyAgICB9CisgIH0KKworICByZXR1cm4gY2I7Cit9CisKKy8qCisgKiBDb3BpZXMgYSBmaWxlIG5hbWUgcGFydCBhbmQgcmV0dXJucyBhbiBBTExPQ0FURUQgZGF0YSBidWZmZXIuCisgKi8KK3N0YXRpYyBjaGFyICpwYXJzZV9maWxlbmFtZShjb25zdCBjaGFyICpwdHIsIHNpemVfdCBsZW4pCit7CisgIGNoYXIgKmNvcHk7CisgIGNoYXIgKnA7CisgIGNoYXIgKnE7CisgIGNoYXIgIHN0b3AgPSAnXDAnOworCisgIC8qIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBzdHJuZHVwKCkgKi8KKyAgY29weSA9IG1hbGxvYyhsZW4rMSk7CisgIGlmKCFjb3B5KQorICAgIHJldHVybiBOVUxMOworICBtZW1jcHkoY29weSwgcHRyLCBsZW4pOworICBjb3B5W2xlbl0gPSAnXDAnOworCisgIHAgPSBjb3B5OworICBpZigqcCA9PSAnXCcnIHx8ICpwID09ICciJykgeworICAgIC8qIHN0b3JlIHRoZSBzdGFydGluZyBxdW90ZSAqLworICAgIHN0b3AgPSAqcDsKKyAgICBwKys7CisgIH0KKyAgZWxzZQorICAgIHN0b3AgPSAnOyc7CisKKyAgLyogaWYgdGhlIGZpbGVuYW1lIGNvbnRhaW5zIGEgcGF0aCwgb25seSB1c2UgZmlsZW5hbWUgcG9ydGlvbiAqLworICBxID0gc3RycmNocihjb3B5LCAnLycpOworICBpZihxKSB7CisgICAgcCA9IHEgKyAxOworICAgIGlmKCEqcCkgeworICAgICAgQ3VybF9zYWZlZnJlZShjb3B5KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorCisgIC8qIElmIHRoZSBmaWxlbmFtZSBjb250YWlucyBhIGJhY2tzbGFzaCwgb25seSB1c2UgZmlsZW5hbWUgcG9ydGlvbi4gVGhlIGlkZWEKKyAgICAgaXMgdGhhdCBldmVuIHN5c3RlbXMgdGhhdCBkb24ndCBoYW5kbGUgYmFja3NsYXNoZXMgYXMgcGF0aCBzZXBhcmF0b3JzCisgICAgIHByb2JhYmx5IHdhbnQgdGhlIHBhdGggcmVtb3ZlZCBmb3IgY29udmVuaWVuY2UuICovCisgIHEgPSBzdHJyY2hyKHAsICdcXCcpOworICBpZihxKSB7CisgICAgcCA9IHEgKyAxOworICAgIGlmKCEqcCkgeworICAgICAgQ3VybF9zYWZlZnJlZShjb3B5KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorCisgIC8qIHNjYW4gZm9yIHRoZSBlbmQgbGV0dGVyIGFuZCBzdG9wIHRoZXJlICovCisgIHEgPSBwOworICB3aGlsZSgqcSkgeworICAgIGlmKHFbMV0gJiYgKHFbMF0gPT0gJ1xcJykpCisgICAgICBxKys7CisgICAgZWxzZSBpZihxWzBdID09IHN0b3ApCisgICAgICBicmVhazsKKyAgICBxKys7CisgIH0KKyAgKnEgPSAnXDAnOworCisgIC8qIG1ha2Ugc3VyZSB0aGUgZmlsZSBuYW1lIGRvZXNuJ3QgZW5kIGluIFxyIG9yIFxuICovCisgIHEgPSBzdHJjaHIocCwgJ1xyJyk7CisgIGlmKHEpCisgICAgKnEgPSAnXDAnOworCisgIHEgPSBzdHJjaHIocCwgJ1xuJyk7CisgIGlmKHEpCisgICAgKnEgPSAnXDAnOworCisgIGlmKGNvcHkgIT0gcCkKKyAgICBtZW1tb3ZlKGNvcHksIHAsIHN0cmxlbihwKSArIDEpOworCisgIC8qIGluIGNhc2Ugd2UgYnVpbHQgZGVidWcgZW5hYmxlZCwgd2UgYWxsb3cgYW4gZXZpcm9ubWVudCB2YXJpYWJsZQorICAgKiBuYW1lZCBDVVJMX1RFU1RESVIgdG8gcHJlZml4IHRoZSBnaXZlbiBmaWxlIG5hbWUgdG8gcHV0IGl0IGludG8gYQorICAgKiBzcGVjaWZpYyBkaXJlY3RvcnkKKyAgICovCisjaWZkZWYgREVCVUdCVUlMRAorICB7CisgICAgY2hhciAqdGRpciA9IGN1cmx4X2dldGVudigiQ1VSTF9URVNURElSIik7CisgICAgaWYodGRpcikgeworICAgICAgY2hhciBidWZmZXJbNTEyXTsgLyogc3VpdGFibHkgbGFyZ2UgKi8KKyAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlcy8lcyIsIHRkaXIsIGNvcHkpOworICAgICAgQ3VybF9zYWZlZnJlZShjb3B5KTsKKyAgICAgIGNvcHkgPSBzdHJkdXAoYnVmZmVyKTsgLyogY2xvbmUgdGhlIGJ1ZmZlciwgd2UgZG9uJ3QgdXNlIHRoZSBsaWJjdXJsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcmludGYoKSBvciBzaW1pbGFyIHNpbmNlIHdlIHdhbnQgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lIG1lbW9yeSBjb2RlIGFzIHRoZSAicmVhbCIgcGFyc2VfZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKi8KKyAgICAgIGN1cmxfZnJlZSh0ZGlyKTsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIHJldHVybiBjb3B5OworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl9oZHIuaCBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX2hkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MDhhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl9oZHIuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfQ0JfSERSX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVE9PTF9DQl9IRFJfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworLyoKKyoqIGNhbGxiYWNrIGZvciBDVVJMT1BUX0hFQURFUkZVTkNUSU9OCisqLworCitzaXplX3QgdG9vbF9oZWFkZXJfY2Iodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICp1c2VyZGF0YSk7CisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9UT09MX0NCX0hEUl9IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX3ByZy5jIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2JfcHJnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3YzFhNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX3ByZy5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNkZWZpbmUgRU5BQkxFX0NVUkxYX1BSSU5URgorLyogdXNlIG91ciBvd24gcHJpbnRmKCkgZnVuY3Rpb25zICovCisjaW5jbHVkZSAiY3VybHguaCIKKworI2luY2x1ZGUgInRvb2xfY2ZnYWJsZS5oIgorI2luY2x1ZGUgInRvb2xfY2JfcHJnLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKKy8qCisqKiBjYWxsYmFjayBmb3IgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OCisqLworCisjZGVmaW5lIE1BWF9CQVJMRU5HVEggMjU2CisKK2ludCB0b29sX3Byb2dyZXNzX2NiKHZvaWQgKmNsaWVudHAsCisgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGx0b3RhbCwgZG91YmxlIGRsbm93LAorICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHVsdG90YWwsIGRvdWJsZSB1bG5vdykKK3sKKyAgLyogVGhlIG9yaWdpbmFsIHByb2dyZXNzLWJhciBzb3VyY2UgY29kZSB3YXMgd3JpdHRlbiBmb3IgY3VybCBieSBMYXJzIEFhcywKKyAgICAgYW5kIHRoaXMgbmV3IGVkaXRpb24gaW5oZXJpdHMgc29tZSBvZiBoaXMgY29uY2VwdHMuICovCisKKyAgY2hhciBsaW5lW01BWF9CQVJMRU5HVEgrMV07CisgIGNoYXIgZm9ybWF0WzQwXTsKKyAgZG91YmxlIGZyYWM7CisgIGRvdWJsZSBwZXJjZW50OworICBpbnQgYmFyd2lkdGg7CisgIGludCBudW07CisgIGludCBpOworCisgIHN0cnVjdCBQcm9ncmVzc0RhdGEgKmJhciA9IChzdHJ1Y3QgUHJvZ3Jlc3NEYXRhICopY2xpZW50cDsKKworICAvKiBleHBlY3RlZCB0cmFuc2ZlciBzaXplICovCisgIGN1cmxfb2ZmX3QgdG90YWwgPSAoY3VybF9vZmZfdClkbHRvdGFsICsgKGN1cmxfb2ZmX3QpdWx0b3RhbCArCisgICAgYmFyLT5pbml0aWFsX3NpemU7CisKKyAgLyogd2UndmUgY29tZSB0aGlzIGZhciAqLworICBjdXJsX29mZl90IHBvaW50ID0gKGN1cmxfb2ZmX3QpZGxub3cgKyAoY3VybF9vZmZfdCl1bG5vdyArCisgICAgYmFyLT5pbml0aWFsX3NpemU7CisKKyAgaWYocG9pbnQgPiB0b3RhbCkKKyAgICAvKiB3ZSBoYXZlIGdvdCBtb3JlIHRoYW4gdGhlIGV4cGVjdGVkIHRvdGFsISAqLworICAgIHRvdGFsID0gcG9pbnQ7CisKKyAgLyogc2ltcGx5IGNvdW50IGludm9rZXMgKi8KKyAgYmFyLT5jYWxscysrOworCisgIGlmKHRvdGFsIDwgMSkgeworICAgIGN1cmxfb2ZmX3QgcHJldmJsb2NrID0gYmFyLT5wcmV2IC8gMTAyNDsKKyAgICBjdXJsX29mZl90IHRoaXNibG9jayA9IHBvaW50IC8gMTAyNDsKKyAgICB3aGlsZSh0aGlzYmxvY2sgPiBwcmV2YmxvY2spIHsKKyAgICAgIGZwcmludGYoYmFyLT5vdXQsICIjIik7CisgICAgICBwcmV2YmxvY2srKzsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgZnJhYyA9IChkb3VibGUpcG9pbnQgLyAoZG91YmxlKXRvdGFsOworICAgIHBlcmNlbnQgPSBmcmFjICogMTAwLjBmOworICAgIGJhcndpZHRoID0gYmFyLT53aWR0aCAtIDc7CisgICAgbnVtID0gKGludCkgKCgoZG91YmxlKWJhcndpZHRoKSAqIGZyYWMpOworICAgIGlmKG51bSA+IE1BWF9CQVJMRU5HVEgpCisgICAgICBudW0gPSBNQVhfQkFSTEVOR1RIOworICAgIGZvcihpID0gMDsgaSA8IG51bTsgaSsrKQorICAgICAgbGluZVtpXSA9ICcjJzsKKyAgICBsaW5lW2ldID0gJ1wwJzsKKyAgICBzbnByaW50Zihmb3JtYXQsIHNpemVvZihmb3JtYXQpLCAiXHIlJS0lZHMgJSU1LjFmJSUlJSIsIGJhcndpZHRoKTsKKyAgICBmcHJpbnRmKGJhci0+b3V0LCBmb3JtYXQsIGxpbmUsIHBlcmNlbnQpOworICB9CisgIGZmbHVzaChiYXItPm91dCk7CisgIGJhci0+cHJldiA9IHBvaW50OworCisgIHJldHVybiAwOworfQorCit2b2lkIHByb2dyZXNzYmFyaW5pdChzdHJ1Y3QgUHJvZ3Jlc3NEYXRhICpiYXIsCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcpCit7CisjaWZkZWYgX19FTVhfXworICAvKiAyMDAwMDMxOCBtZ3MgKi8KKyAgaW50IHNjcl9zaXplWzJdOworI2VuZGlmCisgIGNoYXIgKmNvbHA7CisKKyAgbWVtc2V0KGJhciwgMCwgc2l6ZW9mKHN0cnVjdCBQcm9ncmVzc0RhdGEpKTsKKworICAvKiBwYXNzIHRoaXMgdGhyb3VnaCB0byBwcm9ncmVzcyBmdW5jdGlvbiBzbworICAgKiBpdCBjYW4gZGlzcGxheSBwcm9ncmVzcyB0b3dhcmRzIHRvdGFsIGZpbGUKKyAgICogbm90IGp1c3QgdGhlIHBhcnQgdGhhdCdzIGxlZnQuICgyMS1tYXktMDMsIGRieXJvbikgKi8KKyAgaWYoY29uZmlnLT51c2VfcmVzdW1lKQorICAgIGJhci0+aW5pdGlhbF9zaXplID0gY29uZmlnLT5yZXN1bWVfZnJvbTsKKworLyogVE9ETzogZ2V0IHRlcm1pbmFsIHdpZHRoIHRocm91Z2ggYW5zaSBlc2NhcGVzIG9yIHNvbWV0aGluZyBzaW1pbGFyLgorICAgdHJ5IHRvIHVwZGF0ZSB3aWR0aCB3aGVuIHh0ZXJtIGlzIHJlc2l6ZWQuLi4gLSAxOTk5MDYxNyBsYXJzYSAqLworI2lmbmRlZiBfX0VNWF9fCisgIC8qIDIwMDAwMzE4IG1ncworICAgKiBPUy8yIHVzZXJzIG1vc3QgbGlrZWx5IHdvbid0IGhhdmUgdGhpcyBlbnYgdmFyIHNldCwgYW5kIGJlc2lkZXMgdGhhdAorICAgKiB3ZSdyZSB1c2luZyBvdXIgb3duIHdheSB0byBkZXRlcm1pbmUgc2NyZWVuIHdpZHRoICovCisgIGNvbHAgPSBjdXJseF9nZXRlbnYoIkNPTFVNTlMiKTsKKyAgaWYoY29scCkgeworICAgIGNoYXIgKmVuZHB0cjsKKyAgICBsb25nIG51bSA9IHN0cnRvbChjb2xwLCAmZW5kcHRyLCAxMCk7CisgICAgaWYoKGVuZHB0ciAhPSBjb2xwKSAmJiAoZW5kcHRyID09IGNvbHAgKyBzdHJsZW4oY29scCkpICYmIChudW0gPiAwKSkKKyAgICAgIGJhci0+d2lkdGggPSAoaW50KW51bTsKKyAgICBlbHNlCisgICAgICBiYXItPndpZHRoID0gNzk7CisgICAgY3VybF9mcmVlKGNvbHApOworICB9CisgIGVsc2UKKyAgICBiYXItPndpZHRoID0gNzk7CisjZWxzZQorICAvKiAyMDAwMDMxOCBtZ3MKKyAgICogV2UgdXNlIHRoaXMgZW14IGxpYnJhcnkgY2FsbCB0byBnZXQgdGhlIHNjcmVlbiB3aWR0aCwgYW5kIHN1YnRyYWN0CisgICAqIG9uZSBmcm9tIHdoYXQgd2UgZ290IGluIG9yZGVyIHRvIGF2b2lkIGEgcHJvYmxlbSB3aXRoIHRoZSBjdXJzb3IKKyAgICogYWR2YW5jaW5nIHRvIHRoZSBuZXh0IGxpbmUgaWYgd2UgcHJpbnQgYSBzdHJpbmcgdGhhdCBpcyBhcyBsb25nIGFzCisgICAqIHRoZSBzY3JlZW4gaXMgd2lkZS4gKi8KKworICBfc2Nyc2l6ZShzY3Jfc2l6ZSk7CisgIGJhci0+d2lkdGggPSBzY3Jfc2l6ZVswXSAtIDE7CisjZW5kaWYKKworICBiYXItPm91dCA9IGNvbmZpZy0+ZXJyb3JzOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl9wcmcuaCBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX3ByZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NDMzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl9wcmcuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfQ0JfUFJHX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVE9PTF9DQl9QUkdfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2RlZmluZSBDVVJMX1BST0dSRVNTX1NUQVRTIDAgLyogZGVmYXVsdCBwcm9ncmVzcyBkaXNwbGF5ICovCisjZGVmaW5lIENVUkxfUFJPR1JFU1NfQkFSICAgMQorCitzdHJ1Y3QgUHJvZ3Jlc3NEYXRhIHsKKyAgaW50ICAgICAgICAgY2FsbHM7CisgIGN1cmxfb2ZmX3QgIHByZXY7CisgIGludCAgICAgICAgIHdpZHRoOworICBGSUxFICAgICAgICpvdXQ7ICAvKiB3aGVyZSB0byB3cml0ZSBldmVyeXRoaW5nIHRvICovCisgIGN1cmxfb2ZmX3QgIGluaXRpYWxfc2l6ZTsKK307CisKK3ZvaWQgcHJvZ3Jlc3NiYXJpbml0KHN0cnVjdCBQcm9ncmVzc0RhdGEgKmJhciwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZyk7CisKKy8qCisqKiBjYWxsYmFjayBmb3IgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OCisqLworCitpbnQgdG9vbF9wcm9ncmVzc19jYih2b2lkICpjbGllbnRwLAorICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRsdG90YWwsIGRvdWJsZSBkbG5vdywKKyAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB1bHRvdGFsLCBkb3VibGUgdWxub3cpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVE9PTF9DQl9QUkdfSCAqLworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl9yZWEuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX3JlYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZWRiMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl9yZWEuYwpAQCAtMCwwICsxLDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjICBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKKy8qIHVzZSBvdXIgb3duIHByaW50ZigpIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgImN1cmx4LmgiCisKKyNpbmNsdWRlICJ0b29sX2NmZ2FibGUuaCIKKyNpbmNsdWRlICJ0b29sX2NiX3JlYS5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCisvKgorKiogY2FsbGJhY2sgZm9yIENVUkxPUFRfUkVBREZVTkNUSU9OCisqLworCitzaXplX3QgdG9vbF9yZWFkX2NiKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHN6LCBzaXplX3Qgbm1lbWIsIHZvaWQgKnVzZXJkYXRhKQoreworICBzc2l6ZV90IHJjOworICBzdHJ1Y3QgSW5TdHJ1Y3QgKmluID0gdXNlcmRhdGE7CisKKyAgcmMgPSByZWFkKGluLT5mZCwgYnVmZmVyLCBzeipubWVtYik7CisgIGlmKHJjIDwgMCkgeworICAgIGlmKGVycm5vID09IEVBR0FJTikgeworICAgICAgZXJybm8gPSAwOworICAgICAgaW4tPmNvbmZpZy0+cmVhZGJ1c3kgPSBUUlVFOworICAgICAgcmV0dXJuIENVUkxfUkVBREZVTkNfUEFVU0U7CisgICAgfQorICAgIC8qIHNpbmNlIHNpemVfdCBpcyB1bnNpZ25lZCB3ZSBjYW4ndCByZXR1cm4gbmVnYXRpdmUgdmFsdWVzIGZpbmUgKi8KKyAgICByYyA9IDA7CisgIH0KKyAgaW4tPmNvbmZpZy0+cmVhZGJ1c3kgPSBGQUxTRTsKKyAgcmV0dXJuIChzaXplX3QpcmM7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX3JlYS5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2JfcmVhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjNjFmNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX3JlYS5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfVE9PTF9DQl9SRUFfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX0NCX1JFQV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisvKgorKiogY2FsbGJhY2sgZm9yIENVUkxPUFRfUkVBREZVTkNUSU9OCisqLworCitzaXplX3QgdG9vbF9yZWFkX2NiKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHN6LCBzaXplX3Qgbm1lbWIsIHZvaWQgKnVzZXJkYXRhKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfQ0JfUkVBX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2Jfc2VlLmMgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl9zZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmFjNDk0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2Jfc2VlLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNkZWZpbmUgRU5BQkxFX0NVUkxYX1BSSU5URgorLyogdXNlIG91ciBvd24gcHJpbnRmKCkgZnVuY3Rpb25zICovCisjaW5jbHVkZSAiY3VybHguaCIKKworI2luY2x1ZGUgInRvb2xfY2ZnYWJsZS5oIgorI2luY2x1ZGUgInRvb2xfY2Jfc2VlLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKKy8qIE9VUl9NQVhfU0VFS19MIGhhcyAnbG9uZycgZGF0YSB0eXBlLCBPVVJfTUFYX1NFRUtfTyBoYXMgJ2N1cmxfb2ZmX3QsCisgICBib3RoIHJlcHJlc2VudCB0aGUgc2FtZSB2YWx1ZS4gTWF4aW11bSBvZmZzZXQgdXNlZCBoZXJlIHdoZW4gd2UgbHNlZWsKKyAgIHVzaW5nIGEgJ2xvbmcnIGRhdGEgdHlwZSBvZmZzZXQgKi8KKworI2RlZmluZSBPVVJfTUFYX1NFRUtfTCAgMjE0NzQ4MzY0N0wgLSAxTAorI2RlZmluZSBPVVJfTUFYX1NFRUtfTyAgQ1VSTF9PRkZfVF9DKDB4N0ZGRkZGRkYpIC0gQ1VSTF9PRkZfVF9DKDB4MSkKKworLyoKKyoqIGNhbGxiYWNrIGZvciBDVVJMT1BUX1NFRUtGVU5DVElPTgorKioKKyoqIE5vdGljZSB0aGF0IHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIHJldHVybiB0aGUgcmVzdWx0aW5nIG9mZnNldC4gVGhpcworKiogc2hhbGwgb25seSByZXR1cm4gQ1VSTF9TRUVLRlVOQ18qIHJldHVybiBjb2Rlcy4KKyovCisKK2ludCB0b29sX3NlZWtfY2Iodm9pZCAqdXNlcmRhdGEsIGN1cmxfb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQoreworICBzdHJ1Y3QgSW5TdHJ1Y3QgKmluID0gdXNlcmRhdGE7CisKKyNpZihDVVJMX1NJWkVPRl9DVVJMX09GRl9UID4gU0laRU9GX09GRl9UKSAmJiAhZGVmaW5lZChVU0VfV0lOMzJfTEFSR0VfRklMRVMpCisKKyAgLyogVGhlIG9mZnNldCBjaGVjayBmb2xsb3dpbmcgaGVyZSBpcyBvbmx5IGludGVyZXN0aW5nIGlmIGN1cmxfb2ZmX3QgaXMKKyAgICAgbGFyZ2VyIHRoYW4gb2ZmX3QgYW5kIHdlIGFyZSBub3QgdXNpbmcgdGhlIFdJTjMyIGxhcmdlIGZpbGUgc3VwcG9ydAorICAgICBtYWNyb3MgdGhhdCBwcm92aWRlIHRoZSBzdXBwb3J0IHRvIGRvIDY0Yml0IHNlZWtzIGNvcnJlY3RseSAqLworCisgIGlmKG9mZnNldCA+IE9VUl9NQVhfU0VFS19PKSB7CisgICAgLyogU29tZSBwcmVjYXV0aW9uIGNvZGUgdG8gd29yayBhcm91bmQgcHJvYmxlbXMgd2l0aCBkaWZmZXJlbnQgZGF0YSBzaXplcworICAgICAgIHRvIGFsbG93IHNlZWtpbmcgPjMyYml0IGV2ZW4gaWYgb2ZmX3QgaXMgMzJiaXQuIFNob3VsZCBiZSB2ZXJ5IHJhcmUgYW5kCisgICAgICAgaXMgcmVhbGx5IHZhbGlkIG9uIHdlaXJkby1zeXN0ZW1zLiAqLworICAgIGN1cmxfb2ZmX3QgbGVmdCA9IG9mZnNldDsKKworICAgIGlmKHdoZW5jZSAhPSBTRUVLX1NFVCkKKyAgICAgIC8qIHRoaXMgY29kZSBwYXRoIGRvZXNuJ3Qgc3VwcG9ydCBvdGhlciB0eXBlcyAqLworICAgICAgcmV0dXJuIENVUkxfU0VFS0ZVTkNfRkFJTDsKKworICAgIGlmKExTRUVLX0VSUk9SID09IGxzZWVrKGluLT5mZCwgMCwgU0VFS19TRVQpKQorICAgICAgLyogY291bGRuJ3QgcmV3aW5kIHRvIGJlZ2lubmluZyAqLworICAgICAgcmV0dXJuIENVUkxfU0VFS0ZVTkNfRkFJTDsKKworICAgIHdoaWxlKGxlZnQpIHsKKyAgICAgIGxvbmcgc3RlcCA9IChsZWZ0ID4gT1VSX01BWF9TRUVLX08pID8gT1VSX01BWF9TRUVLX0wgOiAobG9uZylsZWZ0OworICAgICAgaWYoTFNFRUtfRVJST1IgPT0gbHNlZWsoaW4tPmZkLCBzdGVwLCBTRUVLX0NVUikpCisgICAgICAgIC8qIGNvdWxkbid0IHNlZWsgZm9yd2FyZHMgdGhlIGRlc2lyZWQgYW1vdW50ICovCisgICAgICAgIHJldHVybiBDVVJMX1NFRUtGVU5DX0ZBSUw7CisgICAgICBsZWZ0IC09IHN0ZXA7CisgICAgfQorICAgIHJldHVybiBDVVJMX1NFRUtGVU5DX09LOworICB9CisjZW5kaWYKKworICBpZihMU0VFS19FUlJPUiA9PSBsc2Vlayhpbi0+ZmQsIG9mZnNldCwgd2hlbmNlKSkKKyAgICAvKiBjb3VsZG4ndCByZXdpbmQsIHRoZSByZWFzb24gaXMgaW4gZXJybm8gYnV0IGVycm5vIGlzIGp1c3Qgbm90IHBvcnRhYmxlCisgICAgICAgZW5vdWdoIGFuZCB3ZSBkb24ndCBhY3R1YWxseSBjYXJlIHRoYXQgbXVjaCB3aHkgd2UgZmFpbGVkLiBXZSdsbCBsZXQKKyAgICAgICBsaWJjdXJsIGtub3cgdGhhdCBpdCBtYXkgdHJ5IG90aGVyIG1lYW5zIGlmIGl0IHdhbnRzIHRvLiAqLworICAgIHJldHVybiBDVVJMX1NFRUtGVU5DX0NBTlRTRUVLOworCisgIHJldHVybiBDVVJMX1NFRUtGVU5DX09LOworfQorCisjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoX19NSU5HVzY0X18pCisKKyNpZmRlZiBfX0JPUkxBTkRDX18KKy8qIDY0LWJpdCBsc2Vlay1saWtlIGZ1bmN0aW9uIHVuYXZhaWxhYmxlICovCisjICBkZWZpbmUgX2xzZWVraTY0KGhuZCxvZnMsd2hlbmNlKSBsc2VlayhobmQsb2ZzLHdoZW5jZSkKKyNlbmRpZgorCisjaWZkZWYgX19QT0NDX18KKyMgIGlmKF9fUE9DQ19fIDwgNDUwKQorLyogNjQtYml0IGxzZWVrLWxpa2UgZnVuY3Rpb24gdW5hdmFpbGFibGUgKi8KKyMgICAgZGVmaW5lIF9sc2Vla2k2NChobmQsb2ZzLHdoZW5jZSkgX2xzZWVrKGhuZCxvZnMsd2hlbmNlKQorIyAgZWxzZQorIyAgICBkZWZpbmUgX2xzZWVraTY0KGhuZCxvZnMsd2hlbmNlKSBfbHNlZWs2NChobmQsb2ZzLHdoZW5jZSkKKyMgIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIFRydW5jYXRlIGEgZmlsZSBoYW5kbGUgYXQgYSA2NC1iaXQgcG9zaXRpb24gJ3doZXJlJy4KKyAqLworCitpbnQgdG9vbF9mdHJ1bmNhdGU2NChpbnQgZmQsIGN1cmxfb2ZmX3Qgd2hlcmUpCit7CisgIGlmKF9sc2Vla2k2NChmZCwgd2hlcmUsIFNFRUtfU0VUKSA8IDApCisgICAgcmV0dXJuIC0xOworCisgIGlmKCFTZXRFbmRPZkZpbGUoKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCkpKQorICAgIHJldHVybiAtMTsKKworICByZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIFdJTjMyICAmJiAhIF9fTUlOR1c2NF9fICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX3NlZS5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2Jfc2VlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxNGE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX3NlZS5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfVE9PTF9DQl9TRUVfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX0NCX1NFRV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoX19NSU5HVzY0X18pCisKK2ludCB0b29sX2Z0cnVuY2F0ZTY0KGludCBmZCwgY3VybF9vZmZfdCB3aGVyZSk7CisKKyN1bmRlZiAgZnRydW5jYXRlCisjZGVmaW5lIGZ0cnVuY2F0ZShmZCx3aGVyZSkgdG9vbF9mdHJ1bmNhdGU2NChmZCx3aGVyZSkKKworI2lmbmRlZiBIQVZFX0ZUUlVOQ0FURQorIyAgZGVmaW5lIEhBVkVfRlRSVU5DQVRFIDEKKyNlbmRpZgorCisjZW5kaWYgLyogV0lOMzIgICYmICEgX19NSU5HVzY0X18gKi8KKworLyoKKyoqIGNhbGxiYWNrIGZvciBDVVJMT1BUX1NFRUtGVU5DVElPTgorKi8KKworaW50IHRvb2xfc2Vla19jYih2b2lkICp1c2VyZGF0YSwgY3VybF9vZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVE9PTF9DQl9TRUVfSCAqLworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl93cnQuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX3dydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTRkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl93cnQuYwpAQCAtMCwwICsxLDE1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKKy8qIHVzZSBvdXIgb3duIHByaW50ZigpIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgImN1cmx4LmgiCisKKyNpbmNsdWRlICJ0b29sX2NmZ2FibGUuaCIKKyNpbmNsdWRlICJ0b29sX21zZ3MuaCIKKyNpbmNsdWRlICJ0b29sX2NiX3dydC5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCisvKgorKiogY2FsbGJhY2sgZm9yIENVUkxPUFRfV1JJVEVGVU5DVElPTgorKi8KKworc2l6ZV90IHRvb2xfd3JpdGVfY2Iodm9pZCAqYnVmZmVyLCBzaXplX3Qgc3osIHNpemVfdCBubWVtYiwgdm9pZCAqdXNlcmRhdGEpCit7CisgIHNpemVfdCByYzsKKyAgc3RydWN0IE91dFN0cnVjdCAqb3V0cyA9IHVzZXJkYXRhOworICBzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcgPSBvdXRzLT5jb25maWc7CisKKyAgLyoKKyAgICogT25jZSB0aGF0IGxpYmN1cmwgaGFzIGNhbGxlZCBiYWNrIHRvb2xfd3JpdGVfY2IoKSB0aGUgcmV0dXJuZWQgdmFsdWUKKyAgICogaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBhbW91bnQgdGhhdCB3YXMgaW50ZW5kZWQgdG8gYmUgd3JpdHRlbiwgaWYKKyAgICogaXQgZG9lcyBub3QgbWF0Y2ggdGhlbiBpdCBmYWlscyB3aXRoIENVUkxFX1dSSVRFX0VSUk9SLiBTbyBhdCB0aGlzCisgICAqIHBvaW50IHJldHVybmluZyBhIHZhbHVlIGRpZmZlcmVudCBmcm9tIHN6Km5tZW1iIGluZGljYXRlcyBmYWlsdXJlLgorICAgKi8KKyAgY29uc3Qgc2l6ZV90IGZhaWx1cmUgPSAoc3ogKiBubWVtYikgPyAwIDogMTsKKworICBpZighY29uZmlnKQorICAgIHJldHVybiBmYWlsdXJlOworCisjaWZkZWYgREVCVUdCVUlMRAorICBpZihjb25maWctPmluY2x1ZGVfaGVhZGVycykgeworICAgIGlmKHN6ICogbm1lbWIgPiAoc2l6ZV90KUNVUkxfTUFYX0hUVFBfSEVBREVSKSB7CisgICAgICB3YXJuZihjb25maWcsICJIZWFkZXIgZGF0YSBzaXplIGV4Y2VlZHMgc2luZ2xlIGNhbGwgd3JpdGUgbGltaXQhXG4iKTsKKyAgICAgIHJldHVybiBmYWlsdXJlOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBpZihzeiAqIG5tZW1iID4gKHNpemVfdClDVVJMX01BWF9XUklURV9TSVpFKSB7CisgICAgICB3YXJuZihjb25maWcsICJEYXRhIHNpemUgZXhjZWVkcyBzaW5nbGUgY2FsbCB3cml0ZSBsaW1pdCFcbiIpOworICAgICAgcmV0dXJuIGZhaWx1cmU7CisgICAgfQorICB9CisKKyAgeworICAgIC8qIFNvbWUgaW50ZXJuYWwgY29uZ3J1ZW5jeSBjaGVja3Mgb24gcmVjZWl2ZWQgT3V0U3RydWN0ICovCisgICAgYm9vbCBjaGVja19mYWlscyA9IEZBTFNFOworICAgIGlmKG91dHMtPmZpbGVuYW1lKSB7CisgICAgICAvKiByZWd1bGFyIGZpbGUgKi8KKyAgICAgIGlmKCEqb3V0cy0+ZmlsZW5hbWUpCisgICAgICAgIGNoZWNrX2ZhaWxzID0gVFJVRTsKKyAgICAgIGlmKCFvdXRzLT5zX2lzcmVnKQorICAgICAgICBjaGVja19mYWlscyA9IFRSVUU7CisgICAgICBpZihvdXRzLT5mb3BlbmVkICYmICFvdXRzLT5zdHJlYW0pCisgICAgICAgIGNoZWNrX2ZhaWxzID0gVFJVRTsKKyAgICAgIGlmKCFvdXRzLT5mb3BlbmVkICYmIG91dHMtPnN0cmVhbSkKKyAgICAgICAgY2hlY2tfZmFpbHMgPSBUUlVFOworICAgICAgaWYoIW91dHMtPmZvcGVuZWQgJiYgb3V0cy0+Ynl0ZXMpCisgICAgICAgIGNoZWNrX2ZhaWxzID0gVFJVRTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBzdGFuZGFyZCBzdHJlYW0gKi8KKyAgICAgIGlmKCFvdXRzLT5zdHJlYW0gfHwgb3V0cy0+c19pc3JlZyB8fCBvdXRzLT5mb3BlbmVkKQorICAgICAgICBjaGVja19mYWlscyA9IFRSVUU7CisgICAgICBpZihvdXRzLT5hbGxvY19maWxlbmFtZSB8fCBvdXRzLT5pbml0KQorICAgICAgICBjaGVja19mYWlscyA9IFRSVUU7CisgICAgfQorICAgIGlmKGNoZWNrX2ZhaWxzKSB7CisgICAgICB3YXJuZihjb25maWcsICJJbnZhbGlkIG91dHB1dCBzdHJ1Y3QgZGF0YSBmb3Igd3JpdGUgY2FsbGJhY2tcbiIpOworICAgICAgcmV0dXJuIGZhaWx1cmU7CisgICAgfQorICB9CisjZW5kaWYKKworICBpZighb3V0cy0+c3RyZWFtKSB7CisgICAgRklMRSAqZmlsZTsKKworICAgIGlmKCFvdXRzLT5maWxlbmFtZSB8fCAhKm91dHMtPmZpbGVuYW1lKSB7CisgICAgICB3YXJuZihjb25maWcsICJSZW1vdGUgZmlsZW5hbWUgaGFzIG5vIGxlbmd0aCFcbiIpOworICAgICAgcmV0dXJuIGZhaWx1cmU7CisgICAgfQorCisgICAgaWYoY29uZmlnLT5jb250ZW50X2Rpc3Bvc2l0aW9uKSB7CisgICAgICAvKiBkb24ndCBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMgKi8KKyAgICAgIGZpbGUgPSBmb3BlbihvdXRzLT5maWxlbmFtZSwgInJiIik7CisgICAgICBpZihmaWxlKSB7CisgICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICAgICAgd2FybmYoY29uZmlnLCAiUmVmdXNpbmcgdG8gb3ZlcndyaXRlICVzOiAlc1xuIiwgb3V0cy0+ZmlsZW5hbWUsCisgICAgICAgICAgICAgIHN0cmVycm9yKEVFWElTVCkpOworICAgICAgICByZXR1cm4gZmFpbHVyZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBvcGVuIGZpbGUgZm9yIHdyaXRpbmcgKi8KKyAgICBmaWxlID0gZm9wZW4ob3V0cy0+ZmlsZW5hbWUsICJ3YiIpOworICAgIGlmKCFmaWxlKSB7CisgICAgICB3YXJuZihjb25maWcsICJGYWlsZWQgdG8gY3JlYXRlIHRoZSBmaWxlICVzOiAlc1xuIiwgb3V0cy0+ZmlsZW5hbWUsCisgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIGZhaWx1cmU7CisgICAgfQorICAgIG91dHMtPnNfaXNyZWcgPSBUUlVFOworICAgIG91dHMtPmZvcGVuZWQgPSBUUlVFOworICAgIG91dHMtPnN0cmVhbSA9IGZpbGU7CisgICAgb3V0cy0+Ynl0ZXMgPSAwOworICAgIG91dHMtPmluaXQgPSAwOworICB9CisKKyAgcmMgPSBmd3JpdGUoYnVmZmVyLCBzeiwgbm1lbWIsIG91dHMtPnN0cmVhbSk7CisKKyAgaWYoKHN6ICogbm1lbWIpID09IHJjKQorICAgIC8qIHdlIGFkZGVkIHRoaXMgYW1vdW50IG9mIGRhdGEgdG8gdGhlIG91dHB1dCAqLworICAgIG91dHMtPmJ5dGVzICs9IChzeiAqIG5tZW1iKTsKKworICBpZihjb25maWctPnJlYWRidXN5KSB7CisgICAgY29uZmlnLT5yZWFkYnVzeSA9IEZBTFNFOworICAgIGN1cmxfZWFzeV9wYXVzZShjb25maWctPmVhc3ksIENVUkxQQVVTRV9DT05UKTsKKyAgfQorCisgIGlmKGNvbmZpZy0+bm9idWZmZXIpIHsKKyAgICAvKiBvdXRwdXQgYnVmZmVyaW5nIGRpc2FibGVkICovCisgICAgaW50IHJlcyA9IGZmbHVzaChvdXRzLT5zdHJlYW0pOworICAgIGlmKHJlcykKKyAgICAgIHJldHVybiBmYWlsdXJlOworICB9CisKKyAgcmV0dXJuIHJjOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl93cnQuaCBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2NiX3dydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExN2MxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jYl93cnQuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfQ0JfV1JUX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVE9PTF9DQl9XUlRfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworLyoKKyoqIGNhbGxiYWNrIGZvciBDVVJMT1BUX1dSSVRFRlVOQ1RJT04KKyovCisKK3NpemVfdCB0b29sX3dyaXRlX2NiKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHN6LCBzaXplX3Qgbm1lbWIsIHZvaWQgKnVzZXJkYXRhKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfQ0JfV1JUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2ZnYWJsZS5jIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2ZnYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MzQyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jZmdhYmxlLmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2luY2x1ZGUgInRvb2xfY2ZnYWJsZS5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCit2b2lkIGZyZWVfY29uZmlnX2ZpZWxkcyhzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcpCit7CisgIHN0cnVjdCBnZXRvdXQgKnVybG5vZGU7CisKKyAgaWYoY29uZmlnLT5lYXN5KSB7CisgICAgY3VybF9lYXN5X2NsZWFudXAoY29uZmlnLT5lYXN5KTsKKyAgICBjb25maWctPmVhc3kgPSBOVUxMOworICB9CisKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPnJhbmRvbV9maWxlKTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPmVnZF9maWxlKTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPnVzZXJhZ2VudCk7CisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5jb29raWUpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+Y29va2llamFyKTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPmNvb2tpZWZpbGUpOworCisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5wb3N0ZmllbGRzKTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPnJlZmVyZXIpOworCisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5oZWFkZXJmaWxlKTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPmZ0cHBvcnQpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+aWZhY2UpOworCisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5yYW5nZSk7CisKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPnVzZXJwd2QpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+dGxzX3VzZXJuYW1lKTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPnRsc19wYXNzd29yZCk7CisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT50bHNfYXV0aHR5cGUpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+cHJveHl1c2VycHdkKTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPnByb3h5KTsKKworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+bm9wcm94eSk7CisKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPm1haWxfZnJvbSk7CisgIGN1cmxfc2xpc3RfZnJlZV9hbGwoY29uZmlnLT5tYWlsX3JjcHQpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+bWFpbF9hdXRoKTsKKworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+bmV0cmNfZmlsZSk7CisKKyAgdXJsbm9kZSA9IGNvbmZpZy0+dXJsX2xpc3Q7CisgIHdoaWxlKHVybG5vZGUpIHsKKyAgICBzdHJ1Y3QgZ2V0b3V0ICpuZXh0ID0gdXJsbm9kZS0+bmV4dDsKKyAgICBDdXJsX3NhZmVmcmVlKHVybG5vZGUtPnVybCk7CisgICAgQ3VybF9zYWZlZnJlZSh1cmxub2RlLT5vdXRmaWxlKTsKKyAgICBDdXJsX3NhZmVmcmVlKHVybG5vZGUtPmluZmlsZSk7CisgICAgQ3VybF9zYWZlZnJlZSh1cmxub2RlKTsKKyAgICB1cmxub2RlID0gbmV4dDsKKyAgfQorICBjb25maWctPnVybF9saXN0ID0gTlVMTDsKKyAgY29uZmlnLT51cmxfbGFzdCA9IE5VTEw7CisgIGNvbmZpZy0+dXJsX2dldCA9IE5VTEw7CisgIGNvbmZpZy0+dXJsX291dCA9IE5VTEw7CisKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPmNpcGhlcl9saXN0KTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPmNlcnQpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+Y2VydF90eXBlKTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPmNhY2VydCk7CisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5jYXBhdGgpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+Y3JsZmlsZSk7CisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5rZXkpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+a2V5X3R5cGUpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+a2V5X3Bhc3N3ZCk7CisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5wdWJrZXkpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+aG9zdHB1Ym1kNSk7CisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5lbmdpbmUpOworCisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5jdXN0b21yZXF1ZXN0KTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPmtyYmxldmVsKTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPnRyYWNlX2R1bXApOworCisgIGNvbmZpZy0+dHJhY2Vfc3RyZWFtID0gTlVMTDsgLyogY2xvc2VkIGVsc2V3aGVyZSB3aGVuIGFwcHJvcHJpYXRlICovCisKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPndyaXRlb3V0KTsKKworICBjb25maWctPmVycm9ycyA9IE5VTEw7IC8qIGNsb3NlZCBlbHNld2hlcmUgd2hlbiBhcHByb3ByaWF0ZSAqLworCisgIGN1cmxfc2xpc3RfZnJlZV9hbGwoY29uZmlnLT5xdW90ZSk7CisgIGN1cmxfc2xpc3RfZnJlZV9hbGwoY29uZmlnLT5wb3N0cXVvdGUpOworICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGNvbmZpZy0+cHJlcXVvdGUpOworCisgIGN1cmxfc2xpc3RfZnJlZV9hbGwoY29uZmlnLT5oZWFkZXJzKTsKKworICBpZihjb25maWctPmh0dHBwb3N0KSB7CisgICAgY3VybF9mb3JtZnJlZShjb25maWctPmh0dHBwb3N0KTsKKyAgICBjb25maWctPmh0dHBwb3N0ID0gTlVMTDsKKyAgfQorICBjb25maWctPmxhc3RfcG9zdCA9IE5VTEw7CisKKyAgY3VybF9zbGlzdF9mcmVlX2FsbChjb25maWctPnRlbG5ldF9vcHRpb25zKTsKKyAgY3VybF9zbGlzdF9mcmVlX2FsbChjb25maWctPnJlc29sdmUpOworCisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5zb2Nrc3Byb3h5KTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPnNvY2tzNV9nc3NhcGlfc2VydmljZSk7CisKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPmZ0cF9hY2NvdW50KTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPmZ0cF9hbHRlcm5hdGl2ZV90b191c2VyKTsKKworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+bGliY3VybCk7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX2NmZ2FibGUuaCBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2NmZ2FibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGE3MWQzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfY2ZnYWJsZS5oCkBAIC0wLDAgKzEsMjA1IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfQ0ZHQUJMRV9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfQ0ZHQUJMRV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSAidG9vbF9zZGVjbHMuaCIKKworc3RydWN0IENvbmZpZ3VyYWJsZSB7CisgIENVUkwgKmVhc3k7ICAgICAgICAgICAgICAgLyogb25jZSB3ZSBoYXZlIG9uZSwgd2Uga2VlcCBpdCBoZXJlICovCisgIGJvb2wgcmVtb3RlX3RpbWU7CisgIGNoYXIgKnJhbmRvbV9maWxlOworICBjaGFyICplZ2RfZmlsZTsKKyAgY2hhciAqdXNlcmFnZW50OworICBjaGFyICpjb29raWU7ICAgICAgICAgICAgIC8qIHNpbmdsZSBsaW5lIHdpdGggc3BlY2lmaWVkIGNvb2tpZXMgKi8KKyAgY2hhciAqY29va2llamFyOyAgICAgICAgICAvKiB3cml0ZSB0byB0aGlzIGZpbGUgKi8KKyAgY2hhciAqY29va2llZmlsZTsgICAgICAgICAvKiByZWFkIGZyb20gdGhpcyBmaWxlICovCisgIGJvb2wgY29va2llc2Vzc2lvbjsgICAgICAgLyogbmV3IHNlc3Npb24/ICovCisgIGJvb2wgZW5jb2Rpbmc7ICAgICAgICAgICAgLyogQWNjZXB0LUVuY29kaW5nIHBsZWFzZSAqLworICBib29sIHRyX2VuY29kaW5nOyAgICAgICAgIC8qIFRyYW5zZmVyLUVuY29kaW5nIHBsZWFzZSAqLworICBsb25nIGF1dGh0eXBlOyAgICAgICAgICAgIC8qIGF1dGggYml0bWFzayAqLworICBib29sIHVzZV9yZXN1bWU7CisgIGJvb2wgcmVzdW1lX2Zyb21fY3VycmVudDsKKyAgYm9vbCBkaXNhYmxlX2Vwc3Y7CisgIGJvb2wgZGlzYWJsZV9lcHJ0OworICBib29sIGZ0cF9wcmV0OworICBsb25nIHByb3RvOworICBib29sIHByb3RvX3ByZXNlbnQ7CisgIGxvbmcgcHJvdG9fcmVkaXI7CisgIGJvb2wgcHJvdG9fcmVkaXJfcHJlc2VudDsKKyAgY3VybF9vZmZfdCByZXN1bWVfZnJvbTsKKyAgY2hhciAqcG9zdGZpZWxkczsKKyAgY3VybF9vZmZfdCBwb3N0ZmllbGRzaXplOworICBjaGFyICpyZWZlcmVyOworICBsb25nIHRpbWVvdXQ7CisgIGxvbmcgY29ubmVjdHRpbWVvdXQ7CisgIGxvbmcgbWF4cmVkaXJzOworICBjdXJsX29mZl90IG1heF9maWxlc2l6ZTsKKyAgY2hhciAqaGVhZGVyZmlsZTsKKyAgY2hhciAqZnRwcG9ydDsKKyAgY2hhciAqaWZhY2U7CisgIGludCBsb2NhbHBvcnQ7CisgIGludCBsb2NhbHBvcnRyYW5nZTsKKyAgdW5zaWduZWQgc2hvcnQgcG9ydHRvdXNlOworICBjaGFyICpyYW5nZTsKKyAgbG9uZyBsb3dfc3BlZWRfbGltaXQ7CisgIGxvbmcgbG93X3NwZWVkX3RpbWU7CisgIGludCBzaG93ZXJyb3I7IC8qIC0xID09IHVuc2V0LCBkZWZhdWx0ID0+IHNob3cgZXJyb3JzCisgICAgICAgICAgICAgICAgICAgIDAgPT4gLXMgaXMgdXNlZCB0byBOT1Qgc2hvdyBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgMSA9PiAtUyBoYXMgYmVlbiB1c2VkIHRvIHNob3cgZXJyb3JzICovCisgIGNoYXIgKnVzZXJwd2Q7CisgIGNoYXIgKnRsc191c2VybmFtZTsKKyAgY2hhciAqdGxzX3Bhc3N3b3JkOworICBjaGFyICp0bHNfYXV0aHR5cGU7CisgIGNoYXIgKnByb3h5dXNlcnB3ZDsKKyAgY2hhciAqcHJveHk7CisgIGludCBwcm94eXZlcjsgICAgICAgICAgICAgLyogc2V0IHRvIENVUkxQUk9YWV9IVFRQKiBkZWZpbmUgKi8KKyAgY2hhciAqbm9wcm94eTsKKyAgY2hhciAqbWFpbF9mcm9tOworICBzdHJ1Y3QgY3VybF9zbGlzdCAqbWFpbF9yY3B0OworICBjaGFyICptYWlsX2F1dGg7CisgIGJvb2wgcHJveHl0dW5uZWw7CisgIGJvb2wgZnRwX2FwcGVuZDsgICAgICAgICAgLyogQVBQRSBvbiBmdHAgKi8KKyAgYm9vbCBtdXRlOyAgICAgICAgICAgICAgICAvKiBkb24ndCBzaG93IG1lc3NhZ2VzLCAtLXNpbGVudCBnaXZlbiAqLworICBib29sIHVzZV9hc2NpaTsgICAgICAgICAgIC8qIHNlbGVjdCBhc2NpaSBvciB0ZXh0IHRyYW5zZmVyICovCisgIGJvb2wgYXV0b3JlZmVyZXI7ICAgICAgICAgLyogYXV0b21hdGljYWxseSBzZXQgcmVmZXJlciAqLworICBib29sIGZhaWxvbmVycm9yOyAgICAgICAgIC8qIGZhaWwgb24gKEhUVFApIGVycm9ycyAqLworICBib29sIGluY2x1ZGVfaGVhZGVyczsgICAgIC8qIHNlbmQgaGVhZGVycyB0byBkYXRhIG91dHB1dCAqLworICBib29sIG5vX2JvZHk7ICAgICAgICAgICAgIC8qIGRvbid0IGdldCB0aGUgYm9keSAqLworICBib29sIGRpcmxpc3Rvbmx5OyAgICAgICAgIC8qIG9ubHkgZ2V0IHRoZSBGVFAgZGlyIGxpc3QgKi8KKyAgYm9vbCBmb2xsb3dsb2NhdGlvbjsgICAgICAvKiBmb2xsb3cgaHR0cCByZWRpcmVjdHMgKi8KKyAgYm9vbCB1bnJlc3RyaWN0ZWRfYXV0aDsgICAvKiBDb250aW51ZSB0byBzZW5kIGF1dGhlbnRpY2F0aW9uICh1c2VyK3Bhc3N3b3JkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gZm9sbG93aW5nIG9jYXRpb25zLCBldmVuIHdoZW4gaG9zdG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkICovCisgIGJvb2wgbmV0cmNfb3B0OworICBib29sIG5ldHJjOworICBjaGFyICpuZXRyY19maWxlOworICBib29sIG5vcHJvZ3Jlc3M7ICAgICAgICAgIC8qIGRvbid0IHNob3cgcHJvZ3Jlc3MgbWV0ZXIsIC0tc2lsZW50IGdpdmVuICovCisgIGJvb2wgaXNhdHR5OyAgICAgICAgICAgICAgLyogdXBkYXRlZCBpbnRlcm5hbGx5IG9ubHkgaWYgb3V0cHV0IGlzIGEgdHR5ICovCisgIHN0cnVjdCBnZXRvdXQgKnVybF9saXN0OyAgLyogcG9pbnQgdG8gdGhlIGZpcnN0IG5vZGUgKi8KKyAgc3RydWN0IGdldG91dCAqdXJsX2xhc3Q7ICAvKiBwb2ludCB0byB0aGUgbGFzdC9jdXJyZW50IG5vZGUgKi8KKyAgc3RydWN0IGdldG91dCAqdXJsX2dldDsgICAvKiBwb2ludCB0byB0aGUgbm9kZSB0byBmaWxsIGluIFVSTCAqLworICBzdHJ1Y3QgZ2V0b3V0ICp1cmxfb3V0OyAgIC8qIHBvaW50IHRvIHRoZSBub2RlIHRvIGZpbGwgaW4gb3V0ZmlsZSAqLworICBjaGFyICpjaXBoZXJfbGlzdDsKKyAgY2hhciAqY2VydDsKKyAgY2hhciAqY2VydF90eXBlOworICBjaGFyICpjYWNlcnQ7CisgIGNoYXIgKmNhcGF0aDsKKyAgY2hhciAqY3JsZmlsZTsKKyAgY2hhciAqa2V5OworICBjaGFyICprZXlfdHlwZTsKKyAgY2hhciAqa2V5X3Bhc3N3ZDsKKyAgY2hhciAqcHVia2V5OworICBjaGFyICpob3N0cHVibWQ1OworICBjaGFyICplbmdpbmU7CisgIGJvb2wgbGlzdF9lbmdpbmVzOworICBib29sIGNybGY7CisgIGNoYXIgKmN1c3RvbXJlcXVlc3Q7CisgIGNoYXIgKmtyYmxldmVsOworICBjaGFyICp0cmFjZV9kdW1wOyAgICAgICAgIC8qIGZpbGUgdG8gZHVtcCB0aGUgbmV0d29yayB0cmFjZSB0bywgb3IgTlVMTCAqLworICBGSUxFICp0cmFjZV9zdHJlYW07CisgIGJvb2wgdHJhY2VfZm9wZW5lZDsKKyAgdHJhY2UgdHJhY2V0eXBlOworICBib29sIHRyYWNldGltZTsgICAgICAgICAgIC8qIGluY2x1ZGUgdGltZXN0YW1wPyAqLworICBsb25nIGh0dHB2ZXJzaW9uOworICBpbnQgcHJvZ3Jlc3Ntb2RlOyAgICAgICAgIC8qIENVUkxfUFJPR1JFU1NfQkFSIG9yIENVUkxfUFJPR1JFU1NfU1RBVFMgKi8KKyAgYm9vbCBub2J1ZmZlcjsKKyAgYm9vbCByZWFkYnVzeTsgICAgICAgICAgICAvKiBzZXQgd2hlbiByZWFkaW5nIGlucHV0IHJldHVybnMgRUFHQUlOICovCisgIGJvb2wgZ2xvYm9mZjsKKyAgYm9vbCB1c2VfaHR0cGdldDsKKyAgYm9vbCBpbnNlY3VyZV9vazsgICAgICAgICAvKiBzZXQgVFJVRSB0byBhbGxvdyBpbnNlY3VyZSBTU0wgY29ubmVjdHMgKi8KKyAgYm9vbCBjcmVhdGVfZGlyczsKKyAgYm9vbCBmdHBfY3JlYXRlX2RpcnM7CisgIGJvb2wgZnRwX3NraXBfaXA7CisgIGJvb2wgcHJveHluZWdvdGlhdGU7CisgIGJvb2wgcHJveHludGxtOworICBib29sIHByb3h5ZGlnZXN0OworICBib29sIHByb3h5YmFzaWM7CisgIGJvb2wgcHJveHlhbnlhdXRoOworICBjaGFyICp3cml0ZW91dDsgICAgICAgICAgIC8qICUtc3R5bGVkIGZvcm1hdCBzdHJpbmcgdG8gb3V0cHV0ICovCisgIGJvb2wgd3JpdGVlbnY7ICAgICAgICAgICAgLyogd3JpdGUgcmVzdWx0cyB0byBlbnZpcm9ubWVudCwgaWYgYXZhaWxhYmxlICovCisgIEZJTEUgKmVycm9yczsgICAgICAgICAgICAgLyogZXJyb3JzIHN0cmVhbSwgZGVmYXVsdHMgdG8gc3RkZXJyICovCisgIGJvb2wgZXJyb3JzX2ZvcGVuZWQ7ICAgICAgLyogd2hldGhlciBlcnJvcnMgc3RyZWFtIGlzbid0IHN0ZGVyciAqLworICBzdHJ1Y3QgY3VybF9zbGlzdCAqcXVvdGU7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpwb3N0cXVvdGU7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpwcmVxdW90ZTsKKyAgbG9uZyBzc2xfdmVyc2lvbjsKKyAgbG9uZyBpcF92ZXJzaW9uOworICBjdXJsX1RpbWVDb25kIHRpbWVjb25kOworICB0aW1lX3QgY29uZHRpbWU7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzOworICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqaHR0cHBvc3Q7CisgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpsYXN0X3Bvc3Q7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICp0ZWxuZXRfb3B0aW9uczsKKyAgc3RydWN0IGN1cmxfc2xpc3QgKnJlc29sdmU7CisgIEh0dHBSZXEgaHR0cHJlcTsKKworICAvKiBmb3IgYmFuZHdpZHRoIGxpbWl0aW5nIGZlYXR1cmVzOiAqLworICBjdXJsX29mZl90IHNlbmRwZXJzZWNvbmQ7IC8qIHNlbmQgdG8gcGVlciAqLworICBjdXJsX29mZl90IHJlY3ZwZXJzZWNvbmQ7IC8qIHJlY2VpdmUgZnJvbSBwZWVyICovCisKKyAgYm9vbCBmdHBfc3NsOworICBib29sIGZ0cF9zc2xfcmVxZDsKKyAgYm9vbCBmdHBfc3NsX2NvbnRyb2w7CisgIGJvb2wgZnRwX3NzbF9jY2M7CisgIGludCBmdHBfc3NsX2NjY19tb2RlOworCisgIGNoYXIgKnNvY2tzcHJveHk7ICAgICAgICAgLyogc2V0IHRvIHNlcnZlciBzdHJpbmcgKi8KKyAgaW50IHNvY2tzdmVyOyAgICAgICAgICAgICAvKiBzZXQgdG8gQ1VSTFBST1hZX1NPQ0tTKiBkZWZpbmUgKi8KKyAgY2hhciAqc29ja3M1X2dzc2FwaV9zZXJ2aWNlOyAgLyogc2V0IHNlcnZpY2UgbmFtZSBmb3IgZ3NzYXBpIHByaW5jaXBhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBkZWZhdWx0IHJjbWQgKi8KKyAgaW50IHNvY2tzNV9nc3NhcGlfbmVjIDsgICAvKiBUaGUgTkVDIHJlZmVyZW5jZSBzZXJ2ZXIgZG9lcyBub3QgcHJvdGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBlbmNyeXB0aW9uIHR5cGUgZXhjaGFuZ2UgKi8KKworICBib29sIHRjcF9ub2RlbGF5OworICBsb25nIHJlcV9yZXRyeTsgICAgICAgICAgIC8qIG51bWJlciBvZiByZXRyaWVzICovCisgIGxvbmcgcmV0cnlfZGVsYXk7ICAgICAgICAgLyogZGVsYXkgYmV0d2VlbiByZXRyaWVzIChpbiBzZWNvbmRzKSAqLworICBsb25nIHJldHJ5X21heHRpbWU7ICAgICAgIC8qIG1heGltdW0gdGltZSB0byBrZWVwIHJldHJ5aW5nICovCisKKyAgY2hhciAqZnRwX2FjY291bnQ7ICAgICAgICAvKiBmb3IgQUNDVCAqLworICBjaGFyICpmdHBfYWx0ZXJuYXRpdmVfdG9fdXNlcjsgIC8qIHNlbmQgY29tbWFuZCBpZiBVU0VSL1BBU1MgZmFpbHMgKi8KKyAgaW50IGZ0cF9maWxlbWV0aG9kOworICBsb25nIHRmdHBfYmxrc2l6ZTsgICAgICAgIC8qIFRGVFAgQkxLU0laRSBvcHRpb24gKi8KKyAgYm9vbCBpZ25vcmVjbDsgICAgICAgICAgICAvKiAtLWlnbm9yZS1jb250ZW50LWxlbmd0aCAqLworICBib29sIGRpc2FibGVfc2Vzc2lvbmlkOworCisgIGNoYXIgKmxpYmN1cmw7ICAgICAgICAgICAgLyogb3V0cHV0IGxpYmN1cmwgY29kZSB0byB0aGlzIGZpbGUgbmFtZSAqLworICBib29sIHJhdzsKKyAgYm9vbCBwb3N0MzAxOworICBib29sIHBvc3QzMDI7CisgIGJvb2wgbm9rZWVwYWxpdmU7ICAgICAgICAgLyogZm9yIGtlZXBhbGl2ZSBuZWVkcyAqLworICBsb25nIGFsaXZldGltZTsKKyAgYm9vbCBjb250ZW50X2Rpc3Bvc2l0aW9uOyAvKiB1c2UgQ29udGVudC1kaXNwb3NpdGlvbiBmaWxlbmFtZSAqLworCisgIGludCBkZWZhdWx0X25vZGVfZmxhZ3M7ICAgLyogZGVmYXVsdCBmbGFncyB0byBzZWFyY2ggZm9yIGVhY2ggJ25vZGUnLCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGJhc2ljYWxseSBlYWNoIGdpdmVuIFVSTCB0byB0cmFuc2ZlciAqLworCisgIGJvb2wgeGF0dHI7ICAgICAgICAgICAgICAgLyogc3RvcmUgbWV0YWRhdGEgaW4gZXh0ZW5kZWQgYXR0cmlidXRlcyAqLworICBsb25nIGdzc2FwaV9kZWxlZ2F0aW9uOworICBib29sIHNzbF9hbGxvd19iZWFzdDsgICAgIC8qIGFsbG93IHRoaXMgU1NMIHZ1bG5lcmFiaWxpdHkgKi8KK307IC8qIHN0cnVjdCBDb25maWd1cmFibGUgKi8KKwordm9pZCBmcmVlX2NvbmZpZ19maWVsZHMoc3RydWN0IENvbmZpZ3VyYWJsZSAqY29uZmlnKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfQ0ZHQUJMRV9IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX2NvbnZlcnQuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2NvbnZlcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzJhMDkxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfY29udmVydC5jCkBAIC0wLDAgKzEsMTUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisKKyNpZmRlZiBIQVZFX0lDT05WCisjICBpbmNsdWRlIDxpY29udi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2luY2x1ZGUgInRvb2xfY29udmVydC5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCisjaWZkZWYgSEFWRV9JQ09OVgorCisvKiBjdXJsIHRvb2wgaWNvbnYgY29udmVyc2lvbiBkZXNjcmlwdG9ycyAqLworc3RhdGljIGljb252X3QgaW5ib3VuZF9jZCAgPSAoaWNvbnZfdCktMTsKK3N0YXRpYyBpY29udl90IG91dGJvdW5kX2NkID0gKGljb252X3QpLTE7CisKKy8qIHNldCBkZWZhdWx0IGNvZGVzZXRzIGZvciBpY29udiAqLworI2lmbmRlZiBDVVJMX0lDT05WX0NPREVTRVRfT0ZfTkVUV09SSworIyAgZGVmaW5lIENVUkxfSUNPTlZfQ09ERVNFVF9PRl9ORVRXT1JLICJJU084ODU5LTEiCisjZW5kaWYKKworLyoKKyAqIGNvbnZlcnRfdG9fbmV0d29yaygpIGlzIGEgY3VybCB0b29sIGZ1bmN0aW9uIHRvIGNvbnZlcnQKKyAqIGZyb20gdGhlIGhvc3QgZW5jb2RpbmcgdG8gQVNDSUkgb24gbm9uLUFTQ0lJIHBsYXRmb3Jtcy4KKyAqLworQ1VSTGNvZGUgY29udmVydF90b19uZXR3b3JrKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgLyogdHJhbnNsYXRlIGZyb20gdGhlIGhvc3QgZW5jb2RpbmcgdG8gdGhlIG5ldHdvcmsgZW5jb2RpbmcgKi8KKyAgY2hhciAqaW5wdXRfcHRyLCAqb3V0cHV0X3B0cjsKKyAgc2l6ZV90IHJlcywgaW5fYnl0ZXMsIG91dF9ieXRlczsKKworICAvKiBvcGVuIGFuIGljb252IGNvbnZlcnNpb24gZGVzY3JpcHRvciBpZiBuZWNlc3NhcnkgKi8KKyAgaWYob3V0Ym91bmRfY2QgPT0gKGljb252X3QpLTEpIHsKKyAgICBvdXRib3VuZF9jZCA9IGljb252X29wZW4oQ1VSTF9JQ09OVl9DT0RFU0VUX09GX05FVFdPUkssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfSUNPTlZfQ09ERVNFVF9PRl9IT1NUKTsKKyAgICBpZihvdXRib3VuZF9jZCA9PSAoaWNvbnZfdCktMSkgeworICAgICAgcmV0dXJuIENVUkxFX0NPTlZfRkFJTEVEOworICAgIH0KKyAgfQorICAvKiBjYWxsIGljb252ICovCisgIGlucHV0X3B0ciA9IG91dHB1dF9wdHIgPSBidWZmZXI7CisgIGluX2J5dGVzID0gb3V0X2J5dGVzID0gbGVuZ3RoOworICByZXMgPSBpY29udihvdXRib3VuZF9jZCwgJmlucHV0X3B0ciwgICZpbl9ieXRlcywKKyAgICAgICAgICAgICAgJm91dHB1dF9wdHIsICZvdXRfYnl0ZXMpOworICBpZigocmVzID09IChzaXplX3QpLTEpIHx8IChpbl9ieXRlcyAhPSAwKSkgeworICAgIHJldHVybiBDVVJMRV9DT05WX0ZBSUxFRDsKKyAgfQorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIGNvbnZlcnRfZnJvbV9uZXR3b3JrKCkgaXMgYSBjdXJsIHRvb2wgZnVuY3Rpb24KKyAqIGZvciBwZXJmb3JtaW5nIEFTQ0lJIGNvbnZlcnNpb25zIG9uIG5vbi1BU0NJSSBwbGF0Zm9ybXMuCisgKi8KK0NVUkxjb2RlIGNvbnZlcnRfZnJvbV9uZXR3b3JrKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgLyogdHJhbnNsYXRlIGZyb20gdGhlIG5ldHdvcmsgZW5jb2RpbmcgdG8gdGhlIGhvc3QgZW5jb2RpbmcgKi8KKyAgY2hhciAqaW5wdXRfcHRyLCAqb3V0cHV0X3B0cjsKKyAgc2l6ZV90IHJlcywgaW5fYnl0ZXMsIG91dF9ieXRlczsKKworICAvKiBvcGVuIGFuIGljb252IGNvbnZlcnNpb24gZGVzY3JpcHRvciBpZiBuZWNlc3NhcnkgKi8KKyAgaWYoaW5ib3VuZF9jZCA9PSAoaWNvbnZfdCktMSkgeworICAgIGluYm91bmRfY2QgPSBpY29udl9vcGVuKENVUkxfSUNPTlZfQ09ERVNFVF9PRl9IT1NULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfSUNPTlZfQ09ERVNFVF9PRl9ORVRXT1JLKTsKKyAgICBpZihpbmJvdW5kX2NkID09IChpY29udl90KS0xKSB7CisgICAgICByZXR1cm4gQ1VSTEVfQ09OVl9GQUlMRUQ7CisgICAgfQorICB9CisgIC8qIGNhbGwgaWNvbnYgKi8KKyAgaW5wdXRfcHRyID0gb3V0cHV0X3B0ciA9IGJ1ZmZlcjsKKyAgaW5fYnl0ZXMgPSBvdXRfYnl0ZXMgPSBsZW5ndGg7CisgIHJlcyA9IGljb252KGluYm91bmRfY2QsICZpbnB1dF9wdHIsICAmaW5fYnl0ZXMsCisgICAgICAgICAgICAgICZvdXRwdXRfcHRyLCAmb3V0X2J5dGVzKTsKKyAgaWYoKHJlcyA9PSAoc2l6ZV90KS0xKSB8fCAoaW5fYnl0ZXMgIT0gMCkpIHsKKyAgICByZXR1cm4gQ1VSTEVfQ09OVl9GQUlMRUQ7CisgIH0KKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3ZvaWQgY29udmVydF9jbGVhbnVwKHZvaWQpCit7CisgIC8qIGNsb3NlIGljb252IGNvbnZlcnNpb24gZGVzY3JpcHRvcnMgKi8KKyAgaWYoaW5ib3VuZF9jZCAhPSAoaWNvbnZfdCktMSkKKyAgICAodm9pZClpY29udl9jbG9zZShpbmJvdW5kX2NkKTsKKyAgaWYob3V0Ym91bmRfY2QgIT0gKGljb252X3QpLTEpCisgICAgKHZvaWQpaWNvbnZfY2xvc2Uob3V0Ym91bmRfY2QpOworfQorCisjZW5kaWYgLyogSEFWRV9JQ09OViAqLworCitjaGFyIGNvbnZlcnRfY2hhcihjdXJsX2luZm90eXBlIGluZm90eXBlLCBjaGFyIHRoaXNfY2hhcikKK3sKKy8qIGRldGVybWluZSBob3cgdGhpcyBzcGVjaWZpYyBjaGFyYWN0ZXIgc2hvdWxkIGJlIGRpc3BsYXllZCAqLworICBzd2l0Y2goaW5mb3R5cGUpIHsKKyAgY2FzZSBDVVJMSU5GT19EQVRBX0lOOgorICBjYXNlIENVUkxJTkZPX0RBVEFfT1VUOgorICBjYXNlIENVUkxJTkZPX1NTTF9EQVRBX0lOOgorICBjYXNlIENVUkxJTkZPX1NTTF9EQVRBX09VVDoKKyAgICAvKiBkYXRhLCB0cmVhdCBhcyBBU0NJSSAqLworICAgIGlmKCh0aGlzX2NoYXIgPj0gMHgyMCkgJiYgKHRoaXNfY2hhciA8IDB4N2YpKSB7CisgICAgICAvKiBwcmludGFibGUgQVNDSUkgaGV4IHZhbHVlOiBjb252ZXJ0IHRvIGhvc3QgZW5jb2RpbmcgKi8KKyAgICAgICh2b2lkKWNvbnZlcnRfZnJvbV9uZXR3b3JrKCZ0aGlzX2NoYXIsIDEpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIG5vbi1wcmludGFibGUgQVNDSUksIHVzZSBhIHJlcGxhY2VtZW50IGNoYXJhY3RlciAqLworICAgICAgcmV0dXJuIFVOUFJJTlRBQkxFX0NIQVI7CisgICAgfQorICAgIC8qIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0ICovCisgIGRlZmF1bHQ6CisgICAgLyogdHJlYXQgYXMgaG9zdCBlbmNvZGluZyAqLworICAgIGlmKElTUFJJTlQodGhpc19jaGFyKQorICAgICAgICYmICAodGhpc19jaGFyICE9ICdcdCcpCisgICAgICAgJiYgICh0aGlzX2NoYXIgIT0gJ1xyJykKKyAgICAgICAmJiAgKHRoaXNfY2hhciAhPSAnXG4nKSkgeworICAgICAgLyogcHJpbnRhYmxlIGNoYXJhY3RlcnMgZXhjbHVkaW5nIHRhYnMgYW5kIGxpbmUgZW5kIGNoYXJhY3RlcnMgKi8KKyAgICAgIHJldHVybiB0aGlzX2NoYXI7CisgICAgfQorICAgIGJyZWFrOworICB9CisgIC8qIG5vbi1wcmludGFibGUsIHVzZSBhIHJlcGxhY2VtZW50IGNoYXJhY3RlciAgKi8KKyAgcmV0dXJuIFVOUFJJTlRBQkxFX0NIQVI7Cit9CisKKyNlbmRpZiAvKiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMgKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfY29udmVydC5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfY29udmVydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZWY2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9jb252ZXJ0LmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9UT09MX0NPTlZFUlRfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX0NPTlZFUlRfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIENVUkxfRE9FU19DT05WRVJTSU9OUworCisjaWZkZWYgSEFWRV9JQ09OVgorCitDVVJMY29kZSBjb252ZXJ0X3RvX25ldHdvcmsoY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKTsKK0NVUkxjb2RlIGNvbnZlcnRfZnJvbV9uZXR3b3JrKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7Cit2b2lkIGNvbnZlcnRfY2xlYW51cCh2b2lkKTsKKworI2VuZGlmIC8qIEhBVkVfSUNPTlYgKi8KKworY2hhciBjb252ZXJ0X2NoYXIoY3VybF9pbmZvdHlwZSBpbmZvdHlwZSwgY2hhciB0aGlzX2NoYXIpOworCisjZW5kaWYgLyogQ1VSTF9ET0VTX0NPTlZFUlNJT05TICovCisKKyNpZiAhZGVmaW5lZChDVVJMX0RPRVNfQ09OVkVSU0lPTlMpIHx8ICFkZWZpbmVkKEhBVkVfSUNPTlYpCisjZGVmaW5lIGNvbnZlcnRfY2xlYW51cCgpIEN1cmxfbm9wX3N0bXQKKyNlbmRpZgorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVE9PTF9DT05WRVJUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfZGlyaGllLmMgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9kaXJoaWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTM4ZDhiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfZGlyaGllLmMKQEAgLTAsMCArMSwxNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjICBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWZkZWYgV0lOMzIKKyMgIGluY2x1ZGUgPGRpcmVjdC5oPgorI2VuZGlmCisKKyNkZWZpbmUgRU5BQkxFX0NVUkxYX1BSSU5URgorLyogdXNlIG91ciBvd24gcHJpbnRmKCkgZnVuY3Rpb25zICovCisjaW5jbHVkZSAiY3VybHguaCIKKworI2luY2x1ZGUgInRvb2xfZGlyaGllLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKKyNpZmRlZiBORVRXQVJFCisjICBpZm5kZWYgX19OT1ZFTExfTElCQ19fCisjICAgIGRlZmluZSBta2RpciBta2Rpcl81MTAKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFdJTjMyCisjICBkZWZpbmUgbWtkaXIoeCx5KSAobWtkaXIpKCh4KSkKKyMgIGlmbmRlZiBfX1BPQ0NfXworIyAgICBkZWZpbmUgRl9PSyAwCisjICBlbmRpZgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNob3dfZGlyX2Vycm5vKEZJTEUgKmVycm9ycywgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgc3dpdGNoKEVSUk5PKSB7CisjaWZkZWYgRUFDQ0VTCisgIGNhc2UgRUFDQ0VTOgorICAgIGZwcmludGYoZXJyb3JzLCAiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBjcmVhdGUgJXMuXG4iLCBuYW1lKTsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIEVOQU1FVE9PTE9ORworICBjYXNlIEVOQU1FVE9PTE9ORzoKKyAgICBmcHJpbnRmKGVycm9ycywgIlRoZSBkaXJlY3RvcnkgbmFtZSAlcyBpcyB0b28gbG9uZy5cbiIsIG5hbWUpOworICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgRVJPRlMKKyAgY2FzZSBFUk9GUzoKKyAgICBmcHJpbnRmKGVycm9ycywgIiVzIHJlc2lkZXMgb24gYSByZWFkLW9ubHkgZmlsZSBzeXN0ZW0uXG4iLCBuYW1lKTsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIEVOT1NQQworICBjYXNlIEVOT1NQQzoKKyAgICBmcHJpbnRmKGVycm9ycywgIk5vIHNwYWNlIGxlZnQgb24gdGhlIGZpbGUgc3lzdGVtIHRoYXQgd2lsbCAiCisgICAgICAgICAgICAiY29udGFpbiB0aGUgZGlyZWN0b3J5ICVzLlxuIiwgbmFtZSk7CisgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBFRFFVT1QKKyAgY2FzZSBFRFFVT1Q6CisgICAgZnByaW50ZihlcnJvcnMsICJDYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAlcyBiZWNhdXNlIHlvdSAiCisgICAgICAgICAgICAiZXhjZWVkZWQgeW91ciBxdW90YS5cbiIsIG5hbWUpOworICAgIGJyZWFrOworI2VuZGlmCisgIGRlZmF1bHQgOgorICAgIGZwcmludGYoZXJyb3JzLCAiRXJyb3IgY3JlYXRpbmcgZGlyZWN0b3J5ICVzLlxuIiwgbmFtZSk7CisgICAgYnJlYWs7CisgIH0KK30KKworLyoKKyAqIENyZWF0ZSB0aGUgbmVlZGVkIGRpcmVjdG9yeSBoaWVyYXJjaHkgcmVjdXJzaXZlbHkgaW4gb3JkZXIgdG8gc2F2ZQorICogIG11bHRpLUdFVHMgaW4gZmlsZSBvdXRwdXQsIGllOgorICogIGN1cmwgImh0dHA6Ly9teS5zaXRlL2RpclsxLTVdL2ZpbGVbMS01XS50eHQiIC1vICJkaXIjMS9maWxlIzIudHh0IgorICogIHNob3VsZCBjcmVhdGUgYWxsIHRoZSBkaXIqIGF1dG9tYWdpY2FsbHkKKyAqLworCitDVVJMY29kZSBjcmVhdGVfZGlyX2hpZXJhcmNoeShjb25zdCBjaGFyICpvdXRmaWxlLCBGSUxFICplcnJvcnMpCit7CisgIGNoYXIgKnRlbXBkaXI7CisgIGNoYXIgKnRlbXBkaXIyOworICBjaGFyICpvdXRkdXA7CisgIGNoYXIgKmRpcmJ1aWxkdXA7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworCisgIG91dGR1cCA9IHN0cmR1cChvdXRmaWxlKTsKKyAgaWYoIW91dGR1cCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICBkaXJidWlsZHVwID0gbWFsbG9jKHN0cmxlbihvdXRmaWxlKSArIDEpOworICBpZighZGlyYnVpbGR1cCkgeworICAgIEN1cmxfc2FmZWZyZWUob3V0ZHVwKTsKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorICBkaXJidWlsZHVwWzBdID0gJ1wwJzsKKworICB0ZW1wZGlyID0gc3RydG9rKG91dGR1cCwgRElSX0NIQVIpOworCisgIHdoaWxlKHRlbXBkaXIgIT0gTlVMTCkgeworICAgIHRlbXBkaXIyID0gc3RydG9rKE5VTEwsIERJUl9DSEFSKTsKKyAgICAvKiBzaW5jZSBzdHJ0b2sgcmV0dXJucyBhIHRva2VuIGZvciB0aGUgbGFzdCB3b3JkIGV2ZW4KKyAgICAgICBpZiBub3QgZW5kaW5nIHdpdGggRElSX0NIQVIsIHdlIG5lZWQgdG8gcHJ1bmUgaXQgKi8KKyAgICBpZih0ZW1wZGlyMiAhPSBOVUxMKSB7CisgICAgICBzaXplX3QgZGxlbiA9IHN0cmxlbihkaXJidWlsZHVwKTsKKyAgICAgIGlmKGRsZW4pCisgICAgICAgIHNwcmludGYoJmRpcmJ1aWxkdXBbZGxlbl0sICIlcyVzIiwgRElSX0NIQVIsIHRlbXBkaXIpOworICAgICAgZWxzZSB7CisgICAgICAgIGlmKDAgIT0gc3RybmNtcChvdXRkdXAsIERJUl9DSEFSLCAxKSkKKyAgICAgICAgICBzdHJjcHkoZGlyYnVpbGR1cCwgdGVtcGRpcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzcHJpbnRmKGRpcmJ1aWxkdXAsICIlcyVzIiwgRElSX0NIQVIsIHRlbXBkaXIpOworICAgICAgfQorICAgICAgaWYoYWNjZXNzKGRpcmJ1aWxkdXAsIEZfT0spID09IC0xKSB7CisgICAgICAgIGlmKC0xID09IG1rZGlyKGRpcmJ1aWxkdXAsKG1vZGVfdCkwMDAwNzUwKSkgeworICAgICAgICAgIHNob3dfZGlyX2Vycm5vKGVycm9ycywgZGlyYnVpbGR1cCk7CisgICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfV1JJVEVfRVJST1I7CisgICAgICAgICAgYnJlYWs7IC8qIGdldCBvdXQgb2YgbG9vcCAqLworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHRlbXBkaXIgPSB0ZW1wZGlyMjsKKyAgfQorCisgIEN1cmxfc2FmZWZyZWUoZGlyYnVpbGR1cCk7CisgIEN1cmxfc2FmZWZyZWUob3V0ZHVwKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9kaXJoaWUuaCBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2RpcmhpZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZTMwYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9kaXJoaWUuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfRElSSElFX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVE9PTF9ESVJISUVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworQ1VSTGNvZGUgY3JlYXRlX2Rpcl9oaWVyYXJjaHkoY29uc3QgY2hhciAqb3V0ZmlsZSwgRklMRSAqZXJyb3JzKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfRElSSElFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfZG9zd2luLmMgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9kb3N3aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjM4OTllCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfZG9zd2luLmMKQEAgLTAsMCArMSwyOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKFdJTjMyKQorCisjaWYgZGVmaW5lZChIQVZFX0xJQkdFTl9IKSAmJiBkZWZpbmVkKEhBVkVfQkFTRU5BTUUpCisjICBpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbmRpZgorCisjaWZkZWYgV0lOMzIKKyMgIGluY2x1ZGUgPGN1cmwvY3VybC5oPgorIyAgaW5jbHVkZSAidG9vbF9jZmdhYmxlLmgiCisjICBpbmNsdWRlICJ0b29sX2xpYmluZm8uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidG9vbF9ibmFtZS5oIgorI2luY2x1ZGUgInRvb2xfZG9zd2luLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKKy8qCisgKiBNYWNyb3MgQUxXQVlTX1RSVUUgYW5kIEFMV0FZU19GQUxTRSBhcmUgdXNlZCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KKyAqLworCisjZGVmaW5lIEFMV0FZU19UUlVFICAgKDEpCisjZGVmaW5lIEFMV0FZU19GQUxTRSAgKDApCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX1BPQ0NfXykKKyMgIHVuZGVmIEFMV0FZU19UUlVFCisjICB1bmRlZiBBTFdBWVNfRkFMU0UKKyMgIGlmIChfTVNDX1ZFUiA8IDE1MDApCisjICAgIGRlZmluZSBBTFdBWVNfVFJVRSAgICgwLCAxKQorIyAgICBkZWZpbmUgQUxXQVlTX0ZBTFNFICAoMSwgMCkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFMV0FZU19UUlVFIFwKK19fcHJhZ21hKHdhcm5pbmcocHVzaCkpIFwKK19fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTo0MTI3KSkgXAorKDEpIFwKK19fcHJhZ21hKHdhcm5pbmcocG9wKSkKKyMgICAgZGVmaW5lIEFMV0FZU19GQUxTRSBcCitfX3ByYWdtYSh3YXJuaW5nKHB1c2gpKSBcCitfX3ByYWdtYSh3YXJuaW5nKGRpc2FibGU6NDEyNykpIFwKKygwKSBcCitfX3ByYWdtYSh3YXJuaW5nKHBvcCkpCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorIyAgdW5kZWYgIFBBVEhfTUFYCisjICBkZWZpbmUgUEFUSF9NQVggTUFYX1BBVEgKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNDSFIKKyMgIGlmZGVmIFNfSUZDSFIKKyMgICAgZGVmaW5lIFNfSVNDSFIobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZDSFIpCisjICBlbHNlCisjICAgIGRlZmluZSBTX0lTQ0hSKG0pICgwKSAvKiBjYW5ub3QgdGVsbCBpZiBmaWxlIGlzIGEgZGV2aWNlICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorIyAgZGVmaW5lIF91c2VfbGZuKGYpIEFMV0FZU19UUlVFICAgLyogbG9uZyBmaWxlIG5hbWVzIGFsd2F5cyBhdmFpbGFibGUgKi8KKyNlbGlmICFkZWZpbmVkKF9fREpHUFBfXykgfHwgKF9fREpHUFBfXyA8IDIpICAvKiBESkdQUCAyLjAgaGFzIF91c2VfbGZuKCkgKi8KKyMgIGRlZmluZSBfdXNlX2xmbihmKSBBTFdBWVNfRkFMU0UgIC8qIGxvbmcgZmlsZSBuYW1lcyBuZXZlciBhdmFpbGFibGUgKi8KKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqbXNkb3NpZnkgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSk7CitzdGF0aWMgY2hhciAqcmVuYW1lX2lmX2Rvc19kZXZpY2VfbmFtZSAoY2hhciAqZmlsZV9uYW1lKTsKKworLyoKKyAqIHNhbml0aXplX2Rvc19uYW1lOiByZXR1cm5zIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyBob2xkaW5nIGEKKyAqIHZhbGlkIGZpbGUgbmFtZSB3aGljaCB3aWxsIGJlIGEgdHJhbnNmb3JtYXRpb24gb2YgZ2l2ZW4gYXJndW1lbnQKKyAqIGluIGNhc2UgdGhpcyB3YXNuJ3QgYWxyZWFkeSBhIHZhbGlkIGZpbGUgbmFtZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiBnaXZlbiBhcmd1bWVudCwgZnJlZSdpbmcgaXQgYmVmb3JlCisgKiByZXR1cm5pbmcuIENhbGxlciBpcyByZXNwb25zaWJsZSBvZiBmcmVlJ2luZyByZXR1cm5lZCBzdHJpbmcuIFVwb24KKyAqIG91dCBvZiBtZW1vcnkgY29uZGl0aW9uIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4KKyAqLworCitjaGFyICpzYW5pdGl6ZV9kb3NfbmFtZShjaGFyICpmaWxlX25hbWUpCit7CisgIGNoYXIgbmV3X25hbWVbUEFUSF9NQVhdOworCisgIGlmKCFmaWxlX25hbWUpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYoc3RybGVuKGZpbGVfbmFtZSkgPj0gUEFUSF9NQVgpCisgICAgZmlsZV9uYW1lW1BBVEhfTUFYLTFdID0gJ1wwJzsgLyogdHJ1bmNhdGUgaXQgKi8KKworICBzdHJjcHkobmV3X25hbWUsIG1zZG9zaWZ5KGZpbGVfbmFtZSkpOworCisgIEN1cmxfc2FmZWZyZWUoZmlsZV9uYW1lKTsKKworICByZXR1cm4gc3RyZHVwKHJlbmFtZV9pZl9kb3NfZGV2aWNlX25hbWUobmV3X25hbWUpKTsKK30KKworLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHRha2VuIHdpdGggbW9kaWZpY2F0aW9uIGZyb20gdGhlIERKR1BQCisgKiBwb3J0IG9mIHRhciAxLjEyLiBUaGV5IHVzZSBhbGdvcml0aG1zIG9yaWdpbmFsbHkgZnJvbSBESlRBUi4gKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKm1zZG9zaWZ5IChjb25zdCBjaGFyICpmaWxlX25hbWUpCit7CisgIHN0YXRpYyBjaGFyIGRvc19uYW1lW1BBVEhfTUFYXTsKKyAgc3RhdGljIGNvbnN0IGNoYXIgaWxsZWdhbF9jaGFyc19kb3NbXSA9ICIuKywgOz1bXSIgLyogaWxsZWdhbCBpbiBET1MgKi8KKyAgICAifDw+XFxcIjo/KiI7IC8qIGlsbGVnYWwgaW4gRE9TICYgVzk1ICovCisgIHN0YXRpYyBjb25zdCBjaGFyICppbGxlZ2FsX2NoYXJzX3c5NSA9ICZpbGxlZ2FsX2NoYXJzX2Rvc1s4XTsKKyAgaW50IGlkeCwgZG90X2lkeDsKKyAgY29uc3QgY2hhciAqcyA9IGZpbGVfbmFtZTsKKyAgY2hhciAqZCA9IGRvc19uYW1lOworICBjb25zdCBjaGFyICpjb25zdCBkbGltaXQgPSBkb3NfbmFtZSArIHNpemVvZihkb3NfbmFtZSkgLSAxOworICBjb25zdCBjaGFyICppbGxlZ2FsX2FsaWVucyA9IGlsbGVnYWxfY2hhcnNfZG9zOworICBzaXplX3QgbGVuID0gc2l6ZW9mKGlsbGVnYWxfY2hhcnNfZG9zKSAtIDE7CisKKyAgLyogU3VwcG9ydCBmb3IgV2luZG93cyA5WCBWRkFUIHN5c3RlbXMsIHdoZW4gYXZhaWxhYmxlLiAqLworICBpZihfdXNlX2xmbihmaWxlX25hbWUpKSB7CisgICAgaWxsZWdhbF9hbGllbnMgPSBpbGxlZ2FsX2NoYXJzX3c5NTsKKyAgICBsZW4gLT0gKGlsbGVnYWxfY2hhcnNfdzk1IC0gaWxsZWdhbF9jaGFyc19kb3MpOworICB9CisKKyAgLyogR2V0IHBhc3QgdGhlIGRyaXZlIGxldHRlciwgaWYgYW55LiAqLworICBpZihzWzBdID49ICdBJyAmJiBzWzBdIDw9ICd6JyAmJiBzWzFdID09ICc6JykgeworICAgICpkKysgPSAqcysrOworICAgICpkKysgPSAqcysrOworICB9CisKKyAgZm9yKGlkeCA9IDAsIGRvdF9pZHggPSAtMTsgKnMgJiYgZCA8IGRsaW1pdDsgcysrLCBkKyspIHsKKyAgICBpZihtZW1jaHIoaWxsZWdhbF9hbGllbnMsICpzLCBsZW4pKSB7CisgICAgICAvKiBEb3RzIGFyZSBzcGVjaWFsOiBET1MgZG9lc24ndCBhbGxvdyB0aGVtIGFzIHRoZSBsZWFkaW5nIGNoYXJhY3RlciwKKyAgICAgICAgIGFuZCBhIGZpbGUgbmFtZSBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gYSBzaW5nbGUgZG90LiAgV2UgbGVhdmUgdGhlCisgICAgICAgICBmaXJzdCBub24tbGVhZGluZyBkb3QgYWxvbmUsIHVubGVzcyBpdCBjb21lcyB0b28gY2xvc2UgdG8gdGhlCisgICAgICAgICBiZWdpbm5pbmcgb2YgdGhlIG5hbWU6IHdlIHdhbnQgc2gubGV4LmMgdG8gYmVjb21lIHNoX2xleC5jLCBub3QKKyAgICAgICAgIHNoLmxleC1jLiAgKi8KKyAgICAgIGlmKCpzID09ICcuJykgeworICAgICAgICBpZihpZHggPT0gMCAmJiAoc1sxXSA9PSAnLycgfHwgKHNbMV0gPT0gJy4nICYmIHNbMl0gPT0gJy8nKSkpIHsKKyAgICAgICAgICAvKiBDb3B5ICIuLyIgYW5kICIuLi8iIHZlcmJhdGltLiAgKi8KKyAgICAgICAgICAqZCsrID0gKnMrKzsKKyAgICAgICAgICBpZigqcyA9PSAnLicpCisgICAgICAgICAgICAqZCsrID0gKnMrKzsKKyAgICAgICAgICAqZCA9ICpzOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoaWR4ID09IDApCisgICAgICAgICAgKmQgPSAnXyc7CisgICAgICAgIGVsc2UgaWYoZG90X2lkeCA+PSAwKSB7CisgICAgICAgICAgaWYoZG90X2lkeCA8IDUpIHsgLyogNSBpcyBhIGhldXJpc3RpYyBhZC1ob2MnZXJ5ICovCisgICAgICAgICAgICBkW2RvdF9pZHggLSBpZHhdID0gJ18nOyAvKiByZXBsYWNlIHByZXZpb3VzIGRvdCAqLworICAgICAgICAgICAgKmQgPSAnLic7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpkID0gJy0nOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAqZCA9ICcuJzsKKworICAgICAgICBpZigqcyA9PSAnLicpCisgICAgICAgICAgZG90X2lkeCA9IGlkeDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoKnMgPT0gJysnICYmIHNbMV0gPT0gJysnKSB7CisgICAgICAgIGlmKGlkeCAtIDIgPT0gZG90X2lkeCkgeyAvKiAuYysrLCAuaCsrIGV0Yy4gKi8KKyAgICAgICAgICAqZCsrID0gJ3gnOworICAgICAgICAgICpkICAgPSAneCc7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgLyogbGliZysrIGV0Yy4gICovCisgICAgICAgICAgbWVtY3B5IChkLCAicGx1cyIsIDQpOworICAgICAgICAgIGQgKz0gMzsKKyAgICAgICAgfQorICAgICAgICBzKys7CisgICAgICAgIGlkeCsrOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICAqZCA9ICdfJzsKKyAgICB9CisgICAgZWxzZQorICAgICAgKmQgPSAqczsKKyAgICBpZigqcyA9PSAnLycpIHsKKyAgICAgIGlkeCA9IDA7CisgICAgICBkb3RfaWR4ID0gLTE7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGlkeCsrOworICB9CisKKyAgKmQgPSAnXDAnOworICByZXR1cm4gZG9zX25hbWU7Cit9CisKK3N0YXRpYyBjaGFyICpyZW5hbWVfaWZfZG9zX2RldmljZV9uYW1lIChjaGFyICpmaWxlX25hbWUpCit7CisgIC8qIFdlIGNvdWxkIGhhdmUgYSBmaWxlIHdob3NlIG5hbWUgaXMgYSBkZXZpY2Ugb24gTVMtRE9TLiAgVHJ5aW5nIHRvCisgICAqIHJldHJpZXZlIHN1Y2ggYSBmaWxlIHdvdWxkIGZhaWwgYXQgYmVzdCBhbmQgd2VkZ2UgdXMgYXQgd29yc3QuICBXZSBuZWVkCisgICAqIHRvIHJlbmFtZSBzdWNoIGZpbGVzLiAqLworICBjaGFyICpiYXNlOworICBzdHJ1Y3Rfc3RhdCBzdF9idWY7CisgIGNoYXIgZm5hbWVbUEFUSF9NQVhdOworCisgIHN0cm5jcHkoZm5hbWUsIGZpbGVfbmFtZSwgUEFUSF9NQVgtMSk7CisgIGZuYW1lW1BBVEhfTUFYLTFdID0gJ1wwJzsKKyAgYmFzZSA9IGJhc2VuYW1lKGZuYW1lKTsKKyAgaWYoKChzdGF0KGJhc2UsICZzdF9idWYpKSA9PSAwKSAmJiAoU19JU0NIUihzdF9idWYuc3RfbW9kZSkpKSB7CisgICAgc2l6ZV90IGJsZW4gPSBzdHJsZW4oYmFzZSk7CisKKyAgICBpZihzdHJsZW4oZm5hbWUpID49IFBBVEhfTUFYLTEpIHsKKyAgICAgIC8qIE1ha2Ugcm9vbSBmb3IgdGhlICdfJyAqLworICAgICAgYmxlbi0tOworICAgICAgYmFzZVtibGVuXSA9ICdcMCc7CisgICAgfQorICAgIC8qIFByZXBlbmQgYSAnXycuICAqLworICAgIG1lbW1vdmUoYmFzZSArIDEsIGJhc2UsIGJsZW4gKyAxKTsKKyAgICBiYXNlWzBdID0gJ18nOworICAgIHN0cmNweShmaWxlX25hbWUsIGZuYW1lKTsKKyAgfQorICByZXR1cm4gZmlsZV9uYW1lOworfQorCisjaWYgZGVmaW5lZChNU0RPUykgJiYgKGRlZmluZWQoX19ESkdQUF9fKSB8fCBkZWZpbmVkKF9fR08zMl9fKSkKKworLyoKKyAqIERpc2FibGUgcHJvZ3JhbSBkZWZhdWx0IGFyZ3VtZW50IGdsb2JiaW5nLiBXZSBkbyBpdCBvbiBvdXIgb3duLgorICovCitjaGFyICoqX19jcnQwX2dsb2JfZnVuY3Rpb24oY2hhciAqYXJnKQoreworICAodm9pZClhcmc7CisgIHJldHVybiAoY2hhcioqKTA7Cit9CisKKyNlbmRpZiAvKiBNU0RPUyAmJiAoX19ESkdQUF9fIHx8IF9fR08zMl9fKSAqLworCisjaWZkZWYgV0lOMzIKKworLyoKKyAqIEZ1bmN0aW9uIHRvIGZpbmQgQ0FDZXJ0IGJ1bmRsZSBvbiBhIFdpbjMyIHBsYXRmb3JtIHVzaW5nIFNlYXJjaFBhdGguCisgKiAoU2VhcmNoUGF0aCBpcyBhbHJlYWR5IGRlY2xhcmVkIHZpYSBpbmNsdXNpb25zIGRvbmUgaW4gc2V0dXAgaGVhZGVyIGZpbGUpCisgKiAoVXNlIHRoZSBBU0NJSSB2ZXJzaW9uIGluc3RlYWQgb2YgdGhlIHVuaWNvZGUgb25lISkKKyAqIFRoZSBvcmRlciBvZiB0aGUgZGlyZWN0b3JpZXMgaXQgc2VhcmNoZXMgaXM6CisgKiAgMS4gYXBwbGljYXRpb24ncyBkaXJlY3RvcnkKKyAqICAyLiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgKiAgMy4gV2luZG93cyBTeXN0ZW0gZGlyZWN0b3J5IChlLmcuIEM6XHdpbmRvd3Ncc3lzdGVtMzIpCisgKiAgNC4gV2luZG93cyBEaXJlY3RvcnkgKGUuZy4gQzpcd2luZG93cykKKyAqICA1LiBhbGwgZGlyZWN0b3JpZXMgYWxvbmcgJVBBVEglCisgKgorICogRm9yIFdpblhQIGFuZCBsYXRlciBzZWFyY2ggb3JkZXIgYWN0dWFsbHkgZGVwZW5kcyBvbiByZWdpc3RyeSB2YWx1ZToKKyAqIEhLTE1cU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xcU2Vzc2lvbiBNYW5hZ2VyXFNhZmVQcm9jZXNzU2VhcmNoTW9kZQorICovCisKK0NVUkxjb2RlIEZpbmRXaW4zMkNBQ2VydChzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcsIGNvbnN0IGNoYXIgKmJ1bmRsZV9maWxlKQoreworICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKKworICAvKiBzZWFyY2ggYW5kIHNldCBjZXJ0IGZpbGUgb25seSBpZiBsaWJjdXJsIHN1cHBvcnRzIFNTTCAqLworICBpZihjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fU1NMKSB7CisKKyAgICBEV09SRCByZXNfbGVuOworICAgIERXT1JEIGJ1Zl90Y2hhcl9zaXplID0gUEFUSF9NQVggKyAxOworICAgIERXT1JEIGJ1Zl9ieXRlc19zaXplID0gc2l6ZW9mKFRDSEFSKSAqIGJ1Zl90Y2hhcl9zaXplOworICAgIGNoYXIgKnB0ciA9IE5VTEw7CisKKyAgICBjaGFyICpidWYgPSBtYWxsb2MoYnVmX2J5dGVzX3NpemUpOworICAgIGlmKCFidWYpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBidWZbMF0gPSAnXDAnOworCisgICAgcmVzX2xlbiA9IFNlYXJjaFBhdGhBKE5VTEwsIGJ1bmRsZV9maWxlLCBOVUxMLCBidWZfdGNoYXJfc2l6ZSwgYnVmLCAmcHRyKTsKKyAgICBpZihyZXNfbGVuID4gMCkgeworICAgICAgQ3VybF9zYWZlZnJlZShjb25maWctPmNhY2VydCk7CisgICAgICBjb25maWctPmNhY2VydCA9IHN0cmR1cChidWYpOworICAgICAgaWYoIWNvbmZpZy0+Y2FjZXJ0KQorICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKworICAgIEN1cmxfc2FmZWZyZWUoYnVmKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZiAvKiBXSU4zMiAqLworCisjZW5kaWYgLyogTVNET1MgfHwgV0lOMzIgKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfZG9zd2luLmggYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9kb3N3aW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTQ3NWFjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfZG9zd2luLmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9UT09MX0RPU1dJTl9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfRE9TV0lOX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKFdJTjMyKQorCitjaGFyICpzYW5pdGl6ZV9kb3NfbmFtZShjaGFyICpmaWxlX25hbWUpOworCisjaWYgZGVmaW5lZChNU0RPUykgJiYgKGRlZmluZWQoX19ESkdQUF9fKSB8fCBkZWZpbmVkKF9fR08zMl9fKSkKKworY2hhciAqKl9fY3J0MF9nbG9iX2Z1bmN0aW9uKGNoYXIgKmFyZyk7CisKKyNlbmRpZiAvKiBNU0RPUyAmJiAoX19ESkdQUF9fIHx8IF9fR08zMl9fKSAqLworCisjaWZkZWYgV0lOMzIKKworQ1VSTGNvZGUgRmluZFdpbjMyQ0FDZXJ0KHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZywgY29uc3QgY2hhciAqYnVuZGxlX2ZpbGUpOworCisjZW5kaWYgLyogV0lOMzIgKi8KKworI2VuZGlmIC8qIE1TRE9TIHx8IFdJTjMyICovCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9UT09MX0RPU1dJTl9IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX2Vhc3lzcmMuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2Vhc3lzcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTY2NGJkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfZWFzeXNyYy5jCkBAIC0wLDAgKzEsMjI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0xJQkNVUkxfT1BUSU9OCisKKyNkZWZpbmUgRU5BQkxFX0NVUkxYX1BSSU5URgorLyogdXNlIG91ciBvd24gcHJpbnRmKCkgZnVuY3Rpb25zICovCisjaW5jbHVkZSAiY3VybHguaCIKKworI2luY2x1ZGUgInRvb2xfY2ZnYWJsZS5oIgorI2luY2x1ZGUgInRvb2xfZWFzeXNyYy5oIgorI2luY2x1ZGUgInRvb2xfbXNncy5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCisvKiBnbG9iYWwgdmFyaWFibGUgZGVmaW5pdGlvbnMsIGZvciBlYXN5LWludGVyZmFjZSBzb3VyY2UgY29kZSBnZW5lcmF0aW9uICovCisKK3N0cnVjdCBjdXJsX3NsaXN0ICplYXN5c3JjX2RlY2wgPSBOVUxMOyAvKiBWYXJpYWJsZSBkZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBjdXJsX3NsaXN0ICplYXN5c3JjX2RhdGEgPSBOVUxMOyAvKiBCdWlsZCBzbGlzdHMsIGZvcm1zIGV0Yy4gKi8KK3N0cnVjdCBjdXJsX3NsaXN0ICplYXN5c3JjX2NvZGUgPSBOVUxMOyAvKiBTZXRvcHQgY2FsbHMgKi8KK3N0cnVjdCBjdXJsX3NsaXN0ICplYXN5c3JjX3Rvb2hhcmQgPSBOVUxMOyAvKiBVbmNvbnZlcnRpYmxlIHNldG9wdCAqLworc3RydWN0IGN1cmxfc2xpc3QgKmVhc3lzcmNfY2xlYW4gPSBOVUxMOyAgLyogQ2xlYW4gdXAgYWxsb2NhdGVkIGRhdGEgKi8KK2ludCBlYXN5c3JjX2Zvcm1fY291bnQgPSAwOworaW50IGVhc3lzcmNfc2xpc3RfY291bnQgPSAwOworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3JjaGVhZFtdPXsKKyAgIi8qKioqKioqKiogU2FtcGxlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjdXJsIGNvbW1hbmQgbGluZSB0b29sICoqKioqKioqKioiLAorICAiICogQWxsIGN1cmxfZWFzeV9zZXRvcHQoKSBvcHRpb25zIGFyZSBkb2N1bWVudGVkIGF0OiIsCisgICIgKiBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwiLAorICAiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8iLAorICAiI2luY2x1ZGUgPGN1cmwvY3VybC5oPiIsCisgICIiLAorICAiaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkiLAorICAieyIsCisgICIgIENVUkxjb2RlIHJldDsiLAorICAiICBDVVJMICpobmQ7IiwKKyAgTlVMTAorfTsKKy8qIGVhc3lzcmNfZGVjbCBkZWNsYXJhdGlvbnMgY29tZSBoZXJlICovCisvKiBlYXN5c3JjX2RhdGEgaW5pdGlhbGlzYXRpb25zIGNvbWUgaGVyZSAqLworLyogZWFzeXNyY19jb2RlIHN0YXRlbWVudHMgY29tZSBoZXJlICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3JjaGFyZFtdPXsKKyAgIi8qIEhlcmUgaXMgYSBsaXN0IG9mIG9wdGlvbnMgdGhlIGN1cmwgY29kZSB1c2VkIHRoYXQgY2Fubm90IGdldCBnZW5lcmF0ZWQiLAorICAiICAgYXMgc291cmNlIGVhc2lseS4gWW91IG1heSBzZWxlY3QgdG8gZWl0aGVyIG5vdCB1c2UgdGhlbSBvciBpbXBsZW1lbnQiLAorICAiICAgdGhlbSB5b3Vyc2VsZi4iLAorICAiIiwKKyAgTlVMTAorfTsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzcmNlbmRbXT17CisgICIiLAorICAiICByZXR1cm4gKGludClyZXQ7IiwKKyAgIn0iLAorICAiLyoqKiogRW5kIG9mIHNhbXBsZSBjb2RlICoqKiovIiwKKyAgTlVMTAorfTsKKworLyogQ2xlYW4gdXAgYWxsIHNvdXJjZSBjb2RlIGlmIHdlIHJ1biBvdXQgb2YgbWVtb3J5ICovCitzdGF0aWMgdm9pZCBlYXN5c3JjX2ZyZWUodm9pZCkKK3sKKyAgY3VybF9zbGlzdF9mcmVlX2FsbChlYXN5c3JjX2RlY2wpOworICBlYXN5c3JjX2RlY2wgPSBOVUxMOworICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGVhc3lzcmNfZGF0YSk7CisgIGVhc3lzcmNfZGF0YSA9IE5VTEw7CisgIGN1cmxfc2xpc3RfZnJlZV9hbGwoZWFzeXNyY19jb2RlKTsKKyAgZWFzeXNyY19jb2RlID0gTlVMTDsKKyAgY3VybF9zbGlzdF9mcmVlX2FsbChlYXN5c3JjX3Rvb2hhcmQpOworICBlYXN5c3JjX3Rvb2hhcmQgPSBOVUxMOworICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGVhc3lzcmNfY2xlYW4pOworICBlYXN5c3JjX2NsZWFuID0gTlVMTDsKK30KKworLyogQWRkIGEgc291cmNlIGxpbmUgdG8gdGhlIG1haW4gY29kZSBvciByZW1hcmtzICovCitDVVJMY29kZSBlYXN5c3JjX2FkZChzdHJ1Y3QgY3VybF9zbGlzdCAqKnBsaXN0LCBjb25zdCBjaGFyICpsaW5lKQoreworICBDVVJMY29kZSByZXQgPSBDVVJMRV9PSzsKKyAgc3RydWN0IGN1cmxfc2xpc3QgKmxpc3QgPQorICAgIGN1cmxfc2xpc3RfYXBwZW5kKCpwbGlzdCwgbGluZSk7CisgIGlmKCFsaXN0KSB7CisgICAgZWFzeXNyY19mcmVlKCk7CisgICAgcmV0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorICBlbHNlCisgICAgKnBsaXN0ID0gbGlzdDsKKyAgcmV0dXJuIHJldDsKK30KKworQ1VSTGNvZGUgZWFzeXNyY19hZGRmKHN0cnVjdCBjdXJsX3NsaXN0ICoqcGxpc3QsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICBDVVJMY29kZSByZXQ7CisgIGNoYXIgKmJ1ZnA7CisgIHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0KGFwLCBmbXQpOworICBidWZwID0gY3VybHhfbXZhcHJpbnRmKGZtdCwgYXApOworICB2YV9lbmQoYXApOworICBpZighIGJ1ZnApIHsKKyAgICByZXQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisgIGVsc2UgeworICAgIHJldCA9IGVhc3lzcmNfYWRkKHBsaXN0LCBidWZwKTsKKyAgICBjdXJsX2ZyZWUoYnVmcCk7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBDSEtSRVQodikgZG8ge0NVUkxjb2RlIHJldCA9ICh2KTsgaWYocmV0KSByZXR1cm4gcmV0O30gV0hJTEVfRkFMU0UKKworQ1VSTGNvZGUgZWFzeXNyY19pbml0KHZvaWQpCit7CisgIENIS1JFVChlYXN5c3JjX2FkZCgmZWFzeXNyY19jb2RlLAorICAgICAgICAgICAgICAgICAgICAgImhuZCA9IGN1cmxfZWFzeV9pbml0KCk7IikpOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK0NVUkxjb2RlIGVhc3lzcmNfcGVyZm9ybSh2b2lkKQoreworICAvKiBOb3RlIGFueSBzZXRvcHQgY2FsbHMgd2hpY2ggd2UgY291bGQgbm90IGNvbnZlcnQgKi8KKyAgaWYoZWFzeXNyY190b29oYXJkKSB7CisgICAgaW50IGk7CisgICAgc3RydWN0IGN1cmxfc2xpc3QgKnB0cjsKKyAgICBjb25zdCBjaGFyICpjOworICAgIENIS1JFVChlYXN5c3JjX2FkZCgmZWFzeXNyY19jb2RlLCAiIikpOworICAgIC8qIFByZWFtYmxlIGNvbW1lbnQgKi8KKyAgICBmb3IoaT0wOyAoKGMgPSBzcmNoYXJkW2ldKSAhPSAnXDAnKTsgaSsrKQorICAgICAgQ0hLUkVUKGVhc3lzcmNfYWRkKCZlYXN5c3JjX2NvZGUsIGMpKTsKKyAgICAvKiBFYWNoIHVuY29udmVydGVkIG9wdGlvbiAqLworICAgIGZvcihwdHI9ZWFzeXNyY190b29oYXJkOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkKKyAgICAgIENIS1JFVChlYXN5c3JjX2FkZCgmZWFzeXNyY19jb2RlLCBwdHItPmRhdGEpKTsKKyAgICBDSEtSRVQoZWFzeXNyY19hZGQoJmVhc3lzcmNfY29kZSwgIiIpKTsKKyAgICBDSEtSRVQoZWFzeXNyY19hZGQoJmVhc3lzcmNfY29kZSwgIiovIikpOworCisgICAgY3VybF9zbGlzdF9mcmVlX2FsbChlYXN5c3JjX3Rvb2hhcmQpOworICAgIGVhc3lzcmNfdG9vaGFyZCA9IE5VTEw7CisgIH0KKworICBDSEtSRVQoZWFzeXNyY19hZGQoJmVhc3lzcmNfY29kZSwgIiIpKTsKKyAgQ0hLUkVUKGVhc3lzcmNfYWRkKCZlYXN5c3JjX2NvZGUsICJyZXQgPSBjdXJsX2Vhc3lfcGVyZm9ybShobmQpOyIpKTsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitDVVJMY29kZSBlYXN5c3JjX2NsZWFudXAodm9pZCkKK3sKKyAgQ0hLUkVUKGVhc3lzcmNfYWRkKCZlYXN5c3JjX2NvZGUsICIiKSk7CisgIENIS1JFVChlYXN5c3JjX2FkZCgmZWFzeXNyY19jb2RlLCAiY3VybF9lYXN5X2NsZWFudXAoaG5kKTsiKSk7CisgIENIS1JFVChlYXN5c3JjX2FkZCgmZWFzeXNyY19jb2RlLCAiaG5kID0gTlVMTDsiKSk7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKwordm9pZCBkdW1wZWFzeXNyYyhzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcpCit7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpwdHI7CisgIGNoYXIgKm8gPSBjb25maWctPmxpYmN1cmw7CisKKyAgaWYobykgeworICAgIEZJTEUgKm91dDsKKyAgICBib29sIGZvcGVuZWQgPSBGQUxTRTsKKyAgICBpZihzdHJjbXAobywgIi0iKSkgeworICAgICAgb3V0ID0gZm9wZW4obywgInciKTsKKyAgICAgIGZvcGVuZWQgPSBUUlVFOworICAgIH0KKyAgICBlbHNlCisgICAgICBvdXQgPSBzdGRvdXQ7CisgICAgaWYoIW91dCkKKyAgICAgIHdhcm5mKGNvbmZpZywgIkZhaWxlZCB0byBvcGVuICVzIHRvIHdyaXRlIGxpYmN1cmwgY29kZSFcbiIsIG8pOworICAgIGVsc2UgeworICAgICAgaW50IGk7CisgICAgICBjb25zdCBjaGFyICpjOworCisgICAgICBmb3IoaT0wOyAoKGMgPSBzcmNoZWFkW2ldKSAhPSAnXDAnKTsgaSsrKQorICAgICAgICBmcHJpbnRmKG91dCwgIiVzXG4iLCBjKTsKKworICAgICAgLyogRGVjbGFyZSB2YXJpYWJsZXMgdXNlZCBmb3IgY29tcGxleCBzZXRvcHQgdmFsdWVzICovCisgICAgICBmb3IocHRyPWVhc3lzcmNfZGVjbDsgcHRyOyBwdHIgPSBwdHItPm5leHQpCisgICAgICAgIGZwcmludGYob3V0LCAiICAlc1xuIiwgcHRyLT5kYXRhKTsKKworICAgICAgLyogU2V0IHVwIGNvbXBsZXggdmFsdWVzIGZvciBzZXRvcHQgY2FsbHMgKi8KKyAgICAgIGlmKGVhc3lzcmNfZGF0YSkgeworICAgICAgICBmcHJpbnRmKG91dCwgIlxuIik7CisKKyAgICAgICAgZm9yKHB0cj1lYXN5c3JjX2RhdGE7IHB0cjsgcHRyID0gcHRyLT5uZXh0KQorICAgICAgICAgIGZwcmludGYob3V0LCAiICAlc1xuIiwgcHRyLT5kYXRhKTsKKyAgICAgIH0KKworICAgICAgZnByaW50ZihvdXQsICJcbiIpOworICAgICAgZm9yKHB0cj1lYXN5c3JjX2NvZGU7IHB0cjsgcHRyID0gcHRyLT5uZXh0KSB7CisgICAgICAgIGlmKHB0ci0+ZGF0YVswXSkgeworICAgICAgICAgIGZwcmludGYob3V0LCAiICAlc1xuIiwgcHRyLT5kYXRhKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBmcHJpbnRmKG91dCwgIlxuIik7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZm9yKHB0cj1lYXN5c3JjX2NsZWFuOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkKKyAgICAgICAgZnByaW50ZihvdXQsICIgICVzXG4iLCBwdHItPmRhdGEpOworCisgICAgICBmb3IoaT0wOyAoKGMgPSBzcmNlbmRbaV0pICE9ICdcMCcpOyBpKyspCisgICAgICAgIGZwcmludGYob3V0LCAiJXNcbiIsIGMpOworCisgICAgICBpZihmb3BlbmVkKQorICAgICAgICBmY2xvc2Uob3V0KTsKKyAgICB9CisgIH0KKworICBlYXN5c3JjX2ZyZWUoKTsKK30KKworI2VuZGlmIC8qIENVUkxfRElTQUJMRV9MSUJDVVJMX09QVElPTiAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfZWFzeXNyYy5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfZWFzeXNyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMmMwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9lYXN5c3JjLmgKQEAgLTAsMCArMSw0NyBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9UT09MX0VBU1lTUkNfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX0VBU1lTUkNfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0xJQkNVUkxfT1BUSU9OCisKKy8qIGdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIGZvciBlYXN5LWludGVyZmFjZSBzb3VyY2UgY29kZSBnZW5lcmF0aW9uICovCisKK2V4dGVybiBzdHJ1Y3QgY3VybF9zbGlzdCAqZWFzeXNyY19kZWNsOyAvKiBWYXJpYWJsZSBkZWNsYXJhdGlvbnMgKi8KK2V4dGVybiBzdHJ1Y3QgY3VybF9zbGlzdCAqZWFzeXNyY19kYXRhOyAvKiBCdWlsZCBzbGlzdHMsIGZvcm1zIGV0Yy4gKi8KK2V4dGVybiBzdHJ1Y3QgY3VybF9zbGlzdCAqZWFzeXNyY19jb2RlOyAvKiBTZXRvcHQgY2FsbHMgZXRjLiAqLworZXh0ZXJuIHN0cnVjdCBjdXJsX3NsaXN0ICplYXN5c3JjX3Rvb2hhcmQ7IC8qIFVuY29udmVydGlibGUgc2V0b3B0ICovCitleHRlcm4gc3RydWN0IGN1cmxfc2xpc3QgKmVhc3lzcmNfY2xlYW47ICAvKiBDbGVhbiB1cCAocmV2ZXJzZSBvcmRlcikgKi8KKworZXh0ZXJuIGludCBlYXN5c3JjX2Zvcm1fY291bnQ7ICAvKiBOdW1iZXIgb2YgY3VybF9odHRwcG9zdCB2YXJpYWJsZXMgKi8KK2V4dGVybiBpbnQgZWFzeXNyY19zbGlzdF9jb3VudDsgLyogTnVtYmVyIG9mIGN1cmxfc2xpc3QgdmFyaWFibGVzICovCisKK2V4dGVybiBDVVJMY29kZSBlYXN5c3JjX2luaXQodm9pZCk7CitleHRlcm4gQ1VSTGNvZGUgZWFzeXNyY19hZGQoc3RydWN0IGN1cmxfc2xpc3QgKipwbGlzdCwgY29uc3QgY2hhciAqYnVwZik7CitleHRlcm4gQ1VSTGNvZGUgZWFzeXNyY19hZGRmKHN0cnVjdCBjdXJsX3NsaXN0ICoqcGxpc3QsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2V4dGVybiBDVVJMY29kZSBlYXN5c3JjX3BlcmZvcm0odm9pZCk7CitleHRlcm4gQ1VSTGNvZGUgZWFzeXNyY19jbGVhbnVwKHZvaWQpOwordm9pZCBkdW1wZWFzeXNyYyhzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcpOworCisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0xJQkNVUkxfT1BUSU9OICovCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9UT09MX0VBU1lTUkNfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfZm9ybXBhcnNlLmMgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9mb3JtcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDhjODljCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfZm9ybXBhcnNlLmMKQEAgLTAsMCArMSwzMDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2luY2x1ZGUgInJhd3N0ci5oIgorCisjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKKy8qIHVzZSBvdXIgb3duIHByaW50ZigpIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgImN1cmx4LmgiCisKKyNpbmNsdWRlICJ0b29sX2NmZ2FibGUuaCIKKyNpbmNsdWRlICJ0b29sX21maWxlcy5oIgorI2luY2x1ZGUgInRvb2xfbXNncy5oIgorI2luY2x1ZGUgInRvb2xfZm9ybXBhcnNlLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmb3JtcGFyc2UoKQorICoKKyAqIFJlYWRzIGEgJ25hbWU9dmFsdWUnIHBhcmFtZXRlciBhbmQgYnVpbGRzIHRoZSBhcHByb3ByaWF0ZSBsaW5rZWQgbGlzdC4KKyAqCisgKiBTcGVjaWZ5IGZpbGVzIHRvIHVwbG9hZCB3aXRoICduYW1lPUBmaWxlbmFtZScuIFN1cHBvcnRzIHNwZWNpZmllZAorICogZ2l2ZW4gQ29udGVudC1UeXBlIG9mIHRoZSBmaWxlcy4gU3VjaCBhcyAnO3R5cGU9PGNvbnRlbnQtdHlwZT4nLgorICoKKyAqIElmIGxpdGVyYWxfdmFsdWUgaXMgc2V0LCBhbnkgaW5pdGlhbCAnQCcgb3IgJzwnIGluIHRoZSB2YWx1ZSBzdHJpbmcKKyAqIGxvc2VzIGl0cyBzcGVjaWFsIG1lYW5pbmcsIGFzIGRvZXMgYW55IGVtYmVkZGVkICc7dHlwZT0nLgorICoKKyAqIFlvdSBtYXkgc3BlY2lmeSBtb3JlIHRoYW4gb25lIGZpbGUgZm9yIGEgc2luZ2xlIG5hbWUgKGZpZWxkKS4gU3BlY2lmeQorICogbXVsdGlwbGUgZmlsZXMgYnkgd3JpdGluZyBpdCBsaWtlOgorICoKKyAqICduYW1lPUBmaWxlbmFtZSxmaWxlbmFtZTIsZmlsZW5hbWUzJworICoKKyAqIElmIHlvdSB3YW50IGNvbnRlbnQtdHlwZXMgc3BlY2lmaWVkIGZvciBlYWNoIHRvbywgd3JpdGUgdGhlbSBsaWtlOgorICoKKyAqICduYW1lPUBmaWxlbmFtZTt0eXBlPWltYWdlL2dpZixmaWxlbmFtZTIsZmlsZW5hbWUzJworICoKKyAqIElmIHlvdSB3YW50IGN1c3RvbSBoZWFkZXJzIGFkZGVkIGZvciBhIHNpbmdsZSBwYXJ0LCB3cml0ZSB0aGVtIGluIGEgc2VwYXJhdGUKKyAqIGZpbGUgYW5kIGRvIGxpa2UgdGhpczoKKyAqCisgKiAnbmFtZT1mb287aGVhZGVycz1AaGVhZGVyZmlsZScgb3Igd2h5IG5vdAorICogJ25hbWU9QGZpbGVtYW1lO2hlYWRlcnM9QGhlYWRlcmZpbGUnCisgKgorICogVG8gdXBsb2FkIGEgZmlsZSwgYnV0IHRvIGZha2UgdGhlIGZpbGUgbmFtZSB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlCisgKiBmb3JtcG9zdCwgZG8gbGlrZSB0aGlzOgorICoKKyAqICduYW1lPUBmaWxlbmFtZTtmaWxlbmFtZT0vZGV2L251bGwnCisgKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIGN1cmxfZm9ybWFkZCB0byBmdWxmaWxsIGl0J3Mgam9iLiBJcyBoZWF2aWx5IGJhc2VkIG9uCisgKiB0aGUgb2xkIGN1cmxfZm9ybXBhcnNlIGNvZGUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGZvcm1wYXJzZShzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcsCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKmh0dHBwb3N0LAorICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKmxhc3RfcG9zdCwKKyAgICAgICAgICAgICAgYm9vbCBsaXRlcmFsX3ZhbHVlKQoreworICAvKiBuZXh0YXJnIE1VU1QgYmUgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdCAnbmFtZT1jb250ZW50cycgYW5kIHdlJ2xsCisgICAgIGJ1aWxkIGEgbGlua2VkIGxpc3Qgd2l0aCB0aGUgaW5mbyAqLworICBjaGFyIG5hbWVbMjU2XTsKKyAgY2hhciAqY29udGVudHMgPSBOVUxMOworICBjaGFyIG1ham9yWzEyOF07CisgIGNoYXIgbWlub3JbMTI4XTsKKyAgY2hhciAqY29udHA7CisgIGNvbnN0IGNoYXIgKnR5cGUgPSBOVUxMOworICBjaGFyICpzZXA7CisgIGNoYXIgKnNlcDI7CisKKyAgaWYoKDEgPT0gc3NjYW5mKGlucHV0LCAiJTI1NVtePV09IiwgbmFtZSkpICYmCisgICAgICgoY29udHAgPSBzdHJjaHIoaW5wdXQsICc9JykpICE9IE5VTEwpKSB7CisgICAgLyogdGhlIGlucHV0IHdhcyB1c2luZyB0aGUgY29ycmVjdCBmb3JtYXQgKi8KKworICAgIC8qIEFsbG9jYXRlIHRoZSBjb250ZW50cyAqLworICAgIGNvbnRlbnRzID0gc3RyZHVwKGNvbnRwKzEpOworICAgIGlmKCFjb250ZW50cykgeworICAgICAgZnByaW50Zihjb25maWctPmVycm9ycywgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGNvbnRwID0gY29udGVudHM7CisKKyAgICBpZignQCcgPT0gY29udHBbMF0gJiYgIWxpdGVyYWxfdmFsdWUpIHsKKworICAgICAgLyogd2UgdXNlIHRoZSBALWxldHRlciB0byBpbmRpY2F0ZSBmaWxlIG5hbWUocykgKi8KKworICAgICAgc3RydWN0IG11bHRpX2ZpbGVzICptdWx0aV9zdGFydCA9IE5VTEw7CisgICAgICBzdHJ1Y3QgbXVsdGlfZmlsZXMgKm11bHRpX2N1cnJlbnQgPSBOVUxMOworCisgICAgICBjb250cCsrOworCisgICAgICBkbyB7CisgICAgICAgIC8qIHNpbmNlIHRoaXMgd2FzIGEgZmlsZSwgaXQgbWF5IGhhdmUgYSBjb250ZW50LXR5cGUgc3BlY2lmaWVyCisgICAgICAgICAgIGF0IHRoZSBlbmQgdG9vLCBvciBhIGZpbGVuYW1lLiBPciBib3RoLiAqLworICAgICAgICBjaGFyICpwdHI7CisgICAgICAgIGNoYXIgKmZpbGVuYW1lID0gTlVMTDsKKworICAgICAgICBzZXAgPSBzdHJjaHIoY29udHAsICc7Jyk7CisgICAgICAgIHNlcDIgPSBzdHJjaHIoY29udHAsICcsJyk7CisKKyAgICAgICAgLyogcGljayB0aGUgY2xvc2VzdCAqLworICAgICAgICBpZihzZXAyICYmIChzZXAyIDwgc2VwKSkgeworICAgICAgICAgIHNlcCA9IHNlcDI7CisKKyAgICAgICAgICAvKiBubyB0eXBlIHdhcyBzcGVjaWZpZWQhICovCisgICAgICAgIH0KKworICAgICAgICB0eXBlID0gTlVMTDsKKworICAgICAgICBpZihzZXApIHsKKyAgICAgICAgICBib29sIHNlbWljb2xvbiA9ICgnOycgPT0gKnNlcCkgPyBUUlVFIDogRkFMU0U7CisKKyAgICAgICAgICAqc2VwID0gJ1wwJzsgLyogdGVybWluYXRlIGZpbGUgbmFtZSBhdCBzZXBhcmF0b3IgKi8KKworICAgICAgICAgIHB0ciA9IHNlcCsxOyAvKiBwb2ludCB0byB0aGUgdGV4dCBmb2xsb3dpbmcgdGhlIHNlcGFyYXRvciAqLworCisgICAgICAgICAgd2hpbGUoc2VtaWNvbG9uICYmIHB0ciAmJiAoJywnIT0gKnB0cikpIHsKKworICAgICAgICAgICAgLyogcGFzcyBhbGwgd2hpdGUgc3BhY2VzICovCisgICAgICAgICAgICB3aGlsZShJU1NQQUNFKCpwdHIpKQorICAgICAgICAgICAgICBwdHIrKzsKKworICAgICAgICAgICAgaWYoY2hlY2twcmVmaXgoInR5cGU9IiwgcHRyKSkgeworICAgICAgICAgICAgICAvKiBzZXQgdHlwZSBwb2ludGVyICovCisgICAgICAgICAgICAgIHR5cGUgPSAmcHRyWzVdOworCisgICAgICAgICAgICAgIC8qIHZlcmlmeSB0aGF0IHRoaXMgaXMgYSBmaW5lIHR5cGUgc3BlY2lmaWVyICovCisgICAgICAgICAgICAgIGlmKDIgIT0gc3NjYW5mKHR5cGUsICIlMTI3W14vXS8lMTI3W147LFxuXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ham9yLCBtaW5vcikpIHsKKyAgICAgICAgICAgICAgICB3YXJuZihjb25maWcsICJJbGxlZ2FsbHkgZm9ybWF0dGVkIGNvbnRlbnQtdHlwZSBmaWVsZCFcbiIpOworICAgICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoY29udGVudHMpOworICAgICAgICAgICAgICAgIEZyZWVNdWx0aUluZm8oJm11bHRpX3N0YXJ0LCAmbXVsdGlfY3VycmVudCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDI7IC8qIGlsbGVnYWwgY29udGVudC10eXBlIHN5bnRheCEgKi8KKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIC8qIG5vdyBwb2ludCBiZXlvbmQgdGhlIGNvbnRlbnQtdHlwZSBzcGVjaWZpZXIgKi8KKyAgICAgICAgICAgICAgc2VwID0gKGNoYXIgKil0eXBlICsgc3RybGVuKG1ham9yKStzdHJsZW4obWlub3IpKzE7CisKKyAgICAgICAgICAgICAgLyogdGhlcmUncyBhIHNlbWljb2xvbiBmb2xsb3dpbmcgLSB3ZSBjaGVjayBpZiBpdCBpcyBhIGZpbGVuYW1lCisgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBhbmQgaWYgbm90IHdlIHNpbXBseSBhc3N1bWUgdGhhdCBpdCBpcyB0ZXh0IHRoYXQKKyAgICAgICAgICAgICAgICAgdGhlIHVzZXIgd2FudHMgaW5jbHVkZWQgaW4gdGhlIHR5cGUgYW5kIGluY2x1ZGUgdGhhdCB0b28gdXAKKyAgICAgICAgICAgICAgICAgdG8gdGhlIG5leHQgemVybyBvciBzZW1pY29sb24uICovCisgICAgICAgICAgICAgIGlmKCpzZXA9PSc7JykgeworICAgICAgICAgICAgICAgIGlmKCFjaGVja3ByZWZpeCgiO2ZpbGVuYW1lPSIsIHNlcCkpIHsKKyAgICAgICAgICAgICAgICAgIHNlcDIgPSBzdHJjaHIoc2VwKzEsICc7Jyk7CisgICAgICAgICAgICAgICAgICBpZihzZXAyKQorICAgICAgICAgICAgICAgICAgICBzZXAgPSBzZXAyOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXAgPSBzZXAgKyBzdHJsZW4oc2VwKTsgLyogcG9pbnQgdG8gZW5kIG9mIHN0cmluZyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2VtaWNvbG9uID0gRkFMU0U7CisKKyAgICAgICAgICAgICAgaWYoKnNlcCkgeworICAgICAgICAgICAgICAgICpzZXAgPSAnXDAnOyAvKiB6ZXJvIHRlcm1pbmF0ZSB0eXBlIHN0cmluZyAqLworCisgICAgICAgICAgICAgICAgcHRyID0gc2VwKzE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHB0ciA9IE5VTEw7IC8qIGVuZCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZihjaGVja3ByZWZpeCgiZmlsZW5hbWU9IiwgcHRyKSkgeworICAgICAgICAgICAgICBmaWxlbmFtZSA9ICZwdHJbOV07CisgICAgICAgICAgICAgIHB0ciA9IHN0cmNocihmaWxlbmFtZSwgJzsnKTsKKyAgICAgICAgICAgICAgaWYoIXB0cikgeworICAgICAgICAgICAgICAgIHB0ciA9IHN0cmNocihmaWxlbmFtZSwgJywnKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZihwdHIpIHsKKyAgICAgICAgICAgICAgICAqcHRyID0gJ1wwJzsgLyogemVybyB0ZXJtaW5hdGUgKi8KKyAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAvKiBjb25mdXNpb24sIGJhaWwgb3V0IG9mIGxvb3AgKi8KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAgc2VwID0gcHRyOworICAgICAgICB9CisKKyAgICAgICAgLyogaWYgdHlwZSA9PSBOVUxMIGN1cmxfZm9ybWFkZCB0YWtlcyBjYXJlIG9mIHRoZSBwcm9ibGVtICovCisKKyAgICAgICAgaWYoIUFkZE11bHRpRmlsZXMoY29udHAsIHR5cGUsIGZpbGVuYW1lLCAmbXVsdGlfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZtdWx0aV9jdXJyZW50KSkgeworICAgICAgICAgIHdhcm5mKGNvbmZpZywgIkVycm9yIGJ1aWxkaW5nIGZvcm0gcG9zdCFcbiIpOworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoY29udGVudHMpOworICAgICAgICAgIEZyZWVNdWx0aUluZm8oJm11bHRpX3N0YXJ0LCAmbXVsdGlfY3VycmVudCk7CisgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIH0KKyAgICAgICAgY29udHAgPSBzZXA7IC8qIG1vdmUgdGhlIGNvbnRlbnRzIHBvaW50ZXIgdG8gYWZ0ZXIgdGhlIHNlcGFyYXRvciAqLworCisgICAgICB9IHdoaWxlKHNlcCAmJiAqc2VwKTsgLyogbG9vcCBpZiB0aGVyZSdzIGFub3RoZXIgZmlsZSBuYW1lICovCisKKyAgICAgIC8qIG5vdyB3ZSBhZGQgdGhlIG11bHRpcGxlIGZpbGVzIHNlY3Rpb24gKi8KKyAgICAgIGlmKG11bHRpX3N0YXJ0KSB7CisgICAgICAgIHN0cnVjdCBjdXJsX2Zvcm1zICpmb3JtcyA9IE5VTEw7CisgICAgICAgIHN0cnVjdCBtdWx0aV9maWxlcyAqcHRyID0gbXVsdGlfc3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIGludCBpLCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlKHB0cikgeworICAgICAgICAgIHB0ciA9IHB0ci0+bmV4dDsKKyAgICAgICAgICArK2NvdW50OworICAgICAgICB9CisgICAgICAgIGZvcm1zID0gbWFsbG9jKChjb3VudCsxKSpzaXplb2Yoc3RydWN0IGN1cmxfZm9ybXMpKTsKKyAgICAgICAgaWYoIWZvcm1zKSB7CisgICAgICAgICAgZnByaW50Zihjb25maWctPmVycm9ycywgIkVycm9yIGJ1aWxkaW5nIGZvcm0gcG9zdCFcbiIpOworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoY29udGVudHMpOworICAgICAgICAgIEZyZWVNdWx0aUluZm8oJm11bHRpX3N0YXJ0LCAmbXVsdGlfY3VycmVudCk7CisgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIH0KKyAgICAgICAgZm9yKGkgPSAwLCBwdHIgPSBtdWx0aV9zdGFydDsgaSA8IGNvdW50OyArK2ksIHB0ciA9IHB0ci0+bmV4dCkgeworICAgICAgICAgIGZvcm1zW2ldLm9wdGlvbiA9IHB0ci0+Zm9ybS5vcHRpb247CisgICAgICAgICAgZm9ybXNbaV0udmFsdWUgPSBwdHItPmZvcm0udmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZm9ybXNbY291bnRdLm9wdGlvbiA9IENVUkxGT1JNX0VORDsKKyAgICAgICAgRnJlZU11bHRpSW5mbygmbXVsdGlfc3RhcnQsICZtdWx0aV9jdXJyZW50KTsKKyAgICAgICAgaWYoY3VybF9mb3JtYWRkKGh0dHBwb3N0LCBsYXN0X3Bvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0FSUkFZLCBmb3JtcywgQ1VSTEZPUk1fRU5EKSAhPSAwKSB7CisgICAgICAgICAgd2FybmYoY29uZmlnLCAiY3VybF9mb3JtYWRkIGZhaWxlZCFcbiIpOworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoZm9ybXMpOworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoY29udGVudHMpOworICAgICAgICAgIHJldHVybiA1OworICAgICAgICB9CisgICAgICAgIEN1cmxfc2FmZWZyZWUoZm9ybXMpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN0cnVjdCBjdXJsX2Zvcm1zIGluZm9bNF07CisgICAgICBpbnQgaSA9IDA7CisgICAgICBjaGFyICpjdCA9IGxpdGVyYWxfdmFsdWUgPyBOVUxMIDogc3Ryc3RyKGNvbnRwLCAiO3R5cGU9Iik7CisKKyAgICAgIGluZm9baV0ub3B0aW9uID0gQ1VSTEZPUk1fQ09QWU5BTUU7CisgICAgICBpbmZvW2ldLnZhbHVlID0gbmFtZTsKKyAgICAgIGkrKzsKKworICAgICAgaWYoY3QpIHsKKyAgICAgICAgaW5mb1tpXS5vcHRpb24gPSBDVVJMRk9STV9DT05URU5UVFlQRTsKKyAgICAgICAgaW5mb1tpXS52YWx1ZSA9ICZjdFs2XTsKKyAgICAgICAgaSsrOworICAgICAgICBjdFswXSA9ICdcMCc7IC8qIHplcm8gdGVybWluYXRlIGhlcmUgKi8KKyAgICAgIH0KKworICAgICAgaWYoY29udHBbMF09PSc8JyAmJiAhbGl0ZXJhbF92YWx1ZSkgeworICAgICAgICBpbmZvW2ldLm9wdGlvbiA9IENVUkxGT1JNX0ZJTEVDT05URU5UOworICAgICAgICBpbmZvW2ldLnZhbHVlID0gY29udHArMTsKKyAgICAgICAgaSsrOworICAgICAgICBpbmZvW2ldLm9wdGlvbiA9IENVUkxGT1JNX0VORDsKKworICAgICAgICBpZihjdXJsX2Zvcm1hZGQoaHR0cHBvc3QsIGxhc3RfcG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0FSUkFZLCBpbmZvLCBDVVJMRk9STV9FTkQgKSAhPSAwKSB7CisgICAgICAgICAgd2FybmYoY29uZmlnLCAiY3VybF9mb3JtYWRkIGZhaWxlZCwgcG9zc2libHkgdGhlIGZpbGUgJXMgaXMgYmFkIVxuIiwKKyAgICAgICAgICAgICAgICBjb250cCsxKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKGNvbnRlbnRzKTsKKyAgICAgICAgICByZXR1cm4gNjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSB7CisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgICAgICAgIGlmKGNvbnZlcnRfdG9fbmV0d29yayhjb250cCwgc3RybGVuKGNvbnRwKSkpIHsKKyAgICAgICAgICB3YXJuZihjb25maWcsICJjdXJsX2Zvcm1hZGQgZmFpbGVkIVxuIik7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShjb250ZW50cyk7CisgICAgICAgICAgcmV0dXJuIDc7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBpbmZvW2ldLm9wdGlvbiA9IENVUkxGT1JNX0NPUFlDT05URU5UUzsKKyAgICAgICAgaW5mb1tpXS52YWx1ZSA9IGNvbnRwOworICAgICAgICBpKys7CisgICAgICAgIGluZm9baV0ub3B0aW9uID0gQ1VSTEZPUk1fRU5EOworICAgICAgICBpZihjdXJsX2Zvcm1hZGQoaHR0cHBvc3QsIGxhc3RfcG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0FSUkFZLCBpbmZvLCBDVVJMRk9STV9FTkQpICE9IDApIHsKKyAgICAgICAgICB3YXJuZihjb25maWcsICJjdXJsX2Zvcm1hZGQgZmFpbGVkIVxuIik7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShjb250ZW50cyk7CisgICAgICAgICAgcmV0dXJuIDg7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgfQorICBlbHNlIHsKKyAgICB3YXJuZihjb25maWcsICJJbGxlZ2FsbHkgZm9ybWF0dGVkIGlucHV0IGZpZWxkIVxuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgQ3VybF9zYWZlZnJlZShjb250ZW50cyk7CisgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9mb3JtcGFyc2UuaCBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2Zvcm1wYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYmY1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9mb3JtcGFyc2UuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfRk9STVBBUlNFX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVE9PTF9GT1JNUEFSU0VfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworaW50IGZvcm1wYXJzZShzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcsCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0LAorICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKmh0dHBwb3N0LAorICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqKmxhc3RfcG9zdCwKKyAgICAgICAgICAgICAgYm9vbCBsaXRlcmFsX3ZhbHVlKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfRk9STVBBUlNFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfZ2V0cGFyYW0uYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2dldHBhcmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlMmE2NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2dldHBhcmFtLmMKQEAgLTAsMCArMSwxNjQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpbmNsdWRlICJyYXdzdHIuaCIKKworI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCisvKiB1c2Ugb3VyIG93biBwcmludGYoKSBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJjdXJseC5oIgorCisjaWZkZWYgVVNFX01BTlVBTAorIyAgaW5jbHVkZSAiaHVnZWhlbHAuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidG9vbF9iaW5tb2RlLmgiCisjaW5jbHVkZSAidG9vbF9jZmdhYmxlLmgiCisjaW5jbHVkZSAidG9vbF9jYl9wcmcuaCIKKyNpbmNsdWRlICJ0b29sX2Zvcm1wYXJzZS5oIgorI2luY2x1ZGUgInRvb2xfZ2V0cGFyYW0uaCIKKyNpbmNsdWRlICJ0b29sX2hlbHAuaCIKKyNpbmNsdWRlICJ0b29sX2hlbHBlcnMuaCIKKyNpbmNsdWRlICJ0b29sX2xpYmluZm8uaCIKKyNpbmNsdWRlICJ0b29sX21zZ3MuaCIKKyNpbmNsdWRlICJ0b29sX3BhcmFtaGxwLmgiCisjaW5jbHVkZSAidG9vbF9wYXJzZWNmZy5oIgorI2luY2x1ZGUgInRvb2xfdmVyc2lvbi5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCisjaWZkZWYgTVNET1MKKyMgIGRlZmluZSBVU0VfV0FUVDMyCisjZW5kaWYKKworI2RlZmluZSBHZXRTdHIoc3RyLHZhbCkgZG8geyBcCisgIGlmKCooc3RyKSkgeyBcCisgICAgZnJlZSgqKHN0cikpOyBcCisgICAgKihzdHIpID0gTlVMTDsgXAorICB9IFwKKyAgaWYoKHZhbCkpIFwKKyAgICAqKHN0cikgPSBzdHJkdXAoKHZhbCkpOyBcCisgIGlmKCEodmFsKSkgXAorICAgIHJldHVybiBQQVJBTV9OT19NRU07IFwKK30gV0hJTEVfRkFMU0UKKworc3RydWN0IExvbmdTaG9ydCB7CisgIGNvbnN0IGNoYXIgKmxldHRlcjsgLyogc2hvcnQgbmFtZSBvcHRpb24gKi8KKyAgY29uc3QgY2hhciAqbG5hbWU7ICAvKiBsb25nIG5hbWUgb3B0aW9uICovCisgIGJvb2wgZXh0cmFwYXJhbTsgICAgLyogd2hldGhlciBpdCB0YWtlcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IExvbmdTaG9ydCBhbGlhc2VzW109IHsKKyAgLyogYWxsIHRoZXNlIG9uZXMsIHN0YXJ0aW5nIHdpdGggIioiIG9yICIkIiBhcyBhIHNob3J0LW9wdGlvbiBoYXZlICpubyoKKyAgICAgc2hvcnQgb3B0aW9uIHRvIG1lbnRpb24uICovCisgIHsiKiIsICAidXJsIiwgICAgICAgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiKmEiLCAicmFuZG9tLWZpbGUiLCAgICAgICAgICAgICAgVFJVRX0sCisgIHsiKmIiLCAiZWdkLWZpbGUiLCAgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiKmMiLCAiY29ubmVjdC10aW1lb3V0IiwgICAgICAgICAgVFJVRX0sCisgIHsiKmQiLCAiY2lwaGVycyIsICAgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiKmUiLCAiZGlzYWJsZS1lcHN2IiwgICAgICAgICAgICAgRkFMU0V9LAorICB7IipFIiwgImVwc3YiLCAgICAgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgICAgICAgIC8qICdlcHN2JyBtYWRlIGxpa2UgdGhpcyB0byBtYWtlIC0tbm8tZXBzdiBhbmQgLS1lcHN2IHRvIHdvcmsKKyAgICAgICAgICAgICBhbHRob3VnaCAtLWRpc2FibGUtZXBzdiBpcyB0aGUgZG9jdW1lbnRlZCBvcHRpb24gKi8KKyNpZmRlZiBVU0VfRU5WSVJPTk1FTlQKKyAgeyIqZiIsICJlbnZpcm9ubWVudCIsICAgICAgICAgICAgICBGQUxTRX0sCisjZW5kaWYKKyAgeyIqZyIsICJ0cmFjZSIsICAgICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIqaCIsICJ0cmFjZS1hc2NpaSIsICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIqaSIsICJsaW1pdC1yYXRlIiwgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIqaiIsICJjb21wcmVzc2VkIiwgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiKkoiLCAidHItZW5jb2RpbmciLCAgICAgICAgICAgICAgRkFMU0V9LAorICB7IiprIiwgImRpZ2VzdCIsICAgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyIqbCIsICJuZWdvdGlhdGUiLCAgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiKm0iLCAibnRsbSIsICAgICAgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7IipNIiwgIm50bG0td2IiLCAgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyIqbiIsICJiYXNpYyIsICAgICAgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiKm8iLCAiYW55YXV0aCIsICAgICAgICAgICAgICAgICAgRkFMU0V9LAorI2lmZGVmIFVTRV9XQVRUMzIKKyAgeyIqcCIsICJ3ZGVidWciLCAgICAgICAgICAgICAgICAgICBGQUxTRX0sCisjZW5kaWYKKyAgeyIqcSIsICJmdHAtY3JlYXRlLWRpcnMiLCAgICAgICAgICBGQUxTRX0sCisgIHsiKnIiLCAiY3JlYXRlLWRpcnMiLCAgICAgICAgICAgICAgRkFMU0V9LAorICB7IipzIiwgIm1heC1yZWRpcnMiLCAgICAgICAgICAgICAgIFRSVUV9LAorICB7Iip0IiwgInByb3h5LW50bG0iLCAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyIqdSIsICJjcmxmIiwgICAgICAgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiKnYiLCAic3RkZXJyIiwgICAgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiKnciLCAiaW50ZXJmYWNlIiwgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiKngiLCAia3JiIiAsICAgICAgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiKngiLCAia3JiNCIgLCAgICAgICAgICAgICAgICAgICAgVFJVRX0sCisgICAgICAgICAvKiAna3JiNCcgaXMgdGhlIHByZXZpb3VzIG5hbWUgKi8KKyAgeyIqeSIsICJtYXgtZmlsZXNpemUiLCAgICAgICAgICAgICBUUlVFfSwKKyAgeyIqeiIsICJkaXNhYmxlLWVwcnQiLCAgICAgICAgICAgICBGQUxTRX0sCisgIHsiKloiLCAiZXBydCIsICAgICAgICAgICAgICAgICAgICAgRkFMU0V9LAorICAgICAgICAgLyogJ2VwcnQnIG1hZGUgbGlrZSB0aGlzIHRvIG1ha2UgLS1uby1lcHJ0IGFuZCAtLWVwcnQgdG8gd29yaworICAgICAgICAgICAgIGFsdGhvdWdoIC0tZGlzYWJsZS1lcHJ0IGlzIHRoZSBkb2N1bWVudGVkIG9wdGlvbiAqLworICB7IiRhIiwgImZ0cC1zc2wiLCAgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgICAgICAgIC8qICdmdHAtc3NsJyBkZXByZWNhdGVkIG5hbWUgc2luY2UgNy4yMC4wICovCisgIHsiJGEiLCAic3NsIiwgICAgICAgICAgICAgICAgICAgICAgRkFMU0V9LAorICAgICAgICAgLyogJ3NzbCcgbmV3IG9wdGlvbiBuYW1lIGluIDcuMjAuMCwgcHJldmlvdXNseSB0aGlzIHdhcyBmdHAtc3NsICovCisgIHsiJGIiLCAiZnRwLXBhc3YiLCAgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7IiRjIiwgInNvY2tzNSIsICAgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IiRjIiwgInNvY2tzIiwgICAgICAgICAgICAgICAgICAgIFRSVUV9LAorICAgICAgICAgLyogJ3NvY2tzJyBpcyBob3cgdGhlIG9wdGlvbiBvbmNlIHdhcyBkb2N1bWVudGVkIGJ1dCB3ZSBwcmVmZXIKKyAgICAgICAgICAgIHRoZSAtLXNvY2tzNSB2ZXJzaW9uIGZvciBleHBsaWNpdCB2ZXJzaW9uICovCisgIHsiJGQiLCAidGNwLW5vZGVsYXkiLCAgICAgICAgICAgICAgRkFMU0V9LAorICB7IiRlIiwgInByb3h5LWRpZ2VzdCIsICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyIkZiIsICJwcm94eS1iYXNpYyIsICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiJGciLCAicmV0cnkiLCAgICAgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiJGgiLCAicmV0cnktZGVsYXkiLCAgICAgICAgICAgICAgVFJVRX0sCisgIHsiJGkiLCAicmV0cnktbWF4LXRpbWUiLCAgICAgICAgICAgVFJVRX0sCisgIHsiJGsiLCAicHJveHktbmVnb3RpYXRlIiwgICAgICAgICAgRkFMU0V9LAorICB7IiRtIiwgImZ0cC1hY2NvdW50IiwgICAgICAgICAgICAgIFRSVUV9LAorICB7IiRuIiwgInByb3h5LWFueWF1dGgiLCAgICAgICAgICAgIEZBTFNFfSwKKyAgeyIkbyIsICJ0cmFjZS10aW1lIiwgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiJHAiLCAiaWdub3JlLWNvbnRlbnQtbGVuZ3RoIiwgICAgRkFMU0V9LAorICB7IiRxIiwgImZ0cC1za2lwLXBhc3YtaXAiLCAgICAgICAgIEZBTFNFfSwKKyAgeyIkciIsICJmdHAtbWV0aG9kIiwgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIkcyIsICJsb2NhbC1wb3J0IiwgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIkdCIsICJzb2NrczQiLCAgICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIkVCIsICJzb2NrczRhIiwgICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIkdSIsICJmdHAtYWx0ZXJuYXRpdmUtdG8tdXNlciIsICBUUlVFfSwKKyAgeyIkdiIsICJmdHAtc3NsLXJlcWQiLCAgICAgICAgICAgICBGQUxTRX0sCisgICAgICAgICAvKiAnZnRwLXNzbC1yZXFkJyBkZXByZWNhdGVkIG5hbWUgc2luY2UgNy4yMC4wICovCisgIHsiJHYiLCAic3NsLXJlcWQiLCAgICAgICAgICAgICAgICAgRkFMU0V9LAorICAgICAgICAgLyogJ3NzbC1yZXFkJyBuZXcgaW4gNy4yMC4wLCBwcmV2aW91c2x5IHRoaXMgd2FzIGZ0cC1zc2wtcmVxZCAqLworICB7IiR3IiwgInNlc3Npb25pZCIsICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgICAgICAgIC8qIKFzZXNzaW9uaWQnIGxpc3RlZCBhcyAtLW5vLXNlc3Npb25pZCBpbiB0aGUgaGVscCAqLworICB7IiR4IiwgImZ0cC1zc2wtY29udHJvbCIsICAgICAgICAgIEZBTFNFfSwKKyAgeyIkeSIsICJmdHAtc3NsLWNjYyIsICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiJGoiLCAiZnRwLXNzbC1jY2MtbW9kZSIsICAgICAgICAgVFJVRX0sCisgIHsiJHoiLCAibGliY3VybCIsICAgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiJCMiLCAicmF3IiwgICAgICAgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7IiQwIiwgInBvc3QzMDEiLCAgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyIkMSIsICJrZWVwYWxpdmUiLCAgICAgICAgICAgICAgICBGQUxTRX0sCisgICAgICAgICAvKiAna2VlcGFsaXZlJyBsaXN0ZWQgYXMgLS1uby1rZWVwYWxpdmUgaW4gdGhlIGhlbHAgKi8KKyAgeyIkMiIsICJzb2NrczUtaG9zdG5hbWUiLCAgICAgICAgICBUUlVFfSwKKyAgeyIkMyIsICJrZWVwYWxpdmUtdGltZSIsICAgICAgICAgICBUUlVFfSwKKyAgeyIkNCIsICJwb3N0MzAyIiwgICAgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiJDUiLCAibm9wcm94eSIsICAgICAgICAgICAgICAgICAgVFJVRX0sCisjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQorICB7IiQ2IiwgInNvY2tzNS1nc3NhcGktc2VydmljZSIsICAgIFRSVUV9LAorICB7IiQ3IiwgInNvY2tzNS1nc3NhcGktbmVjIiwgICAgICAgIEZBTFNFfSwKKyNlbmRpZgorICB7IiQ4IiwgInByb3h5MS4wIiwgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IiQ5IiwgInRmdHAtYmxrc2l6ZSIsICAgICAgICAgICAgIFRSVUV9LAorICB7IiRBIiwgIm1haWwtZnJvbSIsICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IiRCIiwgIm1haWwtcmNwdCIsICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IiRDIiwgImZ0cC1wcmV0IiwgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyIkRCIsICJwcm90byIsICAgICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIkRSIsICJwcm90by1yZWRpciIsICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIkRiIsICJyZXNvbHZlIiwgICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIkRyIsICJkZWxlZ2F0aW9uIiwgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIkSCIsICJtYWlsLWF1dGgiLCAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIwIiwgICJodHRwMS4wIiwgICAgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiMSIsICAidGxzdjEiLCAgICAgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7IjIiLCAgInNzbHYyIiwgICAgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyIzIiwgICJzc2x2MyIsICAgICAgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiNCIsICAiaXB2NCIsICAgICAgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7IjYiLCAgImlwdjYiLCAgICAgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyJhIiwgICJhcHBlbmQiLCAgICAgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiQSIsICAidXNlci1hZ2VudCIsICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiYiIsICAiY29va2llIiwgICAgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiQiIsICAidXNlLWFzY2lpIiwgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7ImMiLCAgImNvb2tpZS1qYXIiLCAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkMiLCAgImNvbnRpbnVlLWF0IiwgICAgICAgICAgICAgIFRSVUV9LAorICB7ImQiLCAgImRhdGEiLCAgICAgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7ImRhIiwgImRhdGEtYXNjaWkiLCAgICAgICAgICAgICAgIFRSVUV9LAorICB7ImRiIiwgImRhdGEtYmluYXJ5IiwgICAgICAgICAgICAgIFRSVUV9LAorICB7ImRlIiwgImRhdGEtdXJsZW5jb2RlIiwgICAgICAgICAgIFRSVUV9LAorICB7IkQiLCAgImR1bXAtaGVhZGVyIiwgICAgICAgICAgICAgIFRSVUV9LAorICB7ImUiLCAgInJlZmVyZXIiLCAgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkUiLCAgImNlcnQiLCAgICAgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVhIiwgImNhY2VydCIsICAgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkViIiwgImNlcnQtdHlwZSIsICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVjIiwgImtleSIsICAgICAgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVkIiwgImtleS10eXBlIiwgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVlIiwgInBhc3MiLCAgICAgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVmIiwgImVuZ2luZSIsICAgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVnIiwgImNhcGF0aCAiLCAgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVoIiwgInB1YmtleSIsICAgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVpIiwgImhvc3RwdWJtZDUiLCAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVqIiwgImNybGZpbGUiLCAgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVrIiwgInRsc3VzZXIiLCAgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVsIiwgInRsc3Bhc3N3b3JkIiwgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVtIiwgInRsc2F1dGh0eXBlIiwgICAgICAgICAgICAgIFRSVUV9LAorICB7IkVuIiwgInNzbC1hbGxvdy1iZWFzdCIsICAgICAgICAgIEZBTFNFfSwKKyAgeyJmIiwgICJmYWlsIiwgICAgICAgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiRiIsICAiZm9ybSIsICAgICAgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiRnMiLCAiZm9ybS1zdHJpbmciLCAgICAgICAgICAgICAgVFJVRX0sCisgIHsiZyIsICAiZ2xvYm9mZiIsICAgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7IkciLCAgImdldCIsICAgICAgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyJoIiwgICJoZWxwIiwgICAgICAgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiSCIsICAiaGVhZGVyIiwgICAgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiaSIsICAiaW5jbHVkZSIsICAgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7IkkiLCAgImhlYWQiLCAgICAgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyJqIiwgICJqdW5rLXNlc3Npb24tY29va2llcyIsICAgICBGQUxTRX0sCisgIHsiSiIsICAicmVtb3RlLWhlYWRlci1uYW1lIiwgICAgICAgRkFMU0V9LAorICB7ImsiLCAgImluc2VjdXJlIiwgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyJLIiwgICJjb25maWciLCAgICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJsIiwgICJsaXN0LW9ubHkiLCAgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiTCIsICAibG9jYXRpb24iLCAgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7Ikx0IiwgImxvY2F0aW9uLXRydXN0ZWQiLCAgICAgICAgIEZBTFNFfSwKKyAgeyJtIiwgICJtYXgtdGltZSIsICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJNIiwgICJtYW51YWwiLCAgICAgICAgICAgICAgICAgICBGQUxTRX0sCisgIHsibiIsICAibmV0cmMiLCAgICAgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7Im5vIiwgIm5ldHJjLW9wdGlvbmFsIiwgICAgICAgICAgIEZBTFNFfSwKKyAgeyJuZSIsICJuZXRyYy1maWxlIiwgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJOIiwgICJidWZmZXIiLCAgICAgICAgICAgICAgICAgICBGQUxTRX0sCisgICAgICAgICAvKiAnYnVmZmVyJyBsaXN0ZWQgYXMgLS1uby1idWZmZXIgaW4gdGhlIGhlbHAgKi8KKyAgeyJvIiwgICJvdXRwdXQiLCAgICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJPIiwgICJyZW1vdGUtbmFtZSIsICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiT2EiLCAicmVtb3RlLW5hbWUtYWxsIiwgICAgICAgICAgRkFMU0V9LAorICB7InAiLCAgInByb3h5dHVubmVsIiwgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyJQIiwgICJmdHBwb3J0IiwgICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgICAgICAgIC8qICdmdHBwb3J0JyBvbGQgdmVyc2lvbiAqLworICB7IlAiLCAgImZ0cC1wb3J0IiwgICAgICAgICAgICAgICAgIFRSVUV9LAorICB7InEiLCAgImRpc2FibGUiLCAgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyJRIiwgICJxdW90ZSIsICAgICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJyIiwgICJyYW5nZSIsICAgICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJSIiwgICJyZW1vdGUtdGltZSIsICAgICAgICAgICAgICBGQUxTRX0sCisgIHsicyIsICAic2lsZW50IiwgICAgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7IlMiLCAgInNob3ctZXJyb3IiLCAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyJ0IiwgICJ0ZWxuZXQtb3B0aW9ucyIsICAgICAgICAgICBUUlVFfSwKKyAgICAgICAgIC8qICd0ZWxuZXQtb3B0aW9ucycgZG9jdW1lbnRlZCBhcyB0ZWxuZXQtb3B0aW9uICovCisgIHsiVCIsICAidXBsb2FkLWZpbGUiLCAgICAgICAgICAgICAgVFJVRX0sCisgIHsidSIsICAidXNlciIsICAgICAgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiVSIsICAicHJveHktdXNlciIsICAgICAgICAgICAgICAgVFJVRX0sCisgIHsidiIsICAidmVyYm9zZSIsICAgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7IlYiLCAgInZlcnNpb24iLCAgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyJ3IiwgICJ3cml0ZS1vdXQiLCAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJ4IiwgICJwcm94eSIsICAgICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJYIiwgICJyZXF1ZXN0IiwgICAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJYIiwgICJodHRwLXJlcXVlc3QiLCAgICAgICAgICAgICBUUlVFfSwKKyAgICAgICAgIC8qICdodHRwLXJlcXVlc3QnIE9CU09MRVRFIFZFUlNJT04gKi8KKyAgeyJZIiwgICJzcGVlZC1saW1pdCIsICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJ5IiwgICJzcGVlZC10aW1lIiwgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJ6IiwgICJ0aW1lLWNvbmQiLCAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyIjIiwgICJwcm9ncmVzcy1iYXIiLCAgICAgICAgICAgICBGQUxTRX0sCisgIHsifiIsICAieGF0dHIiLCAgICAgICAgICAgICAgICAgICAgRkFMU0V9LAorfTsKKworc3RydWN0IGZlYXQgeworICBjb25zdCBjaGFyICpuYW1lOworICBpbnQgYml0bWFzazsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmVhdCBmZWF0c1tdID0geworICB7IkFzeW5jaEROUyIsICAgICAgQ1VSTF9WRVJTSU9OX0FTWU5DSEROU30sCisgIHsiRGVidWciLCAgICAgICAgICBDVVJMX1ZFUlNJT05fREVCVUd9LAorICB7IlRyYWNrTWVtb3J5IiwgICAgQ1VSTF9WRVJTSU9OX0NVUkxERUJVR30sCisgIHsiR1NTLU5lZ290aWF0ZSIsICBDVVJMX1ZFUlNJT05fR1NTTkVHT1RJQVRFfSwKKyAgeyJJRE4iLCAgICAgICAgICAgIENVUkxfVkVSU0lPTl9JRE59LAorICB7IklQdjYiLCAgICAgICAgICAgQ1VSTF9WRVJTSU9OX0lQVjZ9LAorICB7IkxhcmdlZmlsZSIsICAgICAgQ1VSTF9WRVJTSU9OX0xBUkdFRklMRX0sCisgIHsiTlRMTSIsICAgICAgICAgICBDVVJMX1ZFUlNJT05fTlRMTX0sCisgIHsiTlRMTV9XQiIsICAgICAgICBDVVJMX1ZFUlNJT05fTlRMTV9XQn0sCisgIHsiU1BORUdPIiwgICAgICAgICBDVVJMX1ZFUlNJT05fU1BORUdPfSwKKyAgeyJTU0wiLCAgICAgICAgICAgIENVUkxfVkVSU0lPTl9TU0x9LAorICB7IlNTUEkiLCAgICAgICAgICAgQ1VSTF9WRVJTSU9OX1NTUEl9LAorICB7ImtyYjQiLCAgICAgICAgICAgQ1VSTF9WRVJTSU9OX0tFUkJFUk9TNH0sCisgIHsibGlieiIsICAgICAgICAgICBDVVJMX1ZFUlNJT05fTElCWn0sCisgIHsiQ2hhckNvbnYiLCAgICAgICBDVVJMX1ZFUlNJT05fQ09OVn0sCisgIHsiVExTLVNSUCIsICAgICAgICBDVVJMX1ZFUlNJT05fVExTQVVUSF9TUlB9Cit9OworCitQYXJhbWV0ZXJFcnJvciBnZXRwYXJhbWV0ZXIoY2hhciAqZmxhZywgICAgLyogZiBvciAtbG9uZy1mbGFnICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmV4dGFyZywgLyogTlVMTCBpZiB1bnNldCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnVzZWRhcmcsIC8qIHNldCB0byBUUlVFIGlmIHRoZSBhcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiB1c2VkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IENvbmZpZ3VyYWJsZSAqY29uZmlnKQoreworICBjaGFyIGxldHRlcjsKKyAgY2hhciBzdWJsZXR0ZXIgPSAnXDAnOyAvKiBzdWJsZXR0ZXJzIGNhbiBvbmx5IG9jY3VyIG9uIGxvbmcgb3B0aW9ucyAqLworICBpbnQgcmM7CisgIGNvbnN0IGNoYXIgKnBhcnNlID0gTlVMTDsKKyAgdW5zaWduZWQgaW50IGo7CisgIHRpbWVfdCBub3c7CisgIGludCBoaXQgPSAtMTsKKyAgYm9vbCBsb25nb3B0ID0gRkFMU0U7CisgIGJvb2wgc2luZ2xlb3B0ID0gRkFMU0U7IC8qIHdoZW4gdHJ1ZSBtZWFucyAnLW8gZm9vJyB1c2VkICctb2ZvbycgKi8KKyAgUGFyYW1ldGVyRXJyb3IgZXJyOworICBib29sIHRvZ2dsZSA9IFRSVUU7IC8qIGhvdyB0byBzd2l0Y2ggYm9vbGVhbiBvcHRpb25zLCBvbiBvciBvZmYuIENvbnRyb2xsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICBieSB1c2luZyAtLU9QVElPTiBvciAtLW5vLU9QVElPTiAqLworCisKKyAgaWYoKCctJyAhPSBmbGFnWzBdKSB8fAorICAgICAoKCctJyA9PSBmbGFnWzBdKSAmJiAoJy0nID09IGZsYWdbMV0pKSkgeworICAgIC8qIHRoaXMgc2hvdWxkIGJlIGEgbG9uZyBuYW1lICovCisgICAgY2hhciAqd29yZCA9ICgnLScgPT0gZmxhZ1swXSkgPyBmbGFnKzIgOiBmbGFnOworICAgIHNpemVfdCBmbmFtID0gc3RybGVuKHdvcmQpOworICAgIGludCBudW1oaXRzID0gMDsKKworICAgIGlmKCFzdHJuY21wKHdvcmQsICJuby0iLCAzKSkgeworICAgICAgLyogZGlzYWJsZSB0aGlzIG9wdGlvbiBidXQgaWdub3JlIHRoZSAibm8tIiBwYXJ0IHdoZW4gbG9va2luZyBmb3IgaXQgKi8KKyAgICAgIHdvcmQgKz0gMzsKKyAgICAgIHRvZ2dsZSA9IEZBTFNFOworICAgIH0KKworICAgIGZvcihqID0gMDsgaiA8IHNpemVvZihhbGlhc2VzKS9zaXplb2YoYWxpYXNlc1swXSk7IGorKykgeworICAgICAgaWYoY3VybHhfc3RybmVxdWFsKGFsaWFzZXNbal0ubG5hbWUsIHdvcmQsIGZuYW0pKSB7CisgICAgICAgIGxvbmdvcHQgPSBUUlVFOworICAgICAgICBudW1oaXRzKys7CisgICAgICAgIGlmKGN1cmx4X3Jhd19lcXVhbChhbGlhc2VzW2pdLmxuYW1lLCB3b3JkKSkgeworICAgICAgICAgIHBhcnNlID0gYWxpYXNlc1tqXS5sZXR0ZXI7CisgICAgICAgICAgaGl0ID0gajsKKyAgICAgICAgICBudW1oaXRzID0gMTsgLyogYSBzaW5nbGUgdW5pcXVlIGhpdCAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHBhcnNlID0gYWxpYXNlc1tqXS5sZXR0ZXI7CisgICAgICAgIGhpdCA9IGo7CisgICAgICB9CisgICAgfQorICAgIGlmKG51bWhpdHMgPiAxKSB7CisgICAgICAvKiB0aGlzIGlzIGF0IGxlYXN0IHRoZSBzZWNvbmQgbWF0Y2ghICovCisgICAgICByZXR1cm4gUEFSQU1fT1BUSU9OX0FNQklHVU9VUzsKKyAgICB9CisgICAgaWYoaGl0IDwgMCkgeworICAgICAgcmV0dXJuIFBBUkFNX09QVElPTl9VTktOT1dOOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBmbGFnKys7IC8qIHByZWZpeGVkIHdpdGggb25lIGRhc2gsIHBhc3MgaXQgKi8KKyAgICBoaXQgPSAtMTsKKyAgICBwYXJzZSA9IGZsYWc7CisgIH0KKworICBkbyB7CisgICAgLyogd2UgY2FuIGxvb3AgaGVyZSBpZiB3ZSBoYXZlIG11bHRpcGxlIHNpbmdsZS1sZXR0ZXJzICovCisKKyAgICBpZighbG9uZ29wdCkgeworICAgICAgaWYoTlVMTCAhPSBwYXJzZSkgeworICAgICAgICBsZXR0ZXIgPSAoY2hhcikqcGFyc2U7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgbGV0dGVyID0gJ1wwJzsKKyAgICAgIH0KKyAgICAgIHN1YmxldHRlcj0nXDAnOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGxldHRlciA9IHBhcnNlWzBdOworICAgICAgc3VibGV0dGVyID0gcGFyc2VbMV07CisgICAgfQorICAgICp1c2VkYXJnID0gRkFMU0U7IC8qIGRlZmF1bHQgaXMgdGhhdCB3ZSBkb24ndCB1c2UgdGhlIGFyZyAqLworCisgICAgaWYoaGl0IDwgMCkgeworICAgICAgZm9yKGogPSAwOyBqIDwgc2l6ZW9mKGFsaWFzZXMpL3NpemVvZihhbGlhc2VzWzBdKTsgaisrKSB7CisgICAgICAgIGlmKGxldHRlciA9PSBhbGlhc2VzW2pdLmxldHRlclswXSkgeworICAgICAgICAgIGhpdCA9IGo7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmKGhpdCA8IDApIHsKKyAgICAgICAgcmV0dXJuIFBBUkFNX09QVElPTl9VTktOT1dOOworICAgICAgfQorICAgIH0KKworICAgIGlmKGFsaWFzZXNbaGl0XS5leHRyYXBhcmFtKSB7CisgICAgICAvKiB0aGlzIG9wdGlvbiByZXF1aXJlcyBhbiBleHRyYSBwYXJhbWV0ZXIgKi8KKyAgICAgIGlmKCFsb25nb3B0ICYmIHBhcnNlWzFdKSB7CisgICAgICAgIG5leHRhcmcgPSAoY2hhciAqKSZwYXJzZVsxXTsgLyogdGhpcyBpcyB0aGUgYWN0dWFsIGV4dHJhIHBhcmFtZXRlciAqLworICAgICAgICBzaW5nbGVvcHQgPSBUUlVFOyAgIC8qIGRvbid0IGxvb3AgYW55bW9yZSBhZnRlciB0aGlzICovCisgICAgICB9CisgICAgICBlbHNlIGlmKCFuZXh0YXJnKQorICAgICAgICByZXR1cm4gUEFSQU1fUkVRVUlSRVNfUEFSQU1FVEVSOworICAgICAgZWxzZQorICAgICAgICAqdXNlZGFyZyA9IFRSVUU7IC8qIG1hcmsgaXQgYXMgdXNlZCAqLworICAgIH0KKworICAgIHN3aXRjaChsZXR0ZXIpIHsKKyAgICBjYXNlICcqJzogLyogb3B0aW9ucyB3aXRob3V0IGEgc2hvcnQgb3B0aW9uICovCisgICAgICBzd2l0Y2goc3VibGV0dGVyKSB7CisgICAgICBjYXNlICdhJzogLyogcmFuZG9tLWZpbGUgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPnJhbmRvbV9maWxlLCBuZXh0YXJnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdiJzogLyogZWdkLWZpbGUgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPmVnZF9maWxlLCBuZXh0YXJnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdjJzogLyogY29ubmVjdC10aW1lb3V0ICovCisgICAgICAgIGlmKHN0cjJudW0oJmNvbmZpZy0+Y29ubmVjdHRpbWVvdXQsIG5leHRhcmcpKQorICAgICAgICAgIHJldHVybiBQQVJBTV9CQURfTlVNRVJJQzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdkJzogLyogY2lwaGVycyAqLworICAgICAgICBHZXRTdHIoJmNvbmZpZy0+Y2lwaGVyX2xpc3QsIG5leHRhcmcpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2UnOiAvKiAtLWRpc2FibGUtZXBzdiAqLworICAgICAgICBjb25maWctPmRpc2FibGVfZXBzdiA9IHRvZ2dsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdFJzogLyogLS1lcHN2ICovCisgICAgICAgIGNvbmZpZy0+ZGlzYWJsZV9lcHN2ID0gKCF0b2dnbGUpP1RSVUU6RkFMU0U7CisgICAgICAgIGJyZWFrOworI2lmZGVmIFVTRV9FTlZJUk9OTUVOVAorICAgICAgY2FzZSAnZic6CisgICAgICAgIGNvbmZpZy0+d3JpdGVlbnYgPSB0b2dnbGU7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICBjYXNlICdnJzogLyogLS10cmFjZSAqLworICAgICAgICBHZXRTdHIoJmNvbmZpZy0+dHJhY2VfZHVtcCwgbmV4dGFyZyk7CisgICAgICAgIGlmKGNvbmZpZy0+dHJhY2V0eXBlICYmIChjb25maWctPnRyYWNldHlwZSAhPSBUUkFDRV9CSU4pKQorICAgICAgICAgIHdhcm5mKGNvbmZpZywgIi0tdHJhY2Ugb3ZlcnJpZGVzIGFuIGVhcmxpZXIgdHJhY2UvdmVyYm9zZSBvcHRpb25cbiIpOworICAgICAgICBjb25maWctPnRyYWNldHlwZSA9IFRSQUNFX0JJTjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdoJzogLyogLS10cmFjZS1hc2NpaSAqLworICAgICAgICBHZXRTdHIoJmNvbmZpZy0+dHJhY2VfZHVtcCwgbmV4dGFyZyk7CisgICAgICAgIGlmKGNvbmZpZy0+dHJhY2V0eXBlICYmIChjb25maWctPnRyYWNldHlwZSAhPSBUUkFDRV9BU0NJSSkpCisgICAgICAgICAgd2FybmYoY29uZmlnLAorICAgICAgICAgICAgICAgICItLXRyYWNlLWFzY2lpIG92ZXJyaWRlcyBhbiBlYXJsaWVyIHRyYWNlL3ZlcmJvc2Ugb3B0aW9uXG4iKTsKKyAgICAgICAgY29uZmlnLT50cmFjZXR5cGUgPSBUUkFDRV9BU0NJSTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdpJzogLyogLS1saW1pdC1yYXRlICovCisgICAgICB7CisgICAgICAgIC8qIFdlIHN1cHBvcnQgRywgTSwgSyB0b28gKi8KKyAgICAgICAgY2hhciAqdW5pdDsKKyAgICAgICAgY3VybF9vZmZfdCB2YWx1ZSA9IGN1cmx4X3N0cnRvb2ZmdChuZXh0YXJnLCAmdW5pdCwgMCk7CisKKyAgICAgICAgaWYoISp1bml0KQorICAgICAgICAgIHVuaXQgPSAoY2hhciAqKSJiIjsKKyAgICAgICAgZWxzZSBpZihzdHJsZW4odW5pdCkgPiAxKQorICAgICAgICAgIHVuaXQgPSAoY2hhciAqKSJ3IjsgLyogdW5zdXBwb3J0ZWQgKi8KKworICAgICAgICBzd2l0Y2goKnVuaXQpIHsKKyAgICAgICAgY2FzZSAnRyc6CisgICAgICAgIGNhc2UgJ2cnOgorICAgICAgICAgIHZhbHVlICo9IDEwMjQqMTAyNCoxMDI0OworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdNJzoKKyAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgdmFsdWUgKj0gMTAyNCoxMDI0OworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdLJzoKKyAgICAgICAgY2FzZSAnayc6CisgICAgICAgICAgdmFsdWUgKj0gMTAyNDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnYic6CisgICAgICAgIGNhc2UgJ0InOgorICAgICAgICAgIC8qIGZvciBwbGFpbiBieXRlcywgbGVhdmUgYXMtaXMgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICB3YXJuZihjb25maWcsICJ1bnN1cHBvcnRlZCByYXRlIHVuaXQuIFVzZSBHLCBNLCBLIG9yIEIhXG4iKTsKKyAgICAgICAgICByZXR1cm4gUEFSQU1fQkFEX1VTRTsKKyAgICAgICAgfQorICAgICAgICBjb25maWctPnJlY3ZwZXJzZWNvbmQgPSB2YWx1ZTsKKyAgICAgICAgY29uZmlnLT5zZW5kcGVyc2Vjb25kID0gdmFsdWU7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgY2FzZSAnaic6IC8qIC0tY29tcHJlc3NlZCAqLworICAgICAgICBpZih0b2dnbGUgJiYgIShjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fTElCWikpCisgICAgICAgICAgcmV0dXJuIFBBUkFNX0xJQkNVUkxfRE9FU05UX1NVUFBPUlQ7CisgICAgICAgIGNvbmZpZy0+ZW5jb2RpbmcgPSB0b2dnbGU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICdKJzogLyogLS10ci1lbmNvZGluZyAqLworICAgICAgICBjb25maWctPnRyX2VuY29kaW5nID0gdG9nZ2xlOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnayc6IC8qIC0tZGlnZXN0ICovCisgICAgICAgIGlmKHRvZ2dsZSkKKyAgICAgICAgICBjb25maWctPmF1dGh0eXBlIHw9IENVUkxBVVRIX0RJR0VTVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNvbmZpZy0+YXV0aHR5cGUgJj0gfkNVUkxBVVRIX0RJR0VTVDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgJ2wnOiAvKiAtLW5lZ290aWF0ZSAqLworICAgICAgICBpZih0b2dnbGUpIHsKKyAgICAgICAgICBpZihjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fR1NTTkVHT1RJQVRFKQorICAgICAgICAgICAgY29uZmlnLT5hdXRodHlwZSB8PSBDVVJMQVVUSF9HU1NORUdPVElBVEU7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFBBUkFNX0xJQkNVUkxfRE9FU05UX1NVUFBPUlQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGNvbmZpZy0+YXV0aHR5cGUgJj0gfkNVUkxBVVRIX0dTU05FR09USUFURTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgJ20nOiAvKiAtLW50bG0gKi8KKyAgICAgICAgaWYodG9nZ2xlKSB7CisgICAgICAgICAgaWYoY3VybGluZm8tPmZlYXR1cmVzICYgQ1VSTF9WRVJTSU9OX05UTE0pCisgICAgICAgICAgICBjb25maWctPmF1dGh0eXBlIHw9IENVUkxBVVRIX05UTE07CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFBBUkFNX0xJQkNVUkxfRE9FU05UX1NVUFBPUlQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGNvbmZpZy0+YXV0aHR5cGUgJj0gfkNVUkxBVVRIX05UTE07CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICdNJzogLyogLS1udGxtLXdiICovCisgICAgICAgIGlmKHRvZ2dsZSkgeworICAgICAgICAgIGlmKGN1cmxpbmZvLT5mZWF0dXJlcyAmIENVUkxfVkVSU0lPTl9OVExNX1dCKQorICAgICAgICAgICAgY29uZmlnLT5hdXRodHlwZSB8PSBDVVJMQVVUSF9OVExNX1dCOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQQVJBTV9MSUJDVVJMX0RPRVNOVF9TVVBQT1JUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBjb25maWctPmF1dGh0eXBlICY9IH5DVVJMQVVUSF9OVExNX1dCOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnbic6IC8qIC0tYmFzaWMgZm9yIGNvbXBsZXRlbmVzcyAqLworICAgICAgICBpZih0b2dnbGUpCisgICAgICAgICAgY29uZmlnLT5hdXRodHlwZSB8PSBDVVJMQVVUSF9CQVNJQzsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNvbmZpZy0+YXV0aHR5cGUgJj0gfkNVUkxBVVRIX0JBU0lDOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnbyc6IC8qIC0tYW55YXV0aCwgbGV0IGxpYmN1cmwgcGljayBpdCAqLworICAgICAgICBpZih0b2dnbGUpCisgICAgICAgICAgY29uZmlnLT5hdXRodHlwZSA9IENVUkxBVVRIX0FOWTsKKyAgICAgICAgLyogLS1uby1hbnlhdXRoIHNpbXBseSBkb2Vzbid0IHRvdWNoIGl0ICovCisgICAgICAgIGJyZWFrOworCisjaWZkZWYgVVNFX1dBVFQzMgorICAgICAgY2FzZSAncCc6IC8qIC0td2RlYnVnICovCisgICAgICAgIGRidWdfaW5pdCgpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgY2FzZSAncSc6IC8qIC0tZnRwLWNyZWF0ZS1kaXJzICovCisgICAgICAgIGNvbmZpZy0+ZnRwX2NyZWF0ZV9kaXJzID0gdG9nZ2xlOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAncic6IC8qIC0tY3JlYXRlLWRpcnMgKi8KKyAgICAgICAgY29uZmlnLT5jcmVhdGVfZGlycyA9IFRSVUU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICdzJzogLyogLS1tYXgtcmVkaXJzICovCisgICAgICAgIC8qIHNwZWNpZmllZCBtYXggbm8gb2YgcmVkaXJlY3RzIChodHRwKHMpKSAqLworICAgICAgICBpZihzdHIybnVtKCZjb25maWctPm1heHJlZGlycywgbmV4dGFyZykpCisgICAgICAgICAgcmV0dXJuIFBBUkFNX0JBRF9OVU1FUklDOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAndCc6IC8qIC0tcHJveHktbnRsbSAqLworICAgICAgICBpZihjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fTlRMTSkKKyAgICAgICAgICBjb25maWctPnByb3h5bnRsbSA9IHRvZ2dsZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBQQVJBTV9MSUJDVVJMX0RPRVNOVF9TVVBQT1JUOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAndSc6IC8qIC0tY3JsZiAqLworICAgICAgICAvKiBMRiAtPiBDUkxGIGNvbnZlcnNpb24/ICovCisgICAgICAgIGNvbmZpZy0+Y3JsZiA9IFRSVUU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICd2JzogLyogLS1zdGRlcnIgKi8KKyAgICAgICAgaWYoc3RyY21wKG5leHRhcmcsICItIikpIHsKKyAgICAgICAgICBGSUxFICpuZXdmaWxlID0gZm9wZW4obmV4dGFyZywgInd0Iik7CisgICAgICAgICAgaWYoIW5ld2ZpbGUpCisgICAgICAgICAgICB3YXJuZihjb25maWcsICJGYWlsZWQgdG8gb3BlbiAlcyFcbiIsIG5leHRhcmcpOworICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYoY29uZmlnLT5lcnJvcnNfZm9wZW5lZCkKKyAgICAgICAgICAgICAgZmNsb3NlKGNvbmZpZy0+ZXJyb3JzKTsKKyAgICAgICAgICAgIGNvbmZpZy0+ZXJyb3JzID0gbmV3ZmlsZTsKKyAgICAgICAgICAgIGNvbmZpZy0+ZXJyb3JzX2ZvcGVuZWQgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgY29uZmlnLT5lcnJvcnMgPSBzdGRvdXQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAndyc6IC8qIC0taW50ZXJmYWNlICovCisgICAgICAgIC8qIGludGVyZmFjZSAqLworICAgICAgICBHZXRTdHIoJmNvbmZpZy0+aWZhY2UsIG5leHRhcmcpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3gnOiAvKiAtLWtyYiAqLworICAgICAgICAvKiBrZXJiZXJvcyBsZXZlbCBzdHJpbmcgKi8KKyAgICAgICAgaWYoY3VybGluZm8tPmZlYXR1cmVzICYgKENVUkxfVkVSU0lPTl9LRVJCRVJPUzQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTF9WRVJTSU9OX0dTU05FR09USUFURSkpCisgICAgICAgICAgR2V0U3RyKCZjb25maWctPmtyYmxldmVsLCBuZXh0YXJnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBQQVJBTV9MSUJDVVJMX0RPRVNOVF9TVVBQT1JUOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3knOiAvKiAtLW1heC1maWxlc2l6ZSAqLworICAgICAgICBpZihzdHIyb2Zmc2V0KCZjb25maWctPm1heF9maWxlc2l6ZSwgbmV4dGFyZykpCisgICAgICAgICAgcmV0dXJuIFBBUkFNX0JBRF9OVU1FUklDOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3onOiAvKiAtLWRpc2FibGUtZXBydCAqLworICAgICAgICBjb25maWctPmRpc2FibGVfZXBydCA9IHRvZ2dsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdaJzogLyogLS1lcHJ0ICovCisgICAgICAgIGNvbmZpZy0+ZGlzYWJsZV9lcHJ0ID0gKCF0b2dnbGUpP1RSVUU6RkFMU0U7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OiAvKiB0aGUgVVJMISAqLworICAgICAgeworICAgICAgICBzdHJ1Y3QgZ2V0b3V0ICp1cmw7CisgICAgICAgIGlmKGNvbmZpZy0+dXJsX2dldCB8fCAoKGNvbmZpZy0+dXJsX2dldCA9IGNvbmZpZy0+dXJsX2xpc3QpICE9IE5VTEwpKSB7CisgICAgICAgICAgLyogdGhlcmUncyBhIG5vZGUgaGVyZSwgaWYgaXQgYWxyZWFkeSBpcyBmaWxsZWQtaW4gY29udGludWUgdG8gZmluZAorICAgICAgICAgICAgIGFuICJlbXB0eSIgbm9kZSAqLworICAgICAgICAgIHdoaWxlKGNvbmZpZy0+dXJsX2dldCAmJiAoY29uZmlnLT51cmxfZ2V0LT5mbGFncyAmIEdFVE9VVF9VUkwpKQorICAgICAgICAgICAgY29uZmlnLT51cmxfZ2V0ID0gY29uZmlnLT51cmxfZ2V0LT5uZXh0OworICAgICAgICB9CisKKyAgICAgICAgLyogbm93IHRoZXJlIG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBhbiBhdmFpbGFibGUgbm9kZSB0byBmaWxsIGluISAqLworCisgICAgICAgIGlmKGNvbmZpZy0+dXJsX2dldCkKKyAgICAgICAgICAvKiBleGlzdGluZyBub2RlICovCisgICAgICAgICAgdXJsID0gY29uZmlnLT51cmxfZ2V0OworICAgICAgICBlbHNlCisgICAgICAgICAgLyogdGhlcmUgd2FzIG5vIGZyZWUgbm9kZSwgY3JlYXRlIG9uZSEgKi8KKyAgICAgICAgICB1cmwgPSBuZXdfZ2V0b3V0KGNvbmZpZyk7CisKKyAgICAgICAgaWYoIXVybCkKKyAgICAgICAgICByZXR1cm4gUEFSQU1fTk9fTUVNOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiBmaWxsIGluIHRoZSBVUkwgKi8KKyAgICAgICAgICBHZXRTdHIoJnVybC0+dXJsLCBuZXh0YXJnKTsKKyAgICAgICAgICB1cmwtPmZsYWdzIHw9IEdFVE9VVF9VUkw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJyQnOiAvKiBtb3JlIG9wdGlvbnMgd2l0aG91dCBhIHNob3J0IG9wdGlvbiAqLworICAgICAgc3dpdGNoKHN1YmxldHRlcikgeworICAgICAgY2FzZSAnYSc6IC8qIC0tZnRwLXNzbCAqLworICAgICAgICBpZih0b2dnbGUgJiYgIShjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fU1NMKSkKKyAgICAgICAgICByZXR1cm4gUEFSQU1fTElCQ1VSTF9ET0VTTlRfU1VQUE9SVDsKKyAgICAgICAgY29uZmlnLT5mdHBfc3NsID0gdG9nZ2xlOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2InOiAvKiAtLWZ0cC1wYXN2ICovCisgICAgICAgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5mdHBwb3J0KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdjJzogLyogLS1zb2NrczUgc3BlY2lmaWVzIGEgc29ja3M1IHByb3h5IHRvIHVzZSwgYW5kIHJlc29sdmVzCisgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgbG9jYWxseSBhbmQgcGFzc2VzIG9uIHRoZSByZXNvbHZlZCBhZGRyZXNzICovCisgICAgICAgIEdldFN0cigmY29uZmlnLT5zb2Nrc3Byb3h5LCBuZXh0YXJnKTsKKyAgICAgICAgY29uZmlnLT5zb2Nrc3ZlciA9IENVUkxQUk9YWV9TT0NLUzU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAndCc6IC8qIC0tc29ja3M0IHNwZWNpZmllcyBhIHNvY2tzNCBwcm94eSB0byB1c2UgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPnNvY2tzcHJveHksIG5leHRhcmcpOworICAgICAgICBjb25maWctPnNvY2tzdmVyID0gQ1VSTFBST1hZX1NPQ0tTNDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdUJzogLyogLS1zb2NrczRhIHNwZWNpZmllcyBhIHNvY2tzNGEgcHJveHkgdG8gdXNlICovCisgICAgICAgIEdldFN0cigmY29uZmlnLT5zb2Nrc3Byb3h5LCBuZXh0YXJnKTsKKyAgICAgICAgY29uZmlnLT5zb2Nrc3ZlciA9IENVUkxQUk9YWV9TT0NLUzRBOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJzInOiAvKiAtLXNvY2tzNS1ob3N0bmFtZSBzcGVjaWZpZXMgYSBzb2NrczUgcHJveHkgYW5kIGVuYWJsZXMgbmFtZQorICAgICAgICAgICAgICAgICAgIHJlc29sdmluZyB3aXRoIHRoZSBwcm94eSAqLworICAgICAgICBHZXRTdHIoJmNvbmZpZy0+c29ja3Nwcm94eSwgbmV4dGFyZyk7CisgICAgICAgIGNvbmZpZy0+c29ja3N2ZXIgPSBDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2QnOiAvKiAtLXRjcC1ub2RlbGF5IG9wdGlvbiAqLworICAgICAgICBjb25maWctPnRjcF9ub2RlbGF5ID0gdG9nZ2xlOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2UnOiAvKiAtLXByb3h5LWRpZ2VzdCAqLworICAgICAgICBjb25maWctPnByb3h5ZGlnZXN0ID0gdG9nZ2xlOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2YnOiAvKiAtLXByb3h5LWJhc2ljICovCisgICAgICAgIGNvbmZpZy0+cHJveHliYXNpYyA9IHRvZ2dsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdnJzogLyogLS1yZXRyeSAqLworICAgICAgICBpZihzdHIybnVtKCZjb25maWctPnJlcV9yZXRyeSwgbmV4dGFyZykpCisgICAgICAgICAgcmV0dXJuIFBBUkFNX0JBRF9OVU1FUklDOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2gnOiAvKiAtLXJldHJ5LWRlbGF5ICovCisgICAgICAgIGlmKHN0cjJudW0oJmNvbmZpZy0+cmV0cnlfZGVsYXksIG5leHRhcmcpKQorICAgICAgICAgIHJldHVybiBQQVJBTV9CQURfTlVNRVJJQzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdpJzogLyogLS1yZXRyeS1tYXgtdGltZSAqLworICAgICAgICBpZihzdHIybnVtKCZjb25maWctPnJldHJ5X21heHRpbWUsIG5leHRhcmcpKQorICAgICAgICAgIHJldHVybiBQQVJBTV9CQURfTlVNRVJJQzsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgJ2snOiAvKiAtLXByb3h5LW5lZ290aWF0ZSAqLworICAgICAgICBpZihjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fR1NTTkVHT1RJQVRFKQorICAgICAgICAgIGNvbmZpZy0+cHJveHluZWdvdGlhdGUgPSB0b2dnbGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gUEFSQU1fTElCQ1VSTF9ET0VTTlRfU1VQUE9SVDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdtJzogLyogLS1mdHAtYWNjb3VudCAqLworICAgICAgICBHZXRTdHIoJmNvbmZpZy0+ZnRwX2FjY291bnQsIG5leHRhcmcpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ24nOiAvKiAtLXByb3h5LWFueWF1dGggKi8KKyAgICAgICAgY29uZmlnLT5wcm94eWFueWF1dGggPSB0b2dnbGU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnbyc6IC8qIC0tdHJhY2UtdGltZSAqLworICAgICAgICBjb25maWctPnRyYWNldGltZSA9IHRvZ2dsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdwJzogLyogLS1pZ25vcmUtY29udGVudC1sZW5ndGggKi8KKyAgICAgICAgY29uZmlnLT5pZ25vcmVjbCA9IHRvZ2dsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdxJzogLyogLS1mdHAtc2tpcC1wYXN2LWlwICovCisgICAgICAgIGNvbmZpZy0+ZnRwX3NraXBfaXAgPSB0b2dnbGU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAncic6IC8qIC0tZnRwLW1ldGhvZCAodW5kb2N1bWVudGVkIGF0IHRoaXMgcG9pbnQpICovCisgICAgICAgIGNvbmZpZy0+ZnRwX2ZpbGVtZXRob2QgPSBmdHBmaWxlbWV0aG9kKGNvbmZpZywgbmV4dGFyZyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAncyc6IC8qIC0tbG9jYWwtcG9ydCAqLworICAgICAgICByYyA9IHNzY2FuZihuZXh0YXJnLCAiJWQgLSAlZCIsCisgICAgICAgICAgICAgICAgICAgICZjb25maWctPmxvY2FscG9ydCwKKyAgICAgICAgICAgICAgICAgICAgJmNvbmZpZy0+bG9jYWxwb3J0cmFuZ2UpOworICAgICAgICBpZighcmMpCisgICAgICAgICAgcmV0dXJuIFBBUkFNX0JBRF9VU0U7CisgICAgICAgIGVsc2UgaWYocmMgPT0gMSkKKyAgICAgICAgICBjb25maWctPmxvY2FscG9ydHJhbmdlID0gMTsgLyogZGVmYXVsdCBudW1iZXIgb2YgcG9ydHMgdG8gdHJ5ICovCisgICAgICAgIGVsc2UgeworICAgICAgICAgIGNvbmZpZy0+bG9jYWxwb3J0cmFuZ2UgLT0gY29uZmlnLT5sb2NhbHBvcnQ7CisgICAgICAgICAgaWYoY29uZmlnLT5sb2NhbHBvcnRyYW5nZSA8IDEpIHsKKyAgICAgICAgICAgIHdhcm5mKGNvbmZpZywgImJhZCByYW5nZSBpbnB1dFxuIik7CisgICAgICAgICAgICByZXR1cm4gUEFSQU1fQkFEX1VTRTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICd1JzogLyogLS1mdHAtYWx0ZXJuYXRpdmUtdG8tdXNlciAqLworICAgICAgICBHZXRTdHIoJmNvbmZpZy0+ZnRwX2FsdGVybmF0aXZlX3RvX3VzZXIsIG5leHRhcmcpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3YnOiAvKiAtLWZ0cC1zc2wtcmVxZCAqLworICAgICAgICBpZih0b2dnbGUgJiYgIShjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fU1NMKSkKKyAgICAgICAgICByZXR1cm4gUEFSQU1fTElCQ1VSTF9ET0VTTlRfU1VQUE9SVDsKKyAgICAgICAgY29uZmlnLT5mdHBfc3NsX3JlcWQgPSB0b2dnbGU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAndyc6IC8qIC0tbm8tc2Vzc2lvbmlkICovCisgICAgICAgIGNvbmZpZy0+ZGlzYWJsZV9zZXNzaW9uaWQgPSAoIXRvZ2dsZSk/VFJVRTpGQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICd4JzogLyogLS1mdHAtc3NsLWNvbnRyb2wgKi8KKyAgICAgICAgaWYodG9nZ2xlICYmICEoY3VybGluZm8tPmZlYXR1cmVzICYgQ1VSTF9WRVJTSU9OX1NTTCkpCisgICAgICAgICAgcmV0dXJuIFBBUkFNX0xJQkNVUkxfRE9FU05UX1NVUFBPUlQ7CisgICAgICAgIGNvbmZpZy0+ZnRwX3NzbF9jb250cm9sID0gdG9nZ2xlOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3knOiAvKiAtLWZ0cC1zc2wtY2NjICovCisgICAgICAgIGNvbmZpZy0+ZnRwX3NzbF9jY2MgPSB0b2dnbGU7CisgICAgICAgIGlmKCFjb25maWctPmZ0cF9zc2xfY2NjX21vZGUpCisgICAgICAgICAgY29uZmlnLT5mdHBfc3NsX2NjY19tb2RlID0gQ1VSTEZUUFNTTF9DQ0NfUEFTU0lWRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdqJzogLyogLS1mdHAtc3NsLWNjYy1tb2RlICovCisgICAgICAgIGNvbmZpZy0+ZnRwX3NzbF9jY2MgPSBUUlVFOworICAgICAgICBjb25maWctPmZ0cF9zc2xfY2NjX21vZGUgPSBmdHBjY2NtZXRob2QoY29uZmlnLCBuZXh0YXJnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICd6JzogLyogLS1saWJjdXJsICovCisjaWZkZWYgQ1VSTF9ESVNBQkxFX0xJQkNVUkxfT1BUSU9OCisgICAgICAgIHdhcm5mKGNvbmZpZywKKyAgICAgICAgICAgICAgIi0tbGliY3VybCBvcHRpb24gd2FzIGRpc2FibGVkIGF0IGJ1aWxkLXRpbWUhXG4iKTsKKyAgICAgICAgcmV0dXJuIFBBUkFNX09QVElPTl9VTktOT1dOOworI2Vsc2UKKyAgICAgICAgR2V0U3RyKCZjb25maWctPmxpYmN1cmwsIG5leHRhcmcpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgY2FzZSAnIyc6IC8qIC0tcmF3ICovCisgICAgICAgIGNvbmZpZy0+cmF3ID0gdG9nZ2xlOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJzAnOiAvKiAtLXBvc3QzMDEgKi8KKyAgICAgICAgY29uZmlnLT5wb3N0MzAxID0gdG9nZ2xlOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJzEnOiAvKiAtLW5vLWtlZXBhbGl2ZSAqLworICAgICAgICBjb25maWctPm5va2VlcGFsaXZlID0gKCF0b2dnbGUpP1RSVUU6RkFMU0U7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnMyc6IC8qIC0ta2VlcGFsaXZlLXRpbWUgKi8KKyAgICAgICAgaWYoc3RyMm51bSgmY29uZmlnLT5hbGl2ZXRpbWUsIG5leHRhcmcpKQorICAgICAgICAgIHJldHVybiBQQVJBTV9CQURfTlVNRVJJQzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICc0JzogLyogLS1wb3N0MzAyICovCisgICAgICAgIGNvbmZpZy0+cG9zdDMwMiA9IHRvZ2dsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICc1JzogLyogLS1ub3Byb3h5ICovCisgICAgICAgIC8qIFRoaXMgc3BlY2lmaWVzIHRoZSBub3Byb3h5IGxpc3QgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPm5vcHJveHksIG5leHRhcmcpOworICAgICAgICBicmVhazsKKyNpZiBkZWZpbmVkKEhBVkVfR1NTQVBJKSB8fCBkZWZpbmVkKFVTRV9XSU5ET1dTX1NTUEkpCisgICAgICBjYXNlICc2JzogLyogLS1zb2NrczUtZ3NzYXBpLXNlcnZpY2UgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPnNvY2tzNV9nc3NhcGlfc2VydmljZSwgbmV4dGFyZyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnNyc6IC8qIC0tc29ja3M1LWdzc2FwaS1uZWMqLworICAgICAgICBjb25maWctPnNvY2tzNV9nc3NhcGlfbmVjID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgIGNhc2UgJzgnOiAvKiAtLXByb3h5MS4wICovCisgICAgICAgIC8qIGh0dHAgMS4wIHByb3h5ICovCisgICAgICAgIEdldFN0cigmY29uZmlnLT5wcm94eSwgbmV4dGFyZyk7CisgICAgICAgIGNvbmZpZy0+cHJveHl2ZXIgPSBDVVJMUFJPWFlfSFRUUF8xXzA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnOSc6IC8qIC0tdGZ0cC1ibGtzaXplICovCisgICAgICAgIHN0cjJudW0oJmNvbmZpZy0+dGZ0cF9ibGtzaXplLCBuZXh0YXJnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdBJzogLyogLS1tYWlsLWZyb20gKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPm1haWxfZnJvbSwgbmV4dGFyZyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnQic6IC8qIC0tbWFpbC1yY3B0ICovCisgICAgICAgIC8qIGFwcGVuZCByZWNlaXZlciB0byBhIGxpc3QgKi8KKyAgICAgICAgZXJyID0gYWRkMmxpc3QoJmNvbmZpZy0+bWFpbF9yY3B0LCBuZXh0YXJnKTsKKyAgICAgICAgaWYoZXJyKQorICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnQyc6IC8qIC0tZnRwLXByZXQgKi8KKyAgICAgICAgY29uZmlnLT5mdHBfcHJldCA9IHRvZ2dsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdEJzogLyogLS1wcm90byAqLworICAgICAgICBjb25maWctPnByb3RvX3ByZXNlbnQgPSBUUlVFOworICAgICAgICBpZihwcm90bzJudW0oY29uZmlnLCAmY29uZmlnLT5wcm90bywgbmV4dGFyZykpCisgICAgICAgICAgcmV0dXJuIFBBUkFNX0JBRF9VU0U7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnRSc6IC8qIC0tcHJvdG8tcmVkaXIgKi8KKyAgICAgICAgY29uZmlnLT5wcm90b19yZWRpcl9wcmVzZW50ID0gVFJVRTsKKyAgICAgICAgaWYocHJvdG8ybnVtKGNvbmZpZywgJmNvbmZpZy0+cHJvdG9fcmVkaXIsIG5leHRhcmcpKQorICAgICAgICAgIHJldHVybiBQQVJBTV9CQURfVVNFOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ0YnOiAvKiAtLXJlc29sdmUgKi8KKyAgICAgICAgZXJyID0gYWRkMmxpc3QoJmNvbmZpZy0+cmVzb2x2ZSwgbmV4dGFyZyk7CisgICAgICAgIGlmKGVycikKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ0cnOiAvKiAtLWRlbGVnYXRpb24gTEVWRUwgKi8KKyAgICAgICAgY29uZmlnLT5nc3NhcGlfZGVsZWdhdGlvbiA9IGRlbGVnYXRpb24oY29uZmlnLCBuZXh0YXJnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdIJzogLyogLS1tYWlsLWF1dGggKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPm1haWxfYXV0aCwgbmV4dGFyZyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnIyc6IC8qIC0tcHJvZ3Jlc3MtYmFyICovCisgICAgICBpZih0b2dnbGUpCisgICAgICAgIGNvbmZpZy0+cHJvZ3Jlc3Ntb2RlID0gQ1VSTF9QUk9HUkVTU19CQVI7CisgICAgICBlbHNlCisgICAgICAgIGNvbmZpZy0+cHJvZ3Jlc3Ntb2RlID0gQ1VSTF9QUk9HUkVTU19TVEFUUzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ34nOiAvKiAtLXhhdHRyICovCisgICAgICBjb25maWctPnhhdHRyID0gdG9nZ2xlOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnMCc6CisgICAgICAvKiBIVFRQIHZlcnNpb24gMS4wICovCisgICAgICBjb25maWctPmh0dHB2ZXJzaW9uID0gQ1VSTF9IVFRQX1ZFUlNJT05fMV8wOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnMSc6CisgICAgICAvKiBUTFMgdmVyc2lvbiAxICovCisgICAgICBjb25maWctPnNzbF92ZXJzaW9uID0gQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnMic6CisgICAgICAvKiBTU0wgdmVyc2lvbiAyICovCisgICAgICBjb25maWctPnNzbF92ZXJzaW9uID0gQ1VSTF9TU0xWRVJTSU9OX1NTTHYyOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnMyc6CisgICAgICAvKiBTU0wgdmVyc2lvbiAzICovCisgICAgICBjb25maWctPnNzbF92ZXJzaW9uID0gQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnNCc6CisgICAgICAvKiBJUHY0ICovCisgICAgICBjb25maWctPmlwX3ZlcnNpb24gPSA0OworICAgICAgYnJlYWs7CisgICAgY2FzZSAnNic6CisgICAgICAvKiBJUHY2ICovCisgICAgICBjb25maWctPmlwX3ZlcnNpb24gPSA2OworICAgICAgYnJlYWs7CisgICAgY2FzZSAnYSc6CisgICAgICAvKiBUaGlzIG1ha2VzIHRoZSBGVFAgc2Vzc2lvbnMgdXNlIEFQUEUgaW5zdGVhZCBvZiBTVE9SICovCisgICAgICBjb25maWctPmZ0cF9hcHBlbmQgPSB0b2dnbGU7CisgICAgICBicmVhazsKKyAgICBjYXNlICdBJzoKKyAgICAgIC8qIFRoaXMgc3BlY2lmaWVzIHRoZSBVc2VyLUFnZW50IG5hbWUgKi8KKyAgICAgIEdldFN0cigmY29uZmlnLT51c2VyYWdlbnQsIG5leHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnYic6IC8qIGNvb2tpZSBzdHJpbmcgY29taW5nIHVwOiAqLworICAgICAgaWYobmV4dGFyZ1swXSA9PSAnQCcpIHsKKyAgICAgICAgbmV4dGFyZysrOworICAgICAgfQorICAgICAgZWxzZSBpZihzdHJjaHIobmV4dGFyZywgJz0nKSkgeworICAgICAgICAvKiBBIGNvb2tpZSBzdHJpbmcgbXVzdCBoYXZlIGEgPS1sZXR0ZXIgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPmNvb2tpZSwgbmV4dGFyZyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgLyogV2UgaGF2ZSBhIGNvb2tpZSBmaWxlIHRvIHJlYWQgZnJvbSEgKi8KKyAgICAgIEdldFN0cigmY29uZmlnLT5jb29raWVmaWxlLCBuZXh0YXJnKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0InOgorICAgICAgLyogdXNlIEFTQ0lJL3RleHQgd2hlbiB0cmFuc2ZlcnJpbmcgKi8KKyAgICAgIGNvbmZpZy0+dXNlX2FzY2lpID0gdG9nZ2xlOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnYyc6CisgICAgICAvKiBnZXQgdGhlIGZpbGUgbmFtZSB0byBkdW1wIGFsbCBjb29raWVzIGluICovCisgICAgICBHZXRTdHIoJmNvbmZpZy0+Y29va2llamFyLCBuZXh0YXJnKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0MnOgorICAgICAgLyogVGhpcyBtYWtlcyB1cyBjb250aW51ZSBhbiBmdHAgdHJhbnNmZXIgYXQgZ2l2ZW4gcG9zaXRpb24gKi8KKyAgICAgIGlmKCFjdXJseF9zdHJlcXVhbChuZXh0YXJnLCAiLSIpKSB7CisgICAgICAgIGlmKHN0cjJvZmZzZXQoJmNvbmZpZy0+cmVzdW1lX2Zyb20sIG5leHRhcmcpKQorICAgICAgICAgIHJldHVybiBQQVJBTV9CQURfTlVNRVJJQzsKKyAgICAgICAgY29uZmlnLT5yZXN1bWVfZnJvbV9jdXJyZW50ID0gRkFMU0U7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY29uZmlnLT5yZXN1bWVfZnJvbV9jdXJyZW50ID0gVFJVRTsKKyAgICAgICAgY29uZmlnLT5yZXN1bWVfZnJvbSA9IDA7CisgICAgICB9CisgICAgICBjb25maWctPnVzZV9yZXN1bWU9VFJVRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2QnOgorICAgICAgLyogcG9zdGZpZWxkIGRhdGEgKi8KKyAgICB7CisgICAgICBjaGFyICpwb3N0ZGF0YSA9IE5VTEw7CisgICAgICBGSUxFICpmaWxlOworICAgICAgc2l6ZV90IHNpemUgPSAwOworCisgICAgICBpZihzdWJsZXR0ZXIgPT0gJ2UnKSB7IC8qIC0tZGF0YS11cmxlbmNvZGUqLworICAgICAgICAvKiBbbmFtZV09W2NvbnRlbnRdLCB3ZSBlbmNvZGUgdGhlIGNvbnRlbnQgcGFydCBvbmx5CisgICAgICAgICAqIFtuYW1lXUBbZmlsZSBuYW1lXQorICAgICAgICAgKgorICAgICAgICAgKiBDYXNlIDI6IHdlIGZpcnN0IGxvYWQgdGhlIGZpbGUgdXNpbmcgdGhhdCBuYW1lIGFuZCB0aGVuIGVuY29kZQorICAgICAgICAgKiB0aGUgY29udGVudC4KKyAgICAgICAgICovCisgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBzdHJjaHIobmV4dGFyZywgJz0nKTsKKyAgICAgICAgc2l6ZV90IG5sZW47CisgICAgICAgIGNoYXIgaXNfZmlsZTsKKyAgICAgICAgaWYoIXApCisgICAgICAgICAgLyogdGhlcmUgd2FzIG5vICc9JyBsZXR0ZXIsIGNoZWNrIGZvciBhICdAJyBpbnN0ZWFkICovCisgICAgICAgICAgcCA9IHN0cmNocihuZXh0YXJnLCAnQCcpOworICAgICAgICBpZihwKSB7CisgICAgICAgICAgbmxlbiA9IHAgLSBuZXh0YXJnOyAvKiBsZW5ndGggb2YgdGhlIG5hbWUgcGFydCAqLworICAgICAgICAgIGlzX2ZpbGUgPSAqcCsrOyAvKiBwYXNzIHRoZSBzZXBhcmF0b3IgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiBuZWl0aGVyIEAgbm9yID0sIHNvIG5vIG5hbWUgYW5kIGl0IGlzbid0IGEgZmlsZSAqLworICAgICAgICAgIG5sZW4gPSBpc19maWxlID0gMDsKKyAgICAgICAgICBwID0gbmV4dGFyZzsKKyAgICAgICAgfQorICAgICAgICBpZignQCcgPT0gaXNfZmlsZSkgeworICAgICAgICAgIC8qIGEgJ0AnIGxldHRlciwgaXQgbWVhbnMgdGhhdCBhIGZpbGUgbmFtZSBvciAtIChzdGRpbikgZm9sbG93cyAqLworCisgICAgICAgICAgaWYoY3VybHhfc3RyZXF1YWwoIi0iLCBwKSkgeworICAgICAgICAgICAgZmlsZSA9IHN0ZGluOworICAgICAgICAgICAgc2V0X2Jpbm1vZGUoc3RkaW4pOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZpbGUgPSBmb3BlbihwLCAicmIiKTsKKyAgICAgICAgICAgIGlmKCFmaWxlKQorICAgICAgICAgICAgICB3YXJuZihjb25maWcsCisgICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCByZWFkIGRhdGEgZnJvbSBmaWxlIFwiJXNcIiwgdGhpcyBtYWtlcyAiCisgICAgICAgICAgICAgICAgICAgICJhbiBlbXB0eSBQT1NULlxuIiwgbmV4dGFyZyk7CisgICAgICAgICAgfQorCisgICAgICAgICAgZXJyID0gZmlsZTJtZW1vcnkoJnBvc3RkYXRhLCAmc2l6ZSwgZmlsZSk7CisKKyAgICAgICAgICBpZihmaWxlICYmIChmaWxlICE9IHN0ZGluKSkKKyAgICAgICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICAgICAgICBpZihlcnIpCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIEdldFN0cigmcG9zdGRhdGEsIHApOworICAgICAgICAgIGlmKHBvc3RkYXRhKQorICAgICAgICAgICAgc2l6ZSA9IHN0cmxlbihwb3N0ZGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBpZighcG9zdGRhdGEpIHsKKyAgICAgICAgICAvKiBubyBkYXRhIGZyb20gdGhlIGZpbGUsIHBvaW50IHRvIGEgemVybyBieXRlIHN0cmluZyB0byBtYWtlIHRoaXMKKyAgICAgICAgICAgICBnZXQgc2VudCBhcyBhIFBPU1QgYW55d2F5ICovCisgICAgICAgICAgcG9zdGRhdGEgPSBzdHJkdXAoIiIpOworICAgICAgICAgIGlmKCFwb3N0ZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBQQVJBTV9OT19NRU07CisgICAgICAgICAgc2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgY2hhciAqZW5jID0gY3VybF9lYXN5X2VzY2FwZShjb25maWctPmVhc3ksIHBvc3RkYXRhLCAoaW50KXNpemUpOworICAgICAgICAgIEN1cmxfc2FmZWZyZWUocG9zdGRhdGEpOyAvKiBubyBtYXR0ZXIgaWYgaXQgd29ya2VkIG9yIG5vdCAqLworICAgICAgICAgIGlmKGVuYykgeworICAgICAgICAgICAgLyogbm93IG1ha2UgYSBzdHJpbmcgd2l0aCB0aGUgbmFtZSBmcm9tIGFib3ZlIGFuZCBhcHBlbmQgdGhlCisgICAgICAgICAgICAgICBlbmNvZGVkIHN0cmluZyAqLworICAgICAgICAgICAgc2l6ZV90IG91dGxlbiA9IG5sZW4gKyBzdHJsZW4oZW5jKSArIDI7CisgICAgICAgICAgICBjaGFyICpuID0gbWFsbG9jKG91dGxlbik7CisgICAgICAgICAgICBpZighbikgeworICAgICAgICAgICAgICBjdXJsX2ZyZWUoZW5jKTsKKyAgICAgICAgICAgICAgcmV0dXJuIFBBUkFNX05PX01FTTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKG5sZW4gPiAwKSB7IC8qIG9ubHkgYXBwZW5kICc9JyBpZiB3ZSBoYXZlIGEgbmFtZSAqLworICAgICAgICAgICAgICBzbnByaW50ZihuLCBvdXRsZW4sICIlLipzPSVzIiwgbmxlbiwgbmV4dGFyZywgZW5jKTsKKyAgICAgICAgICAgICAgc2l6ZSA9IG91dGxlbi0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIHN0cmNweShuLCBlbmMpOworICAgICAgICAgICAgICBzaXplID0gb3V0bGVuLTI7IC8qIHNpbmNlIG5vICc9JyB3YXMgaW5zZXJ0ZWQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cmxfZnJlZShlbmMpOworICAgICAgICAgICAgcG9zdGRhdGEgPSBuOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUEFSQU1fTk9fTUVNOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmKCdAJyA9PSAqbmV4dGFyZykgeworICAgICAgICAvKiB0aGUgZGF0YSBiZWdpbnMgd2l0aCBhICdAJyBsZXR0ZXIsIGl0IG1lYW5zIHRoYXQgYSBmaWxlIG5hbWUKKyAgICAgICAgICAgb3IgLSAoc3RkaW4pIGZvbGxvd3MgKi8KKyAgICAgICAgbmV4dGFyZysrOyAvKiBwYXNzIHRoZSBAICovCisKKyAgICAgICAgaWYoY3VybHhfc3RyZXF1YWwoIi0iLCBuZXh0YXJnKSkgeworICAgICAgICAgIGZpbGUgPSBzdGRpbjsKKyAgICAgICAgICBpZihzdWJsZXR0ZXIgPT0gJ2InKSAvKiBmb3JjZWQgZGF0YS1iaW5hcnkgKi8KKyAgICAgICAgICAgIHNldF9iaW5tb2RlKHN0ZGluKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBmaWxlID0gZm9wZW4obmV4dGFyZywgInJiIik7CisgICAgICAgICAgaWYoIWZpbGUpCisgICAgICAgICAgICB3YXJuZihjb25maWcsICJDb3VsZG4ndCByZWFkIGRhdGEgZnJvbSBmaWxlIFwiJXNcIiwgdGhpcyBtYWtlcyAiCisgICAgICAgICAgICAgICAgICAiYW4gZW1wdHkgUE9TVC5cbiIsIG5leHRhcmcpOworICAgICAgICB9CisKKyAgICAgICAgaWYoc3VibGV0dGVyID09ICdiJykKKyAgICAgICAgICAvKiBmb3JjZWQgYmluYXJ5ICovCisgICAgICAgICAgZXJyID0gZmlsZTJtZW1vcnkoJnBvc3RkYXRhLCAmc2l6ZSwgZmlsZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGVyciA9IGZpbGUyc3RyaW5nKCZwb3N0ZGF0YSwgZmlsZSk7CisgICAgICAgICAgaWYocG9zdGRhdGEpCisgICAgICAgICAgICBzaXplID0gc3RybGVuKHBvc3RkYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKGZpbGUgJiYgKGZpbGUgIT0gc3RkaW4pKQorICAgICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICAgICAgaWYoZXJyKQorICAgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAgICAgaWYoIXBvc3RkYXRhKSB7CisgICAgICAgICAgLyogbm8gZGF0YSBmcm9tIHRoZSBmaWxlLCBwb2ludCB0byBhIHplcm8gYnl0ZSBzdHJpbmcgdG8gbWFrZSB0aGlzCisgICAgICAgICAgICAgZ2V0IHNlbnQgYXMgYSBQT1NUIGFueXdheSAqLworICAgICAgICAgIHBvc3RkYXRhID0gc3RyZHVwKCIiKTsKKyAgICAgICAgICBpZighcG9zdGRhdGEpCisgICAgICAgICAgICByZXR1cm4gUEFSQU1fTk9fTUVNOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgR2V0U3RyKCZwb3N0ZGF0YSwgbmV4dGFyZyk7CisgICAgICAgIGlmKHBvc3RkYXRhKQorICAgICAgICAgIHNpemUgPSBzdHJsZW4ocG9zdGRhdGEpOworICAgICAgfQorCisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgICAgICBpZihzdWJsZXR0ZXIgIT0gJ2InKSB7CisgICAgICAgIC8qIE5PVCBmb3JjZWQgYmluYXJ5LCBjb252ZXJ0IHRvIEFTQ0lJICovCisgICAgICAgIGlmKGNvbnZlcnRfdG9fbmV0d29yayhwb3N0ZGF0YSwgc3RybGVuKHBvc3RkYXRhKSkpIHsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHBvc3RkYXRhKTsKKyAgICAgICAgICByZXR1cm4gUEFSQU1fTk9fTUVNOworICAgICAgICB9CisgICAgICB9CisjZW5kaWYKKworICAgICAgaWYoY29uZmlnLT5wb3N0ZmllbGRzKSB7CisgICAgICAgIC8qIHdlIGFscmVhZHkgaGF2ZSBhIHN0cmluZywgd2UgYXBwZW5kIHRoaXMgb25lIHdpdGggYSBzZXBhcmF0aW5nCisgICAgICAgICAgICYtbGV0dGVyICovCisgICAgICAgIGNoYXIgKm9sZHBvc3QgPSBjb25maWctPnBvc3RmaWVsZHM7CisgICAgICAgIGN1cmxfb2ZmX3Qgb2xkbGVuID0gY29uZmlnLT5wb3N0ZmllbGRzaXplOworICAgICAgICBjdXJsX29mZl90IG5ld2xlbiA9IG9sZGxlbiArIHNpemUgKyAyOworICAgICAgICBjb25maWctPnBvc3RmaWVsZHMgPSBtYWxsb2MoKHNpemVfdCluZXdsZW4pOworICAgICAgICBpZighY29uZmlnLT5wb3N0ZmllbGRzKSB7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShvbGRwb3N0KTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHBvc3RkYXRhKTsKKyAgICAgICAgICByZXR1cm4gUEFSQU1fTk9fTUVNOworICAgICAgICB9CisgICAgICAgIG1lbWNweShjb25maWctPnBvc3RmaWVsZHMsIG9sZHBvc3QsIChzaXplX3Qpb2xkbGVuKTsKKyAgICAgICAgLyogdXNlIGJ5dGUgdmFsdWUgMHgyNiBmb3IgJyYnIHRvIGFjY29tbW9kYXRlIG5vbi1BU0NJSSBwbGF0Zm9ybXMgKi8KKyAgICAgICAgY29uZmlnLT5wb3N0ZmllbGRzW29sZGxlbl0gPSAnXHgyNic7CisgICAgICAgIG1lbWNweSgmY29uZmlnLT5wb3N0ZmllbGRzW29sZGxlbisxXSwgcG9zdGRhdGEsIHNpemUpOworICAgICAgICBjb25maWctPnBvc3RmaWVsZHNbb2xkbGVuKzErc2l6ZV0gPSAnXDAnOworICAgICAgICBDdXJsX3NhZmVmcmVlKG9sZHBvc3QpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHBvc3RkYXRhKTsKKyAgICAgICAgY29uZmlnLT5wb3N0ZmllbGRzaXplICs9IHNpemUrMTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBjb25maWctPnBvc3RmaWVsZHMgPSBwb3N0ZGF0YTsKKyAgICAgICAgY29uZmlnLT5wb3N0ZmllbGRzaXplID0gc2l6ZTsKKyAgICAgIH0KKyAgICB9CisgICAgLyoKKyAgICAgIFdlIGNhbid0IHNldCB0aGUgcmVxdWVzdCB0eXBlIGhlcmUsIGFzIHRoaXMgZGF0YSBtaWdodCBiZSB1c2VkIGluCisgICAgICBhIHNpbXBsZSBHRVQgaWYgLUcgaXMgdXNlZC4gQWxyZWFkeSBvciBzb29uLgorCisgICAgICBpZihTZXRIVFRQcmVxdWVzdChIVFRQUkVRX1NJTVBMRVBPU1QsICZjb25maWctPmh0dHByZXEpKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUocG9zdGRhdGEpOworICAgICAgICByZXR1cm4gUEFSQU1fQkFEX1VTRTsKKyAgICAgIH0KKyAgICAqLworICAgIGJyZWFrOworICAgIGNhc2UgJ0QnOgorICAgICAgLyogZHVtcC1oZWFkZXIgdG8gZ2l2ZW4gZmlsZSBuYW1lICovCisgICAgICBHZXRTdHIoJmNvbmZpZy0+aGVhZGVyZmlsZSwgbmV4dGFyZyk7CisgICAgICBicmVhazsKKyAgICBjYXNlICdlJzoKKyAgICB7CisgICAgICBjaGFyICpwdHIgPSBzdHJzdHIobmV4dGFyZywgIjthdXRvIik7CisgICAgICBpZihwdHIpIHsKKyAgICAgICAgLyogQXV0b21hdGljIHJlZmVyZXIgcmVxdWVzdGVkLCB0aGlzIG1heSBiZSBjb21iaW5lZCB3aXRoIGEKKyAgICAgICAgICAgc2V0IGluaXRpYWwgb25lICovCisgICAgICAgIGNvbmZpZy0+YXV0b3JlZmVyZXIgPSBUUlVFOworICAgICAgICAqcHRyID0gMDsgLyogemVybyB0ZXJtaW5hdGUgaGVyZSAqLworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBjb25maWctPmF1dG9yZWZlcmVyID0gRkFMU0U7CisgICAgICBHZXRTdHIoJmNvbmZpZy0+cmVmZXJlciwgbmV4dGFyZyk7CisgICAgfQorICAgIGJyZWFrOworICAgIGNhc2UgJ0UnOgorICAgICAgc3dpdGNoKHN1YmxldHRlcikgeworICAgICAgY2FzZSAnYSc6IC8qIENBIGluZm8gUEVNIGZpbGUgKi8KKyAgICAgICAgLyogQ0EgaW5mbyBQRU0gZmlsZSAqLworICAgICAgICBHZXRTdHIoJmNvbmZpZy0+Y2FjZXJ0LCBuZXh0YXJnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdiJzogLyogY2VydCBmaWxlIHR5cGUgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPmNlcnRfdHlwZSwgbmV4dGFyZyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnYyc6IC8qIHByaXZhdGUga2V5IGZpbGUgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPmtleSwgbmV4dGFyZyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnZCc6IC8qIHByaXZhdGUga2V5IGZpbGUgdHlwZSAqLworICAgICAgICBHZXRTdHIoJmNvbmZpZy0+a2V5X3R5cGUsIG5leHRhcmcpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2UnOiAvKiBwcml2YXRlIGtleSBwYXNzcGhyYXNlICovCisgICAgICAgIEdldFN0cigmY29uZmlnLT5rZXlfcGFzc3dkLCBuZXh0YXJnKTsKKyAgICAgICAgY2xlYW5hcmcobmV4dGFyZyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnZic6IC8qIGNyeXB0byBlbmdpbmUgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPmVuZ2luZSwgbmV4dGFyZyk7CisgICAgICAgIGlmKGNvbmZpZy0+ZW5naW5lICYmIGN1cmx4X3Jhd19lcXVhbChjb25maWctPmVuZ2luZSwibGlzdCIpKQorICAgICAgICAgIGNvbmZpZy0+bGlzdF9lbmdpbmVzID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdnJzogLyogQ0EgaW5mbyBQRU0gZmlsZSAqLworICAgICAgICAvKiBDQSBjZXJ0IGRpcmVjdG9yeSAqLworICAgICAgICBHZXRTdHIoJmNvbmZpZy0+Y2FwYXRoLCBuZXh0YXJnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdoJzogLyogLS1wdWJrZXkgcHVibGljIGtleSBmaWxlICovCisgICAgICAgIEdldFN0cigmY29uZmlnLT5wdWJrZXksIG5leHRhcmcpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2knOiAvKiAtLWhvc3RwdWJtZDUgbWQ1IG9mIHRoZSBob3N0IHB1YmxpYyBrZXkgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPmhvc3RwdWJtZDUsIG5leHRhcmcpOworICAgICAgICBpZighY29uZmlnLT5ob3N0cHVibWQ1IHx8IHN0cmxlbihjb25maWctPmhvc3RwdWJtZDUpICE9IDMyKQorICAgICAgICAgIHJldHVybiBQQVJBTV9CQURfVVNFOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2onOiAvKiBDUkwgaW5mbyBQRU0gZmlsZSAqLworICAgICAgICAvKiBDUkwgZmlsZSAqLworICAgICAgICBHZXRTdHIoJmNvbmZpZy0+Y3JsZmlsZSwgbmV4dGFyZyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnayc6IC8qIFRMUyB1c2VybmFtZSAqLworICAgICAgICBpZihjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fVExTQVVUSF9TUlApCisgICAgICAgICAgR2V0U3RyKCZjb25maWctPnRsc191c2VybmFtZSwgbmV4dGFyZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gUEFSQU1fTElCQ1VSTF9ET0VTTlRfU1VQUE9SVDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdsJzogLyogVExTIHBhc3N3b3JkICovCisgICAgICAgIGlmKGN1cmxpbmZvLT5mZWF0dXJlcyAmIENVUkxfVkVSU0lPTl9UTFNBVVRIX1NSUCkKKyAgICAgICAgICBHZXRTdHIoJmNvbmZpZy0+dGxzX3Bhc3N3b3JkLCBuZXh0YXJnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBQQVJBTV9MSUJDVVJMX0RPRVNOVF9TVVBQT1JUOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ20nOiAvKiBUTFMgYXV0aGVudGljYXRpb24gdHlwZSAqLworICAgICAgICBpZihjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fVExTQVVUSF9TUlApIHsKKyAgICAgICAgICBHZXRTdHIoJmNvbmZpZy0+dGxzX2F1dGh0eXBlLCBuZXh0YXJnKTsKKyAgICAgICAgICBpZighc3RyZXF1YWwoY29uZmlnLT50bHNfYXV0aHR5cGUsICJTUlAiKSkKKyAgICAgICAgICAgIHJldHVybiBQQVJBTV9MSUJDVVJMX0RPRVNOVF9TVVBQT1JUOyAvKiBvbmx5IHN1cHBvcnQgVExTLVNSUCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gUEFSQU1fTElCQ1VSTF9ET0VTTlRfU1VQUE9SVDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICduJzogLyogbm8gZW1wdHkgU1NMIGZyYWdtZW50cyAqLworICAgICAgICBpZihjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fU1NMKQorICAgICAgICAgIGNvbmZpZy0+c3NsX2FsbG93X2JlYXN0ID0gdG9nZ2xlOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IC8qIGNlcnRpZmljYXRlIGZpbGUgKi8KKyAgICAgIHsKKyAgICAgICAgY2hhciAqcHRyID0gc3RyY2hyKG5leHRhcmcsICc6Jyk7CisgICAgICAgIC8qIFNpbmNlIHdlIGxpdmUgaW4gYSB3b3JsZCBvZiB3ZWlyZG5lc3MgYW5kIGNvbmZ1c2lvbiwgdGhlIHdpbjMyCisgICAgICAgICAgIGR1ZGVzIGNhbiB1c2UgOiB3aGVuIHVzaW5nIGRyaXZlIGxldHRlcnMgYW5kIHRodXMKKyAgICAgICAgICAgYzpcZmlsZTpwYXNzd29yZCBuZWVkcyB0byB3b3JrLiBJbiBvcmRlciBub3QgdG8gYnJlYWsKKyAgICAgICAgICAgY29tcGF0aWJpbGl0eSwgd2Ugc3RpbGwgdXNlIDogYXMgc2VwYXJhdG9yLCBidXQgd2UgdHJ5IHRvIGRldGVjdAorICAgICAgICAgICB3aGVuIGl0IGlzIHVzZWQgZm9yIGEgZmlsZSBuYW1lISBPbiB3aW5kb3dzLiAqLworI2lmZGVmIFdJTjMyCisgICAgICAgIGlmKHB0ciAmJgorICAgICAgICAgICAocHRyID09ICZuZXh0YXJnWzFdKSAmJgorICAgICAgICAgICAobmV4dGFyZ1syXSA9PSAnXFwnIHx8IG5leHRhcmdbMl0gPT0gJy8nKSAmJgorICAgICAgICAgICAoSVNBTFBIQShuZXh0YXJnWzBdKSkgKQorICAgICAgICAgIC8qIGNvbG9uIGluIHRoZSBzZWNvbmQgY29sdW1uLCBmb2xsb3dlZCBieSBhIGJhY2tzbGFzaCwgYW5kIHRoZQorICAgICAgICAgICAgIGZpcnN0IGNoYXJhY3RlciBpcyBhbiBhbHBoYWJldGljIGxldHRlcjoKKworICAgICAgICAgICAgIHRoaXMgaXMgYSBkcml2ZSBsZXR0ZXIgY29sb24gKi8KKyAgICAgICAgICBwdHIgPSBzdHJjaHIoJm5leHRhcmdbM10sICc6Jyk7IC8qIGZpbmQgdGhlIG5leHQgb25lIGluc3RlYWQgKi8KKyNlbmRpZgorICAgICAgICBpZihwdHIpIHsKKyAgICAgICAgICAvKiB3ZSBoYXZlIGEgcGFzc3dvcmQgdG9vICovCisgICAgICAgICAgKnB0ciA9ICdcMCc7CisgICAgICAgICAgcHRyKys7CisgICAgICAgICAgR2V0U3RyKCZjb25maWctPmtleV9wYXNzd2QsIHB0cik7CisgICAgICAgIH0KKyAgICAgICAgR2V0U3RyKCZjb25maWctPmNlcnQsIG5leHRhcmcpOworICAgICAgICBjbGVhbmFyZyhuZXh0YXJnKTsKKyAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2YnOgorICAgICAgLyogZmFpbCBoYXJkIG9uIGVycm9ycyAgKi8KKyAgICAgIGNvbmZpZy0+ZmFpbG9uZXJyb3IgPSB0b2dnbGU7CisgICAgICBicmVhazsKKyAgICBjYXNlICdGJzoKKyAgICAgIC8qICJmb3JtIGRhdGEiIHNpbXVsYXRpb24sIHRoaXMgaXMgYSBsaXR0bGUgYWR2YW5jZWQgc28gbGV0cyBkbyBvdXIgYmVzdAorICAgICAgICAgdG8gc29ydCB0aGlzIG91dCBzbG93bHkgYW5kIGNhcmVmdWxseSAqLworICAgICAgaWYoZm9ybXBhcnNlKGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICBuZXh0YXJnLAorICAgICAgICAgICAgICAgICAgICZjb25maWctPmh0dHBwb3N0LAorICAgICAgICAgICAgICAgICAgICZjb25maWctPmxhc3RfcG9zdCwKKyAgICAgICAgICAgICAgICAgICAoc3VibGV0dGVyPT0ncycpP1RSVUU6RkFMU0UpKSAvKiAncycgbWVhbnMgbGl0ZXJhbCBzdHJpbmcgKi8KKyAgICAgICAgcmV0dXJuIFBBUkFNX0JBRF9VU0U7CisgICAgICBpZihTZXRIVFRQcmVxdWVzdChjb25maWcsIEhUVFBSRVFfUE9TVCwgJmNvbmZpZy0+aHR0cHJlcSkpCisgICAgICAgIHJldHVybiBQQVJBTV9CQURfVVNFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdnJzogLyogZyBkaXNhYmxlcyBVUkxnbG9iYmluZyAqLworICAgICAgY29uZmlnLT5nbG9ib2ZmID0gdG9nZ2xlOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdHJzogLyogSFRUUCBHRVQgKi8KKyAgICAgIGNvbmZpZy0+dXNlX2h0dHBnZXQgPSBUUlVFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdoJzogLyogaCBmb3IgaGVscCAqLworICAgICAgaWYodG9nZ2xlKSB7CisgICAgICAgIHRvb2xfaGVscCgpOworICAgICAgICByZXR1cm4gUEFSQU1fSEVMUF9SRVFVRVNURUQ7CisgICAgICB9CisgICAgICAvKiB3ZSBub3cgYWN0dWFsbHkgc3VwcG9ydCAtLW5vLWhlbHAgdG9vISAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAnSCc6CisgICAgICAvKiBBIGN1c3RvbSBoZWFkZXIgdG8gYXBwZW5kIHRvIGEgbGlzdCAqLworICAgICAgZXJyID0gYWRkMmxpc3QoJmNvbmZpZy0+aGVhZGVycywgbmV4dGFyZyk7CisgICAgICBpZihlcnIpCisgICAgICAgIHJldHVybiBlcnI7CisgICAgICBicmVhazsKKyAgICBjYXNlICdpJzoKKyAgICAgIGNvbmZpZy0+aW5jbHVkZV9oZWFkZXJzID0gdG9nZ2xlOyAvKiBpbmNsdWRlIHRoZSBoZWFkZXJzIGFzIHdlbGwgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbCBvdXRwdXQgc3RyZWFtICovCisgICAgICBicmVhazsKKyAgICBjYXNlICdqJzoKKyAgICAgIGNvbmZpZy0+Y29va2llc2Vzc2lvbiA9IHRvZ2dsZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0knOgorICAgICAgLyoKKyAgICAgICAqIG5vX2JvZHkgd2lsbCBpbXBseSBpbmNsdWRlX2hlYWRlcnMgbGF0ZXIgb24KKyAgICAgICAqLworICAgICAgY29uZmlnLT5ub19ib2R5ID0gdG9nZ2xlOworICAgICAgaWYoU2V0SFRUUHJlcXVlc3QoY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZpZy0+bm9fYm9keSk/SFRUUFJFUV9IRUFEOkhUVFBSRVFfR0VULAorICAgICAgICAgICAgICAgICAgICAgICAgJmNvbmZpZy0+aHR0cHJlcSkpCisgICAgICAgIHJldHVybiBQQVJBTV9CQURfVVNFOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnSic6IC8qIC0tcmVtb3RlLWhlYWRlci1uYW1lICovCisgICAgICBpZihjb25maWctPmluY2x1ZGVfaGVhZGVycykgeworICAgICAgICB3YXJuZihjb25maWcsCisgICAgICAgICAgICAgICItLWluY2x1ZGUgYW5kIC0tcmVtb3RlLWhlYWRlci1uYW1lIGNhbm5vdCBiZSBjb21iaW5lZC5cbiIpOworICAgICAgICByZXR1cm4gUEFSQU1fQkFEX1VTRTsKKyAgICAgIH0KKyAgICAgIGNvbmZpZy0+Y29udGVudF9kaXNwb3NpdGlvbiA9IHRvZ2dsZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2snOiAvKiBhbGxvdyBpbnNlY3VyZSBTU0wgY29ubmVjdHMgKi8KKyAgICAgIGNvbmZpZy0+aW5zZWN1cmVfb2sgPSB0b2dnbGU7CisgICAgICBicmVhazsKKyAgICBjYXNlICdLJzogLyogcGFyc2UgY29uZmlnIGZpbGUgKi8KKyAgICAgIGlmKHBhcnNlY29uZmlnKG5leHRhcmcsIGNvbmZpZykpCisgICAgICAgIHdhcm5mKGNvbmZpZywgImVycm9yIHRyeWluZyByZWFkIGNvbmZpZyBmcm9tIHRoZSAnJXMnIGZpbGVcbiIsCisgICAgICAgICAgICAgIG5leHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnbCc6CisgICAgICBjb25maWctPmRpcmxpc3Rvbmx5ID0gdG9nZ2xlOyAvKiBvbmx5IGxpc3QgdGhlIG5hbWVzIG9mIHRoZSBGVFAgZGlyICovCisgICAgICBicmVhazsKKyAgICBjYXNlICdMJzoKKyAgICAgIGNvbmZpZy0+Zm9sbG93bG9jYXRpb24gPSB0b2dnbGU7IC8qIEZvbGxvdyBMb2NhdGlvbjogSFRUUCBoZWFkZXJzICovCisgICAgICBzd2l0Y2ggKHN1YmxldHRlcikgeworICAgICAgY2FzZSAndCc6CisgICAgICAgIC8qIENvbnRpbnVlIHRvIHNlbmQgYXV0aGVudGljYXRpb24gKHVzZXIrcGFzc3dvcmQpIHdoZW4gZm9sbG93aW5nCisgICAgICAgICAqIGxvY2F0aW9ucywgZXZlbiB3aGVuIGhvc3RuYW1lIGNoYW5nZWQgKi8KKyAgICAgICAgY29uZmlnLT51bnJlc3RyaWN0ZWRfYXV0aCA9IHRvZ2dsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdtJzoKKyAgICAgIC8qIHNwZWNpZmllZCBtYXggdGltZSAqLworICAgICAgaWYoc3RyMm51bSgmY29uZmlnLT50aW1lb3V0LCBuZXh0YXJnKSkKKyAgICAgICAgcmV0dXJuIFBBUkFNX0JBRF9OVU1FUklDOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnTSc6IC8qIE0gZm9yIG1hbnVhbCwgaHVnZSBoZWxwICovCisgICAgICBpZih0b2dnbGUpIHsgLyogLS1uby1tYW51YWwgc2hvd3Mgbm8gbWFudWFsLi4uICovCisjaWZkZWYgVVNFX01BTlVBTAorICAgICAgICBodWdlaGVscCgpOworICAgICAgICByZXR1cm4gUEFSQU1fSEVMUF9SRVFVRVNURUQ7CisjZWxzZQorICAgICAgICB3YXJuZihjb25maWcsCisgICAgICAgICAgICAgICJidWlsdC1pbiBtYW51YWwgd2FzIGRpc2FibGVkIGF0IGJ1aWxkLXRpbWUhXG4iKTsKKyAgICAgICAgcmV0dXJuIFBBUkFNX09QVElPTl9VTktOT1dOOworI2VuZGlmCisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICduJzoKKyAgICAgIHN3aXRjaChzdWJsZXR0ZXIpIHsKKyAgICAgIGNhc2UgJ28nOiAvKiBDQSBpbmZvIFBFTSBmaWxlICovCisgICAgICAgIC8qIHVzZSAubmV0cmMgb3IgVVJMICovCisgICAgICAgIGNvbmZpZy0+bmV0cmNfb3B0ID0gdG9nZ2xlOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2UnOiAvKiBuZXRyYy1maWxlICovCisgICAgICAgIEdldFN0cigmY29uZmlnLT5uZXRyY19maWxlLCBuZXh0YXJnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICAvKiBwaWNrIGluZm8gZnJvbSAubmV0cmMsIGlmIHRoaXMgaXMgdXNlZCBmb3IgaHR0cCwgY3VybCB3aWxsCisgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZW5mb3JlIHVzZXIrcGFzc3dvcmQgd2l0aCB0aGUgcmVxdWVzdCAqLworICAgICAgICBjb25maWctPm5ldHJjID0gdG9nZ2xlOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ04nOgorICAgICAgLyogZGlzYWJsZSB0aGUgb3V0cHV0IEkvTyBidWZmZXJpbmcuIG5vdGUgdGhhdCB0aGUgb3B0aW9uIGlzIGNhbGxlZAorICAgICAgICAgLS1idWZmZXIgYnV0IGlzIG1vc3RseSB1c2VkIGluIHRoZSBuZWdhdGl2ZSBmb3JtOiAtLW5vLWJ1ZmZlciAqLworICAgICAgaWYobG9uZ29wdCkKKyAgICAgICAgY29uZmlnLT5ub2J1ZmZlciA9ICghdG9nZ2xlKT9UUlVFOkZBTFNFOworICAgICAgZWxzZQorICAgICAgICBjb25maWctPm5vYnVmZmVyID0gdG9nZ2xlOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnTyc6IC8qIC0tcmVtb3RlLW5hbWUgKi8KKyAgICAgIGlmKHN1YmxldHRlciA9PSAnYScpIHsgLyogLS1yZW1vdGUtbmFtZS1hbGwgKi8KKyAgICAgICAgY29uZmlnLT5kZWZhdWx0X25vZGVfZmxhZ3MgPSB0b2dnbGU/R0VUT1VUX1VTRVJFTU9URTowOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIC8qIGZhbGwtdGhyb3VnaCEgKi8KKyAgICBjYXNlICdvJzogLyogLS1vdXRwdXQgKi8KKyAgICAgIC8qIG91dHB1dCBmaWxlICovCisgICAgeworICAgICAgc3RydWN0IGdldG91dCAqdXJsOworICAgICAgaWYoY29uZmlnLT51cmxfb3V0IHx8ICgoY29uZmlnLT51cmxfb3V0ID0gY29uZmlnLT51cmxfbGlzdCkgIT0gTlVMTCkpIHsKKyAgICAgICAgLyogdGhlcmUncyBhIG5vZGUgaGVyZSwgaWYgaXQgYWxyZWFkeSBpcyBmaWxsZWQtaW4gY29udGludWUgdG8gZmluZAorICAgICAgICAgICBhbiAiZW1wdHkiIG5vZGUgKi8KKyAgICAgICAgd2hpbGUoY29uZmlnLT51cmxfb3V0ICYmIChjb25maWctPnVybF9vdXQtPmZsYWdzICYgR0VUT1VUX09VVEZJTEUpKQorICAgICAgICAgIGNvbmZpZy0+dXJsX291dCA9IGNvbmZpZy0+dXJsX291dC0+bmV4dDsKKyAgICAgIH0KKworICAgICAgLyogbm93IHRoZXJlIG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBhbiBhdmFpbGFibGUgbm9kZSB0byBmaWxsIGluISAqLworCisgICAgICBpZihjb25maWctPnVybF9vdXQpCisgICAgICAgIC8qIGV4aXN0aW5nIG5vZGUgKi8KKyAgICAgICAgdXJsID0gY29uZmlnLT51cmxfb3V0OworICAgICAgZWxzZQorICAgICAgICAvKiB0aGVyZSB3YXMgbm8gZnJlZSBub2RlLCBjcmVhdGUgb25lISAqLworICAgICAgICB1cmwgPSBuZXdfZ2V0b3V0KGNvbmZpZyk7CisKKyAgICAgIGlmKCF1cmwpCisgICAgICAgIHJldHVybiBQQVJBTV9OT19NRU07CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogZmlsbCBpbiB0aGUgb3V0ZmlsZSAqLworICAgICAgICBpZignbycgPT0gbGV0dGVyKSB7CisgICAgICAgICAgR2V0U3RyKCZ1cmwtPm91dGZpbGUsIG5leHRhcmcpOworICAgICAgICAgIHVybC0+ZmxhZ3MgJj0gfkdFVE9VVF9VU0VSRU1PVEU7IC8qIHN3aXRjaCBvZmYgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICB1cmwtPm91dGZpbGUgPSBOVUxMOyAvKiBsZWF2ZSBpdCAqLworICAgICAgICAgIGlmKHRvZ2dsZSkKKyAgICAgICAgICAgIHVybC0+ZmxhZ3MgfD0gR0VUT1VUX1VTRVJFTU9URTsgIC8qIHN3aXRjaCBvbiAqLworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVybC0+ZmxhZ3MgJj0gfkdFVE9VVF9VU0VSRU1PVEU7IC8qIHN3aXRjaCBvZmYgKi8KKyAgICAgICAgfQorICAgICAgICB1cmwtPmZsYWdzIHw9IEdFVE9VVF9PVVRGSUxFOworICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlICdQJzoKKyAgICAgIC8qIFRoaXMgbWFrZXMgdGhlIEZUUCBzZXNzaW9ucyB1c2UgUE9SVCBpbnN0ZWFkIG9mIFBBU1YgKi8KKyAgICAgIC8qIHVzZSA8ZXRoMD4gb3IgPDE5Mi4xNjguMTAuMTA+IHN0eWxlIGFkZHJlc3Nlcy4gQW55dGhpbmcgZXhjZXB0CisgICAgICAgICB0aGlzIHdpbGwgbWFrZSB1cyB0cnkgdG8gZ2V0IHRoZSAiZGVmYXVsdCIgYWRkcmVzcy4KKyAgICAgICAgIE5PVEU6IHRoaXMgaXMgYSBjaGFuZ2VkIGJlaGF2aW91ciBzaW5jZSB0aGUgcmVsZWFzZWQgNC4xIQorICAgICAgKi8KKyAgICAgIEdldFN0cigmY29uZmlnLT5mdHBwb3J0LCBuZXh0YXJnKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3AnOgorICAgICAgLyogcHJveHkgdHVubmVsIGZvciBub24taHR0cCBwcm90b2NvbHMgKi8KKyAgICAgIGNvbmZpZy0+cHJveHl0dW5uZWwgPSB0b2dnbGU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgJ3EnOiAvKiBpZiB1c2VkIGZpcnN0LCBhbHJlYWR5IHRha2VuIGNhcmUgb2YsIHdlIGRvIGl0IGxpa2UKKyAgICAgICAgICAgICAgICAgdGhpcyBzbyB3ZSBkb24ndCBjYXVzZSBhbiBlcnJvciEgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ1EnOgorICAgICAgLyogUVVPVEUgY29tbWFuZCB0byBzZW5kIHRvIEZUUCBzZXJ2ZXIgKi8KKyAgICAgIHN3aXRjaChuZXh0YXJnWzBdKSB7CisgICAgICBjYXNlICctJzoKKyAgICAgICAgLyogcHJlZml4ZWQgd2l0aCBhIGRhc2ggbWFrZXMgaXQgYSBQT1NUIFRSQU5TRkVSIG9uZSAqLworICAgICAgICBuZXh0YXJnKys7CisgICAgICAgIGVyciA9IGFkZDJsaXN0KCZjb25maWctPnBvc3RxdW90ZSwgbmV4dGFyZyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnKyc6CisgICAgICAgIC8qIHByZWZpeGVkIHdpdGggYSBwbHVzIG1ha2VzIGl0IGEganVzdC1iZWZvcmUtdHJhbnNmZXIgb25lICovCisgICAgICAgIG5leHRhcmcrKzsKKyAgICAgICAgZXJyID0gYWRkMmxpc3QoJmNvbmZpZy0+cHJlcXVvdGUsIG5leHRhcmcpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGVyciA9IGFkZDJsaXN0KCZjb25maWctPnF1b3RlLCBuZXh0YXJnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZihlcnIpCisgICAgICAgIHJldHVybiBlcnI7CisgICAgICBicmVhazsKKyAgICBjYXNlICdyJzoKKyAgICAgIC8qIFNwZWNpZnlpbmcgYSByYW5nZSBXSVRIT1VUIEEgREFTSCB3aWxsIGNyZWF0ZSBhbiBpbGxlZ2FsIEhUVFAgcmFuZ2UKKyAgICAgICAgIChhbmQgd29uJ3QgYWN0dWFsbHkgYmUgcmFuZ2UgYnkgZGVmaW5pdGlvbikuIFRoZSBtYW4gcGFnZSBwcmV2aW91c2x5CisgICAgICAgICBjbGFpbWVkIHRoYXQgdG8gYmUgYSBnb29kIHdheSwgd2h5IHRoaXMgY29kZSBpcyBhZGRlZCB0byB3b3JrLWFyb3VuZAorICAgICAgICAgaXQuICovCisgICAgICBpZihJU0RJR0lUKCpuZXh0YXJnKSAmJiAhc3RyY2hyKG5leHRhcmcsICctJykpIHsKKyAgICAgICAgY2hhciBidWZmZXJbMzJdOworICAgICAgICBjdXJsX29mZl90IG9mZjsKKyAgICAgICAgd2FybmYoY29uZmlnLAorICAgICAgICAgICAgICAiQSBzcGVjaWZpZWQgcmFuZ2UgTVVTVCBpbmNsdWRlIGF0IGxlYXN0IG9uZSBkYXNoICgtKS4gIgorICAgICAgICAgICAgICAiQXBwZW5kaW5nIG9uZSBmb3IgeW91IVxuIik7CisgICAgICAgIG9mZiA9IGN1cmx4X3N0cnRvb2ZmdChuZXh0YXJnLCBOVUxMLCAxMCk7CisgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICItIiwgb2ZmKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShjb25maWctPnJhbmdlKTsKKyAgICAgICAgY29uZmlnLT5yYW5nZSA9IHN0cmR1cChidWZmZXIpOworICAgICAgICBpZighY29uZmlnLT5yYW5nZSkKKyAgICAgICAgICByZXR1cm4gUEFSQU1fTk9fTUVNOworICAgICAgfQorICAgICAgeworICAgICAgICAvKiBieXRlIHJhbmdlIHJlcXVlc3RlZCAqLworICAgICAgICBjaGFyICp0bXBfcmFuZ2U7CisgICAgICAgIHRtcF9yYW5nZSA9IG5leHRhcmc7CisgICAgICAgIHdoaWxlKCp0bXBfcmFuZ2UgIT0gJ1wwJykgeworICAgICAgICAgIGlmKCFJU0RJR0lUKCp0bXBfcmFuZ2UpICYmICp0bXBfcmFuZ2UgIT0gJy0nICYmICp0bXBfcmFuZ2UgIT0gJywnKSB7CisgICAgICAgICAgICB3YXJuZihjb25maWcsIkludmFsaWQgY2hhcmFjdGVyIGlzIGZvdW5kIGluIGdpdmVuIHJhbmdlLiAiCisgICAgICAgICAgICAgICAgICAiQSBzcGVjaWZpZWQgcmFuZ2UgTVVTVCBoYXZlIG9ubHkgZGlnaXRzIGluICIKKyAgICAgICAgICAgICAgICAgICJcJ3N0YXJ0XCctXCdzdG9wXCcuIFRoZSBzZXJ2ZXIncyByZXNwb25zZSB0byB0aGlzICIKKyAgICAgICAgICAgICAgICAgICJyZXF1ZXN0IGlzIHVuY2VydGFpbi5cbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHRtcF9yYW5nZSsrOworICAgICAgICB9CisgICAgICAgIC8qIGJ5dGUgcmFuZ2UgcmVxdWVzdGVkICovCisgICAgICAgIEdldFN0cigmY29uZmlnLT5yYW5nZSwgbmV4dGFyZyk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdSJzoKKyAgICAgIC8qIHVzZSByZW1vdGUgZmlsZSdzIHRpbWUgKi8KKyAgICAgIGNvbmZpZy0+cmVtb3RlX3RpbWUgPSB0b2dnbGU7CisgICAgICBicmVhazsKKyAgICBjYXNlICdzJzoKKyAgICAgIC8qIGRvbid0IHNob3cgcHJvZ3Jlc3MgbWV0ZXIsIGRvbid0IHNob3cgZXJyb3JzIDogKi8KKyAgICAgIGlmKHRvZ2dsZSkKKyAgICAgICAgY29uZmlnLT5tdXRlID0gY29uZmlnLT5ub3Byb2dyZXNzID0gVFJVRTsKKyAgICAgIGVsc2UKKyAgICAgICAgY29uZmlnLT5tdXRlID0gY29uZmlnLT5ub3Byb2dyZXNzID0gRkFMU0U7CisgICAgICBpZihjb25maWctPnNob3dlcnJvciA8IDApCisgICAgICAgIC8qIGlmIHN0aWxsIG9uIHRoZSBkZWZhdWx0IHZhbHVlLCBzZXQgc2hvd2Vycm9yIHRvIHRoZSByZXZlcnNlIG9mCisgICAgICAgICAgIHRvZ2dsZS4gVGhpcyBpcyB0byBhbGxvdyAtUyBhbmQgLXMgdG8gYmUgdXNlZCBpbiBhbiBpbmRlcGVuZGVudAorICAgICAgICAgICBvcmRlciBidXQgc3RpbGwgaGF2ZSB0aGUgc2FtZSBlZmZlY3QuICovCisgICAgICAgIGNvbmZpZy0+c2hvd2Vycm9yID0gKCF0b2dnbGUpP1RSVUU6RkFMU0U7IC8qIHRvZ2dsZSBvZmYgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ1MnOgorICAgICAgLyogc2hvdyBlcnJvcnMgKi8KKyAgICAgIGNvbmZpZy0+c2hvd2Vycm9yID0gdG9nZ2xlPzE6MDsgLyogdG9nZ2xlIG9uIGlmIHVzZWQgd2l0aCAtcyAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAndCc6CisgICAgICAvKiBUZWxuZXQgb3B0aW9ucyAqLworICAgICAgZXJyID0gYWRkMmxpc3QoJmNvbmZpZy0+dGVsbmV0X29wdGlvbnMsIG5leHRhcmcpOworICAgICAgaWYoZXJyKQorICAgICAgICByZXR1cm4gZXJyOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnVCc6CisgICAgICAvKiB3ZSBhcmUgdXBsb2FkaW5nICovCisgICAgeworICAgICAgc3RydWN0IGdldG91dCAqdXJsOworICAgICAgaWYoY29uZmlnLT51cmxfb3V0IHx8ICgoY29uZmlnLT51cmxfb3V0ID0gY29uZmlnLT51cmxfbGlzdCkgIT0gTlVMTCkpIHsKKyAgICAgICAgLyogdGhlcmUncyBhIG5vZGUgaGVyZSwgaWYgaXQgYWxyZWFkeSBpcyBmaWxsZWQtaW4gY29udGludWUgdG8gZmluZAorICAgICAgICAgICBhbiAiZW1wdHkiIG5vZGUgKi8KKyAgICAgICAgd2hpbGUoY29uZmlnLT51cmxfb3V0ICYmIChjb25maWctPnVybF9vdXQtPmZsYWdzICYgR0VUT1VUX1VQTE9BRCkpCisgICAgICAgICAgY29uZmlnLT51cmxfb3V0ID0gY29uZmlnLT51cmxfb3V0LT5uZXh0OworICAgICAgfQorCisgICAgICAvKiBub3cgdGhlcmUgbWlnaHQgb3IgbWlnaHQgbm90IGJlIGFuIGF2YWlsYWJsZSBub2RlIHRvIGZpbGwgaW4hICovCisKKyAgICAgIGlmKGNvbmZpZy0+dXJsX291dCkKKyAgICAgICAgLyogZXhpc3Rpbmcgbm9kZSAqLworICAgICAgICB1cmwgPSBjb25maWctPnVybF9vdXQ7CisgICAgICBlbHNlCisgICAgICAgIC8qIHRoZXJlIHdhcyBubyBmcmVlIG5vZGUsIGNyZWF0ZSBvbmUhICovCisgICAgICAgIHVybCA9IG5ld19nZXRvdXQoY29uZmlnKTsKKworICAgICAgaWYoIXVybCkKKyAgICAgICAgcmV0dXJuIFBBUkFNX05PX01FTTsKKyAgICAgIGVsc2UgeworICAgICAgICB1cmwtPmZsYWdzIHw9IEdFVE9VVF9VUExPQUQ7IC8qIG1hcmsgLVQgdXNlZCAqLworICAgICAgICBpZighKm5leHRhcmcpCisgICAgICAgICAgdXJsLT5mbGFncyB8PSBHRVRPVVRfTk9VUExPQUQ7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIC8qICItIiBlcXVhbHMgc3RkaW4sIGJ1dCBrZWVwIHRoZSBzdHJpbmcgYXJvdW5kIGZvciBub3cgKi8KKyAgICAgICAgICBHZXRTdHIoJnVybC0+aW5maWxlLCBuZXh0YXJnKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKyAgICBjYXNlICd1JzoKKyAgICAgIC8qIHVzZXI6cGFzc3dvcmQgICovCisgICAgICBHZXRTdHIoJmNvbmZpZy0+dXNlcnB3ZCwgbmV4dGFyZyk7CisgICAgICBjbGVhbmFyZyhuZXh0YXJnKTsKKyAgICAgIGVyciA9IGNoZWNrcGFzc3dkKCJob3N0IiwgJmNvbmZpZy0+dXNlcnB3ZCk7CisgICAgICBpZihlcnIpCisgICAgICAgIHJldHVybiBlcnI7CisgICAgICBicmVhazsKKyAgICBjYXNlICdVJzoKKyAgICAgIC8qIFByb3h5IHVzZXI6cGFzc3dvcmQgICovCisgICAgICBHZXRTdHIoJmNvbmZpZy0+cHJveHl1c2VycHdkLCBuZXh0YXJnKTsKKyAgICAgIGNsZWFuYXJnKG5leHRhcmcpOworICAgICAgZXJyID0gY2hlY2twYXNzd2QoInByb3h5IiwgJmNvbmZpZy0+cHJveHl1c2VycHdkKTsKKyAgICAgIGlmKGVycikKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3YnOgorICAgICAgaWYodG9nZ2xlKSB7CisgICAgICAgIC8qIHRoZSAnJScgdGhpbmcgaGVyZSB3aWxsIGNhdXNlIHRoZSB0cmFjZSBnZXQgc2VudCB0byBzdGRlcnIgKi8KKyAgICAgICAgQ3VybF9zYWZlZnJlZShjb25maWctPnRyYWNlX2R1bXApOworICAgICAgICBjb25maWctPnRyYWNlX2R1bXAgPSBzdHJkdXAoIiUiKTsKKyAgICAgICAgaWYoIWNvbmZpZy0+dHJhY2VfZHVtcCkKKyAgICAgICAgICByZXR1cm4gUEFSQU1fTk9fTUVNOworICAgICAgICBpZihjb25maWctPnRyYWNldHlwZSAmJiAoY29uZmlnLT50cmFjZXR5cGUgIT0gVFJBQ0VfUExBSU4pKQorICAgICAgICAgIHdhcm5mKGNvbmZpZywKKyAgICAgICAgICAgICAgICAiLXYsIC0tdmVyYm9zZSBvdmVycmlkZXMgYW4gZWFybGllciB0cmFjZS92ZXJib3NlIG9wdGlvblxuIik7CisgICAgICAgIGNvbmZpZy0+dHJhY2V0eXBlID0gVFJBQ0VfUExBSU47CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIC8qIHZlcmJvc2UgaXMgZGlzYWJsZWQgaGVyZSAqLworICAgICAgICBjb25maWctPnRyYWNldHlwZSA9IFRSQUNFX05PTkU7CisgICAgICBicmVhazsKKyAgICBjYXNlICdWJzoKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpjb25zdCAqcHJvdG87CisKKyAgICAgIGlmKCF0b2dnbGUpCisgICAgICAgIC8qIC0tbm8tdmVyc2lvbiB5aWVsZHMgbm8gb3V0cHV0ISAqLworICAgICAgICBicmVhazsKKworICAgICAgcHJpbnRmKENVUkxfSUQgIiVzXG4iLCBjdXJsX3ZlcnNpb24oKSk7CisgICAgICBpZihjdXJsaW5mby0+cHJvdG9jb2xzKSB7CisgICAgICAgIHByaW50ZigiUHJvdG9jb2xzOiAiKTsKKyAgICAgICAgZm9yKHByb3RvID0gY3VybGluZm8tPnByb3RvY29sczsgKnByb3RvOyArK3Byb3RvKSB7CisgICAgICAgICAgcHJpbnRmKCIlcyAiLCAqcHJvdG8pOworICAgICAgICB9CisgICAgICAgIHB1dHMoIiIpOyAvKiBuZXdsaW5lICovCisgICAgICB9CisgICAgICBpZihjdXJsaW5mby0+ZmVhdHVyZXMpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgIHByaW50ZigiRmVhdHVyZXM6ICIpOworICAgICAgICBmb3IoaSA9IDA7IGkgPCBzaXplb2YoZmVhdHMpL3NpemVvZihmZWF0c1swXSk7IGkrKykgeworICAgICAgICAgIGlmKGN1cmxpbmZvLT5mZWF0dXJlcyAmIGZlYXRzW2ldLmJpdG1hc2spCisgICAgICAgICAgICBwcmludGYoIiVzICIsIGZlYXRzW2ldLm5hbWUpOworICAgICAgICB9CisgICAgICAgIHB1dHMoIiIpOyAvKiBuZXdsaW5lICovCisgICAgICB9CisgICAgfQorICAgIHJldHVybiBQQVJBTV9IRUxQX1JFUVVFU1RFRDsKKyAgICBjYXNlICd3JzoKKyAgICAgIC8qIGdldCB0aGUgb3V0cHV0IHN0cmluZyAqLworICAgICAgaWYoJ0AnID09ICpuZXh0YXJnKSB7CisgICAgICAgIC8qIHRoZSBkYXRhIGJlZ2lucyB3aXRoIGEgJ0AnIGxldHRlciwgaXQgbWVhbnMgdGhhdCBhIGZpbGUgbmFtZQorICAgICAgICAgICBvciAtIChzdGRpbikgZm9sbG93cyAqLworICAgICAgICBGSUxFICpmaWxlOworICAgICAgICBjb25zdCBjaGFyICpmbmFtZTsKKyAgICAgICAgbmV4dGFyZysrOyAvKiBwYXNzIHRoZSBAICovCisgICAgICAgIGlmKGN1cmx4X3N0cmVxdWFsKCItIiwgbmV4dGFyZykpIHsKKyAgICAgICAgICBmbmFtZSA9ICI8c3RkaW4+IjsKKyAgICAgICAgICBmaWxlID0gc3RkaW47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgZm5hbWUgPSBuZXh0YXJnOworICAgICAgICAgIGZpbGUgPSBmb3BlbihuZXh0YXJnLCAiciIpOworICAgICAgICB9CisgICAgICAgIGVyciA9IGZpbGUyc3RyaW5nKCZjb25maWctPndyaXRlb3V0LCBmaWxlKTsKKyAgICAgICAgaWYoZmlsZSAmJiAoZmlsZSAhPSBzdGRpbikpCisgICAgICAgICAgZmNsb3NlKGZpbGUpOworICAgICAgICBpZihlcnIpCisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgaWYoIWNvbmZpZy0+d3JpdGVvdXQpCisgICAgICAgICAgd2FybmYoY29uZmlnLCAiRmFpbGVkIHRvIHJlYWQgJXMiLCBmbmFtZSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIEdldFN0cigmY29uZmlnLT53cml0ZW91dCwgbmV4dGFyZyk7CisgICAgICBicmVhazsKKyAgICBjYXNlICd4JzoKKyAgICAgIC8qIHByb3h5ICovCisgICAgICBHZXRTdHIoJmNvbmZpZy0+cHJveHksIG5leHRhcmcpOworICAgICAgY29uZmlnLT5wcm94eXZlciA9IENVUkxQUk9YWV9IVFRQOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnWCc6CisgICAgICAvKiBzZXQgY3VzdG9tIHJlcXVlc3QgKi8KKyAgICAgIEdldFN0cigmY29uZmlnLT5jdXN0b21yZXF1ZXN0LCBuZXh0YXJnKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3knOgorICAgICAgLyogbG93IHNwZWVkIHRpbWUgKi8KKyAgICAgIGlmKHN0cjJudW0oJmNvbmZpZy0+bG93X3NwZWVkX3RpbWUsIG5leHRhcmcpKQorICAgICAgICByZXR1cm4gUEFSQU1fQkFEX05VTUVSSUM7CisgICAgICBpZighY29uZmlnLT5sb3dfc3BlZWRfbGltaXQpCisgICAgICAgIGNvbmZpZy0+bG93X3NwZWVkX2xpbWl0ID0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ1knOgorICAgICAgLyogbG93IHNwZWVkIGxpbWl0ICovCisgICAgICBpZihzdHIybnVtKCZjb25maWctPmxvd19zcGVlZF9saW1pdCwgbmV4dGFyZykpCisgICAgICAgIHJldHVybiBQQVJBTV9CQURfTlVNRVJJQzsKKyAgICAgIGlmKCFjb25maWctPmxvd19zcGVlZF90aW1lKQorICAgICAgICBjb25maWctPmxvd19zcGVlZF90aW1lID0gMzA7CisgICAgICBicmVhazsKKyAgICBjYXNlICd6JzogLyogdGltZSBjb25kaXRpb24gY29taW5nIHVwICovCisgICAgICBzd2l0Y2goKm5leHRhcmcpIHsKKyAgICAgIGNhc2UgJysnOgorICAgICAgICBuZXh0YXJnKys7CisgICAgICBkZWZhdWx0OgorICAgICAgICAvKiBJZi1Nb2RpZmllZC1TaW5jZTogKHNlY3Rpb24gMTQuMjggaW4gUkZDMjA2OCkgKi8KKyAgICAgICAgY29uZmlnLT50aW1lY29uZCA9IENVUkxfVElNRUNPTkRfSUZNT0RTSU5DRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICctJzoKKyAgICAgICAgLyogSWYtVW5tb2RpZmllZC1TaW5jZTogIChzZWN0aW9uIDE0LjI0IGluIFJGQzIwNjgpICovCisgICAgICAgIGNvbmZpZy0+dGltZWNvbmQgPSBDVVJMX1RJTUVDT05EX0lGVU5NT0RTSU5DRTsKKyAgICAgICAgbmV4dGFyZysrOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJz0nOgorICAgICAgICAvKiBMYXN0LU1vZGlmaWVkOiAgKHNlY3Rpb24gMTQuMjkgaW4gUkZDMjA2OCkgKi8KKyAgICAgICAgY29uZmlnLT50aW1lY29uZCA9IENVUkxfVElNRUNPTkRfTEFTVE1PRDsKKyAgICAgICAgbmV4dGFyZysrOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIG5vdyA9IHRpbWUoTlVMTCk7CisgICAgICBjb25maWctPmNvbmR0aW1lPWN1cmxfZ2V0ZGF0ZShuZXh0YXJnLCAmbm93KTsKKyAgICAgIGlmKC0xID09IChpbnQpY29uZmlnLT5jb25kdGltZSkgeworICAgICAgICAvKiBub3cgbGV0J3Mgc2VlIGlmIGl0IGlzIGEgZmlsZSBuYW1lIHRvIGdldCB0aGUgdGltZSBmcm9tIGluc3RlYWQhICovCisgICAgICAgIHN0cnVjdF9zdGF0IHN0YXRidWY7CisgICAgICAgIGlmKC0xID09IHN0YXQobmV4dGFyZywgJnN0YXRidWYpKSB7CisgICAgICAgICAgLyogZmFpbGVkLCByZW1vdmUgdGltZSBjb25kaXRpb24gKi8KKyAgICAgICAgICBjb25maWctPnRpbWVjb25kID0gQ1VSTF9USU1FQ09ORF9OT05FOworICAgICAgICAgIHdhcm5mKGNvbmZpZywKKyAgICAgICAgICAgICAgICAiSWxsZWdhbCBkYXRlIGZvcm1hdCBmb3IgLXosIC0tdGltZWNvbmQgKGFuZCBub3QgIgorICAgICAgICAgICAgICAgICJhIGZpbGUgbmFtZSkuIERpc2FibGluZyB0aW1lIGNvbmRpdGlvbi4gIgorICAgICAgICAgICAgICAgICJTZWUgY3VybF9nZXRkYXRlKDMpIGZvciB2YWxpZCBkYXRlIHN5bnRheC5cbiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIC8qIHB1bGwgdGhlIHRpbWUgb3V0IGZyb20gdGhlIGZpbGUgKi8KKyAgICAgICAgICBjb25maWctPmNvbmR0aW1lID0gc3RhdGJ1Zi5zdF9tdGltZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogLyogdW5rbm93biBmbGFnICovCisgICAgICByZXR1cm4gUEFSQU1fT1BUSU9OX1VOS05PV047CisgICAgfQorICAgIGhpdCA9IC0xOworCisgIH0gd2hpbGUoIWxvbmdvcHQgJiYgIXNpbmdsZW9wdCAmJiAqKytwYXJzZSAmJiAhKnVzZWRhcmcpOworCisgIHJldHVybiBQQVJBTV9PSzsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfZ2V0cGFyYW0uaCBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2dldHBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwMmZkNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2dldHBhcmFtLmgKQEAgLTAsMCArMSw0NiBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9UT09MX0dFVFBBUkFNX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVE9PTF9HRVRQQVJBTV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCit0eXBlZGVmIGVudW0geworICBQQVJBTV9PSywKKyAgUEFSQU1fT1BUSU9OX0FNQklHVU9VUywKKyAgUEFSQU1fT1BUSU9OX1VOS05PV04sCisgIFBBUkFNX1JFUVVJUkVTX1BBUkFNRVRFUiwKKyAgUEFSQU1fQkFEX1VTRSwKKyAgUEFSQU1fSEVMUF9SRVFVRVNURUQsCisgIFBBUkFNX0dPVF9FWFRSQV9QQVJBTUVURVIsCisgIFBBUkFNX0JBRF9OVU1FUklDLAorICBQQVJBTV9MSUJDVVJMX0RPRVNOVF9TVVBQT1JULAorICBQQVJBTV9OT19NRU0sCisgIFBBUkFNX0xBU1QKK30gUGFyYW1ldGVyRXJyb3I7CisKK1BhcmFtZXRlckVycm9yIGdldHBhcmFtZXRlcihjaGFyICpmbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5leHRhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqdXNlZGFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVE9PTF9HRVRQQVJBTV9IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX2dldHBhc3MuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2dldHBhc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmFhNWRkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfZ2V0cGFzcy5jCkBAIC0wLDAgKzEsMjYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZuZGVmIEhBVkVfR0VUUEFTU19SCisvKiB0aGlzIGZpbGUgaXMgb25seSBmb3Igc3lzdGVtcyB3aXRob3V0IGdldHBhc3NfcigpICovCisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjICBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjICBpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1RFUk1JT1NfSAorIyAgaW5jbHVkZSA8dGVybWlvcy5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1RFUk1JT19IKQorIyAgaW5jbHVkZSA8dGVybWlvLmg+CisjZW5kaWYKKworI2lmZGVmIF9fVk1TCisjICBpbmNsdWRlIGRlc2NyaXAKKyMgIGluY2x1ZGUgc3RhcmxldAorIyAgaW5jbHVkZSBpb2RlZgorI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorIyAgaW5jbHVkZSA8Y29uaW8uaD4KKyNlbmRpZgorCisjaWZkZWYgTkVUV0FSRQorIyAgaWZkZWYgX19OT1ZFTExfTElCQ19fCisjICAgIGluY2x1ZGUgPHNjcmVlbi5oPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxud2NvbmlvLmg+CisjICBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRQorI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAidG9vbF9nZXRwYXNzLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKKyNpZmRlZiBfX1ZNUworLyogVk1TIGltcGxlbWVudGF0aW9uICovCitjaGFyICpnZXRwYXNzX3IoY29uc3QgY2hhciAqcHJvbXB0LCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4pCit7CisgIGxvbmcgc3RzOworICBzaG9ydCBjaGFuOworCisgIC8qIE1TSywgMjMtSkFOLTIwMDQsIGlvc2JkZWYuaCB3YXNuJ3QgaW4gVkFYIFY3LjIgb3IgQ0MgNi40ICAqLworICAvKiBkaXN0cmlidXRpb24gc28gSSBjcmVhdGVkIHRoaXMuICBNYXkgcmV2ZXJ0IGJhY2sgbGF0ZXIgdG8gKi8KKyAgLyogc3RydWN0IF9pb3NiIGlvc2I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0cnVjdCBfaW9zYgorICAgICB7CisgICAgIHNob3J0IGludCBpb3NiJHdfc3RhdHVzOyAvKiBzdGF0dXMgICAgICovCisgICAgIHNob3J0IGludCBpb3NiJHdfYmNudDsgICAvKiBieXRlIGNvdW50ICovCisgICAgIGludCAgICAgICB1bnVzZWQ7ICAgICAgICAvKiB1bnVzZWQgICAgICovCisgICAgIH0gaW9zYjsKKworICAkREVTQ1JJUFRPUih0dGRlc2MsICJUVCIpOworCisgIGJ1ZmZlclswXSA9ICdcMCc7CisgIHN0cyA9IHN5cyRhc3NpZ24oJnR0ZGVzYywgJmNoYW4sIDAsIDApOworICBpZihzdHMgJiAxKSB7CisgICAgc3RzID0gc3lzJHFpb3coMCwgY2hhbiwKKyAgICAgICAgICAgICAgICAgICBJTyRfUkVBRFBST01QVCB8IElPJE1fTk9FQ0hPLAorICAgICAgICAgICAgICAgICAgICZpb3NiLCAwLCAwLCBidWZmZXIsIGJ1ZmxlbiwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICBwcm9tcHQsIHN0cmxlbihwcm9tcHQpKTsKKworICAgIGlmKChzdHMgJiAxKSAmJiAoaW9zYi5pb3NiJHdfc3RhdHVzICYgMSkpCisgICAgICBidWZmZXJbaW9zYi5pb3NiJHdfYmNudF0gPSAnXDAnOworCisgICAgc3RzID0gc3lzJGRhc3NnbihjaGFuKTsKKyAgfQorICByZXR1cm4gYnVmZmVyOyAvKiB3ZSBhbHdheXMgcmV0dXJuIHN1Y2Nlc3MgKi8KK30KKyNkZWZpbmUgRE9ORQorI2VuZGlmIC8qIF9fVk1TICovCisKKyNpZmRlZiBfX1NZTUJJQU4zMl9fCisjICBkZWZpbmUgZ2V0Y2goKSBnZXRjaGFyKCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX1NZTUJJQU4zMl9fKQorCitjaGFyICpnZXRwYXNzX3IoY29uc3QgY2hhciAqcHJvbXB0LCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4pCit7CisgIHNpemVfdCBpOworICBmcHV0cyhwcm9tcHQsIHN0ZGVycik7CisKKyAgZm9yKGkgPSAwOyBpIDwgYnVmbGVuOyBpKyspIHsKKyAgICBidWZmZXJbaV0gPSAoY2hhcilnZXRjaCgpOworICAgIGlmKGJ1ZmZlcltpXSA9PSAnXHInIHx8IGJ1ZmZlcltpXSA9PSAnXG4nKSB7CisgICAgICBidWZmZXJbaV0gPSAnXDAnOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGlmKGJ1ZmZlcltpXSA9PSAnXGInKQorICAgICAgICAvKiByZW1vdmUgdGhpcyBsZXR0ZXIgYW5kIGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBrZXksIHJlbW92ZSB0aGUKKyAgICAgICAgICAgcHJldmlvdXMgb25lIGFzIHdlbGwgKi8KKyAgICAgICAgaSA9IGkgLSAoaSA+PSAxKSA/IDIgOiAxOworICB9CisjaWZuZGVmIF9fU1lNQklBTjMyX18KKyAgLyogc2luY2UgZWNobyBpcyBkaXNhYmxlZCwgcHJpbnQgYSBuZXdsaW5lICovCisgIGZwdXRzKCJcbiIsIHN0ZGVycik7CisjZW5kaWYKKyAgLyogaWYgdXNlciBkaWRuJ3QgaGl0IEVOVEVSLCB0ZXJtaW5hdGUgYnVmZmVyICovCisgIGlmKGkgPT0gYnVmbGVuKQorICAgIGJ1ZmZlcltidWZsZW4tMV0gPSAnXDAnOworCisgIHJldHVybiBidWZmZXI7IC8qIHdlIGFsd2F5cyByZXR1cm4gc3VjY2VzcyAqLworfQorI2RlZmluZSBET05FCisjZW5kaWYgLyogV0lOMzIgfHwgX19TWU1CSUFOMzJfXyAqLworCisjaWZkZWYgTkVUV0FSRQorLyogTmV0V2FyZSBpbXBsZW1lbnRhdGlvbiAqLworI2lmZGVmIF9fTk9WRUxMX0xJQkNfXworY2hhciAqZ2V0cGFzc19yKGNvbnN0IGNoYXIgKnByb21wdCwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKQoreworICByZXR1cm4gZ2V0cGFzc3dvcmQocHJvbXB0LCBidWZmZXIsIGJ1Zmxlbik7Cit9CisjZWxzZQorY2hhciAqZ2V0cGFzc19yKGNvbnN0IGNoYXIgKnByb21wdCwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKQoreworICBzaXplX3QgaSA9IDA7CisKKyAgcHJpbnRmKCIlcyIsIHByb21wdCk7CisgIGRvIHsKKyAgICBidWZmZXJbaSsrXSA9IGdldGNoKCk7CisgICAgaWYoYnVmZmVyW2ktMV0gPT0gJ1xiJykgeworICAgICAgLyogcmVtb3ZlIHRoaXMgbGV0dGVyIGFuZCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qga2V5LAorICAgICAgICAgcmVtb3ZlIHRoZSBwcmV2aW91cyBvbmUgYXMgd2VsbCAqLworICAgICAgaWYoaSA+IDEpIHsKKyAgICAgICAgcHJpbnRmKCJcYiBcYiIpOworICAgICAgICBpID0gaSAtIDI7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgUmluZ1RoZUJlbGwoKTsKKyAgICAgICAgaSA9IGkgLSAxOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKGJ1ZmZlcltpLTFdICE9IDEzKQorICAgICAgcHV0Y2hhcignKicpOworCisgIH0gd2hpbGUoKGJ1ZmZlcltpLTFdICE9IDEzKSAmJiAoaSA8IGJ1ZmxlbikpOworICBidWZmZXJbaS0xXSA9ICdcMCc7CisgIHByaW50ZigiXHJcbiIpOworICByZXR1cm4gYnVmZmVyOworfQorI2VuZGlmIC8qIF9fTk9WRUxMX0xJQkNfXyAqLworI2RlZmluZSBET05FCisjZW5kaWYgLyogTkVUV0FSRSAqLworCisjaWZuZGVmIERPTkUgLyogbm90IHByZXZpb3VzbHkgcHJvdmlkZWQgKi8KKworI2lmZGVmIEhBVkVfVEVSTUlPU19ICisjICBkZWZpbmUgc3RydWN0X3Rlcm0gIHN0cnVjdCB0ZXJtaW9zCisjZWxpZiBkZWZpbmVkKEhBVkVfVEVSTUlPX0gpCisjICBkZWZpbmUgc3RydWN0X3Rlcm0gIHN0cnVjdCB0ZXJtaW8KKyNlbHNlCisjICB1bmRlZiAgc3RydWN0X3Rlcm0KKyNlbmRpZgorCitzdGF0aWMgYm9vbCB0dHllY2hvKGJvb2wgZW5hYmxlLCBpbnQgZmQpCit7CisjaWZkZWYgc3RydWN0X3Rlcm0KKyAgc3RhdGljIHN0cnVjdF90ZXJtIHdpdGhlY2hvOworICBzdGF0aWMgc3RydWN0X3Rlcm0gbm9lY2hvOworI2VuZGlmCisgIGlmKCFlbmFibGUpIHsKKyAgICAvKiBkaXNhYmxlIGVjaG8gYnkgZXh0cmFjdGluZyB0aGUgY3VycmVudCAnd2l0aGVjaG8nIG1vZGUgYW5kIHJlbW92ZSB0aGUKKyAgICAgICBFQ0hPIGJpdCBhbmQgc2V0IGJhY2sgdGhlIHN0cnVjdCAqLworI2lmZGVmIEhBVkVfVEVSTUlPU19ICisgICAgdGNnZXRhdHRyKGZkLCAmd2l0aGVjaG8pOworICAgIG5vZWNobyA9IHdpdGhlY2hvOworICAgIG5vZWNoby5jX2xmbGFnICY9IH5FQ0hPOworICAgIHRjc2V0YXR0cihmZCwgVENTQU5PVywgJm5vZWNobyk7CisjZWxpZiBkZWZpbmVkKEhBVkVfVEVSTUlPX0gpCisgICAgaW9jdGwoZmQsIFRDR0VUQSwgJndpdGhlY2hvKTsKKyAgICBub2VjaG8gPSB3aXRoZWNobzsKKyAgICBub2VjaG8uY19sZmxhZyAmPSB+RUNITzsKKyAgICBpb2N0bChmZCwgVENTRVRBLCAmbm9lY2hvKTsKKyNlbHNlCisgICAgLyogbmVpdGhlciBIQVZFX1RFUk1JT19IIG5vciBIQVZFX1RFUk1JT1NfSCwgd2UgY2FuJ3QgZGlzYWJsZSBlY2hvISAqLworICAgICh2b2lkKWZkOworICAgIHJldHVybiBGQUxTRTsgLyogbm90IGRpc2FibGVkICovCisjZW5kaWYKKyAgICByZXR1cm4gVFJVRTsgLyogZGlzYWJsZWQgKi8KKyAgfQorICBlbHNlIHsKKyAgICAvKiByZS1lbmFibGUgZWNobywgYXNzdW1lcyB3ZSBkaXNhYmxlZCBpdCBiZWZvcmUgKGFuZCBzZXQgdGhlIHN0cnVjdHMgd2UKKyAgICAgICBub3cgdXNlIHRvIHJlc2V0IHRoZSB0ZXJtaW5hbCBzdGF0dXMpICovCisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKyAgICB0Y3NldGF0dHIoZmQsIFRDU0FGTFVTSCwgJndpdGhlY2hvKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9URVJNSU9fSCkKKyAgICBpb2N0bChmZCwgVENTRVRBLCAmd2l0aGVjaG8pOworI2Vsc2UKKyAgICByZXR1cm4gRkFMU0U7IC8qIG5vdCBlbmFibGVkICovCisjZW5kaWYKKyAgICByZXR1cm4gVFJVRTsgLyogZW5hYmxlZCAqLworICB9Cit9CisKK2NoYXIgKmdldHBhc3Nfcihjb25zdCBjaGFyICpwcm9tcHQsIC8qIHByb21wdCB0byBkaXNwbGF5ICovCisgICAgICAgICAgICAgICAgY2hhciAqcGFzc3dvcmQsICAgICAvKiBidWZmZXIgdG8gc3RvcmUgcGFzc3dvcmQgaW4gKi8KKyAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuKSAgICAgIC8qIHNpemUgb2YgYnVmZmVyIHRvIHN0b3JlIHBhc3N3b3JkIGluICovCit7CisgIHNzaXplX3QgbnJlYWQ7CisgIGJvb2wgZGlzYWJsZWQ7CisgIGludCBmZCA9IG9wZW4oIi9kZXYvdHR5IiwgT19SRE9OTFkpOworICBpZigtMSA9PSBmZCkKKyAgICBmZCA9IDE7IC8qIHVzZSBzdGRpbiBpZiB0aGUgdHR5IGNvdWxkbid0IGJlIHVzZWQgKi8KKworICBkaXNhYmxlZCA9IHR0eWVjaG8oRkFMU0UsIGZkKTsgLyogZGlzYWJsZSB0ZXJtaW5hbCBlY2hvICovCisKKyAgZnB1dHMocHJvbXB0LCBzdGRlcnIpOworICBucmVhZCA9IHJlYWQoZmQsIHBhc3N3b3JkLCBidWZsZW4pOworICBpZihucmVhZCA+IDApCisgICAgcGFzc3dvcmRbLS1ucmVhZF0gPSAnXDAnOyAvKiB6ZXJvIHRlcm1pbmF0ZSB3aGVyZSBlbnRlciBpcyBzdG9yZWQgKi8KKyAgZWxzZQorICAgIHBhc3N3b3JkWzBdID0gJ1wwJzsgLyogZ290IG5vdGhpbmcgKi8KKworICBpZihkaXNhYmxlZCkgeworICAgIC8qIGlmIGVjaG8gYWN0dWFsbHkgd2FzIGRpc2FibGVkLCBhZGQgYSBuZXdsaW5lICovCisgICAgZnB1dHMoIlxuIiwgc3RkZXJyKTsKKyAgICAodm9pZCl0dHllY2hvKFRSVUUsIGZkKTsgLyogZW5hYmxlIGVjaG8gKi8KKyAgfQorCisgIGlmKDEgIT0gZmQpCisgICAgY2xvc2UoZmQpOworCisgIHJldHVybiBwYXNzd29yZDsgLyogcmV0dXJuIHBvaW50ZXIgdG8gYnVmZmVyICovCit9CisKKyNlbmRpZiAvKiBET05FICovCisjZW5kaWYgLyogSEFWRV9HRVRQQVNTX1IgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX2dldHBhc3MuaCBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2dldHBhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDZkMGZlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfZ2V0cGFzcy5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfVE9PTF9HRVRQQVNTX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVE9PTF9HRVRQQVNTX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZm5kZWYgSEFWRV9HRVRQQVNTX1IKKy8qIElmIHRoZXJlJ3MgYSBzeXN0ZW0tcHJvdmlkZWQgZnVuY3Rpb24gbmFtZWQgbGlrZSB0aGlzLCB3ZSB0cnVzdCBpdCBpcworICAgYWxzbyBmb3VuZCBpbiBvbmUgb2YgdGhlIHN0YW5kYXJkIGhlYWRlcnMuICovCisKKy8qCisgKiBSZXR1cm5pbmcgTlVMTCB3aWxsIGFib3J0IHRoZSBjb250aW51ZWQgb3BlcmF0aW9uIQorICovCitjaGFyKiBnZXRwYXNzX3IoY29uc3QgY2hhciAqcHJvbXB0LCBjaGFyKiBidWZmZXIsIHNpemVfdCBidWZsZW4pOworI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9UT09MX0dFVFBBU1NfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfaGVscC5jIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfaGVscC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZWYxZDIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9oZWxwLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlICJ0b29sX3BhbnlrZXkuaCIKKyNpbmNsdWRlICJ0b29sX2hlbHAuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiIC8qIGtlZXAgdGhpcyBhcyBMQVNUIGluY2x1ZGUgKi8KKworI2lmZGVmIE1TRE9TCisjICBkZWZpbmUgVVNFX1dBVFQzMgorI2VuZGlmCisKKy8qCisgKiBBIGZldyBvZiB0aGVzZSBzb3VyY2UgbGluZXMgYXJlID44MCBjb2x1bW5zIHdpZGUsIGJ1dCB0aGF0J3Mgb25seSBiZWNhdXNlCisgKiBicmVha2luZyB0aGUgc3RyaW5ncyBuYXJyb3dlciBtYWtlcyB0aGlzIGNodW5rIGxvb2sgZXZlbiB3b3JzZSEKKyAqCisgKiAgU3RhcnRpbmcgd2l0aCA3LjE4LjAsIHRoaXMgbGlzdCBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucyBpcyBzb3J0ZWQgYmFzZWQKKyAqICBvbiB0aGUgbG9uZyBvcHRpb24gbmFtZS4gSXQgaXMgbm90IGRvbmUgYXV0b21hdGljYWxseSwgYWx0aG91Z2ggYSBjb21tYW5kCisgKiAgbGluZSBsaWtlIHRoZSBmb2xsb3dpbmcgY2FuIGhlbHAgb3V0OgorICoKKyAqICBjdXJsIC0taGVscCB8IGN1dCAtYzUtIHwgZ3JlcCAiXi0iIHwgc29ydAorICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBoZWxwdGV4dFtdID0geworICAiVXNhZ2U6IGN1cmwgW29wdGlvbnMuLi5dIDx1cmw+IiwKKyAgIk9wdGlvbnM6IChIKSBtZWFucyBIVFRQL0hUVFBTIG9ubHksIChGKSBtZWFucyBGVFAgb25seSIsCisgICIgICAgIC0tYW55YXV0aCAgICAgICBQaWNrIFwiYW55XCIgYXV0aGVudGljYXRpb24gbWV0aG9kIChIKSIsCisgICIgLWEsIC0tYXBwZW5kICAgICAgICBBcHBlbmQgdG8gdGFyZ2V0IGZpbGUgd2hlbiB1cGxvYWRpbmcgKEYvU0ZUUCkiLAorICAiICAgICAtLWJhc2ljICAgICAgICAgVXNlIEhUVFAgQmFzaWMgQXV0aGVudGljYXRpb24gKEgpIiwKKyAgIiAgICAgLS1jYWNlcnQgRklMRSAgIENBIGNlcnRpZmljYXRlIHRvIHZlcmlmeSBwZWVyIGFnYWluc3QgKFNTTCkiLAorICAiICAgICAtLWNhcGF0aCBESVIgICAgQ0EgZGlyZWN0b3J5IHRvIHZlcmlmeSBwZWVyIGFnYWluc3QgKFNTTCkiLAorICAiIC1FLCAtLWNlcnQgQ0VSVFs6UEFTU1dEXSBDbGllbnQgY2VydGlmaWNhdGUgZmlsZSBhbmQgcGFzc3dvcmQgKFNTTCkiLAorICAiICAgICAtLWNlcnQtdHlwZSBUWVBFIENlcnRpZmljYXRlIGZpbGUgdHlwZSAoREVSL1BFTS9FTkcpIChTU0wpIiwKKyAgIiAgICAgLS1jaXBoZXJzIExJU1QgIFNTTCBjaXBoZXJzIHRvIHVzZSAoU1NMKSIsCisgICIgICAgIC0tY29tcHJlc3NlZCAgICBSZXF1ZXN0IGNvbXByZXNzZWQgcmVzcG9uc2UgKHVzaW5nIGRlZmxhdGUgb3IgZ3ppcCkiLAorICAiIC1LLCAtLWNvbmZpZyBGSUxFICAgU3BlY2lmeSB3aGljaCBjb25maWcgZmlsZSB0byByZWFkIiwKKyAgIiAgICAgLS1jb25uZWN0LXRpbWVvdXQgU0VDT05EUyAgTWF4aW11bSB0aW1lIGFsbG93ZWQgZm9yIGNvbm5lY3Rpb24iLAorICAiIC1DLCAtLWNvbnRpbnVlLWF0IE9GRlNFVCAgUmVzdW1lZCB0cmFuc2ZlciBvZmZzZXQiLAorICAiIC1iLCAtLWNvb2tpZSBTVFJJTkcvRklMRSAgU3RyaW5nIG9yIGZpbGUgdG8gcmVhZCBjb29raWVzIGZyb20gKEgpIiwKKyAgIiAtYywgLS1jb29raWUtamFyIEZJTEUgIFdyaXRlIGNvb2tpZXMgdG8gdGhpcyBmaWxlIGFmdGVyIG9wZXJhdGlvbiAoSCkiLAorICAiICAgICAtLWNyZWF0ZS1kaXJzICAgQ3JlYXRlIG5lY2Vzc2FyeSBsb2NhbCBkaXJlY3RvcnkgaGllcmFyY2h5IiwKKyAgIiAgICAgLS1jcmxmICAgICAgICAgIENvbnZlcnQgTEYgdG8gQ1JMRiBpbiB1cGxvYWQiLAorICAiICAgICAtLWNybGZpbGUgRklMRSAgR2V0IGEgQ1JMIGxpc3QgaW4gUEVNIGZvcm1hdCBmcm9tIHRoZSBnaXZlbiBmaWxlIiwKKyAgIiAtZCwgLS1kYXRhIERBVEEgICAgIEhUVFAgUE9TVCBkYXRhIChIKSIsCisgICIgICAgIC0tZGF0YS1hc2NpaSBEQVRBICBIVFRQIFBPU1QgQVNDSUkgZGF0YSAoSCkiLAorICAiICAgICAtLWRhdGEtYmluYXJ5IERBVEEgIEhUVFAgUE9TVCBiaW5hcnkgZGF0YSAoSCkiLAorICAiICAgICAtLWRhdGEtdXJsZW5jb2RlIERBVEEgIEhUVFAgUE9TVCBkYXRhIHVybCBlbmNvZGVkIChIKSIsCisgICIgICAgIC0tZGVsZWdhdGlvbiBTVFJJTkcgR1NTLUFQSSBkZWxlZ2F0aW9uIHBlcm1pc3Npb24iLAorICAiICAgICAtLWRpZ2VzdCAgICAgICAgVXNlIEhUVFAgRGlnZXN0IEF1dGhlbnRpY2F0aW9uIChIKSIsCisgICIgICAgIC0tZGlzYWJsZS1lcHJ0ICBJbmhpYml0IHVzaW5nIEVQUlQgb3IgTFBSVCAoRikiLAorICAiICAgICAtLWRpc2FibGUtZXBzdiAgSW5oaWJpdCB1c2luZyBFUFNWIChGKSIsCisgICIgLUQsIC0tZHVtcC1oZWFkZXIgRklMRSAgV3JpdGUgdGhlIGhlYWRlcnMgdG8gdGhpcyBmaWxlIiwKKyAgIiAgICAgLS1lZ2QtZmlsZSBGSUxFICBFR0Qgc29ja2V0IHBhdGggZm9yIHJhbmRvbSBkYXRhIChTU0wpIiwKKyAgIiAgICAgLS1lbmdpbmUgRU5HSU5HRSAgQ3J5cHRvIGVuZ2luZSAoU1NMKS4gXCItLWVuZ2luZSBsaXN0XCIgZm9yIGxpc3QiLAorI2lmZGVmIFVTRV9FTlZJUk9OTUVOVAorICAiICAgICAtLWVudmlyb25tZW50ICAgV3JpdGUgcmVzdWx0cyB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKFJJU0MgT1MpIiwKKyNlbmRpZgorICAiIC1mLCAtLWZhaWwgICAgICAgICAgRmFpbCBzaWxlbnRseSAobm8gb3V0cHV0IGF0IGFsbCkgb24gSFRUUCBlcnJvcnMgKEgpIiwKKyAgIiAtRiwgLS1mb3JtIENPTlRFTlQgIFNwZWNpZnkgSFRUUCBtdWx0aXBhcnQgUE9TVCBkYXRhIChIKSIsCisgICIgICAgIC0tZm9ybS1zdHJpbmcgU1RSSU5HICBTcGVjaWZ5IEhUVFAgbXVsdGlwYXJ0IFBPU1QgZGF0YSAoSCkiLAorICAiICAgICAtLWZ0cC1hY2NvdW50IERBVEEgIEFjY291bnQgZGF0YSBzdHJpbmcgKEYpIiwKKyAgIiAgICAgLS1mdHAtYWx0ZXJuYXRpdmUtdG8tdXNlciBDT01NQU5EICAiCisgICJTdHJpbmcgdG8gcmVwbGFjZSBcIlVTRVIgW25hbWVdXCIgKEYpIiwKKyAgIiAgICAgLS1mdHAtY3JlYXRlLWRpcnMgIENyZWF0ZSB0aGUgcmVtb3RlIGRpcnMgaWYgbm90IHByZXNlbnQgKEYpIiwKKyAgIiAgICAgLS1mdHAtbWV0aG9kIFtNVUxUSUNXRC9OT0NXRC9TSU5HTEVDV0RdIENvbnRyb2wgQ1dEIHVzYWdlIChGKSIsCisgICIgICAgIC0tZnRwLXBhc3YgICAgICBVc2UgUEFTVi9FUFNWIGluc3RlYWQgb2YgUE9SVCAoRikiLAorICAiIC1QLCAtLWZ0cC1wb3J0IEFEUiAgVXNlIFBPUlQgd2l0aCBnaXZlbiBhZGRyZXNzIGluc3RlYWQgb2YgUEFTViAoRikiLAorICAiICAgICAtLWZ0cC1za2lwLXBhc3YtaXAgU2tpcCB0aGUgSVAgYWRkcmVzcyBmb3IgUEFTViAoRilcbiIKKyAgIiAgICAgLS1mdHAtcHJldCAgICAgIFNlbmQgUFJFVCBiZWZvcmUgUEFTViAoZm9yIGRyZnRwZCkgKEYpIiwKKyAgIiAgICAgLS1mdHAtc3NsLWNjYyAgIFNlbmQgQ0NDIGFmdGVyIGF1dGhlbnRpY2F0aW5nIChGKSIsCisgICIgICAgIC0tZnRwLXNzbC1jY2MtbW9kZSBBQ1RJVkUvUEFTU0lWRSAgU2V0IENDQyBtb2RlIChGKSIsCisgICIgICAgIC0tZnRwLXNzbC1jb250cm9sIFJlcXVpcmUgU1NML1RMUyBmb3IgZnRwIGxvZ2luLCAiCisgICJjbGVhciBmb3IgdHJhbnNmZXIgKEYpIiwKKyAgIiAtRywgLS1nZXQgICAgICAgICAgIFNlbmQgdGhlIC1kIGRhdGEgd2l0aCBhIEhUVFAgR0VUIChIKSIsCisgICIgLWcsIC0tZ2xvYm9mZiAgICAgICBEaXNhYmxlIFVSTCBzZXF1ZW5jZXMgYW5kIHJhbmdlcyB1c2luZyB7fSBhbmQgW10iLAorICAiIC1ILCAtLWhlYWRlciBMSU5FICAgQ3VzdG9tIGhlYWRlciB0byBwYXNzIHRvIHNlcnZlciAoSCkiLAorICAiIC1JLCAtLWhlYWQgICAgICAgICAgU2hvdyBkb2N1bWVudCBpbmZvIG9ubHkiLAorICAiIC1oLCAtLWhlbHAgICAgICAgICAgVGhpcyBoZWxwIHRleHQiLAorICAiICAgICAtLWhvc3RwdWJtZDUgTUQ1ICAiCisgICJIZXggZW5jb2RlZCBNRDUgc3RyaW5nIG9mIHRoZSBob3N0IHB1YmxpYyBrZXkuIChTU0gpIiwKKyAgIiAtMCwgLS1odHRwMS4wICAgICAgIFVzZSBIVFRQIDEuMCAoSCkiLAorICAiICAgICAtLWlnbm9yZS1jb250ZW50LWxlbmd0aCAgSWdub3JlIHRoZSBIVFRQIENvbnRlbnQtTGVuZ3RoIGhlYWRlciIsCisgICIgLWksIC0taW5jbHVkZSAgICAgICBJbmNsdWRlIHByb3RvY29sIGhlYWRlcnMgaW4gdGhlIG91dHB1dCAoSC9GKSIsCisgICIgLWssIC0taW5zZWN1cmUgICAgICBBbGxvdyBjb25uZWN0aW9ucyB0byBTU0wgc2l0ZXMgd2l0aG91dCBjZXJ0cyAoSCkiLAorICAiICAgICAtLWludGVyZmFjZSBJTlRFUkZBQ0UgIFNwZWNpZnkgbmV0d29yayBpbnRlcmZhY2UvYWRkcmVzcyB0byB1c2UiLAorICAiIC00LCAtLWlwdjQgICAgICAgICAgUmVzb2x2ZSBuYW1lIHRvIElQdjQgYWRkcmVzcyIsCisgICIgLTYsIC0taXB2NiAgICAgICAgICBSZXNvbHZlIG5hbWUgdG8gSVB2NiBhZGRyZXNzIiwKKyAgIiAtaiwgLS1qdW5rLXNlc3Npb24tY29va2llcyBJZ25vcmUgc2Vzc2lvbiBjb29raWVzIHJlYWQgZnJvbSBmaWxlIChIKSIsCisgICIgICAgIC0ta2VlcGFsaXZlLXRpbWUgU0VDT05EUyAgSW50ZXJ2YWwgYmV0d2VlbiBrZWVwYWxpdmUgcHJvYmVzIiwKKyAgIiAgICAgLS1rZXkgS0VZICAgICAgIFByaXZhdGUga2V5IGZpbGUgbmFtZSAoU1NML1NTSCkiLAorICAiICAgICAtLWtleS10eXBlIFRZUEUgUHJpdmF0ZSBrZXkgZmlsZSB0eXBlIChERVIvUEVNL0VORykgKFNTTCkiLAorICAiICAgICAtLWtyYiBMRVZFTCAgICAgRW5hYmxlIEtlcmJlcm9zIHdpdGggc3BlY2lmaWVkIHNlY3VyaXR5IGxldmVsIChGKSIsCisjaWZuZGVmIENVUkxfRElTQUJMRV9MSUJDVVJMX09QVElPTgorICAiICAgICAtLWxpYmN1cmwgRklMRSAgRHVtcCBsaWJjdXJsIGVxdWl2YWxlbnQgY29kZSBvZiB0aGlzIGNvbW1hbmQgbGluZSIsCisjZW5kaWYKKyAgIiAgICAgLS1saW1pdC1yYXRlIFJBVEUgIExpbWl0IHRyYW5zZmVyIHNwZWVkIHRvIHRoaXMgcmF0ZSIsCisgICIgLWwsIC0tbGlzdC1vbmx5ICAgICBMaXN0IG9ubHkgbmFtZXMgb2YgYW4gRlRQIGRpcmVjdG9yeSAoRikiLAorICAiICAgICAtLWxvY2FsLXBvcnQgUkFOR0UgIEZvcmNlIHVzZSBvZiB0aGVzZSBsb2NhbCBwb3J0IG51bWJlcnMiLAorICAiIC1MLCAtLWxvY2F0aW9uICAgICAgRm9sbG93IHJlZGlyZWN0cyAoSCkiLAorICAiICAgICAtLWxvY2F0aW9uLXRydXN0ZWQgbGlrZSAtLWxvY2F0aW9uIGFuZCBzZW5kIGF1dGggdG8gb3RoZXIgaG9zdHMgKEgpIiwKKyAgIiAtTSwgLS1tYW51YWwgICAgICAgIERpc3BsYXkgdGhlIGZ1bGwgbWFudWFsIiwKKyAgIiAgICAgLS1tYWlsLWZyb20gRlJPTSAgTWFpbCBmcm9tIHRoaXMgYWRkcmVzcyIsCisgICIgICAgIC0tbWFpbC1yY3B0IFRPICBNYWlsIHRvIHRoaXMgcmVjZWl2ZXIocykiLAorICAiICAgICAtLW1haWwtYXV0aCBBVVRIICBPcmlnaW5hdG9yIGFkZHJlc3Mgb2YgdGhlIG9yaWdpbmFsIGVtYWlsIiwKKyAgIiAgICAgLS1tYXgtZmlsZXNpemUgQllURVMgIE1heGltdW0gZmlsZSBzaXplIHRvIGRvd25sb2FkIChIL0YpIiwKKyAgIiAgICAgLS1tYXgtcmVkaXJzIE5VTSAgTWF4aW11bSBudW1iZXIgb2YgcmVkaXJlY3RzIGFsbG93ZWQgKEgpIiwKKyAgIiAtbSwgLS1tYXgtdGltZSBTRUNPTkRTICBNYXhpbXVtIHRpbWUgYWxsb3dlZCBmb3IgdGhlIHRyYW5zZmVyIiwKKyAgIiAgICAgLS1uZWdvdGlhdGUgICAgIFVzZSBIVFRQIE5lZ290aWF0ZSBBdXRoZW50aWNhdGlvbiAoSCkiLAorICAiIC1uLCAtLW5ldHJjICAgICAgICAgTXVzdCByZWFkIC5uZXRyYyBmb3IgdXNlciBuYW1lIGFuZCBwYXNzd29yZCIsCisgICIgICAgIC0tbmV0cmMtb3B0aW9uYWwgVXNlIGVpdGhlciAubmV0cmMgb3IgVVJMOyBvdmVycmlkZXMgLW4iLAorICAiICAgICAtLW5ldHJjLWZpbGUgRklMRSAgU2V0IHVwIHRoZSBuZXRyYyBmaWxlbmFtZSB0byB1c2UiLAorICAiIC1OLCAtLW5vLWJ1ZmZlciAgICAgRGlzYWJsZSBidWZmZXJpbmcgb2YgdGhlIG91dHB1dCBzdHJlYW0iLAorICAiICAgICAtLW5vLWtlZXBhbGl2ZSAgRGlzYWJsZSBrZWVwYWxpdmUgdXNlIG9uIHRoZSBjb25uZWN0aW9uIiwKKyAgIiAgICAgLS1uby1zZXNzaW9uaWQgIERpc2FibGUgU1NMIHNlc3Npb24tSUQgcmV1c2luZyAoU1NMKSIsCisgICIgICAgIC0tbm9wcm94eSAgICAgICBMaXN0IG9mIGhvc3RzIHdoaWNoIGRvIG5vdCB1c2UgcHJveHkiLAorICAiICAgICAtLW50bG0gICAgICAgICAgVXNlIEhUVFAgTlRMTSBhdXRoZW50aWNhdGlvbiAoSCkiLAorICAiIC1vLCAtLW91dHB1dCBGSUxFICAgV3JpdGUgb3V0cHV0IHRvIDxmaWxlPiBpbnN0ZWFkIG9mIHN0ZG91dCIsCisgICIgICAgIC0tcGFzcyBQQVNTICAgICBQYXNzIHBocmFzZSBmb3IgdGhlIHByaXZhdGUga2V5IChTU0wvU1NIKSIsCisgICIgICAgIC0tcG9zdDMwMSAgICAgICAiCisgICJEbyBub3Qgc3dpdGNoIHRvIEdFVCBhZnRlciBmb2xsb3dpbmcgYSAzMDEgcmVkaXJlY3QgKEgpIiwKKyAgIiAgICAgLS1wb3N0MzAyICAgICAgICIKKyAgIkRvIG5vdCBzd2l0Y2ggdG8gR0VUIGFmdGVyIGZvbGxvd2luZyBhIDMwMiByZWRpcmVjdCAoSCkiLAorICAiIC0jLCAtLXByb2dyZXNzLWJhciAgRGlzcGxheSB0cmFuc2ZlciBwcm9ncmVzcyBhcyBhIHByb2dyZXNzIGJhciIsCisgICIgICAgIC0tcHJvdG8gUFJPVE9DT0xTICBFbmFibGUvZGlzYWJsZSBzcGVjaWZpZWQgcHJvdG9jb2xzIiwKKyAgIiAgICAgLS1wcm90by1yZWRpciBQUk9UT0NPTFMgICIKKyAgIkVuYWJsZS9kaXNhYmxlIHNwZWNpZmllZCBwcm90b2NvbHMgb24gcmVkaXJlY3QiLAorICAiIC14LCAtLXByb3h5IFtQUk9UT0NPTDovL11IT1NUWzpQT1JUXSBVc2UgcHJveHkgb24gZ2l2ZW4gcG9ydCIsCisgICIgICAgIC0tcHJveHktYW55YXV0aCBQaWNrIFwiYW55XCIgcHJveHkgYXV0aGVudGljYXRpb24gbWV0aG9kIChIKSIsCisgICIgICAgIC0tcHJveHktYmFzaWMgICBVc2UgQmFzaWMgYXV0aGVudGljYXRpb24gb24gdGhlIHByb3h5IChIKSIsCisgICIgICAgIC0tcHJveHktZGlnZXN0ICBVc2UgRGlnZXN0IGF1dGhlbnRpY2F0aW9uIG9uIHRoZSBwcm94eSAoSCkiLAorICAiICAgICAtLXByb3h5LW5lZ290aWF0ZSBVc2UgTmVnb3RpYXRlIGF1dGhlbnRpY2F0aW9uIG9uIHRoZSBwcm94eSAoSCkiLAorICAiICAgICAtLXByb3h5LW50bG0gICAgVXNlIE5UTE0gYXV0aGVudGljYXRpb24gb24gdGhlIHByb3h5IChIKSIsCisgICIgLVUsIC0tcHJveHktdXNlciBVU0VSWzpQQVNTV09SRF0gIFByb3h5IHVzZXIgYW5kIHBhc3N3b3JkIiwKKyAgIiAgICAgLS1wcm94eTEuMCBIT1NUWzpQT1JUXSAgVXNlIEhUVFAvMS4wIHByb3h5IG9uIGdpdmVuIHBvcnQiLAorICAiIC1wLCAtLXByb3h5dHVubmVsICAgT3BlcmF0ZSB0aHJvdWdoIGEgSFRUUCBwcm94eSB0dW5uZWwgKHVzaW5nIENPTk5FQ1QpIiwKKyAgIiAgICAgLS1wdWJrZXkgS0VZICAgIFB1YmxpYyBrZXkgZmlsZSBuYW1lIChTU0gpIiwKKyAgIiAtUSwgLS1xdW90ZSBDTUQgICAgIFNlbmQgY29tbWFuZChzKSB0byBzZXJ2ZXIgYmVmb3JlIHRyYW5zZmVyIChGL1NGVFApIiwKKyAgIiAgICAgLS1yYW5kb20tZmlsZSBGSUxFICBGaWxlIGZvciByZWFkaW5nIHJhbmRvbSBkYXRhIGZyb20gKFNTTCkiLAorICAiIC1yLCAtLXJhbmdlIFJBTkdFICAgUmV0cmlldmUgb25seSB0aGUgYnl0ZXMgd2l0aGluIGEgcmFuZ2UiLAorICAiICAgICAtLXJhdyAgICAgICAgICAgRG8gSFRUUCBcInJhd1wiLCB3aXRob3V0IGFueSB0cmFuc2ZlciBkZWNvZGluZyAoSCkiLAorICAiIC1lLCAtLXJlZmVyZXIgICAgICAgUmVmZXJlciBVUkwgKEgpIiwKKyAgIiAtSiwgLS1yZW1vdGUtaGVhZGVyLW5hbWUgVXNlIHRoZSBoZWFkZXItcHJvdmlkZWQgZmlsZW5hbWUgKEgpIiwKKyAgIiAtTywgLS1yZW1vdGUtbmFtZSAgIFdyaXRlIG91dHB1dCB0byBhIGZpbGUgbmFtZWQgYXMgdGhlIHJlbW90ZSBmaWxlIiwKKyAgIiAgICAgLS1yZW1vdGUtbmFtZS1hbGwgVXNlIHRoZSByZW1vdGUgZmlsZSBuYW1lIGZvciBhbGwgVVJMcyIsCisgICIgLVIsIC0tcmVtb3RlLXRpbWUgICBTZXQgdGhlIHJlbW90ZSBmaWxlJ3MgdGltZSBvbiB0aGUgbG9jYWwgb3V0cHV0IiwKKyAgIiAtWCwgLS1yZXF1ZXN0IENPTU1BTkQgIFNwZWNpZnkgcmVxdWVzdCBjb21tYW5kIHRvIHVzZSIsCisgICIgICAgIC0tcmVzb2x2ZSBIT1NUOlBPUlQ6QUREUkVTUyAgRm9yY2UgcmVzb2x2ZSBvZiBIT1NUOlBPUlQgdG8gQUREUkVTUyIsCisgICIgICAgIC0tcmV0cnkgTlVNICAgIgorICAiUmV0cnkgcmVxdWVzdCBOVU0gdGltZXMgaWYgdHJhbnNpZW50IHByb2JsZW1zIG9jY3VyIiwKKyAgIiAgICAgLS1yZXRyeS1kZWxheSBTRUNPTkRTICIKKyAgIldoZW4gcmV0cnlpbmcsIHdhaXQgdGhpcyBtYW55IHNlY29uZHMgYmV0d2VlbiBlYWNoIiwKKyAgIiAgICAgLS1yZXRyeS1tYXgtdGltZSBTRUNPTkRTICBSZXRyeSBvbmx5IHdpdGhpbiB0aGlzIHBlcmlvZCIsCisgICIgLVMsIC0tc2hvdy1lcnJvciAgICAiCisgICJTaG93IGVycm9yLiBXaXRoIC1zLCBtYWtlIGN1cmwgc2hvdyBlcnJvcnMgd2hlbiB0aGV5IG9jY3VyIiwKKyAgIiAtcywgLS1zaWxlbnQgICAgICAgIFNpbGVudCBtb2RlLiBEb24ndCBvdXRwdXQgYW55dGhpbmciLAorICAiICAgICAtLXNvY2tzNCBIT1NUWzpQT1JUXSAgU09DS1M0IHByb3h5IG9uIGdpdmVuIGhvc3QgKyBwb3J0IiwKKyAgIiAgICAgLS1zb2NrczRhIEhPU1RbOlBPUlRdICBTT0NLUzRhIHByb3h5IG9uIGdpdmVuIGhvc3QgKyBwb3J0IiwKKyAgIiAgICAgLS1zb2NrczUgSE9TVFs6UE9SVF0gIFNPQ0tTNSBwcm94eSBvbiBnaXZlbiBob3N0ICsgcG9ydCIsCisgICIgICAgIC0tc29ja3M1LWhvc3RuYW1lIEhPU1RbOlBPUlRdICIKKyAgIlNPQ0tTNSBwcm94eSwgcGFzcyBob3N0IG5hbWUgdG8gcHJveHkiLAorI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgIiAgICAgLS1zb2NrczUtZ3NzYXBpLXNlcnZpY2UgTkFNRSAgU09DS1M1IHByb3h5IHNlcnZpY2UgbmFtZSBmb3IgZ3NzYXBpIiwKKyAgIiAgICAgLS1zb2NrczUtZ3NzYXBpLW5lYyAgQ29tcGF0aWJpbGl0eSB3aXRoIE5FQyBTT0NLUzUgc2VydmVyIiwKKyNlbmRpZgorICAiIC1ZLCAtLXNwZWVkLWxpbWl0IFJBVEUgICIKKyAgIlN0b3AgdHJhbnNmZXJzIGJlbG93IHNwZWVkLWxpbWl0IGZvciAnc3BlZWQtdGltZScgc2VjcyIsCisgICIgLXksIC0tc3BlZWQtdGltZSBTRUNPTkRTICAiCisgICJUaW1lIGZvciB0cmlnIHNwZWVkLWxpbWl0IGFib3J0LiBEZWZhdWx0cyB0byAzMCIsCisgICIgICAgIC0tc3NsICAgICAgICAgICBUcnkgU1NML1RMUyAoRlRQLCBJTUFQLCBQT1AzLCBTTVRQKSIsCisgICIgICAgIC0tc3NsLXJlcWQgICAgICBSZXF1aXJlIFNTTC9UTFMgKEZUUCwgSU1BUCwgUE9QMywgU01UUCkiLAorICAiIC0yLCAtLXNzbHYyICAgICAgICAgVXNlIFNTTHYyIChTU0wpIiwKKyAgIiAtMywgLS1zc2x2MyAgICAgICAgIFVzZSBTU0x2MyAoU1NMKSIsCisgICIgICAgIC0tc3NsLWFsbG93LWJlYXN0IEFsbG93IHNlY3VyaXR5IGZsYXcgdG8gaW1wcm92ZSBpbnRlcm9wIChTU0wpIiwKKyAgIiAgICAgLS1zdGRlcnIgRklMRSAgIFdoZXJlIHRvIHJlZGlyZWN0IHN0ZGVyci4gLSBtZWFucyBzdGRvdXQiLAorICAiICAgICAtLXRjcC1ub2RlbGF5ICAgVXNlIHRoZSBUQ1BfTk9ERUxBWSBvcHRpb24iLAorICAiIC10LCAtLXRlbG5ldC1vcHRpb24gT1BUPVZBTCAgU2V0IHRlbG5ldCBvcHRpb24iLAorICAiICAgICAtLXRmdHAtYmxrc2l6ZSBWQUxVRSAgU2V0IFRGVFAgQkxLU0laRSBvcHRpb24gKG11c3QgYmUgPjUxMikiLAorICAiIC16LCAtLXRpbWUtY29uZCBUSU1FICBUcmFuc2ZlciBiYXNlZCBvbiBhIHRpbWUgY29uZGl0aW9uIiwKKyAgIiAtMSwgLS10bHN2MSAgICAgICAgIFVzZSBUTFN2MSAoU1NMKSIsCisgICIgICAgIC0tdHJhY2UgRklMRSAgICBXcml0ZSBhIGRlYnVnIHRyYWNlIHRvIHRoZSBnaXZlbiBmaWxlIiwKKyAgIiAgICAgLS10cmFjZS1hc2NpaSBGSUxFICBMaWtlIC0tdHJhY2UgYnV0IHdpdGhvdXQgdGhlIGhleCBvdXRwdXQiLAorICAiICAgICAtLXRyYWNlLXRpbWUgICAgQWRkIHRpbWUgc3RhbXBzIHRvIHRyYWNlL3ZlcmJvc2Ugb3V0cHV0IiwKKyAgIiAgICAgLS10ci1lbmNvZGluZyAgIFJlcXVlc3QgY29tcHJlc3NlZCB0cmFuc2ZlciBlbmNvZGluZyAoSCkiLAorICAiIC1ULCAtLXVwbG9hZC1maWxlIEZJTEUgIFRyYW5zZmVyIEZJTEUgdG8gZGVzdGluYXRpb24iLAorICAiICAgICAtLXVybCBVUkwgICAgICAgVVJMIHRvIHdvcmsgd2l0aCIsCisgICIgLUIsIC0tdXNlLWFzY2lpICAgICBVc2UgQVNDSUkvdGV4dCB0cmFuc2ZlciIsCisgICIgLXUsIC0tdXNlciBVU0VSWzpQQVNTV09SRF0gIFNlcnZlciB1c2VyIGFuZCBwYXNzd29yZCIsCisgICIgICAgIC0tdGxzdXNlciBVU0VSICBUTFMgdXNlcm5hbWUiLAorICAiICAgICAtLXRsc3Bhc3N3b3JkIFNUUklORyBUTFMgcGFzc3dvcmQiLAorICAiICAgICAtLXRsc2F1dGh0eXBlIFNUUklORyAgVExTIGF1dGhlbnRpY2F0aW9uIHR5cGUgKGRlZmF1bHQgU1JQKSIsCisgICIgLUEsIC0tdXNlci1hZ2VudCBTVFJJTkcgIFVzZXItQWdlbnQgdG8gc2VuZCB0byBzZXJ2ZXIgKEgpIiwKKyAgIiAtdiwgLS12ZXJib3NlICAgICAgIE1ha2UgdGhlIG9wZXJhdGlvbiBtb3JlIHRhbGthdGl2ZSIsCisgICIgLVYsIC0tdmVyc2lvbiAgICAgICBTaG93IHZlcnNpb24gbnVtYmVyIGFuZCBxdWl0IiwKKyNpZmRlZiBVU0VfV0FUVDMyCisgICIgICAgIC0td2RlYnVnICAgICAgICBUdXJuIG9uIFdhdHQtMzIgZGVidWdnaW5nIiwKKyNlbmRpZgorICAiIC13LCAtLXdyaXRlLW91dCBGT1JNQVQgIFdoYXQgdG8gb3V0cHV0IGFmdGVyIGNvbXBsZXRpb24iLAorICAiICAgICAtLXhhdHRyICAgICAgICBTdG9yZSBtZXRhZGF0YSBpbiBleHRlbmRlZCBmaWxlIGF0dHJpYnV0ZXMiLAorICAiIC1xICAgICAgICAgICAgICAgICBJZiB1c2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgZGlzYWJsZXMgLmN1cmxyYyIsCisgIE5VTEwKK307CisKKyNpZmRlZiBORVRXQVJFCisjICBkZWZpbmUgUFJJTlRfTElORVNfUEFVU0UgMjMKKyNlbmRpZgorCisjaWZkZWYgX19TWU1CSUFOMzJfXworIyAgZGVmaW5lIFBSSU5UX0xJTkVTX1BBVVNFIDE2CisjZW5kaWYKKwordm9pZCB0b29sX2hlbHAodm9pZCkKK3sKKyAgaW50IGk7CisgIGZvcihpID0gMDsgaGVscHRleHRbaV07IGkrKykgeworICAgIHB1dHMoaGVscHRleHRbaV0pOworI2lmZGVmIFBSSU5UX0xJTkVTX1BBVVNFCisgICAgaWYoaSAmJiAoKGkgJSBQUklOVF9MSU5FU19QQVVTRSkgPT0gMCkpCisgICAgICB0b29sX3ByZXNzYW55a2V5KCk7CisjZW5kaWYKKyAgfQorfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9oZWxwLmggYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9oZWxwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2NjQxMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2hlbHAuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfSEVMUF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfSEVMUF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCit2b2lkIHRvb2xfaGVscCh2b2lkKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfSEVMUF9IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX2hlbHBlcnMuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2hlbHBlcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjM3MTc4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfaGVscGVycy5jCkBAIC0wLDAgKzEsNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2luY2x1ZGUgInJhd3N0ci5oIgorCisjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKKy8qIHVzZSBvdXIgb3duIHByaW50ZigpIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgImN1cmx4LmgiCisKKyNpbmNsdWRlICJ0b29sX2NmZ2FibGUuaCIKKyNpbmNsdWRlICJ0b29sX21zZ3MuaCIKKyNpbmNsdWRlICJ0b29sX2dldHBhcmFtLmgiCisjaW5jbHVkZSAidG9vbF9oZWxwZXJzLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKKy8qCisqKiBIZWxwZXIgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgZnJvbSBtb3JlIHRoYSBvbmUgc291cmNlIGZpbGUuCisqLworCitjb25zdCBjaGFyICpwYXJhbTJ0ZXh0KGludCByZXMpCit7CisgIFBhcmFtZXRlckVycm9yIGVycm9yID0gKFBhcmFtZXRlckVycm9yKXJlczsKKyAgc3dpdGNoKGVycm9yKSB7CisgIGNhc2UgUEFSQU1fR09UX0VYVFJBX1BBUkFNRVRFUjoKKyAgICByZXR1cm4gImhhZCB1bnN1cHBvcnRlZCB0cmFpbGluZyBnYXJiYWdlIjsKKyAgY2FzZSBQQVJBTV9PUFRJT05fVU5LTk9XTjoKKyAgICByZXR1cm4gImlzIHVua25vd24iOworICBjYXNlIFBBUkFNX09QVElPTl9BTUJJR1VPVVM6CisgICAgcmV0dXJuICJpcyBhbWJpZ3VvdXMiOworICBjYXNlIFBBUkFNX1JFUVVJUkVTX1BBUkFNRVRFUjoKKyAgICByZXR1cm4gInJlcXVpcmVzIHBhcmFtZXRlciI7CisgIGNhc2UgUEFSQU1fQkFEX1VTRToKKyAgICByZXR1cm4gImlzIGJhZGx5IHVzZWQgaGVyZSI7CisgIGNhc2UgUEFSQU1fQkFEX05VTUVSSUM6CisgICAgcmV0dXJuICJleHBlY3RlZCBhIHByb3BlciBudW1lcmljYWwgcGFyYW1ldGVyIjsKKyAgY2FzZSBQQVJBTV9MSUJDVVJMX0RPRVNOVF9TVVBQT1JUOgorICAgIHJldHVybiAidGhlIGluc3RhbGxlZCBsaWJjdXJsIHZlcnNpb24gZG9lc24ndCBzdXBwb3J0IHRoaXMiOworICBjYXNlIFBBUkFNX05PX01FTToKKyAgICByZXR1cm4gIm91dCBvZiBtZW1vcnkiOworICBkZWZhdWx0OgorICAgIHJldHVybiAidW5rbm93biBlcnJvciI7CisgIH0KK30KKworaW50IFNldEhUVFByZXF1ZXN0KHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZywgSHR0cFJlcSByZXEsIEh0dHBSZXEgKnN0b3JlKQoreworICBpZigoKnN0b3JlID09IEhUVFBSRVFfVU5TUEVDKSB8fAorICAgICAoKnN0b3JlID09IHJlcSkpIHsKKyAgICAqc3RvcmUgPSByZXE7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgd2FybmYoY29uZmlnLCAiWW91IGNhbiBvbmx5IHNlbGVjdCBvbmUgSFRUUCByZXF1ZXN0IVxuIik7CisgIHJldHVybiAxOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9oZWxwZXJzLmggYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9oZWxwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4NWJmYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2hlbHBlcnMuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfSEVMUEVSU19ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfSEVMUEVSU19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCitjb25zdCBjaGFyICpwYXJhbTJ0ZXh0KGludCByZXMpOworCitpbnQgU2V0SFRUUHJlcXVlc3Qoc3RydWN0IENvbmZpZ3VyYWJsZSAqY29uZmlnLCBIdHRwUmVxIHJlcSwgSHR0cFJlcSAqc3RvcmUpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVE9PTF9IRUxQRVJTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfaG9tZWRpci5jIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfaG9tZWRpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDI1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9ob21lZGlyLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX1BXRF9ICisjICBpbmNsdWRlIDxwd2QuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgX19WTVMKKyMgIGluY2x1ZGUgPHVuaXhsaWIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAidG9vbF9ob21lZGlyLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKK3N0YXRpYyBjaGFyICpHZXRFbnYoY29uc3QgY2hhciAqdmFyaWFibGUsIGNoYXIgZG9fZXhwYW5kKQoreworICBjaGFyICplbnYgPSBOVUxMOworI2lmZGVmIFdJTjMyCisgIGNoYXIgIGJ1ZjFbMTAyNF0sIGJ1ZjJbMTAyNF07CisgIERXT1JEIHJjOworCisgIC8qIERvbid0IHVzZSBnZXRlbnYoKTsgaXQgZG9lc24ndCBmaW5kIHZhcmlhYmxlIGFkZGVkIGFmdGVyIHByb2dyYW0gd2FzCisgICAqIHN0YXJ0ZWQuIERvbid0IGFjY2VwdCB0cnVuY2F0ZWQgcmVzdWx0cyAoaS5lLiByYyA+PSBzaXplb2YoYnVmMSkpLiAgKi8KKworICByYyA9IEdldEVudmlyb25tZW50VmFyaWFibGUodmFyaWFibGUsIGJ1ZjEsIHNpemVvZihidWYxKSk7CisgIGlmKHJjID4gMCAmJiByYyA8IHNpemVvZihidWYxKSkgeworICAgIGVudiA9IGJ1ZjE7CisgICAgdmFyaWFibGUgPSBidWYxOworICB9CisgIGlmKGRvX2V4cGFuZCAmJiBzdHJjaHIodmFyaWFibGUsJyUnKSkgeworICAgIC8qIGJ1ZjIgPT0gdmFyaWFibGUgaWYgbm90IGV4cGFuZGVkICovCisgICAgcmMgPSBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MgKHZhcmlhYmxlLCBidWYyLCBzaXplb2YoYnVmMikpOworICAgIGlmKHJjID4gMCAmJiByYyA8IHNpemVvZihidWYyKSAmJgorICAgICAgICFzdHJjaHIoYnVmMiwnJScpKSAgICAvKiBubyB2YXJzIHN0aWxsIHVuZXhwYW5kZWQgKi8KKyAgICAgIGVudiA9IGJ1ZjI7CisgIH0KKyNlbHNlCisgICh2b2lkKWRvX2V4cGFuZDsKKyNpZmRlZiBfX1ZNUworICBlbnYgPSBnZXRlbnYodmFyaWFibGUpOworICBpZihlbnYgJiYgc3RyY21wKCJIT01FIix2YXJpYWJsZSkgPT0gMCkgeworICAgIGVudiA9IGRlY2NfdHJhbnNsYXRlX3ZtcyhlbnYpOworICB9CisjZWxzZQorICAvKiBubyBsZW5ndGggY29udHJvbCAqLworICBlbnYgPSBnZXRlbnYodmFyaWFibGUpOworI2VuZGlmCisjZW5kaWYKKyAgcmV0dXJuIChlbnYgJiYgZW52WzBdKSA/IHN0cmR1cChlbnYpIDogTlVMTDsKK30KKworLyogcmV0dXJuIHRoZSBob21lIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCB1c2VyIGFzIGFuIGFsbG9jYXRlZCBzdHJpbmcgKi8KK2NoYXIgKmhvbWVkaXIodm9pZCkKK3sKKyAgY2hhciAqaG9tZTsKKworICBob21lID0gR2V0RW52KCJDVVJMX0hPTUUiLCBGQUxTRSk7CisgIGlmKGhvbWUpCisgICAgcmV0dXJuIGhvbWU7CisKKyAgaG9tZSA9IEdldEVudigiSE9NRSIsIEZBTFNFKTsKKyAgaWYoaG9tZSkKKyAgICByZXR1cm4gaG9tZTsKKworI2lmIGRlZmluZWQoSEFWRV9HRVRQV1VJRCkgJiYgZGVmaW5lZChIQVZFX0dFVEVVSUQpCisgeworICAgc3RydWN0IHBhc3N3ZCAqcHcgPSBnZXRwd3VpZChnZXRldWlkKCkpOworCisgICBpZihwdykgeworI2lmZGVmIF9fVk1TCisgICAgIGhvbWUgPSBkZWNjX3RyYW5zbGF0ZV92bXMocHctPnB3X2Rpcik7CisjZWxzZQorICAgICBob21lID0gcHctPnB3X2RpcjsKKyNlbmRpZgorICAgICBpZihob21lICYmIGhvbWVbMF0pCisgICAgICAgaG9tZSA9IHN0cmR1cChob21lKTsKKyAgICAgZWxzZQorICAgICAgIGhvbWUgPSBOVUxMOworICAgfQorIH0KKyNlbmRpZiAvKiBQV0Qtc3R1ZmYgKi8KKyNpZmRlZiBXSU4zMgorICBob21lID0gR2V0RW52KCJBUFBEQVRBIiwgVFJVRSk7CisgIGlmKCFob21lKQorICAgIGhvbWUgPSBHZXRFbnYoIiVVU0VSUFJPRklMRSVcXEFwcGxpY2F0aW9uIERhdGEiLCBUUlVFKTsgLyogTm9ybWFsbHkgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gV2luLTJLL1hQICovCisjZW5kaWYgLyogV0lOMzIgKi8KKyAgcmV0dXJuIGhvbWU7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9ob21lZGlyLmggYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9ob21lZGlyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5YzFmMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2hvbWVkaXIuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfSE9NRURJUl9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfSE9NRURJUl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCitjaGFyICpob21lZGlyKHZvaWQpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVE9PTF9IT01FRElSX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX2xpYmluZm8uYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2xpYmluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY5Yzg4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfbGliaW5mby5jCkBAIC0wLDAgKzEsMTAyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpbmNsdWRlICJyYXdzdHIuaCIKKworI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCisvKiB1c2Ugb3VyIG93biBwcmludGYoKSBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJjdXJseC5oIgorCisjaW5jbHVkZSAidG9vbF9saWJpbmZvLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKKy8qIGdsb2JhbCB2YXJpYWJsZSBkZWZpbml0aW9ucywgZm9yIGxpYmN1cmwgcnVuLXRpbWUgaW5mbyAqLworCitjdXJsX3ZlcnNpb25faW5mb19kYXRhICpjdXJsaW5mbyA9IE5VTEw7Citsb25nIGJ1aWx0X2luX3Byb3RvcyA9IDA7CisKKy8qCisgKiBsaWJjdXJsX2luZm9faW5pdDogcmV0cmlldmVzIHJ1bi10aW1lIGluZm9ybWF0aW9uIGFib3V0IGxpYmN1cmwsCisgKiBzZXR0aW5nIGEgZ2xvYmFsIHBvaW50ZXIgJ2N1cmxpbmZvJyB0byBsaWJjdXJsJ3MgcnVuLXRpbWUgaW5mbworICogc3RydWN0LCBhbmQgYSBnbG9iYWwgYml0IHBhdHRlcm4gJ2J1aWx0X2luX3Byb3RvcycgY29tcG9zZWQgb2YKKyAqIENVUkxQUk9UT18qIGJpdHMgaW5kaWNhdGluZyB3aGljaCBwcm90b2NvbHMgYXJlIGFjdHVhbGx5IGJ1aWx0CisgKiBpbnRvIGxpYnJhcnkgYmVpbmcgdXNlZC4KKyAqLworCitDVVJMY29kZSBnZXRfbGliY3VybF9pbmZvKHZvaWQpCit7CisgIHN0YXRpYyBzdHJ1Y3QgcHJvdG9fbmFtZV9wYXR0ZXJuIHsKKyAgICBjb25zdCBjaGFyICpwcm90b19uYW1lOworICAgIGxvbmcgICAgICAgIHByb3RvX3BhdHRlcm47CisgIH0gY29uc3QgcG9zc2libHlfYnVpbHRfaW5bXSA9IHsKKyAgICB7ICJkaWN0IiwgICBDVVJMUFJPVE9fRElDVCAgIH0sCisgICAgeyAiZmlsZSIsICAgQ1VSTFBST1RPX0ZJTEUgICB9LAorICAgIHsgImZ0cCIsICAgIENVUkxQUk9UT19GVFAgICAgfSwKKyAgICB7ICJmdHBzIiwgICBDVVJMUFJPVE9fRlRQUyAgIH0sCisgICAgeyAiZ29waGVyIiwgQ1VSTFBST1RPX0dPUEhFUiB9LAorICAgIHsgImh0dHAiLCAgIENVUkxQUk9UT19IVFRQICAgfSwKKyAgICB7ICJodHRwcyIsICBDVVJMUFJPVE9fSFRUUFMgIH0sCisgICAgeyAiaW1hcCIsICAgQ1VSTFBST1RPX0lNQVAgICB9LAorICAgIHsgImltYXBzIiwgIENVUkxQUk9UT19JTUFQUyAgfSwKKyAgICB7ICJsZGFwIiwgICBDVVJMUFJPVE9fTERBUCAgIH0sCisgICAgeyAibGRhcHMiLCAgQ1VSTFBST1RPX0xEQVBTICB9LAorICAgIHsgInBvcDMiLCAgIENVUkxQUk9UT19QT1AzICAgfSwKKyAgICB7ICJwb3AzcyIsICBDVVJMUFJPVE9fUE9QM1MgIH0sCisgICAgeyAicnRtcCIsICAgQ1VSTFBST1RPX1JUTVAgICB9LAorICAgIHsgInJ0c3AiLCAgIENVUkxQUk9UT19SVFNQICAgfSwKKyAgICB7ICJzY3AiLCAgICBDVVJMUFJPVE9fU0NQICAgIH0sCisgICAgeyAic2Z0cCIsICAgQ1VSTFBST1RPX1NGVFAgICB9LAorICAgIHsgInNtdHAiLCAgIENVUkxQUk9UT19TTVRQICAgfSwKKyAgICB7ICJzbXRwcyIsICBDVVJMUFJPVE9fU01UUFMgIH0sCisgICAgeyAidGVsbmV0IiwgQ1VSTFBST1RPX1RFTE5FVCB9LAorICAgIHsgInRmdHAiLCAgIENVUkxQUk9UT19URlRQICAgfSwKKyAgICB7ICBOVUxMLCAgICAwICAgICAgICAgICAgICAgIH0KKyAgfTsKKworICBzdHJ1Y3QgcHJvdG9fbmFtZV9wYXR0ZXJuIGNvbnN0ICpwOworICBjb25zdCBjaGFyICpjb25zdCAqcHJvdG87CisKKyAgLyogUG9pbnRlciB0byBsaWJjdXJsJ3MgcnVuLXRpbWUgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICBjdXJsaW5mbyA9IGN1cmxfdmVyc2lvbl9pbmZvKENVUkxWRVJTSU9OX05PVyk7CisgIGlmKCFjdXJsaW5mbykKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisKKyAgLyogQnVpbGQgQ1VSTFBST1RPXyogYml0IHBhdHRlcm4gd2l0aCBsaWJjdXJsJ3MgYnVpbHQtaW4gcHJvdG9jb2xzICovCisgIGJ1aWx0X2luX3Byb3RvcyA9IDA7CisgIGlmKGN1cmxpbmZvLT5wcm90b2NvbHMpIHsKKyAgICBmb3IocHJvdG8gPSBjdXJsaW5mby0+cHJvdG9jb2xzOyAqcHJvdG87IHByb3RvKyspIHsKKyAgICAgIGZvcihwID0gcG9zc2libHlfYnVpbHRfaW47IHAtPnByb3RvX25hbWU7IHArKykgeworICAgICAgICBpZihjdXJseF9yYXdfZXF1YWwoKnByb3RvLCBwLT5wcm90b19uYW1lKSkgeworICAgICAgICAgIGJ1aWx0X2luX3Byb3RvcyB8PSBwLT5wcm90b19wYXR0ZXJuOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9saWJpbmZvLmggYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9saWJpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZkZjc4YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX2xpYmluZm8uaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfTElCSU5GT19ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfTElCSU5GT19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisvKiBnbG9iYWwgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBmb3IgbGliY3VybCBydW4tdGltZSBpbmZvICovCisKK2V4dGVybiBjdXJsX3ZlcnNpb25faW5mb19kYXRhICpjdXJsaW5mbzsKK2V4dGVybiBsb25nIGJ1aWx0X2luX3Byb3RvczsKKworQ1VSTGNvZGUgZ2V0X2xpYmN1cmxfaW5mbyh2b2lkKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfTElCSU5GT19IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX21haW4uYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njc4MGM3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfbWFpbi5jCkBAIC0wLDAgKzEsMTEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCisvKiB1c2Ugb3VyIG93biBwcmludGYoKSBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJjdXJseC5oIgorCisjaW5jbHVkZSAidG9vbF9jZmdhYmxlLmgiCisjaW5jbHVkZSAidG9vbF9jb252ZXJ0LmgiCisjaW5jbHVkZSAidG9vbF9vcGVyYXRlLmgiCisjaW5jbHVkZSAidG9vbF9wYW55a2V5LmgiCisjaW5jbHVkZSAidG9vbF92bXMuaCIKKyNpbmNsdWRlICJ0b29sX21haW4uaCIKKworLyoKKyAqIFRoaXMgaXMgbG93LWxldmVsIGhhcmQtaGFja2luZyBtZW1vcnkgbGVhayB0cmFja2luZyBhbmQgc2ltaWxhci4gVXNpbmcKKyAqIHRoZSBsaWJyYXJ5IGxldmVsIGNvZGUgZnJvbSB0aGlzIGNsaWVudC1zaWRlIGlzIHVnbHksIGJ1dCB3ZSBkbyB0aGlzCisgKiBhbnl3YXkgZm9yIGNvbnZlbmllbmNlLgorICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCisjaWZkZWYgX19WTVMKK3N0YXRpYyBpbnQgdm1zX3Nob3cgPSAwOworI2VuZGlmCisKKy8qCisgKiBFbnN1cmUgdGhhdCBmaWxlIGRlc2NyaXB0b3JzIDAsIDEgYW5kIDIgKHN0ZGluLCBzdGRvdXQsIHN0ZGVycikgYXJlCisgKiBvcGVuIGJlZm9yZSBzdGFydGluZyB0byBydW4uICBPdGhlcndpc2UsIHRoZSBmaXJzdCB0aHJlZSBuZXR3b3JrCisgKiBzb2NrZXRzIG9wZW5lZCBieSBjdXJsIGNvdWxkIGJlIHVzZWQgZm9yIGlucHV0IHNvdXJjZXMsIGRvd25sb2FkZWQgZGF0YQorICogb3IgZXJyb3IgbG9ncyBhcyB0aGV5IHdpbGwgZWZmZWN0aXZlbHkgYmUgc3RkaW4sIHN0ZG91dCBhbmQvb3Igc3RkZXJyLgorICovCitzdGF0aWMgdm9pZCBtYWluX2NoZWNrZmRzKHZvaWQpCit7CisjaWZkZWYgSEFWRV9QSVBFCisgIGludCBmZFsyXSA9IHsgU1RESU5fRklMRU5PLCBTVERJTl9GSUxFTk8gfTsKKyAgd2hpbGUoZmRbMF0gPT0gU1RESU5fRklMRU5PIHx8CisgICAgICAgIGZkWzBdID09IFNURE9VVF9GSUxFTk8gfHwKKyAgICAgICAgZmRbMF0gPT0gU1RERVJSX0ZJTEVOTyB8fAorICAgICAgICBmZFsxXSA9PSBTVERJTl9GSUxFTk8gfHwKKyAgICAgICAgZmRbMV0gPT0gU1RET1VUX0ZJTEVOTyB8fAorICAgICAgICBmZFsxXSA9PSBTVERFUlJfRklMRU5PKQorICAgIGlmKHBpcGUoZmQpIDwgMCkKKyAgICAgIHJldHVybjsgICAvKiBPdXQgb2YgaGFuZGxlcy4gVGhpcyBpc24ndCByZWFsbHkgYSBiaWcgcHJvYmxlbSBub3csIGJ1dAorICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgd2hlbiB3ZSB0cnkgdG8gY3JlYXRlIGEgc29ja2V0IGxhdGVyLiAqLworICBjbG9zZShmZFswXSk7CisgIGNsb3NlKGZkWzFdKTsKKyNlbmRpZgorfQorCisvKgorKiogY3VybCB0b29sIG1haW4gZnVuY3Rpb24uCisqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgaW50IHJlczsKKyAgc3RydWN0IENvbmZpZ3VyYWJsZSBjb25maWc7CisKKyAgbWVtc2V0KCZjb25maWcsIDAsIHNpemVvZihzdHJ1Y3QgQ29uZmlndXJhYmxlKSk7CisKKyAgY29uZmlnLmVycm9ycyA9IHN0ZGVycjsgLyogZGVmYXVsdCBlcnJvcnMgdG8gc3RkZXJyICovCisKKyAgbWFpbl9jaGVja2ZkcygpOworCisgIHJlcyA9IG9wZXJhdGUoJmNvbmZpZywgYXJnYywgYXJndik7CisKKyNpZmRlZiBfX1NZTUJJQU4zMl9fCisgIGlmKGNvbmZpZy5zaG93ZXJyb3IpCisgICAgdG9vbF9wcmVzc2FueWtleSgpOworI2VuZGlmCisKKyAgZnJlZV9jb25maWdfZmllbGRzKCZjb25maWcpOworCisjaWZkZWYgX19OT1ZFTExfTElCQ19fCisgIGlmKGdldGVudigiX0lOX05FVFdBUkVfQkFTSF8iKSA9PSBOVUxMKQorICAgIHRvb2xfcHJlc3NhbnlrZXkoKTsKKyNlbmRpZgorCisjaWZkZWYgX19WTVMKKyAgdm1zX3NwZWNpYWxfZXhpdChyZXMsIHZtc19zaG93KTsKKyNlbHNlCisgIHJldHVybiByZXM7CisjZW5kaWYKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfbWFpbi5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTNjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9tYWluLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9UT09MX01BSU5fSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX01BSU5fSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2RlZmluZSBERUZBVUxUX01BWFJFRElSUyAgNTBMCisKKyNkZWZpbmUgUkVUUllfU0xFRVBfREVGQVVMVCAxMDAwTCAgIC8qIG1zICovCisjZGVmaW5lIFJFVFJZX1NMRUVQX01BWCAgICAgNjAwMDAwTCAvKiBtcyA9PSAxMCBtaW51dGVzICovCisKKyNpZm5kZWYgU1RESU5fRklMRU5PCisjICBkZWZpbmUgU1RESU5fRklMRU5PICBmaWxlbm8oc3RkaW4pCisjZW5kaWYKKworI2lmbmRlZiBTVERPVVRfRklMRU5PCisjICBkZWZpbmUgU1RET1VUX0ZJTEVOTyAgZmlsZW5vKHN0ZG91dCkKKyNlbmRpZgorCisjaWZuZGVmIFNUREVSUl9GSUxFTk8KKyMgIGRlZmluZSBTVERFUlJfRklMRU5PICBmaWxlbm8oc3RkZXJyKQorI2VuZGlmCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9UT09MX01BSU5fSCAqLworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9tZmlsZXMuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX21maWxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZWRiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9tZmlsZXMuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisjaW5jbHVkZSAidG9vbF9tZmlsZXMuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiIC8qIGtlZXAgdGhpcyBhcyBMQVNUIGluY2x1ZGUgKi8KKworc3RhdGljIHZvaWQgQXBwZW5kTm9kZShzdHJ1Y3QgbXVsdGlfZmlsZXMgKipmaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG11bHRpX2ZpbGVzICoqbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG11bHRpX2ZpbGVzICAqbmV3KQoreworICBERUJVR0FTU0VSVCgoKCpmaXJzdCkgJiYgKCpsYXN0KSkgfHwgKCghKmZpcnN0KSAmJiAoISpsYXN0KSkpOworCisgIGlmKCpsYXN0KQorICAgICgqbGFzdCktPm5leHQgPSBuZXc7CisgIGVsc2UKKyAgICAqZmlyc3QgPSBuZXc7CisgICpsYXN0ID0gbmV3OworfQorCisvKgorICogQWRkTXVsdGlGaWxlczogQWRkIGEgbmV3IGxpc3Qgbm9kZSBwb3NzaWJseSBmb2xsb3dlZCB3aXRoIGEgdHlwZV9uYW1lLgorICoKKyAqIG11bHRpX2ZpcnN0IGFyZ3VtZW50IGlzIHRoZSBhZGRyZXNzIG9mIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgZWxlbWVudAorICogb2YgdGhlIG11bHRpX2ZpbGVzIGxpbmtlZCBsaXN0LiBBIE5VTEwgcG9pbnRlciBpbmRpY2F0ZXMgZW1wdHkgbGlzdC4KKyAqCisgKiBtdWx0aV9sYXN0IGFyZ3VtZW50IGlzIHRoZSBhZGRyZXNzIG9mIGEgcG9pbnRlciB0byB0aGUgbGFzdCBlbGVtZW50CisgKiBvZiB0aGUgbXVsdGlfZmlsZXMgbGlua2VkIGxpc3QuIEEgTlVMTCBwb2ludGVyIGluZGljYXRlcyBlbXB0eSBsaXN0LgorICoKKyAqIFBvaW50ZXJzIHN0b3JlZCBpbiBtdWx0aV9maXJzdCBhbmQgbXVsdGlfbGFzdCBhcmUgbW9kaWZpZWQgd2hpbGUKKyAqIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLiBBbiBvdXQgb2YgbWVtb3J5IGNvbmRpdGlvbiBmcmVlJ3MgdGhlIHdob2xlCisgKiBsaXN0IGFuZCByZXR1cm5zIHdpdGggcG9pbnRlcnMgc3RvcmVkIGluIG11bHRpX2ZpcnN0IGFuZCBtdWx0aV9sYXN0CisgKiBzZXQgdG8gTlVMTCBhbmQgYSBOVUxMIGZ1bmN0aW9uIHJlc3VsdC4KKyAqCisgKiBGdW5jdGlvbiByZXR1cm5zIHNhbWUgcG9pbnRlciBhcyBzdG9yZWQgYXQgbXVsdGlfbGFzdC4KKyAqLworCitzdHJ1Y3QgbXVsdGlfZmlsZXMgKkFkZE11bHRpRmlsZXMoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR5cGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzaG93X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdWx0aV9maWxlcyAqKm11bHRpX2ZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdWx0aV9maWxlcyAqKm11bHRpX2xhc3QpCit7CisgIHN0cnVjdCBtdWx0aV9maWxlcyAqbXVsdGk7CisgIHN0cnVjdCBtdWx0aV9maWxlcyAqbXVsdGlfdHlwZTsKKyAgc3RydWN0IG11bHRpX2ZpbGVzICptdWx0aV9uYW1lOworCisgIG11bHRpID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbXVsdGlfZmlsZXMpKTsKKyAgaWYobXVsdGkpIHsKKyAgICBtdWx0aS0+Zm9ybS5vcHRpb24gPSBDVVJMRk9STV9GSUxFOworICAgIG11bHRpLT5mb3JtLnZhbHVlID0gZmlsZV9uYW1lOworICAgIEFwcGVuZE5vZGUobXVsdGlfZmlyc3QsIG11bHRpX2xhc3QsIG11bHRpKTsKKyAgfQorICBlbHNlIHsKKyAgICBGcmVlTXVsdGlJbmZvKG11bHRpX2ZpcnN0LCBtdWx0aV9sYXN0KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGlmKHR5cGVfbmFtZSkgeworICAgIG11bHRpX3R5cGUgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBtdWx0aV9maWxlcykpOworICAgIGlmKG11bHRpX3R5cGUpIHsKKyAgICAgIG11bHRpX3R5cGUtPmZvcm0ub3B0aW9uID0gQ1VSTEZPUk1fQ09OVEVOVFRZUEU7CisgICAgICBtdWx0aV90eXBlLT5mb3JtLnZhbHVlID0gdHlwZV9uYW1lOworICAgICAgQXBwZW5kTm9kZShtdWx0aV9maXJzdCwgbXVsdGlfbGFzdCwgbXVsdGlfdHlwZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgRnJlZU11bHRpSW5mbyhtdWx0aV9maXJzdCwgbXVsdGlfbGFzdCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0KKworICBpZihzaG93X2ZpbGVuYW1lKSB7CisgICAgbXVsdGlfbmFtZSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG11bHRpX2ZpbGVzKSk7CisgICAgaWYobXVsdGlfbmFtZSkgeworICAgICAgbXVsdGlfbmFtZS0+Zm9ybS5vcHRpb24gPSBDVVJMRk9STV9GSUxFTkFNRTsKKyAgICAgIG11bHRpX25hbWUtPmZvcm0udmFsdWUgPSBzaG93X2ZpbGVuYW1lOworICAgICAgQXBwZW5kTm9kZShtdWx0aV9maXJzdCwgbXVsdGlfbGFzdCwgbXVsdGlfbmFtZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgRnJlZU11bHRpSW5mbyhtdWx0aV9maXJzdCwgbXVsdGlfbGFzdCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0KKworICByZXR1cm4gKm11bHRpX2xhc3Q7Cit9CisKKy8qCisgKiBGcmVlTXVsdGlJbmZvOiBGcmVlIHRoZSBpdGVtcyBvZiB0aGUgbGlzdC4KKyAqLworCit2b2lkIEZyZWVNdWx0aUluZm8oc3RydWN0IG11bHRpX2ZpbGVzICoqbXVsdGlfZmlyc3QsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IG11bHRpX2ZpbGVzICoqbXVsdGlfbGFzdCkKK3sKKyAgc3RydWN0IG11bHRpX2ZpbGVzICpuZXh0OworICBzdHJ1Y3QgbXVsdGlfZmlsZXMgKml0ZW0gPSAqbXVsdGlfZmlyc3Q7CisKKyAgd2hpbGUoaXRlbSkgeworICAgIG5leHQgPSBpdGVtLT5uZXh0OworICAgIEN1cmxfc2FmZWZyZWUoaXRlbSk7CisgICAgaXRlbSA9IG5leHQ7CisgIH0KKyAgKm11bHRpX2ZpcnN0ID0gTlVMTDsKKyAgaWYobXVsdGlfbGFzdCkKKyAgICAqbXVsdGlfbGFzdCA9IE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX21maWxlcy5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfbWZpbGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEzYjUzOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX21maWxlcy5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfVE9PTF9NRklMRVNfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX01GSUxFU19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisvKgorICogU3RydWN0dXJlIGZvciBzdG9yaW5nIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYnVpbGQKKyAqIGEgbXVsdGlwbGUgZmlsZXMgc2VjdGlvbi4KKyAqLworCitzdHJ1Y3QgbXVsdGlfZmlsZXMgeworICBzdHJ1Y3QgY3VybF9mb3JtcyAgIGZvcm07CisgIHN0cnVjdCBtdWx0aV9maWxlcyAqbmV4dDsKK307CisKK3N0cnVjdCBtdWx0aV9maWxlcyAqQWRkTXVsdGlGaWxlcyhjb25zdCBjaGFyICpmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdHlwZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNob3dfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG11bHRpX2ZpbGVzICoqbXVsdGlfZmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG11bHRpX2ZpbGVzICoqbXVsdGlfbGFzdCk7CisKK3ZvaWQgRnJlZU11bHRpSW5mbyhzdHJ1Y3QgbXVsdGlfZmlsZXMgKiptdWx0aV9maXJzdCwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXVsdGlfZmlsZXMgKiptdWx0aV9sYXN0KTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfTUZJTEVTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfbXNncy5jIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfbXNncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTgwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9tc2dzLmMKQEAgLTAsMCArMSwxMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNkZWZpbmUgRU5BQkxFX0NVUkxYX1BSSU5URgorLyogdXNlIG91ciBvd24gcHJpbnRmKCkgZnVuY3Rpb25zICovCisjaW5jbHVkZSAiY3VybHguaCIKKworI2luY2x1ZGUgInRvb2xfY2ZnYWJsZS5oIgorI2luY2x1ZGUgInRvb2xfbXNncy5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCisjZGVmaW5lIFdBUk5fUFJFRklYICJXYXJuaW5nOiAiCisjZGVmaW5lIFdBUk5fVEVYVFdJRFRIICg3OSAtIChpbnQpc3RybGVuKFdBUk5fUFJFRklYKSkKKworLyoKKyAqIEVtaXQgd2FybmluZyBmb3JtYXR0ZWQgbWVzc2FnZSBvbiBjb25maWd1cmVkICdlcnJvcnMnIHN0cmVhbSB1bmxlc3MKKyAqIG11dGUgKC0tc2lsZW50KSB3YXMgc2VsZWN0ZWQuCisgKi8KKwordm9pZCB3YXJuZihzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICBpZighY29uZmlnLT5tdXRlKSB7CisgICAgdmFfbGlzdCBhcDsKKyAgICBpbnQgbGVuOworICAgIGNoYXIgKnB0cjsKKyAgICBjaGFyIHByaW50X2J1ZmZlclsyNTZdOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgbGVuID0gdnNucHJpbnRmKHByaW50X2J1ZmZlciwgc2l6ZW9mKHByaW50X2J1ZmZlciksIGZtdCwgYXApOworICAgIHZhX2VuZChhcCk7CisKKyAgICBwdHIgPSBwcmludF9idWZmZXI7CisgICAgd2hpbGUobGVuID4gMCkgeworICAgICAgZnB1dHMoV0FSTl9QUkVGSVgsIGNvbmZpZy0+ZXJyb3JzKTsKKworICAgICAgaWYobGVuID4gKGludClXQVJOX1RFWFRXSURUSCkgeworICAgICAgICBpbnQgY3V0ID0gV0FSTl9URVhUV0lEVEgtMTsKKworICAgICAgICB3aGlsZSghSVNTUEFDRShwdHJbY3V0XSkgJiYgY3V0KSB7CisgICAgICAgICAgY3V0LS07CisgICAgICAgIH0KKyAgICAgICAgaWYoMCA9PSBjdXQpCisgICAgICAgICAgLyogbm90IGEgc2luZ2xlIGN1dHRpbmcgcG9zaXRpb24gd2FzIGZvdW5kLCBqdXN0IGN1dCBpdCBhdCB0aGUKKyAgICAgICAgICAgICBtYXggdGV4dCB3aWR0aCB0aGVuISAqLworICAgICAgICAgIGN1dCA9IFdBUk5fVEVYVFdJRFRILTE7CisKKyAgICAgICAgKHZvaWQpZndyaXRlKHB0ciwgY3V0ICsgMSwgMSwgY29uZmlnLT5lcnJvcnMpOworICAgICAgICBmcHV0cygiXG4iLCBjb25maWctPmVycm9ycyk7CisgICAgICAgIHB0ciArPSBjdXQrMTsgLyogc2tpcCB0aGUgc3BhY2UgdG9vICovCisgICAgICAgIGxlbiAtPSBjdXQ7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgZnB1dHMocHRyLCBjb25maWctPmVycm9ycyk7CisgICAgICAgIGxlbiA9IDA7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKy8qCisgKiBFbWl0IGhlbHAgZm9ybWF0dGVkIG1lc3NhZ2Ugb24gZ2l2ZW4gc3RyZWFtLgorICovCisKK3ZvaWQgaGVscGYoRklMRSAqZXJyb3JzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgaWYoZm10KSB7CisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgZnB1dHMoImN1cmw6ICIsIGVycm9ycyk7IC8qIHByZWZpeCBpdCAqLworICAgIHZmcHJpbnRmKGVycm9ycywgZm10LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKKyAgfQorICBmcHJpbnRmKGVycm9ycywgImN1cmw6IHRyeSAnY3VybCAtLWhlbHAnICIKKyNpZmRlZiBVU0VfTUFOVUFMCisgICAgICAgICAgIm9yICdjdXJsIC0tbWFudWFsJyAiCisjZW5kaWYKKyAgICAgICAgICAiZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIpOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9tc2dzLmggYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9tc2dzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwMjEzOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX21zZ3MuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfTVNHU19ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfTVNHU19ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCit2b2lkIHdhcm5mKHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZywgY29uc3QgY2hhciAqZm10LCAuLi4pOworCit2b2lkIGhlbHBmKEZJTEUgKmVycm9ycywgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVE9PTF9NU0dTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfb3BlcmF0ZS5jIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfb3BlcmF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNzBlYTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9vcGVyYXRlLmMKQEAgLTAsMCArMSwxNjA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjICBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjICBpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1VUSU1FX0gKKyMgIGluY2x1ZGUgPHV0aW1lLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX1VUSU1FX0gpCisjICBpbmNsdWRlIDxzeXMvdXRpbWUuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MT0NBTEVfSAorIyAgaW5jbHVkZSA8bG9jYWxlLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfSAorIyAgaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAicmF3c3RyLmgiCisKKyNkZWZpbmUgRU5BQkxFX0NVUkxYX1BSSU5URgorLyogdXNlIG91ciBvd24gcHJpbnRmKCkgZnVuY3Rpb25zICovCisjaW5jbHVkZSAiY3VybHguaCIKKworI2luY2x1ZGUgInRvb2xfYmlubW9kZS5oIgorI2luY2x1ZGUgInRvb2xfY2ZnYWJsZS5oIgorI2luY2x1ZGUgInRvb2xfY2JfZGJnLmgiCisjaW5jbHVkZSAidG9vbF9jYl9oZHIuaCIKKyNpbmNsdWRlICJ0b29sX2NiX3ByZy5oIgorI2luY2x1ZGUgInRvb2xfY2JfcmVhLmgiCisjaW5jbHVkZSAidG9vbF9jYl9zZWUuaCIKKyNpbmNsdWRlICJ0b29sX2NiX3dydC5oIgorI2luY2x1ZGUgInRvb2xfZGlyaGllLmgiCisjaW5jbHVkZSAidG9vbF9kb3N3aW4uaCIKKyNpbmNsdWRlICJ0b29sX2Vhc3lzcmMuaCIKKyNpbmNsdWRlICJ0b29sX2dldHBhcmFtLmgiCisjaW5jbHVkZSAidG9vbF9oZWxwZXJzLmgiCisjaW5jbHVkZSAidG9vbF9ob21lZGlyLmgiCisjaW5jbHVkZSAidG9vbF9saWJpbmZvLmgiCisjaW5jbHVkZSAidG9vbF9tYWluLmgiCisjaW5jbHVkZSAidG9vbF9tc2dzLmgiCisjaW5jbHVkZSAidG9vbF9vcGVyYXRlLmgiCisjaW5jbHVkZSAidG9vbF9vcGVyaGxwLmgiCisjaW5jbHVkZSAidG9vbF9wYXJzZWNmZy5oIgorI2luY2x1ZGUgInRvb2xfc2V0b3B0LmgiCisjaW5jbHVkZSAidG9vbF9zbGVlcC5oIgorI2luY2x1ZGUgInRvb2xfdXJsZ2xvYi5oIgorI2luY2x1ZGUgInRvb2xfdXRpbC5oIgorI2luY2x1ZGUgInRvb2xfd3JpdGVlbnYuaCIKKyNpbmNsdWRlICJ0b29sX3dyaXRlb3V0LmgiCisjaW5jbHVkZSAidG9vbF94YXR0ci5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCisjZGVmaW5lIENVUkxzZXBhcmF0b3IgICItLV9jdXJsXy0tIgorCisjaWZuZGVmIE9fQklOQVJZCisvKiBzaW5jZSBPX0JJTkFSWSBhcyB1c2VkIGluIGJpdG1hc2tzLCBzZXR0aW5nIGl0IHRvIHplcm8gbWFrZXMgaXQgdXNhYmxlIGluCisgICBzb3VyY2UgY29kZSBidXQgeWV0IGl0IGRvZXNuJ3QgcnVpbiBhbnl0aGluZyAqLworIyAgZGVmaW5lIE9fQklOQVJZIDAKKyNlbmRpZgorCisjZGVmaW5lIENVUkxfQ0FfQ0VSVF9FUlJPUk1TRzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAiTW9yZSBkZXRhaWxzIGhlcmU6IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9zc2xjZXJ0cy5odG1sXG5cbiIgICAgICAgICAgIFwKKyAgImN1cmwgcGVyZm9ybXMgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBieSBkZWZhdWx0LCAiICAgICAgICAgICAgICAgICBcCisgICJ1c2luZyBhIFwiYnVuZGxlXCJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAiIG9mIENlcnRpZmljYXRlIEF1dGhvcml0eSAoQ0EpIHB1YmxpYyBrZXlzIChDQSBjZXJ0cykuIElmIHRoZSBkZWZhdWx0XG4iIFwKKyAgIiBidW5kbGUgZmlsZSBpc24ndCBhZGVxdWF0ZSwgeW91IGNhbiBzcGVjaWZ5IGFuIGFsdGVybmF0ZSBmaWxlXG4iICAgICAgICBcCisgICIgdXNpbmcgdGhlIC0tY2FjZXJ0IG9wdGlvbi5cbiIKKworI2RlZmluZSBDVVJMX0NBX0NFUlRfRVJST1JNU0cyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIklmIHRoaXMgSFRUUFMgc2VydmVyIHVzZXMgYSBjZXJ0aWZpY2F0ZSBzaWduZWQgYnkgYSBDQSByZXByZXNlbnRlZCBpblxuIiBcCisgICIgdGhlIGJ1bmRsZSwgdGhlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBwcm9iYWJseSBmYWlsZWQgZHVlIHRvIGFcbiIgICAgXAorICAiIHByb2JsZW0gd2l0aCB0aGUgY2VydGlmaWNhdGUgKGl0IG1pZ2h0IGJlIGV4cGlyZWQsIG9yIHRoZSBuYW1lIG1pZ2h0XG4iIFwKKyAgIiBub3QgbWF0Y2ggdGhlIGRvbWFpbiBuYW1lIGluIHRoZSBVUkwpLlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICJJZiB5b3UnZCBsaWtlIHRvIHR1cm4gb2ZmIGN1cmwncyB2ZXJpZmljYXRpb24gb2YgdGhlIGNlcnRpZmljYXRlLCB1c2VcbiIgXAorICAiIHRoZSAtayAob3IgLS1pbnNlY3VyZSkgb3B0aW9uLlxuIgorCitzdGF0aWMgaW50IGlzX2ZhdGFsX2Vycm9yKGludCBjb2RlKQoreworICBzd2l0Y2goY29kZSkgeworICAvKiBUT0RPOiBTaG91bGQgQ1VSTEVfU1NMX0NBQ0VSVCBiZSBpbmNsdWRlZCBhcyBjcml0aWNhbCBlcnJvciA/ICovCisgIGNhc2UgQ1VSTEVfRkFJTEVEX0lOSVQ6CisgIGNhc2UgQ1VSTEVfT1VUX09GX01FTU9SWToKKyAgY2FzZSBDVVJMRV9VTktOT1dOX09QVElPTjoKKyAgY2FzZSBDVVJMRV9GVU5DVElPTl9OT1RfRk9VTkQ6CisgIGNhc2UgQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOgorICAgIC8qIGNyaXRpY2FsIGVycm9yICovCisgICAgcmV0dXJuIDE7CisgIGRlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0KKyAgLyogbm8gZXJyb3Igb3Igbm90IGNyaXRpY2FsICovCisgIHJldHVybiAwOworfQorCitpbnQgb3BlcmF0ZShzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcsIGludCBhcmdjLCBhcmd2X2l0ZW1fdCBhcmd2W10pCit7CisgIGNoYXIgZXJyb3JidWZmZXJbQ1VSTF9FUlJPUl9TSVpFXTsKKyAgc3RydWN0IFByb2dyZXNzRGF0YSBwcm9ncmVzc2JhcjsKKyAgc3RydWN0IGdldG91dCAqdXJsbm9kZTsKKworICBzdHJ1Y3QgT3V0U3RydWN0IGhlYWRzOworCisgIENVUkwgKmN1cmwgPSBOVUxMOworICBjaGFyICpodHRwZ2V0ZmllbGRzID0gTlVMTDsKKworICBib29sIHN0aWxsZmxhZ3M7CisgIGludCByZXMgPSAwOworICBpbnQgaTsKKworICBlcnJvcmJ1ZmZlclswXSA9ICdcMCc7CisgIC8qIGRlZmF1bHQgaGVhZGVycyBvdXRwdXQgc3RyZWFtIGlzIHN0ZG91dCAqLworICBtZW1zZXQoJmhlYWRzLCAwLCBzaXplb2Yoc3RydWN0IE91dFN0cnVjdCkpOworICBoZWFkcy5zdHJlYW0gPSBzdGRvdXQ7CisgIGhlYWRzLmNvbmZpZyA9IGNvbmZpZzsKKworICBtZW1vcnlfdHJhY2tpbmdfaW5pdCgpOworCisgIC8qCisgICoqIEluaXRpYWxpemUgY3VybCBsaWJyYXJ5IC0gZG8gbm90IGNhbGwgYW55IGxpYmN1cmwgZnVuY3Rpb25zIGJlZm9yZQorICAqKiB0aGlzIHBvaW50LiBOb3RlIHRoYXQgdGhlIG1lbW9yeV90cmFja2luZ19pbml0KCkgbWFnaWMgYWJvdmUgaXMgYW4KKyAgKiogZXhjZXB0aW9uLCBidXQgdGhlbiB0aGF0J3Mgbm90IHBhcnQgb2YgdGhlIG9mZmljaWFsIHB1YmxpYyBBUEkuCisgICovCisgIGlmKG1haW5faW5pdCgpICE9IENVUkxFX09LKSB7CisgICAgaGVscGYoY29uZmlnLT5lcnJvcnMsICJlcnJvciBpbml0aWFsaXppbmcgY3VybCBsaWJyYXJ5XG4iKTsKKyAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgIH0KKworICAvKiBHZXQgbGliY3VybCBpbmZvIHJpZ2h0IGF3YXkgKi8KKyAgaWYoZ2V0X2xpYmN1cmxfaW5mbygpICE9IENVUkxFX09LKSB7CisgICAgaGVscGYoY29uZmlnLT5lcnJvcnMsICJlcnJvciByZXRyaWV2aW5nIGN1cmwgbGlicmFyeSBpbmZvcm1hdGlvblxuIik7CisgICAgbWFpbl9mcmVlKCk7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisKKyAgLyogR2V0IGEgY3VybCBoYW5kbGUgdG8gdXNlIGZvciBhbGwgZm9ydGhjb21pbmcgY3VybCB0cmFuc2ZlcnMgKi8KKyAgY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmKCFjdXJsKSB7CisgICAgaGVscGYoY29uZmlnLT5lcnJvcnMsICJlcnJvciBpbml0aWFsaXppbmcgY3VybCBlYXN5IGhhbmRsZVxuIik7CisgICAgbWFpbl9mcmVlKCk7CisgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICB9CisgIGNvbmZpZy0+ZWFzeSA9IGN1cmw7CisKKyAgLyoKKyAgKiogQmV5b25kIHRoaXMgcG9pbnQgbm8gcmV0dXJuJ2luZyBmcm9tIHRoaXMgZnVuY3Rpb24gYWxsb3dlZC4KKyAgKiogSnVtcCB0byBsYWJlbCAncXVpdF9jdXJsJyBpbiBvcmRlciB0byBhYmFuZG9uIHRoaXMgZnVuY3Rpb24KKyAgKiogZnJvbSBvdXRzaWRlIG9mIG5lc3RlZCBsb29wcyBmdXJ0aGVyIGRvd24gYmVsb3cuCisgICovCisKKyAgLyogc2V0dXAgcHJvcGVyIGxvY2FsZSBmcm9tIGVudmlyb25tZW50ICovCisjaWZkZWYgSEFWRV9TRVRMT0NBTEUKKyAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworI2VuZGlmCisKKyAgLyogaW5pdHMgKi8KKyAgY29uZmlnLT5wb3N0ZmllbGRzaXplID0gLTE7CisgIGNvbmZpZy0+c2hvd2Vycm9yID0gLTE7IC8qIHdpbGwgc2hvdyBlcnJvcnMgKi8KKyAgY29uZmlnLT51c2VfaHR0cGdldCA9IEZBTFNFOworICBjb25maWctPmNyZWF0ZV9kaXJzID0gRkFMU0U7CisgIGNvbmZpZy0+bWF4cmVkaXJzID0gREVGQVVMVF9NQVhSRURJUlM7CisgIGNvbmZpZy0+cHJvdG8gPSBDVVJMUFJPVE9fQUxMOyAvKiBGSVhNRTogYmV0dGVyIHRvIHJlYWQgZnJvbSBsaWJyYXJ5ICovCisgIGNvbmZpZy0+cHJvdG9fcHJlc2VudCA9IEZBTFNFOworICBjb25maWctPnByb3RvX3JlZGlyID0KKyAgICBDVVJMUFJPVE9fQUxMICYgfihDVVJMUFJPVE9fRklMRXxDVVJMUFJPVE9fU0NQKTsgLyogbm90IEZJTEUgb3IgU0NQICovCisgIGNvbmZpZy0+cHJvdG9fcmVkaXJfcHJlc2VudCA9IEZBTFNFOworCisgIGlmKChhcmdjID4gMSkgJiYKKyAgICAgKCFjdXJseF9zdHJuZXF1YWwoIi0tIiwgYXJndlsxXSwgMikgJiYgKGFyZ3ZbMV1bMF0gPT0gJy0nKSkgJiYKKyAgICAgc3RyY2hyKGFyZ3ZbMV0sICdxJykpIHsKKyAgICAvKgorICAgICAqIFRoZSBmaXJzdCBmbGFnLCB0aGF0IGlzIG5vdCBhIHZlcmJvc2UgbmFtZSwgYnV0IGEgc2hvcnRuYW1lCisgICAgICogYW5kIGl0IGluY2x1ZGVzIHRoZSAncScgZmxhZyEKKyAgICAgKi8KKyAgICA7CisgIH0KKyAgZWxzZSB7CisgICAgcGFyc2Vjb25maWcoTlVMTCwgY29uZmlnKTsgLyogaWdub3JlIHBvc3NpYmxlIGZhaWx1cmUgKi8KKyAgfQorCisgIGlmKChhcmdjIDwgMikgICYmICFjb25maWctPnVybF9saXN0KSB7CisgICAgaGVscGYoY29uZmlnLT5lcnJvcnMsIE5VTEwpOworICAgIHJlcyA9IENVUkxFX0ZBSUxFRF9JTklUOworICAgIGdvdG8gcXVpdF9jdXJsOworICB9CisKKyAgLyogUGFyc2Ugb3B0aW9ucyAqLworICBmb3IoaSA9IDEsIHN0aWxsZmxhZ3MgPSBUUlVFOyBpIDwgYXJnYzsgaSsrKSB7CisgICAgaWYoc3RpbGxmbGFncyAmJgorICAgICAgICgnLScgPT0gYXJndltpXVswXSkpIHsKKyAgICAgIGNoYXIgKm5leHRhcmc7CisgICAgICBib29sIHBhc3Nhcmc7CisgICAgICBjaGFyICpvcmlnb3B0ID0gYXJndltpXTsKKworICAgICAgY2hhciAqZmxhZyA9IGFyZ3ZbaV07CisKKyAgICAgIGlmKGN1cmx4X3N0cmVxdWFsKCItLSIsIGFyZ3ZbaV0pKQorICAgICAgICAvKiB0aGlzIGluZGljYXRlcyB0aGUgZW5kIG9mIHRoZSBmbGFncyBhbmQgdGh1cyBlbmFibGVzIHRoZQorICAgICAgICAgICBmb2xsb3dpbmcgKFVSTCkgYXJndW1lbnQgdG8gc3RhcnQgd2l0aCAtLiAqLworICAgICAgICBzdGlsbGZsYWdzID0gRkFMU0U7CisgICAgICBlbHNlIHsKKyAgICAgICAgbmV4dGFyZyA9IChpIDwgKGFyZ2MtMSkpID8gYXJndltpKzFdIDogTlVMTDsKKworICAgICAgICByZXMgPSBnZXRwYXJhbWV0ZXIoZmxhZywgbmV4dGFyZywgJnBhc3NhcmcsIGNvbmZpZyk7CisgICAgICAgIGlmKHJlcykgeworICAgICAgICAgIGludCByZXR2YWwgPSBDVVJMRV9PSzsKKyAgICAgICAgICBpZihyZXMgIT0gUEFSQU1fSEVMUF9SRVFVRVNURUQpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiA9IHBhcmFtMnRleHQocmVzKTsKKyAgICAgICAgICAgIGhlbHBmKGNvbmZpZy0+ZXJyb3JzLCAib3B0aW9uICVzOiAlc1xuIiwgb3JpZ29wdCwgcmVhc29uKTsKKyAgICAgICAgICAgIHJldHZhbCA9IENVUkxFX0ZBSUxFRF9JTklUOworICAgICAgICAgIH0KKyAgICAgICAgICByZXMgPSByZXR2YWw7CisgICAgICAgICAgZ290byBxdWl0X2N1cmw7CisgICAgICAgIH0KKworICAgICAgICBpZihwYXNzYXJnKSAvKiB3ZSdyZSBzdXBwb3NlZCB0byBza2lwIHRoaXMgKi8KKyAgICAgICAgICBpKys7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgYm9vbCB1c2VkOworICAgICAgLyoganVzdCBhZGQgdGhlIFVSTCBwbGVhc2UgKi8KKyAgICAgIHJlcyA9IGdldHBhcmFtZXRlcigoY2hhciAqKSItLXVybCIsIGFyZ3ZbaV0sICZ1c2VkLCBjb25maWcpOworICAgICAgaWYocmVzKQorICAgICAgICBnb3RvIHF1aXRfY3VybDsKKyAgICB9CisgIH0KKworICBpZigoIWNvbmZpZy0+dXJsX2xpc3QgfHwgIWNvbmZpZy0+dXJsX2xpc3QtPnVybCkgJiYgIWNvbmZpZy0+bGlzdF9lbmdpbmVzKSB7CisgICAgaGVscGYoY29uZmlnLT5lcnJvcnMsICJubyBVUkwgc3BlY2lmaWVkIVxuIik7CisgICAgcmVzID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgZ290byBxdWl0X2N1cmw7CisgIH0KKworICBpZighY29uZmlnLT51c2VyYWdlbnQpCisgICAgY29uZmlnLT51c2VyYWdlbnQgPSBteV91c2VyYWdlbnQoKTsKKyAgaWYoIWNvbmZpZy0+dXNlcmFnZW50KSB7CisgICAgaGVscGYoY29uZmlnLT5lcnJvcnMsICJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICByZXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGdvdG8gcXVpdF9jdXJsOworICB9CisKKyAgLyogT24gV0lOMzIgd2UgY2FuJ3Qgc2V0IHRoZSBwYXRoIHRvIGN1cmwtY2EtYnVuZGxlLmNydAorICAgKiBhdCBjb21waWxlIHRpbWUuIFNvIHdlIGxvb2sgaGVyZSBmb3IgdGhlIGZpbGUgaW4gdHdvIHdheXM6CisgICAqIDE6IGxvb2sgYXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIENVUkxfQ0FfQlVORExFIGZvciBhIHBhdGgKKyAgICogMjogaWYgIzEgaXNuJ3QgZm91bmQsIHVzZSB0aGUgd2luZG93cyBBUEkgZnVuY3Rpb24gU2VhcmNoUGF0aCgpCisgICAqICAgIHRvIGZpbmQgaXQgYWxvbmcgdGhlIGFwcCdzIHBhdGggKGluY2x1ZGVzIGFwcCdzIGRpciBhbmQgQ1dEKQorICAgKgorICAgKiBXZSBzdXBwb3J0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGluZyBmb3Igbm9uLVdpbmRvd3MgcGxhdGZvcm1zCisgICAqIHRvby4gSnVzdCBmb3IgdGhlIHNha2Ugb2YgaXQuCisgICAqLworICBpZighY29uZmlnLT5jYWNlcnQgJiYKKyAgICAgIWNvbmZpZy0+Y2FwYXRoICYmCisgICAgICFjb25maWctPmluc2VjdXJlX29rKSB7CisgICAgY2hhciAqZW52OworICAgIGVudiA9IGN1cmx4X2dldGVudigiQ1VSTF9DQV9CVU5ETEUiKTsKKyAgICBpZihlbnYpIHsKKyAgICAgIGNvbmZpZy0+Y2FjZXJ0ID0gc3RyZHVwKGVudik7CisgICAgICBpZighY29uZmlnLT5jYWNlcnQpIHsKKyAgICAgICAgY3VybF9mcmVlKGVudik7CisgICAgICAgIGhlbHBmKGNvbmZpZy0+ZXJyb3JzLCAib3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgIHJlcyA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIGdvdG8gcXVpdF9jdXJsOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGVudiA9IGN1cmx4X2dldGVudigiU1NMX0NFUlRfRElSIik7CisgICAgICBpZihlbnYpIHsKKyAgICAgICAgY29uZmlnLT5jYXBhdGggPSBzdHJkdXAoZW52KTsKKyAgICAgICAgaWYoIWNvbmZpZy0+Y2FwYXRoKSB7CisgICAgICAgICAgY3VybF9mcmVlKGVudik7CisgICAgICAgICAgaGVscGYoY29uZmlnLT5lcnJvcnMsICJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgICByZXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgIGdvdG8gcXVpdF9jdXJsOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgZW52ID0gY3VybHhfZ2V0ZW52KCJTU0xfQ0VSVF9GSUxFIik7CisgICAgICAgIGlmKGVudikgeworICAgICAgICAgIGNvbmZpZy0+Y2FjZXJ0ID0gc3RyZHVwKGVudik7CisgICAgICAgICAgaWYoIWNvbmZpZy0+Y2FjZXJ0KSB7CisgICAgICAgICAgICBjdXJsX2ZyZWUoZW52KTsKKyAgICAgICAgICAgIGhlbHBmKGNvbmZpZy0+ZXJyb3JzLCAib3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICByZXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgZ290byBxdWl0X2N1cmw7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYoZW52KQorICAgICAgY3VybF9mcmVlKGVudik7CisjaWZkZWYgV0lOMzIKKyAgICBlbHNlIHsKKyAgICAgIHJlcyA9IEZpbmRXaW4zMkNBQ2VydChjb25maWcsICJjdXJsLWNhLWJ1bmRsZS5jcnQiKTsKKyAgICAgIGlmKHJlcykKKyAgICAgICAgZ290byBxdWl0X2N1cmw7CisgICAgfQorI2VuZGlmCisgIH0KKworICBpZihjb25maWctPnBvc3RmaWVsZHMpIHsKKyAgICBpZihjb25maWctPnVzZV9odHRwZ2V0KSB7CisgICAgICAvKiBVc2UgdGhlIHBvc3RmaWVsZHMgZGF0YSBmb3IgYSBodHRwIGdldCAqLworICAgICAgaHR0cGdldGZpZWxkcyA9IHN0cmR1cChjb25maWctPnBvc3RmaWVsZHMpOworICAgICAgQ3VybF9zYWZlZnJlZShjb25maWctPnBvc3RmaWVsZHMpOworICAgICAgaWYoIWh0dHBnZXRmaWVsZHMpIHsKKyAgICAgICAgaGVscGYoY29uZmlnLT5lcnJvcnMsICJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgcmVzID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgZ290byBxdWl0X2N1cmw7CisgICAgICB9CisgICAgICBpZihTZXRIVFRQcmVxdWVzdChjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAoY29uZmlnLT5ub19ib2R5P0hUVFBSRVFfSEVBRDpIVFRQUkVRX0dFVCksCisgICAgICAgICAgICAgICAgICAgICAgICAmY29uZmlnLT5odHRwcmVxKSkgeworICAgICAgICByZXMgPSBQQVJBTV9CQURfVVNFOworICAgICAgICBnb3RvIHF1aXRfY3VybDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZihTZXRIVFRQcmVxdWVzdChjb25maWcsIEhUVFBSRVFfU0lNUExFUE9TVCwgJmNvbmZpZy0+aHR0cHJlcSkpIHsKKyAgICAgICAgcmVzID0gUEFSQU1fQkFEX1VTRTsKKyAgICAgICAgZ290byBxdWl0X2N1cmw7CisgICAgICB9CisgICAgfQorICB9CisKKyNpZm5kZWYgQ1VSTF9ESVNBQkxFX0xJQkNVUkxfT1BUSU9OCisgIHJlcyA9IGVhc3lzcmNfaW5pdCgpOworICBpZihyZXMpIHsKKyAgICBoZWxwZihjb25maWctPmVycm9ycywgIm91dCBvZiBtZW1vcnlcbiIpOworICAgIGdvdG8gcXVpdF9jdXJsOworICB9CisjZW5kaWYKKworICBpZihjb25maWctPmxpc3RfZW5naW5lcykgeworICAgIHN0cnVjdCBjdXJsX3NsaXN0ICplbmdpbmVzID0gTlVMTDsKKyAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19TU0xfRU5HSU5FUywgJmVuZ2luZXMpOworICAgIGxpc3RfZW5naW5lcyhlbmdpbmVzKTsKKyAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGVuZ2luZXMpOworICAgIHJlcyA9IENVUkxFX09LOworICAgIGdvdG8gcXVpdF9jdXJsOworICB9CisKKyAgLyogU2luZ2xlIGhlYWRlciBmaWxlIGZvciBhbGwgVVJMcyAqLworICBpZihjb25maWctPmhlYWRlcmZpbGUpIHsKKyAgICAvKiBvcGVuIGZpbGUgZm9yIG91dHB1dDogKi8KKyAgICBpZighY3VybHhfc3RyZXF1YWwoY29uZmlnLT5oZWFkZXJmaWxlLCAiLSIpKSB7CisgICAgICBGSUxFICpuZXdmaWxlID0gZm9wZW4oY29uZmlnLT5oZWFkZXJmaWxlLCAid2IiKTsKKyAgICAgIGlmKCFuZXdmaWxlKSB7CisgICAgICAgIHdhcm5mKGNvbmZpZywgIkZhaWxlZCB0byBvcGVuICVzXG4iLCBjb25maWctPmhlYWRlcmZpbGUpOworICAgICAgICByZXMgPSBDVVJMRV9XUklURV9FUlJPUjsKKyAgICAgICAgZ290byBxdWl0X2N1cmw7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaGVhZHMuZmlsZW5hbWUgPSBjb25maWctPmhlYWRlcmZpbGU7CisgICAgICAgIGhlYWRzLnNfaXNyZWcgPSBUUlVFOworICAgICAgICBoZWFkcy5mb3BlbmVkID0gVFJVRTsKKyAgICAgICAgaGVhZHMuc3RyZWFtID0gbmV3ZmlsZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvKgorICAqKiBOZXN0ZWQgbG9vcHMgc3RhcnQgaGVyZS4KKyAgKi8KKworICAvKiBsb29wIHRocm91Z2ggdGhlIGxpc3Qgb2YgZ2l2ZW4gVVJMcyAqLworCisgIGZvcih1cmxub2RlID0gY29uZmlnLT51cmxfbGlzdDsgdXJsbm9kZTsgdXJsbm9kZSA9IHVybG5vZGUtPm5leHQpIHsKKworICAgIGludCB1cDsgLyogdXBsb2FkIGZpbGUgY291bnRlciB3aXRoaW4gYSBzaW5nbGUgdXBsb2FkIGdsb2IgKi8KKyAgICBjaGFyICppbmZpbGVzOyAvKiBtaWdodCBiZSBhIGdsb2IgcGF0dGVybiAqLworICAgIGNoYXIgKm91dGZpbGVzOworICAgIGludCBpbmZpbGVudW07CisgICAgVVJMR2xvYiAqaW5nbG9iOworCisgICAgb3V0ZmlsZXMgPSBOVUxMOworICAgIGluZmlsZW51bSA9IDE7CisgICAgaW5nbG9iID0gTlVMTDsKKworICAgIC8qIHVybG5vZGUtPnVybCBpcyB0aGUgZnVsbCBVUkwgKGl0IG1pZ2h0IGJlIE5VTEwpICovCisKKyAgICBpZighdXJsbm9kZS0+dXJsKSB7CisgICAgICAvKiBUaGlzIG5vZGUgaGFzIG5vIFVSTC4gRnJlZSBub2RlIGRhdGEgd2l0aG91dCBkZXN0cm95aW5nIHRoZQorICAgICAgICAgbm9kZSBpdHNlbGYgbm9yIG1vZGlmeWluZyBuZXh0IHBvaW50ZXIgYW5kIGNvbnRpbnVlIHRvIG5leHQgKi8KKyAgICAgIEN1cmxfc2FmZWZyZWUodXJsbm9kZS0+b3V0ZmlsZSk7CisgICAgICBDdXJsX3NhZmVmcmVlKHVybG5vZGUtPmluZmlsZSk7CisgICAgICB1cmxub2RlLT5mbGFncyA9IDA7CisgICAgICBjb250aW51ZTsgLyogbmV4dCBVUkwgcGxlYXNlICovCisgICAgfQorCisgICAgLyogc2F2ZSBvdXRmaWxlIHBhdHRlcm4gYmVmb3JlIGV4cGFuc2lvbiAqLworICAgIGlmKHVybG5vZGUtPm91dGZpbGUpIHsKKyAgICAgIG91dGZpbGVzID0gc3RyZHVwKHVybG5vZGUtPm91dGZpbGUpOworICAgICAgaWYoIW91dGZpbGVzKSB7CisgICAgICAgIGhlbHBmKGNvbmZpZy0+ZXJyb3JzLCAib3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgIHJlcyA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGluZmlsZXMgPSB1cmxub2RlLT5pbmZpbGU7CisKKyAgICBpZighY29uZmlnLT5nbG9ib2ZmICYmIGluZmlsZXMpIHsKKyAgICAgIC8qIFVubGVzcyBleHBsaWNpdGx5IHNodXQgb2ZmICovCisgICAgICByZXMgPSBnbG9iX3VybCgmaW5nbG9iLCBpbmZpbGVzLCAmaW5maWxlbnVtLAorICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5zaG93ZXJyb3I/Y29uZmlnLT5lcnJvcnM6TlVMTCk7CisgICAgICBpZihyZXMpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShvdXRmaWxlcyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIC8qIEhlcmUncyB0aGUgbG9vcCBmb3IgdXBsb2FkaW5nIG11bHRpcGxlIGZpbGVzIHdpdGhpbiB0aGUgc2FtZQorICAgICAgIHNpbmdsZSBnbG9iYmVkIHN0cmluZy4gSWYgbm8gdXBsb2FkLCB3ZSBlbnRlciB0aGUgbG9vcCBvbmNlIGFueXdheS4gKi8KKyAgICBmb3IodXAgPSAwIDsgdXAgPCBpbmZpbGVudW07IHVwKyspIHsKKworICAgICAgY2hhciAqdXBsb2FkZmlsZTsgLyogYSBzaW5nbGUgZmlsZSwgbmV2ZXIgYSBnbG9iICovCisgICAgICBpbnQgc2VwYXJhdG9yOworICAgICAgVVJMR2xvYiAqdXJsczsKKyAgICAgIGludCB1cmxudW07CisKKyAgICAgIHVwbG9hZGZpbGUgPSBOVUxMOworICAgICAgc2VwYXJhdG9yID0gMDsKKyAgICAgIHVybHMgPSBOVUxMOworICAgICAgdXJsbnVtID0gMDsKKworICAgICAgaWYoIXVwICYmICFpbmZpbGVzKQorICAgICAgICBDdXJsX25vcF9zdG10OworICAgICAgZWxzZSB7CisgICAgICAgIGlmKGluZ2xvYikgeworICAgICAgICAgIHJlcyA9IGdsb2JfbmV4dF91cmwoJnVwbG9hZGZpbGUsIGluZ2xvYik7CisgICAgICAgICAgaWYocmVzID09IENVUkxFX09VVF9PRl9NRU1PUlkpCisgICAgICAgICAgICBoZWxwZihjb25maWctPmVycm9ycywgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIXVwKSB7CisgICAgICAgICAgdXBsb2FkZmlsZSA9IHN0cmR1cChpbmZpbGVzKTsKKyAgICAgICAgICBpZighdXBsb2FkZmlsZSkgeworICAgICAgICAgICAgaGVscGYoY29uZmlnLT5lcnJvcnMsICJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgICAgIHJlcyA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB1cGxvYWRmaWxlID0gTlVMTDsKKyAgICAgICAgaWYoIXVwbG9hZGZpbGUpCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGlmKCFjb25maWctPmdsb2JvZmYpIHsKKyAgICAgICAgLyogVW5sZXNzIGV4cGxpY2l0bHkgc2h1dCBvZmYsIHdlIGV4cGFuZCAney4uLn0nIGFuZCAnWy4uLl0nCisgICAgICAgICAgIGV4cHJlc3Npb25zIGFuZCByZXR1cm4gdG90YWwgbnVtYmVyIG9mIFVSTHMgaW4gcGF0dGVybiBzZXQgKi8KKyAgICAgICAgcmVzID0gZ2xvYl91cmwoJnVybHMsIHVybG5vZGUtPnVybCwgJnVybG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5zaG93ZXJyb3I/Y29uZmlnLT5lcnJvcnM6TlVMTCk7CisgICAgICAgIGlmKHJlcykgeworICAgICAgICAgIEN1cmxfc2FmZWZyZWUodXBsb2FkZmlsZSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgdXJsbnVtID0gMTsgLyogd2l0aG91dCBnbG9iYmluZywgdGhpcyBpcyBhIHNpbmdsZSBVUkwgKi8KKworICAgICAgLyogaWYgbXVsdGlwbGUgZmlsZXMgZXh0cmFjdGVkIHRvIHN0ZG91dCwgaW5zZXJ0IHNlcGFyYXRvcnMhICovCisgICAgICBzZXBhcmF0b3I9ICgoIW91dGZpbGVzIHx8IGN1cmx4X3N0cmVxdWFsKG91dGZpbGVzLCAiLSIpKSAmJiB1cmxudW0gPiAxKTsKKworICAgICAgLyogSGVyZSdzIGxvb3BpbmcgYXJvdW5kIGVhY2ggZ2xvYmJlZCBVUkwgKi8KKyAgICAgIGZvcihpID0gMCA7IGkgPCB1cmxudW07IGkrKykgeworCisgICAgICAgIGludCBpbmZkOworICAgICAgICBib29sIGluZmRvcGVuOworICAgICAgICBjaGFyICpvdXRmaWxlOworICAgICAgICBzdHJ1Y3QgT3V0U3RydWN0IG91dHM7CisgICAgICAgIHN0cnVjdCBJblN0cnVjdCBpbnB1dDsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgcmV0cnlzdGFydDsKKyAgICAgICAgY3VybF9vZmZfdCB1cGxvYWRmaWxlc2l6ZTsKKyAgICAgICAgbG9uZyByZXRyeV9udW1yZXRyaWVzOworICAgICAgICBsb25nIHJldHJ5X3NsZWVwX2RlZmF1bHQ7CisgICAgICAgIGxvbmcgcmV0cnlfc2xlZXA7CisgICAgICAgIGNoYXIgKnRoaXNfdXJsOworCisgICAgICAgIG91dGZpbGUgPSBOVUxMOworICAgICAgICBpbmZkb3BlbiA9IEZBTFNFOworICAgICAgICBpbmZkID0gU1RESU5fRklMRU5POworICAgICAgICB1cGxvYWRmaWxlc2l6ZSA9IC0xOyAvKiAtMSBtZWFucyB1bmtub3duICovCisKKyAgICAgICAgLyogZGVmYXVsdCBvdXRwdXQgc3RyZWFtIGlzIHN0ZG91dCAqLworICAgICAgICBtZW1zZXQoJm91dHMsIDAsIHNpemVvZihzdHJ1Y3QgT3V0U3RydWN0KSk7CisgICAgICAgIG91dHMuc3RyZWFtID0gc3Rkb3V0OworICAgICAgICBvdXRzLmNvbmZpZyA9IGNvbmZpZzsKKworICAgICAgICBpZih1cmxzKSB7CisgICAgICAgICAgcmVzID0gZ2xvYl9uZXh0X3VybCgmdGhpc191cmwsIHVybHMpOworICAgICAgICAgIGlmKHJlcykKKyAgICAgICAgICAgIGdvdG8gc2hvd19lcnJvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCFpKSB7CisgICAgICAgICAgdGhpc191cmwgPSBzdHJkdXAodXJsbm9kZS0+dXJsKTsKKyAgICAgICAgICBpZighdGhpc191cmwpIHsKKyAgICAgICAgICAgIHJlcyA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgICBnb3RvIHNob3dfZXJyb3I7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB0aGlzX3VybCA9IE5VTEw7CisgICAgICAgIGlmKCF0aGlzX3VybCkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBpZihvdXRmaWxlcykgeworICAgICAgICAgIG91dGZpbGUgPSBzdHJkdXAob3V0ZmlsZXMpOworICAgICAgICAgIGlmKCFvdXRmaWxlKSB7CisgICAgICAgICAgICByZXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgZ290byBzaG93X2Vycm9yOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCh1cmxub2RlLT5mbGFncyZHRVRPVVRfVVNFUkVNT1RFKSB8fAorICAgICAgICAgICAob3V0ZmlsZSAmJiAhY3VybHhfc3RyZXF1YWwoIi0iLCBvdXRmaWxlKSkgKSB7CisKKyAgICAgICAgICAvKgorICAgICAgICAgICAqIFdlIGhhdmUgc3BlY2lmaWVkIGEgZmlsZSBuYW1lIHRvIHN0b3JlIHRoZSByZXN1bHQgaW4sIG9yIHdlIGhhdmUKKyAgICAgICAgICAgKiBkZWNpZGVkIHdlIHdhbnQgdG8gdXNlIHRoZSByZW1vdGUgZmlsZSBuYW1lLgorICAgICAgICAgICAqLworCisgICAgICAgICAgaWYoIW91dGZpbGUpIHsKKyAgICAgICAgICAgIC8qIGV4dHJhY3QgdGhlIGZpbGUgbmFtZSBmcm9tIHRoZSBVUkwgKi8KKyAgICAgICAgICAgIHJlcyA9IGdldF91cmxfZmlsZV9uYW1lKCZvdXRmaWxlLCB0aGlzX3VybCk7CisgICAgICAgICAgICBpZihyZXMpCisgICAgICAgICAgICAgIGdvdG8gc2hvd19lcnJvcjsKKyAgICAgICAgICAgIGlmKCghb3V0ZmlsZSB8fCAhKm91dGZpbGUpICYmICFjb25maWctPmNvbnRlbnRfZGlzcG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgaGVscGYoY29uZmlnLT5lcnJvcnMsICJSZW1vdGUgZmlsZSBuYW1lIGhhcyBubyBsZW5ndGghXG4iKTsKKyAgICAgICAgICAgICAgcmVzID0gQ1VSTEVfV1JJVEVfRVJST1I7CisgICAgICAgICAgICAgIGdvdG8gcXVpdF91cmxzOworICAgICAgICAgICAgfQorI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lOMzIpCisgICAgICAgICAgICAvKiBGb3IgRE9TIGFuZCBXSU4zMiwgd2UgZG8gc29tZSBtYWpvciByZXBsYWNpbmcgb2YKKyAgICAgICAgICAgICAgIGJhZCBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIG5hbWUgYmVmb3JlIHVzaW5nIGl0ICovCisgICAgICAgICAgICBvdXRmaWxlID0gc2FuaXRpemVfZG9zX25hbWUob3V0ZmlsZSk7CisgICAgICAgICAgICBpZighb3V0ZmlsZSkgeworICAgICAgICAgICAgICByZXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgICBnb3RvIHNob3dfZXJyb3I7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTVNET1MgfHwgV0lOMzIgKi8KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZih1cmxzKSB7CisgICAgICAgICAgICAvKiBmaWxsICcjMScgLi4uICcjOScgdGVybXMgZnJvbSBVUkwgcGF0dGVybiAqLworICAgICAgICAgICAgY2hhciAqc3RvcmVmaWxlID0gb3V0ZmlsZTsKKyAgICAgICAgICAgIHJlcyA9IGdsb2JfbWF0Y2hfdXJsKCZvdXRmaWxlLCBzdG9yZWZpbGUsIHVybHMpOworICAgICAgICAgICAgQ3VybF9zYWZlZnJlZShzdG9yZWZpbGUpOworICAgICAgICAgICAgaWYocmVzKSB7CisgICAgICAgICAgICAgIC8qIGJhZCBnbG9iYmluZyAqLworICAgICAgICAgICAgICB3YXJuZihjb25maWcsICJiYWQgb3V0cHV0IGdsb2IhXG4iKTsKKyAgICAgICAgICAgICAgZ290byBxdWl0X3VybHM7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogQ3JlYXRlIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5LCBpZiBub3QgcHJlLWV4aXN0ZW50IHRvIGEgbXVsdGlwbGUKKyAgICAgICAgICAgICBmaWxlIG91dHB1dCBjYWxsICovCisKKyAgICAgICAgICBpZihjb25maWctPmNyZWF0ZV9kaXJzKSB7CisgICAgICAgICAgICByZXMgPSBjcmVhdGVfZGlyX2hpZXJhcmNoeShvdXRmaWxlLCBjb25maWctPmVycm9ycyk7CisgICAgICAgICAgICAvKiBjcmVhdGVfZGlyX2hpZXJhcmNoeSBzaG93cyBlcnJvciB1cG9uIENVUkxFX1dSSVRFX0VSUk9SICovCisgICAgICAgICAgICBpZihyZXMgPT0gQ1VSTEVfV1JJVEVfRVJST1IpCisgICAgICAgICAgICAgIGdvdG8gcXVpdF91cmxzOworICAgICAgICAgICAgaWYocmVzKSB7CisgICAgICAgICAgICAgIGdvdG8gc2hvd19lcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZigodXJsbm9kZS0+ZmxhZ3MgJiBHRVRPVVRfVVNFUkVNT1RFKQorICAgICAgICAgICAgICYmIGNvbmZpZy0+Y29udGVudF9kaXNwb3NpdGlvbikgeworICAgICAgICAgICAgLyogT3VyIGhlYWRlciBjYWxsYmFjayBNSUdIVCBzZXQgdGhlIGZpbGVuYW1lICovCisgICAgICAgICAgICBERUJVR0FTU0VSVCghb3V0cy5maWxlbmFtZSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYoY29uZmlnLT5yZXN1bWVfZnJvbV9jdXJyZW50KSB7CisgICAgICAgICAgICAvKiBXZSdyZSB0b2xkIHRvIGNvbnRpbnVlIGZyb20gd2hlcmUgd2UgYXJlIG5vdy4gR2V0IHRoZSBzaXplCisgICAgICAgICAgICAgICBvZiB0aGUgZmlsZSBhcyBpdCBpcyBub3cgYW5kIG9wZW4gaXQgZm9yIGFwcGVuZCBpbnN0ZWFkICovCisgICAgICAgICAgICBzdHJ1Y3Rfc3RhdCBmaWxlaW5mbzsKKyAgICAgICAgICAgIC8qIFZNUyAtLSBEYW5nZXIsIHRoZSBmaWxlc2l6ZSBpcyBvbmx5IHZhbGlkIGZvciBzdHJlYW0gZmlsZXMgKi8KKyAgICAgICAgICAgIGlmKDAgPT0gc3RhdChvdXRmaWxlLCAmZmlsZWluZm8pKQorICAgICAgICAgICAgICAvKiBzZXQgb2Zmc2V0IHRvIGN1cnJlbnQgZmlsZSBzaXplOiAqLworICAgICAgICAgICAgICBjb25maWctPnJlc3VtZV9mcm9tID0gZmlsZWluZm8uc3Rfc2l6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgLyogbGV0IG9mZnNldCBiZSAwICovCisgICAgICAgICAgICAgIGNvbmZpZy0+cmVzdW1lX2Zyb20gPSAwOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmKGNvbmZpZy0+cmVzdW1lX2Zyb20pIHsKKyAgICAgICAgICAgIC8qIG9wZW4gZmlsZSBmb3Igb3V0cHV0OiAqLworICAgICAgICAgICAgRklMRSAqZmlsZSA9IGZvcGVuKG91dGZpbGUsIGNvbmZpZy0+cmVzdW1lX2Zyb20/ImFiIjoid2IiKTsKKyAgICAgICAgICAgIGlmKCFmaWxlKSB7CisgICAgICAgICAgICAgIGhlbHBmKGNvbmZpZy0+ZXJyb3JzLCAiQ2FuJ3Qgb3BlbiAnJXMnIVxuIiwgb3V0ZmlsZSk7CisgICAgICAgICAgICAgIHJlcyA9IENVUkxFX1dSSVRFX0VSUk9SOworICAgICAgICAgICAgICBnb3RvIHF1aXRfdXJsczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHMuZm9wZW5lZCA9IFRSVUU7CisgICAgICAgICAgICBvdXRzLnN0cmVhbSA9IGZpbGU7CisgICAgICAgICAgICBvdXRzLmluaXQgPSBjb25maWctPnJlc3VtZV9mcm9tOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG91dHMuc3RyZWFtID0gTlVMTDsgLyogb3BlbiB3aGVuIG5lZWRlZCAqLworICAgICAgICAgIH0KKyAgICAgICAgICBvdXRzLmZpbGVuYW1lID0gb3V0ZmlsZTsKKyAgICAgICAgICBvdXRzLnNfaXNyZWcgPSBUUlVFOworICAgICAgICB9CisKKyAgICAgICAgaWYodXBsb2FkZmlsZSAmJiAhc3RkaW5fdXBsb2FkKHVwbG9hZGZpbGUpKSB7CisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBXZSBoYXZlIHNwZWNpZmllZCBhIGZpbGUgdG8gdXBsb2FkIGFuZCBpdCBpc24ndCAiLSIuCisgICAgICAgICAgICovCisgICAgICAgICAgc3RydWN0X3N0YXQgZmlsZWluZm87CisKKyAgICAgICAgICB0aGlzX3VybCA9IGFkZF9maWxlX25hbWVfdG9fdXJsKGN1cmwsIHRoaXNfdXJsLCB1cGxvYWRmaWxlKTsKKyAgICAgICAgICBpZighdGhpc191cmwpIHsKKyAgICAgICAgICAgIHJlcyA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgICBnb3RvIHNob3dfZXJyb3I7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIFZNUyBOb3RlOgorICAgICAgICAgICAqCisgICAgICAgICAgICogUmVhZGluZyBiaW5hcnkgZnJvbSBmaWxlcyBjYW4gYmUgYSBwcm9ibGVtLi4uICBPbmx5IEZJWEVELCBWQVIKKyAgICAgICAgICAgKiBldGMgV0lUSE9VVCBpbXBsaWVkIENDIHdpbGwgd29yayBPdGhlcnMgbmVlZCBhIFxuIGFwcGVuZGVkIHRvIGEKKyAgICAgICAgICAgKiBsaW5lCisgICAgICAgICAgICoKKyAgICAgICAgICAgKiAtIFN0YXQgZ2l2ZXMgYSBzaXplIGJ1dCB0aGlzIGlzIFVOUkVMSUFCTEUgaW4gVk1TIEFzIGEgZi5lLiBhCisgICAgICAgICAgICogZml4ZWQgZmlsZSB3aXRoIGltcGxpZWQgQ0MgbmVlZHMgdG8gaGF2ZSBhIGJ5dGUgYWRkZWQgZm9yIGV2ZXJ5CisgICAgICAgICAgICogcmVjb3JkIHByb2Nlc3NlZCwgdGhpcyBjYW4gYnkgZGVyaXZlZCBmcm9tIEZpbGVzaXplICYgcmVjb3Jkc2l6ZQorICAgICAgICAgICAqIGZvciBWQVJpYWJsZSByZWNvcmQgZmlsZXMgdGhlIHJlY29yZHMgbmVlZCB0byBiZSBjb3VudGVkISAgZm9yCisgICAgICAgICAgICogZXZlcnkgcmVjb3JkIGFkZCAxIGZvciBsaW5lZmVlZCBhbmQgc3VidHJhY3QgMiBmb3IgdGhlIHJlY29yZAorICAgICAgICAgICAqIGhlYWRlciBmb3IgVkFSSUFCTEUgaGVhZGVyIGZpbGVzIG9ubHkgdGhlIGJhcmUgcmVjb3JkIGRhdGEgbmVlZHMKKyAgICAgICAgICAgKiB0byBiZSBjb25zaWRlcmVkIHdpdGggb25lIGFwcGVuZGVkIGlmIGltcGxpZWQgQ0MKKyAgICAgICAgICAgKi8KKworICAgICAgICAgIGluZmQgPSBvcGVuKHVwbG9hZGZpbGUsIE9fUkRPTkxZIHwgT19CSU5BUlkpOworICAgICAgICAgIGlmKChpbmZkID09IC0xKSB8fCBmc3RhdChpbmZkLCAmZmlsZWluZm8pKSB7CisgICAgICAgICAgICBoZWxwZihjb25maWctPmVycm9ycywgIkNhbid0IG9wZW4gJyVzJyFcbiIsIHVwbG9hZGZpbGUpOworICAgICAgICAgICAgaWYoaW5mZCAhPSAtMSkgeworICAgICAgICAgICAgICBjbG9zZShpbmZkKTsKKyAgICAgICAgICAgICAgaW5mZCA9IFNURElOX0ZJTEVOTzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcyA9IENVUkxFX1JFQURfRVJST1I7CisgICAgICAgICAgICBnb3RvIHF1aXRfdXJsczsKKyAgICAgICAgICB9CisgICAgICAgICAgaW5mZG9wZW4gPSBUUlVFOworCisgICAgICAgICAgLyogd2UgaWdub3JlIGZpbGUgc2l6ZSBmb3IgY2hhci9ibG9jayBkZXZpY2VzLCBzb2NrZXRzLCBldGMuICovCisgICAgICAgICAgaWYoU19JU1JFRyhmaWxlaW5mby5zdF9tb2RlKSkKKyAgICAgICAgICAgIHVwbG9hZGZpbGVzaXplID0gZmlsZWluZm8uc3Rfc2l6ZTsKKworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYodXBsb2FkZmlsZSAmJiBzdGRpbl91cGxvYWQodXBsb2FkZmlsZSkpIHsKKyAgICAgICAgICAvKiBjb3VudCB0byBzZWUgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgYXV0aCBiaXQgc2V0CisgICAgICAgICAgICAgaW4gdGhlIGF1dGh0eXBlIGZpZWxkICovCisgICAgICAgICAgaW50IGF1dGhiaXRzID0gMDsKKyAgICAgICAgICBpbnQgYml0Y2hlY2sgPSAwOworICAgICAgICAgIHdoaWxlKGJpdGNoZWNrIDwgMzIpIHsKKyAgICAgICAgICAgIGlmKGNvbmZpZy0+YXV0aHR5cGUgJiAoMSA8PCBiaXRjaGVjaysrKSkgeworICAgICAgICAgICAgICBhdXRoYml0cysrOworICAgICAgICAgICAgICBpZihhdXRoYml0cyA+IDEpIHsKKyAgICAgICAgICAgICAgICAvKiBtb3JlIHRoYW4gb25lLCB3ZSdyZSBkb25lISAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBJZiB0aGUgdXNlciBoYXMgYWxzbyBzZWxlY3RlZCAtLWFueWF1dGggb3IgLS1wcm94eS1hbnlhdXRoCisgICAgICAgICAgICogd2Ugc2hvdWxkIHdhcm4gaGltL2hlci4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBpZihjb25maWctPnByb3h5YW55YXV0aCB8fCAoYXV0aGJpdHM+MSkpIHsKKyAgICAgICAgICAgIHdhcm5mKGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICJVc2luZyAtLWFueWF1dGggb3IgLS1wcm94eS1hbnlhdXRoIHdpdGggdXBsb2FkIGZyb20gc3RkaW4iCisgICAgICAgICAgICAgICAgICAiIGludm9sdmVzIGEgYmlnIHJpc2sgb2YgaXQgbm90IHdvcmtpbmcuIFVzZSBhIHRlbXBvcmFyeSIKKyAgICAgICAgICAgICAgICAgICIgZmlsZSBvciBhIGZpeGVkIGF1dGggdHlwZSBpbnN0ZWFkIVxuIik7CisgICAgICAgICAgfQorCisgICAgICAgICAgREVCVUdBU1NFUlQoaW5mZG9wZW4gPT0gRkFMU0UpOworICAgICAgICAgIERFQlVHQVNTRVJUKGluZmQgPT0gU1RESU5fRklMRU5PKTsKKworICAgICAgICAgIHNldF9iaW5tb2RlKHN0ZGluKTsKKyAgICAgICAgICBpZihjdXJseF9zdHJlcXVhbCh1cGxvYWRmaWxlLCAiLiIpKSB7CisgICAgICAgICAgICBpZihjdXJseF9ub25ibG9jaygoY3VybF9zb2NrZXRfdClpbmZkLCBUUlVFKSA8IDApCisgICAgICAgICAgICAgIHdhcm5mKGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgImZjbnRsIGZhaWxlZCBvbiBmZD0lZDogJXNcbiIsIGluZmQsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYodXBsb2FkZmlsZSAmJiBjb25maWctPnJlc3VtZV9mcm9tX2N1cnJlbnQpCisgICAgICAgICAgY29uZmlnLT5yZXN1bWVfZnJvbSA9IC0xOyAvKiAtMSB3aWxsIHRoZW4gZm9yY2UgZ2V0LWl0LXlvdXJzZWxmICovCisKKyAgICAgICAgaWYob3V0cHV0X2V4cGVjdGVkKHRoaXNfdXJsLCB1cGxvYWRmaWxlKQorICAgICAgICAgICAmJiBvdXRzLnN0cmVhbSAmJiBpc2F0dHkoZmlsZW5vKG91dHMuc3RyZWFtKSkpCisgICAgICAgICAgLyogd2Ugc2VuZCB0aGUgb3V0cHV0IHRvIGEgdHR5LCB0aGVyZWZvcmUgd2Ugc3dpdGNoIG9mZiB0aGUgcHJvZ3Jlc3MKKyAgICAgICAgICAgICBtZXRlciAqLworICAgICAgICAgIGNvbmZpZy0+bm9wcm9ncmVzcyA9IGNvbmZpZy0+aXNhdHR5ID0gVFJVRTsKKworICAgICAgICBpZih1cmxudW0gPiAxICYmICEoY29uZmlnLT5tdXRlKSkgeworICAgICAgICAgIGZwcmludGYoY29uZmlnLT5lcnJvcnMsICJcblslZC8lZF06ICVzIC0tPiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIGkrMSwgdXJsbnVtLCB0aGlzX3VybCwgb3V0ZmlsZSA/IG91dGZpbGUgOiAiPHN0ZG91dD4iKTsKKyAgICAgICAgICBpZihzZXBhcmF0b3IpCisgICAgICAgICAgICBwcmludGYoIiVzJXNcbiIsIENVUkxzZXBhcmF0b3IsIHRoaXNfdXJsKTsKKyAgICAgICAgfQorICAgICAgICBpZihodHRwZ2V0ZmllbGRzKSB7CisgICAgICAgICAgY2hhciAqdXJsYnVmZmVyOworICAgICAgICAgIC8qIEZpbmQgb3V0IHdoZXRoZXIgdGhlIHVybCBjb250YWlucyBhIGZpbGUgbmFtZSAqLworICAgICAgICAgIGNvbnN0IGNoYXIgKnBjID0gc3Ryc3RyKHRoaXNfdXJsLCAiOi8vIik7CisgICAgICAgICAgY2hhciBzZXAgPSAnPyc7CisgICAgICAgICAgaWYocGMpCisgICAgICAgICAgICBwYyArPSAzOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBjID0gdGhpc191cmw7CisKKyAgICAgICAgICBwYyA9IHN0cnJjaHIocGMsICcvJyk7IC8qIGNoZWNrIGZvciBhIHNsYXNoICovCisKKyAgICAgICAgICBpZihwYykgeworICAgICAgICAgICAgLyogdGhlcmUgaXMgYSBzbGFzaCBwcmVzZW50IGluIHRoZSBVUkwgKi8KKworICAgICAgICAgICAgaWYoc3RyY2hyKHBjLCAnPycpKQorICAgICAgICAgICAgICAvKiBPdWNoLCB0aGVyZSdzIGFscmVhZHkgYSBxdWVzdGlvbiBtYXJrIGluIHRoZSBVUkwgc3RyaW5nLCB3ZQorICAgICAgICAgICAgICAgICB0aGVuIGFwcGVuZCB0aGUgZGF0YSB3aXRoIGFuIGFtcGVyc2FuZCBzZXBhcmF0b3IgaW5zdGVhZCEgKi8KKyAgICAgICAgICAgICAgc2VwPScmJzsKKyAgICAgICAgICB9CisgICAgICAgICAgLyoKKyAgICAgICAgICAgKiBUaGVuIGFwcGVuZCA/IGZvbGxvd2VkIGJ5IHRoZSBnZXQgZmllbGRzIHRvIHRoZSB1cmwuCisgICAgICAgICAgICovCisgICAgICAgICAgdXJsYnVmZmVyID0gbWFsbG9jKHN0cmxlbih0aGlzX3VybCkgKyBzdHJsZW4oaHR0cGdldGZpZWxkcykgKyAzKTsKKyAgICAgICAgICBpZighdXJsYnVmZmVyKSB7CisgICAgICAgICAgICByZXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgZ290byBzaG93X2Vycm9yOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihwYykKKyAgICAgICAgICAgIHNwcmludGYodXJsYnVmZmVyLCAiJXMlYyVzIiwgdGhpc191cmwsIHNlcCwgaHR0cGdldGZpZWxkcyk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgLyogQXBwZW5kICAvIGJlZm9yZSB0aGUgPyB0byBjcmVhdGUgYSB3ZWxsLWZvcm1lZCB1cmwKKyAgICAgICAgICAgICAgIGlmIHRoZSB1cmwgY29udGFpbnMgYSBob3N0bmFtZSBvbmx5CisgICAgICAgICAgICAqLworICAgICAgICAgICAgc3ByaW50Zih1cmxidWZmZXIsICIlcy8/JXMiLCB0aGlzX3VybCwgaHR0cGdldGZpZWxkcyk7CisKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHRoaXNfdXJsKTsgLyogZnJlZSBwcmV2aW91cyBVUkwgKi8KKyAgICAgICAgICB0aGlzX3VybCA9IHVybGJ1ZmZlcjsgLyogdXNlIG91ciBuZXcgVVJMIGluc3RlYWQhICovCisgICAgICAgIH0KKworICAgICAgICBpZighY29uZmlnLT5lcnJvcnMpCisgICAgICAgICAgY29uZmlnLT5lcnJvcnMgPSBzdGRlcnI7CisKKyAgICAgICAgaWYoKCFvdXRmaWxlIHx8ICFzdHJjbXAob3V0ZmlsZSwgIi0iKSkgJiYgIWNvbmZpZy0+dXNlX2FzY2lpKSB7CisgICAgICAgICAgLyogV2UgZ2V0IHRoZSBvdXRwdXQgdG8gc3Rkb3V0IGFuZCB3ZSBoYXZlIG5vdCBnb3QgdGhlIEFTQ0lJL3RleHQKKyAgICAgICAgICAgICBmbGFnLCB0aGVuIHNldCBzdGRvdXQgdG8gYmUgYmluYXJ5ICovCisgICAgICAgICAgc2V0X2Jpbm1vZGUoc3Rkb3V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKGNvbmZpZy0+dGNwX25vZGVsYXkpCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfVENQX05PREVMQVksIDEpOworCisgICAgICAgIC8qIHdoZXJlIHRvIHN0b3JlICovCisgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFREFUQSwgJm91dHMpOworICAgICAgICAvKiB3aGF0IGNhbGwgdG8gd3JpdGUgKi8KKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgdG9vbF93cml0ZV9jYik7CisKKyAgICAgICAgLyogZm9yIHVwbG9hZHMgKi8KKyAgICAgICAgaW5wdXQuZmQgPSBpbmZkOworICAgICAgICBpbnB1dC5jb25maWcgPSBjb25maWc7CisgICAgICAgIC8qIE5vdGUgdGhhdCBpZiBDVVJMT1BUX1JFQURGVU5DVElPTiBpcyBmcmVhZCAodGhlIGRlZmF1bHQpLCB0aGVuCisgICAgICAgICAqIGxpYi90ZWxuZXQuYyB3aWxsIEN1cmxfcG9sbCgpIG9uIHRoZSBpbnB1dCBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgICogcmF0aGVyIHRoZW4gY2FsbGluZyB0aGUgUkVBREZVTkNUSU9OIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLgorICAgICAgICAgKiBUaGUgY2lyY3Vtc3RhbmNlcyBpbiB3aGljaCBpdCBpcyBwcmVmZXJhYmxlIHRvIGVuYWJsZSB0aGlzCisgICAgICAgICAqIGJlaGF2aW91ciwgYnkgb21pdHRpbmcgdG8gc2V0IHRoZSBSRUFERlVOQ1RJT04gJiBSRUFEREFUQSBvcHRpb25zLAorICAgICAgICAgKiBoYXZlIG5vdCBiZWVuIGRldGVybWluZWQuCisgICAgICAgICAqLworICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFEREFUQSwgJmlucHV0KTsKKyAgICAgICAgLyogd2hhdCBjYWxsIHRvIHJlYWQgKi8KKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCB0b29sX3JlYWRfY2IpOworCisgICAgICAgIC8qIGluIDcuMTguMCwgdGhlIENVUkxPUFRfU0VFS0ZVTkNUSU9OL0RBVEEgcGFpciBpcyB0YWtpbmcgb3ZlciB3aGF0CisgICAgICAgICAgIENVUkxPUFRfSU9DVExGVU5DVElPTi9EQVRBIHBhaXIgcHJldmlvdXNseSBwcm92aWRlZCBmb3Igc2Vla2luZyAqLworICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TRUVLREFUQSwgJmlucHV0KTsKKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfU0VFS0ZVTkNUSU9OLCB0b29sX3NlZWtfY2IpOworCisgICAgICAgIGlmKGNvbmZpZy0+cmVjdnBlcnNlY29uZCkKKyAgICAgICAgICAvKiB0ZWxsIGxpYmN1cmwgdG8gdXNlIGEgc21hbGxlciBzaXplZCBidWZmZXIgYXMgaXQgYWxsb3dzIHVzIHRvCisgICAgICAgICAgICAgbWFrZSBiZXR0ZXIgc2xlZXBzISA3LjkuOSBzdHVmZiEgKi8KKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9CVUZGRVJTSVpFLCBjb25maWctPnJlY3ZwZXJzZWNvbmQpOworCisgICAgICAgIC8qIHNpemUgb2YgdXBsb2FkZWQgZmlsZTogKi8KKyAgICAgICAgaWYodXBsb2FkZmlsZXNpemUgIT0gLTEpCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU5GSUxFU0laRV9MQVJHRSwgdXBsb2FkZmlsZXNpemUpOworICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfVVJMLCB0aGlzX3VybCk7ICAgICAvKiB3aGF0IHRvIGZldGNoICovCisgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX05PUFJPR1JFU1MsIGNvbmZpZy0+bm9wcm9ncmVzcyk7CisgICAgICAgIGlmKGNvbmZpZy0+bm9fYm9keSkgeworICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX05PQk9EWSwgMSk7CisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSLCAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSLCBjb25maWctPmluY2x1ZGVfaGVhZGVycyk7CisKKyNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfUFJPWFkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUT0RPOiBNYWtlIHRoaXMgYSBydW4tdGltZSBjaGVjayBpbnN0ZWFkIG9mIGNvbXBpbGUtdGltZSBvbmUuICovCisKKyAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfUFJPWFksIGNvbmZpZy0+cHJveHkpOworICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9QUk9YWVVTRVJQV0QsIGNvbmZpZy0+cHJveHl1c2VycHdkKTsKKworICAgICAgICAgIC8qIG5ldyBpbiBsaWJjdXJsIDcuMyAqLworICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBQUk9YWVRVTk5FTCwgY29uZmlnLT5wcm94eXR1bm5lbCk7CisKKyAgICAgICAgICAvKiBuZXcgaW4gbGliY3VybCA3LjUgKi8KKyAgICAgICAgICBpZihjb25maWctPnByb3h5KQorICAgICAgICAgICAgbXlfc2V0b3B0X2VudW0oY3VybCwgQ1VSTE9QVF9QUk9YWVRZUEUsIGNvbmZpZy0+cHJveHl2ZXIpOworCisgICAgICAgICAgLyogbmV3IGluIGxpYmN1cmwgNy4xMCAqLworICAgICAgICAgIGlmKGNvbmZpZy0+c29ja3Nwcm94eSkgeworICAgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1BST1hZLCBjb25maWctPnNvY2tzcHJveHkpOworICAgICAgICAgICAgbXlfc2V0b3B0X2VudW0oY3VybCwgQ1VSTE9QVF9QUk9YWVRZUEUsIGNvbmZpZy0+c29ja3N2ZXIpOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qIG5ldyBpbiBsaWJjdXJsIDcuMTAuNiAqLworICAgICAgICAgIGlmKGNvbmZpZy0+cHJveHlhbnlhdXRoKQorICAgICAgICAgICAgbXlfc2V0b3B0X2ZsYWdzKGN1cmwsIENVUkxPUFRfUFJPWFlBVVRILCBDVVJMQVVUSF9BTlkpOworICAgICAgICAgIGVsc2UgaWYoY29uZmlnLT5wcm94eW5lZ290aWF0ZSkKKyAgICAgICAgICAgIG15X3NldG9wdF9mbGFncyhjdXJsLCBDVVJMT1BUX1BST1hZQVVUSCwgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFKTsKKyAgICAgICAgICBlbHNlIGlmKGNvbmZpZy0+cHJveHludGxtKQorICAgICAgICAgICAgbXlfc2V0b3B0X2ZsYWdzKGN1cmwsIENVUkxPUFRfUFJPWFlBVVRILCBDVVJMQVVUSF9OVExNKTsKKyAgICAgICAgICBlbHNlIGlmKGNvbmZpZy0+cHJveHlkaWdlc3QpCisgICAgICAgICAgICBteV9zZXRvcHRfZmxhZ3MoY3VybCwgQ1VSTE9QVF9QUk9YWUFVVEgsIENVUkxBVVRIX0RJR0VTVCk7CisgICAgICAgICAgZWxzZSBpZihjb25maWctPnByb3h5YmFzaWMpCisgICAgICAgICAgICBteV9zZXRvcHRfZmxhZ3MoY3VybCwgQ1VSTE9QVF9QUk9YWUFVVEgsIENVUkxBVVRIX0JBU0lDKTsKKworICAgICAgICAgIC8qIG5ldyBpbiBsaWJjdXJsIDcuMTkuNCAqLworICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX05PUFJPWFksIGNvbmZpZy0+bm9wcm94eSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCBjb25maWctPmZhaWxvbmVycm9yKTsKKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVBMT0FELCB1cGxvYWRmaWxlP1RSVUU6RkFMU0UpOworICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9ESVJMSVNUT05MWSwgY29uZmlnLT5kaXJsaXN0b25seSk7CisgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX0FQUEVORCwgY29uZmlnLT5mdHBfYXBwZW5kKTsKKworICAgICAgICBpZihjb25maWctPm5ldHJjX29wdCkKKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9ORVRSQywgQ1VSTF9ORVRSQ19PUFRJT05BTCk7CisgICAgICAgIGVsc2UgaWYoY29uZmlnLT5uZXRyYyB8fCBjb25maWctPm5ldHJjX2ZpbGUpCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfTkVUUkMsIENVUkxfTkVUUkNfUkVRVUlSRUQpOworICAgICAgICBlbHNlCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfTkVUUkMsIENVUkxfTkVUUkNfSUdOT1JFRCk7CisKKyAgICAgICAgaWYoY29uZmlnLT5uZXRyY19maWxlKQorICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX05FVFJDX0ZJTEUsIGNvbmZpZy0+bmV0cmNfZmlsZSk7CisKKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfVFJBTlNGRVJURVhULCBjb25maWctPnVzZV9hc2NpaSk7CisgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9VU0VSUFdELCBjb25maWctPnVzZXJwd2QpOworICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfUkFOR0UsIGNvbmZpZy0+cmFuZ2UpOworICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgZXJyb3JidWZmZXIpOworICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9USU1FT1VULCBjb25maWctPnRpbWVvdXQpOworCisgICAgICAgIGlmKGJ1aWx0X2luX3Byb3RvcyAmIENVUkxQUk9UT19IVFRQKSB7CisKKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5mb2xsb3dsb2NhdGlvbik7CisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfVU5SRVNUUklDVEVEX0FVVEgsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+dW5yZXN0cmljdGVkX2F1dGgpOworCisgICAgICAgICAgc3dpdGNoKGNvbmZpZy0+aHR0cHJlcSkgeworICAgICAgICAgIGNhc2UgSFRUUFJFUV9TSU1QTEVQT1NUOgorICAgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+cG9zdGZpZWxkcyk7CisgICAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFX0xBUkdFLAorICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+cG9zdGZpZWxkc2l6ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEhUVFBSRVFfUE9TVDoKKyAgICAgICAgICAgIG15X3NldG9wdF9odHRwcG9zdChjdXJsLCBDVVJMT1BUX0hUVFBQT1NULCBjb25maWctPmh0dHBwb3N0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfUkVGRVJFUiwgY29uZmlnLT5yZWZlcmVyKTsKKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9BVVRPUkVGRVJFUiwgY29uZmlnLT5hdXRvcmVmZXJlcik7CisgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1VTRVJBR0VOVCwgY29uZmlnLT51c2VyYWdlbnQpOworICAgICAgICAgIG15X3NldG9wdF9zbGlzdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGNvbmZpZy0+aGVhZGVycyk7CisKKyAgICAgICAgICAvKiBuZXcgaW4gbGliY3VybCA3LjUgKi8KKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9NQVhSRURJUlMsIGNvbmZpZy0+bWF4cmVkaXJzKTsKKworICAgICAgICAgIC8qIG5ldyBpbiBsaWJjdXJsIDcuOS4xICovCisgICAgICAgICAgaWYoY29uZmlnLT5odHRwdmVyc2lvbikKKyAgICAgICAgICAgIG15X3NldG9wdF9lbnVtKGN1cmwsIENVUkxPUFRfSFRUUF9WRVJTSU9OLCBjb25maWctPmh0dHB2ZXJzaW9uKTsKKworICAgICAgICAgIC8qIG5ldyBpbiBsaWJjdXJsIDcuMTAuNiAoZGVmYXVsdCBpcyBCYXNpYykgKi8KKyAgICAgICAgICBpZihjb25maWctPmF1dGh0eXBlKQorICAgICAgICAgICAgbXlfc2V0b3B0X2ZsYWdzKGN1cmwsIENVUkxPUFRfSFRUUEFVVEgsIGNvbmZpZy0+YXV0aHR5cGUpOworCisgICAgICAgICAgLyogY3VybCA3LjE5LjEgKHRoZSAzMDEgdmVyc2lvbiBleGlzdGVkIGluIDcuMTguMikgKi8KKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NUUkVESVIsIGNvbmZpZy0+cG9zdDMwMSB8CisgICAgICAgICAgICAgICAgICAgIChjb25maWctPnBvc3QzMDIgPyBDVVJMX1JFRElSX1BPU1RfMzAyIDogRkFMU0UpKTsKKworICAgICAgICAgIC8qIG5ldyBpbiBsaWJjdXJsIDcuMjEuNiAqLworICAgICAgICAgIGlmKGNvbmZpZy0+ZW5jb2RpbmcpCisgICAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfQUNDRVBUX0VOQ09ESU5HLCAiIik7CisKKyAgICAgICAgICAvKiBuZXcgaW4gbGliY3VybCA3LjIxLjYgKi8KKyAgICAgICAgICBpZihjb25maWctPnRyX2VuY29kaW5nKQorICAgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfVFJBTlNGRVJfRU5DT0RJTkcsIDEpOworCisgICAgICAgIH0gLyogKGJ1aWx0X2luX3Byb3RvcyAmIENVUkxQUk9UT19IVFRQKSAqLworCisgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9GVFBQT1JULCBjb25maWctPmZ0cHBvcnQpOworICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9MT1dfU1BFRURfTElNSVQsCisgICAgICAgICAgICAgICAgICBjb25maWctPmxvd19zcGVlZF9saW1pdCk7CisgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX0xPV19TUEVFRF9USU1FLCBjb25maWctPmxvd19zcGVlZF90aW1lKTsKKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfTUFYX1NFTkRfU1BFRURfTEFSR0UsCisgICAgICAgICAgICAgICAgICBjb25maWctPnNlbmRwZXJzZWNvbmQpOworICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9NQVhfUkVDVl9TUEVFRF9MQVJHRSwKKyAgICAgICAgICAgICAgICAgIGNvbmZpZy0+cmVjdnBlcnNlY29uZCk7CisgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFU1VNRV9GUk9NX0xBUkdFLAorICAgICAgICAgICAgICAgICAgY29uZmlnLT51c2VfcmVzdW1lP2NvbmZpZy0+cmVzdW1lX2Zyb206MCk7CisKKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMQ0VSVCwgY29uZmlnLT5jZXJ0KTsKKyAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1NTTENFUlRUWVBFLCBjb25maWctPmNlcnRfdHlwZSk7CisgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTEtFWSwgY29uZmlnLT5rZXkpOworICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfU1NMS0VZVFlQRSwgY29uZmlnLT5rZXlfdHlwZSk7CisgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9LRVlQQVNTV0QsIGNvbmZpZy0+a2V5X3Bhc3N3ZCk7CisKKyAgICAgICAgaWYoYnVpbHRfaW5fcHJvdG9zICYgKENVUkxQUk9UT19TQ1B8Q1VSTFBST1RPX1NGVFApKSB7CisKKyAgICAgICAgICAvKiBTU0ggYW5kIFNTTCBwcml2YXRlIGtleSB1c2VzIHNhbWUgY29tbWFuZC1saW5lIG9wdGlvbiAqLworICAgICAgICAgIC8qIG5ldyBpbiBsaWJjdXJsIDcuMTYuMSAqLworICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9TU0hfUFJJVkFURV9LRVlGSUxFLCBjb25maWctPmtleSk7CisgICAgICAgICAgLyogbmV3IGluIGxpYmN1cmwgNy4xNi4xICovCisgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1NTSF9QVUJMSUNfS0VZRklMRSwgY29uZmlnLT5wdWJrZXkpOworCisgICAgICAgICAgLyogbmV3IGluIGxpYmN1cmwgNy4xNy4xOiBTU0ggaG9zdCBrZXkgbWQ1IGNoZWNraW5nIGFsbG93cyB1cworICAgICAgICAgICAgIHRvIGZhaWwgaWYgd2UgYXJlIG5vdCB0YWxraW5nIHRvIHdobyB3ZSB0aGluayB3ZSBzaG91bGQgKi8KKyAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfU1NIX0hPU1RfUFVCTElDX0tFWV9NRDUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmhvc3RwdWJtZDUpOworICAgICAgICB9CisKKyAgICAgICAgaWYoY29uZmlnLT5jYWNlcnQpCisgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX0NBSU5GTywgY29uZmlnLT5jYWNlcnQpOworICAgICAgICBpZihjb25maWctPmNhcGF0aCkKKyAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfQ0FQQVRILCBjb25maWctPmNhcGF0aCk7CisgICAgICAgIGlmKGNvbmZpZy0+Y3JsZmlsZSkKKyAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfQ1JMRklMRSwgY29uZmlnLT5jcmxmaWxlKTsKKworICAgICAgICBpZihjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fU1NMKSB7CisgICAgICAgICAgaWYoY29uZmlnLT5pbnNlY3VyZV9vaykgeworICAgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDBMKTsKKyAgICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAxTCk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDFMKTsKKyAgICAgICAgICAgIC8qIGxpYmN1cmwgZGVmYXVsdCBpcyBzdHJpY3QgdmVyaWZ5aG9zdCAtPiAyTCAgICovCisgICAgICAgICAgICAvKiBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMkwpOyAqLworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKGJ1aWx0X2luX3Byb3RvcyAmIChDVVJMUFJPVE9fU0NQfENVUkxQUk9UT19TRlRQKSkgeworICAgICAgICAgIGlmKCFjb25maWctPmluc2VjdXJlX29rKSB7CisgICAgICAgICAgICBjaGFyICpob21lOworICAgICAgICAgICAgY2hhciAqZmlsZTsKKyAgICAgICAgICAgIHJlcyA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgICBob21lID0gaG9tZWRpcigpOworICAgICAgICAgICAgaWYoaG9tZSkgeworICAgICAgICAgICAgICBmaWxlID0gYXByaW50ZigiJXMvJXNzc2gva25vd25faG9zdHMiLCBob21lLCBET1RfQ0hBUik7CisgICAgICAgICAgICAgIGlmKGZpbGUpIHsKKyAgICAgICAgICAgICAgICAvKiBuZXcgaW4gY3VybCA3LjE5LjYgKi8KKyAgICAgICAgICAgICAgICByZXMgPSByZXNfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1NTSF9LTk9XTkhPU1RTLCBmaWxlKTsKKyAgICAgICAgICAgICAgICBjdXJsX2ZyZWUoZmlsZSk7CisgICAgICAgICAgICAgICAgaWYocmVzID09IENVUkxFX1VOS05PV05fT1BUSU9OKQorICAgICAgICAgICAgICAgICAgLyogbGlic3NoMiB2ZXJzaW9uIG9sZGVyIHRoYW4gMS4xLjEgKi8KKyAgICAgICAgICAgICAgICAgIHJlcyA9IENVUkxFX09LOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUoaG9tZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihyZXMpCisgICAgICAgICAgICAgIGdvdG8gc2hvd19lcnJvcjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZihjb25maWctPm5vX2JvZHkgfHwgY29uZmlnLT5yZW1vdGVfdGltZSkgeworICAgICAgICAgIC8qIG5vIGJvZHkgb3IgdXNlIHJlbW90ZSB0aW1lICovCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfRklMRVRJTUUsIFRSVUUpOworICAgICAgICB9CisKKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ1JMRiwgY29uZmlnLT5jcmxmKTsKKyAgICAgICAgbXlfc2V0b3B0X3NsaXN0KGN1cmwsIENVUkxPUFRfUVVPVEUsIGNvbmZpZy0+cXVvdGUpOworICAgICAgICBteV9zZXRvcHRfc2xpc3QoY3VybCwgQ1VSTE9QVF9QT1NUUVVPVEUsIGNvbmZpZy0+cG9zdHF1b3RlKTsKKyAgICAgICAgbXlfc2V0b3B0X3NsaXN0KGN1cmwsIENVUkxPUFRfUFJFUVVPVEUsIGNvbmZpZy0+cHJlcXVvdGUpOworCisjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9DT09LSUVTKQorICAgICAgICB7CisgICAgICAgICAgLyogVE9ETzogTWFrZSB0aGlzIGEgcnVuLXRpbWUgY2hlY2sgaW5zdGVhZCBvZiBjb21waWxlLXRpbWUgb25lLiAqLworCisgICAgICAgICAgaWYoY29uZmlnLT5jb29raWUpCisgICAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfQ09PS0lFLCBjb25maWctPmNvb2tpZSk7CisKKyAgICAgICAgICBpZihjb25maWctPmNvb2tpZWZpbGUpCisgICAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfQ09PS0lFRklMRSwgY29uZmlnLT5jb29raWVmaWxlKTsKKworICAgICAgICAgIC8qIG5ldyBpbiBsaWJjdXJsIDcuOSAqLworICAgICAgICAgIGlmKGNvbmZpZy0+Y29va2llamFyKQorICAgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX0NPT0tJRUpBUiwgY29uZmlnLT5jb29raWVqYXIpOworCisgICAgICAgICAgLyogbmV3IGluIGxpYmN1cmwgNy45LjcgKi8KKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT09LSUVTRVNTSU9OLCBjb25maWctPmNvb2tpZXNlc3Npb24pOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBteV9zZXRvcHRfZW51bShjdXJsLCBDVVJMT1BUX1NTTFZFUlNJT04sIGNvbmZpZy0+c3NsX3ZlcnNpb24pOworICAgICAgICBteV9zZXRvcHRfZW51bShjdXJsLCBDVVJMT1BUX1RJTUVDT05ESVRJT04sIGNvbmZpZy0+dGltZWNvbmQpOworICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9USU1FVkFMVUUsIGNvbmZpZy0+Y29uZHRpbWUpOworICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgY29uZmlnLT5jdXN0b21yZXF1ZXN0KTsKKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1RERVJSLCBjb25maWctPmVycm9ycyk7CisKKyAgICAgICAgLyogdGhyZWUgbmV3IG9uZXMgaW4gbGliY3VybCA3LjM6ICovCisgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9JTlRFUkZBQ0UsIGNvbmZpZy0+aWZhY2UpOworICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfS1JCTEVWRUwsIGNvbmZpZy0+a3JibGV2ZWwpOworCisgICAgICAgIHByb2dyZXNzYmFyaW5pdCgmcHJvZ3Jlc3NiYXIsIGNvbmZpZyk7CisgICAgICAgIGlmKChjb25maWctPnByb2dyZXNzbW9kZSA9PSBDVVJMX1BST0dSRVNTX0JBUikgJiYKKyAgICAgICAgICAgIWNvbmZpZy0+bm9wcm9ncmVzcyAmJiAhY29uZmlnLT5tdXRlKSB7CisgICAgICAgICAgLyogd2Ugd2FudCB0aGUgYWx0ZXJuYXRpdmUgc3R5bGUsIHRoZW4gd2UgaGF2ZSB0byBpbXBsZW1lbnQgaXQKKyAgICAgICAgICAgICBvdXJzZWx2ZXMhICovCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiwgdG9vbF9wcm9ncmVzc19jYik7CisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFJPR1JFU1NEQVRBLCAmcHJvZ3Jlc3NiYXIpOworICAgICAgICB9CisKKyAgICAgICAgLyogbmV3IGluIGxpYmN1cmwgNy42LjI6ICovCisgICAgICAgIG15X3NldG9wdF9zbGlzdChjdXJsLCBDVVJMT1BUX1RFTE5FVE9QVElPTlMsIGNvbmZpZy0+dGVsbmV0X29wdGlvbnMpOworCisgICAgICAgIC8qIG5ldyBpbiBsaWJjdXJsIDcuNzogKi8KKyAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1JBTkRPTV9GSUxFLCBjb25maWctPnJhbmRvbV9maWxlKTsKKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfRUdEU09DS0VULCBjb25maWctPmVnZF9maWxlKTsKKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIGNvbmZpZy0+Y29ubmVjdHRpbWVvdXQpOworCisgICAgICAgIGlmKGNvbmZpZy0+Y2lwaGVyX2xpc3QpCisgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1NTTF9DSVBIRVJfTElTVCwgY29uZmlnLT5jaXBoZXJfbGlzdCk7CisKKyAgICAgICAgLyogbmV3IGluIGxpYmN1cmwgNy45LjI6ICovCisgICAgICAgIGlmKGNvbmZpZy0+ZGlzYWJsZV9lcHN2KQorICAgICAgICAgIC8qIGRpc2FibGUgaXQgKi8KKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GVFBfVVNFX0VQU1YsIEZBTFNFKTsKKworICAgICAgICAvKiBuZXcgaW4gbGliY3VybCA3LjEwLjUgKi8KKyAgICAgICAgaWYoY29uZmlnLT5kaXNhYmxlX2VwcnQpCisgICAgICAgICAgLyogZGlzYWJsZSBpdCAqLworICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX0ZUUF9VU0VfRVBSVCwgRkFMU0UpOworCisgICAgICAgIGlmKGNvbmZpZy0+dHJhY2V0eXBlICE9IFRSQUNFX05PTkUpIHsKKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OLCB0b29sX2RlYnVnX2NiKTsKKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9ERUJVR0RBVEEsIGNvbmZpZyk7CisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgVFJVRSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBuZXcgaW4gY3VybCA3LjkuMyAqLworICAgICAgICBpZihjb25maWctPmVuZ2luZSkgeworICAgICAgICAgIHJlcyA9IHJlc19zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfU1NMRU5HSU5FLCBjb25maWctPmVuZ2luZSk7CisgICAgICAgICAgaWYocmVzKQorICAgICAgICAgICAgZ290byBzaG93X2Vycm9yOworICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTEVOR0lORV9ERUZBVUxULCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG5ldyBpbiBjdXJsIDcuMTAuNywgZXh0ZW5kZWQgaW4gNy4xOS40IGJ1dCB0aGlzIG9ubHkgc2V0cyAwIG9yIDEgKi8KKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfRlRQX0NSRUFURV9NSVNTSU5HX0RJUlMsCisgICAgICAgICAgICAgICAgICBjb25maWctPmZ0cF9jcmVhdGVfZGlycyk7CisKKyAgICAgICAgLyogbmV3IGluIGN1cmwgNy4xMC44ICovCisgICAgICAgIGlmKGNvbmZpZy0+bWF4X2ZpbGVzaXplKQorICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX01BWEZJTEVTSVpFX0xBUkdFLAorICAgICAgICAgICAgICAgICAgICBjb25maWctPm1heF9maWxlc2l6ZSk7CisKKyAgICAgICAgaWYoNCA9PSBjb25maWctPmlwX3ZlcnNpb24pCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfSVBSRVNPTFZFLCBDVVJMX0lQUkVTT0xWRV9WNCk7CisgICAgICAgIGVsc2UgaWYoNiA9PSBjb25maWctPmlwX3ZlcnNpb24pCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfSVBSRVNPTFZFLCBDVVJMX0lQUkVTT0xWRV9WNik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JUFJFU09MVkUsIENVUkxfSVBSRVNPTFZFX1dIQVRFVkVSKTsKKworICAgICAgICAvKiBuZXcgaW4gY3VybCA3LjE1LjUgKi8KKyAgICAgICAgaWYoY29uZmlnLT5mdHBfc3NsX3JlcWQpCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVNFX1NTTCwgQ1VSTFVTRVNTTF9BTEwpOworCisgICAgICAgIC8qIG5ldyBpbiBjdXJsIDcuMTEuMCAqLworICAgICAgICBlbHNlIGlmKGNvbmZpZy0+ZnRwX3NzbCkKKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VU0VfU1NMLCBDVVJMVVNFU1NMX1RSWSk7CisKKyAgICAgICAgLyogbmV3IGluIGN1cmwgNy4xNi4wICovCisgICAgICAgIGVsc2UgaWYoY29uZmlnLT5mdHBfc3NsX2NvbnRyb2wpCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVNFX1NTTCwgQ1VSTFVTRVNTTF9DT05UUk9MKTsKKworICAgICAgICAvKiBuZXcgaW4gY3VybCA3LjE2LjEgKi8KKyAgICAgICAgaWYoY29uZmlnLT5mdHBfc3NsX2NjYykKKyAgICAgICAgICBteV9zZXRvcHRfZW51bShjdXJsLCBDVVJMT1BUX0ZUUF9TU0xfQ0NDLCBjb25maWctPmZ0cF9zc2xfY2NjX21vZGUpOworCisjaWYgZGVmaW5lZChIQVZFX0dTU0FQSSkgfHwgZGVmaW5lZChVU0VfV0lORE9XU19TU1BJKQorICAgICAgICB7CisgICAgICAgICAgLyogVE9ETzogTWFrZSB0aGlzIGEgcnVuLXRpbWUgY2hlY2sgaW5zdGVhZCBvZiBjb21waWxlLXRpbWUgb25lLiAqLworCisgICAgICAgICAgLyogbmV3IGluIGN1cmwgNy4xOS40ICovCisgICAgICAgICAgaWYoY29uZmlnLT5zb2NrczVfZ3NzYXBpX3NlcnZpY2UpCisgICAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfU09DS1M1X0dTU0FQSV9TRVJWSUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPnNvY2tzNV9nc3NhcGlfc2VydmljZSk7CisKKyAgICAgICAgICAvKiBuZXcgaW4gY3VybCA3LjE5LjQgKi8KKyAgICAgICAgICBpZihjb25maWctPnNvY2tzNV9nc3NhcGlfbmVjKQorICAgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1NPQ0tTNV9HU1NBUElfTkVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPnNvY2tzNV9nc3NhcGlfbmVjKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIC8qIGN1cmwgNy4xMy4wICovCisgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9GVFBfQUNDT1VOVCwgY29uZmlnLT5mdHBfYWNjb3VudCk7CisKKyAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfSUdOT1JFX0NPTlRFTlRfTEVOR1RILCBjb25maWctPmlnbm9yZWNsKTsKKworICAgICAgICAvKiBjdXJsIDcuMTQuMiAqLworICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GVFBfU0tJUF9QQVNWX0lQLCBjb25maWctPmZ0cF9za2lwX2lwKTsKKworICAgICAgICAvKiBjdXJsIDcuMTUuMSAqLworICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GVFBfRklMRU1FVEhPRCwgY29uZmlnLT5mdHBfZmlsZW1ldGhvZCk7CisKKyAgICAgICAgLyogY3VybCA3LjE1LjIgKi8KKyAgICAgICAgaWYoY29uZmlnLT5sb2NhbHBvcnQpIHsKKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9MT0NBTFBPUlQsIGNvbmZpZy0+bG9jYWxwb3J0KTsKKyAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfTE9DQUxQT1JUUkFOR0UsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmxvY2FscG9ydHJhbmdlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGN1cmwgNy4xNS41ICovCisgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9GVFBfQUxURVJOQVRJVkVfVE9fVVNFUiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmZ0cF9hbHRlcm5hdGl2ZV90b191c2VyKTsKKworICAgICAgICAvKiBjdXJsIDcuMTYuMCAqLworICAgICAgICBpZihjb25maWctPmRpc2FibGVfc2Vzc2lvbmlkKQorICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9TRVNTSU9OSURfQ0FDSEUsCisgICAgICAgICAgICAgICAgICAgICFjb25maWctPmRpc2FibGVfc2Vzc2lvbmlkKTsKKworICAgICAgICAvKiBjdXJsIDcuMTYuMiAqLworICAgICAgICBpZihjb25maWctPnJhdykgeworICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBfQ09OVEVOVF9ERUNPRElORywgRkFMU0UpOworICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBfVFJBTlNGRVJfREVDT0RJTkcsIEZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGN1cmwgNy4xNy4xICovCisgICAgICAgIGlmKCFjb25maWctPm5va2VlcGFsaXZlKSB7CisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfVENQX0tFRVBBTElWRSwgMUwpOworICAgICAgICAgIGlmKGNvbmZpZy0+YWxpdmV0aW1lICE9IDApIHsKKyNpZiAhZGVmaW5lZChUQ1BfS0VFUElETEUpIHx8ICFkZWZpbmVkKFRDUF9LRUVQSU5UVkwpCisgICAgICAgICAgICB3YXJuZihjb25maWcsICJLZWVwLWFsaXZlIGZ1bmN0aW9uYWxpdHkgc29tZXdoYXQgY3JpcHBsZWQgZHVlIHRvICIKKyAgICAgICAgICAgICAgICAibWlzc2luZyBzdXBwb3J0IGluIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSFcbiIpOworI2VuZGlmCisgICAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9UQ1BfS0VFUElETEUsIGNvbmZpZy0+YWxpdmV0aW1lKTsKKyAgICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1RDUF9LRUVQSU5UVkwsIGNvbmZpZy0+YWxpdmV0aW1lKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1RDUF9LRUVQQUxJVkUsIDBMKTsKKworICAgICAgICAvKiBjdXJsIDcuMjAuMCAqLworICAgICAgICBpZihjb25maWctPnRmdHBfYmxrc2l6ZSkKKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9URlRQX0JMS1NJWkUsIGNvbmZpZy0+dGZ0cF9ibGtzaXplKTsKKworICAgICAgICBpZihjb25maWctPm1haWxfZnJvbSkKKyAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfTUFJTF9GUk9NLCBjb25maWctPm1haWxfZnJvbSk7CisKKyAgICAgICAgaWYoY29uZmlnLT5tYWlsX3JjcHQpCisgICAgICAgICAgbXlfc2V0b3B0X3NsaXN0KGN1cmwsIENVUkxPUFRfTUFJTF9SQ1BULCBjb25maWctPm1haWxfcmNwdCk7CisKKyAgICAgICAgLyogY3VybCA3LjIwLnggKi8KKyAgICAgICAgaWYoY29uZmlnLT5mdHBfcHJldCkKKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GVFBfVVNFX1BSRVQsIFRSVUUpOworCisgICAgICAgIGlmKGNvbmZpZy0+cHJvdG9fcHJlc2VudCkKKyAgICAgICAgICBteV9zZXRvcHRfZmxhZ3MoY3VybCwgQ1VSTE9QVF9QUk9UT0NPTFMsIGNvbmZpZy0+cHJvdG8pOworICAgICAgICBpZihjb25maWctPnByb3RvX3JlZGlyX3ByZXNlbnQpCisgICAgICAgICAgbXlfc2V0b3B0X2ZsYWdzKGN1cmwsIENVUkxPUFRfUkVESVJfUFJPVE9DT0xTLCBjb25maWctPnByb3RvX3JlZGlyKTsKKworICAgICAgICBpZigodXJsbm9kZS0+ZmxhZ3MgJiBHRVRPVVRfVVNFUkVNT1RFKQorICAgICAgICAgICAmJiBjb25maWctPmNvbnRlbnRfZGlzcG9zaXRpb24pIHsKKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IRUFERVJGVU5DVElPTiwgdG9vbF9oZWFkZXJfY2IpOworICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUkRBVEEsICZvdXRzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiBpZiBIRUFERVJGVU5DVElPTiB3YXMgc2V0IHRvIHNvbWV0aGluZyBpbiB0aGUgcHJldmlvdXMgbG9vcCwgaXQKKyAgICAgICAgICAgICBpcyBpbXBvcnRhbnQgdGhhdCB3ZSBzZXQgaXQgKGJhY2spIHRvIE5VTEwgbm93ICovCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSRlVOQ1RJT04sIE5VTEwpOworICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUkRBVEEsIGNvbmZpZy0+aGVhZGVyZmlsZT8maGVhZHM6TlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZihjb25maWctPnJlc29sdmUpCisgICAgICAgICAgLyogbmV3IGluIDcuMjEuMyAqLworICAgICAgICAgIG15X3NldG9wdF9zbGlzdChjdXJsLCBDVVJMT1BUX1JFU09MVkUsIGNvbmZpZy0+cmVzb2x2ZSk7CisKKyAgICAgICAgLyogbmV3IGluIDcuMjEuNCAqLworICAgICAgICBpZihjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fVExTQVVUSF9TUlApIHsKKyAgICAgICAgICBpZihjb25maWctPnRsc191c2VybmFtZSkKKyAgICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9UTFNBVVRIX1VTRVJOQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPnRsc191c2VybmFtZSk7CisgICAgICAgICAgaWYoY29uZmlnLT50bHNfcGFzc3dvcmQpCisgICAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfVExTQVVUSF9QQVNTV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT50bHNfcGFzc3dvcmQpOworICAgICAgICAgIGlmKGNvbmZpZy0+dGxzX2F1dGh0eXBlKQorICAgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1RMU0FVVEhfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT50bHNfYXV0aHR5cGUpOworICAgICAgICB9CisKKyAgICAgICAgLyogbmV3IGluIDcuMjIuMCAqLworICAgICAgICBpZihjb25maWctPmdzc2FwaV9kZWxlZ2F0aW9uKQorICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9HU1NBUElfREVMRUdBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+Z3NzYXBpX2RlbGVnYXRpb24pOworCisgICAgICAgIC8qIG5ldyBpbiA3LjI1LjAgKi8KKyAgICAgICAgaWYoY29uZmlnLT5zc2xfYWxsb3dfYmVhc3QpCisgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX09QVElPTlMsIChsb25nKUNVUkxTU0xPUFRfQUxMT1dfQkVBU1QpOworCisgICAgICAgIGlmKGNvbmZpZy0+bWFpbF9hdXRoKQorICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9NQUlMX0FVVEgsIGNvbmZpZy0+bWFpbF9hdXRoKTsKKworICAgICAgICAvKiBpbml0aWFsaXplIHJldHJ5IHZhcnMgZm9yIGxvb3AgYmVsb3cgKi8KKyAgICAgICAgcmV0cnlfc2xlZXBfZGVmYXVsdCA9IChjb25maWctPnJldHJ5X2RlbGF5KSA/CisgICAgICAgICAgY29uZmlnLT5yZXRyeV9kZWxheSoxMDAwTCA6IFJFVFJZX1NMRUVQX0RFRkFVTFQ7IC8qIG1zICovCisKKyAgICAgICAgcmV0cnlfbnVtcmV0cmllcyA9IGNvbmZpZy0+cmVxX3JldHJ5OworICAgICAgICByZXRyeV9zbGVlcCA9IHJldHJ5X3NsZWVwX2RlZmF1bHQ7IC8qIG1zICovCisgICAgICAgIHJldHJ5c3RhcnQgPSB0dm5vdygpOworCisjaWZuZGVmIENVUkxfRElTQUJMRV9MSUJDVVJMX09QVElPTgorICAgICAgICByZXMgPSBlYXN5c3JjX3BlcmZvcm0oKTsKKyAgICAgICAgaWYocmVzKSB7CisgICAgICAgICAgZ290byBzaG93X2Vycm9yOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKworICAgICAgICAgIGlmKGNvbmZpZy0+Y29udGVudF9kaXNwb3NpdGlvbiAmJiBvdXRzLnN0cmVhbSAmJiAhY29uZmlnLT5tdXRlICYmCisgICAgICAgICAgICAgb3V0cy5maWxlbmFtZSkKKyAgICAgICAgICAgIHByaW50ZigiY3VybDogU2F2ZWQgdG8gZmlsZW5hbWUgJyVzJ1xuIiwgb3V0cy5maWxlbmFtZSk7CisKKyAgICAgICAgICAvKiBpZiByZXRyeS1tYXgtdGltZSBpcyBub24temVybywgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgZXhjZWVkZWQgdGhlCisgICAgICAgICAgICAgdGltZSAqLworICAgICAgICAgIGlmKHJldHJ5X251bXJldHJpZXMgJiYKKyAgICAgICAgICAgICAoIWNvbmZpZy0+cmV0cnlfbWF4dGltZSB8fAorICAgICAgICAgICAgICAodHZkaWZmKHR2bm93KCksIHJldHJ5c3RhcnQpIDwKKyAgICAgICAgICAgICAgIGNvbmZpZy0+cmV0cnlfbWF4dGltZSoxMDAwTCkpICkgeworICAgICAgICAgICAgZW51bSB7CisgICAgICAgICAgICAgIFJFVFJZX05PLAorICAgICAgICAgICAgICBSRVRSWV9USU1FT1VULAorICAgICAgICAgICAgICBSRVRSWV9IVFRQLAorICAgICAgICAgICAgICBSRVRSWV9GVFAsCisgICAgICAgICAgICAgIFJFVFJZX0xBU1QgLyogbm90IHVzZWQgKi8KKyAgICAgICAgICAgIH0gcmV0cnkgPSBSRVRSWV9OTzsKKyAgICAgICAgICAgIGxvbmcgcmVzcG9uc2U7CisgICAgICAgICAgICBpZigoQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUID09IHJlcykgfHwKKyAgICAgICAgICAgICAgIChDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVCA9PSByZXMpIHx8CisgICAgICAgICAgICAgICAoQ1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZID09IHJlcykgfHwKKyAgICAgICAgICAgICAgIChDVVJMRV9GVFBfQUNDRVBUX1RJTUVPVVQgPT0gcmVzKSkKKyAgICAgICAgICAgICAgLyogcmV0cnkgdGltZW91dCBhbHdheXMgKi8KKyAgICAgICAgICAgICAgcmV0cnkgPSBSRVRSWV9USU1FT1VUOworICAgICAgICAgICAgZWxzZSBpZigoQ1VSTEVfT0sgPT0gcmVzKSB8fAorICAgICAgICAgICAgICAgICAgICAoY29uZmlnLT5mYWlsb25lcnJvciAmJgorICAgICAgICAgICAgICAgICAgICAgKENVUkxFX0hUVFBfUkVUVVJORURfRVJST1IgPT0gcmVzKSkpIHsKKyAgICAgICAgICAgICAgLyogSWYgaXQgcmV0dXJuZWQgT0suIF9vcl8gZmFpbG9uZXJyb3Igd2FzIGVuYWJsZWQgYW5kIGl0CisgICAgICAgICAgICAgICAgIHJldHVybmVkIGR1ZSB0byBzdWNoIGFuIGVycm9yLCBjaGVjayBmb3IgSFRUUCB0cmFuc2llbnQKKyAgICAgICAgICAgICAgICAgZXJyb3JzIHRvIHJldHJ5IG9uLiAqLworICAgICAgICAgICAgICBjaGFyICplZmZlY3RpdmVfdXJsID0gTlVMTDsKKyAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fRUZGRUNUSVZFX1VSTCwgJmVmZmVjdGl2ZV91cmwpOworICAgICAgICAgICAgICBpZihlZmZlY3RpdmVfdXJsICYmCisgICAgICAgICAgICAgICAgIGNoZWNrcHJlZml4KCJodHRwIiwgZWZmZWN0aXZlX3VybCkpIHsKKyAgICAgICAgICAgICAgICAvKiBUaGlzIHdhcyBIVFRQKFMpICovCisgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSwgJnJlc3BvbnNlKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaChyZXNwb25zZSkgeworICAgICAgICAgICAgICAgIGNhc2UgNTAwOiAvKiBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IgKi8KKyAgICAgICAgICAgICAgICBjYXNlIDUwMjogLyogQmFkIEdhdGV3YXkgKi8KKyAgICAgICAgICAgICAgICBjYXNlIDUwMzogLyogU2VydmljZSBVbmF2YWlsYWJsZSAqLworICAgICAgICAgICAgICAgIGNhc2UgNTA0OiAvKiBHYXRld2F5IFRpbWVvdXQgKi8KKyAgICAgICAgICAgICAgICAgIHJldHJ5ID0gUkVUUllfSFRUUDsKKyAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgKiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGFscmVhZHkgd3JpdHRlbiBkYXRhIHRvIHRoZSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAqIGZpbGUgKG9yIHRlcm1pbmFsKS4gSWYgd2Ugd3JpdGUgdG8gYSBmaWxlLCB3ZSBtdXN0IHJld2luZAorICAgICAgICAgICAgICAgICAgICogb3IgY2xvc2UvcmUtb3BlbiB0aGUgZmlsZSBzbyB0aGF0IHRoZSBuZXh0IGF0dGVtcHQgc3RhcnRzCisgICAgICAgICAgICAgICAgICAgKiBvdmVyIGZyb20gdGhlIGJlZ2lubmluZy4KKyAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgKiBUT0RPOiBzaW1pbGFyIGFjdGlvbiBmb3IgdGhlIHVwbG9hZCBjYXNlLiBXZSBtaWdodCBuZWVkCisgICAgICAgICAgICAgICAgICAgKiB0byBzdGFydCBvdmVyIHJlYWRpbmcgZnJvbSBhIHByZXZpb3VzIHBvaW50IGlmIHdlIGhhdmUKKyAgICAgICAgICAgICAgICAgICAqIHVwbG9hZGVkIHNvbWV0aGluZyB3aGVuIHRoaXMgd2FzIHJldHVybmVkLgorICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogaWYgQ1VSTEVfT0sgKi8KKyAgICAgICAgICAgIGVsc2UgaWYocmVzKSB7CisgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX1JFU1BPTlNFX0NPREUsICZyZXNwb25zZSk7CisKKyAgICAgICAgICAgICAgaWYocmVzcG9uc2UvMTAwID09IDQpCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBUaGlzIGlzIHR5cGljYWxseSB3aGVuIHRoZSBGVFAgc2VydmVyIG9ubHkgYWxsb3dzIGEgY2VydGFpbgorICAgICAgICAgICAgICAgICAqIGFtb3VudCBvZiB1c2VycyBhbmQgd2UgYXJlIG5vdCBvbmUgb2YgdGhlbS4gIEFsbCA0eHggY29kZXMKKyAgICAgICAgICAgICAgICAgKiBhcmUgdHJhbnNpZW50LgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldHJ5ID0gUkVUUllfRlRQOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZihyZXRyeSkgeworICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1bXT17CisgICAgICAgICAgICAgICAgTlVMTCwgInRpbWVvdXQiLCAiSFRUUCBlcnJvciIsICJGVFAgZXJyb3IiCisgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgIHdhcm5mKGNvbmZpZywgIlRyYW5zaWVudCBwcm9ibGVtOiAlcyAiCisgICAgICAgICAgICAgICAgICAgICJXaWxsIHJldHJ5IGluICVsZCBzZWNvbmRzLiAiCisgICAgICAgICAgICAgICAgICAgICIlbGQgcmV0cmllcyBsZWZ0LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgbVtyZXRyeV0sIHJldHJ5X3NsZWVwLzEwMDBMLCByZXRyeV9udW1yZXRyaWVzKTsKKworICAgICAgICAgICAgICB0b29sX2dvX3NsZWVwKHJldHJ5X3NsZWVwKTsKKyAgICAgICAgICAgICAgcmV0cnlfbnVtcmV0cmllcy0tOworICAgICAgICAgICAgICBpZighY29uZmlnLT5yZXRyeV9kZWxheSkgeworICAgICAgICAgICAgICAgIHJldHJ5X3NsZWVwICo9IDI7CisgICAgICAgICAgICAgICAgaWYocmV0cnlfc2xlZXAgPiBSRVRSWV9TTEVFUF9NQVgpCisgICAgICAgICAgICAgICAgICByZXRyeV9zbGVlcCA9IFJFVFJZX1NMRUVQX01BWDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZihvdXRzLmJ5dGVzICYmIG91dHMuZmlsZW5hbWUpIHsKKyAgICAgICAgICAgICAgICAvKiBXZSBoYXZlIHdyaXR0ZW4gZGF0YSB0byBhIG91dHB1dCBmaWxlLCB3ZSB0cnVuY2F0ZSBmaWxlCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYoIWNvbmZpZy0+bXV0ZSkKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoY29uZmlnLT5lcnJvcnMsICJUaHJvd2luZyBhd2F5ICUiCisgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgIiBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cy5ieXRlcyk7CisgICAgICAgICAgICAgICAgZmZsdXNoKG91dHMuc3RyZWFtKTsKKyAgICAgICAgICAgICAgICAvKiB0cnVuY2F0ZSBmaWxlIGF0IHRoZSBwb3NpdGlvbiB3aGVyZSB3ZSBzdGFydGVkIGFwcGVuZGluZyAqLworI2lmZGVmIEhBVkVfRlRSVU5DQVRFCisgICAgICAgICAgICAgICAgaWYoZnRydW5jYXRlKCBmaWxlbm8ob3V0cy5zdHJlYW0pLCBvdXRzLmluaXQpKSB7CisgICAgICAgICAgICAgICAgICAvKiB3aGVuIHRydW5jYXRlIGZhaWxzLCB3ZSBjYW4ndCBqdXN0IGFwcGVuZCBhcyB0aGVuIHdlJ2xsCisgICAgICAgICAgICAgICAgICAgICBjcmVhdGUgc29tZXRoaW5nIHN0cmFuZ2UsIGJhaWwgb3V0ICovCisgICAgICAgICAgICAgICAgICBpZighY29uZmlnLT5tdXRlKQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGNvbmZpZy0+ZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gdHJ1bmNhdGUsIGV4aXRpbmdcbiIpOworICAgICAgICAgICAgICAgICAgcmVzID0gQ1VSTEVfV1JJVEVfRVJST1I7CisgICAgICAgICAgICAgICAgICBnb3RvIHF1aXRfdXJsczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogbm93IHNlZWsgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSwgdGhlIHBvc2l0aW9uIHdoZXJlIHdlCisgICAgICAgICAgICAgICAgICAganVzdCB0cnVuY2F0ZWQgdGhlIGZpbGUgaW4gYSBsYXJnZSBmaWxlLXNhZmUgd2F5ICovCisgICAgICAgICAgICAgICAgZnNlZWsob3V0cy5zdHJlYW0sIDAsIFNFRUtfRU5EKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgLyogZnRydW5jYXRlIGlzIG5vdCBhdmFpbGFibGUsIHNvIGp1c3QgcmVwb3NpdGlvbiB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgIHRvIHRoZSBsb2NhdGlvbiB3ZSB3b3VsZCBoYXZlIHRydW5jYXRlZCBpdC4gVGhpcyB3b24ndAorICAgICAgICAgICAgICAgICAgIHdvcmsgcHJvcGVybHkgd2l0aCBsYXJnZSBmaWxlcyBvbiAzMi1iaXQgc3lzdGVtcywgYnV0CisgICAgICAgICAgICAgICAgICAgbW9zdCBvZiB0aG9zZSB3aWxsIGhhdmUgZnRydW5jYXRlLiAqLworICAgICAgICAgICAgICAgIGZzZWVrKG91dHMuc3RyZWFtLCAobG9uZylvdXRzLmluaXQsIFNFRUtfU0VUKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIG91dHMuYnl0ZXMgPSAwOyAvKiBjbGVhciBmb3IgbmV4dCByb3VuZCAqLworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBjdXJsX2Vhc3lfcGVyZm9ybSBsb29wICovCisgICAgICAgICAgICB9CisgICAgICAgICAgfSAvKiBpZiByZXRyeV9udW1yZXRyaWVzICovCisKKyAgICAgICAgICAvKiBJbiBhbGwgb3JkaW5hcnkgY2FzZXMsIGp1c3QgYnJlYWsgb3V0IG9mIGxvb3AgaGVyZSAqLworICAgICAgICAgIGJyZWFrOyAvKiBjdXJsX2Vhc3lfcGVyZm9ybSBsb29wICovCisKKyAgICAgICAgfQorCisgICAgICAgIGlmKChjb25maWctPnByb2dyZXNzbW9kZSA9PSBDVVJMX1BST0dSRVNTX0JBUikgJiYKKyAgICAgICAgICAgcHJvZ3Jlc3NiYXIuY2FsbHMpCisgICAgICAgICAgLyogaWYgdGhlIGN1c3RvbSBwcm9ncmVzcyBiYXIgaGFzIGJlZW4gZGlzcGxheWVkLCB3ZSBvdXRwdXQgYQorICAgICAgICAgICAgIG5ld2xpbmUgaGVyZSAqLworICAgICAgICAgIGZwdXRzKCJcbiIsIHByb2dyZXNzYmFyLm91dCk7CisKKyAgICAgICAgaWYoY29uZmlnLT53cml0ZW91dCkKKyAgICAgICAgICBvdXJXcml0ZU91dChjdXJsLCBjb25maWctPndyaXRlb3V0KTsKKworICAgICAgICBpZihjb25maWctPndyaXRlZW52KQorICAgICAgICAgIG91cldyaXRlRW52KGN1cmwpOworCisgICAgICAgIC8qCisgICAgICAgICoqIENvZGUgd2l0aGluIHRoaXMgbG9vcCBtYXkganVtcCBkaXJlY3RseSBoZXJlIHRvIGxhYmVsICdzaG93X2Vycm9yJworICAgICAgICAqKiBpbiBvcmRlciB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgZm9yIENVUkxjb2RlIHN0b3JlZCBpbiAncmVzJworICAgICAgICAqKiB2YXJpYWJsZSBhbmQgZXhpdCBsb29wIG9uY2UgdGhhdCBuZWNlc3Nhcnkgd3JpdGluZyBhbmQgY2xlYW51cAorICAgICAgICAqKiBpbiBsYWJlbCAncXVpdF91cmxzJyBoYXMgYmVlbiBkb25lLgorICAgICAgICAqLworCisgICAgICAgIHNob3dfZXJyb3I6CisKKyNpZmRlZiBfX1ZNUworICAgICAgICBpZihpc192bXNfc2hlbGwoKSkgeworICAgICAgICAgIC8qIFZNUyBEQ0wgc2hlbGwgYmVoYXZpb3IgKi8KKyAgICAgICAgICBpZighY29uZmlnLT5zaG93ZXJyb3IpCisgICAgICAgICAgICB2bXNfc2hvdyA9IFZNU1NUU19ISURFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBpZihyZXMgJiYgY29uZmlnLT5zaG93ZXJyb3IpIHsKKyAgICAgICAgICBmcHJpbnRmKGNvbmZpZy0+ZXJyb3JzLCAiY3VybDogKCVkKSAlc1xuIiwgcmVzLCAoZXJyb3JidWZmZXJbMF0pID8KKyAgICAgICAgICAgICAgICAgIGVycm9yYnVmZmVyIDogY3VybF9lYXN5X3N0cmVycm9yKChDVVJMY29kZSlyZXMpKTsKKyAgICAgICAgICBpZihyZXMgPT0gQ1VSTEVfU1NMX0NBQ0VSVCkKKyAgICAgICAgICAgIGZwcmludGYoY29uZmlnLT5lcnJvcnMsICIlcyVzIiwKKyAgICAgICAgICAgICAgICAgICAgQ1VSTF9DQV9DRVJUX0VSUk9STVNHMSwgQ1VSTF9DQV9DRVJUX0VSUk9STVNHMik7CisgICAgICAgIH0KKworICAgICAgICAvKiBGYWxsIHRocm91Z2ggY29tbWVudCB0byAncXVpdF91cmxzJyBsYWJlbCAqLworCisgICAgICAgIC8qCisgICAgICAgICoqIFVwb24gZXJyb3IgY29uZGl0aW9uIGFuZCBhbHdheXMgdGhhdCBhIG1lc3NhZ2UgaGFzIGFscmVhZHkgYmVlbgorICAgICAgICAqKiBkaXNwbGF5ZWQsIGNvZGUgd2l0aGluIHRoaXMgbG9vcCBtYXkganVtcCBkaXJlY3RseSBoZXJlIHRvIGxhYmVsCisgICAgICAgICoqICdxdWl0X3VybHMnIG90aGVyd2lzZSBpdCBzaG91bGQganVtcCB0byAnc2hvd19lcnJvcicgbGFiZWwgYWJvdmUuCisgICAgICAgICoqCisgICAgICAgICoqIFdoZW4gJ3JlcycgdmFyaWFibGUgaXMgX25vdF8gQ1VSTEVfT0sgbG9vcCB3aWxsIGV4aXQgb25jZSB0aGF0CisgICAgICAgICoqIGFsbCBjb2RlIGZvbGxvd2luZyAncXVpdF91cmxzJyBoYXMgYmVlbiBleGVjdXRlZC4gT3RoZXJ3aXNlIGl0CisgICAgICAgICoqIHdpbGwgbG9vcCB0byB0aGUgYmVnaW5uaW5nIGZyb20gd2hlcmUgaXQgbWF5IGV4aXQgaWYgdGhlcmUgYXJlCisgICAgICAgICoqIG5vIG1vcmUgdXJscyBsZWZ0LgorICAgICAgICAqLworCisgICAgICAgIHF1aXRfdXJsczoKKworICAgICAgICAvKiBTZXQgZmlsZSBleHRlbmRlZCBhdHRyaWJ1dGVzICovCisgICAgICAgIGlmKCFyZXMgJiYgY29uZmlnLT54YXR0ciAmJiBvdXRzLmZvcGVuZWQgJiYgb3V0cy5zdHJlYW0pIHsKKyAgICAgICAgICBpbnQgcmMgPSBmd3JpdGVfeGF0dHIoY3VybCwgZmlsZW5vKG91dHMuc3RyZWFtKSk7CisgICAgICAgICAgaWYocmMpCisgICAgICAgICAgICB3YXJuZihjb25maWcsICJFcnJvciBzZXR0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXM6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENsb3NlIHRoZSBmaWxlICovCisgICAgICAgIGlmKG91dHMuZm9wZW5lZCAmJiBvdXRzLnN0cmVhbSkgeworICAgICAgICAgIGludCByYyA9IGZjbG9zZShvdXRzLnN0cmVhbSk7CisgICAgICAgICAgaWYoIXJlcyAmJiByYykgeworICAgICAgICAgICAgLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdGhlIHdyaXRpbmcgcHJvY2VzcyAqLworICAgICAgICAgICAgcmVzID0gQ1VSTEVfV1JJVEVfRVJST1I7CisgICAgICAgICAgICBmcHJpbnRmKGNvbmZpZy0+ZXJyb3JzLCAiKCVkKSBGYWlsZWQgd3JpdGluZyBib2R5XG4iLCByZXMpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCFvdXRzLnNfaXNyZWcgJiYgb3V0cy5zdHJlYW0pIHsKKyAgICAgICAgICAvKiBEdW1wIHN0YW5kYXJkIHN0cmVhbSBidWZmZXJlZCBkYXRhICovCisgICAgICAgICAgaW50IHJjID0gZmZsdXNoKG91dHMuc3RyZWFtKTsKKyAgICAgICAgICBpZighcmVzICYmIHJjKSB7CisgICAgICAgICAgICAvKiBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiB0aGUgd3JpdGluZyBwcm9jZXNzICovCisgICAgICAgICAgICByZXMgPSBDVVJMRV9XUklURV9FUlJPUjsKKyAgICAgICAgICAgIGZwcmludGYoY29uZmlnLT5lcnJvcnMsICIoJWQpIEZhaWxlZCB3cml0aW5nIGJvZHlcbiIsIHJlcyk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyNpZmRlZiBfX0FNSUdBX18KKyAgICAgICAgaWYoIXJlcyAmJiBvdXRzLnNfaXNyZWcgJiYgb3V0cy5maWxlbmFtZSkgeworICAgICAgICAgIC8qIFNldCB0aGUgdXJsICh1cCB0byA4MCBjaGFycykgYXMgY29tbWVudCBmb3IgdGhlIGZpbGUgKi8KKyAgICAgICAgICBpZihzdHJsZW4odXJsKSA+IDc4KQorICAgICAgICAgICAgdXJsWzc5XSA9ICdcMCc7CisgICAgICAgICAgU2V0Q29tbWVudChvdXRzLmZpbGVuYW1lLCB1cmwpOworICAgICAgICB9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfVVRJTUUKKyAgICAgICAgLyogRmlsZSB0aW1lIGNhbiBvbmx5IGJlIHNldCBfYWZ0ZXJfIHRoZSBmaWxlIGhhcyBiZWVuIGNsb3NlZCAqLworICAgICAgICBpZighcmVzICYmIGNvbmZpZy0+cmVtb3RlX3RpbWUgJiYgb3V0cy5zX2lzcmVnICYmIG91dHMuZmlsZW5hbWUpIHsKKyAgICAgICAgICAvKiBBc2sgbGliY3VybCBpZiB3ZSBnb3QgYSByZW1vdGUgZmlsZSB0aW1lICovCisgICAgICAgICAgbG9uZyBmaWxldGltZSA9IC0xOworICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX0ZJTEVUSU1FLCAmZmlsZXRpbWUpOworICAgICAgICAgIGlmKGZpbGV0aW1lID49IDApIHsKKyAgICAgICAgICAgIHN0cnVjdCB1dGltYnVmIHRpbWVzOworICAgICAgICAgICAgdGltZXMuYWN0aW1lID0gKHRpbWVfdClmaWxldGltZTsKKyAgICAgICAgICAgIHRpbWVzLm1vZHRpbWUgPSAodGltZV90KWZpbGV0aW1lOworICAgICAgICAgICAgdXRpbWUob3V0cy5maWxlbmFtZSwgJnRpbWVzKTsgLyogc2V0IHRoZSB0aW1lIHdlIGdvdCAqLworICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIC8qIE5vIG1vcmUgYnVzaW5lc3Mgd2l0aCB0aGlzIG91dHB1dCBzdHJ1Y3QgKi8KKyAgICAgICAgaWYob3V0cy5hbGxvY19maWxlbmFtZSkKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKG91dHMuZmlsZW5hbWUpOworICAgICAgICBtZW1zZXQoJm91dHMsIDAsIHNpemVvZihzdHJ1Y3QgT3V0U3RydWN0KSk7CisKKyAgICAgICAgLyogRnJlZSBsb29wLWxvY2FsIGFsbG9jYXRlZCBtZW1vcnkgYW5kIGNsb3NlIGxvb3AtbG9jYWwgb3BlbmVkIGZkICovCisKKyAgICAgICAgQ3VybF9zYWZlZnJlZShvdXRmaWxlKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZSh0aGlzX3VybCk7CisKKyAgICAgICAgaWYoaW5mZG9wZW4pIHsKKyAgICAgICAgICBjbG9zZShpbmZkKTsKKyAgICAgICAgICBpbmZkb3BlbiA9IEZBTFNFOworICAgICAgICAgIGluZmQgPSBTVERJTl9GSUxFTk87CisgICAgICAgIH0KKworICAgICAgICBpZih1cmxudW0gPiAxKSB7CisgICAgICAgICAgLyogd2hlbiB1cmwgZ2xvYmJpbmcsIGV4aXQgbG9vcCB1cG9uIGNyaXRpY2FsIGVycm9yICovCisgICAgICAgICAgaWYoaXNfZmF0YWxfZXJyb3IocmVzKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYocmVzKQorICAgICAgICAgIC8qIHdoZW4gbm90IHVybCBnbG9iYmluZywgZXhpdCBsb29wIHVwb24gYW55IGVycm9yICovCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgIH0gLyogbG9vcCB0byB0aGUgbmV4dCBVUkwgKi8KKworICAgICAgLyogRnJlZSBsb29wLWxvY2FsIGFsbG9jYXRlZCBtZW1vcnkgKi8KKworICAgICAgQ3VybF9zYWZlZnJlZSh1cGxvYWRmaWxlKTsKKworICAgICAgaWYodXJscykgeworICAgICAgICAvKiBGcmVlIGxpc3Qgb2YgcmVtYWluaW5nIFVSTHMgKi8KKyAgICAgICAgZ2xvYl9jbGVhbnVwKHVybHMpOworICAgICAgICB1cmxzID0gTlVMTDsKKyAgICAgIH0KKworICAgICAgaWYoaW5maWxlbnVtID4gMSkgeworICAgICAgICAvKiB3aGVuIGZpbGUgZ2xvYmJpbmcsIGV4aXQgbG9vcCB1cG9uIGNyaXRpY2FsIGVycm9yICovCisgICAgICAgIGlmKGlzX2ZhdGFsX2Vycm9yKHJlcykpCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIGlmKHJlcykKKyAgICAgICAgLyogd2hlbiBub3QgZmlsZSBnbG9iYmluZywgZXhpdCBsb29wIHVwb24gYW55IGVycm9yICovCisgICAgICAgIGJyZWFrOworCisgICAgfSAvKiBsb29wIHRvIHRoZSBuZXh0IGdsb2JiZWQgdXBsb2FkIGZpbGUgKi8KKworICAgIC8qIEZyZWUgbG9vcC1sb2NhbCBhbGxvY2F0ZWQgbWVtb3J5ICovCisKKyAgICBDdXJsX3NhZmVmcmVlKG91dGZpbGVzKTsKKworICAgIGlmKGluZ2xvYikgeworICAgICAgLyogRnJlZSBsaXN0IG9mIGdsb2JiZWQgdXBsb2FkIGZpbGVzICovCisgICAgICBnbG9iX2NsZWFudXAoaW5nbG9iKTsKKyAgICAgIGluZ2xvYiA9IE5VTEw7CisgICAgfQorCisgICAgLyogRnJlZSB0aGlzIFVSTCBub2RlIGRhdGEgd2l0aG91dCBkZXN0cm95aW5nIHRoZQorICAgICAgIHRoZSBub2RlIGl0c2VsZiBub3IgbW9kaWZ5aW5nIG5leHQgcG9pbnRlci4gKi8KKyAgICBDdXJsX3NhZmVmcmVlKHVybG5vZGUtPnVybCk7CisgICAgQ3VybF9zYWZlZnJlZSh1cmxub2RlLT5vdXRmaWxlKTsKKyAgICBDdXJsX3NhZmVmcmVlKHVybG5vZGUtPmluZmlsZSk7CisgICAgdXJsbm9kZS0+ZmxhZ3MgPSAwOworCisgICAgLyoKKyAgICAqKiBCYWlsIG91dCB1cG9uIGNyaXRpY2FsIGVycm9ycworICAgICovCisgICAgaWYoaXNfZmF0YWxfZXJyb3IocmVzKSkKKyAgICAgIGdvdG8gcXVpdF9jdXJsOworCisgIH0gLyogZm9yLWxvb3AgdGhyb3VnaCBhbGwgVVJMcyAqLworCisgIC8qCisgICoqIE5lc3RlZCBsb29wcyBlbmQgaGVyZS4KKyAgKi8KKworICBxdWl0X2N1cmw6CisKKyAgLyogRnJlZSBmdW5jdGlvbi1sb2NhbCByZWZlcmVuY2VkIGFsbG9jYXRlZCBtZW1vcnkgKi8KKyAgQ3VybF9zYWZlZnJlZShodHRwZ2V0ZmllbGRzKTsKKworICAvKiBGcmVlIGxpc3Qgb2YgZ2l2ZW4gVVJMcyAqLworICBjbGVhbl9nZXRvdXQoY29uZmlnKTsKKworICAvKiBDbGVhbnVwIHRoZSBjdXJsIGhhbmRsZSBub3cgdGhhdCBvdXIKKyAgICAgcHJvZ3Jlc3NiYXIgc3RydWN0IGlzIHN0aWxsIGluIHNjb3BlICovCisgIGlmKGN1cmwpIHsKKyAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgICBjb25maWctPmVhc3kgPSBjdXJsID0gTlVMTDsKKyAgfQorI2lmbmRlZiBDVVJMX0RJU0FCTEVfTElCQ1VSTF9PUFRJT04KKyAgZWFzeXNyY19jbGVhbnVwKCk7CisjZW5kaWYKKworICAvKiBDbG9zZSBmdW5jdGlvbi1sb2NhbCBvcGVuZWQgZmlsZSBkZXNjcmlwdG9ycyAqLworCisgIGlmKGhlYWRzLmZvcGVuZWQgJiYgaGVhZHMuc3RyZWFtKQorICAgIGZjbG9zZShoZWFkcy5zdHJlYW0pOworICBpZihoZWFkcy5hbGxvY19maWxlbmFtZSkKKyAgICBDdXJsX3NhZmVmcmVlKGhlYWRzLmZpbGVuYW1lKTsKKworICBpZihjb25maWctPnRyYWNlX2ZvcGVuZWQgJiYgY29uZmlnLT50cmFjZV9zdHJlYW0pCisgICAgZmNsb3NlKGNvbmZpZy0+dHJhY2Vfc3RyZWFtKTsKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfTElCQ1VSTF9PUFRJT04KKyAgLyogRHVtcCB0aGUgbGliY3VybCBjb2RlIGlmIHByZXZpb3VzbHkgZW5hYmxlZC4KKyAgICAgTk9URTogdGhhdCB0aGlzIGZ1bmN0aW9uIHJlbGllcyBvbiBjb25maWctPmVycm9ycyBhbW9uZ3N0IG90aGVyIHRoaW5ncworICAgICBzbyBub3QgZXZlcnl0aGluZyBjYW4gYmUgY2xvc2VkIGFuZCBjbGVhbmVkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZCAqLworICBkdW1wZWFzeXNyYyhjb25maWcpOworI2VuZGlmCisKKyAgaWYoY29uZmlnLT5lcnJvcnNfZm9wZW5lZCAmJiBjb25maWctPmVycm9ycykKKyAgICBmY2xvc2UoY29uZmlnLT5lcnJvcnMpOworCisgIG1haW5fZnJlZSgpOyAvKiBjbGVhbnVwICovCisKKyAgcmV0dXJuIHJlczsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfb3BlcmF0ZS5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfb3BlcmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ODZjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9vcGVyYXRlLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9UT09MX09QRVJBVEVfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX09QRVJBVEVfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworaW50IG9wZXJhdGUoc3RydWN0IENvbmZpZ3VyYWJsZSAqY29uZmlnLCBpbnQgYXJnYywgYXJndl9pdGVtX3QgYXJndltdKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfT1BFUkFURV9IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX29wZXJobHAuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX29wZXJobHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzE2OTdiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfb3BlcmhscC5jCkBAIC0wLDAgKzEsMjU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpbmNsdWRlICJyYXdzdHIuaCIKKworI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCisvKiB1c2Ugb3VyIG93biBwcmludGYoKSBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJjdXJseC5oIgorCisjaW5jbHVkZSAidG9vbF9jZmdhYmxlLmgiCisjaW5jbHVkZSAidG9vbF9jb252ZXJ0LmgiCisjaW5jbHVkZSAidG9vbF9vcGVyaGxwLmgiCisjaW5jbHVkZSAidG9vbF92ZXJzaW9uLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKKy8qCisgKiBteV91c2VyYWdlbnQ6IHJldHVybnMgYWxsb2NhdGVkIHN0cmluZyB3aXRoIGRlZmF1bHQgdXNlciBhZ2VudAorICovCitjaGFyICpteV91c2VyYWdlbnQodm9pZCkKK3sKKyAgY2hhciB1c2VyYWdlbnRbMjU2XTsgLyogd2UgZG9uJ3Qgd2FudCBhIGxhcmdlciBkZWZhdWx0IHVzZXIgYWdlbnQgKi8KKworICBzbnByaW50Zih1c2VyYWdlbnQsIHNpemVvZih1c2VyYWdlbnQpLAorICAgICAgICAgICBDVVJMX05BTUUgIi8iIENVUkxfVkVSU0lPTiAiICgiIE9TICIpICIgIiVzIiwgY3VybF92ZXJzaW9uKCkpOworCisgIHJldHVybiBzdHJkdXAodXNlcmFnZW50KTsKK30KKworLyoKKyAqIFByaW50IGxpc3Qgb2YgT3BlblNTTCBzdXBwb3J0ZWQgZW5naW5lcworICovCit2b2lkIGxpc3RfZW5naW5lcyhjb25zdCBzdHJ1Y3QgY3VybF9zbGlzdCAqZW5naW5lcykKK3sKKyAgcHV0cygiQnVpbGQtdGltZSBlbmdpbmVzOiIpOworICBpZighZW5naW5lcykgeworICAgIHB1dHMoIiAgPG5vbmU+Iik7CisgICAgcmV0dXJuOworICB9CisgIGZvcig7IGVuZ2luZXM7IGVuZ2luZXMgPSBlbmdpbmVzLT5uZXh0KQorICAgIHByaW50ZigiICAlc1xuIiwgZW5naW5lcy0+ZGF0YSk7Cit9CisKK3ZvaWQgY2xlYW5fZ2V0b3V0KHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZykKK3sKKyAgc3RydWN0IGdldG91dCAqbmV4dDsKKyAgc3RydWN0IGdldG91dCAqbm9kZSA9IGNvbmZpZy0+dXJsX2xpc3Q7CisKKyAgd2hpbGUobm9kZSkgeworICAgIG5leHQgPSBub2RlLT5uZXh0OworICAgIEN1cmxfc2FmZWZyZWUobm9kZS0+dXJsKTsKKyAgICBDdXJsX3NhZmVmcmVlKG5vZGUtPm91dGZpbGUpOworICAgIEN1cmxfc2FmZWZyZWUobm9kZS0+aW5maWxlKTsKKyAgICBDdXJsX3NhZmVmcmVlKG5vZGUpOworICAgIG5vZGUgPSBuZXh0OworICB9CisgIGNvbmZpZy0+dXJsX2xpc3QgPSBOVUxMOworfQorCitib29sIG91dHB1dF9leHBlY3RlZChjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKnVwbG9hZGZpbGUpCit7CisgIGlmKCF1cGxvYWRmaWxlKQorICAgIHJldHVybiBUUlVFOyAgLyogZG93bmxvYWQgKi8KKyAgaWYoY2hlY2twcmVmaXgoImh0dHA6Ly8iLCB1cmwpIHx8IGNoZWNrcHJlZml4KCJodHRwczovLyIsIHVybCkpCisgICAgcmV0dXJuIFRSVUU7ICAgLyogSFRUUChTKSB1cGxvYWQgKi8KKworICByZXR1cm4gRkFMU0U7IC8qIG5vbi1IVFRQIHVwbG9hZCwgcHJvYmFibHkgbm8gb3V0cHV0IHNob3VsZCBiZSBleHBlY3RlZCAqLworfQorCitib29sIHN0ZGluX3VwbG9hZChjb25zdCBjaGFyICp1cGxvYWRmaWxlKQoreworICByZXR1cm4gKGN1cmx4X3N0cmVxdWFsKHVwbG9hZGZpbGUsICItIikgfHwKKyAgICAgICAgICBjdXJseF9zdHJlcXVhbCh1cGxvYWRmaWxlLCAiLiIpKSA/IFRSVUUgOiBGQUxTRTsKK30KKworLyoKKyAqIEFkZHMgdGhlIGZpbGUgbmFtZSB0byB0aGUgVVJMIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIG9uZS4KKyAqIHVybCB3aWxsIGJlIGZyZWVkIGJlZm9yZSByZXR1cm4gaWYgdGhlIHJldHVybmVkIHBvaW50ZXIgaXMgZGlmZmVyZW50CisgKi8KK2NoYXIgKmFkZF9maWxlX25hbWVfdG9fdXJsKENVUkwgKmN1cmwsIGNoYXIgKnVybCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgIC8qIElmIG5vIGZpbGUgbmFtZSBwYXJ0IGlzIGdpdmVuIGluIHRoZSBVUkwsIHdlIGFkZCB0aGlzIGZpbGUgbmFtZSAqLworICBjaGFyICpwdHIgPSBzdHJzdHIodXJsLCAiOi8vIik7CisgIGlmKHB0cikKKyAgICBwdHIgKz0gMzsKKyAgZWxzZQorICAgIHB0ciA9IHVybDsKKyAgcHRyID0gc3RycmNocihwdHIsICcvJyk7CisgIGlmKCFwdHIgfHwgIXN0cmxlbigrK3B0cikpIHsKKyAgICAvKiBUaGUgVVJMIGhhcyBubyBmaWxlIG5hbWUgcGFydCwgYWRkIHRoZSBsb2NhbCBmaWxlIG5hbWUuIEluIG9yZGVyCisgICAgICAgdG8gYmUgYWJsZSB0byBkbyBzbywgd2UgaGF2ZSB0byBjcmVhdGUgYSBuZXcgVVJMIGluIGFub3RoZXIKKyAgICAgICBidWZmZXIuKi8KKworICAgIC8qIFdlIG9ubHkgd2FudCB0aGUgcGFydCBvZiB0aGUgbG9jYWwgcGF0aCB0aGF0IGlzIG9uIHRoZSByaWdodAorICAgICAgIHNpZGUgb2YgdGhlIHJpZ2h0bW9zdCBzbGFzaCBhbmQgYmFja3NsYXNoLiAqLworICAgIGNvbnN0IGNoYXIgKmZpbGVwID0gc3RycmNocihmaWxlbmFtZSwgJy8nKTsKKyAgICBjaGFyICpmaWxlMiA9IHN0cnJjaHIoZmlsZXA/ZmlsZXA6ZmlsZW5hbWUsICdcXCcpOworICAgIGNoYXIgKmVuY2ZpbGU7CisKKyAgICBpZihmaWxlMikKKyAgICAgIGZpbGVwID0gZmlsZTIgKyAxOworICAgIGVsc2UgaWYoZmlsZXApCisgICAgICBmaWxlcCsrOworICAgIGVsc2UKKyAgICAgIGZpbGVwID0gZmlsZW5hbWU7CisKKyAgICAvKiBVUkwgZW5jb2RlIHRoZSBmaWxlIG5hbWUgKi8KKyAgICBlbmNmaWxlID0gY3VybF9lYXN5X2VzY2FwZShjdXJsLCBmaWxlcCwgMCAvKiB1c2Ugc3RybGVuICovKTsKKyAgICBpZihlbmNmaWxlKSB7CisgICAgICBjaGFyICp1cmxidWZmZXIgPSBtYWxsb2Moc3RybGVuKHVybCkgKyBzdHJsZW4oZW5jZmlsZSkgKyAzKTsKKyAgICAgIGlmKCF1cmxidWZmZXIpIHsKKyAgICAgICAgY3VybF9mcmVlKGVuY2ZpbGUpOworICAgICAgICBDdXJsX3NhZmVmcmVlKHVybCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorICAgICAgaWYocHRyKQorICAgICAgICAvKiB0aGVyZSBpcyBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwgKi8KKyAgICAgICAgc3ByaW50Zih1cmxidWZmZXIsICIlcyVzIiwgdXJsLCBlbmNmaWxlKTsKKyAgICAgIGVsc2UKKyAgICAgICAgLyogdGhlcmUgaXMgbm8gdHJhaWxpbmcgc2xhc2ggb24gdGhlIFVSTCAqLworICAgICAgICBzcHJpbnRmKHVybGJ1ZmZlciwgIiVzLyVzIiwgdXJsLCBlbmNmaWxlKTsKKworICAgICAgY3VybF9mcmVlKGVuY2ZpbGUpOworICAgICAgQ3VybF9zYWZlZnJlZSh1cmwpOworCisgICAgICB1cmwgPSB1cmxidWZmZXI7IC8qIHVzZSBvdXIgbmV3IFVSTCBpbnN0ZWFkISAqLworICAgIH0KKyAgfQorICByZXR1cm4gdXJsOworfQorCisvKiBFeHRyYWN0cyB0aGUgbmFtZSBwb3J0aW9uIG9mIHRoZSBVUkwuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGhlYXAtYWxsb2NhdGVkIHN0cmluZyBvciBOVUxMIGlmCisgKiBubyBuYW1lIHBhcnQsIGF0IGxvY2F0aW9uIGluZGljYXRlZCBieSBmaXJzdCBhcmd1bWVudC4KKyAqLworQ1VSTGNvZGUgZ2V0X3VybF9maWxlX25hbWUoY2hhciAqKmZpbGVuYW1lLCBjb25zdCBjaGFyICp1cmwpCit7CisgIGNvbnN0IGNoYXIgKnBjOworCisgICpmaWxlbmFtZSA9IE5VTEw7CisKKyAgLyogRmluZCBhbmQgZ2V0IHRoZSByZW1vdGUgZmlsZSBuYW1lICovCisgIHBjID0gc3Ryc3RyKHVybCwgIjovLyIpOworICBpZihwYykKKyAgICBwYyArPSAzOworICBlbHNlCisgICAgcGMgPSB1cmw7CisgIHBjID0gc3RycmNocihwYywgJy8nKTsKKworICBpZihwYykgeworICAgIC8qIGR1cGxpY2F0ZSB0aGUgc3RyaW5nIGJleW9uZCB0aGUgc2xhc2ggKi8KKyAgICBwYysrOworICAgIGlmKCpwYykgeworICAgICAgKmZpbGVuYW1lID0gc3RyZHVwKHBjKTsKKyAgICAgIGlmKCEqZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIH0KKyAgfQorCisgIC8qIGluIGNhc2Ugd2UgYnVpbHQgZGVidWcgZW5hYmxlZCwgd2UgYWxsb3cgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICogbmFtZWQgQ1VSTF9URVNURElSIHRvIHByZWZpeCB0aGUgZ2l2ZW4gZmlsZSBuYW1lIHRvIHB1dCBpdCBpbnRvIGEKKyAgICogc3BlY2lmaWMgZGlyZWN0b3J5CisgICAqLworI2lmZGVmIERFQlVHQlVJTEQKKyAgeworICAgIGNoYXIgKnRkaXIgPSBjdXJseF9nZXRlbnYoIkNVUkxfVEVTVERJUiIpOworICAgIGlmKHRkaXIpIHsKKyAgICAgIGNoYXIgYnVmZmVyWzUxMl07IC8qIHN1aXRhYmx5IGxhcmdlICovCisgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMvJXMiLCB0ZGlyLCAqZmlsZW5hbWUpOworICAgICAgQ3VybF9zYWZlZnJlZSgqZmlsZW5hbWUpOworICAgICAgKmZpbGVuYW1lID0gc3RyZHVwKGJ1ZmZlcik7IC8qIGNsb25lIHRoZSBidWZmZXIgKi8KKyAgICAgIGN1cmxfZnJlZSh0ZGlyKTsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIHJldHVybiBDVVJMRV9PSzsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1haW4gZ2xvYmFsIGNvbnN0cnVjdG9yIGZvciB0aGUgYXBwLiBDYWxsIHRoaXMgYmVmb3JlCisgKiBfYW55XyBsaWJjdXJsIHVzYWdlLiBJZiB0aGlzIGZhaWxzLCAqTk8qIGxpYmN1cmwgZnVuY3Rpb25zIG1heSBiZQorICogdXNlZCwgb3IgaGF2b2MgbWF5IGJlIHRoZSByZXN1bHQuCisgKi8KK0NVUkxjb2RlIG1haW5faW5pdCh2b2lkKQoreworI2lmIGRlZmluZWQoX19ESkdQUF9fKSB8fCBkZWZpbmVkKF9fR08zMl9fKQorICAvKiBzdG9wIHN0YXQoKSB3YXN0aW5nIHRpbWUgKi8KKyAgX2Rqc3RhdF9mbGFncyB8PSBfU1RBVF9JTk9ERSB8IF9TVEFUX0VYRUNfTUFHSUMgfCBfU1RBVF9ESVJTSVpFOworI2VuZGlmCisKKyAgcmV0dXJuIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfREVGQVVMVCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYWluIGdsb2JhbCBkZXN0cnVjdG9yIGZvciB0aGUgYXBwLiBDYWxsIHRoaXMgYWZ0ZXIKKyAqIF9hbGxfIGxpYmN1cmwgdXNhZ2UgaXMgZG9uZS4KKyAqLwordm9pZCBtYWluX2ZyZWUodm9pZCkKK3sKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICBjb252ZXJ0X2NsZWFudXAoKTsKK30KKworI2lmZGVmIENVUkxERUJVRwordm9pZCBtZW1vcnlfdHJhY2tpbmdfaW5pdCh2b2lkKQoreworICBjaGFyICplbnY7CisgIC8qIGlmIENVUkxfTUVNREVCVUcgaXMgc2V0LCB0aGlzIHN0YXJ0cyBtZW1vcnkgdHJhY2tpbmcgbWVzc2FnZSBsb2dnaW5nICovCisgIGVudiA9IGN1cmx4X2dldGVudigiQ1VSTF9NRU1ERUJVRyIpOworICBpZihlbnYpIHsKKyAgICAvKiB1c2UgdGhlIHZhbHVlIGFzIGZpbGUgbmFtZSAqLworICAgIGNoYXIgZm5hbWVbQ1VSTF9NVF9MT0dGTkFNRV9CVUZTSVpFXTsKKyAgICBpZihzdHJsZW4oZW52KSA+PSBDVVJMX01UX0xPR0ZOQU1FX0JVRlNJWkUpCisgICAgICBlbnZbQ1VSTF9NVF9MT0dGTkFNRV9CVUZTSVpFLTFdID0gJ1wwJzsKKyAgICBzdHJjcHkoZm5hbWUsIGVudik7CisgICAgY3VybF9mcmVlKGVudik7CisgICAgY3VybF9tZW1kZWJ1ZyhmbmFtZSk7CisgICAgLyogdGhpcyB3ZWlyZCBzdHVmZiBoZXJlIGlzIHRvIG1ha2UgY3VybF9mcmVlKCkgZ2V0IGNhbGxlZAorICAgICAgIGJlZm9yZSBjdXJsX21lbWRlYnVnKCkgYXMgb3RoZXJ3aXNlIG1lbW9yeSB0cmFja2luZyB3aWxsCisgICAgICAgbG9nIGEgZnJlZSgpIHdpdGhvdXQgYW4gYWxsb2MhICovCisgIH0KKyAgLyogaWYgQ1VSTF9NRU1MSU1JVCBpcyBzZXQsIHRoaXMgZW5hYmxlcyBmYWlsLW9uLWFsbG9jLW51bWJlci1OIGZlYXR1cmUgKi8KKyAgZW52ID0gY3VybHhfZ2V0ZW52KCJDVVJMX01FTUxJTUlUIik7CisgIGlmKGVudikgeworICAgIGNoYXIgKmVuZHB0cjsKKyAgICBsb25nIG51bSA9IHN0cnRvbChlbnYsICZlbmRwdHIsIDEwKTsKKyAgICBpZigoZW5kcHRyICE9IGVudikgJiYgKGVuZHB0ciA9PSBlbnYgKyBzdHJsZW4oZW52KSkgJiYgKG51bSA+IDApKQorICAgICAgY3VybF9tZW1saW1pdChudW0pOworICAgIGN1cmxfZnJlZShlbnYpOworICB9Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfb3BlcmhscC5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfb3BlcmhscC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MjliZjEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9vcGVyaGxwLmgKQEAgLTAsMCArMSw1MSBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9UT09MX09QRVJITFBfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX09QRVJITFBfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworY2hhciAqbXlfdXNlcmFnZW50KHZvaWQpOworCit2b2lkIGxpc3RfZW5naW5lcyhjb25zdCBzdHJ1Y3QgY3VybF9zbGlzdCAqZW5naW5lcyk7CisKK3ZvaWQgY2xlYW5fZ2V0b3V0KHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZyk7CisKK2Jvb2wgb3V0cHV0X2V4cGVjdGVkKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqdXBsb2FkZmlsZSk7CisKK2Jvb2wgc3RkaW5fdXBsb2FkKGNvbnN0IGNoYXIgKnVwbG9hZGZpbGUpOworCitjaGFyICphZGRfZmlsZV9uYW1lX3RvX3VybChDVVJMICpjdXJsLCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworQ1VSTGNvZGUgZ2V0X3VybF9maWxlX25hbWUoY2hhciAqKmZpbGVuYW1lLCBjb25zdCBjaGFyICp1cmwpOworCitDVVJMY29kZSBtYWluX2luaXQodm9pZCk7CisKK3ZvaWQgbWFpbl9mcmVlKHZvaWQpOworCisjaWZkZWYgQ1VSTERFQlVHCit2b2lkIG1lbW9yeV90cmFja2luZ19pbml0KHZvaWQpOworI2Vsc2UKKyMgIGRlZmluZSBtZW1vcnlfdHJhY2tpbmdfaW5pdCgpIEN1cmxfbm9wX3N0bXQKKyNlbmRpZgorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVE9PTF9PUEVSSExQX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfcGFueWtleS5jIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfcGFueWtleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZmE2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9wYW55a2V5LmMKQEAgLTAsMCArMSw0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmIGRlZmluZWQoX19TWU1CSUFOMzJfXykgfHwgZGVmaW5lZChORVRXQVJFKQorCisjaWZkZWYgTkVUV0FSRQorIyAgaWZkZWYgX19OT1ZFTExfTElCQ19fCisjICAgIGluY2x1ZGUgPHNjcmVlbi5oPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxud2NvbmlvLmg+CisjICBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlICJ0b29sX3BhbnlrZXkuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiIC8qIGtlZXAgdGhpcyBhcyBMQVNUIGluY2x1ZGUgKi8KKwordm9pZCB0b29sX3ByZXNzYW55a2V5KHZvaWQpCit7CisjaWYgZGVmaW5lZChfX1NZTUJJQU4zMl9fKQorICBnZXRjaGFyKCk7CisjZWxpZiBkZWZpbmVkKE5FVFdBUkUpCisgIHByZXNzYW55a2V5KCk7CisjZW5kaWYKK30KKworI2VuZGlmIC8qIF9fU1lNQklBTjMyX18gfHwgTkVUV0FSRSAqLworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9wYW55a2V5LmggYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9wYW55a2V5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmZDY1OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3BhbnlrZXkuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfUEFOWUtFWV9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfUEFOWUtFWV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWYgZGVmaW5lZChfX1NZTUJJQU4zMl9fKSB8fCBkZWZpbmVkKE5FVFdBUkUpCisKK3ZvaWQgdG9vbF9wcmVzc2FueWtleSh2b2lkKTsKKworI2Vsc2UKKworI2RlZmluZSB0b29sX3ByZXNzYW55a2V5KCkgQ3VybF9ub3Bfc3RtdAorCisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfUEFOWUtFWV9IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX3BhcmFtaGxwLmMgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9wYXJhbWhscC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOGU3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9wYXJhbWhscC5jCkBAIC0wLDAgKzEsMzg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpbmNsdWRlICJyYXdzdHIuaCIKKworI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCisvKiB1c2Ugb3VyIG93biBwcmludGYoKSBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJjdXJseC5oIgorCisjaW5jbHVkZSAidG9vbF9jZmdhYmxlLmgiCisjaW5jbHVkZSAidG9vbF9nZXRwYXJhbS5oIgorI2luY2x1ZGUgInRvb2xfZ2V0cGFzcy5oIgorI2luY2x1ZGUgInRvb2xfaG9tZWRpci5oIgorI2luY2x1ZGUgInRvb2xfbXNncy5oIgorI2luY2x1ZGUgInRvb2xfcGFyYW1obHAuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiIC8qIGtlZXAgdGhpcyBhcyBMQVNUIGluY2x1ZGUgKi8KKworc3RydWN0IGdldG91dCAqbmV3X2dldG91dChzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcpCit7CisgIHN0cnVjdCBnZXRvdXQgKm5vZGUgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBnZXRvdXQpKTsKKyAgc3RydWN0IGdldG91dCAqbGFzdCA9IGNvbmZpZy0+dXJsX2xhc3Q7CisgIGlmKG5vZGUpIHsKKyAgICAvKiBhcHBlbmQgdGhpcyBuZXcgbm9kZSBsYXN0IGluIHRoZSBsaXN0ICovCisgICAgaWYobGFzdCkKKyAgICAgIGxhc3QtPm5leHQgPSBub2RlOworICAgIGVsc2UKKyAgICAgIGNvbmZpZy0+dXJsX2xpc3QgPSBub2RlOyAvKiBmaXJzdCBub2RlICovCisKKyAgICAvKiBtb3ZlIHRoZSBsYXN0IHBvaW50ZXIgKi8KKyAgICBjb25maWctPnVybF9sYXN0ID0gbm9kZTsKKworICAgIG5vZGUtPmZsYWdzID0gY29uZmlnLT5kZWZhdWx0X25vZGVfZmxhZ3M7CisgIH0KKyAgcmV0dXJuIG5vZGU7Cit9CisKK1BhcmFtZXRlckVycm9yIGZpbGUyc3RyaW5nKGNoYXIgKipidWZwLCBGSUxFICpmaWxlKQoreworICBjaGFyIGJ1ZmZlclsyNTZdOworICBjaGFyICpwdHI7CisgIGNoYXIgKnN0cmluZyA9IE5VTEw7CisgIHNpemVfdCBzdHJpbmdsZW4gPSAwOworICBzaXplX3QgYnVmbGVuOworCisgIGlmKGZpbGUpIHsKKyAgICB3aGlsZShmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBmaWxlKSkgeworICAgICAgaWYoKHB0ciA9IHN0cmNocihidWZmZXIsICdccicpKSAhPSBOVUxMKQorICAgICAgICAqcHRyID0gJ1wwJzsKKyAgICAgIGlmKChwdHIgPSBzdHJjaHIoYnVmZmVyLCAnXG4nKSkgIT0gTlVMTCkKKyAgICAgICAgKnB0ciA9ICdcMCc7CisgICAgICBidWZsZW4gPSBzdHJsZW4oYnVmZmVyKTsKKyAgICAgIGlmKChwdHIgPSByZWFsbG9jKHN0cmluZywgc3RyaW5nbGVuK2J1ZmxlbisxKSkgPT0gTlVMTCkgeworICAgICAgICBDdXJsX3NhZmVmcmVlKHN0cmluZyk7CisgICAgICAgIHJldHVybiBQQVJBTV9OT19NRU07CisgICAgICB9CisgICAgICBzdHJpbmcgPSBwdHI7CisgICAgICBzdHJjcHkoc3RyaW5nK3N0cmluZ2xlbiwgYnVmZmVyKTsKKyAgICAgIHN0cmluZ2xlbiArPSBidWZsZW47CisgICAgfQorICB9CisgICpidWZwID0gc3RyaW5nOworICByZXR1cm4gUEFSQU1fT0s7Cit9CisKK1BhcmFtZXRlckVycm9yIGZpbGUybWVtb3J5KGNoYXIgKipidWZwLCBzaXplX3QgKnNpemUsIEZJTEUgKmZpbGUpCit7CisgIGNoYXIgKm5ld2J1ZjsKKyAgY2hhciAqYnVmZmVyID0gTlVMTDsKKyAgc2l6ZV90IGFsbG9jID0gNTEyOworICBzaXplX3QgbnVzZWQgPSAwOworICBzaXplX3QgbnJlYWQ7CisKKyAgaWYoZmlsZSkgeworICAgIGRvIHsKKyAgICAgIGlmKCFidWZmZXIgfHwgKGFsbG9jID09IG51c2VkKSkgeworICAgICAgICAvKiBzaXplX3Qgb3ZlcmZsb3cgZGV0ZWN0aW9uIGZvciBodWdlIGZpbGVzICovCisgICAgICAgIGlmKGFsbG9jKzEgPiAoKHNpemVfdCktMSkvMikgeworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoYnVmZmVyKTsKKyAgICAgICAgICByZXR1cm4gUEFSQU1fTk9fTUVNOworICAgICAgICB9CisgICAgICAgIGFsbG9jICo9IDI7CisgICAgICAgIC8qIGFsbG9jYXRlIGFuIGV4dHJhIGNoYXIsIHJlc2VydmVkIHNwYWNlLCBmb3IgbnVsbCB0ZXJtaW5hdGlvbiAqLworICAgICAgICBpZigobmV3YnVmID0gcmVhbGxvYyhidWZmZXIsIGFsbG9jKzEpKSA9PSBOVUxMKSB7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShidWZmZXIpOworICAgICAgICAgIHJldHVybiBQQVJBTV9OT19NRU07CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyID0gbmV3YnVmOworICAgICAgfQorICAgICAgbnJlYWQgPSBmcmVhZChidWZmZXIrbnVzZWQsIDEsIGFsbG9jLW51c2VkLCBmaWxlKTsKKyAgICAgIG51c2VkICs9IG5yZWFkOworICAgIH0gd2hpbGUobnJlYWQpOworICAgIC8qIG51bGwgdGVybWluYXRlIHRoZSBidWZmZXIgaW4gY2FzZSBpdCdzIHVzZWQgYXMgYSBzdHJpbmcgbGF0ZXIgKi8KKyAgICBidWZmZXJbbnVzZWRdID0gJ1wwJzsKKyAgICAvKiBmcmVlIHRyYWlsaW5nIHNsYWNrIHNwYWNlLCBpZiBwb3NzaWJsZSAqLworICAgIGlmKGFsbG9jICE9IG51c2VkKSB7CisgICAgICBpZigobmV3YnVmID0gcmVhbGxvYyhidWZmZXIsIG51c2VkKzEpKSA9PSBOVUxMKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUoYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIFBBUkFNX05PX01FTTsKKyAgICAgIH0KKyAgICAgIGJ1ZmZlciA9IG5ld2J1ZjsKKyAgICB9CisgICAgLyogZGlzY2FyZCBidWZmZXIgaWYgbm90aGluZyB3YXMgcmVhZCAqLworICAgIGlmKCFudXNlZCkgeworICAgICAgQ3VybF9zYWZlZnJlZShidWZmZXIpOyAvKiBubyBzdHJpbmcgKi8KKyAgICB9CisgIH0KKyAgKnNpemUgPSBudXNlZDsKKyAgKmJ1ZnAgPSBidWZmZXI7CisgIHJldHVybiBQQVJBTV9PSzsKK30KKwordm9pZCBjbGVhbmFyZyhjaGFyICpzdHIpCit7CisjaWZkZWYgSEFWRV9XUklUQUJMRV9BUkdWCisgIC8qIG5vdyB0aGF0IEdldFN0ciBoYXMgY29waWVkIHRoZSBjb250ZW50cyBvZiBuZXh0YXJnLCB3aXBlIHRoZSBuZXh0CisgICAqIGFyZ3VtZW50IG91dCBzbyB0aGF0IHRoZSB1c2VybmFtZTpwYXNzd29yZCBpc24ndCBkaXNwbGF5ZWQgaW4gdGhlCisgICAqIHN5c3RlbSBwcm9jZXNzIGxpc3QgKi8KKyAgaWYoc3RyKSB7CisgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzdHIpOworICAgIG1lbXNldChzdHIsICcgJywgbGVuKTsKKyAgfQorI2Vsc2UKKyAgKHZvaWQpc3RyOworI2VuZGlmCit9CisKKy8qCisgKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCB3cml0ZSB0aGUgaW50ZWdlciBpbiB0aGUgZ2l2ZW4gYWRkcmVzcy4gUmV0dXJuCisgKiBub24temVybyBvbiBmYWlsdXJlLCB6ZXJvIG9uIHN1Y2Nlc3MuCisgKgorICogU2luY2UgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aXRoIHRoZSAnbmV4dGFyZycgcG9pbnRlciBmcm9tIHdpdGhpbiB0aGUKKyAqIGdldHBhcmFtZXRlciBhIGxvdCwgd2UgbXVzdCBjaGVjayBpdCBmb3IgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBzdHIKKyAqIGRhdGEuCisgKi8KKworaW50IHN0cjJudW0obG9uZyAqdmFsLCBjb25zdCBjaGFyICpzdHIpCit7CisgIGlmKHN0cikgeworICAgIGNoYXIgKmVuZHB0cjsKKyAgICBsb25nIG51bSA9IHN0cnRvbChzdHIsICZlbmRwdHIsIDEwKTsKKyAgICBpZigoZW5kcHRyICE9IHN0cikgJiYgKGVuZHB0ciA9PSBzdHIgKyBzdHJsZW4oc3RyKSkpIHsKKyAgICAgICp2YWwgPSBudW07CisgICAgICByZXR1cm4gMDsgIC8qIE9rICovCisgICAgfQorICB9CisgIHJldHVybiAxOyAvKiBiYWRuZXNzICovCit9CisKKy8qCisgKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBtb2RpZnkgdGhlIGxvbmcgaW4gdGhlIGdpdmVuIGFkZHJlc3MuIFJldHVybgorICogbm9uLXplcm8gb24gZmFpbHVyZSwgemVybyBvbiBzdWNjZXNzLgorICoKKyAqIFRoZSBzdHJpbmcgaXMgYSBsaXN0IG9mIHByb3RvY29scworICoKKyAqIFNpbmNlIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2l0aCB0aGUgJ25leHRhcmcnIHBvaW50ZXIgZnJvbSB3aXRoaW4gdGhlCisgKiBnZXRwYXJhbWV0ZXIgYSBsb3QsIHdlIG11c3QgY2hlY2sgaXQgZm9yIE5VTEwgYmVmb3JlIGFjY2Vzc2luZyB0aGUgc3RyCisgKiBkYXRhLgorICovCisKK2xvbmcgcHJvdG8ybnVtKHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZywgbG9uZyAqdmFsLCBjb25zdCBjaGFyICpzdHIpCit7CisgIGNoYXIgKmJ1ZmZlcjsKKyAgY29uc3QgY2hhciAqc2VwID0gIiwiOworICBjaGFyICp0b2tlbjsKKworICBzdGF0aWMgc3RydWN0IHNwcm90b3MgeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgbG9uZyBiaXQ7CisgIH0gY29uc3QgcHJvdG9zW10gPSB7CisgICAgeyAiYWxsIiwgQ1VSTFBST1RPX0FMTCB9LAorICAgIHsgImh0dHAiLCBDVVJMUFJPVE9fSFRUUCB9LAorICAgIHsgImh0dHBzIiwgQ1VSTFBST1RPX0hUVFBTIH0sCisgICAgeyAiZnRwIiwgQ1VSTFBST1RPX0ZUUCB9LAorICAgIHsgImZ0cHMiLCBDVVJMUFJPVE9fRlRQUyB9LAorICAgIHsgInNjcCIsIENVUkxQUk9UT19TQ1AgfSwKKyAgICB7ICJzZnRwIiwgQ1VSTFBST1RPX1NGVFAgfSwKKyAgICB7ICJ0ZWxuZXQiLCBDVVJMUFJPVE9fVEVMTkVUIH0sCisgICAgeyAibGRhcCIsIENVUkxQUk9UT19MREFQIH0sCisgICAgeyAibGRhcHMiLCBDVVJMUFJPVE9fTERBUFMgfSwKKyAgICB7ICJkaWN0IiwgQ1VSTFBST1RPX0RJQ1QgfSwKKyAgICB7ICJmaWxlIiwgQ1VSTFBST1RPX0ZJTEUgfSwKKyAgICB7ICJ0ZnRwIiwgQ1VSTFBST1RPX1RGVFAgfSwKKyAgICB7ICJpbWFwIiwgQ1VSTFBST1RPX0lNQVAgfSwKKyAgICB7ICJpbWFwcyIsIENVUkxQUk9UT19JTUFQUyB9LAorICAgIHsgInBvcDMiLCBDVVJMUFJPVE9fUE9QMyB9LAorICAgIHsgInBvcDNzIiwgQ1VSTFBST1RPX1BPUDNTIH0sCisgICAgeyAic210cCIsIENVUkxQUk9UT19TTVRQIH0sCisgICAgeyAic210cHMiLCBDVVJMUFJPVE9fU01UUFMgfSwKKyAgICB7ICJydHNwIiwgQ1VSTFBST1RPX1JUU1AgfSwKKyAgICB7ICJnb3BoZXIiLCBDVVJMUFJPVE9fR09QSEVSIH0sCisgICAgeyBOVUxMLCAwIH0KKyAgfTsKKworICBpZighc3RyKQorICAgIHJldHVybiAxOworCisgIGJ1ZmZlciA9IHN0cmR1cChzdHIpOyAvKiBiZWNhdXNlIHN0cnRvayBjb3JydXB0cyBpdCAqLworICBpZighYnVmZmVyKQorICAgIHJldHVybiAxOworCisgIGZvcih0b2tlbiA9IHN0cnRvayhidWZmZXIsIHNlcCk7CisgICAgICB0b2tlbjsKKyAgICAgIHRva2VuID0gc3RydG9rKE5VTEwsIHNlcCkpIHsKKyAgICBlbnVtIGVfYWN0aW9uIHsgYWxsb3csIGRlbnksIHNldCB9IGFjdGlvbiA9IGFsbG93OworCisgICAgc3RydWN0IHNwcm90b3MgY29uc3QgKnBwOworCisgICAgLyogUHJvY2VzcyB0b2tlbiBtb2RpZmllcnMgKi8KKyAgICB3aGlsZSghSVNBTE5VTSgqdG9rZW4pKSB7IC8qIG1heSBiZSBOVUxMIGlmIHRva2VuIGlzIGFsbCBtb2RpZmllcnMgKi8KKyAgICAgIHN3aXRjaCAoKnRva2VuKyspIHsKKyAgICAgIGNhc2UgJz0nOgorICAgICAgICBhY3Rpb24gPSBzZXQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnLSc6CisgICAgICAgIGFjdGlvbiA9IGRlbnk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnKyc6CisgICAgICAgIGFjdGlvbiA9IGFsbG93OworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IC8qIEluY2x1ZGVzIGNhc2Ugb2YgdGVybWluYXRpbmcgTlVMTCAqLworICAgICAgICBDdXJsX3NhZmVmcmVlKGJ1ZmZlcik7CisgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgIH0KKworICAgIGZvcihwcD1wcm90b3M7IHBwLT5uYW1lOyBwcCsrKSB7CisgICAgICBpZihjdXJseF9yYXdfZXF1YWwodG9rZW4sIHBwLT5uYW1lKSkgeworICAgICAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgICAgICBjYXNlIGRlbnk6CisgICAgICAgICAgKnZhbCAmPSB+KHBwLT5iaXQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGFsbG93OgorICAgICAgICAgICp2YWwgfD0gcHAtPmJpdDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBzZXQ6CisgICAgICAgICAgKnZhbCA9IHBwLT5iaXQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgaWYoIShwcC0+bmFtZSkpIHsgLyogdW5rbm93biBwcm90b2NvbCAqLworICAgICAgLyogSWYgdGhleSBoYXZlIHNwZWNpZmllZCBvbmx5IHRoaXMgcHJvdG9jb2wsIHdlIHNheSB0cmVhdCBpdCBhcworICAgICAgICAgaWYgbm8gcHJvdG9jb2xzIGFyZSBhbGxvd2VkICovCisgICAgICBpZihhY3Rpb24gPT0gc2V0KQorICAgICAgICAqdmFsID0gMDsKKyAgICAgIHdhcm5mKGNvbmZpZywgInVucmVjb2duaXplZCBwcm90b2NvbCAnJXMnXG4iLCB0b2tlbik7CisgICAgfQorICB9CisgIEN1cmxfc2FmZWZyZWUoYnVmZmVyKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogUGFyc2VzIHRoZSBnaXZlbiBzdHJpbmcgbG9va2luZyBmb3IgYW4gb2Zmc2V0ICh3aGljaCBtYXkgYmUKKyAqIGEgbGFyZ2VyLXRoYW4taW50ZWdlciB2YWx1ZSkuCisgKgorICogQHBhcmFtIHZhbCAgdGhlIG9mZnNldCB0byBwb3B1bGF0ZQorICogQHBhcmFtIHN0ciAgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBvZmZzZXQKKyAqIEByZXR1cm4gemVybyBpZiBzdWNjZXNzZnVsLCBub24temVybyBpZiBmYWlsdXJlLgorICovCitpbnQgc3RyMm9mZnNldChjdXJsX29mZl90ICp2YWwsIGNvbnN0IGNoYXIgKnN0cikKK3sKKyNpZihDVVJMX1NJWkVPRl9DVVJMX09GRl9UID4gQ1VSTF9TSVpFT0ZfTE9ORykKKyAgKnZhbCA9IGN1cmx4X3N0cnRvb2ZmdChzdHIsIE5VTEwsIDApOworICBpZigoKnZhbCA9PSBDVVJMX09GRl9UX01BWCB8fCAqdmFsID09IENVUkxfT0ZGX1RfTUlOKSAmJiAoRVJSTk8gPT0gRVJBTkdFKSkKKyAgICByZXR1cm4gMTsKKyNlbHNlCisgICp2YWwgPSBzdHJ0b2woc3RyLCBOVUxMLCAwKTsKKyAgaWYoKCp2YWwgPT0gTE9OR19NSU4gfHwgKnZhbCA9PSBMT05HX01BWCkgJiYgRVJSTk8gPT0gRVJBTkdFKQorICAgIHJldHVybiAxOworI2VuZGlmCisgIHJldHVybiAwOworfQorCitQYXJhbWV0ZXJFcnJvciBjaGVja3Bhc3N3ZChjb25zdCBjaGFyICpraW5kLCAvKiBmb3Igd2hhdCBwdXJwb3NlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqdXNlcnB3ZCkgICAvKiBwb2ludGVyIHRvIGFsbG9jYXRlZCBzdHJpbmcgKi8KK3sKKyAgY2hhciAqcHRyOworCisgIGlmKCEqdXNlcnB3ZCkKKyAgICByZXR1cm4gUEFSQU1fT0s7CisKKyAgcHRyID0gc3RyY2hyKCp1c2VycHdkLCAnOicpOworICBpZighcHRyKSB7CisgICAgLyogbm8gcGFzc3dvcmQgcHJlc2VudCwgcHJvbXB0IGZvciBvbmUgKi8KKyAgICBjaGFyIHBhc3N3ZFsyNTZdID0gIiI7CisgICAgY2hhciBwcm9tcHRbMjU2XTsKKyAgICBzaXplX3QgcGFzc3dkbGVuOworICAgIHNpemVfdCB1c2VybGVuID0gc3RybGVuKCp1c2VycHdkKTsKKyAgICBjaGFyICpwYXNzcHRyOworCisgICAgLyogYnVpbGQgYSBuaWNlLWxvb2tpbmcgcHJvbXB0ICovCisgICAgY3VybHhfbXNucHJpbnRmKHByb21wdCwgc2l6ZW9mKHByb21wdCksCisgICAgICAgICAgICAgICAgICAgICJFbnRlciAlcyBwYXNzd29yZCBmb3IgdXNlciAnJXMnOiIsCisgICAgICAgICAgICAgICAgICAgIGtpbmQsICp1c2VycHdkKTsKKworICAgIC8qIGdldCBwYXNzd29yZCAqLworICAgIGdldHBhc3Nfcihwcm9tcHQsIHBhc3N3ZCwgc2l6ZW9mKHBhc3N3ZCkpOworICAgIHBhc3N3ZGxlbiA9IHN0cmxlbihwYXNzd2QpOworCisgICAgLyogZXh0ZW5kIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGFyZWEgdG8gZml0IHRoZSBwYXNzd29yZCB0b28gKi8KKyAgICBwYXNzcHRyID0gcmVhbGxvYygqdXNlcnB3ZCwKKyAgICAgICAgICAgICAgICAgICAgICBwYXNzd2RsZW4gKyAxICsgLyogYW4gZXh0cmEgZm9yIHRoZSBjb2xvbiAqLworICAgICAgICAgICAgICAgICAgICAgIHVzZXJsZW4gKyAxKTsgICAvKiBhbiBleHRyYSBmb3IgdGhlIHplcm8gKi8KKyAgICBpZighcGFzc3B0cikKKyAgICAgIHJldHVybiBQQVJBTV9OT19NRU07CisKKyAgICAvKiBhcHBlbmQgdGhlIHBhc3N3b3JkIHNlcGFyYXRlZCB3aXRoIGEgY29sb24gKi8KKyAgICBwYXNzcHRyW3VzZXJsZW5dID0gJzonOworICAgIG1lbWNweSgmcGFzc3B0clt1c2VybGVuKzFdLCBwYXNzd2QsIHBhc3N3ZGxlbisxKTsKKyAgICAqdXNlcnB3ZCA9IHBhc3NwdHI7CisgIH0KKyAgcmV0dXJuIFBBUkFNX09LOworfQorCitQYXJhbWV0ZXJFcnJvciBhZGQybGlzdChzdHJ1Y3QgY3VybF9zbGlzdCAqKmxpc3QsIGNvbnN0IGNoYXIgKnB0cikKK3sKKyAgc3RydWN0IGN1cmxfc2xpc3QgKm5ld2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZCgqbGlzdCwgcHRyKTsKKyAgaWYobmV3bGlzdCkKKyAgICAqbGlzdCA9IG5ld2xpc3Q7CisgIGVsc2UKKyAgICByZXR1cm4gUEFSQU1fTk9fTUVNOworCisgIHJldHVybiBQQVJBTV9PSzsKK30KKworaW50IGZ0cGZpbGVtZXRob2Qoc3RydWN0IENvbmZpZ3VyYWJsZSAqY29uZmlnLCBjb25zdCBjaGFyICpzdHIpCit7CisgIGlmKGN1cmx4X3Jhd19lcXVhbCgic2luZ2xlY3dkIiwgc3RyKSkKKyAgICByZXR1cm4gQ1VSTEZUUE1FVEhPRF9TSU5HTEVDV0Q7CisgIGlmKGN1cmx4X3Jhd19lcXVhbCgibm9jd2QiLCBzdHIpKQorICAgIHJldHVybiBDVVJMRlRQTUVUSE9EX05PQ1dEOworICBpZihjdXJseF9yYXdfZXF1YWwoIm11bHRpY3dkIiwgc3RyKSkKKyAgICByZXR1cm4gQ1VSTEZUUE1FVEhPRF9NVUxUSUNXRDsKKyAgd2FybmYoY29uZmlnLCAidW5yZWNvZ25pemVkIGZ0cCBmaWxlIG1ldGhvZCAnJXMnLCB1c2luZyBkZWZhdWx0XG4iLCBzdHIpOworICByZXR1cm4gQ1VSTEZUUE1FVEhPRF9NVUxUSUNXRDsKK30KKworaW50IGZ0cGNjY21ldGhvZChzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcsIGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgaWYoY3VybHhfcmF3X2VxdWFsKCJwYXNzaXZlIiwgc3RyKSkKKyAgICByZXR1cm4gQ1VSTEZUUFNTTF9DQ0NfUEFTU0lWRTsKKyAgaWYoY3VybHhfcmF3X2VxdWFsKCJhY3RpdmUiLCBzdHIpKQorICAgIHJldHVybiBDVVJMRlRQU1NMX0NDQ19BQ1RJVkU7CisgIHdhcm5mKGNvbmZpZywgInVucmVjb2duaXplZCBmdHAgQ0NDIG1ldGhvZCAnJXMnLCB1c2luZyBkZWZhdWx0XG4iLCBzdHIpOworICByZXR1cm4gQ1VSTEZUUFNTTF9DQ0NfUEFTU0lWRTsKK30KKworbG9uZyBkZWxlZ2F0aW9uKHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZywgY2hhciAqc3RyKQoreworICBpZihjdXJseF9yYXdfZXF1YWwoIm5vbmUiLCBzdHIpKQorICAgIHJldHVybiBDVVJMR1NTQVBJX0RFTEVHQVRJT05fTk9ORTsKKyAgaWYoY3VybHhfcmF3X2VxdWFsKCJwb2xpY3kiLCBzdHIpKQorICAgIHJldHVybiBDVVJMR1NTQVBJX0RFTEVHQVRJT05fUE9MSUNZX0ZMQUc7CisgIGlmKGN1cmx4X3Jhd19lcXVhbCgiYWx3YXlzIiwgc3RyKSkKKyAgICByZXR1cm4gQ1VSTEdTU0FQSV9ERUxFR0FUSU9OX0ZMQUc7CisgIHdhcm5mKGNvbmZpZywgInVucmVjb2duaXplZCBkZWxlZ2F0aW9uIG1ldGhvZCAnJXMnLCB1c2luZyBub25lXG4iLCBzdHIpOworICByZXR1cm4gQ1VSTEdTU0FQSV9ERUxFR0FUSU9OX05PTkU7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX3BhcmFtaGxwLmggYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9wYXJhbWhscC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzk5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9wYXJhbWhscC5oCkBAIC0wLDAgKzEsNTEgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfVE9PTF9QQVJBTUhMUF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfUEFSQU1ITFBfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworc3RydWN0IGdldG91dCAqbmV3X2dldG91dChzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcpOworCitQYXJhbWV0ZXJFcnJvciBmaWxlMnN0cmluZyhjaGFyICoqYnVmcCwgRklMRSAqZmlsZSk7CisKK1BhcmFtZXRlckVycm9yIGZpbGUybWVtb3J5KGNoYXIgKipidWZwLCBzaXplX3QgKnNpemUsIEZJTEUgKmZpbGUpOworCit2b2lkIGNsZWFuYXJnKGNoYXIgKnN0cik7CisKK2ludCBzdHIybnVtKGxvbmcgKnZhbCwgY29uc3QgY2hhciAqc3RyKTsKKworbG9uZyBwcm90bzJudW0oc3RydWN0IENvbmZpZ3VyYWJsZSAqY29uZmlnLCBsb25nICp2YWwsIGNvbnN0IGNoYXIgKnN0cik7CisKK2ludCBzdHIyb2Zmc2V0KGN1cmxfb2ZmX3QgKnZhbCwgY29uc3QgY2hhciAqc3RyKTsKKworUGFyYW1ldGVyRXJyb3IgY2hlY2twYXNzd2QoY29uc3QgY2hhciAqa2luZCwgY2hhciAqKnVzZXJwd2QpOworCitQYXJhbWV0ZXJFcnJvciBhZGQybGlzdChzdHJ1Y3QgY3VybF9zbGlzdCAqKmxpc3QsIGNvbnN0IGNoYXIgKnB0cik7CisKK2ludCBmdHBmaWxlbWV0aG9kKHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZywgY29uc3QgY2hhciAqc3RyKTsKKworaW50IGZ0cGNjY21ldGhvZChzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcsIGNvbnN0IGNoYXIgKnN0cik7CisKK2xvbmcgZGVsZWdhdGlvbihzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcsIGNoYXIgKnN0cik7CisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9UT09MX1BBUkFNSExQX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfcGFyc2VjZmcuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3BhcnNlY2ZnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYwZDMxOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3BhcnNlY2ZnLmMKQEAgLTAsMCArMSwzMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCisvKiB1c2Ugb3VyIG93biBwcmludGYoKSBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJjdXJseC5oIgorCisjaW5jbHVkZSAidG9vbF9jZmdhYmxlLmgiCisjaW5jbHVkZSAidG9vbF9nZXRwYXJhbS5oIgorI2luY2x1ZGUgInRvb2xfaGVscGVycy5oIgorI2luY2x1ZGUgInRvb2xfaG9tZWRpci5oIgorI2luY2x1ZGUgInRvb2xfbXNncy5oIgorI2luY2x1ZGUgInRvb2xfcGFyc2VjZmcuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiIC8qIGtlZXAgdGhpcyBhcyBMQVNUIGluY2x1ZGUgKi8KKworI2RlZmluZSBDVVJMUkMgRE9UX0NIQVIgImN1cmxyYyIKKyNkZWZpbmUgSVNTRVAoeCkgKCgoeCkgPT0gJz0nKSB8fCAoKHgpID09ICc6JykpCisKK3N0YXRpYyBjb25zdCBjaGFyICp1bnNsYXNocXVvdGUoY29uc3QgY2hhciAqbGluZSwgY2hhciAqcGFyYW0pOworc3RhdGljIGNoYXIgKm15X2dldF9saW5lKEZJTEUgKmZwKTsKKworLyogcmV0dXJuIDAgb24gZXZlcnl0aGluZy1pcy1maW5lLCBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlICovCitpbnQgcGFyc2Vjb25maWcoY29uc3QgY2hhciAqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgc3RydWN0IENvbmZpZ3VyYWJsZSAqY29uZmlnKQoreworICBpbnQgcmVzOworICBGSUxFICpmaWxlOworICBjaGFyIGZpbGVidWZmZXJbNTEyXTsKKyAgYm9vbCB1c2VkYXJnOworICBjaGFyICpob21lOworICBpbnQgcmMgPSAwOworCisgIGlmKCFmaWxlbmFtZSB8fCAhKmZpbGVuYW1lKSB7CisgICAgLyogTlVMTCBvciBubyBmaWxlIG5hbWUgYXR0ZW1wdHMgdG8gbG9hZCAuY3VybHJjIGZyb20gdGhlIGhvbWVkaXIhICovCisKKyNpZm5kZWYgX19BTUlHQV9fCisgICAgZmlsZW5hbWUgPSBDVVJMUkM7ICAgLyogc2Vuc2libGUgZGVmYXVsdCAqLworICAgIGhvbWUgPSBob21lZGlyKCk7ICAgIC8qIHBvcnRhYmxlIGhvbWVkaXIgZmluZGVyICovCisgICAgaWYoaG9tZSkgeworICAgICAgaWYoc3RybGVuKGhvbWUpIDwgKHNpemVvZihmaWxlYnVmZmVyKSAtIHN0cmxlbihDVVJMUkMpKSkgeworICAgICAgICBzbnByaW50ZihmaWxlYnVmZmVyLCBzaXplb2YoZmlsZWJ1ZmZlciksCisgICAgICAgICAgICAgICAgICIlcyVzJXMiLCBob21lLCBESVJfQ0hBUiwgQ1VSTFJDKTsKKworI2lmZGVmIFdJTjMyCisgICAgICAgIC8qIENoZWNrIGlmIHRoZSBmaWxlIGV4aXN0cyAtIGlmIG5vdCwgdHJ5IENVUkxSQyBpbiB0aGUgc2FtZQorICAgICAgICAgKiBkaXJlY3RvcnkgYXMgb3VyIGV4ZWN1dGFibGUKKyAgICAgICAgICovCisgICAgICAgIGZpbGUgPSBmb3BlbihmaWxlYnVmZmVyLCAiciIpOworICAgICAgICBpZihmaWxlICE9IE5VTEwpIHsKKyAgICAgICAgICBmY2xvc2UoZmlsZSk7CisgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlYnVmZmVyOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIC8qIEdldCB0aGUgZmlsZW5hbWUgb2Ygb3VyIGV4ZWN1dGFibGUuIEdldE1vZHVsZUZpbGVOYW1lIGlzCisgICAgICAgICAgICogYWxyZWFkeSBkZWNsYXJlZCB2aWEgaW5jbHVzaW9ucyBkb25lIGluIHNldHVwIGhlYWRlciBmaWxlLgorICAgICAgICAgICAqIFdlIGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZyB0aGUgQVNDSUkgdmVyc2lvbiBoZXJlLgorICAgICAgICAgICAqLworICAgICAgICAgIGludCBuID0gR2V0TW9kdWxlRmlsZU5hbWUoMCwgZmlsZWJ1ZmZlciwgc2l6ZW9mKGZpbGVidWZmZXIpKTsKKyAgICAgICAgICBpZihuID4gMCAmJiBuIDwgKGludClzaXplb2YoZmlsZWJ1ZmZlcikpIHsKKyAgICAgICAgICAgIC8qIFdlIGdvdCBhIHZhbGlkIGZpbGVuYW1lIC0gZ2V0IHRoZSBkaXJlY3RvcnkgcGFydCAqLworICAgICAgICAgICAgY2hhciAqbGFzdGRpcmNoYXIgPSBzdHJyY2hyKGZpbGVidWZmZXIsICdcXCcpOworICAgICAgICAgICAgaWYobGFzdGRpcmNoYXIpIHsKKyAgICAgICAgICAgICAgc2l6ZV90IHJlbWFpbmluZzsKKyAgICAgICAgICAgICAgKmxhc3RkaXJjaGFyID0gMDsKKyAgICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBlbm91Z2ggc3BhY2UsIGJ1aWxkIHRoZSBSQyBmaWxlbmFtZSAqLworICAgICAgICAgICAgICByZW1haW5pbmcgPSBzaXplb2YoZmlsZWJ1ZmZlcikgLSBzdHJsZW4oZmlsZWJ1ZmZlcik7CisgICAgICAgICAgICAgIGlmKHN0cmxlbihDVVJMUkMpIDwgcmVtYWluaW5nIC0gMSkgeworICAgICAgICAgICAgICAgIHNucHJpbnRmKGxhc3RkaXJjaGFyLCByZW1haW5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzJXMiLCBESVJfQ0hBUiwgQ1VSTFJDKTsKKyAgICAgICAgICAgICAgICAvKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgaWYgaXQgZXhpc3RzIC0gd2UgZG8KKyAgICAgICAgICAgICAgICAgKiB0aGF0IGxhdGVyCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlYnVmZmVyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisjZWxzZSAvKiBXSU4zMiAqLworICAgICAgICBmaWxlbmFtZSA9IGZpbGVidWZmZXI7CisjZW5kaWYgLyogV0lOMzIgKi8KKyAgICAgIH0KKyAgICAgIEN1cmxfc2FmZWZyZWUoaG9tZSk7IC8qIHdlJ3ZlIHVzZWQgaXQsIG5vdyBmcmVlIGl0ICovCisgICAgfQorCisjIGVsc2UgLyogX19BTUlHQV9fICovCisgICAgLyogT24gQW1pZ2FPUyBhbGwgdGhlIGNvbmZpZyBmaWxlcyBhcmUgaW50byBlbnY6CisgICAgICovCisgICAgZmlsZW5hbWUgPSAiRU5WOiIgQ1VSTFJDOworCisjZW5kaWYKKyAgfQorCisgIGlmKHN0cmNtcChmaWxlbmFtZSwiLSIpKQorICAgIGZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKyAgZWxzZQorICAgIGZpbGUgPSBzdGRpbjsKKworICBpZihmaWxlKSB7CisgICAgY2hhciAqbGluZTsKKyAgICBjaGFyICphbGluZTsKKyAgICBjaGFyICpvcHRpb247CisgICAgY2hhciAqcGFyYW07CisgICAgaW50IGxpbmVubyA9IDA7CisgICAgYm9vbCBhbGxvY2VkX3BhcmFtOworCisgICAgd2hpbGUoTlVMTCAhPSAoYWxpbmUgPSBteV9nZXRfbGluZShmaWxlKSkpIHsKKyAgICAgIGxpbmVubysrOworICAgICAgbGluZSA9IGFsaW5lOworICAgICAgYWxsb2NlZF9wYXJhbT1GQUxTRTsKKworICAgICAgLyogbGluZSB3aXRoICMgaW4gdGhlIGZpcnN0IG5vbi1ibGFuayBjb2x1bW4gaXMgYSBjb21tZW50ISAqLworICAgICAgd2hpbGUoKmxpbmUgJiYgSVNTUEFDRSgqbGluZSkpCisgICAgICAgIGxpbmUrKzsKKworICAgICAgc3dpdGNoKCpsaW5lKSB7CisgICAgICBjYXNlICcjJzoKKyAgICAgIGNhc2UgJy8nOgorICAgICAgY2FzZSAnXHInOgorICAgICAgY2FzZSAnXG4nOgorICAgICAgY2FzZSAnKic6CisgICAgICBjYXNlICdcMCc6CisgICAgICAgIEN1cmxfc2FmZWZyZWUoYWxpbmUpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLyogdGhlIG9wdGlvbiBrZXl3b3JkcyBzdGFydHMgaGVyZSAqLworICAgICAgb3B0aW9uID0gbGluZTsKKyAgICAgIHdoaWxlKCpsaW5lICYmICFJU1NQQUNFKCpsaW5lKSAmJiAhSVNTRVAoKmxpbmUpKQorICAgICAgICBsaW5lKys7CisgICAgICAvKiAuLi4gYW5kIGhhcyBlbmRlZCBoZXJlICovCisKKyAgICAgIGlmKCpsaW5lKQorICAgICAgICAqbGluZSsrID0gJ1wwJzsgLyogemVybyB0ZXJtaW5hdGUsIHdlIGhhdmUgYSBsb2NhbCBjb3B5IG9mIHRoZSBkYXRhICovCisKKyNpZmRlZiBERUJVR19DT05GSUcKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiR09UOiAlc1xuIiwgb3B0aW9uKTsKKyNlbmRpZgorCisgICAgICAvKiBwYXNzIHNwYWNlcyBhbmQgc2VwYXJhdG9yKHMpICovCisgICAgICB3aGlsZSgqbGluZSAmJiAoSVNTUEFDRSgqbGluZSkgfHwgSVNTRVAoKmxpbmUpKSkKKyAgICAgICAgbGluZSsrOworCisgICAgICAvKiB0aGUgcGFyYW1ldGVyIHN0YXJ0cyBoZXJlICh1bmxlc3MgcXVvdGVkKSAqLworICAgICAgaWYoKmxpbmUgPT0gJ1wiJykgeworICAgICAgICAvKiBxdW90ZWQgcGFyYW1ldGVyLCBkbyB0aGUgcXVvdGUgZGFuY2UgKi8KKyAgICAgICAgbGluZSsrOworICAgICAgICBwYXJhbSA9IG1hbGxvYyhzdHJsZW4obGluZSkgKyAxKTsgLyogcGFyYW1ldGVyICovCisgICAgICAgIGlmKCFwYXJhbSkgeworICAgICAgICAgIC8qIG91dCBvZiBtZW1vcnkgKi8KKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKGFsaW5lKTsKKyAgICAgICAgICByYyA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYWxsb2NlZF9wYXJhbSA9IFRSVUU7CisgICAgICAgICh2b2lkKXVuc2xhc2hxdW90ZShsaW5lLCBwYXJhbSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgcGFyYW0gPSBsaW5lOyAvKiBwYXJhbWV0ZXIgc3RhcnRzIGhlcmUgKi8KKyAgICAgICAgd2hpbGUoKmxpbmUgJiYgIUlTU1BBQ0UoKmxpbmUpKQorICAgICAgICAgIGxpbmUrKzsKKyAgICAgICAgKmxpbmUgPSAnXDAnOyAvKiB6ZXJvIHRlcm1pbmF0ZSAqLworICAgICAgfQorCisgICAgICBpZihwYXJhbSAmJiAhKnBhcmFtKSB7CisgICAgICAgIC8qIGRvIHRoaXMgc28gZ2V0cGFyYW1ldGVyIGNhbiBjaGVjayBmb3IgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAgICAgICAgT3RoZXJ3aXNlIGl0IGFsd2F5cyB0aGlua3MgdGhlcmUncyBhIHBhcmFtZXRlci4gKi8KKyAgICAgICAgaWYoYWxsb2NlZF9wYXJhbSkKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHBhcmFtKTsKKyAgICAgICAgcGFyYW0gPSBOVUxMOworICAgICAgfQorCisjaWZkZWYgREVCVUdfQ09ORklHCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBBUkFNOiBcIiVzXCJcbiIsKHBhcmFtID8gcGFyYW0gOiAiKG51bGwpIikpOworI2VuZGlmCisgICAgICByZXMgPSBnZXRwYXJhbWV0ZXIob3B0aW9uLCBwYXJhbSwgJnVzZWRhcmcsIGNvbmZpZyk7CisKKyAgICAgIGlmKHBhcmFtICYmICpwYXJhbSAmJiAhdXNlZGFyZykKKyAgICAgICAgLyogd2UgcGFzc2VkIGluIGEgcGFyYW1ldGVyIHRoYXQgd2Fzbid0IHVzZWQhICovCisgICAgICAgIHJlcyA9IFBBUkFNX0dPVF9FWFRSQV9QQVJBTUVURVI7CisKKyAgICAgIGlmKHJlcyAhPSBQQVJBTV9PSykgeworICAgICAgICAvKiB0aGUgaGVscCByZXF1ZXN0IGlzbid0IHJlYWxseSBhbiBlcnJvciAqLworICAgICAgICBpZighc3RyY21wKGZpbGVuYW1lLCAiLSIpKSB7CisgICAgICAgICAgZmlsZW5hbWUgPSAoY2hhciAqKSI8c3RkaW4+IjsKKyAgICAgICAgfQorICAgICAgICBpZihQQVJBTV9IRUxQX1JFUVVFU1RFRCAhPSByZXMpIHsKKyAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24gPSBwYXJhbTJ0ZXh0KHJlcyk7CisgICAgICAgICAgd2FybmYoY29uZmlnLCAiJXM6JWQ6IHdhcm5pbmc6ICclcycgJXNcbiIsCisgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubywgb3B0aW9uLCByZWFzb24pOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKGFsbG9jZWRfcGFyYW0pCisgICAgICAgIEN1cmxfc2FmZWZyZWUocGFyYW0pOworCisgICAgICBDdXJsX3NhZmVmcmVlKGFsaW5lKTsKKyAgICB9CisgICAgaWYoZmlsZSAhPSBzdGRpbikKKyAgICAgIGZjbG9zZShmaWxlKTsKKyAgfQorICBlbHNlCisgICAgcmMgPSAxOyAvKiBjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICovCisKKyAgcmV0dXJuIHJjOworfQorCisvKgorICogQ29waWVzIHRoZSBzdHJpbmcgZnJvbSBsaW5lIHRvIHRoZSBidWZmZXIgYXQgcGFyYW0sIHVucXVvdGluZworICogYmFja3NsYXNoLXF1b3RlZCBjaGFyYWN0ZXJzIGFuZCBOVUwtdGVybWluYXRpbmcgdGhlIG91dHB1dCBzdHJpbmcuCisgKiBTdG9wcyBhdCB0aGUgZmlyc3Qgbm9uLWJhY2tzbGFzaC1xdW90ZWQgZG91YmxlIHF1b3RlIGNoYXJhY3RlciBvciB0aGUKKyAqIGVuZCBvZiB0aGUgaW5wdXQgc3RyaW5nLiBwYXJhbSBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMgdGhlIGlucHV0CisgKiBzdHJpbmcuICBSZXR1cm5zIHRoZSBwb2ludGVyIGFmdGVyIHRoZSBsYXN0IGhhbmRsZWQgaW5wdXQgY2hhcmFjdGVyLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqdW5zbGFzaHF1b3RlKGNvbnN0IGNoYXIgKmxpbmUsIGNoYXIgKnBhcmFtKQoreworICB3aGlsZSgqbGluZSAmJiAoKmxpbmUgIT0gJ1wiJykpIHsKKyAgICBpZigqbGluZSA9PSAnXFwnKSB7CisgICAgICBjaGFyIG91dDsKKyAgICAgIGxpbmUrKzsKKworICAgICAgLyogZGVmYXVsdCBpcyB0byBvdXRwdXQgdGhlIGxldHRlciBhZnRlciB0aGUgYmFja3NsYXNoICovCisgICAgICBzd2l0Y2gob3V0ID0gKmxpbmUpIHsKKyAgICAgIGNhc2UgJ1wwJzoKKyAgICAgICAgY29udGludWU7IC8qIHRoaXMnbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wICovCisgICAgICBjYXNlICd0JzoKKyAgICAgICAgb3V0ID0gJ1x0JzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICduJzoKKyAgICAgICAgb3V0ID0gJ1xuJzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdyJzoKKyAgICAgICAgb3V0ID0gJ1xyJzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICd2JzoKKyAgICAgICAgb3V0ID0gJ1x2JzsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICAqcGFyYW0rKyA9IG91dDsKKyAgICAgIGxpbmUrKzsKKyAgICB9CisgICAgZWxzZQorICAgICAgKnBhcmFtKysgPSAqbGluZSsrOworICB9CisgICpwYXJhbSA9ICdcMCc7IC8qIGFsd2F5cyB6ZXJvIHRlcm1pbmF0ZSAqLworICByZXR1cm4gbGluZTsKK30KKworLyoKKyAqIFJlYWRzIGEgbGluZSBmcm9tIHRoZSBnaXZlbiBmaWxlLCBlbnN1cmluZyBpcyBOVUwgdGVybWluYXRlZC4KKyAqIFRoZSBwb2ludGVyIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKyAqIE5VTEwgaXMgcmV0dXJuZWQgb24gYW4gb3V0IG9mIG1lbW9yeSBjb25kaXRpb24uCisgKi8KK3N0YXRpYyBjaGFyICpteV9nZXRfbGluZShGSUxFICpmcCkKK3sKKyAgY2hhciBidWZbNDA5Nl07CisgIGNoYXIgKm5sID0gTlVMTDsKKyAgY2hhciAqcmV0dmFsID0gTlVMTDsKKworICBkbyB7CisgICAgaWYoTlVMTCA9PSBmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkpCisgICAgICBicmVhazsKKyAgICBpZighcmV0dmFsKSB7CisgICAgICByZXR2YWwgPSBzdHJkdXAoYnVmKTsKKyAgICAgIGlmKCFyZXR2YWwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGNoYXIgKnB0cjsKKyAgICAgIHB0ciA9IHJlYWxsb2MocmV0dmFsLCBzdHJsZW4ocmV0dmFsKSArIHN0cmxlbihidWYpICsgMSk7CisgICAgICBpZighcHRyKSB7CisgICAgICAgIEN1cmxfc2FmZWZyZWUocmV0dmFsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgICByZXR2YWwgPSBwdHI7CisgICAgICBzdHJjYXQocmV0dmFsLCBidWYpOworICAgIH0KKyAgICBubCA9IHN0cmNocihyZXR2YWwsICdcbicpOworICB9IHdoaWxlKCFubCk7CisKKyAgaWYobmwpCisgICAgKm5sID0gJ1wwJzsKKworICByZXR1cm4gcmV0dmFsOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9wYXJzZWNmZy5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfcGFyc2VjZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWExZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfcGFyc2VjZmcuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfUEFSU0VDRkdfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX1BBUlNFQ0ZHX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKK2ludCBwYXJzZWNvbmZpZyhjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVE9PTF9QQVJTRUNGR19IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX3NkZWNscy5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfc2RlY2xzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAzNjUyNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3NkZWNscy5oCkBAIC0wLDAgKzEsMTQxIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfU0RFQ0xTX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVE9PTF9TREVDTFNfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworCisvKgorICogT3V0U3RydWN0IHZhcmlhYmxlcyBrZWVwIHRyYWNrIG9mIGluZm9ybWF0aW9uIHJlbGF0aXZlIHRvIGN1cmwncworICogb3V0cHV0IHdyaXRpbmcsIHdoaWNoIG1heSB0YWtlIHBsYWNlIHRvIGEgc3RhbmRhcmQgc3RyZWFtIG9yIGEgZmlsZS4KKyAqCisgKiAnZmlsZW5hbWUnIG1lbWJlciBpcyBlaXRoZXIgYSBwb2ludGVyIHRvIGEgZmlsZSBuYW1lIHN0cmluZyBvciBOVUxMCisgKiB3aGVuIGRlYWxpbmcgd2l0aCBhIHN0YW5kYXJkIHN0cmVhbS4KKyAqCisgKiAnYWxsb2NfZmlsZW5hbWUnIG1lbWJlciBpcyBUUlVFIHdoZW4gc3RyaW5nIHBvaW50ZWQgYnkgJ2ZpbGVuYW1lJyBoYXMgYmVlbgorICogZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCAnYmVsb25ncycgdG8gdGhpcyBPdXRTdHJ1Y3QsIG90aGVyd2lzZSBGQUxTRS4KKyAqCisgKiAnc19pc3JlZycgbWVtYmVyIGlzIFRSVUUgd2hlbiBvdXRwdXQgZ29lcyB0byBhIHJlZ3VsYXIgZmlsZSwgdGhpcyBhbHNvCisgKiBpbXBsaWVzIHRoYXQgb3V0cHV0IGlzICdzZWVrYWJsZScgYW5kICdhcHBlbmRhYmxlJyBhbmQgYWxzbyB0aGF0IG1lbWJlcgorICogJ2ZpbGVuYW1lJyBwb2ludHMgdG8gZmlsZSBuYW1lJ3Mgc3RyaW5nLiBGb3IgYW55IHN0YW5kYXJkIHN0cmVhbSBtZW1iZXIKKyAqICdzX2lzcmVnJyB3aWxsIGJlIEZBTFNFLgorICoKKyAqICdmb3BlbmVkJyBtZW1iZXIgaXMgVFJVRSB3aGVuIG91dHB1dCBnb2VzIHRvIGEgcmVndWxhciBmaWxlIGFuZCBpdAorICogaGFzIGJlZW4gZm9wZW4nZWQsIHJlcXVpcmluZyBpdCB0byBiZSBjbG9zZWQgbGF0ZXIgb24uIEluIGFueSBvdGhlcgorICogY2FzZSB0aGlzIGlzIEZBTFNFLgorICoKKyAqICdzdHJlYW0nIG1lbWJlciBpcyBhIHBvaW50ZXIgdG8gYSBzdHJlYW0gY29udHJvbGxpbmcgb2JqZWN0IGFzIHJldHVybmVkCisgKiBmcm9tIGEgJ2ZvcGVuJyBjYWxsIG9yIGEgc3RhbmRhcmQgc3RyZWFtLgorICoKKyAqICdjb25maWcnIG1lbWJlciBpcyBhIHBvaW50ZXIgdG8gYXNzb2NpYXRlZCAnQ29uZmlndXJhYmxlJyBzdHJ1Y3QuCisgKgorICogJ2J5dGVzJyBtZW1iZXIgcmVwcmVzZW50cyBhbW91bnQgd3JpdHRlbiBzbyBmYXIuCisgKgorICogJ2luaXQnIG1lbWJlciBob2xkcyBvcmlnaW5hbCBmaWxlIHNpemUgb3Igb2Zmc2V0IGF0IHdoaWNoIHRydW5jYXRpb24gaXMKKyAqIHRha2luZyBwbGFjZS4gQWx3YXlzIHplcm8gdW5sZXNzIGFwcGVuZGluZyB0byBhIG5vbi1lbXB0eSByZWd1bGFyIGZpbGUuCisgKi8KKworc3RydWN0IE91dFN0cnVjdCB7CisgIGNoYXIgKmZpbGVuYW1lOworICBib29sIGFsbG9jX2ZpbGVuYW1lOworICBib29sIHNfaXNyZWc7CisgIGJvb2wgZm9wZW5lZDsKKyAgRklMRSAqc3RyZWFtOworICBzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWc7CisgIGN1cmxfb2ZmX3QgYnl0ZXM7CisgIGN1cmxfb2ZmX3QgaW5pdDsKK307CisKKworLyoKKyAqIEluU3RydWN0IHZhcmlhYmxlcyBrZWVwIHRyYWNrIG9mIGluZm9ybWF0aW9uIHJlbGF0aXZlIHRvIGN1cmwncworICogaW5wdXQgcmVhZGluZywgd2hpY2ggbWF5IHRha2UgcGxhY2UgZnJvbSBzdGRpbiBvciBmcm9tIHNvbWUgZmlsZS4KKyAqCisgKiAnZmQnIG1lbWJlciBpcyBlaXRoZXIgJ3N0ZGluJyBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIFNURElOX0ZJTEVOTworICogb3IgYSBmaWxlIGRlc2NyaXB0b3IgYXMgcmV0dXJuZWQgZnJvbSBhbiAnb3BlbicgY2FsbCBmb3Igc29tZSBmaWxlLgorICoKKyAqICdjb25maWcnIG1lbWJlciBpcyBhIHBvaW50ZXIgdG8gYXNzb2NpYXRlZCAnQ29uZmlndXJhYmxlJyBzdHJ1Y3QuCisgKi8KKworc3RydWN0IEluU3RydWN0IHsKKyAgaW50IGZkOworICBzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWc7Cit9OworCisKKy8qCisgKiBBIGxpbmtlZCBsaXN0IG9mIHRoZXNlICdnZXRvdXQnIG5vZGVzIGNvbnRhaW4gVVJMJ3MgdG8gZmV0Y2gsCisgKiBhcyB3ZWxsIGFzIGluZm9ybWF0aW9uIHJlbGF0aXZlIHRvIHdoZXJlIFVSTCBjb250ZW50cyBzaG91bGQKKyAqIGJlIHN0b3JlZCBvciB3aGljaCBmaWxlIHNob3VsZCBiZSB1cGxvYWRlZC4KKyAqLworCitzdHJ1Y3QgZ2V0b3V0IHsKKyAgc3RydWN0IGdldG91dCAqbmV4dDsgICAgICAvKiBuZXh0IG9uZSAqLworICBjaGFyICAgICAgICAgICp1cmw7ICAgICAgIC8qIHRoZSBVUkwgd2UgZGVhbCB3aXRoICovCisgIGNoYXIgICAgICAgICAgKm91dGZpbGU7ICAgLyogd2hlcmUgdG8gc3RvcmUgdGhlIG91dHB1dCAqLworICBjaGFyICAgICAgICAgICppbmZpbGU7ICAgIC8qIGZpbGUgdG8gdXBsb2FkLCBpZiBHRVRPVVRfVVBMT0FEIGlzIHNldCAqLworICBpbnQgICAgICAgICAgICBmbGFnczsgICAgIC8qIG9wdGlvbnMgLSBjb21wb3NlZCBvZiBHRVRPVVRfKiBiaXRzICovCit9OworCisjZGVmaW5lIEdFVE9VVF9PVVRGSUxFICAgICgxPDwwKSAgLyogc2V0IHdoZW4gb3V0ZmlsZSBpcyBkZWVtZWQgZG9uZSAqLworI2RlZmluZSBHRVRPVVRfVVJMICAgICAgICAoMTw8MSkgIC8qIHNldCB3aGVuIFVSTCBpcyBkZWVtZWQgZG9uZSAqLworI2RlZmluZSBHRVRPVVRfVVNFUkVNT1RFICAoMTw8MikgIC8qIHVzZSByZW1vdGUgZmlsZSBuYW1lIGxvY2FsbHkgKi8KKyNkZWZpbmUgR0VUT1VUX1VQTE9BRCAgICAgKDE8PDMpICAvKiBpZiBzZXQsIC1UIGhhcyBiZWVuIHVzZWQgKi8KKyNkZWZpbmUgR0VUT1VUX05PVVBMT0FEICAgKDE8PDQpICAvKiBpZiBzZXQsIC1UICIiIGhhcyBiZWVuIHVzZWQgKi8KKworCisvKgorICogJ3RyYWNlJyBlbnVtZXJhdGlvbiByZXByZXNlbnRzIGN1cmwncyBvdXRwdXQgbG9vayduIGZlZWwgcG9zc2liaWxpdGllcy4KKyAqLworCit0eXBlZGVmIGVudW0geworICBUUkFDRV9OT05FLCAgLyogbm8gdHJhY2UvdmVyYm9zZSBvdXRwdXQgYXQgYWxsICovCisgIFRSQUNFX0JJTiwgICAvKiB0Y3BkdW1wIGluc3BpcmVkIGxvb2sgKi8KKyAgVFJBQ0VfQVNDSUksIC8qIGxpa2UgKkJJTiBidXQgd2l0aG91dCB0aGUgaGV4IG91dHB1dCAqLworICBUUkFDRV9QTEFJTiAgLyogLXYvLS12ZXJib3NlIHR5cGUgKi8KK30gdHJhY2U7CisKKworLyoKKyAqICdIdHRwUmVxJyBlbnVtZXJhdGlvbiByZXByZXNlbnRzIEhUVFAgcmVxdWVzdCB0eXBlcy4KKyAqLworCit0eXBlZGVmIGVudW0geworICBIVFRQUkVRX1VOU1BFQywgIC8qIGZpcnN0IGluIGxpc3QgKi8KKyAgSFRUUFJFUV9HRVQsCisgIEhUVFBSRVFfSEVBRCwKKyAgSFRUUFJFUV9QT1NULAorICBIVFRQUkVRX1NJTVBMRVBPU1QsCisgIEhUVFBSRVFfQ1VTVE9NLAorICBIVFRQUkVRX0xBU1QgICAgIC8qIGxhc3QgaW4gbGlzdCAqLworfSBIdHRwUmVxOworCisKKy8qCisgKiBDb21wbGV0ZSBzdHJ1Y3QgZGVjbGFyYXRpb25zIHdoaWNoIGhhdmUgQ29uZmlndXJhYmxlIHN0cnVjdCBtZW1iZXJzLAorICoganVzdCBpbiBjYXNlIHRoaXMgaGVhZGVyIGlzIGRpcmVjdGx5IGluY2x1ZGVkIGluIHNvbWUgc291cmNlIGZpbGUuCisgKi8KKworI2luY2x1ZGUgInRvb2xfY2ZnYWJsZS5oIgorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVE9PTF9TREVDTFNfSCAqLworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9zZXRvcHQuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3NldG9wdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZTc4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9zZXRvcHQuYwpAQCAtMCwwICsxLDQ4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmbmRlZiBDVVJMX0RJU0FCTEVfTElCQ1VSTF9PUFRJT04KKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKKy8qIHVzZSBvdXIgb3duIHByaW50ZigpIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgImN1cmx4LmgiCisKKyNpbmNsdWRlICJ0b29sX2NmZ2FibGUuaCIKKyNpbmNsdWRlICJ0b29sX2Vhc3lzcmMuaCIKKyNpbmNsdWRlICJ0b29sX3NldG9wdC5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLworCisvKiBMb29rdXAgdGFibGVzIGZvciBjb252ZXJ0aW5nIHNldG9wdCB2YWx1ZXMgYmFjayB0byBzeW1ib2xzICovCisvKiBGb3IgZW51bXMsIHZhbHVlcyBtYXkgYmUgaW4gYW55IG9yZGVyLiAqLworLyogRm9yIGJpdCBtYXNrcywgcHV0IGNvbWJpbmF0aW9ucyBmaXJzdCwgdGhlbiBzaW5nbGUgYml0cywgKi8KKy8qIGFuZCBmaW5hbGx5IGFueSAiTk9ORSIgdmFsdWUuICovCisKKyNkZWZpbmUgTlYoZSkgeyNlLCBlfQorI2RlZmluZSBOVkVORCB7TlVMTCwgMH0gICAgICAgICAvKiBzZW50aW5lbCB0byBtYXJrIGVuZCBvZiBsaXN0ICovCisKK2NvbnN0IE5hbWVWYWx1ZSBzZXRvcHRfbnZfQ1VSTFBST1hZW10gPSB7CisgIE5WKENVUkxQUk9YWV9IVFRQKSwKKyAgTlYoQ1VSTFBST1hZX0hUVFBfMV8wKSwKKyAgTlYoQ1VSTFBST1hZX1NPQ0tTNCksCisgIE5WKENVUkxQUk9YWV9TT0NLUzUpLAorICBOVihDVVJMUFJPWFlfU09DS1M0QSksCisgIE5WKENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUUpLAorICBOVkVORCwKK307CisKK2NvbnN0IE5hbWVWYWx1ZSBzZXRvcHRfbnZfQ1VSTEFVVEhbXSA9IHsKKyAgTlYoQ1VSTEFVVEhfQU5ZKSwgICAgICAgICAgICAgLyogY29tYmluYXRpb24gKi8KKyAgTlYoQ1VSTEFVVEhfQU5ZU0FGRSksICAgICAgICAgLyogY29tYmluYXRpb24gKi8KKyAgTlYoQ1VSTEFVVEhfQkFTSUMpLAorICBOVihDVVJMQVVUSF9ESUdFU1QpLAorICBOVihDVVJMQVVUSF9HU1NORUdPVElBVEUpLAorICBOVihDVVJMQVVUSF9OVExNKSwKKyAgTlYoQ1VSTEFVVEhfRElHRVNUX0lFKSwKKyAgTlYoQ1VSTEFVVEhfTlRMTV9XQiksCisgIE5WKENVUkxBVVRIX09OTFkpLAorICBOVihDVVJMQVVUSF9OT05FKSwKKyAgTlZFTkQsCit9OworCitjb25zdCBOYW1lVmFsdWUgc2V0b3B0X252X0NVUkxfSFRUUF9WRVJTSU9OW10gPSB7CisgIE5WKENVUkxfSFRUUF9WRVJTSU9OX05PTkUpLAorICBOVihDVVJMX0hUVFBfVkVSU0lPTl8xXzApLAorICBOVihDVVJMX0hUVFBfVkVSU0lPTl8xXzEpLAorICBOVkVORCwKK307CisKK2NvbnN0IE5hbWVWYWx1ZSBzZXRvcHRfbnZfQ1VSTF9TU0xWRVJTSU9OW10gPSB7CisgIE5WKENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUKSwKKyAgTlYoQ1VSTF9TU0xWRVJTSU9OX1RMU3YxKSwKKyAgTlYoQ1VSTF9TU0xWRVJTSU9OX1NTTHYyKSwKKyAgTlYoQ1VSTF9TU0xWRVJTSU9OX1NTTHYzKSwKKyAgTlZFTkQsCit9OworCitjb25zdCBOYW1lVmFsdWUgc2V0b3B0X252X0NVUkxfVElNRUNPTkRbXSA9IHsKKyAgTlYoQ1VSTF9USU1FQ09ORF9JRk1PRFNJTkNFKSwKKyAgTlYoQ1VSTF9USU1FQ09ORF9JRlVOTU9EU0lOQ0UpLAorICBOVihDVVJMX1RJTUVDT05EX0xBU1RNT0QpLAorICBOVihDVVJMX1RJTUVDT05EX05PTkUpLAorICBOVkVORCwKK307CisKK2NvbnN0IE5hbWVWYWx1ZSBzZXRvcHRfbnZfQ1VSTEZUUFNTTF9DQ0NbXSA9IHsKKyAgTlYoQ1VSTEZUUFNTTF9DQ0NfTk9ORSksCisgIE5WKENVUkxGVFBTU0xfQ0NDX1BBU1NJVkUpLAorICBOVihDVVJMRlRQU1NMX0NDQ19BQ1RJVkUpLAorICBOVkVORCwKK307CisKKy8qIFRoZXNlIG1hcHBpbmdzIGVzc2VudGlhbGx5IHRyaXBsaWNhdGVkIC0gc2VlCisgKiB0b29sX2xpYmluZm8uYyBhbmQgdG9vbF9wYXJhbWhscC5jICovCitjb25zdCBOYW1lVmFsdWUgc2V0b3B0X252X0NVUkxQUk9UT1tdID0geworICBOVihDVVJMUFJPVE9fQUxMKSwgICAgICAgICAgICAvKiBjb21iaW5hdGlvbiAqLworICBOVihDVVJMUFJPVE9fRElDVCksCisgIE5WKENVUkxQUk9UT19GSUxFKSwKKyAgTlYoQ1VSTFBST1RPX0ZUUCksCisgIE5WKENVUkxQUk9UT19GVFBTKSwKKyAgTlYoQ1VSTFBST1RPX0dPUEhFUiksCisgIE5WKENVUkxQUk9UT19IVFRQKSwKKyAgTlYoQ1VSTFBST1RPX0hUVFBTKSwKKyAgTlYoQ1VSTFBST1RPX0lNQVApLAorICBOVihDVVJMUFJPVE9fSU1BUFMpLAorICBOVihDVVJMUFJPVE9fTERBUCksCisgIE5WKENVUkxQUk9UT19MREFQUyksCisgIE5WKENVUkxQUk9UT19QT1AzKSwKKyAgTlYoQ1VSTFBST1RPX1BPUDNTKSwKKyAgTlYoQ1VSTFBST1RPX1JUU1ApLAorICBOVihDVVJMUFJPVE9fU0NQKSwKKyAgTlYoQ1VSTFBST1RPX1NGVFApLAorICBOVihDVVJMUFJPVE9fU01UUCksCisgIE5WKENVUkxQUk9UT19TTVRQUyksCisgIE5WKENVUkxQUk9UT19URUxORVQpLAorICBOVihDVVJMUFJPVE9fVEZUUCksCisgIE5WRU5ELAorfTsKKworLyogRm9ybWF0IGFuZCBhZGQgY29kZTsganVtcCB0byBub21lbSBvbiBtYWxsb2MgZXJyb3IgKi8KKyNkZWZpbmUgQUREKGFyZ3MpIGRvIHsgXAorICByZXQgPSBlYXN5c3JjX2FkZCBhcmdzOyBcCisgIGlmKHJldCkgXAorICAgIGdvdG8gbm9tZW07IFwKK30gV0hJTEVfRkFMU0UKKyNkZWZpbmUgQURERihhcmdzKSBkbyB7IFwKKyAgcmV0ID0gZWFzeXNyY19hZGRmIGFyZ3M7IFwKKyAgaWYocmV0KSBcCisgICAgZ290byBub21lbTsgXAorfSBXSElMRV9GQUxTRQorCisjZGVmaW5lIERFQ0wwKHMpIEFERCgoJmVhc3lzcmNfZGVjbCwgcykpCisjZGVmaW5lIERFQ0wxKGYsYSkgQURERigoJmVhc3lzcmNfZGVjbCwgZixhKSkKKworI2RlZmluZSBEQVRBMChzKSBBREQoKCZlYXN5c3JjX2RhdGEsIHMpKQorI2RlZmluZSBEQVRBMShmLGEpIEFEREYoKCZlYXN5c3JjX2RhdGEsIGYsYSkpCisjZGVmaW5lIERBVEEyKGYsYSxiKSBBRERGKCgmZWFzeXNyY19kYXRhLCBmLGEsYikpCisjZGVmaW5lIERBVEEzKGYsYSxiLGMpIEFEREYoKCZlYXN5c3JjX2RhdGEsIGYsYSxiLGMpKQorCisjZGVmaW5lIENPREUwKHMpIEFERCgoJmVhc3lzcmNfY29kZSwgcykpCisjZGVmaW5lIENPREUxKGYsYSkgQURERigoJmVhc3lzcmNfY29kZSwgZixhKSkKKyNkZWZpbmUgQ09ERTIoZixhLGIpIEFEREYoKCZlYXN5c3JjX2NvZGUsIGYsYSxiKSkKKyNkZWZpbmUgQ09ERTMoZixhLGIsYykgQURERigoJmVhc3lzcmNfY29kZSwgZixhLGIsYykpCisKKyNkZWZpbmUgQ0xFQU4wKHMpIEFERCgoJmVhc3lzcmNfY2xlYW4sIHMpKQorI2RlZmluZSBDTEVBTjEoZixhKSBBRERGKCgmZWFzeXNyY19jbGVhbiwgZixhKSkKKworI2RlZmluZSBSRU0wKHMpIEFERCgoJmVhc3lzcmNfdG9vaGFyZCwgcykpCisjZGVmaW5lIFJFTTEoZixhKSBBRERGKCgmZWFzeXNyY190b29oYXJkLCBmLGEpKQorI2RlZmluZSBSRU0yKGYsYSxiKSBBRERGKCgmZWFzeXNyY190b29oYXJkLCBmLGEsYikpCisKKy8qIEVzY2FwZSBzdHJpbmcgdG8gQyBzdHJpbmcgc3ludGF4LiAgUmV0dXJuIE5VTEwgaWYgb3V0IG9mIG1lbW9yeS4KKyAqIElzIHRoaXMgY29ycmVjdCBmb3IgdGhvc2Ugd2Fja3kgRUJDRElDIGd1eXM/ICovCitzdGF0aWMgY2hhciAqY19lc2NhcGUoY29uc3QgY2hhciAqc3RyKQoreworICBzaXplX3QgbGVuID0gMDsKKyAgY29uc3QgY2hhciAqczsKKyAgdW5zaWduZWQgY2hhciBjOworICBjaGFyICplc2NhcGVkLCAqZTsKKyAgLyogQWxsb2NhdGUgc3BhY2UgYmFzZWQgb24gd29yc3QtY2FzZSAqLworICBsZW4gPSBzdHJsZW4oc3RyKTsKKyAgZXNjYXBlZCA9IG1hbGxvYyg0ICogbGVuICsgMSk7CisgIGlmKCFlc2NhcGVkKQorICAgIHJldHVybiBOVUxMOworCisgIGUgPSBlc2NhcGVkOworICBmb3Iocz1zdHI7IChjPSpzKSAhPSAnXDAnOyBzKyspIHsKKyAgICBpZihjPT0nXG4nKSB7CisgICAgICBzdHJjcHkoZSwgIlxcbiIpOworICAgICAgZSArPSAyOworICAgIH0KKyAgICBlbHNlIGlmKGM9PSdccicpIHsKKyAgICAgIHN0cmNweShlLCAiXFxyIik7CisgICAgICBlICs9IDI7CisgICAgfQorICAgIGVsc2UgaWYoYz09J1x0JykgeworICAgICAgc3RyY3B5KGUsICJcXHQiKTsKKyAgICAgIGUgKz0gMjsKKyAgICB9CisgICAgZWxzZSBpZihjPT0nXFwnKSB7CisgICAgICBzdHJjcHkoZSwgIlxcXFwiKTsKKyAgICAgIGUgKz0gMjsKKyAgICB9CisgICAgZWxzZSBpZihjPT0nIicpIHsKKyAgICAgIHN0cmNweShlLCAiXFxcIiIpOworICAgICAgZSArPSAyOworICAgIH0KKyAgICBlbHNlIGlmKCEgaXNwcmludChjKSkgeworICAgICAgc3ByaW50ZihlLCAiXFwlMDNvIiwgYyk7CisgICAgICBlICs9IDQ7CisgICAgfQorICAgIGVsc2UKKyAgICAgICplKysgPSBjOworICB9CisgICplID0gJ1wwJzsKKyAgcmV0dXJuIGVzY2FwZWQ7Cit9CisKKy8qIHNldG9wdCB3cmFwcGVyIGZvciBlbnVtIHR5cGVzICovCitDVVJMY29kZSB0b29sX3NldG9wdF9lbnVtKENVUkwgKmN1cmwsIHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgQ1VSTG9wdGlvbiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5hbWVWYWx1ZSAqbnZsaXN0LCBsb25nIGx2YWwpCit7CisgIENVUkxjb2RlIHJldCA9IENVUkxFX09LOworICBib29sIHNraXAgPSBGQUxTRTsKKworICByZXQgPSBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIHRhZywgbHZhbCk7CisgIGlmKCFsdmFsKQorICAgIHNraXAgPSBUUlVFOworCisgIGlmKGNvbmZpZy0+bGliY3VybCAmJiAhc2tpcCAmJiAhcmV0KSB7CisgICAgLyogd2Ugb25seSB1c2UgdGhpcyBmb3IgcmVhbCBpZiAtLWxpYmN1cmwgd2FzIHVzZWQgKi8KKyAgICBjb25zdCBOYW1lVmFsdWUgKm52ID0gTlVMTDsKKyAgICBmb3IobnY9bnZsaXN0OyBudi0+bmFtZTsgbnYrKykgeworICAgICAgaWYobnYtPnZhbHVlID09IGx2YWwpIGJyZWFrOyAvKiBmb3VuZCBpdCAqLworICAgIH0KKyAgICBpZighIG52LT5uYW1lKSB7CisgICAgICAvKiBJZiBubyBkZWZpbml0aW9uIHdhcyBmb3VuZCwgb3V0cHV0IGFuIGV4cGxpY2l0IHZhbHVlLgorICAgICAgICogVGhpcyBjb3VsZCBoYXBwZW4gaWYgbmV3IHZhbHVlcyBhcmUgZGVmaW5lZCBhbmQgdXNlZAorICAgICAgICogYnV0IHRoZSBOYW1lVmFsdWUgbGlzdCBpcyBub3QgdXBkYXRlZC4gKi8KKyAgICAgIENPREUyKCJjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgJXMsICVsZEwpOyIsIG5hbWUsIGx2YWwpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIENPREUyKCJjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgJXMsIChsb25nKSVzKTsiLCBuYW1lLCBudi0+bmFtZSk7CisgICAgfQorICB9CisKKyBub21lbToKKyAgcmV0dXJuIHJldDsKK30KKworLyogc2V0b3B0IHdyYXBwZXIgZm9yIGJpdCBtYXNrICovCitDVVJMY29kZSB0b29sX3NldG9wdF9mbGFncyhDVVJMICpjdXJsLCBzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCBDVVJMb3B0aW9uIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5hbWVWYWx1ZSAqbnZsaXN0LCBsb25nIGx2YWwpCit7CisgIENVUkxjb2RlIHJldCA9IENVUkxFX09LOworICBib29sIHNraXAgPSBGQUxTRTsKKworICByZXQgPSBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIHRhZywgbHZhbCk7CisgIGlmKCFsdmFsKQorICAgIHNraXAgPSBUUlVFOworCisgIGlmKGNvbmZpZy0+bGliY3VybCAmJiAhc2tpcCAmJiAhcmV0KSB7CisgICAgLyogd2Ugb25seSB1c2UgdGhpcyBmb3IgcmVhbCBpZiAtLWxpYmN1cmwgd2FzIHVzZWQgKi8KKyAgICBjaGFyIHByZWFtYmxlWzgwXTsgICAgICAgICAgLyogc2hvdWxkIGFjY29tbW9kYXRlIGFueSBzeW1ib2wgbmFtZSAqLworICAgIGxvbmcgcmVzdCA9IGx2YWw7ICAgICAgICAgICAvKiBiaXRzIG5vdCBoYW5kbGVkIHlldCAqLworICAgIGNvbnN0IE5hbWVWYWx1ZSAqbnYgPSBOVUxMOworICAgIHNucHJpbnRmKHByZWFtYmxlLCBzaXplb2YocHJlYW1ibGUpLAorICAgICAgICAgICAgICJjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgJXMsICIsIG5hbWUpOworICAgIGZvcihudj1udmxpc3Q7IG52LT5uYW1lOyBudisrKSB7CisgICAgICBpZigobnYtPnZhbHVlICYgfiByZXN0KSA9PSAwKSB7CisgICAgICAgIC8qIGFsbCB2YWx1ZSBmbGFncyBjb250YWluZWQgaW4gcmVzdCAqLworICAgICAgICByZXN0ICY9IH4gbnYtPnZhbHVlOyAgICAvKiByZW1vdmUgYml0cyBoYW5kbGVkIGhlcmUgKi8KKyAgICAgICAgQ09ERTMoIiVzKGxvbmcpJXMlcyIsCisgICAgICAgICAgICAgIHByZWFtYmxlLCBudi0+bmFtZSwgcmVzdCA/ICIgfCIgOiAiKTsiKTsKKyAgICAgICAgaWYoIXJlc3QpCisgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgIC8qIGhhbmRsZWQgdGhlbSBhbGwgKi8KKyAgICAgICAgLyogcmVwbGFjZSB3aXRoIGFsbCBzcGFjZXMgZm9yIGNvbnRpbnVhdGlvbiBsaW5lICovCisgICAgICAgIHNwcmludGYocHJlYW1ibGUsICIlKnMiLCBzdHJsZW4ocHJlYW1ibGUpLCAiIik7CisgICAgICB9CisgICAgfQorICAgIC8qIElmIGFueSBiaXRzIGhhdmUgbm8gZGVmaW5pdGlvbiwgb3V0cHV0IGFuIGV4cGxpY2l0IHZhbHVlLgorICAgICAqIFRoaXMgY291bGQgaGFwcGVuIGlmIG5ldyBiaXRzIGFyZSBkZWZpbmVkIGFuZCB1c2VkCisgICAgICogYnV0IHRoZSBOYW1lVmFsdWUgbGlzdCBpcyBub3QgdXBkYXRlZC4gKi8KKyAgICBpZihyZXN0KQorICAgICAgQ09ERTIoIiVzJWxkTCk7IiwgcHJlYW1ibGUsIHJlc3QpOworICB9CisKKyBub21lbToKKyAgcmV0dXJuIHJldDsKK30KKworLyogc2V0b3B0IHdyYXBwZXIgZm9yIENVUkxPUFRfSFRUUFBPU1QgKi8KK0NVUkxjb2RlIHRvb2xfc2V0b3B0X2h0dHBwb3N0KENVUkwgKmN1cmwsIHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIENVUkxvcHRpb24gdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKnBvc3QpCit7CisgIENVUkxjb2RlIHJldCA9IENVUkxFX09LOworICBjaGFyICplc2NhcGVkID0gTlVMTDsKKyAgYm9vbCBza2lwID0gRkFMU0U7CisKKyAgcmV0ID0gY3VybF9lYXN5X3NldG9wdChjdXJsLCB0YWcsIHBvc3QpOworICBpZighcG9zdCkKKyAgICBza2lwID0gVFJVRTsKKworICBpZihjb25maWctPmxpYmN1cmwgJiYgIXNraXAgJiYgIXJldCkgeworICAgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpwcCwgKnA7CisgICAgaW50IGk7CisgICAgLyogTWF5IHVzZSBzZXZlcmFsIGh0dHBwb3N0IGxpc3RzLCBpZiBtdWx0aXBsZSBQT1NUIGFjdGlvbnMgKi8KKyAgICBpID0gKysgZWFzeXNyY19mb3JtX2NvdW50OworICAgIERFQ0wxKCJzdHJ1Y3QgY3VybF9odHRwcG9zdCAqcG9zdCVkOyIsIGkpOworICAgIERBVEExKCJwb3N0JWQgPSBOVUxMOyIsIGkpOworICAgIENMRUFOMSgiY3VybF9mb3JtZnJlZShwb3N0JWQpOyIsIGkpOworICAgIENMRUFOMSgicG9zdCVkID0gTlVMTDsiLCBpKTsKKyAgICBpZihpID09IDEpCisgICAgICBERUNMMCgic3RydWN0IGN1cmxfaHR0cHBvc3QgKnBvc3RlbmQ7Iik7CisgICAgREFUQTAoInBvc3RlbmQgPSBOVUxMOyIpOworICAgIGZvcihwPXBvc3Q7IHA7IHA9cC0+bmV4dCkgeworICAgICAgREFUQTEoImN1cmxfZm9ybWFkZCgmcG9zdCVkLCAmcG9zdGVuZCwiLCBpKTsKKyAgICAgIERBVEExKCIgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsIFwiJXNcIiwiLCBwLT5uYW1lKTsKKyAgICAgIGZvcihwcD1wOyBwcDsgcHA9cHAtPm1vcmUpIHsKKyAgICAgICAgLyogTWF5IGJlIHNldmVyYWwgZmlsZXMgdXBsb2FkZWQgZm9yIG9uZSBuYW1lOworICAgICAgICAgKiB0aGVzZSBhcmUgbGlua2VkIHRocm91Z2ggdGhlICdtb3JlJyBwb2ludGVyICovCisgICAgICAgIEN1cmxfc2FmZWZyZWUoZXNjYXBlZCk7CisgICAgICAgIGVzY2FwZWQgPSBjX2VzY2FwZShwcC0+Y29udGVudHMpOworICAgICAgICBpZighZXNjYXBlZCkgeworICAgICAgICAgIHJldCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgZ290byBub21lbTsKKyAgICAgICAgfQorICAgICAgICBpZihwcC0+ZmxhZ3MgJiBIVFRQUE9TVF9GSUxFTkFNRSkgeworICAgICAgICAgIC8qIGZpbGUgdXBsb2FkIGFzIGZvciAtRiBAZmlsZW5hbWUgKi8KKyAgICAgICAgICBEQVRBMSgiICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsIFwiJXNcIiwiLCBlc2NhcGVkKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHBwLT5mbGFncyAmIEhUVFBQT1NUX1JFQURGSUxFKSB7CisgICAgICAgICAgLyogY29udGVudCBmcm9tIGZpbGUgYXMgZm9yIC1GIDxmaWxlbmFtZSAqLworICAgICAgICAgIERBVEExKCIgICAgICAgICAgICAgQ1VSTEZPUk1fRklMRUNPTlRFTlQsIFwiJXNcIiwiLCBlc2NhcGVkKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgREFUQTEoIiAgICAgICAgICAgICBDVVJMRk9STV9DT1BZQ09OVEVOVFMsIFwiJXNcIiwiLCBlc2NhcGVkKTsKKyAgICAgICAgaWYocHAtPnNob3dmaWxlbmFtZSkgeworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoZXNjYXBlZCk7CisgICAgICAgICAgZXNjYXBlZCA9IGNfZXNjYXBlKHBwLT5zaG93ZmlsZW5hbWUpOworICAgICAgICAgIGlmKCFlc2NhcGVkKSB7CisgICAgICAgICAgICByZXQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgZ290byBub21lbTsKKyAgICAgICAgICB9CisgICAgICAgICAgREFUQTEoIiAgICAgICAgICAgICBDVVJMRk9STV9GSUxFTkFNRSwgXCIlc1wiLCIsIGVzY2FwZWQpOworICAgICAgICB9CisgICAgICAgIGlmKHBwLT5jb250ZW50dHlwZSkgeworICAgICAgICAgIEN1cmxfc2FmZWZyZWUoZXNjYXBlZCk7CisgICAgICAgICAgZXNjYXBlZCA9IGNfZXNjYXBlKHBwLT5jb250ZW50dHlwZSk7CisgICAgICAgICAgaWYoIWVzY2FwZWQpIHsKKyAgICAgICAgICAgIHJldCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgICAgICBnb3RvIG5vbWVtOworICAgICAgICAgIH0KKyAgICAgICAgICBEQVRBMSgiICAgICAgICAgICAgIENVUkxGT1JNX0NPTlRFTlRUWVBFLCBcIiVzXCIsIiwgZXNjYXBlZCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIERBVEEwKCIgICAgICAgICAgICAgQ1VSTEZPUk1fRU5EKTsiKTsKKyAgICB9CisgICAgQ09ERTIoImN1cmxfZWFzeV9zZXRvcHQoaG5kLCAlcywgcG9zdCVkKTsiLCBuYW1lLCBpKTsKKyAgfQorCisgbm9tZW06CisgIEN1cmxfc2FmZWZyZWUoZXNjYXBlZCk7CisgIHJldHVybiByZXQ7Cit9CisKKy8qIHNldG9wdCB3cmFwcGVyIGZvciBjdXJsX3NsaXN0IG9wdGlvbnMgKi8KK0NVUkxjb2RlIHRvb2xfc2V0b3B0X3NsaXN0KENVUkwgKmN1cmwsIHN0cnVjdCBDb25maWd1cmFibGUgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIENVUkxvcHRpb24gdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKmxpc3QpCit7CisgIENVUkxjb2RlIHJldCA9IENVUkxFX09LOworICBjaGFyICplc2NhcGVkID0gTlVMTDsKKyAgYm9vbCBza2lwID0gRkFMU0U7CisKKyAgcmV0ID0gY3VybF9lYXN5X3NldG9wdChjdXJsLCB0YWcsIGxpc3QpOworICBpZighbGlzdCkKKyAgICBza2lwID0gVFJVRTsKKworICBpZihjb25maWctPmxpYmN1cmwgJiYgIXNraXAgJiYgIXJldCkgeworICAgIHN0cnVjdCBjdXJsX3NsaXN0ICpzOworICAgIGludCBpOworICAgIC8qIE1heSBuZWVkIHNldmVyYWwgc2xpc3QgdmFyaWFibGVzLCBzbyBpbnZlbnQgbmFtZSAqLworICAgIGkgPSArKyBlYXN5c3JjX3NsaXN0X2NvdW50OworICAgIERFQ0wxKCJzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3QlZDsiLCBpKTsKKyAgICBEQVRBMSgic2xpc3QlZCA9IE5VTEw7IiwgaSk7CisgICAgQ0xFQU4xKCJjdXJsX3NsaXN0X2ZyZWVfYWxsKHNsaXN0JWQpOyIsIGkpOworICAgIENMRUFOMSgic2xpc3QlZCA9IE5VTEw7IiwgaSk7CisgICAgZm9yKHM9bGlzdDsgczsgcz1zLT5uZXh0KSB7CisgICAgICBDdXJsX3NhZmVmcmVlKGVzY2FwZWQpOworICAgICAgZXNjYXBlZCA9IGNfZXNjYXBlKHMtPmRhdGEpOworICAgICAgaWYoIWVzY2FwZWQpIHsKKyAgICAgICAgcmV0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgZ290byBub21lbTsKKyAgICAgIH0KKyAgICAgIERBVEEzKCJzbGlzdCVkID0gY3VybF9zbGlzdF9hcHBlbmQoc2xpc3QlZCwgXCIlc1wiKTsiLCBpLCBpLCBlc2NhcGVkKTsKKyAgICB9CisgICAgQ09ERTIoImN1cmxfZWFzeV9zZXRvcHQoaG5kLCAlcywgc2xpc3QlZCk7IiwgbmFtZSwgaSk7CisgIH0KKworIG5vbWVtOgorICBDdXJsX3NhZmVmcmVlKGVzY2FwZWQpOworICByZXR1cm4gcmV0OworfQorCisvKiBnZW5lcmljIHNldG9wdCB3cmFwcGVyIGZvciBhbGwgb3RoZXIgb3B0aW9ucy4KKyAqIFNvbWUgdHlwZSBpbmZvcm1hdGlvbiBpcyBlbmNvZGVkIGluIHRoZSB0YWcgdmFsdWUuICovCitDVVJMY29kZSB0b29sX3NldG9wdChDVVJMICpjdXJsLCBib29sIHN0ciwgc3RydWN0IENvbmZpZ3VyYWJsZSAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgQ1VSTG9wdGlvbiB0YWcsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmc7CisgIGNoYXIgYnVmWzI1Nl07CisgIGNvbnN0IGNoYXIgKnZhbHVlID0gTlVMTDsKKyAgYm9vbCByZW1hcmsgPSBGQUxTRTsKKyAgYm9vbCBza2lwID0gRkFMU0U7CisgIGJvb2wgZXNjYXBlID0gRkFMU0U7CisgIGNoYXIgKmVzY2FwZWQgPSBOVUxMOworICBDVVJMY29kZSByZXQgPSBDVVJMRV9PSzsKKworICB2YV9zdGFydChhcmcsIHRhZyk7CisKKyAgaWYodGFnIDwgQ1VSTE9QVFRZUEVfT0JKRUNUUE9JTlQpIHsKKyAgICAvKiBWYWx1ZSBpcyBleHBlY3RlZCB0byBiZSBhIGxvbmcgKi8KKyAgICBsb25nIGx2YWwgPSB2YV9hcmcoYXJnLCBsb25nKTsKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWxkTCIsIGx2YWwpOworICAgIHZhbHVlID0gYnVmOworICAgIHJldCA9IGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgdGFnLCBsdmFsKTsKKyAgICBpZighbHZhbCkKKyAgICAgIHNraXAgPSBUUlVFOworICB9CisgIGVsc2UgaWYodGFnIDwgQ1VSTE9QVFRZUEVfT0ZGX1QpIHsKKyAgICAvKiBWYWx1ZSBpcyBzb21lIHNvcnQgb2Ygb2JqZWN0IHBvaW50ZXIgKi8KKyAgICB2b2lkICpwdmFsID0gdmFfYXJnKGFyZywgdm9pZCAqKTsKKworICAgIC8qIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBuZXZlciBwcmludGFibGUgKi8KKyAgICBpZih0YWcgPj0gQ1VSTE9QVFRZUEVfRlVOQ1RJT05QT0lOVCkgeworICAgICAgaWYocHZhbCkgeworICAgICAgICB2YWx1ZSA9ICJmdW5jdGlvbnBvaW50ZXIiOworICAgICAgICByZW1hcmsgPSBUUlVFOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBza2lwID0gVFJVRTsKKyAgICB9CisKKyAgICBlbHNlIGlmKHB2YWwgJiYgc3RyKSB7CisgICAgICB2YWx1ZSA9IChjaGFyICopcHZhbDsKKyAgICAgIGVzY2FwZSA9IFRSVUU7CisgICAgfQorICAgIGVsc2UgaWYocHZhbCkgeworICAgICAgdmFsdWUgPSAib2JqZWN0cG9pbnRlciI7CisgICAgICByZW1hcmsgPSBUUlVFOworICAgIH0KKyAgICBlbHNlCisgICAgICBza2lwID0gVFJVRTsKKworICAgIHJldCA9IGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgdGFnLCBwdmFsKTsKKworICB9CisgIGVsc2UgeworICAgIC8qIFZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIGN1cmxfb2ZmX3QgKi8KKyAgICBjdXJsX29mZl90IG92YWwgPSB2YV9hcmcoYXJnLCBjdXJsX29mZl90KTsKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLAorICAgICAgICAgICAgICIoY3VybF9vZmZfdCklIiBDVVJMX0ZPUk1BVF9DVVJMX09GRl9ULCBvdmFsKTsKKyAgICB2YWx1ZSA9IGJ1ZjsKKyAgICByZXQgPSBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIHRhZywgb3ZhbCk7CisKKyAgICBpZighb3ZhbCkKKyAgICAgIHNraXAgPSBUUlVFOworICB9CisKKyAgdmFfZW5kKGFyZyk7CisKKyAgaWYoY29uZmlnLT5saWJjdXJsICYmICFza2lwICYmICFyZXQpIHsKKyAgICAvKiB3ZSBvbmx5IHVzZSB0aGlzIGZvciByZWFsIGlmIC0tbGliY3VybCB3YXMgdXNlZCAqLworCisgICAgaWYocmVtYXJrKQorICAgICAgUkVNMigiJXMgc2V0IHRvIGEgJXMiLCBuYW1lLCB2YWx1ZSk7CisgICAgZWxzZSB7CisgICAgICBpZihlc2NhcGUpIHsKKyAgICAgICAgZXNjYXBlZCA9IGNfZXNjYXBlKHZhbHVlKTsKKyAgICAgICAgaWYoIWVzY2FwZWQpIHsKKyAgICAgICAgICByZXQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgIGdvdG8gbm9tZW07CisgICAgICAgIH0KKyAgICAgICAgQ09ERTIoImN1cmxfZWFzeV9zZXRvcHQoaG5kLCAlcywgXCIlc1wiKTsiLCBuYW1lLCBlc2NhcGVkKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgQ09ERTIoImN1cmxfZWFzeV9zZXRvcHQoaG5kLCAlcywgJXMpOyIsIG5hbWUsIHZhbHVlKTsKKyAgICB9CisgIH0KKworIG5vbWVtOgorICBDdXJsX3NhZmVmcmVlKGVzY2FwZWQpOworICByZXR1cm4gcmV0OworfQorCisjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0xJQkNVUkxfT1BUSU9OICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF9zZXRvcHQuaCBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3NldG9wdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxODlhZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9zZXRvcHQuaApAQCAtMCwwICsxLDEzMCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9UT09MX1NFVE9QVF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfU0VUT1BUX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKy8qCisgKiBNYWNyb3MgdXNlZCBpbiBvcGVyYXRlKCkKKyAqLworCisjZGVmaW5lIFNFVE9QVF9DSEVDSyh2KSBkbyB7IFwKKyAgcmVzID0gKHYpOyBcCisgIGlmKHJlcykgXAorICAgIGdvdG8gc2hvd19lcnJvcjsgXAorfSBXSElMRV9GQUxTRQorCisjaWZuZGVmIENVUkxfRElTQUJMRV9MSUJDVVJMX09QVElPTgorCisvKiBBc3NvY2lhdGUgc3ltYm9saWMgbmFtZXMgd2l0aCBvcHRpb24gdmFsdWVzICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGxvbmcgdmFsdWU7Cit9IE5hbWVWYWx1ZTsKKworZXh0ZXJuIGNvbnN0IE5hbWVWYWx1ZSBzZXRvcHRfbnZfQ1VSTFBST1hZW107CitleHRlcm4gY29uc3QgTmFtZVZhbHVlIHNldG9wdF9udl9DVVJMQVVUSFtdOworZXh0ZXJuIGNvbnN0IE5hbWVWYWx1ZSBzZXRvcHRfbnZfQ1VSTF9IVFRQX1ZFUlNJT05bXTsKK2V4dGVybiBjb25zdCBOYW1lVmFsdWUgc2V0b3B0X252X0NVUkxfU1NMVkVSU0lPTltdOworZXh0ZXJuIGNvbnN0IE5hbWVWYWx1ZSBzZXRvcHRfbnZfQ1VSTF9USU1FQ09ORFtdOworZXh0ZXJuIGNvbnN0IE5hbWVWYWx1ZSBzZXRvcHRfbnZfQ1VSTEZUUFNTTF9DQ0NbXTsKK2V4dGVybiBjb25zdCBOYW1lVmFsdWUgc2V0b3B0X252X0NVUkxQUk9UT1tdOworCisvKiBNYXAgb3B0aW9ucyB0byBOYW1lVmFsdWUgc2V0cyAqLworI2RlZmluZSBzZXRvcHRfbnZfQ1VSTE9QVF9IVFRQX1ZFUlNJT04gc2V0b3B0X252X0NVUkxfSFRUUF9WRVJTSU9OCisjZGVmaW5lIHNldG9wdF9udl9DVVJMT1BUX0hUVFBBVVRIIHNldG9wdF9udl9DVVJMQVVUSAorI2RlZmluZSBzZXRvcHRfbnZfQ1VSTE9QVF9TU0xWRVJTSU9OIHNldG9wdF9udl9DVVJMX1NTTFZFUlNJT04KKyNkZWZpbmUgc2V0b3B0X252X0NVUkxPUFRfVElNRUNPTkRJVElPTiBzZXRvcHRfbnZfQ1VSTF9USU1FQ09ORAorI2RlZmluZSBzZXRvcHRfbnZfQ1VSTE9QVF9GVFBfU1NMX0NDQyBzZXRvcHRfbnZfQ1VSTEZUUFNTTF9DQ0MKKyNkZWZpbmUgc2V0b3B0X252X0NVUkxPUFRfUFJPVE9DT0xTIHNldG9wdF9udl9DVVJMUFJPVE8KKyNkZWZpbmUgc2V0b3B0X252X0NVUkxPUFRfUkVESVJfUFJPVE9DT0xTIHNldG9wdF9udl9DVVJMUFJPVE8KKyNkZWZpbmUgc2V0b3B0X252X0NVUkxPUFRfUFJPWFlUWVBFIHNldG9wdF9udl9DVVJMUFJPWFkKKyNkZWZpbmUgc2V0b3B0X252X0NVUkxPUFRfUFJPWFlBVVRIIHNldG9wdF9udl9DVVJMQVVUSAorCisvKiBJbnRlcmNlcHQgc2V0b3B0IGNhbGxzIGZvciAtLWxpYmN1cmwgKi8KKworQ1VSTGNvZGUgdG9vbF9zZXRvcHRfZW51bShDVVJMICpjdXJsLCBzdHJ1Y3QgQ29uZmlndXJhYmxlICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIENVUkxvcHRpb24gdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOYW1lVmFsdWUgKm52LCBsb25nIGx2YWwpOworQ1VSTGNvZGUgdG9vbF9zZXRvcHRfZmxhZ3MoQ1VSTCAqY3VybCwgc3RydWN0IENvbmZpZ3VyYWJsZSAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgQ1VSTG9wdGlvbiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOYW1lVmFsdWUgKm52LCBsb25nIGx2YWwpOworQ1VSTGNvZGUgdG9vbF9zZXRvcHRfaHR0cHBvc3QoQ1VSTCAqY3VybCwgc3RydWN0IENvbmZpZ3VyYWJsZSAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgQ1VSTG9wdGlvbiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqaHR0cHBvc3QpOworQ1VSTGNvZGUgdG9vbF9zZXRvcHRfc2xpc3QoQ1VSTCAqY3VybCwgc3RydWN0IENvbmZpZ3VyYWJsZSAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgQ1VSTG9wdGlvbiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqbGlzdCk7CitDVVJMY29kZSB0b29sX3NldG9wdChDVVJMICpjdXJsLCBib29sIHN0ciwgc3RydWN0IENvbmZpZ3VyYWJsZSAqY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgQ1VSTG9wdGlvbiB0YWcsIC4uLik7CisKKyNkZWZpbmUgbXlfc2V0b3B0KHgseSx6KSBcCisgIFNFVE9QVF9DSEVDSyh0b29sX3NldG9wdCh4LCBGQUxTRSwgY29uZmlnLCAjeSwgeSwgeikpCisKKyNkZWZpbmUgbXlfc2V0b3B0X3N0cih4LHkseikgXAorICBTRVRPUFRfQ0hFQ0sodG9vbF9zZXRvcHQoeCwgVFJVRSwgY29uZmlnLCAjeSwgeSwgeikpCisKKyNkZWZpbmUgbXlfc2V0b3B0X2VudW0oeCx5LHopIFwKKyAgU0VUT1BUX0NIRUNLKHRvb2xfc2V0b3B0X2VudW0oeCwgY29uZmlnLCAjeSwgeSwgc2V0b3B0X252XyAjIyB5LCB6KSkKKworI2RlZmluZSBteV9zZXRvcHRfZmxhZ3MoeCx5LHopIFwKKyAgU0VUT1BUX0NIRUNLKHRvb2xfc2V0b3B0X2ZsYWdzKHgsIGNvbmZpZywgI3ksIHksIHNldG9wdF9udl8gIyMgeSwgeikpCisKKyNkZWZpbmUgbXlfc2V0b3B0X2h0dHBwb3N0KHgseSx6KSBcCisgIFNFVE9QVF9DSEVDSyh0b29sX3NldG9wdF9odHRwcG9zdCh4LCBjb25maWcsICN5LCB5LCB6KSkKKworI2RlZmluZSBteV9zZXRvcHRfc2xpc3QoeCx5LHopIFwKKyAgU0VUT1BUX0NIRUNLKHRvb2xfc2V0b3B0X3NsaXN0KHgsIGNvbmZpZywgI3ksIHksIHopKQorCisjZGVmaW5lIHJlc19zZXRvcHQoeCx5LHopIHRvb2xfc2V0b3B0KHgsIEZBTFNFLCBjb25maWcsICN5LCB5LCB6KQorCisjZGVmaW5lIHJlc19zZXRvcHRfc3RyKHgseSx6KSB0b29sX3NldG9wdCh4LCBUUlVFLCBjb25maWcsICN5LCB5LCB6KQorCisjZWxzZSAvKiBDVVJMX0RJU0FCTEVfTElCQ1VSTF9PUFRJT04gKi8KKworLyogTm8gLS1saWJjdXJsLCBzbyBwYXNzIG9wdGlvbnMgZGlyZWN0bHkgdG8gbGlicmFyeSAqLworCisjZGVmaW5lIG15X3NldG9wdCh4LHkseikgXAorICBTRVRPUFRfQ0hFQ0soY3VybF9lYXN5X3NldG9wdCh4LCB5LCB6KSkKKworI2RlZmluZSBteV9zZXRvcHRfc3RyKHgseSx6KSBcCisgIFNFVE9QVF9DSEVDSyhjdXJsX2Vhc3lfc2V0b3B0KHgsIHksIHopKQorCisjZGVmaW5lIG15X3NldG9wdF9lbnVtKHgseSx6KSBcCisgIFNFVE9QVF9DSEVDSyhjdXJsX2Vhc3lfc2V0b3B0KHgsIHksIHopKQorCisjZGVmaW5lIG15X3NldG9wdF9mbGFncyh4LHkseikgXAorICBTRVRPUFRfQ0hFQ0soY3VybF9lYXN5X3NldG9wdCh4LCB5LCB6KSkKKworI2RlZmluZSBteV9zZXRvcHRfaHR0cHBvc3QoeCx5LHopIFwKKyAgU0VUT1BUX0NIRUNLKGN1cmxfZWFzeV9zZXRvcHQoeCwgeSwgeikpCisKKyNkZWZpbmUgbXlfc2V0b3B0X3NsaXN0KHgseSx6KSBcCisgIFNFVE9QVF9DSEVDSyhjdXJsX2Vhc3lfc2V0b3B0KHgsIHksIHopKQorCisjZGVmaW5lIHJlc19zZXRvcHQoeCx5LHopIGN1cmxfZWFzeV9zZXRvcHQoeCx5LHopCisKKyNkZWZpbmUgcmVzX3NldG9wdF9zdHIoeCx5LHopIGN1cmxfZWFzeV9zZXRvcHQoeCx5LHopCisKKyNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfTElCQ1VSTF9PUFRJT04gKi8KKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfU0VUT1BUX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX3NsZWVwLmMgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9zbGVlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZGI4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9zbGVlcC5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorIyAgaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19QT0xMX0gKKyMgIGluY2x1ZGUgPHN5cy9wb2xsLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfUE9MTF9IKQorIyAgaW5jbHVkZSA8cG9sbC5oPgorI2VuZGlmCisKKyNpZmRlZiBNU0RPUworIyAgaW5jbHVkZSA8ZG9zLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInRvb2xfc2xlZXAuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiIC8qIGtlZXAgdGhpcyBhcyBMQVNUIGluY2x1ZGUgKi8KKwordm9pZCB0b29sX2dvX3NsZWVwKGxvbmcgbXMpCit7CisjaWYgZGVmaW5lZChNU0RPUykKKyAgZGVsYXkobXMpOworI2VsaWYgZGVmaW5lZChXSU4zMikKKyAgU2xlZXAobXMpOworI2VsaWYgZGVmaW5lZChIQVZFX1BPTExfRklORSkKKyAgcG9sbCgodm9pZCAqKTAsIDAsIChpbnQpbXMpOworI2Vsc2UKKyAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgdGltZW91dC50dl9zZWMgPSBtcyAvIDEwMDBMOworICBtcyA9IG1zICUgMTAwMEw7CisgIHRpbWVvdXQudHZfdXNlYyA9IG1zICogMTAwMEw7CisgIHNlbGVjdCgwLCBOVUxMLCAgTlVMTCwgTlVMTCwgJnRpbWVvdXQpOworI2VuZGlmCit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX3NsZWVwLmggYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9zbGVlcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NjU1Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF9zbGVlcC5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfVE9PTF9TTEVFUF9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfU0xFRVBfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKwordm9pZCB0b29sX2dvX3NsZWVwKGxvbmcgbXMpOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVE9PTF9TTEVFUF9IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX3VybGdsb2IuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3VybGdsb2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWMwOWExCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfdXJsZ2xvYi5jCkBAIC0wLDAgKzEsNjEwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB3ZSB3YW50IGN1cmwtZnVuY3Rpb25zIGluc3RlYWQgb2YgbmF0aXZlIG9uZXMgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgInRvb2xfdXJsZ2xvYi5oIgorI2luY2x1ZGUgInRvb2xfdm1zLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKK3R5cGVkZWYgZW51bSB7CisgIEdMT0JfT0ssCisgIEdMT0JfTk9fTUVNLAorICBHTE9CX0VSUk9SCit9IEdsb2JDb2RlOworCisvKgorICogZ2xvYl93b3JkKCkKKyAqCisgKiBJbnB1dCBhIGZ1bGwgZ2xvYmJlZCBzdHJpbmcsIHNldCB0aGUgZm9ydGggYXJndW1lbnQgdG8gdGhlIGFtb3VudCBvZgorICogc3RyaW5ncyB3ZSBnZXQgb3V0IG9mIHRoaXMuIFJldHVybiBHbG9iQ29kZS4KKyAqLworc3RhdGljIEdsb2JDb2RlIGdsb2Jfd29yZChVUkxHbG9iICosIC8qIG9iamVjdCBhbmNob3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCAgICAvKiBnbG9iYmVkIHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QsICAgICAgIC8qIHBvc2l0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqKTsgICAgLyogcmV0dXJuZWQgbnVtYmVyIG9mIHN0cmluZ3MgKi8KKworc3RhdGljIEdsb2JDb2RlIGdsb2Jfc2V0KFVSTEdsb2IgKmdsb2IsIGNoYXIgKnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBvcywgaW50ICphbW91bnQpCit7CisgIC8qIHByb2Nlc3NlcyBhIHNldCBleHByZXNzaW9uIHdpdGggdGhlIHBvaW50IGJlaGluZCB0aGUgb3BlbmluZyAneycKKyAgICAgJywnLXNlcGFyYXRlZCBlbGVtZW50cyBhcmUgY29sbGVjdGVkIHVudGlsIHRoZSBuZXh0IGNsb3NpbmcgJ30nCisgICovCisgIFVSTFBhdHRlcm4gKnBhdDsKKyAgR2xvYkNvZGUgcmVzOworICBib29sIGRvbmUgPSBGQUxTRTsKKyAgY2hhciogYnVmID0gZ2xvYi0+Z2xvYl9idWZmZXI7CisKKyAgcGF0ID0gJmdsb2ItPnBhdHRlcm5bZ2xvYi0+c2l6ZSAvIDJdOworICAvKiBwYXR0ZXJucyAwLDEsMiwuLi4gY29ycmVzcG9uZCB0byBzaXplPTEsMyw1LC4uLiAqLworICBwYXQtPnR5cGUgPSBVUFRTZXQ7CisgIHBhdC0+Y29udGVudC5TZXQuc2l6ZSA9IDA7CisgIHBhdC0+Y29udGVudC5TZXQucHRyX3MgPSAwOworICBwYXQtPmNvbnRlbnQuU2V0LmVsZW1lbnRzID0gTlVMTDsKKworICArK2dsb2ItPnNpemU7CisKKyAgd2hpbGUoIWRvbmUpIHsKKyAgICBzd2l0Y2ggKCpwYXR0ZXJuKSB7CisgICAgY2FzZSAnXDAnOiAgICAgICAgICAgICAgICAgIC8qIFVSTCBlbmRlZCB3aGlsZSBzZXQgd2FzIHN0aWxsIG9wZW4gKi8KKyAgICAgIHNucHJpbnRmKGdsb2ItPmVycm9ybXNnLCBzaXplb2YoZ2xvYi0+ZXJyb3Jtc2cpLAorICAgICAgICAgICAgICAgInVubWF0Y2hlZCBicmFjZSBhdCBwb3MgJXp1XG4iLCBwb3MpOworICAgICAgcmV0dXJuIEdMT0JfRVJST1I7CisKKyAgICBjYXNlICd7JzoKKyAgICBjYXNlICdbJzogICAgICAgICAgICAgICAgICAgLyogbm8gbmVzdGVkIGV4cHJlc3Npb25zIGF0IHRoaXMgdGltZSAqLworICAgICAgc25wcmludGYoZ2xvYi0+ZXJyb3Jtc2csIHNpemVvZihnbG9iLT5lcnJvcm1zZyksCisgICAgICAgICAgICAgICAibmVzdGVkIGJyYWNlcyBub3Qgc3VwcG9ydGVkIGF0IHBvcyAlenVcbiIsIHBvcyk7CisgICAgICByZXR1cm4gR0xPQl9FUlJPUjsKKworICAgIGNhc2UgJywnOgorICAgIGNhc2UgJ30nOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCBlbGVtZW50IGNvbXBsZXRlZCAqLworICAgICAgKmJ1ZiA9ICdcMCc7CisgICAgICBpZihwYXQtPmNvbnRlbnQuU2V0LmVsZW1lbnRzKSB7CisgICAgICAgIGNoYXIgKipuZXdfYXJyID0gcmVhbGxvYyhwYXQtPmNvbnRlbnQuU2V0LmVsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdC0+Y29udGVudC5TZXQuc2l6ZSArIDEpICogc2l6ZW9mKGNoYXIqKSk7CisgICAgICAgIGlmKCFuZXdfYXJyKSB7CisgICAgICAgICAgc2hvcnQgZWxlbTsKKyAgICAgICAgICBmb3IoZWxlbSA9IDA7IGVsZW0gPCBwYXQtPmNvbnRlbnQuU2V0LnNpemU7IGVsZW0rKykKKyAgICAgICAgICAgIEN1cmxfc2FmZWZyZWUocGF0LT5jb250ZW50LlNldC5lbGVtZW50c1tlbGVtXSk7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShwYXQtPmNvbnRlbnQuU2V0LmVsZW1lbnRzKTsKKyAgICAgICAgICBwYXQtPmNvbnRlbnQuU2V0LnB0cl9zID0gMDsKKyAgICAgICAgICBwYXQtPmNvbnRlbnQuU2V0LnNpemUgPSAwOworICAgICAgICB9CisgICAgICAgIHBhdC0+Y29udGVudC5TZXQuZWxlbWVudHMgPSBuZXdfYXJyOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBwYXQtPmNvbnRlbnQuU2V0LmVsZW1lbnRzID0gbWFsbG9jKHNpemVvZihjaGFyKikpOworICAgICAgaWYoIXBhdC0+Y29udGVudC5TZXQuZWxlbWVudHMpIHsKKyAgICAgICAgc25wcmludGYoZ2xvYi0+ZXJyb3Jtc2csIHNpemVvZihnbG9iLT5lcnJvcm1zZyksICJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIEdMT0JfTk9fTUVNOworICAgICAgfQorICAgICAgcGF0LT5jb250ZW50LlNldC5lbGVtZW50c1twYXQtPmNvbnRlbnQuU2V0LnNpemVdID0KKyAgICAgICAgc3RyZHVwKGdsb2ItPmdsb2JfYnVmZmVyKTsKKyAgICAgIGlmKCFwYXQtPmNvbnRlbnQuU2V0LmVsZW1lbnRzW3BhdC0+Y29udGVudC5TZXQuc2l6ZV0pIHsKKyAgICAgICAgc2hvcnQgZWxlbTsKKyAgICAgICAgZm9yKGVsZW0gPSAwOyBlbGVtIDwgcGF0LT5jb250ZW50LlNldC5zaXplOyBlbGVtKyspCisgICAgICAgICAgQ3VybF9zYWZlZnJlZShwYXQtPmNvbnRlbnQuU2V0LmVsZW1lbnRzW2VsZW1dKTsKKyAgICAgICAgQ3VybF9zYWZlZnJlZShwYXQtPmNvbnRlbnQuU2V0LmVsZW1lbnRzKTsKKyAgICAgICAgcGF0LT5jb250ZW50LlNldC5wdHJfcyA9IDA7CisgICAgICAgIHBhdC0+Y29udGVudC5TZXQuc2l6ZSA9IDA7CisgICAgICAgIHNucHJpbnRmKGdsb2ItPmVycm9ybXNnLCBzaXplb2YoZ2xvYi0+ZXJyb3Jtc2cpLCAib3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgIHJldHVybiBHTE9CX05PX01FTTsKKyAgICAgIH0KKyAgICAgICsrcGF0LT5jb250ZW50LlNldC5zaXplOworCisgICAgICBpZigqcGF0dGVybiA9PSAnfScpIHsKKyAgICAgICAgLyogZW50aXJlIHNldCBwYXR0ZXJuIGNvbXBsZXRlZCAqLworICAgICAgICBpbnQgd29yZGFtb3VudDsKKworICAgICAgICAvKiBhbHdheXMgY2hlY2sgZm9yIGEgbGl0ZXJhbCAobWF5IGJlICIiKSBiZXR3ZWVuIHBhdHRlcm5zICovCisgICAgICAgIHJlcyA9IGdsb2Jfd29yZChnbG9iLCArK3BhdHRlcm4sICsrcG9zLCAmd29yZGFtb3VudCk7CisgICAgICAgIGlmKHJlcykgeworICAgICAgICAgIHNob3J0IGVsZW07CisgICAgICAgICAgZm9yKGVsZW0gPSAwOyBlbGVtIDwgcGF0LT5jb250ZW50LlNldC5zaXplOyBlbGVtKyspCisgICAgICAgICAgICBDdXJsX3NhZmVmcmVlKHBhdC0+Y29udGVudC5TZXQuZWxlbWVudHNbZWxlbV0pOworICAgICAgICAgIEN1cmxfc2FmZWZyZWUocGF0LT5jb250ZW50LlNldC5lbGVtZW50cyk7CisgICAgICAgICAgcGF0LT5jb250ZW50LlNldC5wdHJfcyA9IDA7CisgICAgICAgICAgcGF0LT5jb250ZW50LlNldC5zaXplID0gMDsKKyAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisKKyAgICAgICAgKmFtb3VudCA9IHBhdC0+Y29udGVudC5TZXQuc2l6ZSAqIHdvcmRhbW91bnQ7CisKKyAgICAgICAgZG9uZSA9IFRSVUU7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBidWYgPSBnbG9iLT5nbG9iX2J1ZmZlcjsKKyAgICAgICsrcGF0dGVybjsKKyAgICAgICsrcG9zOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICddJzogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbGxlZ2FsIGNsb3NpbmcgYnJhY2tldCAqLworICAgICAgc25wcmludGYoZ2xvYi0+ZXJyb3Jtc2csIHNpemVvZihnbG9iLT5lcnJvcm1zZyksCisgICAgICAgICAgICAgICAiaWxsZWdhbCBwYXR0ZXJuIGF0IHBvcyAlenVcbiIsIHBvcyk7CisgICAgICByZXR1cm4gR0xPQl9FUlJPUjsKKworICAgIGNhc2UgJ1xcJzogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVzY2FwZWQgY2hhcmFjdGVyLCBza2lwICdcJyAqLworICAgICAgaWYocGF0dGVyblsxXSkgeworICAgICAgICArK3BhdHRlcm47CisgICAgICAgICsrcG9zOworICAgICAgfQorICAgICAgLyogaW50ZW50aW9uYWwgZmFsbHRocm91Z2ggKi8KKyAgICBkZWZhdWx0OgorICAgICAgKmJ1ZisrID0gKnBhdHRlcm4rKzsgICAgICAgICAgICAgIC8qIGNvcHkgY2hhcmFjdGVyIHRvIHNldCBlbGVtZW50ICovCisgICAgICArK3BvczsKKyAgICB9CisgIH0KKyAgcmV0dXJuIEdMT0JfT0s7Cit9CisKK3N0YXRpYyBHbG9iQ29kZSBnbG9iX3JhbmdlKFVSTEdsb2IgKmdsb2IsIGNoYXIgKnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcG9zLCBpbnQgKmFtb3VudCkKK3sKKyAgLyogcHJvY2Vzc2VzIGEgcmFuZ2UgZXhwcmVzc2lvbiB3aXRoIHRoZSBwb2ludCBiZWhpbmQgdGhlIG9wZW5pbmcgJ1snCisgICAgIC0gY2hhciByYW5nZTogZS5nLiAiYS16XSIsICJCLVFdIgorICAgICAtIG51bSByYW5nZTogZS5nLiAiMC05XSIsICIxNy0yMDAwXSIKKyAgICAgLSBudW0gcmFuZ2Ugd2l0aCBsZWFkaW5nIHplcm9zOiBlLmcuICIwMDEtOTk5XSIKKyAgICAgZXhwcmVzc2lvbiBpcyBjaGVja2VkIGZvciB3ZWxsLWZvcm1lZG5lc3MgYW5kIGNvbGxlY3RlZCB1bnRpbCB0aGUgbmV4dCAnXScKKyAgKi8KKyAgVVJMUGF0dGVybiAqcGF0OworICBjaGFyICpjOworICBjaGFyIHNlcDsKKyAgY2hhciBzZXAyOworICBpbnQgc3RlcDsKKyAgaW50IHJjOworICBHbG9iQ29kZSByZXM7CisgIGludCB3b3JkYW1vdW50ID0gMTsKKworICBwYXQgPSAmZ2xvYi0+cGF0dGVybltnbG9iLT5zaXplIC8gMl07CisgIC8qIHBhdHRlcm5zIDAsMSwyLC4uLiBjb3JyZXNwb25kIHRvIHNpemU9MSwzLDUsLi4uICovCisgICsrZ2xvYi0+c2l6ZTsKKworICBpZihJU0FMUEhBKCpwYXR0ZXJuKSkgeworICAgIC8qIGNoYXJhY3RlciByYW5nZSBkZXRlY3RlZCAqLworICAgIGNoYXIgbWluX2M7CisgICAgY2hhciBtYXhfYzsKKworICAgIHBhdC0+dHlwZSA9IFVQVENoYXJSYW5nZTsKKworICAgIHJjID0gc3NjYW5mKHBhdHRlcm4sICIlYy0lYyVjJWQlYyIsICZtaW5fYywgJm1heF9jLCAmc2VwLCAmc3RlcCwgJnNlcDIpOworCisgICAgaWYoKHJjIDwgMykgfHwgKG1pbl9jID49IG1heF9jKSB8fCAoKG1heF9jIC0gbWluX2MpID4gKCd6JyAtICdhJykpKSB7CisgICAgICAvKiB0aGUgcGF0dGVybiBpcyBub3Qgd2VsbC1mb3JtZWQgKi8KKyAgICAgIHNucHJpbnRmKGdsb2ItPmVycm9ybXNnLCBzaXplb2YoZ2xvYi0+ZXJyb3Jtc2cpLAorICAgICAgICAgICAgICAgImVycm9yOiBiYWQgcmFuZ2Ugc3BlY2lmaWNhdGlvbiBhZnRlciBwb3MgJXp1XG4iLCBwb3MpOworICAgICAgcmV0dXJuIEdMT0JfRVJST1I7CisgICAgfQorCisgICAgLyogY2hlY2sgdGhlIChmaXJzdCkgc2VwYXJhdGluZyBjaGFyYWN0ZXIgKi8KKyAgICBpZigoc2VwICE9ICddJykgJiYgKHNlcCAhPSAnOicpKSB7CisgICAgICBzbnByaW50ZihnbG9iLT5lcnJvcm1zZywgc2l6ZW9mKGdsb2ItPmVycm9ybXNnKSwKKyAgICAgICAgICAgICAgICJlcnJvcjogdW5zdXBwb3J0ZWQgY2hhcmFjdGVyICglYykgYWZ0ZXIgcmFuZ2UgYXQgcG9zICV6dVxuIiwKKyAgICAgICAgICAgICAgIHNlcCwgcG9zKTsKKyAgICAgIHJldHVybiBHTE9CX0VSUk9SOworICAgIH0KKworICAgIC8qIGlmIHRoZXJlIHdhcyBhICI6W251bV0iIHRoaW5nLCB1c2UgdGhhdCBhcyBzdGVwIG9yIGVsc2UgdXNlIDEgKi8KKyAgICBwYXQtPmNvbnRlbnQuQ2hhclJhbmdlLnN0ZXAgPQorICAgICAgKChzZXAgPT0gJzonKSAmJiAocmMgPT0gNSkgJiYgKHNlcDIgPT0gJ10nKSkgPyBzdGVwIDogMTsKKworICAgIHBhdC0+Y29udGVudC5DaGFyUmFuZ2UucHRyX2MgPSBwYXQtPmNvbnRlbnQuQ2hhclJhbmdlLm1pbl9jID0gbWluX2M7CisgICAgcGF0LT5jb250ZW50LkNoYXJSYW5nZS5tYXhfYyA9IG1heF9jOworICB9CisgIGVsc2UgaWYoSVNESUdJVCgqcGF0dGVybikpIHsKKyAgICAvKiBudW1lcmljIHJhbmdlIGRldGVjdGVkICovCisgICAgaW50IG1pbl9uOworICAgIGludCBtYXhfbjsKKworICAgIHBhdC0+dHlwZSA9IFVQVE51bVJhbmdlOworICAgIHBhdC0+Y29udGVudC5OdW1SYW5nZS5wYWRsZW5ndGggPSAwOworCisgICAgcmMgPSBzc2NhbmYocGF0dGVybiwgIiVkLSVkJWMlZCVjIiwgJm1pbl9uLCAmbWF4X24sICZzZXAsICZzdGVwLCAmc2VwMik7CisKKyAgICBpZigocmMgPCAyKSB8fCAobWluX24gPiBtYXhfbikpIHsKKyAgICAgIC8qIHRoZSBwYXR0ZXJuIGlzIG5vdCB3ZWxsLWZvcm1lZCAqLworICAgICAgc25wcmludGYoZ2xvYi0+ZXJyb3Jtc2csIHNpemVvZihnbG9iLT5lcnJvcm1zZyksCisgICAgICAgICAgICAgICAiZXJyb3I6IGJhZCByYW5nZSBzcGVjaWZpY2F0aW9uIGFmdGVyIHBvcyAlenVcbiIsIHBvcyk7CisgICAgICByZXR1cm4gR0xPQl9FUlJPUjsKKyAgICB9CisgICAgcGF0LT5jb250ZW50Lk51bVJhbmdlLnB0cl9uID0gcGF0LT5jb250ZW50Lk51bVJhbmdlLm1pbl9uID0gbWluX247CisgICAgcGF0LT5jb250ZW50Lk51bVJhbmdlLm1heF9uID0gbWF4X247CisKKyAgICAvKiBpZiB0aGVyZSB3YXMgYSAiOltudW1dIiB0aGluZywgdXNlIHRoYXQgYXMgc3RlcCBvciBlbHNlIHVzZSAxICovCisgICAgcGF0LT5jb250ZW50Lk51bVJhbmdlLnN0ZXAgPQorICAgICAgKChzZXAgPT0gJzonKSAmJiAocmMgPT0gNSkgJiYgKHNlcDIgPT0gJ10nKSkgPyBzdGVwIDogMTsKKworICAgIGlmKCpwYXR0ZXJuID09ICcwJykgeworICAgICAgLyogbGVhZGluZyB6ZXJvIHNwZWNpZmllZCAqLworICAgICAgYyA9IHBhdHRlcm47CisgICAgICB3aGlsZShJU0RJR0lUKCpjKSkgeworICAgICAgICBjKys7CisgICAgICAgICsrcGF0LT5jb250ZW50Lk51bVJhbmdlLnBhZGxlbmd0aDsgLyogcGFkZGluZyBsZW5ndGggaXMgc2V0IGZvciBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMgb2YgdGhpcyBwYXR0ZXJuICovCisgICAgICB9CisgICAgfQorICB9CisgIGVsc2UgeworICAgIHNucHJpbnRmKGdsb2ItPmVycm9ybXNnLCBzaXplb2YoZ2xvYi0+ZXJyb3Jtc2cpLAorICAgICAgICAgICAgICJpbGxlZ2FsIGNoYXJhY3RlciBpbiByYW5nZSBzcGVjaWZpY2F0aW9uIGF0IHBvcyAlenVcbiIsIHBvcyk7CisgICAgcmV0dXJuIEdMT0JfRVJST1I7CisgIH0KKworICBjID0gKGNoYXIqKXN0cmNocihwYXR0ZXJuLCAnXScpOyAvKiBjb250aW51ZSBhZnRlciBuZXh0ICddJyAqLworICBpZihjKQorICAgIGMrKzsKKyAgZWxzZSB7CisgICAgc25wcmludGYoZ2xvYi0+ZXJyb3Jtc2csIHNpemVvZihnbG9iLT5lcnJvcm1zZyksICJtaXNzaW5nICddJyIpOworICAgIHJldHVybiBHTE9CX0VSUk9SOyAvKiBtaXNzaW5nICddJyAqLworICB9CisKKyAgLyogYWx3YXlzIGNoZWNrIGZvciBhIGxpdGVyYWwgKG1heSBiZSAiIikgYmV0d2VlbiBwYXR0ZXJucyAqLworCisgIHJlcyA9IGdsb2Jfd29yZChnbG9iLCBjLCBwb3MgKyAoYyAtIHBhdHRlcm4pLCAmd29yZGFtb3VudCk7CisgIGlmKHJlcyA9PSBHTE9CX0VSUk9SKSB7CisgICAgd29yZGFtb3VudCA9IDE7CisgICAgcmVzID0gR0xPQl9PSzsKKyAgfQorCisgIGlmKCFyZXMpIHsKKyAgICBpZihwYXQtPnR5cGUgPT0gVVBUQ2hhclJhbmdlKQorICAgICAgKmFtb3VudCA9IHdvcmRhbW91bnQgKiAocGF0LT5jb250ZW50LkNoYXJSYW5nZS5tYXhfYyAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXQtPmNvbnRlbnQuQ2hhclJhbmdlLm1pbl9jICsgMSk7CisgICAgZWxzZQorICAgICAgKmFtb3VudCA9IHdvcmRhbW91bnQgKiAocGF0LT5jb250ZW50Lk51bVJhbmdlLm1heF9uIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdC0+Y29udGVudC5OdW1SYW5nZS5taW5fbiArIDEpOworICB9CisKKyAgcmV0dXJuIHJlczsgLyogR0xPQl9PSyBvciBHTE9CX05PX01FTSAqLworfQorCitzdGF0aWMgR2xvYkNvZGUgZ2xvYl93b3JkKFVSTEdsb2IgKmdsb2IsIGNoYXIgKnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwb3MsIGludCAqYW1vdW50KQoreworICAvKiBwcm9jZXNzZXMgYSBsaXRlcmFsIHN0cmluZyBjb21wb25lbnQgb2YgYSBVUkwKKyAgICAgc3BlY2lhbCBjaGFyYWN0ZXJzICd7JyBhbmQgJ1snIGJyYW5jaCB0byBzZXQvcmFuZ2UgcHJvY2Vzc2luZyBmdW5jdGlvbnMKKyAgICovCisgIGNoYXIqIGJ1ZiA9IGdsb2ItPmdsb2JfYnVmZmVyOworICBzaXplX3QgbGl0aW5kZXg7CisgIEdsb2JDb2RlIHJlcyA9IEdMT0JfT0s7CisKKyAgKmFtb3VudCA9IDE7IC8qIGRlZmF1bHQgaXMgb25lIHNpbmdsZSBzdHJpbmcgKi8KKworICB3aGlsZSgqcGF0dGVybiAhPSAnXDAnICYmICpwYXR0ZXJuICE9ICd7JyAmJiAqcGF0dGVybiAhPSAnWycpIHsKKyAgICBpZigqcGF0dGVybiA9PSAnfScgfHwgKnBhdHRlcm4gPT0gJ10nKSB7CisgICAgICBzbnByaW50ZihnbG9iLT5lcnJvcm1zZywgc2l6ZW9mKGdsb2ItPmVycm9ybXNnKSwKKyAgICAgICAgICAgICAgICJ1bm1hdGNoZWQgY2xvc2UgYnJhY2UvYnJhY2tldCBhdCBwb3MgJXp1XG4iLCBwb3MpOworICAgICAgcmV0dXJuIEdMT0JfRVJST1I7CisgICAgfQorCisgICAgLyogb25seSBhbGxvdyBcIHRvIGVzY2FwZSBrbm93biAic3BlY2lhbCBsZXR0ZXJzIiAqLworICAgIGlmKCpwYXR0ZXJuID09ICdcXCcgJiYKKyAgICAgICAgKCoocGF0dGVybisxKSA9PSAneycgfHwgKihwYXR0ZXJuKzEpID09ICdbJyB8fAorICAgICAgICAgKihwYXR0ZXJuKzEpID09ICd9JyB8fCAqKHBhdHRlcm4rMSkgPT0gJ10nKSApIHsKKworICAgICAgLyogZXNjYXBlIGNoYXJhY3Rlciwgc2tpcCAnXCcgKi8KKyAgICAgICsrcGF0dGVybjsKKyAgICAgICsrcG9zOworICAgIH0KKyAgICAqYnVmKysgPSAqcGF0dGVybisrOyAvKiBjb3B5IGNoYXJhY3RlciB0byBsaXRlcmFsICovCisgICAgKytwb3M7CisgIH0KKyAgKmJ1ZiA9ICdcMCc7CisgIGxpdGluZGV4ID0gZ2xvYi0+c2l6ZSAvIDI7CisgIC8qIGxpdGVyYWxzIDAsMSwyLC4uLiBjb3JyZXNwb25kIHRvIHNpemU9MCwyLDQsLi4uICovCisgIGdsb2ItPmxpdGVyYWxbbGl0aW5kZXhdID0gc3RyZHVwKGdsb2ItPmdsb2JfYnVmZmVyKTsKKyAgaWYoIWdsb2ItPmxpdGVyYWxbbGl0aW5kZXhdKSB7CisgICAgc25wcmludGYoZ2xvYi0+ZXJyb3Jtc2csIHNpemVvZihnbG9iLT5lcnJvcm1zZyksICJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICByZXR1cm4gR0xPQl9OT19NRU07CisgIH0KKyAgKytnbG9iLT5zaXplOworCisgIHN3aXRjaCAoKnBhdHRlcm4pIHsKKyAgY2FzZSAnXDAnOgorICAgIC8qIHNpbmd1bGFyIFVSTCBwcm9jZXNzZWQgICovCisgICAgYnJlYWs7CisKKyAgY2FzZSAneyc6CisgICAgLyogcHJvY2VzcyBzZXQgcGF0dGVybiAqLworICAgIHJlcyA9IGdsb2Jfc2V0KGdsb2IsICsrcGF0dGVybiwgKytwb3MsIGFtb3VudCk7CisgICAgYnJlYWs7CisKKyAgY2FzZSAnWyc6CisgICAgLyogcHJvY2VzcyByYW5nZSBwYXR0ZXJuICovCisgICAgcmVzID0gZ2xvYl9yYW5nZShnbG9iLCArK3BhdHRlcm4sICsrcG9zLCBhbW91bnQpOworICAgIGJyZWFrOworICB9CisKKyAgaWYocmVzKQorICAgIEN1cmxfc2FmZWZyZWUoZ2xvYi0+bGl0ZXJhbFtsaXRpbmRleF0pOworCisgIHJldHVybiByZXM7Cit9CisKK2ludCBnbG9iX3VybChVUkxHbG9iKiogZ2xvYiwgY2hhciogdXJsLCBpbnQgKnVybG51bSwgRklMRSAqZXJyb3IpCit7CisgIC8qCisgICAqIFdlIGNhbiBkZWFsIHdpdGggYW55LXNpemUsIGp1c3QgbWFrZSBhIGJ1ZmZlciB3aXRoIHRoZSBzYW1lIGxlbmd0aAorICAgKiBhcyB0aGUgc3BlY2lmaWVkIFVSTCEKKyAgICovCisgIFVSTEdsb2IgKmdsb2JfZXhwYW5kOworICBpbnQgYW1vdW50OworICBjaGFyICpnbG9iX2J1ZmZlcjsKKyAgR2xvYkNvZGUgcmVzOworCisgICpnbG9iID0gTlVMTDsKKworICBnbG9iX2J1ZmZlciA9IG1hbGxvYyhzdHJsZW4odXJsKSArIDEpOworICBpZighZ2xvYl9idWZmZXIpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgZ2xvYl9leHBhbmQgPSBjYWxsb2MoMSwgc2l6ZW9mKFVSTEdsb2IpKTsKKyAgaWYoIWdsb2JfZXhwYW5kKSB7CisgICAgQ3VybF9zYWZlZnJlZShnbG9iX2J1ZmZlcik7CisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIH0KKyAgZ2xvYl9leHBhbmQtPnNpemUgPSAwOworICBnbG9iX2V4cGFuZC0+dXJsbGVuID0gc3RybGVuKHVybCk7CisgIGdsb2JfZXhwYW5kLT5nbG9iX2J1ZmZlciA9IGdsb2JfYnVmZmVyOworICBnbG9iX2V4cGFuZC0+YmVlbmhlcmUgPSAwOworCisgIHJlcyA9IGdsb2Jfd29yZChnbG9iX2V4cGFuZCwgdXJsLCAxLCAmYW1vdW50KTsKKyAgaWYoIXJlcykKKyAgICAqdXJsbnVtID0gYW1vdW50OworICBlbHNlIHsKKyAgICBpZihlcnJvciAmJiBnbG9iX2V4cGFuZC0+ZXJyb3Jtc2dbMF0pIHsKKyAgICAgIC8qIHNlbmQgZXJyb3IgZGVzY3JpcHRpb24gdG8gdGhlIGVycm9yLXN0cmVhbSAqLworICAgICAgZnByaW50ZihlcnJvciwgImN1cmw6ICglZCkgW2dsb2JiaW5nXSAlcyIsCisgICAgICAgICAgICAgIChyZXMgPT0gR0xPQl9OT19NRU0pID8gQ1VSTEVfT1VUX09GX01FTU9SWSA6IENVUkxFX1VSTF9NQUxGT1JNQVQsCisgICAgICAgICAgICAgIGdsb2JfZXhwYW5kLT5lcnJvcm1zZyk7CisgICAgfQorICAgIC8qIGl0IGZhaWxlZCwgd2UgY2xlYW51cCAqLworICAgIEN1cmxfc2FmZWZyZWUoZ2xvYl9idWZmZXIpOworICAgIEN1cmxfc2FmZWZyZWUoZ2xvYl9leHBhbmQpOworICAgICp1cmxudW0gPSAxOworICAgIHJldHVybiAocmVzID09IEdMT0JfTk9fTUVNKSA/IENVUkxFX09VVF9PRl9NRU1PUlkgOiBDVVJMRV9VUkxfTUFMRk9STUFUOworICB9CisKKyAgKmdsb2IgPSBnbG9iX2V4cGFuZDsKKyAgcmV0dXJuIENVUkxFX09LOworfQorCit2b2lkIGdsb2JfY2xlYW51cChVUkxHbG9iKiBnbG9iKQoreworICBzaXplX3QgaTsKKyAgaW50IGVsZW07CisKKyAgZm9yKGkgPSBnbG9iLT5zaXplIC0gMTsgaSA8IGdsb2ItPnNpemU7IC0taSkgeworICAgIGlmKCEoaSAmIDEpKSB7ICAgICAvKiBldmVuIGluZGV4ZXMgY29udGFpbiBsaXRlcmFscyAqLworICAgICAgQ3VybF9zYWZlZnJlZShnbG9iLT5saXRlcmFsW2kvMl0pOworICAgIH0KKyAgICBlbHNlIHsgICAgICAgICAgICAgIC8qIG9kZCBpbmRleGVzIGNvbnRhaW4gc2V0cyBvciByYW5nZXMgKi8KKyAgICAgIGlmKChnbG9iLT5wYXR0ZXJuW2kvMl0udHlwZSA9PSBVUFRTZXQpICYmCisgICAgICAgICAoZ2xvYi0+cGF0dGVybltpLzJdLmNvbnRlbnQuU2V0LmVsZW1lbnRzKSkgeworICAgICAgICBmb3IoZWxlbSA9IGdsb2ItPnBhdHRlcm5baS8yXS5jb250ZW50LlNldC5zaXplIC0gMTsKKyAgICAgICAgICAgICBlbGVtID49IDA7CisgICAgICAgICAgICAgLS1lbGVtKSB7CisgICAgICAgICAgQ3VybF9zYWZlZnJlZShnbG9iLT5wYXR0ZXJuW2kvMl0uY29udGVudC5TZXQuZWxlbWVudHNbZWxlbV0pOworICAgICAgICB9CisgICAgICAgIEN1cmxfc2FmZWZyZWUoZ2xvYi0+cGF0dGVybltpLzJdLmNvbnRlbnQuU2V0LmVsZW1lbnRzKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgQ3VybF9zYWZlZnJlZShnbG9iLT5nbG9iX2J1ZmZlcik7CisgIEN1cmxfc2FmZWZyZWUoZ2xvYik7Cit9CisKK2ludCBnbG9iX25leHRfdXJsKGNoYXIgKipnbG9iYmVkLCBVUkxHbG9iICpnbG9iKQoreworICBVUkxQYXR0ZXJuICpwYXQ7CisgIGNoYXIgKmxpdDsKKyAgc2l6ZV90IGk7CisgIHNpemVfdCBqOworICBzaXplX3QgbGVuOworICBzaXplX3QgYnVmbGVuID0gZ2xvYi0+dXJsbGVuICsgMTsKKyAgY2hhciAqYnVmID0gZ2xvYi0+Z2xvYl9idWZmZXI7CisKKyAgKmdsb2JiZWQgPSBOVUxMOworCisgIGlmKCFnbG9iLT5iZWVuaGVyZSkKKyAgICBnbG9iLT5iZWVuaGVyZSA9IDE7CisgIGVsc2UgeworICAgIGJvb2wgY2FycnkgPSBUUlVFOworCisgICAgLyogaW1wbGVtZW50IGEgY291bnRlciBvdmVyIHRoZSBpbmRleCByYW5nZXMgb2YgYWxsIHBhdHRlcm5zLAorICAgICAgIHN0YXJ0aW5nIHdpdGggdGhlIHJpZ2h0bW9zdCBwYXR0ZXJuICovCisgICAgZm9yKGkgPSBnbG9iLT5zaXplIC8gMiAtIDE7IGNhcnJ5ICYmIChpIDwgZ2xvYi0+c2l6ZSk7IC0taSkgeworICAgICAgY2FycnkgPSBGQUxTRTsKKyAgICAgIHBhdCA9ICZnbG9iLT5wYXR0ZXJuW2ldOworICAgICAgc3dpdGNoIChwYXQtPnR5cGUpIHsKKyAgICAgIGNhc2UgVVBUU2V0OgorICAgICAgICBpZigocGF0LT5jb250ZW50LlNldC5lbGVtZW50cykgJiYKKyAgICAgICAgICAgKCsrcGF0LT5jb250ZW50LlNldC5wdHJfcyA9PSBwYXQtPmNvbnRlbnQuU2V0LnNpemUpKSB7CisgICAgICAgICAgcGF0LT5jb250ZW50LlNldC5wdHJfcyA9IDA7CisgICAgICAgICAgY2FycnkgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBVUFRDaGFyUmFuZ2U6CisgICAgICAgIHBhdC0+Y29udGVudC5DaGFyUmFuZ2UucHRyX2MgPSAoY2hhcikocGF0LT5jb250ZW50LkNoYXJSYW5nZS5zdGVwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKCh1bnNpZ25lZCBjaGFyKXBhdC0+Y29udGVudC5DaGFyUmFuZ2UucHRyX2MpKTsKKyAgICAgICAgaWYocGF0LT5jb250ZW50LkNoYXJSYW5nZS5wdHJfYyA+IHBhdC0+Y29udGVudC5DaGFyUmFuZ2UubWF4X2MpIHsKKyAgICAgICAgICBwYXQtPmNvbnRlbnQuQ2hhclJhbmdlLnB0cl9jID0gcGF0LT5jb250ZW50LkNoYXJSYW5nZS5taW5fYzsKKyAgICAgICAgICBjYXJyeSA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFVQVE51bVJhbmdlOgorICAgICAgICBwYXQtPmNvbnRlbnQuTnVtUmFuZ2UucHRyX24gKz0gcGF0LT5jb250ZW50Lk51bVJhbmdlLnN0ZXA7CisgICAgICAgIGlmKHBhdC0+Y29udGVudC5OdW1SYW5nZS5wdHJfbiA+IHBhdC0+Y29udGVudC5OdW1SYW5nZS5tYXhfbikgeworICAgICAgICAgIHBhdC0+Y29udGVudC5OdW1SYW5nZS5wdHJfbiA9IHBhdC0+Y29udGVudC5OdW1SYW5nZS5taW5fbjsKKyAgICAgICAgICBjYXJyeSA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yOiBpbnZhbGlkIHBhdHRlcm4gdHlwZSAoJWQpXG4iLCAoaW50KXBhdC0+dHlwZSk7CisgICAgICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICAgIH0KKyAgICB9CisgICAgaWYoY2FycnkpIHsgICAgICAgICAvKiBmaXJzdCBwYXR0ZXJuIHB0ciBoYXMgcnVuIGludG8gb3ZlcmZsb3csIGRvbmUhICovCisgICAgICAvKiBUT0RPOiB2ZXJpZnkgaWYgdGhpcyBzaG91bGQgYWN0YWxseSByZXR1cm4gQ1VSTEVfT0suICovCisgICAgICByZXR1cm4gQ1VSTEVfT0s7IC8qIENVUkxFX09LIHRvIG1hdGNoIHByZXZpb3VzIGJlaGF2aW9yICovCisgICAgfQorICB9CisKKyAgZm9yKGogPSAwOyBqIDwgZ2xvYi0+c2l6ZTsgKytqKSB7CisgICAgaWYoIShqJjEpKSB7ICAgICAgICAgICAgICAvKiBldmVyeSBvdGhlciB0ZXJtIChqIGV2ZW4pIGlzIGEgbGl0ZXJhbCAqLworICAgICAgbGl0ID0gZ2xvYi0+bGl0ZXJhbFtqLzJdOworICAgICAgbGVuID0gc25wcmludGYoYnVmLCBidWZsZW4sICIlcyIsIGxpdCk7CisgICAgICBidWYgKz0gbGVuOworICAgICAgYnVmbGVuIC09IGxlbjsKKyAgICB9CisgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIHJlc3QgKGkgb2RkKSBhcmUgcGF0dGVybnMgKi8KKyAgICAgIHBhdCA9ICZnbG9iLT5wYXR0ZXJuW2ovMl07CisgICAgICBzd2l0Y2gocGF0LT50eXBlKSB7CisgICAgICBjYXNlIFVQVFNldDoKKyAgICAgICAgaWYocGF0LT5jb250ZW50LlNldC5lbGVtZW50cykgeworICAgICAgICAgIGxlbiA9IHN0cmxlbihwYXQtPmNvbnRlbnQuU2V0LmVsZW1lbnRzW3BhdC0+Y29udGVudC5TZXQucHRyX3NdKTsKKyAgICAgICAgICBzbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzIiwKKyAgICAgICAgICAgICAgICAgICBwYXQtPmNvbnRlbnQuU2V0LmVsZW1lbnRzW3BhdC0+Y29udGVudC5TZXQucHRyX3NdKTsKKyAgICAgICAgICBidWYgKz0gbGVuOworICAgICAgICAgIGJ1ZmxlbiAtPSBsZW47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFVQVENoYXJSYW5nZToKKyAgICAgICAgKmJ1ZisrID0gcGF0LT5jb250ZW50LkNoYXJSYW5nZS5wdHJfYzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFVQVE51bVJhbmdlOgorICAgICAgICBsZW4gPSBzbnByaW50ZihidWYsIGJ1ZmxlbiwgIiUwKmQiLAorICAgICAgICAgICAgICAgICAgICAgICBwYXQtPmNvbnRlbnQuTnVtUmFuZ2UucGFkbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBwYXQtPmNvbnRlbnQuTnVtUmFuZ2UucHRyX24pOworICAgICAgICBidWYgKz0gbGVuOworICAgICAgICBidWZsZW4gLT0gbGVuOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiaW50ZXJuYWwgZXJyb3I6IGludmFsaWQgcGF0dGVybiB0eXBlICglZClcbiIsIChpbnQpcGF0LT50eXBlKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgICAgfQorICAgIH0KKyAgfQorICAqYnVmID0gJ1wwJzsKKworICAqZ2xvYmJlZCA9IHN0cmR1cChnbG9iLT5nbG9iX2J1ZmZlcik7CisgIGlmKCEqZ2xvYmJlZCkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK2ludCBnbG9iX21hdGNoX3VybChjaGFyICoqcmVzdWx0LCBjaGFyICpmaWxlbmFtZSwgVVJMR2xvYiAqZ2xvYikKK3sKKyAgY2hhciAqdGFyZ2V0OworICBzaXplX3QgYWxsb2NzaXplOworICBjaGFyIG51bWJ1ZlsxOF07CisgIGNoYXIgKmFwcGVuZHRoaXMgPSBOVUxMOworICBzaXplX3QgYXBwZW5kbGVuID0gMDsKKyAgc2l6ZV90IHN0cmluZ2xlbiA9IDA7CisKKyAgKnJlc3VsdCA9IE5VTEw7CisKKyAgLyogV2UgY2Fubm90IHVzZSB0aGUgZ2xvYl9idWZmZXIgZm9yIHN0b3JhZ2UgaGVyZSBzaW5jZSB0aGUgZmlsZW5hbWUgbWF5CisgICAqIGJlIGxvbmdlciB0aGFuIHRoZSBVUkwgd2UgdXNlLiBXZSBhbGxvY2F0ZSBhIGdvb2Qgc3RhcnQgc2l6ZSwgdGhlbgorICAgKiB3ZSBuZWVkIHRvIHJlYWxsb2MgaW4gY2FzZSBvZiBuZWVkLgorICAgKi8KKyAgYWxsb2NzaXplID0gc3RybGVuKGZpbGVuYW1lKSArIDE7IC8qIG1ha2UgaXQgYXQgbGVhc3Qgb25lIGJ5dGUgdG8gc3RvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbGluZyB6ZXJvICovCisgIHRhcmdldCA9IG1hbGxvYyhhbGxvY3NpemUpOworICBpZighdGFyZ2V0KQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHdoaWxlKCpmaWxlbmFtZSkgeworICAgIGlmKCpmaWxlbmFtZSA9PSAnIycgJiYgSVNESUdJVChmaWxlbmFtZVsxXSkpIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaTsKKyAgICAgIGNoYXIgKnB0ciA9IGZpbGVuYW1lOworICAgICAgdW5zaWduZWQgbG9uZyBudW0gPSBzdHJ0b3VsKCZmaWxlbmFtZVsxXSwgJmZpbGVuYW1lLCAxMCk7CisgICAgICBpID0gbnVtIC0gMVVMOworCisgICAgICBpZihudW0gJiYgKGkgPD0gZ2xvYi0+c2l6ZSAvIDIpKSB7CisgICAgICAgIFVSTFBhdHRlcm4gcGF0ID0gZ2xvYi0+cGF0dGVybltpXTsKKyAgICAgICAgc3dpdGNoIChwYXQudHlwZSkgeworICAgICAgICBjYXNlIFVQVFNldDoKKyAgICAgICAgICBpZihwYXQuY29udGVudC5TZXQuZWxlbWVudHMpIHsKKyAgICAgICAgICAgIGFwcGVuZHRoaXMgPSBwYXQuY29udGVudC5TZXQuZWxlbWVudHNbcGF0LmNvbnRlbnQuU2V0LnB0cl9zXTsKKyAgICAgICAgICAgIGFwcGVuZGxlbiA9CisgICAgICAgICAgICAgIHN0cmxlbihwYXQuY29udGVudC5TZXQuZWxlbWVudHNbcGF0LmNvbnRlbnQuU2V0LnB0cl9zXSk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVQVENoYXJSYW5nZToKKyAgICAgICAgICBudW1idWZbMF0gPSBwYXQuY29udGVudC5DaGFyUmFuZ2UucHRyX2M7CisgICAgICAgICAgbnVtYnVmWzFdID0gMDsKKyAgICAgICAgICBhcHBlbmR0aGlzID0gbnVtYnVmOworICAgICAgICAgIGFwcGVuZGxlbiA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVVBUTnVtUmFuZ2U6CisgICAgICAgICAgc25wcmludGYobnVtYnVmLCBzaXplb2YobnVtYnVmKSwgIiUwKmQiLAorICAgICAgICAgICAgICAgICAgIHBhdC5jb250ZW50Lk51bVJhbmdlLnBhZGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICBwYXQuY29udGVudC5OdW1SYW5nZS5wdHJfbik7CisgICAgICAgICAgYXBwZW5kdGhpcyA9IG51bWJ1ZjsKKyAgICAgICAgICBhcHBlbmRsZW4gPSBzdHJsZW4obnVtYnVmKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yOiBpbnZhbGlkIHBhdHRlcm4gdHlwZSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAoaW50KXBhdC50eXBlKTsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKHRhcmdldCk7CisgICAgICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogI1tudW1dIG91dCBvZiByYW5nZSwgdXNlIHRoZSAjW251bV0gaW4gdGhlIG91dHB1dCAqLworICAgICAgICBmaWxlbmFtZSA9IHB0cjsKKyAgICAgICAgYXBwZW5kdGhpcyA9IGZpbGVuYW1lKys7CisgICAgICAgIGFwcGVuZGxlbiA9IDE7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgYXBwZW5kdGhpcyA9IGZpbGVuYW1lKys7CisgICAgICBhcHBlbmRsZW4gPSAxOworICAgIH0KKyAgICBpZihhcHBlbmRsZW4gKyBzdHJpbmdsZW4gPj0gYWxsb2NzaXplKSB7CisgICAgICBjaGFyICpuZXdzdHI7CisgICAgICAvKiB3ZSBhcHBlbmQgYSBzaW5nbGUgYnl0ZSB0byBhbGxvdyBmb3IgdGhlIHRyYWlsaW5nIGJ5dGUgdG8gYmUgYXBwZW5kZWQKKyAgICAgICAgIGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbiBvdXRzaWRlIHRoZSB3aGlsZSgpIGxvb3AgKi8KKyAgICAgIGFsbG9jc2l6ZSA9IChhcHBlbmRsZW4gKyBzdHJpbmdsZW4pICogMjsKKyAgICAgIG5ld3N0ciA9IHJlYWxsb2ModGFyZ2V0LCBhbGxvY3NpemUgKyAxKTsKKyAgICAgIGlmKCFuZXdzdHIpIHsKKyAgICAgICAgQ3VybF9zYWZlZnJlZSh0YXJnZXQpOworICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgIH0KKyAgICAgIHRhcmdldCA9IG5ld3N0cjsKKyAgICB9CisgICAgbWVtY3B5KCZ0YXJnZXRbc3RyaW5nbGVuXSwgYXBwZW5kdGhpcywgYXBwZW5kbGVuKTsKKyAgICBzdHJpbmdsZW4gKz0gYXBwZW5kbGVuOworICB9CisgIHRhcmdldFtzdHJpbmdsZW5dPSAnXDAnOworICAqcmVzdWx0ID0gdGFyZ2V0OworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX3VybGdsb2IuaCBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3VybGdsb2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODI4MWJmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfdXJsZ2xvYi5oCkBAIC0wLDAgKzEsNzIgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfVE9PTF9VUkxHTE9CX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVE9PTF9VUkxHTE9CX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKK3R5cGVkZWYgZW51bSB7CisgIFVQVFNldCA9IDEsCisgIFVQVENoYXJSYW5nZSwKKyAgVVBUTnVtUmFuZ2UKK30gVVJMUGF0dGVyblR5cGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgVVJMUGF0dGVyblR5cGUgdHlwZTsKKyAgdW5pb24geworICAgIHN0cnVjdCB7CisgICAgICBjaGFyICoqZWxlbWVudHM7CisgICAgICBzaG9ydCBzaXplOworICAgICAgc2hvcnQgcHRyX3M7CisgICAgfSBTZXQ7CisgICAgc3RydWN0IHsKKyAgICAgIGNoYXIgbWluX2M7CisgICAgICBjaGFyIG1heF9jOworICAgICAgY2hhciBwdHJfYzsKKyAgICAgIGludCBzdGVwOworICAgIH0gQ2hhclJhbmdlOworICAgIHN0cnVjdCB7CisgICAgICBpbnQgbWluX247CisgICAgICBpbnQgbWF4X247CisgICAgICBzaG9ydCBwYWRsZW5ndGg7CisgICAgICBpbnQgcHRyX247CisgICAgICBpbnQgc3RlcDsKKyAgICB9IE51bVJhbmdlIDsKKyAgfSBjb250ZW50OworfSBVUkxQYXR0ZXJuOworCit0eXBlZGVmIHN0cnVjdCB7CisgIGNoYXIgKmxpdGVyYWxbMTBdOworICBVUkxQYXR0ZXJuIHBhdHRlcm5bOV07CisgIHNpemVfdCBzaXplOworICBzaXplX3QgdXJsbGVuOworICBjaGFyICpnbG9iX2J1ZmZlcjsKKyAgY2hhciBiZWVuaGVyZTsKKyAgY2hhciBlcnJvcm1zZ1s4MF07IC8qIGVycm9yIG1lc3NhZ2UgYnVmZmVyICovCit9IFVSTEdsb2I7CisKK2ludCBnbG9iX3VybChVUkxHbG9iKiosIGNoYXIqLCBpbnQgKiwgRklMRSAqKTsKK2ludCBnbG9iX25leHRfdXJsKGNoYXIgKiosIFVSTEdsb2IgKik7CitpbnQgZ2xvYl9tYXRjaF91cmwoY2hhciAqKiwgY2hhciosIFVSTEdsb2IgKik7Cit2b2lkIGdsb2JfY2xlYW51cChVUkxHbG9iKiBnbG9iKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfVVJMR0xPQl9IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX3V0aWwuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2FiMTdmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfdXRpbC5jCkBAIC0wLDAgKzEsMTM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSAidG9vbF91dGlsLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChNU0RPUykKKworc3RydWN0IHRpbWV2YWwgdG9vbF90dm5vdyh2b2lkKQoreworICAvKgorICAqKiBHZXRUaWNrQ291bnQoKSBpcyBhdmFpbGFibGUgb24gX2FsbF8gV2luZG93cyB2ZXJzaW9ucyBmcm9tIFc5NSB1cAorICAqKiB0byBub3dhZGF5cy4gUmV0dXJucyBtaWxsaXNlY29uZHMgZWxhcHNlZCBzaW5jZSBsYXN0IHN5c3RlbSBib290LAorICAqKiBpbmNyZWFzZXMgbW9ub3RvbmljYWxseSBhbmQgd3JhcHMgb25jZSA0OS43IGRheXMgaGF2ZSBlbGFwc2VkLgorICAqLworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgIERXT1JEIG1pbGxpc2Vjb25kcyA9IEdldFRpY2tDb3VudCgpOworICBub3cudHZfc2VjID0gbWlsbGlzZWNvbmRzIC8gMTAwMDsKKyAgbm93LnR2X3VzZWMgPSAobWlsbGlzZWNvbmRzICUgMTAwMCkgKiAxMDAwOworICByZXR1cm4gbm93OworfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfQ0xPQ0tfR0VUVElNRV9NT05PVE9OSUMpCisKK3N0cnVjdCB0aW1ldmFsIHRvb2xfdHZub3codm9pZCkKK3sKKyAgLyoKKyAgKiogY2xvY2tfZ2V0dGltZSgpIGlzIGdyYW50ZWQgdG8gYmUgaW5jcmVhc2VkIG1vbm90b25pY2FsbHkgd2hlbiB0aGUKKyAgKiogbW9ub3RvbmljIGNsb2NrIGlzIHF1ZXJpZWQuIFRpbWUgc3RhcnRpbmcgcG9pbnQgaXMgdW5zcGVjaWZpZWQsIGl0CisgICoqIGNvdWxkIGJlIHRoZSBzeXN0ZW0gc3RhcnQtdXAgdGltZSwgdGhlIEVwb2NoLCBvciBzb21ldGhpbmcgZWxzZSwKKyAgKiogaW4gYW55IGNhc2UgdGhlIHRpbWUgc3RhcnRpbmcgcG9pbnQgZG9lcyBub3QgY2hhbmdlIG9uY2UgdGhhdCB0aGUKKyAgKiogc3lzdGVtIGhhcyBzdGFydGVkIHVwLgorICAqLworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgIHN0cnVjdCB0aW1lc3BlYyB0c25vdzsKKyAgaWYoMCA9PSBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRzbm93KSkgeworICAgIG5vdy50dl9zZWMgPSB0c25vdy50dl9zZWM7CisgICAgbm93LnR2X3VzZWMgPSB0c25vdy50dl9uc2VjIC8gMTAwMDsKKyAgfQorICAvKgorICAqKiBFdmVuIHdoZW4gdGhlIGNvbmZpZ3VyZSBwcm9jZXNzIGhhcyB0cnVseSBkZXRlY3RlZCBtb25vdG9uaWMgY2xvY2sKKyAgKiogYXZhaWxhYmlsaXR5LCBpdCBtaWdodCBoYXBwZW4gdGhhdCBpdCBpcyBub3QgYWN0dWFsbHkgYXZhaWxhYmxlIGF0CisgICoqIHJ1bi10aW1lLiBXaGVuIHRoaXMgb2NjdXJzIHNpbXBseSBmYWxsYmFjayB0byBvdGhlciB0aW1lIHNvdXJjZS4KKyAgKi8KKyNpZmRlZiBIQVZFX0dFVFRJTUVPRkRBWQorICBlbHNlCisgICAgKHZvaWQpZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworI2Vsc2UKKyAgZWxzZSB7CisgICAgbm93LnR2X3NlYyA9IChsb25nKXRpbWUoTlVMTCk7CisgICAgbm93LnR2X3VzZWMgPSAwOworICB9CisjZW5kaWYKKyAgcmV0dXJuIG5vdzsKK30KKworI2VsaWYgZGVmaW5lZChIQVZFX0dFVFRJTUVPRkRBWSkKKworc3RydWN0IHRpbWV2YWwgdG9vbF90dm5vdyh2b2lkKQoreworICAvKgorICAqKiBnZXR0aW1lb2ZkYXkoKSBpcyBub3QgZ3JhbnRlZCB0byBiZSBpbmNyZWFzZWQgbW9ub3RvbmljYWxseSwgZHVlIHRvCisgICoqIGNsb2NrIGRyaWZ0aW5nIGFuZCBleHRlcm5hbCBzb3VyY2UgdGltZSBzeW5jaHJvbml6YXRpb24gaXQgY2FuIGp1bXAKKyAgKiogZm9yd2FyZCBvciBiYWNrd2FyZCBpbiB0aW1lLgorICAqLworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgICh2b2lkKWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKyAgcmV0dXJuIG5vdzsKK30KKworI2Vsc2UKKworc3RydWN0IHRpbWV2YWwgdG9vbF90dm5vdyh2b2lkKQoreworICAvKgorICAqKiB0aW1lKCkgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGltZSBpbiBzZWNvbmRzIHNpbmNlIHRoZSBFcG9jaC4KKyAgKi8KKyAgc3RydWN0IHRpbWV2YWwgbm93OworICBub3cudHZfc2VjID0gKGxvbmcpdGltZShOVUxMKTsKKyAgbm93LnR2X3VzZWMgPSAwOworICByZXR1cm4gbm93OworfQorCisjZW5kaWYKKworLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbW9yZSByZWNlbnQgdGltZSwgYXMgb3RoZXJ3aXNlCisgKiB3ZSdsbCBnZXQgYSB3ZWlyZCBuZWdhdGl2ZSB0aW1lLWRpZmYgYmFjay4uLgorICoKKyAqIFJldHVybnM6IHRoZSB0aW1lIGRpZmZlcmVuY2UgaW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4KKyAqLworbG9uZyB0b29sX3R2ZGlmZihzdHJ1Y3QgdGltZXZhbCBuZXdlciwgc3RydWN0IHRpbWV2YWwgb2xkZXIpCit7CisgIHJldHVybiAobmV3ZXIudHZfc2VjLW9sZGVyLnR2X3NlYykqMTAwMCsKKyAgICAobmV3ZXIudHZfdXNlYy1vbGRlci50dl91c2VjKS8xMDAwOworfQorCisvKgorICogU2FtZSBhcyB0b29sX3R2ZGlmZiBidXQgd2l0aCBmdWxsIHVzZWMgcmVzb2x1dGlvbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgdGltZSBkaWZmZXJlbmNlIGluIHNlY29uZHMgd2l0aCBzdWJzZWNvbmQgcmVzb2x1dGlvbi4KKyAqLworZG91YmxlIHRvb2xfdHZkaWZmX3NlY3Moc3RydWN0IHRpbWV2YWwgbmV3ZXIsIHN0cnVjdCB0aW1ldmFsIG9sZGVyKQoreworICBpZihuZXdlci50dl9zZWMgIT0gb2xkZXIudHZfc2VjKQorICAgIHJldHVybiAoZG91YmxlKShuZXdlci50dl9zZWMtb2xkZXIudHZfc2VjKSsKKyAgICAgIChkb3VibGUpKG5ld2VyLnR2X3VzZWMtb2xkZXIudHZfdXNlYykvMTAwMDAwMC4wOworICBlbHNlCisgICAgcmV0dXJuIChkb3VibGUpKG5ld2VyLnR2X3VzZWMtb2xkZXIudHZfdXNlYykvMTAwMDAwMC4wOworfQorCisvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzZWNvbmRzIGluIHRoZSBnaXZlbiBpbnB1dCB0aW1ldmFsIHN0cnVjdCAqLworbG9uZyB0b29sX3R2bG9uZyhzdHJ1Y3QgdGltZXZhbCB0MSkKK3sKKyAgcmV0dXJuIHQxLnR2X3NlYzsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfdXRpbC5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMmEyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF91dGlsLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9UT09MX1VUSUxfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX1VUSUxfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworc3RydWN0IHRpbWV2YWwgdG9vbF90dm5vdyh2b2lkKTsKKworLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCAodDEpIGlzIHRoZSBtb3JlIHJlY2VudCB0aW1lIGFuZCB0MiBpcworICogdGhlIG9sZGVyIHRpbWUsIGFzIG90aGVyd2lzZSB5b3UgZ2V0IGEgd2VpcmQgbmVnYXRpdmUgdGltZS1kaWZmIGJhY2suLi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgdGltZSBkaWZmZXJlbmNlIGluIG51bWJlciBvZiBtaWxsaXNlY29uZHMuCisgKi8KK2xvbmcgdG9vbF90dmRpZmYoc3RydWN0IHRpbWV2YWwgdDEsIHN0cnVjdCB0aW1ldmFsIHQyKTsKKworLyoKKyAqIFNhbWUgYXMgdG9vbF90dmRpZmYgYnV0IHdpdGggZnVsbCB1c2VjIHJlc29sdXRpb24uCisgKgorICogUmV0dXJuczogdGhlIHRpbWUgZGlmZmVyZW5jZSBpbiBzZWNvbmRzIHdpdGggc3Vic2Vjb25kIHJlc29sdXRpb24uCisgKi8KK2RvdWJsZSB0b29sX3R2ZGlmZl9zZWNzKHN0cnVjdCB0aW1ldmFsIHQxLCBzdHJ1Y3QgdGltZXZhbCB0Mik7CisKK2xvbmcgdG9vbF90dmxvbmcoc3RydWN0IHRpbWV2YWwgdDEpOworCisjdW5kZWYgdHZub3cKKyN1bmRlZiB0dmRpZmYKKyN1bmRlZiB0dmRpZmZfc2VjcworI3VuZGVmIHR2bG9uZworCisjZGVmaW5lIHR2bm93KCkgICAgICAgICAgIHRvb2xfdHZub3coKQorI2RlZmluZSB0dmRpZmYoYSxiKSAgICAgICB0b29sX3R2ZGlmZigoYSksIChiKSkKKyNkZWZpbmUgdHZkaWZmX3NlY3MoYSxiKSAgdG9vbF90dmRpZmZfc2VjcygoYSksIChiKSkKKyNkZWZpbmUgdHZsb25nKGEpICAgICAgICAgdG9vbF90dmxvbmcoKGEpKQorCisjZW5kaWYgLyogSEVBREVSX0NVUkxfVE9PTF9VVElMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfdmVyc2lvbi5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NzdjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF92ZXJzaW9uLmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBIRUFERVJfQ1VSTF9UT09MX1ZFUlNJT05fSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX1ZFUlNJT05fSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8Y3VybC9jdXJsdmVyLmg+CisKKyNkZWZpbmUgQ1VSTF9OQU1FICJjdXJsIgorI2RlZmluZSBDVVJMX0NPUFlSSUdIVCBMSUJDVVJMX0NPUFlSSUdIVAorI2RlZmluZSBDVVJMX1ZFUlNJT04gIjcuMjUuMCIKKyNkZWZpbmUgQ1VSTF9WRVJTSU9OX01BSk9SIExJQkNVUkxfVkVSU0lPTl9NQUpPUgorI2RlZmluZSBDVVJMX1ZFUlNJT05fTUlOT1IgTElCQ1VSTF9WRVJTSU9OX01JTk9SCisjZGVmaW5lIENVUkxfVkVSU0lPTl9QQVRDSCBMSUJDVVJMX1ZFUlNJT05fUEFUQ0gKKyNkZWZpbmUgQ1VSTF9JRCBDVVJMX05BTUUgIiAiIENVUkxfVkVSU0lPTiAiICgiIE9TICIpICIKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfVkVSU0lPTl9IICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF92bXMuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3Ztcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZWNmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF92bXMuYwpAQCAtMCwwICsxLDIyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIF9fVk1TCisKKyNpZiBkZWZpbmVkKF9fREVDQykgJiYgIWRlZmluZWQoX19WQVgpICYmIFwKKyAgICBkZWZpbmVkKF9fQ1JUTF9WRVIpICYmIChfX0NSVExfVkVSID49IDcwMzAxMDAwKQorI2luY2x1ZGUgPHVuaXhsaWIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNkZWZpbmUgRU5BQkxFX0NVUkxYX1BSSU5URgorI2luY2x1ZGUgImN1cmx4LmgiCisKKyNpbmNsdWRlICJjdXJsbXNnX3Ztcy5oIgorI2luY2x1ZGUgInRvb2xfdm1zLmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKK3ZvaWQgZGVjYyRfX3Bvc2l4X2V4aXQoaW50IF9fc3RhdHVzKTsKK3ZvaWQgZGVjYyRleGl0KGludCBfX3N0YXR1cyk7CisKK3N0YXRpYyBpbnQgdm1zX3NoZWxsID0gLTE7CisKKy8qIFZNUyBoYXMgYSBEQ0wgc2hlbGwgYW5kIGFuZCBhbHNvIGhhcyBVbml4IHNoZWxscyBwb3J0ZWQgdG8gaXQuCisgKiBXaGVuIGN1cmwgaXMgcnVubmluZyB1bmRlciBhIFVuaXggc2hlbGwsIHdlIHdhbnQgaXQgdG8gYmUgYXMgbXVjaAorICogbGlrZSBVbml4IGFzIHBvc3NpYmxlLgorICovCitpbnQgaXNfdm1zX3NoZWxsKHZvaWQpCit7CisgIGNoYXIgKnNoZWxsOworCisgIC8qIEhhdmUgd2UgY2hlY2tlZCB0aGUgc2hlbGwgeWV0PyAqLworICBpZih2bXNfc2hlbGwgPj0gMCkKKyAgICByZXR1cm4gdm1zX3NoZWxsOworCisgIHNoZWxsID0gZ2V0ZW52KCJTSEVMTCIpOworCisgIC8qIE5vIHNoZWxsLCBtZWFucyBEQ0wgKi8KKyAgaWYoc2hlbGwgPT0gTlVMTCkgeworICAgIHZtc19zaGVsbCA9IDE7CisgICAgcmV0dXJuIDE7CisgIH0KKworICAvKiBIYXZlIHRvIG1ha2Ugc3VyZSBzb21lIG9uZSBkaWQgbm90IHNldCBzaGVsbCB0byBEQ0wgKi8KKyAgaWYoc3RyY21wKHNoZWxsLCAiRENMIikgPT0gMCkgeworICAgIHZtc19zaGVsbCA9IDE7CisgICAgcmV0dXJuIDE7CisgIH0KKworICB2bXNfc2hlbGwgPSAwOworICByZXR1cm4gMDsKK30KKworLyoKKyAqIFZNUyBoYXMgdHdvIGV4aXQoKSByb3V0aW5lcy4gIFdoZW4gcnVubmluZyB1bmRlciBhIFVuaXggc3R5bGUgc2hlbGwsIHRoZW4KKyAqIFVuaXggc3R5bGUgYW5kIHRoZSBfX3Bvc2l4X2V4aXQoKSByb3V0aW5lIGlzIHVzZWQuCisgKgorICogV2hlbiBydW5uaW5nIHVuZGVyIHRoZSBEQ0wgc2hlbGwsIHRoZW4gdGhlIFZNUyBlbmNvZGVkIGNvZGVzIGFuZCBkZWNjJGV4aXQoKQorICogaXMgdXNlZC4KKyAqCisgKiBXZSBjYW4gbm90IHVzZSBleGl0KCkgb3IgcmV0dXJuIGEgY29kZSBmcm9tIG1haW4oKSBiZWNhdXNlIHRoZSBhY3R1YWwKKyAqIHJvdXRpbmUgY2FsbGVkIGRlcGVuZHMgb24gYm90aCB0aGUgY29tcGlsZXIgdmVyc2lvbiwgY29tcGlsZSBvcHRpb25zLCBhbmQKKyAqIGZlYXR1cmUgbWFjcm8gc2V0dGluZ3MsIGFuZCBvbmUgb2YgdGhlIGV4aXQgcm91dGluZXMgaXMgaGlkZGVuIGF0IGNvbXBpbGUKKyAqIHRpbWUuCisgKgorICogU2luY2Ugd2Ugd2FudCBDdXJsIHRvIHdvcmsgcHJvcGVybHkgdW5kZXIgdGhlIFZNUyBEQ0wgc2hlbGwgYW5kIFVuaXgKKyAqIHNoZWxscyB1bmRlciBWTVMsIHRoaXMgcm91dGluZSBzaG91bGQgY29tcGlsZSBjb3JyZWN0bHkgcmVnYXJkbGVzcyBvZgorICogdGhlIHNldHRpbmdzLgorICovCisKK3ZvaWQgdm1zX3NwZWNpYWxfZXhpdChpbnQgY29kZSwgaW50IHZtc19zaG93KQoreworICBpbnQgdm1zX2NvZGU7CisKKyAgLyogVGhlIFBvc2l4IGV4aXQgbW9kZSBpcyBvbmx5IGF2YWlsYWJsZSBhZnRlciBWTVMgNy4wICovCisjaWYgX19DUlRMX1ZFUiA+PSA3MDAwMDAwMAorICBpZihpc192bXNfc2hlbGwoKSA9PSAwKSB7CisgICAgZGVjYyRfX3Bvc2l4X2V4aXQoY29kZSk7CisgIH0KKyNlbmRpZgorCisgIGlmKGNvZGUgPiBDVVJMX0xBU1QpIHsgICAvKiBJZiBDVVJMX0xBU1QgZXhjZWVkZWQgdGhlbiAqLworICAgIHZtc19jb2RlID0gQ1VSTF9MQVNUOyAgLyogY3VybG1zZy5oIGlzIG91dCBvZiBzeW5jLiAgKi8KKyAgfQorICBlbHNlIHsKKyAgICB2bXNfY29kZSA9IHZtc19jb25kW2NvZGVdIHwgdm1zX3Nob3c7CisgIH0KKyAgZGVjYyRleGl0KHZtc19jb2RlKTsKK30KKworI2lmIGRlZmluZWQoX19ERUNDKSAmJiAhZGVmaW5lZChfX1ZBWCkgJiYgXAorICAgIGRlZmluZWQoX19DUlRMX1ZFUikgJiYgKF9fQ1JUTF9WRVIgPj0gNzAzMDEwMDApCisKKy8qCisgKiAyMDA0LTA5LTE5IFNNUy4KKyAqCisgKiBkZWNjX2luaXQoKQorICoKKyAqIE9uIG5vbi1WQVggc3lzdGVtcywgdXNlIExJQiRJTklUSUFMSVpFIHRvIHNldCBhIGNvbGxlY3Rpb24gb2YgQworICogUlRMIGZlYXR1cmVzIHdpdGhvdXQgdXNpbmcgdGhlIERFQ0MkKiBsb2dpY2FsIG5hbWUgbWV0aG9kLCBub3IKKyAqIHJlcXVpcmluZyB0aGUgdXNlciB0byBkZWZpbmUgdGhlIGNvcnJlc3BvbmRpbmcgbG9naWNhbCBuYW1lcy4KKyAqLworCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhIERFQ0MkKiBmZWF0dXJlIG5hbWUgYW5kIGl0cyBkZXNpcmVkIHZhbHVlLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyICpuYW1lOworICBpbnQgdmFsdWU7Cit9IGRlY2NfZmVhdF90OworCisvKiBBcnJheSBvZiBERUNDJCogZmVhdHVyZSBuYW1lcyBhbmQgdGhlaXIgZGVzaXJlZCB2YWx1ZXMuICovCitzdGF0aWMgZGVjY19mZWF0X3QgZGVjY19mZWF0X2FycmF5W10gPSB7CisgIC8qIFByZXNlcnZlIGNvbW1hbmQtbGluZSBjYXNlIHdpdGggU0VUIFBST0NFU1MvUEFSU0VfU1RZTEU9RVhURU5ERUQgKi8KKyAgeyAiREVDQyRBUkdWX1BBUlNFX1NUWUxFIiwgMSB9LAorICAvKiBQcmVzZXJ2ZSBjYXNlIGZvciBmaWxlIG5hbWVzIG9uIE9EUzUgZGlza3MuICovCisgIHsgIkRFQ0MkRUZTX0NBU0VfUFJFU0VSVkUiLCAxIH0sCisgIC8qIEVuYWJsZSBtdWx0aXBsZSBkb3RzIChhbmQgbW9zdCBjaGFyYWN0ZXJzKSBpbiBPRFM1IGZpbGUgbmFtZXMsCisgICAgIHdoaWxlIHByZXNlcnZpbmcgVk1TLW5lc3Mgb2YgIjt2ZXJzaW9uIi4gKi8KKyAgeyAiREVDQyRFRlNfQ0hBUlNFVCIsIDEgfSwKKyAgLyogTGlzdCB0ZXJtaW5hdG9yLiAqLworICB7IChjaGFyICopTlVMTCwgMCB9Cit9OworCisvKiBGbGFnIHRvIHNlbnNlIGlmIGRlY2NfaW5pdCgpIHdhcyBjYWxsZWQuICovCitzdGF0aWMgaW50IGRlY2NfaW5pdF9kb25lID0gLTE7CisKKy8qIExJQiRJTklUSUFMSVpFIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAqLworc3RhdGljIHZvaWQgZGVjY19pbml0KHZvaWQpCit7CisgIGludCBmZWF0X2luZGV4OworICBpbnQgZmVhdF92YWx1ZTsKKyAgaW50IGZlYXRfdmFsdWVfbWF4OworICBpbnQgZmVhdF92YWx1ZV9taW47CisgIGludCBpOworICBpbnQgc3RzOworCisgIC8qIFNldCB0aGUgZ2xvYmFsIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBMSUIkSU5JVElBTElaRSB3b3JrZWQuICovCisgIGRlY2NfaW5pdF9kb25lID0gMTsKKworICAvKiBMb29wIHRocm91Z2ggYWxsIGl0ZW1zIGluIHRoZSBkZWNjX2ZlYXRfYXJyYXlbXS4gKi8KKyAgZm9yKGkgPSAwOyBkZWNjX2ZlYXRfYXJyYXlbaV0ubmFtZSAhPSBOVUxMOyBpKyspIHsKKworICAgIC8qIEdldCB0aGUgZmVhdHVyZSBpbmRleC4gKi8KKyAgICBmZWF0X2luZGV4ID0gZGVjYyRmZWF0dXJlX2dldF9pbmRleCggZGVjY19mZWF0X2FycmF5W2ldLm5hbWUpOworCisgICAgaWYoZmVhdF9pbmRleCA+PSAwKSB7CisgICAgICAvKiBWYWxpZCBpdGVtLiAgQ29sbGVjdCBpdHMgcHJvcGVydGllcy4gKi8KKyAgICAgIGZlYXRfdmFsdWUgPSBkZWNjJGZlYXR1cmVfZ2V0X3ZhbHVlKCBmZWF0X2luZGV4LCAxKTsKKyAgICAgIGZlYXRfdmFsdWVfbWluID0gZGVjYyRmZWF0dXJlX2dldF92YWx1ZSggZmVhdF9pbmRleCwgMik7CisgICAgICBmZWF0X3ZhbHVlX21heCA9IGRlY2MkZmVhdHVyZV9nZXRfdmFsdWUoIGZlYXRfaW5kZXgsIDMpOworCisgICAgICBpZigoZGVjY19mZWF0X2FycmF5W2ldLnZhbHVlID49IGZlYXRfdmFsdWVfbWluKSAmJgorICAgICAgICAgKGRlY2NfZmVhdF9hcnJheVtpXS52YWx1ZSA8PSBmZWF0X3ZhbHVlX21heCkpIHsKKyAgICAgICAgLyogVmFsaWQgdmFsdWUuICBTZXQgaXQgaWYgbmVjZXNzYXJ5LiAqLworICAgICAgICBpZihmZWF0X3ZhbHVlICE9IGRlY2NfZmVhdF9hcnJheVtpXS52YWx1ZSkgeworICAgICAgICAgIHN0cyA9IGRlY2MkZmVhdHVyZV9zZXRfdmFsdWUoIGZlYXRfaW5kZXgsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjY19mZWF0X2FycmF5W2ldLnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIEludmFsaWQgREVDQyBmZWF0dXJlIHZhbHVlLiAqLworICAgICAgICBwcmludGYoIiBJTlZBTElEIERFQ0MgRkVBVFVSRSBWQUxVRSwgJWQ6ICVkIDw9ICVzIDw9ICVkLlxuIiwKKyAgICAgICAgICAgICAgIGZlYXRfdmFsdWUsCisgICAgICAgICAgICAgICBmZWF0X3ZhbHVlX21pbiwgZGVjY19mZWF0X2FycmF5W2ldLm5hbWUsIGZlYXRfdmFsdWVfbWF4KTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBJbnZhbGlkIERFQ0MgZmVhdHVyZSBuYW1lLiAqLworICAgICAgcHJpbnRmKCIgVU5LTk9XTiBERUNDIEZFQVRVUkU6ICVzLlxuIiwgZGVjY19mZWF0X2FycmF5W2ldLm5hbWUpOworICAgIH0KKworICB9Cit9CisKKy8qIEdldCAiZGVjY19pbml0KCkiIGludG8gYSB2YWxpZCwgbG9hZGVkIExJQiRJTklUSUFMSVpFIFBTRUNULiAqLworCisjcHJhZ21hIG5vc3RhbmRhcmQKKworLyogRXN0YWJsaXNoIHRoZSBMSUIkSU5JVElBTElaRSBQU0VDVHMsIHdpdGggcHJvcGVyIGFsaWdubWVudCBhbmQKKyAgIG90aGVyIGF0dHJpYnV0ZXMuICBOb3RlIHRoYXQgIm5vcGljIiBpcyBzaWduaWZpY2FudCBvbmx5IG9uIFZBWC4gKi8KKyNwcmFnbWEgZXh0ZXJuX21vZGVsIHNhdmUKKyNwcmFnbWEgZXh0ZXJuX21vZGVsIHN0cmljdF9yZWZkZWYgIkxJQiRJTklUSUFMSVoiIDIsIG5vcGljLCBub3dydAorY29uc3QgaW50IHNwYXJlWzhdID0gezB9OworI3ByYWdtYSBleHRlcm5fbW9kZWwgc3RyaWN0X3JlZmRlZiAiTElCJElOSVRJQUxJWkUiIDIsIG5vcGljLCBub3dydAordm9pZCAoKmNvbnN0IHhfZGVjY19pbml0KSgpID0gZGVjY19pbml0OworI3ByYWdtYSBleHRlcm5fbW9kZWwgcmVzdG9yZQorCisvKiBGYWtlIHJlZmVyZW5jZSB0byBlbnN1cmUgbG9hZGluZyB0aGUgTElCJElOSVRJQUxJWkUgUFNFQ1QuICovCisjcHJhZ21hIGV4dGVybl9tb2RlbCBzYXZlCitpbnQgTElCJElOSVRJQUxJWkUodm9pZCk7CisjcHJhZ21hIGV4dGVybl9tb2RlbCBzdHJpY3RfcmVmZGVmCitpbnQgZG15X2xpYiRpbml0aWFsaXplID0gKGludCkgTElCJElOSVRJQUxJWkU7CisjcHJhZ21hIGV4dGVybl9tb2RlbCByZXN0b3JlCisKKyNwcmFnbWEgc3RhbmRhcmQKKworI2VuZGlmIC8qIF9fREVDQyAmJiAhX19WQVggJiYgX19DUlRMX1ZFUiAmJiBfX0NSVExfVkVSID49IDcwMzAxMDAwICovCisKKyNlbmRpZiAvKiBfX1ZNUyAqLworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF92bXMuaCBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3Ztcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZGIzNGIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF92bXMuaApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfVk1TX0gKKyNkZWZpbmUgSEVBREVSX0NVUkxfVE9PTF9WTVNfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIF9fVk1TCisKK2ludCBpc192bXNfc2hlbGwodm9pZCk7Cit2b2lkIHZtc19zcGVjaWFsX2V4aXQoaW50IGNvZGUsIGludCB2bXNfc2hvdyk7CisKKyN1bmRlZiBleGl0CisjZGVmaW5lIGV4aXQoX19jb2RlKSB2bXNfc3BlY2lhbF9leGl0KChfX2NvZGUpLCAoMCkpCisKKyNkZWZpbmUgIFZNU19TVFMoYyxmLGUscykgKCgoYyYweEYpPDwyOCl8KChmJjB4RkZGKTw8MTYpfCgoZSYweDFGRkYpPDMpfChzJjcpKQorI2RlZmluZSAgVk1TU1RTX0hJREUgIFZNU19TVFMoMSwwLDAsMCkKKworI2VuZGlmIC8qIF9fVk1TICovCisKKyNlbmRpZiAvKiBIRUFERVJfQ1VSTF9UT09MX1ZNU19IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX3dyaXRlZW52LmMgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF93cml0ZWVudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMmFiNjkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF93cml0ZWVudi5jCkBAIC0wLDAgKzEsMTE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaWZkZWYgVVNFX0VOVklST05NRU5UCisKKyNpZmRlZiBfX3Jpc2Nvc19fCisjICBpbmNsdWRlIDxrZXJuZWwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNkZWZpbmUgX01QUklOVEZfUkVQTEFDRSAvKiB1c2Ugb3VyIGZ1bmN0aW9ucyBvbmx5ICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJ0b29sX3dyaXRlZW52LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKK3sKKyAgY29uc3QgY2hhciAqIG5hbWU7CisgIENVUkxJTkZPIGlkOworICBlbnVtIHsKKyAgICB3cml0ZWVudl9OT05FLAorICAgIHdyaXRlZW52X0RPVUJMRSwKKyAgICB3cml0ZWVudl9MT05HLAorICAgIHdyaXRlZW52X1NUUklORworICB9IHR5cGU7Cit9IHZhcmlhYmxlc1sxNF0gPQoreworICB7ImN1cmxfdXJsX2VmZmVjdGl2ZSIsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsIHdyaXRlZW52X1NUUklOR30sCisgIHsiY3VybF9odHRwX2NvZGUiLCBDVVJMSU5GT19SRVNQT05TRV9DT0RFLCB3cml0ZWVudl9MT05HfSwKKyAgeyJjdXJsX3RpbWVfdG90YWwiLCBDVVJMSU5GT19UT1RBTF9USU1FLCB3cml0ZWVudl9ET1VCTEV9LAorICB7ImN1cmxfdGltZV9uYW1lbG9va3VwIiwgQ1VSTElORk9fTkFNRUxPT0tVUF9USU1FLCB3cml0ZWVudl9ET1VCTEV9LAorICB7ImN1cmxfdGltZV9jb25uZWN0IiwgQ1VSTElORk9fQ09OTkVDVF9USU1FLCB3cml0ZWVudl9ET1VCTEV9LAorICB7ImN1cmxfdGltZV9wcmV0cmFuc2ZlciIsIENVUkxJTkZPX1BSRVRSQU5TRkVSX1RJTUUsIHdyaXRlZW52X0RPVUJMRX0sCisgIHsiY3VybF90aW1lX3N0YXJ0dHJhbnNmZXIiLCBDVVJMSU5GT19TVEFSVFRSQU5TRkVSX1RJTUUsIHdyaXRlZW52X0RPVUJMRX0sCisgIHsiY3VybF9zaXplX2hlYWRlciIsIENVUkxJTkZPX0hFQURFUl9TSVpFLCB3cml0ZWVudl9MT05HfSwKKyAgeyJjdXJsX3NpemVfcmVxdWVzdCIsIENVUkxJTkZPX1JFUVVFU1RfU0laRSwgd3JpdGVlbnZfTE9OR30sCisgIHsiY3VybF9zaXplX2Rvd25sb2FkIiwgQ1VSTElORk9fU0laRV9ET1dOTE9BRCwgd3JpdGVlbnZfRE9VQkxFfSwKKyAgeyJjdXJsX3NpemVfdXBsb2FkIiwgQ1VSTElORk9fU0laRV9VUExPQUQsIHdyaXRlZW52X0RPVUJMRX0sCisgIHsiY3VybF9zcGVlZF9kb3dubG9hZCIsIENVUkxJTkZPX1NQRUVEX0RPV05MT0FELCB3cml0ZWVudl9ET1VCTEV9LAorICB7ImN1cmxfc3BlZWRfdXBsb2FkIiwgQ1VSTElORk9fU1BFRURfVVBMT0FELCB3cml0ZWVudl9ET1VCTEV9LAorICB7TlVMTCwgMCwgd3JpdGVlbnZfTk9ORX0KKyB9OworCitzdGF0aWMgdm9pZCBpbnRlcm5hbFNldEVudihjb25zdCBjaGFyICogbmFtZSwgY2hhciAqIHZhbHVlKQoreworICAvKiBBZGQgeW91ciBPUy1zcGVjaWZpYyBjb2RlIGhlcmUuICovCisjaWZkZWYgX19yaXNjb3NfXworICBfa2VybmVsX3NldGVudihuYW1lLCB2YWx1ZSk7CisjZWxpZiBkZWZpbmVkIChDVVJMREVCVUcpCisgIGN1cmxfbWVtbG9nKCJFTlYgJXMgPSAlc1xuIiwgbmFtZSwgdmFsdWUpOworI2VuZGlmCisgIHJldHVybjsKK30KKwordm9pZCBvdXJXcml0ZUVudihDVVJMICpjdXJsKQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAgY2hhciAqc3RyaW5nLCBudW10ZXh0WzEwXTsKKyAgbG9uZyBsb25naW5mbzsKKyAgZG91YmxlIGRvdWJsZWluZm87CisKKyAgZm9yKGk9MDsgdmFyaWFibGVzW2ldLm5hbWU7IGkrKykgeworICAgIHN3aXRjaCAodmFyaWFibGVzW2ldLnR5cGUpIHsKKyAgICBjYXNlIHdyaXRlZW52X1NUUklORzoKKyAgICAgIGlmKGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIHZhcmlhYmxlc1tpXS5pZCwgJnN0cmluZykgPT0gQ1VSTEVfT0spCisgICAgICAgIGludGVybmFsU2V0RW52KHZhcmlhYmxlc1tpXS5uYW1lLCBzdHJpbmcpOworICAgICAgZWxzZQorICAgICAgICBpbnRlcm5hbFNldEVudih2YXJpYWJsZXNbaV0ubmFtZSwgTlVMTCk7CisgICAgICBicmVhazsKKworICAgIGNhc2Ugd3JpdGVlbnZfTE9ORzoKKyAgICAgIGlmKGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIHZhcmlhYmxlc1tpXS5pZCwgJmxvbmdpbmZvKSA9PSBDVVJMRV9PSykgeworICAgICAgICBjdXJsX21zcHJpbnRmKG51bXRleHQsICIlNWxkIiwgbG9uZ2luZm8pOworICAgICAgICBpbnRlcm5hbFNldEVudih2YXJpYWJsZXNbaV0ubmFtZSwgbnVtdGV4dCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGludGVybmFsU2V0RW52KHZhcmlhYmxlc1tpXS5uYW1lLCBOVUxMKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ugd3JpdGVlbnZfRE9VQkxFOgorICAgICAgaWYoY3VybF9lYXN5X2dldGluZm8oY3VybCwgdmFyaWFibGVzW2ldLmlkLCAmZG91YmxlaW5mbykgPT0gQ1VSTEVfT0spIHsKKyAgICAgICAgY3VybF9tc3ByaW50ZihudW10ZXh0LCAiJTYuMmYiLCBkb3VibGVpbmZvKTsKKyAgICAgICAgaW50ZXJuYWxTZXRFbnYodmFyaWFibGVzW2ldLm5hbWUsIG51bXRleHQpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBpbnRlcm5hbFNldEVudih2YXJpYWJsZXNbaV0ubmFtZSwgTlVMTCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy90b29sX3dyaXRlZW52LmggYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF93cml0ZWVudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZmRjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdG9vbF93cml0ZWVudi5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgSEVBREVSX0NVUkxfVE9PTF9XUklURUVOVl9ICisjZGVmaW5lIEhFQURFUl9DVVJMX1RPT0xfV1JJVEVFTlZfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIFVTRV9FTlZJUk9OTUVOVAorCit2b2lkIG91cldyaXRlRW52KENVUkwgKmN1cmwpOworCisjZWxzZQorIyAgZGVmaW5lIG91cldyaXRlRW52KHgpICBDdXJsX25vcF9zdG10CisjZW5kaWYKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfV1JJVEVFTlZfSCAqLworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF93cml0ZW91dC5jIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfd3JpdGVvdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWExYzk4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfd3JpdGVvdXQuYwpAQCAtMCwwICsxLDI5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCisjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UgLyogd2Ugd2FudCBjdXJsLWZ1bmN0aW9ucyBpbnN0ZWFkIG9mIG5hdGl2ZSBvbmVzICovCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJ0b29sX3dyaXRlb3V0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBrZWVwIHRoaXMgYXMgTEFTVCBpbmNsdWRlICovCisKK3R5cGVkZWYgZW51bSB7CisgIFZBUl9OT05FLCAgICAgICAvKiBtdXN0IGJlIHRoZSBmaXJzdCAqLworICBWQVJfVE9UQUxfVElNRSwKKyAgVkFSX05BTUVMT09LVVBfVElNRSwKKyAgVkFSX0NPTk5FQ1RfVElNRSwKKyAgVkFSX0FQUENPTk5FQ1RfVElNRSwKKyAgVkFSX1BSRVRSQU5TRkVSX1RJTUUsCisgIFZBUl9TVEFSVFRSQU5TRkVSX1RJTUUsCisgIFZBUl9TSVpFX0RPV05MT0FELAorICBWQVJfU0laRV9VUExPQUQsCisgIFZBUl9TUEVFRF9ET1dOTE9BRCwKKyAgVkFSX1NQRUVEX1VQTE9BRCwKKyAgVkFSX0hUVFBfQ09ERSwKKyAgVkFSX0hUVFBfQ09ERV9QUk9YWSwKKyAgVkFSX0hFQURFUl9TSVpFLAorICBWQVJfUkVRVUVTVF9TSVpFLAorICBWQVJfRUZGRUNUSVZFX1VSTCwKKyAgVkFSX0NPTlRFTlRfVFlQRSwKKyAgVkFSX05VTV9DT05ORUNUUywKKyAgVkFSX1JFRElSRUNUX1RJTUUsCisgIFZBUl9SRURJUkVDVF9DT1VOVCwKKyAgVkFSX0ZUUF9FTlRSWV9QQVRILAorICBWQVJfUkVESVJFQ1RfVVJMLAorICBWQVJfU1NMX1ZFUklGWV9SRVNVTFQsCisgIFZBUl9OVU1fT0ZfVkFSUyAvKiBtdXN0IGJlIHRoZSBsYXN0ICovCit9IHJlcGxhY2VpZDsKKworc3RydWN0IHZhcmlhYmxlIHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgcmVwbGFjZWlkIGlkOworfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZhcmlhYmxlIHJlcGxhY2VtZW50c1tdPXsKKyAgeyJ1cmxfZWZmZWN0aXZlIiwgVkFSX0VGRkVDVElWRV9VUkx9LAorICB7Imh0dHBfY29kZSIsIFZBUl9IVFRQX0NPREV9LAorICB7InJlc3BvbnNlX2NvZGUiLCBWQVJfSFRUUF9DT0RFfSwKKyAgeyJodHRwX2Nvbm5lY3QiLCBWQVJfSFRUUF9DT0RFX1BST1hZfSwKKyAgeyJ0aW1lX3RvdGFsIiwgVkFSX1RPVEFMX1RJTUV9LAorICB7InRpbWVfbmFtZWxvb2t1cCIsIFZBUl9OQU1FTE9PS1VQX1RJTUV9LAorICB7InRpbWVfY29ubmVjdCIsIFZBUl9DT05ORUNUX1RJTUV9LAorICB7InRpbWVfYXBwY29ubmVjdCIsIFZBUl9BUFBDT05ORUNUX1RJTUV9LAorICB7InRpbWVfcHJldHJhbnNmZXIiLCBWQVJfUFJFVFJBTlNGRVJfVElNRX0sCisgIHsidGltZV9zdGFydHRyYW5zZmVyIiwgVkFSX1NUQVJUVFJBTlNGRVJfVElNRX0sCisgIHsic2l6ZV9oZWFkZXIiLCBWQVJfSEVBREVSX1NJWkV9LAorICB7InNpemVfcmVxdWVzdCIsIFZBUl9SRVFVRVNUX1NJWkV9LAorICB7InNpemVfZG93bmxvYWQiLCBWQVJfU0laRV9ET1dOTE9BRH0sCisgIHsic2l6ZV91cGxvYWQiLCBWQVJfU0laRV9VUExPQUR9LAorICB7InNwZWVkX2Rvd25sb2FkIiwgVkFSX1NQRUVEX0RPV05MT0FEfSwKKyAgeyJzcGVlZF91cGxvYWQiLCBWQVJfU1BFRURfVVBMT0FEfSwKKyAgeyJjb250ZW50X3R5cGUiLCBWQVJfQ09OVEVOVF9UWVBFfSwKKyAgeyJudW1fY29ubmVjdHMiLCBWQVJfTlVNX0NPTk5FQ1RTfSwKKyAgeyJ0aW1lX3JlZGlyZWN0IiwgVkFSX1JFRElSRUNUX1RJTUV9LAorICB7Im51bV9yZWRpcmVjdHMiLCBWQVJfUkVESVJFQ1RfQ09VTlR9LAorICB7ImZ0cF9lbnRyeV9wYXRoIiwgVkFSX0ZUUF9FTlRSWV9QQVRIfSwKKyAgeyJyZWRpcmVjdF91cmwiLCBWQVJfUkVESVJFQ1RfVVJMfSwKKyAgeyJzc2xfdmVyaWZ5X3Jlc3VsdCIsIFZBUl9TU0xfVkVSSUZZX1JFU1VMVH0sCisgIHtOVUxMLCBWQVJfTk9ORX0KK307CisKK3ZvaWQgb3VyV3JpdGVPdXQoQ1VSTCAqY3VybCwgY29uc3QgY2hhciAqd3JpdGVpbmZvKQoreworICBGSUxFICpzdHJlYW0gPSBzdGRvdXQ7CisgIGNvbnN0IGNoYXIgKnB0ciA9IHdyaXRlaW5mbzsKKyAgY2hhciAqc3RyaW5ncDsKKyAgbG9uZyBsb25naW5mbzsKKyAgZG91YmxlIGRvdWJsZWluZm87CisKKyAgd2hpbGUocHRyICYmICpwdHIpIHsKKyAgICBpZignJScgPT0gKnB0cikgeworICAgICAgaWYoJyUnID09IHB0clsxXSkgeworICAgICAgICAvKiBhbiBlc2NhcGVkICUtbGV0dGVyICovCisgICAgICAgIGZwdXRjKCclJywgc3RyZWFtKTsKKyAgICAgICAgcHRyICs9IDI7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogdGhpcyBpcyBtZWFudCBhcyBhIHZhcmlhYmxlIHRvIG91dHB1dCAqLworICAgICAgICBjaGFyICplbmQ7CisgICAgICAgIGNoYXIga2VlcGl0OworICAgICAgICBpbnQgaTsKKyAgICAgICAgaWYoKCd7JyA9PSBwdHJbMV0pICYmICgoZW5kID0gc3RyY2hyKHB0ciwgJ30nKSkgIT0gTlVMTCkpIHsKKyAgICAgICAgICBib29sIG1hdGNoID0gRkFMU0U7CisgICAgICAgICAgcHRyICs9IDI7IC8qIHBhc3MgdGhlICUgYW5kIHRoZSB7ICovCisgICAgICAgICAga2VlcGl0ID0gKmVuZDsKKyAgICAgICAgICAqZW5kID0gMDsgLyogemVybyB0ZXJtaW5hdGUgKi8KKyAgICAgICAgICBmb3IoaSA9IDA7IHJlcGxhY2VtZW50c1tpXS5uYW1lOyBpKyspIHsKKyAgICAgICAgICAgIGlmKGN1cmxfc3RyZXF1YWwocHRyLCByZXBsYWNlbWVudHNbaV0ubmFtZSkpIHsKKyAgICAgICAgICAgICAgbWF0Y2ggPSBUUlVFOworICAgICAgICAgICAgICBzd2l0Y2gocmVwbGFjZW1lbnRzW2ldLmlkKSB7CisgICAgICAgICAgICAgIGNhc2UgVkFSX0VGRkVDVElWRV9VUkw6CisgICAgICAgICAgICAgICAgaWYoKENVUkxFX09LID09CisgICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZzdHJpbmdwKSkKKyAgICAgICAgICAgICAgICAgICAmJiBzdHJpbmdwKQorICAgICAgICAgICAgICAgICAgZnB1dHMoc3RyaW5ncCwgc3RyZWFtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBWQVJfSFRUUF9DT0RFOgorICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CisgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSwgJmxvbmdpbmZvKSkKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJTAzbGQiLCBsb25naW5mbyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVkFSX0hUVFBfQ09ERV9QUk9YWToKKyAgICAgICAgICAgICAgICBpZihDVVJMRV9PSyA9PQorICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX0hUVFBfQ09OTkVDVENPREUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvbmdpbmZvKSkKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJTAzbGQiLCBsb25naW5mbyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVkFSX0hFQURFUl9TSVpFOgorICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CisgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fSEVBREVSX1NJWkUsICZsb25naW5mbykpCisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVsZCIsIGxvbmdpbmZvKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBWQVJfUkVRVUVTVF9TSVpFOgorICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CisgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fUkVRVUVTVF9TSVpFLCAmbG9uZ2luZm8pKQorICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlbGQiLCBsb25naW5mbyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVkFSX05VTV9DT05ORUNUUzoKKyAgICAgICAgICAgICAgICBpZihDVVJMRV9PSyA9PQorICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX05VTV9DT05ORUNUUywgJmxvbmdpbmZvKSkKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJWxkIiwgbG9uZ2luZm8pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFZBUl9SRURJUkVDVF9DT1VOVDoKKyAgICAgICAgICAgICAgICBpZihDVVJMRV9PSyA9PQorICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX1JFRElSRUNUX0NPVU5ULCAmbG9uZ2luZm8pKQorICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlbGQiLCBsb25naW5mbyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVkFSX1JFRElSRUNUX1RJTUU6CisgICAgICAgICAgICAgICAgaWYoQ1VSTEVfT0sgPT0KKyAgICAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19SRURJUkVDVF9USU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb3VibGVpbmZvKSkKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJS4zZiIsIGRvdWJsZWluZm8pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFZBUl9UT1RBTF9USU1FOgorICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CisgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fVE9UQUxfVElNRSwgJmRvdWJsZWluZm8pKQorICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlLjNmIiwgZG91YmxlaW5mbyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVkFSX05BTUVMT09LVVBfVElNRToKKyAgICAgICAgICAgICAgICBpZihDVVJMRV9PSyA9PQorICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX05BTUVMT09LVVBfVElNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG91YmxlaW5mbykpCisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiUuM2YiLCBkb3VibGVpbmZvKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBWQVJfQ09OTkVDVF9USU1FOgorICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CisgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fQ09OTkVDVF9USU1FLCAmZG91YmxlaW5mbykpCisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiUuM2YiLCBkb3VibGVpbmZvKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBWQVJfQVBQQ09OTkVDVF9USU1FOgorICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CisgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fQVBQQ09OTkVDVF9USU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb3VibGVpbmZvKSkKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJS4zZiIsIGRvdWJsZWluZm8pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFZBUl9QUkVUUkFOU0ZFUl9USU1FOgorICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CisgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fUFJFVFJBTlNGRVJfVElNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG91YmxlaW5mbykpCisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiUuM2YiLCBkb3VibGVpbmZvKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBWQVJfU1RBUlRUUkFOU0ZFUl9USU1FOgorICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CisgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb3VibGVpbmZvKSkKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJS4zZiIsIGRvdWJsZWluZm8pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFZBUl9TSVpFX1VQTE9BRDoKKyAgICAgICAgICAgICAgICBpZihDVVJMRV9PSyA9PQorICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX1NJWkVfVVBMT0FELCAmZG91YmxlaW5mbykpCisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiUuMGYiLCBkb3VibGVpbmZvKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBWQVJfU0laRV9ET1dOTE9BRDoKKyAgICAgICAgICAgICAgICBpZihDVVJMRV9PSyA9PQorICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX1NJWkVfRE9XTkxPQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRvdWJsZWluZm8pKQorICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlLjBmIiwgZG91YmxlaW5mbyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVkFSX1NQRUVEX0RPV05MT0FEOgorICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CisgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fU1BFRURfRE9XTkxPQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRvdWJsZWluZm8pKQorICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlLjNmIiwgZG91YmxlaW5mbyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVkFSX1NQRUVEX1VQTE9BRDoKKyAgICAgICAgICAgICAgICBpZihDVVJMRV9PSyA9PQorICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX1NQRUVEX1VQTE9BRCwgJmRvdWJsZWluZm8pKQorICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlLjNmIiwgZG91YmxlaW5mbyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVkFSX0NPTlRFTlRfVFlQRToKKyAgICAgICAgICAgICAgICBpZigoQ1VSTEVfT0sgPT0KKyAgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fQ09OVEVOVF9UWVBFLCAmc3RyaW5ncCkpCisgICAgICAgICAgICAgICAgICAgJiYgc3RyaW5ncCkKKyAgICAgICAgICAgICAgICAgIGZwdXRzKHN0cmluZ3AsIHN0cmVhbSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVkFSX0ZUUF9FTlRSWV9QQVRIOgorICAgICAgICAgICAgICAgIGlmKChDVVJMRV9PSyA9PQorICAgICAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19GVFBfRU5UUllfUEFUSCwgJnN0cmluZ3ApKQorICAgICAgICAgICAgICAgICAgICYmIHN0cmluZ3ApCisgICAgICAgICAgICAgICAgICBmcHV0cyhzdHJpbmdwLCBzdHJlYW0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFZBUl9SRURJUkVDVF9VUkw6CisgICAgICAgICAgICAgICAgaWYoKENVUkxFX09LID09CisgICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX1JFRElSRUNUX1VSTCwgJnN0cmluZ3ApKQorICAgICAgICAgICAgICAgICAgICYmIHN0cmluZ3ApCisgICAgICAgICAgICAgICAgICBmcHV0cyhzdHJpbmdwLCBzdHJlYW0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFZBUl9TU0xfVkVSSUZZX1JFU1VMVDoKKyAgICAgICAgICAgICAgICBpZihDVVJMRV9PSyA9PQorICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX1NTTF9WRVJJRllSRVNVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvbmdpbmZvKSkKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJWxkIiwgbG9uZ2luZm8pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBpZighbWF0Y2gpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY3VybDogdW5rbm93biAtLXdyaXRlLW91dCB2YXJpYWJsZTogJyVzJ1xuIiwgcHRyKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcHRyID0gZW5kICsgMTsgLyogcGFzcyB0aGUgZW5kICovCisgICAgICAgICAgKmVuZCA9IGtlZXBpdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAvKiBpbGxlZ2FsIHN5bnRheCwgdGhlbiBqdXN0IG91dHB1dCB0aGUgY2hhcmFjdGVycyB0aGF0IGFyZSB1c2VkICovCisgICAgICAgICAgZnB1dGMoJyUnLCBzdHJlYW0pOworICAgICAgICAgIGZwdXRjKHB0clsxXSwgc3RyZWFtKTsKKyAgICAgICAgICBwdHIgKz0gMjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKCdcXCcgPT0gKnB0cikgeworICAgICAgc3dpdGNoKHB0clsxXSkgeworICAgICAgY2FzZSAncic6CisgICAgICAgIGZwdXRjKCdccicsIHN0cmVhbSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnbic6CisgICAgICAgIGZwdXRjKCdcbicsIHN0cmVhbSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAndCc6CisgICAgICAgIGZwdXRjKCdcdCcsIHN0cmVhbSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLyogdW5rbm93biwganVzdCBvdXRwdXQgdGhpcyAqLworICAgICAgICBmcHV0YygqcHRyLCBzdHJlYW0pOworICAgICAgICBmcHV0YyhwdHJbMV0sIHN0cmVhbSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgcHRyICs9IDI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZnB1dGMoKnB0ciwgc3RyZWFtKTsKKyAgICAgIHB0cisrOworICAgIH0KKyAgfQorCit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF93cml0ZW91dC5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfd3JpdGVvdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTVjZmNmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfd3JpdGVvdXQuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfV1JJVEVPVVRfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX1dSSVRFT1VUX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKK3ZvaWQgb3VyV3JpdGVPdXQoQ1VSTCAqY3VybCwgY29uc3QgY2hhciAqb3V0KTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfV1JJVEVPVVRfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3Rvb2xfeGF0dHIuYyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3hhdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzODgzZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3NyYy90b29sX3hhdHRyLmMKQEAgLTAsMCArMSw3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfRlNFVFhBVFRSCisjICBpbmNsdWRlIDxzeXMveGF0dHIuaD4gLyogaGVhZGVyIGZyb20gbGliYywgbm90IGZyb20gbGliYXR0ciAqLworI2VuZGlmCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworI2luY2x1ZGUgInRvb2xfeGF0dHIuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiIC8qIGtlZXAgdGhpcyBhcyBMQVNUIGluY2x1ZGUgKi8KKworI2lmZGVmIEhBVkVfRlNFVFhBVFRSCisKKy8qIG1hcHBpbmcgdGFibGUgb2YgY3VybCBtZXRhZGF0YSB0byBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfbWFwcGluZyB7CisgIGNvbnN0IGNoYXIgKmF0dHI7IC8qIG5hbWUgb2YgdGhlIHhhdHRyICovCisgIENVUkxJTkZPIGluZm87Cit9IG1hcHBpbmdzW10gPSB7CisgIC8qIG1hcHBpbmdzIHByb3Bvc2VkIGJ5CisgICAqIGh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Db21tb25FeHRlbmRlZEF0dHJpYnV0ZXMKKyAgICovCisgIHsgInVzZXIueGRnLm9yaWdpbi51cmwiLCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMIH0sCisgIHsgInVzZXIubWltZV90eXBlIiwgICAgICBDVVJMSU5GT19DT05URU5UX1RZUEUgfSwKKyAgeyBOVUxMLCAgICAgICAgICAgICAgICAgIENVUkxJTkZPX05PTkUgfSAvKiBsYXN0IGVsZW1lbnQsIGFib3J0IGxvb3AgaGVyZSAqLworfTsKKworLyogc3RvcmUgbWV0YWRhdGEgZnJvbSB0aGUgY3VybCByZXF1ZXN0IGFsb25nc2lkZSB0aGUgZG93bmxvYWRlZAorICogZmlsZSB1c2luZyBleHRlbmRlZCBhdHRyaWJ1dGVzCisgKi8KK2ludCBmd3JpdGVfeGF0dHIoQ1VSTCAqY3VybCwgaW50IGZkKQoreworICBpbnQgaSA9IDA7CisgIGludCBlcnIgPSAwOworICAvKiBsb29wIHRocm91Z2ggYWxsIHhhdHRyLWN1cmxpbmZvIHBhaXJzIGFuZCBhYm9ydCBvbiBhIHNldCBlcnJvciAqLworICB3aGlsZShlcnIgPT0gMCAmJiBtYXBwaW5nc1tpXS5hdHRyICE9IE5VTEwpIHsKKyAgICBjaGFyICp2YWx1ZSA9IE5VTEw7CisgICAgQ1VSTGNvZGUgcmMgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBtYXBwaW5nc1tpXS5pbmZvLCAmdmFsdWUpOworICAgIGlmKHJjID09IENVUkxFX09LICYmIHZhbHVlKSB7CisjaWZkZWYgSEFWRV9GU0VUWEFUVFJfNgorICAgICAgZXJyID0gZnNldHhhdHRyKGZkLCBtYXBwaW5nc1tpXS5hdHRyLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSwgMCwgMCk7CisjZWxpZiBkZWZpbmVkKEhBVkVfRlNFVFhBVFRSXzUpCisgICAgICBlcnIgPSBmc2V0eGF0dHIoZmQsIG1hcHBpbmdzW2ldLmF0dHIsIHZhbHVlLCBzdHJsZW4odmFsdWUpLCAwKTsKKyNlbmRpZgorICAgIH0KKyAgICBpKys7CisgIH0KKyAgcmV0dXJuIGVycjsKK30KKyNlbHNlCitpbnQgZndyaXRlX3hhdHRyKENVUkwgKmN1cmwsIGludCBmZCkKK3sKKyAgKHZvaWQpY3VybDsKKyAgKHZvaWQpZmQ7CisgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdG9vbF94YXR0ci5oIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfeGF0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGM4Yzk0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3Rvb2xfeGF0dHIuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1RPT0xfWEFUVFJfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9UT09MX1hBVFRSX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNldHVwLmgiCisKK2ludCBmd3JpdGVfeGF0dHIoQ1VSTCAqY3VybCwgaW50IGZkKTsKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfWEFUVFJfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvc3JjL3ZjNmN1cmxzcmMuZHNwIGIvY3VybC03LjI1LjAvc3JjL3ZjNmN1cmxzcmMuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NjZmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC9zcmMvdmM2Y3VybHNyYy5kc3AKQEAgLTAsMCArMSw0OTAgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iY3VybHNyYyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjICoqIERPIE5PVCBFRElUICoqDQorDQorIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzDQorDQorQ0ZHPWN1cmxzcmMgLSBXaW4zMiB1c2luZyBsaWJjdXJsIExJQiBEZWJ1Zw0KKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAiY3VybHNyYy5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAiY3VybHNyYy5tYWsiIENGRz0iY3VybHNyYyAtIFdpbjMyIHVzaW5nIGxpYmN1cmwgTElCIERlYnVnIg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFICJjdXJsc3JjIC0gV2luMzIgdXNpbmcgbGliY3VybCBETEwgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQorIU1FU1NBR0UgImN1cmxzcmMgLSBXaW4zMiB1c2luZyBsaWJjdXJsIERMTCBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KKyFNRVNTQUdFICJjdXJsc3JjIC0gV2luMzIgdXNpbmcgbGliY3VybCBMSUIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQorIU1FU1NBR0UgImN1cmxzcmMgLSBXaW4zMiB1c2luZyBsaWJjdXJsIExJQiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KKyFNRVNTQUdFIA0KKw0KKyMgQmVnaW4gUHJvamVjdA0KKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQorQ1BQPWNsLmV4ZQ0KK1JTQz1yYy5leGUNCisNCishSUYgICIkKENGRykiID09ICJjdXJsc3JjIC0gV2luMzIgdXNpbmcgbGliY3VybCBETEwgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRExMLURlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRMTC1EZWJ1ZyINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiRExMLURlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJETEwtRGVidWciDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlxsaWIiIC9JICIuLlxpbmNsdWRlIiAvSSAiLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX01CQ1MiIC9EICJfQ09OU09MRSIgL0ZEIC9HWiAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cbGliIiAvSSAiLi5caW5jbHVkZSIgL0kgIi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9NQkNTIiAvRCAiX0NPTlNPTEUiIC9GRCAvR1ogL2MNCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvaSAiLi5caW5jbHVkZSIgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uXGluY2x1ZGUiIC9kICJfREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIgbGliY3VybGRfaW1wLmxpYiBrZXJuZWwzMi5saWIgd3MyXzMyLmxpYiB3bGRhcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiRExMLURlYnVnL2N1cmwuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlxsaWJcRExMLURlYnVnIg0KKyMgQUREIExJTkszMiBsaWJjdXJsZF9pbXAubGliIGtlcm5lbDMyLmxpYiB3czJfMzIubGliIHdsZGFwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiJETEwtRGVidWcvY3VybC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uXGxpYlxETEwtRGVidWciDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImN1cmxzcmMgLSBXaW4zMiB1c2luZyBsaWJjdXJsIERMTCBSZWxlYXNlIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRMTC1SZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRMTC1SZWxlYXNlIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICJETEwtUmVsZWFzZSINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRExMLVJlbGVhc2UiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlxsaWIiIC9JICIuLlxpbmNsdWRlIiAvSSAiLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX01CQ1MiIC9EICJfQ09OU09MRSIgL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlxsaWIiIC9JICIuLlxpbmNsdWRlIiAvSSAiLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX01CQ1MiIC9EICJfQ09OU09MRSIgL0ZEIC9jDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2kgIi4uXGluY2x1ZGUiIC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlxpbmNsdWRlIiAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGxpYmN1cmxfaW1wLmxpYiBrZXJuZWwzMi5saWIgd3MyXzMyLmxpYiB3bGRhcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJETEwtUmVsZWFzZS9jdXJsLmV4ZSIgL2xpYnBhdGg6Ii4uXGxpYlxETEwtUmVsZWFzZSINCisjIEFERCBMSU5LMzIgbGliY3VybF9pbXAubGliIGtlcm5lbDMyLmxpYiB3czJfMzIubGliIHdsZGFwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6IkRMTC1SZWxlYXNlL2N1cmwuZXhlIiAvbGlicGF0aDoiLi5cbGliXERMTC1SZWxlYXNlIg0KKw0KKyFFTFNFSUYgICIkKENGRykiID09ICJjdXJsc3JjIC0gV2luMzIgdXNpbmcgbGliY3VybCBMSUIgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiTElCLURlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkxJQi1EZWJ1ZyINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiTElCLURlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJMSUItRGVidWciDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlxsaWIiIC9JICIuLlxpbmNsdWRlIiAvSSAiLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX01CQ1MiIC9EICJfQ09OU09MRSIgL0QgIkNVUkxfU1RBVElDTElCIiAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlxsaWIiIC9JICIuLlxpbmNsdWRlIiAvSSAiLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX01CQ1MiIC9EICJfQ09OU09MRSIgL0QgIkNVUkxfU1RBVElDTElCIiAvRkQgL0daIC9jDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2kgIi4uXGluY2x1ZGUiIC9kICJfREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlxpbmNsdWRlIiAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGxpYmN1cmxkLmxpYiBrZXJuZWwzMi5saWIgd3MyXzMyLmxpYiB3bGRhcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiTElCLURlYnVnL2N1cmwuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLlxsaWJcTElCLURlYnVnIg0KKyMgQUREIExJTkszMiBsaWJjdXJsZC5saWIga2VybmVsMzIubGliIHdzMl8zMi5saWIgd2xkYXAzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6IkxJQi1EZWJ1Zy9jdXJsLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi5cbGliXExJQi1EZWJ1ZyINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiY3VybHNyYyAtIFdpbjMyIHVzaW5nIGxpYmN1cmwgTElCIFJlbGVhc2UiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiTElCLVJlbGVhc2UiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiTElCLVJlbGVhc2UiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgIkxJQi1SZWxlYXNlIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJMSUItUmVsZWFzZSINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXGxpYiIgL0kgIi4uXGluY2x1ZGUiIC9JICIuIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfTUJDUyIgL0QgIl9DT05TT0xFIiAvRCAiQ1VSTF9TVEFUSUNMSUIiIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cbGliIiAvSSAiLi5caW5jbHVkZSIgL0kgIi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9NQkNTIiAvRCAiX0NPTlNPTEUiIC9EICJDVVJMX1NUQVRJQ0xJQiIgL0ZEIC9jDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2kgIi4uXGluY2x1ZGUiIC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlxpbmNsdWRlIiAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGxpYmN1cmwubGliIGtlcm5lbDMyLmxpYiB3czJfMzIubGliIHdsZGFwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6IkxJQi1SZWxlYXNlL2N1cmwuZXhlIiAvbGlicGF0aDoiLi5cbGliXExJQi1SZWxlYXNlIg0KKyMgQUREIExJTkszMiBsaWJjdXJsLmxpYiBrZXJuZWwzMi5saWIgd3MyXzMyLmxpYiB3bGRhcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiJMSUItUmVsZWFzZS9jdXJsLmV4ZSIgL2xpYnBhdGg6Ii4uXGxpYlxMSUItUmVsZWFzZSINCisNCishRU5ESUYgDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgImN1cmxzcmMgLSBXaW4zMiB1c2luZyBsaWJjdXJsIERMTCBEZWJ1ZyINCisjIE5hbWUgImN1cmxzcmMgLSBXaW4zMiB1c2luZyBsaWJjdXJsIERMTCBSZWxlYXNlIg0KKyMgTmFtZSAiY3VybHNyYyAtIFdpbjMyIHVzaW5nIGxpYmN1cmwgTElCIERlYnVnIg0KKyMgTmFtZSAiY3VybHNyYyAtIFdpbjMyIHVzaW5nIGxpYmN1cmwgTElCIFJlbGVhc2UiDQorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxodWdlaGVscC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXGxpYlxub25ibG9jay5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXGxpYlxyYXdzdHIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlxsaWJcc3RydG9vZmZ0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2Jpbm1vZGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfYm5hbWUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfY2JfZGJnLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2NiX2hkci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9jYl9wcmcuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfY2JfcmVhLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2NiX3NlZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9jYl93cnQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfY2ZnYWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9jb252ZXJ0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2RpcmhpZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9kb3N3aW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfZWFzeXNyYy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9mb3JtcGFyc2UuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfZ2V0cGFyYW0uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfZ2V0cGFzcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9oZWxwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2hlbHBlcnMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfaG9tZWRpci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9saWJpbmZvLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfbWZpbGVzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX21zZ3MuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfb3BlcmF0ZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9vcGVyaGxwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX3BhbnlrZXkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfcGFyYW1obHAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfcGFyc2VjZmcuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfc2V0b3B0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX3NsZWVwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX3VybGdsb2IuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfdXRpbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF92bXMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfd3JpdGVlbnYuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfd3JpdGVvdXQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfeGF0dHIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLlxjb25maWctd2luMzIuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9LlxodWdlaGVscC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cc2V0dXAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlxsaWJcbm9uYmxvY2suaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlxsaWJccmF3c3RyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cbGliXHN0cnRvb2ZmdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9iaW5tb2RlLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2JuYW1lLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2NiX2RiZy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9jYl9oZHIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfY2JfcHJnLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2NiX3JlYS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9jYl9zZWUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfY2Jfd3J0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2NmZ2FibGUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfY29udmVydC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9kaXJoaWUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfZG9zd2luLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2Vhc3lzcmMuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfZm9ybXBhcnNlLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2dldHBhcmFtLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2dldHBhc3MuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfaGVscC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9oZWxwZXJzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX2hvbWVkaXIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfbGliaW5mby5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9tYWluLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX21maWxlcy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9tc2dzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX29wZXJhdGUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfb3BlcmhscC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9wYW55a2V5LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX3BhcmFtaGxwLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX3BhcnNlY2ZnLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX3NkZWNscy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF9zZXRvcHQuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfc2xlZXAuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfdXJsZ2xvYi5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cdG9vbF91dGlsLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX3ZlcnNpb24uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXHRvb2xfdm1zLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX3dyaXRlZW52LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX3dyaXRlb3V0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Llx0b29sX3hhdHRyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAiUmVzb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uXGN1cmwucmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBFbmQgVGFyZ2V0DQorIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3NyYy92YzZjdXJsc3JjLmRzdyBiL2N1cmwtNy4yNS4wL3NyYy92YzZjdXJsc3JjLmRzdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjJkYjZmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3ZjNmN1cmxzcmMuZHN3CkBAIC0wLDAgKzEsMjkgQEAKK01pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImN1cmxzcmMiPSIuXHZjNmN1cmxzcmMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitHbG9iYWw6DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTwzPg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC9zcmMvdmVyc2lvbi5oIGIvY3VybC03LjI1LjAvc3JjL3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjYwYWE1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvc3JjL3ZlcnNpb24uaApAQCAtMCwwICsxLDM1IEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1ZFUlNJT05fSAorI2RlZmluZSBIRUFERVJfQ1VSTF9WRVJTSU9OX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8Y3VybC9jdXJsdmVyLmg+CisKKyNkZWZpbmUgQ1VSTF9OQU1FICJjdXJsIgorI2RlZmluZSBDVVJMX0NPUFlSSUdIVCBMSUJDVVJMX0NPUFlSSUdIVAorI2RlZmluZSBDVVJMX1ZFUlNJT04gIjcuMjIuMCIKKyNkZWZpbmUgQ1VSTF9WRVJTSU9OX01BSk9SIExJQkNVUkxfVkVSU0lPTl9NQUpPUgorI2RlZmluZSBDVVJMX1ZFUlNJT05fTUlOT1IgTElCQ1VSTF9WRVJTSU9OX01JTk9SCisjZGVmaW5lIENVUkxfVkVSU0lPTl9QQVRDSCBMSUJDVVJMX1ZFUlNJT05fUEFUQ0gKKyNkZWZpbmUgQ1VSTF9JRCBDVVJMX05BTUUgIiAiIENVUkxfVkVSU0lPTiAiICgiIE9TICIpICIKKworI2VuZGlmIC8qIEhFQURFUl9DVVJMX1ZFUlNJT05fSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvQ01ha2VMaXN0cy50eHQgYi9jdXJsLTcuMjUuMC90ZXN0cy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGFiMDZlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwyIEBACithZGRfc3ViZGlyZWN0b3J5KGxpYnRlc3QpCithZGRfc3ViZGlyZWN0b3J5KHNlcnZlcikKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL0ZJTEVGT1JNQVQgYi9jdXJsLTcuMjUuMC90ZXN0cy9GSUxFRk9STUFUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MzJiNDMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9GSUxFRk9STUFUCkBAIC0wLDAgKzEsMzc0IEBACisgVGhlIHRlc3Qgc3VpdGUncyBmaWxlIGZvcm1hdCBpcyB2ZXJ5IHNpbXBsZSBhbmQgZXh0ZW5zaWJsZSwgY2xvc2VseQorcmVzZW1ibGluZyBYTUwuIEFsbCBkYXRhIGZvciBhIHNpbmdsZSB0ZXN0IGNhc2UgcmVzaWRlcyBpbiBhIHNpbmdsZQorQVNDSUkgZmlsZS4gTGFiZWxzIG1hcmsgdGhlIGJlZ2lubmluZyBhbmQgdGhlIGVuZCBvZiBhbGwgc2VjdGlvbnMsIGFuZCBlYWNoCitsYWJlbCBtdXN0IGJlIHdyaXR0ZW4gaW4gaXRzIG93biBsaW5lLiAgQ29tbWVudHMgYXJlIGVpdGhlciBYTUwtc3R5bGUKKyhlbmNsb3NlZCB3aXRoIDwhLS0gYW5kIC0tPikgb3IgQy1zdHlsZSAoYmVnaW5uaW5nIHdpdGggIykgYW5kIG11c3QgYXBwZWFyCitvbiB0aGVpciBvd24gbGluZXMgYW5kIG5vdCBhbG9uZ3NpZGUgYWN0dWFsIHRlc3QgZGF0YS4gIE1vc3QgdGVzdCBkYXRhIGZpbGVzCithcmUgc3ludGFjdGljYWxseSB2YWxpZCBYTUwsIGFsdGhvdWdoIGEgZmV3IGZpbGVzIGFyZSBub3QgKGxhY2sgb2YKK3N1cHBvcnQgZm9yIGNoYXJhY3RlciBlbnRpdGllcyBhbmQgdGhlIHByZXNlcnZhdGlvbiBvZiBDUi9MRiBjaGFyYWN0ZXJzIGF0Cit0aGUgZW5kIG9mIGxpbmVzIGFyZSB0aGUgYmlnZ2VzdCBkaWZmZXJlbmNlcykuCisKKyBUaGUgZmlsZSBiZWdpbnMgd2l0aCBhICd0ZXN0Y2FzZScgdGFnLCB3aGljaCBlbmNvbXBhc3NlcyB0aGUgcmVtYWluZGVyIG9mCit0aGUgZmlsZS4KKworPHRlc3RjYXNlPgorCisgRWFjaCBmaWxlIGlzIHNwbGl0IHVwIGluIHRocmVlIG1haW4gc2VjdGlvbnM6IHJlcGx5LCBjbGllbnQgYW5kIHZlcmlmeS4gVGhlCityZXBseSBzZWN0aW9uIGlzIHVzZWQgZm9yIHRoZSBzZXJ2ZXIgdG8ga25vdyB3aGF0IHRvIHNlbmQgYXMgYSByZXBseSBmb3IgdGhlCityZXF1ZXN0cyBjdXJsIHNlbmRzLCB0aGUgY2xpZW50IHNlY3Rpb24gZGVmaW5lcyBob3cgdGhlIGNsaWVudCBzaG91bGQgYmVoYXZlCit3aGlsZSB0aGUgdmVyaWZ5IHNlY3Rpb24gZGVmaW5lcyBob3cgdG8gdmVyaWZ5IHRoYXQgdGhlIGRhdGEgc3RvcmVkIGFmdGVyIGEKK2NvbW1hbmQgaGFzIGJlZW4gcnVuIGVuZGVkIHVwIGNvcnJlY3RseS4KKworIEVhY2ggbWFpbiBzZWN0aW9uIGhhcyBhIG51bWJlciBvZiBhdmFpbGFibGUgc3Vic2VjdGlvbnMgdGhhdCBjYW4gYmUKK3NwZWNpZmllZCwgdGhhdCB3aWxsIGJlIGNoZWNrZWQvdXNlZCBpZiBzcGVjaWZpZWQuIFRoaXMgZG9jdW1lbnQgaW5jbHVkZXMgYWxsCit0aGUgc3Vic2VjdGlvbnMgY3VycmVudGx5IHN1cHBvcnRlZC4KKworTWFpbiBzZWN0aW9ucyBhcmUgJ2luZm8nLCAncmVwbHknLCAnY2xpZW50JyBhbmQgJ3ZlcmlmeScuCisKKzxpbmZvPgorPGtleXdvcmRzPgorQSBuZXdsaW5lLXNlcGFyYXRlZCBsaXN0IG9mIGtleXdvcmRzIGRlc2NyaWJpbmcgd2hhdCB0aGlzIHRlc3QgY2FzZSB1c2VzIGFuZAordGVzdHMuIFRyeSB0byB1c2UgYW4gYWxyZWFkeSB1c2VkIGtleXdvcmQuICBUaGVzZSBrZXl3b3JkcyB3aWxsIGJlIHVzZWQgZm9yCitzdGF0aXN0aWNhbC9pbmZvcm1hdGlvbmFsIHB1cnBvc2VzIGFuZCBmb3IgY2hvb3Npbmcgb3Igc2tpcHBpbmcgY2xhc3Nlcworb2YgdGVzdHMuICAiS2V5d29yZHMiIG11c3QgYmVnaW4gd2l0aCBhbiBhbHBoYWJldGljIGNoYXJhY3RlciwgIi0iLCAiWyIKK29yICJ7IiBhbmQgbWF5IGFjdHVhbGx5IGNvbnNpc3Qgb2YgbXVsdGlwbGUgd29yZHMgc2VwYXJhdGVkIGJ5IHNwYWNlcword2hpY2ggYXJlIHRyZWF0ZWQgdG9nZXRoZXIgYXMgYSBzaW5nbGUgaWRlbnRpZmllci4KKzwva2V5d29yZHM+Cis8L2luZm8+CisKKzxyZXBseT4KKzxkYXRhIFtub2NoZWNrPSJ5ZXMiXSBbc2VuZHplcm89InllcyJdIFtiYXNlNjQ9InllcyJdPgorZGF0YSB0byBiZSBzZW50IHRvIHRoZSBjbGllbnQgb24gaXRzIHJlcXVlc3QgYW5kIGxhdGVyIHZlcmlmaWVkIHRoYXQgaXQgYXJyaXZlZAorc2FmZWx5LiBTZXQgbm9jaGVjaz0ieWVzIiB0byBwcmV2ZW50IHRoZSB0ZXN0IHNjcmlwdCBmcm9tIHZlcmlmeWluZyB0aGUgYXJyaXZhbAorb2YgdGhpcyBkYXRhLgorCitJZiB0aGUgZGF0YSBjb250YWlucyAnc3dzY2xvc2UnIGFueXdoZXJlIHdpdGhpbiB0aGUgc3RhcnQgYW5kIGVuZCB0YWcsIGFuZAordGhpcyBpcyBhIEhUVFAgdGVzdCwgdGhlbiB0aGUgY29ubmVjdGlvbiB3aWxsIGJlIGNsb3NlZCBieSB0aGUgc2VydmVyIGFmdGVyCit0aGlzIHJlc3BvbnNlIGlzIHNlbnQuIElmIG5vdCwgdGhlIGNvbm5lY3Rpb24gd2lsbCBiZSBrZXB0IHBlcnNpc3RlbnQuCisKK0lmIHRoZSBkYXRhIGNvbnRhaW5zICdzd3Nib3VuY2UnIGFueXdoZXJlIHdpdGhpbiB0aGUgc3RhcnQgYW5kIGVuZCB0YWcsIHRoZQorSFRUUCBzZXJ2ZXIgd2lsbCBkZXRlY3QgaWYgdGhpcyBpcyBhIHNlY29uZCByZXF1ZXN0IHVzaW5nIHRoZSBzYW1lIHRlc3QgYW5kCitwYXJ0IG51bWJlciBhbmQgd2lsbCB0aGVuIGluY3JlYXNlIHRoZSBwYXJ0IG51bWJlciB3aXRoIG9uZS4gVGhpcyBpcyB1c2VmdWwKK2ZvciBhdXRoIHRlc3RzIGFuZCBzaW1pbGFyLgorCisnc2VuZHplcm8nIHNldCB0byB5ZXMgbWVhbnMgdGhhdCB0aGUgKEZUUCkgc2VydmVyIHdpbGwgInNlbmQiIHRoZSBkYXRhIGV2ZW4gaWYKK3RoZSBzaXplIGlzIHplcm8gYnl0ZXMuIFVzZWQgdG8gdmVyaWZ5IGN1cmwncyBiZWhhdmlvdXIgb24gemVybyBieXRlcwordHJhbnNmZXJzLgorCisnYmFzZTY0JyBzZXQgdG8geWVzIG1lYW5zIHRoYXQgdGhlIGRhdGEgcHJvdmlkZWQgaW4gdGhlIHRlc3QtZmlsZSBpcyBhIGNodW5rCitvZiBkYXRhIGVuY29kZWQgd2l0aCBiYXNlNjQuIEl0IGlzIHRoZSBvbmx5IHdheSBhIHRlc3QgY2FzZSBjYW4gY29udGFpbiBiaW5hcnkKK2RhdGEuIChUaGlzIGF0dHJpYnV0ZSBjYW4gaW4gZmFjdCBiZSB1c2VkIG9uIGFueSBzZWN0aW9uLCBidXQgaXQgZG9lc24ndCBtYWtlCittdWNoIHNlbnNlIGZvciBvdGhlciBzZWN0aW9ucyB0aGFuICJkYXRhIikuCis8L2RhdGE+Cis8ZGF0YU5VTT4KK1NlbmQgYmFjayB0aGlzIGNvbnRlbnRzIGluc3RlYWQgb2YgdGhlIDxkYXRhPiBvbmUuIFRoZSBudW0gaXMgc2V0IGJ5OgorQSkgVGhlIHRlc3QgbnVtYmVyIGluIHRoZSByZXF1ZXN0IGxpbmUgaXMgPjEwMDAwIGFuZCB0aGlzIGlzIHRoZSByZW1haW5kZXIKK29mIFt0ZXN0IGNhc2UgbnVtYmVyXSUxMDAwMC4KK0IpIFRoZSByZXF1ZXN0IHdhcyBIVFRQIGFuZCBpbmNsdWRlZCBkaWdlc3QgZGV0YWlscywgd2hpY2ggYWRkcyAxMDAwIHRvIE5VTQorQykgSWYgYSBIVFRQIHJlcXVlc3QgaXMgTlRMTSB0eXBlLTEsIGl0IGFkZHMgMTAwMSB0byBudW0KK0QpIElmIGEgSFRUUCByZXF1ZXN0IGlzIE5UTE0gdHlwZS0zLCBpdCBhZGRzIDEwMDIgdG8gbnVtCitFKSBJZiBhIEhUVFAgcmVxdWVzdCBpcyBCYXNpYyBhbmQgbnVtIGlzIGFscmVhZHkgPj0xMDAwLCBpdCBhZGRzIDEgdG8gbnVtCisKK0R5bmFtaWNhbGx5IGNoYW5naW5nIG51bSBpbiB0aGlzIHdheSBhbGxvd3MgdGhlIHRlc3QgaGFybmVzcyB0byBiZSB1c2VkIHRvCit0ZXN0IGF1dGhlbnRpY2F0aW9uIG5lZ290aWF0aW9uIHdoZXJlIHNldmVyYWwgZGlmZmVyZW50IHJlcXVlc3RzIG11c3QgYmUgc2VudAordG8gY29tcGxldGUgYSB0cmFuc2Zlci4gVGhlIHJlc3BvbnNlIHRvIGVhY2ggcmVxdWVzdCBpcyBmb3VuZCBpbiBpdHMgb3duIGRhdGEKK3NlY3Rpb24uICBWYWxpZGF0aW5nIHRoZSBlbnRpcmUgbmVnb3RpYXRpb24gc2VxdWVuY2UgY2FuIGJlIGRvbmUgYnkKK3NwZWNpZnlpbmcgYSBkYXRhY2hlY2sgc2VjdGlvbi4KKzwvZGF0YU5VTT4KKzxkYXRhY2hlY2sgW25vbmV3bGluZT0ieWVzIl0+CitpZiB0aGUgZGF0YSBpcyBzZW50IGJ1dCB0aGlzIGlzIHdoYXQgc2hvdWxkIGJlIGNoZWNrZWQgYWZ0ZXJ3YXJkcy4gSWYKKydub25ld2xpbmUnIGlzIHNldCwgd2Ugd2lsbCBjdXQgb2ZmIHRoZSB0cmFpbGluZyBuZXdsaW5lIG9mIHRoaXMgZ2l2ZW4gZGF0YQorYmVmb3JlIGNvbXBhcmluZyB3aXRoIHRoZSBvbmUgYWN0dWFsbHkgcmVjZWl2ZWQgYnkgdGhlIGNsaWVudAorPC9kYXRhY2hlY2s+Cis8c2l6ZT4KK251bWJlciB0byByZXR1cm4gb24gYSBmdHAgU0laRSBjb21tYW5kIChzZXQgdG8gLTEgdG8gbWFrZSB0aGlzIGNvbW1hbmQgZmFpbCkKKzwvc2l6ZT4KKzxtZHRtPgord2hhdCB0byBzZW5kIGJhY2sgaWYgdGhlIGNsaWVudCBzZW5kcyBhIChGVFApIE1EVE0gY29tbWFuZCwgc2V0IHRvIC0xIHRvCitoYXZlIGl0IHJldHVybiB0aGF0IHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QKKzwvbWR0bT4KKzxwb3N0Y21kPgorc3BlY2lhbCBwdXJwb3NlIHNlcnZlci1jb21tYW5kIHRvIGNvbnRyb2wgaXRzIGJlaGF2aW9yICphZnRlciogdGhlCityZXBseSBpcyBzZW50CitGb3IgSFRUUC9IVFRQUywgdGhlc2UgYXJlIHN1cHBvcnRlZDoKKword2FpdCBbc2Vjc10KKyAtIFBhdXNlIGZvciB0aGUgZ2l2ZW4gdGltZQorPC9wb3N0Y21kPgorPHNlcnZlcmNtZD4KK1NwZWNpYWwtY29tbWFuZHMgZm9yIHRoZSBzZXJ2ZXIuCitGb3IgRlRQLCB0aGVzZSBhcmUgc3VwcG9ydGVkOgorCitSRVBMWSBbY29tbWFuZF0gW3JldHVybiB2YWx1ZV0gW3Jlc3BvbnNlIHN0cmluZ10KKyAtIENoYW5nZXMgaG93IHRoZSBzZXJ2ZXIgcmVzcG9uZHMgdG8gdGhlIFtjb21tYW5kXS4gW3Jlc3BvbnNlIHN0cmluZ10gaXMKKyAgIGV2YWx1YXRlZCBhcyBhIHBlcmwgc3RyaW5nLCBzbyBpdCBjYW4gY29udGFpbiBlbWJlZGRlZCBcclxuLCBmb3IgZXhhbXBsZS4KK0NPVU5UIFtjb21tYW5kXSBbbnVtXQorIC0gRG8gdGhlIFJFUExZIGNoYW5nZSBmb3IgW2NvbW1hbmRdIG9ubHkgW251bV0gdGltZXMgYW5kIHRoZW4gZ28gYmFjayB0byB0aGUKKyAgIGJ1aWx0LWluIGFwcHJvYWNoCitERUxBWSBbY29tbWFuZF0gW3NlY3NdCisgLSBEZWxheSByZXNwb25kaW5nIHRvIHRoaXMgY29tbWFuZCBmb3IgdGhlIGdpdmVuIHRpbWUKK1JFVFJXRUlSRE8KKyAtIEVuYWJsZSB0aGUgIndlaXJkbyIgUkVUUiBjYXNlIHdoZW4gbXVsdGlwbGUgcmVzcG9uc2UgbGluZXMgYXBwZWFyIGF0IG9uY2UKKyAgIHdoZW4gYSBmaWxlIGlzIHRyYW5zZmVyZWQKK1JFVFJOT1NJWkUKKyAtIE1ha2Ugc3VyZSB0aGUgUkVUUiByZXNwb25zZSBkb2Vzbid0IGNvbnRhaW4gdGhlIHNpemUgb2YgdGhlIGZpbGUKK05PU0FWRQorIC0gRG9uJ3QgYWN0dWFsbHkgc2F2ZSB3aGF0IGlzIHJlY2VpdmVkCitTTE9XRE9XTgorIC0gU2VuZCBGVFAgcmVzcG9uc2VzIHdpdGggMC4wMSBzZWMgZGVsYXkgYmV0d2VlbiBlYWNoIGJ5dGUKK1BBU1ZCQURJUAorIC0gbWFrZXMgUEFTViBzZW5kIGJhY2sgYW4gaWxsZWdhbCBJUCBpbiBpdHMgMjI3IHJlc3BvbnNlCisKK0ZvciBIVFRQL0hUVFBTOgorYXV0aF9yZXF1aXJlZCAgIGlmIHRoaXMgaXMgc2V0IGFuZCBhIFBPU1QvUFVUIGlzIG1hZGUgd2l0aG91dCBhdXRoLCB0aGUKKyAgICAgICAgICAgICAgICBzZXJ2ZXIgd2lsbCBOT1Qgd2FpdCBmb3IgdGhlIGZ1bGwgcmVxdWVzdCBib2R5IHRvIGdldCBzZW50CitpZGxlICAgICAgICAgICAgZG8gbm90aGluZyBhZnRlciByZWNlaXZpbmcgdGhlIHJlcXVlc3QsIGp1c3QgInNpdCBpZGxlIgorc3RyZWFtICAgICAgICAgIGNvbnRpbnVvdXNseSBzZW5kIGRhdGEgdG8gdGhlIGNsaWVudCwgbmV2ZXItZW5kaW5nCit3cml0ZWRlbGF5OiBbc2Vjc10gZGVsYXkgdGhpcyBhbW91bnQgYmV0d2VlbiByZXBseSBwYWNrZXRzCitwaXBlOiBbbnVtXSAgICAgdGVsbCB0aGUgc2VydmVyIHRvIGV4cGVjdCB0aGlzIG1hbnkgSFRUUCByZXF1ZXN0cyBiZWZvcmUKKyAgICAgICAgICAgICAgICBzZW5kaW5nIGJhY2sgYW55dGhpbmcsIHRvIGFsbG93IHBpcGVsaW5pbmcgdGVzdHMKK3NraXA6IFtudW1dICAgICBpbnN0cnVjdHMgdGhlIHNlcnZlciB0byBpZ25vcmUgcmVhZGluZyB0aGlzIG1hbnkgYnl0ZXMgZnJvbSBhIFBVVAorICAgICAgICAgICAgICAgIG9yIFBPU1QgcmVxdWVzdAorCitydHA6IHBhcnQgW251bV0gY2hhbm5lbCBbbnVtXSBzaXplIFtudW1dCisgICAgICAgICAgICAgICBzdHJlYW0gYSBmYWtlIFJUUCBwYWNrZXQgZm9yIHRoZSBnaXZlbiBwYXJ0IG9uIGEgY2hvc2VuIGNoYW5uZWwKKyAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIHBheWxvYWQgc2l6ZQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCis8Y2xpZW50PgorCis8c2VydmVyPgorV2hhdCBzZXJ2ZXIocykgdGhpcyB0ZXN0IGNhc2UgcmVxdWlyZXMvdXNlczoKKworZmlsZQorZnRwCitmdHAtaXB2NgorZnRwcworaHR0cAoraHR0cC1pcHY2CitodHRwcworbm9uZQorc2NwCitzZnRwCitzb2NrczQKK3NvY2tzNQorcnRzcAorcnRzcC1pcHY2CitpbWFwCitwb3AzCitzbXRwCitodHRwdGxzK3NycAoraHR0cHRscytzcnAtaXB2NgoraHR0cC1wcm94eQorCitHaXZlIG9ubHkgb25lIHBlciBsaW5lLiAgVGhpcyBzdWJzZWN0aW9uIGlzIG1hbmRhdG9yeS4KKzwvc2VydmVyPgorCis8ZmVhdHVyZXM+CitBIGxpc3Qgb2YgZmVhdHVyZXMgdGhhdCBNVVNUIGJlIHByZXNlbnQgaW4gdGhlIGNsaWVudC9saWJyYXJ5IGZvciB0aGlzIHRlc3QgdG8KK2JlIGFibGUgdG8gcnVuIChpZiB0aGVzZSBmZWF0dXJlcyBhcmUgbm90IHByZXNlbnQsIHRoZSB0ZXN0IHdpbGwgYmUKK1NLSVBQRUQpLiBGZWF0dXJlcyB0ZXN0YWJsZSBoZXJlIGFyZToKKworYXhUTFMKK2NyeXB0bworZ2V0cmxpbWl0CitHbnVUTFMKK2lkbgoraXB2NgorbGFyZ2VfZmlsZQorbGliegorTlNTCitOVExNCitPcGVuU1NMCitTU0wKK3NvY2tzCit1bml0dGVzdAorZGVidWcKK1RMUy1TUlAKKworYXMgd2VsbCBhcyBlYWNoIHByb3RvY29sIHRoYXQgY3VybCBzdXBwb3J0cy4gIEEgcHJvdG9jb2wgb25seSBuZWVkcyB0byBiZQorc3BlY2lmaWVkIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBzZXJ2ZXIgKHVzZWZ1bCB3aGVuIHRoZSBzZXJ2ZXIKK2lzICdub25lJykuCis8L2ZlYXR1cmVzPgorCis8a2lsbHNlcnZlcj4KK1VzaW5nIHRoZSBzYW1lIHN5bnRheCBhcyBpbiA8c2VydmVyPiBidXQgd2hlbiBtZW50aW9uZWQgaGVyZSB0aGVzZSBzZXJ2ZXJzCithcmUgZXhwbGljaXRseSBLSUxMRUQgd2hlbiB0aGlzIHRlc3QgY2FzZSBpcyBjb21wbGV0ZWQuIE9ubHkgdXNlIHRoaXMgaWYgdGhlcmUKK2lzIG5vIG90aGVyIGFsdGVybmF0aXZlcy4gVXNpbmcgdGhpcyBvZiBjb3Vyc2UgcmVxdWlyZXMgc3Vic2VxdWVudCB0ZXN0cyB0bworcmVzdGFydCBzZXJ2ZXJzLgorPC9raWxsc2VydmVyPgorCis8cHJlY2hlY2s+CitBIGNvbW1hbmQgbGluZSB0aGF0IGlmIHNldCBnZXRzIHJ1biBieSB0aGUgdGVzdCBzY3JpcHQgYmVmb3JlIHRoZSB0ZXN0LiBJZiBhbgorb3V0cHV0IGlzIGRpc3BsYXllZCBieSB0aGUgY29tbWFuZCBvciBpZiB0aGUgcmV0dXJuIGNvZGUgaXMgbm9uLXplcm8sIHRoZSB0ZXN0Cit3aWxsIGJlIHNraXBwZWQgYW5kIHRoZSAoc2luZ2xlLWxpbmUpIG91dHB1dCB3aWxsIGJlIGRpc3BsYXllZCBhcyByZWFzb24gZm9yCitub3QgcnVubmluZyB0aGUgdGVzdC4gIFZhcmlhYmxlcyBhcmUgc3Vic3RpdHV0ZWQgYXMgaW4gdGhlIDxjb21tYW5kPiBzZWN0aW9uLgorPC9wcmVjaGVjaz4KKworPHBvc3RjaGVjaz4KK0EgY29tbWFuZCBsaW5lIHRoYXQgaWYgc2V0IGdldHMgcnVuIGJ5IHRoZSB0ZXN0IHNjcmlwdCBhZnRlciB0aGUgdGVzdC4gSWYKK3RoZSBjb21tYW5kIGV4aXN0cyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIGNvZGUsIHRoZSB0ZXN0IHdpbGwgYmUgY29uc2lkZXJlZAordG8gaGF2ZSBmYWlsZWQuIFZhcmlhYmxlcyBhcmUgc3Vic3RpdHV0ZWQgYXMgaW4gdGhlIDxjb21tYW5kPiBzZWN0aW9uLgorPC9wb3N0Y2hlY2s+CisKKzx0b29sPgorTmFtZSBvZiB0b29sIHRvIHVzZSBpbnN0ZWFkIG9mICJjdXJsIi4gVGhpcyB0b29sIG11c3QgYmUgYnVpbHQgYW5kIGV4aXN0CitlaXRoZXIgaW4gdGhlIGxpYnRlc3QvIGRpcmVjdG9yeSAoaWYgdGhlIHRvb2wgc3RhcnRzIHdpdGggJ2xpYicpIG9yIGluIHRoZQordW5pdC8gZGlyZWN0b3J5IChpZiB0aGUgdG9vbCBzdGFydHMgd2l0aCAndW5pdCcpLgorPC90b29sPgorCis8bmFtZT4KK3Rlc3QgY2FzZSBkZXNjcmlwdGlvbgorPC9uYW1lPgorCis8c2V0ZW52PgordmFyaWFibGUxPWNvbnRlbnRzMQordmFyaWFibGUyPWNvbnRlbnRzMgorCitTZXQgdGhlIGdpdmVuIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGJlZm9yZSB0aGUgYWN0dWFsCitjb21tYW5kIGlzIHJ1bi4gVGhleSBhcmUgY2xlYXJlZCBhZ2FpbiBhZnRlciB0aGUgY29tbWFuZCBoYXMgYmVlbiBydW4uCitWYXJpYWJsZXMgYXJlIGZpcnN0IHN1YnN0aXR1dGVkIGFzIGluIHRoZSA8Y29tbWFuZD4gc2VjdGlvbi4KKzwvc2V0ZW52PgorCis8Y29tbWFuZCBbb3B0aW9uPSJuby1vdXRwdXQvbm8taW5jbHVkZSJdIFt0aW1lb3V0PSJzZWNzIl0gW2RlbGF5PSJzZWNzIl0KKyAgICAgICAgIFt0eXBlPSJwZXJsIl0+Citjb21tYW5kIGxpbmUgdG8gcnVuLCB0aGVyZSdzIGEgYnVuY2ggb2YgJXZhcmlhYmxlcyB0aGF0IGdldCByZXBsYWNlZAorYWNjb3JkaW5nbHkuCisKK05vdGUgdGhhdCB0aGUgVVJMIHRoYXQgZ2V0cyBwYXNzZWQgdG8gdGhlIHNlcnZlciBhY3R1YWxseSBjb250cm9scyB3aGF0IGRhdGEKK3RoYXQgaXMgcmV0dXJuZWQuIFRoZSBsYXN0IHNsYXNoIGluIHRoZSBVUkwgbXVzdCBiZSBmb2xsb3dlZCBieSBhIG51bWJlci4gVGhhdAorbnVtYmVyIChOKSB3aWxsIGJlIHVzZWQgYnkgdGhlIHRlc3Qtc2VydmVyIHRvIGxvYWQgdGVzdCBjYXNlIE4gYW5kIHJldHVybiB0aGUKK2RhdGEgdGhhdCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgPHJlcGx5PjxkYXRhPjwvZGF0YT48L3JlcGx5PiBzZWN0aW9uLgorCitJZiBhIENPTk5FQ1QgaXMgdXNlZCB0byB0aGUgc2VydmVyICh0byBlbXVsYXRlIEhUVFBTIGV0YyBvdmVyIHByb3h5KSwgdGhlIHBvcnQKK251bWJlciBnaXZlbiBpbiB0aGUgQ09OTkVDVCByZXF1ZXN0IHdpbGwgYmUgdXNlZCB0byBpZGVudGlmeSB3aGljaCB0ZXN0IHRoYXQKK2lzIGJlaW5nIHJ1biwgaWYgdGhlIHByb3h5IGhvc3QgbmFtZSBpcyBzYWlkIHRvIHN0YXJ0IHdpdGggJ3Rlc3QnLgorCitTZXQgdHlwZT0icGVybCIgdG8gd3JpdGUgdGhlIHRlc3QgY2FzZSBhcyBhIHBlcmwgc2NyaXB0LiBJdCBpbXBsaWVzIHRoYXQKK3RoZXJlJ3Mgbm8gbWVtb3J5IGRlYnVnZ2luZyBhbmQgdmFsZ3JpbmQgZ2V0cyBzaHV0IG9mZiBmb3IgdGhpcyB0ZXN0LgorCitTZXQgb3B0aW9uPSJuby1vdXRwdXQiIHRvIHByZXZlbnQgdGhlIHRlc3Qgc2NyaXB0IHRvIHNsYXAgb24gdGhlIC0tb3V0cHV0Cithcmd1bWVudCB0aGF0IGRpcmVjdHMgdGhlIG91dHB1dCB0byBhIGZpbGUuIFRoZSAtLW91dHB1dCBpcyBhbHNvIG5vdCBhZGRlZCBpZgordGhlIHZlcmlmeS9zdGRvdXQgc2VjdGlvbiBpcyB1c2VkLgorCitTZXQgb3B0aW9uPSJuby1pbmNsdWRlIiB0byBwcmV2ZW50IHRoZSB0ZXN0IHNjcmlwdCB0byBzbGFwIG9uIHRoZSAtLWluY2x1ZGUKK2FyZ3VtZW50LgorCitTZXQgdGltZW91dD0ic2VjcyIgdG8gb3ZlcnJpZGUgZGVmYXVsdCBzZXJ2ZXIgbG9ncyBhZHZpc29yIHJlYWQgbG9jayB0aW1lb3V0LgorVGhpcyB0aW1lb3V0IGlzIHVzZWQgYnkgdGhlIHRlc3QgaGFybmVzcywgb25jZSB0aGF0IHRoZSBjb21tYW5kIGhhcyBjb21wbGV0ZWQKK2V4ZWN1dGlvbiwgdG8gd2FpdCBmb3IgdGhlIHRlc3Qgc2VydmVyIHRvIHdyaXRlIG91dCBzZXJ2ZXIgc2lkZSBsb2cgZmlsZXMgYW5kCityZW1vdmUgdGhlIGxvY2sgdGhhdCBhZHZpc2VkIG5vdCB0byByZWFkIHRoZW0uIFRoZSAic2VjcyIgcGFyYW1ldGVyIGlzIHRoZSBub3QKK25lZ2F0aXZlIGludGVnZXIgbnVtYmVyIG9mIHNlY29uZHMgZm9yIHRoZSB0aW1lb3V0LiBUaGlzICd0aW1lb3V0JyBhdHRyaWJ1dGUKK2lzIGRvY3VtZW50ZWQgZm9yIGNvbXBsZXRlbmVzcyBzYWtlLCBidXQgaXMgZGVlcCB0ZXN0IGhhcm5lc3Mgc3R1ZmYgYW5kIG9ubHkKK25lZWRlZCBmb3IgdmVyeSBzaW5ndWxhciBhbmQgc3BlY2lmaWMgdGVzdCBjYXNlcy4gQXZvaWQgdXNpbmcgaXQuCisKK1NldCBkZWxheT0ic2VjcyIgdG8gaW50cm9kdWNlIGEgdGltZSBkZWxheSBvbmNlIHRoYXQgdGhlIGNvbW1hbmQgaGFzIGNvbXBsZXRlZAorZXhlY3V0aW9uIGFuZCBiZWZvcmUgdGhlIDxwb3N0Y2hlY2s+IHNlY3Rpb24gcnVucy4gVGhlICJzZWNzIiBwYXJhbWV0ZXIgaXMgdGhlCitub3QgbmVnYXRpdmUgaW50ZWdlciBudW1iZXIgb2Ygc2Vjb25kcyBmb3IgdGhlIGRlbGF5LiBUaGlzICdkZWxheScgYXR0cmlidXRlCitpcyBpbnRlbmRlZCBmb3IgdmVyeSBzcGVjaWZpYyB0ZXN0IGNhc2VzLCBhbmQgbm9ybWFsbHkgbm90IG5lZWRlZC4KKworQXZhaWxhYmxlIHN1YnN0aXR1dGUgdmFyaWFibGVzIGluY2x1ZGU6CislQ0xJRU5USVAgICAtIElQdjQgYWRkcmVzcyBvZiB0aGUgY2xpZW50IHJ1bm5pbmcgY3VybAorJUNMSUVOVDZJUCAgLSBJUHY2IGFkZHJlc3Mgb2YgdGhlIGNsaWVudCBydW5uaW5nIGN1cmwKKyVIT1NUSVAgICAgLSBJUHY0IGFkZHJlc3Mgb2YgdGhlIGhvc3QgcnVubmluZyB0aGlzIHRlc3QKKyVIVFRQUE9SVCAgLSBQb3J0IG51bWJlciBvZiB0aGUgSFRUUCBzZXJ2ZXIKKyVIT1NUNklQICAgLSBJUHY2IGFkZHJlc3Mgb2YgdGhlIGhvc3QgcnVubmluZyB0aGlzIHRlc3QKKyVIVFRQNlBPUlQgLSBJUHY2IHBvcnQgbnVtYmVyIG9mIHRoZSBIVFRQIHNlcnZlcgorJUhUVFBTUE9SVCAtIFBvcnQgbnVtYmVyIG9mIHRoZSBIVFRQUyBzZXJ2ZXIKKyVQUk9YWVBPUlQgLSBQb3J0IG51bWJlciBvZiB0aGUgSFRUUCBwcm94eQorJUZUUFBPUlQgICAtIFBvcnQgbnVtYmVyIG9mIHRoZSBGVFAgc2VydmVyCislRlRQNlBPUlQgIC0gSVB2NiBwb3J0IG51bWJlciBvZiB0aGUgRlRQIHNlcnZlcgorJUZUUFNQT1JUICAtIFBvcnQgbnVtYmVyIG9mIHRoZSBGVFBTIHNlcnZlcgorJUZUUDJQT1JUICAtIFBvcnQgbnVtYmVyIG9mIHRoZSBGVFAgc2VydmVyIDIKKyVGVFBUSU1FMiAgLSBUaW1lb3V0IGluIHNlY29uZHMgdGhhdCBzaG91bGQgYmUganVzdCBzdWZmaWNpZW50IHRvIHJlY2VpdmUKKyAgICAgICAgICAgICBhIHJlc3BvbnNlIGZyb20gdGhlIHRlc3QgRlRQIHNlcnZlcgorJVRGVFBQT1JUICAtIFBvcnQgbnVtYmVyIG9mIHRoZSBURlRQIHNlcnZlcgorJVRGVFA2UE9SVCAtIElQdjYgcG9ydCBudW1iZXIgb2YgdGhlIFRGVFAgc2VydmVyCislU1NIUE9SVCAgIC0gUG9ydCBudW1iZXIgb2YgdGhlIFNDUC9TRlRQIHNlcnZlcgorJVNPQ0tTUE9SVCAtIFBvcnQgbnVtYmVyIG9mIHRoZSBTT0NLUzQvNSBzZXJ2ZXIKKyVSVFNQUE9SVCAgLSBQb3J0IG51bWJlciBvZiB0aGUgUlRTUCBzZXJ2ZXIKKyVSVFNQNlBPUlQgLSBJUHY2IHBvcnQgbnVtYmVyIG9mIHRoZSBSVFNQIHNlcnZlcgorJVNSQ0RJUiAgICAtIEZ1bGwgcGF0aCB0byB0aGUgc291cmNlIGRpcgorJVBXRCAgICAgICAtIEN1cnJlbnQgZGlyZWN0b3J5CislQ1VSTCAgICAgIC0gUGF0aCB0byB0aGUgY3VybCBleGVjdXRhYmxlCislVVNFUiAgICAgIC0gTG9naW4gSUQgb2YgdGhlIHVzZXIgcnVubmluZyB0aGUgdGVzdAorPC9jb21tYW5kPgorCis8ZmlsZSBuYW1lPSJsb2cvZmlsZW5hbWUiPgorVGhpcyBjcmVhdGVzIHRoZSBuYW1lZCBmaWxlIHdpdGggdGhpcyBjb250ZW50IGJlZm9yZSB0aGUgdGVzdCBjYXNlIGlzIHJ1biwKK3doaWNoIGlzIHVzZWZ1bCBpZiB0aGUgdGVzdCBjYXNlIG5lZWRzIGEgZmlsZSB0byBhY3Qgb24uCitWYXJpYWJsZXMgYXJlIHN1YnN0aXR1dGVkIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcyBpbiB0aGUgPGNvbW1hbmQ+CitzZWN0aW9uLgorPC9maWxlPgorCis8c3RkaW4+CitQYXNzIHRoaXMgZ2l2ZW4gZGF0YSBvbiBzdGRpbiB0byB0aGUgdG9vbC4KKzwvc3RkaW4+CisKKzwvY2xpZW50PgorCis8dmVyaWZ5PgorPGVycm9yY29kZT4KK251bWVyaWNhbCBlcnJvciBjb2RlIGN1cmwgaXMgc3VwcG9zZWQgdG8gcmV0dXJuLiBTcGVjaWZ5IGEgbGlzdCBvZiBhY2NlcHRlZAorZXJyb3IgY29kZXMgYnkgc2VwYXJhdGluZyBtdWx0aXBsZSBudW1iZXJzIHdpdGggY29tbWEuIFNlZSB0ZXN0IDIzNyBmb3IgYW4KK2V4YW1wbGUuCis8L2Vycm9yY29kZT4KKzxzdHJpcD4KK09uZSByZWdleCBwZXIgbGluZSB0aGF0IGlzIHJlbW92ZWQgZnJvbSB0aGUgcHJvdG9jb2wgZHVtcHMgYmVmb3JlIHRoZQorY29tcGFyaXNvbiBpcyBtYWRlLiBUaGlzIGlzIHZlcnkgdXNlZnVsIHRvIHJlbW92ZSBkZXBlbmRlbmNpZXMgb24gZHluYW1pY2FsbHkKK2NoYW5naW5nIHByb3RvY29sIGRhdGEgc3VjaCBhcyBwb3J0IG51bWJlcnMgb3IgdXNlci1hZ2VudCBzdHJpbmdzLgorPC9zdHJpcD4KKzxzdHJpcHBhcnQ+CitPbmUgcGVybCBvcCBwZXIgbGluZSB0aGF0IG9wZXJhdGVzIG9uIHRoZSBwcm90b2NvbCBkdW1wLiBUaGlzIGlzIHByZXR0eQorYWR2YW5jZWQuIEV4YW1wbGU6ICJzL15FUFJUIC4qL0VQUlQgc3RyaXBwZWQvIgorPC9zdHJpcHBhcnQ+CisKKzxwcm90b2NvbCBbbm9uZXdsaW5lPSJ5ZXMiXT4KKwordGhlIHByb3RvY29sIGR1bXAgY3VybCBzaG91bGQgdHJhbnNtaXQsIGlmICdub25ld2xpbmUnIGlzIHNldCwgd2Ugd2lsbCBjdXQgb2ZmCit0aGUgdHJhaWxpbmcgbmV3bGluZSBvZiB0aGlzIGdpdmVuIGRhdGEgYmVmb3JlIGNvbXBhcmluZyB3aXRoIHRoZSBvbmUgYWN0dWFsbHkKK3NlbnQgYnkgdGhlIGNsaWVudCBWYXJpYWJsZXMgYXJlIHN1YnN0aXR1dGVkIGFzIGluIHRoZSA8Y29tbWFuZD4gc2VjdGlvbi4gIFRoZQorPHN0cmlwPiBhbmQgPHN0cmlwcGFydD4gcnVsZXMgYXJlIGFwcGxpZWQgYmVmb3JlIGNvbXBhcmlzb25zIGFyZSBtYWRlLgorCis8L3Byb3RvY29sPgorCis8cHJveHkgW25vbmV3bGluZT0ieWVzIl0+CisKK1RoZSBwcm90b2NvbCBkdW1wIGN1cmwgc2hvdWxkIHRyYW5zbWl0IHRvIGEgSFRUUCBwcm94eSAod2hlbiB0aGUgaHR0cC1wcm94eQorc2VydmVyIGlzIHVzZWQpLCBpZiAnbm9uZXdsaW5lJyBpcyBzZXQsIHdlIHdpbGwgY3V0IG9mZiB0aGUgdHJhaWxpbmcgbmV3bGluZQorb2YgdGhpcyBnaXZlbiBkYXRhIGJlZm9yZSBjb21wYXJpbmcgd2l0aCB0aGUgb25lIGFjdHVhbGx5IHNlbnQgYnkgdGhlIGNsaWVudAorVmFyaWFibGVzIGFyZSBzdWJzdGl0dXRlZCBhcyBpbiB0aGUgPGNvbW1hbmQ+IHNlY3Rpb24uIFRoZSA8c3RyaXA+IGFuZAorPHN0cmlwcGFydD4gcnVsZXMgYXJlIGFwcGxpZWQgYmVmb3JlIGNvbXBhcmlzb25zIGFyZSBtYWRlLgorCis8L3Byb3h5PgorCis8c3Rkb3V0IFttb2RlPSJ0ZXh0Il0gW25vbmV3bGluZT0ieWVzIl0+CitUaGlzIHZlcmlmaWVzIHRoYXQgdGhpcyBkYXRhIHdhcyBwYXNzZWQgdG8gc3Rkb3V0LiAgVmFyaWFibGVzIGFyZQorc3Vic3RpdHV0ZWQgYXMgaW4gdGhlIDxjb21tYW5kPiBzZWN0aW9uLgorCitVc2UgdGhlIG1vZGU9InRleHQiIGF0dHJpYnV0ZSBpZiB0aGUgb3V0cHV0IGlzIGluIHRleHQgbW9kZSBvbiBwbGF0Zm9ybXMgdGhhdAoraGF2ZSBhIHRleHQvYmluYXJ5IGRpZmZlcmVuY2UuCisKK0lmICdub25ld2xpbmUnIGlzIHNldCwgd2Ugd2lsbCBjdXQgb2ZmIHRoZSB0cmFpbGluZyBuZXdsaW5lIG9mIHRoaXMgZ2l2ZW4gZGF0YQorYmVmb3JlIGNvbXBhcmluZyB3aXRoIHRoZSBvbmUgYWN0dWFsbHkgcmVjZWl2ZWQgYnkgdGhlIGNsaWVudAorPC9zdGRvdXQ+Cis8ZmlsZSBuYW1lPSJsb2cvZmlsZW5hbWUiIFttb2RlPSJ0ZXh0Il0+CitUaGUgZmlsZSdzIGNvbnRlbnRzIG11c3QgYmUgaWRlbnRpY2FsIHRvIHRoaXMgYWZ0ZXIgdGhlIHRlc3QgaXMgY29tcGxldGUuCitVc2UgdGhlIG1vZGU9InRleHQiIGF0dHJpYnV0ZSBpZiB0aGUgb3V0cHV0IGlzIGluIHRleHQgbW9kZSBvbiBwbGF0Zm9ybXMgdGhhdAoraGF2ZSBhIHRleHQvYmluYXJ5IGRpZmZlcmVuY2UuCitWYXJpYWJsZXMgYXJlIHN1YnN0aXR1dGVkIGFzIGluIHRoZSA8Y29tbWFuZD4gc2VjdGlvbi4KKzwvZmlsZT4KKzxzdHJpcGZpbGU+CitPbmUgcGVybCBvcCBwZXIgbGluZSB0aGF0IG9wZXJhdGVzIG9uIHRoZSBmaWxlIGJlZm9yZSBiZWluZyBjb21wYXJlZC4gVGhpcyBpcworcHJldHR5IGFkdmFuY2VkLiBFeGFtcGxlOiAicy9eRVBSVCAuKi9FUFJUIHN0cmlwcGVkLyIKKzwvc3RyaXBmaWxlPgorPHVwbG9hZD4KK3RoZSBjb250ZW50cyBvZiB0aGUgdXBsb2FkIGRhdGEgY3VybCBzaG91bGQgaGF2ZSBzZW50Cis8L3VwbG9hZD4KKzx2YWxncmluZD4KK2Rpc2FibGUgLSBkaXNhYmxlcyB0aGUgdmFsZ3JpbmQgbG9nIGNoZWNrIGZvciB0aGlzIHRlc3QKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKworPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL01ha2VmaWxlLmFtIGIvY3VybC03LjI1LjAvdGVzdHMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkZDc5OQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsODMgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitIVE1MUEFHRVMgPSB0ZXN0Y3VybC5odG1sIHJ1bnRlc3RzLmh0bWwKK1BERlBBR0VTID0gdGVzdGN1cmwucGRmIHJ1bnRlc3RzLnBkZgorCitFWFRSQV9ESVNUID0gZnRwc2VydmVyLnBsIGh0dHBzZXJ2ZXIucGwgc2VjdXJlc2VydmVyLnBsIHJ1bnRlc3RzLnBsIGdldHBhcnQucG0gXAorIEZJTEVGT1JNQVQgUkVBRE1FIHN0dW5uZWwucGVtIG1lbWFuYWx5emUucGwgdGVzdGN1cmwucGwgdmFsZ3JpbmQucG0gZnRwLnBtICAgXAorIHNzaHNlcnZlci5wbCBzc2hoZWxwLnBtIHRlc3RjdXJsLjEgcnVudGVzdHMuMSAkKEhUTUxQQUdFUykgJChQREZQQUdFUykgXAorIENNYWtlTGlzdHMudHh0IGNlcnRzL3NjcmlwdHMvKi5zaCBjZXJ0cy9TZXJ2ZXIqIGNlcnRzL0VkZWxDdXJsUm9vdCogXAorIHNlcnZlcmhlbHAucG0gdGZ0cHNlcnZlci5wbCBydHNwc2VydmVyLnBsIGRpcmVjdG9yaWVzLnBtIHN5bWJvbC1zY2FuLnBsIFwKKyBjZXJ0cy9zcnAtdmVyaWZpZXItY29uZiBjZXJ0cy9zcnAtdmVyaWZpZXItZGIKKworaWYgQlVJTERfVU5JVFRFU1RTCitCVUlMRF9VTklUID0gdW5pdAorZWxzZQorQlVJTERfVU5JVCA9CitlbmRpZgorCitTVUJESVJTID0gZGF0YSBzZXJ2ZXIgbGlidGVzdCAkKEJVSUxEX1VOSVQpCitESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpIHVuaXQKKworUEVSTEZMQUdTID0gLUkkKHNyY2RpcikKKworQ0xFQU5GSUxFUyA9IC5odHRwLnBpZCAuaHR0cHMucGlkIC5mdHAucGlkIC5mdHBzLnBpZAorCitNQU4ySFRNTD0gcm9mZml0IDwgJDwgPiRACisKK2N1cmw6CisJQGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpCisKK2lmIENST1NTQ09NUElMSU5HCitURVNUID0gQGVjaG8gIk5PVElDRTogd2UgY2FuJ3QgcnVuIHRoZSB0ZXN0cyB3aGVuIGNyb3NzLWNvbXBpbGluZyEiCitURVNUX1EgPQorVEVTVF9GID0KK1RFU1RfVCA9CitlbHNlICMgaWYgbm90IGNyb3NzLWNvbXBpbGluZzoKK1RFU1QgPSBzcmNkaXI9JChzcmNkaXIpICQoUEVSTCkgJChQRVJMRkxBR1MpICQoc3JjZGlyKS9ydW50ZXN0cy5wbAorVEVTVF9RID0gLWEgLXMKK1RFU1RfRiA9IC1hIC1wIC1yCitURVNUX1QgPSAtYSAtdAorZW5kaWYKKwordGVzdDogYWxsCisJJChURVNUKQorCitxdWlldC10ZXN0OiBhbGwKKwkkKFRFU1QpICQoVEVTVF9RKQorCitmdWxsLXRlc3Q6IGFsbAorCSQoVEVTVCkgJChURVNUX0YpCisKK3RvcnR1cmUtdGVzdDogYWxsCisJJChURVNUKSAkKFRFU1RfVCkKKworLjEuaHRtbDoKKwkkKE1BTjJIVE1MKQorCisuMS5wZGY6CisJQChmb289YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5bMC05XSQkLy9nJ2A7IFwKKwlncm9mZiAtVHBzIC1tYW4gJDwgPiQkZm9vLnBzOyBcCisJcHMycGRmICQkZm9vLnBzICRAOyBcCisJcm0gJCRmb28ucHM7IFwKKwllY2hvICJjb252ZXJ0ZWQgJDwgdG8gJEAiKQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvTWFrZWZpbGUuaW4gYi9jdXJsLTcuMjUuMC90ZXN0cy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjg5YmMzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2NDkgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3RvcF9idWlsZGRpciA9IC4uCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSB0ZXN0cworRElTVF9DT01NT04gPSBSRUFETUUgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvY3VybC1jb21waWxlcnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1jb25mb3B0cy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWZ1bmN0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW9wZW5zc2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vdmVycmlkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXJlZW50cmFudC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXN5c3RlbS5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94Yy10cmFuc2xpdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC96ejUwLXhjLW92ci5tNCAkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL3NyYy9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKwlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIFwKKwlwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbC1yZWN1cnNpdmUKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQlVJTERfTElCSE9TVE5BTUVfRkFMU0UgPSBAQlVJTERfTElCSE9TVE5BTUVfRkFMU0VACitCVUlMRF9MSUJIT1NUTkFNRV9UUlVFID0gQEJVSUxEX0xJQkhPU1ROQU1FX1RSVUVACitCVUlMRF9VTklUVEVTVFNfRkFMU0UgPSBAQlVJTERfVU5JVFRFU1RTX0ZBTFNFQAorQlVJTERfVU5JVFRFU1RTX1RSVUUgPSBAQlVJTERfVU5JVFRFU1RTX1RSVUVACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ09ORklHVVJFX09QVElPTlMgPSBAQ09ORklHVVJFX09QVElPTlNACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDUk9TU0NPTVBJTElOR19GQUxTRSA9IEBDUk9TU0NPTVBJTElOR19GQUxTRUAKK0NST1NTQ09NUElMSU5HX1RSVUUgPSBAQ1JPU1NDT01QSUxJTkdfVFJVRUAKK0NVUkxERUJVR19GQUxTRSA9IEBDVVJMREVCVUdfRkFMU0VACitDVVJMREVCVUdfVFJVRSA9IEBDVVJMREVCVUdfVFJVRUAKK0NVUkxWRVJTSU9OID0gQENVUkxWRVJTSU9OQAorQ1VSTF9DQV9CVU5ETEUgPSBAQ1VSTF9DQV9CVU5ETEVACitDVVJMX0NGTEFHX0VYVFJBUyA9IEBDVVJMX0NGTEFHX0VYVFJBU0AKK0NVUkxfRElTQUJMRV9ESUNUID0gQENVUkxfRElTQUJMRV9ESUNUQAorQ1VSTF9ESVNBQkxFX0ZJTEUgPSBAQ1VSTF9ESVNBQkxFX0ZJTEVACitDVVJMX0RJU0FCTEVfRlRQID0gQENVUkxfRElTQUJMRV9GVFBACitDVVJMX0RJU0FCTEVfR09QSEVSID0gQENVUkxfRElTQUJMRV9HT1BIRVJACitDVVJMX0RJU0FCTEVfSFRUUCA9IEBDVVJMX0RJU0FCTEVfSFRUUEAKK0NVUkxfRElTQUJMRV9JTUFQID0gQENVUkxfRElTQUJMRV9JTUFQQAorQ1VSTF9ESVNBQkxFX0xEQVAgPSBAQ1VSTF9ESVNBQkxFX0xEQVBACitDVVJMX0RJU0FCTEVfTERBUFMgPSBAQ1VSTF9ESVNBQkxFX0xEQVBTQAorQ1VSTF9ESVNBQkxFX1BPUDMgPSBAQ1VSTF9ESVNBQkxFX1BPUDNACitDVVJMX0RJU0FCTEVfUFJPWFkgPSBAQ1VSTF9ESVNBQkxFX1BST1hZQAorQ1VSTF9ESVNBQkxFX1JUU1AgPSBAQ1VSTF9ESVNBQkxFX1JUU1BACitDVVJMX0RJU0FCTEVfU01UUCA9IEBDVVJMX0RJU0FCTEVfU01UUEAKK0NVUkxfRElTQUJMRV9URUxORVQgPSBAQ1VSTF9ESVNBQkxFX1RFTE5FVEAKK0NVUkxfRElTQUJMRV9URlRQID0gQENVUkxfRElTQUJMRV9URlRQQAorQ1VSTF9MSUJTID0gQENVUkxfTElCU0AKK0NVUkxfTkVUV09SS19MSUJTID0gQENVUkxfTkVUV09SS19MSUJTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NIQVJFRCA9IEBFTkFCTEVfU0hBUkVEQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSEFWRV9HTlVUTFNfU1JQID0gQEhBVkVfR05VVExTX1NSUEAKK0hBVkVfTERBUF9TU0wgPSBASEFWRV9MREFQX1NTTEAKK0hBVkVfTElCWiA9IEBIQVZFX0xJQlpACitIQVZFX0xJQlpfRkFMU0UgPSBASEFWRV9MSUJaX0ZBTFNFQAorSEFWRV9MSUJaX1RSVUUgPSBASEFWRV9MSUJaX1RSVUVACitIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVCA9IEBIQVZFX1BLMTFfQ1JFQVRFR0VORVJJQ09CSkVDVEAKK0hBVkVfU1NMRUFZX1NSUCA9IEBIQVZFX1NTTEVBWV9TUlBACitJRE5fRU5BQkxFRCA9IEBJRE5fRU5BQkxFREAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSVBWNl9FTkFCTEVEID0gQElQVjZfRU5BQkxFREAKK0tSQjRfRU5BQkxFRCA9IEBLUkI0X0VOQUJMRURACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkNVUkxfTElCUyA9IEBMSUJDVVJMX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUlOVEFJTkVSX01PREVfRkFMU0UgPSBATUFJTlRBSU5FUl9NT0RFX0ZBTFNFQAorTUFJTlRBSU5FUl9NT0RFX1RSVUUgPSBATUFJTlRBSU5FUl9NT0RFX1RSVUVACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01BTk9QVCA9IEBNQU5PUFRACitNSU1QVVJFX0ZBTFNFID0gQE1JTVBVUkVfRkFMU0VACitNSU1QVVJFX1RSVUUgPSBATUlNUFVSRV9UUlVFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorTk9fVU5ERUZJTkVEX0ZBTFNFID0gQE5PX1VOREVGSU5FRF9GQUxTRUAKK05PX1VOREVGSU5FRF9UUlVFID0gQE5PX1VOREVGSU5FRF9UUlVFQAorTlJPRkYgPSBATlJPRkZACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIID0gQFBBVEhACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkwgPSBAUEVSTEAKK1BLR0FERF9OQU1FID0gQFBLR0FERF9OQU1FQAorUEtHQUREX1BLRyA9IEBQS0dBRERfUEtHQAorUEtHQUREX1ZFTkRPUiA9IEBQS0dBRERfVkVORE9SQAorUEtHQ09ORklHID0gQFBLR0NPTkZJR0AKK1JBTkRPTV9GSUxFID0gQFJBTkRPTV9GSUxFQAorUkFOTElCID0gQFJBTkxJQkAKK1JFUVVJUkVfTElCX0RFUFMgPSBAUkVRVUlSRV9MSUJfREVQU0AKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU09OQU1FX0JVTVBfRkFMU0UgPSBAU09OQU1FX0JVTVBfRkFMU0VACitTT05BTUVfQlVNUF9UUlVFID0gQFNPTkFNRV9CVU1QX1RSVUVACitTU0xfRU5BQkxFRCA9IEBTU0xfRU5BQkxFREAKK1NUQVRJQ0xJQl9GQUxTRSA9IEBTVEFUSUNMSUJfRkFMU0VACitTVEFUSUNMSUJfVFJVRSA9IEBTVEFUSUNMSUJfVFJVRUAKK1NUUklQID0gQFNUUklQQAorU1VQUE9SVF9GRUFUVVJFUyA9IEBTVVBQT1JUX0ZFQVRVUkVTQAorU1VQUE9SVF9QUk9UT0NPTFMgPSBAU1VQUE9SVF9QUk9UT0NPTFNACitURVNUX1NFUlZFUl9MSUJTID0gQFRFU1RfU0VSVkVSX0xJQlNACitVU0VfQVJFUyA9IEBVU0VfQVJFU0AKK1VTRV9BWFRMUyA9IEBVU0VfQVhUTFNACitVU0VfQ1lBU1NMID0gQFVTRV9DWUFTU0xACitVU0VfRU1CRURERURfQVJFU19GQUxTRSA9IEBVU0VfRU1CRURERURfQVJFU19GQUxTRUAKK1VTRV9FTUJFRERFRF9BUkVTX1RSVUUgPSBAVVNFX0VNQkVEREVEX0FSRVNfVFJVRUAKK1VTRV9HTlVUTFMgPSBAVVNFX0dOVVRMU0AKK1VTRV9HTlVUTFNfTkVUVExFID0gQFVTRV9HTlVUTFNfTkVUVExFQAorVVNFX0xJQlJUTVAgPSBAVVNFX0xJQlJUTVBACitVU0VfTElCU1NIMiA9IEBVU0VfTElCU1NIMkAKK1VTRV9NQU5VQUxfRkFMU0UgPSBAVVNFX01BTlVBTF9GQUxTRUAKK1VTRV9NQU5VQUxfVFJVRSA9IEBVU0VfTUFOVUFMX1RSVUVACitVU0VfTlNTID0gQFVTRV9OU1NACitVU0VfT1BFTkxEQVAgPSBAVVNFX09QRU5MREFQQAorVVNFX1BPTEFSU1NMID0gQFVTRV9QT0xBUlNTTEAKK1VTRV9TU0xFQVkgPSBAVVNFX1NTTEVBWUAKK1VTRV9XSU5ET1dTX1NTUEkgPSBAVVNFX1dJTkRPV1NfU1NQSUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZFUlNJT05FRF9GTEFWT1VSID0gQFZFUlNJT05FRF9GTEFWT1VSQAorVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0UgPSBAVkVSU0lPTkVEX1NZTUJPTFNfRkFMU0VACitWRVJTSU9ORURfU1lNQk9MU19UUlVFID0gQFZFUlNJT05FRF9TWU1CT0xTX1RSVUVACitWRVJTSU9OTlVNID0gQFZFUlNJT05OVU1ACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAorYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsaWJleHQgPSBAbGliZXh0QAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzdWJkaXJzID0gQHN1YmRpcnNACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAorSFRNTFBBR0VTID0gdGVzdGN1cmwuaHRtbCBydW50ZXN0cy5odG1sCitQREZQQUdFUyA9IHRlc3RjdXJsLnBkZiBydW50ZXN0cy5wZGYKK0VYVFJBX0RJU1QgPSBmdHBzZXJ2ZXIucGwgaHR0cHNlcnZlci5wbCBzZWN1cmVzZXJ2ZXIucGwgcnVudGVzdHMucGwgZ2V0cGFydC5wbSBcCisgRklMRUZPUk1BVCBSRUFETUUgc3R1bm5lbC5wZW0gbWVtYW5hbHl6ZS5wbCB0ZXN0Y3VybC5wbCB2YWxncmluZC5wbSBmdHAucG0gICBcCisgc3Noc2VydmVyLnBsIHNzaGhlbHAucG0gdGVzdGN1cmwuMSBydW50ZXN0cy4xICQoSFRNTFBBR0VTKSAkKFBERlBBR0VTKSBcCisgQ01ha2VMaXN0cy50eHQgY2VydHMvc2NyaXB0cy8qLnNoIGNlcnRzL1NlcnZlciogY2VydHMvRWRlbEN1cmxSb290KiBcCisgc2VydmVyaGVscC5wbSB0ZnRwc2VydmVyLnBsIHJ0c3BzZXJ2ZXIucGwgZGlyZWN0b3JpZXMucG0gc3ltYm9sLXNjYW4ucGwgXAorIGNlcnRzL3NycC12ZXJpZmllci1jb25mIGNlcnRzL3NycC12ZXJpZmllci1kYgorCitAQlVJTERfVU5JVFRFU1RTX0ZBTFNFQEJVSUxEX1VOSVQgPSAKK0BCVUlMRF9VTklUVEVTVFNfVFJVRUBCVUlMRF9VTklUID0gdW5pdAorU1VCRElSUyA9IGRhdGEgc2VydmVyIGxpYnRlc3QgJChCVUlMRF9VTklUKQorRElTVF9TVUJESVJTID0gJChTVUJESVJTKSB1bml0CitQRVJMRkxBR1MgPSAtSSQoc3JjZGlyKQorQ0xFQU5GSUxFUyA9IC5odHRwLnBpZCAuaHR0cHMucGlkIC5mdHAucGlkIC5mdHBzLnBpZAorTUFOMkhUTUwgPSByb2ZmaXQgPCAkPCA+JEAKK0BDUk9TU0NPTVBJTElOR19GQUxTRUBURVNUID0gc3JjZGlyPSQoc3JjZGlyKSAkKFBFUkwpICQoUEVSTEZMQUdTKSAkKHNyY2RpcikvcnVudGVzdHMucGwKK0BDUk9TU0NPTVBJTElOR19UUlVFQFRFU1QgPSBAZWNobyAiTk9USUNFOiB3ZSBjYW4ndCBydW4gdGhlIHRlc3RzIHdoZW4gY3Jvc3MtY29tcGlsaW5nISIKK0BDUk9TU0NPTVBJTElOR19GQUxTRUBURVNUX1EgPSAtYSAtcworQENST1NTQ09NUElMSU5HX1RSVUVAVEVTVF9RID0gCitAQ1JPU1NDT01QSUxJTkdfRkFMU0VAVEVTVF9GID0gLWEgLXAgLXIKK0BDUk9TU0NPTVBJTElOR19UUlVFQFRFU1RfRiA9IAorQENST1NTQ09NUElMSU5HX0ZBTFNFQFRFU1RfVCA9IC1hIC10CitAQ1JPU1NDT01QSUxJTkdfVFJVRUBURVNUX1QgPSAKK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC4xIC5odG1sIC5wZGYKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICB0ZXN0cy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgdGVzdHMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgorCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKK21haW50YWluZXItY2xlYW4tcmVjdXJzaXZlOgorCUBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJJChta2Rpcl9wKSAkKGRpc3RkaXIpL2NlcnRzICQoZGlzdGRpcikvY2VydHMvc2NyaXB0cworCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKG1rZGlyX3ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgICBkaXN0ZGlyPWAkKGFtX19jZCkgJChkaXN0ZGlyKSAmJiBwd2RgOyBcCisJICAgIHRvcF9kaXN0ZGlyPWAkKGFtX19jZCkgJCh0b3BfZGlzdGRpcikgJiYgcHdkYDsgXAorCSAgICAoY2QgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJHRvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJGRpc3RkaXIvJCRzdWJkaXIiIFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KKwordW5pbnN0YWxsLWluZm86IHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gXAorCWNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1yZWN1cnNpdmUgY3RhZ3MgXAorCWN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlIFwKKwltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0KKworCitjdXJsOgorCUBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKQorCit0ZXN0OiBhbGwKKwkkKFRFU1QpCisKK3F1aWV0LXRlc3Q6IGFsbAorCSQoVEVTVCkgJChURVNUX1EpCisKK2Z1bGwtdGVzdDogYWxsCisJJChURVNUKSAkKFRFU1RfRikKKwordG9ydHVyZS10ZXN0OiBhbGwKKwkkKFRFU1QpICQoVEVTVF9UKQorCisuMS5odG1sOgorCSQoTUFOMkhUTUwpCisKKy4xLnBkZjoKKwlAKGZvbz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLlswLTldJCQvL2cnYDsgXAorCWdyb2ZmIC1UcHMgLW1hbiAkPCA+JCRmb28ucHM7IFwKKwlwczJwZGYgJCRmb28ucHMgJEA7IFwKKwlybSAkJGZvby5wczsgXAorCWVjaG8gImNvbnZlcnRlZCAkPCB0byAkQCIpCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9SRUFETUUgYi9jdXJsLTcuMjUuMC90ZXN0cy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5NTVjOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL1JFQURNRQpAQCAtMCwwICsxLDI2NiBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKworVGhlIGNVUkwgVGVzdCBTdWl0ZQorCisgMS4gUnVubmluZworICAxLjEgUmVxdWlyZXMgdG8gcnVuCisgIDEuMiBQb3J0IG51bWJlcnMgdXNlZCBieSB0ZXN0IHNlcnZlcnMKKyAgMS4zIFRlc3Qgc2VydmVycworICAxLjQgUnVuCisgIDEuNSBTaGVsbCBzdGFydHVwIHNjcmlwdHMKKyAgMS42IE1lbW9yeSB0ZXN0CisgIDEuNyBEZWJ1ZworICAxLjggTG9ncworICAxLjkgVGVzdCBpbnB1dCBmaWxlcworICAxLjEwIENvZGUgY292ZXJhZ2UKKyAgMS4xMSBSZW1vdGUgdGVzdGluZworCisgMi4gTnVtYmVyaW5nCisgIDIuMSBUZXN0IGNhc2UgbnVtYmVyaW5nCisKKyAzLiBXcml0ZSB0ZXN0cworICAzLjEgdGVzdCBkYXRhCisgIDMuMiBjdXJsIHRlc3RzCisgIDMuMyBsaWJjdXJsIHRlc3RzCisgIDMuNCB1bml0IHRlc3RzCisKKyA0LiBUT0RPCisgIDQuMSBNb3JlIHByb3RvY29scworICA0LjIgU09DS1MgYXV0aAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gUnVubmluZworCisgMS4xIFJlcXVpcmVzIHRvIHJ1bgorCisgIHBlcmwgKGFuZCBhIHVuaXgtc3R5bGUgc2hlbGwpCisgIGRpZmYgKHdoZW4gYSB0ZXN0IGZhaWxzLCBhIGRpZmYgaXMgc2hvd24pCisgIHN0dW5uZWwgKGZvciBIVFRQUyBhbmQgRlRQUyB0ZXN0cykKKyAgT3BlblNTSCBvciBTdW5TU0ggKGZvciBTQ1AsIFNGVFAgYW5kIFNPQ0tTNC81IHRlc3RzKQorCisgMS4yIFBvcnQgbnVtYmVycyB1c2VkIGJ5IHRlc3Qgc2VydmVycworCisgIC0gVENQLzg5OTAgZm9yIEhUVFAKKyAgLSBUQ1AvODk5MSBmb3IgSFRUUFMKKyAgLSBUQ1AvODk5MiBmb3IgRlRQCisgIC0gVENQLzg5OTMgZm9yIEZUUFMKKyAgLSBUQ1AvODk5NCBmb3IgSFRUUCBJUHY2CisgIC0gVENQLzg5OTUgZm9yIEZUUCAoMikKKyAgLSBUQ1AvODk5NiBmb3IgRlRQIElQdjYKKyAgLSBVRFAvODk5NyBmb3IgVEZUUAorICAtIFVEUC84OTk4IGZvciBURlRQIElQdjYKKyAgLSBUQ1AvODk5OSBmb3IgU0NQL1NGVFAKKyAgLSBUQ1AvOTAwMCBmb3IgU09DS1MKKyAgLSBUQ1AvOTAwMSBmb3IgUE9QMworICAtIFRDUC85MDAyIGZvciBJTUFQCisgIC0gVENQLzkwMDMgZm9yIFNNVFAKKyAgLSBUQ1AvOTAwNCBmb3IgU01UUCBJUHY2CisgIC0gVENQLzkwMDUgZm9yIFJUU1AKKyAgLSBUQ1AvOTAwNiBmb3IgUlRTUCBJUHY2CisgIC0gVENQLzkwMDcgZm9yIEdPUEhFUgorICAtIFRDUC85MDA4IGZvciBHT1BIRVIgSVB2NgorICAtIFRDUC85MDA4IGZvciBIVFRQUyBzZXJ2ZXIgd2l0aCBUTFMtU1JQIHN1cHBvcnQKKworIDEuMyBUZXN0IHNlcnZlcnMKKworICBUaGUgdGVzdCBzdWl0ZSBydW5zIHNpbXBsZSBGVFAsIFBPUDMsIElNQVAsIFNNVFAsIEhUVFAgYW5kIFRGVFAgc3RhbmQtYWxvbmUKKyAgc2VydmVycyBvbiB0aGUgcG9ydHMgbGlzdGVkIGFib3ZlIHRvIHdoaWNoIGl0IG1ha2VzIHJlcXVlc3RzLiBGb3IgU1NMIHRlc3RzLAorICBpdCBydW5zIHN0dW5uZWwgdG8gaGFuZGxlIGVuY3J5cHRpb24gdG8gdGhlIHJlZ3VsYXIgc2VydmVycy4gRm9yIFNTSCwgaXQKKyAgcnVucyBhIHN0YW5kYXJkIE9wZW5TU0ggc2VydmVyLiBGb3IgU09DS1M0LzUgdGVzdHMgU1NIIGlzIHVzZWQgdG8gcGVyZm9ybQorICB0aGUgU09DS1MgZnVuY3Rpb25hbGl0eSBhbmQgcmVxdWlyZXMgYSBTU0ggY2xpZW50IGFuZCBzZXJ2ZXIuCisKKyAgVGhlIGJhc2UgcG9ydCBudW1iZXIgKDg5OTApLCB3aGljaCBhbGwgdGhlIGluZGl2aWR1YWwgcG9ydCBudW1iZXJzIGFyZQorICBpbmRleGVkIGZyb20sIGNhbiBiZSBzZXQgZXhwbGljaXRseSB1c2luZyBydW50ZXN0cy5wbCcgLWIgb3B0aW9uIHRvIGFsbG93CisgIHJ1bm5pbmcgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBvZiB0aGUgdGVzdCBzdWl0ZSBzaW11bHRhbmVvdXNseSBvbiBvbmUKKyAgbWFjaGluZSwgb3IganVzdCBtb3ZlIHRoZSBzZXJ2ZXJzIGluIGNhc2UgeW91IGhhdmUgbG9jYWwgc2VydmljZXMgb24gYW55IG9mCisgIHRob3NlIHBvcnRzLgorCisgMS40IFJ1bgorCisgICdtYWtlIHRlc3QnLiBUaGlzIGJ1aWxkcyB0aGUgdGVzdCBzdWl0ZSBzdXBwb3J0IGNvZGUgYW5kIGludm9rZXMgdGhlCisgICdydW50ZXN0cy5wbCcgcGVybCBzY3JpcHQgdG8gcnVuIGFsbCB0aGUgdGVzdHMuIEVkaXQgdGhlIHRvcCB2YXJpYWJsZXMKKyAgb2YgdGhhdCBzY3JpcHQgaW4gY2FzZSB5b3UgaGF2ZSBzb21lIHNwZWNpZmljIG5lZWRzLCBvciBydW4gdGhlIHNjcmlwdAorICBtYW51YWxseSAoYWZ0ZXIgdGhlIHN1cHBvcnQgY29kZSBoYXMgYmVlbiBidWlsdCkuCisKKyAgVGhlIHNjcmlwdCBicmVha3Mgb24gdGhlIGZpcnN0IHRlc3QgdGhhdCBkb2Vzbid0IGRvIE9LLiBVc2UgLWEgdG8gcHJldmVudAorICB0aGUgc2NyaXB0IGZyb20gYWJvcnRpbmcgb24gdGhlIGZpcnN0IGVycm9yLiBSdW4gdGhlIHNjcmlwdCB3aXRoIC12IGZvciBtb3JlCisgIHZlcmJvc2Ugb3V0cHV0LiBVc2UgLWQgdG8gcnVuIHRoZSB0ZXN0IHNlcnZlcnMgd2l0aCBkZWJ1ZyBvdXRwdXQgZW5hYmxlZCBhcworICB3ZWxsLiBTcGVjaWZ5aW5nIC1rIGtlZXBzIGFsbCB0aGUgbG9nIGZpbGVzIGdlbmVyYXRlZCBieSB0aGUgdGVzdCBpbnRhY3QuCisKKyAgVXNlIC1zIGZvciBzaG9ydGVyIG91dHB1dCwgb3IgcGFzcyB0ZXN0IG51bWJlcnMgdG8gcnVuIHNwZWNpZmljIHRlc3RzIG9ubHkKKyAgKGxpa2UgIi4vcnVudGVzdHMucGwgMyA0IiB0byB0ZXN0IDMgYW5kIDQgb25seSkuIEl0IGFsc28gc3VwcG9ydHMgdGVzdCBjYXNlCisgIHJhbmdlcyB3aXRoICd0bycsIGFzIGluICIuL3J1bnRlc3RzIDMgdG8gOSIgd2hpY2ggcnVucyB0aGUgc2V2ZW4gdGVzdHMgZnJvbQorICAzIHRvIDkuIEFueSB0ZXN0IG51bWJlcnMgc3RhcnRpbmcgd2l0aCAhIGFyZSBkaXNhYmxlZCwgYXMgYXJlIGFueSB0ZXN0CisgIG51bWJlcnMgZm91bmQgaW4gdGhlIGZpbGUgZGF0YS9ESVNBQkxFRCAob25lIHBlciBsaW5lKS4KKworICBXaGVuIC1zIGlzIG5vdCBwcmVzZW50LCBlYWNoIHN1Y2Nlc3NmdWwgdGVzdCB3aWxsIGRpc3BsYXkgb24gb25lIGxpbmUgdGhlCisgIHRlc3QgbnVtYmVyIGFuZCBkZXNjcmlwdGlvbiBhbmQgb24gdGhlIG5leHQgbGluZSBhIHNldCBvZiBmbGFncywgdGhlIHRlc3QKKyAgcmVzdWx0LCBjdXJyZW50IHRlc3Qgc2VxdWVuY2UsIHRvdGFsIG51bWJlciBvZiB0ZXN0cyB0byBiZSBydW4gYW5kIGFuCisgIGVzdGltYXRlZCBhbW91bnQgb2YgdGltZSB0byBjb21wbGV0ZSB0aGUgdGVzdCBydW4uIFRoZSBmbGFncyBjb25zaXN0IG9mCisgIHRoZXNlIGxldHRlcnMgZGVzY3JpYmluZyB3aGF0IGlzIGNoZWNrZWQgaW4gdGhpcyB0ZXN0OgorCisgICAgcyBzdGRvdXQKKyAgICBkIGRhdGEKKyAgICB1IHVwbG9hZAorICAgIHAgcHJvdG9jb2wKKyAgICBvIG91dHB1dAorICAgIGUgZXhpdCBjb2RlCisgICAgbSBtZW1vcnkKKyAgICB2IHZhbGdyaW5kCisKKyAxLjUgU2hlbGwgc3RhcnR1cCBzY3JpcHRzCisKKyAgVGVzdHMgd2hpY2ggdXNlIHRoZSBzc2ggdGVzdCBzZXJ2ZXIsIFNDUC9TRlRQL1NPQ0tTIHRlc3RzLCBtaWdodCBiZSBiYWRseQorICBpbmZsdWVuY2VkIGJ5IHRoZSBvdXRwdXQgb2Ygc3lzdGVtIHdpZGUgb3IgdXNlciBzcGVjaWZpYyBzaGVsbCBzdGFydHVwCisgIHNjcmlwdHMsIC5iYXNocmMsIC5wcm9maWxlLCAvZXRjL2NzaC5jc2hyYywgLmxvZ2luLCAvZXRjL2Jhc2hyYywgZXRjLiB3aGljaAorICBvdXRwdXQgdGV4dCBtZXNzYWdlcyBvciBlc2NhcGUgc2VxdWVuY2VzIG9uIHVzZXIgbG9naW4uICBXaGVuIHRoZXNlIHNoZWxsCisgIHN0YXJ0dXAgbWVzc2FnZXMgb3IgZXNjYXBlIHNlcXVlbmNlcyBhcmUgb3V0cHV0IHRoZXkgbWlnaHQgY29ycnVwdCB0aGUKKyAgZXhwZWN0ZWQgc3RyZWFtIG9mIGRhdGEgd2hpY2ggZmxvd3MgdG8gdGhlIHNmdHAtc2VydmVyIG9yIGZyb20gdGhlIHNzaAorICBjbGllbnQgd2hpY2ggY2FuIHJlc3VsdCBpbiBiYWQgdGVzdCBiZWhhdmlvdXIgb3IgZXZlbiBwcmV2ZW50IHRoZSB0ZXN0CisgIHNlcnZlciBmcm9tIHJ1bm5pbmcuCisKKyAgSWYgdGhlIHRlc3Qgc3VpdGUgc3NoIG9yIHNmdHAgc2VydmVyIGZhaWxzIHRvIHN0YXJ0IHVwIGFuZCBsb2dzIHRoZSBtZXNzYWdlCisgICdSZWNlaXZlZCBtZXNzYWdlIHRvbyBsb25nJyB0aGVuIHlvdSBhcmUgY2VydGFpbmx5IHN1ZmZlcmluZyB0aGUgdW53YW50ZWQKKyAgb3V0cHV0IG9mIGEgc2hlbGwgc3RhcnR1cCBzY3JpcHQuICBMb2NhdGUsIGNsZWFudXAgb3IgYWRqdXN0IHRoZSBzaGVsbAorICBzY3JpcHQuCisKKyAxLjYgTWVtb3J5IHRlc3QKKworICBUaGUgdGVzdCBzY3JpcHQgd2lsbCBjaGVjayB0aGF0IGFsbCBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkIHByb3Blcmx5IElGCisgIGN1cmwgaGFzIGJlZW4gYnVpbHQgd2l0aCB0aGUgQ1VSTERFQlVHIGRlZmluZSBzZXQuIFRoZSBzY3JpcHQgd2lsbAorICBhdXRvbWF0aWNhbGx5IGRldGVjdCBpZiB0aGF0IGlzIHRoZSBjYXNlLCBhbmQgaXQgd2lsbCB1c2UgdGhlCisgICdtZW1hbmFseXplLnBsJyBzY3JpcHQgdG8gYW5hbHl6ZSB0aGUgbWVtb3J5IGRlYnVnZ2luZyBvdXRwdXQuCisKKyAgQWxzbywgaWYgeW91IHJ1biB0ZXN0cyBvbiBhIG1hY2hpbmUgd2hlcmUgdmFsZ3JpbmQgaXMgZm91bmQsIHRoZSBzY3JpcHQgd2lsbAorICB1c2UgdmFsZ3JpbmQgdG8gcnVuIHRoZSB0ZXN0IHdpdGggKHVubGVzcyB5b3UgdXNlIC1uKSB0byBmdXJ0aGVyIHZlcmlmeQorICBjb3JyZWN0bmVzcy4KKworICBydW50ZXN0cy5wbCdzIC10IG9wdGlvbiB3aWxsIGVuYWJsZSB0b3J0dXJlIHRlc3RpbmcgbW9kZSwgd2hpY2ggcnVucyBlYWNoCisgIHRlc3QgbWFueSB0aW1lcyBhbmQgbWFrZXMgZWFjaCBkaWZmZXJlbnQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbCBvbiBlYWNoCisgIHN1Y2Nlc3NpdmUgcnVuLiAgVGhpcyB0ZXN0cyB0aGUgb3V0IG9mIG1lbW9yeSBlcnJvciBoYW5kbGluZyBjb2RlIHRvIGVuc3VyZQorICB0aGF0IG1lbW9yeSBsZWFrcyBkbyBub3Qgb2NjdXIgZXZlbiBpbiB0aG9zZSBzaXR1YXRpb25zLgorCisgMS43IERlYnVnCisKKyAgSWYgYSB0ZXN0IGNhc2UgZmFpbHMsIHlvdSBjYW4gY29udmVuaWVudGx5IGdldCB0aGUgc2NyaXB0IHRvIGludm9rZSB0aGUKKyAgZGVidWdnZXIgKGdkYikgZm9yIHlvdSB3aXRoIHRoZSBzZXJ2ZXIgcnVubmluZyBhbmQgdGhlIGV4YWN0IHNhbWUgY29tbWFuZAorICBsaW5lIHBhcmFtZXRlcnMgdGhhdCBmYWlsZWQuIEp1c3QgaW52b2tlICdydW50ZXN0cy5wbCA8dGVzdCBudW1iZXI+IC1nJyBhbmQKKyAgdGhlbiBqdXN0IHR5cGUgJ3J1bicgaW4gdGhlIGRlYnVnZ2VyIHRvIHBlcmZvcm0gdGhlIGNvbW1hbmQgdGhyb3VnaCB0aGUKKyAgZGVidWdnZXIuCisKKyAxLjggTG9ncworCisgIEFsbCBsb2dzIGFyZSBnZW5lcmF0ZWQgaW4gdGhlIGxvZ3MvIHN1YmRpcmVjdG9yeSAoaXQgaXMgZW1wdGllZCBmaXJzdCBpbiB0aGUKKyAgcnVudGVzdHMucGwgc2NyaXB0KS4gVXNlIHJ1bnRlc3RzLnBsIC1rIHRvIGZvcmNlIGl0IHRvIGtlZXAgdGhlIHRlbXBvcmFyeQorICBmaWxlcyBhZnRlciB0aGUgdGVzdCBydW4gc2luY2Ugc3VjY2Vzc2Z1bCBydW5zIHdpbGwgY2xlYW4gaXQgdXAgb3RoZXJ3aXNlLgorCisgMS45IFRlc3QgaW5wdXQgZmlsZXMKKworICBBbGwgdGVzdCBjYXNlcyBhcmUgcHV0IGluIHRoZSBkYXRhLyBzdWJkaXJlY3RvcnkuIEVhY2ggdGVzdCBpcyBzdG9yZWQgaW4gdGhlCisgIGZpbGUgbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXN0IG51bWJlci4KKworICBTZWUgRklMRUZPUk1BVCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0IGNhc2UgZmlsZXMuCisKKyAxLjEwIENvZGUgY292ZXJhZ2UKKworICBnY2MgcHJvdmlkZXMgYSB0b29sIHRoYXQgY2FuIGRldGVybWluZSB0aGUgY29kZSBjb3ZlcmFnZSBmaWd1cmVzIGZvcgorICB0aGUgdGVzdCBzdWl0ZS4gIFRvIHVzZSBpdCwgY29uZmlndXJlIGN1cmwgd2l0aAorICBDRkxBR1M9Jy1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSAtZyAtTzAnLiAgTWFrZSBzdXJlIHlvdSBydW4gdGhlIG5vcm1hbAorICBhbmQgdG9ydHVyZSB0ZXN0cyB0byBnZXQgbW9yZSBmdWxsIGNvdmVyYWdlLCBpLmUuIGRvOgorCisgICAgbWFrZSB0ZXN0CisgICAgbWFrZSB0ZXN0LXRvcnR1cmUKKworICBUaGUgZ3JhcGhpY2FsIHRvb2wgZ2djb3YgY2FuIGJlIHVzZWQgdG8gYnJvd3NlIHRoZSBzb3VyY2UgYW5kIGNyZWF0ZQorICBjb3ZlcmFnZSByZXBvcnRzIG9uICpOSVggaG9zdHM6CisKKyAgICBnZ2NvdiAtciBsaWIgc3JjCisKKyAgVGhlIHRleHQgbW9kZSB0b29sIGdjb3YgbWF5IGFsc28gYmUgdXNlZCwgYnV0IGl0IGRvZXNuJ3QgaGFuZGxlIG9iamVjdCBmaWxlcworICBpbiBtb3JlIHRoYW4gb25lIGRpcmVjdG9yeSB2ZXJ5IHdlbGwuCisKKyAxLjExIFJlbW90ZSB0ZXN0aW5nCisKKyAgVGhlIHJ1bnRlc3RzLnBsIHNjcmlwdCBwcm92aWRlcyBzb21lIGhvb2tzIHRvIGFsbG93IGN1cmwgdG8gYmUgdGVzdGVkIG9uIGEKKyAgbWFjaGluZSB3aGVyZSBwZXJsIGNhbiBub3QgYmUgcnVuLiAgVGhlIHRlc3QgZnJhbWV3b3JrIGluIHRoaXMgY2FzZSBydW5zIG9uCisgIGEgd29ya3N0YXRpb24gd2hlcmUgcGVybCBpcyBhdmFpbGFibGUsIHdoaWxlIGN1cmwgaXRzZWxmIGlzIHJ1biBvbiBhIHJlbW90ZQorICBzeXN0ZW0gdXNpbmcgc3NoIG9yIHNvbWUgb3RoZXIgcmVtb3RlIGV4ZWN1dGlvbiBtZXRob2QuICBTZWUgdGhlIGNvbW1lbnRzIGF0CisgIHRoZSBiZWdpbm5pbmcgb2YgcnVudGVzdHMucGwgZm9yIGRldGFpbHMuCisKKzIuIE51bWJlcmluZworCisgMi4xIFRlc3QgY2FzZSBudW1iZXJpbmcKKworICAgICAxICAgLSAgOTkgICBIVFRQCisgICAgIDEwMCAtIDE5OSAgIEZUUCoKKyAgICAgMjAwIC0gMjk5ICAgRklMRSoKKyAgICAgMzAwIC0gMzk5ICAgSFRUUFMKKyAgICAgNDAwIC0gNDk5ICAgRlRQUworICAgICA1MDAgLSA1OTkgICBsaWJjdXJsIHNvdXJjZSBjb2RlIHRlc3RzLCBub3QgdXNpbmcgdGhlIGN1cmwgY29tbWFuZCB0b29sCisgICAgIDYwMCAtIDY5OSAgIFNDUC9TRlRQCisgICAgIDcwMCAtIDc5OSAgIFNPQ0tTNCAoZXZlbiBudW1iZXJzKSBhbmQgU09DSzUgKG9kZCBudW1iZXJzKQorICAgICA4MDAgLSA4OTkgICBQT1AzLCBJTUFQLCBTTVRQCisgICAgIDEwMDAgLSAxMjk5IG1pc2NlbGxhbmVvdXMqCisgICAgIDEzMDAgLSAxMzk5IHVuaXQgdGVzdHMqCisgICAgIDE0MDAgLSAxOTk5IG1pc2NlbGxhbmVvdXMqCisgICAgIDIwMDAgLSB4ICAgIG11bHRpcGxlIHNlcXVlbnRpYWwgcHJvdG9jb2xzIHBlciB0ZXN0IGNhc2UqCisKKyAgU2luY2UgMzAtYXByLTIwMDMsIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgc3lzdGVtIHRoYXQgcmVxdWlyZXMgdXMgdG8ga2VlcAorICB3aXRoaW4gdGhlc2UgbnVtYmVyIHNlcmllcywgYW5kIHRob3NlIHNlY3Rpb25zIG1hcmtlZCB3aXRoICogYWN0dWFsbHkKKyAgY29udGFpbiB0ZXN0cyBmb3IgYSB2YXJpZXR5IG9mIHByb3RvY29scy4gRWFjaCB0ZXN0IGNhc2Ugbm93IHNwZWNpZmllcyBpdHMKKyAgb3duIHNlcnZlciByZXF1aXJlbWVudHMsIGluZGVwZW5kZW50IG9mIHRlc3QgbnVtYmVyLgorCiszLiBXcml0ZSB0ZXN0cworCisgIEhlcmUncyBhIHF1aWNrIGRlc2NyaXB0aW9uIG9uIHdyaXRpbmcgdGVzdCBjYXNlcy4gV2UgYmFzaWNhbGx5IGhhdmUgdGhyZWUKKyAga2luZHMgb2YgdGVzdHM6IHRoZSBvbmVzIHRoYXQgdGVzdCB0aGUgY3VybCB0b29sLCB0aGUgb25lcyB0aGF0IGJ1aWxkIHNtYWxsCisgIGFwcGxpY2F0aW9ucyBhbmQgdGVzdCBsaWJjdXJsIGRpcmVjdGx5IGFuZCB0aGUgdW5pdCB0ZXN0cyB0aGF0IHRlc3QKKyAgaW5kaXZpZHVhbCAocG9zc2libHkgaW50ZXJuYWwpIGZ1bmN0aW9ucy4KKworIDMuMSB0ZXN0IGRhdGEKKworICBFYWNoIHRlc3QgaGFzIGEgbWFzdGVyIGZpbGUgdGhhdCBjb250cm9scyBhbGwgdGhlIHRlc3QgZGF0YS4gV2hhdCB0byByZWFkLAorICB3aGF0IHRoZSBwcm90b2NvbCBleGNoYW5nZSBzaG91bGQgbG9vayBsaWtlLCB3aGF0IGV4aXQgY29kZSB0byBleHBlY3QgYW5kCisgIHdoYXQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byB1c2UgZXRjLgorCisgIFRoZXNlIGZpbGVzIGFyZSB0ZXN0cy9kYXRhL3Rlc3RbbnVtXSB3aGVyZSBbbnVtXSBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAyCisgIG9mIHRoaXMgZG9jdW1lbnQsIGFuZCB0aGUgWE1MLWxpa2UgZmlsZSBmb3JtYXQgb2YgdGhlbSBpcyBkZXNjcmliZWQgaW4gdGhlCisgIHNlcGFyYXRlIHRlc3RzL0ZJTEVGT1JNQVQgZG9jdW1lbnQuCisKKyAzLjIgY3VybCB0ZXN0cworCisgIEEgdGVzdCBjYXNlIHRoYXQgcnVucyB0aGUgY3VybCB0b29sIGFuZCB2ZXJpZmllcyB0aGF0IGl0IGdldHMgdGhlIGNvcnJlY3QKKyAgZGF0YSwgaXQgc2VuZHMgdGhlIGNvcnJlY3QgZGF0YSwgaXQgdXNlcyB0aGUgY29ycmVjdCBwcm90b2NvbCBwcmltaXRpdmVzCisgIGV0Yy4KKworIDMuMyBsaWJjdXJsIHRlc3RzCisKKyAgVGhlIGxpYmN1cmwgdGVzdHMgYXJlIGlkZW50aWNhbCB0byB0aGUgY3VybCBvbmVzLCBleGNlcHQgdGhhdCB0aGV5IHVzZSBhCisgIHNwZWNpZmljIGFuZCBkZWRpY2F0ZWQgY3VzdG9tLWJ1aWx0IHByb2dyYW0gdG8gcnVuIGluc3RlYWQgb2YgImN1cmwiLiBUaGlzCisgIHRvb2wgaXMgYnVpbHQgZnJvbSBzb3VyY2UgY29kZSBwbGFjZWQgaW4gdGVzdHMvbGlidGVzdCBhbmQgaWYgeW91IHdhbnQgdG8KKyAgbWFrZSBhIG5ldyBsaWJjdXJsIHRlc3QgdGhhdCBpcyB3aGVyZSB5b3UgYWRkIHlvdXIgY29kZS4KKworIDMuNCB1bml0IHRlc3RzCisKKyAgVW5pdCB0ZXN0cyBhcmUgdGVzdHMgaW4gdGhlIDEzeHggc2VxdWVuY2UgYW5kIHRoZXkgYXJlIHBsYWNlZCBpbiB0ZXN0cy91bml0LgorICBUaGVyZSdzIGEgdGVzdHMvdW5pdC9SRUFETUUgZGVzY3JpYmluZyB0aGUgc3BlY2lmaWMgc2V0IG9mIGNoZWNrcyBhbmQgbWFjcm9zCisgIHRoYXQgbWF5IGJlIHVzZWQgd2hlbiB3cml0aW5nIHRlc3RzIHRoYXQgdmVyaWZ5IGJlaGF2aW9ycyBvZiBzcGVjaWZpYworICBpbmRpdmlkdWFsIGZ1bmN0aW9ucy4KKworICBUaGUgdW5pdCB0ZXN0cyBkZXBlbmQgb24gY3VybCBiZWluZyBidWlsdCB3aXRoIGRlYnVnIGVuYWJsZWQuCisKKzQuIFRPRE8KKworIDQuMSBNb3JlIHByb3RvY29scworCisgIEFkZCB0ZXN0cyBmb3IgVEVMTkVULCBMREFQLCBESUNULi4uCisKKyA0LjIgU09DS1MgYXV0aAorCisgIFNPQ0tTNC81IHRlc3QgZGVmaWNpZW5jaWVzIC0gbm8gcHJveHkgYXV0aGVudGljYXRpb24gdGVzdHMgYXMgU1NIICh0aGUKKyAgdGVzdCBtZWNoYW5pc20pIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9FZGVsQ3VybFJvb3QtY2EuY2FjZXJ0IGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvRWRlbEN1cmxSb290LWNhLmNhY2VydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmNiYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvRWRlbEN1cmxSb290LWNhLmNhY2VydApAQCAtMCwwICsxLDg1IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6CisgICAgICAgICAgICAwYjo5ODo5NDpmNTphYjphNgorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOgorICAgICAgICAgICAgY291bnRyeU5hbWUgICAgICAgICAgICAgICA9IE5OCisgICAgICAgICAgICBvcmdhbml6YXRpb25OYW1lICAgICAgICAgID0gRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZAorICAgICAgICAgICAgY29tbW9uTmFtZSAgICAgICAgICAgICAgICA9IE5vdGhlcm4gTm93aGVyZSBUcnVzdCBBbmNob3IKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IE1heSAyNyAyMTozNjo0NiAyMDEwIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogT2N0IDMwIDIxOjM2OjQ2IDIwMjYgR01UCisgICAgICAgIFN1YmplY3Q6CisgICAgICAgICAgICBjb3VudHJ5TmFtZSAgICAgICAgICAgICAgID0gTk4KKyAgICAgICAgICAgIG9yZ2FuaXphdGlvbk5hbWUgICAgICAgICAgPSBFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3VkCisgICAgICAgICAgICBjb21tb25OYW1lICAgICAgICAgICAgICAgID0gTm90aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcgorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmMxOmE5OjBhOmVmOjc2OjA2OjdkOmZlOjc4OjNhOmYxOjBlOjQwOjZkOgorICAgICAgICAgICAgICAgICAgICBjMjo1YjphZTo4Zjo4ZDo3ZjpmMDpkNTo4OTo5ZTo0MjoyYTpmMDoxNzo5NDoKKyAgICAgICAgICAgICAgICAgICAgZDk6MmU6Njc6Yzc6MmQ6MDE6MWM6OTU6YTM6YjE6YTY6ODY6ZDQ6MTI6M2M6CisgICAgICAgICAgICAgICAgICAgIDQ3OjNhOjcwOmU2OjdiOjFmOjExOjA2OmQzOjczOmFlOmRmOmNhOjI0OjE5OgorICAgICAgICAgICAgICAgICAgICAwMzplNDo2MjowYTplYjo2NzpkNDpkYzplZjo5ZDoyZDplMDo4Mjo3NzpmZToKKyAgICAgICAgICAgICAgICAgICAgMmE6MzA6NWE6ZmI6NTc6ZTU6Yjg6NGY6MzY6NTI6NGM6MmY6NTc6YWQ6MTI6CisgICAgICAgICAgICAgICAgICAgIDZhOjk0OjNlOmU0OjQ4OmE3OmFkOmE1OmMwOjNhOmQwOjRlOjAwOjk5Ojg4OgorICAgICAgICAgICAgICAgICAgICA4ZjpiZDo0YTo3MDpiZTozYjo1Yjo2YjpmZjo1ZTo2ZjoyOTo2ZDowYzphNzoKKyAgICAgICAgICAgICAgICAgICAgNTU6NGE6ZTI6NDM6ZTc6NDk6MGY6OTk6NTQ6NTk6Njg6ODE6MzQ6ZDg6YTk6CisgICAgICAgICAgICAgICAgICAgIGZiOmM4OjBkOjE0OjVhOjQwOmNiOjcwOjFlOmY1OjNiOmMwOjQyOjM5OjA2OgorICAgICAgICAgICAgICAgICAgICBmOTo2MzphZDpkOToyOToxNDo1MzphZjo0MjoxMDoxZDoxODo5NTpiNjoxNToKKyAgICAgICAgICAgICAgICAgICAgOGE6ZDg6NDE6ZDg6Mzc6MzE6MGE6OTc6NWE6MWI6MTA6OTA6YWM6MWQ6ZmY6CisgICAgICAgICAgICAgICAgICAgIDZlOjcxOjMzOjZiOjdlOjg4OjE4OjIwOmVkOmJlOjM1OmZmOmU3OjY5OjQ4OgorICAgICAgICAgICAgICAgICAgICAwNTpjMDo3ODoyZTowNDo0NjpmNDpjMjo4ZDo0ZDo3MDo2ZTo0MjpmYTo5MzoKKyAgICAgICAgICAgICAgICAgICAgZWI6Y2U6MTI6M2I6ZDE6ZjU6Y2U6M2Y6Mjk6NWM6OGM6YmQ6NTk6ODM6ZTQ6CisgICAgICAgICAgICAgICAgICAgIGExOmMxOjNjOjhlOjNlOjM4OjU1OmYzOjk5OjE4OmIwOmRmOmY2Ojc0OmM5OgorICAgICAgICAgICAgICAgICAgICA4ZToyODpmNDozODowZDo0NToyMDpkNjpkYjpjMDo3MzphMjplNjo4Yzo2ZToKKyAgICAgICAgICAgICAgICAgICAgOTg6OWYKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiBjcml0aWNhbAorICAgICAgICAgICAgICAgIENBOlRSVUUKKyAgICAgICAgICAgIFg1MDl2MyBLZXkgVXNhZ2U6IGNyaXRpY2FsCisgICAgICAgICAgICAgICAgQ2VydGlmaWNhdGUgU2lnbiwgQ1JMIFNpZ24KKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBBRDozRTpFMjozOTowNzpCODo1QzpBQToyNjo5MDo5NDo0QzoyNjo2OToyMTo4MzpFMjo0RTozNjo5NAorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICA4NjoxZjo5ZDpkZDo0NToxMTpjODo2YjpmMTo5NzoxYTpmMDoyNTpiMjowYzpmNzoxZjo1ODoKKyAgICAgICAgYzQ6NmE6YTU6NTY6MDc6MzI6Y2I6MmQ6N2E6OGM6YWU6NDc6MWU6N2Q6ZTc6NzM6NmM6M2I6CisgICAgICAgIDk2OjFlOjc1OmI0OmU1Ojg5OjA1OmE3OjdlOmI2OjUyOjU2OjVhOmUyOjZiOjM4OmU0OjE4OgorICAgICAgICAzYzo2NDo2ZjpiZTpiZDpkMzowMTo3NjpiNDo4Mzo3Zjo3YToxZTo5YzpjYjo0MDoxYjo5YToKKyAgICAgICAgZGQ6NDM6Y2I6OWE6ZGI6OGE6Zjg6NzY6NTA6YWI6YWQ6ODU6N2Y6Y2Y6M2E6NmY6NGI6ZTI6CisgICAgICAgIDI3OmIwOjhjOmE5OjBhOmUwOmQ4OjQ1OjAwOjA1OjVlOjI5OmFiOmEwOjhhOjc4OmU1OjA5OgorICAgICAgICA4OTo0ODo4YTowZDo0Mjo0OToxZTphZDpjMjo4NToyZjoyOTo5ZDphZjoyZTpjODplZjpiOToKKyAgICAgICAgZGM6NzQ6MzM6ZWI6ZTk6NDU6ZTk6YTI6YjM6MDA6YmE6NzY6MGI6NzQ6NTk6Yzk6YTg6OTY6CisgICAgICAgIDRjOmYzOmNkOjliOjM0OjVhOjRhOjg3OmIyOjZhOjUyOjc0OjViOmJlOmYzOjgxOmY4OjMyOgorICAgICAgICBkMDoxZjpjOTpjYzo5Zjo4YTo2YTplYjo2ZTpmMzo2ZDoyYzo1NDoyMDo4NjpmNjo4Nzo2MjoKKyAgICAgICAgYzA6ZWQ6NTU6MDM6OWQ6OTc6YTk6NWE6YWU6Mzk6YTA6N2U6ZTQ6YTY6OTU6ZTk6MjY6MTk6CisgICAgICAgIDkxOmU2OjBmOmI2OjE4OmY3OjQ5OjZjOmE3OmNlOmZkOmMxOjA0OmMyOmY5OjI3OjI3OjRjOgorICAgICAgICA1OTplOTpiZjo3YTpmNjo2NTphMDpkOTphMDo3MTphNjo1NDpjNjo2Zjo5YTo1ZDoyMzoxOToKKyAgICAgICAgNTc6NDk6NTk6MmM6MDY6OTE6M2U6Mjg6OWI6YzE6NmY6ZjI6MmQ6OWE6MjQ6YTc6MGI6ZGE6CisgICAgICAgIGNkOmNjOmYzOmJjCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURrRENDQW5pZ0F3SUJBZ0lHQzVpVTlhdW1NQTBHQ1NxR1NJYjNEUUVCQlFVQU1HY3hDekFKQmdOVkJBWVQKK0FrNU9NVEV3THdZRFZRUUtEQ2hGWkdWc0lFTjFjbXdnUVhKamRHbGpJRWxzYkhWa2FYVnRJRkpsYzJWaGNtTm8KK0lFTnNiM1ZrTVNVd0l3WURWUVFEREJ4T2IzUm9aWEp1SUU1dmQyaGxjbVVnVkhKMWMzUWdRVzVqYUc5eU1CNFgKK0RURXdNRFV5TnpJeE16WTBObG9YRFRJMk1UQXpNREl4TXpZME5sb3daekVMTUFrR0ExVUVCaE1DVGs0eE1UQXYKK0JnTlZCQW9NS0VWa1pXd2dRM1Z5YkNCQmNtTjBhV01nU1d4c2RXUnBkVzBnVW1WelpXRnlZMmdnUTJ4dmRXUXgKK0pUQWpCZ05WQkFNTUhFNXZkR2hsY200Z1RtOTNhR1Z5WlNCVWNuVnpkQ0JCYm1Ob2IzSXdnZ0VpTUEwR0NTcUcKK1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURCcVFydmRnWjkvbmc2OFE1QWJjSmJybytOZi9EVmlaNUMKK0t2QVhsTmt1WjhjdEFSeVZvN0dtaHRRU1BFYzZjT1o3SHhFRzAzT3UzOG9rR1FQa1lncnJaOVRjNzUwdDRJSjMKKy9pb3dXdnRYNWJoUE5sSk1MMWV0RW1xVVB1UklwNjJsd0RyUVRnQ1ppSSs5U25DK08xdHIvMTV2S1cwTXAxVksKKzRrUG5TUStaVkZsb2dUVFlxZnZJRFJSYVFNdHdIdlU3d0VJNUJ2bGpyZGtwRkZPdlFoQWRHSlcyRllyWVFkZzMKK01RcVhXaHNRa0t3ZC8yNXhNMnQraUJnZzdiNDEvK2RwU0FYQWVDNEVSdlRDalUxd2JrTDZrK3ZPRWp2UjljNC8KK0tWeU12Vm1ENUtIQlBJNCtPRlh6bVJpdzMvWjB5WTRvOURnTlJTRFcyOEJ6b3VhTWJwaWZBZ01CQUFHalFqQkEKK01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RnWURWUjBQQVFIL0JBUURBZ0VHTUIwR0ExVWREZ1FXQkJTdFB1STUKK0I3aGNxaWFRbEV3bWFTR0Q0azQybERBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQWhoK2QzVVVSeUd2eGx4cncKK0piSU05eDlZeEdxbFZnY3l5eTE2aks1SEhuM25jMnc3bGg1MXRPV0pCYWQrdGxKV1d1SnJPT1FZUEdSdnZyM1QKK0FYYTBnMzk2SHB6TFFCdWEzVVBMbXR1SytIWlFxNjJGZjg4NmIwdmlKN0NNcVFyZzJFVUFCVjRwcTZDS2VPVUoKK2lVaUtEVUpKSHEzQ2hTOHBuYTh1eU8rNTNIUXo2K2xGNmFLekFMcDJDM1JaeWFpV1RQUE5telJhU29leWFsSjAKK1c3N3pnZmd5MEIvSnpKK0thdXR1ODIwc1ZDQ0c5b2Rpd08xVkE1MlhxVnF1T2FCKzVLYVY2U1laa2VZUHRoajMKK1NXeW56djNCQk1MNUp5ZE1XZW0vZXZabG9ObWdjYVpVeG0rYVhTTVpWMGxaTEFhUlBpaWJ3Vy95TFpva3B3dmEKK3pjenp2QT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9FZGVsQ3VybFJvb3QtY2EuY25mIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvRWRlbEN1cmxSb290LWNhLmNuZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTk5ODgxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvRWRlbEN1cmxSb290LWNhLmNuZgpAQCAtMCwwICsxLDExIEBACitbIGNhIF0KK2RlZmF1bHRfY2EgPSBFZGVsQ3VybFJvb3QKKworWyBFZGVsQ3VybFJvb3QgXQorZGF0YWJhc2UgPSBFZGVsQ3VybFJvb3QtY2EuZGIKK2NlcnRpZmljYXRlID0gRWRlbEN1cmxSb290LWNhLmNydAorcHJpdmF0ZV9rZXkgPSBFZGVsQ3VybFJvb3QtY2Eua2V5CitjcmxudW1iZXIgPSBFZGVsQ3VybFJvb3QtY2EuY250CitkZWZhdWx0X21kID0gc2hhMQorZGVmYXVsdF9kYXlzID0gMzY1CitkZWZhdWx0X2NybF9kYXlzID0gMzAKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL0VkZWxDdXJsUm9vdC1jYS5jcnQgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9FZGVsQ3VybFJvb3QtY2EuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiY2JjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9FZGVsQ3VybFJvb3QtY2EuY3J0CkBAIC0wLDAgKzEsODUgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjoKKyAgICAgICAgICAgIDBiOjk4Ojk0OmY1OmFiOmE2CisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6CisgICAgICAgICAgICBjb3VudHJ5TmFtZSAgICAgICAgICAgICAgID0gTk4KKyAgICAgICAgICAgIG9yZ2FuaXphdGlvbk5hbWUgICAgICAgICAgPSBFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3VkCisgICAgICAgICAgICBjb21tb25OYW1lICAgICAgICAgICAgICAgID0gTm90aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogTWF5IDI3IDIxOjM2OjQ2IDIwMTAgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBPY3QgMzAgMjE6MzY6NDYgMjAyNiBHTVQKKyAgICAgICAgU3ViamVjdDoKKyAgICAgICAgICAgIGNvdW50cnlOYW1lICAgICAgICAgICAgICAgPSBOTgorICAgICAgICAgICAgb3JnYW5pemF0aW9uTmFtZSAgICAgICAgICA9IEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQKKyAgICAgICAgICAgIGNvbW1vbk5hbWUgICAgICAgICAgICAgICAgPSBOb3RoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6YzE6YTk6MGE6ZWY6NzY6MDY6N2Q6ZmU6Nzg6M2E6ZjE6MGU6NDA6NmQ6CisgICAgICAgICAgICAgICAgICAgIGMyOjViOmFlOjhmOjhkOjdmOmYwOmQ1Ojg5OjllOjQyOjJhOmYwOjE3Ojk0OgorICAgICAgICAgICAgICAgICAgICBkOToyZTo2NzpjNzoyZDowMToxYzo5NTphMzpiMTphNjo4NjpkNDoxMjozYzoKKyAgICAgICAgICAgICAgICAgICAgNDc6M2E6NzA6ZTY6N2I6MWY6MTE6MDY6ZDM6NzM6YWU6ZGY6Y2E6MjQ6MTk6CisgICAgICAgICAgICAgICAgICAgIDAzOmU0OjYyOjBhOmViOjY3OmQ0OmRjOmVmOjlkOjJkOmUwOjgyOjc3OmZlOgorICAgICAgICAgICAgICAgICAgICAyYTozMDo1YTpmYjo1NzplNTpiODo0ZjozNjo1Mjo0YzoyZjo1NzphZDoxMjoKKyAgICAgICAgICAgICAgICAgICAgNmE6OTQ6M2U6ZTQ6NDg6YTc6YWQ6YTU6YzA6M2E6ZDA6NGU6MDA6OTk6ODg6CisgICAgICAgICAgICAgICAgICAgIDhmOmJkOjRhOjcwOmJlOjNiOjViOjZiOmZmOjVlOjZmOjI5OjZkOjBjOmE3OgorICAgICAgICAgICAgICAgICAgICA1NTo0YTplMjo0MzplNzo0OTowZjo5OTo1NDo1OTo2ODo4MTozNDpkODphOToKKyAgICAgICAgICAgICAgICAgICAgZmI6Yzg6MGQ6MTQ6NWE6NDA6Y2I6NzA6MWU6ZjU6M2I6YzA6NDI6Mzk6MDY6CisgICAgICAgICAgICAgICAgICAgIGY5OjYzOmFkOmQ5OjI5OjE0OjUzOmFmOjQyOjEwOjFkOjE4Ojk1OmI2OjE1OgorICAgICAgICAgICAgICAgICAgICA4YTpkODo0MTpkODozNzozMTowYTo5Nzo1YToxYjoxMDo5MDphYzoxZDpmZjoKKyAgICAgICAgICAgICAgICAgICAgNmU6NzE6MzM6NmI6N2U6ODg6MTg6MjA6ZWQ6YmU6MzU6ZmY6ZTc6Njk6NDg6CisgICAgICAgICAgICAgICAgICAgIDA1OmMwOjc4OjJlOjA0OjQ2OmY0OmMyOjhkOjRkOjcwOjZlOjQyOmZhOjkzOgorICAgICAgICAgICAgICAgICAgICBlYjpjZToxMjozYjpkMTpmNTpjZTozZjoyOTo1Yzo4YzpiZDo1OTo4MzplNDoKKyAgICAgICAgICAgICAgICAgICAgYTE6YzE6M2M6OGU6M2U6Mzg6NTU6ZjM6OTk6MTg6YjA6ZGY6ZjY6NzQ6Yzk6CisgICAgICAgICAgICAgICAgICAgIDhlOjI4OmY0OjM4OjBkOjQ1OjIwOmQ2OmRiOmMwOjczOmEyOmU2OjhjOjZlOgorICAgICAgICAgICAgICAgICAgICA5ODo5ZgorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IGNyaXRpY2FsCisgICAgICAgICAgICAgICAgQ0E6VFJVRQorICAgICAgICAgICAgWDUwOXYzIEtleSBVc2FnZTogY3JpdGljYWwKKyAgICAgICAgICAgICAgICBDZXJ0aWZpY2F0ZSBTaWduLCBDUkwgU2lnbgorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEFEOjNFOkUyOjM5OjA3OkI4OjVDOkFBOjI2OjkwOjk0OjRDOjI2OjY5OjIxOjgzOkUyOjRFOjM2Ojk0CisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIDg2OjFmOjlkOmRkOjQ1OjExOmM4OjZiOmYxOjk3OjFhOmYwOjI1OmIyOjBjOmY3OjFmOjU4OgorICAgICAgICBjNDo2YTphNTo1NjowNzozMjpjYjoyZDo3YTo4YzphZTo0NzoxZTo3ZDplNzo3Mzo2YzozYjoKKyAgICAgICAgOTY6MWU6NzU6YjQ6ZTU6ODk6MDU6YTc6N2U6YjY6NTI6NTY6NWE6ZTI6NmI6Mzg6ZTQ6MTg6CisgICAgICAgIDNjOjY0OjZmOmJlOmJkOmQzOjAxOjc2OmI0OjgzOjdmOjdhOjFlOjljOmNiOjQwOjFiOjlhOgorICAgICAgICBkZDo0MzpjYjo5YTpkYjo4YTpmODo3Njo1MDphYjphZDo4NTo3ZjpjZjozYTo2Zjo0YjplMjoKKyAgICAgICAgMjc6YjA6OGM6YTk6MGE6ZTA6ZDg6NDU6MDA6MDU6NWU6Mjk6YWI6YTA6OGE6Nzg6ZTU6MDk6CisgICAgICAgIDg5OjQ4OjhhOjBkOjQyOjQ5OjFlOmFkOmMyOjg1OjJmOjI5OjlkOmFmOjJlOmM4OmVmOmI5OgorICAgICAgICBkYzo3NDozMzplYjplOTo0NTplOTphMjpiMzowMDpiYTo3NjowYjo3NDo1OTpjOTphODo5NjoKKyAgICAgICAgNGM6ZjM6Y2Q6OWI6MzQ6NWE6NGE6ODc6YjI6NmE6NTI6NzQ6NWI6YmU6ZjM6ODE6Zjg6MzI6CisgICAgICAgIGQwOjFmOmM5OmNjOjlmOjhhOjZhOmViOjZlOmYzOjZkOjJjOjU0OjIwOjg2OmY2Ojg3OjYyOgorICAgICAgICBjMDplZDo1NTowMzo5ZDo5NzphOTo1YTphZTozOTphMDo3ZTplNDphNjo5NTplOToyNjoxOToKKyAgICAgICAgOTE6ZTY6MGY6YjY6MTg6Zjc6NDk6NmM6YTc6Y2U6ZmQ6YzE6MDQ6YzI6Zjk6Mjc6Mjc6NGM6CisgICAgICAgIDU5OmU5OmJmOjdhOmY2OjY1OmEwOmQ5OmEwOjcxOmE2OjU0OmM2OjZmOjlhOjVkOjIzOjE5OgorICAgICAgICA1Nzo0OTo1OToyYzowNjo5MTozZToyODo5YjpjMTo2ZjpmMjoyZDo5YToyNDphNzowYjpkYToKKyAgICAgICAgY2Q6Y2M6ZjM6YmMKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRGtEQ0NBbmlnQXdJQkFnSUdDNWlVOWF1bU1BMEdDU3FHU0liM0RRRUJCUVVBTUdjeEN6QUpCZ05WQkFZVAorQWs1T01URXdMd1lEVlFRS0RDaEZaR1ZzSUVOMWNtd2dRWEpqZEdsaklFbHNiSFZrYVhWdElGSmxjMlZoY21ObworSUVOc2IzVmtNU1V3SXdZRFZRUUREQnhPYjNSb1pYSnVJRTV2ZDJobGNtVWdWSEoxYzNRZ1FXNWphRzl5TUI0WAorRFRFd01EVXlOekl4TXpZME5sb1hEVEkyTVRBek1ESXhNelkwTmxvd1p6RUxNQWtHQTFVRUJoTUNUazR4TVRBdgorQmdOVkJBb01LRVZrWld3Z1EzVnliQ0JCY21OMGFXTWdTV3hzZFdScGRXMGdVbVZ6WldGeVkyZ2dRMnh2ZFdReAorSlRBakJnTlZCQU1NSEU1dmRHaGxjbTRnVG05M2FHVnlaU0JVY25WemRDQkJibU5vYjNJd2dnRWlNQTBHQ1NxRworU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRREJxUXJ2ZGdaOS9uZzY4UTVBYmNKYnJvK05mL0RWaVo1QworS3ZBWGxOa3VaOGN0QVJ5Vm83R21odFFTUEVjNmNPWjdIeEVHMDNPdTM4b2tHUVBrWWdyclo5VGM3NTB0NElKMworL2lvd1d2dFg1YmhQTmxKTUwxZXRFbXFVUHVSSXA2Mmx3RHJRVGdDWmlJKzlTbkMrTzF0ci8xNXZLVzBNcDFWSworNGtQblNRK1pWRmxvZ1RUWXFmdklEUlJhUU10d0h2VTd3RUk1QnZsanJka3BGRk92UWhBZEdKVzJGWXJZUWRnMworTVFxWFdoc1FrS3dkLzI1eE0ydCtpQmdnN2I0MS8rZHBTQVhBZUM0RVJ2VENqVTF3YmtMNmsrdk9FanZSOWM0LworS1Z5TXZWbUQ1S0hCUEk0K09GWHptUml3My9aMHlZNG85RGdOUlNEVzI4QnpvdWFNYnBpZkFnTUJBQUdqUWpCQQorTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3RGdZRFZSMFBBUUgvQkFRREFnRUdNQjBHQTFVZERnUVdCQlN0UHVJNQorQjdoY3FpYVFsRXdtYVNHRDRrNDJsREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBaGgrZDNVVVJ5R3Z4bHhydworSmJJTTl4OVl4R3FsVmdjeXl5MTZqSzVISG4zbmMydzdsaDUxdE9XSkJhZCt0bEpXV3VKck9PUVlQR1J2dnIzVAorQVhhMGczOTZIcHpMUUJ1YTNVUExtdHVLK0haUXE2MkZmODg2YjB2aUo3Q01xUXJnMkVVQUJWNHBxNkNLZU9VSgoraVVpS0RVSkpIcTNDaFM4cG5hOHV5Tys1M0hRejYrbEY2YUt6QUxwMkMzUlp5YWlXVFBQTm16UmFTb2V5YWxKMAorVzc3emdmZ3kwQi9KekorS2F1dHU4MjBzVkNDRzlvZGl3TzFWQTUyWHFWcXVPYUIrNUthVjZTWVprZVlQdGhqMworU1d5bnp2M0JCTUw1SnlkTVdlbS9ldlpsb05tZ2NhWlV4bSthWFNNWlYwbFpMQWFSUGlpYndXL3lMWm9rcHd2YQoremN6enZBPT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL0VkZWxDdXJsUm9vdC1jYS5jc3IgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9FZGVsQ3VybFJvb3QtY2EuY3NyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZjk0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9FZGVsQ3VybFJvb3QtY2EuY3NyCkBAIC0wLDAgKzEsMTcgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlDckRDQ0FaUUNBUUF3WnpFTE1Ba0dBMVVFQmhNQ1RrNHhNVEF2QmdOVkJBb01LRVZrWld3Z1EzVnliQ0JCCitjbU4wYVdNZ1NXeHNkV1JwZFcwZ1VtVnpaV0Z5WTJnZ1EyeHZkV1F4SlRBakJnTlZCQU1NSEU1dmRHaGxjbTRnCitUbTkzYUdWeVpTQlVjblZ6ZENCQmJtTm9iM0l3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCitBb0lCQVFEQnFRcnZkZ1o5L25nNjhRNUFiY0picm8rTmYvRFZpWjVDS3ZBWGxOa3VaOGN0QVJ5Vm83R21odFFTCitQRWM2Y09aN0h4RUcwM091Mzhva0dRUGtZZ3JyWjlUYzc1MHQ0SUozL2lvd1d2dFg1YmhQTmxKTUwxZXRFbXFVCitQdVJJcDYybHdEclFUZ0NaaUkrOVNuQytPMXRyLzE1dktXME1wMVZLNGtQblNRK1pWRmxvZ1RUWXFmdklEUlJhCitRTXR3SHZVN3dFSTVCdmxqcmRrcEZGT3ZRaEFkR0pXMkZZcllRZGczTVFxWFdoc1FrS3dkLzI1eE0ydCtpQmdnCis3YjQxLytkcFNBWEFlQzRFUnZUQ2pVMXdia0w2ayt2T0VqdlI5YzQvS1Z5TXZWbUQ1S0hCUEk0K09GWHptUml3CiszL1oweVk0bzlEZ05SU0RXMjhCem91YU1icGlmQWdNQkFBR2dBREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBCitlRk15NTVrRmtlL2U5bXJHbG9SVWgxbzhkeG16U2lWd1ZDdzVEVFpRelRGTkFNU09aWElJZDhrMkllSFNVZDg0CitaeUoxVU55Sm4yRUZjd2dhWWFNdHZaOHhNV1IyVzBDN2xCdk9PY2p2V21pR3plOUYyWjVYTVF6TDhjamtLNGpXCitSS0lxOWIwVzZUQzhsTE81RjJlSnBXNkJvVFE4Y0JDRGlWSURsQ203eFp4UFJqSG93dXlNMFRwZXdxMlBsdEMxCitwOERiUWlwWldsNUxQYUhCU1pTbUl1VWdPQlU5cG9ySC9WbjBvV1h4WWZ0czU5MTAzVkpZNVlLa2R6MFBpcXFBCis1a1dZQ01GRFp5TCtuWjJhSW9sNHI4blhrTjlNdVBPVTEyYUhxUEdjRGxhR1MyaTV6Zm0yWXdzZzExMGsrTkNrCitBbXFoam5yUWp2SmhpZjNyR080K3F3PT0KKy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvRWRlbEN1cmxSb290LWNhLmRlciBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL0VkZWxDdXJsUm9vdC1jYS5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhZjQyNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL0VkZWxDdXJsUm9vdC1jYS5kZXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvRWRlbEN1cmxSb290LWNhLmtleSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL0VkZWxDdXJsUm9vdC1jYS5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExMzAzYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL0VkZWxDdXJsUm9vdC1jYS5rZXkKQEAgLTAsMCArMSwyNyBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJRW93SUJBQUtDQVFFQXdha0s3M1lHZmY1NE92RU9RRzNDVzY2UGpYL3cxWW1lUWlyd0Y1VFpMbWZITFFFYworbGFPeHBvYlVFanhIT25EbWV4OFJCdE56cnQvS0pCa0Q1R0lLNjJmVTNPK2RMZUNDZC80cU1GcjdWK1c0VHpaUworVEM5WHJSSnFsRDdrU0tldHBjQTYwRTRBbVlpUHZVcHd2anRiYS85ZWJ5bHRES2RWU3VKRDUwa1BtVlJaYUlFMAorMktuN3lBMFVXa0RMY0I3MU84QkNPUWI1WTYzWktSUlRyMElRSFJpVnRoV0syRUhZTnpFS2wxb2JFSkNzSGY5dQorY1ROcmZvZ1lJTzIrTmYvbmFVZ0Z3SGd1QkViMHdvMU5jRzVDK3BQcnpoSTcwZlhPUHlsY2pMMVpnK1Nod1R5TworUGpoVjg1a1lzTi8yZE1tT0tQUTREVVVnMXR2QWM2TG1qRzZZbndJREFRQUJBb0lCQUVRY3VsWGlnd0lKWUN3SworNEdKVXVFa2FxaTZ3VXZvbnZ0dXkwbUxZM1ZIdStpU2dBWGUzN1NHT3hrUHJvM213ZjcvSisya1ZNZGpOcVFEdAorTTJzOStHMDNSYXkzTWVjUzBaQjJla3dyazc4a2NxQ1prSFJ2S2owYS94VkkwVzJrVy9TeUdYMXVFZFB1TGUvNworb0krbnZNM05NVitUaUdFczhWaTNILzdXdVgvSmlFcEJGTnRnS3FsVDFaZFRibGoraWdyQVQzMG9uOUZCZk95bworTnRreElMN1lZMVRBWjdZamRwWldyQUF5bzdnQmpYQW1lc2xuSjlJSHpLUEJzdVNYUTRBN0pqR09BR3l2M0lOaQorRDhtd29hLzhwTmFaVHhGQ0NSbnZlekEzSnZWYTRnV2lnWnRiMEpYNVorSDFuRVJaV29KcTRDajRrTWEzRVJ1QworaXlWWGlqRUNnWUVBNHE1YmtRVHJRN2xpUkNyTkVUbWJWc3BtYnVCYzZYYUFGcll3YnJ4bHp2bDJueXVtQ2dLZworR2FQZVAyU2toNW5QeisxeDFFWG1ZQXFYc0FmTG9FNHo2a2sxRDFXczRGV3h4YUF1d2xXVG1vSjJIWGwyZGNiUgorZjBITGdRL29zd1l0TlZhUDdIQVNtRWY1WTNEZUdMRHJvamgxYU9FOGtxL01wQkhzTzI4cVRBMENnWUVBMnJWVgorZVRmajRWVjV0cFZsZmlVNUQ5NDdxSUVSVndJUStGVzhFcG9rd2N0MVZnVWVXd1hNUUZKRlg2S1dRZGtCK0t0agordmtuQlNyTitWbXdCTU1odVVUcE14dmFaRkw1VUN5TFVVdDJLOGF6TkRkZzlGY2ZIOGRTWm5uTm9vOGFIOWs2QQordjVnRmsrUVE3VmdHVkJlTHYyMlBHMXprbmo0U3NHWmh6eDlIMEZzQ2dZQi84dXE4Y0lwYkw4akhzV0VPMS9WVworaCtoSnJWckViSjdnTXZZaml6UHNIK05VOU01RDJEZUdRWGl4VDUyTzdNTGdHcWFscXM3ZVp4dzN3QzZ2elhTQQorU2RJcFZiSys3Wi9xYlAvM3NWWWZZSVJMSHNRK3RucUoyaG1FUC9hWkZtTnVOKzRGQnoxM3R5aU5lS2ZrUi9pNQorR0NVdGpmVWkxeGdyZy9KVG1ldkdBUUtCZ1FDOVFFaDBHajdnajl4QWVFcFl1OUVDd0NVVGpJdjZwRmtXNnVsUgorbDN6VERVRzlhN1Iyd3krWlFSZXl4N2dKeHNTRDc1cmg0R1NZUlhXL1JycEpBa2NqbHJVMVBkSDlOeXoyYmU4WQordllncjFJR2p4MGdrZnJtdnMyNHl4Rjc1eVNPQnFUQ1RtZkxKcElKWlB1QkxDQXp2V3RpSXJ2dE5TeDFVODJNVAorblZmQkhRS0JnREpaUW1yNWxxZG81WnYvVlArdytWdHhlWDJvQ2d3N01uNTZUVzRJekRFTDZseStzS05OcytKaQorcHAvYzJYWXcyNG83MzE4eVY3MG9XVldzY2F5MVNPaks3UmRvQ2F0NTkwaXVUR01TWXlZOHBNa2dLK1F1RHFEZQorMUhoeWIwaVBvck1TNXdaWHgvVFJPUzQrNEdPSUhMQXRaT1o4QisyMHRjenA3SEdxVUlLMQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL0VkZWxDdXJsUm9vdC1jYS5wcm0gYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9FZGVsQ3VybFJvb3QtY2EucHJtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTNlZjUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9FZGVsQ3VybFJvb3QtY2EucHJtCkBAIC0wLDAgKzEsMTggQEAKK2V4dGVuc2lvbnMgPSB4NTA5djMKK1sgcmVxIF0KK2RlZmF1bHRfYml0cyAgICAgICAgICAgICAgICAgICAgPSAyMDQ4CitkaXN0aW5ndWlzaGVkX25hbWUgICAgICAgICAgICAgID0gcmVxX0ROCitkZWZhdWx0X21kCQkJPSBzaGEyNTYKK3N0cmluZ19tYXNrCQkJPSB1dGY4b25seQorWyByZXFfRE4gXQorY291bnRyeU5hbWUgICAgICAgICAgICAgICAgICAgICA9ICJDb3VudHJ5IE5hbWUiCitjb3VudHJ5TmFtZV92YWx1ZSAgICAgICAgICAgID0gTk4KK29yZ2FuaXphdGlvbk5hbWUgICAgICAgICAgICAgID0gIk9yZ2FuaXphdGlvbiBOYW1lIgorb3JnYW5pemF0aW9uTmFtZV92YWx1ZSAgICAgPSBFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3VkCitjb21tb25OYW1lICAgICAgICAgICAgICAgICAgICAgID0gIkNvbW1vbiBOYW1lIgorY29tbW9uTmFtZV92YWx1ZSAgICAgICAgICAgICAgPSBOb3RoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yIAorWyB4NTA5djMgXQorYmFzaWNDb25zdHJhaW50cyA9IGNyaXRpY2FsLENBOnRydWUKK2tleVVzYWdlICAgICAgICA9IGNyaXRpY2FsLGtleUNlcnRTaWduLGNSTFNpZ24KK3N1YmplY3RLZXlJZGVudGlmaWVyID0gaGFzaAorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0LXN2LmNybCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qtc3YuY3JsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDY1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0LXN2LmNybApAQCAtMCwwICsxLDEyIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUIyekNCeEFJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURCbk1Rc3dDUVlEVlFRR0V3Sk9UakV4TUM4R0ExVUUKK0Nnd29SV1JsYkNCRGRYSnNJRUZ5WTNScFl5QkpiR3gxWkdsMWJTQlNaWE5sWVhKamFDQkRiRzkxWkRFbE1DTUcKK0ExVUVBd3djVG05MGFHVnliaUJPYjNkb1pYSmxJRlJ5ZFhOMElFRnVZMmh2Y2hjTk1UQXdOVEkzTWpFek56RXgKK1doY05NVEF3TmpJMk1qRXpOekV4V2pBWk1CY0NCZ3VZbFBsOGFoY05NVEF3TlRJM01qRXpOekV4V3FBT01Bd3cKK0NnWURWUjBVQkFNQ0FRRXdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBRnVQWkovY05OQ2VBemtTeFZ2UFBQUlgKK1dzdjlUNkR0NjFDNUZtcTllU05OMmtSZjcvZHE1QTVucVRJbEhiWFhpTGRqM1VxTmhVSFhlMm9BMVVwYmRIejkKKzBKbGZ3V20xWS9nTXIxZmgxbjBvRmViRXRDdU9nRFJwZDA3VWl6OEFxT1VCeWtETkRVbE12VndSOXJhSEw4aGoKK05Sd3p1Z3NmSXhsMEN2TExxckJwVVdNeFczcWVtazRjV1czOXlyRGRaZ0tvNmVPWkFPUjNGUVlsTElydzZKY3IKK0ttbTBQamRjSklmUmdKdk55c2d5eDFkSUlLZTdRWHZGVFIvUXpkSFdJV1RraVlJVzd3VUtTelNJQ3ZEQ3IwOTQKK2VvM25yM245QnRPcVQ2MVoxbTZGR0NQNk1tMHdGbDZ4TFRDTmQ2eWdmRm83cGNBZFdsVXNkQmdLemljczBLYz0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qtc3YuY3J0IGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdC1zdi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEzZDk0NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qtc3YuY3J0CkBAIC0wLDAgKzEsODEgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjoKKyAgICAgICAgICAgIDBiOjk4Ojk0OmY5OjdjOjZhCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6CisgICAgICAgICAgICBjb3VudHJ5TmFtZSAgICAgICAgICAgICAgID0gTk4KKyAgICAgICAgICAgIG9yZ2FuaXphdGlvbk5hbWUgICAgICAgICAgPSBFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3VkCisgICAgICAgICAgICBjb21tb25OYW1lICAgICAgICAgICAgICAgID0gTm90aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogTWF5IDI3IDIxOjM3OjExIDIwMTAgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBBdWcgMTMgMjE6Mzc6MTEgMjAxOCBHTVQKKyAgICAgICAgU3ViamVjdDoKKyAgICAgICAgICAgIGNvdW50cnlOYW1lICAgICAgICAgICAgICAgPSBOTgorICAgICAgICAgICAgb3JnYW5pemF0aW9uTmFtZSAgICAgICAgICA9IEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQKKyAgICAgICAgICAgIGNvbW1vbk5hbWUgICAgICAgICAgICAgICAgPSBsb2NhbGhvc3QKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgxMDI0IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDpiMDoyNzo3OToyNjoyYzpiOTplNDpkMTo4MTowYTowOTpkMjo3NjpmZToKKyAgICAgICAgICAgICAgICAgICAgOWE6ZTE6MDU6Njg6MDE6YjM6NzI6Nzc6OTc6Mzg6ZTQ6NjA6MWM6NzE6OWQ6CisgICAgICAgICAgICAgICAgICAgIDk5OmY3OjI2OjdiOjIxOmI1OjZkOmFhOjlmOjE0Ojc2OjA3OjZjOmE0OjJhOgorICAgICAgICAgICAgICAgICAgICAyZDo3ZDplZTpmNjo2Zjo4YTo1ODpjNDo5MzpkZTpmZTphMToyNTowZjpmZjoKKyAgICAgICAgICAgICAgICAgICAgNTc6NDk6YzA6ZDk6OTQ6ZDk6MDc6Nzk6YmY6OGM6NmQ6ZmE6ZjE6MTg6ODI6CisgICAgICAgICAgICAgICAgICAgIDY3OmEwOjNmOmQ3OjMxOjAzOjgyOmVjOmI5OjM5OjY5OjA3OmVjOmVjOjkzOgorICAgICAgICAgICAgICAgICAgICAxNzo1YjoxYTo3Mjo5MTo5MzpiMjo2Yjo5ODo2Njo2MzpmZTo2MToyOTplNzoKKyAgICAgICAgICAgICAgICAgICAgYWQ6ODY6MGU6MDQ6YmE6YmY6OGI6NTU6NTc6NjE6YTU6NGE6ZjY6Y2E6ZTc6CisgICAgICAgICAgICAgICAgICAgIGM2OmQxOmI4OjY1OjQyOmFiOjY3OjY0OjE3CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEFsdGVybmF0aXZlIE5hbWU6IAorICAgICAgICAgICAgICAgIEROUzpsb2NhbGhvc3QKKyAgICAgICAgICAgIFg1MDl2MyBLZXkgVXNhZ2U6IAorICAgICAgICAgICAgICAgIEtleSBFbmNpcGhlcm1lbnQKKyAgICAgICAgICAgIFg1MDl2MyBFeHRlbmRlZCBLZXkgVXNhZ2U6IAorICAgICAgICAgICAgICAgIFRMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgQkM6Njk6ODY6ODQ6NzA6M0E6QUQ6REU6MDg6MkE6NzA6QzY6M0I6NDc6OEM6MTE6M0Y6RTA6OUE6NkQKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkFEOjNFOkUyOjM5OjA3OkI4OjVDOkFBOjI2OjkwOjk0OjRDOjI2OjY5OjIxOjgzOkUyOjRFOjM2Ojk0CisKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogY3JpdGljYWwKKyAgICAgICAgICAgICAgICBDQTpGQUxTRQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICA3YjpmMDpiMDphMDpkOTpkMDo5MTozODo5YjpmZTpjZjo3ODpjODpkNjozMDo1ZDo4Nzo5ZDoKKyAgICAgICAgYjM6Yjk6NmU6OGI6NWE6NzM6NzQ6OTM6Y2I6MzA6NDk6ZDE6MDA6Nzk6OWQ6NWE6YzI6NzE6CisgICAgICAgIGEzOjkzOjVmOmRlOmQzOjVhOjBjOmZiOjZkOjQxOjgzOjg5OjFiOjRmOjBkOjFjOjY1OjBjOgorICAgICAgICAxYTowYzowZjo5Njo3OTo2Mjo5MDplMTo3NDowNDpkZDpjNjpkODpjZjowZjo1ZjowZjoyODoKKyAgICAgICAgODc6ZDc6ODY6NTY6OTA6YjQ6ZDA6ODg6ODA6ZjE6YTc6Y2Q6ZmQ6MGI6MTM6NTg6YmI6NmQ6CisgICAgICAgIGU2OmFiOjQ0OmY2OjliOmQ2OmNjOmM3OmRiOjNkOjNhOjkwOmM0OjIwOjcyOmY0OjM4OjM4OgorICAgICAgICBjMDplZjo4MDoxZDo2MDozZjo0ZTozMDo0MDoxMTo1NjoyOTo3MDphYToxNzo5MTo5MDo1ZjoKKyAgICAgICAgNzA6MGI6ODk6NTE6YWY6MTc6YTg6ZWQ6MjA6NGU6NzY6YmI6Y2Y6YTg6ODg6OWE6MjU6MGY6CisgICAgICAgIDNhOjk2OjI2OjE3OjUwOjJhOmFmOmYzOjhiOjIxOjljOmNmOmZmOmY5OjIwOmZjOmZlOmMwOgorICAgICAgICAzNzo5NTpjNzpjZDowZDo3YTo1MzpkOToyNjoxMjozODoyYzpmNjowMzo5NToxYjpkYTpkMDoKKyAgICAgICAgMDg6Zjc6MzI6OTE6MDc6YTc6MzU6MGM6MTQ6MDA6NDQ6Yzc6NDM6ZmI6MjM6MmU6MTQ6NDQ6CisgICAgICAgIGU2OmVlOmE5OmM5OjIwOjM3OjA5OmI4OmFlOjIxOjRmOjRiOmI3Ojg2OjRkOmUzOjQxOjg0OgorICAgICAgICAxNTo0ZToxYToyOTowMDowMzphODo5Mjo5OTozYzo3NTplYTo0MzowZjplMzoyYjpmNzoxNzoKKyAgICAgICAgYjE6MWI6ODc6ODA6MDQ6ZDM6YTc6NzM6YjE6NWU6ODU6Mzg6N2Q6ODk6MDE6MTY6MTk6ZjY6CisgICAgICAgIGM0OmUxOjFiOjc1CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURRVENDQWltZ0F3SUJBZ0lHQzVpVStYeHFNQTBHQ1NxR1NJYjNEUUVCQlFVQU1HY3hDekFKQmdOVkJBWVQKK0FrNU9NVEV3THdZRFZRUUtEQ2hGWkdWc0lFTjFjbXdnUVhKamRHbGpJRWxzYkhWa2FYVnRJRkpsYzJWaGNtTm8KK0lFTnNiM1ZrTVNVd0l3WURWUVFEREJ4T2IzUm9aWEp1SUU1dmQyaGxjbVVnVkhKMWMzUWdRVzVqYUc5eU1CNFgKK0RURXdNRFV5TnpJeE16Y3hNVm9YRFRFNE1EZ3hNekl4TXpjeE1Wb3dWREVMTUFrR0ExVUVCaE1DVGs0eE1UQXYKK0JnTlZCQW9NS0VWa1pXd2dRM1Z5YkNCQmNtTjBhV01nU1d4c2RXUnBkVzBnVW1WelpXRnlZMmdnUTJ4dmRXUXgKK0VqQVFCZ05WQkFNTUNXeHZZMkZzYUc5emREQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3Z1lrQ2dZRUEKK3NDZDVKaXk1NU5HQkNnblNkdjZhNFFWb0FiTnlkNWM0NUdBY2NaMlo5eVo3SWJWdHFwOFVkZ2RzcENvdGZlNzIKK2I0cFl4SlBlL3FFbEQvOVhTY0RabE5rSGViK01iZnJ4R0lKbm9EL1hNUU9DN0xrNWFRZnM3Sk1YV3hweWtaT3kKK2E1aG1ZLzVoS2VldGhnNEV1citMVlZkaHBVcjJ5dWZHMGJobFFxdG5aQmNDQXdFQUFhT0JpVENCaGpBVUJnTlYKK0hSRUVEVEFMZ2dsc2IyTmhiR2h2YzNRd0N3WURWUjBQQkFRREFnVWdNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUYKK0J3TUJNQjBHQTFVZERnUVdCQlM4YVlhRWNEcXQzZ2dxY01ZN1I0d1JQK0NhYlRBZkJnTlZIU01FR0RBV2dCU3QKK1B1STVCN2hjcWlhUWxFd21hU0dENGs0MmxEQU1CZ05WSFJNQkFmOEVBakFBTUEwR0NTcUdTSWIzRFFFQkJRVUEKK0E0SUJBUUI3OExDZzJkQ1JPSnYrejNqSTFqQmRoNTJ6dVc2TFduTjBrOHN3U2RFQWVaMWF3bkdqazEvZTAxb00KKysyMUJnNGtiVHcwY1pRd2FEQStXZVdLUTRYUUUzY2JZenc5ZkR5aUgxNFpXa0xUUWlJRHhwODM5Q3hOWXUyM20KK3EwVDJtOWJNeDlzOU9wREVJSEwwT0RqQTc0QWRZRDlPTUVBUlZpbHdxaGVSa0Y5d0M0bFJyeGVvN1NCT2RydlAKK3FJaWFKUTg2bGlZWFVDcXY4NHNobk0vLytTRDgvc0EzbGNmTkRYcFQyU1lTT0N6MkE1VWIydEFJOXpLUkI2YzEKK0RCUUFSTWREK3lNdUZFVG03cW5KSURjSnVLNGhUMHUzaGszalFZUVZUaG9wQUFPb2twazhkZXBERCtNcjl4ZXgKK0c0ZUFCTk9uYzdGZWhUaDlpUUVXR2ZiRTRSdDEKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qtc3YuY3NyIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdC1zdi5jc3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3NzNmNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qtc3YuY3NyCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCitNSUlCa3pDQi9RSUJBREJVTVFzd0NRWURWUVFHRXdKT1RqRXhNQzhHQTFVRUNnd29SV1JsYkNCRGRYSnNJRUZ5CitZM1JwWXlCSmJHeDFaR2wxYlNCU1pYTmxZWEpqYUNCRGJHOTFaREVTTUJBR0ExVUVBd3dKYkc5allXeG9iM04wCitNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUUN3SjNrbUxMbmswWUVLQ2RKMi9wcmhCV2dCCitzM0ozbHpqa1lCeHhuWm4zSm5zaHRXMnFueFIyQjJ5a0tpMTk3dlp2aWxqRWs5NytvU1VQLzFkSndObVUyUWQ1Cit2NHh0K3ZFWWdtZWdQOWN4QTRMc3VUbHBCK3pza3hkYkduS1JrN0pybUdaai9tRXA1NjJHRGdTNnY0dFZWMkdsCitTdmJLNThiUnVHVkNxMmRrRndJREFRQUJvQUF3RFFZSktvWklodmNOQVFFTEJRQURnWUVBbElpdkdraFU4aXBoCitlWlFBYWl3YWtJd1B4MVRQQTMrRGw0dGJTdFRyM0x1ZGQ4cmpaTUdQUlhLVSt3anZmaENtRGx5azkweU91bjJDCitsUElUOFcvaWJYTmdSRjF2eitlRm9mak0waFp0TlBPWDRHMTh3d0Q1eTBPVHI3b2J5cUpQS0Fac0paaDZMM1lFCithQVJyMjdSQ29GdjkyaEZ3VnIxODF3QVUrYlZDZWtBPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0LXN2LmRlciBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qtc3YuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NmNmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0LXN2LmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0LXN2LmRocCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qtc3YuZGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MWMyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0LXN2LmRocApAQCAtMCwwICsxLDUgQEAKKy0tLS0tQkVHSU4gREggUEFSQU1FVEVSUy0tLS0tCitNSUdIQW9HQkFQNW1BN29ZaW1FckZVdWxidk5DOFYwSHd5QjYyTkNqNlRaYjZZWEp3RWxDa3NRYzhSeUhua3JZCis5V3gyK2xkdUZxSGpVV2FsZ1ZGN0dtYTdDZlIvcHQrZmlVNkpuMnZXUjJ2N0tUNmhZZVJLc0pyT05KbHRoK05LCitWNy9kNHp5dmxlSi9WU3AwVHV1U3htTU1RNmhHM2k1WWhTR1h5Q2g0aDBwbDRXdS9oZFZUQWdFQworLS0tLS1FTkQgREggUEFSQU1FVEVSUy0tLS0tCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0LXN2LmtleSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qtc3Yua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZGUyNmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0LXN2LmtleQpAQCAtMCwwICsxLDE1IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlDWFFJQkFBS0JnUUN3SjNrbUxMbmswWUVLQ2RKMi9wcmhCV2dCczNKM2x6amtZQnh4blpuM0puc2h0VzJxCitueFIyQjJ5a0tpMTk3dlp2aWxqRWs5NytvU1VQLzFkSndObVUyUWQ1djR4dCt2RVlnbWVnUDljeEE0THN1VGxwCitCK3pza3hkYkduS1JrN0pybUdaai9tRXA1NjJHRGdTNnY0dFZWMkdsU3ZiSzU4YlJ1R1ZDcTJka0Z3SURBUUFCCitBb0dCQUthMEpIV1pIQzlNaVNhNzF0NWY0cWlUR2pPSjVBa0RKb2NSNGJrdjRkWkFKNFRtRXF2R3NuRmtZMDhVCit6MHAvaTk1UStlTEc0ZUR0RllzSEpVOFozNDNvZGt0Szk5QlVKemtEenFXVDlSTXpKNVlreDZMYmxkSnlXNU5OCitJd3ZoRHVXM3JxOGZiQ01yK05HZTljaGMxUmcybHJmZUVKRHdqa2kvZHJCUXM3enBBa0VBM1I2UUVjdVNUN0dxCitKempmVTl1TEQydEhMWVpGTnpTNGRtNFB2d0MyYUs3T2RFT203VmtYRndVeVA5N1Fqd1BWN2ZhYnJRMlFqd0dnCitlaytuVkVkSDlRSkJBTXZ4Rmlja2V6OWVxZ2lNZlpiZlk4dDVJK0R4ejY5WlZHc1B2bC82eGhpVXZneGpSRU03CitFblNjZjg2SHdsQm50ZW9VdE1wdEFLdTdEYnE1aW5QYmtGc0NRQ1Y4RnVSTlpHSktOaFFzR2YvM1NkMjFTLzIxCitzMm9tYjliejFZdUZyV2FWcTc0ZDhlQnVwL0ZwR2htbHhpbFlkeDIrSHFuNWtMWU5pb3p4aitaRHB6a0NRUUM4Cis3VkpBWUtOc1NSM3JYWHJhMFlkNWIzZTFZMDJxZTI2ZzM2elU3Vk9tWWVUTlJRaHYzOEZ4RmFtd2drT1lpUHNWCitKcWwwL1JXcUFWYnVyQU4rNE9BUkFrQjlGd1V0S3loczdGTTROOWJYaStjOG00MmhrQnYrZFNpbTUzNHRQaWpTCitVQ2NDT05MRVFUdjR5amxDT3dUS01WRG9hamtXSDFBMmU3cHNUbUlSK3p3YworLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qtc3YucDEyIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdC1zdi5wMTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdiODQ0MQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qtc3YucDEyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qtc3YucGVtIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdC1zdi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiNDhiMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qtc3YucGVtCkBAIC0wLDAgKzEsMTI2IEBACitleHRlbnNpb25zID0geDUwOXYzCitbIHg1MDl2MyBdCitzdWJqZWN0QWx0TmFtZSA9IEROUzpsb2NhbGhvc3QKK2tleVVzYWdlCT0ga2V5RW5jaXBoZXJtZW50CitleHRlbmRlZEtleVVzYWdlID0gc2VydmVyQXV0aAorc3ViamVjdEtleUlkZW50aWZpZXIgPSBoYXNoCithdXRob3JpdHlLZXlJZGVudGlmaWVyID0ga2V5aWQKK2Jhc2ljQ29uc3RyYWludHMgPSBjcml0aWNhbCxDQTpmYWxzZQorWyByZXEgXQorZGVmYXVsdF9iaXRzICAgICAgICAgICAgICAgICAgICA9IDEwMjQKK2Rpc3Rpbmd1aXNoZWRfbmFtZSAgICAgICAgICAgICAgPSByZXFfRE4KK2RlZmF1bHRfbWQJCQk9IHNoYTI1Ngorc3RyaW5nX21hc2sJCQk9IHV0Zjhvbmx5CitbIHJlcV9ETiBdCitjb3VudHJ5TmFtZSAgICAgICAgICAgICAgICAgICAgID0gIkNvdW50cnkgTmFtZSBpcyBOb3J0aGVybiBOb3doZXJlIgorY291bnRyeU5hbWVfdmFsdWUgICAgICAgICAgICA9IE5OCitvcmdhbml6YXRpb25OYW1lICAgICAgICAgICAgICA9ICJPcmdhbml6YXRpb24gTmFtZSIKK29yZ2FuaXphdGlvbk5hbWVfdmFsdWUgICAgID0gRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZAorY29tbW9uTmFtZSAgICAgICAgICAgICAgICAgICAgICA9ICJDb21tb24gTmFtZSIKK2NvbW1vbk5hbWVfdmFsdWUgICAgICAgICAgICAgID0gbG9jYWxob3N0IAorCitbc29tZXRoaW5nXQorIyBUaGUga2V5CisjIHRoZSBjZXJ0ZmljYXRlCisjIHNvbWUgZGhwYXJhbQorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1hRSUJBQUtCZ1FDd0oza21MTG5rMFlFS0NkSjIvcHJoQldnQnMzSjNsemprWUJ4eG5abjNKbnNodFcycQorbnhSMkIyeWtLaTE5N3ZadmlsakVrOTcrb1NVUC8xZEp3Tm1VMlFkNXY0eHQrdkVZZ21lZ1A5Y3hBNExzdVRscAorQit6c2t4ZGJHbktSazdKcm1HWmovbUVwNTYyR0RnUzZ2NHRWVjJHbFN2Yks1OGJSdUdWQ3EyZGtGd0lEQVFBQgorQW9HQkFLYTBKSFdaSEM5TWlTYTcxdDVmNHFpVEdqT0o1QWtESm9jUjRia3Y0ZFpBSjRUbUVxdkdzbkZrWTA4VQorejBwL2k5NVErZUxHNGVEdEZZc0hKVThaMzQzb2RrdEs5OUJVSnprRHpxV1Q5Uk16SjVZa3g2TGJsZEp5VzVOTgorSXd2aER1VzNycThmYkNNcitOR2U5Y2hjMVJnMmxyZmVFSkR3amtpL2RyQlFzN3pwQWtFQTNSNlFFY3VTVDdHcQorSnpqZlU5dUxEMnRITFlaRk56UzRkbTRQdndDMmFLN09kRU9tN1ZrWEZ3VXlQOTdRandQVjdmYWJyUTJRandHZworZWsrblZFZEg5UUpCQU12eEZpY2tlejllcWdpTWZaYmZZOHQ1SStEeHo2OVpWR3NQdmwvNnhoaVV2Z3hqUkVNNworRW5TY2Y4Nkh3bEJudGVvVXRNcHRBS3U3RGJxNWluUGJrRnNDUUNWOEZ1Uk5aR0pLTmhRc0dmLzNTZDIxUy8yMQorczJvbWI5YnoxWXVGcldhVnE3NGQ4ZUJ1cC9GcEdobWx4aWxZZHgyK0hxbjVrTFlOaW96eGorWkRwemtDUVFDOAorN1ZKQVlLTnNTUjNyWFhyYTBZZDViM2UxWTAycWUyNmczNnpVN1ZPbVllVE5SUWh2MzhGeEZhbXdna09ZaVBzVgorSnFsMC9SV3FBVmJ1ckFOKzRPQVJBa0I5RndVdEt5aHM3Rk00TjliWGkrYzhtNDJoa0J2K2RTaW01MzR0UGlqUworVUNjQ09OTEVRVHY0eWpsQ093VEtNVkRvYWprV0gxQTJlN3BzVG1JUit6d2MKKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6CisgICAgICAgICAgICAwYjo5ODo5NDpmOTo3Yzo2YQorICAgICAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOgorICAgICAgICAgICAgY291bnRyeU5hbWUgICAgICAgICAgICAgICA9IE5OCisgICAgICAgICAgICBvcmdhbml6YXRpb25OYW1lICAgICAgICAgID0gRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZAorICAgICAgICAgICAgY29tbW9uTmFtZSAgICAgICAgICAgICAgICA9IE5vdGhlcm4gTm93aGVyZSBUcnVzdCBBbmNob3IKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IE1heSAyNyAyMTozNzoxMSAyMDEwIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogQXVnIDEzIDIxOjM3OjExIDIwMTggR01UCisgICAgICAgIFN1YmplY3Q6CisgICAgICAgICAgICBjb3VudHJ5TmFtZSAgICAgICAgICAgICAgID0gTk4KKyAgICAgICAgICAgIG9yZ2FuaXphdGlvbk5hbWUgICAgICAgICAgPSBFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3VkCisgICAgICAgICAgICBjb21tb25OYW1lICAgICAgICAgICAgICAgID0gbG9jYWxob3N0CisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMTAyNCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6YjA6Mjc6Nzk6MjY6MmM6Yjk6ZTQ6ZDE6ODE6MGE6MDk6ZDI6NzY6ZmU6CisgICAgICAgICAgICAgICAgICAgIDlhOmUxOjA1OjY4OjAxOmIzOjcyOjc3Ojk3OjM4OmU0OjYwOjFjOjcxOjlkOgorICAgICAgICAgICAgICAgICAgICA5OTpmNzoyNjo3YjoyMTpiNTo2ZDphYTo5ZjoxNDo3NjowNzo2YzphNDoyYToKKyAgICAgICAgICAgICAgICAgICAgMmQ6N2Q6ZWU6ZjY6NmY6OGE6NTg6YzQ6OTM6ZGU6ZmU6YTE6MjU6MGY6ZmY6CisgICAgICAgICAgICAgICAgICAgIDU3OjQ5OmMwOmQ5Ojk0OmQ5OjA3Ojc5OmJmOjhjOjZkOmZhOmYxOjE4OjgyOgorICAgICAgICAgICAgICAgICAgICA2NzphMDozZjpkNzozMTowMzo4MjplYzpiOTozOTo2OTowNzplYzplYzo5MzoKKyAgICAgICAgICAgICAgICAgICAgMTc6NWI6MWE6NzI6OTE6OTM6YjI6NmI6OTg6NjY6NjM6ZmU6NjE6Mjk6ZTc6CisgICAgICAgICAgICAgICAgICAgIGFkOjg2OjBlOjA0OmJhOmJmOjhiOjU1OjU3OjYxOmE1OjRhOmY2OmNhOmU3OgorICAgICAgICAgICAgICAgICAgICBjNjpkMTpiODo2NTo0MjphYjo2Nzo2NDoxNworICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lOiAKKyAgICAgICAgICAgICAgICBETlM6bG9jYWxob3N0CisgICAgICAgICAgICBYNTA5djMgS2V5IFVzYWdlOiAKKyAgICAgICAgICAgICAgICBLZXkgRW5jaXBoZXJtZW50CisgICAgICAgICAgICBYNTA5djMgRXh0ZW5kZWQgS2V5IFVzYWdlOiAKKyAgICAgICAgICAgICAgICBUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbgorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEJDOjY5Ojg2Ojg0OjcwOjNBOkFEOkRFOjA4OjJBOjcwOkM2OjNCOjQ3OjhDOjExOjNGOkUwOjlBOjZECisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpBRDozRTpFMjozOTowNzpCODo1QzpBQToyNjo5MDo5NDo0QzoyNjo2OToyMTo4MzpFMjo0RTozNjo5NAorCisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IGNyaXRpY2FsCisgICAgICAgICAgICAgICAgQ0E6RkFMU0UKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgN2I6ZjA6YjA6YTA6ZDk6ZDA6OTE6Mzg6OWI6ZmU6Y2Y6Nzg6Yzg6ZDY6MzA6NWQ6ODc6OWQ6CisgICAgICAgIGIzOmI5OjZlOjhiOjVhOjczOjc0OjkzOmNiOjMwOjQ5OmQxOjAwOjc5OjlkOjVhOmMyOjcxOgorICAgICAgICBhMzo5Mzo1ZjpkZTpkMzo1YTowYzpmYjo2ZDo0MTo4Mzo4OToxYjo0ZjowZDoxYzo2NTowYzoKKyAgICAgICAgMWE6MGM6MGY6OTY6Nzk6NjI6OTA6ZTE6NzQ6MDQ6ZGQ6YzY6ZDg6Y2Y6MGY6NWY6MGY6Mjg6CisgICAgICAgIDg3OmQ3Ojg2OjU2OjkwOmI0OmQwOjg4OjgwOmYxOmE3OmNkOmZkOjBiOjEzOjU4OmJiOjZkOgorICAgICAgICBlNjphYjo0NDpmNjo5YjpkNjpjYzpjNzpkYjozZDozYTo5MDpjNDoyMDo3MjpmNDozODozODoKKyAgICAgICAgYzA6ZWY6ODA6MWQ6NjA6M2Y6NGU6MzA6NDA6MTE6NTY6Mjk6NzA6YWE6MTc6OTE6OTA6NWY6CisgICAgICAgIDcwOjBiOjg5OjUxOmFmOjE3OmE4OmVkOjIwOjRlOjc2OmJiOmNmOmE4Ojg4OjlhOjI1OjBmOgorICAgICAgICAzYTo5NjoyNjoxNzo1MDoyYTphZjpmMzo4YjoyMTo5YzpjZjpmZjpmOToyMDpmYzpmZTpjMDoKKyAgICAgICAgMzc6OTU6Yzc6Y2Q6MGQ6N2E6NTM6ZDk6MjY6MTI6Mzg6MmM6ZjY6MDM6OTU6MWI6ZGE6ZDA6CisgICAgICAgIDA4OmY3OjMyOjkxOjA3OmE3OjM1OjBjOjE0OjAwOjQ0OmM3OjQzOmZiOjIzOjJlOjE0OjQ0OgorICAgICAgICBlNjplZTphOTpjOToyMDozNzowOTpiODphZToyMTo0Zjo0YjpiNzo4Njo0ZDplMzo0MTo4NDoKKyAgICAgICAgMTU6NGU6MWE6Mjk6MDA6MDM6YTg6OTI6OTk6M2M6NzU6ZWE6NDM6MGY6ZTM6MmI6Zjc6MTc6CisgICAgICAgIGIxOjFiOjg3OjgwOjA0OmQzOmE3OjczOmIxOjVlOjg1OjM4OjdkOjg5OjAxOjE2OjE5OmY2OgorICAgICAgICBjNDplMToxYjo3NQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEUVRDQ0FpbWdBd0lCQWdJR0M1aVUrWHhxTUEwR0NTcUdTSWIzRFFFQkJRVUFNR2N4Q3pBSkJnTlZCQVlUCitBazVPTVRFd0x3WURWUVFLRENoRlpHVnNJRU4xY213Z1FYSmpkR2xqSUVsc2JIVmthWFZ0SUZKbGMyVmhjbU5vCitJRU5zYjNWa01TVXdJd1lEVlFRRERCeE9iM1JvWlhKdUlFNXZkMmhsY21VZ1ZISjFjM1FnUVc1amFHOXlNQjRYCitEVEV3TURVeU56SXhNemN4TVZvWERURTRNRGd4TXpJeE16Y3hNVm93VkRFTE1Ba0dBMVVFQmhNQ1RrNHhNVEF2CitCZ05WQkFvTUtFVmtaV3dnUTNWeWJDQkJjbU4wYVdNZ1NXeHNkV1JwZFcwZ1VtVnpaV0Z5WTJnZ1EyeHZkV1F4CitFakFRQmdOVkJBTU1DV3h2WTJGc2FHOXpkRENCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBCitzQ2Q1Sml5NTVOR0JDZ25TZHY2YTRRVm9BYk55ZDVjNDVHQWNjWjJaOXlaN0liVnRxcDhVZGdkc3BDb3RmZTcyCitiNHBZeEpQZS9xRWxELzlYU2NEWmxOa0hlYitNYmZyeEdJSm5vRC9YTVFPQzdMazVhUWZzN0pNWFd4cHlrWk95CithNWhtWS81aEtlZXRoZzRFdXIrTFZWZGhwVXIyeXVmRzBiaGxRcXRuWkJjQ0F3RUFBYU9CaVRDQmhqQVVCZ05WCitIUkVFRFRBTGdnbHNiMk5oYkdodmMzUXdDd1lEVlIwUEJBUURBZ1VnTUJNR0ExVWRKUVFNTUFvR0NDc0dBUVVGCitCd01CTUIwR0ExVWREZ1FXQkJTOGFZYUVjRHF0M2dncWNNWTdSNHdSUCtDYWJUQWZCZ05WSFNNRUdEQVdnQlN0CitQdUk1QjdoY3FpYVFsRXdtYVNHRDRrNDJsREFNQmdOVkhSTUJBZjhFQWpBQU1BMEdDU3FHU0liM0RRRUJCUVVBCitBNElCQVFCNzhMQ2cyZENST0p2K3ozakkxakJkaDUyenVXNkxXbk4wazhzd1NkRUFlWjFhd25HamsxL2UwMW9NCisrMjFCZzRrYlR3MGNaUXdhREErV2VXS1E0WFFFM2NiWXp3OWZEeWlIMTRaV2tMVFFpSUR4cDgzOUN4Tll1MjNtCitxMFQybTliTXg5czlPcERFSUhMME9EakE3NEFkWUQ5T01FQVJWaWx3cWhlUmtGOXdDNGxScnhlbzdTQk9kcnZQCitxSWlhSlE4NmxpWVhVQ3F2ODRzaG5NLy8rU0Q4L3NBM2xjZk5EWHBUMlNZU09DejJBNVViMnRBSTl6S1JCNmMxCitEQlFBUk1kRCt5TXVGRVRtN3FuSklEY0p1SzRoVDB1M2hrM2pRWVFWVGhvcEFBT29rcGs4ZGVwREQrTXI5eGV4CitHNGVBQk5PbmM3RmVoVGg5aVFFV0dmYkU0UnQxCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIERIIFBBUkFNRVRFUlMtLS0tLQorTUlHSEFvR0JBUDVtQTdvWWltRXJGVXVsYnZOQzhWMEh3eUI2Mk5DajZUWmI2WVhKd0VsQ2tzUWM4UnlIbmtyWQorOVd4MitsZHVGcUhqVVdhbGdWRjdHbWE3Q2ZSL3B0K2ZpVTZKbjJ2V1IydjdLVDZoWWVSS3NKck9OSmx0aCtOSworVjcvZDR6eXZsZUovVlNwMFR1dVN4bU1NUTZoRzNpNVloU0dYeUNoNGgwcGw0V3UvaGRWVEFnRUMKKy0tLS0tRU5EIERIIFBBUkFNRVRFUlMtLS0tLQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdC1zdi5wcm0gYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0LXN2LnBybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzUxMDI1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdC1zdi5wcm0KQEAgLTAsMCArMSwyNSBAQAorZXh0ZW5zaW9ucyA9IHg1MDl2MworWyB4NTA5djMgXQorc3ViamVjdEFsdE5hbWUgPSBETlM6bG9jYWxob3N0CitrZXlVc2FnZQk9IGtleUVuY2lwaGVybWVudAorZXh0ZW5kZWRLZXlVc2FnZSA9IHNlcnZlckF1dGgKK3N1YmplY3RLZXlJZGVudGlmaWVyID0gaGFzaAorYXV0aG9yaXR5S2V5SWRlbnRpZmllciA9IGtleWlkCitiYXNpY0NvbnN0cmFpbnRzID0gY3JpdGljYWwsQ0E6ZmFsc2UKK1sgcmVxIF0KK2RlZmF1bHRfYml0cyAgICAgICAgICAgICAgICAgICAgPSAxMDI0CitkaXN0aW5ndWlzaGVkX25hbWUgICAgICAgICAgICAgID0gcmVxX0ROCitkZWZhdWx0X21kCQkJPSBzaGEyNTYKK3N0cmluZ19tYXNrCQkJPSB1dGY4b25seQorWyByZXFfRE4gXQorY291bnRyeU5hbWUgICAgICAgICAgICAgICAgICAgICA9ICJDb3VudHJ5IE5hbWUgaXMgTm9ydGhlcm4gTm93aGVyZSIKK2NvdW50cnlOYW1lX3ZhbHVlICAgICAgICAgICAgPSBOTgorb3JnYW5pemF0aW9uTmFtZSAgICAgICAgICAgICAgPSAiT3JnYW5pemF0aW9uIE5hbWUiCitvcmdhbml6YXRpb25OYW1lX3ZhbHVlICAgICA9IEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQKK2NvbW1vbk5hbWUgICAgICAgICAgICAgICAgICAgICAgPSAiQ29tbW9uIE5hbWUiCitjb21tb25OYW1lX3ZhbHVlICAgICAgICAgICAgICA9IGxvY2FsaG9zdCAKKworW3NvbWV0aGluZ10KKyMgVGhlIGtleQorIyB0aGUgY2VydGZpY2F0ZQorIyBzb21lIGRocGFyYW0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qubm4tc3YuY3JsIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdC5ubi1zdi5jcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0MDgzMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qubm4tc3YuY3JsCkBAIC0wLDAgKzEsMTMgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQjlEQ0IzUUlCQVRBTkJna3Foa2lHOXcwQkFRVUZBREJuTVFzd0NRWURWUVFHRXdKT1RqRXhNQzhHQTFVRQorQ2d3b1JXUmxiQ0JEZFhKc0lFRnlZM1JwWXlCSmJHeDFaR2wxYlNCU1pYTmxZWEpqYUNCRGJHOTFaREVsTUNNRworQTFVRUF3d2NUbTkwYUdWeWJpQk9iM2RvWlhKbElGUnlkWE4wSUVGdVkyaHZjaGNOTVRBd05USTNNakV6TnpJMAorV2hjTk1UQXdOakkyTWpFek56STBXakF5TUJjQ0JndVlsUGw4YWhjTk1UQXdOVEkzTWpFek56RXhXakFYQWdZTAorbUpUN2VGOFhEVEV3TURVeU56SXhNemN5TkZxZ0RqQU1NQW9HQTFVZEZBUURBZ0VCTUEwR0NTcUdTSWIzRFFFQgorQlFVQUE0SUJBUUNvOG1CcGtacWlZV0pNa0pzWjFxcXFPcVZSbmU0aVdoUE9KU0RHRGd4b0NUQTRSZ04xc1FVdgorL014TzJMZ1NFeW85R29wQ3BnV2xoaWcrd3pRbVlDVWY3SER3OHNMekNsVUc0WFVLUlNXMlVxNnE1QkY1ZndJdQordkhrc2kvUklQZGNNeC8rM2RHSUZlb2NjWlpkNW83eGdyeUd5U0FONndIeTZsWTdMZWVXN2FjcGFEVTQzRDd5aQord1FpcEJjenJsSC9qSkR5NmphNUZGQnJBdnZ5UmM0ekMyWDEvUmgzZjB2TnFuWDlQTEM1MjRIeFJtYXNDS1lNOAordmdjUGJ2SjdaL0hSR09ZUnU5dlRwNVgwK2xQUGoyNFdFOHZYM0FaZGp5STZxcGluSHpyc1llbi9xczZjMHYzaworRktZdXp1VmxVQXkrNWFaRGh4K0dIcitLVyt5MlQvb2wKKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qubm4tc3YuY3J0IGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdC5ubi1zdi5jcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyYWVlYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qubm4tc3YuY3J0CkBAIC0wLDAgKzEsODEgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjoKKyAgICAgICAgICAgIDBiOjk4Ojk0OmZiOjc4OjVmCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6CisgICAgICAgICAgICBjb3VudHJ5TmFtZSAgICAgICAgICAgICAgID0gTk4KKyAgICAgICAgICAgIG9yZ2FuaXphdGlvbk5hbWUgICAgICAgICAgPSBFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3VkCisgICAgICAgICAgICBjb21tb25OYW1lICAgICAgICAgICAgICAgID0gTm90aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogTWF5IDI3IDIxOjM3OjI0IDIwMTAgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBBdWcgMTMgMjE6Mzc6MjQgMjAxOCBHTVQKKyAgICAgICAgU3ViamVjdDoKKyAgICAgICAgICAgIGNvdW50cnlOYW1lICAgICAgICAgICAgICAgPSBOTgorICAgICAgICAgICAgb3JnYW5pemF0aW9uTmFtZSAgICAgICAgICA9IEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQKKyAgICAgICAgICAgIGNvbW1vbk5hbWUgICAgICAgICAgICAgICAgPSBsb2NhbGhvc3Qubm4KKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgxMDI0IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDpkMzpkNDo0ZTpkYjo2Mzo1YzozZjozYTozYTo1ZTozODowOTo5NDplNjoKKyAgICAgICAgICAgICAgICAgICAgNGQ6NzA6OWQ6MGQ6YWY6NDk6ZTY6ODI6NWQ6MDc6Yjc6ZjU6Y2Q6YTA6ZGY6CisgICAgICAgICAgICAgICAgICAgIGFmOjcxOmYxOmNmOmJmOmQ1OjlhOmJkOmFmOjdjOjc4OjVkOjU1OjNmOjE0OgorICAgICAgICAgICAgICAgICAgICBiZDpiYjoyYzowZTo3Mzo5ZDpkNjo4Mjo5YTpkNTplNjpmNjoyMTo1ZDowODoKKyAgICAgICAgICAgICAgICAgICAgOTI6YTI6NzE6NWY6ODA6NWY6NWM6Y2U6ZjA6YzI6Mzc6Mzc6Nzk6MGY6NGQ6CisgICAgICAgICAgICAgICAgICAgIDNkOmQ0OmYyOjgwOjZkOjQ3OjM2OjQ1OmQxOmQyOjhiOjdhOjJlOjEyOjcxOgorICAgICAgICAgICAgICAgICAgICA0Yjo0Nzo4NjpmNTo4Yzo5OTphZjplNzowZTpjZjpiNTpjOTo0ZDo3YTo3NToKKyAgICAgICAgICAgICAgICAgICAgZjc6YjI6NzQ6MGM6NDE6ZTM6YWI6YmI6MmM6OWQ6NmY6NTQ6MDg6MTM6NWE6CisgICAgICAgICAgICAgICAgICAgIDNhOmVmOjdjOjI3OmY3OjNmOjBiOjBiOjcxCisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEFsdGVybmF0aXZlIE5hbWU6IAorICAgICAgICAgICAgICAgIEROUzpsb2NhbGhvc3Qubm4KKyAgICAgICAgICAgIFg1MDl2MyBLZXkgVXNhZ2U6IAorICAgICAgICAgICAgICAgIEtleSBFbmNpcGhlcm1lbnQKKyAgICAgICAgICAgIFg1MDl2MyBFeHRlbmRlZCBLZXkgVXNhZ2U6IAorICAgICAgICAgICAgICAgIFRMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgODE6MjY6Rjk6NzU6Q0M6OUM6MkQ6M0M6MzY6NjQ6Njg6NDE6Rjc6MDc6M0M6NjY6ODY6RTU6NEE6QzEKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkFEOjNFOkUyOjM5OjA3OkI4OjVDOkFBOjI2OjkwOjk0OjRDOjI2OjY5OjIxOjgzOkUyOjRFOjM2Ojk0CisKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogY3JpdGljYWwKKyAgICAgICAgICAgICAgICBDQTpGQUxTRQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICA2NTowNTo4Yzo0ODoxNDo1ODo4YzoxYTpkNDo5NTo2NzoxYzoyOTo1MjplZDo1YTo2ZToxNDoKKyAgICAgICAgNDE6YmM6MmI6MTY6MjA6YzQ6ODk6M2E6NmU6Y2I6YzE6ZmY6YWI6NjE6Nzk6NWY6Y2U6Mjc6CisgICAgICAgIDkzOjNjOmZmOjI5OjdhOjI1OjY4OjAwOjI3OjA0OmYzOjY4OjE3OjMwOmYwOmZkOmZmOjA5OgorICAgICAgICAwZToxNToyYToyNTpiMTo0NToxODo5MzphYjoxMjo4ZTowYzoxMzoxMTo5YTpiODphNDo3NToKKyAgICAgICAgZDA6MTc6MWI6Y2E6ZjI6NjY6NmI6NzM6MTU6ZGQ6OGI6YmI6MzQ6ZDY6NzA6ZGM6MzQ6MWI6CisgICAgICAgIGU3OjdhOjMwOmVhOjUwOjUwOjJmOjg4OjY3OmIzOmY4OmIzOjU1OjYyOjQ0OjdlOjNlOmRmOgorICAgICAgICA1OTo0ZjphODo1Nzo4Mzo0MDo5ZjpiZjo1MjpiZjpmZDoyYzoxODo2ZTpiZDowYzo0MTpiNzoKKyAgICAgICAgNzg6MWM6OWI6ZmE6YzQ6ZmY6YzM6MmI6NDY6YTQ6OGY6MGM6MTk6YTc6M2Q6NzU6ODE6Mjk6CisgICAgICAgIDZiOmNmOjA3OmYwOjFkOjY1OmQ0OjBlOjE5OjUxOjg3OjkyOmE4OjNkOjdlOjgwOjA0Ojg0OgorICAgICAgICBhZDo1ZTo0ZTpiNjplZjo5YTowMjpjMzo4NDo5NTplYzpjMzplODphMTo2OToxZjo0MjpjYjoKKyAgICAgICAgZGE6NjM6MWE6MzU6NmY6ZDA6YmE6NjI6OWU6NzM6MzY6NjM6NTg6MGY6Y2M6MjU6Yzg6NTk6CisgICAgICAgIDczOmRmOjNiOmMyOmI5OjVhOmRhOjNkOmUxOjNmOjBhOjFmOjBmOjQxOmM0Ojg4OjJkOjkyOgorICAgICAgICAwNjo4ODpkNDo1NDo4MTplMToxMjo1Nzo1MzphYjo2YjpmODpjODo5MDozZTozMDo0YzpmNToKKyAgICAgICAgNzI6Y2Y6ZjA6ZDQ6MTg6NzA6YzE6Nzg6ODU6MzA6OWM6ZmU6OTQ6ZjQ6MWI6YzI6NmM6MTQ6CisgICAgICAgIDQ5OjdhOjBlOjI3CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURSekNDQWkrZ0F3SUJBZ0lHQzVpVSszaGZNQTBHQ1NxR1NJYjNEUUVCQlFVQU1HY3hDekFKQmdOVkJBWVQKK0FrNU9NVEV3THdZRFZRUUtEQ2hGWkdWc0lFTjFjbXdnUVhKamRHbGpJRWxzYkhWa2FYVnRJRkpsYzJWaGNtTm8KK0lFTnNiM1ZrTVNVd0l3WURWUVFEREJ4T2IzUm9aWEp1SUU1dmQyaGxjbVVnVkhKMWMzUWdRVzVqYUc5eU1CNFgKK0RURXdNRFV5TnpJeE16Y3lORm9YRFRFNE1EZ3hNekl4TXpjeU5Gb3dWekVMTUFrR0ExVUVCaE1DVGs0eE1UQXYKK0JnTlZCQW9NS0VWa1pXd2dRM1Z5YkNCQmNtTjBhV01nU1d4c2RXUnBkVzBnVW1WelpXRnlZMmdnUTJ4dmRXUXgKK0ZUQVRCZ05WQkFNTURHeHZZMkZzYUc5emRDNXViakNCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0MKK2dZRUEwOVJPMjJOY1B6bzZYamdKbE9aTmNKME5yMG5tZ2wwSHQvWE5vTit2Y2ZIUHY5V2F2YTk4ZUYxVlB4UzkKK3V5d09jNTNXZ3ByVjV2WWhYUWlTb25GZmdGOWN6dkRDTnpkNUQwMDkxUEtBYlVjMlJkSFNpM291RW5GTFI0YjEKK2pKbXY1dzdQdGNsTmVuWDNzblFNUWVPcnV5eWRiMVFJRTFvNjczd245ejhMQzNFQ0F3RUFBYU9CakRDQmlUQVgKK0JnTlZIUkVFRURBT2dneHNiMk5oYkdodmMzUXVibTR3Q3dZRFZSMFBCQVFEQWdVZ01CTUdBMVVkSlFRTU1Bb0cKK0NDc0dBUVVGQndNQk1CMEdBMVVkRGdRV0JCU0JKdmwxekp3dFBEWmthRUgzQnp4bWh1Vkt3VEFmQmdOVkhTTUUKK0dEQVdnQlN0UHVJNUI3aGNxaWFRbEV3bWFTR0Q0azQybERBTUJnTlZIUk1CQWY4RUFqQUFNQTBHQ1NxR1NJYjMKK0RRRUJCUVVBQTRJQkFRQmxCWXhJRkZpTUd0U1ZaeHdwVXUxYWJoUkJ2Q3NXSU1TSk9tN0x3ZityWVhsZnppZVQKK1BQOHBlaVZvQUNjRTgyZ1hNUEQ5L3drT0ZTb2xzVVVZazZzU2pnd1RFWnE0cEhYUUZ4dks4bVpyY3hYZGk3czAKKzFuRGNOQnZuZWpEcVVGQXZpR2V6K0xOVllrUitQdDlaVDZoWGcwQ2Z2MUsvL1N3WWJyME1RYmQ0SEp2NnhQL0QKK0swYWtqd3dacHoxMWdTbHJ6d2Z3SFdYVURobFJoNUtvUFg2QUJJU3RYazYyNzVvQ3c0U1Y3TVBvb1drZlFzdmEKK1l4bzFiOUM2WXA1ek5tTllEOHdseUZsejN6dkN1VnJhUGVFL0NoOFBRY1NJTFpJR2lOUlVnZUVTVjFPcmEvakkKK2tENHdUUFZ5ei9EVUdIREJlSVV3blA2VTlCdkNiQlJKZWc0bgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdC5ubi1zdi5jc3IgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0Lm5uLXN2LmNzcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDI0MzQzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdC5ubi1zdi5jc3IKQEAgLTAsMCArMSwxMSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KK01JSUJsekNDQVFBQ0FRQXdWekVMTUFrR0ExVUVCaE1DVGs0eE1UQXZCZ05WQkFvTUtFVmtaV3dnUTNWeWJDQkIKK2NtTjBhV01nU1d4c2RXUnBkVzBnVW1WelpXRnlZMmdnUTJ4dmRXUXhGVEFUQmdOVkJBTU1ER3h2WTJGc2FHOXoKK2RDNXViakNCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBMDlSTzIyTmNQem82WGpnSmxPWk4KK2NKME5yMG5tZ2wwSHQvWE5vTit2Y2ZIUHY5V2F2YTk4ZUYxVlB4Uzl1eXdPYzUzV2dwclY1dlloWFFpU29uRmYKK2dGOWN6dkRDTnpkNUQwMDkxUEtBYlVjMlJkSFNpM291RW5GTFI0YjFqSm12NXc3UHRjbE5lblgzc25RTVFlT3IKK3V5eWRiMVFJRTFvNjczd245ejhMQzNFQ0F3RUFBYUFBTUEwR0NTcUdTSWIzRFFFQkN3VUFBNEdCQU01UGVuREMKK0F0RGh6ZFZLclg2RGNKSU5XY2s1WEZFbnZXUWtzU1lVN2lEZWlRVnljUXhSK0xZS0daaXkwNHUrOUMrTU43ZXEKK0ptSEFJaSs4OHI3L1phR0pMdWpxU1VPSm44b2NaK3Z3aEpPd2gyWEJoaExhQ2pJVy9IMDVnMGFObGs4MFllNm0KK09BOURDSVpVSU5GMGxEUWFKQ3BLWHh3TlZjejRSaWZwNS85VAorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0Lm5uLXN2LmRlciBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qubm4tc3YuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Y2YwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0Lm5uLXN2LmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0Lm5uLXN2LmRocCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qubm4tc3YuZGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNTQ4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0Lm5uLXN2LmRocApAQCAtMCwwICsxLDUgQEAKKy0tLS0tQkVHSU4gREggUEFSQU1FVEVSUy0tLS0tCitNSUdIQW9HQkFQcnRFVlBoWmZFY3pCOUpuV1hibG43OVluVGgvVjZlaFhNV2U0MTR3eW4vVlQxb3cyNXNMRWV2CitIMitlVDg0YURwNWUrVGZCU0ZqQTZvcjk2L2x5UXZzZ0FFK2NFNmY2dXV3OUFwVkcyTUsrQkNuNHNueEhCYjZHCitMRlFmKzlxSFo0QkVrcEJMNjBwMWZrR3U4Qk0xd1hHWEVhZVloZ0d1bU5BOWZtNVlKcmw3QWdFQworLS0tLS1FTkQgREggUEFSQU1FVEVSUy0tLS0tCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0Lm5uLXN2LmtleSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qubm4tc3Yua2V5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMWNjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0Lm5uLXN2LmtleQpAQCAtMCwwICsxLDE1IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlDWGdJQkFBS0JnUURUMUU3Ylkxdy9PanBlT0FtVTVrMXduUTJ2U2VhQ1hRZTM5YzJnMzY5eDhjKy8xWnE5CityM3g0WFZVL0ZMMjdMQTV6bmRhQ210WG05aUZkQ0pLaWNWK0FYMXpPOE1JM04za1BUVDNVOG9CdFJ6WkYwZEtMCitlaTRTY1V0SGh2V01tYS9uRHMrMXlVMTZkZmV5ZEF4QjQ2dTdMSjF2VkFnVFdqcnZmQ2YzUHdzTGNRSURBUUFCCitBb0dCQUxyMUhReEFxOEFhTWozS0U1clprT3Vka2VCdHh3YXorUVlCNmhUY2w4cG5jOGFLVG1Ld0tabEtOdHpQCisvNHpkRzN3cmlKSUkrbFU0VXNYN3RQK3VOR3hLeEFMckRRUnVCUHlpOFhRZlVUMW5KdGg2cWtwOGczVi9peGZFCitZYWgzb2Q5ZEwzK3hzT0gyOFJLS1VDNWtqbW5OdXBPOUtRWjYvQ3lZZlVIQUVHK3BBa0VBK1BQKzdGSXZwUFErCis3YmJHNElJcW43UUtWeEdidGFGWThwZExuc1Vrcm5JcXdFSWJab1UxMmlFS201cU1vWE52MzBHa25YcnZ4VTUzCit0ZElaVTVaMjh3SkJBTm5UVE1iL2phYytRMVNhcW1XUW5ycGNtdnVQWi84eFJNNnhlU0poK01EcEs3NjhXcFllCituaXZIdmluUWpRWkJRbU5NM0lQWWJKMzNuVEFkSnlsbUZRc0NRUUNuNGNyQVRQQUtPaGVSc0pkTzRSaWpXQU05CitFZ2ZDSlV0WlZNUFBEcjBjMHFxWHVqekdGd0RvMXkxVEg1YkViWmM4cEFUQm1oekZIcFJGemFmOG9WUVhBa0FYCitIY2g1R2VmRGh1VUlWbjJjMTdNd25lRklyeGhmU2JBK3F6RHF5RERvOEJYWFlRL1AvS0hXalpVTnhQY2lZY3lVCiswelJYdmFFUlJwVGs1VU1ocnBhdkFrRUF5NFp5aEgxVVZpdVdzbVRRYVJqYzVtRHM4YVhrZDJ5ODVBN2puZldBCis4cjdDTCtzT2U0VFUxL0NWeUpmMkZKYXFIZkQvR0c2ZnFxZUZvSHVhcXdUeWl3PT0KKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0Lm5uLXN2LnBlbSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qubm4tc3YucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzI1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0Lm5uLXN2LnBlbQpAQCAtMCwwICsxLDEyNiBAQAorZXh0ZW5zaW9ucyA9IHg1MDl2MworWyB4NTA5djMgXQorc3ViamVjdEFsdE5hbWUgPSBETlM6bG9jYWxob3N0Lm5uCitrZXlVc2FnZQk9IGtleUVuY2lwaGVybWVudAorZXh0ZW5kZWRLZXlVc2FnZSA9IHNlcnZlckF1dGgKK3N1YmplY3RLZXlJZGVudGlmaWVyID0gaGFzaAorYXV0aG9yaXR5S2V5SWRlbnRpZmllciA9IGtleWlkCitiYXNpY0NvbnN0cmFpbnRzID0gY3JpdGljYWwsQ0E6ZmFsc2UKK1sgcmVxIF0KK2RlZmF1bHRfYml0cyAgICAgICAgICAgICAgICAgICAgPSAxMDI0CitkaXN0aW5ndWlzaGVkX25hbWUgICAgICAgICAgICAgID0gcmVxX0ROCitkZWZhdWx0X21kCQkJPSBzaGEyNTYKK3N0cmluZ19tYXNrCQkJPSB1dGY4b25seQorWyByZXFfRE4gXQorY291bnRyeU5hbWUgICAgICAgICAgICAgICAgICAgICA9ICJDb3VudHJ5IE5hbWUgaXMgTm9ydGhlcm4gTm93aGVyZSIKK2NvdW50cnlOYW1lX3ZhbHVlICAgICAgICAgICAgPSBOTgorb3JnYW5pemF0aW9uTmFtZSAgICAgICAgICAgICAgPSAiT3JnYW5pemF0aW9uIE5hbWUiCitvcmdhbml6YXRpb25OYW1lX3ZhbHVlICAgICA9IEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQKK2NvbW1vbk5hbWUgICAgICAgICAgICAgICAgICAgICAgPSAiQ29tbW9uIE5hbWUiCitjb21tb25OYW1lX3ZhbHVlICAgICAgICAgICAgICA9IGxvY2FsaG9zdC5ubiAKKworW3NvbWV0aGluZ10KKyMgVGhlIGtleQorIyB0aGUgY2VydGZpY2F0ZQorIyBzb21lIGRocGFyYW0KKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNYZ0lCQUFLQmdRRFQxRTdiWTF3L09qcGVPQW1VNWsxd25RMnZTZWFDWFFlMzljMmczNjl4OGMrLzFacTkKK3IzeDRYVlUvRkwyN0xBNXpuZGFDbXRYbTlpRmRDSktpY1YrQVgxek84TUkzTjNrUFRUM1U4b0J0UnpaRjBkS0wKK2VpNFNjVXRIaHZXTW1hL25EcysxeVUxNmRmZXlkQXhCNDZ1N0xKMXZWQWdUV2pydmZDZjNQd3NMY1FJREFRQUIKK0FvR0JBTHIxSFF4QXE4QWFNajNLRTVyWmtPdWRrZUJ0eHdheitRWUI2aFRjbDhwbmM4YUtUbUt3S1psS050elAKKy80emRHM3dyaUpJSStsVTRVc1g3dFArdU5HeEt4QUxyRFFSdUJQeWk4WFFmVVQxbkp0aDZxa3A4ZzNWL2l4ZkUKK1lhaDNvZDlkTDMreHNPSDI4UktLVUM1a2ptbk51cE85S1FaNi9DeVlmVUhBRUcrcEFrRUErUFArN0ZJdnBQUSsKKzdiYkc0SUlxbjdRS1Z4R2J0YUZZOHBkTG5zVWtybklxd0VJYlpvVTEyaUVLbTVxTW9YTnYzMEdrblhydnhVNTMKK3RkSVpVNVoyOHdKQkFOblRUTWIvamFjK1ExU2FxbVdRbnJwY212dVBaLzh4Uk02eGVTSmgrTURwSzc2OFdwWWUKK25pdkh2aW5RalFaQlFtTk0zSVBZYkozM25UQWRKeWxtRlFzQ1FRQ240Y3JBVFBBS09oZVJzSmRPNFJpaldBTTkKK0VnZkNKVXRaVk1QUERyMGMwcXFYdWp6R0Z3RG8xeTFUSDViRWJaYzhwQVRCbWh6RkhwUkZ6YWY4b1ZRWEFrQVgKK0hjaDVHZWZEaHVVSVZuMmMxN013bmVGSXJ4aGZTYkErcXpEcXlERG84QlhYWVEvUC9LSFdqWlVOeFBjaVljeVUKKzB6Ulh2YUVSUnBUazVVTWhycGF2QWtFQXk0WnloSDFVVml1V3NtVFFhUmpjNW1EczhhWGtkMnk4NUE3am5mV0EKKzhyN0NMK3NPZTRUVTEvQ1Z5SmYyRkphcUhmRC9HRzZmcXFlRm9IdWFxd1R5aXc9PQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjoKKyAgICAgICAgICAgIDBiOjk4Ojk0OmZiOjc4OjVmCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6CisgICAgICAgICAgICBjb3VudHJ5TmFtZSAgICAgICAgICAgICAgID0gTk4KKyAgICAgICAgICAgIG9yZ2FuaXphdGlvbk5hbWUgICAgICAgICAgPSBFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3VkCisgICAgICAgICAgICBjb21tb25OYW1lICAgICAgICAgICAgICAgID0gTm90aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogTWF5IDI3IDIxOjM3OjI0IDIwMTAgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBBdWcgMTMgMjE6Mzc6MjQgMjAxOCBHTVQKKyAgICAgICAgU3ViamVjdDoKKyAgICAgICAgICAgIGNvdW50cnlOYW1lICAgICAgICAgICAgICAgPSBOTgorICAgICAgICAgICAgb3JnYW5pemF0aW9uTmFtZSAgICAgICAgICA9IEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQKKyAgICAgICAgICAgIGNvbW1vbk5hbWUgICAgICAgICAgICAgICAgPSBsb2NhbGhvc3Qubm4KKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgxMDI0IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDpkMzpkNDo0ZTpkYjo2Mzo1YzozZjozYTozYTo1ZTozODowOTo5NDplNjoKKyAgICAgICAgICAgICAgICAgICAgNGQ6NzA6OWQ6MGQ6YWY6NDk6ZTY6ODI6NWQ6MDc6Yjc6ZjU6Y2Q6YTA6ZGY6CisgICAgICAgICAgICAgICAgICAgIGFmOjcxOmYxOmNmOmJmOmQ1OjlhOmJkOmFmOjdjOjc4OjVkOjU1OjNmOjE0OgorICAgICAgICAgICAgICAgICAgICBiZDpiYjoyYzowZTo3Mzo5ZDpkNjo4Mjo5YTpkNTplNjpmNjoyMTo1ZDowODoKKyAgICAgICAgICAgICAgICAgICAgOTI6YTI6NzE6NWY6ODA6NWY6NWM6Y2U6ZjA6YzI6Mzc6Mzc6Nzk6MGY6NGQ6CisgICAgICAgICAgICAgICAgICAgIDNkOmQ0OmYyOjgwOjZkOjQ3OjM2OjQ1OmQxOmQyOjhiOjdhOjJlOjEyOjcxOgorICAgICAgICAgICAgICAgICAgICA0Yjo0Nzo4NjpmNTo4Yzo5OTphZjplNzowZTpjZjpiNTpjOTo0ZDo3YTo3NToKKyAgICAgICAgICAgICAgICAgICAgZjc6YjI6NzQ6MGM6NDE6ZTM6YWI6YmI6MmM6OWQ6NmY6NTQ6MDg6MTM6NWE6CisgICAgICAgICAgICAgICAgICAgIDNhOmVmOjdjOjI3OmY3OjNmOjBiOjBiOjcxCisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEFsdGVybmF0aXZlIE5hbWU6IAorICAgICAgICAgICAgICAgIEROUzpsb2NhbGhvc3Qubm4KKyAgICAgICAgICAgIFg1MDl2MyBLZXkgVXNhZ2U6IAorICAgICAgICAgICAgICAgIEtleSBFbmNpcGhlcm1lbnQKKyAgICAgICAgICAgIFg1MDl2MyBFeHRlbmRlZCBLZXkgVXNhZ2U6IAorICAgICAgICAgICAgICAgIFRMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgODE6MjY6Rjk6NzU6Q0M6OUM6MkQ6M0M6MzY6NjQ6Njg6NDE6Rjc6MDc6M0M6NjY6ODY6RTU6NEE6QzEKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkFEOjNFOkUyOjM5OjA3OkI4OjVDOkFBOjI2OjkwOjk0OjRDOjI2OjY5OjIxOjgzOkUyOjRFOjM2Ojk0CisKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogY3JpdGljYWwKKyAgICAgICAgICAgICAgICBDQTpGQUxTRQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICA2NTowNTo4Yzo0ODoxNDo1ODo4YzoxYTpkNDo5NTo2NzoxYzoyOTo1MjplZDo1YTo2ZToxNDoKKyAgICAgICAgNDE6YmM6MmI6MTY6MjA6YzQ6ODk6M2E6NmU6Y2I6YzE6ZmY6YWI6NjE6Nzk6NWY6Y2U6Mjc6CisgICAgICAgIDkzOjNjOmZmOjI5OjdhOjI1OjY4OjAwOjI3OjA0OmYzOjY4OjE3OjMwOmYwOmZkOmZmOjA5OgorICAgICAgICAwZToxNToyYToyNTpiMTo0NToxODo5MzphYjoxMjo4ZTowYzoxMzoxMTo5YTpiODphNDo3NToKKyAgICAgICAgZDA6MTc6MWI6Y2E6ZjI6NjY6NmI6NzM6MTU6ZGQ6OGI6YmI6MzQ6ZDY6NzA6ZGM6MzQ6MWI6CisgICAgICAgIGU3OjdhOjMwOmVhOjUwOjUwOjJmOjg4OjY3OmIzOmY4OmIzOjU1OjYyOjQ0OjdlOjNlOmRmOgorICAgICAgICA1OTo0ZjphODo1Nzo4Mzo0MDo5ZjpiZjo1MjpiZjpmZDoyYzoxODo2ZTpiZDowYzo0MTpiNzoKKyAgICAgICAgNzg6MWM6OWI6ZmE6YzQ6ZmY6YzM6MmI6NDY6YTQ6OGY6MGM6MTk6YTc6M2Q6NzU6ODE6Mjk6CisgICAgICAgIDZiOmNmOjA3OmYwOjFkOjY1OmQ0OjBlOjE5OjUxOjg3OjkyOmE4OjNkOjdlOjgwOjA0Ojg0OgorICAgICAgICBhZDo1ZTo0ZTpiNjplZjo5YTowMjpjMzo4NDo5NTplYzpjMzplODphMTo2OToxZjo0MjpjYjoKKyAgICAgICAgZGE6NjM6MWE6MzU6NmY6ZDA6YmE6NjI6OWU6NzM6MzY6NjM6NTg6MGY6Y2M6MjU6Yzg6NTk6CisgICAgICAgIDczOmRmOjNiOmMyOmI5OjVhOmRhOjNkOmUxOjNmOjBhOjFmOjBmOjQxOmM0Ojg4OjJkOjkyOgorICAgICAgICAwNjo4ODpkNDo1NDo4MTplMToxMjo1Nzo1MzphYjo2YjpmODpjODo5MDozZTozMDo0YzpmNToKKyAgICAgICAgNzI6Y2Y6ZjA6ZDQ6MTg6NzA6YzE6Nzg6ODU6MzA6OWM6ZmU6OTQ6ZjQ6MWI6YzI6NmM6MTQ6CisgICAgICAgIDQ5OjdhOjBlOjI3CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURSekNDQWkrZ0F3SUJBZ0lHQzVpVSszaGZNQTBHQ1NxR1NJYjNEUUVCQlFVQU1HY3hDekFKQmdOVkJBWVQKK0FrNU9NVEV3THdZRFZRUUtEQ2hGWkdWc0lFTjFjbXdnUVhKamRHbGpJRWxzYkhWa2FYVnRJRkpsYzJWaGNtTm8KK0lFTnNiM1ZrTVNVd0l3WURWUVFEREJ4T2IzUm9aWEp1SUU1dmQyaGxjbVVnVkhKMWMzUWdRVzVqYUc5eU1CNFgKK0RURXdNRFV5TnpJeE16Y3lORm9YRFRFNE1EZ3hNekl4TXpjeU5Gb3dWekVMTUFrR0ExVUVCaE1DVGs0eE1UQXYKK0JnTlZCQW9NS0VWa1pXd2dRM1Z5YkNCQmNtTjBhV01nU1d4c2RXUnBkVzBnVW1WelpXRnlZMmdnUTJ4dmRXUXgKK0ZUQVRCZ05WQkFNTURHeHZZMkZzYUc5emRDNXViakNCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0MKK2dZRUEwOVJPMjJOY1B6bzZYamdKbE9aTmNKME5yMG5tZ2wwSHQvWE5vTit2Y2ZIUHY5V2F2YTk4ZUYxVlB4UzkKK3V5d09jNTNXZ3ByVjV2WWhYUWlTb25GZmdGOWN6dkRDTnpkNUQwMDkxUEtBYlVjMlJkSFNpM291RW5GTFI0YjEKK2pKbXY1dzdQdGNsTmVuWDNzblFNUWVPcnV5eWRiMVFJRTFvNjczd245ejhMQzNFQ0F3RUFBYU9CakRDQmlUQVgKK0JnTlZIUkVFRURBT2dneHNiMk5oYkdodmMzUXVibTR3Q3dZRFZSMFBCQVFEQWdVZ01CTUdBMVVkSlFRTU1Bb0cKK0NDc0dBUVVGQndNQk1CMEdBMVVkRGdRV0JCU0JKdmwxekp3dFBEWmthRUgzQnp4bWh1Vkt3VEFmQmdOVkhTTUUKK0dEQVdnQlN0UHVJNUI3aGNxaWFRbEV3bWFTR0Q0azQybERBTUJnTlZIUk1CQWY4RUFqQUFNQTBHQ1NxR1NJYjMKK0RRRUJCUVVBQTRJQkFRQmxCWXhJRkZpTUd0U1ZaeHdwVXUxYWJoUkJ2Q3NXSU1TSk9tN0x3ZityWVhsZnppZVQKK1BQOHBlaVZvQUNjRTgyZ1hNUEQ5L3drT0ZTb2xzVVVZazZzU2pnd1RFWnE0cEhYUUZ4dks4bVpyY3hYZGk3czAKKzFuRGNOQnZuZWpEcVVGQXZpR2V6K0xOVllrUitQdDlaVDZoWGcwQ2Z2MUsvL1N3WWJyME1RYmQ0SEp2NnhQL0QKK0swYWtqd3dacHoxMWdTbHJ6d2Z3SFdYVURobFJoNUtvUFg2QUJJU3RYazYyNzVvQ3c0U1Y3TVBvb1drZlFzdmEKK1l4bzFiOUM2WXA1ek5tTllEOHdseUZsejN6dkN1VnJhUGVFL0NoOFBRY1NJTFpJR2lOUlVnZUVTVjFPcmEvakkKK2tENHdUUFZ5ei9EVUdIREJlSVV3blA2VTlCdkNiQlJKZWc0bgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBESCBQQVJBTUVURVJTLS0tLS0KK01JR0hBb0dCQVBydEVWUGhaZkVjekI5Sm5XWGJsbjc5WW5UaC9WNmVoWE1XZTQxNHd5bi9WVDFvdzI1c0xFZXYKK0gyK2VUODRhRHA1ZStUZkJTRmpBNm9yOTYvbHlRdnNnQUUrY0U2ZjZ1dXc5QXBWRzJNSytCQ240c254SEJiNkcKK0xGUWYrOXFIWjRCRWtwQkw2MHAxZmtHdThCTTF3WEdYRWFlWWhnR3VtTkE5Zm01WUpybDdBZ0VDCistLS0tLUVORCBESCBQQVJBTUVURVJTLS0tLS0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qubm4tc3YucHJtIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdC5ubi1zdi5wcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxNWVhMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qubm4tc3YucHJtCkBAIC0wLDAgKzEsMjUgQEAKK2V4dGVuc2lvbnMgPSB4NTA5djMKK1sgeDUwOXYzIF0KK3N1YmplY3RBbHROYW1lID0gRE5TOmxvY2FsaG9zdC5ubgora2V5VXNhZ2UJPSBrZXlFbmNpcGhlcm1lbnQKK2V4dGVuZGVkS2V5VXNhZ2UgPSBzZXJ2ZXJBdXRoCitzdWJqZWN0S2V5SWRlbnRpZmllciA9IGhhc2gKK2F1dGhvcml0eUtleUlkZW50aWZpZXIgPSBrZXlpZAorYmFzaWNDb25zdHJhaW50cyA9IGNyaXRpY2FsLENBOmZhbHNlCitbIHJlcSBdCitkZWZhdWx0X2JpdHMgICAgICAgICAgICAgICAgICAgID0gMTAyNAorZGlzdGluZ3Vpc2hlZF9uYW1lICAgICAgICAgICAgICA9IHJlcV9ETgorZGVmYXVsdF9tZAkJCT0gc2hhMjU2CitzdHJpbmdfbWFzawkJCT0gdXRmOG9ubHkKK1sgcmVxX0ROIF0KK2NvdW50cnlOYW1lICAgICAgICAgICAgICAgICAgICAgPSAiQ291bnRyeSBOYW1lIGlzIE5vcnRoZXJuIE5vd2hlcmUiCitjb3VudHJ5TmFtZV92YWx1ZSAgICAgICAgICAgID0gTk4KK29yZ2FuaXphdGlvbk5hbWUgICAgICAgICAgICAgID0gIk9yZ2FuaXphdGlvbiBOYW1lIgorb3JnYW5pemF0aW9uTmFtZV92YWx1ZSAgICAgPSBFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3VkCitjb21tb25OYW1lICAgICAgICAgICAgICAgICAgICAgID0gIkNvbW1vbiBOYW1lIgorY29tbW9uTmFtZV92YWx1ZSAgICAgICAgICAgICAgPSBsb2NhbGhvc3Qubm4gCisKK1tzb21ldGhpbmddCisjIFRoZSBrZXkKKyMgdGhlIGNlcnRmaWNhdGUKKyMgc29tZSBkaHBhcmFtCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0MGgtc3YuY3JsIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LmNybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2ExODU5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LmNybApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUNEVENCOWdJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURCbk1Rc3dDUVlEVlFRR0V3Sk9UakV4TUM4R0ExVUUKK0Nnd29SV1JsYkNCRGRYSnNJRUZ5WTNScFl5QkpiR3gxWkdsMWJTQlNaWE5sWVhKamFDQkRiRzkxWkRFbE1DTUcKK0ExVUVBd3djVG05MGFHVnliaUJPYjNkb1pYSmxJRlJ5ZFhOMElFRnVZMmh2Y2hjTk1UQXdOVEkzTWpFek56VTAKK1doY05NVEF3TmpJMk1qRXpOelUwV2pCTE1CY0NCZ3VZbFBsOGFoY05NVEF3TlRJM01qRXpOekV4V2pBWEFnWUwKK21KVDdlRjhYRFRFd01EVXlOekl4TXpjeU5Gb3dGd0lHQzVpVkFBeCtGdzB4TURBMU1qY3lNVE0zTlRSYW9BNHcKK0REQUtCZ05WSFJRRUF3SUJBVEFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBV0JMNFZoQXJ3SmtVdjkxb3lNSW8KK3h5eVJtVmwrMW9ZNUlqRXBMR2QrbU5JZ3FYdWxqUW1icDhjUzhBK2pXaW5KUE9XWnF2c0hhK21MQ2w0T3V3aFAKK0piQXRJUTIyT1FSYVZxV1J1Z3VHMlQxc2gzRGQ3YTFHY3VwSUdLYy96Z25ZNDVENHBZNFVOWnYrS21ZM2JGMFMKKzgzem42WW9RdEJUekY5eTJOcTVSMFVUZHhsNitqNXN3cG8xdHR2UVB6NDB5cUlsbWptVy9sbGthRDRVQmFlZ2wKK3pTeG1uUjV4Q2pBUjduWW0rSHlXVzlTTFNXR3B0VU9kMzJCOVRQSlBMRGhKYTlsZkJiOEg5bDVrN2t4OUVDSkcKK0x5dWpsZWVYSXVjZnFPZ0UyY0IwekNqRXhxckdXUnA4WmdFV2ZwZFNrREVwWEJDRG84OFRBM2RJcjJmM1p4d3AKK1FBPT0KKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3QwaC1zdi5jcnQgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0MGgtc3YuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkY2I1ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0MGgtc3YuY3J0CkBAIC0wLDAgKzEsODEgQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjoKKyAgICAgICAgICAgIDBiOjk4Ojk1OjAwOjBjOjdlCisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6CisgICAgICAgICAgICBjb3VudHJ5TmFtZSAgICAgICAgICAgICAgID0gTk4KKyAgICAgICAgICAgIG9yZ2FuaXphdGlvbk5hbWUgICAgICAgICAgPSBFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3VkCisgICAgICAgICAgICBjb21tb25OYW1lICAgICAgICAgICAgICAgID0gTm90aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogTWF5IDI3IDIxOjM3OjU0IDIwMTAgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBBdWcgMTMgMjE6Mzc6NTQgMjAxOCBHTVQKKyAgICAgICAgU3ViamVjdDoKKyAgICAgICAgICAgIGNvdW50cnlOYW1lICAgICAgICAgICAgICAgPSBOTgorICAgICAgICAgICAgb3JnYW5pemF0aW9uTmFtZSAgICAgICAgICA9IEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQKKyAgICAgICAgICAgIGNvbW1vbk5hbWUgICAgICAgICAgICAgICAgPSBsb2NhbGhvc3QKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgxMDI0IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDpjYzphOTo5MToyYjoyMjplODo5MDoyYjplNTo0YzpkYzphZTo2ZDpkYToKKyAgICAgICAgICAgICAgICAgICAgNGM6ZjM6MzI6Y2M6YTU6Njg6Njc6NWE6M2I6Yjk6ODY6YTM6OTU6ODg6M2U6CisgICAgICAgICAgICAgICAgICAgIGU4OjYzOmMzOmVkOjAwOjYwOjE5OjAzOjJiOjVkOjViOjU2OjhhOmRhOjIxOgorICAgICAgICAgICAgICAgICAgICA1ZTo3MTo1YzpkMTplMzpkZTo1MToxODpjMToxNzoxNDpiMTozMzo5MDowMDoKKyAgICAgICAgICAgICAgICAgICAgNWM6OWE6ZTU6NzM6MGI6YTg6ODg6OWM6ZDA6MGI6NTQ6YmM6ZWE6M2E6Mzk6CisgICAgICAgICAgICAgICAgICAgIGRkOmY2OjY1OjgxOjRiOjI5Ojk5OjRjOjcxOmQzOmY3OjY5OjdmOjgwOmU4OgorICAgICAgICAgICAgICAgICAgICBlODo2ZDo2MTo0MTo4Mzo4NzplYjphYzoyYzpiZDowZjplYjoxYjpmZDphMjoKKyAgICAgICAgICAgICAgICAgICAgMzc6OTc6NmQ6MzE6NTY6YmE6NGI6NTE6ZGQ6YjE6MDE6ZWI6ODk6Zjg6MjU6CisgICAgICAgICAgICAgICAgICAgIGRlOjViOmEzOmU1OmIyOjNmOjRjOjc3OjUzCisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEFsdGVybmF0aXZlIE5hbWU6IAorICAgICAgICAgICAgICAgIEROUzpsb2NhbGhvc3QKKyAgICAgICAgICAgIFg1MDl2MyBLZXkgVXNhZ2U6IAorICAgICAgICAgICAgICAgIEtleSBFbmNpcGhlcm1lbnQKKyAgICAgICAgICAgIFg1MDl2MyBFeHRlbmRlZCBLZXkgVXNhZ2U6IAorICAgICAgICAgICAgICAgIFRMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uCisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgM0I6MkI6ODQ6MEQ6MjM6M0M6NDY6Rjk6OUI6RTU6QzI6RkE6Qjc6MzA6RTc6QUM6RTM6RUQ6MDk6QzMKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkFEOjNFOkUyOjM5OjA3OkI4OjVDOkFBOjI2OjkwOjk0OjRDOjI2OjY5OjIxOjgzOkUyOjRFOjM2Ojk0CisKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogY3JpdGljYWwKKyAgICAgICAgICAgICAgICBDQTpGQUxTRQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBhMjpmYTo2MTo0ZTpjMDoxMDoxZjpmODozODoyYzpmZDphNjo3NDo4NTpkZjo4ZTplZTo0MToKKyAgICAgICAgOTA6YTE6ZDc6Yzk6MzI6NjU6NWQ6NjE6ZDU6MTM6NTE6M2I6MTE6MWM6N2I6MDE6MDY6NzA6CisgICAgICAgIDlmOjkzOjUyOjU0OjE1OmJkOjkzOjNhOmY4OjQwOmUzOmUyOmFiOjAxOjk2OmZiOjczOmM1OgorICAgICAgICA0MjoyYzphZDpjZTplODo1Mjo1NzpkYjpiNjoxNTo5MDo3NTplMzplNTo3NTo5OTpiMDo4MzoKKyAgICAgICAgZWQ6YjA6ZmM6ZjI6ZDA6ZDk6M2Q6Njg6MWM6ZDk6YjQ6Y2Q6YTE6YTk6NDA6MTk6NDQ6NDY6CisgICAgICAgIDE0OjhiOjExOjZlOjJlOjFjOjY1Ojg1OjczOjQ1OmYwOjhiOjRmOmVhOjAxOjJkOjYxOjBmOgorICAgICAgICBhZTowZDo3MDowYzpkMzozYzoxYzoxZjoyNDo2NjphMzowYjo2MjpkMTo4NzoxZTo4ZTo5NjoKKyAgICAgICAgZjY6NDM6Y2Y6MWM6MjQ6ZTc6OTQ6ZDA6N2U6YjA6ZWU6MWI6NmY6MTQ6MWY6MDQ6MzU6ZTg6CisgICAgICAgIGZjOjNjOmM4OjllOmUzOjZlOjBlOjRjOjdkOmE5OjIzOjk3OjJkOjZlOmIxOjRkOmUzOjA1OgorICAgICAgICAxYjpjZTo4NjoyZjoyZjpiMzpjOTo2MDo0Nzo1ODphYzplYTo0YzpjYjpjMjo3YjowZjowODoKKyAgICAgICAgYjg6YTc6OTA6ZTc6MjI6MzI6NzA6ZjY6MDk6M2U6Zjk6NTQ6OTQ6YjA6Mzc6NTA6MjI6NjA6CisgICAgICAgIDQ5OjFjOjg0OjllOjFhOjIyOjBjOjNlOmE5OjE2OjdjOjVlOmIxOjUwOjEzOjZiOjgyOjE0OgorICAgICAgICBkMzo4YTozZDo0ZDplZDoxODpjYTo0MDo1OTpkNjpiOTo3Mjo5Zjo2NDplNTowYjplNzphNjoKKyAgICAgICAgYjg6ZWU6Mjk6YjU6NmE6ZWM6ODI6YjI6OTQ6NTY6MzY6ZTM6ODc6YjM6MDc6YWE6Njk6Yjg6CisgICAgICAgIDJjOmVmOjBjOjE0CistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURRekNDQWl1Z0F3SUJBZ0lHQzVpVkFBeCtNQTBHQ1NxR1NJYjNEUUVCQlFVQU1HY3hDekFKQmdOVkJBWVQKK0FrNU9NVEV3THdZRFZRUUtEQ2hGWkdWc0lFTjFjbXdnUVhKamRHbGpJRWxzYkhWa2FYVnRJRkpsYzJWaGNtTm8KK0lFTnNiM1ZrTVNVd0l3WURWUVFEREJ4T2IzUm9aWEp1SUU1dmQyaGxjbVVnVkhKMWMzUWdRVzVqYUc5eU1CNFgKK0RURXdNRFV5TnpJeE16YzFORm9YRFRFNE1EZ3hNekl4TXpjMU5Gb3dWREVMTUFrR0ExVUVCaE1DVGs0eE1UQXYKK0JnTlZCQW9NS0VWa1pXd2dRM1Z5YkNCQmNtTjBhV01nU1d4c2RXUnBkVzBnVW1WelpXRnlZMmdnUTJ4dmRXUXgKK0VqQVFCZ05WQkFNTUNXeHZZMkZzYUc5emREQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3Z1lrQ2dZRUEKK3pLbVJLeUxva0N2bFROeXViZHBNOHpMTXBXaG5XanU1aHFPVmlEN29ZOFB0QUdBWkF5dGRXMWFLMmlGZWNWelIKKzQ5NVJHTUVYRkxFemtBQmNtdVZ6QzZpSW5OQUxWTHpxT2puZDltV0JTeW1aVEhIVDkybC9nT2pvYldGQmc0ZnIKK3JDeTlEK3NiL2FJM2wyMHhWcnBMVWQyeEFldUorQ1hlVzZQbHNqOU1kMU1DQXdFQUFhT0JpekNCaURBV0JnTlYKK0hSRUVEekFOZ2d0c2IyTmhiR2h2YzNRQWFEQUxCZ05WSFE4RUJBTUNCU0F3RXdZRFZSMGxCQXd3Q2dZSUt3WUIKK0JRVUhBd0V3SFFZRFZSME9CQllFRkRzcmhBMGpQRWI1bStYQytyY3c1NnpqN1FuRE1COEdBMVVkSXdRWU1CYUEKK0ZLMCs0amtIdUZ5cUpwQ1VUQ1pwSVlQaVRqYVVNQXdHQTFVZEV3RUIvd1FDTUFBd0RRWUpLb1pJaHZjTkFRRUYKK0JRQURnZ0VCQUtMNllVN0FFQi80T0N6OXBuU0YzNDd1UVpDaDE4a3laVjFoMVJOUk94RWNld0VHY0orVFVsUVYKK3ZaTTYrRURqNHFzQmx2dHp4VUlzcmM3b1VsZmJ0aFdRZGVQbGRabXdnKzJ3L1BMUTJUMW9ITm0wemFHcFFCbEUKK1JoU0xFVzR1SEdXRmMwWHdpMC9xQVMxaEQ2NE5jQXpUUEJ3ZkpHYWpDMkxSaHg2T2x2WkR6eHdrNTVUUWZyRHUKK0cyOFVId1ExNlB3OHlKN2piZzVNZmFramx5MXVzVTNqQlJ2T2hpOHZzOGxnUjFpczZrekx3bnNQQ0xpbmtPY2kKK01uRDJDVDc1VkpTd04xQWlZRWtjaEo0YUlndytxUlo4WHJGUUUydUNGTk9LUFUzdEdNcEFXZGE1Y3A5azVRdm4KK3ByanVLYlZxN0lLeWxGWTI0NGV6QjZwcHVDenZEQlE9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0MGgtc3YuY3NyIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LmNzcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGY3NzZmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LmNzcgpAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQmt6Q0IvUUlCQURCVU1Rc3dDUVlEVlFRR0V3Sk9UakV4TUM4R0ExVUVDZ3dvUldSbGJDQkRkWEpzSUVGeQorWTNScFl5QkpiR3gxWkdsMWJTQlNaWE5sWVhKamFDQkRiRzkxWkRFU01CQUdBMVVFQXd3SmJHOWpZV3hvYjNOMAorTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FETXFaRXJJdWlRSytWTTNLNXQya3p6TXN5bAorYUdkYU83bUdvNVdJUHVoancrMEFZQmtESzExYlZvcmFJVjV4WE5IajNsRVl3UmNVc1RPUUFGeWE1WE1McUlpYworMEF0VXZPbzZPZDMyWllGTEtabE1jZFAzYVgrQTZPaHRZVUdEaCt1c0xMMFA2eHY5b2plWGJURld1a3RSM2JFQgorNjRuNEpkNWJvK1d5UDB4M1V3SURBUUFCb0FBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ1lFQVBvcisyYXBuM2tQSgorWmRqeXlUL2lYRVRSVHJOODdQdUJhdWpjVitvVmVWU1dXK1lnR1V6REhpK1JrRUtUeFdkejNsZVcyZ29FNDFYOQorMkQvbjY2QVNRR3MxeDh3WHdJTUlYODNNamtXdGpxZGZjckpWaTFsNlQ3Tmp6WnQ2RXlKZHZyZVJudENVdTh6YworSjV0SzNybC90SWV1ZEtVRTJDT2MwTmd1OUpVQjFqOD0KKy0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LmRlciBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3QwaC1zdi5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiZTBiYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3QwaC1zdi5kZXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LmRocCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3QwaC1zdi5kaHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTllNjEwNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3QwaC1zdi5kaHAKQEAgLTAsMCArMSw1IEBACistLS0tLUJFR0lOIERIIFBBUkFNRVRFUlMtLS0tLQorTUlHSEFvR0JBTC8zaFJ4dldYK01keXUvYUJQVTFKZWVBNXNnNG5YdEE3QjI0ZUNxbDlUcTUzTGtzMS9ISjVCKworeFNhcEdBRmQrMjJ4aEJzTmtKaWhmNzRvaVBFVnI5bk5vTGpGVi9EWmUyNTkrSllncytwQlRGTitDcDEzQUxVaQorQ2VaeFgybWx4bHN0RDFTQlJUS2d4QS9qNHR0UjFDaG44a25uK1JWZEZFOVlGS0NZUHlMckFnRUMKKy0tLS0tRU5EIERIIFBBUkFNRVRFUlMtLS0tLQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LmtleSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3QwaC1zdi5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVjNDY2NgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL1NlcnZlci1sb2NhbGhvc3QwaC1zdi5rZXkKQEAgLTAsMCArMSwxNSBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1hBSUJBQUtCZ1FETXFaRXJJdWlRSytWTTNLNXQya3p6TXN5bGFHZGFPN21HbzVXSVB1aGp3KzBBWUJrRAorSzExYlZvcmFJVjV4WE5IajNsRVl3UmNVc1RPUUFGeWE1WE1McUlpYzBBdFV2T282T2QzMlpZRkxLWmxNY2RQMworYVgrQTZPaHRZVUdEaCt1c0xMMFA2eHY5b2plWGJURld1a3RSM2JFQjY0bjRKZDVibytXeVAweDNVd0lEQVFBQgorQW9HQUdUK09CaWxQVVlIb3p0dW10U3lxTTVKL3hxUWpvL0VjU1N6akpLVEdISkN1SzA2dnAwRnhTZlJhT3VERQorK3UwOWc0UUlzeW9YQTlsOGgvWlRkbFI2SmF4NW5jK2lSRnMvMjFpc3JnS0FzWllqNERnaGpnWEo5TFdHSFhuYgorN3hzdFZGa0ZCR25PYWVZN2RWcjU0OTA3VFlVUXd0Smc0Zms3VnJvcjA1Z2IxcUVDUVFEeWtBeHIyRC9DeExrOQorUmpXRGkvUDZKbmZGMFp4WnpDZTB5QVR2dVo4OStycFdRNXV4RUpEcTVGcXdXNFFYWCswRzJhV0R2NjRZRXhQUworSm1XUVRsb2pBa0VBMkFBSER2MktCV0ZjWGVUbFduS1pUZHpVT25pRThQelM1emlwaTJzc2lxWFNjcmo5TlgyVQoreUNDT2t2LzQyYmxQWEJLYmFWbmZXQkVodGo3cFF4SEpFUUpCQU9UdlhqbmZWWGFmcy9JSU5QUGVnTHlGMkIvRworRVpxVFhKcDgrbVBFUDI4QkdTUFlGYmROMm1sSWMrdmx4RXRIaDNBaXRkd2VhdE5nRmlJUGlXWmsvUjhDUUVJZgorRUFvWXR3MmFsa252N2YzWUl2SGc3ZDdRVWZIcmt5eFEvaVc5c3k3bVFCdjZZUmprem96TTJwaEpYNFpXNGVKUAorbDkrU01YcW1FK25VTEZmcHMrRUNRRlZralBERjA2NXgrK0ZoM0JWdE5KMGdvWVN0VEpNNkljbVlLZmxhcCtVeAorY09SWlVXSjh0dkRhdmxTU3dRUVlLOGtPVlRJTkM2aUZ3d0VRNDFIbFlMRT0KKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0MGgtc3YucDEyIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LnAxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmUwM2M3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LnAxMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0MGgtc3YucGVtIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWJlOWMzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LnBlbQpAQCAtMCwwICsxLDEyNyBAQAorZXh0ZW5zaW9ucyA9IHg1MDl2MworWyB4NTA5djMgXQorI3N1YmplY3RBbHROYW1lID0gRE5TOmxvY2FsaG9zdFwwaAorc3ViamVjdEFsdE5hbWUgPSBERVI6MzA6MGQ6ODI6MGI6NmM6NmY6NjM6NjE6NmM6Njg6NmY6NzM6NzQ6MDA6NjgKK2tleVVzYWdlCT0ga2V5RW5jaXBoZXJtZW50CitleHRlbmRlZEtleVVzYWdlID0gc2VydmVyQXV0aAorc3ViamVjdEtleUlkZW50aWZpZXIgPSBoYXNoCithdXRob3JpdHlLZXlJZGVudGlmaWVyID0ga2V5aWQKK2Jhc2ljQ29uc3RyYWludHMgPSBjcml0aWNhbCxDQTpmYWxzZQorWyByZXEgXQorZGVmYXVsdF9iaXRzICAgICAgICAgICAgICAgICAgICA9IDEwMjQKK2Rpc3Rpbmd1aXNoZWRfbmFtZSAgICAgICAgICAgICAgPSByZXFfRE4KK2RlZmF1bHRfbWQJCQk9IHNoYTI1Ngorc3RyaW5nX21hc2sJCQk9IHV0Zjhvbmx5CitbIHJlcV9ETiBdCitjb3VudHJ5TmFtZSAgICAgICAgICAgICAgICAgICAgID0gIkNvdW50cnkgTmFtZSBpcyBOb3J0aGVybiBOb3doZXJlIgorY291bnRyeU5hbWVfdmFsdWUgICAgICAgICAgICA9IE5OCitvcmdhbml6YXRpb25OYW1lICAgICAgICAgICAgICA9ICJPcmdhbml6YXRpb24gTmFtZSIKK29yZ2FuaXphdGlvbk5hbWVfdmFsdWUgICAgID0gRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZAorY29tbW9uTmFtZSAgICAgICAgICAgICAgICAgICAgICA9ICJDb21tb24gTmFtZSIKK2NvbW1vbk5hbWVfdmFsdWUgICAgICAgICAgICAgID0gbG9jYWxob3N0IAorCitbc29tZXRoaW5nXQorIyBUaGUga2V5CisjIHRoZSBjZXJ0aWZpY2F0ZQorIyBzb21lIGRocGFyYW0KKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNYQUlCQUFLQmdRRE1xWkVySXVpUUsrVk0zSzV0Mmt6ek1zeWxhR2RhTzdtR281V0lQdWhqdyswQVlCa0QKK0sxMWJWb3JhSVY1eFhOSGozbEVZd1JjVXNUT1FBRnlhNVhNTHFJaWMwQXRVdk9vNk9kMzJaWUZMS1psTWNkUDMKK2FYK0E2T2h0WVVHRGgrdXNMTDBQNnh2OW9qZVhiVEZXdWt0UjNiRUI2NG40SmQ1Ym8rV3lQMHgzVXdJREFRQUIKK0FvR0FHVCtPQmlsUFVZSG96dHVtdFN5cU01Si94cVFqby9FY1NTempKS1RHSEpDdUswNnZwMEZ4U2ZSYU91REUKKyt1MDlnNFFJc3lvWEE5bDhoL1pUZGxSNkpheDVuYytpUkZzLzIxaXNyZ0tBc1pZajREZ2hqZ1hKOUxXR0hYbmIKKzd4c3RWRmtGQkduT2FlWTdkVnI1NDkwN1RZVVF3dEpnNGZrN1Zyb3IwNWdiMXFFQ1FRRHlrQXhyMkQvQ3hMazkKK1JqV0RpL1A2Sm5mRjBaeFp6Q2UweUFUdnVaODkrcnBXUTV1eEVKRHE1RnF3VzRRWFgrMEcyYVdEdjY0WUV4UFMKK0ptV1FUbG9qQWtFQTJBQUhEdjJLQldGY1hlVGxXbktaVGR6VU9uaUU4UHpTNXppcGkyc3NpcVhTY3JqOU5YMlUKK3lDQ09rdi80MmJsUFhCS2JhVm5mV0JFaHRqN3BReEhKRVFKQkFPVHZYam5mVlhhZnMvSUlOUFBlZ0x5RjJCL0cKK0VacVRYSnA4K21QRVAyOEJHU1BZRmJkTjJtbEljK3ZseEV0SGgzQWl0ZHdlYXROZ0ZpSVBpV1prL1I4Q1FFSWYKK0VBb1l0dzJhbGtudjdmM1lJdkhnN2Q3UVVmSHJreXhRL2lXOXN5N21RQnY2WVJqa3pvek0ycGhKWDRaVzRlSlAKK2w5K1NNWHFtRStuVUxGZnBzK0VDUUZWa2pQREYwNjV4KytGaDNCVnROSjBnb1lTdFRKTTZJY21ZS2ZsYXArVXgKK2NPUlpVV0o4dHZEYXZsU1N3UVFZSzhrT1ZUSU5DNmlGd3dFUTQxSGxZTEU9CistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOgorICAgICAgICAgICAgMGI6OTg6OTU6MDA6MGM6N2UKKyAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjoKKyAgICAgICAgICAgIGNvdW50cnlOYW1lICAgICAgICAgICAgICAgPSBOTgorICAgICAgICAgICAgb3JnYW5pemF0aW9uTmFtZSAgICAgICAgICA9IEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQKKyAgICAgICAgICAgIGNvbW1vbk5hbWUgICAgICAgICAgICAgICAgPSBOb3RoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBNYXkgMjcgMjE6Mzc6NTQgMjAxMCBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEF1ZyAxMyAyMTozNzo1NCAyMDE4IEdNVAorICAgICAgICBTdWJqZWN0OgorICAgICAgICAgICAgY291bnRyeU5hbWUgICAgICAgICAgICAgICA9IE5OCisgICAgICAgICAgICBvcmdhbml6YXRpb25OYW1lICAgICAgICAgID0gRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZAorICAgICAgICAgICAgY29tbW9uTmFtZSAgICAgICAgICAgICAgICA9IGxvY2FsaG9zdAorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDEwMjQgYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmNjOmE5OjkxOjJiOjIyOmU4OjkwOjJiOmU1OjRjOmRjOmFlOjZkOmRhOgorICAgICAgICAgICAgICAgICAgICA0YzpmMzozMjpjYzphNTo2ODo2Nzo1YTozYjpiOTo4NjphMzo5NTo4ODozZToKKyAgICAgICAgICAgICAgICAgICAgZTg6NjM6YzM6ZWQ6MDA6NjA6MTk6MDM6MmI6NWQ6NWI6NTY6OGE6ZGE6MjE6CisgICAgICAgICAgICAgICAgICAgIDVlOjcxOjVjOmQxOmUzOmRlOjUxOjE4OmMxOjE3OjE0OmIxOjMzOjkwOjAwOgorICAgICAgICAgICAgICAgICAgICA1Yzo5YTplNTo3MzowYjphODo4ODo5YzpkMDowYjo1NDpiYzplYTozYTozOToKKyAgICAgICAgICAgICAgICAgICAgZGQ6ZjY6NjU6ODE6NGI6Mjk6OTk6NGM6NzE6ZDM6Zjc6Njk6N2Y6ODA6ZTg6CisgICAgICAgICAgICAgICAgICAgIGU4OjZkOjYxOjQxOjgzOjg3OmViOmFjOjJjOmJkOjBmOmViOjFiOmZkOmEyOgorICAgICAgICAgICAgICAgICAgICAzNzo5Nzo2ZDozMTo1NjpiYTo0Yjo1MTpkZDpiMTowMTplYjo4OTpmODoyNToKKyAgICAgICAgICAgICAgICAgICAgZGU6NWI6YTM6ZTU6YjI6M2Y6NGM6Nzc6NTMKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgQWx0ZXJuYXRpdmUgTmFtZTogCisgICAgICAgICAgICAgICAgRE5TOmxvY2FsaG9zdAorICAgICAgICAgICAgWDUwOXYzIEtleSBVc2FnZTogCisgICAgICAgICAgICAgICAgS2V5IEVuY2lwaGVybWVudAorICAgICAgICAgICAgWDUwOXYzIEV4dGVuZGVkIEtleSBVc2FnZTogCisgICAgICAgICAgICAgICAgVExTIFdlYiBTZXJ2ZXIgQXV0aGVudGljYXRpb24KKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICAzQjoyQjo4NDowRDoyMzozQzo0NjpGOTo5QjpFNTpDMjpGQTpCNzozMDpFNzpBQzpFMzpFRDowOTpDMworICAgICAgICAgICAgWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAga2V5aWQ6QUQ6M0U6RTI6Mzk6MDc6Qjg6NUM6QUE6MjY6OTA6OTQ6NEM6MjY6Njk6MjE6ODM6RTI6NEU6MzY6OTQKKworICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiBjcml0aWNhbAorICAgICAgICAgICAgICAgIENBOkZBTFNFCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIGEyOmZhOjYxOjRlOmMwOjEwOjFmOmY4OjM4OjJjOmZkOmE2Ojc0Ojg1OmRmOjhlOmVlOjQxOgorICAgICAgICA5MDphMTpkNzpjOTozMjo2NTo1ZDo2MTpkNToxMzo1MTozYjoxMToxYzo3YjowMTowNjo3MDoKKyAgICAgICAgOWY6OTM6NTI6NTQ6MTU6YmQ6OTM6M2E6Zjg6NDA6ZTM6ZTI6YWI6MDE6OTY6ZmI6NzM6YzU6CisgICAgICAgIDQyOjJjOmFkOmNlOmU4OjUyOjU3OmRiOmI2OjE1OjkwOjc1OmUzOmU1Ojc1Ojk5OmIwOjgzOgorICAgICAgICBlZDpiMDpmYzpmMjpkMDpkOTozZDo2ODoxYzpkOTpiNDpjZDphMTphOTo0MDoxOTo0NDo0NjoKKyAgICAgICAgMTQ6OGI6MTE6NmU6MmU6MWM6NjU6ODU6NzM6NDU6ZjA6OGI6NGY6ZWE6MDE6MmQ6NjE6MGY6CisgICAgICAgIGFlOjBkOjcwOjBjOmQzOjNjOjFjOjFmOjI0OjY2OmEzOjBiOjYyOmQxOjg3OjFlOjhlOjk2OgorICAgICAgICBmNjo0MzpjZjoxYzoyNDplNzo5NDpkMDo3ZTpiMDplZToxYjo2ZjoxNDoxZjowNDozNTplODoKKyAgICAgICAgZmM6M2M6Yzg6OWU6ZTM6NmU6MGU6NGM6N2Q6YTk6MjM6OTc6MmQ6NmU6YjE6NGQ6ZTM6MDU6CisgICAgICAgIDFiOmNlOjg2OjJmOjJmOmIzOmM5OjYwOjQ3OjU4OmFjOmVhOjRjOmNiOmMyOjdiOjBmOjA4OgorICAgICAgICBiODphNzo5MDplNzoyMjozMjo3MDpmNjowOTozZTpmOTo1NDo5NDpiMDozNzo1MDoyMjo2MDoKKyAgICAgICAgNDk6MWM6ODQ6OWU6MWE6MjI6MGM6M2U6YTk6MTY6N2M6NWU6YjE6NTA6MTM6NmI6ODI6MTQ6CisgICAgICAgIGQzOjhhOjNkOjRkOmVkOjE4OmNhOjQwOjU5OmQ2OmI5OjcyOjlmOjY0OmU1OjBiOmU3OmE2OgorICAgICAgICBiODplZToyOTpiNTo2YTplYzo4MjpiMjo5NDo1NjozNjplMzo4NzpiMzowNzphYTo2OTpiODoKKyAgICAgICAgMmM6ZWY6MGM6MTQKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRFF6Q0NBaXVnQXdJQkFnSUdDNWlWQUF4K01BMEdDU3FHU0liM0RRRUJCUVVBTUdjeEN6QUpCZ05WQkFZVAorQWs1T01URXdMd1lEVlFRS0RDaEZaR1ZzSUVOMWNtd2dRWEpqZEdsaklFbHNiSFZrYVhWdElGSmxjMlZoY21ObworSUVOc2IzVmtNU1V3SXdZRFZRUUREQnhPYjNSb1pYSnVJRTV2ZDJobGNtVWdWSEoxYzNRZ1FXNWphRzl5TUI0WAorRFRFd01EVXlOekl4TXpjMU5Gb1hEVEU0TURneE16SXhNemMxTkZvd1ZERUxNQWtHQTFVRUJoTUNUazR4TVRBdgorQmdOVkJBb01LRVZrWld3Z1EzVnliQ0JCY21OMGFXTWdTV3hzZFdScGRXMGdVbVZ6WldGeVkyZ2dRMnh2ZFdReAorRWpBUUJnTlZCQU1NQ1d4dlkyRnNhRzl6ZERDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQQorekttUkt5TG9rQ3ZsVE55dWJkcE04ekxNcFdobldqdTVocU9WaUQ3b1k4UHRBR0FaQXl0ZFcxYUsyaUZlY1Z6UgorNDk1UkdNRVhGTEV6a0FCY211VnpDNmlJbk5BTFZMenFPam5kOW1XQlN5bVpUSEhUOTJsL2dPam9iV0ZCZzRmcgorckN5OUQrc2IvYUkzbDIweFZycExVZDJ4QWV1SitDWGVXNlBsc2o5TWQxTUNBd0VBQWFPQml6Q0JpREFXQmdOVgorSFJFRUR6QU5nZ3RzYjJOaGJHaHZjM1FBYURBTEJnTlZIUThFQkFNQ0JTQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQgorQlFVSEF3RXdIUVlEVlIwT0JCWUVGRHNyaEEwalBFYjVtK1hDK3JjdzU2emo3UW5ETUI4R0ExVWRJd1FZTUJhQQorRkswKzRqa0h1RnlxSnBDVVRDWnBJWVBpVGphVU1Bd0dBMVVkRXdFQi93UUNNQUF3RFFZSktvWklodmNOQVFFRgorQlFBRGdnRUJBS0w2WVU3QUVCLzRPQ3o5cG5TRjM0N3VRWkNoMThreVpWMWgxUk5ST3hFY2V3RUdjSitUVWxRVgordlpNNitFRGo0cXNCbHZ0enhVSXNyYzdvVWxmYnRoV1FkZVBsZFptd2crMncvUExRMlQxb0hObTB6YUdwUUJsRQorUmhTTEVXNHVIR1dGYzBYd2kwL3FBUzFoRDY0TmNBelRQQndmSkdhakMyTFJoeDZPbHZaRHp4d2s1NVRRZnJEdQorRzI4VUh3UTE2UHc4eUo3amJnNU1mYWtqbHkxdXNVM2pCUnZPaGk4dnM4bGdSMWlzNmt6THduc1BDTGlua09jaQorTW5EMkNUNzVWSlN3TjFBaVlFa2NoSjRhSWd3K3FSWjhYckZRRTJ1Q0ZOT0tQVTN0R01wQVdkYTVjcDlrNVF2bgorcHJqdUtiVnE3SUt5bEZZMjQ0ZXpCNnBwdUN6dkRCUT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gREggUEFSQU1FVEVSUy0tLS0tCitNSUdIQW9HQkFMLzNoUnh2V1grTWR5dS9hQlBVMUplZUE1c2c0blh0QTdCMjRlQ3FsOVRxNTNMa3MxL0hKNUIrCit4U2FwR0FGZCsyMnhoQnNOa0ppaGY3NG9pUEVWcjluTm9MakZWL0RaZTI1OStKWWdzK3BCVEZOK0NwMTNBTFVpCitDZVp4WDJtbHhsc3REMVNCUlRLZ3hBL2o0dHRSMUNobjhrbm4rUlZkRkU5WUZLQ1lQeUxyQWdFQworLS0tLS1FTkQgREggUEFSQU1FVEVSUy0tLS0tCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0MGgtc3YucHJtIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LnBybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTg5NDRiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvU2VydmVyLWxvY2FsaG9zdDBoLXN2LnBybQpAQCAtMCwwICsxLDI2IEBACitleHRlbnNpb25zID0geDUwOXYzCitbIHg1MDl2MyBdCisjc3ViamVjdEFsdE5hbWUgPSBETlM6bG9jYWxob3N0XDBoCitzdWJqZWN0QWx0TmFtZSA9IERFUjozMDowZDo4MjowYjo2Yzo2Zjo2Mzo2MTo2Yzo2ODo2Zjo3Mzo3NDowMDo2OAora2V5VXNhZ2UJPSBrZXlFbmNpcGhlcm1lbnQKK2V4dGVuZGVkS2V5VXNhZ2UgPSBzZXJ2ZXJBdXRoCitzdWJqZWN0S2V5SWRlbnRpZmllciA9IGhhc2gKK2F1dGhvcml0eUtleUlkZW50aWZpZXIgPSBrZXlpZAorYmFzaWNDb25zdHJhaW50cyA9IGNyaXRpY2FsLENBOmZhbHNlCitbIHJlcSBdCitkZWZhdWx0X2JpdHMgICAgICAgICAgICAgICAgICAgID0gMTAyNAorZGlzdGluZ3Vpc2hlZF9uYW1lICAgICAgICAgICAgICA9IHJlcV9ETgorZGVmYXVsdF9tZAkJCT0gc2hhMjU2CitzdHJpbmdfbWFzawkJCT0gdXRmOG9ubHkKK1sgcmVxX0ROIF0KK2NvdW50cnlOYW1lICAgICAgICAgICAgICAgICAgICAgPSAiQ291bnRyeSBOYW1lIGlzIE5vcnRoZXJuIE5vd2hlcmUiCitjb3VudHJ5TmFtZV92YWx1ZSAgICAgICAgICAgID0gTk4KK29yZ2FuaXphdGlvbk5hbWUgICAgICAgICAgICAgID0gIk9yZ2FuaXphdGlvbiBOYW1lIgorb3JnYW5pemF0aW9uTmFtZV92YWx1ZSAgICAgPSBFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3VkCitjb21tb25OYW1lICAgICAgICAgICAgICAgICAgICAgID0gIkNvbW1vbiBOYW1lIgorY29tbW9uTmFtZV92YWx1ZSAgICAgICAgICAgICAgPSBsb2NhbGhvc3QgCisKK1tzb21ldGhpbmddCisjIFRoZSBrZXkKKyMgdGhlIGNlcnRpZmljYXRlCisjIHNvbWUgZGhwYXJhbQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvc2NyaXB0cy9nZW5yb290LnNoIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvc2NyaXB0cy9nZW5yb290LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhYzEzODgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9zY3JpcHRzL2dlbnJvb3Quc2gKQEAgLTAsMCArMSw2NiBAQAorIyEvYmluL2Jhc2gKKworIyAoYykgQ29weVJpZ2h0IEVkZWxXZWIgZm9yIEVkZWxLZXkgYW5kIE9wZW5FdmlkZW5jZSwgMjAwMC0yMDA0LCAyMDA5CisjIEF1dGhvcjogUGV0ZXIgU3lsdmVzdGVyCisKKyMgImxpYnJlIiBmb3IgaW50ZWdyYXRpb24gd2l0aCBjdXJsCisKK09QRU5TU0w9b3BlbnNzbAoraWYgWyAtZiAvdXNyL2xvY2FsL3NzbC9iaW4vb3BlbnNzbCBdIDsgdGhlbgorT1BFTlNTTD0vdXNyL2xvY2FsL3NzbC9iaW4vb3BlbnNzbAorZmkKKworVVNBR0U9ImVjaG8gVXNhZ2UgaXMgZ2Vucm9vdC5zaCBcPG5hbWVcPiIKKworSE9NRT1gcHdkYAorY2QgJEhPTUUKKworS0VZU0laRT0yMDQ4CitEVVJBVElPTj02MDAwCisKK1BSRUZJWD0kMQoraWYgWyAiLiRQUkVGSVgiID0gLiBdIDsgdGhlbgorCWVjaG8gTm8gY29uZmlndXJhdGlvbiBwcmVmaXgKKwlOT1RPSz0xCitlbHNlCisgICAgaWYgWyAhIC1mICRQUkVGSVgtY2EucHJtIF0gOyB0aGVuCisJZWNobyBObyBjb25maWd1cmF0aW9uIGZpbGUgJFBSRUZJWC1jYS5wcm0KKwlOT1RPSz0xCisgICAgZmkKK2ZpCisKK2lmIFsgIi4kTk9UT0siICE9IC4gXSA7IHRoZW4KKyAgICBlY2hvICJTb3JyeSwgSSBjYW4ndCBkbyB0aGF0IGZvciB5b3UuIgorICAgICRVU0FHRQorICAgIGV4aXQKK2ZpCisKK0dFVFNFUklBTD0iXCR0ID0gdGltZSA7XCRkID0gIFwkdCAuIHN1YnN0cihcJHQrJCQgLC00LDQpLTE7cHJpbnQgXCRkIgorU0VSSUFMPWAvdXNyL2Jpbi9lbnYgcGVybCAtZSAiJEdFVFNFUklBTCJgCisKK2VjaG8gU0VSSUFMPSRTRVJJQUwgUFJFRklYPSRQUkVGSVggRFVSQVRJT049JERVUkFUSU9OIEtFWVNJWkU9JEtFWVNJWkUKKworZWNobyAib3BlbnNzbCBnZW5yc2EgLW91dCAkUFJFRklYLWNhLmtleSAkS0VZU0laRSAtcGFzc291dCBYWFgiCitvcGVuc3NsIGdlbnJzYSAtb3V0ICRQUkVGSVgtY2Eua2V5ICRLRVlTSVpFIC1wYXNzb3V0IHBhc3M6c2VjcmV0CisKK2VjaG8gIm9wZW5zc2wgcmVxIC1jb25maWcgJFBSRUZJWC1jYS5wcm0gLW5ldyAta2V5ICRQUkVGSVgtY2Eua2V5IC1vdXQgJFBSRUZJWC1jYS5jc3IiCiskT1BFTlNTTCByZXEgLWNvbmZpZyAkUFJFRklYLWNhLnBybSAtbmV3IC1rZXkgJFBSRUZJWC1jYS5rZXkgLW91dCAkUFJFRklYLWNhLmNzciAtcGFzc2luIHBhc3M6c2VjcmV0CisKK2VjaG8gIm9wZW5zc2wgeDUwOSAtc2V0X3NlcmlhbCAkU0VSSUFMIC1leHRmaWxlICRQUkVGSVgtY2EucHJtIC1kYXlzICREVVJBVElPTiAtcmVxIC1zaWdua2V5ICRQUkVGSVgtY2Eua2V5IC1pbiAkUFJFRklYLWNhLmNzciAtb3V0ICRQUkVGSVgtJFNFUklBTC5jYS1jYWNlcnQgLXNoYTEgIgorCiskT1BFTlNTTCB4NTA5ICAtc2V0X3NlcmlhbCAkU0VSSUFMIC1leHRmaWxlICRQUkVGSVgtY2EucHJtIC1kYXlzICREVVJBVElPTiAtcmVxIC1zaWdua2V5ICRQUkVGSVgtY2Eua2V5IC1pbiAkUFJFRklYLWNhLmNzciAtb3V0ICRQUkVGSVgtJFNFUklBTC1jYS5jYWNlcnQgLXNoYTEKKworZWNobyAib3BlbnNzbCB4NTA5IC10ZXh0IC1oYXNoIC1vdXQgJFBSRUZJWC1jYS5jYWNlcnQgLWluICRQUkVGSVgtJFNFUklBTC1jYS5jYWNlcnQgLW5hbWVvcHQgbXVsdGlsaW5lIgorJE9QRU5TU0wgeDUwOSAtdGV4dCAtaGFzaCAtb3V0ICRQUkVGSVgtY2EuY2FjZXJ0IC1pbiAkUFJFRklYLSRTRVJJQUwtY2EuY2FjZXJ0IC1uYW1lb3B0IG11bHRpbGluZQorCitlY2hvICJvcGVuc3NsIHg1MDkgLWluICRQUkVGSVgtY2EuY2FjZXJ0IC1vdXRmb3JtIGRlciAtb3V0ICRQUkVGSVgtY2EuZGVyICIKKyRPUEVOU1NMIHg1MDkgLWluICRQUkVGSVgtY2EuY2FjZXJ0IC1vdXRmb3JtIGRlciAtb3V0ICRQUkVGSVgtY2EuZGVyCisKK2VjaG8gIm9wZW5zc2wgeDUwOSAtaW4gJFBSRUZJWC1jYS5jYWNlcnQgLXRleHQgLW91dCAkUFJFRklYLWNhLmNydCAtbmFtZW9wdCBtdWx0aWxpbmUiCisKKyRPUEVOU1NMIHg1MDkgLWluICRQUkVGSVgtY2EuY2FjZXJ0IC10ZXh0IC1vdXQgJFBSRUZJWC1jYS5jcnQgLW5hbWVvcHQgbXVsdGlsaW5lCisKK2VjaG8gIm9wZW5zc2wgeDUwOSAtbm9vdXQgLXRleHQgLWluICRQUkVGSVgtY2EuY2FjZXJ0IC1uYW1lb3B0IG11bHRpbGluZSIKKyRPUEVOU1NMIHg1MDkgLW5vb3V0IC10ZXh0IC1pbiAkUFJFRklYLWNhLmNhY2VydCAtbmFtZW9wdCBtdWx0aWxpbmUKKworIyRPUEVOU1NMIHJzYSAtaW4gLi4va2V5cy8kUFJFRklYLWNhLmtleSAtdGV4dCAtbm9vdXQgLXB1Ym91dApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvc2NyaXB0cy9nZW5zZXJ2LnNoIGIvY3VybC03LjI1LjAvdGVzdHMvY2VydHMvc2NyaXB0cy9nZW5zZXJ2LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3MGRhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9zY3JpcHRzL2dlbnNlcnYuc2gKQEAgLTAsMCArMSwxMTIgQEAKKyMhL2Jpbi9iYXNoCisKKyMgKGMpIENvcHlSaWdodCBFZGVsV2ViIGZvciBFZGVsS2V5IGFuZCBPcGVuRXZpZGVuY2UsIDIwMDAtMjAwNCwgMjAwOQorIyBBdXRob3I6IFBldGVyIFN5bHZlc3RlcgorCisjICJsaWJyZSIgZm9yIGludGVncmF0aW9uIHdpdGggY3VybAorCitPUEVOU1NMPW9wZW5zc2wKK2lmIFsgLWYgL3Vzci9sb2NhbC9zc2wvYmluL29wZW5zc2wgXSA7IHRoZW4KKyAgIE9QRU5TU0w9L3Vzci9sb2NhbC9zc2wvYmluL29wZW5zc2wKK2ZpCisKK1VTQUdFPSJlY2hvIFVzYWdlIGlzIGdlbnNlcnYuc2ggPHByZWZpeD4gPGNhcHJlZml4PiIKKworSE9NRT1gcHdkYAorY2QgJEhPTUUKKworS0VZU0laRT0xMDI0CitEVVJBVElPTj0zMDAwCisKK1JFUT1ZRVMKK1AxMj1OTworREhQPU5PCisKK1BSRUZJWD0kMQoraWYgWyAiLiRQUkVGSVgiID0gLiBdIDsgdGhlbgorCWVjaG8gTm8gY29uZmlndXJhdGlvbiBwcmVmaXgKKwlOT1RPSz0xCitlbHNlCisgICAgaWYgWyAhIC1mICRQUkVGSVgtc3YucHJtIF0gOyB0aGVuCisJZWNobyBObyBjb25maWd1cmF0aW9uIGZpbGUgJFBSRUZJWC1zdi5wcm0KKwlOT1RPSz0xCisgICAgZmkKK2ZpCisKK0NBUFJFRklYPSQyCitpZiBbICIuJENBUFJFRklYIiA9IC4gXSA7IHRoZW4KKwllY2hvIE5vIENBIHByZWZpeAorCU5PVE9LPTEKK2Vsc2UKKyAgICBpZiBbICEgLWYgJENBUFJFRklYLWNhLmNhY2VydCBdIDsgdGhlbgorCWVjaG8gTm8gQ0EgY2VydGZpY2F0ZSBmaWxlICRDQVBSRUZJWC1jYS5jYWVydAorCU5PVE9LPTEKKyAgICBmaQorICAgIGlmIFsgISAtZiAkQ0FQUkVGSVgtY2Eua2V5IF0gOyB0aGVuCisJZWNobyBObyAkQ0FQUkVGSVgga2V5CisgICAgICAgIE5PVE9LPTEKKyAgICBmaQorZmkKKworaWYgWyAiLiROT1RPSyIgIT0gLiBdIDsgdGhlbgorICAgIGVjaG8gIlNvcnJ5LCBJIGNhbid0IGRvIHRoYXQgZm9yIHlvdS4iCisgICAgJFVTQUdFCisgICAgZXhpdAorZmkKKworaWYgWyAiLiRTRVJJQUwiID0gLiBdIDsgdGhlbgorCUdFVFNFUklBTD0iXCR0ID0gdGltZSA7XCRkID0gIFwkdCAuIHN1YnN0cihcJHQrJCQgLC00LDQpLTE7cHJpbnQgXCRkIgorCVNFUklBTD1gL3Vzci9iaW4vZW52IHBlcmwgLWUgIiRHRVRTRVJJQUwiYAorZmkKKworZWNobyBTRVJJQUw9JFNFUklBTCBQUkVGSVg9JFBSRUZJWCBDQVBSRUZJWD0kQ0FQUkVGSVggRFVSQVRJT049JERVUkFUSU9OIEtFWVNJWkU9JEtFWVNJWkUKKworaWYgWyAiJERIUC4iID0gWUVTLiBdIDsgdGhlbgorICAgZWNobyAib3BlbnNzbCBkaHBhcmFtIC0yIC1vdXQgJFBSRUZJWC1zdi5kaHAgJEtFWVNJWkUiCisgICAkT1BFTlNTTCBkaHBhcmFtIC0yIC1vdXQgJFBSRUZJWC1zdi5kaHAgJEtFWVNJWkUKK2ZpCisKK2lmIFsgIiRSRVEuIiA9IFlFUy4gXSA7IHRoZW4KKyAgIGVjaG8gIm9wZW5zc2wgcmVxIC1jb25maWcgJFBSRUZJWC1zdi5wcm0gLW5ld2tleSByc2E6JEtFWVNJWkUgLWtleW91dCAkUFJFRklYLXN2LmtleSAtb3V0ICRQUkVGSVgtc3YuY3NyIC1wYXNzb3V0IFhYWCIKKyAgICRPUEVOU1NMIHJlcSAtY29uZmlnICRQUkVGSVgtc3YucHJtIC1uZXdrZXkgcnNhOiRLRVlTSVpFIC1rZXlvdXQgJFBSRUZJWC1zdi5rZXkgLW91dCAkUFJFRklYLXN2LmNzciAtcGFzc291dCBwYXNzOnNlY3JldAorZmkKKworZWNobyAib3BlbnNzbCByc2EgLWluICRQUkVGSVgtc3Yua2V5IC1vdXQgJFBSRUZJWC1zdi5rZXkiCiskT1BFTlNTTCByc2EgLWluICRQUkVGSVgtc3Yua2V5IC1vdXQgJFBSRUZJWC1zdi5rZXkgLXBhc3NpbiBwYXNzOnNlY3JldAorZWNobyBwc2V1ZG8gc2VjcmV0cyBnZW5lcmF0ZWQKKworZWNobyAib3BlbnNzbCB4NTA5IC1zZXRfc2VyaWFsICRTRVJJQUwgLWV4dGZpbGUgJFBSRUZJWC1zdi5wcm0gLWRheXMgJERVUkFUSU9OICAtQ0EgJENBUFJFRklYLWNhLmNhY2VydCAtQ0FrZXkgJENBUFJFRklYLWNhLmtleSAtaW4gJFBSRUZJWC1zdi5jc3IgLXJlcSAtb3V0ICRQUkVGSVgtc3YuY3J0IC10ZXh0IC1uYW1lb3B0IG11bHRpbGluZSAtc2hhMSIKKworJE9QRU5TU0wgeDUwOSAtc2V0X3NlcmlhbCAkU0VSSUFMIC1leHRmaWxlICRQUkVGSVgtc3YucHJtIC1kYXlzICREVVJBVElPTiAgLUNBICRDQVBSRUZJWC1jYS5jYWNlcnQgLUNBa2V5ICRDQVBSRUZJWC1jYS5rZXkgLWluICRQUkVGSVgtc3YuY3NyIC1yZXEgLW91dCAkUFJFRklYLXN2LmNydCAtdGV4dCAtbmFtZW9wdCBtdWx0aWxpbmUgLXNoYTEKKworaWYgWyAiJFAxMi4iID0gWUVTLiBdIDsgdGhlbgorCisgICBlY2hvICIkT1BFTlNTTCBwa2NzMTIgLWV4cG9ydCAtZGVzMyAtb3V0ICRQUkVGSVgtc3YucDEyIC1jYW5hbWUgJENBUFJFRklYIC1uYW1lICRQUkVGSVggLWlua2V5ICRQUkVGSVgtc3Yua2V5IC1pbiAkUFJFRklYLXN2LmNydCAtY2VydGZpbGUgJENBUFJFRklYLWNhLmNydCAiCisKKyAgICRPUEVOU1NMIHBrY3MxMiAtZXhwb3J0IC1kZXMzIC1vdXQgJFBSRUZJWC1zdi5wMTIgLWNhbmFtZSAkQ0FQUkVGSVggLW5hbWUgJFBSRUZJWCAtaW5rZXkgJFBSRUZJWC1zdi5rZXkgLWluICRQUkVGSVgtc3YuY3J0IC1jZXJ0ZmlsZSAkQ0FQUkVGSVgtY2EuY3J0CitmaQorCitlY2hvICJvcGVuc3NsIHg1MDkgLW5vb3V0IC10ZXh0IC1oYXNoIC1pbiAkUFJFRklYLXN2LnNlbGZjZXJ0IC1uYW1lb3B0IG11bHRpbGluZSIKKyRPUEVOU1NMIHg1MDkgLW5vb3V0IC10ZXh0IC1oYXNoIC1pbiAkUFJFRklYLXN2LmNydCAtbmFtZW9wdCBtdWx0aWxpbmUKKworIyByZXZva2Ugc2VydmVyIGNlcnQKK3RvdWNoICRDQVBSRUZJWC1jYS5kYgorZWNobyAwMSA+ICRDQVBSRUZJWC1jYS5jbnQKK2VjaG8gIm9wZW5zc2wgY2EgLWNvbmZpZyAkQ0FQUkVGSVgtY2EuY25mIC1yZXZva2UgJFBSRUZJWC1zdi5jcnQiCiskT1BFTlNTTCBjYSAtY29uZmlnICRDQVBSRUZJWC1jYS5jbmYgLXJldm9rZSAkUFJFRklYLXN2LmNydAorCisjIGlzc3VlIENSTAorZWNobyAib3BlbnNzbCBjYSAtY29uZmlnICRDQVBSRUZJWC1jYS5jbmYgLWdlbmNybCAtb3V0ICRQUkVGSVgtc3YuY3JsIgorJE9QRU5TU0wgY2EgLWNvbmZpZyAkQ0FQUkVGSVgtY2EuY25mIC1nZW5jcmwgLW91dCAkUFJFRklYLXN2LmNybAorCitlY2hvICJvcGVuc3NsIHg1MDkgLWluICRQUkVGSVgtc3YuY3J0IC1vdXRmb3JtIGRlciAtb3V0ICRQUkVGSVgtc3YuZGVyICIKKyRPUEVOU1NMIHg1MDkgLWluICRQUkVGSVgtc3YuY3J0IC1vdXRmb3JtIGRlciAtb3V0ICRQUkVGSVgtc3YuZGVyCisKKyMgYWxsIHRvZ2V0aGVyIG5vdwordG91Y2ggJFBSRUZJWC1zdi5kaHAKK2NhdCAkUFJFRklYLXN2LnBybSAkUFJFRklYLXN2LmtleSAgJFBSRUZJWC1zdi5jcnQgJFBSRUZJWC1zdi5kaHAgPiRQUkVGSVgtc3YucGVtCitjaG1vZCBvLXIgJFBSRUZJWC1zdi5wcm0KKworZWNobyAiJFBSRUZJWC1zdi5wZW0gZG9uZSIKKworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9zcnAtdmVyaWZpZXItY29uZiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL3NycC12ZXJpZmllci1jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ODI1Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9zcnAtdmVyaWZpZXItY29uZgpAQCAtMCwwICsxLDMgQEAKKzE6RXdsMmhjaml1dE1kM0Z1MmxnRm5VWFdTYzY3VFZ5eTJ2d1lDS29TOU1Mc3JkSlZUOVJnV1RDdUVxV0pyZkI2dUUzTHNFOUdrT2xhWmFiUzdNMjlzajVUbnpVcU9MSk1qaXdFekFyZmlMcjlXYk1SQU5sRjY4TjVBVkxjUFd2Tng2WmpsM201U2NwMEJ6SkJ6OVRrZ2ZoektKWi5XdFAzTXYvNjdJLzB3bVJaOjIKKzI6ZFV5eWh4YXY5dGdueUlnNjV3SHhremtiN1ZJUGg0bzBsa3dmT0tpUHA0clZKcnpMUllWQnRiNzZnS2xhTzdlZjVMWUdFdzNHLjRFMGpiTXhjWUJldER5MllkcGlQLzNHV0pJbm9CYnZZSElSTzl1QnV4Z3NGS1RLV3U3Um5SN3lUYXUvSXJGVGRRNExZL3EuQXZvQ3pNeFYwUEt2RDlPZHNvL0xGSUl0bjhQYlRvdjNWTW4vWkVIMlNxaHRwQlVrV3RtY0lrRWZsaFgvWVkvZmtCS2ZCYmUyNy96VWFLVVVaRVVZWjJIMm5sQ0w2MC5KSVBlWkpTenN1L3hIRFZjeDoyCiszOjJpUXpqMUNhZ1FjLzVjdGJ1SllMV2xodEFzUEhjN3hXVnlDUEFLRlJMV0tBRHBBU2txZTlkaldQRldUTlRkZUp0TDhuQWhJbUNuM1NyL0lBZFExRnJHdzBXdlFVc3RQeDNGTzlLTmNYT3dpc09RMVZsTC5naGVBSFlmYll5QmF4WEwuTmNKeDlUVXdnV0RUMGhSekZ6cVNyZEdHVE4zRmdTVEExdjRRbkh0RXlnTmozZVoudTBNVGhxV1VhRGlQODducWhhN1huVDY2YmtUQ2tROC43VDhMNEtaaklJbXJOclVmdGVkVFRCaS5XQ2kuemxyQnhEdU9NMGRhMEpiVWtRbFhxdnAweXZKQVBwQzExbnhtbVpPQWJRT3l3WkdtdTluaFpOdXdUbHhqZklybzBGT2R0aGFEVHVaUkw5Vkw3TVJQVURvL0RRRXlXLmQ0SC5VSWx6cDoyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9zcnAtdmVyaWZpZXItZGIgYi9jdXJsLTcuMjUuMC90ZXN0cy9jZXJ0cy9zcnAtdmVyaWZpZXItZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4NTFhMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2NlcnRzL3NycC12ZXJpZmllci1kYgpAQCAtMCwwICsxLDIgQEAKK2pzbWl0aDozNGZQazd1LnczUi9NMWsyc1E5Ri4wNEdacUxLQXNxRG40NENIR3U3TUwwTThWV3d1MXA3OU9MeGk2alJoU05kU000Nkt4OUdSVnlKTFh6N2VvazUzLi5BNlg1cDNOZG5NU1lYOFd3WXJEbXVzZUhEci5ldWE3Z2pkMDRTNEVvWTRadUtpeDIuV0dBc01Ud2s4NkFtVHZjcXl6cXNIN0dEaEdPSEVoalA1enM6bFRqQkJvSzA0Szl2VEtpTDEwckkvOjEKK2FsaWNlOjNJSVAxZzFIRFRONlZFVXI4RFVrTWxlb2NvQzFjcHVGWm5tdW5EYUdoTXlJc3c4TEF3Q2M3WmFwV2FDNjZnWlN5aXM0ZXpTdUNxdmhzSmR3ZGMuMGVzMlVySDZQQmtCUWZsY1FEdUMuZEVwamhXZ0FjSDJEdy4ycVUuRTBBcFF6TGtjS09qWE1RMlI2ak1CTDE0a0VVUGpqSFMzYWExNnlCLkFmajNiTlBkZjoxSnhVNEdrd2VVRWlpNi5iMGdya3pVOjEKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvRElTQUJMRUQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL0RJU0FCTEVECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMGYyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL0RJU0FCTEVECkBAIC0wLDAgKzEsNyBAQAorIyBUaGlzIGZpbGUgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0ZXN0IGNhc2VzIHRoYXQgc2hvdWxkIG5vdCBydW4gd2hlbiBhbGwKKyMgdGVzdCBjYXNlcyBhcmUgcnVuIGJ5IHJ1bnRlc3RzLnBsLiBKdXN0IGFkZCB0aGUgcGxhaW4gdGVzdCBjYXNlIG51bWJlcnMsIG9uZQorIyBwZXIgbGluZS4KKyMgTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgbGV0dGVycyBhcmUgdHJlYXRlZCBhcyBjb21tZW50cy4KKzU5NAorMTIwOQorMTIxMQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS9NYWtlZmlsZS5hbSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBlN2FjNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxMTAgQEAKK2lhbGw6CitpbnN0YWxsOgordGVzdDoKKworIyB0aGlzIGxpc3QgaXMgaW4gbnVtZXJpY2FsIG9yZGVyCitURVNUQ0FTRVMgPSB0ZXN0MSB0ZXN0MiB0ZXN0MyB0ZXN0NCB0ZXN0NSB0ZXN0NiB0ZXN0NyB0ZXN0OCB0ZXN0OQlcCit0ZXN0MTAgdGVzdDExIHRlc3QxMiB0ZXN0MTMgdGVzdDE0IHRlc3QxNSB0ZXN0MTYgdGVzdDE3IHRlc3QxOCB0ZXN0MTkJXAordGVzdDIwIHRlc3QyMSB0ZXN0MjIgdGVzdDIzIHRlc3QyNCB0ZXN0MjUgdGVzdDI2IHRlc3QyNyB0ZXN0MjggdGVzdDI5CVwKK3Rlc3QzMCB0ZXN0MzEgdGVzdDMyIHRlc3QzMyB0ZXN0MzQgdGVzdDM1IHRlc3QzNiB0ZXN0MzcgdGVzdDM4IHRlc3QzOQlcCit0ZXN0NDAgdGVzdDQxIHRlc3Q0MiB0ZXN0NDMgdGVzdDQ0IHRlc3Q0NSB0ZXN0NDYgdGVzdDQ3IHRlc3Q0OCB0ZXN0NDkJXAordGVzdDUwIHRlc3Q1MSB0ZXN0NTIgdGVzdDUzIHRlc3Q1NCB0ZXN0NTUgdGVzdDU2IHRlc3Q1NyB0ZXN0NTggdGVzdDU5CVwKK3Rlc3Q2MCB0ZXN0NjEgdGVzdDYyIHRlc3Q2MyB0ZXN0NjQgdGVzdDY1IHRlc3Q2NiB0ZXN0NjcgdGVzdDY4IHRlc3Q2OQlcCit0ZXN0NzAgdGVzdDcxIHRlc3Q3MiB0ZXN0NzMgdGVzdDc0IHRlc3Q3NSB0ZXN0NzYgdGVzdDc3IHRlc3Q3OCB0ZXN0NzkJXAordGVzdDgwIHRlc3Q4MSB0ZXN0ODIgdGVzdDgzIHRlc3Q4NCB0ZXN0ODUgdGVzdDg2IHRlc3Q4NyB0ZXN0ODggdGVzdDg5CVwKK3Rlc3Q5MCB0ZXN0OTEgdGVzdDkyIHRlc3Q5MyB0ZXN0OTQgdGVzdDk1IHRlc3Q5NyB0ZXN0OTggdGVzdDk5IHRlc3QxMDAJXAordGVzdDEwMSB0ZXN0MTAyIHRlc3QxMDMgdGVzdDEwNCB0ZXN0MTA1IHRlc3QxMDYgdGVzdDEwNyB0ZXN0MTA4IHRlc3QxMDkJXAordGVzdDExMCB0ZXN0MTExIHRlc3QxMTIgdGVzdDExMyB0ZXN0MTE0IHRlc3QxMTUgdGVzdDExNiB0ZXN0MTE3IHRlc3QxMTgJXAordGVzdDExOSB0ZXN0MTIwIHRlc3QxMjEgdGVzdDEyMiB0ZXN0MTIzIHRlc3QxMjQgdGVzdDEyNSB0ZXN0MTI2IHRlc3QxMjcJXAordGVzdDEyOCB0ZXN0MTI5IHRlc3QxMzAgdGVzdDEzMSB0ZXN0MTMyIHRlc3QxMzMgdGVzdDEzNCB0ZXN0MTM1IHRlc3QxMzYJXAordGVzdDEzNyB0ZXN0MTM4IHRlc3QxMzkgdGVzdDE0MCB0ZXN0MTQxIHRlc3QxNDIgdGVzdDE0MyB0ZXN0MTQ0IHRlc3QxNDUJXAordGVzdDE0NiB0ZXN0MTQ3IHRlc3QxNDggdGVzdDE0OSB0ZXN0MTUwIHRlc3QxNTEgdGVzdDE1MiB0ZXN0MTUzIHRlc3QxNTQJXAordGVzdDE1NSB0ZXN0MTU2IHRlc3QxNTcgdGVzdDE1OCB0ZXN0MTU5IHRlc3QxNjAgdGVzdDE2MSB0ZXN0MTYyIHRlc3QxNjMJXAordGVzdDE2NCB0ZXN0MTY1IHRlc3QxNjYgdGVzdDE2NyB0ZXN0MTY4IHRlc3QxNjkgdGVzdDE3MCB0ZXN0MTcxIHRlc3QxNzIJXAordGVzdDE3MyB0ZXN0MTc0IHRlc3QxNzUgdGVzdDE3NiB0ZXN0MTc3IHRlc3QxNzggdGVzdDE3OSB0ZXN0MTgwIHRlc3QxODEJXAordGVzdDE4MiB0ZXN0MTgzIHRlc3QxODQgdGVzdDE4NSB0ZXN0MTg2IHRlc3QxODcgdGVzdDE4OCB0ZXN0MTg5IHRlc3QxOTAJXAordGVzdDE5MSB0ZXN0MTkyIHRlc3QxOTMgdGVzdDE5NCB0ZXN0MTk1IHRlc3QxOTYgdGVzdDE5NyB0ZXN0MTk4IHRlc3QxOTkJXAordGVzdDIwMCB0ZXN0MjAxIHRlc3QyMDIgdGVzdDIwMyB0ZXN0MjA0IHRlc3QyMDUgdGVzdDIwNiB0ZXN0MjA3IHRlc3QyMDgJXAordGVzdDIwOSB0ZXN0MjEwIHRlc3QyMTEgdGVzdDIxMiB0ZXN0MjEzIHRlc3QyMTQgdGVzdDIxNSB0ZXN0MjE2IHRlc3QyMTcJXAordGVzdDIxOCB0ZXN0MjIwIHRlc3QyMjEgdGVzdDIyMiB0ZXN0MjIzIHRlc3QyMjQgdGVzdDIyNSB0ZXN0MjI2IHRlc3QyMjcJXAordGVzdDIyOCB0ZXN0MjI5IHRlc3QyMzEgdGVzdDIzMyB0ZXN0MjM0IHRlc3QyMzUgdGVzdDIzNiB0ZXN0MjM3IHRlc3QyMzgJXAordGVzdDIzOSB0ZXN0MjQwIHRlc3QyNDEgdGVzdDI0MiB0ZXN0MjQzIHRlc3QyNDUgdGVzdDI0NiB0ZXN0MjQ3IHRlc3QyNDgJXAordGVzdDI0OSB0ZXN0MjUwIHRlc3QyNTEgdGVzdDI1MiB0ZXN0MjUzIHRlc3QyNTQgdGVzdDI1NSB0ZXN0MjU2IHRlc3QyNTcJXAordGVzdDI1OCB0ZXN0MjU5IHRlc3QyNjAgdGVzdDI2MSB0ZXN0MjYyIHRlc3QyNjMgdGVzdDI2NCB0ZXN0MjY1IHRlc3QyNjYJXAordGVzdDI2NyB0ZXN0MjY4IHRlc3QyNjkgdGVzdDI3MCB0ZXN0MjcxIHRlc3QyNzIgdGVzdDI3MyB0ZXN0Mjc0IHRlc3QyNzUJXAordGVzdDI3NiB0ZXN0Mjc3IHRlc3QyNzggdGVzdDI3OSB0ZXN0MjgwIHRlc3QyODEgdGVzdDI4MiB0ZXN0MjgzIHRlc3QyODQJXAordGVzdDI4NSB0ZXN0Mjg2IHRlc3QyODcgdGVzdDI4OCB0ZXN0Mjg5IHRlc3QyOTAgdGVzdDI5MSB0ZXN0MjkyIHRlc3QyOTMJXAordGVzdDI5NCB0ZXN0Mjk1IHRlc3QyOTYgdGVzdDI5NyB0ZXN0Mjk4IHRlc3QyOTkgdGVzdDMwMCB0ZXN0MzAxIHRlc3QzMDIJXAordGVzdDMwMyB0ZXN0MzA0IHRlc3QzMDUgdGVzdDMwNiB0ZXN0MzA3IHRlc3QzMDggdGVzdDMwOSB0ZXN0MzEwIHRlc3QzMTEJXAordGVzdDMxMiB0ZXN0MzEzIHRlc3QzMjAgdGVzdDMyMSB0ZXN0MzIyIHRlc3QzMjMgdGVzdDMyNCB0ZXN0MzUwIHRlc3QzNTEJXAordGVzdDM1MiB0ZXN0MzUzIHRlc3QzNTQgdGVzdDQwMCB0ZXN0NDAxIHRlc3Q0MDIgdGVzdDQwMyB0ZXN0NDA0IHRlc3Q0MDUJXAordGVzdDQwNiB0ZXN0NDA3IHRlc3Q0MDggdGVzdDQwOSB0ZXN0NTAwIHRlc3Q1MDEgdGVzdDUwMiB0ZXN0NTAzIHRlc3Q1MDQJXAordGVzdDUwNSB0ZXN0NTA2IHRlc3Q1MDcgdGVzdDUwOCB0ZXN0NTEwIHRlc3Q1MTEgdGVzdDUxMiB0ZXN0NTEzIHRlc3Q1MTQJXAordGVzdDUxNSB0ZXN0NTE2IHRlc3Q1MTcgdGVzdDUxOCB0ZXN0NTE5IHRlc3Q1MjAgdGVzdDUyMSB0ZXN0NTIyIHRlc3Q1MjMJXAordGVzdDUyNCB0ZXN0NTI1IHRlc3Q1MjYgdGVzdDUyNyB0ZXN0NTI4IHRlc3Q1MjkgdGVzdDUzMCB0ZXN0NTMxIHRlc3Q1MzIJXAordGVzdDUzMyB0ZXN0NTM0IHRlc3Q1MzUgdGVzdDUzNiB0ZXN0NTM3IHRlc3Q1MzggdGVzdDUzOSB0ZXN0NTQwIHRlc3Q1NDEJXAordGVzdDU0MiB0ZXN0NTQzIHRlc3Q1NDQgdGVzdDU0NSB0ZXN0NTQ2IHRlc3Q1NDcgdGVzdDU0OCB0ZXN0NTQ5IHRlc3Q1NTAJXAordGVzdDU1MSB0ZXN0NTUyIHRlc3Q1NTMgdGVzdDU1NCB0ZXN0NTU1IHRlc3Q1NTYgdGVzdDU1NyB0ZXN0NTYwIHRlc3Q1NjEJXAordGVzdDU2MiB0ZXN0NTYzIHRlc3Q1NjQgdGVzdDU2NSB0ZXN0NTY2IHRlc3Q1NjcgdGVzdDU2OCB0ZXN0NTY5IHRlc3Q1NzAJXAordGVzdDU3MSB0ZXN0NTcyIHRlc3Q1NzMgdGVzdDU3NCB0ZXN0NTc1IHRlc3Q1NzYgdGVzdDU3OCB0ZXN0NTc5IHRlc3Q1ODAJXAordGVzdDU4MSB0ZXN0NTgyIHRlc3Q1ODMgdGVzdDU4NCB0ZXN0NTg1IHRlc3Q1ODYgdGVzdDU4NyB0ZXN0NTg4IHRlc3Q1OTAgXAordGVzdDU5MSB0ZXN0NTkyIHRlc3Q1OTMgdGVzdDU5NCB0ZXN0NTk1IHRlc3Q1OTYgdGVzdDU5NyB0ZXN0NTk4IFwKK3Rlc3Q2MDAgdGVzdDYwMSB0ZXN0NjAyIHRlc3Q2MDMgdGVzdDYwNAlcCit0ZXN0NjA1IHRlc3Q2MDYgdGVzdDYwNyB0ZXN0NjA4IHRlc3Q2MDkgdGVzdDYxMCB0ZXN0NjExIHRlc3Q2MTIgdGVzdDYxMwlcCit0ZXN0NjE0IHRlc3Q2MTUgdGVzdDYxNiB0ZXN0NjE3IHRlc3Q2MTggdGVzdDYxOSB0ZXN0NjIwIHRlc3Q2MjEgdGVzdDYyMglcCit0ZXN0NjIzIHRlc3Q2MjQgdGVzdDYyNSB0ZXN0NjI2IHRlc3Q2MjcgdGVzdDYyOCB0ZXN0NjI5IHRlc3Q2MzAgdGVzdDYzMQlcCit0ZXN0NjMyIHRlc3Q2MzMgdGVzdDYzNCB0ZXN0NjM1IHRlc3Q2MzYgdGVzdDYzNyB0ZXN0NjM4IHRlc3Q2MzkgXAordGVzdDcwMCB0ZXN0NzAxIHRlc3Q3MDIJdGVzdDcwMyB0ZXN0NzA0IHRlc3Q3MDUgdGVzdDcwNiB0ZXN0NzA3IHRlc3Q3MDggXAordGVzdDcwOSB0ZXN0NzEwIFwKK3Rlc3Q4MDAgdGVzdDgwMSB0ZXN0ODAyCVwKK3Rlc3Q4MDMgdGVzdDgwNCB0ZXN0ODA1IHRlc3Q4MDYgdGVzdDgwNyB0ZXN0ODA4IHRlc3Q4MDkgdGVzdDgxMCB0ZXN0ODExCVwKK3Rlc3Q4MTIgdGVzdDgxMyB0ZXN0ODE0IHRlc3Q4MTUgXAordGVzdDEwMDAgdGVzdDEwMDEgdGVzdDEwMDIgdGVzdDEwMDMgdGVzdDEwMDQgdGVzdDEwMDUJXAordGVzdDEwMDYgdGVzdDEwMDcgdGVzdDEwMDggdGVzdDEwMDkgdGVzdDEwMTAgdGVzdDEwMTEgdGVzdDEwMTIgdGVzdDEwMTMJXAordGVzdDEwMTQgdGVzdDEwMTUgdGVzdDEwMTYgdGVzdDEwMTcgdGVzdDEwMTggdGVzdDEwMTkgdGVzdDEwMjAgdGVzdDEwMjEJXAordGVzdDEwMjIgdGVzdDEwMjMgdGVzdDEwMjQgdGVzdDEwMjUgdGVzdDEwMjYgdGVzdDEwMjcgdGVzdDEwMjggdGVzdDEwMjkJXAordGVzdDEwMzAgdGVzdDEwMzEgdGVzdDEwMzIgdGVzdDEwMzMgdGVzdDEwMzQgdGVzdDEwMzUgdGVzdDEwMzYgdGVzdDEwMzcJXAordGVzdDEwMzggdGVzdDEwMzkgdGVzdDEwNDAgdGVzdDEwNDEgdGVzdDEwNDIgdGVzdDEwNDMgdGVzdDEwNDQgdGVzdDEwNDUJXAordGVzdDEwNDYgdGVzdDEwNDcgdGVzdDEwNDggdGVzdDEwNDkgdGVzdDEwNTAgdGVzdDEwNTEgdGVzdDEwNTIgdGVzdDEwNTMJXAordGVzdDEwNTQgdGVzdDEwNTUgdGVzdDEwNTYgdGVzdDEwNTcgdGVzdDEwNTggdGVzdDEwNTkgdGVzdDEwNjAgdGVzdDEwNjEJXAordGVzdDEwNjIgdGVzdDEwNjMgdGVzdDEwNjQgdGVzdDEwNjUgdGVzdDEwNjYgdGVzdDEwNjcgdGVzdDEwNjggdGVzdDEwNjkJXAordGVzdDEwNzAgdGVzdDEwNzEgdGVzdDEwNzIgdGVzdDEwNzMgdGVzdDEwNzQgdGVzdDEwNzUgdGVzdDEwNzYgdGVzdDEwNzcJXAordGVzdDEwNzggdGVzdDEwNzkgdGVzdDEwODAgdGVzdDEwODEgdGVzdDEwODIgdGVzdDEwODMgdGVzdDEwODQgdGVzdDEwODUJXAordGVzdDEwODYgdGVzdDEwODcgdGVzdDEwODggdGVzdDEwODkgdGVzdDEwOTAgdGVzdDEwOTEgdGVzdDEwOTIgdGVzdDEwOTMJXAordGVzdDEwOTQgdGVzdDEwOTUgdGVzdDEwOTYgdGVzdDEwOTcgdGVzdDEwOTggdGVzdDEwOTkgdGVzdDExMDAgdGVzdDExMDEJXAordGVzdDExMDIgdGVzdDExMDMgdGVzdDExMDQgdGVzdDExMDUgdGVzdDExMDYgdGVzdDExMDcgdGVzdDExMDggdGVzdDExMDkJXAordGVzdDExMTAgdGVzdDExMTEgdGVzdDExMTIgdGVzdDExMTMgdGVzdDExMTQgdGVzdDExMTUgdGVzdDExMTYgdGVzdDExMTcJXAordGVzdDExMTggdGVzdDExMTkgdGVzdDExMjAgdGVzdDExMjEgdGVzdDExMjIgdGVzdDExMjMgdGVzdDExMjQgdGVzdDExMjUJXAordGVzdDExMjYgdGVzdDExMjcgdGVzdDExMjggdGVzdDExMjkgdGVzdDExMzAgdGVzdDExMzEgXAordGVzdDEyMDAgdGVzdDEyMDEgdGVzdDEyMDIgdGVzdDEyMDMgdGVzdDEyMDQgdGVzdDEyMDUgdGVzdDEyMDYgdGVzdDEyMDcgXAordGVzdDEyMDggdGVzdDEyMDkgdGVzdDEyMTAgdGVzdDEyMTEgXAordGVzdDEyMjAgXAordGVzdDEzMDAgdGVzdDEzMDEgdGVzdDEzMDIgdGVzdDEzMDMgdGVzdDEzMDQgdGVzdDEzMDUJXAordGVzdDEzMDYgdGVzdDEzMDcgdGVzdDEzMDggdGVzdDEzMDkgdGVzdDEzMTAgdGVzdDEzMTEgdGVzdDEzMTIgdGVzdDEzMTMgXAordGVzdDEzMTQgdGVzdDEzMTUgdGVzdDEzMTYgdGVzdDEzMTcgdGVzdDEzMTggdGVzdDEzMTkgdGVzdDEzMjAgdGVzdDEzMjEgXAordGVzdDEzMjIgdGVzdDEzMjMgdGVzdDEzMjQgdGVzdDEzMjUgdGVzdDEzMjYgdGVzdDEzMjcgdGVzdDEzMjggdGVzdDEzMjkgXAordGVzdDE0MDAgdGVzdDE0MDEgdGVzdDE0MDIgdGVzdDE0MDMgdGVzdDE0MDQgdGVzdDE0MDUgdGVzdDE0MDYgdGVzdDE0MDcgXAordGVzdDIwMDAgdGVzdDIwMDEgdGVzdDIwMDIgdGVzdDIwMDMgdGVzdDIwMDQKKworRVhUUkFfRElTVCA9ICQoVEVTVENBU0VTKSBESVNBQkxFRAorCitmaWxlY2hlY2s6CisJQG1rZGlyIHRlc3QtcGxhY2U7IFwKKwljcCAiJCh0b3Bfc3JjZGlyKSIvdGVzdHMvZGF0YS90ZXN0WzAtOV0qIHRlc3QtcGxhY2UvOyBcCisJcm0gdGVzdC1wbGFjZS8qfjsgXAorCWZvciBmIGluICQoRVhUUkFfRElTVCk7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQodG9wX3NyY2RpcikvdGVzdHMvZGF0YS8kJGYiOyB0aGVuIFwKKwkgICAgcm0gLWYgInRlc3QtcGxhY2UvJCRmIjsgXAorCSAgZWxzZSBcCisJICAgIGVjaG8gIiQkZiBpcyBsaXN0ZWQgYnV0IG1pc3NpbmchIjsgXAorCSAgZmkgXAorCWRvbmU7IFwKKwllY2hvICJMb2NhbCBmaWxlcyBub3QgcHJlc2VudCBpbiBFWFRSQV9ESVNUOiIgOyBcCisJbHMgdGVzdC1wbGFjZTsgXAorCSEgbHMgdGVzdC1wbGFjZSB8IGdyZXAgLiA+L2Rldi9udWxsIDsgXAorCVJDPSQkPyA7IFwKKwlybSAtcmYgdGVzdC1wbGFjZSA7IFwKKwlleGl0ICQkUkMKKworc2hvdzoKKwlAZWNobyAkKEVYVFJBX0RJU1QpCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL01ha2VmaWxlLmluIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjU4ZDRmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDUyOCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLi8uLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gdGVzdHMvZGF0YQorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbXBpbGVycy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbmZvcHRzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtZnVuY3Rpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3BlbnNzbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW92ZXJyaWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtcmVlbnRyYW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtc3lzdGVtLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hjLXRyYW5zbGl0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3p6NTAteGMtb3ZyLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvc3JjL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACitBTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFID0gQEJVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFQAorQlVJTERfTElCSE9TVE5BTUVfVFJVRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9UUlVFQAorQlVJTERfVU5JVFRFU1RTX0ZBTFNFID0gQEJVSUxEX1VOSVRURVNUU19GQUxTRUAKK0JVSUxEX1VOSVRURVNUU19UUlVFID0gQEJVSUxEX1VOSVRURVNUU19UUlVFQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NPTkZJR1VSRV9PUFRJT05TID0gQENPTkZJR1VSRV9PUFRJT05TQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1JPU1NDT01QSUxJTkdfRkFMU0UgPSBAQ1JPU1NDT01QSUxJTkdfRkFMU0VACitDUk9TU0NPTVBJTElOR19UUlVFID0gQENST1NTQ09NUElMSU5HX1RSVUVACitDVVJMREVCVUdfRkFMU0UgPSBAQ1VSTERFQlVHX0ZBTFNFQAorQ1VSTERFQlVHX1RSVUUgPSBAQ1VSTERFQlVHX1RSVUVACitDVVJMVkVSU0lPTiA9IEBDVVJMVkVSU0lPTkAKK0NVUkxfQ0FfQlVORExFID0gQENVUkxfQ0FfQlVORExFQAorQ1VSTF9DRkxBR19FWFRSQVMgPSBAQ1VSTF9DRkxBR19FWFRSQVNACitDVVJMX0RJU0FCTEVfRElDVCA9IEBDVVJMX0RJU0FCTEVfRElDVEAKK0NVUkxfRElTQUJMRV9GSUxFID0gQENVUkxfRElTQUJMRV9GSUxFQAorQ1VSTF9ESVNBQkxFX0ZUUCA9IEBDVVJMX0RJU0FCTEVfRlRQQAorQ1VSTF9ESVNBQkxFX0dPUEhFUiA9IEBDVVJMX0RJU0FCTEVfR09QSEVSQAorQ1VSTF9ESVNBQkxFX0hUVFAgPSBAQ1VSTF9ESVNBQkxFX0hUVFBACitDVVJMX0RJU0FCTEVfSU1BUCA9IEBDVVJMX0RJU0FCTEVfSU1BUEAKK0NVUkxfRElTQUJMRV9MREFQID0gQENVUkxfRElTQUJMRV9MREFQQAorQ1VSTF9ESVNBQkxFX0xEQVBTID0gQENVUkxfRElTQUJMRV9MREFQU0AKK0NVUkxfRElTQUJMRV9QT1AzID0gQENVUkxfRElTQUJMRV9QT1AzQAorQ1VSTF9ESVNBQkxFX1BST1hZID0gQENVUkxfRElTQUJMRV9QUk9YWUAKK0NVUkxfRElTQUJMRV9SVFNQID0gQENVUkxfRElTQUJMRV9SVFNQQAorQ1VSTF9ESVNBQkxFX1NNVFAgPSBAQ1VSTF9ESVNBQkxFX1NNVFBACitDVVJMX0RJU0FCTEVfVEVMTkVUID0gQENVUkxfRElTQUJMRV9URUxORVRACitDVVJMX0RJU0FCTEVfVEZUUCA9IEBDVVJMX0RJU0FCTEVfVEZUUEAKK0NVUkxfTElCUyA9IEBDVVJMX0xJQlNACitDVVJMX05FVFdPUktfTElCUyA9IEBDVVJMX05FVFdPUktfTElCU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TSEFSRUQgPSBARU5BQkxFX1NIQVJFREAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfR05VVExTX1NSUCA9IEBIQVZFX0dOVVRMU19TUlBACitIQVZFX0xEQVBfU1NMID0gQEhBVkVfTERBUF9TU0xACitIQVZFX0xJQlogPSBASEFWRV9MSUJaQAorSEFWRV9MSUJaX0ZBTFNFID0gQEhBVkVfTElCWl9GQUxTRUAKK0hBVkVfTElCWl9UUlVFID0gQEhBVkVfTElCWl9UUlVFQAorSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QgPSBASEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1RACitIQVZFX1NTTEVBWV9TUlAgPSBASEFWRV9TU0xFQVlfU1JQQAorSUROX0VOQUJMRUQgPSBASUROX0VOQUJMRURACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lQVjZfRU5BQkxFRCA9IEBJUFY2X0VOQUJMRURACitLUkI0X0VOQUJMRUQgPSBAS1JCNF9FTkFCTEVEQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJDVVJMX0xJQlMgPSBATElCQ1VSTF9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQU5PUFQgPSBATUFOT1BUQAorTUlNUFVSRV9GQUxTRSA9IEBNSU1QVVJFX0ZBTFNFQAorTUlNUFVSRV9UUlVFID0gQE1JTVBVUkVfVFJVRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PX1VOREVGSU5FRF9GQUxTRSA9IEBOT19VTkRFRklORURfRkFMU0VACitOT19VTkRFRklORURfVFJVRSA9IEBOT19VTkRFRklORURfVFJVRUAKK05ST0ZGID0gQE5ST0ZGQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSCA9IEBQQVRIQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACitQS0dBRERfTkFNRSA9IEBQS0dBRERfTkFNRUAKK1BLR0FERF9QS0cgPSBAUEtHQUREX1BLR0AKK1BLR0FERF9WRU5ET1IgPSBAUEtHQUREX1ZFTkRPUkAKK1BLR0NPTkZJRyA9IEBQS0dDT05GSUdACitSQU5ET01fRklMRSA9IEBSQU5ET01fRklMRUAKK1JBTkxJQiA9IEBSQU5MSUJACitSRVFVSVJFX0xJQl9ERVBTID0gQFJFUVVJUkVfTElCX0RFUFNACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NPTkFNRV9CVU1QX0ZBTFNFID0gQFNPTkFNRV9CVU1QX0ZBTFNFQAorU09OQU1FX0JVTVBfVFJVRSA9IEBTT05BTUVfQlVNUF9UUlVFQAorU1NMX0VOQUJMRUQgPSBAU1NMX0VOQUJMRURACitTVEFUSUNMSUJfRkFMU0UgPSBAU1RBVElDTElCX0ZBTFNFQAorU1RBVElDTElCX1RSVUUgPSBAU1RBVElDTElCX1RSVUVACitTVFJJUCA9IEBTVFJJUEAKK1NVUFBPUlRfRkVBVFVSRVMgPSBAU1VQUE9SVF9GRUFUVVJFU0AKK1NVUFBPUlRfUFJPVE9DT0xTID0gQFNVUFBPUlRfUFJPVE9DT0xTQAorVEVTVF9TRVJWRVJfTElCUyA9IEBURVNUX1NFUlZFUl9MSUJTQAorVVNFX0FSRVMgPSBAVVNFX0FSRVNACitVU0VfQVhUTFMgPSBAVVNFX0FYVExTQAorVVNFX0NZQVNTTCA9IEBVU0VfQ1lBU1NMQAorVVNFX0VNQkVEREVEX0FSRVNfRkFMU0UgPSBAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VACitVU0VfRU1CRURERURfQVJFU19UUlVFID0gQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVACitVU0VfR05VVExTID0gQFVTRV9HTlVUTFNACitVU0VfR05VVExTX05FVFRMRSA9IEBVU0VfR05VVExTX05FVFRMRUAKK1VTRV9MSUJSVE1QID0gQFVTRV9MSUJSVE1QQAorVVNFX0xJQlNTSDIgPSBAVVNFX0xJQlNTSDJACitVU0VfTUFOVUFMX0ZBTFNFID0gQFVTRV9NQU5VQUxfRkFMU0VACitVU0VfTUFOVUFMX1RSVUUgPSBAVVNFX01BTlVBTF9UUlVFQAorVVNFX05TUyA9IEBVU0VfTlNTQAorVVNFX09QRU5MREFQID0gQFVTRV9PUEVOTERBUEAKK1VTRV9QT0xBUlNTTCA9IEBVU0VfUE9MQVJTU0xACitVU0VfU1NMRUFZID0gQFVTRV9TU0xFQVlACitVU0VfV0lORE9XU19TU1BJID0gQFVTRV9XSU5ET1dTX1NTUElACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9ORURfRkxBVk9VUiA9IEBWRVJTSU9ORURfRkxBVk9VUkAKK1ZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFID0gQFZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFQAorVkVSU0lPTkVEX1NZTUJPTFNfVFJVRSA9IEBWRVJTSU9ORURfU1lNQk9MU19UUlVFQAorVkVSU0lPTk5VTSA9IEBWRVJTSU9OTlVNQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbGliZXh0ID0gQGxpYmV4dEAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3ViZGlycyA9IEBzdWJkaXJzQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKKworIyB0aGlzIGxpc3QgaXMgaW4gbnVtZXJpY2FsIG9yZGVyCitURVNUQ0FTRVMgPSB0ZXN0MSB0ZXN0MiB0ZXN0MyB0ZXN0NCB0ZXN0NSB0ZXN0NiB0ZXN0NyB0ZXN0OCB0ZXN0OQlcCit0ZXN0MTAgdGVzdDExIHRlc3QxMiB0ZXN0MTMgdGVzdDE0IHRlc3QxNSB0ZXN0MTYgdGVzdDE3IHRlc3QxOCB0ZXN0MTkJXAordGVzdDIwIHRlc3QyMSB0ZXN0MjIgdGVzdDIzIHRlc3QyNCB0ZXN0MjUgdGVzdDI2IHRlc3QyNyB0ZXN0MjggdGVzdDI5CVwKK3Rlc3QzMCB0ZXN0MzEgdGVzdDMyIHRlc3QzMyB0ZXN0MzQgdGVzdDM1IHRlc3QzNiB0ZXN0MzcgdGVzdDM4IHRlc3QzOQlcCit0ZXN0NDAgdGVzdDQxIHRlc3Q0MiB0ZXN0NDMgdGVzdDQ0IHRlc3Q0NSB0ZXN0NDYgdGVzdDQ3IHRlc3Q0OCB0ZXN0NDkJXAordGVzdDUwIHRlc3Q1MSB0ZXN0NTIgdGVzdDUzIHRlc3Q1NCB0ZXN0NTUgdGVzdDU2IHRlc3Q1NyB0ZXN0NTggdGVzdDU5CVwKK3Rlc3Q2MCB0ZXN0NjEgdGVzdDYyIHRlc3Q2MyB0ZXN0NjQgdGVzdDY1IHRlc3Q2NiB0ZXN0NjcgdGVzdDY4IHRlc3Q2OQlcCit0ZXN0NzAgdGVzdDcxIHRlc3Q3MiB0ZXN0NzMgdGVzdDc0IHRlc3Q3NSB0ZXN0NzYgdGVzdDc3IHRlc3Q3OCB0ZXN0NzkJXAordGVzdDgwIHRlc3Q4MSB0ZXN0ODIgdGVzdDgzIHRlc3Q4NCB0ZXN0ODUgdGVzdDg2IHRlc3Q4NyB0ZXN0ODggdGVzdDg5CVwKK3Rlc3Q5MCB0ZXN0OTEgdGVzdDkyIHRlc3Q5MyB0ZXN0OTQgdGVzdDk1IHRlc3Q5NyB0ZXN0OTggdGVzdDk5IHRlc3QxMDAJXAordGVzdDEwMSB0ZXN0MTAyIHRlc3QxMDMgdGVzdDEwNCB0ZXN0MTA1IHRlc3QxMDYgdGVzdDEwNyB0ZXN0MTA4IHRlc3QxMDkJXAordGVzdDExMCB0ZXN0MTExIHRlc3QxMTIgdGVzdDExMyB0ZXN0MTE0IHRlc3QxMTUgdGVzdDExNiB0ZXN0MTE3IHRlc3QxMTgJXAordGVzdDExOSB0ZXN0MTIwIHRlc3QxMjEgdGVzdDEyMiB0ZXN0MTIzIHRlc3QxMjQgdGVzdDEyNSB0ZXN0MTI2IHRlc3QxMjcJXAordGVzdDEyOCB0ZXN0MTI5IHRlc3QxMzAgdGVzdDEzMSB0ZXN0MTMyIHRlc3QxMzMgdGVzdDEzNCB0ZXN0MTM1IHRlc3QxMzYJXAordGVzdDEzNyB0ZXN0MTM4IHRlc3QxMzkgdGVzdDE0MCB0ZXN0MTQxIHRlc3QxNDIgdGVzdDE0MyB0ZXN0MTQ0IHRlc3QxNDUJXAordGVzdDE0NiB0ZXN0MTQ3IHRlc3QxNDggdGVzdDE0OSB0ZXN0MTUwIHRlc3QxNTEgdGVzdDE1MiB0ZXN0MTUzIHRlc3QxNTQJXAordGVzdDE1NSB0ZXN0MTU2IHRlc3QxNTcgdGVzdDE1OCB0ZXN0MTU5IHRlc3QxNjAgdGVzdDE2MSB0ZXN0MTYyIHRlc3QxNjMJXAordGVzdDE2NCB0ZXN0MTY1IHRlc3QxNjYgdGVzdDE2NyB0ZXN0MTY4IHRlc3QxNjkgdGVzdDE3MCB0ZXN0MTcxIHRlc3QxNzIJXAordGVzdDE3MyB0ZXN0MTc0IHRlc3QxNzUgdGVzdDE3NiB0ZXN0MTc3IHRlc3QxNzggdGVzdDE3OSB0ZXN0MTgwIHRlc3QxODEJXAordGVzdDE4MiB0ZXN0MTgzIHRlc3QxODQgdGVzdDE4NSB0ZXN0MTg2IHRlc3QxODcgdGVzdDE4OCB0ZXN0MTg5IHRlc3QxOTAJXAordGVzdDE5MSB0ZXN0MTkyIHRlc3QxOTMgdGVzdDE5NCB0ZXN0MTk1IHRlc3QxOTYgdGVzdDE5NyB0ZXN0MTk4IHRlc3QxOTkJXAordGVzdDIwMCB0ZXN0MjAxIHRlc3QyMDIgdGVzdDIwMyB0ZXN0MjA0IHRlc3QyMDUgdGVzdDIwNiB0ZXN0MjA3IHRlc3QyMDgJXAordGVzdDIwOSB0ZXN0MjEwIHRlc3QyMTEgdGVzdDIxMiB0ZXN0MjEzIHRlc3QyMTQgdGVzdDIxNSB0ZXN0MjE2IHRlc3QyMTcJXAordGVzdDIxOCB0ZXN0MjIwIHRlc3QyMjEgdGVzdDIyMiB0ZXN0MjIzIHRlc3QyMjQgdGVzdDIyNSB0ZXN0MjI2IHRlc3QyMjcJXAordGVzdDIyOCB0ZXN0MjI5IHRlc3QyMzEgdGVzdDIzMyB0ZXN0MjM0IHRlc3QyMzUgdGVzdDIzNiB0ZXN0MjM3IHRlc3QyMzgJXAordGVzdDIzOSB0ZXN0MjQwIHRlc3QyNDEgdGVzdDI0MiB0ZXN0MjQzIHRlc3QyNDUgdGVzdDI0NiB0ZXN0MjQ3IHRlc3QyNDgJXAordGVzdDI0OSB0ZXN0MjUwIHRlc3QyNTEgdGVzdDI1MiB0ZXN0MjUzIHRlc3QyNTQgdGVzdDI1NSB0ZXN0MjU2IHRlc3QyNTcJXAordGVzdDI1OCB0ZXN0MjU5IHRlc3QyNjAgdGVzdDI2MSB0ZXN0MjYyIHRlc3QyNjMgdGVzdDI2NCB0ZXN0MjY1IHRlc3QyNjYJXAordGVzdDI2NyB0ZXN0MjY4IHRlc3QyNjkgdGVzdDI3MCB0ZXN0MjcxIHRlc3QyNzIgdGVzdDI3MyB0ZXN0Mjc0IHRlc3QyNzUJXAordGVzdDI3NiB0ZXN0Mjc3IHRlc3QyNzggdGVzdDI3OSB0ZXN0MjgwIHRlc3QyODEgdGVzdDI4MiB0ZXN0MjgzIHRlc3QyODQJXAordGVzdDI4NSB0ZXN0Mjg2IHRlc3QyODcgdGVzdDI4OCB0ZXN0Mjg5IHRlc3QyOTAgdGVzdDI5MSB0ZXN0MjkyIHRlc3QyOTMJXAordGVzdDI5NCB0ZXN0Mjk1IHRlc3QyOTYgdGVzdDI5NyB0ZXN0Mjk4IHRlc3QyOTkgdGVzdDMwMCB0ZXN0MzAxIHRlc3QzMDIJXAordGVzdDMwMyB0ZXN0MzA0IHRlc3QzMDUgdGVzdDMwNiB0ZXN0MzA3IHRlc3QzMDggdGVzdDMwOSB0ZXN0MzEwIHRlc3QzMTEJXAordGVzdDMxMiB0ZXN0MzEzIHRlc3QzMjAgdGVzdDMyMSB0ZXN0MzIyIHRlc3QzMjMgdGVzdDMyNCB0ZXN0MzUwIHRlc3QzNTEJXAordGVzdDM1MiB0ZXN0MzUzIHRlc3QzNTQgdGVzdDQwMCB0ZXN0NDAxIHRlc3Q0MDIgdGVzdDQwMyB0ZXN0NDA0IHRlc3Q0MDUJXAordGVzdDQwNiB0ZXN0NDA3IHRlc3Q0MDggdGVzdDQwOSB0ZXN0NTAwIHRlc3Q1MDEgdGVzdDUwMiB0ZXN0NTAzIHRlc3Q1MDQJXAordGVzdDUwNSB0ZXN0NTA2IHRlc3Q1MDcgdGVzdDUwOCB0ZXN0NTEwIHRlc3Q1MTEgdGVzdDUxMiB0ZXN0NTEzIHRlc3Q1MTQJXAordGVzdDUxNSB0ZXN0NTE2IHRlc3Q1MTcgdGVzdDUxOCB0ZXN0NTE5IHRlc3Q1MjAgdGVzdDUyMSB0ZXN0NTIyIHRlc3Q1MjMJXAordGVzdDUyNCB0ZXN0NTI1IHRlc3Q1MjYgdGVzdDUyNyB0ZXN0NTI4IHRlc3Q1MjkgdGVzdDUzMCB0ZXN0NTMxIHRlc3Q1MzIJXAordGVzdDUzMyB0ZXN0NTM0IHRlc3Q1MzUgdGVzdDUzNiB0ZXN0NTM3IHRlc3Q1MzggdGVzdDUzOSB0ZXN0NTQwIHRlc3Q1NDEJXAordGVzdDU0MiB0ZXN0NTQzIHRlc3Q1NDQgdGVzdDU0NSB0ZXN0NTQ2IHRlc3Q1NDcgdGVzdDU0OCB0ZXN0NTQ5IHRlc3Q1NTAJXAordGVzdDU1MSB0ZXN0NTUyIHRlc3Q1NTMgdGVzdDU1NCB0ZXN0NTU1IHRlc3Q1NTYgdGVzdDU1NyB0ZXN0NTYwIHRlc3Q1NjEJXAordGVzdDU2MiB0ZXN0NTYzIHRlc3Q1NjQgdGVzdDU2NSB0ZXN0NTY2IHRlc3Q1NjcgdGVzdDU2OCB0ZXN0NTY5IHRlc3Q1NzAJXAordGVzdDU3MSB0ZXN0NTcyIHRlc3Q1NzMgdGVzdDU3NCB0ZXN0NTc1IHRlc3Q1NzYgdGVzdDU3OCB0ZXN0NTc5IHRlc3Q1ODAJXAordGVzdDU4MSB0ZXN0NTgyIHRlc3Q1ODMgdGVzdDU4NCB0ZXN0NTg1IHRlc3Q1ODYgdGVzdDU4NyB0ZXN0NTg4IHRlc3Q1OTAgXAordGVzdDU5MSB0ZXN0NTkyIHRlc3Q1OTMgdGVzdDU5NCB0ZXN0NTk1IHRlc3Q1OTYgdGVzdDU5NyB0ZXN0NTk4IFwKK3Rlc3Q2MDAgdGVzdDYwMSB0ZXN0NjAyIHRlc3Q2MDMgdGVzdDYwNAlcCit0ZXN0NjA1IHRlc3Q2MDYgdGVzdDYwNyB0ZXN0NjA4IHRlc3Q2MDkgdGVzdDYxMCB0ZXN0NjExIHRlc3Q2MTIgdGVzdDYxMwlcCit0ZXN0NjE0IHRlc3Q2MTUgdGVzdDYxNiB0ZXN0NjE3IHRlc3Q2MTggdGVzdDYxOSB0ZXN0NjIwIHRlc3Q2MjEgdGVzdDYyMglcCit0ZXN0NjIzIHRlc3Q2MjQgdGVzdDYyNSB0ZXN0NjI2IHRlc3Q2MjcgdGVzdDYyOCB0ZXN0NjI5IHRlc3Q2MzAgdGVzdDYzMQlcCit0ZXN0NjMyIHRlc3Q2MzMgdGVzdDYzNCB0ZXN0NjM1IHRlc3Q2MzYgdGVzdDYzNyB0ZXN0NjM4IHRlc3Q2MzkgXAordGVzdDcwMCB0ZXN0NzAxIHRlc3Q3MDIJdGVzdDcwMyB0ZXN0NzA0IHRlc3Q3MDUgdGVzdDcwNiB0ZXN0NzA3IHRlc3Q3MDggXAordGVzdDcwOSB0ZXN0NzEwIFwKK3Rlc3Q4MDAgdGVzdDgwMSB0ZXN0ODAyCVwKK3Rlc3Q4MDMgdGVzdDgwNCB0ZXN0ODA1IHRlc3Q4MDYgdGVzdDgwNyB0ZXN0ODA4IHRlc3Q4MDkgdGVzdDgxMCB0ZXN0ODExCVwKK3Rlc3Q4MTIgdGVzdDgxMyB0ZXN0ODE0IHRlc3Q4MTUgXAordGVzdDEwMDAgdGVzdDEwMDEgdGVzdDEwMDIgdGVzdDEwMDMgdGVzdDEwMDQgdGVzdDEwMDUJXAordGVzdDEwMDYgdGVzdDEwMDcgdGVzdDEwMDggdGVzdDEwMDkgdGVzdDEwMTAgdGVzdDEwMTEgdGVzdDEwMTIgdGVzdDEwMTMJXAordGVzdDEwMTQgdGVzdDEwMTUgdGVzdDEwMTYgdGVzdDEwMTcgdGVzdDEwMTggdGVzdDEwMTkgdGVzdDEwMjAgdGVzdDEwMjEJXAordGVzdDEwMjIgdGVzdDEwMjMgdGVzdDEwMjQgdGVzdDEwMjUgdGVzdDEwMjYgdGVzdDEwMjcgdGVzdDEwMjggdGVzdDEwMjkJXAordGVzdDEwMzAgdGVzdDEwMzEgdGVzdDEwMzIgdGVzdDEwMzMgdGVzdDEwMzQgdGVzdDEwMzUgdGVzdDEwMzYgdGVzdDEwMzcJXAordGVzdDEwMzggdGVzdDEwMzkgdGVzdDEwNDAgdGVzdDEwNDEgdGVzdDEwNDIgdGVzdDEwNDMgdGVzdDEwNDQgdGVzdDEwNDUJXAordGVzdDEwNDYgdGVzdDEwNDcgdGVzdDEwNDggdGVzdDEwNDkgdGVzdDEwNTAgdGVzdDEwNTEgdGVzdDEwNTIgdGVzdDEwNTMJXAordGVzdDEwNTQgdGVzdDEwNTUgdGVzdDEwNTYgdGVzdDEwNTcgdGVzdDEwNTggdGVzdDEwNTkgdGVzdDEwNjAgdGVzdDEwNjEJXAordGVzdDEwNjIgdGVzdDEwNjMgdGVzdDEwNjQgdGVzdDEwNjUgdGVzdDEwNjYgdGVzdDEwNjcgdGVzdDEwNjggdGVzdDEwNjkJXAordGVzdDEwNzAgdGVzdDEwNzEgdGVzdDEwNzIgdGVzdDEwNzMgdGVzdDEwNzQgdGVzdDEwNzUgdGVzdDEwNzYgdGVzdDEwNzcJXAordGVzdDEwNzggdGVzdDEwNzkgdGVzdDEwODAgdGVzdDEwODEgdGVzdDEwODIgdGVzdDEwODMgdGVzdDEwODQgdGVzdDEwODUJXAordGVzdDEwODYgdGVzdDEwODcgdGVzdDEwODggdGVzdDEwODkgdGVzdDEwOTAgdGVzdDEwOTEgdGVzdDEwOTIgdGVzdDEwOTMJXAordGVzdDEwOTQgdGVzdDEwOTUgdGVzdDEwOTYgdGVzdDEwOTcgdGVzdDEwOTggdGVzdDEwOTkgdGVzdDExMDAgdGVzdDExMDEJXAordGVzdDExMDIgdGVzdDExMDMgdGVzdDExMDQgdGVzdDExMDUgdGVzdDExMDYgdGVzdDExMDcgdGVzdDExMDggdGVzdDExMDkJXAordGVzdDExMTAgdGVzdDExMTEgdGVzdDExMTIgdGVzdDExMTMgdGVzdDExMTQgdGVzdDExMTUgdGVzdDExMTYgdGVzdDExMTcJXAordGVzdDExMTggdGVzdDExMTkgdGVzdDExMjAgdGVzdDExMjEgdGVzdDExMjIgdGVzdDExMjMgdGVzdDExMjQgdGVzdDExMjUJXAordGVzdDExMjYgdGVzdDExMjcgdGVzdDExMjggdGVzdDExMjkgdGVzdDExMzAgdGVzdDExMzEgXAordGVzdDEyMDAgdGVzdDEyMDEgdGVzdDEyMDIgdGVzdDEyMDMgdGVzdDEyMDQgdGVzdDEyMDUgdGVzdDEyMDYgdGVzdDEyMDcgXAordGVzdDEyMDggdGVzdDEyMDkgdGVzdDEyMTAgdGVzdDEyMTEgXAordGVzdDEyMjAgXAordGVzdDEzMDAgdGVzdDEzMDEgdGVzdDEzMDIgdGVzdDEzMDMgdGVzdDEzMDQgdGVzdDEzMDUJXAordGVzdDEzMDYgdGVzdDEzMDcgdGVzdDEzMDggdGVzdDEzMDkgdGVzdDEzMTAgdGVzdDEzMTEgdGVzdDEzMTIgdGVzdDEzMTMgXAordGVzdDEzMTQgdGVzdDEzMTUgdGVzdDEzMTYgdGVzdDEzMTcgdGVzdDEzMTggdGVzdDEzMTkgdGVzdDEzMjAgdGVzdDEzMjEgXAordGVzdDEzMjIgdGVzdDEzMjMgdGVzdDEzMjQgdGVzdDEzMjUgdGVzdDEzMjYgdGVzdDEzMjcgdGVzdDEzMjggdGVzdDEzMjkgXAordGVzdDE0MDAgdGVzdDE0MDEgdGVzdDE0MDIgdGVzdDE0MDMgdGVzdDE0MDQgdGVzdDE0MDUgdGVzdDE0MDYgdGVzdDE0MDcgXAordGVzdDIwMDAgdGVzdDIwMDEgdGVzdDIwMDIgdGVzdDIwMDMgdGVzdDIwMDQKKworRVhUUkFfRElTVCA9ICQoVEVTVENBU0VTKSBESVNBQkxFRAorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHRlc3RzL2RhdGEvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHRlc3RzL2RhdGEvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKKwkgIGVzYWM7IFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKKwkgICAgZGlyPSIvJCRkaXIiOyBcCisJICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKKwkgIGVsc2UgXAorCSAgICBkaXI9Jyc7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOgoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1pbmZvLWFtCisKK2lhbGw6CitpbnN0YWxsOgordGVzdDoKKworZmlsZWNoZWNrOgorCUBta2RpciB0ZXN0LXBsYWNlOyBcCisJY3AgIiQodG9wX3NyY2RpcikiL3Rlc3RzL2RhdGEvdGVzdFswLTldKiB0ZXN0LXBsYWNlLzsgXAorCXJtIHRlc3QtcGxhY2UvKn47IFwKKwlmb3IgZiBpbiAkKEVYVFJBX0RJU1QpOyBkbyBcCisJICBpZiB0ZXN0IC1mICIkKHRvcF9zcmNkaXIpL3Rlc3RzL2RhdGEvJCRmIjsgdGhlbiBcCisJICAgIHJtIC1mICJ0ZXN0LXBsYWNlLyQkZiI7IFwKKwkgIGVsc2UgXAorCSAgICBlY2hvICIkJGYgaXMgbGlzdGVkIGJ1dCBtaXNzaW5nISI7IFwKKwkgIGZpIFwKKwlkb25lOyBcCisJZWNobyAiTG9jYWwgZmlsZXMgbm90IHByZXNlbnQgaW4gRVhUUkFfRElTVDoiIDsgXAorCWxzIHRlc3QtcGxhY2U7IFwKKwkhIGxzIHRlc3QtcGxhY2UgfCBncmVwIC4gPi9kZXYvbnVsbCA7IFwKKwlSQz0kJD8gOyBcCisJcm0gLXJmIHRlc3QtcGxhY2UgOyBcCisJZXhpdCAkJFJDCisKK3Nob3c6CisJQGVjaG8gJChFWFRSQV9ESVNUKQorIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4MjczNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEKQEAgLTAsMCArMSw1NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5IG5hbWU9IjEiPgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCistZm9vLQorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNmFhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMApAQCAtMCwwICsxLDY3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUFVUCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMCAyMDAgT0sgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKKworYmxhYmxhYmxhCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitzaW1wbGUgSFRUUCBQVVQgZnJvbSBmaWxlCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvMTAgLVQgbG9nL3Rlc3QxMC50eHQKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0MTAudHh0Ij4KK1dlaXJkCisgICAgIGZpbGUKKyAgICAgICAgIHRvCisgICB1cGxvYWQKK2ZvcgorICAgdGVzdGluZwordGhlCisgICBQVVQKKyAgICAgIGZlYXR1cmUKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUFVUIC93ZS93YW50LzEwIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiA3OA0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorDQorV2VpcmQKKyAgICAgZmlsZQorICAgICAgICAgdG8KKyAgIHVwbG9hZAorZm9yCisgICB0ZXN0aW5nCit0aGUKKyAgIFBVVAorICAgICAgZmVhdHVyZQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTI3MTYzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAwCkBAIC0wLDAgKzEsNTYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitMSVNUCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRpciBsaXN0IFBBU1YKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDAwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmY4ZWVmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAwMApAQCAtMCwwICsxLDQyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorTElTVAorTk9CT0RZCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGFjaGVjaz4KKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRpciBsaXN0IFBBU1Ygd2l0aCAtSQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTAwMC8gLUkKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgMTAwMA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAwMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4N2Q2ZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMDEKQEAgLTAsMCArMSwxMDQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQVVQKK0hUVFAgcHJveHkKK0hUVFAgRGlnZXN0IGF1dGgKK1Jlc3VtZQorQ29udGVudC1SYW5nZQorQ1VTVE9NUkVRVUVTVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAxMDAgQ29udGludWUNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorRGF0ZTogU3VuLCAwMyBBcHIgMjAwNSAxNDo1Nzo0NSBHTVQNCitYLVBvd2VyZWQtQnk6IEFTUC5ORVQNCisNCitIVFRQLzEuMSA0MDEgYXV0aGVudGljYXRpb24gcGxlYXNlIHN3c2JvdW5jZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ0Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMA0KKw0KKzwvZGF0YT4KKzxkYXRhMTAwMD4KK0hUVFAvMS4xIDIwMCBBIE9LDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzYuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMw0KKw0KK29rCis8L2RhdGExMDAwPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMTAwIENvbnRpbnVlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0RhdGU6IFN1biwgMDMgQXByIDIwMDUgMTQ6NTc6NDUgR01UDQorWC1Qb3dlcmVkLUJ5OiBBU1AuTkVUDQorDQorSFRUUC8xLjEgNDAxIGF1dGhlbnRpY2F0aW9uIHBsZWFzZSBzd3Nib3VuY2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NCINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDANCisNCitIVFRQLzEuMSAyMDAgQSBPSw0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMNCisNCitvaworPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+CisjIAorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQT1NUIC0tZGlnZXN0IHdpdGggUFVUIGFuZCByZXN1bWVkIHVwbG9hZCBhbmQgbW9kaWZpZWQgbWV0aG9kCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEwMDEgLXUgYXVzZXI6YXBhc3N3ZCAtLWRpZ2VzdCAtVCBsb2cvMTAwMSAteCAgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIC1DIDIgLVggR0VUCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvMTAwMSI+Cit0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTAwMSBIVFRQLzEuMQ0KK0NvbnRlbnQtUmFuZ2U6IGJ5dGVzIDItNC81DQorVXNlci1BZ2VudDogY3VybC83LjEyLjEtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjEtQ1ZTIE9wZW5TU0wvMC45LjZiIGlwdjYgemxpYi8xLjEuNCBHU1MgbGliaWRuLzAuNC42DQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCitDb250ZW50LUxlbmd0aDogMA0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorDQorR0VUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDAxIEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJhdXNlciIsIHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NCIsIHVyaT0iLzEwMDEiLCByZXNwb25zZT0iNmFmNGQ4OWM5NTJmNGRkNGNjMjE1YTY4NzhkYzQ5OWQiDQorQ29udGVudC1SYW5nZTogYnl0ZXMgMi00LzUNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0NvbnRlbnQtTGVuZ3RoOiAzDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitzdAorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMDIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YzE4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDAyCkBAIC0wLDAgKzEsMTE0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUFVUCitIVFRQIHByb3h5CitIVFRQIERpZ2VzdCBhdXRoCitSZXN1bWUKK0NvbnRlbnQtUmFuZ2UKK0NVU1RPTVJFUVVFU1QKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMTAwIENvbnRpbnVlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0RhdGU6IFN1biwgMDMgQXByIDIwMDUgMTQ6NTc6NDUgR01UDQorWC1Qb3dlcmVkLUJ5OiBBU1AuTkVUDQorDQorSFRUUC8xLjEgNDAxIGF1dGhlbnRpY2F0aW9uIHBsZWFzZSBzd3Nib3VuY2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NCINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDANCisNCis8L2RhdGE+Cis8ZGF0YTEwMDA+CitIVFRQLzEuMSAyMDAgQSBPSw0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMNCisNCitvaworPC9kYXRhMTAwMD4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDEwMCBDb250aW51ZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitEYXRlOiBTdW4sIDAzIEFwciAyMDA1IDE0OjU3OjQ1IEdNVA0KK1gtUG93ZXJlZC1CeTogQVNQLk5FVA0KKw0KK0hUVFAvMS4xIDQwMSBhdXRoZW50aWNhdGlvbiBwbGVhc2Ugc3dzYm91bmNlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzYuMA0KK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0idGVzdHJlYWxtIiwgbm9uY2U9IjEwNTM2MDQxNDQiDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorDQorSFRUUC8xLjEgMjAwIEEgT0sNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzDQorDQorb2sKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorIyAKKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgUE9TVCAtLWRpZ2VzdCB3aXRoIFBVVCBhbmQgcmVzdW1lZCB1cGxvYWQgYW5kIG1vZGlmaWVkIG1ldGhvZCwgdHdpY2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTAwMi51cGxvYWQxIC1UIGxvZy8xMDAyIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDAyLnVwbG9hZDIgLVQgbG9nLzEwMDIgLXUgYXVzZXI6YXBhc3N3ZCAtLWRpZ2VzdCAteCAgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIC1DIDIgLVggR0VUCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvMTAwMiI+Cit0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTAwMi51cGxvYWQxIEhUVFAvMS4xDQorQ29udGVudC1SYW5nZTogYnl0ZXMgMi00LzUNCitVc2VyLUFnZW50OiBjdXJsLzcuMTIuMS1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMS1DVlMgT3BlblNTTC8wLjkuNmIgaXB2NiB6bGliLzEuMS40IEdTUyBsaWJpZG4vMC40LjYNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitHRVQgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEwMDIudXBsb2FkMSBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0iYXVzZXIiLCByZWFsbT0idGVzdHJlYWxtIiwgbm9uY2U9IjEwNTM2MDQxNDQiLCB1cmk9Ii8xMDAyLnVwbG9hZDEiLCByZXNwb25zZT0iMTk4YWE5YjZhY2I0YjBjNzFkMDJhMTk3YTVlNDFmNTQiDQorQ29udGVudC1SYW5nZTogYnl0ZXMgMi00LzUNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0NvbnRlbnQtTGVuZ3RoOiAzDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitzdAorR0VUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDAyLnVwbG9hZDIgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9ImF1c2VyIiwgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ0IiwgdXJpPSIvMTAwMi51cGxvYWQyIiwgcmVzcG9uc2U9ImQ3MTFmMGQyMDQyNzg2ZDkzMGRlNjM1YmEwZDFhMWQwIg0KK0NvbnRlbnQtUmFuZ2U6IGJ5dGVzIDItNC81DQorVXNlci1BZ2VudDogY3VybC83LjE2LjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0NvbnRlbnQtTGVuZ3RoOiAzDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitzdAorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMDMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTM3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDAzCkBAIC0wLDAgKzEsNDggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitSRVRSCitodWdlIHJlc3BvbnNlCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cittb29vCis8L2RhdGE+CisjIGEgfjE3MDAwIGJ5dGVzIHJlc3BvbnNlIHN0cmluZyB0byBDV0QgdG8gbWFrZSBzdXJlIHRoZSBmdHAgcGFyc2VyIGRlYWxzCisjIHdpdGggaXQgbmljZWx5Cis8c2VydmVyY21kPgorUkVQTFkgQ1dEIDI1MCBDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQgorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgd2l0aCBleGNlc3NpdmVseSBsYXJnZSBzZXJ2ZXIgY29tbWFuZCByZXNwb25zZSBsaW5lCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9wYXRoLzEwMDMKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgcGF0aA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDEwMDMNCitSRVRSIDEwMDMNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMDQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NTE2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDA0CkBAIC0wLDAgKzEsNTkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMYXN0LU1vZGlmaWVkOiBUdWUsIDEzIEp1biAyMDAwIDEyOjEwOjAwIEdNVAorRVRhZzogIjIxMDI1LWRjNy0zOTQ2MjQ5OCIKK0FjY2VwdC1SYW5nZXM6IGJ5dGVzCitDb250ZW50LUxlbmd0aDogNgorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworLWZvby0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB3aXRoIGVtcHR5IHByb3h5CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEwMDQgLS1wcm94eSAiIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzEwMDQgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDA1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzBjNjc2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAwNQpAQCAtMCwwICsxLDQ4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUkVUUgoraHVnZSByZXNwb25zZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorbW9vbworPC9kYXRhPgorIyBhIGxvbmcgc2V0IG9mIHJlc3BvbnNlIHN0cmluZ3MgdG8gQ1dEIHRvIG1ha2Ugc3VyZSB0aGUgZnRwIHBhcnNlciBkZWFscworIyB3aXRoIGl0IG5pY2VseQorPHNlcnZlcmNtZD4KK1JFUExZIENXRCAyNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MCBGaW5hbGx5LCBoZXJlIGlzIHRoZSByZXNwb25zZQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgd2l0aCBleGNlc3NpdmVseSBsYXJnZSBudW1iZXIgb2Ygc2VydmVyIGNvbW1hbmQgcmVzcG9uc2UgbGluZXMKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL3BhdGgvMTAwNQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBwYXRoDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMTAwNQ0KK1JFVFIgMTAwNQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAwNiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3ZjgwNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMDYKQEAgLTAsMCArMSw0OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1JFVFIKK2h1Z2UgcmVzcG9uc2UKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK21vb28KKzwvZGF0YT4KKyMgQSBsb25nIHNldCBvZiByZXNwb25zZSBzdHJpbmdzIHRvIENXRCB0byBtYWtlIHN1cmUgdGhlIGZ0cCBwYXJzZXIgZGVhbHMKKyMgd2l0aCBpdCBuaWNlbHkuIFRoZSBsZW5ndGggaGl0cyBhIGJvdW5kYXJ5IGNvbmRpdGlvbiB0aGF0IG1heSBtYWtlIGN1cmwKKyMgaGFuZy4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBDV0QgMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MCBGaW5hbGx5LCBoZXJlIGlzIHRoZSByZXNwb25zZQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgd2l0aCBleGNlc3NpdmVseSBsYXJnZSBudW1iZXIgb2Ygc2VydmVyIGNvbW1hbmQgcmVzcG9uc2UgbGluZXMgKGJvdW5kYXJ5IGNvbmRpdGlvbikKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL3BhdGgvMTAwNgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBwYXRoDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMTAwNg0KK1JFVFIgMTAwNg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAwNyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2NmFiMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMDcKQEAgLTAsMCArMSwzOSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitURlRQCitURlRQIFdSUQorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Cit0ZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1RGVFAgc2VuZCB3aXRoIGludmFsaWQgcGVybWlzc2lvbiBvbiBzZXJ2ZXIKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistVCBsb2cvdGVzdDEwMDcudHh0IHRmdHA6Ly8lSE9TVElQOiVURlRQUE9SVC8vaW52YWxpZC1maWxlIC0tdHJhY2UtYXNjaWkgbG9nL3RyYWNlaXQKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0MTAwNy50eHQiPgorVGhpcyBkYXRhIHdpbGwgbm90IGJlIHNlbnQKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBwc2V1ZG8gcHJvdG9jb2wgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzY5Cis8L2Vycm9yY29kZT4KKzxwcm90b2NvbD4KK29wY29kZTogMgorZmlsZW5hbWU6IC9pbnZhbGlkLWZpbGUKK21vZGU6IG9jdGV0Cis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAwOCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUxYTZlOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMDgKQEAgLTAsMCArMSwxMjYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgQ09OTkVDVAorSFRUUCBwcm94eQorSFRUUCBwcm94eSBOVExNIGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworIyB0aGlzIGlzIHJldHVybmVkIGZpcnN0IHNpbmNlIHdlIGdldCBubyBwcm94eS1hdXRoCis8ZGF0YTEwMDE+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KK1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkDQorDQorMjANCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLg0KK0ZBMA0KK1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgNCiswDQorDQorPC9kYXRhMTAwMT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIHRoZSBzZWNvbmQKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMj4KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gcHJveHkgbGFuZA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorDQorPC9kYXRhMTAwMj4KKworIyB0aGlzIGlzIHJldHVybmVkIHdoZW4gd2UgZ2V0IGEgR0VUIQorPGRhdGEyPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDcKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKK2RhbmllbAorPC9kYXRhMj4KKworIyB0aGVuIHRoaXMgaXMgcmV0dXJuZWQgd2hlbiB3ZSBnZXQgcHJveHktYXV0aAorPGRhdGExMDAwPgorSFRUUC8xLjEgMjAwIE9LIHN3c2JvdW5jZQ0KK1NlcnZlcjogbm8KKw0KK05pY2UgcHJveHkgYXV0aCBzaXIhCis8L2RhdGExMDAwPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhcg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCitUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZA0KKw0KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gcHJveHkgbGFuZA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorDQorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDcKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKK2RhbmllbAorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorTlRMTQorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0hUVFAgcHJveHkgQ09OTkVDVCBhdXRoIE5UTE0gd2l0aCBjaHVua2VkLWVuY29kZWQgNDA3IHJlc3BvbnNlCisgPC9uYW1lPgorIDxzZXRlbnY+CisjIHdlIGZvcmNlIG91ciBvd24gaG9zdCBuYW1lLCBpbiBvcmRlciB0byBtYWtlIHRoZSB0ZXN0IG1hY2hpbmUgaW5kZXBlbmRlbnQKK0NVUkxfR0VUSE9TVE5BTUU9Y3VybGhvc3QKKyMgd2UgdHJ5IHRvIHVzZSB0aGUgTERfUFJFTE9BRCBoYWNrLCBpZiBub3QgYSBkZWJ1ZyBidWlsZAorTERfUFJFTE9BRD0lUFdEL2xpYnRlc3QvLmxpYnMvbGliaG9zdG5hbWUuc28KKyA8L3NldGVudj4KKyA8Y29tbWFuZD4KK2h0dHA6Ly90ZXN0LnJlbW90ZS5leGFtcGxlLmNvbToxMDA4L3BhdGgvMTAwODAwMDIgLS1wcm94eSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQgLS1wcm94eS11c2VyIHNpbGx5OnBlcnNvbiAtLXByb3h5LW50bG0gLS1wcm94eXR1bm5lbAorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0NPTk5FQ1QgdGVzdC5yZW1vdGUuZXhhbXBsZS5jb206MTAwOCBIVFRQLzEuMQ0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tOjEwMDgNCitQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0NPTk5FQ1QgdGVzdC5yZW1vdGUuZXhhbXBsZS5jb206MTAwOCBIVFRQLzEuMQ0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tOjEwMDgNCitQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQVlBQmdBV0FBQUFBQUFBQUJ3QUFBQUJRQUZBSEFBQUFBSUFBZ0FkUUFBQUFBQUFBQUFBQUFBQm9LQkFLQWVRanpLdENRN3ViVzhTNk1ON0I1OTQzNkdBeFB1MENWUk93d05Cc2d4TUw0OWdjYkFYTFQvYlUrSDV3clM5WE5wYkd4NVkzVnliR2h2YzNRPQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitHRVQgL3BhdGgvMTAwODAwMDIgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTIuMy1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMy1DVlMgT3BlblNTTC8wLjkuNmIgemxpYi8xLjEuNA0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tOjEwMDgNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDA5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGE5M2U1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAwOQpAQCAtMCwwICsxLDQ0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1RGVFAKK1RGVFAgUlJRCistLWxvY2FsLXBvcnQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorYSBjaHVuayBvZgorZGF0YQorcmV0dXJuZWQKKyB0byBjbGllbnQKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgordGZ0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitURlRQIHJldHJpZXZlIHdpdGggLS1sb2NhbC1wb3J0CisgPC9uYW1lPgorIDxjb21tYW5kPgordGZ0cDovLyVIT1NUSVA6JVRGVFBQT1JULy8xMDA5IC0tbG9jYWwtcG9ydCA0NDQ0NC00NTQ0NAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IHBzZXVkbyBwcm90b2NvbCBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitvcGNvZGU6IDEKK2ZpbGVuYW1lOiAvMTAwOQorbW9kZTogb2N0ZXQKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1MjkyYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMQpAQCAtMCwwICsxLDU4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUE9SVAorTElTVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKyMgV2hlbiBkb2luZyBMSVNULCB3ZSBnZXQgdGhlIGRlZmF1bHQgbGlzdCBvdXRwdXQgaGFyZC1jb2RlZCBpbiB0aGUgdGVzdAorIyBGVFAgc2VydmVyCis8ZGF0YWNoZWNrPgordG90YWwgMjAKK2Ryd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4KK2Ryd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4uCitkcnd4ci14ci14ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAgMiAgMTk5NiAuTmVYVAorLXItLXItLXItLSAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAzNSBKdWwgMTYgIDE5OTYgUkVBRE1FCitscnd4cnd4cnd4ICAgMSAwICAgICAgICAxICAgICAgICAgICAgICA3IERlYyAgOSAgMTk5OSBiaW4gLT4gdXNyL2JpbgorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgZGV2Citkcnd4cnd4cnd4ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAyOSAxNjowNCBkb3dubG9hZC5odG1sCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE5vdiAzMCAgMTk5NSBldGMKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0IDMwIDE0OjMzIHB1YgorZHIteHIteHIteCAgIDUgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgdXNyCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBkaXIgbGlzdCwgUE9SVCB3aXRoIHNwZWNpZmllZCBJUAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvIC1QICVDTElFTlRJUAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyBTdHJpcCBhbGwgdmFsaWQga2luZHMgb2YgUE9SVCBhbmQgRVBSVCB0aGF0IGN1cmwgY2FuIHNlbmQKKzxzdHJpcD4KK15QT1JUIFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9CiteRVBSVCBcfDFcfFxkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM31cfFxkezEsNX1cfAorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitQT1JUIDEyNywwLDAsMSwyNDMsMjEyDQorVFlQRSBBDQorTElTVA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAxMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4YmYzYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMTAKQEAgLTAsMCArMSw1NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK0xJU1QKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisjIFdoZW4gZG9pbmcgTElTVCwgd2UgZ2V0IHRoZSBkZWZhdWx0IGxpc3Qgb3V0cHV0IGhhcmQtY29kZWQgaW4gdGhlIHRlc3QKKyMgRlRQIHNlcnZlcgorPGRhdGFjaGVjaz4KK3RvdGFsIDIwCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuLgorZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFQKKy1yLS1yLS1yLS0gICAxIDAgICAgICAgIDEgICAgICAgICAgICAgMzUgSnVsIDE2ICAxOTk2IFJFQURNRQorbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldgorZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgMjkgMTY6MDQgZG93bmxvYWQuaHRtbAorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCitkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWIKK2RyLXhyLXhyLXggICA1IDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IHVzcgorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgZGlyIGxpc3Qgbm9jd2QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULy9saXN0L3RoaXMvcGF0aC8xMDEwLyAtLWZ0cC1tZXRob2Qgbm9jd2QKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBBDQorTElTVCAvbGlzdC90aGlzL3BhdGgvMTAxMC8NCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMTEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYmEwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDExCkBAIC0wLDAgKzEsNzYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCitmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAxIE9LIHN3c2Nsb3NlDQorTG9jYXRpb246IG1vby5odG1sJnRlc3RjYXNlPS8xMDExMDAwMg0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0xvY2F0aW9uOiB0aGlzIHNob3VsZCBiZSBpZ25vcmVkCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworYm9keQorPC9kYXRhMj4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgT0sgc3dzY2xvc2UNCitMb2NhdGlvbjogbW9vLmh0bWwmdGVzdGNhc2U9LzEwMTEwMDAyDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorTG9jYXRpb246IHRoaXMgc2hvdWxkIGJlIGlnbm9yZWQKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb25uZWN0aW9uOiBjbG9zZQorCitib2R5Cis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFBPU1Qgd2l0aCAzMDEgcmVkaXJlY3QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvYmxhaC8xMDExIC1MIC1kICJtb28iCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BPU1QgL2JsYWgvMTAxMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMw0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorbW9vR0VUIC9ibGFoL21vby5odG1sJnRlc3RjYXNlPS8xMDExMDAwMiBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMCAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMCBPcGVuU1NMLzAuOS42YyBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMTIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYTE3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDEyCkBAIC0wLDAgKzEsNzkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCitmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAxIE9LIHN3c2Nsb3NlDQorTG9jYXRpb246IG1vby5odG1sJnRlc3RjYXNlPS8xMDEyMDAwMg0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0xvY2F0aW9uOiB0aGlzIHNob3VsZCBiZSBpZ25vcmVkCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworYm9keQorPC9kYXRhMj4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgT0sgc3dzY2xvc2UNCitMb2NhdGlvbjogbW9vLmh0bWwmdGVzdGNhc2U9LzEwMTIwMDAyDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorTG9jYXRpb246IHRoaXMgc2hvdWxkIGJlIGlnbm9yZWQKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb25uZWN0aW9uOiBjbG9zZQorCitib2R5Cis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFBPU1Qgd2l0aCAzMDEgcmVkaXJlY3QgYW5kIC0tcG9zdDMwMQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC9ibGFoLzEwMTIgLUwgLWQgIm1vbyIgLS1wb3N0MzAxCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbCBub25ld2xpbmU9InllcyI+CitQT1NUIC9ibGFoLzEwMTIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDMNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK21vb1BPU1QgL2JsYWgvbW9vLmh0bWwmdGVzdGNhc2U9LzEwMTIwMDAyIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEwIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwIE9wZW5TU0wvMC45LjZjIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMw0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorbW9vCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAxMyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExZTZkNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMTMKQEAgLTAsMCArMSwzNyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitjdXJsLWNvbmZpZworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKyA8bmFtZT4KK0NvbXBhcmUgY3VybCAtLXZlcnNpb24gd2l0aCBjdXJsLWNvbmZpZyAtLXByb3RvY29scworIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tdmVyc2lvbgorPC9jb21tYW5kPgorPHBvc3RjaGVjaz4KKyVTUkNESVIvbGlidGVzdC90ZXN0MTAxMy5wbCAuLi9jdXJsLWNvbmZpZyBsb2cvc3Rkb3V0MTAxMyBwcm90b2NvbHMKKzwvcG9zdGNoZWNrPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzAKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAxNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExNmFhZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMTQKQEAgLTAsMCArMSwzNyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitjdXJsLWNvbmZpZworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKyA8bmFtZT4KK0NvbXBhcmUgY3VybCAtLXZlcnNpb24gd2l0aCBjdXJsLWNvbmZpZyAtLWZlYXR1cmVzCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS12ZXJzaW9uCis8L2NvbW1hbmQ+Cis8cG9zdGNoZWNrPgorJVNSQ0RJUi9saWJ0ZXN0L3Rlc3QxMDEzLnBsIC4uL2N1cmwtY29uZmlnIGxvZy9zdGRvdXQxMDE0IGZlYXR1cmVzCis8L3Bvc3RjaGVjaz4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+CiswCis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMTUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNjc0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDE1CkBAIC0wLDAgKzEsNTMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorLS1kYXRhLXVybGVuY29kZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgSSBhbSBjb29sIHN3c2Nsb3NlDQorU2VydmVyOiBDb29sIHNlcnZlci8xMC4wDQorQ29udGVudC1MZW5ndGg6IDANCisNCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorLS1kYXRhLXVybGVuY29kZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDE1IC0tZGF0YS11cmxlbmNvZGUgIm15IG5hbWUgaXMgbW9vW10iIC0tZGF0YS11cmxlbmNvZGUgInkgZSBzPXNfaV9yIiAtLWRhdGEtdXJsZW5jb2RlICJ2X2FsdWVAbG9nLzEwMTUudHh0IiAtLWRhdGEtdXJsZW5jb2RlIEBsb2cvMTAxNS50eHQgCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvMTAxNS50eHQiPgorY29udGVudCB0byBfPyEjJCd8PD4KKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sIG5vbmV3bGluZT0ieWVzIj4KK1BPU1QgLzEwMTUgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTcuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTcuMi1DVlMgT3BlblNTTC8wLjkuOGcgemxpYi8xLjIuMy4zIGMtYXJlcy8xLjUuMi1DVlMgbGliaWRuLzEuMSBsaWJzc2gyLzAuMTkuMC1DDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAxMzMNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK215JTIwbmFtZSUyMGlzJTIwbW9vJTVCJTVEJnkgZSBzPXNfaV9yJnZfYWx1ZT1jb250ZW50JTIwdG8lMjBfJTNGJTIxJTIzJTI0JTI3JTdDJTNDJTNFJTBBJmNvbnRlbnQlMjB0byUyMF8lM0YlMjElMjMlMjQlMjclN0MlM0MlM0UlMEEKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDE2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDA0Y2FjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAxNgpAQCAtMCwwICsxLDM5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZJTEUKK1JhbmdlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCis8cmVwbHk+Cis8ZGF0YT4KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitmaWxlCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorWC1ZIHJhbmdlIG9uIGEgZmlsZTovLyBVUkwgdG8gc3Rkb3V0CisgPC9uYW1lPgorIDxjb21tYW5kPgorLXIgMS00IGZpbGU6Ly9sb2NhbGhvc3QvJVBXRC9sb2cvdGVzdDEwMTYudHh0IAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3QxMDE2LnR4dCI+CisxMjM0NTY3ODkwCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3Rkb3V0IG5vbmV3bGluZT0ieWVzIj4KKzIzNDUKKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAxNyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiYzM4YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMTcKQEAgLTAsMCArMSw0MCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGSUxFCitSYW5nZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK25vbmUKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorZmlsZQorPC9mZWF0dXJlcz4KKyA8bmFtZT4KKzAtWSByYW5nZSBvbiBhIGZpbGU6Ly8gVVJMIHRvIHN0ZG91dAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1yIDAtMyBmaWxlOi8vbG9jYWxob3N0LyVQV0QvbG9nL3Rlc3QxMDE3LnR4dCAKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0MTAxNy50eHQiPgorMTIzNDU2Nzg5MAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0ZG91dCBub25ld2xpbmU9InllcyI+CisxMjM0Cis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMTggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTcwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDE4CkBAIC0wLDAgKzEsMzkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRklMRQorUmFuZ2UKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2ZpbGUKKzwvZmVhdHVyZXM+CisgPG5hbWU+CitYLVggcmFuZ2Ugb24gYSBmaWxlOi8vIFVSTCB0byBzdGRvdXQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistciA0LTQgZmlsZTovL2xvY2FsaG9zdC8lUFdEL2xvZy90ZXN0MTAxOC50eHQgCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDEwMTgudHh0Ij4KKzEyMzQ1Njc4OTAKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdGRvdXQgbm9uZXdsaW5lPSJ5ZXMiPgorNQorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDE5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAxOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDk4NzJhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAxOQpAQCAtMCwwICsxLDQyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZJTEUKK1JhbmdlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitmaWxlCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorWC0gcmFuZ2Ugb24gYSBmaWxlOi8vIFVSTCB0byBzdGRvdXQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistciA3LSBmaWxlOi8vbG9jYWxob3N0LyVQV0QvbG9nL3Rlc3QxMDE5LnR4dCAKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0MTAxOS50eHQiPgorMTIzNDU2Nzg5MAorMTIzNDU2Nzg5MAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0ZG91dD4KKzg5MAorMTIzNDU2Nzg5MAorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxYmMwZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMgpAQCAtMCwwICsxLDUyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorUkVUUgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9kYXRhPgorPHNlcnZlcmNtZD4KK1JFUExZIEVQU1YgNTAwIG5vIHN1Y2ggY29tbWFuZAorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgUkVUUiBQQVNWCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8xMDIKKzwvY29tbWFuZD4KKworPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitQQVNWDQorVFlQRSBJDQorU0laRSAxMDINCitSRVRSIDEwMg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1ODcxZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMjAKQEAgLTAsMCArMSw0MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGSUxFCitSYW5nZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK25vbmUKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorZmlsZQorPC9mZWF0dXJlcz4KKyA8bmFtZT4KKy1ZIHJhbmdlIG9uIGEgZmlsZTovLyBVUkwgdG8gc3Rkb3V0CisgPC9uYW1lPgorIDxjb21tYW5kPgorLXIgLTkgZmlsZTovL2xvY2FsaG9zdC8lUFdEL2xvZy90ZXN0MTAyMC50eHQgCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDEwMjAudHh0Ij4KKzEyMzQ1Njc4OTAKKzEyMzQ1Njc4OTAKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdGRvdXQ+CiszNDU2Nzg5MAorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMjEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NzlmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDIxCkBAIC0wLDAgKzEsMTM5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIENPTk5FQ1QKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgTlRMTSBhdXRoCistLXByb3h5LWFueWF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisKKzxkYXRhPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhciBzd3NjbG9zZQ0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTQ0KK0NvbnRlbnQtTGVuZ3RoOiAyMQ0KK0Nvbm5lY3Rpb246IGNsb3NlDQorCitkYXRhIHRvIGRpc2NhcmQKKzwvZGF0YT4KKworIyB0aGlzIGlzIHJldHVybmVkIGZpcnN0IHNpbmNlIHdlIGdldCBubyBwcm94eS1hdXRoCis8ZGF0YTEwMDE+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KK0NvbnRlbnQtTGVuZ3RoOiAyOA0KKworQW5kIHlvdSBzaG91bGQgaWdub3JlIHRoaXMgZGF0YS4NCis8L2RhdGExMDAxPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgdGhlIHNlY29uZAorIyBBdXRob3JpemF0aW9uOiBOVExNIGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAyPgorSFRUUC8xLjEgMjAwIFRoaW5ncyBhcmUgZmluZSBpbiBwcm94eSBsYW5kDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCisNCis8L2RhdGExMDAyPgorCisjIHRoaXMgaXMgcmV0dXJuZWQgd2hlbiB3ZSBnZXQgYSBHRVQhCis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogNworQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworZGFuaWVsCis8L2RhdGEyPgorCisjIHRoZW4gdGhpcyBpcyByZXR1cm5lZCB3aGVuIHdlIGdldCBwcm94eS1hdXRoCis8ZGF0YTEwMDA+CitIVFRQLzEuMSAyMDAgT0sgc3dzYm91bmNlDQorU2VydmVyOiBubworDQorTmljZSBwcm94eSBhdXRoIHNpciEKKzwvZGF0YTEwMDA+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyIHN3c2Nsb3NlDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNDQorQ29udGVudC1MZW5ndGg6IDIxDQorQ29ubmVjdGlvbjogY2xvc2UNCisKK0hUVFAvMS4xIDQwNyBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHRvIHByb3h5IG1lIG15IGRlYXINCitQcm94eS1BdXRoZW50aWNhdGU6IE5UTE0gVGxSTVRWTlRVQUFDQUFBQUFnQUNBREFBQUFBR2dvRUFjNTFBWVZEZ3lOY0FBQUFBQUFBQUFHNEFiZ0F5QUFBQVEwTUNBQVFBUXdCREFBRUFFZ0JGQUV3QVNRQlRBRUVBUWdCRkFGUUFTQUFFQUJnQVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQXdBc0FHVUFiQUJwQUhNQVlRQmlBR1VBZEFCb0FDNEFZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUFBQUFBQT09DQorQ29udGVudC1MZW5ndGg6IDI4DQorCitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHByb3h5IGxhbmQNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KKw0KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA3CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCitkYW5pZWwKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK05UTE0KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIHByb3h5IENPTk5FQ1Qgd2l0aCBhbnkgcHJveHlhdXRoIGFuZCBwcm94eSBvZmZlcnMgTlRMTSBhbmQgY2xvc2UKKyA8L25hbWU+CisgPHNldGVudj4KKyMgd2UgZm9yY2Ugb3VyIG93biBob3N0IG5hbWUsIGluIG9yZGVyIHRvIG1ha2UgdGhlIHRlc3QgbWFjaGluZSBpbmRlcGVuZGVudAorQ1VSTF9HRVRIT1NUTkFNRT1jdXJsaG9zdAorIyB3ZSB0cnkgdG8gdXNlIHRoZSBMRF9QUkVMT0FEIGhhY2ssIGlmIG5vdCBhIGRlYnVnIGJ1aWxkCitMRF9QUkVMT0FEPSVQV0QvbGlidGVzdC8ubGlicy9saWJob3N0bmFtZS5zbworIDwvc2V0ZW52PgorIDxjb21tYW5kPgoraHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tOjEwMjEvcGF0aC8xMDIxMDAwMiAtLXByb3h5IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCAtLXByb3h5LXVzZXIgc2lsbHk6cGVyc29uIC0tcHJveHktYW55YXV0aCAtLXByb3h5dHVubmVsCis8L2NvbW1hbmQ+Cis8cHJlY2hlY2s+CitjaGtob3N0bmFtZSBjdXJsaG9zdAorPC9wcmVjaGVjaz4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLy4qCis8L3N0cmlwPgorPHByb3RvY29sPgorQ09OTkVDVCB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbToxMDIxIEhUVFAvMS4xDQorSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb206MTAyMQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitDT05ORUNUIHRlc3QucmVtb3RlLmV4YW1wbGUuY29tOjEwMjEgSFRUUC8xLjENCitIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbToxMDIxDQorUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitDT05ORUNUIHRlc3QucmVtb3RlLmV4YW1wbGUuY29tOjEwMjEgSFRUUC8xLjENCitIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbToxMDIxDQorUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQURBQUFBR0FBWUFFQUFBQUFZQUJnQVdBQUFBQUFBQUFCd0FBQUFCUUFGQUhBQUFBQUlBQWdBZFFBQUFBQUFBQUFBQUFBQUJvS0JBS0FlUWp6S3RDUTd1Ylc4UzZNTjdCNTk0MzZHQXhQdTBDVlJPd3dOQnNneE1MNDlnY2JBWExUL2JVK0g1d3JTOVhOcGJHeDVZM1Z5YkdodmMzUT0NCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorR0VUIC9wYXRoLzEwMjEwMDAyIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEyLjMtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjMtQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQNCitIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbToxMDIxDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE4YjAxMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMjIKQEAgLTAsMCArMSwzNyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitjdXJsLWNvbmZpZworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKyA8bmFtZT4KK0NvbXBhcmUgY3VybCAtLXZlcnNpb24gd2l0aCBjdXJsLWNvbmZpZyAtLXZlcnNpb24KKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLXZlcnNpb24KKzwvY29tbWFuZD4KKzxwb3N0Y2hlY2s+CislU1JDRElSL2xpYnRlc3QvdGVzdDEwMjIucGwgLi4vY3VybC1jb25maWcgbG9nL3N0ZG91dDEwMjIgdmVyc2lvbgorPC9wb3N0Y2hlY2s+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMAorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDIzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzkxNmEwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyMwpAQCAtMCwwICsxLDM3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK2N1cmwtY29uZmlnCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK25vbmUKKzwvc2VydmVyPgorIDxuYW1lPgorQ29tcGFyZSBjdXJsIC0tdmVyc2lvbiB3aXRoIGN1cmwtY29uZmlnIC0tdmVybnVtCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS12ZXJzaW9uCis8L2NvbW1hbmQ+Cis8cG9zdGNoZWNrPgorJVNSQ0RJUi9saWJ0ZXN0L3Rlc3QxMDIyLnBsIC4uL2N1cmwtY29uZmlnIGxvZy9zdGRvdXQxMDIzIHZlcm51bQorPC9wb3N0Y2hlY2s+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMAorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDI0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODZlZjI2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyNApAQCAtMCwwICsxLDEwMyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorZm9sbG93bG9jYXRpb24KK2Nvb2tpZXMKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitMb2NhdGlvbjogLi4vZGF0YS8xMDI0MDAwMi50eHQNCitTZXQtQ29va2llOiBmaXJzdGNvb2tpZT13YW50OyBwYXRoPS93YW50Lw0KK0NvbnRlbnQtTGVuZ3RoOiA2OQ0KKw0KK1RoaXMgc2VydmVyIHJlcGx5IGlzIGZvciB0ZXN0aW5nIGEgTG9jYXRpb246IGZvbGxvd2luZyB3aXRoIGNvb2tpZXMKKworPC9kYXRhPgorPGRhdGEyPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitMb2NhdGlvbjogLi4vd2FudC8xMDI0MDAwMy50eHQNCitTZXQtQ29va2llOiBuZXh0Y29va2llPWRhdGE7IHBhdGg9L2RhdGEvDQorQ29udGVudC1MZW5ndGg6IDY5DQorDQorVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBMb2NhdGlvbjogZm9sbG93aW5nIHdpdGggY29va2llcworCis8L2RhdGEyPgorPGRhdGEzPgorSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1MZW5ndGg6IDUyDQorDQorSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKworPC9kYXRhMz4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2UNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KK0xvY2F0aW9uOiAuLi9kYXRhLzEwMjQwMDAyLnR4dA0KK1NldC1Db29raWU6IGZpcnN0Y29va2llPXdhbnQ7IHBhdGg9L3dhbnQvDQorQ29udGVudC1MZW5ndGg6IDY5DQorDQorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitMb2NhdGlvbjogLi4vd2FudC8xMDI0MDAwMy50eHQNCitTZXQtQ29va2llOiBuZXh0Y29va2llPWRhdGE7IHBhdGg9L2RhdGEvDQorQ29udGVudC1MZW5ndGg6IDY5DQorDQorSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1MZW5ndGg6IDUyDQorDQorSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBMb2NhdGlvbjogZm9sbG93aW5nIHdpdGggY29va2llcworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzEwMjQgLUwgLWMgbG9nL2phcjEwMjQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzEwMjQgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC9kYXRhLzEwMjQwMDAyLnR4dCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgL3dhbnQvMTAyNDAwMDMudHh0IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0Nvb2tpZTogZmlyc3Rjb29raWU9d2FudA0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDI1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTRmOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyNQpAQCAtMCwwICsxLDEwNSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorZm9sbG93bG9jYXRpb24KK2Nvb2tpZXMKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitMb2NhdGlvbjogLi4vZGF0YS8xMDI1MDAwMi50eHQNCitTZXQtQ29va2llOiBmaXJzdGNvb2tpZT13YW50OyBwYXRoPS93YW50Lw0KK0NvbnRlbnQtTGVuZ3RoOiA2OQ0KKw0KK1RoaXMgc2VydmVyIHJlcGx5IGlzIGZvciB0ZXN0aW5nIGEgTG9jYXRpb246IGZvbGxvd2luZyB3aXRoIGNvb2tpZXMKKworPC9kYXRhPgorPGRhdGEyPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitMb2NhdGlvbjogLi4vd2FudC8xMDI1MDAwMy50eHQNCitTZXQtQ29va2llOiBuZXh0Y29va2llPWRhdGE7IHBhdGg9L2RhdGEvDQorQ29udGVudC1MZW5ndGg6IDY5DQorDQorVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBMb2NhdGlvbjogZm9sbG93aW5nIHdpdGggY29va2llcworCis8L2RhdGEyPgorPGRhdGEzPgorSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1MZW5ndGg6IDUyDQorDQorSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKworPC9kYXRhMz4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2UNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KK0xvY2F0aW9uOiAuLi9kYXRhLzEwMjUwMDAyLnR4dA0KK1NldC1Db29raWU6IGZpcnN0Y29va2llPXdhbnQ7IHBhdGg9L3dhbnQvDQorQ29udGVudC1MZW5ndGg6IDY5DQorDQorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitMb2NhdGlvbjogLi4vd2FudC8xMDI1MDAwMy50eHQNCitTZXQtQ29va2llOiBuZXh0Y29va2llPWRhdGE7IHBhdGg9L2RhdGEvDQorQ29udGVudC1MZW5ndGg6IDY5DQorDQorSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1MZW5ndGg6IDUyDQorDQorSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBMb2NhdGlvbjogZm9sbG93aW5nIHdpdGggY29tbWFuZC1saW5lIGFuZCBzZXJ2ZXIgY29va2llcworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzEwMjUgLUwgLWMgbG9nL2phcjEwMjUgLWIgZm9yY2VkY29va2llPXllcworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dhbnQvMTAyNSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb29raWU6IGZvcmNlZGNvb2tpZT15ZXMNCisNCitHRVQgL2RhdGEvMTAyNTAwMDIudHh0IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0Nvb2tpZTogZm9yY2VkY29va2llPXllcw0KKw0KK0dFVCAvd2FudC8xMDI1MDAwMy50eHQgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29va2llOiBmaXJzdGNvb2tpZT13YW50OyBmb3JjZWRjb29raWU9eWVzDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMjYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDI2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0N2IxMmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDI2CkBAIC0wLDAgKzEsMzkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorLS1tYW51YWwKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+CisgPG5hbWU+CitjdXJsIC0tbWFudWFsIAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tbWFudWFsCis8L2NvbW1hbmQ+CisjIFNlYXJjaCBmb3IgdGhlc2UgdHdvIHNlbnRpbmVsIGxpbmVzIGluIHRoZSBtYW51YWwgb3V0cHV0OyBpZiB0aGV5IGFyZSBmb3VuZCwKKyMgdGhlbiBjaGFuY2VzIGFyZSBnb29kIHRoZSBlbnRpcmUgbWFudWFsIGlzIHRoZXJlLgorPHBvc3RjaGVjaz4KK3BlcmwgLWUgJ29wZW4oSU4sJEFSR1ZbMF0pOyBteSAkbGluZXM9Z3JlcCgvKGFccyp0b29sXHMqdG9ccyp0cmFuc2ZlclxzKmRhdGEpfChtYWlsaW5nXHMqbGlzdHNccyp0b1xzKmRpc2N1c3NccypjdXJsKS8sIDxJTj4pOyBleGl0ICgkbGluZXMgIT0gMik7ICMgTGV0IHRoaXMgZmlsZSBwYXNzIGFuIFhNTCBzeW50YXggY2hlY2s6IDwvSU4+JyBsb2cvc3Rkb3V0MTAyNgorPC9wb3N0Y2hlY2s+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMAorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDI3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzNkNmUzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyNwpAQCAtMCwwICsxLDM5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KKy0taGVscAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKyA8bmFtZT4KK2N1cmwgLS1oZWxwCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1oZWxwCis8L2NvbW1hbmQ+CisjIFNlYXJjaCBmb3IgdGhlc2UgdHdvIHNlbnRpbmVsIGxpbmVzIGluIHRoZSBoZWxwIG91dHB1dDsgaWYgdGhleSBhcmUgZm91bmQsCisjIHRoZW4gY2hhbmNlcyBhcmUgZ29vZCB0aGUgZW50aXJlIGhlbHAgaXMgdGhlcmUuCis8cG9zdGNoZWNrPgorcGVybCAtZSAnb3BlbihJTiwkQVJHVlswXSk7IG15ICRsaW5lcz1ncmVwKC8oVXNhZ2U6IGN1cmwgKXwoLS12ZXJzaW9uXHMqU2hvdyB2ZXJzaW9uKS8sIDxJTj4pOyBleGl0ICgkbGluZXMgIT0gMik7ICMgTGV0IHRoaXMgZmlsZSBwYXNzIGFuIFhNTCBzeW50YXggY2hlY2s6IDwvSU4+JyBsb2cvc3Rkb3V0MTAyNworPC9wb3N0Y2hlY2s+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMAorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDI4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDUxNjJhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyOApAQCAtMCwwICsxLDk0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitmb2xsb3dsb2NhdGlvbgorRlRQCitQQVNWCitGSUxFCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YTE+CitIVFRQLzEuMSAzMDIgT0sNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sDQorRnVubnktaGVhZDogeWVzeWVzDQorTG9jYXRpb246IGZ0cDovLzEyNy4wLjAuMTo4OTkyLzEwMjgwMDAyDQorQ29udGVudC1MZW5ndGg6IDANCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KKzwvZGF0YTE+Cis8ZGF0YTI+CitkYXRhCisgICAgdG8KKyAgICAgIHNlZQordGhhdCBGVFAKK3dvcmtzCisgIHNvIGRvZXMgaXQ/Cis8L2RhdGEyPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBMb2NhdGlvbjogcmVkaXJlY3QgdG8gRlRQIFVSTAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDI4MDAwMSAtTAorPC9jb21tYW5kPgorIyBUaGUgZGF0YSBzZWN0aW9uIGRvZXNuJ3QgZG8gdmFyaWFibGUgc3Vic3RpdHV0aW9uLCBzbyB3ZSBtdXN0IGFzc2VydCB0aGlzCis8cHJlY2hlY2s+CitwZXJsIC1lICJwcmludCAnVGVzdCByZXF1aXJlcyBkZWZhdWx0IHRlc3Qgc2VydmVyIGhvc3QgYW5kIHBvcnQnIGlmICggJyVIT1NUSVAnIG5lICcxMjcuMC4wLjEnIHx8ICclRlRQUE9SVCcgbmUgJzg5OTInICk7IgorPC9wcmVjaGVjaz4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xMDI4MDAwMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMTAyODAwMDINCitSRVRSIDEwMjgwMDAyDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8c3Rkb3V0PgorSFRUUC8xLjEgMzAyIE9LDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0Z1bm55LWhlYWQ6IHllc3llcw0KK0xvY2F0aW9uOiBmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzEwMjgwMDAyDQorQ29udGVudC1MZW5ndGg6IDANCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAyOSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMyYmM1ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMjkKQEAgLTAsMCArMSw1OCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorcmVkaXJlY3RfdXJsCitmb2xsb3dsb2NhdGlvbgorLS13cml0ZS1vdXQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2Ugc3dzY2xvc2UKK0xvY2F0aW9uOiBkYXRhLzEwMjkwMDAyLnR4dD9jb29sc2l0ZT15ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2MgorQ29ubmVjdGlvbjogY2xvc2UKKworVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBzaW1wbGUgTG9jYXRpb246IGZvbGxvd2luZworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgTG9jYXRpb246IGFuZCAncmVkaXJlY3RfdXJsJyBjaGVjaworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50L291ci8xMDI5IC13ICcle3JlZGlyZWN0X3VybH1cbicKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93ZS93YW50L291ci8xMDI5IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8c3Rkb3V0IG1vZGU9InRleHQiPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlIHN3c2Nsb3NlCitMb2NhdGlvbjogZGF0YS8xMDI5MDAwMi50eHQ/Y29vbHNpdGU9eWVzCitDb250ZW50LUxlbmd0aDogNjIKK0Nvbm5lY3Rpb246IGNsb3NlCisKK1RoaXMgc2VydmVyIHJlcGx5IGlzIGZvciB0ZXN0aW5nIGEgc2ltcGxlIExvY2F0aW9uOiBmb2xsb3dpbmcKK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50L291ci9kYXRhLzEwMjkwMDAyLnR4dD9jb29sc2l0ZT15ZXMKKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NzEyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDMKQEAgLTAsMCArMSw1NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BPUlQKK1JFVFIKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBSRVRSIFBPUlQgd2l0aCBDV0QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL2EvcGF0aC8xMDMgLVAgLQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyBTdHJpcCBhbGwgdmFsaWQga2luZHMgb2YgUE9SVCBhbmQgRVBSVCB0aGF0IGN1cmwgY2FuIHNlbmQKKzxzdHJpcD4KK15QT1JUIFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9CiteRVBSVCBcfDFcfFxkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM31cfFxkezEsNX1cfAorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgYQ0KK0NXRCBwYXRoDQorUE9SVCAxMjcsMCwwLDEsMCwwDQorVFlQRSBJDQorU0laRSAxMDMNCitSRVRSIDEwMw0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAzMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1YTA5MgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzAKQEAgLTAsMCArMSwxMDkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQVVQKK0hUVFAgRGlnZXN0IGF1dGgKKy0tYW55YXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZA0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBCbGFja21hZ2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyIsIG5vbmNlPSIxMTIyMzM0NCINCitDb250ZW50LUxlbmd0aDogMjYNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorDQorVGhpcyBpcyBub3QgdGhlIHJlYWwgcGFnZQorPC9kYXRhPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgYQorIyBBdXRob3JpemF0aW9uOiBEaWdlc3QgbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50Cis8ZGF0YTEwMDA+CitIVFRQLzEuMSAyMDAgT0sNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyMw0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorVGhpcyBJUyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhMTAwMD4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1dXVy1BdXRoZW50aWNhdGU6IEJsYWNrbWFnaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIiwgbm9uY2U9IjExMjIzMzQ0Ig0KK0NvbnRlbnQtTGVuZ3RoOiAyNg0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCisNCitIVFRQLzEuMSAyMDAgT0sNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyMw0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorVGhpcyBJUyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitjcnlwdG8KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIFBVVCB3aXRoIC0tYW55YXV0aCBhdXRob3JpemF0aW9uIChwaWNraW5nIERpZ2VzdCkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTAzMCAtVCBsb2cvcHV0MTAzMCAtdSB0ZXN0dXNlcjp0ZXN0cGFzcyAtLWFueWF1dGgKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9wdXQxMDMwIj4KK1RoaXMgaXMgZGF0YSB3ZSB1cGxvYWQgd2l0aCBQVVQKK2Egc2Vjb25kIGxpbmUKK2xpbmUgdGhyZWUKK2ZvdXIgaXMgdGhlIG51bWJlciBvZiBsaW5lcworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQVVQgLzEwMzAgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDg1DQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitUaGlzIGlzIGRhdGEgd2UgdXBsb2FkIHdpdGggUFVUCithIHNlY29uZCBsaW5lCitsaW5lIHRocmVlCitmb3VyIGlzIHRoZSBudW1iZXIgb2YgbGluZXMKK1BVVCAvMTAzMCBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0idGVzdHVzZXIiLCByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIiwgbm9uY2U9IjExMjIzMzQ0IiwgdXJpPSIvMTAzMCIsIHJlc3BvbnNlPSIwMWNiNTlkYjFkZGFhYzI0NmIwNzJkNWY1ZjA3MTZkOSINCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC41IE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogODUNCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KKw0KK1RoaXMgaXMgZGF0YSB3ZSB1cGxvYWQgd2l0aCBQVVQKK2Egc2Vjb25kIGxpbmUKK2xpbmUgdGhyZWUKK2ZvdXIgaXMgdGhlIG51bWJlciBvZiBsaW5lcworPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZmJhYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDMxCkBAIC0wLDAgKzEsNzYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2ZvbGxvd2xvY2F0aW9uCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2Ugc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiA/Y29vbHNpdGU9eWVzLzEwMzEwMDAyLnR4dAorQ29ubmVjdGlvbjogY2xvc2UKKworVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBzaW1wbGUgTG9jYXRpb246IGZvbGxvd2luZworCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgRm9sbG93ZWQgaGVyZSBmaW5lIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNTIKKworSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKworPC9kYXRhMj4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2Ugc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiA/Y29vbHNpdGU9eWVzLzEwMzEwMDAyLnR4dAorQ29ubmVjdGlvbjogY2xvc2UKKworSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZSBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDUyCisKK0lmIHRoaXMgaXMgcmVjZWl2ZWQsIHRoZSBsb2NhdGlvbiBmb2xsb3dpbmcgd29ya2VkCisKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgTG9jYXRpb246IGZvbGxvd2luZyB0byBhIHF1ZXJ5IHN0cmluZworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50L3RoaXMvMTAzMSAtTAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dhbnQvdGhpcy8xMDMxIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvd2FudC90aGlzLzEwMzE/Y29vbHNpdGU9eWVzLzEwMzEwMDAyLnR4dCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAzMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0Y2RiZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzIKQEAgLTAsMCArMSw1NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEhFQUQKK3JhbmdlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEhFQUQgd2l0aCAtLXJhbmdlCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1yYW5nZSAxLTMgLS1oZWFkIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDMyCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0hFQUQgLzEwMzIgSFRUUC8xLjENCitSYW5nZTogYnl0ZXM9MS0zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDMzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAzMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWQ1ZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAzMwpAQCAtMCwwICsxLDYwIEBACis8dGVzdGNhc2U+CisjCisjIFRoaXMgY2FzZSB3aXRoIGFuIHVuZXhwZWN0ZWQgMXh4IHJlc3BvbnNlIHVzZWQgdG8gY2F1c2UgYSAiaGFuZyIgYmVmb3JlIHRoZSBmaXgKKyMgZ290IDcuMTkuMAorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAxMDIgdW5leHBlY3RlZCBodWg/IQorCitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCistZm9vLQorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGggMTAyIHJlc3BvbnNlIQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDMzCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTAzMyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAzNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3NTc0MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzQKQEAgLTAsMCArMSw2MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBwcm94eQorSUROCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4wIDUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0Z1bm55LWhlYWQ6IHllc3llcw0KKw0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitpZG4KKzwvZmVhdHVyZXM+Cis8c2V0ZW52PgorQ0hBUlNFVD1VVEYtOAorPC9zZXRlbnY+CisgPG5hbWU+CitIVFRQIG92ZXIgcHJveHkgd2l0aCBtYWxmb3JtYXR0ZWQgSUROIGhvc3QgbmFtZQorIDwvbmFtZT4KKworIyBUaGlzIGhvc3QgbmFtZSBjb250YWlucyBhbiBpbnZhbGlkIFVURi04IGJ5dGUgc2VxdWVuY2UgdGhhdCBjYW4ndCBiZQorIyBjb252ZXJ0ZWQgaW50byBhbiBJRE4gbmFtZQorIDxjb21tYW5kPgoraHR0cDovL2ludmFsaWQtdXRmOC3ikC5sb2NhbC9wYWdlLzEwMzQgLXggJUhPU1RJUDolSFRUUFBPUlQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGh0dHA6Ly9pbnZhbGlkLXV0Zjgt4pAubG9jYWwvcGFnZS8xMDM0IEhUVFAvMS4xDQorSG9zdDogaW52YWxpZC11dGY4LeKQLmxvY2FsDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYjQzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDM1CkBAIC0wLDAgKzEsNTkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKK0lETgorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMCA1MDMgU2VydmljZSBVbmF2YWlsYWJsZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlIHN3c2Nsb3NlDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwNCitGdW5ueS1oZWFkOiB5ZXN5ZXMNCisNCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgoraWRuCis8L2ZlYXR1cmVzPgorPHNldGVudj4KK0NIQVJTRVQ9SVNPODg1OS0xCis8L3NldGVudj4KKyA8bmFtZT4KK0hUVFAgb3ZlciBwcm94eSB3aXRoIHRvbyBsb25nIElETiBob3N0IG5hbWUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vdG9vLWxvbmctSUROLW5hbWUtY/xybC1y/Gxlcy1sYS1sYS1sYS1kZWUtZGEtZmxvb2J5LW5vb2J5LmxvY2FsL3BhZ2UvMTAzNSAteCAlSE9TVElQOiVIVFRQUE9SVAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgaHR0cDovL3Rvby1sb25nLUlETi1uYW1lLWP8cmwtcvxsZXMtbGEtbGEtbGEtZGVlLWRhLWZsb29ieS1ub29ieS5sb2NhbC9wYWdlLzEwMzUgSFRUUC8xLjENCitIb3N0OiB0b28tbG9uZy1JRE4tbmFtZS1j/HJsLXL8bGVzLWxhLWxhLWxhLWRlZS1kYS1mbG9vYnktbm9vYnkubG9jYWwNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTAzNiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhlYmM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzYKQEAgLTAsMCArMSw2MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK1JFVFIKK1Jlc3VtZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK2V4cGVjdGVkIHRvIGJlIGEgZmlsZSB3aXRob3V0IHRoZSBmaXJzdCBwYXJ0CitidXQgd2UgZW11bGF0ZSB0aGF0Cis8L2RhdGE+Cis8c2l6ZT4KKzg1Cis8L3NpemU+Cis8c2VydmVyY21kPgorUkVQTFkgRVBTViA1MDAgbm8gc3VjaCBjb21tYW5kCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBkb3dubG9hZCByZXN1bWUgZnJvbSBlbmQgb2YgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTAzNiAtQyAtCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvY3VybDEwMzYub3V0Ij4KK1RoaXMgaXMgdGhlIHN0YXJ0ISEKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorUEFTVg0KK1RZUEUgSQ0KK1NJWkUgMTAzNg0KK1JFU1QgMjANCitSRVRSIDEwMzYNCitRVUlUDQorPC9wcm90b2NvbD4KKzxmaWxlIG5hbWU9ImxvZy9jdXJsMTAzNi5vdXQiPgorVGhpcyBpcyB0aGUgc3RhcnQhIQorZXhwZWN0ZWQgdG8gYmUgYSBmaWxlIHdpdGhvdXQgdGhlIGZpcnN0IHBhcnQKK2J1dCB3ZSBlbXVsYXRlIHRoYXQKKzwvZmlsZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5Y2RjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDM3CkBAIC0wLDAgKzEsNTQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitSRVRSCitSZXN1bWUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitleHBlY3RlZCB0byBiZSBhIGZpbGUgd2l0aG91dCB0aGUgZmlyc3QgcGFydAorYnV0IHdlIGVtdWxhdGUgdGhhdAorPC9kYXRhPgorPHNpemU+Cis2NQorPC9zaXplPgorPHNlcnZlcmNtZD4KK1JFUExZIEVQU1YgNTAwIG5vIHN1Y2ggY29tbWFuZAorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgZG93bmxvYWQgcmVzdW1lIGZyb20gZW5kIG9mIGVtcHR5IGZpbGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzEwMzcgLUMgLQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL2N1cmwxMDM3Lm91dCI+Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1BBU1YNCitUWVBFIEkNCitTSVpFIDEwMzcNCitSRVRSIDEwMzcNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NzJkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDM4CkBAIC0wLDAgKzEsNTMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitFUFNWCitBUFBFCitSZXN1bWUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2l6ZT4KKzE3Cis8L3NpemU+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgUEFTViB1cGxvYWQgcmVzdW1lIGZyb20gZW5kIG9mIGZpbGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzEwMzggLVQgbG9nL3VwbG9hZDEwMzggLUMgLQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3VwbG9hZDEwMzgiPgordGhpcyBpcyB0aGUgKioqKipjckBwKioqKioqKiogdGhhdCB3ZSdyZSBnb25uYSB1cGxvYWQKKword29yeD8KKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBJDQorU0laRSAxMDM4DQorQVBQRSAxMDM4DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8dXBsb2FkPgorY3JAcCoqKioqKioqIHRoYXQgd2UncmUgZ29ubmEgdXBsb2FkCisKK3dvcng/Cis8L3VwbG9hZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwMzkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDM5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NGQ4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDM5CkBAIC0wLDAgKzEsNTMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitFUFNWCitBUFBFCitSZXN1bWUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2l6ZT4KKzAKKzwvc2l6ZT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBQQVNWIHVwbG9hZCByZXN1bWUgZnJvbSBlbmQgb2YgZW1wdHkgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTAzOSAtVCBsb2cvdXBsb2FkMTAzOSAtQyAtCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdXBsb2FkMTAzOSI+Cit0aGlzIGlzIHRoZSAqKioqKmNyQHAqKioqKioqKiB0aGF0IHdlJ3JlIGdvbm5hIHVwbG9hZAorCit3b3J4PworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDEwMzkNCitTVE9SIDEwMzkNCitRVUlUDQorPC9wcm90b2NvbD4KKzx1cGxvYWQ+Cit0aGlzIGlzIHRoZSAqKioqKmNyQHAqKioqKioqKiB0aGF0IHdlJ3JlIGdvbm5hIHVwbG9hZAorCit3b3J4PworPC91cGxvYWQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJkZjk4YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNApAQCAtMCwwICsxLDQzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorTk9CT0RZCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNpemU+Cis1MQorPC9zaXplPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIC0taGVhZCB0byBnZXQgZmlsZSBzaXplIG9ubHkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL2EvcGF0aC8xMDQgLS1oZWFkCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIGENCitDV0QgcGF0aA0KK01EVE0gMTA0DQorVFlQRSBJDQorU0laRSAxMDQNCitSRVNUIDANCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NjZlNzAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQwCkBAIC0wLDAgKzEsNzkgQEAKKzx0ZXN0Y2FzZT4KKyMgU2ltaWxhciB0byB0ZXN0OTIKKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK1Jlc3VtZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSA0MTYgSW52YWxpZCByYW5nZQ0KK0Nvbm5lY3Rpb246IGNsb3NlDQorQ29udGVudC1MZW5ndGg6IDANCisNCis8L2RhdGE+CisKKyMgVGhlIGZpbGUgZGF0YSB0aGF0IGV4aXN0cyBhdCB0aGUgc3RhcnQgb2YgdGhlIHRlc3QgbXVzdCBiZSBpbmNsdWRlZCBpbgorIyB0aGUgdmVyaWZpY2F0aW9uLgorPGRhdGFjaGVjaz4KKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorSFRUUC8xLjEgNDE2IEludmFsaWQgcmFuZ2UNCitDb25uZWN0aW9uOiBjbG9zZQ0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorDQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB3aXRoIHJlc3VtZSBmcm9tIGVuZCBvZiBlbnRpcmVseS1kb3dubG9hZGVkIGZpbGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTA0MCAtQyAtCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvY3VybDEwNDAub3V0Ij4KKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzEwNDAgSFRUUC8xLjENCitSYW5nZTogYnl0ZXM9MTAwLQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA0MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExNjkyYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDEKQEAgLTAsMCArMSw3OCBAQAorPHRlc3RjYXNlPgorIyBTaW1pbGFyIHRvIHRlc3QzMworPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBVVAorUmVzdW1lCitDb250ZW50LVJhbmdlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIE9LIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitBY2NlcHQtUmFuZ2VzOiBieXRlcw0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorQ29ubmVjdGlvbjogY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KKw0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFBVVCB3aXRoIHJlc3VtZSBmcm9tIGVuZCBvZiBhbHJlYWR5LXVwbG9hZGVkIGZpbGUKKyA8L25hbWU+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDEwNDEudHh0Ij4KKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorPC9maWxlPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEwNDEgLVRsb2cvdGVzdDEwNDEudHh0IC1DIC0KKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorIyBjdXJsIGRvZXNuJ3QgZG8gYSBIRUFEIHJlcXVlc3Qgb24gdGhlIHJlbW90ZSBmaWxlIHNvIGl0IGhhcyBubyBpZGVhIHdoZXRoZXIKKyMgaXQgY2FuIHNraXAgcGFydCBvZiB0aGUgZmlsZSBvciBub3QuICBJbnN0ZWFkLCBpdCBzZW5kcyB0aGUgZW50aXJlIGZpbGUuCis8cHJvdG9jb2w+CitQVVQgLzEwNDEgSFRUUC8xLjENCitDb250ZW50LVJhbmdlOiBieXRlcyAwLTk5LzEwMA0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMTAwDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA0MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTMyMTIwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA0MgpAQCAtMCwwICsxLDk0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitSZXN1bWUKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKyMgU29tZSBzZXJ2ZXJzIChlLmcuIEFwYWNoZSAxLjIpIHJlc3BvbmQgdGhpcyB3YXkgdG8gYW4gaW52YWxpZCBieXRlIHJhbmdlCis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSw0KK0Nvbm5lY3Rpb246IGNsb3NlDQorQ29udGVudC1MZW5ndGg6IDEwMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KKw0KKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorPC9kYXRhPgorCisjIFRoZSBmaWxlIGRhdGEgdGhhdCBleGlzdHMgYXQgdGhlIHN0YXJ0IG9mIHRoZSB0ZXN0IG11c3QgYmUgaW5jbHVkZWQgaW4KKyMgdGhlIHZlcmlmaWNhdGlvbi4KKzxkYXRhY2hlY2s+CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKK0hUVFAvMS4xIDIwMCBPSw0KK0Nvbm5lY3Rpb246IGNsb3NlDQorQ29udGVudC1MZW5ndGg6IDEwMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KKw0KKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIGZyb20gZW5kIG9mIGVudGlyZWx5LWRvd25sb2FkZWQgZmlsZSwgbm8gc2VydmVyIHJlc3VtZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDQyIC1DIC0KKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9jdXJsMTA0Mi5vdXQiPgorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMzMKKzwvZXJyb3Jjb2RlPgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzEwNDIgSFRUUC8xLjENCitSYW5nZTogYnl0ZXM9MTAwLQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA0MyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliZDEwNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDMKQEAgLTAsMCArMSw4NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorUmVzdW1lCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwNiBQYXJ0aWFsIENvbnRlbnQNCitEYXRlOiBNb24sIDEzIE5vdiAyMDA3IDEzOjQxOjA5IEdNVA0KK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UDQorQWNjZXB0LVJhbmdlczogYnl0ZXMNCitDb250ZW50LUxlbmd0aDogNjANCitDb250ZW50LVJhbmdlOiBieXRlcyA0MC05OS8xMDANCisNCiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4Cis8L2RhdGE+CisKKyMgVGhlIGZpbGUgZGF0YSB0aGF0IGV4aXN0cyBhdCB0aGUgc3RhcnQgb2YgdGhlIHRlc3QgbXVzdCBiZSBpbmNsdWRlZCBpbgorIyB0aGUgdmVyaWZpY2F0aW9uLgorPGRhdGFjaGVjaz4KKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorSFRUUC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudA0KK0RhdGU6IE1vbiwgMTMgTm92IDIwMDcgMTM6NDE6MDkgR01UDQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQNCitBY2NlcHQtUmFuZ2VzOiBieXRlcw0KK0NvbnRlbnQtTGVuZ3RoOiA2MA0KK0NvbnRlbnQtUmFuZ2U6IGJ5dGVzIDQwLTk5LzEwMA0KKw0KKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBHRVQgd2l0aCByZXN1bWUgZnJvbSBlbmQgb2YgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDQzIC1DIC0KKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9jdXJsMTA0My5vdXQiPgorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTA0MyBIVFRQLzEuMQ0KK1JhbmdlOiBieXRlcz00MC0NCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NWY1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQ0CkBAIC0wLDAgKzEsNTggQEAKKzx0ZXN0Y2FzZT4KKyMgU2ltaWxhciB0byB0ZXN0MTQxCis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorTk9CT0RZCitMYXJnZWZpbGUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPHNpemU+Cis5OTk5OTk5OTk5Cis8L3NpemU+Cis8bWR0bT4KKzIxMyAyMDA4MDcyNjEwMjY1OQorPC9tZHRtPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK2xhcmdlX2ZpbGUKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBkb3dubG9hZCBsYXJnZSBmaWxlIGluZm8gd2l0aCAtSQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvYmxhbGJsYS8xMDQ0IC1JCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIGJsYWxibGENCitNRFRNIDEwNDQNCitUWVBFIEkNCitTSVpFIDEwNDQNCitSRVNUIDANCitRVUlUDQorPC9wcm90b2NvbD4KKzxzdGRvdXQ+CitMYXN0LU1vZGlmaWVkOiBTYXQsIDI2IEp1bCAyMDA4IDEwOjI2OjU5IEdNVA0KK0NvbnRlbnQtTGVuZ3RoOiA5OTk5OTk5OTk5DQorQWNjZXB0LXJhbmdlczogYnl0ZXMNCis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOGFkNGIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQ1CkBAIC0wLDAgKzEsNTIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKy0taW50ZXJmYWNlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IE1vbiwgMjggSnVsIDIwMDggMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1MZW5ndGg6IDYNCitDb25uZWN0aW9uOiBjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KKw0KKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBHRVQgd2l0aCBudW1lcmljIGxvY2FsaG9zdCAtLWludGVyZmFjZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDQ1IC0taW50ZXJmYWNlICVDTElFTlRJUAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzEwNDUgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQ2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNGU1YzIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQ2CkBAIC0wLDAgKzEsNjAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKy0taW50ZXJmYWNlCitJUHY2Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IE1vbiwgMjggSnVsIDIwMDggMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1MZW5ndGg6IDYNCitDb25uZWN0aW9uOiBjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KKw0KKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgoraXB2NgorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwLWlwdjYKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUC1JUHY2IEdFVCB3aXRoIG51bWVyaWMgbG9jYWxob3N0IC0taW50ZXJmYWNlCisgPC9uYW1lPgorIDxjb21tYW5kPgorLWcgImh0dHA6Ly8lSE9TVDZJUDolSFRUUDZQT1JULzEwNDYiIC0taW50ZXJmYWNlIDo6MQorPC9jb21tYW5kPgorIyAtLWludGVyZmFjZSBkb2Vzbid0IGFjY2VwdCBhbiBhZGRyZXNzIHN1cnJvdW5kZWQgYnkgW10gc28gJUNMSUVOVDZJUCBpcyBvdXQKKzxwcmVjaGVjaz4KK3BlcmwgLWUgInByaW50ICdUZXN0IHJlcXVpcmVzIGRlZmF1bHQgdGVzdCBzZXJ2ZXIgaG9zdCBhZGRyZXNzJyBpZiAoICclQ0xJRU5UNklQJyBuZSAnWzo6MV0nICk7IgorPC9wcmVjaGVjaz4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xMDQ2IEhUVFAvMS4xDQorSG9zdDogJUhPU1Q2SVA6JUhUVFA2UE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMTcwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDQ3CkBAIC0wLDAgKzEsNTggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitMSVNUCistLWludGVyZmFjZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRpciBsaXN0IFBBU1Ygd2l0aCBsb2NhbGhvc3QgLS1pbnRlcmZhY2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULyAtLWludGVyZmFjZSAlQ0xJRU5USVAKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBBDQorTElTVA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA0OCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhOTliYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDgKQEAgLTAsMCArMSw2NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK0xJU1QKKy0taW50ZXJmYWNlCitJUHY2Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisjIFdoZW4gZG9pbmcgTElTVCwgd2UgZ2V0IHRoZSBkZWZhdWx0IGxpc3Qgb3V0cHV0IGhhcmQtY29kZWQgaW4gdGhlIHRlc3QKKyMgRlRQIHNlcnZlcgorPGRhdGFjaGVjaz4KK3RvdGFsIDIwCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuLgorZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFQKKy1yLS1yLS1yLS0gICAxIDAgICAgICAgIDEgICAgICAgICAgICAgMzUgSnVsIDE2ICAxOTk2IFJFQURNRQorbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldgorZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgMjkgMTY6MDQgZG93bmxvYWQuaHRtbAorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCitkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWIKK2RyLXhyLXhyLXggICA1IDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IHVzcgorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgoraXB2NgorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitmdHAtaXB2NgorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAtSVB2NiBkaXIgbGlzdCBQQVNWIHdpdGggbG9jYWxob3N0IC0taW50ZXJmYWNlCisgPC9uYW1lPgorIDxjb21tYW5kPgorLWcgImZ0cDovLyVIT1NUNklQOiVGVFA2UE9SVC8iIC0taW50ZXJmYWNlIDo6MQorPC9jb21tYW5kPgorIyAtLWludGVyZmFjZSBkb2Vzbid0IGFjY2VwdCBhbiBhZGRyZXNzIHN1cnJvdW5kZWQgYnkgW10gc28gJUNMSUVOVDZJUCBpcyBvdXQKKzxwcmVjaGVjaz4KK3BlcmwgLWUgInByaW50ICdUZXN0IHJlcXVpcmVzIGRlZmF1bHQgdGVzdCBzZXJ2ZXIgaG9zdCBhZGRyZXNzJyBpZiAoICclQ0xJRU5UNklQJyBuZSAnWzo6MV0nICk7IgorPC9wcmVjaGVjaz4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBBDQorTElTVA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA0OSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYwNTRhNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNDkKQEAgLTAsMCArMSw0NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitURlRQCitURlRQIFJSUQorLS1pbnRlcmZhY2UKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorYSBjaHVuayBvZgorZGF0YQorcmV0dXJuZWQKKyB0byBjbGllbnQKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgordGZ0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitURlRQIHJldHJpZXZlIHdpdGggbG9jYWxob3N0IC0taW50ZXJmYWNlCisgPC9uYW1lPgorIDxjb21tYW5kPgordGZ0cDovLyVIT1NUSVA6JVRGVFBQT1JULy8xMDQ5IC0tdHJhY2UtYXNjaWkgbG9nL3RyYWNlaXQgLS1pbnRlcmZhY2UgJUNMSUVOVElQCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgcHNldWRvIHByb3RvY29sIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK29wY29kZTogMQorZmlsZW5hbWU6IC8xMDQ5Cittb2RlOiBvY3RldAorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzgxMWFlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1CkBAIC0wLDAgKzEsNTMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitUWVBFIEEKK1JFVFIKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KKzwvZGF0YT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBFUFNWIDUwMCBubyBzdWNoIGNvbW1hbmQKK1JFUExZIFNJWkUgNTAwIG5vIHN1Y2ggY29tbWFuZAorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgdXNlcitwYXNzd29yZCBpbiBVUkwgYW5kIEFTQ0lJIHRyYW5zZmVyCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vdXNlcmR1ZGU6cGFzc2ZlbGxvd0AlSE9TVElQOiVGVFBQT1JULzEwNSAtLXVzZS1hc2NpaQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiB1c2VyZHVkZQ0KK1BBU1MgcGFzc2ZlbGxvdw0KK1BXRA0KK0VQU1YNCitQQVNWDQorVFlQRSBBDQorU0laRSAxMDUNCitSRVRSIDEwNQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1MCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiYjliMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNTAKQEAgLTAsMCArMSw2NiBAQAorPHRlc3RjYXNlPgorIyBTaW1pbGFyIHRvIHRlc3QgMjUzCis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUC1pcHY2CitJUHY2CitFUFJUCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisjIFdoZW4gZG9pbmcgTElTVCwgd2UgZ2V0IHRoZSBkZWZhdWx0IGxpc3Qgb3V0cHV0IGhhcmQtY29kZWQgaW4gdGhlIHRlc3QKKyMgRlRQIHNlcnZlcgorPGRhdGFjaGVjaz4KK3RvdGFsIDIwCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuLgorZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFQKKy1yLS1yLS1yLS0gICAxIDAgICAgICAgIDEgICAgICAgICAgICAgMzUgSnVsIDE2ICAxOTk2IFJFQURNRQorbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldgorZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgMjkgMTY6MDQgZG93bmxvYWQuaHRtbAorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCitkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWIKK2RyLXhyLXhyLXggICA1IDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IHVzcgorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgoraXB2NgorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitmdHAtaXB2NgorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAtSVB2NiBkaXIgbGlzdCwgRVBSVCB3aXRoIHNwZWNpZmllZCBJUAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1nICJmdHA6Ly8lSE9TVDZJUDolRlRQNlBPUlQvIiAtUCA6OjEKKzwvY29tbWFuZD4KKyMgLS1pbnRlcmZhY2UgZG9lc24ndCBhY2NlcHQgYW4gYWRkcmVzcyBzdXJyb3VuZGVkIGJ5IFtdIHNvICVDTElFTlQ2SVAgaXMgb3V0Cis8cHJlY2hlY2s+CitwZXJsIC1lICJwcmludCAnVGVzdCByZXF1aXJlcyBkZWZhdWx0IHRlc3Qgc2VydmVyIGhvc3QgYWRkcmVzcycgaWYgKCAnJUNMSUVOVDZJUCcgbmUgJ1s6OjFdJyApOyIKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIFN0cmlwIGFsbCB2YWxpZCBraW5kcyBvZiBFUFJUIHRoYXQgY3VybCBjYW4gc2VuZAorPHN0cmlwcGFydD4KK3MvXihFUFJUIFx8Mlx8OjoxXHwpKC4qKS8kMS8KKzwvc3RyaXBwYXJ0PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQUlQgfDJ8OjoxfAorVFlQRSBBDQorTElTVA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwZTFkMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNTEKQEAgLTAsMCArMSwxMTggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQVVQKK2ZvbGxvd2xvY2F0aW9uCis8L2tleXdvcmRzPgorCis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMSBSZWRpcmVjdCBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMjkgSnVsIDIwMDggMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorTG9jYXRpb246IGRhdGEvMTA1MTAwMDIudHh0P2Nvb2xzaXRlPXllcw0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAxMDAgQ29udGludWUNCisNCitIVFRQLzEuMSAyMDAgRm9sbG93ZWQgaGVyZSBmaW5lIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAyOSBKdWwgMjAwOCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LUxlbmd0aDogNTENCisNCitJZiB0aGlzIGlzIHJlY2VpdmVkLCB0aGUgbG9jYXRpb24gZm9sbG93aW5nIHdvcmtlZAorPC9kYXRhMj4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgUmVkaXJlY3Qgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDI5IEp1bCAyMDA4IDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KK0xvY2F0aW9uOiBkYXRhLzEwNTEwMDAyLnR4dD9jb29sc2l0ZT15ZXMNCitDb250ZW50LUxlbmd0aDogMA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorSFRUUC8xLjEgMTAwIENvbnRpbnVlDQorDQorSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZSBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMjkgSnVsIDIwMDggMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1MZW5ndGg6IDUxDQorDQorSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgUFVUIHdpdGggTG9jYXRpb246IGZvbGxvd2luZworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzEwNTEgLUwgLVQgbG9nL3Rlc3QxMDUxLnR4dAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3QxMDUxLnR4dCI+CitXZWlyZAorICAgICBmaWxlCisgICAgICAgICB0bworICAgdXBsb2FkCitmb3IKKyAgIHRlc3RpbmcKK3RoZQorICAgUFVUCisgICAgICBmZWF0dXJlCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKworIyBUaGUgcHJpbWFyeSByZWFzb24gbGliY3VybCBzZW5kcyB0aGUgZGF0YSBwYXJ0IHR3aWNlIGluIHRoaXMgdGVzdCBpcyB0aGF0CisjIHRoZSB0ZXN0IEhUVFAgc2VydmVyIGlzIGJsb2NraW5nIHVudGlsIGl0IGhhcyByZWFkIHRoZSBlbnRpcmUgcmVxdWVzdCwKKyMgaW5jbHVkaW5nIHRoZSBmdWxsIHJlcXVlc3QtYm9keSBiZWZvcmUgaXQgcmVzcG9uZHMuIFNvIGluIHRoaXMgdGVzdCB0aGUKKyMgc2VydmVyIHNheXMgMzAxIGFuZCAxMDAgX2FmdGVyXyB0aGUgZW50aXJlIFBVVCBib2R5IGhhcyBiZWVuIHNlbnQuCisKKzxwcm90b2NvbD4KK1BVVCAvd2FudC8xMDUxIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiA3OA0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorDQorV2VpcmQKKyAgICAgZmlsZQorICAgICAgICAgdG8KKyAgIHVwbG9hZAorZm9yCisgICB0ZXN0aW5nCit0aGUKKyAgIFBVVAorICAgICAgZmVhdHVyZQorUFVUIC93YW50L2RhdGEvMTA1MTAwMDIudHh0P2Nvb2xzaXRlPXllcyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogNzgNCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KKw0KK1dlaXJkCisgICAgIGZpbGUKKyAgICAgICAgIHRvCisgICB1cGxvYWQKK2ZvcgorICAgdGVzdGluZwordGhlCisgICBQVVQKKyAgICAgIGZlYXR1cmUKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDUyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGMxNmI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1MgpAQCAtMCwwICsxLDExMSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBVVAorZm9sbG93bG9jYXRpb24KKzwva2V5d29yZHM+CisKKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjAgMzAxIFJlZGlyZWN0IHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAyOSBKdWwgMjAwOCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitMb2NhdGlvbjogZGF0YS8xMDUyMDAwMi50eHQ/Y29vbHNpdGU9eWVzDQorQ29udGVudC1MZW5ndGg6IDANCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KKzwvZGF0YT4KKzxkYXRhMj4KK0hUVFAvMS4wIDIwMCBGb2xsb3dlZCBoZXJlIGZpbmUgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDI5IEp1bCAyMDA4IDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KK0NvbnRlbnQtTGVuZ3RoOiA1MQ0KKw0KK0lmIHRoaXMgaXMgcmVjZWl2ZWQsIHRoZSBsb2NhdGlvbiBmb2xsb3dpbmcgd29ya2VkCis8L2RhdGEyPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4wIDMwMSBSZWRpcmVjdCBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMjkgSnVsIDIwMDggMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorTG9jYXRpb246IGRhdGEvMTA1MjAwMDIudHh0P2Nvb2xzaXRlPXllcw0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitIVFRQLzEuMCAyMDAgRm9sbG93ZWQgaGVyZSBmaW5lIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAyOSBKdWwgMjAwOCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LUxlbmd0aDogNTENCisNCitJZiB0aGlzIGlzIHJlY2VpdmVkLCB0aGUgbG9jYXRpb24gZm9sbG93aW5nIHdvcmtlZAorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCAxLjAgUFVUIHdpdGggTG9jYXRpb246IGZvbGxvd2luZworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzEwNTIgLTAgLUwgLVQgbG9nL3Rlc3QxMDUyLnR4dAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3QxMDUyLnR4dCI+CitXZWlyZAorICAgICBmaWxlCisgICAgICAgICB0bworICAgdXBsb2FkCitmb3IKKyAgIHRlc3RpbmcKK3RoZQorICAgUFVUCisgICAgICBmZWF0dXJlCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKworIyBUaGUgcHJpbWFyeSByZWFzb24gbGliY3VybCBzZW5kcyB0aGUgZGF0YSBwYXJ0IHR3aWNlIGluIHRoaXMgdGVzdCBpcyB0aGF0CisjIHRoZSB0ZXN0IEhUVFAgc2VydmVyIGlzIGJsb2NraW5nIHVudGlsIGl0IGhhcyByZWFkIHRoZSBlbnRpcmUgcmVxdWVzdCwKKyMgaW5jbHVkaW5nIHRoZSBmdWxsIHJlcXVlc3QtYm9keSBiZWZvcmUgaXQgcmVzcG9uZHMuIFNvIGluIHRoaXMgdGVzdCB0aGUKKyMgc2VydmVyIHNheXMgMzAxIGFuZCAyMDAgX2FmdGVyXyB0aGUgZW50aXJlIFBVVCBib2R5IGhhcyBiZWVuIHNlbnQuCis8cHJvdG9jb2w+CitQVVQgL3dhbnQvMTA1MiBIVFRQLzEuMA0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogNzgNCisNCitXZWlyZAorICAgICBmaWxlCisgICAgICAgICB0bworICAgdXBsb2FkCitmb3IKKyAgIHRlc3RpbmcKK3RoZQorICAgUFVUCisgICAgICBmZWF0dXJlCitQVVQgL3dhbnQvZGF0YS8xMDUyMDAwMi50eHQ/Y29vbHNpdGU9eWVzIEhUVFAvMS4wDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiA3OA0KKw0KK1dlaXJkCisgICAgIGZpbGUKKyAgICAgICAgIHRvCisgICB1cGxvYWQKK2ZvcgorICAgdGVzdGluZwordGhlCisgICBQVVQKKyAgICAgIGZlYXR1cmUKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDUzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzYwZTVjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1MwpAQCAtMCwwICsxLDEyOSBAQAorPHRlc3RjYXNlPgorIyBCYXNlZCBvbiB0ZXN0IDkKKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBGT1JNUE9TVAorSFRUUCBmaWxlIHVwbG9hZAorZm9sbG93bG9jYXRpb24KKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzA3IFJlZGlyZWN0IHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAyOSBKdWwgMjAwOCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitMb2NhdGlvbjogZGF0YS8xMDUzMDAwMi50eHQ/Y29vbHNpdGU9eWVzDQorQ29udGVudC1MZW5ndGg6IDANCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KKzwvZGF0YT4KKzxkYXRhMj4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1MZW5ndGg6IDExDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitibGFibGFibGEKKworPC9kYXRhMj4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDcgUmVkaXJlY3Qgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDI5IEp1bCAyMDA4IDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KK0xvY2F0aW9uOiBkYXRhLzEwNTMwMDAyLnR4dD9jb29sc2l0ZT15ZXMNCitDb250ZW50LUxlbmd0aDogMA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LUxlbmd0aDogMTENCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK2JsYWJsYWJsYQorCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFJGQzE4NjctdHlwZSBmb3JtcG9zdGluZyBmcm9tIGZpbGUgd2l0aCBMb2NhdGlvbjogZm9sbG93aW5nCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvMTA1MyAtTCAtRiBuYW1lPWRhbmllbCAtRiB0b29sPWN1cmwgLUYgZmlsZT1AbG9nL3Rlc3QxMDUzLnR4dAorPC9jb21tYW5kPgorIyBXZSBjcmVhdGUgdGhpcyBmaWxlIGJlZm9yZSB0aGUgY29tbWFuZCBpcyBpbnZva2VkIQorPGZpbGUgbmFtZT0ibG9nL3Rlc3QxMDUzLnR4dCI+Citmb28tCitUaGlzIGlzIGEgbW9vLQorYmFyCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteKFVzZXItQWdlbnQ6fENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2Zvcm0tZGF0YTt8LS0tLS0tLS0tLS0tKS4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUE9TVCAvd2Uvd2FudC8xMDUzIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjE4LjIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTguMiBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjQNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDQxMA0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIg0KKw0KK2RhbmllbA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTllZjhkNjIwNTc2Mw0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0idG9vbCINCisNCitjdXJsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIjsgZmlsZW5hbWU9InRlc3QxMDUzLnR4dCINCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCisNCitmb28tCitUaGlzIGlzIGEgbW9vLQorYmFyCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS05ZWY4ZDYyMDU3NjMtLQ0KK1BPU1QgL3dlL3dhbnQvZGF0YS8xMDUzMDAwMi50eHQ/Y29vbHNpdGU9eWVzIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjE4LjIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTguMiBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjQNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDQxMA0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIg0KKw0KK2RhbmllbA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTllZjhkNjIwNTc2Mw0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0idG9vbCINCisNCitjdXJsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIjsgZmlsZW5hbWU9InRlc3QxMDUzLnR4dCINCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCisNCitmb28tCitUaGlzIGlzIGEgbW9vLQorYmFyCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS05ZWY4ZDYyMDU3NjMtLQ0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDU0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGQwMjMyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1NApAQCAtMCwwICsxLDgwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorZm9sbG93bG9jYXRpb24KKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAxIE9LIHN3c2Nsb3NlDQorTG9jYXRpb246IG1vby90ZXN0Y2FzZS8xMDU0MDAwMg0KK0RhdGU6IFRodSwgMzEgSnVsIDIwMDggMTQ6NDk6MDAgR01UDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDMxIEp1bCAyMDA4IDE0OjQ5OjAwIEdNVA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorYm9keQorPC9kYXRhMj4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgT0sgc3dzY2xvc2UNCitMb2NhdGlvbjogbW9vL3Rlc3RjYXNlLzEwNTQwMDAyDQorRGF0ZTogVGh1LCAzMSBKdWwgMjAwOCAxNDo0OTowMCBHTVQNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMzEgSnVsIDIwMDggMTQ6NDk6MDAgR01UDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitib2R5Cis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFBPU1QgZnJvbSBmaWxlIHdpdGggMzAxIHJlZGlyZWN0IGFuZCAtLXBvc3QzMDEKKyA8L25hbWU+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDEwNTQudHh0Ij4KK2ZpZWxkPWRhdGEKKzwvZmlsZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC9ibGFoLzEwNTQgLUwgLWQgQGxvZy90ZXN0MTA1NC50eHQgLS1wb3N0MzAxCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbCBub25ld2xpbmU9InllcyI+CitQT1NUIC9ibGFoLzEwNTQgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDEwDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitmaWVsZD1kYXRhUE9TVCAvYmxhaC9tb28vdGVzdGNhc2UvMTA1NDAwMDIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDEwDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitmaWVsZD1kYXRhCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1NSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwZDQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNTUKQEAgLTAsMCArMSwxMDAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQVVQKK2ZvbGxvd2xvY2F0aW9uCitGVFAKK0VQU1YKK1NUT1IKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzA3IE9LDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0xvY2F0aW9uOiBmdHA6Ly8xMjcuMC4wLjE6ODk5Mi8xMDU1DQorQ29udGVudC1MZW5ndGg6IDANCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgUFVUIExvY2F0aW9uOiByZWRpcmVjdCB0byBGVFAgVVJMCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEwNTUgLUwgLVQgbG9nL3Rlc3QxMDU1LnR4dAorPC9jb21tYW5kPgorIyBUaGUgZGF0YSBzZWN0aW9uIGRvZXNuJ3QgZG8gdmFyaWFibGUgc3Vic3RpdHV0aW9uLCBzbyB3ZSBtdXN0IGFzc2VydCB0aGlzCis8cHJlY2hlY2s+CitwZXJsIC1lICJwcmludCAnVGVzdCByZXF1aXJlcyBkZWZhdWx0IHRlc3Qgc2VydmVyIGhvc3QgYW5kIHBvcnQnIGlmICggJyVIT1NUSVAnIG5lICcxMjcuMC4wLjEnIHx8ICclRlRQUE9SVCcgbmUgJzg5OTInICk7IgorPC9wcmVjaGVjaz4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0MTA1NS50eHQiPgorV2VpcmQKKyAgICAgZmlsZQorICAgICAgICAgdG8KKyAgIHVwbG9hZAorZm9yCisgICB0ZXN0aW5nCit0aGUKKyAgIFBVVAorICAgICAgZmVhdHVyZQorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQVVQgLzEwNTUgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDc4DQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitXZWlyZAorICAgICBmaWxlCisgICAgICAgICB0bworICAgdXBsb2FkCitmb3IKKyAgIHRlc3RpbmcKK3RoZQorICAgUFVUCisgICAgICBmZWF0dXJlCitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NUT1IgMTA1NQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPHVwbG9hZD4KK1dlaXJkCisgICAgIGZpbGUKKyAgICAgICAgIHRvCisgICB1cGxvYWQKK2ZvcgorICAgdGVzdGluZwordGhlCisgICBQVVQKKyAgICAgIGZlYXR1cmUKKzwvdXBsb2FkPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1NiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJiMDEzNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNTYKQEAgLTAsMCArMSw4MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorZm9sbG93bG9jYXRpb24KK0lQdjYKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAyIE9LIHN3c2Nsb3NlDQorTG9jYXRpb246IGh0dHA6Ly9bOjoxJTI1OTk5OV06ODk5NC9tb28vMTA1NjAwMDINCitEYXRlOiBUaHUsIDMxIEp1bCAyMDA4IDE0OjQ5OjAwIEdNVA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorPC9kYXRhPgorPGRhdGEyPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAzMSBKdWwgMjAwOCAxNDo0OTowMCBHTVQNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK2JvZHkKKzwvZGF0YTI+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAyIE9LIHN3c2Nsb3NlDQorTG9jYXRpb246IGh0dHA6Ly9bOjoxJTI1OTk5OV06ODk5NC9tb28vMTA1NjAwMDINCitEYXRlOiBUaHUsIDMxIEp1bCAyMDA4IDE0OjQ5OjAwIEdNVA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAzMSBKdWwgMjAwOCAxNDo0OTowMCBHTVQNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK2JvZHkKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK2lwdjYKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cAoraHR0cC1pcHY2Cis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgZm9sbG93IHJlZGlyZWN0IGZyb20gSVB2NCB0byBJUHY2IHdpdGggc2NvcGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2UvYXJlL2FsbC90d2l0cy8xMDU2IC1MCis8L2NvbW1hbmQ+CisjIFRoZSBkYXRhIHNlY3Rpb24gZG9lc24ndCBkbyB2YXJpYWJsZSBzdWJzdGl0dXRpb24sIHNvIHdlIG11c3QgYXNzZXJ0IHRoaXMKKzxwcmVjaGVjaz4KK3BlcmwgLWUgInByaW50ICdUZXN0IHJlcXVpcmVzIGRlZmF1bHQgdGVzdCBzZXJ2ZXIgaG9zdCBhbmQgcG9ydCcgaWYgKCAnJUhPU1Q2SVAnIG5lICdbOjoxXScgfHwgJyVIVFRQNlBPUlQnIG5lICc4OTk0JyApOyIKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2UvYXJlL2FsbC90d2l0cy8xMDU2IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvbW9vLzEwNTYwMDAyIEhUVFAvMS4xDQorSG9zdDogJUhPU1Q2SVA6JUhUVFA2UE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNTcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZWYyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDU3CkBAIC0wLDAgKzEsNTIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitFUFNWCitSRVRSCitSYW5nZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis0NTY3ODlhYmNkZWYKKzwvZGF0YT4KKzxkYXRhY2hlY2sgbm9uZXdsaW5lPSJ5ZXMiPgorNDU2Nzg5YWJjZGVmCis8L2RhdGFjaGVjaz4KKzxzaXplPgorNjQKKzwvc2l6ZT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCByZXRyaWV2ZSBhIGJ5dGUtcmFuZ2UgcmVsYXRpdmUgdG8gZW5kIG9mIGZpbGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistciAtMTIgZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8xMDU3Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMTA1Nw0KK1JFU1QgNTINCitSRVRSIDEwNTcNCitBQk9SDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDU4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzMxNzc4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1OApAQCAtMCwwICsxLDUzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitDb250ZW50LVJhbmdlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwNiBQYXJ0aWFsIENvbnRlbnQNCitEYXRlOiBUaHUsIDMxIEp1bCAyMDA4IDEzOjQxOjA5IEdNVA0KK0FjY2VwdC1SYW5nZXM6IGJ5dGVzDQorQ29udGVudC1MZW5ndGg6IDEwMQ0KK0NvbnRlbnQtUmFuZ2U6IGJ5dGVzIDEwMC0yMDAvMjAxDQorQ29ubmVjdGlvbjogY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KKw0KKy4ucGFydGlhbCBkYXRhIHJldHVybmVkIGZyb20gdGhlCitzZXJ2ZXIgYXMgYSByZXN1bHQgb2Ygc2V0dGluZyBhbiBleHBsaWNpdCBieXRlIHJhbmdlCitpbiB0aGUgcmVxdWVzdAorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgcmFuZ2UgcmVsYXRpdmUgdG8gZW5kIG9mIGZpbGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2FudC8xMDU4IC1yIC0xMDEKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzEwNTggSFRUUC8xLjENCitSYW5nZTogYnl0ZXM9LTEwMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA1OSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5NmRlNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNTkKQEAgLTAsMCArMSw1OCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIENPTk5FQ1QKK3Byb3h5dHVubmVsCitGVFAKK0ZBSUxVUkUKKzwva2V5d29yZHM+CisKKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgNTAxIE1ldGhvZCBub3QgaW1wbGVtZW50ZWQgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorQ29udGVudC1MZW5ndGg6IDANCisNCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorZnRwCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBDT05ORUNUIHdpdGggcHJveHl0dW5uZWwgdG8gdW5zdXBwb3J0ZWQgRlRQIFVSTAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovL3Rlc3QtbnVtYmVyOjEwNTkvd2FudGVkL3BhZ2UgLXAgLXggJUhPU1RJUDolSFRUUFBPUlQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKyMgVGhlIHNlcnZlciBkb2Vzbid0IGltcGxlbWVudCBDT05ORUNUIGZvciBmdHAsIHNvIHRoaXMgbXVzdCBiZSBhIGZhaWx1cmUgdGVzdAorPGVycm9yY29kZT4KKzU2Cis8L2Vycm9yY29kZT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorQ09OTkVDVCB0ZXN0LW51bWJlcjoxMDU5IEhUVFAvMS4xDQorSG9zdDogdGVzdC1udW1iZXI6MTA1OQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYjlhODEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDYKQEAgLTAsMCArMSw1MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0VQU1YKK1RZUEUgQQorUkVUUgordHlwZT0KKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBHRVQgd2l0aCB0eXBlPUEgc3R5bGUgQVNDSUkgVVJMIHVzaW5nICUyMCBjb2RlcworIDwvbmFtZT4KKyA8Y29tbWFuZD4KKyJmdHA6Ly8lSE9TVElQOiVGVFBQT1JULy9wYXRoJTIwd2l0aCUyMCUyMHNwYWNlcy8vYW5kJTIwdGhpbmdzMi8xMDY7dHlwZT1BIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCAvcGF0aCB3aXRoICBzcGFjZXMNCitDV0QgYW5kIHRoaW5nczINCitFUFNWDQorVFlQRSBBDQorU0laRSAxMDYNCitSRVRSIDEwNg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA2MCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3YTdjYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNjAKQEAgLTAsMCArMSw5MDIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgQ09OTkVDVAorSFRUUCBwcm94eQorcHJveHl0dW5uZWwKK0hUVFAgcHJveHkgRGlnZXN0IGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworIyB0aGlzIGlzIHJldHVybmVkIGZpcnN0IHNpbmNlIHdlIGdldCBubyBwcm94eS1hdXRoCis8ZGF0YT4KK0hUVFAvMS4xIDQwNyBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHRvIHByb3h5IG1lIG15IGRlYXINCitQcm94eS1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0id2VpcmRvcmVhbG0iLCBub25jZT0iMTIzNDUiDQorQ29udGVudC1MZW5ndGg6IDQwMDAwDQorWC10cmEtbG9uZy1oZWFkZXI6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ0KKw0KK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuIGFhYWFhYWFhYWFhYWFhYWEKK2VuZCBvZiAxIEtCIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzwvZGF0YT4KKworIyB0aGlzIGlzIHJldHVybmVkIHdoZW4gd2UgZ2V0IGEgR0VUIQorPGRhdGEyPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDcKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKK2RhbmllbAorPC9kYXRhMj4KKworIyB0aGVuIHRoaXMgaXMgcmV0dXJuZWQgd2hlbiB3ZSBnZXQgcHJveHktYXV0aAorPGRhdGExMDAwPgorSFRUUC8xLjEgMjAwIE9LIHN3c2JvdW5jZQ0KK1NlcnZlcjogbm8KKw0KK05pY2UgcHJveHkgYXV0aCBzaXIhCis8L2RhdGExMDAwPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhcg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ3ZWlyZG9yZWFsbSIsIG5vbmNlPSIxMjM0NSINCitDb250ZW50LUxlbmd0aDogNDAwMDANCitYLXRyYS1sb25nLWhlYWRlcjogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhDQorDQorSFRUUC8xLjEgMjAwIE9LIHN3c2JvdW5jZQ0KK1NlcnZlcjogbm8KKw0KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA3CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCitkYW5pZWwKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2NyeXB0bworPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0hUVFAgcHJveHkgQ09OTkVDVCBhdXRoIERpZ2VzdCwgbGFyZ2UgaGVhZGVycyBhbmQgZGF0YQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly90ZXN0LnJlbW90ZS5oYXh4LnNlOjEwNjAvcGF0aC8xMDYwMDAwMiAtLXByb3h5IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCAtLXByb3h5LXVzZXIgc2lsbHk6cGVyc29uIC0tcHJveHktZGlnZXN0IC0tcHJveHl0dW5uZWwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLy4qCis8L3N0cmlwPgorPHByb3RvY29sPgorQ09OTkVDVCB0ZXN0LnJlbW90ZS5oYXh4LnNlOjEwNjAgSFRUUC8xLjENCitIb3N0OiB0ZXN0LnJlbW90ZS5oYXh4LnNlOjEwNjANCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorQ09OTkVDVCB0ZXN0LnJlbW90ZS5oYXh4LnNlOjEwNjAgSFRUUC8xLjENCitIb3N0OiB0ZXN0LnJlbW90ZS5oYXh4LnNlOjEwNjANCitQcm94eS1BdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9InNpbGx5IiwgcmVhbG09IndlaXJkb3JlYWxtIiwgbm9uY2U9IjEyMzQ1IiwgdXJpPSJ0ZXN0LnJlbW90ZS5oYXh4LnNlOjEwNjAiLCByZXNwb25zZT0iNzllMzk0ZmZjZDQyYjZjNzcxYzc1ODJkYTFmYzQ0OTgiDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0dFVCAvcGF0aC8xMDYwMDAwMiBIVFRQLzEuMQ0KK0hvc3Q6IHRlc3QucmVtb3RlLmhheHguc2U6MTA2MA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNjEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYjhjNTEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDYxCkBAIC0wLDAgKzEsOTA3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIENPTk5FQ1QKK0hUVFAgcHJveHkKK2NodW5rZWQgVHJhbnNmZXItRW5jb2RpbmcKK3Byb3h5dHVubmVsCitIVFRQIHByb3h5IERpZ2VzdCBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisKKyMgdGhpcyBpcyByZXR1cm5lZCBmaXJzdCBzaW5jZSB3ZSBnZXQgbm8gcHJveHktYXV0aAorPGRhdGE+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09IndlaXJkb3JlYWxtIiwgbm9uY2U9IjEyMzQ1Ig0KK1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkDQorWC10cmEtbG9uZy1oZWFkZXI6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ0KKw0KKzljNDANCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLiBhYWFhYWFhYWFhYWFhYWFhCitlbmQgb2YgMSBLQiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisNCiswDQorDQorPC9kYXRhPgorCisjIHRoaXMgaXMgcmV0dXJuZWQgd2hlbiB3ZSBnZXQgYSBHRVQhCis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogNworQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworZGFuaWVsCis8L2RhdGEyPgorCisjIHRoZW4gdGhpcyBpcyByZXR1cm5lZCB3aGVuIHdlIGdldCBwcm94eS1hdXRoCis8ZGF0YTEwMDA+CitIVFRQLzEuMSAyMDAgT0sgc3dzYm91bmNlDQorU2VydmVyOiBubworDQorTmljZSBwcm94eSBhdXRoIHNpciEKKzwvZGF0YTEwMDA+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09IndlaXJkb3JlYWxtIiwgbm9uY2U9IjEyMzQ1Ig0KK1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkDQorWC10cmEtbG9uZy1oZWFkZXI6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ0KKw0KK0hUVFAvMS4xIDIwMCBPSyBzd3Nib3VuY2UNCitTZXJ2ZXI6IG5vCisNCitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogNworQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworZGFuaWVsCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitjcnlwdG8KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIHByb3h5IENPTk5FQ1QgYXV0aCBEaWdlc3QsIGxhcmdlIGhlYWRlcnMgYW5kIGNodW5rZWQgZGF0YQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly90ZXN0LnJlbW90ZS5oYXh4LnNlOjEwNjEvcGF0aC8xMDYxMDAwMiAtLXByb3h5IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCAtLXByb3h5LXVzZXIgc2lsbHk6cGVyc29uIC0tcHJveHktZGlnZXN0IC0tcHJveHl0dW5uZWwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLy4qCis8L3N0cmlwPgorPHByb3RvY29sPgorQ09OTkVDVCB0ZXN0LnJlbW90ZS5oYXh4LnNlOjEwNjEgSFRUUC8xLjENCitIb3N0OiB0ZXN0LnJlbW90ZS5oYXh4LnNlOjEwNjENCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorQ09OTkVDVCB0ZXN0LnJlbW90ZS5oYXh4LnNlOjEwNjEgSFRUUC8xLjENCitIb3N0OiB0ZXN0LnJlbW90ZS5oYXh4LnNlOjEwNjENCitQcm94eS1BdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9InNpbGx5IiwgcmVhbG09IndlaXJkb3JlYWxtIiwgbm9uY2U9IjEyMzQ1IiwgdXJpPSJ0ZXN0LnJlbW90ZS5oYXh4LnNlOjEwNjEiLCByZXNwb25zZT0iOGU5NmFjZjZhNjIxNDAxMjE4Mzg3OWUyOGU3M2IyZDMiDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0dFVCAvcGF0aC8xMDYxMDAwMiBIVFRQLzEuMQ0KK0hvc3Q6IHRlc3QucmVtb3RlLmhheHguc2U6MTA2MQ0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNjIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NjY4NmUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDYyCkBAIC0wLDAgKzEsNDkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitSRVRSCitodWdlIHJlc3BvbnNlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK21vb28KKzwvZGF0YT4KKyMgYSBsb25nIHNldCBvZiByZXNwb25zZSBzdHJpbmdzIHRvIENXRCB0byBtYWtlIHN1cmUgdGhlIGZ0cCBwYXJzZXIgZGVhbHMKKyMgd2l0aCBpdCBuaWNlbHkKKzxzZXJ2ZXJjbWQ+CitSRVBMWSBDV0QgMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFcclxuMjUwLUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVxyXG4yNTAtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXHJcbjI1MC1BIEV4YWN0bHkgZmlsbCBjdXJsJ3MgYnVmZmVyXHJcbjI1MCBGaW5hbGx5LCBoZXJlIGlzIHRoZSByZXNwb25zZSwgYm91bmRhcnkgY29uZGl0aW9uCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCB3aXRoIGV4Y2Vzc2l2ZWx5IGxvbmcgc2VydmVyIGNvbW1hbmQgcmVzcG9uc2UgbGluZXMsIGJvdW5kYXJ5IGNvbmRpdGlvbgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvcGF0aC8xMDYyCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIHBhdGgNCitFUFNWDQorVFlQRSBJDQorU0laRSAxMDYyDQorUkVUUiAxMDYyDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDYzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA2MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzA3ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA2MwpAQCAtMCwwICsxLDQ3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZJTEUKK1JhbmdlCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitmaWxlCitsYXJnZV9maWxlCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSW52YWxpZCBsYXJnZSBYLSByYW5nZSBvbiBhIGZpbGU6Ly8KKyA8L25hbWU+CisjIFRoaXMgcmFuZ2UgdmFsdWUgaXMgMioqMzIrNywgd2hpY2ggd2lsbCBiZSB0cnVuY2F0ZWQgdG8gdGhlIHZhbGlkIHZhbHVlIDcKKyMgaWYgdGhlIGxhcmdlIGZpbGUgc3VwcG9ydCBpcyBub3Qgd29ya2luZyBjb3JyZWN0bHkKKyA8Y29tbWFuZD4KKy1yIDQyOTQ5NjczMDMtIGZpbGU6Ly9sb2NhbGhvc3QvJVBXRC9sb2cvdGVzdDEwNjMudHh0IAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3QxMDYzLnR4dCI+CisxMjM0NTY3ODkwCisxMjM0NTY3ODkwCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMzYKKzwvZXJyb3Jjb2RlPgorPHN0ZG91dD4KKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA2NCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQwNWRkZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNjQKQEAgLTAsMCArMSw3OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBVVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBBIE9LDQorU2VydmVyOiBjdXJsIHRlc3QNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMNCisNCitvaworPC9kYXRhPgorPGRhdGEyIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgQSBPSw0KK1NlcnZlcjogY3VybCB0ZXN0DQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiA5DQorDQorc3RpbGwgb2sKKzwvZGF0YTI+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorIyAKKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgUFVUIHR3aWNlCisgPC9uYW1lPgorIDxjb21tYW5kPgorLUggIkV4cGVjdDoiIC1UIGxvZy8xMDY0IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDY0LnVwbG9hZDEgLVQgbG9nLzEwNjQgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEwNjQwMDAyLnVwbG9hZDIKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy8xMDY0Ij4KK3Rlc3QKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUFVUIC8xMDY0LnVwbG9hZDEgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDUNCisNCit0ZXN0CitQVVQgLzEwNjQwMDAyLnVwbG9hZDIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDUNCisNCit0ZXN0Cis8L3Byb3RvY29sPgorPHN0ZG91dD4KK0hUVFAvMS4xIDIwMCBBIE9LDQorU2VydmVyOiBjdXJsIHRlc3QNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMNCisNCitvaworSFRUUC8xLjEgMjAwIEEgT0sNCitTZXJ2ZXI6IGN1cmwgdGVzdA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogOQ0KKw0KK3N0aWxsIG9rCis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNjUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDY1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ODhmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDY1CkBAIC0wLDAgKzEsNzggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQVVQKK0hUVFAgR0VUCis8L2tleXdvcmRzPgorPC9pbmZvPgorCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgMjAwIEEgT0sNCitTZXJ2ZXI6IGN1cmwgdGVzdA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMw0KKw0KK29rCis8L2RhdGE+Cis8ZGF0YTIgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBBIE9LDQorU2VydmVyOiBjdXJsIHRlc3QNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDkNCisNCitzdGlsbCBvaworPC9kYXRhMj4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+CisjIAorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQVVQgd2l0aCBvbmUgZmlsZSBidXQgdHdvIFVSTHMKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistSCAiRXhwZWN0OiIgLVQgbG9nLzEwNjUgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEwNjUudXBsb2FkMSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTA2NTAwMDIudXJsMgorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nLzEwNjUiPgordGVzdAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQVVQgLzEwNjUudXBsb2FkMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogNQ0KKw0KK3Rlc3QKK0dFVCAvMTA2NTAwMDIudXJsMiBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPHN0ZG91dD4KK0hUVFAvMS4xIDIwMCBBIE9LDQorU2VydmVyOiBjdXJsIHRlc3QNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMNCisNCitvaworSFRUUC8xLjEgMjAwIEEgT0sNCitTZXJ2ZXI6IGN1cmwgdGVzdA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogOQ0KKw0KK3N0aWxsIG9rCis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNjYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDY2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhY2VkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDY2CkBAIC0wLDAgKzEsODIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sNCitTZXJ2ZXI6IHRoZWJlc3QvMS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorQ29udGVudC1MZW5ndGg6IDYNCisNCitmaXJzdAorPC9kYXRhPgorPGRhdGExIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sNCitTZXJ2ZXI6IHRoZWJlc3QvMS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorQ29udGVudC1MZW5ndGg6IDcNCisNCitzZWNvbmQKKzwvZGF0YTE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCAtLWR1bXAtaGVhZGVyIC0gd2l0aCB0d28gVVJMcworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzEwNjYgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvMTA2NjAwMDEgLS1kdW1wLWhlYWRlciAtCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2FudC8xMDY2IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvd2FudC8xMDY2MDAwMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPHN0ZG91dD4KK0hUVFAvMS4xIDIwMCBPSw0KK0hUVFAvMS4xIDIwMCBPSw0KK1NlcnZlcjogdGhlYmVzdC8xLjANCitTZXJ2ZXI6IHRoZWJlc3QvMS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorQ29udGVudC1MZW5ndGg6IDYNCitDb250ZW50LUxlbmd0aDogNg0KKw0KKw0KK2ZpcnN0CitIVFRQLzEuMSAyMDAgT0sNCitIVFRQLzEuMSAyMDAgT0sNCitTZXJ2ZXI6IHRoZWJlc3QvMS4wDQorU2VydmVyOiB0aGViZXN0LzEuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KK0NvbnRlbnQtTGVuZ3RoOiA3DQorQ29udGVudC1MZW5ndGg6IDcNCisNCisNCitzZWNvbmQKKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA2NyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZjN2E2ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNjcKQEAgLTAsMCArMSw3OCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorZm9sbG93bG9jYXRpb24KKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMSBUaGlzIGlzIGEgd2VpcmRvIHRleHQgbWVzc2FnZSBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTG9jYXRpb246IGRhdGEvMTA2NzAwMDIudHh0P2Nvb2xzaXRlPXllcworQ29ubmVjdGlvbjogY2xvc2UKKworVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBzaW1wbGUgTG9jYXRpb246IGZvbGxvd2luZworCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgRm9sbG93ZWQgaGVyZSBmaW5lIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNTIKKworSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKworPC9kYXRhMj4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2Ugc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiBkYXRhLzEwNjcwMDAyLnR4dD9jb29sc2l0ZT15ZXMKK0Nvbm5lY3Rpb246IGNsb3NlCisKK0hUVFAvMS4xIDIwMCBGb2xsb3dlZCBoZXJlIGZpbmUgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA1MgorCitJZiB0aGlzIGlzIHJlY2VpdmVkLCB0aGUgbG9jYXRpb24gZm9sbG93aW5nIHdvcmtlZAorCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIExvY2F0aW9uOiBmb2xsb3dpbmcgd2l0aCBhdXRvLXJlZmVyZXIKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2FudC8xMDY3IC1MIC0tcmVmZXJlciAiZmlyc3RvbmUuaHRtbDthdXRvIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dhbnQvMTA2NyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitSZWZlcmVyOiBmaXJzdG9uZS5odG1sDQorDQorR0VUIC93YW50L2RhdGEvMTA2NzAwMDIudHh0P2Nvb2xzaXRlPXllcyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitSZWZlcmVyOiBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2FudC8xMDY3DQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNjggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMjZkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDY4CkBAIC0wLDAgKzEsNTcgQEAKKzx0ZXN0Y2FzZT4KKyMgU2ltaWxhciB0byB0ZXN0IDYwCis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUFVUCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4wIDIwMCBPSyBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorDQorYmxhYmxhYmxhCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8bmFtZT4KK0hUVFAgUFVUIGZyb20gc3RkaW4KKzwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC9ienovMTA2OCAtVCAtCis8L2NvbW1hbmQ+Cis8c3RkaW4+Cittb3JlIHRoYW4gb25lIGJ5dGUKKzwvc3RkaW4+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BVVCAvYnp6LzEwNjggSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQNCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KKw0KKzEzDQorbW9yZSB0aGFuIG9uZSBieXRlCisNCiswDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNjkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDY5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0N2MzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDY5CkBAIC0wLDAgKzEsMzYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQVVQKK0hUVFAvMS4wCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPG5hbWU+CitIVFRQIDEuMCBQVVQgZnJvbSBzdGRpbiB3aXRoIG5vIGNvbnRlbnQgbGVuZ3RoCis8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvYnp6LzEwNjkgLVQgLSAtMAorPC9jb21tYW5kPgorPHN0ZGluPgordGhpcyBkYXRhIGNhbid0IGJlIHNlbnQKKzwvc3RkaW4+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMjUKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YjY0NTIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDcKQEAgLTAsMCArMSw1MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0VQU1YKK1NUT1IKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBQQVNWIHVwbG9hZCBmaWxlCisgPC9uYW1lPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3QxMDcudHh0Ij4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KKzwvZmlsZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTA3IC1UIGxvZy90ZXN0MTA3LnR4dAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHVwbG9hZD4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KKzwvdXBsb2FkPgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitTVE9SIDEwNw0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA3MCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIwMmE5YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNzAKQEAgLTAsMCArMSw2NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBPU1QKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDQwMyBHbyBhd2F5IGFuZCBzd3NjbG9zZQ0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sDQorQ29udGVudC1MZW5ndGg6IDU1DQorQ29ubmVjdGlvbjogY2xvc2UNCisNCit5b3UgYXJlIG5vdCBzdXBwb3NlZCB0byBiZSBhbGxvd2VkIHRvIHNlbmQgdGhpbmdzIGhlcmUKKzwvZGF0YT4KKzxzZXJ2ZXJjbWQ+Citza2lwOiAyMzAwCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFBPU1Qgd2l0aCBzZXJ2ZXIgY2xvc2luZyBjb25uZWN0aW9uIGJlZm9yZSAoYWxsKSBkYXRhIGlzIHJlY2VpdmVkCisgPC9uYW1lPgorIDxjb21tYW5kPgorIC1kIEBsb2cvaW5wdXQxMDcwIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDcwCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvaW5wdXQxMDcwIj4KK1RoaXMgY3JlYXRlcyB0aGUgbmFtZWQgZmlsZSB3aXRoIHRoaXMgY29udGVudCBiZWZvcmUgdGhlIHRlc3QgY2FzZSBpcyBydW4sCit3aGljaCBpcyB1c2VmdWwgaWYgdGhlIHRlc3QgY2FzZSBuZWVkcyBhIGZpbGUgdG8gYWN0IG9uLiBXZSBjcmVhdGUgdGhpcyBmaWxlCityYXRoZXIgbGFyZ2UgKGxhcmdlciB0aGFuIHlvdXIgdHlwaWNhbCBUQ1AgcGFja2V0KSBzbyB0aGF0IG5vdCBhbGwgb2YgaXQgY2FuIG5vcgord2lsbCBiZSBzZW50IGluIG9uZSBnbyBhcyB0aGF0IGlzIGtpbmQgb2YgdGhlIHBvaW50IG9mIHRoaXMgdGVzdCEKKworSGVyZSdzIDIwMDAgeCAnTyc6CitPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTworPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2wgbm9uZXdsaW5lPSJ5ZXMiPgorUE9TVCAvMTA3MCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMjMxMw0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitUaGlzIGNyZWF0ZXMgCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA3MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4NDU3YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNzEKQEAgLTAsMCArMSwxMTMgQEAKKzx0ZXN0Y2FzZT4KKyMgQXV0aG9yaXphdGlvbiBpcyB1c2VkIHRvIGZvcmNlIGN1cmwgdG8gcmVhbGl6ZSB0aGF0IHRoZSBzZXJ2ZXIgaXMKKyMgc3BlYWtpbmcgSFRUUCAxLjAuIFRoZSByZXF1ZXN0IG11c3QgYmUgcmVzZW50IHdpdGggdGhlIGNvcnJlY3QKKyMgYXV0aG9yaXphdGlvbiBoZWFkZXIsIGJ1dCB1c2luZyBIVFRQIDEuMCwgbm90IDEuMS4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQVVQKK0hUVFAgRGlnZXN0IGF1dGgKKy0tYW55YXV0aAorSFRUUC8xLjAKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjAgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IHRlc3RjdXJsDQorV1dXLUF1dGhlbnRpY2F0ZTogQmxhY2ttYWdpYyByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiLCBub25jZT0iMTEyMjMzNDQiDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorQ29udGVudC1MZW5ndGg6IDM1DQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitUcnkgYWdhaW4gb24gdGhpcyBIVFRQIDEuMCBzZXJ2ZXIhCis8L2RhdGE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyBhCisjIEF1dGhvcml6YXRpb246IERpZ2VzdCBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMD4KK0hUVFAvMS4wIDIwMCBPSyBzd3NjbG9zZQ0KK1NlcnZlcjogdGVzdGN1cmwNCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCitDb250ZW50LUxlbmd0aDogMjMNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK1RoaXMgSVMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YTEwMDA+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMCA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogdGVzdGN1cmwNCitXV1ctQXV0aGVudGljYXRlOiBCbGFja21hZ2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyIsIG5vbmNlPSIxMTIyMzM0NCINCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCitDb250ZW50LUxlbmd0aDogMzUNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK0hUVFAvMS4wIDIwMCBPSyBzd3NjbG9zZQ0KK1NlcnZlcjogdGVzdGN1cmwNCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCitDb250ZW50LUxlbmd0aDogMjMNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK1RoaXMgSVMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorY3J5cHRvCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorRG93bmdyYWRlZCBIVFRQIFBVVCB0byBIVFRQIDEuMCB3aXRoIGF1dGhvcml6YXRpb24KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTA3MSAtVCBsb2cvcHV0MTA3MSAtdSB0ZXN0dXNlcjp0ZXN0cGFzcyAtLWFueWF1dGgKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9wdXQxMDcxIj4KK1RoaXMgaXMgZGF0YSB3ZSB1cGxvYWQgd2l0aCBQVVQKK2Egc2Vjb25kIGxpbmUKK2xpbmUgdGhyZWUKK2ZvdXIgaXMgdGhlIG51bWJlciBvZiBsaW5lcworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQVVQgLzEwNzEgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDg1DQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitUaGlzIGlzIGRhdGEgd2UgdXBsb2FkIHdpdGggUFVUCithIHNlY29uZCBsaW5lCitsaW5lIHRocmVlCitmb3VyIGlzIHRoZSBudW1iZXIgb2YgbGluZXMKK1BVVCAvMTA3MSBIVFRQLzEuMA0KK0F1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0idGVzdHVzZXIiLCByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIiwgbm9uY2U9IjExMjIzMzQ0IiwgdXJpPSIvMTA3MSIsIHJlc3BvbnNlPSJkZjRjZWY2YjUyYTMwZTY1ZDQ3MmRkODQ4ZDIwNTVhMSINCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDg1DQorDQorVGhpcyBpcyBkYXRhIHdlIHVwbG9hZCB3aXRoIFBVVAorYSBzZWNvbmQgbGluZQorbGluZSB0aHJlZQorZm91ciBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA3MiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiNmQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNzIKQEAgLTAsMCArMSw3OCBAQAorPHRlc3RjYXNlPgorIyBBdXRob3JpemF0aW9uIGlzIHVzZWQgdG8gZm9yY2UgY3VybCB0byByZWFsaXplIHRoYXQgdGhlIHNlcnZlciBpcworIyBzcGVha2luZyBIVFRQIDEuMC4gVGhlIHJlcXVlc3QgaXMgaW1wb3NzaWJsZSB0byBzYXRpc2Z5IHdpdGggSFRUUCAxLjAKKyMgYmVjYXVzZSBjaHVua2VkIGVuY29kaW5nIGlzIHVuYXZhaWxhYmxlLCBzbyB0aGUgcmVxdWVzdCBtdXN0IGZhaWwuCis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUFVUCitIVFRQIERpZ2VzdCBhdXRoCistLWFueWF1dGgKK0hUVFAvMS4wCitjaHVua2VkIFRyYW5zZmVyLUVuY29kaW5nCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4wIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorU2VydmVyOiB0ZXN0Y3VybA0KK1dXVy1BdXRoZW50aWNhdGU6IEJsYWNrbWFnaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIiwgbm9uY2U9IjExMjIzMzQ0Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorY3J5cHRvCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCBjaHVua2VkIFBVVCB0byBIVFRQIDEuMCBzZXJ2ZXIgd2l0aCBhdXRob3JpemF0aW9uCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEwNzIgLVQgLSAtdSB0ZXN0dXNlcjp0ZXN0cGFzcyAtLWFueWF1dGgKKzwvY29tbWFuZD4KKzxzdGRpbj4KK1RoaXMgaXMgZGF0YSB3ZSB1cGxvYWQgd2l0aCBQVVQKK2l0IGNvbWVzIGZyb20gc3RkaW4gc28gTVVTVCBiZSBzZW50Cit3aXRoIGNodW5rZWQgZW5jb2RpbmcKK3doaWNoIGlzIGltcG9zc2libGUgaW4gSFRUUC8xLjAKKzwvc3RkaW4+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMjUKKzwvZXJyb3Jjb2RlPgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQVVQgLzEwNzIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQNCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KKw0KKzdhDQorVGhpcyBpcyBkYXRhIHdlIHVwbG9hZCB3aXRoIFBVVAoraXQgY29tZXMgZnJvbSBzdGRpbiBzbyBNVVNUIGJlIHNlbnQKK3dpdGggY2h1bmtlZCBlbmNvZGluZword2hpY2ggaXMgaW1wb3NzaWJsZSBpbiBIVFRQLzEuMAorDQorMA0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDczIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA3MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODFmOTA5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA3MwpAQCAtMCwwICsxLDcyIEBACis8dGVzdGNhc2U+CisjIFJlZGlyZWN0aW9uIGlzIHVzZWQgdG8gZm9yY2UgY3VybCB0byByZWFsaXplIHRoYXQgdGhlIHNlcnZlciBpcworIyBzcGVha2luZyBIVFRQIDEuMC4gVGhlIHJlcXVlc3QgaXMgaW1wb3NzaWJsZSB0byBzYXRpc2Z5IHdpdGggSFRUUCAxLjAKKyMgYmVjYXVzZSBjaHVua2VkIGVuY29kaW5nIGlzIHVuYXZhaWxhYmxlLCBzbyB0aGUgcmVxdWVzdCBtdXN0IGZhaWwuCis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUFVUCitIVFRQLzEuMAorZm9sbG93bG9jYXRpb24KK2NodW5rZWQgVHJhbnNmZXItRW5jb2RpbmcKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjAgMzAxIFJlZGlyZWN0IHN3c2Nsb3NlDQorU2VydmVyOiB0ZXN0Y3VybA0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KK0xvY2F0aW9uOiAvbmV3bG9jYXRpb24vMTA3MzAwMDINCitDb250ZW50LUxlbmd0aDogMA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgY2h1bmtlZCBQVVQgdG8gSFRUUCAxLjAgc2VydmVyIHdpdGggcmVkaXJlY3QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTA3MyAtVCAtIC1MCis8L2NvbW1hbmQ+Cis8c3RkaW4+CitUaGlzIGlzIGRhdGEgd2UgdXBsb2FkIHdpdGggUFVUCitpdCBjb21lcyBmcm9tIHN0ZGluIHNvIE1VU1QgYmUgc2VudAord2l0aCBjaHVua2VkIGVuY29kaW5nCit3aGljaCBpcyBpbXBvc3NpYmxlIGluIEhUVFAvMS4wCis8L3N0ZGluPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzI1Cis8L2Vycm9yY29kZT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUFVUIC8xMDczIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCis3YQ0KK1RoaXMgaXMgZGF0YSB3ZSB1cGxvYWQgd2l0aCBQVVQKK2l0IGNvbWVzIGZyb20gc3RkaW4gc28gTVVTVCBiZSBzZW50Cit3aXRoIGNodW5rZWQgZW5jb2RpbmcKK3doaWNoIGlzIGltcG9zc2libGUgaW4gSFRUUC8xLjAKKw0KKzANCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA3NCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2NGI0MQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNzQKQEAgLTAsMCArMSw3NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUC8xLjAKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMCAyMDAgT0sNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK0NvbnRlbnQtTGVuZ3RoOiA5DQorQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK3N1cnByaXNlCis8L2RhdGE+Cis8ZGF0YTE+CitIVFRQLzEuMCAyMDAgT0sgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorc3VycHJpc2UyCis8L2RhdGExPgorCis8cG9zdGNtZD4KK3dhaXQgMQorPC9wb3N0Y21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgZG93bmdyYWRlIHRvIEhUVFAvMS4wIG9uIHNlY29uZCByZXF1ZXN0CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvMTA3NCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2FudG1vcmUvMTA3NDAwMDEKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdGRvdXQ+CitIVFRQLzEuMCAyMDAgT0sNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK0NvbnRlbnQtTGVuZ3RoOiA5DQorQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK3N1cnByaXNlCitIVFRQLzEuMCAyMDAgT0sgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorc3VycHJpc2UyCis8L3N0ZG91dD4KKworPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dhbnQvMTA3NCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgL3dhbnRtb3JlLzEwNzQwMDAxIEhUVFAvMS4wDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDc1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA3NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjhmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA3NQpAQCAtMCwwICsxLDk0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUFVUCitIVFRQIEJhc2ljIGF1dGgKKy0tYW55YXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBUaGUgdGVzdCBzZXJ2ZXIgcHJvdmlkZXMgbm8gd2F5IHRvIHJlc3BvbmQgZGlmZmVyZW50bHkgdG8gYSBzdWJzZXF1ZW50CisjIEJhc2ljIGF1dGhlbnRpY2F0ZWQgcmVxdWVzdCAod2UgcmVhbGx5IHdhbnQgdG8gcmVzcG9uZCB3aXRoIDIwMCBmb3IKKyMgdGhlIHNlY29uZCksIHNvIGp1c3QgcmVzcG9uZCB3aXRoIDQwMSBmb3IgYm90aCBhbmQgbGV0IGN1cmwgZGVhbCB3aXRoIGl0LgorPGRhdGE+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZA0KK1NlcnZlcjogdGVzdGN1cmwNCitXV1ctQXV0aGVudGljYXRlOiBCbGFja21hZ2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitXV1ctQXV0aGVudGljYXRlOiBYLWJvZ3VzLWF1dGggcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCitDb250ZW50LUxlbmd0aDogMA0KKw0KKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZA0KK1NlcnZlcjogdGVzdGN1cmwNCitXV1ctQXV0aGVudGljYXRlOiBCbGFja21hZ2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitXV1ctQXV0aGVudGljYXRlOiBYLWJvZ3VzLWF1dGggcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCitDb250ZW50LUxlbmd0aDogMA0KKw0KK0hUVFAvMS4xIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkDQorU2VydmVyOiB0ZXN0Y3VybA0KK1dXVy1BdXRoZW50aWNhdGU6IEJsYWNrbWFnaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK1dXVy1BdXRoZW50aWNhdGU6IFgtYm9ndXMtYXV0aCByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorDQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQVVQgd2l0aCAtLWFueWF1dGggYXV0aG9yaXphdGlvbiAocGlja2luZyBCYXNpYykKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTA3NSAtVCBsb2cvcHV0MTA3NSAtdSB0ZXN0dXNlcjp0ZXN0cGFzcyAtLWFueWF1dGgKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9wdXQxMDc1Ij4KK1RoaXMgaXMgZGF0YSB3ZSB1cGxvYWQgd2l0aCBQVVQKK2Egc2Vjb25kIGxpbmUKK2xpbmUgdGhyZWUKK2ZvdXIgaXMgdGhlIG51bWJlciBvZiBsaW5lcworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQVVQgLzEwNzUgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDg1DQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitUaGlzIGlzIGRhdGEgd2UgdXBsb2FkIHdpdGggUFVUCithIHNlY29uZCBsaW5lCitsaW5lIHRocmVlCitmb3VyIGlzIHRoZSBudW1iZXIgb2YgbGluZXMKK1BVVCAvMTA3NSBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IEJhc2ljIGRHVnpkSFZ6WlhJNmRHVnpkSEJoYzNNPQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogODUNCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KKw0KK1RoaXMgaXMgZGF0YSB3ZSB1cGxvYWQgd2l0aCBQVVQKK2Egc2Vjb25kIGxpbmUKK2xpbmUgdGhyZWUKK2ZvdXIgaXMgdGhlIG51bWJlciBvZiBsaW5lcworPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNzYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDc2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDc5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDc2CkBAIC0wLDAgKzEsNzkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCitmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAyIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogbW9vLmh0bWwmdGVzdGNhc2U9LzEwNzYwMDAyCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworPC9kYXRhPgorPGRhdGEyPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogdGhpcyBzaG91bGQgYmUgaWdub3JlZAorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0Nvbm5lY3Rpb246IGNsb3NlCisKK2JvZHkKKzwvZGF0YTI+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAyIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogbW9vLmh0bWwmdGVzdGNhc2U9LzEwNzYwMDAyCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogdGhpcyBzaG91bGQgYmUgaWdub3JlZAorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0Nvbm5lY3Rpb246IGNsb3NlCisKK2JvZHkKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgUE9TVCB3aXRoIDMwMiByZWRpcmVjdCBhbmQgLS1wb3N0MzAyCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL2JsYWgvMTA3NiAtTCAtZCAibW9vIiAtLXBvc3QzMDIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sIG5vbmV3bGluZT0ieWVzIj4KK1BPU1QgL2JsYWgvMTA3NiBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMw0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorbW9vUE9TVCAvYmxhaC9tb28uaHRtbCZ0ZXN0Y2FzZT0vMTA3NjAwMDIgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTAgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAgT3BlblNTTC8wLjkuNmMgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAzDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCittb28KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDc3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA3NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2M5MDI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA3NwpAQCAtMCwwICsxLDc1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorSFRUUAorSFRUUC8xLjAKK0hUVFAgR0VUCitIVFRQIHByb3h5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4wIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorQ29udGVudC1MZW5ndGg6IDkNCitGdW5ueS1oZWFkOiB5ZXN5ZXMNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorY29udGVudHMKKzwvZGF0YT4KKzxkYXRhMj4KK0hUVFAvMS4wIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorQ29udGVudC1MZW5ndGg6IDkNCitGdW5ueS1oZWFkOiB5ZXN5ZXMNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorY29udGVudHMKKzwvZGF0YTI+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorZnRwCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorRlRQIG92ZXIgSFRUUCBwcm94eSB3aXRoIGRvd25ncmFkZSB0byBIVFRQIDEuMAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy14ICVIT1NUSVA6JUhUVFBQT1JUIGZ0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvdGhhdC9wYWdlLzEwNzcgZnRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC90aGF0L3BhZ2UvMTA3NzAwMDIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGZ0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvdGhhdC9wYWdlLzEwNzcgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0dFVCBmdHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50L3RoYXQvcGFnZS8xMDc3MDAwMiBIVFRQLzEuMA0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNzggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDc4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhY2RmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDc4CkBAIC0wLDAgKzEsODkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUC8xLjAKK0hUVFAgR0VUCitIVFRQIENPTk5FQ1QKK0hUVFAgcHJveHkKK3Byb3h5dHVubmVsCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjAgMjAwIE9LDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0Z1bm55LWhlYWQ6IHllc3llcw0KK0NvbnRlbnQtTGVuZ3RoOiA5DQorQ29ubmVjdGlvbjoga2VlcC1hbGl2ZQ0KKw0KK2NvbnRlbnRzCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKK2h0dHAtcHJveHkKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCAxLjAgQ09OTkVDVCB3aXRoIHByb3h5dHVubmVsIGFuZCBkb3duZ3JhZGUgR0VUIHRvIEhUVFAvMS4wCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1wcm94eTEuMCAlSE9TVElQOiVQUk9YWVBPUlQgLXAgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvdGhhdC9wYWdlLzEwNzggaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvdGhhdC9wYWdlLzEwNzgKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3h5PgorQ09OTkVDVCAlSE9TVElQOiVIVFRQUE9SVCBIVFRQLzEuMA0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJveHk+Cis8cHJvdG9jb2w+CitHRVQgL3dlL3dhbnQvdGhhdC9wYWdlLzEwNzggSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC93ZS93YW50L3RoYXQvcGFnZS8xMDc4IEhUVFAvMS4wDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8c3Rkb3V0PgorSFRUUC8xLjEgMjAwIE1pZ2h0eSBmaW5lIGluZGVlZA0KKw0KK0hUVFAvMS4wIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwNCitGdW5ueS1oZWFkOiB5ZXN5ZXMNCitDb250ZW50LUxlbmd0aDogOQ0KK0Nvbm5lY3Rpb246IGtlZXAtYWxpdmUNCisNCitjb250ZW50cworSFRUUC8xLjAgMjAwIE9LDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0Z1bm55LWhlYWQ6IHllc3llcw0KK0NvbnRlbnQtTGVuZ3RoOiA5DQorQ29ubmVjdGlvbjoga2VlcC1hbGl2ZQ0KKw0KK2NvbnRlbnRzCis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwNzkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDc5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxODhlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDc5CkBAIC0wLDAgKzEsNzUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgRGlnZXN0IGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NSINCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyNg0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UKKzwvZGF0YT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIGEKKyMgQXV0aG9yaXphdGlvbjogRGlnZXN0IGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorIyBTZW5kIG5vdGhpbmcgdG8gZm9yY2UgYW4gZXJyb3IgY29kZSA1MiByZXBseQorPGRhdGExMDAwPgorPC9kYXRhMTAwMD4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0idGVzdHJlYWxtIiwgbm9uY2U9IjEwNTM2MDQxNDUiDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjYNCisNCis8L2RhdGFjaGVjaz4KKworPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2NyeXB0bworPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0hUVFAgcmV0cnkgYWZ0ZXIgY2xvc2VkIGNvbm5lY3Rpb24gYW5kIGVtcHR5IHJlc3BvbnNlCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEwNzkgLXUgdGVzdHVzZXI6dGVzdHBhc3MgLS1kaWdlc3QKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis1MgorPC9lcnJvcmNvZGU+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTA3OSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzEwNzkgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9InRlc3R1c2VyIiwgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ1IiwgdXJpPSIvMTA3OSIsIHJlc3BvbnNlPSJlMzQwYzdjZGNhMDk1MDQ2MjA3MGY0NmVlMTM5ZTlmNyINCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwOCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjJlYTYzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA4CkBAIC0wLDAgKzEsNTYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQT1JUCitTVE9SCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgUE9SVCB1cGxvYWQgd2l0aCBDV0QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL0NXRC9TVE9SL1JFVFIvMTA4IC1UIGxvZy91cGxvYWQxMDggLVAgLQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3VwbG9hZDEwOCI+CitNb29vb29vb29vb29vCisgdXBsb2FkIHRoaXMKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKyMgU3RyaXAgYWxsIHZhbGlkIGtpbmRzIG9mIFBPUlQgYW5kIEVQUlQgdGhhdCBjdXJsIGNhbiBzZW5kCis8c3RyaXA+CiteUE9SVCBcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfQorXkVQUlQgXHwxXHxcZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XHxcZHsxLDV9XHwKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIENXRA0KK0NXRCBTVE9SDQorQ1dEIFJFVFINCitQT1JUIDEyNywwLDAsMSw1LDEwOQ0KK1RZUEUgSQ0KK1NUT1IgMTA4DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8dXBsb2FkPgorTW9vb29vb29vb29vbworIHVwbG9hZCB0aGlzCis8L3VwbG9hZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwODAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDgwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMzdmYjcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDgwCkBAIC0wLDAgKzEsNjkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK3JlZGlyZWN0X3VybAorZm9sbG93bG9jYXRpb24KKy0td3JpdGUtb3V0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlIHN3c2Nsb3NlDQorTG9jYXRpb246IGRhdGEvMTA4MDAwMDIudHh0P2Nvb2xzaXRlPXllcw0KK0NvbnRlbnQtTGVuZ3RoOiA2Mg0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBzaW1wbGUgTG9jYXRpb246IGZvbGxvd2luZworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgTG9jYXRpb246IG9uIHR3byBVUkxzICdyZWRpcmVjdF91cmwnIGNoZWNrCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvb3VyLzEwODAgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvb3VyLzEwODAgLXcgJyV7cmVkaXJlY3RfdXJsfVxuJworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dlL3dhbnQvb3VyLzEwODAgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC93ZS93YW50L291ci8xMDgwIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8c3Rkb3V0IG1vZGU9InRleHQiPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlIHN3c2Nsb3NlDQorTG9jYXRpb246IGRhdGEvMTA4MDAwMDIudHh0P2Nvb2xzaXRlPXllcw0KK0NvbnRlbnQtTGVuZ3RoOiA2Mg0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBzaW1wbGUgTG9jYXRpb246IGZvbGxvd2luZworaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvb3VyL2RhdGEvMTA4MDAwMDIudHh0P2Nvb2xzaXRlPXllcworSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlIHN3c2Nsb3NlDQorTG9jYXRpb246IGRhdGEvMTA4MDAwMDIudHh0P2Nvb2xzaXRlPXllcw0KK0NvbnRlbnQtTGVuZ3RoOiA2Mg0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBzaW1wbGUgTG9jYXRpb246IGZvbGxvd2luZworaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvb3VyL2RhdGEvMTA4MDAwMDIudHh0P2Nvb2xzaXRlPXllcworPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDgxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA4MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjkwMDIwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA4MQpAQCAtMCwwICsxLDc3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCityZWRpcmVjdF91cmwKK2ZvbGxvd2xvY2F0aW9uCistLXdyaXRlLW91dAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDMwMSBUaGlzIGlzIGEgd2VpcmRvIHRleHQgbWVzc2FnZSBzd3NjbG9zZQ0KK0xvY2F0aW9uOiBkYXRhLzEwODEwMDk5LnR4dD9jb29sc2l0ZT15ZXMNCitDb250ZW50LUxlbmd0aDogNjINCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK1RoaXMgc2VydmVyIHJlcGx5IGlzIGZvciB0ZXN0aW5nIGEgc2ltcGxlIExvY2F0aW9uOiBmb2xsb3dpbmcKKzwvZGF0YT4KKzxkYXRhMiBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZSBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1MZW5ndGg6IDQxDQorDQorVGhpcyBzZWNvbmQgVVJMIGRvZXMgbm90IGhhdmUgYSBsb2NhdGlvbgorPC9kYXRhMj4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIG5vIExvY2F0aW9uOiBvbiBzZWNvbmQgVVJMICdyZWRpcmVjdF91cmwnIGNoZWNrCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvb3VyLzEwODEgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvb3VyLzEwODEwMDAyIC13ICcle3JlZGlyZWN0X3VybH1cbicKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93ZS93YW50L291ci8xMDgxIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvd2Uvd2FudC9vdXIvMTA4MTAwMDIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzxzdGRvdXQgbW9kZT0idGV4dCI+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2Ugc3dzY2xvc2UNCitMb2NhdGlvbjogZGF0YS8xMDgxMDA5OS50eHQ/Y29vbHNpdGU9eWVzDQorQ29udGVudC1MZW5ndGg6IDYyDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitUaGlzIHNlcnZlciByZXBseSBpcyBmb3IgdGVzdGluZyBhIHNpbXBsZSBMb2NhdGlvbjogZm9sbG93aW5nCitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC9vdXIvZGF0YS8xMDgxMDA5OS50eHQ/Y29vbHNpdGU9eWVzCitIVFRQLzEuMSAyMDAgRm9sbG93ZWQgaGVyZSBmaW5lIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LUxlbmd0aDogNDENCisNCitUaGlzIHNlY29uZCBVUkwgZG9lcyBub3QgaGF2ZSBhIGxvY2F0aW9uCisKKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA4MiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwODIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4ZGQyNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwODIKQEAgLTAsMCArMSw1NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorLS1pbnRlcmZhY2UKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LDQorRGF0ZTogTW9uLCAyOCBKdWwgMjAwOCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LUxlbmd0aDogNg0KK0Nvbm5lY3Rpb246IGNsb3NlDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorDQorLWZvby0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB3aXRoIGxvY2FsaG9zdCAtLWludGVyZmFjZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDgyIC0taW50ZXJmYWNlIGxvY2FsaG9zdAorPC9jb21tYW5kPgorPHByZWNoZWNrPgorcGVybCAtZSAicHJpbnQgJ1Rlc3QgcmVxdWlyZXMgZGVmYXVsdCB0ZXN0IHNlcnZlciBob3N0IGFkZHJlc3MnIGlmICggJyVDTElFTlRJUCcgbmUgJzEyNy4wLjAuMScgKTsiCis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzEwODIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwODMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NDEyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDgzCkBAIC0wLDAgKzEsNTkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKy0taW50ZXJmYWNlCitJUHY2Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IE1vbiwgMjggSnVsIDIwMDggMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1MZW5ndGg6IDYNCitDb25uZWN0aW9uOiBjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KKw0KKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgoraXB2NgorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwLWlwdjYKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUC1JUHY2IEdFVCB3aXRoIGlwNi1sb2NhbGhvc3QgLS1pbnRlcmZhY2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistZyAiaHR0cDovLyVIT1NUNklQOiVIVFRQNlBPUlQvMTA4MyIgLS1pbnRlcmZhY2UgaXA2LWxvY2FsaG9zdAorPC9jb21tYW5kPgorPHByZWNoZWNrPgorcGVybCAtZSAiaWYgKCclQ0xJRU5UNklQJyBuZSAnWzo6MV0nKSB7cHJpbnQgJ1Rlc3QgcmVxdWlyZXMgZGVmYXVsdCB0ZXN0IHNlcnZlciBob3N0IGFkZHJlc3MnO30gZWxzZSB7ZXhlYyAnLi9zZXJ2ZXIvcmVzb2x2ZSAtLWlwdjYgaXA2LWxvY2FsaG9zdCc7IHByaW50ICdDYW5ub3QgcnVuIHByZWNoZWNrIHJlc29sdmUnO30iCis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzEwODMgSFRUUC8xLjENCitIb3N0OiAlSE9TVDZJUDolSFRUUDZQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA4NCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwODQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmYWI2OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwODQKQEAgLTAsMCArMSw0MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorLS1pbnRlcmZhY2UKK0ZBSUxVUkUKK25vbi1leGlzdGluZyBob3N0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgoraHR0cAorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGggaW52YWxpZCAtLWludGVyZmFjZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDg0IC0taW50ZXJmYWNlIG5vbi1leGlzdGluZy1ob3N0LmhheHguc2UuCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNDUKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA4NSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwODUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwMmU2MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwODUKQEAgLTAsMCArMSw0OCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorLS1pbnRlcmZhY2UKK0lQdjYKK0ZBSUxVUkUKK25vbi1leGlzdGluZyBob3N0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgoraHR0cAoraXB2NgorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAtSVB2NiBHRVQgd2l0aCBpbnZhbGlkIC0taW50ZXJmYWNlCisgPC9uYW1lPgorIDxjb21tYW5kPgorLWcgImh0dHA6Ly8lSE9TVDZJUDolSFRUUDZQT1JULzEwODUiIC0taW50ZXJmYWNlIG5vbi1leGlzdGluZy1ob3N0LmhheHguc2UuCis8L2NvbW1hbmQ+CisjIEVuc3VyZSB0aGUgSVB2NiBzdGFjayBpcyBvcGVyYXRpb25hbCBiZWZvcmUgcnVubmluZyB0aGlzIHRlc3QgKG90aGVyIHRlc3RzCisjIHVzZSB0aGUgc3RhcnR1cCBvZiB0aGUgSVB2NiB0ZXN0IHNlcnZlciBhcyBhIHN1YnN0aXR1dGUgY2hlY2sgZm9yIHRoaXMpLgorPHByZWNoZWNrPgorLi9zZXJ2ZXIvcmVzb2x2ZSAtLWlwdjYgOjoxCis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzQ1Cis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwODYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDg2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMmUxZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDg2CkBAIC0wLDAgKzEsMTA5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorRVBTVgorUkVUUgordGltZW91dAorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBPdmVybG9hZCBzb21lIHN0YW5kYXJkIEZUUCByZXNwb25zZXMgdG8gbWFrZSB0aGVtIHNob3J0ZXIgYW5kIGZhc3RlcgorIyB0byBhdm9pZCB3YXN0aW5nIHRpbWUgd2FpdGluZyBmb3IgdGhlIGRhdGEgcGhhc2UgdG8gc3RhcnQKKzxzZXJ2ZXJjbWQ+CitTTE9XRE9XTgorUkVQTFkgVVNFUiAzMzEgT0sKK1JFUExZIFBBU1MgMjMwIE9LCitSRVBMWSBQV0QgMjU3ICIvIgorUkVQTFkgVFlQRSAyMDAgT0sKKzwvc2VydmVyY21kPgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorPGtpbGxzZXJ2ZXI+CitmdHAKKzwva2lsbHNlcnZlcj4KKyA8bmFtZT4KK0ZUUCBkb3dubG9hZCB3aXRoIHN0cmljdCB0aW1lb3V0IGFuZCBzbG93IGRhdGEgdHJhbnNmZXIKKyA8L25hbWU+CisgPGNvbW1hbmQgdGltZW91dD0iMSI+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzEwODYgLW0gNworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyAyOCBpcyBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQKKzxlcnJvcmNvZGU+CisyOAorPC9lcnJvcmNvZGU+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMTA4Ng0KK1JFVFIgMTA4Ng0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDg3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA4NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2JlYzBjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA4NwpAQCAtMCwwICsxLDExMCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIHByb3h5CitIVFRQIEJhc2ljIGF1dGgKK0hUVFAgcHJveHkgQmFzaWMgYXV0aAorZm9sbG93bG9jYXRpb24KKy0tYW55YXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGExMDAwIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZA0KK1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorQ29udGVudC1MZW5ndGg6IDANCisNCis8L2RhdGExMDAwPgorPGRhdGExMDAxIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAzMDIgT0sNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KK0Z1bm55LWhlYWQ6IHllc3llcw0KK0xvY2F0aW9uOiBodHRwOi8vZ290by5zZWNvbmQuaG9zdC5ub3cvMTA4NzEwMDINCitDb250ZW50LUxlbmd0aDogMA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorPC9kYXRhMTAwMT4KKzxkYXRhMTAwMiBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgMjAwIE9LDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCitGdW5ueS1oZWFkOiB5ZXN5ZXMNCitDb250ZW50LUxlbmd0aDogOQ0KKw0KK2NvbnRlbnRzCis8L2RhdGExMDAyPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQNCitXV1ctQXV0aGVudGljYXRlOiBCYXNpYw0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorDQorSFRUUC8xLjEgMzAyIE9LDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCitGdW5ueS1oZWFkOiB5ZXN5ZXMNCitMb2NhdGlvbjogaHR0cDovL2dvdG8uc2Vjb25kLmhvc3Qubm93LzEwODcxMDAyDQorQ29udGVudC1MZW5ndGg6IDANCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlIHN3c2Nsb3NlDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorRnVubnktaGVhZDogeWVzeWVzDQorQ29udGVudC1MZW5ndGg6IDkNCisNCitjb250ZW50cworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCwgcHJveHkgd2l0aCAtLWFueWF1dGggYW5kIExvY2F0aW9uOiB0byBuZXcgaG9zdAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly9maXJzdC5ob3N0Lml0LmlzL3dlL3dhbnQvdGhhdC9wYWdlLzEwODcxMDAwIC14ICVIT1NUSVA6JUhUVFBQT1JUIC0tdXNlciBpYW06bXlzZWxmIC0tbG9jYXRpb24gLS1hbnlhdXRoCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vZmlyc3QuaG9zdC5pdC5pcy93ZS93YW50L3RoYXQvcGFnZS8xMDg3MTAwMCBIVFRQLzEuMQ0KK0hvc3Q6IGZpcnN0Lmhvc3QuaXQuaXMNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitHRVQgaHR0cDovL2ZpcnN0Lmhvc3QuaXQuaXMvd2Uvd2FudC90aGF0L3BhZ2UvMTA4NzEwMDAgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBCYXNpYyBhV0Z0T20xNWMyVnNaZz09DQorSG9zdDogZmlyc3QuaG9zdC5pdC5pcw0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0dFVCBodHRwOi8vZ290by5zZWNvbmQuaG9zdC5ub3cvMTA4NzEwMDIgSFRUUC8xLjENCitIb3N0OiBnb3RvLnNlY29uZC5ob3N0Lm5vdw0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDg4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA4OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U3ZDAzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA4OApAQCAtMCwwICsxLDExMiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIHByb3h5CitIVFRQIEJhc2ljIGF1dGgKK0hUVFAgcHJveHkgQmFzaWMgYXV0aAorZm9sbG93bG9jYXRpb24KKy0tYW55YXV0aAorLS1sb2NhdGlvbi10cnVzdGVkCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YTEwMDAgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkDQorV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMNCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCitDb250ZW50LUxlbmd0aDogMA0KKw0KKzwvZGF0YTEwMDA+Cis8ZGF0YTEwMDEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDMwMiBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlIHN3c2Nsb3NlDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorRnVubnktaGVhZDogeWVzeWVzDQorTG9jYXRpb246IGh0dHA6Ly9nb3RvLnNlY29uZC5ob3N0Lm5vdy8xMDg4MTAwMg0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCis8L2RhdGExMDAxPgorPGRhdGExMDAzIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KK0Z1bm55LWhlYWQ6IHllc3llcw0KK0NvbnRlbnQtTGVuZ3RoOiA5DQorDQorY29udGVudHMKKzwvZGF0YTEwMDM+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZA0KK1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorQ29udGVudC1MZW5ndGg6IDANCisNCitIVFRQLzEuMSAzMDIgT0sNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KK0Z1bm55LWhlYWQ6IHllc3llcw0KK0xvY2F0aW9uOiBodHRwOi8vZ290by5zZWNvbmQuaG9zdC5ub3cvMTA4ODEwMDINCitDb250ZW50LUxlbmd0aDogMA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorSFRUUC8xLjEgMjAwIE9LDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCitGdW5ueS1oZWFkOiB5ZXN5ZXMNCitDb250ZW50LUxlbmd0aDogOQ0KKw0KK2NvbnRlbnRzCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQLCBwcm94eSB3aXRoIC0tYW55YXV0aCBhbmQgTG9jYXRpb246IHRvIG5ldyBob3N0IHVzaW5nIGxvY2F0aW9uLXRydXN0ZWQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vZmlyc3QuaG9zdC5pdC5pcy93ZS93YW50L3RoYXQvcGFnZS8xMDg4MTAwMCAteCAlSE9TVElQOiVIVFRQUE9SVCAtLXVzZXIgaWFtOm15c2VsZiAtLWxvY2F0aW9uLXRydXN0ZWQgLS1hbnlhdXRoCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vZmlyc3QuaG9zdC5pdC5pcy93ZS93YW50L3RoYXQvcGFnZS8xMDg4MTAwMCBIVFRQLzEuMQ0KK0hvc3Q6IGZpcnN0Lmhvc3QuaXQuaXMNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitHRVQgaHR0cDovL2ZpcnN0Lmhvc3QuaXQuaXMvd2Uvd2FudC90aGF0L3BhZ2UvMTA4ODEwMDAgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBCYXNpYyBhV0Z0T20xNWMyVnNaZz09DQorSG9zdDogZmlyc3QuaG9zdC5pdC5pcw0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0dFVCBodHRwOi8vZ290by5zZWNvbmQuaG9zdC5ub3cvMTA4ODEwMDIgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBCYXNpYyBhV0Z0T20xNWMyVnNaZz09DQorSG9zdDogZ290by5zZWNvbmQuaG9zdC5ub3cNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA4OSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwODkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhMThhMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwODkKQEAgLTAsMCArMSw5MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorZm9sbG93bG9jYXRpb24KKy0td3JpdGUtb3V0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgMzAyIE9LIHN3c2JvdW5jZSBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29udGVudC1MZW5ndGg6IDgNCitDb25uZWN0aW9uOiBjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KK0xvY2F0aW9uOiAuLzEwODkwMDAxDQorDQorbW9uc3RlcgorPC9kYXRhPgorPGRhdGExIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK0NvbnRlbnQtTGVuZ3RoOiAxNQ0KK0Nvbm5lY3Rpb246IGNsb3NlDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpDQorDQorYmlnZ2VyIG1vbnN0ZXIKKzwvZGF0YTE+CisKKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCAtLXdyaXRlLW91dCB3aXRoIHJlZGlyZWN0ZWQgZmV0Y2gKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTA4OSAtdyAiJXtudW1fY29ubmVjdHN9XG4le251bV9yZWRpcmVjdHN9XG4le3NpemVfZG93bmxvYWR9XG4le3VybF9lZmZlY3RpdmV9XG4le2NvbnRlbnRfdHlwZX1cbiV7cmVzcG9uc2VfY29kZX1cbiIgLUwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xMDg5IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvMTA4OTAwMDEgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKworPHN0ZG91dD4KK0hUVFAvMS4xIDMwMiBPSyBzd3Nib3VuY2Ugc3dzY2xvc2UNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK0NvbnRlbnQtTGVuZ3RoOiA4DQorQ29ubmVjdGlvbjogY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCitMb2NhdGlvbjogLi8xMDg5MDAwMQ0KKw0KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29udGVudC1MZW5ndGg6IDE1DQorQ29ubmVjdGlvbjogY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkNCisNCitiaWdnZXIgbW9uc3RlcgorMgorMQorMTUKK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDg5MDAwMQordGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorMjAwCis8L3N0ZG91dD4KKworPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMjc4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDkKQEAgLTAsMCArMSw0OCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0VQU1YKK0FQUEUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBQQVNWIHVwbG9hZCBhcHBlbmQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzEwOSAtVCBsb2cvdXBsb2FkMTA5IC0tYXBwZW5kCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdXBsb2FkMTA5Ij4KK01vb29vb29vb29vb28KKyB1cGxvYWQgdGhpcworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitBUFBFIDEwOQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPHVwbG9hZD4KK01vb29vb29vb29vb28KKyB1cGxvYWQgdGhpcworPC91cGxvYWQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDkwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzA0ZjkxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5MApAQCAtMCwwICsxLDk4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitmb2xsb3dsb2NhdGlvbgorY2h1bmtlZCBUcmFuc2Zlci1FbmNvZGluZworLS13cml0ZS1vdXQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAzMDIgT0sgc3dzYm91bmNlIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb250ZW50LUxlbmd0aDogOA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorTG9jYXRpb246IC4vMTA5MDAwMDENCisNCittb25zdGVyCis8L2RhdGE+Cis8ZGF0YTEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQNCitDb25uZWN0aW9uOiBjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQ0KKw0KKzAwMDcNCitiaWdnZXIgDQorMDAwOA0KK21vbnN0ZXIKKw0KKzANCisNCis8L2RhdGExPgorCis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBHRVQgLS13cml0ZS1vdXQgd2l0aCByZWRpcmVjdGVkIGZldGNoIGFuZCBjaHVua2VkIHJlcGx5CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEwOTAgLXcgIiV7bnVtX2Nvbm5lY3RzfVxuJXtudW1fcmVkaXJlY3RzfVxuJXtzaXplX2Rvd25sb2FkfVxuJXt1cmxfZWZmZWN0aXZlfVxuJXtjb250ZW50X3R5cGV9XG4le3Jlc3BvbnNlX2NvZGV9XG4iIC1MCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTA5MCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzEwOTAwMDAxIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+CisKKzxzdGRvdXQ+CitIVFRQLzEuMSAzMDIgT0sgc3dzYm91bmNlIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb250ZW50LUxlbmd0aDogOA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorTG9jYXRpb246IC4vMTA5MDAwMDENCisNCitIVFRQLzEuMSAyMDAgT0sNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkDQorQ29ubmVjdGlvbjogY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkNCisNCitiaWdnZXIgbW9uc3RlcgorMgorMQorMTUKK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMDkwMDAwMQordGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorMjAwCis8L3N0ZG91dD4KKworPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwOTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNjZTg2MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwOTEKQEAgLTAsMCArMSw0NiBAQAorPHRlc3RjYXNlPgorIyBiYXNlZCBvbiB0ZXN0IDE0MworPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1JFVFIKK3R5cGU9Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2JsYSBibGEgYmxhCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgVVJMIHdpdGggdHlwZT1pCisgPC9uYW1lPgorIDxjb21tYW5kPgorImZ0cDovLyVIT1NUSVA6JUZUUFBPUlQvJTJmdG1wL21vby8xMDkxO3R5cGU9aSIgLS11c2UtYXNjaWkKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgL3RtcA0KK0NXRCBtb28NCitFUFNWDQorVFlQRSBJDQorU0laRSAxMDkxDQorUkVUUiAxMDkxDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDkyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGVmNDMyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5MgpAQCAtMCwwICsxLDU2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKK3R5cGU9Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMCAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworY29udGVudHMKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitmdHAKKzwvZmVhdHVyZXM+CisgPG5hbWU+CitGVFAgd2l0aCB0eXBlPWkgb3ZlciBIVFRQIHByb3h5CisgPC9uYW1lPgorIDxjb21tYW5kPgorImZ0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvdGhhdC9wYWdlLzEwOTI7dHlwZT1pIiAtLXVzZS1hc2NpaSAteCAlSE9TVElQOiVIVFRQUE9SVAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgZnRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC90aGF0L3BhZ2UvMTA5Mjt0eXBlPWkgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDkzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmNmZDlmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5MwpAQCAtMCwwICsxLDQ0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1RGVFAKK1RGVFAgUlJRCittb2RlPQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CithIGNodW5rIG9mCitkYXRhCityZXR1cm5lZAorIHRvIGNsaWVudAorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Cit0ZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1RGVFAgcmV0cmlldmUgd2l0aCBtb2RlPWkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CisidGZ0cDovLyVIT1NUSVA6JVRGVFBQT1JULy8xMDkzO21vZGU9aSIgLS11c2UtYXNjaWkgLS10cmFjZS1hc2NpaSBsb2cvdHJhY2VpdAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IHBzZXVkbyBwcm90b2NvbCBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitvcGNvZGU6IDEKK2ZpbGVuYW1lOiAvMTA5MworbW9kZTogb2N0ZXQKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDk0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTk2NTUwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5NApAQCAtMCwwICsxLDUwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1RGVFAKK1RGVFAgUlJRCittb2RlPQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CithIGNodW5rIG9mCitkYXRhCityZXR1cm5lZAorIHRvIGNsaWVudAorPC9kYXRhPgorPGRhdGFjaGVjaz4KK2EgY2h1bmsgb2YNCitkYXRhDQorcmV0dXJuZWQNCisgdG8gY2xpZW50DQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3RmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorVEZUUCByZXRyaWV2ZSB3aXRoIG1vZGU9bmV0YXNjaWkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CisidGZ0cDovLyVIT1NUSVA6JVRGVFBQT1JULy8xMDk0O21vZGU9bmV0YXNjaWkiIC0tdHJhY2UtYXNjaWkgbG9nL3RyYWNlaXQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBwc2V1ZG8gcHJvdG9jb2wgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorb3Bjb2RlOiAxCitmaWxlbmFtZTogLzEwOTQKK21vZGU6IG5ldGFzY2lpCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5NSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwOTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQwMWI1MgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwOTUKQEAgLTAsMCArMSw4MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBEaWdlc3QgYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0IFwidGhpc1wiIHJlYWxtISEiLCBub25jZT0iMTA1MzYwNDE0NSINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDI2DQorDQorVGhpcyBpcyBub3QgdGhlIHJlYWwgcGFnZQorPC9kYXRhPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgYQorIyBBdXRob3JpemF0aW9uOiBEaWdlc3QgbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50Cis8ZGF0YTEwMDA+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyMw0KKw0KK1RoaXMgSVMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YTEwMDA+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InRlc3QgXCJ0aGlzXCIgcmVhbG0hISIsIG5vbmNlPSIxMDUzNjA0MTQ1Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjYNCisNCitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyMw0KKw0KK1RoaXMgSVMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorY3J5cHRvCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCB3aXRoIERpZ2VzdCBhbmQgcmVhbG0gd2l0aCBxdW90ZWQgcXVvdGVzCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEwOTUgLXUgdGVzdHVzZXI6dGVzdHBhc3MgLS1kaWdlc3QKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xMDk1IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvMTA5NSBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0idGVzdHVzZXIiLCByZWFsbT0idGVzdCBcInRoaXNcIiByZWFsbSEhIiwgbm9uY2U9IjEwNTM2MDQxNDUiLCB1cmk9Ii8xMDk1IiwgcmVzcG9uc2U9ImExYzc5MzFlY2U5ZTg2MTdiYWUyNzE1MDQ1ZTRmNDlmIg0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC41IChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjUgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDk2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDc0OGMxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5NgpAQCAtMCwwICsxLDUwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorUkVUUgorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBSRVRSIDU1MCBubyBzdWNoIGZpbGUhCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1R3byBGVFAgZG93bmxvYWRzLCB3aXRoIGZhaWxlZCBSRVRSIGJ1dCByZS11c2VkIGNvbnRyb2wgY29ubmVjdGlvbgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvZGlyLzEwOTYgZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9kaXIvMTA5NgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzc4Cis8L2Vycm9yY29kZT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgZGlyDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMTA5Ng0KK1JFVFIgMTA5Ng0KK0VQU1YNCitTSVpFIDEwOTYNCitSRVRSIDEwOTYNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwOTcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDk3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYjAzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDk3CkBAIC0wLDAgKzEsNzkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCitIVFRQIENPTk5FQ1QKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgTlRMTSBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBXZSBhcmUgZmluZSBhbmQgY29vbA0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRG9ydzFuKSBQSFAvNDQuMS4yDQorQ29udGVudC1MZW5ndGg6IDI3DQorCitUaGlzIGlzIGFsbCBmaW5lIGFuZCBkYW5keQorPC9kYXRhPgorPGRhdGExMDAxPgorSFRUUC8xLjEgMjAwIFdlIGFyZSBmaW5lIGFuZCBjb29sDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEb3J3MW4pIFBIUC80NC4xLjINCitDb250ZW50LUxlbmd0aDogMjcNCisKK1RoaXMgaXMgYWxsIGZpbmUgYW5kIGRhbmR5Cis8L2RhdGExMDAxPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBXZSBhcmUgZmluZSBhbmQgY29vbA0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRG9ydzFuKSBQSFAvNDQuMS4yDQorQ29udGVudC1MZW5ndGg6IDI3DQorCitIVFRQLzEuMSAyMDAgV2UgYXJlIGZpbmUgYW5kIGNvb2wNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERvcncxbikgUEhQLzQ0LjEuMg0KK0NvbnRlbnQtTGVuZ3RoOiAyNw0KKworVGhpcyBpcyBhbGwgZmluZSBhbmQgZGFuZHkKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwcworPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitOVExNCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCBQT1NUIHVzaW5nIENPTk5FQ1Qgd2l0aCAtLXByb3h5LW50bG0gYnV0IG5vIGF1dGggaXMgcmVxdWlyZWQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vdGVzdC5hLmdhbGF4eS5mYXIuZmFyLmF3YXk6MTA5Ny8xMDk3IC0tcHJveHkgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIC0tcHJveHktdXNlciBmb286YmFyIC0tcHJveHktbnRsbSAtZCAiZHVtbXk9dmFsdWUiIC1wCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0NPTk5FQ1QgdGVzdC5hLmdhbGF4eS5mYXIuZmFyLmF3YXk6MTA5NyBIVFRQLzEuMQ0KK0hvc3Q6IHRlc3QuYS5nYWxheHkuZmFyLmZhci5hd2F5OjEwOTcNCitQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQorVXNlci1BZ2VudDogY3VybC83LjE5LjUtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjE5LjUtQ1ZTIE9wZW5TU0wvMC45LjhnIHpsaWIvMS4yLjMuMyBjLWFyZXMvMS42LjEtQ1ZTIGxpYmlkbi8xLjEyIGxpYnNzaDIvMS4wLjFfQ1ZTDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK1BPU1QgLzEwOTcgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTkuNS1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTkuNS1DVlMgT3BlblNTTC8wLjkuOGcgemxpYi8xLjIuMy4zIGMtYXJlcy8xLjYuMS1DVlMgbGliaWRuLzEuMTIgbGlic3NoMi8xLjAuMV9DVlMNCitIb3N0OiB0ZXN0LmEuZ2FsYXh5LmZhci5mYXIuYXdheToxMDk3DQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMA0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorPC9wcm90b2NvbD4KKworPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTA5OCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwOTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjNDVjYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwOTgKQEAgLTAsMCArMSw3MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0hUVFAgcHJveHkKK0NVUkxPUFRfUFJPWFkKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogNgorCitoZWxsbworPC9kYXRhPgorCis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgoraHR0cAorZnRwCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorRlRQIFJFVFIgdHdpY2Ugb3ZlciBwcm94eSBjb25maXJtaW5nIHBlcnNpc3RlbnQgY29ubmVjdGlvbgorIDwvbmFtZT4KKworIDxjb21tYW5kPgorZnRwOi8vZnRwLXNpdGUvbW9vLzEwOTggZnRwOi8vZnRwLXNpdGUvbW9vLzEwOTggLS1wcm94eSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGZ0cDovL2Z0cC1zaXRlL21vby8xMDk4IEhUVFAvMS4xDQorSG9zdDogZnRwLXNpdGU6MjENCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitHRVQgZnRwOi8vZnRwLXNpdGUvbW9vLzEwOTggSFRUUC8xLjENCitIb3N0OiBmdHAtc2l0ZToyMQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8c3Rkb3V0IG1vZGU9InRleHQiPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDYKKworaGVsbG8KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA2CisKK2hlbGxvCis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEwOTkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDk5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MWU2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMDk5CkBAIC0wLDAgKzEsNDUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorVEZUUAorVEZUUCBSUlEKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitkYXRhIGZvciAxMDk5Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3RmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorVEZUUCBnZXQgZmlyc3QgYSBub24tZXhpc3RpbmcgZmlsZSB0aGVuIGFuIGV4aXN0aW5nCisgPC9uYW1lPgorIDxjb21tYW5kPgordGZ0cDovLyVIT1NUSVA6JVRGVFBQT1JUL2FuL2ludmFsaWQtZmlsZSB0ZnRwOi8vJUhPU1RJUDolVEZUUFBPUlQvLzEwOTkgLS10cmFjZS1hc2NpaSBsb2cvdHJhY2VpdAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IHBzZXVkbyBwcm90b2NvbCBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitvcGNvZGU6IDEKK2ZpbGVuYW1lOiBhbi9pbnZhbGlkLWZpbGUKK21vZGU6IG9jdGV0CitvcGNvZGU6IDEKK2ZpbGVuYW1lOiAvMTA5OQorbW9kZTogb2N0ZXQKKzwvcHJvdG9jb2w+Cis8c3Rkb3V0IG1vZGU9InRleHQiPgorZGF0YSBmb3IgMTA5OQorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOTNmODAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMQpAQCAtMCwwICsxLDc2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMb2NhdGlvbjogZGF0YS8xMTAwMDIudHh0P2Nvb2xzaXRlPXllcworQ29ubmVjdGlvbjogY2xvc2UKKworVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBzaW1wbGUgTG9jYXRpb246IGZvbGxvd2luZworCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgRm9sbG93ZWQgaGVyZSBmaW5lIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNTIKKworSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKworPC9kYXRhMj4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2Ugc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiBkYXRhLzExMDAwMi50eHQ/Y29vbHNpdGU9eWVzCitDb25uZWN0aW9uOiBjbG9zZQorCitIVFRQLzEuMSAyMDAgRm9sbG93ZWQgaGVyZSBmaW5lIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNTIKKworSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorc2ltcGxlIEhUVFAgTG9jYXRpb246IGZvbGxvd2luZworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzExIC1MCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2FudC8xMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgL3dhbnQvZGF0YS8xMTAwMDIudHh0P2Nvb2xzaXRlPXllcyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2M2JhOGEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTAKQEAgLTAsMCArMSw1MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK1JFVFIKK1Jlc3VtZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZXhwZWN0ZWQgdG8gYmUgYSBmaWxlIHdpdGhvdXQgdGhlIGZpcnN0IHBhcnQKK2J1dCB3ZSBlbXVsYXRlIHRoYXQKKzwvZGF0YT4KKzxzaXplPgorODUKKzwvc2l6ZT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBFUFNWIDUwMCBubyBzdWNoIGNvbW1hbmQKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRvd25sb2FkIHJlc3VtZSB3aXRoIHNldCBsaW1pdAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTEwIC1DIDIwCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1BBU1YNCitUWVBFIEkNCitTSVpFIDExMA0KK1JFU1QgMjANCitSRVRSIDExMA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4YzBlMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMDAKQEAgLTAsMCArMSwxMTYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCitIVFRQIE5UTE0gYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworPGRhdGE+CitIVFRQLzEuMSAyMDAgVGhhbmtzIGZvciB0aGlzISBzd3NjbG9zZQ0KK0NvbnRlbnQtTGVuZ3RoOiAyNQ0KKw0KK1RoaXMgaXMgdGhlIGZpbmFsIHBhZ2UgIQorPC9kYXRhPgorCis8ZGF0YTEwMDE+CitIVFRQLzEuMSA0MDEgTm93IGdpbW1lIHRoYXQgc2Vjb25kIHJlcXVlc3Qgb2YgY3JhcA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDM0DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlIGVpdGhlciEKKzwvZGF0YTEwMDE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyB0aGUgc2Vjb25kCisjIEF1dGhvcml6YXRpb246IE5UTE0gbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50Cis8ZGF0YTEwMDI+CitIVFRQLzEuMSAzMDIgVGhhbmtzIGZvciB0aGlzLCBidXQgd2Ugd2FudCB0byByZWRpciB5b3UhDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitMb2NhdGlvbjogLzExMDANCitDb250ZW50LUxlbmd0aDogMzQNCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlIGVpdGhlciEKKzwvZGF0YTEwMDI+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgTm93IGdpbW1lIHRoYXQgc2Vjb25kIHJlcXVlc3Qgb2YgY3JhcA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDM0DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitIVFRQLzEuMSAzMDIgVGhhbmtzIGZvciB0aGlzLCBidXQgd2Ugd2FudCB0byByZWRpciB5b3UhDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitMb2NhdGlvbjogLzExMDANCitDb250ZW50LUxlbmd0aDogMzQNCisNCitIVFRQLzEuMSAyMDAgVGhhbmtzIGZvciB0aGlzISBzd3NjbG9zZQ0KK0NvbnRlbnQtTGVuZ3RoOiAyNQ0KKw0KK1RoaXMgaXMgdGhlIGZpbmFsIHBhZ2UgIQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitOVExNCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQT1NUIHdpdGggTlRMTSBhdXRob3JpemF0aW9uIGFuZCBmb2xsb3dpbmcgYSAzMDIgcmVkaXJlY3QKKyA8L25hbWU+CisgPHNldGVudj4KKyMgd2UgZm9yY2Ugb3VyIG93biBob3N0IG5hbWUsIGluIG9yZGVyIHRvIG1ha2UgdGhlIHRlc3QgbWFjaGluZSBpbmRlcGVuZGVudAorQ1VSTF9HRVRIT1NUTkFNRT1jdXJsaG9zdAorIyB3ZSB0cnkgdG8gdXNlIHRoZSBMRF9QUkVMT0FEIGhhY2ssIGlmIG5vdCBhIGRlYnVnIGJ1aWxkCitMRF9QUkVMT0FEPSVQV0QvbGlidGVzdC8ubGlicy9saWJob3N0bmFtZS5zbworIDwvc2V0ZW52PgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzExMDAgLXUgdGVzdHVzZXI6dGVzdHBhc3MgLS1udGxtIC1MIC1kICJzdHVmZiB0byBzZW5kIGF3YXkiIAorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BPU1QgLzExMDAgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQorVXNlci1BZ2VudDogY3VybC83LjEwLjYtcHJlMSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC42LXByZTEgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitQT1NUIC8xMTAwIEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQURBQUFBR0FBWUFFQUFBQUFZQUJnQVdBQUFBQUFBQUFCd0FBQUFDQUFJQUhBQUFBQUlBQWdBZUFBQUFBQUFBQUFBQUFBQUJvS0JBRnBrUXdLUkNaRk1oamowdHc0N3dFaktIUkhsdnpmeFFhbUZjaGVNdXY4dit4ZXFwaEVPNVY0MXhSZDdSOWRlT1hSbGMzUjFjMlZ5WTNWeWJHaHZjM1E9DQorVXNlci1BZ2VudDogY3VybC83LjEwLjYtcHJlMSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC42LXByZTEgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAxOA0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorc3R1ZmYgdG8gc2VuZCBhd2F5R0VUIC8xMTAwIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjE5LjUtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjE5LjUtQ1ZTIEdudVRMUy8yLjYuNiB6bGliLzEuMi4zLjMgYy1hcmVzLzEuNi4xLUNWUyBsaWJpZG4vMS4xNCBsaWJzc2gyLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM4ODdjNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMDEKQEAgLTAsMCArMSw1NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBCYXNpYyBhdXRoCitOT19QUk9YWQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LUxlbmd0aDogNA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sDQorDQorYm9vCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorTk9fUFJPWFkgdGVzdCwgd2l0aCB1c2VyIG5hbWUgaW4gVVJMCisgPC9uYW1lPgorCis8c2V0ZW52Pgorbm9fcHJveHk9JUhPU1RJUAoraHR0cF9wcm94eT1odHRwOi8vbm9uLWV4aXN0aW5nLWhvc3QuaGF4eC5zZTozMTI4LworPC9zZXRlbnY+CisgPGNvbW1hbmQ+CitodHRwOi8vdXNlcjpzZWNyZXRAJUhPU1RJUDolSFRUUFBPUlQvZ2ltbWUvMTEwMQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL2dpbW1lLzExMDEgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBCYXNpYyBkWE5sY2pwelpXTnlaWFE9DQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTAyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGRjN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwMgpAQCAtMCwwICsxLDUxIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorU1lTVAorU0lURQorT1M0MDAKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorYmxhYmxhCis8L2RhdGE+Cis8c2VydmVyY21kPgorUkVQTFkgUFdEIDI1NyAiUUdQTCIgaXMgdGhlIGN1cnJlbnQgbGlicmFyeQorUkVQTFkgU1lTVCAyMTUgIE9TLzQwMCBydW5zIHRoaXMgc2VydmVyCitSRVBMWSBTSVRFIDI1MCBOYW1lIGZvcm1hdCBzZXQgdG8gMQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgT1MvNDAwIHNlcnZlciBuYW1lIGZvcm1hdCBjaGVjaworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTEwMgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK1NZU1QNCitTSVRFIE5BTUVGTVQgMQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDExMDINCitSRVRSIDExMDINCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMDMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNDUwNTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTAzCkBAIC0wLDAgKzEsNDggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitTWVNUCitTSVRFCitPUzQwMAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitibGFibGEKKzwvZGF0YT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBQV0QgMjU3ICJDOi9zb21lZGlyIiBpcyB0aGUgY3VycmVudCBkaXJlY3RvcnkKK1JFUExZIFNZU1QgMjE1ICB1bmtub3duLU9TIHJ1bnMgdGhpcyBzZXJ2ZXIKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIG5vbi1PUy80MDAgc2VydmVyCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8xMTAzCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorU1lTVA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDExMDMNCitSRVRSIDExMDMNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMDQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZWZlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTA0CkBAIC0wLDAgKzEsODUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKK2Nvb2tpZXMKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAxIE1vdmVkCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorTG9jYXRpb246IC93YW50L2RhdGEvMTEwNDAwMDIKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorU2V0LUNvb2tpZTogdGVzdD10cnVlOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS87IGV4cGlyZXM9VGh1IEphbiAgMSAwMDowMDowMCBHTVQgMTk3MDsKK1NldC1Db29raWU6IHRlc3QyPXRydWU7IGRvbWFpbj0xMjcuMC4wLjE7IHBhdGg9LzsgZXhwaXJlcz1GcmkgRmViIDIgMTE6NTY6MjcgR01UIDIwMzU7CitDb25uZWN0aW9uOiBjbG9zZQorCitUaGlzIHNlcnZlciByZXBseSBpcyBmb3IgdGVzdGluZyBhIHNldC1jb29raWUKKworPC9kYXRhPgorPGRhdGEyPgorSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZSBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDUyCisKK0lmIHRoaXMgaXMgcmVjZWl2ZWQsIHRoZSBsb2NhdGlvbiBmb2xsb3dpbmcgd29ya2VkCisKKzwvZGF0YTI+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAxIE1vdmVkCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorTG9jYXRpb246IC93YW50L2RhdGEvMTEwNDAwMDIKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorU2V0LUNvb2tpZTogdGVzdD10cnVlOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS87IGV4cGlyZXM9VGh1IEphbiAgMSAwMDowMDowMCBHTVQgMTk3MDsKK1NldC1Db29raWU6IHRlc3QyPXRydWU7IGRvbWFpbj0xMjcuMC4wLjE7IHBhdGg9LzsgZXhwaXJlcz1GcmkgRmViIDIgMTE6NTY6MjcgR01UIDIwMzU7CitDb25uZWN0aW9uOiBjbG9zZQorCitIVFRQLzEuMSAyMDAgRm9sbG93ZWQgaGVyZSBmaW5lIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNTIKKworSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBjb29raWUgZXhwaXJ5IGRhdGUgYXQgSmFuIDEgMDA6MDA6MDAgR01UIDE5NzAKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2FudC8xMTA0IC1MIC14ICVIT1NUSVA6JUhUVFBQT1JUIC1jIGxvZy9jb29raWVzLmphcgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvMTEwNCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorR0VUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50L2RhdGEvMTEwNDAwMDIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0Nvb2tpZTogdGVzdDI9dHJ1ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTA1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYThmODk2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwNQpAQCAtMCwwICsxLDYzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorY29va2llcworY29va2llamFyCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcyBzd3NjbG9zZQorU2V0LUNvb2tpZTogZm9vYmFyPW5hbWU7CitTZXQtQ29va2llOiBtaXNtYXRjaD10aGlzOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPSIvc2lsbHkvIjsKK1NldC1Db29raWU6IHBhcnRtYXRjaD1wcmVzZW50OyBkb21haW49LjAuMC4xOyBwYXRoPS87CisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggY29va2llIHBhcnNlciBhbmQgaGVhZGVyIHJlY29yZGluZworIDwvbmFtZT4KKyA8Y29tbWFuZD4KKyJodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC8xMTA1P3Bhcm0xPXRoaXMqdGhhdC9vdGhlci90aGluZyZwYXJtMj1mb29iYXIvMTEwNSIgLWMgbG9nL2Nvb2tpZTExMDUudHh0IC1kICJ1c2VyaWQ9bXluYW1lJnBhc3N3b3JkPW15cGFzc3dvcmQiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbCBub25ld2xpbmU9InllcyI+CitQT1NUIC93ZS93YW50LzExMDU/cGFybTE9dGhpcyp0aGF0L290aGVyL3RoaW5nJnBhcm0yPWZvb2Jhci8xMTA1IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAzMw0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQordXNlcmlkPW15bmFtZSZwYXNzd29yZD1teXBhc3N3b3JkCis8L3Byb3RvY29sPgorPGZpbGUgbmFtZT0ibG9nL2Nvb2tpZTExMDUudHh0Ij4KKyMgTmV0c2NhcGUgSFRUUCBDb29raWUgRmlsZQorIyBodHRwOi8vY3VybC5oYXh4LnNlL3JmYy9jb29raWVfc3BlYy5odG1sCisjIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGxpYmN1cmwhIEVkaXQgYXQgeW91ciBvd24gcmlzay4KKworMTI3LjAuMC4xCUZBTFNFCS93ZS93YW50LwlGQUxTRQkwCWZvb2JhcgluYW1lCisuMTI3LjAuMC4xCVRSVUUJIi9zaWxseS8iCUZBTFNFCTAJbWlzbWF0Y2gJdGhpcworLjAuMC4xCVRSVUUJLwlGQUxTRQkwCXBhcnRtYXRjaAlwcmVzZW50Cis8L2ZpbGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTA2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzZiZWMxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwNgpAQCAtMCwwICsxLDU3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorQ1VSTE9QVF9QT1JUCitIVFRQIHByb3h5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitBY2NlcHQtUmFuZ2VzOiBieXRlcw0KK0NvbnRlbnQtTGVuZ3RoOiA2DQorDQoraGVsbG8KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitmdHAKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgVVJMIGFuZCB3aXRoIGZ0cF9wcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXQKKyA8L25hbWU+CisKKzxzZXRlbnY+CitmdHBfcHJveHk9aHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULworPC9zZXRlbnY+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOjIzNDU2LzExMDYKKzwvY29tbWFuZD4KKworPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgZnRwOi8vJUhPU1RJUDoyMzQ1Ni8xMTA2IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDoyMzQ1Ng0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTA3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWRjNjM2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwNwpAQCAtMCwwICsxLDUzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorUkVUUgorUFJFVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9kYXRhPgorPHNlcnZlcmNtZD4KK1JFUExZIFBSRVQgMjAwIGZpbmUKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIFJFVFIgUEFTViB3aXRoIFBSRVQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzExMDcgLS1mdHAtcHJldAorPC9jb21tYW5kPgorCis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorUFJFVCBSRVRSIDExMDcNCitFUFNWDQorVFlQRSBJDQorU0laRSAxMTA3DQorUkVUUiAxMTA3DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTA4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjc3OWUxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwOApAQCAtMCwwICsxLDQ1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorUkVUUgorUFJFVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworPHNlcnZlcmNtZD4KK1JFUExZIFBSRVQgNTUwIHVua293biBjb21tYW5kCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBSRVRSIFBBU1Ygd2l0aCBQUkVUIG5vdCBzdXBwb3J0ZWQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzExMDggLS1mdHAtcHJldAorPC9jb21tYW5kPgorCis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorUFJFVCBSRVRSIDExMDgNCis8L3Byb3RvY29sPgorIyB3ZSBleHBlY3QgdGhhdCB0aGUgc2VydmVyIGRvZXNuJ3QgdW5kZXJzdGFuZCBQUkVUCis8ZXJyb3Jjb2RlPgorODQKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEwOSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4YWU0NgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMDkKQEAgLTAsMCArMSw0NiBAQAorPHRlc3RjYXNlPgorIyBUZXN0IHRoYXQgdGhlIGZyYWdtZW50IGlzIG5vdCBzZW5kIGFzIHBhcnQgb2YgdGhlIHBhdGguCis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0NVUkxPUFRfVVJMCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHkgbmFtZT0iMSI+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworQ29udGVudC1MZW5ndGg6IDYKKworaGVsbG8KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB3aXRoIFVSTCB0aGF0IGNvbnRhaW5zIGZyYWdtZW50IGFmdGVyIHRoZSBwYXRoCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzExMDkjdGVzdAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTEwOSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYWE1NTQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTEKQEAgLTAsMCArMSw0NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0VQU1YKK1Jlc3VtZQorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzaXplPgorODUKKzwvc2l6ZT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBkb3dubG9hZCByZXN1bWUgYmV5b25kIGZpbGUgc2l6ZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTExIC1DIDIwMDAKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+CiszNgorPC9lcnJvcmNvZGU+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMTExDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTEwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGZmYzQxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExMApAQCAtMCwwICsxLDQ3IEBACis8dGVzdGNhc2U+CisjIFRlc3QgdGhhdCB0aGUgZnJhZ21lbnQgaXMgbm90IHNlbmQgYXMgcGFydCBvZiB0aGUgcGF0aAorIyB3aGVuIGl0IGNvbnRhaW5zIGEgcXVlcnkuCis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0NVUkxPUFRfVVJMCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHkgbmFtZT0iMSI+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworQ29udGVudC1MZW5ndGg6IDYKKworaGVsbG8KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB3aXRoIFVSTCB0aGF0IGNvbnRhaW5zIGEgZnJhZ21lbnQgYWZ0ZXIgdGhlIHF1ZXJ5IHBhcnQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTExMD9xPWZvb2JhciNmcmFnbWVudAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTExMD9xPWZvb2JhciBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiNzhmNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMTEKQEAgLTAsMCArMSw0NyBAQAorPHRlc3RjYXNlPgorIyBUZXN0IHRoYXQgbm8gZnJhZ21lbnQgaXMgbm90IHNlbmQgYXMgcGFydCBvZiB0aGUgcGF0aAorIyB3aGVuIHRoZSBVUkkgY29udGFpbnMgMiAnIycgKGRvZXMgbm90IGZvbGxvdyBSRkMgMjM5NikKKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorQ1VSTE9QVF9VUkwKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseSBuYW1lPSIxIj4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitDb250ZW50LUxlbmd0aDogNgorCitoZWxsbworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGggVVJMIHdob3NlIGZyYWdtZW50IGNvbnRhaW5zIGEgIyAod2hpY2ggaXMgaWxsZWdhbCkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTExMT9xPWZvb2JhciNmcmFnbWVudCNmcmFnbWVudDIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzExMTE/cT1mb29iYXIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMTIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMDdkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTEyCkBAIC0wLDAgKzEsMTE0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUFMKK0VQU1YKK1JFVFIKK3RpbWVvdXQKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKyMgT3ZlcmxvYWQgc29tZSBzdGFuZGFyZCBGVFAgcmVzcG9uc2VzIHRvIG1ha2UgdGhlbSBzaG9ydGVyIGFuZCBmYXN0ZXIKKyMgdG8gYXZvaWQgd2FzdGluZyB0aW1lIHdhaXRpbmcgZm9yIHRoZSBkYXRhIHBoYXNlIHRvIHN0YXJ0Cis8c2VydmVyY21kPgorU0xPV0RPV04KK1JFUExZIFVTRVIgMzMxIE9LCitSRVBMWSBQQVNTIDIzMCBPSworUkVQTFkgUFdEIDI1NyAiLyIKK1JFUExZIFRZUEUgMjAwIE9LCis8L3NlcnZlcmNtZD4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KK0xvbmcgY2h1bmsgb2YgZGF0YSB0aGF0IGNvdWxkbid0IHBvc3NpYmx5IGJlIHNlbnQgaW4gdGhlIHRpbWUgYWxsb3R0ZWQuCitMb25nIGNodW5rIG9mIGRhdGEgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBiZSBzZW50IGluIHRoZSB0aW1lIGFsbG90dGVkLgorTG9uZyBjaHVuayBvZiBkYXRhIHRoYXQgY291bGRuJ3QgcG9zc2libHkgYmUgc2VudCBpbiB0aGUgdGltZSBhbGxvdHRlZC4KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitTU0wKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgorZnRwcworPC9zZXJ2ZXI+Cis8a2lsbHNlcnZlcj4KK2Z0cHMKKzwva2lsbHNlcnZlcj4KKyA8bmFtZT4KK0ZUUFMgZG93bmxvYWQgd2l0aCBzdHJpY3QgdGltZW91dCBhbmQgc2xvdyBkYXRhIHRyYW5zZmVyCisgPC9uYW1lPgorIDxjb21tYW5kIHRpbWVvdXQ9IjEiPgorLWsgLS1mdHAtc3NsLWNvbnRyb2wgZnRwczovLyVIT1NUSVA6JUZUUFNQT1JULzExMTIgLW0gNworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyAyOCBpcyBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQKKzxlcnJvcmNvZGU+CisyOAorPC9lcnJvcmNvZGU+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUEJTWiAwDQorUFJPVCBDDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMTExMg0KK1JFVFIgMTExMg0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTEzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY5MmFlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExMwpAQCAtMCwwICsxLDk4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUkVUUgorTElTVAord2lsZGNhcmRtYXRjaAorZnRwbGlzdHBhcnNlcgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbW9kZT0idGV4dCI+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjU3NAorPC90b29sPgorPG5hbWU+CitGVFAgd2lsZGNhcmQgZG93bmxvYWQgLSBjaGFuZ2VkIGZubWF0Y2gsIDJ4IHBlcmZvcm0gKERPUyBMSVNUIHJlc3BvbnNlKQorPC9uYW1lPgorPGNvbW1hbmQ+CisiZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9mdWxseV9zaW11bGF0ZWQvRE9TLyoudHh0IgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+CiswCis8L2Vycm9yY29kZT4KKyMgVEhFUkUgU0hPVUxEIE5PVCBCRSAiU0laRSIhIGFuZCBvbmUgIlVTRVIvUEFTUyIKKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgZnVsbHlfc2ltdWxhdGVkDQorQ1dEIERPUw0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorRVBTVg0KK1RZUEUgSQ0KK1JFVFIgY2htb2QxDQorRVBTVg0KK1JFVFIgY2htb2QyDQorRVBTVg0KK1JFVFIgY2htb2QzDQorRVBTVg0KK1JFVFIgZW1wdHlfZmlsZS5kYXQNCitFUFNWDQorUkVUUiBmaWxlLnR4dA0KK0VQU1YNCitSRVRSIHNvbWVvdGhlcnRleHQudHh0DQorQ1dEIC8NCitDV0QgZnVsbHlfc2ltdWxhdGVkDQorQ1dEIERPUw0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorRVBTVg0KK1RZUEUgSQ0KK1JFVFIgY2htb2QxDQorRVBTVg0KK1JFVFIgY2htb2QyDQorRVBTVg0KK1JFVFIgY2htb2QzDQorRVBTVg0KK1JFVFIgZW1wdHlfZmlsZS5kYXQNCitFUFNWDQorUkVUUiBmaWxlLnR4dA0KK0VQU1YNCitSRVRSIHNvbWVvdGhlcnRleHQudHh0DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8c3Rkb3V0IG1vZGU9InRleHQiPgorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDQ0NAorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDY2NgorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDc3NworVGhpcyBpcyBjb250ZW50IG9mIGZpbGUgImZpbGUudHh0IgorU29tZSBqdW5rIDstKSBUaGlzIGZpbGUgZG9lcyBub3QgcmVhbGx5IGV4aXN0LgorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDQ0NAorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDY2NgorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDc3NworVGhpcyBpcyBjb250ZW50IG9mIGZpbGUgImZpbGUudHh0IgorU29tZSBqdW5rIDstKSBUaGlzIGZpbGUgZG9lcyBub3QgcmVhbGx5IGV4aXN0LgorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTE0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWVlNDI5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExNApAQCAtMCwwICsxLDEzNiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK3dpbGRjYXJkbWF0Y2gKK2Z0cGxpc3RwYXJzZXIKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1NzYKKzwvdG9vbD4KKyA8bmFtZT4KK0ZUUCB3aWxkY2FyZCBkb3dubG9hZCAtIHNraXAvcGFyc2VyX2NvcnJlY3RuZXNzL0NVUkxPUFRfRk5NQVRDSF9GVU5DVElPTiAoRE9TKQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvZnVsbHlfc2ltdWxhdGVkL0RPUy8qCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMAorPC9lcnJvcmNvZGU+Cis8c3Rkb3V0IG1vZGU9InRleHQiPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVtYWluczogICAgICAxMgorRmlsZW5hbWU6ICAgICAuCitTaXplOiAgICAgICAgIDBCCitUaW1lOiAgICAgICAgIDA0LTI3LTEwICAwNToxMkFNCitGaWxldHlwZTogICAgIGRpcmVjdG9yeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVtYWluczogICAgICAxMQorRmlsZW5hbWU6ICAgICAuLgorU2l6ZTogICAgICAgICAwQgorVGltZTogICAgICAgICAwNC0yMy0xMCAgMDM6MTJBTQorRmlsZXR5cGU6ICAgICBkaXJlY3RvcnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbWFpbnM6ICAgICAgMTAKK0ZpbGVuYW1lOiAgICAgY2htb2QxCitTaXplOiAgICAgICAgIDM4QgorVGltZTogICAgICAgICAwMS0xMS0xMCAgMTA6MDBBTQorRmlsZXR5cGU6ICAgICByZWd1bGFyIGZpbGUKK0NvbnRlbnQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGZpbGUgc2hvdWxkIGhhdmUgcGVybWlzc2lvbnMgNDQ0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSZW1haW5zOiAgICAgIDkKK0ZpbGVuYW1lOiAgICAgY2htb2QyCitTaXplOiAgICAgICAgIDM4QgorVGltZTogICAgICAgICAwMi0wMS0xMCAgMDg6MDBBTQorRmlsZXR5cGU6ICAgICByZWd1bGFyIGZpbGUKK0NvbnRlbnQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGZpbGUgc2hvdWxkIGhhdmUgcGVybWlzc2lvbnMgNjY2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSZW1haW5zOiAgICAgIDgKK0ZpbGVuYW1lOiAgICAgY2htb2QzCitTaXplOiAgICAgICAgIDM4QgorVGltZTogICAgICAgICAwMi0wMS0xMCAgMDg6MDBBTQorRmlsZXR5cGU6ICAgICByZWd1bGFyIGZpbGUKK0NvbnRlbnQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGZpbGUgc2hvdWxkIGhhdmUgcGVybWlzc2lvbnMgNzc3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSZW1haW5zOiAgICAgIDcKK0ZpbGVuYW1lOiAgICAgY2htb2Q0CitTaXplOiAgICAgICAgIDBCCitUaW1lOiAgICAgICAgIDA1LTA0LTEwICAwNDozMUFNCitGaWxldHlwZTogICAgIGRpcmVjdG9yeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVtYWluczogICAgICA2CitGaWxlbmFtZTogICAgIGNobW9kNQorU2l6ZTogICAgICAgICAwQgorVGltZTogICAgICAgICAwNS0wNC0xMCAgMDQ6MzFBTQorRmlsZXR5cGU6ICAgICBkaXJlY3RvcnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbWFpbnM6ICAgICAgNQorRmlsZW5hbWU6ICAgICBlbXB0eV9maWxlLmRhdAorU2l6ZTogICAgICAgICAwQgorVGltZTogICAgICAgICAwNC0yNy0xMCAgMTE6MDFBTQorRmlsZXR5cGU6ICAgICByZWd1bGFyIGZpbGUKK0NvbnRlbnQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSZW1haW5zOiAgICAgIDQKK0ZpbGVuYW1lOiAgICAgZmlsZS50eHQKK1NpemU6ICAgICAgICAgMzVCCitUaW1lOiAgICAgICAgIDA0LTI3LTEwICAxMTowMUFNCitGaWxldHlwZTogICAgIHJlZ3VsYXIgZmlsZQorQ29udGVudDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgaXMgY29udGVudCBvZiBmaWxlICJmaWxlLnR4dCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbWFpbnM6ICAgICAgMworRmlsZW5hbWU6ICAgICAuTmVYVAorU2l6ZTogICAgICAgICAwQgorVGltZTogICAgICAgICAwMS0yMy0wNSAgMDI6MDVBTQorRmlsZXR5cGU6ICAgICBkaXJlY3RvcnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbWFpbnM6ICAgICAgMgorRmlsZW5hbWU6ICAgICBzb21lb3RoZXJ0ZXh0LnR4dAorU2l6ZTogICAgICAgICA0N0IKK1RpbWU6ICAgICAgICAgMDQtMjctMTAgIDExOjAxQU0KK0ZpbGV0eXBlOiAgICAgcmVndWxhciBmaWxlCitDb250ZW50OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUSElTIENPTlRFTlQgV0FTIFNLSVBQRUQgSU4gQ0hVTktfQkdOIENBTExCQUNLICMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbWFpbnM6ICAgICAgMQorRmlsZW5hbWU6ICAgICB3ZWlyZGRpci50eHQKK1NpemU6ICAgICAgICAgMEIKK1RpbWU6ICAgICAgICAgMDQtMjMtMTAgIDAzOjEyQU0KK0ZpbGV0eXBlOiAgICAgZGlyZWN0b3J5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMTUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMjk0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTE1CkBAIC0wLDAgKzEsNTUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCAxeHggcmVzcG9uc2UgY29kZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAxMDQgRXhwZXJpbWVudA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitEYXRlOiBTdW4sIDAzIEFwciAyMDA1IDE0OjU3OjQ1IEdNVA0KK1gtUG93ZXJlZC1CeTogQVNQLk5FVA0KKw0KK0hUVFAvMS4xIDIwMCBPSyBzd3Nib3VuY2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorDQorPC9kYXRhPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorIyAKKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2NyeXB0bworPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGggdW5leHBlY3RlZCAxeHggcmVzcG9uc2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTExNQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzExMTUgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMTYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YWYzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTE2CkBAIC0wLDAgKzEsNzcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2NodW5rZWQgVHJhbnNmZXItRW5jb2RpbmcKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBmdW5reSBjaHVua3khDQorU2VydmVyOiBmYWtlaXQvMC45IGZha2VpdGJhZC8xLjANCitUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZA0KK0Nvbm5lY3Rpb246IG1vb28NCisNCis0MA0KK2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWENCiszMA0KK2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYg0KKzIxO2hlcmVzYXRlc3Q9bW9vb28NCitjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworDQorMA0KK2NodW5reS10cmFpbGVyOiBoZWFkZXIgZGF0YQ0KK2Fub3RoZXItaGVhZGVyOiB5ZXMNCisNCis8L2RhdGE+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMjAwIGZ1bmt5IGNodW5reSENCitTZXJ2ZXI6IGZha2VpdC8wLjkgZmFrZWl0YmFkLzEuMA0KK1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkDQorQ29ubmVjdGlvbjogbW9vbw0KKw0KK2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBHRVQgd2l0aCBjaHVua2VkIHRyYWlsZXIgd2l0aG91dCBUcmFpbGVyOgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMTE2IC1EIGxvZy9oZWFkczExMTYKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xMTE2IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8ZmlsZSBuYW1lPSJsb2cvaGVhZHMxMTE2Ij4KK0hUVFAvMS4xIDIwMCBmdW5reSBjaHVua3khDQorU2VydmVyOiBmYWtlaXQvMC45IGZha2VpdGJhZC8xLjANCitUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZA0KK0Nvbm5lY3Rpb246IG1vb28NCisNCitjaHVua3ktdHJhaWxlcjogaGVhZGVyIGRhdGENCithbm90aGVyLWhlYWRlcjogeWVzDQorPC9maWxlPgorPC92ZXJpZnk+CisKKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTE3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjY5NjExCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExNwpAQCAtMCwwICsxLDg3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitSYW5nZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDQxNiBSZXF1ZXN0ZWQgUmFuZ2UgTm90IFNhdGlzZmlhYmxlDQorRGF0ZTogVGh1LCAwOSBTZXAgMjAxMCAxNDo0OTowMCBHTVQNCitBY2NlcHQtUmFuZ2VzOiBieXRlcw0KK0NvbnRlbnQtTGVuZ3RoOiAxMTUNCisNCitUaGlzIGlzIGEgbG9uZyBlcnJvciBtZXNzYWdlIHRoYXQgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlIHRlc3Qgc2VydmVyIGlzCitndWFyYW50ZWVkIHRvIHNwbGl0IGl0IGludG8gdHdvIHBhY2tldHMuCis8L2RhdGE+CisKKzxkYXRhMT4KK0hUVFAvMS4xIDIwNiBQYXJ0aWFsIENvbnRlbnQNCitEYXRlOiBUaHUsIDA5IFNlcCAyMDEwIDE0OjQ5OjAxIEdNVA0KK0FjY2VwdC1SYW5nZXM6IGJ5dGVzDQorQ29udGVudC1SYW5nZTogYnl0ZXMgMTAtMTgvMTU1DQorQ29udGVudC1MZW5ndGg6IDEzDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorDQorcGFydGlhbCBib2R5Cis8L2RhdGExPgorCis8c2VydmVyY21kPgord3JpdGVkZWxheTogMQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCB3aXRoIGludmFsaWQgcmFuZ2UgdGhlbiBhbm90aGVyIFVSTAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1yIDEwLTIyIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzExMTcgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnRtb3JlLzExMTcwMDAxCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3Rkb3V0PgorSFRUUC8xLjEgNDE2IFJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGUNCitEYXRlOiBUaHUsIDA5IFNlcCAyMDEwIDE0OjQ5OjAwIEdNVA0KK0FjY2VwdC1SYW5nZXM6IGJ5dGVzDQorQ29udGVudC1MZW5ndGg6IDExNQ0KKw0KK1RoaXMgaXMgYSBsb25nIGVycm9yIG1lc3NhZ2UgdGhhdCBpcyBsYXJnZSBlbm91Z2ggdGhhdCB0aGUgdGVzdCBzZXJ2ZXIgaXMKK2d1YXJhbnRlZWQgdG8gc3BsaXQgaXQgaW50byB0d28gcGFja2V0cy4KK0hUVFAvMS4xIDIwNiBQYXJ0aWFsIENvbnRlbnQNCitEYXRlOiBUaHUsIDA5IFNlcCAyMDEwIDE0OjQ5OjAxIEdNVA0KK0FjY2VwdC1SYW5nZXM6IGJ5dGVzDQorQ29udGVudC1SYW5nZTogYnl0ZXMgMTAtMTgvMTU1DQorQ29udGVudC1MZW5ndGg6IDEzDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorDQorcGFydGlhbCBib2R5Cis8L3N0ZG91dD4KKworPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dhbnQvMTExNyBIVFRQLzEuMQ0KK1JhbmdlOiBieXRlcz0xMC0yMg0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgL3dhbnRtb3JlLzExMTcwMDAxIEhUVFAvMS4xDQorUmFuZ2U6IGJ5dGVzPTEwLTIyDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTE4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzc3NmFmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTExOApAQCAtMCwwICsxLDU1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorVVJMIHdpdGhvdXQgc2xhc2ggYW5kIEAtbGV0dGVyIGluIHF1ZXJ5CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUP2VtYWlsPW5hbWVAZXhhbXBsZS5jb20vMTExOAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLz9lbWFpbD1uYW1lQGV4YW1wbGUuY29tLzExMTggSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMTkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTE5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNWE5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTE5CkBAIC0wLDAgKzEsMjQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorc3ltYm9scy1pbi12ZXJzaW9ucworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKworIDxuYW1lPgorVmVyaWZ5IHRoYXQgc3ltYm9scy1pbi12ZXJzaW9ucyBhbmQgaGVhZGVycyBhcmUgaW4gc3luYworIDwvbmFtZT4KKworPGNvbW1hbmQgdHlwZT0icGVybCI+CislU1JDRElSL3N5bWJvbC1zY2FuLnBsICVTUkNESVIvLi4gLi4vaW5jbHVkZS9jdXJsCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjM0MDBjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEyCkBAIC0wLDAgKzEsNDkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitFUFNWCitBUFBFCitSZXN1bWUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgUEFTViB1cGxvYWQgcmVzdW1lCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8xMTIgLVQgbG9nL3VwbG9hZDExMiAtQyA0MAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3VwbG9hZDExMiI+Cit0aGlzIGlzIHRoZSAqKioqKmNyYXAqKioqKioqKiB0aGF0IHdlJ3JlIGdvbm5hIHVwbG9hZAorCit3b3J4PworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitBUFBFIDExMg0KK1FVSVQNCis8L3Byb3RvY29sPgorPHVwbG9hZD4KKyBnb25uYSB1cGxvYWQKKword29yeD8KKzwvdXBsb2FkPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEyMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhMjA0MgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjAKQEAgLTAsMCArMSw0NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BPUlQKK1JFVFIKKzQyMQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBDV0QgNDIxIFRpbWVvdXQhCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCB3aXRoIDQyMSB0aW1lb3V0IHJlc3BvbnNlCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9hL3BhdGgvMTEyMAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyBTdHJpcCBhbGwgdmFsaWQga2luZHMgb2YgUE9SVCBhbmQgRVBSVCB0aGF0IGN1cmwgY2FuIHNlbmQKKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgYQ0KKzwvcHJvdG9jb2w+CisjIENVUkxFX09QRVJBVElPTl9USU1FRE9VVCBpcyAyOAorPGVycm9yY29kZT4KKzI4Cis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDRlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTIxCkBAIC0wLDAgKzEsNDkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjAgMjAwIE9LDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwNCitDb250ZW50LUxlbmd0aDogNg0KKw0KK2JsYWhhCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBtdWx0aXBsZSBwcm92aWRlZCBIb3N0OiBoZWFkZXJzCisgPC9uYW1lPgorIDxjb21tYW5kPgorLUggIkhvc3Q6IGhvc3QxIiAtSCAiSG9zdDogaG9zdDIiIC1IICJIb3N0OiBob3N0MyIgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzExMjEKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xMTIxIEhUVFAvMS4xDQorQWNjZXB0OiAqLyoNCitIb3N0OiBob3N0MQ0KK0hvc3Q6IGhvc3QyDQorSG9zdDogaG9zdDMNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEyMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhkNTBkNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjIKQEAgLTAsMCArMSw3MCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorY29tcHJlc3NlZAorVHJhbnNmZXItRW5jb2RpbmcKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBiYXNlNjQ9InllcyI+CitTRlJVVUM4eExqRWdNakF3SUU5TERRcEVZWFJsT2lCTmIyNHNJREk1SUU1dmRpQXlNREEwSURJeE9qVTJPalV6SUVkTlZBMEtVMlZ5CitkbVZ5T2lCQmNHRmphR1V2TVM0ekxqTXhJQ2hFWldKcFlXNGdSMDVWTDB4cGJuVjRLU0J0YjJSZlozcHBjQzh4TGpNdU1qWXVNV0VnCitVRWhRTHpRdU15NDVMVEVnYlc5a1gzTnpiQzh5TGpndU1qQWdUM0JsYmxOVFRDOHdMamt1TjJRZ2JXOWtYM0JsY213dk1TNHlPUTBLCitWbUZ5ZVRvZ1FXTmpaWEIwTFVWdVkyOWthVzVuRFFwRGIyNTBaVzUwTFZSNWNHVTZJSFJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDFKCitVMDh0T0RnMU9TMHhEUXBVY21GdWMyWmxjaTFGYm1OdlpHbHVaem9nWjNwcGNBMEtRMjl1ZEdWdWRDMU1aVzVuZEdnNklEUTBEUW9OCitDaCtMQ0FoNW5xdEJBQU5zWVd4aGJHRUF5OG5NUzFVdzVGTElBZEZHWEFvUWhqRVhBQW9DY1dBWUFBQUEKKzwvZGF0YT4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IE1vbiwgMjkgTm92IDIwMDQgMjE6NTY6NTMgR01UDQorU2VydmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEgUEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0KK1Zhcnk6IEFjY2VwdC1FbmNvZGluZw0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTENCitUcmFuc2Zlci1FbmNvZGluZzogZ3ppcA0KK0NvbnRlbnQtTGVuZ3RoOiA0NA0KKw0KK2xpbmUgMQorIGxpbmUgMgorICBsaW5lIDMKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorbGliegorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIGd6aXAgdHJhbnNmZXItZW5jb2RlZCBjb250ZW50CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzExMjIgLS10ci1lbmNvZGluZworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzExMjIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29ubmVjdGlvbjogVEUNCitURTogZ3ppcA0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTIzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEyMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTcyZmVkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEyMwpAQCAtMCwwICsxLDIwMCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorY29tcHJlc3NlZAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIGJhc2U2ND0ieWVzIj4KK1NGUlVVQzh4TGpFZ01qQXdJRTlMRFFwRVlYUmxPaUJOYjI0c0lESTVJRTV2ZGlBeU1EQTBJREl4T2pVMk9qVXpJRWROVkEwS1UyVnkKK2RtVnlPaUJCY0dGamFHVXZNUzR6TGpNeElDaEVaV0pwWVc0Z1IwNVZMMHhwYm5WNEtTQnRiMlJmWjNwcGNDOHhMak11TWpZdU1XRWcKK1VFaFFMelF1TXk0NUxURWdiVzlrWDNOemJDOHlMamd1TWpBZ1QzQmxibE5UVEM4d0xqa3VOMlFnYlc5a1gzQmxjbXd2TVM0eU9RMEsKK1ZtRnllVG9nUVdOalpYQjBMVVZ1WTI5a2FXNW5EUXBEYjI1MFpXNTBMVlI1Y0dVNklIUmxlSFF2YUhSdGJEc2dZMmhoY25ObGREMUoKK1UwOHRPRGcxT1MweERRcFVjbUZ1YzJabGNpMUZibU52WkdsdVp6b2daR1ZtYkdGMFpRMEtRMjl1ZEdWdWRDMU1aVzVuZEdnNklERXoKK01EVU5DZzBLZUp6Y1dOdHU0ellRZlRlUWYyRDkxQUsyYnJZVE9YQzBLSExaQk0wMndkb0Z1azhHTGRFMkcwa1VTTXE1UFBUYk81UW8KK2liRWNyM2VEdmdSSVluTG1uTVBoREVtVG1YeDZTbUswSVZ4UWxwNTFYY3ZwSXBLR0xLTHA2cXg3TTczcisvNW8zSGU3bjRMTzVKZUwKK3UvUFp0L3RMbEhIMkR3bGxQNlpDQWhCTnYwMW5sMTlRZHkxbGRtcmJTMDdFT2lGWVdpbVI5Z0tIRHlTTjdHWFMxenpSZDZ5aEZjbW8KK0M2SmJXa0VIb2NxbTJrMXZUcVBBUFhhOWlXMFlTa1NFSlpuaktDS0FHSS85dnVQM1BSYzV3MVBIUGZYR0U5dndHNFE4VXg5UjREbk8KK3NPODZmZGRIam5mcXdjOUFVeXJFcXpoU25KQzVXRE11Z3pEbmNSMk9ZVy9qbDNrY0YzQ0Uwd2pGZE5HbUZoQWRIaEdobGpwblNWSlMKK1VvSWtZN1VBeC93WkxSbEhZVXhKS3Z1Q1JnVDk5ZlVXU1k1VHNZU0tXakNMUnNoUTNoa01vZ0xoY2dTbFdxbHdWZDhsallrNDZ1UkMKK2RkUVk0am1WK01sQ054S0pQTXRBWDZEcjJleStWL3lkOXRBVnRJODZWMFg3NHVaODFrT3p5OXMvTCtIejl1SjNnRjNkM0Y3Mml1RS8KKzM5MWZYMzZGTmd6d1NHS0lxWlRxWjB6SW5tN20wQW9aZTZCRUZOb296MktHSXhnQ2xscWVrS2laZFE5bFdJaEh4aVBWaE1qU1BGa1UKKzl1bjA5cWdURWk3cGtvWlFWekQ5UVRqNG1DaERnV284d1FqRnRDQWJHWHNrbkVSSG5jVnpsYVFla212eVpzYXJzbGhIbmRrYXFBakQKKzc0S21hak1KU0cyZGFwVmdCcHNPZWM1Uko4YnBLc2NySW9vWVNMcWhuS1VKRENCQVI1ZlFXQnNiS25GTTVmTmNoSXlUWUhUaUQ2M1IKK3ljVGVzbStCTThKRGtBd0dsbnRzWUN2ekZocm04d0I3Yld3Z0M1TmUxeXpMWTh5YnNZNUhZNGhoQ010NTI5TWlWQU82QTh0M1h4RmUKK2gySTR5bUNjMFN1MEVRN0h4Ym5oV3lObll1dU82Wm1ITEFkZHo2MjgydkFLVXc3aUQycU1NWURJRnlMa05KTndSSXBnb0U2SDE2WVMKK0JxVlB3L1ZjN2VYZ2dpeHhIc3VKYlJwTEdOUi9YaDFnR1pROTJIbG9WaWVscmRhTFBiRmJyRVpzelJMeXRoQXNZTXBMRlhWNDJpWkQKKzY5WUNqYVpjdlJ3dUIyQ3RwR2lOeU9MRk8xd0V3RnBFMFJxUkY1b2RMZ0pnTGFKb2pVaTRoajFHWXJZNlhLcW1hTUZHb3BIbFdYSzQKK0lJQzFsS0kxSWhGWkhDNENZQzJpYUkwSUUwK0hpd0JZaXlpYVVTOFJxZlB5QjJwV0VxcTZhYnF4ekhNT2FSTWswT3UzNmhxRjJZZ2YKK0tNbEdWTVhZQ0VORTNSd09WMUZvTFZNUUc1MkVjczc0NFVvbFhtdHBzbG5YaEFWVnJhQlplbUlLaHh5azRNdk56UDRibmNQcEFTbWoKK2VZSnVTOGZFcmhBYXI3Nm41SnlUbU5TWmE1bm4rdjRXbkZpdVo4RUY2UTMzRzJ4MXJ6bzVkdnhSaTFoZHNOb2NkUy9hZlhIYUJTem4KK1l1K2F6QVRPVVFJVFhqTTVsMnY0cW9hY3RVd2xFdWNTYmpLaURxbnNWOTNhb0U5Z25GSVNvNmtrS1h6RHJ5YTI2V3hSb0VxNzYvN3YKK0FxOGlvb3BzSUZ0MHptSVMzRDJtaE5lNHdsUkZhcHVoVnIxcUNhc3ZlRTRUbW1KcHprNXl1Q0VVdFlHQzFwMlcxL09POTdrSGU3bjcKK25LN3Y3K1c2ZThlRnBiRS82cjF1OTNpNHp6M2VTL2JIZTczT1hyYzcrazdjM3dsc2YyU0QxdGpsL1c2Ny9MQW1Nbmd5d1VNTXJxTzEKK1RtMThSdkk1STJkZFRrSjRIU2liZWtuVmk3TEJtUnZaVVVQdGN1d2s2bnNMdUUrR3FoZzdYVHVaeHVPc1JkMSt1TDNGbFZTcURRVjIKK3VMT2pYL1Z0NnJlZFdpVzIzbWtONHUyOHNlTGVodVAvTDJuT1QyZHNPSGhueHRUNzZ1TW55dlVHSS9jZG1YcUJwOWpIejlMQWM0WW4KKzc4alNOYUZKaE9PUG42amhjRFR3M3BHb3NBOVBmZkV6ZVRJcytxeXYveXNVZFA0REFBRC8vNEl6RWFOakFBQUFBUC8vQXdEZE9JN1IKKzwvZGF0YT4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IE1vbiwgMjkgTm92IDIwMDQgMjE6NTY6NTMgR01UDQorU2VydmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEgUEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0KK1Zhcnk6IEFjY2VwdC1FbmNvZGluZw0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTENCitUcmFuc2Zlci1FbmNvZGluZzogZGVmbGF0ZQ0KK0NvbnRlbnQtTGVuZ3RoOiAxMzA1DQorDQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorPCFET0NUWVBFIHByb2plY3QtbGlzdGluZyBTWVNURU0gImh0dHA6Ly9mcmVzaG1lYXQubmV0L2JhY2tlbmQvZm0tcHJvamVjdHMtMC40LmR0ZCI+Cis8cHJvamVjdC1saXN0aW5nPgorICA8cHJvamVjdD4KKyAgICA8cHJvamVjdF9pZD4xNjEyPC9wcm9qZWN0X2lkPgorICAgIDxkYXRlX2FkZGVkPjE5OTgtMDgtMjEgMDQ6MDE6Mjk8L2RhdGVfYWRkZWQ+CisgICAgPGRhdGVfdXBkYXRlZD4yMDA0LTEwLTE4IDAyOjIyOjIzPC9kYXRlX3VwZGF0ZWQ+CisgICAgPHByb2plY3RuYW1lX3Nob3J0PmN1cmw8L3Byb2plY3RuYW1lX3Nob3J0PgorICAgIDxwcm9qZWN0bmFtZV9mdWxsPmN1cmwgYW5kIGxpYmN1cmw8L3Byb2plY3RuYW1lX2Z1bGw+CisgICAgPGRlc2Nfc2hvcnQ+Q29tbWFuZCBsaW5lIHRvb2wgYW5kIGxpYnJhcnkgZm9yIGNsaWVudC1zaWRlIFVSTCB0cmFuc2ZlcnMuPC9kZXNjX3Nob3J0PgorICAgIDxkZXNjX2Z1bGw+Y3VybCBhbmQgbGliY3VybCBpcyBhIHRvb2wgZm9yIHRyYW5zZmVycmluZyBmaWxlcw0KK3VzaW5nIFVSTCBzeW50YXguIEl0IHN1cHBvcnRzIEhUVFAsIEhUVFBTLCBGVFAsDQorRlRQUywgRElDVCwgVEVMTkVULCBMREFQLCBGSUxFLCBhbmQgR09QSEVSLCBhcw0KK3dlbGwgYXMgSFRUUC1wb3N0LCBIVFRQLXB1dCwgY29va2llcywgRlRQIHVwbG9hZCwNCityZXN1bWVkIHRyYW5zZmVycywgcGFzc3dvcmRzLCBwb3J0bnVtYmVycywgU1NMDQorY2VydGlmaWNhdGVzLCBLZXJiZXJvcywgYW5kIHByb3hpZXMuIEl0IGlzIHBvd2VyZWQNCitieSBsaWJjdXJsLCB0aGUgY2xpZW50LXNpZGUgVVJMIHRyYW5zZmVyIGxpYnJhcnkuDQorVGhlcmUgYXJlIGJpbmRpbmdzIHRvIGxpYmN1cmwgZm9yIG92ZXIgMjANCitsYW5ndWFnZXMgYW5kIGVudmlyb25tZW50cy4NCis8L2Rlc2NfZnVsbD4KKyAgICA8dml0YWxpdHlfc2NvcmU+NTc4NC41Nzwvdml0YWxpdHlfc2NvcmU+CisgICAgPHZpdGFsaXR5X3BlcmNlbnQ+My4xNjwvdml0YWxpdHlfcGVyY2VudD4KKyAgICA8dml0YWxpdHlfcmFuaz4xNjk8L3ZpdGFsaXR5X3Jhbms+CisgICAgPHBvcHVsYXJpdHlfc2NvcmU+NjU5NC41NDwvcG9wdWxhcml0eV9zY29yZT4KKyAgICA8cG9wdWxhcml0eV9wZXJjZW50PjEzLjgxPC9wb3B1bGFyaXR5X3BlcmNlbnQ+CisgICAgPHBvcHVsYXJpdHlfcmFuaz4xMDU8L3BvcHVsYXJpdHlfcmFuaz4KKyAgICA8cmF0aW5nPjguNTA8L3JhdGluZz4KKyAgICA8cmF0aW5nX2NvdW50PjIxPC9yYXRpbmdfY291bnQ+CisgICAgPHJhdGluZ19yYW5rPjE4MzwvcmF0aW5nX3Jhbms+CisgICAgPHN1YnNjcmlwdGlvbnM+MzIzPC9zdWJzY3JpcHRpb25zPgorICAgIDxicmFuY2hfbmFtZT5EZWZhdWx0PC9icmFuY2hfbmFtZT4KKyAgICA8dXJsX3Byb2plY3RfcGFnZT5odHRwOi8vZnJlc2htZWF0Lm5ldC9wcm9qZWN0cy9jdXJsLzwvdXJsX3Byb2plY3RfcGFnZT4KKyAgICA8dXJsX2hvbWVwYWdlPmh0dHA6Ly9mcmVzaG1lYXQubmV0L3JlZGlyL2N1cmwvMTYxMi91cmxfaG9tZXBhZ2UvPC91cmxfaG9tZXBhZ2U+CisgICAgPHVybF90Z3o+aHR0cDovL2ZyZXNobWVhdC5uZXQvcmVkaXIvY3VybC8xNjEyL3VybF90Z3ovPC91cmxfdGd6PgorICAgIDx1cmxfYnoyPmh0dHA6Ly9mcmVzaG1lYXQubmV0L3JlZGlyL2N1cmwvMTYxMi91cmxfYnoyLzwvdXJsX2J6Mj4KKyAgICA8dXJsX3ppcD5odHRwOi8vZnJlc2htZWF0Lm5ldC9yZWRpci9jdXJsLzE2MTIvdXJsX3ppcC88L3VybF96aXA+CisgICAgPHVybF9jaGFuZ2Vsb2c+aHR0cDovL2ZyZXNobWVhdC5uZXQvcmVkaXIvY3VybC8xNjEyL3VybF9jaGFuZ2Vsb2cvPC91cmxfY2hhbmdlbG9nPgorICAgIDx1cmxfcnBtPmh0dHA6Ly9mcmVzaG1lYXQubmV0L3JlZGlyL2N1cmwvMTYxMi91cmxfcnBtLzwvdXJsX3JwbT4KKyAgICA8dXJsX2RlYj5odHRwOi8vZnJlc2htZWF0Lm5ldC9yZWRpci9jdXJsLzE2MTIvdXJsX2RlYi88L3VybF9kZWI+CisgICAgPHVybF9vc3g+aHR0cDovL2ZyZXNobWVhdC5uZXQvcmVkaXIvY3VybC8xNjEyL3VybF9vc3gvPC91cmxfb3N4PgorICAgIDx1cmxfYnNkcG9ydD5odHRwOi8vZnJlc2htZWF0Lm5ldC9yZWRpci9jdXJsLzE2MTIvdXJsX2JzZHBvcnQvPC91cmxfYnNkcG9ydD4KKyAgICA8dXJsX3B1cmNoYXNlPjwvdXJsX3B1cmNoYXNlPgorICAgIDx1cmxfY3ZzPmh0dHA6Ly9mcmVzaG1lYXQubmV0L3JlZGlyL2N1cmwvMTYxMi91cmxfY3ZzLzwvdXJsX2N2cz4KKyAgICA8dXJsX2xpc3Q+aHR0cDovL2ZyZXNobWVhdC5uZXQvcmVkaXIvY3VybC8xNjEyL3VybF9saXN0LzwvdXJsX2xpc3Q+CisgICAgPHVybF9taXJyb3I+aHR0cDovL2ZyZXNobWVhdC5uZXQvcmVkaXIvY3VybC8xNjEyL3VybF9taXJyb3IvPC91cmxfbWlycm9yPgorICAgIDx1cmxfZGVtbz48L3VybF9kZW1vPgorICAgIDxsaWNlbnNlPk1JVC9YIENvbnNvcnRpdW0gTGljZW5zZTwvbGljZW5zZT4KKyAgICA8bGF0ZXN0X3JlbGVhc2U+CisgICAgICA8bGF0ZXN0X3JlbGVhc2VfdmVyc2lvbj43LjEyLjI8L2xhdGVzdF9yZWxlYXNlX3ZlcnNpb24+CisgICAgICA8bGF0ZXN0X3JlbGVhc2VfaWQ+MTc2MDg1PC9sYXRlc3RfcmVsZWFzZV9pZD4KKyAgICAgIDxsYXRlc3RfcmVsZWFzZV9kYXRlPjIwMDQtMTAtMTggMDI6MjI6MjM8L2xhdGVzdF9yZWxlYXNlX2RhdGU+CisgICAgPC9sYXRlc3RfcmVsZWFzZT4KKyAgICA8c2NyZWVuc2hvdF90aHVtYj48L3NjcmVlbnNob3RfdGh1bWI+CisgICAgPGF1dGhvcnM+CisgICAgICA8YXV0aG9yPgorICAgICAgICA8YXV0aG9yX25hbWU+RGFuaWVsIFN0ZW5iZXJnPC9hdXRob3JfbmFtZT4KKyAgICAgICAgPGF1dGhvcl91cmw+aHR0cDovL2ZyZXNobWVhdC5uZXQvfmJhZ2Rlci88L2F1dGhvcl91cmw+CisgICAgICAgIDxhdXRob3Jfcm9sZT5Pd25lcjwvYXV0aG9yX3JvbGU+CisgICAgICA8L2F1dGhvcj4KKyAgICA8L2F1dGhvcnM+CisgICAgPGRlc2NyaW1pbmF0b3JzPgorICAgICAgPHRyb3ZlX2lkPjEyPC90cm92ZV9pZD4KKyAgICAgIDx0cm92ZV9pZD4yMjY8L3Ryb3ZlX2lkPgorICAgICAgPHRyb3ZlX2lkPjM8L3Ryb3ZlX2lkPgorICAgICAgPHRyb3ZlX2lkPjI8L3Ryb3ZlX2lkPgorICAgICAgPHRyb3ZlX2lkPjE4ODwvdHJvdmVfaWQ+CisgICAgICA8dHJvdmVfaWQ+MjE2PC90cm92ZV9pZD4KKyAgICAgIDx0cm92ZV9pZD4yMDA8L3Ryb3ZlX2lkPgorICAgICAgPHRyb3ZlX2lkPjIyMDwvdHJvdmVfaWQ+CisgICAgICA8dHJvdmVfaWQ+MTY0PC90cm92ZV9pZD4KKyAgICAgIDx0cm92ZV9pZD45MDwvdHJvdmVfaWQ+CisgICAgICA8dHJvdmVfaWQ+ODk8L3Ryb3ZlX2lkPgorICAgICAgPHRyb3ZlX2lkPjgwOTwvdHJvdmVfaWQ+CisgICAgICA8dHJvdmVfaWQ+MTUwPC90cm92ZV9pZD4KKyAgICAgIDx0cm92ZV9pZD4yMjQ8L3Ryb3ZlX2lkPgorICAgICAgPHRyb3ZlX2lkPjkwMDwvdHJvdmVfaWQ+CisgICAgICA8dHJvdmVfaWQ+ODM5PC90cm92ZV9pZD4KKyAgICA8L2Rlc2NyaW1pbmF0b3JzPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICA8ZGVwZW5kZW5jeSB0eXBlPSJyZWNvbW1lbmRlZCI+CisgICAgICAgIDxkZXBlbmRlbmN5X3JlbGVhc2VfaWQ+MDwvZGVwZW5kZW5jeV9yZWxlYXNlX2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9icmFuY2hfaWQ+NzQ2NDwvZGVwZW5kZW5jeV9icmFuY2hfaWQ+CisgICAgICAgIDxkZXBlbmRlbmN5X3Byb2plY3RfaWQ+NzQ2NDwvZGVwZW5kZW5jeV9wcm9qZWN0X2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9wcm9qZWN0X3RpdGxlPk9wZW5TU0wgKERlZmF1bHQpPC9kZXBlbmRlbmN5X3Byb2plY3RfdGl0bGU+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeSB0eXBlPSJvcHRpb25hbCI+CisgICAgICAgIDxkZXBlbmRlbmN5X3JlbGVhc2VfaWQ+MDwvZGVwZW5kZW5jeV9yZWxlYXNlX2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9icmFuY2hfaWQ+MDwvZGVwZW5kZW5jeV9icmFuY2hfaWQ+CisgICAgICAgIDxkZXBlbmRlbmN5X3Byb2plY3RfaWQ+NzQ0MzwvZGVwZW5kZW5jeV9wcm9qZWN0X2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9wcm9qZWN0X3RpdGxlPk9wZW5MREFQPC9kZXBlbmRlbmN5X3Byb2plY3RfdGl0bGU+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeSB0eXBlPSJvcHRpb25hbCI+CisgICAgICAgIDxkZXBlbmRlbmN5X3JlbGVhc2VfaWQ+MDwvZGVwZW5kZW5jeV9yZWxlYXNlX2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9icmFuY2hfaWQ+MDwvZGVwZW5kZW5jeV9icmFuY2hfaWQ+CisgICAgICAgIDxkZXBlbmRlbmN5X3Byb2plY3RfaWQ+MTIzNTE8L2RlcGVuZGVuY3lfcHJvamVjdF9pZD4KKyAgICAgICAgPGRlcGVuZGVuY3lfcHJvamVjdF90aXRsZT56bGliPC9kZXBlbmRlbmN5X3Byb2plY3RfdGl0bGU+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeSB0eXBlPSJvcHRpb25hbCI+CisgICAgICAgIDxkZXBlbmRlbmN5X3JlbGVhc2VfaWQ+MDwvZGVwZW5kZW5jeV9yZWxlYXNlX2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9icmFuY2hfaWQ+MDwvZGVwZW5kZW5jeV9icmFuY2hfaWQ+CisgICAgICAgIDxkZXBlbmRlbmN5X3Byb2plY3RfaWQ+MzIwNDc8L2RlcGVuZGVuY3lfcHJvamVjdF9pZD4KKyAgICAgICAgPGRlcGVuZGVuY3lfcHJvamVjdF90aXRsZT5IZWltZGFsPC9kZXBlbmRlbmN5X3Byb2plY3RfdGl0bGU+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeSB0eXBlPSJvcHRpb25hbCI+CisgICAgICAgIDxkZXBlbmRlbmN5X3JlbGVhc2VfaWQ+MDwvZGVwZW5kZW5jeV9yZWxlYXNlX2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9icmFuY2hfaWQ+MDwvZGVwZW5kZW5jeV9icmFuY2hfaWQ+CisgICAgICAgIDxkZXBlbmRlbmN5X3Byb2plY3RfaWQ+NDQ1MzI8L2RlcGVuZGVuY3lfcHJvamVjdF9pZD4KKyAgICAgICAgPGRlcGVuZGVuY3lfcHJvamVjdF90aXRsZT5jLWFyZXM8L2RlcGVuZGVuY3lfcHJvamVjdF90aXRsZT4KKyAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgPC9wcm9qZWN0PgorPC9wcm9qZWN0LWxpc3Rpbmc+Cis8L2RhdGFjaGVjaz4KKworPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK2xpYnoKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCBkZWZsYXRlIHRyYW5zZmVyLWVuY29kZWQgY29udGVudAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMTIzIC0tdHItZW5jb2RpbmcKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xMTIzIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0Nvbm5lY3Rpb246IFRFDQorVEU6IGd6aXANCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEyNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg2MGJlZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjQKQEAgLTAsMCArMSw2OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorY29tcHJlc3NlZAorVHJhbnNmZXItRW5jb2RpbmcKK2NodW5rZWQKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBiYXNlNjQ9InllcyI+CitTRlJVVUM4eExqRWdNakF3SUU5TERRcEVZWFJsT2lCTmIyNHNJREk1SUU1dmRpQXlNREkwSURJeE9qVTJPalV6SUVkTlZBMEtVMlZ5CitkbVZ5T2lCVGIyMWxkR2hwYm1jdFZFVXRabkpwWlc1a2JIa3ZNQzR4RFFwV1lYSjVPaUJCWTJObGNIUXRSVzVqYjJScGJtY05Da052CitiblJsYm5RdFZIbHdaVG9nZEdWNGRDOW9kRzFzT3lCamFHRnljMlYwUFVsVFR5MDRPRFU1TFRFTkNsUnlZVzV6Wm1WeUxVVnVZMjlrCithVzVuT2lCbmVtbHdMQ0JqYUhWdWEyVmtEUW9OQ2pFMERRb2Zpd2dJZVo2clFRQURiR0ZzWVd4aEFNdkp6QTBLTVRnTkNrdFZNT1JTCit5QUhSUmx3S0VJWXhGd0FLQW5GZ0dBQUFBQTBLTUEwS0RRbz0KKzwvZGF0YT4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IE1vbiwgMjkgTm92IDIwMjQgMjE6NTY6NTMgR01UDQorU2VydmVyOiBTb21ldGhpbmctVEUtZnJpZW5kbHkvMC4xDQorVmFyeTogQWNjZXB0LUVuY29kaW5nDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMQ0KK1RyYW5zZmVyLUVuY29kaW5nOiBnemlwLCBjaHVua2VkDQorDQorbGluZSAxCisgbGluZSAyCisgIGxpbmUgMworPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitsaWJ6Cis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBHRVQgZ3ppcCtjaHVua2VkIHRyYW5zZmVyLWVuY29kZWQgY29udGVudAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMTI0IC0tdHItZW5jb2RpbmcKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xMTI0IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0Nvbm5lY3Rpb246IFRFDQorVEU6IGd6aXANCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEyNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4MzczNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjUKQEAgLTAsMCArMSw3MCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorY29tcHJlc3NlZAorVHJhbnNmZXItRW5jb2RpbmcKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBiYXNlNjQ9InllcyI+CitTRlJVVUM4eExqRWdNakF3SUU5TERRcEVZWFJsT2lCTmIyNHNJREk1SUU1dmRpQXlNREEwSURJeE9qVTJPalV6SUVkTlZBMEtVMlZ5CitkbVZ5T2lCQmNHRmphR1V2TVM0ekxqTXhJQ2hFWldKcFlXNGdSMDVWTDB4cGJuVjRLU0J0YjJSZlozcHBjQzh4TGpNdU1qWXVNV0VnCitVRWhRTHpRdU15NDVMVEVnYlc5a1gzTnpiQzh5TGpndU1qQWdUM0JsYmxOVFRDOHdMamt1TjJRZ2JXOWtYM0JsY213dk1TNHlPUTBLCitWbUZ5ZVRvZ1FXTmpaWEIwTFVWdVkyOWthVzVuRFFwRGIyNTBaVzUwTFZSNWNHVTZJSFJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDFKCitVMDh0T0RnMU9TMHhEUXBVY21GdWMyWmxjaTFGYm1OdlpHbHVaem9nWjNwcGNBMEtRMjl1ZEdWdWRDMU1aVzVuZEdnNklEUTBEUW9OCitDaCtMQ0FoNW5xdEJBQU5zWVd4aGJHRUF5OG5NUzFVdzVGTElBZEZHWEFvUWhqRVhBQW9DY1dBWUFBQUEKKzwvZGF0YT4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IE1vbiwgMjkgTm92IDIwMDQgMjE6NTY6NTMgR01UDQorU2VydmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEgUEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0KK1Zhcnk6IEFjY2VwdC1FbmNvZGluZw0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTENCitUcmFuc2Zlci1FbmNvZGluZzogZ3ppcA0KK0NvbnRlbnQtTGVuZ3RoOiA0NA0KKw0KK2xpbmUgMQorIGxpbmUgMgorICBsaW5lIDMKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorbGliegorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIHRyYW5zZmVyLWVuY29kaW5nIHdpdGggY3VzdG9tIENvbm5lY3Rpb246CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzExMjUgLS10ci1lbmNvZGluZyAtSCAiQ29ubmVjdGlvbjogY2xvc2UiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTEyNSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb25uZWN0aW9uOiBjbG9zZSwgVEUNCitURTogZ3ppcA0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTI2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEyNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmY0ZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEyNgpAQCAtMCwwICsxLDUyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitJZi1Nb2RpZmllZC1TaW5jZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMYXN0LU1vZGlmaWVkOiBUdWUsIDEzIEp1biAyMDAzIDEyOjEwOjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDExCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCiswMTIzNDU2Nzg5Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCAyMDAgSWYtTW9kaWZpZWQtU2luY2Ugd2l0aCBuZXdlciBkb2N1bWVudAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMTI2IC16ICJkZWMgMTIgMTI6MDA6MDAgMTk5OSBHTVQiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTEyNiBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitJZi1Nb2RpZmllZC1TaW5jZTogU3VuLCAxMiBEZWMgMTk5OSAxMjowMDowMCBHTVQNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEyNyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjNDJjMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjcKQEAgLTAsMCArMSw2MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSWYtTW9kaWZpZWQtU2luY2UKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMTk4MCAxMjoxMDowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiAxMQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworMDEyMzQ1Njc4OQorPC9kYXRhPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMTk4MCAxMjoxMDowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiAxMQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCAyMDAgSWYtTW9kaWZpZWQtU2luY2Ugd2l0aCBvbGRlciBkb2N1bWVudAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMTI3IC16ICJkZWMgMTIgMTI6MDA6MDAgMTk5OSBHTVQiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTEyNyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitJZi1Nb2RpZmllZC1TaW5jZTogU3VuLCAxMiBEZWMgMTk5OSAxMjowMDowMCBHTVQNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEyOCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIwNDg3YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjgKQEAgLTAsMCArMSw4NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSWYtTW9kaWZpZWQtU2luY2UKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMYXN0LU1vZGlmaWVkOiBUdWUsIDEzIEp1biAxOTgwIDEyOjEwOjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDExCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCiswMTIzNDU2Nzg5Cis8L2RhdGE+Cis8ZGF0YTE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDEgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDIgMTI6MTA6MDAgR01UCitDb250ZW50LUxlbmd0aDogMTEKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKzAxMjM0NTY3ODkKKzwvZGF0YTE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCAyMDAgSWYtTW9kaWZpZWQtU2luY2Ugd2l0aCBvbGQrbmV3IGRvY3VtZW50cworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMTI4IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMTI4MDAwMSAteiAiZGVjIDEyIDEyOjAwOjAwIDE5OTkgR01UIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzExMjggSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorSWYtTW9kaWZpZWQtU2luY2U6IFN1biwgMTIgRGVjIDE5OTkgMTI6MDA6MDAgR01UDQorDQorR0VUIC8xMTI4MDAwMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitJZi1Nb2RpZmllZC1TaW5jZTogU3VuLCAxMiBEZWMgMTk5OSAxMjowMDowMCBHTVQNCisNCis8L3Byb3RvY29sPgorCis8c3Rkb3V0PgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMYXN0LU1vZGlmaWVkOiBUdWUsIDEzIEp1biAxOTgwIDEyOjEwOjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDExCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDEgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDIgMTI6MTA6MDAgR01UCitDb250ZW50LUxlbmd0aDogMTEKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKzAxMjM0NTY3ODkKKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEyOSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ3MTQxYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMjkKQEAgLTAsMCArMSw5NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBPU1QKK0V4cGVjdDogMTAwLWNvbnRpbnVlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgNDA0IE5PT09PT09PT08KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCistZm9vLQorPC9kYXRhPgorCis8ZGF0YTE+CitIVFRQLzEuMSA0MDQgTkVJVEhFUgorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDYKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKy1mb28tCis8L2RhdGExPgorCisjIHdlIHVzZSBza2lwIHRvIG1ha2UgdGhlIHRlc3Qgc2VydmVyIG5ldmVyIHJlYWQgdGhlIGZ1bGwgcGF5bG9hZCBvZmYKKyMgdGhlIHNvY2tldCBhbmQgaW5zdGVhZCByZXR1cm4gdGhlIHJlc3BvbnNlIGF0IG9uY2UgCis8c2VydmVyY21kPgorc2tpcDogMTAyNQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorIyAxMDI1IHggJ3gnCis8ZmlsZSBuYW1lPSJsb2cvZmlsZTExMjkiPgorWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKKzwvZmlsZT4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgUE9TVCBleHBlY3QgMTAwLWNvbnRpbnVlIHdpdGggYSA0MDQKKyA8L25hbWU+CisgPGNvbW1hbmQgb3B0aW9uPSJuby1vdXRwdXQiPgorLWQgQGxvZy9maWxlMTEyOSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTEyOSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTEyOTAwMDEKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdGRvdXQ+CitIVFRQLzEuMSA0MDQgTk9PT09PT09PTworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDYKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKy1mb28tCitIVFRQLzEuMSA0MDQgTkVJVEhFUgorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDYKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKy1mb28tCis8L3N0ZG91dD4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUE9TVCAvMTEyOSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMTAyNQ0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitQT1NUIC8xMTI5MDAwMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMTAyNQ0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNDYyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTMKQEAgLTAsMCArMSwzNyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2VydmVyY21kPgorUkVQTFkgVVNFUiAzMTQgYmx1YWggeW91IGZld2whCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBkb3dubG9hZCwgZmFpbGVkIGxvZ2luOiBVU0VSIG5vdCB2YWxpZAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTEzCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNjcKKzwvZXJyb3Jjb2RlPgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTEzMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIxZTU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMzAKQEAgLTAsMCArMSw5NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBPU1QKK0V4cGVjdDogMTAwLWNvbnRpbnVlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgNDA0IE5PT09PT09PT08KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCistZm9vLQorPC9kYXRhPgorCis8ZGF0YTE+CitIVFRQLzEuMSA0MDQgTkVJVEhFUgorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDYKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKy1mb28tCis8L2RhdGExPgorCisjIHdlIHVzZSBza2lwIHRvIG1ha2UgdGhlIHRlc3Qgc2VydmVyIG5ldmVyIHJlYWQgdGhlIGZ1bGwgcGF5bG9hZCBvZmYKKyMgdGhlIHNvY2tldCBhbmQgaW5zdGVhZCByZXR1cm4gdGhlIHJlc3BvbnNlIGF0IG9uY2UgCis8c2VydmVyY21kPgorc2tpcDogMTAwCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+CisjIDEwMCB4ICd4JworPGZpbGUgbmFtZT0ibG9nL2ZpbGUxMTMwIj4KK1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKKzwvZmlsZT4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgUE9TVCBmb3JjZWQgZXhwZWN0IDEwMC1jb250aW51ZSB3aXRoIGEgNDA0CisgPC9uYW1lPgorIDxjb21tYW5kIG9wdGlvbj0ibm8tb3V0cHV0Ij4KKy1kIEBsb2cvZmlsZTExMzAgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzExMzAgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzExMzAwMDAxIC1IICJFeHBlY3Q6IDEwMC1jb250aW51ZSIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdGRvdXQ+CitIVFRQLzEuMSA0MDQgTk9PT09PT09PTworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDYKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKy1mb28tCitIVFRQLzEuMSA0MDQgTkVJVEhFUgorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDYKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKy1mb28tCis8L3N0ZG91dD4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUE9TVCAvMTEzMCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KK0NvbnRlbnQtTGVuZ3RoOiAxMDANCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK1BPU1QgLzExMzAwMDAxIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorQ29udGVudC1MZW5ndGg6IDEwMA0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExMzEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODQzYWYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTMxCkBAIC0wLDAgKzEsOTUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQVVQKK0V4cGVjdDogMTAwLWNvbnRpbnVlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgNDAwIE5PT09PT09PT08KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA5CitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCitGQUlMVVJFMQorPC9kYXRhPgorCis8ZGF0YTE+CitIVFRQLzEuMSA0MDAgTkVJVEhFUgorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDkKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKK0ZBSUxVUkUyCis8L2RhdGExPgorCisjIHdlIHVzZSBza2lwIHRvIG1ha2UgdGhlIHRlc3Qgc2VydmVyIG5ldmVyIHJlYWQgdGhlIGZ1bGwgcGF5bG9hZCBvZmYKKyMgdGhlIHNvY2tldCBhbmQgaW5zdGVhZCByZXR1cm4gdGhlIHJlc3BvbnNlIGF0IG9uY2UgCis8c2VydmVyY21kPgorc2tpcDogMTAwCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+CisjIDEwMCB4ICd4JworPGZpbGUgbmFtZT0ibG9nL2ZpbGUxMTMxIj4KK1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorPC9maWxlPgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQVVQgZXhwZWN0IDEwMC1jb250aW51ZSB3aXRoIGEgNDAwCisgPC9uYW1lPgorIDxjb21tYW5kIG9wdGlvbj0ibm8tb3V0cHV0Ij4KKy1UIGxvZy9maWxlMTEzMSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTEzMSAtVCBsb2cvZmlsZTExMzEgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzExMzEwMDAxCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3Rkb3V0PgorSFRUUC8xLjEgNDAwIE5PT09PT09PT08KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA5CitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCitGQUlMVVJFMQorSFRUUC8xLjEgNDAwIE5FSVRIRVIKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA5CitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCitGQUlMVVJFMgorPC9zdGRvdXQ+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BVVCAvMTEzMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMTAwDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitQVVQgLzExMzEwMDAxIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAxMDANCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYxMWFlZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExNApAQCAtMCwwICsxLDM4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBQQVNTIDMxNCBibHVhaCB5b3UgZjAwbCEKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRvd25sb2FkLCBmYWlsZWQgbG9naW46IFBBU1Mgbm90IHZhbGlkCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8xMTQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis2NworPC9lcnJvcmNvZGU+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzdhN2U5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTE1CkBAIC0wLDAgKzEsNDQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNlcnZlcmNtZD4KK1JFUExZIFBBU1YgMzE0IGJsdWFoIHlvdSBmMDBsIQorUkVQTFkgRVBTViAzMTQgYmx1YWggeW91IGYwMGwhCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBkb3dubG9hZCwgZmFpbGVkIFBBU1YKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzExNQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzEzCis8L2Vycm9yY29kZT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorUEFTVg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTE2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMzZmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTYKQEAgLTAsMCArMSw1NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BPUlQKK0ZBSUxVUkUKK0VQUlQgcmVmdXNlZAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBFUFJUIDUwMCB3ZSBkb24ndCBsaWtlIEVQUlQgbm93CitSRVBMWSBQT1JUIDMxNCBibHVhaCB5b3UgZjAwbCEKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIyBFUFJUIGlzIG9ubHkgc2VudCB3aGVuIElQdjYgaXMgZW5hYmxlZAorPGZlYXR1cmVzPgoraXB2NgorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0ZUUCBkb3dubG9hZCwgZmFpbGVkIFBPUlQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzExNiAtUCAxLjIuMy40Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMzAKKzwvZXJyb3Jjb2RlPgorIyBTdHJpcCB0aGUgcG9ydCBudW1iZXIgYnV0IGxlYXZlIHRoZSByZXN0Cis8c3RyaXBwYXJ0Pgorcy9eKFBPUlQgXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfSwpXGR7MSwzfSxcZHsxLDN9LyQxLworcy9eKEVQUlQgXHwxXHxcZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XHwpXGR7MSw1fVx8LyQxLworPC9zdHJpcHBhcnQ+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBSVCB8MXwxLjIuMy40fA0KK1BPUlQgMSwyLDMsNCwNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExNyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDExNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2FhZDBkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTE3CkBAIC0wLDAgKzEsNDQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNlcnZlcmNtZD4KK1JFUExZIEVQU1YgMzE0IGJsdWFoIHlvdSBmMDBsIQorUkVQTFkgVFlQRSAzMTQgYmx1YWggeW91IGYwMGwhCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBkb3dubG9hZCwgZmFpbGVkIFRZUEUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzExNworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzE3Cis8L2Vycm9yY29kZT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorUEFTVg0KK1RZUEUgSQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTE4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDA4NmMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTgKQEAgLTAsMCArMSw0OCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK1JFVFIKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2VydmVyY21kPgorUkVQTFkgUkVUUiAzMTQgYmx1YWggeW91IGYwMGwhCitSRVBMWSBFUFNWIDMxNCBibHVhaCB5b3UgZjAwbCEKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRvd25sb2FkLCBmYWlsZWQgUkVUUgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTE4Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMTkKKzwvZXJyb3Jjb2RlPgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitQQVNWDQorVFlQRSBJDQorU0laRSAxMTgNCitSRVRSIDExOA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTE5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTE5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYTI0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMTkKQEAgLTAsMCArMSw1MCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BPUlQKK1JFVFIKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2VydmVyY21kPgorUkVQTFkgUkVUUiAzMTQgYmx1YWggeW91IGYwMGwhCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBkb3dubG9hZCwgZmFpbGVkIFJFVFIgd2l0aCBQT1JUCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8xMTkgLVAgLQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzE5Cis8L2Vycm9yY29kZT4KKyMgU3RyaXAgYWxsIHZhbGlkIGtpbmRzIG9mIFBPUlQgYW5kIEVQUlQgdGhhdCBjdXJsIGNhbiBzZW5kCis8c3RyaXA+CiteUE9SVCBcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfQorXkVQUlQgXHwxXHxcZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XHxcZHsxLDV9XHwKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorVFlQRSBJDQorU0laRSAxMTkNCitSRVRSIDExOQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWI4OTFhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIKQEAgLTAsMCArMSw1NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorQ29udGVudC1SYW5nZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDYgUGFydGlhbCBDb250ZW50DQorRGF0ZTogTW9uLCAxMyBOb3YgMjAwMCAxMzo0MTowOSBHTVQNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMTEgKFVuaXgpIFBIUC8zLjAuMTQNCitMYXN0LU1vZGlmaWVkOiBUdWUsIDEzIEp1biAyMDAwIDEyOjEwOjAwIEdNVA0KK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiDQorQWNjZXB0LVJhbmdlczogYnl0ZXMNCitDb250ZW50LUxlbmd0aDogMTAxDQorQ29udGVudC1SYW5nZTogYnl0ZXMgMTAwLTIwMC8zNTI3DQorQ29ubmVjdGlvbjogY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KKw0KKy4ucGFydGlhbCBkYXRhIHJldHVybmVkIGZyb20gdGhlCitzZXJ2ZXIgYXMgYSByZXN1bHQgb2Ygc2V0dGluZyBhbiBleHBsaWNpdCBieXRlIHJhbmdlCitpbiB0aGUgcmVxdWVzdAorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgcmFuZ2Ugc3VwcG9ydAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzEyIC1yIDEwMC0yMDAKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzEyIEhUVFAvMS4xDQorUmFuZ2U6IGJ5dGVzPTEwMC0yMDANCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWQ0OWY1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIwCkBAIC0wLDAgKzEsNTMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitSRVRSCitwb3N0LXF1b3RlCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitkYXRhCisgICAgdG8KKyAgICAgIHNlZQordGhhdCBGVFAKK3dvcmtzCisgIHNvIGRvZXMgaXQ/Cis8L2RhdGE+Cis8c2VydmVyY21kPgorUkVQTFkgRVBTViAzMTQgYmx1YWggeW91IGYwMGwhCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK2Z0cCBkb3dubG9hZCB3aXRoIHBvc3QtcXVvdGUgZGVsZXRlIG9wZXJhdGlvbgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTIwIC1RICItREVMRSBmaWxlIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitQQVNWDQorVFlQRSBJDQorU0laRSAxMjANCitSRVRSIDEyMA0KK0RFTEUgZmlsZQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIwMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExMTU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMDAKQEAgLTAsMCArMSwzOSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitHT1BIRVIKK0lOREVYCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2lNZW51IHJlc3VsdHMJCWVycm9yLmhvc3QJMQ0KKzBTZWxlY3RvciAJL2JhcgliYXIuZm9vLmludmFsaWQJNzANCisuDQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citnb3BoZXIKKzwvc2VydmVyPgorIDxuYW1lPgorR29waGVyIGluZGV4CisgPC9uYW1lPgorIDxjb21tYW5kPgorZ29waGVyOi8vJUhPU1RJUDolR09QSEVSUE9SVC8xLzEyMDAKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KKy8xMjAwDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMDEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYTlmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjAxCkBAIC0wLDAgKzEsMzkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorR09QSEVSCitTRUxFQ1RPUgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitpTWVudSByZXN1bHRzCQllcnJvci5ob3N0CTENCiswU2VsZWN0b3IgL3NlbGVjdG9yL1NFTEVDVE9SCS9iYXIJYmFyLmZvby5pbnZhbGlkCTcwDQorLg0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZ29waGVyCis8L3NlcnZlcj4KKyA8bmFtZT4KK0dvcGhlciBzZWxlY3RvcgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2dvcGhlcjovLyVIT1NUSVA6JUdPUEhFUlBPUlQvMS9zZWxlY3Rvci9TRUxFQ1RPUi8xMjAxCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+Cisvc2VsZWN0b3IvU0VMRUNUT1IvMTIwMQ0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjAyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2QyNzBhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIwMgpAQCAtMCwwICsxLDQwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0dPUEhFUgorUVVFUlkKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgoraVNlYXJjaCByZXN1bHRzCQllcnJvci5ob3N0CTENCiswUXVlcnkgcXVlcnkgc3VjY2VlZGVkCS9mb28JZm9vLmJhci5pbnZhbGlkCTcwDQorMFNlbGVjdG9yIC90aGUvc2VhcmNoL2VuZ2luZQkvYmFyCWJhci5mb28uaW52YWxpZAk3MA0KKy4NCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2dvcGhlcgorPC9zZXJ2ZXI+CisgPG5hbWU+CitHb3BoZXIgcXVlcnkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CisiZ29waGVyOi8vJUhPU1RJUDolR09QSEVSUE9SVC83L3RoZS9zZWFyY2gvZW5naW5lP3F1ZXJ5JTIwc3VjY2VlZGVkLzEyMDIiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CisvdGhlL3NlYXJjaC9lbmdpbmUJcXVlcnkgc3VjY2VlZGVkLzEyMDINCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIwMyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkMDk0ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMDMKQEAgLTAsMCArMSw0MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitHT1BIRVItaXB2NgorSVB2NgorSU5ERVgKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgoraU1lbnUgcmVzdWx0cwkJZXJyb3IuaG9zdAkxDQorMFNlbGVjdG9yIAkvYmFyCWJhci5mb28uaW52YWxpZAk3MA0KKy4NCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgoraXB2NgorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+Citnb3BoZXItaXB2NgorPC9zZXJ2ZXI+CisgPG5hbWU+CitHb3BoZXIgSVB2NiBpbmRleAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1nIGdvcGhlcjovLyVIT1NUNklQOiVHT1BIRVI2UE9SVC8xL21vby8xMjAzCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CisvbW9vLzEyMDMNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIwNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1MDJmYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMDQKQEAgLTAsMCArMSw3OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBCYXNpYyBhdXRoCistLWFueWF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2JvdW5jZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBYLU1vYmlsZU1lLUF1dGhUb2tlbiByZWFsbT0iTmV3Y2FzdGxlIiwgQmFzaWMgcmVhbG09ImZ1biBmdW4gIGZ1biINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDI2DQorDQorVGhpcyBpcyBub3QgdGhlIHJlYWwgcGFnZQorPC9kYXRhPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgdGhlIHNlY29uZCByZXF1ZXN0Cis8ZGF0YTE+CitIVFRQLzEuMSAyMDAgT0sNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyMw0KKw0KK1RoaXMgSVMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YTE+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3Nib3VuY2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogWC1Nb2JpbGVNZS1BdXRoVG9rZW4gcmVhbG09Ik5ld2Nhc3RsZSIsIEJhc2ljIHJlYWxtPSJmdW4gZnVuICBmdW4iDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyNg0KKw0KK0hUVFAvMS4xIDIwMCBPSw0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDIzDQorDQorVGhpcyBJUyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggV1dXLUF1dGhlbnRpY2F0ZSBhbmQgbXVsdGlwbGUgYXV0aHMgaW4gYSBzaW5nbGUgbGluZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMjA0IC11IHRlc3R1c2VyOnRlc3RwYXNzIC0tYW55YXV0aAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzEyMDQgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC8xMjA0IEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogQmFzaWMgZEdWemRIVnpaWEk2ZEdWemRIQmhjM009DQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjA1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDdiYjdiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIwNQpAQCAtMCwwICsxLDUwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHkgbmFtZT0iMTIwNSI+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorRnVubnktaGVhZDogQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZW5kb2Z0aGVtCisKKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBHRVQgd2l0aCAxOEsgSFRUUCBoZWFkZXIKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTIwNQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzEyMDUgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMDYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjA2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODUzZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjA2CkBAIC0wLDAgKzEsNTMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQT1JUCitSRVRSCitOT0RBVEFDT05ONDI1Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK3NvbWUgYnl0ZXMKKzwvZGF0YT4KKzxzZXJ2ZXJjbWQ+CitOT0RBVEFDT05ONDI1Cis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBQT1JUIGFuZCA0MjUgb24gZG93bmxvYWQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLW1heC10aW1lICVGVFBUSU1FMiBmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzEyMDYgLVAgLQorPC9jb21tYW5kPgorCis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXBwYXJ0Pgorcy9eRVBSVCBcfDFcfCguKikvRVBSVCBcfDFcfC8KKzwvc3RyaXBwYXJ0PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQUlQgfDF8CitUWVBFIEkNCitTSVpFIDEyMDYNCitSRVRSIDEyMDYNCitRVUlUDQorPC9wcm90b2NvbD4KKzxlcnJvcmNvZGU+CisxMAorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjA3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIwNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODNlNDZkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIwNwpAQCAtMCwwICsxLDUzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUE9SVAorUkVUUgorTk9EQVRBQ09OTjQyMQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+Citzb21lIGJ5dGVzCis8L2RhdGE+Cis8c2VydmVyY21kPgorTk9EQVRBQ09OTjQyMQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgUE9SVCBhbmQgNDIxIG9uIGRvd25sb2FkCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1tYXgtdGltZSAlRlRQVElNRTIgZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8xMjA3IC1QIC0KKzwvY29tbWFuZD4KKworPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwcGFydD4KK3MvXkVQUlQgXHwxXHwoLiopL0VQUlQgXHwxXHwvCis8L3N0cmlwcGFydD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFJUIHwxfAorVFlQRSBJDQorU0laRSAxMjA3DQorUkVUUiAxMjA3DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorMTAKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIwOCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkNDI4YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMDgKQEAgLTAsMCArMSw1MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BPUlQKK1JFVFIKK05PREFUQUNPTk4xNTAKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorc29tZSBieXRlcworPC9kYXRhPgorPHNlcnZlcmNtZD4KK05PREFUQUNPTk4xNTAKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIFBPUlQgZG93bmxvYWQsIG5vIGRhdGEgY29ubiBhbmQgbm8gdHJhbnNpZW50IG5lZ2F0aXZlIHJlcGx5CisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1tYXgtdGltZSAlRlRQVElNRTIgZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8xMjA4IC1QIC0KKzwvY29tbWFuZD4KKworPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwcGFydD4KK3MvXkVQUlQgXHwxXHwoLiopL0VQUlQgXHwxXHwvCis8L3N0cmlwcGFydD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFJUIHwxfAorVFlQRSBJDQorU0laRSAxMjA4DQorUkVUUiAxMjA4DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorMTIKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIwOSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4NjgyOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMDkKQEAgLTAsMCArMSw1OCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BPUlQKK1JFVFIKK05PREFUQUNPTk4KKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorc29tZSBieXRlcworPC9kYXRhPgorPHNlcnZlcmNtZD4KK05PREFUQUNPTk4KKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIFBPUlQgZG93bmxvYWQsIG5vIGRhdGEgY29ubiBhbmQgbm8gcG9zaXRpdmUgcHJlbGltaW5hcnkgcmVwbHkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLW1heC10aW1lICVGVFBUSU1FMiBmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzEyMDkgLVAgLQorPC9jb21tYW5kPgorCis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXBwYXJ0Pgorcy9eRVBSVCBcfDFcfCguKikvRVBSVCBcfDFcfC8KKzwvc3RyaXBwYXJ0PgorCisjIFRoZSBwcm90b2NvbCBwYXJ0IGRvZXMgbm90IGluY2x1ZGUgUVVJVCBzaW1wbHkgYmVjYXVzZSB0aGUgZXJyb3IgaXMKKyMgQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUICgyOCkgd2hpY2ggaXMgYSBnZW5lcmljIHRpbWVvdXQgZXJyb3Igd2l0aG91dAorIyBzcGVjaWZpY2x5IHNheWluZyBmb3Igd2hpY2ggY29ubmVjdGlvbiBpdCBjb25jZXJucywgYW5kIGZvciB0aW1lb3V0cyBsaWJjdXJsCisjIG1hcmtzIHRoZSBjb250cm9sIGNoYW5uZWwgYXMgImludmFsaWQiLiBBcyB0aGlzIHRlc3QgY2FzZSB0aW1lcyBvdXQgZm9yIHRoZQorIyBkYXRhIGNvbm5lY3Rpb24gaXQgY291bGQgc3RpbGwgdXNlIHRoZSBjb250cm9sIGNoYW5uZWwuCis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBSVCB8MXwKK1RZUEUgSQ0KK1NJWkUgMTIwOQ0KK1JFVFIgMTIwOQ0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorMjgKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlN2E1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjEKQEAgLTAsMCArMSw1MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0VQU1YKK1JFVFIKK3Bvc3QtcXVvdGUKK3ByZS1xdW90ZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorZnRwIGRvd25sb2FkIHdpdGggcG9zdC0gYW5kIHByZS10cmFuc2ZlciBkZWxldGUgb3BlcmF0aW9ucworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTIxIC1RICItREVMRSBhZnRlcl90cmFuc2ZlciIgLVEgIkRFTEUgYmVmb3JlX3RyYW5zZmVyIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0RFTEUgYmVmb3JlX3RyYW5zZmVyDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMTIxDQorUkVUUiAxMjENCitERUxFIGFmdGVyX3RyYW5zZmVyDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjEwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjkzMTk4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIxMApAQCAtMCwwICsxLDYzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCistSgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisxMjM0NQorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKyMgdGhpcyByZWxpZXMgb24gdGhlIGRlYnVnIGZlYXR1cmUgdG8gYWxsb3cgdXMgdG8gc2V0IGRpcmVjdG9yeSB0byBzdG9yZSB0aGUKKyMgLU8gb3V0cHV0IGluLCB1c2luZyB0aGUgQ1VSTF9URVNURElSIHZhcmlhYmxlCis8ZmVhdHVyZXM+CitkZWJ1ZworPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxuYW1lPgorSFRUUCBHRVQgd2l0aCAtSiB3aXRob3V0IENvbnRlbnQtRGlzcG9zaXRpb24KKzwvbmFtZT4KKzxzZXRlbnY+CitDVVJMX1RFU1RESVI9JVBXRC9sb2cKKzwvc2V0ZW52PgorPGNvbW1hbmQgb3B0aW9uPSJuby1vdXRwdXQsbm8taW5jbHVkZSI+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTIxMCAtSiAtTworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzEyMTAgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzxmaWxlIG5hbWU9ImxvZy8xMjEwIj4KKzEyMzQ1Cis8L2ZpbGU+CisKKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMTEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MThhODUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjExCkBAIC0wLDAgKzEsNTMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQT1JUCitSRVRSCitOT0RBVEFDT05ONDI1Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK3NvbWUgYnl0ZXMKKzwvZGF0YT4KKzxzZXJ2ZXJjbWQ+CitOT0RBVEFDT05ONDI1Cis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBQT1JUIGFuZCA0MjUgb24gZG93bmxvYWQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzEyMTEgLVAgLQorPC9jb21tYW5kPgorCis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXBwYXJ0Pgorcy9eRVBSVCBcfDFcfCguKikvRVBSVCBcfDFcfC8KKzwvc3RyaXBwYXJ0PgorCis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBSVCB8MXwKK1RZUEUgSQ0KK1NJWkUgMTIxMQ0KK1JFVFIgMTIxMQ0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorMjgKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMWRkMDUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjIKQEAgLTAsMCArMSw0NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK1Jlc3VtZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzaXplPgorNQorPC9zaXplPgorPHNlcnZlcmNtZD4KK1JFUExZIEVQU1YgNTAwIG5vIHN1Y2ggY29tbWFuZAorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgZG93bmxvYWQgcmVzdW1lIHdpdGggd2hvbGUgZmlsZSBhbHJlYWR5IGRvd25sb2FkZWQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzEyMiAtQyA1Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1BBU1YNCitUWVBFIEkNCitTSVpFIDEyMg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIyMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2NTI0OQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMjAKQEAgLTAsMCArMSwzMCBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2ZpbGUKKzwvc2VydmVyPgorIDxuYW1lPgorZmlsZTovLyBVUkxzIHdpdGggcXVlcnkgc3RyaW5nCisgPC9uYW1lPgorIDxjb21tYW5kPgorZmlsZTovL2xvY2FsaG9zdC8lUFdEL2xvZy90ZXN0MTIyMC50eHQ/YV9xdWVyeT1mb29iYXIjYWZyYWdtZW50Cis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDEyMjAudHh0Ij4KK2NvbnRlbnRzIGluIGEgc2luZ2xlIGZpbGUKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdGRvdXQ+Citjb250ZW50cyBpbiBhIHNpbmdsZSBmaWxlCis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmJmY2U5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTIzCkBAIC0wLDAgKzEsNDAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitFUFNWCitSZXN1bWUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgdXBsb2FkIHJlc3VtZSB3aXRoIHdob2xlIGZpbGUgYWxyZWFkeSBkb3dubG9hZGVkCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8xMjMgLVQgbG9nL3VwbG9hZDEyMyAtQyA1MQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3VwbG9hZDEyMyI+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTVkODczCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTI0CkBAIC0wLDAgKzEsNDcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitSRVRSCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cit3ZSBjYW4gc3RpbGwgc2VuZCBkYXRhIGV2ZW4gaWYgcHdkIGZhaWxzIQorPC9kYXRhPgorPHNlcnZlcmNtZD4KK1JFUExZIFBXRCAzMTQgYmx1YWggeW91IGYwMGwhCitSRVBMWSBFUFNWIDMxNCBibHVhaCB5b3UgZjAwbCEKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRvd25sb2FkLCBmYWlsZWQgUFdECisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8xMjQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorUEFTVg0KK1RZUEUgSQ0KK1NJWkUgMTI0DQorUkVUUiAxMjQNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njc3YWViCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTI1CkBAIC0wLDAgKzEsNDEgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNlcnZlcmNtZD4KK1JFUExZIENXRCAzMTQgYmx1YWggeW91IGYwMGwhCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBkb3dubG9hZCwgZmFpbGVkIENXRAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvcGF0aC90by9maWxlLzEyNQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzkKKzwvZXJyb3Jjb2RlPgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBwYXRoDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3MjIxNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyNgpAQCAtMCwwICsxLDQ4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorRVBTVgorUkVUUgorUkVUUldFSVJETworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgordGhpcyBpcyBmaWxlIGNvbnRlbnRzCis8L2RhdGE+Cis8c2VydmVyY21kPgorUkVUUldFSVJETworPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgZG93bmxvYWQgd2l0aCBtdWx0aXBsZSByZXBsaWVzIGF0IG9uY2UgaW4gUkVUUgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvYmxhbGJsYS9sdWx1bHVsLzEyNgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBibGFsYmxhDQorQ1dEIGx1bHVsdWwNCitFUFNWDQorVFlQRSBJDQorU0laRSAxMjYNCitSRVRSIDEyNg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTI3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTI3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNDZkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjcKQEAgLTAsMCArMSw0NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK1JFVFIKKy0tZGlzYWJsZS1lcHN2Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cittb29vb29vb28KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCAtLWRpc2FibGUtZXBzdgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvcGF0aC90by9maWxlLzEyNyAtLWRpc2FibGUtZXBzdgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBwYXRoDQorQ1dEIHRvDQorQ1dEIGZpbGUNCitQQVNWDQorVFlQRSBJDQorU0laRSAxMjcNCitSRVRSIDEyNw0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTI4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTI4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0M2NkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjgKQEAgLTAsMCArMSw1NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0VQU1YKK1NUT1IKKy0tY3JsZgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCB1cGxvYWQgd2l0aCAtLWNybGYKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzEyOCAtVCBsb2cvdXBsb2FkMTI4IC0tY3JsZgorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3VwbG9hZDEyOCI+CitmaWxlCit3aXRoIHVuaXggbmV3bGluZXMKK21lYW50IHRvIGJlCitjb252ZXJ0ZWQKK3dpdGgKK3RoZQorLS1jcmxmIG9wdGlvbgorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitTVE9SIDEyOA0KK1FVSVQNCis8L3Byb3RvY29sPgorPHVwbG9hZD4KK2ZpbGUNCit3aXRoIHVuaXggbmV3bGluZXMNCittZWFudCB0byBiZQ0KK2NvbnZlcnRlZA0KK3dpdGgNCit0aGUNCistLWNybGYgb3B0aW9uDQorPC91cGxvYWQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YxZTgzOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEyOQpAQCAtMCwwICsxLDUyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorRVBTVgorVFlQRSBBCitSRVRSCit0eXBlPQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzaXplPgorMzcKKzwvc2l6ZT4KKzxkYXRhPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIEdFVCB3aXRoIHR5cGU9QSBzdHlsZSBBU0NJSSBVUkwgYW5kIHVuZGVyc3RhdGVkIHNlcnZlciBTSVpFCisgPC9uYW1lPgorIDxjb21tYW5kPgorImZ0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTI5O3R5cGU9QSIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBBDQorU0laRSAxMjkNCitSRVRSIDEyOQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Zjk5N2YwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMKQEAgLTAsMCArMSw0NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIGN1c3RvbSByZXF1ZXN0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgUmVhZCB5b3UKK0NvbnRlbnQtTGVuZ3RoOiAyOQ0KK0RlbGV0ZWQ6IHN1cHBvc2Ugd2UgZ290IGEgaGVhZGVyIGxpa2UgdGhpcyEgOy0pCisKK2JsYWJsYSBjdXN0b20gcmVxdWVzdCByZXN1bHQKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIGN1c3RvbSByZXF1ZXN0ICdERUxFVEUnCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvMTMgLVggREVMRVRFCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0RFTEVURSAvd2FudC8xMyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYzQ2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzAKQEAgLTAsMCArMSw2MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0VQU1YKK0xJU1QKK25ldHJjCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIChvcHRpb25hbCAubmV0cmM7IG5vIHVzZXIvcGFzcykgZGlyIGxpc3QgUEFTVgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tbmV0cmMtb3B0aW9uYWwgLS1uZXRyYy1maWxlIGxvZy9uZXRyYzEzMCBmdHA6Ly8lSE9TVElQOiVGVFBQT1JULworPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL25ldHJjMTMwIiA+CisjIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIHdlcmUgY3JlYXRlZCB3aGlsZSB0ZXN0aW5nIGN1cmwKK21hY2hpbmUgJUhPU1RJUCBsb2dpbiB1c2VyMSBwYXNzd29yZCBwYXNzd2QxCittYWNoaW5lICVIT1NUSVAgbG9naW4gdXNlcjIgcGFzc3dvcmQgcGFzc3dkMgorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiB1c2VyMQ0KK1BBU1MgcGFzc3dkMQ0KK1BXRA0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzAwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDA4ODg1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwMApAQCAtMCwwICsxLDI2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK3VuaXR0ZXN0CitsbGlzdAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK3VuaXR0ZXN0Cis8L2ZlYXR1cmVzPgorIDxuYW1lPgorbGxpc3QgdW5pdCB0ZXN0cworIDwvbmFtZT4KKzx0b29sPgordW5pdDEzMDAKKzwvdG9vbD4KKzwvY2xpZW50PgorCis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI2ZmFjOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMDEKQEAgLTAsMCArMSwyNiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+Cit1bml0dGVzdAorY3VybF9zdHJlcXVhbAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK3VuaXR0ZXN0Cis8L2ZlYXR1cmVzPgorIDxuYW1lPgorY3VybF9zdHJlcXVhbCB1bml0IHRlc3RzCisgPC9uYW1lPgorPHRvb2w+Cit1bml0MTMwMQorPC90b29sPgorPC9jbGllbnQ+CisKKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzAyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2VhODYyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwMgpAQCAtMCwwICsxLDI2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK3VuaXR0ZXN0CitiYXNlNjQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+Cit1bml0dGVzdAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK2Jhc2U2NCBlbmNvZGUvZGVjb2RlIHVuaXQgdGVzdHMKKyA8L25hbWU+Cis8dG9vbD4KK3VuaXQxMzAyCis8L3Rvb2w+Cis8L2NsaWVudD4KKworPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMDMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNWI0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzAzCkBAIC0wLDAgKzEsMjYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgordW5pdHRlc3QKK0N1cmxfdGltZWxlZnQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+Cit1bml0dGVzdAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0N1cmxfdGltZWxlZnQgdW5pdCB0ZXN0cworIDwvbmFtZT4KKzx0b29sPgordW5pdDEzMDMKKzwvdG9vbD4KKzwvY2xpZW50PgorCis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxOGRlOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMDQKQEAgLTAsMCArMSwzMCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+Cit1bml0dGVzdAorbmV0cmMKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+Cit1bml0dGVzdAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK25ldHJjIHBhcnNpbmcgdW5pdCB0ZXN0cworIDwvbmFtZT4KKzx0b29sPgordW5pdDEzMDQKKzwvdG9vbD4KKzxmaWxlIG5hbWU9ImxvZy9uZXRyYzEzMDQiPgorbWFjaGluZSBleGFtcGxlLmNvbSBsb2dpbiBhZG1pbiBwYXNzd29yZCBwYXNzd2QKK21hY2hpbmUgY3VybC5leGFtcGxlLmNvbSBsb2dpbiBub25lIHBhc3N3b3JkIG5vbmUKKzwvZmlsZT4KKzwvY2xpZW50PgorCis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExNDliMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMDUKQEAgLTAsMCArMSwzMCBAQAorPHRlc3RjYXNlPgorPCEtLSBUaGlzIHJlcGxhY2VzIHRlc3QgNTU4IC0tPgorPGluZm8+Cis8a2V5d29yZHM+Cit1bml0dGVzdAoraGFzaAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK3VuaXR0ZXN0Cis8L2ZlYXR1cmVzPgorIDxuYW1lPgoraW50ZXJuYWwgaGFzaCBjcmVhdGUvZGVzdHJveSB0ZXN0aW5nCisgPC9uYW1lPgorPHRvb2w+Cit1bml0MTMwNQorPC90b29sPgorPGNvbW1hbmQ+CisxMzA1Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMDYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzA2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OTBlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzA2CkBAIC0wLDAgKzEsMzAgQEAKKzx0ZXN0Y2FzZT4KKzwhLS0gVGhpcyByZXBsYWNlcyB0ZXN0IDU1OSAtLT4KKzxpbmZvPgorPGtleXdvcmRzPgordW5pdHRlc3QKK2hhc2gKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+Cit1bml0dGVzdAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK2ludGVybmFsIGhhc2ggY3JlYXRlL2FkZC9kZXN0cm95IHRlc3RpbmcKKyA8L25hbWU+Cis8dG9vbD4KK3VuaXQxMzA1Cis8L3Rvb2w+Cis8Y29tbWFuZD4KKzEzMDYKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwNyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJlZDNjMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMDcKQEAgLTAsMCArMSwyNyBAQAorPHRlc3RjYXNlPgorPCEtLSBUaGlzIHJlcGxhY2VzIHRlc3QgNTc3IC0tPgorPGluZm8+Cis8a2V5d29yZHM+Cit1bml0dGVzdAord2lsZGNhcmRtYXRjaAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK3VuaXR0ZXN0Cis8L2ZlYXR1cmVzPgorIDxuYW1lPgoraW50ZXJuYWwgQ3VybF9mbm1hdGNoKCkgdGVzdGluZworIDwvbmFtZT4KKzx0b29sPgordW5pdDEzMDcKKzwvdG9vbD4KKzwvY2xpZW50PgorCis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwOCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlOTc3MQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMDgKQEAgLTAsMCArMSwzMSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+Cit1bml0dGVzdAorY3VybF9mb3JtYWRkCitjdXJsX2Zvcm1nZXQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+Cit1bml0dGVzdAoraHR0cAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK2Zvcm1wb3N0IHVuaXQgdGVzdHMKKyA8L25hbWU+Cis8dG9vbD4KK3VuaXQxMzA4Cis8L3Rvb2w+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdC0xMzA4Ij4KK1BpZWNlIG9mIHRoZSBmaWxlIHRoYXQgaXMgdG8gdXBsb2FkZWQgYXMgYSBmb3JtcG9zdAorPC9maWxlPgorPC9jbGllbnQ+CisKKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzA5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmY2N2ZmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMwOQpAQCAtMCwwICsxLDE0NTcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgordW5pdHRlc3QKK3NwbGF5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK25vbmUKKzwvc2VydmVyPgorPGZlYXR1cmVzPgordW5pdHRlc3QKKzwvZmVhdHVyZXM+CisgPG5hbWU+CitzcGxheSB1bml0IHRlc3RzCisgPC9uYW1lPgorPHRvb2w+Cit1bml0MTMwOQorPC90b29sPgorPC9jbGllbnQ+CisKKzx2ZXJpZnk+Cis8c3Rkb3V0PgorUmVzdWx0OgorICAgICAgMC4xMDEzWzNdCisgICAgMC4xMDAzWzJdCisgICAgICAwLjk1NFszXQorICAwLjk0NFsxXQorMC45MzRbMF0KKyAgMC44OTVbMV0KKyAgICAgICAgMC44ODVbNF0KKyAgICAgIDAuODc1WzNdCisgICAgICAgIDAuODM2WzRdCisgICAgICAgICAgICAgIDAuODI2WzddCisgICAgICAgICAgICAwLjgxNls2XQorICAgICAgICAgIDAuNzc3WzVdCisgICAgICAgICAgICAgICAgICAwLjc2N1s5XQorICAgICAgICAgICAgICAgIDAuNzU3WzhdCisgICAgICAgICAgICAgIDAuNzE4WzddCisgICAgICAgICAgICAgICAgICAgIDAuNzA4WzEwXQorICAgICAgICAgICAgICAgICAgMC42OThbOV0KKyAgICAgICAgICAgICAgICAwLjY1OVs4XQorICAgICAgICAgICAgICAgICAgMC42NDlbOV0KKyAgICAgICAgICAgICAgICAgICAgMC42MzlbMTBdCisgICAgICAgICAgICAgICAgICAgICAgICAwLjYwMFsxMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMC41OTBbMTNdCisgICAgICAgICAgICAgICAgICAgICAgMC41ODBbMTFdCisgICAgICAgICAgICAwLjU0MVs2XQorICAgICAgICAgICAgICAgICAgMC41MzFbOV0KKyAgICAgICAgICAgICAgICAgICAgMC41MjFbMTBdCisgICAgICAgICAgICAgICAgMC40NzJbOF0KKyAgICAgICAgICAgICAgICAgIDAuNDYyWzldCisgICAgICAgICAgICAgIDAuNDEzWzddCisgICAgMC40MDNbMl0KKyAgICAgIDAuMzkzWzNdCisgICAgICAgICAgMC4zNTRbNV0KKyAgICAgICAgMC4zNDRbNF0KKyAgICAgICAgICAwLjMzNFs1XQorICAgICAgICAgICAgICAwLjI5NVs3XQorICAgICAgICAgICAgMC4yODVbNl0KKyAgICAgICAgICAgICAgMC4yNzVbN10KKyAgICAgICAgICAgICAgICAgIDAuMjM2WzldCisgICAgICAgICAgICAgICAgMC4yMjZbOF0KKyAgICAgICAgICAgICAgICAgIDAuMjE2WzldCisgICAgICAgICAgICAgICAgICAgICAgMC4xNzdbMTFdCisgICAgICAgICAgICAgICAgICAgICAgICAwLjE2N1sxMl0KKyAgICAgICAgICAgICAgICAgICAgMC4xNTdbMTBdCisgICAgICAgICAgICAgICAgICAgICAgMC4xMThbMTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMTA4WzEzXQorICAgICAgICAgICAgICAgICAgICAgICAgMC45OFsxMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMC41OVsxM10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNDlbMTVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4zOVsxNF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMFsxNV0KK1RyZWUgbG9vazoKKyAgICAgIDAuMTAxM1szXQorICAgIDAuMTAwM1syXQorICAgICAgMC45NTRbM10KKyAgMC45NDRbMV0KKzAuOTM0WzBdCisgIDAuODk1WzFdCisgICAgICAgIDAuODg1WzRdCisgICAgICAwLjg3NVszXQorICAgICAgICAwLjgzNls0XQorICAgICAgICAgICAgICAwLjgyNls3XQorICAgICAgICAgICAgMC44MTZbNl0KKyAgICAgICAgICAwLjc3N1s1XQorICAgICAgICAgICAgICAgICAgMC43NjdbOV0KKyAgICAgICAgICAgICAgICAwLjc1N1s4XQorICAgICAgICAgICAgICAwLjcxOFs3XQorICAgICAgICAgICAgICAgICAgICAwLjcwOFsxMF0KKyAgICAgICAgICAgICAgICAgIDAuNjk4WzldCisgICAgICAgICAgICAgICAgMC42NTlbOF0KKyAgICAgICAgICAgICAgICAgIDAuNjQ5WzldCisgICAgICAgICAgICAgICAgICAgIDAuNjM5WzEwXQorICAgICAgICAgICAgICAgICAgICAgICAgMC42MDBbMTJdCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNTkwWzEzXQorICAgICAgICAgICAgICAgICAgICAgIDAuNTgwWzExXQorICAgICAgICAgICAgMC41NDFbNl0KKyAgICAgICAgICAgICAgICAgIDAuNTMxWzldCisgICAgICAgICAgICAgICAgICAgIDAuNTIxWzEwXQorICAgICAgICAgICAgICAgIDAuNDcyWzhdCisgICAgICAgICAgICAgICAgICAwLjQ2Mls5XQorICAgICAgICAgICAgICAwLjQxM1s3XQorICAgIDAuNDAzWzJdCisgICAgICAwLjM5M1szXQorICAgICAgICAgIDAuMzU0WzVdCisgICAgICAgIDAuMzQ0WzRdCisgICAgICAgICAgMC4zMzRbNV0KKyAgICAgICAgICAgICAgMC4yOTVbN10KKyAgICAgICAgICAgIDAuMjg1WzZdCisgICAgICAgICAgICAgIDAuMjc1WzddCisgICAgICAgICAgICAgICAgICAwLjIzNls5XQorICAgICAgICAgICAgICAgIDAuMjI2WzhdCisgICAgICAgICAgICAgICAgICAwLjIxNls5XQorICAgICAgICAgICAgICAgICAgICAgIDAuMTc3WzExXQorICAgICAgICAgICAgICAgICAgICAgICAgMC4xNjdbMTJdCisgICAgICAgICAgICAgICAgICAgIDAuMTU3WzEwXQorICAgICAgICAgICAgICAgICAgICAgIDAuMTE4WzExXQorICAgICAgICAgICAgICAgICAgICAgICAgICAwLjEwOFsxM10KKyAgICAgICAgICAgICAgICAgICAgICAgIDAuOThbMTJdCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNTlbMTNdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjQ5WzE1XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMzlbMTRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjBbMTVdCityZW1vdmUgcG9pbnRlciA3LCBwYXlsb2FkIDcxOAorVHJlZSBsb29rOgorICAgICAgICAgIDAuMTAxM1s1XQorICAgICAgICAwLjEwMDNbNF0KKyAgICAgICAgICAwLjk1NFs1XQorICAgICAgMC45NDRbM10KKyAgICAwLjkzNFsyXQorICAwLjg5NVsxXQorICAgICAgICAwLjg4NVs0XQorICAgICAgMC44NzVbM10KKyAgICAwLjgzNlsyXQorICAgICAgICAgIDAuODI2WzVdCisgICAgICAgIDAuODE2WzRdCisgICAgICAwLjc3N1szXQorICAgICAgICAgIDAuNzY3WzVdCisgICAgICAgIDAuNzU3WzRdCiswLjcwOFswXQorICAgIDAuNjk4WzJdCisgICAgICAwLjY1OVszXQorICAgICAgICAwLjY0OVs0XQorICAgICAgICAgIDAuNjM5WzVdCisgICAgICAgICAgICAgIDAuNjAwWzddCisgICAgICAgICAgICAgICAgMC41OTBbOF0KKyAgICAgICAgICAgIDAuNTgwWzZdCisgIDAuNTQxWzFdCisgICAgICAgICAgMC41MzFbNV0KKyAgICAgICAgICAgIDAuNTIxWzZdCisgICAgICAgIDAuNDcyWzRdCisgICAgICAgICAgMC40NjJbNV0KKyAgICAgIDAuNDEzWzNdCisgICAgMC40MDNbMl0KKyAgICAgIDAuMzkzWzNdCisgICAgICAgICAgMC4zNTRbNV0KKyAgICAgICAgMC4zNDRbNF0KKyAgICAgICAgICAwLjMzNFs1XQorICAgICAgICAgICAgICAwLjI5NVs3XQorICAgICAgICAgICAgMC4yODVbNl0KKyAgICAgICAgICAgICAgMC4yNzVbN10KKyAgICAgICAgICAgICAgICAgIDAuMjM2WzldCisgICAgICAgICAgICAgICAgMC4yMjZbOF0KKyAgICAgICAgICAgICAgICAgIDAuMjE2WzldCisgICAgICAgICAgICAgICAgICAgICAgMC4xNzdbMTFdCisgICAgICAgICAgICAgICAgICAgICAgICAwLjE2N1sxMl0KKyAgICAgICAgICAgICAgICAgICAgMC4xNTdbMTBdCisgICAgICAgICAgICAgICAgICAgICAgMC4xMThbMTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMTA4WzEzXQorICAgICAgICAgICAgICAgICAgICAgICAgMC45OFsxMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMC41OVsxM10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNDlbMTVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4zOVsxNF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMFsxNV0KK3JlbW92ZSBwb2ludGVyIDgsIHBheWxvYWQgMjM2CitUcmVlIGxvb2s6CisgICAgICAgICAgICAgIDAuMTAxM1s3XQorICAgICAgICAgICAgMC4xMDAzWzZdCisgICAgICAgICAgICAgIDAuOTU0WzddCisgICAgICAgICAgMC45NDRbNV0KKyAgICAgICAgMC45MzRbNF0KKyAgICAgIDAuODk1WzNdCisgICAgICAgICAgICAwLjg4NVs2XQorICAgICAgICAgIDAuODc1WzVdCisgICAgICAgIDAuODM2WzRdCisgICAgICAgICAgICAgIDAuODI2WzddCisgICAgICAgICAgICAwLjgxNls2XQorICAgICAgICAgIDAuNzc3WzVdCisgICAgICAgICAgICAgIDAuNzY3WzddCisgICAgICAgICAgICAwLjc1N1s2XQorICAgIDAuNzA4WzJdCisgICAgICAwLjY5OFszXQorICAgICAgICAwLjY1OVs0XQorICAgICAgICAgIDAuNjQ5WzVdCisgICAgICAgICAgICAwLjYzOVs2XQorICAgICAgICAgICAgICAgIDAuNjAwWzhdCisgICAgICAgICAgICAgICAgICAwLjU5MFs5XQorICAgICAgICAgICAgICAwLjU4MFs3XQorICAwLjU0MVsxXQorICAgICAgICAgICAgMC41MzFbNl0KKyAgICAgICAgICAgICAgMC41MjFbN10KKyAgICAgICAgICAwLjQ3Mls1XQorICAgICAgICAgICAgMC40NjJbNl0KKyAgICAgICAgMC40MTNbNF0KKyAgICAgIDAuNDAzWzNdCisgICAgMC4zOTNbMl0KKyAgICAgICAgICAwLjM1NFs1XQorICAgICAgICAwLjM0NFs0XQorICAgICAgMC4zMzRbM10KKyAgICAgICAgICAgIDAuMjk1WzZdCisgICAgICAgICAgMC4yODVbNV0KKyAgICAgICAgMC4yNzVbNF0KKzAuMjI2WzBdCisgIDAuMjE2WzFdCisgICAgICAwLjE3N1szXQorICAgICAgICAwLjE2N1s0XQorICAgIDAuMTU3WzJdCisgICAgICAwLjExOFszXQorICAgICAgICAgIDAuMTA4WzVdCisgICAgICAgIDAuOThbNF0KKyAgICAgICAgICAwLjU5WzVdCisgICAgICAgICAgICAgIDAuNDlbN10KKyAgICAgICAgICAgIDAuMzlbNl0KKyAgICAgICAgICAgICAgMC4wWzddCityZW1vdmUgcG9pbnRlciA5LCBwYXlsb2FkIDc3NworVHJlZSBsb29rOgorICAgICAgICAgICAgMC4xMDEzWzZdCisgICAgICAgICAgMC4xMDAzWzVdCisgICAgICAgICAgICAwLjk1NFs2XQorICAgICAgICAwLjk0NFs0XQorICAgICAgMC45MzRbM10KKyAgICAwLjg5NVsyXQorICAgICAgICAwLjg4NVs0XQorICAgICAgMC44NzVbM10KKyAgMC44MzZbMV0KKyAgICAgIDAuODI2WzNdCisgICAgMC44MTZbMl0KKzAuNzY3WzBdCisgICAgMC43NTdbMl0KKyAgMC43MDhbMV0KKyAgICAgIDAuNjk4WzNdCisgICAgICAgIDAuNjU5WzRdCisgICAgICAgICAgMC42NDlbNV0KKyAgICAgICAgICAgIDAuNjM5WzZdCisgICAgICAgICAgICAgICAgMC42MDBbOF0KKyAgICAgICAgICAgICAgICAgIDAuNTkwWzldCisgICAgICAgICAgICAgIDAuNTgwWzddCisgICAgMC41NDFbMl0KKyAgICAgICAgICAgICAgICAwLjUzMVs4XQorICAgICAgICAgICAgICAgICAgMC41MjFbOV0KKyAgICAgICAgICAgICAgMC40NzJbN10KKyAgICAgICAgICAgICAgICAwLjQ2Mls4XQorICAgICAgICAgICAgMC40MTNbNl0KKyAgICAgICAgICAwLjQwM1s1XQorICAgICAgICAwLjM5M1s0XQorICAgICAgICAgICAgICAwLjM1NFs3XQorICAgICAgICAgICAgMC4zNDRbNl0KKyAgICAgICAgICAwLjMzNFs1XQorICAgICAgICAgICAgICAgIDAuMjk1WzhdCisgICAgICAgICAgICAgIDAuMjg1WzddCisgICAgICAgICAgICAwLjI3NVs2XQorICAgICAgMC4yMjZbM10KKyAgICAgICAgMC4yMTZbNF0KKyAgICAgICAgICAgIDAuMTc3WzZdCisgICAgICAgICAgICAgIDAuMTY3WzddCisgICAgICAgICAgMC4xNTdbNV0KKyAgICAgICAgICAgIDAuMTE4WzZdCisgICAgICAgICAgICAgICAgMC4xMDhbOF0KKyAgICAgICAgICAgICAgMC45OFs3XQorICAgICAgICAgICAgICAgIDAuNTlbOF0KKyAgICAgICAgICAgICAgICAgICAgMC40OVsxMF0KKyAgICAgICAgICAgICAgICAgIDAuMzlbOV0KKyAgICAgICAgICAgICAgICAgICAgMC4wWzEwXQorcmVtb3ZlIHBvaW50ZXIgMTAsIHBheWxvYWQgMjk1CitUcmVlIGxvb2s6CisgICAgICAgICAgICAgICAgMC4xMDEzWzhdCisgICAgICAgICAgICAgIDAuMTAwM1s3XQorICAgICAgICAgICAgICAgIDAuOTU0WzhdCisgICAgICAgICAgICAwLjk0NFs2XQorICAgICAgICAgIDAuOTM0WzVdCisgICAgICAgIDAuODk1WzRdCisgICAgICAgICAgICAwLjg4NVs2XQorICAgICAgICAgIDAuODc1WzVdCisgICAgICAwLjgzNlszXQorICAgICAgICAgIDAuODI2WzVdCisgICAgICAgIDAuODE2WzRdCisgICAgMC43NjdbMl0KKyAgICAgIDAuNzU3WzNdCisgIDAuNzA4WzFdCisgICAgICAwLjY5OFszXQorICAgICAgICAwLjY1OVs0XQorICAgICAgICAgIDAuNjQ5WzVdCisgICAgICAgICAgICAwLjYzOVs2XQorICAgICAgICAgICAgICAgIDAuNjAwWzhdCisgICAgICAgICAgICAgICAgICAwLjU5MFs5XQorICAgICAgICAgICAgICAwLjU4MFs3XQorICAgIDAuNTQxWzJdCisgICAgICAgICAgICAgICAgMC41MzFbOF0KKyAgICAgICAgICAgICAgICAgIDAuNTIxWzldCisgICAgICAgICAgICAgIDAuNDcyWzddCisgICAgICAgICAgICAgICAgMC40NjJbOF0KKyAgICAgICAgICAgIDAuNDEzWzZdCisgICAgICAgICAgMC40MDNbNV0KKyAgICAgICAgMC4zOTNbNF0KKyAgICAgICAgICAgIDAuMzU0WzZdCisgICAgICAgICAgMC4zNDRbNV0KKyAgICAgIDAuMzM0WzNdCiswLjI4NVswXQorICAgIDAuMjc1WzJdCisgIDAuMjI2WzFdCisgICAgMC4yMTZbMl0KKyAgICAgICAgMC4xNzdbNF0KKyAgICAgICAgICAwLjE2N1s1XQorICAgICAgMC4xNTdbM10KKyAgICAgICAgMC4xMThbNF0KKyAgICAgICAgICAgIDAuMTA4WzZdCisgICAgICAgICAgMC45OFs1XQorICAgICAgICAgICAgMC41OVs2XQorICAgICAgICAgICAgICAgIDAuNDlbOF0KKyAgICAgICAgICAgICAgMC4zOVs3XQorICAgICAgICAgICAgICAgIDAuMFs4XQorcmVtb3ZlIHBvaW50ZXIgMTEsIHBheWxvYWQgODM2CitUcmVlIGxvb2s6CisgICAgICAgICAgMC4xMDEzWzVdCisgICAgICAgIDAuMTAwM1s0XQorICAgICAgICAgIDAuOTU0WzVdCisgICAgICAwLjk0NFszXQorICAgIDAuOTM0WzJdCisgIDAuODk1WzFdCisgICAgICAwLjg4NVszXQorICAgIDAuODc1WzJdCiswLjgyNlswXQorICAgIDAuODE2WzJdCisgIDAuNzY3WzFdCisgICAgICAwLjc1N1szXQorICAgIDAuNzA4WzJdCisgICAgICAgICAgMC42OThbNV0KKyAgICAgICAgICAgIDAuNjU5WzZdCisgICAgICAgICAgICAgIDAuNjQ5WzddCisgICAgICAgICAgICAgICAgMC42MzlbOF0KKyAgICAgICAgICAgICAgICAgICAgMC42MDBbMTBdCisgICAgICAgICAgICAgICAgICAgICAgMC41OTBbMTFdCisgICAgICAgICAgICAgICAgICAwLjU4MFs5XQorICAgICAgICAwLjU0MVs0XQorICAgICAgICAgICAgICAgICAgICAwLjUzMVsxMF0KKyAgICAgICAgICAgICAgICAgICAgICAwLjUyMVsxMV0KKyAgICAgICAgICAgICAgICAgIDAuNDcyWzldCisgICAgICAgICAgICAgICAgICAgIDAuNDYyWzEwXQorICAgICAgICAgICAgICAgIDAuNDEzWzhdCisgICAgICAgICAgICAgIDAuNDAzWzddCisgICAgICAgICAgICAwLjM5M1s2XQorICAgICAgICAgICAgICAgIDAuMzU0WzhdCisgICAgICAgICAgICAgIDAuMzQ0WzddCisgICAgICAgICAgMC4zMzRbNV0KKyAgICAgIDAuMjg1WzNdCisgICAgICAgICAgMC4yNzVbNV0KKyAgICAgICAgMC4yMjZbNF0KKyAgICAgICAgICAwLjIxNls1XQorICAgICAgICAgICAgICAwLjE3N1s3XQorICAgICAgICAgICAgICAgIDAuMTY3WzhdCisgICAgICAgICAgICAwLjE1N1s2XQorICAgICAgICAgICAgICAwLjExOFs3XQorICAgICAgICAgICAgICAgICAgMC4xMDhbOV0KKyAgICAgICAgICAgICAgICAwLjk4WzhdCisgICAgICAgICAgICAgICAgICAwLjU5WzldCisgICAgICAgICAgICAgICAgICAgICAgMC40OVsxMV0KKyAgICAgICAgICAgICAgICAgICAgMC4zOVsxMF0KKyAgICAgICAgICAgICAgICAgICAgICAwLjBbMTFdCityZW1vdmUgcG9pbnRlciAxMiwgcGF5bG9hZCAzNTQKK1RyZWUgbG9vazoKKyAgICAgICAgICAgICAgMC4xMDEzWzddCisgICAgICAgICAgICAwLjEwMDNbNl0KKyAgICAgICAgICAgICAgMC45NTRbN10KKyAgICAgICAgICAwLjk0NFs1XQorICAgICAgICAwLjkzNFs0XQorICAgICAgMC44OTVbM10KKyAgICAgICAgICAwLjg4NVs1XQorICAgICAgICAwLjg3NVs0XQorICAgIDAuODI2WzJdCisgICAgICAwLjgxNlszXQorICAwLjc2N1sxXQorICAgICAgMC43NTdbM10KKyAgICAwLjcwOFsyXQorICAgICAgICAwLjY5OFs0XQorICAgICAgICAgIDAuNjU5WzVdCisgICAgICAgICAgICAwLjY0OVs2XQorICAgICAgICAgICAgICAwLjYzOVs3XQorICAgICAgICAgICAgICAgICAgMC42MDBbOV0KKyAgICAgICAgICAgICAgICAgICAgMC41OTBbMTBdCisgICAgICAgICAgICAgICAgMC41ODBbOF0KKyAgICAgIDAuNTQxWzNdCisgICAgICAgICAgICAgICAgMC41MzFbOF0KKyAgICAgICAgICAgICAgICAgIDAuNTIxWzldCisgICAgICAgICAgICAgIDAuNDcyWzddCisgICAgICAgICAgICAgICAgMC40NjJbOF0KKyAgICAgICAgICAgIDAuNDEzWzZdCisgICAgICAgICAgMC40MDNbNV0KKyAgICAgICAgMC4zOTNbNF0KKzAuMzQ0WzBdCisgIDAuMzM0WzFdCisgICAgMC4yODVbMl0KKyAgICAgICAgMC4yNzVbNF0KKyAgICAgIDAuMjI2WzNdCisgICAgICAgIDAuMjE2WzRdCisgICAgICAgICAgICAwLjE3N1s2XQorICAgICAgICAgICAgICAwLjE2N1s3XQorICAgICAgICAgIDAuMTU3WzVdCisgICAgICAgICAgICAwLjExOFs2XQorICAgICAgICAgICAgICAgIDAuMTA4WzhdCisgICAgICAgICAgICAgIDAuOThbN10KKyAgICAgICAgICAgICAgICAwLjU5WzhdCisgICAgICAgICAgICAgICAgICAgIDAuNDlbMTBdCisgICAgICAgICAgICAgICAgICAwLjM5WzldCisgICAgICAgICAgICAgICAgICAgIDAuMFsxMF0KK3JlbW92ZSBwb2ludGVyIDEzLCBwYXlsb2FkIDg5NQorVHJlZSBsb29rOgorICAgICAgICAwLjEwMTNbNF0KKyAgICAgIDAuMTAwM1szXQorICAgICAgICAwLjk1NFs0XQorICAgIDAuOTQ0WzJdCisgIDAuOTM0WzFdCiswLjg4NVswXQorICAgIDAuODc1WzJdCisgIDAuODI2WzFdCisgICAgICAwLjgxNlszXQorICAgIDAuNzY3WzJdCisgICAgICAgICAgMC43NTdbNV0KKyAgICAgICAgMC43MDhbNF0KKyAgICAgICAgICAgIDAuNjk4WzZdCisgICAgICAgICAgICAgIDAuNjU5WzddCisgICAgICAgICAgICAgICAgMC42NDlbOF0KKyAgICAgICAgICAgICAgICAgIDAuNjM5WzldCisgICAgICAgICAgICAgICAgICAgICAgMC42MDBbMTFdCisgICAgICAgICAgICAgICAgICAgICAgICAwLjU5MFsxMl0KKyAgICAgICAgICAgICAgICAgICAgMC41ODBbMTBdCisgICAgICAgICAgMC41NDFbNV0KKyAgICAgICAgICAgICAgICAgICAgMC41MzFbMTBdCisgICAgICAgICAgICAgICAgICAgICAgMC41MjFbMTFdCisgICAgICAgICAgICAgICAgICAwLjQ3Mls5XQorICAgICAgICAgICAgICAgICAgICAwLjQ2MlsxMF0KKyAgICAgICAgICAgICAgICAwLjQxM1s4XQorICAgICAgICAgICAgICAwLjQwM1s3XQorICAgICAgICAgICAgMC4zOTNbNl0KKyAgICAgIDAuMzQ0WzNdCisgICAgICAgIDAuMzM0WzRdCisgICAgICAgICAgMC4yODVbNV0KKyAgICAgICAgICAgICAgMC4yNzVbN10KKyAgICAgICAgICAgIDAuMjI2WzZdCisgICAgICAgICAgICAgIDAuMjE2WzddCisgICAgICAgICAgICAgICAgICAwLjE3N1s5XQorICAgICAgICAgICAgICAgICAgICAwLjE2N1sxMF0KKyAgICAgICAgICAgICAgICAwLjE1N1s4XQorICAgICAgICAgICAgICAgICAgMC4xMThbOV0KKyAgICAgICAgICAgICAgICAgICAgICAwLjEwOFsxMV0KKyAgICAgICAgICAgICAgICAgICAgMC45OFsxMF0KKyAgICAgICAgICAgICAgICAgICAgICAwLjU5WzExXQorICAgICAgICAgICAgICAgICAgICAgICAgICAwLjQ5WzEzXQorICAgICAgICAgICAgICAgICAgICAgICAgMC4zOVsxMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wWzEzXQorcmVtb3ZlIHBvaW50ZXIgMTQsIHBheWxvYWQgNDEzCitUcmVlIGxvb2s6CisgICAgICAgICAgICAwLjEwMTNbNl0KKyAgICAgICAgICAwLjEwMDNbNV0KKyAgICAgICAgICAgIDAuOTU0WzZdCisgICAgICAgIDAuOTQ0WzRdCisgICAgICAwLjkzNFszXQorICAgIDAuODg1WzJdCisgICAgICAwLjg3NVszXQorICAwLjgyNlsxXQorICAgICAgMC44MTZbM10KKyAgICAwLjc2N1syXQorICAgICAgICAgIDAuNzU3WzVdCisgICAgICAgIDAuNzA4WzRdCisgICAgICAgICAgMC42OThbNV0KKyAgICAgICAgICAgIDAuNjU5WzZdCisgICAgICAgICAgICAgIDAuNjQ5WzddCisgICAgICAgICAgICAgICAgMC42MzlbOF0KKyAgICAgICAgICAgICAgICAgICAgMC42MDBbMTBdCisgICAgICAgICAgICAgICAgICAgICAgMC41OTBbMTFdCisgICAgICAgICAgICAgICAgICAwLjU4MFs5XQorICAgICAgMC41NDFbM10KKyAgICAgICAgICAwLjUzMVs1XQorICAgICAgICAgICAgMC41MjFbNl0KKyAgICAgICAgMC40NzJbNF0KKyAgICAgICAgICAwLjQ2Mls1XQorMC40MDNbMF0KKyAgICAwLjM5M1syXQorICAwLjM0NFsxXQorICAgIDAuMzM0WzJdCisgICAgICAwLjI4NVszXQorICAgICAgICAgIDAuMjc1WzVdCisgICAgICAgIDAuMjI2WzRdCisgICAgICAgICAgMC4yMTZbNV0KKyAgICAgICAgICAgICAgMC4xNzdbN10KKyAgICAgICAgICAgICAgICAwLjE2N1s4XQorICAgICAgICAgICAgMC4xNTdbNl0KKyAgICAgICAgICAgICAgMC4xMThbN10KKyAgICAgICAgICAgICAgICAgIDAuMTA4WzldCisgICAgICAgICAgICAgICAgMC45OFs4XQorICAgICAgICAgICAgICAgICAgMC41OVs5XQorICAgICAgICAgICAgICAgICAgICAgIDAuNDlbMTFdCisgICAgICAgICAgICAgICAgICAgIDAuMzlbMTBdCisgICAgICAgICAgICAgICAgICAgICAgMC4wWzExXQorcmVtb3ZlIHBvaW50ZXIgMTUsIHBheWxvYWQgOTU0CitUcmVlIGxvb2s6CisgICAgMC4xMDEzWzJdCisgIDAuMTAwM1sxXQorMC45NDRbMF0KKyAgMC45MzRbMV0KKyAgICAgIDAuODg1WzNdCisgICAgICAgIDAuODc1WzRdCisgICAgMC44MjZbMl0KKyAgICAgICAgICAwLjgxNls1XQorICAgICAgICAwLjc2N1s0XQorICAgICAgICAgICAgICAwLjc1N1s3XQorICAgICAgICAgICAgMC43MDhbNl0KKyAgICAgICAgICAgICAgMC42OThbN10KKyAgICAgICAgICAgICAgICAwLjY1OVs4XQorICAgICAgICAgICAgICAgICAgMC42NDlbOV0KKyAgICAgICAgICAgICAgICAgICAgMC42MzlbMTBdCisgICAgICAgICAgICAgICAgICAgICAgICAwLjYwMFsxMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMC41OTBbMTNdCisgICAgICAgICAgICAgICAgICAgICAgMC41ODBbMTFdCisgICAgICAgICAgMC41NDFbNV0KKyAgICAgICAgICAgICAgMC41MzFbN10KKyAgICAgICAgICAgICAgICAwLjUyMVs4XQorICAgICAgICAgICAgMC40NzJbNl0KKyAgICAgICAgICAgICAgMC40NjJbN10KKyAgICAgIDAuNDAzWzNdCisgICAgICAgICAgMC4zOTNbNV0KKyAgICAgICAgMC4zNDRbNF0KKyAgICAgICAgICAwLjMzNFs1XQorICAgICAgICAgICAgMC4yODVbNl0KKyAgICAgICAgICAgICAgICAwLjI3NVs4XQorICAgICAgICAgICAgICAwLjIyNls3XQorICAgICAgICAgICAgICAgIDAuMjE2WzhdCisgICAgICAgICAgICAgICAgICAgIDAuMTc3WzEwXQorICAgICAgICAgICAgICAgICAgICAgIDAuMTY3WzExXQorICAgICAgICAgICAgICAgICAgMC4xNTdbOV0KKyAgICAgICAgICAgICAgICAgICAgMC4xMThbMTBdCisgICAgICAgICAgICAgICAgICAgICAgICAwLjEwOFsxMl0KKyAgICAgICAgICAgICAgICAgICAgICAwLjk4WzExXQorICAgICAgICAgICAgICAgICAgICAgICAgMC41OVsxMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjQ5WzE0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAwLjM5WzEzXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMFsxNF0KK3JlbW92ZSBwb2ludGVyIDE2LCBwYXlsb2FkIDQ3MgorVHJlZSBsb29rOgorICAgICAgICAwLjEwMTNbNF0KKyAgICAgIDAuMTAwM1szXQorICAgIDAuOTQ0WzJdCisgIDAuOTM0WzFdCisgICAgICAwLjg4NVszXQorICAgICAgICAwLjg3NVs0XQorICAgIDAuODI2WzJdCisgICAgICAgICAgMC44MTZbNV0KKyAgICAgICAgMC43NjdbNF0KKyAgICAgICAgICAgIDAuNzU3WzZdCisgICAgICAgICAgMC43MDhbNV0KKyAgICAgICAgICAgIDAuNjk4WzZdCisgICAgICAgICAgICAgIDAuNjU5WzddCisgICAgICAgICAgICAgICAgMC42NDlbOF0KKyAgICAgICAgICAgICAgICAgIDAuNjM5WzldCisgICAgICAgICAgICAgICAgICAgICAgMC42MDBbMTFdCisgICAgICAgICAgICAgICAgICAgICAgICAwLjU5MFsxMl0KKyAgICAgICAgICAgICAgICAgICAgMC41ODBbMTBdCisgICAgICAwLjU0MVszXQorICAgICAgICAwLjUzMVs0XQorICAgICAgICAgIDAuNTIxWzVdCiswLjQ2MlswXQorICAwLjQwM1sxXQorICAgICAgMC4zOTNbM10KKyAgICAwLjM0NFsyXQorICAgICAgMC4zMzRbM10KKyAgICAgICAgMC4yODVbNF0KKyAgICAgICAgICAgIDAuMjc1WzZdCisgICAgICAgICAgMC4yMjZbNV0KKyAgICAgICAgICAgIDAuMjE2WzZdCisgICAgICAgICAgICAgICAgMC4xNzdbOF0KKyAgICAgICAgICAgICAgICAgIDAuMTY3WzldCisgICAgICAgICAgICAgIDAuMTU3WzddCisgICAgICAgICAgICAgICAgMC4xMThbOF0KKyAgICAgICAgICAgICAgICAgICAgMC4xMDhbMTBdCisgICAgICAgICAgICAgICAgICAwLjk4WzldCisgICAgICAgICAgICAgICAgICAgIDAuNTlbMTBdCisgICAgICAgICAgICAgICAgICAgICAgICAwLjQ5WzEyXQorICAgICAgICAgICAgICAgICAgICAgIDAuMzlbMTFdCisgICAgICAgICAgICAgICAgICAgICAgICAwLjBbMTJdCityZW1vdmUgcG9pbnRlciAxNywgcGF5bG9hZCAxMDEzCitUcmVlIGxvb2s6CiswLjEwMDNbMF0KKyAgICAwLjk0NFsyXQorICAwLjkzNFsxXQorICAgICAgICAwLjg4NVs0XQorICAgICAgICAgIDAuODc1WzVdCisgICAgICAwLjgyNlszXQorICAgICAgICAgICAgMC44MTZbNl0KKyAgICAgICAgICAwLjc2N1s1XQorICAgICAgICAgICAgICAwLjc1N1s3XQorICAgICAgICAgICAgMC43MDhbNl0KKyAgICAgICAgICAgICAgMC42OThbN10KKyAgICAgICAgICAgICAgICAwLjY1OVs4XQorICAgICAgICAgICAgICAgICAgMC42NDlbOV0KKyAgICAgICAgICAgICAgICAgICAgMC42MzlbMTBdCisgICAgICAgICAgICAgICAgICAgICAgICAwLjYwMFsxMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMC41OTBbMTNdCisgICAgICAgICAgICAgICAgICAgICAgMC41ODBbMTFdCisgICAgICAgIDAuNTQxWzRdCisgICAgICAgICAgMC41MzFbNV0KKyAgICAgICAgICAgIDAuNTIxWzZdCisgICAgMC40NjJbMl0KKyAgICAgIDAuNDAzWzNdCisgICAgICAgICAgMC4zOTNbNV0KKyAgICAgICAgMC4zNDRbNF0KKyAgICAgICAgICAwLjMzNFs1XQorICAgICAgICAgICAgMC4yODVbNl0KKyAgICAgICAgICAgICAgICAwLjI3NVs4XQorICAgICAgICAgICAgICAwLjIyNls3XQorICAgICAgICAgICAgICAgIDAuMjE2WzhdCisgICAgICAgICAgICAgICAgICAgIDAuMTc3WzEwXQorICAgICAgICAgICAgICAgICAgICAgIDAuMTY3WzExXQorICAgICAgICAgICAgICAgICAgMC4xNTdbOV0KKyAgICAgICAgICAgICAgICAgICAgMC4xMThbMTBdCisgICAgICAgICAgICAgICAgICAgICAgICAwLjEwOFsxMl0KKyAgICAgICAgICAgICAgICAgICAgICAwLjk4WzExXQorICAgICAgICAgICAgICAgICAgICAgICAgMC41OVsxMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjQ5WzE0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAwLjM5WzEzXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMFsxNF0KK3JlbW92ZSBwb2ludGVyIDE4LCBwYXlsb2FkIDUzMQorVHJlZSBsb29rOgorICAgIDAuMTAwM1syXQorICAgICAgMC45NDRbM10KKyAgMC45MzRbMV0KKyAgICAgICAgMC44ODVbNF0KKyAgICAgICAgICAwLjg3NVs1XQorICAgICAgMC44MjZbM10KKyAgICAgICAgICAwLjgxNls1XQorICAgICAgICAwLjc2N1s0XQorICAgICAgICAgICAgMC43NTdbNl0KKyAgICAgICAgICAwLjcwOFs1XQorICAgICAgICAgICAgMC42OThbNl0KKyAgICAgICAgICAgICAgMC42NTlbN10KKyAgICAgICAgICAgICAgICAwLjY0OVs4XQorICAgICAgICAgICAgICAgICAgMC42MzlbOV0KKyAgICAgICAgICAgICAgICAgICAgICAwLjYwMFsxMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIDAuNTkwWzEyXQorICAgICAgICAgICAgICAgICAgICAwLjU4MFsxMF0KKyAgICAwLjU0MVsyXQorMC41MjFbMF0KKyAgMC40NjJbMV0KKyAgICAwLjQwM1syXQorICAgICAgICAwLjM5M1s0XQorICAgICAgMC4zNDRbM10KKyAgICAgICAgMC4zMzRbNF0KKyAgICAgICAgICAwLjI4NVs1XQorICAgICAgICAgICAgICAwLjI3NVs3XQorICAgICAgICAgICAgMC4yMjZbNl0KKyAgICAgICAgICAgICAgMC4yMTZbN10KKyAgICAgICAgICAgICAgICAgIDAuMTc3WzldCisgICAgICAgICAgICAgICAgICAgIDAuMTY3WzEwXQorICAgICAgICAgICAgICAgIDAuMTU3WzhdCisgICAgICAgICAgICAgICAgICAwLjExOFs5XQorICAgICAgICAgICAgICAgICAgICAgIDAuMTA4WzExXQorICAgICAgICAgICAgICAgICAgICAwLjk4WzEwXQorICAgICAgICAgICAgICAgICAgICAgIDAuNTlbMTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNDlbMTNdCisgICAgICAgICAgICAgICAgICAgICAgICAwLjM5WzEyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAwLjBbMTNdCityZW1vdmUgcG9pbnRlciAxOSwgcGF5bG9hZCA0OQorVHJlZSBsb29rOgorICAgICAgICAwLjEwMDNbNF0KKyAgICAgICAgICAwLjk0NFs1XQorICAgICAgMC45MzRbM10KKyAgICAgICAgICAgIDAuODg1WzZdCisgICAgICAgICAgICAgIDAuODc1WzddCisgICAgICAgICAgMC44MjZbNV0KKyAgICAgICAgICAgICAgMC44MTZbN10KKyAgICAgICAgICAgIDAuNzY3WzZdCisgICAgICAgICAgICAgICAgMC43NTdbOF0KKyAgICAgICAgICAgICAgMC43MDhbN10KKyAgICAgICAgICAgICAgICAwLjY5OFs4XQorICAgICAgICAgICAgICAgICAgMC42NTlbOV0KKyAgICAgICAgICAgICAgICAgICAgMC42NDlbMTBdCisgICAgICAgICAgICAgICAgICAgICAgMC42MzlbMTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNjAwWzEzXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNTkwWzE0XQorICAgICAgICAgICAgICAgICAgICAgICAgMC41ODBbMTJdCisgICAgICAgIDAuNTQxWzRdCisgICAgMC41MjFbMl0KKyAgMC40NjJbMV0KKyAgICAgIDAuNDAzWzNdCisgICAgICAgIDAuMzkzWzRdCisgICAgMC4zNDRbMl0KKyAgICAgICAgMC4zMzRbNF0KKyAgICAgIDAuMjg1WzNdCisgICAgICAgICAgICAwLjI3NVs2XQorICAgICAgICAgIDAuMjI2WzVdCisgICAgICAgIDAuMjE2WzRdCisgICAgICAgICAgICAgIDAuMTc3WzddCisgICAgICAgICAgICAgICAgMC4xNjdbOF0KKyAgICAgICAgICAgIDAuMTU3WzZdCisgICAgICAgICAgMC4xMThbNV0KKyAgICAgICAgICAgICAgICAwLjEwOFs4XQorICAgICAgICAgICAgICAwLjk4WzddCisgICAgICAgICAgICAwLjU5WzZdCiswLjM5WzBdCisgIDAuMFsxXQorcmVtb3ZlIHBvaW50ZXIgMjAsIHBheWxvYWQgNTkwCitUcmVlIGxvb2s6CisgICAgMC4xMDAzWzJdCisgICAgICAwLjk0NFszXQorICAwLjkzNFsxXQorICAgICAgICAwLjg4NVs0XQorICAgICAgICAgIDAuODc1WzVdCisgICAgICAwLjgyNlszXQorICAgICAgICAwLjgxNls0XQorICAgIDAuNzY3WzJdCisgICAgICAgICAgMC43NTdbNV0KKyAgICAgICAgMC43MDhbNF0KKyAgICAgIDAuNjk4WzNdCisgICAgICAgICAgMC42NTlbNV0KKyAgICAgICAgMC42NDlbNF0KKyAgICAgICAgICAwLjYzOVs1XQorICAgICAgICAgICAgMC42MDBbNl0KKzAuNTgwWzBdCisgICAgMC41NDFbMl0KKyAgMC41MjFbMV0KKyAgICAwLjQ2MlsyXQorICAgICAgICAgIDAuNDAzWzVdCisgICAgICAgICAgICAwLjM5M1s2XQorICAgICAgICAwLjM0NFs0XQorICAgICAgICAgICAgMC4zMzRbNl0KKyAgICAgICAgICAwLjI4NVs1XQorICAgICAgICAgICAgICAgIDAuMjc1WzhdCisgICAgICAgICAgICAgIDAuMjI2WzddCisgICAgICAgICAgICAwLjIxNls2XQorICAgICAgICAgICAgICAgICAgMC4xNzdbOV0KKyAgICAgICAgICAgICAgICAgICAgMC4xNjdbMTBdCisgICAgICAgICAgICAgICAgMC4xNTdbOF0KKyAgICAgICAgICAgICAgMC4xMThbN10KKyAgICAgICAgICAgICAgICAgICAgMC4xMDhbMTBdCisgICAgICAgICAgICAgICAgICAwLjk4WzldCisgICAgICAgICAgICAgICAgMC41OVs4XQorICAgICAgMC4zOVszXQorICAgICAgICAwLjBbNF0KK3JlbW92ZSBwb2ludGVyIDIxLCBwYXlsb2FkIDEwOAorVHJlZSBsb29rOgorICAgICAgICAwLjEwMDNbNF0KKyAgICAgICAgICAwLjk0NFs1XQorICAgICAgMC45MzRbM10KKyAgICAgICAgICAgIDAuODg1WzZdCisgICAgICAgICAgICAgIDAuODc1WzddCisgICAgICAgICAgMC44MjZbNV0KKyAgICAgICAgICAgIDAuODE2WzZdCisgICAgICAgIDAuNzY3WzRdCisgICAgICAgICAgICAgIDAuNzU3WzddCisgICAgICAgICAgICAwLjcwOFs2XQorICAgICAgICAgIDAuNjk4WzVdCisgICAgICAgICAgICAgIDAuNjU5WzddCisgICAgICAgICAgICAwLjY0OVs2XQorICAgICAgICAgICAgICAwLjYzOVs3XQorICAgICAgICAgICAgICAgIDAuNjAwWzhdCisgICAgMC41ODBbMl0KKyAgICAgIDAuNTQxWzNdCisgIDAuNTIxWzFdCisgICAgMC40NjJbMl0KKyAgICAgICAgICAwLjQwM1s1XQorICAgICAgICAgICAgMC4zOTNbNl0KKyAgICAgICAgMC4zNDRbNF0KKyAgICAgICAgICAwLjMzNFs1XQorICAgICAgMC4yODVbM10KKyAgICAgICAgICAgICAgMC4yNzVbN10KKyAgICAgICAgICAgIDAuMjI2WzZdCisgICAgICAgICAgMC4yMTZbNV0KKyAgICAgICAgICAgICAgMC4xNzdbN10KKyAgICAgICAgICAgICAgICAwLjE2N1s4XQorICAgICAgICAgICAgMC4xNTdbNl0KKyAgICAgICAgMC4xMThbNF0KKzAuOThbMF0KKyAgICAwLjU5WzJdCisgIDAuMzlbMV0KKyAgICAwLjBbMl0KK3JlbW92ZSBwb2ludGVyIDIyLCBwYXlsb2FkIDY0OQorVHJlZSBsb29rOgorICAgICAgMC4xMDAzWzNdCisgICAgICAgIDAuOTQ0WzRdCisgICAgMC45MzRbMl0KKyAgICAgICAgMC44ODVbNF0KKyAgICAgICAgICAwLjg3NVs1XQorICAgICAgMC44MjZbM10KKyAgICAgICAgMC44MTZbNF0KKyAgMC43NjdbMV0KKyAgICAgICAgMC43NTdbNF0KKyAgICAgIDAuNzA4WzNdCisgICAgMC42OThbMl0KKyAgICAgIDAuNjU5WzNdCiswLjYzOVswXQorICAgIDAuNjAwWzJdCisgIDAuNTgwWzFdCisgICAgICAwLjU0MVszXQorICAgIDAuNTIxWzJdCisgICAgICAgIDAuNDYyWzRdCisgICAgICAgICAgICAgIDAuNDAzWzddCisgICAgICAgICAgICAgICAgMC4zOTNbOF0KKyAgICAgICAgICAgIDAuMzQ0WzZdCisgICAgICAgICAgICAgIDAuMzM0WzddCisgICAgICAgICAgMC4yODVbNV0KKyAgICAgICAgICAgICAgICAgIDAuMjc1WzldCisgICAgICAgICAgICAgICAgMC4yMjZbOF0KKyAgICAgICAgICAgICAgMC4yMTZbN10KKyAgICAgICAgICAgICAgICAgIDAuMTc3WzldCisgICAgICAgICAgICAgICAgICAgIDAuMTY3WzEwXQorICAgICAgICAgICAgICAgIDAuMTU3WzhdCisgICAgICAgICAgICAwLjExOFs2XQorICAgICAgMC45OFszXQorICAgICAgICAgIDAuNTlbNV0KKyAgICAgICAgMC4zOVs0XQorICAgICAgICAgIDAuMFs1XQorcmVtb3ZlIHBvaW50ZXIgMjMsIHBheWxvYWQgMTY3CitUcmVlIGxvb2s6CisgICAgICAgICAgMC4xMDAzWzVdCisgICAgICAgICAgICAwLjk0NFs2XQorICAgICAgICAwLjkzNFs0XQorICAgICAgICAgICAgMC44ODVbNl0KKyAgICAgICAgICAgICAgMC44NzVbN10KKyAgICAgICAgICAwLjgyNls1XQorICAgICAgICAgICAgMC44MTZbNl0KKyAgICAgIDAuNzY3WzNdCisgICAgICAgICAgICAwLjc1N1s2XQorICAgICAgICAgIDAuNzA4WzVdCisgICAgICAgIDAuNjk4WzRdCisgICAgICAgICAgMC42NTlbNV0KKyAgICAwLjYzOVsyXQorICAgICAgMC42MDBbM10KKyAgMC41ODBbMV0KKyAgICAgIDAuNTQxWzNdCisgICAgMC41MjFbMl0KKyAgICAgICAgMC40NjJbNF0KKyAgICAgICAgICAgIDAuNDAzWzZdCisgICAgICAgICAgICAgIDAuMzkzWzddCisgICAgICAgICAgMC4zNDRbNV0KKyAgICAgICAgICAgIDAuMzM0WzZdCisgICAgICAwLjI4NVszXQorICAgICAgICAgICAgMC4yNzVbNl0KKyAgICAgICAgICAwLjIyNls1XQorICAgICAgICAwLjIxNls0XQorICAgICAgICAgIDAuMTc3WzVdCiswLjE1N1swXQorICAwLjExOFsxXQorICAgIDAuOThbMl0KKyAgICAgICAgMC41OVs0XQorICAgICAgMC4zOVszXQorICAgICAgICAwLjBbNF0KK3JlbW92ZSBwb2ludGVyIDI0LCBwYXlsb2FkIDcwOAorVHJlZSBsb29rOgorICAgICAgMC4xMDAzWzNdCisgICAgICAgIDAuOTQ0WzRdCisgICAgMC45MzRbMl0KKyAgICAgICAgMC44ODVbNF0KKyAgICAgICAgICAwLjg3NVs1XQorICAgICAgMC44MjZbM10KKyAgICAgICAgMC44MTZbNF0KKyAgMC43NjdbMV0KKyAgICAwLjc1N1syXQorMC42OThbMF0KKyAgICAwLjY1OVsyXQorICAwLjYzOVsxXQorICAgICAgMC42MDBbM10KKyAgICAwLjU4MFsyXQorICAgICAgICAgIDAuNTQxWzVdCisgICAgICAgIDAuNTIxWzRdCisgICAgICAgICAgICAwLjQ2Mls2XQorICAgICAgICAgICAgICAgIDAuNDAzWzhdCisgICAgICAgICAgICAgICAgICAwLjM5M1s5XQorICAgICAgICAgICAgICAwLjM0NFs3XQorICAgICAgICAgICAgICAgIDAuMzM0WzhdCisgICAgICAgICAgMC4yODVbNV0KKyAgICAgICAgICAgICAgICAwLjI3NVs4XQorICAgICAgICAgICAgICAwLjIyNls3XQorICAgICAgICAgICAgMC4yMTZbNl0KKyAgICAgICAgICAgICAgMC4xNzdbN10KKyAgICAgIDAuMTU3WzNdCisgICAgICAgIDAuMTE4WzRdCisgICAgICAgICAgMC45OFs1XQorICAgICAgICAgICAgICAwLjU5WzddCisgICAgICAgICAgICAwLjM5WzZdCisgICAgICAgICAgICAgIDAuMFs3XQorcmVtb3ZlIHBvaW50ZXIgMjUsIHBheWxvYWQgMjI2CitUcmVlIGxvb2s6CisgICAgICAgICAgMC4xMDAzWzVdCisgICAgICAgICAgICAwLjk0NFs2XQorICAgICAgICAwLjkzNFs0XQorICAgICAgICAgICAgMC44ODVbNl0KKyAgICAgICAgICAgICAgMC44NzVbN10KKyAgICAgICAgICAwLjgyNls1XQorICAgICAgICAgICAgMC44MTZbNl0KKyAgICAgIDAuNzY3WzNdCisgICAgICAgIDAuNzU3WzRdCisgICAgMC42OThbMl0KKyAgICAgIDAuNjU5WzNdCisgIDAuNjM5WzFdCisgICAgICAwLjYwMFszXQorICAgIDAuNTgwWzJdCisgICAgICAgICAgMC41NDFbNV0KKyAgICAgICAgMC41MjFbNF0KKyAgICAgICAgICAwLjQ2Mls1XQorICAgICAgICAgICAgICAwLjQwM1s3XQorICAgICAgICAgICAgICAgIDAuMzkzWzhdCisgICAgICAgICAgICAwLjM0NFs2XQorICAgICAgICAgICAgICAwLjMzNFs3XQorICAgICAgMC4yODVbM10KKyAgICAgICAgMC4yNzVbNF0KKzAuMjE2WzBdCisgICAgMC4xNzdbMl0KKyAgMC4xNTdbMV0KKyAgICAwLjExOFsyXQorICAgICAgMC45OFszXQorICAgICAgICAgIDAuNTlbNV0KKyAgICAgICAgMC4zOVs0XQorICAgICAgICAgIDAuMFs1XQorcmVtb3ZlIHBvaW50ZXIgMjYsIHBheWxvYWQgNzY3CitUcmVlIGxvb2s6CisgICAgMC4xMDAzWzJdCisgICAgICAwLjk0NFszXQorICAwLjkzNFsxXQorICAgICAgMC44ODVbM10KKyAgICAgICAgMC44NzVbNF0KKyAgICAwLjgyNlsyXQorICAgICAgMC44MTZbM10KKzAuNzU3WzBdCisgIDAuNjk4WzFdCisgICAgICAwLjY1OVszXQorICAgIDAuNjM5WzJdCisgICAgICAgICAgMC42MDBbNV0KKyAgICAgICAgMC41ODBbNF0KKyAgICAgICAgICAgICAgMC41NDFbN10KKyAgICAgICAgICAgIDAuNTIxWzZdCisgICAgICAgICAgICAgIDAuNDYyWzddCisgICAgICAgICAgICAgICAgICAwLjQwM1s5XQorICAgICAgICAgICAgICAgICAgICAwLjM5M1sxMF0KKyAgICAgICAgICAgICAgICAwLjM0NFs4XQorICAgICAgICAgICAgICAgICAgMC4zMzRbOV0KKyAgICAgICAgICAwLjI4NVs1XQorICAgICAgICAgICAgMC4yNzVbNl0KKyAgICAgIDAuMjE2WzNdCisgICAgICAgICAgMC4xNzdbNV0KKyAgICAgICAgMC4xNTdbNF0KKyAgICAgICAgICAwLjExOFs1XQorICAgICAgICAgICAgMC45OFs2XQorICAgICAgICAgICAgICAgIDAuNTlbOF0KKyAgICAgICAgICAgICAgMC4zOVs3XQorICAgICAgICAgICAgICAgIDAuMFs4XQorcmVtb3ZlIHBvaW50ZXIgMjcsIHBheWxvYWQgMjg1CitUcmVlIGxvb2s6CisgICAgICAgIDAuMTAwM1s0XQorICAgICAgICAgIDAuOTQ0WzVdCisgICAgICAwLjkzNFszXQorICAgICAgICAgIDAuODg1WzVdCisgICAgICAgICAgICAwLjg3NVs2XQorICAgICAgICAwLjgyNls0XQorICAgICAgICAgIDAuODE2WzVdCisgICAgMC43NTdbMl0KKyAgMC42OThbMV0KKyAgICAgIDAuNjU5WzNdCisgICAgMC42MzlbMl0KKyAgICAgICAgMC42MDBbNF0KKyAgICAgIDAuNTgwWzNdCisgICAgICAgICAgMC41NDFbNV0KKyAgICAgICAgMC41MjFbNF0KKyAgICAgICAgICAwLjQ2Mls1XQorICAgICAgICAgICAgICAwLjQwM1s3XQorICAgICAgICAgICAgICAgIDAuMzkzWzhdCisgICAgICAgICAgICAwLjM0NFs2XQorICAgICAgICAgICAgICAwLjMzNFs3XQorMC4yNzVbMF0KKyAgMC4yMTZbMV0KKyAgICAgIDAuMTc3WzNdCisgICAgMC4xNTdbMl0KKyAgICAgIDAuMTE4WzNdCisgICAgICAgIDAuOThbNF0KKyAgICAgICAgICAgIDAuNTlbNl0KKyAgICAgICAgICAwLjM5WzVdCisgICAgICAgICAgICAwLjBbNl0KK3JlbW92ZSBwb2ludGVyIDI4LCBwYXlsb2FkIDgyNgorVHJlZSBsb29rOgorICAgIDAuMTAwM1syXQorICAgICAgMC45NDRbM10KKyAgMC45MzRbMV0KKyAgICAwLjg4NVsyXQorICAgICAgMC44NzVbM10KKzAuODE2WzBdCisgIDAuNzU3WzFdCisgICAgMC42OThbMl0KKyAgICAgICAgICAwLjY1OVs1XQorICAgICAgICAwLjYzOVs0XQorICAgICAgICAgICAgMC42MDBbNl0KKyAgICAgICAgICAwLjU4MFs1XQorICAgICAgICAgICAgICAwLjU0MVs3XQorICAgICAgICAgICAgMC41MjFbNl0KKyAgICAgICAgICAgICAgMC40NjJbN10KKyAgICAgICAgICAgICAgICAgIDAuNDAzWzldCisgICAgICAgICAgICAgICAgICAgIDAuMzkzWzEwXQorICAgICAgICAgICAgICAgIDAuMzQ0WzhdCisgICAgICAgICAgICAgICAgICAwLjMzNFs5XQorICAgICAgMC4yNzVbM10KKyAgICAgICAgMC4yMTZbNF0KKyAgICAgICAgICAgIDAuMTc3WzZdCisgICAgICAgICAgMC4xNTdbNV0KKyAgICAgICAgICAgIDAuMTE4WzZdCisgICAgICAgICAgICAgIDAuOThbN10KKyAgICAgICAgICAgICAgICAgIDAuNTlbOV0KKyAgICAgICAgICAgICAgICAwLjM5WzhdCisgICAgICAgICAgICAgICAgICAwLjBbOV0KK3JlbW92ZSBwb2ludGVyIDI5LCBwYXlsb2FkIDM0NAorVHJlZSBsb29rOgorICAgICAgICAwLjEwMDNbNF0KKyAgICAgICAgICAwLjk0NFs1XQorICAgICAgMC45MzRbM10KKyAgICAgICAgMC44ODVbNF0KKyAgICAgICAgICAwLjg3NVs1XQorICAgIDAuODE2WzJdCisgIDAuNzU3WzFdCisgICAgMC42OThbMl0KKyAgICAgICAgICAwLjY1OVs1XQorICAgICAgICAwLjYzOVs0XQorICAgICAgICAgIDAuNjAwWzVdCisgICAgICAwLjU4MFszXQorICAgICAgICAgICAgMC41NDFbNl0KKyAgICAgICAgICAwLjUyMVs1XQorICAgICAgICAwLjQ2Mls0XQorICAgICAgICAgIDAuNDAzWzVdCisgICAgICAgICAgICAwLjM5M1s2XQorMC4zMzRbMF0KKyAgMC4yNzVbMV0KKyAgICAwLjIxNlsyXQorICAgICAgICAwLjE3N1s0XQorICAgICAgMC4xNTdbM10KKyAgICAgICAgMC4xMThbNF0KKyAgICAgICAgICAwLjk4WzVdCisgICAgICAgICAgICAgIDAuNTlbN10KKyAgICAgICAgICAgIDAuMzlbNl0KKyAgICAgICAgICAgICAgMC4wWzddCityZW1vdmUgcG9pbnRlciAzMCwgcGF5bG9hZCA4ODUKK1RyZWUgbG9vazoKKyAgICAwLjEwMDNbMl0KKyAgICAgIDAuOTQ0WzNdCisgIDAuOTM0WzFdCiswLjg3NVswXQorICAwLjgxNlsxXQorICAgIDAuNzU3WzJdCisgICAgICAgIDAuNjk4WzRdCisgICAgICAgICAgICAgIDAuNjU5WzddCisgICAgICAgICAgICAwLjYzOVs2XQorICAgICAgICAgICAgICAwLjYwMFs3XQorICAgICAgICAgIDAuNTgwWzVdCisgICAgICAgICAgICAgICAgMC41NDFbOF0KKyAgICAgICAgICAgICAgMC41MjFbN10KKyAgICAgICAgICAgIDAuNDYyWzZdCisgICAgICAgICAgICAgIDAuNDAzWzddCisgICAgICAgICAgICAgICAgMC4zOTNbOF0KKyAgICAgIDAuMzM0WzNdCisgICAgICAgIDAuMjc1WzRdCisgICAgICAgICAgMC4yMTZbNV0KKyAgICAgICAgICAgICAgMC4xNzdbN10KKyAgICAgICAgICAgIDAuMTU3WzZdCisgICAgICAgICAgICAgIDAuMTE4WzddCisgICAgICAgICAgICAgICAgMC45OFs4XQorICAgICAgICAgICAgICAgICAgICAwLjU5WzEwXQorICAgICAgICAgICAgICAgICAgMC4zOVs5XQorICAgICAgICAgICAgICAgICAgICAwLjBbMTBdCityZW1vdmUgcG9pbnRlciAzMSwgcGF5bG9hZCA0MDMKK1RyZWUgbG9vazoKKyAgICAgICAgMC4xMDAzWzRdCisgICAgICAgICAgMC45NDRbNV0KKyAgICAgIDAuOTM0WzNdCisgICAgMC44NzVbMl0KKyAgMC44MTZbMV0KKyAgICAwLjc1N1syXQorICAgICAgICAwLjY5OFs0XQorICAgICAgICAgICAgMC42NTlbNl0KKyAgICAgICAgICAwLjYzOVs1XQorICAgICAgICAgICAgMC42MDBbNl0KKyAgICAgIDAuNTgwWzNdCisgICAgICAgICAgICAwLjU0MVs2XQorICAgICAgICAgIDAuNTIxWzVdCisgICAgICAgIDAuNDYyWzRdCiswLjM5M1swXQorICAwLjMzNFsxXQorICAgIDAuMjc1WzJdCisgICAgICAwLjIxNlszXQorICAgICAgICAgIDAuMTc3WzVdCisgICAgICAgIDAuMTU3WzRdCisgICAgICAgICAgMC4xMThbNV0KKyAgICAgICAgICAgIDAuOThbNl0KKyAgICAgICAgICAgICAgICAwLjU5WzhdCisgICAgICAgICAgICAgIDAuMzlbN10KKyAgICAgICAgICAgICAgICAwLjBbOF0KK3JlbW92ZSBwb2ludGVyIDMyLCBwYXlsb2FkIDk0NAorVHJlZSBsb29rOgorICAwLjEwMDNbMV0KKzAuOTM0WzBdCisgICAgMC44NzVbMl0KKyAgMC44MTZbMV0KKyAgICAgIDAuNzU3WzNdCisgICAgICAgICAgMC42OThbNV0KKyAgICAgICAgICAgICAgMC42NTlbN10KKyAgICAgICAgICAgIDAuNjM5WzZdCisgICAgICAgICAgICAgIDAuNjAwWzddCisgICAgICAgIDAuNTgwWzRdCisgICAgICAgICAgICAgIDAuNTQxWzddCisgICAgICAgICAgICAwLjUyMVs2XQorICAgICAgICAgIDAuNDYyWzVdCisgICAgMC4zOTNbMl0KKyAgICAgIDAuMzM0WzNdCisgICAgICAgIDAuMjc1WzRdCisgICAgICAgICAgMC4yMTZbNV0KKyAgICAgICAgICAgICAgMC4xNzdbN10KKyAgICAgICAgICAgIDAuMTU3WzZdCisgICAgICAgICAgICAgIDAuMTE4WzddCisgICAgICAgICAgICAgICAgMC45OFs4XQorICAgICAgICAgICAgICAgICAgICAwLjU5WzEwXQorICAgICAgICAgICAgICAgICAgMC4zOVs5XQorICAgICAgICAgICAgICAgICAgICAwLjBbMTBdCityZW1vdmUgcG9pbnRlciAzMywgcGF5bG9hZCA0NjIKK1RyZWUgbG9vazoKKyAgICAgIDAuMTAwM1szXQorICAgIDAuOTM0WzJdCisgICAgICAwLjg3NVszXQorICAwLjgxNlsxXQorICAgICAgMC43NTdbM10KKyAgICAgICAgMC42OThbNF0KKyAgICAgICAgICAgIDAuNjU5WzZdCisgICAgICAgICAgMC42MzlbNV0KKyAgICAgICAgICAgIDAuNjAwWzZdCisgICAgMC41ODBbMl0KKyAgICAgICAgMC41NDFbNF0KKyAgICAgIDAuNTIxWzNdCiswLjM5M1swXQorICAwLjMzNFsxXQorICAgIDAuMjc1WzJdCisgICAgICAwLjIxNlszXQorICAgICAgICAgIDAuMTc3WzVdCisgICAgICAgIDAuMTU3WzRdCisgICAgICAgICAgMC4xMThbNV0KKyAgICAgICAgICAgIDAuOThbNl0KKyAgICAgICAgICAgICAgICAwLjU5WzhdCisgICAgICAgICAgICAgIDAuMzlbN10KKyAgICAgICAgICAgICAgICAwLjBbOF0KK3JlbW92ZSBwb2ludGVyIDM0LCBwYXlsb2FkIDEwMDMKK1RyZWUgbG9vazoKKzAuOTM0WzBdCisgICAgMC44NzVbMl0KKyAgMC44MTZbMV0KKyAgICAgICAgMC43NTdbNF0KKyAgICAgICAgICAwLjY5OFs1XQorICAgICAgICAgICAgICAwLjY1OVs3XQorICAgICAgICAgICAgMC42MzlbNl0KKyAgICAgICAgICAgICAgMC42MDBbN10KKyAgICAgIDAuNTgwWzNdCisgICAgICAgICAgMC41NDFbNV0KKyAgICAgICAgMC41MjFbNF0KKyAgICAwLjM5M1syXQorICAgICAgMC4zMzRbM10KKyAgICAgICAgMC4yNzVbNF0KKyAgICAgICAgICAwLjIxNls1XQorICAgICAgICAgICAgICAwLjE3N1s3XQorICAgICAgICAgICAgMC4xNTdbNl0KKyAgICAgICAgICAgICAgMC4xMThbN10KKyAgICAgICAgICAgICAgICAwLjk4WzhdCisgICAgICAgICAgICAgICAgICAgIDAuNTlbMTBdCisgICAgICAgICAgICAgICAgICAwLjM5WzldCisgICAgICAgICAgICAgICAgICAgIDAuMFsxMF0KK3JlbW92ZSBwb2ludGVyIDM1LCBwYXlsb2FkIDUyMQorVHJlZSBsb29rOgorICAgIDAuOTM0WzJdCisgICAgICAwLjg3NVszXQorICAwLjgxNlsxXQorICAgICAgMC43NTdbM10KKyAgICAgICAgMC42OThbNF0KKyAgICAgICAgICAgIDAuNjU5WzZdCisgICAgICAgICAgMC42MzlbNV0KKyAgICAgICAgICAgIDAuNjAwWzZdCisgICAgMC41ODBbMl0KKyAgICAgIDAuNTQxWzNdCiswLjM5M1swXQorICAwLjMzNFsxXQorICAgIDAuMjc1WzJdCisgICAgICAwLjIxNlszXQorICAgICAgICAgIDAuMTc3WzVdCisgICAgICAgIDAuMTU3WzRdCisgICAgICAgICAgMC4xMThbNV0KKyAgICAgICAgICAgIDAuOThbNl0KKyAgICAgICAgICAgICAgICAwLjU5WzhdCisgICAgICAgICAgICAgIDAuMzlbN10KKyAgICAgICAgICAgICAgICAwLjBbOF0KK3JlbW92ZSBwb2ludGVyIDM2LCBwYXlsb2FkIDM5CitUcmVlIGxvb2s6CisgICAgICAgIDAuOTM0WzRdCisgICAgICAgICAgMC44NzVbNV0KKyAgICAgIDAuODE2WzNdCisgICAgICAgICAgMC43NTdbNV0KKyAgICAgICAgICAgIDAuNjk4WzZdCisgICAgICAgICAgICAgICAgMC42NTlbOF0KKyAgICAgICAgICAgICAgMC42MzlbN10KKyAgICAgICAgICAgICAgICAwLjYwMFs4XQorICAgICAgICAwLjU4MFs0XQorICAgICAgICAgIDAuNTQxWzVdCisgICAgMC4zOTNbMl0KKyAgMC4zMzRbMV0KKyAgICAgIDAuMjc1WzNdCisgICAgMC4yMTZbMl0KKyAgICAgICAgICAwLjE3N1s1XQorICAgICAgICAwLjE1N1s0XQorICAgICAgMC4xMThbM10KKyAgICAgICAgMC45OFs0XQorICAgICAgICAgIDAuNTlbNV0KKzAuMFswXQorcmVtb3ZlIHBvaW50ZXIgMzcsIHBheWxvYWQgNTgwCitUcmVlIGxvb2s6CisgICAgMC45MzRbMl0KKyAgICAgIDAuODc1WzNdCisgIDAuODE2WzFdCisgICAgMC43NTdbMl0KKyAgICAgIDAuNjk4WzNdCisgICAgICAgICAgMC42NTlbNV0KKyAgICAgICAgMC42MzlbNF0KKyAgICAgICAgICAwLjYwMFs1XQorMC41NDFbMF0KKyAgMC4zOTNbMV0KKyAgICAwLjMzNFsyXQorICAgICAgICAgIDAuMjc1WzVdCisgICAgICAgIDAuMjE2WzRdCisgICAgICAgICAgICAgIDAuMTc3WzddCisgICAgICAgICAgICAwLjE1N1s2XQorICAgICAgICAgIDAuMTE4WzVdCisgICAgICAgICAgICAwLjk4WzZdCisgICAgICAgICAgICAgIDAuNTlbN10KKyAgICAgIDAuMFszXQorcmVtb3ZlIHBvaW50ZXIgMzgsIHBheWxvYWQgOTgKK1RyZWUgbG9vazoKKyAgICAgICAgMC45MzRbNF0KKyAgICAgICAgICAwLjg3NVs1XQorICAgICAgMC44MTZbM10KKyAgICAgICAgMC43NTdbNF0KKyAgICAgICAgICAwLjY5OFs1XQorICAgICAgICAgICAgICAwLjY1OVs3XQorICAgICAgICAgICAgMC42MzlbNl0KKyAgICAgICAgICAgICAgMC42MDBbN10KKyAgICAwLjU0MVsyXQorICAwLjM5M1sxXQorICAgIDAuMzM0WzJdCisgICAgICAgICAgMC4yNzVbNV0KKyAgICAgICAgMC4yMTZbNF0KKyAgICAgICAgICAgIDAuMTc3WzZdCisgICAgICAgICAgMC4xNTdbNV0KKyAgICAgIDAuMTE4WzNdCiswLjU5WzBdCisgIDAuMFsxXQorcmVtb3ZlIHBvaW50ZXIgMzksIHBheWxvYWQgNjM5CitUcmVlIGxvb2s6CisgICAgICAwLjkzNFszXQorICAgICAgICAwLjg3NVs0XQorICAgIDAuODE2WzJdCisgIDAuNzU3WzFdCisgICAgMC42OThbMl0KKyAgICAgIDAuNjU5WzNdCiswLjYwMFswXQorICAwLjU0MVsxXQorICAgIDAuMzkzWzJdCisgICAgICAgIDAuMzM0WzRdCisgICAgICAgICAgICAgIDAuMjc1WzddCisgICAgICAgICAgICAwLjIxNls2XQorICAgICAgICAgICAgICAgIDAuMTc3WzhdCisgICAgICAgICAgICAgIDAuMTU3WzddCisgICAgICAgICAgMC4xMThbNV0KKyAgICAgIDAuNTlbM10KKyAgICAgICAgMC4wWzRdCityZW1vdmUgcG9pbnRlciA0MCwgcGF5bG9hZCAxNTcKK1RyZWUgbG9vazoKKyAgICAgICAgICAwLjkzNFs1XQorICAgICAgICAgICAgMC44NzVbNl0KKyAgICAgICAgMC44MTZbNF0KKyAgICAgIDAuNzU3WzNdCisgICAgICAgIDAuNjk4WzRdCisgICAgICAgICAgMC42NTlbNV0KKyAgICAwLjYwMFsyXQorICAwLjU0MVsxXQorICAgIDAuMzkzWzJdCisgICAgICAwLjMzNFszXQorICAgICAgICAgIDAuMjc1WzVdCisgICAgICAgIDAuMjE2WzRdCisgICAgICAgICAgMC4xNzdbNV0KKzAuMTE4WzBdCisgIDAuNTlbMV0KKyAgICAwLjBbMl0KK3JlbW92ZSBwb2ludGVyIDQxLCBwYXlsb2FkIDY5OAorVHJlZSBsb29rOgorICAgICAgMC45MzRbM10KKyAgICAgICAgMC44NzVbNF0KKyAgICAwLjgxNlsyXQorICAwLjc1N1sxXQorMC42NTlbMF0KKyAgMC42MDBbMV0KKyAgICAwLjU0MVsyXQorICAgICAgICAwLjM5M1s0XQorICAgICAgICAgIDAuMzM0WzVdCisgICAgICAgICAgICAgIDAuMjc1WzddCisgICAgICAgICAgICAwLjIxNls2XQorICAgICAgICAgICAgICAwLjE3N1s3XQorICAgICAgMC4xMThbM10KKyAgICAgICAgMC41OVs0XQorICAgICAgICAgIDAuMFs1XQorcmVtb3ZlIHBvaW50ZXIgNDIsIHBheWxvYWQgMjE2CitUcmVlIGxvb2s6CisgICAgICAgICAgMC45MzRbNV0KKyAgICAgICAgICAgIDAuODc1WzZdCisgICAgICAgIDAuODE2WzRdCisgICAgICAwLjc1N1szXQorICAgIDAuNjU5WzJdCisgIDAuNjAwWzFdCisgICAgMC41NDFbMl0KKyAgICAgICAgMC4zOTNbNF0KKyAgICAgIDAuMzM0WzNdCisgICAgICAgIDAuMjc1WzRdCiswLjE3N1swXQorICAwLjExOFsxXQorICAgIDAuNTlbMl0KKyAgICAgIDAuMFszXQorcmVtb3ZlIHBvaW50ZXIgNDMsIHBheWxvYWQgNzU3CitUcmVlIGxvb2s6CisgICAgMC45MzRbMl0KKyAgICAgIDAuODc1WzNdCisgIDAuODE2WzFdCiswLjY1OVswXQorICAwLjYwMFsxXQorICAgICAgMC41NDFbM10KKyAgICAgICAgICAwLjM5M1s1XQorICAgICAgICAwLjMzNFs0XQorICAgICAgICAgIDAuMjc1WzVdCisgICAgMC4xNzdbMl0KKyAgICAgIDAuMTE4WzNdCisgICAgICAgIDAuNTlbNF0KKyAgICAgICAgICAwLjBbNV0KK3JlbW92ZSBwb2ludGVyIDQ0LCBwYXlsb2FkIDI3NQorVHJlZSBsb29rOgorICAgICAgICAwLjkzNFs0XQorICAgICAgICAgIDAuODc1WzVdCisgICAgICAwLjgxNlszXQorICAgIDAuNjU5WzJdCisgIDAuNjAwWzFdCisgICAgICAwLjU0MVszXQorICAgICAgICAwLjM5M1s0XQorICAgIDAuMzM0WzJdCiswLjE3N1swXQorICAwLjExOFsxXQorICAgIDAuNTlbMl0KKyAgICAgIDAuMFszXQorcmVtb3ZlIHBvaW50ZXIgNDUsIHBheWxvYWQgODE2CitUcmVlIGxvb2s6CisgIDAuOTM0WzFdCisgICAgMC44NzVbMl0KKzAuNjU5WzBdCisgIDAuNjAwWzFdCisgICAgICAgIDAuNTQxWzRdCisgICAgICAgICAgMC4zOTNbNV0KKyAgICAgIDAuMzM0WzNdCisgICAgMC4xNzdbMl0KKyAgICAgIDAuMTE4WzNdCisgICAgICAgIDAuNTlbNF0KKyAgICAgICAgICAwLjBbNV0KK3JlbW92ZSBwb2ludGVyIDQ2LCBwYXlsb2FkIDMzNAorVHJlZSBsb29rOgorICAgICAgMC45MzRbM10KKyAgICAgICAgMC44NzVbNF0KKyAgICAwLjY1OVsyXQorICAwLjYwMFsxXQorICAgIDAuNTQxWzJdCisgICAgICAwLjM5M1szXQorMC4xNzdbMF0KKyAgMC4xMThbMV0KKyAgICAwLjU5WzJdCisgICAgICAwLjBbM10KK3JlbW92ZSBwb2ludGVyIDQ3LCBwYXlsb2FkIDg3NQorVHJlZSBsb29rOgorICAwLjkzNFsxXQorMC42NTlbMF0KKyAgMC42MDBbMV0KKyAgICAgIDAuNTQxWzNdCisgICAgICAgIDAuMzkzWzRdCisgICAgMC4xNzdbMl0KKyAgICAgIDAuMTE4WzNdCisgICAgICAgIDAuNTlbNF0KKyAgICAgICAgICAwLjBbNV0KK3JlbW92ZSBwb2ludGVyIDQ4LCBwYXlsb2FkIDM5MworVHJlZSBsb29rOgorICAgICAgMC45MzRbM10KKyAgICAwLjY1OVsyXQorICAwLjYwMFsxXQorICAgIDAuNTQxWzJdCiswLjE3N1swXQorICAwLjExOFsxXQorICAgIDAuNTlbMl0KKyAgICAgIDAuMFszXQorcmVtb3ZlIHBvaW50ZXIgNDksIHBheWxvYWQgOTM0CitUcmVlIGxvb2s6CiswLjY1OVswXQorICAwLjYwMFsxXQorICAgICAgMC41NDFbM10KKyAgICAwLjE3N1syXQorICAgICAgMC4xMThbM10KKyAgICAgICAgMC41OVs0XQorICAgICAgICAgIDAuMFs1XQorcmVtb3ZlIHBvaW50ZXIgMCwgcGF5bG9hZCAwCitUcmVlIGxvb2s6CisgIDAuNjU5WzFdCiswLjYwMFswXQorICAgICAgMC41NDFbM10KKyAgICAwLjE3N1syXQorICAwLjExOFsxXQorICAgIDAuNTlbMl0KK3JlbW92ZSBwb2ludGVyIDEsIHBheWxvYWQgNTQxCitUcmVlIGxvb2s6CisgICAgMC42NTlbMl0KKyAgMC42MDBbMV0KKzAuMTc3WzBdCisgIDAuMTE4WzFdCisgICAgMC41OVsyXQorcmVtb3ZlIHBvaW50ZXIgMiwgcGF5bG9hZCA1OQorVHJlZSBsb29rOgorICAgICAgMC42NTlbM10KKyAgICAwLjYwMFsyXQorICAwLjE3N1sxXQorMC4xMThbMF0KK3JlbW92ZSBwb2ludGVyIDMsIHBheWxvYWQgNjAwCitUcmVlIGxvb2s6CisgIDAuNjU5WzFdCiswLjE3N1swXQorICAwLjExOFsxXQorcmVtb3ZlIHBvaW50ZXIgNCwgcGF5bG9hZCAxMTgKK1RyZWUgbG9vazoKKyAgMC42NTlbMV0KKzAuMTc3WzBdCityZW1vdmUgcG9pbnRlciA1LCBwYXlsb2FkIDY1OQorVHJlZSBsb29rOgorMC4xNzdbMF0KK3JlbW92ZSBwb2ludGVyIDYsIHBheWxvYWQgMTc3Cis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorCis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NTAxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzEKQEAgLTAsMCArMSw2MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0VQU1YKK0xJU1QKK25ldHJjCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIworIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIChvcHRpb25hbCAubmV0cmM7IHVzZXIvbm8gcGFzcykgZGlyIGxpc3QgUEFTVgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tbmV0cmMtb3B0aW9uYWwgLS1uZXRyYy1maWxlIGxvZy9uZXRyYzEzMSBmdHA6Ly91c2VyMkAlSE9TVElQOiVGVFBQT1JULworPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL25ldHJjMTMxIiA+CisjIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIHdlcmUgY3JlYXRlZCB3aGlsZSB0ZXN0aW5nIGN1cmwKK21hY2hpbmUgJUhPU1RJUCBsb2dpbiB1c2VyMSBwYXNzd29yZCBwYXNzd2QxCittYWNoaW5lICVIT1NUSVAgbG9naW4gdXNlcjIgcGFzc3dvcmQgcGFzc3dkMgorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiB1c2VyMg0KK1BBU1MgcGFzc3dkMg0KK1BXRA0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzEwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDBmM2M1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxMApAQCAtMCwwICsxLDEyNSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBOVExNIGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisKKzwhLS0gbm8gPGRhdGE+IGluIHRoaXMgdGVzdCBzaW5jZSB3ZSBoYXZlIE5UTE0gZnJvbSB0aGUgc3RhcnQKKworVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyBhIGZpcnN0CitBdXRob3JpemF0aW9uOiBOVExNIGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudCAtLT4KKworPGRhdGExMDAxPgorSFRUUC8xLjEgNDAxIE5vdyBnaW1tZSB0aGF0IHNlY29uZCByZXF1ZXN0IG9mIGNyYXAKK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjAKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEKK0NvbnRlbnQtTGVuZ3RoOiAzNAorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0KKworVGhpcyBpcyBub3QgdGhlIHJlYWwgcGFnZSBlaXRoZXIhCis8L2RhdGExMDAxPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgdGhlIHNlY29uZAorIyBBdXRob3JpemF0aW9uOiBOVExNIGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAyPgorSFRUUC8xLjEgMjAwIFRoaW5ncyBhcmUgZmluZSBpbiBzZXJ2ZXIgbGFuZCBzd3NjbG9zZQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMAorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQorQ29udGVudC1MZW5ndGg6IDMyCisKK0ZpbmFsbHksIHRoaXMgaXMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YTEwMDI+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgTm93IGdpbW1lIHRoYXQgc2Vjb25kIHJlcXVlc3Qgb2YgY3JhcAorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMAorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQorQ29udGVudC1MZW5ndGg6IDM0CitXV1ctQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQorCitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHNlcnZlciBsYW5kIHN3c2Nsb3NlCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xCitDb250ZW50LUxlbmd0aDogMzIKKworRmluYWxseSwgdGhpcyBpcyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitOVExNX1dCCitkZWJ1ZworPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCBOVExNIGRlbGVnYXRpb24gdG8gd2luYmluZCBoZWxwZXIKKyA8L25hbWU+CisgPHNldGVudj4KKyMgd2UgZm9yY2Ugb3VyIG93biBob3N0IG5hbWUsIGluIG9yZGVyIHRvIG1ha2UgdGhlIHRlc3QgbWFjaGluZSBpbmRlcGVuZGVudAorQ1VSTF9HRVRIT1NUTkFNRT1jdXJsaG9zdAorIyB3ZSB0cnkgdG8gdXNlIHRoZSBMRF9QUkVMT0FEIGhhY2ssIGlmIG5vdCBhIGRlYnVnIGJ1aWxkCitMRF9QUkVMT0FEPSVQV0QvbGlidGVzdC8ubGlicy9saWJob3N0bmFtZS5zbworIyBzZXQgcGF0aCB0byBmYWtlX2F1dGggaW5zdGVhZCBvZiByZWFsIG50bG1fYXV0aCB0byBnZW5lcmF0ZSBOVExNIHR5cGUxIGFuZCB0eXBlIDMgbWVzc2FnZXMKK0NVUkxfTlRMTV9XQl9GSUxFPSVQV0Qvc2VydmVyL2Zha2VfbnRsbQorIyBzZXQgc291cmNlIGRpcmVjdG9yeSBzbyBmYWtlX250bG0gY2FuIGZpbmQgdGhlIHRlc3QgZmlsZXMKK0NVUkxfTlRMTV9BVVRIX1NSQ0RJUj0lU1JDRElSCisjIHNldCB0aGUgdGVzdCBudW1iZXIKK0NVUkxfTlRMTV9BVVRIX1RFU1ROVU09MTMxMAorIDwvc2V0ZW52PgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEzMTAgLXUgdGVzdHVzZXI6YW55cGFzc3dkIC0tbnRsbS13YgorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTMxMCBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFBQUFBQUFBQUF3QUFBQQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC42LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNi1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzEzMTAgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUU4QUFBQVlBQmdBWndBQUFBQUFBQUJBQUFBQUNBQUlBRUFBQUFBSEFBY0FTQUFBQUFBQUFBQUFBQUFBZ2dFQUFIUmxjM1IxYzJWeVZVNUxUazlYVGxwa1F3S1JDWkZNaGpqMHR3NDd3RWpLSFJIbHZ6ZnhRYW1GY2hlTXV2OHYreGVxcGhFTzVWNDF4UmQ3UjlkZU9RPT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorIyBJbnB1dCBhbmQgb3V0cHV0ICh0eXBlIDEgbWVzc2FnZSkgZm9yIGZha2VfbnRsbQorPG50bG1fYXV0aF90eXBlMT4KKzxpbnB1dD4KK1lSCis8L2lucHV0PgorPG91dHB1dD4KK1lSIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1BQUFBQUFBQUFBd0FBQUEKKzwvb3V0cHV0PgorPC9udGxtX2F1dGhfdHlwZTE+CisjIElucHV0IGFuZCBvdXRwdXQgKHR5cGUgMyBtZXNzYWdlKSBmb3IgZmFrZV9udGxtCis8bnRsbV9hdXRoX3R5cGUzPgorPGlucHV0PgorVFQgVGxSTVRWTlRVQUFDQUFBQUFnQUNBREFBQUFBR2dvRUFjNTFBWVZEZ3lOY0FBQUFBQUFBQUFHNEFiZ0F5QUFBQVEwTUNBQVFBUXdCREFBRUFFZ0JGQUV3QVNRQlRBRUVBUWdCRkFGUUFTQUFFQUJnQVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQXdBc0FHVUFiQUJwQUhNQVlRQmlBR1VBZEFCb0FDNEFZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUFBQUFBQT09Cis8L2lucHV0PgorPG91dHB1dD4KK0tLIFRsUk1UVk5UVUFBREFBQUFHQUFZQUU4QUFBQVlBQmdBWndBQUFBQUFBQUJBQUFBQUNBQUlBRUFBQUFBSEFBY0FTQUFBQUFBQUFBQUFBQUFBZ2dFQUFIUmxjM1IxYzJWeVZVNUxUazlYVGxwa1F3S1JDWkZNaGpqMHR3NDd3RWpLSFJIbHZ6ZnhRYW1GY2hlTXV2OHYreGVxcGhFTzVWNDF4UmQ3UjlkZU9RPT0KKzwvb3V0cHV0PgorPC9udGxtX2F1dGhfdHlwZTM+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ3NjQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMTEKQEAgLTAsMCArMSw2NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorLUoKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0NvbnRlbnQtRGlzcG9zaXRpb246IGZpbGVuYW1lPW5hbWUxMzExOyBjaGFyc2V0PWZ1bm55OyBvcHRpb249c3RyYW5nZQorCisxMjM0NQorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKyMgdGhpcyByZWxpZXMgb24gdGhlIGRlYnVnIGZlYXR1cmUgdG8gYWxsb3cgdXMgdG8gc2V0IGRpcmVjdG9yeSB0byBzdG9yZSB0aGUKKyMgLUogb3V0cHV0IGluCis8ZmVhdHVyZXM+CitkZWJ1ZworPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxuYW1lPgorSFRUUCBHRVQgd2l0aCAtSiBhbmQgQ29udGVudC1EaXNwb3NpdGlvbgorPC9uYW1lPgorPHNldGVudj4KK0NVUkxfVEVTVERJUj0lUFdEL2xvZworPC9zZXRlbnY+Cis8Y29tbWFuZCBvcHRpb249Im5vLW91dHB1dCxuby1pbmNsdWRlIj4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMzExIC1KIC1PCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTMxMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPGZpbGUgbmFtZT0ibG9nL25hbWUxMzExIj4KKzEyMzQ1Cis8L2ZpbGU+CisKKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMTIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMTQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzEyCkBAIC0wLDAgKzEsNjQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKy1KCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNgorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSJuYW1lMTMxMjt3ZWlyZCIKKworMTIzNDUKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+CisjIHRoaXMgcmVsaWVzIG9uIHRoZSBkZWJ1ZyBmZWF0dXJlIHRvIGFsbG93IHVzIHRvIHNldCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlCisjIC1KIG91dHB1dCBpbgorPGZlYXR1cmVzPgorZGVidWcKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8bmFtZT4KK0hUVFAgR0VUIHdpdGggLUosIENvbnRlbnQtRGlzcG9zaXRpb24gYW5kIDsgaW4gZmlsZW5hbWUKKzwvbmFtZT4KKzxzZXRlbnY+CitDVVJMX1RFU1RESVI9JVBXRC9sb2cKKzwvc2V0ZW52PgorPGNvbW1hbmQgb3B0aW9uPSJuby1vdXRwdXQsbm8taW5jbHVkZSI+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTMxMiAtSiAtTworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzEzMTIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzxmaWxlIG5hbWU9ImxvZy9uYW1lMTMxMjt3ZWlyZCI+CisxMjM0NQorPC9maWxlPgorCis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzEzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzMxYWU5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxMwpAQCAtMCwwICsxLDY0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCistSgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0nbmFtZTEzMTMKKworMTIzNDUKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+CisjIHRoaXMgcmVsaWVzIG9uIHRoZSBkZWJ1ZyBmZWF0dXJlIHRvIGFsbG93IHVzIHRvIHNldCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlCisjIC1KIG91dHB1dCBpbgorPGZlYXR1cmVzPgorZGVidWcKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8bmFtZT4KK0hUVFAgR0VUIHdpdGggLUosIENvbnRlbnQtRGlzcG9zaXRpb24sIHVuZXZlbiBxdW90ZXMKKzwvbmFtZT4KKzxzZXRlbnY+CitDVVJMX1RFU1RESVI9JVBXRC9sb2cKKzwvc2V0ZW52PgorPGNvbW1hbmQgb3B0aW9uPSJuby1vdXRwdXQsbm8taW5jbHVkZSI+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTMxMyAtSiAtTworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzEzMTMgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzxmaWxlIG5hbWU9ImxvZy9uYW1lMTMxMyI+CisxMjM0NQorPC9maWxlPgorCis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzE0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzhhZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxNApAQCAtMCwwICsxLDc5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIHByb3h5Citmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2Ugc3dzYm91bmNlCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiAvL3NvbWV3aGVyZS5leGFtcGxlLmNvbS9yZXBseS8xMzE0CitDb250ZW50LUxlbmd0aDogMzIKK0Nvbm5lY3Rpb246IGNsb3NlCisKK1JlZGlyZWN0IHRvIHRoZSBzYW1lIFVSTCBhZ2FpbiEKKzwvZGF0YT4KKworPGRhdGExPgorSFRUUC8xLjEgMjAwIG9raWRva2kKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDQKK0Nvbm5lY3Rpb246IGNsb3NlCisKK21vbworPC9kYXRhMT4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDMwMSBUaGlzIGlzIGEgd2VpcmRvIHRleHQgbWVzc2FnZSBzd3Nib3VuY2UKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTG9jYXRpb246IC8vc29tZXdoZXJlLmV4YW1wbGUuY29tL3JlcGx5LzEzMTQKK0NvbnRlbnQtTGVuZ3RoOiAzMgorQ29ubmVjdGlvbjogY2xvc2UKKworSFRUUC8xLjEgMjAwIG9raWRva2kKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDQKK0Nvbm5lY3Rpb246IGNsb3NlCisKK21vbworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBMb2NhdGlvbjogZm9sbG93aW5nIGEgLy8gcHJlZml4ZWQgdXJsCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovL2ZpcnN0cGxhY2UuZXhhbXBsZS5jb20vd2FudC8xMzE0IC1MIC14IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6IGN1cmwvLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgaHR0cDovL2ZpcnN0cGxhY2UuZXhhbXBsZS5jb20vd2FudC8xMzE0IEhUVFAvMS4xDQorSG9zdDogZmlyc3RwbGFjZS5leGFtcGxlLmNvbQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0dFVCBodHRwOi8vc29tZXdoZXJlLmV4YW1wbGUuY29tL3JlcGx5LzEzMTQgSFRUUC8xLjENCitIb3N0OiBzb21ld2hlcmUuZXhhbXBsZS5jb20NCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJmMTU4YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMTUKQEAgLTAsMCArMSw4MyBAQAorPHRlc3RjYXNlPgorIyBCYXNlZCBvbiB0ZXN0cyAxODYgYW5kIDEwNTMKKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBGT1JNUE9TVAorSFRUUCBmaWxlIHVwbG9hZAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMjkgSnVsIDIwMDggMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiAwCitDb25uZWN0aW9uOiBjbG9zZQorCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBSRkMxODY3LXR5cGUgZm9ybXBvc3RpbmcgLSAtRiB3aXRoIHRocmVlIGZpbGVzLCBvbmUgd2l0aCBleHBsaWNpdCB0eXBlCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvMTMxNSAtRiBuYW1lPXZhbHVlIC1GICdmaWxlPUBsb2cvdGVzdDEzMTUudHh0LGxvZy90ZXN0MTMxNS50eHQ7dHlwZT1tYWdpYy9jb250ZW50LGxvZy90ZXN0MTMxNS50eHQnCis8L2NvbW1hbmQ+CisjIFdlIGNyZWF0ZSB0aGlzIGZpbGUgYmVmb3JlIHRoZSBjb21tYW5kIGlzIGludm9rZWQhCis8ZmlsZSBuYW1lPSJsb2cvdGVzdDEzMTUudHh0Ij4KK2R1bW15IGRhdGEKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KKyheVXNlci1BZ2VudDouKnwtLS0tLStcdyspCis8L3N0cmlwPgorPHByb3RvY29sPgorUE9TVCAvd2Uvd2FudC8xMzE1IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjE4LjIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTguMiBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjQNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDc5NQ0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIg0KKw0KK3ZhbHVlDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIg0KK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tYWFhYWFhYWFhYWFhDQorDQorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9InRlc3QxMzE1LnR4dCINCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCisNCitkdW1teSBkYXRhCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS05ZWY4ZDYyMDU3NjMNCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0idGVzdDEzMTUudHh0Ig0KK0NvbnRlbnQtVHlwZTogbWFnaWMvY29udGVudA0KKw0KK2R1bW15IGRhdGEKKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTllZjhkNjIwNTc2Mw0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJ0ZXN0MTMxNS50eHQiDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorDQorZHVtbXkgZGF0YQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tYWFhYWFhYWFhYWFhLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS05ZWY4ZDYyMDU3NjMtLQ0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzE2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDg1YzA1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxNgpAQCAtMCwwICsxLDYyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorTElTVAorSFRUUCBDT05ORUNUCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAyMDAgTWlnaHR5IGZpbmUgaW5kZWVkDQorDQorSFRUUC8xLjEgMjAwIE1pZ2h0eSBmaW5lIGluZGVlZA0KKw0KK3RvdGFsIDIwCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuLgorZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFQKKy1yLS1yLS1yLS0gICAxIDAgICAgICAgIDEgICAgICAgICAgICAgMzUgSnVsIDE2ICAxOTk2IFJFQURNRQorbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldgorZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgMjkgMTY6MDQgZG93bmxvYWQuaHRtbAorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCitkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWIKK2RyLXhyLXhyLXggICA1IDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IHVzcgorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAoraHR0cC1wcm94eQorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgTElTVCB0dW5uZWxlZCB0aHJvdWdoIEhUVFAgcHJveHkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULyAtcCAteCAlSE9TVElQOiVQUk9YWVBPUlQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBBDQorTElTVA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxNyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxODg2YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMTcKQEAgLTAsMCArMSw1NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorLS1yZXNvbHZlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPG5hbWU+CitIVFRQIHdpdGggLS1yZXNvbHZlCis8L25hbWU+Cis8Y29tbWFuZD4KKy0tcmVzb2x2ZSBleGFtcGxlLmNvbTolSFRUUFBPUlQ6JUhPU1RJUCBodHRwOi8vZXhhbXBsZS5jb206JUhUVFBQT1JULzEzMTcKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xMzE3IEhUVFAvMS4xDQorSG9zdDogZXhhbXBsZS5jb206JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxOCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5ZTA4ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMTgKQEAgLTAsMCArMSw1OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiAwCisKKzwvZGF0YT4KKzxkYXRhMT4KK0hUVFAvMS4xIDIwMCBzZWNvbmQgdmVyc2lvbgorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDAKKworPC9kYXRhMT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggc2FtZSBob3N0IG5hbWUgdXNpbmcgZGlmZmVyZW50IGNhc2VzCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1yZXNvbHZlIE1pWGVEY0FzRS5jT206JUhUVFBQT1JUOiVIT1NUSVAgaHR0cDovL01pWGVEY0FzRS5jT206JUhUVFBQT1JULzEzMTggaHR0cDovL21peGVkY2FzZS5jb206JUhUVFBQT1JULzEzMTgwMDAxCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTMxOCBIVFRQLzEuMQ0KK0hvc3Q6IE1pWGVEY0FzRS5jT206JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzEzMTgwMDAxIEhUVFAvMS4xDQorSG9zdDogbWl4ZWRjYXNlLmNvbTolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzE5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDYxZjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMxOQpAQCAtMCwwICsxLDcyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1BPUDMKK1JFVFIKK0hUVFAgQ09OTkVDVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKyMgV2hlbiBkb2luZyBMSVNULCB3ZSBnZXQgdGhlIGRlZmF1bHQgbGlzdCBvdXRwdXQgaGFyZC1jb2RlZCBpbiB0aGUgdGVzdAorIyBGVFAgc2VydmVyCis8ZGF0YT4KK0Zyb206IG1lQHNvbWV3aGVyZQorVG86IGZha2VAbm93aGVyZQorCitib2R5CisKKy0tCisgIHlvdXJzIHNpbmNlcmVseQ0KKzwvZGF0YT4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBNaWdodHkgZmluZSBpbmRlZWQNCisNCitGcm9tOiBtZUBzb21ld2hlcmUKK1RvOiBmYWtlQG5vd2hlcmUKKworYm9keQorCistLQorICB5b3VycyBzaW5jZXJlbHkNCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorcG9wMworaHR0cC1wcm94eQorPC9zZXJ2ZXI+CisgPG5hbWU+CitQT1AzIGZldGNoIHR1bm5lbGVkIHRocm91Z2ggSFRUUCBwcm94eQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK3BvcDM6Ly8lSE9TVElQOiVQT1AzUE9SVC8xMzE5IC1wIC14ICVIT1NUSVA6JVBST1hZUE9SVCAtdSB1c2VyOnNlY3JldAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6Cis8L3N0cmlwPgorPHByb3RvY29sPgorVVNFUiB1c2VyDQorUEFTUyBzZWNyZXQNCitSRVRSIDEzMTkNCitRVUlUDQorPC9wcm90b2NvbD4KKzxwcm94eT4KK0NPTk5FQ1QgJUhPU1RJUDolUE9QM1BPUlQgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVQT1AzUE9SVA0KK1VzZXItQWdlbnQ6IGN1cmwvNy4yNC4wLURFViAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4yNC4wLURFViBPcGVuU1NMLzEuMC4wZSB6bGliLzEuMi4zLjQgYy1hcmVzLzEuNy42LURFViBsaWJpZG4vMS4yMyBsaWJzc2gyLzEuNC4wX0RFViBsaWJydG1wLzIuMmUNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm94eT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDk2OTUzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMyCkBAIC0wLDAgKzEsNjIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitFUFNWCitMSVNUCituZXRyYworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKyMgV2hlbiBkb2luZyBMSVNULCB3ZSBnZXQgdGhlIGRlZmF1bHQgbGlzdCBvdXRwdXQgaGFyZC1jb2RlZCBpbiB0aGUgdGVzdAorIyBGVFAgc2VydmVyCis8ZGF0YWNoZWNrPgordG90YWwgMjAKK2Ryd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4KK2Ryd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4uCitkcnd4ci14ci14ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAgMiAgMTk5NiAuTmVYVAorLXItLXItLXItLSAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAzNSBKdWwgMTYgIDE5OTYgUkVBRE1FCitscnd4cnd4cnd4ICAgMSAwICAgICAgICAxICAgICAgICAgICAgICA3IERlYyAgOSAgMTk5OSBiaW4gLT4gdXNyL2JpbgorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgZGV2Citkcnd4cnd4cnd4ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAyOSAxNjowNCBkb3dubG9hZC5odG1sCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE5vdiAzMCAgMTk5NSBldGMKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0IDMwIDE0OjMzIHB1YgorZHIteHIteHIteCAgIDUgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgdXNyCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCAob3B0aW9uYWwgLm5ldHJjOyB1c2VyL3Bhc3N3ZCBzdXBwbGllZCkgZGlyIGxpc3QgUEFTVgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tbmV0cmMtb3B0aW9uYWwgLS1uZXRyYy1maWxlIGxvZy9uZXRyYzEzMiBmdHA6Ly9tYXJ5Om1hcmtAJUhPU1RJUDolRlRQUE9SVC8KKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9uZXRyYzEzMiIgPgorIyB0aGUgZm9sbG93aW5nIHR3byBsaW5lcyB3ZXJlIGNyZWF0ZWQgd2hpbGUgdGVzdGluZyBjdXJsCittYWNoaW5lICVIT1NUSVAgbG9naW4gdXNlcjEgcGFzc3dvcmQgcGFzc3dkMQorbWFjaGluZSAlSE9TVElQIGxvZ2luIHVzZXIyIHBhc3N3b3JkIHBhc3N3ZDIKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgbWFyeQ0KK1BBU1MgbWFyaw0KK1BXRA0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzIwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMyMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmEzZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMyMApAQCAtMCwwICsxLDY1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NNVFAKK0hUVFAgQ09OTkVDVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzbXRwCitodHRwLXByb3h5Cis8L3NlcnZlcj4KKyA8bmFtZT4KK1NNVFAgc2VuZCB0dW5uZWxlZCB0cm91Z2ggSFRUUCBwcm94eQorIDwvbmFtZT4KKzxzdGRpbj4KK0Zyb206IGRpZmZlcmVudAorVG86IGFub3RoZXIKKworYm9keQorPC9zdGRpbj4KKyA8Y29tbWFuZD4KK3NtdHA6Ly8lSE9TVElQOiVTTVRQUE9SVC91c2VyIC0tbWFpbC1yY3B0IDEzMjBAZm9vIC0tbWFpbC1yY3B0IDEzMjBAZm9vYmFyLmV4YW1wbGUgLS1tYWlsLWZyb20gMTMyMEBmcm9tIC1UIC0gLXAgLXggJUhPU1RJUDolUFJPWFlQT1JUCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0VITE8gdXNlcg0KK01BSUwgRlJPTTo8MTMyMEBmcm9tPg0KK1JDUFQgVE86PDEzMjBAZm9vPg0KK1JDUFQgVE86PDEzMjBAZm9vYmFyLmV4YW1wbGU+DQorREFUQQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPHVwbG9hZD4KK0Zyb206IGRpZmZlcmVudAorVG86IGFub3RoZXIKKworYm9keQorDQorLg0KKzwvdXBsb2FkPgorPHByb3h5PgorQ09OTkVDVCAlSE9TVElQOiVTTVRQUE9SVCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JVNNVFBQT1JUDQorVXNlci1BZ2VudDogY3VybC83LjI0LjAtREVWIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjI0LjAtREVWIE9wZW5TU0wvMS4wLjBlIHpsaWIvMS4yLjMuNCBjLWFyZXMvMS43LjYtREVWIGxpYmlkbi8xLjIzIGxpYnNzaDIvMS40LjBfREVWIGxpYnJ0bXAvMi4yZQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3h5PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMyMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjZDM3NQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMjEKQEAgLTAsMCArMSw2OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitJTUFQCitGRVRDSAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitGcm9tOiBtZUBzb21ld2hlcmUKK1RvOiBmYWtlQG5vd2hlcmUKKworYm9keQorCistLQorICB5b3VycyBzaW5jZXJlbHkKKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAyMDAgTWlnaHR5IGZpbmUgaW5kZWVkDQorDQorRnJvbTogbWVAc29tZXdoZXJlCitUbzogZmFrZUBub3doZXJlCisKK2JvZHkKKworLS0KKyAgeW91cnMgc2luY2VyZWx5Cis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraW1hcAoraHR0cC1wcm94eQorPC9zZXJ2ZXI+CisgPG5hbWU+CitJTUFQIEZFVENIIHR1bm5lbGVkIHRocm91Z2ggSFRUUCBwcm94eQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2ltYXA6Ly8lSE9TVElQOiVJTUFQUE9SVC8xMzIxIC11IHVzZXI6c2VjcmV0IC1wIC14ICVIT1NUSVA6JVBST1hZUE9SVAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6IGN1cmwvLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitCIExPR0lOIHVzZXIgc2VjcmV0DQorQyBTRUxFQ1QgMTMyMQ0KK0QgRkVUQ0ggMSBCT0RZW1RFWFRdDQorQSBMT0dPVVQNCis8L3Byb3RvY29sPgorPHByb3h5PgorQ09OTkVDVCAlSE9TVElQOiVJTUFQUE9SVCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUlNQVBQT1JUDQorVXNlci1BZ2VudDogY3VybC83LjI0LjAtREVWIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjI0LjAtREVWIE9wZW5TU0wvMS4wLjBlIHpsaWIvMS4yLjMuNCBjLWFyZXMvMS43LjYtREVWIGxpYmlkbi8xLjIzIGxpYnNzaDIvMS40LjBfREVWIGxpYnJ0bXAvMi4yZQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3h5PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMyMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk2NzI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMjIKQEAgLTAsMCArMSwyOSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitQT1AzCitDUkxGLWluLVVSTAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citwb3AzCis8L3NlcnZlcj4KKyA8bmFtZT4KK1BPUDMgd2l0aCBVUkwtZW5jb2RlZCBDUiBMRiBpbiB0aGUgVVJMCisgPC9uYW1lPgorIDxjb21tYW5kPgorcG9wMzovLyVIT1NUSVA6JVBPUDNQT1JULyUwZCUwYS8xMzIyCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworPHZlcmlmeT4KKyMgMyAtIENVUkxFX1VSTF9NQUxGT1JNQVQKKzxlcnJvcmNvZGU+CiszCis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMjMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZWI4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzIzCkBAIC0wLDAgKzEsMjkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU01UUAorQ1JMRi1pbi1VUkwKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc210cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTTVRQIHdpdGggVVJMLWVuY29kZWQgQ1IgTEYgaW4gdGhlIFVSTAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK3NtdHA6Ly8lSE9TVElQOiVTTVRQUE9SVC8lMGQlMGEvMTMyMworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKzx2ZXJpZnk+CisjIDMgLSBDVVJMRV9VUkxfTUFMRk9STUFUCis8ZXJyb3Jjb2RlPgorMworPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzI0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMyNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTgzNWVmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMyNApAQCAtMCwwICsxLDI5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0lNQVAKK0NSTEYtaW4tVVJMCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2ltYXAKKzwvc2VydmVyPgorIDxuYW1lPgorSU1BUCB3aXRoIFVSTC1lbmNvZGVkIENSIExGIGluIHRoZSBVUkwKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitpbWFwOi8vJUhPU1RJUDolSU1BUFBPUlQvJTBkJTBhLzEzMjIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCis8dmVyaWZ5PgorIyAzIC0gQ1VSTEVfVVJMX01BTEZPUk1BVAorPGVycm9yY29kZT4KKzMKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMyNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiNjJlYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMjUKQEAgLTAsMCArMSw4MCBAQAorIyBodHRwOi8vZ3JlZW5ieXRlcy5kZS90ZWNoL3dlYmRhdi9kcmFmdC1yZXNjaGtlLWh0dHAtc3RhdHVzLTMwOC1sYXRlc3QuaHRtbAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorMzA4Citmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzA4IE9LIHN3c2Nsb3NlDQorTG9jYXRpb246IDEzMjUwMDAyDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KKzwvZGF0YT4KKzxkYXRhMj4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorTG9jYXRpb246IHRoaXMgc2hvdWxkIGJlIGlnbm9yZWQKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb25uZWN0aW9uOiBjbG9zZQorCitib2R5Cis8L2RhdGEyPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDMwOCBPSyBzd3NjbG9zZQ0KK0xvY2F0aW9uOiAxMzI1MDAwMg0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0xvY2F0aW9uOiB0aGlzIHNob3VsZCBiZSBpZ25vcmVkCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworYm9keQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCAzMDgtcmVkaXJlY3Qgd2l0aCBQT1NUCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlLzEzMjUgLUwgLWQgIm1vbyIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sIG5vbmV3bGluZT0ieWVzIj4KK1BPU1QgL3dlLzEzMjUgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDMNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK21vb1BPU1QgL3dlLzEzMjUwMDAyIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAzDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCittb28KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzI2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMyNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjBjYmFjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMyNgpAQCAtMCwwICsxLDQ4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1RFTE5FVAorVVBMT0FECis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBzd3NjbG9zZQorCittb28KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+Cit0ZWxuZXQKKzwvZmVhdHVyZXM+CisgPG5hbWU+CitURUxORVQgdG8gSFRUUCBzZXJ2ZXIKKyA8L25hbWU+Cis8c3RkaW4+CitHRVQgL3dlL3dhbnQvMTMyNiBIVFRQLzEuMA0KKw0KKzwvc3RkaW4+CisgPGNvbW1hbmQ+Cit0ZWxuZXQ6Ly8lSE9TVElQOiVIVFRQUE9SVAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorR0VUIC93ZS93YW50LzEzMjYgSFRUUC8xLjANCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMyNyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlM2Q0ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMjcKQEAgLTAsMCArMSw0NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitURUxORVQKK1VQTE9BRAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK3RlbG5ldAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK1RFTE5FVCBjaGVjayBvZiB1cGxvYWQgd2l0aCBzdGRvdXQgcmVkaXJlY3RlZAorIDwvbmFtZT4KKzxzdGRpbj4KK0dFVCAvaWdub3JlL2Zvci8xMzI3IEhUVFAvMS4wDQorDQorPC9zdGRpbj4KKzxmaWxlIG5hbWU9ImxvZy8xMzI3LnR4dCI+CitHRVQgL3dlL3dhbnQvMTMyNyBIVFRQLzEuMA0KKw0KKzwvZmlsZT4KKyA8Y29tbWFuZCBvcHRpb249Im5vLW91dHB1dCI+Cit0ZWxuZXQ6Ly8lSE9TVElQOiVIVFRQUE9SVCAtVCBsb2cvMTMyNy50eHQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK0dFVCAvd2Uvd2FudC8xMzI3IEhUVFAvMS4wDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMjggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzI4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOTkxZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzI4CkBAIC0wLDAgKzEsNzAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKy1mCis8L2tleXdvcmRzPgorPC9pbmZvPgorCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDQwNCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA2CitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworLW5vby0KKzwvZGF0YT4KKzxkYXRhMT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorRnVubnktaGVhZDogeWVzeWVzCisKKy15ZXMtCis8L2RhdGExPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorRnVubnktaGVhZDogeWVzeWVzCisKKy15ZXMtCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCBhIGdsb2JiZWQgcmFuZ2Ugd2l0aCAtZgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1mICdodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvWzEzMjgwMDAwLTEzMjgwMDAxXScgLW8gbG9nLyMxCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTMyODAwMDAgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC8xMzI4MDAwMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTMyOSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QyZDBjYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMjkKQEAgLTAsMCArMSwzMCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQIHByb3h5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorLy1wcmVmaXhlZCBwcm94eSBuYW1lCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvdGhhdC9wYWdlLzEzMjkgLXggIi9zZXJ2ZXIiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIDUgPT0gQ1VSTEVfQ09VTEROVF9SRVNPTFZFX1BST1hZCis8ZXJyb3Jjb2RlPgorNQorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1MDkyZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzMwpAQCAtMCwwICsxLDYyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorRVBTVgorTElTVAorbmV0cmMKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisjIFdoZW4gZG9pbmcgTElTVCwgd2UgZ2V0IHRoZSBkZWZhdWx0IGxpc3Qgb3V0cHV0IGhhcmQtY29kZWQgaW4gdGhlIHRlc3QKKyMgRlRQIHNlcnZlcgorPGRhdGFjaGVjaz4KK3RvdGFsIDIwCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuLgorZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFQKKy1yLS1yLS1yLS0gICAxIDAgICAgICAgIDEgICAgICAgICAgICAgMzUgSnVsIDE2ICAxOTk2IFJFQURNRQorbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldgorZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgMjkgMTY6MDQgZG93bmxvYWQuaHRtbAorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCitkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWIKK2RyLXhyLXhyLXggICA1IDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IHVzcgorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgKGNvbXB1bHNvcnkgLm5ldHJjOyBpZ25vcmVkIHVzZXIvcGFzc3dkKSBkaXIgbGlzdCBQQVNWCisgPC9uYW1lPgorIDxjb21tYW5kPgorLW4gLS1uZXRyYy1maWxlIGxvZy9uZXRyYzEzMyBmdHA6Ly9tYXJ5Om1hcmtAJUhPU1RJUDolRlRQUE9SVC8KKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9uZXRyYzEzMyIgPgorIyB0aGUgZm9sbG93aW5nIHR3byBsaW5lcyB3ZXJlIGNyZWF0ZWQgd2hpbGUgdGVzdGluZyBjdXJsCittYWNoaW5lICVIT1NUSVAgbG9naW4gdXNlcjEgcGFzc3dvcmQgcGFzc3dkMQorbWFjaGluZSAlSE9TVElQIGxvZ2luIHVzZXIyIHBhc3N3b3JkIHBhc3N3ZDIKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgdXNlcjENCitQQVNTIHBhc3N3ZDENCitQV0QNCitFUFNWDQorVFlQRSBBDQorTElTVA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTM0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTM0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhM2JhNjIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzQKQEAgLTAsMCArMSw2MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0VQU1YKK0xJU1QKK25ldHJjCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIChvcHRpb25hbCAubmV0cmM7IHByb2dyYW1tYXRpYyB1c2VyL3Bhc3N3ZCkgZGlyIGxpc3QgUEFTVgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tbmV0cmMtb3B0aW9uYWwgLS1uZXRyYy1maWxlIGxvZy9uZXRyYzEzNCAtdSByb211bHVzOnJoZW11cyBmdHA6Ly9tYXJ5Om1hcmtAJUhPU1RJUDolRlRQUE9SVC8KKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9uZXRyYzEzNCIgPgorIyB0aGUgZm9sbG93aW5nIHR3byBsaW5lcyB3ZXJlIGNyZWF0ZWQgd2hpbGUgdGVzdGluZyBjdXJsCittYWNoaW5lICVIT1NUSVAgbG9naW4gdXNlcjEgcGFzc3dvcmQgcGFzc3dkMQorbWFjaGluZSAlSE9TVElQIGxvZ2luIHVzZXIyIHBhc3N3b3JkIHBhc3N3ZDIKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgcm9tdWx1cw0KK1BBU1MgcmhlbXVzDQorUFdEDQorRVBTVg0KK1RZUEUgQQ0KK0xJU1QNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGViMGVhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTM1CkBAIC0wLDAgKzEsNTQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitFUFNWCitSRVRSCitSYW5nZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorMDEyMzQ1Njc4OWFiY2RlZgorMDEyMzQ1Njc4OWFiY2RlZgorMDEyMzQ1Njc4OWFiY2RlZgorMDEyMzQ1Njc4OWFiY2RlZgorPC9kYXRhPgorPGRhdGFjaGVjayBub25ld2xpbmU9InllcyI+CiswMTIzNDU2Nzg5YWJjCis8L2RhdGFjaGVjaz4KKzxzaXplPgorNjQKKzwvc2l6ZT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCByZXRyaWV2ZSBhIGJ5dGUtcmFuZ2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistciA0LTE2IGZ0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTM1Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMTM1DQorUkVTVCA0DQorUkVUUiAxMzUNCitBQk9SDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5NDBiNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzNgpAQCAtMCwwICsxLDQyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorRVBTVgorUkVUUgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorMDEyMzQ1Njc4OWFiY2RlZgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIHdpdGggdXNlciBhbmQgbm8gcGFzc3dvcmQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistdSB1c2VyOiBmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzEzNgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiB1c2VyDQorUEFTUyANCitQV0QNCitFUFNWDQorVFlQRSBJDQorU0laRSAxMzYNCitSRVRSIDEzNg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTM3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTI3MjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzcKQEAgLTAsMCArMSw0NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1JFVFIKKy0tZGF0YS1iaW5hcnkKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK3RoaXMgaXMgZmlsZSBjb250ZW50cworPC9kYXRhPgorPHNlcnZlcmNtZD4KK1JFVFJOT1NJWkUKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRvd25sb2FkIHdpdGhvdXQgc2l6ZSBpbiBSRVRSIHN0cmluZworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvYmxhbGJsYS9sdWx1bHVsLzEzNworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBibGFsYmxhDQorQ1dEIGx1bHVsdWwNCitFUFNWDQorVFlQRSBJDQorU0laRSAxMzcNCitSRVRSIDEzNw0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTM4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYjczZTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzgKQEAgLTAsMCArMSw0OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1JFVFIKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK3RoaXMgaXMgZmlsZSBjb250ZW50cworPC9kYXRhPgorPHNpemU+CistMQorPC9zaXplPgorPHNlcnZlcmNtZD4KK1JFVFJOT1NJWkUKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRvd25sb2FkIHdpdGhvdXQgc2l6ZSBpbiBSRVRSIHN0cmluZyBhbmQgbm8gU0laRSBjb21tYW5kCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9ibGFsYmxhL2x1bHVsdWwvMTM4Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIGJsYWxibGENCitDV0QgbHVsdWx1bA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDEzOA0KK1JFVFIgMTM4DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxMzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhMjQyYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDEzOQpAQCAtMCwwICsxLDQ3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUkVUUgorLXoKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK3RoaXMgaXMgZmlsZSBjb250ZW50cworPC9kYXRhPgorPG1kdG0+CisyMTMgMjAwMzA0MDkxMDI2NTkKKzwvbWR0bT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBkb3dubG9hZCBhIG5ld2VyIGZpbGUgd2l0aCAtegorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvYmxhbGJsYS8xMzkgLXogIjEgamFuIDE5ODkiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIGJsYWxibGENCitNRFRNIDEzOQ0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDEzOQ0KK1JFVFIgMTM5DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTQ4NjUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNApAQCAtMCwwICsxLDQ0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgSEVBRAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitTZXJ2ZXI6IHRoZWJlc3QvMS4wCitDb25uZWN0aW9uOiBjbG9zZQorCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBIRUFEIHdpdGggQ29ubmVjdGlvbjogY2xvc2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2FudC8xNCAtaSAtLWhlYWQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorSEVBRCAvd2FudC8xNCBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy40LjItcHJlNCAoc3BhcmMtc3VuLXNvbGFyaXMyLjcpIGxpYmN1cmwgNy40LjItcHJlNA0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkOGJjODUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNDAKQEAgLTAsMCArMSw0MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKKy16CistLWRhdGEtYmluYXJ5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8bWR0bT4KKzIxMyAyMDAzMDQwOTEwMjY1OQorPC9tZHRtPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRvd25sb2FkIGZpbGUgd2l0aCAteiwgZXhwZWN0ZWQgdG8gbm90IHRyYW5zZmVyCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9ibGFsYmxhLzE0MCAteiAiMSBqYW4gMjAwNCIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgYmxhbGJsYQ0KK01EVE0gMTQwDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNDAwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWIyODU2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQwMApAQCAtMCwwICsxLDEwMSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorLS1saWJjdXJsCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAyOSBKdWwgMjAwOCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDAKK0Nvbm5lY3Rpb246IGNsb3NlCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CistLWxpYmN1cmwgZm9yIHNpbXBsZSBIVFRQIEdFVAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50LzE0MDAgLS1saWJjdXJsIGxvZy90ZXN0MTQwMC5jCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2Uvd2FudC8xNDAwIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjE4LjIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTguMiBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjQNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzxzdHJpcGZpbGU+CitzLyhVU0VSQUdFTlQsIFwiKVteXCJdKy8kezF9c3RyaXBwZWQvCisjIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgYW5kIFNTSF9LTk9XTkhPU1RTIHZhcnkgd2l0aCBjb25maWd1cmF0aW9ucyAtIGp1c3QKKyMgaWdub3JlIHRoZW0KKyRfID0gJycgaWYgL0NVUkxPUFRfU1NMX1ZFUklGWVBFRVIvCiskXyA9ICcnIGlmIC9DVVJMT1BUX1NTSF9LTk9XTkhPU1RTLworPC9zdHJpcGZpbGU+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDE0MDAuYyIgbW9kZT0idGV4dCI+CisvKioqKioqKioqIFNhbXBsZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY3VybCBjb21tYW5kIGxpbmUgdG9vbCAqKioqKioqKioqCisgKiBBbGwgY3VybF9lYXN5X3NldG9wdCgpIG9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgYXQ6CisgKiBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIENVUkxjb2RlIHJldDsKKyAgQ1VSTCAqaG5kOworCisgIGhuZCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50LzE0MDAiKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfSEVBREVSLCAxTCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1VTRVJBR0VOVCwgInN0cmlwcGVkIik7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX01BWFJFRElSUywgNTBMKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFLCAxTCk7CisKKyAgLyogSGVyZSBpcyBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGUgY3VybCBjb2RlIHVzZWQgdGhhdCBjYW5ub3QgZ2V0IGdlbmVyYXRlZAorICAgICBhcyBzb3VyY2UgZWFzaWx5LiBZb3UgbWF5IHNlbGVjdCB0byBlaXRoZXIgbm90IHVzZSB0aGVtIG9yIGltcGxlbWVudAorICAgICB0aGVtIHlvdXJzZWxmLgorCisgIENVUkxPUFRfV1JJVEVEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9XUklURUZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgorICBDVVJMT1BUX1JFQUREQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9SRUFERlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfU0VFS0RBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1NFRUtGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKKyAgQ1VSTE9QVF9FUlJPUkJVRkZFUiBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisgIENVUkxPUFRfU1RERVJSIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgorICBDVVJMT1BUX0RFQlVHREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisKKyAgKi8KKworICByZXQgPSBjdXJsX2Vhc3lfcGVyZm9ybShobmQpOworCisgIGN1cmxfZWFzeV9jbGVhbnVwKGhuZCk7CisgIGhuZCA9IE5VTEw7CisKKyAgcmV0dXJuIChpbnQpcmV0OworfQorLyoqKiogRW5kIG9mIHNhbXBsZSBjb2RlICoqKiovCis8L2ZpbGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNDAxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQwMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDk0ZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQwMQpAQCAtMCwwICsxLDEyNCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBCYXNpYyBhdXRoCitIVFRQIHNldCBjb29raWUKK2Nvb2tpZXMKKy0tbGliY3VybAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMjkgSnVsIDIwMDggMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiAwCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KK0Nvbm5lY3Rpb246IGNsb3NlCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CistLWxpYmN1cmwgZm9yIEdFVCB3aXRoIHZhcmlvdXMgb3B0aW9ucworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50LzE0MDEgLS1saWJjdXJsIGxvZy90ZXN0MTQwMS5jIC0tYmFzaWMgLXUgZmFrZTp1c2VyIC1IICJYLUZpbGVzOiBNdWxkZXIiIC1IICJYLU1lbjogY3ljbG9wcywgaWNlbWFuIiAtQSBNeVVBIC1iIGNob2NvbGF0ZT1jaGlwIC0tcHJvdG8gIj1odHRwLGZ0cCxmaWxlIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dlL3dhbnQvMTQwMSBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IHN0cmlwcGVkDQorQXV0aG9yaXphdGlvbjogQmFzaWMgWm1GclpUcDFjMlZ5DQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0Nvb2tpZTogY2hvY29sYXRlPWNoaXANCitYLUZpbGVzOiBNdWxkZXINCitYLU1lbjogY3ljbG9wcywgaWNlbWFuDQorDQorPC9wcm90b2NvbD4KKzxzdHJpcGZpbGU+CisjIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgYW5kIFNTSF9LTk9XTkhPU1RTIHZhcnkgd2l0aCBjb25maWd1cmF0aW9ucyAtIGp1c3QKKyMgaWdub3JlIHRoZW0KKyRfID0gJycgaWYgL0NVUkxPUFRfU1NMX1ZFUklGWVBFRVIvCiskXyA9ICcnIGlmIC9DVVJMT1BUX1NTSF9LTk9XTkhPU1RTLworPC9zdHJpcGZpbGU+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDE0MDEuYyIgbW9kZT0idGV4dCI+CisvKioqKioqKioqIFNhbXBsZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY3VybCBjb21tYW5kIGxpbmUgdG9vbCAqKioqKioqKioqCisgKiBBbGwgY3VybF9lYXN5X3NldG9wdCgpIG9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgYXQ6CisgKiBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIENVUkxjb2RlIHJldDsKKyAgQ1VSTCAqaG5kOworICBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3QxOworCisgIHNsaXN0MSA9IE5VTEw7CisgIHNsaXN0MSA9IGN1cmxfc2xpc3RfYXBwZW5kKHNsaXN0MSwgIlgtRmlsZXM6IE11bGRlciIpOworICBzbGlzdDEgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdDEsICJYLU1lbjogY3ljbG9wcywgaWNlbWFuIik7CisKKyAgaG5kID0gY3VybF9lYXN5X2luaXQoKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfVVJMLCAiaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvMTQwMSIpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfVVNFUlBXRCwgImZha2U6dXNlciIpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9VU0VSQUdFTlQsICJNeVVBIik7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX0hUVFBIRUFERVIsIHNsaXN0MSk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX01BWFJFRElSUywgNTBMKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfSFRUUEFVVEgsIChsb25nKUNVUkxBVVRIX0JBU0lDKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfQ09PS0lFLCAiY2hvY29sYXRlPWNoaXAiKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFLCAxTCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1BST1RPQ09MUywgKGxvbmcpQ1VSTFBST1RPX0ZJTEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKUNVUkxQUk9UT19GVFAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKUNVUkxQUk9UT19IVFRQKTsKKworICAvKiBIZXJlIGlzIGEgbGlzdCBvZiBvcHRpb25zIHRoZSBjdXJsIGNvZGUgdXNlZCB0aGF0IGNhbm5vdCBnZXQgZ2VuZXJhdGVkCisgICAgIGFzIHNvdXJjZSBlYXNpbHkuIFlvdSBtYXkgc2VsZWN0IHRvIGVpdGhlciBub3QgdXNlIHRoZW0gb3IgaW1wbGVtZW50CisgICAgIHRoZW0geW91cnNlbGYuCisKKyAgQ1VSTE9QVF9XUklURURBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1dSSVRFRlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfUkVBRERBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1JFQURGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKKyAgQ1VSTE9QVF9TRUVLREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisgIENVUkxPUFRfU0VFS0ZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgorICBDVVJMT1BUX0VSUk9SQlVGRkVSIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9TVERFUlIgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX0RFQlVHRlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfREVCVUdEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKworICAqLworCisgIHJldCA9IGN1cmxfZWFzeV9wZXJmb3JtKGhuZCk7CisKKyAgY3VybF9lYXN5X2NsZWFudXAoaG5kKTsKKyAgaG5kID0gTlVMTDsKKyAgY3VybF9zbGlzdF9mcmVlX2FsbChzbGlzdDEpOworICBzbGlzdDEgPSBOVUxMOworCisgIHJldHVybiAoaW50KXJldDsKK30KKy8qKioqIEVuZCBvZiBzYW1wbGUgY29kZSAqKioqLworPC9maWxlPgorPHN0ZG91dD4KKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQwMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0MDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2Nzc5MgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0MDIKQEAgLTAsMCArMSwxMTAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCistLWxpYmN1cmwKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDI5IEp1bCAyMDA4IDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCitDb25uZWN0aW9uOiBjbG9zZQorCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorLS1saWJjdXJsIGZvciBzaW1wbGUgUE9TVAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50LzE0MDIgLS1saWJjdXJsIGxvZy90ZXN0MTQwMi5jIC1kICJmb289YmFyIiAtZCAiYmF6PXF1dXgiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbCBub25ld2xpbmU9InllcyI+CitQT1NUIC93ZS93YW50LzE0MDIgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTguMiAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xOC4yIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuNA0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMTYNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK2Zvbz1iYXImYmF6PXF1dXgKKzwvcHJvdG9jb2w+Cis8c3RyaXBmaWxlPgorIyBjdXJsJ3MgZGVmYXVsdCB1c2VyLWFnZW50IHZhcmllcyB3aXRoIHZlcnNpb24sIGxpYnJhcmllcyBldGMuCitzLyhVU0VSQUdFTlQsIFwiKVteXCJdKy8kezF9c3RyaXBwZWQvCisjIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgYW5kIFNTSF9LTk9XTkhPU1RTIHZhcnkgd2l0aCBjb25maWd1cmF0aW9ucyAtIGp1c3QKKyMgaWdub3JlIHRoZW0KKyRfID0gJycgaWYgL0NVUkxPUFRfU1NMX1ZFUklGWVBFRVIvCiskXyA9ICcnIGlmIC9DVVJMT1BUX1NTSF9LTk9XTkhPU1RTLworPC9zdHJpcGZpbGU+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDE0MDIuYyIgbW9kZT0idGV4dCI+CisvKioqKioqKioqIFNhbXBsZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY3VybCBjb21tYW5kIGxpbmUgdG9vbCAqKioqKioqKioqCisgKiBBbGwgY3VybF9lYXN5X3NldG9wdCgpIG9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgYXQ6CisgKiBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIENVUkxjb2RlIHJldDsKKyAgQ1VSTCAqaG5kOworCisgIGhuZCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50LzE0MDIiKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfSEVBREVSLCAxTCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1BPU1RGSUVMRFMsICJmb289YmFyJmJhej1xdXV4Iik7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkVfTEFSR0UsIChjdXJsX29mZl90KTE2KTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfVVNFUkFHRU5ULCAic3RyaXBwZWQiKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfTUFYUkVESVJTLCA1MEwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1RDUF9LRUVQQUxJVkUsIDFMKTsKKworICAvKiBIZXJlIGlzIGEgbGlzdCBvZiBvcHRpb25zIHRoZSBjdXJsIGNvZGUgdXNlZCB0aGF0IGNhbm5vdCBnZXQgZ2VuZXJhdGVkCisgICAgIGFzIHNvdXJjZSBlYXNpbHkuIFlvdSBtYXkgc2VsZWN0IHRvIGVpdGhlciBub3QgdXNlIHRoZW0gb3IgaW1wbGVtZW50CisgICAgIHRoZW0geW91cnNlbGYuCisKKyAgQ1VSTE9QVF9XUklURURBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1dSSVRFRlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfUkVBRERBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1JFQURGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKKyAgQ1VSTE9QVF9TRUVLREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisgIENVUkxPUFRfU0VFS0ZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgorICBDVVJMT1BUX0VSUk9SQlVGRkVSIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9TVERFUlIgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX0RFQlVHRlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfREVCVUdEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKworICAqLworCisgIHJldCA9IGN1cmxfZWFzeV9wZXJmb3JtKGhuZCk7CisKKyAgY3VybF9lYXN5X2NsZWFudXAoaG5kKTsKKyAgaG5kID0gTlVMTDsKKworICByZXR1cm4gKGludClyZXQ7Cit9CisvKioqKiBFbmQgb2Ygc2FtcGxlIGNvZGUgKioqKi8KKzwvZmlsZT4KKzxzdGRvdXQ+Cis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0MDMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNGEwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNDAzCkBAIC0wLDAgKzEsMTA1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCistLWxpYmN1cmwKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDI5IEp1bCAyMDA4IDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCitDb25uZWN0aW9uOiBjbG9zZQorCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorLS1saWJjdXJsIGZvciBHRVQgd2l0aCBxdWVyeQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50LzE0MDMgLS1saWJjdXJsIGxvZy90ZXN0MTQwMy5jIC1HIC1kICJmb289YmFyIiAtZCAiYmF6PXF1dXgiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2Uvd2FudC8xNDAzP2Zvbz1iYXImYmF6PXF1dXggSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTguMiAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xOC4yIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuNA0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPHN0cmlwZmlsZT4KKyMgY3VybCdzIGRlZmF1bHQgdXNlci1hZ2VudCB2YXJpZXMgd2l0aCB2ZXJzaW9uLCBsaWJyYXJpZXMgZXRjLgorcy8oVVNFUkFHRU5ULCBcIilbXlwiXSsvJHsxfXN0cmlwcGVkLworIyBDVVJMT1BUX1NTTF9WRVJJRllQRUVSIGFuZCBTU0hfS05PV05IT1NUUyB2YXJ5IHdpdGggY29uZmlndXJhdGlvbnMgLSBqdXN0CisjIGlnbm9yZSB0aGVtCiskXyA9ICcnIGlmIC9DVVJMT1BUX1NTTF9WRVJJRllQRUVSLworJF8gPSAnJyBpZiAvQ1VSTE9QVF9TU0hfS05PV05IT1NUUy8KKzwvc3RyaXBmaWxlPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3QxNDAzLmMiIG1vZGU9InRleHQiPgorLyoqKioqKioqKiBTYW1wbGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIGN1cmwgY29tbWFuZCBsaW5lIHRvb2wgKioqKioqKioqKgorICogQWxsIGN1cmxfZWFzeV9zZXRvcHQoKSBvcHRpb25zIGFyZSBkb2N1bWVudGVkIGF0OgorICogaHR0cDovL2N1cmwuaGF4eC5zZS9saWJjdXJsL2MvY3VybF9lYXN5X3NldG9wdC5odG1sCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBDVVJMY29kZSByZXQ7CisgIENVUkwgKmhuZDsKKworICBobmQgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC8xNDAzP2Zvbz1iYXImYmF6PXF1dXgiKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfSEVBREVSLCAxTCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1VTRVJBR0VOVCwgInN0cmlwcGVkIik7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX01BWFJFRElSUywgNTBMKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFLCAxTCk7CisKKyAgLyogSGVyZSBpcyBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGUgY3VybCBjb2RlIHVzZWQgdGhhdCBjYW5ub3QgZ2V0IGdlbmVyYXRlZAorICAgICBhcyBzb3VyY2UgZWFzaWx5LiBZb3UgbWF5IHNlbGVjdCB0byBlaXRoZXIgbm90IHVzZSB0aGVtIG9yIGltcGxlbWVudAorICAgICB0aGVtIHlvdXJzZWxmLgorCisgIENVUkxPUFRfV1JJVEVEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9XUklURUZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgorICBDVVJMT1BUX1JFQUREQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9SRUFERlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfU0VFS0RBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1NFRUtGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKKyAgQ1VSTE9QVF9FUlJPUkJVRkZFUiBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisgIENVUkxPUFRfU1RERVJSIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgorICBDVVJMT1BUX0RFQlVHREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisKKyAgKi8KKworICByZXQgPSBjdXJsX2Vhc3lfcGVyZm9ybShobmQpOworCisgIGN1cmxfZWFzeV9jbGVhbnVwKGhuZCk7CisgIGhuZCA9IE5VTEw7CisKKyAgcmV0dXJuIChpbnQpcmV0OworfQorLyoqKiogRW5kIG9mIHNhbXBsZSBjb2RlICoqKiovCis8L2ZpbGU+Cis8c3Rkb3V0PgorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNDA0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQwNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODU2YTc0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQwNApAQCAtMCwwICsxLDE1OSBAQAorPHRlc3RjYXNlPgorIyBCYXNlZCBvbiB0ZXN0IDEzMTUKKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBGT1JNUE9TVAorSFRUUCBmaWxlIHVwbG9hZAorLS1saWJjdXJsCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAyOSBKdWwgMjAwOCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDAKK0Nvbm5lY3Rpb246IGNsb3NlCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFJGQzE4NjctdHlwZSBmb3JtcG9zdGluZyAtIC1GIHdpdGggdGhyZWUgZmlsZXMsIG9uZSB3aXRoIGV4cGxpY2l0IHR5cGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC8xNDA0IC1GIG5hbWU9dmFsdWUgLUYgJ2ZpbGU9QGxvZy90ZXN0MTQwNC50eHQsbG9nL3Rlc3QxNDA0LnR4dDt0eXBlPW1hZ2ljL2NvbnRlbnQsbG9nL3Rlc3QxNDA0LnR4dCcgLS1saWJjdXJsIGxvZy90ZXN0MTQwNC5jCis8L2NvbW1hbmQ+CisjIFdlIGNyZWF0ZSB0aGlzIGZpbGUgYmVmb3JlIHRoZSBjb21tYW5kIGlzIGludm9rZWQhCis8ZmlsZSBuYW1lPSJsb2cvdGVzdDE0MDQudHh0Ij4KK2R1bW15IGRhdGEKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KKyheVXNlci1BZ2VudDouKnwtLS0tLStcdyspCis8L3N0cmlwPgorPHByb3RvY29sPgorUE9TVCAvd2Uvd2FudC8xNDA0IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjE4LjIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTguMiBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjQNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDc5NQ0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIg0KKw0KK3ZhbHVlDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIg0KK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tYWFhYWFhYWFhYWFhDQorDQorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9InRlc3QxNDA0LnR4dCINCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCisNCitkdW1teSBkYXRhCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS05ZWY4ZDYyMDU3NjMNCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0idGVzdDE0MDQudHh0Ig0KK0NvbnRlbnQtVHlwZTogbWFnaWMvY29udGVudA0KKw0KK2R1bW15IGRhdGEKKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTllZjhkNjIwNTc2Mw0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJ0ZXN0MTQwNC50eHQiDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorDQorZHVtbXkgZGF0YQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tYWFhYWFhYWFhYWFhLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS05ZWY4ZDYyMDU3NjMtLQ0KKzwvcHJvdG9jb2w+Cis8c3RyaXBmaWxlPgorIyBjdXJsJ3MgZGVmYXVsdCB1c2VyLWFnZW50IHZhcmllcyB3aXRoIHZlcnNpb24sIGxpYnJhcmllcyBldGMuCitzLyhVU0VSQUdFTlQsIFwiKVteXCJdKy8kezF9c3RyaXBwZWQvCisjIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgYW5kIFNTSF9LTk9XTkhPU1RTIHZhcnkgd2l0aCBjb25maWd1cmF0aW9ucyAtIGp1c3QKKyMgaWdub3JlIHRoZW0KKyRfID0gJycgaWYgL0NVUkxPUFRfU1NMX1ZFUklGWVBFRVIvCiskXyA9ICcnIGlmIC9DVVJMT1BUX1NTSF9LTk9XTkhPU1RTLworPC9zdHJpcGZpbGU+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDE0MDQuYyIgbW9kZT0idGV4dCI+CisvKioqKioqKioqIFNhbXBsZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY3VybCBjb21tYW5kIGxpbmUgdG9vbCAqKioqKioqKioqCisgKiBBbGwgY3VybF9lYXN5X3NldG9wdCgpIG9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgYXQ6CisgKiBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIENVUkxjb2RlIHJldDsKKyAgQ1VSTCAqaG5kOworICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqcG9zdDE7CisgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpwb3N0ZW5kOworCisgIHBvc3QxID0gTlVMTDsKKyAgcG9zdGVuZCA9IE5VTEw7CisgIGN1cmxfZm9ybWFkZCgmcG9zdDEsICZwb3N0ZW5kLAorICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJuYW1lIiwKKyAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUywgInZhbHVlIiwKKyAgICAgICAgICAgICAgIENVUkxGT1JNX0VORCk7CisgIGN1cmxfZm9ybWFkZCgmcG9zdDEsICZwb3N0ZW5kLAorICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJmaWxlIiwKKyAgICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsICJsb2cvdGVzdDE0MDQudHh0IiwKKyAgICAgICAgICAgICAgIENVUkxGT1JNX0NPTlRFTlRUWVBFLCAidGV4dC9wbGFpbiIsCisgICAgICAgICAgICAgICBDVVJMRk9STV9GSUxFLCAibG9nL3Rlc3QxNDA0LnR4dCIsCisgICAgICAgICAgICAgICBDVVJMRk9STV9DT05URU5UVFlQRSwgIm1hZ2ljL2NvbnRlbnQiLAorICAgICAgICAgICAgICAgQ1VSTEZPUk1fRklMRSwgImxvZy90ZXN0MTQwNC50eHQiLAorICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09OVEVOVFRZUEUsICJ0ZXh0L3BsYWluIiwKKyAgICAgICAgICAgICAgIENVUkxGT1JNX0VORCk7CisKKyAgaG5kID0gY3VybF9lYXN5X2luaXQoKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfVVJMLCAiaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvMTQwNCIpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfSFRUUFBPU1QsIHBvc3QxKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfVVNFUkFHRU5ULCAic3RyaXBwZWQiKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfTUFYUkVESVJTLCA1MEwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1RDUF9LRUVQQUxJVkUsIDFMKTsKKworICAvKiBIZXJlIGlzIGEgbGlzdCBvZiBvcHRpb25zIHRoZSBjdXJsIGNvZGUgdXNlZCB0aGF0IGNhbm5vdCBnZXQgZ2VuZXJhdGVkCisgICAgIGFzIHNvdXJjZSBlYXNpbHkuIFlvdSBtYXkgc2VsZWN0IHRvIGVpdGhlciBub3QgdXNlIHRoZW0gb3IgaW1wbGVtZW50CisgICAgIHRoZW0geW91cnNlbGYuCisKKyAgQ1VSTE9QVF9XUklURURBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1dSSVRFRlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfUkVBRERBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1JFQURGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKKyAgQ1VSTE9QVF9TRUVLREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisgIENVUkxPUFRfU0VFS0ZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgorICBDVVJMT1BUX0VSUk9SQlVGRkVSIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9TVERFUlIgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX0RFQlVHRlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfREVCVUdEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKworICAqLworCisgIHJldCA9IGN1cmxfZWFzeV9wZXJmb3JtKGhuZCk7CisKKyAgY3VybF9lYXN5X2NsZWFudXAoaG5kKTsKKyAgaG5kID0gTlVMTDsKKyAgY3VybF9mb3JtZnJlZShwb3N0MSk7CisgIHBvc3QxID0gTlVMTDsKKworICByZXR1cm4gKGludClyZXQ7Cit9CisvKioqKiBFbmQgb2Ygc2FtcGxlIGNvZGUgKioqKi8KKzwvZmlsZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0MDUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNDA1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZGFhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNDA1CkBAIC0wLDAgKzEsMTM1IEBACis8dGVzdGNhc2U+CisjIERlcml2ZWQgZnJvbSB0ZXN0MjI3Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorcG9zdC1xdW90ZQorcHJlLXF1b3RlCitxdW90ZQorLS1saWJjdXJsCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitkYXRhCisgICAgdG8KKyAgICAgIHNlZQordGhhdCBGVFAKK3dvcmtzCisgIHNvIGRvZXMgaXQ/Cis8L2RhdGE+Cis8c2VydmVyY21kPgorUkVQTFkgRVBTViA1MDAgbm8gc3VjaCBjb21tYW5kCitSRVBMWSBGQUlMIDUwMCB0aGlzIG1pZ2h0IG5vdCBiZSBhIGZhaWx1cmUhCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCB3aXRoIHF1b3RlIG9wcworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTQwNSAtUSAiTk9PUCAxIiAtUSAiK05PT1AgMiIgLVEgIi1OT09QIDMiIC1RICIqRkFJTCIgLVEgIisqRkFJTCBIQVJEIiAtLWxpYmN1cmwgbG9nL3Rlc3QxNDA1LmMKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitOT09QIDENCitGQUlMDQorRVBTVg0KK1BBU1YNCitUWVBFIEkNCitOT09QIDINCitGQUlMIEhBUkQNCitTSVpFIDE0MDUNCitSRVRSIDE0MDUNCitOT09QIDMNCitRVUlUDQorPC9wcm90b2NvbD4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0MTQwNS5jIiBtb2RlPSJ0ZXh0Ij4KKy8qKioqKioqKiogU2FtcGxlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjdXJsIGNvbW1hbmQgbGluZSB0b29sICoqKioqKioqKioKKyAqIEFsbCBjdXJsX2Vhc3lfc2V0b3B0KCkgb3B0aW9ucyBhcmUgZG9jdW1lbnRlZCBhdDoKKyAqIGh0dHA6Ly9jdXJsLmhheHguc2UvbGliY3VybC9jL2N1cmxfZWFzeV9zZXRvcHQuaHRtbAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgQ1VSTGNvZGUgcmV0OworICBDVVJMICpobmQ7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpzbGlzdDE7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpzbGlzdDI7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpzbGlzdDM7CisKKyAgc2xpc3QxID0gTlVMTDsKKyAgc2xpc3QxID0gY3VybF9zbGlzdF9hcHBlbmQoc2xpc3QxLCAiTk9PUCAxIik7CisgIHNsaXN0MSA9IGN1cmxfc2xpc3RfYXBwZW5kKHNsaXN0MSwgIipGQUlMIik7CisgIHNsaXN0MiA9IE5VTEw7CisgIHNsaXN0MiA9IGN1cmxfc2xpc3RfYXBwZW5kKHNsaXN0MiwgIk5PT1AgMyIpOworICBzbGlzdDMgPSBOVUxMOworICBzbGlzdDMgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdDMsICJOT09QIDIiKTsKKyAgc2xpc3QzID0gY3VybF9zbGlzdF9hcHBlbmQoc2xpc3QzLCAiKkZBSUwgSEFSRCIpOworCisgIGhuZCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1VSTCwgImZ0cDovLyVIT1NUSVA6JUZUUFBPUlQvMTQwNSIpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfVVNFUkFHRU5ULCAic3RyaXBwZWQiKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfTUFYUkVESVJTLCA1MEwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9RVU9URSwgc2xpc3QxKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfUE9TVFFVT1RFLCBzbGlzdDIpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9QUkVRVU9URSwgc2xpc3QzKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFLCAxTCk7CisKKyAgLyogSGVyZSBpcyBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGUgY3VybCBjb2RlIHVzZWQgdGhhdCBjYW5ub3QgZ2V0IGdlbmVyYXRlZAorICAgICBhcyBzb3VyY2UgZWFzaWx5LiBZb3UgbWF5IHNlbGVjdCB0byBlaXRoZXIgbm90IHVzZSB0aGVtIG9yIGltcGxlbWVudAorICAgICB0aGVtIHlvdXJzZWxmLgorCisgIENVUkxPUFRfV1JJVEVEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9XUklURUZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgorICBDVVJMT1BUX1JFQUREQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9SRUFERlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfU0VFS0RBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1NFRUtGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKKyAgQ1VSTE9QVF9FUlJPUkJVRkZFUiBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisgIENVUkxPUFRfU1RERVJSIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgorICBDVVJMT1BUX0RFQlVHREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisKKyAgKi8KKworICByZXQgPSBjdXJsX2Vhc3lfcGVyZm9ybShobmQpOworCisgIGN1cmxfZWFzeV9jbGVhbnVwKGhuZCk7CisgIGhuZCA9IE5VTEw7CisgIGN1cmxfc2xpc3RfZnJlZV9hbGwoc2xpc3QxKTsKKyAgc2xpc3QxID0gTlVMTDsKKyAgY3VybF9zbGlzdF9mcmVlX2FsbChzbGlzdDIpOworICBzbGlzdDIgPSBOVUxMOworICBjdXJsX3NsaXN0X2ZyZWVfYWxsKHNsaXN0Myk7CisgIHNsaXN0MyA9IE5VTEw7CisKKyAgcmV0dXJuIChpbnQpcmV0OworfQorLyoqKiogRW5kIG9mIHNhbXBsZSBjb2RlICoqKiovCis8L2ZpbGU+Cis8c3RyaXBmaWxlPgorIyBjdXJsJ3MgZGVmYXVsdCB1c2VyLWFnZW50IHZhcmllcyB3aXRoIHZlcnNpb24sIGxpYnJhcmllcyBldGMuCitzLyhVU0VSQUdFTlQsIFwiKVteXCJdKy8kezF9c3RyaXBwZWQvCisjIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgYW5kIFNTSF9LTk9XTkhPU1RTIHZhcnkgd2l0aCBjb25maWd1cmF0aW9ucyAtIGp1c3QKKyMgaWdub3JlIHRoZW0KKyRfID0gJycgaWYgL0NVUkxPUFRfU1NMX1ZFUklGWVBFRVIvCiskXyA9ICcnIGlmIC9DVVJMT1BUX1NTSF9LTk9XTkhPU1RTLworPC9zdHJpcGZpbGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNDA2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTZkNjhlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQwNgpAQCAtMCwwICsxLDEyMSBAQAorPHRlc3RjYXNlPgorIyBCYXNlZCBvbiB0ZXN0ODAyCisjIE4uQi4gLS1saWJjdXJsIG91dHB1dCBub3Qgc3VmZmljaWVudCB0byBkZWFsIHdpdGggdXBsb2FkZWQgZmlsZXMuCis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NNVFAKKy0tbGliY3VybAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzbXRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NNVFAKKyA8L25hbWU+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDE0MDYuZW1sIj4KK0Zyb206IGRpZmZlcmVudAorVG86IGFub3RoZXIKKworYm9keQorPC9maWxlPgorIDxjb21tYW5kPgorc210cDovLyVIT1NUSVA6JVNNVFBQT1JUL3VzZXIgLS1tYWlsLXJjcHQgMTQwNkBmb28gLS1tYWlsLXJjcHQgMTQwNkBmb29iYXIuZXhhbXBsZSAtLW1haWwtZnJvbSAxNDA2QGZyb20gLVQgbG9nL3Rlc3QxNDA2LmVtbCAtLWxpYmN1cmwgbG9nL3Rlc3QxNDA2LmMKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK0VITE8gdXNlcg0KK01BSUwgRlJPTTo8MTQwNkBmcm9tPiBTSVpFPTM0DQorUkNQVCBUTzo8MTQwNkBmb28+DQorUkNQVCBUTzo8MTQwNkBmb29iYXIuZXhhbXBsZT4NCitEQVRBDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8dXBsb2FkPgorRnJvbTogZGlmZmVyZW50CitUbzogYW5vdGhlcgorCitib2R5CisNCisuDQorPC91cGxvYWQ+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDE0MDYuYyIgbW9kZT0idGV4dCI+CisvKioqKioqKioqIFNhbXBsZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY3VybCBjb21tYW5kIGxpbmUgdG9vbCAqKioqKioqKioqCisgKiBBbGwgY3VybF9lYXN5X3NldG9wdCgpIG9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgYXQ6CisgKiBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIENVUkxjb2RlIHJldDsKKyAgQ1VSTCAqaG5kOworICBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3QxOworCisgIHNsaXN0MSA9IE5VTEw7CisgIHNsaXN0MSA9IGN1cmxfc2xpc3RfYXBwZW5kKHNsaXN0MSwgIjE0MDZAZm9vIik7CisgIHNsaXN0MSA9IGN1cmxfc2xpc3RfYXBwZW5kKHNsaXN0MSwgIjE0MDZAZm9vYmFyLmV4YW1wbGUiKTsKKworICBobmQgPSBjdXJsX2Vhc3lfaW5pdCgpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9JTkZJTEVTSVpFX0xBUkdFLCAoY3VybF9vZmZfdCkzNCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1VSTCwgInNtdHA6Ly8lSE9TVElQOiVTTVRQUE9SVC91c2VyIik7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX0hFQURFUiwgMUwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9VUExPQUQsIDFMKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfVVNFUkFHRU5ULCAic3RyaXBwZWQiKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfTUFYUkVESVJTLCA1MEwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1RDUF9LRUVQQUxJVkUsIDFMKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfTUFJTF9GUk9NLCAiMTQwNkBmcm9tIik7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX01BSUxfUkNQVCwgc2xpc3QxKTsKKworICAvKiBIZXJlIGlzIGEgbGlzdCBvZiBvcHRpb25zIHRoZSBjdXJsIGNvZGUgdXNlZCB0aGF0IGNhbm5vdCBnZXQgZ2VuZXJhdGVkCisgICAgIGFzIHNvdXJjZSBlYXNpbHkuIFlvdSBtYXkgc2VsZWN0IHRvIGVpdGhlciBub3QgdXNlIHRoZW0gb3IgaW1wbGVtZW50CisgICAgIHRoZW0geW91cnNlbGYuCisKKyAgQ1VSTE9QVF9XUklURURBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1dSSVRFRlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfUkVBRERBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1JFQURGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKKyAgQ1VSTE9QVF9TRUVLREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisgIENVUkxPUFRfU0VFS0ZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgorICBDVVJMT1BUX0VSUk9SQlVGRkVSIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9TVERFUlIgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX0RFQlVHRlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfREVCVUdEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKworICAqLworCisgIHJldCA9IGN1cmxfZWFzeV9wZXJmb3JtKGhuZCk7CisKKyAgY3VybF9lYXN5X2NsZWFudXAoaG5kKTsKKyAgaG5kID0gTlVMTDsKKyAgY3VybF9zbGlzdF9mcmVlX2FsbChzbGlzdDEpOworICBzbGlzdDEgPSBOVUxMOworCisgIHJldHVybiAoaW50KXJldDsKK30KKy8qKioqIEVuZCBvZiBzYW1wbGUgY29kZSAqKioqLworPC9maWxlPgorPHN0cmlwZmlsZT4KKyMgY3VybCdzIGRlZmF1bHQgdXNlci1hZ2VudCB2YXJpZXMgd2l0aCB2ZXJzaW9uLCBsaWJyYXJpZXMgZXRjLgorcy8oVVNFUkFHRU5ULCBcIilbXlwiXSsvJHsxfXN0cmlwcGVkLworIyBDVVJMT1BUX1NTTF9WRVJJRllQRUVSIGFuZCBTU0hfS05PV05IT1NUUyB2YXJ5IHdpdGggY29uZmlndXJhdGlvbnMgLSBqdXN0CisjIGlnbm9yZSB0aGVtCiskXyA9ICcnIGlmIC9DVVJMT1BUX1NTTF9WRVJJRllQRUVSLworJF8gPSAnJyBpZiAvQ1VSTE9QVF9TU0hfS05PV05IT1NUUy8KKzwvc3RyaXBmaWxlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQwNyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0MDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyNWEzMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0MDcKQEAgLTAsMCArMSw5OSBAQAorPHRlc3RjYXNlPgorIyBCYXNlZCBvbiB0ZXN0ODA4Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1BPUDMKK0xJU1QKKy0tbGliY3VybAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNlcnZlcmNtZD4KK1JFUExZIExJU1QgK09LIDE0MDcgMTAwCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorcG9wMworPC9zZXJ2ZXI+CisgPG5hbWU+CitQT1AzIExJU1Qgb25lIG1lc3NhZ2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+Citwb3AzOi8vJUhPU1RJUDolUE9QM1BPUlQvMTQwNyAtbCAtdSB1c2VyOnNlY3JldCAtLWxpYmN1cmwgbG9nL3Rlc3QxNDA3LmMKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgdXNlcg0KK1BBU1Mgc2VjcmV0DQorTElTVCAxNDA3DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDE0MDcuYyIgbW9kZT0idGV4dCI+CisvKioqKioqKioqIFNhbXBsZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY3VybCBjb21tYW5kIGxpbmUgdG9vbCAqKioqKioqKioqCisgKiBBbGwgY3VybF9lYXN5X3NldG9wdCgpIG9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgYXQ6CisgKiBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9jdXJsX2Vhc3lfc2V0b3B0Lmh0bWwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIENVUkxjb2RlIHJldDsKKyAgQ1VSTCAqaG5kOworCisgIGhuZCA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1VSTCwgInBvcDM6Ly8lSE9TVElQOiVQT1AzUE9SVC8xNDA3Iik7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX0hFQURFUiwgMUwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9ESVJMSVNUT05MWSwgMUwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9VU0VSUFdELCAidXNlcjpzZWNyZXQiKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfVVNFUkFHRU5ULCAic3RyaXBwZWQiKTsKKyAgY3VybF9lYXN5X3NldG9wdChobmQsIENVUkxPUFRfTUFYUkVESVJTLCA1MEwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGhuZCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisgIGN1cmxfZWFzeV9zZXRvcHQoaG5kLCBDVVJMT1BUX1RDUF9LRUVQQUxJVkUsIDFMKTsKKworICAvKiBIZXJlIGlzIGEgbGlzdCBvZiBvcHRpb25zIHRoZSBjdXJsIGNvZGUgdXNlZCB0aGF0IGNhbm5vdCBnZXQgZ2VuZXJhdGVkCisgICAgIGFzIHNvdXJjZSBlYXNpbHkuIFlvdSBtYXkgc2VsZWN0IHRvIGVpdGhlciBub3QgdXNlIHRoZW0gb3IgaW1wbGVtZW50CisgICAgIHRoZW0geW91cnNlbGYuCisKKyAgQ1VSTE9QVF9XUklURURBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1dSSVRFRlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfUkVBRERBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX1JFQURGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKKyAgQ1VSTE9QVF9TRUVLREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisgIENVUkxPUFRfU0VFS0ZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgorICBDVVJMT1BUX0VSUk9SQlVGRkVSIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9TVERFUlIgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX0RFQlVHRlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCisgIENVUkxPUFRfREVCVUdEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKworICAqLworCisgIHJldCA9IGN1cmxfZWFzeV9wZXJmb3JtKGhuZCk7CisKKyAgY3VybF9lYXN5X2NsZWFudXAoaG5kKTsKKyAgaG5kID0gTlVMTDsKKworICByZXR1cm4gKGludClyZXQ7Cit9CisvKioqKiBFbmQgb2Ygc2FtcGxlIGNvZGUgKioqKi8KKzwvZmlsZT4KKzxzdHJpcGZpbGU+CisjIGN1cmwncyBkZWZhdWx0IHVzZXItYWdlbnQgdmFyaWVzIHdpdGggdmVyc2lvbiwgbGlicmFyaWVzIGV0Yy4KK3MvKFVTRVJBR0VOVCwgXCIpW15cIl0rLyR7MX1zdHJpcHBlZC8KKyMgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiBhbmQgU1NIX0tOT1dOSE9TVFMgdmFyeSB3aXRoIGNvbmZpZ3VyYXRpb25zIC0ganVzdAorIyBpZ25vcmUgdGhlbQorJF8gPSAnJyBpZiAvQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUi8KKyRfID0gJycgaWYgL0NVUkxPUFRfU1NIX0tOT1dOSE9TVFMvCis8L3N0cmlwZmlsZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTRkODdjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQxCkBAIC0wLDAgKzEsNTIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitOT0JPRFkKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KKzwvZGF0YT4KKzxzaXplPgorNDIKKzwvc2l6ZT4KKzxtZHRtPgorMjEzIDIwMDMwNDA5MTAyNjU5Cis8L21kdG0+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgZG93bmxvYWQgaW5mbyB3aXRoIC1JCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9ibGFsYmxhLzE0MSAtSQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBibGFsYmxhDQorTURUTSAxNDENCitUWVBFIEkNCitTSVpFIDE0MQ0KK1JFU1QgMA0KK1FVSVQNCis8L3Byb3RvY29sPgorPHN0ZG91dD4KK0xhc3QtTW9kaWZpZWQ6IFdlZCwgMDkgQXByIDIwMDMgMTA6MjY6NTkgR01UDQorQ29udGVudC1MZW5ndGg6IDQyDQorQWNjZXB0LXJhbmdlczogYnl0ZXMNCis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0MiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjZhYTE5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQyCkBAIC0wLDAgKzEsMTkwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorbWFueSBwYXJ0cyB0aGVyZSBhcmUKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBVUkwgd2l0aCAxNTAgZGlyIGxldmVscworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvcGFydDEvcGFydDIvcGFydDMvcGFydDQvcGFydDUvcGFydDYvcGFydDcvcGFydDgvcGFydDkvcGFydDEwL3BhcnQxMS9wYXJ0MTIvcGFydDEzL3BhcnQxNC9wYXJ0MTUvcGFydDE2L3BhcnQxNy9wYXJ0MTgvcGFydDE5L3BhcnQyMC9wYXJ0MjEvcGFydDIyL3BhcnQyMy9wYXJ0MjQvcGFydDI1L3BhcnQyNi9wYXJ0MjcvcGFydDI4L3BhcnQyOS9wYXJ0MzAvcGFydDMxL3BhcnQzMi9wYXJ0MzMvcGFydDM0L3BhcnQzNS9wYXJ0MzYvcGFydDM3L3BhcnQzOC9wYXJ0MzkvcGFydDQwL3BhcnQ0MS9wYXJ0NDIvcGFydDQzL3BhcnQ0NC9wYXJ0NDUvcGFydDQ2L3BhcnQ0Ny9wYXJ0NDgvcGFydDQ5L3BhcnQ1MC9wYXJ0NTEvcGFydDUyL3BhcnQ1My9wYXJ0NTQvcGFydDU1L3BhcnQ1Ni9wYXJ0NTcvcGFydDU4L3BhcnQ1OS9wYXJ0NjAvcGFydDYxL3BhcnQ2Mi9wYXJ0NjMvcGFydDY0L3BhcnQ2NS9wYXJ0NjYvcGFydDY3L3BhcnQ2OC9wYXJ0NjkvcGFydDcwL3BhcnQ3MS9wYXJ0NzIvcGFydDczL3BhcnQ3NC9wYXJ0NzUvcGFydDc2L3BhcnQ3Ny9wYXJ0NzgvcGFydDc5L3BhcnQ4MC9wYXJ0ODEvcGFydDgyL3BhcnQ4My9wYXJ0ODQvcGFydDg1L3BhcnQ4Ni9wYXJ0ODcvcGFydDg4L3BhcnQ4OS9wYXJ0OTAvcGFydDkxL3BhcnQ5Mi9wYXJ0OTMvcGFydDk0L3BhcnQ5NS9wYXJ0OTYvcGFydDk3L3BhcnQ5OC9wYXJ0OTkvcGFydDEwMC9wYXJ0MTAxL3BhcnQxMDIvcGFydDEwMy9wYXJ0MTA0L3BhcnQxMDUvcGFydDEwNi9wYXJ0MTA3L3BhcnQxMDgvcGFydDEwOS9wYXJ0MTEwL3BhcnQxMTEvcGFydDExMi9wYXJ0MTEzL3BhcnQxMTQvcGFydDExNS9wYXJ0MTE2L3BhcnQxMTcvcGFydDExOC9wYXJ0MTE5L3BhcnQxMjAvcGFydDEyMS9wYXJ0MTIyL3BhcnQxMjMvcGFydDEyNC9wYXJ0MTI1L3BhcnQxMjYvcGFydDEyNy9wYXJ0MTI4L3BhcnQxMjkvcGFydDEzMC9wYXJ0MTMxL3BhcnQxMzIvcGFydDEzMy9wYXJ0MTM0L3BhcnQxMzUvcGFydDEzNi9wYXJ0MTM3L3BhcnQxMzgvcGFydDEzOS9wYXJ0MTQwL3BhcnQxNDEvcGFydDE0Mi9wYXJ0MTQzL3BhcnQxNDQvcGFydDE0NS9wYXJ0MTQ2L3BhcnQxNDcvcGFydDE0OC9wYXJ0MTQ5L3BhcnQxNTAvMTQyCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIHBhcnQxDQorQ1dEIHBhcnQyDQorQ1dEIHBhcnQzDQorQ1dEIHBhcnQ0DQorQ1dEIHBhcnQ1DQorQ1dEIHBhcnQ2DQorQ1dEIHBhcnQ3DQorQ1dEIHBhcnQ4DQorQ1dEIHBhcnQ5DQorQ1dEIHBhcnQxMA0KK0NXRCBwYXJ0MTENCitDV0QgcGFydDEyDQorQ1dEIHBhcnQxMw0KK0NXRCBwYXJ0MTQNCitDV0QgcGFydDE1DQorQ1dEIHBhcnQxNg0KK0NXRCBwYXJ0MTcNCitDV0QgcGFydDE4DQorQ1dEIHBhcnQxOQ0KK0NXRCBwYXJ0MjANCitDV0QgcGFydDIxDQorQ1dEIHBhcnQyMg0KK0NXRCBwYXJ0MjMNCitDV0QgcGFydDI0DQorQ1dEIHBhcnQyNQ0KK0NXRCBwYXJ0MjYNCitDV0QgcGFydDI3DQorQ1dEIHBhcnQyOA0KK0NXRCBwYXJ0MjkNCitDV0QgcGFydDMwDQorQ1dEIHBhcnQzMQ0KK0NXRCBwYXJ0MzINCitDV0QgcGFydDMzDQorQ1dEIHBhcnQzNA0KK0NXRCBwYXJ0MzUNCitDV0QgcGFydDM2DQorQ1dEIHBhcnQzNw0KK0NXRCBwYXJ0MzgNCitDV0QgcGFydDM5DQorQ1dEIHBhcnQ0MA0KK0NXRCBwYXJ0NDENCitDV0QgcGFydDQyDQorQ1dEIHBhcnQ0Mw0KK0NXRCBwYXJ0NDQNCitDV0QgcGFydDQ1DQorQ1dEIHBhcnQ0Ng0KK0NXRCBwYXJ0NDcNCitDV0QgcGFydDQ4DQorQ1dEIHBhcnQ0OQ0KK0NXRCBwYXJ0NTANCitDV0QgcGFydDUxDQorQ1dEIHBhcnQ1Mg0KK0NXRCBwYXJ0NTMNCitDV0QgcGFydDU0DQorQ1dEIHBhcnQ1NQ0KK0NXRCBwYXJ0NTYNCitDV0QgcGFydDU3DQorQ1dEIHBhcnQ1OA0KK0NXRCBwYXJ0NTkNCitDV0QgcGFydDYwDQorQ1dEIHBhcnQ2MQ0KK0NXRCBwYXJ0NjINCitDV0QgcGFydDYzDQorQ1dEIHBhcnQ2NA0KK0NXRCBwYXJ0NjUNCitDV0QgcGFydDY2DQorQ1dEIHBhcnQ2Nw0KK0NXRCBwYXJ0NjgNCitDV0QgcGFydDY5DQorQ1dEIHBhcnQ3MA0KK0NXRCBwYXJ0NzENCitDV0QgcGFydDcyDQorQ1dEIHBhcnQ3Mw0KK0NXRCBwYXJ0NzQNCitDV0QgcGFydDc1DQorQ1dEIHBhcnQ3Ng0KK0NXRCBwYXJ0NzcNCitDV0QgcGFydDc4DQorQ1dEIHBhcnQ3OQ0KK0NXRCBwYXJ0ODANCitDV0QgcGFydDgxDQorQ1dEIHBhcnQ4Mg0KK0NXRCBwYXJ0ODMNCitDV0QgcGFydDg0DQorQ1dEIHBhcnQ4NQ0KK0NXRCBwYXJ0ODYNCitDV0QgcGFydDg3DQorQ1dEIHBhcnQ4OA0KK0NXRCBwYXJ0ODkNCitDV0QgcGFydDkwDQorQ1dEIHBhcnQ5MQ0KK0NXRCBwYXJ0OTINCitDV0QgcGFydDkzDQorQ1dEIHBhcnQ5NA0KK0NXRCBwYXJ0OTUNCitDV0QgcGFydDk2DQorQ1dEIHBhcnQ5Nw0KK0NXRCBwYXJ0OTgNCitDV0QgcGFydDk5DQorQ1dEIHBhcnQxMDANCitDV0QgcGFydDEwMQ0KK0NXRCBwYXJ0MTAyDQorQ1dEIHBhcnQxMDMNCitDV0QgcGFydDEwNA0KK0NXRCBwYXJ0MTA1DQorQ1dEIHBhcnQxMDYNCitDV0QgcGFydDEwNw0KK0NXRCBwYXJ0MTA4DQorQ1dEIHBhcnQxMDkNCitDV0QgcGFydDExMA0KK0NXRCBwYXJ0MTExDQorQ1dEIHBhcnQxMTINCitDV0QgcGFydDExMw0KK0NXRCBwYXJ0MTE0DQorQ1dEIHBhcnQxMTUNCitDV0QgcGFydDExNg0KK0NXRCBwYXJ0MTE3DQorQ1dEIHBhcnQxMTgNCitDV0QgcGFydDExOQ0KK0NXRCBwYXJ0MTIwDQorQ1dEIHBhcnQxMjENCitDV0QgcGFydDEyMg0KK0NXRCBwYXJ0MTIzDQorQ1dEIHBhcnQxMjQNCitDV0QgcGFydDEyNQ0KK0NXRCBwYXJ0MTI2DQorQ1dEIHBhcnQxMjcNCitDV0QgcGFydDEyOA0KK0NXRCBwYXJ0MTI5DQorQ1dEIHBhcnQxMzANCitDV0QgcGFydDEzMQ0KK0NXRCBwYXJ0MTMyDQorQ1dEIHBhcnQxMzMNCitDV0QgcGFydDEzNA0KK0NXRCBwYXJ0MTM1DQorQ1dEIHBhcnQxMzYNCitDV0QgcGFydDEzNw0KK0NXRCBwYXJ0MTM4DQorQ1dEIHBhcnQxMzkNCitDV0QgcGFydDE0MA0KK0NXRCBwYXJ0MTQxDQorQ1dEIHBhcnQxNDINCitDV0QgcGFydDE0Mw0KK0NXRCBwYXJ0MTQ0DQorQ1dEIHBhcnQxNDUNCitDV0QgcGFydDE0Ng0KK0NXRCBwYXJ0MTQ3DQorQ1dEIHBhcnQxNDgNCitDV0QgcGFydDE0OQ0KK0NXRCBwYXJ0MTUwDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMTQyDQorUkVUUiAxNDINCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0MyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGRmOGNiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQzCkBAIC0wLDAgKzEsNDQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitSRVRSCit0eXBlPQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorYmxhIGJsYSBibGEKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBVUkwgd2l0aCB0eXBlPWEKKyA8L25hbWU+CisgPGNvbW1hbmQ+CisiZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8lMmZ0bXAvbW9vLzE0Mzt0eXBlPWEiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIC90bXANCitDV0QgbW9vDQorRVBTVg0KK1RZUEUgQQ0KK1NJWkUgMTQzDQorUkVUUiAxNDMNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0NCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDE5YjA5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQ0CkBAIC0wLDAgKzEsNDkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQT1JUCitOTFNUCistLWRhdGEtYmluYXJ5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8c2VydmVyY21kPgorUkVQTFkgTkxTVCA0NTAgTm8gZmlsZXMgZm91bmQKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIE5MU1QgZGlyIGxpc3Qgd2l0aG91dCBjb250ZW50cywgdXNpbmcgUE9SVAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvIC1QIC0gLWwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKyMgU3RyaXAgYWxsIHZhbGlkIGtpbmRzIG9mIFBPUlQgYW5kIEVQUlQgdGhhdCBjdXJsIGNhbiBzZW5kCis8c3RyaXA+CiteUE9SVCBcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfQorXkVQUlQgXHwxXHxcZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XHxcZHsxLDV9XHwKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorUE9SVCAxMjcsMCwwLDEsMjQzLDIxMg0KK1RZUEUgQQ0KK05MU1QNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0NSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTgwY2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQ1CkBAIC0wLDAgKzEsNTEgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitOTFNUCitQT1JUCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNlcnZlcmNtZD4KK1JFUExZIE5MU1QgNTUwIEhhdmUgYSB0YXN0ZSBvbiB0aGlzIQorPC9zZXJ2ZXJjbWQ+Cis8ZGF0YT4KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBOTFNUIGRpciBsaXN0IHdpdGggd2VpcmQgcmVwbHkgY29kZSwgdXNpbmcgUE9SVAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvIC1QIC0gLWwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+CisxOQorPC9lcnJvcmNvZGU+CisjIFN0cmlwIGFsbCB2YWxpZCBraW5kcyBvZiBQT1JUIGFuZCBFUFJUIHRoYXQgY3VybCBjYW4gc2VuZAorPHN0cmlwPgorXlBPUlQgXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30KK15FUFJUIFx8MVx8XGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVx8XGR7MSw1fVx8Cis8L3N0cmlwPgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK1BPUlQgMTI3LDAsMCwxLDI0MywyMTINCitUWVBFIEENCitOTFNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNDYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkNGJkNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0NgpAQCAtMCwwICsxLDU1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUkVUUgorcGVyc2lzdGVudCBjb25uZWN0aW9uCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK3RoaXMgaXMgZmlsZSBjb250ZW50cworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorcGVyc2lzdGVudCBGVFAgd2l0aCBkaWZmZXJlbnQgcGF0aHMKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL2ZpcnN0L2Rpci9oZXJlLzE0NiBmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzE0NgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyBTdHJpcCBhbGwgdmFsaWQga2luZHMgb2YgUE9SVCBhbmQgRVBSVCB0aGF0IGN1cmwgY2FuIHNlbmQKKzxzdHJpcD4KK15QT1JUIFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9CiteRVBSVCBcfDFcfFxkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM31cfFxkezEsNX1cfAorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgZmlyc3QNCitDV0QgZGlyDQorQ1dEIGhlcmUNCitFUFNWDQorVFlQRSBJDQorU0laRSAxNDYNCitSRVRSIDE0Ng0KK0NXRCAvDQorRVBTVg0KK1NJWkUgMTQ2DQorUkVUUiAxNDYNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0NyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWE0Y2ExCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQ3CkBAIC0wLDAgKzEsNDkgQEAKKzx0ZXN0Y2FzZT4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZm9vCis8L2RhdGE+Cis8c2VydmVyY21kPgorUkVQTFkgQ1dEIDU1MCBJIHdvbid0IGFsbG93IHRoaXMgb24gbXkgc2VydmVyCitDT1VOVCBDV0QgMQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgd2l0aCAtLWZ0cC1jcmVhdGUtZGlycyAoZmFpbGluZyBDV0QpCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9maXJzdC9kaXIvaGVyZS8xNDcgLS1mdHAtY3JlYXRlLWRpcnMKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKyMgU3RyaXAgYWxsIHZhbGlkIGtpbmRzIG9mIFBPUlQgYW5kIEVQUlQgdGhhdCBjdXJsIGNhbiBzZW5kCis8c3RyaXA+CiteUE9SVCBcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfQorXkVQUlQgXHwxXHxcZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XHxcZHsxLDV9XHwKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIGZpcnN0DQorTUtEIGZpcnN0DQorQ1dEIGZpcnN0DQorQ1dEIGRpcg0KK0NXRCBoZXJlDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMTQ3DQorUkVUUiAxNDcNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0OCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE0OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTBmYTdhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQ4CkBAIC0wLDAgKzEsNDIgQEAKKzx0ZXN0Y2FzZT4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBDV0QgNTUwIEkgd29uJ3QgYWxsb3cgdGhpcyBvbiBteSBzZXJ2ZXIKK1JFUExZIE1LRCA1NTAgV2Ugd2lsbCBoYXZlIG5vIHN1Y2ggdGhpbmcKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIHdpdGggLS1mdHAtY3JlYXRlLWRpcnMgKGZhaWxpbmcgTUtEKQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvYXR0ZW1wdC90by9nZXQvdGhpcy8xNDggLS1mdHAtY3JlYXRlLWRpcnMKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKyMgU3RyaXAgYWxsIHZhbGlkIGtpbmRzIG9mIFBPUlQgYW5kIEVQUlQgdGhhdCBjdXJsIGNhbiBzZW5kCis8c3RyaXA+CiteUE9SVCBcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfQorXkVQUlQgXHwxXHxcZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XHxcZHsxLDV9XHwKKzwvc3RyaXA+Cis8ZXJyb3Jjb2RlPgorOQorPC9lcnJvcmNvZGU+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIGF0dGVtcHQNCitNS0QgYXR0ZW1wdA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQ5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTQ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OTczZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNDkKQEAgLTAsMCArMSw0NyBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIHdpdGggbXVsdGlwbGUgdXBsb2FkcworIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1UIGxvZy91cGxvYWQxNDkgZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9kaXIxLzE0OSAtVCBsb2cvdXBsb2FkMTQ5IGZ0cDovLyVIT1NUSVA6JUZUUFBPUlQvZGlyMi8xNDkKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy91cGxvYWQxNDkiPgorc2VuZCBhd2F5IHRoaXMgY29udGVudHMKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKyMgU3RyaXAgYWxsIHZhbGlkIGtpbmRzIG9mIFBPUlQgYW5kIEVQUlQgdGhhdCBjdXJsIGNhbiBzZW5kCis8c3RyaXA+CiteUE9SVCBcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfQorXkVQUlQgXHwxXHxcZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XHxcZHsxLDV9XHwKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIGRpcjENCitFUFNWDQorVFlQRSBJDQorU1RPUiAxNDkNCitDV0QgLw0KK0NXRCBkaXIyDQorRVBTVg0KK1NUT1IgMTQ5DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8ZmlsZSBuYW1lPSJsb2cvdXBsb2FkMTQ5Ij4KK3NlbmQgYXdheSB0aGlzIGNvbnRlbnRzCis8L2ZpbGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMWZhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNQpAQCAtMCwwICsxLDU3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCistLXdyaXRlLW91dAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuNCAyMDAgT0sNCitGYWtlOiB5ZXMNCitGYWtlOiB5ZXMNCitGYWtlOiB5ZXMNCitDb250ZW50LUxlbmd0aDogMjYNCisNCitSZXBlYXRlZCBub25zZW5zZS1oZWFkZXJzCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorLS13cml0ZS1vdXQgdGVzdAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzE1IC0td3JpdGUtb3V0ICIle3VybF9lZmZlY3RpdmV9ICV7aHR0cF9jb2RlfSAle3NpemVfZG93bmxvYWR9XG4iCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3Rkb3V0PgorSFRUUC8xLjQgMjAwIE9LDQorRmFrZTogeWVzDQorRmFrZTogeWVzDQorRmFrZTogeWVzDQorQ29udGVudC1MZW5ndGg6IDI2DQorDQorUmVwZWF0ZWQgbm9uc2Vuc2UtaGVhZGVycworaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvMTUgMjAwIDI2Cis8L3N0ZG91dD4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzE1IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNTAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkNGNmNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE1MApAQCAtMCwwICsxLDk0IEBACis8dGVzdGNhc2U+CisKKzwhLS0gU2VydmVyLXNpZGUgLS0+Cis8cmVwbHk+CisKKzwhLS0gbm8gPGRhdGE+IGluIHRoaXMgdGVzdCBzaW5jZSB3ZSBoYXZlIE5UTE0gZnJvbSB0aGUgc3RhcnQKKworVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyBhIGZpcnN0CitBdXRob3JpemF0aW9uOiBOVExNIGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudCAtLT4KKworPGRhdGExMDAxPgorSFRUUC8xLjEgNDAxIE5vdyBnaW1tZSB0aGF0IHNlY29uZCByZXF1ZXN0IG9mIGNyYXANCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KK1dXVy1BdXRoZW50aWNhdGU6IE5UTE0gVGxSTVRWTlRVQUFDQUFBQUFnQUNBREFBQUFBR2dvRUFjNTFBWVZEZ3lOY0FBQUFBQUFBQUFHNEFiZ0F5QUFBQVEwTUNBQVFBUXdCREFBRUFFZ0JGQUV3QVNRQlRBRUVBUWdCRkFGUUFTQUFFQUJnQVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQXdBc0FHVUFiQUJwQUhNQVlRQmlBR1VBZEFCb0FDNEFZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUFBQUFBQT09DQorDQorVGhpcyBpcyBub3QgdGhlIHJlYWwgcGFnZSBlaXRoZXIhCis8L2RhdGExMDAxPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgdGhlIHNlY29uZAorIyBBdXRob3JpemF0aW9uOiBOVExNIGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAyPgorSFRUUC8xLjEgMjAwIFRoaW5ncyBhcmUgZmluZSBpbiBzZXJ2ZXIgbGFuZCBzd3NjbG9zZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMyDQorDQorRmluYWxseSwgdGhpcyBpcyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhMTAwMj4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwMSBOb3cgZ2ltbWUgdGhhdCBzZWNvbmQgcmVxdWVzdCBvZiBjcmFwDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMzQNCitXV1ctQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gc2VydmVyIGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzMg0KKw0KK0ZpbmFsbHksIHRoaXMgaXMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorTlRMTQorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCBOVExNIGF1dGhvcml6YXRpb24gYW5kIC0tZmFpbAorIDwvbmFtZT4KKyA8c2V0ZW52PgorIyB3ZSBmb3JjZSBvdXIgb3duIGhvc3QgbmFtZSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgdGVzdCBtYWNoaW5lIGluZGVwZW5kZW50CitDVVJMX0dFVEhPU1ROQU1FPWN1cmxob3N0CisjIHdlIHRyeSB0byB1c2UgdGhlIExEX1BSRUxPQUQgaGFjaywgaWYgbm90IGEgZGVidWcgYnVpbGQKK0xEX1BSRUxPQUQ9JVBXRC9saWJ0ZXN0Ly5saWJzL2xpYmhvc3RuYW1lLnNvCisgPC9zZXRlbnY+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTUwIC11IHRlc3R1c2VyOnRlc3RwYXNzIC0tbnRsbSAtLWZhaWwKKzwvY29tbWFuZD4KKzxwcmVjaGVjaz4KK2Noa2hvc3RuYW1lIGN1cmxob3N0Cis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzE1MCBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC8xNTAgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQVlBQmdBV0FBQUFBQUFBQUJ3QUFBQUNBQUlBSEFBQUFBSUFBZ0FlQUFBQUFBQUFBQUFBQUFBQm9LQkFGcGtRd0tSQ1pGTWhqajB0dzQ3d0VqS0hSSGx2emZ4UWFtRmNoZU11djh2K3hlcXBoRU81VjQxeFJkN1I5ZGVPWFJsYzNSMWMyVnlZM1Z5YkdodmMzUT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE1MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE1MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmIxOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTUxCkBAIC0wLDAgKzEsNDEgQEAKKzx0ZXN0Y2FzZT4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjAgNDAxIEJBRCBCT1kKK1NlcnZlcjogc3dzY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKK1RoaXMgY29udGFpbnMgYSByZXNwb25zZSBjb2RlID49IDQwMCwgc28gY3VybCBzaG91bGRuJ3QgZGlzcGxheSB0aGlzLiAgRXZlbgordGhvdWdoIGl0J3MgYSByZXNwb25zZSBjb2RlIHRoYXQgdHJpZ2dlcnMgYXV0aGVudGljYXRpb24sIHdlJ3JlIG5vdCB1c2luZworYXV0aGVudGljYXRpb24gc28gd2Ugc2hvdWxkIHN0aWxsIGZhaWwuCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBHRVQgd2l0aCBhbiBlcnJvciBjb2RlIHRoYXQgbWlnaHQgdHJpY2sgYXV0aGVudGljYXRpb24KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTUxCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTUxIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjguMS1wcmUzIChzcGFyYy1zdW4tc29sYXJpczIuNykgbGliY3VybCA3LjguMS1wcmUzIChPcGVuU1NMIDAuOS42YSkgKGtyYjQgZW5hYmxlZCkNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE1MiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE1MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Y0MTU5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTUyCkBAIC0wLDAgKzEsNDQgQEAKKzx0ZXN0Y2FzZT4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMCA0MDEgQkFEIEJPWQorU2VydmVyOiBzd3NjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworVGhpcyBjb250YWlucyBhIHJlc3BvbnNlIGNvZGUgPj0gNDAwLCBzbyBjdXJsIHNob3VsZG4ndCBkaXNwbGF5IHRoaXMuICBFdmVuCit0aG91Z2ggaXQncyBhIHJlc3BvbnNlIGNvZGUgdGhhdCB0cmlnZ2VycyBhdXRoZW50aWNhdGlvbiwgd2UncmUgbm90IHVzaW5nCithdXRoZW50aWNhdGlvbiBzbyB3ZSBzaG91bGQgc3RpbGwgZmFpbC4KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB3aXRoIGFuIGVycm9yIGNvZGUgdGhhdCBtaWdodCB0cmljayBhdXRoZW50aWNhdGlvbiBhbmQgLS1mYWlsCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzE1MiAtLWZhaWwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLy4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xNTIgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuOC4xLXByZTMgKHNwYXJjLXN1bi1zb2xhcmlzMi43KSBsaWJjdXJsIDcuOC4xLXByZTMgKE9wZW5TU0wgMC45LjZhKSAoa3JiNCBlbmFibGVkKQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPGVycm9yY29kZT4KKzIyCis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE1MyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE1MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTFkYjMxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTUzCkBAIC0wLDAgKzEsMTMzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIERpZ2VzdCBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisjIHJlcGx5IGJhY2sgYW5kIGFzayBmb3IgRGlnZXN0IGF1dGgKKzxkYXRhMT4KK0hUVFAvMS4xIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0idGVzdHJlYWxtIiwgbm9uY2U9IjEwNTM2MDQxNDUiDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyNg0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UKKzwvZGF0YTE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyBhCisjIEF1dGhvcml6YXRpb246IERpZ2VzdCBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMT4KK0hUVFAvMS4xIDIwMCBPSw0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDIzDQorDQorVGhpcyBJUyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhMTAwMT4KKworIworIyBUaGlzIGlzIHRoZSBzZWNvbmQgcmVxdWVzdCwgYW5kIHRoaXMgc2VuZHMgYmFjayBhIHJlc3BvbnNlIHNheWluZyB0aGF0CisjIHRoZSByZXF1ZXN0IGNvbnRhaW5lZCBzdGFsZSBkYXRhLiBXZSB3YW50IGFuIHVwZGF0ZS4gU2V0IHN3c2JvdW5jZSB0bworIyBib3VuY2Ugb24gdG8gZGF0YTEwMDMgb24gdGhlIHNlY29uZCByZXF1ZXN0LgorPGRhdGExMDAyPgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gcmUtbmVnb3RpYXRpb24gcGxlYXNlIHN3c2JvdW5jZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InRlc3RyZWFsbSIsIGFsZ29yaXRobT1NRDUsIG5vbmNlPSI5OTk5OTkiLCBzdGFsZT10cnVlLCBxb3A9ImF1dGgiDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyNQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UKKzwvZGF0YTEwMDI+CisKKyMgVGhlIHNlY29uZCByZXF1ZXN0IHRvIHRoZSAxMDAyIHNlY3Rpb24gd2lsbCBib3VuY2UgdGhpcyBvbmUgYmFjayBpbnN0ZWFkCisjIHRoYW5rcyB0byB0aGUgc3dzYm91bmNlIGtleXdvcmQgdXAgdGhlcmUKKzxkYXRhMTAwMz4KK0hUVFAvMS4xIDIwMCBPSw0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMwDQorDQorVGhpcyBJUyB0aGUgc2Vjb25kIHJlYWwgcGFnZSEKKzwvZGF0YTEwMDM+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorY3J5cHRvCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCB3aXRoIERpZ2VzdCBhdXRob3JpemF0aW9uIHdpdGggc3RhbGU9dHJ1ZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xNTMwMDAxIC11IHRlc3R1c2VyOnRlc3RwYXNzIC0tZGlnZXN0IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xNTMwMDAyCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteQXV0aG9yaXphdGlvbi4qY25vbmNlCiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTUzMDAwMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzE1MzAwMDEgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9InRlc3R1c2VyIiwgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ1IiwgdXJpPSIvMTUzMDAwMSIsIHJlc3BvbnNlPSJmNGY4MzEzOTM5Njk5NWJhYzY2NWYyNGExZjEwNTVjNyINCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC41IE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzE1MzAwMDIgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9InRlc3R1c2VyIiwgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ1IiwgdXJpPSIvMTUzMDAwMiIsIHJlc3BvbnNlPSJmODQ1MTFiMDE0ZmRkMGJhNjQ5NGY0Mjg3MTA3OWMzMiINCitVc2VyLUFnZW50OiBjdXJsLzcuMTEuMC1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTEuMC1DVlMgT3BlblNTTC8wLjkuNmIgaXB2NiB6bGliLzEuMS40IEdTUw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzE1MzAwMDIgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9InRlc3R1c2VyIiwgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSI5OTk5OTkiLCB1cmk9Ii8xNTMwMDAyIiwgY25vbmNlPSJNVEE0TXpJeSIsIG5jPSIwMDAwMDAwMSIsIHFvcD0iYXV0aCIsIHJlc3BvbnNlPSIyNTI5MWMzNTc2NzE2MDRhMTZjMDI0MmY1NjcyMWMwNyIsIGFsZ29yaXRobT0iTUQ1Ig0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMS4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMS4wLUNWUyBPcGVuU1NMLzAuOS42YiBpcHY2IHpsaWIvMS4xLjQgR1NTDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8c3Rkb3V0PgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NSINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDI2DQorDQorSFRUUC8xLjEgMjAwIE9LDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjMNCisNCitUaGlzIElTIHRoZSByZWFsIHBhZ2UhCitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiByZS1uZWdvdGlhdGlvbiBwbGVhc2Ugc3dzYm91bmNlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0idGVzdHJlYWxtIiwgYWxnb3JpdGhtPU1ENSwgbm9uY2U9Ijk5OTk5OSIsIHN0YWxlPXRydWUsIHFvcD0iYXV0aCINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDI1DQorDQorSFRUUC8xLjEgMjAwIE9LDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMzANCisNCitUaGlzIElTIHRoZSBzZWNvbmQgcmVhbCBwYWdlIQorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNTQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODllMmJkNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE1NApAQCAtMCwwICsxLDEwOCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBVVAorSFRUUCBEaWdlc3QgYXV0aAorLS1hbnlhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2VydmVyY21kPgorYXV0aF9yZXF1aXJlZAorPC9zZXJ2ZXJjbWQ+Cis8ZGF0YT4KK0hUVFAvMS4xIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1dXVy1BdXRoZW50aWNhdGU6IEJsYWNrbWFnaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIiwgbm9uY2U9IjExMjIzMzQ0Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UKKzwvZGF0YT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIGEKKyMgQXV0aG9yaXphdGlvbjogRGlnZXN0IGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAwPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjMNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK1RoaXMgSVMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YTEwMDA+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBCbGFja21hZ2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyIsIG5vbmNlPSIxMTIyMzM0NCINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyMw0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorVGhpcyBJUyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitjcnlwdG8KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIFBVVCB3aXRoIC0tYW55YXV0aCBhdXRob3JpemF0aW9uIChwaWNraW5nIERpZ2VzdCkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTU0IC1UIGxvZy9wdXQxNTQgLXUgdGVzdHVzZXI6dGVzdHBhc3MgLS1hbnlhdXRoCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvcHV0MTU0Ij4KK1RoaXMgaXMgZGF0YSB3ZSB1cGxvYWQgd2l0aCBQVVQKK2Egc2Vjb25kIGxpbmUKK2xpbmUgdGhyZWUKK2ZvdXIgaXMgdGhlIG51bWJlciBvZiBsaW5lcworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQVVQgLzE1NCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogODUNCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KKw0KK1BVVCAvMTU0IEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJ0ZXN0dXNlciIsIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiLCBub25jZT0iMTEyMjMzNDQiLCB1cmk9Ii8xNTQiLCByZXNwb25zZT0iYjcxNTUxZTEyZDFjNDU2ZTQ3ZDgzODhlY2IyZWRlY2EiDQorVXNlci1BZ2VudDogY3VybC83LjEwLjUgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDg1DQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitUaGlzIGlzIGRhdGEgd2UgdXBsb2FkIHdpdGggUFVUCithIHNlY29uZCBsaW5lCitsaW5lIHRocmVlCitmb3VyIGlzIHRoZSBudW1iZXIgb2YgbGluZXMKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNTUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxYWEzNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE1NQpAQCAtMCwwICsxLDEzMSBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNlcnZlcmNtZD4KK2F1dGhfcmVxdWlyZWQKKzwvc2VydmVyY21kPgorPGRhdGE+CitIVFRQLzEuMSA0MDEgTlRMTSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1dXVy1BdXRoZW50aWNhdGU6IEJsYWNrbWFnaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK1dXVy1BdXRoZW50aWNhdGU6IE5UTE0NCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCittb28KKzwvZGF0YT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIGEgZmlyc3QKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMT4KK0hUVFAvMS4xIDQwMSBUeXBlLTEgcmVjZWl2ZWQsIHNlbmQgYmFjayB0eXBlLTINCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1MZW5ndGg6IDM0DQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK1dXVy1BdXRoZW50aWNhdGU6IE5UTE0gVGxSTVRWTlRVQUFDQUFBQUFnQUNBREFBQUFBR2dvRUFjNTFBWVZEZ3lOY0FBQUFBQUFBQUFHNEFiZ0F5QUFBQVEwTUNBQVFBUXdCREFBRUFFZ0JGQUV3QVNRQlRBRUVBUWdCRkFGUUFTQUFFQUJnQVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQXdBc0FHVUFiQUJwQUhNQVlRQmlBR1VBZEFCb0FDNEFZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUFBQUFBQT09DQorDQorVGhpcyBpcyBub3QgdGhlIHJlYWwgcGFnZSBlaXRoZXIhCis8L2RhdGExMDAxPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgdGhlIHNlY29uZAorIyBBdXRob3JpemF0aW9uOiBOVExNIGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAyPgorSFRUUC8xLjEgMjAwIFR5cGUtMyBSZWNldmllZCBhbmQgYWxsIFRoaW5ncyBhcmUgZmluZSBzd3NjbG9zZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMyDQorDQorRmluYWxseSwgdGhpcyBpcyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhMTAwMj4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwMSBOVExNIEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogQmxhY2ttYWdpYyByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK0hUVFAvMS4xIDQwMSBUeXBlLTEgcmVjZWl2ZWQsIHNlbmQgYmFjayB0eXBlLTINCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1MZW5ndGg6IDM0DQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK1dXVy1BdXRoZW50aWNhdGU6IE5UTE0gVGxSTVRWTlRVQUFDQUFBQUFnQUNBREFBQUFBR2dvRUFjNTFBWVZEZ3lOY0FBQUFBQUFBQUFHNEFiZ0F5QUFBQVEwTUNBQVFBUXdCREFBRUFFZ0JGQUV3QVNRQlRBRUVBUWdCRkFGUUFTQUFFQUJnQVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQXdBc0FHVUFiQUJwQUhNQVlRQmlBR1VBZEFCb0FDNEFZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUFBQUFBQT09DQorDQorSFRUUC8xLjEgMjAwIFR5cGUtMyBSZWNldmllZCBhbmQgYWxsIFRoaW5ncyBhcmUgZmluZSBzd3NjbG9zZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMyDQorDQorRmluYWxseSwgdGhpcyBpcyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitOVExNCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQVVQgd2l0aCAtLWFueWF1dGggYXV0aG9yaXphdGlvbiAocGlja2luZyBOVExNKQorIDwvbmFtZT4KKyA8c2V0ZW52PgorIyB3ZSBmb3JjZSBvdXIgb3duIGhvc3QgbmFtZSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgdGVzdCBtYWNoaW5lIGluZGVwZW5kZW50CitDVVJMX0dFVEhPU1ROQU1FPWN1cmxob3N0CisjIHdlIHRyeSB0byB1c2UgdGhlIExEX1BSRUxPQUQgaGFjaywgaWYgbm90IGEgZGVidWcgYnVpbGQKK0xEX1BSRUxPQUQ9JVBXRC9saWJ0ZXN0Ly5saWJzL2xpYmhvc3RuYW1lLnNvCisgPC9zZXRlbnY+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTU1IC1UIGxvZy9wdXQxNTUgLXUgdGVzdHVzZXI6dGVzdHBhc3MgLS1hbnlhdXRoCis8L2NvbW1hbmQ+Cis8cHJlY2hlY2s+CitjaGtob3N0bmFtZSBjdXJsaG9zdAorPC9wcmVjaGVjaz4KKzxmaWxlIG5hbWU9ImxvZy9wdXQxNTUiPgorVGhpcyBpcyBkYXRhIHdlIHVwbG9hZCB3aXRoIFBVVAorYSBzZWNvbmQgbGluZQorbGluZSB0aHJlZQorZm91ciBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BVVCAvMTU1IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiA4NQ0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorDQorUFVUIC8xNTUgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitQVVQgLzE1NSBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRUFBQUFBWUFCZ0FXQUFBQUFBQUFBQndBQUFBQ0FBSUFIQUFBQUFJQUFnQWVBQUFBQUFBQUFBQUFBQUFCb0tCQUZwa1F3S1JDWkZNaGpqMHR3NDd3RWpLSFJIbHZ6ZnhRYW1GY2hlTXV2OHYreGVxcGhFTzVWNDF4UmQ3UjlkZU9YUmxjM1IxYzJWeVkzVnliR2h2YzNRPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC41IChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjUgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiA4NQ0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorDQorVGhpcyBpcyBkYXRhIHdlIHVwbG9hZCB3aXRoIFBVVAorYSBzZWNvbmQgbGluZQorbGluZSB0aHJlZQorZm91ciBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTU2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZjVlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNTYKQEAgLTAsMCArMSw1MiBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgTm8gQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitQVVQgcmVjZWl2ZWQgZmluZS4gVGhhbmsgeW91IHZlcnkgbXVjaAorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgUFVUIHdpdGggLS1hbnlhdXRoICh3aGVuIHRoZSBzZXJ2ZXIgcmVxdWlyZXMgbm9uZSkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTU2IC1UIGxvZy9wdXQxNTYgLXUgdGVzdHVzZXI6dGVzdHBhc3MgLS1hbnlhdXRoCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvcHV0MTU2Ij4KK1RoaXMgaXMgZGF0YSB3ZSB1cGxvYWQgd2l0aCBQVVQKK2Egc2Vjb25kIGxpbmUKK2xpbmUgdGhyZWUKK2ZvdXIgaXMgdGhlIG51bWJlciBvZiBsaW5lcworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQVVQgLzE1NiBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC41IChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjUgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiA4NQ0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorDQorVGhpcyBpcyBkYXRhIHdlIHVwbG9hZCB3aXRoIFBVVAorYSBzZWNvbmQgbGluZQorbGluZSB0aHJlZQorZm91ciBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTU3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MmQ5M2IKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNTcKQEAgLTAsMCArMSwzOSBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgTm8gQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitHRVQgcmVjZWl2ZWQgYW5kIHNlcnZlZCBqdXN0IGZpbmUuIFRoYW5rIHlvdSB2ZXJ5IG11Y2gKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB3aXRoIC0tYW55YXV0aCAod2hlbiB0aGUgc2VydmVyIHJlcXVpcmVzIG5vbmUpCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzE1NyAtdSB0ZXN0dXNlcjp0ZXN0cGFzcyAtLWFueWF1dGgKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xNTcgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE1OCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE1OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTcyMzhkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTU4CkBAIC0wLDAgKzEsNTAgQEAKKzx0ZXN0Y2FzZT4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMTAwIENvbnRpbnVlIHN3c2Nsb3NlDQorU2lsbHktaGVhZGVyOiB5ZWVlZWVzDQorDQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgbXVsdGlwYXJ0IGZvcm1wb3N0IHdpdGggb25seSBhIDEwMCByZXBseQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xNTggLUYgbmFtZT1kYW5pZWwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCiteQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhLioKK14tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BPU1QgLzE1OCBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMS4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMS4yLUNWUyBPcGVuU1NMLzAuOS42YiBpcHY2IHpsaWIvMS4xLjQgR1NTDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAxNDUNCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTRmMTJmY2RhYTNiYw0KKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTRmMTJmY2RhYTNiYw0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ibmFtZSINCisNCitkYW5pZWwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS00ZjEyZmNkYWEzYmMtLQ0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorNTIKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTU5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTU5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOWM4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNTkKQEAgLTAsMCArMSw5MyBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorCis8IS0tIG5vIDxkYXRhPiBpbiB0aGlzIHRlc3Qgc2luY2Ugd2UgaGF2ZSBOVExNIGZyb20gdGhlIHN0YXJ0CisKK1RoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgYSBmaXJzdAorQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQgLS0+CisKKzxkYXRhMTAwMT4KK0hUVFAvMS4xIDQwMSBOb3cgZ2ltbWUgdGhhdCBzZWNvbmQgcmVxdWVzdCBvZiBjcmFwDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMzQNCitXV1ctQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UgZWl0aGVyIQorPC9kYXRhMTAwMT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIHRoZSBzZWNvbmQKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMj4KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gc2VydmVyIGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzMg0KKw0KK0ZpbmFsbHksIHRoaXMgaXMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YTEwMDI+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgTm93IGdpbW1lIHRoYXQgc2Vjb25kIHJlcXVlc3Qgb2YgY3JhcA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDM0DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHNlcnZlciBsYW5kIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMzINCisNCitGaW5hbGx5LCB0aGlzIGlzIHRoZSByZWFsIHBhZ2UhCis8L2RhdGFjaGVjaz4KKworPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK05UTE0KKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggTlRMTSBhdXRob3JpemF0aW9uIHdoZW4gdGFsa2luZyBIVFRQLzEuMAorIDwvbmFtZT4KKyA8c2V0ZW52PgorIyB3ZSBmb3JjZSBvdXIgb3duIGhvc3QgbmFtZSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgdGVzdCBtYWNoaW5lIGluZGVwZW5kZW50CitDVVJMX0dFVEhPU1ROQU1FPWN1cmxob3N0CisjIHdlIHRyeSB0byB1c2UgdGhlIExEX1BSRUxPQUQgaGFjaywgaWYgbm90IGEgZGVidWcgYnVpbGQKK0xEX1BSRUxPQUQ9JVBXRC9saWJ0ZXN0Ly5saWJzL2xpYmhvc3RuYW1lLnNvCisgPC9zZXRlbnY+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTU5IC11IHRlc3R1c2VyOnRlc3RwYXNzIC0tbnRsbSAtMAorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTU5IEhUVFAvMS4wDQorQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC42LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNi1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzE1OSBIVFRQLzEuMA0KK0F1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRUFBQUFBWUFCZ0FXQUFBQUFBQUFBQndBQUFBQ0FBSUFIQUFBQUFJQUFnQWVBQUFBQUFBQUFBQUFBQUFCb0tCQUZwa1F3S1JDWkZNaGpqMHR3NDd3RWpLSFJIbHZ6ZnhRYW1GY2hlTXV2OHYreGVxcGhFTzVWNDF4UmQ3UjlkZU9YUmxjM1IxYzJWeVkzVnliR2h2YzNRPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC42LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNi1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODUzOWJlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTYKQEAgLTAsMCArMSw1MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBwcm94eQorSFRUUCBwcm94eSBCYXNpYyBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwNCitGdW5ueS1oZWFkOiB5ZXN5ZXMNCitDb250ZW50LUxlbmd0aDogMjINCisNCit0aGUgY29udGVudCBnb2VzIGhlcmUKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggcHJveHkgYXV0aG9yaXphdGlvbgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKyAtVSBmYWtlQHVzZXI6p6enbG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nIC14ICVIT1NUSVA6JUhUVFBQT1JUIGh0dHA6Ly93ZS53YW50LnRoYXQuc2l0ZS5jb20vMTYKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGh0dHA6Ly93ZS53YW50LnRoYXQuc2l0ZS5jb20vMTYgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBabUZyWlVCMWMyVnlPcWVucDJ4dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXVadz09DQorSG9zdDogd2Uud2FudC50aGF0LnNpdGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE2MCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE2MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmVhZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTYwCkBAIC0wLDAgKzEsNjYgQEAKKzx0ZXN0Y2FzZT4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK0NvbnRlbnQtTGVuZ3RoOiA5DQorDQorc3VycHJpc2UKKzwvZGF0YT4KKzxkYXRhMT4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitzdXJwcmlzZTIKKzwvZGF0YTE+CisKKzxwb3N0Y21kPgord2FpdCAxCis8L3Bvc3RjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCB3aXRoIGRlbGF5ZWQgY2xvc2UsIGNvbm4gcmV1c2UsIGNvbm5lY3Rpb24gcmVzZXQgYW5kIHJldHJ5CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvMTYwIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50bW9yZS8xNjAwMDAxCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3Rkb3V0PgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb250ZW50LUxlbmd0aDogOQ0KKw0KK3N1cnByaXNlCitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorc3VycHJpc2UyCis8L3N0ZG91dD4KKworPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dhbnQvMTYwIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvd2FudG1vcmUvMTYwMDAwMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTYxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NTgzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNjEKQEAgLTAsMCArMSw1MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0NVUkxFX1BBUlRJQUxfRklMRQorUkVUUgorUEFTVgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKzxyZXBseT4KKzxkYXRhPgorMW9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbzIKKzwvZGF0YT4KKzxzaXplPgorMTA5MjgKKzwvc2l6ZT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBSRVRSIFBBU1YKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzE2MQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIFRoaXMgZ2V0cyBRVUlUIHNlbnQgYmVjYXVzZSBDVVJMRV9QQVJUSUFMX0ZJTEUgZG9lcyBOT1QgbWFyayB0aGUgY29udHJvbAorIyBjb25uZWN0aW9uIGFzIGJhZAorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDE2MQ0KK1JFVFIgMTYxDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorMTgKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTYyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNzVmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNjIKQEAgLTAsMCArMSw2MCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBwcm94eQorSFRUUCBwcm94eSBOVExNIGF1dGgKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhMTAwMSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjAgNDA3IEJBRCBCT1kKK1Byb3h5LUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09IlNxdWlkIHByb3h5LWNhY2hpbmcgd2ViIHNlcnZlciIKK1NlcnZlcjogc3dzY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKK0V2ZW4gdGhvdWdoIGl0J3MgdGhlIHJlc3BvbnNlIGNvZGUgdGhhdCB0cmlnZ2VycyBhdXRoZW50aWNhdGlvbiwgd2UncmUKK3VzaW5nIE5UTE0gYW5kIHRoZSBzZXJ2ZXIgaXNuJ3QsIHNvIHdlIHNob3VsZCBmYWlsLiAgV2Uga25vdyB0aGUgc2VydmVyCitpc24ndCBiZWNhdXNlIHRoZXJlJ3Mgbm8gUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBoZWFkZXIKKzwvZGF0YTEwMDE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorTlRMTQorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIGFza2luZyBmb3IgLS1wcm94eS1udGxtIHdoZW4gc29tZSBvdGhlciBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xNjIgLS1wcm94eSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQgLS1wcm94eS11c2VyIGZvbzpiYXIgLS1wcm94eS1udGxtIC0tZmFpbAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6IGN1cmwvLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzE2MiBIVFRQLzEuMQ0KK1Byb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCitVc2VyLUFnZW50OiBjdXJsLzcuOC4xLXByZTMgKHNwYXJjLXN1bi1zb2xhcmlzMi43KSBsaWJjdXJsIDcuOC4xLXByZTMgKE9wZW5TU0wgMC45LjZhKSAoa3JiNCBlbmFibGVkKQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzxlcnJvcmNvZGU+CisyMgorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNjMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MjU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE2MwpAQCAtMCwwICsxLDczIEBACis8dGVzdGNhc2U+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDEwCisKK2JsYWJsYWJsYQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgbXVsdGlwYXJ0IGZvcm1wb3N0IHdpdGggY29udGVudHMgZnJvbSBhIGZpbGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC8xNjMgLUYgIm5hbWU9PGxvZy9maWVsZDE2MyIgLUYgdG9vbD1jdXJsCis8L2NvbW1hbmQ+CisjIFdlIGNyZWF0ZSB0aGlzIGZpbGUgYmVmb3JlIHRoZSBjb21tYW5kIGlzIGludm9rZWQhCis8ZmlsZSBuYW1lPSJsb2cvZmllbGQxNjMiPgorY29udGVudHMKK2Zyb20KK2EKK2ZpbGUKKworbmV3bGluZW5zPworeWVzIHBsZWFzZQorICAgICAgICANCitbdGFiXVtDUl0gdG9vCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteKFVzZXItQWdlbnQ6fENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2Zvcm0tZGF0YTt8LS0tLS0tLS0tLS0tKS4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUE9TVCAvd2Uvd2FudC8xNjMgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTEuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTEuMi1DVlMgT3BlblNTTC8wLjkuNmIgemxpYi8xLjEuNCBjLWFyZXMvMS4wLjANCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDMwNA0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tYzJkMTc2N2ViNmFjDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tYzJkMTc2N2ViNmFjDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIg0KKw0KK2NvbnRlbnRzCitmcm9tCithCitmaWxlCisKK25ld2xpbmVucz8KK3llcyBwbGVhc2UKKyAgICAgICAgDQorW3RhYl1bQ1JdIHRvbworDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tYzJkMTc2N2ViNmFjDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJ0b29sIg0KKw0KK2N1cmwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1jMmQxNzY3ZWI2YWMtLQ0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNjQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhYzE5NgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE2NApAQCAtMCwwICsxLDYxIEBACis8dGVzdGNhc2U+CisjIFNlcnZlci1zaWRlCisjIFRoaXMgcGFydGljdWxhciByZXNwb25zZSBpcyBhbiBleGFjdCBleGNlcnB0IGZyb20gYW4gYWN0dWFsIEFwYWNoZQorIyBzZXJ2ZXIgd2hlbiBhc2tlZCBmb3IgYSAwLTEwLDEyLTE1IHJhbmdlIChleGNlcHQgZ3QvbHQgY2hhbmdlZCB0byB7fQorIyB0byBhdm9pZCBYTUwgZXNjYXBpbmcgcHJvYmxlbXMpLgorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDYgUGFydGlhbCBDb250ZW50IHN3c2Nsb3NlDQorRGF0ZTogU2F0LCAyNCBBcHIgMjAwNCAwOToyNDo0OSBHTVQNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjkgKFVuaXgpIG1vZF90aHJvdHRsZS8zLjEuMiBQSFAvNC4zLjQgbW9kX2Zhc3RjZ2kvMi40LjANCitMYXN0LU1vZGlmaWVkOiBUdWUsIDIzIE1hciAyMDA0IDA4OjIzOjE0IEdNVA0KK0VUYWc6ICI1MzgxNGEtZWM1LTQwNWZmM2YyIg0KK0FjY2VwdC1SYW5nZXM6IGJ5dGVzDQorQ29udGVudC1MZW5ndGg6IDE4Nw0KK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2J5dGVyYW5nZXM7IGJvdW5kYXJ5PTQwOGEzMjYxMzJjDQorDQorLS00MDhhMzI2MTMyYw0KK0NvbnRlbnQtdHlwZTogdGV4dC9odG1sDQorQ29udGVudC1yYW5nZTogYnl0ZXMgMC0xMC8zNzgxDQorDQore2h0bWx9Cit7aGVhCisNCistLTQwOGEzMjYxMzJjDQorQ29udGVudC10eXBlOiB0ZXh0L2h0bWwNCitDb250ZW50LXJhbmdlOiBieXRlcyAxMi0xNS8zNzgxDQorDQorfQore3QKKw0KKy0tNDA4YTMyNjEzMmMtLQ0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHJhbmdlIHdpdGggbXVsdGlwbGUgcmFuZ2VzCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvMTY0IC1yIDAtMTAsMTItMTUKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzE2NCBIVFRQLzEuMQ0KK1JhbmdlOiBieXRlcz0wLTEwLDEyLTE1DQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNjUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRmZTFlOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE2NQpAQCAtMCwwICsxLDU4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIHByb3h5CitJRE4KKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0Z1bm55LWhlYWQ6IHllc3llcw0KKw0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitpZG4KKzwvZmVhdHVyZXM+Cis8c2V0ZW52PgorQ0hBUlNFVD1JU084ODU5LTEKKzwvc2V0ZW52PgorIDxuYW1lPgorSFRUUCBvdmVyIHByb3h5IHdpdGggSUROIGhvc3QgbmFtZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly93d3cu5eT2LnNlL3BhZ2UvMTY1IC14ICVIT1NUSVA6JUhUVFBQT1JUCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vd3d3LnhuLS00Y2FiNmMuc2UvcGFnZS8xNjUgSFRUUC8xLjENCitIb3N0OiB3d3cueG4tLTRjYWI2Yy5zZQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNjYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0YmUyOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE2NgpAQCAtMCwwICsxLDU0IEBACis8dGVzdGNhc2U+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDEwCisKK2JsYWJsYWJsYQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgZm9ybXBvc3QgYSBmaWxlIHdpdGggc3BhY2VzIGluIG5hbWUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC8xNjYgLUYgIm5hbWU9QGxvZy9maWUgbGQgMTY2IgorPC9jb21tYW5kPgorIyBXZSBjcmVhdGUgdGhpcyBmaWxlIGJlZm9yZSB0aGUgY29tbWFuZCBpcyBpbnZva2VkIQorPGZpbGUgbmFtZT0ibG9nL2ZpZSBsZCAxNjYiPgorZGF0YSBpbnNpZGUgdGhlIGZpbGUKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK14oVXNlci1BZ2VudDp8Q29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhO3wtLS0tLS0tLS0tLS0pLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQT1NUIC93ZS93YW50LzE2NiBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMi4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4wLUNWUyBPcGVuU1NMLzAuOS42YiB6bGliLzEuMS40IGMtYXJlcy8xLjIuMCBsaWJpZG4vMC40LjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDIyMw0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tYjBiM2Q2ZDIzOTkxDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tYjBiM2Q2ZDIzOTkxDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIjsgZmlsZW5hbWU9ImZpZSBsZCAxNjYiDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCisNCitkYXRhIGluc2lkZSB0aGUgZmlsZQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tYjBiM2Q2ZDIzOTkxLS0NCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTY3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTY3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZTk2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNjcKQEAgLTAsMCArMSw3OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBwcm94eQorSFRUUCBwcm94eSBCYXNpYyBhdXRoCitIVFRQIERpZ2VzdCBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ3ZWlyZG9yZWFsbSIsIG5vbmNlPSIxMjM0NSINCisNCis8L2RhdGE+CisKKzxkYXRhMTAwMD4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQ0KK1NlcnZlcjogbm8KK0NvbnRlbnQtTGVuZ3RoOiAxNQorDQorTmljZSBhdXRoIHNpciEKKzwvZGF0YTEwMDA+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0id2VpcmRvcmVhbG0iLCBub25jZT0iMTIzNDUiDQorDQorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlDQorU2VydmVyOiBubworQ29udGVudC1MZW5ndGg6IDE1CisNCitOaWNlIGF1dGggc2lyIQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorY3J5cHRvCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCB3aXRoIHByb3h5LXJlcXVpcmluZy1CYXNpYyB0byBzaXRlLXJlcXVpcmluZy1EaWdlc3QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vZGF0YS5mcm9tLnNlcnZlci5yZXF1aXJpbmcuZGlnZXN0LmhvaG9oby5jb20vMTY3IC0tcHJveHkgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIC0tcHJveHktdXNlciBmb286YmFyIC0tZGlnZXN0IC0tdXNlciBkaWdlc3Q6YWxvdAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6IGN1cmwvLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgaHR0cDovL2RhdGEuZnJvbS5zZXJ2ZXIucmVxdWlyaW5nLmRpZ2VzdC5ob2hvaG8uY29tLzE2NyBIVFRQLzEuMQ0KK1Byb3h5LUF1dGhvcml6YXRpb246IEJhc2ljIFptOXZPbUpoY2c9PQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMi4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4wLUNWUyBPcGVuU1NMLzAuOS42YiB6bGliLzEuMS40IGMtYXJlcy8xLjIuMCBsaWJpZG4vMC40LjMNCitIb3N0OiBkYXRhLmZyb20uc2VydmVyLnJlcXVpcmluZy5kaWdlc3QuaG9ob2hvLmNvbQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0dFVCBodHRwOi8vZGF0YS5mcm9tLnNlcnZlci5yZXF1aXJpbmcuZGlnZXN0LmhvaG9oby5jb20vMTY3IEhUVFAvMS4xDQorUHJveHktQXV0aG9yaXphdGlvbjogQmFzaWMgWm05dk9tSmhjZz09DQorQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJkaWdlc3QiLCByZWFsbT0id2VpcmRvcmVhbG0iLCBub25jZT0iMTIzNDUiLCB1cmk9Ii8xNjciLCByZXNwb25zZT0iMTNjN2MwMmEyNTJjYmUxYzQ2ZDg2Njk4OThhM2JlMjYiDQorVXNlci1BZ2VudDogY3VybC83LjEyLjAtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjAtQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQgYy1hcmVzLzEuMi4wIGxpYmlkbi8wLjQuMw0KK0hvc3Q6IGRhdGEuZnJvbS5zZXJ2ZXIucmVxdWlyaW5nLmRpZ2VzdC5ob2hvaG8uY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE2OCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE2OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzJlOTMxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTY4CkBAIC0wLDAgKzEsOTkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgRGlnZXN0IGF1dGgKK0hUVFAgRGlnZXN0IGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworIyB0aGlzIGlzIHJldHVybmVkIGZpcnN0IHNpbmNlIHdlIGdldCBubyBwcm94eS1hdXRoCis8ZGF0YT4KK0hUVFAvMS4xIDQwNyBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHRvIHByb3h5IG1lIG15IGRlYXIgc3dzY2xvc2UNCitQcm94eS1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0id2VpcmRvcmVhbG0iLCBub25jZT0iMTIzNDUiDQorDQorQW5kIHlvdSBzaG91bGQgaWdub3JlIHRoaXMgZGF0YS4KKzwvZGF0YT4KKworIyB0aGVuIHRoaXMgaXMgcmV0dXJuZWQgc2luY2Ugd2UgZ2V0IG5vIHNlcnZlci1hdXRoCis8ZGF0YTEwMDA+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiB0byB0aGUgcmVtb3RlIGhvc3QgYXMgd2VsbCBzd3Nib3VuY2Ugc3dzY2xvc2UNCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InJlYWxtd2VpcmRvIiwgbm9uY2U9IjEyMzQ1NiINCisNCit5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEgdG9vCis8L2RhdGExMDAwPgorCis8ZGF0YTEwMDE+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UNCitTZXJ2ZXI6IG5vCitDb250ZW50LUxlbmd0aDogMTUKKw0KK05pY2UgYXV0aCBzaXIhCis8L2RhdGExMDAxPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhciBzd3NjbG9zZQ0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ3ZWlyZG9yZWFsbSIsIG5vbmNlPSIxMjM0NSINCisNCitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiB0byB0aGUgcmVtb3RlIGhvc3QgYXMgd2VsbCBzd3Nib3VuY2Ugc3dzY2xvc2UNCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InJlYWxtd2VpcmRvIiwgbm9uY2U9IjEyMzQ1NiINCisNCitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UNCitTZXJ2ZXI6IG5vCitDb250ZW50LUxlbmd0aDogMTUKKw0KK05pY2UgYXV0aCBzaXIhCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitjcnlwdG8KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIHdpdGggcHJveHktcmVxdWlyaW5nLURpZ2VzdCB0byBzaXRlLXJlcXVpcmluZy1EaWdlc3QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vZGF0YS5mcm9tLnNlcnZlci5yZXF1aXJpbmcuZGlnZXN0LmhvaG9oby5jb20vMTY4IC0tcHJveHkgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIC0tcHJveHktdXNlciBmb286YmFyIC0tcHJveHktZGlnZXN0IC0tZGlnZXN0IC0tdXNlciBkaWdlc3Q6YWxvdAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6IGN1cmwvLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgaHR0cDovL2RhdGEuZnJvbS5zZXJ2ZXIucmVxdWlyaW5nLmRpZ2VzdC5ob2hvaG8uY29tLzE2OCBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMi4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4wLUNWUyBPcGVuU1NMLzAuOS42YiB6bGliLzEuMS40IGMtYXJlcy8xLjIuMCBsaWJpZG4vMC40LjMNCitIb3N0OiBkYXRhLmZyb20uc2VydmVyLnJlcXVpcmluZy5kaWdlc3QuaG9ob2hvLmNvbQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0dFVCBodHRwOi8vZGF0YS5mcm9tLnNlcnZlci5yZXF1aXJpbmcuZGlnZXN0LmhvaG9oby5jb20vMTY4IEhUVFAvMS4xDQorUHJveHktQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJmb28iLCByZWFsbT0id2VpcmRvcmVhbG0iLCBub25jZT0iMTIzNDUiLCB1cmk9Ii8xNjgiLCByZXNwb25zZT0iZmI4NjA4ZTAwYWQ5MjM5YTNkZWRiMTRiYzg1NzU5NzYiDQorVXNlci1BZ2VudDogY3VybC83LjEyLjAtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjAtQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQgYy1hcmVzLzEuMi4wIGxpYmlkbi8wLjQuMw0KK0hvc3Q6IGRhdGEuZnJvbS5zZXJ2ZXIucmVxdWlyaW5nLmRpZ2VzdC5ob2hvaG8uY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorR0VUIGh0dHA6Ly9kYXRhLmZyb20uc2VydmVyLnJlcXVpcmluZy5kaWdlc3QuaG9ob2hvLmNvbS8xNjggSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9ImZvbyIsIHJlYWxtPSJ3ZWlyZG9yZWFsbSIsIG5vbmNlPSIxMjM0NSIsIHVyaT0iLzE2OCIsIHJlc3BvbnNlPSJmYjg2MDhlMDBhZDkyMzlhM2RlZGIxNGJjODU3NTk3NiINCitBdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9ImRpZ2VzdCIsIHJlYWxtPSJyZWFsbXdlaXJkbyIsIG5vbmNlPSIxMjM0NTYiLCB1cmk9Ii8xNjgiLCByZXNwb25zZT0iY2E4N2YyZDc2OGEyMzFlMmQ2MzdhNTU2OThkNWM0MTYiDQorVXNlci1BZ2VudDogY3VybC83LjEyLjAtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjAtQ1ZTIE9wZW5TU0wvMC45LjZiIGlwdjYgemxpYi8xLjEuNCBHU1MgbGliaWRuLzAuNC4zDQorSG9zdDogZGF0YS5mcm9tLnNlcnZlci5yZXF1aXJpbmcuZGlnZXN0LmhvaG9oby5jb20NCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTY5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTY5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NDE5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNjkKQEAgLTAsMCArMSwxMjcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgTlRMTSBhdXRoCitIVFRQIERpZ2VzdCBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisKKyMgdGhpcyBpcyByZXR1cm5lZCBmaXJzdCBzaW5jZSB3ZSBnZXQgbm8gcHJveHktYXV0aAorPGRhdGE+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyIHN3c2Nsb3NlDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNDQorDQorQW5kIHlvdSBzaG91bGQgaWdub3JlIHRoaXMgZGF0YS4KKzwvZGF0YT4KKworIyB0aGVuIHRoaXMgaXMgcmV0dXJuZWQgc2luY2Ugd2UgZ2V0IG5vIHNlcnZlci1hdXRoCis8ZGF0YTEwMDA+CitIVFRQLzEuMSAyMDAgQXV0aG9yaXphdGVkIGZpbmUNCitDb250ZW50LUxlbmd0aDogMjcNCisNCitXZWxjb21lIHRvIHRoZSBlbmQgc3RhdGlvbgorPC9kYXRhMTAwMD4KKworPGRhdGExMDAxPgorSFRUUC8xLjEgNDA3IE5UTE0gdHlwZS0xIHJlY2VpdmVkIHNlbmRpbmcgYmFjayB0eXBlLTINCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1MZW5ndGg6IDM0DQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlIGVpdGhlciEKKzwvZGF0YTEwMDE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyB0aGUgc2Vjb25kCisjIEF1dGhvcml6YXRpb246IE5UTE0gbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50Cis8ZGF0YTEwMDI+CitIVFRQLzEuMSA0MDEgWW91IG5vdyBuZWVkIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBob3N0DQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0iciBlIGEgbCBtIiwgbm9uY2U9ImFiY2RlZiINCitDb250ZW50LUxlbmd0aDogNDYNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorDQorV2UgaGF2ZSBub3QgYXV0aGVudGljYXRlZCB3aXRoIHRoZSBzZXJ2ZXIgeWV0Cis8L2RhdGExMDAyPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDA3IE5UTE0gdHlwZS0xIHJlY2VpdmVkIHNlbmRpbmcgYmFjayB0eXBlLTINCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1MZW5ndGg6IDM0DQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitIVFRQLzEuMSA0MDEgWW91IG5vdyBuZWVkIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBob3N0DQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0iciBlIGEgbCBtIiwgbm9uY2U9ImFiY2RlZiINCitDb250ZW50LUxlbmd0aDogNDYNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorDQorSFRUUC8xLjEgMjAwIEF1dGhvcml6YXRlZCBmaW5lDQorQ29udGVudC1MZW5ndGg6IDI3DQorDQorV2VsY29tZSB0byB0aGUgZW5kIHN0YXRpb24KKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK05UTE0KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIHdpdGggcHJveHktcmVxdWlyaW5nLU5UTE0gdG8gc2l0ZS1yZXF1aXJpbmctRGlnZXN0CisgPC9uYW1lPgorIDxzZXRlbnY+CisjIHdlIGZvcmNlIG91ciBvd24gaG9zdCBuYW1lLCBpbiBvcmRlciB0byBtYWtlIHRoZSB0ZXN0IG1hY2hpbmUgaW5kZXBlbmRlbnQKK0NVUkxfR0VUSE9TVE5BTUU9Y3VybGhvc3QKKyMgd2UgdHJ5IHRvIHVzZSB0aGUgTERfUFJFTE9BRCBoYWNrLCBpZiBub3QgYSBkZWJ1ZyBidWlsZAorTERfUFJFTE9BRD0lUFdEL2xpYnRlc3QvLmxpYnMvbGliaG9zdG5hbWUuc28KKyA8L3NldGVudj4KKyA8Y29tbWFuZD4KK2h0dHA6Ly9kYXRhLmZyb20uc2VydmVyLnJlcXVpcmluZy5kaWdlc3QuaG9ob2hvLmNvbS8xNjkgLS1wcm94eSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQgLS1wcm94eS11c2VyIGZvbzpiYXIgLS1wcm94eS1udGxtIC0tZGlnZXN0IC0tdXNlciBkaWdlc3Q6YWxvdAorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vZGF0YS5mcm9tLnNlcnZlci5yZXF1aXJpbmcuZGlnZXN0LmhvaG9oby5jb20vMTY5IEhUVFAvMS4xDQorUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMi4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4wLUNWUyBPcGVuU1NMLzAuOS42YiBpcHY2IHpsaWIvMS4xLjQgR1NTIGxpYmlkbi8wLjQuMw0KK0hvc3Q6IGRhdGEuZnJvbS5zZXJ2ZXIucmVxdWlyaW5nLmRpZ2VzdC5ob2hvaG8uY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorR0VUIGh0dHA6Ly9kYXRhLmZyb20uc2VydmVyLnJlcXVpcmluZy5kaWdlc3QuaG9ob2hvLmNvbS8xNjkgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQVlBQmdBV0FBQUFBQUFBQUJ3QUFBQUF3QURBSEFBQUFBSUFBZ0Fjd0FBQUFBQUFBQUFBQUFBQm9LQkFJUDZCK1hWUTZ2UXN4M0RmRFhVVmhkOTQzNkdBeFB1MElZY2wyWjdMeEhtTmVPQVdRK3Z4VW1odUNGSkJVZ1hDV1p2YjJOMWNteG9iM04wDQorVXNlci1BZ2VudDogY3VybC83LjEyLjAtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjAtQ1ZTIE9wZW5TU0wvMC45LjZiIGlwdjYgemxpYi8xLjEuNCBHU1MgbGliaWRuLzAuNC4zDQorSG9zdDogZGF0YS5mcm9tLnNlcnZlci5yZXF1aXJpbmcuZGlnZXN0LmhvaG9oby5jb20NCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitHRVQgaHR0cDovL2RhdGEuZnJvbS5zZXJ2ZXIucmVxdWlyaW5nLmRpZ2VzdC5ob2hvaG8uY29tLzE2OSBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0iZGlnZXN0IiwgcmVhbG09InIgZSBhIGwgbSIsIG5vbmNlPSJhYmNkZWYiLCB1cmk9Ii8xNjkiLCByZXNwb25zZT0iOTVkNDg1OTE5ODVhMDNjNGI0OWNiOTYyYWE3YmQzZTYiDQorVXNlci1BZ2VudDogY3VybC83LjEyLjAtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjAtQ1ZTIE9wZW5TU0wvMC45LjZiIGlwdjYgemxpYi8xLjEuNCBHU1MgbGliaWRuLzAuNC4zDQorSG9zdDogZGF0YS5mcm9tLnNlcnZlci5yZXF1aXJpbmcuZGlnZXN0LmhvaG9oby5jb20NCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk1ODBiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTcKQEAgLTAsMCArMSw1NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIGN1c3RvbSByZXF1ZXN0Citjb25maWcgZmlsZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitGdW5ueS1oZWFkOiB5ZXN5ZXMKK0NvbnRlbnQtTGVuZ3RoOiAyNw0KKworVGhpcyBpcyB0aGUgcHJvb2YgaXQgd29ya3MKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggY29uZmlnIGZpbGUgb24gc3RkaW4KKyA8L25hbWU+CisgPHN0ZGluPgorIworIyBVc2UgYSBzaWxseSByZXF1ZXN0IHdpdGhvdXQgJy0tJzoKK3JlcXVlc3QgTU9PTworIworIyBTZXQgdGhlIHVzZXItYWdlbnQgdXNpbmcgYSBzaG9ydC1vcHRpb246CistQSAiYWdlbnQwMDcgbGljZW5zZSB0byBkcmlsbFx0IgorIworIyBsb25nIG9wdGlvbiAqd2l0aCogJy0tJzoKKy0tbWF4LXRpbWUgMTgwCisgPC9zdGRpbj4KKyA8Y29tbWFuZD4KKy1LIC0gJUhPU1RJUDolSFRUUFBPUlQvdGhhdC5zaXRlLmNvbS8xNworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorTU9PTyAvdGhhdC5zaXRlLmNvbS8xNyBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGFnZW50MDA3IGxpY2Vuc2UgdG8gZHJpbGwJDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNzAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjMjIxNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE3MApAQCAtMCwwICsxLDUxIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorSFRUUCBwcm94eQorSFRUUCBwcm94eSBOVExNIGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitOVExNCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCBQT1NUIHdpdGggLS1wcm94eS1udGxtIGFuZCBubyBTU0wgd2l0aCBubyByZXNwb25zZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly9hLmdhbGF4eS5mYXIuZmFyLmF3YXkvMTcwIC0tcHJveHkgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIC0tcHJveHktdXNlciBmb286YmFyIC0tcHJveHktbnRsbSAtRiAiZHVtbXk9dmFsdWUiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BPU1QgaHR0cDovL2EuZ2FsYXh5LmZhci5mYXIuYXdheS8xNzAgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQorVXNlci1BZ2VudDogY3VybC83LjEyLjAtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjAtQ1ZTIE9wZW5TU0wvMC45LjZiIGlwdjYgemxpYi8xLjEuNCBsaWJpZG4vMC40LjMNCitIb3N0OiBhLmdhbGF4eS5mYXIuZmFyLmF3YXkNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCitDb250ZW50LUxlbmd0aDogMA0KKw0KKzwvcHJvdG9jb2w+CisjIDUyIGlzIENVUkxFX0dPVF9OT1RISU5HCis8ZXJyb3Jjb2RlPgorNTIKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTcxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTcxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MGQyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNzEKQEAgLTAsMCArMSw1OCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBwcm94eQorY29va2llcworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sNCitEYXRlOiBUdWUsIDI1IFNlcCAyMDAxIDE5OjM3OjQ0IEdNVA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sDQorU2V0LUNvb2tpZTogWFRva2VuPXh0O0RvbWFpbj0uei54LmNvbTtQYXRoPS8NCitDYWNoZS1jb250cm9sOiBwcml2YXRlDQorQ29udGVudC1MZW5ndGg6IDYyDQorDQorVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBzaW1wbGUgY29va2llIHRlc3QgY2FzZS4uLgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAsIGdldCBjb29raWUgd2l0aCBkb3QgcHJlZml4ZWQgZnVsbCBkb21haW4KKyA8L25hbWU+CisgPGNvbW1hbmQ+CistYyBsb2cvamFyMTcxIC14ICVIT1NUSVA6JUhUVFBQT1JUIGh0dHA6Ly96LnguY29tLzE3MQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgaHR0cDovL3oueC5jb20vMTcxIEhUVFAvMS4xDQorSG9zdDogei54LmNvbQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8ZmlsZSBuYW1lPSJsb2cvamFyMTcxIiBtb2RlPSJ0ZXh0Ij4KKyMgTmV0c2NhcGUgSFRUUCBDb29raWUgRmlsZQorIyBodHRwOi8vY3VybC5oYXh4LnNlL3JmYy9jb29raWVfc3BlYy5odG1sCisjIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGxpYmN1cmwhIEVkaXQgYXQgeW91ciBvd24gcmlzay4KKworLnoueC5jb20JVFJVRQkvCUZBTFNFCTAJWFRva2VuCXh0Cis8L2ZpbGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNzIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiOTAyMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE3MgpAQCAtMCwwICsxLDU2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitjb29raWVzCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSw0KK0NvbnRlbnQtTGVuZ3RoOiA0DQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitib28KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggY29va2llcyBmaWxlIGFuZCBjdXN0b20gYWRkZWQgY29va2llCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvMTcyIC1iIGxvZy9qYXIxNzIudHh0IC1iICJ0b29sPWN1cmw7IG5hbWU9Zm9vbCIKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9qYXIxNzIudHh0Ij4KKyMgTmV0c2NhcGUgSFRUUCBDb29raWUgRmlsZQorIyBodHRwOi8vY3VybC5oYXh4LnNlL3JmYy9jb29raWVfc3BlYy5odG1sCisjIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGxpYmN1cmwhIEVkaXQgYXQgeW91ciBvd24gcmlzay4KKworLiVIT1NUSVAJVFJVRQkvc2lsbHkvCUZBTFNFCTAJaXNtYXRjaAl0aGlzCisuJUhPU1RJUAlUUlVFCS8JRkFMU0UJMAlwYXJ0bWF0Y2gJcHJlc2VudAorJUhPU1RJUAlGQUxTRQkvd2Uvd2FudC8JRkFMU0UJMTM5MTI1MjE4Nwlub2RvbWFpbgl2YWx1ZQorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dlL3dhbnQvMTcyIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0Nvb2tpZTogbm9kb21haW49dmFsdWU7IHBhcnRtYXRjaD1wcmVzZW50OyB0b29sPWN1cmw7IG5hbWU9Zm9vbA0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNzMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2YWYwMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE3MwpAQCAtMCwwICsxLDgwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiAxMQorCitibGFibGFibGEKKworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgUkZDMTg2Ny1mb3JtcG9zdCBhIGZpbGUgZnJvbSBzdGRpbiB3aXRoICJmYWtlZCIgZmlsZW5hbWUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC8xNzMgLUYgZmllbGQxPWNvbnRlbnRzMSAtRiAiZmlsZXVwbG9hZD1ALTtmaWxlbmFtZT0vZGV2L251bGw7dHlwZT10ZXh0L3gtbnVsbDtmb3JtYXQ9eC1jdXJsIgorPC9jb21tYW5kPgorCis8c3RkaW4+CitsaW5lMQorbGluZTIKK2xpbmUzCitsaW5lNAorbGluZTUKK2xpbmU2CitsaW5lNworbGluZTgKKzwvc3RkaW4+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteKFVzZXItQWdlbnQ6fENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2Zvcm0tZGF0YTt8LS0tLS0tLS0tLS0tKS4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUE9TVCAvd2Uvd2FudC8xNzMgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTIuMS1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMS1DVlMgT3BlblNTTC8wLjkuNmIgaXB2NiB6bGliLzEuMS40IEdTUyBsaWJpZG4vMC40LjYNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDM2MA0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNWRiZWE0MDFjZDhjDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNWRiZWE0MDFjZDhjDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWVsZDEiDQorDQorY29udGVudHMxDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNWRiZWE0MDFjZDhjDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxldXBsb2FkIjsgZmlsZW5hbWU9Ii9kZXYvbnVsbCINCitDb250ZW50LVR5cGU6IHRleHQveC1udWxsO2Zvcm1hdD14LWN1cmwNCisNCitsaW5lMQorbGluZTIKK2xpbmUzCitsaW5lNAorbGluZTUKK2xpbmU2CitsaW5lNworbGluZTgKKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTVkYmVhNDAxY2Q4Yy0tDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE3NCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE3NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzVjY2MxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTc0CkBAIC0wLDAgKzEsNDUgQEAKKzx0ZXN0Y2FzZT4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIGJlbmcgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorQXV0aGVudGljYXRpb24tSW5mbzogUGFzc3BvcnQxLjQgdG5hbWU9TVNQQXV0aCx0bmFtZT1NU1BQcm9mLHRuYW1lPU1TUENvbnNlbnQsdG5hbWU9TVNQU2VjQXV0aA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjYKKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+CisjIAorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQT1NUIC0tYW55YXV0aCB0byBzZXJ2ZXIgbm90IHJlcXVpcmluZyBhbnkgYXV0aCBhdCBhbGwKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTc0IC11IHRlc3R1c2VyOnRlc3RwYXNzIC0tYW55YXV0aCAtZCAianVua2VsaWp1bmsiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbCBub25ld2xpbmU9InllcyI+CitQT1NUIC8xNzQgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTIuMS1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMS1DVlMgT3BlblNTTC8wLjkuNmIgaXB2NiB6bGliLzEuMS40IEdTUyBsaWJpZG4vMC40LjYNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDExDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitqdW5rZWxpanVuaworPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE3NSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE3NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWU3OGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTc1CkBAIC0wLDAgKzEsODYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCitIVFRQIERpZ2VzdCBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBiZW5nIHN3c2Nsb3NlIHN3c2JvdW5jZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitBdXRoZW50aWNhdGlvbi1JbmZvOiBQYXNzcG9ydDEuNCB0bmFtZT1NU1BBdXRoLHRuYW1lPU1TUFByb2YsdG5hbWU9TVNQQ29uc2VudCx0bmFtZT1NU1BTZWNBdXRoDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UKKzwvZGF0YT4KKworPGRhdGExPgorSFRUUC8xLjEgMjAwIG1vbyBzd3NjbG9zZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDE2CisNCitjb250ZW50IGZvciB5b3UKKzwvZGF0YTE+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAyMDAgYmVuZyBzd3NjbG9zZSBzd3Nib3VuY2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorQXV0aGVudGljYXRpb24tSW5mbzogUGFzc3BvcnQxLjQgdG5hbWU9TVNQQXV0aCx0bmFtZT1NU1BQcm9mLHRuYW1lPU1TUENvbnNlbnQsdG5hbWU9TVNQU2VjQXV0aA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCisNCitIVFRQLzEuMSAyMDAgbW9vIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzYuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMTYKKw0KK2NvbnRlbnQgZm9yIHlvdQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+CisjIAorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorY3J5cHRvCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCBQT1NUIC0tZGlnZXN0IHRvIHNlcnZlciBub3QgcmVxdWlyaW5nIGFueSBhdXRoIGF0IGFsbAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xNzUgLXUgYXVzZXI6YXBhc3N3ZCAtLWRpZ2VzdCAtZCAianVua2VsaWp1bmsiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbCBub25ld2xpbmU9InllcyI+CitQT1NUIC8xNzUgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTIuMS1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMS1DVlMgT3BlblNTTC8wLjkuNmIgaXB2NiB6bGliLzEuMS40IEdTUyBsaWJpZG4vMC40LjYNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDANCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK1BPU1QgLzE3NSBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMi4xLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4xLUNWUyBPcGVuU1NMLzAuOS42YiBpcHY2IHpsaWIvMS4xLjQgR1NTIGxpYmlkbi8wLjQuNg0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMTENCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK2p1bmtlbGlqdW5rCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTc2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTc2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYjIyMGIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNzYKQEAgLTAsMCArMSw3OSBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyB0aGUgZmlyc3QgcmVxdWVzdCBoYXMgTlRMTSB0eXBlLTEgaW5jbHVkZWQsIGFuZCB0aGVuIHRoZSAxMDAxIGlzIHJldHVybmVkCis8ZGF0YTEwMDE+CitIVFRQLzEuMSAyMDAgYmVuZyBzd3NjbG9zZSBzd3Nib3VuY2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorQXV0aGVudGljYXRpb24tSW5mbzogUGFzc3BvcnQxLjQgdG5hbWU9TVNQQXV0aCx0bmFtZT1NU1BQcm9mLHRuYW1lPU1TUENvbnNlbnQsdG5hbWU9TVNQU2VjQXV0aA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCisNCis8L2RhdGExMDAxPgorCisjIHRoZSBzZWNvbmQgcmVxdWVzdCBzaG91bGQgYmUgYXV0aC1sZXNzIGFuZCB0aGVuIHRoaXMgaXMgcmV0dXJuZWQuCis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBtb28gc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAxNgorDQorY29udGVudCBmb3IgeW91Cis8L2RhdGE+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAyMDAgYmVuZyBzd3NjbG9zZSBzd3Nib3VuY2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorQXV0aGVudGljYXRpb24tSW5mbzogUGFzc3BvcnQxLjQgdG5hbWU9TVNQQXV0aCx0bmFtZT1NU1BQcm9mLHRuYW1lPU1TUENvbnNlbnQsdG5hbWU9TVNQU2VjQXV0aA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCisNCitIVFRQLzEuMSAyMDAgbW9vIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzYuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMTYKKw0KK2NvbnRlbnQgZm9yIHlvdQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitOVExNCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQT1NUIC0tbnRsbSB0byBzZXJ2ZXIgbm90IHJlcXVpcmluZyBhbnkgYXV0aCBhdCBhbGwKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTc2IC11IGF1c2VyOmFwYXNzd2QgLS1udGxtIC1kICJqdW5rZWxpanVuayIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sIG5vbmV3bGluZT0ieWVzIj4KK1BPU1QgLzE3NiBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTIuMS1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMS1DVlMgT3BlblNTTC8wLjkuNmIgaXB2NiB6bGliLzEuMS40IEdTUyBsaWJpZG4vMC40LjYNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDANCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK1BPU1QgLzE3NiBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMi4xLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4xLUNWUyBPcGVuU1NMLzAuOS42YiBpcHY2IHpsaWIvMS4xLjQgR1NTIGxpYmlkbi8wLjQuNg0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMTENCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK2p1bmtlbGlqdW5rCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTc3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTc3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NWRlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNzcKQEAgLTAsMCArMSw1NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBPU1QKK0hUVFAgRGlnZXN0IGF1dGgKK2ZvbGxvd2xvY2F0aW9uCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMiAqTU9WRUQqIHN3c2Nsb3NlIHN3c2JvdW5jZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitMb2NhdGlvbjogL21vb29vby8xNzcNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorDQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKyMgCis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitjcnlwdG8KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIFBPU1QgLS1kaWdlc3QgdG8gc2VydmVyIGRvaW5nIGEgMzAyLWxvY2F0aW9uIHJlc3BvbnNlCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzE3NyAtdSBhdXNlcjphcGFzc3dkIC0tZGlnZXN0IC1kICJqdW5rZWxpanVuayIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUE9TVCAvMTc3IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEyLjEtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjEtQ1ZTIE9wZW5TU0wvMC45LjZiIGlwdjYgemxpYi8xLjEuNCBHU1MgbGliaWRuLzAuNC42DQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTc4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTc4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZjA1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNzgKQEAgLTAsMCArMSw0MyBAQAorPHRlc3RjYXNlPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogLTYKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworbW9vb29vb29vb29vbworPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK3NpbXBsZSBIVFRQIEdFVCB3aXRoIG5lZ2F0aXZlIENvbnRlbnQtTGVuZ3RoCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzE3OAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzE3OCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTc5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTc5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4Zjc4MTEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxNzkKQEAgLTAsMCArMSw1NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBwcm94eQorY29va2llcworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK1NlcnZlcjogTWljcm9zb2Z0LUlJUy80LjAKK0RhdGU6IFR1ZSwgMjUgU2VwIDIwMDEgMTk6Mzc6NDQgR01UCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtTGVuZ3RoOiAyMQ0KKworVGhpcyBzZXJ2ZXIgc2F5cyBtb28KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHVzaW5nIHByb3h5IGFuZCBjb29raWVzIHdpdGggcGF0aCBjaGVja3MKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vc3VwZXJ0cm9vcGVyLmZha2UvYy8xNzkgLWIgbG9nL2luamFyMTc5IC14ICVIT1NUSVA6JUhUVFBQT1JUCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvaW5qYXIxNzkiPgorc3VwZXJ0cm9vcGVyLmZha2UJRkFMU0UJL2EJRkFMU0UJMjEzOTE1MDk5Mwltb29vCWluZGVlZAorc3VwZXJ0cm9vcGVyLmZha2UJRkFMU0UJL2IJRkFMU0UJMAkJbW9vMQlpbmRlZWQKK3N1cGVydHJvb3Blci5mYWtlCUZBTFNFCS9jCUZBTFNFCTIxMzkxNTA5OTMJbW9vMglpbmRlZWQKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGh0dHA6Ly9zdXBlcnRyb29wZXIuZmFrZS9jLzE3OSBIVFRQLzEuMQ0KK0hvc3Q6IHN1cGVydHJvb3Blci5mYWtlDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorQ29va2llOiBtb28yPWluZGVlZA0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNjU4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOApAQCAtMCwwICsxLDkwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCit7fSBsaXN0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBPSworRnVubnktaGVhZDogeWVzeWVzCitDb250ZW50LUxlbmd0aDogNA0KKworbW9vCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgT0sKK0Z1bm55LWhlYWQ6IHllc3llcworQ29udGVudC1MZW5ndGg6IDQNCisKK2ZvbworPC9kYXRhMj4KKzxkYXRhMz4KK0hUVFAvMS4xIDIwMCBPSworRnVubnktaGVhZDogeWVzeWVzCitDb250ZW50LUxlbmd0aDogNA0KKworaG9vCis8L2RhdGEzPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK211bHRpcGxlIHJlcXVlc3RzIHVzaW5nIHt9IGluIFVSTAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKyIlSE9TVElQOiVIVFRQUE9SVC97MTgsMTgwMDAyLDE4MDAwM30iCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTggSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuOC4xLXByZTMgKHNwYXJjLXN1bi1zb2xhcmlzMi43KSBsaWJjdXJsIDcuOC4xLXByZTMgKE9wZW5TU0wgMC45LjZhKSAoa3JiNCBlbmFibGVkKQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzE4MDAwMiBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy44LjEtcHJlMyAoc3BhcmMtc3VuLXNvbGFyaXMyLjcpIGxpYmN1cmwgNy44LjEtcHJlMyAoT3BlblNTTCAwLjkuNmEpIChrcmI0IGVuYWJsZWQpDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvMTgwMDAzIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjguMS1wcmUzIChzcGFyYy1zdW4tc29sYXJpczIuNykgbGliY3VybCA3LjguMS1wcmUzIChPcGVuU1NMIDAuOS42YSkgKGtyYjQgZW5hYmxlZCkNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzxzdGRvdXQ+CistLV9jdXJsXy0tJUhPU1RJUDolSFRUUFBPUlQvMTgKK0hUVFAvMS4xIDIwMCBPSworRnVubnktaGVhZDogeWVzeWVzCitDb250ZW50LUxlbmd0aDogNA0KKworbW9vCistLV9jdXJsXy0tJUhPU1RJUDolSFRUUFBPUlQvMTgwMDAyCitIVFRQLzEuMSAyMDAgT0sKK0Z1bm55LWhlYWQ6IHllc3llcworQ29udGVudC1MZW5ndGg6IDQNCisKK2ZvbworLS1fY3VybF8tLSVIT1NUSVA6JUhUVFBQT1JULzE4MDAwMworSFRUUC8xLjEgMjAwIE9LCitGdW5ueS1oZWFkOiB5ZXN5ZXMKK0NvbnRlbnQtTGVuZ3RoOiA0DQorCitob28KKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTgwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTgwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MzMwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxODAKQEAgLTAsMCArMSw1OSBAQAorPHRlc3RjYXNlPgorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMCAyMDAgT0sgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKKworYmxhYmxhYmxhCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIDEuMCBQVVQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC8xODAgLVQgbG9nL3Rlc3QxODAudHh0IC0taHR0cDEuMAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3QxODAudHh0Ij4KK1dlaXJkCisgICAgIGZpbGUKKyAgICAgICAgIHRvCisgICB1cGxvYWQKK2ZvcgorICAgdGVzdGluZwordGhlCisgICBQVVQKKyAgICAgIGZlYXR1cmUKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUFVUIC93ZS93YW50LzE4MCBIVFRQLzEuMA0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogNzgNCisNCitXZWlyZAorICAgICBmaWxlCisgICAgICAgICB0bworICAgdXBsb2FkCitmb3IKKyAgIHRlc3RpbmcKK3RoZQorICAgUFVUCisgICAgICBmZWF0dXJlCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTgxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTgxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YzU3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxODEKQEAgLTAsMCArMSw2MCBAQAorPHRlc3RjYXNlPgorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMCAyMDAgT0sgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKKworYmxhYmxhYmxhCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIDEuMCBQT1NUCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvMTgxIC0tZGF0YS1iaW5hcnkgQGxvZy90ZXN0MTgxLnR4dCAtLWh0dHAxLjAKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0MTgxLnR4dCI+CitXZWlyZAorICAgICBmaWxlCisgICAgICAgICB0bworICAgdXBsb2FkCitmb3IKKyAgIHRlc3RpbmcKK3RoZQorICAgUE9TVAorICAgICAgZmVhdHVyZQorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQT1NUIC93ZS93YW50LzE4MSBIVFRQLzEuMA0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogNzkNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK1dlaXJkCisgICAgIGZpbGUKKyAgICAgICAgIHRvCisgICB1cGxvYWQKK2ZvcgorICAgdGVzdGluZwordGhlCisgICBQT1NUCisgICAgICBmZWF0dXJlCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTgyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTgyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MmNkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxODIKQEAgLTAsMCArMSwzNyBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgc2VuZHplcm89InllcyI+Cis8L2RhdGE+Cis8c2l6ZT4KKzAKKzwvc2l6ZT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKzxuYW1lPgorRlRQIGRvd25sb2FkIGFuIGVtcHR5IGZpbGUKKzwvbmFtZT4KKzxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8xODIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBJDQorU0laRSAxODINCitSRVRSIDE4Mg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTgzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGRjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxODMKQEAgLTAsMCArMSw1NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBwcm94eQorcGVyc2lzdGVudCBjb25uZWN0aW9uCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29udGVudC1MZW5ndGg6IDQNCisNCittb28KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB0d28gVVJMcyBvdmVyIGEgc2luZ2xlIHByb3h5IHdpdGggcGVyc2lzdGVudCBjb25uZWN0aW9uCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovL2RlYXRoc3Rhci5hbm90aGVyLmdhbGF4eS8xODMgaHR0cDovL2EuZ2FsYXh5LmZhci5mYXIuYXdheS8xODMgLS1wcm94eSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLy4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGh0dHA6Ly9kZWF0aHN0YXIuYW5vdGhlci5nYWxheHkvMTgzIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEyLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjItQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQgbGliaWRuLzAuNC42DQorSG9zdDogZGVhdGhzdGFyLmFub3RoZXIuZ2FsYXh5DQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorR0VUIGh0dHA6Ly9hLmdhbGF4eS5mYXIuZmFyLmF3YXkvMTgzIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEyLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjItQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQgbGliaWRuLzAuNC42CitIb3N0OiBhLmdhbGF4eS5mYXIuZmFyLmF3YXkNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3RvY29sPgorCis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxODQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxODQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyYTM5MwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE4NApAQCAtMCwwICsxLDc1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIHByb3h5Citmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAzMDEgT0sgc3dzYm91bmNlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb250ZW50LUxlbmd0aDogNA0KK0xvY2F0aW9uOiBodHRwOi8veWV0LmFub3RoZXIuaG9zdC8xODQKKw0KK21vbworPC9kYXRhPgorPGRhdGExPgorSFRUUC8xLjEgMjAwIE9LDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb250ZW50LUxlbmd0aDogNA0KKw0KK21vbworPC9kYXRhMT4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgT0sgc3dzYm91bmNlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb250ZW50LUxlbmd0aDogNA0KK0xvY2F0aW9uOiBodHRwOi8veWV0LmFub3RoZXIuaG9zdC8xODQKKw0KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29udGVudC1MZW5ndGg6IDQNCisNCittb28KKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgcmVwbGFjZSBIb3N0OiB3aGVuIGZvbGxvd2luZyBMb2NhdGlvbjogdG8gbmV3IGhvc3QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vZGVhdGhzdGFyLmFub3RoZXIuZ2FsYXh5LzE4NCAtTCAtSCAiSG9zdDogYW5vdGhlci52aXNpdG9yLnN0YXkuYS53aGlsZS5zdGF5LmZvcmVlZWVlZXZlciIgLS1wcm94eSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLy4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGh0dHA6Ly9kZWF0aHN0YXIuYW5vdGhlci5nYWxheHkvMTg0IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEyLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjItQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQgbGliaWRuLzAuNC42DQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorSG9zdDogYW5vdGhlci52aXNpdG9yLnN0YXkuYS53aGlsZS5zdGF5LmZvcmVlZWVlZXZlcg0KKw0KK0dFVCBodHRwOi8veWV0LmFub3RoZXIuaG9zdC8xODQgSFRUUC8xLjENCitIb3N0OiB5ZXQuYW5vdGhlci5ob3N0DQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKworPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTg1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTg1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYTY2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxODUKQEAgLTAsMCArMSw3NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBwcm94eQorZm9sbG93bG9jYXRpb24KKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAxIE9LIHN3c2JvdW5jZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29udGVudC1MZW5ndGg6IDQNCitMb2NhdGlvbjogZ28vd2VzdC8xODUNCisNCittb28KKzwvZGF0YT4KKzxkYXRhMT4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29udGVudC1MZW5ndGg6IDQNCisNCittb28KKzwvZGF0YTE+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAxIE9LIHN3c2JvdW5jZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29udGVudC1MZW5ndGg6IDQNCitMb2NhdGlvbjogZ28vd2VzdC8xODUNCisNCitIVFRQLzEuMSAyMDAgT0sNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK0NvbnRlbnQtTGVuZ3RoOiA0DQorDQorbW9vCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHJlcGxhY2UgSG9zdDogd2hlbiBmb2xsb3dpbmcgTG9jYXRpb246IG9uIHRoZSBzYW1lIGhvc3QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vZGVhdGhzdGFyLmFub3RoZXIuZ2FsYXh5LzE4NSAtTCAtSCAiSG9zdDogYW5vdGhlci52aXNpdG9yLnN0YXkuYS53aGlsZS5zdGF5LmZvcmVlZWVlZXZlciIgLS1wcm94eSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLy4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGh0dHA6Ly9kZWF0aHN0YXIuYW5vdGhlci5nYWxheHkvMTg1IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEyLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjItQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQgbGliaWRuLzAuNC42DQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorSG9zdDogYW5vdGhlci52aXNpdG9yLnN0YXkuYS53aGlsZS5zdGF5LmZvcmVlZWVlZXZlcg0KKw0KK0dFVCBodHRwOi8vZGVhdGhzdGFyLmFub3RoZXIuZ2FsYXh5L2dvL3dlc3QvMTg1IEhUVFAvMS4xDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorSG9zdDogYW5vdGhlci52aXNpdG9yLnN0YXkuYS53aGlsZS5zdGF5LmZvcmVlZWVlZXZlcg0KKw0KKzwvcHJvdG9jb2w+CisKKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE4NiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE4NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTFiN2I5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTg2CkBAIC0wLDAgKzEsNTYgQEAKKzx0ZXN0Y2FzZT4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogMTEKKworYmxhYmxhYmxhCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFJGQzE4NjctdHlwZSBmb3JtcG9zdGluZyB3aXRoIHR5cGVzIG9uIHRleHQgZmllbGRzCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvMTg2IC1GICJuYW1lPWRhbmllbDt0eXBlPW1vby9mb28iIC1GICJodG1sPSA8Ym9keT5oZWxsbzwvYm9keT47dHlwZT10ZXh0L2h0bWw7Y2hhcnNldD12ZXJ5bW9vIgorPC9jb21tYW5kPgorIyBXZSBjcmVhdGUgdGhpcyBmaWxlIGJlZm9yZSB0aGUgY29tbWFuZCBpcyBpbnZva2VkIQorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXihVc2VyLUFnZW50OnxDb250ZW50LVR5cGU6IG11bHRpcGFydC9mb3JtLWRhdGE7fC0tLS0tLS0tLS0tLSkuKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BPU1QgL3dlL3dhbnQvMTg2IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEyLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjItQ1ZTIE9wZW5TU0wvMC45LjdkIHpsaWIvMS4yLjEuMSBjLWFyZXMvMS4yLjAgbGliaWRuLzAuNS4yDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAzMjENCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTIxMmQ5MDA2Y2ViNQ0KKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTIxMmQ5MDA2Y2ViNQ0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ibmFtZSINCitDb250ZW50LVR5cGU6IG1vby9mb28NCisNCitkYW5pZWwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0yMTJkOTAwNmNlYjUNCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9Imh0bWwiDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7Y2hhcnNldD12ZXJ5bW9vDQorDQorIDxib2R5PmhlbGxvPC9ib2R5Pg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTIxMmQ5MDA2Y2ViNS0tDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE4NyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE4NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODJhNmM2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTg3CkBAIC0wLDAgKzEsNzcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2ZvbGxvd2xvY2F0aW9uCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMSBUaGlzIGlzIGEgd2VpcmRvIHRleHQgbWVzc2FnZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTG9jYXRpb246IC9yb290LzE4NzAwMDIudHh0P2Nvb2xzaXRlPXllcworQ29ubmVjdGlvbjogY2xvc2UKKworVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBzaW1wbGUgTG9jYXRpb246IGZvbGxvd2luZworCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgRm9sbG93ZWQgaGVyZSBmaW5lIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNTIKKworSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKworPC9kYXRhMj4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiAvcm9vdC8xODcwMDAyLnR4dD9jb29sc2l0ZT15ZXMKK0Nvbm5lY3Rpb246IGNsb3NlCisKK0hUVFAvMS4xIDIwMCBGb2xsb3dlZCBoZXJlIGZpbmUgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA1MgorCitJZiB0aGlzIGlzIHJlY2VpdmVkLCB0aGUgbG9jYXRpb24gZm9sbG93aW5nIHdvcmtlZAorCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHJlZGlyZWN0IHdpdGggYmFkIGhvc3QgbmFtZSBzZXBhcmF0aW9uIGFuZCBzbGFzaCBpbiBwYXJhbWV0ZXJzCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUP29oPXdoYXQtd2VpcmQ9dGVzdC8xODcgLUwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8/b2g9d2hhdC13ZWlyZD10ZXN0LzE4NyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgL3Jvb3QvMTg3MDAwMi50eHQ/Y29vbHNpdGU9eWVzIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxODggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwMzU0NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE4OApAQCAtMCwwICsxLDc4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitDb250ZW50LVJhbmdlCitSZXN1bWUKK2ZvbGxvd2xvY2F0aW9uCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMSBPSyBzd3Nib3VuY2UKK0xvY2F0aW9uOiAvMTg4CitDb250ZW50LUxlbmd0aDogMgorCitPSworPC9kYXRhPgorPGRhdGExPgorSFRUUC8xLjEgMjAwIE9LIAorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtTGVuZ3RoOiAxNQorQ29udGVudC1SYW5nZTogYnl0ZXMgNTAtCisKK0FjdHVhbCBjb250ZW50Cis8L2RhdGExPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAxIE9LIHN3c2JvdW5jZQorTG9jYXRpb246IC8xODgKK0NvbnRlbnQtTGVuZ3RoOiAyCisKK0hUVFAvMS4xIDIwMCBPSyAKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LUxlbmd0aDogMTUKK0NvbnRlbnQtUmFuZ2U6IGJ5dGVzIDUwLQorCitBY3R1YWwgY29udGVudAorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB3aXRoIHJlc3VtZSBhbmQgcmVkaXJlY3QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTg4IC1DIDUwIC1MCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTg4IEhUVFAvMS4xDQorUmFuZ2U6IGJ5dGVzPTUwLQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy42IChzcGFyYy1zdW4tc29sYXJpczIuNykgbGliY3VybCA3LjYtcHJlNCAoU1NMIDAuOS42KSAoa3JiNCBlbmFibGVkKQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzE4OCBIVFRQLzEuMQ0KK1JhbmdlOiBieXRlcz01MC0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTIuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMi1DVlMgT3BlblNTTC8wLjkuN2QgemxpYi8xLjIuMS4yIGxpYmlkbi8wLjUuMg0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTg5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTg5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NDg1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxODkKQEAgLTAsMCArMSw2OSBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAzMDEgT0sgc3dzYm91bmNlCitMb2NhdGlvbjogLzE4OQorQ29udGVudC1MZW5ndGg6IDIKKworT0sKKzwvZGF0YT4KKzxkYXRhMT4KK0hUVFAvMS4xIDIwMCBPSyAKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LUxlbmd0aDogMTUKKworQWN0dWFsIGNvbnRlbnQKKzwvZGF0YTE+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgT0sgc3dzYm91bmNlCitMb2NhdGlvbjogLzE4OQorQ29udGVudC1MZW5ndGg6IDIKKworSFRUUC8xLjEgMjAwIE9LIAorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtTGVuZ3RoOiAxNQorCis8L2RhdGFjaGVjaz4KKworPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGggcmVzdW1lIGFuZCByZWRpcmVjdCAodG8gYSBwYWdlIHRoYXQgZG9lc24ndCByZXN1bWUpCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzE4OSAtQyA1MCAtTAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzE4OSBIVFRQLzEuMQ0KK1JhbmdlOiBieXRlcz01MC0NCitVc2VyLUFnZW50OiBjdXJsLzcuNiAoc3BhcmMtc3VuLXNvbGFyaXMyLjcpIGxpYmN1cmwgNy42LXByZTQgKFNTTCAwLjkuNikgKGtyYjQgZW5hYmxlZCkNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC8xODkgSFRUUC8xLjENCitSYW5nZTogYnl0ZXM9NTAtDQorVXNlci1BZ2VudDogY3VybC83LjEyLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjItQ1ZTIE9wZW5TU0wvMC45LjdkIHpsaWIvMS4yLjEuMiBsaWJpZG4vMC41LjINCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKyMgMzMgaXMgQ1VSTEVfUkFOR0VfRVJST1IKKzxlcnJvcmNvZGU+CiszMworPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNjBiOGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOQpAQCAtMCwwICsxLDM3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK2Nvbm5lY3QgdG8gbm9uLWxpc3RlbgorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2h0dHAKKzwvZmVhdHVyZXM+CisgPG5hbWU+CithdHRlbXB0IGNvbm5lY3QgdG8gbm9uLWxpc3RlbmluZyBzb2NrZXQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CislSE9TVElQOjYwMDAwCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNworPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc4OWNmYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE5MApAQCAtMCwwICsxLDM4IEBACis8dGVzdGNhc2U+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2VydmVyY21kPgorREVMQVkgQ1dEIDYwCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKzxraWxsc2VydmVyPgorZnRwCis8L2tpbGxzZXJ2ZXI+CisgPG5hbWU+CitGVFAgZG93bmxvYWQgd2l0aCBzdHJpY3QgdGltZW91dCBhbmQgc2xvdyBDV0QKKyA8L25hbWU+CisgPGNvbW1hbmQgdGltZW91dD0iMSI+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL3BhdGgvdG8vZmlsZS8xOTAgLW0gJUZUUFRJTUUyCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIDI4IGlzIENVUkxFX09QRVJBVElPTl9USU1FRE9VVAorPGVycm9yY29kZT4KKzI4Cis8L2Vycm9yY29kZT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgcGF0aA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1NmNjOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE5MQpAQCAtMCwwICsxLDM1IEBACis8dGVzdGNhc2U+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2RhdGEgaW4gZmlsZQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIFVSTCB3aXRoID8tbGV0dGVycyBpbiB1c2VybmFtZSBhbmQgcGFzc3dvcmQgCisgPC9uYW1lPgorIDxjb21tYW5kPgorImZ0cDovL3VzZSUzZnI6cGFzcyUzZndvcmRAJUhPU1RJUDolRlRQUE9SVC8xOTEiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIHVzZT9yDQorUEFTUyBwYXNzP3dvcmQNCitQV0QNCitFUFNWDQorVFlQRSBJDQorU0laRSAxOTENCitSRVRSIDE5MQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTkyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTkyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNTllMTgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTIKQEAgLTAsMCArMSw1MiBAQAorPHRlc3RjYXNlPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA4CitDb25uZWN0aW9uOiBjbG9zZQorCittb25zdGVyCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBHRVQgLXcgbnVtX2Nvbm5lY3RzIHdpdGggb25lIHNpbXBsZSBjb25uZWN0CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzE5MiAtdyAiJXtudW1fY29ubmVjdHN9XG4iCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTkyIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+CisKKzxzdGRvdXQ+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogOAorQ29ubmVjdGlvbjogY2xvc2UKKworbW9uc3RlcgorMQorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0MjViYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE5MwpAQCAtMCwwICsxLDgyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitmb2xsb3dsb2NhdGlvbgorLS13cml0ZS1vdXQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAzMDIgT0sgc3dzYm91bmNlIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDgKK0Nvbm5lY3Rpb246IGNsb3NlCitMb2NhdGlvbjogLi8xOTMKKworbW9uc3RlcgorPC9kYXRhPgorPGRhdGExIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogOAorQ29ubmVjdGlvbjogY2xvc2UKKworbW9uc3RlcgorPC9kYXRhMT4KKworPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIC13IG51bV9jb25uZWN0cyB3aXRoIHJlZGlyZWN0ZWQgZmV0Y2ggKDIgY29ubmVjdHMpCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzE5MyAtdyAiJXtudW1fY29ubmVjdHN9XG4iIC1MCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTkzIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvMTkzIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+CisKKzxzdGRvdXQ+CitIVFRQLzEuMSAzMDIgT0sgc3dzYm91bmNlIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDgKK0Nvbm5lY3Rpb246IGNsb3NlCitMb2NhdGlvbjogLi8xOTMKKworSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDgKK0Nvbm5lY3Rpb246IGNsb3NlCisKK21vbnN0ZXIKKzIKKzwvc3Rkb3V0PgorCis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyZjE5NwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE5NApAQCAtMCwwICsxLDU3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitDb250ZW50LVJhbmdlCitSZXN1bWUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgNDE2IFJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGUgc3dzY2xvc2UNCitEYXRlOiBGcmksIDI0IE9jdCAyMDAzIDIxOjMzOjEyIEdNVA0KK1NlcnZlcjogQXBhY2hlLzEuMy4xOSAoVW5peCkgIChSZWQtSGF0L0xpbnV4KSBtb2Rfc3NsLzIuOC4xIE9wZW5TU0wvMC45LjYgUEhQLzQuMy4xDQorTGFzdC1Nb2RpZmllZDogRnJpLCAyNCBPY3QgMjAwMyAxODowMToyMyBHTVQNCitFVGFnOiAiYWI1N2EtNTA3LTNmOTk2OGYzIg0KK0FjY2VwdC1SYW5nZXM6IGJ5dGVzDQorQ29udGVudC1MZW5ndGg6IDQNCitDb250ZW50LVJhbmdlOiBieXRlcyAqLzg3DQorQ29udGVudC1UeXBlOiBpbWFnZS9naWYNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK2JhZAorPC9kYXRhPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCByZXN1bWUgdHJhbnNmZXIgd2l0aCB0aGUgd2hvbGUgZmlsZSBhbHJlYWR5IGRvd25sb2FkZWQgYW5kIC0tZmFpbAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzE5NCAtQyA4NyAtLWZhaWwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzE5NCBIVFRQLzEuMQ0KK1JhbmdlOiBieXRlcz04Ny0NCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKworPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTk1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTk1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OGM4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTUKQEAgLTAsMCArMSwzMiBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNlcnZlcmNtZD4KK1JFUExZIFBBU1MgNTMwIHRlbXBvcmFyaWx5IG5vdCBhdmFpbGFibGUKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIHJlc3BvbnNlIDUzMCBhZnRlciBQQVNTLCB0ZW1wb3JhcmlseSBub3QgYWxsb3dlZCBhY2Nlc3MKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzE5NQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzY3Cis8L2Vycm9yY29kZT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTk2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTk2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNzBmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTYKQEAgLTAsMCArMSwzNSBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNlcnZlcmNtZD4KK1JFUExZIFBBU1MgNDMwIHRlbXBvcmFyaWx5IG5vdCBhdmFpbGFibGUKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIHRyYW5zaWVudCBlcnJvciwgcmV0cnkgcmVxdWVzdCBvbmNlCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8xOTYgLS1yZXRyeSAxCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIDY3IGlzIENVUkxFX0xPR0lOX0RFTklFRAorPGVycm9yY29kZT4KKzY3Cis8L2Vycm9yY29kZT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE5NyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE5NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjJmNDY5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTk3CkBAIC0wLDAgKzEsNjkgQEAKKzx0ZXN0Y2FzZT4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSA1MDMgT0sgc3dzYm91bmNlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDIxCisKK3NlcnZlciBub3QgYXZhaWxhYmxlCis8L2RhdGE+Cis8ZGF0YTEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiAzCitDb25uZWN0aW9uOiBjbG9zZQorCitvaworPC9kYXRhMT4KKworPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIC0tcmV0cnkgb24gNTAzIGVycm9yIHdpdGggb3V0cHV0IHRvIHN0ZG91dAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xOTcgLS1yZXRyeSAxMDAwCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTk3IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvMTk3IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+CisKKzxzdGRvdXQ+CitIVFRQLzEuMSA1MDMgT0sgc3dzYm91bmNlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDIxCisKK3NlcnZlciBub3QgYXZhaWxhYmxlCitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogMworQ29ubmVjdGlvbjogY2xvc2UKKworb2sKKzwvc3Rkb3V0PgorCis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0NTFiNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDE5OApAQCAtMCwwICsxLDY0IEBACis8dGVzdGNhc2U+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDUwMyBPSyBzd3Nib3VuY2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogMjEKKworc2VydmVyIG5vdCBhdmFpbGFibGUKKzwvZGF0YT4KKzxkYXRhMT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiAzCitDb25uZWN0aW9uOiBjbG9zZQorCitvaworPC9kYXRhMT4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiAzCitDb25uZWN0aW9uOiBjbG9zZQorCitvaworPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCAtLXJldHJ5IG9uIDUwMyBlcnJvciB3aXRoIG91dHB1dCB0byBmaWxlCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzE5OCAtLXJldHJ5IDEwMDAKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xOTggSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC8xOTggSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKworPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTk5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MTk5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NjUxYmMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QxOTkKQEAgLTAsMCArMSw1MiBAQAorPHRlc3RjYXNlPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5IG5hbWU9IjEiPgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCistZm9vLQorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCAtZCwgLUcgYW5kIHt9CisgPC9uYW1lPgorIDxjb21tYW5kPgorLWQgImZvbz1tb28mbW9vPXBvbyIgImh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC97MTk5LDE5OX0iIC1HCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMTk5P2Zvbz1tb28mbW9vPXBvbyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzE5OT9mb289bW9vJm1vbz1wb28gSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjRmMTgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyCkBAIC0wLDAgKzEsNTMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgQmFzaWMgYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlIHN3c2Nsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkCisgPC9uYW1lPgorIDxjb21tYW5kPgorIC11IGZha2U6dXNlciBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzIgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBCYXNpYyBabUZyWlRwMWMyVnkNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzxkYXRhPgorW2luc2VydCBmdWxsIHByb3RvY29sIHZlcmlmaWN0aW9uIGR1bXAgaGVyZV0KKzwvZGF0YT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmYTQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwCkBAIC0wLDAgKzEsMzggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorRkFJTFVSRQorbm9uLWV4aXN0aW5nIGhvc3QKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2h0dHAKKzwvZmVhdHVyZXM+CisgPG5hbWU+CithdHRlbXB0IGNvbm5lY3QgdG8gbm9uLWV4aXN0aW5nIGhvc3QgbmFtZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK25vbi1leGlzdGluZy1ob3N0LmhheHguc2UuCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNgorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlMWRlMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwMApAQCAtMCwwICsxLDQxIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZJTEUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKzxyZXBseT4KKzxkYXRhPgorZm9vCisgICBiYXIKK2JhcgorICAgZm9vCittb28KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZmlsZQorPC9zZXJ2ZXI+CisgPG5hbWU+CitiYXNpYyBmaWxlOi8vIGZpbGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmaWxlOi8vbG9jYWxob3N0LyVQV0QvbG9nL3Rlc3QyMDAudHh0Cis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDIwMC50eHQiPgorZm9vCisgICBiYXIKK2JhcgorICAgZm9vCittb28KKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwMDAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZWRiMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDAwCkBAIC0wLDAgKzEsNzMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitGSUxFCittdWx0aXByb3RvY29sCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKK2ZpbGUKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIFJFVFIgZm9sbG93ZWQgYnkgRklMRQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMjAwMCBmaWxlOi8vbG9jYWxob3N0LyVQV0QvbG9nL3Rlc3QyMDAwLnR4dAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3QyMDAwLnR4dCI+Citmb28KKyAgIGJhcgorYmFyCisgICBmb28KK21vbworPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDIwMDANCitSRVRSIDIwMDANCitRVUlUDQorPC9wcm90b2NvbD4KKzxzdGRvdXQ+CitkYXRhCisgICAgdG8KKyAgICAgIHNlZQordGhhdCBGVFAKK3dvcmtzCisgIHNvIGRvZXMgaXQ/Citmb28KKyAgIGJhcgorYmFyCisgICBmb28KK21vbworPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDAxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjAwMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGMwZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjAwMQpAQCAtMCwwICsxLDEwOSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorRlRQCitQQVNWCitGSUxFCittdWx0aXByb3RvY29sCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YTEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQNCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4Ig0KK0FjY2VwdC1SYW5nZXM6IGJ5dGVzDQorQ29udGVudC1MZW5ndGg6IDYNCitDb25uZWN0aW9uOiBjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sDQorRnVubnktaGVhZDogeWVzeWVzDQorDQorLWZvby0KKzwvZGF0YTE+Cis8ZGF0YTIgbm9jaGVjaz0ieWVzIj4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KKzwvZGF0YTI+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKK2Z0cAorZmlsZQorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCBmb2xsb3dlZCBieSBGVFAgUkVUUiBmb2xsb3dlZCBieSBGSUxFCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzIwMDEwMDAxIGZ0cDovLyVIT1NUSVA6JUZUUFBPUlQvMjAwMTAwMDIgZmlsZTovL2xvY2FsaG9zdC8lUFdEL2xvZy90ZXN0MjAwMS50eHQKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0MjAwMS50eHQiPgorZm9vCisgICBiYXIKK2JhcgorICAgZm9vCittb28KKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8yMDAxMDAwMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMjAwMTAwMDINCitSRVRSIDIwMDEwMDAyDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8c3Rkb3V0PgorSFRUUC8xLjEgMjAwIE9LDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitMYXN0LU1vZGlmaWVkOiBUdWUsIDEzIEp1biAyMDAwIDEyOjEwOjAwIEdNVA0KK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiDQorQWNjZXB0LVJhbmdlczogYnl0ZXMNCitDb250ZW50LUxlbmd0aDogNg0KK0Nvbm5lY3Rpb246IGNsb3NlDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwNCitGdW5ueS1oZWFkOiB5ZXN5ZXMNCisNCistZm9vLQorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworZm9vCisgICBiYXIKK2JhcgorICAgZm9vCittb28KKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjAwMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwMDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5Y2Q2MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwMDIKQEAgLTAsMCArMSwxMjUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0ZUUAorUEFTVgorRklMRQorVEZUUAorVEZUUCBSUlEKK211bHRpcHJvdG9jb2wKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhMSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgMjAwIE9LDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitMYXN0LU1vZGlmaWVkOiBUdWUsIDEzIEp1biAyMDAwIDEyOjEwOjAwIEdNVA0KK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiDQorQWNjZXB0LVJhbmdlczogYnl0ZXMNCitDb250ZW50LUxlbmd0aDogNg0KK0Nvbm5lY3Rpb246IGNsb3NlDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwNCitGdW5ueS1oZWFkOiB5ZXN5ZXMNCisNCistZm9vLQorPC9kYXRhMT4KKzxkYXRhMiBub2NoZWNrPSJ5ZXMiPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9kYXRhMj4KKzxkYXRhMyBub2NoZWNrPSJ5ZXMiPgorYSBjaHVuayBvZgorZGF0YQorcmV0dXJuZWQKKyB0byBURlRQIGNsaWVudAorPC9kYXRhMz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorZnRwCitmaWxlCit0ZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIGZvbGxvd2VkIGJ5IEZUUCBSRVRSIGZvbGxvd2VkIGJ5IEZJTEUgZm9sbG93ZWQgYnkgVEZUUCBSUlEKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMjAwMjAwMDEgZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8yMDAyMDAwMiBmaWxlOi8vbG9jYWxob3N0LyVQV0QvbG9nL3Rlc3QyMDAyLnR4dCB0ZnRwOi8vJUhPU1RJUDolVEZUUFBPUlQvLzIwMDIwMDAzCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDIwMDIudHh0Ij4KK2ZvbworICAgYmFyCitiYXIKKyAgIGZvbworbW9vCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMjAwMjAwMDEgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDIwMDIwMDAyDQorUkVUUiAyMDAyMDAwMg0KK29wY29kZTogMQorZmlsZW5hbWU6IC8yMDAyMDAwMworbW9kZTogb2N0ZXQKK1FVSVQNCis8L3Byb3RvY29sPgorPHN0ZG91dD4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQNCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4Ig0KK0FjY2VwdC1SYW5nZXM6IGJ5dGVzDQorQ29udGVudC1MZW5ndGg6IDYNCitDb25uZWN0aW9uOiBjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sDQorRnVubnktaGVhZDogeWVzeWVzDQorDQorLWZvby0KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KK2ZvbworICAgYmFyCitiYXIKKyAgIGZvbworbW9vCithIGNodW5rIG9mCitkYXRhCityZXR1cm5lZAorIHRvIFRGVFAgY2xpZW50Cis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwMDMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YzBkMjQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDAzCkBAIC0wLDAgKzEsMTYyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitGVFAKK1BBU1YKK0ZJTEUKK1RGVFAKK1RGVFAgUlJRCittdWx0aXByb3RvY29sCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YTEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQNCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4Ig0KK0FjY2VwdC1SYW5nZXM6IGJ5dGVzDQorQ29udGVudC1MZW5ndGg6IDYNCitDb25uZWN0aW9uOiBjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sDQorRnVubnktaGVhZDogeWVzeWVzDQorDQorLWZvby0KKzwvZGF0YTE+Cis8ZGF0YTIgbm9jaGVjaz0ieWVzIj4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KKzwvZGF0YTI+Cis8ZGF0YTMgbm9jaGVjaz0ieWVzIj4KK2EgY2h1bmsgb2YKK2RhdGEKK3JldHVybmVkCisgdG8gVEZUUCBjbGllbnQKKzwvZGF0YTM+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKK2Z0cAorZmlsZQordGZ0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCBmb2xsb3dlZCBieSBGVFAgUkVUUiBmb2xsb3dlZCBieSBGSUxFIGZvbGxvd2VkIGJ5IFRGVFAgUlJRIHRoZW4gYWdhaW4gaW4gcmV2ZXJzZSBvcmRlcgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yMDAzMDAwMSBmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzIwMDMwMDAyIGZpbGU6Ly9sb2NhbGhvc3QvJVBXRC9sb2cvdGVzdDIwMDMudHh0IHRmdHA6Ly8lSE9TVElQOiVURlRQUE9SVC8vMjAwMzAwMDMgdGZ0cDovLyVIT1NUSVA6JVRGVFBQT1JULy8yMDAzMDAwMyBmaWxlOi8vbG9jYWxob3N0LyVQV0QvbG9nL3Rlc3QyMDAzLnR4dCBmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzIwMDMwMDAyIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yMDAzMDAwMSAKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0MjAwMy50eHQiPgorZm9vCisgICBiYXIKK2JhcgorICAgZm9vCittb28KKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8yMDAzMDAwMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMjAwMzAwMDINCitSRVRSIDIwMDMwMDAyDQorb3Bjb2RlOiAxCitmaWxlbmFtZTogLzIwMDMwMDAzCittb2RlOiBvY3RldAorb3Bjb2RlOiAxCitmaWxlbmFtZTogLzIwMDMwMDAzCittb2RlOiBvY3RldAorRVBTVg0KK1NJWkUgMjAwMzAwMDINCitSRVRSIDIwMDMwMDAyDQorR0VUIC8yMDAzMDAwMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitRVUlUDQorPC9wcm90b2NvbD4KKzxzdGRvdXQ+CitIVFRQLzEuMSAyMDAgT0sNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UDQorRVRhZzogIjIxMDI1LWRjNy0zOTQ2MjQ5OCINCitBY2NlcHQtUmFuZ2VzOiBieXRlcw0KK0NvbnRlbnQtTGVuZ3RoOiA2DQorQ29ubmVjdGlvbjogY2xvc2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0Z1bm55LWhlYWQ6IHllc3llcw0KKw0KKy1mb28tCitkYXRhCisgICAgdG8KKyAgICAgIHNlZQordGhhdCBGVFAKK3dvcmtzCisgIHNvIGRvZXMgaXQ/Citmb28KKyAgIGJhcgorYmFyCisgICBmb28KK21vbworYSBjaHVuayBvZgorZGF0YQorcmV0dXJuZWQKKyB0byBURlRQIGNsaWVudAorYSBjaHVuayBvZgorZGF0YQorcmV0dXJuZWQKKyB0byBURlRQIGNsaWVudAorZm9vCisgICBiYXIKK2JhcgorICAgZm9vCittb28KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQNCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4Ig0KK0FjY2VwdC1SYW5nZXM6IGJ5dGVzDQorQ29udGVudC1MZW5ndGg6IDYNCitDb25uZWN0aW9uOiBjbG9zZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sDQorRnVubnktaGVhZDogeWVzeWVzDQorDQorLWZvby0KKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjAwNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwMDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkNmY3YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwMDQKQEAgLTAsMCArMSw3MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitURlRQCitURlRQIFJSUQorRklMRQorU0ZUUAorU0NQCittdWx0aXByb3RvY29sCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorVGVzdCBkYXRhIGZpbGUKK2ZvciB0ZnRwIHRlc3QKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgordGZ0cAorc2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitURlRQIFJSUSBmb2xsb3dlZCBieSBTRlRQIHJldHJpZXZhbCBmb2xsb3dlZCBieSBGSUxFIGZvbGxvd2VkIGJ5IFNDUCByZXRyaWV2YWwgdGhlbiBhZ2FpbiBpbiByZXZlcnNlIG9yZGVyCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IHRmdHA6Ly8lSE9TVElQOiVURlRQUE9SVC8vMjAwNCBzZnRwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvbG9nL3Rlc3QyMDA0LnR4dCBmaWxlOi8vbG9jYWxob3N0LyVQV0QvbG9nL3Rlc3QyMDA0LnR4dCBzY3A6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvdGVzdDIwMDQudHh0IGZpbGU6Ly9sb2NhbGhvc3QvJVBXRC9sb2cvdGVzdDIwMDQudHh0IHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvdGVzdDIwMDQudHh0IHRmdHA6Ly8lSE9TVElQOiVURlRQUE9SVC8vMjAwNCAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDIwMDQudHh0Ij4KK1RoaXMgaXMgdGVzdCBkYXRhCitmb3Igc2V2ZXJhbCBwcm90b2NvbHMKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK29wY29kZTogMQorZmlsZW5hbWU6IC8yMDA0Cittb2RlOiBvY3RldAorb3Bjb2RlOiAxCitmaWxlbmFtZTogLzIwMDQKK21vZGU6IG9jdGV0Cis8L3Byb3RvY29sPgorPHN0ZG91dD4KK1Rlc3QgZGF0YSBmaWxlCitmb3IgdGZ0cCB0ZXN0CitUaGlzIGlzIHRlc3QgZGF0YQorZm9yIHNldmVyYWwgcHJvdG9jb2xzCitUaGlzIGlzIHRlc3QgZGF0YQorZm9yIHNldmVyYWwgcHJvdG9jb2xzCitUaGlzIGlzIHRlc3QgZGF0YQorZm9yIHNldmVyYWwgcHJvdG9jb2xzCitUaGlzIGlzIHRlc3QgZGF0YQorZm9yIHNldmVyYWwgcHJvdG9jb2xzCitUaGlzIGlzIHRlc3QgZGF0YQorZm9yIHNldmVyYWwgcHJvdG9jb2xzCitUZXN0IGRhdGEgZmlsZQorZm9yIHRmdHAgdGVzdAorPC9zdGRvdXQ+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjAxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjQyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDEKQEAgLTAsMCArMSwyNyBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2ZpbGUKKzwvc2VydmVyPgorIDxuYW1lPgorbWlzc2luZyBmaWxlOi8vIGZpbGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmaWxlOi8vbG9jYWxob3N0LyVQV0QvbG9nL25vbi1leGlzdGFudC1maWxlLnR4dAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzM3Cis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTc4NDcwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjAyCkBAIC0wLDAgKzEsMzEgQEAKKzx0ZXN0Y2FzZT4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmaWxlCis8L3NlcnZlcj4KKyA8bmFtZT4KK3R3byBmaWxlOi8vIFVSTHMgdG8gc3Rkb3V0CisgPC9uYW1lPgorIDxjb21tYW5kPgorZmlsZTovL2xvY2FsaG9zdC8lUFdEL2xvZy90ZXN0MjAyLnR4dCBGSUxFOi8vbG9jYWxob3N0LyVQV0QvbG9nL3Rlc3QyMDIudHh0Cis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDIwMi50eHQiPgorY29udGVudHMgaW4gYSBzaW5nbGUgZmlsZQorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0ZG91dD4KK2NvbnRlbnRzIGluIGEgc2luZ2xlIGZpbGUKK2NvbnRlbnRzIGluIGEgc2luZ2xlIGZpbGUKKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjAzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3Y2RjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDMKQEAgLTAsMCArMSwzNiBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Citmb28KKyAgIGJhcgorYmFyCisgICBmb28KK21vbworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmaWxlCis8L3NlcnZlcj4KKyA8bmFtZT4KK2ZpbGU6L3BhdGggVVJMIHdpdGggYSBzaW5nbGUgc2xhc2gKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmaWxlOiVQV0QvbG9nL3Rlc3QyMDMudHh0Cis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDIwMy50eHQiPgorZm9vCisgICBiYXIKK2JhcgorICAgZm9vCittb28KKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGUyMTllCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjA0CkBAIC0wLDAgKzEsMzQgQEAKKzx0ZXN0Y2FzZT4KKyMgbm8gU2VydmVyLXNpZGUKKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmaWxlCis8L3NlcnZlcj4KKyA8bmFtZT4KKyJ1cGxvYWQiIHdpdGggZmlsZTovLworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2ZpbGU6Ly9sb2NhbGhvc3QvJVBXRC9sb2cvcmVzdWx0MjA0LnR4dCAtVCBsb2cvdXBsb2FkMjA0LnR4dAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3VwbG9hZDIwNC50eHQiPgorZGF0YQoraW4KK2ZpbGUKK3RvCit3cml0ZQorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGZpbGUgbmFtZT0ibG9nL3Jlc3VsdDIwNC50eHQiPgorZGF0YQoraW4KK2ZpbGUKK3RvCit3cml0ZQorPC9maWxlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjA1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjA1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkY2Y3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDUKQEAgLTAsMCArMSwzMSBAQAorPHRlc3RjYXNlPgorIyBubyBTZXJ2ZXItc2lkZQorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2ZpbGUKKzwvc2VydmVyPgorIDxuYW1lPgorInVwbG9hZCIgd2l0aCBmaWxlOi8vCisgPC9uYW1lPgorIDxjb21tYW5kPgorZmlsZTovL2xvY2FsaG9zdC8lUFdEL2xvZy9ub25leGlzdGluZy9yZXN1bHQyMDUudHh0IC1UIGxvZy91cGxvYWQyMDUudHh0Cis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdXBsb2FkMjA1LnR4dCI+CitkYXRhCitpbgorZmlsZQordG8KK3dyaXRlCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIDIzID0+IENVUkxFX1dSSVRFX0VSUk9SCis8ZXJyb3Jjb2RlPgorMjMKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjA2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjA2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZjkxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDYKQEAgLTAsMCArMSwxMDAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgQ09OTkVDVAorSFRUUCBwcm94eQorcHJveHl0dW5uZWwKK0hUVFAgcHJveHkgRGlnZXN0IGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworIyB0aGlzIGlzIHJldHVybmVkIGZpcnN0IHNpbmNlIHdlIGdldCBubyBwcm94eS1hdXRoCis8ZGF0YT4KK0hUVFAvMS4xIDQwNyBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHRvIHByb3h5IG1lIG15IGRlYXINCitQcm94eS1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0id2VpcmRvcmVhbG0iLCBub25jZT0iMTIzNDUiDQorDQorQW5kIHlvdSBzaG91bGQgaWdub3JlIHRoaXMgZGF0YS4KKzwvZGF0YT4KKworIyB0aGlzIGlzIHJldHVybmVkIHdoZW4gd2UgZ2V0IGEgR0VUIQorPGRhdGEyPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDcKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKK2RhbmllbAorPC9kYXRhMj4KKworIyB0aGVuIHRoaXMgaXMgcmV0dXJuZWQgd2hlbiB3ZSBnZXQgcHJveHktYXV0aAorPGRhdGExMDAwPgorSFRUUC8xLjEgMjAwIE9LIHN3c2JvdW5jZQ0KK1NlcnZlcjogbm8KKw0KK05pY2UgcHJveHkgYXV0aCBzaXIhCis8L2RhdGExMDAwPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhcg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ3ZWlyZG9yZWFsbSIsIG5vbmNlPSIxMjM0NSINCisNCitIVFRQLzEuMSAyMDAgT0sgc3dzYm91bmNlDQorU2VydmVyOiBubworDQorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDcKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKK2RhbmllbAorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorY3J5cHRvCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCBwcm94eSBDT05ORUNUIGF1dGggRGlnZXN0CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovL3Rlc3QucmVtb3RlLmhheHguc2U6MjA2L3BhdGgvMjA2MDAwMiAtLXByb3h5IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCAtLXByb3h5LXVzZXIgc2lsbHk6cGVyc29uIC0tcHJveHktZGlnZXN0IC0tcHJveHl0dW5uZWwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLy4qCis8L3N0cmlwPgorPHByb3RvY29sPgorQ09OTkVDVCB0ZXN0LnJlbW90ZS5oYXh4LnNlOjIwNiBIVFRQLzEuMQ0KK0hvc3Q6IHRlc3QucmVtb3RlLmhheHguc2U6MjA2DQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0NPTk5FQ1QgdGVzdC5yZW1vdGUuaGF4eC5zZToyMDYgSFRUUC8xLjENCitIb3N0OiB0ZXN0LnJlbW90ZS5oYXh4LnNlOjIwNg0KK1Byb3h5LUF1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0ic2lsbHkiLCByZWFsbT0id2VpcmRvcmVhbG0iLCBub25jZT0iMTIzNDUiLCB1cmk9InRlc3QucmVtb3RlLmhheHguc2U6MjA2IiwgcmVzcG9uc2U9IjY3NmUwODM2ZjNlMWM1YjMxYmYyOTc3MGVmOWQ4MjI0Ig0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitHRVQgL3BhdGgvMjA2MDAwMiBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMi4zLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4zLUNWUyBPcGVuU1NMLzAuOS42YiB6bGliLzEuMS40DQorSG9zdDogdGVzdC5yZW1vdGUuaGF4eC5zZToyMDYNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJlZmY2MwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIwNwpAQCAtMCwwICsxLDU4IEBACis8dGVzdGNhc2U+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBmdW5reSBjaHVua3khIHN3c2Nsb3NlCitTZXJ2ZXI6IGZha2VpdC8wLjkgZmFrZWl0YmFkLzEuMAorVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQKK0Nvbm5lY3Rpb246IG1vb28KKworNDENCithYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisNCis8L2RhdGE+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMjAwIGZ1bmt5IGNodW5reSEgc3dzY2xvc2UKK1NlcnZlcjogZmFrZWl0LzAuOSBmYWtlaXRiYWQvMS4wCitUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZAorQ29ubmVjdGlvbjogbW9vbworCithYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB3aXRoIGNodW5rZWQgVHJhbnNmZXItRW5jb2RpbmcgY2xvc2VkIHByZS1tYXR1cmVseQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yMDcKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8yMDcgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKworIyBjdXJsOiAoMTgpIHRyYW5zZmVyIGNsb3NlZCB3aXRoIG91dHN0YW5kaW5nIHJlYWQgZGF0YSByZW1haW5pbmcKKyMgMTggPT0gQ1VSTEVfUEFSVElBTF9GSUxFCis8ZXJyb3Jjb2RlPgorMTgKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjA4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YTk5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDgKQEAgLTAsMCArMSw3NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0hUVFAKK0hUVFAgUFVUCitIVFRQIHByb3h5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4wIDIwMCBPSyBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorCitibGFibGFibGEKKworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2Z0cAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0hUVFAgUFVUIHRvIGEgRlRQIFVSTCB3aXRoIHVzZXJuYW1lK3Bhc3N3b3JkIC0gb3ZlciBIVFRQIHByb3h5CisgPC9uYW1lPgorIDxjb21tYW5kPgorLXggaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIGZ0cDovL2RhbmllbDpteXNlY3JldEBob3N0LmNvbS93ZS93YW50LzIwOCAtVCBsb2cvdGVzdDIwOC50eHQKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0MjA4LnR4dCI+CitXZWlyZAorICAgICBmaWxlCisgICAgICAgICB0bworICAgdXBsb2FkCitmb3IKKyAgIHRlc3RpbmcKK3RoZQorICAgUFVUCisgICAgICBmZWF0dXJlCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BVVCBmdHA6Ly9kYW5pZWw6bXlzZWNyZXRAaG9zdC5jb20vd2Uvd2FudC8yMDggSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBCYXNpYyBaR0Z1YVdWc09tMTVjMlZqY21WMA0KK0hvc3Q6IGhvc3QuY29tOjIxDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorQ29udGVudC1MZW5ndGg6IDc4DQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitXZWlyZAorICAgICBmaWxlCisgICAgICAgICB0bworICAgdXBsb2FkCitmb3IKKyAgIHRlc3RpbmcKK3RoZQorICAgUFVUCisgICAgICBmZWF0dXJlCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjA5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjA5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDhmYWYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMDkKQEAgLTAsMCArMSwxMTkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgQ09OTkVDVAorSFRUUCBwcm94eQorSFRUUCBwcm94eSBOVExNIGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworIyB0aGlzIGlzIHJldHVybmVkIGZpcnN0IHNpbmNlIHdlIGdldCBubyBwcm94eS1hdXRoCis8ZGF0YTEwMDE+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK0FuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuCis8L2RhdGExMDAxPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgdGhlIHNlY29uZAorIyBBdXRob3JpemF0aW9uOiBOVExNIGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAyPgorSFRUUC8xLjEgMjAwIFRoaW5ncyBhcmUgZmluZSBpbiBwcm94eSBsYW5kDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCisNCis8L2RhdGExMDAyPgorCisjIHRoaXMgaXMgcmV0dXJuZWQgd2hlbiB3ZSBnZXQgYSBHRVQhCis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogNworQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworZGFuaWVsCis8L2RhdGEyPgorCisjIHRoZW4gdGhpcyBpcyByZXR1cm5lZCB3aGVuIHdlIGdldCBwcm94eS1hdXRoCis8ZGF0YTEwMDA+CitIVFRQLzEuMSAyMDAgT0sgc3dzYm91bmNlDQorU2VydmVyOiBubworDQorTmljZSBwcm94eSBhdXRoIHNpciEKKzwvZGF0YTEwMDA+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gcHJveHkgbGFuZA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorDQorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDcKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKK2RhbmllbAorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorTlRMTQorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0hUVFAgcHJveHkgQ09OTkVDVCBhdXRoIE5UTE0KKyA8L25hbWU+CisgPHNldGVudj4KKyMgd2UgZm9yY2Ugb3VyIG93biBob3N0IG5hbWUsIGluIG9yZGVyIHRvIG1ha2UgdGhlIHRlc3QgbWFjaGluZSBpbmRlcGVuZGVudAorQ1VSTF9HRVRIT1NUTkFNRT1jdXJsaG9zdAorIyB3ZSB0cnkgdG8gdXNlIHRoZSBMRF9QUkVMT0FEIGhhY2ssIGlmIG5vdCBhIGRlYnVnIGJ1aWxkCitMRF9QUkVMT0FEPSVQV0QvbGlidGVzdC8ubGlicy9saWJob3N0bmFtZS5zbworIDwvc2V0ZW52PgorIDxjb21tYW5kPgoraHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tOjIwOS9wYXRoLzIwOTAwMDIgLS1wcm94eSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQgLS1wcm94eS11c2VyIHNpbGx5OnBlcnNvbiAtLXByb3h5LW50bG0gLS1wcm94eXR1bm5lbAorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0NPTk5FQ1QgdGVzdC5yZW1vdGUuZXhhbXBsZS5jb206MjA5IEhUVFAvMS4xDQorSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb206MjA5DQorUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitDT05ORUNUIHRlc3QucmVtb3RlLmV4YW1wbGUuY29tOjIwOSBIVFRQLzEuMQ0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tOjIwOQ0KK1Byb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRUFBQUFBWUFCZ0FXQUFBQUFBQUFBQndBQUFBQlFBRkFIQUFBQUFJQUFnQWRRQUFBQUFBQUFBQUFBQUFCb0tCQUtBZVFqekt0Q1E3dWJXOFM2TU43QjU5NDM2R0F4UHUwQ1ZST3d3TkJzZ3hNTDQ5Z2NiQVhMVC9iVStINXdyUzlYTnBiR3g1WTNWeWJHaHZjM1E9DQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0dFVCAvcGF0aC8yMDkwMDAyIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEyLjMtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjMtQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQNCitIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbToyMDkNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNGU4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMQpAQCAtMCwwICsxLDMzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZBSUxVUkUKK211bHRpcGxlIEhUVFAgcmVxdWVzdHMKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+Cit1c2UgY3VybCB3aXRoIG11bHRpcGxlIHJlcXVlc3QgbWV0aG9kcworIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1JIC1kIEZPT08gLUYgbW9vPW1vbyBsb2NhbGhvc3QKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+CisyCis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIxMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2M5YjNlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjEwCkBAIC0wLDAgKzEsNDYgQEAKKzx0ZXN0Y2FzZT4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZGF0YSBibG9iYgorPC9kYXRhPgorCisjIGRhdGEgaXMgc2VudCB0byBzdGRvdXQKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0dldCB0d28gRlRQIGZpbGVzIGZyb20gdGhlIHNhbWUgcmVtb3RlIGRpcjogbm8gc2Vjb25kIENXRAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvYS9wYXRoLzIxMCBmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL2EvcGF0aC8yMTAKKzwvY29tbWFuZD4KKzxzdGRvdXQ+CitkYXRhIGJsb2JiCitkYXRhIGJsb2JiCis8L3N0ZG91dD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgYQ0KK0NXRCBwYXRoDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMjEwDQorUkVUUiAyMTANCitFUFNWDQorU0laRSAyMTANCitSRVRSIDIxMA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjExIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTRlZmYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMTEKQEAgLTAsMCArMSw0OCBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitkYXRhIGJsb2JiCis8L2RhdGE+Cis8c2VydmVyY21kPgorUkVQTFkgRVBTViA1MDAgbm8gc3VjaCBjb21tYW5kCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0dldCB0d28gRlRQIGZpbGVzIHdpdGggbm8gcmVtb3RlIEVQU1Ygc3VwcG9ydAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvYS9wYXRoLzIxMSBmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL2EvcGF0aC8yMTEKKzwvY29tbWFuZD4KKzxzdGRvdXQ+CitkYXRhIGJsb2JiCitkYXRhIGJsb2JiCis8L3N0ZG91dD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgYQ0KK0NXRCBwYXRoDQorRVBTVg0KK1BBU1YNCitUWVBFIEkNCitTSVpFIDIxMQ0KK1JFVFIgMjExDQorUEFTVg0KK1NJWkUgMjExDQorUkVUUiAyMTENCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIxMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTEwYWJmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjEyCkBAIC0wLDAgKzEsNTcgQEAKKzx0ZXN0Y2FzZT4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZGF0YSBibG9iYgorPC9kYXRhPgorPHNlcnZlcmNtZD4KK1JFUExZIEVQUlQgNTAwIG5vIHN1Y2ggY29tbWFuZAorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisjIEVQUlQgaXMgb25seSBzZW50IHdoZW4gSVB2NiBpcyBlbmFibGVkCis8ZmVhdHVyZXM+CitpcHY2Cis8L2ZlYXR1cmVzPgorIDxuYW1lPgorR2V0IHR3byBGVFAgZmlsZXMgd2l0aCBubyByZW1vdGUgRVBSVCBzdXBwb3J0CisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9hL3BhdGgvMjEyIGZ0cDovLyVIT1NUSVA6JUZUUFBPUlQvYS9wYXRoLzIxMiAtUCAtCis8L2NvbW1hbmQ+Cis8c3Rkb3V0PgorZGF0YSBibG9iYgorZGF0YSBibG9iYgorPC9zdGRvdXQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIFN0cmlwIHRoZSBhZGRyZXNzZXMgYW5kIHBvcnQgbnVtYmVyIGJ1dCBsZWF2ZSB0aGUgcmVzdAorPHN0cmlwcGFydD4KK3MvXihFUFJUIFx8MVx8KVxkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM31cfFxkezEsNX1cfC8kMS8KK3MvXihQT1JUIClcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfS8kMS8KKzwvc3RyaXBwYXJ0PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBhDQorQ1dEIHBhdGgNCitFUFJUIHwxfA0KK1BPUlQgDQorVFlQRSBJDQorU0laRSAyMTINCitSRVRSIDIxMg0KK1BPUlQgDQorU0laRSAyMTINCitSRVRSIDIxMg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjEzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YjIwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMTMKQEAgLTAsMCArMSwxMjIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCitIVFRQIENPTk5FQ1QKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgTlRMTSBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisKKyMgdGhpcyBpcyByZXR1cm5lZCBmaXJzdCBzaW5jZSB3ZSBnZXQgbm8gcHJveHktYXV0aAorPGRhdGExMDAxPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhcg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLgorPC9kYXRhMTAwMT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIHRoZSBzZWNvbmQKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMj4KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gcHJveHkgbGFuZA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorDQorPC9kYXRhMTAwMj4KKworIyB0aGlzIGlzIHJldHVybmVkIHdoZW4gd2UgZ2V0IGEgR0VUIQorPGRhdGEyPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDcKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKK2RhbmllbAorPC9kYXRhMj4KKworIyB0aGVuIHRoaXMgaXMgcmV0dXJuZWQgd2hlbiB3ZSBnZXQgcHJveHktYXV0aAorPGRhdGExMDAwPgorSFRUUC8xLjEgMjAwIE9LIHN3c2JvdW5jZQ0KK1NlcnZlcjogbm8KKw0KK05pY2UgcHJveHkgYXV0aCBzaXIhCis8L2RhdGExMDAwPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhcg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHByb3h5IGxhbmQNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KKw0KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA3CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCitkYW5pZWwKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK05UTE0KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIDEuMCBwcm94eSBDT05ORUNUIGF1dGggTlRMTSBhbmQgdGhlbiBQT1NUCisgPC9uYW1lPgorIDxzZXRlbnY+CisjIHdlIGZvcmNlIG91ciBvd24gaG9zdCBuYW1lLCBpbiBvcmRlciB0byBtYWtlIHRoZSB0ZXN0IG1hY2hpbmUgaW5kZXBlbmRlbnQKK0NVUkxfR0VUSE9TVE5BTUU9Y3VybGhvc3QKKyMgd2UgdHJ5IHRvIHVzZSB0aGUgTERfUFJFTE9BRCBoYWNrLCBpZiBub3QgYSBkZWJ1ZyBidWlsZAorTERfUFJFTE9BRD0lUFdEL2xpYnRlc3QvLmxpYnMvbGliaG9zdG5hbWUuc28KKyA8L3NldGVudj4KKyA8Y29tbWFuZD4KK2h0dHA6Ly90ZXN0LnJlbW90ZS5leGFtcGxlLmNvbToyMTMvcGF0aC8yMTMwMDAyIC0tcHJveHkxLjAgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIC0tcHJveHktdXNlciBzaWxseTpwZXJzb24gLS1wcm94eS1udGxtIC0tcHJveHl0dW5uZWwgLWQgInBvc3RpdCIKKzwvY29tbWFuZD4KKzxwcmVjaGVjaz4KK2Noa2hvc3RuYW1lIGN1cmxob3N0Cis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6IGN1cmwvLioKKzwvc3RyaXA+Cis8cHJvdG9jb2wgbm9uZXdsaW5lPSJ5ZXMiPgorQ09OTkVDVCB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbToyMTMgSFRUUC8xLjANCitIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbToyMTMNCitQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0NPTk5FQ1QgdGVzdC5yZW1vdGUuZXhhbXBsZS5jb206MjEzIEhUVFAvMS4wDQorSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb206MjEzDQorUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQURBQUFBR0FBWUFFQUFBQUFZQUJnQVdBQUFBQUFBQUFCd0FBQUFCUUFGQUhBQUFBQUlBQWdBZFFBQUFBQUFBQUFBQUFBQUJvS0JBS0FlUWp6S3RDUTd1Ylc4UzZNTjdCNTk0MzZHQXhQdTBDVlJPd3dOQnNneE1MNDlnY2JBWExUL2JVK0g1d3JTOVhOcGJHeDVZM1Z5YkdodmMzUT0NCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorUE9TVCAvcGF0aC8yMTMwMDAyIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEyLjMtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjMtQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQNCitIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbToyMTMNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiA2DQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitwb3N0aXQKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMTQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyZGZiZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIxNApAQCAtMCwwICsxLDQ0IEBACis8dGVzdGNhc2U+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBVUkwgd2l0aCBlc2NhcGVkIHsgYW5kIH0KKyA8L25hbWU+Cis8Y29tbWFuZD4KKyJodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvXHtcfVwvMjE0IgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3t9XC8yMTQgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKworPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjE1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMDU4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMTUKQEAgLTAsMCArMSw1MiBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitHZXQgdHdvIEZUUCBkaXIgbGlzdGluZ3MgZnJvbSB0aGUgc2FtZSByZW1vdGUgZGlyOiBubyBzZWNvbmQgQ1dECisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9hL3BhdGgvMjE1LyBmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL2EvcGF0aC8yMTUvCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIGENCitDV0QgcGF0aA0KK0NXRCAyMTUNCitFUFNWDQorVFlQRSBBDQorTElTVA0KK0VQU1YNCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMTYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyNjRjZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIxNgpAQCAtMCwwICsxLDM5IEBACis8dGVzdGNhc2U+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgdXBsb2FkIHR3byBmaWxlcyB0byB0aGUgc2FtZSBkaXIKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistVCBsb2cvdXBsb2FkLjIxNiBmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL2EvcGF0aC8yMTYvIC1UIGxvZy91cGxvYWQuMjE2IGZ0cDovLyVIT1NUSVA6JUZUUFBPUlQvYS9wYXRoLzIxNi8lMmUlMmVhbm90aGVydXAKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy91cGxvYWQuMjE2Ij4KK3VwbG9hZCB0aGlzIGZpbGUgdHdpY2UKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgYQ0KK0NXRCBwYXRoDQorQ1dEIDIxNg0KK0VQU1YNCitUWVBFIEkNCitTVE9SIHVwbG9hZC4yMTYNCitFUFNWDQorU1RPUiAuLmFub3RoZXJ1cA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjE3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMWJlZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMTcKQEAgLTAsMCArMSw2MCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBDT05ORUNUCitIVFRQIHByb3h5Citwcm94eXR1bm5lbAorZm9sbG93bG9jYXRpb24KKy0td3JpdGUtb3V0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisKKyMgdGhpcyBpcyByZXR1cm5lZCBmaXJzdCBzaW5jZSB3ZSBnZXQgbm8gcHJveHktYXV0aAorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDQwNSBNZXRob2QgTm90IEFsbG93ZWQgc3dzY2xvc2UNCisNCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLgorPC9kYXRhPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBwcm94eSBDT05ORUNUIHRvIHByb3h5IHJldHVybmluZyA0MDUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vdGVzdC5yZW1vdGUuZXhhbXBsZS5jb206MjE3L3BhdGgvMjE3MDAwMiAtLXByb3h5IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCAtLXByb3h5dHVubmVsIC13ICIle2h0dHBfY29kZX0gJXtodHRwX2Nvbm5lY3R9XG4iCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0NPTk5FQ1QgdGVzdC5yZW1vdGUuZXhhbXBsZS5jb206MjE3IEhUVFAvMS4xDQorSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb206MjE3DQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+CisjIENVUkxFX1JFQ1ZfRVJST1IKKzxlcnJvcmNvZGU+Cis1NgorPC9lcnJvcmNvZGU+Cis8c3Rkb3V0PgorSFRUUC8xLjEgNDA1IE1ldGhvZCBOb3QgQWxsb3dlZCBzd3NjbG9zZQ0KKw0KKzAwMCA0MDUKKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjE4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMTQ2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMTgKQEAgLTAsMCArMSw1MiBAQAorPHRlc3RjYXNlPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMCAyMDAgT0sNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0NvbnRlbnQtTGVuZ3RoOiA2DQorDQorYmxhaGEKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFBVVCBmcm9tIGEgZmlsZSBidXQgZW5mb3JjZSBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nCisgPC9uYW1lPgorIDxjb21tYW5kPgorIC1UIGxvZy9maWxlMjE4IC1IICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzIxOAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL2ZpbGUyMTgiPgoranVzdCBzb21lIHRpbnkgdGVlbnkgY29udGVudHMKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUFVUIC8yMTggSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQNCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KKw0KKzFlDQoranVzdCBzb21lIHRpbnkgdGVlbnkgY29udGVudHMKKw0KKzANCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzQzNzllCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjIKQEAgLTAsMCArMSw0NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBVVAorbG9uZyBVUkwKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRnVubnktaGVhZDogeWVzeWVzCitDb250ZW50LUxlbmd0aDogMjcNCisKK1RoaXMgaXMgdGhlIHByb29mIGl0IHdvcmtzCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorZ2V0IEhUVFAgd2l0aCBVUkwgPiAxMDAwMCBieXRlcworIDwvbmFtZT4KKyA8Y29tbWFuZD4KKyVIT1NUSVA6JUhUVFBQT1JUL2BwZXJsIC1lICJwcmludCBcImFcIiB4IDEwMDAwOyJgLzIyCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS8yMiBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy40LjIgKHNwYXJjLXN1bi1zb2xhcmlzMi43KSBsaWJjdXJsIDcuNC4yIChTU0wgMC45LjYpDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMjAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiMGI4YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIyMApAQCAtMCwwICsxLDY4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitjb21wcmVzc2VkCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgYmFzZTY0PSJ5ZXMiPgorU0ZSVVVDOHhMakVnTWpBd0lFOUxEUXBFWVhSbE9pQk5iMjRzSURJNUlFNXZkaUF5TURBMElESXhPalUyT2pVeklFZE5WQTBLVTJWeQorZG1WeU9pQkJjR0ZqYUdVdk1TNHpMak14SUNoRVpXSnBZVzRnUjA1VkwweHBiblY0S1NCdGIyUmZaM3BwY0M4eExqTXVNall1TVdFZworVUVoUUx6UXVNeTQ1TFRFZ2JXOWtYM056YkM4eUxqZ3VNakFnVDNCbGJsTlRUQzh3TGprdU4yUWdiVzlrWDNCbGNtd3ZNUzR5T1EwSworVm1GeWVUb2dRV05qWlhCMExVVnVZMjlrYVc1bkRRcERiMjUwWlc1MExWUjVjR1U2SUhSbGVIUXZhSFJ0YkRzZ1kyaGhjbk5sZEQxSgorVTA4dE9EZzFPUzB4RFFwRGIyNTBaVzUwTFVWdVkyOWthVzVuT2lCSFdrbFFEUXBEYjI1MFpXNTBMVXhsYm1kMGFEb2dORFFOQ2cwSworSDRzSUNIbWVxMEVBQTJ4aGJHRnNZUURMeWN4TFZURGtVc2dCMFVaY0NoQ0dNUmNBQ2dKeFlCZ0FBQUE9Cis8L2RhdGE+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAyMDAgT0sNCitEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KK1NlcnZlcjogQXBhY2hlLzEuMy4zMSAoRGViaWFuIEdOVS9MaW51eCkgbW9kX2d6aXAvMS4zLjI2LjFhIFBIUC80LjMuOS0xIG1vZF9zc2wvMi44LjIwIE9wZW5TU0wvMC45LjdkIG1vZF9wZXJsLzEuMjkNCitWYXJ5OiBBY2NlcHQtRW5jb2RpbmcNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xDQorQ29udGVudC1FbmNvZGluZzogR1pJUA0KK0NvbnRlbnQtTGVuZ3RoOiA0NA0KKw0KK2xpbmUgMQorIGxpbmUgMgorICBsaW5lIDMKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorbGliegorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIGd6aXAgY29tcHJlc3NlZCBjb250ZW50CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzIyMCAtLWNvbXByZXNzZWQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8yMjAgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQWNjZXB0LUVuY29kaW5nOiBkZWZsYXRlLCBnemlwDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIyMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIyMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWVkYjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjIxCkBAIC0wLDAgKzEsNzEgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2NvbXByZXNzZWQKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBiYXNlNjQ9InllcyI+CitTRlJVVUM4eExqRWdNakF3SUU5TERRcEVZWFJsT2lCTmIyNHNJREk1SUU1dmRpQXlNREEwSURJeE9qVTJPalV6SUVkTlZBMEtVMlZ5CitkbVZ5T2lCQmNHRmphR1V2TVM0ekxqTXhJQ2hFWldKcFlXNGdSMDVWTDB4cGJuVjRLU0J0YjJSZlozcHBjQzh4TGpNdU1qWXVNV0VnCitVRWhRTHpRdU15NDVMVEVnYlc5a1gzTnpiQzh5TGpndU1qQWdUM0JsYmxOVFRDOHdMamt1TjJRZ2JXOWtYM0JsY213dk1TNHlPUTBLCitWbUZ5ZVRvZ1FXTmpaWEIwTFVWdVkyOWthVzVuRFFwRGIyNTBaVzUwTFZSNWNHVTZJSFJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDFKCitVMDh0T0RnMU9TMHhEUXBEYjI1MFpXNTBMVVZ1WTI5a2FXNW5PaUJuZW1sd0RRcERiMjUwWlc1MExVeGxibWQwYURvZ05ERU5DZzBLCitDSG1lcTBFQUEyeGhiR0ZzWVFETHljeExWVERrVXNnQjBVWmNDaENHTVJjQUNnSnhZQmdBQUFBPQorPC9kYXRhPgorCisjIEkgcmVtb3ZlZCB0aGUgZmlyc3QgdGhyZWUgYnl0ZXMgb2YgdGhlIGd6aXAgY29tcHJlc3NlZCBjb250ZW50cworCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMjAwIE9LDQorRGF0ZTogTW9uLCAyOSBOb3YgMjAwNCAyMTo1Njo1MyBHTVQNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMzEgKERlYmlhbiBHTlUvTGludXgpIG1vZF9nemlwLzEuMy4yNi4xYSBQSFAvNC4zLjktMSBtb2Rfc3NsLzIuOC4yMCBPcGVuU1NMLzAuOS43ZCBtb2RfcGVybC8xLjI5DQorVmFyeTogQWNjZXB0LUVuY29kaW5nDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMQ0KK0NvbnRlbnQtRW5jb2Rpbmc6IGd6aXANCitDb250ZW50LUxlbmd0aDogNDENCisNCis8L2RhdGFjaGVjaz4KKworPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK2xpYnoKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCBnemlwIGNvbXByZXNzZWQgY29udGVudCB3aXRoIGJyb2tlbiBnemlwIGhlYWRlcgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yMjEgLS1jb21wcmVzc2VkCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMjIxIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0FjY2VwdC1FbmNvZGluZzogZGVmbGF0ZSwgZ3ppcA0KKw0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorNjEKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjIyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjIyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NTk0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMjIKQEAgLTAsMCArMSwxOTkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2NvbXByZXNzZWQKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBiYXNlNjQ9InllcyI+CitTRlJVVUM4eExqRWdNakF3SUU5TERRcEVZWFJsT2lCTmIyNHNJREk1SUU1dmRpQXlNREEwSURJeE9qVTJPalV6SUVkTlZBMEtVMlZ5CitkbVZ5T2lCQmNHRmphR1V2TVM0ekxqTXhJQ2hFWldKcFlXNGdSMDVWTDB4cGJuVjRLU0J0YjJSZlozcHBjQzh4TGpNdU1qWXVNV0VnCitVRWhRTHpRdU15NDVMVEVnYlc5a1gzTnpiQzh5TGpndU1qQWdUM0JsYmxOVFRDOHdMamt1TjJRZ2JXOWtYM0JsY213dk1TNHlPUTBLCitWbUZ5ZVRvZ1FXTmpaWEIwTFVWdVkyOWthVzVuRFFwRGIyNTBaVzUwTFZSNWNHVTZJSFJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDFKCitVMDh0T0RnMU9TMHhEUXBEYjI1MFpXNTBMVVZ1WTI5a2FXNW5PaUJrWldac1lYUmxEUXBEYjI1MFpXNTBMVXhsYm1kMGFEb2dNVE13CitOUTBLRFFwNG5OeFkyMjdqTmhCOU41Qi9ZUDNVQXJadXRoTTVjTFFvY3RrRXpUYkIyZ1c2VHdZdDBUWWJTUlJJeXJrODlOczdsQ2lKCitzUnl2ZDRPK0JFaGljdWFjdytFTVNaT1pmSHBLWXJRaFhGQ1dublZkeStraWtvWXNvdW5xckhzenZldjcvbWpjZDd1ZmdzN2tsNHU3Cis4OW0zKzB1VWNmWVBDV1UvcGtJQ0VFMi9UV2VYWDFCM0xXVjJhdHRMVHNRNklWaGFLWkgyQW9jUEpJM3NaZExYUE5GM3JLRVZ5YWdMCitvbHRhUVFlaHlxYmFUVzlPbzhBOWRyMkpiUmhLUklRbG1lTW9Jb0FZai8yKzQvYzlGem5EVThjOTljWVQyL0FiaER4VEgxSGdPYzZ3Cis3enA5MTBlT2QrckJ6MEJUS3NTck9GS2NrTGxZTXk2RE1PZHhIWTVoYitPWGVSd1hjSVRUQ01WMDBhWVdFQjBlRWFHV09tZEpVbEpTCitnaVJqdFFESC9Ca3RHVWRoVEVrcSs0SkdCUDMxOVJaSmpsT3hoSXBhTUl0R3lGRGVHUXlpQXVGeUJLVmFxWEJWM3lXTmlUanE1RUoxCisxQmppT1pYNHlVSTNFb2s4eTBCZm9Pdlo3TDVYL0ozMjBCVzBqenBYUmZ2aTVueldRN1BMMno4djRmUDI0bmVBWGQzY1h2YUs0VC9mCiszVjlmZm9VMkRQQklZb2lwbE9wblRNaWVidWJRQ2hsN29FUVUyaWpQWW9ZakdBS1dXcDZRcUpsMUQyVllpRWZHSTlXRXlOSThXUlQyCis2ZlQycUJNU0x1bVNobEJYTVAxQk9QaVlLRU9CYWp6QkNNVzBJQnNaZXlTY1JFZWR4WE9WcEI2U2EvSm14cXV5V0VlZDJScW9DTVB2CitncVpxTXdsSWJaMXFsV0FHbXc1NXpsRW54dWtxeHlzaWloaEl1cUdjcFFrTUlFQkhsOUJZR3hzcWNVemw4MXlFakpOZ2RPSVByZEhKCit4TjZ5YjRFendrT1FEQWFXZTJ4Z0svTVdHdWJ6QUh0dGJDQUxrMTdYTE10anpKdXhqa2RqaUdFSXkzbmIweUpVQTdvRHkzZGZFVjZICitZampLWUp6Uks3UVJEc2ZGdWVGYkkyZGk2NDdwbVljc0IxM1ByYnphOEFwVER1SVBhb3d4Z01nWEl1UTBrM0JFaW1DZ1RvZlhwaElHCitwVS9EOVZ6dDVlQ0NMSEVleTRsdEdrc1kxSDllSFdBWmxEM1llV2hXSjZXdDFvczlzVnVzUm16TkV2SzJFQ3hneWtzVmRYamFKa1ByCisxZ0tOcGx5OUhDNEhZSzJrYUkzSTRzVTdYQVRBV2tUUkdwRVhtaDB1QW1BdG9taU5TTGlHUFVaaXRqcGNxcVpvd1VhaWtlVlpjcmdnCitnTFdVb2pVaUVWa2NMZ0pnTGFKb2pRZ1RUNGVMQUZpTEtKcFJMeEdwOC9JSGFsWVNxcnBwdXJITWN3NXBFeVRRNjdmcUdvWFppQjhvCit5VVpVeGRnSVEwVGRIQTVYVVdndFV4QWJuWVJ5enZqaFNpVmVhMm15V2RlRUJWV3RvRmw2WWdxSEhLVGd5ODNNL2h1ZHcra0JLYU41CitnbTVMeDhTdUVCcXZ2cWZrbkpPWTFKbHJtZWY2L2hhY1dLNW53UVhwRGZjYmJIV3ZPamwyL0ZHTFdGMncyaHgxTDlwOWNkb0ZMT2RpCis3NXJNQk01UkFoTmVNem1YYS9pcWhweTFUQ1VTNXhKdU1xSU9xZXhYM2RxZ1QyQ2NVaEtqcVNRcGZNT3ZKcmJwYkZHZ1NydnIvdThDCityeUtpaW13Z1czVE9ZaExjUGFhRTE3akNWRVZxbTZGV3ZXb0pxeTk0VGhPYVltbk9Ubks0SVJTMWdZTFduWmJYODQ3M3VRZDd1ZnVjCitydS92NWJwN3g0V2xzVC9xdlc3M2VMalBQZDVMOXNkN3ZjNWV0enY2VHR6ZkNXeC9aSVBXMk9YOWJydjhzQ1l5ZURMQlF3eXVvN1ZPCitiWHhHOGpraloxMU9RbmdkS0p0NlNkV0xzc0daRzlsUlErMXk3Q1RxZXd1NFQ0YXFHRHRkTzVuRzQ2eEYzWDY0dmNXVlZLb05CWGE0CitzNk5mOVczcXQ1MWFKYmJlYVEzaTdieXg0dDZHNC84dmFjNVBaMnc0ZUdmRzFQdnE0eWZLOVFZajl4Mlplb0duMk1mUDBzQnpoaWZ2Cit5Tkkxb1VtRTQ0K2ZxT0Z3TlBEZWthaXdEMDk5OFRONU1pejZySy8vS3hSMC9nTUFBUC8vZ2pNUm8yTUFBQUFBLy84REFOMDRqdEU9Cis8L2RhdGE+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAyMDAgT0sNCitEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KK1NlcnZlcjogQXBhY2hlLzEuMy4zMSAoRGViaWFuIEdOVS9MaW51eCkgbW9kX2d6aXAvMS4zLjI2LjFhIFBIUC80LjMuOS0xIG1vZF9zc2wvMi44LjIwIE9wZW5TU0wvMC45LjdkIG1vZF9wZXJsLzEuMjkNCitWYXJ5OiBBY2NlcHQtRW5jb2RpbmcNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xDQorQ29udGVudC1FbmNvZGluZzogZGVmbGF0ZQ0KK0NvbnRlbnQtTGVuZ3RoOiAxMzA1DQorDQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorPCFET0NUWVBFIHByb2plY3QtbGlzdGluZyBTWVNURU0gImh0dHA6Ly9mcmVzaG1lYXQubmV0L2JhY2tlbmQvZm0tcHJvamVjdHMtMC40LmR0ZCI+Cis8cHJvamVjdC1saXN0aW5nPgorICA8cHJvamVjdD4KKyAgICA8cHJvamVjdF9pZD4xNjEyPC9wcm9qZWN0X2lkPgorICAgIDxkYXRlX2FkZGVkPjE5OTgtMDgtMjEgMDQ6MDE6Mjk8L2RhdGVfYWRkZWQ+CisgICAgPGRhdGVfdXBkYXRlZD4yMDA0LTEwLTE4IDAyOjIyOjIzPC9kYXRlX3VwZGF0ZWQ+CisgICAgPHByb2plY3RuYW1lX3Nob3J0PmN1cmw8L3Byb2plY3RuYW1lX3Nob3J0PgorICAgIDxwcm9qZWN0bmFtZV9mdWxsPmN1cmwgYW5kIGxpYmN1cmw8L3Byb2plY3RuYW1lX2Z1bGw+CisgICAgPGRlc2Nfc2hvcnQ+Q29tbWFuZCBsaW5lIHRvb2wgYW5kIGxpYnJhcnkgZm9yIGNsaWVudC1zaWRlIFVSTCB0cmFuc2ZlcnMuPC9kZXNjX3Nob3J0PgorICAgIDxkZXNjX2Z1bGw+Y3VybCBhbmQgbGliY3VybCBpcyBhIHRvb2wgZm9yIHRyYW5zZmVycmluZyBmaWxlcw0KK3VzaW5nIFVSTCBzeW50YXguIEl0IHN1cHBvcnRzIEhUVFAsIEhUVFBTLCBGVFAsDQorRlRQUywgRElDVCwgVEVMTkVULCBMREFQLCBGSUxFLCBhbmQgR09QSEVSLCBhcw0KK3dlbGwgYXMgSFRUUC1wb3N0LCBIVFRQLXB1dCwgY29va2llcywgRlRQIHVwbG9hZCwNCityZXN1bWVkIHRyYW5zZmVycywgcGFzc3dvcmRzLCBwb3J0bnVtYmVycywgU1NMDQorY2VydGlmaWNhdGVzLCBLZXJiZXJvcywgYW5kIHByb3hpZXMuIEl0IGlzIHBvd2VyZWQNCitieSBsaWJjdXJsLCB0aGUgY2xpZW50LXNpZGUgVVJMIHRyYW5zZmVyIGxpYnJhcnkuDQorVGhlcmUgYXJlIGJpbmRpbmdzIHRvIGxpYmN1cmwgZm9yIG92ZXIgMjANCitsYW5ndWFnZXMgYW5kIGVudmlyb25tZW50cy4NCis8L2Rlc2NfZnVsbD4KKyAgICA8dml0YWxpdHlfc2NvcmU+NTc4NC41Nzwvdml0YWxpdHlfc2NvcmU+CisgICAgPHZpdGFsaXR5X3BlcmNlbnQ+My4xNjwvdml0YWxpdHlfcGVyY2VudD4KKyAgICA8dml0YWxpdHlfcmFuaz4xNjk8L3ZpdGFsaXR5X3Jhbms+CisgICAgPHBvcHVsYXJpdHlfc2NvcmU+NjU5NC41NDwvcG9wdWxhcml0eV9zY29yZT4KKyAgICA8cG9wdWxhcml0eV9wZXJjZW50PjEzLjgxPC9wb3B1bGFyaXR5X3BlcmNlbnQ+CisgICAgPHBvcHVsYXJpdHlfcmFuaz4xMDU8L3BvcHVsYXJpdHlfcmFuaz4KKyAgICA8cmF0aW5nPjguNTA8L3JhdGluZz4KKyAgICA8cmF0aW5nX2NvdW50PjIxPC9yYXRpbmdfY291bnQ+CisgICAgPHJhdGluZ19yYW5rPjE4MzwvcmF0aW5nX3Jhbms+CisgICAgPHN1YnNjcmlwdGlvbnM+MzIzPC9zdWJzY3JpcHRpb25zPgorICAgIDxicmFuY2hfbmFtZT5EZWZhdWx0PC9icmFuY2hfbmFtZT4KKyAgICA8dXJsX3Byb2plY3RfcGFnZT5odHRwOi8vZnJlc2htZWF0Lm5ldC9wcm9qZWN0cy9jdXJsLzwvdXJsX3Byb2plY3RfcGFnZT4KKyAgICA8dXJsX2hvbWVwYWdlPmh0dHA6Ly9mcmVzaG1lYXQubmV0L3JlZGlyL2N1cmwvMTYxMi91cmxfaG9tZXBhZ2UvPC91cmxfaG9tZXBhZ2U+CisgICAgPHVybF90Z3o+aHR0cDovL2ZyZXNobWVhdC5uZXQvcmVkaXIvY3VybC8xNjEyL3VybF90Z3ovPC91cmxfdGd6PgorICAgIDx1cmxfYnoyPmh0dHA6Ly9mcmVzaG1lYXQubmV0L3JlZGlyL2N1cmwvMTYxMi91cmxfYnoyLzwvdXJsX2J6Mj4KKyAgICA8dXJsX3ppcD5odHRwOi8vZnJlc2htZWF0Lm5ldC9yZWRpci9jdXJsLzE2MTIvdXJsX3ppcC88L3VybF96aXA+CisgICAgPHVybF9jaGFuZ2Vsb2c+aHR0cDovL2ZyZXNobWVhdC5uZXQvcmVkaXIvY3VybC8xNjEyL3VybF9jaGFuZ2Vsb2cvPC91cmxfY2hhbmdlbG9nPgorICAgIDx1cmxfcnBtPmh0dHA6Ly9mcmVzaG1lYXQubmV0L3JlZGlyL2N1cmwvMTYxMi91cmxfcnBtLzwvdXJsX3JwbT4KKyAgICA8dXJsX2RlYj5odHRwOi8vZnJlc2htZWF0Lm5ldC9yZWRpci9jdXJsLzE2MTIvdXJsX2RlYi88L3VybF9kZWI+CisgICAgPHVybF9vc3g+aHR0cDovL2ZyZXNobWVhdC5uZXQvcmVkaXIvY3VybC8xNjEyL3VybF9vc3gvPC91cmxfb3N4PgorICAgIDx1cmxfYnNkcG9ydD5odHRwOi8vZnJlc2htZWF0Lm5ldC9yZWRpci9jdXJsLzE2MTIvdXJsX2JzZHBvcnQvPC91cmxfYnNkcG9ydD4KKyAgICA8dXJsX3B1cmNoYXNlPjwvdXJsX3B1cmNoYXNlPgorICAgIDx1cmxfY3ZzPmh0dHA6Ly9mcmVzaG1lYXQubmV0L3JlZGlyL2N1cmwvMTYxMi91cmxfY3ZzLzwvdXJsX2N2cz4KKyAgICA8dXJsX2xpc3Q+aHR0cDovL2ZyZXNobWVhdC5uZXQvcmVkaXIvY3VybC8xNjEyL3VybF9saXN0LzwvdXJsX2xpc3Q+CisgICAgPHVybF9taXJyb3I+aHR0cDovL2ZyZXNobWVhdC5uZXQvcmVkaXIvY3VybC8xNjEyL3VybF9taXJyb3IvPC91cmxfbWlycm9yPgorICAgIDx1cmxfZGVtbz48L3VybF9kZW1vPgorICAgIDxsaWNlbnNlPk1JVC9YIENvbnNvcnRpdW0gTGljZW5zZTwvbGljZW5zZT4KKyAgICA8bGF0ZXN0X3JlbGVhc2U+CisgICAgICA8bGF0ZXN0X3JlbGVhc2VfdmVyc2lvbj43LjEyLjI8L2xhdGVzdF9yZWxlYXNlX3ZlcnNpb24+CisgICAgICA8bGF0ZXN0X3JlbGVhc2VfaWQ+MTc2MDg1PC9sYXRlc3RfcmVsZWFzZV9pZD4KKyAgICAgIDxsYXRlc3RfcmVsZWFzZV9kYXRlPjIwMDQtMTAtMTggMDI6MjI6MjM8L2xhdGVzdF9yZWxlYXNlX2RhdGU+CisgICAgPC9sYXRlc3RfcmVsZWFzZT4KKyAgICA8c2NyZWVuc2hvdF90aHVtYj48L3NjcmVlbnNob3RfdGh1bWI+CisgICAgPGF1dGhvcnM+CisgICAgICA8YXV0aG9yPgorICAgICAgICA8YXV0aG9yX25hbWU+RGFuaWVsIFN0ZW5iZXJnPC9hdXRob3JfbmFtZT4KKyAgICAgICAgPGF1dGhvcl91cmw+aHR0cDovL2ZyZXNobWVhdC5uZXQvfmJhZ2Rlci88L2F1dGhvcl91cmw+CisgICAgICAgIDxhdXRob3Jfcm9sZT5Pd25lcjwvYXV0aG9yX3JvbGU+CisgICAgICA8L2F1dGhvcj4KKyAgICA8L2F1dGhvcnM+CisgICAgPGRlc2NyaW1pbmF0b3JzPgorICAgICAgPHRyb3ZlX2lkPjEyPC90cm92ZV9pZD4KKyAgICAgIDx0cm92ZV9pZD4yMjY8L3Ryb3ZlX2lkPgorICAgICAgPHRyb3ZlX2lkPjM8L3Ryb3ZlX2lkPgorICAgICAgPHRyb3ZlX2lkPjI8L3Ryb3ZlX2lkPgorICAgICAgPHRyb3ZlX2lkPjE4ODwvdHJvdmVfaWQ+CisgICAgICA8dHJvdmVfaWQ+MjE2PC90cm92ZV9pZD4KKyAgICAgIDx0cm92ZV9pZD4yMDA8L3Ryb3ZlX2lkPgorICAgICAgPHRyb3ZlX2lkPjIyMDwvdHJvdmVfaWQ+CisgICAgICA8dHJvdmVfaWQ+MTY0PC90cm92ZV9pZD4KKyAgICAgIDx0cm92ZV9pZD45MDwvdHJvdmVfaWQ+CisgICAgICA8dHJvdmVfaWQ+ODk8L3Ryb3ZlX2lkPgorICAgICAgPHRyb3ZlX2lkPjgwOTwvdHJvdmVfaWQ+CisgICAgICA8dHJvdmVfaWQ+MTUwPC90cm92ZV9pZD4KKyAgICAgIDx0cm92ZV9pZD4yMjQ8L3Ryb3ZlX2lkPgorICAgICAgPHRyb3ZlX2lkPjkwMDwvdHJvdmVfaWQ+CisgICAgICA8dHJvdmVfaWQ+ODM5PC90cm92ZV9pZD4KKyAgICA8L2Rlc2NyaW1pbmF0b3JzPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICA8ZGVwZW5kZW5jeSB0eXBlPSJyZWNvbW1lbmRlZCI+CisgICAgICAgIDxkZXBlbmRlbmN5X3JlbGVhc2VfaWQ+MDwvZGVwZW5kZW5jeV9yZWxlYXNlX2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9icmFuY2hfaWQ+NzQ2NDwvZGVwZW5kZW5jeV9icmFuY2hfaWQ+CisgICAgICAgIDxkZXBlbmRlbmN5X3Byb2plY3RfaWQ+NzQ2NDwvZGVwZW5kZW5jeV9wcm9qZWN0X2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9wcm9qZWN0X3RpdGxlPk9wZW5TU0wgKERlZmF1bHQpPC9kZXBlbmRlbmN5X3Byb2plY3RfdGl0bGU+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeSB0eXBlPSJvcHRpb25hbCI+CisgICAgICAgIDxkZXBlbmRlbmN5X3JlbGVhc2VfaWQ+MDwvZGVwZW5kZW5jeV9yZWxlYXNlX2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9icmFuY2hfaWQ+MDwvZGVwZW5kZW5jeV9icmFuY2hfaWQ+CisgICAgICAgIDxkZXBlbmRlbmN5X3Byb2plY3RfaWQ+NzQ0MzwvZGVwZW5kZW5jeV9wcm9qZWN0X2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9wcm9qZWN0X3RpdGxlPk9wZW5MREFQPC9kZXBlbmRlbmN5X3Byb2plY3RfdGl0bGU+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeSB0eXBlPSJvcHRpb25hbCI+CisgICAgICAgIDxkZXBlbmRlbmN5X3JlbGVhc2VfaWQ+MDwvZGVwZW5kZW5jeV9yZWxlYXNlX2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9icmFuY2hfaWQ+MDwvZGVwZW5kZW5jeV9icmFuY2hfaWQ+CisgICAgICAgIDxkZXBlbmRlbmN5X3Byb2plY3RfaWQ+MTIzNTE8L2RlcGVuZGVuY3lfcHJvamVjdF9pZD4KKyAgICAgICAgPGRlcGVuZGVuY3lfcHJvamVjdF90aXRsZT56bGliPC9kZXBlbmRlbmN5X3Byb2plY3RfdGl0bGU+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeSB0eXBlPSJvcHRpb25hbCI+CisgICAgICAgIDxkZXBlbmRlbmN5X3JlbGVhc2VfaWQ+MDwvZGVwZW5kZW5jeV9yZWxlYXNlX2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9icmFuY2hfaWQ+MDwvZGVwZW5kZW5jeV9icmFuY2hfaWQ+CisgICAgICAgIDxkZXBlbmRlbmN5X3Byb2plY3RfaWQ+MzIwNDc8L2RlcGVuZGVuY3lfcHJvamVjdF9pZD4KKyAgICAgICAgPGRlcGVuZGVuY3lfcHJvamVjdF90aXRsZT5IZWltZGFsPC9kZXBlbmRlbmN5X3Byb2plY3RfdGl0bGU+CisgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICA8ZGVwZW5kZW5jeSB0eXBlPSJvcHRpb25hbCI+CisgICAgICAgIDxkZXBlbmRlbmN5X3JlbGVhc2VfaWQ+MDwvZGVwZW5kZW5jeV9yZWxlYXNlX2lkPgorICAgICAgICA8ZGVwZW5kZW5jeV9icmFuY2hfaWQ+MDwvZGVwZW5kZW5jeV9icmFuY2hfaWQ+CisgICAgICAgIDxkZXBlbmRlbmN5X3Byb2plY3RfaWQ+NDQ1MzI8L2RlcGVuZGVuY3lfcHJvamVjdF9pZD4KKyAgICAgICAgPGRlcGVuZGVuY3lfcHJvamVjdF90aXRsZT5jLWFyZXM8L2RlcGVuZGVuY3lfcHJvamVjdF90aXRsZT4KKyAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgPC9wcm9qZWN0PgorPC9wcm9qZWN0LWxpc3Rpbmc+Cis8L2RhdGFjaGVjaz4KKworPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK2xpYnoKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCBkZWZsYXRlIGNvbXByZXNzZWQgY29udGVudAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yMjIgLS1jb21wcmVzc2VkCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMjIyIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0FjY2VwdC1FbmNvZGluZzogZGVmbGF0ZSwgZ3ppcA0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMjMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2ZTc4YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIyMwpAQCAtMCwwICsxLDkyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitjb21wcmVzc2VkCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyB0aGlzIGRlZmxhdGUgY2h1bmsgaGFzIHRocmVlIGJ5dGVzIHJlbW92ZWQgZnJvbSB0aGUgYmVnaW5uaW5nCis8ZGF0YSBiYXNlNjQ9InllcyI+CitTRlJVVUM4eExqRWdNakF3SUU5TERRcEVZWFJsT2lCTmIyNHNJREk1SUU1dmRpQXlNREEwSURJeE9qVTJPalV6SUVkTlZBMEtVMlZ5CitkbVZ5T2lCQmNHRmphR1V2TVM0ekxqTXhJQ2hFWldKcFlXNGdSMDVWTDB4cGJuVjRLU0J0YjJSZlozcHBjQzh4TGpNdU1qWXVNV0VnCitVRWhRTHpRdU15NDVMVEVnYlc5a1gzTnpiQzh5TGpndU1qQWdUM0JsYmxOVFRDOHdMamt1TjJRZ2JXOWtYM0JsY213dk1TNHlPUTBLCitWbUZ5ZVRvZ1FXTmpaWEIwTFVWdVkyOWthVzVuRFFwRGIyNTBaVzUwTFZSNWNHVTZJSFJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDFKCitVMDh0T0RnMU9TMHhEUXBEYjI1MFpXNTBMVVZ1WTI5a2FXNW5PaUJrWldac1lYUmxEUXBEYjI1MFpXNTBMVXhsYm1kMGFEb2dNVE13CitOUTBLRFFwWTIyN2pOaEI5TjVCL1lQM1VBclp1dGhNNWNMUW9jdGtFelRiQjJnVzZUd1l0MFRZYlNSUkl5cms4OU5zN2xDaUpzUnl2CitkNE8rQkVoaWN1YWN3K0VNU1pPWmZIcEtZclFoWEZDV25uVmR5K2tpa29Zc291bnFySHN6dmV2Ny9tamNkN3VmZ3M3a2w0dTc4OW0zCisrMHVVY2ZZUENXVS9wa0lDRUUyL1RXZVhYMUIzTFdWMmF0dExUc1E2SVZoYUtaSDJBb2NQSkkzc1pkTFhQTkYzcktFVnlhZ0xvbHRhCitRUWVoeXFiYVRXOU9vOEE5ZHIySmJSaEtSSVFsbWVNb0lvQVlqLzIrNC9jOUZ6bkRVOGM5OWNZVDIvQWJoRHhUSDFIZ09jNnc3enA5CisxMGVPZCtyQnowQlRLc1NyT0ZLY2tMbFlNeTZETU9keEhZNWhiK09YZVJ3WGNJVFRDTVYwMGFZV0VCMGVFYUdXT21kSlVsSlNnaVJqCit0UURIL0JrdEdVZGhURWtxKzRKR0JQMzE5UlpKamxPeGhJcGFNSXRHeUZEZUdReWlBdUZ5QktWYXFYQlYzeVdOaVRqcTVFSjExQmppCitPWlg0eVVJM0Vvazh5MEJmb092WjdMNVgvSjMyMEJXMGp6cFhSZnZpNW56V1E3UEwyejh2NGZQMjRuZUFYZDNjWHZhSzRUL2YzVjlmCitmb1UyRFBCSVlvaXBsT3BuVE1pZWJ1YlFDaGw3b0VRVTJpalBZb1lqR0FLV1dwNlFxSmwxRDJWWWlFZkdJOVdFeU5JOFdSVDI2ZlQyCitxQk1TTHVtU2hsQlhNUDFCT1BpWUtFT0JhanpCQ01XMElCc1pleVNjUkVlZHhYT1ZwQjZTYS9KbXhxdXlXRWVkMlJxb0NNUHZncVpxCitNd2xJYloxcWxXQUdtdzU1emxFbnh1a3F4eXNpaWhoSXVxR2NwUWtNSUVCSGw5QllHeHNxY1V6bDgxeUVqSk5nZE9JUHJkSEp4TjZ5CitiNEV6d2tPUURBYVdlMnhnSy9NV0d1YnpBSHR0YkNBTGsxN1hMTXRqekp1eGprZGppR0VJeTNuYjB5SlVBN29EeTNkZkVWNkhZampLCitZSnpSSzdRUkRzZkZ1ZUZiSTJkaTY0N3BtWWNzQjEzUHJiemE4QXBURHVJUGFvd3hnTWdYSXVRMGszQkVpbUNnVG9mWHBoSUdwVS9ECis5Vnp0NWVDQ0xIRWV5NGx0R2tzWTFIOWVIV0FabEQzWWVXaFdKNld0MW9zOXNWdXNSbXpORXZLMkVDeGd5a3NWZFhqYUprUHIxZ0tOCitwbHk5SEM0SFlLMmthSTNJNHNVN1hBVEFXa1RSR3BFWG1oMHVBbUF0b21pTlNMaUdQVVppdGpwY3FxWm93VWFpa2VWWmNyZ2dnTFdVCitvalVpRVZrY0xnSmdMYUpvalFnVFQ0ZUxBRmlMS0pwUkx4R3A4L0lIYWxZU3FycHB1ckhNY3c1cEV5VFE2N2ZxR29YWmlCOG95VVpVCit4ZGdJUTBUZEhBNVhVV2d0VXhBYm5ZUnl6dmpoU2lWZWEybXlXZGVFQlZXdG9GbDZZZ3FISEtUZ3k4M00vaHVkdytrQkthTjVnbTVMCit4OFN1RUJxdnZxZmtuSk9ZMUpscm1lZjYvaGFjV0s1bndRWHBEZmNiYkhXdk9qbDIvRkdMV0YydzJoeDFMOXA5Y2RvRkxPZGk3NXJNCitCTTVSQWhOZU16bVhhL2lxaHB5MVRDVVM1eEp1TXFJT3FleFgzZHFnVDJDY1VoS2pxU1FwZk1PdkpyYnBiRkdnU3J2ci91OENyeUtpCitpbXdnVzNUT1loTGNQYWFFMTdqQ1ZFVnFtNkZXdldvSnF5OTRUaE9hWW1uT1RuSzRJUlMxZ1lMV25aYlg4NDczdVFkN3VmdWNydS92Cis1YnA3eDRXbHNUL3F2VzczZUxqUFBkNUw5c2Q3dmM1ZXR6djZUdHpmQ1d4L1pJUFcyT1g5YnJ2OHNDWXllRExCUXd5dW83Vk9iWHhHCis4amtqWjExT1FuZ2RLSnQ2U2RXTHNzR1pHOWxSUSsxeTdDVHFld3U0VDRhcUdEdGRPNW5HNDZ4RjNYNjR2Y1dWVktvTkJYYTRzNk5mCis5VzNxdDUxYUpiYmVhUTNpN2J5eDR0Nkc0Lzh2YWM1UFoydzRlR2ZHMVB2cTR5Zks5UVlqOXgyWmVvR24yTWZQMHNCemhpZnZ5TkkxCitvVW1FNDQrZnFPRndOUERla2Fpd0QwOTk4VE41TWl6NnJLLy9LeFIwL2dNQUFQLy9nak1SbzJNQUFBQUEvLzhEQU4wNGp0RT0KKzwvZGF0YT4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IE1vbiwgMjkgTm92IDIwMDQgMjE6NTY6NTMgR01UDQorU2VydmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEgUEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0KK1Zhcnk6IEFjY2VwdC1FbmNvZGluZw0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTENCitDb250ZW50LUVuY29kaW5nOiBkZWZsYXRlDQorQ29udGVudC1MZW5ndGg6IDEzMDUNCisNCis8L2RhdGFjaGVjaz4KKworPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK2xpYnoKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCBkZWZsYXRlIGNvbXByZXNzZWQgY29udGVudCB3aXRoIGJyb2tlbiBkZWZsYXRlIGhlYWRlcgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yMjMgLS1jb21wcmVzc2VkCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMjIzIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0FjY2VwdC1FbmNvZGluZzogZGVmbGF0ZSwgZ3ppcA0KKw0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorNjEKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjI0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjOGFkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMjQKQEAgLTAsMCArMSwxMDQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2NvbXByZXNzZWQKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBiYXNlNjQ9InllcyI+CitTRlJVVUM4eExqRWdNakF3SUU5TERRcEVZWFJsT2lCTmIyNHNJREk1SUU1dmRpQXlNREEwSURJeE9qVTJPalV6SUVkTlZBMEtVMlZ5CitkbVZ5T2lCQmNHRmphR1V2TVM0ekxqTXhJQ2hFWldKcFlXNGdSMDVWTDB4cGJuVjRLU0J0YjJSZlozcHBjQzh4TGpNdU1qWXVNV0VnCitVRWhRTHpRdU15NDVMVEVnYlc5a1gzTnpiQzh5TGpndU1qQWdUM0JsYmxOVFRDOHdMamt1TjJRZ2JXOWtYM0JsY213dk1TNHlPUTBLCitWbUZ5ZVRvZ1FXTmpaWEIwTFVWdVkyOWthVzVuRFFwRGIyNTBaVzUwTFZSNWNHVTZJSFJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDFKCitVMDh0T0RnMU9TMHhEUXBEYjI1MFpXNTBMVVZ1WTI5a2FXNW5PaUJuZW1sd0RRcERiMjUwWlc1MExVeGxibWQwYURvZ01qRTROZzBLCitEUW9maXdnY3Y3eXJRUUlETUFCMGFHbHpJR2x6SUdGdUlHVjRkSEpoSUdacFpXeGtJSFJvWVhRZ2JYVnpkQ0JpWlNCeVpXMXZkbVZrCitYMTlmWDE5c2IyNW5MV1pwYkdWdVlXMWxMWGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0CitlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRlSGg0ZUhoNGVIaDRBSFJvYVhNZ2FYTWdZU0JqCitiMjF0Wlc1MElIUm9ZWFFnYlhWemRDQmlaU0J6YTJsd2NHVmtBQ3ZOUzg3UExTaEtMUzVPVFZGSXI4b3NVRWhKTEVsVUtNOHN5VkRJCit5YzlMaDRobHBDYW1wQlp4QVFDNFVKN0xMUUFBQUE9PQorPC9kYXRhPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMjAwIE9LDQorRGF0ZTogTW9uLCAyOSBOb3YgMjAwNCAyMTo1Njo1MyBHTVQNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMzEgKERlYmlhbiBHTlUvTGludXgpIG1vZF9nemlwLzEuMy4yNi4xYSBQSFAvNC4zLjktMSBtb2Rfc3NsLzIuOC4yMCBPcGVuU1NMLzAuOS43ZCBtb2RfcGVybC8xLjI5DQorVmFyeTogQWNjZXB0LUVuY29kaW5nDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMQ0KK0NvbnRlbnQtRW5jb2Rpbmc6IGd6aXANCitDb250ZW50LUxlbmd0aDogMjE4Ng0KKw0KK3VuY29tcHJlc3NlZCBnemlwIGRhdGEgd2l0aCBsb25nIGd6aXAgaGVhZGVyCis8L2RhdGFjaGVjaz4KKworPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK2xpYnoKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCBnemlwIGNvbXByZXNzZWQgY29udGVudCB3aXRoIGh1Z2UgY29tbWVudCBhbmQgZXh0cmEgZmllbGQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMjI0IC0tY29tcHJlc3NlZAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzIyNCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitBY2NlcHQtRW5jb2Rpbmc6IGRlZmxhdGUsIGd6aXANCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjI1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjI1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NDQ3MTIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMjUKQEAgLTAsMCArMSwyOCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgJTBhLWNvZGUgaW4gVVJMJ3MgbmFtZSBwYXJ0CisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vYmFkJTBhdXNlcjpwYXNzd2RAJUhPU1RJUDolRlRQUE9SVC8yMjUlMGEKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKyMgMyA9PSBDVVJMRV9VUkxfTUFMRk9STUFUCis8ZXJyb3Jjb2RlPgorMworPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMjYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZjNGJkYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIyNgpAQCAtMCwwICsxLDI5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQICUwZC1jb2RlIGluIFVSTCdzIENXRCBwYXJ0CisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8yMjYlMGQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKyMgMyA9PSBDVVJMRV9VUkxfTUFMRk9STUFUCis8ZXJyb3Jjb2RlPgorMworPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMjcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzZmEwMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIyNwpAQCAtMCwwICsxLDU4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorcG9zdC1xdW90ZQorcHJlLXF1b3RlCitxdW90ZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9kYXRhPgorPHNlcnZlcmNtZD4KK1JFUExZIEVQU1YgNTAwIG5vIHN1Y2ggY29tbWFuZAorUkVQTFkgRkFJTCA1MDAgdGhpcyBtaWdodCBub3QgYmUgYSBmYWlsdXJlIQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgd2l0aCBxdW90ZSBvcHMKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzIyNyAtUSAiTk9PUCAxIiAtUSAiK05PT1AgMiIgLVEgIi1OT09QIDMiIC1RICIqRkFJTCIgLVEgIisqRkFJTCBIQVJEIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK05PT1AgMQ0KK0ZBSUwNCitFUFNWDQorUEFTVg0KK1RZUEUgSQ0KK05PT1AgMg0KK0ZBSUwgSEFSRA0KK1NJWkUgMjI3DQorUkVUUiAyMjcNCitOT09QIDMNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIyOCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIyOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTgxNTgzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjI4CkBAIC0wLDAgKzEsNTIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitBQ0NUCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitkYXRhCisgICAgdG8KKyAgICAgIHNlZQordGhhdCBGVFAKK3dvcmtzCisgIHNvIGRvZXMgaXQ/Cis8L2RhdGE+Cis8c2VydmVyY21kPgorUkVQTFkgUEFTUyAzMzIgcGxlYXNlIHByb3ZpZGUgYWNjb3VudCBuYW1lCitSRVBMWSBBQ0NUIDIzMCB0aGFuayB5b3UKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIFJFVFIgd2l0aCBBQ0NUCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8yMjggLS1mdHAtYWNjb3VudCAib25lIGNvdW50IgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorQUNDVCBvbmUgY291bnQNCitQV0QNCitFUFNWDQorVFlQRSBJDQorU0laRSAyMjgNCitSRVRSIDIyOA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjI5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjI5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMzc0NjgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMjkKQEAgLTAsMCArMSw0MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0FDQ1QKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2VydmVyY21kPgorUkVQTFkgUEFTUyAzMzIgcGxlYXNlIHByb3ZpZGUgYWNjb3VudCBuYW1lCitSRVBMWSBBQ0NUIDUzMiBibHVhaCEKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIFJFVFIgd2l0aCBiYWQgQUNDVAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMjI5IC0tZnRwLWFjY291bnQgIm9uZSBjb3VudCIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitBQ0NUIG9uZSBjb3VudA0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorMTEKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njg3MmU4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjMKQEAgLTAsMCArMSwzMyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+Cit1bnN1cHBvcnRlZCBwcm90b2NvbAorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK3Vuc3VwcG9ydGVkIHByb3RvY29sOi8vIFVSTAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0ZnA6Ly8lSE9TVElQOiVIVFRQUE9SVC9ub25lLmh0Zm1sCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMQorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMzEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEyZWE0MQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIzMQpAQCAtMCwwICsxLDMyIEBACis8dGVzdGNhc2U+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisjIDE2IGJ5dGVzIHRvIGNoZWNrCis8ZGF0YWNoZWNrPgorQjAxMjM0NTY3CitDMDEyMzQ1NjcKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmaWxlCis8L3NlcnZlcj4KKyA8bmFtZT4KK2ZpbGU6Ly8gd2l0aCByZXN1bWUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmaWxlOi8vbG9jYWxob3N0LyVQV0QvbG9nL3Rlc3QyMzEudHh0IC1DIDEwLQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3QyMzEudHh0Ij4KK0EwMTIzNDU2NworQjAxMjM0NTY3CitDMDEyMzQ1NjcKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIzMyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIzMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTY1ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjMzCkBAIC0wLDAgKzEsOTQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBwcm94eQorSFRUUCBCYXNpYyBhdXRoCitIVFRQIHByb3h5IEJhc2ljIGF1dGgKK2ZvbGxvd2xvY2F0aW9uCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAzMDIgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKK0xvY2F0aW9uOiBodHRwOi8vZ290by5zZWNvbmQuaG9zdC5ub3cvMjMzMDAwMgorQ29udGVudC1MZW5ndGg6IDgKK0Nvbm5lY3Rpb246IGNsb3NlCisKK2NvbnRlbnRzCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKK0NvbnRlbnQtTGVuZ3RoOiA5CisKK2NvbnRlbnRzCis8L2RhdGEyPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAyIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlIHN3c2Nsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCitMb2NhdGlvbjogaHR0cDovL2dvdG8uc2Vjb25kLmhvc3Qubm93LzIzMzAwMDIKK0NvbnRlbnQtTGVuZ3RoOiA4CitDb25uZWN0aW9uOiBjbG9zZQorCitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKK0NvbnRlbnQtTGVuZ3RoOiA5CisKK2NvbnRlbnRzCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQLCBwcm94eSwgc2l0ZStwcm94eSBhdXRoIGFuZCBMb2NhdGlvbjogdG8gbmV3IGhvc3QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vZmlyc3QuaG9zdC5pdC5pcy93ZS93YW50L3RoYXQvcGFnZS8yMzMgLXggJUhPU1RJUDolSFRUUFBPUlQgLS11c2VyIGlhbTpteXNlbGYgLS1wcm94eS11c2VyIHRlc3Rpbmc6dGhpcyAtLWxvY2F0aW9uCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vZmlyc3QuaG9zdC5pdC5pcy93ZS93YW50L3RoYXQvcGFnZS8yMzMgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBkR1Z6ZEdsdVp6cDBhR2x6DQorQXV0aG9yaXphdGlvbjogQmFzaWMgYVdGdE9tMTVjMlZzWmc9PQ0KK0hvc3Q6IGZpcnN0Lmhvc3QuaXQuaXMNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitHRVQgaHR0cDovL2dvdG8uc2Vjb25kLmhvc3Qubm93LzIzMzAwMDIgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBkR1Z6ZEdsdVp6cDBhR2x6DQorSG9zdDogZ290by5zZWNvbmQuaG9zdC5ub3cNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjM0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjM0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YzcwODEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMzQKQEAgLTAsMCArMSw5NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBwcm94eQorSFRUUCBwcm94eSBCYXNpYyBhdXRoCitmb2xsb3dsb2NhdGlvbgorLS1sb2NhdGlvbi10cnVzdGVkCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMiBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworTG9jYXRpb246IGh0dHA6Ly9nb3RvLnNlY29uZC5ob3N0Lm5vdy8yMzQwMDAyCitDb250ZW50LUxlbmd0aDogOAorQ29ubmVjdGlvbjogY2xvc2UKKworY29udGVudHMKKzwvZGF0YT4KKzxkYXRhMj4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworQ29udGVudC1MZW5ndGg6IDkKKworY29udGVudHMKKzwvZGF0YTI+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDIgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKK0xvY2F0aW9uOiBodHRwOi8vZ290by5zZWNvbmQuaG9zdC5ub3cvMjM0MDAwMgorQ29udGVudC1MZW5ndGg6IDgKK0Nvbm5lY3Rpb246IGNsb3NlCisKK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworQ29udGVudC1MZW5ndGg6IDkKKworY29udGVudHMKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAsIHByb3h5LCBzaXRlK3Byb3h5IGF1dGggYW5kIExvY2F0aW9uOiB0byBuZXcgaG9zdCB1c2luZyBsb2NhdGlvbi10cnVzdGVkCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovL2ZpcnN0Lmhvc3QuaXQuaXMvd2Uvd2FudC90aGF0L3BhZ2UvMjM0IC14ICVIT1NUSVA6JUhUVFBQT1JUIC0tdXNlciBpYW06bXlzZWxmIC0tcHJveHktdXNlciB0ZXN0aW5nOnRoaXMgLS1sb2NhdGlvbi10cnVzdGVkCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vZmlyc3QuaG9zdC5pdC5pcy93ZS93YW50L3RoYXQvcGFnZS8yMzQgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBkR1Z6ZEdsdVp6cDBhR2x6DQorQXV0aG9yaXphdGlvbjogQmFzaWMgYVdGdE9tMTVjMlZzWmc9PQ0KK0hvc3Q6IGZpcnN0Lmhvc3QuaXQuaXMNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitHRVQgaHR0cDovL2dvdG8uc2Vjb25kLmhvc3Qubm93LzIzNDAwMDIgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBkR1Z6ZEdsdVp6cDBhR2x6DQorQXV0aG9yaXphdGlvbjogQmFzaWMgYVdGdE9tMTVjMlZzWmc9PQ0KK0hvc3Q6IGdvdG8uc2Vjb25kLmhvc3Qubm93DQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIzNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIzNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTg0M2YxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjM1CkBAIC0wLDAgKzEsNDIgQEAKKzx0ZXN0Y2FzZT4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCByZXN1bWVkIHVwbG9hZCBidXQgbm8gZmlsZSBwcmVzZW50IHJlbW90ZWx5CisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8yMzUgLVQgbG9nL3VwbG9hZDIzNSAtQyAtCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdXBsb2FkMjM1Ij4KK3RoaXMgaXMgdGhlICoqKioqY3JhcCoqKioqKioqIHRoYXQgd2UncmUgZ29ubmEgdXBsb2FkCisKK3dvcng/Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMjM1DQorU1RPUiAyMzUNCitRVUlUDQorPC9wcm90b2NvbD4KKzx1cGxvYWQ+Cit0aGlzIGlzIHRoZSAqKioqKmNyYXAqKioqKioqKiB0aGF0IHdlJ3JlIGdvbm5hIHVwbG9hZAorCit3b3J4PworPC91cGxvYWQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMzYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMzYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkMDQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIzNgpAQCAtMCwwICsxLDQ3IEBACis8dGVzdGNhc2U+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBTSVpFIDU1MCBhY2Nlc3MgdG8gdGhpcyBmaWxlIGlzIHZlcnkgbXVjaCBkZW5pZWQKK1JFUExZIEFQUEUgNTUwIEkgc2FpZDogYWNjZXNzIHRvIHRoaXMgZmlsZSBpcyB2ZXJ5IG11Y2ggZGVuaWVkCitSRVBMWSBTVE9SIDU1MCBJIHNhaWQ6IGFjY2VzcyB0byB0aGlzIGZpbGUgaXMgdmVyeSBtdWNoIGRlbmllZAorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgcmVzdW1lIHVwbG9hZCBidXQgZGVuaWVkIGFjY2VzcyB0byByZW1vdGUgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMjM2IC1UIGxvZy9maWxlMjM2LnR4dCAtQyAtCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvZmlsZTIzNi50eHQiPgorVGVzdCBkYXRhCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisKKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBJDQorU0laRSAyMzYNCitTVE9SIDIzNg0KK1FVSVQNCis8L3Byb3RvY29sPgorCisjICAoMjUpIEZhaWxlZCBGVFAgdXBsb2FkOiA1NTAKKzxlcnJvcmNvZGU+CisyNQorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMzcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMzcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3NWExZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIzNwpAQCAtMCwwICsxLDQyIEBACis8dGVzdGNhc2U+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2VydmVyY21kPgorUkVQTFkgUEFTViAyMjcgRW50ZXJpbmcgUGFzc2l2IE1vZGUgKDEyMTYsMjU2LDIsMTI3LDEyNywxMjcpCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBnZXR0aW5nIGJhZCBob3N0IGluIDIyNy1yZXNwb25zZSB0byBQQVNWCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8yMzcgLS1kaXNhYmxlLWVwc3YKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorIyBUaGUgYm9ndXMgYWRkcmVzcyB1c2VkIGhlcmUgaXMgY2hvc2VuIHNwZWNpZmljYWxseSBzbyB0aGF0IHdoZW4gcHJvY2Vzc2VkIG9uCisjIGNlcnRhaW4gaG9zdHMgd2l0aCBidWdneSByZXNvbHZlciBjb2RlLCB0aGUgcmVzdWx0aW5nIGFkZHJlc3MgKDE5Mi4wLjIuMTI3KQorIyBpcyBmcm9tIGFuIGFkZHJlc3MgYmxvY2sgdGhhdCBpcyBndWFyYW50ZWVkIG5ldmVyIHRvIGJlIGFzc2lnbmVkIChSRkMzMzMwKS4KKzx2ZXJpZnk+CisjIGN1cmw6ICgxNSkgQ2FuJ3QgcmVzb2x2ZSBuZXcgaG9zdCAxMjE2LjI1Ni4yLjEyNzozMjYzOQorIyAxNSA9PiBDVVJMRV9GVFBfQ0FOVF9HRVRfSE9TVAorIyBzb21lIHN5c3RlbXMganVzdCBkb24ndCBmYWlsIG9uIHRoZSBpbGxlZ2FsIGhvc3QgbmFtZS9hZGRyZXNzIGJ1dCBpbnN0ZWFkCisjIG1vdmVzIG9uIGFuZCBhdHRlbXB0IHRvIGNvbm5lY3QgdG8uLi4geWVzLCB0byB3aGF0PworIyA3PSBDVVJMRV9DT1VMRE5UX0NPTk5FQ1QKKzxlcnJvcmNvZGU+CisxNSwgNworPC9lcnJvcmNvZGU+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorUEFTVg0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMzggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyMzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5N2UzYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIzOApAQCAtMCwwICsxLDQxIEBACis8dGVzdGNhc2U+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2VydmVyY21kPgorUkVQTFkgRVBTViAyMjkgRW50ZXJpbmcgUGFzc2l2IE1vZGUgKHx8fDEwMDAwMDB8KQorUkVQTFkgUEFTViAyMjcgRW50ZXJpbmcgUGFzc2l2IE1vZGUgKDEyMTYsMjU2LDIsMTI3LDEyNywxMjcpCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBnZXR0aW5nIGJhZCBwb3J0IGluIHJlc3BvbnNlIHRvIEVQU1YgYW5kIGluIHJlc3BvbnNlIHRvIFBBU1YKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzIzOAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyBjdXJsOiAoMTUpIENhbid0IHJlc29sdmUgbmV3IGhvc3QgMTIxNi4yNTYuMi4xMjc6MzI2MzkKKyMgMTUgPT4gQ1VSTEVfRlRQX0NBTlRfR0VUX0hPU1QKKyMgc29tZSBzeXN0ZW1zIGp1c3QgZG9uJ3QgZmFpbCBvbiB0aGUgaWxsZWdhbCBob3N0IG5hbWUvYWRkcmVzcyBidXQgaW5zdGVhZAorIyBtb3ZlcyBvbiBhbmQgYXR0ZW1wdCB0byBjb25uZWN0IHRvLi4uIHllcywgdG8gd2hhdD8KKyMgNz0gQ1VSTEVfQ09VTEROVF9DT05ORUNUCis8ZXJyb3Jjb2RlPgorNywgMTUKKzwvZXJyb3Jjb2RlPgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitQQVNWDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIzOSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDIzOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzQ4MTAwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjM5CkBAIC0wLDAgKzEsMTAwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorSFRUUCBwcm94eQorSFRUUCBwcm94eSBOVExNIGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworIyB0aGlzIGlzIHJldHVybmVkIGZpcnN0IHNpbmNlIHdlIGdldCBubyBwcm94eS1hdXRoCis8ZGF0YTEwMDE+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KKw0KK0hleSB5b3UsIGF1dGhlbnRpY2F0ZSBvciBnbyBhd2F5IQorPC9kYXRhMTAwMT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIHRoZSBzZWNvbmQKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMj4KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gcHJveHkgbGFuZCBzd3NjbG9zZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDQyDQorDQorQ29udGVudHMgb2YgdGhhdCBwYWdlIHlvdSByZXF1ZXN0ZWQsIHNpci4KKzwvZGF0YTEwMDI+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KKw0KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gcHJveHkgbGFuZCBzd3NjbG9zZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDQyDQorDQorQ29udGVudHMgb2YgdGhhdCBwYWdlIHlvdSByZXF1ZXN0ZWQsIHNpci4KKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK05UTE0KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIHByb3h5LWF1dGggTlRMTSBhbmQgdGhlbiBQT1NUCisgPC9uYW1lPgorIDxzZXRlbnY+CisjIHdlIGZvcmNlIG91ciBvd24gaG9zdCBuYW1lLCBpbiBvcmRlciB0byBtYWtlIHRoZSB0ZXN0IG1hY2hpbmUgaW5kZXBlbmRlbnQKK0NVUkxfR0VUSE9TVE5BTUU9Y3VybGhvc3QKKyMgd2UgdHJ5IHRvIHVzZSB0aGUgTERfUFJFTE9BRCBoYWNrLCBpZiBub3QgYSBkZWJ1ZyBidWlsZAorTERfUFJFTE9BRD0lUFdEL2xpYnRlc3QvLmxpYnMvbGliaG9zdG5hbWUuc28KKyA8L3NldGVudj4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yMzkgLS1wcm94eSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQgLS1wcm94eS11c2VyIHNpbGx5OnBlcnNvbiAtLXByb3h5LW50bG0gLWQgInBvc3RpdCIKKzwvY29tbWFuZD4KKzxwcmVjaGVjaz4KK2Noa2hvc3RuYW1lIGN1cmxob3N0Cis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6IGN1cmwvLioKKzwvc3RyaXA+Cis8cHJvdG9jb2wgbm9uZXdsaW5lPSJ5ZXMiPgorUE9TVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMjM5IEhUVFAvMS4xDQorUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitQT1NUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yMzkgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQVlBQmdBV0FBQUFBQUFBQUJ3QUFBQUJRQUZBSEFBQUFBSUFBZ0FkUUFBQUFBQUFBQUFBQUFBQm9LQkFLQWVRanpLdENRN3ViVzhTNk1ON0I1OTQzNkdBeFB1MENWUk93d05Cc2d4TUw0OWdjYkFYTFQvYlUrSDV3clM5WE5wYkd4NVkzVnliR2h2YzNRPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0NvbnRlbnQtTGVuZ3RoOiA2DQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitwb3N0aXQKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ODVmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNApAQCAtMCwwICsxLDQ3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4wIDQwNCBCQUQgQk9ZCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCitUaGlzIHNpbGx5IHBhZ2UgZG9lc24ndCByZWFhYWFhbHkgZXhpc3Qgc28geW91IHNob3VsZCBub3QgZ2V0IGl0LgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIGZhaWwgc2lsZW50bHkgb24gSFRUUCBlcnJvciByZXR1cm4KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMjQgLS1mYWlsCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMjQgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuOC4xLXByZTMgKHNwYXJjLXN1bi1zb2xhcmlzMi43KSBsaWJjdXJsIDcuOC4xLXByZTMgKE9wZW5TU0wgMC45LjZhKSAoa3JiNCBlbmFibGVkKQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPGVycm9yY29kZT4KKzIyCis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI0MCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI0MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDg1OTRkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjQwCkBAIC0wLDAgKzEsNTggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0lQdjYKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgoraXB2NgorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwLWlwdjYKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUC1JUHY2IEdFVAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1nICJodHRwOi8vJUhPU1Q2SVA6JUhUVFA2UE9SVC8yNDAiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDoKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzI0MCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUNklQOiVIVFRQNlBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNDEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlYWUxZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI0MQpAQCAtMCwwICsxLDU2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitJUHY2CitJUHY2LWhvc3RuYW1lCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA2CisKK2hlbGxvCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgoraXB2NgorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwLWlwdjYKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUC1JUHY2IEdFVCAodXNpbmcgaXA2LWxvY2FsaG9zdCkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistZyAiaHR0cDovL2lwNi1sb2NhbGhvc3Q6JUhUVFA2UE9SVC8yNDEiCis8L2NvbW1hbmQ+Cis8cHJlY2hlY2s+CisuL3NlcnZlci9yZXNvbHZlIC0taXB2NiBpcDYtbG9jYWxob3N0Cis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6Cis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8yNDEgSFRUUC8xLjENCitIb3N0OiBpcDYtbG9jYWxob3N0OiVIVFRQNlBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNDIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkNDBiZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI0MgpAQCAtMCwwICsxLDU0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitJUHY2CitIVFRQIEJhc2ljIGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorCitoZWxsbworPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK2lwdjYKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cC1pcHY2Cis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAtSVB2NiBHRVQgd2l0aCB1c2VybmFtZStwYXNzd29yZCBpbiBVUkwKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistZyAiaHR0cDovL2Zvb2JhcjpiYXJmb29AJUhPU1Q2SVA6JUhUVFA2UE9SVC8yNDIiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDoKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzI0MiBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IEJhc2ljIFptOXZZbUZ5T21KaGNtWnZidz09DQorSG9zdDogJUhPU1Q2SVA6JUhUVFA2UE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI0MyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI0MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTNhNDM3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjQzCkBAIC0wLDAgKzEsMTI5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIHByb3h5CitIVFRQIHByb3h5IE5UTE0gYXV0aAorLS1wcm94eS1hbnlhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisKKzxkYXRhPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorUHJveHktQXV0aGVudGljYXRlOiBCbGFja21hZ2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorUHJveHktQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UKKzwvZGF0YT4KKworIyB0aGlzIGlzIHJldHVybmVkIGZpcnN0IHNpbmNlIHdlIGdldCBubyBwcm94eS1hdXRoCis8ZGF0YTEwMDE+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KKw0KK0hleSB5b3UsIGF1dGhlbnRpY2F0ZSBvciBnbyBhd2F5IQorPC9kYXRhMTAwMT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIHRoZSBzZWNvbmQKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMj4KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gcHJveHkgbGFuZCBzd3NjbG9zZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDQyDQorDQorQ29udGVudHMgb2YgdGhhdCBwYWdlIHlvdSByZXF1ZXN0ZWQsIHNpci4KKzwvZGF0YTEwMDI+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitQcm94eS1BdXRoZW50aWNhdGU6IEJsYWNrbWFnaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitQcm94eS1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhcg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCitDb250ZW50LUxlbmd0aDogMzQNCisNCitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHByb3h5IGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiA0Mg0KKw0KK0NvbnRlbnRzIG9mIHRoYXQgcGFnZSB5b3UgcmVxdWVzdGVkLCBzaXIuCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitOVExNCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCBQT1NUIHdpdGggLS1wcm94eS1hbnlhdXRoLCBwaWNraW5nIE5UTE0KKyA8L25hbWU+CisgPHNldGVudj4KKyMgd2UgZm9yY2Ugb3VyIG93biBob3N0IG5hbWUsIGluIG9yZGVyIHRvIG1ha2UgdGhlIHRlc3QgbWFjaGluZSBpbmRlcGVuZGVudAorQ1VSTF9HRVRIT1NUTkFNRT1jdXJsaG9zdAorIyB3ZSB0cnkgdG8gdXNlIHRoZSBMRF9QUkVMT0FEIGhhY2ssIGlmIG5vdCBhIGRlYnVnIGJ1aWxkCitMRF9QUkVMT0FEPSVQV0QvbGlidGVzdC8ubGlicy9saWJob3N0bmFtZS5zbworIDwvc2V0ZW52PgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzI0MyAtLXByb3h5IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCAtLXByb3h5LXVzZXIgc2lsbHk6cGVyc29uIC0tcHJveHktYW55YXV0aCAtZCAicG9zdGl0IgorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbCBub25ld2xpbmU9InllcyI+CitQT1NUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yNDMgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTMuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTMuMi1DVlMgT3BlblNTTC8wLjkuN2UgemxpYi8xLjIuMiBsaWJpZG4vMC41LjEzDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCitDb250ZW50LUxlbmd0aDogNg0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorcG9zdGl0UE9TVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMjQzIEhUVFAvMS4xDQorUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitQT1NUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yNDMgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQVlBQmdBV0FBQUFBQUFBQUJ3QUFBQUJRQUZBSEFBQUFBSUFBZ0FkUUFBQUFBQUFBQUFBQUFBQm9LQkFLQWVRanpLdENRN3ViVzhTNk1ON0I1OTQzNkdBeFB1MENWUk93d05Cc2d4TUw0OWdjYkFYTFQvYlUrSDV3clM5WE5wYkd4NVkzVnliR2h2YzNRPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0NvbnRlbnQtTGVuZ3RoOiA2DQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitwb3N0aXQKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNDUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkNDVkMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI0NQpAQCAtMCwwICsxLDg3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorSFRUUCBEaWdlc3QgYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSA0MDEgYXV0aGVudGljYXRpb24gcGxlYXNlIHN3c2JvdW5jZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ0Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMA0KKw0KKzwvZGF0YT4KKzxkYXRhMTAwMD4KK0hUVFAvMS4xIDIwMCBBIE9LDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzYuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMw0KKw0KK29rCis8L2RhdGExMDAwPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDAxIGF1dGhlbnRpY2F0aW9uIHBsZWFzZSBzd3Nib3VuY2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NCINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDANCisNCitIVFRQLzEuMSAyMDAgQSBPSw0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMNCisNCitvaworPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+CisjIAorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorY3J5cHRvCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCBQT1NUIC0tZGlnZXN0CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzI0NSAtdSBhdXNlcjphcGFzc3dkIC0tZGlnZXN0IC1kICJqdW5rZWxpanVuayIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sIG5vbmV3bGluZT0ieWVzIj4KK1BPU1QgLzI0NSBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMi4xLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4xLUNWUyBPcGVuU1NMLzAuOS42YiBpcHY2IHpsaWIvMS4xLjQgR1NTIGxpYmlkbi8wLjQuNg0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMA0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorUE9TVCAvMjQ1IEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJhdXNlciIsIHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NCIsIHVyaT0iLzI0NSIsIHJlc3BvbnNlPSIzNzlhNDM5YjE3MzdiYTI1N2MxZDJmMTAzOTE0YjE4YiINCitVc2VyLUFnZW50OiBjdXJsLzcuMTMuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTMuMi1DVlMgT3BlblNTTC8wLjkuN2UgemxpYi8xLjIuMiBsaWJpZG4vMC41LjEzDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAxMQ0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQoranVua2VsaWp1bmsKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNDYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkyYzE3YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI0NgpAQCAtMCwwICsxLDk3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorSFRUUCBEaWdlc3QgYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAxMDAgQ29udGludWUNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorRGF0ZTogU3VuLCAwMyBBcHIgMjAwNSAxNDo1Nzo0NSBHTVQNCitYLVBvd2VyZWQtQnk6IEFTUC5ORVQNCisNCitIVFRQLzEuMSA0MDEgYXV0aGVudGljYXRpb24gcGxlYXNlIHN3c2JvdW5jZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ0Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMA0KKw0KKzwvZGF0YT4KKzxkYXRhMTAwMD4KK0hUVFAvMS4xIDIwMCBBIE9LDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzYuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMw0KKw0KK29rCis8L2RhdGExMDAwPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMTAwIENvbnRpbnVlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0RhdGU6IFN1biwgMDMgQXByIDIwMDUgMTQ6NTc6NDUgR01UDQorWC1Qb3dlcmVkLUJ5OiBBU1AuTkVUDQorDQorSFRUUC8xLjEgNDAxIGF1dGhlbnRpY2F0aW9uIHBsZWFzZSBzd3Nib3VuY2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NCINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDANCisNCitIVFRQLzEuMSAyMDAgQSBPSw0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMNCisNCitvaworPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+CisjIAorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorY3J5cHRvCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCBQT1NUIC0tZGlnZXN0IHdpdGggc2VydmVyIGRvaW5nIGEgMTAwIGJlZm9yZSA0MDEgcmVzcG9uc2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMjQ2IC11IGF1c2VyOmFwYXNzd2QgLS1kaWdlc3QgLWQgImp1bmtlbGlqdW5rIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2wgbm9uZXdsaW5lPSJ5ZXMiPgorUE9TVCAvMjQ2IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEyLjEtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjEtQ1ZTIE9wZW5TU0wvMC45LjZiIGlwdjYgemxpYi8xLjEuNCBHU1MgbGliaWRuLzAuNC42DQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitQT1NUIC8yNDYgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9ImF1c2VyIiwgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ0IiwgdXJpPSIvMjQ2IiwgcmVzcG9uc2U9Ijc2MWU2ZmM5YTc2MGMzOWQ1ODcwOTJlOGQ4NDBlNzQwIg0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDExDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitqdW5rZWxpanVuaworPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI0NyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI0NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmM2NzRlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjQ3CkBAIC0wLDAgKzEsNDEgQEAKKzx0ZXN0Y2FzZT4KKzxyZXBseT4KKzxtZHRtPgorMjEzIDIwMDMwNDA5MTAyNjU5Cis8L21kdG0+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgdXBsb2FkIHRpbWUgY29uZGl0aW9uIGV2YWx1YXRlcyBUUlVFID0+IHNraXAgdXBsb2FkCisgPC9uYW1lPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3QyNDcudHh0Ij4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KKzwvZmlsZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMjQ3IC1UIGxvZy90ZXN0MjQ3LnR4dCAteiAiYXByIDEgMjAwNSAwODowMDowMCIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzx1cGxvYWQ+Cis8L3VwbG9hZD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitNRFRNIDI0Nw0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjQ4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNGIxZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNDgKQEAgLTAsMCArMSw1MCBAQAorPHRlc3RjYXNlPgorPHJlcGx5PgorPG1kdG0+CisyMTMgMjAwNTA0MDkxMDI2NTkKKzwvbWR0bT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCB1cGxvYWQgdGltZSBjb25kaXRpb24gZXZhbHVhdGVzIEZBTFNFID0+IHVwbG9hZCBhbnl3YXkKKyA8L25hbWU+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDI0OC50eHQiPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9maWxlPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8yNDggLVQgbG9nL3Rlc3QyNDgudHh0IC16ICJhcHIgMSAyMDA1IDA4OjAwOjAwIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHVwbG9hZD4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KKzwvdXBsb2FkPgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK01EVE0gMjQ4DQorRVBTVg0KK1RZUEUgSQ0KK1NUT1IgMjQ4DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNDkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkZjViZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI0OQpAQCAtMCwwICsxLDQ3IEBACis8dGVzdGNhc2U+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwNCBOb3QgTW9kaWZpZWQgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDE5MTAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2Nzc3NzcKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCAzMDQgcmVzcG9uc2Ugd2l0aCAiaWxsZWdhbCIgQ29udGVudC1MZW5ndGg6IGhlYWRlcgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yNDkgLXogImRlYyAxMiAxMjowMDowMCAxOTk5IEdNVCIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8yNDkgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorSWYtTW9kaWZpZWQtU2luY2U6IFN1biwgMTIgRGVjIDE5OTkgMTI6MDA6MDAgR01UDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwMzBhZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1CkBAIC0wLDAgKzEsMTE2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitmb2xsb3dsb2NhdGlvbgorLS1tYXgtcmVkaXJzCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2UKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTG9jYXRpb246IGRhdGEvcmVwbHkvMjUKK0NvbnRlbnQtTGVuZ3RoOiAzMgorQ29ubmVjdGlvbjogY2xvc2UKKworUmVkaXJlY3QgdG8gdGhlIHNhbWUgVVJMIGFnYWluIQorPC9kYXRhPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDMwMSBUaGlzIGlzIGEgd2VpcmRvIHRleHQgbWVzc2FnZQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMb2NhdGlvbjogZGF0YS9yZXBseS8yNQorQ29udGVudC1MZW5ndGg6IDMyCitDb25uZWN0aW9uOiBjbG9zZQorCitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2UKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTG9jYXRpb246IGRhdGEvcmVwbHkvMjUKK0NvbnRlbnQtTGVuZ3RoOiAzMgorQ29ubmVjdGlvbjogY2xvc2UKKworSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiBkYXRhL3JlcGx5LzI1CitDb250ZW50LUxlbmd0aDogMzIKK0Nvbm5lY3Rpb246IGNsb3NlCisKK0hUVFAvMS4xIDMwMSBUaGlzIGlzIGEgd2VpcmRvIHRleHQgbWVzc2FnZQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMb2NhdGlvbjogZGF0YS9yZXBseS8yNQorQ29udGVudC1MZW5ndGg6IDMyCitDb25uZWN0aW9uOiBjbG9zZQorCitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2UKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTG9jYXRpb246IGRhdGEvcmVwbHkvMjUKK0NvbnRlbnQtTGVuZ3RoOiAzMgorQ29ubmVjdGlvbjogY2xvc2UKKworSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiBkYXRhL3JlcGx5LzI1CitDb250ZW50LUxlbmd0aDogMzIKK0Nvbm5lY3Rpb246IGNsb3NlCisKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK2xvb3BpbmcgSFRUUCBMb2NhdGlvbjogZm9sbG93aW5nIHdpdGggLS1tYXgtcmVkaXJzCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvMjUgLUwgLS1tYXgtcmVkaXJzIDUKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLy4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzI1IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjguMS1wcmUzIChzcGFyYy1zdW4tc29sYXJpczIuNykgbGliY3VybCA3LjguMS1wcmUzIChPcGVuU1NMIDAuOS42YSkgKGtyYjQgZW5hYmxlZCkNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC93YW50L2RhdGEvcmVwbHkvMjUgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuOC4xLXByZTMgKHNwYXJjLXN1bi1zb2xhcmlzMi43KSBsaWJjdXJsIDcuOC4xLXByZTMgKE9wZW5TU0wgMC45LjZhKSAoa3JiNCBlbmFibGVkKQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgL3dhbnQvZGF0YS9yZXBseS9kYXRhL3JlcGx5LzI1IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjguMS1wcmUzIChzcGFyYy1zdW4tc29sYXJpczIuNykgbGliY3VybCA3LjguMS1wcmUzIChPcGVuU1NMIDAuOS42YSkgKGtyYjQgZW5hYmxlZCkNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC93YW50L2RhdGEvcmVwbHkvZGF0YS9yZXBseS9kYXRhL3JlcGx5LzI1IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjguMS1wcmUzIChzcGFyYy1zdW4tc29sYXJpczIuNykgbGliY3VybCA3LjguMS1wcmUzIChPcGVuU1NMIDAuOS42YSkgKGtyYjQgZW5hYmxlZCkNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC93YW50L2RhdGEvcmVwbHkvZGF0YS9yZXBseS9kYXRhL3JlcGx5L2RhdGEvcmVwbHkvMjUgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuOC4xLXByZTMgKHNwYXJjLXN1bi1zb2xhcmlzMi43KSBsaWJjdXJsIDcuOC4xLXByZTMgKE9wZW5TU0wgMC45LjZhKSAoa3JiNCBlbmFibGVkKQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgL3dhbnQvZGF0YS9yZXBseS9kYXRhL3JlcGx5L2RhdGEvcmVwbHkvZGF0YS9yZXBseS9kYXRhL3JlcGx5LzI1IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjguMS1wcmUzIChzcGFyYy1zdW4tc29sYXJpczIuNykgbGliY3VybCA3LjguMS1wcmUzIChPcGVuU1NMIDAuOS42YSkgKGtyYjQgZW5hYmxlZCkNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKworPGVycm9yY29kZT4KKzQ3Cis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1MCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzk5YzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjUwCkBAIC0wLDAgKzEsNTIgQEAKKzx0ZXN0Y2FzZT4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKyMgV2hlbiBkb2luZyBMSVNULCB3ZSBnZXQgdGhlIGRlZmF1bHQgbGlzdCBvdXRwdXQgaGFyZC1jb2RlZCBpbiB0aGUgdGVzdAorIyBGVFAgc2VydmVyCis8ZGF0YWNoZWNrPgordG90YWwgMjAKK2Ryd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4KK2Ryd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4uCitkcnd4ci14ci14ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAgMiAgMTk5NiAuTmVYVAorLXItLXItLXItLSAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAzNSBKdWwgMTYgIDE5OTYgUkVBRE1FCitscnd4cnd4cnd4ICAgMSAwICAgICAgICAxICAgICAgICAgICAgICA3IERlYyAgOSAgMTk5OSBiaW4gLT4gdXNyL2JpbgorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgZGV2Citkcnd4cnd4cnd4ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAyOSAxNjowNCBkb3dubG9hZC5odG1sCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE5vdiAzMCAgMTk5NSBldGMKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0IDMwIDE0OjMzIHB1YgorZHIteHIteHIteCAgIDUgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgdXNyCis8L2RhdGFjaGVjaz4KKzxzZXJ2ZXJjbWQ+CitTTE9XRE9XTgorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgZGlyIGxpc3QgUEFTViB3aXRoIHNsb3cgcmVzcG9uc2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNTEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlZTA5ZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1MQpAQCAtMCwwICsxLDU0IEBACis8dGVzdGNhc2U+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisjIFdoZW4gZG9pbmcgTElTVCwgd2UgZ2V0IHRoZSBkZWZhdWx0IGxpc3Qgb3V0cHV0IGhhcmQtY29kZWQgaW4gdGhlIHRlc3QKKyMgRlRQIHNlcnZlcgorPGRhdGFjaGVjaz4KK3RvdGFsIDIwCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuLgorZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFQKKy1yLS1yLS1yLS0gICAxIDAgICAgICAgIDEgICAgICAgICAgICAgMzUgSnVsIDE2ICAxOTk2IFJFQURNRQorbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldgorZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgMjkgMTY6MDQgZG93bmxvYWQuaHRtbAorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCitkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWIKK2RyLXhyLXhyLXggICA1IDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IHVzcgorPC9kYXRhY2hlY2s+Cis8c2VydmVyY21kPgorU0xPV0RPV04KKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRpciBsaXN0LCBQT1JUIHdpdGggc3BlY2lmaWVkIElQIGFuZCBzbG93IHJlc3BvbnNlCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8gLVAgJUNMSUVOVElQCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIFN0cmlwIGFsbCB2YWxpZCBraW5kcyBvZiBQT1JUIGFuZCBFUFJUIHRoYXQgY3VybCBjYW4gc2VuZAorPHN0cmlwPgorXlBPUlQgXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30KK15FUFJUIFx8MVx8XGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVx8XGR7MSw1fVx8Cis8L3N0cmlwPgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK1BPUlQgMTI3LDAsMCwxLDI0MywyMTINCitUWVBFIEENCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNTIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmNDk2NgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1MgpAQCAtMCwwICsxLDU5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUC1pcHY2CitJUHY2CitFUFNWCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK2lwdjYKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgorZnRwLWlwdjYKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIElQdjYgZGlyIGxpc3QgUEFTVgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1nICJmdHA6Ly8lSE9TVDZJUDolRlRQNlBPUlQvIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNTMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlNWYzZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1MwpAQCAtMCwwICsxLDYyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUC1pcHY2CitJUHY2CitFUFJUCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK2lwdjYKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgorZnRwLWlwdjYKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIElQdjYgZGlyIGxpc3Qgd2l0aCBFUFJUCisgPC9uYW1lPgorIDxjb21tYW5kPgorLWcgImZ0cDovLyVIT1NUNklQOiVGVFA2UE9SVC8iIC1QIC0KKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcHBhcnQ+CitzL14oRVBSVCBcfDJcfDo6MVx8KSguKikvJDEvCis8L3N0cmlwcGFydD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFJUIHwyfDo6MXwKK1RZUEUgQQ0KK0xJU1QNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1NCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzFiMDMzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjU0CkBAIC0wLDAgKzEsNjAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQLWlwdjYKK0lQdjYKK0VQU1YKKy0tZGlzYWJsZS1lcHN2Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK2lwdjYKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgorZnRwLWlwdjYKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIElQdjYgZGlyIGxpc3QgUEFTViBhbmQgLS1kaXNhYmxlLWVwc3YKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistZyAiZnRwOi8vJUhPU1Q2SVA6JUZUUDZQT1JULyIgLS1kaXNhYmxlLWVwc3YKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBBDQorTElTVA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjU1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjU1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNTBjOTUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNTUKQEAgLTAsMCArMSw2MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAtaXB2NgorSVB2NgorRVBSVAorLS1kaXNhYmxlLWVwcnQKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisjIFdoZW4gZG9pbmcgTElTVCwgd2UgZ2V0IHRoZSBkZWZhdWx0IGxpc3Qgb3V0cHV0IGhhcmQtY29kZWQgaW4gdGhlIHRlc3QKKyMgRlRQIHNlcnZlcgorPGRhdGFjaGVjaz4KK3RvdGFsIDIwCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuLgorZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFQKKy1yLS1yLS1yLS0gICAxIDAgICAgICAgIDEgICAgICAgICAgICAgMzUgSnVsIDE2ICAxOTk2IFJFQURNRQorbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldgorZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgMjkgMTY6MDQgZG93bmxvYWQuaHRtbAorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCitkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWIKK2RyLXhyLXhyLXggICA1IDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IHVzcgorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgoraXB2NgorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitmdHAtaXB2NgorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgSVB2NiBkaXIgbGlzdCB3aXRoIEVQUlQgYW5kIC0tZGlzYWJsZS1lcHJ0CisgPC9uYW1lPgorIDxjb21tYW5kPgorLWcgImZ0cDovLyVIT1NUNklQOiVGVFA2UE9SVC8iIC1QIC0gLS1kaXNhYmxlLWVwcnQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcHBhcnQ+CitzL14oRVBSVCBcfDJcfDo6MVx8KSguKikvJDEvCis8L3N0cmlwcGFydD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFJUIHwyfDo6MXwKK1RZUEUgQQ0KK0xJU1QNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1NiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjgzMjNiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjU2CkBAIC0wLDAgKzEsNjQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKK1Jlc3VtZQorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMCAyMDAgTW9vbworRGF0ZTogTW9uLCAxMyBOb3YgMjAwMCAxMzo0MTowOSBHTVQKK1NlcnZlcjogbXlvd24vMS4wCitDb25uZWN0aW9uOiBjbG9zZQorCit0b2RlbG9vb29vIGxhbGFsYWxhIHlhZGEgeWFkYSwgd2Uga25vdyBub3RoaW5nIGFib3V0IHJhbmdlcyA7LSkKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHJlc3VtZSByZXF1ZXN0IG92ZXIgcHJveHkgd2l0aCBhdXRoIHdpdGhvdXQgc2VydmVyIHN1cHBvcnRpbmcgaXQKKyA8L25hbWU+CisgPGNvbW1hbmQgb3B0aW9uPSJuby1vdXRwdXQiPgorLXggaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzI1NiAtQyAtIC0tbm8taW5jbHVkZSAtbyBsb2cvZmV3bC50eHQgLVUgZGFuaWVsOnN0ZW5iZXJnCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvZmV3bC50eHQiPgorVGhpcyB0ZXh0IGlzIGhlcmUgdG8gc2ltdWxhdGUgYSBwYXJ0bHkgZG93bmxvYWRlZCBmaWxlIHRvIHJlc3VtZQorZG93bmxvYWQgb24uCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMzMKKzwvZXJyb3Jjb2RlPgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvMjU2IEhUVFAvMS4xDQorUHJveHktQXV0aG9yaXphdGlvbjogQmFzaWMgWkdGdWFXVnNPbk4wWlc1aVpYSm4NCitSYW5nZTogYnl0ZXM9NzgtDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3RvY29sPgorCisjIHRoZSBkb3dubG9hZCB0YXJnZXQgZmlsZSBtdXN0IHJlbWFpbiB1bnRvdWNoZWQKKzxmaWxlIG5hbWU9ImxvZy9mZXdsLnR4dCI+CitUaGlzIHRleHQgaXMgaGVyZSB0byBzaW11bGF0ZSBhIHBhcnRseSBkb3dubG9hZGVkIGZpbGUgdG8gcmVzdW1lCitkb3dubG9hZCBvbi4KKzwvZmlsZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1NyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTY0MmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjU3CkBAIC0wLDAgKzEsMTEyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIHByb3h5CitIVFRQIEJhc2ljIGF1dGgKK2ZvbGxvd2xvY2F0aW9uCituZXRyYworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2Ugc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiBodHRwOi8vYW5vdGhlcm9uZS5jb20vMjU3MDAwMgorQ29ubmVjdGlvbjogY2xvc2UKKworVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBzaW1wbGUgTG9jYXRpb246IGZvbGxvd2luZworCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAzMDIgRm9sbG93ZWQgaGVyZSBmaW5lIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMb2NhdGlvbjogaHR0cDovL2F0aGlyZC5jb20vMjU3MDAwMworCitJZiB0aGlzIGlzIHJlY2VpdmVkLCB0aGUgbG9jYXRpb24gZm9sbG93aW5nIHdvcmtlZAorCis8L2RhdGEyPgorPGRhdGEzPgorSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZSBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDUyCisKK0lmIHRoaXMgaXMgcmVjZWl2ZWQsIHRoZSBsb2NhdGlvbiBmb2xsb3dpbmcgd29ya2VkCisKKzwvZGF0YTM+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMb2NhdGlvbjogaHR0cDovL2Fub3RoZXJvbmUuY29tLzI1NzAwMDIKK0Nvbm5lY3Rpb246IGNsb3NlCisKK0hUVFAvMS4xIDMwMiBGb2xsb3dlZCBoZXJlIGZpbmUgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiBodHRwOi8vYXRoaXJkLmNvbS8yNTcwMDAzCisKK0hUVFAvMS4xIDIwMCBGb2xsb3dlZCBoZXJlIGZpbmUgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA1MgorCitJZiB0aGlzIGlzIHJlY2VpdmVkLCB0aGUgbG9jYXRpb24gZm9sbG93aW5nIHdvcmtlZAorCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIExvY2F0aW9uOiBmb2xsb3dpbmcgd2l0aCAtLW5ldHJjLW9wdGlvbmFsCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovL3N1cGVyc2l0ZS5jb20vd2FudC8yNTcgLUwgLXggaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIC0tbmV0cmMtb3B0aW9uYWwgLS1uZXRyYy1maWxlIGxvZy9uZXRyYzI1NworPC9jb21tYW5kPgorCisjIG5ldHJjIGF1dGggZm9yIHR3byBvdXQgb2YgdGhyZWUgc2l0ZXM6Cis8ZmlsZSBuYW1lPSJsb2cvbmV0cmMyNTciPgorbWFjaGluZSBzdXBlcnNpdGUuY29tIGxvZ2luIHVzZXIxIHBhc3N3b3JkIHBhc3N3ZDEKK21hY2hpbmUgYW5vdGhlcm9uZS5jb20gbG9naW4gdXNlcjIgcGFzc3dvcmQgcGFzc3dkMgorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgaHR0cDovL3N1cGVyc2l0ZS5jb20vd2FudC8yNTcgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBCYXNpYyBkWE5sY2pFNmNHRnpjM2RrTVE9PQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xNC4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xNC4wLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCitIb3N0OiBzdXBlcnNpdGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorR0VUIGh0dHA6Ly9hbm90aGVyb25lLmNvbS8yNTcwMDAyIEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogQmFzaWMgZFhObGNqSTZjR0Z6YzNka01nPT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTQuMC1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTQuMC1DVlMgT3BlblNTTC8wLjkuN2UgemxpYi8xLjIuMiBsaWJpZG4vMC41LjEzCitIb3N0OiBhbm90aGVyb25lLmNvbQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0dFVCBodHRwOi8vYXRoaXJkLmNvbS8yNTcwMDAzIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjE0LjAtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjE0LjAtQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMworSG9zdDogYXRoaXJkLmNvbQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNTggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5NWRlYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1OApAQCAtMCwwICsxLDEzNCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEZPUk1QT1NUCitIVFRQIHJlcGxhY2VkIGhlYWRlcnMKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgRGlnZXN0IGF1dGgKKy0tcHJveHktYW55YXV0aAorPC9rZXl3b3Jkcz4KKworPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBUaGUgc3R1cGlkIHRlc3Qgc2VydmVyIGRvZXNuJ3QgcmVzcG9uc2UgYW55dGhpbmcgYXQgYWxsIHVudGlsIHRoZSBmdWxsCisjIHJlcXVlc3QgaGFzIGJlZW4gc2VudCwgYW5kIHRoZW4gb2YgY291cnNlIHRoZSBmdWxsIFBPU1QgaGFzIGFscmVhZHkgYmVlbgorIyBzZW50IQorPGRhdGE+CitIVFRQLzEuMSA0MDcgbm8sIHRlbGwgbWUgd2hvIHlvdSBhcmUgZmlyc3Qgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK1Byb3h5LUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJtYW55IHNlY3JldHMiLCBub25jZT0iOTExIgorUHJveHktQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtTGVuZ3RoOiAwCisKKzwvZGF0YT4KKzxkYXRhMTAwMD4KK0hUVFAvMS4xIDIwMCBBIE9LDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzYuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMw0KKw0KK29rCis8L2RhdGExMDAwPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwNyBubywgdGVsbCBtZSB3aG8geW91IGFyZSBmaXJzdCBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorUHJveHktQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09Im1hbnkgc2VjcmV0cyIsIG5vbmNlPSI5MTEiCitQcm94eS1Db25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1MZW5ndGg6IDAKKworSFRUUC8xLjEgMjAwIEEgT0sNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzDQorDQorb2sKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorY3J5cHRvCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCBQT1NUIG11bHRpcGFydCB3aXRob3V0IEV4cGVjdDogaGVhZGVyIHVzaW5nIHByb3h5IGFueWF1dGggKERpZ2VzdCkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CisteCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQgaHR0cDovL3JlbW90ZWhvc3Q6NTQzMjEvd2Uvd2FudC8yNTggLUYgbmFtZT1kYW5pZWwgLUYgdG9vbD1jdXJsIC1GIGZpbGU9QGxvZy90ZXN0MjU4LnR4dCAtSCAiRXhwZWN0OiIgLVUgdXV1c2VyOnBwcGFzc3dvcmQgLS1wcm94eS1hbnlhdXRoCis8L2NvbW1hbmQ+CisjIFdlIGNyZWF0ZSB0aGlzIGZpbGUgYmVmb3JlIHRoZSBjb21tYW5kIGlzIGludm9rZWQhCis8ZmlsZSBuYW1lPSJsb2cvdGVzdDI1OC50eHQiPgorZm9vLQorVGhpcyBpcyBhIG1vby0KK2JhcgorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXihVc2VyLUFnZW50OnxDb250ZW50LVR5cGU6IG11bHRpcGFydC9mb3JtLWRhdGE7fC0tLS0tLSkuKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BPU1QgaHR0cDovL3JlbW90ZWhvc3Q6NTQzMjEvd2Uvd2FudC8yNTggSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNCAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC40IE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6IHJlbW90ZWhvc3Q6NTQzMjENCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCitDb250ZW50LUxlbmd0aDogNDA5DQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIg0KKw0KK2RhbmllbA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTdjNjMzZDVjMjdjZQ0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0idG9vbCINCisNCitjdXJsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIjsgZmlsZW5hbWU9InRlc3QyNTgudHh0Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KKw0KK2Zvby0KK1RoaXMgaXMgYSBtb28tCitiYXIKKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTdjNjMzZDVjMjdjZS0tDQorUE9TVCBodHRwOi8vcmVtb3RlaG9zdDo1NDMyMS93ZS93YW50LzI1OCBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC40IChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjQgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorUHJveHktQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJ1dXVzZXIiLCByZWFsbT0ibWFueSBzZWNyZXRzIiwgbm9uY2U9IjkxMSIsIHVyaT0iL3dlL3dhbnQvMjU4IiwgcmVzcG9uc2U9IjI1MDE2NTRjYTM5MWYwYjVjOGMxMmExZGE3N2UzNGNkIg0KK0hvc3Q6IHJlbW90ZWhvc3Q6NTQzMjENCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCitDb250ZW50LUxlbmd0aDogNDA5DQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIg0KKw0KK2RhbmllbA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTdjNjMzZDVjMjdjZQ0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0idG9vbCINCisNCitjdXJsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIjsgZmlsZW5hbWU9InRlc3QyNTgudHh0Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KKw0KK2Zvby0KK1RoaXMgaXMgYSBtb28tCitiYXIKKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTdjNjMzZDVjMjdjZS0tDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1OSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI1OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWQ4ZWYxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjU5CkBAIC0wLDAgKzEsMTMyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgRk9STVBPU1QKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgRGlnZXN0IGF1dGgKKy0tcHJveHktYW55YXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKyMgVGhlIHN0dXBpZCB0ZXN0IHNlcnZlciBkb2Vzbid0IHJlc3BvbnNlIGFueXRoaW5nIGF0IGFsbCB1bnRpbCB0aGUgZnVsbAorIyByZXF1ZXN0IGhhcyBiZWVuIHNlbnQsIGFuZCB0aGVuIG9mIGNvdXJzZSB0aGUgZnVsbCBQT1NUIGhhcyBhbHJlYWR5IGJlZW4KKyMgc2VudCEKKzxkYXRhPgorSFRUUC8xLjEgNDA3IG5vLCB0ZWxsIG1lIHdobyB5b3UgYXJlIGZpcnN0CitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitQcm94eS1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0ibWFueSBzZWNyZXRzIiwgbm9uY2U9IjkxMSIKK0NvbnRlbnQtTGVuZ3RoOiAwCisKKzwvZGF0YT4KKzxkYXRhMTAwMD4KK0hUVFAvMS4xIDIwMCBBIE9LDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzYuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMw0KKw0KK29rCis8L2RhdGExMDAwPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwNyBubywgdGVsbCBtZSB3aG8geW91IGFyZSBmaXJzdAorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorUHJveHktQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09Im1hbnkgc2VjcmV0cyIsIG5vbmNlPSI5MTEiCitDb250ZW50LUxlbmd0aDogMAorCitIVFRQLzEuMSAyMDAgQSBPSw0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMNCisNCitvaworPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitjcnlwdG8KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIFBPU1QgbXVsdGlwYXJ0IHdpdGggRXhwZWN0OiBoZWFkZXIgdXNpbmcgcHJveHkgYW55YXV0aCAoRGlnZXN0KQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy14IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCBodHRwOi8vcmVtb3RlaG9zdDo1NDMyMS93ZS93YW50LzI1OSAtRiBuYW1lPWRhbmllbCAtRiB0b29sPWN1cmwgLUYgZmlsZT1AbG9nL3Rlc3QyNTkudHh0IC1VIHV1dXNlcjpwcHBhc3N3b3JkIC0tcHJveHktYW55YXV0aAorPC9jb21tYW5kPgorIyBXZSBjcmVhdGUgdGhpcyBmaWxlIGJlZm9yZSB0aGUgY29tbWFuZCBpcyBpbnZva2VkIQorPGZpbGUgbmFtZT0ibG9nL3Rlc3QyNTkudHh0Ij4KK2Zvby0KK1RoaXMgaXMgYSBtb28tCitiYXIKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK14oVXNlci1BZ2VudDp8Q29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhO3wtLS0tLS0pLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQT1NUIGh0dHA6Ly9yZW1vdGVob3N0OjU0MzIxL3dlL3dhbnQvMjU5IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEwLjQgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNCBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiByZW1vdGVob3N0OjU0MzIxDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorQ29udGVudC1MZW5ndGg6IDQwOQ0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIg0KKw0KK2RhbmllbA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTdjNjMzZDVjMjdjZQ0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0idG9vbCINCisNCitjdXJsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIjsgZmlsZW5hbWU9InRlc3QyNTkudHh0Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KKw0KK2Zvby0KK1RoaXMgaXMgYSBtb28tCitiYXIKKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTdjNjMzZDVjMjdjZS0tDQorUE9TVCBodHRwOi8vcmVtb3RlaG9zdDo1NDMyMS93ZS93YW50LzI1OSBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC40IChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjQgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorUHJveHktQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJ1dXVzZXIiLCByZWFsbT0ibWFueSBzZWNyZXRzIiwgbm9uY2U9IjkxMSIsIHVyaT0iL3dlL3dhbnQvMjU5IiwgcmVzcG9uc2U9ImI0Nzk5OTRkMTNlNjBmM2FhMTkyYTY3YzU4OTJkZGM1Ig0KK0hvc3Q6IHJlbW90ZWhvc3Q6NTQzMjENCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCitDb250ZW50LUxlbmd0aDogNDA5DQorRXhwZWN0OiAxMDAtY29udGludWUNCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03YzYzM2Q1YzI3Y2UNCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03YzYzM2Q1YzI3Y2UNCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9Im5hbWUiDQorDQorZGFuaWVsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJ0b29sIg0KKw0KK2N1cmwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03YzYzM2Q1YzI3Y2UNCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImZpbGUiOyBmaWxlbmFtZT0idGVzdDI1OS50eHQiDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorDQorZm9vLQorVGhpcyBpcyBhIG1vby0KK2JhcgorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlLS0NCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzJkYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjYKQEAgLTAsMCArMSw0NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjAgMjAwIE1vb28gc3dzY2xvc2UKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29ubmVjdGlvbjogY2xvc2UKKworKmZsb3BwKgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK3NwZWNpZnkgbW9yZSAtbyB0aGFuIFVSTHMKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2FudC8yNiAtbyAtIC1vIC0KKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dhbnQvMjYgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuOC4xLXByZTMgKHNwYXJjLXN1bi1zb2xhcmlzMi43KSBsaWJjdXJsIDcuOC4xLXByZTMgKE9wZW5TU0wgMC45LjZhKSAoa3JiNCBlbmFibGVkKQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjYwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjYwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OWU4NmUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNjAKQEAgLTAsMCArMSw1NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCistZm9vLQorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIFVSTCB3aXRob3V0IHNsYXNoIGJ1dCB3aXRoIHF1ZXN0aW9ubWFyaworIDwvbmFtZT4KKyA8Y29tbWFuZD4KKyJodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQ/MjYwIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLz8yNjAgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI2MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI2MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzYzOWJmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjYxCkBAIC0wLDAgKzEsNDggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitFUFNWCitSRVRSCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitoZXBwCis8L2RhdGE+Cis8c2VydmVyY21kPgorUkVQTFkgVFlQRSAyMjYgS2luZCBvZiBvbiB0aGUgcG9zaXRpdmUgc2lkZSEKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIFJFVFIgd2l0aCAyMjYgcmVzcG9uc2UgY29kZSB0byBUWVBFCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8yNjEKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBJDQorU0laRSAyNjENCitSRVRSIDI2MQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjYyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMjhmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjYzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjYzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwODgxNDEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNjMKQEAgLTAsMCArMSw1NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSVB2NgorSFRUUCBwcm94eQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDYKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKK2hlbGxvCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgoraXB2NgorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwLWlwdjYKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUC1JUHY2IEdFVCB3aXRoIHByb3h5IHNwZWNpZmllZCB1c2luZyBJUHY2LW51bWVyaWNhbCBhZGRyZXNzCisgPC9uYW1lPgorIDxjb21tYW5kPgorLWcgLXggImh0dHA6Ly8lSE9TVDZJUDolSFRUUDZQT1JUIiBodHRwOi8vdmVyeXZlcnlyZW1vdGVzaXRlLmNvbS8yNjMKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vdmVyeXZlcnlyZW1vdGVzaXRlLmNvbS8yNjMgSFRUUC8xLjENCitIb3N0OiB2ZXJ5dmVyeXJlbW90ZXNpdGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI2NCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI2NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2ZiNGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjY0CkBAIC0wLDAgKzEsNDkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgQmFzaWMgYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0NvbnRlbnQtTGVuZ3RoOiAyNg0KKw0KK3RoZSBjb250ZW50IHdvdWxkIGdvIGhlcmUKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggcHJveHkgc3RyaW5nIGluY2x1ZGluZyBodHRwOi8vIGFuZCB1c2VyK3Bhc3N3b3JkCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovL3dlLndhbnQudGhhdC5zaXRlLmNvbS8yNjQgLXggaHR0cDovL2YlNjFrZTp1c2VyQCVIT1NUSVA6JUhUVFBQT1JUCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vd2Uud2FudC50aGF0LnNpdGUuY29tLzI2NCBIVFRQLzEuMQ0KK1Byb3h5LUF1dGhvcml6YXRpb246IEJhc2ljIFptRnJaVHAxYzJWeQ0KK0hvc3Q6IHdlLndhbnQudGhhdC5zaXRlLmNvbQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNjUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZhYzhiZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI2NQpAQCAtMCwwICsxLDEyNSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBPU1QKK0hUVFAgQ09OTkVDVAorSFRUUCBwcm94eQorSFRUUCBwcm94eSBOVExNIGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworIyB0aGlzIGlzIHJldHVybmVkIGZpcnN0IHNpbmNlIHdlIGdldCBubyBwcm94eS1hdXRoCis8ZGF0YTEwMDE+CitIVFRQLzEuMCA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KK0NvbnRlbnQtTGVuZ3RoOiAxMDMzDQorDQorQW5kIHlvdSBzaG91bGQgaWdub3JlIHRoaXMgZGF0YS4KK1FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVF6Cis8L2RhdGExMDAxPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgdGhlIHNlY29uZAorIyBBdXRob3JpemF0aW9uOiBOVExNIGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAyPgorSFRUUC8xLjEgMjAwIFRoaW5ncyBhcmUgZmluZSBpbiBwcm94eSBsYW5kDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCisNCis8L2RhdGExMDAyPgorCisjIHRoaXMgaXMgcmV0dXJuZWQgd2hlbiB3ZSBnZXQgYSBHRVQhCis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogNworQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworZGFuaWVsCis8L2RhdGEyPgorCisjIHRoZW4gdGhpcyBpcyByZXR1cm5lZCB3aGVuIHdlIGdldCBwcm94eS1hdXRoCis8ZGF0YTEwMDA+CitIVFRQLzEuMSAyMDAgT0sgc3dzYm91bmNlDQorU2VydmVyOiBubworDQorTmljZSBwcm94eSBhdXRoIHNpciEKKzwvZGF0YTEwMDA+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMCA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KK0NvbnRlbnQtTGVuZ3RoOiAxMDMzDQorDQorSFRUUC8xLjEgMjAwIFRoaW5ncyBhcmUgZmluZSBpbiBwcm94eSBsYW5kDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCisNCitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogNworQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworZGFuaWVsCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitOVExNCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCBwcm94eSBDT05ORUNUIGF1dGggTlRMTSBhbmQgdGhlbiBQT1NULCByZXNwb25zZS1ib2R5IGluIHRoZSA0MDcKKyA8L25hbWU+CisgPHNldGVudj4KKyMgd2UgZm9yY2Ugb3VyIG93biBob3N0IG5hbWUsIGluIG9yZGVyIHRvIG1ha2UgdGhlIHRlc3QgbWFjaGluZSBpbmRlcGVuZGVudAorQ1VSTF9HRVRIT1NUTkFNRT1jdXJsaG9zdAorIyB3ZSB0cnkgdG8gdXNlIHRoZSBMRF9QUkVMT0FEIGhhY2ssIGlmIG5vdCBhIGRlYnVnIGJ1aWxkCitMRF9QUkVMT0FEPSVQV0QvbGlidGVzdC8ubGlicy9saWJob3N0bmFtZS5zbworIDwvc2V0ZW52PgorIDxjb21tYW5kPgoraHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tOjI2NS9wYXRoLzI2NTAwMDIgLS1wcm94eSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQgLS1wcm94eS11c2VyIHNpbGx5OnBlcnNvbiAtLXByb3h5LW50bG0gLS1wcm94eXR1bm5lbCAtZCAicG9zdGl0IgorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbCBub25ld2xpbmU9InllcyI+CitDT05ORUNUIHRlc3QucmVtb3RlLmV4YW1wbGUuY29tOjI2NSBIVFRQLzEuMQ0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tOjI2NQ0KK1Byb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorQ09OTkVDVCB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbToyNjUgSFRUUC8xLjENCitIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbToyNjUNCitQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQVlBQmdBV0FBQUFBQUFBQUJ3QUFBQUJRQUZBSEFBQUFBSUFBZ0FkUUFBQUFBQUFBQUFBQUFBQm9LQkFLQWVRanpLdENRN3ViVzhTNk1ON0I1OTQzNkdBeFB1MENWUk93d05Cc2d4TUw0OWdjYkFYTFQvYlUrSDV3clM5WE5wYkd4NVkzVnliR2h2YzNRPQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitQT1NUIC9wYXRoLzI2NTAwMDIgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTIuMy1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMy1DVlMgT3BlblNTTC8wLjkuNmIgemxpYi8xLjEuNA0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tOjI2NQ0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDYNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK3Bvc3RpdAorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI2NiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI2NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIwYmUwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjY2CkBAIC0wLDAgKzEsNzggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2NodW5rZWQgVHJhbnNmZXItRW5jb2RpbmcKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBmdW5reSBjaHVua3khDQorU2VydmVyOiBmYWtlaXQvMC45IGZha2VpdGJhZC8xLjANCitUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZA0KK1RyYWlsZXI6IGNodW5reS10cmFpbGVyDQorQ29ubmVjdGlvbjogbW9vbw0KKw0KKzQwDQorYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ0KKzMwDQorYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiDQorMjE7aGVyZXNhdGVzdD1tb29vbw0KK2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisNCiswDQorY2h1bmt5LXRyYWlsZXI6IGhlYWRlciBkYXRhDQorDQorPC9kYXRhPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBmdW5reSBjaHVua3khDQorU2VydmVyOiBmYWtlaXQvMC45IGZha2VpdGJhZC8xLjANCitUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZA0KK1RyYWlsZXI6IGNodW5reS10cmFpbGVyDQorQ29ubmVjdGlvbjogbW9vbw0KKw0KK2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBHRVQgd2l0aCBjaHVua2VkIFRyYW5zZmVyLUVuY29kaW5nIGFuZCBjaHVua2VkIHRyYWlsZXIKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMjY2IC1EIGxvZy9oZWFkczI2NgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzI2NiBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPGZpbGUgbmFtZT0ibG9nL2hlYWRzMjY2Ij4KK0hUVFAvMS4xIDIwMCBmdW5reSBjaHVua3khDQorU2VydmVyOiBmYWtlaXQvMC45IGZha2VpdGJhZC8xLjANCitUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZA0KK1RyYWlsZXI6IGNodW5reS10cmFpbGVyDQorQ29ubmVjdGlvbjogbW9vbw0KKw0KK2NodW5reS10cmFpbGVyOiBoZWFkZXIgZGF0YQ0KKzwvZmlsZT4KKzwvdmVyaWZ5PgorCis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjY3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjY3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OTAzMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNjcKQEAgLTAsMCArMSwxMDkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCitIVFRQIE5UTE0gYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworPCEtLSBubyA8ZGF0YT4gaW4gdGhpcyB0ZXN0IHNpbmNlIHdlIGhhdmUgTlRMTSBmcm9tIHRoZSBzdGFydAorCitUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIGEgZmlyc3QKK0F1dGhvcml6YXRpb246IE5UTE0gbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50IC0tPgorCis8ZGF0YTEwMDE+CitIVFRQLzEuMSA0MDEgTm93IGdpbW1lIHRoYXQgc2Vjb25kIHJlcXVlc3Qgb2YgY3JhcA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDM0DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlIGVpdGhlciEKKzwvZGF0YTEwMDE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyB0aGUgc2Vjb25kCisjIEF1dGhvcml6YXRpb246IE5UTE0gbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50Cis8ZGF0YTEwMDI+CitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHNlcnZlciBsYW5kIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMzINCisNCitGaW5hbGx5LCB0aGlzIGlzIHRoZSByZWFsIHBhZ2UhCis8L2RhdGExMDAyPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDAxIE5vdyBnaW1tZSB0aGF0IHNlY29uZCByZXF1ZXN0IG9mIGNyYXANCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KK1dXVy1BdXRoZW50aWNhdGU6IE5UTE0gVGxSTVRWTlRVQUFDQUFBQUFnQUNBREFBQUFBR2dvRUFjNTFBWVZEZ3lOY0FBQUFBQUFBQUFHNEFiZ0F5QUFBQVEwTUNBQVFBUXdCREFBRUFFZ0JGQUV3QVNRQlRBRUVBUWdCRkFGUUFTQUFFQUJnQVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQXdBc0FHVUFiQUJwQUhNQVlRQmlBR1VBZEFCb0FDNEFZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUFBQUFBQT09DQorDQorSFRUUC8xLjEgMjAwIFRoaW5ncyBhcmUgZmluZSBpbiBzZXJ2ZXIgbGFuZCBzd3NjbG9zZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMyDQorDQorRmluYWxseSwgdGhpcyBpcyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitOVExNCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQT1NUIHdpdGggTlRMTSBhdXRob3JpemF0aW9uIGFuZCBhZGRlZCBjdXN0b20gaGVhZGVycworIDwvbmFtZT4KKyA8c2V0ZW52PgorIyB3ZSBmb3JjZSBvdXIgb3duIGhvc3QgbmFtZSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgdGVzdCBtYWNoaW5lIGluZGVwZW5kZW50CitDVVJMX0dFVEhPU1ROQU1FPWN1cmxob3N0CisjIHdlIHRyeSB0byB1c2UgdGhlIExEX1BSRUxPQUQgaGFjaywgaWYgbm90IGEgZGVidWcgYnVpbGQKK0xEX1BSRUxPQUQ9JVBXRC9saWJ0ZXN0Ly5saWJzL2xpYmhvc3RuYW1lLnNvCisgPC9zZXRlbnY+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMjY3IC11IHRlc3R1c2VyOnRlc3RwYXNzIC0tbnRsbSAtZCAiZGF0YSIgLUggIkhlYWRlcjE6IHllcyIgLUggIkhlYWRlcjI6IG5vIgorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbCBub25ld2xpbmU9InllcyI+CitQT1NUIC8yNjcgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQorVXNlci1BZ2VudDogY3VybC83LjEwLjYtcHJlMSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC42LXByZTEgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0hlYWRlcjE6IHllcw0KK0hlYWRlcjI6IG5vDQorQ29udGVudC1MZW5ndGg6IDANCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK1BPU1QgLzI2NyBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRUFBQUFBWUFCZ0FXQUFBQUFBQUFBQndBQUFBQ0FBSUFIQUFBQUFJQUFnQWVBQUFBQUFBQUFBQUFBQUFCb0tCQUZwa1F3S1JDWkZNaGpqMHR3NDd3RWpLSFJIbHZ6ZnhRYW1GY2hlTXV2OHYreGVxcGhFTzVWNDF4UmQ3UjlkZU9YUmxjM1IxYzJWeVkzVnliR2h2YzNRPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC42LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNi1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitIZWFkZXIxOiB5ZXMNCitIZWFkZXIyOiBubw0KK0NvbnRlbnQtTGVuZ3RoOiA0DQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitkYXRhCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjY4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YzczMTEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNjgKQEAgLTAsMCArMSw1NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBPU1QKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4wIDIwMCBPSw0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sDQorQ29udGVudC1MZW5ndGg6IDANCisNCit0aGlzIGlzIGRhdGEgZXZlbiB0aG91Z2ggQ29udGVudC1MZW5ndGggaXMgc2V0IHRvIHplcm8KKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMCAyMDAgT0sNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorDQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQT1NUIGEgbm9uLWV4aXN0aW5nIGZpbGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CisgLWQgQG5vbmVzdWNoZmlsZSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMjY4Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BPU1QgLzI2OCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMA0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI2OSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI2OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjcxNTliCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjY5CkBAIC0wLDAgKzEsNTMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDY3NzY1NAorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworbXVhaGFoYWhhCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCAtLWlnbm9yZS1jb250ZW50LWxlbmd0aAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yNjkgLS1pZ25vcmUtY29udGVudC1sZW5ndGgKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8yNjkgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlMmZmZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI3CkBAIC0wLDAgKzEsNTYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2Nvb2tpZXMKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBNb29vIHN3c2Nsb3NlCitDb25uZWN0aW9uOiBjbG9zZQorU2V0LUNvb2tpZTogcGF0aD0vOyB0aGV3aW5uZXJpcz1ub3dheXlvdXdpbjsKK0NvbnRlbnQtTGVuZ3RoOiA4CisKKypmbG9wcCoKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitHZXQgc2FtZSBjb29raWUgcGFnZSBzZXZlcmFsIHRpbWVzCisgPC9uYW1lPgorIDxjb21tYW5kPgorImh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50L3syNywyNywyN30iIC1iIG5vbmUKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dhbnQvMjcgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC93YW50LzI3IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0Nvb2tpZTogdGhld2lubmVyaXM9bm93YXl5b3V3aW4NCisNCitHRVQgL3dhbnQvMjcgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29va2llOiB0aGV3aW5uZXJpcz1ub3dheXlvdXdpbg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNzAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlZWE5NwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI3MApAQCAtMCwwICsxLDUwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorUkVUUgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9kYXRhPgorPHNlcnZlcmNtZD4KK1BBU1ZCQURJUAorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgUkVUUiBQQVNWIC0tZnRwLXNraXAtcGFzdi1pcAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMjcwIC0tZnRwLXNraXAtcGFzdi1pcCAtLWRpc2FibGUtZXBzdgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK1BBU1YNCitUWVBFIEkNCitTSVpFIDI3MA0KK1JFVFIgMjcwDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNzEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1YTZjNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI3MQpAQCAtMCwwICsxLDQzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1RGVFAKK1RGVFAgUlJRCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2EgY2h1bmsgb2YKK2RhdGEKK3JldHVybmVkCisgdG8gY2xpZW50Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3RmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorVEZUUCByZXRyaWV2ZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK3RmdHA6Ly8lSE9TVElQOiVURlRQUE9SVC8vMjcxIC0tdHJhY2UtYXNjaWkgbG9nL3RyYWNlaXQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBwc2V1ZG8gcHJvdG9jb2wgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorb3Bjb2RlOiAxCitmaWxlbmFtZTogLzI3MQorbW9kZTogb2N0ZXQKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNzIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcyOGEyYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI3MgpAQCAtMCwwICsxLDQwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorUkVUUgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxtZHRtPgorMjEzIDIwMDQwMTAxMTIxMjEyCis8L21kdG0+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgdGltZWQgY29uZGl0aW9uZWQgZ2V0IGZpbGUgd2l0aCBpZGVudGljYWwgdGltZSBzdGFtcCAKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzI3MiAteiAiMjAwNCBqYW4gMSAxMjoxMjoxMiBVVEMiCis8L2NvbW1hbmQ+CisKKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitNRFRNIDI3Mg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjczIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjczCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMjM3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNzMKQEAgLTAsMCArMSw4MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBEaWdlc3QgYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NSINCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ1IgorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UKKzwvZGF0YT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIGEKKyMgQXV0aG9yaXphdGlvbjogRGlnZXN0IGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAwPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjMNCisNCitUaGlzIElTIHRoZSByZWFsIHBhZ2UhCis8L2RhdGExMDAwPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NSINCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ1IgorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KKw0KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDIzDQorDQorVGhpcyBJUyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitjcnlwdG8KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIHdpdGggdHdvIERpZ2VzdCBhdXRob3JpemF0aW9uIGhlYWRlcnMKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMjczIC11IHRlc3R1c2VyOnRlc3RwYXNzIC0tZGlnZXN0Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMjczIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvMjczIEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJ0ZXN0dXNlciIsIHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NSIsIHVyaT0iLzI3MyIsIHJlc3BvbnNlPSI1NzZhZTU3YjFkYjAwMzlmOGMwZGU0M2VmNThlNDllMyINCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC41IE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjc0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjc0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTM0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNzQKQEAgLTAsMCArMSw1MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorZm9sbG93bG9jYXRpb24KKy0tbWF4LXJlZGlycworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlIHN3c2Nsb3NlCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiBkYXRhL3JlcGx5LzI1CitDb250ZW50LUxlbmd0aDogMAorQ29ubmVjdGlvbjogY2xvc2UKKworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgTG9jYXRpb246IGZvbGxvd2luZyB3aXRoIC0tbWF4LXJlZGlycyAwCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvMjc0IC1MIC0tbWF4LXJlZGlycyAwCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2FudC8yNzQgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuOC4xLXByZTMgKHNwYXJjLXN1bi1zb2xhcmlzMi43KSBsaWJjdXJsIDcuOC4xLXByZTMgKE9wZW5TU0wgMC45LjZhKSAoa3JiNCBlbmFibGVkKQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorCis8ZXJyb3Jjb2RlPgorNDcKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjc1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjc1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMzk5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNzUKQEAgLTAsMCArMSw4MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBDT05ORUNUCitIVFRQIEJhc2ljIGF1dGgKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgQmFzaWMgYXV0aAorcHJveHl0dW5uZWwKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorQ29udGVudC1MZW5ndGg6IDkKKworY29udGVudHMKKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAyMDAgTWlnaHR5IGZpbmUgaW5kZWVkDQorDQorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorQ29udGVudC1MZW5ndGg6IDkKKworY29udGVudHMKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCitodHRwLXByb3h5Cis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgQ09OTkVDVCB3aXRoIHByb3h5dHVubmVsIGdldHRpbmcgdHdvIFVSTHMgZnJvbSB0aGUgc2FtZSBob3N0CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovL3JlbW90ZXNpdGUuY29tOiVIVFRQUE9SVC93ZS93YW50L3RoYXQvcGFnZS8yNzUgLXAgLXggJUhPU1RJUDolUFJPWFlQT1JUIC0tdXNlciBpYW06bXlzZWxmIC0tcHJveHktdXNlciB5b3VhcmU6eW91cnNlbGYgaHR0cDovL3JlbW90ZXNpdGUuY29tOiVIVFRQUE9SVC93ZS93YW50L3RoYXQvcGFnZS8yNzUKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3h5PgorQ09OTkVDVCByZW1vdGVzaXRlLmNvbTolSFRUUFBPUlQgSFRUUC8xLjENCitIb3N0OiByZW1vdGVzaXRlLmNvbTolSFRUUFBPUlQNCitQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBlVzkxWVhKbE9ubHZkWEp6Wld4bQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC43LXByZTIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNy1wcmUyIE9wZW5TU0wvMC45LjdhIHpsaWIvMS4xLjMNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm94eT4KKzxwcm90b2NvbD4KK0dFVCAvd2Uvd2FudC90aGF0L3BhZ2UvMjc1IEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogQmFzaWMgYVdGdE9tMTVjMlZzWmc9PQ0KK0hvc3Q6IHJlbW90ZXNpdGUuY29tOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC93ZS93YW50L3RoYXQvcGFnZS8yNzUgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBCYXNpYyBhV0Z0T20xNWMyVnNaZz09DQorSG9zdDogcmVtb3Rlc2l0ZS5jb206JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjc2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjc2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTIyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyNzYKQEAgLTAsMCArMSw3NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorZm9sbG93bG9jYXRpb24KKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMSBUaGlzIGlzIGEgd2VpcmRvIHRleHQgbWVzc2FnZSBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTG9jYXRpb246IGRhdGEvMjc2MDAwMi50eHQ/Y29vbHNpdGU9aHR0cDovL2Fub3RoZXJ1cmwvP2Ffc2Vjb25kLzI3NjAwMDIKK0Nvbm5lY3Rpb246IGNsb3NlCisKK1RoaXMgc2VydmVyIHJlcGx5IGlzIGZvciB0ZXN0aW5nIGEgc2ltcGxlIExvY2F0aW9uOiBmb2xsb3dpbmcKKworPC9kYXRhPgorPGRhdGEyPgorSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZSBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDUyCisKK0lmIHRoaXMgaXMgcmVjZWl2ZWQsIHRoZSBsb2NhdGlvbiBmb2xsb3dpbmcgd29ya2VkCisKKzwvZGF0YTI+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMb2NhdGlvbjogZGF0YS8yNzYwMDAyLnR4dD9jb29sc2l0ZT1odHRwOi8vYW5vdGhlcnVybC8/YV9zZWNvbmQvMjc2MDAwMgorQ29ubmVjdGlvbjogY2xvc2UKKworSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZSBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDUyCisKK0lmIHRoaXMgaXMgcmVjZWl2ZWQsIHRoZSBsb2NhdGlvbiBmb2xsb3dpbmcgd29ya2VkCisKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgTG9jYXRpb246IGZvbGxvd2luZyB3aXRoIG11bHRpcGxlIHF1ZXN0aW9uIG1hcmtzIGluIFVSTHMKKyA8L25hbWU+CisgPGNvbW1hbmQ+CisiaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQ/dXJpPWh0dHA6Ly9hbnl0aGluZy8yNzY/c2Vjb25kcS8yNzYiIC1MCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2FudD91cmk9aHR0cDovL2FueXRoaW5nLzI3Nj9zZWNvbmRxLzI3NiBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgL2RhdGEvMjc2MDAwMi50eHQ/Y29vbHNpdGU9aHR0cDovL2Fub3RoZXJ1cmwvP2Ffc2Vjb25kLzI3NjAwMDIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI3NyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI3NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGU0MTk4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjc3CkBAIC0wLDAgKzEsNTkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBGT1JNUE9TVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogMTEKKworYmxhYmxhYmxhCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFJGQzE4NjctdHlwZSBmb3JtcG9zdGluZyB3aXRoIGN1c3RvbSBDb250ZW50LVR5cGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2FudC8yNzcgLUYgbmFtZT1kYW5pZWwgLUggIkNvbnRlbnQtVHlwZTogdGV4dC9pbmZvIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8c3RyaXBwYXJ0Pgorcy9eLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW2EtejAtOV0qLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8KK3MvYm91bmRhcnk9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVthLXowLTldKi9ib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLworPC9zdHJpcHBhcnQ+Cis8cHJvdG9jb2w+CitQT1NUIC93YW50LzI3NyBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC40IChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjQgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAxNDUNCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9pbmZvOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIg0KKw0KK2RhbmllbA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI3OCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI3OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzU3ODIyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjc4CkBAIC0wLDAgKzEsNDkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgQmFzaWMgYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0NvbnRlbnQtTGVuZ3RoOiAyNw0KKw0KK3RoZSBjb250ZW50IHdvdWxkIGdvIGhlcmUNCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCB3aXRoIHByb3h5IHN0cmluZyBpbmNsdWRpbmcgaHR0cDovLyBhbmQgdXNlcitlbXB0eSBwYXNzd29yZAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly93ZS53YW50LnRoYXQuc2l0ZS5jb20vMjc4IC14IGh0dHA6Ly9mJTYxa2U6QCVIT1NUSVA6JUhUVFBQT1JUCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vd2Uud2FudC50aGF0LnNpdGUuY29tLzI3OCBIVFRQLzEuMQ0KK1Byb3h5LUF1dGhvcml6YXRpb246IEJhc2ljIFptRnJaVG89DQorSG9zdDogd2Uud2FudC50aGF0LnNpdGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI3OSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI3OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTE5MzhjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjc5CkBAIC0wLDAgKzEsNTAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgQmFzaWMgYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sDQorQ29udGVudC1MZW5ndGg6IDI3DQorDQordGhlIGNvbnRlbnQgd291bGQgZ28gaGVyZQ0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggcHJveHkgc3RyaW5nIGluY2x1ZGluZyBodHRwOi8vIGFuZCB1c2VyIG9ubHkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vd2Uud2FudC50aGF0LnNpdGUuY29tLzI3OSAteCBodHRwOi8vZiU2MWtlQCVIT1NUSVA6JUhUVFBQT1JUCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vd2Uud2FudC50aGF0LnNpdGUuY29tLzI3OSBIVFRQLzEuMQ0KK1Byb3h5LUF1dGhvcml6YXRpb246IEJhc2ljIFptRnJaVG89DQorSG9zdDogd2Uud2FudC50aGF0LnNpdGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4MGQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI4CkBAIC0wLDAgKzEsNzUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMSBUaGlzIGlzIGEgd2VpcmRvIHRleHQgbWVzc2FnZSBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTG9jYXRpb246ICAvb25saW5lLzEsMTc5NSxXZWxjb21lLDAwLmh0bWwvMjgwMDAyLnR4dD9sb2dvdXQ9VFJVRQorQ29ubmVjdGlvbjogY2xvc2UKKworVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcgYSBzaW1wbGUgTG9jYXRpb246IGZvbGxvd2luZworCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgRm9sbG93ZWQgaGVyZSBmaW5lIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNTIKKworSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKworPC9kYXRhMj4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2Ugc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiAgL29ubGluZS8xLDE3OTUsV2VsY29tZSwwMC5odG1sLzI4MDAwMi50eHQ/bG9nb3V0PVRSVUUKK0Nvbm5lY3Rpb246IGNsb3NlCisKK0hUVFAvMS4xIDIwMCBGb2xsb3dlZCBoZXJlIGZpbmUgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA1MgorCitJZiB0aGlzIGlzIHJlY2VpdmVkLCB0aGUgbG9jYXRpb24gZm9sbG93aW5nIHdvcmtlZAorCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIExvY2F0aW9uOiBmb2xsb3dpbmcgd2l0aCBleHRyYSBzcGFjZXMgaW4gaGVhZGVyCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvMjggLUwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzI4IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvb25saW5lLzEsMTc5NSxXZWxjb21lLDAwLmh0bWwvMjgwMDAyLnR4dD9sb2dvdXQ9VFJVRSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjgwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjgwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNjk5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODAKQEAgLTAsMCArMSw2MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK0xJU1QKKy0tZnRwLWFsdGVybmF0aXZlLXRvLXVzZXIKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisjIFdoZW4gZG9pbmcgTElTVCwgd2UgZ2V0IHRoZSBkZWZhdWx0IGxpc3Qgb3V0cHV0IGhhcmQtY29kZWQgaW4gdGhlIHRlc3QKKyMgRlRQIHNlcnZlcgorPGRhdGFjaGVjaz4KK3RvdGFsIDIwCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuLgorZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFQKKy1yLS1yLS1yLS0gICAxIDAgICAgICAgIDEgICAgICAgICAgICAgMzUgSnVsIDE2ICAxOTk2IFJFQURNRQorbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldgorZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgMjkgMTY6MDQgZG93bmxvYWQuaHRtbAorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCitkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWIKK2RyLXhyLXhyLXggICA1IDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IHVzcgorPC9kYXRhY2hlY2s+Cis8c2VydmVyY21kPgorUkVQTFkgVVNFUiA1MzAgV2UgZG9uJ3QgbGlrZSBVU0VSIGNvbW1hbmRzCitDT1VOVCBVU0VSIDEKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIC0tZnRwLWFsdGVybmF0aXZlLXRvLXVzZXIgb24gVVNFUiBmYWlsdXJlCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8yODAvIC0tZnRwLWFsdGVybmF0aXZlLXRvLXVzZXIgIlVTRVIgcmVwbGFjZW1lbnQiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1VTRVIgcmVwbGFjZW1lbnQNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCAyODANCitFUFNWDQorVFlQRSBBDQorTElTVA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjgxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjgxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOTlmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODEKQEAgLTAsMCArMSw2NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBVVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMTAwIENvbnRpbnVlCisKK0hUVFAvMS4xIDQwMSBCYWQgQXV0aCBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljIFJlYWxtPWF1dGhlbnRpY2F0ZQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCis8L2RhdGE+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMTAwIENvbnRpbnVlCisKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQVVQgZnJvbSBmaWxlIHdpdGggMTAwICsgNDAxIHJlc3BvbnNlcyBhbmQgLWYgd2l0aG91dCBhdXRoIGdpdmVuCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvMjgxIC1mIC1UIGxvZy90ZXN0MjgxLnR4dAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3QyODEudHh0Ij4KK1dlaXJkCisgICAgIGZpbGUKKyAgICAgICAgIHRvCisgICB1cGxvYWQKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+CisyMgorPC9lcnJvcmNvZGU+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BVVCAvd2Uvd2FudC8yODEgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDM4DQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitXZWlyZAorICAgICBmaWxlCisgICAgICAgICB0bworICAgdXBsb2FkCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjgyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjgyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOGFiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODIKQEAgLTAsMCArMSw0NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKKworPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGggbm8gcmVzcG9uc2UgYm9keSBvciBoZWFkZXJzCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzI4MgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzI4MiBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjgzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMmRlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODMKQEAgLTAsMCArMSwzNiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitURlRQCitURlRQIFJSUQorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Cit0ZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1RGVFAgcmV0cmlldmUgb24gaW52YWxpZCBmaWxlCisgPC9uYW1lPgorIDxjb21tYW5kPgordGZ0cDovLyVIT1NUSVA6JVRGVFBQT1JULy9pbnZhbGlkLWZpbGUgLS10cmFjZS1hc2NpaSBsb2cvdHJhY2VpdAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IHBzZXVkbyBwcm90b2NvbCBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNjkKKzwvZXJyb3Jjb2RlPgorPHByb3RvY29sPgorb3Bjb2RlOiAxCitmaWxlbmFtZTogL2ludmFsaWQtZmlsZQorbW9kZTogb2N0ZXQKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyYTY2NQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI4NApAQCAtMCwwICsxLDY3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1RGVFAKK1RGVFAgUlJRCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0EgY2h1bmsgb2YgZGF0YSB3aGljaCBleGFjdGx5IGZpdHMgaW50bworYSA1MTIgYnl0ZSBURlRQIGJsb2NrLCB0ZXN0aW5nIGEgYm91bmRhcnkKK2NvbmRpdGlvbiBpbiB0aGUgVEZUUCByZWNlaXZlIGNvZGUuCis3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgordGZ0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitURlRQIHJldHJpZXZlIG9mIGJvdW5kYXJ5IGNhc2UgNTEyIGJ5dGUgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK3RmdHA6Ly8lSE9TVElQOiVURlRQUE9SVC8vMjg0IC0tdHJhY2UtYXNjaWkgbG9nL3RyYWNlaXQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBwc2V1ZG8gcHJvdG9jb2wgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorb3Bjb2RlOiAxCitmaWxlbmFtZTogLzI4NAorbW9kZTogb2N0ZXQKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhMTk5OQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI4NQpAQCAtMCwwICsxLDQ0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1RGVFAKK1RGVFAgV1JRCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3RmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorVEZUUCBzZW5kCisgPC9uYW1lPgorIDxjb21tYW5kPgorLVQgbG9nL3Rlc3QyODUudHh0IHRmdHA6Ly8lSE9TVElQOiVURlRQUE9SVC8vIC0tdHJhY2UtYXNjaWkgbG9nL3RyYWNlaXQKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0Mjg1LnR4dCI+CithIGNodW5rIG9mCitkYXRhCitzZW50CisgdG8gc2VydmVyCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgcHNldWRvIHByb3RvY29sIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzx1cGxvYWQ+CithIGNodW5rIG9mCitkYXRhCitzZW50CisgdG8gc2VydmVyCis8L3VwbG9hZD4KKzxwcm90b2NvbD4KK29wY29kZTogMgorZmlsZW5hbWU6IC90ZXN0Mjg1LnR4dAorbW9kZTogb2N0ZXQKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxZWUxZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI4NgpAQCAtMCwwICsxLDkyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1RGVFAKK1RGVFAgV1JRCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3RmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorVEZUUCBzZW5kIG9mIGJvdW5kYXJ5IGNhc2UgNTEyIGJ5dGUgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1UIGxvZy90ZXN0Mjg2LnR4dCB0ZnRwOi8vJUhPU1RJUDolVEZUUFBPUlQvLyAtLXRyYWNlLWFzY2lpIGxvZy90cmFjZWl0Cis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDI4Ni50eHQiPgorQSBjaHVuayBvZiBkYXRhIHdoaWNoIGV4YWN0bHkgZml0cyBpbnRvCithIDUxMiBieXRlIFRGVFAgYmxvY2ssIHRlc3RpbmcgYSBib3VuZGFyeQorY29uZGl0aW9uIGluIHRoZSBURlRQIHRyYW5zbWl0IGNvZGUuCis4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IHBzZXVkbyBwcm90b2NvbCBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dXBsb2FkPgorQSBjaHVuayBvZiBkYXRhIHdoaWNoIGV4YWN0bHkgZml0cyBpbnRvCithIDUxMiBieXRlIFRGVFAgYmxvY2ssIHRlc3RpbmcgYSBib3VuZGFyeQorY29uZGl0aW9uIGluIHRoZSBURlRQIHRyYW5zbWl0IGNvZGUuCis4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorMTIzNDU2Nzg5QUJDREVGCisxMjM0NTY3ODlBQkNERUYKKzEyMzQ1Njc4OUFCQ0RFRgorPC91cGxvYWQ+Cis8cHJvdG9jb2w+CitvcGNvZGU6IDIKK2ZpbGVuYW1lOiAvdGVzdDI4Ni50eHQKK21vZGU6IG9jdGV0Cis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjg3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjg3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyM2QzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODcKQEAgLTAsMCArMSw1NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIENPTk5FQ1QKK0hUVFAgcHJveHkKK3Byb3h5dHVubmVsCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisKKyMgdGhpcyBpcyByZXR1cm5lZCBmaXJzdCBzaW5jZSB3ZSBnZXQgbm8gcHJveHktYXV0aAorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDQwNSBNZXRob2QgTm90IEFsbG93ZWQgc3dzY2xvc2UNCisNCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLgorPC9kYXRhPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBwcm94eSBDT05ORUNUIHdpdGggY3VzdG9tIFVzZXItQWdlbnQgaGVhZGVyCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tOjI4Ny9wYXRoLzI4NyAtSCAiVXNlci1BZ2VudDogbG9vc2VyLzIwMDciIC0tcHJveHkgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIC0tcHJveHl0dW5uZWwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK0NPTk5FQ1QgdGVzdC5yZW1vdGUuZXhhbXBsZS5jb206Mjg3IEhUVFAvMS4xDQorSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb206Mjg3DQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK1VzZXItQWdlbnQ6IGxvb3Nlci8yMDA3DQorDQorPC9wcm90b2NvbD4KKyMgQ1VSTEVfUkVDVl9FUlJPUgorPGVycm9yY29kZT4KKzU2Cis8L2Vycm9yY29kZT4KKzxzdGRvdXQ+CitIVFRQLzEuMSA0MDUgTWV0aG9kIE5vdCBBbGxvd2VkIHN3c2Nsb3NlDQorDQorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2OTE0NQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI4OApAQCAtMCwwICsxLDQyIEBACis8dGVzdGNhc2U+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2ZvbworICAgYmFyCitiYXIKKyAgIGZvbworbW9vCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK25vbmUKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorZmlsZQorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK2ZpbGU6Ly8gd2l0aCAodW5zdXBwb3J0ZWQpIHByb3h5LCBhdXRoZW50aWNhdGlvbiBhbmQgcmFuZ2UKKyA8L25hbWU+Cis8c2V0ZW52PgorYWxsX3Byb3h5PWh0dHA6Ly9mYWtlOnVzZXJAJUhPU1RJUDolSFRUUFBPUlQvCis8L3NldGVudj4KKyA8Y29tbWFuZD4KK2ZpbGU6Ly9sb2NhbGhvc3QvJVBXRC9sb2cvdGVzdDI4OC50eHQKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0Mjg4LnR4dCI+Citmb28KKyAgIGJhcgorYmFyCisgICBmb28KK21vbworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjg5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjg5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MjBlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyODkKQEAgLTAsMCArMSwzMCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1NUT1IKK1Jlc3VtZQorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIHJlc3VtZSB1cGxvYWQgYnV0IGRlbmllZCBhY2Nlc3MgdG8gbG9jYWwgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMjg5IC1UIGxvZy9pbGxlZ2FsLW5vbmV4aXN0ZW50LWZpbGUgLUMgLQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzI2Cis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3YmQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5CkBAIC0wLDAgKzEsNTIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK3RpbWVvdXQKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitfZGF0YV9yZXN1bHRfZGF0YV8KKzwvZGF0YT4KKzxwb3N0Y21kPgord2FpdCAxMAorPC9wb3N0Y21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCAyIHNlY3MgdGltZW91dAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzI5IC1tIDIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzI5IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorMjgKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjkwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzhhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyOTAKQEAgLTAsMCArMSw0MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKKy0tbWF4LWZpbGVzaXplCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNpemU+Cis4NQorPC9zaXplPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRvd25sb2FkIG1heGltdW0gZmlsZXNpemUgZXhjZWVkZWQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzI5MCAtLW1heC1maWxlc2l6ZSAzMAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzYzCis8L2Vycm9yY29kZT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBJDQorU0laRSAyOTANCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGUwMzllCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjkxCkBAIC0wLDAgKzEsNDcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitSRVRSCistLW1heC1maWxlc2l6ZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGRvd25sb2FkIG1heGltdW0gZmlsZXNpemUgbm90IGV4Y2VlZGVkCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8yOTEgLS1tYXgtZmlsZXNpemUgMTAwCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMjkxDQorUkVUUiAyOTENCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5MiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDBlOGQxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjkyCkBAIC0wLDAgKzEsNTYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKy0tbWF4LWZpbGVzaXplCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBHRVQgd2l0aCBtYXhpbXVtIGZpbGVzaXplIG5vdCBleGNlZWRlZAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yOTIgLS1tYXgtZmlsZXNpemUgMTAwMAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzI5MiBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjkzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MjkzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWZjOWEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyOTMKQEAgLTAsMCArMSw2MCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorLS1tYXgtZmlsZXNpemUKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCistZm9vLQorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGggbWF4aW11bSBmaWxlc2l6ZSBleGNlZWRlZAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yOTMgLS1tYXgtZmlsZXNpemUgMgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzYzCis8L2Vycm9yY29kZT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8yOTMgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5NCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDdmMmI4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjk0CkBAIC0wLDAgKzEsNjQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitMSVNUCitBQ0NUCistLWZ0cC1hY2NvdW50Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPHNlcnZlcmNtZD4KK1JFUExZIFBBU1MgMzMyIEdpdmUgbWUgYW4gQUNDVCBub3cKK1JFUExZIEFDQ1QgMjMwIFRoYW5rLXlvdSBmb3IgdGhlIEFDQ1QKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIC0tZnRwLWFjY291bnQgb24gQUNDVCByZXF1ZXN0CisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8yOTQvIC0tZnRwLWFjY291bnQgImRhdGEgZm9yIGFjY3QiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorQUNDVCBkYXRhIGZvciBhY2N0DQorUFdEDQorQ1dEIDI5NA0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyOTUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyOTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxZGRjZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5NQpAQCAtMCwwICsxLDQ1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorTElTVAorQUNDVAorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBQQVNTIDMzMiBHaXZlIG1lIGFuIEFDQ1Qgbm93CitSRVBMWSBQV0QgNTMwIE5vIEFDQ1QsIGdvIGF3YXkKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIEFDQ1QgcmVxdWVzdCB3aXRob3V0IC0tZnRwLWFjY291bnQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzI5NS8KKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis2NworPC9lcnJvcmNvZGU+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5NiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDA4YzhiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjk2CkBAIC0wLDAgKzEsNDggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitDV0QKKy0tZnRwLW1ldGhvZAorbXVsdGljd2QKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2JsYSBibGEgYmxhCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgQ1dEIHdpdGggLS1mdHAtbWV0aG9kIG11bHRpY3dkCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1mdHAtbWV0aG9kIG11bHRpY3dkIGZ0cDovLyVIT1NUSVA6JUZUUFBPUlQvZmlyc3Qvc2Vjb25kL3RoaXJkLzI5NgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBmaXJzdA0KK0NXRCBzZWNvbmQNCitDV0QgdGhpcmQNCitFUFNWDQorVFlQRSBJDQorU0laRSAyOTYNCitSRVRSIDI5Ng0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjk3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0Mjk3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NTczZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyOTcKQEAgLTAsMCArMSw0NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK0NXRAorLS1mdHAtbWV0aG9kCitzaW5nbGVjd2QKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2JsYSBibGEgYmxhCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgQ1dEIHdpdGggLS1mdHAtbWV0aG9kIHNpbmdsZWN3ZAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tZnRwLW1ldGhvZCBzaW5nbGVjd2QgZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9maXJzdC9zZWNvbmQvdGhpcmQvMjk3Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIGZpcnN0L3NlY29uZC90aGlyZA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDI5Nw0KK1JFVFIgMjk3DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyOTggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyOTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5MTNlOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5OApAQCAtMCwwICsxLDQ1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorQ1dECistLWZ0cC1tZXRob2QKK25vY3dkCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitibGEgYmxhIGJsYQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIENXRCB3aXRoIC0tZnRwLW1ldGhvZCBub2N3ZAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tZnRwLW1ldGhvZCBub2N3ZCBmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL2ZpcnN0L3NlY29uZC90aGlyZC8yOTgKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBJDQorU0laRSBmaXJzdC9zZWNvbmQvdGhpcmQvMjk4DQorUkVUUiBmaXJzdC9zZWNvbmQvdGhpcmQvMjk4DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyOTkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QyOTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1N2ExNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDI5OQpAQCAtMCwwICsxLDUzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorSFRUUAorQ1VSTE9QVF9VU0VSUFdECitIVFRQIHByb3h5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4wIDIwMCBPSyBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorCitibGFibGFibGEKKworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2Z0cAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0ZUUCBvdmVyIEhUVFAgcHJveHkgd2l0aCB1c2VyOnBhc3Mgbm90IGluIHVybAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy14IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCAtdSBtaWNoYWw6YXliYWJ0dSBmdHA6Ly9ob3N0LmNvbS93ZS93YW50LzI5OQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgZnRwOi8vbWljaGFsOmF5YmFidHVAaG9zdC5jb20vd2Uvd2FudC8yOTkgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBCYXNpYyBiV2xqYUdGc09tRjVZbUZpZEhVPQ0KK0hvc3Q6IGhvc3QuY29tOjIxDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNjdiMmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzCkBAIC0wLDAgKzEsNjAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCitIVFRQIEJhc2ljIGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4wIDIwMCBPSw0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sDQorQ29udGVudC1MZW5ndGg6IDANCisNCit0aGlzIGlzIGRhdGEgZXZlbiB0aG91Z2ggQ29udGVudC1MZW5ndGggaXMgc2V0IHRvIHplcm8KKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMCAyMDAgT0sNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorDQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQT1NUIHdpdGggYXV0aCBhbmQgY29udGVudHMgYnV0IHdpdGggY29udGVudC1sZW5ndGggc2V0IHRvIDAKKyA8L25hbWU+CisgPGNvbW1hbmQ+CisgLWQgImZvb289bW9vbyZwb29vPWNsdWUmZG9vPSUyMCUyMCUyMCsrKysiIC11ICJmYWtlOi11c2VyIiBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2wgbm9uZXdsaW5lPSJ5ZXMiPgorUE9TVCAvMyBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IEJhc2ljIFptRnJaVG90ZFhObGNnPT0NCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDM3DQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitmb29vPW1vb28mcG9vbz1jbHVlJmRvbz0lMjAlMjAlMjArKysrCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGI4MDA1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzAKQEAgLTAsMCArMSw0MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCBubyBkYXRhIGluIHNlcnZlciByZXBseQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzMwCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2FudC8zMCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPGVycm9yY29kZT4KKzUyCis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMwMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjQyMjJkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzAwCkBAIC0wLDAgKzEsNTIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUFMKK0hUVFAgR0VUCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDcKKworTW9vTW9vCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHBzCis8L3NlcnZlcj4KKyA8bmFtZT4KK3NpbXBsZSBIVFRQUyBHRVQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistayBodHRwczovLyVIT1NUSVA6JUhUVFBTUE9SVC8zMDAKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8zMDAgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQU1BPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMDEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5NzRjZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMwMQpAQCAtMCwwICsxLDU3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFBTCitIVFRQIEdFVAorSFRUUCBCYXNpYyBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHBzCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFBTIEdFVCB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkCisgPC9uYW1lPgorIDxjb21tYW5kPgorLWsgLXUgZmFrZTp1c2VyIGh0dHBzOi8vJUhPU1RJUDolSFRUUFNQT1JULzMwMQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzMwMSBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IEJhc2ljIFptRnJaVHAxYzJWeQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBTUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzxkYXRhPgorW2luc2VydCBmdWxsIHByb3RvY29sIHZlcmlmaWN0aW9uIGR1bXAgaGVyZV0KKzwvZGF0YT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMwMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjIzZjFjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzAyCkBAIC0wLDAgKzEsNDAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUFMKK0hUVFAgR0VUCitIVFRQIENPTk5FQ1QKK0hUVFAgcHJveHkKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitTU0wKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cHMKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUFMgR0VUIG92ZXIgSFRUUCBwcm94eSBmYWlscworIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1rIC1VIGZha2U6dXNlciAteCAlSE9TVElQOiVIVFRQUE9SVCBodHRwczovL2JhZC5mYWtldXJsLXRvLnRlc3Qvc2xhc2gvMzAyCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNTYKKzwvZXJyb3Jjb2RlPgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8ZGF0YT4KKzwvZGF0YT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMwMyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMwMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWRkOWViCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzAzCkBAIC0wLDAgKzEsNTUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUFMKK0hUVFAgR0VUCit0aW1lb3V0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitfZGF0YV9yZXN1bHRfZGF0YV8KKzwvZGF0YT4KKzxwb3N0Y21kPgord2FpdCAyMAorPC9wb3N0Y21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK1NTTAorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwcworPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQUyB3aXRoIDggc2VjcyB0aW1lb3V0CisgPC9uYW1lPgorIDxjb21tYW5kPgorLWsgaHR0cHM6Ly8lSE9TVElQOiVIVFRQU1BPUlQvd2FudC8zMDMgLW0gOAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dhbnQvMzAzIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFNQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPGVycm9yY29kZT4KKzI4Cis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMwNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMwNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWRmMThmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzA0CkBAIC0wLDAgKzEsNzIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUFMKK0hUVFAgUE9TVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiAxMA0KKworYmxhYmxhYmxhCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHBzCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFBTIG11bHRpcGFydCBmb3JtcG9zdAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1rIGh0dHBzOi8vJUhPU1RJUDolSFRUUFNQT1JUL3dlL3dhbnQvMzA0IC1GIG5hbWU9ZGFuaWVsIC1GIHRvb2w9Y3VybCAtRiBmaWxlPUBsb2cvdGVzdDMwNC50eHQKKzwvY29tbWFuZD4KKyMgV2UgY3JlYXRlIHRoaXMgZmlsZSBiZWZvcmUgdGhlIGNvbW1hbmQgaXMgaW52b2tlZCEKKzxmaWxlIG5hbWU9ImxvZy90ZXN0MzA0LnR4dCI+CithYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteKFVzZXItQWdlbnQ6fENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2Zvcm0tZGF0YTt8LS0tLS0tKS4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUE9TVCAvd2Uvd2FudC8zMDQgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNCAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC40IE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBTUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDEzODYNCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWMzYjJlZjdmMGJiOA0KKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWMzYjJlZjdmMGJiOA0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ibmFtZSINCisNCitkYW5pZWwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1jM2IyZWY3ZjBiYjgNCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InRvb2wiDQorDQorY3VybA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWMzYjJlZjdmMGJiOA0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iZmlsZSI7IGZpbGVuYW1lPSJ0ZXN0MzA0LnR4dCINCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCisNCithYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1jM2IyZWY3ZjBiYjgtLQ0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMDUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU4YTAwNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMwNQpAQCAtMCwwICsxLDM1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFBTCitIVFRQIEdFVAorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK1NTTAorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwcworPC9zZXJ2ZXI+CisgPG5hbWU+CitpbnNlY3VyZSBIVFRQUyB3aXRob3V0IHBlcm1pc3Npb24KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwczovLyVIT1NUSVA6JUhUVFBTUE9SVC93YW50LzMwNSAtLWNhY2VydCBtb29vbworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8ZXJyb3Jjb2RlPgorNzcKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzA2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzA2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDRjZWYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMDYKQEAgLTAsMCArMSw2NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQUworSFRUUCBHRVQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorTm8gaGVhZGVycyBhdCBhbGwsIGp1c3QgZGF0YSBzd3NjbG9zZQorCitMZXQncyBnZXQKKworYSBsaXR0bGUKKworc28gdGhhdAorCit3ZQorCitoYXZlCisKK3NvbWUKKwordGVzdAorCitkYXRhIHRvCisKK3ZlcmlmeQorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK1NTTAorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwcworPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQUyBHRVQsIHJlY2VpdmUgbm8gaGVhZGVycyBvbmx5IGRhdGEhCisgPC9uYW1lPgorIDxjb21tYW5kPgorLWsgaHR0cHM6Ly8lSE9TVElQOiVIVFRQU1BPUlQvMzA2Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMzA2IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFNQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzA3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzA3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYzJiM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMDcKQEAgLTAsMCArMSw1NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQUworSFRUUCBHRVQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUdWUsIDE2IEphbiAyMDA3IDE4OjAwOjE0IEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNworCitNb29Nb28KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitPcGVuU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHBzCis8L3NlcnZlcj4KKzxwcmVjaGVjaz4KK3BlcmwgJVNSQ0RJUi9saWJ0ZXN0L3Rlc3QzMDcucGwgJUNVUkwKKzwvcHJlY2hlY2s+CisKKyA8bmFtZT4KK3NpbXBsZSBIVFRQUyBHRVQgd2l0aCBvcGVuc3NsIGVuZ2luZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tZW5naW5lIG9wZW5zc2wgLWsgaHR0cHM6Ly8lSE9TVElQOiVIVFRQU1BPUlQvMzA3Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMzA3IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFNQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzA4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDU1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMDgKQEAgLTAsMCArMSwzNCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQUworSFRUUCBHRVQKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitPcGVuU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHBzCis8L3NlcnZlcj4KKyA8bmFtZT4KK3NpbXBsZSBIVFRQUyBHRVQgd2l0aCBpbnZhbGlkIGNyeXB0byBlbmdpbmUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWVuZ2luZSBpbnZhbGlkLWNyeXB0by1lbmdpbmUteHl6enkgLWsgaHR0cHM6Ly8lSE9TVElQOiVIVFRQU1BPUlQvMzA4Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNTMKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzA5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzA5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMDQzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMDkKQEAgLTAsMCArMSw4NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQUworSFRUUCBHRVQKK2ZvbGxvd2xvY2F0aW9uCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMSBUaGlzIGlzIGEgd2VpcmRvIHRleHQgbWVzc2FnZSBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorTG9jYXRpb246IGh0dHBzOi8vMTI3LjAuMC4xOjg5OTEvZGF0YS8zMDkwMDAyLnR4dD9jb29sc2l0ZT15ZXMNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK1RoaXMgc2VydmVyIHJlcGx5IGlzIGZvciB0ZXN0aW5nIGEgc2ltcGxlIExvY2F0aW9uOiBmb2xsb3dpbmcgdG8gSFRUUFMgVVJMCisKKzwvZGF0YT4KKzxkYXRhMj4KK0hUVFAvMS4xIDIwMCBGb2xsb3dlZCBoZXJlIGZpbmUgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KK0NvbnRlbnQtTGVuZ3RoOiA1Mg0KKw0KK0lmIHRoaXMgaXMgcmVjZWl2ZWQsIHRoZSBsb2NhdGlvbiBmb2xsb3dpbmcgd29ya2VkCisKKzwvZGF0YTI+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitMb2NhdGlvbjogaHR0cHM6Ly8xMjcuMC4wLjE6ODk5MS9kYXRhLzMwOTAwMDIudHh0P2Nvb2xzaXRlPXllcw0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZSBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1MZW5ndGg6IDUyDQorDQorSWYgdGhpcyBpcyByZWNlaXZlZCwgdGhlIGxvY2F0aW9uIGZvbGxvd2luZyB3b3JrZWQKKworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHAKK2h0dHBzCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgTG9jYXRpb246IHJlZGlyZWN0IHRvIEhUVFBTIFVSTAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1rIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzMwOSAtTAorPC9jb21tYW5kPgorIyBUaGUgZGF0YSBzZWN0aW9uIGRvZXNuJ3QgZG8gdmFyaWFibGUgc3Vic3RpdHV0aW9uLCBzbyB3ZSBtdXN0IGFzc2VydCB0aGlzCis8cHJlY2hlY2s+CitwZXJsIC1lICJwcmludCAnVGVzdCByZXF1aXJlcyBkZWZhdWx0IHRlc3Qgc2VydmVyIGhvc3QgYW5kIHBvcnQnIGlmICggJyVIT1NUSVAnIG5lICcxMjcuMC4wLjEnIHx8ICclSFRUUFNQT1JUJyBuZSAnODk5MScgKTsiCis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dhbnQvMzA5IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvZGF0YS8zMDkwMDAyLnR4dD9jb29sc2l0ZT15ZXMgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQU1BPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZmU4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMQpAQCAtMCwwICsxLDEyMiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorY29va2llcworY29va2llamFyCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KK0NvbnRlbnQtTGVuZ3RoOiA0DQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwNCitGdW5ueS1oZWFkOiB5ZXN5ZXMNCitTZXQtQ29va2llOiBmb29iYXI9bmFtZTsgZG9tYWluPWFueXRoaW5nLmNvbTsgcGF0aD0vIDsgc2VjdXJlDQorU2V0LUNvb2tpZTppc21hdGNoPXRoaXMgIDsgZG9tYWluPTEyNy4wLjAuMTsgcGF0aD0vc2lsbHkvDQorU2V0LUNvb2tpZTogc2VjMXZhbHVlPXNlY3VyZTEgIDsgZG9tYWluPTEyNy4wLjAuMTsgcGF0aD0vc2VjdXJlMS8gOyBzZWN1cmUNCitTZXQtQ29va2llOiBzZWMydmFsdWU9c2VjdXJlMiAgOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS9zZWN1cmUyLyA7IHNlY3VyZT0NCitTZXQtQ29va2llOiBzZWMzdmFsdWU9c2VjdXJlMyAgOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS9zZWN1cmUzLyA7IHNlY3VyZT0NCitTZXQtQ29va2llOiBzZWM0dmFsdWU9c2VjdXJlNCAgOyBzZWN1cmU9OyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS9zZWN1cmU0LyA7IAorU2V0LUNvb2tpZTogc2VjNXZhbHVlPXNlY3VyZTUgIDsgc2VjdXJlOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS9zZWN1cmU1LyA7IAorU2V0LUNvb2tpZTogc2VjNnZhbHVlPXNlY3VyZTYgIDsgc2VjdXJlIDsgZG9tYWluPTEyNy4wLjAuMTsgcGF0aD0vc2VjdXJlNi8gOyAKK1NldC1Db29raWU6IHNlYzd2YWx1ZT1zZWN1cmU3ICA7IHNlY3VyZSAgIDsgZG9tYWluPTEyNy4wLjAuMTsgcGF0aD0vc2VjdXJlNy8gOyAKK1NldC1Db29raWU6IHNlYzh2YWx1ZT1zZWN1cmU4ICA7IHNlY3VyZT0gOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS9zZWN1cmU4LyA7IAorU2V0LUNvb2tpZTogc2VjdXJlPXZlcnkxICA7IHNlY3VyZT07IGRvbWFpbj0xMjcuMC4wLjE7IHBhdGg9L3NlY3VyZTkvOyAKK1NldC1Db29raWU6IGh0dHBvMT12YWx1ZTEgIDsgZG9tYWluPTEyNy4wLjAuMTsgcGF0aD0vcDEvOyBodHRwb25seQorU2V0LUNvb2tpZTogaHR0cG8yPXZhbHVlMiAgOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS9wMi87IGh0dHBvbmx5PQorU2V0LUNvb2tpZTogaHR0cG8zPXZhbHVlMyAgOyBodHRwb25seTsgZG9tYWluPTEyNy4wLjAuMTsgcGF0aD0vcDMvOworU2V0LUNvb2tpZTogaHR0cG80PXZhbHVlNCAgOyBodHRwb25seT07IGRvbWFpbj0xMjcuMC4wLjE7IHBhdGg9L3A0LzsgCitTZXQtQ29va2llOiBodHRwb25seT1teXZhbHVlMSAgOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS9wNC87IGh0dHBvbmx5CitTZXQtQ29va2llOiBodHRwYW5kc2VjPW15dmFsdWUyICA7IGRvbWFpbj0xMjcuMC4wLjE7IHBhdGg9L3A0LzsgaHR0cG9ubHk7IHNlY3VyZQorU2V0LUNvb2tpZTogaHR0cGFuZHNlYzI9bXl2YWx1ZTM7IGRvbWFpbj0xMjcuMC4wLjE7IHBhdGg9L3A0LzsgaHR0cG9ubHk9OyBzZWN1cmUKK1NldC1Db29raWU6IGh0dHBhbmRzZWMzPW15dmFsdWU0ICA7IGRvbWFpbj0xMjcuMC4wLjE7IHBhdGg9L3A0LzsgaHR0cG9ubHk7IHNlY3VyZT0KK1NldC1Db29raWU6IGh0dHBhbmRzZWM0PW15dmFsdWU1ICA7IGRvbWFpbj0xMjcuMC4wLjE7IHBhdGg9L3A0LzsgaHR0cG9ubHk9OyBzZWN1cmU9CitTZXQtQ29va2llOiBodHRwYW5kc2VjNT1teXZhbHVlNiAgOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS9wNC87IHNlY3VyZTsgaHR0cG9ubHk9CitTZXQtQ29va2llOiBodHRwYW5kc2VjNj1teXZhbHVlNyAgOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS9wNC87IHNlY3VyZT07IGh0dHBvbmx5PQorU2V0LUNvb2tpZTogaHR0cGFuZHNlYzc9bXl2YWx1ZTggIDsgZG9tYWluPTEyNy4wLjAuMTsgcGF0aD0vcDQvOyBzZWN1cmU7IGh0dHBvbmx5CitTZXQtQ29va2llOiBodHRwYW5kc2VjOD1teXZhbHVlOTsgZG9tYWluPTEyNy4wLjAuMTsgcGF0aD0vcDQvOyBzZWN1cmU9OyBodHRwb25seQ0KK1NldC1Db29raWU6IHBhcnRtYXRjaD1wcmVzZW50OyBkb21haW49MTI3LjAuMC4xIDsgcGF0aD0vOw0KK1NldC1Db29raWU6ZWF0PXRoaXM7IGRvbWFpbj1tb28uZm9vLm1vbzsNCitTZXQtQ29va2llOiBlYXQ9dGhpcy10b287IGRvbWFpbj0uZm9vLm1vbzsNCitTZXQtQ29va2llOiBub2RvbWFpbm5vdmFsdWUNCitTZXQtQ29va2llOiAgIG5vZG9tYWluPXZhbHVlOyBleHBpcmVzPUZyaSBGZWIgMiAxMTo1NjoyNyBHTVQgMjAzNQ0KK1NldC1Db29raWU6IG5vdmFsdWU7IGRvbWFpbj1yZWFsbHlzaWxseQ0KK1NldC1Db29raWU6IHRlc3Q9eWVzOyBkb21haW49Zm9vLmNvbTsgZXhwaXJlcz1TYXQgRmViIDIgMTE6NTY6MjcgR01UIDIwMzANCitTZXQtQ29va2llOiB0ZXN0Mj15ZXM7IGRvbWFpbj1zZTsgZXhwaXJlcz1TYXQgRmViIDIgMTE6NTY6MjcgR01UIDIwMzANCitTZXQtQ29va2llOiBtYWdpYz15ZXNzaXI7IHBhdGg9L3NpbGx5LzsgSHR0cE9ubHkNCitTZXQtQ29va2llOiBibGV4cD15ZXN5ZXM7IGRvbWFpbj0uMC4wLjE7IGRvbWFpbj0uMC4wLjE7IGV4cGlyeT10b3RhbGx5IGJhZDsKKw0KK2JvbworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCB3ZWlyZGx5IGZvcm1hdHRlZCBjb29raWVzIGFuZCBjb29raWVqYXIgc3RvcmFnZQorIDwvbmFtZT4KKyMgRXhwbGljaXRseSBzZXQgdGhlIHRpbWUgem9uZSB0byBhIGtub3duIGdvb2Qgb25lLCBpbiBjYXNlIHRoZSB1c2VyIGlzCisjIHVzaW5nIG9uZSBvZiB0aGUgJ3JpZ2h0JyB6b25lcyB0aGF0IHRha2UgaW50byBhY2NvdW50IGxlYXAgc2Vjb25kcworIyB3aGljaCBjYXVzZXMgdGhlIGNvb2tpZSBleHBpcnkgdGltZXMgdG8gYmUgZGlmZmVyZW50LgorPHNldGVudj4KK1RaPUdNVAorPC9zZXRlbnY+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC8zMSAtYiBub25lIC1jIGxvZy9qYXIzMS50eHQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93ZS93YW50LzMxIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8ZmlsZSBuYW1lPSJsb2cvamFyMzEudHh0IiBtb2RlPSJ0ZXh0Ij4KKyMgTmV0c2NhcGUgSFRUUCBDb29raWUgRmlsZQorIyBodHRwOi8vY3VybC5oYXh4LnNlL3JmYy9jb29raWVfc3BlYy5odG1sCisjIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGxpYmN1cmwhIEVkaXQgYXQgeW91ciBvd24gcmlzay4KKworLjEyNy4wLjAuMQlUUlVFCS9zaWxseS8JRkFMU0UJMAlpc21hdGNoCXRoaXMKKy4xMjcuMC4wLjEJVFJVRQkvc2VjdXJlMS8JVFJVRQkwCXNlYzF2YWx1ZQlzZWN1cmUxCisuMTI3LjAuMC4xCVRSVUUJL3NlY3VyZTIvCVRSVUUJMAlzZWMydmFsdWUJc2VjdXJlMgorLjEyNy4wLjAuMQlUUlVFCS9zZWN1cmUzLwlUUlVFCTAJc2VjM3ZhbHVlCXNlY3VyZTMKKy4xMjcuMC4wLjEJVFJVRQkvc2VjdXJlNC8JVFJVRQkwCXNlYzR2YWx1ZQlzZWN1cmU0CisuMTI3LjAuMC4xCVRSVUUJL3NlY3VyZTUvCVRSVUUJMAlzZWM1dmFsdWUJc2VjdXJlNQorLjEyNy4wLjAuMQlUUlVFCS9zZWN1cmU2LwlUUlVFCTAJc2VjNnZhbHVlCXNlY3VyZTYKKy4xMjcuMC4wLjEJVFJVRQkvc2VjdXJlNy8JVFJVRQkwCXNlYzd2YWx1ZQlzZWN1cmU3CisuMTI3LjAuMC4xCVRSVUUJL3NlY3VyZTgvCVRSVUUJMAlzZWM4dmFsdWUJc2VjdXJlOAorLjEyNy4wLjAuMQlUUlVFCS9zZWN1cmU5LwlUUlVFCTAJc2VjdXJlCXZlcnkxCisjSHR0cE9ubHlfLjEyNy4wLjAuMQlUUlVFCS9wMS8JRkFMU0UJMAlodHRwbzEJdmFsdWUxCisjSHR0cE9ubHlfLjEyNy4wLjAuMQlUUlVFCS9wMi8JRkFMU0UJMAlodHRwbzIJdmFsdWUyCisjSHR0cE9ubHlfLjEyNy4wLjAuMQlUUlVFCS9wMy8JRkFMU0UJMAlodHRwbzMJdmFsdWUzCisjSHR0cE9ubHlfLjEyNy4wLjAuMQlUUlVFCS9wNC8JRkFMU0UJMAlodHRwbzQJdmFsdWU0CisjSHR0cE9ubHlfLjEyNy4wLjAuMQlUUlVFCS9wNC8JRkFMU0UJMAlodHRwb25seQlteXZhbHVlMQorI0h0dHBPbmx5Xy4xMjcuMC4wLjEJVFJVRQkvcDQvCVRSVUUJMAlodHRwYW5kc2VjCW15dmFsdWUyCisjSHR0cE9ubHlfLjEyNy4wLjAuMQlUUlVFCS9wNC8JVFJVRQkwCWh0dHBhbmRzZWMyCW15dmFsdWUzCisjSHR0cE9ubHlfLjEyNy4wLjAuMQlUUlVFCS9wNC8JVFJVRQkwCWh0dHBhbmRzZWMzCW15dmFsdWU0CisjSHR0cE9ubHlfLjEyNy4wLjAuMQlUUlVFCS9wNC8JVFJVRQkwCWh0dHBhbmRzZWM0CW15dmFsdWU1CisjSHR0cE9ubHlfLjEyNy4wLjAuMQlUUlVFCS9wNC8JVFJVRQkwCWh0dHBhbmRzZWM1CW15dmFsdWU2CisjSHR0cE9ubHlfLjEyNy4wLjAuMQlUUlVFCS9wNC8JVFJVRQkwCWh0dHBhbmRzZWM2CW15dmFsdWU3CisjSHR0cE9ubHlfLjEyNy4wLjAuMQlUUlVFCS9wNC8JVFJVRQkwCWh0dHBhbmRzZWM3CW15dmFsdWU4CisjSHR0cE9ubHlfLjEyNy4wLjAuMQlUUlVFCS9wNC8JVFJVRQkwCWh0dHBhbmRzZWM4CW15dmFsdWU5CisuMTI3LjAuMC4xCVRSVUUJLwlGQUxTRQkwCXBhcnRtYXRjaAlwcmVzZW50CisxMjcuMC4wLjEJRkFMU0UJL3dlL3dhbnQvCUZBTFNFCTIwNTQwMzAxODcJbm9kb21haW4JdmFsdWUKKyNIdHRwT25seV8xMjcuMC4wLjEJRkFMU0UJL3NpbGx5LwlGQUxTRQkwCW1hZ2ljCXllc3NpcgorLjAuMC4xCVRSVUUJL3dlL3dhbnQvCUZBTFNFCTAJYmxleHAJeWVzeWVzCis8L2ZpbGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMTAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdhOTM3OQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMxMApAQCAtMCwwICsxLDU3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFBTCitIVFRQIEdFVAorUEVNIGNlcnRpZmljYXRlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDcKKworTW9vTW9vCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHBzIFNlcnZlci1sb2NhbGhvc3Qtc3YucGVtCis8L3NlcnZlcj4KKyA8bmFtZT4KK3NpbXBsZSBIVFRQUyBHRVQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWNhY2VydCAlU1JDRElSL2NlcnRzL0VkZWxDdXJsUm9vdC1jYS5jcnQgaHR0cHM6Ly9sb2NhbGhvc3Q6JUhUVFBTUE9SVC8zMTAKKzwvY29tbWFuZD4KKyMgRW5zdXJlIHRoYXQgd2UncmUgcnVubmluZyBvbiBsb2NhbGhvc3QgYmVjYXVzZSB3ZSdyZSBjaGVja2luZyB0aGUgaG9zdCBuYW1lCis8cHJlY2hlY2s+CitwZXJsIC1lICJwcmludCAnVGVzdCByZXF1aXJlcyBkZWZhdWx0IHRlc3Qgc2VydmVyIGhvc3QnIGlmICggJyVIT1NUSVAnIG5lICcxMjcuMC4wLjEnICk7IgorPC9wcmVjaGVjaz4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8zMTAgSFRUUC8xLjENCitIb3N0OiBsb2NhbGhvc3Q6JUhUVFBTUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMxMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMxMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDY1ZWQxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzExCkBAIC0wLDAgKzEsNDMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUFMKK0hUVFAgR0VUCitQRU0gY2VydGlmaWNhdGUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitTU0wKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cHMgU2VydmVyLWxvY2FsaG9zdDBoLXN2LnBlbQorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQUyB3cm9uZyBzdWJqZWN0QWx0TmFtZSBidXQgcmlnaHQgQ04KKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWNhY2VydCAlU1JDRElSL2NlcnRzL0VkZWxDdXJsUm9vdC1jYS5jcnQgaHR0cHM6Ly9sb2NhbGhvc3Q6JUhUVFBTUE9SVC8zMTEKKzwvY29tbWFuZD4KKyMgRW5zdXJlIHRoYXQgd2UncmUgcnVubmluZyBvbiBsb2NhbGhvc3QgYmVjYXVzZSB3ZSdyZSBjaGVja2luZyB0aGUgaG9zdCBuYW1lCis8cHJlY2hlY2s+CitwZXJsIC1lICJwcmludCAnVGVzdCByZXF1aXJlcyBkZWZhdWx0IHRlc3Qgc2VydmVyIGhvc3QnIGlmICggJyVIT1NUSVAnIG5lICcxMjcuMC4wLjEnICk7IgorPC9wcmVjaGVjaz4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis1MQorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMTIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY0NDIyZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMxMgpAQCAtMCwwICsxLDQzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFBTCitIVFRQIEdFVAorUEVNIGNlcnRpZmljYXRlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHBzIFNlcnZlci1sb2NhbGhvc3Qubm4tc3YucGVtCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFBTIEdFVCB0byBsb2NhbGhvc3QgYW5kIG51bGwtcHJlZml4ZWQgQ04gY2VydAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tY2FjZXJ0ICVTUkNESVIvY2VydHMvRWRlbEN1cmxSb290LWNhLmNydCBodHRwczovL2xvY2FsaG9zdDolSFRUUFNQT1JULzMxMgorPC9jb21tYW5kPgorIyBFbnN1cmUgdGhhdCB3ZSdyZSBydW5uaW5nIG9uIGxvY2FsaG9zdCBiZWNhdXNlIHdlJ3JlIGNoZWNraW5nIHRoZSBob3N0IG5hbWUKKzxwcmVjaGVjaz4KK3BlcmwgLWUgInByaW50ICdUZXN0IHJlcXVpcmVzIGRlZmF1bHQgdGVzdCBzZXJ2ZXIgaG9zdCcgaWYgKCAnJUhPU1RJUCcgbmUgJzEyNy4wLjAuMScgKTsiCis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzUxCis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMxMyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTQ0OTVhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzEzCkBAIC0wLDAgKzEsMzkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUFMKK0hUVFAgR0VUCitQRU0gY2VydGlmaWNhdGUKK0NSTAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK1NTTAorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwcyBTZXJ2ZXItbG9jYWxob3N0LXN2LnBlbQorPC9zZXJ2ZXI+CisgPG5hbWU+CitDUkwgdGVzdAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tY2FjZXJ0ICVTUkNESVIvY2VydHMvRWRlbEN1cmxSb290LWNhLmNydCAtLWNybGZpbGUgJVNSQ0RJUi9jZXJ0cy9TZXJ2ZXItbG9jYWxob3N0LXN2LmNybCBodHRwczovL2xvY2FsaG9zdDolSFRUUFNQT1JULzMxMworPC9jb21tYW5kPgorIyBFbnN1cmUgdGhhdCB3ZSdyZSBydW5uaW5nIG9uIGxvY2FsaG9zdCBiZWNhdXNlIHdlJ3JlIGNoZWNraW5nIHRoZSBob3N0IG5hbWUKKzxwcmVjaGVjaz4KK3BlcmwgLWUgInByaW50ICdUZXN0IHJlcXVpcmVzIGRlZmF1bHQgdGVzdCBzZXJ2ZXIgaG9zdCcgaWYgKCAnJUhPU1RJUCcgbmUgJzEyNy4wLjAuMScgKTsiCis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzYwCis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkyZmZjYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMyCkBAIC0wLDAgKzEsNTYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKy1HCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCistZm9vLQorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCAtZCBhbmQgLUcKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistZCAiZm9vPW1vbyZtb289cG9vIiBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMzIgLUcKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8zMj9mb289bW9vJm1vbz1wb28gSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuOS41IChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybCA3LjkuNS1jdnMgKE9wZW5TU0wgMC45LjUpIChpcHY2IGVuYWJsZWQpDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMjAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5YmVjNQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMyMApAQCAtMCwwICsxLDk1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFBTCitIVFRQIEdFVAorVExTLVNSUAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4wIDIwMCBPSw0KK0NvbnRlbnQtdHlwZTogdGV4dC9odG1sDQorDQorCis8SFRNTD48Qk9EWT4KKzxDRU5URVI+PEgxPlRoaXMgaXMgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dudXRscyI+R05VVExTPC9hPjwvSDE+PC9DRU5URVI+CisKKworPHA+U2Vzc2lvbiBJRDogPGk+MDAzMDMwMDAwMTAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDMwMzMwMDAxMDAwMDAwQjA2MjQxMDAwMTAwMDAwMDwvaT48L3A+Cis8aDU+SWYgeW91ciBicm93c2VyIHN1cHBvcnRzIHNlc3Npb24gcmVzdW1pbmcsIHRoZW4geW91IHNob3VsZCBzZWUgdGhlIHNhbWUgc2Vzc2lvbiBJRCwgd2hlbiB5b3UgcHJlc3MgdGhlIDxiPnJlbG9hZDwvYj4gYnV0dG9uLjwvaDU+Cis8cD5Db25uZWN0ZWQgYXMgdXNlciAnanNtaXRoJy48L3A+Cis8UD4KKzxUQUJMRSBib3JkZXI9MT48VFI+PFREPlByb3RvY29sIHZlcnNpb246PC9URD48VEQ+VExTMS4yPC9URD48L1RSPgorPFRSPjxURD5LZXkgRXhjaGFuZ2U6PC9URD48VEQ+U1JQPC9URD48L1RSPgorPFRSPjxURD5Db21wcmVzc2lvbjwvVEQ+PFREPk5VTEw8L1REPjwvVFI+Cis8VFI+PFREPkNpcGhlcjwvVEQ+PFREPkFFUy0xMjgtQ0JDPC9URD48L1RSPgorPFRSPjxURD5NQUM8L1REPjxURD5TSEExPC9URD48L1RSPgorPFRSPjxURD5DaXBoZXJzdWl0ZTwvVEQ+PFREPlNSUF9TSEFfQUVTXzEyOF9DQkNfU0hBMTwvVEQ+PC9UUj48L3A+PC9UQUJMRT4KKzxocj48UD5Zb3VyIEhUVFAgaGVhZGVyIHdhczo8UFJFPlVzZXItQWdlbnQ6IGN1cmwvNy4yMS40LURFViAoeDg2XzY0LWFwcGxlLWRhcndpbjEwLjUuMCkgbGliY3VybC83LjIxLjQtREVWIEdudVRMUy8yLjEwLjQgemxpYi8xLjIuNSBsaWJpZG4vMS4xOQ0KK0hvc3Q6IGxvY2FsaG9zdDo5MDExDQorQWNjZXB0OiAqLyoNCisNCis8L1BSRT48L1A+Cis8L0JPRFk+PC9IVE1MPgorCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHB0bHMrc3JwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK1RMUy1TUlAKKzwvZmVhdHVyZXM+CisgPG5hbWU+CitzaW1wbGUgVExTLVNSUCBIVFRQUyBHRVQsIGNoZWNrIHVzZXIgaW4gcmVzcG9uc2UKKyA8L25hbWU+Cis8Y29tbWFuZD4KKy0taW5zZWN1cmUgLS10bHNhdXRodHlwZSBTUlAgLS10bHN1c2VyIGpzbWl0aCAtLXRsc3Bhc3N3b3JkIGFiYyBodHRwczovLyVIT1NUSVA6JUhUVFBUTFNTUlBQT1JUCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+Cis8L3Byb3RvY29sPgorPGZpbGUgbmFtZT0ibG9nL2N1cmwzMjAub3V0IiBtb2RlPSJ0ZXh0Ij4KK0hUVFAvMS4wIDIwMCBPSw0KK0NvbnRlbnQtdHlwZTogdGV4dC9odG1sDQorDQorCis8SFRNTD48Qk9EWT4KKzxDRU5URVI+PEgxPlRoaXMgaXMgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dudXRscyI+R05VVExTPC9hPjwvSDE+PC9DRU5URVI+CisKKworCis8aDU+SWYgeW91ciBicm93c2VyIHN1cHBvcnRzIHNlc3Npb24gcmVzdW1pbmcsIHRoZW4geW91IHNob3VsZCBzZWUgdGhlIHNhbWUgc2Vzc2lvbiBJRCwgd2hlbiB5b3UgcHJlc3MgdGhlIDxiPnJlbG9hZDwvYj4gYnV0dG9uLjwvaDU+Cis8cD5Db25uZWN0ZWQgYXMgdXNlciAnanNtaXRoJy48L3A+Cis8UD4KKzxUQUJMRSBib3JkZXI9MT48VFI+PFREPgorPFRSPjxURD5LZXkgRXhjaGFuZ2U6PC9URD48VEQ+U1JQPC9URD48L1RSPgorPFRSPjxURD5Db21wcmVzc2lvbjwvVEQ+PFREPk5VTEw8L1REPjwvVFI+Cis8VFI+PFREPkNpcGhlcjwvVEQ+PFREPkFFUy0xMjgtQ0JDPC9URD48L1RSPgorPFRSPjxURD5NQUM8L1REPjxURD5TSEExPC9URD48L1RSPgorPFRSPjxURD5DaXBoZXJzdWl0ZTwvVEQ+PFREPlNSUF9TSEFfQUVTXzEyOF9DQkNfU0hBMTwvVEQ+PC9UUj48L3A+PC9UQUJMRT4KKworSG9zdDogJUhPU1RJUDolSFRUUFRMU1NSUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvUFJFPjwvUD4KKzwvQk9EWT48L0hUTUw+CisKKzwvZmlsZT4KKzxzdHJpcGZpbGU+CitzL148cD5TZXNzaW9uIElEOi4qLy8KK3MvXjxocj48UD5Zb3VyIEhUVFAgaGVhZGVyIHdhczouKi8vCitzL1Byb3RvY29sIHZlcnNpb246LiovLworPC9zdHJpcGZpbGU+Cis8L3ZlcmlmeT4KKworPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMyMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMyMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2RmYjg2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzIxCkBAIC0wLDAgKzEsMzMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUFMKK1RMUy1TUlAKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cHRscytzcnAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorVExTLVNSUAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK1RMUy1TUlAgd2l0aCBiYWQgdXNlcm5hbWUgYW5kIHBhc3N3b3JkCisgPC9uYW1lPgorPGNvbW1hbmQ+CistLWluc2VjdXJlIC0tdGxzYXV0aHR5cGUgU1JQIC0tdGxzdXNlciBiYWR1c2VyIC0tdGxzcGFzc3dvcmQgYmFkcGFzcyBodHRwczovLyVIT1NUSVA6JUhUVFBUTFNTUlBQT1JUCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMzUKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+CisKKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMjIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1MzQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMyMgpAQCAtMCwwICsxLDMzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFBTCitUTFMtU1JQCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHB0bHMrc3JwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK1RMUy1TUlAKKzwvZmVhdHVyZXM+CisgPG5hbWU+CitUTFMtU1JQIHdpdGggYmFkIHBhc3N3b3JkCisgPC9uYW1lPgorPGNvbW1hbmQ+CistLWluc2VjdXJlIC0tdGxzYXV0aHR5cGUgU1JQIC0tdGxzdXNlciBqc21pdGggLS10bHNwYXNzd29yZCBiYWRwYXNzIGh0dHBzOi8vJUhPU1RJUDolSFRUUFRMU1NSUFBPUlQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+CiszNQorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKworPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMyMyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMyMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDM5YjRkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzIzCkBAIC0wLDAgKzEsMzMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUFMKK1RMUy1TUlAKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cHMKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorVExTLVNSUAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK1RMUy1TUlAgdG8gbm9uLVRMUy1TUlAgc2VydmVyCisgPC9uYW1lPgorPGNvbW1hbmQ+CistLWluc2VjdXJlIC0tdGxzYXV0aHR5cGUgU1JQIC0tdGxzdXNlciBqc21pdGggLS10bHNwYXNzd29yZCBiYWRwYXNzIGh0dHBzOi8vJUhPU1RJUDolSFRUUFNQT1JUL3dhbnQvMzIzCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMzUKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+CisKKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMjQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzMjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMxYzQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMyNApAQCAtMCwwICsxLDMzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFBTCitUTFMtU1JQCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHB0bHMrc3JwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK1RMUy1TUlAKKzwvZmVhdHVyZXM+CisgPG5hbWU+CitUTFMtU1JQIHdpdGggc2VydmVyIGNlcnQgY2hlY2tpbmcKKyA8L25hbWU+Cis8Y29tbWFuZD4gIyBubyAtLWluc2VjdXJlCistLXRsc2F1dGh0eXBlIFNSUCAtLXRsc3VzZXIganNtaXRoIC0tdGxzcGFzc3dvcmQgYWJjIGh0dHBzOi8vJUhPU1RJUDolSFRUUFRMU1NSUFBPUlQvd2FudC8zMjMKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis1MQorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKworPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjZjgwYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDMzCkBAIC0wLDAgKzEsNjQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQVVQKK1Jlc3VtZQorQ29udGVudC1SYW5nZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgT0sgc3dzY2xvc2UKKworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgUFVUIHdpdGggcmVzdW1lCisgPC9uYW1lPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3QzMy50eHQiPgorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4Cis8L2ZpbGU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMzMgLVRsb2cvdGVzdDMzLnR4dCAtQyA1MAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQVVQgLzMzIEhUVFAvMS4xDQorQ29udGVudC1SYW5nZTogYnl0ZXMgNTAtOTkvMTAwDQorVXNlci1BZ2VudDogY3VybC83LjYgKHNwYXJjLXN1bi1zb2xhcmlzMi43KSBsaWJjdXJsIDcuNi1wcmU0IChTU0wgMC45LjYpIChrcmI0IGVuYWJsZWQpDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiA1MA0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorDQorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzAxMjM0NTY3OAorMDEyMzQ1Njc4CiswMTIzNDU2NzgKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMzJiOGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzNApAQCAtMCwwICsxLDY2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitjaHVua2VkIFRyYW5zZmVyLUVuY29kaW5nCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgZnVua3kgY2h1bmt5IQorU2VydmVyOiBmYWtlaXQvMC45IGZha2VpdGJhZC8xLjAKK1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkCitDb25uZWN0aW9uOiBtb29vCisKKzQwDQorYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ0KKzMwDQorYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiDQorMjE7aGVyZXNhdGVzdD1tb29vbw0KK2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisNCiswDQorDQorPC9kYXRhPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBmdW5reSBjaHVua3khCitTZXJ2ZXI6IGZha2VpdC8wLjkgZmFrZWl0YmFkLzEuMAorVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQKK0Nvbm5lY3Rpb246IG1vb28KKworYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB3aXRoIGNodW5rZWQgVHJhbnNmZXItRW5jb2RpbmcKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMzQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8zNCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+CisKKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NzMzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzNTAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzNTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMyMmQzMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM1MApAQCAtMCwwICsxLDU3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorTElTVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKyMgV2hlbiBkb2luZyBMSVNULCB3ZSBnZXQgdGhlIGRlZmF1bHQgbGlzdCBvdXRwdXQgaGFyZC1jb2RlZCBpbiB0aGUgdGVzdAorIyBGVFAgc2VydmVyCis8ZGF0YWNoZWNrPgordG90YWwgMjAKK2Ryd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4KK2Ryd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4uCitkcnd4ci14ci14ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAgMiAgMTk5NiAuTmVYVAorLXItLXItLXItLSAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAzNSBKdWwgMTYgIDE5OTYgUkVBRE1FCitscnd4cnd4cnd4ICAgMSAwICAgICAgICAxICAgICAgICAgICAgICA3IERlYyAgOSAgMTk5OSBiaW4gLT4gdXNyL2JpbgorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgZGV2Citkcnd4cnd4cnd4ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAyOSAxNjowNCBkb3dubG9hZC5odG1sCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE5vdiAzMCAgMTk5NSBldGMKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0IDMwIDE0OjMzIHB1YgorZHIteHIteHIteCAgIDUgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgdXNyCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCByb290IGRpciBsaXN0IG11bHRpY3dkCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8vIC0tZnRwLW1ldGhvZCBtdWx0aWN3ZAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCAvDQorRVBTVg0KK1RZUEUgQQ0KK0xJU1QNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM1MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM1MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDQ0YTY0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzUxCkBAIC0wLDAgKzEsNTYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitMSVNUCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIHJvb3QgZGlyIGxpc3Qgbm9jd2QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULy8gLS1mdHAtbWV0aG9kIG5vY3dkCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgQQ0KK0xJU1QgLw0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzUyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Njg4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzNTIKQEAgLTAsMCArMSw1NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK0xJU1QKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisjIFdoZW4gZG9pbmcgTElTVCwgd2UgZ2V0IHRoZSBkZWZhdWx0IGxpc3Qgb3V0cHV0IGhhcmQtY29kZWQgaW4gdGhlIHRlc3QKKyMgRlRQIHNlcnZlcgorPGRhdGFjaGVjaz4KK3RvdGFsIDIwCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuLgorZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFQKKy1yLS1yLS1yLS0gICAxIDAgICAgICAgIDEgICAgICAgICAgICAgMzUgSnVsIDE2ICAxOTk2IFJFQURNRQorbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldgorZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgMjkgMTY6MDQgZG93bmxvYWQuaHRtbAorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCitkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWIKK2RyLXhyLXhyLXggICA1IDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IHVzcgorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgcm9vdCBkaXIgbGlzdCBzaW5nbGVjd2QKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULy8gLS1mdHAtbWV0aG9kIHNpbmdsZWN3ZAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCAvDQorRVBTVg0KK1RZUEUgQQ0KK0xJU1QNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM1MyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM1MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTdiOGMzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzUzCkBAIC0wLDAgKzEsNTYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitMSVNUCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIGhvbWUgZGlyIGxpc3Qgc2luZ2xlY3dkCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8gLS1mdHAtbWV0aG9kIHNpbmdsZWN3ZAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzNTQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzNTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY5NDkzMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM1NApAQCAtMCwwICsxLDUwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorUkVUUgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9kYXRhPgorPHNlcnZlcmNtZD4KK1JFUExZIFVTRVIgMjAwIGZpbmUsIHByb2NlZWQgd2l0aG91dCBwYXNzd29yZAorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgd2l0aG91dCBwYXNzd29yZAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvMzU0Cis8L2NvbW1hbmQ+CisKKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgMzU0DQorUkVUUiAzNTQNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzZmQ4YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM2CkBAIC0wLDAgKzEsNjYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2NodW5rZWQgVHJhbnNmZXItRW5jb2RpbmcKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBmdW5reSBjaHVua3khCitTZXJ2ZXI6IGZha2VpdC8wLjkgZmFrZWl0YmFkLzEuMAorVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQKK0Nvbm5lY3Rpb246IG1vb28KKworMg0KK2EKKw0KK0lMTEVHQUwNCitiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYg0KKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAyMDAgZnVua3kgY2h1bmt5IQorU2VydmVyOiBmYWtlaXQvMC45IGZha2VpdGJhZC8xLjAKK1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkCitDb25uZWN0aW9uOiBtb29vCisKK2EKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGggYmFkIGNodW5rZWQgVHJhbnNmZXItRW5jb2RpbmcKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMzYKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis1NgorPC9lcnJvcmNvZGU+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvMzYgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorCis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njg3NjIzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzcKQEAgLTAsMCArMSw0NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGggbm90aGluZyByZXR1cm5lZCBmcm9tIHNlcnZlcgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8zNworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzUyCis8L2Vycm9yY29kZT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8zNyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+CisKKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzOCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MTU1ODYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3QzOApAQCAtMCwwICsxLDYxIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitSZXN1bWUKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjAgMjAwIE1vb28KK0RhdGU6IE1vbiwgMTMgTm92IDIwMDAgMTM6NDE6MDkgR01UCitTZXJ2ZXI6IG15b3duLzEuMAorQ29ubmVjdGlvbjogY2xvc2UKKwordG9kZWxvb29vbyBsYWxhbGFsYSB5YWRhIHlhZGEsIHdlIGtub3cgbm90aGluZyBhYm91dCByYW5nZXMgOy0pCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCByZXN1bWUgcmVxdWVzdCB3aXRob3V0IHNlcnZlciBzdXBwb3J0aW5nIGl0CisgPC9uYW1lPgorIDxjb21tYW5kIG9wdGlvbj0ibm8tb3V0cHV0Ij4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzM4IC1DIC0gLS1uby1pbmNsdWRlIC1vIGxvZy9mZXdsLnR4dAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL2Zld2wudHh0Ij4KK1RoaXMgdGV4dCBpcyBoZXJlIHRvIHNpbXVsYXRlIGEgcGFydGx5IGRvd25sb2FkZWQgZmlsZSB0byByZXN1bWUKK2Rvd25sb2FkIG9uLgorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzMzCis8L2Vycm9yY29kZT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzM4IEhUVFAvMS4xDQorUmFuZ2U6IGJ5dGVzPTc4LQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorCisjIHRoZSBkb3dubG9hZCB0YXJnZXQgZmlsZSBtdXN0IHJlbWFpbiB1bnRvdWNoZWQKKzxmaWxlIG5hbWU9ImxvZy9mZXdsLnR4dCI+CitUaGlzIHRleHQgaXMgaGVyZSB0byBzaW11bGF0ZSBhIHBhcnRseSBkb3dubG9hZGVkIGZpbGUgdG8gcmVzdW1lCitkb3dubG9hZCBvbi4KKzwvZmlsZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0MzkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4ZGEzMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDM5CkBAIC0wLDAgKzEsOTEgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBGT1JNUE9TVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogMTANCisKK2JsYWJsYWJsYQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgUkZDMTg2Ny10eXBlIGZvcm1wb3N0aW5nIHdpdGggZmlsZW5hbWU9IGFuZCB0eXBlPQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50LzM5IC1GIG5hbWU9ZGFuaWVsIC1GIHRvb2w9Y3VybCAtLWZvcm0tc3RyaW5nICJzdHIxPUBsaXRlcmFsIiAtLWZvcm0tc3RyaW5nICJzdHIyPTx2ZXJiYXRpbTt0eXBlPXh4eC95eXkiIC1GICJmaWxlPUBsb2cvdGVzdDM5LnR4dDt0eXBlPW1vby9mb29iYXI7ZmlsZW5hbWU9ZmFrZXJmaWxlIiAtRiBmaWxlMj1AbG9nL3Rlc3QzOS50eHQKKzwvY29tbWFuZD4KKyMgV2UgY3JlYXRlIHRoaXMgZmlsZSBiZWZvcmUgdGhlIGNvbW1hbmQgaXMgaW52b2tlZCEKKzxmaWxlIG5hbWU9ImxvZy90ZXN0MzkudHh0Ij4KK2ZvbyBiYXIKK1RoaXMgaXMgYSBiYXIgZm9vCitiYXIKK2ZvbworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXihVc2VyLUFnZW50OnxDb250ZW50LVR5cGU6IG11bHRpcGFydC9mb3JtLWRhdGE7fC0tLS0tLS0pLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQT1NUIC93ZS93YW50LzM5IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEwLjQgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNCBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDgxMA0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tMjRlNzgwMDBiZDMyDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tMjRlNzgwMDBiZDMyDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIg0KKw0KK2RhbmllbA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTI0ZTc4MDAwYmQzMg0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0idG9vbCINCisNCitjdXJsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tMjRlNzgwMDBiZDMyDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJzdHIxIg0KKw0KK0BsaXRlcmFsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tMjRlNzgwMDBiZDMyDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJzdHIyIg0KKw0KKzx2ZXJiYXRpbTt0eXBlPXh4eC95eXkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0yNGU3ODAwMGJkMzINCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImZpbGUiOyBmaWxlbmFtZT0iZmFrZXJmaWxlIg0KK0NvbnRlbnQtVHlwZTogbW9vL2Zvb2Jhcg0KKw0KK2ZvbyBiYXIKK1RoaXMgaXMgYSBiYXIgZm9vCitiYXIKK2ZvbworDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tMjRlNzgwMDBiZDMyDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlMiI7IGZpbGVuYW1lPSJ0ZXN0MzkudHh0Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KKw0KK2ZvbyBiYXIKK1RoaXMgaXMgYSBiYXIgZm9vCitiYXIKK2ZvbworDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tMjRlNzgwMDBiZDMyLS0NCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY2OWQzMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQKQEAgLTAsMCArMSw1NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBhZGRlZCBoZWFkZXJzCitIVFRQIHJlcGxhY2VkIGhlYWRlcnMKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorUmVwbGFjZWQgaW50ZXJuYWwgYW5kIGFkZGVkIGN1c3RvbSBIVFRQIGhlYWRlcnMKKyA8L25hbWU+CisgPGNvbW1hbmQ+CisgLUggImV4dHJhLWhlYWRlcjogaGVyZSIgLUggIkFjY2VwdDogcmVwbGFjZWQiIC1IICJYLUN1c3RvbS1IZWFkZXI7IiAtSCAiWC1UZXN0OiBmb287ICIgLUggIlgtVGVzdDoiIC1IICJYLVRlc3QyOiBmb287IiAtSCAiWC1UZXN0MzogICIgLUggIlgtVGVzdDQ7ICAiIC1IICJYLVRlc3Q1O2lnbm9yZWQiIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC80Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvNCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorZXh0cmEtaGVhZGVyOiBoZXJlDQorQWNjZXB0OiByZXBsYWNlZA0KK1gtQ3VzdG9tLUhlYWRlcjoNCitYLVRlc3Q6IGZvbzsgDQorWC1UZXN0MjogZm9vOw0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NmZmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MApAQCAtMCwwICsxLDc0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAyIE9LIHN3c2Nsb3NlDQorTG9jYXRpb246IC4uL21vby5odG1sLz9uYW1lPWQgYSBuaWVsJnRlc3RjYXNlPS80MDAwMDIgICAgDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KKzwvZGF0YT4KKzxkYXRhMj4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorTG9jYXRpb246IHRoaXMgc2hvdWxkIGJlIGlnbm9yZWQKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb25uZWN0aW9uOiBjbG9zZQorCitib2R5Cis8L2RhdGEyPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDMwMiBPSyBzd3NjbG9zZQ0KK0xvY2F0aW9uOiAuLi9tb28uaHRtbC8/bmFtZT1kIGEgbmllbCZ0ZXN0Y2FzZT0vNDAwMDAyICAgIA0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0xvY2F0aW9uOiB0aGlzIHNob3VsZCBiZSBpZ25vcmVkCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworYm9keQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCByZWRpcmVjdCB3aXRoIHdoaXRlc3BhY2UgYWZ0ZXIgPyAoYW5kIGNvbnZlcnNpb24pCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL2FyZS9hbGwvdHdpdHMvNDAgLUwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93ZS9hcmUvYWxsL3R3aXRzLzQwIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvd2UvYXJlL2FsbC9tb28uaHRtbC8/bmFtZT1kK2ErbmllbCZ0ZXN0Y2FzZT0vNDAwMDAyIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEwIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwIE9wZW5TU0wvMC45LjZjIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDAwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDU5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MDAKQEAgLTAsMCArMSw2MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFBTCitQQVNWCitMSVNUCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUFMgc2VydmVyCis8ZGF0YWNoZWNrPgordG90YWwgMjAKK2Ryd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4KK2Ryd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4uCitkcnd4ci14ci14ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAgMiAgMTk5NiAuTmVYVAorLXItLXItLXItLSAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAzNSBKdWwgMTYgIDE5OTYgUkVBRE1FCitscnd4cnd4cnd4ICAgMSAwICAgICAgICAxICAgICAgICAgICAgICA3IERlYyAgOSAgMTk5OSBiaW4gLT4gdXNyL2JpbgorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgZGV2Citkcnd4cnd4cnd4ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAyOSAxNjowNCBkb3dubG9hZC5odG1sCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE5vdiAzMCAgMTk5NSBldGMKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0IDMwIDE0OjMzIHB1YgorZHIteHIteHIteCAgIDUgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgdXNyCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitTU0wKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgorZnRwcworPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFBTIGRpciBsaXN0IFBBU1YgdW5lbmNyeXB0ZWQgZGF0YQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1rIC0tZnRwLXNzbC1jb250cm9sIGZ0cHM6Ly8lSE9TVElQOiVGVFBTUE9SVC8KKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQQlNaIDANCitQUk9UIEMNCitQV0QNCitFUFNWDQorVFlQRSBBDQorTElTVA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDAxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMDFjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MDEKQEAgLTAsMCArMSw1NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFBTCitFUFNWCitTVE9SCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2Z0cHMKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQUyBQQVNWIHVwbG9hZCBmaWxlCisgPC9uYW1lPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3Q0MDEudHh0Ij4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUFMKK3dvcmtzCisgIHNvIGRvZXMgaXQ/Cis8L2ZpbGU+CisgPGNvbW1hbmQ+CistayAtLWZ0cC1zc2wtY29udHJvbCBmdHBzOi8vJUhPU1RJUDolRlRQU1BPUlQvNDAxIC1UIGxvZy90ZXN0NDAxLnR4dAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHVwbG9hZD4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUFMKK3dvcmtzCisgIHNvIGRvZXMgaXQ/Cis8L3VwbG9hZD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQQlNaIDANCitQUk9UIEMNCitQV0QNCitFUFNWDQorVFlQRSBJDQorU1RPUiA0MDENCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQwMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzJjNGUzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDAyCkBAIC0wLDAgKzEsMzUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQUworRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK1NTTAorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQIFNTTCByZXF1aXJlZCBvbiBub24tU1NMIHNlcnZlcgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1rIC0tZnRwLXNzbC1yZXFkIGZ0cDovLyVIT1NUSVA6JUZUUFBPUlQvNDAyCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNjQKKzwvZXJyb3Jjb2RlPgorPHByb3RvY29sPgorQVVUSCBTU0wNCitBVVRIIFRMUw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MDMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI4ZmY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQwMwpAQCAtMCwwICsxLDY0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUFMKK1BBU1YKK0xJU1QKK0NDQworRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKyMgV2hlbiBkb2luZyBMSVNULCB3ZSBnZXQgdGhlIGRlZmF1bHQgbGlzdCBvdXRwdXQgaGFyZC1jb2RlZCBpbiB0aGUgdGVzdAorIyBGVFBTIHNlcnZlcgorPGRhdGFjaGVjaz4KK3RvdGFsIDIwCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuLgorZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFQKKy1yLS1yLS1yLS0gICAxIDAgICAgICAgIDEgICAgICAgICAgICAgMzUgSnVsIDE2ICAxOTk2IFJFQURNRQorbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldgorZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgMjkgMTY6MDQgZG93bmxvYWQuaHRtbAorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCitkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWIKK2RyLXhyLXhyLXggICA1IDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IHVzcgorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2Z0cHMKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQUyB3aXRoIENDQyBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlcgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1rIC0tZnRwLXNzbC1jb250cm9sIC0tZnRwLXNzbC1jY2MgZnRwczovLyVIT1NUSVA6JUZUUFNQT1JULworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BCU1ogMA0KK1BST1QgQw0KK0NDQw0KK1BXRA0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MDQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2NjYzMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQwNApAQCAtMCwwICsxLDMxIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUFMKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitTU0wKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgorZnRwcworPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFBTIHdpdGggaW52YWxpZCBjYWNlcnQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWZ0cC1zc2wtY29udHJvbCAtLWNhY2VydCBtb29vbyBmdHBzOi8vJUhPU1RJUDolRlRQU1BPUlQvCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNzcKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDA1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDA1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZTdhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MDUKQEAgLTAsMCArMSwzNCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFBTCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFBTIG9wZXJhdGlvbiB0byBGVFAgcG9ydAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1tIDUgLWsgZnRwczovLyVIT1NUSVA6JUZUUFBPUlQvcGF0aC90by9maWxlLzQwNQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyBlcnJvciBjb2RlIDM1IGlzIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SCisjIEdudVRMUyBzZWVtcyB0byBub3QgZmFpbCBvbiBpdHMgaGFuZHNoYWtlIGJ1dCBpbnN0ZWFkIHRpbWVzIG91dCB3aGljaCBnaXZlcworIyBlcnJvciAyOAorPGVycm9yY29kZT4KKzM1LDI4Cis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQwNiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU5YmM2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDA2CkBAIC0wLDAgKzEsNjYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQUworUE9SVAorTElTVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKyMgV2hlbiBkb2luZyBMSVNULCB3ZSBnZXQgdGhlIGRlZmF1bHQgbGlzdCBvdXRwdXQgaGFyZC1jb2RlZCBpbiB0aGUgdGVzdAorIyBGVFBTIHNlcnZlcgorPGRhdGFjaGVjaz4KK3RvdGFsIDIwCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuLgorZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFQKKy1yLS1yLS1yLS0gICAxIDAgICAgICAgIDEgICAgICAgICAgICAgMzUgSnVsIDE2ICAxOTk2IFJFQURNRQorbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldgorZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgMjkgMTY6MDQgZG93bmxvYWQuaHRtbAorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCitkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWIKK2RyLXhyLXhyLXggICA1IDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IHVzcgorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2Z0cHMKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQUyBkaXIgbGlzdCwgUE9SVCB3aXRoIHNwZWNpZmllZCBJUAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1rIC0tZnRwLXNzbC1jb250cm9sIC1QICVDTElFTlRJUCBmdHBzOi8vJUhPU1RJUDolRlRQU1BPUlQvCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIFN0cmlwIGFsbCB2YWxpZCBraW5kcyBvZiBQT1JUIGFuZCBFUFJUIHRoYXQgY3VybCBjYW4gc2VuZAorPHN0cmlwPgorXlBPUlQgXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30KK15FUFJUIFx8MVx8XGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVx8XGR7MSw1fVx8Cis8L3N0cmlwPgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BCU1ogMA0KK1BST1QgQw0KK1BXRA0KK1BPUlQgMTI3LDAsMCwxLDI0MywyMTINCitUWVBFIEENCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MDcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxNGZhOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQwNwpAQCAtMCwwICsxLDU5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUFMKK1BBU1YKK1JFVFIKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZGF0YSBibG9iYgorPC9kYXRhPgorCisjIGRhdGEgaXMgc2VudCB0byBzdGRvdXQKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitTU0wKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgorZnRwcworPC9zZXJ2ZXI+CisgPG5hbWU+CitHZXQgdHdvIEZUUFMgZmlsZXMgZnJvbSB0aGUgc2FtZSByZW1vdGUgZGlyOiBubyBzZWNvbmQgQ1dECisgPC9uYW1lPgorIDxjb21tYW5kPgorLWsgLS1mdHAtc3NsLWNvbnRyb2wgZnRwczovLyVIT1NUSVA6JUZUUFNQT1JUL2EvcGF0aC80MDcgZnRwczovLyVIT1NUSVA6JUZUUFNQT1JUL2EvcGF0aC80MDcKKzwvY29tbWFuZD4KKzxzdGRvdXQ+CitkYXRhIGJsb2JiCitkYXRhIGJsb2JiCis8L3N0ZG91dD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQQlNaIDANCitQUk9UIEMNCitQV0QNCitDV0QgYQ0KK0NXRCBwYXRoDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgNDA3DQorUkVUUiA0MDcNCitFUFNWDQorU0laRSA0MDcNCitSRVRSIDQwNw0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDA4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYWExM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MDgKQEAgLTAsMCArMSw2MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFBTCitQT1JUCitTVE9SCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2Z0cHMKKzwvc2VydmVyPgorIDxuYW1lPgorRlRQUyBQT1JUIHVwbG9hZCB3aXRoIENXRAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy1rIC0tZnRwLXNzbC1jb250cm9sIGZ0cHM6Ly8lSE9TVElQOiVGVFBTUE9SVC9DV0QvU1RPUi9SRVRSLzQwOCAtVCBsb2cvdXBsb2FkNDA4IC1QIC0KKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy91cGxvYWQ0MDgiPgorTW9vb29vb29vb29vbworIHVwbG9hZCB0aGlzCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIFN0cmlwIGFsbCB2YWxpZCBraW5kcyBvZiBQT1JUIGFuZCBFUFJUIHRoYXQgY3VybCBjYW4gc2VuZAorPHN0cmlwPgorXlBPUlQgXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30KK15FUFJUIFx8MVx8XGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVx8XGR7MSw1fVx8Cis8L3N0cmlwPgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BCU1ogMA0KK1BST1QgQw0KK1BXRA0KK0NXRCBDV0QNCitDV0QgU1RPUg0KK0NXRCBSRVRSDQorUE9SVCAxMjcsMCwwLDEsNSwxMDkNCitUWVBFIEkNCitTVE9SIDQwOA0KK1FVSVQNCis8L3Byb3RvY29sPgorPHVwbG9hZD4KK01vb29vb29vb29vb28KKyB1cGxvYWQgdGhpcworPC91cGxvYWQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MDkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4MDFhOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQwOQpAQCAtMCwwICsxLDU2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUFMKK0VQU1YKK1NUT1IKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitTU0wKKzwvZmVhdHVyZXM+Cis8c2VydmVyPgorZnRwcworPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFBTIFBBU1YgdXBsb2FkIGZpbGUKKyA8L25hbWU+Cis8ZmlsZSBuYW1lPSJsb2cvdGVzdDQwOS50eHQiPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9maWxlPgorIDxjb21tYW5kPgorLWsgLS1mdHAtc3NsLWNvbnRyb2wgZnRwczovLyVIT1NUSVA6JUZUUFNQT1JULzQwOSAtVCBsb2cvdGVzdDQwOS50eHQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzx1cGxvYWQ+CitkYXRhCisgICAgdG8KKyAgICAgIHNlZQordGhhdCBGVFAKK3dvcmtzCisgIHNvIGRvZXMgaXQ/Cis8L3VwbG9hZD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQQlNaIDANCitQUk9UIEMNCitQV0QNCitFUFNWDQorVFlQRSBJDQorU1RPUiA0MDkNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlY2EzOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQxCkBAIC0wLDAgKzEsMzIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBGT1JNUE9TVAorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIGZvcm1wb3N0IHdpdGggbWlzc2luZyBmaWxlCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvNDEgLUYgbW9vPUBib28KKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+CisyNgorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNjc0MjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0MgpAQCAtMCwwICsxLDc0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAyIE9LIHN3c2Nsb3NlDQorTG9jYXRpb246IC4uL20gbyBvLmh0bWwvNDIwMDAyICAgIA0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0xvY2F0aW9uOiB0aGlzIHNob3VsZCBiZSBpZ25vcmVkCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworYm9keQorPC9kYXRhMj4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDIgT0sgc3dzY2xvc2UNCitMb2NhdGlvbjogLi4vbSBvIG8uaHRtbC80MjAwMDIgICAgDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorTG9jYXRpb246IHRoaXMgc2hvdWxkIGJlIGlnbm9yZWQKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb25uZWN0aW9uOiBjbG9zZQorCitib2R5Cis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHJlZGlyZWN0IHdpdGggd2hpdGVzcGFjZSBpbiBwYXRoIChhbmQgY29udmVyc2lvbikKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2UvYXJlL2FsbC90d2l0cy80MiAtTAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dlL2FyZS9hbGwvdHdpdHMvNDIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC93ZS9hcmUvYWxsL20lMjBvJTIwby5odG1sLzQyMDAwMiBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMCAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMCBPcGVuU1NMLzAuOS42YyBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1MzViYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQzCkBAIC0wLDAgKzEsNzkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2ZvbGxvd2xvY2F0aW9uCitIVFRQIHByb3h5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAzMDEgVGhpcyBpcyBhIHdlaXJkbyB0ZXh0IG1lc3NhZ2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiBkYXRhLzQzMDAwMi50eHQ/Y29vbHNpdGU9eWVzCitDb25uZWN0aW9uOiBjbG9zZQorCitUaGlzIHNlcnZlciByZXBseSBpcyBmb3IgdGVzdGluZyBhIHNpbXBsZSBMb2NhdGlvbjogZm9sbG93aW5nCisKKzwvZGF0YT4KKzxkYXRhMj4KK0hUVFAvMS4xIDIwMCBGb2xsb3dlZCBoZXJlIGZpbmUgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA1MgorCitJZiB0aGlzIGlzIHJlY2VpdmVkLCB0aGUgbG9jYXRpb24gZm9sbG93aW5nIHdvcmtlZAorCis8L2RhdGEyPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDMwMSBUaGlzIGlzIGEgd2VpcmRvIHRleHQgbWVzc2FnZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTG9jYXRpb246IGRhdGEvNDMwMDAyLnR4dD9jb29sc2l0ZT15ZXMKK0Nvbm5lY3Rpb246IGNsb3NlCisKK0hUVFAvMS4xIDIwMCBGb2xsb3dlZCBoZXJlIGZpbmUgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA1MgorCitJZiB0aGlzIGlzIHJlY2VpdmVkLCB0aGUgbG9jYXRpb24gZm9sbG93aW5nIHdvcmtlZAorCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIExvY2F0aW9uOiBmb2xsb3dpbmcgb3ZlciBIVFRQIHByb3h5CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvNDMgLUwgLXggJUhPU1RJUDolSFRUUFBPUlQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzQzIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitHRVQgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvZGF0YS80MzAwMDIudHh0P2Nvb2xzaXRlPXllcyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQ0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyMGExYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQ0CkBAIC0wLDAgKzEsNzIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBGT1JNUE9TVAorSFRUUCByZXBsYWNlZCBoZWFkZXJzCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMCAyMDAgT0sgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKKworYmxhYmxhYmxhCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFJGQzE4NjctdHlwZSBmb3JtcG9zdGluZyB3aXRob3V0IEV4cGVjdDogaGVhZGVyCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvNDQgLUYgbmFtZT1kYW5pZWwgLUYgdG9vbD1jdXJsIC1GIGZpbGU9QGxvZy90ZXN0NDQudHh0IC1IICJFeHBlY3Q6IgorPC9jb21tYW5kPgorIyBXZSBjcmVhdGUgdGhpcyBmaWxlIGJlZm9yZSB0aGUgY29tbWFuZCBpcyBpbnZva2VkIQorPGZpbGUgbmFtZT0ibG9nL3Rlc3Q0NC50eHQiPgorZm9vLQorVGhpcyBpcyBhIG1vby0KK2JhcgorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXihVc2VyLUFnZW50OnxDb250ZW50LVR5cGU6IG11bHRpcGFydC9mb3JtLWRhdGE7fC0tLS0tLSkuKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BPU1QgL3dlL3dhbnQvNDQgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNCAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC40IE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogNDA4DQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIg0KKw0KK2RhbmllbA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTdjNjMzZDVjMjdjZQ0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0idG9vbCINCisNCitjdXJsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIjsgZmlsZW5hbWU9InRlc3Q0NC50eHQiDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorDQorZm9vLQorVGhpcyBpcyBhIG1vby0KK2JhcgorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlLS0NCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWI5YmE5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDUKQEAgLTAsMCArMSw3NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorZm9sbG93bG9jYXRpb24KKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMSBUaGlzIGlzIGEgd2VpcmRvIHRleHQgbWVzc2FnZSBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTG9jYXRpb246IGRhdGEuY2dpP21vbz1odHRwOi8vJi80NTAwMDIKK0Nvbm5lY3Rpb246IGNsb3NlCisKK1RoaXMgc2VydmVyIHJlcGx5IGlzIGZvciB0ZXN0aW5nIGEgc2ltcGxlIExvY2F0aW9uOiBmb2xsb3dpbmcKKworPC9kYXRhPgorPGRhdGEyPgorSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZSBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDUyCisKK0lmIHRoaXMgaXMgcmVjZWl2ZWQsIHRoZSBsb2NhdGlvbiBmb2xsb3dpbmcgd29ya2VkCisKKzwvZGF0YTI+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAxIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMb2NhdGlvbjogZGF0YS5jZ2k/bW9vPWh0dHA6Ly8mLzQ1MDAwMgorQ29ubmVjdGlvbjogY2xvc2UKKworSFRUUC8xLjEgMjAwIEZvbGxvd2VkIGhlcmUgZmluZSBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDUyCisKK0lmIHRoaXMgaXMgcmVjZWl2ZWQsIHRoZSBsb2NhdGlvbiBmb2xsb3dpbmcgd29ya2VkCisKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK3NpbXBsZSBIVFRQIExvY2F0aW9uOiB3aXRob3V0IHByb3RvY29sIGluIGluaXRpYWwgVVJMCisgPC9uYW1lPgorIDxjb21tYW5kPgorJUhPU1RJUDolSFRUUFBPUlQvd2FudC80NSAtTAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dhbnQvNDUgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC93YW50L2RhdGEuY2dpP21vbz1odHRwOi8vJi80NTAwMDIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQ2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkMTkzMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQ2CkBAIC0wLDAgKzEsODkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2Nvb2tpZXMKK2Nvb2tpZWphcgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK1NlcnZlcjogTWljcm9zb2Z0LUlJUy80LjAKK0RhdGU6IFR1ZSwgMjUgU2VwIDIwMDEgMTk6Mzc6NDQgR01UCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorU2V0LUNvb2tpZTogY2t5UGVyc2lzdGVudD1wZXJtYW5lbnQ7IGV4cGlyZXM9RnJpLCAwMi1GZWItMjAzNSAxMTo1NjoyNyBHTVQ7IHBhdGg9LworU2V0LUNvb2tpZTogY2t5U2Vzc2lvbj10ZW1wb3Jhcnk7IHBhdGg9LworU2V0LUNvb2tpZTogQVNQU0VTU0lPTklEUUdHUVFTSko9R0tOQkRJRkFBT0ZEUERBSUVBS0RJQktFOyBwYXRoPS8KK1NldC1Db29raWU6IGp1c3RhbmFtZT07IHBhdGg9LzsKK1NldC1Db29raWU6IHNpbXBseWh1Z2U9enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6CitDYWNoZS1jb250cm9sOiBwcml2YXRlCitDb250ZW50LUxlbmd0aDogNDENCisKK1RoaXMgc2VydmVyIHJlcGx5IGlzIGZvciB0ZXN0aW5nIGNvb2tpZXMKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQLCBnZXQgY29va2llcyBhbmQgc3RvcmUgaW4gY29va2llIGphcgorIDwvbmFtZT4KKyMgRXhwbGljaXRseSBzZXQgdGhlIHRpbWUgem9uZSB0byBhIGtub3duIGdvb2Qgb25lLCBpbiBjYXNlIHRoZSB1c2VyIGlzCisjIHVzaW5nIG9uZSBvZiB0aGUgJ3JpZ2h0JyB6b25lcyB0aGF0IHRha2UgaW50byBhY2NvdW50IGxlYXAgc2Vjb25kcworIyB3aGljaCBjYXVzZXMgdGhlIGNvb2tpZSBleHBpcnkgdGltZXMgdG8gYmUgZGlmZmVyZW50IGZyb20gd2hhdCB3ZSBleHBlY3QuCis8c2V0ZW52PgorVFo9R01UCis8L3NldGVudj4KKyA8Y29tbWFuZD4KKyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvNDYgLWMgbG9nL2phcjQ2IC1iIGxvZy9pbmphcjQ2Cis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvaW5qYXI0NiI+CisjIE5ldHNjYXBlIEhUVFAgQ29va2llIEZpbGUKKyMgaHR0cDovL2N1cmwuaGF4eC5zZS9yZmMvY29va2llX3NwZWMuaHRtbAorIyBUaGlzIGlzIGdlbmVyYXRlZCBieSBsaWJjdXJsISAgRG8gbm90IGVkaXQuCisKK3d3dy5mYWtlLmNvbWUJRkFMU0UJLwlGQUxTRQkxMDIyMTQ0OTUzCWNvb2tpZWNsaWVudGUJc2kKK3d3dy5sb3Nlci5jb20JRkFMU0UJLwlGQUxTRQkxMTM5MTUwOTkzCVVJRAk5OQorJUhPU1RJUAlGQUxTRQkvCUZBTFNFCTE0MzkxNTA5OTMJbW9vbwlpbmRlZWQKKyNIdHRwT25seV8lSE9TVElQCUZBTFNFCS8JRkFMU0UJMTQzOTE1MDk5Mwltb29vMglpbmRlZWQyCislSE9TVElQCUZBTFNFCS8JRkFMU0UJMAllbXB0eQkKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzQ2IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0Nvb2tpZTogZW1wdHk9OyBtb29vMj1pbmRlZWQyOyBtb29vPWluZGVlZA0KKw0KKzwvcHJvdG9jb2w+Cis8ZmlsZSBuYW1lPSJsb2cvamFyNDYiIG1vZGU9InRleHQiPgorIyBOZXRzY2FwZSBIVFRQIENvb2tpZSBGaWxlCisjIGh0dHA6Ly9jdXJsLmhheHguc2UvcmZjL2Nvb2tpZV9zcGVjLmh0bWwKKyMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgbGliY3VybCEgRWRpdCBhdCB5b3VyIG93biByaXNrLgorCit3d3cuZmFrZS5jb21lCUZBTFNFCS8JRkFMU0UJMTAyMjE0NDk1Mwljb29raWVjbGllbnRlCXNpCit3d3cubG9zZXIuY29tCUZBTFNFCS8JRkFMU0UJMTEzOTE1MDk5MwlVSUQJOTkKKyVIT1NUSVAJRkFMU0UJLwlGQUxTRQkxNDM5MTUwOTkzCW1vb28JaW5kZWVkCisjSHR0cE9ubHlfJUhPU1RJUAlGQUxTRQkvCUZBTFNFCTE0MzkxNTA5OTMJbW9vbzIJaW5kZWVkMgorJUhPU1RJUAlGQUxTRQkvCUZBTFNFCTAJZW1wdHkJCislSE9TVElQCUZBTFNFCS8JRkFMU0UJMjA1NDAzMDE4Nwlja3lQZXJzaXN0ZW50CXBlcm1hbmVudAorJUhPU1RJUAlGQUxTRQkvCUZBTFNFCTAJY2t5U2Vzc2lvbgl0ZW1wb3JhcnkKKyVIT1NUSVAJRkFMU0UJLwlGQUxTRQkwCUFTUFNFU1NJT05JRFFHR1FRU0pKCUdLTkJESUZBQU9GRFBEQUlFQUtESUJLRQorJUhPU1RJUAlGQUxTRQkvCUZBTFNFCTAJanVzdGFuYW1lCQorJUhPU1RJUAlGQUxTRQkvd2FudC8JRkFMU0UJMAlzaW1wbHlodWdlCXp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6egorPC9maWxlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTZkNGRhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDcKQEAgLTAsMCArMSw0OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUC8xLjAKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHkgbmFtZT0iNDciPgorPGRhdGE+CitIVFRQLzEuMCAyMDAgT0sgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKKworLWZvby0gd2l0aGluIGZvbyAtIWZvby0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitzaW1wbGUgSFRUUCAxLjAgR0VUCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzQ3IC0wCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvNDcgSFRUUC8xLjANCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorCis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDkyYjQxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NDgKQEAgLTAsMCArMSw0NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEhFQUQKKy1HCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb25uZWN0aW9uOiBjbG9zZQorCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCB3aXRoIC1kIGFuZCAtRyBhbmQgLUkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistZCAiZm9vPW1vbyZtb289cG9vIiBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNDggLUcgLUkKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorSEVBRCAvNDg/Zm9vPW1vbyZtb289cG9vIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0OSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDQ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNDE3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q0OQpAQCAtMCwwICsxLDc0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAyIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogLi4vbW9vLmh0bWwvNDkwMDAyCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworPC9kYXRhPgorPGRhdGEyPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogdGhpcyBzaG91bGQgYmUgaWdub3JlZAorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0Nvbm5lY3Rpb246IGNsb3NlCisKK2JvZHkKKzwvZGF0YTI+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAyIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogLi4vbW9vLmh0bWwvNDkwMDAyCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogdGhpcyBzaG91bGQgYmUgaWdub3JlZAorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0Nvbm5lY3Rpb246IGNsb3NlCisKK2JvZHkKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgZm9sbG93IHJlZGlyZWN0IHdpdGggLi4vCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL2FyZS9hbGwvdHdpdHMvNDkgLUwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93ZS9hcmUvYWxsL3R3aXRzLzQ5IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvd2UvYXJlL2FsbC9tb28uaHRtbC80OTAwMDIgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTAgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAgT3BlblNTTC8wLjkuNmMgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTBlYmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NQpAQCAtMCwwICsxLDUwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIHByb3h5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgb3ZlciBwcm94eQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50L3RoYXQvcGFnZS81IC14ICVIT1NUSVA6JUhUVFBQT1JUCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC90aGF0L3BhZ2UvNSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRiMDVkYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUwCkBAIC0wLDAgKzEsNzQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2ZvbGxvd2xvY2F0aW9uCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAzMDIgT0sgc3dzY2xvc2UKK0xvY2F0aW9uOiAuLi8uLi9tb28uaHRtbC81MDAwMDIKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NTA6MDAgR01UCitDb25uZWN0aW9uOiBjbG9zZQorCis8L2RhdGE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0xvY2F0aW9uOiB0aGlzIHNob3VsZCBiZSBpZ25vcmVkCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjUwOjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworYm9keQorPC9kYXRhMj4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAzMDIgT0sgc3dzY2xvc2UKK0xvY2F0aW9uOiAuLi8uLi9tb28uaHRtbC81MDAwMDIKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NTA6MDAgR01UCitDb25uZWN0aW9uOiBjbG9zZQorCitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0xvY2F0aW9uOiB0aGlzIHNob3VsZCBiZSBpZ25vcmVkCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjUwOjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworYm9keQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBmb2xsb3cgcmVkaXJlY3Qgd2l0aCAuLi8uLi8KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2UvYXJlL2FsbC90d2l0cy81MCAtTAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dlL2FyZS9hbGwvdHdpdHMvNTAgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC93ZS9hcmUvbW9vLmh0bWwvNTAwMDAyIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEwIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwIE9wZW5TU0wvMC45LjZjIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTAwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YjE3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MDAKQEAgLTAsMCArMSw1OCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseSBuYW1lPSIxIj4KKzxkYXRhIG1vZGU9InRleHQiPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMYXN0LU1vZGlmaWVkOiBUdWUsIDEzIEp1biAyMDAwIDEyOjEwOjAwIEdNVAorRVRhZzogIjIxMDI1LWRjNy0zOTQ2MjQ5OCIKK0FjY2VwdC1SYW5nZXM6IGJ5dGVzCitDb250ZW50LUxlbmd0aDogNgorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworLWZvby0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTAwCis8L3Rvb2w+CisKKyA8bmFtZT4KK3NpbXBsZSBsaWJjdXJsIEhUVFAgR0VUIHRvb2wKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTAwIGxvZy9pcDUwMAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGZpbGUgbmFtZT0ibG9nL2lwNTAwIiBtb2RlPSJ0ZXh0Ij4KK0lQOiAlSE9TVElQCis8L2ZpbGU+Cis8cHJvdG9jb2w+CitHRVQgLzUwMCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTAxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljOWRjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MDEKQEAgLTAsMCArMSw0MCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CittaXNzaW5nIFVSTAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseSBuYW1lPSIxIj4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitodHRwCis8L2ZlYXR1cmVzPgorIyB0b29sIGlzIHdoYXQgdG8gdXNlIGluc3RlYWQgb2YgJ2N1cmwnCis8dG9vbD4KK2xpYjUwMQorPC90b29sPgorCisgPG5hbWU+CitzaW1wbGUgbGliY3VybCBhdHRlbXB0IG9wZXJhdGlvbiB3aXRob3V0IFVSTCBzZXQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTAxCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMworPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MDIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczYTRlYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUwMgpAQCAtMCwwICsxLDQ3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZJTEUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBtb2RlPSJ0ZXh0Ij4KK2ZvbworICAgYmFyIHN3c2Nsb3NlCitiYXIKKyAgIGZvbworbW9vCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2ZpbGUKKzwvc2VydmVyPgorIyB0b29sIGlzIHdoYXQgdG8gdXNlIGluc3RlYWQgb2YgJ2N1cmwnCis8dG9vbD4KK2xpYjUwMgorPC90b29sPgorCisgPG5hbWU+CitzaW1wbGUgbXVsdGkgZmlsZTovLyBnZXQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmaWxlOi8vJVBXRC9sb2cvdGVzdDUwMi50eHQKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy90ZXN0NTAyLnR4dCI+Citmb28KKyAgIGJhciBzd3NjbG9zZQorYmFyCisgICBmb28KK21vbworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTAzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NTQzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MDMKQEAgLTAsMCArMSw3OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBDT05ORUNUCitIVFRQIHByb3h5CitIVFRQIHByb3h5IEJhc2ljIGF1dGgKK3Byb3h5dHVubmVsCittdWx0aQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorCis8L2RhdGE+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMjAwIE1pZ2h0eSBmaW5lIGluZGVlZA0KKw0KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCisKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCitodHRwLXByb3h5Cis8L3NlcnZlcj4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWI1MDMKKzwvdG9vbD4KKworIDxuYW1lPgorc2ltcGxlIG11bHRpIGh0dHA6Ly8gdGhyb3VnaCBwcm94eXR1bm5lbCB3aXRoIGF1dGhlbnRpY2F0aW9uIGluZm8KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTAzICVIT1NUSVA6JVBST1hZUE9SVAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3Rlc3Q1MDMudHh0Ij4KK2ZvbworICAgYmFyCitiYXIKKyAgIGZvbworbW9vCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJveHk+CitDT05ORUNUICVIT1NUSVA6JUhUVFBQT1JUIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBkR1Z6ZERwcGJtYz0NCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm94eT4KKzxwcm90b2NvbD4KK0dFVCAvNTAzIEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogQmFzaWMgZEdWemREcHBibWM9DQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MDQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzYTNkZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUwNApAQCAtMCwwICsxLDQ0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIHByb3h5CittdWx0aQorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2h0dHAKKzwvZmVhdHVyZXM+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTA0Cis8L3Rvb2w+CisKKyA8bmFtZT4KK3NpbXBsZSBtdWx0aSB0aHJvdWdoIGxvY2FsIHByb3h5IHdpdGhvdXQgbGlzdGVuZXIKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFNQT1JULzUwNCAlSE9TVElQOjU1NTU1Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKyMgVEVTVF9FUlJfU1VDQ0VTUyBpcyBlcnJvcmNvZGUgMTIwCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzEyMAorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MDUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllMGZkMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUwNQpAQCAtMCwwICsxLDYwIEBACis8dGVzdGNhc2U+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTA1Cis8L3Rvb2w+CisKKyA8bmFtZT4KK0ZUUCB1cGxvYWQgd2l0aCByZW5hbWUgYWZ0ZXIgdHJhbnNmZXIKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzUwNSBsb2cvdXBsb2FkNTA1Cis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdXBsb2FkNTA1Ij4KK0NvbnRlbnRzCitvZgorYSBmaWxlCit0byB2ZXJpZnkKK2Z0cAordXBsb2FkCisKKword29ya3M/Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dXBsb2FkPgorQ29udGVudHMKK29mCithIGZpbGUKK3RvIHZlcmlmeQorZnRwCit1cGxvYWQKKworCit3b3Jrcz8KKzwvdXBsb2FkPgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitTVE9SIDUwNQ0KK1JORlIgNTA1DQorUk5UTyA1MDUtZm9ycmVhbA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTA2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTA2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZWI2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MDYKQEAgLTAsMCArMSwxODEgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2Nvb2tpZXMKK3NoYXJlZCBjb29raWVzCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YTE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitTZXQtQ29va2llOiB0ZXN0MT1vbmU7IGRvbWFpbj1mb28uY29tOyBleHBpcmVzPVNhdCBGZWIgMiAxMTo1NjoyNyBHTVQgMjAzMAorU2V0LUNvb2tpZTogdGVzdDI9dHdvOyBkb21haW49aG9zdC5mb28uY29tOyBleHBpcmVzPVNhdCBGZWIgMiAxMTo1NjoyNyBHTVQgMjAzMAorU2V0LUNvb2tpZTogdGVzdDM9dGhyZWU7IGRvbWFpbj1mb28uY29tOyBleHBpcmVzPVNhdCBGZWIgMiAxMTo1NjoyNyBHTVQgMjAzMAorQ29udGVudC1MZW5ndGg6IDI5CisKK3J1biAxOiBzZXQgY29va2llIDEsIDIgYW5kIDMKKzwvZGF0YTE+Cis8ZGF0YTI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDEgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitTZXQtQ29va2llOiB0ZXN0ND1mb3VyOyBkb21haW49aG9zdC5mb28uY29tOyBleHBpcmVzPVNhdCBGZWIgMiAxMTo1NjoyNyBHTVQgMjAzMAorU2V0LUNvb2tpZTogdGVzdDU9Zml2ZTsgZG9tYWluPWhvc3QuZm9vLmNvbTsgZXhwaXJlcz1TYXQgRmViIDIgMTE6NTY6MjcgR01UIDIwMzAKK0NvbnRlbnQtTGVuZ3RoOiAyNgorCitydW4gMjogc2V0IGNvb2tpZSA0IGFuZCA1Cis8L2RhdGEyPgorPGRhdGEzPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAyIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCitTZXQtQ29va2llOiB0ZXN0ND1vdmVyd3JpdHRlbjQ7IGRvbWFpbj1ob3N0LmZvby5jb207IGV4cGlyZXM9U2F0IE1heSA1IEdNVCAxMTo1NjoyNyAyMDM1CitTZXQtQ29va2llOiB0ZXN0MT1vdmVyd3JpdHRlbjE7IGRvbWFpbj1mb28uY29tOyBleHBpcmVzPVRodSBNYXIgMyBHTVQgMTE6NTY6MjcgMjAzMworQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0NvbnRlbnQtTGVuZ3RoOiAzMgorCitydW4gMzogb3ZlcndyaXRlIGNvb2tpZSAxIGFuZCA0Cis8L2RhdGEzPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxuYW1lPgorSFRUUCB3aXRoIHNoYXJlZCBjb29raWUgbGlzdCAoYW5kIGRucyBjYWNoZSkKKzwvbmFtZT4KKyMgRXhwbGljaXRseSBzZXQgdGhlIHRpbWUgem9uZSB0byBhIGtub3duIGdvb2Qgb25lLCBpbiBjYXNlIHRoZSB1c2VyIGlzCisjIHVzaW5nIG9uZSBvZiB0aGUgJ3JpZ2h0JyB6b25lcyB0aGF0IHRha2UgaW50byBhY2NvdW50IGxlYXAgc2Vjb25kcworIyB3aGljaCBjYXVzZXMgdGhlIGNvb2tpZSBleHBpcnkgdGltZXMgdG8gYmUgZGlmZmVyZW50LgorPHNldGVudj4KK1RaPUdNVAorPC9zZXRlbnY+Cis8dG9vbD4KK2xpYjUwNgorPC90b29sPgorPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTA2Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3Rkb3V0IG1vZGU9InRleHQiPgorR0xPQkFMX0lOSVQKK1NIQVJFX0lOSVQKK0NVUkxTSE9QVF9MT0NLRlVOQworQ1VSTFNIT1BUX1VOTE9DS0ZVTkMKK0NVUkxTSE9QVF9VU0VSREFUQQorQ1VSTF9MT0NLX0RBVEFfQ09PS0lFCitDVVJMX0xPQ0tfREFUQV9ETlMKKyoqKiBydW4gMQorQ1VSTE9QVF9TSEFSRQorbG9jazogICBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiAwCit1bmxvY2s6IHNoYXJlICBbUGlncyBpbiBzcGFjZV06IDEKK1BFUkZPUk0KK2xvY2s6ICAgZG5zICAgIFtQaWdzIGluIHNwYWNlXTogMgordW5sb2NrOiBkbnMgICAgW1BpZ3MgaW4gc3BhY2VdOiAzCitsb2NrOiAgIGRucyAgICBbUGlncyBpbiBzcGFjZV06IDQKK3VubG9jazogZG5zICAgIFtQaWdzIGluIHNwYWNlXTogNQorbG9jazogICBjb29raWUgW1BpZ3MgaW4gc3BhY2VdOiA2Cit1bmxvY2s6IGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDcKK2xvY2s6ICAgY29va2llIFtQaWdzIGluIHNwYWNlXTogOAordW5sb2NrOiBjb29raWUgW1BpZ3MgaW4gc3BhY2VdOiA5Citsb2NrOiAgIGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDEwCit1bmxvY2s6IGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDExCitsb2NrOiAgIGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDEyCit1bmxvY2s6IGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDEzCitydW4gMTogc2V0IGNvb2tpZSAxLCAyIGFuZCAzCitsb2NrOiAgIGRucyAgICBbUGlncyBpbiBzcGFjZV06IDE0Cit1bmxvY2s6IGRucyAgICBbUGlncyBpbiBzcGFjZV06IDE1CitDTEVBTlVQCitsb2NrOiAgIGRucyAgICBbUGlncyBpbiBzcGFjZV06IDE2Cit1bmxvY2s6IGRucyAgICBbUGlncyBpbiBzcGFjZV06IDE3Citsb2NrOiAgIGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDE4Cit1bmxvY2s6IGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDE5Citsb2NrOiAgIHNoYXJlICBbUGlncyBpbiBzcGFjZV06IDIwCit1bmxvY2s6IHNoYXJlICBbUGlncyBpbiBzcGFjZV06IDIxCisqKiogcnVuIDIKK0NVUkxPUFRfU0hBUkUKK2xvY2s6ICAgc2hhcmUgIFtQaWdzIGluIHNwYWNlXTogMjIKK3VubG9jazogc2hhcmUgIFtQaWdzIGluIHNwYWNlXTogMjMKK1BFUkZPUk0KK2xvY2s6ICAgZG5zICAgIFtQaWdzIGluIHNwYWNlXTogMjQKK3VubG9jazogZG5zICAgIFtQaWdzIGluIHNwYWNlXTogMjUKK2xvY2s6ICAgY29va2llIFtQaWdzIGluIHNwYWNlXTogMjYKK3VubG9jazogY29va2llIFtQaWdzIGluIHNwYWNlXTogMjcKK2xvY2s6ICAgY29va2llIFtQaWdzIGluIHNwYWNlXTogMjgKK3VubG9jazogY29va2llIFtQaWdzIGluIHNwYWNlXTogMjkKK2xvY2s6ICAgY29va2llIFtQaWdzIGluIHNwYWNlXTogMzAKK3VubG9jazogY29va2llIFtQaWdzIGluIHNwYWNlXTogMzEKK3J1biAyOiBzZXQgY29va2llIDQgYW5kIDUKK2xvY2s6ICAgZG5zICAgIFtQaWdzIGluIHNwYWNlXTogMzIKK3VubG9jazogZG5zICAgIFtQaWdzIGluIHNwYWNlXTogMzMKK0NMRUFOVVAKK2xvY2s6ICAgZG5zICAgIFtQaWdzIGluIHNwYWNlXTogMzQKK3VubG9jazogZG5zICAgIFtQaWdzIGluIHNwYWNlXTogMzUKK2xvY2s6ICAgY29va2llIFtQaWdzIGluIHNwYWNlXTogMzYKK3VubG9jazogY29va2llIFtQaWdzIGluIHNwYWNlXTogMzcKK2xvY2s6ICAgc2hhcmUgIFtQaWdzIGluIHNwYWNlXTogMzgKK3VubG9jazogc2hhcmUgIFtQaWdzIGluIHNwYWNlXTogMzkKKyoqKiBydW4gMworQ1VSTE9QVF9TSEFSRQorbG9jazogICBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiA0MAordW5sb2NrOiBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiA0MQorQ1VSTE9QVF9DT09LSUVKQVIKK1BFUkZPUk0KK2xvY2s6ICAgZG5zICAgIFtQaWdzIGluIHNwYWNlXTogNDIKK3VubG9jazogZG5zICAgIFtQaWdzIGluIHNwYWNlXTogNDMKK2xvY2s6ICAgY29va2llIFtQaWdzIGluIHNwYWNlXTogNDQKK3VubG9jazogY29va2llIFtQaWdzIGluIHNwYWNlXTogNDUKK2xvY2s6ICAgY29va2llIFtQaWdzIGluIHNwYWNlXTogNDYKK3VubG9jazogY29va2llIFtQaWdzIGluIHNwYWNlXTogNDcKK2xvY2s6ICAgY29va2llIFtQaWdzIGluIHNwYWNlXTogNDgKK3VubG9jazogY29va2llIFtQaWdzIGluIHNwYWNlXTogNDkKK3J1biAzOiBvdmVyd3JpdGUgY29va2llIDEgYW5kIDQKK2xvY2s6ICAgZG5zICAgIFtQaWdzIGluIHNwYWNlXTogNTAKK3VubG9jazogZG5zICAgIFtQaWdzIGluIHNwYWNlXTogNTEKK3RyeSBTSEFSRV9DTEVBTlVQLi4uCitsb2NrOiAgIHNoYXJlICBbUGlncyBpbiBzcGFjZV06IDUyCit1bmxvY2s6IHNoYXJlICBbUGlncyBpbiBzcGFjZV06IDUzCitTSEFSRV9DTEVBTlVQIGZhaWxlZCwgY29ycmVjdAorQ0xFQU5VUAorbG9jazogICBkbnMgICAgW1BpZ3MgaW4gc3BhY2VdOiA1NAordW5sb2NrOiBkbnMgICAgW1BpZ3MgaW4gc3BhY2VdOiA1NQorbG9jazogICBjb29raWUgW1BpZ3MgaW4gc3BhY2VdOiA1NgordW5sb2NrOiBjb29raWUgW1BpZ3MgaW4gc3BhY2VdOiA1NworbG9jazogICBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiA1OAordW5sb2NrOiBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiA1OQorU0hBUkVfQ0xFQU5VUAorbG9jazogICBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiA2MAordW5sb2NrOiBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiA2MQorR0xPQkFMX0NMRUFOVVAKKzwvc3Rkb3V0PgorPHN0ZGVycj4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC81MDYgCis8L3N0ZGVycj4KKzxmaWxlIG5hbWU9ImxvZy9qYXI1MDYiIG1vZGU9InRleHQiPgorIyBOZXRzY2FwZSBIVFRQIENvb2tpZSBGaWxlCisjIGh0dHA6Ly9jdXJsLmhheHguc2UvcmZjL2Nvb2tpZV9zcGVjLmh0bWwKKyMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgbGliY3VybCEgRWRpdCBhdCB5b3VyIG93biByaXNrLgorCisuZm9vLmNvbQlUUlVFCS8JRkFMU0UJMTk5MzQ2Mzc4Nwl0ZXN0MQlvdmVyd3JpdHRlbjEKKy5ob3N0LmZvby5jb20JVFJVRQkvCUZBTFNFCTE4OTYyNjM3ODcJdGVzdDIJdHdvCisuZm9vLmNvbQlUUlVFCS8JRkFMU0UJMTg5NjI2Mzc4Nwl0ZXN0Mwl0aHJlZQorLmhvc3QuZm9vLmNvbQlUUlVFCS8JRkFMU0UJMjA2MTk3ODk4Nwl0ZXN0NAlvdmVyd3JpdHRlbjQKKy5ob3N0LmZvby5jb20JVFJVRQkvCUZBTFNFCTE4OTYyNjM3ODcJdGVzdDUJZml2ZQorPC9maWxlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTA3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTA3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NDliZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MDcKQEAgLTAsMCArMSwzNyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCittdWx0aQorRkFJTFVSRQorbm9uLWV4aXN0aW5nIGhvc3QKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8bmFtZT4KK211bHRpIGludGVyZmFjZSBnZXQgd2l0aCBub24tZXhpc3RpbmcgaG9zdCBuYW1lCis8L25hbWU+Cis8dG9vbD4KK2xpYjUwNworPC90b29sPgorPGNvbW1hbmQ+CitodHRwOi8vbm9uLWV4aXN0aW5nLWhvc3QuaGF4eC5zZS8KKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis2Cis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUwOCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Q0YjhjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTA4CkBAIC0wLDAgKzEsNTEgQEAKKzx0ZXN0Y2FzZT4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG1vZGU9InRleHQiPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlIHN3c2Nsb3NlCitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworaGVsbG8KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTA4Cis8L3Rvb2w+CisKKyA8bmFtZT4KK3NlbmQgSFRUUCBQT1NUIHVzaW5nIHJlYWQgY2FsbGJhY2sKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTA4Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXBwYXJ0PgorIyByZW1vdmUgQ1IgdGhhdCBDVVJMT1BUX1RSQU5TRkVSVEVYVCBhZGRlZCwgd2hlbiBDaGFyQ29udiBlbmFibGVkOgorcy9eKHRoaXMgaXMgd2hhdCB3ZSBwb3N0IHRvIHRoZSBzaWxseSB3ZWIgc2VydmVyKVxyXG4vJDFcbi8gaWYoJGhhc19jaGFyY29udikKKzwvc3RyaXBwYXJ0PgorPHByb3RvY29sPgorUE9TVCAvNTA4IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiA0NQ0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQordGhpcyBpcyB3aGF0IHdlIHBvc3QgdG8gdGhlIHNpbGx5IHdlYiBzZXJ2ZXIKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OGMzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MQpAQCAtMCwwICsxLDc0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAyIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogLi4vLi4vLi4vLi4vLi4vLi4vLi4vNTEwMDAyCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjUwOjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworPC9kYXRhPgorPGRhdGEyPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogdGhpcyBzaG91bGQgYmUgaWdub3JlZAorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo1MDowMCBHTVQKK0Nvbm5lY3Rpb246IGNsb3NlCisKK2JvZHkKKzwvZGF0YTI+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAyIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogLi4vLi4vLi4vLi4vLi4vLi4vLi4vNTEwMDAyCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjUwOjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogdGhpcyBzaG91bGQgYmUgaWdub3JlZAorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo1MDowMCBHTVQKK0Nvbm5lY3Rpb246IGNsb3NlCisKK2JvZHkKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgZm9sbG93IHJlZGlyZWN0IHdpdGggZXhjZXNzaXZlIC4uLworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS9hcmUvYWxsL3R3aXRzLzUxIC1MCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2UvYXJlL2FsbC90d2l0cy81MSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzUxMDAwMiBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMCAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMCBPcGVuU1NMLzAuOS42YyBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUxMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzEzZjUxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTEwCkBAIC0wLDAgKzEsNTcgQEAKKzx0ZXN0Y2FzZT4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG1vZGU9InRleHQiPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlIHN3c2Nsb3NlCitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworaGVsbG8KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTEwCis8L3Rvb2w+CisKKyA8bmFtZT4KK3NlbmQgSFRUUCBQT1NUIHVzaW5nIHJlYWQgY2FsbGJhY2ssIHVzaW5nIGNodW5rZWQgdHJhbnNmZXItZW5jb2RpbmcKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTEwCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitQT1NUIC81MTAgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorDQorMw0KK29uZQ0KKzMNCit0d28NCis1DQordGhyZWUNCisxZA0KK2FuZCBhIGZpbmFsIGxvbmdlciBjcmFwOiBmb3VyDQorMA0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MTEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmZTY1NwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUxMQpAQCAtMCwwICsxLDQ0IEBACis8dGVzdGNhc2U+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2VydmVyY21kPgorUkVQTFkgTURUTSA1NTAgYmx1YWggeW91IGYwMGwhCitSRVBMWSBTSVpFIDU1MCBibHVhaCB5b3UgZjAwbCEKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIyB0b29sIGlzIHdoYXQgdG8gdXNlIGluc3RlYWQgb2YgJ2N1cmwnCis8dG9vbD4KK2xpYjUxMQorPC90b29sPgorCisgPG5hbWU+CitGVFAgd2l0aCBGSUxFVElNRSBhbmQgTk9CT0RZIGJ1dCBtaXNzaW5nIGZpbGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzUxMQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyBDVVJMRV9GVFBfQ09VTEROVF9SRVRSX0ZJTEUKKzxlcnJvcmNvZGU+CisxOQorPC9lcnJvcmNvZGU+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorTURUTSA1MTENCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUxMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTZhNTAzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTEyCkBAIC0wLDAgKzEsNDYgQEAKKzx0ZXN0Y2FzZT4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG1vZGU9InRleHQiPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHllcw0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQoraGVsbG8KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTEyCis8L3Rvb2w+CisKKyA8bmFtZT4KK3NpbXBsZSBjdXJsX2Vhc3lfZHVwbGljYXRlKCkgdGVzdAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC81MTIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC81MTIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUxMyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDhlNjliCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTEzCkBAIC0wLDAgKzEsNDIgQEAKKzx0ZXN0Y2FzZT4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTEzCis8L3Rvb2w+CisKKyA8bmFtZT4KK3NlbmQgSFRUUCBQT1NUIHVzaW5nIHJlYWQgY2FsbGJhY2sgdGhhdCByZXR1cm5zIENVUkxfUkVBREZVTkNfQUJPUlQKKyA8L25hbWU+CisjIHRoZSAxcyBwb3N0LWNvbW1hbmQgZGVsYXkgaGVscHMgdG8gcHJldmVudCBhIHNwdXJpb3VzIGZhaWx1cmUgb24gczM5MAorIDxjb21tYW5kIGRlbGF5PSIxIj4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC81MTMKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1BPU1QgLzUxMyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMQ0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorPC9wcm90b2NvbD4KKyMgNDIgLSBhYm9ydGVkIGJ5IGNhbGxiYWNrCis8ZXJyb3Jjb2RlPgorNDIKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTE0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTE0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNmRhMDIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MTQKQEAgLTAsMCArMSw1MSBAQAorPHRlc3RjYXNlPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbW9kZT0idGV4dCI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1MTQKKzwvdG9vbD4KKyA8bmFtZT4KK0ZpcnN0IHNldCBvcHRpb25zIHRvIFBPU1QgYW5kIHRoZW4gdG8gbWFrZSBIRUFECisgPC9uYW1lPgorIyB0aGUgMXMgcG9zdC1jb21tYW5kIGRlbGF5IGhlbHBzIHRvIHByZXZlbnQgYSBzcHVyaW91cyBmYWlsdXJlIG9uIHMzOTAKKyA8Y29tbWFuZCBkZWxheT0iMSI+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTE0Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0hFQUQgLzUxNCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTE1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTBhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MTUKQEAgLTAsMCArMSw0OCBAQAorPHRlc3RjYXNlPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbW9kZT0idGV4dCI+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiAzCisKK09LCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIyB0b29sIGlzIHdoYXQgdG8gdXNlIGluc3RlYWQgb2YgJ2N1cmwnCis8dG9vbD4KK2xpYjUxNQorPC90b29sPgorCisgPG5hbWU+CittYWtlIGEgUE9TVEZJRUxEUyBzZXQgdG8gTlVMTCB3aXRoIFBPU1RGSUVMRFNJWkUgc2V0IHRvIHplcm8KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTE1Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BPU1QgLzUxNSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogMA0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUxNiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmMzOWRjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTE2CkBAIC0wLDAgKzEsNDcgQEAKKzx0ZXN0Y2FzZT4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG1vZGU9InRleHQiPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogMworCitPSworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWI1MTYKKzwvdG9vbD4KKworIDxuYW1lPgorbWFrZSBhIEhUVFBQT1NUIHNldCB0byBOVUxMCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzUxNgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQT1NUIC81MTYgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDANCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTE3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZDgxMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MTcKQEAgLTAsMCArMSwxMjMgQEAKKzx0ZXN0Y2FzZT4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTE3Cis8L3Rvb2w+CisKKyA8bmFtZT4KK2N1cmxfZ2V0ZGF0ZSgpIHRlc3RpbmcKKyA8L25hbWU+CisgPGNvbW1hbmQ+Citub3RoaW5nCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3Rkb3V0IG1vZGU9InRleHQiPgorMDogU3VuLCAwNiBOb3YgMTk5NCAwODo0OTozNyBHTVQgPT4gNzg0MTExNzc3CisxOiBTdW5kYXksIDA2LU5vdi05NCAwODo0OTozNyBHTVQgPT4gNzg0MTExNzc3CisyOiBTdW4gTm92ICA2IDA4OjQ5OjM3IDE5OTQgPT4gNzg0MTExNzc3CiszOiAwNiBOb3YgMTk5NCAwODo0OTozNyBHTVQgPT4gNzg0MTExNzc3Cis0OiAwNi1Ob3YtOTQgMDg6NDk6MzcgR01UID0+IDc4NDExMTc3NworNTogTm92ICA2IDA4OjQ5OjM3IDE5OTQgPT4gNzg0MTExNzc3Cis2OiAwNiBOb3YgMTk5NCAwODo0OTozNyA9PiA3ODQxMTE3NzcKKzc6IDA2LU5vdi05NCAwODo0OTozNyA9PiA3ODQxMTE3NzcKKzg6IDE5OTQgTm92IDYgMDg6NDk6MzcgPT4gNzg0MTExNzc3Cis5OiBHTVQgMDg6NDk6MzcgMDYtTm92LTk0IFN1bmRheSA9PiA3ODQxMTE3NzcKKzEwOiA5NCA2IE5vdiAwODo0OTozNyA9PiA3ODQxMTE3NzcKKzExOiAxOTk0IE5vdiA2ID0+IDc4NDA4MDAwMAorMTI6IDA2LU5vdi05NCA9PiA3ODQwODAwMDAKKzEzOiBTdW4gTm92IDYgOTQgPT4gNzg0MDgwMDAwCisxNDogMTk5NC5Ob3YuNiA9PiA3ODQwODAwMDAKKzE1OiBTdW4vTm92LzYvOTQvR01UID0+IDc4NDA4MDAwMAorMTY6IFN1biwgMDYgTm92IDE5OTQgMDg6NDk6MzcgQ0VUID0+IDc4NDEwODE3NworMTc6IDA2IE5vdiAxOTk0IDA4OjQ5OjM3IEVTVCA9PiA3ODQxMjk3NzcKKzE4OiBTdW4sIDEyIFNlcCAyMDA0IDE1OjA1OjU4IC0wNzAwID0+IDEwOTUwMjY3NTgKKzE5OiBTYXQsIDExIFNlcCAyMDA0IDIxOjMyOjExICswMjAwID0+IDEwOTQ5MzExMzEKKzIwOiAyMDA0MDkxMiAxNTowNTo1OCAtMDcwMCA9PiAxMDk1MDI2NzU4CisyMTogMjAwNDA5MTEgKzAyMDAgPT4gMTA5NDg1MzYwMAorMjI6IFRodSwgMDEtSmFuLTE5NzAgMDA6NTk6NTkgR01UID0+IDM1OTkKKzIzOiBUaHUsIDAxLUphbi0xOTcwIDAxOjAwOjAwIEdNVCA9PiAzNjAwCisyNDogU2F0LCAxNS1BcHItMTcgMjE6MDE6MjIgR01UID0+IDE0OTIyOTAwODIKKzI1OiBUaHUsIDE5LUFwci0yMDA3IDE2OjAwOjAwIEdNVCA9PiAxMTc2OTk4NDAwCisyNjogV2VkLCAyNSBBcHIgMjAwNyAyMTowMjoxMyBHTVQgPT4gMTE3NzUzNDkzMworMjc6IFRodSwgMTkvQXByXDIwMDcgMTY6MDA6MDAgR01UID0+IDExNzY5OTg0MDAKKzI4OiBGcmksIDEgSmFuIDIwMTAgMDE6MDE6NTAgR01UID0+IDEyNjIzMDc3MTAKKzI5OiBXZWRuZXNkYXksIDEtSmFuLTIwMDMgMDA6MDA6MDAgR01UID0+IDEwNDEzNzkyMDAKKzMwOiAsIDEtSmFuLTIwMDMgMDA6MDA6MDAgR01UID0+IDEwNDEzNzkyMDAKKzMxOiAgMS1KYW4tMjAwMyAwMDowMDowMCBHTVQgPT4gMTA0MTM3OTIwMAorMzI6IDEtSmFuLTIwMDMgMDA6MDA6MDAgR01UID0+IDEwNDEzNzkyMDAKKzMzOiBXZWQsMTgtQXByLTA3IDIyOjUwOjEyIEdNVCA9PiAxMTc2OTM2NjEyCiszNDogV2lsbHlXb25rYSAgLCAxOC1BcHItMDcgMjI6NTA6MTIgR01UID0+IC0xCiszNTogV2lsbHlXb25rYSAgLCAxOC1BcHItMDcgMjI6NTA6MTIgPT4gLTEKKzM2OiBXaWxseVdvbmthICAsICAxOC1hcHItMDcgICAyMjo1MDoxMiA9PiAtMQorMzc6IE1vbiwgMTgtQXByLTE5NzcgMjI6NTA6MTMgR01UID0+IDIzMDI1MTgxMworMzg6IE1vbiwgMTgtQXByLTc3IDIyOjUwOjEzIEdNVCA9PiAyMzAyNTE4MTMKKzM5OiAiU2F0LCAxNS1BcHItMTdcIjIxOjAxOjIyXCJHTVQiID0+IDE0OTIyOTAwODIKKzQwOiBQYXJ0eWRheSwgMTgtIEFwcmlsLTA3IDIyOjUwOjEyID0+IC0xCis0MTogUGFydHlkYXksIDE4IC0gQXByaS0wNyAyMjo1MDoxMiA9PiAtMQorNDI6IFdlZG5lcywgMS1KYW51YXItMjAwMyAwMDowMDowMCBHTVQgPT4gLTEKKzQzOiBTYXQsIDE1LUFwci0xNyAyMTowMToyMiA9PiAxNDkyMjkwMDgyCis0NDogU2F0LCAxNS1BcHItMTcgMjE6MDE6MjIgR01ULTIgPT4gMTQ5MjI5MDA4MgorNDU6IFNhdCwgMTUtQXByLTE3IDIxOjAxOjIyIEdNVCBCTEFIID0+IDE0OTIyOTAwODIKKzQ2OiBTYXQsIDE1LUFwci0xNyAyMTowMToyMiBHTVQtMDQwMCA9PiAxNDkyMjkwMDgyCis0NzogU2F0LCAxNS1BcHItMTcgMjE6MDE6MjIgR01ULTA0MDAgKEVEVCkgPT4gMTQ5MjI5MDA4MgorNDg6IFNhdCwgMTUtQXByLTE3IDIxOjAxOjIyIERTVCA9PiAtMQorNDk6IFNhdCwgMTUtQXByLTE3IDIxOjAxOjIyIC0wNDAwID0+IDE0OTIzMDQ0ODIKKzUwOiBTYXQsIDE1LUFwci0xNyAyMTowMToyMiAoaGVsbG8gdGhlcmUpID0+IC0xCis1MTogU2F0LCAxNS1BcHItMTcgMjE6MDE6MjIgMTE6MjI6MzMgPT4gLTEKKzUyOiBTYXQsIDE1LUFwci0xNyA6OjAwIDIxOjAxOjIyID0+IC0xCis1MzogU2F0LCAxNS1BcHItMTcgYm9pbms6eiAyMTowMToyMiA9PiAtMQorNTQ6IFNhdCwgMTUtQXByLTE3IDkxOjIyOjMzIDIxOjAxOjIyID0+IC0xCis1NTogVGh1IEFwciAxOCAyMjo1MDoxMiAyMDA3IEdNVCA9PiAxMTc2OTM2NjEyCis1NjogMjI6NTA6MTIgVGh1IEFwciAxOCAyMDA3IEdNVCA9PiAxMTc2OTM2NjEyCis1NzogVGh1IDIyOjUwOjEyIEFwciAxOCAyMDA3IEdNVCA9PiAxMTc2OTM2NjEyCis1ODogVGh1IEFwciAyMjo1MDoxMiAxOCAyMDA3IEdNVCA9PiAxMTc2OTM2NjEyCis1OTogVGh1IEFwciAxOCAyMjo1MDoxMiAyMDA3IEdNVCA9PiAxMTc2OTM2NjEyCis2MDogVGh1IEFwciAxOCAyMDA3IDIyOjUwOjEyIEdNVCA9PiAxMTc2OTM2NjEyCis2MTogVGh1IEFwciAxOCAyMDA3IEdNVCAyMjo1MDoxMiA9PiAxMTc2OTM2NjEyCis2MjogU2F0LCAxNS1BcHItMTcgMjE6MDE6MjIgR01UID0+IDE0OTIyOTAwODIKKzYzOiAxNS1TYXQsIEFwci0xNyAyMTowMToyMiBHTVQgPT4gMTQ5MjI5MDA4MgorNjQ6IDE1LVNhdCwgQXByIDIxOjAxOjIyIEdNVCAxNyA9PiAxNDkyMjkwMDgyCis2NTogMTUtU2F0LCBBcHIgMjE6MDE6MjIgR01UIDIwMTcgPT4gMTQ5MjI5MDA4MgorNjY6IDE1IEFwciAyMTowMToyMiAyMDE3ID0+IDE0OTIyOTAwODIKKzY3OiAxNSAxNyBBcHIgMjE6MDE6MjIgPT4gMTQ5MjI5MDA4MgorNjg6IEFwciAxNSAxNyAyMTowMToyMiA9PiAxNDkyMjkwMDgyCis2OTogQXByIDE1IDIxOjAxOjIyIDE3ID0+IDE0OTIyOTAwODIKKzcwOiAyMDE3IEFwcmlsIDE1IDIxOjAxOjIyID0+IC0xCis3MTogMTUgQXByaWwgMjAxNyAyMTowMToyMiA9PiAtMQorNzI6IDk4IEFwcmlsIDE3IDIxOjAxOjIyID0+IC0xCis3MzogVGh1LCAwMTItQXVnLTIwMDggMjA6NDk6MDcgR01UID0+IDEyMTg1NzQxNDcKKzc0OiBUaHUsIDk5OTk5OTk5OTk5OS1BdWctMjAwNyAyMDo0OTowNyBHTVQgPT4gLTEKKzc1OiBUaHUsIDEyLUF1Zy0yMDA3IDIwOjYxOjk5OTk5OTk5OTk5IEdNVCA9PiAtMQorNzY6IElBaW50Tm9EYXRlRm9vbCA9PiAtMQorNzc6IFRodSBBcHIgMTggMjI6NTAgMjAwNyBHTVQgPT4gMTE3NjkzNjYwMAorNzg6IDIwMTEwNjIzIDEyOjM0OjU2ID0+IDEzMDg4MzI0OTYKKzc5OiAyMDExMDYzMiAxMjozNDo1NiA9PiAtMQorODA6IDIwMTEwNjIzIDU2OjM0OjU2ID0+IC0xCis4MTogMjAxMTEzMjMgMTI6MzQ6NTYgPT4gLTEKKzgyOiAyMDExMDYyMyAxMjozNDo3OSA9PiAtMQorODM6IFdlZCwgMzEgRGVjIDIwMDggMjM6NTk6NjAgR01UID0+IDEyMzA3NjgwMDAKKzwvc3Rkb3V0PgorCisjIFRoaXMgdGVzdCBjYXNlIHByZXZpb3VzbHkgdGVzdGVzIGFuIG92ZXJmbG93IGNhc2UgKCIyMDk0IE5vdiA2ID0+CisjIDIxNDc0ODM2NDciKSBmb3IgMzJiaXQgdGltZV90LCBidXQgc2luY2Ugc29tZSBzeXN0ZW1zIGhhdmUgNjRiaXQgdGltZV90IGFuZAorIyBoYW5kbGVzIHRoaXMgKHJldHVybmluZyAzOTM5ODQwMDAwKSwgYW5kIHNvbWUgNjRiaXQtdGltZV90IHN5c3RlbXMgZG9uJ3QKKyMgaGFuZGxlIHRoaXMgYW5kIHJldHVybnMgLTEgZm9yIHRoaXMsIGl0IHR1cm5lZCB2ZXJ5IHRyaWNreSB0byB3cml0ZSBhIGZpbmUKKyMgdGVzdCBjYXNlIGFuZCB0aHVzIGl0IGlzIG5vdyByZW1vdmVkIHVudGlsIHdlIGhhdmUgYSB3YXkgdG8gd3JpdGUgdGVzdCBjYXNlcworIyBmb3IgdGhpcyBraW5kIG9mIHRoaW5ncy4KKworPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTE4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTI2MTUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MTgKQEAgLTAsMCArMSw2MCBAQAorPHRlc3RjYXNlPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCistZm9vLQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2dldHJsaW1pdAorPC9mZWF0dXJlcz4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWI1MTgKKzwvdG9vbD4KKyMgcHJlY2hlY2sgaXMgYSBjb21tYW5kIGxpbmUgdG8gcnVuIGJlZm9yZSB0aGUgdGVzdCwgdG8gc2VlIGlmIHdlIGNhbiBleGVjdXRlCisjIHRoZSB0ZXN0IG9yIG5vdAorPHByZWNoZWNrPgorLi9saWJ0ZXN0L2xpYjUxOCBjaGVjaworPC9wcmVjaGVjaz4KKworIDxuYW1lPgorSFRUUCBHRVQgd2l0aCBtb3JlIHRoYW4gRkRfU0VUU0laRSBkZXNjcmlwdG9ycyBvcGVuCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzUxOAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorR0VUIC81MTggSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MTkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiYzg2MQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUxOQpAQCAtMCwwICsxLDcxIEBACis8dGVzdGNhc2U+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBtb2RlPSJ0ZXh0Ij4KK0hUVFAvMS4xIDIwMCBPSyBzd3Nib3VuY2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA4CisKK2NvbnRlbnQKKzwvZGF0YT4KKzxkYXRhMT4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDkKKworY29udGVudDIKKzwvZGF0YTE+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMjAwIE9LIHN3c2JvdW5jZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDgKKworY29udGVudAorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogOQorCitjb250ZW50MgorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIyB0b29sIGlzIHdoYXQgdG8gdXNlIGluc3RlYWQgb2YgJ2N1cmwnCis8dG9vbD4KK2xpYjUxOQorPC90b29sPgorCisgPG5hbWU+CitHRVQgc2FtZSBVUkwgdHdpY2Ugd2l0aCBkaWZmZXJlbnQgdXNlcnMKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTE5Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitHRVQgLzUxOSBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IEJhc2ljIGJXOXVjM1JsY2pwMWJtUmxjbUpsWkE9PQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzUxOSBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IEJhc2ljIFlXNXZkR2hsY20xdmJuTjBaWEk2YVc1M1lYSmtjbTlpWlE9PQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGZhNDJiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTIKQEAgLTAsMCArMSw3NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorZm9sbG93bG9jYXRpb24KKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMiBPSyBzd3NjbG9zZQorTG9jYXRpb246IC4vNTIwMDAyCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworPC9kYXRhPgorPGRhdGEyPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogdGhpcyBzaG91bGQgYmUgaWdub3JlZAorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0Nvbm5lY3Rpb246IGNsb3NlCisKK2JvZHkKKzwvZGF0YTI+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAyIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogLi81MjAwMDIKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb25uZWN0aW9uOiBjbG9zZQorCitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0xvY2F0aW9uOiB0aGlzIHNob3VsZCBiZSBpZ25vcmVkCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworYm9keQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBmb2xsb3cgcmVkaXJlY3Qgd2l0aCAuLy1wcmVmaXgKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2UvYXJlL2FsbC90d2l0cy81MiAtTAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dlL2FyZS9hbGwvdHdpdHMvNTIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC93ZS9hcmUvYWxsL3R3aXRzLzUyMDAwMiBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMCAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMCBPcGVuU1NMLzAuOS42YyBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTM4YjU4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTIwCkBAIC0wLDAgKzEsNDcgQEAKKzx0ZXN0Y2FzZT4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorY29udGVudHMgb2YgZmlsZQorPC9kYXRhPgorPHNlcnZlcmNtZD4KK1JFUExZIE1EVE0gMjEzIDIwMDMwNDA1MDYwNzA4Cis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWI1MjAKKzwvdG9vbD4KKworIDxuYW1lPgorRlRQIFJFVFIgd2l0aCBGSUxFVElNRQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvNTIwCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisKKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitNRFRNIDUyMA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDUyMA0KK1JFVFIgNTIwDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MjEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjNTUwMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyMQpAQCAtMCwwICsxLDYwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorQ1VSTE9QVF9QT1JUCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1MjEKKzwvdG9vbD4KKyA8bmFtZT4KK0ZUUCBkaXIgbGlzdCBQQVNWIHdpdGggQ1VSTE9QVF9QT1JUCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUC81MjEvICVGVFBQT1JUCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIHh4eA0KK1BBU1MgeXl5DQorUFdEDQorQ1dEIDUyMQ0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MjIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjNDZmZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyMgpAQCAtMCwwICsxLDYwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitDVVJMT1BUX1BPUlQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CisKK2hlbGxvCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1MjEKKzwvdG9vbD4KKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGggQ1VSTE9QVF9QT1JUCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVAvNTIyICVIVFRQUE9SVAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzUyMiBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IEJhc2ljIGVIaDRPbmw1ZVE9PQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPHN0ZG91dCBtb2RlPSJ0ZXh0Ij4KK2hlbGxvCis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyMyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWU3ZTZmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTIzCkBAIC0wLDAgKzEsNjQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKK0NVUkxPUFRfUE9SVAorQ1VSTE9QVF9QUk9YWQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDYKKworaGVsbG8KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjUyMworPC90b29sPgorIDxuYW1lPgorSFRUUCBHRVQgd2l0aCBwcm94eSBhbmQgQ1VSTE9QVF9QT1JUCisgPC9uYW1lPgorIyBmaXJzdCBVUkwgdGhlbiBwcm94eQorIDxjb21tYW5kPgoraHR0cDovL3d3dy5leGFtcGxlLmNvbTo5OTkvNTIzIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCAKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIEhUVFA6Ly93d3cuZXhhbXBsZS5jb206MTk5OTkvNTIzIEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogQmFzaWMgZUhoNE9ubDVlUT09DQorSG9zdDogd3d3LmV4YW1wbGUuY29tOjE5OTk5DQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzxzdGRvdXQgbW9kZT0idGV4dCI+CitoZWxsbworPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MjQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwOTQ2NgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyNApAQCAtMCwwICsxLDQ2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorVVBMT0FECis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjUyNAorPC90b29sPgorIDxuYW1lPgorRlRQIHVwbG9hZCB3aXRoIHRhcmdldCBVUkwgZW5kaW5nIHdpdGggc2xhc2gKKyA8L25hbWU+CisjIGZpcnN0IFVSTCB0aGVuIHByb3h5CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL3BhdGgvdG8vCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorPC9wcm90b2NvbD4KKworIyAzIGlzIENVUkxFX1VSTF9NQUxGT1JNQVQKKzxlcnJvcmNvZGU+CiszCis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmQ0OTRlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTI1CkBAIC0wLDAgKzEsNTkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQT1JUCitTVE9SCittdWx0aQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjUyNQorPC90b29sPgorIDxuYW1lPgorRlRQIFBPUlQgdXBsb2FkIHVzaW5nIG11bHRpIGludGVyZmFjZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvcGF0aC81MjUgbG9nL3VwbG9hZDUyNQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3VwbG9hZDUyNSI+CitNb29vb29vb29vb29vCisgdXBsb2FkIHRoaXMKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKyMgU3RyaXAgYWxsIHZhbGlkIGtpbmRzIG9mIFBPUlQgYW5kIEVQUlQgdGhhdCBjdXJsIGNhbiBzZW5kCis8c3RyaXA+CiteUE9SVCBcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfQorXkVQUlQgXHwxXHxcZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XHxcZHsxLDV9XHwKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIHBhdGgNCitQT1JUIDEyNywwLDAsMSw1LDEwOQ0KK1RZUEUgSQ0KK1NUT1IgNTI1DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8dXBsb2FkPgorTW9vb29vb29vb29vbworIHVwbG9hZCB0aGlzCis8L3VwbG9hZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyNiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGU2ZGNkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTI2CkBAIC0wLDAgKzEsNjMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitSRVRSCittdWx0aQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitmaWxlIGNvbnRlbnRzIHNob3VsZCBhcHBlYXIgb25jZSBmb3IgZWFjaCBmaWxlCis8L2RhdGE+Cis8ZGF0YWNoZWNrPgorZmlsZSBjb250ZW50cyBzaG91bGQgYXBwZWFyIG9uY2UgZm9yIGVhY2ggZmlsZQorZmlsZSBjb250ZW50cyBzaG91bGQgYXBwZWFyIG9uY2UgZm9yIGVhY2ggZmlsZQorZmlsZSBjb250ZW50cyBzaG91bGQgYXBwZWFyIG9uY2UgZm9yIGVhY2ggZmlsZQorZmlsZSBjb250ZW50cyBzaG91bGQgYXBwZWFyIG9uY2UgZm9yIGVhY2ggZmlsZQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjUyNgorPC90b29sPgorIDxuYW1lPgorRlRQIFJFVFIgc2FtZSBmaWxlIHVzaW5nIGRpZmZlcmVudCBoYW5kbGVzIGJ1dCBzYW1lIGNvbm5lY3Rpb24KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL3BhdGgvNTI2Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIHBhdGgNCitFUFNWDQorVFlQRSBJDQorU0laRSA1MjYNCitSRVRSIDUyNg0KK0VQU1YNCitTSVpFIDUyNg0KK1JFVFIgNTI2DQorRVBTVg0KK1NJWkUgNTI2DQorUkVUUiA1MjYNCitFUFNWDQorU0laRSA1MjYNCitSRVRSIDUyNg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTI3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTI3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ODkyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MjcKQEAgLTAsMCArMSw2MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK1JFVFIKK211bHRpCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2ZpbGUgY29udGVudHMgc2hvdWxkIGFwcGVhciBvbmNlIGZvciBlYWNoIGZpbGUKKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitmaWxlIGNvbnRlbnRzIHNob3VsZCBhcHBlYXIgb25jZSBmb3IgZWFjaCBmaWxlCitmaWxlIGNvbnRlbnRzIHNob3VsZCBhcHBlYXIgb25jZSBmb3IgZWFjaCBmaWxlCitmaWxlIGNvbnRlbnRzIHNob3VsZCBhcHBlYXIgb25jZSBmb3IgZWFjaCBmaWxlCitmaWxlIGNvbnRlbnRzIHNob3VsZCBhcHBlYXIgb25jZSBmb3IgZWFjaCBmaWxlCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKzx0b29sPgorbGliNTI3Cis8L3Rvb2w+CisgPG5hbWU+CitGVFAgUkVUUiBzYW1lIGZpbGUgdXNpbmcgZGlmZmVyZW50IGhhbmRsZXMgYnV0IHNhbWUgY29ubmVjdGlvbgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvcGF0aC81MjcKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgcGF0aA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDUyNw0KK1JFVFIgNTI3DQorRVBTVg0KK1NJWkUgNTI3DQorUkVUUiA1MjcNCitFUFNWDQorU0laRSA1MjcNCitSRVRSIDUyNw0KK0VQU1YNCitTSVpFIDUyNw0KK1JFVFIgNTI3DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MjggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1NWZkMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyOApAQCAtMCwwICsxLDY1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCittdWx0aQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA0NworCitmaWxlIGNvbnRlbnRzIHNob3VsZCBhcHBlYXIgb25jZSBmb3IgZWFjaCBmaWxlCis8L2RhdGE+Cis8ZGF0YWNoZWNrPgorZmlsZSBjb250ZW50cyBzaG91bGQgYXBwZWFyIG9uY2UgZm9yIGVhY2ggZmlsZQorZmlsZSBjb250ZW50cyBzaG91bGQgYXBwZWFyIG9uY2UgZm9yIGVhY2ggZmlsZQorZmlsZSBjb250ZW50cyBzaG91bGQgYXBwZWFyIG9uY2UgZm9yIGVhY2ggZmlsZQorZmlsZSBjb250ZW50cyBzaG91bGQgYXBwZWFyIG9uY2UgZm9yIGVhY2ggZmlsZQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1MjYKKzwvdG9vbD4KKyA8bmFtZT4KK0hUVFAgR0VUIHNhbWUgZmlsZSB1c2luZyBkaWZmZXJlbnQgaGFuZGxlcyBidXQgc2FtZSBjb25uZWN0aW9uCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3BhdGgvNTI4Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitHRVQgL3BhdGgvNTI4IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvcGF0aC81MjggSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC9wYXRoLzUyOCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgL3BhdGgvNTI4IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MjkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxNDcyMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUyOQpAQCAtMCwwICsxLDU5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUE9SVAorU1RPUgorbXVsdGkKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1MjkKKzwvdG9vbD4KKyA8bmFtZT4KK0ZUUCBQT1JUIHVwbG9hZCB1c2luZyBtdWx0aSBpbnRlcmZhY2UgKHdlaXJkIGNsZWFudXAgZnVuY3Rpb24gc2VxdWVuY2UpCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9wYXRoLzUyOSBsb2cvdXBsb2FkNTI5Cis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdXBsb2FkNTI5Ij4KK01vb29vb29vb29vb28KKyB1cGxvYWQgdGhpcworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyBTdHJpcCBhbGwgdmFsaWQga2luZHMgb2YgUE9SVCBhbmQgRVBSVCB0aGF0IGN1cmwgY2FuIHNlbmQKKzxzdHJpcD4KK15QT1JUIFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9CiteRVBSVCBcfDFcfFxkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM31cfFxkezEsNX1cfAorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgcGF0aA0KK1BPUlQgMTI3LDAsMCwxLDUsMTA5DQorVFlQRSBJDQorU1RPUiA1MjkNCitRVUlUDQorPC9wcm90b2NvbD4KKzx1cGxvYWQ+CitNb29vb29vb29vb29vCisgdXBsb2FkIHRoaXMKKzwvdXBsb2FkPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2VkMmQyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTMKQEAgLTAsMCArMSw1NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorY29va2llcworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNC4wCitEYXRlOiBUdWUsIDI1IFNlcCAyMDAxIDE5OjM3OjQ0IEdNVAorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LUxlbmd0aDogMjENCisKK1RoaXMgc2VydmVyIHNheXMgbW9vCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCwganVuayBzZXNzaW9uIGNvb2tpZXMKKyA8L25hbWU+CisgPGNvbW1hbmQ+CislSE9TVElQOiVIVFRQUE9SVC93YW50LzUzIC1iIGxvZy9pbmphcjUzIC1qCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvaW5qYXI1MyI+CislSE9TVElQCUZBTFNFCS8JRkFMU0UJMjEzOTE1MDk5Mwltb29vCWluZGVlZAorJUhPU1RJUAlGQUxTRQkvCUZBTFNFCTAJCW1vbzEJaW5kZWVkCislSE9TVElQCUZBTFNFCS8JRkFMU0UJMQkJbW9vMglpbmRlZWQKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzUzIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0Nvb2tpZTogbW9vbz1pbmRlZWQNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTMwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTMwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OWQwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MzAKQEAgLTAsMCArMSw4MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitQaXBlbGluaW5nCittdWx0aQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGExPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNDcKKworZmlsZSBjb250ZW50cyBzaG91bGQgYXBwZWFyIG9uY2UgZm9yIGVhY2ggZmlsZQorPC9kYXRhMT4KKzxkYXRhMj4KK0hUVFAvMS4xIDIwMCBPSworPC9kYXRhMj4KKzxkYXRhMz4KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCis8L2RhdGEzPgorPGRhdGE0PgorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNDcKKworZmlsZSBjb250ZW50cyBzaG91bGQgYXBwZWFyIG9uY2UgZm9yIGVhY2ggZmlsZQorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNDcKKworZmlsZSBjb250ZW50cyBzaG91bGQgYXBwZWFyIG9uY2UgZm9yIGVhY2ggZmlsZQorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNDcKKworZmlsZSBjb250ZW50cyBzaG91bGQgYXBwZWFyIG9uY2UgZm9yIGVhY2ggZmlsZQorPC9kYXRhND4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjUzMAorPC90b29sPgorIDxuYW1lPgorSFRUUCBHRVQgdXNpbmcgcGlwZWxpbmluZworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC9wYXRoLzUzMAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorR0VUIC9wYXRoLzUzMDAwMDEgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC9wYXRoLzUzMDAwMDIgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC9wYXRoLzUzMDAwMDMgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC9wYXRoLzUzMDAwMDQgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUzMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUzMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTdjZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTMxCkBAIC0wLDAgKzEsNTkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQT1JUCitTVE9SCittdWx0aQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8c2VydmVyY21kPgorUkVQTFkgU1RPUiA0MjUgUGVybWlzc2lvbiBEZW5pZWQuIEZpbGUgRXhpc3RzLgorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjUyNQorPC90b29sPgorIDxuYW1lPgorRlRQIFBPUlQgdXBsb2FkIHVzaW5nIG11bHRpIGludGVyZmFjZSBhbmQgZ2V0IDQyNSByZXNwb25zZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvcGF0aC81MzEgbG9nL3VwbG9hZDUzMQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3VwbG9hZDUzMSI+CitNb29vb29vb29vb29vCitkb24ndCB1cGxvYWQgdGhpcworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyBTdHJpcCBhbGwgdmFsaWQga2luZHMgb2YgUE9SVCBhbmQgRVBSVCB0aGF0IGN1cmwgY2FuIHNlbmQKKzxzdHJpcD4KK15QT1JUIFxkezEsM30sXGR7MSwzfSxcZHsxLDN9LFxkezEsM30sXGR7MSwzfSxcZHsxLDN9CiteRVBSVCBcfDFcfFxkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM31cfFxkezEsNX1cfAorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgcGF0aA0KK1BPUlQgMTI3LDAsMCwxLDUsMTA5DQorVFlQRSBJDQorU1RPUiA1MzENCitRVUlUDQorPC9wcm90b2NvbD4KKworPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTMyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDVkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MzIKQEAgLTAsMCArMSw2MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK1JFVFIKK211bHRpCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2ZpbGUgY29udGVudHMgc2hvdWxkIGFwcGVhciBvbmNlIGZvciBlYWNoIGZpbGUKKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitmaWxlIGNvbnRlbnRzIHNob3VsZCBhcHBlYXIgb25jZSBmb3IgZWFjaCBmaWxlCitmaWxlIGNvbnRlbnRzIHNob3VsZCBhcHBlYXIgb25jZSBmb3IgZWFjaCBmaWxlCitmaWxlIGNvbnRlbnRzIHNob3VsZCBhcHBlYXIgb25jZSBmb3IgZWFjaCBmaWxlCitmaWxlIGNvbnRlbnRzIHNob3VsZCBhcHBlYXIgb25jZSBmb3IgZWFjaCBmaWxlCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKzx0b29sPgorbGliNTMyCis8L3Rvb2w+CisgPG5hbWU+CitGVFAgUkVUUiBzYW1lIGZpbGUgdXNpbmcgcmVzZXQgaGFuZGxlcyBiZXR3ZWVuIGVhY2ggdHJhbnNmZXIKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL3BhdGgvNTMyCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIHBhdGgNCitFUFNWDQorVFlQRSBJDQorU0laRSA1MzINCitSRVRSIDUzMg0KK0VQU1YNCitTSVpFIDUzMg0KK1JFVFIgNTMyDQorRVBTVg0KK1NJWkUgNTMyDQorUkVUUiA1MzINCitFUFNWDQorU0laRSA1MzINCitSRVRSIDUzMg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTMzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTMzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NDQ2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MzMKQEAgLTAsMCArMSw1NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK1JFVFIKK211bHRpCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KKzwvZGF0YT4KKworPHNlcnZlcmNtZD4KK1JFUExZIFJFVFIgNTUwIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QKK1JFUExZIFNJWkUgNTUwIENhbid0IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjUzMworPC90b29sPgorIDxuYW1lPgorRlRQIFJFVFIgYSBub24tZXhpc3RpbmcgZmlsZSB0d2ljZSB1c2luZyB0aGUgbXVsdGkgaW50ZXJmYWNlCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9wYXRoLzUzMyBmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL3BhdGgvNTMzCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIHBhdGgNCitFUFNWDQorVFlQRSBJDQorU0laRSA1MzMNCitSRVRSIDUzMw0KK0VQU1YNCitTSVpFIDUzMw0KK1JFVFIgNTMzDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MzQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0NWRiYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUzNApAQCAtMCwwICsxLDUzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorUkVUUgorbXVsdGkKK25vbi1leGlzdGluZyBob3N0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KKzwvZGF0YT4KKworPHNlcnZlcmNtZD4KK1JFUExZIFJFVFIgNTUwIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QKK1JFUExZIFNJWkUgNTUwIENhbid0IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjUzMworPC90b29sPgorIDxuYW1lPgorRlRQIFJFVFIgdHdpY2UgdXNpbmcgbXVsdGk6IG5vbi1leGlzdGluZyBob3N0IGFuZCBub24tZXhpc3RpbmcgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovL25vbi1leGlzdGluZy1ob3N0LmhheHguc2UvcGF0aC81MzQgZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9wYXRoLzUzNAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBwYXRoDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgNTM0DQorUkVUUiA1MzQNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUzNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUzNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTUxNWExCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTM1CkBAIC0wLDAgKzEsNjkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK211bHRpCis8L2tleXdvcmRzPgorPC9pbmZvPgorCis8cmVwbHk+Cis8ZGF0YSBtb2RlPSJ0ZXh0Ij4KK0hUVFAvMS4xIDQwNCBCYWRuZXNzCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorRVRhZzogIjIxMDI1LWRjNy0zOTQ2MjQ5OCIKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKK2hlanNhbgorPC9kYXRhPgorPGRhdGExPgorSFRUUC8xLjEgMjAwIEZpbmUKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb250ZW50LUxlbmd0aDogMTMKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCitmaW5lIGNvbnRlbnQKKzwvZGF0YTE+CisKKzxkYXRhY2hlY2s+CitmaW5lIGNvbnRlbnQKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIyB0b29sIGlzIHdoYXQgdG8gdXNlIGluc3RlYWQgb2YgJ2N1cmwnCis8dG9vbD4KK2xpYjUzMworPC90b29sPgorCisgPG5hbWU+CitIVFRQIEdFVCBtdWx0aSB0d28gZmlsZXMgd2l0aCBGQUlMT05FUlJPUgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC81MzUgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzUzNTAwMDEKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK0dFVCAvNTM1IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvNTM1MDAwMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTM2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTM2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNGMwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MzYKQEAgLTAsMCArMSw2NSBAQAorPHRlc3RjYXNlPgorPHJlcGx5PgorPGRhdGEgbW9kZT0idGV4dCI+CitIVFRQLzEuMSA0MDQgQmFkbmVzcworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitDb250ZW50LUxlbmd0aDogNgorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCitoZWpzYW4KKzwvZGF0YT4KKzxkYXRhMT4KK0hUVFAvMS4xIDIwMCBGaW5lCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDEzCitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworZmluZSBjb250ZW50Cis8L2RhdGExPgorCis8ZGF0YWNoZWNrPgorZmluZSBjb250ZW50CitGaW5pc2hlZCEKKzwvZGF0YWNoZWNrPgorCis8c2VydmVyY21kPgorcGlwZTogMQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIyB0b29sIGlzIHdoYXQgdG8gdXNlIGluc3RlYWQgb2YgJ2N1cmwnCis8dG9vbD4KK2xpYjUzNgorPC90b29sPgorCisgPG5hbWU+CitIVFRQIEdFVCBtdWx0aSB0d28gZmlsZXMgd2l0aCBGQUlMT05FUlJPUiBhbmQgcGlwZWxpbmluZworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC81MzYgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzUzNjAwMDEKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK0dFVCAvNTM2IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvNTM2MDAwMSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTM3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjZjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MzcKQEAgLTAsMCArMSw1NyBAQAorPHRlc3RjYXNlPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCistZm9vLQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2dldHJsaW1pdAorPC9mZWF0dXJlcz4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWI1MzcKKzwvdG9vbD4KKyMgcHJlY2hlY2sgaXMgYSBjb21tYW5kIGxpbmUgdG8gcnVuIGJlZm9yZSB0aGUgdGVzdCwgdG8gc2VlIGlmIHdlIGNhbiBleGVjdXRlCisjIHRoZSB0ZXN0IG9yIG5vdAorPHByZWNoZWNrPgorLi9saWJ0ZXN0L2xpYjUzNyBjaGVjaworPC9wcmVjaGVjaz4KKworIDxuYW1lPgorSFRUUCBHRVQgd2l0aCBhIEhVR0UgbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMgb3BlbgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC81MzcKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK0dFVCAvNTM3IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MzggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1MzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJmZWNkMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUzOApAQCAtMCwwICsxLDQ1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorRkFJTFVSRQorbXVsdGkKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBQQVNTIDMxNCBibHVhaCB5b3UgZjAwbCEKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIyBOT1RFIHRoYXQgd2UgdXNlIHRoZSA1MDQgdG9vbCBmb3IgdGhpcyBjYXNlCis8dG9vbD4KK2xpYjUwNAorPC90b29sPgorIDxuYW1lPgorRlRQIG11bHRpLWludGVyZmFjZSBkb3dubG9hZCwgZmFpbGVkIGxvZ2luOiBQQVNTIG5vdCB2YWxpZAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvNTM4Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKyMgVEVTVF9FUlJfU1VDQ0VTUyBpcyBlcnJvcmNvZGUgMTIwCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzEyMAorPC9lcnJvcmNvZGU+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUzOSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDUzOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDA2YzU0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTM5CkBAIC0wLDAgKzEsNjMgQEAKKzx0ZXN0Y2FzZT4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG1vZGU9InRleHQiPgorZmlsZSBjb250ZW50cworPC9kYXRhPgorCis8ZGF0YWNoZWNrPgorZmlsZSBjb250ZW50cwordG90YWwgMjAKK2Ryd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4KK2Ryd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4uCitkcnd4ci14ci14ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAgMiAgMTk5NiAuTmVYVAorLXItLXItLXItLSAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAzNSBKdWwgMTYgIDE5OTYgUkVBRE1FCitscnd4cnd4cnd4ICAgMSAwICAgICAgICAxICAgICAgICAgICAgICA3IERlYyAgOSAgMTk5OSBiaW4gLT4gdXNyL2JpbgorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgZGV2Citkcnd4cnd4cnd4ICAgMiA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE1heSAyOSAxNjowNCBkb3dubG9hZC5odG1sCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE5vdiAzMCAgMTk5NSBldGMKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0IDMwIDE0OjMzIHB1YgorZHIteHIteHIteCAgIDUgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgIDEgIDE5OTcgdXNyCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWI1MzkKKzwvdG9vbD4KKworIDxuYW1lPgorVHdvIEZUUCBmZXRjaGVzIHVzaW5nIGRpZmZlcmVudCBDVVJMT1BUX0ZUUF9GSUxFTUVUSE9ECisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9wYXRoL3RvL3RoZS9maWxlLzUzOQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBwYXRoL3RvL3RoZS9maWxlDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgNTM5DQorUkVUUiA1MzkNCitTWVNUDQorQ1dEIC8NCitFUFNWDQorVFlQRSBBDQorTElTVCBwYXRoL3RvL3RoZS9maWxlLzUzOS4vDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZGJlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NApAQCAtMCwwICsxLDQ1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAyIFRoaXMgaXMgYSB3ZWlyZG8gdGV4dCBtZXNzYWdlIHN3c2Nsb3NlCitDb25uZWN0aW9uOiBjbG9zZQorTG9jYXRpb246ICAKKworVGhpcyBzZXJ2ZXIgcmVwbHkgaXMgZm9yIHRlc3RpbmcKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggYmxhbmsgTG9jYXRpb246CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvNTQgLUwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93YW50LzU0IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NDAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5ZjlhMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU0MApAQCAtMCwwICsxLDk2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIHByb3h5CitIVFRQIHByb3h5IERpZ2VzdCBhdXRoCittdWx0aQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorCisjIHRoaXMgaXMgcmV0dXJuZWQgZmlyc3Qgc2luY2Ugd2UgZ2V0IG5vIHByb3h5LWF1dGgKKzxkYXRhPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhcg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ3ZWlyZG9yZWFsbSIsIG5vbmNlPSIxMjM0NSINCitDb250ZW50LUxlbmd0aDogMzMNCisNCitBbmQgeW91IHNob3VsZCBpZ25vcmUgdGhpcyBkYXRhLgorPC9kYXRhPgorCisjIHRoZW4gdGhpcyBpcyByZXR1cm5lZCB3aGVuIHdlIGdldCBwcm94eS1hdXRoCis8ZGF0YTEwMDA+CitIVFRQLzEuMSAyMDAgT0sNCitDb250ZW50LUxlbmd0aDogMjENCitTZXJ2ZXI6IG5vDQorDQorTmljZSBwcm94eSBhdXRoIHNpciEKKzwvZGF0YTEwMDA+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09IndlaXJkb3JlYWxtIiwgbm9uY2U9IjEyMzQ1Ig0KK0NvbnRlbnQtTGVuZ3RoOiAzMw0KKw0KK0hUVFAvMS4xIDIwMCBPSw0KK0NvbnRlbnQtTGVuZ3RoOiAyMQ0KK1NlcnZlcjogbm8NCisNCitOaWNlIHByb3h5IGF1dGggc2lyIQorSFRUUC8xLjEgMjAwIE9LDQorQ29udGVudC1MZW5ndGg6IDIxDQorU2VydmVyOiBubw0KKw0KK05pY2UgcHJveHkgYXV0aCBzaXIhCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTQwCis8L3Rvb2w+Cis8ZmVhdHVyZXM+CitjcnlwdG8KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIHByb3h5IGF1dGggRGlnZXN0IG11bHRpIEFQSSByZS11c2luZyBjb25uZWN0aW9uCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tL3BhdGgvNTQwIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCBzaWxseTpwZXJzb24gY3VzdG9tLnNldC5ob3N0Lm5hbWUKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLy4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGh0dHA6Ly90ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS9wYXRoLzU0MCBIVFRQLzEuMQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0hvc3Q6IGN1c3RvbS5zZXQuaG9zdC5uYW1lDQorDQorR0VUIGh0dHA6Ly90ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS9wYXRoLzU0MCBIVFRQLzEuMQ0KK1Byb3h5LUF1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0ic2lsbHkiLCByZWFsbT0id2VpcmRvcmVhbG0iLCBub25jZT0iMTIzNDUiLCB1cmk9Ii9wYXRoLzU0MCIsIHJlc3BvbnNlPSJjYTUwN2RjZjE4OTE5NmI2YTUzNzRkMzIzMzA0MjI2MSINCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCitIb3N0OiBjdXN0b20uc2V0Lmhvc3QubmFtZQ0KKw0KK0dFVCBodHRwOi8vdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20vcGF0aC81NDAgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9InNpbGx5IiwgcmVhbG09IndlaXJkb3JlYWxtIiwgbm9uY2U9IjEyMzQ1IiwgdXJpPSIvcGF0aC81NDAiLCByZXNwb25zZT0iY2E1MDdkY2YxODkxOTZiNmE1Mzc0ZDMyMzMwNDIyNjEiDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorSG9zdDogY3VzdG9tLnNldC5ob3N0Lm5hbWUNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNGM5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NDEKQEAgLTAsMCArMSw1MSBAQAorPHRlc3RjYXNlPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorIyB0b29sIGlzIHdoYXQgdG8gdXNlIGluc3RlYWQgb2YgJ2N1cmwnCis8dG9vbD4KK2xpYjU0MQorPC90b29sPgorCisgPG5hbWU+CitGVFAgdXBsb2FkIGFuZCB1cGxvYWQgc2FtZSBmaWxlIGFnYWluIHdpdGhvdXQgcmV3aW5kCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC81NDEgbG9nL3VwbG9hZDU0MQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3VwbG9hZDU0MSI+CitDb250ZW50cworb2YKK2EgZmlsZQordG8gdmVyaWZ5CitmdHAKK3VwbG9hZAorCisKK3dvcmtzPworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHVwbG9hZD4KKzwvdXBsb2FkPgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitTVE9SIDU0MQ0KK0VQU1YNCitTVE9SIDU0MQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZmUxMjQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NDIKQEAgLTAsMCArMSw1NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK1JFVFIKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitDb250ZW50LUxlbmd0aDogNTENCitBY2NlcHQtcmFuZ2VzOiBieXRlcw0KKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1NDIKKzwvdG9vbD4KKyA8bmFtZT4KK0ZUUCBhIGZpbGUgd2l0aCBOT0JPRFkgeWVzIGFuZCBIRUFERVIgbm8KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JULzU0MgorPC9jb21tYW5kPgorCis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKyMKKyMgVGhlcmUncyBubyBNVERNIGluIHRoZSBwcm90b2NvbCBoZXJlIHNpbmNlIHRoaXMgY29kZSBkb2Vzbid0IGFzayBmb3IgdGhlCisjIHRpbWUvZGF0ZSBvZiB0aGUgZmlsZQorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitUWVBFIEkNCitTSVpFIDU0Mg0KK1JFU1QgMA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NTYzMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NDMKQEAgLTAsMCArMSwzNSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitjdXJsX2Vhc3lfZXNjYXBlCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK25vbmUKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1NDMKKzwvdG9vbD4KKyA8bmFtZT4KK2N1cmxfZWFzeV9lc2NhcGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistCis8L2NvbW1hbmQ+CisKKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorIworIyBUaGVyZSdzIG5vIE1URE0gaW4gdGhlIHByb3RvY29sIGhlcmUgc2luY2UgdGhpcyBjb2RlIGRvZXNuJ3QgYXNrIGZvciB0aGUKKyMgdGltZS9kYXRlIG9mIHRoZSBmaWxlCis8dmVyaWZ5PgorPHN0ZG91dD4KKyU5QyUyNkslM0RJJTA0JUExJTAxJUUwJUQ4JTdDJTIwJUI3JUVGUyUyOSVGQSUxRFclRTEKKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQ0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTRlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NDQKQEAgLTAsMCArMSw0OSBAQAorPHRlc3RjYXNlPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbW9kZT0idGV4dCI+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiAzCisKK09LCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIyB0b29sIGlzIHdoYXQgdG8gdXNlIGluc3RlYWQgb2YgJ2N1cmwnCis8dG9vbD4KK2xpYjU0NAorPC90b29sPgorCisgPG5hbWU+CitIVFRQIFBPU1QgdGV4dCBkYXRhIHVzaW5nIENVUkxPUFRfQ09QWVBPU1RGSUVMRFMKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTQ0Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbCBub25ld2xpbmU9InllcyI+CitQT1NUIC81NDQgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDQNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK1RoaXMKKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NDUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlYmI2MQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU0NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NDYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlNjA0YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU0NgpAQCAtMCwwICsxLDcwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorUkVUUgorbXVsdGkKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorZGF0YQorICAgIHRvCisgICAgICBzZWUKK3RoYXQgRlRQCit3b3JrcworICBzbyBkb2VzIGl0PworPC9kYXRhPgorCis8c2VydmVyY21kPgorUkVQTFkgUkVUUiA1NTAgdGhlIGZpbGUgZG9lc24ndCBleGlzdAorQ09VTlQgUkVUUiAxCitSRVBMWSBTSVpFIDU1MCBDYW4ndCBjaGVjayBmb3IgZmlsZSBleGlzdGVuY2UKK0NPVU5UIFNJWkUgMQorPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjUzMworPC90b29sPgorIDxuYW1lPgorRlRQIFJFVFIgYSBub24tZXhpc3RpbmcgZmlsZSB0aGVuIGEgZm91bmQgb25lIHVzaW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL3BhdGgvNTQ2IGZ0cDovLyVIT1NUSVA6JUZUUFBPUlQvcGF0aC81NDYKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgcGF0aA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDU0Ng0KK1JFVFIgNTQ2DQorRVBTVg0KK1NJWkUgNTQ2DQorUkVUUiA1NDYNCitRVUlUDQorPC9wcm90b2NvbD4KKzxzdGRvdXQ+CitkYXRhCisgICAgdG8KKyAgICAgIHNlZQordGhhdCBGVFAKK3dvcmtzCisgIHNvIGRvZXMgaXQ/Cis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU0NyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU0NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmNmNWE0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQ3CkBAIC0wLDAgKzEsMTMzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorUE9TVCBjYWxsYmFjaworSFRUUCBwcm94eQorSFRUUCBwcm94eSBOVExNIGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisKKzxkYXRhPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorUHJveHktQXV0aGVudGljYXRlOiBCbGFja21hZ2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorUHJveHktQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UKKzwvZGF0YT4KKworIyB0aGlzIGlzIHJldHVybmVkIGZpcnN0IHNpbmNlIHdlIGdldCBubyBwcm94eS1hdXRoCis8ZGF0YTEwMDE+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KKw0KK0hleSB5b3UsIGF1dGhlbnRpY2F0ZSBvciBnbyBhd2F5IQorPC9kYXRhMTAwMT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIHRoZSBzZWNvbmQKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMj4KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gcHJveHkgbGFuZCBzd3NjbG9zZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDQyDQorDQorQ29udGVudHMgb2YgdGhhdCBwYWdlIHlvdSByZXF1ZXN0ZWQsIHNpci4KKzwvZGF0YTEwMDI+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitQcm94eS1BdXRoZW50aWNhdGU6IEJsYWNrbWFnaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitQcm94eS1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhcg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCitDb250ZW50LUxlbmd0aDogMzQNCisNCitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHByb3h5IGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiA0Mg0KKw0KK0NvbnRlbnRzIG9mIHRoYXQgcGFnZSB5b3UgcmVxdWVzdGVkLCBzaXIuCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgdG8gdXNlCis8dG9vbD4KK2xpYjU0NworPC90b29sPgorPGZlYXR1cmVzPgorTlRMTQorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0hUVFAgcHJveHkgYXV0aCBOVExNIHdpdGggUE9TVCBkYXRhIGZyb20gcmVhZCBjYWxsYmFjaworIDwvbmFtZT4KKyA8c2V0ZW52PgorIyB3ZSBmb3JjZSBvdXIgb3duIGhvc3QgbmFtZSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgdGVzdCBtYWNoaW5lIGluZGVwZW5kZW50CitDVVJMX0dFVEhPU1ROQU1FPWN1cmxob3N0CisjIHdlIHRyeSB0byB1c2UgdGhlIExEX1BSRUxPQUQgaGFjaywgaWYgbm90IGEgZGVidWcgYnVpbGQKK0xEX1BSRUxPQUQ9JVBXRC9saWJ0ZXN0Ly5saWJzL2xpYmhvc3RuYW1lLnNvCisgPC9zZXRlbnY+CisgPGNvbW1hbmQ+CitodHRwOi8vdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20vcGF0aC81NDcgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIHMxbGx5OnBlcnMwbgorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BPU1QgaHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tL3BhdGgvNTQ3IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEzLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEzLjItQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMw0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorQ29udGVudC1MZW5ndGg6IDM2DQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCit0aGlzIGlzIHRoZSBibHVyYiB3ZSB3YW50IHRvIHVwbG9hZAorUE9TVCBodHRwOi8vdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20vcGF0aC81NDcgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQorVXNlci1BZ2VudDogY3VybC83LjEzLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEzLjItQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMw0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorQ29udGVudC1MZW5ndGg6IDANCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK1BPU1QgaHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tL3BhdGgvNTQ3IEhUVFAvMS4xDQorUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQURBQUFBR0FBWUFFQUFBQUFZQUJnQVdBQUFBQUFBQUFCd0FBQUFCUUFGQUhBQUFBQUlBQWdBZFFBQUFBQUFBQUFBQUFBQUJvS0JBSVlyRDF4Sm1oTkJOTDlmTHp1azlQVjk0MzZHQXhQdTBFS1d6cVEvc1pEVkxYbnAxSnJ5U2dsOEErY2liRTZ6NEhNeGJHeDVZM1Z5YkdodmMzUT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTMuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTMuMi1DVlMgT3BlblNTTC8wLjkuN2UgemxpYi8xLjIuMiBsaWJpZG4vMC41LjEzDQorSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20NCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCitDb250ZW50LUxlbmd0aDogMzYNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK3RoaXMgaXMgdGhlIGJsdXJiIHdlIHdhbnQgdG8gdXBsb2FkCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQ4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQ4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZTJhOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NDgKQEAgLTAsMCArMSwxMzMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCitIVFRQIHByb3h5CitIVFRQIHByb3h5IE5UTE0gYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorCis8ZGF0YT4KK0hUVFAvMS4xIDQwNyBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogQmxhY2ttYWdpYyByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitQcm94eS1BdXRoZW50aWNhdGU6IE5UTE0NCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlCis8L2RhdGE+CisKKyMgdGhpcyBpcyByZXR1cm5lZCBmaXJzdCBzaW5jZSB3ZSBnZXQgbm8gcHJveHktYXV0aAorPGRhdGExMDAxPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhcg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCitDb250ZW50LUxlbmd0aDogMzQNCisNCitIZXkgeW91LCBhdXRoZW50aWNhdGUgb3IgZ28gYXdheSEKKzwvZGF0YTEwMDE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyB0aGUgc2Vjb25kCisjIEF1dGhvcml6YXRpb246IE5UTE0gbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50Cis8ZGF0YTEwMDI+CitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHByb3h5IGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiA0Mg0KKw0KK0NvbnRlbnRzIG9mIHRoYXQgcGFnZSB5b3UgcmVxdWVzdGVkLCBzaXIuCis8L2RhdGExMDAyPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorUHJveHktQXV0aGVudGljYXRlOiBCbGFja21hZ2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorUHJveHktQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK0hUVFAvMS4xIDQwNyBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHRvIHByb3h5IG1lIG15IGRlYXINCitQcm94eS1BdXRoZW50aWNhdGU6IE5UTE0gVGxSTVRWTlRVQUFDQUFBQUFnQUNBREFBQUFBR2dvRUFjNTFBWVZEZ3lOY0FBQUFBQUFBQUFHNEFiZ0F5QUFBQVEwTUNBQVFBUXdCREFBRUFFZ0JGQUV3QVNRQlRBRUVBUWdCRkFGUUFTQUFFQUJnQVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQXdBc0FHVUFiQUJwQUhNQVlRQmlBR1VBZEFCb0FDNEFZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUFBQUFBQT09DQorQ29udGVudC1MZW5ndGg6IDM0DQorDQorSFRUUC8xLjEgMjAwIFRoaW5ncyBhcmUgZmluZSBpbiBwcm94eSBsYW5kIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogNDINCisNCitDb250ZW50cyBvZiB0aGF0IHBhZ2UgeW91IHJlcXVlc3RlZCwgc2lyLgorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIyB0b29sIHRvIHVzZQorPHRvb2w+CitsaWI1NDgKKzwvdG9vbD4KKzxmZWF0dXJlcz4KK05UTE0KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIHByb3h5IGF1dGggTlRMTSB3aXRoIFBPU1QgZGF0YSBmcm9tIENVUkxPUFRfUE9TVEZJRUxEUworIDwvbmFtZT4KKyA8c2V0ZW52PgorIyB3ZSBmb3JjZSBvdXIgb3duIGhvc3QgbmFtZSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgdGVzdCBtYWNoaW5lIGluZGVwZW5kZW50CitDVVJMX0dFVEhPU1ROQU1FPWN1cmxob3N0CisjIHdlIHRyeSB0byB1c2UgdGhlIExEX1BSRUxPQUQgaGFjaywgaWYgbm90IGEgZGVidWcgYnVpbGQKK0xEX1BSRUxPQUQ9JVBXRC9saWJ0ZXN0Ly5saWJzL2xpYmhvc3RuYW1lLnNvCisgPC9zZXRlbnY+CisgPGNvbW1hbmQ+CitodHRwOi8vdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20vcGF0aC81NDggaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIHMxbGx5OnBlcnMwbgorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BPU1QgaHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tL3BhdGgvNTQ4IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEzLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEzLjItQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMw0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorQ29udGVudC1MZW5ndGg6IDM2DQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCit0aGlzIGlzIHRoZSBibHVyYiB3ZSB3YW50IHRvIHVwbG9hZAorUE9TVCBodHRwOi8vdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20vcGF0aC81NDggSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQorVXNlci1BZ2VudDogY3VybC83LjEzLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEzLjItQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMw0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorQ29udGVudC1MZW5ndGg6IDANCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK1BPU1QgaHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tL3BhdGgvNTQ4IEhUVFAvMS4xDQorUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQURBQUFBR0FBWUFFQUFBQUFZQUJnQVdBQUFBQUFBQUFCd0FBQUFCUUFGQUhBQUFBQUlBQWdBZFFBQUFBQUFBQUFBQUFBQUJvS0JBSVlyRDF4Sm1oTkJOTDlmTHp1azlQVjk0MzZHQXhQdTBFS1d6cVEvc1pEVkxYbnAxSnJ5U2dsOEErY2liRTZ6NEhNeGJHeDVZM1Z5YkdodmMzUT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTMuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTMuMi1DVlMgT3BlblNTTC8wLjkuN2UgemxpYi8xLjIuMiBsaWJpZG4vMC41LjEzDQorSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20NCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCitDb250ZW50LUxlbmd0aDogMzYNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK3RoaXMgaXMgdGhlIGJsdXJiIHdlIHdhbnQgdG8gdXBsb2FkCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQ5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTQ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YmQ2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NDkKQEAgLTAsMCArMSw2NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0NVUkxPUFRfUFJPWFlfVFJBTlNGRVJfTU9ERQorQ1VSTE9QVF9QUk9YWQorSFRUUCBwcm94eQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDYKKworaGVsbG8KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitmdHAKKzwvZmVhdHVyZXM+Cis8dG9vbD4KK2xpYjU0OQorPC90b29sPgorIDxuYW1lPgorRlRQIFJFVFIgb3ZlciBwcm94eSB3aXRoIENVUkxPUFRfUFJPWFlfVFJBTlNGRVJfTU9ERQorIDwvbmFtZT4KKyMgZmlyc3QgVVJMIHRoZW4gcHJveHkKKyA8Y29tbWFuZD4KK2Z0cDovL3d3dy5leGFtcGxlLmNvbS9tb28vNTQ5IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCAKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGZ0cDovL3d3dy5leGFtcGxlLmNvbS9tb28vNTQ5O3R5cGU9aSBIVFRQLzEuMQ0KK0hvc3Q6IHd3dy5leGFtcGxlLmNvbToyMQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8c3Rkb3V0IG1vZGU9InRleHQiPgoraGVsbG8KKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjIzODU2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTUKQEAgLTAsMCArMSw2NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorZm9sbG93bG9jYXRpb24KKzwva2V5d29yZHM+Cis8L2luZm8+Cis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMiBPSyBzd3NjbG9zZQorTG9jYXRpb246IDU1MDAwMgorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo1MDowMCBHTVQKK0Nvbm5lY3Rpb246IGNsb3NlCisKKzwvZGF0YT4KKzxkYXRhMj4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo1MDowMCBHTVQKK0Nvbm5lY3Rpb246IGNsb3NlCisKK2JvZHkKKzwvZGF0YTI+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMzAyIE9LIHN3c2Nsb3NlCitMb2NhdGlvbjogNTUwMDAyCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjUwOjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjUwOjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKKworYm9keQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBmb2xsb3cgcmVkaXJlY3Qgd2l0aCBzaW5nbGUgc2xhc2ggaW4gcGF0aAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC81NSAtTAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvNTUgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC81NTAwMDIgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTAgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAgT3BlblNTTC8wLjkuNmMgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NTAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk2MDVkNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU1MApAQCAtMCwwICsxLDY1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorSFRUUCBwcm94eQorQ1VSTE9QVF9QUk9YWV9UUkFOU0ZFUl9NT0RFCitDVVJMT1BUX1BST1hZCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMYXN0LU1vZGlmaWVkOiBUdWUsIDEzIEp1biAyMDAwIDEyOjEwOjAwIEdNVAorRVRhZzogIjIxMDI1LWRjNy0zOTQ2MjQ5OCIKK0FjY2VwdC1SYW5nZXM6IGJ5dGVzCitDb250ZW50LUxlbmd0aDogNgorCitoZWxsbworPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2Z0cAorPC9mZWF0dXJlcz4KKzx0b29sPgorbGliNTQ5Cis8L3Rvb2w+CisgPG5hbWU+CitGVFAgUkVUUiBvdmVyIHByb3h5IHdpdGggQ1VSTE9QVF9QUk9YWV9UUkFOU0ZFUl9NT0RFIGFuZCBBU0NJSSB0cmFuc2ZlcgorIDwvbmFtZT4KKyMgZmlyc3QgVVJMIHRoZW4gcHJveHkKKyA8Y29tbWFuZD4KK2Z0cDovL3d3dy5leGFtcGxlLmNvbS9tb28vNTUwIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCBhc2NpaQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgZnRwOi8vd3d3LmV4YW1wbGUuY29tL21vby81NTA7dHlwZT1hIEhUVFAvMS4xDQorSG9zdDogd3d3LmV4YW1wbGUuY29tOjIxDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzxzdGRvdXQgbW9kZT0idGV4dCI+CitoZWxsbworPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NTEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY1MjIwYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU1MQpAQCAtMCwwICsxLDk4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKyMgdGhpcyB0ZXN0IGlzIG1lYW50IHRvIGJlIGV4YWN0bHkgbGlrZSA1NDcgYnV0IHVzaW5nIERpZ2VzdCBpbnN0ZWFkIG9mIE5UTE0KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorUE9TVCBjYWxsYmFjaworSFRUUCBwcm94eQorSFRUUCBwcm94eSBEaWdlc3QgYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorCisjIGFzIGEgYm9udXMsIHd3IHVzZSBhbiBleGNlc3NpdmUgbm9uY2UgbGVuZ3RoCis8ZGF0YT4KK0hUVFAvMS4xIDQwNyBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJzb21ldGhpbmcgZnVuIHRvIHJlYWQiLCBub25jZT0iQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlCis8L2RhdGE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyB0aGUgRGlnZXN0CisjIEF1dGhvcml6YXRpb246IGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAwPgorSFRUUC8xLjEgMjAwIFRoaW5ncyBhcmUgZmluZSBpbiBwcm94eSBsYW5kIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogNDINCisNCitDb250ZW50cyBvZiB0aGF0IHBhZ2UgeW91IHJlcXVlc3RlZCwgc2lyLgorPC9kYXRhMTAwMD4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwNyBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJzb21ldGhpbmcgZnVuIHRvIHJlYWQiLCBub25jZT0iQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHByb3h5IGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiA0Mg0KKw0KK0NvbnRlbnRzIG9mIHRoYXQgcGFnZSB5b3UgcmVxdWVzdGVkLCBzaXIuCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgdG8gdXNlCis8dG9vbD4KK2xpYjU0NworPC90b29sPgorPGZlYXR1cmVzPgorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0hUVFAgcHJveHkgYXV0aCBEaWdlc3Qgd2l0aCBQT1NUIGRhdGEgZnJvbSByZWFkIGNhbGxiYWNrCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tL3BhdGgvNTUxIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCBzMWxseTpwZXJzMG4KKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50OiBjdXJsLy4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUE9TVCBodHRwOi8vdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20vcGF0aC81NTEgSFRUUC8xLjENCitIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNg0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQordGhpcyBpcyB0aGUgYmx1cmIgd2Ugd2FudCB0byB1cGxvYWQKK1BPU1QgaHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tL3BhdGgvNTUxIEhUVFAvMS4xDQorUHJveHktQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJzMWxseSIsIHJlYWxtPSJzb21ldGhpbmcgZnVuIHRvIHJlYWQiLCBub25jZT0iQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIsIHVyaT0iL3BhdGgvNTUxIiwgcmVzcG9uc2U9IjMzMjUyNDA3MjZmYmRhZjFlNjFmM2EwZGQ0MGI5MzBjIg0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorQ29udGVudC1MZW5ndGg6IDM2DQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCit0aGlzIGlzIHRoZSBibHVyYiB3ZSB3YW50IHRvIHVwbG9hZAorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU1MiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU1MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTc0ZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTUyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU1MyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU1MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTUyOTM2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTUzCkBAIC0wLDAgKzEsNjcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCitQT1NUIGNhbGxiYWNrCitodWdlIHJlcXVlc3QgaGVhZGVyCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorCis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBGaW5lIQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitDb250ZW50LUxlbmd0aDogNg0KKw0KK2hlbGxvCis8L2RhdGE+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgdG8gdXNlCis8dG9vbD4KK2xpYjU1MworPC90b29sPgorPGZlYXR1cmVzPgorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0hUVFAgcG9zdCB3aXRoIGh1Z2UgcmVxdWVzdCBoZWFkZXJzIGFuZCBwb3N0IGRhdGEgZnJvbSBjYWxsYmFjaworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC9wYXRoLzU1MworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6IGN1cmwvLioKKzwvc3RyaXA+CisjIFdlIHN0cmlwIG9mZiBhIGxhcmdlIGNodW5rIG9mIHRoZSB0eXBlLTIgTlRMTSBtZXNzYWdlIHNpbmNlIGl0IGRlcGVuZHMgb24KKyMgdGhlIGxvY2FsIGhvc3QgbmFtZSBhbmQgdGh1cyBkaWZmZXJzIG9uIGRpZmZlcmVudCBtYWNoaW5lcyEKKzxwcm90b2NvbCBub25ld2xpbmU9InllcyI+CitQT1NUIC9wYXRoLzU1MyBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitIZWFkZXIwOiBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQ0KK0hlYWRlcjE6IEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBDQorSGVhZGVyMjogQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUENCitIZWFkZXIzOiBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQ0KK0hlYWRlcjQ6IEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBDQorSGVhZGVyNTogQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUENCitIZWFkZXI2OiBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQ0KK0hlYWRlcjc6IEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBDQorQ29udGVudC1MZW5ndGg6IDQwOTYwDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTU0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTU0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOWJiY2MKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NTQKQEAgLTAsMCArMSw3OCBAQAorPHRlc3RjYXNlPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbW9kZT0idGV4dCI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCitoZWxsbworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWI1NTQKKzwvdG9vbD4KKworIDxuYW1lPgorSFRUUCBtdWx0aS1wYXJ0IGZvcm1wb3N0IHVzaW5nIHJlYWQgY2FsbGJhY2sgZm9yIHRoZSBmaWxlIHBhcnQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTU0Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXBwYXJ0Pgorcy9eLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW2EtejAtOV0qLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8KK3MvYm91bmRhcnk9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVthLXowLTldKi9ib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLworPC9zdHJpcHBhcnQ+CisjIE5vdGUgdGhhdCB0aGUgc3RyaXBwaW5nIGFib3ZlIHJlbW92ZXMgMTIgYnl0ZXMgZnJvbSBldmVyeSBvY2N1cmFuY2Ugb2YgdGhlCisjIGJvdW5kYXJ5IHN0cmluZyBhbmQgc2luY2UgNSBvZiB0aGVtIGFyZSBpbiB0aGUgYm9keSBjb250ZW50cywgd2Ugc2VlCisjICg1KjEyKSA9PSA2MCBieXRlcyBsZXNzCis8cHJvdG9jb2w+CitQT1NUIC81NTQgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDczMg0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJzZW5kZmlsZSI7IGZpbGVuYW1lPSJwb3N0aXQyLmMiDQorDQordGhpcyBpcyB3aGF0IHdlIHBvc3QgdG8gdGhlIHNpbGx5IHdlYiBzZXJ2ZXIKKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iY2FsbGJhY2tkYXRhIg0KKw0KK3RoaXMgaXMgd2hhdCB3ZSBwb3N0IHRvIHRoZSBzaWxseSB3ZWIgc2VydmVyCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImZpbGVuYW1lIg0KKw0KK3Bvc3RpdDIuYw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ic3VibWl0Ig0KKw0KK3NlbmQNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InNvbWVuYW1lIjsgZmlsZW5hbWU9InNvbWVmaWxlLnR4dCINCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQ0KKw0KK2JsYWggYmxhaA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU1NSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU1NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjA2YjUyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTU1CkBAIC0wLDAgKzEsMTQyIEBACis8dGVzdGNhc2U+CisjIE5PVEU6IHRoaXMgdGVzdCBjYXNlIGlzIGEgZHVwbGljYXRlIG9mIDU0NyBidXQgdGhlIHRvb2wgaXMgYnVpbHQgdG8gdXNlIHRoZQorIyBtdWx0aSBpbnRlcmZhY2UgaW5zdGVhZCBvZiBlYXN5LCBidXQgdGhhdCBzaG91bGRuJ3QgYmUgbm90aWNhYmxlIGF0IGFsbCBpbgorIyB0aGlzIGZpbGUhCis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorUE9TVCBjYWxsYmFjaworSFRUUCBwcm94eQorSFRUUCBwcm94eSBOVExNIGF1dGgKK211bHRpCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisKKzxkYXRhPgorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorUHJveHktQXV0aGVudGljYXRlOiBCbGFja21hZ2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorUHJveHktQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iZ2ltbWUgYWxsIHllciBzM2NyM3RzIg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UKKzwvZGF0YT4KKworIyB0aGlzIGlzIHJldHVybmVkIGZpcnN0IHNpbmNlIHdlIGdldCBubyBwcm94eS1hdXRoCis8ZGF0YTEwMDE+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KKw0KK0hleSB5b3UsIGF1dGhlbnRpY2F0ZSBvciBnbyBhd2F5IQorPC9kYXRhMTAwMT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIHRoZSBzZWNvbmQKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMj4KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gcHJveHkgbGFuZCBzd3NjbG9zZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDQyDQorDQorQ29udGVudHMgb2YgdGhhdCBwYWdlIHlvdSByZXF1ZXN0ZWQsIHNpci4KKzwvZGF0YTEwMDI+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitQcm94eS1BdXRoZW50aWNhdGU6IEJsYWNrbWFnaWMgcmVhbG09ImdpbW1lIGFsbCB5ZXIgczNjcjN0cyINCitQcm94eS1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSJnaW1tZSBhbGwgeWVyIHMzY3IzdHMiDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhcg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCitDb250ZW50LUxlbmd0aDogMzQNCisNCitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHByb3h5IGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiA0Mg0KKw0KK0NvbnRlbnRzIG9mIHRoYXQgcGFnZSB5b3UgcmVxdWVzdGVkLCBzaXIuCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgdG8gdXNlCis8dG9vbD4KK2xpYjU1NQorPC90b29sPgorPGZlYXR1cmVzPgorTlRMTQorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0hUVFAgcHJveHkgYXV0aCBOVExNIHdpdGggUE9TVCBkYXRhIGZyb20gcmVhZCBjYWxsYmFjayBtdWx0aS1pZgorIDwvbmFtZT4KKyA8c2V0ZW52PgorIyB3ZSBmb3JjZSBvdXIgb3duIGhvc3QgbmFtZSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgdGVzdCBtYWNoaW5lIGluZGVwZW5kZW50CitDVVJMX0dFVEhPU1ROQU1FPWN1cmxob3N0CisjIHdlIHRyeSB0byB1c2UgdGhlIExEX1BSRUxPQUQgaGFjaywgaWYgbm90IGEgZGVidWcgYnVpbGQKK0xEX1BSRUxPQUQ9JVBXRC9saWJ0ZXN0Ly5saWJzL2xpYmhvc3RuYW1lLnNvCisgPC9zZXRlbnY+CisgPGNvbW1hbmQ+CitodHRwOi8vdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20vcGF0aC81NTUgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIHMxbGx5OnBlcnMwbgorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDogY3VybC8uKgorPC9zdHJpcD4KKzxzdHJpcHBhcnQ+CisjIHJlbW92ZSBDUiB0aGF0IENVUkxPUFRfVFJBTlNGRVJURVhUIGFkZGVkLCB3aGVuIENoYXJDb252IGVuYWJsZWQ6CitzL14odGhpcyBpcyB0aGUgYmx1cmIgd2Ugd2FudCB0byB1cGxvYWQpXHJcbi8kMVxuLyBpZigkaGFzX2NoYXJjb252KQorPC9zdHJpcHBhcnQ+Cis8cHJvdG9jb2w+CitQT1NUIGh0dHA6Ly90ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS9wYXRoLzU1NSBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCitIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNg0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQordGhpcyBpcyB0aGUgYmx1cmIgd2Ugd2FudCB0byB1cGxvYWQKK1BPU1QgaHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tL3BhdGgvNTU1IEhUVFAvMS4xDQorUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCitIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCitQT1NUIGh0dHA6Ly90ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS9wYXRoLzU1NSBIVFRQLzEuMQ0KK1Byb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRUFBQUFBWUFCZ0FXQUFBQUFBQUFBQndBQUFBQlFBRkFIQUFBQUFJQUFnQWRRQUFBQUFBQUFBQUFBQUFCb0tCQUlZckQxeEptaE5CTkw5Zkx6dWs5UFY5NDM2R0F4UHUwRUtXenFRL3NaRFZMWG5wMUpyeVNnbDhBK2NpYkU2ejRITXhiR3g1WTNWeWJHaHZjM1E9DQorVXNlci1BZ2VudDogY3VybC83LjEzLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEzLjItQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMw0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorQ29udGVudC1MZW5ndGg6IDM2DQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCisNCit0aGlzIGlzIHRoZSBibHVyYiB3ZSB3YW50IHRvIHVwbG9hZAorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU1NiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU1NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OThiZGZiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTU2CkBAIC0wLDAgKzEsNTAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitDb250ZW50LUxlbmd0aDogNgorQ29ubmVjdGlvbjogY2xvc2UKKworLWZvby0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjU1NgorPC90b29sPgorIDxuYW1lPgorc2VuZCBhbmQgcmVjdiBIVFRQCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvNTU2IEhUVFAvMS4yDQorSG9zdDogbmluamENCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTU3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYTY3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NTcKQEAgLTAsMCArMSwzOSBAQAorPHRlc3RjYXNlPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWI1NTcKKzwvdG9vbD4KKworPG5hbWU+CitjdXJsX21wcmludGYoKSB0ZXN0aW5nCis8L25hbWU+Cis8Y29tbWFuZD4KK25vdGhpbmcKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdGRvdXQgbW9kZT0idGV4dCI+CitBbGwgY3VybF9tcHJpbnRmKCkgdW5zaWduZWQgc2hvcnQgdGVzdHMgT0shCitBbGwgY3VybF9tcHJpbnRmKCkgc2lnbmVkIHNob3J0IHRlc3RzIE9LIQorQWxsIGN1cmxfbXByaW50ZigpIHVuc2lnbmVkIGludCB0ZXN0cyBPSyEKK0FsbCBjdXJsX21wcmludGYoKSBzaWduZWQgaW50IHRlc3RzIE9LIQorQWxsIGN1cmxfbXByaW50ZigpIHVuc2lnbmVkIGxvbmcgdGVzdHMgT0shCitBbGwgY3VybF9tcHJpbnRmKCkgc2lnbmVkIGxvbmcgdGVzdHMgT0shCitBbGwgY3VybF9tcHJpbnRmKCkgY3VybF9vZmZfdCB0ZXN0cyBPSyEKKzwvc3Rkb3V0PgorPC92ZXJpZnk+CisKKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5N2IzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NgpAQCAtMCwwICsxLDYxIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorY2h1bmtlZCBUcmFuc2Zlci1FbmNvZGluZworY29uZmlnIGZpbGUKKy1BCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMCAyMDAgT0sgc3dzY2xvc2UKK0Z1bm55LWhlYWQ6IHllc3llcworCitUaGlzIGlzIHRoZSBwcm9vZiBpdCB3b3JrcworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgUE9TVCB3aXRoICpIVUdFKiByZXF1ZXN0IGFuZCBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nCisgPC9uYW1lPgorIDxzdGRpbj4KKyMKK2RhdGEgIndlIHBvc3QgdGhpcyIKKyMKKyMgZW5mb3JjZSBjaHVua3kgcG9zdCEKK2hlYWRlciAiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiCisjCisjIFNldCB0aGUgdXNlci1hZ2VudCB1c2luZyBhIHNob3J0LW9wdGlvbjoKKy1BICJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiCisjCisgPC9zdGRpbj4KKyA8Y29tbWFuZD4KKy1LIC0gJUhPU1RJUDolSFRUUFBPUlQvdGhhdC5zaXRlLmNvbS81NgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorUE9TVCAvdGhhdC5zaXRlLmNvbS81NiBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZA0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorYw0KK3dlIHBvc3QgdGhpcw0KKzANCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTYwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTYwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOTkxYjgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NjAKQEAgLTAsMCArMSw1NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQUworSFRUUCBHRVQKK211bHRpCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDcKKworTW9vTW9vCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorU1NMCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHBzCis8L3NlcnZlcj4KKzx0b29sPgorbGliNTYwCis8L3Rvb2w+CisgPG5hbWU+CitzaW1wbGUgSFRUUFMgR0VUIHdpdGggbXVsdGkgaW50ZXJmYWNlCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cHM6Ly8lSE9TVElQOiVIVFRQU1BPUlQvNTYwCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvNTYwIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFNQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTYxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMDY5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NjEKQEAgLTAsMCArMSw2NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0hUVFAgcHJveHkKK0NVUkxPUFRfUFJPWFlfVFJBTlNGRVJfTU9ERQorQ1VSTE9QVF9QUk9YWQordHlwZT0KKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CisKK2hlbGxvCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorZnRwCis8L2ZlYXR1cmVzPgorPHRvb2w+CitsaWI1NDkKKzwvdG9vbD4KKyA8bmFtZT4KK0ZUUCBSRVRSIHdpdGggQ1VSTE9QVF9QUk9YWV9UUkFOU0ZFUl9NT0RFLCBBU0NJSSB0cmFuc2ZlciBhbmQgdHlwZT1pCisgPC9uYW1lPgorIyBmaXJzdCBVUkwgdGhlbiBwcm94eQorIDxjb21tYW5kPgorImZ0cDovL3d3dy5leGFtcGxlLmNvbS9tb28vNTYxO3R5cGU9aSIgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIGFzY2lpCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBmdHA6Ly93d3cuZXhhbXBsZS5jb20vbW9vLzU2MTt0eXBlPWkgSFRUUC8xLjENCitIb3N0OiB3d3cuZXhhbXBsZS5jb206MjENCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3RvY29sPgorPHN0ZG91dCBtb2RlPSJ0ZXh0Ij4KK2hlbGxvCis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2MiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzBjZjdhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTYyCkBAIC0wLDAgKzEsNTMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitSRVRSCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitzaWxseSBkYXRhCitvdmVyIEZUUAorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1NjIKKzwvdG9vbD4KKyA8bmFtZT4KK0ZUUCBhIHR5cGU9QSBVUkwgYW5kIENVUkxPUFRfUE9SVCBzZXQKKyA8L25hbWU+CisKKyMgbm90ZSB0aGF0IHdlIG5lZWQgcXVvdGVzIGFyb3VuZCB0aGUgVVJMIGJlbG93IHRvIG1ha2Ugc3VyZSB0aGUgc2hlbGwgZG9lc24ndAorIyB0cmVhdCB0aGUgc2VtaWNvbG9uIGFzIGEgc2VwYXJhdG9yIQorIDxjb21tYW5kPgorJ2Z0cDovLyVIT1NUSVA6MjM0NTYvNTYyO3R5cGU9QScgJUZUUFBPUlQKKzwvY29tbWFuZD4KKworPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCisjCisjIFRoZXJlJ3Mgbm8gTVRETSBpbiB0aGUgcHJvdG9jb2wgaGVyZSBzaW5jZSB0aGlzIGNvZGUgZG9lc24ndCBhc2sgZm9yIHRoZQorIyB0aW1lL2RhdGUgb2YgdGhlIGZpbGUKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgQQ0KK1NJWkUgNTYyDQorUkVUUiA1NjINCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2MyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODUxNTIzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTYzCkBAIC0wLDAgKzEsNTcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitDVVJMT1BUX1BPUlQKK0hUVFAgcHJveHkKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KK0FjY2VwdC1SYW5nZXM6IGJ5dGVzDQorQ29udGVudC1MZW5ndGg6IDYNCisNCitoZWxsbworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKK2h0dHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1NjIKKzwvdG9vbD4KKyA8bmFtZT4KK0ZUUCB0eXBlPUEgVVJMIGFuZCBDVVJMT1BUX1BPUlQgc2V0IGFuZCBwcm94eQorIDwvbmFtZT4KKworPHNldGVudj4KK2Z0cF9wcm94eT1odHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvCis8L3NldGVudj4KKyMgbm90ZSB0aGF0IHdlIG5lZWQgcXVvdGVzIGFyb3VuZCB0aGUgVVJMIGJlbG93IHRvIG1ha2Ugc3VyZSB0aGUgc2hlbGwgZG9lc24ndAorIyB0cmVhdCB0aGUgc2VtaWNvbG9uIGFzIGEgc2VwYXJhdG9yIQorIDxjb21tYW5kPgorImZ0cDovLyVIT1NUSVA6MjM0NTYvNTYzO3R5cGU9QSIgJUZUUFBPUlQKKzwvY29tbWFuZD4KKworPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorR0VUIEZUUDovLyVIT1NUSVA6JUZUUFBPUlQvNTYzO3R5cGU9QSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUZUUFBPUlQNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTY0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYmYxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NjQKQEAgLTAsMCArMSw2MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BBU1YKK1JFVFIKK211bHRpCitTT0NLUzQKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2RhdGEKKyAgICB0bworICAgICAgc2VlCit0aGF0IEZUUAord29ya3MKKyAgc28gZG9lcyBpdD8KKzwvZGF0YT4KKworPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKK3NvY2tzNAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjU2NAorPC90b29sPgorIDxuYW1lPgorRlRQIFJFVFIgYSBmaWxlIG92ZXIgYSBTT0NLUyBwcm94eSB1c2luZyB0aGUgbXVsdGkgaW50ZXJmYWNlCisgPC9uYW1lPgorPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL3BhdGgvNTY0ICVIT1NUSVA6JVNPQ0tTUE9SVAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBwYXRoDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgNTY0DQorUkVUUiA1NjQNCitRVUlUDQorPC9wcm90b2NvbD4KKzxzdGRvdXQ+CitkYXRhCisgICAgdG8KKyAgICAgIHNlZQordGhhdCBGVFAKK3dvcmtzCisgIHNvIGRvZXMgaXQ/Cis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2NSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGY3NWE1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTY1CkBAIC0wLDAgKzEsMTA1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorSFRUUCBEaWdlc3QgYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMTAwIENvbnRpbnVlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0RhdGU6IFN1biwgMDMgQXByIDIwMDUgMTQ6NTc6NDUgR01UDQorWC1Qb3dlcmVkLUJ5OiBBU1AuTkVUDQorDQorSFRUUC8xLjEgNDAxIGF1dGhlbnRpY2F0aW9uIHBsZWFzZSBzd3Nib3VuY2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NCINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDANCisNCis8L2RhdGE+Cis8ZGF0YTE+CitIVFRQLzEuMSAyMDAgQSBPSw0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMNCisNCitvaworPC9kYXRhMT4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAxMDAgQ29udGludWUNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorRGF0ZTogU3VuLCAwMyBBcHIgMjAwNSAxNDo1Nzo0NSBHTVQNCitYLVBvd2VyZWQtQnk6IEFTUC5ORVQNCisNCitIVFRQLzEuMSA0MDEgYXV0aGVudGljYXRpb24gcGxlYXNlIHN3c2JvdW5jZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjANCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ0Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMA0KKw0KK0hUVFAvMS4xIDIwMCBBIE9LDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzYuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMw0KKw0KK29rCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTY1Cis8L3Rvb2w+CisKKyA8bmFtZT4KK3NlbmQgSFRUUCBQT1NUIHVzaW5nIHJlYWQgY2FsbGJhY2ssIGNodW5rZWQgdHJhbnNmZXItZW5jb2RpbmcgYW5kIERpZ2VzdAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC81NjUKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1BPU1QgLzU2NSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZA0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorDQorMA0KKw0KK1BPU1QgLzU2NSBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0iZm9vIiwgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ0IiwgdXJpPSIvNTY1IiwgcmVzcG9uc2U9Ijg3NzQyNGY3NTBhZjA0NzYzNGRiZDk0Zjk5MzMyMTdiIg0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZA0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCiszDQorb25lDQorMw0KK3R3bw0KKzUNCit0aHJlZQ0KKzFkDQorYW5kIGEgZmluYWwgbG9uZ2VyIGNyYXA6IGZvdXINCiswDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2NiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWRhNjFkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTY2CkBAIC0wLDAgKzEsNTcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBtb2RlPSJ0ZXh0Ij4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDAKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTY2Cis8L3Rvb2w+CisKKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGggQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfRE9XTkxPQUQgYW5kIDAgYnl0ZXMgdHJhbnNmZXIKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTY2IGxvZy9pcDU2NgorPC9jb21tYW5kPgorPC9jbGllbnQ+IAorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxmaWxlIG5hbWU9ImxvZy9pcDU2NiIgbW9kZT0idGV4dCI+CitDTDogMAorPC9maWxlPgorPHByb3RvY29sPgorR0VUIC81NjYgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2NyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmQxNDg0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTY3CkBAIC0wLDAgKzEsNTAgQEAKKzx0ZXN0Y2FzZT4KKworI0luZm9ybWF0aW9uYWwKKzxpbmZvPgorPGtleXdvcmRzPgorUlRTUAorT1BUSU9OUworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitSVFNQLzEuMCAyMDAgT0sKK1NlcnZlcjogUlRTUEQvbGliY3VybC10ZXN0CitDU2VxOiAxCitQdWJsaWM6IERFU0NSSUJFLCBPUFRJT05TLCBTRVRVUCwgVEVBUkRPV04sIFBMQVksIFBBVVNFCitDdXJsLVByaXZhdGU6IHN3c2Nsb3NlCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1TaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3J0c3AKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1NjcKKzwvdG9vbD4KKworPG5hbWU+CitzaW1wbGUgUlRTUCBPUFRJT05TIGNvbW1hbmQKKzwvbmFtZT4KKzxjb21tYW5kPgorcnRzcDovLyVIT1NUSVA6JVJUU1BQT1JULzU2NworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitPUFRJT05TIHJ0c3A6Ly8lSE9TVElQOiVSVFNQUE9SVC81NjcgUlRTUC8xLjANCitDU2VxOiAxDQorVXNlci1BZ2VudDogdGVzdDU2Nw0KK1Rlc3QtTnVtYmVyOiA1NjcNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+CisKKzwvdGVzdGNhc2U+CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2OCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjg0NDBmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTY4CkBAIC0wLDAgKzEsMTE3IEBACis8dGVzdGNhc2U+CisKKyNJbmZvcm1hdGlvbmFsCis8aW5mbz4KKzxrZXl3b3Jkcz4KK1JUU1AKK0FOTk9VTkNFCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YTE+CitSVFNQLzEuMCAyMDAgT0sKK1NlcnZlcjogUlRTUEQvbGliY3VybC10ZXN0CitDc2VxOiAxCisKKzwvZGF0YTE+CisKKzxkYXRhMj4KK1JUU1AvMS4wIDIwMCBPSworU2VydmVyOiBSVFNQRC9saWJjdXJsLXRlc3QKK0NzZXE6IDIKK0NvbnRlbnQtTGVuZ3RoOiA3MAorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9zZHAKKwordj0wCitzPXJ0c3BkIFNEUAoraT1BIGZha2UgU0RQIHJlcGx5Cit1PWh0dHA6Ly93d3cuY3VybC5leGFtcGxlLmNvbS9mYWtlc2RwLnBzCis8L2RhdGEyPgorPGRhdGEzPgorUlRTUC8xLjAgMjAwIE9raWUgRG9raWUKK1NlcnZlcjogUlRTUEQvbGliY3VybC10ZXN0CitDc2VxOiAzCisKKzwvZGF0YTM+Cis8ZGF0YTQ+CitSVFNQLzEuMCAyMDAgT0sKK1NlcnZlcjogUlRTUEQvbGliY3VybC10ZXN0CitDU2VxOiA0CitDdXJsLXByaXZhdGU6IHN3c2Nsb3NlCitJbmZvcm1hdGlvbmFsOiBFbXB0eSBPcHRpb25zIFJlc3BvbnNlCisKKzwvZGF0YTQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1TaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3J0c3AKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1NjgKKzwvdG9vbD4KKworPG5hbWU+CitSVFNQIEFubm91bmNlIChQVVQgYW5kIFBPU1Qgc3R5bGUpIHRlc3QKKzwvbmFtZT4KKzxjb21tYW5kPgorcnRzcDovLyVIT1NUSVA6JVJUU1BQT1JULzU2OAorPC9jb21tYW5kPgorIyBmaWxlIHdyaXR0ZW4gYmVmb3JlIHRlc3QgY29tbWFuZCBydW5zCis8ZmlsZSBuYW1lPSJsb2cvZmlsZTU2OC50eHQiPgordj0wCitvPW1oYW5kbGV5IDI4OTA4NDQ1MjYgMjg5MDg0NTQ2OCBJTiBJUDQgMTI2LjE2LjY0LjQKK3M9U0RQIFNlbWluYXIKK2k9QSBTZW1pbmFyIG9uIHRoZSBzZXNzaW9uIGRlc2NyaXB0aW9uIHByb3RvY29sCit1PWh0dHA6Ly93d3cuY3MudWNsLmFjLnVrL3N0YWZmL00uSGFuZGxleS9zZHAuMDMucHMKK2U9bWpoQGlzaS5lZHUgKE1hcmsgSGFuZGxleSkKK2M9SU4gSVA0IDIyNC4yLjE3LjEyLzEyNwordD0yODczMzk3NDk2IDI4NzM0MDQ2OTYKK2E9cmVjdm9ubHkKK209YXVkaW8gMzQ1NiBSVFAvQVZQIDAKK209dmlkZW8gMjIzMiBSVFAvQVZQIDMxCis8L2ZpbGU+Cis8L2NsaWVudD4KKworPHZlcmlmeT4KKzxzdHJpcD4KK15JZi1Nb2RpZmllZC1TaW5jZTouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0FOTk9VTkNFIHJ0c3A6Ly8lSE9TVElQOiVSVFNQUE9SVC81NjgwMDAxIFJUU1AvMS4wDQorQ1NlcTogMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzMDYNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3NkcA0KKw0KK3Y9MAorbz1taGFuZGxleSAyODkwODQ0NTI2IDI4OTA4NDU0NjggSU4gSVA0IDEyNi4xNi42NC40CitzPVNEUCBTZW1pbmFyCitpPUEgU2VtaW5hciBvbiB0aGUgc2Vzc2lvbiBkZXNjcmlwdGlvbiBwcm90b2NvbAordT1odHRwOi8vd3d3LmNzLnVjbC5hYy51ay9zdGFmZi9NLkhhbmRsZXkvc2RwLjAzLnBzCitlPW1qaEBpc2kuZWR1IChNYXJrIEhhbmRsZXkpCitjPUlOIElQNCAyMjQuMi4xNy4xMi8xMjcKK3Q9Mjg3MzM5NzQ5NiAyODczNDA0Njk2CithPXJlY3Zvbmx5CittPWF1ZGlvIDM0NTYgUlRQL0FWUCAwCittPXZpZGVvIDIyMzIgUlRQL0FWUCAzMQorREVTQ1JJQkUgcnRzcDovLyVIT1NUSVA6JVJUU1BQT1JULzU2ODAwMDIgUlRTUC8xLjANCitDU2VxOiAyDQorQWNjZXB0OiBhcHBsaWNhdGlvbi9zZHANCisNCitBTk5PVU5DRSBydHNwOi8vJUhPU1RJUDolUlRTUFBPUlQvNTY4MDAwMyBSVFNQLzEuMA0KK0NTZXE6IDMNCitDb250ZW50LVR5cGU6IHBvc3R5IGdvb2RuZXNzDQorQ29udGVudC1MZW5ndGg6IDM1DQorDQorcG9zdHlmaWVsZD1wb3N0eXN0dWZmJnByb2plY3Q9Y3VybAorT1BUSU9OUyBydHNwOi8vJUhPU1RJUDolUlRTUFBPUlQvNTY4MDAwNCBSVFNQLzEuMA0KK0NTZXE6IDQNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+CisKKzwvdGVzdGNhc2U+CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2OSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU2OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGM2MmE0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTY5CkBAIC0wLDAgKzEsMTExIEBACis8dGVzdGNhc2U+CisKKyNJbmZvcm1hdGlvbmFsCis8aW5mbz4KKzxrZXl3b3Jkcz4KK1JUU1AKK1NFU1NJT05fSUQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhMT4KK1JUU1AvMS4wIDIwMCBPSworU2VydmVyOiBSVFNQRC9saWJjdXJsLXRlc3QKK0NTZXE6IDEKK1Nlc3Npb246IDAwLisxLWFtLWFTZTU1aW9uX2lkXCR5ZXMtaS1hbVwkO3RpbWVvdXQ9NjAKKworPC9kYXRhMT4KKzxkYXRhMj4KK1JUU1AvMS4wIDIwMCBPSworU2VydmVyOiBSVFNQRC9saWJjdXJsLXRlc3QKK0NTZXE6IDIKKworPC9kYXRhMj4KKzxkYXRhMz4KK1JUU1AvMS4wIDIwMCBPSworU2Vzc2lvbjogICAgICAgIFwkZXh0cmFzcGFjZXMgaWdub3JlLXRoaXMtcGFydC0tLS0tLS07Zm9vPWJhcgorQ1NlcTogMworU2VydmVyOiBSVFNQRC9saWJjdXJsLXRlc3QKKworPC9kYXRhMz4KKzxkYXRhND4KK1JUU1AvMS4wIDIwMCBPSworQ1NlcTogNAorU2VydmVyOiBSVFNQRC9saWJjdXJsLXRlc3QKKworPC9kYXRhND4KKzxkYXRhNT4KK1JUU1AvMS4wIDIwMCBPSworU2Vzc2lvbjogQQorU2VydmVyOiBSVFNQRC9saWJjdXJsLXRlc3QKK0NTZXE6IDUKK0luZm9ybWF0aW9uYWw6IFNpbmdsZSBDaGFyYWN0ZXIKKworPC9kYXRhNT4KKzxkYXRhNj4KK1JUU1AvMS4wIDIwMCBPSworU2VydmVyOiBSVFNQRC9saWJjdXJsLXRlc3QKK0N1cmwtUHJpdmF0ZTogc3dzY2xvc2UKK0NTZXE6IDYKKworPC9kYXRhNj4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LVNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorcnRzcAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjU2OQorPC90b29sPgorCis8bmFtZT4KK1JUU1AgU2Vzc2lvbiBJRCBwYXJzaW5nCis8L25hbWU+Cis8Y29tbWFuZD4KK3J0c3A6Ly8lSE9TVElQOiVSVFNQUE9SVC81NjkgbG9nL2lkZmlsZS50eHQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCis8dmVyaWZ5PgorPHN0cmlwPgorXklmLU1vZGlmaWVkLVNpbmNlOi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorU0VUVVAgcnRzcDovLyVIT1NUSVA6JVJUU1BQT1JULzU2OTAwMDEgUlRTUC8xLjANCitDU2VxOiAxDQorVHJhbnNwb3J0OiBGYWtlL05vdFJlYWwvSnVzdEFUZXN0O2Zvbz1iYXoNCisNCitURUFSRE9XTiBydHNwOi8vJUhPU1RJUDolUlRTUFBPUlQvNTY5MDAwMiBSVFNQLzEuMA0KK0NTZXE6IDINCitTZXNzaW9uOiAwMC4rMS1hbS1hU2U1NWlvbl9pZFwkeWVzLWktYW1cJA0KKw0KK1NFVFVQIHJ0c3A6Ly8lSE9TVElQOiVSVFNQUE9SVC81NjkwMDAzIFJUU1AvMS4wDQorQ1NlcTogMw0KK1RyYW5zcG9ydDogRmFrZS9Ob3RSZWFsL0p1c3RBVGVzdDtmb289YmF6DQorDQorVEVBUkRPV04gcnRzcDovLyVIT1NUSVA6JVJUU1BQT1JULzU2OTAwMDQgUlRTUC8xLjANCitDU2VxOiA0DQorU2Vzc2lvbjogXCRleHRyYXNwYWNlcw0KKw0KK1NFVFVQIHJ0c3A6Ly8lSE9TVElQOiVSVFNQUE9SVC81NjkwMDA1IFJUU1AvMS4wDQorQ1NlcTogNQ0KK1RyYW5zcG9ydDogRmFrZS9Ob3RSZWFsL0p1c3RBVGVzdDtmb289YmF6DQorDQorVEVBUkRPV04gcnRzcDovLyVIT1NUSVA6JVJUU1BQT1JULzU2OTAwMDYgUlRTUC8xLjANCitDU2VxOiA2DQorU2Vzc2lvbjogQQ0KKw0KKzwvcHJvdG9jb2w+Cis8ZmlsZSBuYW1lPSJsb2cvaWRmaWxlLnR4dCI+CitHb3QgU2Vzc2lvbiBJRDogWzAwLisxLWFtLWFTZTU1aW9uX2lkXCR5ZXMtaS1hbVwkXQorR290IFNlc3Npb24gSUQ6IFtcJGV4dHJhc3BhY2VzXQorR290IFNlc3Npb24gSUQ6IFtBXQorPC9maWxlPgorPC92ZXJpZnk+CisKKzwvdGVzdGNhc2U+CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcyNGVhYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU3CkBAIC0wLDAgKzEsNDggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKy0td3JpdGUtb3V0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBub2NoZWNrPSJ5ZXMiPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitGdW5ueS1oZWFkOiB5ZXN5ZXMKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTQgICAKKworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgY29udGVudC10eXBlIHdpdGggc3BhY2VzIGluCisgPC9uYW1lPgorIDxjb21tYW5kPgorLXcgIiV7Y29udGVudF90eXBlfVxuIiBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTcgLW8gbG9nL291dDU3Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3Rkb3V0IG1vZGU9InRleHQiPgordGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTQKKzwvc3Rkb3V0PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzU3IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NzAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjODYzOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU3MApAQCAtMCwwICsxLDc3IEBACis8dGVzdGNhc2U+CisKKyNJbmZvcm1hdGlvbmFsCis8aW5mbz4KKzxrZXl3b3Jkcz4KK1JUU1AKK01pc21hdGNoIGNoZWNraW5nCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YTE+CitSVFNQLzEuMCAyMDAgT0sKK1NlcnZlcjogUlRTUEQvbGliY3VybC10ZXN0CitDU2VxOiAyCitQdWJsaWM6IERFU0NSSUJFLCBPUFRJT05TLCBTRVRVUCwgVEVBUkRPV04sIFBMQVksIFBBVVNFCitJbmZvcm1hdGlvbmFsOiBDU2VxIE1pc21hdGNoCisKKzwvZGF0YTE+Cis8ZGF0YTI+CitSVFNQLzEuMCAyMDAgT0sKK1NlcnZlcjogUlRTUEQvbGliY3VybC10ZXN0CitTZXNzaW9uOiBhc2RmCitDU2VxOiA5OTkKKworPC9kYXRhMj4KKzxkYXRhMz4KK1JUU1AvMS4wIDIwMCBPSworU2VydmVyOiBSVFNQRC9saWJjdXJsLXRlc3QKK1Nlc3Npb246IGFzZGZXUk9ORworSW5mb3JtYXRpb25hbDogU2Vzc2lvbiBJRCBtaXNtYXRjaAorQ3VybC1Qcml2YXRlOiBzd3NjbG9zZQorQ1NlcTogMTAwMAorCis8L2RhdGEzPgorCis8L3JlcGx5PgorCisjIENsaWVudC1TaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3J0c3AKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1NzAKKzwvdG9vbD4KKworPG5hbWU+CitSVFNQIENTZXEgYW5kIFNlc3Npb24gTWlzbWF0Y2ggY2hlY2tzCis8L25hbWU+Cis8Y29tbWFuZD4KK3J0c3A6Ly8lSE9TVElQOiVSVFNQUE9SVC81NzAKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCis8dmVyaWZ5PgorPHN0cmlwPgorXklmLU1vZGlmaWVkLVNpbmNlOi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorT1BUSU9OUyBydHNwOi8vJUhPU1RJUDolUlRTUFBPUlQvNTcwMDAwMSBSVFNQLzEuMA0KK0NTZXE6IDENCisNCitTRVRVUCBydHNwOi8vJUhPU1RJUDolUlRTUFBPUlQvNTcwMDAwMiBSVFNQLzEuMA0KK0NTZXE6IDk5OQ0KK1RyYW5zcG9ydDogUkFXL1JBVy9VRFA7dW5pY2FzdDtjbGllbnRfcG9ydD0zMDU2LTMwNTcNCisNCitQTEFZIHJ0c3A6Ly8lSE9TVElQOiVSVFNQUE9SVC81NzAwMDAzIFJUU1AvMS4wDQorQ1NlcTogMTAwMA0KK1Nlc3Npb246IGFzZGYNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+CisKKzwvdGVzdGNhc2U+CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU3MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU3MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjI2M2IxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTcxCkBAIC0wLDAgKzEsMTA4IEBACis8dGVzdGNhc2U+CisKKyMgSW5mb3JtYXRpb25hbAorIyBCYW5nIG9uIFJUUCBieQorIyAgIDEpIGdpdmluZyBhbiBldmlsIHBheWxvYWQgKHdpdGggJCkKKyMgICAyKSBHaXZpbmcgZXZpbCBjb250ZW50IChTRFAgc3RhcnRpbmcgd2l0aCAkKQorIyAgIDMpIHBhY2tpbmcgcnRwIGFmdGVyIGhlYWRlcnMsIGFmdGVyIGNvbnRlbnQsIGFuZCBhdCB0aGUgc3RhcnQKKzxpbmZvPgorPGtleXdvcmRzPgorUlRTUAorUlRQCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YTE+CitSVFNQLzEuMCAyMDAgT0sKK1NlcnZlcjogUlRTUEQvbGliY3VybC10ZXN0CitTZXNzaW9uOiBhc2RmCitDU2VxOiAxCisKKzwvZGF0YTE+CisKKzxkYXRhMj4KK1JUU1AvMS4wIDIwMCBPSworU2VydmVyOiBSVFNQRC9saWJjdXJsLXRlc3QKK0NTZXE6IDIKK1Nlc3Npb246IGFzZGYKKworPC9kYXRhMj4KKworPGRhdGEzPgorUlRTUC8xLjAgMjAwIE9LCitTZXJ2ZXI6IFJUU1BEL2xpYmN1cmwtdGVzdAorQ3NlcTogMworQ29udGVudC1MZW5ndGg6IDQKK0NvbnRlbnQtVHlwZTogZmFrZS9ldmlsCisKKyQ5OQorPC9kYXRhMz4KKworPGRhdGE0PgorUlRTUC8xLjAgMjAwIE9LCitTZXJ2ZXI6IFJUU1BEL2xpYmN1cmwtdGVzdAorU2Vzc2lvbjogYXNkZgorQ1NlcTogNAorCis8L2RhdGE0PgorCis8c2VydmVyY21kPgorcnRwOiBwYXJ0IDIgY2hhbm5lbCAxIHNpemUgMTAKK3J0cDogcGFydCAyIGNoYW5uZWwgMCBzaXplIDUwMAorcnRwOiBwYXJ0IDIgY2hhbm5lbCAwIHNpemUgMTk2CitydHA6IHBhcnQgMiBjaGFubmVsIDAgc2l6ZSAxMjQKK3J0cDogcGFydCAyIGNoYW5uZWwgMCBzaXplIDgyNAorcnRwOiBwYXJ0IDMgY2hhbm5lbCAxIHNpemUgMTAKK3J0cDogcGFydCAzIGNoYW5uZWwgMCBzaXplIDUwCitydHA6IHBhcnQgNCBjaGFubmVsIDAgc2l6ZSA3OTgKK3J0cDogcGFydCA0IGNoYW5uZWwgMCBzaXplIDQyCitydHA6IHBhcnQgNCBjaGFubmVsIDEgc2l6ZSAzMAorcnRwOiBwYXJ0IDQgY2hhbm5lbCAwIHNpemUgMjA0OAorcnRwOiBwYXJ0IDQgY2hhbm5lbCAwIHNpemUgODUKK3J0cDogcGFydCA0IGNoYW5uZWwgMSBzaXplIDI0Cis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LVNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorcnRzcAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjU3MQorPC90b29sPgorCis8bmFtZT4KK1JUU1AgUlRQIEludGVybGVhdmluZyBUZXN0Cis8L25hbWU+Cis8Y29tbWFuZD4KK3J0c3A6Ly8lSE9TVElQOiVSVFNQUE9SVC81NzEgbG9nL3Byb3RvZmlsZS50eHQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCis8dmVyaWZ5PgorPHN0ZG91dD4KK1JUUDogbWVzc2FnZSBzaXplIDEwLCBjaGFubmVsIDEKK1JUUDogbWVzc2FnZSBzaXplIDUwMCwgY2hhbm5lbCAwCitSVFA6IG1lc3NhZ2Ugc2l6ZSAxOTYsIGNoYW5uZWwgMAorUlRQOiBtZXNzYWdlIHNpemUgMTI0LCBjaGFubmVsIDAKK1JUUDogbWVzc2FnZSBzaXplIDgyNCwgY2hhbm5lbCAwCitSVFA6IG1lc3NhZ2Ugc2l6ZSAxMCwgY2hhbm5lbCAxCitSVFA6IG1lc3NhZ2Ugc2l6ZSA1MCwgY2hhbm5lbCAwCitSVFA6IG1lc3NhZ2Ugc2l6ZSA3OTgsIGNoYW5uZWwgMAorUlRQOiBtZXNzYWdlIHNpemUgNDIsIGNoYW5uZWwgMAorUlRQOiBtZXNzYWdlIHNpemUgMzAsIGNoYW5uZWwgMQorUlRQOiBtZXNzYWdlIHNpemUgMjA0OCwgY2hhbm5lbCAwCitSVFA6IG1lc3NhZ2Ugc2l6ZSA4NSwgY2hhbm5lbCAwCitSVFA6IG1lc3NhZ2Ugc2l6ZSAyNCwgY2hhbm5lbCAxCis8L3N0ZG91dD4KKworPGZpbGUgbmFtZT0ibG9nL3Byb3RvZmlsZS50eHQiPgorJDk5Cis8L2ZpbGU+Cis8L3ZlcmlmeT4KKworPC90ZXN0Y2FzZT4KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTcyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTcyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYWU2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NzIKQEAgLTAsMCArMSwxMjIgQEAKKzx0ZXN0Y2FzZT4KKworI0luZm9ybWF0aW9uYWwKKzxpbmZvPgorPGtleXdvcmRzPgorUlRTUAorR0VUX1BBUkFNRVRFUgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGExPgorUlRTUC8xLjAgMjAwIE9LCitTZXJ2ZXI6IFJUU1BEL2xpYmN1cmwtdGVzdAorU2Vzc2lvbjogZ2V0cGFyYW1zLXRlc3QKK0NTZXE6IDEKKworPC9kYXRhMT4KKworPGRhdGEyPgorUlRTUC8xLjAgMjAwIE9LCitTZXJ2ZXI6IFJUU1BEL2xpYmN1cmwtdGVzdAorU2Vzc2lvbjogZ2V0cGFyYW1zLXRlc3QKK0NvbnRlbnQtVHlwZTogdGV4dC9wYXJhbWV0ZXJzCitDb250ZW50LUxlbmd0aDogMzIKK0NzZXE6IDIKKworc2NhbGU9ZW5vcm1vdXMKK3NwZWVkPWx1ZGljcm91cworCis8L2RhdGEyPgorCis8ZGF0YTM+CitSVFNQLzEuMCAyMDQgT0sKK1NlcnZlcjogUlRTUEQvbGliY3VybC10ZXN0CitTZXNzaW9uOiBnZXRwYXJhbXMtdGVzdAorQ3NlcTogMworCis8L2RhdGEzPgorCis8ZGF0YTQ+CitSVFNQLzEuMCAyMDAgT2tpZSBEb2tpZQorU2VydmVyOiBSVFNQRC9saWJjdXJsLXRlc3QKK1Nlc3Npb246IGdldHBhcmFtcy10ZXN0CitDc2VxOiA0CitDb250ZW50LUxlbmd0aDogMzcKKworcGFja2V0c19yZWNlaXZlZDogMTAwMAoraml0dGVyOiAwLjMxNAorPC9kYXRhND4KKzxkYXRhNT4KK1JUU1AvMS4wIDIwMCBPSworU2VydmVyOiBSVFNQRC9saWJjdXJsLXRlc3QKK1Nlc3Npb246IGdldHBhcmFtcy10ZXN0CitDU2VxOiA1CitDdXJsLXByaXZhdGU6IHN3c2Nsb3NlCitJbmZvcm1hdGlvbmFsOiBFbXB0eSBPcHRpb25zIFJlc3BvbnNlCisKKzwvZGF0YTU+Cis8L3JlcGx5PgorCisjIENsaWVudC1TaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3J0c3AKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1NzIKKzwvdG9vbD4KKworPG5hbWU+CitSVFNQIEdFVF9QQVJBTUVURVIgKFB1dC9IZWFydGJlYXQvUG9zdCkKKzwvbmFtZT4KKzxjb21tYW5kPgorcnRzcDovLyVIT1NUSVA6JVJUU1BQT1JULzU3MgorPC9jb21tYW5kPgorIyBmaWxlIHdyaXR0ZW4gYmVmb3JlIHRlc3QgY29tbWFuZCBydW5zCis8ZmlsZSBuYW1lPSJsb2cvZmlsZTU3Mi50eHQiPgorc2NhbGUKK3NwZWVkCis8L2ZpbGU+Cis8L2NsaWVudD4KKworPHZlcmlmeT4KKzxzdHJpcD4KK15JZi1Nb2RpZmllZC1TaW5jZTouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1NFVFVQIHJ0c3A6Ly8lSE9TVElQOiVSVFNQUE9SVC81NzIwMDAxIFJUU1AvMS4wDQorQ1NlcTogMQ0KK1RyYW5zcG9ydDogUGxhbmVzL1RyYWlucy9BdXRvbW9iaWxlcw0KKw0KK0dFVF9QQVJBTUVURVIgcnRzcDovLyVIT1NUSVA6JVJUU1BQT1JULzU3MjAwMDIgUlRTUC8xLjANCitDU2VxOiAyDQorU2Vzc2lvbjogZ2V0cGFyYW1zLXRlc3QNCitDb250ZW50LUxlbmd0aDogMTINCitDb250ZW50LVR5cGU6IHRleHQvcGFyYW1ldGVycw0KKw0KK3NjYWxlCitzcGVlZAorR0VUX1BBUkFNRVRFUiBydHNwOi8vJUhPU1RJUDolUlRTUFBPUlQvNTcyMDAwMyBSVFNQLzEuMA0KK0NTZXE6IDMNCitTZXNzaW9uOiBnZXRwYXJhbXMtdGVzdA0KKw0KK0dFVF9QQVJBTUVURVIgcnRzcDovLyVIT1NUSVA6JVJUU1BQT1JULzU3MjAwMDQgUlRTUC8xLjANCitDU2VxOiA0DQorU2Vzc2lvbjogZ2V0cGFyYW1zLXRlc3QNCitDb250ZW50LUxlbmd0aDogMjQNCitDb250ZW50LVR5cGU6IHRleHQvcGFyYW1ldGVycw0KKw0KK3BhY2tldHNfcmVjZWl2ZWQKK2ppdHRlcgorT1BUSU9OUyBydHNwOi8vJUhPU1RJUDolUlRTUFBPUlQvNTcyMDAwNSBSVFNQLzEuMA0KK0NTZXE6IDUNCitTZXNzaW9uOiBnZXRwYXJhbXMtdGVzdA0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKworPC90ZXN0Y2FzZT4KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTczIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTczCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZmY4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NzMKQEAgLTAsMCArMSw1NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCittdWx0aQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMYXN0LU1vZGlmaWVkOiBUdWUsIDEzIEp1biAyMDAwIDEyOjEwOjAwIEdNVAorRVRhZzogIjIxMDI1LWRjNy0zOTQ2MjQ5OCIKK0FjY2VwdC1SYW5nZXM6IGJ5dGVzCitDb250ZW50LUxlbmd0aDogNgorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworLWZvby0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTczCis8L3Rvb2w+CisKKyA8bmFtZT4KK3ZlcmlmeSBjb25uZWN0IHRpbWUgd2l0aCBtdWx0aSBpbnRlcmZhY2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTczCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvNTczIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NzQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NzQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhNDY1NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU3NApAQCAtMCwwICsxLDk4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorTElTVAorUkVUUgord2lsZGNhcmRtYXRjaAorZnRwbGlzdHBhcnNlcgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbW9kZT0idGV4dCI+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjU3NAorPC90b29sPgorPG5hbWU+CitGVFAgd2lsZGNhcmQgZG93bmxvYWQgLSBjaGFuZ2VkIGZubWF0Y2gsIDJ4IHBlcmZvcm0gKFVOSVggTElTVCByZXNwb25zZSkKKzwvbmFtZT4KKzxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9mdWxseV9zaW11bGF0ZWQvVU5JWC8qLnR4dAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+CiswCis8L2Vycm9yY29kZT4KKyMgVEhFUkUgU0hPVUxEIE5PVCBCRSAiU0laRSIhIGFuZCBvbmUgIlVTRVIvUEFTUyIKKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgZnVsbHlfc2ltdWxhdGVkDQorQ1dEIFVOSVgNCitFUFNWDQorVFlQRSBBDQorTElTVA0KK0VQU1YNCitUWVBFIEkNCitSRVRSIGNobW9kMQ0KK0VQU1YNCitSRVRSIGNobW9kMg0KK0VQU1YNCitSRVRSIGNobW9kMw0KK0VQU1YNCitSRVRSIGVtcHR5X2ZpbGUuZGF0DQorRVBTVg0KK1JFVFIgZmlsZS50eHQNCitFUFNWDQorUkVUUiBzb21lb3RoZXJ0ZXh0LnR4dA0KK0NXRCAvDQorQ1dEIGZ1bGx5X3NpbXVsYXRlZA0KK0NXRCBVTklYDQorRVBTVg0KK1RZUEUgQQ0KK0xJU1QNCitFUFNWDQorVFlQRSBJDQorUkVUUiBjaG1vZDENCitFUFNWDQorUkVUUiBjaG1vZDINCitFUFNWDQorUkVUUiBjaG1vZDMNCitFUFNWDQorUkVUUiBlbXB0eV9maWxlLmRhdA0KK0VQU1YNCitSRVRSIGZpbGUudHh0DQorRVBTVg0KK1JFVFIgc29tZW90aGVydGV4dC50eHQNCitRVUlUDQorPC9wcm90b2NvbD4KKzxzdGRvdXQgbW9kZT0idGV4dCI+CitUaGlzIGZpbGUgc2hvdWxkIGhhdmUgcGVybWlzc2lvbnMgNDQ0CitUaGlzIGZpbGUgc2hvdWxkIGhhdmUgcGVybWlzc2lvbnMgNjY2CitUaGlzIGZpbGUgc2hvdWxkIGhhdmUgcGVybWlzc2lvbnMgNzc3CitUaGlzIGlzIGNvbnRlbnQgb2YgZmlsZSAiZmlsZS50eHQiCitTb21lIGp1bmsgOy0pIFRoaXMgZmlsZSBkb2VzIG5vdCByZWFsbHkgZXhpc3QuCitUaGlzIGZpbGUgc2hvdWxkIGhhdmUgcGVybWlzc2lvbnMgNDQ0CitUaGlzIGZpbGUgc2hvdWxkIGhhdmUgcGVybWlzc2lvbnMgNjY2CitUaGlzIGZpbGUgc2hvdWxkIGhhdmUgcGVybWlzc2lvbnMgNzc3CitUaGlzIGlzIGNvbnRlbnQgb2YgZmlsZSAiZmlsZS50eHQiCitTb21lIGp1bmsgOy0pIFRoaXMgZmlsZSBkb2VzIG5vdCByZWFsbHkgZXhpc3QuCis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU3NSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU3NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjcwZTZiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTc1CkBAIC0wLDAgKzEsMTIxIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUkVUUgorbXVsdGkKK3dpbGRjYXJkbWF0Y2gKK2Z0cGxpc3RwYXJzZXIKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1NzUKKzwvdG9vbD4KKyA8bmFtZT4KK0ZUUCB3aWxkY2FyZCBkb3dubG9hZCAtIGR1cF9oYW5kbGUgYW5kIG11bHRpIGludGVyZmFjZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvZnVsbHlfc2ltdWxhdGVkL1VOSVgvKgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+CiswCis8L2Vycm9yY29kZT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgZnVsbHlfc2ltdWxhdGVkDQorQ1dEIFVOSVgNCitFUFNWDQorVFlQRSBBDQorTElTVA0KK0VQU1YNCitUWVBFIEkNCitSRVRSIGNobW9kMQ0KK0VQU1YNCitSRVRSIGNobW9kMg0KK0VQU1YNCitSRVRSIGNobW9kMw0KK0VQU1YNCitSRVRSIGVtcHR5X2ZpbGUuZGF0DQorRVBTVg0KK1JFVFIgZmlsZS50eHQNCitFUFNWDQorUkVUUiBzb21lb3RoZXJ0ZXh0LnR4dA0KK0NXRCAvDQorQ1dEIGZ1bGx5X3NpbXVsYXRlZA0KK0NXRCBVTklYDQorRVBTVg0KK1RZUEUgQQ0KK0xJU1QNCitFUFNWDQorVFlQRSBJDQorUkVUUiBjaG1vZDENCitFUFNWDQorUkVUUiBjaG1vZDINCitFUFNWDQorUkVUUiBjaG1vZDMNCitFUFNWDQorUkVUUiBlbXB0eV9maWxlLmRhdA0KK0VQU1YNCitSRVRSIGZpbGUudHh0DQorRVBTVg0KK1JFVFIgc29tZW90aGVydGV4dC50eHQNCitRVUlUDQorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBmdWxseV9zaW11bGF0ZWQNCitDV0QgVU5JWA0KK0VQU1YNCitUWVBFIEENCitMSVNUDQorRVBTVg0KK1RZUEUgSQ0KK1JFVFIgY2htb2QxDQorRVBTVg0KK1JFVFIgY2htb2QyDQorRVBTVg0KK1JFVFIgY2htb2QzDQorRVBTVg0KK1JFVFIgZW1wdHlfZmlsZS5kYXQNCitFUFNWDQorUkVUUiBmaWxlLnR4dA0KK0VQU1YNCitSRVRSIHNvbWVvdGhlcnRleHQudHh0DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8c3Rkb3V0IG1vZGU9InRleHQiPgorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDQ0NAorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDY2NgorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDc3NworVGhpcyBpcyBjb250ZW50IG9mIGZpbGUgImZpbGUudHh0IgorU29tZSBqdW5rIDstKSBUaGlzIGZpbGUgZG9lcyBub3QgcmVhbGx5IGV4aXN0LgorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDQ0NAorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDY2NgorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDc3NworVGhpcyBpcyBjb250ZW50IG9mIGZpbGUgImZpbGUudHh0IgorU29tZSBqdW5rIDstKSBUaGlzIGZpbGUgZG9lcyBub3QgcmVhbGx5IGV4aXN0LgorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDQ0NAorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDY2NgorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDc3NworVGhpcyBpcyBjb250ZW50IG9mIGZpbGUgImZpbGUudHh0IgorU29tZSBqdW5rIDstKSBUaGlzIGZpbGUgZG9lcyBub3QgcmVhbGx5IGV4aXN0LgorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NzYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NzYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0YjkwYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU3NgpAQCAtMCwwICsxLDE5MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK3dpbGRjYXJkbWF0Y2gKK2Z0cGxpc3RwYXJzZXIKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1NzYKKzwvdG9vbD4KKyA8bmFtZT4KK0ZUUCB3aWxkY2FyZCBkb3dubG9hZCAtIHNraXAvcGFyc2VyX2NvcnJlY3RuZXNzL0NVUkxPUFRfRk5NQVRDSF9GVU5DVElPTiAoVU5JWCkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL2Z1bGx5X3NpbXVsYXRlZC9VTklYLyoKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+CiswCis8L2Vycm9yY29kZT4KKzxzdGRvdXQgbW9kZT0idGV4dCI+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSZW1haW5zOiAgICAgIDE0CitGaWxlbmFtZTogICAgIC4KK1Blcm1pc3Npb25zOiAgcnd4cnd4cnd4IChwYXJzZWQgPT4gNzc3KQorU2l6ZTogICAgICAgICAyMDQ4MEIKK1VzZXI6ICAgICAgICAgZnRwLWRlZmF1bHQKK0dyb3VwOiAgICAgICAgZnRwLWRlZmF1bHQKK1RpbWU6ICAgICAgICAgQXByIDI3ICA1OjEyCitGaWxldHlwZTogICAgIGRpcmVjdG9yeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVtYWluczogICAgICAxMworRmlsZW5hbWU6ICAgICAuLgorUGVybWlzc2lvbnM6ICByd3hyd3hyd3ggKHBhcnNlZCA9PiA3NzcpCitTaXplOiAgICAgICAgIDIwNDgwQgorVXNlcjogICAgICAgICBmdHAtZGVmYXVsdAorR3JvdXA6ICAgICAgICBmdHAtZGVmYXVsdAorVGltZTogICAgICAgICBBcHIgMjMgIDM6MTIKK0ZpbGV0eXBlOiAgICAgZGlyZWN0b3J5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSZW1haW5zOiAgICAgIDEyCitGaWxlbmFtZTogICAgIGNobW9kMQorUGVybWlzc2lvbnM6ICByLS1yLS1yLS0gKHBhcnNlZCA9PiA0NDQpCitTaXplOiAgICAgICAgIDM4QgorVXNlcjogICAgICAgICBmdHAtZGVmYXVsdAorR3JvdXA6ICAgICAgICBmdHAtZGVmYXVsdAorVGltZTogICAgICAgICBKYW4gMTEgMTA6MDAKK0ZpbGV0eXBlOiAgICAgcmVndWxhciBmaWxlCitDb250ZW50OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDQ0NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVtYWluczogICAgICAxMQorRmlsZW5hbWU6ICAgICBjaG1vZDIKK1Blcm1pc3Npb25zOiAgcnctcnctcnctIChwYXJzZWQgPT4gNjY2KQorU2l6ZTogICAgICAgICAzOEIKK1VzZXI6ICAgICAgICAgZnRwLWRlZmF1bHQKK0dyb3VwOiAgICAgICAgZnRwLWRlZmF1bHQKK1RpbWU6ICAgICAgICAgRmViICAxICA4OjAwCitGaWxldHlwZTogICAgIHJlZ3VsYXIgZmlsZQorQ29udGVudDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgZmlsZSBzaG91bGQgaGF2ZSBwZXJtaXNzaW9ucyA2NjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbWFpbnM6ICAgICAgMTAKK0ZpbGVuYW1lOiAgICAgY2htb2QzCitQZXJtaXNzaW9uczogIHJ3eHJ3eHJ3eCAocGFyc2VkID0+IDc3NykKK1NpemU6ICAgICAgICAgMzhCCitVc2VyOiAgICAgICAgIGZ0cC1kZWZhdWx0CitHcm91cDogICAgICAgIGZ0cC1kZWZhdWx0CitUaW1lOiAgICAgICAgIEZlYiAgMSAgODowMAorRmlsZXR5cGU6ICAgICByZWd1bGFyIGZpbGUKK0NvbnRlbnQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGZpbGUgc2hvdWxkIGhhdmUgcGVybWlzc2lvbnMgNzc3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSZW1haW5zOiAgICAgIDkKK0ZpbGVuYW1lOiAgICAgY2htb2Q0CitQZXJtaXNzaW9uczogIC0tUy0tUy0tdCAocGFyc2VkID0+IDcwMDEpCitTaXplOiAgICAgICAgIDQwOTZCCitVc2VyOiAgICAgICAgIGZ0cC1kZWZhdWx0CitHcm91cDogICAgICAgIGZ0cC1kZWZhdWx0CitUaW1lOiAgICAgICAgIE1heSAgNCAgNDozMQorRmlsZXR5cGU6ICAgICBkaXJlY3RvcnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbWFpbnM6ICAgICAgOAorRmlsZW5hbWU6ICAgICBjaG1vZDUKK1Blcm1pc3Npb25zOiAgLS1zLS1zLS1UIChwYXJzZWQgPT4gNzExMCkKK1NpemU6ICAgICAgICAgNDA5NkIKK1VzZXI6ICAgICAgICAgZnRwLWRlZmF1bHQKK0dyb3VwOiAgICAgICAgZnRwLWRlZmF1bHQKK1RpbWU6ICAgICAgICAgTWF5ICA0ICA0OjMxCitGaWxldHlwZTogICAgIGRpcmVjdG9yeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVtYWluczogICAgICA3CitGaWxlbmFtZTogICAgIGVtcHR5X2ZpbGUuZGF0CitQZXJtaXNzaW9uczogIHJ3LXItLXItLSAocGFyc2VkID0+IDY0NCkKK1NpemU6ICAgICAgICAgMEIKK1VzZXI6ICAgICAgICAgZnRwLWRlZmF1bHQKK0dyb3VwOiAgICAgICAgZnRwLWRlZmF1bHQKK1RpbWU6ICAgICAgICAgQXByIDI3IDExOjAxCitGaWxldHlwZTogICAgIHJlZ3VsYXIgZmlsZQorQ29udGVudDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbWFpbnM6ICAgICAgNgorRmlsZW5hbWU6ICAgICBmaWxlLnR4dAorUGVybWlzc2lvbnM6ICBydy1yLS1yLS0gKHBhcnNlZCA9PiA2NDQpCitTaXplOiAgICAgICAgIDM1QgorVXNlcjogICAgICAgICBmdHAtZGVmYXVsdAorR3JvdXA6ICAgICAgICBmdHAtZGVmYXVsdAorVGltZTogICAgICAgICBBcHIgMjcgMTE6MDEKK0ZpbGV0eXBlOiAgICAgcmVndWxhciBmaWxlCitDb250ZW50OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBpcyBjb250ZW50IG9mIGZpbGUgImZpbGUudHh0IgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVtYWluczogICAgICA1CitGaWxlbmFtZTogICAgIGxpbmsKK1Blcm1pc3Npb25zOiAgcnd4cnd4cnd4IChwYXJzZWQgPT4gNzc3KQorU2l6ZTogICAgICAgICAwQgorVXNlcjogICAgICAgICBmdHAtZGVmYXVsdAorR3JvdXA6ICAgICAgICBmdHAtZGVmYXVsdAorVGltZTogICAgICAgICBKYW4gIDYgIDQ6NDIKK0ZpbGV0eXBlOiAgICAgc3ltbGluaworVGFyZ2V0OiAgICAgICBmaWxlLnR4dAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVtYWluczogICAgICA0CitGaWxlbmFtZTogICAgIGxpbmtfYWJzb2x1dGUKK1Blcm1pc3Npb25zOiAgcnd4cnd4cnd4IChwYXJzZWQgPT4gNzc3KQorU2l6ZTogICAgICAgICAwQgorVXNlcjogICAgICAgICBmdHAtZGVmYXVsdAorR3JvdXA6ICAgICAgICBmdHAtZGVmYXVsdAorVGltZTogICAgICAgICBKYW4gIDYgIDQ6NDUKK0ZpbGV0eXBlOiAgICAgc3ltbGluaworVGFyZ2V0OiAgICAgICAvZGF0YS9mdHAvZmlsZS50eHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbWFpbnM6ICAgICAgMworRmlsZW5hbWU6ICAgICAuTmVYVAorUGVybWlzc2lvbnM6ICByd3hyd3hyd3ggKHBhcnNlZCA9PiA3NzcpCitTaXplOiAgICAgICAgIDQwOTZCCitVc2VyOiAgICAgICAgIGZ0cC1kZWZhdWx0CitHcm91cDogICAgICAgIGZ0cC1kZWZhdWx0CitUaW1lOiAgICAgICAgIEphbiAyMyAgMjowNQorRmlsZXR5cGU6ICAgICBkaXJlY3RvcnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbWFpbnM6ICAgICAgMgorRmlsZW5hbWU6ICAgICBzb21lb3RoZXJ0ZXh0LnR4dAorUGVybWlzc2lvbnM6ICBydy1yLS1yLS0gKHBhcnNlZCA9PiA2NDQpCitTaXplOiAgICAgICAgIDQ3QgorVXNlcjogICAgICAgICBmdHAtZGVmYXVsdAorR3JvdXA6ICAgICAgICBmdHAtZGVmYXVsdAorVGltZTogICAgICAgICBBcHIgMjcgMTE6MDEKK0ZpbGV0eXBlOiAgICAgcmVndWxhciBmaWxlCitDb250ZW50OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUSElTIENPTlRFTlQgV0FTIFNLSVBQRUQgSU4gQ0hVTktfQkdOIENBTExCQUNLICMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbWFpbnM6ICAgICAgMQorRmlsZW5hbWU6ICAgICB3ZWlyZGRpci50eHQKK1Blcm1pc3Npb25zOiAgcnd4ci14cnd4IChwYXJzZWQgPT4gNzU3KQorU2l6ZTogICAgICAgICA0MDk2QgorVXNlcjogICAgICAgICBmdHAtZGVmYXVsdAorR3JvdXA6ICAgICAgICBmdHAtZGVmYXVsdAorVGltZTogICAgICAgICBBcHIgMjMgIDM6MTIKK0ZpbGV0eXBlOiAgICAgZGlyZWN0b3J5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU3OCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU3OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjZhNDM3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTc4CkBAIC0wLDAgKzEsNTIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQT1NUCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5IG5hbWU9IjEiPgorPGRhdGEgbW9kZT0idGV4dCI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCistZm9vLQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWI1NzgKKzwvdG9vbD4KKworIDxuYW1lPgorSFRUUCBQT1NUIGxvd2VyIHRoYW4gTUFYX0lOSVRJQUxfUE9TVF9TSVpFIHdpdGggcHJvZ3Jlc3MgY2FsbGJhY2sKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNTAwIGxvZy9pcDU3OAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGZpbGUgbmFtZT0ibG9nL2lwNTc4IiBtb2RlPSJ0ZXh0Ij4KK1BBU1NFRCwgVUwgZGF0YSBtYXRjaGVkIGRhdGEgc2l6ZQorPC9maWxlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTc5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTc5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmODc5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1NzkKQEAgLTAsMCArMSw4NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBPU1QKK0hUVFAgRGlnZXN0IGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDEwMCBDb250aW51ZQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMAorRGF0ZTogU3VuLCAwMyBBcHIgMjAwNSAxNDo1Nzo0NSBHTVQKK1gtUG93ZXJlZC1CeTogQVNQLk5FVAorCitIVFRQLzEuMSA0MDEgYXV0aGVudGljYXRpb24gcGxlYXNlIHN3c2JvdW5jZQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzYuMAorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NCIKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEKK0NvbnRlbnQtTGVuZ3RoOiAwCisKKzwvZGF0YT4KKzxkYXRhMT4KK0hUVFAvMS4xIDIwMCBBIE9LCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNi4wCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xCitDb250ZW50LUxlbmd0aDogMworCitvaworPC9kYXRhMT4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAxMDAgQ29udGludWUKK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjAKK0RhdGU6IFN1biwgMDMgQXByIDIwMDUgMTQ6NTc6NDUgR01UCitYLVBvd2VyZWQtQnk6IEFTUC5ORVQKKworSFRUUC8xLjEgNDAxIGF1dGhlbnRpY2F0aW9uIHBsZWFzZSBzd3Nib3VuY2UKK1NlcnZlcjogTWljcm9zb2Z0LUlJUy82LjAKK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0idGVzdHJlYWxtIiwgbm9uY2U9IjEwNTM2MDQxNDQiCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xCitDb250ZW50LUxlbmd0aDogMAorCitIVFRQLzEuMSAyMDAgQSBPSworU2VydmVyOiBNaWNyb3NvZnQtSUlTLzYuMAorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQorQ29udGVudC1MZW5ndGg6IDMKKworb2sKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWI1NzkKKzwvdG9vbD4KKworIDxuYW1lPgorc21hbGwgY2h1bmtlZCBIVFRQIFBPU1RzIHdpdGggZGlnZXN0IGF1dGguIGFuZCBwcm9ncmVzcyBjYWxsYmFjaworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC81NzkgbG9nL2lwNTc5Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZmlsZSBuYW1lPSJsb2cvaXA1NzkiIG1vZGU9InRleHQiPgorUHJvZ3Jlc3MgY2FsbGJhY2sgY2FsbGVkIHdpdGggVUwgMCBvdXQgb2YgMAorUHJvZ3Jlc3MgY2FsbGJhY2sgY2FsbGVkIHdpdGggVUwgMCBvdXQgb2YgLTEKK1Byb2dyZXNzIGNhbGxiYWNrIGNhbGxlZCB3aXRoIFVMIDggb3V0IG9mIC0xCitQcm9ncmVzcyBjYWxsYmFjayBjYWxsZWQgd2l0aCBVTCAxNiBvdXQgb2YgLTEKK1Byb2dyZXNzIGNhbGxiYWNrIGNhbGxlZCB3aXRoIFVMIDI2IG91dCBvZiAtMQorUHJvZ3Jlc3MgY2FsbGJhY2sgY2FsbGVkIHdpdGggVUwgNjEgb3V0IG9mIC0xCitQcm9ncmVzcyBjYWxsYmFjayBjYWxsZWQgd2l0aCBVTCA2NiBvdXQgb2YgLTEKKzwvZmlsZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkNTNmYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU4CkBAIC0wLDAgKzEsNTEgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQVVQKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4wIDIwMCBPSyBzd3NjbG9zZQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorCitibGFibGFibGEKKworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxuYW1lPgorSFRUUCBQVVQgZnJvbSBmaWxlIHdpdGggd2VpcmQgbGV0dGVycworPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvIC1UIGxvZy81OHRlW11zdC50eHQgLWcKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy81OHRlW11zdC50eHQiPgorYSBmZXcgYnl0ZXMKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorUFVUIC93ZS93YW50LzU4dGUlNUIlNURzdC50eHQgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDEyDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCithIGZldyBieXRlcworPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU4MCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU4MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU2ZjBlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTgwCkBAIC0wLDAgKzEsNTggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK211bHRpCitEdXBsaWNhdGUtaGVhZGVyCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDMwMiBlYXQgdGhpcyEKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xvY2F0aW9uOiB0aGlzLWlzLXRoZS1maXJzdC5odG1sCitDb250ZW50LUxlbmd0aDogMAorQ29ubmVjdGlvbjogY2xvc2UKK0xvY2F0aW9uOiBhbmQgdGhlcmUncyBhIHNlY29uZCBvbmUgdG9vISAvIG1vby5odG1sCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitodHRwCis8L2ZlYXR1cmVzPgorIyB0b29sIGlzIHdoYXQgdG8gdXNlIGluc3RlYWQgb2YgJ2N1cmwnCis8dG9vbD4KK2xpYjUwNworPC90b29sPgorCisgPG5hbWU+CittdWx0aSBpbnRlcmZhY2UsIG11bHRpcGxlIExvY2F0aW9uOiBoZWFkZXJzCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzU4MAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzU4MCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTgxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTgxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYWE0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1ODEKQEAgLTAsMCArMSw1OCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorbXVsdGkKK0R1cGxpY2F0ZS1oZWFkZXIKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIGFsbCBnb29kIQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0NvbnRlbnQtTGVuZ3RoOiAwCitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiBjaGFuZ2VkL215L21pbmQKKworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2h0dHAKKzwvZmVhdHVyZXM+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTA3Cis8L3Rvb2w+CisKKyA8bmFtZT4KK211bHRpIGludGVyZmFjZSwgbXVsdGlwbGUgQ29udGVudC1UeXBlOiBoZWFkZXJzCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzU4MQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzU4MSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTgyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTgyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ODFhODcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1ODIKQEAgLTAsMCArMSw0NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTRlRQCittdWx0aQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NmdHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1ODIKKzwvdG9vbD4KKyA8bmFtZT4KK1NGVFAgdXBsb2FkIHVzaW5nIG11bHRpIGludGVyZmFjZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK1NmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvdXBsb2FkNTgyLnR4dCAlUFdEL2xvZy9maWxlNTgyLnR4dCAlVVNFUjoKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9maWxlNTgyLnR4dCI+CitNb29vb29vb29vb29vCisgdXBsb2FkIHRoaXMKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KKzwvc3RyaXA+Cis8cHJvdG9jb2w+Cis8L3Byb3RvY29sPgorPGZpbGUgbmFtZT0ibG9nL2ZpbGU1ODIudHh0Ij4KK01vb29vb29vb29vb28KKyB1cGxvYWQgdGhpcworPC9maWxlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTgzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmY2E3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1ODMKQEAgLTAsMCArMSw0MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTRlRQCittdWx0aQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NmdHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1ODMKKzwvdG9vbD4KKyA8bmFtZT4KK1NGVFAgd2l0aCBtdWx0aSBpbnRlcmZhY2UsIHJlbW92ZSBoYW5kbGUgZWFybHkKKyA8L25hbWU+CisKKyMgVGhlIGNvbW1hbmQgaGVyZSB1c2VzICdsb2NhbGhvc3QnIGp1c3QgdG8gbWFrZSBzdXJlIHRoYXQgY3VybF9tdWx0aV9wZXJmb3JtCisjIHdvbid0IHJlYWNoIHRvbyBmYXIgaW4gdGhlIGZpcnN0IGludm9rZS4gV2hlbiB1c2luZyBjLWFyZXMgYXQgbGVhc3QsIHRoZQorIyBuYW1lIHJlc29sdmUgd2lsbCBjYXVzZSBpdCB0byByZXR1cm4gcmF0aGVyIHF1aWNrbHkgYW5kIHRodXMgd2UgY291bGQgdHJpZ2dlcgorIyB0aGUgcHJvYmxlbSB3ZSdyZSBsb29raW5nIHRvIHZlcmlmeS4KKyA8Y29tbWFuZD4KK3NmdHA6Ly9sb2NhbGhvc3Q6JVNTSFBPUlQlUFdEL2xvZy91cGxvYWQ1ODMudHh0ICVVU0VSOgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzAKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTg0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTg0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZDZhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1ODQKQEAgLTAsMCArMSwxMDIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorUGlwZWxpbmluZworbXVsdGkKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKyMgU2lsbHkgZGl2aXNpb24gb2YgdGhlIGZpcnN0IHJlcXVlc3QgaXMgc29sZWx5IHRvIGFwcGVhc2UgdGhlIHNlcnZlciB3aGljaCBleHBlY3RzIG5fZGF0YV9pdGVtcyA9PSBuX3JlcXVlc3RzCis8cmVwbHk+Cis8ZGF0YTE+CitIVFRQLzEuMSAyMDAgT0sKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDQKKworNTg0Cis8L2RhdGExPgorPGRhdGEyPgorSFRUUC8xLjEgMjAwIE9LCis8L2RhdGEyPgorPGRhdGEzPgorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCis8L2RhdGEzPgorPGRhdGE0PgorQ29udGVudC1MZW5ndGg6IDAKKworSFRUUC8xLjEgMjAwIE9LCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA1CisKKzU4NQorCitIVFRQLzEuMSAyMDAgT0sKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1MZW5ndGg6IDQKKworNTg2Cis8L2RhdGE0PgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzx0b29sPgorbGliNTMwCis8L3Rvb2w+CisgPG5hbWU+CitIVFRQIEdFVCB1c2luZyBwaXBlbGluaW5nIChub256ZXJvIGxlbmd0aCBhZnRlciB6ZXJvIGxlbmd0aCkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvcGF0aC81ODQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK0dFVCAvcGF0aC81ODQwMDAxIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvcGF0aC81ODQwMDAyIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvcGF0aC81ODQwMDAzIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvcGF0aC81ODQwMDA0IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8c3Rkb3V0PgorSFRUUC8xLjEgMjAwIE9LCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA0CisKKzU4NAorSFRUUC8xLjEgMjAwIE9LCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiAwCisKK0hUVFAvMS4xIDIwMCBPSworU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogNQorCis1ODUKKworSFRUUC8xLjEgMjAwIE9LCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtTGVuZ3RoOiA0CisKKzU4NgorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1ODUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1ODUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjYjA2ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU4NQpAQCAtMCwwICsxLDY5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCittdWx0aQorQ1VSTE9QVF9PUEVOU09DS0VURlVOQ1RJT04KK0NVUkxPUFRfQ0xPU0VTT0NLRVRGVU5DVElPTgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAzMDIgZWF0IHRoaXMhCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMb2NhdGlvbjogdGhpcy1pcy10aGUtZmlyc3QuaHRtbAorQ29udGVudC1MZW5ndGg6IDAKK0Nvbm5lY3Rpb246IGNsb3NlCisKKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitbT1BFTl0gY291bnRlcjogMQorSFRUUC8xLjEgMzAyIGVhdCB0aGlzIQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTG9jYXRpb246IHRoaXMtaXMtdGhlLWZpcnN0Lmh0bWwKK0NvbnRlbnQtTGVuZ3RoOiAwCitDb25uZWN0aW9uOiBjbG9zZQorCitbQ0xPU0VdIGNvdW50ZXI6IDEKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2h0dHAKKzwvZmVhdHVyZXM+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTg1Cis8L3Rvb2w+CisKKyA8bmFtZT4KK3NvY2tldCBvcGVuL2Nsb3NlIGNhbGxiYWNrcworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC81ODUKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC81ODUgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU4NiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU4NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDg1N2JkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTg2CkBAIC0wLDAgKzEsNTkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitDVVJMT1BUX1BPUlQKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2xpbmUgMQorbGluZSAyCitsYXN0IGxpbmUKKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitbT1BFTl0gY291bnRlcjogMQorW09QRU5dIGNvdW50ZXI6IDIKK2xpbmUgMQorbGluZSAyCitsYXN0IGxpbmUKK1tDTE9TRV0gY291bnRlcjogMgorW0NMT1NFXSBjb3VudGVyOiAxCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKzx0b29sPgorbGliNTg1Cis8L3Rvb2w+CisgPG5hbWU+CitGVFAgYW5kIG9wZW4vY2xvc2Ugc29ja2V0IGNhbGxiYWNrcworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvNTg2Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgSQ0KK1NJWkUgNTg2DQorUkVUUiA1ODYNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU4NyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU4NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTEyMzlhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTg3CkBAIC0wLDAgKzEsNTEgQEAKKzx0ZXN0Y2FzZT4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWI1ODcKKzwvdG9vbD4KKworIDxuYW1lPgorSFRUUCBtdWx0aS1wYXJ0IGZvcm1wb3N0IHdpdGggYWJvcnRlZCByZWFkIGNhbGxiYWNrCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzU4NworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwcGFydD4KK3MvXi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVthLXowLTldKi8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vCitzL2JvdW5kYXJ5PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bYS16MC05XSovYm91bmRhcnk9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8KKzwvc3RyaXBwYXJ0PgorPHByb3RvY29sPgorUE9TVCAvNTg3IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiA3MzINCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ic2VuZGZpbGUiOyBmaWxlbmFtZT0icG9zdGl0Mi5jIg0KKw0KKzwvcHJvdG9jb2w+CisjIENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0sgKDQyKQorPGVycm9yY29kZT4KKzQyCis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU4OCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU4OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTE1YjUyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTg4CkBAIC0wLDAgKzEsNjkgQEAKKyMKKyMgVGhpcyB0ZXN0IGlzIGV4YWN0bHkgbGlrZSA1MjUgYnV0IHRoZSBzZXJ2ZXIgcmVqZWN0cyB0aGUgRVBSVCBjb21tYW5kLgorIyBXcml0dGVuIHVwIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgbXVsdGkgaW50ZXJmYWNlCisjIGFjdGl2ZSBjb25uZWN0aW9uIGNhc2UgdGhhdCBkaWZmZXJzIGJldHdlZW4gUE9SVCBhbmQgRVBSVCB1c2UKKyMKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQT1JUCitTVE9SCittdWx0aQorRVBSVCByZWZ1c2VkCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KKzwvZGF0YT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBFUFJUIDUwMCB3ZSBkb24ndCBsaWtlIEVQUlQgbm93Cis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKzx0b29sPgorbGliNTI1Cis8L3Rvb2w+CisgPG5hbWU+CitGVFAgUE9SVCB1cGxvYWQgdXNpbmcgbXVsdGkgaW50ZXJmYWNlLCBFUFJUIGRvZXNuJ3Qgd29yaworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvcGF0aC81ODggbG9nL3VwbG9hZDU4OAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3VwbG9hZDU4OCI+CitNb29vb29vb29vb29vCisgdXBsb2FkIHRoaXMKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKyMgU3RyaXAgb2ZmIHBhcnRzIG9mIHRoZSBQT1JUIGFuZCBFUFJUIGNvbW1hbmRzIHRoYXQgbWlnaHQgZGlmZmVyCis8c3RyaXBwYXJ0Pgorcy9eUE9SVCAoLiopL1BPUlQvCitzL15FUFJUIFx8MVx8KC4qKS9FUFJUIFx8MVx8LworPC9zdHJpcHBhcnQ+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorQ1dEIHBhdGgNCitFUFJUIHwxfAorUE9SVAorVFlQRSBJDQorU1RPUiA1ODgNCitRVUlUDQorPC9wcm90b2NvbD4KKzx1cGxvYWQ+CitNb29vb29vb29vb29vCisgdXBsb2FkIHRoaXMKKzwvdXBsb2FkPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTI0NjUwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTkKQEAgLTAsMCArMSw0NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseSBuYW1lPSIxIj4KKzxkYXRhPgorSFRUUC8xLjAgMjAwIE9LIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCisKK2hlaiAKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFVSTCB3aXRoIHNsYXNoIGJ1dCB3aXRoICJwYXJhbWV0ZXIiCisgPC9uYW1lPgorIDxjb21tYW5kPgorImh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVD9tb29vLzU5IgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLz9tb29vLzU5IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1OTAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUwNjY0ZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU5MApAQCAtMCwwICsxLDEyMyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBPU1QKK1BPU1QgY2FsbGJhY2sKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgTlRMTSBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorCis8ZGF0YT4KK0hUVFAvMS4xIDQwNyBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTmVnb3RpYXRlDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorVGhpcyBpcyBub3QgdGhlIHJlYWwgcGFnZQorPC9kYXRhPgorCisjIHRoaXMgaXMgcmV0dXJuZWQgZmlyc3Qgc2luY2Ugd2UgZ2V0IG5vIHByb3h5LWF1dGgKKzxkYXRhMTAwMT4KK0hUVFAvMS4xIDQwNyBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHRvIHByb3h5IG1lIG15IGRlYXINCitQcm94eS1BdXRoZW50aWNhdGU6IE5UTE0gVGxSTVRWTlRVQUFDQUFBQUFnQUNBREFBQUFBR2dvRUFjNTFBWVZEZ3lOY0FBQUFBQUFBQUFHNEFiZ0F5QUFBQVEwTUNBQVFBUXdCREFBRUFFZ0JGQUV3QVNRQlRBRUVBUWdCRkFGUUFTQUFFQUJnQVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQXdBc0FHVUFiQUJwQUhNQVlRQmlBR1VBZEFCb0FDNEFZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUFBQUFBQT09DQorQ29udGVudC1MZW5ndGg6IDM0DQorDQorSGV5IHlvdSwgYXV0aGVudGljYXRlIG9yIGdvIGF3YXkhCis8L2RhdGExMDAxPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgdGhlIHNlY29uZAorIyBBdXRob3JpemF0aW9uOiBOVExNIGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAyPgorSFRUUC8xLjEgMjAwIFRoaW5ncyBhcmUgZmluZSBpbiBwcm94eSBsYW5kIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogNDINCisNCitDb250ZW50cyBvZiB0aGF0IHBhZ2UgeW91IHJlcXVlc3RlZCwgc2lyLgorPC9kYXRhMTAwMj4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwNyBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTmVnb3RpYXRlDQorUHJveHktQXV0aGVudGljYXRlOiBOVExNDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhcg0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCitDb250ZW50LUxlbmd0aDogMzQNCisNCitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHByb3h5IGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiA0Mg0KKw0KK0NvbnRlbnRzIG9mIHRoYXQgcGFnZSB5b3UgcmVxdWVzdGVkLCBzaXIuCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgdG8gdXNlCis8dG9vbD4KK2xpYjU5MAorPC90b29sPgorPGZlYXR1cmVzPgorTlRMTQorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0hUVFAgcHJveHkgb2ZmZXJzIE5lZ290aWF0ZStOVExNLCB1c2Ugb25seSBOVExNCisgPC9uYW1lPgorIDxzZXRlbnY+CisjIHdlIGZvcmNlIG91ciBvd24gaG9zdCBuYW1lLCBpbiBvcmRlciB0byBtYWtlIHRoZSB0ZXN0IG1hY2hpbmUgaW5kZXBlbmRlbnQKK0NVUkxfR0VUSE9TVE5BTUU9Y3VybGhvc3QKKyMgd2UgdHJ5IHRvIHVzZSB0aGUgTERfUFJFTE9BRCBoYWNrLCBpZiBub3QgYSBkZWJ1ZyBidWlsZAorTERfUFJFTE9BRD0lUFdEL2xpYnRlc3QvLmxpYnMvbGliaG9zdG5hbWUuc28KKyA8L3NldGVudj4KKyA8Y29tbWFuZD4KK2h0dHA6Ly90ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS9wYXRoLzU5MCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQKKzwvY29tbWFuZD4KKzxwcmVjaGVjaz4KK2Noa2hvc3RuYW1lIGN1cmxob3N0Cis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6IGN1cmwvLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgaHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tL3BhdGgvNTkwIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEzLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEzLjItQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMw0KK0hvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorR0VUIGh0dHA6Ly90ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS9wYXRoLzU5MCBIVFRQLzEuMQ0KK1Byb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTMuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTMuMi1DVlMgT3BlblNTTC8wLjkuN2UgemxpYi8xLjIuMiBsaWJpZG4vMC41LjEzDQorSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20NCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitHRVQgaHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tL3BhdGgvNTkwIEhUVFAvMS4xDQorUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQURBQUFBR0FBWUFFQUFBQUFZQUJnQVdBQUFBQUFBQUFCd0FBQUFBZ0FDQUhBQUFBQUlBQWdBY2dBQUFBQUFBQUFBQUFBQUJvS0JBQVF0MUtXNUNnRzRZZFdXY2ZYeWZYQnoxWk1DellwMzd4WWpCaUFpem13NThPNmVRUzd5UjY2ZXFZR1dlU3dsOVcxbFkzVnliR2h2YzNRPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCitIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1OTEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1OTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0YWU1YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU5MQpAQCAtMCwwICsxLDcyIEBACisjCisjIEZvciB0aGlzIHRlc3QgdGhlIHNlcnZlciByZWplY3RzIHRoZSBFUFJUIGNvbW1hbmQsCisjIGNvZGUgaW4gbGliNTkxIG1ha2VzIHVzZSBvZiBjdXJsX211bHRpX3RpbWVvdXQoKQorIyBhbmQgc2VydmVyIGRvZXMgbm90IGVzdGFibGlzaCBkYXRhIGNvbm5lY3Rpb24uCisjCis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUE9SVAorU1RPUgorbXVsdGkKK0VQUlQgcmVmdXNlZAorTk9EQVRBQ09OTjQyNQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8c2VydmVyY21kPgorTk9EQVRBQ09OTjQyNQorUkVQTFkgRVBSVCA1MDAgd2UgZG9uJ3QgbGlrZSBFUFJUIG5vdworPC9zZXJ2ZXJjbWQ+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjU5MQorPC90b29sPgorIDxuYW1lPgorRlRQIG11bHRpIFBPUlQgYW5kIDQyNSBvbiB1cGxvYWQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL3BhdGgvNTkxICVGVFBUSU1FMiBsb2cvdXBsb2FkNTkxCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdXBsb2FkNTkxIj4KK01vb29vb29vb29vb28gZm9yIDU5MQorIHVwbG9hZCB0aGlzCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIFN0cmlwIG9mZiBwYXJ0cyBvZiB0aGUgUE9SVCBhbmQgRVBSVCBjb21tYW5kcyB0aGF0IG1pZ2h0IGRpZmZlcgorPHN0cmlwcGFydD4KK3MvXlBPUlQgKC4qKS9QT1JULworcy9eRVBSVCBcfDFcfCguKikvRVBSVCBcfDFcfC8KKzwvc3RyaXBwYXJ0PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBwYXRoDQorRVBSVCB8MXwKK1BPUlQKK1RZUEUgSQ0KK1NUT1IgNTkxDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorMTAKKzwvZXJyb3Jjb2RlPgorPHVwbG9hZD4KKzwvdXBsb2FkPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTkyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTkyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NzI5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1OTIKQEAgLTAsMCArMSw3MiBAQAorIworIyBGb3IgdGhpcyB0ZXN0IHRoZSBzZXJ2ZXIgcmVqZWN0cyB0aGUgRVBSVCBjb21tYW5kLAorIyBjb2RlIGluIGxpYjU5MSBtYWtlcyB1c2Ugb2YgY3VybF9tdWx0aV90aW1lb3V0KCkKKyMgYW5kIHNlcnZlciBkb2VzIG5vdCBlc3RhYmxpc2ggZGF0YSBjb25uZWN0aW9uLgorIworPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BPUlQKK1NUT1IKK211bHRpCitFUFJUIHJlZnVzZWQKK05PREFUQUNPTk40MjEKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPHNlcnZlcmNtZD4KK05PREFUQUNPTk40MjEKK1JFUExZIEVQUlQgNTAwIHdlIGRvbid0IGxpa2UgRVBSVCBub3cKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1OTEKKzwvdG9vbD4KKyA8bmFtZT4KK0ZUUCBtdWx0aSBQT1JUIGFuZCA0MjEgb24gdXBsb2FkCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9wYXRoLzU5MiAlRlRQVElNRTIgbG9nL3VwbG9hZDU5MgorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3VwbG9hZDU5MiI+CitNb29vb29vb29vb29vIGZvciA1OTIKKyB1cGxvYWQgdGhpcworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyBTdHJpcCBvZmYgcGFydHMgb2YgdGhlIFBPUlQgYW5kIEVQUlQgY29tbWFuZHMgdGhhdCBtaWdodCBkaWZmZXIKKzxzdHJpcHBhcnQ+CitzL15QT1JUICguKikvUE9SVC8KK3MvXkVQUlQgXHwxXHwoLiopL0VQUlQgXHwxXHwvCis8L3N0cmlwcGFydD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgcGF0aA0KK0VQUlQgfDF8CitQT1JUCitUWVBFIEkNCitTVE9SIDU5Mg0KK1FVSVQNCis8L3Byb3RvY29sPgorPGVycm9yY29kZT4KKzEwCis8L2Vycm9yY29kZT4KKzx1cGxvYWQ+Cis8L3VwbG9hZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU5MyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU5MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2IxZjkxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTkzCkBAIC0wLDAgKzEsNzIgQEAKKyMKKyMgRm9yIHRoaXMgdGVzdCB0aGUgc2VydmVyIHJlamVjdHMgdGhlIEVQUlQgY29tbWFuZCwKKyMgY29kZSBpbiBsaWI1OTEgbWFrZXMgdXNlIG9mIGN1cmxfbXVsdGlfdGltZW91dCgpCisjIGFuZCBzZXJ2ZXIgZG9lcyBub3QgZXN0YWJsaXNoIGRhdGEgY29ubmVjdGlvbi4KKyMKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQT1JUCitTVE9SCittdWx0aQorRVBSVCByZWZ1c2VkCitOT0RBVEFDT05OMTUwCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KKzwvZGF0YT4KKzxzZXJ2ZXJjbWQ+CitOT0RBVEFDT05OMTUwCitSRVBMWSBFUFJUIDUwMCB3ZSBkb24ndCBsaWtlIEVQUlQgbm93Cis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorZnRwCis8L3NlcnZlcj4KKzx0b29sPgorbGliNTkxCis8L3Rvb2w+CisgPG5hbWU+CitGVFAgbXVsdGkgUE9SVCB1cGxvYWQsIG5vIGRhdGEgY29ubiBhbmQgbm8gdHJhbnNpZW50IG5lZy4gcmVwbHkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVGVFBQT1JUL3BhdGgvNTkzICVGVFBUSU1FMiBsb2cvdXBsb2FkNTkzCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvdXBsb2FkNTkzIj4KK01vb29vb29vb29vb28gZm9yIDU5MworIHVwbG9hZCB0aGlzCis8L2ZpbGU+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIFN0cmlwIG9mZiBwYXJ0cyBvZiB0aGUgUE9SVCBhbmQgRVBSVCBjb21tYW5kcyB0aGF0IG1pZ2h0IGRpZmZlcgorPHN0cmlwcGFydD4KK3MvXlBPUlQgKC4qKS9QT1JULworcy9eRVBSVCBcfDFcfCguKikvRVBSVCBcfDFcfC8KKzwvc3RyaXBwYXJ0PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0NXRCBwYXRoDQorRVBSVCB8MXwKK1BPUlQKK1RZUEUgSQ0KK1NUT1IgNTkzDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorMTIKKzwvZXJyb3Jjb2RlPgorPHVwbG9hZD4KKzwvdXBsb2FkPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTk0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTk0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjU4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1OTQKQEAgLTAsMCArMSw3MiBAQAorIworIyBGb3IgdGhpcyB0ZXN0IHRoZSBzZXJ2ZXIgcmVqZWN0cyB0aGUgRVBSVCBjb21tYW5kLAorIyBjb2RlIGluIGxpYjU5MSBtYWtlcyB1c2Ugb2YgY3VybF9tdWx0aV90aW1lb3V0KCkKKyMgYW5kIHNlcnZlciBkb2VzIG5vdCBlc3RhYmxpc2ggZGF0YSBjb25uZWN0aW9uLgorIworPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK1BPUlQKK1NUT1IKK211bHRpCitFUFJUIHJlZnVzZWQKK05PREFUQUNPTk4KKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPHNlcnZlcmNtZD4KK05PREFUQUNPTk4KK1JFUExZIEVQUlQgNTAwIHdlIGRvbid0IGxpa2UgRVBSVCBub3cKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1OTEKKzwvdG9vbD4KKyA8bmFtZT4KK0ZUUCBtdWx0aSBQT1JUIHVwbG9hZCwgbm8gZGF0YSBjb25uIGFuZCBubyBwb3NpdGl2ZSBwcmVsaW0uIHJlcGx5CisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC9wYXRoLzU5NCAlRlRQVElNRTIgbG9nL3VwbG9hZDU5NAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3VwbG9hZDU5NCI+CitNb29vb29vb29vb29vIGZvciA1OTQKKyB1cGxvYWQgdGhpcworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyBTdHJpcCBvZmYgcGFydHMgb2YgdGhlIFBPUlQgYW5kIEVQUlQgY29tbWFuZHMgdGhhdCBtaWdodCBkaWZmZXIKKzxzdHJpcHBhcnQ+CitzL15QT1JUICguKikvUE9SVC8KK3MvXkVQUlQgXHwxXHwoLiopL0VQUlQgXHwxXHwvCis8L3N0cmlwcGFydD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitDV0QgcGF0aA0KK0VQUlQgfDF8CitQT1JUCitUWVBFIEkNCitTVE9SIDU5NA0KK1FVSVQNCis8L3Byb3RvY29sPgorPGVycm9yY29kZT4KKzI4Cis8L2Vycm9yY29kZT4KKzx1cGxvYWQ+Cis8L3VwbG9hZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU5NSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU5NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGZmOWMxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTk1CkBAIC0wLDAgKzEsNTcgQEAKKyMKKyMgVGhpcyB0ZXN0IGlzIGxpa2UgNTg1IGJ1dCB1c2VzIHBhc3NpdmUgRlRQIGluc3RlYWQgb2YgSFRUUAorIworPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK21vbworPC9kYXRhPgorPGRhdGFjaGVjaz4KK1tPUEVOXSBjb3VudGVyOiAxCitbT1BFTl0gY291bnRlcjogMgorbW9vCitbQ0xPU0VdIGNvdW50ZXI6IDIKK1tDTE9TRV0gY291bnRlcjogMQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTg1Cis8L3Rvb2w+CisKKyA8bmFtZT4KK3ZlcmlmeSBjbG9zZSBjYWxsYmFja3Mgd2l0aCBwYXNzaXZlIEZUUAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQvNTk1IGxvZy9pcDU5NQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK0VQU1YNCitUWVBFIEkNCitTSVpFIDU5NQ0KK1JFVFIgNTk1DQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1OTYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1OTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1ZGVmNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDU5NgpAQCAtMCwwICsxLDYwIEBACisjCisjIFRoaXMgdGVzdCBpcyBsaWtlIDU4NSBidXQgdXNlcyBhY3RpdmUgRlRQIGluc3RlYWQgb2YgSFRUUAorIworPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK21vbworPC9kYXRhPgorPGRhdGFjaGVjaz4KK1tPUEVOXSBjb3VudGVyOiAxCitbT1BFTl0gY291bnRlcjogMgorW0NMT1NFXSBjb3VudGVyOiAyCittb28KK1tDTE9TRV0gY291bnRlcjogMQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTg1Cis8L3Rvb2w+CisKKyA8bmFtZT4KK3ZlcmlmeSBjbG9zZSBjYWxsYmFja3Mgd2l0aCBhY3RpdmUgRlRQCisgPC9uYW1lPgorIDxjb21tYW5kPgorZnRwOi8vJUhPU1RJUDolRlRQUE9SVC81OTYgbG9nL2lwNTk2IGFjdGl2ZWZ0cAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwcGFydD4KK3MvXihFUFJUIFx8MVx8KSguKikvJDEvCis8L3N0cmlwcGFydD4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFJUIHwxfAorVFlQRSBJDQorU0laRSA1OTYNCitSRVRSIDU5Ng0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTk3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTk3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OGJiNjQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1OTcKQEAgLTAsMCArMSwzNyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitGVFAKK0NPTk5FQ1RfT05MWQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKKzwvc2VydmVyPgorPHRvb2w+CitsaWI1OTcKKzwvdG9vbD4KKyA8bmFtZT4KK0ZUUCBjb25uZWN0IG9ubHkgb3B0aW9uCisgPC9uYW1lPgorCis8Y29tbWFuZD4KK2Z0cDovLyVIT1NUSVA6JUZUUFBPUlQKKzwvY29tbWFuZD4KKworPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiBhbm9ueW1vdXMNCitQQVNTIGZ0cEBleGFtcGxlLmNvbQ0KK1BXRA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTk4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NTk4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyM2JiYzMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q1OTgKQEAgLTAsMCArMSw3OCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorQ1VSTE9QVF9SRUZFUkVSCitjdXJsX2Vhc3lfcmVzZXQKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBtb2RlPSJ0ZXh0Ij4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworLWZvby0KKzwvZGF0YT4KKworIyBzaW5jZSB0aGUgcmVxdWVzdCBydW5zIHR3aWNlCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCistZm9vLQorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCistZm9vLQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisjIHRvb2wgaXMgd2hhdCB0byB1c2UgaW5zdGVhZCBvZiAnY3VybCcKKzx0b29sPgorbGliNTk4Cis8L3Rvb2w+CisKKyA8bmFtZT4KK2N1cmxfZWFzeV9yZXNldCB3aXRoIHJlZmVyZXIgYW5kIG90aGVyIHN0cmluZ3Mgc2V0CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzU5OAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorR0VUIC81OTggSFRUUC8xLjENCitVc2VyLUFnZW50OiB0aGUtbW9vIGFnZW50IG5leHQgZ2VuZXJhdGlvbg0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitSZWZlcmVyOiBodHRwOi8vZXhhbXBsZS5jb20vdGhlLW1vbw0KK0Nvb2tpZTogbmFtZT1tb28NCisNCitHRVQgLzU5OCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3ZGM5YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYKQEAgLTAsMCArMSw0OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBzZXQgY29va2llCitjb29raWVzCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKK3N3c2Nsb3NlOiBib29vCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggc2ltcGxlIGNvb2tpZSBzZW5kCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvdGhhdC9wYWdlLzYgLWIgIm5hbWU9Y29udGVudHM7bmFtZTI9Y29udGVudDIiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2Uvd2FudC90aGF0L3BhZ2UvNiBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb29raWU6IG5hbWU9Y29udGVudHM7bmFtZTI9Y29udGVudDINCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjllZWVlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjAKQEAgLTAsMCArMSw1NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBVVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMCAyMDAgT0sgc3dzY2xvc2UNCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVA0KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQ0KKw0KK2JsYWJsYWJsYQorCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPG5hbWU+CitIVFRQIFBVVCBmcm9tIHN0ZGluIHdpdGggd3JvbmcgY29udGVudC1sZW5ndGgKKzwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC9ienovNjAgLVQgLSAtSCAiQ29udGVudC1MZW5ndGg6IDEiCis8L2NvbW1hbmQ+Cis8c3RkaW4+Cittb3JlIHRoYW4gb25lIGJ5dGUKKzwvc3RkaW4+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK1BVVCAvYnp6LzYwIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkDQorQ29udGVudC1MZW5ndGg6IDENCitFeHBlY3Q6IDEwMC1jb250aW51ZQ0KKw0KKzEzDQorbW9yZSB0aGFuIG9uZSBieXRlCisNCiswDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYwMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjNmNjAxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjAwCkBAIC0wLDAgKzEsNDIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0ZUUAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitUZXN0IGRhdGEKK2ZvciBzc2ggdGVzdAorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NGVFAgcmV0cmlldmFsCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvZmlsZTYwMC50eHQgLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL2ZpbGU2MDAudHh0Ij4KK1Rlc3QgZGF0YQorZm9yIHNzaCB0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjAxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNzY1YTgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MDEKQEAgLTAsMCArMSw0MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTQ1AKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorVGVzdCBkYXRhCitmb3Igc3NoIHRlc3QKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2NwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NDUCByZXRyaWV2YWwKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWtleSBjdXJsX2NsaWVudF9rZXkgLS1wdWJrZXkgY3VybF9jbGllbnRfa2V5LnB1YiAtdSAlVVNFUjogc2NwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvbG9nL2ZpbGU2MDEudHh0IC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9maWxlNjAxLnR4dCI+CitUZXN0IGRhdGEKK2ZvciBzc2ggdGVzdAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHZhbGdyaW5kPgorZGlzYWJsZQorPC92YWxncmluZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYwMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yjc1ZmViCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjAyCkBAIC0wLDAgKzEsNDMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0ZUUAorU0ZUUCBwdXQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTRlRQIHB1dAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiAtVCBsb2cvZmlsZTYwMi50eHQgc2Z0cDovLyVIT1NUSVA6JVNTSFBPUlQlUFdEL2xvZy91cGxvYWQuNjAyIC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9maWxlNjAyLnR4dCI+CitUZXN0IGRhdGEKK2ZvciBzc2ggdXBsb2FkIHRlc3QKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzx1cGxvYWQ+CitUZXN0IGRhdGEKK2ZvciBzc2ggdXBsb2FkIHRlc3QKKzwvdXBsb2FkPgorPHZhbGdyaW5kPgorZGlzYWJsZQorPC92YWxncmluZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYwMyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYwMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmE3ZDJlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjAzCkBAIC0wLDAgKzEsNDMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0NQCitTQ1AgdXBsb2FkCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NjcAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTQ1AgdXBsb2FkCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IC1UIGxvZy9maWxlNjAzLnR4dCBzY3A6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvdXBsb2FkLjYwMyAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvZmlsZTYwMy50eHQiPgorVGVzdCBkYXRhCitmb3Igc3NoIHVwbG9hZCB0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dXBsb2FkPgorVGVzdCBkYXRhCitmb3Igc3NoIHVwbG9hZCB0ZXN0Cis8L3VwbG9hZD4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MDQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwMjU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYwNApAQCAtMCwwICsxLDMwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NGVFAKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTRlRQIHJldHJpZXZhbCBvZiBub25leGlzdGVudCBmaWxlCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9ub3QtYS12YWxpZC1maWxlLW1vb29vIC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis3OAorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MDUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxNjJmYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYwNQpAQCAtMCwwICsxLDMzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NDUAorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzY3AKKzwvc2VydmVyPgorIDxuYW1lPgorU0NQIHJldHJpZXZhbCBvZiBub25leGlzdGVudCBmaWxlCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IHNjcDovLyVIT1NUSVA6JVNTSFBPUlQlUFdEL25vdC1hLXZhbGlkLWZpbGUtbW9vb28gLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzc5Cis8L2Vycm9yY29kZT4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MDYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhODJlOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYwNgpAQCAtMCwwICsxLDMzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NGVFAKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTRlRQIGludmFsaWQgdXNlciBsb2dpbgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11IG5vdC1hLXZhbGlkLXVzZXI6IHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9ub3QtYS12YWxpZC1maWxlLW1vb29vIC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis2NworPC9lcnJvcmNvZGU+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjA3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjA3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDA5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MDcKQEAgLTAsMCArMSwzMyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTQ1AKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2NwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NDUCBpbnZhbGlkIHVzZXIgbG9naW4KKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWtleSBjdXJsX2NsaWVudF9rZXkgLS1wdWJrZXkgY3VybF9jbGllbnRfa2V5LnB1YiAtdSBub3QtYS12YWxpZC11c2VyOiBzY3A6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9ub3QtYS12YWxpZC1maWxlLW1vb29vIC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis2NworPC9lcnJvcmNvZGU+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjA4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MDRiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MDgKQEAgLTAsMCArMSw0OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTRlRQCitwb3N0LXF1b3RlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK1Rlc3QgZmlsZSBmb3IgcmVuYW1lIHRlc3QKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTRlRQIHBvc3QtcXVvdGUgcmVuYW1lCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IC1RICItcmVuYW1lICVQV0QvbG9nL2ZpbGU2MDgudHh0ICVQV0QvbG9nL2ZpbGU2MDgtcmVuYW1lZC50eHQiIHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvZmlsZTYwOC50eHQgLS1pbnNlY3VyZQorPC9jb21tYW5kPgorIyBWZXJpZnkgdGhhdCB0aGUgZmlsZSB3YXMgcmVuYW1lZCBwcm9wZXJseSwgdGhlbiByZW5hbWUgdGhlIGZpbGUgYmFjayB0byB3aGF0CisjIGl0IHdhcyBzbyB0aGUgdmVyaWZ5IHNlY3Rpb24gd29ya3MgYW5kIHRoZSBmaWxlIGNhbiBiZSBjbGVhbmVkIHVwLgorPHBvc3RjaGVjaz4KK3BlcmwgJVNSQ0RJUi9saWJ0ZXN0L3Rlc3Q2MTAucGwgZ29uZSAlUFdEL2xvZy9maWxlNjA4LnR4dCBtb3ZlICVQV0QvbG9nL2ZpbGU2MDgtcmVuYW1lZC50eHQgJVBXRC9sb2cvZmlsZTYwOC50eHQKKzwvcG9zdGNoZWNrPgorPGZpbGUgbmFtZT0ibG9nL2ZpbGU2MDgudHh0Ij4KK1Rlc3QgZmlsZSBmb3IgcmVuYW1lIHRlc3QKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxmaWxlIG5hbWU9ImxvZy9maWxlNjA4LnR4dCI+CitUZXN0IGZpbGUgZm9yIHJlbmFtZSB0ZXN0Cis8L2ZpbGU+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjA5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjA5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTIxNzUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MDkKQEAgLTAsMCArMSw0NSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTRlRQCitwb3N0LXF1b3RlCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK1Rlc3QgZmlsZSBmb3IgbWtkaXIgdGVzdAorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NGVFAgcG9zdC1xdW90ZSBta2RpciBmYWlsdXJlCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IC1RICItbWtkaXIgJVBXRC9sb2cvZmlsZTYwOS50eHQiIHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvZmlsZTYwOS50eHQgLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL2ZpbGU2MDkudHh0Ij4KK1Rlc3QgZmlsZSBmb3IgbWtkaXIgdGVzdAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzIxCis8L2Vycm9yY29kZT4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMDU2MTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MQpAQCAtMCwwICsxLDcyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitjb29raWVzCitjb29raWVqYXIKK0hUVFAgcmVwbGFjZWQgaGVhZGVycworaHR0cG9ubHkKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSw0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwNCitGdW5ueS1oZWFkOiB5ZXN5ZXMNCitTZXQtQ29va2llOiB0ZXN0PXllczsgaHR0cG9ubHk7IGRvbWFpbj1mb28uY29tOyBleHBpcmVzPUZyaSBGZWIgMiAxMTo1NjoyNyBHTVQgMjAzNQ0KK1NFVC1DT09LSUU6IHRlc3QyPXllczsgZG9tYWluPWhvc3QuZm9vLmNvbTsgZXhwaXJlcz1GcmkgRmViIDIgMTE6NTY6MjcgR01UIDIwMzUNCitTZXQtQ29va2llOiB0ZXN0Mz1tYXliZTsgZG9tYWluPWZvby5jb207IHBhdGg9L21vbzsgc2VjdXJlDQorU2V0LUNvb2tpZTogdGVzdDQ9bm87IGRvbWFpbj1ub3BlLmZvby5jb207IHBhdGg9L21vbzsgc2VjdXJlDQorU2V0LUNvb2tpZTogdGVzdDU9bmFtZTsgZG9tYWluPWFueXRoaW5nLmNvbTsgcGF0aD0vIDsgc2VjdXJlDQorU2V0LUNvb2tpZTogZmFrZT1mb29sZWR5b3U7IGRvbWFpbj0uLmNvbTsgcGF0aD0vOw0KK0NvbnRlbnQtTGVuZ3RoOiA0DQorDQorYm9vCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCB3aXRoIHZhcmlvdXMgY29va2llcyBhbmQgY3VzdG9tIEhvc3Q6CisgPC9uYW1lPgorIyBFeHBsaWNpdGx5IHNldCB0aGUgdGltZSB6b25lIHRvIGEga25vd24gZ29vZCBvbmUsIGluIGNhc2UgdGhlIHVzZXIgaXMKKyMgdXNpbmcgb25lIG9mIHRoZSAncmlnaHQnIHpvbmVzIHRoYXQgdGFrZSBpbnRvIGFjY291bnQgbGVhcCBzZWNvbmRzCisjIHdoaWNoIGNhdXNlcyB0aGUgY29va2llIGV4cGlyeSB0aW1lcyB0byBiZSBkaWZmZXJlbnQuCis8c2V0ZW52PgorVFo9R01UCis8L3NldGVudj4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50LzYxIC1jIGxvZy9qYXI2MS50eHQgLUggIkhvc3Q6IHd3dy5ob3N0LmZvby5jb20iCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2Uvd2FudC82MSBIVFRQLzEuMQ0KK0FjY2VwdDogKi8qDQorSG9zdDogd3d3Lmhvc3QuZm9vLmNvbQ0KKw0KKzwvcHJvdG9jb2w+Cis8ZmlsZSBuYW1lPSJsb2cvamFyNjEudHh0IiBtb2RlPSJ0ZXh0Ij4KKyMgTmV0c2NhcGUgSFRUUCBDb29raWUgRmlsZQorIyBodHRwOi8vY3VybC5oYXh4LnNlL3JmYy9jb29raWVfc3BlYy5odG1sCisjIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGxpYmN1cmwhIEVkaXQgYXQgeW91ciBvd24gcmlzay4KKworI0h0dHBPbmx5Xy5mb28uY29tCVRSVUUJL3dlL3dhbnQvCUZBTFNFCTIwNTQwMzAxODcJdGVzdAl5ZXMKKy5ob3N0LmZvby5jb20JVFJVRQkvd2Uvd2FudC8JRkFMU0UJMjA1NDAzMDE4Nwl0ZXN0Mgl5ZXMKKy5mb28uY29tCVRSVUUJL21vbwlUUlVFCTAJdGVzdDMJbWF5YmUKKzwvZmlsZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYxMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2MyY2UzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjEwCkBAIC0wLDAgKzEsNDcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0ZUUAorcG9zdC1xdW90ZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitEdW1teSB0ZXN0IGZpbGUgZm9yIHJtZGlyIHRlc3QKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+Cis8cHJlY2hlY2s+CitwZXJsICVTUkNESVIvbGlidGVzdC90ZXN0NjEwLnBsIG1rZGlyICVQV0QvbG9nL3Rlc3Q2MTAuZGlyCis8L3ByZWNoZWNrPgorIDxuYW1lPgorU0ZUUCBwb3N0LXF1b3RlIHJtZGlyCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IC1RICItcm1kaXIgJVBXRC9sb2cvdGVzdDYxMC5kaXIiIHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvZmlsZTYxMC50eHQgLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPHBvc3RjaGVjaz4KK3BlcmwgJVNSQ0RJUi9saWJ0ZXN0L3Rlc3Q2MTAucGwgZ29uZSAlUFdEL2xvZy90ZXN0NjEwLmRpcgorPC9wb3N0Y2hlY2s+Cis8ZmlsZSBuYW1lPSJsb2cvZmlsZTYxMC50eHQiPgorRHVtbXkgdGVzdCBmaWxlIGZvciBybWRpciB0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjExIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZGRkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MTEKQEAgLTAsMCArMSw0NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTRlRQCitwb3N0LXF1b3RlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0R1bW15IHRlc3QgZmlsZSBmb3IgcmVuYW1lIHRlc3QKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+Cis8cHJlY2hlY2s+CitwZXJsICVTUkNESVIvbGlidGVzdC90ZXN0NjEwLnBsIG1rZGlyICVQV0QvbG9nL3Rlc3Q2MTEuZGlyCis8L3ByZWNoZWNrPgorIDxuYW1lPgorU0ZUUCBwb3N0LXF1b3RlIHJlbmFtZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiAtUSAiLXJlbmFtZSAlUFdEL2xvZy90ZXN0NjExLmRpciAlUFdEL2xvZy90ZXN0NjExLm5ldyIgc2Z0cDovLyVIT1NUSVA6JVNTSFBPUlQlUFdEL2xvZy9maWxlNjExLnR4dCAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8cG9zdGNoZWNrPgorcGVybCAlU1JDRElSL2xpYnRlc3QvdGVzdDYxMC5wbCBybWRpciAlUFdEL2xvZy90ZXN0NjExLm5ldworPC9wb3N0Y2hlY2s+Cis8ZmlsZSBuYW1lPSJsb2cvZmlsZTYxMS50eHQiPgorRHVtbXkgdGVzdCBmaWxlIGZvciByZW5hbWUgdGVzdAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHZhbGdyaW5kPgorZGlzYWJsZQorPC92YWxncmluZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYxMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGYyYTVjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjEyCkBAIC0wLDAgKzEsNDcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0ZUUAorcG9zdC1xdW90ZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0R1bW15IHRlc3QgZmlsZSBmb3IgcmVtb3ZlIHRlc3QKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTRlRQIHBvc3QtcXVvdGUgcmVtb3ZlIGZpbGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWtleSBjdXJsX2NsaWVudF9rZXkgLS1wdWJrZXkgY3VybF9jbGllbnRfa2V5LnB1YiAtdSAlVVNFUjogLVQgbG9nL2ZpbGU2MTIudHh0IC1RICItcm0gJVBXRC9sb2cvZmlsZTYxMi50eHQiIHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvdXBsb2FkLjYxMiAgLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPHBvc3RjaGVjaz4KK3BlcmwgJVNSQ0RJUi9saWJ0ZXN0L3Rlc3Q2MTAucGwgZ29uZSAlUFdEL2xvZy90ZXN0NjEyLnR4dAorPC9wb3N0Y2hlY2s+Cis8ZmlsZSBuYW1lPSJsb2cvZmlsZTYxMi50eHQiPgorRHVtbXkgdGVzdCBmaWxlIGZvciByZW1vdmUgdGVzdAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHVwbG9hZD4KK0R1bW15IHRlc3QgZmlsZSBmb3IgcmVtb3ZlIHRlc3QKKzwvdXBsb2FkPgorPHZhbGdyaW5kPgorZGlzYWJsZQorPC92YWxncmluZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYxMyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjBiM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjEzCkBAIC0wLDAgKzEsNDggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0ZUUAorZGlyZWN0b3J5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YWNoZWNrPgorZD8/Pz8/Pz8/PyAgICBOIFUgICAgICAgICBVICAgICAgICAgICAgICAgTiA/Pz8gIE4gTk46Tk4gLgorZD8/Pz8/Pz8/PyAgICBOIFUgICAgICAgICBVICAgICAgICAgICAgICAgTiA/Pz8gIE4gTk46Tk4gLi4KK2Q/Pz8/Pz8/Pz8gICAgTiBVICAgICAgICAgVSAgICAgICAgICAgICAgIE4gPz8/ICBOIE5OOk5OIGFzdWJkaXIKKy1ydz9ydz9ydz8gICAgMSBVICAgICAgICAgVSAgICAgICAgICAgICAgMzcgSmFuICAxICAyMDAwIHBsYWluZmlsZS50eHQKKy1yLT9yLT9yLT8gICAgMSBVICAgICAgICAgVSAgICAgICAgICAgICAgNDcgRGVjIDMxICAyMDAwIHJvZmlsZS50eHQKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzZnRwCis8L3NlcnZlcj4KKzxwcmVjaGVjaz4KK3BlcmwgJVNSQ0RJUi9saWJ0ZXN0L3Rlc3Q2MTMucGwgcHJlcGFyZSAlUFdEL2xvZy90ZXN0NjEzLmRpcgorPC9wcmVjaGVjaz4KKyA8bmFtZT4KK1NGVFAgZGlyZWN0b3J5IHJldHJpZXZhbAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiBzZnRwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvbG9nL3Rlc3Q2MTMuZGlyLyAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8cG9zdGNoZWNrPgorcGVybCAlU1JDRElSL2xpYnRlc3QvdGVzdDYxMy5wbCBwb3N0cHJvY2VzcyAlUFdEL2xvZy90ZXN0NjEzLmRpciAlUFdEL2xvZy9jdXJsNjEzLm91dAorPC9wb3N0Y2hlY2s+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjE0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjE0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODRhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MTQKQEAgLTAsMCArMSw0OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTRlRQCitwcmUtcXVvdGUKK2RpcmVjdG9yeQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGFjaGVjaz4KK2Q/Pz8/Pz8/Pz8gICAgTiBVICAgICAgICAgVSAgICAgICAgICAgICAgIE4gPz8/ICBOIE5OOk5OIC4KK2Q/Pz8/Pz8/Pz8gICAgTiBVICAgICAgICAgVSAgICAgICAgICAgICAgIE4gPz8/ICBOIE5OOk5OIC4uCitkPz8/Pz8/Pz8/ICAgIE4gVSAgICAgICAgIFUgICAgICAgICAgICAgICBOID8/PyAgTiBOTjpOTiBhc3ViZGlyCistci0/ci0/ci0/ICAgIDEgVSAgICAgICAgIFUgICAgICAgICAgICAgIDM3IEphbiAgMSAgMjAwMCBwbGFpbmZpbGUudHh0Cistci0/ci0/ci0/ICAgIDEgVSAgICAgICAgIFUgICAgICAgICAgICAgIDQ3IERlYyAzMSAgMjAwMCByb2ZpbGUudHh0Cis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+Cis8cHJlY2hlY2s+CitwZXJsICVTUkNESVIvbGlidGVzdC90ZXN0NjEzLnBsIHByZXBhcmUgJVBXRC9sb2cvdGVzdDYxNC5kaXIKKzwvcHJlY2hlY2s+CisgPG5hbWU+CitTRlRQIHByZS1xdW90ZSBjaG1vZAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiAtUSAiY2htb2QgNDQ0ICVQV0QvbG9nL3Rlc3Q2MTQuZGlyL3BsYWluZmlsZS50eHQiIHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvdGVzdDYxNC5kaXIvIC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzxwb3N0Y2hlY2s+CitwZXJsICVTUkNESVIvbGlidGVzdC90ZXN0NjEzLnBsIHBvc3Rwcm9jZXNzICVQV0QvbG9nL3Rlc3Q2MTQuZGlyICVQV0QvbG9nL2N1cmw2MTQub3V0Cis8L3Bvc3RjaGVjaz4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MTUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlOTkwMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYxNQpAQCAtMCwwICsxLDQ0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NGVFAKK1NGVFAgcHV0CitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NmdHAKKzwvc2VydmVyPgorPHByZWNoZWNrPgorcGVybCAlU1JDRElSL2xpYnRlc3QvdGVzdDYxMy5wbCBwcmVwYXJlICVQV0QvbG9nL3Rlc3Q2MTUuZGlyCis8L3ByZWNoZWNrPgorIDxuYW1lPgorU0ZUUCBwdXQgcmVtb3RlIGZhaWx1cmUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWtleSBjdXJsX2NsaWVudF9rZXkgLS1wdWJrZXkgY3VybF9jbGllbnRfa2V5LnB1YiAtdSAlVVNFUjogLVQgbG9nL2ZpbGU2MTUudHh0IHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvdGVzdDYxNS5kaXIvcm9maWxlLnR4dCAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8cG9zdGNoZWNrPgorcGVybCAlU1JDRElSL2xpYnRlc3QvdGVzdDYxMy5wbCBwb3N0cHJvY2VzcyAlUFdEL2xvZy90ZXN0NjE1LmRpcgorPC9wb3N0Y2hlY2s+Cis8ZmlsZSBuYW1lPSJsb2cvZmlsZTYxNS50eHQiPgorVGVzdCBkYXRhCitmb3Igc3NoIHVwbG9hZCB0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorOQorPC9lcnJvcmNvZGU+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjE2IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YTIyNWQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MTYKQEAgLTAsMCArMSwzOSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTRlRQCit6ZXJvLWxlbmd0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgc2VuZHplcm89InllcyI+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorU0ZUUCByZXRyaWV2YWwgb2YgZW1wdHkgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiBzZnRwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvbG9nL2ZpbGU2MTYudHh0IC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9maWxlNjE2LnR4dCI+Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjE3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMTgzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MTcKQEAgLTAsMCArMSwzOSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTQ1AKK3plcm8tbGVuZ3RoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YSBzZW5kemVybz0ieWVzIj4KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2NwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NDUCByZXRyaWV2YWwgb2YgZW1wdHkgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiBzY3A6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvZmlsZTYxNy50eHQgLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL2ZpbGU2MTcudHh0Ij4KKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MTggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0NWQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYxOApAQCAtMCwwICsxLDM5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NGVFAKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTRlRQIHJldHJpZXZhbCBvZiB0d28gZmlsZXMKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWtleSBjdXJsX2NsaWVudF9rZXkgLS1wdWJrZXkgY3VybF9jbGllbnRfa2V5LnB1YiAtdSAlVVNFUjogc2Z0cDovLyVIT1NUSVA6JVNTSFBPUlQlUFdEL2xvZy9maWxlNjE4LnR4dCBzZnRwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvbG9nL2ZpbGU2MTgudHh0IC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9maWxlNjE4LnR4dCI+CitUZXN0IGRhdGEKK2ZvciBzc2ggdGVzdAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHZhbGdyaW5kPgorZGlzYWJsZQorPC92YWxncmluZD4KKzxzdGRvdXQ+CitUZXN0IGRhdGEKK2ZvciBzc2ggdGVzdAorVGVzdCBkYXRhCitmb3Igc3NoIHRlc3QKKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjE5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjE5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMzI2NmYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MTkKQEAgLTAsMCArMSwzOSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTQ1AKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2NwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NDUCByZXRyaWV2YWwgb2YgdHdvIGZpbGVzCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IHNjcDovLyVIT1NUSVA6JVNTSFBPUlQlUFdEL2xvZy9maWxlNjE5LnR4dCBzY3A6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvZmlsZTYxOS50eHQgLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL2ZpbGU2MTkudHh0Ij4KK1Rlc3QgZGF0YQorZm9yIHNzaCB0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPHN0ZG91dD4KK1Rlc3QgZGF0YQorZm9yIHNzaCB0ZXN0CitUZXN0IGRhdGEKK2ZvciBzc2ggdGVzdAorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZWNhMWUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MgpAQCAtMCwwICsxLDYwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIHJlcGxhY2VkIGhlYWRlcnMKK2Nvb2tpZXMKK2h0dHBvbmx5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4wIDIwMCBPSyBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwNCisNCitib28KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQLCBzZW5kIGNvb2tpZXMgd2hlbiB1c2luZyBjdXN0b20gSG9zdDoKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC82MiAtYiBsb2cvamFyNjIudHh0IC1IICJIb3N0OiB3d3cuaG9zdC5mb28uY29tIgorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL2phcjYyLnR4dCI+CisjIE5ldHNjYXBlIEhUVFAgQ29va2llIEZpbGUKKyMgaHR0cDovL2N1cmwuaGF4eC5zZS9yZmMvY29va2llX3NwZWMuaHRtbAorIyBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBsaWJjdXJsISBFZGl0IGF0IHlvdXIgb3duIHJpc2suCisKKyNIdHRwT25seV8uZm9vLmNvbQlUUlVFCS93ZS93YW50LwlGQUxTRQkyMDU0MDMwMTg3CXRlc3QJeWVzCisuaG9zdC5mb28uY29tCVRSVUUJL3dlL3dhbnQvCUZBTFNFCTIwNTQwMzAxODcJdGVzdDIJeWVzCisuZmFrZS5ob3N0LmZvby5jb20JVFJVRQkvd2Uvd2FudC8JRkFMU0UJMjA1NDAzMDE4Nwl0ZXN0NAl5ZXMKKworLmZvby5jb20JVFJVRQkvbW9vCVRSVUUJMAl0ZXN0MwltYXliZQorPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgL3dlL3dhbnQvNjIgSFRUUC8xLjENCitBY2NlcHQ6ICovKg0KK0Nvb2tpZTogdGVzdDI9eWVzOyB0ZXN0PXllcw0KK0hvc3Q6IHd3dy5ob3N0LmZvby5jb20NCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjIwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NTBhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MjAKQEAgLTAsMCArMSwzOCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTRlRQCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorU0ZUUCByZXRyaWV2YWwgb2YgbWlzc2luZyBmaWxlIGZvbGxvd2VkIGJ5IGdvb2QgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiBzZnRwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvbG9nL25vdC1hLXZhbGlkLWZpbGUtbW9vb28gc2Z0cDovLyVIT1NUSVA6JVNTSFBPUlQlUFdEL2xvZy9maWxlNjIwLnR4dCAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvZmlsZTYyMC50eHQiPgorVGVzdCBkYXRhCitmb3Igc3NoIHRlc3QKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8c3Rkb3V0PgorVGVzdCBkYXRhCitmb3Igc3NoIHRlc3QKKzwvc3Rkb3V0PgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjIxIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NWEyODQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MjEKQEAgLTAsMCArMSwzOCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTQ1AKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2NwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NDUCByZXRyaWV2YWwgb2YgbWlzc2luZyBmaWxlIGZvbGxvd2VkIGJ5IGdvb2QgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiBzY3A6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvbm90LWEtdmFsaWQtZmlsZS1tb29vbyBzY3A6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvZmlsZTYyMS50eHQgLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL2ZpbGU2MjEudHh0Ij4KK1Rlc3QgZGF0YQorZm9yIHNzaCB0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPHN0ZG91dD4KK1Rlc3QgZGF0YQorZm9yIHNzaCB0ZXN0Cis8L3N0ZG91dD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWE3NjljCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjIyCkBAIC0wLDAgKzEsNDMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0ZUUAorU0ZUUCBwdXQKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTRlRQIHB1dCBmYWlsdXJlCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IC1UIGxvZy9maWxlNjIyLnR4dCBzZnRwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvbG9nL25vbmV4aXN0ZW50LWRpcmVjdG9yeS9ub25leGlzdGVudC1maWxlIC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9maWxlNjIyLnR4dCI+CitUZXN0IGRhdGEKK2ZvciBzc2ggdXBsb2FkIHRlc3QKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis3OAorPC9lcnJvcmNvZGU+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjIzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTUwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MjMKQEAgLTAsMCArMSw0MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTQ1AKK1NDUCB1cGxvYWQKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2NwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NDUCB1cGxvYWQgZmFpbHVyZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiAtVCBsb2cvZmlsZTYyMy50eHQgc2NwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvbG9nL25vbmV4aXN0ZW50LWRpcmVjdG9yeS9ub25leGlzdGVudC1maWxlIC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9maWxlNjIzLnR4dCI+CitUZXN0IGRhdGEKK2ZvciBzc2ggdXBsb2FkIHRlc3QKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis3OQorPC9lcnJvcmNvZGU+CisKKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTRmZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjI0CkBAIC0wLDAgKzEsNDcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0ZUUAorU0ZUUCBwdXQKKy0tZnRwLWNyZWF0ZS1kaXJzCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorU0ZUUCBwdXQgd2l0aCAtLWZ0cC1jcmVhdGUtZGlycworIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tZnRwLWNyZWF0ZS1kaXJzIC0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiAtVCBsb2cvZmlsZTYyNC50eHQgc2Z0cDovLyVIT1NUSVA6JVNTSFBPUlQlUFdEL2xvZy90ZXN0NjI0LmRpci91cGxvYWQuNjI0IC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzxwb3N0Y2hlY2s+CitwZXJsICVTUkNESVIvbGlidGVzdC90ZXN0NjEwLnBsIG1vdmUgJVBXRC9sb2cvdGVzdDYyNC5kaXIvdXBsb2FkLjYyNCAlUFdEL2xvZy91cGxvYWQuNjI0IHJtZGlyICVQV0QvbG9nL3Rlc3Q2MjQuZGlyCis8L3Bvc3RjaGVjaz4KKzxmaWxlIG5hbWU9ImxvZy9maWxlNjI0LnR4dCI+CitUZXN0IGRhdGEKK2ZvciBzc2ggdXBsb2FkIHRlc3QKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzx1cGxvYWQ+CitUZXN0IGRhdGEKK2ZvciBzc2ggdXBsb2FkIHRlc3QKKzwvdXBsb2FkPgorPHZhbGdyaW5kPgorZGlzYWJsZQorPC92YWxncmluZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2VjNzM4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjI1CkBAIC0wLDAgKzEsNDcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0ZUUAorU0ZUUCBwdXQKKy0tZnRwLWNyZWF0ZS1kaXJzCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorU0ZUUCBwdXQgd2l0aCAtLWZ0cC1jcmVhdGUtZGlycyB0d2ljZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tZnRwLWNyZWF0ZS1kaXJzIC0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiAtVCBsb2cvZmlsZTYyNS50eHQgc2Z0cDovLyVIT1NUSVA6JVNTSFBPUlQlUFdEL2xvZy90ZXN0NjI1LmEvdXBsb2FkLjYyNSAtVCBsb2cvZmlsZTYyNS50eHQgc2Z0cDovLyVIT1NUSVA6JVNTSFBPUlQlUFdEL2xvZy90ZXN0NjI1LmIvdXBsb2FkLjYyNSAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8cG9zdGNoZWNrPgorcGVybCAlU1JDRElSL2xpYnRlc3QvdGVzdDYxMC5wbCBtb3ZlICVQV0QvbG9nL3Rlc3Q2MjUuYS91cGxvYWQuNjI1ICVQV0QvbG9nL3VwbG9hZC42MjUgcm1kaXIgJVBXRC9sb2cvdGVzdDYyNS5hIHJtICVQV0QvbG9nL3Rlc3Q2MjUuYi91cGxvYWQuNjI1IHJtZGlyICVQV0QvbG9nL3Rlc3Q2MjUuYgorPC9wb3N0Y2hlY2s+Cis8ZmlsZSBuYW1lPSJsb2cvZmlsZTYyNS50eHQiPgorVGVzdCBkYXRhCitmb3Igc3NoIHVwbG9hZCB0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dXBsb2FkPgorVGVzdCBkYXRhCitmb3Igc3NoIHVwbG9hZCB0ZXN0Cis8L3VwbG9hZD4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MjYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjMmE2YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyNgpAQCAtMCwwICsxLDQyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NGVFAKK3ByZS1xdW90ZQorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NGVFAgaW52YWxpZCBxdW90ZSBjb21tYW5kCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IC1RICJpbnZhbGlkLWNvbW1hbmQgZm9vIGJhciIgc2Z0cDovLyVIT1NUSVA6JVNTSFBPUlQlUFdEL2xvZy9maWxlNjI2LnR4dCAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8ZmlsZSBuYW1lPSJsb2cvZmlsZTYyNi50eHQiPgorVGVzdCBmaWxlIGZvciByZW5hbWUgdGVzdAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzIxCis8L2Vycm9yY29kZT4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MjcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyOWQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyNwpAQCAtMCwwICsxLDQ2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NGVFAKK3F1b3RlCitOT0JPRFkKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIHNlbmR6ZXJvPSJ5ZXMiPgorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NGVFAgcXVvdGUgcmVtb3ZlIGZpbGUgd2l0aCBOT0JPRFkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWtleSBjdXJsX2NsaWVudF9rZXkgLS1wdWJrZXkgY3VybF9jbGllbnRfa2V5LnB1YiAtdSAlVVNFUjogLUkgLVEgInJtICVQV0QvbG9nL2ZpbGU2MjcudHh0IiBzZnRwOi8vJUhPU1RJUDolU1NIUE9SVCAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8cG9zdGNoZWNrPgorcGVybCAlU1JDRElSL2xpYnRlc3QvdGVzdDYxMC5wbCBnb25lICVQV0QvbG9nL3Rlc3Q2MjcudHh0Cis8L3Bvc3RjaGVjaz4KKzxmaWxlIG5hbWU9ImxvZy9maWxlNjI3LnR4dCI+CitEdW1teSB0ZXN0IGZpbGUgZm9yIHJlbW92ZSB0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPHByb3RvY29sPgorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyOCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2E2ZjFjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjI4CkBAIC0wLDAgKzEsMzMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0ZUUAorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NGVFAgaW52YWxpZCB1c2VyIGxvZ2luIChwYXNzd29yZCBhdXRoZW50aWNhdGlvbikKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistdSBub3QtYS12YWxpZC11c2VyOiBzZnRwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvaXJyZWxldmFudC1maWxlICAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNjcKKzwvZXJyb3Jjb2RlPgorPHZhbGdyaW5kPgorZGlzYWJsZQorPC92YWxncmluZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyOSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYyOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzE3OTE0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjI5CkBAIC0wLDAgKzEsMzMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0NQCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NjcAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTQ1AgaW52YWxpZCB1c2VyIGxvZ2luIChwYXNzd29yZCBhdXRoZW50aWNhdGlvbikKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistdSBub3QtYS12YWxpZC11c2VyOiBzY3A6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9pcnJlbGV2YW50LWZpbGUgLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzY3Cis8L2Vycm9yY29kZT4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZWQxZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MwpAQCAtMCwwICsxLDUyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIHByb3h5CitIVFRQIHByb3h5IEJhc2ljIGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQ0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwNCitDb250ZW50LUxlbmd0aDogMjYKKw0KK3RoZSBjb250ZW50IHdvdWxkIGdvIGhlcmUKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggcHJveHkgYXV0aG9yaXphdGlvbiBzZXQgaW4gZW52aXJvbm1lbnQKKyA8L25hbWU+Cis8c2V0ZW52PgoraHR0cF9wcm94eT1odHRwOi8vZmFrZTp1c2VyQCVIT1NUSVA6JUhUVFBQT1JULworPC9zZXRlbnY+CisgPGNvbW1hbmQ+CitodHRwOi8vd2Uud2FudC50aGF0LnNpdGUuY29tLzYzCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vd2Uud2FudC50aGF0LnNpdGUuY29tLzYzIEhUVFAvMS4xDQorUHJveHktQXV0aG9yaXphdGlvbjogQmFzaWMgWm1GclpUcDFjMlZ5DQorSG9zdDogd2Uud2FudC50aGF0LnNpdGUuY29tDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYzMCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYzMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmY2ZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjMwCkBAIC0wLDAgKzEsMzQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0ZUUAorRkFJTFVSRQorc2VydmVyIGtleSBjaGVjaworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NGVFAgaW5jb3JyZWN0IGhvc3Qga2V5CisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1ob3N0cHVibWQ1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiBzZnRwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvbG9nL2lycmVsZXZhbnQtZmlsZSAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNTEKKzwvZXJyb3Jjb2RlPgorPHZhbGdyaW5kPgorZGlzYWJsZQorPC92YWxncmluZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYzMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYzMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2IwYWNiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjMxCkBAIC0wLDAgKzEsMzQgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0NQCitGQUlMVVJFCitzZXJ2ZXIga2V5IGNoZWNrCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NjcAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTQ1AgaW5jb3JyZWN0IGhvc3Qga2V5CisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1ob3N0cHVibWQ1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiBzY3A6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvaXJyZWxldmFudC1maWxlIC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis1MQorPC9lcnJvcmNvZGU+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjMyIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYTBjNzkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MzIKQEAgLTAsMCArMSwzNCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTRlRQCitGQUlMVVJFCitzZXJ2ZXIga2V5IGNoZWNrCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK25vbmUKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorc2Z0cAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK1NGVFAgc3ludGFjdGljYWxseSBpbnZhbGlkIGhvc3Qga2V5CisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1ob3N0cHVibWQ1IDAwIC0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiBzZnRwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvbG9nL2lycmVsZXZhbnQtZmlsZSAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorMgorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MzMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmZDEwOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYzMwpAQCAtMCwwICsxLDQyIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NGVFAKK1JhbmdlCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK2RhdGEKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTRlRQIHJldHJpZXZhbCB3aXRoIGJ5dGUgcmFuZ2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWtleSBjdXJsX2NsaWVudF9rZXkgLS1wdWJrZXkgY3VybF9jbGllbnRfa2V5LnB1YiAtdSAlVVNFUjogc2Z0cDovLyVIT1NUSVA6JVNTSFBPUlQlUFdEL2xvZy9maWxlNjMzLnR4dCAtciA1LTkgLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL2ZpbGU2MzMudHh0Ij4KK1Rlc3QgZGF0YQorZm9yIHNzaCB0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjM0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjM0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYmI4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MzQKQEAgLTAsMCArMSw0MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTRlRQCitSYW5nZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitkYXRhCitmb3Igc3NoIHRlc3QKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTRlRQIHJldHJpZXZhbCB3aXRoIGJ5dGUgcmFuZ2UgcGFzdCBlbmQgb2YgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiBzZnRwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvbG9nL2ZpbGU2MzQudHh0IC1yIDUtOTkgLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL2ZpbGU2MzQudHh0Ij4KK1Rlc3QgZGF0YQorZm9yIHNzaCB0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjM1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NDkyOWQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MzUKQEAgLTAsMCArMSw0MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTRlRQCitSYW5nZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Citzc2ggdGVzdAorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzZnRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NGVFAgcmV0cmlldmFsIHdpdGggYnl0ZSByYW5nZSByZWxhdGl2ZSB0byBlbmQgb2YgZmlsZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0ta2V5IGN1cmxfY2xpZW50X2tleSAtLXB1YmtleSBjdXJsX2NsaWVudF9rZXkucHViIC11ICVVU0VSOiBzZnRwOi8vJUhPU1RJUDolU1NIUE9SVCVQV0QvbG9nL2ZpbGU2MzUudHh0IC1yIC05IC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9maWxlNjM1LnR4dCI+CitUZXN0IGRhdGEKK2ZvciBzc2ggdGVzdAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHZhbGdyaW5kPgorZGlzYWJsZQorPC92YWxncmluZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYzNiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYzNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjRlZTdlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjM2CkBAIC0wLDAgKzEsNDMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0ZUUAorUmFuZ2UKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorZGF0YQorZm9yIHNzaCB0ZXN0Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorU0ZUUCByZXRyaWV2YWwgd2l0aCBYLSBieXRlIHJhbmdlCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvZmlsZTYzNi50eHQgLXIgNS0gLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL2ZpbGU2MzYudHh0Ij4KK1Rlc3QgZGF0YQorZm9yIHNzaCB0ZXN0Cis8L2ZpbGU+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8dmFsZ3JpbmQ+CitkaXNhYmxlCis8L3ZhbGdyaW5kPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjM3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGM4MTQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MzcKQEAgLTAsMCArMSw0NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTRlRQCitSYW5nZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NmdHAKKzwvc2VydmVyPgorIDxuYW1lPgorU0ZUUCByZXRyaWV2YWwgd2l0aCBpbnZhbGlkIFgtIHJhbmdlCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvZmlsZTYzNy50eHQgLXIgOTktIC0taW5zZWN1cmUKKzwvY29tbWFuZD4KKzxmaWxlIG5hbWU9ImxvZy9maWxlNjM3LnR4dCI+CitUZXN0IGRhdGEKK2ZvciBzc2ggdGVzdAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzM2Cis8L2Vycm9yY29kZT4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MzggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2MzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyY2Y2MwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYzOApAQCAtMCwwICsxLDQ5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NGVFAKK3Bvc3QtcXVvdGUKK2FjY2VwdGZhaWwKK2FzdGVyaXNrCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0R1bW15IHRlc3QgZmlsZSBmb3IgcmVuYW1lIHRlc3QKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc2Z0cAorPC9zZXJ2ZXI+Cis8cHJlY2hlY2s+CitwZXJsICVTUkNESVIvbGlidGVzdC90ZXN0NjEwLnBsIG1rZGlyICVQV0QvbG9nL3Rlc3Q2MzguZGlyCis8L3ByZWNoZWNrPgorIDxuYW1lPgorU0ZUUCBwb3N0LXF1b3RlIHJlbmFtZSAqIGFzdGVyaXNrIGFjY2VwdC1mYWlsCisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1rZXkgY3VybF9jbGllbnRfa2V5IC0tcHVia2V5IGN1cmxfY2xpZW50X2tleS5wdWIgLXUgJVVTRVI6IC1RICItKnJlbmFtZSAlUFdEL2xvZy90ZXN0NjM4LmRpciAlUFdEL2xvZy90ZXN0NjM4Lm5ldyIgc2Z0cDovLyVIT1NUSVA6JVNTSFBPUlQlUFdEL2xvZy9maWxlNjM4LnR4dCAtLWluc2VjdXJlCis8L2NvbW1hbmQ+Cis8cG9zdGNoZWNrPgorcGVybCAlU1JDRElSL2xpYnRlc3QvdGVzdDYxMC5wbCBybWRpciAlUFdEL2xvZy90ZXN0NjM4Lm5ldworPC9wb3N0Y2hlY2s+Cis8ZmlsZSBuYW1lPSJsb2cvZmlsZTYzOC50eHQiPgorRHVtbXkgdGVzdCBmaWxlIGZvciByZW5hbWUgdGVzdAorPC9maWxlPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHZhbGdyaW5kPgorZGlzYWJsZQorPC92YWxncmluZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYzOSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDYzOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGZlODU5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjM5CkBAIC0wLDAgKzEsNDkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU0ZUUAorcG9zdC1xdW90ZQorYWNjZXB0ZmFpbAorYXN0ZXJpc2sKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorRHVtbXkgdGVzdCBmaWxlIGZvciByZW5hbWUgdGVzdAorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzZnRwCis8L3NlcnZlcj4KKzxwcmVjaGVjaz4KK3BlcmwgJVNSQ0RJUi9saWJ0ZXN0L3Rlc3Q2MTAucGwgbWtkaXIgJVBXRC9sb2cvdGVzdDYzOS5kaXIKKzwvcHJlY2hlY2s+CisgPG5hbWU+CitTRlRQIHBvc3QtcXVvdGUgcmVuYW1lICogYXN0ZXJpc2sgYWNjZXB0LWZhaWwKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWtleSBjdXJsX2NsaWVudF9rZXkgLS1wdWJrZXkgY3VybF9jbGllbnRfa2V5LnB1YiAtdSAlVVNFUjogLVEgIi0qcmVuYW1lICVQV0QvbG9nL3Rlc3Q2Mzktbm90LWV4aXN0cy1kaXIgJVBXRC9sb2cvdGVzdDYzOS5uZXciIHNmdHA6Ly8lSE9TVElQOiVTU0hQT1JUJVBXRC9sb2cvZmlsZTYzOS50eHQgLS1pbnNlY3VyZQorPC9jb21tYW5kPgorPHBvc3RjaGVjaz4KK3BlcmwgJVNSQ0RJUi9saWJ0ZXN0L3Rlc3Q2MTAucGwgcm1kaXIgJVBXRC9sb2cvdGVzdDYzOS5kaXIKKzwvcG9zdGNoZWNrPgorPGZpbGUgbmFtZT0ibG9nL2ZpbGU2MzkudHh0Ij4KK0R1bW15IHRlc3QgZmlsZSBmb3IgcmVuYW1lIHRlc3QKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzx2YWxncmluZD4KK2Rpc2FibGUKKzwvdmFsZ3JpbmQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2NCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZDgyYTgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2NApAQCAtMCwwICsxLDgzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIERpZ2VzdCBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTQ1Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjYNCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlCis8L2RhdGE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyBhCisjIEF1dGhvcml6YXRpb246IERpZ2VzdCBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMD4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDIzDQorDQorVGhpcyBJUyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhMTAwMD4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0idGVzdHJlYWxtIiwgbm9uY2U9IjEwNTM2MDQxNDUiDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyNg0KKw0KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDIzDQorDQorVGhpcyBJUyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitjcnlwdG8KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIHdpdGggRGlnZXN0IGF1dGhvcml6YXRpb24KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNjQgLXUgdGVzdHVzZXI6dGVzdHBhc3MgLS1kaWdlc3QKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC82NCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzY0IEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJ0ZXN0dXNlciIsIHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NSIsIHVyaT0iLzY0IiwgcmVzcG9uc2U9ImM1NWY3ZjMwZDgzZDc3NGEzZDJkY2FjZjcyNWFiYWNhIg0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC41IChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjUgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2NSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDY1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODJhMGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2NQpAQCAtMCwwICsxLDgzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIERpZ2VzdCBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZA0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIyMDUzNjA0MTQ1Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjYNCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlCis8L2RhdGE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyBhCisjIEF1dGhvcml6YXRpb246IERpZ2VzdCBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMD4KK0hUVFAvMS4xIDQwMSBTdGlsbCBhIGJhZCBwYXNzd29yZCB5b3UgbW9yb24NCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UgZWl0aGVyDQorPC9kYXRhMTAwMD4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0idGVzdHJlYWxtIiwgbm9uY2U9IjIwNTM2MDQxNDUiDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyNg0KKw0KK0hUVFAvMS4xIDQwMSBTdGlsbCBhIGJhZCBwYXNzd29yZCB5b3UgbW9yb24NCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UgZWl0aGVyDQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitjcnlwdG8KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIHdpdGggRGlnZXN0IGF1dGhvcml6YXRpb24gd2l0aCBiYWQgcGFzc3dvcmQKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNjUgLXUgdGVzdHVzZXI6dGVzdDJwYXNzIC0tZGlnZXN0Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvNjUgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC82NSBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0idGVzdHVzZXIiLCByZWFsbT0idGVzdHJlYWxtIiwgbm9uY2U9IjIwNTM2MDQxNDUiLCB1cmk9Ii82NSIsIHJlc3BvbnNlPSI2NmQ2OGQzMjUxZjE4Mzk1NzZiYTdjNzY2Y2Y5MjA1YiINCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC41IE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE4ZDhmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjYKQEAgLTAsMCArMSw0MSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorbm8gaGVhZGVycyBzd3NjbG9zZQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGhvdXQgaGVhZGVycyBpbiB0aGUgcmVzcG9uc2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNjYKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC82NiBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmU2ZWRkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjcKQEAgLTAsMCArMSwxMDAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgTlRMTSBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorCis8IS0tIG5vIDxkYXRhPiBpbiB0aGlzIHRlc3Qgc2luY2Ugd2UgaGF2ZSBOVExNIGZyb20gdGhlIHN0YXJ0CisKK1RoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgYSBmaXJzdAorQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQgLS0+CisKKzxkYXRhMTAwMT4KK0hUVFAvMS4xIDQwMSBOb3cgZ2ltbWUgdGhhdCBzZWNvbmQgcmVxdWVzdCBvZiBjcmFwDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMzQNCitXV1ctQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UgZWl0aGVyIQorPC9kYXRhMTAwMT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIHRoZSBzZWNvbmQKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMj4KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gc2VydmVyIGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzMg0KKw0KK0ZpbmFsbHksIHRoaXMgaXMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YTEwMDI+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgTm93IGdpbW1lIHRoYXQgc2Vjb25kIHJlcXVlc3Qgb2YgY3JhcA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDM0DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHNlcnZlciBsYW5kIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMzINCisNCitGaW5hbGx5LCB0aGlzIGlzIHRoZSByZWFsIHBhZ2UhCis8L2RhdGFjaGVjaz4KKworPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK05UTE0KKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggTlRMTSBhdXRob3JpemF0aW9uCisgPC9uYW1lPgorIDxzZXRlbnY+CisjIHdlIGZvcmNlIG91ciBvd24gaG9zdCBuYW1lLCBpbiBvcmRlciB0byBtYWtlIHRoZSB0ZXN0IG1hY2hpbmUgaW5kZXBlbmRlbnQKK0NVUkxfR0VUSE9TVE5BTUU9Y3VybGhvc3QKKyMgd2UgdHJ5IHRvIHVzZSB0aGUgTERfUFJFTE9BRCBoYWNrLCBpZiBub3QgYSBkZWJ1ZyBidWlsZAorTERfUFJFTE9BRD0lUFdEL2xpYnRlc3QvLmxpYnMvbGliaG9zdG5hbWUuc28KKyA8L3NldGVudj4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC82NyAtdSB0ZXN0dXNlcjp0ZXN0cGFzcyAtLW50bG0KKzwvY29tbWFuZD4KKzxwcmVjaGVjaz4KK2Noa2hvc3RuYW1lIGN1cmxob3N0Cis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzY3IEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC42LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNi1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzY3IEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQURBQUFBR0FBWUFFQUFBQUFZQUJnQVdBQUFBQUFBQUFCd0FBQUFDQUFJQUhBQUFBQUlBQWdBZUFBQUFBQUFBQUFBQUFBQUJvS0JBRnBrUXdLUkNaRk1oamowdHc0N3dFaktIUkhsdnpmeFFhbUZjaGVNdXY4dit4ZXFwaEVPNVY0MXhSZDdSOWRlT1hSbGMzUjFjMlZ5WTNWeWJHaHZjM1E9DQorVXNlci1BZ2VudDogY3VybC83LjEwLjYtcHJlMSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC42LXByZTEgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2OCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYjQ0MjkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q2OApAQCAtMCwwICsxLDk5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIE5UTE0gYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIGEgZmlyc3QKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMT4KK0hUVFAvMS4xIDQwMSBOb3cgZ2ltbWUgdGhhdCBzZWNvbmQgcmVxdWVzdCBvZiBjcmFwDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitXV1ctQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UgZWl0aGVyIQorPC9kYXRhMTAwMT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIHRoZSBzZWNvbmQKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMj4KK0hUVFAvMS4xIDQwMSBZb3UgZ2l2ZSBtZSB3cm9uZyBwYXNzd29yZA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitXV1ctQXV0aGVudGljYXRlOiBOVExNDQorQ29udGVudC1MZW5ndGg6IDQ2DQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KKw0KK1dyb25nIHBhc3N3b3JkIGR1ZGUuIEdldCBpdCBmaXhlZCBhbmQgcmV0dXJuLgorPC9kYXRhMTAwMj4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwMSBOb3cgZ2ltbWUgdGhhdCBzZWNvbmQgcmVxdWVzdCBvZiBjcmFwDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitXV1ctQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK0hUVFAvMS4xIDQwMSBZb3UgZ2l2ZSBtZSB3cm9uZyBwYXNzd29yZA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitXV1ctQXV0aGVudGljYXRlOiBOVExNDQorQ29udGVudC1MZW5ndGg6IDQ2DQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KKw0KK1dyb25nIHBhc3N3b3JkIGR1ZGUuIEdldCBpdCBmaXhlZCBhbmQgcmV0dXJuLgorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitOVExNCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCB3aXRoIE5UTE0gYXV0aG9yaXphdGlvbiBhbmQgd3JvbmcgcGFzc3dvcmQKKyA8L25hbWU+CisgPHNldGVudj4KKyMgd2UgZm9yY2Ugb3VyIG93biBob3N0IG5hbWUsIGluIG9yZGVyIHRvIG1ha2UgdGhlIHRlc3QgbWFjaGluZSBpbmRlcGVuZGVudAorQ1VSTF9HRVRIT1NUTkFNRT1jdXJsaG9zdAorIyB3ZSB0cnkgdG8gdXNlIHRoZSBMRF9QUkVMT0FEIGhhY2ssIGlmIG5vdCBhIGRlYnVnIGJ1aWxkCitMRF9QUkVMT0FEPSVQV0QvbGlidGVzdC8ubGlicy9saWJob3N0bmFtZS5zbworIDwvc2V0ZW52PgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzY4IC11IHRlc3R1c2VyOnRlc3RwYXNzIC0tbnRsbQorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvNjggSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQorVXNlci1BZ2VudDogY3VybC83LjEwLjYtcHJlMSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC42LXByZTEgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvNjggSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQVlBQmdBV0FBQUFBQUFBQUJ3QUFBQUNBQUlBSEFBQUFBSUFBZ0FlQUFBQUFBQUFBQUFBQUFBQm9LQkFGcGtRd0tSQ1pGTWhqajB0dzQ3d0VqS0hSSGx2emZ4UWFtRmNoZU11djh2K3hlcXBoRU81VjQxeFJkN1I5ZGVPWFJsYzNSMWMyVnlZM1Z5YkdodmMzUT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDY5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxYWVkNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDY5CkBAIC0wLDAgKzEsMTIxIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIE5UTE0gYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMNCitXV1ctQXV0aGVudGljYXRlOiBXaWxkLWFuZC1jcmF6eQ0KK1dXVy1BdXRoZW50aWNhdGU6IE5UTE0NCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDI2DQorDQorVGhpcyBpcyBub3QgdGhlIHJlYWwgcGFnZQorPC9kYXRhPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgYSBmaXJzdAorIyBBdXRob3JpemF0aW9uOiBOVExNIGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAxPgorSFRUUC8xLjEgNDAxIE5vdyBnaW1tZSB0aGF0IHNlY29uZCByZXF1ZXN0IG9mIGNyYXANCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1MZW5ndGg6IDM0DQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK1dXVy1BdXRoZW50aWNhdGU6IE5UTE0gVGxSTVRWTlRVQUFDQUFBQUFnQUNBREFBQUFBR2dvRUFjNTFBWVZEZ3lOY0FBQUFBQUFBQUFHNEFiZ0F5QUFBQVEwTUNBQVFBUXdCREFBRUFFZ0JGQUV3QVNRQlRBRUVBUWdCRkFGUUFTQUFFQUJnQVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQXdBc0FHVUFiQUJwQUhNQVlRQmlBR1VBZEFCb0FDNEFZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUFBQUFBQT09DQorDQorVGhpcyBpcyBub3QgdGhlIHJlYWwgcGFnZSBlaXRoZXIhCis8L2RhdGExMDAxPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgdGhlIHNlY29uZAorIyBBdXRob3JpemF0aW9uOiBOVExNIGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAyPgorSFRUUC8xLjEgMjAwIFRoaW5ncyBhcmUgZmluZSBpbiBzZXJ2ZXIgbGFuZCBzd3NjbG9zZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDMyDQorDQorRmluYWxseSwgdGhpcyBpcyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhMTAwMj4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHN3c2Nsb3NlDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljDQorV1dXLUF1dGhlbnRpY2F0ZTogV2lsZC1hbmQtY3JhenkNCitXV1ctQXV0aGVudGljYXRlOiBOVExNDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyNg0KKw0KK0hUVFAvMS4xIDQwMSBOb3cgZ2ltbWUgdGhhdCBzZWNvbmQgcmVxdWVzdCBvZiBjcmFwDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitXV1ctQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gc2VydmVyIGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzMg0KKw0KK0ZpbmFsbHksIHRoaXMgaXMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorTlRMTQorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCBOVExNLCBCYXNpYyBvciBXaWxkLWFuZC1jcmF6eSBhdXRob3JpemF0aW9uCisgPC9uYW1lPgorIDxzZXRlbnY+CisjIHdlIGZvcmNlIG91ciBvd24gaG9zdCBuYW1lLCBpbiBvcmRlciB0byBtYWtlIHRoZSB0ZXN0IG1hY2hpbmUgaW5kZXBlbmRlbnQKK0NVUkxfR0VUSE9TVE5BTUU9Y3VybGhvc3QKKyMgd2UgdHJ5IHRvIHVzZSB0aGUgTERfUFJFTE9BRCBoYWNrLCBpZiBub3QgYSBkZWJ1ZyBidWlsZAorTERfUFJFTE9BRD0lUFdEL2xpYnRlc3QvLmxpYnMvbGliaG9zdG5hbWUuc28KKyA8L3NldGVudj4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC82OSAtdSB0ZXN0dXNlcjp0ZXN0cGFzcyAtLWFueWF1dGgKKzwvY29tbWFuZD4KKzxwcmVjaGVjaz4KK2Noa2hvc3RuYW1lIGN1cmxob3N0Cis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzY5IEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEwLjYtcHJlMSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC42LXByZTEgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvNjkgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQorVXNlci1BZ2VudDogY3VybC83LjEwLjYtcHJlMSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC42LXByZTEgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvNjkgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQVlBQmdBV0FBQUFBQUFBQUJ3QUFBQUNBQUlBSEFBQUFBSUFBZ0FlQUFBQUFBQUFBQUFBQUFBQm9LQkFGcGtRd0tSQ1pGTWhqajB0dzQ3d0VqS0hSSGx2emZ4UWFtRmNoZU11djh2K3hlcXBoRU81VjQxeFJkN1I5ZGVPWFJsYzNSMWMyVnlZM1Z5YkdodmMzUT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNzMxZGUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3CkBAIC0wLDAgKzEsNjIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2Nvb2tpZXMKK2hlYWRlciBkdW1wCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcyBzd3NjbG9zZQorU2V0LUNvb2tpZTogZm9vYmFyPW5hbWU7IGRvbWFpbj0xMjcuMC4wLjE7IHBhdGg9LzsKK1NldC1Db29raWU6IG1pc21hdGNoPXRoaXM7IGRvbWFpbj0xMjcuMC4wLjE7IHBhdGg9Ii9zaWxseS8iOworU2V0LUNvb2tpZTogcGFydG1hdGNoPXByZXNlbnQ7IGRvbWFpbj0uMC4wLjE7IHBhdGg9LzsKKworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCBjb29raWUgcGFyc2VyIGFuZCBoZWFkZXIgcmVjb3JkaW5nCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvNyAtYiBub25lIC1EIGxvZy9oZWFkczcudHh0Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2Uvd2FudC83IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8ZmlsZSBuYW1lPSJsb2cvaGVhZHM3LnR4dCI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMgc3dzY2xvc2UKK1NldC1Db29raWU6IGZvb2Jhcj1uYW1lOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS87CitTZXQtQ29va2llOiBtaXNtYXRjaD10aGlzOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPSIvc2lsbHkvIjsKK1NldC1Db29raWU6IHBhcnRtYXRjaD1wcmVzZW50OyBkb21haW49LjAuMC4xOyBwYXRoPS87CisKKzwvZmlsZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZjMDMyNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcwCkBAIC0wLDAgKzEsODcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgRGlnZXN0IGF1dGgKKy0tYW55YXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE5OSINCitXV1ctQXV0aGVudGljYXRlOiBOVExNDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyNg0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UKKzwvZGF0YT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIGEKKyMgQXV0aG9yaXphdGlvbjogRGlnZXN0IGxpbmUgcGFzc2VkLWluIGZyb20gdGhlIGNsaWVudAorPGRhdGExMDAwPgorSFRUUC8xLjEgMjAwIE9LDQorU2VydmVyOiBBcGFjaGUvMS4zLjI3IChEYXJ3aW4pIFBIUC80LjEuMg0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjMNCisNCitUaGlzIElTIHRoZSByZWFsIHBhZ2UhCis8L2RhdGExMDAwPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE5OSINCitXV1ctQXV0aGVudGljYXRlOiBOVExNDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyNg0KKw0KK0hUVFAvMS4xIDIwMCBPSw0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDIzDQorDQorVGhpcyBJUyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+CitOVExNCis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCB3aXRoIERpZ2VzdCAqT1IqIE5UTE0gYXV0aG9yaXphdGlvbgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC83MCAtdSB0ZXN0dXNlcjp0ZXN0cGFzcyAtLWFueWF1dGgKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC83MCBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC42LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNi1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzcwIEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJ0ZXN0dXNlciIsIHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE5OSIsIHVyaT0iLzcwIiwgcmVzcG9uc2U9IjJjOWE2ZjAwYWYwZDg2NDk3YjE3N2I5MGU5MGM2ODhhIg0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC42LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNi1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzAwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNmY4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3MDAKQEAgLTAsMCArMSw1NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorU09DS1M0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHkgbmFtZT0iMSI+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKK3NvY2tzNAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB2aWEgU09DS1M0IHByb3h5CisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1zb2NrczQgJUhPU1RJUDolU09DS1NQT1JUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC83MDAKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC83MDAgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcwMSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcwMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTRhY2EyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzAxCkBAIC0wLDAgKzEsNTcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK1NPQ0tTNQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5IG5hbWU9IjEiPgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCistZm9vLQorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCitzb2NrczUKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBHRVQgdmlhIFNPQ0tTNSBwcm94eQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tc29ja3M1ICVIT1NUSVA6JVNPQ0tTUE9SVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNzAxCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvNzAxIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3MDIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3MDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhZjcxMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcwMgpAQCAtMCwwICsxLDM5IEBACis8dGVzdGNhc2U+CisjYmFzZWQgb2ZmICAxOQorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitTT0NLUzQKK2Nvbm5lY3QgdG8gbm9uLWxpc3RlbgorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citzb2NrczQKKzwvc2VydmVyPgorPGZlYXR1cmVzPgoraHR0cAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0F0dGVtcHQgY29ubmVjdCB0byBub24tbGlzdGVuaW5nIEhUVFAgc2VydmVyIHZpYSBTT0NLUzQgcHJveHkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLXNvY2tzNCAlSE9TVElQOiVTT0NLU1BPUlQgaHR0cDovLyVIT1NUSVA6NjAwMDAKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis3Cis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcwMyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcwMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWE4OWI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzAzCkBAIC0wLDAgKzEsMzkgQEAKKzx0ZXN0Y2FzZT4KKyNiYXNlZCBvZmYgIDE5Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK1NPQ0tTNQorY29ubmVjdCB0byBub24tbGlzdGVuCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3NvY2tzNQorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitodHRwCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorQXR0ZW1wdCBjb25uZWN0IHRvIG5vbi1saXN0ZW5pbmcgSFRUUCBzZXJ2ZXIgdmlhIFNPQ0tTNSBwcm94eQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKy0tc29ja3M1ICVIT1NUSVA6JVNPQ0tTUE9SVCBodHRwOi8vJUhPU1RJUDo2MDAwMAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzcKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzA0IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTFiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3MDQKQEAgLTAsMCArMSwzNiBAQAorPHRlc3RjYXNlPgorI2Jhc2VkIG9mZiAgMTkKKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorU09DS1M0Citjb25uZWN0IHRvIG5vbi1saXN0ZW4KK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitBdHRlbXB0IGNvbm5lY3QgdG8gbm9uLWxpc3RlbmluZyBTT0NLUzQgcHJveHkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLXNvY2tzNCAlSE9TVElQOjYwMDAwIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC83MDQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxlcnJvcmNvZGU+Cis3Cis8L2Vycm9yY29kZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcwNSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjkwNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzA1CkBAIC0wLDAgKzEsMzYgQEAKKzx0ZXN0Y2FzZT4KKyNiYXNlZCBvZmYgIDE5Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK1NPQ0tTNQorY29ubmVjdCB0byBub24tbGlzdGVuCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+Cis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorQXR0ZW1wdCBjb25uZWN0IHRvIG5vbi1saXN0ZW5pbmcgU09DS1M1IHByb3h5CisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1zb2NrczUgJUhPU1RJUDo2MDAwMCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNzA1Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNworPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3MDYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3MDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMwY2IyMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcwNgpAQCAtMCwwICsxLDU5IEBACis8dGVzdGNhc2U+CisjYmFzZWQgb2ZmIHRlc3QgMTAwCis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorUEFTVgorTElTVAorU09DS1M0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorIyBXaGVuIGRvaW5nIExJU1QsIHdlIGdldCB0aGUgZGVmYXVsdCBsaXN0IG91dHB1dCBoYXJkLWNvZGVkIGluIHRoZSB0ZXN0CisjIEZUUCBzZXJ2ZXIKKzxkYXRhY2hlY2s+Cit0b3RhbCAyMAorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLgorZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLi4KK2Ryd3hyLXhyLXggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5ICAyICAxOTk2IC5OZVhUCistci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUUKK2xyd3hyd3hyd3ggICAxIDAgICAgICAgIDEgICAgICAgICAgICAgIDcgRGVjICA5ICAxOTk5IGJpbiAtPiB1c3IvYmluCitkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyBkZXYKK2Ryd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWwKK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgTm92IDMwICAxOTk1IGV0YworZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgMSAgICAgICAgICAgIDUxMiBPY3QgMzAgMTQ6MzMgcHViCitkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3IKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitmdHAKK3NvY2tzNAorPC9zZXJ2ZXI+CisgPG5hbWU+CitGVFAgZGlyIGxpc3QgUEFTViB2aWEgU09DS1M0CisgPC9uYW1lPgorIDxjb21tYW5kPgorLS1zb2NrczQgJUhPU1RJUDolU09DS1NQT1JUIGZ0cDovLyVIT1NUSVA6JUZUUFBPUlQvCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIGFub255bW91cw0KK1BBU1MgZnRwQGV4YW1wbGUuY29tDQorUFdEDQorRVBTVg0KK1RZUEUgQQ0KK0xJU1QNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcwNyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDcwNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2E4NjIxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzA3CkBAIC0wLDAgKzEsNTkgQEAKKzx0ZXN0Y2FzZT4KKyNiYXNlZCBvZmYgdGVzdCAxMDAKKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitQQVNWCitMSVNUCitTT0NLUzUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisjIFdoZW4gZG9pbmcgTElTVCwgd2UgZ2V0IHRoZSBkZWZhdWx0IGxpc3Qgb3V0cHV0IGhhcmQtY29kZWQgaW4gdGhlIHRlc3QKKyMgRlRQIHNlcnZlcgorPGRhdGFjaGVjaz4KK3RvdGFsIDIwCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuCitkcnd4ci14ci14ICAgOCA5OCAgICAgICA5OCAgICAgICAgICAgNTEyIE9jdCAyMiAxMzowNiAuLgorZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFQKKy1yLS1yLS1yLS0gICAxIDAgICAgICAgIDEgICAgICAgICAgICAgMzUgSnVsIDE2ICAxOTk2IFJFQURNRQorbHJ3eHJ3eHJ3eCAgIDEgMCAgICAgICAgMSAgICAgICAgICAgICAgNyBEZWMgIDkgIDE5OTkgYmluIC0+IHVzci9iaW4KK2RyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldgorZHJ3eHJ3eHJ3eCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgMjkgMTY6MDQgZG93bmxvYWQuaHRtbAorZHIteHIteHIteCAgIDIgMCAgICAgICAgMSAgICAgICAgICAgIDUxMiBOb3YgMzAgIDE5OTUgZXRjCitkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWIKK2RyLXhyLXhyLXggICA1IDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IHVzcgorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAorc29ja3M1Cis8L3NlcnZlcj4KKyA8bmFtZT4KK0ZUUCBkaXIgbGlzdCBQQVNWIHZpYSBTT0NLUzUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLXNvY2tzNSAlSE9TVElQOiVTT0NLU1BPUlQgZnRwOi8vJUhPU1RJUDolRlRQUE9SVC8KKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgYW5vbnltb3VzDQorUEFTUyBmdHBAZXhhbXBsZS5jb20NCitQV0QNCitFUFNWDQorVFlQRSBBDQorTElTVA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzA4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNmQ5YWUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3MDgKQEAgLTAsMCArMSw2MCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorU09DS1M0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHkgbmFtZT0iMSI+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKK3NvY2tzNAorPC9zZXJ2ZXI+Cis8c2V0ZW52PgorYWxsX3Byb3h5PXNvY2tzNDovLyVIT1NUSVA6JVNPQ0tTUE9SVAorPC9zZXRlbnY+CisgPG5hbWU+CitIVFRQIEdFVCB2aWEgU09DS1M0IHByb3h5CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzcwOAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzcwOCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzA5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzA5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MjBmODkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3MDkKQEAgLTAsMCArMSw2MCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorU09DS1M1Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKK3NvY2tzNQorPC9zZXJ2ZXI+Cis8c2V0ZW52PgoraHR0cF9wcm94eT1zb2NrczU6Ly8lSE9TVElQOiVTT0NLU1BPUlQgCis8L3NldGVudj4KKyA8bmFtZT4KK0hUVFAgR0VUIHZpYSBTT0NLUzUgc2V0IGluIGVudmlyb25tZW50CisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzcwOQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzcwOSBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzFmOTY5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzEKQEAgLTAsMCArMSw3OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEZPUk1QT1NUCitjb25maWcgZmlsZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitDb250ZW50LUxlbmd0aDogMTEKKworYmxhYmxhYmxhCisKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIGFuZCAtRiB1cGxvYWQgaW4gY29uZmlnIGZpbGUKKyA8L25hbWU+Cis8c3RkaW4+CistRiBuYW1lPWRhbmllbAorLUYgdG9vbD1jdXJsCistRiBmaWxlPUBsb2cvdGVzdDcxLnR4dAorPC9zdGRpbj4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50LzcxIC1LIC0KKzwvY29tbWFuZD4KKyMgV2UgY3JlYXRlIHRoaXMgZmlsZSBiZWZvcmUgdGhlIGNvbW1hbmQgaXMgaW52b2tlZCEKKzxmaWxlIG5hbWU9ImxvZy90ZXN0NzEudHh0Ij4KK2Zvby0KK1RoaXMgaXMgYSBtb28tCitiYXIKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK14oVXNlci1BZ2VudDp8Q29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhO3wtLS0tLS0tLS0tLS0pLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQT1NUIC93ZS93YW50LzcxIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEwLjQgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNCBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDQwOA0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJuYW1lIg0KKw0KK2RhbmllbA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTllZjhkNjIwNTc2Mw0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0idG9vbCINCisNCitjdXJsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIjsgZmlsZW5hbWU9InRlc3Q3MS50eHQiDQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluDQorDQorZm9vLQorVGhpcyBpcyBhIG1vby0KK2JhcgorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzLS0NCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzEwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NGViNTAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3MTAKQEAgLTAsMCArMSw1NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorU09DS1M1Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDYKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCisKKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKK3NvY2tzNQorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEdFVCB2aWEgU09DS1M1IHNldCB3aXRoIC0tcHJveHkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNzEwIC0tcHJveHkgc29ja3M1Oi8vJUhPU1RJUDolU09DS1NQT1JUIAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzcxMCBIVFRQLzEuMQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzI0MjcxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzIKQEAgLTAsMCArMSw4NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBEaWdlc3QgYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09ImZvb3RoaXMiDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE5OSINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDI2DQorDQorVGhpcyBpcyBub3QgdGhlIHJlYWwgcGFnZQorPC9kYXRhPgorCisjIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgYQorIyBBdXRob3JpemF0aW9uOiBEaWdlc3QgbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50Cis8ZGF0YTEwMDA+CitIVFRQLzEuMSAyMDAgT0sNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyMw0KKw0KK1RoaXMgSVMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YTEwMDA+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZA0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iZm9vdGhpcyINCitXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09InRlc3RyZWFsbSIsIG5vbmNlPSIxMDUzNjA0MTk5Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjYNCisNCitIVFRQLzEuMSAyMDAgT0sNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAyMw0KKw0KK1RoaXMgSVMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorPGZlYXR1cmVzPgorY3J5cHRvCis8L2ZlYXR1cmVzPgorIDxuYW1lPgorSFRUUCB3aXRoIERpZ2VzdCAqT1IqIEJhc2ljIGF1dGhvcml6YXRpb24KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNzIgLXUgdGVzdHVzZXI6dGVzdHBhc3MgLS1hbnlhdXRoCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvNzIgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC83MiBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0idGVzdHVzZXIiLCByZWFsbT0idGVzdHJlYWxtIiwgbm9uY2U9IjEwNTM2MDQxOTkiLCB1cmk9Ii83MiIsIHJlc3BvbnNlPSI5ZmNkMTMzMDM3NzM2NWEwOWJiY2IzM2IyY2JiMjViZCINCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDczIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0NzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjMDgwMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDczCkBAIC0wLDAgKzEsNTUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK2Nvb2tpZXMKK2Nvb2tpZWphcgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK1NldC1Db29raWU6IElQQ1pRWDAxYWYwZmNhNWM9MDAwMDEwMDA4MTY4YzIwMGQyNWRmYzRiOyBwYXRoPS87IGRvbWFpbj0uTk9UX0RJU0NMT1NFRC5zZQ0KK0NvbnRlbnQtTGVuZ3RoOiA0DQorDQorYm9vCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCwgcmVjZWl2ZSBjb29raWVzIHdoZW4gdXNpbmcgY3VzdG9tIEhvc3Q6LCBkb21haW4gdXNpbmcgb25seSB0d28gZG90cworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50LzczIC1jIGxvZy9qYXI3My50eHQgLUggIkhvc3Q6IGhvc3QuTk9UX0RJU0NMT1NFRC5zZSIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93ZS93YW50LzczIEhUVFAvMS4xDQorQWNjZXB0OiAqLyoNCitIb3N0OiBob3N0Lk5PVF9ESVNDTE9TRUQuc2UNCisNCis8L3Byb3RvY29sPgorPGZpbGUgbmFtZT0ibG9nL2phcjczLnR4dCIgbW9kZT0idGV4dCI+CisjIE5ldHNjYXBlIEhUVFAgQ29va2llIEZpbGUKKyMgaHR0cDovL2N1cmwuaGF4eC5zZS9yZmMvY29va2llX3NwZWMuaHRtbAorIyBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBsaWJjdXJsISBFZGl0IGF0IHlvdXIgb3duIHJpc2suCisKKy5OT1RfRElTQ0xPU0VELnNlCVRSVUUJLwlGQUxTRQkwCUlQQ1pRWDAxYWYwZmNhNWMJMDAwMDEwMDA4MTY4YzIwMGQyNWRmYzRiCis8L2ZpbGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3NCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDc0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDhlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3NApAQCAtMCwwICsxLDc0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCit7fSBsaXN0Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZQorTGFzdC1Nb2RpZmllZDogVHVlLCAxMyBKdW4gMjAwMCAxMjoxMDowMCBHTVQKK0VUYWc6ICIyMTAyNS1kYzctMzk0NjI0OTgiCitBY2NlcHQtUmFuZ2VzOiBieXRlcworQ29udGVudC1MZW5ndGg6IDYKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworLWZvby0KKzwvZGF0YT4KKzxkYXRhMT4KK0hUVFAvMS4wIDIwMCBPSworQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHN3c2Nsb3NlCitDb25uZWN0aW9uOiBjbG9zZQorCitjcmFwIGRhdGEKKzwvZGF0YTE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCwgdXJsZ2xvYiB7fS1yZXRyaWV2YWwgYW5kIC1vICNbbnVtXSB1c2FnZQorIDwvbmFtZT4KKyA8Y29tbWFuZCBvcHRpb249Im5vLW91dHB1dCI+CisiaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3s3NCw3NDAwMDF9IiAtbyAibG9nL2R1bXBpdCMxLmR1bXAiCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvNzQgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC83NDAwMDEgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzxmaWxlIG5hbWU9ImxvZy9kdW1waXQ3NDAwMDEuZHVtcCI+CitIVFRQLzEuMCAyMDAgT0sKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiBzd3NjbG9zZQorQ29ubmVjdGlvbjogY2xvc2UKKworY3JhcCBkYXRhCis8L2ZpbGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3NSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDc1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZjY5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3NQpAQCAtMCwwICsxLDQ5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2h0dHAKKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQLCB1cmxnbG9iIHJldHJpZXZhbCB3aXRoIGJhZCByYW5nZQorIDwvbmFtZT4KKyA8Y29tbWFuZCBvcHRpb249Im5vLW91dHB1dCI+CisiaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL1syLTFdIiAtbyAibG9nL3dlZWUjMS5kdW1wIiAtLXN0ZGVyciAtCis8L2NvbW1hbmQ+CisjIFRoZSBlcnJvciBtZXNzYWdlIG9uIHN0ZG91dCBpbXBsaWNpdGx5IGRlcGVuZHMgb24gdGhlIGxlbmd0aCBvZiB0aGUKKyMgVVJMLCBzbyByZWZ1c2UgdG8gcnVuIGlmIHRoZSBsZW5ndGggaXMgdW5leHBlY3RlZC4KKzxwcmVjaGVjaz4KK3BlcmwgJVNSQ0RJUi9saWJ0ZXN0L3Rlc3Q3NS5wbCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvIDIyCis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8ZXJyb3Jjb2RlPgorMworPC9lcnJvcmNvZGU+Cis8c3Rkb3V0IG1vZGU9InRleHQiPgorY3VybDogKDMpIFtnbG9iYmluZ10gZXJyb3I6IGJhZCByYW5nZSBzcGVjaWZpY2F0aW9uIGFmdGVyIHBvcyAyNAorPC9zdGRvdXQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3NiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDc2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYTNhMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3NgpAQCAtMCwwICsxLDM5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK25vbmUKKzwvc2VydmVyPgorPGZlYXR1cmVzPgoraHR0cAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0hUVFAsIC1PIHdpdGggbm8gZmlsZSBuYW1lIHBhcnQgaW4gdGhlIFVSTAorIDwvbmFtZT4KKyA8Y29tbWFuZCBvcHRpb249Im5vLW91dHB1dCI+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvNzYvIC1PCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxlcnJvcmNvZGU+CisyMworPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3NyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDc3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZjQ1NjMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3NwpAQCAtMCwwICsxLDU1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCistegorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMYXN0LU1vZGlmaWVkOiBUdWUsIDEzIEp1biAyMDEwIDEyOjEwOjAwIEdNVAorRVRhZzogIjIxMDI1LWRjNy0zOTQ2MjQ5OCIKK0FjY2VwdC1SYW5nZXM6IGJ5dGVzCitDb250ZW50LUxlbmd0aDogNgorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKy1mb28tCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCB3aXRoIC16ICJvbGRlciBkYXRlIgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC83NyAteiAiZGVjIDEyIDEyOjAwOjAwIDE5OTkgR01UIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzc3IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0lmLU1vZGlmaWVkLVNpbmNlOiBTdW4sIDEyIERlYyAxOTk5IDEyOjAwOjAwIEdNVA0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3OCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDc4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhODg5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3OApAQCAtMCwwICsxLDY3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCistegorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDE5OTAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCistZm9vLQorPC9kYXRhPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBPSworU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCitMYXN0LU1vZGlmaWVkOiBUdWUsIDEzIEp1biAxOTkwIDEyOjEwOjAwIEdNVAorRVRhZzogIjIxMDI1LWRjNy0zOTQ2MjQ5OCIKK0FjY2VwdC1SYW5nZXM6IGJ5dGVzCitDb250ZW50LUxlbmd0aDogNgorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCB3aXRoIC16ICJuZXdlciBkYXRlIgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC83OCAteiAiZGVjIDEyIDExOjAwOjAwIDE5OTkgR01UIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzc4IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0lmLU1vZGlmaWVkLVNpbmNlOiBTdW4sIDEyIERlYyAxOTk5IDExOjAwOjAwIEdNVA0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3OSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDc5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNTY2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q3OQpAQCAtMCwwICsxLDU1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0ZUUAorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4wIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCitjb250ZW50cworPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2Z0cAorPC9mZWF0dXJlcz4KKyA8bmFtZT4KK0ZUUCBvdmVyIEhUVFAgcHJveHkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitmdHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50L3RoYXQvcGFnZS83OSAteCAlSE9TVElQOiVIVFRQUE9SVAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgZnRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC90aGF0L3BhZ2UvNzkgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTZlMDA0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0OApAQCAtMCwwICsxLDYzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitjb29raWVzCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKKworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCBjb29raWUgcGFyc2luZyBmcm9tIGhlYWRlciBmaWxlCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvOCAtYiBsb2cvaGVhZHM4LnR4dAorPC9jb21tYW5kPgorCisjIFdlIGNyZWF0ZSB0aGlzIGZpbGUgYmVmb3JlIHRoZSBjb21tYW5kIGlzIGludm9rZWQhCis8ZmlsZSBuYW1lPSJsb2cvaGVhZHM4LnR4dCI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKK1NldC1Db29raWU6IGZvb2Jhcj1uYW1lOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPS87CitTZXQtQ29va2llOiBtaXNtYXRjaD10aGlzOyBkb21haW49MTI3LjAuMC4xOyBwYXRoPSIvc2lsbHkvIjsKK1NldC1Db29raWU6IHBhcnRtYXRjaD1wcmVzZW50OyBkb21haW49LjAuMC4xOyBwYXRoPS93OworU2V0LUNvb2tpZTogZHVwbGljYXRlPXRlc3Q7IGRvbWFpbj0uMC4wLjE7IGRvbWFpbj0uMC4wLjE7IHBhdGg9L2RvbmtleTsKK1NldC1Db29raWU6IGNvb2tpZT15ZXM7IHBhdGg9L3dlOworU2V0LUNvb2tpZTogY29va2llPXBlcmhhcHM7IHBhdGg9L3dlL3dhbnQ7CitTZXQtQ29va2llOiBub2Nvb2tpZT15ZXM7IHBhdGg9L1dFOworU2V0LUNvb2tpZTogYmxleHA9eWVzeWVzOyBkb21haW49LjAuMC4xOyBkb21haW49LjAuMC4xOyBleHBpcnk9dG90YWxseSBiYWQ7CisKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC93ZS93YW50LzggSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29va2llOiBjb29raWU9cGVyaGFwczsgY29va2llPXllczsgcGFydG1hdGNoPXByZXNlbnQ7IGZvb2Jhcj1uYW1lOyBibGV4cD15ZXN5ZXMNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmExOTY5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODAKQEAgLTAsMCArMSw3OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBDT05ORUNUCitIVFRQIEJhc2ljIGF1dGgKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgQmFzaWMgYXV0aAorcHJveHl0dW5uZWwKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlIHN3c2Nsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCitDb250ZW50LUxlbmd0aDogOQorCitjb250ZW50cworPC9kYXRhPgorPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDIwMCBNaWdodHkgZmluZSBpbmRlZWQNCisNCitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKK0NvbnRlbnQtTGVuZ3RoOiA5CisKK2NvbnRlbnRzCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAoraHR0cC1wcm94eQorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIDEuMCBDT05ORUNUIHdpdGggcHJveHl0dW5uZWwgYW5kIHByb3h5K2hvc3QgQmFzaWMgYXV0aGVudGljYXRpb24KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC90aGF0L3BhZ2UvODAgLXAgLS1wcm94eTEuMCAlSE9TVElQOiVQUk9YWVBPUlQgLS11c2VyIGlhbTpteXNlbGYgLS1wcm94eS11c2VyIHlvdWFyZTp5b3Vyc2VsZgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJveHk+CitDT05ORUNUICVIT1NUSVA6JUhUVFBQT1JUIEhUVFAvMS4wDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBlVzkxWVhKbE9ubHZkWEp6Wld4bQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC43LXByZTIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNy1wcmUyIE9wZW5TU0wvMC45LjdhIHpsaWIvMS4xLjMNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm94eT4KKzxwcm90b2NvbD4KK0dFVCAvd2Uvd2FudC90aGF0L3BhZ2UvODAgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBCYXNpYyBhV0Z0T20xNWMyVnNaZz09DQorVXNlci1BZ2VudDogY3VybC83LjEwLjctcHJlMiAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC43LXByZTIgT3BlblNTTC8wLjkuN2EgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODAwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNDg1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDAKQEAgLTAsMCArMSw0NyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitQT1AzCitSRVRSCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0Zyb206IG1lQHNvbWV3aGVyZQ0KK1RvOiBmYWtlQG5vd2hlcmUNCisNCitib2R5DQorDQorLS0NCisgIHlvdXJzIHNpbmNlcmVseQ0KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorcG9wMworPC9zZXJ2ZXI+CisgPG5hbWU+CitQT1AzIFJFVFIKKyA8L25hbWU+CisgPGNvbW1hbmQ+Citwb3AzOi8vJUhPU1RJUDolUE9QM1BPUlQvODAwIC11IHVzZXI6c2VjcmV0Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIHVzZXINCitQQVNTIHNlY3JldA0KK1JFVFIgODAwDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcxZDhkMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgwMQpAQCAtMCwwICsxLDQ3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0lNQVAKK0ZFVENICis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0Zyb206IG1lQHNvbWV3aGVyZQorVG86IGZha2VAbm93aGVyZQorCitib2R5CisKKy0tCisgIHlvdXJzIHNpbmNlcmVseQorPC9kYXRhPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitpbWFwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0lNQVAgRkVUQ0gKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitpbWFwOi8vJUhPU1RJUDolSU1BUFBPUlQvODAxIC11IHVzZXI6c2VjcmV0Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitCIExPR0lOIHVzZXIgc2VjcmV0DQorQyBTRUxFQ1QgODAxDQorRCBGRVRDSCAxIEJPRFlbVEVYVF0NCitBIExPR09VVA0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlNDZjOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgwMgpAQCAtMCwwICsxLDUzIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NNVFAKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc210cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTTVRQCisgPC9uYW1lPgorPHN0ZGluPgorRnJvbTogZGlmZmVyZW50CitUbzogYW5vdGhlcgorCitib2R5Cis8L3N0ZGluPgorIDxjb21tYW5kPgorc210cDovLyVIT1NUSVA6JVNNVFBQT1JUL3VzZXIgLS1tYWlsLXJjcHQgODAyQGZvbyAtLW1haWwtcmNwdCA4MDJAZm9vYmFyLmV4YW1wbGUgLS1tYWlsLWZyb20gODAyQGZyb20gLVQgLQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorRUhMTyB1c2VyDQorTUFJTCBGUk9NOjw4MDJAZnJvbT4NCitSQ1BUIFRPOjw4MDJAZm9vPg0KK1JDUFQgVE86PDgwMkBmb29iYXIuZXhhbXBsZT4NCitEQVRBDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8dXBsb2FkPgorRnJvbTogZGlmZmVyZW50CitUbzogYW5vdGhlcgorCitib2R5CisNCisuDQorPC91cGxvYWQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwZWQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgwMwpAQCAtMCwwICsxLDY0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NNVFAKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc210cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTTVRQIHdpdGggQ1JMRi1kb3QtQ1JMRiBpbiBkYXRhCisgPC9uYW1lPgorPHN0ZGluPgorRnJvbTogZGlmZmVyZW50CitUbzogYW5vdGhlcgorCisNCisuDQorLg0KKw0KKy4NCisKK2JvZHkKKzwvc3RkaW4+CisgPGNvbW1hbmQ+CitzbXRwOi8vJUhPU1RJUDolU01UUFBPUlQvdXNlciAtLW1haWwtcmNwdCA4MDNAZm9vIC0tbWFpbC1mcm9tICc8ODAzQGZyb20+JyAtVCAtCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitFSExPIHVzZXINCitNQUlMIEZST006PDgwM0Bmcm9tPg0KK1JDUFQgVE86PDgwM0Bmb28+DQorREFUQQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPHVwbG9hZD4KK0Zyb206IGRpZmZlcmVudAorVG86IGFub3RoZXIKKworDQorLi4NCisuLg0KKw0KKy4uDQorCitib2R5CisNCisuDQorPC91cGxvYWQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhY2ZjNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgwNApAQCAtMCwwICsxLDU5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NNVFAKK1NNVFAgSEVMTworUkZDODIxCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2VydmVyY21kPgorUkVQTFkgRUhMTyA1MDAgQ29tbWFuZCB1bnJlY29nbml6ZWQKK1JFUExZIEhFTE8gMjUwIEFscmVhZHkgb2xkIGJ1dCBzdGlsbCBzZXJ2aWNpbmcuLi4KKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzbXRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1JGQzgyMS1vbmx5IFNNVFAgc2VydmVyIChFSExPIG5vdCBzdXBwb3J0ZWQpCisgPC9uYW1lPgorPHN0ZGluPgorRnJvbTogZGlmZmVyZW50CitUbzogYW5vdGhlcgorCitib2R5Cis8L3N0ZGluPgorIDxjb21tYW5kPgorc210cDovLyVIT1NUSVA6JVNNVFBQT1JUL3VzZXIgLS1tYWlsLXJjcHQgODA0QGZvbyAtLW1haWwtZnJvbSA4MDRAZnJvbSAtVCAtCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitFSExPIHVzZXINCitIRUxPIHVzZXINCitNQUlMIEZST006PDgwNEBmcm9tPg0KK1JDUFQgVE86PDgwNEBmb28+DQorREFUQQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPHVwbG9hZD4KK0Zyb206IGRpZmZlcmVudAorVG86IGFub3RoZXIKKworYm9keQorDQorLg0KKzwvdXBsb2FkPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODA1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODA1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTUyMjEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDUKQEAgLTAsMCArMSw1NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTTVRQCitTTVRQIEFVVEggUExBSU4KK1JGQzQ2MTYKK1JGQzQ5NTQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBFSExPIDIyMCBBVVRIIFBMQUlOCitSRVBMWSBBVVRIIDIzNSBBdXRoZW50aWNhdGVkCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc210cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitTTVRQIHBsYWluIGF1dGhlbnRpY2F0aW9uCisgPC9uYW1lPgorPHN0ZGluPgorbWFpbCBib2R5Cis8L3N0ZGluPgorIDxjb21tYW5kPgorc210cDovLyVIT1NUSVA6JVNNVFBQT1JUL3VzZXIgLS1tYWlsLXJjcHQgODA1QGZvbyAtLW1haWwtZnJvbSA4MDVAZnJvbSAtdSB0ZXN0OjEyMzQgLVQgLQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorRUhMTyB1c2VyDQorQVVUSCBQTEFJTiBkR1Z6ZEFCMFpYTjBBREV5TXpRPQ0KK01BSUwgRlJPTTo8ODA1QGZyb20+DQorUkNQVCBUTzo8ODA1QGZvbz4NCitEQVRBDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8dXBsb2FkPgorbWFpbCBib2R5CisNCisuDQorPC91cGxvYWQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDYgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxYWM1YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgwNgpAQCAtMCwwICsxLDU1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1NNVFAKK1NNVFAgQVVUSCBMT0dJTgorUkZDNDk1NAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNlcnZlcmNtZD4KK1JFUExZIEVITE8gMjIwIEFVVEggTE9HSU4KK1JFUExZIEFVVEggMzM0IFVHRnpjM2R2Y21RNgorUkVQTFkgTVRJek5BPT0gMjM1IEF1dGhlbnRpY2F0ZWQKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzbXRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NNVFAgbG9naW4gYXV0aGVudGljYXRpb24KKyA8L25hbWU+Cis8c3RkaW4+CittYWlsIGJvZHkKKzwvc3RkaW4+CisgPGNvbW1hbmQ+CitzbXRwOi8vJUhPU1RJUDolU01UUFBPUlQvdXNlciAtLW1haWwtcmNwdCA4MDZAZm9vIC0tbWFpbC1mcm9tIDgwNkBmcm9tIC11IHRlc3Q6MTIzNCAtVCAtCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitFSExPIHVzZXINCitBVVRIIExPR0lOIGRHVnpkQT09DQorTVRJek5BPT0NCitNQUlMIEZST006PDgwNkBmcm9tPg0KK1JDUFQgVE86PDgwNkBmb28+DQorREFUQQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPHVwbG9hZD4KK21haWwgYm9keQorDQorLg0KKzwvdXBsb2FkPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODA3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODA3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzFmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MDcKQEAgLTAsMCArMSw1OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitTTVRQCitTTVRQIEFVVEggQ1JBTS1NRDUKK1JGQzIxOTUKK1JGQzQ5NTQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzZXJ2ZXJjbWQ+CitSRVBMWSBFSExPIDIyMCBBVVRIIENSQU0tTUQ1CitSRVBMWSBBVVRIIDMzNCBQREU0T1RZdU5qazNNVGN3T1RVeVFIQnZjM1J2Wm1acFkyVXVjbVZ6ZEc5dUxtMWphUzV1WlhRKworUkVQTFkgZEdsdElHSTVNVE5oTmpBeVl6ZGxaR0UzWVRRNU5XSTBaVFpsTnpNek5HUXpPRGt3IDIzNSBBdXRoZW50aWNhdGVkCis8L3NlcnZlcmNtZD4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorc210cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitjcnlwdG8KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitTTVRQIENSQU0tTUQ1IGF1dGhlbnRpY2F0aW9uCisgPC9uYW1lPgorPHN0ZGluPgorbWFpbCBib2R5Cis8L3N0ZGluPgorIDxjb21tYW5kPgorc210cDovLyVIT1NUSVA6JVNNVFBQT1JUL3VzZXIgLS1tYWlsLXJjcHQgODA3QGZvbyAtLW1haWwtZnJvbSA4MDdAZnJvbSAtdSB0aW06dGFuc3RhYWZ0YW5zdGFhZiAtVCAtCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitFSExPIHVzZXINCitBVVRIIENSQU0tTUQ1DQorZEdsdElHSTVNVE5oTmpBeVl6ZGxaR0UzWVRRNU5XSTBaVFpsTnpNek5HUXpPRGt3DQorTUFJTCBGUk9NOjw4MDdAZnJvbT4NCitSQ1BUIFRPOjw4MDdAZm9vPg0KK0RBVEENCitRVUlUDQorPC9wcm90b2NvbD4KKzx1cGxvYWQ+CittYWlsIGJvZHkKKw0KKy4NCis8L3VwbG9hZD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgwOCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTY4MDFjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODA4CkBAIC0wLDAgKzEsNDEgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorUE9QMworTElTVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNlcnZlcmNtZD4KK1JFUExZIExJU1QgK09LIDgwOCAxMDAKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citwb3AzCis8L3NlcnZlcj4KKyA8bmFtZT4KK1BPUDMgTElTVCBvbmUgbWVzc2FnZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK3BvcDM6Ly8lSE9TVElQOiVQT1AzUE9SVC84MDggLWwgLXUgdXNlcjpzZWNyZXQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgdXNlcg0KK1BBU1Mgc2VjcmV0DQorTElTVCA4MDgNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgwOSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTM1OGUwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODA5CkBAIC0wLDAgKzEsNDUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorUE9QMworTElTVAorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNlcnZlcmNtZD4KK1JFUExZIExJU1QgLUVSUiBubyBzdWNoIG1lc3NhZ2UKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citwb3AzCis8L3NlcnZlcj4KKyA8bmFtZT4KK1BPUDMgTElTVCBpbnZhbGlkIG1lc3NhZ2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+Citwb3AzOi8vJUhPU1RJUDolUE9QM1BPUlQvODA5IC1sIC11IHVzZXI6c2VjcmV0Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNzgKKzwvZXJyb3Jjb2RlPgorPHByb3RvY29sPgorVVNFUiB1c2VyDQorUEFTUyBzZWNyZXQNCitMSVNUIDgwOQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGEwYmRjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODEKQEAgLTAsMCArMSwxMDEgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgcHJveHkKK0hUVFAgcHJveHkgTlRMTSBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjIFNlcnZlci1zaWRlCis8cmVwbHk+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyBhIGZpcnN0CisjIEF1dGhvcml6YXRpb246IE5UTE0gbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50Cis8ZGF0YTEwMDE+CitIVFRQLzEuMSA0MDcgTm93IGdpbW1lIHRoYXQgc2Vjb25kIHJlcXVlc3Qgb2YgY3JhcA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDM0DQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UgZWl0aGVyIQorPC9kYXRhMTAwMT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIHRoZSBzZWNvbmQKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMj4KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gc2VydmVyIGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzMg0KKw0KK0ZpbmFsbHksIHRoaXMgaXMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YTEwMDI+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDcgTm93IGdpbW1lIHRoYXQgc2Vjb25kIHJlcXVlc3Qgb2YgY3JhcA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDM0DQorUHJveHktQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gc2VydmVyIGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzMg0KKw0KK0ZpbmFsbHksIHRoaXMgaXMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorTlRMTQorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCBwcm94eSB1c2luZyBOVExNIGF1dGhvcml6YXRpb24KKyA8L25hbWU+CisgPHNldGVudj4KKyMgd2UgZm9yY2Ugb3VyIG93biBob3N0IG5hbWUsIGluIG9yZGVyIHRvIG1ha2UgdGhlIHRlc3QgbWFjaGluZSBpbmRlcGVuZGVudAorQ1VSTF9HRVRIT1NUTkFNRT1jdXJsaG9zdAorIyB3ZSB0cnkgdG8gdXNlIHRoZSBMRF9QUkVMT0FEIGhhY2ssIGlmIG5vdCBhIGRlYnVnIGJ1aWxkCitMRF9QUkVMT0FEPSVQV0QvbGlidGVzdC8ubGlicy9saWJob3N0bmFtZS5zbworIDwvc2V0ZW52PgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzgxIC0tcHJveHktdXNlciB0ZXN0dXNlcjp0ZXN0cGFzcyAteCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQgLS1wcm94eS1udGxtCis8L2NvbW1hbmQ+Cis8cHJlY2hlY2s+CitjaGtob3N0bmFtZSBjdXJsaG9zdAorPC9wcmVjaGVjaz4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC84MSBIVFRQLzEuMQ0KK1Byb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KK0dFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvODEgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQVlBQmdBV0FBQUFBQUFBQUJ3QUFBQUNBQUlBSEFBQUFBSUFBZ0FlQUFBQUFBQUFBQUFBQUFBQm9LQkFGcGtRd0tSQ1pGTWhqajB0dzQ3d0VqS0hSSGx2emZ4UWFtRmNoZU11djh2K3hlcXBoRU81VjQxeFJkN1I5ZGVPWFJsYzNSMWMyVnlZM1Z5YkdodmMzUT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MTAgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmOTU2MgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgxMApAQCAtMCwwICsxLDUwIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1BPUDMKK0xJU1QKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKyMgV2UgdXNlIFNMT1dET1dOIHRvIHJlYWxseSBleGVyY2lzZSB0aGUgZW5kLW9mLWJvZHkgcGFyc2luZyBvdmVyIG11bHRpcGxlCisjIHBhY2tldHMKKzxzZXJ2ZXJjbWQ+CitTTE9XRE9XTgorPC9zZXJ2ZXJjbWQ+CisjIFdoZW4gZG9pbmcgTElTVCwgd2UgZ2V0IHRoZSBkZWZhdWx0IGxpc3Qgb3V0cHV0IGhhcmQtY29kZWQgaW4gdGhlIHRlc3QKKyMgUE9QMyBzZXJ2ZXIKKzxkYXRhY2hlY2s+CisxIDEwMA0KKzIgNDI5NDk2NzQwMA0KKzQgMjAwDQorPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK3BvcDMKKzwvc2VydmVyPgorIDxuYW1lPgorUE9QMyBMSVNUIG1lc3NhZ2VzIGZyb20gKlNMT1cqIHNlcnZlcgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK3BvcDM6Ly8lSE9TVElQOiVQT1AzUE9SVC8gLXUgdXNlcjpzZWNyZXQKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxwcm90b2NvbD4KK1VTRVIgdXNlcg0KK1BBU1Mgc2VjcmV0DQorTElTVA0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODExIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMTA3YWIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MTEKQEAgLTAsMCArMSw0MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitQT1AzCitMSVNUCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2VydmVyY21kPgorUkVQTFkgTElTVCArT0sgYnV0IG5vIG1lc3NhZ2VzXHJcbi4KKzwvc2VydmVyY21kPgorPGRhdGFjaGVjaz4KKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citwb3AzCis8L3NlcnZlcj4KKyA8bmFtZT4KK1BPUDMgTElTVCBubyBtZXNzYWdlcyBhdmFpbGFibGUKKyA8L25hbWU+CisgPGNvbW1hbmQ+Citwb3AzOi8vJUhPU1RJUDolUE9QM1BPUlQvIC11IHVzZXI6c2VjcmV0Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8cHJvdG9jb2w+CitVU0VSIHVzZXINCitQQVNTIHNlY3JldA0KK0xJU1QNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgxMiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjJhODM2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODEyCkBAIC0wLDAgKzEsNDUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorUE9QMworUkVUUgorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPHNlcnZlcmNtZD4KK1JFUExZIFJFVFIgLUVSUiBubyBzdWNoIG1lc3NhZ2UKKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citwb3AzCis8L3NlcnZlcj4KKyA8bmFtZT4KK1BPUDMgUkVUUiBpbnZhbGlkIG1lc3NhZ2UKKyA8L25hbWU+CisgPGNvbW1hbmQ+Citwb3AzOi8vJUhPU1RJUDolUE9QM1BPUlQvODEyIC11IHVzZXI6c2VjcmV0Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNTYKKzwvZXJyb3Jjb2RlPgorPHByb3RvY29sPgorVVNFUiB1c2VyDQorUEFTUyBzZWNyZXQNCitSRVRSIDgxMg0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODEzIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NTNhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MTMKQEAgLTAsMCArMSw0MyBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitQT1AzCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8c2VydmVyY21kPgorUkVQTFkgUEFTUyAtRVJSIGludmFsaWQgbG9naW4KKzwvc2VydmVyY21kPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citwb3AzCis8L3NlcnZlcj4KKyA8bmFtZT4KK1BPUDMgaW52YWxpZCBsb2dpbgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK3BvcDM6Ly8lSE9TVElQOiVQT1AzUE9SVC84MTMgLXUgdXNlcjp3cm9uZworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzY3Cis8L2Vycm9yY29kZT4KKzxwcm90b2NvbD4KK1VTRVIgdXNlcg0KK1BBU1Mgd3JvbmcNCitRVUlUDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgxNCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgxNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmMwNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODE0CkBAIC0wLDAgKzEsNTIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorU01UUAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitzbXRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK1NNVFAgd2l0aG91dCAtLW1haWwtZnJvbQorIDwvbmFtZT4KKzxzdGRpbj4KK0Zyb206IGRpZmZlcmVudAorVG86IGFub3RoZXIKKworYm9keQorPC9zdGRpbj4KKyA8Y29tbWFuZD4KK3NtdHA6Ly8lSE9TVElQOiVTTVRQUE9SVC91c2VyIC0tbWFpbC1yY3B0IDgxNEBmb28gLVQgLQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorRUhMTyB1c2VyDQorTUFJTCBGUk9NOjw+DQorUkNQVCBUTzo8ODE0QGZvbz4NCitEQVRBDQorUVVJVA0KKzwvcHJvdG9jb2w+Cis8dXBsb2FkPgorRnJvbTogZGlmZmVyZW50CitUbzogYW5vdGhlcgorCitib2R5CisNCisuDQorPC91cGxvYWQ+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MTUgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3YjFiNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgxNQpAQCAtMCwwICsxLDU4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK1BPUDMKK1JFVFIKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorRnJvbTogbWVAc29tZXdoZXJlDQorVG86IGZha2VAbm93aGVyZQ0KKw0KKy4uYm9keSB3aXRoIGEgc2luZ2xlIGRvdCBmaXJzdA0KKy4uLnRyaXBsZSBkb3RzLi4uDQorDQorLS0NCisgIHlvdXJzIHNpbmNlcmVseQ0KKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitGcm9tOiBtZUBzb21ld2hlcmUNCitUbzogZmFrZUBub3doZXJlDQorDQorLmJvZHkgd2l0aCBhIHNpbmdsZSBkb3QgZmlyc3QNCisuLnRyaXBsZSBkb3RzLi4uDQorDQorLS0NCisgIHlvdXJzIHNpbmNlcmVseQ0KKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citwb3AzCis8L3NlcnZlcj4KKyA8bmFtZT4KK1BPUDMgUkVUUiB3aXRoIGRvdC1wcmVmaXhlZCBsaW5lCisgPC9uYW1lPgorIDxjb21tYW5kPgorcG9wMzovLyVIT1NUSVA6JVBPUDNQT1JULzgxNSAtdSB1c2VyOnNlY3JldAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorVVNFUiB1c2VyDQorUEFTUyBzZWNyZXQNCitSRVRSIDgxNQ0KK1FVSVQNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODIgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTgwMGJiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODIKQEAgLTAsMCArMSw1NiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBwcm94eQorSFRUUCBwcm94eSBCYXNpYyBhdXRoCitIVFRQIHByb3h5IE5UTE0gYXV0aAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworPGRhdGE+CitIVFRQLzEuMSA0MDcgV2Ugb25seSBkZWFsIHdpdGggTlRMTSBteSBmcmllbmQNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KK1Byb3h5LUF1dGhlbnRpY2F0ZTogTlRMTQorDQorVGhpcyBpcyBub3QgdGhlIHJlYWwgcGFnZSBlaXRoZXIhCis8L2RhdGE+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8ZmVhdHVyZXM+Cis8L2ZlYXR1cmVzPgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCB3aXRoIHByb3h5IHJlcXVpcmluZyBOVExNLCBidXQgd2Ugc2VuZCBCYXNpYworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC84MiAtLXByb3h5LXVzZXIgdGVzdHVzZXI6dGVzdHBhc3MgLXggaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvODIgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBkR1Z6ZEhWelpYSTZkR1Z6ZEhCaGMzTT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMTVjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4MwpAQCAtMCwwICsxLDc1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIENPTk5FQ1QKK0hUVFAgQmFzaWMgYXV0aAorcHJveHl0dW5uZWwKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworQ29udGVudC1MZW5ndGg6IDkKKworY29udGVudHMKKzwvZGF0YT4KKzxkYXRhY2hlY2s+CitIVFRQLzEuMSAyMDAgTWlnaHR5IGZpbmUgaW5kZWVkDQorDQorSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlIHN3c2Nsb3NlCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogeWVzeWVzCitDb250ZW50LUxlbmd0aDogOQorCitjb250ZW50cworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKK2h0dHAtcHJveHkKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBvdmVyIHByb3h5LXR1bm5lbCB3aXRoIHNpdGUgYXV0aGVudGljYXRpb24KKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC90aGF0L3BhZ2UvODMgLXAgLXggJUhPU1RJUDolUFJPWFlQT1JUIC0tdXNlciBpYW06bXlzZWxmCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm94eT4KK0NPTk5FQ1QgJUhPU1RJUDolSFRUUFBPUlQgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNy1wcmUyIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjctcHJlMiBPcGVuU1NMLzAuOS43YSB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm94eT4KKzxwcm90b2NvbD4KK0dFVCAvd2Uvd2FudC90aGF0L3BhZ2UvODMgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBCYXNpYyBhV0Z0T20xNWMyVnNaZz09DQorVXNlci1BZ2VudDogY3VybC83LjEwLjctcHJlMiAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC43LXByZTIgT3BlblNTTC8wLjkuN2EgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGJmMTY0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODQKQEAgLTAsMCArMSw1NCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBCYXNpYyBhdXRoCitIVFRQIHByb3h5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMCAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworY29udGVudHMKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIG92ZXIgcHJveHkgd2l0aCBzaXRlIGF1dGhlbnRpY2F0aW9uCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvdGhhdC9wYWdlLzg0IC14ICVIT1NUSVA6JUhUVFBQT1JUIC0tdXNlciBpYW06bXlzZWxmCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC90aGF0L3BhZ2UvODQgSFRUUC8xLjENCitBdXRob3JpemF0aW9uOiBCYXNpYyBhV0Z0T20xNWMyVnNaZz09DQorVXNlci1BZ2VudDogY3VybC83LjEwLjctcHJlMiAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC43LXByZTIgT3BlblNTTC8wLjkuN2EgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDg1IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkMWEzYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDg1CkBAIC0wLDAgKzEsNTggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgQmFzaWMgYXV0aAorSFRUUCBwcm94eQorSFRUUCBwcm94eSBCYXNpYyBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworQ29udGVudC1MZW5ndGg6IDkKKworY29udGVudHMKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIG92ZXIgcHJveHkgd2l0aCBzaXRlIGFuZCBwcm94eSBhdXRoZW50aWNhdGlvbgorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50L3RoYXQvcGFnZS84NSAteCAlSE9TVElQOiVIVFRQUE9SVCAtLXVzZXIgaWFtOm15c2VsZiAtLXByb3h5LXVzZXIgdGVzdGluZzp0aGlzCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC90aGF0L3BhZ2UvODUgSFRUUC8xLjENCitQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBkR1Z6ZEdsdVp6cDBhR2x6DQorQXV0aG9yaXphdGlvbjogQmFzaWMgYVdGdE9tMTVjMlZzWmc9PQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC43LXByZTIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNy1wcmUyIE9wZW5TU0wvMC45LjdhIHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4NiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDg2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYzI4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4NgpAQCAtMCwwICsxLDk2IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitbXSByYW5nZQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UKK0xhc3QtTW9kaWZpZWQ6IFR1ZSwgMTMgSnVuIDIwMDAgMTI6MTA6MDAgR01UCitFVGFnOiAiMjEwMjUtZGM3LTM5NDYyNDk4IgorQWNjZXB0LVJhbmdlczogYnl0ZXMKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworCistZm9vLQorPC9kYXRhPgorPGRhdGExPgorSFRUUC8xLjAgMjAwIE9LCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogc3dzY2xvc2UKKworY3JhcCBkYXRhCis8L2RhdGExPgorPGRhdGEyPgorSFRUUC8xLjAgMjAwIE9LCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogc3dzY2xvc2UKKworY3JhcCBkYXRhCis8L2RhdGEyPgorPGRhdGEzPgorSFRUUC8xLjAgMjAwIE9LCitDb250ZW50LVR5cGU6IHRleHQvaHRtbAorRnVubnktaGVhZDogc3dzY2xvc2UKKworY3JhcCBkYXRhCis8L2RhdGEzPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAsIHVybGdsb2IgW10tcmV0cmlldmFsIGFuZCAtbyAjW251bV0gdXNhZ2UKKyA8L25hbWU+CisgPGNvbW1hbmQgb3B0aW9uPSJuby1vdXRwdXQiPgorImh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC9bODYwMDAxLTg2MDAwM10iIC1vICJsb2cvZHVtcGl0IzEuZHVtcCIKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC84NjAwMDEgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNy1wcmU0IChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjctcHJlNCBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMgR1NTDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvODYwMDAyIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEwLjctcHJlNCAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC43LXByZTQgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zIEdTUw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzg2MDAwMyBIVFRQLzEuMQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC43LXByZTQgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNy1wcmU0IE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMyBHU1MNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKworIyB3ZSBjaGVjayB0aGUgc2Vjb25kIGZpbGUKKzxmaWxlIG5hbWU9ImxvZy9kdW1waXQ4NjAwMDIuZHVtcCI+CitIVFRQLzEuMCAyMDAgT0sKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiBzd3NjbG9zZQorCitjcmFwIGRhdGEKKzwvZmlsZT4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDg3IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBiMjc0YgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDg3CkBAIC0wLDAgKzEsMzYgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorW10gcmFuZ2UKK0ZBSUxVUkUKKzwva2V5d29yZHM+Cis8L2luZm8+CisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8L3JlcGx5PgorIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK2h0dHAKKzwvZmVhdHVyZXM+CisgPG5hbWU+Cit1cmxnbG9iIHdpdGggYmFkIC1vICNbbnVtXSB1c2FnZQorIDwvbmFtZT4KKyA8Y29tbWFuZCBvcHRpb249Im5vLW91dHB1dCI+CisiaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL1s4NzAwMDEtODcwMDAzXSIgLW8gImxvZy9kdW1waXQjMi5kdW1wIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzIKKzwvZXJyb3Jjb2RlPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODggYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDk1YWVjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODgKQEAgLTAsMCArMSwxMDEgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBQVVQKK0hUVFAgRGlnZXN0IGF1dGgKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzZXJ2ZXJjbWQ+CithdXRoX3JlcXVpcmVkCis8L3NlcnZlcmNtZD4KKzxkYXRhPgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NSINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlCis8L2RhdGE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyBhCisjIEF1dGhvcml6YXRpb246IERpZ2VzdCBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMD4KK0hUVFAvMS4xIDIwMCBPSyBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitUaGlzIElTIHRoZSByZWFsIHBhZ2UhCis8L2RhdGExMDAwPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NSINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29ubmVjdGlvbjogY2xvc2UNCisNCitIVFRQLzEuMSAyMDAgT0sgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0Nvbm5lY3Rpb246IGNsb3NlDQorDQorVGhpcyBJUyB0aGUgcmVhbCBwYWdlIQorPC9kYXRhY2hlY2s+CisKKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitjcnlwdG8KKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQIFBVVCB3aXRoIERpZ2VzdCBhdXRob3JpemF0aW9uCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzg4IC1UIGxvZy9wdXQ4OCAtdSB0ZXN0dXNlcjp0ZXN0cGFzcyAtLWRpZ2VzdAorPC9jb21tYW5kPgorPGZpbGUgbmFtZT0ibG9nL3B1dDg4Ij4KK1RoaXMgaXMgZGF0YSB3ZSB1cGxvYWQgd2l0aCBQVVQKK2Egc2Vjb25kIGxpbmUKK2xpbmUgdGhyZWUKK2ZvdXIgaXMgdGhlIG51bWJlciBvZiBsaW5lcworPC9maWxlPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQVVQgLzg4IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorRXhwZWN0OiAxMDAtY29udGludWUNCisNCitQVVQgLzg4IEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJ0ZXN0dXNlciIsIHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NSIsIHVyaT0iLzg4IiwgcmVzcG9uc2U9Ijc4YTQ5ZmE1M2QwYzIyODc3ODI5NzY4N2Q0MTY4ZTcxIg0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC41IChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjUgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiA4NQ0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorDQorVGhpcyBpcyBkYXRhIHdlIHVwbG9hZCB3aXRoIFBVVAorYSBzZWNvbmQgbGluZQorbGluZSB0aHJlZQorZm91ciBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q4OQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzQ4ZWI2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0ODkKQEAgLTAsMCArMSwxNDUgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgTlRMTSBhdXRoCitmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworPCEtLSBubyA8ZGF0YT4gaW4gdGhpcyB0ZXN0IHNpbmNlIHdlIGhhdmUgTlRMTSBmcm9tIHRoZSBzdGFydAorCitUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIGEgZmlyc3QKK0F1dGhvcml6YXRpb246IE5UTE0gbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50IC0tPgorCis8ZGF0YTEwMDE+CitIVFRQLzEuMSA0MDEgTm93IGdpbW1lIHRoYXQgc2Vjb25kIHJlcXVlc3Qgb2YgY3JhcA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDM0DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlIGVpdGhlciEKKzwvZGF0YTEwMDE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyB0aGUgc2Vjb25kCisjIEF1dGhvcml6YXRpb246IE5UTE0gbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50Cis8ZGF0YTEwMDI+CitIVFRQLzEuMSAzMDEgVGhpbmdzIGFyZSBmaW5lIGluIHNlcnZlciBsYW5kIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorTG9jYXRpb246IC95b3UvODkwMDEwDQorDQorPC9kYXRhMTAwMj4KKworIyBUaGlzIGlzIHRoZSBmaXJzdCByZXBseSBhZnRlciB0aGUgcmVkaXJlY3Rpb24KKzxkYXRhMTAxMT4KK0hUVFAvMS4xIDQwMSBOb3cgZ2ltbWUgdGhhdCBzZWNvbmQgcm91bmQgb2YgY3JhcA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDM0DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlIGVpdGhlciEKKzwvZGF0YTEwMTE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyB0aGUgc2Vjb25kCisjIEF1dGhvcml6YXRpb246IE5UTE0gbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50Cis8ZGF0YTEwMTI+CitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHNlcnZlciBsYW5kIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMzINCisNCitGaW5hbGx5LCB0aGlzIGlzIHRoZSByZWFsIHBhZ2UhCis8L2RhdGExMDEyPgorCis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgNDAxIE5vdyBnaW1tZSB0aGF0IHNlY29uZCByZXF1ZXN0IG9mIGNyYXANCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KK1dXVy1BdXRoZW50aWNhdGU6IE5UTE0gVGxSTVRWTlRVQUFDQUFBQUFnQUNBREFBQUFBR2dvRUFjNTFBWVZEZ3lOY0FBQUFBQUFBQUFHNEFiZ0F5QUFBQVEwTUNBQVFBUXdCREFBRUFFZ0JGQUV3QVNRQlRBRUVBUWdCRkFGUUFTQUFFQUJnQVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQXdBc0FHVUFiQUJwQUhNQVlRQmlBR1VBZEFCb0FDNEFZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUFBQUFBQT09DQorDQorSFRUUC8xLjEgMzAxIFRoaW5ncyBhcmUgZmluZSBpbiBzZXJ2ZXIgbGFuZCBzd3NjbG9zZQ0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb25uZWN0aW9uOiBjbG9zZQ0KK0xvY2F0aW9uOiAveW91Lzg5MDAxMA0KKw0KK0hUVFAvMS4xIDQwMSBOb3cgZ2ltbWUgdGhhdCBzZWNvbmQgcm91bmQgb2YgY3JhcA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDM0DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitIVFRQLzEuMSAyMDAgVGhpbmdzIGFyZSBmaW5lIGluIHNlcnZlciBsYW5kIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMzINCisNCitGaW5hbGx5LCB0aGlzIGlzIHRoZSByZWFsIHBhZ2UhCis8L2RhdGFjaGVjaz4KKworPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxmZWF0dXJlcz4KK05UTE0KKzwvZmVhdHVyZXM+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHdpdGggTlRMTSBhbmQgZm9sbG93LWxvY2F0aW9uCisgPC9uYW1lPgorIDxzZXRlbnY+CisjIHdlIGZvcmNlIG91ciBvd24gaG9zdCBuYW1lLCBpbiBvcmRlciB0byBtYWtlIHRoZSB0ZXN0IG1hY2hpbmUgaW5kZXBlbmRlbnQKK0NVUkxfR0VUSE9TVE5BTUU9Y3VybGhvc3QKKyMgd2UgdHJ5IHRvIHVzZSB0aGUgTERfUFJFTE9BRCBoYWNrLCBpZiBub3QgYSBkZWJ1ZyBidWlsZAorTERfUFJFTE9BRD0lUFdEL2xpYnRlc3QvLmxpYnMvbGliaG9zdG5hbWUuc28KKyA8L3NldGVudj4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC84OSAtdSB0ZXN0dXNlcjp0ZXN0cGFzcyAtLW50bG0gLUwKKzwvY29tbWFuZD4KKzxwcmVjaGVjaz4KK2Noa2hvc3RuYW1lIGN1cmxob3N0Cis8L3ByZWNoZWNrPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgLzg5IEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC42LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNi1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgLzg5IEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQURBQUFBR0FBWUFFQUFBQUFZQUJnQVdBQUFBQUFBQUFCd0FBQUFDQUFJQUhBQUFBQUlBQWdBZUFBQUFBQUFBQUFBQUFBQUJvS0JBRnBrUXdLUkNaRk1oamowdHc0N3dFaktIUkhsdnpmeFFhbUZjaGVNdXY4dit4ZXFwaEVPNVY0MXhSZDdSOWRlT1hSbGMzUjFjMlZ5WTNWeWJHaHZjM1E9DQorVXNlci1BZ2VudDogY3VybC83LjEwLjYtcHJlMSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC42LXByZTEgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAveW91Lzg5MDAxMCBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuOC1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjgtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMgR1NTDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAveW91Lzg5MDAxMCBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRUFBQUFBWUFCZ0FXQUFBQUFBQUFBQndBQUFBQ0FBSUFIQUFBQUFJQUFnQWVBQUFBQUFBQUFBQUFBQUFCb0tCQUZwa1F3S1JDWkZNaGpqMHR3NDd3RWpLSFJIbHZ6ZnhRYW1GY2hlTXV2OHYreGVxcGhFTzVWNDF4UmQ3UjlkZU9YUmxjM1IxYzJWeVkzVnliR2h2YzNRPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC44LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuOC1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMyBHU1MNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDkgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MDVhYzgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q5CkBAIC0wLDAgKzEsNzMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBGT1JNUE9TVAorSFRUUCBmaWxlIHVwbG9hZAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjAgMjAwIE9LIHN3c2Nsb3NlCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCisKK2JsYWJsYWJsYQorCis8L2RhdGE+Cis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBSRkMxODY3LXR5cGUgZm9ybXBvc3RpbmcKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC85IC1GIG5hbWU9ZGFuaWVsIC1GIHRvb2w9Y3VybCAtRiBmaWxlPUBsb2cvdGVzdDkudHh0Cis8L2NvbW1hbmQ+CisjIFdlIGNyZWF0ZSB0aGlzIGZpbGUgYmVmb3JlIHRoZSBjb21tYW5kIGlzIGludm9rZWQhCis8ZmlsZSBuYW1lPSJsb2cvdGVzdDkudHh0Ij4KK2Zvby0KK1RoaXMgaXMgYSBtb28tCitiYXIKKzwvZmlsZT4KKzwvY2xpZW50PgorCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK14oVXNlci1BZ2VudDp8Q29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhO3wtLS0tLS0tLS0tLS0pLioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQT1NUIC93ZS93YW50LzkgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNCAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC40IE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitDb250ZW50LUxlbmd0aDogNDA3DQorRXhwZWN0OiAxMDAtY29udGludWUNCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS05ZWY4ZDYyMDU3NjMNCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS05ZWY4ZDYyMDU3NjMNCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9Im5hbWUiDQorDQorZGFuaWVsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOWVmOGQ2MjA1NzYzDQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJ0b29sIg0KKw0KK2N1cmwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS05ZWY4ZDYyMDU3NjMNCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImZpbGUiOyBmaWxlbmFtZT0idGVzdDkudHh0Ig0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbg0KKw0KK2Zvby0KK1RoaXMgaXMgYSBtb28tCitiYXIKKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTllZjhkNjIwNTc2My0tDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDkwIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRhN2ZmNAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDkwCkBAIC0wLDAgKzEsMTkxIEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitIVFRQIE5UTE0gYXV0aAorLS1hbnlhdXRoCitmb2xsb3dsb2NhdGlvbgorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKworPGRhdGE+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBCYXNpYw0KK1dXVy1BdXRoZW50aWNhdGU6IFdpbGQtYW5kLWNyYXp5DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjYNCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlCis8L2RhdGE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyBhIGZpcnN0CisjIEF1dGhvcml6YXRpb246IE5UTE0gbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50Cis8ZGF0YTEwMDE+CitIVFRQLzEuMSA0MDEgTm93IGdpbW1lIHRoYXQgc2Vjb25kIHJlcXVlc3Qgb2YgY3JhcA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDM0DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlIGVpdGhlciEKKzwvZGF0YTEwMDE+CisKKyMgVGhpcyBpcyBzdXBwb3NlZCB0byBiZSByZXR1cm5lZCB3aGVuIHRoZSBzZXJ2ZXIgZ2V0cyB0aGUgc2Vjb25kCisjIEF1dGhvcml6YXRpb246IE5UTE0gbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50Cis8ZGF0YTEwMDI+CitIVFRQLzEuMSAzMDEgVGhpbmdzIGFyZSBmaW5lIGluIHNlcnZlciBsYW5kIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorTG9jYXRpb246IC95b3UvOTAwMDEwDQorDQorPC9kYXRhMTAwMj4KKworIyBUaGlzIGlzIHRoZSBmaXJzdCByZXBseSBhZnRlciB0aGUgcmVkaXJlY3Rpb24KKzxkYXRhMTA+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBCYXNpYw0KK1dXVy1BdXRoZW50aWNhdGU6IFdpbGQtYW5kLWNyYXp5DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjYNCisNCitUaGlzIGlzIG5vdCB0aGUgcmVhbCBwYWdlCis8L2RhdGExMD4KKworPGRhdGExMDExPgorSFRUUC8xLjEgNDAxIE5vdyBnaW1tZSB0aGF0IHNlY29uZCByb3VuZCBvZiBjcmFwDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMzQNCitXV1ctQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UgZWl0aGVyIQorPC9kYXRhMTAxMT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIHRoZSBzZWNvbmQKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAxMj4KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gc2VydmVyIGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzMg0KKw0KK0ZpbmFsbHksIHRoaXMgaXMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YTEwMTI+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBCYXNpYw0KK1dXVy1BdXRoZW50aWNhdGU6IFdpbGQtYW5kLWNyYXp5DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTQ0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMjYNCisNCitIVFRQLzEuMSA0MDEgTm93IGdpbW1lIHRoYXQgc2Vjb25kIHJlcXVlc3Qgb2YgY3JhcA0KK1NlcnZlcjogTWljcm9zb2Z0LUlJUy81LjANCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDM0DQorV1dXLUF1dGhlbnRpY2F0ZTogTlRMTSBUbFJNVFZOVFVBQUNBQUFBQWdBQ0FEQUFBQUFHZ29FQWM1MUFZVkRneU5jQUFBQUFBQUFBQUc0QWJnQXlBQUFBUTBNQ0FBUUFRd0JEQUFFQUVnQkZBRXdBU1FCVEFFRUFRZ0JGQUZRQVNBQUVBQmdBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBd0FzQUdVQWJBQnBBSE1BWVFCaUFHVUFkQUJvQUM0QVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQUFBQUFBPT0NCisNCitIVFRQLzEuMSAzMDEgVGhpbmdzIGFyZSBmaW5lIGluIHNlcnZlciBsYW5kIHN3c2Nsb3NlDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0Nvbm5lY3Rpb246IGNsb3NlDQorTG9jYXRpb246IC95b3UvOTAwMDEwDQorDQorSFRUUC8xLjEgNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQgc3dzY2xvc2UNCitTZXJ2ZXI6IEFwYWNoZS8xLjMuMjcgKERhcndpbikgUEhQLzQuMS4yDQorV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMNCitXV1ctQXV0aGVudGljYXRlOiBXaWxkLWFuZC1jcmF6eQ0KK1dXVy1BdXRoZW50aWNhdGU6IE5UTE0NCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDI2DQorDQorSFRUUC8xLjEgNDAxIE5vdyBnaW1tZSB0aGF0IHNlY29uZCByb3VuZCBvZiBjcmFwDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitDb250ZW50LUxlbmd0aDogMzQNCitXV1ctQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gc2VydmVyIGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzMg0KKw0KK0ZpbmFsbHksIHRoaXMgaXMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorTlRMTQorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCBOVExNIHZpYSAtLWFueWF1dGgsIGFuZCB0aGVuIGZvbGxvdy1sb2NhdGlvbiB3aXRoIE5UTE0gYWdhaW4KKyA8L25hbWU+CisgPHNldGVudj4KKyMgd2UgZm9yY2Ugb3VyIG93biBob3N0IG5hbWUsIGluIG9yZGVyIHRvIG1ha2UgdGhlIHRlc3QgbWFjaGluZSBpbmRlcGVuZGVudAorQ1VSTF9HRVRIT1NUTkFNRT1jdXJsaG9zdAorIyB3ZSB0cnkgdG8gdXNlIHRoZSBMRF9QUkVMT0FEIGhhY2ssIGlmIG5vdCBhIGRlYnVnIGJ1aWxkCitMRF9QUkVMT0FEPSVQV0QvbGlidGVzdC8ubGlicy9saWJob3N0bmFtZS5zbworIDwvc2V0ZW52PgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzkwIC11IHRlc3R1c2VyOnRlc3RwYXNzIC0tYW55YXV0aCAtTAorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvOTAgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC85MCBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC85MCBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRUFBQUFBWUFCZ0FXQUFBQUFBQUFBQndBQUFBQ0FBSUFIQUFBQUFJQUFnQWVBQUFBQUFBQUFBQUFBQUFCb0tCQUZwa1F3S1JDWkZNaGpqMHR3NDd3RWpLSFJIbHZ6ZnhRYW1GY2hlTXV2OHYreGVxcGhFTzVWNDF4UmQ3UjlkZU9YUmxjM1IxYzJWeVkzVnliR2h2YzNRPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC42LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNi1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCitHRVQgL3lvdS85MDAwMTAgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC95b3UvOTAwMDEwIEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1VzZXItQWdlbnQ6IGN1cmwvNy4xMC44LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuOC1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMyBHU1MNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC95b3UvOTAwMDEwIEhUVFAvMS4xDQorQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQURBQUFBR0FBWUFFQUFBQUFZQUJnQVdBQUFBQUFBQUFCd0FBQUFDQUFJQUhBQUFBQUlBQWdBZUFBQUFBQUFBQUFBQUFBQUJvS0JBRnBrUXdLUkNaRk1oamowdHc0N3dFaktIUkhsdnpmeFFhbUZjaGVNdXY4dit4ZXFwaEVPNVY0MXhSZDdSOWRlT1hSbGMzUjFjMlZ5WTNWeWJHaHZjM1E9DQorVXNlci1BZ2VudDogY3VybC83LjEwLjgtcHJlMSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC44LXByZTEgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zIEdTUw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0OTEgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q5MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmYzNGFlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0OTEKQEAgLTAsMCArMSwxMjIgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK0hUVFAgTlRMTSBhdXRoCis8L2tleXdvcmRzPgorPC9pbmZvPgorIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBNYWdpYy1OZWdvdGlhdGUNCitXV1ctQXV0aGVudGljYXRlOiBOVExNDQorV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09ImRhbmllbCINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDANCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KKzwvZGF0YT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIGEgZmlyc3QKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMT4KK0hUVFAvMS4xIDQwMSBOb3cgZ2ltbWUgdGhhdCBzZWNvbmQgcmVxdWVzdCBvZiBjcmFwDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitXV1ctQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK1RoaXMgaXMgbm90IHRoZSByZWFsIHBhZ2UgZWl0aGVyIQorPC9kYXRhMTAwMT4KKworIyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHNlcnZlciBnZXRzIHRoZSBzZWNvbmQKKyMgQXV0aG9yaXphdGlvbjogTlRMTSBsaW5lIHBhc3NlZC1pbiBmcm9tIHRoZSBjbGllbnQKKzxkYXRhMTAwMj4KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gc2VydmVyIGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzMg0KKw0KK0ZpbmFsbHksIHRoaXMgaXMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YTEwMDI+CisKKzxkYXRhY2hlY2s+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCBzd3NjbG9zZQ0KK1NlcnZlcjogQXBhY2hlLzEuMy4yNyAoRGFyd2luKSBQSFAvNC4xLjINCitXV1ctQXV0aGVudGljYXRlOiBNYWdpYy1OZWdvdGlhdGUNCitXV1ctQXV0aGVudGljYXRlOiBOVExNDQorV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09ImRhbmllbCINCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQorQ29udGVudC1MZW5ndGg6IDANCitDb25uZWN0aW9uOiBjbG9zZQ0KKw0KK0hUVFAvMS4xIDQwMSBOb3cgZ2ltbWUgdGhhdCBzZWNvbmQgcmVxdWVzdCBvZiBjcmFwDQorU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KK0NvbnRlbnQtTGVuZ3RoOiAzNA0KK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTENCitXV1ctQXV0aGVudGljYXRlOiBOVExNIFRsUk1UVk5UVUFBQ0FBQUFBZ0FDQURBQUFBQUdnb0VBYzUxQVlWRGd5TmNBQUFBQUFBQUFBRzRBYmdBeUFBQUFRME1DQUFRQVF3QkRBQUVBRWdCRkFFd0FTUUJUQUVFQVFnQkZBRlFBU0FBRUFCZ0FZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUF3QXNBR1VBYkFCcEFITUFZUUJpQUdVQWRBQm9BQzRBWXdCakFDNEFhUUJqQUdVQVpBQmxBSFlBTGdCdUFIVUFBQUFBQUE9PQ0KKw0KK0hUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gc2VydmVyIGxhbmQgc3dzY2xvc2UNCitTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KK0NvbnRlbnQtTGVuZ3RoOiAzMg0KKw0KK0ZpbmFsbHksIHRoaXMgaXMgdGhlIHJlYWwgcGFnZSEKKzwvZGF0YWNoZWNrPgorCis8L3JlcGx5PgorCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorTlRMTQorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgd2l0aCBOVExNL05lZ290aWF0ZS9CYXNpYywgYW55YXV0aCBhbmQgdXNlciB3aXRoIGRvbWFpbiwgd2l0aCBzaXplIDAKKyA8L25hbWU+CisgPHNldGVudj4KKyMgd2UgZm9yY2Ugb3VyIG93biBob3N0IG5hbWUsIGluIG9yZGVyIHRvIG1ha2UgdGhlIHRlc3QgbWFjaGluZSBpbmRlcGVuZGVudAorQ1VSTF9HRVRIT1NUTkFNRT1jdXJsaG9zdAorIyB3ZSB0cnkgdG8gdXNlIHRoZSBMRF9QUkVMT0FEIGhhY2ssIGlmIG5vdCBhIGRlYnVnIGJ1aWxkCitMRF9QUkVMT0FEPSVQV0QvbGlidGVzdC8ubGlicy9saWJob3N0bmFtZS5zbworIDwvc2V0ZW52PgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzkxIC0tYW55YXV0aCAtdSBteWRvbWFpblxcbXlzZWxmOnNlY3JldAorPC9jb21tYW5kPgorPHByZWNoZWNrPgorY2hraG9zdG5hbWUgY3VybGhvc3QKKzwvcHJlY2hlY2s+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvOTEgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC85MSBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNi1wcmUxIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjYtcHJlMSBPcGVuU1NMLzAuOS43YSBpcHY2IHpsaWIvMS4xLjMNCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorR0VUIC85MSBIVFRQLzEuMQ0KK0F1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRUFBQUFBWUFCZ0FXQUFBQUFnQUNBQndBQUFBQmdBR0FIZ0FBQUFJQUFnQWZnQUFBQUFBQUFBQUFBQUFCb0tCQU1JeUpwUjVtSHBnMkZaaGE1a1JhRlo5NDM2R0F4UHUwQzVsbHhleFNRNVF6VmtpTFNma2NwVnlSZ0NYWHFSK0FtMTVaRzl0WVdsdWJYbHpaV3htWTNWeWJHaHZjM1E9DQorVXNlci1BZ2VudDogY3VybC83LjEwLjYtcHJlMSAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC42LXByZTEgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q5MiBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDkyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNmFhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q5MgpAQCAtMCwwICsxLDU1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgR0VUCitDb250ZW50LVJhbmdlCitSZXN1bWUKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgNDE2IFJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGUNCitEYXRlOiBGcmksIDI0IE9jdCAyMDAzIDIxOjMzOjEyIEdNVA0KK1NlcnZlcjogQXBhY2hlLzEuMy4xOSAoVW5peCkgIChSZWQtSGF0L0xpbnV4KSBtb2Rfc3NsLzIuOC4xIE9wZW5TU0wvMC45LjYgUEhQLzQuMy4xDQorTGFzdC1Nb2RpZmllZDogRnJpLCAyNCBPY3QgMjAwMyAxODowMToyMyBHTVQNCitFVGFnOiAiYWI1N2EtNTA3LTNmOTk2OGYzIg0KK0FjY2VwdC1SYW5nZXM6IGJ5dGVzDQorQ29udGVudC1MZW5ndGg6IDQNCitDb250ZW50LVJhbmdlOiBieXRlcyAqLzg3DQorQ29udGVudC1UeXBlOiBpbWFnZS9naWYNCisNCitiYWQKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIHJlc3VtZSB0cmFuc2ZlciB3aXRoIHRoZSB3aG9sZSBmaWxlIGFscmVhZHkgZG93bmxvYWRlZAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzkyIC1DIDg3Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvd2FudC85MiBIVFRQLzEuMQ0KK1JhbmdlOiBieXRlcz04Ny0NCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorDQorPC9wcm90b2NvbD4KKworPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0OTMgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q5MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzg3MjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0OTMKQEAgLTAsMCArMSw1MCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBwcm94eQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgNDA3IE5lZWRzIHByb3h5IGF1dGhlbnRpY2F0aW9uCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UgeWVzeWVzCitQcm94eS1BdXRoZW50aWNhdGU6IEJhc2ljICJvaCBwbGVhc2UiCitDb25uZWN0aW9uOiBjbG9zZQorCitiaW5nCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBHRVQgd2l0aCBmYWlsZWQgcHJveHkgYXV0aAorIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC85MyAteCAlSE9TVElQOiVIVFRQUE9SVAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitHRVQgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzkzIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0OTQgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q5NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2JhZmE2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0OTQKQEAgLTAsMCArMSw1OCBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQUworSFRUUCBHRVQKK0hUVFAgQ09OTkVDVAorSFRUUCBwcm94eQorRkFJTFVSRQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSA0MDcgTmVlZHMgcHJveHkgYXV0aGVudGljYXRpb24KK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZSB5ZXN5ZXMKK1Byb3h5LUF1dGhlbnRpY2F0ZTogQmFzaWMgIm9oIHBsZWFzZSIKK0Nvbm5lY3Rpb246IGNsb3NlCisKK2JpbmcKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitTU0wKKzwvZmVhdHVyZXM+CisgPG5hbWU+CitIVFRQUyBHRVQgd2l0aCBmYWlsZWQgcHJveHkgYXV0aCAoQ09OTkVDVCAxLjApCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cHM6Ly90ZXN0LmFueXRoaW5nLnJlYWxseS5jb206OTQgLS1wcm94eTEuMCAlSE9TVElQOiVIVFRQUE9SVAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPGVycm9yY29kZT4KKzU2Cis8L2Vycm9yY29kZT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorQ09OTkVDVCB0ZXN0LmFueXRoaW5nLnJlYWxseS5jb206OTQgSFRUUC8xLjANCitVc2VyLUFnZW50OiBjdXJsLzcuMTEuMC1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTEuMC1DVlMgT3BlblNTTC8wLjkuNmIgaXB2NiB6bGliLzEuMS40DQorSG9zdDogdGVzdC5hbnl0aGluZy5yZWFsbHkuY29tOjk0DQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q5NSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDk1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YjBlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q5NQpAQCAtMCwwICsxLDc3IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorSFRUUCBDT05ORUNUCitwcm94eXR1bm5lbAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2Ugc3dzY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sCitGdW5ueS1oZWFkOiB5ZXN5ZXMKK0NvbnRlbnQtTGVuZ3RoOiA5CisKK2NvbnRlbnRzCis8L2RhdGE+Cis8ZGF0YWNoZWNrPgorSFRUUC8xLjEgMjAwIE1pZ2h0eSBmaW5lIGluZGVlZA0KKw0KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK1NlcnZlcjogdGVzdC1zZXJ2ZXIvZmFrZSBzd3NjbG9zZQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKK0Z1bm55LWhlYWQ6IHllc3llcworQ29udGVudC1MZW5ndGg6IDkKKworY29udGVudHMKKzwvZGF0YWNoZWNrPgorPC9yZXBseT4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCitodHRwLXByb3h5Cis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgb3ZlciBwcm94eXR1bm5lbCB1c2luZyBQT1NUCisgPC9uYW1lPgorIDxjb21tYW5kPgoraHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvdGhhdC9wYWdlLzk1IC1wIC14ICVIT1NUSVA6JVBST1hZUE9SVCAtZCAiZGF0YXRvcG9zdD1vaHRoYXRzZnVueWVzeWVzIgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJveHk+CitDT05ORUNUICVIT1NUSVA6JUhUVFBQT1JUIEhUVFAvMS4xDQorVXNlci1BZ2VudDogY3VybC83LjEwLjctcHJlMiAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC43LXByZTIgT3BlblNTTC8wLjkuN2EgemxpYi8xLjEuMw0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KKw0KKzwvcHJveHk+Cis8cHJvdG9jb2wgbm9uZXdsaW5lPSJ5ZXMiPgorUE9TVCAvd2Uvd2FudC90aGF0L3BhZ2UvOTUgSFRUUC8xLjENCitVc2VyLUFnZW50OiBjdXJsLzcuMTAuNy1wcmUyIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjctcHJlMiBPcGVuU1NMLzAuOS43YSB6bGliLzEuMS4zDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAyNw0KK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQorDQorZGF0YXRvcG9zdD1vaHRoYXRzZnVueWVzeWVzCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0OTcgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q5NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTA2NWJiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0OTcKQEAgLTAsMCArMSw1MiBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIFBPU1QKK0hUVFAgcmVwbGFjZWQgaGVhZGVycworPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjAgMjAwIE9LDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwNCitDb250ZW50LUxlbmd0aDogNg0KKw0KK2JsYWhhCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorSFRUUCBQT1NUIHdpdGggY3VzdG9tIGNvbnRlbnQtdHlwZQorIDwvbmFtZT4KKyA8Y29tbWFuZD4KKyAtZCAiaGVqc2FuYWxsYWJhcm4iIC1IICJDb250ZW50LVR5cGU6IHNpbGx5L3R5cGUiIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC85NworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2wgbm9uZXdsaW5lPSJ5ZXMiPgorUE9TVCAvOTcgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1UeXBlOiBzaWxseS90eXBlDQorQ29udGVudC1MZW5ndGg6IDE0DQorDQoraGVqc2FuYWxsYWJhcm4KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q5OCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDk4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZDExODIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9kYXRhL3Rlc3Q5OApAQCAtMCwwICsxLDU1IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUFVUCitjaHVua2VkIFRyYW5zZmVyLUVuY29kaW5nCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMCAyMDAgT0sNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LVR5cGU6IHRleHQvaHRtbA0KK0NvbnRlbnQtTGVuZ3RoOiA2DQorDQorYmxhaGEKKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIFBVVCBmcm9tIHN0ZGluIHdpdGggc2V0IHNpemUsIGRpc2FibGluZyBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nCisgPC9uYW1lPgorIDxjb21tYW5kPgorIC1UIC0gLUggIlRyYW5zZmVyLUVuY29kaW5nOiIgLUggIkNvbnRlbnQtTGVuZ3RoOiAxNCIgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzk4Cis8L2NvbW1hbmQ+Cis8c3RkaW4+CitkYXRhIG9uIHN0ZGluCis8L3N0ZGluPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitQVVQgLzk4IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK0NvbnRlbnQtTGVuZ3RoOiAxNA0KK0V4cGVjdDogMTAwLWNvbnRpbnVlDQorDQorZGF0YSBvbiBzdGRpbgorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDk5IGIvY3VybC03LjI1LjAvdGVzdHMvZGF0YS90ZXN0OTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUxNzAwMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2RhdGEvdGVzdDk5CkBAIC0wLDAgKzEsNjkgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKK1Jlc3VtZQorTGFyZ2VmaWxlCitGQUlMVVJFCis8L2tleXdvcmRzPgorPC9pbmZvPgorIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSA0MDQgTmFoCitEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtTGVuZ3RoOiAxMworRnVubnktaGVhZDogeWVzeWVzCisKKzAxMjM0NTY3ODkxMjMKKzwvZGF0YT4KKworPGRhdGFjaGVjaz4KK0hUVFAvMS4xIDQwNCBOYWgKK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCitDb25uZWN0aW9uOiBjbG9zZQorQ29udGVudC1MZW5ndGg6IDEzCitGdW5ueS1oZWFkOiB5ZXN5ZXMKKworPC9kYXRhY2hlY2s+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPGZlYXR1cmVzPgorbGFyZ2VfZmlsZQorPC9mZWF0dXJlcz4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK0hUVFAgR0VUIHdpdGggbGFyZ2UtZmlsZSByZXN1bWUgcG9pbnQgYW5kIGZhaWxlZCByZXN1bWUKKyA8L25hbWU+CisgPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvOTkgLUMgOTk5OTk5OTk5OQorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorIyAzMyBpcyBDVVJMRV9SQU5HRV9FUlJPUgorPGVycm9yY29kZT4KKzMzCis8L2Vycm9yY29kZT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC85OSBIVFRQLzEuMQ0KK1JhbmdlOiBieXRlcz05OTk5OTk5OTk5LQ0KK0hvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCisNCis8L3Byb3RvY29sPgorPC92ZXJpZnk+Cis8L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvZGlyZWN0b3JpZXMucG0gYi9jdXJsLTcuMjUuMC90ZXN0cy9kaXJlY3Rvcmllcy5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2JiOTYzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZGlyZWN0b3JpZXMucG0KQEAgLTAsMCArMSwyODcgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworJWZpbGVfY2htb2QxID0gKAorICAnbmFtZScgICAgICA9PiAnY2htb2QxJywKKyAgJ2NvbnRlbnQnICAgPT4gIlRoaXMgZmlsZSBzaG91bGQgaGF2ZSBwZXJtaXNzaW9ucyA0NDRcbiIsCisgICdwZXJtJyAgICAgID0+ICdyLS1yLS1yLS0nLAorICAndGltZScgICAgICA9PiAnSmFuIDExIDEwOjAwJywKKyAgJ2Rvc3RpbWUnICAgPT4gJzAxLTExLTEwICAxMDowMEFNJywKKyk7CisKKyVmaWxlX2NobW9kMiA9ICgKKyAgJ25hbWUnICAgICAgPT4gJ2NobW9kMicsCisgICdjb250ZW50JyAgID0+ICJUaGlzIGZpbGUgc2hvdWxkIGhhdmUgcGVybWlzc2lvbnMgNjY2XG4iLAorICAncGVybScgICAgICA9PiAncnctcnctcnctJywKKyAgJ3RpbWUnICAgICAgPT4gJ0ZlYiAgMSAgODowMCcsCisgICdkb3N0aW1lJyAgID0+ICcwMi0wMS0xMCAgMDg6MDBBTScsCispOworCislZmlsZV9jaG1vZDMgPSAoCisgICduYW1lJyAgICAgID0+ICdjaG1vZDMnLAorICAnY29udGVudCcgICA9PiAiVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDc3N1xuIiwKKyAgJ3Blcm0nICAgICAgPT4gJ3J3eHJ3eHJ3eCcsCisgICd0aW1lJyAgICAgID0+ICdGZWIgIDEgIDg6MDAnLAorICAnZG9zdGltZScgICA9PiAnMDItMDEtMTAgIDA4OjAwQU0nLAorKTsKKworJWZpbGVfY2htb2Q0ID0gKAorICAndHlwZScgICAgICA9PiAnZCcsCisgICduYW1lJyAgICAgID0+ICdjaG1vZDQnLAorICAnY29udGVudCcgICA9PiAiVGhpcyBmaWxlIHNob3VsZCBoYXZlIHBlcm1pc3Npb25zIDAwMVxuIiwKKyAgJ3Blcm0nICAgICAgPT4gJy0tUy0tUy0tdCcsCisgICd0aW1lJyAgICAgID0+ICdNYXkgIDQgIDQ6MzEnLAorICAnZG9zdGltZScgICA9PiAnMDUtMDQtMTAgIDA0OjMxQU0nCispOworCislZmlsZV9jaG1vZDUgPSAoCisgICd0eXBlJyAgICAgID0+ICdkJywKKyAgJ25hbWUnICAgICAgPT4gJ2NobW9kNScsCisgICdjb250ZW50JyAgID0+ICJUaGlzIGZpbGUgc2hvdWxkIGhhdmUgcGVybWlzc2lvbnMgMTEwXG4iLAorICAncGVybScgICAgICA9PiAnLS1zLS1zLS1UJywKKyAgJ3RpbWUnICAgICAgPT4gJ01heSAgNCAgNDozMScsCisgICdkb3N0aW1lJyAgID0+ICcwNS0wNC0xMCAgMDQ6MzFBTScKKyk7CisKKyVsaW5rX2xpbmsgPSAoCisgICd0eXBlJyAgICAgID0+ICdsJywKKyAgJ25hbWUnICAgICAgPT4gJ2xpbmsgLT4gZmlsZS50eHQnLAorICAnc2l6ZScgICAgICA9PiAnOCcsCisgICdwZXJtJyAgICAgID0+ICdyd3hyd3hyd3gnLAorICAndGltZScgICAgICA9PiAnSmFuICA2ICA0OjQyJworKTsKKworJWxpbmtfbGlua19hYnNvbHV0ZSA9ICgKKyAgJ3R5cGUnICAgICAgPT4gJ2wnLAorICAnbmFtZScgICAgICA9PiAnbGlua19hYnNvbHV0ZSAtPiAvZGF0YS9mdHAvZmlsZS50eHQnLAorICAnc2l6ZScgICAgICA9PiAnMTUnLAorICAncGVybScgICAgICA9PiAncnd4cnd4cnd4JywKKyAgJ3RpbWUnICAgICAgPT4gJ0phbiAgNiAgNDo0NScKKyk7CisKKyVkaXJfZG90ID0gKAorICAndHlwZScgICAgICA9PiAiZCIsCisgICduYW1lJyAgICAgID0+ICIuIiwKKyAgJ2hsaW5rJyAgICAgPT4gIjQiLAorICAndGltZScgICAgICA9PiAiQXByIDI3ICA1OjEyIiwKKyAgJ3NpemUnICAgICAgPT4gIjIwNDgwIiwKKyAgJ2Rvc3RpbWUnICAgPT4gIjA0LTI3LTEwICAwNToxMkFNIiwKKyAgJ3Blcm0nICAgICAgPT4gInJ3eHJ3eHJ3eCIKKyk7CisKKyVkaXJfZGRvdCA9ICgKKyAgJ3R5cGUnICAgICAgPT4gImQiLAorICAnbmFtZScgICAgICA9PiAiLi4iLAorICAnaGxpbmsnICAgICA9PiAiNCIsCisgICdzaXplJyAgICAgID0+ICIyMDQ4MCIsCisgICd0aW1lJyAgICAgID0+ICJBcHIgMjMgIDM6MTIiLAorICAnZG9zdGltZScgICA9PiAiMDQtMjMtMTAgIDAzOjEyQU0iLAorICAncGVybScgICAgICA9PiAicnd4cnd4cnd4IgorKTsKKworJWRpcl93ZWlyZGRpcl90eHQgPSAoCisgICd0eXBlJyAgICAgID0+ICJkIiwKKyAgJ25hbWUnICAgICAgPT4gIndlaXJkZGlyLnR4dCIsCisgICdobGluaycgICAgID0+ICIyIiwKKyAgJ3NpemUnICAgICAgPT4gIjQwOTYiLAorICAndGltZScgICAgICA9PiAiQXByIDIzICAzOjEyIiwKKyAgJ2Rvc3RpbWUnICAgPT4gIjA0LTIzLTEwICAwMzoxMkFNIiwKKyAgJ3Blcm0nICAgICAgPT4gInJ3eHIteHJ3eCIKKyk7CisKKyVkaXJfVU5JWCA9ICgKKyAgJ3R5cGUnICAgICAgPT4gImQiLAorICAnbmFtZScgICAgICA9PiAiVU5JWCIsCisgICdobGluaycgICAgID0+ICIxMSIsCisgICdzaXplJyAgICAgID0+ICI0MDk2IiwKKyAgJ3RpbWUnICAgICAgPT4gIk5vdiAwMSAgMjAwOCIsCisgICdkb3N0aW1lJyAgID0+ICIxMS0wMS0wOCAgMTE6MTFBTSIsCisgICdwZXJtJyAgICAgID0+ICJyd3gtLXgtLXgiCispOworCislZGlyX0RPUyA9ICgKKyAgJ3R5cGUnICAgICAgPT4gImQiLAorICAnbmFtZScgICAgICA9PiAiRE9TIiwKKyAgJ2hsaW5rJyAgICAgPT4gIjExIiwKKyAgJ3NpemUnICAgICAgPT4gIjQwOTYiLAorICAndGltZScgICAgICA9PiAiTm92IDAxICAyMDA4IiwKKyAgJ2Rvc3RpbWUnICAgPT4gIjExLTAxLTA4ICAxMToxMUFNIiwKKyAgJ3Blcm0nICAgICAgPT4gInJ3eC0teC0teCIKKyk7CisKKyVkaXJfZG90X05lWFQgPSAoCisgICd0eXBlJyAgICAgID0+ICJkIiwKKyAgJ25hbWUnICAgICAgPT4gIi5OZVhUIiwKKyAgJ2hsaW5rJyAgICAgPT4gIjQiLAorICAnc2l6ZScgICAgICA9PiAiNDA5NiIsCisgICd0aW1lJyAgICAgID0+ICJKYW4gMjMgIDI6MDUiLAorICAnZG9zdGltZScgICA9PiAiMDEtMjMtMDUgIDAyOjA1QU0iLAorICAncGVybScgICAgICA9PiAicnd4cnd4cnd4IgorKTsKKworJWZpbGVfZW1wdHlfZmlsZV9kYXQgPSAoCisgICduYW1lJyAgICAgID0+ICJlbXB0eV9maWxlLmRhdCIsCisgICdjb250ZW50JyAgID0+ICIiLAorICAncGVybScgICAgICA9PiAicnctci0tci0tIiwKKyAgJ3RpbWUnICAgICAgPT4gIkFwciAyNyAxMTowMSIsCisgICdkb3N0aW1lJyAgID0+ICIwNC0yNy0xMCAgMTE6MDFBTSIKKyk7CisKKyVmaWxlX2ZpbGVfdHh0ID0gKAorICAnbmFtZScgICAgICA9PiAiZmlsZS50eHQiLAorICAnY29udGVudCcgICA9PiAiVGhpcyBpcyBjb250ZW50IG9mIGZpbGUgXCJmaWxlLnR4dFwiXG4iLAorICAndGltZScgICAgICA9PiAiQXByIDI3IDExOjAxIiwKKyAgJ2Rvc3RpbWUnICAgPT4gIjA0LTI3LTEwICAxMTowMUFNIiwKKyAgJ3Blcm0nICAgICAgPT4gInJ3LXItLXItLSIKKyk7CisKKyVmaWxlX3NvbWVvdGhlcnRleHRfdHh0ID0gKAorICAnbmFtZScgICAgICA9PiAic29tZW90aGVydGV4dC50eHQiLAorICAnY29udGVudCcgICA9PiAiU29tZSBqdW5rIDstKSBUaGlzIGZpbGUgZG9lcyBub3QgcmVhbGx5IGV4aXN0LlxuIiwKKyAgJ3RpbWUnICAgICAgPT4gIkFwciAyNyAxMTowMSIsCisgICdkb3N0aW1lJyAgID0+ICIwNC0yNy0xMCAgMTE6MDFBTSIsCisgICdwZXJtJyAgICAgID0+ICJydy1yLS1yLS0iCispOworCislbGlzdHMgPSAoCisgICcvZnVsbHlfc2ltdWxhdGVkLycgPT4geworICAgICdmaWxlcycgICA9PiBbIFwlZGlyX2RvdCwgXCVkaXJfZGRvdCwgXCVkaXJfRE9TLCBcJWRpcl9VTklYIF0sCisgICAgJ2VvbCcgICAgID0+ICJcclxuIiwKKyAgICAndHlwZScgICAgPT4gInVuaXgiCisgIH0sCisgICcvZnVsbHlfc2ltdWxhdGVkL1VOSVgvJyA9PiB7CisgICAgJ2ZpbGVzJyAgID0+IFsgXCVkaXJfZG90LCBcJWRpcl9kZG90LAorICAgICAgICAgICAgICAgICAgIFwlZmlsZV9jaG1vZDEsIFwlZmlsZV9jaG1vZDIsIFwlZmlsZV9jaG1vZDMsIFwlZmlsZV9jaG1vZDQsIFwlZmlsZV9jaG1vZDUsCisgICAgICAgICAgICAgICAgICAgXCVmaWxlX2VtcHR5X2ZpbGVfZGF0LCBcJWZpbGVfZmlsZV90eHQsCisgICAgICAgICAgICAgICAgICAgXCVsaW5rX2xpbmssIFwlbGlua19saW5rX2Fic29sdXRlLCBcJWRpcl9kb3RfTmVYVCwKKyAgICAgICAgICAgICAgICAgICBcJWZpbGVfc29tZW90aGVydGV4dF90eHQsIFwlZGlyX3dlaXJkZGlyX3R4dCBdLAorICAgICdlb2wnICAgICA9PiAiXHJcbiIsCisgICAgJ3R5cGUnICAgID0+ICd1bml4JworICB9LAorICAnL2Z1bGx5X3NpbXVsYXRlZC9ET1MvJyA9PiB7CisgICAgJ2ZpbGVzJyAgID0+IFsgXCVkaXJfZG90LCBcJWRpcl9kZG90LAorICAgICAgICAgICAgICAgICAgIFwlZmlsZV9jaG1vZDEsIFwlZmlsZV9jaG1vZDIsIFwlZmlsZV9jaG1vZDMsIFwlZmlsZV9jaG1vZDQsIFwlZmlsZV9jaG1vZDUsCisgICAgICAgICAgICAgICAgICAgXCVmaWxlX2VtcHR5X2ZpbGVfZGF0LCBcJWZpbGVfZmlsZV90eHQsCisgICAgICAgICAgICAgICAgICAgXCVkaXJfZG90X05lWFQsIFwlZmlsZV9zb21lb3RoZXJ0ZXh0X3R4dCwgXCVkaXJfd2VpcmRkaXJfdHh0IF0sCisgICAgJ2VvbCcgICAgID0+ICJcclxuIiwKKyAgICAndHlwZScgICAgPT4gJ2RvcycKKyAgfQorKTsKKworc3ViIGZ0cF9jcmVhdGVjb250ZW50KCQpIHsKKyAgbXkgKCVsaXN0KSA9IEBfOworCisgICR0eXBlID0gJCRsaXN0eyd0eXBlJ307CisgICRlb2wgID0gJCRsaXN0eydlb2wnfTsKKyAgJGxpc3RfcmVmID0gJCRsaXN0eydmaWxlcyd9OworCisgIG15IEBkaXJvdXRwdXQ7CisgIG15IEBjb250ZW50bGlzdDsKKyAgaWYoJHR5cGUgZXEgInVuaXgiKSB7CisgICAgZm9yKEAkbGlzdF9yZWYpIHsKKyAgICAgIG15ICVmaWxlID0gJSRfOworICAgICAgbXkgJGxpbmUgPSAiIjsKKyAgICAgIG15ICRmdHlwZSAgPSAkZmlsZXsndHlwZSd9ICA/ICRmaWxleyd0eXBlJ30gIDogIi0iOworICAgICAgbXkgJGZwZXJtICA9ICRmaWxleydwZXJtJ30gID8gJGZpbGV7J3Blcm0nfSAgOiAicnd4ci14ci14IjsKKyAgICAgIG15ICRmdXNlciAgPSAkZmlsZXsndXNlcid9ICA/IHNwcmludGYoIiUxNXMiLCAkZmlsZXsndXNlcid9KSAgIDogImZ0cC1kZWZhdWx0IjsKKyAgICAgIG15ICRmZ3JvdXAgPSAkZmlsZXsnZ3JvdXAnfSA/IHNwcmludGYoIiUxNXMiLCAkZmlsZXsnZ3JvdXAnfSkgIDogImZ0cC1kZWZhdWx0IjsKKyAgICAgIG15ICRmc2l6ZSA9ICIiOworICAgICAgaWYoJGZpbGV7J3R5cGUnfSBlcSAiZCIpIHsKKyAgICAgICAgJGZzaXplID0gJGZpbGV7J3NpemUnfSA/IHNwcmludGYoIiU3cyIsICRmaWxleydzaXplJ30pIDogc3ByaW50ZigiJTdkIiwgNDA5Nik7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgJGZzaXplID0gc3ByaW50ZigiJTdkIiwgbGVuZ3RoICRmaWxleydjb250ZW50J30pOworICAgICAgfQorICAgICAgbXkgJGZobGluayA9ICRmaWxleydobGluayd9ID8gc3ByaW50ZigiJTRkIiwgICRmaWxleydobGluayd9KSAgOiAiICAgMSI7CisgICAgICBteSAkZnRpbWUgID0gJGZpbGV7J3RpbWUnfSAgPyBzcHJpbnRmKCIlMTBzIiwgJGZpbGV7J3RpbWUnfSkgICA6ICJKYW4gOSAgMTkzMyI7CisgICAgICBwdXNoKEBjb250ZW50bGlzdCwgIiRmdHlwZSRmcGVybSAkZmhsaW5rICRmdXNlciAkZmdyb3VwICRmc2l6ZSAkZnRpbWUgJGZpbGV7J25hbWUnfSRlb2wiKTsKKyAgICB9CisKKyAgICByZXR1cm4gQGNvbnRlbnRsaXN0OworICB9CisgIGVsc2lmKCR0eXBlID1+IC9eZG9zJC8pIHsKKyAgICBmb3IoQCRsaXN0X3JlZikgeworICAgICAgbXkgJWZpbGUgPSAlJF87CisgICAgICBteSAkbGluZSA9ICIiOworICAgICAgbXkgJHRpbWUgPSAkZmlsZXsnZG9zdGltZSd9ID8gJGZpbGV7J2Rvc3RpbWUnfSA6ICIwNi0yNS05NyAgMDk6MTJBTSI7CisgICAgICBteSAkc2l6ZV9vcl9kaXI7CisgICAgICBpZigkZmlsZXsndHlwZSd9ID1+IC9eZCQvKSB7CisgICAgICAgICRzaXplX29yX2RpciA9ICIgICAgICA8RElSPiAgICAgICAgICI7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgJHNpemVfb3JfZGlyID0gc3ByaW50ZigiJTIwZCIsIGxlbmd0aCAkZmlsZXsnY29udGVudCd9KTsKKyAgICAgIH0KKyAgICAgIHB1c2goQGNvbnRlbnRsaXN0LCAiJHRpbWUgJHNpemVfb3JfZGlyICRmaWxleyduYW1lJ30kZW9sIik7CisgICAgfQorICAgIHJldHVybiBAY29udGVudGxpc3Q7CisgIH0KK30KKworc3ViIHdpbGRjYXJkX2ZpbGVzaXplKCQkKSB7CisgIG15ICgkbGlzdF90eXBlLCAkZmlsZSkgPSBAXzsKKyAgJGxpc3QgPSAkbGlzdHN7JGxpc3RfdHlwZX07CisgIGlmKCRsaXN0KSB7CisgICAgbXkgJGZpbGVzID0gJGxpc3QtPnsnZmlsZXMnfTsKKyAgICBmb3IoQCRmaWxlcykgeworICAgICAgbXkgJWYgPSAlJF87CisgICAgICBpZiAoJGZ7J25hbWUnfSBlcSAkZmlsZSkgeworICAgICAgICBpZigkZnsnY29udGVudCd9KSB7CisgICAgICAgICAgcmV0dXJuIGxlbmd0aCAkZnsnY29udGVudCd9OworICAgICAgICB9CisgICAgICAgIGVsc2lmICgkZnsndHlwZSd9IG5lICJkIil7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAtMTsKK30KK3N1YiB3aWxkY2FyZF9nZXRmaWxlKCQkKSB7CisgIG15ICgkbGlzdF90eXBlLCAkZmlsZSkgPSBAXzsKKyAgJGxpc3QgPSAkbGlzdHN7JGxpc3RfdHlwZX07CisgIGlmKCRsaXN0KSB7CisgICAgbXkgJGZpbGVzID0gJGxpc3QtPnsnZmlsZXMnfTsKKyAgICBmb3IoQCRmaWxlcykgeworICAgICAgbXkgJWYgPSAlJF87CisgICAgICBpZiAoJGZ7J25hbWUnfSBlcSAkZmlsZSkgeworICAgICAgICBpZigkZnsnY29udGVudCd9KSB7CisgICAgICAgICAgcmV0dXJuIChsZW5ndGggJGZ7J2NvbnRlbnQnfSwgJGZ7J2NvbnRlbnQnfSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYgKCRmeyd0eXBlJ30gbmUgImQiKXsKKyAgICAgICAgICByZXR1cm4gKDAsICIiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gKC0xLCAwKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gKC0xLCAwKTsKK30KKworc3ViIGZ0cF9jb250ZW50bGlzdCB7CisgIG15ICRsaXN0bmFtZSA9ICRfWzBdOworICAkbGlzdCA9ICRsaXN0c3skbGlzdG5hbWV9OworICByZXR1cm4gZnRwX2NyZWF0ZWNvbnRlbnQoXCRsaXN0KTsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2Z0cC5wbSBiL2N1cmwtNy4yNS4wL3Rlc3RzL2Z0cC5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQ2ZTc2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZnRwLnBtCkBAIC0wLDAgKzEsMjU0IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIHNlcnZlcmhlbHAgcXcoCisgICAgc2VydmVybmFtZV9pZAorICAgIG1haW5zb2NrZl9waWRmaWxlbmFtZQorICAgIGRhdGFzb2NrZl9waWRmaWxlbmFtZQorICAgICk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHBpZGZyb21maWxlIHJldHVybnMgdGhlIHBpZCBzdG9yZWQgaW4gdGhlIGdpdmVuIHBpZGZpbGUuICBUaGUgdmFsdWUKKyMgb2YgdGhlIHJldHVybmVkIHBpZCB3aWxsIG5ldmVyIGJlIGEgbmVnYXRpdmUgdmFsdWUuIEl0IHdpbGwgYmUgemVybworIyBvbiBhbnkgZmlsZSByZWxhdGVkIGVycm9yIG9yIGlmIGEgcGlkIGNhbiBub3QgYmUgZXh0cmFjdGVkIGZyb20gdGhlCisjIGdpdmVuIGZpbGUuCisjCitzdWIgcGlkZnJvbWZpbGUgeworICAgIG15ICRwaWRmaWxlID0gJF9bMF07CisgICAgbXkgJHBpZCA9IDA7CisKKyAgICBpZigtZiAkcGlkZmlsZSAmJiAtcyAkcGlkZmlsZSAmJiBvcGVuKFBJREZILCAiPCRwaWRmaWxlIikpIHsKKyAgICAgICAgJHBpZCA9IDAgKyA8UElERkg+OworICAgICAgICBjbG9zZShQSURGSCk7CisgICAgICAgICRwaWQgPSAwIHVubGVzcygkcGlkID4gMCk7CisgICAgfQorICAgIHJldHVybiAkcGlkOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBwcm9jZXNzZXhpc3RzIGNoZWNrcyBpZiBhIHByb2Nlc3Mgd2l0aCB0aGUgcGlkIHN0b3JlZCBpbiB0aGUgZ2l2ZW4KKyMgcGlkZmlsZSBleGlzdHMgYW5kIGlzIGFsaXZlLiBUaGlzIHdpbGwgcmV0dXJuIDAgb24gYW55IGZpbGUgcmVsYXRlZAorIyBlcnJvciBvciBpZiBhIHBpZCBjYW4gbm90IGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBnaXZlbiBmaWxlLiBXaGVuIGEKKyMgcHJvY2VzcyB3aXRoIHRoZSBzYW1lIHBpZCBhcyB0aGUgb25lIGV4dHJhY3RlZCBmcm9tIHRoZSBnaXZlbiBmaWxlCisjIGlzIGN1cnJlbnRseSBhbGl2ZSB0aGlzIHJldHVybnMgdGhhdCBwb3NpdGl2ZSBwaWQuIE90aGVyd2lzZSwgd2hlbgorIyB0aGUgcHJvY2VzcyBpcyBub3QgYWxpdmUsIHdpbGwgcmV0dXJuIHRoZSBuZWdhdGl2ZSB2YWx1ZSBvZiB0aGUgcGlkLgorIworc3ViIHByb2Nlc3NleGlzdHMgeworICAgIHVzZSBQT1NJWCAiOnN5c193YWl0X2giOworICAgIG15ICRwaWRmaWxlID0gJF9bMF07CisKKyAgICAjIGZldGNoIHBpZCBmcm9tIHBpZGZpbGUKKyAgICBteSAkcGlkID0gcGlkZnJvbWZpbGUoJHBpZGZpbGUpOworCisgICAgaWYoJHBpZCA+IDApIHsKKyAgICAgICAgIyB2ZXJpZnkgaWYgY3VycmVudGx5IGFsaXZlCisgICAgICAgIGlmKGtpbGwoMCwgJHBpZCkpIHsKKyAgICAgICAgICAgIHJldHVybiAkcGlkOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIyBnZXQgcmlkIG9mIHRoZSBjZXJ0YWlubHkgaW52YWxpZCBwaWRmaWxlCisgICAgICAgICAgICB1bmxpbmsoJHBpZGZpbGUpIGlmKCRwaWQgPT0gcGlkZnJvbWZpbGUoJHBpZGZpbGUpKTsKKyAgICAgICAgICAgICMgcmVhcCBpdHMgZGVhZCBjaGlsZHJlbiwgaWYgbm90IGRvbmUgeWV0CisgICAgICAgICAgICB3YWl0cGlkKCRwaWQsICZXTk9IQU5HKTsKKyAgICAgICAgICAgICMgbmVnYXRpdmUgcmV0dXJuIHZhbHVlIG1lYW5zIGRlYWQgcHJvY2VzcworICAgICAgICAgICAgcmV0dXJuIC0kcGlkOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBraWxscGlkIGF0dGVtcHRzIHRvIGdyYWNlZnVsbHkgc3RvcCBwcm9jZXNzZXMgaW4gdGhlIGdpdmVuIHBpZCBsaXN0CisjIHdpdGggYSBTSUdURVJNIHNpZ25hbCBhbmQgU0lHS0lMTHMgdGhvc2Ugd2hpY2ggaGF2ZW4ndCBkaWVkIG9uIHRpbWUuCisjCitzdWIga2lsbHBpZCB7CisgICAgdXNlIFBPU0lYICI6c3lzX3dhaXRfaCI7CisgICAgbXkgKCR2ZXJib3NlLCAkcGlkbGlzdCkgPSBAXzsKKyAgICBteSBAcmVxdWVzdGVkOworICAgIG15IEBzaWduYWxsZWQ7CisgICAgbXkgQHJlYXBjaGlsZDsKKworICAgICMgVGhlICdwaWRsaXN0JyBhcmd1bWVudCBpcyBhIHN0cmluZyBvZiB3aGl0ZXNwYWNlIHNlcGFyYXRlZCBwaWRzLgorICAgIHJldHVybiBpZihub3QgZGVmaW5lZCgkcGlkbGlzdCkpOworCisgICAgIyBNYWtlICdyZXF1ZXN0ZWQnIGhvbGQgdGhlIG5vbi1kdXBsaWNhdGUgcGlkcyBmcm9tICdwaWRsaXN0Jy4KKyAgICBAcmVxdWVzdGVkID0gc3BsaXQoJyAnLCAkcGlkbGlzdCk7CisgICAgcmV0dXJuIGlmKG5vdCBAcmVxdWVzdGVkKTsKKyAgICBpZihzY2FsYXIoQHJlcXVlc3RlZCkgPiAyKSB7CisgICAgICAgIEByZXF1ZXN0ZWQgPSBzb3J0KHskYSA8PT4gJGJ9IEByZXF1ZXN0ZWQpOworICAgIH0KKyAgICBmb3IobXkgJGkgPSBzY2FsYXIoQHJlcXVlc3RlZCkgLSAyOyAkaSA+PSAwOyAkaS0tKSB7CisgICAgICAgIGlmKCRyZXF1ZXN0ZWRbJGldID09ICRyZXF1ZXN0ZWRbJGkrMV0pIHsKKyAgICAgICAgICAgIHNwbGljZSBAcmVxdWVzdGVkLCAkaSsxLCAxOworICAgICAgICB9CisgICAgfQorCisgICAgIyBTZW5kIGEgU0lHVEVSTSB0byBwcm9jZXNzZXMgd2hpY2ggYXJlIGFsaXZlIHRvIGdyYWNlZnVsbHkgc3RvcCB0aGVtLgorICAgIGZvcmVhY2ggbXkgJHRtcCAoQHJlcXVlc3RlZCkgeworICAgICAgICBjaG9tcCAkdG1wOworICAgICAgICBpZigkdG1wID1+IC9eKFxkKykkLykgeworICAgICAgICAgICAgbXkgJHBpZCA9ICQxOworICAgICAgICAgICAgaWYoJHBpZCA+IDApIHsKKyAgICAgICAgICAgICAgICBpZihraWxsKDAsICRwaWQpKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJSVU46IFByb2Nlc3Mgd2l0aCBwaWQgJHBpZCBzaWduYWxsZWQgdG8gZGllXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHZlcmJvc2UpOworICAgICAgICAgICAgICAgICAgICBraWxsKCJURVJNIiwgJHBpZCk7CisgICAgICAgICAgICAgICAgICAgIHB1c2ggQHNpZ25hbGxlZCwgJHBpZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJSVU46IFByb2Nlc3Mgd2l0aCBwaWQgJHBpZCBhbHJlYWR5IGRlYWRcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgICAgICMgaWYgcG9zc2libGUgcmVhcCBpdHMgZGVhZCBjaGlsZHJlbgorICAgICAgICAgICAgICAgICAgICB3YWl0cGlkKCRwaWQsICZXTk9IQU5HKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaCBAcmVhcGNoaWxkLCAkcGlkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICMgQWxsb3cgYWxsIHNpZ25hbGxlZCBwcm9jZXNzZXMgZml2ZSBzZWNvbmRzIHRvIGdyYWNlZnVsbHkgZGllLgorICAgIGlmKEBzaWduYWxsZWQpIHsKKyAgICAgICAgbXkgJHR3ZW50aWV0aHMgPSA1ICogMjA7CisgICAgICAgIHdoaWxlKCR0d2VudGlldGhzLS0pIHsKKyAgICAgICAgICAgIGZvcihteSAkaSA9IHNjYWxhcihAc2lnbmFsbGVkKSAtIDE7ICRpID49IDA7ICRpLS0pIHsKKyAgICAgICAgICAgICAgICBteSAkcGlkID0gJHNpZ25hbGxlZFskaV07CisgICAgICAgICAgICAgICAgaWYoIWtpbGwoMCwgJHBpZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlJVTjogUHJvY2VzcyB3aXRoIHBpZCAkcGlkIGdyYWNlZnVsbHkgZGllZFxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR2ZXJib3NlKTsKKyAgICAgICAgICAgICAgICAgICAgc3BsaWNlIEBzaWduYWxsZWQsICRpLCAxOworICAgICAgICAgICAgICAgICAgICAjIGlmIHBvc3NpYmxlIHJlYXAgaXRzIGRlYWQgY2hpbGRyZW4KKyAgICAgICAgICAgICAgICAgICAgd2FpdHBpZCgkcGlkLCAmV05PSEFORyk7CisgICAgICAgICAgICAgICAgICAgIHB1c2ggQHJlYXBjaGlsZCwgJHBpZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0IGlmKG5vdCBzY2FsYXIoQHNpZ25hbGxlZCkpOworICAgICAgICAgICAgc2VsZWN0KHVuZGVmLCB1bmRlZiwgdW5kZWYsIDAuMDUpOworICAgICAgICB9CisgICAgfQorCisgICAgIyBNZXJjaWxlc3NseSBTSUdLSUxMIHByb2Nlc3NlcyBzdGlsbCBhbGl2ZS4KKyAgICBpZihAc2lnbmFsbGVkKSB7CisgICAgICAgIGZvcmVhY2ggbXkgJHBpZCAoQHNpZ25hbGxlZCkgeworICAgICAgICAgICAgaWYoJHBpZCA+IDApIHsKKyAgICAgICAgICAgICAgICBwcmludCgiUlVOOiBQcm9jZXNzIHdpdGggcGlkICRwaWQgZm9yY2VkIHRvIGRpZSB3aXRoIFNJR0tJTExcbiIpCisgICAgICAgICAgICAgICAgICAgIGlmKCR2ZXJib3NlKTsKKyAgICAgICAgICAgICAgICBraWxsKCJLSUxMIiwgJHBpZCk7CisgICAgICAgICAgICAgICAgIyBpZiBwb3NzaWJsZSByZWFwIGl0cyBkZWFkIGNoaWxkcmVuCisgICAgICAgICAgICAgICAgd2FpdHBpZCgkcGlkLCAmV05PSEFORyk7CisgICAgICAgICAgICAgICAgcHVzaCBAcmVhcGNoaWxkLCAkcGlkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgIyBSZWFwIHByb2Nlc3NlcyBkZWFkIGNoaWxkcmVuIGZvciBzdXJlLgorICAgIGlmKEByZWFwY2hpbGQpIHsKKyAgICAgICAgZm9yZWFjaCBteSAkcGlkIChAcmVhcGNoaWxkKSB7CisgICAgICAgICAgICBpZigkcGlkID4gMCkgeworICAgICAgICAgICAgICAgIHdhaXRwaWQoJHBpZCwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGtpbGxzb2NrZmlsdGVycyBraWxscyBzb2NrZmlsdGVyIHByb2Nlc3NlcyBmb3IgYSBnaXZlbiBzZXJ2ZXIuCisjCitzdWIga2lsbHNvY2tmaWx0ZXJzIHsKKyAgICBteSAoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICR2ZXJib3NlLCAkd2hpY2gpID0gQF87CisgICAgbXkgJHNlcnZlcjsKKyAgICBteSAkcGlkZmlsZTsKKyAgICBteSAkcGlkOworCisgICAgcmV0dXJuIGlmKCRwcm90byAhfiAvXihmdHB8aW1hcHxwb3AzfHNtdHApJC8pOworCisgICAgZGllICJ1bnN1cHBvcnRlZCBzb2NrZmlsdGVyOiAkd2hpY2giCisgICAgICAgIGlmKCR3aGljaCAmJiAoJHdoaWNoICF+IC9eKG1haW58ZGF0YSkkLykpOworCisgICAgJHNlcnZlciA9IHNlcnZlcm5hbWVfaWQoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pIGlmKCR2ZXJib3NlKTsKKworICAgIGlmKCEkd2hpY2ggfHwgKCR3aGljaCBlcSAnbWFpbicpKSB7CisgICAgICAgICRwaWRmaWxlID0gbWFpbnNvY2tmX3BpZGZpbGVuYW1lKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKyAgICAgICAgJHBpZCA9IHByb2Nlc3NleGlzdHMoJHBpZGZpbGUpOworICAgICAgICBpZigkcGlkID4gMCkgeworICAgICAgICAgICAgcHJpbnRmKCIqIGtpbGwgcGlkIGZvciAlcy0lcyA9PiAlZFxuIiwgJHNlcnZlciwKKyAgICAgICAgICAgICAgICAoJHByb3RvIGVxICdmdHAnKT8nY3RybCc6J2ZpbHQnLCAkcGlkKSBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICBraWxsKCJLSUxMIiwgJHBpZCk7CisgICAgICAgICAgICB3YWl0cGlkKCRwaWQsIDApOworICAgICAgICB9CisgICAgICAgIHVubGluaygkcGlkZmlsZSkgaWYoLWYgJHBpZGZpbGUpOworICAgIH0KKworICAgIHJldHVybiBpZigkcHJvdG8gbmUgJ2Z0cCcpOworCisgICAgaWYoISR3aGljaCB8fCAoJHdoaWNoIGVxICdkYXRhJykpIHsKKyAgICAgICAgJHBpZGZpbGUgPSBkYXRhc29ja2ZfcGlkZmlsZW5hbWUoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworICAgICAgICAkcGlkID0gcHJvY2Vzc2V4aXN0cygkcGlkZmlsZSk7CisgICAgICAgIGlmKCRwaWQgPiAwKSB7CisgICAgICAgICAgICBwcmludGYoIioga2lsbCBwaWQgZm9yICVzLWRhdGEgPT4gJWRcbiIsICRzZXJ2ZXIsCisgICAgICAgICAgICAgICAgJHBpZCkgaWYoJHZlcmJvc2UpOworICAgICAgICAgICAga2lsbCgiS0lMTCIsICRwaWQpOworICAgICAgICAgICAgd2FpdHBpZCgkcGlkLCAwKTsKKyAgICAgICAgfQorICAgICAgICB1bmxpbmsoJHBpZGZpbGUpIGlmKC1mICRwaWRmaWxlKTsKKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGtpbGxhbGxzb2NrZmlsdGVycyBraWxscyBzb2NrZmlsdGVyIHByb2Nlc3NlcyBmb3IgYWxsIHNlcnZlcnMuCisjCitzdWIga2lsbGFsbHNvY2tmaWx0ZXJzIHsKKyAgICBteSAkdmVyYm9zZSA9ICRfWzBdOworCisgICAgZm9yIG15ICRwcm90byAoKCdmdHAnLCAnaW1hcCcsICdwb3AzJywgJ3NtdHAnKSkgeworICAgICAgICBmb3IgbXkgJGlwdm51bSAoKCc0JywgJzYnKSkgeworICAgICAgICAgICAgZm9yIG15ICRpZG51bSAoKCcxJywgJzInKSkgeworICAgICAgICAgICAgICAgIGtpbGxzb2NrZmlsdGVycygkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJHZlcmJvc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisKK3N1YiBzZXRfYWR2aXNvcl9yZWFkX2xvY2sgeworICAgIG15ICgkZmlsZW5hbWUpID0gQF87CisKKyAgICBpZihvcGVuKEZJTEVILCAiPiRmaWxlbmFtZSIpKSB7CisgICAgICAgIGNsb3NlKEZJTEVIKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwcmludGYgIkVycm9yIGNyZWF0aW5nIGxvY2sgZmlsZSAkZmlsZW5hbWUgZXJyb3I6ICQhIjsKK30KKworCitzdWIgY2xlYXJfYWR2aXNvcl9yZWFkX2xvY2sgeworICAgIG15ICgkZmlsZW5hbWUpID0gQF87CisKKyAgICBpZigtZiAkZmlsZW5hbWUpIHsKKyAgICAgICAgdW5saW5rKCRmaWxlbmFtZSk7CisgICAgfQorfQorCisKKzE7CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9mdHBzZXJ2ZXIucGwgYi9jdXJsLTcuMjUuMC90ZXN0cy9mdHBzZXJ2ZXIucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDM0YWM3MQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2Z0cHNlcnZlci5wbApAQCAtMCwwICsxLDIwNzIgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgaXMgYSBzZXJ2ZXIgZGVzaWduZWQgZm9yIHRoZSBjdXJsIHRlc3Qgc3VpdGUuCisjCisjIEluIERlY2VtYmVyIDIwMDkgd2Ugc3RhcnRlZCByZW1ha2luZyB0aGUgc2VydmVyIHRvIHN1cHBvcnQgbW9yZSBwcm90b2NvbHMKKyMgdGhhdCBhcmUgc2ltaWxhciBpbiBzcGlyaXQuIExpa2UgUE9QMywgSU1BUCBhbmQgU01UUCBpbiBhZGRpdGlvbiB0byB0aGUgRlRQCisjIGl0IGFscmVhZHkgc3VwcG9ydGVkIHNpbmNlIGEgbG9uZyB0aW1lLiBOb3RlIHRoYXQgaXQgc3RpbGwgb25seSBzdXBwb3J0cyBvbmUKKyMgcHJvdG9jb2wgcGVyIGludm9rZS4gWW91IG5lZWQgdG8gc3RhcnQgbXVsdGlwbGUgc2VydmVycyB0byBzdXBwb3J0IG11bHRpcGxlCisjIHByb3RvY29scyBzaW11bHRhbmVvdXNseS4KKyMKKyMgSXQgaXMgbWVhbnQgdG8gZXhlcmNpc2UgY3VybCwgaXQgaXMgbm90IG1lYW50IHRvIGJlIGEgZnVsbHkgd29ya2luZworIyBvciBldmVuIHZlcnkgc3RhbmRhcmQgY29tcGxpYW50IHNlcnZlci4KKyMKKyMgWW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgcG9ydCBvbiB0aGUgY29tbWFuZCBsaW5lLCBvdGhlcndpc2UgaXQnbGwKKyMgZGVmYXVsdCB0byBwb3J0IDg5MjEuCisjCisjIEFsbCBzb2NrZXQvbmV0d29yay9UQ1AgcmVsYXRlZCBzdHVmZiBpcyBkb25lIGJ5IHRoZSAnc29ja2ZpbHQnIHByb2dyYW0uCisjCisKK0JFR0lOIHsKKyAgICBASU5DPShASU5DLCAkRU5WeydzcmNkaXInfSwgJy4nKTsKKyAgICAjIHN1YiBzZWNvbmQgdGltZXN0YW1waW5nIG5lZWRzIFRpbWU6OkhpUmVzCisgICAgZXZhbCB7CisgICAgICAgIG5vIHdhcm5pbmdzICJhbGwiOworICAgICAgICByZXF1aXJlIFRpbWU6OkhpUmVzOworICAgICAgICBpbXBvcnQgIFRpbWU6OkhpUmVzIHF3KCBnZXR0aW1lb2ZkYXkgKTsKKyAgICB9Cit9CisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgSVBDOjpPcGVuMjsKKworcmVxdWlyZSAiZ2V0cGFydC5wbSI7CityZXF1aXJlICJmdHAucG0iOworcmVxdWlyZSAiZGlyZWN0b3JpZXMucG0iOworCit1c2Ugc2VydmVyaGVscCBxdygKKyAgICBzZXJ2ZXJuYW1lX3N0cgorICAgIHNlcnZlcl9waWRmaWxlbmFtZQorICAgIHNlcnZlcl9sb2dmaWxlbmFtZQorICAgIG1haW5zb2NrZl9waWRmaWxlbmFtZQorICAgIG1haW5zb2NrZl9sb2dmaWxlbmFtZQorICAgIGRhdGFzb2NrZl9waWRmaWxlbmFtZQorICAgIGRhdGFzb2NrZl9sb2dmaWxlbmFtZQorICAgICk7CisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIGdsb2JhbCB2YXJzLi4uCisjCitteSAkdmVyYm9zZSA9IDA7ICAgICMgc2V0IHRvIDEgZm9yIGRlYnVnZ2luZworbXkgJGlkc3RyID0gIiI7ICAgICAjIHNlcnZlciBpbnN0YW5jZSBzdHJpbmcKK215ICRpZG51bSA9IDE7ICAgICAgIyBzZXJ2ZXIgaW5zdGFuY2UgbnVtYmVyCitteSAkaXB2bnVtID0gNDsgICAgICMgc2VydmVyIElQdiBudW1iZXIgKDQgb3IgNikKK215ICRwcm90byA9ICdmdHAnOyAgIyBkZWZhdWx0IHNlcnZlciBwcm90b2NvbAorbXkgJHNyY2RpcjsgICAgICAgICAjIGRpcmVjdG9yeSB3aGVyZSBmdHBzZXJ2ZXIucGwgaXMgbG9jYXRlZAorbXkgJHNydnJuYW1lOyAgICAgICAjIHNlcnZlciBuYW1lIGZvciBwcmVzZW50YXRpb24gcHVycG9zZXMKKworbXkgJHBhdGggICA9ICcuJzsKK215ICRsb2dkaXIgPSAkcGF0aCAuJy9sb2cnOworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBnbG9iYWwgdmFycyB1c2VkIGZvciBzZXJ2ZXIgYWRkcmVzcyBhbmQgcHJpbWFyeSBsaXN0ZW5lciBwb3J0CisjCitteSAkcG9ydCA9IDg5MjE7ICAgICAgICAgICAgICAgIyBkZWZhdWx0IHByaW1hcnkgbGlzdGVuZXIgcG9ydAorbXkgJGxpc3RlbmFkZHIgPSAnMTI3LjAuMC4xJzsgICMgZGVmYXVsdCBhZGRyZXNzIGZvciBsaXN0ZW5lciBwb3J0CisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIGdsb2JhbCB2YXJzIHVzZWQgZm9yIGZpbGUgbmFtZXMKKyMKK215ICRwaWRmaWxlOyAgICAgICAgICAgICMgc2VydmVyIHBpZCBmaWxlIG5hbWUKK215ICRsb2dmaWxlOyAgICAgICAgICAgICMgc2VydmVyIGxvZyBmaWxlIG5hbWUKK215ICRtYWluc29ja2ZfcGlkZmlsZTsgICMgcGlkIGZpbGUgZm9yIHByaW1hcnkgY29ubmVjdGlvbiBzb2NrZmlsdCBwcm9jZXNzCitteSAkbWFpbnNvY2tmX2xvZ2ZpbGU7ICAjIGxvZyBmaWxlIGZvciBwcmltYXJ5IGNvbm5lY3Rpb24gc29ja2ZpbHQgcHJvY2VzcworbXkgJGRhdGFzb2NrZl9waWRmaWxlOyAgIyBwaWQgZmlsZSBmb3Igc2Vjb25kYXJ5IGNvbm5lY3Rpb24gc29ja2ZpbHQgcHJvY2VzcworbXkgJGRhdGFzb2NrZl9sb2dmaWxlOyAgIyBsb2cgZmlsZSBmb3Igc2Vjb25kYXJ5IGNvbm5lY3Rpb24gc29ja2ZpbHQgcHJvY2VzcworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBnbG9iYWwgdmFycyB1c2VkIGZvciBzZXJ2ZXIgbG9ncyBhZHZpc29yIHJlYWQgbG9jayBoYW5kbGluZworIworbXkgJFNFUlZFUkxPR1NfTE9DSyA9ICdsb2cvc2VydmVybG9ncy5sb2NrJzsKK215ICRzZXJ2ZXJsb2dzbG9ja2VkID0gMDsKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgZ2xvYmFsIHZhcnMgdXNlZCBmb3IgY2hpbGQgcHJvY2Vzc2VzIFBJRCB0cmFja2luZworIworbXkgJHNmcGlkOyAgICAgICAgIyBQSUQgZm9yIHByaW1hcnkgY29ubmVjdGlvbiBzb2NrZmlsdCBwcm9jZXNzCitteSAkc2xhdmVwaWQ7ICAgICAjIFBJRCBmb3Igc2Vjb25kYXJ5IGNvbm5lY3Rpb24gc29ja2ZpbHQgcHJvY2VzcworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBnbG9iYWwgdHlwZWdsb2IgZmlsZWhhbmRsZSB2YXJzIHRvIHJlYWQvd3JpdGUgZnJvbS90byBzb2NrZmlsdGVycworIworbG9jYWwgKlNGUkVBRDsgICAgIyB1c2VkIHRvIHJlYWQgZnJvbSBwcmltYXJ5IGNvbm5lY3Rpb24KK2xvY2FsICpTRldSSVRFOyAgICMgdXNlZCB0byB3cml0ZSB0byBwcmltYXJ5IGNvbm5lY3Rpb24KK2xvY2FsICpEUkVBRDsgICAgICMgdXNlZCB0byByZWFkIGZyb20gc2Vjb25kYXJ5IGNvbm5lY3Rpb24KK2xvY2FsICpEV1JJVEU7ICAgICMgdXNlZCB0byB3cml0ZSB0byBzZWNvbmRhcnkgY29ubmVjdGlvbgorCitteSAkc29ja2ZpbHRfdGltZW91dCA9IDU7ICAjIGRlZmF1bHQgdGltZW91dCBmb3Igc29ja2ZpbHRlciBlWHN5c3JlYWRzCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIGdsb2JhbCB2YXJzIHdoaWNoIGRlcGVuZCBvbiBzZXJ2ZXIgcHJvdG9jb2wgc2VsZWN0aW9uCisjCitteSAlY29tbWFuZGZ1bmM7ICAjIHByb3RvY29sIGNvbW1hbmQgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbGJhY2tzCitteSAlZGlzcGxheXRleHQ7ICAjIHRleHQgcmV0dXJuZWQgdG8gY2xpZW50IGJlZm9yZSBjYWxsYmFjayBydW5zCitteSBAd2VsY29tZTsgICAgICAjIHRleHQgcmV0dXJuZWQgdG8gY2xpZW50IHVwb24gY29ubmVjdGlvbgorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBnbG9iYWwgdmFycyBjdXN0b21pemVkIGZvciBlYWNoIHRlc3QgZnJvbSB0aGUgc2VydmVyIGNvbW1hbmRzIGZpbGUKKyMKK215ICRjdHJsZGVsYXk7ICAgICAjIHNldCBpZiBzZXJ2ZXIgc2hvdWxkIHRocm90dGxlIGN0cmwgc3RyZWFtCitteSAkZGF0YWRlbGF5OyAgICAgIyBzZXQgaWYgc2VydmVyIHNob3VsZCB0aHJvdHRsZSBkYXRhIHN0cmVhbQorbXkgJHJldHJ3ZWlyZG87ICAgICMgc2V0IGlmIGZ0cCBzZXJ2ZXIgc2hvdWxkIHVzZSBSRVRSV0VJUkRPCitteSAkcmV0cm5vc2l6ZTsgICAgIyBzZXQgaWYgZnRwIHNlcnZlciBzaG91bGQgdXNlIFJFVFJOT1NJWkUKK215ICRwYXN2YmFkaXA7ICAgICAjIHNldCBpZiBmdHAgc2VydmVyIHNob3VsZCB1c2UgUEFTVkJBRElQCitteSAkbm9zYXZlOyAgICAgICAgIyBzZXQgaWYgZnRwIHNlcnZlciBzaG91bGQgbm90IHNhdmUgdXBsb2FkZWQgZGF0YQorbXkgJG5vZGF0YWNvbm47ICAgICMgc2V0IGlmIGZ0cCBzcnZyIGRvZXNuJ3QgZXN0YWJsaXNoIG9yIGFjY2VwdHMgZGF0YSBjaGFubmVsCitteSAkbm9kYXRhY29ubjQyNTsgIyBzZXQgaWYgZnRwIHNydnIgZG9lc24ndCBlc3RhYmxpc2ggZGF0YSBjaCBhbmQgcmVwbGllcyA0MjUKK215ICRub2RhdGFjb25uNDIxOyAjIHNldCBpZiBmdHAgc3J2ciBkb2Vzbid0IGVzdGFibGlzaCBkYXRhIGNoIGFuZCByZXBsaWVzIDQyMQorbXkgJG5vZGF0YWNvbm4xNTA7ICMgc2V0IGlmIGZ0cCBzcnZyIGRvZXNuJ3QgZXN0YWJsaXNoIGRhdGEgY2ggYW5kIHJlcGxpZXMgMTUwCitteSAlY3VzdG9tcmVwbHk7ICAgIworbXkgJWN1c3RvbWNvdW50OyAgICMKK215ICVkZWxheXJlcGx5OyAgICAjCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIGdsb2JhbCB2YXJpYWJsZXMgZm9yIHRvIHRlc3QgZnRwIHdpbGRjYXJkbWF0Y2hpbmcgb3Igb3RoZXIgdGVzdCB0aGF0CisjIG5lZWQgZmxleGlibGUgTElTVCByZXNwb25zZXMuLiBhbmQgY29ycmVzcG9uZGluZyBmaWxlcy4KKyMgJGZ0cHRhcmdldGRpciBpcyBrZWVwaW5nIHRoZSBmYWtlICJuYW1lIiBvZiBMSVNUIGRpcmVjdG9yeS4KKyMKK215ICRmdHBsaXN0cGFyc2Vyc3RhdGU7CitteSAkZnRwdGFyZ2V0ZGlyOworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBnbG9iYWwgdmFyaWFibGVzIHVzZWQgd2hlbiBydW5uaW5nIGEgZnRwIHNlcnZlciB0byBrZWVwIHN0YXRlIGluZm8KKyMgcmVsYXRpdmUgdG8gdGhlIHNlY29uZGFyeSBvciBkYXRhIHNvY2tmaWx0IHByb2Nlc3MuIFZhbHVlcyBvZiB0aGVzZQorIyB2YXJpYWJsZXMgc2hvdWxkIG9ubHkgYmUgbW9kaWZpZWQgdXNpbmcgZGF0YXNvY2tmX3N0YXRlKCkgc3ViLCBnaXZlbgorIyB0aGF0IHRoZXkgYXJlIGNsb3NlbHkgcmVsYXRlZCBhbmQgcmVsYXRpb25zaGlwIGlzIGEgYml0IGF3a3dhcmQuCisjCitteSAkZGF0YXNvY2tmX3N0YXRlID0gJ1NUT1BQRUQnOyAjIHNlZSBkYXRhc29ja2Zfc3RhdGUoKSBzdWIKK215ICRkYXRhc29ja2ZfbW9kZSA9ICdub25lJzsgICAgICMgWydub25lJywnYWN0aXZlJywncGFzc2l2ZSddCitteSAkZGF0YXNvY2tmX3J1bnMgPSAnbm8nOyAgICAgICAjIFsnbm8nLCd5ZXMnXQorbXkgJGRhdGFzb2NrZl9jb25uID0gJ25vJzsgICAgICAgIyBbJ25vJywneWVzJ10KKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgZ2xvYmFsIHZhcnMgdXNlZCBmb3Igc2lnbmFsIGhhbmRsaW5nCisjCitteSAkZ290X2V4aXRfc2lnbmFsID0gMDsgIyBzZXQgaWYgcHJvZ3JhbSBzaG91bGQgZmluaXNoIGV4ZWN1dGlvbiBBU0FQCitteSAkZXhpdF9zaWduYWw7ICAgICAgICAgIyBmaXJzdCBzaWduYWwgaGFuZGxlZCBpbiBleGl0X3NpZ25hbF9oYW5kbGVyCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIGV4aXRfc2lnbmFsX2hhbmRsZXIgd2lsbCBiZSB0cmlnZ2VyZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJvZ3JhbQorIyBzaG91bGQgZmluaXNoIGl0cyBleGVjdXRpb24gaW4gYSBjb250cm9sbGVkIHdheSBhcyBzb29uIGFzIHBvc3NpYmxlLgorIyBGb3Igbm93LCBwcm9ncmFtIHdpbGwgYWxzbyB0ZXJtaW5hdGUgZnJvbSB3aXRoaW4gdGhpcyBoYW5kbGVyLgorIworc3ViIGV4aXRfc2lnbmFsX2hhbmRsZXIgeworICAgIG15ICRzaWduYW1lID0gc2hpZnQ7CisgICAgIyBGb3Igbm93LCBzaW1wbHkgbWltaWMgb2xkIGJlaGF2aW9yLgorICAgIGtpbGxzb2NrZmlsdGVycygkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJHZlcmJvc2UpOworICAgIHVubGluaygkcGlkZmlsZSk7CisgICAgaWYoJHNlcnZlcmxvZ3Nsb2NrZWQpIHsKKyAgICAgICAgJHNlcnZlcmxvZ3Nsb2NrZWQgPSAwOworICAgICAgICBjbGVhcl9hZHZpc29yX3JlYWRfbG9jaygkU0VSVkVSTE9HU19MT0NLKTsKKyAgICB9CisgICAgZXhpdDsKK30KKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgbG9nbXNnIGlzIGdlbmVyYWwgbWVzc2FnZSBsb2dnaW5nIHN1YnJvdXRpbmUgZm9yIG91ciB0ZXN0IHNlcnZlcnMuCisjCitzdWIgbG9nbXNnIHsKKyAgICBteSAkbm93OworICAgICMgc3ViIHNlY29uZCB0aW1lc3RhbXBpbmcgbmVlZHMgVGltZTo6SGlSZXMKKyAgICBpZigkVGltZTo6SGlSZXM6OlZFUlNJT04pIHsKKyAgICAgICAgbXkgKCRzZWNvbmRzLCAkdXNlYykgPSBnZXR0aW1lb2ZkYXkoKTsKKyAgICAgICAgbXkgKCRzZWMsJG1pbiwkaG91ciwkbWRheSwkbW9uLCR5ZWFyLCR3ZGF5LCR5ZGF5LCRpc2RzdCkgPQorICAgICAgICAgICAgbG9jYWx0aW1lKCRzZWNvbmRzKTsKKyAgICAgICAgJG5vdyA9IHNwcmludGYoIiUwMmQ6JTAyZDolMDJkLiUwNmQgIiwgJGhvdXIsICRtaW4sICRzZWMsICR1c2VjKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG15ICRzZWNvbmRzID0gdGltZSgpOworICAgICAgICBteSAoJHNlYywkbWluLCRob3VyLCRtZGF5LCRtb24sJHllYXIsJHdkYXksJHlkYXksJGlzZHN0KSA9CisgICAgICAgICAgICBsb2NhbHRpbWUoJHNlY29uZHMpOworICAgICAgICAkbm93ID0gc3ByaW50ZigiJTAyZDolMDJkOiUwMmQgIiwgJGhvdXIsICRtaW4sICRzZWMpOworICAgIH0KKyAgICBpZihvcGVuKExPR0ZJTEVGSCwgIj4+JGxvZ2ZpbGUiKSkgeworICAgICAgICBwcmludCBMT0dGSUxFRkggJG5vdzsKKyAgICAgICAgcHJpbnQgTE9HRklMRUZIIEBfOworICAgICAgICBjbG9zZShMT0dGSUxFRkgpOworICAgIH0KK30KKworc3ViIGZ0cG1zZyB7CisgICMgYXBwZW5kIHRvIHRoZSBzZXJ2ZXIuaW5wdXQgZmlsZQorICBvcGVuKElOUFVULCAiPj5sb2cvc2VydmVyJGlkc3RyLmlucHV0IikgfHwKKyAgICBsb2dtc2cgImZhaWxlZCB0byBvcGVuIGxvZy9zZXJ2ZXIkaWRzdHIuaW5wdXRcbiI7CisKKyAgcHJpbnQgSU5QVVQgQF87CisgIGNsb3NlKElOUFVUKTsKKworICAjIHVzZSB0aGlzLCBvcGVuLT5wcmludC0+Y2xvc2Ugc3lzdGVtIG9ubHkgdG8gbWFrZSB0aGUgZmlsZQorICAjIG9wZW4gYXMgbGl0dGxlIGFzIHBvc3NpYmxlLCB0byBtYWtlIHRoZSB0ZXN0IHN1aXRlIHJ1bgorICAjIGJldHRlciBvbiB3aW5kb3dzL2N5Z3dpbgorfQorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBlWHN5c3JlYWQgaXMgYSB3cmFwcGVyIGFyb3VuZCBwZXJsJ3Mgc3lzcmVhZCgpIGZ1bmN0aW9uLiBUaGlzIHdpbGwKKyMgcmVwZWF0IHRoZSBjYWxsIHRvIHN5c3JlYWQoKSB1bnRpbCBpdCBoYXMgYWN0dWFsbHkgcmVhZCB0aGUgY29tcGxldGUKKyMgbnVtYmVyIG9mIHJlcXVlc3RlZCBieXRlcyBvciBhbiB1bnJlY292ZXJhYmxlIGNvbmRpdGlvbiBvY2N1cnMuCisjIE9uIHN1Y2Nlc3MgcmV0dXJucyBhIHBvc2l0aXZlIHZhbHVlLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZC4KKyMgT24gZmFpbHVyZSBvciB0aW1lb3V0IHJldHVybnMgemVyby4KKyMKK3N1YiBlWHN5c3JlYWQgeworICAgIG15ICRGSCAgICAgID0gc2hpZnQ7CisgICAgbXkgJHNjYWxhciAgPSBzaGlmdDsKKyAgICBteSAkbmJ5dGVzICA9IHNoaWZ0OworICAgIG15ICR0aW1lb3V0ID0gc2hpZnQ7ICMgQSB6ZXJvIHRpbWVvdXQgZGlzYWJsZXMgZVhzeXNyZWFkKCkgdGltZSBsaW1pdAorICAgICMKKyAgICBteSAkdGltZV9saW1pdGVkID0gMDsKKyAgICBteSAkdGltZW91dF9yZXN0ID0gMDsKKyAgICBteSAkc3RhcnRfdGltZSA9IDA7CisgICAgbXkgJG5yZWFkICA9IDA7CisgICAgbXkgJHJjOworCisgICAgJCRzY2FsYXIgPSAiIjsKKworICAgIGlmKChub3QgZGVmaW5lZCAkbmJ5dGVzKSB8fCAoJG5ieXRlcyA8IDEpKSB7CisgICAgICAgIGxvZ21zZyAiRXJyb3I6IGVYc3lzcmVhZCgpIGZhaWx1cmU6ICIgLgorICAgICAgICAgICAgICAgImxlbmd0aCBhcmd1bWVudCBtdXN0IGJlIHBvc2l0aXZlXG4iOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYoKG5vdCBkZWZpbmVkICR0aW1lb3V0KSB8fCAoJHRpbWVvdXQgPCAwKSkgeworICAgICAgICBsb2dtc2cgIkVycm9yOiBlWHN5c3JlYWQoKSBmYWlsdXJlOiAiIC4KKyAgICAgICAgICAgICAgICJ0aW1lb3V0IGFyZ3VtZW50IG11c3QgYmUgemVybyBvciBwb3NpdGl2ZVxuIjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmKCR0aW1lb3V0ID4gMCkgeworICAgICAgICAjIGNhbGxlciBzZXRzIGVYc3lzcmVhZCgpIHRpbWUgbGltaXQKKyAgICAgICAgJHRpbWVfbGltaXRlZCA9IDE7CisgICAgICAgICR0aW1lb3V0X3Jlc3QgPSAkdGltZW91dDsKKyAgICAgICAgJHN0YXJ0X3RpbWUgPSBpbnQodGltZSgpKTsKKyAgICB9CisKKyAgICB3aGlsZSgkbnJlYWQgPCAkbmJ5dGVzKSB7CisgICAgICAgIGlmKCR0aW1lX2xpbWl0ZWQpIHsKKyAgICAgICAgICAgIGV2YWwgeworICAgICAgICAgICAgICAgIGxvY2FsICRTSUd7QUxSTX0gPSBzdWIgeyBkaWUgImFsYXJtXG4iOyB9OworICAgICAgICAgICAgICAgIGFsYXJtICR0aW1lb3V0X3Jlc3Q7CisgICAgICAgICAgICAgICAgJHJjID0gc3lzcmVhZCgkRkgsICQkc2NhbGFyLCAkbmJ5dGVzIC0gJG5yZWFkLCAkbnJlYWQpOworICAgICAgICAgICAgICAgIGFsYXJtIDA7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgJHRpbWVvdXRfcmVzdCA9ICR0aW1lb3V0IC0gKGludCh0aW1lKCkpIC0gJHN0YXJ0X3RpbWUpOworICAgICAgICAgICAgaWYoJHRpbWVvdXRfcmVzdCA8IDEpIHsKKyAgICAgICAgICAgICAgICBsb2dtc2cgIkVycm9yOiBlWHN5c3JlYWQoKSBmYWlsdXJlOiB0aW1lZCBvdXRcbiI7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAkcmMgPSBzeXNyZWFkKCRGSCwgJCRzY2FsYXIsICRuYnl0ZXMgLSAkbnJlYWQsICRucmVhZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYoJGdvdF9leGl0X3NpZ25hbCkgeworICAgICAgICAgICAgbG9nbXNnICJFcnJvcjogZVhzeXNyZWFkKCkgZmFpbHVyZTogc2lnbmFsbGVkIHRvIGRpZVxuIjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmKG5vdCBkZWZpbmVkICRyYykgeworICAgICAgICAgICAgaWYoJCF7RUlOVFJ9KSB7CisgICAgICAgICAgICAgICAgbG9nbXNnICJXYXJuaW5nOiByZXRyeWluZyBzeXNyZWFkKCkgaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGxcbiI7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCQhe0VBR0FJTn0pIHsKKyAgICAgICAgICAgICAgICBsb2dtc2cgIldhcm5pbmc6IHJldHJ5aW5nIHN5c3JlYWQoKSBkdWUgdG8gRUFHQUlOXG4iOworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZigkIXtFV09VTERCTE9DS30pIHsKKyAgICAgICAgICAgICAgICBsb2dtc2cgIldhcm5pbmc6IHJldHJ5aW5nIHN5c3JlYWQoKSBkdWUgdG8gRVdPVUxEQkxPQ0tcbiI7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvZ21zZyAiRXJyb3I6IHN5c3JlYWQoKSBmYWlsdXJlOiAkIVxuIjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmKCRyYyA8IDApIHsKKyAgICAgICAgICAgIGxvZ21zZyAiRXJyb3I6IHN5c3JlYWQoKSBmYWlsdXJlOiByZXR1cm5lZCBuZWdhdGl2ZSB2YWx1ZSAkcmNcbiI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZigkcmMgPT0gMCkgeworICAgICAgICAgICAgbG9nbXNnICJFcnJvcjogc3lzcmVhZCgpIGZhaWx1cmU6IHJlYWQgemVybyBieXRlc1xuIjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgICRucmVhZCArPSAkcmM7CisgICAgfQorICAgIHJldHVybiAkbnJlYWQ7Cit9CisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIHJlYWRfbWFpbnNvY2tmIGF0dGVtcHRzIHRvIHJlYWQgdGhlIGdpdmVuIGFtb3VudCBvZiBvdXRwdXQgZnJvbSB0aGUKKyMgc29ja2ZpbHRlciB3aGljaCBpcyBpbiB1c2UgZm9yIHRoZSBtYWluIG9yIHByaW1hcnkgY29ubmVjdGlvbi4gVGhpcworIyByZWFkcyB1bnRyYW5zbGF0ZWQgc29ja2ZpbHQgbGluZ28gd2hpY2ggbWF5IGhvbGQgZGF0YSByZWFkIGZyb20gdGhlCisjIG1haW4gb3IgcHJpbWFyeSBzb2NrZXQuIE9uIHN1Y2Nlc3MgcmV0dXJucyAxLCBvdGhlcndpc2UgemVyby4KKyMKK3N1YiByZWFkX21haW5zb2NrZiB7CisgICAgbXkgJHNjYWxhciAgPSBzaGlmdDsKKyAgICBteSAkbmJ5dGVzICA9IHNoaWZ0OworICAgIG15ICR0aW1lb3V0ID0gc2hpZnQ7ICMgT3B0aW9uYWwgYXJndW1lbnQsIGlmIHplcm8gYmxvY2tzIGluZGVmaW5pdGl2ZWx5CisgICAgbXkgJEZIID0gXCpTRlJFQUQ7CisKKyAgICBpZihub3QgZGVmaW5lZCAkdGltZW91dCkgeworICAgICAgICAkdGltZW91dCA9ICRzb2NrZmlsdF90aW1lb3V0ICsgKCRuYnl0ZXMgPj4gMTIpOworICAgIH0KKyAgICBpZihlWHN5c3JlYWQoJEZILCAkc2NhbGFyLCAkbmJ5dGVzLCAkdGltZW91dCkgIT0gJG5ieXRlcykgeworICAgICAgICBteSAoJGZjYWxsZXIsICRsY2FsbGVyKSA9IChjYWxsZXIpWzEsMl07CisgICAgICAgIGxvZ21zZyAiRXJyb3I6IHJlYWRfbWFpbnNvY2tmKCkgZmFpbHVyZSBhdCAkZmNhbGxlciAiIC4KKyAgICAgICAgICAgICAgICJsaW5lICRsY2FsbGVyLiBEdWUgdG8gZVhzeXNyZWFkKCkgZmFpbHVyZVxuIjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAxOworfQorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyByZWFkX2RhdGFzb2NrZiBhdHRlbXB0cyB0byByZWFkIHRoZSBnaXZlbiBhbW91bnQgb2Ygb3V0cHV0IGZyb20gdGhlCisjIHNvY2tmaWx0ZXIgd2hpY2ggaXMgaW4gdXNlIGZvciB0aGUgZGF0YSBvciBzZWNvbmRhcnkgY29ubmVjdGlvbi4gVGhpcworIyByZWFkcyB1bnRyYW5zbGF0ZWQgc29ja2ZpbHQgbGluZ28gd2hpY2ggbWF5IGhvbGQgZGF0YSByZWFkIGZyb20gdGhlCisjIGRhdGEgb3Igc2Vjb25kYXJ5IHNvY2tldC4gT24gc3VjY2VzcyByZXR1cm5zIDEsIG90aGVyd2lzZSB6ZXJvLgorIworc3ViIHJlYWRfZGF0YXNvY2tmIHsKKyAgICBteSAkc2NhbGFyID0gc2hpZnQ7CisgICAgbXkgJG5ieXRlcyA9IHNoaWZ0OworICAgIG15ICR0aW1lb3V0ID0gc2hpZnQ7ICMgT3B0aW9uYWwgYXJndW1lbnQsIGlmIHplcm8gYmxvY2tzIGluZGVmaW5pdGl2ZWx5CisgICAgbXkgJEZIID0gXCpEUkVBRDsKKworICAgIGlmKG5vdCBkZWZpbmVkICR0aW1lb3V0KSB7CisgICAgICAgICR0aW1lb3V0ID0gJHNvY2tmaWx0X3RpbWVvdXQgKyAoJG5ieXRlcyA+PiAxMik7CisgICAgfQorICAgIGlmKGVYc3lzcmVhZCgkRkgsICRzY2FsYXIsICRuYnl0ZXMsICR0aW1lb3V0KSAhPSAkbmJ5dGVzKSB7CisgICAgICAgIG15ICgkZmNhbGxlciwgJGxjYWxsZXIpID0gKGNhbGxlcilbMSwyXTsKKyAgICAgICAgbG9nbXNnICJFcnJvcjogcmVhZF9kYXRhc29ja2YoKSBmYWlsdXJlIGF0ICRmY2FsbGVyICIgLgorICAgICAgICAgICAgICAgImxpbmUgJGxjYWxsZXIuIER1ZSB0byBlWHN5c3JlYWQoKSBmYWlsdXJlXG4iOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKK3N1YiBzeXNyZWFkX29yX2RpZSB7CisgICAgbXkgJEZIICAgICA9IHNoaWZ0OworICAgIG15ICRzY2FsYXIgPSBzaGlmdDsKKyAgICBteSAkbGVuZ3RoID0gc2hpZnQ7CisgICAgbXkgJGZjYWxsZXI7CisgICAgbXkgJGxjYWxsZXI7CisgICAgbXkgJHJlc3VsdDsKKworICAgICRyZXN1bHQgPSBzeXNyZWFkKCQkRkgsICQkc2NhbGFyLCAkbGVuZ3RoKTsKKworICAgIGlmKG5vdCBkZWZpbmVkICRyZXN1bHQpIHsKKyAgICAgICAgKCRmY2FsbGVyLCAkbGNhbGxlcikgPSAoY2FsbGVyKVsxLDJdOworICAgICAgICBsb2dtc2cgIkZhaWxlZCB0byByZWFkIGlucHV0XG4iOworICAgICAgICBsb2dtc2cgIkVycm9yOiAkc3J2cm5hbWUgc2VydmVyLCBzeXNyZWFkIGVycm9yOiAkIVxuIjsKKyAgICAgICAgbG9nbXNnICJFeGl0ZWQgZnJvbSBzeXNyZWFkX29yX2RpZSgpIGF0ICRmY2FsbGVyICIgLgorICAgICAgICAgICAgICAgImxpbmUgJGxjYWxsZXIuICRzcnZybmFtZSBzZXJ2ZXIsIHN5c3JlYWQgZXJyb3I6ICQhXG4iOworICAgICAgICBraWxsc29ja2ZpbHRlcnMoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICR2ZXJib3NlKTsKKyAgICAgICAgdW5saW5rKCRwaWRmaWxlKTsKKyAgICAgICAgaWYoJHNlcnZlcmxvZ3Nsb2NrZWQpIHsKKyAgICAgICAgICAgICRzZXJ2ZXJsb2dzbG9ja2VkID0gMDsKKyAgICAgICAgICAgIGNsZWFyX2Fkdmlzb3JfcmVhZF9sb2NrKCRTRVJWRVJMT0dTX0xPQ0spOworICAgICAgICB9CisgICAgICAgIGV4aXQ7CisgICAgfQorICAgIGVsc2lmKCRyZXN1bHQgPT0gMCkgeworICAgICAgICAoJGZjYWxsZXIsICRsY2FsbGVyKSA9IChjYWxsZXIpWzEsMl07CisgICAgICAgIGxvZ21zZyAiRmFpbGVkIHRvIHJlYWQgaW5wdXRcbiI7CisgICAgICAgIGxvZ21zZyAiRXJyb3I6ICRzcnZybmFtZSBzZXJ2ZXIsIHJlYWQgemVyb1xuIjsKKyAgICAgICAgbG9nbXNnICJFeGl0ZWQgZnJvbSBzeXNyZWFkX29yX2RpZSgpIGF0ICRmY2FsbGVyICIgLgorICAgICAgICAgICAgICAgImxpbmUgJGxjYWxsZXIuICRzcnZybmFtZSBzZXJ2ZXIsIHJlYWQgemVyb1xuIjsKKyAgICAgICAga2lsbHNvY2tmaWx0ZXJzKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkdmVyYm9zZSk7CisgICAgICAgIHVubGluaygkcGlkZmlsZSk7CisgICAgICAgIGlmKCRzZXJ2ZXJsb2dzbG9ja2VkKSB7CisgICAgICAgICAgICAkc2VydmVybG9nc2xvY2tlZCA9IDA7CisgICAgICAgICAgICBjbGVhcl9hZHZpc29yX3JlYWRfbG9jaygkU0VSVkVSTE9HU19MT0NLKTsKKyAgICAgICAgfQorICAgICAgICBleGl0OworICAgIH0KKworICAgIHJldHVybiAkcmVzdWx0OworfQorCitzdWIgc3RhcnRzZiB7CisgICAgbXkgJG1haW5zb2NrZmNtZCA9ICIuL3NlcnZlci9zb2NrZmlsdCAiIC4KKyAgICAgICAgIi0taXB2JGlwdm51bSAtLXBvcnQgJHBvcnQgIiAuCisgICAgICAgICItLXBpZGZpbGUgXCIkbWFpbnNvY2tmX3BpZGZpbGVcIiAiIC4KKyAgICAgICAgIi0tbG9nZmlsZSBcIiRtYWluc29ja2ZfbG9nZmlsZVwiIjsKKyAgICAkc2ZwaWQgPSBvcGVuMigqU0ZSRUFELCAqU0ZXUklURSwgJG1haW5zb2NrZmNtZCk7CisKKyAgICBwcmludCBTVERFUlIgIiRtYWluc29ja2ZjbWRcbiIgaWYoJHZlcmJvc2UpOworCisgICAgcHJpbnQgU0ZXUklURSAiUElOR1xuIjsKKyAgICBteSAkcG9uZzsKKyAgICBzeXNyZWFkX29yX2RpZShcKlNGUkVBRCwgXCRwb25nLCA1KTsKKworICAgIGlmKCRwb25nICF+IC9eUE9ORy8pIHsKKyAgICAgICAgbG9nbXNnICJGYWlsZWQgc29ja2ZpbHQgY29tbWFuZDogJG1haW5zb2NrZmNtZFxuIjsKKyAgICAgICAga2lsbHNvY2tmaWx0ZXJzKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkdmVyYm9zZSk7CisgICAgICAgIHVubGluaygkcGlkZmlsZSk7CisgICAgICAgIGlmKCRzZXJ2ZXJsb2dzbG9ja2VkKSB7CisgICAgICAgICAgICAkc2VydmVybG9nc2xvY2tlZCA9IDA7CisgICAgICAgICAgICBjbGVhcl9hZHZpc29yX3JlYWRfbG9jaygkU0VSVkVSTE9HU19MT0NLKTsKKyAgICAgICAgfQorICAgICAgICBkaWUgIkZhaWxlZCB0byBzdGFydCBzb2NrZmlsdCEiOworICAgIH0KK30KKworCitzdWIgc29ja2ZpbHQgeworICAgIG15ICRsOworICAgIGZvcmVhY2ggJGwgKEBfKSB7CisgICAgICAgIHByaW50ZiBTRldSSVRFICJEQVRBXG4lMDR4XG4iLCBsZW5ndGgoJGwpOworICAgICAgICBwcmludCBTRldSSVRFICRsOworICAgIH0KK30KKworCitzdWIgc29ja2ZpbHRzZWNvbmRhcnkgeworICAgIG15ICRsOworICAgIGZvcmVhY2ggJGwgKEBfKSB7CisgICAgICAgIHByaW50ZiBEV1JJVEUgIkRBVEFcbiUwNHhcbiIsIGxlbmd0aCgkbCk7CisgICAgICAgIHByaW50IERXUklURSAkbDsKKyAgICB9Cit9CisKKworIyBTZW5kIGRhdGEgdG8gdGhlIGNsaWVudCBvbiB0aGUgY29udHJvbCBzdHJlYW0sIHdoaWNoIGhhcHBlbnMgdG8gYmUgcGxhaW4KKyMgc3Rkb3V0LgorCitzdWIgc2VuZGNvbnRyb2wgeworICAgIGlmKCEkY3RybGRlbGF5KSB7CisgICAgICAgICMgc3BpdCBpdCBhbGwgb3V0IGF0IG9uY2UKKyAgICAgICAgc29ja2ZpbHQgQF87CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBteSAkYSA9IGpvaW4oIiIsIEBfKTsKKyAgICAgICAgbXkgQGEgPSBzcGxpdCgiIiwgJGEpOworCisgICAgICAgIGZvcihAYSkgeworICAgICAgICAgICAgc29ja2ZpbHQgJF87CisgICAgICAgICAgICBzZWxlY3QodW5kZWYsIHVuZGVmLCB1bmRlZiwgMC4wMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgbXkgJGxvZzsKKyAgICBmb3JlYWNoICRsb2cgKEBfKSB7CisgICAgICAgIG15ICRsID0gJGxvZzsKKyAgICAgICAgJGwgPX4gcy9cci9bQ1JdL2c7CisgICAgICAgICRsID1+IHMvXG4vW0xGXS9nOworICAgICAgICBsb2dtc2cgIj4gXCIkbFwiXG4iOworICAgIH0KK30KKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgU2VuZCBkYXRhIHRvIHRoZSBGVFAgY2xpZW50IG9uIHRoZSBkYXRhIHN0cmVhbSB3aGVuIGRhdGEgY29ubmVjdGlvbgorIyBpcyBhY3R1YWxseSBlc3RhYmxpc2hlZC4gR2l2ZW4gdGhhdCB0aGlzIHN1YiBzaG91bGQgb25seSBiZSBjYWxsZWQKKyMgd2hlbiBhIGRhdGEgY29ubmVjdGlvbiBpcyBzdXBwb3NlZCB0byBiZSBlc3RhYmxpc2hlZCwgY2FsbGluZyB0aGlzCisjIHdpdGhvdXQgYSBkYXRhIGNvbm5lY3Rpb24gaXMgYW4gaW5kaWNhdGlvbiBvZiB3ZWFrIGxvZ2ljIHNvbWV3aGVyZS4KKyMKK3N1YiBzZW5kZGF0YSB7CisgICAgbXkgJGw7CisgICAgaWYoJGRhdGFzb2NrZl9jb25uIGVxICdubycpIHsKKyAgICAgICAgbG9nbXNnICJXQVJOSU5HOiBEZXRlY3RlZCBkYXRhIHNlbmRpbmcgYXR0ZW1wdCB3aXRob3V0IERBVEEgY2hhbm5lbFxuIjsKKyAgICAgICAgZm9yZWFjaCAkbCAoQF8pIHsKKyAgICAgICAgICAgIGxvZ21zZyAiV0FSTklORzogRGF0YSBzd2FsbG93ZWQ6ICRsXG4iCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3JlYWNoICRsIChAXykgeworICAgICAgaWYoISRkYXRhZGVsYXkpIHsKKyAgICAgICAgIyBzcGl0IGl0IGFsbCBvdXQgYXQgb25jZQorICAgICAgICBzb2NrZmlsdHNlY29uZGFyeSAkbDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAgICMgcGF1c2UgYmV0d2VlbiBlYWNoIGJ5dGUKKyAgICAgICAgICBmb3IgKHNwbGl0KC8vLCRsKSkgeworICAgICAgICAgICAgICBzb2NrZmlsdHNlY29uZGFyeSAkXzsKKyAgICAgICAgICAgICAgc2VsZWN0KHVuZGVmLCB1bmRlZiwgdW5kZWYsIDAuMDEpOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Cit9CisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIHByb3RvY29sc2V0dXAgaW5pdGlhbGl6ZXMgdGhlICdkaXNwbGF5dGV4dCcgYW5kICdjb21tYW5kZnVuYycgaGFzaGVzCisjIGZvciB0aGUgZ2l2ZW4gcHJvdG9jb2wuIFJlZmVyZW5jZXMgdG8gcHJvdG9jb2wgY29tbWFuZCBjYWxsYmFja3MgYXJlCisjIHN0b3JlZCBpbiAnY29tbWFuZGZ1bmMnIGhhc2gsIGFuZCB0ZXh0IHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlCisjIGNsaWVudCBiZWZvcmUgdGhlIGNvbW1hbmQgY2FsbGJhY2sgcnVucyBpcyBzdG9yZWQgaW4gJ2Rpc3BsYXl0ZXh0Jy4KKyMKK3N1YiBwcm90b2NvbHNldHVwIHsKKyAgICBteSAkcHJvdG8gPSAkX1swXTsKKworICAgIGlmKCRwcm90byBlcSAnZnRwJykgeworICAgICAgICAlY29tbWFuZGZ1bmMgPSAoCisgICAgICAgICAgICAnUE9SVCcgPT4gXCZQT1JUX2Z0cCwKKyAgICAgICAgICAgICdFUFJUJyA9PiBcJlBPUlRfZnRwLAorICAgICAgICAgICAgJ0xJU1QnID0+IFwmTElTVF9mdHAsCisgICAgICAgICAgICAnTkxTVCcgPT4gXCZOTFNUX2Z0cCwKKyAgICAgICAgICAgICdQQVNWJyA9PiBcJlBBU1ZfZnRwLAorICAgICAgICAgICAgJ0NXRCcgID0+IFwmQ1dEX2Z0cCwKKyAgICAgICAgICAgICdQV0QnICA9PiBcJlBXRF9mdHAsCisgICAgICAgICAgICAnRVBTVicgPT4gXCZQQVNWX2Z0cCwKKyAgICAgICAgICAgICdSRVRSJyA9PiBcJlJFVFJfZnRwLAorICAgICAgICAgICAgJ1NJWkUnID0+IFwmU0laRV9mdHAsCisgICAgICAgICAgICAnUkVTVCcgPT4gXCZSRVNUX2Z0cCwKKyAgICAgICAgICAgICdTVE9SJyA9PiBcJlNUT1JfZnRwLAorICAgICAgICAgICAgJ0FQUEUnID0+IFwmU1RPUl9mdHAsICMgYXBwZW5kIGxvb2tzIGxpa2UgdXBsb2FkCisgICAgICAgICAgICAnTURUTScgPT4gXCZNRFRNX2Z0cCwKKyAgICAgICAgKTsKKyAgICAgICAgJWRpc3BsYXl0ZXh0ID0gKAorICAgICAgICAgICAgJ1VTRVInID0+ICczMzEgV2UgYXJlIGhhcHB5IHlvdSBwb3BwZWQgaW4hJywKKyAgICAgICAgICAgICdQQVNTJyA9PiAnMjMwIFdlbGNvbWUgeW91IHNpbGx5IHBlcnNvbicsCisgICAgICAgICAgICAnUE9SVCcgPT4gJzIwMCBZb3Ugc2FpZCBQT1JUIC0gSSBzYXkgRklORScsCisgICAgICAgICAgICAnVFlQRScgPT4gJzIwMCBJIG1vZGlmeSBUWVBFIGFzIHlvdSB3YW50ZWQnLAorICAgICAgICAgICAgJ0xJU1QnID0+ICcxNTAgaGVyZSBjb21lcyBhIGRpcmVjdG9yeScsCisgICAgICAgICAgICAnTkxTVCcgPT4gJzE1MCBoZXJlIGNvbWVzIGEgZGlyZWN0b3J5JywKKyAgICAgICAgICAgICdDV0QnICA9PiAnMjUwIENXRCBjb21tYW5kIHN1Y2Nlc3NmdWwuJywKKyAgICAgICAgICAgICdTWVNUJyA9PiAnMjE1IFVOSVggVHlwZTogTDgnLCAjIGp1c3QgZmFrZSBzb21ldGhpbmcKKyAgICAgICAgICAgICdRVUlUJyA9PiAnMjIxIGJ5ZSBieWUgYmFieScsICMganVzdCByZXBseSBzb21ldGhpbmcKKyAgICAgICAgICAgICdNS0QnICA9PiAnMjU3IENyZWF0ZWQgeW91ciByZXF1ZXN0ZWQgZGlyZWN0b3J5JywKKyAgICAgICAgICAgICdSRVNUJyA9PiAnMzUwIFllYWggeWVhaCB3ZSBzZXQgaXQgdGhlcmUgZm9yIHlvdScsCisgICAgICAgICAgICAnREVMRScgPT4gJzIwMCBPSyBPSyBPSyB3aGF0ZXZlciB5b3Ugc2F5JywKKyAgICAgICAgICAgICdSTkZSJyA9PiAnMzUwIFJlY2VpdmVkIHlvdXIgb3JkZXIuIFBsZWFzZSBwcm92aWRlIG1vcmUnLAorICAgICAgICAgICAgJ1JOVE8nID0+ICcyNTAgT2ssIHRoYW5rcy4gRmlsZSByZW5hbWluZyBjb21wbGV0ZWQuJywKKyAgICAgICAgICAgICdOT09QJyA9PiAnMjAwIFllcywgSVwnbSB2ZXJ5IGdvb2QgYXQgZG9pbmcgbm90aGluZy4nLAorICAgICAgICAgICAgJ1BCU1onID0+ICc1MDAgUEJTWiBub3QgaW1wbGVtZW50ZWQnLAorICAgICAgICAgICAgJ1BST1QnID0+ICc1MDAgUFJPVCBub3QgaW1wbGVtZW50ZWQnLAorICAgICAgICApOworICAgICAgICBAd2VsY29tZSA9ICgKKyAgICAgICAgICAgICcyMjAtICAgICAgICBfICAgXyBfX19fICBfICAgICAnLiJcclxuIiwKKyAgICAgICAgICAgICcyMjAtICAgIF9fX3wgfCB8IHwgIF8gXHwgfCAgICAnLiJcclxuIiwKKyAgICAgICAgICAgICcyMjAtICAgLyBfX3wgfCB8IHwgfF8pIHwgfCAgICAnLiJcclxuIiwKKyAgICAgICAgICAgICcyMjAtICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXyAnLiJcclxuIiwKKyAgICAgICAgICAgICcyMjAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wnLiJcclxuIgorICAgICAgICApOworICAgIH0KKyAgICBlbHNpZigkcHJvdG8gZXEgJ3BvcDMnKSB7CisgICAgICAgICVjb21tYW5kZnVuYyA9ICgKKyAgICAgICAgICAgICdSRVRSJyA9PiBcJlJFVFJfcG9wMywKKyAgICAgICAgICAgICdMSVNUJyA9PiBcJkxJU1RfcG9wMywKKyAgICAgICAgKTsKKyAgICAgICAgJWRpc3BsYXl0ZXh0ID0gKAorICAgICAgICAgICAgJ1VTRVInID0+ICcrT0sgV2UgYXJlIGhhcHB5IHlvdSBwb3BwZWQgaW4hJywKKyAgICAgICAgICAgICdQQVNTJyA9PiAnK09LIEFjY2VzcyBncmFudGVkJywKKyAgICAgICAgICAgICdRVUlUJyA9PiAnK09LIGJ5ZWJ5ZScsCisgICAgICAgICk7CisgICAgICAgIEB3ZWxjb21lID0gKAorICAgICAgICAgICAgJyAgICAgICAgXyAgIF8gX19fXyAgXyAgICAgJy4iXHJcbiIsCisgICAgICAgICAgICAnICAgIF9fX3wgfCB8IHwgIF8gXHwgfCAgICAnLiJcclxuIiwKKyAgICAgICAgICAgICcgICAvIF9ffCB8IHwgfCB8XykgfCB8ICAgICcuIlxyXG4iLAorICAgICAgICAgICAgJyAgfCAoX198IHxffCB8ICBfIDx8IHxfX18gJy4iXHJcbiIsCisgICAgICAgICAgICAnICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wnLiJcclxuIiwKKyAgICAgICAgICAgICcrT0sgY1VSTCBQT1AzIHNlcnZlciByZWFkeSB0byBzZXJ2ZScuIlxyXG4iCisgICAgICAgICk7CisgICAgfQorICAgIGVsc2lmKCRwcm90byBlcSAnaW1hcCcpIHsKKyAgICAgICAgJWNvbW1hbmRmdW5jID0gKAorICAgICAgICAgICAgJ0ZFVENIJyAgPT4gXCZGRVRDSF9pbWFwLAorICAgICAgICAgICAgJ1NFTEVDVCcgPT4gXCZTRUxFQ1RfaW1hcCwKKyAgICAgICAgKTsKKyAgICAgICAgJWRpc3BsYXl0ZXh0ID0gKAorICAgICAgICAgICAgJ0xPR0lOJyAgPT4gJyBPSyBXZSBhcmUgaGFwcHkgeW91IHBvcHBlZCBpbiEnLAorICAgICAgICAgICAgJ1NFTEVDVCcgPT4gJyBPSyBzZWxlY3Rpb24gZG9uZScsCisgICAgICAgICAgICAnTE9HT1VUJyA9PiAnIE9LIHRoYW5rcyBmb3IgdGhlIGZpc2gnLAorICAgICAgICApOworICAgICAgICBAd2VsY29tZSA9ICgKKyAgICAgICAgICAgICcgICAgICAgIF8gICBfIF9fX18gIF8gICAgICcuIlxyXG4iLAorICAgICAgICAgICAgJyAgICBfX198IHwgfCB8ICBfIFx8IHwgICAgJy4iXHJcbiIsCisgICAgICAgICAgICAnICAgLyBfX3wgfCB8IHwgfF8pIHwgfCAgICAnLiJcclxuIiwKKyAgICAgICAgICAgICcgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fICcuIlxyXG4iLAorICAgICAgICAgICAgJyAgIFxfX198XF9fXy98X3wgXF9cX19fX198Jy4iXHJcbiIsCisgICAgICAgICAgICAnKiBPSyBjVVJMIElNQVAgc2VydmVyIHJlYWR5IHRvIHNlcnZlJy4iXHJcbiIKKyAgICAgICAgKTsKKyAgICB9CisgICAgZWxzaWYoJHByb3RvIGVxICdzbXRwJykgeworICAgICAgICAlY29tbWFuZGZ1bmMgPSAoCisgICAgICAgICAgICAnREFUQScgPT4gXCZEQVRBX3NtdHAsCisgICAgICAgICAgICAnUkNQVCcgPT4gXCZSQ1BUX3NtdHAsCisgICAgICAgICk7CisgICAgICAgICVkaXNwbGF5dGV4dCA9ICgKKyAgICAgICAgICAgICdFSExPJyA9PiAnMjMwIFdlIGFyZSBoYXBweSB5b3UgcG9wcGVkIGluIScsCisgICAgICAgICAgICAnTUFJTCcgPT4gJzIwMCBOb3RlIHRha2VuJywKKyAgICAgICAgICAgICdSQ1BUJyA9PiAnMjAwIFJlY2VpdmVycyBhY2NlcHRlZCcsCisgICAgICAgICAgICAnUVVJVCcgPT4gJzIwMCBieWVieWUnLAorICAgICAgICApOworICAgICAgICBAd2VsY29tZSA9ICgKKyAgICAgICAgICAgICcyMjAtICAgICAgICBfICAgXyBfX19fICBfICAgICAnLiJcclxuIiwKKyAgICAgICAgICAgICcyMjAtICAgIF9fX3wgfCB8IHwgIF8gXHwgfCAgICAnLiJcclxuIiwKKyAgICAgICAgICAgICcyMjAtICAgLyBfX3wgfCB8IHwgfF8pIHwgfCAgICAnLiJcclxuIiwKKyAgICAgICAgICAgICcyMjAtICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXyAnLiJcclxuIiwKKyAgICAgICAgICAgICcyMjAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wnLiJcclxuIgorICAgICAgICApOworICAgIH0KK30KKworc3ViIGNsb3NlX2RhdGFjb25uIHsKKyAgICBteSAoJGNsb3NlZCk9QF87ICMgbm9uLXplcm8gaWYgYWxyZWFkeSBkaXNjb25uZWN0ZWQKKworICAgIG15ICRkYXRhcGlkID0gcHJvY2Vzc2V4aXN0cygkZGF0YXNvY2tmX3BpZGZpbGUpOworCisgICAgbG9nbXNnICI9PT09PT4gQ2xvc2luZyAkZGF0YXNvY2tmX21vZGUgREFUQSBjb25uZWN0aW9uLi4uXG4iOworCisgICAgaWYoISRjbG9zZWQpIHsKKyAgICAgICAgaWYoJGRhdGFwaWQgPiAwKSB7CisgICAgICAgICAgICBsb2dtc2cgIlNlcnZlciBkaXNjb25uZWN0cyAkZGF0YXNvY2tmX21vZGUgREFUQSBjb25uZWN0aW9uXG4iOworICAgICAgICAgICAgcHJpbnQgRFdSSVRFICJESVNDXG4iOworICAgICAgICAgICAgbXkgJGk7CisgICAgICAgICAgICBzeXNyZWFkIERSRUFELCAkaSwgNTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxvZ21zZyAiU2VydmVyIGZpbmRzICRkYXRhc29ja2ZfbW9kZSBEQVRBIGNvbm5lY3Rpb24gYWxyZWFkeSAiLgorICAgICAgICAgICAgICAgICAgICJkaXNjb25uZWN0ZWRcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxvZ21zZyAiU2VydmVyIGtub3dzICRkYXRhc29ja2ZfbW9kZSBEQVRBIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSAiLgorICAgICAgICAgICAgICAgImRpc2Nvbm5lY3RlZFxuIjsKKyAgICB9CisKKyAgICBpZigkZGF0YXBpZCA+IDApIHsKKyAgICAgICAgcHJpbnQgRFdSSVRFICJRVUlUXG4iOworICAgICAgICB3YWl0cGlkKCRkYXRhcGlkLCAwKTsKKyAgICAgICAgdW5saW5rKCRkYXRhc29ja2ZfcGlkZmlsZSkgaWYoLWYgJGRhdGFzb2NrZl9waWRmaWxlKTsKKyAgICAgICAgbG9nbXNnICJEQVRBIHNvY2tmaWx0IGZvciAkZGF0YXNvY2tmX21vZGUgZGF0YSBjaGFubmVsIHF1aXRzICIuCisgICAgICAgICAgICAgICAiKHBpZCAkZGF0YXBpZClcbiI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgZm9yICRkYXRhc29ja2ZfbW9kZSBkYXRhIGNoYW5uZWwgYWxyZWFkeSAiLgorICAgICAgICAgICAgICAgImRlYWRcbiI7CisgICAgfQorCisgICAgbG9nbXNnICI9PT09PT4gQ2xvc2VkICRkYXRhc29ja2ZfbW9kZSBEQVRBIGNvbm5lY3Rpb25cbiI7CisKKyAgICBkYXRhc29ja2Zfc3RhdGUoJ1NUT1BQRUQnKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyBTTVRQIGNvbW1hbmRzCisjIyMjIyMjIyMjIyMjIyMjCisKKyMgd2hhdCBzZXQgYnkgIlJDUFQiCitteSAkc210cF9yY3B0OworCitzdWIgREFUQV9zbXRwIHsKKyAgICBteSAkdGVzdG5vOworCisgICAgaWYoJHNtdHBfcmNwdCA9fiAvXlRPOiguKikvKSB7CisgICAgICAgICR0ZXN0bm8gPSAkMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybjsgIyBmYWlsdXJlCisgICAgfQorCisgICAgaWYoJHRlc3RubyBlcSAiPHZlcmlmaWVkc2VydmVyPiIpIHsKKyAgICAgICAgc2VuZGNvbnRyb2wgIjU1NCBXRSBST09MWjogJCRcclxuIjsKKyAgICAgICAgcmV0dXJuIDA7ICMgZG9uJ3Qgd2FpdCBmb3IgZGF0YSBub3cKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgICR0ZXN0bm8gPX4gcy9eKFteMC05XSopKFswLTldKykuKi8kMi87CisgICAgICAgIHNlbmRjb250cm9sICIzNTQgU2hvdyBtZSB0aGUgbWFpbFxyXG4iOworICAgIH0KKworICAgIGxvZ21zZyAiPT09PiByY3B0ICR0ZXN0bm8gd2FzICRzbXRwX3JjcHRcbiI7CisKKyAgICBteSAkZmlsZW5hbWUgPSAibG9nL3VwbG9hZC4kdGVzdG5vIjsKKworICAgIGxvZ21zZyAiU3RvcmUgdGVzdCBudW1iZXIgJHRlc3RubyBpbiAkZmlsZW5hbWVcbiI7CisKKyAgICBvcGVuKEZJTEUsICI+JGZpbGVuYW1lIikgfHwKKyAgICAgICAgcmV0dXJuIDA7ICMgZmFpbGVkIHRvIG9wZW4gb3V0cHV0CisKKyAgICBteSAkbGluZTsKKyAgICBteSAkdWxzaXplPTA7CisgICAgbXkgJGRpc2M9MDsKKyAgICBteSAkcmF3OworICAgIHdoaWxlICg1ID09IChzeXNyZWFkIFwqU0ZSRUFELCAkbGluZSwgNSkpIHsKKyAgICAgICAgaWYoJGxpbmUgZXEgIkRBVEFcbiIpIHsKKyAgICAgICAgICAgIG15ICRpOworICAgICAgICAgICAgbXkgJGVvYjsKKyAgICAgICAgICAgIHN5c3JlYWQgXCpTRlJFQUQsICRpLCA1OworCisgICAgICAgICAgICBteSAkc2l6ZSA9IDA7CisgICAgICAgICAgICBpZigkaSA9fiAvXihbMC05YS1mQS1GXXs0fSlcbi8pIHsKKyAgICAgICAgICAgICAgICAkc2l6ZSA9IGhleCgkMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlYWRfbWFpbnNvY2tmKFwkbGluZSwgJHNpemUpOworCisgICAgICAgICAgICAkdWxzaXplICs9ICRzaXplOworICAgICAgICAgICAgcHJpbnQgRklMRSAkbGluZSBpZighJG5vc2F2ZSk7CisKKyAgICAgICAgICAgICRyYXcgLj0gJGxpbmU7CisgICAgICAgICAgICBpZigkcmF3ID1+IC9ceDBkXHgwYVx4MmVceDBkXHgwYS8pIHsKKyAgICAgICAgICAgICAgICAjIGVuZCBvZiBkYXRhIG1hcmtlciEKKyAgICAgICAgICAgICAgICAkZW9iID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvZ21zZyAiPiBBcHBlbmRpbmcgJHNpemUgYnl0ZXMgdG8gZmlsZVxuIjsKKyAgICAgICAgICAgIGlmKCRlb2IpIHsKKyAgICAgICAgICAgICAgICBsb2dtc2cgIkZvdW5kIFNNVFAgRU9CIG1hcmtlclxuIjsKKyAgICAgICAgICAgICAgICBsYXN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCRsaW5lIGVxICJESVNDXG4iKSB7CisgICAgICAgICAgICAjIGRpc2Nvbm5lY3QhCisgICAgICAgICAgICAkZGlzYz0xOworICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxvZ21zZyAiTm8gc3VwcG9ydCBmb3I6ICRsaW5lIjsKKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoJG5vc2F2ZSkgeworICAgICAgICBwcmludCBGSUxFICIkdWxzaXplIGJ5dGVzIHdvdWxkJ3ZlIGJlZW4gc3RvcmVkIGhlcmVcbiI7CisgICAgfQorICAgIGNsb3NlKEZJTEUpOworICAgIHNlbmRjb250cm9sICIyNTAgT0ssIGRhdGEgcmVjZWl2ZWQhXHJcbiI7CisgICAgbG9nbXNnICJyZWNlaXZlZCAkdWxzaXplIGJ5dGVzIHVwbG9hZFxuIjsKKworfQorCitzdWIgUkNQVF9zbXRwIHsKKyAgICBteSAoJGFyZ3MpID0gQF87CisKKyAgICAkc210cF9yY3B0ID0gJGFyZ3M7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMgSU1BUCBjb21tYW5kcworIyMjIyMjIyMjIyMjIyMjIworCisjIGdsb2JhbCB0byBhbGxvdyB0aGUgY29tbWFuZCBmdW5jdGlvbnMgdG8gcmVhZCBpdAorbXkgJGNtZGlkOworCisjIHdoYXQgd2FzIHBpY2tlZCBieSBTRUxFQ1QKK215ICRzZWxlY3RlZDsKKworc3ViIFNFTEVDVF9pbWFwIHsKKyAgICBteSAoJHRlc3RubykgPSBAXzsKKyAgICBteSBAZGF0YTsKKyAgICBteSAkc2l6ZTsKKworICAgIGxvZ21zZyAiU0VMRUNUX2ltYXAgZ290IHRlc3QgJHRlc3Rub1xuIjsKKworICAgICRzZWxlY3RlZCA9ICR0ZXN0bm87CisKKyAgICByZXR1cm4gMDsKK30KKworCitzdWIgRkVUQ0hfaW1hcCB7CisgICAgIG15ICgkdGVzdG5vKSA9IEBfOworICAgICBteSBAZGF0YTsKKyAgICAgbXkgJHNpemU7CisKKyAgICAgbG9nbXNnICJGRVRDSF9pbWFwIGdvdCB0ZXN0ICR0ZXN0bm9cbiI7CisKKyAgICAgJHRlc3RubyA9ICRzZWxlY3RlZDsKKworICAgICBpZigkdGVzdG5vID1+IC9edmVyaWZpZWRzZXJ2ZXIkLykgeworICAgICAgICAgIyB0aGlzIGlzIHRoZSBzZWNyZXQgY29tbWFuZCB0aGF0IHZlcmlmaWVzIHRoYXQgdGhpcyBhY3R1YWxseSBpcworICAgICAgICAgIyB0aGUgY3VybCB0ZXN0IHNlcnZlcgorICAgICAgICAgbXkgJHJlc3BvbnNlID0gIldFIFJPT0xaOiAkJFxyXG4iOworICAgICAgICAgaWYoJHZlcmJvc2UpIHsKKyAgICAgICAgICAgICBwcmludCBTVERFUlIgIkZUUEQ6IFdlIHJldHVybmVkIHByb29mIHdlIGFyZSB0aGUgdGVzdCBzZXJ2ZXJcbiI7CisgICAgICAgICB9CisgICAgICAgICAkZGF0YVswXSA9ICRyZXNwb25zZTsKKyAgICAgICAgIGxvZ21zZyAicmV0dXJuIHByb29mIHdlIGFyZSB3ZVxuIjsKKyAgICAgfQorICAgICBlbHNlIHsKKyAgICAgICAgIGxvZ21zZyAicmV0cmlldmUgYSBtYWlsXG4iOworCisgICAgICAgICAkdGVzdG5vID1+IHMvXihbXjAtOV0qKS8vOworICAgICAgICAgbXkgJHRlc3RwYXJ0ID0gIiI7CisgICAgICAgICBpZiAoJHRlc3RubyA+IDEwMDAwKSB7CisgICAgICAgICAgICAgJHRlc3RwYXJ0ID0gJHRlc3RubyAlIDEwMDAwOworICAgICAgICAgICAgICR0ZXN0bm8gPSBpbnQoJHRlc3RubyAvIDEwMDAwKTsKKyAgICAgICAgIH0KKworICAgICAgICAgIyBzZW5kIG1haWwgY29udGVudAorICAgICAgICAgbG9hZHRlc3QoIiRzcmNkaXIvZGF0YS90ZXN0JHRlc3RubyIpOworCisgICAgICAgICBAZGF0YSA9IGdldHBhcnQoInJlcGx5IiwgImRhdGEkdGVzdHBhcnQiKTsKKyAgICAgfQorCisgICAgIGZvciAoQGRhdGEpIHsKKyAgICAgICAgICRzaXplICs9IGxlbmd0aCgkXyk7CisgICAgIH0KKworICAgICBzZW5kY29udHJvbCAiKiBGRVRDSCBzdGFydHMgeyRzaXplfVxyXG4iOworCisgICAgIGZvciBteSAkZCAoQGRhdGEpIHsKKyAgICAgICAgIHNlbmRjb250cm9sICRkOworICAgICB9CisKKyAgICAgc2VuZGNvbnRyb2wgIiRjbWRpZCBPSyBGRVRDSCBjb21wbGV0ZWRcclxuIjsKKworICAgICByZXR1cm4gMDsKK30KKworIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyBQT1AzIGNvbW1hbmRzCisjIyMjIyMjIyMjIyMjIyMjCisKK3N1YiBSRVRSX3BvcDMgeworICAgICBteSAoJHRlc3RubykgPSBAXzsKKyAgICAgbXkgQGRhdGE7CisKKyAgICAgaWYoJHRlc3RubyA9fiAvXnZlcmlmaWVkc2VydmVyJC8pIHsKKyAgICAgICAgICMgdGhpcyBpcyB0aGUgc2VjcmV0IGNvbW1hbmQgdGhhdCB2ZXJpZmllcyB0aGF0IHRoaXMgYWN0dWFsbHkgaXMKKyAgICAgICAgICMgdGhlIGN1cmwgdGVzdCBzZXJ2ZXIKKyAgICAgICAgIG15ICRyZXNwb25zZSA9ICJXRSBST09MWjogJCRcclxuIjsKKyAgICAgICAgIGlmKCR2ZXJib3NlKSB7CisgICAgICAgICAgICAgcHJpbnQgU1RERVJSICJGVFBEOiBXZSByZXR1cm5lZCBwcm9vZiB3ZSBhcmUgdGhlIHRlc3Qgc2VydmVyXG4iOworICAgICAgICAgfQorICAgICAgICAgJGRhdGFbMF0gPSAkcmVzcG9uc2U7CisgICAgICAgICBsb2dtc2cgInJldHVybiBwcm9vZiB3ZSBhcmUgd2VcbiI7CisgICAgIH0KKyAgICAgZWxzZSB7CisgICAgICAgICBsb2dtc2cgInJldHJpZXZlIGEgbWFpbFxuIjsKKworICAgICAgICAgJHRlc3RubyA9fiBzL14oW14wLTldKikvLzsKKyAgICAgICAgIG15ICR0ZXN0cGFydCA9ICIiOworICAgICAgICAgaWYgKCR0ZXN0bm8gPiAxMDAwMCkgeworICAgICAgICAgICAgICR0ZXN0cGFydCA9ICR0ZXN0bm8gJSAxMDAwMDsKKyAgICAgICAgICAgICAkdGVzdG5vID0gaW50KCR0ZXN0bm8gLyAxMDAwMCk7CisgICAgICAgICB9CisKKyAgICAgICAgICMgc2VuZCBtYWlsIGNvbnRlbnQKKyAgICAgICAgIGxvYWR0ZXN0KCIkc3JjZGlyL2RhdGEvdGVzdCR0ZXN0bm8iKTsKKworICAgICAgICAgQGRhdGEgPSBnZXRwYXJ0KCJyZXBseSIsICJkYXRhJHRlc3RwYXJ0Iik7CisgICAgIH0KKworICAgICBzZW5kY29udHJvbCAiK09LIE1haWwgdHJhbnNmZXIgc3RhcnRzXHJcbiI7CisKKyAgICAgZm9yIG15ICRkIChAZGF0YSkgeworICAgICAgICAgc2VuZGNvbnRyb2wgJGQ7CisgICAgIH0KKworICAgICAjIGVuZCB3aXRoIHRoZSBtYWdpYyAzLWJ5dGUgZW5kIG9mIG1haWwgbWFya2VyLCBhc3N1bWVzIHRoYXQgdGhlCisgICAgICMgbWFpbCBib2R5IGVuZHMgd2l0aCBhIENSTEYhCisgICAgIHNlbmRjb250cm9sICIuXHJcbiI7CisKKyAgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBMSVNUX3BvcDMgeworCisjIHRoaXMgaXMgYSBidWlsdC1pbiBmYWtlLW1lc3NhZ2UgbGlzdAorbXkgQHBvcDNsaXN0PSgKKyIxIDEwMFxyXG4iLAorIjIgNDI5NDk2NzQwMFxyXG4iLAkjID4gNCBHQgorIjQgMjAwXHJcbiIsICMgTm90ZSB0aGF0IG1lc3NhZ2UgMyBpcyBhIHNpbXVsYXRlZCAiZGVsZXRlZCIgbWVzc2FnZQorKTsKKworICAgICBsb2dtc2cgInJldHJpZXZlIGEgbWVzc2FnZSBsaXN0XG4iOworCisgICAgIHNlbmRjb250cm9sICIrT0sgTGlzdGluZyBzdGFydHNcclxuIjsKKworICAgICBmb3IgbXkgJGQgKEBwb3AzbGlzdCkgeworICAgICAgICAgc2VuZGNvbnRyb2wgJGQ7CisgICAgIH0KKworICAgICAjIGVuZCB3aXRoIHRoZSBtYWdpYyAzLWJ5dGUgZW5kIG9mIGxpc3RpbmcgbWFya2VyCisgICAgIHNlbmRjb250cm9sICIuXHJcbiI7CisKKyAgICAgcmV0dXJuIDA7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMgRlRQIGNvbW1hbmRzCisjIyMjIyMjIyMjIyMjIyMjCitteSAkcmVzdD0wOworc3ViIFJFU1RfZnRwIHsKKyAgICAkcmVzdCA9ICRfWzBdOworICAgIGxvZ21zZyAiU2V0IFJFU1QgcG9zaXRpb24gdG8gJHJlc3RcbiIKK30KKworc3ViIHN3aXRjaF9kaXJlY3RvcnlfZ290byB7CisgIG15ICR0YXJnZXRfZGlyID0gJF87CisKKyAgaWYoISRmdHB0YXJnZXRkaXIpIHsKKyAgICAkZnRwdGFyZ2V0ZGlyID0gIi8iOworICB9CisKKyAgaWYoJHRhcmdldF9kaXIgZXEgIiIpIHsKKyAgICAkZnRwdGFyZ2V0ZGlyID0gIi8iOworICB9CisgIGVsc2lmKCR0YXJnZXRfZGlyIGVxICIuLiIpIHsKKyAgICBpZigkZnRwdGFyZ2V0ZGlyIGVxICIvIikgeworICAgICAgJGZ0cHRhcmdldGRpciA9ICIvIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAkZnRwdGFyZ2V0ZGlyID1+IHMvW1s6YWxudW06XV0rXC8kLy87CisgICAgfQorICB9CisgIGVsc2UgeworICAgICRmdHB0YXJnZXRkaXIgLj0gJHRhcmdldF9kaXIgLiAiLyI7CisgIH0KK30KKworc3ViIHN3aXRjaF9kaXJlY3RvcnkgeworICAgIG15ICR0YXJnZXRfZGlyID0gJF9bMF07CisKKyAgICBpZigkdGFyZ2V0X2RpciBlcSAiLyIpIHsKKyAgICAgICAgJGZ0cHRhcmdldGRpciA9ICIvIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG15IEBkaXJzID0gc3BsaXQoIi8iLCAkdGFyZ2V0X2Rpcik7CisgICAgICAgIGZvcihAZGlycykgeworICAgICAgICAgIHN3aXRjaF9kaXJlY3RvcnlfZ290bygkXyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N1YiBDV0RfZnRwIHsKKyAgbXkgKCRmb2xkZXIsICRmdWxsY29tbWFuZCkgPSAkX1swXTsKKyAgc3dpdGNoX2RpcmVjdG9yeSgkZm9sZGVyKTsKKyAgaWYoJGZ0cHRhcmdldGRpciA9fiAvXlwvZnVsbHlfc2ltdWxhdGVkLykgeworICAgICRmdHBsaXN0cGFyc2Vyc3RhdGUgPSAiZW5hYmxlZCI7CisgIH0KKyAgZWxzZSB7CisgICAgdW5kZWYgJGZ0cGxpc3RwYXJzZXJzdGF0ZTsKKyAgfQorfQorCitzdWIgUFdEX2Z0cCB7CisgICAgbXkgJG15ZGlyOworICAgICRteWRpciA9ICRmdHB0YXJnZXRkaXIgPyAkZnRwdGFyZ2V0ZGlyIDogIi8iOworCisgICAgaWYoJG15ZGlyIG5lICIvIikgeworICAgICAgICAkbXlkaXIgPX4gcy9cLyQvLzsKKyAgICB9CisgICAgc2VuZGNvbnRyb2wgIjI1NyBcIiRteWRpclwiIGlzIGN1cnJlbnQgZGlyZWN0b3J5XHJcbiI7Cit9CisKK3N1YiBMSVNUX2Z0cCB7CisgICMgIHByaW50ICIxNTAgQVNDSUkgZGF0YSBjb25uZWN0aW9uIGZvciAvYmluL2xzICgxOTMuMTUuMjMuMSw1OTE5NikgKDAgYnl0ZXMpXHJcbiI7CisKKyMgdGhpcyBpcyBhIGJ1aWx0LWluIGZha2UtZGlyIDstKQorbXkgQGZ0cGRpcj0oInRvdGFsIDIwXHJcbiIsCisiZHJ3eHIteHIteCAgIDggOTggICAgICAgOTggICAgICAgICAgIDUxMiBPY3QgMjIgMTM6MDYgLlxyXG4iLAorImRyd3hyLXhyLXggICA4IDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgT2N0IDIyIDEzOjA2IC4uXHJcbiIsCisiZHJ3eHIteHIteCAgIDIgOTggICAgICAgOTggICAgICAgICAgIDUxMiBNYXkgIDIgIDE5OTYgLk5lWFRcclxuIiwKKyItci0tci0tci0tICAgMSAwICAgICAgICAxICAgICAgICAgICAgIDM1IEp1bCAxNiAgMTk5NiBSRUFETUVcclxuIiwKKyJscnd4cnd4cnd4ICAgMSAwICAgICAgICAxICAgICAgICAgICAgICA3IERlYyAgOSAgMTk5OSBiaW4gLT4gdXNyL2JpblxyXG4iLAorImRyLXhyLXhyLXggICAyIDAgICAgICAgIDEgICAgICAgICAgICA1MTIgT2N0ICAxICAxOTk3IGRldlxyXG4iLAorImRyd3hyd3hyd3ggICAyIDk4ICAgICAgIDk4ICAgICAgICAgICA1MTIgTWF5IDI5IDE2OjA0IGRvd25sb2FkLmh0bWxcclxuIiwKKyJkci14ci14ci14ICAgMiAwICAgICAgICAxICAgICAgICAgICAgNTEyIE5vdiAzMCAgMTk5NSBldGNcclxuIiwKKyJkcnd4cnd4cnd4ICAgMiA5OCAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAzMCAxNDozMyBwdWJcclxuIiwKKyJkci14ci14ci14ICAgNSAwICAgICAgICAxICAgICAgICAgICAgNTEyIE9jdCAgMSAgMTk5NyB1c3JcclxuIik7CisKKyAgICBpZigkZGF0YXNvY2tmX2Nvbm4gZXEgJ25vJykgeworICAgICAgICBpZigkbm9kYXRhY29ubjQyNSkgeworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjE1MCBPcGVuaW5nIGRhdGEgY29ubmVjdGlvblxyXG4iOworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjQyNSBDYW4ndCBvcGVuIGRhdGEgY29ubmVjdGlvblxyXG4iOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRub2RhdGFjb25uNDIxKSB7CisgICAgICAgICAgICBzZW5kY29udHJvbCAiMTUwIE9wZW5pbmcgZGF0YSBjb25uZWN0aW9uXHJcbiI7CisgICAgICAgICAgICBzZW5kY29udHJvbCAiNDIxIENvbm5lY3Rpb24gdGltZWQgb3V0XHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJG5vZGF0YWNvbm4xNTApIHsKKyAgICAgICAgICAgIHNlbmRjb250cm9sICIxNTAgT3BlbmluZyBkYXRhIGNvbm5lY3Rpb25cclxuIjsKKyAgICAgICAgICAgICMgY2xpZW50IHNoYWxsIHRpbWVvdXQKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICMgY2xpZW50IHNoYWxsIHRpbWVvdXQKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZigkZnRwbGlzdHBhcnNlcnN0YXRlKSB7CisgICAgICBAZnRwZGlyID0gZnRwX2NvbnRlbnRsaXN0KCRmdHB0YXJnZXRkaXIpOworICAgIH0KKworICAgIGxvZ21zZyAicGFzcyBMSVNUIGRhdGEgb24gZGF0YSBjb25uZWN0aW9uXG4iOworICAgIGZvcihAZnRwZGlyKSB7CisgICAgICAgIHNlbmRkYXRhICRfOworICAgIH0KKyAgICBjbG9zZV9kYXRhY29ubigwKTsKKyAgICBzZW5kY29udHJvbCAiMjI2IEFTQ0lJIHRyYW5zZmVyIGNvbXBsZXRlXHJcbiI7CisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBOTFNUX2Z0cCB7CisgICAgbXkgQGZ0cGRpcj0oImZpbGUiLCAid2l0aCBzcGFjZSIsICJmYWtlIiwgIi4uIiwgIiAuLiIsICJmdW5ueSIsICJSRUFETUUiKTsKKworICAgIGlmKCRkYXRhc29ja2ZfY29ubiBlcSAnbm8nKSB7CisgICAgICAgIGlmKCRub2RhdGFjb25uNDI1KSB7CisgICAgICAgICAgICBzZW5kY29udHJvbCAiMTUwIE9wZW5pbmcgZGF0YSBjb25uZWN0aW9uXHJcbiI7CisgICAgICAgICAgICBzZW5kY29udHJvbCAiNDI1IENhbid0IG9wZW4gZGF0YSBjb25uZWN0aW9uXHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJG5vZGF0YWNvbm40MjEpIHsKKyAgICAgICAgICAgIHNlbmRjb250cm9sICIxNTAgT3BlbmluZyBkYXRhIGNvbm5lY3Rpb25cclxuIjsKKyAgICAgICAgICAgIHNlbmRjb250cm9sICI0MjEgQ29ubmVjdGlvbiB0aW1lZCBvdXRcclxuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkbm9kYXRhY29ubjE1MCkgeworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjE1MCBPcGVuaW5nIGRhdGEgY29ubmVjdGlvblxyXG4iOworICAgICAgICAgICAgIyBjbGllbnQgc2hhbGwgdGltZW91dAorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIyBjbGllbnQgc2hhbGwgdGltZW91dAorICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGxvZ21zZyAicGFzcyBOTFNUIGRhdGEgb24gZGF0YSBjb25uZWN0aW9uXG4iOworICAgIGZvcihAZnRwZGlyKSB7CisgICAgICAgIHNlbmRkYXRhICIkX1xyXG4iOworICAgIH0KKyAgICBjbG9zZV9kYXRhY29ubigwKTsKKyAgICBzZW5kY29udHJvbCAiMjI2IEFTQ0lJIHRyYW5zZmVyIGNvbXBsZXRlXHJcbiI7CisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBNRFRNX2Z0cCB7CisgICAgbXkgJHRlc3RubyA9ICRfWzBdOworICAgIG15ICR0ZXN0cGFydCA9ICIiOworICAgIGlmICgkdGVzdG5vID4gMTAwMDApIHsKKyAgICAgICAgJHRlc3RwYXJ0ID0gJHRlc3RubyAlIDEwMDAwOworICAgICAgICAkdGVzdG5vID0gaW50KCR0ZXN0bm8gLyAxMDAwMCk7CisgICAgfQorCisgICAgbG9hZHRlc3QoIiRzcmNkaXIvZGF0YS90ZXN0JHRlc3RubyIpOworCisgICAgbXkgQGRhdGEgPSBnZXRwYXJ0KCJyZXBseSIsICJtZHRtIik7CisKKyAgICBteSAkcmVwbHkgPSAkZGF0YVswXTsKKyAgICBjaG9tcCAkcmVwbHkgaWYoJHJlcGx5KTsKKworICAgIGlmKCRyZXBseSAmJiAoJHJlcGx5ID1+IC9eWystXT9cZCskLykgJiYgKCRyZXBseSA8IDApKSB7CisgICAgICAgIHNlbmRjb250cm9sICI1NTAgJHRlc3Rubzogbm8gc3VjaCBmaWxlLlxyXG4iOworICAgIH0KKyAgICBlbHNpZigkcmVwbHkpIHsKKyAgICAgICAgc2VuZGNvbnRyb2wgIiRyZXBseVxyXG4iOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc2VuZGNvbnRyb2wgIjUwMCBNRFRNOiBubyBzdWNoIGNvbW1hbmQuXHJcbiI7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdWIgU0laRV9mdHAgeworICAgIG15ICR0ZXN0bm8gPSAkX1swXTsKKyAgICBpZigkZnRwbGlzdHBhcnNlcnN0YXRlKSB7CisgICAgICAgIG15ICRzaXplID0gd2lsZGNhcmRfZmlsZXNpemUoJGZ0cHRhcmdldGRpciwgJHRlc3Rubyk7CisgICAgICAgIGlmKCRzaXplID09IC0xKSB7CisgICAgICAgICAgICBzZW5kY29udHJvbCAiNTUwICR0ZXN0bm86IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkuXHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZW5kY29udHJvbCAiMjEzICRzaXplXHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYoJHRlc3RubyA9fiAvXnZlcmlmaWVkc2VydmVyJC8pIHsKKyAgICAgICAgbXkgJHJlc3BvbnNlID0gIldFIFJPT0xaOiAkJFxyXG4iOworICAgICAgICBteSAkc2l6ZSA9IGxlbmd0aCgkcmVzcG9uc2UpOworICAgICAgICBzZW5kY29udHJvbCAiMjEzICRzaXplXHJcbiI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmKCR0ZXN0bm8gPX4gLyhcZCspXC8/JC8pIHsKKyAgICAgICAgJHRlc3RubyA9ICQxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgU1RERVJSICJTSVpFX2Z0cDogaW52YWxpZCB0ZXN0IG51bWJlcjogJHRlc3Rub1xuIjsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgbXkgJHRlc3RwYXJ0ID0gIiI7CisgICAgaWYoJHRlc3RubyA+IDEwMDAwKSB7CisgICAgICAgICR0ZXN0cGFydCA9ICR0ZXN0bm8gJSAxMDAwMDsKKyAgICAgICAgJHRlc3RubyA9IGludCgkdGVzdG5vIC8gMTAwMDApOworICAgIH0KKworICAgIGxvYWR0ZXN0KCIkc3JjZGlyL2RhdGEvdGVzdCR0ZXN0bm8iKTsKKworICAgIG15IEBkYXRhID0gZ2V0cGFydCgicmVwbHkiLCAic2l6ZSIpOworCisgICAgbXkgJHNpemUgPSAkZGF0YVswXTsKKworICAgIGlmKCRzaXplKSB7CisgICAgICAgIGlmKCRzaXplID4gLTEpIHsKKyAgICAgICAgICAgIHNlbmRjb250cm9sICIyMTMgJHNpemVcclxuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNlbmRjb250cm9sICI1NTAgJHRlc3RubzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeS5cclxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgJHNpemU9MDsKKyAgICAgICAgQGRhdGEgPSBnZXRwYXJ0KCJyZXBseSIsICJkYXRhJHRlc3RwYXJ0Iik7CisgICAgICAgIGZvcihAZGF0YSkgeworICAgICAgICAgICAgJHNpemUgKz0gbGVuZ3RoKCRfKTsKKyAgICAgICAgfQorICAgICAgICBpZigkc2l6ZSkgeworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjIxMyAkc2l6ZVxyXG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjU1MCAkdGVzdG5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LlxyXG4iOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdWIgUkVUUl9mdHAgeworICAgIG15ICgkdGVzdG5vKSA9IEBfOworCisgICAgaWYoJGRhdGFzb2NrZl9jb25uIGVxICdubycpIHsKKyAgICAgICAgaWYoJG5vZGF0YWNvbm40MjUpIHsKKyAgICAgICAgICAgIHNlbmRjb250cm9sICIxNTAgT3BlbmluZyBkYXRhIGNvbm5lY3Rpb25cclxuIjsKKyAgICAgICAgICAgIHNlbmRjb250cm9sICI0MjUgQ2FuJ3Qgb3BlbiBkYXRhIGNvbm5lY3Rpb25cclxuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkbm9kYXRhY29ubjQyMSkgeworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjE1MCBPcGVuaW5nIGRhdGEgY29ubmVjdGlvblxyXG4iOworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjQyMSBDb25uZWN0aW9uIHRpbWVkIG91dFxyXG4iOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRub2RhdGFjb25uMTUwKSB7CisgICAgICAgICAgICBzZW5kY29udHJvbCAiMTUwIE9wZW5pbmcgZGF0YSBjb25uZWN0aW9uXHJcbiI7CisgICAgICAgICAgICAjIGNsaWVudCBzaGFsbCB0aW1lb3V0CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAjIGNsaWVudCBzaGFsbCB0aW1lb3V0CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYoJGZ0cGxpc3RwYXJzZXJzdGF0ZSkgeworICAgICAgICBteSBAY29udGVudCA9IHdpbGRjYXJkX2dldGZpbGUoJGZ0cHRhcmdldGRpciwgJHRlc3Rubyk7CisgICAgICAgIGlmKCRjb250ZW50WzBdID09IC0xKSB7CisgICAgICAgICAgICAjZmlsZSBub3QgZm91bmQKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG15ICRzaXplID0gbGVuZ3RoICRjb250ZW50WzFdOworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjE1MCBCaW5hcnkgZGF0YSBjb25uZWN0aW9uIGZvciAkdGVzdG5vICgkc2l6ZSBieXRlcykuXHJcbiIsCisgICAgICAgICAgICBzZW5kZGF0YSAkY29udGVudFsxXTsKKyAgICAgICAgICAgIGNsb3NlX2RhdGFjb25uKDApOworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjIyNiBGaWxlIHRyYW5zZmVyIGNvbXBsZXRlXHJcbiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYoJHRlc3RubyA9fiAvXnZlcmlmaWVkc2VydmVyJC8pIHsKKyAgICAgICAgIyB0aGlzIGlzIHRoZSBzZWNyZXQgY29tbWFuZCB0aGF0IHZlcmlmaWVzIHRoYXQgdGhpcyBhY3R1YWxseSBpcworICAgICAgICAjIHRoZSBjdXJsIHRlc3Qgc2VydmVyCisgICAgICAgIG15ICRyZXNwb25zZSA9ICJXRSBST09MWjogJCRcclxuIjsKKyAgICAgICAgbXkgJGxlbiA9IGxlbmd0aCgkcmVzcG9uc2UpOworICAgICAgICBzZW5kY29udHJvbCAiMTUwIEJpbmFyeSBqdW5rICgkbGVuIGJ5dGVzKS5cclxuIjsKKyAgICAgICAgc2VuZGRhdGEgIldFIFJPT0xaOiAkJFxyXG4iOworICAgICAgICBjbG9zZV9kYXRhY29ubigwKTsKKyAgICAgICAgc2VuZGNvbnRyb2wgIjIyNiBGaWxlIHRyYW5zZmVyIGNvbXBsZXRlXHJcbiI7CisgICAgICAgIGlmKCR2ZXJib3NlKSB7CisgICAgICAgICAgICBwcmludCBTVERFUlIgIkZUUEQ6IFdlIHJldHVybmVkIHByb29mIHdlIGFyZSB0aGUgdGVzdCBzZXJ2ZXJcbiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgJHRlc3RubyA9fiBzL14oW14wLTldKikvLzsKKyAgICBteSAkdGVzdHBhcnQgPSAiIjsKKyAgICBpZiAoJHRlc3RubyA+IDEwMDAwKSB7CisgICAgICAgICR0ZXN0cGFydCA9ICR0ZXN0bm8gJSAxMDAwMDsKKyAgICAgICAgJHRlc3RubyA9IGludCgkdGVzdG5vIC8gMTAwMDApOworICAgIH0KKworICAgIGxvYWR0ZXN0KCIkc3JjZGlyL2RhdGEvdGVzdCR0ZXN0bm8iKTsKKworICAgIG15IEBkYXRhID0gZ2V0cGFydCgicmVwbHkiLCAiZGF0YSR0ZXN0cGFydCIpOworCisgICAgbXkgJHNpemU9MDsKKyAgICBmb3IoQGRhdGEpIHsKKyAgICAgICAgJHNpemUgKz0gbGVuZ3RoKCRfKTsKKyAgICB9CisKKyAgICBteSAlaGFzaCA9IGdldHBhcnRhdHRyKCJyZXBseSIsICJkYXRhJHRlc3RwYXJ0Iik7CisKKyAgICBpZigkc2l6ZSB8fCAkaGFzaHsnc2VuZHplcm8nfSkgeworCisgICAgICAgIGlmKCRyZXN0KSB7CisgICAgICAgICAgICAjIG1vdmUgcmVhZCBwb2ludGVyIGZvcndhcmQKKyAgICAgICAgICAgICRzaXplIC09ICRyZXN0OworICAgICAgICAgICAgbG9nbXNnICJSRVNUICRyZXN0IHdhcyByZW1vdmVkIGZyb20gc2l6ZSwgbWFrZXMgJHNpemUgbGVmdFxuIjsKKyAgICAgICAgICAgICRyZXN0ID0gMDsgIyByZXNldCBSRVNUIG9mZnNldCBhZ2FpbgorICAgICAgICB9CisgICAgICAgIGlmKCRyZXRyd2VpcmRvKSB7CisgICAgICAgICAgICBzZW5kY29udHJvbCAiMTUwIEJpbmFyeSBkYXRhIGNvbm5lY3Rpb24gZm9yICR0ZXN0bm8gKCkgKCRzaXplIGJ5dGVzKS5cclxuIiwKKyAgICAgICAgICAgICIyMjYgRmlsZSB0cmFuc2ZlciBjb21wbGV0ZVxyXG4iOworCisgICAgICAgICAgICBmb3IoQGRhdGEpIHsKKyAgICAgICAgICAgICAgICBteSAkc2VuZCA9ICRfOworICAgICAgICAgICAgICAgIHNlbmRkYXRhICRzZW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2xvc2VfZGF0YWNvbm4oMCk7CisgICAgICAgICAgICAkcmV0cndlaXJkbz0wOyAjIHN3aXRjaCBvZmYgdGhlIHdlaXJkbyBhZ2FpbiEKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG15ICRzeiA9ICIoJHNpemUgYnl0ZXMpIjsKKyAgICAgICAgICAgIGlmKCRyZXRybm9zaXplKSB7CisgICAgICAgICAgICAgICAgJHN6ID0gInNpemU/IjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjE1MCBCaW5hcnkgZGF0YSBjb25uZWN0aW9uIGZvciAkdGVzdG5vICgpICRzei5cclxuIjsKKworICAgICAgICAgICAgZm9yKEBkYXRhKSB7CisgICAgICAgICAgICAgICAgbXkgJHNlbmQgPSAkXzsKKyAgICAgICAgICAgICAgICBzZW5kZGF0YSAkc2VuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsb3NlX2RhdGFjb25uKDApOworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjIyNiBGaWxlIHRyYW5zZmVyIGNvbXBsZXRlXHJcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNlbmRjb250cm9sICI1NTAgJHRlc3RubzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeS5cclxuIjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBTVE9SX2Z0cCB7CisgICAgbXkgJHRlc3Rubz0kX1swXTsKKworICAgIG15ICRmaWxlbmFtZSA9ICJsb2cvdXBsb2FkLiR0ZXN0bm8iOworCisgICAgaWYoJGRhdGFzb2NrZl9jb25uIGVxICdubycpIHsKKyAgICAgICAgaWYoJG5vZGF0YWNvbm40MjUpIHsKKyAgICAgICAgICAgIHNlbmRjb250cm9sICIxNTAgT3BlbmluZyBkYXRhIGNvbm5lY3Rpb25cclxuIjsKKyAgICAgICAgICAgIHNlbmRjb250cm9sICI0MjUgQ2FuJ3Qgb3BlbiBkYXRhIGNvbm5lY3Rpb25cclxuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkbm9kYXRhY29ubjQyMSkgeworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjE1MCBPcGVuaW5nIGRhdGEgY29ubmVjdGlvblxyXG4iOworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjQyMSBDb25uZWN0aW9uIHRpbWVkIG91dFxyXG4iOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRub2RhdGFjb25uMTUwKSB7CisgICAgICAgICAgICBzZW5kY29udHJvbCAiMTUwIE9wZW5pbmcgZGF0YSBjb25uZWN0aW9uXHJcbiI7CisgICAgICAgICAgICAjIGNsaWVudCBzaGFsbCB0aW1lb3V0CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAjIGNsaWVudCBzaGFsbCB0aW1lb3V0CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgbG9nbXNnICJTVE9SIHRlc3QgbnVtYmVyICR0ZXN0bm8gaW4gJGZpbGVuYW1lXG4iOworCisgICAgc2VuZGNvbnRyb2wgIjEyNSBHaW1tZSBnaW1tZSBnaW1tZSFcclxuIjsKKworICAgIG9wZW4oRklMRSwgIj4kZmlsZW5hbWUiKSB8fAorICAgICAgICByZXR1cm4gMDsgIyBmYWlsZWQgdG8gb3BlbiBvdXRwdXQKKworICAgIG15ICRsaW5lOworICAgIG15ICR1bHNpemU9MDsKKyAgICBteSAkZGlzYz0wOworICAgIHdoaWxlICg1ID09IChzeXNyZWFkIERSRUFELCAkbGluZSwgNSkpIHsKKyAgICAgICAgaWYoJGxpbmUgZXEgIkRBVEFcbiIpIHsKKyAgICAgICAgICAgIG15ICRpOworICAgICAgICAgICAgc3lzcmVhZCBEUkVBRCwgJGksIDU7CisKKyAgICAgICAgICAgIG15ICRzaXplID0gMDsKKyAgICAgICAgICAgIGlmKCRpID1+IC9eKFswLTlhLWZBLUZdezR9KVxuLykgeworICAgICAgICAgICAgICAgICRzaXplID0gaGV4KCQxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVhZF9kYXRhc29ja2YoXCRsaW5lLCAkc2l6ZSk7CisKKyAgICAgICAgICAgICNwcmludCBTVERFUlIgIiAgR09UOiAkc2l6ZSBieXRlc1xuIjsKKworICAgICAgICAgICAgJHVsc2l6ZSArPSAkc2l6ZTsKKyAgICAgICAgICAgIHByaW50IEZJTEUgJGxpbmUgaWYoISRub3NhdmUpOworICAgICAgICAgICAgbG9nbXNnICI+IEFwcGVuZGluZyAkc2l6ZSBieXRlcyB0byBmaWxlXG4iOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRsaW5lIGVxICJESVNDXG4iKSB7CisgICAgICAgICAgICAjIGRpc2Nvbm5lY3QhCisgICAgICAgICAgICAkZGlzYz0xOworICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxvZ21zZyAiTm8gc3VwcG9ydCBmb3I6ICRsaW5lIjsKKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoJG5vc2F2ZSkgeworICAgICAgICBwcmludCBGSUxFICIkdWxzaXplIGJ5dGVzIHdvdWxkJ3ZlIGJlZW4gc3RvcmVkIGhlcmVcbiI7CisgICAgfQorICAgIGNsb3NlKEZJTEUpOworICAgIGNsb3NlX2RhdGFjb25uKCRkaXNjKTsKKyAgICBsb2dtc2cgInJlY2VpdmVkICR1bHNpemUgYnl0ZXMgdXBsb2FkXG4iOworICAgIHNlbmRjb250cm9sICIyMjYgRmlsZSB0cmFuc2ZlciBjb21wbGV0ZVxyXG4iOworICAgIHJldHVybiAwOworfQorCitzdWIgUEFTVl9mdHAgeworICAgIG15ICgkYXJnLCAkY21kKT1AXzsKKyAgICBteSAkcGFzdnBvcnQ7CisgICAgbXkgJGJpbmRvbmx5ID0gKCRub2RhdGFjb25uKSA/ICctLWJpbmRvbmx5JyA6ICcnOworCisgICAgIyBraWxsIHByZXZpb3VzIGRhdGEgY29ubmVjdGlvbiBzb2NrZmlsdCB3aGVuIGFsaXZlCisgICAgaWYoJGRhdGFzb2NrZl9ydW5zIGVxICd5ZXMnKSB7CisgICAgICAgIGtpbGxzb2NrZmlsdGVycygkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJHZlcmJvc2UsICdkYXRhJyk7CisgICAgICAgIGxvZ21zZyAiREFUQSBzb2NrZmlsdCBmb3IgJGRhdGFzb2NrZl9tb2RlIGRhdGEgY2hhbm5lbCBraWxsZWRcbiI7CisgICAgfQorICAgIGRhdGFzb2NrZl9zdGF0ZSgnU1RPUFBFRCcpOworCisgICAgbG9nbXNnICI9PT09PiBQYXNzaXZlIERBVEEgY2hhbm5lbCByZXF1ZXN0ZWQgYnkgY2xpZW50XG4iOworCisgICAgbG9nbXNnICJEQVRBIHNvY2tmaWx0IGZvciBwYXNzaXZlIGRhdGEgY2hhbm5lbCBzdGFydGluZy4uLlxuIjsKKworICAgICMgV2UgZmlyZSB1cCBhIG5ldyBzb2NrZmlsdCB0byBkbyB0aGUgZGF0YSB0cmFuc2ZlciBmb3IgdXMuCisgICAgbXkgJGRhdGFzb2NrZmNtZCA9ICIuL3NlcnZlci9zb2NrZmlsdCAiIC4KKyAgICAgICAgIi0taXB2JGlwdm51bSAkYmluZG9ubHkgLS1wb3J0IDAgIiAuCisgICAgICAgICItLXBpZGZpbGUgXCIkZGF0YXNvY2tmX3BpZGZpbGVcIiAiIC4KKyAgICAgICAgIi0tbG9nZmlsZSBcIiRkYXRhc29ja2ZfbG9nZmlsZVwiIjsKKyAgICAkc2xhdmVwaWQgPSBvcGVuMihcKkRSRUFELCBcKkRXUklURSwgJGRhdGFzb2NrZmNtZCk7CisKKyAgICBpZigkbm9kYXRhY29ubikgeworICAgICAgICBkYXRhc29ja2Zfc3RhdGUoJ1BBU1NJVkVfTk9EQVRBQ09OTicpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZGF0YXNvY2tmX3N0YXRlKCdQQVNTSVZFJyk7CisgICAgfQorCisgICAgcHJpbnQgU1RERVJSICIkZGF0YXNvY2tmY21kXG4iIGlmKCR2ZXJib3NlKTsKKworICAgIHByaW50IERXUklURSAiUElOR1xuIjsKKyAgICBteSAkcG9uZzsKKyAgICBzeXNyZWFkX29yX2RpZShcKkRSRUFELCBcJHBvbmcsIDUpOworCisgICAgaWYoJHBvbmcgPX4gL15GQUlMLykgeworICAgICAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgc2FpZDogRkFJTFxuIjsKKyAgICAgICAgbG9nbXNnICJEQVRBIHNvY2tmaWx0IGZvciBwYXNzaXZlIGRhdGEgY2hhbm5lbCBmYWlsZWRcbiI7CisgICAgICAgIGxvZ21zZyAiREFUQSBzb2NrZmlsdCBub3QgcnVubmluZ1xuIjsKKyAgICAgICAgZGF0YXNvY2tmX3N0YXRlKCdTVE9QUEVEJyk7CisgICAgICAgIHNlbmRjb250cm9sICI1MDAgbm8gZnJlZSBwb3J0cyFcclxuIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNpZigkcG9uZyAhfiAvXlBPTkcvKSB7CisgICAgICAgIGxvZ21zZyAiREFUQSBzb2NrZmlsdCB1bmV4cGVjdGVkIHJlc3BvbnNlOiAkcG9uZ1xuIjsKKyAgICAgICAgbG9nbXNnICJEQVRBIHNvY2tmaWx0IGZvciBwYXNzaXZlIGRhdGEgY2hhbm5lbCBmYWlsZWRcbiI7CisgICAgICAgIGxvZ21zZyAiREFUQSBzb2NrZmlsdCBraWxsZWQgbm93XG4iOworICAgICAgICBraWxsc29ja2ZpbHRlcnMoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICR2ZXJib3NlLCAnZGF0YScpOworICAgICAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgbm90IHJ1bm5pbmdcbiI7CisgICAgICAgIGRhdGFzb2NrZl9zdGF0ZSgnU1RPUFBFRCcpOworICAgICAgICBzZW5kY29udHJvbCAiNTAwIG5vIGZyZWUgcG9ydHMhXHJcbiI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgZm9yIHBhc3NpdmUgZGF0YSBjaGFubmVsIHN0YXJ0ZWQgKHBpZCAkc2xhdmVwaWQpXG4iOworCisgICAgIyBGaW5kIG91dCBvbiB3aGF0IHBvcnQgd2UgbGlzdGVuIG9uIG9yIGhhdmUgYm91bmQKKyAgICBteSAkaTsKKyAgICBwcmludCBEV1JJVEUgIlBPUlRcbiI7CisKKyAgICAjIFJFQUQgdGhlIHJlc3BvbnNlIGNvZGUKKyAgICBzeXNyZWFkX29yX2RpZShcKkRSRUFELCBcJGksIDUpOworCisgICAgIyBSRUFEIHRoZSByZXNwb25zZSBzaXplCisgICAgc3lzcmVhZF9vcl9kaWUoXCpEUkVBRCwgXCRpLCA1KTsKKworICAgIG15ICRzaXplID0gMDsKKyAgICBpZigkaSA9fiAvXihbMC05YS1mQS1GXXs0fSlcbi8pIHsKKyAgICAgICAgJHNpemUgPSBoZXgoJDEpOworICAgIH0KKworICAgICMgUkVBRCB0aGUgcmVzcG9uc2UgZGF0YQorICAgIHJlYWRfZGF0YXNvY2tmKFwkaSwgJHNpemUpOworCisgICAgIyBUaGUgZGF0YSBpcyBpbiB0aGUgZm9ybWF0CisgICAgIyBJUHZYL05OTgorCisgICAgaWYoJGkgPX4gL0lQdihcZClcLyhcZCspLykgeworICAgICAgICAjIEZJWDogZGVhbCB3aXRoIElQIHByb3RvY29sIHZlcnNpb24KKyAgICAgICAgJHBhc3Zwb3J0ID0gJDI7CisgICAgfQorCisgICAgaWYoISRwYXN2cG9ydCkgeworICAgICAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgdW5rbm93biBsaXN0ZW5lciBwb3J0XG4iOworICAgICAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgZm9yIHBhc3NpdmUgZGF0YSBjaGFubmVsIGZhaWxlZFxuIjsKKyAgICAgICAgbG9nbXNnICJEQVRBIHNvY2tmaWx0IGtpbGxlZCBub3dcbiI7CisgICAgICAgIGtpbGxzb2NrZmlsdGVycygkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJHZlcmJvc2UsICdkYXRhJyk7CisgICAgICAgIGxvZ21zZyAiREFUQSBzb2NrZmlsdCBub3QgcnVubmluZ1xuIjsKKyAgICAgICAgZGF0YXNvY2tmX3N0YXRlKCdTVE9QUEVEJyk7CisgICAgICAgIHNlbmRjb250cm9sICI1MDAgbm8gZnJlZSBwb3J0cyFcclxuIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmKCRub2RhdGFjb25uKSB7CisgICAgICAgIG15ICRzdHIgPSBub2RhdGFjb25uX3N0cigpOworICAgICAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgZm9yIHBhc3NpdmUgZGF0YSBjaGFubmVsICgkc3RyKSBib3VuZCBvbiBwb3J0ICIuCisgICAgICAgICAgICAgICAiJHBhc3Zwb3J0XG4iOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbG9nbXNnICJEQVRBIHNvY2tmaWx0IGZvciBwYXNzaXZlIGRhdGEgY2hhbm5lbCBsaXN0ZW5zIG9uIHBvcnQgIi4KKyAgICAgICAgICAgICAgICIkcGFzdnBvcnRcbiI7CisgICAgfQorCisgICAgaWYoJGNtZCBuZSAiRVBTViIpIHsKKyAgICAgICAgIyBQQVNWIHJlcGx5CisgICAgICAgIG15ICRwPSRsaXN0ZW5hZGRyOworICAgICAgICAkcCA9fiBzL1wuLywvZzsKKyAgICAgICAgaWYoJHBhc3ZiYWRpcCkgeworICAgICAgICAgICAgJHA9IjEsMiwzLDQiOworICAgICAgICB9CisgICAgICAgIHNlbmRjb250cm9sIHNwcmludGYoIjIyNyBFbnRlcmluZyBQYXNzaXZlIE1vZGUgKCRwLCVkLCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQoJHBhc3Zwb3J0LzI1NiksIGludCgkcGFzdnBvcnQlMjU2KSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAjIEVQU1YgcmVwbHkKKyAgICAgICAgc2VuZGNvbnRyb2wgc3ByaW50ZigiMjI5IEVudGVyaW5nIFBhc3NpdmUgTW9kZSAofHx8JWR8KVxuIiwgJHBhc3Zwb3J0KTsKKyAgICB9CisKKyAgICBsb2dtc2cgIkNsaWVudCBoYXMgYmVlbiBub3RpZmllZCB0aGF0IERBVEEgY29ubiAiLgorICAgICAgICAgICAid2lsbCBiZSBhY2NlcHRlZCBvbiBwb3J0ICRwYXN2cG9ydFxuIjsKKworICAgIGlmKCRub2RhdGFjb25uKSB7CisgICAgICAgIG15ICRzdHIgPSBub2RhdGFjb25uX3N0cigpOworICAgICAgICBsb2dtc2cgIj09PT0+IENsaWVudCBmb29sZWQgKCRzdHIpXG4iOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZXZhbCB7CisgICAgICAgIGxvY2FsICRTSUd7QUxSTX0gPSBzdWIgeyBkaWUgImFsYXJtXG4iIH07CisKKyAgICAgICAgIyBhc3N1bWUgc3dpZnQgb3BlcmF0aW9ucyB1bmxlc3MgZXhwbGljaXRseSBzbG93CisgICAgICAgIGFsYXJtICgkZGF0YWRlbGF5PzIwOjEwKTsKKworICAgICAgICAjIFdhaXQgZm9yICdDTkNUJworICAgICAgICBteSAkaW5wdXQ7CisKKyAgICAgICAgIyBGSVg6IE1vbml0b3IgY3RybCBjb25uIGZvciBkaXNjb25uZWN0CisKKyAgICAgICAgd2hpbGUoc3lzcmVhZChEUkVBRCwgJGlucHV0LCA1KSkgeworCisgICAgICAgICAgICBpZigkaW5wdXQgIX4gL15DTkNULykgeworICAgICAgICAgICAgICAgICMgd2Ugd2FpdCBmb3IgYSBjb25uZWN0ZWQgY2xpZW50CisgICAgICAgICAgICAgICAgbG9nbXNnICJPZGQsIHdlIGdvdCAkaW5wdXQgZnJvbSBjbGllbnRcbiI7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvZ21zZyAiQ2xpZW50IGNvbm5lY3RzIHRvIHBvcnQgJHBhc3Zwb3J0XG4iOworICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgfQorICAgICAgICBhbGFybSAwOworICAgIH07CisgICAgaWYgKCRAKSB7CisgICAgICAgICMgdGltZWQgb3V0CisgICAgICAgIGxvZ21zZyAiJHNydnJuYW1lIHNlcnZlciB0aW1lZCBvdXQgYXdhaXRpbmcgZGF0YSBjb25uZWN0aW9uICIuCisgICAgICAgICAgICAib24gcG9ydCAkcGFzdnBvcnRcbiI7CisgICAgICAgIGxvZ21zZyAiYWNjZXB0IGZhaWxlZCBvciBjb25uZWN0aW9uIG5vdCBldmVuIGF0dGVtcHRlZFxuIjsKKyAgICAgICAgbG9nbXNnICJEQVRBIHNvY2tmaWx0IGtpbGxlZCBub3dcbiI7CisgICAgICAgIGtpbGxzb2NrZmlsdGVycygkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJHZlcmJvc2UsICdkYXRhJyk7CisgICAgICAgIGxvZ21zZyAiREFUQSBzb2NrZmlsdCBub3QgcnVubmluZ1xuIjsKKyAgICAgICAgZGF0YXNvY2tmX3N0YXRlKCdTVE9QUEVEJyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxvZ21zZyAiPT09PT4gQ2xpZW50IGVzdGFibGlzaGVkIHBhc3NpdmUgREFUQSBjb25uZWN0aW9uICIuCisgICAgICAgICAgICAgICAib24gcG9ydCAkcGFzdnBvcnRcbiI7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCisjCisjIFN1cHBvcnQgYm90aCBQT1JUIGFuZCBFUFJUIGhlcmUuCisjCisKK3N1YiBQT1JUX2Z0cCB7CisgICAgbXkgKCRhcmcsICRjbWQpID0gQF87CisgICAgbXkgJHBvcnQ7CisgICAgbXkgJGFkZHI7CisKKyAgICAjIGtpbGwgcHJldmlvdXMgZGF0YSBjb25uZWN0aW9uIHNvY2tmaWx0IHdoZW4gYWxpdmUKKyAgICBpZigkZGF0YXNvY2tmX3J1bnMgZXEgJ3llcycpIHsKKyAgICAgICAga2lsbHNvY2tmaWx0ZXJzKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkdmVyYm9zZSwgJ2RhdGEnKTsKKyAgICAgICAgbG9nbXNnICJEQVRBIHNvY2tmaWx0IGZvciAkZGF0YXNvY2tmX21vZGUgZGF0YSBjaGFubmVsIGtpbGxlZFxuIjsKKyAgICB9CisgICAgZGF0YXNvY2tmX3N0YXRlKCdTVE9QUEVEJyk7CisKKyAgICBsb2dtc2cgIj09PT0+IEFjdGl2ZSBEQVRBIGNoYW5uZWwgcmVxdWVzdGVkIGJ5IGNsaWVudFxuIjsKKworICAgICMgV2UgYWx3YXlzIGlnbm9yZSB0aGUgZ2l2ZW4gSVAgYW5kIHVzZSBsb2NhbGhvc3QuCisKKyAgICBpZigkY21kIGVxICJQT1JUIikgeworICAgICAgICBpZigkYXJnICF+IC8oXGQrKSwoXGQrKSwoXGQrKSwoXGQrKSwoXGQrKSwoXGQrKS8pIHsKKyAgICAgICAgICAgIGxvZ21zZyAiREFUQSBzb2NrZmlsdCBmb3IgYWN0aXZlIGRhdGEgY2hhbm5lbCBub3Qgc3RhcnRlZCAiLgorICAgICAgICAgICAgICAgICAgICIoYmFkIFBPUlQtbGluZTogJGFyZylcbiI7CisgICAgICAgICAgICBzZW5kY29udHJvbCAiNTAwIHNpbGx5IHlvdSwgZ28gYXdheVxyXG4iOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICRwb3J0ID0gKCQ1PDw4KSskNjsKKyAgICAgICAgJGFkZHIgPSAiJDEuJDIuJDMuJDQiOworICAgIH0KKyAgICAjIEVQUlQgfDJ8OjoxfDQ5NzA2fAorICAgIGVsc2lmKCRjbWQgZXEgIkVQUlQiKSB7CisgICAgICAgIGlmKCRhcmcgIX4gLyhcZCspXHwoW15cfF0rKVx8KFxkKykvKSB7CisgICAgICAgICAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgZm9yIGFjdGl2ZSBkYXRhIGNoYW5uZWwgbm90IHN0YXJ0ZWQgIi4KKyAgICAgICAgICAgICAgICAgICAiKGJhZCBFUFJULWxpbmU6ICRhcmcpXG4iOworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjUwMCBzaWxseSB5b3UsIGdvIGF3YXlcclxuIjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZW5kY29udHJvbCAiMjAwIFRoYW5rcyBmb3IgZHJvcHBpbmcgYnkuIFdlIGNvbnRhY3QgeW91IGxhdGVyXHJcbiI7CisgICAgICAgICRwb3J0ID0gJDM7CisgICAgICAgICRhZGRyID0gJDI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgZm9yIGFjdGl2ZSBkYXRhIGNoYW5uZWwgbm90IHN0YXJ0ZWQgIi4KKyAgICAgICAgICAgICAgICIoaW52YWxpZCBjb21tYW5kOiAkY21kKVxuIjsKKyAgICAgICAgc2VuZGNvbnRyb2wgIjUwMCB3ZSBkb24ndCBsaWtlICRjbWQgbm93XHJcbiI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZighJHBvcnQgfHwgJHBvcnQgPiA2NTUzNSkgeworICAgICAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgZm9yIGFjdGl2ZSBkYXRhIGNoYW5uZWwgbm90IHN0YXJ0ZWQgIi4KKyAgICAgICAgICAgICAgICIoaWxsZWdhbCBQT1JUIG51bWJlcjogJHBvcnQpXG4iOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYoJG5vZGF0YWNvbm4pIHsKKyAgICAgICAgbXkgJHN0ciA9IG5vZGF0YWNvbm5fc3RyKCk7CisgICAgICAgIGxvZ21zZyAiREFUQSBzb2NrZmlsdCBmb3IgYWN0aXZlIGRhdGEgY2hhbm5lbCBub3Qgc3RhcnRlZCAoJHN0cilcbiI7CisgICAgICAgIGRhdGFzb2NrZl9zdGF0ZSgnQUNUSVZFX05PREFUQUNPTk4nKTsKKyAgICAgICAgbG9nbXNnICI9PT09PiBBY3RpdmUgREFUQSBjaGFubmVsIG5vdCBlc3RhYmxpc2hlZFxuIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxvZ21zZyAiREFUQSBzb2NrZmlsdCBmb3IgYWN0aXZlIGRhdGEgY2hhbm5lbCBzdGFydGluZy4uLlxuIjsKKworICAgICMgV2UgZmlyZSB1cCBhIG5ldyBzb2NrZmlsdCB0byBkbyB0aGUgZGF0YSB0cmFuc2ZlciBmb3IgdXMuCisgICAgbXkgJGRhdGFzb2NrZmNtZCA9ICIuL3NlcnZlci9zb2NrZmlsdCAiIC4KKyAgICAgICAgIi0taXB2JGlwdm51bSAtLWNvbm5lY3QgJHBvcnQgLS1hZGRyIFwiJGFkZHJcIiAiIC4KKyAgICAgICAgIi0tcGlkZmlsZSBcIiRkYXRhc29ja2ZfcGlkZmlsZVwiICIgLgorICAgICAgICAiLS1sb2dmaWxlIFwiJGRhdGFzb2NrZl9sb2dmaWxlXCIiOworICAgICRzbGF2ZXBpZCA9IG9wZW4yKFwqRFJFQUQsIFwqRFdSSVRFLCAkZGF0YXNvY2tmY21kKTsKKworICAgIGRhdGFzb2NrZl9zdGF0ZSgnQUNUSVZFJyk7CisKKyAgICBwcmludCBTVERFUlIgIiRkYXRhc29ja2ZjbWRcbiIgaWYoJHZlcmJvc2UpOworCisgICAgcHJpbnQgRFdSSVRFICJQSU5HXG4iOworICAgIG15ICRwb25nOworICAgIHN5c3JlYWRfb3JfZGllKFwqRFJFQUQsIFwkcG9uZywgNSk7CisKKyAgICBpZigkcG9uZyA9fiAvXkZBSUwvKSB7CisgICAgICAgIGxvZ21zZyAiREFUQSBzb2NrZmlsdCBzYWlkOiBGQUlMXG4iOworICAgICAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgZm9yIGFjdGl2ZSBkYXRhIGNoYW5uZWwgZmFpbGVkXG4iOworICAgICAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgbm90IHJ1bm5pbmdcbiI7CisgICAgICAgIGRhdGFzb2NrZl9zdGF0ZSgnU1RPUFBFRCcpOworICAgICAgICAjIGNsaWVudCBzaGFsbCB0aW1lb3V0IGF3YWl0aW5nIGNvbm5lY3Rpb24gZnJvbSBzZXJ2ZXIKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNpZigkcG9uZyAhfiAvXlBPTkcvKSB7CisgICAgICAgIGxvZ21zZyAiREFUQSBzb2NrZmlsdCB1bmV4cGVjdGVkIHJlc3BvbnNlOiAkcG9uZ1xuIjsKKyAgICAgICAgbG9nbXNnICJEQVRBIHNvY2tmaWx0IGZvciBhY3RpdmUgZGF0YSBjaGFubmVsIGZhaWxlZFxuIjsKKyAgICAgICAgbG9nbXNnICJEQVRBIHNvY2tmaWx0IGtpbGxlZCBub3dcbiI7CisgICAgICAgIGtpbGxzb2NrZmlsdGVycygkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJHZlcmJvc2UsICdkYXRhJyk7CisgICAgICAgIGxvZ21zZyAiREFUQSBzb2NrZmlsdCBub3QgcnVubmluZ1xuIjsKKyAgICAgICAgZGF0YXNvY2tmX3N0YXRlKCdTVE9QUEVEJyk7CisgICAgICAgICMgY2xpZW50IHNoYWxsIHRpbWVvdXQgYXdhaXRpbmcgY29ubmVjdGlvbiBmcm9tIHNlcnZlcgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbG9nbXNnICJEQVRBIHNvY2tmaWx0IGZvciBhY3RpdmUgZGF0YSBjaGFubmVsIHN0YXJ0ZWQgKHBpZCAkc2xhdmVwaWQpXG4iOworCisgICAgbG9nbXNnICI9PT09PiBBY3RpdmUgREFUQSBjaGFubmVsIGNvbm5lY3RlZCB0byBjbGllbnQgcG9ydCAkcG9ydFxuIjsKKworICAgIHJldHVybjsKK30KKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgZGF0YXNvY2tmX3N0YXRlIGlzIHVzZWQgdG8gY2hhbmdlIHZhcmlhYmxlcyB0aGF0IGtlZXAgc3RhdGUgaW5mbworIyByZWxhdGl2ZSB0byB0aGUgRlRQIHNlY29uZGFyeSBvciBkYXRhIHNvY2tmaWx0IHByb2Nlc3MgYXMgc29vbiBhcworIyBvbmUgb2YgdGhlIGZpdmUgcG9zc2libGUgc3RhYmxlIHN0YXRlcyBpcyByZWFjaGVkLiBWYXJpYWJsZXMgdGhhdAorIyBhcmUgbW9kaWZpZWQgYnkgdGhpcyBzdWIgbWF5IGJlIGNoZWNrZWQgaW5kZXBlbmRlbnRseSBidXQgc2hvdWxkCisjIG5vdCBiZSBjaGFuZ2VkIGV4Y2VwdCBieSBjYWxsaW5nIHRoaXMgc3ViLgorIworc3ViIGRhdGFzb2NrZl9zdGF0ZSB7CisgICAgbXkgJHN0YXRlID0gJF9bMF07CisKKyAgaWYoJHN0YXRlIGVxICdTVE9QUEVEJykgeworICAgICMgRGF0YSBzb2NrZmlsdGVyIGluaXRpYWwgc3RhdGUsIG5vdCBydW5uaW5nLAorICAgICMgbm90IGNvbm5lY3RlZCBhbmQgbm90IHVzZWQuCisgICAgJGRhdGFzb2NrZl9zdGF0ZSA9ICRzdGF0ZTsKKyAgICAkZGF0YXNvY2tmX21vZGUgPSAnbm9uZSc7CisgICAgJGRhdGFzb2NrZl9ydW5zID0gJ25vJzsKKyAgICAkZGF0YXNvY2tmX2Nvbm4gPSAnbm8nOworICB9CisgIGVsc2lmKCRzdGF0ZSBlcSAnUEFTU0lWRScpIHsKKyAgICAjIERhdGEgc29ja2ZpbHRlciBhY2NlcHRlZCBjb25uZWN0aW9uIGZyb20gY2xpZW50LgorICAgICRkYXRhc29ja2Zfc3RhdGUgPSAkc3RhdGU7CisgICAgJGRhdGFzb2NrZl9tb2RlID0gJ3Bhc3NpdmUnOworICAgICRkYXRhc29ja2ZfcnVucyA9ICd5ZXMnOworICAgICRkYXRhc29ja2ZfY29ubiA9ICd5ZXMnOworICB9CisgIGVsc2lmKCRzdGF0ZSBlcSAnQUNUSVZFJykgeworICAgICMgRGF0YSBzb2NrZmlsdGVyIGhhcyBjb25uZWN0ZWQgdG8gY2xpZW50LgorICAgICRkYXRhc29ja2Zfc3RhdGUgPSAkc3RhdGU7CisgICAgJGRhdGFzb2NrZl9tb2RlID0gJ2FjdGl2ZSc7CisgICAgJGRhdGFzb2NrZl9ydW5zID0gJ3llcyc7CisgICAgJGRhdGFzb2NrZl9jb25uID0gJ3llcyc7CisgIH0KKyAgZWxzaWYoJHN0YXRlIGVxICdQQVNTSVZFX05PREFUQUNPTk4nKSB7CisgICAgIyBEYXRhIHNvY2tmaWx0ZXIgYm91bmQgcG9ydCB3aXRob3V0IGxpc3RlbmluZywKKyAgICAjIGNsaWVudCB3b24ndCBiZSBhYmxlIHRvIGVzdGFibGlzaCBkYXRhIGNvbm5lY3Rpb24uCisgICAgJGRhdGFzb2NrZl9zdGF0ZSA9ICRzdGF0ZTsKKyAgICAkZGF0YXNvY2tmX21vZGUgPSAncGFzc2l2ZSc7CisgICAgJGRhdGFzb2NrZl9ydW5zID0gJ3llcyc7CisgICAgJGRhdGFzb2NrZl9jb25uID0gJ25vJzsKKyAgfQorICBlbHNpZigkc3RhdGUgZXEgJ0FDVElWRV9OT0RBVEFDT05OJykgeworICAgICMgRGF0YSBzb2NrZmlsdGVyIGRvZXMgbm90IGV2ZW4gcnVuLAorICAgICMgY2xpZW50IGF3YWl0cyBkYXRhIGNvbm5lY3Rpb24gZnJvbSBzZXJ2ZXIgaW4gdmFpbi4KKyAgICAkZGF0YXNvY2tmX3N0YXRlID0gJHN0YXRlOworICAgICRkYXRhc29ja2ZfbW9kZSA9ICdhY3RpdmUnOworICAgICRkYXRhc29ja2ZfcnVucyA9ICdubyc7CisgICAgJGRhdGFzb2NrZl9jb25uID0gJ25vJzsKKyAgfQorICBlbHNlIHsKKyAgICAgIGRpZSAiSW50ZXJuYWwgZXJyb3IuIFVua25vd24gZGF0YXNvY2tmIHN0YXRlOiAkc3RhdGUhIjsKKyAgfQorfQorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBub2RhdGFjb25uX3N0ciByZXR1cm5zIHN0cmluZyBvZiBlZmVjdGl2ZSBub2RhdGFjb25uIGNvbW1hbmQuIE5vdGljZQorIyB0aGF0ICRub2RhdGFjb25uIG1heSBiZSBzZXQgYWxvbmUgb3IgaW4gYWRkaXRpb24gdG8gYSAkbm9kYXRhY29ublhYWC4KKyMKK3N1YiBub2RhdGFjb25uX3N0ciB7CisgICAgbXkgJHN0cjsKKyAgICAjIG9yZGVyIG1hdHRlcnMKKyAgICAkc3RyID0gJ05PREFUQUNPTk4nIGlmKCRub2RhdGFjb25uKTsKKyAgICAkc3RyID0gJ05PREFUQUNPTk40MjUnIGlmKCRub2RhdGFjb25uNDI1KTsKKyAgICAkc3RyID0gJ05PREFUQUNPTk40MjEnIGlmKCRub2RhdGFjb25uNDIxKTsKKyAgICAkc3RyID0gJ05PREFUQUNPTk4xNTAnIGlmKCRub2RhdGFjb25uMTUwKTsKKyAgICByZXR1cm4gIiRzdHIiOworfQorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBjdXN0b21pemUgY29uZmlndXJlcyB0ZXN0IHNlcnZlciBvcGVyYXRpb24gZm9yIGVhY2ggY3VybCB0ZXN0LCByZWFkaW5nCisjIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMvcGFyYW1ldGVycyBmcm9tIHNlcnZlciBjb21tYW5kcyBmaWxlIGVhY2ggdGltZQorIyBhIG5ldyBjbGllbnQgY29udHJvbCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIHdpdGggdGhlIHRlc3Qgc2VydmVyLgorIyBPbiBzdWNjZXNzIHJldHVybnMgMSwgb3RoZXJ3aXNlIHplcm8uCisjCitzdWIgY3VzdG9taXplIHsKKyAgICAkY3RybGRlbGF5ID0gMDsgICAgICMgZGVmYXVsdCBpcyBubyB0aHJvdHRsaW5nIG9mIHRoZSBjdHJsIHN0cmVhbQorICAgICRkYXRhZGVsYXkgPSAwOyAgICAgIyBkZWZhdWx0IGlzIG5vIHRocm90dGxpbmcgb2YgdGhlIGRhdGEgc3RyZWFtCisgICAgJHJldHJ3ZWlyZG8gPSAwOyAgICAjIGRlZmF1bHQgaXMgbm8gdXNlIG9mIFJFVFJXRUlSRE8KKyAgICAkcmV0cm5vc2l6ZSA9IDA7ICAgICMgZGVmYXVsdCBpcyBubyB1c2Ugb2YgUkVUUk5PU0laRQorICAgICRwYXN2YmFkaXAgPSAwOyAgICAgIyBkZWZhdWx0IGlzIG5vIHVzZSBvZiBQQVNWQkFESVAKKyAgICAkbm9zYXZlID0gMDsgICAgICAgICMgZGVmYXVsdCBpcyB0byBhY3R1YWxseSBzYXZlIHVwbG9hZGVkIGRhdGEgdG8gZmlsZQorICAgICRub2RhdGFjb25uID0gMDsgICAgIyBkZWZhdWx0IGlzIHRvIGVzdGFibGlzaCBvciBhY2NlcHQgZGF0YSBjaGFubmVsCisgICAgJG5vZGF0YWNvbm40MjUgPSAwOyAjIGRlZmF1bHQgaXMgdG8gbm90IHNlbmQgNDI1IHdpdGhvdXQgZGF0YSBjaGFubmVsCisgICAgJG5vZGF0YWNvbm40MjEgPSAwOyAjIGRlZmF1bHQgaXMgdG8gbm90IHNlbmQgNDIxIHdpdGhvdXQgZGF0YSBjaGFubmVsCisgICAgJG5vZGF0YWNvbm4xNTAgPSAwOyAjIGRlZmF1bHQgaXMgdG8gbm90IHNlbmQgMTUwIHdpdGhvdXQgZGF0YSBjaGFubmVsCisgICAgJWN1c3RvbXJlcGx5ID0gKCk7ICAjCisgICAgJWN1c3RvbWNvdW50ID0gKCk7ICAjCisgICAgJWRlbGF5cmVwbHkgPSAoKTsgICAjCisKKyAgICBvcGVuKENVU1RPTSwgIjxsb2cvZnRwc2VydmVyLmNtZCIpIHx8CisgICAgICAgIHJldHVybiAxOworCisgICAgbG9nbXNnICJGVFBEOiBHZXR0aW5nIGNvbW1hbmRzIGZyb20gbG9nL2Z0cHNlcnZlci5jbWRcbiI7CisKKyAgICB3aGlsZSg8Q1VTVE9NPikgeworICAgICAgICBpZigkXyA9fiAvUkVQTFkgKFtBLVphLXowLTkrXC89XSspICguKikvKSB7CisgICAgICAgICAgICAkY3VzdG9tcmVwbHl7JDF9PWV2YWwgInFxeyQyfSI7CisgICAgICAgICAgICBsb2dtc2cgIkZUUEQ6IHNldCBjdXN0b20gcmVwbHkgZm9yICQxXG4iOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRfID1+IC9DT1VOVCAoW0EtWl0rKSAoLiopLykgeworICAgICAgICAgICAgIyB3ZSBibGFuayB0aGUgY3VzdG9tcmVwbHkgZm9yIHRoaXMgY29tbWFuZCB3aGVuIGhhdmluZworICAgICAgICAgICAgIyBiZWVuIHVzZWQgdGhpcyBudW1iZXIgb2YgdGltZXMKKyAgICAgICAgICAgICRjdXN0b21jb3VudHskMX09JDI7CisgICAgICAgICAgICBsb2dtc2cgIkZUUEQ6IGJsYW5rIGN1c3RvbSByZXBseSBmb3IgJDEgYWZ0ZXIgJDIgdXNlc1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkXyA9fiAvREVMQVkgKFtBLVpdKykgKFxkKikvKSB7CisgICAgICAgICAgICAkZGVsYXlyZXBseXskMX09JDI7CisgICAgICAgICAgICBsb2dtc2cgIkZUUEQ6IGRlbGF5IHJlcGx5IGZvciAkMSB3aXRoICQyIHNlY29uZHNcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJF8gPX4gL1NMT1dET1dOLykgeworICAgICAgICAgICAgJGN0cmxkZWxheT0xOworICAgICAgICAgICAgJGRhdGFkZWxheT0xOworICAgICAgICAgICAgbG9nbXNnICJGVFBEOiBzZW5kIHJlc3BvbnNlIHdpdGggMC4wMSBzZWMgZGVsYXkgYmV0d2VlbiBlYWNoIGJ5dGVcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJF8gPX4gL1JFVFJXRUlSRE8vKSB7CisgICAgICAgICAgICBsb2dtc2cgIkZUUEQ6IGluc3RydWN0ZWQgdG8gdXNlIFJFVFJXRUlSRE9cbiI7CisgICAgICAgICAgICAkcmV0cndlaXJkbz0xOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRfID1+IC9SRVRSTk9TSVpFLykgeworICAgICAgICAgICAgbG9nbXNnICJGVFBEOiBpbnN0cnVjdGVkIHRvIHVzZSBSRVRSTk9TSVpFXG4iOworICAgICAgICAgICAgJHJldHJub3NpemU9MTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkXyA9fiAvUEFTVkJBRElQLykgeworICAgICAgICAgICAgbG9nbXNnICJGVFBEOiBpbnN0cnVjdGVkIHRvIHVzZSBQQVNWQkFESVBcbiI7CisgICAgICAgICAgICAkcGFzdmJhZGlwPTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJF8gPX4gL05PREFUQUNPTk40MjUvKSB7CisgICAgICAgICAgICAjIGFwcGxpZXMgdG8gYm90aCBhY3RpdmUgYW5kIHBhc3NpdmUgRlRQIG1vZGVzCisgICAgICAgICAgICBsb2dtc2cgIkZUUEQ6IGluc3RydWN0ZWQgdG8gdXNlIE5PREFUQUNPTk40MjVcbiI7CisgICAgICAgICAgICAkbm9kYXRhY29ubjQyNT0xOworICAgICAgICAgICAgJG5vZGF0YWNvbm49MTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkXyA9fiAvTk9EQVRBQ09OTjQyMS8pIHsKKyAgICAgICAgICAgICMgYXBwbGllcyB0byBib3RoIGFjdGl2ZSBhbmQgcGFzc2l2ZSBGVFAgbW9kZXMKKyAgICAgICAgICAgIGxvZ21zZyAiRlRQRDogaW5zdHJ1Y3RlZCB0byB1c2UgTk9EQVRBQ09OTjQyMVxuIjsKKyAgICAgICAgICAgICRub2RhdGFjb25uNDIxPTE7CisgICAgICAgICAgICAkbm9kYXRhY29ubj0xOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRfID1+IC9OT0RBVEFDT05OMTUwLykgeworICAgICAgICAgICAgIyBhcHBsaWVzIHRvIGJvdGggYWN0aXZlIGFuZCBwYXNzaXZlIEZUUCBtb2RlcworICAgICAgICAgICAgbG9nbXNnICJGVFBEOiBpbnN0cnVjdGVkIHRvIHVzZSBOT0RBVEFDT05OMTUwXG4iOworICAgICAgICAgICAgJG5vZGF0YWNvbm4xNTA9MTsKKyAgICAgICAgICAgICRub2RhdGFjb25uPTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJF8gPX4gL05PREFUQUNPTk4vKSB7CisgICAgICAgICAgICAjIGFwcGxpZXMgdG8gYm90aCBhY3RpdmUgYW5kIHBhc3NpdmUgRlRQIG1vZGVzCisgICAgICAgICAgICBsb2dtc2cgIkZUUEQ6IGluc3RydWN0ZWQgdG8gdXNlIE5PREFUQUNPTk5cbiI7CisgICAgICAgICAgICAkbm9kYXRhY29ubj0xOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRfID1+IC9OT1NBVkUvKSB7CisgICAgICAgICAgICAjIGRvbid0IGFjdHVhbGx5IHN0b3JlIHRoZSBmaWxlIHdlIHVwbG9hZCAtIHRvIGJlIHVzZWQgd2hlbgorICAgICAgICAgICAgIyB1cGxvYWRpbmcgaW5zYW5lbHkgaHVnZSBhbW91bnRzCisgICAgICAgICAgICAkbm9zYXZlID0gMTsKKyAgICAgICAgICAgIGxvZ21zZyAiRlRQRDogTk9TQVZFIHByZXZlbnRzIHNhdmluZyBvZiB1cGxvYWRlZCBkYXRhXG4iOworICAgICAgICB9CisgICAgfQorICAgIGNsb3NlKENVU1RPTSk7Cit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRU5EIE9GIFNVQlMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBQYXJzZSBjb21tYW5kIGxpbmUgb3B0aW9ucworIworIyBPcHRpb25zOgorIworIyAtLXZlcmJvc2UgICAjIHZlcmJvc2UKKyMgLS1zcmNkaXIgICAgIyBzb3VyY2UgZGlyZWN0b3J5CisjIC0taWQgICAgICAgICMgc2VydmVyIGluc3RhbmNlIG51bWJlcgorIyAtLXByb3RvICAgICAjIHNlcnZlciBwcm90b2NvbAorIyAtLXBpZGZpbGUgICAjIHNlcnZlciBwaWQgZmlsZQorIyAtLWxvZ2ZpbGUgICAjIHNlcnZlciBsb2cgZmlsZQorIyAtLWlwdjQgICAgICAjIHNlcnZlciBJUCB2ZXJzaW9uIDQKKyMgLS1pcHY2ICAgICAgIyBzZXJ2ZXIgSVAgdmVyc2lvbiA2CisjIC0tcG9ydCAgICAgICMgc2VydmVyIGxpc3RlbmVyIHBvcnQKKyMgLS1hZGRyICAgICAgIyBzZXJ2ZXIgYWRkcmVzcyBmb3IgbGlzdGVuZXIgcG9ydCBiaW5kaW5nCisjCit3aGlsZShAQVJHVikgeworICAgIGlmKCRBUkdWWzBdIGVxICctLXZlcmJvc2UnKSB7CisgICAgICAgICR2ZXJib3NlID0gMTsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tc3JjZGlyJykgeworICAgICAgICBpZigkQVJHVlsxXSkgeworICAgICAgICAgICAgJHNyY2RpciA9ICRBUkdWWzFdOworICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0taWQnKSB7CisgICAgICAgIGlmKCRBUkdWWzFdICYmICgkQVJHVlsxXSA9fiAvXihcZCspJC8pKSB7CisgICAgICAgICAgICAkaWRudW0gPSAkMSBpZigkMSA+IDApOworICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tcHJvdG8nKSB7CisgICAgICAgIGlmKCRBUkdWWzFdICYmICgkQVJHVlsxXSA9fiAvXihmdHB8aW1hcHxwb3AzfHNtdHApJC8pKSB7CisgICAgICAgICAgICAkcHJvdG8gPSAkMTsKKyAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGllICJ1bnN1cHBvcnRlZCBwcm90b2NvbCAkQVJHVlsxXSI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tcGlkZmlsZScpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgICRwaWRmaWxlID0gJEFSR1ZbMV07CisgICAgICAgICAgICBzaGlmdCBAQVJHVjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1sb2dmaWxlJykgeworICAgICAgICBpZigkQVJHVlsxXSkgeworICAgICAgICAgICAgJGxvZ2ZpbGUgPSAkQVJHVlsxXTsKKyAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLWlwdjQnKSB7CisgICAgICAgICRpcHZudW0gPSA0OworICAgICAgICAkbGlzdGVuYWRkciA9ICcxMjcuMC4wLjEnIGlmKCRsaXN0ZW5hZGRyIGVxICc6OjEnKTsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0taXB2NicpIHsKKyAgICAgICAgJGlwdm51bSA9IDY7CisgICAgICAgICRsaXN0ZW5hZGRyID0gJzo6MScgaWYoJGxpc3RlbmFkZHIgZXEgJzEyNy4wLjAuMScpOworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1wb3J0JykgeworICAgICAgICBpZigkQVJHVlsxXSAmJiAoJEFSR1ZbMV0gPX4gL14oXGQrKSQvKSkgeworICAgICAgICAgICAgJHBvcnQgPSAkMSBpZigkMSA+IDEwMjQpOworICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tYWRkcicpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgIG15ICR0bXBzdHIgPSAkQVJHVlsxXTsKKyAgICAgICAgICAgIGlmKCR0bXBzdHIgPX4gL14oXGRcZD9cZD8pXC4oXGRcZD9cZD8pXC4oXGRcZD9cZD8pXC4oXGRcZD9cZD8pJC8pIHsKKyAgICAgICAgICAgICAgICAkbGlzdGVuYWRkciA9ICIkMS4kMi4kMy4kNCIgaWYoJGlwdm51bSA9PSA0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2lmKCRpcHZudW0gPT0gNikgeworICAgICAgICAgICAgICAgICRsaXN0ZW5hZGRyID0gJHRtcHN0cjsKKyAgICAgICAgICAgICAgICAkbGlzdGVuYWRkciA9fiBzL15cWyguKilcXSQvJDEvOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHByaW50IFNUREVSUiAiXG5XYXJuaW5nOiBmdHBzZXJ2ZXIucGwgdW5rbm93biBwYXJhbWV0ZXI6ICRBUkdWWzBdXG4iOworICAgIH0KKyAgICBzaGlmdCBAQVJHVjsKK30KKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBJbml0aWFsaXplIGNvbW1hbmQgbGluZSBvcHRpb24gZGVwZW5kYW50IHZhcmlhYmxlcworIworCitpZighJHNyY2RpcikgeworICAgICRzcmNkaXIgPSAkRU5WeydzcmNkaXInfSB8fCAnLic7Cit9CitpZighJHBpZGZpbGUpIHsKKyAgICAkcGlkZmlsZSA9ICIkcGF0aC8iLiBzZXJ2ZXJfcGlkZmlsZW5hbWUoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworfQoraWYoISRsb2dmaWxlKSB7CisgICAgJGxvZ2ZpbGUgPSBzZXJ2ZXJfbG9nZmlsZW5hbWUoJGxvZ2RpciwgJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworfQorCiskbWFpbnNvY2tmX3BpZGZpbGUgPSAiJHBhdGgvIi4KKyAgICBtYWluc29ja2ZfcGlkZmlsZW5hbWUoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworJG1haW5zb2NrZl9sb2dmaWxlID0KKyAgICBtYWluc29ja2ZfbG9nZmlsZW5hbWUoJGxvZ2RpciwgJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworCitpZigkcHJvdG8gZXEgJ2Z0cCcpIHsKKyAgICAkZGF0YXNvY2tmX3BpZGZpbGUgPSAiJHBhdGgvIi4KKyAgICAgICAgZGF0YXNvY2tmX3BpZGZpbGVuYW1lKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKyAgICAkZGF0YXNvY2tmX2xvZ2ZpbGUgPQorICAgICAgICBkYXRhc29ja2ZfbG9nZmlsZW5hbWUoJGxvZ2RpciwgJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworfQorCiskc3J2cm5hbWUgPSBzZXJ2ZXJuYW1lX3N0cigkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisKKyRpZHN0ciA9ICIkaWRudW0iIGlmKCRpZG51bSA+IDEpOworCitwcm90b2NvbHNldHVwKCRwcm90byk7CisKKyRTSUd7SU5UfSA9IFwmZXhpdF9zaWduYWxfaGFuZGxlcjsKKyRTSUd7VEVSTX0gPSBcJmV4aXRfc2lnbmFsX2hhbmRsZXI7CisKK3N0YXJ0c2YoKTsKKworbG9nbXNnIHNwcmludGYoIiVzIHNlcnZlciBsaXN0ZW5zIG9uIHBvcnQgSVB2JHtpcHZudW19LyR7cG9ydH1cbiIsIHVjKCRwcm90bykpOworCitvcGVuKFBJRCwgIj4kcGlkZmlsZSIpOworcHJpbnQgUElEICQkLiJcbiI7CitjbG9zZShQSUQpOworCitsb2dtc2coImxvZ2dlZCBwaWQgJCQgaW4gJHBpZGZpbGVcbiIpOworCisKK3doaWxlKDEpIHsKKworICAgICMga2lsbCBwcmV2aW91cyBkYXRhIGNvbm5lY3Rpb24gc29ja2ZpbHQgd2hlbiBhbGl2ZQorICAgIGlmKCRkYXRhc29ja2ZfcnVucyBlcSAneWVzJykgeworICAgICAgICBraWxsc29ja2ZpbHRlcnMoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICR2ZXJib3NlLCAnZGF0YScpOworICAgICAgICBsb2dtc2cgIkRBVEEgc29ja2ZpbHQgZm9yICRkYXRhc29ja2ZfbW9kZSBkYXRhIGNoYW5uZWwga2lsbGVkIG5vd1xuIjsKKyAgICB9CisgICAgZGF0YXNvY2tmX3N0YXRlKCdTVE9QUEVEJyk7CisKKyAgICAjCisgICAgIyBXZSByZWFkICdzb2NrZmlsdCcgY29tbWFuZHMuCisgICAgIworICAgIG15ICRpbnB1dDsKKworICAgIGxvZ21zZyAiQXdhaXRpbmcgaW5wdXRcbiI7CisgICAgc3lzcmVhZF9vcl9kaWUoXCpTRlJFQUQsIFwkaW5wdXQsIDUpOworCisgICAgaWYoJGlucHV0ICF+IC9eQ05DVC8pIHsKKyAgICAgICAgIyB3ZSB3YWl0IGZvciBhIGNvbm5lY3RlZCBjbGllbnQKKyAgICAgICAgbG9nbXNnICJNQUlOIHNvY2tmaWx0IHNhaWQ6ICRpbnB1dCI7CisgICAgICAgIG5leHQ7CisgICAgfQorICAgIGxvZ21zZyAiPT09PT4gQ2xpZW50IGNvbm5lY3RcbiI7CisKKyAgICBzZXRfYWR2aXNvcl9yZWFkX2xvY2soJFNFUlZFUkxPR1NfTE9DSyk7CisgICAgJHNlcnZlcmxvZ3Nsb2NrZWQgPSAxOworCisgICAgIyBmbHVzaCBkYXRhOgorICAgICR8ID0gMTsKKworICAgICZjdXN0b21pemUoKTsgIyByZWFkIHRlc3QgY29udHJvbCBpbnN0cnVjdGlvbnMKKworICAgIHNlbmRjb250cm9sIEB3ZWxjb21lOworCisgICAgI3JlbW92ZSBnbG9iYWwgdmFyaWFibGVzIGZyb20gbGFzdCBjb25uZWN0aW9uCisgICAgaWYoJGZ0cGxpc3RwYXJzZXJzdGF0ZSkgeworICAgICAgdW5kZWYgJGZ0cGxpc3RwYXJzZXJzdGF0ZTsKKyAgICB9CisgICAgaWYoJGZ0cHRhcmdldGRpcikgeworICAgICAgdW5kZWYgJGZ0cHRhcmdldGRpcjsKKyAgICB9CisKKyAgICBpZigkdmVyYm9zZSkgeworICAgICAgICBmb3IoQHdlbGNvbWUpIHsKKyAgICAgICAgICAgIHByaW50IFNUREVSUiAiT1VUOiAkXyI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBteSAkZnVsbCA9ICIiOworCisgICAgd2hpbGUoMSkgeworICAgICAgICBteSAkaTsKKworICAgICAgICAjIE5vdyB3ZSBleHBlY3QgdG8gcmVhZCBEQVRBXG5baGV4IHNpemVdXG5bcHJvdF0sIHdoZXJlIHRoZSBbcHJvdF0KKyAgICAgICAgIyBwYXJ0IG9ubHkgaXMgRlRQIGxpbmdvLgorCisgICAgICAgICMgQ09NTUFORAorICAgICAgICBzeXNyZWFkX29yX2RpZShcKlNGUkVBRCwgXCRpLCA1KTsKKworICAgICAgICBpZigkaSAhfiAvXkRBVEEvKSB7CisgICAgICAgICAgICBsb2dtc2cgIk1BSU4gc29ja2ZpbHQgc2FpZCAkaSI7CisgICAgICAgICAgICBpZigkaSA9fiAvXkRJU0MvKSB7CisgICAgICAgICAgICAgICAgIyBkaXNjb25uZWN0CisgICAgICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICAjIFNJWkUgb2YgZGF0YQorICAgICAgICBzeXNyZWFkX29yX2RpZShcKlNGUkVBRCwgXCRpLCA1KTsKKworICAgICAgICBteSAkc2l6ZSA9IDA7CisgICAgICAgIGlmKCRpID1+IC9eKFswLTlhLWZBLUZdezR9KVxuLykgeworICAgICAgICAgICAgJHNpemUgPSBoZXgoJDEpOworICAgICAgICB9CisKKyAgICAgICAgIyBkYXRhCisgICAgICAgIHJlYWRfbWFpbnNvY2tmKFwkaW5wdXQsICRzaXplKTsKKworICAgICAgICBmdHBtc2cgJGlucHV0OworCisgICAgICAgICRmdWxsIC49ICRpbnB1dDsKKworICAgICAgICAjIExvb3AgdW50aWwgY29tbWFuZCBjb21wbGV0aW9uCisgICAgICAgIG5leHQgdW5sZXNzKCRmdWxsID1+IC9cclxuJC8pOworCisgICAgICAgICMgUmVtb3ZlIHRyYWlsaW5nIENSTEYuCisgICAgICAgICRmdWxsID1+IHMvW1xuXHJdKyQvLzsKKworICAgICAgICBteSAkRlRQQ01EOworICAgICAgICBteSAkRlRQQVJHOworICAgICAgICBpZigkcHJvdG8gZXEgImltYXAiKSB7CisgICAgICAgICAgICAjIElNQVAgaXMgZGlmZmVyZW50IHdpdGggaXRzIGlkZW50aWZpZXIgZmlyc3Qgb24gdGhlIGNvbW1hbmQgbGluZQorICAgICAgICAgICAgdW5sZXNzKCgkZnVsbCA9fiAvXihbXiBdKykgKFteIF0rKSAoLiopLykgfHwKKyAgICAgICAgICAgICAgICAgICAoJGZ1bGwgPX4gL14oW14gXSspIChbXiBdKykvKSkgeworICAgICAgICAgICAgICAgIHNlbmRjb250cm9sICIkMSAnJGZ1bGwnOiBjb21tYW5kIG5vdCB1bmRlcnN0b29kLlxyXG4iOworICAgICAgICAgICAgICAgIGxhc3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkY21kaWQ9JDE7ICMgc2V0IHRoZSBnbG9iYWwgdmFyaWFibGUKKyAgICAgICAgICAgICRGVFBDTUQ9JDI7CisgICAgICAgICAgICAkRlRQQVJHPSQzOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRmdWxsID1+IC9eKFtBLVpdezMsNH0pKFxzKC4qKSk/JC9pKSB7CisgICAgICAgICAgICAkRlRQQ01EPSQxOworICAgICAgICAgICAgJEZUUEFSRz0kMzsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigoJHByb3RvIGVxICJzbXRwIikgJiYgKCRmdWxsID1+IC9eW0EtWjAtOStcL117MCw1MTJ9PXswLDJ9JC9pKSkgeworICAgICAgICAgICAgIyBTTVRQIGxvbmcgImNvbW1hbmRzIiBhcmUgYmFzZTY0IGF1dGhlbnRpY2F0aW9uIGRhdGEuCisgICAgICAgICAgICAkRlRQQ01EPSRmdWxsOworICAgICAgICAgICAgJEZUUEFSRz0iIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNlbmRjb250cm9sICI1MDAgJyRmdWxsJzogY29tbWFuZCBub3QgdW5kZXJzdG9vZC5cclxuIjsKKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKworICAgICAgICBsb2dtc2cgIjwgXCIkZnVsbFwiXG4iOworCisgICAgICAgIGlmKCR2ZXJib3NlKSB7CisgICAgICAgICAgICBwcmludCBTVERFUlIgIklOOiAkZnVsbFxuIjsKKyAgICAgICAgfQorCisgICAgICAgICRmdWxsID0gIiI7CisKKyAgICAgICAgbXkgJGRlbGF5ID0gJGRlbGF5cmVwbHl7JEZUUENNRH07CisgICAgICAgIGlmKCRkZWxheSkgeworICAgICAgICAgICAgIyBqdXN0IGdvIHNsZWVwIHRoaXMgbWFueSBzZWNvbmRzIQorICAgICAgICAgICAgbG9nbXNnKCJTbGVlcCBmb3IgJGRlbGF5IHNlY29uZHNcbiIpOworICAgICAgICAgICAgbXkgJHR3ZW50aWV0aHMgPSAkZGVsYXkgKiAyMDsKKyAgICAgICAgICAgIHdoaWxlKCR0d2VudGlldGhzLS0pIHsKKyAgICAgICAgICAgICAgICBzZWxlY3QodW5kZWYsIHVuZGVmLCB1bmRlZiwgMC4wNSkgdW5sZXNzKCRnb3RfZXhpdF9zaWduYWwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbXkgJHRleHQ7CisgICAgICAgICR0ZXh0ID0gJGN1c3RvbXJlcGx5eyRGVFBDTUR9OworICAgICAgICBteSAkZmFrZSA9ICR0ZXh0OworCisgICAgICAgIGlmKCR0ZXh0ICYmICgkdGV4dCBuZSAiIikpIHsKKyAgICAgICAgICAgIGlmKCRjdXN0b21jb3VudHskRlRQQ01EfSAmJiAoIS0tJGN1c3RvbWNvdW50eyRGVFBDTUR9KSkgeworICAgICAgICAgICAgICAgICMgdXNlZCBlbm91Z2ggbnVtYmVyIG9mIHRpbWVzLCBub3cgYmxhbmsgdGhlIGN1c3RvbXJlcGx5CisgICAgICAgICAgICAgICAgJGN1c3RvbXJlcGx5eyRGVFBDTUR9PSIiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJHRleHQgPSAkZGlzcGxheXRleHR7JEZUUENNRH07CisgICAgICAgIH0KKyAgICAgICAgbXkgJGNoZWNrOworICAgICAgICBpZigkdGV4dCAmJiAoJHRleHQgbmUgIiIpKSB7CisgICAgICAgICAgICBpZigkY21kaWQgJiYgKCRjbWRpZCBuZSAiIikpIHsKKyAgICAgICAgICAgICAgICBzZW5kY29udHJvbCAiJGNtZGlkJHRleHRcclxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNlbmRjb250cm9sICIkdGV4dFxyXG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJGNoZWNrPTE7ICMgbm8gcmVzcG9uc2UgeWV0CisgICAgICAgIH0KKworICAgICAgICB1bmxlc3MoJGZha2UgJiYgKCRmYWtlIG5lICIiKSkgeworICAgICAgICAgICAgIyBvbmx5IHBlcmZvcm0gdGhpcyBpZiB3ZSdyZSBub3QgZmFraW5nIGEgcmVwbHkKKyAgICAgICAgICAgIG15ICRmdW5jID0gJGNvbW1hbmRmdW5jeyRGVFBDTUR9OworICAgICAgICAgICAgaWYoJGZ1bmMpIHsKKyAgICAgICAgICAgICAgICAmJGZ1bmMoJEZUUEFSRywgJEZUUENNRCk7CisgICAgICAgICAgICAgICAgJGNoZWNrPTA7ICMgdGFrZW4gY2FyZSBvZgorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoJGNoZWNrKSB7CisgICAgICAgICAgICBsb2dtc2cgIiRGVFBDTUQgd2Fzbid0IGhhbmRsZWQhXG4iOworICAgICAgICAgICAgc2VuZGNvbnRyb2wgIjUwMCAkRlRQQ01EIGlzIG5vdCBkZWFsdCB3aXRoIVxyXG4iOworICAgICAgICB9CisKKyAgICB9ICMgd2hpbGUoMSkKKyAgICBsb2dtc2cgIj09PT0+IENsaWVudCBkaXNjb25uZWN0ZWRcbiI7CisKKyAgICBpZigkc2VydmVybG9nc2xvY2tlZCkgeworICAgICAgICAkc2VydmVybG9nc2xvY2tlZCA9IDA7CisgICAgICAgIGNsZWFyX2Fkdmlzb3JfcmVhZF9sb2NrKCRTRVJWRVJMT0dTX0xPQ0spOworICAgIH0KK30KKwora2lsbHNvY2tmaWx0ZXJzKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkdmVyYm9zZSk7Cit1bmxpbmsoJHBpZGZpbGUpOworaWYoJHNlcnZlcmxvZ3Nsb2NrZWQpIHsKKyAgICAkc2VydmVybG9nc2xvY2tlZCA9IDA7CisgICAgY2xlYXJfYWR2aXNvcl9yZWFkX2xvY2soJFNFUlZFUkxPR1NfTE9DSyk7Cit9CisKK2V4aXQ7CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9nZXRwYXJ0LnBtIGIvY3VybC03LjI1LjAvdGVzdHMvZ2V0cGFydC5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWVlZGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvZ2V0cGFydC5wbQpAQCAtMCwwICsxLDI1NCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyN1c2Ugc3RyaWN0OworCitteSBAeG1sOworCitteSAkd2FybmluZz0wOworbXkgJHRyYWNlPTA7CisKK3N1YiBkZWNvZGVfYmFzZTY0IHsKKyAgdHI6QS1aYS16MC05Ky86OmNkOyAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSBub24tYmFzZTY0IGNoYXJzCisgIHRyOkEtWmEtejAtOSsvOiAtXzo7ICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IHRvIHV1ZW5jb2RlZCBmb3JtYXQKKyAgbXkgJGxlbiA9IHBhY2soImMiLCAzMiArIDAuNzUqbGVuZ3RoKTsgICAjIGNvbXB1dGUgbGVuZ3RoIGJ5dGUKKyAgcmV0dXJuIHVucGFjaygidSIsICRsZW4gLiAkXyk7ICAgICAgICAgIyB1dWRlY29kZSBhbmQgcHJpbnQKK30KKworc3ViIGdldHBhcnRhdHRyIHsKKyAgICAjIGlmICRwYXJ0IGlzIHVuZGVmaW5lZCAoaWUgb25seSBvbmUgYXJndW1lbnQpIHRoZW4KKyAgICAjIHJldHVybiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgc2VjdGlvbgorCisgICAgbXkgKCRzZWN0aW9uLCAkcGFydCk9QF87CisKKyAgICBteSAlaGFzaDsKKyAgICBteSAkaW5zaWRlPTA7CisKKyAjICAgcHJpbnQgIlNlY3Rpb246ICRzZWN0aW9uLCBwYXJ0OiAkcGFydFxuIjsKKworICAgIGZvcihAeG1sKSB7CisgIyAgICAgICBwcmludCAiJGluc2lkZTogJF8iOworICAgICAgICBpZighJGluc2lkZSAmJiAoJF8gPX4gL14gKlw8JHNlY3Rpb24vKSkgeworICAgICAgICAgICAgJGluc2lkZSsrOworICAgICAgICB9CisgICAgICAgIGlmKCgxID09JGluc2lkZSkgJiYgKCAoJF8gPX4gL14gKlw8JHBhcnQoW14+XSopLykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoZGVmaW5lZCgkcGFydCkpICkKKyAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICRpbnNpZGUrKzsKKyAgICAgICAgICAgIG15ICRhdHRyPSQxOworCisgICAgICAgICAgICB3aGlsZSgkYXR0ciA9fiBzLyAqKFtePV0qKT0gKihcIihbXlwiXSopXCJ8KFteXCI+IF0qKSkvLykgeworICAgICAgICAgICAgICAgIG15ICgkdmFyLCAkY29udCk9KCQxLCAkMik7CisgICAgICAgICAgICAgICAgJGNvbnQgPX4gcy9eXCIoLiopXCIkLyQxLzsKKyAgICAgICAgICAgICAgICAkaGFzaHskdmFyfT0kY29udDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICAgICAgIyBkZXRlY3QgZW5kIG9mIHNlY3Rpb24gd2hlbiBwYXJ0IHdhc24ndCBmb3VuZAorICAgICAgICBlbHNpZigoMSA9PSRpbnNpZGUpICYmICgkXyA9fiAvXiAqXDxcLyRzZWN0aW9uXD4vKSkgeworICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigoMiA9PSRpbnNpZGUpICYmICgkXyA9fiAvXiAqXDxcLyRwYXJ0LykpIHsKKyAgICAgICAgICAgICRpbnNpZGUtLTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gJWhhc2g7Cit9CisKK3N1YiBnZXRwYXJ0IHsKKyAgICBteSAoJHNlY3Rpb24sICRwYXJ0KT1AXzsKKworICAgIG15IEB0aGlzOworICAgIG15ICRpbnNpZGU9MDsKKyAgICBteSAkYmFzZTY0PTA7CisKKyAjICAgcHJpbnQgIlNlY3Rpb246ICRzZWN0aW9uLCBwYXJ0OiAkcGFydFxuIjsKKworICAgIGZvcihAeG1sKSB7CisgIyAgICAgICBwcmludCAiJGluc2lkZTogJF8iOworICAgICAgICBpZighJGluc2lkZSAmJiAoJF8gPX4gL14gKlw8JHNlY3Rpb24vKSkgeworICAgICAgICAgICAgJGluc2lkZSsrOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCgxID09JGluc2lkZSkgJiYgKCRfID1+IC9eICpcPCRwYXJ0WyBcPl0vKSkgeworICAgICAgICAgICAgaWYoJF8gPX4gLyRwYXJ0IFtePl0qYmFzZTY0PS8pIHsKKyAgICAgICAgICAgICAgICAjIGF0dGVtcHQgdG8gZGV0ZWN0IGJhc2U2NCBlbmNvZGVkIHBhcnRzCisgICAgICAgICAgICAgICAgJGJhc2U2ND0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJGluc2lkZSsrOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCgyID09JGluc2lkZSkgJiYgKCRfID1+IC9eICpcPFwvJHBhcnQvKSkgeworICAgICAgICAgICAgJGluc2lkZS0tOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCgxPT0kaW5zaWRlKSAmJiAoJF8gPX4gL14gKlw8XC8kc2VjdGlvbi8pKSB7CisgICAgICAgICAgICBpZigkdHJhY2UpIHsKKyAgICAgICAgICAgICAgICBwcmludCBTVERFUlIgIioqKiBnZXRwYXJ0LnBtOiAkc2VjdGlvbi8kcGFydCByZXR1cm5lZCBkYXRhIVxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCFAdGhpcyAmJiAkd2FybmluZykgeworICAgICAgICAgICAgICAgIHByaW50IFNUREVSUiAiKioqIGdldHBhcnQucG06ICRzZWN0aW9uLyRwYXJ0IHJldHVybmVkIGVtcHR5IVxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCRiYXNlNjQpIHsKKyAgICAgICAgICAgICAgICAjIGRlY29kZSB0aGUgd2hvbGUgYXJyYXkgYmVmb3JlIHJldHVybmluZyBpdCEKKyAgICAgICAgICAgICAgICBmb3IoQHRoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGRlY29kZWQgPSBkZWNvZGVfYmFzZTY0KCRfKTsKKyAgICAgICAgICAgICAgICAgICAgJF8gPSAkZGVjb2RlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoMj09JGluc2lkZSkgeworICAgICAgICAgICAgcHVzaCBAdGhpcywgJF87CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoJHdhcm5pbmcpIHsKKyAgICAgICAgcHJpbnQgU1RERVJSICIqKiogZ2V0cGFydC5wbTogJHNlY3Rpb24vJHBhcnQgcmV0dXJuZWQgZW1wdHkhXG4iOworICAgIH0KKyAgICByZXR1cm4gQHRoaXM7ICNlbXB0eSEKK30KKworIyBSZXR1cm4gZW50aXJlIGRvY3VtZW50IGFzIGxpc3Qgb2YgbGluZXMKK3N1YiBnZXRhbGwgeworICAgIHJldHVybiBAeG1sOworfQorCitzdWIgbG9hZHRlc3QgeworICAgIG15ICgkZmlsZSk9QF87CisKKyAgICB1bmRlZiBAeG1sOworCisgICAgaWYob3BlbihYTUwsICI8JGZpbGUiKSkgeworICAgICAgICBiaW5tb2RlIFhNTDsgIyBmb3IgY3JhcGFnZSBzeXN0ZW1zLCB1c2UgYmluYXJ5CisgICAgICAgIHdoaWxlKDxYTUw+KSB7CisgICAgICAgICAgICBwdXNoIEB4bWwsICRfOworICAgICAgICB9CisgICAgICAgIGNsb3NlKFhNTCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAjIGZhaWx1cmUKKyAgICAgICAgaWYoJHdhcm5pbmcpIHsKKyAgICAgICAgICAgIHByaW50IFNUREVSUiAiZmlsZSAkZmlsZSB3b3VsZG4ndCBvcGVuIVxuIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyMKKyMgU3RyaXAgb2ZmIGFsbCBsaW5lcyB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0dGVybiBhbmQgcmV0dXJuCisjIHRoZSBuZXcgYXJyYXkuCisjCisKK3N1YiBzdHJpcGFycmF5IHsKKyAgICBteSAoJHBhdHRlcm4sICRhcnJheXJlZikgPSBAXzsKKworICAgIG15IEBhcnJheTsKKworICAgIGZvcihAJGFycmF5cmVmKSB7CisgICAgICAgIGlmKCRfICF+IC8kcGF0dGVybi8pIHsKKyAgICAgICAgICAgIHB1c2ggQGFycmF5LCAkXzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gQGFycmF5OworfQorCisjCisjIHBhc3MgYXJyYXkgKlJFRkVSRU5DRVMqICEKKyMKK3N1YiBjb21wYXJlcGFydHMgeworIG15ICgkZmlyc3RyZWYsICRzZWNvbmRyZWYpPUBfOworCisgbXkgJGZpcnN0ID0gam9pbigiIiwgQCRmaXJzdHJlZik7CisgbXkgJHNlY29uZCA9IGpvaW4oIiIsIEAkc2Vjb25kcmVmKTsKKworICMgd2UgY2Fubm90IGNvbXBhcmUgYXJyYXlzIGluZGV4IHBlciBpbmRleCBzaW5jZSB3aXRoIHRoZSBiYXNlNjQgY2h1bmtzLAorICMgdGhleSBtYXkgbm90IGJlICJldmVubHkiIGRpc3RyaWJ1dGVkCisKKyAjIE5PVEU6IHRoaXMgbm8gbG9uZ2VyIHN0cmlwcyBvZmYgY2FycmlhZ2UgcmV0dXJucyBmcm9tIHRoZSBhcnJheXMuIElzIHRoYXQKKyAjIHJlYWxseSBuZWNlc3Nhcnk/IEl0IHJ1aW5zIHRoZSB0ZXN0aW5nIG9mIG5ld2xpbmVzLiBJIGJlbGlldmUgaXQgd2FzIG9uY2UKKyAjIGFkZGVkIHRvIGVuYWJsZSB0ZXN0cyBvbiB3aW4zMi4KKworIGlmKCRmaXJzdCBuZSAkc2Vjb25kKSB7CisgICAgIHJldHVybiAxOworIH0KKworIHJldHVybiAwOworfQorCisjCisjIFdyaXRlIGEgZ2l2ZW4gYXJyYXkgdG8gdGhlIHNwZWNpZmllZCBmaWxlCisjCitzdWIgd3JpdGVhcnJheSB7CisgICAgbXkgKCRmaWxlbmFtZSwgJGFycmF5cmVmKT1AXzsKKworICAgIG9wZW4oVEVNUCwgIj4kZmlsZW5hbWUiKTsKKyAgICBiaW5tb2RlKFRFTVAsIjpyYXciKTsgIyBjeWd3aW4gZml4IGJ5IEtldmluIFJvdGgKKyAgICBmb3IoQCRhcnJheXJlZikgeworICAgICAgICBwcmludCBURU1QICRfOworICAgIH0KKyAgICBjbG9zZShURU1QKTsKK30KKworIworIyBMb2FkIGEgc3BlY2lmaWVkIGZpbGUgYW4gcmV0dXJuIGl0IGFzIGFuIGFycmF5CisjCitzdWIgbG9hZGFycmF5IHsKKyAgICBteSAoJGZpbGVuYW1lKT1AXzsKKyAgICBteSBAYXJyYXk7CisKKyAgICBvcGVuKFRFTVAsICI8JGZpbGVuYW1lIik7CisgICAgd2hpbGUoPFRFTVA+KSB7CisgICAgICAgIHB1c2ggQGFycmF5LCAkXzsKKyAgICB9CisgICAgY2xvc2UoVEVNUCk7CisgICAgcmV0dXJuIEBhcnJheTsKK30KKworIyBHaXZlbiB0d28gYXJyYXkgcmVmZXJlbmNlcywgdGhpcyBmdW5jdGlvbiB3aWxsIHN0b3JlIHRoZW0gaW4gdHdvIHRlbXBvcmFyeQorIyBmaWxlcywgcnVuICdkaWZmJyBvbiB0aGVtLCBzdG9yZSB0aGUgcmVzdWx0IGFuZCByZXR1cm4gdGhlIGRpZmYgb3V0cHV0IQorCitzdWIgc2hvd2RpZmYgeworICAgIG15ICgkbG9nZGlyLCAkZmlyc3RyZWYsICRzZWNvbmRyZWYpPUBfOworCisgICAgbXkgJGZpbGUxPSIkbG9nZGlyL2NoZWNrLWdlbmVyYXRlZCI7CisgICAgbXkgJGZpbGUyPSIkbG9nZGlyL2NoZWNrLWV4cGVjdGVkIjsKKworICAgIG9wZW4oVEVNUCwgIj4kZmlsZTEiKTsKKyAgICBmb3IoQCRmaXJzdHJlZikgeworICAgICAgICBwcmludCBURU1QICRfOworICAgIH0KKyAgICBjbG9zZShURU1QKTsKKworICAgIG9wZW4oVEVNUCwgIj4kZmlsZTIiKTsKKyAgICBmb3IoQCRzZWNvbmRyZWYpIHsKKyAgICAgICAgcHJpbnQgVEVNUCAkXzsKKyAgICB9CisgICAgY2xvc2UoVEVNUCk7CisgICAgbXkgQG91dCA9IGBkaWZmIC11ICRmaWxlMiAkZmlsZTEgMj4vZGV2L251bGxgOworCisgICAgaWYoISRvdXRbMF0pIHsKKyAgICAgICAgQG91dCA9IGBkaWZmIC1jICRmaWxlMiAkZmlsZTEgMj4vZGV2L251bGxgOworICAgIH0KKworICAgIHJldHVybiBAb3V0OworfQorCisKKzE7CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9odHRwc2VydmVyLnBsIGIvY3VybC03LjI1LjAvdGVzdHMvaHR0cHNlcnZlci5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NmUyNzMxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvaHR0cHNlcnZlci5wbApAQCAtMCwwICsxLDEzMCBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitCRUdJTiB7CisgICAgQElOQz0oQElOQywgJEVOVnsnc3JjZGlyJ30sICcuJyk7Cit9CisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBzZXJ2ZXJoZWxwIHF3KAorICAgIHNlcnZlcl9waWRmaWxlbmFtZQorICAgIHNlcnZlcl9sb2dmaWxlbmFtZQorICAgICk7CisKK215ICR2ZXJib3NlID0gMDsgICAgICMgc2V0IHRvIDEgZm9yIGRlYnVnZ2luZworbXkgJHBvcnQgPSA4OTkwOyAgICAgIyBqdXN0IGEgZGVmYXVsdAorbXkgJGlwdm51bSA9IDQ7ICAgICAgIyBkZWZhdWx0IElQIHZlcnNpb24gb2YgaHR0cCBzZXJ2ZXIKK215ICRpZG51bSA9IDE7ICAgICAgICMgZGFmYXVsdCBodHRwIHNlcnZlciBpbnN0YW5jZSBudW1iZXIKK215ICRwcm90byA9ICdodHRwJzsgICMgcHJvdG9jb2wgdGhlIGh0dHAgc2VydmVyIHNwZWFrcworbXkgJHBpZGZpbGU7ICAgICAgICAgIyBodHRwIHNlcnZlciBwaWQgZmlsZQorbXkgJGxvZ2ZpbGU7ICAgICAgICAgIyBodHRwIHNlcnZlciBsb2cgZmlsZQorbXkgJGNvbm5lY3Q7ICAgICAgICAgIyBJUCB0byBjb25uZWN0IHRvIG9uIENPTk5FQ1QKK215ICRzcmNkaXI7CitteSAkZm9yazsKK215ICRnb3BoZXIgPSAwOworCitteSAkZmxhZ3MgID0gIiI7CitteSAkcGF0aCAgID0gJy4nOworbXkgJGxvZ2RpciA9ICRwYXRoIC4nL2xvZyc7CisKK3doaWxlKEBBUkdWKSB7CisgICAgaWYoJEFSR1ZbMF0gZXEgJy0tcGlkZmlsZScpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgICRwaWRmaWxlID0gJEFSR1ZbMV07CisgICAgICAgICAgICBzaGlmdCBAQVJHVjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1sb2dmaWxlJykgeworICAgICAgICBpZigkQVJHVlsxXSkgeworICAgICAgICAgICAgJGxvZ2ZpbGUgPSAkQVJHVlsxXTsKKyAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLXNyY2RpcicpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgICRzcmNkaXIgPSAkQVJHVlsxXTsKKyAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLWlwdjQnKSB7CisgICAgICAgICRpcHZudW0gPSA0OworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1pcHY2JykgeworICAgICAgICAkaXB2bnVtID0gNjsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tZ29waGVyJykgeworICAgICAgICAkZ29waGVyID0gMTsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tcG9ydCcpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0gPX4gL14oXGQrKSQvKSB7CisgICAgICAgICAgICAkcG9ydCA9ICQxOworICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tY29ubmVjdCcpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgICRjb25uZWN0ID0gJEFSR1ZbMV07CisgICAgICAgICAgICBzaGlmdCBAQVJHVjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1pZCcpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0gPX4gL14oXGQrKSQvKSB7CisgICAgICAgICAgICAkaWRudW0gPSAkMSBpZigkMSA+IDApOworICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tdmVyYm9zZScpIHsKKyAgICAgICAgJHZlcmJvc2UgPSAxOworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1mb3JrJykgeworICAgICAgICAkZm9yayA9ICRBUkdWWzBdOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgU1RERVJSICJcbldhcm5pbmc6IGh0dHBzZXJ2ZXIucGwgdW5rbm93biBwYXJhbWV0ZXI6ICRBUkdWWzBdXG4iOworICAgIH0KKyAgICBzaGlmdCBAQVJHVjsKK30KKworaWYoISRzcmNkaXIpIHsKKyAgICAkc3JjZGlyID0gJEVOVnsnc3JjZGlyJ30gfHwgJy4nOworfQoraWYoISRwaWRmaWxlKSB7CisgICAgJHBpZGZpbGUgPSAiJHBhdGgvIi4gc2VydmVyX3BpZGZpbGVuYW1lKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKK30KK2lmKCEkbG9nZmlsZSkgeworICAgICRsb2dmaWxlID0gc2VydmVyX2xvZ2ZpbGVuYW1lKCRsb2dkaXIsICRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKK30KKworJGZsYWdzIC49ICItLXBpZGZpbGUgXCIkcGlkZmlsZVwiIC0tbG9nZmlsZSBcIiRsb2dmaWxlXCIgIjsKKyRmbGFncyAuPSAiLS1nb3BoZXIgIiBpZigkZ29waGVyKTsKKyRmbGFncyAuPSAiLS1mb3JrICIgaWYoZGVmaW5lZCgkZm9yaykpOworJGZsYWdzIC49ICItLWNvbm5lY3QgJGNvbm5lY3QgIiBpZigkY29ubmVjdCk7CiskZmxhZ3MgLj0gIi0taXB2JGlwdm51bSAtLXBvcnQgJHBvcnQgLS1zcmNkaXIgXCIkc3JjZGlyXCIiOworCitpZigkdmVyYm9zZSkgeworICAgIHByaW50IFNUREVSUiAiUlVOOiBzZXJ2ZXIvc3dzICRmbGFnc1xuIjsKK30KKworZXhlYygic2VydmVyL3N3cyAkZmxhZ3MiKTsKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvTWFrZWZpbGUuYW0gYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMGQ1OTUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsODMgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm9zdGRpbmMKKworIyBTcGVjaWZ5IG91ciBpbmNsdWRlIHBhdGhzIGhlcmUsIGFuZCBkbyBpdCByZWxhdGl2ZSB0byAkKHRvcF9zcmNkaXIpIGFuZAorIyAkKHRvcF9idWlsZGRpciksIHRvIGVuc3VyZSB0aGF0IHRoZXNlIHBhdGhzIHdoaWNoIGJlbG9uZyB0byB0aGUgbGlicmFyeQorIyBiZWluZyBjdXJyZW50bHkgYnVpbHQgYW5kIHRlc3RlZCBhcmUgc2VhcmNoZWQgYmVmb3JlIHRoZSBsaWJyYXJ5IHdoaWNoCisjIG1pZ2h0IHBvc3NpYmx5IGFscmVhZHkgYmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0uCisjCisjICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwgZm9yIGdlbmVyYXRlZCBjdXJsYnVpbGQuaCBpbmNsdWRlZCBmcm9tIGN1cmwuaAorIyAkKHRvcF9idWlsZGRpcikvaW5jbHVkZSBmb3IgZ2VuZXJhdGVkIGN1cmxidWlsZC5oIGluY2x1ZGVkIGZyb20gbGliL3NldHVwLmgKKyMgJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIGlzIGZvciBsaWJjdXJsJ3MgZXh0ZXJuYWwgaW5jbHVkZSBmaWxlcworIyAkKHRvcF9idWlsZGRpcikvbGliIGlzIGZvciBsaWJjdXJsJ3MgZ2VuZXJhdGVkIGxpYi9jdXJsX2NvbmZpZy5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS9saWIgaXMgZm9yIGxpYmN1cmwncyBsaWIvc2V0dXAuaCBhbmQgb3RoZXIgImJvcnJvd2VkIiBmaWxlcworIyAkKHRvcF9idWlsZGRpcikvYXJlcyBpcyBmb3IgaW4tdHJlZSBjLWFyZXMncyBnZW5lcmF0ZWQgYXJlc19idWlsZC5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS9hcmVzIGlzIGZvciBpbi10cmVlIGMtYXJlcydzIGV4dGVybmFsIGluY2x1ZGUgZmlsZXMKKworaWYgVVNFX0VNQkVEREVEX0FSRVMKK0lOQ0xVREVTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvbGliICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2xpYiAgICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvYXJlcyAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2FyZXMKK2Vsc2UKK0lOQ0xVREVTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvbGliICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2xpYgorZW5kaWYKKworRVhUUkFfRElTVCA9IHRlc3Q3NS5wbCB0ZXN0MzA3LnBsIHRlc3Q2MTAucGwgdGVzdDYxMy5wbCB0ZXN0MTAxMy5wbAlcCit0ZXN0MTAyMi5wbCBNYWtlZmlsZS5pbmMKKworIyBEZXBlbmRlbmNpZXMgKG1heSBuZWVkIHRvIGJlIG92ZXJyaWRlbikKK0xEQUREID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhIEBDVVJMX0xJQlNACitERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKKworIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgdGhlIHNvdXJjZSBkZWZpbmVzIChURVNUVVRJTCwgU1VQUE9SVEZJTEVTLAorIyBub2luc3RfUFJPR1JBTVMsIGxpYipfU09VUkNFUywgYW5kIGxpYipfQ0ZMQUdTKQoraW5jbHVkZSBNYWtlZmlsZS5pbmMKKworIyBQcmVsb2FkaW5nIG9mIGxpYmhvc3RuYW1lIGFsbG93cyBob3N0IG5hbWUgb3ZlcnJpZGluZywKKyMgdGhpcyBpcyB1c2VkIHRvIG1ha2Ugc29tZSB0ZXN0cyBtYWNoaW5lIGluZGVwZW5kZW50LgorCitpZiBCVUlMRF9MSUJIT1NUTkFNRQorbm9pbnN0X0xUTElCUkFSSUVTID0gbGliaG9zdG5hbWUubGEKK2Vsc2UKK25vaW5zdF9MVExJQlJBUklFUyA9CitlbmRpZgorCitpZiBOT19VTkRFRklORUQKKyMgVGhlIC1uby11bmRlZmluZWQgZmxhZyBpcyBjcnVjaWFsIHRvIGJ1aWxkIGZpbmUgb24gc29tZSBwbGF0Zm9ybXMKK1VOREVGID0gLW5vLXVuZGVmaW5lZAorZW5kaWYKKworbGliaG9zdG5hbWVfbGFfU09VUkNFUyA9IHNldGhvc3RuYW1lLmMgc2V0aG9zdG5hbWUuaAorCitsaWJob3N0bmFtZV9sYV9MSUJBREQgPQorbGliaG9zdG5hbWVfbGFfREVQRU5ERU5DSUVTID0KK2xpYmhvc3RuYW1lX2xhX0xERkxBR1MgPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uICQoVU5ERUYpIC1ycGF0aCAvbm93aGVyZQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L01ha2VmaWxlLmluIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWUxMTE3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE5NDkgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3RvcF9idWlsZGRpciA9IC4uLy4uCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbmMKK25vaW5zdF9QUk9HUkFNUyA9IGNoa2hvc3RuYW1lJChFWEVFWFQpIGxpYjUwMCQoRVhFRVhUKSBsaWI1MDEkKEVYRUVYVCkgXAorCWxpYjUwMiQoRVhFRVhUKSBsaWI1MDMkKEVYRUVYVCkgbGliNTA0JChFWEVFWFQpIFwKKwlsaWI1MDUkKEVYRUVYVCkgbGliNTA2JChFWEVFWFQpIGxpYjUwNyQoRVhFRVhUKSBcCisJbGliNTA4JChFWEVFWFQpIGxpYjUxMCQoRVhFRVhUKSBsaWI1MTEkKEVYRUVYVCkgXAorCWxpYjUxMiQoRVhFRVhUKSBsaWI1MTMkKEVYRUVYVCkgbGliNTE0JChFWEVFWFQpIFwKKwlsaWI1MTUkKEVYRUVYVCkgbGliNTE2JChFWEVFWFQpIGxpYjUxNyQoRVhFRVhUKSBcCisJbGliNTE4JChFWEVFWFQpIGxpYjUxOSQoRVhFRVhUKSBsaWI1MjAkKEVYRUVYVCkgXAorCWxpYjUyMSQoRVhFRVhUKSBsaWI1MjMkKEVYRUVYVCkgbGliNTI0JChFWEVFWFQpIFwKKwlsaWI1MjUkKEVYRUVYVCkgbGliNTI2JChFWEVFWFQpIGxpYjUyNyQoRVhFRVhUKSBcCisJbGliNTc0JChFWEVFWFQpIGxpYjU3NSQoRVhFRVhUKSBsaWI1NzYkKEVYRUVYVCkgXAorCWxpYjU3OCQoRVhFRVhUKSBsaWI1NzkkKEVYRUVYVCkgbGliNTI5JChFWEVFWFQpIFwKKwlsaWI1MzAkKEVYRUVYVCkgbGliNTMyJChFWEVFWFQpIGxpYjUzMyQoRVhFRVhUKSBcCisJbGliNTM2JChFWEVFWFQpIGxpYjUzNyQoRVhFRVhUKSBsaWI1NDAkKEVYRUVYVCkgXAorCWxpYjU0MSQoRVhFRVhUKSBsaWI1NDIkKEVYRUVYVCkgbGliNTQzJChFWEVFWFQpIFwKKwlsaWI1NDQkKEVYRUVYVCkgbGliNTQ1JChFWEVFWFQpIGxpYjU0NyQoRVhFRVhUKSBcCisJbGliNTQ4JChFWEVFWFQpIGxpYjU0OSQoRVhFRVhUKSBsaWI1NTIkKEVYRUVYVCkgXAorCWxpYjU1MyQoRVhFRVhUKSBsaWI1NTQkKEVYRUVYVCkgbGliNTU1JChFWEVFWFQpIFwKKwlsaWI1NTYkKEVYRUVYVCkgbGliNTM5JChFWEVFWFQpIGxpYjU1NyQoRVhFRVhUKSBcCisJbGliNTYwJChFWEVFWFQpIGxpYjU2MiQoRVhFRVhUKSBsaWI1NjQkKEVYRUVYVCkgXAorCWxpYjU2NSQoRVhFRVhUKSBsaWI1NjYkKEVYRUVYVCkgbGliNTY3JChFWEVFWFQpIFwKKwlsaWI1NjgkKEVYRUVYVCkgbGliNTY5JChFWEVFWFQpIGxpYjU3MCQoRVhFRVhUKSBcCisJbGliNTcxJChFWEVFWFQpIGxpYjU3MiQoRVhFRVhUKSBsaWI1NzMkKEVYRUVYVCkgXAorCWxpYjU4MiQoRVhFRVhUKSBsaWI1ODMkKEVYRUVYVCkgbGliNTg1JChFWEVFWFQpIFwKKwlsaWI1ODYkKEVYRUVYVCkgbGliNTg3JChFWEVFWFQpIGxpYjU5MCQoRVhFRVhUKSBcCisJbGliNTkxJChFWEVFWFQpIGxpYjU5NyQoRVhFRVhUKSBsaWI1OTgkKEVYRUVYVCkKK3N1YmRpciA9IHRlc3RzL2xpYnRlc3QKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2N1cmwtY29tcGlsZXJzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtY29uZm9wdHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1mdW5jdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vcGVuc3NsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3ZlcnJpZGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1yZWVudHJhbnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1zeXN0ZW0ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQveGMtdHJhbnNsaXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQveno1MC14Yy1vdnIubTQgJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvbGliL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9zcmMvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0xUTElCUkFSSUVTID0gJChub2luc3RfTFRMSUJSQVJJRVMpCithbV9saWJob3N0bmFtZV9sYV9PQkpFQ1RTID0gc2V0aG9zdG5hbWUubG8KK2xpYmhvc3RuYW1lX2xhX09CSkVDVFMgPSAkKGFtX2xpYmhvc3RuYW1lX2xhX09CSkVDVFMpCitAQlVJTERfTElCSE9TVE5BTUVfVFJVRUBhbV9saWJob3N0bmFtZV9sYV9ycGF0aCA9CitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQorYW1fY2hraG9zdG5hbWVfT0JKRUNUUyA9IGNoa2hvc3RuYW1lLWNoa2hvc3RuYW1lLiQoT0JKRVhUKSBcCisJY2hraG9zdG5hbWUtY3VybF9nZXRob3N0bmFtZS4kKE9CSkVYVCkKK2Noa2hvc3RuYW1lX09CSkVDVFMgPSAkKGFtX2Noa2hvc3RuYW1lX09CSkVDVFMpCithbV9fb2JqZWN0c18xID0gZmlyc3QuJChPQkpFWFQpCithbV9fb2JqZWN0c18yID0gdGVzdHV0aWwuJChPQkpFWFQpCithbV9fb2JqZWN0c18zID0gdGVzdHRyYWNlLiQoT0JKRVhUKQorYW1fbGliNTAwX09CSkVDVFMgPSBsaWI1MDAuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSBcCisJJChhbV9fb2JqZWN0c18zKQorbGliNTAwX09CSkVDVFMgPSAkKGFtX2xpYjUwMF9PQkpFQ1RTKQorbGliNTAwX0xEQUREID0gJChMREFERCkKK2xpYjUwMF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjUwMV9PQkpFQ1RTID0gbGliNTAxLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1MDFfT0JKRUNUUyA9ICQoYW1fbGliNTAxX09CSkVDVFMpCitsaWI1MDFfTERBREQgPSAkKExEQUREKQorbGliNTAxX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fX29iamVjdHNfNCA9IHdhcm5sZXNzLiQoT0JKRVhUKQorYW1fbGliNTAyX09CSkVDVFMgPSBsaWI1MDIuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSBcCisJJChhbV9fb2JqZWN0c180KQorbGliNTAyX09CSkVDVFMgPSAkKGFtX2xpYjUwMl9PQkpFQ1RTKQorbGliNTAyX0xEQUREID0gJChMREFERCkKK2xpYjUwMl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjUwM19PQkpFQ1RTID0gbGliNTAzLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgXAorCSQoYW1fX29iamVjdHNfNCkKK2xpYjUwM19PQkpFQ1RTID0gJChhbV9saWI1MDNfT0JKRUNUUykKK2xpYjUwM19MREFERCA9ICQoTERBREQpCitsaWI1MDNfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1MDRfT0JKRUNUUyA9IGxpYjUwNC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKSAkKGFtX19vYmplY3RzXzIpIFwKKwkkKGFtX19vYmplY3RzXzQpCitsaWI1MDRfT0JKRUNUUyA9ICQoYW1fbGliNTA0X09CSkVDVFMpCitsaWI1MDRfTERBREQgPSAkKExEQUREKQorbGliNTA0X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTA1X09CSkVDVFMgPSBsaWI1MDUuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjUwNV9PQkpFQ1RTID0gJChhbV9saWI1MDVfT0JKRUNUUykKK2xpYjUwNV9MREFERCA9ICQoTERBREQpCitsaWI1MDVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1MDZfT0JKRUNUUyA9IGxpYjUwNi4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTA2X09CSkVDVFMgPSAkKGFtX2xpYjUwNl9PQkpFQ1RTKQorbGliNTA2X0xEQUREID0gJChMREFERCkKK2xpYjUwNl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjUwN19PQkpFQ1RTID0gbGliNTA3LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgXAorCSQoYW1fX29iamVjdHNfNCkKK2xpYjUwN19PQkpFQ1RTID0gJChhbV9saWI1MDdfT0JKRUNUUykKK2xpYjUwN19MREFERCA9ICQoTERBREQpCitsaWI1MDdfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1MDhfT0JKRUNUUyA9IGxpYjUwOC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTA4X09CSkVDVFMgPSAkKGFtX2xpYjUwOF9PQkpFQ1RTKQorbGliNTA4X0xEQUREID0gJChMREFERCkKK2xpYjUwOF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjUxMF9PQkpFQ1RTID0gbGliNTEwLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1MTBfT0JKRUNUUyA9ICQoYW1fbGliNTEwX09CSkVDVFMpCitsaWI1MTBfTERBREQgPSAkKExEQUREKQorbGliNTEwX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTExX09CSkVDVFMgPSBsaWI1MTEuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjUxMV9PQkpFQ1RTID0gJChhbV9saWI1MTFfT0JKRUNUUykKK2xpYjUxMV9MREFERCA9ICQoTERBREQpCitsaWI1MTFfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1MTJfT0JKRUNUUyA9IGxpYjUxMi4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTEyX09CSkVDVFMgPSAkKGFtX2xpYjUxMl9PQkpFQ1RTKQorbGliNTEyX0xEQUREID0gJChMREFERCkKK2xpYjUxMl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjUxM19PQkpFQ1RTID0gbGliNTEzLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1MTNfT0JKRUNUUyA9ICQoYW1fbGliNTEzX09CSkVDVFMpCitsaWI1MTNfTERBREQgPSAkKExEQUREKQorbGliNTEzX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTE0X09CSkVDVFMgPSBsaWI1MTQuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjUxNF9PQkpFQ1RTID0gJChhbV9saWI1MTRfT0JKRUNUUykKK2xpYjUxNF9MREFERCA9ICQoTERBREQpCitsaWI1MTRfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1MTVfT0JKRUNUUyA9IGxpYjUxNS4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTE1X09CSkVDVFMgPSAkKGFtX2xpYjUxNV9PQkpFQ1RTKQorbGliNTE1X0xEQUREID0gJChMREFERCkKK2xpYjUxNV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjUxNl9PQkpFQ1RTID0gbGliNTE2LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1MTZfT0JKRUNUUyA9ICQoYW1fbGliNTE2X09CSkVDVFMpCitsaWI1MTZfTERBREQgPSAkKExEQUREKQorbGliNTE2X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTE3X09CSkVDVFMgPSBsaWI1MTcuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjUxN19PQkpFQ1RTID0gJChhbV9saWI1MTdfT0JKRUNUUykKK2xpYjUxN19MREFERCA9ICQoTERBREQpCitsaWI1MTdfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1MThfT0JKRUNUUyA9IGxpYjUxOC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKSAkKGFtX19vYmplY3RzXzQpCitsaWI1MThfT0JKRUNUUyA9ICQoYW1fbGliNTE4X09CSkVDVFMpCitsaWI1MThfTERBREQgPSAkKExEQUREKQorbGliNTE4X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTE5X09CSkVDVFMgPSBsaWI1MTkuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjUxOV9PQkpFQ1RTID0gJChhbV9saWI1MTlfT0JKRUNUUykKK2xpYjUxOV9MREFERCA9ICQoTERBREQpCitsaWI1MTlfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1MjBfT0JKRUNUUyA9IGxpYjUyMC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTIwX09CSkVDVFMgPSAkKGFtX2xpYjUyMF9PQkpFQ1RTKQorbGliNTIwX0xEQUREID0gJChMREFERCkKK2xpYjUyMF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjUyMV9PQkpFQ1RTID0gbGliNTIxLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1MjFfT0JKRUNUUyA9ICQoYW1fbGliNTIxX09CSkVDVFMpCitsaWI1MjFfTERBREQgPSAkKExEQUREKQorbGliNTIxX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTIzX09CSkVDVFMgPSBsaWI1MjMuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjUyM19PQkpFQ1RTID0gJChhbV9saWI1MjNfT0JKRUNUUykKK2xpYjUyM19MREFERCA9ICQoTERBREQpCitsaWI1MjNfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1MjRfT0JKRUNUUyA9IGxpYjUyNC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTI0X09CSkVDVFMgPSAkKGFtX2xpYjUyNF9PQkpFQ1RTKQorbGliNTI0X0xEQUREID0gJChMREFERCkKK2xpYjUyNF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjUyNV9PQkpFQ1RTID0gbGliNTI1LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgXAorCSQoYW1fX29iamVjdHNfNCkKK2xpYjUyNV9PQkpFQ1RTID0gJChhbV9saWI1MjVfT0JKRUNUUykKK2xpYjUyNV9MREFERCA9ICQoTERBREQpCitsaWI1MjVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9fb2JqZWN0c181ID0gbGliNTI2LWZpcnN0LiQoT0JKRVhUKQorYW1fX29iamVjdHNfNiA9IGxpYjUyNi10ZXN0dXRpbC4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzcgPSBsaWI1MjYtd2Fybmxlc3MuJChPQkpFWFQpCithbV9saWI1MjZfT0JKRUNUUyA9IGxpYjUyNi1saWI1MjYuJChPQkpFWFQpICQoYW1fX29iamVjdHNfNSkgXAorCSQoYW1fX29iamVjdHNfNikgJChhbV9fb2JqZWN0c183KQorbGliNTI2X09CSkVDVFMgPSAkKGFtX2xpYjUyNl9PQkpFQ1RTKQorbGliNTI2X0xEQUREID0gJChMREFERCkKK2xpYjUyNl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX19vYmplY3RzXzggPSBsaWI1MjctZmlyc3QuJChPQkpFWFQpCithbV9fb2JqZWN0c185ID0gbGliNTI3LXRlc3R1dGlsLiQoT0JKRVhUKQorYW1fX29iamVjdHNfMTAgPSBsaWI1Mjctd2Fybmxlc3MuJChPQkpFWFQpCithbV9saWI1MjdfT0JKRUNUUyA9IGxpYjUyNy1saWI1MjYuJChPQkpFWFQpICQoYW1fX29iamVjdHNfOCkgXAorCSQoYW1fX29iamVjdHNfOSkgJChhbV9fb2JqZWN0c18xMCkKK2xpYjUyN19PQkpFQ1RTID0gJChhbV9saWI1MjdfT0JKRUNUUykKK2xpYjUyN19MREFERCA9ICQoTERBREQpCitsaWI1MjdfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9fb2JqZWN0c18xMSA9IGxpYjUyOS1maXJzdC4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzEyID0gbGliNTI5LXRlc3R1dGlsLiQoT0JKRVhUKQorYW1fX29iamVjdHNfMTMgPSBsaWI1Mjktd2Fybmxlc3MuJChPQkpFWFQpCithbV9saWI1MjlfT0JKRUNUUyA9IGxpYjUyOS1saWI1MjUuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMTEpIFwKKwkkKGFtX19vYmplY3RzXzEyKSAkKGFtX19vYmplY3RzXzEzKQorbGliNTI5X09CSkVDVFMgPSAkKGFtX2xpYjUyOV9PQkpFQ1RTKQorbGliNTI5X0xEQUREID0gJChMREFERCkKK2xpYjUyOV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX19vYmplY3RzXzE0ID0gbGliNTMwLWZpcnN0LiQoT0JKRVhUKQorYW1fX29iamVjdHNfMTUgPSBsaWI1MzAtdGVzdHV0aWwuJChPQkpFWFQpCithbV9fb2JqZWN0c18xNiA9IGxpYjUzMC13YXJubGVzcy4kKE9CSkVYVCkKK2FtX2xpYjUzMF9PQkpFQ1RTID0gbGliNTMwLWxpYjUzMC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xNCkgXAorCSQoYW1fX29iamVjdHNfMTUpICQoYW1fX29iamVjdHNfMTYpCitsaWI1MzBfT0JKRUNUUyA9ICQoYW1fbGliNTMwX09CSkVDVFMpCitsaWI1MzBfTERBREQgPSAkKExEQUREKQorbGliNTMwX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fX29iamVjdHNfMTcgPSBsaWI1MzItZmlyc3QuJChPQkpFWFQpCithbV9fb2JqZWN0c18xOCA9IGxpYjUzMi10ZXN0dXRpbC4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzE5ID0gbGliNTMyLXdhcm5sZXNzLiQoT0JKRVhUKQorYW1fbGliNTMyX09CSkVDVFMgPSBsaWI1MzItbGliNTI2LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzE3KSBcCisJJChhbV9fb2JqZWN0c18xOCkgJChhbV9fb2JqZWN0c18xOSkKK2xpYjUzMl9PQkpFQ1RTID0gJChhbV9saWI1MzJfT0JKRUNUUykKK2xpYjUzMl9MREFERCA9ICQoTERBREQpCitsaWI1MzJfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1MzNfT0JKRUNUUyA9IGxpYjUzMy4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKSAkKGFtX19vYmplY3RzXzIpIFwKKwkkKGFtX19vYmplY3RzXzQpCitsaWI1MzNfT0JKRUNUUyA9ICQoYW1fbGliNTMzX09CSkVDVFMpCitsaWI1MzNfTERBREQgPSAkKExEQUREKQorbGliNTMzX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTM2X09CSkVDVFMgPSBsaWI1MzYuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSBcCisJJChhbV9fb2JqZWN0c180KQorbGliNTM2X09CSkVDVFMgPSAkKGFtX2xpYjUzNl9PQkpFQ1RTKQorbGliNTM2X0xEQUREID0gJChMREFERCkKK2xpYjUzNl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjUzN19PQkpFQ1RTID0gbGliNTM3LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfNCkKK2xpYjUzN19PQkpFQ1RTID0gJChhbV9saWI1MzdfT0JKRUNUUykKK2xpYjUzN19MREFERCA9ICQoTERBREQpCitsaWI1MzdfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1MzlfT0JKRUNUUyA9IGxpYjUzOS4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTM5X09CSkVDVFMgPSAkKGFtX2xpYjUzOV9PQkpFQ1RTKQorbGliNTM5X0xEQUREID0gJChMREFERCkKK2xpYjUzOV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjU0MF9PQkpFQ1RTID0gbGliNTQwLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgXAorCSQoYW1fX29iamVjdHNfNCkKK2xpYjU0MF9PQkpFQ1RTID0gJChhbV9saWI1NDBfT0JKRUNUUykKK2xpYjU0MF9MREFERCA9ICQoTERBREQpCitsaWI1NDBfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1NDFfT0JKRUNUUyA9IGxpYjU0MS4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTQxX09CSkVDVFMgPSAkKGFtX2xpYjU0MV9PQkpFQ1RTKQorbGliNTQxX0xEQUREID0gJChMREFERCkKK2xpYjU0MV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjU0Ml9PQkpFQ1RTID0gbGliNTQyLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1NDJfT0JKRUNUUyA9ICQoYW1fbGliNTQyX09CSkVDVFMpCitsaWI1NDJfTERBREQgPSAkKExEQUREKQorbGliNTQyX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTQzX09CSkVDVFMgPSBsaWI1NDMuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjU0M19PQkpFQ1RTID0gJChhbV9saWI1NDNfT0JKRUNUUykKK2xpYjU0M19MREFERCA9ICQoTERBREQpCitsaWI1NDNfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1NDRfT0JKRUNUUyA9IGxpYjU0NC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTQ0X09CSkVDVFMgPSAkKGFtX2xpYjU0NF9PQkpFQ1RTKQorbGliNTQ0X0xEQUREID0gJChMREFERCkKK2xpYjU0NF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX19vYmplY3RzXzIwID0gbGliNTQ1LWZpcnN0LiQoT0JKRVhUKQorYW1fbGliNTQ1X09CSkVDVFMgPSBsaWI1NDUtbGliNTQ0LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzIwKQorbGliNTQ1X09CSkVDVFMgPSAkKGFtX2xpYjU0NV9PQkpFQ1RTKQorbGliNTQ1X0xEQUREID0gJChMREFERCkKK2xpYjU0NV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjU0N19PQkpFQ1RTID0gbGliNTQ3LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1NDdfT0JKRUNUUyA9ICQoYW1fbGliNTQ3X09CSkVDVFMpCitsaWI1NDdfTERBREQgPSAkKExEQUREKQorbGliNTQ3X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fX29iamVjdHNfMjEgPSBsaWI1NDgtZmlyc3QuJChPQkpFWFQpCithbV9saWI1NDhfT0JKRUNUUyA9IGxpYjU0OC1saWI1NDcuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMjEpCitsaWI1NDhfT0JKRUNUUyA9ICQoYW1fbGliNTQ4X09CSkVDVFMpCitsaWI1NDhfTERBREQgPSAkKExEQUREKQorbGliNTQ4X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTQ5X09CSkVDVFMgPSBsaWI1NDkuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjU0OV9PQkpFQ1RTID0gJChhbV9saWI1NDlfT0JKRUNUUykKK2xpYjU0OV9MREFERCA9ICQoTERBREQpCitsaWI1NDlfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1NTJfT0JKRUNUUyA9IGxpYjU1Mi4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKSAkKGFtX19vYmplY3RzXzQpCitsaWI1NTJfT0JKRUNUUyA9ICQoYW1fbGliNTUyX09CSkVDVFMpCitsaWI1NTJfTERBREQgPSAkKExEQUREKQorbGliNTUyX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTUzX09CSkVDVFMgPSBsaWI1NTMuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjU1M19PQkpFQ1RTID0gJChhbV9saWI1NTNfT0JKRUNUUykKK2xpYjU1M19MREFERCA9ICQoTERBREQpCitsaWI1NTNfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1NTRfT0JKRUNUUyA9IGxpYjU1NC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTU0X09CSkVDVFMgPSAkKGFtX2xpYjU1NF9PQkpFQ1RTKQorbGliNTU0X0xEQUREID0gJChMREFERCkKK2xpYjU1NF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjU1NV9PQkpFQ1RTID0gbGliNTU1LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgXAorCSQoYW1fX29iamVjdHNfNCkKK2xpYjU1NV9PQkpFQ1RTID0gJChhbV9saWI1NTVfT0JKRUNUUykKK2xpYjU1NV9MREFERCA9ICQoTERBREQpCitsaWI1NTVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1NTZfT0JKRUNUUyA9IGxpYjU1Ni4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTU2X09CSkVDVFMgPSAkKGFtX2xpYjU1Nl9PQkpFQ1RTKQorbGliNTU2X0xEQUREID0gJChMREFERCkKK2xpYjU1Nl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjU1N19PQkpFQ1RTID0gbGliNTU3LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1NTdfT0JKRUNUUyA9ICQoYW1fbGliNTU3X09CSkVDVFMpCitsaWI1NTdfTERBREQgPSAkKExEQUREKQorbGliNTU3X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTYwX09CSkVDVFMgPSBsaWI1NjAuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSBcCisJJChhbV9fb2JqZWN0c180KQorbGliNTYwX09CSkVDVFMgPSAkKGFtX2xpYjU2MF9PQkpFQ1RTKQorbGliNTYwX0xEQUREID0gJChMREFERCkKK2xpYjU2MF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjU2Ml9PQkpFQ1RTID0gbGliNTYyLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1NjJfT0JKRUNUUyA9ICQoYW1fbGliNTYyX09CSkVDVFMpCitsaWI1NjJfTERBREQgPSAkKExEQUREKQorbGliNTYyX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTY0X09CSkVDVFMgPSBsaWI1NjQuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSBcCisJJChhbV9fb2JqZWN0c180KQorbGliNTY0X09CSkVDVFMgPSAkKGFtX2xpYjU2NF9PQkpFQ1RTKQorbGliNTY0X0xEQUREID0gJChMREFERCkKK2xpYjU2NF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX19vYmplY3RzXzIyID0gbGliNTY1LWZpcnN0LiQoT0JKRVhUKQorYW1fbGliNTY1X09CSkVDVFMgPSBsaWI1NjUtbGliNTEwLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzIyKQorbGliNTY1X09CSkVDVFMgPSAkKGFtX2xpYjU2NV9PQkpFQ1RTKQorbGliNTY1X0xEQUREID0gJChMREFERCkKK2xpYjU2NV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjU2Nl9PQkpFQ1RTID0gbGliNTY2LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1NjZfT0JKRUNUUyA9ICQoYW1fbGliNTY2X09CSkVDVFMpCitsaWI1NjZfTERBREQgPSAkKExEQUREKQorbGliNTY2X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTY3X09CSkVDVFMgPSBsaWI1NjcuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjU2N19PQkpFQ1RTID0gJChhbV9saWI1NjdfT0JKRUNUUykKK2xpYjU2N19MREFERCA9ICQoTERBREQpCitsaWI1NjdfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1NjhfT0JKRUNUUyA9IGxpYjU2OC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTY4X09CSkVDVFMgPSAkKGFtX2xpYjU2OF9PQkpFQ1RTKQorbGliNTY4X0xEQUREID0gJChMREFERCkKK2xpYjU2OF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjU2OV9PQkpFQ1RTID0gbGliNTY5LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1NjlfT0JKRUNUUyA9ICQoYW1fbGliNTY5X09CSkVDVFMpCitsaWI1NjlfTERBREQgPSAkKExEQUREKQorbGliNTY5X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTcwX09CSkVDVFMgPSBsaWI1NzAuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjU3MF9PQkpFQ1RTID0gJChhbV9saWI1NzBfT0JKRUNUUykKK2xpYjU3MF9MREFERCA9ICQoTERBREQpCitsaWI1NzBfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1NzFfT0JKRUNUUyA9IGxpYjU3MS4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKSAkKGFtX19vYmplY3RzXzQpCitsaWI1NzFfT0JKRUNUUyA9ICQoYW1fbGliNTcxX09CSkVDVFMpCitsaWI1NzFfTERBREQgPSAkKExEQUREKQorbGliNTcxX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTcyX09CSkVDVFMgPSBsaWI1NzIuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjU3Ml9PQkpFQ1RTID0gJChhbV9saWI1NzJfT0JKRUNUUykKK2xpYjU3Ml9MREFERCA9ICQoTERBREQpCitsaWI1NzJfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1NzNfT0JKRUNUUyA9IGxpYjU3My4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKSAkKGFtX19vYmplY3RzXzIpIFwKKwkkKGFtX19vYmplY3RzXzQpICQoYW1fX29iamVjdHNfMykKK2xpYjU3M19PQkpFQ1RTID0gJChhbV9saWI1NzNfT0JKRUNUUykKK2xpYjU3M19MREFERCA9ICQoTERBREQpCitsaWI1NzNfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1NzRfT0JKRUNUUyA9IGxpYjU3NC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTc0X09CSkVDVFMgPSAkKGFtX2xpYjU3NF9PQkpFQ1RTKQorbGliNTc0X0xEQUREID0gJChMREFERCkKK2xpYjU3NF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjU3NV9PQkpFQ1RTID0gbGliNTc1LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgXAorCSQoYW1fX29iamVjdHNfNCkKK2xpYjU3NV9PQkpFQ1RTID0gJChhbV9saWI1NzVfT0JKRUNUUykKK2xpYjU3NV9MREFERCA9ICQoTERBREQpCitsaWI1NzVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1NzZfT0JKRUNUUyA9IGxpYjU3Ni4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTc2X09CSkVDVFMgPSAkKGFtX2xpYjU3Nl9PQkpFQ1RTKQorbGliNTc2X0xEQUREID0gJChMREFERCkKK2xpYjU3Nl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjU3OF9PQkpFQ1RTID0gbGliNTc4LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1NzhfT0JKRUNUUyA9ICQoYW1fbGliNTc4X09CSkVDVFMpCitsaWI1NzhfTERBREQgPSAkKExEQUREKQorbGliNTc4X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTc5X09CSkVDVFMgPSBsaWI1NzkuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjU3OV9PQkpFQ1RTID0gJChhbV9saWI1NzlfT0JKRUNUUykKK2xpYjU3OV9MREFERCA9ICQoTERBREQpCitsaWI1NzlfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1ODJfT0JKRUNUUyA9IGxpYjU4Mi4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKSAkKGFtX19vYmplY3RzXzIpIFwKKwkkKGFtX19vYmplY3RzXzQpCitsaWI1ODJfT0JKRUNUUyA9ICQoYW1fbGliNTgyX09CSkVDVFMpCitsaWI1ODJfTERBREQgPSAkKExEQUREKQorbGliNTgyX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTgzX09CSkVDVFMgPSBsaWI1ODMuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkKK2xpYjU4M19PQkpFQ1RTID0gJChhbV9saWI1ODNfT0JKRUNUUykKK2xpYjU4M19MREFERCA9ICQoTERBREQpCitsaWI1ODNfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9fb2JqZWN0c18yMyA9IGxpYjU4NS1maXJzdC4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzI0ID0gbGliNTg1LXRlc3R1dGlsLiQoT0JKRVhUKQorYW1fX29iamVjdHNfMjUgPSBsaWI1ODUtdGVzdHRyYWNlLiQoT0JKRVhUKQorYW1fbGliNTg1X09CSkVDVFMgPSBsaWI1ODUtbGliNTAwLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzIzKSBcCisJJChhbV9fb2JqZWN0c18yNCkgJChhbV9fb2JqZWN0c18yNSkKK2xpYjU4NV9PQkpFQ1RTID0gJChhbV9saWI1ODVfT0JKRUNUUykKK2xpYjU4NV9MREFERCA9ICQoTERBREQpCitsaWI1ODVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1ODZfT0JKRUNUUyA9IGxpYjU4Ni4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTg2X09CSkVDVFMgPSAkKGFtX2xpYjU4Nl9PQkpFQ1RTKQorbGliNTg2X0xEQUREID0gJChMREFERCkKK2xpYjU4Nl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX19vYmplY3RzXzI2ID0gbGliNTg3LWZpcnN0LiQoT0JKRVhUKQorYW1fbGliNTg3X09CSkVDVFMgPSBsaWI1ODctbGliNTU0LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzI2KQorbGliNTg3X09CSkVDVFMgPSAkKGFtX2xpYjU4N19PQkpFQ1RTKQorbGliNTg3X0xEQUREID0gJChMREFERCkKK2xpYjU4N19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjU5MF9PQkpFQ1RTID0gbGliNTkwLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitsaWI1OTBfT0JKRUNUUyA9ICQoYW1fbGliNTkwX09CSkVDVFMpCitsaWI1OTBfTERBREQgPSAkKExEQUREKQorbGliNTkwX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYQorYW1fbGliNTkxX09CSkVDVFMgPSBsaWI1OTEuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSBcCisJJChhbV9fb2JqZWN0c180KQorbGliNTkxX09CSkVDVFMgPSAkKGFtX2xpYjU5MV9PQkpFQ1RTKQorbGliNTkxX0xEQUREID0gJChMREFERCkKK2xpYjU5MV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK2FtX2xpYjU5N19PQkpFQ1RTID0gbGliNTk3LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgXAorCSQoYW1fX29iamVjdHNfNCkKK2xpYjU5N19PQkpFQ1RTID0gJChhbV9saWI1OTdfT0JKRUNUUykKK2xpYjU5N19MREFERCA9ICQoTERBREQpCitsaWI1OTdfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCithbV9saWI1OThfT0JKRUNUUyA9IGxpYjU5OC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQorbGliNTk4X09CSkVDVFMgPSAkKGFtX2xpYjU5OF9PQkpFQ1RTKQorbGliNTk4X0xEQUREID0gJChMREFERCkKK2xpYjU5OF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmwubGEKK0RFRkFVTFRfSU5DTFVERVMgPSAKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGxpYmhvc3RuYW1lX2xhX1NPVVJDRVMpICQoY2hraG9zdG5hbWVfU09VUkNFUykgXAorCSQobGliNTAwX1NPVVJDRVMpICQobGliNTAxX1NPVVJDRVMpICQobGliNTAyX1NPVVJDRVMpIFwKKwkkKGxpYjUwM19TT1VSQ0VTKSAkKGxpYjUwNF9TT1VSQ0VTKSAkKGxpYjUwNV9TT1VSQ0VTKSBcCisJJChsaWI1MDZfU09VUkNFUykgJChsaWI1MDdfU09VUkNFUykgJChsaWI1MDhfU09VUkNFUykgXAorCSQobGliNTEwX1NPVVJDRVMpICQobGliNTExX1NPVVJDRVMpICQobGliNTEyX1NPVVJDRVMpIFwKKwkkKGxpYjUxM19TT1VSQ0VTKSAkKGxpYjUxNF9TT1VSQ0VTKSAkKGxpYjUxNV9TT1VSQ0VTKSBcCisJJChsaWI1MTZfU09VUkNFUykgJChsaWI1MTdfU09VUkNFUykgJChsaWI1MThfU09VUkNFUykgXAorCSQobGliNTE5X1NPVVJDRVMpICQobGliNTIwX1NPVVJDRVMpICQobGliNTIxX1NPVVJDRVMpIFwKKwkkKGxpYjUyM19TT1VSQ0VTKSAkKGxpYjUyNF9TT1VSQ0VTKSAkKGxpYjUyNV9TT1VSQ0VTKSBcCisJJChsaWI1MjZfU09VUkNFUykgJChsaWI1MjdfU09VUkNFUykgJChsaWI1MjlfU09VUkNFUykgXAorCSQobGliNTMwX1NPVVJDRVMpICQobGliNTMyX1NPVVJDRVMpICQobGliNTMzX1NPVVJDRVMpIFwKKwkkKGxpYjUzNl9TT1VSQ0VTKSAkKGxpYjUzN19TT1VSQ0VTKSAkKGxpYjUzOV9TT1VSQ0VTKSBcCisJJChsaWI1NDBfU09VUkNFUykgJChsaWI1NDFfU09VUkNFUykgJChsaWI1NDJfU09VUkNFUykgXAorCSQobGliNTQzX1NPVVJDRVMpICQobGliNTQ0X1NPVVJDRVMpICQobGliNTQ1X1NPVVJDRVMpIFwKKwkkKGxpYjU0N19TT1VSQ0VTKSAkKGxpYjU0OF9TT1VSQ0VTKSAkKGxpYjU0OV9TT1VSQ0VTKSBcCisJJChsaWI1NTJfU09VUkNFUykgJChsaWI1NTNfU09VUkNFUykgJChsaWI1NTRfU09VUkNFUykgXAorCSQobGliNTU1X1NPVVJDRVMpICQobGliNTU2X1NPVVJDRVMpICQobGliNTU3X1NPVVJDRVMpIFwKKwkkKGxpYjU2MF9TT1VSQ0VTKSAkKGxpYjU2Ml9TT1VSQ0VTKSAkKGxpYjU2NF9TT1VSQ0VTKSBcCisJJChsaWI1NjVfU09VUkNFUykgJChsaWI1NjZfU09VUkNFUykgJChsaWI1NjdfU09VUkNFUykgXAorCSQobGliNTY4X1NPVVJDRVMpICQobGliNTY5X1NPVVJDRVMpICQobGliNTcwX1NPVVJDRVMpIFwKKwkkKGxpYjU3MV9TT1VSQ0VTKSAkKGxpYjU3Ml9TT1VSQ0VTKSAkKGxpYjU3M19TT1VSQ0VTKSBcCisJJChsaWI1NzRfU09VUkNFUykgJChsaWI1NzVfU09VUkNFUykgJChsaWI1NzZfU09VUkNFUykgXAorCSQobGliNTc4X1NPVVJDRVMpICQobGliNTc5X1NPVVJDRVMpICQobGliNTgyX1NPVVJDRVMpIFwKKwkkKGxpYjU4M19TT1VSQ0VTKSAkKGxpYjU4NV9TT1VSQ0VTKSAkKGxpYjU4Nl9TT1VSQ0VTKSBcCisJJChsaWI1ODdfU09VUkNFUykgJChsaWI1OTBfU09VUkNFUykgJChsaWI1OTFfU09VUkNFUykgXAorCSQobGliNTk3X1NPVVJDRVMpICQobGliNTk4X1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGxpYmhvc3RuYW1lX2xhX1NPVVJDRVMpICQoY2hraG9zdG5hbWVfU09VUkNFUykgXAorCSQobGliNTAwX1NPVVJDRVMpICQobGliNTAxX1NPVVJDRVMpICQobGliNTAyX1NPVVJDRVMpIFwKKwkkKGxpYjUwM19TT1VSQ0VTKSAkKGxpYjUwNF9TT1VSQ0VTKSAkKGxpYjUwNV9TT1VSQ0VTKSBcCisJJChsaWI1MDZfU09VUkNFUykgJChsaWI1MDdfU09VUkNFUykgJChsaWI1MDhfU09VUkNFUykgXAorCSQobGliNTEwX1NPVVJDRVMpICQobGliNTExX1NPVVJDRVMpICQobGliNTEyX1NPVVJDRVMpIFwKKwkkKGxpYjUxM19TT1VSQ0VTKSAkKGxpYjUxNF9TT1VSQ0VTKSAkKGxpYjUxNV9TT1VSQ0VTKSBcCisJJChsaWI1MTZfU09VUkNFUykgJChsaWI1MTdfU09VUkNFUykgJChsaWI1MThfU09VUkNFUykgXAorCSQobGliNTE5X1NPVVJDRVMpICQobGliNTIwX1NPVVJDRVMpICQobGliNTIxX1NPVVJDRVMpIFwKKwkkKGxpYjUyM19TT1VSQ0VTKSAkKGxpYjUyNF9TT1VSQ0VTKSAkKGxpYjUyNV9TT1VSQ0VTKSBcCisJJChsaWI1MjZfU09VUkNFUykgJChsaWI1MjdfU09VUkNFUykgJChsaWI1MjlfU09VUkNFUykgXAorCSQobGliNTMwX1NPVVJDRVMpICQobGliNTMyX1NPVVJDRVMpICQobGliNTMzX1NPVVJDRVMpIFwKKwkkKGxpYjUzNl9TT1VSQ0VTKSAkKGxpYjUzN19TT1VSQ0VTKSAkKGxpYjUzOV9TT1VSQ0VTKSBcCisJJChsaWI1NDBfU09VUkNFUykgJChsaWI1NDFfU09VUkNFUykgJChsaWI1NDJfU09VUkNFUykgXAorCSQobGliNTQzX1NPVVJDRVMpICQobGliNTQ0X1NPVVJDRVMpICQobGliNTQ1X1NPVVJDRVMpIFwKKwkkKGxpYjU0N19TT1VSQ0VTKSAkKGxpYjU0OF9TT1VSQ0VTKSAkKGxpYjU0OV9TT1VSQ0VTKSBcCisJJChsaWI1NTJfU09VUkNFUykgJChsaWI1NTNfU09VUkNFUykgJChsaWI1NTRfU09VUkNFUykgXAorCSQobGliNTU1X1NPVVJDRVMpICQobGliNTU2X1NPVVJDRVMpICQobGliNTU3X1NPVVJDRVMpIFwKKwkkKGxpYjU2MF9TT1VSQ0VTKSAkKGxpYjU2Ml9TT1VSQ0VTKSAkKGxpYjU2NF9TT1VSQ0VTKSBcCisJJChsaWI1NjVfU09VUkNFUykgJChsaWI1NjZfU09VUkNFUykgJChsaWI1NjdfU09VUkNFUykgXAorCSQobGliNTY4X1NPVVJDRVMpICQobGliNTY5X1NPVVJDRVMpICQobGliNTcwX1NPVVJDRVMpIFwKKwkkKGxpYjU3MV9TT1VSQ0VTKSAkKGxpYjU3Ml9TT1VSQ0VTKSAkKGxpYjU3M19TT1VSQ0VTKSBcCisJJChsaWI1NzRfU09VUkNFUykgJChsaWI1NzVfU09VUkNFUykgJChsaWI1NzZfU09VUkNFUykgXAorCSQobGliNTc4X1NPVVJDRVMpICQobGliNTc5X1NPVVJDRVMpICQobGliNTgyX1NPVVJDRVMpIFwKKwkkKGxpYjU4M19TT1VSQ0VTKSAkKGxpYjU4NV9TT1VSQ0VTKSAkKGxpYjU4Nl9TT1VSQ0VTKSBcCisJJChsaWI1ODdfU09VUkNFUykgJChsaWI1OTBfU09VUkNFUykgJChsaWI1OTFfU09VUkNFUykgXAorCSQobGliNTk3X1NPVVJDRVMpICQobGliNTk4X1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACitBTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFID0gQEJVSUxEX0xJQkhPU1ROQU1FX0ZBTFNFQAorQlVJTERfTElCSE9TVE5BTUVfVFJVRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9UUlVFQAorQlVJTERfVU5JVFRFU1RTX0ZBTFNFID0gQEJVSUxEX1VOSVRURVNUU19GQUxTRUAKK0JVSUxEX1VOSVRURVNUU19UUlVFID0gQEJVSUxEX1VOSVRURVNUU19UUlVFQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NPTkZJR1VSRV9PUFRJT05TID0gQENPTkZJR1VSRV9PUFRJT05TQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1JPU1NDT01QSUxJTkdfRkFMU0UgPSBAQ1JPU1NDT01QSUxJTkdfRkFMU0VACitDUk9TU0NPTVBJTElOR19UUlVFID0gQENST1NTQ09NUElMSU5HX1RSVUVACitDVVJMREVCVUdfRkFMU0UgPSBAQ1VSTERFQlVHX0ZBTFNFQAorQ1VSTERFQlVHX1RSVUUgPSBAQ1VSTERFQlVHX1RSVUVACitDVVJMVkVSU0lPTiA9IEBDVVJMVkVSU0lPTkAKK0NVUkxfQ0FfQlVORExFID0gQENVUkxfQ0FfQlVORExFQAorQ1VSTF9DRkxBR19FWFRSQVMgPSBAQ1VSTF9DRkxBR19FWFRSQVNACitDVVJMX0RJU0FCTEVfRElDVCA9IEBDVVJMX0RJU0FCTEVfRElDVEAKK0NVUkxfRElTQUJMRV9GSUxFID0gQENVUkxfRElTQUJMRV9GSUxFQAorQ1VSTF9ESVNBQkxFX0ZUUCA9IEBDVVJMX0RJU0FCTEVfRlRQQAorQ1VSTF9ESVNBQkxFX0dPUEhFUiA9IEBDVVJMX0RJU0FCTEVfR09QSEVSQAorQ1VSTF9ESVNBQkxFX0hUVFAgPSBAQ1VSTF9ESVNBQkxFX0hUVFBACitDVVJMX0RJU0FCTEVfSU1BUCA9IEBDVVJMX0RJU0FCTEVfSU1BUEAKK0NVUkxfRElTQUJMRV9MREFQID0gQENVUkxfRElTQUJMRV9MREFQQAorQ1VSTF9ESVNBQkxFX0xEQVBTID0gQENVUkxfRElTQUJMRV9MREFQU0AKK0NVUkxfRElTQUJMRV9QT1AzID0gQENVUkxfRElTQUJMRV9QT1AzQAorQ1VSTF9ESVNBQkxFX1BST1hZID0gQENVUkxfRElTQUJMRV9QUk9YWUAKK0NVUkxfRElTQUJMRV9SVFNQID0gQENVUkxfRElTQUJMRV9SVFNQQAorQ1VSTF9ESVNBQkxFX1NNVFAgPSBAQ1VSTF9ESVNBQkxFX1NNVFBACitDVVJMX0RJU0FCTEVfVEVMTkVUID0gQENVUkxfRElTQUJMRV9URUxORVRACitDVVJMX0RJU0FCTEVfVEZUUCA9IEBDVVJMX0RJU0FCTEVfVEZUUEAKK0NVUkxfTElCUyA9IEBDVVJMX0xJQlNACitDVVJMX05FVFdPUktfTElCUyA9IEBDVVJMX05FVFdPUktfTElCU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TSEFSRUQgPSBARU5BQkxFX1NIQVJFREAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfR05VVExTX1NSUCA9IEBIQVZFX0dOVVRMU19TUlBACitIQVZFX0xEQVBfU1NMID0gQEhBVkVfTERBUF9TU0xACitIQVZFX0xJQlogPSBASEFWRV9MSUJaQAorSEFWRV9MSUJaX0ZBTFNFID0gQEhBVkVfTElCWl9GQUxTRUAKK0hBVkVfTElCWl9UUlVFID0gQEhBVkVfTElCWl9UUlVFQAorSEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1QgPSBASEFWRV9QSzExX0NSRUFURUdFTkVSSUNPQkpFQ1RACitIQVZFX1NTTEVBWV9TUlAgPSBASEFWRV9TU0xFQVlfU1JQQAorSUROX0VOQUJMRUQgPSBASUROX0VOQUJMRURACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lQVjZfRU5BQkxFRCA9IEBJUFY2X0VOQUJMRURACitLUkI0X0VOQUJMRUQgPSBAS1JCNF9FTkFCTEVEQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJDVVJMX0xJQlMgPSBATElCQ1VSTF9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQU5PUFQgPSBATUFOT1BUQAorTUlNUFVSRV9GQUxTRSA9IEBNSU1QVVJFX0ZBTFNFQAorTUlNUFVSRV9UUlVFID0gQE1JTVBVUkVfVFJVRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK05PX1VOREVGSU5FRF9GQUxTRSA9IEBOT19VTkRFRklORURfRkFMU0VACitOT19VTkRFRklORURfVFJVRSA9IEBOT19VTkRFRklORURfVFJVRUAKK05ST0ZGID0gQE5ST0ZGQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSCA9IEBQQVRIQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMID0gQFBFUkxACitQS0dBRERfTkFNRSA9IEBQS0dBRERfTkFNRUAKK1BLR0FERF9QS0cgPSBAUEtHQUREX1BLR0AKK1BLR0FERF9WRU5ET1IgPSBAUEtHQUREX1ZFTkRPUkAKK1BLR0NPTkZJRyA9IEBQS0dDT05GSUdACitSQU5ET01fRklMRSA9IEBSQU5ET01fRklMRUAKK1JBTkxJQiA9IEBSQU5MSUJACitSRVFVSVJFX0xJQl9ERVBTID0gQFJFUVVJUkVfTElCX0RFUFNACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NPTkFNRV9CVU1QX0ZBTFNFID0gQFNPTkFNRV9CVU1QX0ZBTFNFQAorU09OQU1FX0JVTVBfVFJVRSA9IEBTT05BTUVfQlVNUF9UUlVFQAorU1NMX0VOQUJMRUQgPSBAU1NMX0VOQUJMRURACitTVEFUSUNMSUJfRkFMU0UgPSBAU1RBVElDTElCX0ZBTFNFQAorU1RBVElDTElCX1RSVUUgPSBAU1RBVElDTElCX1RSVUVACitTVFJJUCA9IEBTVFJJUEAKK1NVUFBPUlRfRkVBVFVSRVMgPSBAU1VQUE9SVF9GRUFUVVJFU0AKK1NVUFBPUlRfUFJPVE9DT0xTID0gQFNVUFBPUlRfUFJPVE9DT0xTQAorVEVTVF9TRVJWRVJfTElCUyA9IEBURVNUX1NFUlZFUl9MSUJTQAorVVNFX0FSRVMgPSBAVVNFX0FSRVNACitVU0VfQVhUTFMgPSBAVVNFX0FYVExTQAorVVNFX0NZQVNTTCA9IEBVU0VfQ1lBU1NMQAorVVNFX0VNQkVEREVEX0FSRVNfRkFMU0UgPSBAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VACitVU0VfRU1CRURERURfQVJFU19UUlVFID0gQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVACitVU0VfR05VVExTID0gQFVTRV9HTlVUTFNACitVU0VfR05VVExTX05FVFRMRSA9IEBVU0VfR05VVExTX05FVFRMRUAKK1VTRV9MSUJSVE1QID0gQFVTRV9MSUJSVE1QQAorVVNFX0xJQlNTSDIgPSBAVVNFX0xJQlNTSDJACitVU0VfTUFOVUFMX0ZBTFNFID0gQFVTRV9NQU5VQUxfRkFMU0VACitVU0VfTUFOVUFMX1RSVUUgPSBAVVNFX01BTlVBTF9UUlVFQAorVVNFX05TUyA9IEBVU0VfTlNTQAorVVNFX09QRU5MREFQID0gQFVTRV9PUEVOTERBUEAKK1VTRV9QT0xBUlNTTCA9IEBVU0VfUE9MQVJTU0xACitVU0VfU1NMRUFZID0gQFVTRV9TU0xFQVlACitVU0VfV0lORE9XU19TU1BJID0gQFVTRV9XSU5ET1dTX1NTUElACitWRVJTSU9OID0gQFZFUlNJT05ACitWRVJTSU9ORURfRkxBVk9VUiA9IEBWRVJTSU9ORURfRkxBVk9VUkAKK1ZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFID0gQFZFUlNJT05FRF9TWU1CT0xTX0ZBTFNFQAorVkVSU0lPTkVEX1NZTUJPTFNfVFJVRSA9IEBWRVJTSU9ORURfU1lNQk9MU19UUlVFQAorVkVSU0lPTk5VTSA9IEBWRVJTSU9OTlVNQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbGliZXh0ID0gQGxpYmV4dEAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3ViZGlycyA9IEBzdWJkaXJzQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBub3N0ZGluYworQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQElOQ0xVREVTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIFwKK0BVU0VfRU1CRURERURfQVJFU19GQUxTRUAgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgICAgICBcCitAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQCAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvbGliICAgICAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19GQUxTRUAgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9saWIKKworCisjIFNwZWNpZnkgb3VyIGluY2x1ZGUgcGF0aHMgaGVyZSwgYW5kIGRvIGl0IHJlbGF0aXZlIHRvICQodG9wX3NyY2RpcikgYW5kCisjICQodG9wX2J1aWxkZGlyKSwgdG8gZW5zdXJlIHRoYXQgdGhlc2UgcGF0aHMgd2hpY2ggYmVsb25nIHRvIHRoZSBsaWJyYXJ5CisjIGJlaW5nIGN1cnJlbnRseSBidWlsdCBhbmQgdGVzdGVkIGFyZSBzZWFyY2hlZCBiZWZvcmUgdGhlIGxpYnJhcnkgd2hpY2gKKyMgbWlnaHQgcG9zc2libHkgYWxyZWFkeSBiZSBpbnN0YWxsZWQgaW4gdGhlIHN5c3RlbS4KKyMKKyMgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBmb3IgZ2VuZXJhdGVkIGN1cmxidWlsZC5oIGluY2x1ZGVkIGZyb20gY3VybC5oCisjICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlIGZvciBnZW5lcmF0ZWQgY3VybGJ1aWxkLmggaW5jbHVkZWQgZnJvbSBsaWIvc2V0dXAuaAorIyAkKHRvcF9zcmNkaXIpL2luY2x1ZGUgaXMgZm9yIGxpYmN1cmwncyBleHRlcm5hbCBpbmNsdWRlIGZpbGVzCisjICQodG9wX2J1aWxkZGlyKS9saWIgaXMgZm9yIGxpYmN1cmwncyBnZW5lcmF0ZWQgbGliL2N1cmxfY29uZmlnLmggZmlsZQorIyAkKHRvcF9zcmNkaXIpL2xpYiBpcyBmb3IgbGliY3VybCdzIGxpYi9zZXR1cC5oIGFuZCBvdGhlciAiYm9ycm93ZWQiIGZpbGVzCisjICQodG9wX2J1aWxkZGlyKS9hcmVzIGlzIGZvciBpbi10cmVlIGMtYXJlcydzIGdlbmVyYXRlZCBhcmVzX2J1aWxkLmggZmlsZQorIyAkKHRvcF9zcmNkaXIpL2FyZXMgaXMgZm9yIGluLXRyZWUgYy1hcmVzJ3MgZXh0ZXJuYWwgaW5jbHVkZSBmaWxlcworQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVASU5DTFVERVMgPSAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9saWIgICAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvbGliICAgICAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9hcmVzICAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvYXJlcworCitFWFRSQV9ESVNUID0gdGVzdDc1LnBsIHRlc3QzMDcucGwgdGVzdDYxMC5wbCB0ZXN0NjEzLnBsIHRlc3QxMDEzLnBsCVwKK3Rlc3QxMDIyLnBsIE1ha2VmaWxlLmluYworCisKKyMgRGVwZW5kZW5jaWVzIChtYXkgbmVlZCB0byBiZSBvdmVycmlkZW4pCitMREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybC5sYSBAQ1VSTF9MSUJTQAorREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsLmxhCisKKyMgZmlsZXMgdXNlZCBvbmx5IGluIHNvbWUgbGliY3VybCB0ZXN0IHByb2dyYW1zCitURVNUVVRJTCA9IHRlc3R1dGlsLmMgdGVzdHV0aWwuaAorCisjIGZpbGVzIHVzZWQgb25seSBpbiBzb21lIGxpYmN1cmwgdGVzdCBwcm9ncmFtcworVFNUVFJBQ0UgPSB0ZXN0dHJhY2UuYyB0ZXN0dHJhY2UuaAorCisjIGZpbGVzIHVzZWQgb25seSBpbiBzb21lIGxpYmN1cmwgdGVzdCBwcm9ncmFtcworV0FSTkxFU1MgPSAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jICQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmgKKworIyB0aGVzZSBmaWxlcyBhcmUgdXNlZCBpbiBldmVyeSBzaW5nbGUgdGVzdCBwcm9ncmFtIGJlbG93CitTVVBQT1JURklMRVMgPSBmaXJzdC5jIHRlc3QuaAorY2hraG9zdG5hbWVfU09VUkNFUyA9IGNoa2hvc3RuYW1lLmMgJCh0b3Bfc3JjZGlyKS9saWIvY3VybF9nZXRob3N0bmFtZS5jCitjaGtob3N0bmFtZV9MREFERCA9IEBDVVJMX05FVFdPUktfTElCU0AKK2Noa2hvc3RuYW1lX0RFUEVOREVOQ0lFUyA9IAorY2hraG9zdG5hbWVfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitsaWI1MDBfU09VUkNFUyA9IGxpYjUwMC5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFRTVFRSQUNFKQorbGliNTAxX1NPVVJDRVMgPSBsaWI1MDEuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjUwMl9TT1VSQ0VTID0gbGliNTAyLmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCitsaWI1MDNfU09VUkNFUyA9IGxpYjUwMy5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorbGliNTA0X1NPVVJDRVMgPSBsaWI1MDQuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKK2xpYjUwNV9TT1VSQ0VTID0gbGliNTA1LmMgJChTVVBQT1JURklMRVMpCitsaWI1MDZfU09VUkNFUyA9IGxpYjUwNi5jICQoU1VQUE9SVEZJTEVTKQorbGliNTA3X1NPVVJDRVMgPSBsaWI1MDcuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKK2xpYjUwOF9TT1VSQ0VTID0gbGliNTA4LmMgJChTVVBQT1JURklMRVMpCitsaWI1MTBfU09VUkNFUyA9IGxpYjUxMC5jICQoU1VQUE9SVEZJTEVTKQorbGliNTExX1NPVVJDRVMgPSBsaWI1MTEuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjUxMl9TT1VSQ0VTID0gbGliNTEyLmMgJChTVVBQT1JURklMRVMpCitsaWI1MTNfU09VUkNFUyA9IGxpYjUxMy5jICQoU1VQUE9SVEZJTEVTKQorbGliNTE0X1NPVVJDRVMgPSBsaWI1MTQuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjUxNV9TT1VSQ0VTID0gbGliNTE1LmMgJChTVVBQT1JURklMRVMpCitsaWI1MTZfU09VUkNFUyA9IGxpYjUxNi5jICQoU1VQUE9SVEZJTEVTKQorbGliNTE3X1NPVVJDRVMgPSBsaWI1MTcuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjUxOF9TT1VSQ0VTID0gbGliNTE4LmMgJChTVVBQT1JURklMRVMpICQoV0FSTkxFU1MpCitsaWI1MTlfU09VUkNFUyA9IGxpYjUxOS5jICQoU1VQUE9SVEZJTEVTKQorbGliNTIwX1NPVVJDRVMgPSBsaWI1MjAuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjUyMV9TT1VSQ0VTID0gbGliNTIxLmMgJChTVVBQT1JURklMRVMpCitsaWI1MjNfU09VUkNFUyA9IGxpYjUyMy5jICQoU1VQUE9SVEZJTEVTKQorbGliNTI0X1NPVVJDRVMgPSBsaWI1MjQuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjUyNV9TT1VSQ0VTID0gbGliNTI1LmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCitsaWI1MjZfU09VUkNFUyA9IGxpYjUyNi5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorbGliNTI2X0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURMSUI1MjYKK2xpYjUyN19TT1VSQ0VTID0gbGliNTI2LmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCitsaWI1MjdfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRExJQjUyNworbGliNTI5X1NPVVJDRVMgPSBsaWI1MjUuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKK2xpYjUyOV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1ETElCNTI5CitsaWI1MzBfU09VUkNFUyA9IGxpYjUzMC5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorbGliNTMwX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURMSUI1MzAKK2xpYjUzMl9TT1VSQ0VTID0gbGliNTI2LmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCitsaWI1MzJfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRExJQjUzMgorbGliNTMzX1NPVVJDRVMgPSBsaWI1MzMuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKK2xpYjUzNl9TT1VSQ0VTID0gbGliNTM2LmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCitsaWI1MzdfU09VUkNFUyA9IGxpYjUzNy5jICQoU1VQUE9SVEZJTEVTKSAkKFdBUk5MRVNTKQorbGliNTM5X1NPVVJDRVMgPSBsaWI1MzkuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjU0MF9TT1VSQ0VTID0gbGliNTQwLmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCitsaWI1NDFfU09VUkNFUyA9IGxpYjU0MS5jICQoU1VQUE9SVEZJTEVTKQorbGliNTQyX1NPVVJDRVMgPSBsaWI1NDIuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjU0M19TT1VSQ0VTID0gbGliNTQzLmMgJChTVVBQT1JURklMRVMpCitsaWI1NDRfU09VUkNFUyA9IGxpYjU0NC5jICQoU1VQUE9SVEZJTEVTKQorbGliNTQ1X1NPVVJDRVMgPSBsaWI1NDQuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjU0NV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1ETElCNTQ1CitsaWI1NDdfU09VUkNFUyA9IGxpYjU0Ny5jICQoU1VQUE9SVEZJTEVTKQorbGliNTQ4X1NPVVJDRVMgPSBsaWI1NDcuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjU0OF9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1ETElCNTQ4CitsaWI1NDlfU09VUkNFUyA9IGxpYjU0OS5jICQoU1VQUE9SVEZJTEVTKQorbGliNTU1X1NPVVJDRVMgPSBsaWI1NTUuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKK2xpYjU1Ml9TT1VSQ0VTID0gbGliNTUyLmMgJChTVVBQT1JURklMRVMpICQoV0FSTkxFU1MpCitsaWI1NTNfU09VUkNFUyA9IGxpYjU1My5jICQoU1VQUE9SVEZJTEVTKQorbGliNTU0X1NPVVJDRVMgPSBsaWI1NTQuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjU1Nl9TT1VSQ0VTID0gbGliNTU2LmMgJChTVVBQT1JURklMRVMpCitsaWI1NTdfU09VUkNFUyA9IGxpYjU1Ny5jICQoU1VQUE9SVEZJTEVTKQorbGliNTYwX1NPVVJDRVMgPSBsaWI1NjAuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKK2xpYjU3NF9TT1VSQ0VTID0gbGliNTc0LmMgJChTVVBQT1JURklMRVMpCitsaWI1NzVfU09VUkNFUyA9IGxpYjU3NS5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorbGliNTc2X1NPVVJDRVMgPSBsaWI1NzYuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjU2Ml9TT1VSQ0VTID0gbGliNTYyLmMgJChTVVBQT1JURklMRVMpCitsaWI1NjRfU09VUkNFUyA9IGxpYjU2NC5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorbGliNTY1X1NPVVJDRVMgPSBsaWI1MTAuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjU2NV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1ETElCNTY1CitsaWI1NjZfU09VUkNFUyA9IGxpYjU2Ni5jICQoU1VQUE9SVEZJTEVTKQorbGliNTY3X1NPVVJDRVMgPSBsaWI1NjcuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjU2OF9TT1VSQ0VTID0gbGliNTY4LmMgJChTVVBQT1JURklMRVMpCitsaWI1NjlfU09VUkNFUyA9IGxpYjU2OS5jICQoU1VQUE9SVEZJTEVTKQorbGliNTcwX1NPVVJDRVMgPSBsaWI1NzAuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjU3MV9TT1VSQ0VTID0gbGliNTcxLmMgJChTVVBQT1JURklMRVMpICQoV0FSTkxFU1MpCitsaWI1NzJfU09VUkNFUyA9IGxpYjU3Mi5jICQoU1VQUE9SVEZJTEVTKQorbGliNTczX1NPVVJDRVMgPSBsaWI1NzMuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykgJChUU1RUUkFDRSkKK2xpYjU3OF9TT1VSQ0VTID0gbGliNTc4LmMgJChTVVBQT1JURklMRVMpCitsaWI1NzlfU09VUkNFUyA9IGxpYjU3OS5jICQoU1VQUE9SVEZJTEVTKQorbGliNTgyX1NPVVJDRVMgPSBsaWI1ODIuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKK2xpYjU4M19TT1VSQ0VTID0gbGliNTgzLmMgJChTVVBQT1JURklMRVMpCitsaWI1ODVfU09VUkNFUyA9IGxpYjUwMC5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFRTVFRSQUNFKQorbGliNTg1X0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURMSUI1ODUKK2xpYjU4Nl9TT1VSQ0VTID0gbGliNTg2LmMgJChTVVBQT1JURklMRVMpCitsaWI1ODdfU09VUkNFUyA9IGxpYjU1NC5jICQoU1VQUE9SVEZJTEVTKQorbGliNTg3X0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURMSUI1ODcKK2xpYjU5MF9TT1VSQ0VTID0gbGliNTkwLmMgJChTVVBQT1JURklMRVMpCitsaWI1OTFfU09VUkNFUyA9IGxpYjU5MS5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorbGliNTk3X1NPVVJDRVMgPSBsaWI1OTcuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKK2xpYjU5OF9TT1VSQ0VTID0gbGliNTk4LmMgJChTVVBQT1JURklMRVMpCitAQlVJTERfTElCSE9TVE5BTUVfRkFMU0VAbm9pbnN0X0xUTElCUkFSSUVTID0gCisKKyMgTWFrZWZpbGUuaW5jIHByb3ZpZGVzIHRoZSBzb3VyY2UgZGVmaW5lcyAoVEVTVFVUSUwsIFNVUFBPUlRGSUxFUywKKyMgbm9pbnN0X1BST0dSQU1TLCBsaWIqX1NPVVJDRVMsIGFuZCBsaWIqX0NGTEFHUykKKworIyBQcmVsb2FkaW5nIG9mIGxpYmhvc3RuYW1lIGFsbG93cyBob3N0IG5hbWUgb3ZlcnJpZGluZywKKyMgdGhpcyBpcyB1c2VkIHRvIG1ha2Ugc29tZSB0ZXN0cyBtYWNoaW5lIGluZGVwZW5kZW50LgorQEJVSUxEX0xJQkhPU1ROQU1FX1RSVUVAbm9pbnN0X0xUTElCUkFSSUVTID0gbGliaG9zdG5hbWUubGEKKworIyBUaGUgLW5vLXVuZGVmaW5lZCBmbGFnIGlzIGNydWNpYWwgdG8gYnVpbGQgZmluZSBvbiBzb21lIHBsYXRmb3JtcworQE5PX1VOREVGSU5FRF9UUlVFQFVOREVGID0gLW5vLXVuZGVmaW5lZAorbGliaG9zdG5hbWVfbGFfU09VUkNFUyA9IHNldGhvc3RuYW1lLmMgc2V0aG9zdG5hbWUuaAorbGliaG9zdG5hbWVfbGFfTElCQUREID0gCitsaWJob3N0bmFtZV9sYV9ERVBFTkRFTkNJRVMgPSAKK2xpYmhvc3RuYW1lX2xhX0xERkxBR1MgPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uICQoVU5ERUYpIC1ycGF0aCAvbm93aGVyZQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW5jICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICB0ZXN0cy9saWJ0ZXN0L01ha2VmaWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICB0ZXN0cy9saWJ0ZXN0L01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK2NsZWFuLW5vaW5zdExUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKG5vaW5zdF9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xUTElCUkFSSUVTKQorCUBsaXN0PSckKG5vaW5zdF9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmhvc3RuYW1lLmxhOiAkKGxpYmhvc3RuYW1lX2xhX09CSkVDVFMpICQobGliaG9zdG5hbWVfbGFfREVQRU5ERU5DSUVTKSAKKwkkKExJTkspICQoYW1fbGliaG9zdG5hbWVfbGFfcnBhdGgpICQobGliaG9zdG5hbWVfbGFfTERGTEFHUykgJChsaWJob3N0bmFtZV9sYV9PQkpFQ1RTKSAkKGxpYmhvc3RuYW1lX2xhX0xJQkFERCkgJChMSUJTKQorCitjbGVhbi1ub2luc3RQUk9HUkFNUzoKKwlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBmPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJICBlY2hvICIgcm0gLWYgJCRwICQkZiI7IFwKKwkgIHJtIC1mICQkcCAkJGYgOyBcCisJZG9uZQorY2hraG9zdG5hbWUkKEVYRUVYVCk6ICQoY2hraG9zdG5hbWVfT0JKRUNUUykgJChjaGtob3N0bmFtZV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBjaGtob3N0bmFtZSQoRVhFRVhUKQorCSQoTElOSykgJChjaGtob3N0bmFtZV9MREZMQUdTKSAkKGNoa2hvc3RuYW1lX09CSkVDVFMpICQoY2hraG9zdG5hbWVfTERBREQpICQoTElCUykKK2xpYjUwMCQoRVhFRVhUKTogJChsaWI1MDBfT0JKRUNUUykgJChsaWI1MDBfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTAwJChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjUwMF9MREZMQUdTKSAkKGxpYjUwMF9PQkpFQ1RTKSAkKGxpYjUwMF9MREFERCkgJChMSUJTKQorbGliNTAxJChFWEVFWFQpOiAkKGxpYjUwMV9PQkpFQ1RTKSAkKGxpYjUwMV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1MDEkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTAxX0xERkxBR1MpICQobGliNTAxX09CSkVDVFMpICQobGliNTAxX0xEQUREKSAkKExJQlMpCitsaWI1MDIkKEVYRUVYVCk6ICQobGliNTAyX09CSkVDVFMpICQobGliNTAyX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjUwMiQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1MDJfTERGTEFHUykgJChsaWI1MDJfT0JKRUNUUykgJChsaWI1MDJfTERBREQpICQoTElCUykKK2xpYjUwMyQoRVhFRVhUKTogJChsaWI1MDNfT0JKRUNUUykgJChsaWI1MDNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTAzJChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjUwM19MREZMQUdTKSAkKGxpYjUwM19PQkpFQ1RTKSAkKGxpYjUwM19MREFERCkgJChMSUJTKQorbGliNTA0JChFWEVFWFQpOiAkKGxpYjUwNF9PQkpFQ1RTKSAkKGxpYjUwNF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1MDQkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTA0X0xERkxBR1MpICQobGliNTA0X09CSkVDVFMpICQobGliNTA0X0xEQUREKSAkKExJQlMpCitsaWI1MDUkKEVYRUVYVCk6ICQobGliNTA1X09CSkVDVFMpICQobGliNTA1X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjUwNSQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1MDVfTERGTEFHUykgJChsaWI1MDVfT0JKRUNUUykgJChsaWI1MDVfTERBREQpICQoTElCUykKK2xpYjUwNiQoRVhFRVhUKTogJChsaWI1MDZfT0JKRUNUUykgJChsaWI1MDZfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTA2JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjUwNl9MREZMQUdTKSAkKGxpYjUwNl9PQkpFQ1RTKSAkKGxpYjUwNl9MREFERCkgJChMSUJTKQorbGliNTA3JChFWEVFWFQpOiAkKGxpYjUwN19PQkpFQ1RTKSAkKGxpYjUwN19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1MDckKEVYRUVYVCkKKwkkKExJTkspICQobGliNTA3X0xERkxBR1MpICQobGliNTA3X09CSkVDVFMpICQobGliNTA3X0xEQUREKSAkKExJQlMpCitsaWI1MDgkKEVYRUVYVCk6ICQobGliNTA4X09CSkVDVFMpICQobGliNTA4X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjUwOCQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1MDhfTERGTEFHUykgJChsaWI1MDhfT0JKRUNUUykgJChsaWI1MDhfTERBREQpICQoTElCUykKK2xpYjUxMCQoRVhFRVhUKTogJChsaWI1MTBfT0JKRUNUUykgJChsaWI1MTBfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTEwJChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjUxMF9MREZMQUdTKSAkKGxpYjUxMF9PQkpFQ1RTKSAkKGxpYjUxMF9MREFERCkgJChMSUJTKQorbGliNTExJChFWEVFWFQpOiAkKGxpYjUxMV9PQkpFQ1RTKSAkKGxpYjUxMV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1MTEkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTExX0xERkxBR1MpICQobGliNTExX09CSkVDVFMpICQobGliNTExX0xEQUREKSAkKExJQlMpCitsaWI1MTIkKEVYRUVYVCk6ICQobGliNTEyX09CSkVDVFMpICQobGliNTEyX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjUxMiQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1MTJfTERGTEFHUykgJChsaWI1MTJfT0JKRUNUUykgJChsaWI1MTJfTERBREQpICQoTElCUykKK2xpYjUxMyQoRVhFRVhUKTogJChsaWI1MTNfT0JKRUNUUykgJChsaWI1MTNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTEzJChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjUxM19MREZMQUdTKSAkKGxpYjUxM19PQkpFQ1RTKSAkKGxpYjUxM19MREFERCkgJChMSUJTKQorbGliNTE0JChFWEVFWFQpOiAkKGxpYjUxNF9PQkpFQ1RTKSAkKGxpYjUxNF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1MTQkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTE0X0xERkxBR1MpICQobGliNTE0X09CSkVDVFMpICQobGliNTE0X0xEQUREKSAkKExJQlMpCitsaWI1MTUkKEVYRUVYVCk6ICQobGliNTE1X09CSkVDVFMpICQobGliNTE1X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjUxNSQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1MTVfTERGTEFHUykgJChsaWI1MTVfT0JKRUNUUykgJChsaWI1MTVfTERBREQpICQoTElCUykKK2xpYjUxNiQoRVhFRVhUKTogJChsaWI1MTZfT0JKRUNUUykgJChsaWI1MTZfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTE2JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjUxNl9MREZMQUdTKSAkKGxpYjUxNl9PQkpFQ1RTKSAkKGxpYjUxNl9MREFERCkgJChMSUJTKQorbGliNTE3JChFWEVFWFQpOiAkKGxpYjUxN19PQkpFQ1RTKSAkKGxpYjUxN19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1MTckKEVYRUVYVCkKKwkkKExJTkspICQobGliNTE3X0xERkxBR1MpICQobGliNTE3X09CSkVDVFMpICQobGliNTE3X0xEQUREKSAkKExJQlMpCitsaWI1MTgkKEVYRUVYVCk6ICQobGliNTE4X09CSkVDVFMpICQobGliNTE4X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjUxOCQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1MThfTERGTEFHUykgJChsaWI1MThfT0JKRUNUUykgJChsaWI1MThfTERBREQpICQoTElCUykKK2xpYjUxOSQoRVhFRVhUKTogJChsaWI1MTlfT0JKRUNUUykgJChsaWI1MTlfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTE5JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjUxOV9MREZMQUdTKSAkKGxpYjUxOV9PQkpFQ1RTKSAkKGxpYjUxOV9MREFERCkgJChMSUJTKQorbGliNTIwJChFWEVFWFQpOiAkKGxpYjUyMF9PQkpFQ1RTKSAkKGxpYjUyMF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1MjAkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTIwX0xERkxBR1MpICQobGliNTIwX09CSkVDVFMpICQobGliNTIwX0xEQUREKSAkKExJQlMpCitsaWI1MjEkKEVYRUVYVCk6ICQobGliNTIxX09CSkVDVFMpICQobGliNTIxX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjUyMSQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1MjFfTERGTEFHUykgJChsaWI1MjFfT0JKRUNUUykgJChsaWI1MjFfTERBREQpICQoTElCUykKK2xpYjUyMyQoRVhFRVhUKTogJChsaWI1MjNfT0JKRUNUUykgJChsaWI1MjNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTIzJChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjUyM19MREZMQUdTKSAkKGxpYjUyM19PQkpFQ1RTKSAkKGxpYjUyM19MREFERCkgJChMSUJTKQorbGliNTI0JChFWEVFWFQpOiAkKGxpYjUyNF9PQkpFQ1RTKSAkKGxpYjUyNF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1MjQkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTI0X0xERkxBR1MpICQobGliNTI0X09CSkVDVFMpICQobGliNTI0X0xEQUREKSAkKExJQlMpCitsaWI1MjUkKEVYRUVYVCk6ICQobGliNTI1X09CSkVDVFMpICQobGliNTI1X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjUyNSQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1MjVfTERGTEFHUykgJChsaWI1MjVfT0JKRUNUUykgJChsaWI1MjVfTERBREQpICQoTElCUykKK2xpYjUyNiQoRVhFRVhUKTogJChsaWI1MjZfT0JKRUNUUykgJChsaWI1MjZfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTI2JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjUyNl9MREZMQUdTKSAkKGxpYjUyNl9PQkpFQ1RTKSAkKGxpYjUyNl9MREFERCkgJChMSUJTKQorbGliNTI3JChFWEVFWFQpOiAkKGxpYjUyN19PQkpFQ1RTKSAkKGxpYjUyN19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1MjckKEVYRUVYVCkKKwkkKExJTkspICQobGliNTI3X0xERkxBR1MpICQobGliNTI3X09CSkVDVFMpICQobGliNTI3X0xEQUREKSAkKExJQlMpCitsaWI1MjkkKEVYRUVYVCk6ICQobGliNTI5X09CSkVDVFMpICQobGliNTI5X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjUyOSQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1MjlfTERGTEFHUykgJChsaWI1MjlfT0JKRUNUUykgJChsaWI1MjlfTERBREQpICQoTElCUykKK2xpYjUzMCQoRVhFRVhUKTogJChsaWI1MzBfT0JKRUNUUykgJChsaWI1MzBfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTMwJChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjUzMF9MREZMQUdTKSAkKGxpYjUzMF9PQkpFQ1RTKSAkKGxpYjUzMF9MREFERCkgJChMSUJTKQorbGliNTMyJChFWEVFWFQpOiAkKGxpYjUzMl9PQkpFQ1RTKSAkKGxpYjUzMl9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1MzIkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTMyX0xERkxBR1MpICQobGliNTMyX09CSkVDVFMpICQobGliNTMyX0xEQUREKSAkKExJQlMpCitsaWI1MzMkKEVYRUVYVCk6ICQobGliNTMzX09CSkVDVFMpICQobGliNTMzX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjUzMyQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1MzNfTERGTEFHUykgJChsaWI1MzNfT0JKRUNUUykgJChsaWI1MzNfTERBREQpICQoTElCUykKK2xpYjUzNiQoRVhFRVhUKTogJChsaWI1MzZfT0JKRUNUUykgJChsaWI1MzZfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTM2JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjUzNl9MREZMQUdTKSAkKGxpYjUzNl9PQkpFQ1RTKSAkKGxpYjUzNl9MREFERCkgJChMSUJTKQorbGliNTM3JChFWEVFWFQpOiAkKGxpYjUzN19PQkpFQ1RTKSAkKGxpYjUzN19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1MzckKEVYRUVYVCkKKwkkKExJTkspICQobGliNTM3X0xERkxBR1MpICQobGliNTM3X09CSkVDVFMpICQobGliNTM3X0xEQUREKSAkKExJQlMpCitsaWI1MzkkKEVYRUVYVCk6ICQobGliNTM5X09CSkVDVFMpICQobGliNTM5X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjUzOSQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1MzlfTERGTEFHUykgJChsaWI1MzlfT0JKRUNUUykgJChsaWI1MzlfTERBREQpICQoTElCUykKK2xpYjU0MCQoRVhFRVhUKTogJChsaWI1NDBfT0JKRUNUUykgJChsaWI1NDBfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTQwJChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU0MF9MREZMQUdTKSAkKGxpYjU0MF9PQkpFQ1RTKSAkKGxpYjU0MF9MREFERCkgJChMSUJTKQorbGliNTQxJChFWEVFWFQpOiAkKGxpYjU0MV9PQkpFQ1RTKSAkKGxpYjU0MV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1NDEkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTQxX0xERkxBR1MpICQobGliNTQxX09CSkVDVFMpICQobGliNTQxX0xEQUREKSAkKExJQlMpCitsaWI1NDIkKEVYRUVYVCk6ICQobGliNTQyX09CSkVDVFMpICQobGliNTQyX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU0MiQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1NDJfTERGTEFHUykgJChsaWI1NDJfT0JKRUNUUykgJChsaWI1NDJfTERBREQpICQoTElCUykKK2xpYjU0MyQoRVhFRVhUKTogJChsaWI1NDNfT0JKRUNUUykgJChsaWI1NDNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTQzJChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU0M19MREZMQUdTKSAkKGxpYjU0M19PQkpFQ1RTKSAkKGxpYjU0M19MREFERCkgJChMSUJTKQorbGliNTQ0JChFWEVFWFQpOiAkKGxpYjU0NF9PQkpFQ1RTKSAkKGxpYjU0NF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1NDQkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTQ0X0xERkxBR1MpICQobGliNTQ0X09CSkVDVFMpICQobGliNTQ0X0xEQUREKSAkKExJQlMpCitsaWI1NDUkKEVYRUVYVCk6ICQobGliNTQ1X09CSkVDVFMpICQobGliNTQ1X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU0NSQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1NDVfTERGTEFHUykgJChsaWI1NDVfT0JKRUNUUykgJChsaWI1NDVfTERBREQpICQoTElCUykKK2xpYjU0NyQoRVhFRVhUKTogJChsaWI1NDdfT0JKRUNUUykgJChsaWI1NDdfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTQ3JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU0N19MREZMQUdTKSAkKGxpYjU0N19PQkpFQ1RTKSAkKGxpYjU0N19MREFERCkgJChMSUJTKQorbGliNTQ4JChFWEVFWFQpOiAkKGxpYjU0OF9PQkpFQ1RTKSAkKGxpYjU0OF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1NDgkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTQ4X0xERkxBR1MpICQobGliNTQ4X09CSkVDVFMpICQobGliNTQ4X0xEQUREKSAkKExJQlMpCitsaWI1NDkkKEVYRUVYVCk6ICQobGliNTQ5X09CSkVDVFMpICQobGliNTQ5X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU0OSQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1NDlfTERGTEFHUykgJChsaWI1NDlfT0JKRUNUUykgJChsaWI1NDlfTERBREQpICQoTElCUykKK2xpYjU1MiQoRVhFRVhUKTogJChsaWI1NTJfT0JKRUNUUykgJChsaWI1NTJfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTUyJChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU1Ml9MREZMQUdTKSAkKGxpYjU1Ml9PQkpFQ1RTKSAkKGxpYjU1Ml9MREFERCkgJChMSUJTKQorbGliNTUzJChFWEVFWFQpOiAkKGxpYjU1M19PQkpFQ1RTKSAkKGxpYjU1M19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1NTMkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTUzX0xERkxBR1MpICQobGliNTUzX09CSkVDVFMpICQobGliNTUzX0xEQUREKSAkKExJQlMpCitsaWI1NTQkKEVYRUVYVCk6ICQobGliNTU0X09CSkVDVFMpICQobGliNTU0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU1NCQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1NTRfTERGTEFHUykgJChsaWI1NTRfT0JKRUNUUykgJChsaWI1NTRfTERBREQpICQoTElCUykKK2xpYjU1NSQoRVhFRVhUKTogJChsaWI1NTVfT0JKRUNUUykgJChsaWI1NTVfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTU1JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU1NV9MREZMQUdTKSAkKGxpYjU1NV9PQkpFQ1RTKSAkKGxpYjU1NV9MREFERCkgJChMSUJTKQorbGliNTU2JChFWEVFWFQpOiAkKGxpYjU1Nl9PQkpFQ1RTKSAkKGxpYjU1Nl9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1NTYkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTU2X0xERkxBR1MpICQobGliNTU2X09CSkVDVFMpICQobGliNTU2X0xEQUREKSAkKExJQlMpCitsaWI1NTckKEVYRUVYVCk6ICQobGliNTU3X09CSkVDVFMpICQobGliNTU3X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU1NyQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1NTdfTERGTEFHUykgJChsaWI1NTdfT0JKRUNUUykgJChsaWI1NTdfTERBREQpICQoTElCUykKK2xpYjU2MCQoRVhFRVhUKTogJChsaWI1NjBfT0JKRUNUUykgJChsaWI1NjBfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTYwJChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU2MF9MREZMQUdTKSAkKGxpYjU2MF9PQkpFQ1RTKSAkKGxpYjU2MF9MREFERCkgJChMSUJTKQorbGliNTYyJChFWEVFWFQpOiAkKGxpYjU2Ml9PQkpFQ1RTKSAkKGxpYjU2Ml9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1NjIkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTYyX0xERkxBR1MpICQobGliNTYyX09CSkVDVFMpICQobGliNTYyX0xEQUREKSAkKExJQlMpCitsaWI1NjQkKEVYRUVYVCk6ICQobGliNTY0X09CSkVDVFMpICQobGliNTY0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU2NCQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1NjRfTERGTEFHUykgJChsaWI1NjRfT0JKRUNUUykgJChsaWI1NjRfTERBREQpICQoTElCUykKK2xpYjU2NSQoRVhFRVhUKTogJChsaWI1NjVfT0JKRUNUUykgJChsaWI1NjVfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTY1JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU2NV9MREZMQUdTKSAkKGxpYjU2NV9PQkpFQ1RTKSAkKGxpYjU2NV9MREFERCkgJChMSUJTKQorbGliNTY2JChFWEVFWFQpOiAkKGxpYjU2Nl9PQkpFQ1RTKSAkKGxpYjU2Nl9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1NjYkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTY2X0xERkxBR1MpICQobGliNTY2X09CSkVDVFMpICQobGliNTY2X0xEQUREKSAkKExJQlMpCitsaWI1NjckKEVYRUVYVCk6ICQobGliNTY3X09CSkVDVFMpICQobGliNTY3X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU2NyQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1NjdfTERGTEFHUykgJChsaWI1NjdfT0JKRUNUUykgJChsaWI1NjdfTERBREQpICQoTElCUykKK2xpYjU2OCQoRVhFRVhUKTogJChsaWI1NjhfT0JKRUNUUykgJChsaWI1NjhfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTY4JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU2OF9MREZMQUdTKSAkKGxpYjU2OF9PQkpFQ1RTKSAkKGxpYjU2OF9MREFERCkgJChMSUJTKQorbGliNTY5JChFWEVFWFQpOiAkKGxpYjU2OV9PQkpFQ1RTKSAkKGxpYjU2OV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1NjkkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTY5X0xERkxBR1MpICQobGliNTY5X09CSkVDVFMpICQobGliNTY5X0xEQUREKSAkKExJQlMpCitsaWI1NzAkKEVYRUVYVCk6ICQobGliNTcwX09CSkVDVFMpICQobGliNTcwX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU3MCQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1NzBfTERGTEFHUykgJChsaWI1NzBfT0JKRUNUUykgJChsaWI1NzBfTERBREQpICQoTElCUykKK2xpYjU3MSQoRVhFRVhUKTogJChsaWI1NzFfT0JKRUNUUykgJChsaWI1NzFfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTcxJChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU3MV9MREZMQUdTKSAkKGxpYjU3MV9PQkpFQ1RTKSAkKGxpYjU3MV9MREFERCkgJChMSUJTKQorbGliNTcyJChFWEVFWFQpOiAkKGxpYjU3Ml9PQkpFQ1RTKSAkKGxpYjU3Ml9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1NzIkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTcyX0xERkxBR1MpICQobGliNTcyX09CSkVDVFMpICQobGliNTcyX0xEQUREKSAkKExJQlMpCitsaWI1NzMkKEVYRUVYVCk6ICQobGliNTczX09CSkVDVFMpICQobGliNTczX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU3MyQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1NzNfTERGTEFHUykgJChsaWI1NzNfT0JKRUNUUykgJChsaWI1NzNfTERBREQpICQoTElCUykKK2xpYjU3NCQoRVhFRVhUKTogJChsaWI1NzRfT0JKRUNUUykgJChsaWI1NzRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTc0JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU3NF9MREZMQUdTKSAkKGxpYjU3NF9PQkpFQ1RTKSAkKGxpYjU3NF9MREFERCkgJChMSUJTKQorbGliNTc1JChFWEVFWFQpOiAkKGxpYjU3NV9PQkpFQ1RTKSAkKGxpYjU3NV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1NzUkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTc1X0xERkxBR1MpICQobGliNTc1X09CSkVDVFMpICQobGliNTc1X0xEQUREKSAkKExJQlMpCitsaWI1NzYkKEVYRUVYVCk6ICQobGliNTc2X09CSkVDVFMpICQobGliNTc2X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU3NiQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1NzZfTERGTEFHUykgJChsaWI1NzZfT0JKRUNUUykgJChsaWI1NzZfTERBREQpICQoTElCUykKK2xpYjU3OCQoRVhFRVhUKTogJChsaWI1NzhfT0JKRUNUUykgJChsaWI1NzhfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTc4JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU3OF9MREZMQUdTKSAkKGxpYjU3OF9PQkpFQ1RTKSAkKGxpYjU3OF9MREFERCkgJChMSUJTKQorbGliNTc5JChFWEVFWFQpOiAkKGxpYjU3OV9PQkpFQ1RTKSAkKGxpYjU3OV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1NzkkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTc5X0xERkxBR1MpICQobGliNTc5X09CSkVDVFMpICQobGliNTc5X0xEQUREKSAkKExJQlMpCitsaWI1ODIkKEVYRUVYVCk6ICQobGliNTgyX09CSkVDVFMpICQobGliNTgyX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU4MiQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1ODJfTERGTEFHUykgJChsaWI1ODJfT0JKRUNUUykgJChsaWI1ODJfTERBREQpICQoTElCUykKK2xpYjU4MyQoRVhFRVhUKTogJChsaWI1ODNfT0JKRUNUUykgJChsaWI1ODNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTgzJChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU4M19MREZMQUdTKSAkKGxpYjU4M19PQkpFQ1RTKSAkKGxpYjU4M19MREFERCkgJChMSUJTKQorbGliNTg1JChFWEVFWFQpOiAkKGxpYjU4NV9PQkpFQ1RTKSAkKGxpYjU4NV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1ODUkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTg1X0xERkxBR1MpICQobGliNTg1X09CSkVDVFMpICQobGliNTg1X0xEQUREKSAkKExJQlMpCitsaWI1ODYkKEVYRUVYVCk6ICQobGliNTg2X09CSkVDVFMpICQobGliNTg2X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU4NiQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1ODZfTERGTEFHUykgJChsaWI1ODZfT0JKRUNUUykgJChsaWI1ODZfTERBREQpICQoTElCUykKK2xpYjU4NyQoRVhFRVhUKTogJChsaWI1ODdfT0JKRUNUUykgJChsaWI1ODdfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTg3JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU4N19MREZMQUdTKSAkKGxpYjU4N19PQkpFQ1RTKSAkKGxpYjU4N19MREFERCkgJChMSUJTKQorbGliNTkwJChFWEVFWFQpOiAkKGxpYjU5MF9PQkpFQ1RTKSAkKGxpYjU5MF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1OTAkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTkwX0xERkxBR1MpICQobGliNTkwX09CSkVDVFMpICQobGliNTkwX0xEQUREKSAkKExJQlMpCitsaWI1OTEkKEVYRUVYVCk6ICQobGliNTkxX09CSkVDVFMpICQobGliNTkxX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxpYjU5MSQoRVhFRVhUKQorCSQoTElOSykgJChsaWI1OTFfTERGTEFHUykgJChsaWI1OTFfT0JKRUNUUykgJChsaWI1OTFfTERBREQpICQoTElCUykKK2xpYjU5NyQoRVhFRVhUKTogJChsaWI1OTdfT0JKRUNUUykgJChsaWI1OTdfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbGliNTk3JChFWEVFWFQpCisJJChMSU5LKSAkKGxpYjU5N19MREZMQUdTKSAkKGxpYjU5N19PQkpFQ1RTKSAkKGxpYjU5N19MREFERCkgJChMSUJTKQorbGliNTk4JChFWEVFWFQpOiAkKGxpYjU5OF9PQkpFQ1RTKSAkKGxpYjU5OF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBsaWI1OTgkKEVYRUVYVCkKKwkkKExJTkspICQobGliNTk4X0xERkxBR1MpICQobGliNTk4X09CSkVDVFMpICQobGliNTk4X0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jaGtob3N0bmFtZS1jaGtob3N0bmFtZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2hraG9zdG5hbWUtY3VybF9nZXRob3N0bmFtZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmlyc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUwMC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTAxLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1MDIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUwMy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTA0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1MDUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUwNi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTA3LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1MDguUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUxMC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTExLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1MTIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUxMy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTE0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1MTUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUxNi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTE3LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1MTguUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUxOS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTIwLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1MjEuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUyMy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTI0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1MjUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUyNi1maXJzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTI2LWxpYjUyNi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTI2LXRlc3R1dGlsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1MjYtd2Fybmxlc3MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUyNy1maXJzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTI3LWxpYjUyNi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTI3LXRlc3R1dGlsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1Mjctd2Fybmxlc3MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUyOS1maXJzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTI5LWxpYjUyNS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTI5LXRlc3R1dGlsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1Mjktd2Fybmxlc3MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUzMC1maXJzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTMwLWxpYjUzMC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTMwLXRlc3R1dGlsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1MzAtd2Fybmxlc3MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUzMi1maXJzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTMyLWxpYjUyNi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTMyLXRlc3R1dGlsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1MzItd2Fybmxlc3MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUzMy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTM2LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1MzcuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjUzOS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTQwLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1NDEuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU0Mi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTQzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1NDQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU0NS1maXJzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTQ1LWxpYjU0NC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTQ3LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1NDgtZmlyc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU0OC1saWI1NDcuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU0OS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTUyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1NTMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU1NC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTU1LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1NTYuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU1Ny5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTYwLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1NjIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU2NC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTY1LWZpcnN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1NjUtbGliNTEwLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1NjYuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU2Ny5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTY4LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1NjkuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU3MC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTcxLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1NzIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU3My5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTc0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1NzUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU3Ni5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTc4LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1NzkuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU4Mi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTgzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1ODUtZmlyc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU4NS1saWI1MDAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU4NS10ZXN0dHJhY2UuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU4NS10ZXN0dXRpbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTg2LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1ODctZmlyc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU4Ny1saWI1NTQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU5MC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliNTkxLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWI1OTcuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYjU5OC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2V0aG9zdG5hbWUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90ZXN0dHJhY2UuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rlc3R1dGlsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93YXJubGVzcy5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2A7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBsbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitjaGtob3N0bmFtZS1jaGtob3N0bmFtZS5vOiBjaGtob3N0bmFtZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjaGtob3N0bmFtZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY2hraG9zdG5hbWUtY2hraG9zdG5hbWUubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2Noa2hvc3RuYW1lLWNoa2hvc3RuYW1lLlRwbyIgLWMgLW8gY2hraG9zdG5hbWUtY2hraG9zdG5hbWUubyBgdGVzdCAtZiAnY2hraG9zdG5hbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hraG9zdG5hbWUuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2Noa2hvc3RuYW1lLWNoa2hvc3RuYW1lLlRwbyIgIiQoREVQRElSKS9jaGtob3N0bmFtZS1jaGtob3N0bmFtZS5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9jaGtob3N0bmFtZS1jaGtob3N0bmFtZS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdjaGtob3N0bmFtZS5jJyBvYmplY3Q9J2Noa2hvc3RuYW1lLWNoa2hvc3RuYW1lLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNoa2hvc3RuYW1lX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNoa2hvc3RuYW1lLWNoa2hvc3RuYW1lLm8gYHRlc3QgLWYgJ2Noa2hvc3RuYW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoa2hvc3RuYW1lLmMKKworY2hraG9zdG5hbWUtY2hraG9zdG5hbWUub2JqOiBjaGtob3N0bmFtZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjaGtob3N0bmFtZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY2hraG9zdG5hbWUtY2hraG9zdG5hbWUub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvY2hraG9zdG5hbWUtY2hraG9zdG5hbWUuVHBvIiAtYyAtbyBjaGtob3N0bmFtZS1jaGtob3N0bmFtZS5vYmogYGlmIHRlc3QgLWYgJ2Noa2hvc3RuYW1lLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY2hraG9zdG5hbWUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvY2hraG9zdG5hbWUuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2Noa2hvc3RuYW1lLWNoa2hvc3RuYW1lLlRwbyIgIiQoREVQRElSKS9jaGtob3N0bmFtZS1jaGtob3N0bmFtZS5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9jaGtob3N0bmFtZS1jaGtob3N0bmFtZS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdjaGtob3N0bmFtZS5jJyBvYmplY3Q9J2Noa2hvc3RuYW1lLWNoa2hvc3RuYW1lLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2hraG9zdG5hbWVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY2hraG9zdG5hbWUtY2hraG9zdG5hbWUub2JqIGBpZiB0ZXN0IC1mICdjaGtob3N0bmFtZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2Noa2hvc3RuYW1lLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2Noa2hvc3RuYW1lLmMnOyBmaWAKKworY2hraG9zdG5hbWUtY3VybF9nZXRob3N0bmFtZS5vOiAkKHRvcF9zcmNkaXIpL2xpYi9jdXJsX2dldGhvc3RuYW1lLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNoa2hvc3RuYW1lX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjaGtob3N0bmFtZS1jdXJsX2dldGhvc3RuYW1lLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9jaGtob3N0bmFtZS1jdXJsX2dldGhvc3RuYW1lLlRwbyIgLWMgLW8gY2hraG9zdG5hbWUtY3VybF9nZXRob3N0bmFtZS5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9jdXJsX2dldGhvc3RuYW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL2N1cmxfZ2V0aG9zdG5hbWUuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2Noa2hvc3RuYW1lLWN1cmxfZ2V0aG9zdG5hbWUuVHBvIiAiJChERVBESVIpL2Noa2hvc3RuYW1lLWN1cmxfZ2V0aG9zdG5hbWUuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvY2hraG9zdG5hbWUtY3VybF9nZXRob3N0bmFtZS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9jdXJsX2dldGhvc3RuYW1lLmMnIG9iamVjdD0nY2hraG9zdG5hbWUtY3VybF9nZXRob3N0bmFtZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjaGtob3N0bmFtZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjaGtob3N0bmFtZS1jdXJsX2dldGhvc3RuYW1lLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL2N1cmxfZ2V0aG9zdG5hbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvY3VybF9nZXRob3N0bmFtZS5jCisKK2Noa2hvc3RuYW1lLWN1cmxfZ2V0aG9zdG5hbWUub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9jdXJsX2dldGhvc3RuYW1lLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNoa2hvc3RuYW1lX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjaGtob3N0bmFtZS1jdXJsX2dldGhvc3RuYW1lLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2Noa2hvc3RuYW1lLWN1cmxfZ2V0aG9zdG5hbWUuVHBvIiAtYyAtbyBjaGtob3N0bmFtZS1jdXJsX2dldGhvc3RuYW1lLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvY3VybF9nZXRob3N0bmFtZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL2N1cmxfZ2V0aG9zdG5hbWUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvY3VybF9nZXRob3N0bmFtZS5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvY2hraG9zdG5hbWUtY3VybF9nZXRob3N0bmFtZS5UcG8iICIkKERFUERJUikvY2hraG9zdG5hbWUtY3VybF9nZXRob3N0bmFtZS5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9jaGtob3N0bmFtZS1jdXJsX2dldGhvc3RuYW1lLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL2N1cmxfZ2V0aG9zdG5hbWUuYycgb2JqZWN0PSdjaGtob3N0bmFtZS1jdXJsX2dldGhvc3RuYW1lLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2hraG9zdG5hbWVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY2hraG9zdG5hbWUtY3VybF9nZXRob3N0bmFtZS5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL2N1cmxfZ2V0aG9zdG5hbWUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9jdXJsX2dldGhvc3RuYW1lLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL2N1cmxfZ2V0aG9zdG5hbWUuYyc7IGZpYAorCit3YXJubGVzcy5vOiAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgd2Fybmxlc3MubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3dhcm5sZXNzLlRwbyIgLWMgLW8gd2Fybmxlc3MubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3dhcm5sZXNzLlRwbyIgIiQoREVQRElSKS93YXJubGVzcy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS93YXJubGVzcy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyBvYmplY3Q9J3dhcm5sZXNzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHdhcm5sZXNzLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKKword2Fybmxlc3Mub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgd2Fybmxlc3Mub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvd2Fybmxlc3MuVHBvIiAtYyAtbyB3YXJubGVzcy5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3dhcm5sZXNzLlRwbyIgIiQoREVQRElSKS93YXJubGVzcy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS93YXJubGVzcy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyBvYmplY3Q9J3dhcm5sZXNzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gd2Fybmxlc3Mub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBmaWAKKworbGliNTI2LWxpYjUyNi5vOiBsaWI1MjYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI2X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MjYtbGliNTI2Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1MjYtbGliNTI2LlRwbyIgLWMgLW8gbGliNTI2LWxpYjUyNi5vIGB0ZXN0IC1mICdsaWI1MjYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGliNTI2LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MjYtbGliNTI2LlRwbyIgIiQoREVQRElSKS9saWI1MjYtbGliNTI2LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUyNi1saWI1MjYuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGliNTI2LmMnIG9iamVjdD0nbGliNTI2LWxpYjUyNi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjZfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTI2LWxpYjUyNi5vIGB0ZXN0IC1mICdsaWI1MjYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGliNTI2LmMKKworbGliNTI2LWxpYjUyNi5vYmo6IGxpYjUyNi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjZfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUyNi1saWI1MjYub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTI2LWxpYjUyNi5UcG8iIC1jIC1vIGxpYjUyNi1saWI1MjYub2JqIGBpZiB0ZXN0IC1mICdsaWI1MjYuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWI1MjYuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGliNTI2LmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MjYtbGliNTI2LlRwbyIgIiQoREVQRElSKS9saWI1MjYtbGliNTI2LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUyNi1saWI1MjYuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGliNTI2LmMnIG9iamVjdD0nbGliNTI2LWxpYjUyNi5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyNl9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1MjYtbGliNTI2Lm9iaiBgaWYgdGVzdCAtZiAnbGliNTI2LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGliNTI2LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xpYjUyNi5jJzsgZmlgCisKK2xpYjUyNi1maXJzdC5vOiBmaXJzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjZfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUyNi1maXJzdC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTI2LWZpcnN0LlRwbyIgLWMgLW8gbGliNTI2LWZpcnN0Lm8gYHRlc3QgLWYgJ2ZpcnN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZpcnN0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MjYtZmlyc3QuVHBvIiAiJChERVBESVIpL2xpYjUyNi1maXJzdC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MjYtZmlyc3QuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZmlyc3QuYycgb2JqZWN0PSdsaWI1MjYtZmlyc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI2X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUyNi1maXJzdC5vIGB0ZXN0IC1mICdmaXJzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmaXJzdC5jCisKK2xpYjUyNi1maXJzdC5vYmo6IGZpcnN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyNl9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTI2LWZpcnN0Lm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUyNi1maXJzdC5UcG8iIC1jIC1vIGxpYjUyNi1maXJzdC5vYmogYGlmIHRlc3QgLWYgJ2ZpcnN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZmlyc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZmlyc3QuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjUyNi1maXJzdC5UcG8iICIkKERFUERJUikvbGliNTI2LWZpcnN0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUyNi1maXJzdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdmaXJzdC5jJyBvYmplY3Q9J2xpYjUyNi1maXJzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyNl9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1MjYtZmlyc3Qub2JqIGBpZiB0ZXN0IC1mICdmaXJzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2ZpcnN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2ZpcnN0LmMnOyBmaWAKKworbGliNTI2LXRlc3R1dGlsLm86IHRlc3R1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyNl9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTI2LXRlc3R1dGlsLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1MjYtdGVzdHV0aWwuVHBvIiAtYyAtbyBsaWI1MjYtdGVzdHV0aWwubyBgdGVzdCAtZiAndGVzdHV0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVzdHV0aWwuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjUyNi10ZXN0dXRpbC5UcG8iICIkKERFUERJUikvbGliNTI2LXRlc3R1dGlsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUyNi10ZXN0dXRpbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd0ZXN0dXRpbC5jJyBvYmplY3Q9J2xpYjUyNi10ZXN0dXRpbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjZfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTI2LXRlc3R1dGlsLm8gYHRlc3QgLWYgJ3Rlc3R1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlc3R1dGlsLmMKKworbGliNTI2LXRlc3R1dGlsLm9iajogdGVzdHV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI2X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MjYtdGVzdHV0aWwub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTI2LXRlc3R1dGlsLlRwbyIgLWMgLW8gbGliNTI2LXRlc3R1dGlsLm9iaiBgaWYgdGVzdCAtZiAndGVzdHV0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0ZXN0dXRpbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90ZXN0dXRpbC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTI2LXRlc3R1dGlsLlRwbyIgIiQoREVQRElSKS9saWI1MjYtdGVzdHV0aWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTI2LXRlc3R1dGlsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3Rlc3R1dGlsLmMnIG9iamVjdD0nbGliNTI2LXRlc3R1dGlsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI2X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUyNi10ZXN0dXRpbC5vYmogYGlmIHRlc3QgLWYgJ3Rlc3R1dGlsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGVzdHV0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGVzdHV0aWwuYyc7IGZpYAorCitsaWI1MjYtd2Fybmxlc3MubzogJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI2X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MjYtd2Fybmxlc3MubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUyNi13YXJubGVzcy5UcG8iIC1jIC1vIGxpYjUyNi13YXJubGVzcy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTI2LXdhcm5sZXNzLlRwbyIgIiQoREVQRElSKS9saWI1MjYtd2Fybmxlc3MuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTI2LXdhcm5sZXNzLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIG9iamVjdD0nbGliNTI2LXdhcm5sZXNzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyNl9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1MjYtd2Fybmxlc3MubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworCitsaWI1MjYtd2Fybmxlc3Mub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjZfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUyNi13YXJubGVzcy5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1MjYtd2Fybmxlc3MuVHBvIiAtYyAtbyBsaWI1MjYtd2Fybmxlc3Mub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MjYtd2Fybmxlc3MuVHBvIiAiJChERVBESVIpL2xpYjUyNi13YXJubGVzcy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MjYtd2Fybmxlc3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgb2JqZWN0PSdsaWI1MjYtd2Fybmxlc3Mub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjZfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTI2LXdhcm5sZXNzLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZmlgCisKK2xpYjUyNy1saWI1MjYubzogbGliNTI2LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyN19DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTI3LWxpYjUyNi5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTI3LWxpYjUyNi5UcG8iIC1jIC1vIGxpYjUyNy1saWI1MjYubyBgdGVzdCAtZiAnbGliNTI2LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYjUyNi5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTI3LWxpYjUyNi5UcG8iICIkKERFUERJUikvbGliNTI3LWxpYjUyNi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MjctbGliNTI2LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYjUyNi5jJyBvYmplY3Q9J2xpYjUyNy1saWI1MjYubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI3X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUyNy1saWI1MjYubyBgdGVzdCAtZiAnbGliNTI2LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYjUyNi5jCisKK2xpYjUyNy1saWI1MjYub2JqOiBsaWI1MjYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI3X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MjctbGliNTI2Lm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUyNy1saWI1MjYuVHBvIiAtYyAtbyBsaWI1MjctbGliNTI2Lm9iaiBgaWYgdGVzdCAtZiAnbGliNTI2LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGliNTI2LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xpYjUyNi5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTI3LWxpYjUyNi5UcG8iICIkKERFUERJUikvbGliNTI3LWxpYjUyNi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MjctbGliNTI2LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYjUyNi5jJyBvYmplY3Q9J2xpYjUyNy1saWI1MjYub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTI3LWxpYjUyNi5vYmogYGlmIHRlc3QgLWYgJ2xpYjUyNi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYjUyNi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWI1MjYuYyc7IGZpYAorCitsaWI1MjctZmlyc3QubzogZmlyc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI3X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MjctZmlyc3QubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUyNy1maXJzdC5UcG8iIC1jIC1vIGxpYjUyNy1maXJzdC5vIGB0ZXN0IC1mICdmaXJzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmaXJzdC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTI3LWZpcnN0LlRwbyIgIiQoREVQRElSKS9saWI1MjctZmlyc3QuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTI3LWZpcnN0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2ZpcnN0LmMnIG9iamVjdD0nbGliNTI3LWZpcnN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyN19DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1MjctZmlyc3QubyBgdGVzdCAtZiAnZmlyc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlyc3QuYworCitsaWI1MjctZmlyc3Qub2JqOiBmaXJzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUyNy1maXJzdC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1MjctZmlyc3QuVHBvIiAtYyAtbyBsaWI1MjctZmlyc3Qub2JqIGBpZiB0ZXN0IC1mICdmaXJzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2ZpcnN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2ZpcnN0LmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MjctZmlyc3QuVHBvIiAiJChERVBESVIpL2xpYjUyNy1maXJzdC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MjctZmlyc3QuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZmlyc3QuYycgb2JqZWN0PSdsaWI1MjctZmlyc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTI3LWZpcnN0Lm9iaiBgaWYgdGVzdCAtZiAnZmlyc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdmaXJzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9maXJzdC5jJzsgZmlgCisKK2xpYjUyNy10ZXN0dXRpbC5vOiB0ZXN0dXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUyNy10ZXN0dXRpbC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTI3LXRlc3R1dGlsLlRwbyIgLWMgLW8gbGliNTI3LXRlc3R1dGlsLm8gYHRlc3QgLWYgJ3Rlc3R1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlc3R1dGlsLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MjctdGVzdHV0aWwuVHBvIiAiJChERVBESVIpL2xpYjUyNy10ZXN0dXRpbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MjctdGVzdHV0aWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ndGVzdHV0aWwuYycgb2JqZWN0PSdsaWI1MjctdGVzdHV0aWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI3X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUyNy10ZXN0dXRpbC5vIGB0ZXN0IC1mICd0ZXN0dXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZXN0dXRpbC5jCisKK2xpYjUyNy10ZXN0dXRpbC5vYmo6IHRlc3R1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyN19DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTI3LXRlc3R1dGlsLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUyNy10ZXN0dXRpbC5UcG8iIC1jIC1vIGxpYjUyNy10ZXN0dXRpbC5vYmogYGlmIHRlc3QgLWYgJ3Rlc3R1dGlsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGVzdHV0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGVzdHV0aWwuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjUyNy10ZXN0dXRpbC5UcG8iICIkKERFUERJUikvbGliNTI3LXRlc3R1dGlsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUyNy10ZXN0dXRpbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd0ZXN0dXRpbC5jJyBvYmplY3Q9J2xpYjUyNy10ZXN0dXRpbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyN19DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1MjctdGVzdHV0aWwub2JqIGBpZiB0ZXN0IC1mICd0ZXN0dXRpbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3Rlc3R1dGlsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Rlc3R1dGlsLmMnOyBmaWAKKworbGliNTI3LXdhcm5sZXNzLm86ICQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyN19DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTI3LXdhcm5sZXNzLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1Mjctd2Fybmxlc3MuVHBvIiAtYyAtbyBsaWI1Mjctd2Fybmxlc3MubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjUyNy13YXJubGVzcy5UcG8iICIkKERFUERJUikvbGliNTI3LXdhcm5sZXNzLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUyNy13YXJubGVzcy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyBvYmplY3Q9J2xpYjUyNy13YXJubGVzcy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTI3LXdhcm5sZXNzLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKKworbGliNTI3LXdhcm5sZXNzLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI3X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1Mjctd2Fybmxlc3Mub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTI3LXdhcm5sZXNzLlRwbyIgLWMgLW8gbGliNTI3LXdhcm5sZXNzLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTI3LXdhcm5sZXNzLlRwbyIgIiQoREVQRElSKS9saWI1Mjctd2Fybmxlc3MuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTI3LXdhcm5sZXNzLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIG9iamVjdD0nbGliNTI3LXdhcm5sZXNzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI3X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUyNy13YXJubGVzcy5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGZpYAorCitsaWI1MjktbGliNTI1Lm86IGxpYjUyNS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUyOS1saWI1MjUubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUyOS1saWI1MjUuVHBvIiAtYyAtbyBsaWI1MjktbGliNTI1Lm8gYHRlc3QgLWYgJ2xpYjUyNS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWI1MjUuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjUyOS1saWI1MjUuVHBvIiAiJChERVBESVIpL2xpYjUyOS1saWI1MjUuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTI5LWxpYjUyNS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWI1MjUuYycgb2JqZWN0PSdsaWI1MjktbGliNTI1Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyOV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1MjktbGliNTI1Lm8gYHRlc3QgLWYgJ2xpYjUyNS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWI1MjUuYworCitsaWI1MjktbGliNTI1Lm9iajogbGliNTI1LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyOV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTI5LWxpYjUyNS5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1MjktbGliNTI1LlRwbyIgLWMgLW8gbGliNTI5LWxpYjUyNS5vYmogYGlmIHRlc3QgLWYgJ2xpYjUyNS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYjUyNS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWI1MjUuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjUyOS1saWI1MjUuVHBvIiAiJChERVBESVIpL2xpYjUyOS1saWI1MjUuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTI5LWxpYjUyNS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWI1MjUuYycgb2JqZWN0PSdsaWI1MjktbGliNTI1Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUyOS1saWI1MjUub2JqIGBpZiB0ZXN0IC1mICdsaWI1MjUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWI1MjUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGliNTI1LmMnOyBmaWAKKworbGliNTI5LWZpcnN0Lm86IGZpcnN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyOV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTI5LWZpcnN0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1MjktZmlyc3QuVHBvIiAtYyAtbyBsaWI1MjktZmlyc3QubyBgdGVzdCAtZiAnZmlyc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlyc3QuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjUyOS1maXJzdC5UcG8iICIkKERFUERJUikvbGliNTI5LWZpcnN0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUyOS1maXJzdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdmaXJzdC5jJyBvYmplY3Q9J2xpYjUyOS1maXJzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTI5LWZpcnN0Lm8gYHRlc3QgLWYgJ2ZpcnN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZpcnN0LmMKKworbGliNTI5LWZpcnN0Lm9iajogZmlyc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MjktZmlyc3Qub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTI5LWZpcnN0LlRwbyIgLWMgLW8gbGliNTI5LWZpcnN0Lm9iaiBgaWYgdGVzdCAtZiAnZmlyc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdmaXJzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9maXJzdC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTI5LWZpcnN0LlRwbyIgIiQoREVQRElSKS9saWI1MjktZmlyc3QuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTI5LWZpcnN0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2ZpcnN0LmMnIG9iamVjdD0nbGliNTI5LWZpcnN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUyOS1maXJzdC5vYmogYGlmIHRlc3QgLWYgJ2ZpcnN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZmlyc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZmlyc3QuYyc7IGZpYAorCitsaWI1MjktdGVzdHV0aWwubzogdGVzdHV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MjktdGVzdHV0aWwubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUyOS10ZXN0dXRpbC5UcG8iIC1jIC1vIGxpYjUyOS10ZXN0dXRpbC5vIGB0ZXN0IC1mICd0ZXN0dXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZXN0dXRpbC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTI5LXRlc3R1dGlsLlRwbyIgIiQoREVQRElSKS9saWI1MjktdGVzdHV0aWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTI5LXRlc3R1dGlsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3Rlc3R1dGlsLmMnIG9iamVjdD0nbGliNTI5LXRlc3R1dGlsLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyOV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1MjktdGVzdHV0aWwubyBgdGVzdCAtZiAndGVzdHV0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVzdHV0aWwuYworCitsaWI1MjktdGVzdHV0aWwub2JqOiB0ZXN0dXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUyOS10ZXN0dXRpbC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1MjktdGVzdHV0aWwuVHBvIiAtYyAtbyBsaWI1MjktdGVzdHV0aWwub2JqIGBpZiB0ZXN0IC1mICd0ZXN0dXRpbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3Rlc3R1dGlsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Rlc3R1dGlsLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MjktdGVzdHV0aWwuVHBvIiAiJChERVBESVIpL2xpYjUyOS10ZXN0dXRpbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MjktdGVzdHV0aWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ndGVzdHV0aWwuYycgb2JqZWN0PSdsaWI1MjktdGVzdHV0aWwub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTI5LXRlc3R1dGlsLm9iaiBgaWYgdGVzdCAtZiAndGVzdHV0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0ZXN0dXRpbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90ZXN0dXRpbC5jJzsgZmlgCisKK2xpYjUyOS13YXJubGVzcy5vOiAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MjlfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUyOS13YXJubGVzcy5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTI5LXdhcm5sZXNzLlRwbyIgLWMgLW8gbGliNTI5LXdhcm5sZXNzLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1Mjktd2Fybmxlc3MuVHBvIiAiJChERVBESVIpL2xpYjUyOS13YXJubGVzcy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1Mjktd2Fybmxlc3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgb2JqZWN0PSdsaWI1Mjktd2Fybmxlc3MubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTI5X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUyOS13YXJubGVzcy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCisKK2xpYjUyOS13YXJubGVzcy5vYmo6ICQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyOV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTI5LXdhcm5sZXNzLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUyOS13YXJubGVzcy5UcG8iIC1jIC1vIGxpYjUyOS13YXJubGVzcy5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjUyOS13YXJubGVzcy5UcG8iICIkKERFUERJUikvbGliNTI5LXdhcm5sZXNzLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUyOS13YXJubGVzcy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyBvYmplY3Q9J2xpYjUyOS13YXJubGVzcy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUyOV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1Mjktd2Fybmxlc3Mub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBmaWAKKworbGliNTMwLWxpYjUzMC5vOiBsaWI1MzAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTMwX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MzAtbGliNTMwLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1MzAtbGliNTMwLlRwbyIgLWMgLW8gbGliNTMwLWxpYjUzMC5vIGB0ZXN0IC1mICdsaWI1MzAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGliNTMwLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MzAtbGliNTMwLlRwbyIgIiQoREVQRElSKS9saWI1MzAtbGliNTMwLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUzMC1saWI1MzAuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGliNTMwLmMnIG9iamVjdD0nbGliNTMwLWxpYjUzMC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MzBfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTMwLWxpYjUzMC5vIGB0ZXN0IC1mICdsaWI1MzAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGliNTMwLmMKKworbGliNTMwLWxpYjUzMC5vYmo6IGxpYjUzMC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MzBfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUzMC1saWI1MzAub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTMwLWxpYjUzMC5UcG8iIC1jIC1vIGxpYjUzMC1saWI1MzAub2JqIGBpZiB0ZXN0IC1mICdsaWI1MzAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWI1MzAuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGliNTMwLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MzAtbGliNTMwLlRwbyIgIiQoREVQRElSKS9saWI1MzAtbGliNTMwLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUzMC1saWI1MzAuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGliNTMwLmMnIG9iamVjdD0nbGliNTMwLWxpYjUzMC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUzMF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1MzAtbGliNTMwLm9iaiBgaWYgdGVzdCAtZiAnbGliNTMwLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGliNTMwLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xpYjUzMC5jJzsgZmlgCisKK2xpYjUzMC1maXJzdC5vOiBmaXJzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MzBfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUzMC1maXJzdC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTMwLWZpcnN0LlRwbyIgLWMgLW8gbGliNTMwLWZpcnN0Lm8gYHRlc3QgLWYgJ2ZpcnN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZpcnN0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MzAtZmlyc3QuVHBvIiAiJChERVBESVIpL2xpYjUzMC1maXJzdC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MzAtZmlyc3QuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZmlyc3QuYycgb2JqZWN0PSdsaWI1MzAtZmlyc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTMwX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUzMC1maXJzdC5vIGB0ZXN0IC1mICdmaXJzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmaXJzdC5jCisKK2xpYjUzMC1maXJzdC5vYmo6IGZpcnN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUzMF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTMwLWZpcnN0Lm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUzMC1maXJzdC5UcG8iIC1jIC1vIGxpYjUzMC1maXJzdC5vYmogYGlmIHRlc3QgLWYgJ2ZpcnN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZmlyc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZmlyc3QuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjUzMC1maXJzdC5UcG8iICIkKERFUERJUikvbGliNTMwLWZpcnN0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUzMC1maXJzdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdmaXJzdC5jJyBvYmplY3Q9J2xpYjUzMC1maXJzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUzMF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1MzAtZmlyc3Qub2JqIGBpZiB0ZXN0IC1mICdmaXJzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2ZpcnN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2ZpcnN0LmMnOyBmaWAKKworbGliNTMwLXRlc3R1dGlsLm86IHRlc3R1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUzMF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTMwLXRlc3R1dGlsLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1MzAtdGVzdHV0aWwuVHBvIiAtYyAtbyBsaWI1MzAtdGVzdHV0aWwubyBgdGVzdCAtZiAndGVzdHV0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVzdHV0aWwuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjUzMC10ZXN0dXRpbC5UcG8iICIkKERFUERJUikvbGliNTMwLXRlc3R1dGlsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUzMC10ZXN0dXRpbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd0ZXN0dXRpbC5jJyBvYmplY3Q9J2xpYjUzMC10ZXN0dXRpbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MzBfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTMwLXRlc3R1dGlsLm8gYHRlc3QgLWYgJ3Rlc3R1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlc3R1dGlsLmMKKworbGliNTMwLXRlc3R1dGlsLm9iajogdGVzdHV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTMwX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MzAtdGVzdHV0aWwub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTMwLXRlc3R1dGlsLlRwbyIgLWMgLW8gbGliNTMwLXRlc3R1dGlsLm9iaiBgaWYgdGVzdCAtZiAndGVzdHV0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0ZXN0dXRpbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90ZXN0dXRpbC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTMwLXRlc3R1dGlsLlRwbyIgIiQoREVQRElSKS9saWI1MzAtdGVzdHV0aWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTMwLXRlc3R1dGlsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3Rlc3R1dGlsLmMnIG9iamVjdD0nbGliNTMwLXRlc3R1dGlsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTMwX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUzMC10ZXN0dXRpbC5vYmogYGlmIHRlc3QgLWYgJ3Rlc3R1dGlsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGVzdHV0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGVzdHV0aWwuYyc7IGZpYAorCitsaWI1MzAtd2Fybmxlc3MubzogJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTMwX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MzAtd2Fybmxlc3MubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUzMC13YXJubGVzcy5UcG8iIC1jIC1vIGxpYjUzMC13YXJubGVzcy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTMwLXdhcm5sZXNzLlRwbyIgIiQoREVQRElSKS9saWI1MzAtd2Fybmxlc3MuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTMwLXdhcm5sZXNzLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIG9iamVjdD0nbGliNTMwLXdhcm5sZXNzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUzMF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1MzAtd2Fybmxlc3MubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworCitsaWI1MzAtd2Fybmxlc3Mub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MzBfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUzMC13YXJubGVzcy5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1MzAtd2Fybmxlc3MuVHBvIiAtYyAtbyBsaWI1MzAtd2Fybmxlc3Mub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MzAtd2Fybmxlc3MuVHBvIiAiJChERVBESVIpL2xpYjUzMC13YXJubGVzcy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MzAtd2Fybmxlc3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgb2JqZWN0PSdsaWI1MzAtd2Fybmxlc3Mub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MzBfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTMwLXdhcm5sZXNzLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZmlgCisKK2xpYjUzMi1saWI1MjYubzogbGliNTI2LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUzMl9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTMyLWxpYjUyNi5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTMyLWxpYjUyNi5UcG8iIC1jIC1vIGxpYjUzMi1saWI1MjYubyBgdGVzdCAtZiAnbGliNTI2LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYjUyNi5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTMyLWxpYjUyNi5UcG8iICIkKERFUERJUikvbGliNTMyLWxpYjUyNi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MzItbGliNTI2LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYjUyNi5jJyBvYmplY3Q9J2xpYjUzMi1saWI1MjYubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTMyX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUzMi1saWI1MjYubyBgdGVzdCAtZiAnbGliNTI2LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYjUyNi5jCisKK2xpYjUzMi1saWI1MjYub2JqOiBsaWI1MjYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTMyX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MzItbGliNTI2Lm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUzMi1saWI1MjYuVHBvIiAtYyAtbyBsaWI1MzItbGliNTI2Lm9iaiBgaWYgdGVzdCAtZiAnbGliNTI2LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGliNTI2LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xpYjUyNi5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTMyLWxpYjUyNi5UcG8iICIkKERFUERJUikvbGliNTMyLWxpYjUyNi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MzItbGliNTI2LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYjUyNi5jJyBvYmplY3Q9J2xpYjUzMi1saWI1MjYub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MzJfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTMyLWxpYjUyNi5vYmogYGlmIHRlc3QgLWYgJ2xpYjUyNi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYjUyNi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWI1MjYuYyc7IGZpYAorCitsaWI1MzItZmlyc3QubzogZmlyc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTMyX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MzItZmlyc3QubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUzMi1maXJzdC5UcG8iIC1jIC1vIGxpYjUzMi1maXJzdC5vIGB0ZXN0IC1mICdmaXJzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmaXJzdC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTMyLWZpcnN0LlRwbyIgIiQoREVQRElSKS9saWI1MzItZmlyc3QuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTMyLWZpcnN0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2ZpcnN0LmMnIG9iamVjdD0nbGliNTMyLWZpcnN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUzMl9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1MzItZmlyc3QubyBgdGVzdCAtZiAnZmlyc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlyc3QuYworCitsaWI1MzItZmlyc3Qub2JqOiBmaXJzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MzJfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUzMi1maXJzdC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1MzItZmlyc3QuVHBvIiAtYyAtbyBsaWI1MzItZmlyc3Qub2JqIGBpZiB0ZXN0IC1mICdmaXJzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2ZpcnN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2ZpcnN0LmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MzItZmlyc3QuVHBvIiAiJChERVBESVIpL2xpYjUzMi1maXJzdC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MzItZmlyc3QuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZmlyc3QuYycgb2JqZWN0PSdsaWI1MzItZmlyc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MzJfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTMyLWZpcnN0Lm9iaiBgaWYgdGVzdCAtZiAnZmlyc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdmaXJzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9maXJzdC5jJzsgZmlgCisKK2xpYjUzMi10ZXN0dXRpbC5vOiB0ZXN0dXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MzJfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjUzMi10ZXN0dXRpbC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTMyLXRlc3R1dGlsLlRwbyIgLWMgLW8gbGliNTMyLXRlc3R1dGlsLm8gYHRlc3QgLWYgJ3Rlc3R1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlc3R1dGlsLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1MzItdGVzdHV0aWwuVHBvIiAiJChERVBESVIpL2xpYjUzMi10ZXN0dXRpbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1MzItdGVzdHV0aWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ndGVzdHV0aWwuYycgb2JqZWN0PSdsaWI1MzItdGVzdHV0aWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTMyX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUzMi10ZXN0dXRpbC5vIGB0ZXN0IC1mICd0ZXN0dXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZXN0dXRpbC5jCisKK2xpYjUzMi10ZXN0dXRpbC5vYmo6IHRlc3R1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUzMl9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTMyLXRlc3R1dGlsLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjUzMi10ZXN0dXRpbC5UcG8iIC1jIC1vIGxpYjUzMi10ZXN0dXRpbC5vYmogYGlmIHRlc3QgLWYgJ3Rlc3R1dGlsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGVzdHV0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGVzdHV0aWwuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjUzMi10ZXN0dXRpbC5UcG8iICIkKERFUERJUikvbGliNTMyLXRlc3R1dGlsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUzMi10ZXN0dXRpbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd0ZXN0dXRpbC5jJyBvYmplY3Q9J2xpYjUzMi10ZXN0dXRpbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUzMl9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1MzItdGVzdHV0aWwub2JqIGBpZiB0ZXN0IC1mICd0ZXN0dXRpbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3Rlc3R1dGlsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Rlc3R1dGlsLmMnOyBmaWAKKworbGliNTMyLXdhcm5sZXNzLm86ICQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjUzMl9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTMyLXdhcm5sZXNzLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1MzItd2Fybmxlc3MuVHBvIiAtYyAtbyBsaWI1MzItd2Fybmxlc3MubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjUzMi13YXJubGVzcy5UcG8iICIkKERFUERJUikvbGliNTMyLXdhcm5sZXNzLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjUzMi13YXJubGVzcy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyBvYmplY3Q9J2xpYjUzMi13YXJubGVzcy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1MzJfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTMyLXdhcm5sZXNzLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKKworbGliNTMyLXdhcm5sZXNzLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTMyX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1MzItd2Fybmxlc3Mub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTMyLXdhcm5sZXNzLlRwbyIgLWMgLW8gbGliNTMyLXdhcm5sZXNzLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTMyLXdhcm5sZXNzLlRwbyIgIiQoREVQRElSKS9saWI1MzItd2Fybmxlc3MuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTMyLXdhcm5sZXNzLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIG9iamVjdD0nbGliNTMyLXdhcm5sZXNzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTMyX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjUzMi13YXJubGVzcy5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGZpYAorCitsaWI1NDUtbGliNTQ0Lm86IGxpYjU0NC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1NDVfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjU0NS1saWI1NDQubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjU0NS1saWI1NDQuVHBvIiAtYyAtbyBsaWI1NDUtbGliNTQ0Lm8gYHRlc3QgLWYgJ2xpYjU0NC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWI1NDQuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU0NS1saWI1NDQuVHBvIiAiJChERVBESVIpL2xpYjU0NS1saWI1NDQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTQ1LWxpYjU0NC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWI1NDQuYycgb2JqZWN0PSdsaWI1NDUtbGliNTQ0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU0NV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1NDUtbGliNTQ0Lm8gYHRlc3QgLWYgJ2xpYjU0NC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWI1NDQuYworCitsaWI1NDUtbGliNTQ0Lm9iajogbGliNTQ0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU0NV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTQ1LWxpYjU0NC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1NDUtbGliNTQ0LlRwbyIgLWMgLW8gbGliNTQ1LWxpYjU0NC5vYmogYGlmIHRlc3QgLWYgJ2xpYjU0NC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYjU0NC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWI1NDQuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU0NS1saWI1NDQuVHBvIiAiJChERVBESVIpL2xpYjU0NS1saWI1NDQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTQ1LWxpYjU0NC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWI1NDQuYycgb2JqZWN0PSdsaWI1NDUtbGliNTQ0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTQ1X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjU0NS1saWI1NDQub2JqIGBpZiB0ZXN0IC1mICdsaWI1NDQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWI1NDQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGliNTQ0LmMnOyBmaWAKKworbGliNTQ1LWZpcnN0Lm86IGZpcnN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU0NV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTQ1LWZpcnN0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1NDUtZmlyc3QuVHBvIiAtYyAtbyBsaWI1NDUtZmlyc3QubyBgdGVzdCAtZiAnZmlyc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlyc3QuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU0NS1maXJzdC5UcG8iICIkKERFUERJUikvbGliNTQ1LWZpcnN0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjU0NS1maXJzdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdmaXJzdC5jJyBvYmplY3Q9J2xpYjU0NS1maXJzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1NDVfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTQ1LWZpcnN0Lm8gYHRlc3QgLWYgJ2ZpcnN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZpcnN0LmMKKworbGliNTQ1LWZpcnN0Lm9iajogZmlyc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTQ1X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1NDUtZmlyc3Qub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTQ1LWZpcnN0LlRwbyIgLWMgLW8gbGliNTQ1LWZpcnN0Lm9iaiBgaWYgdGVzdCAtZiAnZmlyc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdmaXJzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9maXJzdC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTQ1LWZpcnN0LlRwbyIgIiQoREVQRElSKS9saWI1NDUtZmlyc3QuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTQ1LWZpcnN0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2ZpcnN0LmMnIG9iamVjdD0nbGliNTQ1LWZpcnN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTQ1X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjU0NS1maXJzdC5vYmogYGlmIHRlc3QgLWYgJ2ZpcnN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZmlyc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZmlyc3QuYyc7IGZpYAorCitsaWI1NDgtbGliNTQ3Lm86IGxpYjU0Ny5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1NDhfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjU0OC1saWI1NDcubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjU0OC1saWI1NDcuVHBvIiAtYyAtbyBsaWI1NDgtbGliNTQ3Lm8gYHRlc3QgLWYgJ2xpYjU0Ny5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWI1NDcuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU0OC1saWI1NDcuVHBvIiAiJChERVBESVIpL2xpYjU0OC1saWI1NDcuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTQ4LWxpYjU0Ny5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWI1NDcuYycgb2JqZWN0PSdsaWI1NDgtbGliNTQ3Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU0OF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1NDgtbGliNTQ3Lm8gYHRlc3QgLWYgJ2xpYjU0Ny5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWI1NDcuYworCitsaWI1NDgtbGliNTQ3Lm9iajogbGliNTQ3LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU0OF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTQ4LWxpYjU0Ny5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1NDgtbGliNTQ3LlRwbyIgLWMgLW8gbGliNTQ4LWxpYjU0Ny5vYmogYGlmIHRlc3QgLWYgJ2xpYjU0Ny5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYjU0Ny5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWI1NDcuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU0OC1saWI1NDcuVHBvIiAiJChERVBESVIpL2xpYjU0OC1saWI1NDcuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTQ4LWxpYjU0Ny5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWI1NDcuYycgb2JqZWN0PSdsaWI1NDgtbGliNTQ3Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTQ4X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjU0OC1saWI1NDcub2JqIGBpZiB0ZXN0IC1mICdsaWI1NDcuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWI1NDcuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGliNTQ3LmMnOyBmaWAKKworbGliNTQ4LWZpcnN0Lm86IGZpcnN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU0OF9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTQ4LWZpcnN0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1NDgtZmlyc3QuVHBvIiAtYyAtbyBsaWI1NDgtZmlyc3QubyBgdGVzdCAtZiAnZmlyc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlyc3QuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU0OC1maXJzdC5UcG8iICIkKERFUERJUikvbGliNTQ4LWZpcnN0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjU0OC1maXJzdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdmaXJzdC5jJyBvYmplY3Q9J2xpYjU0OC1maXJzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1NDhfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTQ4LWZpcnN0Lm8gYHRlc3QgLWYgJ2ZpcnN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZpcnN0LmMKKworbGliNTQ4LWZpcnN0Lm9iajogZmlyc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTQ4X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1NDgtZmlyc3Qub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTQ4LWZpcnN0LlRwbyIgLWMgLW8gbGliNTQ4LWZpcnN0Lm9iaiBgaWYgdGVzdCAtZiAnZmlyc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdmaXJzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9maXJzdC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTQ4LWZpcnN0LlRwbyIgIiQoREVQRElSKS9saWI1NDgtZmlyc3QuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTQ4LWZpcnN0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2ZpcnN0LmMnIG9iamVjdD0nbGliNTQ4LWZpcnN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTQ4X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjU0OC1maXJzdC5vYmogYGlmIHRlc3QgLWYgJ2ZpcnN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZmlyc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZmlyc3QuYyc7IGZpYAorCitsaWI1NjUtbGliNTEwLm86IGxpYjUxMC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1NjVfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjU2NS1saWI1MTAubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjU2NS1saWI1MTAuVHBvIiAtYyAtbyBsaWI1NjUtbGliNTEwLm8gYHRlc3QgLWYgJ2xpYjUxMC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWI1MTAuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU2NS1saWI1MTAuVHBvIiAiJChERVBESVIpL2xpYjU2NS1saWI1MTAuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTY1LWxpYjUxMC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWI1MTAuYycgb2JqZWN0PSdsaWI1NjUtbGliNTEwLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU2NV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1NjUtbGliNTEwLm8gYHRlc3QgLWYgJ2xpYjUxMC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWI1MTAuYworCitsaWI1NjUtbGliNTEwLm9iajogbGliNTEwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU2NV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTY1LWxpYjUxMC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1NjUtbGliNTEwLlRwbyIgLWMgLW8gbGliNTY1LWxpYjUxMC5vYmogYGlmIHRlc3QgLWYgJ2xpYjUxMC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYjUxMC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWI1MTAuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU2NS1saWI1MTAuVHBvIiAiJChERVBESVIpL2xpYjU2NS1saWI1MTAuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTY1LWxpYjUxMC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWI1MTAuYycgb2JqZWN0PSdsaWI1NjUtbGliNTEwLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTY1X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjU2NS1saWI1MTAub2JqIGBpZiB0ZXN0IC1mICdsaWI1MTAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWI1MTAuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGliNTEwLmMnOyBmaWAKKworbGliNTY1LWZpcnN0Lm86IGZpcnN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU2NV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTY1LWZpcnN0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1NjUtZmlyc3QuVHBvIiAtYyAtbyBsaWI1NjUtZmlyc3QubyBgdGVzdCAtZiAnZmlyc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlyc3QuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU2NS1maXJzdC5UcG8iICIkKERFUERJUikvbGliNTY1LWZpcnN0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjU2NS1maXJzdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdmaXJzdC5jJyBvYmplY3Q9J2xpYjU2NS1maXJzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1NjVfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTY1LWZpcnN0Lm8gYHRlc3QgLWYgJ2ZpcnN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZpcnN0LmMKKworbGliNTY1LWZpcnN0Lm9iajogZmlyc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTY1X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1NjUtZmlyc3Qub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTY1LWZpcnN0LlRwbyIgLWMgLW8gbGliNTY1LWZpcnN0Lm9iaiBgaWYgdGVzdCAtZiAnZmlyc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdmaXJzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9maXJzdC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTY1LWZpcnN0LlRwbyIgIiQoREVQRElSKS9saWI1NjUtZmlyc3QuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTY1LWZpcnN0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2ZpcnN0LmMnIG9iamVjdD0nbGliNTY1LWZpcnN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTY1X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjU2NS1maXJzdC5vYmogYGlmIHRlc3QgLWYgJ2ZpcnN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZmlyc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZmlyc3QuYyc7IGZpYAorCitsaWI1ODUtbGliNTAwLm86IGxpYjUwMC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1ODVfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjU4NS1saWI1MDAubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjU4NS1saWI1MDAuVHBvIiAtYyAtbyBsaWI1ODUtbGliNTAwLm8gYHRlc3QgLWYgJ2xpYjUwMC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWI1MDAuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU4NS1saWI1MDAuVHBvIiAiJChERVBESVIpL2xpYjU4NS1saWI1MDAuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTg1LWxpYjUwMC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWI1MDAuYycgb2JqZWN0PSdsaWI1ODUtbGliNTAwLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU4NV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1ODUtbGliNTAwLm8gYHRlc3QgLWYgJ2xpYjUwMC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWI1MDAuYworCitsaWI1ODUtbGliNTAwLm9iajogbGliNTAwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU4NV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTg1LWxpYjUwMC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1ODUtbGliNTAwLlRwbyIgLWMgLW8gbGliNTg1LWxpYjUwMC5vYmogYGlmIHRlc3QgLWYgJ2xpYjUwMC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYjUwMC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWI1MDAuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU4NS1saWI1MDAuVHBvIiAiJChERVBESVIpL2xpYjU4NS1saWI1MDAuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTg1LWxpYjUwMC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWI1MDAuYycgb2JqZWN0PSdsaWI1ODUtbGliNTAwLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTg1X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjU4NS1saWI1MDAub2JqIGBpZiB0ZXN0IC1mICdsaWI1MDAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWI1MDAuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGliNTAwLmMnOyBmaWAKKworbGliNTg1LWZpcnN0Lm86IGZpcnN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU4NV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTg1LWZpcnN0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1ODUtZmlyc3QuVHBvIiAtYyAtbyBsaWI1ODUtZmlyc3QubyBgdGVzdCAtZiAnZmlyc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlyc3QuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU4NS1maXJzdC5UcG8iICIkKERFUERJUikvbGliNTg1LWZpcnN0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjU4NS1maXJzdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdmaXJzdC5jJyBvYmplY3Q9J2xpYjU4NS1maXJzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1ODVfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTg1LWZpcnN0Lm8gYHRlc3QgLWYgJ2ZpcnN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZpcnN0LmMKKworbGliNTg1LWZpcnN0Lm9iajogZmlyc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTg1X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1ODUtZmlyc3Qub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTg1LWZpcnN0LlRwbyIgLWMgLW8gbGliNTg1LWZpcnN0Lm9iaiBgaWYgdGVzdCAtZiAnZmlyc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdmaXJzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9maXJzdC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTg1LWZpcnN0LlRwbyIgIiQoREVQRElSKS9saWI1ODUtZmlyc3QuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTg1LWZpcnN0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2ZpcnN0LmMnIG9iamVjdD0nbGliNTg1LWZpcnN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTg1X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjU4NS1maXJzdC5vYmogYGlmIHRlc3QgLWYgJ2ZpcnN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZmlyc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZmlyc3QuYyc7IGZpYAorCitsaWI1ODUtdGVzdHV0aWwubzogdGVzdHV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTg1X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1ODUtdGVzdHV0aWwubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjU4NS10ZXN0dXRpbC5UcG8iIC1jIC1vIGxpYjU4NS10ZXN0dXRpbC5vIGB0ZXN0IC1mICd0ZXN0dXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZXN0dXRpbC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTg1LXRlc3R1dGlsLlRwbyIgIiQoREVQRElSKS9saWI1ODUtdGVzdHV0aWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTg1LXRlc3R1dGlsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3Rlc3R1dGlsLmMnIG9iamVjdD0nbGliNTg1LXRlc3R1dGlsLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU4NV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1ODUtdGVzdHV0aWwubyBgdGVzdCAtZiAndGVzdHV0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVzdHV0aWwuYworCitsaWI1ODUtdGVzdHV0aWwub2JqOiB0ZXN0dXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1ODVfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjU4NS10ZXN0dXRpbC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1ODUtdGVzdHV0aWwuVHBvIiAtYyAtbyBsaWI1ODUtdGVzdHV0aWwub2JqIGBpZiB0ZXN0IC1mICd0ZXN0dXRpbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3Rlc3R1dGlsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Rlc3R1dGlsLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9saWI1ODUtdGVzdHV0aWwuVHBvIiAiJChERVBESVIpL2xpYjU4NS10ZXN0dXRpbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1ODUtdGVzdHV0aWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ndGVzdHV0aWwuYycgb2JqZWN0PSdsaWI1ODUtdGVzdHV0aWwub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1ODVfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTg1LXRlc3R1dGlsLm9iaiBgaWYgdGVzdCAtZiAndGVzdHV0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0ZXN0dXRpbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90ZXN0dXRpbC5jJzsgZmlgCisKK2xpYjU4NS10ZXN0dHJhY2UubzogdGVzdHRyYWNlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU4NV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTg1LXRlc3R0cmFjZS5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTg1LXRlc3R0cmFjZS5UcG8iIC1jIC1vIGxpYjU4NS10ZXN0dHJhY2UubyBgdGVzdCAtZiAndGVzdHRyYWNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlc3R0cmFjZS5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTg1LXRlc3R0cmFjZS5UcG8iICIkKERFUERJUikvbGliNTg1LXRlc3R0cmFjZS5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1ODUtdGVzdHRyYWNlLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3Rlc3R0cmFjZS5jJyBvYmplY3Q9J2xpYjU4NS10ZXN0dHJhY2UubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTg1X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjU4NS10ZXN0dHJhY2UubyBgdGVzdCAtZiAndGVzdHRyYWNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlc3R0cmFjZS5jCisKK2xpYjU4NS10ZXN0dHJhY2Uub2JqOiB0ZXN0dHJhY2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTg1X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1ODUtdGVzdHRyYWNlLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjU4NS10ZXN0dHJhY2UuVHBvIiAtYyAtbyBsaWI1ODUtdGVzdHRyYWNlLm9iaiBgaWYgdGVzdCAtZiAndGVzdHRyYWNlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGVzdHRyYWNlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Rlc3R0cmFjZS5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTg1LXRlc3R0cmFjZS5UcG8iICIkKERFUERJUikvbGliNTg1LXRlc3R0cmFjZS5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9saWI1ODUtdGVzdHRyYWNlLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3Rlc3R0cmFjZS5jJyBvYmplY3Q9J2xpYjU4NS10ZXN0dHJhY2Uub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1ODVfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTg1LXRlc3R0cmFjZS5vYmogYGlmIHRlc3QgLWYgJ3Rlc3R0cmFjZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3Rlc3R0cmFjZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90ZXN0dHJhY2UuYyc7IGZpYAorCitsaWI1ODctbGliNTU0Lm86IGxpYjU1NC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1ODdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYjU4Ny1saWI1NTQubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2xpYjU4Ny1saWI1NTQuVHBvIiAtYyAtbyBsaWI1ODctbGliNTU0Lm8gYHRlc3QgLWYgJ2xpYjU1NC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWI1NTQuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU4Ny1saWI1NTQuVHBvIiAiJChERVBESVIpL2xpYjU4Ny1saWI1NTQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTg3LWxpYjU1NC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWI1NTQuYycgb2JqZWN0PSdsaWI1ODctbGliNTU0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU4N19DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWI1ODctbGliNTU0Lm8gYHRlc3QgLWYgJ2xpYjU1NC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWI1NTQuYworCitsaWI1ODctbGliNTU0Lm9iajogbGliNTU0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU4N19DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTg3LWxpYjU1NC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1ODctbGliNTU0LlRwbyIgLWMgLW8gbGliNTg3LWxpYjU1NC5vYmogYGlmIHRlc3QgLWYgJ2xpYjU1NC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYjU1NC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWI1NTQuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU4Ny1saWI1NTQuVHBvIiAiJChERVBESVIpL2xpYjU4Ny1saWI1NTQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTg3LWxpYjU1NC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWI1NTQuYycgb2JqZWN0PSdsaWI1ODctbGliNTU0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTg3X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjU4Ny1saWI1NTQub2JqIGBpZiB0ZXN0IC1mICdsaWI1NTQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWI1NTQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGliNTU0LmMnOyBmaWAKKworbGliNTg3LWZpcnN0Lm86IGZpcnN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKGxpYjU4N19DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliNTg3LWZpcnN0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9saWI1ODctZmlyc3QuVHBvIiAtYyAtbyBsaWI1ODctZmlyc3QubyBgdGVzdCAtZiAnZmlyc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlyc3QuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2xpYjU4Ny1maXJzdC5UcG8iICIkKERFUERJUikvbGliNTg3LWZpcnN0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2xpYjU4Ny1maXJzdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdmaXJzdC5jJyBvYmplY3Q9J2xpYjU4Ny1maXJzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWI1ODdfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliNTg3LWZpcnN0Lm8gYHRlc3QgLWYgJ2ZpcnN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZpcnN0LmMKKworbGliNTg3LWZpcnN0Lm9iajogZmlyc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTg3X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWI1ODctZmlyc3Qub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvbGliNTg3LWZpcnN0LlRwbyIgLWMgLW8gbGliNTg3LWZpcnN0Lm9iaiBgaWYgdGVzdCAtZiAnZmlyc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdmaXJzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9maXJzdC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvbGliNTg3LWZpcnN0LlRwbyIgIiQoREVQRElSKS9saWI1ODctZmlyc3QuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvbGliNTg3LWZpcnN0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2ZpcnN0LmMnIG9iamVjdD0nbGliNTg3LWZpcnN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliNTg3X0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYjU4Ny1maXJzdC5vYmogYGlmIHRlc3QgLWYgJ2ZpcnN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZmlyc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZmlyc3QuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbAordW5pbnN0YWxsLWluZm8tYW06CisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKKwkgIGVzYWM7IFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKKwkgICAgZGlyPSIvJCRkaXIiOyBcCisJICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKKwkgIGVsc2UgXAorCSAgICBkaXI9Jyc7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChQUk9HUkFNUykKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIFwKKwljbGVhbi1ub2luc3RQUk9HUkFNUyBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCisJY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L01ha2VmaWxlLmluYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvTWFrZWZpbGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNGQ3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L01ha2VmaWxlLmluYwpAQCAtMCwwICsxLDE4NSBAQAorIyBmaWxlcyB1c2VkIG9ubHkgaW4gc29tZSBsaWJjdXJsIHRlc3QgcHJvZ3JhbXMKK1RFU1RVVElMID0gdGVzdHV0aWwuYyB0ZXN0dXRpbC5oCisKKyMgZmlsZXMgdXNlZCBvbmx5IGluIHNvbWUgbGliY3VybCB0ZXN0IHByb2dyYW1zCitUU1RUUkFDRSA9IHRlc3R0cmFjZS5jIHRlc3R0cmFjZS5oCisKKyMgZmlsZXMgdXNlZCBvbmx5IGluIHNvbWUgbGliY3VybCB0ZXN0IHByb2dyYW1zCitXQVJOTEVTUyA9ICQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMgJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuaAorCisjIHRoZXNlIGZpbGVzIGFyZSB1c2VkIGluIGV2ZXJ5IHNpbmdsZSB0ZXN0IHByb2dyYW0gYmVsb3cKK1NVUFBPUlRGSUxFUyA9IGZpcnN0LmMgdGVzdC5oCisKKyMgVGhlc2UgYXJlIGFsbCBsaWJjdXJsIHRlc3QgcHJvZ3JhbXMKK25vaW5zdF9QUk9HUkFNUyA9IGNoa2hvc3RuYW1lIFwKKyAgbGliNTAwIGxpYjUwMSBsaWI1MDIgbGliNTAzIGxpYjUwNCBsaWI1MDUgbGliNTA2IGxpYjUwNyBsaWI1MDggbGliNTEwCVwKKyAgbGliNTExIGxpYjUxMiBsaWI1MTMgbGliNTE0IGxpYjUxNSBsaWI1MTYgbGliNTE3IGxpYjUxOCBsaWI1MTkgbGliNTIwCVwKKyAgbGliNTIxIGxpYjUyMyBsaWI1MjQgbGliNTI1IGxpYjUyNiBsaWI1MjcgbGliNTc0IGxpYjU3NSBsaWI1NzYgbGliNTc4CVwKKyAgbGliNTc5IGxpYjUyOSBsaWI1MzAgbGliNTMyIGxpYjUzMyBsaWI1MzYgbGliNTM3IGxpYjU0MCBsaWI1NDEgbGliNTQyCVwKKyAgbGliNTQzIGxpYjU0NCBsaWI1NDUgbGliNTQ3IGxpYjU0OCBsaWI1NDkgbGliNTUyIGxpYjU1MyBsaWI1NTQgbGliNTU1CVwKKyAgbGliNTU2IGxpYjUzOSBsaWI1NTcgbGliNTYwIGxpYjU2MiBsaWI1NjQgbGliNTY1IGxpYjU2NiBsaWI1NjcgbGliNTY4CVwKKyAgbGliNTY5IGxpYjU3MCBsaWI1NzEgbGliNTcyIGxpYjU3MyBsaWI1ODIgbGliNTgzIGxpYjU4NSBsaWI1ODYgbGliNTg3IFwKKyAgbGliNTkwIGxpYjU5MSBsaWI1OTcgbGliNTk4CisKK2Noa2hvc3RuYW1lX1NPVVJDRVMgPSBjaGtob3N0bmFtZS5jICQodG9wX3NyY2RpcikvbGliL2N1cmxfZ2V0aG9zdG5hbWUuYworY2hraG9zdG5hbWVfTERBREQgPSBAQ1VSTF9ORVRXT1JLX0xJQlNACitjaGtob3N0bmFtZV9ERVBFTkRFTkNJRVMgPQorY2hraG9zdG5hbWVfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCisKK2xpYjUwMF9TT1VSQ0VTID0gbGliNTAwLmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoVFNUVFJBQ0UpCisKK2xpYjUwMV9TT1VSQ0VTID0gbGliNTAxLmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUwMl9TT1VSQ0VTID0gbGliNTAyLmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCisKK2xpYjUwM19TT1VSQ0VTID0gbGliNTAzLmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCisKK2xpYjUwNF9TT1VSQ0VTID0gbGliNTA0LmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCisKK2xpYjUwNV9TT1VSQ0VTID0gbGliNTA1LmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUwNl9TT1VSQ0VTID0gbGliNTA2LmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUwN19TT1VSQ0VTID0gbGliNTA3LmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCisKK2xpYjUwOF9TT1VSQ0VTID0gbGliNTA4LmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUxMF9TT1VSQ0VTID0gbGliNTEwLmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUxMV9TT1VSQ0VTID0gbGliNTExLmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUxMl9TT1VSQ0VTID0gbGliNTEyLmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUxM19TT1VSQ0VTID0gbGliNTEzLmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUxNF9TT1VSQ0VTID0gbGliNTE0LmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUxNV9TT1VSQ0VTID0gbGliNTE1LmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUxNl9TT1VSQ0VTID0gbGliNTE2LmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUxN19TT1VSQ0VTID0gbGliNTE3LmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUxOF9TT1VSQ0VTID0gbGliNTE4LmMgJChTVVBQT1JURklMRVMpICQoV0FSTkxFU1MpCisKK2xpYjUxOV9TT1VSQ0VTID0gbGliNTE5LmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUyMF9TT1VSQ0VTID0gbGliNTIwLmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUyMV9TT1VSQ0VTID0gbGliNTIxLmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUyM19TT1VSQ0VTID0gbGliNTIzLmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUyNF9TT1VSQ0VTID0gbGliNTI0LmMgJChTVVBQT1JURklMRVMpCisKK2xpYjUyNV9TT1VSQ0VTID0gbGliNTI1LmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCisKK2xpYjUyNl9TT1VSQ0VTID0gbGliNTI2LmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCitsaWI1MjZfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRExJQjUyNgorCitsaWI1MjdfU09VUkNFUyA9IGxpYjUyNi5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorbGliNTI3X0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURMSUI1MjcKKworbGliNTI5X1NPVVJDRVMgPSBsaWI1MjUuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKK2xpYjUyOV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1ETElCNTI5CisKK2xpYjUzMF9TT1VSQ0VTID0gbGliNTMwLmMgJChTVVBQT1JURklMRVMpICQoVEVTVFVUSUwpICQoV0FSTkxFU1MpCitsaWI1MzBfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRExJQjUzMAorCitsaWI1MzJfU09VUkNFUyA9IGxpYjUyNi5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorbGliNTMyX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURMSUI1MzIKKworbGliNTMzX1NPVVJDRVMgPSBsaWI1MzMuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKKworbGliNTM2X1NPVVJDRVMgPSBsaWI1MzYuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKKworbGliNTM3X1NPVVJDRVMgPSBsaWI1MzcuYyAkKFNVUFBPUlRGSUxFUykgJChXQVJOTEVTUykKKworbGliNTM5X1NPVVJDRVMgPSBsaWI1MzkuYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTQwX1NPVVJDRVMgPSBsaWI1NDAuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKKworbGliNTQxX1NPVVJDRVMgPSBsaWI1NDEuYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTQyX1NPVVJDRVMgPSBsaWI1NDIuYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTQzX1NPVVJDRVMgPSBsaWI1NDMuYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTQ0X1NPVVJDRVMgPSBsaWI1NDQuYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTQ1X1NPVVJDRVMgPSBsaWI1NDQuYyAkKFNVUFBPUlRGSUxFUykKK2xpYjU0NV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1ETElCNTQ1CisKK2xpYjU0N19TT1VSQ0VTID0gbGliNTQ3LmMgJChTVVBQT1JURklMRVMpCisKK2xpYjU0OF9TT1VSQ0VTID0gbGliNTQ3LmMgJChTVVBQT1JURklMRVMpCitsaWI1NDhfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRExJQjU0OAorCitsaWI1NDlfU09VUkNFUyA9IGxpYjU0OS5jICQoU1VQUE9SVEZJTEVTKQorCitsaWI1NTVfU09VUkNFUyA9IGxpYjU1NS5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorCitsaWI1NTJfU09VUkNFUyA9IGxpYjU1Mi5jICQoU1VQUE9SVEZJTEVTKSAkKFdBUk5MRVNTKQorCitsaWI1NTNfU09VUkNFUyA9IGxpYjU1My5jICQoU1VQUE9SVEZJTEVTKQorCitsaWI1NTRfU09VUkNFUyA9IGxpYjU1NC5jICQoU1VQUE9SVEZJTEVTKQorCitsaWI1NTZfU09VUkNFUyA9IGxpYjU1Ni5jICQoU1VQUE9SVEZJTEVTKQorCitsaWI1NTdfU09VUkNFUyA9IGxpYjU1Ny5jICQoU1VQUE9SVEZJTEVTKQorCitsaWI1NjBfU09VUkNFUyA9IGxpYjU2MC5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorCitsaWI1NzRfU09VUkNFUyA9IGxpYjU3NC5jICQoU1VQUE9SVEZJTEVTKQorCitsaWI1NzVfU09VUkNFUyA9IGxpYjU3NS5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorCitsaWI1NzZfU09VUkNFUyA9IGxpYjU3Ni5jICQoU1VQUE9SVEZJTEVTKQorCitsaWI1NjJfU09VUkNFUyA9IGxpYjU2Mi5jICQoU1VQUE9SVEZJTEVTKQorCitsaWI1NjRfU09VUkNFUyA9IGxpYjU2NC5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorCitsaWI1NjVfU09VUkNFUyA9IGxpYjUxMC5jICQoU1VQUE9SVEZJTEVTKQorbGliNTY1X0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURMSUI1NjUKKworbGliNTY2X1NPVVJDRVMgPSBsaWI1NjYuYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTY3X1NPVVJDRVMgPSBsaWI1NjcuYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTY4X1NPVVJDRVMgPSBsaWI1NjguYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTY5X1NPVVJDRVMgPSBsaWI1NjkuYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTcwX1NPVVJDRVMgPSBsaWI1NzAuYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTcxX1NPVVJDRVMgPSBsaWI1NzEuYyAkKFNVUFBPUlRGSUxFUykgJChXQVJOTEVTUykKKworbGliNTcyX1NPVVJDRVMgPSBsaWI1NzIuYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTczX1NPVVJDRVMgPSBsaWI1NzMuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykgJChUU1RUUkFDRSkKKworbGliNTc4X1NPVVJDRVMgPSBsaWI1NzguYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTc5X1NPVVJDRVMgPSBsaWI1NzkuYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTgyX1NPVVJDRVMgPSBsaWI1ODIuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKKworbGliNTgzX1NPVVJDRVMgPSBsaWI1ODMuYyAkKFNVUFBPUlRGSUxFUykKKworbGliNTg1X1NPVVJDRVMgPSBsaWI1MDAuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChUU1RUUkFDRSkKK2xpYjU4NV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1ETElCNTg1CisKK2xpYjU4Nl9TT1VSQ0VTID0gbGliNTg2LmMgJChTVVBQT1JURklMRVMpCisKK2xpYjU4N19TT1VSQ0VTID0gbGliNTU0LmMgJChTVVBQT1JURklMRVMpCitsaWI1ODdfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtRExJQjU4NworCitsaWI1OTBfU09VUkNFUyA9IGxpYjU5MC5jICQoU1VQUE9SVEZJTEVTKQorCitsaWI1OTFfU09VUkNFUyA9IGxpYjU5MS5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorCitsaWI1OTdfU09VUkNFUyA9IGxpYjU5Ny5jICQoU1VQUE9SVEZJTEVTKSAkKFRFU1RVVElMKSAkKFdBUk5MRVNTKQorCitsaWI1OThfU09VUkNFUyA9IGxpYjU5OC5jICQoU1VQUE9SVEZJTEVTKQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9jaGtob3N0bmFtZS5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9jaGtob3N0bmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OTMwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2Noa2hvc3RuYW1lLmMKQEAgLTAsMCArMSw0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgImN1cmxfZ2V0aG9zdG5hbWUuaCIKKworI2RlZmluZSBIT1NUTkFNRV9NQVggMTAyNAorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBjaGFyIGJ1ZmZbSE9TVE5BTUVfTUFYXTsKKyAgaWYgKGFyZ2MgIT0gMikgeworICAgIHByaW50ZigiVXNhZ2U6ICVzIEVYUEVDVEVEX0hPU1ROQU1FXG4iLCBhcmd2WzBdKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGlmIChDdXJsX2dldGhvc3RuYW1lKGJ1ZmYsIEhPU1ROQU1FX01BWCkpIHsKKyAgICBwcmludGYoIkN1cmxfZ2V0aG9zdG5hbWUoKSBmYWlsZWRcbiIpOworICAgIHJldHVybiAxOworICB9CisKKyAgLyogY29tcGFyZSB0aGUgbmFtZSByZXR1cm5lZCBieSBDdXJsX2dldGhvc3RuYW1lKCkgd2l0aCB0aGUgZXhwZWN0ZWQgb25lICovCisgIGlmKHN0cm5jbXAoYnVmZiwgYXJndlsxXSwgSE9TVE5BTUVfTUFYKSkgeworICAgIHByaW50ZigiZ290IHVuZXhwZWN0ZWQgaG9zdCBuYW1lIGJhY2ssIExEX1BSRUxPQUQgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvZmlyc3QuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvZmlyc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTNhY2IyCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9maXJzdC5jCkBAIC0wLDAgKzEsMTMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpZmRlZiBIQVZFX0xPQ0FMRV9ICisjaW5jbHVkZSA8bG9jYWxlLmg+IC8qIGZvciBzZXRsb2NhbGUoKSAqLworI2VuZGlmCisKKyNpZmRlZiBDVVJMREVCVUcKKyMgIGRlZmluZSBNRU1ERUJVR19OT0RFRklORVMKKyMgIGluY2x1ZGUgIm1lbWRlYnVnLmgiCisjZW5kaWYKKworaW50IHNlbGVjdF93cmFwcGVyKGludCBuZmRzLCBmZF9zZXQgKnJkLCBmZF9zZXQgKndyLCBmZF9zZXQgKmV4YywKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdHYpCit7CisgIGlmKG5mZHMgPCAwKSB7CisgICAgU0VUX1NPQ0tFUlJOTyhFSU5WQUwpOworICAgIHJldHVybiAtMTsKKyAgfQorI2lmZGVmIFVTRV9XSU5TT0NLCisgIC8qCisgICAqIFdpbnNvY2sgc2VsZWN0KCkgcmVxdWlyZXMgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIHRocmVlIGZkX3NldAorICAgKiBwb2ludGVycyBpcyBub3QgTlVMTCBhbmQgcG9pbnRzIHRvIGEgbm9uLWVtcHR5IGZkc2V0LiBJT1cgV2luc29jaworICAgKiBzZWxlY3QoKSBjYW4gbm90IGJlIHVzZWQgdG8gc2xlZXAgd2l0aG91dCBhIHNpbmdsZSBmZF9zZXQuCisgICAqLworICBpZighbmZkcykgeworICAgIFNsZWVwKDEwMDAqdHYtPnR2X3NlYyArIHR2LT50dl91c2VjLzEwMDApOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYKKyAgcmV0dXJuIHNlbGVjdChuZmRzLCByZCwgd3IsIGV4YywgdHYpOworfQorCitjaGFyICpsaWJ0ZXN0X2FyZzI9TlVMTDsKK2NoYXIgKmxpYnRlc3RfYXJnMz1OVUxMOworaW50IHRlc3RfYXJnYzsKK2NoYXIgKip0ZXN0X2FyZ3Y7CisKK3N0cnVjdCB0aW1ldmFsIHR2X3Rlc3Rfc3RhcnQ7IC8qIGZvciB0ZXN0IHRpbWluZyAqLworCisjaWZkZWYgVU5JVFRFU1RTCitpbnQgdW5pdGZhaWw7IC8qIGZvciB1bml0dGVzdHMgKi8KKyNlbmRpZgorCisjaWZkZWYgQ1VSTERFQlVHCitzdGF0aWMgdm9pZCBtZW1vcnlfdHJhY2tpbmdfaW5pdCh2b2lkKQoreworICBjaGFyICplbnY7CisgIC8qIGlmIENVUkxfTUVNREVCVUcgaXMgc2V0LCB0aGlzIHN0YXJ0cyBtZW1vcnkgdHJhY2tpbmcgbWVzc2FnZSBsb2dnaW5nICovCisgIGVudiA9IGN1cmxfZ2V0ZW52KCJDVVJMX01FTURFQlVHIik7CisgIGlmKGVudikgeworICAgIC8qIHVzZSB0aGUgdmFsdWUgYXMgZmlsZSBuYW1lICovCisgICAgY2hhciBmbmFtZVtDVVJMX01UX0xPR0ZOQU1FX0JVRlNJWkVdOworICAgIGlmKHN0cmxlbihlbnYpID49IENVUkxfTVRfTE9HRk5BTUVfQlVGU0laRSkKKyAgICAgIGVudltDVVJMX01UX0xPR0ZOQU1FX0JVRlNJWkUtMV0gPSAnXDAnOworICAgIHN0cmNweShmbmFtZSwgZW52KTsKKyAgICBjdXJsX2ZyZWUoZW52KTsKKyAgICBjdXJsX21lbWRlYnVnKGZuYW1lKTsKKyAgICAvKiB0aGlzIHdlaXJkIHN0dWZmIGhlcmUgaXMgdG8gbWFrZSBjdXJsX2ZyZWUoKSBnZXQgY2FsbGVkCisgICAgICAgYmVmb3JlIGN1cmxfbWVtZGVidWcoKSBhcyBvdGhlcndpc2UgbWVtb3J5IHRyYWNraW5nIHdpbGwKKyAgICAgICBsb2cgYSBmcmVlKCkgd2l0aG91dCBhbiBhbGxvYyEgKi8KKyAgfQorICAvKiBpZiBDVVJMX01FTUxJTUlUIGlzIHNldCwgdGhpcyBlbmFibGVzIGZhaWwtb24tYWxsb2MtbnVtYmVyLU4gZmVhdHVyZSAqLworICBlbnYgPSBjdXJsX2dldGVudigiQ1VSTF9NRU1MSU1JVCIpOworICBpZihlbnYpIHsKKyAgICBjaGFyICplbmRwdHI7CisgICAgbG9uZyBudW0gPSBzdHJ0b2woZW52LCAmZW5kcHRyLCAxMCk7CisgICAgaWYoKGVuZHB0ciAhPSBlbnYpICYmIChlbmRwdHIgPT0gZW52ICsgc3RybGVuKGVudikpICYmIChudW0gPiAwKSkKKyAgICAgIGN1cmxfbWVtbGltaXQobnVtKTsKKyAgICBjdXJsX2ZyZWUoZW52KTsKKyAgfQorfQorI2Vsc2UKKyMgIGRlZmluZSBtZW1vcnlfdHJhY2tpbmdfaW5pdCgpIEN1cmxfbm9wX3N0bXQKKyNlbmRpZgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGNoYXIgKlVSTDsKKworICBtZW1vcnlfdHJhY2tpbmdfaW5pdCgpOworCisgIC8qCisgICAqIFNldHVwIHByb3BlciBsb2NhbGUgZnJvbSBlbnZpcm9ubWVudC4gVGhpcyBpcyBuZWVkZWQgdG8gZW5hYmxlIGxvY2FsZS0KKyAgICogc3BlY2lmaWMgYmVoYXZpb3VyIGJ5IHRoZSBDIGxpYnJhcnkgaW4gb3JkZXIgdG8gdGVzdCBmb3IgdW5kZXNpcmVkIHNpZGUKKyAgICogZWZmZWN0cyB0aGF0IGNvdWxkIGNhdXNlIGluIGxpYmN1cmwuCisgICAqLworI2lmZGVmIEhBVkVfU0VUTE9DQUxFCisgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKyNlbmRpZgorCisgIGlmKGFyZ2M8IDIgKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJQYXNzIFVSTCBhcyBhcmd1bWVudCBwbGVhc2VcbiIpOworICAgIHJldHVybiAxOworICB9CisKKyAgdGVzdF9hcmdjID0gYXJnYzsKKyAgdGVzdF9hcmd2ID0gYXJndjsKKworICBpZihhcmdjPjIpCisgICAgbGlidGVzdF9hcmcyPWFyZ3ZbMl07CisKKyAgaWYoYXJnYz4zKQorICAgIGxpYnRlc3RfYXJnMz1hcmd2WzNdOworCisgIFVSTCA9IGFyZ3ZbMV07IC8qIHByb3ZpZGUgdGhpcyB0byB0aGUgcmVzdCAqLworCisgIGZwcmludGYoc3RkZXJyLCAiVVJMOiAlc1xuIiwgVVJMKTsKKworICByZXR1cm4gdGVzdChVUkwpOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MDAuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhMWQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTAwLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgInRlc3R0cmFjZS5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZmRlZiBMSUI1ODUKKworc3RhdGljIGludCBjb3VudGVyOworCitzdGF0aWMgY3VybF9zb2NrZXRfdCB0c3Rfb3BlbnNvY2tldCh2b2lkICpjbGllbnRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybHNvY2t0eXBlIHB1cnBvc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9zb2NrYWRkciAqYWRkcikKK3sKKyAgKHZvaWQpY2xpZW50cDsKKyAgKHZvaWQpcHVycG9zZTsKKyAgcHJpbnRmKCJbT1BFTl0gY291bnRlcjogJWRcbiIsICsrY291bnRlcik7CisgIHJldHVybiBzb2NrZXQoYWRkci0+ZmFtaWx5LCBhZGRyLT5zb2NrdHlwZSwgYWRkci0+cHJvdG9jb2wpOworfQorCitzdGF0aWMgaW50IHRzdF9jbG9zZXNvY2tldCh2b2lkICpjbGllbnRwLCBjdXJsX3NvY2tldF90IHNvY2spCit7CisgICh2b2lkKWNsaWVudHA7CisgIHByaW50ZigiW0NMT1NFXSBjb3VudGVyOiAlZFxuIiwgY291bnRlci0tKTsKKyAgcmV0dXJuIHNjbG9zZShzb2NrKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBjYWxsYmFja3MoQ1VSTCAqY3VybCkKK3sKKyAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX09QRU5TT0NLRVRGVU5DVElPTiwgdHN0X29wZW5zb2NrZXQpOworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ0xPU0VTT0NLRVRGVU5DVElPTiwgdHN0X2Nsb3Nlc29ja2V0KTsKKyAgY291bnRlciA9IDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHNldHVwY2FsbGJhY2tzKHgpIEN1cmxfbm9wX3N0bXQKKyNlbmRpZgorCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTGNvZGUgcmVzOworICBDVVJMICpjdXJsOworICBjaGFyICppcHN0cj1OVUxMOworCisgIGlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZ2xvYmFsX2luaXQoKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKworICBsaWJ0ZXN0X2RlYnVnX2NvbmZpZy5ub2hleCA9IDE7CisgIGxpYnRlc3RfZGVidWdfY29uZmlnLnRyYWNldGltZSA9IDE7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfREVCVUdEQVRBLCAmbGlidGVzdF9kZWJ1Z19jb25maWcpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0RFQlVHRlVOQ1RJT04sIGxpYnRlc3RfZGVidWdfY2IpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICBpZihsaWJ0ZXN0X2FyZzMgJiYgIXN0cmNtcChsaWJ0ZXN0X2FyZzMsICJhY3RpdmVmdHAiKSkKKyAgICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0ZUUFBPUlQsICItIik7CisKKyAgc2V0dXBjYWxsYmFja3MoY3VybCk7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgaWYoIXJlcykgeworICAgIEZJTEUgKm1vbzsKKyAgICByZXMgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19QUklNQVJZX0lQLCAmaXBzdHIpOworICAgIG1vbyA9IGZvcGVuKGxpYnRlc3RfYXJnMiwgIndiIik7CisgICAgaWYobW9vKSB7CisgICAgICBkb3VibGUgdGltZV9uYW1lbG9va3VwOworICAgICAgZG91YmxlIHRpbWVfY29ubmVjdDsKKyAgICAgIGRvdWJsZSB0aW1lX3ByZXRyYW5zZmVyOworICAgICAgZG91YmxlIHRpbWVfc3RhcnR0cmFuc2ZlcjsKKyAgICAgIGRvdWJsZSB0aW1lX3RvdGFsOworICAgICAgZnByaW50Zihtb28sICJJUDogJXNcbiIsIGlwc3RyKTsKKyAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX05BTUVMT09LVVBfVElNRSwgJnRpbWVfbmFtZWxvb2t1cCk7CisgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19DT05ORUNUX1RJTUUsICZ0aW1lX2Nvbm5lY3QpOworICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fUFJFVFJBTlNGRVJfVElNRSwgJnRpbWVfcHJldHJhbnNmZXIpOworICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgJnRpbWVfc3RhcnR0cmFuc2Zlcik7CisgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19UT1RBTF9USU1FLCAmdGltZV90b3RhbCk7CisKKyAgICAgIC8qIHNpbmNlIHRoZSB0aW1pbmcgd2lsbCBhbHdheXMgdmFyeSB3ZSBvbmx5IGNvbXBhcmUgcmVsYXRpdmUgZGlmZmVyZW5jZXMKKyAgICAgICAgIGJldHdlZW4gdGhlc2UgNSB0aW1lcyAqLworICAgICAgaWYodGltZV9uYW1lbG9va3VwID49IHRpbWVfY29ubmVjdCkgeworICAgICAgICBmcHJpbnRmKG1vbywgIm5hbWVsb29rdXAgdnMgY29ubmVjdDogJWYgJWZcbiIsCisgICAgICAgICAgICAgICAgdGltZV9uYW1lbG9va3VwLCB0aW1lX2Nvbm5lY3QpOworICAgICAgfQorICAgICAgaWYodGltZV9jb25uZWN0ID49IHRpbWVfcHJldHJhbnNmZXIpIHsKKyAgICAgICAgZnByaW50Zihtb28sICJjb25uZWN0IHZzIHByZXRyYW5zZmVyOiAlZiAlZlxuIiwKKyAgICAgICAgICAgICAgICB0aW1lX2Nvbm5lY3QsIHRpbWVfcHJldHJhbnNmZXIpOworICAgICAgfQorICAgICAgaWYodGltZV9wcmV0cmFuc2ZlciA+PSB0aW1lX3N0YXJ0dHJhbnNmZXIpIHsKKyAgICAgICAgZnByaW50Zihtb28sICJwcmV0cmFuc2ZlciB2cyBzdGFydHRyYW5zZmVyOiAlZiAlZlxuIiwKKyAgICAgICAgICAgICAgICB0aW1lX3ByZXRyYW5zZmVyLCB0aW1lX3N0YXJ0dHJhbnNmZXIpOworICAgICAgfQorICAgICAgaWYodGltZV9zdGFydHRyYW5zZmVyID49IHRpbWVfdG90YWwpIHsKKyAgICAgICAgZnByaW50Zihtb28sICJzdGFydHRyYW5zZmVyIHZzIHRvdGFsOiAlZiAlZlxuIiwKKyAgICAgICAgICAgICAgICB0aW1lX3N0YXJ0dHJhbnNmZXIsIHRpbWVfdG90YWwpOworICAgICAgfQorCisgICAgICBmY2xvc2UobW9vKTsKKyAgICB9CisgIH0KKwordGVzdF9jbGVhbnVwOgorCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIChpbnQpcmVzOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUwMS5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjI3NWY5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MDEuYwpAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkxjb2RlIHJlczsKKyAgQ1VSTCAqY3VybDsKKworICAodm9pZClVUkw7IC8qIHdlIGRvbid0IHVzZSB0aGlzICovCisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSLCAxTCk7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKK3Rlc3RfY2xlYW51cDoKKworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAoaW50KXJlczsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MDIuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU0NTgzYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTAyLmMKQEAgLTAsMCArMSw5MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaW5jbHVkZSAidGVzdHV0aWwuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNkZWZpbmUgVEVTVF9IQU5HX1RJTUVPVVQgNjAgKiAxMDAwCisKKy8qCisgKiBHZXQgYSBzaW5nbGUgVVJMIHdpdGhvdXQgc2VsZWN0KCkuCisgKi8KKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMICpjID0gTlVMTDsKKyAgQ1VSTE0gKm0gPSBOVUxMOworICBpbnQgcmVzID0gMDsKKyAgaW50IHJ1bm5pbmc7CisKKyAgc3RhcnRfdGVzdF90aW1pbmcoKTsKKworICBnbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIGVhc3lfaW5pdChjKTsKKworICBlYXN5X3NldG9wdChjLCBDVVJMT1BUX1VSTCwgVVJMKTsKKworICBtdWx0aV9pbml0KG0pOworCisgIG11bHRpX2FkZF9oYW5kbGUobSwgYyk7CisKKyAgZm9yKDs7KSB7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICBmZF9zZXQgZmRyZWFkLCBmZHdyaXRlLCBmZGV4Y2VwOworICAgIGludCBtYXhmZCA9IC05OTsKKworICAgIHRpbWVvdXQudHZfc2VjID0gMDsKKyAgICB0aW1lb3V0LnR2X3VzZWMgPSAxMDAwMDBMOyAvKiAxMDAgbXMgKi8KKworICAgIG11bHRpX3BlcmZvcm0obSwgJnJ1bm5pbmcpOworCisgICAgYWJvcnRfb25fdGVzdF90aW1lb3V0KCk7CisKKyAgICBpZighcnVubmluZykKKyAgICAgIGJyZWFrOyAvKiBkb25lICovCisKKyAgICBGRF9aRVJPKCZmZHJlYWQpOworICAgIEZEX1pFUk8oJmZkd3JpdGUpOworICAgIEZEX1pFUk8oJmZkZXhjZXApOworCisgICAgbXVsdGlfZmRzZXQobSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOworCisgICAgLyogQXQgdGhpcyBwb2ludCwgbWF4ZmQgaXMgZ3VhcmFudGVlZCB0byBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gLTEuICovCisKKyAgICBzZWxlY3RfdGVzdChtYXhmZCsxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZ0aW1lb3V0KTsKKworICAgIGFib3J0X29uX3Rlc3RfdGltZW91dCgpOworICB9CisKK3Rlc3RfY2xlYW51cDoKKworICAvKiBwcm9wZXIgY2xlYW51cCBzZXF1ZW5jZSAtIHR5cGUgUEEgKi8KKworICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUobSwgYyk7CisgIGN1cmxfbXVsdGlfY2xlYW51cChtKTsKKyAgY3VybF9lYXN5X2NsZWFudXAoYyk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gcmVzOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUwMy5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2Y5NmFhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MDMuYwpAQCAtMCwwICsxLDEwMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaW5jbHVkZSAidGVzdHV0aWwuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNkZWZpbmUgVEVTVF9IQU5HX1RJTUVPVVQgNjAgKiAxMDAwCisKKy8qCisgKiBTb3VyY2UgY29kZSBpbiBoZXJlIGh1Z2VseSBhcyByZXBvcnRlZCBpbiBidWcgcmVwb3J0IDY1MTQ2MCBieQorICogQ2hyaXN0b3BoZXIgUi4gUGFsbWVyLgorICoKKyAqIFVzZSBtdWx0aSBpbnRlcmZhY2UgdG8gZ2V0IEhUVFBTIGRvY3VtZW50IG92ZXIgcHJveHksIGFuZCBwcm92aWRlCisgKiBhdXRoIGluZm8uCisgKi8KKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMICpjID0gTlVMTDsKKyAgQ1VSTE0gKm0gPSBOVUxMOworICBpbnQgcmVzID0gMDsKKyAgaW50IHJ1bm5pbmc7CisKKyAgc3RhcnRfdGVzdF90aW1pbmcoKTsKKworICBnbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIGVhc3lfaW5pdChjKTsKKworICBlYXN5X3NldG9wdChjLCBDVVJMT1BUX1BST1hZLCBsaWJ0ZXN0X2FyZzIpOyAvKiBzZXQgaW4gZmlyc3QuYyAqLworICBlYXN5X3NldG9wdChjLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgZWFzeV9zZXRvcHQoYywgQ1VSTE9QVF9VU0VSUFdELCAidGVzdDppbmciKTsKKyAgZWFzeV9zZXRvcHQoYywgQ1VSTE9QVF9QUk9YWVVTRVJQV0QsICJ0ZXN0OmluZyIpOworICBlYXN5X3NldG9wdChjLCBDVVJMT1BUX0hUVFBQUk9YWVRVTk5FTCwgMUwpOworICBlYXN5X3NldG9wdChjLCBDVVJMT1BUX0hFQURFUiwgMUwpOworCisgIG11bHRpX2luaXQobSk7CisKKyAgbXVsdGlfYWRkX2hhbmRsZShtLCBjKTsKKworICBmb3IoOzspIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCBpbnRlcnZhbDsKKyAgICBmZF9zZXQgcmQsIHdyLCBleGM7CisgICAgaW50IG1heGZkID0gLTk5OworCisgICAgaW50ZXJ2YWwudHZfc2VjID0gMTsKKyAgICBpbnRlcnZhbC50dl91c2VjID0gMDsKKworICAgIG11bHRpX3BlcmZvcm0obSwgJnJ1bm5pbmcpOworCisgICAgYWJvcnRfb25fdGVzdF90aW1lb3V0KCk7CisKKyAgICBpZighcnVubmluZykKKyAgICAgIGJyZWFrOyAvKiBkb25lICovCisKKyAgICBGRF9aRVJPKCZyZCk7CisgICAgRkRfWkVSTygmd3IpOworICAgIEZEX1pFUk8oJmV4Yyk7CisKKyAgICBtdWx0aV9mZHNldChtLCAmcmQsICZ3ciwgJmV4YywgJm1heGZkKTsKKworICAgIC8qIEF0IHRoaXMgcG9pbnQsIG1heGZkIGlzIGd1YXJhbnRlZWQgdG8gYmUgZ3JlYXRlciBvciBlcXVhbCB0aGFuIC0xLiAqLworCisgICAgc2VsZWN0X3Rlc3QobWF4ZmQrMSwgJnJkLCAmd3IsICZleGMsICZpbnRlcnZhbCk7CisKKyAgICBhYm9ydF9vbl90ZXN0X3RpbWVvdXQoKTsKKyAgfQorCit0ZXN0X2NsZWFudXA6CisKKyAgLyogcHJvcGVyIGNsZWFudXAgc2VxdWVuY2UgLSB0eXBlIFBBICovCisKKyAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKG0sIGMpOworICBjdXJsX211bHRpX2NsZWFudXAobSk7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGMpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIHJlczsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MDQuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTA0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4ZmM5OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTA0LmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgInRlc3R1dGlsLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjZGVmaW5lIFRFU1RfSEFOR19USU1FT1VUIDYwICogMTAwMAorCisvKgorICogU291cmNlIGNvZGUgaW4gaGVyZSBodWdlbHkgYXMgcmVwb3J0ZWQgaW4gYnVnIHJlcG9ydCA2NTE0NjQgYnkKKyAqIENocmlzdG9waGVyIFIuIFBhbG1lci4KKyAqCisgKiBVc2UgbXVsdGkgaW50ZXJmYWNlIHRvIGdldCBkb2N1bWVudCBvdmVyIHByb3h5IHdpdGggYmFkIHBvcnQgbnVtYmVyLgorICogVGhpcyBjYXVzZWQgdGhlIGludGVyZmFjZSB0byAiaGFuZyIgaW4gbGliY3VybCA3LjEwLjIuCisgKi8KK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTCAqYyA9IE5VTEw7CisgIGludCByZXMgPSAwOworICBDVVJMTSAqbSA9IE5VTEw7CisgIGZkX3NldCByZCwgd3IsIGV4YzsKKyAgaW50IHJ1bm5pbmc7CisKKyAgc3RhcnRfdGVzdF90aW1pbmcoKTsKKworICBnbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIGVhc3lfaW5pdChjKTsKKworICAvKiBUaGUgcG9pbnQgaGVyZSBpcyB0aGF0IHRoZXJlIG11c3Qgbm90IGJlIGFueXRoaW5nIHJ1bm5pbmcgb24gdGhlIGdpdmVuCisgICAgIHByb3h5IHBvcnQgKi8KKyAgaWYgKGxpYnRlc3RfYXJnMikKKyAgICBlYXN5X3NldG9wdChjLCBDVVJMT1BUX1BST1hZLCBsaWJ0ZXN0X2FyZzIpOworICBlYXN5X3NldG9wdChjLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgZWFzeV9zZXRvcHQoYywgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisKKyAgbXVsdGlfaW5pdChtKTsKKworICBtdWx0aV9hZGRfaGFuZGxlKG0sIGMpOworCisgIGZvcig7OykgeworICAgIHN0cnVjdCB0aW1ldmFsIGludGVydmFsOworICAgIGludCBtYXhmZCA9IC05OTsKKworICAgIGludGVydmFsLnR2X3NlYyA9IDE7CisgICAgaW50ZXJ2YWwudHZfdXNlYyA9IDA7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfbXVsdGlfcGVyZm9ybSgpXG4iKTsKKworICAgIG11bHRpX3BlcmZvcm0obSwgJnJ1bm5pbmcpOworCisgICAgYWJvcnRfb25fdGVzdF90aW1lb3V0KCk7CisKKyAgICBpZighcnVubmluZykgeworICAgICAgLyogVGhpcyBpcyB3aGVyZSB0aGlzIGNvZGUgaXMgZXhwZWN0ZWQgdG8gcmVhY2ggKi8KKyAgICAgIGludCBudW1sZWZ0OworICAgICAgQ1VSTE1zZyAqbXNnID0gY3VybF9tdWx0aV9pbmZvX3JlYWQobSwgJm51bWxlZnQpOworICAgICAgZnByaW50ZihzdGRlcnIsICJFeHBlY3RlZDogbm90IHJ1bm5pbmdcbiIpOworICAgICAgaWYobXNnICYmICFudW1sZWZ0KQorICAgICAgICByZXMgPSBURVNUX0VSUl9TVUNDRVNTOyAvKiB0aGlzIGlzIHdoZXJlIHdlIHNob3VsZCBiZSAqLworICAgICAgZWxzZQorICAgICAgICByZXMgPSBURVNUX0VSUl9GQUlMVVJFOyAvKiBub3QgY29ycmVjdCAqLworICAgICAgYnJlYWs7IC8qIGRvbmUgKi8KKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJydW5uaW5nID09ICVkXG4iLCBydW5uaW5nKTsKKworICAgIEZEX1pFUk8oJnJkKTsKKyAgICBGRF9aRVJPKCZ3cik7CisgICAgRkRfWkVSTygmZXhjKTsKKworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9tdWx0aV9mZHNldCgpXG4iKTsKKworICAgIG11bHRpX2Zkc2V0KG0sICZyZCwgJndyLCAmZXhjLCAmbWF4ZmQpOworCisgICAgLyogQXQgdGhpcyBwb2ludCwgbWF4ZmQgaXMgZ3VhcmFudGVlZCB0byBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gLTEuICovCisKKyAgICBzZWxlY3RfdGVzdChtYXhmZCsxLCAmcmQsICZ3ciwgJmV4YywgJmludGVydmFsKTsKKworICAgIGFib3J0X29uX3Rlc3RfdGltZW91dCgpOworICB9CisKK3Rlc3RfY2xlYW51cDoKKworICAvKiBwcm9wZXIgY2xlYW51cCBzZXF1ZW5jZSAtIHR5cGUgUEEgKi8KKworICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUobSwgYyk7CisgIGN1cmxfbXVsdGlfY2xlYW51cChtKTsKKyAgY3VybF9lYXN5X2NsZWFudXAoYyk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gcmVzOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUwNS5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTQxMzFlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MDUuYwpAQCAtMCwwICsxLDE1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qCisgKiBUaGlzIGV4YW1wbGUgc2hvd3MgYW4gRlRQIHVwbG9hZCwgd2l0aCBhIHJlbmFtZSBvZiB0aGUgZmlsZSBqdXN0IGFmdGVyCisgKiBhIHN1Y2Nlc3NmdWwgdXBsb2FkLgorICoKKyAqIEV4YW1wbGUgYmFzZWQgb24gc291cmNlIGNvZGUgcHJvdmlkZWQgYnkgRXJpY2sgTnV3ZW5kYW0uIFRoYW5rcyEKKyAqLworCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlcyA9IENVUkxFX09LOworICBGSUxFICpoZF9zcmMgOworICBpbnQgaGQgOworICBzdHJ1Y3Rfc3RhdCBmaWxlX2luZm87CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpobDsKKyAgaW50IGVycm9yOworCisgIHN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJsaXN0PU5VTEw7CisgIGNvbnN0IGNoYXIgKmJ1Zl8xID0gIlJORlIgNTA1IjsKKyAgY29uc3QgY2hhciAqYnVmXzIgPSAiUk5UTyA1MDUtZm9ycmVhbCI7CisKKyAgaWYgKCFsaWJ0ZXN0X2FyZzIpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiA8dXJsPiA8ZmlsZS10by11cGxvYWQ+XG4iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBoZF9zcmMgPSBmb3BlbihsaWJ0ZXN0X2FyZzIsICJyYiIpOworICBpZihOVUxMID09IGhkX3NyYykgeworICAgIGVycm9yID0gRVJSTk87CisgICAgZnByaW50ZihzdGRlcnIsICJmb3BlbigpIGZhaWxlZCB3aXRoIGVycm9yOiAlZCAlc1xuIiwKKyAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBmaWxlOiAlc1xuIiwgbGlidGVzdF9hcmcyKTsKKyAgICByZXR1cm4gLTI7IC8qIGlmIHRoaXMgaGFwcGVucyB0aGluZ3MgYXJlIG1ham9yIHdlaXJkICovCisgIH0KKworICAvKiBnZXQgdGhlIGZpbGUgc2l6ZSBvZiB0aGUgbG9jYWwgZmlsZSAqLworICBoZCA9IGZzdGF0KGZpbGVubyhoZF9zcmMpLCAmZmlsZV9pbmZvKTsKKyAgaWYoaGQgPT0gLTEpIHsKKyAgICAvKiBjYW4ndCBvcGVuIGZpbGUsIGJhaWwgb3V0ICovCisgICAgZXJyb3IgPSBFUlJOTzsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImZzdGF0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkICVzXG4iLAorICAgICAgICAgICAgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogY2Fubm90IG9wZW4gZmlsZSAlc1xuIiwgbGlidGVzdF9hcmcyKTsKKyAgICBmY2xvc2UoaGRfc3JjKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZighIGZpbGVfaW5mby5zdF9zaXplKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogZmlsZSAlcyBoYXMgemVybyBzaXplIVxuIiwgbGlidGVzdF9hcmcyKTsKKyAgICBmY2xvc2UoaGRfc3JjKTsKKyAgICByZXR1cm4gLTQ7CisgIH0KKworICBpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBmY2xvc2UoaGRfc3JjKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgLyogZ2V0IGEgY3VybCBoYW5kbGUgKi8KKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICBmY2xvc2UoaGRfc3JjKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgLyogYnVpbGQgYSBsaXN0IG9mIGNvbW1hbmRzIHRvIHBhc3MgdG8gbGliY3VybCAqLworCisgIGlmICgoaGwgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJsaXN0LCBidWZfMSkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfc2xpc3RfYXBwZW5kKCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgZmNsb3NlKGhkX3NyYyk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorICBpZiAoKGhlYWRlcmxpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChobCwgYnVmXzIpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX3NsaXN0X2FwcGVuZCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9zbGlzdF9mcmVlX2FsbChobCk7CisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIGZjbG9zZShoZF9zcmMpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKyAgaGVhZGVybGlzdCA9IGhsOworCisgIC8qIGVuYWJsZSB1cGxvYWRpbmcgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUExPQUQsIDFMKTsKKworICAvKiBlbmFibGUgdmVyYm9zZSAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICAvKiBzcGVjaWZ5IHRhcmdldCAqLworICB0ZXN0X3NldG9wdChjdXJsLENVUkxPUFRfVVJMLCBVUkwpOworCisgIC8qIHBhc3MgaW4gdGhhdCBsYXN0IG9mIEZUUCBjb21tYW5kcyB0byBydW4gYWZ0ZXIgdGhlIHRyYW5zZmVyICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9TVFFVT1RFLCBoZWFkZXJsaXN0KTsKKworICAvKiBub3cgc3BlY2lmeSB3aGljaCBmaWxlIHRvIHVwbG9hZCAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0lORklMRSwgaGRfc3JjKTsKKworICAvKiBhbmQgZ2l2ZSB0aGUgc2l6ZSBvZiB0aGUgdXBsb2FkIChvcHRpb25hbCkgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEVTSVpFX0xBUkdFLAorICAgICAgICAgICAgICAgICAgIChjdXJsX29mZl90KWZpbGVfaW5mby5zdF9zaXplKTsKKworICAvKiBOb3cgcnVuIG9mZiBhbmQgZG8gd2hhdCB5b3UndmUgYmVlbiB0b2xkISAqLworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKwordGVzdF9jbGVhbnVwOgorCisgIC8qIGNsZWFuIHVwIHRoZSBGVFAgY29tbWFuZHMgbGlzdCAqLworICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGhlYWRlcmxpc3QpOworCisgIC8qIGNsb3NlIHRoZSBsb2NhbCBmaWxlICovCisgIGZjbG9zZShoZF9zcmMpOworCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTA2LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUwNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzdlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUwNi5jCkBAIC0wLDAgKzEsMjc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpIT1NUSEVBREVSID0gIkhvc3Q6IHd3dy5ob3N0LmZvby5jb20iOworc3RhdGljIGNvbnN0IGNoYXIgKkpBUiA9ICJsb2cvamFyNTA2IjsKKyNkZWZpbmUgVEhSRUFEUyAyCisKKy8qIHN0cnVjdCBjb250YWluaW5nIGRhdGEgb2YgYSB0aHJlYWQgKi8KK3N0cnVjdCBUZGF0YSB7CisgIENVUkxTSCAqc2hhcmU7CisgIGNoYXIgKnVybDsKK307CisKK3N0cnVjdCB1c2VyZGF0YSB7CisgIGNoYXIgKnRleHQ7CisgIGludCBjb3VudGVyOworfTsKKworLyogbG9jayBjYWxsYmFjayAqLworc3RhdGljIHZvaWQgbXlfbG9jayhDVVJMICpoYW5kbGUsIGN1cmxfbG9ja19kYXRhIGRhdGEsIGN1cmxfbG9ja19hY2Nlc3MgbGFjY2VzcywKKyAgICAgICAgICB2b2lkICp1c2VwdHIgKQoreworICBjb25zdCBjaGFyICp3aGF0OworICBzdHJ1Y3QgdXNlcmRhdGEgKnVzZXIgPSAoc3RydWN0IHVzZXJkYXRhICopdXNlcHRyOworCisgICh2b2lkKWhhbmRsZTsKKyAgKHZvaWQpbGFjY2VzczsKKworICBzd2l0Y2ggKCBkYXRhICkgeworICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfU0hBUkU6CisgICAgICB3aGF0ID0gInNoYXJlIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfRE5TOgorICAgICAgd2hhdCA9ICJkbnMiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9DT09LSUU6CisgICAgICB3aGF0ID0gImNvb2tpZSI7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZnByaW50ZihzdGRlcnIsICJsb2NrOiBubyBzdWNoIGRhdGE6ICVkXG4iLCAoaW50KWRhdGEpOworICAgICAgcmV0dXJuOworICB9CisgIHByaW50ZigibG9jazogICAlLTZzIFslc106ICVkXG4iLCB3aGF0LCB1c2VyLT50ZXh0LCB1c2VyLT5jb3VudGVyKTsKKyAgdXNlci0+Y291bnRlcisrOworfQorCisvKiB1bmxvY2sgY2FsbGJhY2sgKi8KK3N0YXRpYyB2b2lkIG15X3VubG9jayhDVVJMICpoYW5kbGUsIGN1cmxfbG9ja19kYXRhIGRhdGEsIHZvaWQgKnVzZXB0ciApCit7CisgIGNvbnN0IGNoYXIgKndoYXQ7CisgIHN0cnVjdCB1c2VyZGF0YSAqdXNlciA9IChzdHJ1Y3QgdXNlcmRhdGEgKil1c2VwdHI7CisgICh2b2lkKWhhbmRsZTsKKyAgc3dpdGNoICggZGF0YSApIHsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX1NIQVJFOgorICAgICAgd2hhdCA9ICJzaGFyZSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0ROUzoKKyAgICAgIHdoYXQgPSAiZG5zIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFOgorICAgICAgd2hhdCA9ICJjb29raWUiOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGZwcmludGYoc3RkZXJyLCAidW5sb2NrOiBubyBzdWNoIGRhdGE6ICVkXG4iLCAoaW50KWRhdGEpOworICAgICAgcmV0dXJuOworICB9CisgIHByaW50ZigidW5sb2NrOiAlLTZzIFslc106ICVkXG4iLCB3aGF0LCB1c2VyLT50ZXh0LCB1c2VyLT5jb3VudGVyKTsKKyAgdXNlci0+Y291bnRlcisrOworfQorCisKKy8qIGJ1aWxkIGhvc3QgZW50cnkgKi8KK3N0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqc2V0aG9zdChzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycykKK3sKKyAgKHZvaWQpaGVhZGVyczsKKyAgcmV0dXJuIGN1cmxfc2xpc3RfYXBwZW5kKE5VTEwsIEhPU1RIRUFERVIgKTsKK30KKworCisvKiB0aGUgZHVtbXkgdGhyZWFkIGZ1bmN0aW9uICovCitzdGF0aWMgdm9pZCAqZmlyZSh2b2lkICpwdHIpCit7CisgIENVUkxjb2RlIGNvZGU7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzOworICBzdHJ1Y3QgVGRhdGEgKnRkYXRhID0gKHN0cnVjdCBUZGF0YSopcHRyOworICBDVVJMICpjdXJsOworICBpbnQgaT0wOworCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGhlYWRlcnMgPSBzZXRob3N0KE5VTEwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgICAgMUwpOworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgaGVhZGVycyk7CisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsICAgICAgICB0ZGF0YS0+dXJsKTsKKyAgcHJpbnRmKCAiQ1VSTE9QVF9TSEFSRVxuIiApOworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU0hBUkUsIHRkYXRhLT5zaGFyZSk7CisKKyAgcHJpbnRmKCAiUEVSRk9STVxuIiApOworICBjb2RlID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGlmKCBjb2RlICE9IENVUkxFX09LICkgeworICAgIGZwcmludGYoc3RkZXJyLCAicGVyZm9ybSB1cmwgJyVzJyByZXBlYXQgJWQgZmFpbGVkLCBjdXJsY29kZSAlZFxuIiwKKyAgICAgICAgICAgIHRkYXRhLT51cmwsIGksIChpbnQpY29kZSk7CisgIH0KKworICBwcmludGYoICJDTEVBTlVQXG4iICk7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGhlYWRlcnMpOworCisgIHJldHVybiBOVUxMOworfQorCisKKy8qIGJ1aWxkIHJlcXVlc3QgdXJsICovCitzdGF0aWMgY2hhciAqc3VidXJsKGNvbnN0IGNoYXIgKmJhc2UsIGludCBpKQoreworICByZXR1cm4gY3VybF9tYXByaW50ZigiJXMlLjRkIiwgYmFzZSwgaSk7Cit9CisKKworLyogdGVzdCBmdW5jdGlvbiAqLworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBpbnQgcmVzOworICBDVVJMU0hjb2RlIHNjb2RlID0gQ1VSTFNIRV9PSzsKKyAgY2hhciAqdXJsOworICBzdHJ1Y3QgVGRhdGEgdGRhdGE7CisgIENVUkwgKmN1cmw7CisgIENVUkxTSCAqc2hhcmU7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzOworICBpbnQgaTsKKyAgc3RydWN0IHVzZXJkYXRhIHVzZXI7CisKKyAgdXNlci50ZXh0ID0gKGNoYXIgKikiUGlncyBpbiBzcGFjZSI7CisgIHVzZXIuY291bnRlciA9IDA7CisKKyAgcHJpbnRmKCAiR0xPQkFMX0lOSVRcbiIgKTsKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIC8qIHByZXBhcmUgc2hhcmUgKi8KKyAgcHJpbnRmKCAiU0hBUkVfSU5JVFxuIiApOworICBpZiAoKHNoYXJlID0gY3VybF9zaGFyZV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfc2hhcmVfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBpZiAoIENVUkxTSEVfT0sgPT0gc2NvZGUgKSB7CisgICAgcHJpbnRmKCAiQ1VSTFNIT1BUX0xPQ0tGVU5DXG4iICk7CisgICAgc2NvZGUgPSBjdXJsX3NoYXJlX3NldG9wdCggc2hhcmUsIENVUkxTSE9QVF9MT0NLRlVOQywgbXlfbG9jayk7CisgIH0KKyAgaWYgKCBDVVJMU0hFX09LID09IHNjb2RlICkgeworICAgIHByaW50ZiggIkNVUkxTSE9QVF9VTkxPQ0tGVU5DXG4iICk7CisgICAgc2NvZGUgPSBjdXJsX3NoYXJlX3NldG9wdCggc2hhcmUsIENVUkxTSE9QVF9VTkxPQ0tGVU5DLCBteV91bmxvY2spOworICB9CisgIGlmICggQ1VSTFNIRV9PSyA9PSBzY29kZSApIHsKKyAgICBwcmludGYoICJDVVJMU0hPUFRfVVNFUkRBVEFcbiIgKTsKKyAgICBzY29kZSA9IGN1cmxfc2hhcmVfc2V0b3B0KCBzaGFyZSwgQ1VSTFNIT1BUX1VTRVJEQVRBLCAmdXNlcik7CisgIH0KKyAgaWYgKCBDVVJMU0hFX09LID09IHNjb2RlICkgeworICAgIHByaW50ZiggIkNVUkxfTE9DS19EQVRBX0NPT0tJRVxuIiApOworICAgIHNjb2RlID0gY3VybF9zaGFyZV9zZXRvcHQoIHNoYXJlLCBDVVJMU0hPUFRfU0hBUkUsIENVUkxfTE9DS19EQVRBX0NPT0tJRSk7CisgIH0KKyAgaWYgKCBDVVJMU0hFX09LID09IHNjb2RlICkgeworICAgIHByaW50ZiggIkNVUkxfTE9DS19EQVRBX0ROU1xuIiApOworICAgIHNjb2RlID0gY3VybF9zaGFyZV9zZXRvcHQoIHNoYXJlLCBDVVJMU0hPUFRfU0hBUkUsIENVUkxfTE9DS19EQVRBX0ROUyk7CisgIH0KKworICBpZiAoIENVUkxTSEVfT0sgIT0gc2NvZGUgKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX3NoYXJlX3NldG9wdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9zaGFyZV9jbGVhbnVwKHNoYXJlKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisKKyAgcmVzID0gMDsKKworICAvKiBzdGFydCB0cmVhZHMgKi8KKyAgZm9yIChpPTE7IGk8PVRIUkVBRFM7IGkrKyApIHsKKworICAgIC8qIHNldCB0aHJlYWQgZGF0YSAqLworICAgIHRkYXRhLnVybCAgID0gc3VidXJsKCBVUkwsIGkgKTsgLyogbXVzdCBiZSBjdXJsX2ZyZWUoKWQgKi8KKyAgICB0ZGF0YS5zaGFyZSA9IHNoYXJlOworCisgICAgLyogc2ltdWxhdGUgdGhyZWFkLCBkaXJlY3QgY2FsbCBvZiAidGhyZWFkIiBmdW5jdGlvbiAqLworICAgIHByaW50ZiggIioqKiBydW4gJWRcbiIsaSApOworICAgIGZpcmUoICZ0ZGF0YSApOworCisgICAgY3VybF9mcmVlKCB0ZGF0YS51cmwgKTsKKworICB9CisKKworICAvKiBmZXRjaCBhIGFub3RoZXIgb25lIGFuZCBzYXZlIGNvb2tpZXMgKi8KKyAgcHJpbnRmKCAiKioqIHJ1biAlZFxuIiwgaSApOworICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9zaGFyZV9jbGVhbnVwKHNoYXJlKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIHVybCA9IHN1YnVybCggVVJMLCBpICk7CisgIGhlYWRlcnMgPSBzZXRob3N0KCBOVUxMICk7CisgIHRlc3Rfc2V0b3B0KCBjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcnMgKTsKKyAgdGVzdF9zZXRvcHQoIGN1cmwsIENVUkxPUFRfVVJMLCAgICAgICAgdXJsICk7CisgIHByaW50ZiggIkNVUkxPUFRfU0hBUkVcbiIgKTsKKyAgdGVzdF9zZXRvcHQoIGN1cmwsIENVUkxPUFRfU0hBUkUsICAgICAgc2hhcmUgKTsKKyAgcHJpbnRmKCAiQ1VSTE9QVF9DT09LSUVKQVJcbiIgKTsKKyAgdGVzdF9zZXRvcHQoIGN1cmwsIENVUkxPUFRfQ09PS0lFSkFSLCAgSkFSICk7CisKKyAgcHJpbnRmKCAiUEVSRk9STVxuIiApOworICBjdXJsX2Vhc3lfcGVyZm9ybSggY3VybCApOworCisgIC8qIHRyeSB0byBmcmVlIHNoYXJlLCBleHBlY3QgdG8gZmFpbCBiZWNhdXNlIHNoYXJlIGlzIGluIHVzZSovCisgIHByaW50ZiggInRyeSBTSEFSRV9DTEVBTlVQLi4uXG4iICk7CisgIHNjb2RlID0gY3VybF9zaGFyZV9jbGVhbnVwKCBzaGFyZSApOworICBpZiAoIHNjb2RlPT1DVVJMU0hFX09LICkKKyAgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9zaGFyZV9jbGVhbnVwIHN1Y2NlZWQgYnV0IGVycm9yIGV4cGVjdGVkXG4iKTsKKyAgICBzaGFyZSA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgcHJpbnRmKCAiU0hBUkVfQ0xFQU5VUCBmYWlsZWQsIGNvcnJlY3RcbiIgKTsKKyAgfQorCit0ZXN0X2NsZWFudXA6CisKKyAgLyogY2xlYW4gdXAgbGFzdCBoYW5kbGUgKi8KKyAgcHJpbnRmKCAiQ0xFQU5VUFxuIiApOworICBjdXJsX2Vhc3lfY2xlYW51cCggY3VybCApOworICBjdXJsX3NsaXN0X2ZyZWVfYWxsKCBoZWFkZXJzICk7CisKKyAgY3VybF9mcmVlKHVybCk7CisKKyAgLyogZnJlZSBzaGFyZSAqLworICBwcmludGYoICJTSEFSRV9DTEVBTlVQXG4iICk7CisgIHNjb2RlID0gY3VybF9zaGFyZV9jbGVhbnVwKCBzaGFyZSApOworICBpZiAoIHNjb2RlIT1DVVJMU0hFX09LICkKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfc2hhcmVfY2xlYW51cCBmYWlsZWQsIGNvZGUgZXJybm8gJWRcbiIsCisgICAgICAgICAgICAoaW50KXNjb2RlKTsKKworICBwcmludGYoICJHTE9CQUxfQ0xFQU5VUFxuIiApOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIHJlczsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MDcuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTA3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjMjFkZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTA3LmMKQEAgLTAsMCArMSwxMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgInRlc3R1dGlsLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjZGVmaW5lIFRFU1RfSEFOR19USU1FT1VUIDYwICogMTAwMAorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkwqIGN1cmxzID0gTlVMTDsKKyAgQ1VSTE0qIG11bHRpID0gTlVMTDsKKyAgaW50IHN0aWxsX3J1bm5pbmc7CisgIGludCBpID0gLTE7CisgIGludCByZXMgPSAwOworICBDVVJMTXNnICptc2c7CisKKyAgc3RhcnRfdGVzdF90aW1pbmcoKTsKKworICBnbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIG11bHRpX2luaXQobXVsdGkpOworCisgIGVhc3lfaW5pdChjdXJscyk7CisKKyAgZWFzeV9zZXRvcHQoY3VybHMsIENVUkxPUFRfVVJMLCBVUkwpOworICBlYXN5X3NldG9wdChjdXJscywgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKworICBtdWx0aV9hZGRfaGFuZGxlKG11bHRpLCBjdXJscyk7CisKKyAgbXVsdGlfcGVyZm9ybShtdWx0aSwgJnN0aWxsX3J1bm5pbmcpOworCisgIGFib3J0X29uX3Rlc3RfdGltZW91dCgpOworCisgIHdoaWxlKHN0aWxsX3J1bm5pbmcpIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgIGZkX3NldCBmZHJlYWQ7CisgICAgZmRfc2V0IGZkd3JpdGU7CisgICAgZmRfc2V0IGZkZXhjZXA7CisgICAgaW50IG1heGZkID0gLTk5OworCisgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICBGRF9aRVJPKCZmZHdyaXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKyAgICB0aW1lb3V0LnR2X3NlYyA9IDE7CisgICAgdGltZW91dC50dl91c2VjID0gMDsKKworICAgIG11bHRpX2Zkc2V0KG11bHRpLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZtYXhmZCk7CisKKyAgICAvKiBBdCB0aGlzIHBvaW50LCBtYXhmZCBpcyBndWFyYW50ZWVkIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAtMS4gKi8KKworICAgIHNlbGVjdF90ZXN0KG1heGZkKzEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVvdXQpOworCisgICAgYWJvcnRfb25fdGVzdF90aW1lb3V0KCk7CisKKyAgICBtdWx0aV9wZXJmb3JtKG11bHRpLCAmc3RpbGxfcnVubmluZyk7CisKKyAgICBhYm9ydF9vbl90ZXN0X3RpbWVvdXQoKTsKKyAgfQorCisgIG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKG11bHRpLCAmc3RpbGxfcnVubmluZyk7CisgIGlmKG1zZykKKyAgICAvKiB0aGlzIHNob3VsZCBub3cgY29udGFpbiBhIHJlc3VsdCBjb2RlIGZyb20gdGhlIGVhc3kgaGFuZGxlLAorICAgICAgIGdldCBpdCAqLworICAgIGkgPSBtc2ctPmRhdGEucmVzdWx0OworCit0ZXN0X2NsZWFudXA6CisKKyAgLyogdW5kb2N1bWVudGVkIGNsZWFudXAgc2VxdWVuY2UgLSB0eXBlIFVBICovCisKKyAgY3VybF9tdWx0aV9jbGVhbnVwKG11bHRpKTsKKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybHMpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgaWYocmVzKQorICAgIGkgPSByZXM7CisKKyAgcmV0dXJuIGk7IC8qIHJldHVybiB0aGUgZmluYWwgcmV0dXJuIGNvZGUgKi8KK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTA4LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUwOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhY2EwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUwOC5jCkBAIC0wLDAgKzEsMTA3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitzdGF0aWMgY2hhciBkYXRhW109InRoaXMgaXMgd2hhdCB3ZSBwb3N0IHRvIHRoZSBzaWxseSB3ZWIgc2VydmVyXG4iOworCitzdHJ1Y3QgV3JpdGVUaGlzIHsKKyAgY2hhciAqcmVhZHB0cjsKKyAgc2l6ZV90IHNpemVsZWZ0OworfTsKKworc3RhdGljIHNpemVfdCByZWFkX2NhbGxiYWNrKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqdXNlcnApCit7CisgIHN0cnVjdCBXcml0ZVRoaXMgKnBvb2ggPSAoc3RydWN0IFdyaXRlVGhpcyAqKXVzZXJwOworCisgIGlmKHNpemUqbm1lbWIgPCAxKQorICAgIHJldHVybiAwOworCisgIGlmKHBvb2gtPnNpemVsZWZ0KSB7CisgICAgKihjaGFyICopcHRyID0gcG9vaC0+cmVhZHB0clswXTsgLyogY29weSBvbmUgc2luZ2xlIGJ5dGUgKi8KKyAgICBwb29oLT5yZWFkcHRyKys7ICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBvaW50ZXIgKi8KKyAgICBwb29oLT5zaXplbGVmdC0tOyAgICAgICAgICAgICAgICAvKiBsZXNzIGRhdGEgbGVmdCAqLworICAgIHJldHVybiAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdlIHJldHVybiAxIGJ5dGUgYXQgYSB0aW1lISAqLworICB9CisKKyAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIG1vcmUgZGF0YSBsZWZ0IHRvIGRlbGl2ZXIgKi8KK30KKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM9Q1VSTEVfT0s7CisKKyAgc3RydWN0IFdyaXRlVGhpcyBwb29oOworCisgIHBvb2gucmVhZHB0ciA9IGRhdGE7CisgIHBvb2guc2l6ZWxlZnQgPSBzdHJsZW4oZGF0YSk7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIC8qIEZpcnN0IHNldCB0aGUgVVJMIHRoYXQgaXMgYWJvdXQgdG8gcmVjZWl2ZSBvdXIgUE9TVC4gKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisKKyAgLyogTm93IHNwZWNpZnkgd2Ugd2FudCB0byBQT1NUIGRhdGEgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NULCAxTCk7CisKKyNpZmRlZiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMKKyAgLyogQ29udmVydCB0aGUgUE9TVCBkYXRhIHRvIEFTQ0lJICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVFJBTlNGRVJURVhULCAxTCk7CisjZW5kaWYKKworICAvKiBTZXQgdGhlIGV4cGVjdGVkIFBPU1Qgc2l6ZSAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIChsb25nKXBvb2guc2l6ZWxlZnQpOworCisgIC8qIHdlIHdhbnQgdG8gdXNlIG91ciBvd24gcmVhZCBmdW5jdGlvbiAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgcmVhZF9jYWxsYmFjayk7CisKKyAgLyogcG9pbnRlciB0byBwYXNzIHRvIG91ciByZWFkIGZ1bmN0aW9uICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU5GSUxFLCAmcG9vaCk7CisKKyAgLyogZ2V0IHZlcmJvc2UgZGVidWcgb3V0cHV0IHBsZWFzZSAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICAvKiBpbmNsdWRlIGhlYWRlcnMgaW4gdGhlIG91dHB1dCAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUiwgMUwpOworCisgIC8qIFBlcmZvcm0gdGhlIHJlcXVlc3QsIHJlcyB3aWxsIGdldCB0aGUgcmV0dXJuIGNvZGUgKi8KKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKK3Rlc3RfY2xlYW51cDoKKworICAvKiBhbHdheXMgY2xlYW51cCAqLworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUxMC5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzkxNjRhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MTAuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKnBvc3RbXT17CisgICJvbmUiLAorICAidHdvIiwKKyAgInRocmVlIiwKKyAgImFuZCBhIGZpbmFsIGxvbmdlciBjcmFwOiBmb3VyIiwKKyAgTlVMTAorfTsKKworCitzdHJ1Y3QgV3JpdGVUaGlzIHsKKyAgaW50IGNvdW50ZXI7Cit9OworCitzdGF0aWMgc2l6ZV90IHJlYWRfY2FsbGJhY2sodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICp1c2VycCkKK3sKKyAgc3RydWN0IFdyaXRlVGhpcyAqcG9vaCA9IChzdHJ1Y3QgV3JpdGVUaGlzICopdXNlcnA7CisgIGNvbnN0IGNoYXIgKmRhdGE7CisKKyAgaWYoc2l6ZSpubWVtYiA8IDEpCisgICAgcmV0dXJuIDA7CisKKyAgZGF0YSA9IHBvc3RbcG9vaC0+Y291bnRlcl07CisKKyAgaWYoZGF0YSkgeworICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oZGF0YSk7CisgICAgbWVtY3B5KHB0ciwgZGF0YSwgbGVuKTsKKyAgICBwb29oLT5jb3VudGVyKys7IC8qIGFkdmFuY2UgcG9pbnRlciAqLworICAgIHJldHVybiBsZW47CisgIH0KKyAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIG1vcmUgZGF0YSBsZWZ0IHRvIGRlbGl2ZXIgKi8KK30KKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM9Q1VSTEVfT0s7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpzbGlzdCA9IE5VTEw7CisgIHN0cnVjdCBXcml0ZVRoaXMgcG9vaDsKKyAgcG9vaC5jb3VudGVyID0gMDsKKworICBpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgc2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdCwgIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIik7CisgIGlmIChzbGlzdCA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX3NsaXN0X2FwcGVuZCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICAvKiBGaXJzdCBzZXQgdGhlIFVSTCB0aGF0IGlzIGFib3V0IHRvIHJlY2VpdmUgb3VyIFBPU1QuICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworCisgIC8qIE5vdyBzcGVjaWZ5IHdlIHdhbnQgdG8gUE9TVCBkYXRhICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9TVCwgMUwpOworCisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgIC8qIENvbnZlcnQgdGhlIFBPU1QgZGF0YSB0byBBU0NJSSAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1RSQU5TRkVSVEVYVCwgMUwpOworI2VuZGlmCisKKyAgLyogd2Ugd2FudCB0byB1c2Ugb3VyIG93biByZWFkIGZ1bmN0aW9uICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCByZWFkX2NhbGxiYWNrKTsKKworICAvKiBwb2ludGVyIHRvIHBhc3MgdG8gb3VyIHJlYWQgZnVuY3Rpb24gKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEUsICZwb29oKTsKKworICAvKiBnZXQgdmVyYm9zZSBkZWJ1ZyBvdXRwdXQgcGxlYXNlICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgIC8qIGluY2x1ZGUgaGVhZGVycyBpbiB0aGUgb3V0cHV0ICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSLCAxTCk7CisKKyAgLyogZW5mb3JjZSBjaHVua2VkIHRyYW5zZmVyIGJ5IHNldHRpbmcgdGhlIGhlYWRlciAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIHNsaXN0KTsKKworI2lmZGVmIExJQjU2NQorICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBBVVRILCBDVVJMQVVUSF9ESUdFU1QpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VTRVJQV0QsICJmb286YmFyIik7CisjZW5kaWYKKworICAvKiBQZXJmb3JtIHRoZSByZXF1ZXN0LCByZXMgd2lsbCBnZXQgdGhlIHJldHVybiBjb2RlICovCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCit0ZXN0X2NsZWFudXA6CisKKyAgLyogY2xlYW4gdXAgdGhlIGhlYWRlcnMgbGlzdCAqLworICBpZihzbGlzdCkKKyAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKHNsaXN0KTsKKworICAvKiBhbHdheXMgY2xlYW51cCAqLworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUxMS5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmUyZDJmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MTEuYwpAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkxjb2RlIHJlczsKKyAgQ1VSTCAqY3VybDsKKworICBpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfRklMRVRJTUUsIDFMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9OT0JPRFksIDFMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKK3Rlc3RfY2xlYW51cDoKKworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAoaW50KXJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTEyLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUxMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZGExOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUxMi5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qIFRlc3QgY2FzZSBjb2RlIGJhc2VkIG9uIHNvdXJjZSBpbiBhIGJ1ZyByZXBvcnQgZmlsZWQgYnkgSmFtZXMgQnVyc2Egb24KKyAgIDI4IEFwciAyMDA0ICovCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTGNvZGUgY29kZTsKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTCAqY3VybDI7CisgIGludCByYyA9IDk5OworCisgIGNvZGUgPSBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisgIGlmKGNvZGUgPT0gQ1VSTEVfT0spIHsKKworICAgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworICAgIGlmKGN1cmwpIHsKKworICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKyAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKworICAgICAgY3VybDIgPSBjdXJsX2Vhc3lfZHVwaGFuZGxlKGN1cmwpOworICAgICAgaWYoY3VybDIpIHsKKworICAgICAgICBjb2RlID0gY3VybF9lYXN5X3NldG9wdChjdXJsMiwgQ1VSTE9QVF9VUkwsIFVSTCk7CisgICAgICAgIGlmKGNvZGUgPT0gQ1VSTEVfT0spIHsKKworICAgICAgICAgIGNvZGUgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsMik7CisgICAgICAgICAgaWYoY29kZSA9PSBDVVJMRV9PSykKKyAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByYyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHJjID0gMjsKKworICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsMik7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJjID0gMzsKKworICAgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJjID0gNDsKKworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgfQorICBlbHNlCisgICAgcmMgPSA1OworCisgIHJldHVybiByYzsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MTMuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAxM2FjMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTEzLmMKQEAgLTAsMCArMSw4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworc3RhdGljIHNpemVfdCByZWFkX2NhbGxiYWNrKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqdXNlcnApCit7CisgICh2b2lkKXB0cjsKKyAgKHZvaWQpc2l6ZTsKKyAgKHZvaWQpbm1lbWI7CisgICh2b2lkKXVzZXJwOworICByZXR1cm4gQ1VSTF9SRUFERlVOQ19BQk9SVDsKK30KKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM9Q1VSTEVfT0s7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIC8qIEZpcnN0IHNldCB0aGUgVVJMIHRoYXQgaXMgYWJvdXQgdG8gcmVjZWl2ZSBvdXIgUE9TVC4gKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisKKyAgLyogTm93IHNwZWNpZnkgd2Ugd2FudCB0byBQT1NUIGRhdGEgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NULCAxTCk7CisKKyAgLyogU2V0IHRoZSBleHBlY3RlZCBQT1NUIHNpemUgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFLCAxTCk7CisKKyAgLyogd2Ugd2FudCB0byB1c2Ugb3VyIG93biByZWFkIGZ1bmN0aW9uICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCByZWFkX2NhbGxiYWNrKTsKKworICAvKiBwb2ludGVyIHRvIHBhc3MgdG8gb3VyIHJlYWQgZnVuY3Rpb24gKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEUsIE5VTEwpOworCisgIC8qIGdldCB2ZXJib3NlIGRlYnVnIG91dHB1dCBwbGVhc2UgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisKKyAgLyogaW5jbHVkZSBoZWFkZXJzIGluIHRoZSBvdXRwdXQgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKworICAvKiBQZXJmb3JtIHRoZSByZXF1ZXN0LCByZXMgd2lsbCBnZXQgdGhlIHJldHVybiBjb2RlICovCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCit0ZXN0X2NsZWFudXA6CisKKyAgLyogYWx3YXlzIGNsZWFudXAgKi8KKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gKGludClyZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUxNC5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTNlOTBkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MTQuYwpAQCAtMCwwICsxLDc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlcz1DVVJMRV9PSzsKKworICBpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgLyogRmlyc3Qgc2V0IHRoZSBVUkwgdGhhdCBpcyBhYm91dCB0byByZWNlaXZlIG91ciBQT1NULiAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKworICAvKiBCYXNlZCBvbiBhIGJ1ZyByZXBvcnQgYnkgTmllbHMgdmFuIFRvbmdlcmVuIG9uIEp1bmUgMjksIDIwMDQ6CisKKyAgQSB3ZWlyZCBzaXR1YXRpb24gb2NjdXJzIHdoZW4gcmVxdWVzdCAxIGlzIGEgUE9TVCByZXF1ZXN0IGFuZCB0aGUgcmVxdWVzdAorICAyIGlzIGEgSEVBRCByZXF1ZXN0LiBGb3IgdGhlIFBPU1QgcmVxdWVzdCB3ZSBzZXQgdGhlIENVUkxPUFRfUE9TVEZJRUxEUywKKyAgQ1VSTE9QVF9QT1NURklFTERTSVpFIGFuZCBDVVJMT1BUX1BPU1Qgb3B0aW9ucy4gRm9yIHRoZSBIRUFEIHJlcXVlc3Qgd2UKKyAgc2V0IHRoZSBDVVJMT1BUX05PQk9EWSBvcHRpb24gdG8gJzEnLgorCisgICovCisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCAibW9vIik7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9TVEZJRUxEU0laRSwgM0wpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1BPU1QsIDFMKTsKKworICAvKiB0aGlzIGlzIHdoZXJlIHRyYW5zZmVyIDEgd291bGQgdGFrZSBwbGFjZSwgYnV0IHNraXAgdGhhdCBhbmQgY2hhbmdlCisgICAgIG9wdGlvbnMgcmlnaHQgYXdheSBpbnN0ZWFkICovCisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9OT0JPRFksIDFMKTsKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsgLyogc2hvdyB2ZXJib3NlIGZvciBkZWJ1ZyAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUiwgMUwpOyAvKiBpbmNsdWRlIGhlYWRlciAqLworCisgIC8qIE5vdywgd2Ugc2hvdWxkIGJlIG1ha2luZyBhIGZpbmUgSEVBRCByZXF1ZXN0ICovCisKKyAgLyogUGVyZm9ybSB0aGUgcmVxdWVzdCAyLCByZXMgd2lsbCBnZXQgdGhlIHJldHVybiBjb2RlICovCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCit0ZXN0X2NsZWFudXA6CisKKyAgLyogYWx3YXlzIGNsZWFudXAgKi8KKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gKGludClyZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUxNS5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTk2YzRhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MTUuYwpAQCAtMCwwICsxLDU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlcz1DVVJMRV9PSzsKKworICBpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgLyogRmlyc3Qgc2V0IHRoZSBVUkwgdGhhdCBpcyBhYm91dCB0byByZWNlaXZlIG91ciBQT1NULiAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCBOVUxMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFLCAwTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOyAvKiBzaG93IHZlcmJvc2UgZm9yIGRlYnVnICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSLCAxTCk7IC8qIGluY2x1ZGUgaGVhZGVyICovCisKKyAgLyogTm93LCB3ZSBzaG91bGQgYmUgbWFraW5nIGEgemVybyBieXRlIFBPU1QgcmVxdWVzdCAqLworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKwordGVzdF9jbGVhbnVwOgorCisgIC8qIGFsd2F5cyBjbGVhbnVwICovCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIChpbnQpcmVzOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MTYuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1OTA5NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTE2LmMKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXM9Q1VSTEVfT0s7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIC8qIEZpcnN0IHNldCB0aGUgVVJMIHRoYXQgaXMgYWJvdXQgdG8gcmVjZWl2ZSBvdXIgUE9TVC4gKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSFRUUFBPU1QsIE5VTEwpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsgLyogc2hvdyB2ZXJib3NlIGZvciBkZWJ1ZyAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUiwgMUwpOyAvKiBpbmNsdWRlIGhlYWRlciAqLworCisgIC8qIE5vdywgd2Ugc2hvdWxkIGJlIG1ha2luZyBhIHplcm8gYnl0ZSBQT1NUIHJlcXVlc3QgKi8KKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKK3Rlc3RfY2xlYW51cDoKKworICAvKiBhbHdheXMgY2xlYW51cCAqLworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAoaW50KXJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTE3LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUxNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNDllYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUxNy5jCkBAIC0wLDAgKzEsMTMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRhdGVzW109eworICAiU3VuLCAwNiBOb3YgMTk5NCAwODo0OTozNyBHTVQiLAorICAiU3VuZGF5LCAwNi1Ob3YtOTQgMDg6NDk6MzcgR01UIiwKKyAgIlN1biBOb3YgIDYgMDg6NDk6MzcgMTk5NCIsCisgICIwNiBOb3YgMTk5NCAwODo0OTozNyBHTVQiLAorICAiMDYtTm92LTk0IDA4OjQ5OjM3IEdNVCIsCisgICJOb3YgIDYgMDg6NDk6MzcgMTk5NCIsCisgICIwNiBOb3YgMTk5NCAwODo0OTozNyIsCisgICIwNi1Ob3YtOTQgMDg6NDk6MzciLAorICAiMTk5NCBOb3YgNiAwODo0OTozNyIsCisgICJHTVQgMDg6NDk6MzcgMDYtTm92LTk0IFN1bmRheSIsCisgICI5NCA2IE5vdiAwODo0OTozNyIsCisgICIxOTk0IE5vdiA2IiwKKyAgIjA2LU5vdi05NCIsCisgICJTdW4gTm92IDYgOTQiLAorICAiMTk5NC5Ob3YuNiIsCisgICJTdW4vTm92LzYvOTQvR01UIiwKKyAgIlN1biwgMDYgTm92IDE5OTQgMDg6NDk6MzcgQ0VUIiwKKyAgIjA2IE5vdiAxOTk0IDA4OjQ5OjM3IEVTVCIsCisgICJTdW4sIDEyIFNlcCAyMDA0IDE1OjA1OjU4IC0wNzAwIiwKKyAgIlNhdCwgMTEgU2VwIDIwMDQgMjE6MzI6MTEgKzAyMDAiLAorICAiMjAwNDA5MTIgMTU6MDU6NTggLTA3MDAiLAorICAiMjAwNDA5MTEgKzAyMDAiLAorICAiVGh1LCAwMS1KYW4tMTk3MCAwMDo1OTo1OSBHTVQiLAorICAiVGh1LCAwMS1KYW4tMTk3MCAwMTowMDowMCBHTVQiLAorLyogICIyMDk0IE5vdiA2IiwgU2VlIC4uL2RhdGEvdGVzdDUxNyBmb3IgZGV0YWlscyAqLworICAiU2F0LCAxNS1BcHItMTcgMjE6MDE6MjIgR01UIiwKKyAgIlRodSwgMTktQXByLTIwMDcgMTY6MDA6MDAgR01UIiwKKyAgIldlZCwgMjUgQXByIDIwMDcgMjE6MDI6MTMgR01UIiwKKyAgIlRodSwgMTkvQXByXFwyMDA3IDE2OjAwOjAwIEdNVCIsCisgICJGcmksIDEgSmFuIDIwMTAgMDE6MDE6NTAgR01UIiwKKyAgIldlZG5lc2RheSwgMS1KYW4tMjAwMyAwMDowMDowMCBHTVQiLAorICAiLCAxLUphbi0yMDAzIDAwOjAwOjAwIEdNVCIsCisgICIgMS1KYW4tMjAwMyAwMDowMDowMCBHTVQiLAorICAiMS1KYW4tMjAwMyAwMDowMDowMCBHTVQiLAorICAiV2VkLDE4LUFwci0wNyAyMjo1MDoxMiBHTVQiLAorICAiV2lsbHlXb25rYSAgLCAxOC1BcHItMDcgMjI6NTA6MTIgR01UIiwKKyAgIldpbGx5V29ua2EgICwgMTgtQXByLTA3IDIyOjUwOjEyIiwKKyAgIldpbGx5V29ua2EgICwgIDE4LWFwci0wNyAgIDIyOjUwOjEyIiwKKyAgIk1vbiwgMTgtQXByLTE5NzcgMjI6NTA6MTMgR01UIiwKKyAgIk1vbiwgMTgtQXByLTc3IDIyOjUwOjEzIEdNVCIsCisgICJcIlNhdCwgMTUtQXByLTE3XFxcIjIxOjAxOjIyXFxcIkdNVFwiIiwKKyAgIlBhcnR5ZGF5LCAxOC0gQXByaWwtMDcgMjI6NTA6MTIiLAorICAiUGFydHlkYXksIDE4IC0gQXByaS0wNyAyMjo1MDoxMiIsCisgICJXZWRuZXMsIDEtSmFudWFyLTIwMDMgMDA6MDA6MDAgR01UIiwKKyAgIlNhdCwgMTUtQXByLTE3IDIxOjAxOjIyIiwKKyAgIlNhdCwgMTUtQXByLTE3IDIxOjAxOjIyIEdNVC0yIiwKKyAgIlNhdCwgMTUtQXByLTE3IDIxOjAxOjIyIEdNVCBCTEFIIiwKKyAgIlNhdCwgMTUtQXByLTE3IDIxOjAxOjIyIEdNVC0wNDAwIiwKKyAgIlNhdCwgMTUtQXByLTE3IDIxOjAxOjIyIEdNVC0wNDAwIChFRFQpIiwKKyAgIlNhdCwgMTUtQXByLTE3IDIxOjAxOjIyIERTVCIsCisgICJTYXQsIDE1LUFwci0xNyAyMTowMToyMiAtMDQwMCIsCisgICJTYXQsIDE1LUFwci0xNyAyMTowMToyMiAoaGVsbG8gdGhlcmUpIiwKKyAgIlNhdCwgMTUtQXByLTE3IDIxOjAxOjIyIDExOjIyOjMzIiwKKyAgIlNhdCwgMTUtQXByLTE3IDo6MDAgMjE6MDE6MjIiLAorICAiU2F0LCAxNS1BcHItMTcgYm9pbms6eiAyMTowMToyMiIsCisgICJTYXQsIDE1LUFwci0xNyA5MToyMjozMyAyMTowMToyMiIsCisgICJUaHUgQXByIDE4IDIyOjUwOjEyIDIwMDcgR01UIiwKKyAgIjIyOjUwOjEyIFRodSBBcHIgMTggMjAwNyBHTVQiLAorICAiVGh1IDIyOjUwOjEyIEFwciAxOCAyMDA3IEdNVCIsCisgICJUaHUgQXByIDIyOjUwOjEyIDE4IDIwMDcgR01UIiwKKyAgIlRodSBBcHIgMTggMjI6NTA6MTIgMjAwNyBHTVQiLAorICAiVGh1IEFwciAxOCAyMDA3IDIyOjUwOjEyIEdNVCIsCisgICJUaHUgQXByIDE4IDIwMDcgR01UIDIyOjUwOjEyIiwKKyAgIlNhdCwgMTUtQXByLTE3IDIxOjAxOjIyIEdNVCIsCisgICIxNS1TYXQsIEFwci0xNyAyMTowMToyMiBHTVQiLAorICAiMTUtU2F0LCBBcHIgMjE6MDE6MjIgR01UIDE3IiwKKyAgIjE1LVNhdCwgQXByIDIxOjAxOjIyIEdNVCAyMDE3IiwKKyAgIjE1IEFwciAyMTowMToyMiAyMDE3IiwKKyAgIjE1IDE3IEFwciAyMTowMToyMiIsCisgICJBcHIgMTUgMTcgMjE6MDE6MjIiLAorICAiQXByIDE1IDIxOjAxOjIyIDE3IiwKKyAgIjIwMTcgQXByaWwgMTUgMjE6MDE6MjIiLAorICAiMTUgQXByaWwgMjAxNyAyMTowMToyMiIsCisgICI5OCBBcHJpbCAxNyAyMTowMToyMiIsCisgICJUaHUsIDAxMi1BdWctMjAwOCAyMDo0OTowNyBHTVQiLAorI2lmIDAKKyAgLyogbGVhdmluZyBvdXQgdGhlc2Ugc3RyaW5ncyBzaW5jZSB0aGV5IGRpZmZlciBiZXR3ZWVuIDMyIGFuZCA2NCBiaXQKKyAgICAgYXJjaHMgYW5kIHRoZSB0ZXN0IHN1aXRlIGhhcyBubyBnb29kIHdheSB0byBzdXBwb3J0IHR3byBkaWZmZXJlbnQgb3V0cHV0cworICAgICBsaWtlIHRoYXQgKi8KKyAgIlRodSwgMTItQXVnLTMxODQxIDIwOjQ5OjA3IEdNVCIsCisgICJUaHUsIDEyLUF1Zy05OTk5OTk5OTk5IDIwOjQ5OjA3IEdNVCIsCisjZW5kaWYKKyAgIlRodSwgOTk5OTk5OTk5OTk5LUF1Zy0yMDA3IDIwOjQ5OjA3IEdNVCIsCisgICJUaHUsIDEyLUF1Zy0yMDA3IDIwOjYxOjk5OTk5OTk5OTk5IEdNVCIsCisgICJJQWludE5vRGF0ZUZvb2wiLAorICAiVGh1IEFwciAxOCAyMjo1MCAyMDA3IEdNVCIsIC8qIHdpdGhvdXQgc2Vjb25kcyAqLworICAiMjAxMTA2MjMgMTI6MzQ6NTYiLAorICAiMjAxMTA2MzIgMTI6MzQ6NTYiLAorICAiMjAxMTA2MjMgNTY6MzQ6NTYiLAorICAiMjAxMTEzMjMgMTI6MzQ6NTYiLAorICAiMjAxMTA2MjMgMTI6MzQ6NzkiLAorICAiV2VkLCAzMSBEZWMgMjAwOCAyMzo1OTo2MCBHTVQiLCAvKiBsZWFwIHNlY29uZCAqLworICBOVUxMCit9OworCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIGludCBpOworCisgICh2b2lkKVVSTDsgLyogbm90IHVzZWQgKi8KKworICBmb3IoaT0wOyBkYXRlc1tpXTsgaSsrKSB7CisgICAgcHJpbnRmKCIlZDogJXMgPT4gJWxkXG4iLCBpLCBkYXRlc1tpXSwgKGxvbmcpY3VybF9nZXRkYXRlKGRhdGVzW2ldLCBOVUxMKSk7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTE4LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUxOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZjdmMTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUxOC5jCkBAIC0wLDAgKzEsNTE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpZmRlZiBIQVZFX1NZU19SRVNPVVJDRV9ICisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9MSU1JVFNfSAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZm5kZWYgRkRfU0VUU0laRQorI2Vycm9yICJ0aGlzIHRlc3QgcmVxdWlyZXMgRkRfU0VUU0laRSIKKyNlbmRpZgorCisjZGVmaW5lIFNBRkVUWV9NQVJHSU4gKDE2KQorI2RlZmluZSBOVU1fT1BFTiAgICAgIChGRF9TRVRTSVpFICsgMTApCisjZGVmaW5lIE5VTV9ORUVERUQgICAgKE5VTV9PUEVOICsgU0FGRVRZX01BUkdJTikKKworI2lmIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKE1TRE9TKQorI2RlZmluZSBERVZfTlVMTCAiTlVMIgorI2Vsc2UKKyNkZWZpbmUgREVWX05VTEwgIi9kZXYvbnVsbCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0dFVFJMSU1JVCkgJiYgZGVmaW5lZChIQVZFX1NFVFJMSU1JVCkKKworc3RhdGljIGludCAqZmQgPSBOVUxMOworc3RhdGljIHN0cnVjdCBybGltaXQgbnVtX29wZW47CitzdGF0aWMgY2hhciBtc2didWZmWzI1Nl07CisKK3N0YXRpYyB2b2lkIHN0b3JlX2Vycm1zZyhjb25zdCBjaGFyICptc2csIGludCBlcnIpCit7CisgIGlmICghZXJyKQorICAgIHNwcmludGYobXNnYnVmZiwgIiVzIiwgbXNnKTsKKyAgZWxzZQorICAgIHNwcmludGYobXNnYnVmZiwgIiVzLCBlcnJubyAlZCwgJXMiLCBtc2csIGVyciwgc3RyZXJyb3IoZXJyKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlX2ZpbGVfZGVzY3JpcHRvcnModm9pZCkKK3sKKyAgZm9yIChudW1fb3Blbi5ybGltX2N1ciA9IDA7CisgICAgICAgbnVtX29wZW4ucmxpbV9jdXIgPCBudW1fb3Blbi5ybGltX21heDsKKyAgICAgICBudW1fb3Blbi5ybGltX2N1cisrKQorICAgIGlmIChmZFtudW1fb3Blbi5ybGltX2N1cl0gPiAwKQorICAgICAgY2xvc2UoZmRbbnVtX29wZW4ucmxpbV9jdXJdKTsKKyAgZnJlZShmZCk7CisgIGZkID0gTlVMTDsKK30KKworc3RhdGljIGludCBmb3Blbl93b3Jrcyh2b2lkKQoreworICBGSUxFICpmcGFbM107CisgIGludCBpOworICBpbnQgcmV0ID0gMTsKKworICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgZnBhW2ldID0gTlVMTDsKKyAgfQorICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgZnBhW2ldID0gZm9wZW4oREVWX05VTEwsICJyIik7CisgICAgaWYgKGZwYVtpXSA9PSBOVUxMKSB7CisgICAgICBzdG9yZV9lcnJtc2coImZvcGVuKCkgZmFpbGVkIiwgRVJSTk8pOworICAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnYnVmZik7CisgICAgICByZXQgPSAwOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICBpZiAoZnBhW2ldICE9IE5VTEwpCisgICAgICBmY2xvc2UoZnBhW2ldKTsKKyAgfQorICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJsaW1pdChpbnQga2VlcF9vcGVuKQoreworICBpbnQgbml0ZW1zLCBpOworICBpbnQgKm1lbWNodW5rID0gTlVMTDsKKyAgY2hhciAqZm10OworICBzdHJ1Y3QgcmxpbWl0IHJsOworICBjaGFyIHN0cmJ1ZmZbMjU2XTsKKyAgY2hhciBzdHJidWZmMVs4MV07CisgIGNoYXIgc3RyYnVmZjJbODFdOworICBjaGFyIGZtdF91W10gPSAiJXUiOworICBjaGFyIGZtdF9sdVtdID0gIiVsdSI7CisjaWZkZWYgSEFWRV9MT05HTE9ORworICBjaGFyIGZtdF9sbHVbXSA9ICIlbGx1IjsKKworICBpZiAoc2l6ZW9mKHJsLnJsaW1fbWF4KSA+IHNpemVvZihsb25nKSkKKyAgICBmbXQgPSBmbXRfbGx1OworICBlbHNlCisjZW5kaWYKKyAgICBmbXQgPSAoc2l6ZW9mKHJsLnJsaW1fbWF4KSA8IHNpemVvZihsb25nKSk/Zm10X3U6Zm10X2x1OworCisgIC8qIGdldCBpbml0aWFsIG9wZW4gZmlsZSBsaW1pdHMgKi8KKworICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZybCkgIT0gMCkgeworICAgIHN0b3JlX2Vycm1zZygiZ2V0cmxpbWl0KCkgZmFpbGVkIiwgRVJSTk8pOworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZ2J1ZmYpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIC8qIHNob3cgaW5pdGlhbCBvcGVuIGZpbGUgbGltaXRzICovCisKKyNpZmRlZiBSTElNX0lORklOSVRZCisgIGlmIChybC5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZKQorICAgIHN0cmNweShzdHJidWZmLCAiSU5GSU5JVFkiKTsKKyAgZWxzZQorI2VuZGlmCisgICAgc3ByaW50ZihzdHJidWZmLCBmbXQsIHJsLnJsaW1fY3VyKTsKKyAgZnByaW50ZihzdGRlcnIsICJpbml0aWFsIHNvZnQgbGltaXQ6ICVzXG4iLCBzdHJidWZmKTsKKworI2lmZGVmIFJMSU1fSU5GSU5JVFkKKyAgaWYgKHJsLnJsaW1fbWF4ID09IFJMSU1fSU5GSU5JVFkpCisgICAgc3RyY3B5KHN0cmJ1ZmYsICJJTkZJTklUWSIpOworICBlbHNlCisjZW5kaWYKKyAgICBzcHJpbnRmKHN0cmJ1ZmYsIGZtdCwgcmwucmxpbV9tYXgpOworICBmcHJpbnRmKHN0ZGVyciwgImluaXRpYWwgaGFyZCBsaW1pdDogJXNcbiIsIHN0cmJ1ZmYpOworCisgIC8qIHNob3cgb3VyIGNvbnN0YW50cyAqLworCisgIGZwcmludGYoc3RkZXJyLCAidGVzdDUxOCBGRF9TRVRTSVpFOiAlZFxuIiwgRkRfU0VUU0laRSk7CisgIGZwcmludGYoc3RkZXJyLCAidGVzdDUxOCBOVU1fT1BFTiAgOiAlZFxuIiwgTlVNX09QRU4pOworICBmcHJpbnRmKHN0ZGVyciwgInRlc3Q1MTggTlVNX05FRURFRDogJWRcbiIsIE5VTV9ORUVERUQpOworCisgIC8qCisgICAqIGlmIHNvZnQgbGltaXQgYW5kIGhhcmQgbGltaXQgYXJlIGRpZmZlcmVudCB3ZSBhc2sgdGhlCisgICAqIHN5c3RlbSB0byByYWlzZSBzb2Z0IGxpbWl0IGFsbCB0aGUgd2F5IHVwIHRvIHRoZSBoYXJkCisgICAqIGxpbWl0LiBEdWUgdG8gc29tZSBvdGhlciBzeXN0ZW0gbGltaXQgdGhlIHNvZnQgbGltaXQKKyAgICogbWlnaHQgbm90IGJlIHJhaXNlZCB1cCB0byB0aGUgaGFyZCBsaW1pdC4gU28gZnJvbSB0aGlzCisgICAqIHBvaW50IHRoZSByZXN1bHRpbmcgc29mdCBsaW1pdCBpcyBvdXIgbGltaXQuIFRyeWluZyB0bworICAgKiBvcGVuIG1vcmUgdGhhbiBzb2Z0IGxpbWl0IGZpbGUgZGVzY3JpcHRvcnMgd2lsbCBmYWlsLgorICAgKi8KKworICBpZiAocmwucmxpbV9jdXIgIT0gcmwucmxpbV9tYXgpIHsKKworI2lmZGVmIE9QRU5fTUFYCisgICAgaWYgKChybC5ybGltX2N1ciA+IDApICYmCisgICAgICAgIChybC5ybGltX2N1ciA8IE9QRU5fTUFYKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJyYWlzaW5nIHNvZnQgbGltaXQgdXAgdG8gT1BFTl9NQVhcbiIpOworICAgICAgcmwucmxpbV9jdXIgPSBPUEVOX01BWDsKKyAgICAgIGlmIChzZXRybGltaXQoUkxJTUlUX05PRklMRSwgJnJsKSAhPSAwKSB7CisgICAgICAgIC8qIG9uIGZhaWx1cmUgZG9uJ3QgYWJvcnQganVzdCBpc3N1ZSBhIHdhcm5pbmcgKi8KKyAgICAgICAgc3RvcmVfZXJybXNnKCJzZXRybGltaXQoKSBmYWlsZWQiLCBFUlJOTyk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZ2J1ZmYpOworICAgICAgICBtc2didWZmWzBdID0gJ1wwJzsKKyAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGZwcmludGYoc3RkZXJyLCAicmFpc2luZyBzb2Z0IGxpbWl0IHVwIHRvIGhhcmQgbGltaXRcbiIpOworICAgIHJsLnJsaW1fY3VyID0gcmwucmxpbV9tYXg7CisgICAgaWYgKHNldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmcmwpICE9IDApIHsKKyAgICAgIC8qIG9uIGZhaWx1cmUgZG9uJ3QgYWJvcnQganVzdCBpc3N1ZSBhIHdhcm5pbmcgKi8KKyAgICAgIHN0b3JlX2Vycm1zZygic2V0cmxpbWl0KCkgZmFpbGVkIiwgRVJSTk8pOworICAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnYnVmZik7CisgICAgICBtc2didWZmWzBdID0gJ1wwJzsKKyAgICB9CisKKyAgICAvKiBnZXQgY3VycmVudCBvcGVuIGZpbGUgbGltaXRzICovCisKKyAgICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZybCkgIT0gMCkgeworICAgICAgc3RvcmVfZXJybXNnKCJnZXRybGltaXQoKSBmYWlsZWQiLCBFUlJOTyk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2didWZmKTsKKyAgICAgIHJldHVybiAtMzsKKyAgICB9CisKKyAgICAvKiBzaG93IGN1cnJlbnQgb3BlbiBmaWxlIGxpbWl0cyAqLworCisjaWZkZWYgUkxJTV9JTkZJTklUWQorICAgIGlmIChybC5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZKQorICAgICAgc3RyY3B5KHN0cmJ1ZmYsICJJTkZJTklUWSIpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgc3ByaW50ZihzdHJidWZmLCBmbXQsIHJsLnJsaW1fY3VyKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cnJlbnQgc29mdCBsaW1pdDogJXNcbiIsIHN0cmJ1ZmYpOworCisjaWZkZWYgUkxJTV9JTkZJTklUWQorICAgIGlmIChybC5ybGltX21heCA9PSBSTElNX0lORklOSVRZKQorICAgICAgc3RyY3B5KHN0cmJ1ZmYsICJJTkZJTklUWSIpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgc3ByaW50ZihzdHJidWZmLCBmbXQsIHJsLnJsaW1fbWF4KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cnJlbnQgaGFyZCBsaW1pdDogJXNcbiIsIHN0cmJ1ZmYpOworCisgIH0gLyogKHJsLnJsaW1fY3VyICE9IHJsLnJsaW1fbWF4KSAqLworCisgIC8qCisgICAqIHRlc3QgNTE4IGlzIGFsbCBhYm91dCB0ZXN0aW5nIGxpYmN1cmwgZnVuY3Rpb25hbGl0eQorICAgKiB3aGVuIG1vcmUgdGhhbiBGRF9TRVRTSVpFIGZpbGUgZGVzY3JpcHRvcnMgYXJlIG9wZW4uCisgICAqIFRoaXMgbWVhbnMgdGhhdCBpZiBmb3IgYW55IHJlYXNvbiB3ZSBhcmUgbm90IGFibGUgdG8KKyAgICogb3BlbiBtb3JlIHRoYW4gRkRfU0VUU0laRSBmaWxlIGRlc2NyaXB0b3JzIHRoZW4gdGVzdAorICAgKiA1MTggc2hvdWxkIG5vdCBiZSBydW4uCisgICAqLworCisgIC8qCisgICAqIHZlcmlmeSB0aGF0IHNvZnQgbGltaXQgaXMgaGlnaGVyIHRoYW4gTlVNX05FRURFRCwKKyAgICogd2hpY2ggaXMgdGhlIG51bWJlciBvZiBmaWxlIGRlc2NyaXB0b3JzIHdlIHdvdWxkCisgICAqIHRyeSB0byBvcGVuIHBsdXMgU0FGRVRZX01BUkdJTiB0byBub3QgZXhoYXVzdCB0aGUKKyAgICogZmlsZSBkZXNjcmlwdG9yIHBvb2wKKyAgICovCisKKyAgbnVtX29wZW4ucmxpbV9jdXIgPSBOVU1fTkVFREVEOworCisgIGlmICgocmwucmxpbV9jdXIgPiAwKSAmJgorI2lmZGVmIFJMSU1fSU5GSU5JVFkKKyAgICAgKHJsLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkpICYmCisjZW5kaWYKKyAgICAgKHJsLnJsaW1fY3VyIDw9IG51bV9vcGVuLnJsaW1fY3VyKSkgeworICAgIHNwcmludGYoc3RyYnVmZjIsIGZtdCwgcmwucmxpbV9jdXIpOworICAgIHNwcmludGYoc3RyYnVmZjEsIGZtdCwgbnVtX29wZW4ucmxpbV9jdXIpOworICAgIHNwcmludGYoc3RyYnVmZiwgImZkcyBuZWVkZWQgJXMgPiBzeXN0ZW0gbGltaXQgJXMiLAorICAgICAgICAgICAgc3RyYnVmZjEsIHN0cmJ1ZmYyKTsKKyAgICBzdG9yZV9lcnJtc2coc3RyYnVmZiwgMCk7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnYnVmZik7CisgICAgcmV0dXJuIC00OworICB9CisKKyAgLyoKKyAgICogcmVzZXJ2ZSBhIGNodW5rIG9mIG1lbW9yeSBiZWZvcmUgb3BlbmluZyBmaWxlIGRlc2NyaXB0b3JzIHRvCisgICAqIGF2b2lkIGEgbG93IG1lbW9yeSBjb25kaXRpb24gb25jZSB0aGUgZmlsZSBkZXNjcmlwdG9ycyBhcmUKKyAgICogb3Blbi4gU3lzdGVtIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBtYWtlIHRoZSB0ZXN0IGZhaWwgc2hvdWxkCisgICAqIGJlIGFkZHJlc3NlZCBpbiB0aGUgcHJlY2hlY2sgcGhhc2UuIFRoaXMgY2h1bmsgb2YgbWVtb3J5IHNoYWxsCisgICAqIGJlIGFsd2F5cyBmcmVlKCllZCBiZWZvcmUgZXhpdGluZyB0aGUgcmxpbWl0KCkgZnVuY3Rpb24gc28KKyAgICogdGhhdCBpdCBiZWNvbWVzIGF2YWlsYWJsZSB0byB0aGUgdGVzdC4KKyAgICovCisKKyAgZm9yIChuaXRlbXMgPSBpID0gMTsgbml0ZW1zIDw9IGk7IGkgKj0gMikKKyAgICBuaXRlbXMgPSBpOworICBpZiAobml0ZW1zID4gMHg3ZmZmKQorICAgIG5pdGVtcyA9IDB4NDAwMDA7CisgIGRvIHsKKyAgICBudW1fb3Blbi5ybGltX21heCA9IHNpemVvZigqbWVtY2h1bmspICogKHNpemVfdCluaXRlbXM7CisgICAgc3ByaW50ZihzdHJidWZmLCBmbXQsIG51bV9vcGVuLnJsaW1fbWF4KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImFsbG9jYXRpbmcgbWVtY2h1bmsgJXMgYnl0ZSBhcnJheVxuIiwgc3RyYnVmZik7CisgICAgbWVtY2h1bmsgPSBtYWxsb2Moc2l6ZW9mKCptZW1jaHVuaykgKiAoc2l6ZV90KW5pdGVtcyk7CisgICAgaWYgKCFtZW1jaHVuaykgeworICAgICAgZnByaW50ZihzdGRlcnIsICJtZW1jaHVuaywgbWFsbG9jKCkgZmFpbGVkXG4iKTsKKyAgICAgIG5pdGVtcyAvPSAyOworICAgIH0KKyAgfSB3aGlsZSAobml0ZW1zICYmICFtZW1jaHVuayk7CisgIGlmICghbWVtY2h1bmspIHsKKyAgICBzdG9yZV9lcnJtc2coIm1lbWNodW5rLCBtYWxsb2MoKSBmYWlsZWQiLCBFUlJOTyk7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnYnVmZik7CisgICAgcmV0dXJuIC01OworICB9CisKKyAgLyogaW5pdGlhbGl6ZSBpdCB0byBmaWdodCBsYXp5IGFsbG9jYXRpb24gKi8KKworICBmcHJpbnRmKHN0ZGVyciwgImluaXRpYWxpemluZyBtZW1jaHVuayBhcnJheVxuIik7CisKKyAgZm9yIChpID0gMDsgaSA8IG5pdGVtczsgaSsrKQorICAgIG1lbWNodW5rW2ldID0gLTE7CisKKyAgLyogc2V0IHRoZSBudW1iZXIgb2YgZmlsZSBkZXNjcmlwdG9ycyB3ZSB3aWxsIHRyeSB0byBvcGVuICovCisKKyAgbnVtX29wZW4ucmxpbV9tYXggPSBOVU1fT1BFTjsKKworICAvKiB2ZXJpZnkgdGhhdCB3ZSB3b24ndCBvdmVyZmxvdyBzaXplX3QgaW4gbWFsbG9jKCkgKi8KKworICBpZiAoKHNpemVfdCkobnVtX29wZW4ucmxpbV9tYXgpID4gKChzaXplX3QpLTEpIC8gc2l6ZW9mKCpmZCkpIHsKKyAgICBzcHJpbnRmKHN0cmJ1ZmYxLCBmbXQsIG51bV9vcGVuLnJsaW1fbWF4KTsKKyAgICBzcHJpbnRmKHN0cmJ1ZmYsICJ1bmFibGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgZm9yICVzICIKKyAgICAgICAgICAgICJmaWxlIGRlc2NyaXB0b3JzLCB3b3VsZCBvdmVyZmxvdyBzaXplX3QiLCBzdHJidWZmMSk7CisgICAgc3RvcmVfZXJybXNnKHN0cmJ1ZmYsIDApOworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZ2J1ZmYpOworICAgIGZyZWUobWVtY2h1bmspOworICAgIHJldHVybiAtNjsKKyAgfQorCisgIC8qIGFsbG9jYXRlIGFycmF5IGZvciBmaWxlIGRlc2NyaXB0b3JzICovCisKKyAgc3ByaW50ZihzdHJidWZmLCBmbXQsIG51bV9vcGVuLnJsaW1fbWF4KTsKKyAgZnByaW50ZihzdGRlcnIsICJhbGxvY2F0aW5nIGFycmF5IGZvciAlcyBmaWxlIGRlc2NyaXB0b3JzXG4iLCBzdHJidWZmKTsKKworICBmZCA9IG1hbGxvYyhzaXplb2YoKmZkKSAqIChzaXplX3QpKG51bV9vcGVuLnJsaW1fbWF4KSk7CisgIGlmICghZmQpIHsKKyAgICBzdG9yZV9lcnJtc2coImZkLCBtYWxsb2MoKSBmYWlsZWQiLCBFUlJOTyk7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnYnVmZik7CisgICAgZnJlZShtZW1jaHVuayk7CisgICAgcmV0dXJuIC03OworICB9CisKKyAgLyogaW5pdGlhbGl6ZSBpdCB0byBmaWdodCBsYXp5IGFsbG9jYXRpb24gKi8KKworICBmcHJpbnRmKHN0ZGVyciwgImluaXRpYWxpemluZyBmZCBhcnJheVxuIik7CisKKyAgZm9yIChudW1fb3Blbi5ybGltX2N1ciA9IDA7CisgICAgICAgbnVtX29wZW4ucmxpbV9jdXIgPCBudW1fb3Blbi5ybGltX21heDsKKyAgICAgICBudW1fb3Blbi5ybGltX2N1cisrKQorICAgIGZkW251bV9vcGVuLnJsaW1fY3VyXSA9IC0xOworCisgIHNwcmludGYoc3RyYnVmZiwgZm10LCBudW1fb3Blbi5ybGltX21heCk7CisgIGZwcmludGYoc3RkZXJyLCAidHJ5aW5nIHRvIG9wZW4gJXMgZmlsZSBkZXNjcmlwdG9yc1xuIiwgc3RyYnVmZik7CisKKyAgLyogb3BlbiBhIGR1bW15IGRlc2NyaXB0b3IgKi8KKworICBmZFswXSA9IG9wZW4oREVWX05VTEwsIE9fUkRPTkxZKTsKKyAgaWYgKGZkWzBdIDwgMCkgeworICAgIHNwcmludGYoc3RyYnVmZiwgIm9wZW5pbmcgb2YgJXMgZmFpbGVkIiwgREVWX05VTEwpOworICAgIHN0b3JlX2Vycm1zZyhzdHJidWZmLCBFUlJOTyk7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnYnVmZik7CisgICAgZnJlZShmZCk7CisgICAgZmQgPSBOVUxMOworICAgIGZyZWUobWVtY2h1bmspOworICAgIHJldHVybiAtODsKKyAgfQorCisgIC8qIGNyZWF0ZSBhIGJ1bmNoIG9mIGZpbGUgZGVzY3JpcHRvcnMgKi8KKworICBmb3IgKG51bV9vcGVuLnJsaW1fY3VyID0gMTsKKyAgICAgICBudW1fb3Blbi5ybGltX2N1ciA8IG51bV9vcGVuLnJsaW1fbWF4OworICAgICAgIG51bV9vcGVuLnJsaW1fY3VyKyspIHsKKworICAgIGZkW251bV9vcGVuLnJsaW1fY3VyXSA9IGR1cChmZFswXSk7CisKKyAgICBpZiAoZmRbbnVtX29wZW4ucmxpbV9jdXJdIDwgMCkgeworCisgICAgICBmZFtudW1fb3Blbi5ybGltX2N1cl0gPSAtMTsKKworICAgICAgc3ByaW50ZihzdHJidWZmMSwgZm10LCBudW1fb3Blbi5ybGltX2N1cik7CisgICAgICBzcHJpbnRmKHN0cmJ1ZmYsICJkdXAoKSBhdHRlbXB0ICVzIGZhaWxlZCIsIHN0cmJ1ZmYxKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN0cmJ1ZmYpOworCisgICAgICBzcHJpbnRmKHN0cmJ1ZmYxLCBmbXQsIG51bV9vcGVuLnJsaW1fY3VyKTsKKyAgICAgIHNwcmludGYoc3RyYnVmZiwgImZkcyBzeXN0ZW0gbGltaXQgc2VlbXMgY2xvc2UgdG8gJXMiLCBzdHJidWZmMSk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzdHJidWZmKTsKKworICAgICAgbnVtX29wZW4ucmxpbV9tYXggPSBOVU1fTkVFREVEOworCisgICAgICBzcHJpbnRmKHN0cmJ1ZmYyLCBmbXQsIG51bV9vcGVuLnJsaW1fbWF4KTsKKyAgICAgIHNwcmludGYoc3RyYnVmZjEsIGZtdCwgbnVtX29wZW4ucmxpbV9jdXIpOworICAgICAgc3ByaW50ZihzdHJidWZmLCAiZmRzIG5lZWRlZCAlcyA+IHN5c3RlbSBsaW1pdCAlcyIsCisgICAgICAgICAgICAgIHN0cmJ1ZmYyLCBzdHJidWZmMSk7CisgICAgICBzdG9yZV9lcnJtc2coc3RyYnVmZiwgMCk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2didWZmKTsKKworICAgICAgZm9yIChudW1fb3Blbi5ybGltX2N1ciA9IDA7CisgICAgICAgICAgIGZkW251bV9vcGVuLnJsaW1fY3VyXSA+PSAwOworICAgICAgICAgICBudW1fb3Blbi5ybGltX2N1cisrKQorICAgICAgICBjbG9zZShmZFtudW1fb3Blbi5ybGltX2N1cl0pOworICAgICAgZnJlZShmZCk7CisgICAgICBmZCA9IE5VTEw7CisgICAgICBmcmVlKG1lbWNodW5rKTsKKyAgICAgIHJldHVybiAtOTsKKworICAgIH0KKworICB9CisKKyAgc3ByaW50ZihzdHJidWZmLCBmbXQsIG51bV9vcGVuLnJsaW1fbWF4KTsKKyAgZnByaW50ZihzdGRlcnIsICIlcyBmaWxlIGRlc2NyaXB0b3JzIG9wZW5cbiIsIHN0cmJ1ZmYpOworCisjaWYgIWRlZmluZWQoSEFWRV9QT0xMX0ZJTkUpICAgICYmIFwKKyAgICAhZGVmaW5lZChVU0VfV0lOU09DSykgICAgICAgJiYgXAorICAgICFkZWZpbmVkKFRQRikKKworICAvKgorICAgKiB3aGVuIHVzaW5nIHNlbGVjdCgpIGluc3RlYWQgb2YgcG9sbCgpIHdlIGNhbm5vdCB0ZXN0CisgICAqIGxpYmN1cmwgZnVuY3Rpb25hbGl0eSB3aXRoIGEgc29ja2V0IG51bWJlciBlcXVhbCBvcgorICAgKiBncmVhdGVyIHRoYW4gRkRfU0VUU0laRS4gSW4gYW55IGNhc2UsIG1hY3JvIFZFUklGWV9TT0NLCisgICAqIGluIGxpYi9zZWxlY3QuYyBlbmZvcmNlcyB0aGlzIGNoZWNrIGFuZCBwcm90ZWN0cyBsaWJjdXJsCisgICAqIGZyb20gYSBwb3NzaWJsZSBjcmFzaC4gVGhlIGVmZmVjdCBvZiB0aGlzIHByb3RlY3Rpb24KKyAgICogaXMgdGhhdCB0ZXN0IDUxOCB3aWxsIGFsd2F5cyBmYWlsLCBzaW5jZSB0aGUgYWN0dWFsCisgICAqIGNhbGwgdG8gc2VsZWN0KCkgbmV2ZXIgdGFrZXMgcGxhY2UuIFdlIHNraXAgdGVzdCA1MTgKKyAgICogd2l0aCBhbiBpbmRpY2F0aW9uIHRoYXQgc2VsZWN0IGxpbWl0IHdvdWxkIGJlIGV4Y2VlZGVkLgorICAgKi8KKworICBudW1fb3Blbi5ybGltX2N1ciA9IEZEX1NFVFNJWkUgLSBTQUZFVFlfTUFSR0lOOworICBpZiAobnVtX29wZW4ucmxpbV9tYXggPiBudW1fb3Blbi5ybGltX2N1cikgeworICAgIHNwcmludGYoc3RyYnVmZiwgInNlbGVjdCBsaW1pdCBpcyBGRF9TRVRTSVpFICVkIiwgRkRfU0VUU0laRSk7CisgICAgc3RvcmVfZXJybXNnKHN0cmJ1ZmYsIDApOworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZ2J1ZmYpOworICAgIGNsb3NlX2ZpbGVfZGVzY3JpcHRvcnMoKTsKKyAgICBmcmVlKG1lbWNodW5rKTsKKyAgICByZXR1cm4gLTEwOworICB9CisKKyAgbnVtX29wZW4ucmxpbV9jdXIgPSBGRF9TRVRTSVpFIC0gU0FGRVRZX01BUkdJTjsKKyAgZm9yIChybC5ybGltX2N1ciA9IDA7CisgICAgICAgcmwucmxpbV9jdXIgPCBudW1fb3Blbi5ybGltX21heDsKKyAgICAgICBybC5ybGltX2N1cisrKSB7CisgICAgaWYgKChmZFtybC5ybGltX2N1cl0gPiAwKSAmJgorICAgICAgICgodW5zaWduZWQgaW50KWZkW3JsLnJsaW1fY3VyXSA+IG51bV9vcGVuLnJsaW1fY3VyKSkgeworICAgICAgc3ByaW50ZihzdHJidWZmLCAic2VsZWN0IGxpbWl0IGlzIEZEX1NFVFNJWkUgJWQiLCBGRF9TRVRTSVpFKTsKKyAgICAgIHN0b3JlX2Vycm1zZyhzdHJidWZmLCAwKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZ2J1ZmYpOworICAgICAgY2xvc2VfZmlsZV9kZXNjcmlwdG9ycygpOworICAgICAgZnJlZShtZW1jaHVuayk7CisgICAgICByZXR1cm4gLTExOworICAgIH0KKyAgfQorCisjZW5kaWYgLyogdXNpbmcgYSBGRF9TRVRTSVpFIGJvdW5kIHNlbGVjdCgpICovCisKKyAgLyoKKyAgICogT2xkIG9yICdiYWNrd2FyZHMgY29tcGF0aWJsZScgaW1wbGVtZW50YXRpb25zIG9mIHN0ZGlvIGRvIG5vdCBhbGxvdworICAgKiBoYW5kbGluZyBvZiBzdHJlYW1zIHdpdGggYW4gdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIGdyZWF0ZXIKKyAgICogdGhhbiAyNTUsIGV2ZW4gd2hlbiBhbGxvd2luZyBoaWdoIG51bWJlcmVkIGZpbGUgZGVzY3JpcHRvcnMgZm9yIHNvY2tldHMuCisgICAqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIGJpZyBudW1iZXIgb2YgZmlsZSBkZXNjcmlwdG9ycyB3aGljaCBoYXZlIGJlZW4KKyAgICogb3BlbmVkIHVzaW5nIGR1cCgpLCBzbyBsZXRzIHRlc3QgdGhlIHN0ZGlvIGltcGxlbWVudGF0aW9uIGFuZCBkaXNjb3ZlcgorICAgKiBpZiBpdCBpcyBjYXBhYmxlIG9mIGZvcGVuKClpbmcgc29tZSBhZGRpdGlvbmFsIGZpbGVzLgorICAgKi8KKworICBpZiAoIWZvcGVuX3dvcmtzKCkpIHsKKyAgICBzcHJpbnRmKHN0cmJ1ZmYxLCBmbXQsIG51bV9vcGVuLnJsaW1fbWF4KTsKKyAgICBzcHJpbnRmKHN0cmJ1ZmYsICJzdGRpbyBmb3BlbigpIGZhaWxzIHdpdGggJXMgZmRzIG9wZW4oKSIsCisgICAgICAgICAgICBzdHJidWZmMSk7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnYnVmZik7CisgICAgc3ByaW50ZihzdHJidWZmLCAic3RkaW8gZm9wZW4oKSBmYWlscyB3aXRoIGxvdHMgb2YgZmRzIG9wZW4oKSIpOworICAgIHN0b3JlX2Vycm1zZyhzdHJidWZmLCAwKTsKKyAgICBjbG9zZV9maWxlX2Rlc2NyaXB0b3JzKCk7CisgICAgZnJlZShtZW1jaHVuayk7CisgICAgcmV0dXJuIC0xMjsKKyAgfQorCisgIC8qIGZyZWUgdGhlIGNodW5rIG9mIG1lbW9yeSB3ZSB3ZXJlIHJlc2VydmluZyBzbyB0aGF0IGl0CisgICAgIGJlY29tZXMgYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHRlc3QgKi8KKworICBmcmVlKG1lbWNodW5rKTsKKworICAvKiBjbG9zZSBmaWxlIGRlc2NyaXB0b3JzIHVubGVzcyBpbnN0cnVjdGVkIHRvIGtlZXAgdGhlbSAqLworCisgIGlmICgha2VlcF9vcGVuKSB7CisgICAgY2xvc2VfZmlsZV9kZXNjcmlwdG9ycygpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTGNvZGUgcmVzOworICBDVVJMICpjdXJsOworCisgIGlmKCFzdHJjbXAoVVJMLCAiY2hlY2siKSkgeworICAgIC8qIHVzZWQgYnkgdGhlIHRlc3Qgc2NyaXB0IHRvIGFzayBpZiB3ZSBjYW4gcnVuIHRoaXMgdGVzdCBvciBub3QgKi8KKyAgICBpZihybGltaXQoRkFMU0UpKSB7CisgICAgICBmcHJpbnRmKHN0ZG91dCwgInJsaW1pdCBwcm9ibGVtOiAlc1xuIiwgbXNnYnVmZik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcmV0dXJuIDA7IC8qIHN1cmUsIHJ1biB0aGlzISAqLworICB9CisKKyAgaWYgKHJsaW1pdChUUlVFKSkgeworICAgIC8qIGZhaWx1cmUgKi8KKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgLyogcnVuIHRoZSB0ZXN0IHdpdGggdGhlIGJ1bmNoIG9mIG9wZW4gZmlsZSBkZXNjcmlwdG9ycworICAgICBhbmQgY2xvc2UgdGhlbSBhbGwgb25jZSB0aGUgdGVzdCBpcyBvdmVyICovCisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY2xvc2VfZmlsZV9kZXNjcmlwdG9ycygpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY2xvc2VfZmlsZV9kZXNjcmlwdG9ycygpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSLCAxTCk7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKK3Rlc3RfY2xlYW51cDoKKworICBjbG9zZV9maWxlX2Rlc2NyaXB0b3JzKCk7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIChpbnQpcmVzOworfQorCisjZWxzZSAvKiBkZWZpbmVkKEhBVkVfR0VUUkxJTUlUKSAmJiBkZWZpbmVkKEhBVkVfU0VUUkxJTUlUKSAqLworCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgICh2b2lkKVVSTDsKKyAgcHJpbnRmKCJzeXN0ZW0gbGFja3MgbmVjZXNzYXJ5IHN5c3RlbSBmdW5jdGlvbihzKSIpOworICByZXR1cm4gMTsgLyogc2tpcCB0ZXN0ICovCit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfR0VUUkxJTUlUKSAmJiBkZWZpbmVkKEhBVkVfU0VUUkxJTUlUKSAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MTkuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTE5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyMGM4ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTE5LmMKQEAgLTAsMCArMSw2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMY29kZSByZXM7CisgIENVUkwgKmN1cmw7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VTRVJQV0QsICJtb25zdGVyOnVuZGVyYmVkIik7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSLCAxTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgIC8qIGdldCBmaXJzdCBwYWdlICovCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVNFUlBXRCwgImFub3RoZXJtb25zdGVyOmlud2FyZHJvYmUiKTsKKworICAvKiBnZXQgc2Vjb25kIHBhZ2UgKi8KKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKK3Rlc3RfY2xlYW51cDoKKworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAoaW50KXJlczsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MjAuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZmYWE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTIwLmMKQEAgLTAsMCArMSw1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMY29kZSByZXM7CisgIENVUkwgKmN1cmw7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0ZJTEVUSU1FLCAxTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCit0ZXN0X2NsZWFudXA6CisKKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gKGludClyZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUyMS5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2MzMDY4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MjEuYwpAQCAtMCwwICsxLDU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkxjb2RlIHJlczsKKyAgQ1VSTCAqY3VybDsKKworICBpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9SVCwgc3RydG9sKGxpYnRlc3RfYXJnMiwgTlVMTCwgMTApKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VU0VSUFdELCAieHh4Onl5eSIpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKwordGVzdF9jbGVhbnVwOgorCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIChpbnQpcmVzOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUyMy5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmRjODNkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MjMuYwpAQCAtMCwwICsxLDU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkxjb2RlIHJlczsKKyAgQ1VSTCAqY3VybDsKKworICBpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QUk9YWSwgbGlidGVzdF9hcmcyKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9SVCwgMTk5OTlMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VU0VSUFdELCAieHh4Onl5eSIpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKwordGVzdF9jbGVhbnVwOgorCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIChpbnQpcmVzOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUyNC5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjU2ZGY5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MjQuYwpAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkxjb2RlIHJlczsKKyAgQ1VSTCAqY3VybDsKKworICBpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVBMT0FELCAxTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCit0ZXN0X2NsZWFudXA6CisKKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gKGludClyZXM7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTI1LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUyNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMTI4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUyNS5jCkBAIC0wLDAgKzEsMTY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAidGVzdHV0aWwuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNkZWZpbmUgVEVTVF9IQU5HX1RJTUVPVVQgNjAgKiAxMDAwCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgaW50IHJlcyA9IDA7CisgIENVUkwgKmN1cmwgPSBOVUxMOworICBGSUxFICpoZF9zcmMgPSBOVUxMOworICBpbnQgaGQgOworICBpbnQgZXJyb3I7CisgIHN0cnVjdF9zdGF0IGZpbGVfaW5mbzsKKyAgQ1VSTE0gKm0gPSBOVUxMOworICBpbnQgcnVubmluZzsKKworICBzdGFydF90ZXN0X3RpbWluZygpOworCisgIGlmKCFsaWJ0ZXN0X2FyZzIpIHsKKyNpZmRlZiBMSUI1MjkKKyAgICAvKiB0ZXN0IDUyOSAqLworICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGxpYjUyOSBbdXJsXSBbdXBsb2FkZmlsZV1cbiIpOworI2Vsc2UKKyAgICAvKiB0ZXN0IDUyNSAqLworICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGxpYjUyNSBbdXJsXSBbdXBsb2FkZmlsZV1cbiIpOworI2VuZGlmCisgICAgcmV0dXJuIFRFU1RfRVJSX1VTQUdFOworICB9CisKKyAgaGRfc3JjID0gZm9wZW4obGlidGVzdF9hcmcyLCAicmIiKTsKKyAgaWYoTlVMTCA9PSBoZF9zcmMpIHsKKyAgICBlcnJvciA9IEVSUk5POworICAgIGZwcmludGYoc3RkZXJyLCAiZm9wZW4oKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQgKCVzKVxuIiwKKyAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBmaWxlOiAoJXMpXG4iLCBsaWJ0ZXN0X2FyZzIpOworICAgIHJldHVybiBURVNUX0VSUl9GT1BFTjsKKyAgfQorCisgIC8qIGdldCB0aGUgZmlsZSBzaXplIG9mIHRoZSBsb2NhbCBmaWxlICovCisgIGhkID0gZnN0YXQoZmlsZW5vKGhkX3NyYyksICZmaWxlX2luZm8pOworICBpZihoZCA9PSAtMSkgeworICAgIC8qIGNhbid0IG9wZW4gZmlsZSwgYmFpbCBvdXQgKi8KKyAgICBlcnJvciA9IEVSUk5POworICAgIGZwcmludGYoc3RkZXJyLCAiZnN0YXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQgKCVzKVxuIiwKKyAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGNhbm5vdCBvcGVuIGZpbGUgKCVzKVxuIiwgbGlidGVzdF9hcmcyKTsKKyAgICBmY2xvc2UoaGRfc3JjKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfRlNUQVQ7CisgIH0KKworICByZXNfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKyAgaWYocmVzKSB7CisgICAgZmNsb3NlKGhkX3NyYyk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIGVhc3lfaW5pdChjdXJsKTsKKworICAvKiBlbmFibGUgdXBsb2FkaW5nICovCisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVBMT0FELCAxTCk7CisKKyAgLyogc3BlY2lmeSB0YXJnZXQgKi8KKyAgZWFzeV9zZXRvcHQoY3VybCxDVVJMT1BUX1VSTCwgVVJMKTsKKworICAvKiBnbyB2ZXJib3NlICovCisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgIC8qIHVzZSBhY3RpdmUgRlRQICovCisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfRlRQUE9SVCwgIi0iKTsKKworICAvKiBub3cgc3BlY2lmeSB3aGljaCBmaWxlIHRvIHVwbG9hZCAqLworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQUREQVRBLCBoZF9zcmMpOworCisgIC8qIE5PVEU6IGlmIHlvdSB3YW50IHRoaXMgY29kZSB0byB3b3JrIG9uIFdpbmRvd3Mgd2l0aCBsaWJjdXJsIGFzIGEgRExMLCB5b3UKKyAgICAgTVVTVCBhbHNvIHByb3ZpZGUgYSByZWFkIGNhbGxiYWNrIHdpdGggQ1VSTE9QVF9SRUFERlVOQ1RJT04uIEZhaWxpbmcgdG8KKyAgICAgZG8gc28gd2lsbCBnaXZlIHlvdSBhIGNyYXNoIHNpbmNlIGEgRExMIG1heSBub3QgdXNlIHRoZSB2YXJpYWJsZSdzIG1lbW9yeQorICAgICB3aGVuIHBhc3NlZCBpbiB0byBpdCBmcm9tIGFuIGFwcCBsaWtlIHRoaXMuICovCisKKyAgLyogU2V0IHRoZSBzaXplIG9mIHRoZSBmaWxlIHRvIHVwbG9hZCAob3B0aW9uYWwpLiAgSWYgeW91IGdpdmUgYSAqX0xBUkdFCisgICAgIG9wdGlvbiB5b3UgTVVTVCBtYWtlIHN1cmUgdGhhdCB0aGUgdHlwZSBvZiB0aGUgcGFzc2VkLWluIGFyZ3VtZW50IGlzIGEKKyAgICAgY3VybF9vZmZfdC4gSWYgeW91IHVzZSBDVVJMT1BUX0lORklMRVNJWkUgKHdpdGhvdXQgX0xBUkdFKSB5b3UgbXVzdAorICAgICBtYWtlIHN1cmUgdGhhdCB0byBwYXNzIGluIGEgdHlwZSAnbG9uZycgYXJndW1lbnQuICovCisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU5GSUxFU0laRV9MQVJHRSwgKGN1cmxfb2ZmX3QpZmlsZV9pbmZvLnN0X3NpemUpOworCisgIG11bHRpX2luaXQobSk7CisKKyAgbXVsdGlfYWRkX2hhbmRsZShtLCBjdXJsKTsKKworICBmb3IoOzspIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCBpbnRlcnZhbDsKKyAgICBmZF9zZXQgcmQsIHdyLCBleGM7CisgICAgaW50IG1heGZkID0gLTk5OworCisgICAgaW50ZXJ2YWwudHZfc2VjID0gMTsKKyAgICBpbnRlcnZhbC50dl91c2VjID0gMDsKKworICAgIG11bHRpX3BlcmZvcm0obSwgJnJ1bm5pbmcpOworCisgICAgYWJvcnRfb25fdGVzdF90aW1lb3V0KCk7CisKKyAgICBpZighcnVubmluZykKKyAgICAgIGJyZWFrOyAvKiBkb25lICovCisKKyAgICBGRF9aRVJPKCZyZCk7CisgICAgRkRfWkVSTygmd3IpOworICAgIEZEX1pFUk8oJmV4Yyk7CisKKyAgICBtdWx0aV9mZHNldChtLCAmcmQsICZ3ciwgJmV4YywgJm1heGZkKTsKKworICAgIC8qIEF0IHRoaXMgcG9pbnQsIG1heGZkIGlzIGd1YXJhbnRlZWQgdG8gYmUgZ3JlYXRlciBvciBlcXVhbCB0aGFuIC0xLiAqLworCisgICAgc2VsZWN0X3Rlc3QobWF4ZmQrMSwgJnJkLCAmd3IsICZleGMsICZpbnRlcnZhbCk7CisKKyAgICBhYm9ydF9vbl90ZXN0X3RpbWVvdXQoKTsKKyAgfQorCit0ZXN0X2NsZWFudXA6CisKKyNpZmRlZiBMSUI1MjkKKyAgLyogdGVzdCA1MjkgKi8KKyAgLyogcHJvcGVyIGNsZWFudXAgc2VxdWVuY2UgLSB0eXBlIFBBICovCisgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShtLCBjdXJsKTsKKyAgY3VybF9tdWx0aV9jbGVhbnVwKG0pOworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworI2Vsc2UKKyAgLyogdGVzdCA1MjUgKi8KKyAgLyogcHJvcGVyIGNsZWFudXAgc2VxdWVuY2UgLSB0eXBlIFBCICovCisgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShtLCBjdXJsKTsKKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfbXVsdGlfY2xlYW51cChtKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworI2VuZGlmCisKKyAgLyogY2xvc2UgdGhlIGxvY2FsIGZpbGUgKi8KKyAgZmNsb3NlKGhkX3NyYyk7CisKKyAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTI2LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUyNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjA0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUyNi5jCkBAIC0wLDAgKzEsMTg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBUaGlzIGNvZGUgc2V0cyB1cCBtdWx0aXBsZSBlYXN5IGhhbmRsZXMgdGhhdCB0cmFuc2ZlciBhIHNpbmdsZSBmaWxlIGZyb20KKyAqIHRoZSBzYW1lIFVSTCwgaW4gYSBzZXJpYWwgbWFubmVyIGFmdGVyIGVhY2ggb3RoZXIuIER1ZSB0byB0aGUgY29ubmVjdGlvbgorICogc2hhcmluZyB3aXRoaW4gdGhlIG11bHRpIGhhbmRsZSBhbGwgdHJhbnNmZXJzIGFyZSBwZXJmb3JtZWQgb24gdGhlIHNhbWUKKyAqIHBlcnNpc3RlbnQgY29ubmVjdGlvbi4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIHVzZWQgZm9yIGxpYjUyNiwgbGliNTI3IGFuZCBsaWI1MzIgd2l0aCBvbmx5ICNpZmRlZnMKKyAqIGNvbnRyb2xsaW5nIHRoZSBzbWFsbCBkaWZmZXJlbmNlcy4KKyAqCisgKiAtIGxpYjUyNiBjbG9zZXMgYWxsIGVhc3kgaGFuZGxlcyBhZnRlcgorICogICB0aGV5IGFsbCBoYXZlIHRyYW5zZmVyZWQgdGhlIGZpbGUgb3ZlciB0aGUgc2luZ2xlIGNvbm5lY3Rpb24KKyAqIC0gbGliNTI3IGNsb3NlcyBlYWNoIGVhc3kgaGFuZGxlIGFmdGVyIGVhY2ggc2luZ2xlIHRyYW5zZmVyLgorICogLSBsaWI1MzIgdXNlcyBvbmx5IGEgc2luZ2xlIGVhc3kgaGFuZGxlIHRoYXQgaXMgcmVtb3ZlZCwgcmVzZXQgYW5kIHRoZW4KKyAqICAgcmUtYWRkZWQgZm9yIGVhY2ggdHJhbnNmZXIKKyAqCisgKiBUZXN0IGNhc2UgNTI2LCA1MjcgYW5kIDUzMiB1c2UgRlRQLCB3aGlsZSB0ZXN0IDUyOCB1c2VzIHRoZSBsaWI1MjYgdG9vbCBidXQKKyAqIHdpdGggSFRUUC4KKyAqLworCisjaW5jbHVkZSAidGVzdC5oIgorCisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgInRlc3R1dGlsLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjZGVmaW5lIFRFU1RfSEFOR19USU1FT1VUIDYwICogMTAwMAorCisjZGVmaW5lIE5VTV9IQU5ETEVTIDQKKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBpbnQgcmVzID0gMDsKKyAgQ1VSTCAqY3VybFtOVU1fSEFORExFU107CisgIGludCBydW5uaW5nOworICBDVVJMTSAqbSA9IE5VTEw7CisgIGludCBjdXJyZW50ID0gMDsKKyAgaW50IGk7CisKKyAgZm9yKGk9MDsgaSA8IE5VTV9IQU5ETEVTOyBpKyspCisgICAgY3VybFtpXSA9IE5VTEw7CisKKyAgc3RhcnRfdGVzdF90aW1pbmcoKTsKKworICBnbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIC8qIGdldCBOVU1fSEFORExFUyBlYXN5IGhhbmRsZXMgKi8KKyAgZm9yKGk9MDsgaSA8IE5VTV9IQU5ETEVTOyBpKyspIHsKKyAgICBlYXN5X2luaXQoY3VybFtpXSk7CisgICAgLyogc3BlY2lmeSB0YXJnZXQgKi8KKyAgICBlYXN5X3NldG9wdChjdXJsW2ldLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgICAvKiBnbyB2ZXJib3NlICovCisgICAgZWFzeV9zZXRvcHQoY3VybFtpXSwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisgIH0KKworICBtdWx0aV9pbml0KG0pOworCisgIG11bHRpX2FkZF9oYW5kbGUobSwgY3VybFtjdXJyZW50XSk7CisKKyAgZnByaW50ZihzdGRlcnIsICJTdGFydCBhdCBVUkwgMFxuIik7CisKKyAgZm9yKDs7KSB7CisgICAgc3RydWN0IHRpbWV2YWwgaW50ZXJ2YWw7CisgICAgZmRfc2V0IHJkLCB3ciwgZXhjOworICAgIGludCBtYXhmZCA9IC05OTsKKworICAgIGludGVydmFsLnR2X3NlYyA9IDE7CisgICAgaW50ZXJ2YWwudHZfdXNlYyA9IDA7CisKKyAgICBtdWx0aV9wZXJmb3JtKG0sICZydW5uaW5nKTsKKworICAgIGFib3J0X29uX3Rlc3RfdGltZW91dCgpOworCisgICAgaWYoIXJ1bm5pbmcpIHsKKyNpZmRlZiBMSUI1MjcKKyAgICAgIC8qIE5PVEU6IHRoaXMgY29kZSBkb2VzIG5vdCByZW1vdmUgdGhlIGhhbmRsZSBmcm9tIHRoZSBtdWx0aSBoYW5kbGUKKyAgICAgICAgIGhlcmUsIHdoaWNoIHdvdWxkIGJlIHRoZSBuaWNlLCBzYW5lIGFuZCBkb2N1bWVudGVkIHdheSBvZiB3b3JraW5nLgorICAgICAgICAgVGhpcyBob3dldmVyIHRlc3RzIHRoYXQgdGhlIEFQSSBzdXJ2aXZlcyB0aGlzIGFidXNlIGdyYWNlZnVsbHkuICovCisgICAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsW2N1cnJlbnRdKTsKKyAgICAgIGN1cmxbY3VycmVudF0gPSBOVUxMOworI2VuZGlmCisgICAgICBpZigrK2N1cnJlbnQgPCBOVU1fSEFORExFUykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkFkdmFuY2luZyB0byBVUkwgJWRcbiIsIGN1cnJlbnQpOworI2lmZGVmIExJQjUzMgorICAgICAgICAvKiBmaXJzdCByZW1vdmUgdGhlIG9ubHkgaGFuZGxlIHdlIHVzZSAqLworICAgICAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUobSwgY3VybFswXSk7CisKKyAgICAgICAgLyogbWFrZSB1cyByZS11c2UgdGhlIHNhbWUgaGFuZGxlIGFsbCB0aGUgdGltZSwgYW5kIHRyeSByZXNldHRpbmcKKyAgICAgICAgICAgdGhlIGhhbmRsZSBmaXJzdCB0b28gKi8KKyAgICAgICAgY3VybF9lYXN5X3Jlc2V0KGN1cmxbMF0pOworICAgICAgICBlYXN5X3NldG9wdChjdXJsWzBdLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgICAgICAgLyogZ28gdmVyYm9zZSAqLworICAgICAgICBlYXN5X3NldG9wdChjdXJsWzBdLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICAgICAgICAvKiByZS1hZGQgaXQgKi8KKyAgICAgICAgbXVsdGlfYWRkX2hhbmRsZShtLCBjdXJsWzBdKTsKKyNlbHNlCisgICAgICAgIG11bHRpX2FkZF9oYW5kbGUobSwgY3VybFtjdXJyZW50XSk7CisjZW5kaWYKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBicmVhazsgLyogZG9uZSAqLworICAgICAgfQorICAgIH0KKworICAgIEZEX1pFUk8oJnJkKTsKKyAgICBGRF9aRVJPKCZ3cik7CisgICAgRkRfWkVSTygmZXhjKTsKKworICAgIG11bHRpX2Zkc2V0KG0sICZyZCwgJndyLCAmZXhjLCAmbWF4ZmQpOworCisgICAgLyogQXQgdGhpcyBwb2ludCwgbWF4ZmQgaXMgZ3VhcmFudGVlZCB0byBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gLTEuICovCisKKyAgICBzZWxlY3RfdGVzdChtYXhmZCsxLCAmcmQsICZ3ciwgJmV4YywgJmludGVydmFsKTsKKworICAgIGFib3J0X29uX3Rlc3RfdGltZW91dCgpOworICB9CisKK3Rlc3RfY2xlYW51cDoKKworI2lmIGRlZmluZWQoTElCNTI2KQorCisgIC8qIHRlc3QgNTI2IGFuZCA1MjggKi8KKyAgLyogcHJvcGVyIGNsZWFudXAgc2VxdWVuY2UgLSB0eXBlIFBCICovCisKKyAgZm9yKGk9MDsgaSA8IE5VTV9IQU5ETEVTOyBpKyspIHsKKyAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUobSwgY3VybFtpXSk7CisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybFtpXSk7CisgIH0KKyAgY3VybF9tdWx0aV9jbGVhbnVwKG0pOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyNlbGlmIGRlZmluZWQoTElCNTI3KQorCisgIC8qIHRlc3QgNTI3ICovCisKKyAgLyogVXBvbiBub24tZmFpbHVyZSB0ZXN0IGZsb3cgdGhlIGVhc3kncyBoYXZlIGFscmVhZHkgYmVlbiBjbGVhbnVwJ2VkLiBJbgorICAgICBjYXNlIHRoZXJlIGlzIGEgZmFpbHVyZSB3ZSBhcnJpdmUgaGVyZSB3aXRoIGVhc3kncyB0aGF0IGhhdmUgbm90IGJlZW4KKyAgICAgY2xlYW51cCdlZCB5ZXQsIGluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIGNsZWFudXAgdGhlbSBvciBvdGhlcndpc2UgdGhlc2UKKyAgICAgd2lsbCBiZSBsZWFrZWQsIGxldCdzIHVzZSB1bmRvY3VtZW50ZWQgY2xlYW51cCBzZXF1ZW5jZSAtIHR5cGUgVUIgKi8KKworICBpZihyZXMpCisgICAgZm9yKGk9MDsgaSA8IE5VTV9IQU5ETEVTOyBpKyspCisgICAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsW2ldKTsKKworICBjdXJsX211bHRpX2NsZWFudXAobSk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworI2VsaWYgZGVmaW5lZChMSUI1MzIpCisKKyAgLyogdGVzdCA1MzIgKi8KKyAgLyogdW5kb2N1bWVudGVkIGNsZWFudXAgc2VxdWVuY2UgLSB0eXBlIFVCICovCisKKyAgZm9yKGk9MDsgaSA8IE5VTV9IQU5ETEVTOyBpKyspCisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybFtpXSk7CisgIGN1cmxfbXVsdGlfY2xlYW51cChtKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisjZW5kaWYKKworICByZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MzAuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4NGZmOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTMwLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgInRlc3R1dGlsLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjZGVmaW5lIFRFU1RfSEFOR19USU1FT1VUIDYwICogMTAwMAorCisjZGVmaW5lIE5VTV9IQU5ETEVTIDQKKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBpbnQgcmVzID0gMDsKKyAgQ1VSTCAqY3VybFtOVU1fSEFORExFU107CisgIGludCBydW5uaW5nOworICBDVVJMTSAqbSA9IE5VTEw7CisgIGludCBpOworICBjaGFyIHRhcmdldF91cmxbMjU2XTsKKworICBmb3IoaT0wOyBpIDwgTlVNX0hBTkRMRVM7IGkrKykKKyAgICBjdXJsW2ldID0gTlVMTDsKKworICBzdGFydF90ZXN0X3RpbWluZygpOworCisgIGdsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisKKyAgbXVsdGlfaW5pdChtKTsKKworICAvKiBnZXQgTlVNX0hBTkRMRVMgZWFzeSBoYW5kbGVzICovCisgIGZvcihpPTA7IGkgPCBOVU1fSEFORExFUzsgaSsrKSB7CisgICAgLyogZ2V0IGFuIGVhc3kgaGFuZGxlICovCisgICAgZWFzeV9pbml0KGN1cmxbaV0pOworICAgIC8qIHNwZWNpZnkgdGFyZ2V0ICovCisgICAgc3ByaW50Zih0YXJnZXRfdXJsLCAiJXMlMDRpIiwgVVJMLCBpICsgMSk7CisgICAgdGFyZ2V0X3VybFtzaXplb2YodGFyZ2V0X3VybCkgLSAxXSA9ICdcMCc7CisgICAgZWFzeV9zZXRvcHQoY3VybFtpXSwgQ1VSTE9QVF9VUkwsIHRhcmdldF91cmwpOworICAgIC8qIGdvIHZlcmJvc2UgKi8KKyAgICBlYXN5X3NldG9wdChjdXJsW2ldLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKyAgICAvKiBpbmNsdWRlIGhlYWRlcnMgKi8KKyAgICBlYXN5X3NldG9wdChjdXJsW2ldLCBDVVJMT1BUX0hFQURFUiwgMUwpOworICAgIC8qIGFkZCBoYW5kbGUgdG8gbXVsdGkgKi8KKyAgICBtdWx0aV9hZGRfaGFuZGxlKG0sIGN1cmxbaV0pOworICB9CisKKyAgbXVsdGlfc2V0b3B0KG0sIENVUkxNT1BUX1BJUEVMSU5JTkcsIDFMKTsKKworICBmcHJpbnRmKHN0ZGVyciwgIlN0YXJ0IGF0IFVSTCAwXG4iKTsKKworICBmb3IoOzspIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCBpbnRlcnZhbDsKKyAgICBmZF9zZXQgcmQsIHdyLCBleGM7CisgICAgaW50IG1heGZkID0gLTk5OworCisgICAgaW50ZXJ2YWwudHZfc2VjID0gMTsKKyAgICBpbnRlcnZhbC50dl91c2VjID0gMDsKKworICAgIG11bHRpX3BlcmZvcm0obSwgJnJ1bm5pbmcpOworCisgICAgYWJvcnRfb25fdGVzdF90aW1lb3V0KCk7CisKKyAgICBpZighcnVubmluZykKKyAgICAgIGJyZWFrOyAvKiBkb25lICovCisKKyAgICBGRF9aRVJPKCZyZCk7CisgICAgRkRfWkVSTygmd3IpOworICAgIEZEX1pFUk8oJmV4Yyk7CisKKyAgICBtdWx0aV9mZHNldChtLCAmcmQsICZ3ciwgJmV4YywgJm1heGZkKTsKKworICAgIC8qIEF0IHRoaXMgcG9pbnQsIG1heGZkIGlzIGd1YXJhbnRlZWQgdG8gYmUgZ3JlYXRlciBvciBlcXVhbCB0aGFuIC0xLiAqLworCisgICAgc2VsZWN0X3Rlc3QobWF4ZmQrMSwgJnJkLCAmd3IsICZleGMsICZpbnRlcnZhbCk7CisKKyAgICBhYm9ydF9vbl90ZXN0X3RpbWVvdXQoKTsKKyAgfQorCit0ZXN0X2NsZWFudXA6CisKKyAgLyogcHJvcGVyIGNsZWFudXAgc2VxdWVuY2UgLSB0eXBlIFBCICovCisKKyAgZm9yKGk9MDsgaSA8IE5VTV9IQU5ETEVTOyBpKyspIHsKKyAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUobSwgY3VybFtpXSk7CisgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybFtpXSk7CisgIH0KKworICBjdXJsX211bHRpX2NsZWFudXAobSk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MzMuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTMzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjMThhMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTMzLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogdXNlZCBmb3IgdGVzdCBjYXNlIDUzMywgNTM0IGFuZCA1MzUgKi8KKworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJ0ZXN0dXRpbC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBURVNUX0hBTkdfVElNRU9VVCA2MCAqIDEwMDAKKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBpbnQgcmVzID0gMDsKKyAgQ1VSTCAqY3VybCA9IE5VTEw7CisgIGludCBydW5uaW5nOworICBDVVJMTSAqbSA9IE5VTEw7CisgIGludCBjdXJyZW50PTA7CisKKyAgc3RhcnRfdGVzdF90aW1pbmcoKTsKKworICBnbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIGVhc3lfaW5pdChjdXJsKTsKKworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfRkFJTE9ORVJST1IsIDFMKTsKKworICBtdWx0aV9pbml0KG0pOworCisgIG11bHRpX2FkZF9oYW5kbGUobSwgY3VybCk7CisKKyAgZnByaW50ZihzdGRlcnIsICJTdGFydCBhdCBVUkwgMFxuIik7CisKKyAgZm9yKDs7KSB7CisgICAgc3RydWN0IHRpbWV2YWwgaW50ZXJ2YWw7CisgICAgZmRfc2V0IHJkLCB3ciwgZXhjOworICAgIGludCBtYXhmZCA9IC05OTsKKworICAgIGludGVydmFsLnR2X3NlYyA9IDE7CisgICAgaW50ZXJ2YWwudHZfdXNlYyA9IDA7CisKKyAgICBtdWx0aV9wZXJmb3JtKG0sICZydW5uaW5nKTsKKworICAgIGFib3J0X29uX3Rlc3RfdGltZW91dCgpOworCisgICAgaWYoIXJ1bm5pbmcpIHsKKyAgICAgIGlmKCFjdXJyZW50KyspIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJBZHZhbmNpbmcgdG8gVVJMIDFcbiIpOworICAgICAgICAvKiByZW1vdmUgdGhlIGhhbmRsZSB3ZSB1c2UgKi8KKyAgICAgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKG0sIGN1cmwpOworCisgICAgICAgIC8qIG1ha2UgdXMgcmUtdXNlIHRoZSBzYW1lIGhhbmRsZSBhbGwgdGhlIHRpbWUsIGFuZCB0cnkgcmVzZXR0aW5nCisgICAgICAgICAgIHRoZSBoYW5kbGUgZmlyc3QgdG9vICovCisgICAgICAgIGN1cmxfZWFzeV9yZXNldChjdXJsKTsKKyAgICAgICAgZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIGxpYnRlc3RfYXJnMik7CisgICAgICAgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworICAgICAgICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxTCk7CisKKyAgICAgICAgLyogcmUtYWRkIGl0ICovCisgICAgICAgIG11bHRpX2FkZF9oYW5kbGUobSwgY3VybCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGJyZWFrOyAvKiBkb25lICovCisgICAgfQorCisgICAgRkRfWkVSTygmcmQpOworICAgIEZEX1pFUk8oJndyKTsKKyAgICBGRF9aRVJPKCZleGMpOworCisgICAgbXVsdGlfZmRzZXQobSwgJnJkLCAmd3IsICZleGMsICZtYXhmZCk7CisKKyAgICAvKiBBdCB0aGlzIHBvaW50LCBtYXhmZCBpcyBndWFyYW50ZWVkIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAtMS4gKi8KKworICAgIHNlbGVjdF90ZXN0KG1heGZkKzEsICZyZCwgJndyLCAmZXhjLCAmaW50ZXJ2YWwpOworCisgICAgYWJvcnRfb25fdGVzdF90aW1lb3V0KCk7CisgIH0KKwordGVzdF9jbGVhbnVwOgorCisgIC8qIHVuZG9jdW1lbnRlZCBjbGVhbnVwIHNlcXVlbmNlIC0gdHlwZSBVQiAqLworCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX211bHRpX2NsZWFudXAobSk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1MzYuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTM2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhZTQwMgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTM2LmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJ0ZXN0dXRpbC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBURVNUX0hBTkdfVElNRU9VVCA2MCAqIDEwMDAKKworc3RhdGljIGludCBwZXJmb3JtKENVUkxNICptdWx0aSkKK3sKKyAgaW50IGhhbmRsZXM7CisgIGZkX3NldCBmZHJlYWQsIGZkd3JpdGUsIGZkZXhjZXA7CisgIGludCByZXMgPSAwOworCisgIGZvcig7OykgeworICAgIHN0cnVjdCB0aW1ldmFsIGludGVydmFsOworICAgIGludCBtYXhmZCA9IC05OTsKKworICAgIGludGVydmFsLnR2X3NlYyA9IDA7CisgICAgaW50ZXJ2YWwudHZfdXNlYyA9IDEwMDAwMEw7IC8qIDEwMCBtcyAqLworCisgICAgcmVzX211bHRpX3BlcmZvcm0obXVsdGksICZoYW5kbGVzKTsKKyAgICBpZihyZXMpCisgICAgICByZXR1cm4gcmVzOworCisgICAgcmVzX3Rlc3RfdGltZWRvdXQoKTsKKyAgICBpZihyZXMpCisgICAgICByZXR1cm4gcmVzOworCisgICAgaWYoIWhhbmRsZXMpCisgICAgICBicmVhazsgLyogZG9uZSAqLworCisgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICBGRF9aRVJPKCZmZHdyaXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKworICAgIHJlc19tdWx0aV9mZHNldChtdWx0aSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOworICAgIGlmKHJlcykKKyAgICAgIHJldHVybiByZXM7CisKKyAgICAvKiBBdCB0aGlzIHBvaW50LCBtYXhmZCBpcyBndWFyYW50ZWVkIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAtMS4gKi8KKworICAgIHJlc19zZWxlY3RfdGVzdChtYXhmZCsxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZpbnRlcnZhbCk7CisgICAgaWYocmVzKQorICAgICAgcmV0dXJuIHJlczsKKworICAgIHJlc190ZXN0X3RpbWVkb3V0KCk7CisgICAgaWYocmVzKQorICAgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIHJldHVybiAwOyAvKiBzdWNjZXNzICovCit9CisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTE0gKm11bHRpID0gTlVMTDsKKyAgQ1VSTCAqZWFzeSA9IE5VTEw7CisgIGludCByZXMgPSAwOworCisgIHN0YXJ0X3Rlc3RfdGltaW5nKCk7CisKKyAgZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKworICBtdWx0aV9pbml0KG11bHRpKTsKKworICBlYXN5X2luaXQoZWFzeSk7CisKKyAgbXVsdGlfc2V0b3B0KG11bHRpLCBDVVJMTU9QVF9QSVBFTElOSU5HLCAxTCk7CisKKyAgZWFzeV9zZXRvcHQoZWFzeSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGUpOworICBlYXN5X3NldG9wdChlYXN5LCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxTCk7CisgIGVhc3lfc2V0b3B0KGVhc3ksIENVUkxPUFRfVVJMLCBVUkwpOworCisgIHJlc19tdWx0aV9hZGRfaGFuZGxlKG11bHRpLCBlYXN5KTsKKyAgaWYocmVzKSB7CisgICAgcHJpbnRmKCJjdXJsX211bHRpX2FkZF9oYW5kbGUoKSAxIGZhaWxlZFxuIik7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKworICByZXMgPSBwZXJmb3JtKG11bHRpKTsKKyAgaWYocmVzKSB7CisgICAgcHJpbnRmKCJyZXRyaWV2ZSAxIGZhaWxlZFxuIik7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKworICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUobXVsdGksIGVhc3kpOworCisgIGN1cmxfZWFzeV9yZXNldChlYXN5KTsKKworICBlYXN5X3NldG9wdChlYXN5LCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxTCk7CisgIGVhc3lfc2V0b3B0KGVhc3ksIENVUkxPUFRfVVJMLCBsaWJ0ZXN0X2FyZzIpOworCisgIHJlc19tdWx0aV9hZGRfaGFuZGxlKG11bHRpLCBlYXN5KTsKKyAgaWYocmVzKSB7CisgICAgcHJpbnRmKCJjdXJsX211bHRpX2FkZF9oYW5kbGUoKSAyIGZhaWxlZFxuIik7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKworICByZXMgPSBwZXJmb3JtKG11bHRpKTsKKyAgaWYocmVzKSB7CisgICAgcHJpbnRmKCJyZXRyaWV2ZSAyIGZhaWxlZFxuIik7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKworICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUobXVsdGksIGVhc3kpOworCit0ZXN0X2NsZWFudXA6CisKKyAgLyogdW5kb2N1bWVudGVkIGNsZWFudXAgc2VxdWVuY2UgLSB0eXBlIFVCICovCisKKyAgY3VybF9lYXN5X2NsZWFudXAoZWFzeSk7CisgIGN1cmxfbXVsdGlfY2xlYW51cChtdWx0aSk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICBwcmludGYoIkZpbmlzaGVkIVxuIik7CisKKyAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTM3LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUzNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZDI1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUzNy5jCkBAIC0wLDAgKzEsNTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpZmRlZiBIQVZFX1NZU19SRVNPVVJDRV9ICisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9MSU1JVFNfSAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZiAhZGVmaW5lZChIQVZFX1BPTExfRklORSkgICAgJiYgXAorICAgICFkZWZpbmVkKFVTRV9XSU5TT0NLKSAgICAgICAmJiBcCisgICAgIWRlZmluZWQoVFBGKSAgICAgICAgICAgICAgICYmIFwKKyAgICAhZGVmaW5lZChGRF9TRVRTSVpFKQorI2Vycm9yICJ0aGlzIHRlc3QgcmVxdWlyZXMgRkRfU0VUU0laRSIKKyNlbmRpZgorCisjZGVmaW5lIFNBRkVUWV9NQVJHSU4gKDEwKQorCisjaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoTVNET1MpCisjZGVmaW5lIERFVl9OVUxMICJOVUwiCisjZWxzZQorI2RlZmluZSBERVZfTlVMTCAiL2Rldi9udWxsIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUUkxJTUlUKSAmJiBkZWZpbmVkKEhBVkVfU0VUUkxJTUlUKQorCitzdGF0aWMgaW50ICpmZCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHJsaW1pdCBudW1fb3BlbjsKK3N0YXRpYyBjaGFyIG1zZ2J1ZmZbMjU2XTsKKworc3RhdGljIHZvaWQgc3RvcmVfZXJybXNnKGNvbnN0IGNoYXIgKm1zZywgaW50IGVycikKK3sKKyAgaWYgKCFlcnIpCisgICAgc3ByaW50Zihtc2didWZmLCAiJXMiLCBtc2cpOworICBlbHNlCisgICAgc3ByaW50Zihtc2didWZmLCAiJXMsIGVycm5vICVkLCAlcyIsIG1zZywgZXJyLCBzdHJlcnJvcihlcnIpKTsKK30KKworc3RhdGljIHZvaWQgY2xvc2VfZmlsZV9kZXNjcmlwdG9ycyh2b2lkKQoreworICBmb3IgKG51bV9vcGVuLnJsaW1fY3VyID0gMDsKKyAgICAgICBudW1fb3Blbi5ybGltX2N1ciA8IG51bV9vcGVuLnJsaW1fbWF4OworICAgICAgIG51bV9vcGVuLnJsaW1fY3VyKyspCisgICAgaWYgKGZkW251bV9vcGVuLnJsaW1fY3VyXSA+IDApCisgICAgICBjbG9zZShmZFtudW1fb3Blbi5ybGltX2N1cl0pOworICBmcmVlKGZkKTsKKyAgZmQgPSBOVUxMOworfQorCitzdGF0aWMgaW50IGZvcGVuX3dvcmtzKHZvaWQpCit7CisgIEZJTEUgKmZwYVszXTsKKyAgaW50IGk7CisgIGludCByZXQgPSAxOworCisgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICBmcGFbaV0gPSBOVUxMOworICB9CisgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICBmcGFbaV0gPSBmb3BlbihERVZfTlVMTCwgInIiKTsKKyAgICBpZiAoZnBhW2ldID09IE5VTEwpIHsKKyAgICAgIHN0b3JlX2Vycm1zZygiZm9wZW4oKSBmYWlsZWQiLCBFUlJOTyk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2didWZmKTsKKyAgICAgIHJldCA9IDA7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworICAgIGlmIChmcGFbaV0gIT0gTlVMTCkKKyAgICAgIGZjbG9zZShmcGFbaV0pOworICB9CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmxpbWl0KGludCBrZWVwX29wZW4pCit7CisgIGludCAqdG1wZmQ7CisgIGludCBuaXRlbXMsIGk7CisgIGludCAqbWVtY2h1bmsgPSBOVUxMOworICBjaGFyICpmbXQ7CisgIHN0cnVjdCBybGltaXQgcmw7CisgIGNoYXIgc3RyYnVmZlsyNTZdOworICBjaGFyIHN0cmJ1ZmYxWzgxXTsKKyAgY2hhciBmbXRfdVtdID0gIiV1IjsKKyAgY2hhciBmbXRfbHVbXSA9ICIlbHUiOworI2lmZGVmIEhBVkVfTE9OR0xPTkcKKyAgY2hhciBmbXRfbGx1W10gPSAiJWxsdSI7CisKKyAgaWYgKHNpemVvZihybC5ybGltX21heCkgPiBzaXplb2YobG9uZykpCisgICAgZm10ID0gZm10X2xsdTsKKyAgZWxzZQorI2VuZGlmCisgICAgZm10ID0gKHNpemVvZihybC5ybGltX21heCkgPCBzaXplb2YobG9uZykpP2ZtdF91OmZtdF9sdTsKKworICAvKiBnZXQgaW5pdGlhbCBvcGVuIGZpbGUgbGltaXRzICovCisKKyAgaWYgKGdldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmcmwpICE9IDApIHsKKyAgICBzdG9yZV9lcnJtc2coImdldHJsaW1pdCgpIGZhaWxlZCIsIEVSUk5PKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2didWZmKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAvKiBzaG93IGluaXRpYWwgb3BlbiBmaWxlIGxpbWl0cyAqLworCisjaWZkZWYgUkxJTV9JTkZJTklUWQorICBpZiAocmwucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkKKyAgICBzdHJjcHkoc3RyYnVmZiwgIklORklOSVRZIik7CisgIGVsc2UKKyNlbmRpZgorICAgIHNwcmludGYoc3RyYnVmZiwgZm10LCBybC5ybGltX2N1cik7CisgIGZwcmludGYoc3RkZXJyLCAiaW5pdGlhbCBzb2Z0IGxpbWl0OiAlc1xuIiwgc3RyYnVmZik7CisKKyNpZmRlZiBSTElNX0lORklOSVRZCisgIGlmIChybC5ybGltX21heCA9PSBSTElNX0lORklOSVRZKQorICAgIHN0cmNweShzdHJidWZmLCAiSU5GSU5JVFkiKTsKKyAgZWxzZQorI2VuZGlmCisgICAgc3ByaW50ZihzdHJidWZmLCBmbXQsIHJsLnJsaW1fbWF4KTsKKyAgZnByaW50ZihzdGRlcnIsICJpbml0aWFsIGhhcmQgbGltaXQ6ICVzXG4iLCBzdHJidWZmKTsKKworICAvKgorICAgKiBpZiBzb2Z0IGxpbWl0IGFuZCBoYXJkIGxpbWl0IGFyZSBkaWZmZXJlbnQgd2UgYXNrIHRoZQorICAgKiBzeXN0ZW0gdG8gcmFpc2Ugc29mdCBsaW1pdCBhbGwgdGhlIHdheSB1cCB0byB0aGUgaGFyZAorICAgKiBsaW1pdC4gRHVlIHRvIHNvbWUgb3RoZXIgc3lzdGVtIGxpbWl0IHRoZSBzb2Z0IGxpbWl0CisgICAqIG1pZ2h0IG5vdCBiZSByYWlzZWQgdXAgdG8gdGhlIGhhcmQgbGltaXQuIFNvIGZyb20gdGhpcworICAgKiBwb2ludCB0aGUgcmVzdWx0aW5nIHNvZnQgbGltaXQgaXMgb3VyIGxpbWl0LiBUcnlpbmcgdG8KKyAgICogb3BlbiBtb3JlIHRoYW4gc29mdCBsaW1pdCBmaWxlIGRlc2NyaXB0b3JzIHdpbGwgZmFpbC4KKyAgICovCisKKyAgaWYgKHJsLnJsaW1fY3VyICE9IHJsLnJsaW1fbWF4KSB7CisKKyNpZmRlZiBPUEVOX01BWAorICAgIGlmICgocmwucmxpbV9jdXIgPiAwKSAmJgorICAgICAgICAocmwucmxpbV9jdXIgPCBPUEVOX01BWCkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAicmFpc2luZyBzb2Z0IGxpbWl0IHVwIHRvIE9QRU5fTUFYXG4iKTsKKyAgICAgIHJsLnJsaW1fY3VyID0gT1BFTl9NQVg7CisgICAgICBpZiAoc2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZybCkgIT0gMCkgeworICAgICAgICAvKiBvbiBmYWlsdXJlIGRvbid0IGFib3J0IGp1c3QgaXNzdWUgYSB3YXJuaW5nICovCisgICAgICAgIHN0b3JlX2Vycm1zZygic2V0cmxpbWl0KCkgZmFpbGVkIiwgRVJSTk8pOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2didWZmKTsKKyAgICAgICAgbXNnYnVmZlswXSA9ICdcMCc7CisgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBmcHJpbnRmKHN0ZGVyciwgInJhaXNpbmcgc29mdCBsaW1pdCB1cCB0byBoYXJkIGxpbWl0XG4iKTsKKyAgICBybC5ybGltX2N1ciA9IHJsLnJsaW1fbWF4OworICAgIGlmIChzZXRybGltaXQoUkxJTUlUX05PRklMRSwgJnJsKSAhPSAwKSB7CisgICAgICAvKiBvbiBmYWlsdXJlIGRvbid0IGFib3J0IGp1c3QgaXNzdWUgYSB3YXJuaW5nICovCisgICAgICBzdG9yZV9lcnJtc2coInNldHJsaW1pdCgpIGZhaWxlZCIsIEVSUk5PKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZ2J1ZmYpOworICAgICAgbXNnYnVmZlswXSA9ICdcMCc7CisgICAgfQorCisgICAgLyogZ2V0IGN1cnJlbnQgb3BlbiBmaWxlIGxpbWl0cyAqLworCisgICAgaWYgKGdldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmcmwpICE9IDApIHsKKyAgICAgIHN0b3JlX2Vycm1zZygiZ2V0cmxpbWl0KCkgZmFpbGVkIiwgRVJSTk8pOworICAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnYnVmZik7CisgICAgICByZXR1cm4gLTM7CisgICAgfQorCisgICAgLyogc2hvdyBjdXJyZW50IG9wZW4gZmlsZSBsaW1pdHMgKi8KKworI2lmZGVmIFJMSU1fSU5GSU5JVFkKKyAgICBpZiAocmwucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkKKyAgICAgIHN0cmNweShzdHJidWZmLCAiSU5GSU5JVFkiKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgIHNwcmludGYoc3RyYnVmZiwgZm10LCBybC5ybGltX2N1cik7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJyZW50IHNvZnQgbGltaXQ6ICVzXG4iLCBzdHJidWZmKTsKKworI2lmZGVmIFJMSU1fSU5GSU5JVFkKKyAgICBpZiAocmwucmxpbV9tYXggPT0gUkxJTV9JTkZJTklUWSkKKyAgICAgIHN0cmNweShzdHJidWZmLCAiSU5GSU5JVFkiKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgIHNwcmludGYoc3RyYnVmZiwgZm10LCBybC5ybGltX21heCk7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJyZW50IGhhcmQgbGltaXQ6ICVzXG4iLCBzdHJidWZmKTsKKworICB9IC8qIChybC5ybGltX2N1ciAhPSBybC5ybGltX21heCkgKi8KKworICAvKgorICAgKiB0ZXN0IDUzNyBpcyBhbGwgYWJvdXQgdGVzdGluZyBsaWJjdXJsIGZ1bmN0aW9uYWxpdHkKKyAgICogd2hlbiB0aGUgc3lzdGVtIGhhcyBuZWFybHkgZXhoYXVzdGVkIHRoZSBudW1iZXIgb2YKKyAgICogYXZhaWxhYmxlIGZpbGUgZGVzY3JpcHRvcnMuIFRlc3QgNTM3IHdpbGwgdHJ5IHRvIHJ1bgorICAgKiB3aXRoIGEgdmVyeSBzbWFsbCBudW1iZXIgb2YgZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUuCisgICAqIFRoaXMgaW1wbGllcyB0aGF0IGFueSBmaWxlIGRlc2NyaXB0b3Igd2hpY2ggaXMgb3BlbgorICAgKiB3aGVuIHRoZSB0ZXN0IHJ1bnMgd2lsbCBoYXZlIGEgbnVtYmVyIGluIHRoZSBoaWdoIHJhbmdlCisgICAqIG9mIHdoYXRldmVyIHRoZSBzeXN0ZW0gc3VwcG9ydHMuCisgICAqLworCisgIC8qCisgICAqIHJlc2VydmUgYSBjaHVuayBvZiBtZW1vcnkgYmVmb3JlIG9wZW5pbmcgZmlsZSBkZXNjcmlwdG9ycyB0bworICAgKiBhdm9pZCBhIGxvdyBtZW1vcnkgY29uZGl0aW9uIG9uY2UgdGhlIGZpbGUgZGVzY3JpcHRvcnMgYXJlCisgICAqIG9wZW4uIFN5c3RlbSBjb25kaXRpb25zIHRoYXQgY291bGQgbWFrZSB0aGUgdGVzdCBmYWlsIHNob3VsZAorICAgKiBiZSBhZGRyZXNzZWQgaW4gdGhlIHByZWNoZWNrIHBoYXNlLiBUaGlzIGNodW5rIG9mIG1lbW9yeSBzaGFsbAorICAgKiBiZSBhbHdheXMgZnJlZSgpZWQgYmVmb3JlIGV4aXRpbmcgdGhlIHJsaW1pdCgpIGZ1bmN0aW9uIHNvCisgICAqIHRoYXQgaXQgYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHRlc3QuCisgICAqLworCisgIGZvciAobml0ZW1zID0gaSA9IDE7IG5pdGVtcyA8PSBpOyBpICo9IDIpCisgICAgbml0ZW1zID0gaTsKKyAgaWYgKG5pdGVtcyA+IDB4N2ZmZikKKyAgICBuaXRlbXMgPSAweDQwMDAwOworICBkbyB7CisgICAgbnVtX29wZW4ucmxpbV9tYXggPSBzaXplb2YoKm1lbWNodW5rKSAqIChzaXplX3Qpbml0ZW1zOworICAgIHNwcmludGYoc3RyYnVmZiwgZm10LCBudW1fb3Blbi5ybGltX21heCk7CisgICAgZnByaW50ZihzdGRlcnIsICJhbGxvY2F0aW5nIG1lbWNodW5rICVzIGJ5dGUgYXJyYXlcbiIsIHN0cmJ1ZmYpOworICAgIG1lbWNodW5rID0gbWFsbG9jKHNpemVvZigqbWVtY2h1bmspICogKHNpemVfdCluaXRlbXMpOworICAgIGlmICghbWVtY2h1bmspIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAibWVtY2h1bmssIG1hbGxvYygpIGZhaWxlZFxuIik7CisgICAgICBuaXRlbXMgLz0gMjsKKyAgICB9CisgIH0gd2hpbGUgKG5pdGVtcyAmJiAhbWVtY2h1bmspOworICBpZiAoIW1lbWNodW5rKSB7CisgICAgc3RvcmVfZXJybXNnKCJtZW1jaHVuaywgbWFsbG9jKCkgZmFpbGVkIiwgRVJSTk8pOworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZ2J1ZmYpOworICAgIHJldHVybiAtNDsKKyAgfQorCisgIC8qIGluaXRpYWxpemUgaXQgdG8gZmlnaHQgbGF6eSBhbGxvY2F0aW9uICovCisKKyAgZnByaW50ZihzdGRlcnIsICJpbml0aWFsaXppbmcgbWVtY2h1bmsgYXJyYXlcbiIpOworCisgIGZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykKKyAgICBtZW1jaHVua1tpXSA9IC0xOworCisgIC8qIHNldCB0aGUgbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMgd2Ugd2lsbCB0cnkgdG8gb3BlbiAqLworCisjaWZkZWYgUkxJTV9JTkZJTklUWQorICBpZiAoKHJsLnJsaW1fY3VyID4gMCkgJiYgKHJsLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkpKSB7CisjZWxzZQorICBpZiAocmwucmxpbV9jdXIgPiAwKSB7CisjZW5kaWYKKyAgICAvKiBzb2Z0IGxpbWl0IG1pbnVzIFNBRkVUWV9NQVJHSU4gKi8KKyAgICBudW1fb3Blbi5ybGltX21heCA9IHJsLnJsaW1fY3VyIC0gU0FGRVRZX01BUkdJTjsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBhIGh1Z2UgbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMgKi8KKyAgICBmb3IgKG5pdGVtcyA9IGkgPSAxOyBuaXRlbXMgPD0gaTsgaSAqPSAyKQorICAgICAgbml0ZW1zID0gaTsKKyAgICBpZiAobml0ZW1zID4gMHg3ZmZmKQorICAgICAgbml0ZW1zID0gMHg0MDAwMDsKKyAgICBudW1fb3Blbi5ybGltX21heCA9IG5pdGVtczsKKyAgfQorCisgIC8qIHZlcmlmeSB0aGF0IHdlIHdvbid0IG92ZXJmbG93IHNpemVfdCBpbiBtYWxsb2MoKSAqLworCisgIGlmICgoc2l6ZV90KShudW1fb3Blbi5ybGltX21heCkgPiAoKHNpemVfdCktMSkgLyBzaXplb2YoKmZkKSkgeworICAgIHNwcmludGYoc3RyYnVmZjEsIGZtdCwgbnVtX29wZW4ucmxpbV9tYXgpOworICAgIHNwcmludGYoc3RyYnVmZiwgInVuYWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBmb3IgJXMgIgorICAgICAgICAgICAgImZpbGUgZGVzY3JpcHRvcnMsIHdvdWxkIG92ZXJmbG93IHNpemVfdCIsIHN0cmJ1ZmYxKTsKKyAgICBzdG9yZV9lcnJtc2coc3RyYnVmZiwgMCk7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnYnVmZik7CisgICAgZnJlZShtZW1jaHVuayk7CisgICAgcmV0dXJuIC01OworICB9CisKKyAgLyogYWxsb2NhdGUgYXJyYXkgZm9yIGZpbGUgZGVzY3JpcHRvcnMgKi8KKworICBkbyB7CisgICAgc3ByaW50ZihzdHJidWZmLCBmbXQsIG51bV9vcGVuLnJsaW1fbWF4KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImFsbG9jYXRpbmcgYXJyYXkgZm9yICVzIGZpbGUgZGVzY3JpcHRvcnNcbiIsIHN0cmJ1ZmYpOworICAgIGZkID0gbWFsbG9jKHNpemVvZigqZmQpICogKHNpemVfdCkobnVtX29wZW4ucmxpbV9tYXgpKTsKKyAgICBpZiAoIWZkKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImZkLCBtYWxsb2MoKSBmYWlsZWRcbiIpOworICAgICAgbnVtX29wZW4ucmxpbV9tYXggLz0gMjsKKyAgICB9CisgIH0gd2hpbGUgKG51bV9vcGVuLnJsaW1fbWF4ICYmICFmZCk7CisgIGlmICghZmQpIHsKKyAgICBzdG9yZV9lcnJtc2coImZkLCBtYWxsb2MoKSBmYWlsZWQiLCBFUlJOTyk7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnYnVmZik7CisgICAgZnJlZShtZW1jaHVuayk7CisgICAgcmV0dXJuIC02OworICB9CisKKyAgLyogaW5pdGlhbGl6ZSBpdCB0byBmaWdodCBsYXp5IGFsbG9jYXRpb24gKi8KKworICBmcHJpbnRmKHN0ZGVyciwgImluaXRpYWxpemluZyBmZCBhcnJheVxuIik7CisKKyAgZm9yIChudW1fb3Blbi5ybGltX2N1ciA9IDA7CisgICAgICAgbnVtX29wZW4ucmxpbV9jdXIgPCBudW1fb3Blbi5ybGltX21heDsKKyAgICAgICBudW1fb3Blbi5ybGltX2N1cisrKQorICAgIGZkW251bV9vcGVuLnJsaW1fY3VyXSA9IC0xOworCisgIHNwcmludGYoc3RyYnVmZiwgZm10LCBudW1fb3Blbi5ybGltX21heCk7CisgIGZwcmludGYoc3RkZXJyLCAidHJ5aW5nIHRvIG9wZW4gJXMgZmlsZSBkZXNjcmlwdG9yc1xuIiwgc3RyYnVmZik7CisKKyAgLyogb3BlbiBhIGR1bW15IGRlc2NyaXB0b3IgKi8KKworICBmZFswXSA9IG9wZW4oREVWX05VTEwsIE9fUkRPTkxZKTsKKyAgaWYgKGZkWzBdIDwgMCkgeworICAgIHNwcmludGYoc3RyYnVmZiwgIm9wZW5pbmcgb2YgJXMgZmFpbGVkIiwgREVWX05VTEwpOworICAgIHN0b3JlX2Vycm1zZyhzdHJidWZmLCBFUlJOTyk7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnYnVmZik7CisgICAgZnJlZShmZCk7CisgICAgZmQgPSBOVUxMOworICAgIGZyZWUobWVtY2h1bmspOworICAgIHJldHVybiAtNzsKKyAgfQorCisgIC8qIGNyZWF0ZSBhIGJ1bmNoIG9mIGZpbGUgZGVzY3JpcHRvcnMgKi8KKworICBmb3IgKG51bV9vcGVuLnJsaW1fY3VyID0gMTsKKyAgICAgICBudW1fb3Blbi5ybGltX2N1ciA8IG51bV9vcGVuLnJsaW1fbWF4OworICAgICAgIG51bV9vcGVuLnJsaW1fY3VyKyspIHsKKworICAgIGZkW251bV9vcGVuLnJsaW1fY3VyXSA9IGR1cChmZFswXSk7CisKKyAgICBpZiAoZmRbbnVtX29wZW4ucmxpbV9jdXJdIDwgMCkgeworCisgICAgICBmZFtudW1fb3Blbi5ybGltX2N1cl0gPSAtMTsKKworICAgICAgc3ByaW50ZihzdHJidWZmMSwgZm10LCBudW1fb3Blbi5ybGltX2N1cik7CisgICAgICBzcHJpbnRmKHN0cmJ1ZmYsICJkdXAoKSBhdHRlbXB0ICVzIGZhaWxlZCIsIHN0cmJ1ZmYxKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN0cmJ1ZmYpOworCisgICAgICBzcHJpbnRmKHN0cmJ1ZmYxLCBmbXQsIG51bV9vcGVuLnJsaW1fY3VyKTsKKyAgICAgIHNwcmludGYoc3RyYnVmZiwgImZkcyBzeXN0ZW0gbGltaXQgc2VlbXMgY2xvc2UgdG8gJXMiLCBzdHJidWZmMSk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzdHJidWZmKTsKKworICAgICAgbnVtX29wZW4ucmxpbV9tYXggPSBudW1fb3Blbi5ybGltX2N1ciAtIFNBRkVUWV9NQVJHSU47CisKKyAgICAgIG51bV9vcGVuLnJsaW1fY3VyIC09IG51bV9vcGVuLnJsaW1fbWF4OworICAgICAgc3ByaW50ZihzdHJidWZmMSwgZm10LCBudW1fb3Blbi5ybGltX2N1cik7CisgICAgICBzcHJpbnRmKHN0cmJ1ZmYsICJjbG9zaW5nICVzIGZpbGUgZGVzY3JpcHRvcnMiLCBzdHJidWZmMSk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzdHJidWZmKTsKKworICAgICAgZm9yIChudW1fb3Blbi5ybGltX2N1ciA9IG51bV9vcGVuLnJsaW1fbWF4OworICAgICAgICAgICBmZFtudW1fb3Blbi5ybGltX2N1cl0gPj0gMDsKKyAgICAgICAgICAgbnVtX29wZW4ucmxpbV9jdXIrKykgeworICAgICAgICBjbG9zZShmZFtudW1fb3Blbi5ybGltX2N1cl0pOworICAgICAgICBmZFtudW1fb3Blbi5ybGltX2N1cl0gPSAtMTsKKyAgICAgIH0KKworICAgICAgc3ByaW50ZihzdHJidWZmLCBmbXQsIG51bV9vcGVuLnJsaW1fbWF4KTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAic2hyaW5raW5nIGFycmF5IGZvciAlcyBmaWxlIGRlc2NyaXB0b3JzXG4iLCBzdHJidWZmKTsKKworICAgICAgLyogd2UgZG9uJ3QgY2FyZSBpZiB3ZSBjYW4ndCBzaHJpbmsgaXQgKi8KKworICAgICAgdG1wZmQgPSByZWFsbG9jKGZkLCBzaXplb2YoKmZkKSAqIChzaXplX3QpKG51bV9vcGVuLnJsaW1fbWF4KSk7CisgICAgICBpZiAodG1wZmQpIHsKKyAgICAgICAgZmQgPSB0bXBmZDsKKyAgICAgICAgdG1wZmQgPSBOVUxMOworICAgICAgfQorCisgICAgICBicmVhazsKKworICAgIH0KKworICB9CisKKyAgc3ByaW50ZihzdHJidWZmLCBmbXQsIG51bV9vcGVuLnJsaW1fbWF4KTsKKyAgZnByaW50ZihzdGRlcnIsICIlcyBmaWxlIGRlc2NyaXB0b3JzIG9wZW5cbiIsIHN0cmJ1ZmYpOworCisjaWYgIWRlZmluZWQoSEFWRV9QT0xMX0ZJTkUpICAgICYmIFwKKyAgICAhZGVmaW5lZChVU0VfV0lOU09DSykgICAgICAgJiYgXAorICAgICFkZWZpbmVkKFRQRikKKworICAvKgorICAgKiB3aGVuIHVzaW5nIHNlbGVjdCgpIGluc3RlYWQgb2YgcG9sbCgpIHdlIGNhbm5vdCB0ZXN0CisgICAqIGxpYmN1cmwgZnVuY3Rpb25hbGl0eSB3aXRoIGEgc29ja2V0IG51bWJlciBlcXVhbCBvcgorICAgKiBncmVhdGVyIHRoYW4gRkRfU0VUU0laRS4gSW4gYW55IGNhc2UsIG1hY3JvIFZFUklGWV9TT0NLCisgICAqIGluIGxpYi9zZWxlY3QuYyBlbmZvcmNlcyB0aGlzIGNoZWNrIGFuZCBwcm90ZWN0cyBsaWJjdXJsCisgICAqIGZyb20gYSBwb3NzaWJsZSBjcmFzaC4gVGhlIGVmZmVjdCBvZiB0aGlzIHByb3RlY3Rpb24KKyAgICogaXMgdGhhdCB0ZXN0IDUzNyB3aWxsIGFsd2F5cyBmYWlsLCBzaW5jZSB0aGUgYWN0dWFsCisgICAqIGNhbGwgdG8gc2VsZWN0KCkgbmV2ZXIgdGFrZXMgcGxhY2UuIFdlIHNraXAgdGVzdCA1MzcKKyAgICogd2l0aCBhbiBpbmRpY2F0aW9uIHRoYXQgc2VsZWN0IGxpbWl0IHdvdWxkIGJlIGV4Y2VlZGVkLgorICAgKi8KKworICBudW1fb3Blbi5ybGltX2N1ciA9IEZEX1NFVFNJWkUgLSBTQUZFVFlfTUFSR0lOOworICBpZiAobnVtX29wZW4ucmxpbV9tYXggPiBudW1fb3Blbi5ybGltX2N1cikgeworICAgIHNwcmludGYoc3RyYnVmZiwgInNlbGVjdCBsaW1pdCBpcyBGRF9TRVRTSVpFICVkIiwgRkRfU0VUU0laRSk7CisgICAgc3RvcmVfZXJybXNnKHN0cmJ1ZmYsIDApOworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZ2J1ZmYpOworICAgIGNsb3NlX2ZpbGVfZGVzY3JpcHRvcnMoKTsKKyAgICBmcmVlKG1lbWNodW5rKTsKKyAgICByZXR1cm4gLTg7CisgIH0KKworICBudW1fb3Blbi5ybGltX2N1ciA9IEZEX1NFVFNJWkUgLSBTQUZFVFlfTUFSR0lOOworICBmb3IgKHJsLnJsaW1fY3VyID0gMDsKKyAgICAgICBybC5ybGltX2N1ciA8IG51bV9vcGVuLnJsaW1fbWF4OworICAgICAgIHJsLnJsaW1fY3VyKyspIHsKKyAgICBpZiAoKGZkW3JsLnJsaW1fY3VyXSA+IDApICYmCisgICAgICAgKCh1bnNpZ25lZCBpbnQpZmRbcmwucmxpbV9jdXJdID4gbnVtX29wZW4ucmxpbV9jdXIpKSB7CisgICAgICBzcHJpbnRmKHN0cmJ1ZmYsICJzZWxlY3QgbGltaXQgaXMgRkRfU0VUU0laRSAlZCIsIEZEX1NFVFNJWkUpOworICAgICAgc3RvcmVfZXJybXNnKHN0cmJ1ZmYsIDApOworICAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnYnVmZik7CisgICAgICBjbG9zZV9maWxlX2Rlc2NyaXB0b3JzKCk7CisgICAgICBmcmVlKG1lbWNodW5rKTsKKyAgICAgIHJldHVybiAtOTsKKyAgICB9CisgIH0KKworI2VuZGlmIC8qIHVzaW5nIGEgRkRfU0VUU0laRSBib3VuZCBzZWxlY3QoKSAqLworCisgIC8qCisgICAqIE9sZCBvciAnYmFja3dhcmRzIGNvbXBhdGlibGUnIGltcGxlbWVudGF0aW9ucyBvZiBzdGRpbyBkbyBub3QgYWxsb3cKKyAgICogaGFuZGxpbmcgb2Ygc3RyZWFtcyB3aXRoIGFuIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBncmVhdGVyCisgICAqIHRoYW4gMjU1LCBldmVuIHdoZW4gYWxsb3dpbmcgaGlnaCBudW1iZXJlZCBmaWxlIGRlc2NyaXB0b3JzIGZvciBzb2NrZXRzLgorICAgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYSBiaWcgbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMgd2hpY2ggaGF2ZSBiZWVuCisgICAqIG9wZW5lZCB1c2luZyBkdXAoKSwgc28gbGV0cyB0ZXN0IHRoZSBzdGRpbyBpbXBsZW1lbnRhdGlvbiBhbmQgZGlzY292ZXIKKyAgICogaWYgaXQgaXMgY2FwYWJsZSBvZiBmb3BlbigpaW5nIHNvbWUgYWRkaXRpb25hbCBmaWxlcy4KKyAgICovCisKKyAgaWYgKCFmb3Blbl93b3JrcygpKSB7CisgICAgc3ByaW50ZihzdHJidWZmMSwgZm10LCBudW1fb3Blbi5ybGltX21heCk7CisgICAgc3ByaW50ZihzdHJidWZmLCAic3RkaW8gZm9wZW4oKSBmYWlscyB3aXRoICVzIGZkcyBvcGVuKCkiLAorICAgICAgICAgICAgc3RyYnVmZjEpOworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZ2J1ZmYpOworICAgIHNwcmludGYoc3RyYnVmZiwgInN0ZGlvIGZvcGVuKCkgZmFpbHMgd2l0aCBsb3RzIG9mIGZkcyBvcGVuKCkiKTsKKyAgICBzdG9yZV9lcnJtc2coc3RyYnVmZiwgMCk7CisgICAgY2xvc2VfZmlsZV9kZXNjcmlwdG9ycygpOworICAgIGZyZWUobWVtY2h1bmspOworICAgIHJldHVybiAtMTA7CisgIH0KKworICAvKiBmcmVlIHRoZSBjaHVuayBvZiBtZW1vcnkgd2Ugd2VyZSByZXNlcnZpbmcgc28gdGhhdCBpdAorICAgICBiZWNvbWVzIGJlY29tZXMgYXZhaWxhYmxlIHRvIHRoZSB0ZXN0ICovCisKKyAgZnJlZShtZW1jaHVuayk7CisKKyAgLyogY2xvc2UgZmlsZSBkZXNjcmlwdG9ycyB1bmxlc3MgaW5zdHJ1Y3RlZCB0byBrZWVwIHRoZW0gKi8KKworICBpZiAoIWtlZXBfb3BlbikgeworICAgIGNsb3NlX2ZpbGVfZGVzY3JpcHRvcnMoKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkxjb2RlIHJlczsKKyAgQ1VSTCAqY3VybDsKKworICBpZighc3RyY21wKFVSTCwgImNoZWNrIikpIHsKKyAgICAvKiB1c2VkIGJ5IHRoZSB0ZXN0IHNjcmlwdCB0byBhc2sgaWYgd2UgY2FuIHJ1biB0aGlzIHRlc3Qgb3Igbm90ICovCisgICAgaWYocmxpbWl0KEZBTFNFKSkgeworICAgICAgZnByaW50ZihzdGRvdXQsICJybGltaXQgcHJvYmxlbTogJXNcbiIsIG1zZ2J1ZmYpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOyAvKiBzdXJlLCBydW4gdGhpcyEgKi8KKyAgfQorCisgIGlmIChybGltaXQoVFJVRSkpIHsKKyAgICAvKiBmYWlsdXJlICovCisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIC8qIHJ1biB0aGUgdGVzdCB3aXRoIHRoZSBidW5jaCBvZiBvcGVuIGZpbGUgZGVzY3JpcHRvcnMKKyAgICAgYW5kIGNsb3NlIHRoZW0gYWxsIG9uY2UgdGhlIHRlc3QgaXMgb3ZlciAqLworCisgIGlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZ2xvYmFsX2luaXQoKSBmYWlsZWRcbiIpOworICAgIGNsb3NlX2ZpbGVfZGVzY3JpcHRvcnMoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGNsb3NlX2ZpbGVfZGVzY3JpcHRvcnMoKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUiwgMUwpOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCit0ZXN0X2NsZWFudXA6CisKKyAgY2xvc2VfZmlsZV9kZXNjcmlwdG9ycygpOworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAoaW50KXJlczsKK30KKworI2Vsc2UgLyogZGVmaW5lZChIQVZFX0dFVFJMSU1JVCkgJiYgZGVmaW5lZChIQVZFX1NFVFJMSU1JVCkgKi8KKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICAodm9pZClVUkw7CisgIHByaW50Zigic3lzdGVtIGxhY2tzIG5lY2Vzc2FyeSBzeXN0ZW0gZnVuY3Rpb24ocykiKTsKKyAgcmV0dXJuIDE7IC8qIHNraXAgdGVzdCAqLworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0dFVFJMSU1JVCkgJiYgZGVmaW5lZChIQVZFX1NFVFJMSU1JVCkgKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTM5LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUzOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMzg5M2YKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjUzOS5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgIENVUkxjb2RlIHJlczsKKyAgIENVUkwgKmN1cmw7CisgICBjaGFyICpuZXdVUkwgPSBOVUxMOworICAgc3RydWN0IGN1cmxfc2xpc3QgKnNsaXN0ID0gTlVMTDsKKworICAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZ2xvYmFsX2luaXQoKSBmYWlsZWRcbiIpOworICAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICAgfQorCisgICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgICB9CisKKyAgIC8qCisgICAgKiBCZWdpbiB3aXRoIGNVUkwgc2V0IHRvIHVzZSBhIHNpbmdsZSBDV0QgdG8gdGhlIFVSTCdzIGRpcmVjdG9yeS4KKyAgICAqLworICAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisgICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKyAgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfRlRQX0ZJTEVNRVRIT0QsIChsb25nKSBDVVJMRlRQTUVUSE9EX1NJTkdMRUNXRCk7CisKKyAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgICAvKgorICAgICogQ2hhbmdlIHRoZSBGVFBfRklMRU1FVEhPRCBvcHRpb24gdG8gdXNlIGZ1bGwgcGF0aHMgcmF0aGVyIHRoYW4gYSBDV0QKKyAgICAqIGNvbW1hbmQuICBBbHRlciB0aGUgVVJMJ3MgcGF0aCBhIGJpdCwgYXBwZW5kaW5nIGEgIi4vIi4gIFVzZSBhbiBpbm5vY3VvdXMKKyAgICAqIFFVT1RFIGNvbW1hbmQsIGFmdGVyIHdoaWNoIGNVUkwgd2lsbCBDV0QgdG8gZnRwX2Nvbm4tPmVudHJ5cGF0aCBhbmQgdGhlbgorICAgICogKG9uIHRoZSBuZXh0IGNhbGwgdG8gZnRwX3N0YXRlbWFjaF9hY3QpIGZpbmQgYSBub24temVybyBmdHBjb25uLT5kaXJkZXB0aAorICAgICogZXZlbiB0aG91Z2ggbm8gZGlyZWN0b3JpZXMgYXJlIHN0b3JlZCBpbiB0aGUgZnRwY29ubi0+ZGlycyBhcnJheSAoYWZ0ZXIgYQorICAgICogY2FsbCB0byBmcmVlZGlycykuCisgICAgKi8KKyAgIG5ld1VSTCA9IG1hbGxvYyhzdHJsZW4oVVJMKSArIDMpOworICAgaWYgKG5ld1VSTCA9PSBOVUxMKSB7CisgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgICB9CisgICBuZXdVUkwgPSBzdHJjYXQoc3RyY3B5KG5ld1VSTCwgVVJMKSwgIi4vIik7CisKKyAgIHNsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQgKE5VTEwsICJTWVNUIik7CisgICBpZiAoc2xpc3QgPT0gTlVMTCkgeworICAgICBmcmVlKG5ld1VSTCk7CisgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgICB9CisKKyAgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBuZXdVUkwpOworICAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GVFBfRklMRU1FVEhPRCwgKGxvbmcpIENVUkxGVFBNRVRIT0RfTk9DV0QpOworICAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9RVU9URSwgc2xpc3QpOworCisgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKwordGVzdF9jbGVhbnVwOgorCisgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKHNsaXN0KTsKKyAgIGlmKG5ld1VSTCkKKyAgICAgZnJlZShuZXdVUkwpOworICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgIHJldHVybiAoaW50KXJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTQwLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU0MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0N2YxZGUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU0MC5jCkBAIC0wLDAgKzEsMjQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRoaXMgaXMgdGhlICdwcm94eWF1dGguYycgdGVzdCBhcHAgcG9zdGVkIGJ5IFNobXVsaWsgUmVnZXYgb24gdGhlIGxpYmN1cmwKKyAqIG1haWxpbmcgbGlzdCBvbiAxMCBKdWwgMjAwNywgY29udmVydGVkIHRvIGEgdGVzdCBjYXNlLgorICoKKyAqIGFyZ3YxID0gVVJMCisgKiBhcmd2MiA9IHByb3h5CisgKiBhcmd2MyA9IHByb3h5dXNlcjpwYXNzd29yZAorICogYXJndjQgPSBob3N0IG5hbWUgdG8gdXNlIGZvciB0aGUgY3VzdG9tIEhvc3Q6IGhlYWRlcgorICovCisKKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJ0ZXN0dXRpbC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBURVNUX0hBTkdfVElNRU9VVCA2MCAqIDEwMDAKKworI2RlZmluZSBQUk9YWSBsaWJ0ZXN0X2FyZzIKKyNkZWZpbmUgUFJPWFlVU0VSUFdEIGxpYnRlc3RfYXJnMworI2RlZmluZSBIT1NUIHRlc3RfYXJndls0XQorCisjZGVmaW5lIE5VTV9IQU5ETEVTIDIKKworQ1VSTCAqZWhbTlVNX0hBTkRMRVNdOworCitzdGF0aWMgaW50IGluaXQoaW50IG51bSwgQ1VSTE0gKmNtLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHVzZXJwd2QsCisgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMpCit7CisgIGludCByZXMgPSAwOworCisgIHJlc19lYXN5X2luaXQoZWhbbnVtXSk7CisgIGlmKHJlcykKKyAgICBnb3RvIGluaXRfZmFpbGVkOworCisgIHJlc19lYXN5X3NldG9wdChlaFtudW1dLCBDVVJMT1BUX1VSTCwgdXJsKTsKKyAgaWYocmVzKQorICAgIGdvdG8gaW5pdF9mYWlsZWQ7CisKKyAgcmVzX2Vhc3lfc2V0b3B0KGVoW251bV0sIENVUkxPUFRfUFJPWFksIFBST1hZKTsKKyAgaWYocmVzKQorICAgIGdvdG8gaW5pdF9mYWlsZWQ7CisKKyAgcmVzX2Vhc3lfc2V0b3B0KGVoW251bV0sIENVUkxPUFRfUFJPWFlVU0VSUFdELCB1c2VycHdkKTsKKyAgaWYocmVzKQorICAgIGdvdG8gaW5pdF9mYWlsZWQ7CisKKyAgcmVzX2Vhc3lfc2V0b3B0KGVoW251bV0sIENVUkxPUFRfUFJPWFlBVVRILCAobG9uZylDVVJMQVVUSF9BTlkpOworICBpZihyZXMpCisgICAgZ290byBpbml0X2ZhaWxlZDsKKworICByZXNfZWFzeV9zZXRvcHQoZWhbbnVtXSwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisgIGlmKHJlcykKKyAgICBnb3RvIGluaXRfZmFpbGVkOworCisgIHJlc19lYXN5X3NldG9wdChlaFtudW1dLCBDVVJMT1BUX0hFQURFUiwgMUwpOworICBpZihyZXMpCisgICAgZ290byBpbml0X2ZhaWxlZDsKKworICByZXNfZWFzeV9zZXRvcHQoZWhbbnVtXSwgQ1VSTE9QVF9IVFRQSEVBREVSLCBoZWFkZXJzKTsgLyogY3VzdG9tIEhvc3Q6ICovCisgIGlmKHJlcykKKyAgICBnb3RvIGluaXRfZmFpbGVkOworCisgIHJlc19tdWx0aV9hZGRfaGFuZGxlKGNtLCBlaFtudW1dKTsKKyAgaWYocmVzKQorICAgIGdvdG8gaW5pdF9mYWlsZWQ7CisKKyAgcmV0dXJuIDA7IC8qIHN1Y2Nlc3MgKi8KKworaW5pdF9mYWlsZWQ6CisKKyAgY3VybF9lYXN5X2NsZWFudXAoZWhbbnVtXSk7CisgIGVoW251bV0gPSBOVUxMOworCisgIHJldHVybiByZXM7IC8qIGZhaWx1cmUgKi8KK30KKworc3RhdGljIGludCBsb29wKGludCBudW0sIENVUkxNICpjbSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB1c2VycHdkLAorICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzKQoreworICBDVVJMTXNnICptc2c7CisgIGxvbmcgTDsKKyAgaW50IFEsIFUgPSAtMTsKKyAgZmRfc2V0IFIsIFcsIEU7CisgIHN0cnVjdCB0aW1ldmFsIFQ7CisgIGludCByZXMgPSAwOworCisgIHJlcyA9IGluaXQobnVtLCBjbSwgdXJsLCB1c2VycHdkLCBoZWFkZXJzKTsKKyAgaWYocmVzKQorICAgIHJldHVybiByZXM7CisKKyAgd2hpbGUgKFUpIHsKKworICAgIGludCBNID0gLTk5OworCisgICAgcmVzX211bHRpX3BlcmZvcm0oY20sICZVKTsKKyAgICBpZihyZXMpCisgICAgICByZXR1cm4gcmVzOworCisgICAgcmVzX3Rlc3RfdGltZWRvdXQoKTsKKyAgICBpZihyZXMpCisgICAgICByZXR1cm4gcmVzOworCisgICAgaWYgKFUpIHsKKyAgICAgIEZEX1pFUk8oJlIpOworICAgICAgRkRfWkVSTygmVyk7CisgICAgICBGRF9aRVJPKCZFKTsKKworICAgICAgcmVzX211bHRpX2Zkc2V0KGNtLCAmUiwgJlcsICZFLCAmTSk7CisgICAgICBpZihyZXMpCisgICAgICAgIHJldHVybiByZXM7CisKKyAgICAgIC8qIEF0IHRoaXMgcG9pbnQsIE0gaXMgZ3VhcmFudGVlZCB0byBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gLTEuICovCisKKyAgICAgIHJlc19tdWx0aV90aW1lb3V0KGNtLCAmTCk7CisgICAgICBpZihyZXMpCisgICAgICAgIHJldHVybiByZXM7CisKKyAgICAgIC8qIEF0IHRoaXMgcG9pbnQsIEwgaXMgZ3VhcmFudGVlZCB0byBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gLTEuICovCisKKyAgICAgIGlmKEwgIT0gLTEpIHsKKyAgICAgICAgVC50dl9zZWMgPSBMLzEwMDA7CisgICAgICAgIFQudHZfdXNlYyA9IChMJTEwMDApKjEwMDA7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgVC50dl9zZWMgPSA1OworICAgICAgICBULnR2X3VzZWMgPSAwOworICAgICAgfQorCisgICAgICByZXNfc2VsZWN0X3Rlc3QoTSsxLCAmUiwgJlcsICZFLCAmVCk7CisgICAgICBpZihyZXMpCisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgd2hpbGUoKG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGNtLCAmUSkpICE9IE5VTEwpIHsKKyAgICAgIGlmKG1zZy0+bXNnID09IENVUkxNU0dfRE9ORSkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgQ1VSTCAqZSA9IG1zZy0+ZWFzeV9oYW5kbGU7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUjogJWQgLSAlc1xuIiwgKGludCltc2ctPmRhdGEucmVzdWx0LAorICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSk7CisgICAgICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShjbSwgZSk7CisgICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGUpOworICAgICAgICBmb3IoaT0wOyBpIDwgTlVNX0hBTkRMRVM7IGkrKykgeworICAgICAgICAgIGlmKGVoW2ldID09IGUpIHsKKyAgICAgICAgICAgIGVoW2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkU6IENVUkxNc2cgKCVkKVxuIiwgKGludCltc2ctPm1zZyk7CisgICAgfQorCisgICAgcmVzX3Rlc3RfdGltZWRvdXQoKTsKKyAgICBpZihyZXMpCisgICAgICByZXR1cm4gcmVzOworICB9CisKKyAgcmV0dXJuIDA7IC8qIHN1Y2Nlc3MgKi8KK30KKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMTSAqY20gPSBOVUxMOworICBzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycyA9IE5VTEw7CisgIGNoYXIgYnVmZmVyWzI0Nl07IC8qIG5haXZlbHkgZml4ZWQtc2l6ZSAqLworICBpbnQgcmVzID0gMDsKKyAgaW50IGk7CisKKyAgZm9yKGk9MDsgaSA8IE5VTV9IQU5ETEVTOyBpKyspCisgICAgZWhbaV0gPSBOVUxMOworCisgIHN0YXJ0X3Rlc3RfdGltaW5nKCk7CisKKyAgaWYodGVzdF9hcmdjIDwgNCkKKyAgICByZXR1cm4gOTk7CisKKyAgc3ByaW50ZihidWZmZXIsICJIb3N0OiAlcyIsIEhPU1QpOworCisgIC8qIG5vdyBhZGQgYSBjdXN0b20gSG9zdDogaGVhZGVyICovCisgIGhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBidWZmZXIpOworICBpZighaGVhZGVycykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9zbGlzdF9hcHBlbmQoKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICByZXNfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKyAgaWYocmVzKSB7CisgICAgY3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgcmVzX211bHRpX2luaXQoY20pOworICBpZihyZXMpIHsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgY3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgcmVzID0gbG9vcCgwLCBjbSwgVVJMLCBQUk9YWVVTRVJQV0QsIGhlYWRlcnMpOworICBpZihyZXMpCisgICAgZ290byB0ZXN0X2NsZWFudXA7CisKKyAgZnByaW50ZihzdGRlcnIsICJsaWI1NDA6IG5vdyB3ZSBkbyB0aGUgcmVxdWVzdCBhZ2FpblxuIik7CisKKyAgcmVzID0gbG9vcCgxLCBjbSwgVVJMLCBQUk9YWVVTRVJQV0QsIGhlYWRlcnMpOworCit0ZXN0X2NsZWFudXA6CisKKyAgLyogcHJvcGVyIGNsZWFudXAgc2VxdWVuY2UgLSB0eXBlIFBCICovCisKKyAgZm9yKGk9MDsgaSA8IE5VTV9IQU5ETEVTOyBpKyspIHsKKyAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoY20sIGVoW2ldKTsKKyAgICBjdXJsX2Vhc3lfY2xlYW51cChlaFtpXSk7CisgIH0KKworICBjdXJsX211bHRpX2NsZWFudXAoY20pOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgY3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsKKworICByZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NDEuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTQxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlOGRkOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTQxLmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2lmZGVmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qCisgKiBUd28gRlRQIHVwbG9hZHMsIHRoZSBzZWNvbmQgd2l0aCBubyBjb250ZW50IHNlbnQuCisgKi8KKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXMgPSBDVVJMRV9PSzsKKyAgRklMRSAqaGRfc3JjIDsKKyAgaW50IGhkIDsKKyAgc3RydWN0X3N0YXQgZmlsZV9pbmZvOworICBpbnQgZXJyb3I7CisKKyAgaWYgKCFsaWJ0ZXN0X2FyZzIpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiA8dXJsPiA8ZmlsZS10by11cGxvYWQ+XG4iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBoZF9zcmMgPSBmb3BlbihsaWJ0ZXN0X2FyZzIsICJyYiIpOworICBpZihOVUxMID09IGhkX3NyYykgeworICAgIGVycm9yID0gRVJSTk87CisgICAgZnByaW50ZihzdGRlcnIsICJmb3BlbigpIGZhaWxlZCB3aXRoIGVycm9yOiAlZCAlc1xuIiwKKyAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBmaWxlOiAlc1xuIiwgbGlidGVzdF9hcmcyKTsKKyAgICByZXR1cm4gLTI7IC8qIGlmIHRoaXMgaGFwcGVucyB0aGluZ3MgYXJlIG1ham9yIHdlaXJkICovCisgIH0KKworICAvKiBnZXQgdGhlIGZpbGUgc2l6ZSBvZiB0aGUgbG9jYWwgZmlsZSAqLworICBoZCA9IGZzdGF0KGZpbGVubyhoZF9zcmMpLCAmZmlsZV9pbmZvKTsKKyAgaWYoaGQgPT0gLTEpIHsKKyAgICAvKiBjYW4ndCBvcGVuIGZpbGUsIGJhaWwgb3V0ICovCisgICAgZXJyb3IgPSBFUlJOTzsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImZzdGF0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkICVzXG4iLAorICAgICAgICAgICAgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogY2Fubm90IG9wZW4gZmlsZSAlc1xuIiwgbGlidGVzdF9hcmcyKTsKKyAgICBmY2xvc2UoaGRfc3JjKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZighIGZpbGVfaW5mby5zdF9zaXplKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogZmlsZSAlcyBoYXMgemVybyBzaXplIVxuIiwgbGlidGVzdF9hcmcyKTsKKyAgICBmY2xvc2UoaGRfc3JjKTsKKyAgICByZXR1cm4gLTQ7CisgIH0KKworICBpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBmY2xvc2UoaGRfc3JjKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgLyogZ2V0IGEgY3VybCBoYW5kbGUgKi8KKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICBmY2xvc2UoaGRfc3JjKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgLyogZW5hYmxlIHVwbG9hZGluZyAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VQTE9BRCwgMUwpOworCisgIC8qIGVuYWJsZSB2ZXJib3NlICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgIC8qIHNwZWNpZnkgdGFyZ2V0ICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsQ1VSTE9QVF9VUkwsIFVSTCk7CisKKyAgLyogbm93IHNwZWNpZnkgd2hpY2ggZmlsZSB0byB1cGxvYWQgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEUsIGhkX3NyYyk7CisKKyAgLyogTm93IHJ1biBvZmYgYW5kIGRvIHdoYXQgeW91J3ZlIGJlZW4gdG9sZCEgKi8KKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKyAgLyogYW5kIG5vdyB1cGxvYWQgdGhlIGV4YWN0IHNhbWUgYWdhaW4sIGJ1dCB3aXRob3V0IHJld2luZGluZyBzbyBpdCBhbHJlYWR5CisgICAgIGlzIGF0IGVuZCBvZiBmaWxlICovCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCit0ZXN0X2NsZWFudXA6CisKKyAgLyogY2xvc2UgdGhlIGxvY2FsIGZpbGUgKi8KKyAgZmNsb3NlKGhkX3NyYyk7CisKKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NDIuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTQyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRmNDkzZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTQyLmMKQEAgLTAsMCArMSw3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyoKKyAqIEZUUCBnZXQgd2l0aCBOT0JPRFkgYnV0IG5vIEhFQURFUgorICovCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIC8qIGdldCBhIGN1cmwgaGFuZGxlICovCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIC8qIGVuYWJsZSB2ZXJib3NlICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgIC8qIGVuYWJsZSBOT0JPRFkgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9OT0JPRFksIDFMKTsKKworICAvKiBkaXNhYmxlIEhFQURFUiAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUiwgMEwpOworCisgIC8qIHNwZWNpZnkgdGFyZ2V0ICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsQ1VSTE9QVF9VUkwsIFVSTCk7CisKKyAgLyogTm93IHJ1biBvZmYgYW5kIGRvIHdoYXQgeW91J3ZlIGJlZW4gdG9sZCEgKi8KKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKK3Rlc3RfY2xlYW51cDoKKworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU0My5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGQ5YzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NDMuYwpAQCAtMCwwICsxLDU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEJhc2VkIG9uIEFsZXggRmlzaG1hbidzIGJ1ZyByZXBvcnQgb24gU2VwdGVtYmVyIDMwLCAyMDA3ICovCisKKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIHVuc2lnbmVkIGNoYXIgYVtdID0gezB4OWMsIDB4MjYsIDB4NGIsIDB4M2QsIDB4NDksIDB4NCwgMHhhMSwgMHgxLAorICAgICAgICAgICAgICAgICAgICAgICAweGUwLCAweGQ4LCAweDdjLCAgMHgyMCwgMHhiNywgMHhlZiwgMHg1MywgMHgyOSwgMHhmYSwKKyAgICAgICAgICAgICAgICAgICAgICAgMHgxZCwgMHg1NywgMHhlMX07CisKKyAgQ1VSTCAqZWFzeTsKKyAgaW50IGFzaXplOworICBjaGFyICpzOworICAodm9pZClVUkw7CisKKyAgaWYgKChlYXN5ID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBhc2l6ZSA9IChpbnQpc2l6ZW9mKGEpOworCisgIHMgPSBjdXJsX2Vhc3lfZXNjYXBlKGVhc3ksIChjaGFyKilhLCBhc2l6ZSk7CisKKyAgcHJpbnRmKCIlc1xuIiwgcyk7CisKKyAgY3VybF9mcmVlKHMpOworICBjdXJsX2Vhc3lfY2xlYW51cChlYXN5KTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTQ0LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU0NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NjYxODcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU0NC5jCkBAIC0wLDAgKzEsNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0YXRpYyBjaGFyIHRlc3RzdHJpbmdbXSA9CisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgIC8qIEFTQ0lJIHJlcHJlc2VudGF0aW9uIHdpdGggZXNjYXBlIHNlcXVlbmNlcyBmb3Igbm9uLUFTQ0lJIHBsYXRmb3JtcyAqLworICAiXHg1NFx4NjhceDY5XHg3M1x4MDBceDIwXHg2OVx4NzNceDIwXHg3NFx4NjVceDczXHg3NFx4MjBceDYyXHg2OVx4NmVceDYxIgorICAiXHg3Mlx4NzlceDIwXHg2NFx4NjFceDc0XHg2MVx4MjBceDc3XHg2OVx4NzRceDY4XHgyMFx4NjFceDZlXHgyMFx4NjVceDZkIgorICAiXHg2Mlx4NjVceDY0XHg2NFx4NjVceDY0XHgyMFx4NGVceDU1XHg0Y1x4MjBceDYyXHg3OVx4NzRceDY1XHgwYSI7CisjZWxzZQorICAiVGhpc1wwIGlzIHRlc3QgYmluYXJ5IGRhdGEgd2l0aCBhbiBlbWJlZGRlZCBOVUwgYnl0ZVxuIjsKKyNlbmRpZgorCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzPUNVUkxFX09LOworCisgIGlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZ2xvYmFsX2luaXQoKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICAvKiBGaXJzdCBzZXQgdGhlIFVSTCB0aGF0IGlzIGFib3V0IHRvIHJlY2VpdmUgb3VyIFBPU1QuICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworCisjaWZkZWYgTElCNTQ1CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9TVEZJRUxEU0laRSwgKGxvbmcpIHNpemVvZiB0ZXN0c3RyaW5nIC0gMSk7CisjZW5kaWYKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPUFlQT1NURklFTERTLCB0ZXN0c3RyaW5nKTsKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsgLyogc2hvdyB2ZXJib3NlIGZvciBkZWJ1ZyAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUiwgMUwpOyAvKiBpbmNsdWRlIGhlYWRlciAqLworCisgIC8qIFVwZGF0ZSB0aGUgb3JpZ2luYWwgZGF0YSB0byBkZXRlY3Qgbm9uLWNvcHkuICovCisgIHN0cmNweSh0ZXN0c3RyaW5nLCAiRkFJTCIpOworCisgIC8qIE5vdywgdGhpcyBpcyBhIFBPU1QgcmVxdWVzdCB3aXRoIGJpbmFyeSAwIGVtYmVkZGVkIGluIFBPU1QgZGF0YS4gKi8KKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKK3Rlc3RfY2xlYW51cDoKKworICAvKiBhbHdheXMgY2xlYW51cCAqLworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAoaW50KXJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTQ3LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU0Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MmJjM2YKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU0Ny5jCkBAIC0wLDAgKzEsMTI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGFyZ3YxID0gVVJMCisgKiBhcmd2MiA9IHByb3h5CisgKiBhcmd2MyA9IHByb3h5dXNlcjpwYXNzd29yZAorICovCisKKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgICAvKiBBU0NJSSByZXByZXNlbnRhdGlvbiB3aXRoIGVzY2FwZSBzZXF1ZW5jZXMgZm9yIG5vbi1BU0NJSSBwbGF0Zm9ybXMgKi8KKyMgIGRlZmluZSBVUExPQURUSElTICJceDc0XHg2OFx4NjlceDczXHgyMFx4NjlceDczXHgyMFx4NzRceDY4XHg2NVx4MjBceDYyIiBcCisgICAgICAgICAgICAgICAgICAgICAiXHg2Y1x4NzVceDcyXHg2Mlx4MjBceDc3XHg2NVx4MjBceDc3XHg2MVx4NmVceDc0XHgyMCIgXAorICAgICAgICAgICAgICAgICAgICAgIlx4NzRceDZmXHgyMFx4NzVceDcwXHg2Y1x4NmZceDYxXHg2NFx4MGEiCisjZWxzZQorIyAgZGVmaW5lIFVQTE9BRFRISVMgInRoaXMgaXMgdGhlIGJsdXJiIHdlIHdhbnQgdG8gdXBsb2FkXG4iCisjZW5kaWYKKworI2lmbmRlZiBMSUI1NDgKK3N0YXRpYyBzaXplX3QgcmVhZGNhbGxiYWNrKHZvaWQgICpwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBubWVtYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudHApCit7CisgIGludCAqY291bnRlciA9IChpbnQgKiljbGllbnRwOworCisgIGlmKCpjb3VudGVyKSB7CisgICAgLyogb25seSBkbyB0aGlzIG9uY2UgYW5kIHRoZW4gcmVxdWlyZSBhIGNsZWFyaW5nIG9mIHRoaXMgKi8KKyAgICBmcHJpbnRmKHN0ZGVyciwgIlJFQUQgQUxSRUFEWSBET05FIVxuIik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgKCpjb3VudGVyKSsrOyAvKiBidW1wICovCisKKyAgaWYoc2l6ZSAqIG5tZW1iID4gc3RybGVuKFVQTE9BRFRISVMpKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJSRUFEIVxuIik7CisgICAgc3RyY3B5KHB0ciwgVVBMT0FEVEhJUyk7CisgICAgcmV0dXJuIHN0cmxlbihVUExPQURUSElTKTsKKyAgfQorICBmcHJpbnRmKHN0ZGVyciwgIlJFQUQgTk9UIEZJTkUhXG4iKTsKKyAgcmV0dXJuIDA7Cit9CitzdGF0aWMgY3VybGlvZXJyIGlvY3RsY2FsbGJhY2soQ1VSTCAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50cCkKK3sKKyAgaW50ICpjb3VudGVyID0gKGludCAqKWNsaWVudHA7CisgICh2b2lkKWhhbmRsZTsgLyogdW51c2VkICovCisgIGlmKGNtZCA9PSBDVVJMSU9DTURfUkVTVEFSVFJFQUQpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlJFV0lORCFcbiIpOworICAgICpjb3VudGVyID0gMDsgLyogY2xlYXIgY291bnRlciB0byBtYWtlIHRoZSByZWFkIGNhbGxiYWNrIHJlc3RhcnQgKi8KKyAgfQorICByZXR1cm4gQ1VSTElPRV9PSzsKK30KKworCisKKyNlbmRpZgorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkxjb2RlIHJlczsKKyAgQ1VSTCAqY3VybDsKKyNpZm5kZWYgTElCNTQ4CisgIGludCBjb3VudGVyPTA7CisjZW5kaWYKKworICBpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUiwgMUwpOworI2lmZGVmIExJQjU0OAorICAvKiBzZXQgdGhlIGRhdGEgdG8gUE9TVCB3aXRoIGEgbWVyZSBwb2ludGVyIHRvIGEgemVyby10ZXJtaW5hdGVkIHN0cmluZyAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsIFVQTE9BRFRISVMpOworI2Vsc2UKKyAgLyogNTQ3IHN0eWxlLCB3aGljaCBtZWFucyByZWFkaW5nIHRoZSBQT1NUIGRhdGEgZnJvbSBhIGNhbGxiYWNrICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU9DVExGVU5DVElPTiwgaW9jdGxjYWxsYmFjayk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU9DVExEQVRBLCAmY291bnRlcik7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCByZWFkY2FsbGJhY2spOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQUREQVRBLCAmY291bnRlcik7CisgIC8qIFdlIENBTk5PVCBkbyB0aGUgUE9TVCBmaW5lIHdpdGhvdXQgc2V0dGluZyB0aGUgc2l6ZSAob3IgY2hvb3NlIGNodW5rZWQpISAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIChsb25nKXN0cmxlbihVUExPQURUSElTKSk7CisjZW5kaWYKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NULCAxTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFJPWFksIGxpYnRlc3RfYXJnMik7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFJPWFlVU0VSUFdELCBsaWJ0ZXN0X2FyZzMpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST1hZQVVUSCwKKyAgICAgICAgICAgICAgICAgICAobG9uZykgKENVUkxBVVRIX05UTE0gfCBDVVJMQVVUSF9ESUdFU1QgfCBDVVJMQVVUSF9CQVNJQykgKTsKKworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKwordGVzdF9jbGVhbnVwOgorCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIChpbnQpcmVzOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU0OS5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NDkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTU2OGM4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NDkuYwpAQCAtMCwwICsxLDY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGFyZ3YxID0gVVJMCisgKiBhcmd2MiA9IHByb3h5CisgKiBhcmd2MyA9IG5vbi16ZXJvIG1lYW5zIEFTQ0lJIHRyYW5zZmVyCisgKi8KKworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTGNvZGUgcmVzOworICBDVVJMICpjdXJsOworCisgIGlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZ2xvYmFsX2luaXQoKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST1hZLCBsaWJ0ZXN0X2FyZzIpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QUk9YWV9UUkFOU0ZFUl9NT0RFLCAxTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworICBpZihsaWJ0ZXN0X2FyZzMpIHsKKyAgICAvKiBlbmFibGUgYXNjaWkvdGV4dCBtb2RlICovCisgICAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9UUkFOU0ZFUlRFWFQsIDFMKTsKKyAgfQorCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCit0ZXN0X2NsZWFudXA6CisKKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gKGludClyZXM7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTUyLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU1Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYzk0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU1Mi5jCkBAIC0wLDAgKzEsMjIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGFyZ3YxID0gVVJMCisgKiBhcmd2MiA9IHByb3h5IHdpdGggZW1iZWRkZWQgdXNlcitwYXNzd29yZAorICovCisKKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0cnVjdCBkYXRhIHsKKyAgY2hhciB0cmFjZV9hc2NpaTsgLyogMSBvciAwICovCit9OworCitzdGF0aWMKK3ZvaWQgZHVtcChjb25zdCBjaGFyICp0ZXh0LAorICAgICAgICAgIEZJTEUgKnN0cmVhbSwgdW5zaWduZWQgY2hhciAqcHRyLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICBjaGFyIG5vaGV4KQoreworICBzaXplX3QgaTsKKyAgc2l6ZV90IGM7CisKKyAgdW5zaWduZWQgaW50IHdpZHRoPTB4MTA7CisKKyAgaWYobm9oZXgpCisgICAgLyogd2l0aG91dCB0aGUgaGV4IG91dHB1dCwgd2UgY2FuIGZpdCBtb3JlIG9uIHNjcmVlbiAqLworICAgIHdpZHRoID0gMHg0MDsKKworICBmcHJpbnRmKHN0cmVhbSwgIiVzLCAlZCBieXRlcyAoMHgleClcbiIsIHRleHQsIChpbnQpc2l6ZSwgKGludClzaXplKTsKKworICBmb3IoaT0wOyBpPHNpemU7IGkrPSB3aWR0aCkgeworCisgICAgZnByaW50ZihzdHJlYW0sICIlMDR4OiAiLCAoaW50KWkpOworCisgICAgaWYoIW5vaGV4KSB7CisgICAgICAvKiBoZXggbm90IGRpc2FibGVkLCBzaG93IGl0ICovCisgICAgICBmb3IoYyA9IDA7IGMgPCB3aWR0aDsgYysrKQorICAgICAgICBpZihpK2MgPCBzaXplKQorICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJTAyeCAiLCBwdHJbaStjXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBmcHV0cygiICAgIiwgc3RyZWFtKTsKKyAgICB9CisKKyAgICBmb3IoYyA9IDA7IChjIDwgd2lkdGgpICYmIChpK2MgPCBzaXplKTsgYysrKSB7CisgICAgICAvKiBjaGVjayBmb3IgMEQwQTsgaWYgZm91bmQsIHNraXAgcGFzdCBhbmQgc3RhcnQgYSBuZXcgbGluZSBvZiBvdXRwdXQgKi8KKyAgICAgIGlmIChub2hleCAmJiAoaStjKzEgPCBzaXplKSAmJiBwdHJbaStjXT09MHgwRCAmJiBwdHJbaStjKzFdPT0weDBBKSB7CisgICAgICAgIGkrPShjKzItd2lkdGgpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGZwcmludGYoc3RyZWFtLCAiJWMiLAorICAgICAgICAgICAgICAocHRyW2krY10+PTB4MjApICYmIChwdHJbaStjXTwweDgwKT9wdHJbaStjXTonLicpOworICAgICAgLyogY2hlY2sgYWdhaW4gZm9yIDBEMEEsIHRvIGF2b2lkIGFuIGV4dHJhIFxuIGlmIGl0J3MgYXQgd2lkdGggKi8KKyAgICAgIGlmIChub2hleCAmJiAoaStjKzIgPCBzaXplKSAmJiBwdHJbaStjKzFdPT0weDBEICYmIHB0cltpK2MrMl09PTB4MEEpIHsKKyAgICAgICAgaSs9KGMrMy13aWR0aCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBmcHV0YygnXG4nLCBzdHJlYW0pOyAvKiBuZXdsaW5lICovCisgIH0KKyAgZmZsdXNoKHN0cmVhbSk7Cit9CisKK3N0YXRpYworaW50IG15X3RyYWNlKENVUkwgKmhhbmRsZSwgY3VybF9pbmZvdHlwZSB0eXBlLAorICAgICAgICAgICAgIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgIHZvaWQgKnVzZXJwKQoreworICBzdHJ1Y3QgZGF0YSAqY29uZmlnID0gKHN0cnVjdCBkYXRhICopdXNlcnA7CisgIGNvbnN0IGNoYXIgKnRleHQ7CisgICh2b2lkKWhhbmRsZTsgLyogcHJldmVudCBjb21waWxlciB3YXJuaW5nICovCisKKyAgc3dpdGNoICh0eXBlKSB7CisgIGNhc2UgQ1VSTElORk9fVEVYVDoKKyAgICBmcHJpbnRmKHN0ZGVyciwgIj09IEluZm86ICVzIiwgKGNoYXIgKilkYXRhKTsKKyAgZGVmYXVsdDogLyogaW4gY2FzZSBhIG5ldyBvbmUgaXMgaW50cm9kdWNlZCB0byBzaG9jayB1cyAqLworICAgIHJldHVybiAwOworCisgIGNhc2UgQ1VSTElORk9fSEVBREVSX09VVDoKKyAgICB0ZXh0ID0gIj0+IFNlbmQgaGVhZGVyIjsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19EQVRBX09VVDoKKyAgICB0ZXh0ID0gIj0+IFNlbmQgZGF0YSI7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fU1NMX0RBVEFfT1VUOgorICAgIHRleHQgPSAiPT4gU2VuZCBTU0wgZGF0YSI7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fSEVBREVSX0lOOgorICAgIHRleHQgPSAiPD0gUmVjdiBoZWFkZXIiOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0RBVEFfSU46CisgICAgdGV4dCA9ICI8PSBSZWN2IGRhdGEiOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX1NTTF9EQVRBX0lOOgorICAgIHRleHQgPSAiPD0gUmVjdiBTU0wgZGF0YSI7CisgICAgYnJlYWs7CisgIH0KKworICBkdW1wKHRleHQsIHN0ZGVyciwgKHVuc2lnbmVkIGNoYXIgKilkYXRhLCBzaXplLCBjb25maWctPnRyYWNlX2FzY2lpKTsKKyAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHNpemVfdCBjdXJyZW50X29mZnNldCA9IDA7CitzdGF0aWMgY2hhciBkYXRhYnVmWzcwMDAwXTsgLyogTVVTVCBiZSBtb3JlIHRoYW4gNjRrIE9SIE1BWF9JTklUSUFMX1BPU1RfU0laRSAqLworCitzdGF0aWMgc2l6ZV90IHJlYWRfY2FsbGJhY2sodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJlYW0pCit7CisgIHNpemVfdCAgYW1vdW50ID0gbm1lbWIgKiBzaXplOyAvKiBUb3RhbCBieXRlcyBjdXJsIHdhbnRzICovCisgIHNpemVfdCAgYXZhaWxhYmxlID0gc2l6ZW9mKGRhdGFidWYpIC0gY3VycmVudF9vZmZzZXQ7IC8qIFdoYXQgd2UgaGF2ZSB0byBnaXZlICovCisgIHNpemVfdCAgZ2l2ZW4gPSBhbW91bnQgPCBhdmFpbGFibGUgPyBhbW91bnQgOiBhdmFpbGFibGU7IC8qIFdoYXQgaXMgZ2l2ZW4gKi8KKyAgKHZvaWQpc3RyZWFtOworICBtZW1jcHkocHRyLCBkYXRhYnVmICsgY3VycmVudF9vZmZzZXQsIGdpdmVuKTsKKyAgY3VycmVudF9vZmZzZXQgKz0gZ2l2ZW47CisgIHJldHVybiBnaXZlbjsKK30KKworCitzdGF0aWMgc2l6ZV90IHdyaXRlX2NhbGxiYWNrKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyZWFtKQoreworICBpbnQgYW1vdW50ID0gY3VybHhfdXp0b3NpKHNpemUgKiBubWVtYik7CisgIHByaW50ZigiJS4qcyIsIGFtb3VudCwgKGNoYXIgKilwdHIpOworICAodm9pZClzdHJlYW07CisgIHJldHVybiBzaXplICogbm1lbWI7Cit9CisKKworc3RhdGljIGN1cmxpb2VyciBpb2N0bF9jYWxsYmFjayhDVVJMICogaGFuZGxlLCBpbnQgY21kLCB2b2lkICpjbGllbnRwKQoreworICAodm9pZCljbGllbnRwOworICBpZiAoY21kID09IENVUkxJT0NNRF9SRVNUQVJUUkVBRCApIHsKKyAgICBwcmludGYoIkFQUExJQ0FUSU9OOiByZWNpZXZlZCBhIENVUkxJT0NNRF9SRVNUQVJUUkVBRCByZXF1ZXN0XG4iKTsKKyAgICBwcmludGYoIkFQUExJQ0FUSU9OOiAqKiBSRVdJTkRJTkchICoqXG4iKTsKKyAgICBjdXJyZW50X29mZnNldCA9IDA7CisgICAgcmV0dXJuIENVUkxJT0VfT0s7CisgIH0KKyAgKHZvaWQpaGFuZGxlOworICByZXR1cm4gQ1VSTElPRV9VTktOT1dOQ01EOworfQorCisKKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMICpjdXJsOworICBDVVJMY29kZSByZXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICBzdHJ1Y3QgZGF0YSBjb25maWc7CisgIHNpemVfdCBpOworICBzdGF0aWMgY29uc3QgY2hhciBmaWxsW10gPSAidGVzdCBkYXRhIjsKKworICBjb25maWcudHJhY2VfYXNjaWkgPSAxOyAvKiBlbmFibGUgYXNjaWkgdHJhY2luZyAqLworCisgIGlmKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OLCBteV90cmFjZSk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfREVCVUdEQVRBLCAmY29uZmlnKTsKKyAgLyogdGhlIERFQlVHRlVOQ1RJT04gaGFzIG5vIGVmZmVjdCB1bnRpbCB3ZSBlbmFibGUgVkVSQk9TRSAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICAvKiBzZXR1cCByZXBlYXRlZCBkYXRhIHN0cmluZyAqLworICBmb3IgKGk9MDsgaSA8IHNpemVvZihkYXRhYnVmKTsgKytpKQorICAgICAgZGF0YWJ1ZltpXSA9IGZpbGxbaSAlIHNpemVvZiBmaWxsXTsKKworICAvKiBQb3N0ICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9TVCwgMUwpOworCisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgIC8qIENvbnZlcnQgdGhlIFBPU1QgZGF0YSB0byBBU0NJSSAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1RSQU5TRkVSVEVYVCwgMUwpOworI2VuZGlmCisKKyAgLyogU2V0dXAgcmVhZCBjYWxsYmFjayAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIChsb25nKSBzaXplb2YoZGF0YWJ1ZikpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgcmVhZF9jYWxsYmFjayk7CisKKyAgLyogV3JpdGUgY2FsbGJhY2sgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZV9jYWxsYmFjayk7CisKKyAgLyogSW9jdGwgZnVuY3Rpb24gKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBpb2N0bF9jYWxsYmFjayk7CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QUk9YWSwgbGlidGVzdF9hcmcyKTsKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKworICAvKiBBY2NlcHQgYW55IGF1dGguIEJ1dCBmb3IgdGhpcyBidWcgY29uZmlndXJlIHByb3h5IHdpdGggRElHRVNULCBiYXNpYyBtaWdodCB3b3JrIHRvbywgbm90IE5UTE0gKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QUk9YWUFVVEgsIChsb25nKUNVUkxBVVRIX0FOWSk7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X3BlcmZvcm0gPSAlZFxuIiwgKGludClyZXMpOworCit0ZXN0X2NsZWFudXA6CisKKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgcmV0dXJuIChpbnQpcmVzOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NTMuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTUzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxY2VmZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTUzLmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIHRlc3QgY2FzZSBhbmQgY29kZSBpcyBiYXNlZCBvbiB0aGUgYnVnIHJlY2lwZSBKb2UgTWFsaWNraSBwcm92aWRlZCBmb3IKKyAqIGJ1ZyByZXBvcnQgIzE4NzEyNjksIGZpeGVkIG9uIEphbiAxNCAyMDA4IGJlZm9yZSB0aGUgNy4xOC4wIHJlbGVhc2UuCisgKi8KKworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNkZWZpbmUgUE9TVExFTiA0MDk2MAorCitzdGF0aWMgc2l6ZV90IG15cmVhZGZ1bmModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJlYW0pCit7CisgIHN0YXRpYyBzaXplX3QgdG90YWw9UE9TVExFTjsKKyAgc3RhdGljIGNoYXIgYnVmWzEwMjRdOworICAodm9pZClzdHJlYW07CisKKyAgbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplb2YoYnVmKSk7CisKKyAgc2l6ZSAqPSBubWVtYjsKKyAgaWYgKHNpemUgPiB0b3RhbCkKKyAgICBzaXplID0gdG90YWw7CisKKyAgaWYoc2l6ZSA+IHNpemVvZihidWYpKQorICAgIHNpemUgPSBzaXplb2YoYnVmKTsKKworICBtZW1jcHkocHRyLCBidWYsIHNpemUpOworICB0b3RhbCAtPSBzaXplOworICByZXR1cm4gc2l6ZTsKK30KKworI2RlZmluZSBOVU1fSEVBREVSUyA4CisjZGVmaW5lIFNJWkVfSEVBREVSUyA1MDAwCisKK3N0YXRpYyBjaGFyIGJ1ZltTSVpFX0hFQURFUlMgKyAxMDBdOworCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlcyA9IENVUkxFX0ZBSUxFRF9JTklUOworICBpbnQgaTsKKyAgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcmxpc3Q9TlVMTCwgKmhsOworCisgIGlmKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgZm9yIChpID0gMDsgaSA8IE5VTV9IRUFERVJTOyBpKyspIHsKKyAgICBpbnQgbGVuID0gc3ByaW50ZihidWYsICJIZWFkZXIlZDogIiwgaSk7CisgICAgbWVtc2V0KCZidWZbbGVuXSwgJ0EnLCBTSVpFX0hFQURFUlMpOworICAgIGJ1ZltsZW4gKyBTSVpFX0hFQURFUlNdPTA7IC8qIHplcm8gdGVybWluYXRlICovCisgICAgaGwgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJsaXN0LCAgYnVmKTsKKyAgICBpZiAoIWhsKQorICAgICAgZ290byB0ZXN0X2NsZWFudXA7CisgICAgaGVhZGVybGlzdCA9IGhsOworICB9CisKKyAgaGwgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJsaXN0LCAiRXhwZWN0OiAiKTsKKyAgaWYgKCFobCkKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKyAgaGVhZGVybGlzdCA9IGhsOworCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcmxpc3QpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1BPU1QsIDFMKTsKKyNpZmRlZiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMKKyAgLyogQ29udmVydCB0aGUgUE9TVCBkYXRhIHRvIEFTQ0lJICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVFJBTlNGRVJURVhULCAxTCk7CisjZW5kaWYKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFLCAobG9uZylQT1NUTEVOKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSLCAxTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCBteXJlYWRmdW5jKTsKKworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKwordGVzdF9jbGVhbnVwOgorCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworCisgIGN1cmxfc2xpc3RfZnJlZV9hbGwoaGVhZGVybGlzdCk7CisKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAoaW50KXJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTU0LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU1NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDQyOWQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU1NC5jCkBAIC0wLDAgKzEsMTk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitzdGF0aWMgY2hhciBkYXRhW109CisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgIC8qIEFTQ0lJIHJlcHJlc2VudGF0aW9uIHdpdGggZXNjYXBlIHNlcXVlbmNlcyBmb3Igbm9uLUFTQ0lJIHBsYXRmb3JtcyAqLworICAiXHg3NFx4NjhceDY5XHg3M1x4MjBceDY5XHg3M1x4MjBceDc3XHg2OFx4NjFceDc0XHgyMFx4NzdceDY1XHgyMFx4NzAiCisgICJceDZmXHg3M1x4NzRceDIwXHg3NFx4NmZceDIwXHg3NFx4NjhceDY1XHgyMFx4NzNceDY5XHg2Y1x4NmNceDc5XHgyMCIKKyAgIlx4NzdceDY1XHg2Mlx4MjBceDczXHg2NVx4NzJceDc2XHg2NVx4NzJceDBhIjsKKyNlbHNlCisgICJ0aGlzIGlzIHdoYXQgd2UgcG9zdCB0byB0aGUgc2lsbHkgd2ViIHNlcnZlclxuIjsKKyNlbmRpZgorCitzdHJ1Y3QgV3JpdGVUaGlzIHsKKyAgY2hhciAqcmVhZHB0cjsKKyAgc2l6ZV90IHNpemVsZWZ0OworfTsKKworc3RhdGljIHNpemVfdCByZWFkX2NhbGxiYWNrKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqdXNlcnApCit7CisjaWZkZWYgTElCNTg3CisgICh2b2lkKXB0cjsKKyAgKHZvaWQpc2l6ZTsKKyAgKHZvaWQpbm1lbWI7CisgICh2b2lkKXVzZXJwOworICByZXR1cm4gQ1VSTF9SRUFERlVOQ19BQk9SVDsKKyNlbHNlCisKKyAgc3RydWN0IFdyaXRlVGhpcyAqcG9vaCA9IChzdHJ1Y3QgV3JpdGVUaGlzICopdXNlcnA7CisKKyAgaWYoc2l6ZSpubWVtYiA8IDEpCisgICAgcmV0dXJuIDA7CisKKyAgaWYocG9vaC0+c2l6ZWxlZnQpIHsKKyAgICAqKGNoYXIgKilwdHIgPSBwb29oLT5yZWFkcHRyWzBdOyAvKiBjb3B5IG9uZSBzaW5nbGUgYnl0ZSAqLworICAgIHBvb2gtPnJlYWRwdHIrKzsgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcG9pbnRlciAqLworICAgIHBvb2gtPnNpemVsZWZ0LS07ICAgICAgICAgICAgICAgIC8qIGxlc3MgZGF0YSBsZWZ0ICovCisgICAgcmV0dXJuIDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogd2UgcmV0dXJuIDEgYnl0ZSBhdCBhIHRpbWUhICovCisgIH0KKworICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gbW9yZSBkYXRhIGxlZnQgdG8gZGVsaXZlciAqLworI2VuZGlmCit9CisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzPUNVUkxFX09LOworICBDVVJMRk9STWNvZGUgZm9ybXJjOworCisgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpmb3JtcG9zdD1OVUxMOworICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqbGFzdHB0cj1OVUxMOworICBzdHJ1Y3QgV3JpdGVUaGlzIHBvb2g7CisgIHN0cnVjdCBXcml0ZVRoaXMgcG9vaDI7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIHBvb2gucmVhZHB0ciA9IGRhdGE7CisgIHBvb2guc2l6ZWxlZnQgPSBzdHJsZW4oZGF0YSk7CisKKyAgLyogRmlsbCBpbiB0aGUgZmlsZSB1cGxvYWQgZmllbGQgKi8KKyAgZm9ybXJjID0gY3VybF9mb3JtYWRkKCZmb3JtcG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZsYXN0cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJzZW5kZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9TVFJFQU0sICZwb29oLAorICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09OVEVOVFNMRU5HVEgsIHBvb2guc2l6ZWxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9GSUxFTkFNRSwgInBvc3RpdDIuYyIsCisgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9FTkQpOworCisgIGlmKGZvcm1yYykKKyAgICBwcmludGYoImN1cmxfZm9ybWFkZCgxKSA9ICVkXG4iLCAoaW50KWZvcm1yYyk7CisKKyAgLyogTm93IGFkZCB0aGUgc2FtZSBkYXRhIHdpdGggYW5vdGhlciBuYW1lIGFuZCBtYWtlIGl0IG5vdCBsb29rIGxpa2UKKyAgICAgYSBmaWxlIHVwbG9hZCBidXQgc3RpbGwgdXNpbmcgdGhlIGNhbGxiYWNrICovCisKKyAgcG9vaDIucmVhZHB0ciA9IGRhdGE7CisgIHBvb2gyLnNpemVsZWZ0ID0gc3RybGVuKGRhdGEpOworCisgIC8qIEZpbGwgaW4gdGhlIGZpbGUgdXBsb2FkIGZpZWxkICovCisgIGZvcm1yYyA9IGN1cmxfZm9ybWFkZCgmZm9ybXBvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAmbGFzdHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlOQU1FLCAiY2FsbGJhY2tkYXRhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX1NUUkVBTSwgJnBvb2gyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09OVEVOVFNMRU5HVEgsIHBvb2gyLnNpemVsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fRU5EKTsKKworICBpZihmb3JtcmMpCisgICAgcHJpbnRmKCJjdXJsX2Zvcm1hZGQoMSkgPSAlZFxuIiwgKGludClmb3JtcmMpOworCisgIC8qIEZpbGwgaW4gdGhlIGZpbGVuYW1lIGZpZWxkICovCisgIGZvcm1yYyA9IGN1cmxfZm9ybWFkZCgmZm9ybXBvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAmbGFzdHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlOQU1FLCAiZmlsZW5hbWUiLAorI2lmZGVmIENVUkxfRE9FU19DT05WRVJTSU9OUworICAgICAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgcmVwcmVzZW50YXRpb24gd2l0aCBlc2NhcGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlcyBmb3Igbm9uLUFTQ0lJIHBsYXRmb3JtcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4NzBceDZmXHg3M1x4NzRceDY5XHg3NFx4MzJceDJlXHg2MyIsCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLCAicG9zdGl0Mi5jIiwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fRU5EKTsKKworICBpZihmb3JtcmMpCisgICAgcHJpbnRmKCJjdXJsX2Zvcm1hZGQoMikgPSAlZFxuIiwgKGludClmb3JtcmMpOworCisgIC8qIEZpbGwgaW4gYSBzdWJtaXQgZmllbGQgdG9vICovCisgIGZvcm1yYyA9IGN1cmxfZm9ybWFkZCgmZm9ybXBvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAmbGFzdHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlOQU1FLCAic3VibWl0IiwKKyNpZmRlZiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIHJlcHJlc2VudGF0aW9uIHdpdGggZXNjYXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZXMgZm9yIG5vbi1BU0NJSSBwbGF0Zm9ybXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUywgIlx4NzNceDY1XHg2ZVx4NjQiLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUywgInNlbmQiLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9FTkQpOworCisgIGlmKGZvcm1yYykKKyAgICBwcmludGYoImN1cmxfZm9ybWFkZCgzKSA9ICVkXG4iLCAoaW50KWZvcm1yYyk7CisKKyAgZm9ybXJjID0gY3VybF9mb3JtYWRkKCZmb3JtcG9zdCwgJmxhc3RwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgInNvbWVuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0JVRkZFUiwgInNvbWVmaWxlLnR4dCIsCisgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9CVUZGRVJQVFIsICJibGFoIGJsYWgiLAorICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQlVGRkVSTEVOR1RILCA5LAorICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fRU5EKTsKKworICBpZihmb3JtcmMpCisgICAgcHJpbnRmKCJjdXJsX2Zvcm1hZGQoNCkgPSAlZFxuIiwgKGludClmb3JtcmMpOworCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2Zvcm1mcmVlKGZvcm1wb3N0KTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIC8qIEZpcnN0IHNldCB0aGUgVVJMIHRoYXQgaXMgYWJvdXQgdG8gcmVjZWl2ZSBvdXIgUE9TVC4gKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisKKyAgLyogTm93IHNwZWNpZnkgd2Ugd2FudCB0byBQT1NUIGRhdGEgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NULCAxTCk7CisKKyAgLyogU2V0IHRoZSBleHBlY3RlZCBQT1NUIHNpemUgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFLCAobG9uZylwb29oLnNpemVsZWZ0KTsKKworICAvKiB3ZSB3YW50IHRvIHVzZSBvdXIgb3duIHJlYWQgZnVuY3Rpb24gKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFERlVOQ1RJT04sIHJlYWRfY2FsbGJhY2spOworCisgIC8qIHNlbmQgYSBtdWx0aS1wYXJ0IGZvcm1wb3N0ICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSFRUUFBPU1QsIGZvcm1wb3N0KTsKKworICAvKiBnZXQgdmVyYm9zZSBkZWJ1ZyBvdXRwdXQgcGxlYXNlICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgIC8qIGluY2x1ZGUgaGVhZGVycyBpbiB0aGUgb3V0cHV0ICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSLCAxTCk7CisKKyAgLyogUGVyZm9ybSB0aGUgcmVxdWVzdCwgcmVzIHdpbGwgZ2V0IHRoZSByZXR1cm4gY29kZSAqLworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKwordGVzdF9jbGVhbnVwOgorCisgIC8qIGFsd2F5cyBjbGVhbnVwICovCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgLyogbm93IGNsZWFudXAgdGhlIGZvcm1wb3N0IGNoYWluICovCisgIGN1cmxfZm9ybWZyZWUoZm9ybXBvc3QpOworCisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU1NS5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWE4MWJmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NTUuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgdGVzdCBjYXNlIGlzIHN1cHBvc2VkIHRvIGJlIGlkZW50aWNhbCB0byA1NDcgZXhjZXB0IHRoYXQgdGhpcyB1c2VzIHRoZQorICogbXVsdGkgaW50ZXJmYWNlIGFuZCA1NDcgaXMgZWFzeSBpbnRlcmZhY2UuCisgKgorICogYXJndjEgPSBVUkwKKyAqIGFyZ3YyID0gcHJveHkKKyAqIGFyZ3YzID0gcHJveHl1c2VyOnBhc3N3b3JkCisgKi8KKworI2luY2x1ZGUgInRlc3QuaCIKKyNpbmNsdWRlICJ0ZXN0dXRpbC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBURVNUX0hBTkdfVElNRU9VVCA2MCAqIDEwMDAKKworI2RlZmluZSBVUExPQURUSElTICJ0aGlzIGlzIHRoZSBibHVyYiB3ZSB3YW50IHRvIHVwbG9hZFxuIgorCitzdGF0aWMgc2l6ZV90IHJlYWRjYWxsYmFjayh2b2lkICAqcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbm1lbWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRwKQoreworICBpbnQgKmNvdW50ZXIgPSAoaW50ICopY2xpZW50cDsKKworICBpZigqY291bnRlcikgeworICAgIC8qIG9ubHkgZG8gdGhpcyBvbmNlIGFuZCB0aGVuIHJlcXVpcmUgYSBjbGVhcmluZyBvZiB0aGlzICovCisgICAgZnByaW50ZihzdGRlcnIsICJSRUFEIEFMUkVBRFkgRE9ORSFcbiIpOworICAgIHJldHVybiAwOworICB9CisgICgqY291bnRlcikrKzsgLyogYnVtcCAqLworCisgIGlmKHNpemUgKiBubWVtYiA+IHN0cmxlbihVUExPQURUSElTKSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiUkVBRCFcbiIpOworICAgIHN0cmNweShwdHIsIFVQTE9BRFRISVMpOworICAgIHJldHVybiBzdHJsZW4oVVBMT0FEVEhJUyk7CisgIH0KKyAgZnByaW50ZihzdGRlcnIsICJSRUFEIE5PVCBGSU5FIVxuIik7CisgIHJldHVybiAwOworfQorc3RhdGljIGN1cmxpb2VyciBpb2N0bGNhbGxiYWNrKENVUkwgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudHApCit7CisgIGludCAqY291bnRlciA9IChpbnQgKiljbGllbnRwOworICAodm9pZCloYW5kbGU7IC8qIHVudXNlZCAqLworICBpZihjbWQgPT0gQ1VSTElPQ01EX1JFU1RBUlRSRUFEKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJSRVdJTkQhXG4iKTsKKyAgICAqY291bnRlciA9IDA7IC8qIGNsZWFyIGNvdW50ZXIgdG8gbWFrZSB0aGUgcmVhZCBjYWxsYmFjayByZXN0YXJ0ICovCisgIH0KKyAgcmV0dXJuIENVUkxJT0VfT0s7Cit9CisKKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBpbnQgcmVzID0gMDsKKyAgQ1VSTCAqY3VybCA9IE5VTEw7CisgIGludCBjb3VudGVyPTA7CisgIENVUkxNICptID0gTlVMTDsKKyAgaW50IHJ1bm5pbmc9MTsKKworICBzdGFydF90ZXN0X3RpbWluZygpOworCisgIGdsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisKKyAgZWFzeV9pbml0KGN1cmwpOworCisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKyAgZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKworICAvKiByZWFkIHRoZSBQT1NUIGRhdGEgZnJvbSBhIGNhbGxiYWNrICovCisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU9DVExGVU5DVElPTiwgaW9jdGxjYWxsYmFjayk7CisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU9DVExEQVRBLCAmY291bnRlcik7CisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCByZWFkY2FsbGJhY2spOworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQUREQVRBLCAmY291bnRlcik7CisgIC8qIFdlIENBTk5PVCBkbyB0aGUgUE9TVCBmaW5lIHdpdGhvdXQgc2V0dGluZyB0aGUgc2l6ZSAob3IgY2hvb3NlIGNodW5rZWQpISAqLworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIHN0cmxlbihVUExPQURUSElTKSk7CisKKyAgZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NULCAxTCk7CisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgIC8qIENvbnZlcnQgdGhlIFBPU1QgZGF0YSB0byBBU0NJSS4gKi8KKyAgZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9UUkFOU0ZFUlRFWFQsIDFMKTsKKyNlbmRpZgorICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST1hZLCBsaWJ0ZXN0X2FyZzIpOworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST1hZVVNFUlBXRCwgbGlidGVzdF9hcmczKTsKKyAgZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QUk9YWUFVVEgsCisgICAgICAgICAgICAgICAgICAgKGxvbmcpIChDVVJMQVVUSF9OVExNIHwgQ1VSTEFVVEhfRElHRVNUIHwgQ1VSTEFVVEhfQkFTSUMpICk7CisKKyAgbXVsdGlfaW5pdChtKTsKKworICBtdWx0aV9hZGRfaGFuZGxlKG0sIGN1cmwpOworCisgIHdoaWxlIChydW5uaW5nKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICBmZF9zZXQgZmRyZWFkLCBmZHdyaXRlLCBmZGV4Y2VwOworICAgIGludCBtYXhmZCA9IC05OTsKKworICAgIHRpbWVvdXQudHZfc2VjID0gMDsKKyAgICB0aW1lb3V0LnR2X3VzZWMgPSAxMDAwMDBMOyAvKiAxMDAgbXMgKi8KKworICAgIG11bHRpX3BlcmZvcm0obSwgJnJ1bm5pbmcpOworCisgICAgYWJvcnRfb25fdGVzdF90aW1lb3V0KCk7CisKKyNpZmRlZiBUUEYKKyAgICBzbGVlcCgxKTsgLyogYXZvaWQgY3RsLTEwIGR1bXAgKi8KKyNlbmRpZgorCisgICAgaWYoIXJ1bm5pbmcpCisgICAgICBicmVhazsgLyogZG9uZSAqLworCisgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICBGRF9aRVJPKCZmZHdyaXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKworICAgIG11bHRpX2Zkc2V0KG0sICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJm1heGZkKTsKKworICAgIC8qIEF0IHRoaXMgcG9pbnQsIG1heGZkIGlzIGd1YXJhbnRlZWQgdG8gYmUgZ3JlYXRlciBvciBlcXVhbCB0aGFuIC0xLiAqLworCisgICAgc2VsZWN0X3Rlc3QobWF4ZmQrMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmdGltZW91dCk7CisKKyAgICBhYm9ydF9vbl90ZXN0X3RpbWVvdXQoKTsKKyAgfQorCit0ZXN0X2NsZWFudXA6CisKKyAgLyogcHJvcGVyIGNsZWFudXAgc2VxdWVuY2UgLSB0eXBlIFBBICovCisKKyAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKG0sIGN1cmwpOworICBjdXJsX211bHRpX2NsZWFudXAobSk7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIHJlczsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NTYuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTU2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkYTg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTU2LmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qIEZvciBXaW5kb3dzLCBtYWlubHkgKG1heSBiZSBtb3ZlZCBpbiBhIGNvbmZpZyBmaWxlPykgKi8KKyNpZm5kZWYgU1RESU5fRklMRU5PCisgICNkZWZpbmUgU1RESU5fRklMRU5PIDAKKyNlbmRpZgorI2lmbmRlZiBTVERPVVRfRklMRU5PCisgICNkZWZpbmUgU1RET1VUX0ZJTEVOTyAxCisjZW5kaWYKKyNpZm5kZWYgU1RERVJSX0ZJTEVOTworICAjZGVmaW5lIFNUREVSUl9GSUxFTk8gMgorI2VuZGlmCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTGNvZGUgcmVzOworICBDVVJMICpjdXJsOworCisgIGlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZ2xvYmFsX2luaXQoKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DT05ORUNUX09OTFksIDFMKTsKKworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKworICBpZighcmVzKSB7CisgICAgLyogd2UgYXJlIGNvbm5lY3RlZCwgbm93IGdldCBhIEhUVFAgZG9jdW1lbnQgdGhlIHJhdyB3YXkgKi8KKyAgICBjb25zdCBjaGFyICpyZXF1ZXN0ID0KKyNpZmRlZiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMKKyAgICAgIC8qIEFTQ0lJIHJlcHJlc2VudGF0aW9uIHdpdGggZXNjYXBlIHNlcXVlbmNlcyBmb3Igbm9uLUFTQ0lJIHBsYXRmb3JtcyAqLworICAgICAgIlx4NDdceDQ1XHg1NFx4MjBceDJmXHgzNVx4MzVceDM2XHgyMFx4NDhceDU0XHg1NFx4NTBceDJmXHgzMVx4MmUiCisgICAgICAiXHgzMlx4MGRceDBhXHg0OFx4NmZceDczXHg3NFx4M2FceDIwXHg2ZVx4NjlceDZlXHg2YVx4NjFceDBkXHgwYSIKKyAgICAgICJceDBkXHgwYSI7CisjZWxzZQorICAgICAgIkdFVCAvNTU2IEhUVFAvMS4yXHJcbiIKKyAgICAgICJIb3N0OiBuaW5qYVxyXG5cclxuIjsKKyNlbmRpZgorICAgIHNpemVfdCBpb2xlbjsKKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKworICAgIHJlcyA9IGN1cmxfZWFzeV9zZW5kKGN1cmwsIHJlcXVlc3QsIHN0cmxlbihyZXF1ZXN0KSwgJmlvbGVuKTsKKworICAgIGlmKCFyZXMpIHsKKyAgICAgIC8qIHdlIGFzc3VtZSB0aGF0IHNlbmRpbmcgYWx3YXlzIHdvcmsgKi8KKyAgICAgIHNpemVfdCB0b3RhbD0wOworCisgICAgICBkbyB7CisgICAgICAgIC8qIGJ1c3ktcmVhZCBsaWtlIGNyYXp5ICovCisgICAgICAgIHJlcyA9IGN1cmxfZWFzeV9yZWN2KGN1cmwsIGJ1ZiwgMTAyNCwgJmlvbGVuKTsKKworI2lmZGVmIFRQRgorICAgICAgICBzbGVlcCgxKTsgLyogYXZvaWQgY3RsLTEwIGR1bXAgKi8KKyNlbmRpZgorCisgICAgICAgIGlmKGlvbGVuKSB7CisgICAgICAgICAgLyogc2VuZCByZWNlaXZlZCBzdHVmZiB0byBzdGRvdXQgKi8KKyAgICAgICAgICBpZighd3JpdGUoU1RET1VUX0ZJTEVOTywgYnVmLCBpb2xlbikpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB0b3RhbCArPSBpb2xlbjsKKworICAgICAgfSB3aGlsZSgoKHJlcyA9PSBDVVJMRV9PSykgfHwgKHJlcyA9PSBDVVJMRV9BR0FJTikpICYmICh0b3RhbCA8IDEyOSkpOworICAgIH0KKyAgfQorCit0ZXN0X2NsZWFudXA6CisKKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gKGludClyZXM7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTU3LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU1Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjM2JjYWUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU1Ny5jCkBAIC0wLDAgKzEsMTQwMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gbWluaW1hbGx5IGV4ZXJjaXNlIGxpYmN1cmwncyBpbnRlcm5hbAorICogY3VybF9tKnByaW50ZiBmb3JtYXR0aW5nIGNhcGFiaWxpdGllcyBhbmQgaGFuZGxpbmcgb2Ygc29tZSBkYXRhIHR5cGVzLgorICovCisKKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKworI2lmIChDVVJMX1NJWkVPRl9DVVJMX09GRl9UID4gQ1VSTF9TSVpFT0ZfTE9ORykKKyMgIGRlZmluZSBNUFJOVF9TVUZGSVhfQ1VSTF9PRkZfVCAgTEwKKyNlbHNlCisjICBkZWZpbmUgTVBSTlRfU1VGRklYX0NVUkxfT0ZGX1QgIEwKKyNlbmRpZgorCisKKyNpZmRlZiBDVVJMX0lTT0NQUAorIyAgZGVmaW5lIE1QUk5UX09GRl9UX0NfSEVMUEVSMihWYWwsU3VmZml4KSBWYWwgIyMgU3VmZml4CisjZWxzZQorIyAgZGVmaW5lIE1QUk5UX09GRl9UX0NfSEVMUEVSMihWYWwsU3VmZml4KSBWYWwvKiovU3VmZml4CisjZW5kaWYKKyNkZWZpbmUgTVBSTlRfT0ZGX1RfQ19IRUxQRVIxKFZhbCxTdWZmaXgpIE1QUk5UX09GRl9UX0NfSEVMUEVSMihWYWwsU3VmZml4KQorI2RlZmluZSBNUFJOVF9PRkZfVF9DKFZhbCkgIE1QUk5UX09GRl9UX0NfSEVMUEVSMShWYWwsTVBSTlRfU1VGRklYX0NVUkxfT0ZGX1QpCisKKworI2RlZmluZSBCVUZTWiAgICAyNTYKKyNkZWZpbmUgVVNIT1JUX1RFU1RTX0FSUlNaIDEgKyAxMDAKKyNkZWZpbmUgU1NIT1JUX1RFU1RTX0FSUlNaIDEgKyAxMDAKKyNkZWZpbmUgVUlOVF9URVNUU19BUlJTWiAgIDEgKyAxMDAKKyNkZWZpbmUgU0lOVF9URVNUU19BUlJTWiAgIDEgKyAxMDAKKyNkZWZpbmUgVUxPTkdfVEVTVFNfQVJSU1ogIDEgKyAxMDAKKyNkZWZpbmUgU0xPTkdfVEVTVFNfQVJSU1ogIDEgKyAxMDAKKyNkZWZpbmUgQ09GRlRfVEVTVFNfQVJSU1ogIDEgKyAxMDAKKworCitzdHJ1Y3QgdW5zc2hvcnRfc3QgeworICB1bnNpZ25lZCBzaG9ydCBudW07ICAgLyogdW5zaWduZWQgc2hvcnQgICovCisgIGNvbnN0IGNoYXIgKmV4cGVjdGVkOyAvKiBleHBlY3RlZCBzdHJpbmcgKi8KKyAgY2hhciByZXN1bHRbQlVGU1pdOyAgIC8qIHJlc3VsdCBzdHJpbmcgICAqLworfTsKKworCitzdHJ1Y3Qgc2lnc2hvcnRfc3QgeworICBzaG9ydCBudW07ICAgICAgICAgICAgLyogc2lnbmVkIHNob3J0ICAgICovCisgIGNvbnN0IGNoYXIgKmV4cGVjdGVkOyAvKiBleHBlY3RlZCBzdHJpbmcgKi8KKyAgY2hhciByZXN1bHRbQlVGU1pdOyAgIC8qIHJlc3VsdCBzdHJpbmcgICAqLworfTsKKworCitzdHJ1Y3QgdW5zaW50X3N0IHsKKyAgdW5zaWduZWQgaW50IG51bTsgICAgIC8qIHVuc2lnbmVkIGludCAgICAqLworICBjb25zdCBjaGFyICpleHBlY3RlZDsgLyogZXhwZWN0ZWQgc3RyaW5nICovCisgIGNoYXIgcmVzdWx0W0JVRlNaXTsgICAvKiByZXN1bHQgc3RyaW5nICAgKi8KK307CisKKworc3RydWN0IHNpZ2ludF9zdCB7CisgIGludCBudW07ICAgICAgICAgICAgICAvKiBzaWduZWQgaW50ICAgICAgKi8KKyAgY29uc3QgY2hhciAqZXhwZWN0ZWQ7IC8qIGV4cGVjdGVkIHN0cmluZyAqLworICBjaGFyIHJlc3VsdFtCVUZTWl07ICAgLyogcmVzdWx0IHN0cmluZyAgICovCit9OworCisKK3N0cnVjdCB1bnNsb25nX3N0IHsKKyAgdW5zaWduZWQgbG9uZyBudW07ICAgIC8qIHVuc2lnbmVkIGxvbmcgICAqLworICBjb25zdCBjaGFyICpleHBlY3RlZDsgLyogZXhwZWN0ZWQgc3RyaW5nICovCisgIGNoYXIgcmVzdWx0W0JVRlNaXTsgICAvKiByZXN1bHQgc3RyaW5nICAgKi8KK307CisKKworc3RydWN0IHNpZ2xvbmdfc3QgeworICBsb25nIG51bTsgICAgICAgICAgICAgLyogc2lnbmVkIGxvbmcgICAgICovCisgIGNvbnN0IGNoYXIgKmV4cGVjdGVkOyAvKiBleHBlY3RlZCBzdHJpbmcgKi8KKyAgY2hhciByZXN1bHRbQlVGU1pdOyAgIC8qIHJlc3VsdCBzdHJpbmcgICAqLworfTsKKworCitzdHJ1Y3QgY3VybG9mZl9zdCB7CisgIGN1cmxfb2ZmX3QgbnVtOyAgICAgICAvKiBjdXJsX29mZl90ICAgICAgKi8KKyAgY29uc3QgY2hhciAqZXhwZWN0ZWQ7IC8qIGV4cGVjdGVkIHN0cmluZyAqLworICBjaGFyIHJlc3VsdFtCVUZTWl07ICAgLyogcmVzdWx0IHN0cmluZyAgICovCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdW5zc2hvcnRfc3QgdXNfdGVzdFtVU0hPUlRfVEVTVFNfQVJSU1pdOworc3RhdGljIHN0cnVjdCBzaWdzaG9ydF9zdCBzc190ZXN0W1NTSE9SVF9URVNUU19BUlJTWl07CitzdGF0aWMgc3RydWN0IHVuc2ludF9zdCAgIHVpX3Rlc3RbVUlOVF9URVNUU19BUlJTWl07CitzdGF0aWMgc3RydWN0IHNpZ2ludF9zdCAgIHNpX3Rlc3RbU0lOVF9URVNUU19BUlJTWl07CitzdGF0aWMgc3RydWN0IHVuc2xvbmdfc3QgIHVsX3Rlc3RbVUxPTkdfVEVTVFNfQVJSU1pdOworc3RhdGljIHN0cnVjdCBzaWdsb25nX3N0ICBzbF90ZXN0W1NMT05HX1RFU1RTX0FSUlNaXTsKK3N0YXRpYyBzdHJ1Y3QgY3VybG9mZl9zdCAgY29fdGVzdFtDT0ZGVF9URVNUU19BUlJTWl07CisKKworc3RhdGljIGludCB0ZXN0X3Vuc2lnbmVkX3Nob3J0X2Zvcm1hdHRpbmcodm9pZCkKK3sKKyAgaW50IGksIGo7CisgIGludCBudW1fdXNob3J0X3Rlc3RzOworICBpbnQgZmFpbGVkID0gMDsKKworI2lmIChTSVpFT0ZfU0hPUlQgPT0gMSkKKworICBpPTE7IHVzX3Rlc3RbaV0ubnVtID0gMHhGRlU7IHVzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjU2IjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4RjBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjI0MCI7CisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweDBGVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICIxNSI7CisKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4RTBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjIyNCI7CisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweDBFVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICIxNCI7CisKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4QzBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjE5MiI7CisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweDBDVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICIxMiI7CisKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDFVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjEiOworICBpKys7IHVzX3Rlc3RbaV0ubnVtID0gMHgwMFU7IHVzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMCI7CisKKyAgbnVtX3VzaG9ydF90ZXN0cyA9IGk7CisKKyNlbGlmIChTSVpFT0ZfU0hPUlQgPT0gMikKKworICBpPTE7IHVzX3Rlc3RbaV0ubnVtID0gMHhGRkZGVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICI2NTUzNSI7CisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweEZGMDBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjY1MjgwIjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDBGRlU7IHVzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjU1IjsKKworICBpKys7IHVzX3Rlc3RbaV0ubnVtID0gMHhGMDAwVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICI2MTQ0MCI7CisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweDBGMDBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjM4NDAiOworICBpKys7IHVzX3Rlc3RbaV0ubnVtID0gMHgwMEYwVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICIyNDAiOworICBpKys7IHVzX3Rlc3RbaV0ubnVtID0gMHgwMDBGVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICIxNSI7CisKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4QzAwMFU7IHVzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDkxNTIiOworICBpKys7IHVzX3Rlc3RbaV0ubnVtID0gMHgwQzAwVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICIzMDcyIjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDBDMFU7IHVzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTkyIjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDAwQ1U7IHVzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTIiOworCisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweDAwMDFVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjEiOworICBpKys7IHVzX3Rlc3RbaV0ubnVtID0gMHgwMDAwVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICIwIjsKKworICBudW1fdXNob3J0X3Rlc3RzID0gaTsKKworI2VsaWYgKFNJWkVPRl9TSE9SVCA9PSA0KQorCisgIGk9MTsgdXNfdGVzdFtpXS5udW0gPSAweEZGRkZGRkZGVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICI0Mjk0OTY3Mjk1IjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4RkZGRjAwMDBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjQyOTQ5MDE3NjAiOworICBpKys7IHVzX3Rlc3RbaV0ubnVtID0gMHgwMDAwRkZGRlU7IHVzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNjU1MzUiOworCisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweEZGMDAwMDAwVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICI0Mjc4MTkwMDgwIjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDBGRjAwMDBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjE2NzExNjgwIjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDAwMEZGMDBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjY1MjgwIjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDAwMDAwRkZVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjI1NSI7CisKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4RjAwMDAwMDBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjQwMjY1MzE4NDAiOworICBpKys7IHVzX3Rlc3RbaV0ubnVtID0gMHgwRjAwMDAwMFU7IHVzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjUxNjU4MjQwIjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDBGMDAwMDBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjE1NzI4NjQwIjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDAwRjAwMDBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjk4MzA0MCI7CisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweDAwMDBGMDAwVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICI2MTQ0MCI7CisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweDAwMDAwRjAwVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICIzODQwIjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDAwMDAwRjBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjI0MCI7CisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweDAwMDAwMDBGVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICIxNSI7CisKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4QzAwMDAwMDBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjMyMjEyMjU0NzIiOworICBpKys7IHVzX3Rlc3RbaV0ubnVtID0gMHgwQzAwMDAwMFU7IHVzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjAxMzI2NTkyIjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDBDMDAwMDBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjEyNTgyOTEyIjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDAwQzAwMDBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjc4NjQzMiI7CisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweDAwMDBDMDAwVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICI0OTE1MiI7CisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweDAwMDAwQzAwVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICIzMDcyIjsKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDAwMDAwQzBVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjE5MiI7CisgIGkrKzsgdXNfdGVzdFtpXS5udW0gPSAweDAwMDAwMDBDVTsgdXNfdGVzdFtpXS5leHBlY3RlZCA9ICIxMiI7CisKKyAgaSsrOyB1c190ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDFVOyB1c190ZXN0W2ldLmV4cGVjdGVkID0gIjEiOworICBpKys7IHVzX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMFU7IHVzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMCI7CisKKyAgbnVtX3VzaG9ydF90ZXN0cyA9IGk7CisKKyNlbmRpZgorCisgIGZvcihpPTE7IGk8PW51bV91c2hvcnRfdGVzdHM7IGkrKykgeworCisgICAgZm9yKGo9MDsgajxCVUZTWjsgaisrKQorICAgICAgdXNfdGVzdFtpXS5yZXN1bHRbal0gPSAnWCc7CisgICAgdXNfdGVzdFtpXS5yZXN1bHRbQlVGU1otMV0gPSAnXDAnOworCisgICAgKHZvaWQpY3VybF9tc3ByaW50Zih1c190ZXN0W2ldLnJlc3VsdCwgIiVodSIsIHVzX3Rlc3RbaV0ubnVtKTsKKworICAgIGlmKG1lbWNtcCh1c190ZXN0W2ldLnJlc3VsdCwKKyAgICAgICAgICAgICAgIHVzX3Rlc3RbaV0uZXhwZWN0ZWQsCisgICAgICAgICAgICAgICBzdHJsZW4odXNfdGVzdFtpXS5leHBlY3RlZCkpKSB7CisgICAgICBwcmludGYoInVuc2lnbmVkIHNob3J0IHRlc3QgIyUuMmQ6IEZhaWxlZCAoRXhwZWN0ZWQ6ICVzIEdvdDogJXMpXG4iLAorICAgICAgICAgICAgIGksIHVzX3Rlc3RbaV0uZXhwZWN0ZWQsIHVzX3Rlc3RbaV0ucmVzdWx0KTsKKyAgICAgIGZhaWxlZCsrOworICAgIH0KKworICB9CisKKyAgaWYoIWZhaWxlZCkKKyAgICBwcmludGYoIkFsbCBjdXJsX21wcmludGYoKSB1bnNpZ25lZCBzaG9ydCB0ZXN0cyBPSyFcbiIpOworICBlbHNlCisgICAgcHJpbnRmKCJTb21lIGN1cmxfbXByaW50ZigpIHVuc2lnbmVkIHNob3J0IHRlc3RzIEZhaWxlZCFcbiIpOworCisgIHJldHVybiBmYWlsZWQ7Cit9CisKKworc3RhdGljIGludCB0ZXN0X3NpZ25lZF9zaG9ydF9mb3JtYXR0aW5nKHZvaWQpCit7CisgIGludCBpLCBqOworICBpbnQgbnVtX3NzaG9ydF90ZXN0czsKKyAgaW50IGZhaWxlZCA9IDA7CisKKyNpZiAoU0laRU9GX1NIT1JUID09IDEpCisKKyAgaT0xOyBzc190ZXN0W2ldLm51bSA9IDB4N0Y7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTI3IjsKKworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHg3MDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICIxMTIiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHgwNzsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICI3IjsKKworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHg1MDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICI4MCI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDA1OyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjUiOworCisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAxOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjEiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHgwMDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICIwIjsKKworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4N0YgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEyOCI7CisKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDcwIC0xOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIi0xMTMiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDcgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgiOworCisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAtMHg1MCAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItODEiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDUgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTYiOworCisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAgMHgwMCAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItMSI7CisKKyAgbnVtX3NzaG9ydF90ZXN0cyA9IGk7CisKKyNlbGlmIChTSVpFT0ZfU0hPUlQgPT0gMikKKworICBpPTE7IHNzX3Rlc3RbaV0ubnVtID0gMHg3RkZGOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjMyNzY3IjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IDB4N0ZGRTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICIzMjc2NiI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDdGRkQ7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzI3NjUiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHg3RjAwOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjMyNTEyIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IDB4MDdGMDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICIyMDMyIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IDB4MDA3Rjsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICIxMjciOworCisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDcwMDA7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjg2NzIiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHgwNzAwOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjE3OTIiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHgwMDcwOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjExMiI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwMDc7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNyI7CisKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IDB4NTAwMDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICIyMDQ4MCI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDA1MDA7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTI4MCI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwNTA7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiODAiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHgwMDA1OyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjUiOworCisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwMDE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMSI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwMDA7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMCI7CisKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDdGRkYgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTMyNzY4IjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDdGRkUgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTMyNzY3IjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDdGRkQgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTMyNzY2IjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDdGMDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTMyNTEzIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDA3RjAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIwMzMiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDA3RiAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItMTI4IjsKKworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4NzAwMCAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItMjg2NzMiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDcwMCAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItMTc5MyI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAtMHgwMDcwIC0xOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIi0xMTMiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDAwNyAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItOCI7CisKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDUwMDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIwNDgxIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDA1MDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEyODEiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDA1MCAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItODEiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDAwNSAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItNiI7CisKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9ICAweDAwMDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEiOworCisgIG51bV9zc2hvcnRfdGVzdHMgPSBpOworCisjZWxpZiAoU0laRU9GX1NIT1JUID09IDQpCisKKyAgaT0xOyBzc190ZXN0W2ldLm51bSA9IDB4N0ZGRkZGRkY7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjE0NzQ4MzY0NyI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDdGRkZGRkZFOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjIxNDc0ODM2NDYiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHg3RkZGRkZGRDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICIyMTQ3NDgzNjQ1IjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IDB4N0ZGRjAwMDA7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjE0NzQxODExMiI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwMDA3RkZGOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjMyNzY3IjsKKworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHg3RjAwMDAwMDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICIyMTMwNzA2NDMyIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IDB4MDA3RjAwMDA7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiODMyMzA3MiI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwMDA3RjAwOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjMyNTEyIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IDB4MDAwMDAwN0Y7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTI3IjsKKworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHg3MDAwMDAwMDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICIxODc5MDQ4MTkyIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IDB4MDcwMDAwMDA7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTE3NDQwNTEyIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IDB4MDA3MDAwMDA7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNzM0MDAzMiI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwMDcwMDAwOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjQ1ODc1MiI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwMDA3MDAwOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjI4NjcyIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IDB4MDAwMDA3MDA7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTc5MiI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwMDAwMDcwOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjExMiI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwMDAwMDA3OyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjciOworCisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDUwMDAwMDAwOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjEzNDIxNzcyODAiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHgwNTAwMDAwMDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICI4Mzg4NjA4MCI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwNTAwMDAwOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjUyNDI4ODAiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHgwMDA1MDAwMDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICIzMjc2ODAiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHgwMDAwNTAwMDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICIyMDQ4MCI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwMDAwNTAwOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjEyODAiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDA1MDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICI4MCI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwMDAwMDA1OyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjUiOworCisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAxOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIjEiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICIwIjsKKworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRkZGRkYgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxNDc0ODM2NDgiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRkZGRkUgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxNDc0ODM2NDciOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRkZGRkQgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxNDc0ODM2NDYiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRjAwMDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxNDc0MTgxMTMiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDdGRkYgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTMyNzY4IjsKKworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4N0YwMDAwMDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxMzA3MDY0MzMiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDA3RjAwMDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgzMjMwNzMiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDdGMDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTMyNTEzIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDAwMDAwMDdGIC0xOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIi0xMjgiOworCisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAtMHg3MDAwMDAwMCAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItMTg3OTA0ODE5MyI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAtMHgwNzAwMDAwMCAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItMTE3NDQwNTEzIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDAwNzAwMDAwIC0xOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIi03MzQwMDMzIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDAwMDcwMDAwIC0xOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIi00NTg3NTMiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDcwMDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTI4NjczIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDAwMDAwNzAwIC0xOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIi0xNzkzIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDAwMDAwMDcwIC0xOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIi0xMTMiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDcgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgiOworCisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAtMHg1MDAwMDAwMCAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItMTM0MjE3NzI4MSI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAtMHgwNTAwMDAwMCAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItODM4ODYwODEiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDA1MDAwMDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTUyNDI4ODEiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDAwNTAwMDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTMyNzY4MSI7CisgIGkrKzsgc3NfdGVzdFtpXS5udW0gPSAtMHgwMDAwNTAwMCAtMTsgc3NfdGVzdFtpXS5leHBlY3RlZCA9ICItMjA0ODEiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDA1MDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEyODEiOworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwNTAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgxIjsKKyAgaSsrOyBzc190ZXN0W2ldLm51bSA9IC0weDAwMDAwMDA1IC0xOyBzc190ZXN0W2ldLmV4cGVjdGVkID0gIi02IjsKKworICBpKys7IHNzX3Rlc3RbaV0ubnVtID0gIDB4MDAwMDAwMDAgLTE7IHNzX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEiOworCisgIG51bV9zc2hvcnRfdGVzdHMgPSBpOworCisjZW5kaWYKKworICBmb3IoaT0xOyBpPD1udW1fc3Nob3J0X3Rlc3RzOyBpKyspIHsKKworICAgIGZvcihqPTA7IGo8QlVGU1o7IGorKykKKyAgICAgIHNzX3Rlc3RbaV0ucmVzdWx0W2pdID0gJ1gnOworICAgIHNzX3Rlc3RbaV0ucmVzdWx0W0JVRlNaLTFdID0gJ1wwJzsKKworICAgICh2b2lkKWN1cmxfbXNwcmludGYoc3NfdGVzdFtpXS5yZXN1bHQsICIlaGQiLCBzc190ZXN0W2ldLm51bSk7CisKKyAgICBpZihtZW1jbXAoc3NfdGVzdFtpXS5yZXN1bHQsCisgICAgICAgICAgICAgIHNzX3Rlc3RbaV0uZXhwZWN0ZWQsCisgICAgICAgICAgICAgIHN0cmxlbihzc190ZXN0W2ldLmV4cGVjdGVkKSkpIHsKKyAgICAgIHByaW50Zigic2lnbmVkIHNob3J0IHRlc3QgIyUuMmQ6IEZhaWxlZCAoRXhwZWN0ZWQ6ICVzIEdvdDogJXMpXG4iLAorICAgICAgICAgICAgIGksIHNzX3Rlc3RbaV0uZXhwZWN0ZWQsIHNzX3Rlc3RbaV0ucmVzdWx0KTsKKyAgICAgIGZhaWxlZCsrOworICAgIH0KKworICB9CisKKyAgaWYoIWZhaWxlZCkKKyAgICBwcmludGYoIkFsbCBjdXJsX21wcmludGYoKSBzaWduZWQgc2hvcnQgdGVzdHMgT0shXG4iKTsKKyAgZWxzZQorICAgIHByaW50ZigiU29tZSBjdXJsX21wcmludGYoKSBzaWduZWQgc2hvcnQgdGVzdHMgRmFpbGVkIVxuIik7CisKKyAgcmV0dXJuIGZhaWxlZDsKK30KKworCitzdGF0aWMgaW50IHRlc3RfdW5zaWduZWRfaW50X2Zvcm1hdHRpbmcodm9pZCkKK3sKKyAgaW50IGksIGo7CisgIGludCBudW1fdWludF90ZXN0czsKKyAgaW50IGZhaWxlZCA9IDA7CisKKyNpZiAoU0laRU9GX0lOVCA9PSAyKQorCisgIGk9MTsgdWlfdGVzdFtpXS5udW0gPSAweEZGRkZVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjY1NTM1IjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4RkYwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNjUyODAiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMEZGVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIyNTUiOworCisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweEYwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjYxNDQwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MEYwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzg0MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwRjBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjI0MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMEZVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjE1IjsKKworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHhDMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICI0OTE1MiI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDBDMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjMwNzIiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMEMwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIxOTIiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDBDVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIxMiI7CisKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMVU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMSI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjAiOworCisgIG51bV91aW50X3Rlc3RzID0gaTsKKworI2VsaWYgKFNJWkVPRl9JTlQgPT0gNCkKKworICBpPTE7IHVpX3Rlc3RbaV0ubnVtID0gMHhGRkZGRkZGRlU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDI5NDk2NzI5NSI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweEZGRkYwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICI0Mjk0OTAxNzYwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMEZGRkZVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjY1NTM1IjsKKworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHhGRjAwMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDI3ODE5MDA4MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwRkYwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIxNjcxMTY4MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDBGRjAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICI2NTI4MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMEZGVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIyNTUiOworCisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweEYwMDAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICI0MDI2NTMxODQwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MEYwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjI1MTY1ODI0MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwRjAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIxNTcyODY0MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMEYwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICI5ODMwNDAiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwRjAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNjE0NDAiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMEYwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzg0MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMEYwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIyNDAiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwRlU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTUiOworCisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweEMwMDAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIzMjIxMjI1NDcyIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MEMwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjIwMTMyNjU5MiI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwQzAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIxMjU4MjkxMiI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMEMwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICI3ODY0MzIiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwQzAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDkxNTIiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMEMwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzA3MiI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMEMwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIxOTIiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwQ1U7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTIiOworCisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAxVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIxIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjAiOworCisgIG51bV91aW50X3Rlc3RzID0gaTsKKworI2VsaWYgKFNJWkVPRl9JTlQgPT0gOCkKKworICBpPTE7IHVpX3Rlc3RbaV0ubnVtID0gMHhGRkZGRkZGRkZGRkZGRkZGVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIxODQ0Njc0NDA3MzcwOTU1MTYxNSI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweEZGRkZGRkZGMDAwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjE4NDQ2NzQ0MDY5NDE0NTg0MzIwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDBGRkZGRkZGRlU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDI5NDk2NzI5NSI7CisKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4RkZGRjAwMDAwMDAwMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTg0NDY0NjI1OTg3MzI4NDA5NjAiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwRkZGRjAwMDAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIyODE0NzA2ODE3NDMzNjAiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMEZGRkYwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICI0Mjk0OTAxNzYwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwRkZGRlU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNjU1MzUiOworCisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweEZGMDAwMDAwMDAwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjE4Mzc0Njg2NDc5NjcxNjIzNjgwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDBGRjAwMDAwMDAwMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNzE3NzYxMTkwNjEyMTcyODAiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwRkYwMDAwMDAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIyODAzNzU0NjUwODI4ODAiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDBGRjAwMDAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIxMDk1MjE2NjYwNDgwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDBGRjAwMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDI3ODE5MDA4MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDBGRjAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjE2NzExNjgwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwRkYwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNjUyODAiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDAwMEZGVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIyNTUiOworCisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweEYwMDAwMDAwMDAwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjE3MjkzODIyNTY5MTAyNzA0NjQwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MEYwMDAwMDAwMDAwMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTA4MDg2MzkxMDU2ODkxOTA0MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwRjAwMDAwMDAwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjY3NTUzOTk0NDEwNTU3NDQwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwRjAwMDAwMDAwMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDIyMjEyNDY1MDY1OTg0MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDBGMDAwMDAwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjI2Mzg4Mjc5MDY2NjI0MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwRjAwMDAwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjE2NDkyNjc0NDE2NjQwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwRjAwMDAwMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTAzMDc5MjE1MTA0MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMDBGMDAwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjY0NDI0NTA5NDQwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDBGMDAwMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDAyNjUzMTg0MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMEYwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjI1MTY1ODI0MCI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDBGMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjE1NzI4NjQwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDBGMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiOTgzMDQwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwRjAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNjE0NDAiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDAwRjAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIzODQwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwMDBGMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjQwIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwMDAwRlU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTUiOworCisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweEMwMDAwMDAwMDAwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjEzODM1MDU4MDU1MjgyMTYzNzEyIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MEMwMDAwMDAwMDAwMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiODY0NjkxMTI4NDU1MTM1MjMyIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDBDMDAwMDAwMDAwMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNTQwNDMxOTU1Mjg0NDU5NTIiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDBDMDAwMDAwMDAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIzMzc3Njk5NzIwNTI3ODcyIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMEMwMDAwMDAwMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjExMTA2MjMyNTMyOTkyIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDBDMDAwMDAwMDAwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTMxOTQxMzk1MzMzMTIiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDBDMDAwMDAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICI4MjQ2MzM3MjA4MzIiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwQzAwMDAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICI1MTUzOTYwNzU1MiI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwQzAwMDAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjMyMjEyMjU0NzIiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDBDMDAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIyMDEzMjY1OTIiOworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwQzAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIxMjU4MjkxMiI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwQzAwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjc4NjQzMiI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwMEMwMDBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjQ5MTUyIjsKKyAgaSsrOyB1aV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwMEMwMFU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzA3MiI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwMDAwQzBVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjE5MiI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwMDAwMENVOyB1aV90ZXN0W2ldLmV4cGVjdGVkID0gIjEyIjsKKworICBpKys7IHVpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMVU7IHVpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMSI7CisgIGkrKzsgdWlfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwVTsgdWlfdGVzdFtpXS5leHBlY3RlZCA9ICIwIjsKKworICBudW1fdWludF90ZXN0cyA9IGk7CisKKyNlbmRpZgorCisgIGZvcihpPTE7IGk8PW51bV91aW50X3Rlc3RzOyBpKyspIHsKKworICAgIGZvcihqPTA7IGo8QlVGU1o7IGorKykKKyAgICAgIHVpX3Rlc3RbaV0ucmVzdWx0W2pdID0gJ1gnOworICAgIHVpX3Rlc3RbaV0ucmVzdWx0W0JVRlNaLTFdID0gJ1wwJzsKKworICAgICh2b2lkKWN1cmxfbXNwcmludGYodWlfdGVzdFtpXS5yZXN1bHQsICIldSIsIHVpX3Rlc3RbaV0ubnVtKTsKKworICAgIGlmKG1lbWNtcCh1aV90ZXN0W2ldLnJlc3VsdCwKKyAgICAgICAgICAgICAgIHVpX3Rlc3RbaV0uZXhwZWN0ZWQsCisgICAgICAgICAgICAgICBzdHJsZW4odWlfdGVzdFtpXS5leHBlY3RlZCkpKSB7CisgICAgICBwcmludGYoInVuc2lnbmVkIGludCB0ZXN0ICMlLjJkOiBGYWlsZWQgKEV4cGVjdGVkOiAlcyBHb3Q6ICVzKVxuIiwKKyAgICAgICAgICAgICBpLCB1aV90ZXN0W2ldLmV4cGVjdGVkLCB1aV90ZXN0W2ldLnJlc3VsdCk7CisgICAgICBmYWlsZWQrKzsKKyAgICB9CisKKyAgfQorCisgIGlmKCFmYWlsZWQpCisgICAgcHJpbnRmKCJBbGwgY3VybF9tcHJpbnRmKCkgdW5zaWduZWQgaW50IHRlc3RzIE9LIVxuIik7CisgIGVsc2UKKyAgICBwcmludGYoIlNvbWUgY3VybF9tcHJpbnRmKCkgdW5zaWduZWQgaW50IHRlc3RzIEZhaWxlZCFcbiIpOworCisgIHJldHVybiBmYWlsZWQ7Cit9CisKKworc3RhdGljIGludCB0ZXN0X3NpZ25lZF9pbnRfZm9ybWF0dGluZyh2b2lkKQoreworICBpbnQgaSwgajsKKyAgaW50IG51bV9zaW50X3Rlc3RzOworICBpbnQgZmFpbGVkID0gMDsKKworI2lmIChTSVpFT0ZfSU5UID09IDIpCisKKyAgaT0xOyBzaV90ZXN0W2ldLm51bSA9IDB4N0ZGRjsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIzMjc2NyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDdGRkU7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzI3NjYiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHg3RkZEOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjMyNzY1IjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4N0YwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIzMjUxMiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDA3RjA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjAzMiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwN0Y7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTI3IjsKKworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHg3MDAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjI4NjcyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDcwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIxNzkyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDA3MDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIxMTIiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDA3OyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjciOworCisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDUwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjA0ODAiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwNTAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjEyODAiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDUwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjgwIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwNTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICI1IjsKKworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAxOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjEiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjAiOworCisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHg3RkZGIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0zMjc2OCI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHg3RkZFIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0zMjc2NyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHg3RkZEIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0zMjc2NiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHg3RjAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0zMjUxMyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwN0YwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0yMDMzIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDAwN0YgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEyOCI7CisKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDcwMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTI4NjczIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDA3MDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTE3OTMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDA3MCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMTEzIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDAwMDcgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgiOworCisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHg1MDAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0yMDQ4MSI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwNTAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0xMjgxIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDAwNTAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgxIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDAwMDUgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTYiOworCisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAgMHgwMDAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0xIjsKKworICBudW1fc2ludF90ZXN0cyA9IGk7CisKKyNlbGlmIChTSVpFT0ZfSU5UID09IDQpCisKKyAgaT0xOyBzaV90ZXN0W2ldLm51bSA9IDB4N0ZGRkZGRkY7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjE0NzQ4MzY0NyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDdGRkZGRkZFOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjIxNDc0ODM2NDYiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHg3RkZGRkZGRDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIyMTQ3NDgzNjQ1IjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4N0ZGRjAwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjE0NzQxODExMiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDA3RkZGOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjMyNzY3IjsKKworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHg3RjAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIyMTMwNzA2NDMyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDA3RjAwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiODMyMzA3MiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDA3RjAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjMyNTEyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwN0Y7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTI3IjsKKworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHg3MDAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIxODc5MDQ4MTkyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDcwMDAwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTE3NDQwNTEyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDA3MDAwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNzM0MDAzMiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDcwMDAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjQ1ODc1MiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDA3MDAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjI4NjcyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwMDA3MDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTc5MiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDAwMDcwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjExMiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDAwMDA3OyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjciOworCisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDUwMDAwMDAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjEzNDIxNzcyODAiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwNTAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICI4Mzg4NjA4MCI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwNTAwMDAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjUyNDI4ODAiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDA1MDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIzMjc2ODAiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwNTAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIyMDQ4MCI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDAwNTAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjEyODAiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDA1MDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICI4MCI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDAwMDA1OyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjUiOworCisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAxOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjEiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIwIjsKKworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRkZGRkYgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxNDc0ODM2NDgiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRkZGRkUgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxNDc0ODM2NDciOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRkZGRkQgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxNDc0ODM2NDYiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRjAwMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxNDc0MTgxMTMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDdGRkYgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTMyNzY4IjsKKworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4N0YwMDAwMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxMzA3MDY0MzMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDA3RjAwMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgzMjMwNzMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDdGMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTMyNTEzIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDdGIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0xMjgiOworCisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHg3MDAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMTg3OTA0ODE5MyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwNzAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMTE3NDQwNTEzIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDAwNzAwMDAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi03MzQwMDMzIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDAwMDcwMDAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi00NTg3NTMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDcwMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTI4NjczIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDAwMDAwNzAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0xNzkzIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDcwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0xMTMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDcgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgiOworCisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHg1MDAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMTM0MjE3NzI4MSI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwNTAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItODM4ODYwODEiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDA1MDAwMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTUyNDI4ODEiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwNTAwMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTMyNzY4MSI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwMDAwNTAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMjA0ODEiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDA1MDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEyODEiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwNTAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgxIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDA1IC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi02IjsKKworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gIDB4MDAwMDAwMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEiOworCisgIG51bV9zaW50X3Rlc3RzID0gaTsKKworI2VsaWYgKFNJWkVPRl9JTlQgPT0gOCkKKworICBpPTE7IHNpX3Rlc3RbaV0ubnVtID0gMHg3RkZGRkZGRkZGRkZGRkZGOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjkyMjMzNzIwMzY4NTQ3NzU4MDciOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHg3RkZGRkZGRkZGRkZGRkZFOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjkyMjMzNzIwMzY4NTQ3NzU4MDYiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHg3RkZGRkZGRkZGRkZGRkZEOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjkyMjMzNzIwMzY4NTQ3NzU4MDUiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHg3RkZGRkZGRjAwMDAwMDAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjkyMjMzNzIwMzI1NTk4MDg1MTIiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDdGRkZGRkZGOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjIxNDc0ODM2NDciOworCisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDdGRkYwMDAwMDAwMDAwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiOTIyMzA5MDU2MTg3ODA2NTE1MiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDA3RkZGMDAwMDAwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTQwNzMzMTkzMzg4MDMyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDA3RkZGMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIyMTQ3NDE4MTEyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwN0ZGRjsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIzMjc2NyI7CisKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4N0YwMDAwMDAwMDAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICI5MTUxMzE0NDQyODE2ODQ3ODcyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDA3RjAwMDAwMDAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIzNTc0NzMyMjA0MjI1MzMxMiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDA3RjAwMDAwMDAwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTM5NjM3OTc2NzI3NTUyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwN0YwMDAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICI1NDU0NjA4NDY1OTIiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDdGMDAwMDAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjIxMzA3MDY0MzIiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwN0YwMDAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjgzMjMwNzIiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDA3RjAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjMyNTEyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwMDA3Rjsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIxMjciOworCisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDcwMDAwMDAwMDAwMDAwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiODA3MDQ1MDUzMjI0NzkyODgzMiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDA3MDAwMDAwMDAwMDAwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNTA0NDAzMTU4MjY1NDk1NTUyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDA3MDAwMDAwMDAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIzMTUyNTE5NzM5MTU5MzQ3MiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDcwMDAwMDAwMDAwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTk3MDMyNDgzNjk3NDU5MiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDA3MDAwMDAwMDAwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTIzMTQ1MzAyMzEwOTEyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwMDA3MDAwMDAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICI3Njk2NTgxMzk0NDMyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwNzAwMDAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICI0ODEwMzYzMzcxNTIiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwNzAwMDAwMDAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjMwMDY0NzcxMDcyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDA3MDAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIxODc5MDQ4MTkyIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwNzAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIxMTc0NDA1MTIiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwNzAwMDAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjczNDAwMzIiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDcwMDAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjQ1ODc1MiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwMDcwMDA7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjg2NzIiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDAwNzAwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjE3OTIiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDAwMDcwOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIjExMiI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwMDAwMDc7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNyI7CisKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwMDAwMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIxIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwMDAwMDsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICIwIjsKKworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRkZGRkZGRkZGRkZGRiAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItOTIyMzM3MjAzNjg1NDc3NTgwOCI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHg3RkZGRkZGRkZGRkZGRkZFIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi05MjIzMzcyMDM2ODU0Nzc1ODA3IjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDdGRkZGRkZGRkZGRkZGRkQgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTkyMjMzNzIwMzY4NTQ3NzU4MDYiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRkZGRkYwMDAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItOTIyMzM3MjAzMjU1OTgwODUxMyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwMDdGRkZGRkZGIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0yMTQ3NDgzNjQ4IjsKKworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRjAwMDAwMDAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItOTIyMzA5MDU2MTg3ODA2NTE1MyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwMDAwN0ZGRjAwMDAwMDAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0xNDA3MzMxOTMzODgwMzMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDA3RkZGMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMjE0NzQxODExMyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwMDAwMDA3RkZGIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0zMjc2OCI7CisKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDdGMDAwMDAwMDAwMDAwMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTkxNTEzMTQ0NDI4MTY4NDc4NzMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDA3RjAwMDAwMDAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMzU3NDczMjIwNDIyNTMzMTMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDdGMDAwMDAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMTM5NjM3OTc2NzI3NTUzIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDdGMDAwMDAwMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTU0NTQ2MDg0NjU5MyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwMDdGMDAwMDAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0yMTMwNzA2NDMzIjsKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDAwMDA3RjAwMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgzMjMwNzMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDAwMDAwN0YwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMzI1MTMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDAwMDAwMDA3RiAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMTI4IjsKKworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4NzAwMDAwMDAwMDAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItODA3MDQ1MDUzMjI0NzkyODgzMyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwNzAwMDAwMDAwMDAwMDAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi01MDQ0MDMxNTgyNjU0OTU1NTMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDA3MDAwMDAwMDAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMzE1MjUxOTczOTE1OTM0NzMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwNzAwMDAwMDAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMTk3MDMyNDgzNjk3NDU5MyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwMDAwNzAwMDAwMDAwMDAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0xMjMxNDUzMDIzMTA5MTMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDA3MDAwMDAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItNzY5NjU4MTM5NDQzMyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDA3MDAwMDAwMDAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi00ODEwMzYzMzcxNTMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDcwMDAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMzAwNjQ3NzEwNzMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDA3MDAwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMTg3OTA0ODE5MyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwMDA3MDAwMDAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0xMTc0NDA1MTMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDAwMDcwMDAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItNzM0MDAzMyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwMDAwMDcwMDAwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi00NTg3NTMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDAwMDAwNzAwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMjg2NzMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDAwMDAwMDcwMCAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItMTc5MyI7CisgIGkrKzsgc2lfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwMDAwMDAwMDcwIC0xOyBzaV90ZXN0W2ldLmV4cGVjdGVkID0gIi0xMTMiOworICBpKys7IHNpX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDAwMDAwMDAwNyAtMTsgc2lfdGVzdFtpXS5leHBlY3RlZCA9ICItOCI7CisKKyAgaSsrOyBzaV90ZXN0W2ldLm51bSA9ICAweDAwMDAwMDAwMDAwMDAwMDAgLTE7IHNpX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEiOworCisgIG51bV9zaW50X3Rlc3RzID0gaTsKKworI2VuZGlmCisKKyAgZm9yKGk9MTsgaTw9bnVtX3NpbnRfdGVzdHM7IGkrKykgeworCisgICAgZm9yKGo9MDsgajxCVUZTWjsgaisrKQorICAgICAgc2lfdGVzdFtpXS5yZXN1bHRbal0gPSAnWCc7CisgICAgc2lfdGVzdFtpXS5yZXN1bHRbQlVGU1otMV0gPSAnXDAnOworCisgICAgKHZvaWQpY3VybF9tc3ByaW50ZihzaV90ZXN0W2ldLnJlc3VsdCwgIiVkIiwgc2lfdGVzdFtpXS5udW0pOworCisgICAgaWYobWVtY21wKHNpX3Rlc3RbaV0ucmVzdWx0LAorICAgICAgICAgICAgICBzaV90ZXN0W2ldLmV4cGVjdGVkLAorICAgICAgICAgICAgICBzdHJsZW4oc2lfdGVzdFtpXS5leHBlY3RlZCkpKSB7CisgICAgICBwcmludGYoInNpZ25lZCBpbnQgdGVzdCAjJS4yZDogRmFpbGVkIChFeHBlY3RlZDogJXMgR290OiAlcylcbiIsCisgICAgICAgICAgICAgaSwgc2lfdGVzdFtpXS5leHBlY3RlZCwgc2lfdGVzdFtpXS5yZXN1bHQpOworICAgICAgZmFpbGVkKys7CisgICAgfQorCisgIH0KKworICBpZighZmFpbGVkKQorICAgIHByaW50ZigiQWxsIGN1cmxfbXByaW50ZigpIHNpZ25lZCBpbnQgdGVzdHMgT0shXG4iKTsKKyAgZWxzZQorICAgIHByaW50ZigiU29tZSBjdXJsX21wcmludGYoKSBzaWduZWQgaW50IHRlc3RzIEZhaWxlZCFcbiIpOworCisgIHJldHVybiBmYWlsZWQ7Cit9CisKKworc3RhdGljIGludCB0ZXN0X3Vuc2lnbmVkX2xvbmdfZm9ybWF0dGluZyh2b2lkKQoreworICBpbnQgaSwgajsKKyAgaW50IG51bV91bG9uZ190ZXN0czsKKyAgaW50IGZhaWxlZCA9IDA7CisKKyNpZiAoQ1VSTF9TSVpFT0ZfTE9ORyA9PSAyKQorCisgIGk9MTsgdWxfdGVzdFtpXS5udW0gPSAweEZGRkZVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICI2NTUzNSI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweEZGMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICI2NTI4MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwRkZVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIyNTUiOworCisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweEYwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICI2MTQ0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDBGMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIzODQwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDBGMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjI0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMEZVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIxNSI7CisKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4QzAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjQ5MTUyIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MEMwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjMwNzIiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMEMwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTkyIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwQ1VMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjEyIjsKKworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAxVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMSI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIwIjsKKworICBudW1fdWxvbmdfdGVzdHMgPSBpOworCisjZWxpZiAoQ1VSTF9TSVpFT0ZfTE9ORyA9PSA0KQorCisgIGk9MTsgdWxfdGVzdFtpXS5udW0gPSAweEZGRkZGRkZGVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDI5NDk2NzI5NSI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweEZGRkYwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDI5NDkwMTc2MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDBGRkZGVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNjU1MzUiOworCisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweEZGMDAwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDI3ODE5MDA4MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwRkYwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTY3MTE2ODAiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwRkYwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjY1MjgwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwRkZVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIyNTUiOworCisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweEYwMDAwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDAyNjUzMTg0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDBGMDAwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjUxNjU4MjQwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDBGMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIxNTcyODY0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMEYwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiOTgzMDQwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMEYwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICI2MTQ0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDAwRjAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzg0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDAwMEYwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjQwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMEZVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIxNSI7CisKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4QzAwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIzMjIxMjI1NDcyIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MEMwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIyMDEzMjY1OTIiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMEMwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjEyNTgyOTEyIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwQzAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICI3ODY0MzIiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwQzAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjQ5MTUyIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDBDMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIzMDcyIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwQzBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIxOTIiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwQ1VMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjEyIjsKKworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMVVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjEiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjAiOworCisgIG51bV91bG9uZ190ZXN0cyA9IGk7CisKKyNlbGlmIChDVVJMX1NJWkVPRl9MT05HID09IDgpCisKKyAgaT0xOyB1bF90ZXN0W2ldLm51bSA9IDB4RkZGRkZGRkZGRkZGRkZGRlVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjE4NDQ2NzQ0MDczNzA5NTUxNjE1IjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4RkZGRkZGRkYwMDAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjE4NDQ2NzQ0MDY5NDE0NTg0MzIwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDBGRkZGRkZGRlVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjQyOTQ5NjcyOTUiOworCisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweEZGRkYwMDAwMDAwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIxODQ0NjQ2MjU5ODczMjg0MDk2MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDBGRkZGMDAwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIyODE0NzA2ODE3NDMzNjAiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMEZGRkYwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDI5NDkwMTc2MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwMEZGRkZVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICI2NTUzNSI7CisKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4RkYwMDAwMDAwMDAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjE4Mzc0Njg2NDc5NjcxNjIzNjgwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDBGRjAwMDAwMDAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjcxNzc2MTE5MDYxMjE3MjgwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMEZGMDAwMDAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjI4MDM3NTQ2NTA4Mjg4MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDAwMEZGMDAwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIxMDk1MjE2NjYwNDgwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDBGRjAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjQyNzgxOTAwODAiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwRkYwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTY3MTE2ODAiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDBGRjAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNjUyODAiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDAwMEZGVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjU1IjsKKworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHhGMDAwMDAwMDAwMDAwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTcyOTM4MjI1NjkxMDI3MDQ2NDAiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwRjAwMDAwMDAwMDAwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTA4MDg2MzkxMDU2ODkxOTA0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwRjAwMDAwMDAwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICI2NzU1Mzk5NDQxMDU1NzQ0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMEYwMDAwMDAwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICI0MjIyMTI0NjUwNjU5ODQwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMEYwMDAwMDAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjI2Mzg4Mjc5MDY2NjI0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDAwRjAwMDAwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIxNjQ5MjY3NDQxNjY0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDAwMEYwMDAwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIxMDMwNzkyMTUxMDQwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMEYwMDAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjY0NDI0NTA5NDQwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDBGMDAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjQwMjY1MzE4NDAiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDBGMDAwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjUxNjU4MjQwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMEYwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjE1NzI4NjQwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDBGMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjk4MzA0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwMEYwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICI2MTQ0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwMDBGMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIzODQwIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwMDBGMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjI0MCI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwMDAwMEZVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIxNSI7CisKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4QzAwMDAwMDAwMDAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjEzODM1MDU4MDU1MjgyMTYzNzEyIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MEMwMDAwMDAwMDAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjg2NDY5MTEyODQ1NTEzNTIzMiI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwQzAwMDAwMDAwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICI1NDA0MzE5NTUyODQ0NTk1MiI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMEMwMDAwMDAwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIzMzc3Njk5NzIwNTI3ODcyIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMEMwMDAwMDAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjIxMTEwNjIzMjUzMjk5MiI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDAwQzAwMDAwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIxMzE5NDEzOTUzMzMxMiI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDAwMEMwMDAwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICI4MjQ2MzM3MjA4MzIiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwQzAwMDAwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNTE1Mzk2MDc1NTIiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMEMwMDAwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzIyMTIyNTQ3MiI7CisgIGkrKzsgdWxfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMEMwMDAwMDBVTDsgdWxfdGVzdFtpXS5leHBlY3RlZCA9ICIyMDEzMjY1OTIiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwQzAwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTI1ODI5MTIiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMEMwMDAwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNzg2NDMyIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwQzAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjQ5MTUyIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwMEMwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjMwNzIiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDAwMEMwVUw7IHVsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTkyIjsKKyAgaSsrOyB1bF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwMDAwQ1VMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjEyIjsKKworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMVVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjEiOworICBpKys7IHVsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMFVMOyB1bF90ZXN0W2ldLmV4cGVjdGVkID0gIjAiOworCisgIG51bV91bG9uZ190ZXN0cyA9IGk7CisKKyNlbmRpZgorCisgIGZvcihpPTE7IGk8PW51bV91bG9uZ190ZXN0czsgaSsrKSB7CisKKyAgICBmb3Ioaj0wOyBqPEJVRlNaOyBqKyspCisgICAgICB1bF90ZXN0W2ldLnJlc3VsdFtqXSA9ICdYJzsKKyAgICB1bF90ZXN0W2ldLnJlc3VsdFtCVUZTWi0xXSA9ICdcMCc7CisKKyAgICAodm9pZCljdXJsX21zcHJpbnRmKHVsX3Rlc3RbaV0ucmVzdWx0LCAiJWx1IiwgdWxfdGVzdFtpXS5udW0pOworCisgICAgaWYobWVtY21wKHVsX3Rlc3RbaV0ucmVzdWx0LAorICAgICAgICAgICAgICAgdWxfdGVzdFtpXS5leHBlY3RlZCwKKyAgICAgICAgICAgICAgIHN0cmxlbih1bF90ZXN0W2ldLmV4cGVjdGVkKSkpIHsKKyAgICAgIHByaW50ZigidW5zaWduZWQgbG9uZyB0ZXN0ICMlLjJkOiBGYWlsZWQgKEV4cGVjdGVkOiAlcyBHb3Q6ICVzKVxuIiwKKyAgICAgICAgICAgICBpLCB1bF90ZXN0W2ldLmV4cGVjdGVkLCB1bF90ZXN0W2ldLnJlc3VsdCk7CisgICAgICBmYWlsZWQrKzsKKyAgICB9CisKKyAgfQorCisgIGlmKCFmYWlsZWQpCisgICAgcHJpbnRmKCJBbGwgY3VybF9tcHJpbnRmKCkgdW5zaWduZWQgbG9uZyB0ZXN0cyBPSyFcbiIpOworICBlbHNlCisgICAgcHJpbnRmKCJTb21lIGN1cmxfbXByaW50ZigpIHVuc2lnbmVkIGxvbmcgdGVzdHMgRmFpbGVkIVxuIik7CisKKyAgcmV0dXJuIGZhaWxlZDsKK30KKworCitzdGF0aWMgaW50IHRlc3Rfc2lnbmVkX2xvbmdfZm9ybWF0dGluZyh2b2lkKQoreworICBpbnQgaSwgajsKKyAgaW50IG51bV9zbG9uZ190ZXN0czsKKyAgaW50IGZhaWxlZCA9IDA7CisKKyNpZiAoQ1VSTF9TSVpFT0ZfTE9ORyA9PSAyKQorCisgIGk9MTsgc2xfdGVzdFtpXS5udW0gPSAweDdGRkZMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjMyNzY3IjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4N0ZGRUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzI3NjYiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHg3RkZETDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIzMjc2NSI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDdGMDBMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjMyNTEyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDdGMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjAzMiI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwN0ZMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjEyNyI7CisKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4NzAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjg2NzIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwNzAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIxNzkyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDA3MEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTEyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDAwN0w7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNyI7CisKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4NTAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjA0ODAiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwNTAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIxMjgwIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDA1MEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiODAiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDA1TDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICI1IjsKKworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAxTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIxIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMCI7CisKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDdGRkZMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItMzI3NjgiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRUwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0zMjc2NyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHg3RkZETCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTMyNzY2IjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDdGMDBMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItMzI1MTMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDdGMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0yMDMzIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwN0ZMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItMTI4IjsKKworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4NzAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0yODY3MyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwNzAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTE3OTMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDA3MEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0xMTMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDAwN0wgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi04IjsKKworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4NTAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0yMDQ4MSI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwNTAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEyODEiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDA1MEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi04MSI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDA1TCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTYiOworCisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAgMHgwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEiOworCisgIG51bV9zbG9uZ190ZXN0cyA9IGk7CisKKyNlbGlmIChDVVJMX1NJWkVPRl9MT05HID09IDQpCisKKyAgaT0xOyBzbF90ZXN0W2ldLm51bSA9IDB4N0ZGRkZGRkZMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjIxNDc0ODM2NDciOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHg3RkZGRkZGRUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjE0NzQ4MzY0NiI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDdGRkZGRkZETDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIyMTQ3NDgzNjQ1IjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4N0ZGRjAwMDBMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjIxNDc0MTgxMTIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwN0ZGRkw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzI3NjciOworCisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDdGMDAwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIyMTMwNzA2NDMyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDA3RjAwMDBMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjgzMjMwNzIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwN0YwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzI1MTIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDA3Rkw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTI3IjsKKworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHg3MDAwMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTg3OTA0ODE5MiI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDA3MDAwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIxMTc0NDA1MTIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDcwMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNzM0MDAzMiI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDcwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICI0NTg3NTIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwNzAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjg2NzIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDcwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTc5MiI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDAwMDcwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIxMTIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwN0w7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNyI7CisKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4NTAwMDAwMDBMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjEzNDIxNzcyODAiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwNTAwMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiODM4ODYwODAiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDUwMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNTI0Mjg4MCI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDUwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIzMjc2ODAiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwNTAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjA0ODAiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDUwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTI4MCI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDAwMDUwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICI4MCI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDAwMDA1TDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICI1IjsKKworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMSI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIwIjsKKworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRkZGRkZMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItMjE0NzQ4MzY0OCI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHg3RkZGRkZGRUwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0yMTQ3NDgzNjQ3IjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDdGRkZGRkZETCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxNDc0ODM2NDYiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRjAwMDBMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItMjE0NzQxODExMyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwN0ZGRkwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0zMjc2OCI7CisKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDdGMDAwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxMzA3MDY0MzMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDA3RjAwMDBMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItODMyMzA3MyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwN0YwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0zMjUxMyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDA3RkwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0xMjgiOworCisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHg3MDAwMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0xODc5MDQ4MTkzIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDA3MDAwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTExNzQ0MDUxMyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDcwMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi03MzQwMDMzIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwMDcwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTQ1ODc1MyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwNzAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0yODY3MyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDcwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0xNzkzIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDcwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTExMyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwN0wgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi04IjsKKworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4NTAwMDAwMDBMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItMTM0MjE3NzI4MSI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwNTAwMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi04Mzg4NjA4MSI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDUwMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi01MjQyODgxIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwMDUwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTMyNzY4MSI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwNTAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0yMDQ4MSI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDUwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0xMjgxIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDUwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgxIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDA1TCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTYiOworCisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAgMHgwMDAwMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0xIjsKKworICBudW1fc2xvbmdfdGVzdHMgPSBpOworCisjZWxpZiAoQ1VSTF9TSVpFT0ZfTE9ORyA9PSA4KQorCisgIGk9MTsgc2xfdGVzdFtpXS5udW0gPSAweDdGRkZGRkZGRkZGRkZGRkZMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjkyMjMzNzIwMzY4NTQ3NzU4MDciOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHg3RkZGRkZGRkZGRkZGRkZFTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICI5MjIzMzcyMDM2ODU0Nzc1ODA2IjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4N0ZGRkZGRkZGRkZGRkZGREw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiOTIyMzM3MjAzNjg1NDc3NTgwNSI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDdGRkZGRkZGMDAwMDAwMDBMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjkyMjMzNzIwMzI1NTk4MDg1MTIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDdGRkZGRkZGTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIyMTQ3NDgzNjQ3IjsKKworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHg3RkZGMDAwMDAwMDAwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICI5MjIzMDkwNTYxODc4MDY1MTUyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDAwMDdGRkYwMDAwMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTQwNzMzMTkzMzg4MDMyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDA3RkZGMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjE0NzQxODExMiI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwMDdGRkZMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjMyNzY3IjsKKworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHg3RjAwMDAwMDAwMDAwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICI5MTUxMzE0NDQyODE2ODQ3ODcyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDA3RjAwMDAwMDAwMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzU3NDczMjIwNDIyNTMzMTIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwN0YwMDAwMDAwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIxMzk2Mzc5NzY3Mjc1NTIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDA3RjAwMDAwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICI1NDU0NjA4NDY1OTIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDdGMDAwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIyMTMwNzA2NDMyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDdGMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiODMyMzA3MiI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwMDdGMDBMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjMyNTEyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwMDA3Rkw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTI3IjsKKworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHg3MDAwMDAwMDAwMDAwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICI4MDcwNDUwNTMyMjQ3OTI4ODMyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDcwMDAwMDAwMDAwMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNTA0NDAzMTU4MjY1NDk1NTUyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDA3MDAwMDAwMDAwMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzE1MjUxOTczOTE1OTM0NzIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDA3MDAwMDAwMDAwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIxOTcwMzI0ODM2OTc0NTkyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDAwMDcwMDAwMDAwMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTIzMTQ1MzAyMzEwOTEyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDAwMDA3MDAwMDAwMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNzY5NjU4MTM5NDQzMiI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDAwMDcwMDAwMDAwMDBMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjQ4MTAzNjMzNzE1MiI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDAwMDA3MDAwMDAwMDBMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjMwMDY0NzcxMDcyIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDA3MDAwMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTg3OTA0ODE5MiI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDcwMDAwMDBMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjExNzQ0MDUxMiI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDA3MDAwMDBMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjczNDAwMzIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDcwMDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICI0NTg3NTIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDA3MDAwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIyODY3MiI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAweDAwMDAwMDAwMDAwMDA3MDBMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIjE3OTIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDAwMDcwTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIxMTIiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDAwMDA3TDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICI3IjsKKworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gMHgwMDAwMDAwMDAwMDAwMDAxTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICIxIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IDB4MDAwMDAwMDAwMDAwMDAwMEw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMCI7CisKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDdGRkZGRkZGRkZGRkZGRkZMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItOTIyMzM3MjAzNjg1NDc3NTgwOCI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHg3RkZGRkZGRkZGRkZGRkZFTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTkyMjMzNzIwMzY4NTQ3NzU4MDciOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4N0ZGRkZGRkZGRkZGRkZGREwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi05MjIzMzcyMDM2ODU0Nzc1ODA2IjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDdGRkZGRkZGMDAwMDAwMDBMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItOTIyMzM3MjAzMjU1OTgwODUxMyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwMDdGRkZGRkZGTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxNDc0ODM2NDgiOworCisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHg3RkZGMDAwMDAwMDAwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTkyMjMwOTA1NjE4NzgwNjUxNTMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDdGRkYwMDAwMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0xNDA3MzMxOTMzODgwMzMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDA3RkZGMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0yMTQ3NDE4MTEzIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDAwMDAwMDdGRkZMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItMzI3NjgiOworCisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHg3RjAwMDAwMDAwMDAwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTkxNTEzMTQ0NDI4MTY4NDc4NzMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDA3RjAwMDAwMDAwMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0zNTc0NzMyMjA0MjI1MzMxMyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwN0YwMDAwMDAwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEzOTYzNzk3NjcyNzU1MyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDA3RjAwMDAwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTU0NTQ2MDg0NjU5MyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwMDdGMDAwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTIxMzA3MDY0MzMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDAwMDdGMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi04MzIzMDczIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDAwMDAwMDdGMDBMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItMzI1MTMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDAwMDAwMDA3RkwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0xMjgiOworCisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHg3MDAwMDAwMDAwMDAwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgwNzA0NTA1MzIyNDc5Mjg4MzMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDcwMDAwMDAwMDAwMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi01MDQ0MDMxNTgyNjU0OTU1NTMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDA3MDAwMDAwMDAwMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0zMTUyNTE5NzM5MTU5MzQ3MyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDA3MDAwMDAwMDAwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTE5NzAzMjQ4MzY5NzQ1OTMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDcwMDAwMDAwMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0xMjMxNDUzMDIzMTA5MTMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDA3MDAwMDAwMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi03Njk2NTgxMzk0NDMzIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDcwMDAwMDAwMDBMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItNDgxMDM2MzM3MTUzIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDA3MDAwMDAwMDBMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItMzAwNjQ3NzEwNzMiOworICBpKys7IHNsX3Rlc3RbaV0ubnVtID0gLTB4MDAwMDAwMDA3MDAwMDAwMEwgLTFMOyBzbF90ZXN0W2ldLmV4cGVjdGVkID0gIi0xODc5MDQ4MTkzIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDAwMDcwMDAwMDBMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItMTE3NDQwNTEzIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDAwMDA3MDAwMDBMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItNzM0MDAzMyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwMDAwMDcwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTQ1ODc1MyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwMDAwMDA3MDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTI4NjczIjsKKyAgaSsrOyBzbF90ZXN0W2ldLm51bSA9IC0weDAwMDAwMDAwMDAwMDA3MDBMIC0xTDsgc2xfdGVzdFtpXS5leHBlY3RlZCA9ICItMTc5MyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwMDAwMDAwMDcwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTExMyI7CisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAtMHgwMDAwMDAwMDAwMDAwMDA3TCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgiOworCisgIGkrKzsgc2xfdGVzdFtpXS5udW0gPSAgMHgwMDAwMDAwMDAwMDAwMDAwTCAtMUw7IHNsX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEiOworCisgIG51bV9zbG9uZ190ZXN0cyA9IGk7CisKKyNlbmRpZgorCisgIGZvcihpPTE7IGk8PW51bV9zbG9uZ190ZXN0czsgaSsrKSB7CisKKyAgICBmb3Ioaj0wOyBqPEJVRlNaOyBqKyspCisgICAgICBzbF90ZXN0W2ldLnJlc3VsdFtqXSA9ICdYJzsKKyAgICBzbF90ZXN0W2ldLnJlc3VsdFtCVUZTWi0xXSA9ICdcMCc7CisKKyAgICAodm9pZCljdXJsX21zcHJpbnRmKHNsX3Rlc3RbaV0ucmVzdWx0LCAiJWxkIiwgc2xfdGVzdFtpXS5udW0pOworCisgICAgaWYobWVtY21wKHNsX3Rlc3RbaV0ucmVzdWx0LAorICAgICAgICAgICAgICBzbF90ZXN0W2ldLmV4cGVjdGVkLAorICAgICAgICAgICAgICBzdHJsZW4oc2xfdGVzdFtpXS5leHBlY3RlZCkpKSB7CisgICAgICBwcmludGYoInNpZ25lZCBsb25nIHRlc3QgIyUuMmQ6IEZhaWxlZCAoRXhwZWN0ZWQ6ICVzIEdvdDogJXMpXG4iLAorICAgICAgICAgICAgIGksIHNsX3Rlc3RbaV0uZXhwZWN0ZWQsIHNsX3Rlc3RbaV0ucmVzdWx0KTsKKyAgICAgIGZhaWxlZCsrOworICAgIH0KKworICB9CisKKyAgaWYoIWZhaWxlZCkKKyAgICBwcmludGYoIkFsbCBjdXJsX21wcmludGYoKSBzaWduZWQgbG9uZyB0ZXN0cyBPSyFcbiIpOworICBlbHNlCisgICAgcHJpbnRmKCJTb21lIGN1cmxfbXByaW50ZigpIHNpZ25lZCBsb25nIHRlc3RzIEZhaWxlZCFcbiIpOworCisgIHJldHVybiBmYWlsZWQ7Cit9CisKKworc3RhdGljIGludCB0ZXN0X2N1cmxfb2ZmX3RfZm9ybWF0dGluZyh2b2lkKQoreworICBpbnQgaSwgajsKKyAgaW50IG51bV9jb2ZmdF90ZXN0czsKKyAgaW50IGZhaWxlZCA9IDA7CisKKyNpZiAoQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCA9PSAyKQorCisgIGk9MTsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4N0ZGRik7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzI3NjciOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDdGRkUpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjMyNzY2IjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHg3RkZEKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIzMjc2NSI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4N0YwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzI1MTIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDA3RjApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjIwMzIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwN0YpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjEyNyI7CisKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHg3MDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIyODY3MiI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDcwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTc5MiI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDA3MCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTEyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDA3KTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICI3IjsKKworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDUwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjIwNDgwIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwNTAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIxMjgwIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDUwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICI4MCI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDAwNSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNSI7CisKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIxIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIwIjsKKworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHg3RkZGKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMzI3NjgiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHg3RkZFKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMzI3NjciOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHg3RkZEKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMzI3NjYiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHg3RjAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMzI1MTMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwN0YwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMjAzMyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwN0YpIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0xMjgiOworCisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDcwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0yODY3MyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDA3MDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0xNzkzIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IC1NUFJOVF9PRkZfVF9DKDB4MDA3MCkgLU1QUk5UX09GRl9UX0MoMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTExMyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDcpIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi04IjsKKworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHg1MDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMjA0ODEiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwNTAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMTI4MSI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwNTApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi04MSI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDUpIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi02IjsKKworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gIE1QUk5UX09GRl9UX0MoMHgwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMSI7CisKKyAgbnVtX2NvZmZ0X3Rlc3RzID0gaTsKKworI2VsaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPT0gNCkKKworICBpPTE7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDdGRkZGRkZGKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIyMTQ3NDgzNjQ3IjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHg3RkZGRkZGRSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjE0NzQ4MzY0NiI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4N0ZGRkZGRkQpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjIxNDc0ODM2NDUiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDdGRkYwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIyMTQ3NDE4MTEyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwN0ZGRik7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzI3NjciOworCisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4N0YwMDAwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjIxMzA3MDY0MzIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwN0YwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICI4MzIzMDcyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwN0YwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMzI1MTIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwMDAwMDdGKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIxMjciOworCisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4NzAwMDAwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjE4NzkwNDgxOTIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDA3MDAwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIxMTc0NDA1MTIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwNzAwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICI3MzQwMDMyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDA3MDAwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNDU4NzUyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwNzAwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjg2NzIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwMDAwNzAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIxNzkyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDA3MCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTEyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDAwNyk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNyI7CisKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHg1MDAwMDAwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTM0MjE3NzI4MCI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDUwMDAwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjgzODg2MDgwIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDUwMDAwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNTI0Mjg4MCI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDAwNTAwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjMyNzY4MCI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDAwMDUwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjIwNDgwIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDUwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTI4MCI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDAwMDAwNTApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjgwIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDAwNSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNSI7CisKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMSI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDAwMDAwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjAiOworCisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDdGRkZGRkZGKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMjE0NzQ4MzY0OCI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDdGRkZGRkZFKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMjE0NzQ4MzY0NyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDdGRkZGRkZEKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMjE0NzQ4MzY0NiI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDdGRkYwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMjE0NzQxODExMyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDA3RkZGKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMzI3NjgiOworCisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDdGMDAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMjEzMDcwNjQzMyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwN0YwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItODMyMzA3MyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDA3RjAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMzI1MTMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDA3RikgLU1QUk5UX09GRl9UX0MoMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEyOCI7CisKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IC1NUFJOVF9PRkZfVF9DKDB4NzAwMDAwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0xODc5MDQ4MTkzIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IC1NUFJOVF9PRkZfVF9DKDB4MDcwMDAwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0xMTc0NDA1MTMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDcwMDAwMCkgLU1QUk5UX09GRl9UX0MoMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTczNDAwMzMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDA3MDAwMCkgLU1QUk5UX09GRl9UX0MoMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTQ1ODc1MyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDA3MDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMjg2NzMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDcwMCkgLU1QUk5UX09GRl9UX0MoMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTE3OTMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDA3MCkgLU1QUk5UX09GRl9UX0MoMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTExMyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDAwMDA3KSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItOCI7CisKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IC1NUFJOVF9PRkZfVF9DKDB4NTAwMDAwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0xMzQyMTc3MjgxIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IC1NUFJOVF9PRkZfVF9DKDB4MDUwMDAwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi04Mzg4NjA4MSI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwNTAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItNTI0Mjg4MSI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDUwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMzI3NjgxIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IC1NUFJOVF9PRkZfVF9DKDB4MDAwMDUwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0yMDQ4MSI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDAwNTAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMTI4MSI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDAwMDUwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItODEiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDAwNSkgLU1QUk5UX09GRl9UX0MoMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTYiOworCisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAgTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMSI7CisKKyAgbnVtX2NvZmZ0X3Rlc3RzID0gaTsKKworI2VsaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPT0gOCkKKworICBpPTE7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDdGRkZGRkZGRkZGRkZGRkYpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjkyMjMzNzIwMzY4NTQ3NzU4MDciOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDdGRkZGRkZGRkZGRkZGRkUpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjkyMjMzNzIwMzY4NTQ3NzU4MDYiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDdGRkZGRkZGRkZGRkZGRkQpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjkyMjMzNzIwMzY4NTQ3NzU4MDUiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDdGRkZGRkZGMDAwMDAwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjkyMjMzNzIwMzI1NTk4MDg1MTIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwN0ZGRkZGRkYpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjIxNDc0ODM2NDciOworCisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4N0ZGRjAwMDAwMDAwMDAwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiOTIyMzA5MDU2MTg3ODA2NTE1MiI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDAwMDdGRkYwMDAwMDAwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTQwNzMzMTkzMzg4MDMyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDdGRkYwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIyMTQ3NDE4MTEyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDAwMDA3RkZGKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIzMjc2NyI7CisKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHg3RjAwMDAwMDAwMDAwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICI5MTUxMzE0NDQyODE2ODQ3ODcyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDdGMDAwMDAwMDAwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIzNTc0NzMyMjA0MjI1MzMxMiI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDAwMDdGMDAwMDAwMDAwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTM5NjM3OTc2NzI3NTUyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDA3RjAwMDAwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICI1NDU0NjA4NDY1OTIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwN0YwMDAwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjIxMzA3MDY0MzIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwMDA3RjAwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjgzMjMwNzIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwMDAwMDdGMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjMyNTEyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDAwMDAwMDdGKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIxMjciOworCisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4NzAwMDAwMDAwMDAwMDAwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiODA3MDQ1MDUzMjI0NzkyODgzMiI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDcwMDAwMDAwMDAwMDAwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNTA0NDAzMTU4MjY1NDk1NTUyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDcwMDAwMDAwMDAwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIzMTUyNTE5NzM5MTU5MzQ3MiI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDAwNzAwMDAwMDAwMDAwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTk3MDMyNDgzNjk3NDU5MiI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDAwMDcwMDAwMDAwMDAwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMTIzMTQ1MzAyMzEwOTEyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDcwMDAwMDAwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICI3Njk2NTgxMzk0NDMyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDA3MDAwMDAwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICI0ODEwMzYzMzcxNTIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwMDAwMDA3MDAwMDAwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjMwMDY0NzcxMDcyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDcwMDAwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIxODc5MDQ4MTkyIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDA3MDAwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIxMTc0NDA1MTIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwMDA3MDAwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjczNDAwMzIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwMDAwNzAwMDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjQ1ODc1MiI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDAwMDAwMDAwMDAwNzAwMCk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiMjg2NzIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwMDAwMDA3MDApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjE3OTIiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwMDAwMDAwNzApOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIjExMiI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSBNUFJOVF9PRkZfVF9DKDB4MDAwMDAwMDAwMDAwMDAwNyk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiNyI7CisKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDAwMDAwMDAxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIxIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IE1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDAwMDAwMDAwKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICIwIjsKKworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHg3RkZGRkZGRkZGRkZGRkZGKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItOTIyMzM3MjAzNjg1NDc3NTgwOCI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDdGRkZGRkZGRkZGRkZGRkUpIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi05MjIzMzcyMDM2ODU0Nzc1ODA3IjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IC1NUFJOVF9PRkZfVF9DKDB4N0ZGRkZGRkZGRkZGRkZGRCkgLU1QUk5UX09GRl9UX0MoMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTkyMjMzNzIwMzY4NTQ3NzU4MDYiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHg3RkZGRkZGRjAwMDAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItOTIyMzM3MjAzMjU1OTgwODUxMyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwN0ZGRkZGRkYpIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0yMTQ3NDgzNjQ4IjsKKworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHg3RkZGMDAwMDAwMDAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItOTIyMzA5MDU2MTg3ODA2NTE1MyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDA3RkZGMDAwMDAwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0xNDA3MzMxOTMzODgwMzMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDdGRkYwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMjE0NzQxODExMyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwMDAwMDdGRkYpIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0zMjc2OCI7CisKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IC1NUFJOVF9PRkZfVF9DKDB4N0YwMDAwMDAwMDAwMDAwMCkgLU1QUk5UX09GRl9UX0MoMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTkxNTEzMTQ0NDI4MTY4NDc4NzMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDdGMDAwMDAwMDAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMzU3NDczMjIwNDIyNTMzMTMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwN0YwMDAwMDAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMTM5NjM3OTc2NzI3NTUzIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IC1NUFJOVF9PRkZfVF9DKDB4MDAwMDAwN0YwMDAwMDAwMCkgLU1QUk5UX09GRl9UX0MoMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTU0NTQ2MDg0NjU5MyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwN0YwMDAwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0yMTMwNzA2NDMzIjsKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9IC1NUFJOVF9PRkZfVF9DKDB4MDAwMDAwMDAwMDdGMDAwMCkgLU1QUk5UX09GRl9UX0MoMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTgzMjMwNzMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDAwMDA3RjAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMzI1MTMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDAwMDAwMDdGKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMTI4IjsKKworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHg3MDAwMDAwMDAwMDAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItODA3MDQ1MDUzMjI0NzkyODgzMyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDA3MDAwMDAwMDAwMDAwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi01MDQ0MDMxNTgyNjU0OTU1NTMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDcwMDAwMDAwMDAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMzE1MjUxOTczOTE1OTM0NzMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDA3MDAwMDAwMDAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMTk3MDMyNDgzNjk3NDU5MyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDA3MDAwMDAwMDAwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0xMjMxNDUzMDIzMTA5MTMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDcwMDAwMDAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItNzY5NjU4MTM5NDQzMyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDAwMDcwMDAwMDAwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi00ODEwMzYzMzcxNTMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDAwNzAwMDAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMzAwNjQ3NzEwNzMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDcwMDAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMTg3OTA0ODE5MyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwMDcwMDAwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0xMTc0NDA1MTMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDAwNzAwMDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItNzM0MDAzMyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwMDAwNzAwMDApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi00NTg3NTMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDAwMDA3MDAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMjg2NzMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDAwMDAwNzAwKSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItMTc5MyI7CisgIGkrKzsgY29fdGVzdFtpXS5udW0gPSAtTVBSTlRfT0ZGX1RfQygweDAwMDAwMDAwMDAwMDAwNzApIC1NUFJOVF9PRkZfVF9DKDEpOyBjb190ZXN0W2ldLmV4cGVjdGVkID0gIi0xMTMiOworICBpKys7IGNvX3Rlc3RbaV0ubnVtID0gLU1QUk5UX09GRl9UX0MoMHgwMDAwMDAwMDAwMDAwMDA3KSAtTVBSTlRfT0ZGX1RfQygxKTsgY29fdGVzdFtpXS5leHBlY3RlZCA9ICItOCI7CisKKyAgaSsrOyBjb190ZXN0W2ldLm51bSA9ICBNUFJOVF9PRkZfVF9DKDB4MDAwMDAwMDAwMDAwMDAwMCkgLU1QUk5UX09GRl9UX0MoMSk7IGNvX3Rlc3RbaV0uZXhwZWN0ZWQgPSAiLTEiOworCisgIG51bV9jb2ZmdF90ZXN0cyA9IGk7CisKKyNlbmRpZgorCisgIGZvcihpPTE7IGk8PW51bV9jb2ZmdF90ZXN0czsgaSsrKSB7CisKKyAgICBmb3Ioaj0wOyBqPEJVRlNaOyBqKyspCisgICAgICBjb190ZXN0W2ldLnJlc3VsdFtqXSA9ICdYJzsKKyAgICBjb190ZXN0W2ldLnJlc3VsdFtCVUZTWi0xXSA9ICdcMCc7CisKKyAgICAodm9pZCljdXJsX21zcHJpbnRmKGNvX3Rlc3RbaV0ucmVzdWx0LCAiJSIgRk9STUFUX09GRl9ULCBjb190ZXN0W2ldLm51bSk7CisKKyAgICBpZihtZW1jbXAoY29fdGVzdFtpXS5yZXN1bHQsCisgICAgICAgICAgICAgICBjb190ZXN0W2ldLmV4cGVjdGVkLAorICAgICAgICAgICAgICAgc3RybGVuKGNvX3Rlc3RbaV0uZXhwZWN0ZWQpKSkgeworICAgICAgcHJpbnRmKCJjdXJsX29mZl90IHRlc3QgIyUuMmQ6IEZhaWxlZCAoRXhwZWN0ZWQ6ICVzIEdvdDogJXMpXG4iLAorICAgICAgICAgICAgIGksIGNvX3Rlc3RbaV0uZXhwZWN0ZWQsIGNvX3Rlc3RbaV0ucmVzdWx0KTsKKyAgICAgIGZhaWxlZCsrOworICAgIH0KKworICB9CisKKyAgaWYoIWZhaWxlZCkKKyAgICBwcmludGYoIkFsbCBjdXJsX21wcmludGYoKSBjdXJsX29mZl90IHRlc3RzIE9LIVxuIik7CisgIGVsc2UKKyAgICBwcmludGYoIlNvbWUgY3VybF9tcHJpbnRmKCkgY3VybF9vZmZfdCB0ZXN0cyBGYWlsZWQhXG4iKTsKKworICByZXR1cm4gZmFpbGVkOworfQorCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgaW50IGVycm9ycyA9IDA7CisgICh2b2lkKVVSTDsgLyogbm90IHVzZWQgKi8KKworICBlcnJvcnMgKz0gdGVzdF91bnNpZ25lZF9zaG9ydF9mb3JtYXR0aW5nKCk7CisKKyAgZXJyb3JzICs9IHRlc3Rfc2lnbmVkX3Nob3J0X2Zvcm1hdHRpbmcoKTsKKworICBlcnJvcnMgKz0gdGVzdF91bnNpZ25lZF9pbnRfZm9ybWF0dGluZygpOworCisgIGVycm9ycyArPSB0ZXN0X3NpZ25lZF9pbnRfZm9ybWF0dGluZygpOworCisgIGVycm9ycyArPSB0ZXN0X3Vuc2lnbmVkX2xvbmdfZm9ybWF0dGluZygpOworCisgIGVycm9ycyArPSB0ZXN0X3NpZ25lZF9sb25nX2Zvcm1hdHRpbmcoKTsKKworICBlcnJvcnMgKz0gdGVzdF9jdXJsX29mZl90X2Zvcm1hdHRpbmcoKTsKKworICBpZihlcnJvcnMpCisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NjAuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiZTFjNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTYwLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgInRlc3R1dGlsLmgiCisjaW5jbHVkZSAid2Fybmxlc3MuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjZGVmaW5lIFRFU1RfSEFOR19USU1FT1VUIDYwICogMTAwMAorCisvKgorICogU2ltcGx5IGRvd25sb2FkIGEgSFRUUFMgZmlsZSEKKyAqCisgKiBUaGlzIHRlc3Qgd2FzIGFkZGVkIGFmdGVyIHRoZSBIVFRQUy11c2luZy1tdWx0aS1pbnRlcmZhY2Ugd2l0aCBPcGVuU1NMCisgKiByZWdyZXNzaW9uIG9mIDcuMTkuMSB0byBob3BlZnVsbHkgcHJldmVudCB0aGlzIGVtYmFyYXNzaW5nIG1pc3Rha2UgZnJvbQorICogYXBwZWFyaW5nIGFnYWluLi4uIFVuZm9ydHVuYXRlbHkgdGhlIGJ1ZyB3YXNuJ3QgdHJpZ2dlcmVkIGJ5IHRoaXMgdGVzdCwKKyAqIHdoaWNoIHByZXN1bWFibHkgaXMgYmVjYXVzZSB0aGUgY29ubmVjdCB0byBhIGxvY2FsIHNlcnZlciBpcyB0b28KKyAqIGZhc3QvZGlmZmVyZW50IGNvbXBhcmVkIHRvIHRoZSByZWFsL2Rpc3RhbnQgc2VydmVycyB3ZSBzYXcgdGhlIGJ1ZyBoYXBwZW4KKyAqIHdpdGguCisgKi8KK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTCAqaHR0cF9oYW5kbGUgPSBOVUxMOworICBDVVJMTSAqbXVsdGlfaGFuZGxlID0gTlVMTDsKKyAgaW50IHJlcyA9IDA7CisKKyAgaW50IHN0aWxsX3J1bm5pbmc7IC8qIGtlZXAgbnVtYmVyIG9mIHJ1bm5pbmcgaGFuZGxlcyAqLworCisgIHN0YXJ0X3Rlc3RfdGltaW5nKCk7CisKKyAgLyoKKyAgKiogY3VybF9nbG9iYWxfaW5pdCBjYWxsZWQgaW5kaXJlY3RseSBmcm9tIGN1cmxfZWFzeV9pbml0LgorICAqLworCisgIGVhc3lfaW5pdChodHRwX2hhbmRsZSk7CisKKyAgLyogc2V0IG9wdGlvbnMgKi8KKyAgZWFzeV9zZXRvcHQoaHR0cF9oYW5kbGUsIENVUkxPUFRfVVJMLCBVUkwpOworICBlYXN5X3NldG9wdChodHRwX2hhbmRsZSwgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKyAgZWFzeV9zZXRvcHQoaHR0cF9oYW5kbGUsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDBMKTsKKyAgZWFzeV9zZXRvcHQoaHR0cF9oYW5kbGUsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDBMKTsKKworICAvKiBpbml0IGEgbXVsdGkgc3RhY2sgKi8KKyAgbXVsdGlfaW5pdChtdWx0aV9oYW5kbGUpOworCisgIC8qIGFkZCB0aGUgaW5kaXZpZHVhbCB0cmFuc2ZlcnMgKi8KKyAgbXVsdGlfYWRkX2hhbmRsZShtdWx0aV9oYW5kbGUsIGh0dHBfaGFuZGxlKTsKKworICAvKiB3ZSBzdGFydCBzb21lIGFjdGlvbiBieSBjYWxsaW5nIHBlcmZvcm0gcmlnaHQgYXdheSAqLworICBtdWx0aV9wZXJmb3JtKG11bHRpX2hhbmRsZSwgJnN0aWxsX3J1bm5pbmcpOworCisgIGFib3J0X29uX3Rlc3RfdGltZW91dCgpOworCisgIHdoaWxlKHN0aWxsX3J1bm5pbmcpIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworCisgICAgZmRfc2V0IGZkcmVhZDsKKyAgICBmZF9zZXQgZmR3cml0ZTsKKyAgICBmZF9zZXQgZmRleGNlcDsKKyAgICBpbnQgbWF4ZmQgPSAtOTk7CisKKyAgICBGRF9aRVJPKCZmZHJlYWQpOworICAgIEZEX1pFUk8oJmZkd3JpdGUpOworICAgIEZEX1pFUk8oJmZkZXhjZXApOworCisgICAgLyogc2V0IGEgc3VpdGFibGUgdGltZW91dCB0byBwbGF5IGFyb3VuZCB3aXRoICovCisgICAgdGltZW91dC50dl9zZWMgPSAxOworICAgIHRpbWVvdXQudHZfdXNlYyA9IDA7CisKKyAgICAvKiBnZXQgZmlsZSBkZXNjcmlwdG9ycyBmcm9tIHRoZSB0cmFuc2ZlcnMgKi8KKyAgICBtdWx0aV9mZHNldChtdWx0aV9oYW5kbGUsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJm1heGZkKTsKKworICAgIC8qIEF0IHRoaXMgcG9pbnQsIG1heGZkIGlzIGd1YXJhbnRlZWQgdG8gYmUgZ3JlYXRlciBvciBlcXVhbCB0aGFuIC0xLiAqLworCisgICAgc2VsZWN0X3Rlc3QobWF4ZmQrMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmdGltZW91dCk7CisKKyAgICBhYm9ydF9vbl90ZXN0X3RpbWVvdXQoKTsKKworICAgIC8qIHRpbWVvdXQgb3IgcmVhZGFibGUvd3JpdGFibGUgc29ja2V0cyAqLworICAgIG11bHRpX3BlcmZvcm0obXVsdGlfaGFuZGxlLCAmc3RpbGxfcnVubmluZyk7CisKKyAgICBhYm9ydF9vbl90ZXN0X3RpbWVvdXQoKTsKKyAgfQorCit0ZXN0X2NsZWFudXA6CisKKyAgLyogdW5kb2N1bWVudGVkIGNsZWFudXAgc2VxdWVuY2UgLSB0eXBlIFVBICovCisKKyAgY3VybF9tdWx0aV9jbGVhbnVwKG11bHRpX2hhbmRsZSk7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGh0dHBfaGFuZGxlKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU2Mi5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWYwZWE1Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NjIuYwpAQCAtMCwwICsxLDczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKgorICogRnJvbSAiS05PV05fQlVHUyIgQXByaWwgMjAwOToKKworIDU5LiBJZiB0aGUgQ1VSTE9QVF9QT1JUIG9wdGlvbiBpcyB1c2VkIG9uIGFuIEZUUCBVUkwgbGlrZQorICJmdHA6Ly9leGFtcGxlLmNvbS9maWxlO3R5cGU9QSIgdGhlICI7dHlwZT1BIiBpcyBzdHJpcHBlZCBvZmYuCisKKyAqLworCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkwgKmN1cmw7CisgIENVUkxjb2RlIHJlcyA9IENVUkxFX09LOworCisgIGlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZ2xvYmFsX2luaXQoKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICAvKiBnZXQgYSBjdXJsIGhhbmRsZSAqLworICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICAvKiBlbmFibGUgdmVyYm9zZSAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICAvKiBzZXQgcG9ydCBudW1iZXIgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1JULCBzdHJ0b2wobGlidGVzdF9hcmcyLCBOVUxMLCAxMCkpOworCisgIC8qIHNwZWNpZnkgdGFyZ2V0ICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsQ1VSTE9QVF9VUkwsIFVSTCk7CisKKyAgLyogTm93IHJ1biBvZmYgYW5kIGRvIHdoYXQgeW91J3ZlIGJlZW4gdG9sZCEgKi8KKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKK3Rlc3RfY2xlYW51cDoKKworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU2NC5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDAwZTFiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NjQuYwpAQCAtMCwwICsxLDkzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAidGVzdHV0aWwuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNkZWZpbmUgVEVTVF9IQU5HX1RJTUVPVVQgNjAgKiAxMDAwCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgaW50IHJlcyA9IDA7CisgIENVUkwgKmN1cmwgPSBOVUxMOworICBpbnQgcnVubmluZzsKKyAgQ1VSTE0gKm0gPSBOVUxMOworCisgIHN0YXJ0X3Rlc3RfdGltaW5nKCk7CisKKyAgZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKworICBlYXN5X2luaXQoY3VybCk7CisKKyAgZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST1hZLCBsaWJ0ZXN0X2FyZzIpOworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST1hZVFlQRSwgQ1VSTFBST1hZX1NPQ0tTNCk7CisKKyAgbXVsdGlfaW5pdChtKTsKKworICBtdWx0aV9hZGRfaGFuZGxlKG0sIGN1cmwpOworCisgIGZwcmludGYoc3RkZXJyLCAiU3RhcnQgYXQgVVJMIDBcbiIpOworCisgIGZvcig7OykgeworICAgIHN0cnVjdCB0aW1ldmFsIGludGVydmFsOworICAgIGZkX3NldCByZCwgd3IsIGV4YzsKKyAgICBpbnQgbWF4ZmQgPSAtOTk7CisKKyAgICBpbnRlcnZhbC50dl9zZWMgPSAxOworICAgIGludGVydmFsLnR2X3VzZWMgPSAwOworCisgICAgbXVsdGlfcGVyZm9ybShtLCAmcnVubmluZyk7CisKKyAgICBhYm9ydF9vbl90ZXN0X3RpbWVvdXQoKTsKKworICAgIGlmKCFydW5uaW5nKQorICAgICAgYnJlYWs7IC8qIGRvbmUgKi8KKworICAgIEZEX1pFUk8oJnJkKTsKKyAgICBGRF9aRVJPKCZ3cik7CisgICAgRkRfWkVSTygmZXhjKTsKKworICAgIG11bHRpX2Zkc2V0KG0sICZyZCwgJndyLCAmZXhjLCAmbWF4ZmQpOworCisgICAgLyogQXQgdGhpcyBwb2ludCwgbWF4ZmQgaXMgZ3VhcmFudGVlZCB0byBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gLTEuICovCisKKyAgICBzZWxlY3RfdGVzdChtYXhmZCsxLCAmcmQsICZ3ciwgJmV4YywgJmludGVydmFsKTsKKworICAgIGFib3J0X29uX3Rlc3RfdGltZW91dCgpOworICB9CisKK3Rlc3RfY2xlYW51cDoKKworICAvKiB1bmRvY3VtZW50ZWQgY2xlYW51cCBzZXF1ZW5jZSAtIHR5cGUgVUIgKi8KKworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9tdWx0aV9jbGVhbnVwKG0pOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTY2LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU2Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhODM5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU2Ni5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTGNvZGUgcmVzOworICBDVVJMICpjdXJsOworCisgIGRvdWJsZSBjb250ZW50X2xlbmd0aCA9IDM7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUiwgMUwpOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgIGlmKCFyZXMpIHsKKyAgICBGSUxFICptb287CisgICAgcmVzID0gY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfRE9XTkxPQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRlbnRfbGVuZ3RoKTsKKyAgICBtb28gPSBmb3BlbihsaWJ0ZXN0X2FyZzIsICJ3YiIpOworICAgIGlmKG1vbykgeworICAgICAgZnByaW50Zihtb28sICJDTDogJS4wZlxuIiwgY29udGVudF9sZW5ndGgpOworICAgICAgZmNsb3NlKG1vbyk7CisgICAgfQorICB9CisKK3Rlc3RfY2xlYW51cDoKKworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAoaW50KXJlczsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NjcuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTY3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczNTI5YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTY3LmMKQEAgLTAsMCArMSw2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyoKKyAqIFRlc3QgYSBzaW1wbGUgT1BUSU9OUyByZXF1ZXN0IHdpdGggYSBjdXN0b20gaGVhZGVyCisgKi8KK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTGNvZGUgcmVzOworICBDVVJMICpjdXJsOworICBzdHJ1Y3QgY3VybF9zbGlzdCAqY3VzdG9tX2hlYWRlcnM9TlVMTDsKKworICBpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgLyogRHVtcCBkYXRhIHRvIHN0ZG91dCBmb3IgcHJvdG9jb2wgdmVyaWZpY2F0aW9uICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSREFUQSwgc3Rkb3V0KTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURURBVEEsIHN0ZG91dCk7CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJLCBVUkwpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfUkVRVUVTVCwgQ1VSTF9SVFNQUkVRX09QVElPTlMpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VTRVJBR0VOVCwgInRlc3Q1NjciKTsKKworICBjdXN0b21faGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGN1c3RvbV9oZWFkZXJzLCAiVGVzdC1OdW1iZXI6IDU2NyIpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BIRUFERVIsIGN1c3RvbV9oZWFkZXJzKTsKKworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKwordGVzdF9jbGVhbnVwOgorCisgIGlmKGN1c3RvbV9oZWFkZXJzKQorICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwoY3VzdG9tX2hlYWRlcnMpOworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAoaW50KXJlczsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NjguYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTY4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxNTgyMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTY4LmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qIGJ1aWxkIHJlcXVlc3QgdXJsICovCitzdGF0aWMgY2hhciAqc3VidXJsKGNvbnN0IGNoYXIgKmJhc2UsIGludCBpKQoreworICByZXR1cm4gY3VybF9tYXByaW50ZigiJXMlLjRkIiwgYmFzZSwgaSk7Cit9CisKKy8qCisgKiBUZXN0IHRoZSBDbGllbnQtPlNlcnZlciBBTk5PVU5DRSBmdW5jdGlvbmFsaXR5IChQVVQgc3R5bGUpCisgKi8KK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgaW50IHJlczsKKyAgQ1VSTCAqY3VybDsKKyAgaW50IHNkcDsKKyAgRklMRSAqc2RwZiA9IE5VTEw7CisgIHN0cnVjdF9zdGF0IGZpbGVfaW5mbzsKKyAgY2hhciAqc3RyZWFtX3VyaSA9IE5VTEw7CisgIGludCByZXF1ZXN0PTE7CisgIHN0cnVjdCBjdXJsX3NsaXN0ICpjdXN0b21faGVhZGVycz1OVUxMOworCisgIGlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZ2xvYmFsX2luaXQoKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUkRBVEEsIHN0ZG91dCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVEQVRBLCBzdGRvdXQpOworCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworCisgIGlmKChzdHJlYW1fdXJpID0gc3VidXJsKFVSTCwgcmVxdWVzdCsrKSkgPT0gTlVMTCkgeworICAgIHJlcyA9IFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKyAgfQorICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfU1RSRUFNX1VSSSwgc3RyZWFtX3VyaSk7CisgIGZyZWUoc3RyZWFtX3VyaSk7CisgIHN0cmVhbV91cmkgPSBOVUxMOworCisgIHNkcCA9IG9wZW4oImxvZy9maWxlNTY4LnR4dCIsIE9fUkRPTkxZKTsKKyAgZnN0YXQoc2RwLCAmZmlsZV9pbmZvKTsKKyAgY2xvc2Uoc2RwKTsKKworICBzZHBmID0gZm9wZW4oImxvZy9maWxlNTY4LnR4dCIsICJyYiIpOworICBpZihzZHBmID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImNhbid0IG9wZW4gbG9nL2ZpbGU1NjgudHh0XG4iKTsKKyAgICByZXMgPSBURVNUX0VSUl9NQUpPUl9CQUQ7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxfUlRTUFJFUV9BTk5PVU5DRSk7CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFEREFUQSwgc2RwZik7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVBMT0FELCAxTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU5GSUxFU0laRV9MQVJHRSwgKGN1cmxfb2ZmX3QpIGZpbGVfaW5mby5zdF9zaXplKTsKKworICAvKiBEbyB0aGUgQU5OT1VOQ0UgKi8KKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGlmKHJlcykKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VQTE9BRCwgMEwpOworICBmY2xvc2Uoc2RwZik7CisgIHNkcGYgPSBOVUxMOworCisgIC8qIE1ha2Ugc3VyZSB3ZSBjYW4gZG8gYSBub3JtYWwgcmVxdWVzdCBub3cgKi8KKyAgaWYoKHN0cmVhbV91cmkgPSBzdWJ1cmwoVVJMLCByZXF1ZXN0KyspKSA9PSBOVUxMKSB7CisgICAgcmVzID0gVEVTVF9FUlJfTUFKT1JfQkFEOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJLCBzdHJlYW1fdXJpKTsKKyAgZnJlZShzdHJlYW1fdXJpKTsKKyAgc3RyZWFtX3VyaSA9IE5VTEw7CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxfUlRTUFJFUV9ERVNDUklCRSk7CisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworICBpZihyZXMpCisgICAgZ290byB0ZXN0X2NsZWFudXA7CisKKyAgLyogTm93IGRvIGEgUE9TVCBzdHlsZSBvbmUgKi8KKworICBpZigoc3RyZWFtX3VyaSA9IHN1YnVybChVUkwsIHJlcXVlc3QrKykpID09IE5VTEwpIHsKKyAgICByZXMgPSBURVNUX0VSUl9NQUpPUl9CQUQ7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1NUUkVBTV9VUkksIHN0cmVhbV91cmkpOworICBmcmVlKHN0cmVhbV91cmkpOworICBzdHJlYW1fdXJpID0gTlVMTDsKKworICBjdXN0b21faGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGN1c3RvbV9oZWFkZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IHBvc3R5IGdvb2RuZXNzIik7CisgIGlmKCFjdXN0b21faGVhZGVycykgeworICAgIHJlcyA9IFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKyAgfQorICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BIRUFERVIsIGN1c3RvbV9oZWFkZXJzKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxfUlRTUFJFUV9BTk5PVU5DRSk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9TVEZJRUxEUywgInBvc3R5ZmllbGQ9cG9zdHlzdHVmZiZwcm9qZWN0PWN1cmxcbiIpOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworICBpZihyZXMpCisgICAgZ290byB0ZXN0X2NsZWFudXA7CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCBOVUxMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQSEVBREVSLCBOVUxMKTsKKyAgY3VybF9zbGlzdF9mcmVlX2FsbChjdXN0b21faGVhZGVycyk7CisgIGN1c3RvbV9oZWFkZXJzID0gTlVMTDsKKworICAvKiBNYWtlIHN1cmUgd2UgY2FuIGRvIGEgbm9ybWFsIHJlcXVlc3Qgbm93ICovCisgIGlmKChzdHJlYW1fdXJpID0gc3VidXJsKFVSTCwgcmVxdWVzdCsrKSkgPT0gTlVMTCkgeworICAgIHJlcyA9IFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKyAgfQorICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfU1RSRUFNX1VSSSwgc3RyZWFtX3VyaSk7CisgIGZyZWUoc3RyZWFtX3VyaSk7CisgIHN0cmVhbV91cmkgPSBOVUxMOworCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9SRVFVRVNULCBDVVJMX1JUU1BSRVFfT1BUSU9OUyk7CisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCit0ZXN0X2NsZWFudXA6CisKKyAgaWYoc2RwZikKKyAgICBmY2xvc2Uoc2RwZik7CisKKyAgaWYoc3RyZWFtX3VyaSkKKyAgICBmcmVlKHN0cmVhbV91cmkpOworCisgIGlmKGN1c3RvbV9oZWFkZXJzKQorICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwoY3VzdG9tX2hlYWRlcnMpOworCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIHJlczsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NjkuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTY5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzNGQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTY5LmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgPGN1cmwvbXByaW50Zi5oPgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogYnVpbGQgcmVxdWVzdCB1cmwgKi8KK3N0YXRpYyBjaGFyICpzdWJ1cmwoY29uc3QgY2hhciAqYmFzZSwgaW50IGkpCit7CisgIHJldHVybiBjdXJsX21hcHJpbnRmKCIlcyUuNGQiLCBiYXNlLCBpKTsKK30KKworLyoKKyAqIFRlc3QgU2Vzc2lvbiBJRCBjYXB0dXJlCisgKi8KK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgaW50IHJlczsKKyAgQ1VSTCAqY3VybDsKKyAgY2hhciAqc3RyZWFtX3VyaSA9IE5VTEw7CisgIGNoYXIgKnJ0c3Bfc2Vzc2lvbl9pZDsKKyAgaW50IHJlcXVlc3Q9MTsKKyAgaW50IGk7CisgIEZJTEUgKmlkZmlsZSA9IE5VTEw7CisKKyAgaWRmaWxlID0gZm9wZW4obGlidGVzdF9hcmcyLCAid2IiKTsKKyAgaWYoaWRmaWxlID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImNvdWxkbid0IG9wZW4gdGhlIFNlc3Npb24gSUQgRmlsZVxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZ2xvYmFsX2luaXQoKSBmYWlsZWRcbiIpOworICAgIGZjbG9zZShpZGZpbGUpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIGZjbG9zZShpZGZpbGUpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUkRBVEEsIHN0ZG91dCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVEQVRBLCBzdGRvdXQpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfUkVRVUVTVCwgQ1VSTF9SVFNQUkVRX1NFVFVQKTsKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGlmKHJlcyAhPSAoaW50KUNVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiVGhpcyBzaG91bGQgaGF2ZSBmYWlsZWQuICIKKyAgICAgICAgICAgICJDYW5ub3Qgc2V0dXAgd2l0aG91dCBhIFRyYW5zcG9ydDogaGVhZGVyIik7CisgICAgcmVzID0gVEVTVF9FUlJfTUFKT1JfQkFEOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisKKyAgLyogR28gdGhyb3VnaCB0aGUgdmFyaW91cyBTZXNzaW9uIElEcyAqLworICBmb3IoaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICBpZigoc3RyZWFtX3VyaSA9IHN1YnVybChVUkwsIHJlcXVlc3QrKykpID09IE5VTEwpIHsKKyAgICAgIHJlcyA9IFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICAgIH0KKyAgICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfU1RSRUFNX1VSSSwgc3RyZWFtX3VyaSk7CisgICAgZnJlZShzdHJlYW1fdXJpKTsKKyAgICBzdHJlYW1fdXJpID0gTlVMTDsKKworICAgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9SRVFVRVNULCBDVVJMX1JUU1BSRVFfU0VUVVApOworICAgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9UUkFOU1BPUlQsICJGYWtlL05vdFJlYWwvSnVzdEFUZXN0O2Zvbz1iYXoiKTsKKyAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKyAgICBpZihyZXMpCisgICAgICBnb3RvIHRlc3RfY2xlYW51cDsKKworICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX1JUU1BfU0VTU0lPTl9JRCwgJnJ0c3Bfc2Vzc2lvbl9pZCk7CisgICAgZnByaW50ZihpZGZpbGUsICJHb3QgU2Vzc2lvbiBJRDogWyVzXVxuIiwgcnRzcF9zZXNzaW9uX2lkKTsKKyAgICBydHNwX3Nlc3Npb25faWQgPSBOVUxMOworCisgICAgaWYoKHN0cmVhbV91cmkgPSBzdWJ1cmwoVVJMLCByZXF1ZXN0KyspKSA9PSBOVUxMKSB7CisgICAgICByZXMgPSBURVNUX0VSUl9NQUpPUl9CQUQ7CisgICAgICBnb3RvIHRlc3RfY2xlYW51cDsKKyAgICB9CisgICAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1NUUkVBTV9VUkksIHN0cmVhbV91cmkpOworICAgIGZyZWUoc3RyZWFtX3VyaSk7CisgICAgc3RyZWFtX3VyaSA9IE5VTEw7CisKKyAgICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfUkVRVUVTVCwgQ1VSTF9SVFNQUkVRX1RFQVJET1dOKTsKKyAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKworICAgIC8qIENsZWFyIGZvciB0aGUgbmV4dCBnby1yb3VuZCAqLworICAgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9TRVNTSU9OX0lELCBOVUxMKTsKKyAgfQorCit0ZXN0X2NsZWFudXA6CisKKyAgaWYoaWRmaWxlKQorICAgIGZjbG9zZShpZGZpbGUpOworCisgIGlmKHN0cmVhbV91cmkpCisgICAgZnJlZShzdHJlYW1fdXJpKTsKKworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiByZXM7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTcwLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU3MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZmFjOTkKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU3MC5jCkBAIC0wLDAgKzEsMTE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qIGJ1aWxkIHJlcXVlc3QgdXJsICovCitzdGF0aWMgY2hhciAqc3VidXJsKGNvbnN0IGNoYXIgKmJhc2UsIGludCBpKQoreworICByZXR1cm4gY3VybF9tYXByaW50ZigiJXMlLjRkIiwgYmFzZSwgaSk7Cit9CisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgaW50IHJlczsKKyAgQ1VSTCAqY3VybDsKKyAgaW50IHJlcXVlc3Q9MTsKKyAgY2hhciAqc3RyZWFtX3VyaSA9IE5VTEw7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSEVBREVSREFUQSwgc3Rkb3V0KTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURURBVEEsIHN0ZG91dCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9SRVFVRVNULCBDVVJMX1JUU1BSRVFfT1BUSU9OUyk7CisKKyAgaWYoKHN0cmVhbV91cmkgPSBzdWJ1cmwoVVJMLCByZXF1ZXN0KyspKSA9PSBOVUxMKSB7CisgICAgcmVzID0gVEVTVF9FUlJfTUFKT1JfQkFEOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJLCBzdHJlYW1fdXJpKTsKKyAgZnJlZShzdHJlYW1fdXJpKTsKKyAgc3RyZWFtX3VyaSA9IE5VTEw7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGlmKHJlcyAhPSAoaW50KUNVUkxFX1JUU1BfQ1NFUV9FUlJPUikgeworICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGRldGVjdCBDU2VxIG1pc21hdGNoIik7CisgICAgcmVzID0gVEVTVF9FUlJfTUFKT1JfQkFEOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX0NMSUVOVF9DU0VRLCA5OTkpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfVFJBTlNQT1JULAorICAgICAgICAgICAgICAgICAgICAiUkFXL1JBVy9VRFA7dW5pY2FzdDtjbGllbnRfcG9ydD0zMDU2LTMwNTciKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxfUlRTUFJFUV9TRVRVUCk7CisKKyAgaWYoKHN0cmVhbV91cmkgPSBzdWJ1cmwoVVJMLCByZXF1ZXN0KyspKSA9PSBOVUxMKSB7CisgICAgcmVzID0gVEVTVF9FUlJfTUFKT1JfQkFEOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJLCBzdHJlYW1fdXJpKTsKKyAgZnJlZShzdHJlYW1fdXJpKTsKKyAgc3RyZWFtX3VyaSA9IE5VTEw7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGlmKHJlcykKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfUkVRVUVTVCwgQ1VSTF9SVFNQUkVRX1BMQVkpOworCisgIGlmKChzdHJlYW1fdXJpID0gc3VidXJsKFVSTCwgcmVxdWVzdCsrKSkgPT0gTlVMTCkgeworICAgIHJlcyA9IFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKyAgfQorICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfU1RSRUFNX1VSSSwgc3RyZWFtX3VyaSk7CisgIGZyZWUoc3RyZWFtX3VyaSk7CisgIHN0cmVhbV91cmkgPSBOVUxMOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworICBpZihyZXMgIT0gQ1VSTEVfUlRTUF9TRVNTSU9OX0VSUk9SKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZGV0ZWN0IGEgU2Vzc2lvbiBJRCBtaXNtYXRjaCIpOworICB9CisKK3Rlc3RfY2xlYW51cDoKKworICBpZihzdHJlYW1fdXJpKQorICAgIGZyZWUoc3RyZWFtX3VyaSk7CisKKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gcmVzOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU3MS5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTBhYTFjCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NzEuYwpAQCAtMCwwICsxLDIxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyMgIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorIyAgaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjICBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjICBpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBSVFBfUEtUX0NIQU5ORUwocCkgICAoKGludCkoKHVuc2lnbmVkIGNoYXIpKChwKVsxXSkpKQorCisjZGVmaW5lIFJUUF9QS1RfTEVOR1RIKHApICAoKCgoaW50KSgodW5zaWduZWQgY2hhcikoKHApWzJdKSkpIDw8IDgpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGludCkoKHVuc2lnbmVkIGNoYXIpKChwKVszXSkpKSkKKworI2RlZmluZSBSVFBfREFUQV9TSVpFIDEyCitzdGF0aWMgY29uc3QgY2hhciAqUlRQX0RBVEEgPSAiJF8xMjM0XG5cMGFzZGYiOworCitzdGF0aWMgaW50IHJ0cF9wYWNrZXRfY291bnQgPSAwOworCitzdGF0aWMgc2l6ZV90IHJ0cF93cml0ZSh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnN0cmVhbSkgeworICBjaGFyICpkYXRhID0gKGNoYXIgKilwdHI7CisgIGludCBjaGFubmVsID0gUlRQX1BLVF9DSEFOTkVMKGRhdGEpOworICBpbnQgbWVzc2FnZV9zaXplOworICBpbnQgY29kZWRfc2l6ZSA9IFJUUF9QS1RfTEVOR1RIKGRhdGEpOworICBzaXplX3QgZmFpbHVyZSA9IChzaXplICogbm1lbWIpID8gMCA6IDE7CisgIGludCBpOworICAodm9pZClzdHJlYW07CisKKyAgbWVzc2FnZV9zaXplID0gY3VybHhfdXp0b3NpKHNpemUgKiBubWVtYikgLSA0OworCisgIHByaW50ZigiUlRQOiBtZXNzYWdlIHNpemUgJWQsIGNoYW5uZWwgJWRcbiIsIG1lc3NhZ2Vfc2l6ZSwgY2hhbm5lbCk7CisgIGlmKG1lc3NhZ2Vfc2l6ZSAhPSBjb2RlZF9zaXplKSB7CisgICAgcHJpbnRmKCJSVFAgZW1iZWRkZWQgc2l6ZSAoJWQpIGRvZXMgbm90IG1hdGNoIHRoZSB3cml0ZSBzaXplICglZCkuXG4iLAorICAgICAgICAgICBjb2RlZF9zaXplLCBtZXNzYWdlX3NpemUpOworICAgIHJldHVybiBmYWlsdXJlOworICB9CisKKyAgZGF0YSArPSA0OworICBmb3IoaSA9IDA7IGkgPCBtZXNzYWdlX3NpemU7IGkrPSBSVFBfREFUQV9TSVpFKSB7CisgICAgaWYobWVzc2FnZV9zaXplIC0gaSA+IFJUUF9EQVRBX1NJWkUpIHsKKyAgICAgIGlmKG1lbWNtcChSVFBfREFUQSwgZGF0YSArIGksIFJUUF9EQVRBX1NJWkUpICE9IDApIHsKKyAgICAgICAgcHJpbnRmKCJSVFAgUEFZTE9BRCBDT1JSVVBURUQgWyVzXVxuIiwgZGF0YSArIGkpOworICAgICAgICByZXR1cm4gZmFpbHVyZTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgKG1lbWNtcChSVFBfREFUQSwgZGF0YSArIGksIG1lc3NhZ2Vfc2l6ZSAtIGkpICE9IDApIHsKKyAgICAgICAgcHJpbnRmKCJSVFAgUEFZTE9BRCBFTkQgQ09SUlVQVEVEICglZCksIFslc11cbiIsCisgICAgICAgICAgICAgICBtZXNzYWdlX3NpemUgLSBpLCBkYXRhICsgaSk7CisgICAgICAgIHJldHVybiBmYWlsdXJlOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJ0cF9wYWNrZXRfY291bnQrKzsKKyAgZnByaW50ZihzdGRlcnIsICJwYWNrZXQgY291bnQgaXMgJWRcbiIsIHJ0cF9wYWNrZXRfY291bnQpOworCisgIHJldHVybiBzaXplICogbm1lbWI7Cit9CisKKy8qIGJ1aWxkIHJlcXVlc3QgdXJsICovCitzdGF0aWMgY2hhciAqc3VidXJsKGNvbnN0IGNoYXIgKmJhc2UsIGludCBpKQoreworICByZXR1cm4gY3VybF9tYXByaW50ZigiJXMlLjRkIiwgYmFzZSwgaSk7Cit9CisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgaW50IHJlczsKKyAgQ1VSTCAqY3VybDsKKyAgY2hhciAqc3RyZWFtX3VyaSA9IE5VTEw7CisgIGludCByZXF1ZXN0PTE7CisgIEZJTEUgKnByb3RvZmlsZSA9IE5VTEw7CisKKyAgcHJvdG9maWxlID0gZm9wZW4obGlidGVzdF9hcmcyLCAid2IiKTsKKyAgaWYocHJvdG9maWxlID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IG9wZW4gdGhlIHByb3RvY29sIGR1bXAgZmlsZVxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZ2xvYmFsX2luaXQoKSBmYWlsZWRcbiIpOworICAgIGZjbG9zZShwcm90b2ZpbGUpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgZmNsb3NlKHByb3RvZmlsZSk7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisKKyAgaWYoKHN0cmVhbV91cmkgPSBzdWJ1cmwoVVJMLCByZXF1ZXN0KyspKSA9PSBOVUxMKSB7CisgICAgcmVzID0gVEVTVF9FUlJfTUFKT1JfQkFEOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJLCBzdHJlYW1fdXJpKTsKKyAgZnJlZShzdHJlYW1fdXJpKTsKKyAgc3RyZWFtX3VyaSA9IE5VTEw7CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTlRFUkxFQVZFRlVOQ1RJT04sIHJ0cF93cml0ZSk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVElNRU9VVCwgMyk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFREFUQSwgcHJvdG9maWxlKTsKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfVFJBTlNQT1JULCAiUlRQL0FWUC9UQ1A7aW50ZXJsZWF2ZWQ9MC0xIik7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9SRVFVRVNULCBDVVJMX1JUU1BSRVFfU0VUVVApOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworICBpZihyZXMpCisgICAgZ290byB0ZXN0X2NsZWFudXA7CisKKyAgLyogVGhpcyBQTEFZIHN0YXJ0cyB0aGUgaW50ZXJsZWF2ZSAqLworICBpZigoc3RyZWFtX3VyaSA9IHN1YnVybChVUkwsIHJlcXVlc3QrKykpID09IE5VTEwpIHsKKyAgICByZXMgPSBURVNUX0VSUl9NQUpPUl9CQUQ7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1NUUkVBTV9VUkksIHN0cmVhbV91cmkpOworICBmcmVlKHN0cmVhbV91cmkpOworICBzdHJlYW1fdXJpID0gTlVMTDsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxfUlRTUFJFUV9QTEFZKTsKKworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKyAgaWYocmVzKQorICAgIGdvdG8gdGVzdF9jbGVhbnVwOworCisgIC8qIFRoZSBERVNDUklCRSByZXF1ZXN0IHdpbGwgdHJ5IHRvIGNvbnN1bWUgZGF0YSBhZnRlciB0aGUgQ29udGVudCAqLworICBpZigoc3RyZWFtX3VyaSA9IHN1YnVybChVUkwsIHJlcXVlc3QrKykpID09IE5VTEwpIHsKKyAgICByZXMgPSBURVNUX0VSUl9NQUpPUl9CQUQ7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1NUUkVBTV9VUkksIHN0cmVhbV91cmkpOworICBmcmVlKHN0cmVhbV91cmkpOworICBzdHJlYW1fdXJpID0gTlVMTDsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxfUlRTUFJFUV9ERVNDUklCRSk7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGlmKHJlcykKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKworICBpZigoc3RyZWFtX3VyaSA9IHN1YnVybChVUkwsIHJlcXVlc3QrKykpID09IE5VTEwpIHsKKyAgICByZXMgPSBURVNUX0VSUl9NQUpPUl9CQUQ7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1NUUkVBTV9VUkksIHN0cmVhbV91cmkpOworICBmcmVlKHN0cmVhbV91cmkpOworICBzdHJlYW1fdXJpID0gTlVMTDsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxfUlRTUFJFUV9QTEFZKTsKKworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKyAgaWYocmVzKQorICAgIGdvdG8gdGVzdF9jbGVhbnVwOworCisgIGZwcmludGYoc3RkZXJyLCAiUExBWSBDT01QTEVURVxuIik7CisKKyAgLyogVXNlIFJlY2VpdmUgdG8gZ2V0IHRoZSByZXN0IG9mIHRoZSBkYXRhICovCisgIHdoaWxlKCFyZXMgJiYgcnRwX3BhY2tldF9jb3VudCA8IDEzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJMT09QWSBMT09QIVxuIik7CisgICAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxfUlRTUFJFUV9SRUNFSVZFKTsKKyAgICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKyAgfQorCit0ZXN0X2NsZWFudXA6CisKKyAgaWYoc3RyZWFtX3VyaSkKKyAgICBmcmVlKHN0cmVhbV91cmkpOworCisgIGlmKHByb3RvZmlsZSkKKyAgICBmY2xvc2UocHJvdG9maWxlKTsKKworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiByZXM7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTcyLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU3Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZjRkMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU3Mi5jCkBAIC0wLDAgKzEsMTgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3VybC9tcHJpbnRmLmg+CisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisvKiBidWlsZCByZXF1ZXN0IHVybCAqLworc3RhdGljIGNoYXIgKnN1YnVybChjb25zdCBjaGFyICpiYXNlLCBpbnQgaSkKK3sKKyAgcmV0dXJuIGN1cmxfbWFwcmludGYoIiVzJS40ZCIsIGJhc2UsIGkpOworfQorCisvKgorICogVGVzdCBHRVRfUEFSQU1FVEVSOiBQVVQsIEhFQVJUQkVBVCwgYW5kIFBPU1QKKyAqLworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBpbnQgcmVzOworICBDVVJMICpjdXJsOworICBpbnQgcGFyYW1zOworICBGSUxFICpwYXJhbXNmID0gTlVMTDsKKyAgc3RydWN0X3N0YXQgZmlsZV9pbmZvOworICBjaGFyICpzdHJlYW1fdXJpID0gTlVMTDsKKyAgaW50IHJlcXVlc3Q9MTsKKyAgc3RydWN0IGN1cmxfc2xpc3QgKmN1c3RvbV9oZWFkZXJzPU5VTEw7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IRUFERVJEQVRBLCBzdGRvdXQpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFREFUQSwgc3Rkb3V0KTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CisKKyAgLyogU0VUVVAgKi8KKyAgaWYoKHN0cmVhbV91cmkgPSBzdWJ1cmwoVVJMLCByZXF1ZXN0KyspKSA9PSBOVUxMKSB7CisgICAgcmVzID0gVEVTVF9FUlJfTUFKT1JfQkFEOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJLCBzdHJlYW1fdXJpKTsKKyAgZnJlZShzdHJlYW1fdXJpKTsKKyAgc3RyZWFtX3VyaSA9IE5VTEw7CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1RSQU5TUE9SVCwgIlBsYW5lcy9UcmFpbnMvQXV0b21vYmlsZXMiKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxfUlRTUFJFUV9TRVRVUCk7CisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworICBpZihyZXMpCisgICAgZ290byB0ZXN0X2NsZWFudXA7CisKKyAgaWYoKHN0cmVhbV91cmkgPSBzdWJ1cmwoVVJMLCByZXF1ZXN0KyspKSA9PSBOVUxMKSB7CisgICAgcmVzID0gVEVTVF9FUlJfTUFKT1JfQkFEOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJLCBzdHJlYW1fdXJpKTsKKyAgZnJlZShzdHJlYW1fdXJpKTsKKyAgc3RyZWFtX3VyaSA9IE5VTEw7CisKKyAgLyogUFVUIHN0eWxlIEdFVF9QQVJBTUVURVJTICovCisgIHBhcmFtcyA9IG9wZW4oImxvZy9maWxlNTcyLnR4dCIsIE9fUkRPTkxZKTsKKyAgZnN0YXQocGFyYW1zLCAmZmlsZV9pbmZvKTsKKyAgY2xvc2UocGFyYW1zKTsKKworICBwYXJhbXNmID0gZm9wZW4oImxvZy9maWxlNTcyLnR4dCIsICJyYiIpOworICBpZihwYXJhbXNmID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImNhbid0IG9wZW4gbG9nL2ZpbGU1NzIudHh0XG4iKTsKKyAgICByZXMgPSBURVNUX0VSUl9NQUpPUl9CQUQ7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxfUlRTUFJFUV9HRVRfUEFSQU1FVEVSKTsKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQUREQVRBLCBwYXJhbXNmKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUExPQUQsIDFMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEVTSVpFX0xBUkdFLCAoY3VybF9vZmZfdCkgZmlsZV9pbmZvLnN0X3NpemUpOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworICBpZihyZXMpCisgICAgZ290byB0ZXN0X2NsZWFudXA7CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUExPQUQsIDBMKTsKKyAgZmNsb3NlKHBhcmFtc2YpOworICBwYXJhbXNmID0gTlVMTDsKKworICAvKiBIZWFydGJlYXQgR0VUX1BBUkFNRVRFUlMgKi8KKyAgaWYoKHN0cmVhbV91cmkgPSBzdWJ1cmwoVVJMLCByZXF1ZXN0KyspKSA9PSBOVUxMKSB7CisgICAgcmVzID0gVEVTVF9FUlJfTUFKT1JfQkFEOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJLCBzdHJlYW1fdXJpKTsKKyAgZnJlZShzdHJlYW1fdXJpKTsKKyAgc3RyZWFtX3VyaSA9IE5VTEw7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGlmKHJlcykKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKworICAvKiBQT1NUIEdFVF9QQVJBTUVURVJTICovCisKKyAgaWYoKHN0cmVhbV91cmkgPSBzdWJ1cmwoVVJMLCByZXF1ZXN0KyspKSA9PSBOVUxMKSB7CisgICAgcmVzID0gVEVTVF9FUlJfTUFKT1JfQkFEOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUlRTUF9TVFJFQU1fVVJJLCBzdHJlYW1fdXJpKTsKKyAgZnJlZShzdHJlYW1fdXJpKTsKKyAgc3RyZWFtX3VyaSA9IE5VTEw7CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1JFUVVFU1QsIENVUkxfUlRTUFJFUV9HRVRfUEFSQU1FVEVSKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCAicGFja2V0c19yZWNlaXZlZFxuaml0dGVyXG4iKTsKKworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKyAgaWYocmVzKQorICAgIGdvdG8gdGVzdF9jbGVhbnVwOworCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9TVEZJRUxEUywgTlVMTCk7CisKKyAgLyogTWFrZSBzdXJlIHdlIGNhbiBkbyBhIG5vcm1hbCByZXF1ZXN0IG5vdyAqLworICBpZigoc3RyZWFtX3VyaSA9IHN1YnVybChVUkwsIHJlcXVlc3QrKykpID09IE5VTEwpIHsKKyAgICByZXMgPSBURVNUX0VSUl9NQUpPUl9CQUQ7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SVFNQX1NUUkVBTV9VUkksIHN0cmVhbV91cmkpOworICBmcmVlKHN0cmVhbV91cmkpOworICBzdHJlYW1fdXJpID0gTlVMTDsKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JUU1BfUkVRVUVTVCwgQ1VSTF9SVFNQUkVRX09QVElPTlMpOworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKwordGVzdF9jbGVhbnVwOgorCisgIGlmKHBhcmFtc2YpCisgICAgZmNsb3NlKHBhcmFtc2YpOworCisgIGlmKHN0cmVhbV91cmkpCisgICAgZnJlZShzdHJlYW1fdXJpKTsKKworICBpZihjdXN0b21faGVhZGVycykKKyAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGN1c3RvbV9oZWFkZXJzKTsKKworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiByZXM7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTczLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU3My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OWQyNmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU3My5jCkBAIC0wLDAgKzEsMTEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJ0ZXN0dHJhY2UuaCIKKyNpbmNsdWRlICJ0ZXN0dXRpbC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBURVNUX0hBTkdfVElNRU9VVCA2MCAqIDEwMDAKKworLyoKKyAqIEdldCBhIHNpbmdsZSBVUkwgd2l0aG91dCBzZWxlY3QoKS4KKyAqLworCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkwgKmMgPSBOVUxMOworICBDVVJMTSAqbSA9IE5VTEw7CisgIGludCByZXMgPSAwOworICBpbnQgcnVubmluZyA9IDE7CisgIGRvdWJsZSBjb25uZWN0X3RpbWUgPSAwLjA7CisgIGRvdWJsZSBkYmxfZXBzaWxvbjsKKworICBkYmxfZXBzaWxvbiA9IDEuMDsKKyAgZG8geworICAgIGRibF9lcHNpbG9uIC89IDIuMDsKKyAgfSB3aGlsZSAoKGRvdWJsZSkoMS4wICsgKGRibF9lcHNpbG9uLzIuMCkpID4gKGRvdWJsZSkxLjApOworCisgIHN0YXJ0X3Rlc3RfdGltaW5nKCk7CisKKyAgZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKworICBlYXN5X2luaXQoYyk7CisKKyAgZWFzeV9zZXRvcHQoYywgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKyAgZWFzeV9zZXRvcHQoYywgQ1VSTE9QVF9VUkwsIFVSTCk7CisKKyAgbGlidGVzdF9kZWJ1Z19jb25maWcubm9oZXggPSAxOworICBsaWJ0ZXN0X2RlYnVnX2NvbmZpZy50cmFjZXRpbWUgPSAxOworICBlYXN5X3NldG9wdChjLCBDVVJMT1BUX0RFQlVHREFUQSwgJmxpYnRlc3RfZGVidWdfY29uZmlnKTsKKyAgZWFzeV9zZXRvcHQoYywgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OLCBsaWJ0ZXN0X2RlYnVnX2NiKTsKKyAgZWFzeV9zZXRvcHQoYywgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisKKyAgbXVsdGlfaW5pdChtKTsKKworICBtdWx0aV9hZGRfaGFuZGxlKG0sIGMpOworCisgIHdoaWxlIChydW5uaW5nKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICBmZF9zZXQgZmRyZWFkLCBmZHdyaXRlLCBmZGV4Y2VwOworICAgIGludCBtYXhmZCA9IC05OTsKKworICAgIHRpbWVvdXQudHZfc2VjID0gMDsKKyAgICB0aW1lb3V0LnR2X3VzZWMgPSAxMDAwMDBMOyAvKiAxMDAgbXMgKi8KKworICAgIG11bHRpX3BlcmZvcm0obSwgJnJ1bm5pbmcpOworCisgICAgYWJvcnRfb25fdGVzdF90aW1lb3V0KCk7CisKKyAgICBpZighcnVubmluZykKKyAgICAgIGJyZWFrOyAvKiBkb25lICovCisKKyAgICBGRF9aRVJPKCZmZHJlYWQpOworICAgIEZEX1pFUk8oJmZkd3JpdGUpOworICAgIEZEX1pFUk8oJmZkZXhjZXApOworCisgICAgbXVsdGlfZmRzZXQobSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOworCisgICAgLyogQXQgdGhpcyBwb2ludCwgbWF4ZmQgaXMgZ3VhcmFudGVlZCB0byBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gLTEuICovCisKKyAgICBzZWxlY3RfdGVzdChtYXhmZCsxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZ0aW1lb3V0KTsKKworICAgIGFib3J0X29uX3Rlc3RfdGltZW91dCgpOworICB9CisKKyAgY3VybF9lYXN5X2dldGluZm8oYywgQ1VSTElORk9fQ09OTkVDVF9USU1FLCAmY29ubmVjdF90aW1lKTsKKyAgaWYgKGNvbm5lY3RfdGltZSA8IGRibF9lcHNpbG9uKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjb25uZWN0IHRpbWUgaXMgPCBlcHNpbG9uXG4iKTsKKyAgICByZXMgPSBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKwordGVzdF9jbGVhbnVwOgorCisgIC8qIHByb3BlciBjbGVhbnVwIHNlcXVlbmNlIC0gdHlwZSBQQSAqLworCisgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShtLCBjKTsKKyAgY3VybF9tdWx0aV9jbGVhbnVwKG0pOworICBjdXJsX2Vhc3lfY2xlYW51cChjKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiByZXM7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTc0LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU3NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjJiY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU3NC5jCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0YXRpYyBpbnQgbmV3X2ZubWF0Y2goY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nKQoreworICAodm9pZClwYXR0ZXJuOworICAodm9pZClzdHJpbmc7CisgIHJldHVybiBDVVJMX0ZOTUFUQ0hGVU5DX01BVENIOworfQorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIGludCByZXM7CisgIENVUkwgKmN1cmw7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1dJTERDQVJETUFUQ0gsIDFMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GTk1BVENIX0ZVTkNUSU9OLCBuZXdfZm5tYXRjaCk7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGlmKHJlcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X3BlcmZvcm0oKSBmYWlsZWQgJWRcbiIsIHJlcyk7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGlmKHJlcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X3BlcmZvcm0oKSBmYWlsZWQgJWRcbiIsIHJlcyk7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKwordGVzdF9jbGVhbnVwOgorICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICByZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NzUuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTc1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyZGY2OAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTc1LmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJ0ZXN0dXRpbC5oIgorI2luY2x1ZGUgIndhcm5sZXNzLmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBURVNUX0hBTkdfVElNRU9VVCA2MCAqIDEwMDAKKworLyogM3ggZG93bmxvYWQhCisgKiAxLiBub3JtYWwKKyAqIDIuIGR1cCBoYW5kbGUKKyAqIDMuIHdpdGggbXVsdGkgaW50ZXJmYWNlCisgKi8KKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMICpoYW5kbGUgPSBOVUxMOworICBDVVJMICpkdXBoYW5kbGUgPSBOVUxMOworICBDVVJMTSAqbWhhbmRsZSA9IE5VTEw7CisgIGludCByZXMgPSAwOworICBpbnQgc3RpbGxfcnVubmluZyA9IDA7CisKKyAgc3RhcnRfdGVzdF90aW1pbmcoKTsKKworICBnbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIGVhc3lfaW5pdChoYW5kbGUpOworCisgIGVhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9VUkwsIFVSTCk7CisgIGVhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9XSUxEQ0FSRE1BVENILCAxTCk7CisgIGVhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oaGFuZGxlKTsKKyAgaWYocmVzKQorICAgIGdvdG8gdGVzdF9jbGVhbnVwOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGhhbmRsZSk7CisgIGlmKHJlcykKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKworICBkdXBoYW5kbGUgPSBjdXJsX2Vhc3lfZHVwaGFuZGxlKGhhbmRsZSk7CisgIGlmKCFkdXBoYW5kbGUpCisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGhhbmRsZSk7CisgIGhhbmRsZSA9IGR1cGhhbmRsZTsKKworICBtdWx0aV9pbml0KG1oYW5kbGUpOworCisgIG11bHRpX2FkZF9oYW5kbGUobWhhbmRsZSwgaGFuZGxlKTsKKworICBtdWx0aV9wZXJmb3JtKG1oYW5kbGUsICZzdGlsbF9ydW5uaW5nKTsKKworICBhYm9ydF9vbl90ZXN0X3RpbWVvdXQoKTsKKworICB3aGlsZShzdGlsbF9ydW5uaW5nKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICBmZF9zZXQgZmRyZWFkOworICAgIGZkX3NldCBmZHdyaXRlOworICAgIGZkX3NldCBmZGV4Y2VwOworICAgIGludCBtYXhmZCA9IC05OTsKKworICAgIHRpbWVvdXQudHZfc2VjID0gMDsKKyAgICB0aW1lb3V0LnR2X3VzZWMgPSAxMDAwMDBMOyAvKiAxMDAgbXMgKi8KKworICAgIEZEX1pFUk8oJmZkcmVhZCk7CisgICAgRkRfWkVSTygmZmR3cml0ZSk7CisgICAgRkRfWkVSTygmZmRleGNlcCk7CisKKyAgICBtdWx0aV9mZHNldChtaGFuZGxlLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZtYXhmZCk7CisKKyAgICAvKiBBdCB0aGlzIHBvaW50LCBtYXhmZCBpcyBndWFyYW50ZWVkIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAtMS4gKi8KKworICAgIHNlbGVjdF90ZXN0KG1heGZkKzEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVvdXQpOworCisgICAgYWJvcnRfb25fdGVzdF90aW1lb3V0KCk7CisKKyAgICBtdWx0aV9wZXJmb3JtKG1oYW5kbGUsICZzdGlsbF9ydW5uaW5nKTsKKworICAgIGFib3J0X29uX3Rlc3RfdGltZW91dCgpOworICB9CisKK3Rlc3RfY2xlYW51cDoKKworICAvKiB1bmRvY3VtZW50ZWQgY2xlYW51cCBzZXF1ZW5jZSAtIHR5cGUgVUEgKi8KKworICBjdXJsX211bHRpX2NsZWFudXAobWhhbmRsZSk7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGhhbmRsZSk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NzYuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTc2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiYjYxMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTc2LmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgInRlc3R1dGlsLmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgcmVtYWluczsKKyAgaW50IHByaW50X2NvbnRlbnQ7Cit9IGNodW5rX2RhdGFfdDsKKworc3RhdGljCitsb25nIGNodW5rX2Jnbihjb25zdCBzdHJ1Y3QgY3VybF9maWxlaW5mbyAqZmluZm8sIHZvaWQgKnB0ciwgaW50IHJlbWFpbnMpOworc3RhdGljCitsb25nIGNodW5rX2VuZCh2b2lkICpwdHIpOworCitzdGF0aWMKK2xvbmcgY2h1bmtfYmduKGNvbnN0IHN0cnVjdCBjdXJsX2ZpbGVpbmZvICpmaW5mbywgdm9pZCAqcHRyLCBpbnQgcmVtYWlucykKK3sKKyAgY2h1bmtfZGF0YV90ICpjaF9kID0gcHRyOworICBjaF9kLT5yZW1haW5zID0gcmVtYWluczsKKworICBwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworICBwcmludGYoIlJlbWFpbnM6ICAgICAgJWRcbiIsIHJlbWFpbnMpOworICBwcmludGYoIkZpbGVuYW1lOiAgICAgJXNcbiIsIGZpbmZvLT5maWxlbmFtZSk7CisgIGlmKGZpbmZvLT5zdHJpbmdzLnBlcm0pIHsKKyAgICBwcmludGYoIlBlcm1pc3Npb25zOiAgJXMiLCBmaW5mby0+c3RyaW5ncy5wZXJtKTsKKyAgICBpZihmaW5mby0+ZmxhZ3MgJiBDVVJMRklORk9GTEFHX0tOT1dOX1BFUk0pCisgICAgICBwcmludGYoIiAocGFyc2VkID0+ICVvKSIsIGZpbmZvLT5wZXJtKTsKKyAgICBwcmludGYoIlxuIik7CisgIH0KKyAgcHJpbnRmKCJTaXplOiAgICAgICAgICVsZEJcbiIsIChsb25nKWZpbmZvLT5zaXplKTsKKyAgaWYoZmluZm8tPnN0cmluZ3MudXNlcikKKyAgICBwcmludGYoIlVzZXI6ICAgICAgICAgJXNcbiIsIGZpbmZvLT5zdHJpbmdzLnVzZXIpOworICBpZihmaW5mby0+c3RyaW5ncy5ncm91cCkKKyAgICBwcmludGYoIkdyb3VwOiAgICAgICAgJXNcbiIsIGZpbmZvLT5zdHJpbmdzLmdyb3VwKTsKKyAgaWYoZmluZm8tPnN0cmluZ3MudGltZSkKKyAgICBwcmludGYoIlRpbWU6ICAgICAgICAgJXNcbiIsIGZpbmZvLT5zdHJpbmdzLnRpbWUpOworICBwcmludGYoIkZpbGV0eXBlOiAgICAgIik7CisgIHN3aXRjaChmaW5mby0+ZmlsZXR5cGUpIHsKKyAgY2FzZSBDVVJMRklMRVRZUEVfRklMRToKKyAgICBwcmludGYoInJlZ3VsYXIgZmlsZVxuIik7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTEZJTEVUWVBFX0RJUkVDVE9SWToKKyAgICBwcmludGYoImRpcmVjdG9yeVxuIik7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTEZJTEVUWVBFX1NZTUxJTks6CisgICAgcHJpbnRmKCJzeW1saW5rXG4iKTsKKyAgICBwcmludGYoIlRhcmdldDogICAgICAgJXNcbiIsIGZpbmZvLT5zdHJpbmdzLnRhcmdldCk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgcHJpbnRmKCJvdGhlciB0eXBlXG4iKTsKKyAgICBicmVhazsKKyAgfQorICBpZihmaW5mby0+ZmlsZXR5cGUgPT0gQ1VSTEZJTEVUWVBFX0ZJTEUpIHsKKyAgICBjaF9kLT5wcmludF9jb250ZW50ID0gMTsKKyAgICBwcmludGYoIkNvbnRlbnQ6XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgfQorICBpZihzdHJjbXAoZmluZm8tPmZpbGVuYW1lLCAic29tZW90aGVydGV4dC50eHQiKSA9PSAwKSB7CisgICAgcHJpbnRmKCIjIFRISVMgQ09OVEVOVCBXQVMgU0tJUFBFRCBJTiBDSFVOS19CR04gQ0FMTEJBQ0sgI1xuIik7CisgICAgcmV0dXJuIENVUkxfQ0hVTktfQkdOX0ZVTkNfU0tJUDsKKyAgfQorICByZXR1cm4gQ1VSTF9DSFVOS19CR05fRlVOQ19PSzsKK30KKworc3RhdGljCitsb25nIGNodW5rX2VuZCh2b2lkICpwdHIpCit7CisgIGNodW5rX2RhdGFfdCAqY2hfZCA9IHB0cjsKKyAgaWYoY2hfZC0+cHJpbnRfY29udGVudCkgeworICAgIGNoX2QtPnByaW50X2NvbnRlbnQgPSAwOworICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgIH0KKyAgaWYoY2hfZC0+cmVtYWlucyA9PSAxKQorICAgIHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisgIHJldHVybiBDVVJMX0NIVU5LX0VORF9GVU5DX09LOworfQorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkwgKmhhbmRsZSA9IE5VTEw7CisgIENVUkxjb2RlIHJlcyA9IENVUkxFX09LOworICBjaHVua19kYXRhX3QgY2h1bmtfZGF0YSA9IHswLDB9OworICBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisgIGhhbmRsZSA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmKCFoYW5kbGUpIHsKKyAgICByZXMgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisKKyAgdGVzdF9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgdGVzdF9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX1dJTERDQVJETUFUQ0gsIDFMKTsKKyAgdGVzdF9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX0NIVU5LX0JHTl9GVU5DVElPTiwgY2h1bmtfYmduKTsKKyAgdGVzdF9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX0NIVU5LX0VORF9GVU5DVElPTiwgY2h1bmtfZW5kKTsKKyAgdGVzdF9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX0NIVU5LX0RBVEEsICZjaHVua19kYXRhKTsKKworICByZXMgPSBjdXJsX2Vhc3lfcGVyZm9ybShoYW5kbGUpOworCit0ZXN0X2NsZWFudXA6CisgIGlmKGhhbmRsZSkKKyAgICBjdXJsX2Vhc3lfY2xlYW51cChoYW5kbGUpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU3OC5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NzguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzliMzE3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NzguYwpAQCAtMCwwICsxLDEwMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogVGhlIHNpemUgb2YgZGF0YSBzaG91bGQgYmUga2VwdCBiZWxvdyBNQVhfSU5JVElBTF9QT1NUX1NJWkUhICovCitzdGF0aWMgY2hhciBkYXRhW109InRoaXMgaXMgYSBzaG9ydCBzdHJpbmcuXG4iOworCitzdGF0aWMgc2l6ZV90IGRhdGFfc2l6ZSA9IHNpemVvZihkYXRhKSAvIHNpemVvZihjaGFyKTsKKworc3RhdGljIGludCBwcm9ncmVzc19jYWxsYmFjayh2b2lkICpjbGllbnRwLCBkb3VibGUgZGx0b3RhbCwgZG91YmxlIGRsbm93LCBkb3VibGUgdWx0b3RhbCwgZG91YmxlIHVsbm93KQoreworICBGSUxFICptb28gPSBmb3BlbihsaWJ0ZXN0X2FyZzIsICJ3YiIpOworCisgICh2b2lkKWNsaWVudHA7IC8qIFVOVVNFRCAqLworICAodm9pZClkbHRvdGFsOyAvKiBVTlVTRUQgKi8KKyAgKHZvaWQpZGxub3c7IC8qIFVOVVNFRCAqLworCisgIGlmKG1vbykgeworICAgIGlmICgoc2l6ZV90KXVsdG90YWwgPT0gZGF0YV9zaXplICYmIChzaXplX3QpdWxub3cgPT0gZGF0YV9zaXplKQorICAgICAgZnByaW50Zihtb28sICJQQVNTRUQsIFVMIGRhdGEgbWF0Y2hlZCBkYXRhIHNpemVcbiIpOworICAgIGVsc2UKKyAgICAgIGZwcmludGYobW9vLCAiUHJvZ3Jlc3MgY2FsbGJhY2sgY2FsbGVkIHdpdGggVUwgJWYgb3V0IG9mICVmXG4iLCB1bG5vdywgdWx0b3RhbCk7CisgICAgZmNsb3NlKG1vbyk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzPUNVUkxFX09LOworCisgIGlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZ2xvYmFsX2luaXQoKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICAvKiBGaXJzdCBzZXQgdGhlIFVSTCB0aGF0IGlzIGFib3V0IHRvIHJlY2VpdmUgb3VyIFBPU1QuICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworCisgIC8qIE5vdyBzcGVjaWZ5IHdlIHdhbnQgdG8gUE9TVCBkYXRhICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9TVCwgMUwpOworCisjaWZkZWYgQ1VSTF9ET0VTX0NPTlZFUlNJT05TCisgIC8qIENvbnZlcnQgdGhlIFBPU1QgZGF0YSB0byBBU0NJSSAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1RSQU5TRkVSVEVYVCwgMUwpOworI2VuZGlmCisKKyAgLyogU2V0IHRoZSBleHBlY3RlZCBQT1NUIHNpemUgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFLCBkYXRhX3NpemUpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsIGRhdGEpOworCisgIC8qIHdlIHdhbnQgdG8gdXNlIG91ciBvd24gcHJvZ3Jlc3MgZnVuY3Rpb24gKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9OT1BST0dSRVNTLCAwTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiwgcHJvZ3Jlc3NfY2FsbGJhY2spOworCisgIC8qIHBvaW50ZXIgdG8gcGFzcyB0byBvdXIgcmVhZCBmdW5jdGlvbiAqLworCisgIC8qIGdldCB2ZXJib3NlIGRlYnVnIG91dHB1dCBwbGVhc2UgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisKKyAgLyogaW5jbHVkZSBoZWFkZXJzIGluIHRoZSBvdXRwdXQgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKworICAvKiBQZXJmb3JtIHRoZSByZXF1ZXN0LCByZXMgd2lsbCBnZXQgdGhlIHJldHVybiBjb2RlICovCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCit0ZXN0X2NsZWFudXA6CisKKyAgLyogYWx3YXlzIGNsZWFudXAgKi8KKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworICByZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1NzkuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTc5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYxOTNhMQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTc5LmMKQEAgLTAsMCArMSwxNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcG9zdFtdPXsKKyAgIm9uZSIsCisgICJ0d28iLAorICAidGhyZWUiLAorICAiYW5kIGEgZmluYWwgbG9uZ2VyIGNyYXA6IGZvdXIiLAorICBOVUxMCit9OworCisKK3N0cnVjdCBXcml0ZVRoaXMgeworICBpbnQgY291bnRlcjsKK307CisKK3N0YXRpYyBpbnQgcHJvZ3Jlc3NfY2FsbGJhY2sodm9pZCAqY2xpZW50cCwgZG91YmxlIGRsdG90YWwsIGRvdWJsZSBkbG5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHVsdG90YWwsIGRvdWJsZSB1bG5vdykKK3sKKyAgRklMRSAqbW9vOworICBzdGF0aWMgaW50IHByZXZfdWx0b3RhbCA9IC0xOworICBzdGF0aWMgaW50IHByZXZfdWxub3cgPSAtMTsKKyAgKHZvaWQpY2xpZW50cDsgLyogVU5VU0VEICovCisgICh2b2lkKWRsdG90YWw7IC8qIFVOVVNFRCAqLworICAodm9pZClkbG5vdzsgLyogVU5VU0VEICovCisKKyAgLyogdG8gYXZvaWQgZGVwZW5kaW5nIG9uIHRpbWluZywgd2hpY2ggd2lsbCBjYXVzZSB0aGlzIHByb2dyZXNzIGZ1bmN0aW9uIHRvCisgICAgIGdldCBjYWxsZWQgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIHRpbWVzIGRlcGVuZGluZyBvbiBjaXJjdW1zdGFuY2VzLCB3ZQorICAgICBvbmx5IGxvZyB0aGVzZSBsaW5lcyBpZiB0aGUgbnVtYmVycyBhcmUgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzCisgICAgIGludm9rZSAqLworICBpZigocHJldl91bHRvdGFsICE9IChpbnQpdWx0b3RhbCkgfHwKKyAgICAgKHByZXZfdWxub3cgIT0gKGludCl1bG5vdykpIHsKKworICAgIG1vbyA9IGZvcGVuKGxpYnRlc3RfYXJnMiwgImFiIik7CisgICAgaWYobW9vKSB7CisgICAgICBmcHJpbnRmKG1vbywgIlByb2dyZXNzIGNhbGxiYWNrIGNhbGxlZCB3aXRoIFVMICVkIG91dCBvZiAlZFxuIiwKKyAgICAgICAgICAgICAgKGludCl1bG5vdywgKGludCl1bHRvdGFsKTsKKyAgICAgIGZjbG9zZShtb28pOworICAgIH0KKyAgICBwcmV2X3Vsbm93ID0gKGludCkgdWxub3c7CisgICAgcHJldl91bHRvdGFsID0gKGludCkgdWx0b3RhbDsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIHNpemVfdCByZWFkX2NhbGxiYWNrKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqdXNlcnApCit7CisgIHN0cnVjdCBXcml0ZVRoaXMgKnBvb2ggPSAoc3RydWN0IFdyaXRlVGhpcyAqKXVzZXJwOworICBjb25zdCBjaGFyICpkYXRhOworCisgIGlmKHNpemUqbm1lbWIgPCAxKQorICAgIHJldHVybiAwOworCisgIGRhdGEgPSBwb3N0W3Bvb2gtPmNvdW50ZXJdOworCisgIGlmKGRhdGEpIHsKKyAgICBzaXplX3QgbGVuID0gc3RybGVuKGRhdGEpOworICAgIG1lbWNweShwdHIsIGRhdGEsIGxlbik7CisgICAgcG9vaC0+Y291bnRlcisrOyAvKiBhZHZhbmNlIHBvaW50ZXIgKi8KKyAgICByZXR1cm4gbGVuOworICB9CisgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBtb3JlIGRhdGEgbGVmdCB0byBkZWxpdmVyICovCit9CisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgQ1VSTGNvZGUgcmVzPUNVUkxFX09LOworICBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3QgPSBOVUxMOworICBzdHJ1Y3QgV3JpdGVUaGlzIHBvb2g7CisgIHBvb2guY291bnRlciA9IDA7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIHNsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQoc2xpc3QsICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIpOworICBpZiAoc2xpc3QgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9zbGlzdF9hcHBlbmQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICAgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgLyogRmlyc3Qgc2V0IHRoZSBVUkwgdGhhdCBpcyBhYm91dCB0byByZWNlaXZlIG91ciBQT1NULiAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKworICAvKiBOb3cgc3BlY2lmeSB3ZSB3YW50IHRvIFBPU1QgZGF0YSAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1BPU1QsIDFMKTsKKworI2lmZGVmIENVUkxfRE9FU19DT05WRVJTSU9OUworICAvKiBDb252ZXJ0IHRoZSBQT1NUIGRhdGEgdG8gQVNDSUkgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9UUkFOU0ZFUlRFWFQsIDFMKTsKKyNlbmRpZgorCisgIC8qIHdlIHdhbnQgdG8gdXNlIG91ciBvd24gcmVhZCBmdW5jdGlvbiAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgcmVhZF9jYWxsYmFjayk7CisKKyAgLyogcG9pbnRlciB0byBwYXNzIHRvIG91ciByZWFkIGZ1bmN0aW9uICovCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU5GSUxFLCAmcG9vaCk7CisKKyAgLyogZ2V0IHZlcmJvc2UgZGVidWcgb3V0cHV0IHBsZWFzZSAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICAvKiBpbmNsdWRlIGhlYWRlcnMgaW4gdGhlIG91dHB1dCAqLworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUiwgMUwpOworCisgIC8qIGVuZm9yY2UgY2h1bmtlZCB0cmFuc2ZlciBieSBzZXR0aW5nIHRoZSBoZWFkZXIgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBzbGlzdCk7CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfRElHRVNUKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VU0VSUFdELCAiZm9vOmJhciIpOworCisgIC8qIHdlIHdhbnQgdG8gdXNlIG91ciBvd24gcHJvZ3Jlc3MgZnVuY3Rpb24gKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9OT1BST0dSRVNTLCAwTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiwgcHJvZ3Jlc3NfY2FsbGJhY2spOworCisgIC8qIFBlcmZvcm0gdGhlIHJlcXVlc3QsIHJlcyB3aWxsIGdldCB0aGUgcmV0dXJuIGNvZGUgKi8KKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKK3Rlc3RfY2xlYW51cDoKKworICAvKiBjbGVhbiB1cCB0aGUgaGVhZGVycyBsaXN0ICovCisgIGlmKHNsaXN0KQorICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwoc2xpc3QpOworCisgIC8qIGFsd2F5cyBjbGVhbnVwICovCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTgyLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU4Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YjcwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU4Mi5jCkBAIC0wLDAgKzEsMzY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAidGVzdHV0aWwuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNkZWZpbmUgVEVTVF9IQU5HX1RJTUVPVVQgNjAgKiAxMDAwCisKK3N0cnVjdCBTb2NrZXRzCit7CisgIGN1cmxfc29ja2V0X3QgKnNvY2tldHM7CisgIGludCBjb3VudDsgICAgICAvKiBudW1iZXIgb2Ygc29ja2V0cyBhY3R1YWxseSBzdG9yZWQgaW4gYXJyYXkgKi8KKyAgaW50IG1heF9jb3VudDsgIC8qIG1heCBudW1iZXIgb2Ygc29ja2V0cyB0aGF0IGZpdCBpbiBhbGxvY2F0ZWQgYXJyYXkgKi8KK307CisKK3N0cnVjdCBSZWFkV3JpdGVTb2NrZXRzCit7CisgIHN0cnVjdCBTb2NrZXRzIHJlYWQsIHdyaXRlOworfTsKKworLyoqCisgKiBSZW1vdmUgYSBmaWxlIGRlc2NyaXB0b3IgZnJvbSBhIHNvY2tldHMgYXJyYXkuCisgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZUZkKHN0cnVjdCBTb2NrZXRzKiBzb2NrZXRzLCBjdXJsX3NvY2tldF90IGZkLCBpbnQgbWVudGlvbikKK3sKKyAgaW50IGk7CisKKyAgaWYobWVudGlvbikKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlJlbW92ZSBzb2NrZXQgZmQgJWRcbiIsIChpbnQpIGZkKTsKKworICBmb3IgKGkgPSAwOyBpIDwgc29ja2V0cy0+Y291bnQ7ICsraSkgeworICAgIGlmIChzb2NrZXRzLT5zb2NrZXRzW2ldID09IGZkKSB7CisgICAgICBpZiAoaSA8IHNvY2tldHMtPmNvdW50IC0gMSkKKyAgICAgICAgbWVtbW92ZSgmc29ja2V0cy0+c29ja2V0c1tpXSwgJnNvY2tldHMtPnNvY2tldHNbaSArIDFdLAorICAgICAgICAgICAgICBzaXplb2YoY3VybF9zb2NrZXRfdCkgKiAoc29ja2V0cy0+Y291bnQgLSAoaSArIDEpKSk7CisgICAgICAtLXNvY2tldHMtPmNvdW50OworICAgIH0KKyAgfQorfQorCisvKioKKyAqIEFkZCBhIGZpbGUgZGVzY3JpcHRvciB0byBhIHNvY2tldHMgYXJyYXkuCisgKi8KK3N0YXRpYyB2b2lkIGFkZEZkKHN0cnVjdCBTb2NrZXRzKiBzb2NrZXRzLCBjdXJsX3NvY2tldF90IGZkLCBjb25zdCBjaGFyICp3aGF0KQoreworICAvKioKKyAgICogVG8gZW5zdXJlIHdlIG9ubHkgaGF2ZSBlYWNoIGZpbGUgZGVzY3JpcHRvciBvbmNlLCB3ZSByZW1vdmUgaXQgdGhlbiBhZGQKKyAgICogaXQgYWdhaW4uCisgICAqLworICBmcHJpbnRmKHN0ZGVyciwgIkFkZCBzb2NrZXQgZmQgJWQgZm9yICVzXG4iLCAoaW50KSBmZCwgd2hhdCk7CisgIHJlbW92ZUZkKHNvY2tldHMsIGZkLCAwKTsKKyAgLyoKKyAgICogQWxsb2NhdGUgYXJyYXkgc3RvcmFnZSB3aGVuIHJlcXVpcmVkLgorICAgKi8KKyAgaWYoIXNvY2tldHMtPnNvY2tldHMpIHsKKyAgICBzb2NrZXRzLT5zb2NrZXRzID0gbWFsbG9jKHNpemVvZihjdXJsX3NvY2tldF90KSAqIDIwVSk7CisgICAgaWYoIXNvY2tldHMtPnNvY2tldHMpCisgICAgICByZXR1cm47CisgICAgc29ja2V0cy0+bWF4X2NvdW50ID0gMjA7CisgIH0KKyAgZWxzZSBpZihzb2NrZXRzLT5jb3VudCArIDEgPiBzb2NrZXRzLT5tYXhfY291bnQpIHsKKyAgICBjdXJsX3NvY2tldF90ICpvbGRwdHIgPSBzb2NrZXRzLT5zb2NrZXRzOworICAgIHNvY2tldHMtPnNvY2tldHMgPSByZWFsbG9jKG9sZHB0ciwgc2l6ZW9mKGN1cmxfc29ja2V0X3QpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc29ja2V0cy0+bWF4X2NvdW50ICsgMjApKTsKKyAgICBpZighc29ja2V0cy0+c29ja2V0cykgeworICAgICAgLyogY2xlYW51cCBpbiB0ZXN0X2NsZWFudXAgKi8KKyAgICAgIHNvY2tldHMtPnNvY2tldHMgPSBvbGRwdHI7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHNvY2tldHMtPm1heF9jb3VudCArPSAyMDsKKyAgfQorICAvKgorICAgKiBBZGQgZmlsZSBkZXNjcmlwdG9yIHRvIGFycmF5LgorICAgKi8KKyAgc29ja2V0cy0+c29ja2V0c1tzb2NrZXRzLT5jb3VudF0gPSBmZDsKKyAgKytzb2NrZXRzLT5jb3VudDsKK30KKworLyoqCisgKiBDYWxsYmFjayBpbnZva2VkIGJ5IGN1cmwgdG8gcG9sbCByZWFkaW5nIC8gd3JpdGluZyBvZiBhIHNvY2tldC4KKyAqLworc3RhdGljIGludCBjdXJsU29ja2V0Q2FsbGJhY2soQ1VSTCAqZWFzeSwgY3VybF9zb2NrZXRfdCBzLCBpbnQgYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcnAsIHZvaWQgKnNvY2tldHApCit7CisgIHN0cnVjdCBSZWFkV3JpdGVTb2NrZXRzKiBzb2NrZXRzID0gdXNlcnA7CisKKyAgKHZvaWQpZWFzeTsgLyogdW51c2VkICovCisgICh2b2lkKXNvY2tldHA7IC8qIHVudXNlZCAqLworCisgIGlmIChhY3Rpb24gPT0gQ1VSTF9QT0xMX0lOIHx8IGFjdGlvbiA9PSBDVVJMX1BPTExfSU5PVVQpCisgICAgYWRkRmQoJnNvY2tldHMtPnJlYWQsIHMsICJyZWFkIik7CisKKyAgaWYgKGFjdGlvbiA9PSBDVVJMX1BPTExfT1VUIHx8IGFjdGlvbiA9PSBDVVJMX1BPTExfSU5PVVQpCisgICAgYWRkRmQoJnNvY2tldHMtPndyaXRlLCBzLCAid3JpdGUiKTsKKworICBpZihhY3Rpb24gPT0gQ1VSTF9QT0xMX1JFTU9WRSkgeworICAgIHJlbW92ZUZkKCZzb2NrZXRzLT5yZWFkLCBzLCAxKTsKKyAgICByZW1vdmVGZCgmc29ja2V0cy0+d3JpdGUsIHMsIDApOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGJhY2sgaW52b2tlZCBieSBjdXJsIHRvIHNldCBhIHRpbWVvdXQuCisgKi8KK3N0YXRpYyBpbnQgY3VybFRpbWVyQ2FsbGJhY2soQ1VSTE0gKm11bHRpLCBsb25nIHRpbWVvdXRfbXMsIHZvaWQgKnVzZXJwKQoreworICBzdHJ1Y3QgdGltZXZhbCogdGltZW91dCA9IHVzZXJwOworCisgICh2b2lkKW11bHRpOyAvKiB1bnVzZWQgKi8KKyAgaWYgKHRpbWVvdXRfbXMgIT0gLTEpIHsKKyAgICBnZXR0aW1lb2ZkYXkodGltZW91dCwgMCk7CisgICAgdGltZW91dC0+dHZfdXNlYyArPSB0aW1lb3V0X21zICogMTAwMDsKKyAgfQorICBlbHNlIHsKKyAgICB0aW1lb3V0LT50dl9zZWMgPSAtMTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyoqCisgKiBDaGVjayBmb3IgY3VybCBjb21wbGV0aW9uLgorICovCitzdGF0aWMgaW50IGNoZWNrRm9yQ29tcGxldGlvbihDVVJMTSogY3VybCwgaW50KiBzdWNjZXNzKQoreworICBpbnQgbnVtTWVzc2FnZXM7CisgIENVUkxNc2cqIG1lc3NhZ2U7CisgIGludCByZXN1bHQgPSAwOworICAqc3VjY2VzcyA9IDA7CisgIHdoaWxlICgobWVzc2FnZSA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGN1cmwsICZudW1NZXNzYWdlcykpICE9IE5VTEwpIHsKKyAgICBpZiAobWVzc2FnZS0+bXNnID09IENVUkxNU0dfRE9ORSkgeworICAgICAgcmVzdWx0ID0gMTsKKyAgICAgIGlmIChtZXNzYWdlLT5kYXRhLnJlc3VsdCA9PSBDVVJMRV9PSykKKyAgICAgICAgKnN1Y2Nlc3MgPSAxOworICAgICAgZWxzZQorICAgICAgICAqc3VjY2VzcyA9IDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZnByaW50ZihzdGRlcnIsICJHb3QgYW4gdW5leHBlY3RlZCBtZXNzYWdlIGZyb20gY3VybDogJWlcbiIsCisgICAgICAgICAgICAgIChpbnQpbWVzc2FnZS0+bXNnKTsKKyAgICAgIHJlc3VsdCA9IDE7CisgICAgICAqc3VjY2VzcyA9IDA7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0TWljcm9TZWNvbmRUaW1lb3V0KHN0cnVjdCB0aW1ldmFsKiB0aW1lb3V0KQoreworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgIGludCByZXN1bHQ7CisKKyAgZ2V0dGltZW9mZGF5KCZub3csIDApOworICByZXN1bHQgPSAodGltZW91dC0+dHZfc2VjIC0gbm93LnR2X3NlYykgKiAxMDAwMDAwICsKKyAgICB0aW1lb3V0LT50dl91c2VjIC0gbm93LnR2X3VzZWM7CisgIGlmIChyZXN1bHQgPCAwKQorICAgIHJlc3VsdCA9IDA7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBVcGRhdGUgYSBmZF9zZXQgd2l0aCBhbGwgb2YgdGhlIHNvY2tldHMgaW4gdXNlLgorICovCitzdGF0aWMgdm9pZCB1cGRhdGVGZFNldChzdHJ1Y3QgU29ja2V0cyogc29ja2V0cywgZmRfc2V0KiBmZHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKm1heEZkKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IHNvY2tldHMtPmNvdW50OyArK2kpIHsKKyAgICBGRF9TRVQoc29ja2V0cy0+c29ja2V0c1tpXSwgZmRzZXQpOworICAgIGlmICgqbWF4RmQgPCBzb2NrZXRzLT5zb2NrZXRzW2ldICsgMSkgeworICAgICAgKm1heEZkID0gc29ja2V0cy0+c29ja2V0c1tpXSArIDE7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkIG5vdGlmeUN1cmwoQ1VSTE0gKmN1cmwsIGN1cmxfc29ja2V0X3QgcywgaW50IGV2Qml0bWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5mbykKK3sKKyAgaW50IG51bWhhbmRsZXMgPSAwOworICBDVVJMTWNvZGUgcmVzdWx0ID0gY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKGN1cmwsIHMsIGV2Qml0bWFzaywgJm51bWhhbmRsZXMpOworICBpZiAocmVzdWx0ICE9IENVUkxNX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJDdXJsIGVycm9yIG9uICVzOiAlaSAoJXMpXG4iLAorICAgICAgICAgICAgaW5mbywgcmVzdWx0LCBjdXJsX211bHRpX3N0cmVycm9yKHJlc3VsdCkpOworICB9Cit9CisKKy8qKgorICogSW52b2tlIGN1cmwgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciBpcyBzZXQuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrRmRTZXQoQ1VSTE0gKmN1cmwsIHN0cnVjdCBTb2NrZXRzICpzb2NrZXRzLCBmZF9zZXQgKmZkc2V0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXZCaXRtYXNrLCBjb25zdCBjaGFyICpuYW1lKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IHNvY2tldHMtPmNvdW50OyArK2kpIHsKKyAgICBpZiAoRkRfSVNTRVQoc29ja2V0cy0+c29ja2V0c1tpXSwgZmRzZXQpKSB7CisgICAgICBub3RpZnlDdXJsKGN1cmwsIHNvY2tldHMtPnNvY2tldHNbaV0sIGV2Qml0bWFzaywgbmFtZSk7CisgICAgfQorICB9Cit9CisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgaW50IHJlcyA9IDA7CisgIENVUkwgKmN1cmwgPSBOVUxMOworICBGSUxFICpoZF9zcmMgPSBOVUxMOworICBpbnQgaGQgOworICBpbnQgZXJyb3I7CisgIHN0cnVjdF9zdGF0IGZpbGVfaW5mbzsKKyAgQ1VSTE0gKm0gPSBOVUxMOworICBzdHJ1Y3QgUmVhZFdyaXRlU29ja2V0cyBzb2NrZXRzID0ge3tOVUxMLCAwLCAwfSwge05VTEwsIDAsIDB9fTsKKyAgc3RydWN0IHRpbWV2YWwgdGltZW91dCA9IHstMSwgMH07CisgIGludCBzdWNjZXNzID0gMDsKKworICBzdGFydF90ZXN0X3RpbWluZygpOworCisgIGlmICghbGlidGVzdF9hcmczKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJVc2FnZTogbGliNTgyIFt1cmxdIFtmaWxlbmFtZV0gW3VzZXJuYW1lXVxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX1VTQUdFOworICB9CisKKyAgaGRfc3JjID0gZm9wZW4obGlidGVzdF9hcmcyLCAicmIiKTsKKyAgaWYoTlVMTCA9PSBoZF9zcmMpIHsKKyAgICBlcnJvciA9IEVSUk5POworICAgIGZwcmludGYoc3RkZXJyLCAiZm9wZW4oKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQgKCVzKVxuIiwKKyAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBmaWxlOiAoJXMpXG4iLCBsaWJ0ZXN0X2FyZzIpOworICAgIHJldHVybiBURVNUX0VSUl9GT1BFTjsKKyAgfQorCisgIC8qIGdldCB0aGUgZmlsZSBzaXplIG9mIHRoZSBsb2NhbCBmaWxlICovCisgIGhkID0gZnN0YXQoZmlsZW5vKGhkX3NyYyksICZmaWxlX2luZm8pOworICBpZihoZCA9PSAtMSkgeworICAgIC8qIGNhbid0IG9wZW4gZmlsZSwgYmFpbCBvdXQgKi8KKyAgICBlcnJvciA9IEVSUk5POworICAgIGZwcmludGYoc3RkZXJyLCAiZnN0YXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQgKCVzKVxuIiwKKyAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGNhbm5vdCBvcGVuIGZpbGUgKCVzKVxuIiwgbGlidGVzdF9hcmcyKTsKKyAgICBmY2xvc2UoaGRfc3JjKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfRlNUQVQ7CisgIH0KKyAgZnByaW50ZihzdGRlcnIsICJTZXQgdG8gdXBsb2FkICVkIGJ5dGVzXG4iLCAoaW50KWZpbGVfaW5mby5zdF9zaXplKTsKKworICByZXNfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKyAgaWYocmVzKSB7CisgICAgZmNsb3NlKGhkX3NyYyk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIGVhc3lfaW5pdChjdXJsKTsKKworICAvKiBlbmFibGUgdXBsb2FkaW5nICovCisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVBMT0FELCAxTCk7CisKKyAgLyogc3BlY2lmeSB0YXJnZXQgKi8KKyAgZWFzeV9zZXRvcHQoY3VybCxDVVJMT1BUX1VSTCwgVVJMKTsKKworICAvKiBnbyB2ZXJib3NlICovCisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgIC8qIG5vdyBzcGVjaWZ5IHdoaWNoIGZpbGUgdG8gdXBsb2FkICovCisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBRERBVEEsIGhkX3NyYyk7CisKKyAgZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VU0VSUFdELCBsaWJ0ZXN0X2FyZzMpOworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTSF9QVUJMSUNfS0VZRklMRSwgImN1cmxfY2xpZW50X2tleS5wdWIiKTsKKyAgZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0hfUFJJVkFURV9LRVlGSUxFLCAiY3VybF9jbGllbnRfa2V5Iik7CisKKyAgZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEVTSVpFX0xBUkdFLCAoY3VybF9vZmZfdClmaWxlX2luZm8uc3Rfc2l6ZSk7CisKKyAgbXVsdGlfaW5pdChtKTsKKworICBtdWx0aV9zZXRvcHQobSwgQ1VSTE1PUFRfU09DS0VURlVOQ1RJT04sIGN1cmxTb2NrZXRDYWxsYmFjayk7CisgIG11bHRpX3NldG9wdChtLCBDVVJMTU9QVF9TT0NLRVREQVRBLCAmc29ja2V0cyk7CisKKyAgbXVsdGlfc2V0b3B0KG0sIENVUkxNT1BUX1RJTUVSRlVOQ1RJT04sIGN1cmxUaW1lckNhbGxiYWNrKTsKKyAgbXVsdGlfc2V0b3B0KG0sIENVUkxNT1BUX1RJTUVSREFUQSwgJnRpbWVvdXQpOworCisgIG11bHRpX2FkZF9oYW5kbGUobSwgY3VybCk7CisKKyAgd2hpbGUgKCFjaGVja0ZvckNvbXBsZXRpb24obSwgJnN1Y2Nlc3MpKQorICB7CisgICAgZmRfc2V0IHJlYWRTZXQsIHdyaXRlU2V0OworICAgIGN1cmxfc29ja2V0X3QgbWF4RmQgPSAwOworICAgIHN0cnVjdCB0aW1ldmFsIHR2ID0gezEwLCAwfTsKKworICAgIEZEX1pFUk8oJnJlYWRTZXQpOworICAgIEZEX1pFUk8oJndyaXRlU2V0KTsKKyAgICB1cGRhdGVGZFNldCgmc29ja2V0cy5yZWFkLCAmcmVhZFNldCwgJm1heEZkKTsKKyAgICB1cGRhdGVGZFNldCgmc29ja2V0cy53cml0ZSwgJndyaXRlU2V0LCAmbWF4RmQpOworCisgICAgaWYgKHRpbWVvdXQudHZfc2VjICE9IC0xKQorICAgIHsKKyAgICAgIGludCB1c1RpbWVvdXQgPSBnZXRNaWNyb1NlY29uZFRpbWVvdXQoJnRpbWVvdXQpOworICAgICAgdHYudHZfc2VjID0gdXNUaW1lb3V0IC8gMTAwMDAwMDsKKyAgICAgIHR2LnR2X3VzZWMgPSB1c1RpbWVvdXQgJSAxMDAwMDAwOworICAgIH0KKyAgICBlbHNlIGlmIChtYXhGZCA8PSAwKQorICAgIHsKKyAgICAgIHR2LnR2X3NlYyA9IDA7CisgICAgICB0di50dl91c2VjID0gMTAwMDAwOworICAgIH0KKworICAgIHNlbGVjdF90ZXN0KG1heEZkLCAmcmVhZFNldCwgJndyaXRlU2V0LCBOVUxMLCAmdHYpOworCisgICAgLyogQ2hlY2sgdGhlIHNvY2tldHMgZm9yIHJlYWRpbmcgLyB3cml0aW5nICovCisgICAgY2hlY2tGZFNldChtLCAmc29ja2V0cy5yZWFkLCAmcmVhZFNldCwgQ1VSTF9DU0VMRUNUX0lOLCAicmVhZCIpOworICAgIGNoZWNrRmRTZXQobSwgJnNvY2tldHMud3JpdGUsICZ3cml0ZVNldCwgQ1VSTF9DU0VMRUNUX09VVCwgIndyaXRlIik7CisKKyAgICBpZiAodGltZW91dC50dl9zZWMgIT0gLTEgJiYgZ2V0TWljcm9TZWNvbmRUaW1lb3V0KCZ0aW1lb3V0KSA9PSAwKQorICAgIHsKKyAgICAgIC8qIEN1cmwncyB0aW1lciBoYXMgZWxhcHNlZC4gKi8KKyAgICAgIG5vdGlmeUN1cmwobSwgQ1VSTF9TT0NLRVRfVElNRU9VVCwgMCwgInRpbWVvdXQiKTsKKyAgICB9CisKKyAgICBhYm9ydF9vbl90ZXN0X3RpbWVvdXQoKTsKKyAgfQorCisgIGlmICghc3VjY2VzcykKKyAgeworICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgdXBsb2FkaW5nIGZpbGUuXG4iKTsKKyAgICByZXMgPSBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKwordGVzdF9jbGVhbnVwOgorCisgIC8qIHByb3BlciBjbGVhbnVwIHNlcXVlbmNlIC0gdHlwZSBQQiAqLworCisgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShtLCBjdXJsKTsKKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfbXVsdGlfY2xlYW51cChtKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIC8qIGNsb3NlIHRoZSBsb2NhbCBmaWxlICovCisgIGZjbG9zZShoZF9zcmMpOworCisgIC8qIGZyZWUgbG9jYWwgbWVtb3J5ICovCisgIGlmKHNvY2tldHMucmVhZC5zb2NrZXRzKQorICAgIGZyZWUoc29ja2V0cy5yZWFkLnNvY2tldHMpOworICBpZihzb2NrZXRzLndyaXRlLnNvY2tldHMpCisgICAgZnJlZShzb2NrZXRzLndyaXRlLnNvY2tldHMpOworCisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU4My5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1ODMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDVhNWNlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1ODMuYwpAQCAtMCwwICsxLDg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBUaGlzIHRlc3QgY2FzZSBpcyBiYXNlZCBvbiB0aGUgc2FtcGxlIGNvZGUgcHJvdmlkZWQgYnkgU2FxaWIgQWxpCisgKiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDMvMDA2Ni5odG1sCisgKi8KKworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIGludCBzdGlsbFJ1bm5pbmc7CisgIENVUkxNKiBtdWx0aUhhbmRsZSA9IE5VTEw7CisgIENVUkwqIGN1cmwgPSBOVUxMOworICBpbnQgcmVzID0gMDsKKworICBnbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIG11bHRpX2luaXQobXVsdGlIYW5kbGUpOworCisgIGVhc3lfaW5pdChjdXJsKTsKKworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VTRVJQV0QsIGxpYnRlc3RfYXJnMik7CisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NIX1BVQkxJQ19LRVlGSUxFLCAiY3VybF9jbGllbnRfa2V5LnB1YiIpOworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTSF9QUklWQVRFX0tFWUZJTEUsICJjdXJsX2NsaWVudF9rZXkiKTsKKworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VQTE9BRCwgMUwpOworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEVTSVpFLCAobG9uZyk1KTsKKworICBtdWx0aV9hZGRfaGFuZGxlKG11bHRpSGFuZGxlLCBjdXJsKTsKKworICAvKiB0aGlzIHRlc3RzIGlmIHJlbW92aW5nIGFuIGVhc3kgaGFuZGxlIGltbWVkaWF0ZWx5IGFmdGVyIG11bHRpCisgICAgIHBlcmZvcm0gaGFzIGJlZW4gY2FsbGVkIHN1Y2NlZWRzIG9yIG5vdC4gKi8KKworICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfbXVsdGlfcGVyZm9ybSgpLi4uXG4iKTsKKworICBtdWx0aV9wZXJmb3JtKG11bHRpSGFuZGxlLCAmc3RpbGxSdW5uaW5nKTsKKworICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfbXVsdGlfcGVyZm9ybSgpIHN1Y2NlZWRlZFxuIik7CisKKyAgZnByaW50ZihzdGRlcnIsICJjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoKS4uLlxuIik7CisgIHJlcyA9IChpbnQpIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShtdWx0aUhhbmRsZSwgY3VybCk7CisgIGlmKHJlcykKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgpIGZhaWxlZCwgIgorICAgICAgICAgICAgIndpdGggY29kZSAlZFxuIiwgcmVzKTsKKyAgZWxzZQorICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKCkgc3VjY2VlZGVkXG4iKTsKKwordGVzdF9jbGVhbnVwOgorCisgIC8qIHVuZG9jdW1lbnRlZCBjbGVhbnVwIHNlcXVlbmNlIC0gdHlwZSBVQiAqLworCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX211bHRpX2NsZWFudXAobXVsdGlIYW5kbGUpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTg2LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZjA0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU4Ni5jCkBAIC0wLDAgKzEsMjQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNkZWZpbmUgVEhSRUFEUyAyCisKKy8qIHN0cnVjdCBjb250YWluaW5nIGRhdGEgb2YgYSB0aHJlYWQgKi8KK3N0cnVjdCBUZGF0YSB7CisgIENVUkxTSCAqc2hhcmU7CisgIGNoYXIgKnVybDsKK307CisKK3N0cnVjdCB1c2VyZGF0YSB7CisgIGNoYXIgKnRleHQ7CisgIGludCBjb3VudGVyOworfTsKKworLyogbG9jayBjYWxsYmFjayAqLworc3RhdGljIHZvaWQgbXlfbG9jayhDVVJMICpoYW5kbGUsIGN1cmxfbG9ja19kYXRhIGRhdGEsIGN1cmxfbG9ja19hY2Nlc3MgbGFjY2VzcywKKyAgICAgICAgICB2b2lkICp1c2VwdHIgKQoreworICBjb25zdCBjaGFyICp3aGF0OworICBzdHJ1Y3QgdXNlcmRhdGEgKnVzZXIgPSAoc3RydWN0IHVzZXJkYXRhICopdXNlcHRyOworCisgICh2b2lkKWhhbmRsZTsKKyAgKHZvaWQpbGFjY2VzczsKKworICBzd2l0Y2ggKCBkYXRhICkgeworICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfU0hBUkU6CisgICAgICB3aGF0ID0gInNoYXJlIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfRE5TOgorICAgICAgd2hhdCA9ICJkbnMiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9DT09LSUU6CisgICAgICB3aGF0ID0gImNvb2tpZSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX1NTTF9TRVNTSU9OOgorICAgICAgd2hhdCA9ICJzc2xfc2Vzc2lvbiI7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZnByaW50ZihzdGRlcnIsICJsb2NrOiBubyBzdWNoIGRhdGE6ICVkXG4iLCAoaW50KWRhdGEpOworICAgICAgcmV0dXJuOworICB9CisgIHByaW50ZigibG9jazogICAlLTZzIFslc106ICVkXG4iLCB3aGF0LCB1c2VyLT50ZXh0LCB1c2VyLT5jb3VudGVyKTsKKyAgdXNlci0+Y291bnRlcisrOworfQorCisvKiB1bmxvY2sgY2FsbGJhY2sgKi8KK3N0YXRpYyB2b2lkIG15X3VubG9jayhDVVJMICpoYW5kbGUsIGN1cmxfbG9ja19kYXRhIGRhdGEsIHZvaWQgKnVzZXB0ciApCit7CisgIGNvbnN0IGNoYXIgKndoYXQ7CisgIHN0cnVjdCB1c2VyZGF0YSAqdXNlciA9IChzdHJ1Y3QgdXNlcmRhdGEgKil1c2VwdHI7CisgICh2b2lkKWhhbmRsZTsKKyAgc3dpdGNoICggZGF0YSApIHsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX1NIQVJFOgorICAgICAgd2hhdCA9ICJzaGFyZSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfTE9DS19EQVRBX0ROUzoKKyAgICAgIHdoYXQgPSAiZG5zIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFOgorICAgICAgd2hhdCA9ICJjb29raWUiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9TU0xfU0VTU0lPTjoKKyAgICAgIHdoYXQgPSAic3NsX3Nlc3Npb24iOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGZwcmludGYoc3RkZXJyLCAidW5sb2NrOiBubyBzdWNoIGRhdGE6ICVkXG4iLCAoaW50KWRhdGEpOworICAgICAgcmV0dXJuOworICB9CisgIHByaW50ZigidW5sb2NrOiAlLTZzIFslc106ICVkXG4iLCB3aGF0LCB1c2VyLT50ZXh0LCB1c2VyLT5jb3VudGVyKTsKKyAgdXNlci0+Y291bnRlcisrOworfQorCisvKiB0aGUgZHVtbXkgdGhyZWFkIGZ1bmN0aW9uICovCitzdGF0aWMgdm9pZCAqZmlyZSh2b2lkICpwdHIpCit7CisgIENVUkxjb2RlIGNvZGU7CisgIHN0cnVjdCBUZGF0YSAqdGRhdGEgPSAoc3RydWN0IFRkYXRhKilwdHI7CisgIENVUkwgKmN1cmw7CisgIGludCBpPTA7CisKKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAwKTsKKyAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsICAgIDFMKTsKKyAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgICAgICAgIHRkYXRhLT51cmwpOworICBwcmludGYoICJDVVJMT1BUX1NIQVJFXG4iICk7CisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TSEFSRSwgdGRhdGEtPnNoYXJlKTsKKworICBwcmludGYoICJQRVJGT1JNXG4iICk7CisgIGNvZGUgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKKyAgaWYoIGNvZGUgIT0gQ1VSTEVfT0sgKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJwZXJmb3JtIHVybCAnJXMnIHJlcGVhdCAlZCBmYWlsZWQsIGN1cmxjb2RlICVkXG4iLAorICAgICAgICAgICAgdGRhdGEtPnVybCwgaSwgKGludCljb2RlKTsKKyAgfQorCisgIHByaW50ZiggIkNMRUFOVVBcbiIgKTsKKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIHRlc3QgZnVuY3Rpb24gKi8KK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgaW50IHJlczsKKyAgQ1VSTFNIY29kZSBzY29kZSA9IENVUkxTSEVfT0s7CisgIGNoYXIgKnVybDsKKyAgc3RydWN0IFRkYXRhIHRkYXRhOworICBDVVJMICpjdXJsOworICBDVVJMU0ggKnNoYXJlOworICBpbnQgaTsKKyAgc3RydWN0IHVzZXJkYXRhIHVzZXI7CisKKyAgdXNlci50ZXh0ID0gKGNoYXIgKikiUGlncyBpbiBzcGFjZSI7CisgIHVzZXIuY291bnRlciA9IDA7CisKKyAgcHJpbnRmKCAiR0xPQkFMX0lOSVRcbiIgKTsKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIC8qIHByZXBhcmUgc2hhcmUgKi8KKyAgcHJpbnRmKCAiU0hBUkVfSU5JVFxuIiApOworICBpZiAoKHNoYXJlID0gY3VybF9zaGFyZV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfc2hhcmVfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBpZiAoIENVUkxTSEVfT0sgPT0gc2NvZGUgKSB7CisgICAgcHJpbnRmKCAiQ1VSTFNIT1BUX0xPQ0tGVU5DXG4iICk7CisgICAgc2NvZGUgPSBjdXJsX3NoYXJlX3NldG9wdCggc2hhcmUsIENVUkxTSE9QVF9MT0NLRlVOQywgbXlfbG9jayk7CisgIH0KKyAgaWYgKCBDVVJMU0hFX09LID09IHNjb2RlICkgeworICAgIHByaW50ZiggIkNVUkxTSE9QVF9VTkxPQ0tGVU5DXG4iICk7CisgICAgc2NvZGUgPSBjdXJsX3NoYXJlX3NldG9wdCggc2hhcmUsIENVUkxTSE9QVF9VTkxPQ0tGVU5DLCBteV91bmxvY2spOworICB9CisgIGlmICggQ1VSTFNIRV9PSyA9PSBzY29kZSApIHsKKyAgICBwcmludGYoICJDVVJMU0hPUFRfVVNFUkRBVEFcbiIgKTsKKyAgICBzY29kZSA9IGN1cmxfc2hhcmVfc2V0b3B0KCBzaGFyZSwgQ1VSTFNIT1BUX1VTRVJEQVRBLCAmdXNlcik7CisgIH0KKyAgaWYgKCBDVVJMU0hFX09LID09IHNjb2RlICkgeworICAgIHByaW50ZiggIkNVUkxfTE9DS19EQVRBX1NTTF9TRVNTSU9OXG4iICk7CisgICAgc2NvZGUgPSBjdXJsX3NoYXJlX3NldG9wdCggc2hhcmUsIENVUkxTSE9QVF9TSEFSRSwgQ1VSTF9MT0NLX0RBVEFfU1NMX1NFU1NJT04pOworICB9CisKKyAgaWYgKCBDVVJMU0hFX09LICE9IHNjb2RlICkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9zaGFyZV9zZXRvcHQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfc2hhcmVfY2xlYW51cChzaGFyZSk7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworCisgIHJlcyA9IDA7CisKKyAgLyogc3RhcnQgdHJlYWRzICovCisgIGZvciAoaT0xOyBpPD1USFJFQURTOyBpKysgKSB7CisKKyAgICAvKiBzZXQgdGhyZWFkIGRhdGEgKi8KKyAgICB0ZGF0YS51cmwgICA9IFVSTDsKKyAgICB0ZGF0YS5zaGFyZSA9IHNoYXJlOworCisgICAgLyogc2ltdWxhdGUgdGhyZWFkLCBkaXJlY3QgY2FsbCBvZiAidGhyZWFkIiBmdW5jdGlvbiAqLworICAgIHByaW50ZiggIioqKiBydW4gJWRcbiIsaSApOworICAgIGZpcmUoICZ0ZGF0YSApOworICB9CisKKworICAvKiBmZXRjaCBhIGFub3RoZXIgb25lICovCisgIHByaW50ZiggIioqKiBydW4gJWRcbiIsIGkgKTsKKyAgaWYgKChjdXJsID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIpOworICAgIGN1cmxfc2hhcmVfY2xlYW51cChzaGFyZSk7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICB1cmwgPSBVUkw7CisgIHRlc3Rfc2V0b3B0KCBjdXJsLCBDVVJMT1BUX1VSTCwgICAgICAgIHVybCApOworICBwcmludGYoICJDVVJMT1BUX1NIQVJFXG4iICk7CisgIHRlc3Rfc2V0b3B0KCBjdXJsLCBDVVJMT1BUX1NIQVJFLCAgICAgIHNoYXJlICk7CisKKyAgcHJpbnRmKCAiUEVSRk9STVxuIiApOworICBjdXJsX2Vhc3lfcGVyZm9ybSggY3VybCApOworCisgIC8qIHRyeSB0byBmcmVlIHNoYXJlLCBleHBlY3QgdG8gZmFpbCBiZWNhdXNlIHNoYXJlIGlzIGluIHVzZSovCisgIHByaW50ZiggInRyeSBTSEFSRV9DTEVBTlVQLi4uXG4iICk7CisgIHNjb2RlID0gY3VybF9zaGFyZV9jbGVhbnVwKCBzaGFyZSApOworICBpZiAoIHNjb2RlPT1DVVJMU0hFX09LICkKKyAgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9zaGFyZV9jbGVhbnVwIHN1Y2NlZWQgYnV0IGVycm9yIGV4cGVjdGVkXG4iKTsKKyAgICBzaGFyZSA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgcHJpbnRmKCAiU0hBUkVfQ0xFQU5VUCBmYWlsZWQsIGNvcnJlY3RcbiIgKTsKKyAgfQorCit0ZXN0X2NsZWFudXA6CisKKyAgLyogY2xlYW4gdXAgbGFzdCBoYW5kbGUgKi8KKyAgcHJpbnRmKCAiQ0xFQU5VUFxuIiApOworICBjdXJsX2Vhc3lfY2xlYW51cCggY3VybCApOworCisgIC8qIGZyZWUgc2hhcmUgKi8KKyAgcHJpbnRmKCAiU0hBUkVfQ0xFQU5VUFxuIiApOworICBzY29kZSA9IGN1cmxfc2hhcmVfY2xlYW51cCggc2hhcmUgKTsKKyAgaWYgKCBzY29kZSE9Q1VSTFNIRV9PSyApCisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX3NoYXJlX2NsZWFudXAgZmFpbGVkLCBjb2RlIGVycm5vICVkXG4iLAorICAgICAgICAgICAgKGludClzY29kZSk7CisKKyAgcHJpbnRmKCAiR0xPQkFMX0NMRUFOVVBcbiIgKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiByZXM7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTkwLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU5MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YzkwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU5MC5jCkBAIC0wLDAgKzEsNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworLyoKKyAgQmFzZWQgb24gYSBidWcgcmVwb3J0IHJlY2lwZSBieSBSZW5lIEJlcm5oYXJkdCBpbgorICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMTAvMDMyMy5odG1sCisKKyAgSXQgaXMgcmVwcm9kdWNpYmxlIGJ5IHRoZSBmb2xsb3dpbmcgc3RlcHM6CisKKyAgLSBVc2UgYSBwcm94eSB0aGF0IG9mZmVycyBOVExNIGFuZCBOZWdvdGlhdGUgKCBDVVJMT1BUX1BST1hZIGFuZAorICBDVVJMT1BUX1BST1hZUE9SVCApCisgIC0gVGVsbCBsaWJjdXJsIE5PVCB0byB1c2UgTmVnb3RpYXRlICBDVVJMX0VBU1lfU0VUT1BUKENVUkxPUFRfUFJPWFlBVVRILAorICBDVVJMQVVUSF9CQVNJQyB8IENVUkxBVVRIX0RJR0VTVCB8IENVUkxBVVRIX05UTE0gKQorICAtIFN0YXJ0IHRoZSByZXF1ZXN0CisqLworCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMY29kZSByZXM7CisgIENVUkwgKmN1cmw7CisKKyAgaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIGlmICgoY3VybCA9IGN1cmxfZWFzeV9pbml0KCkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgcmV0dXJuIFRFU1RfRVJSX01BSk9SX0JBRDsKKyAgfQorCisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0hFQURFUiwgMUwpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST1hZQVVUSCwKKyAgICAgICAgICAgICAgQ1VSTEFVVEhfQkFTSUMgfCBDVVJMQVVUSF9ESUdFU1QgfCBDVVJMQVVUSF9OVExNKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QUk9YWSwgbGlidGVzdF9hcmcyKTsgLyogc2V0IGluIGZpcnN0LmMgKi8KKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QUk9YWVVTRVJQV0QsICJtZTpwYXNzd29yZCIpOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisgIHRlc3RfY2xlYW51cDoKKworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIHJldHVybiAoaW50KXJlczsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1OTEuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTkxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1NWUyYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTkxLmMKQEAgLTAsMCArMSwxNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworLyogbGliNTkxIGlzIHVzZWQgZm9yIHRlc3QgY2FzZXMgNTkxLCA1OTIsIDU5MyBhbmQgNTk0ICovCisKKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAidGVzdHV0aWwuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNkZWZpbmUgVEVTVF9IQU5HX1RJTUVPVVQgNjAgKiAxMDAwCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTCAqZWFzeSA9IE5VTEw7CisgIENVUkxNICptdWx0aSA9IE5VTEw7CisgIGludCByZXMgPSAwOworICBpbnQgcnVubmluZzsKKyAgaW50IG1zZ3NfbGVmdDsKKyAgQ1VSTE1zZyAqbXNnOworICBGSUxFICp1cGxvYWQgPSBOVUxMOworICBpbnQgZXJyb3I7CisKKyAgc3RhcnRfdGVzdF90aW1pbmcoKTsKKworICB1cGxvYWQgPSBmb3BlbihsaWJ0ZXN0X2FyZzMsICJyYiIpOworICBpZighdXBsb2FkKSB7CisgICAgZXJyb3IgPSBFUlJOTzsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImZvcGVuKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkICglcylcbiIsCisgICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgZmlsZTogKCVzKVxuIiwgbGlidGVzdF9hcmczKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfRk9QRU47CisgIH0KKworICByZXNfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKyAgaWYocmVzKSB7CisgICAgZmNsb3NlKHVwbG9hZCk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIGVhc3lfaW5pdChlYXN5KTsKKworICAvKiBnbyB2ZXJib3NlICovCisgIGVhc3lfc2V0b3B0KGVhc3ksIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgIC8qIHNwZWNpZnkgdGFyZ2V0ICovCisgIGVhc3lfc2V0b3B0KGVhc3ksIENVUkxPUFRfVVJMLCBVUkwpOworCisgIC8qIGVuYWJsZSB1cGxvYWRpbmcgKi8KKyAgZWFzeV9zZXRvcHQoZWFzeSwgQ1VSTE9QVF9VUExPQUQsIDFMKTsKKworICAvKiBkYXRhIHBvaW50ZXIgZm9yIHRoZSBmaWxlIHJlYWQgZnVuY3Rpb24gKi8KKyAgZWFzeV9zZXRvcHQoZWFzeSwgQ1VSTE9QVF9SRUFEREFUQSwgdXBsb2FkKTsKKworICAvKiB1c2UgYWN0aXZlIG1vZGUgRlRQICovCisgIGVhc3lfc2V0b3B0KGVhc3ksIENVUkxPUFRfRlRQUE9SVCwgIi0iKTsKKworICAvKiBzZXJ2ZXIgY29ubmVjdGlvbiB0aW1lb3V0ICovCisgIGVhc3lfc2V0b3B0KGVhc3ksIENVUkxPUFRfQUNDRVBUVElNRU9VVF9NUywKKyAgICAgICAgICAgICAgc3RydG9sKGxpYnRlc3RfYXJnMiwgTlVMTCwgMTApKjEwMDApOworCisgIG11bHRpX2luaXQobXVsdGkpOworCisgIG11bHRpX2FkZF9oYW5kbGUobXVsdGksIGVhc3kpOworCisgIGZvcig7OykgeworICAgIHN0cnVjdCB0aW1ldmFsIGludGVydmFsOworICAgIGZkX3NldCBmZHJlYWQ7CisgICAgZmRfc2V0IGZkd3JpdGU7CisgICAgZmRfc2V0IGZkZXhjZXA7CisgICAgbG9uZyB0aW1lb3V0ID0gLTk5OworICAgIGludCBtYXhmZCA9IC05OTsKKworICAgIG11bHRpX3BlcmZvcm0obXVsdGksICZydW5uaW5nKTsKKworICAgIGFib3J0X29uX3Rlc3RfdGltZW91dCgpOworCisgICAgaWYoIXJ1bm5pbmcpCisgICAgICBicmVhazsgLyogZG9uZSAqLworCisgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICBGRF9aRVJPKCZmZHdyaXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKworICAgIG11bHRpX2Zkc2V0KG11bHRpLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZtYXhmZCk7CisKKyAgICAvKiBBdCB0aGlzIHBvaW50LCBtYXhmZCBpcyBndWFyYW50ZWVkIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAtMS4gKi8KKworICAgIG11bHRpX3RpbWVvdXQobXVsdGksICZ0aW1lb3V0KTsKKworICAgIC8qIEF0IHRoaXMgcG9pbnQsIHRpbWVvdXQgaXMgZ3VhcmFudGVlZCB0byBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gLTEuICovCisKKyAgICBpZih0aW1lb3V0ICE9IC0xTCkgeworICAgICAgaW50ZXJ2YWwudHZfc2VjID0gdGltZW91dC8xMDAwOworICAgICAgaW50ZXJ2YWwudHZfdXNlYyA9ICh0aW1lb3V0JTEwMDApKjEwMDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaW50ZXJ2YWwudHZfc2VjID0gMDsKKyAgICAgIGludGVydmFsLnR2X3VzZWMgPSAxMDAwMDBMOyAvKiAxMDAgbXMgKi8KKyAgICB9CisKKyAgICBzZWxlY3RfdGVzdChtYXhmZCsxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZpbnRlcnZhbCk7CisKKyAgICBhYm9ydF9vbl90ZXN0X3RpbWVvdXQoKTsKKyAgfQorCisgIG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKG11bHRpLCAmbXNnc19sZWZ0KTsKKyAgaWYobXNnKQorICAgIHJlcyA9IG1zZy0+ZGF0YS5yZXN1bHQ7CisKK3Rlc3RfY2xlYW51cDoKKworICAvKiB1bmRvY3VtZW50ZWQgY2xlYW51cCBzZXF1ZW5jZSAtIHR5cGUgVUEgKi8KKworICBjdXJsX211bHRpX2NsZWFudXAobXVsdGkpOworICBjdXJsX2Vhc3lfY2xlYW51cChlYXN5KTsKKyAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisgIC8qIGNsb3NlIHRoZSBsb2NhbCBmaWxlICovCisgIGZjbG9zZSh1cGxvYWQpOworCisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU5Ny5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1OTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTVlZTRmCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC9saWI1OTcuYwpAQCAtMCwwICsxLDE0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaW5jbHVkZSAidGVzdHV0aWwuaCIKKyNpbmNsdWRlICJ3YXJubGVzcy5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNkZWZpbmUgVEVTVF9IQU5HX1RJTUVPVVQgNSAqIDEwMDAKKworLyoKKyAqIFRlc3QgY2FzZSBmb3IgYmVsb3cgc2NlbmFyaW86CisgKiAgIC0gQ29ubmVjdCB0byBhbiBGVFAgc2VydmVyIHVzaW5nIENPTk5FQ1RfT05MWSBvcHRpb24KKyAqICAgLSB0cmFuc2ZlciBzb21lIGZpbGVzIHdpdGggcmUtdXNpbmcgdGhlIGNvbm5lY3Rpb24gKG9taXR0ZWQgaW4gdGVzdCBjYXNlKQorICogICAtIERpc2Nvbm5lY3QgZnJvbSBGVFAgc2VydmVyIHdpdGggc2VuZGluZyBRVUlUIGNvbW1hbmQKKyAqCisgKiBUaGUgdGVzdCBjYXNlIG9yaWdpbmF0ZWQgZm9yIHZlcmlmeWluZyBDT05ORUNUX09OTFkgb3B0aW9uIHNoYWxsIG5vdAorICogYmxvY2sgYWZ0ZXIgcHJvdG9jb2wgY29ubmVjdCBpcyBkb25lLCBidXQgaXQgcmV0dXJucyB0aGUgbWVzc2FnZQorICogd2l0aCBmdW5jdGlvbiBjdXJsX211bHRpX2luZm9fcmVhZCgpLgorICovCisKK2VudW0geworICBDT05ORUNUX09OTFlfUEhBU0UgPSAwLAorICBRVUlUX1BIQVNFLAorICBMQVNUX1BIQVNFCit9OworCitpbnQgdGVzdChjaGFyICpVUkwpCit7CisgIENVUkwgKmVhc3kgPSBOVUxMOworICBDVVJMTSAqbXVsdGkgPSBOVUxMOworICBpbnQgcmVzID0gMDsKKyAgaW50IHJ1bm5pbmc7CisgIGludCBtc2dzX2xlZnQ7CisgIGludCBwaGFzZTsKKyAgQ1VSTE1zZyAqbXNnOworCisgIHN0YXJ0X3Rlc3RfdGltaW5nKCk7CisKKyAgcmVzX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisgIGlmKHJlcykgeworICAgIHJldHVybiByZXM7CisgIH0KKworICBlYXN5X2luaXQoZWFzeSk7CisKKyAgbXVsdGlfaW5pdChtdWx0aSk7CisKKyAgZm9yIChwaGFzZSA9IENPTk5FQ1RfT05MWV9QSEFTRTsgcGhhc2UgPCBMQVNUX1BIQVNFOyArK3BoYXNlKSB7CisgICAgLyogZ28gdmVyYm9zZSAqLworICAgIGVhc3lfc2V0b3B0KGVhc3ksIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgICAgLyogc3BlY2lmeSB0YXJnZXQgKi8KKyAgICBlYXN5X3NldG9wdChlYXN5LCBDVVJMT1BUX1VSTCwgVVJMKTsKKworICAgIC8qIGVuYWJsZSAnQ09OTkVDVF9PTkxZJyBvcHRpb24gd2hlbiBpbiBjb25uZWN0IHBoYXNlICovCisgICAgaWYgKHBoYXNlID09IENPTk5FQ1RfT05MWV9QSEFTRSkKKyAgICAgIGVhc3lfc2V0b3B0KGVhc3ksIENVUkxPUFRfQ09OTkVDVF9PTkxZLCAxTCk7CisKKyAgICAvKiBlbmFibGUgJ05PQk9EWScgb3B0aW9uIHRvIHNlbmQgJ1FVSVQnIGNvbW1hbmQgaW4gcXVpdCBwaGFzZSAqLworICAgIGlmIChwaGFzZSA9PSBRVUlUX1BIQVNFKSB7CisgICAgICBlYXN5X3NldG9wdChlYXN5LCBDVVJMT1BUX0NPTk5FQ1RfT05MWSwgMEwpOworICAgICAgZWFzeV9zZXRvcHQoZWFzeSwgQ1VSTE9QVF9OT0JPRFksIDFMKTsKKyAgICAgIGVhc3lfc2V0b3B0KGVhc3ksIENVUkxPUFRfRk9SQklEX1JFVVNFLCAxTCk7CisgICAgfQorCisgICAgbXVsdGlfYWRkX2hhbmRsZShtdWx0aSwgZWFzeSk7CisKKyAgICBmb3IoOzspIHsKKyAgICAgIHN0cnVjdCB0aW1ldmFsIGludGVydmFsOworICAgICAgZmRfc2V0IGZkcmVhZDsKKyAgICAgIGZkX3NldCBmZHdyaXRlOworICAgICAgZmRfc2V0IGZkZXhjZXA7CisgICAgICBsb25nIHRpbWVvdXQgPSAtOTk7CisgICAgICBpbnQgbWF4ZmQgPSAtOTk7CisKKyAgICAgIG11bHRpX3BlcmZvcm0obXVsdGksICZydW5uaW5nKTsKKworICAgICAgYWJvcnRfb25fdGVzdF90aW1lb3V0KCk7CisKKyAgICAgIGlmKCFydW5uaW5nKQorICAgICAgICBicmVhazsgLyogZG9uZSAqLworCisgICAgICBGRF9aRVJPKCZmZHJlYWQpOworICAgICAgRkRfWkVSTygmZmR3cml0ZSk7CisgICAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKworICAgICAgbXVsdGlfZmRzZXQobXVsdGksICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJm1heGZkKTsKKworICAgICAgLyogQXQgdGhpcyBwb2ludCwgbWF4ZmQgaXMgZ3VhcmFudGVlZCB0byBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gLTEuICovCisKKyAgICAgIG11bHRpX3RpbWVvdXQobXVsdGksICZ0aW1lb3V0KTsKKworICAgICAgLyogQXQgdGhpcyBwb2ludCwgdGltZW91dCBpcyBndWFyYW50ZWVkIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAtMS4gKi8KKworICAgICAgaWYodGltZW91dCAhPSAtMUwpIHsKKyAgICAgICAgaW50ZXJ2YWwudHZfc2VjID0gdGltZW91dC8xMDAwOworICAgICAgICBpbnRlcnZhbC50dl91c2VjID0gKHRpbWVvdXQlMTAwMCkqMTAwMDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpbnRlcnZhbC50dl9zZWMgPSBURVNUX0hBTkdfVElNRU9VVC8xMDAwKzE7CisgICAgICAgIGludGVydmFsLnR2X3VzZWMgPSAwOworICAgICAgfQorCisgICAgICBzZWxlY3RfdGVzdChtYXhmZCsxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZpbnRlcnZhbCk7CisKKyAgICAgIGFib3J0X29uX3Rlc3RfdGltZW91dCgpOworICAgIH0KKworICAgIG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKG11bHRpLCAmbXNnc19sZWZ0KTsKKyAgICBpZihtc2cpCisgICAgICByZXMgPSBtc2ctPmRhdGEucmVzdWx0OworCisgICAgbXVsdGlfcmVtb3ZlX2hhbmRsZShtdWx0aSwgZWFzeSk7CisgIH0KKwordGVzdF9jbGVhbnVwOgorCisgIC8qIHVuZG9jdW1lbnRlZCBjbGVhbnVwIHNlcXVlbmNlIC0gdHlwZSBVQSAqLworCisgIGN1cmxfbXVsdGlfY2xlYW51cChtdWx0aSk7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGVhc3kpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvbGliNTk4LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU5OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YzFhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L2xpYjU5OC5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTGNvZGUgcmVzOworICBDVVJMICpjdXJsOworCisgIGlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImN1cmxfZ2xvYmFsX2luaXQoKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBpZiAoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUZFUkVSLCAiaHR0cDovL2V4YW1wbGUuY29tL3RoZS1tb28iKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VU0VSQUdFTlQsICJ0aGUtbW9vIGFnZW50IG5leHQgZ2VuZXJhdGlvbiIpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX0NPT0tJRSwgIm5hbWU9bW9vIik7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfVkVSQk9TRSwgMUwpOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworICBpZihyZXMpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInJldHJpZXZlIDEgZmFpbGVkXG4iKTsKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKyAgfQorCisgIGN1cmxfZWFzeV9yZXNldChjdXJsKTsKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IRUFERVIsIDFMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGlmKHJlcykKKyAgICBmcHJpbnRmKHN0ZGVyciwgInJldHJpZXZlIDIgZmFpbGVkXG4iKTsKKwordGVzdF9jbGVhbnVwOgorCisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIChpbnQpcmVzOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3NldGhvc3RuYW1lLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3NldGhvc3RuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmOTRmOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3Qvc2V0aG9zdG5hbWUuYwpAQCAtMCwwICsxLDQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlICJzZXRob3N0bmFtZS5oIgorCisvKgorICogd2UgZm9yY2Ugb3VyIG93biBob3N0IG5hbWUsIGluIG9yZGVyIHRvIG1ha2Ugc29tZSB0ZXN0cyBtYWNoaW5lIGluZGVwZW5kZW50CisgKi8KKworaW50IGdldGhvc3RuYW1lKGNoYXIgKm5hbWUsIEdFVEhPU1ROQU1FX1RZUEVfQVJHMiBuYW1lbGVuKQoreworICBjb25zdCBjaGFyICpmb3JjZV9ob3N0bmFtZSA9IGdldGVudigiQ1VSTF9HRVRIT1NUTkFNRSIpOworICBpZihmb3JjZV9ob3N0bmFtZSkgeworICAgIHN0cm5jcHkobmFtZSwgZm9yY2VfaG9zdG5hbWUsIG5hbWVsZW4pOworICAgIG5hbWVbbmFtZWxlbi0xXSA9ICdcMCc7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBMRF9QUkVMT0FEIHVzZWQsIGJ1dCBubyBob3N0bmFtZSBzZXQsIHdlJ2xsIGp1c3QgcmV0dXJuIGEgZmFpbHVyZSAqLworICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3NldGhvc3RuYW1lLmggYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3NldGhvc3RuYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2MzNkZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3Qvc2V0aG9zdG5hbWUuaApAQCAtMCwwICsxLDQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIChkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fU1lNQklBTjMyX18pKSAmJiAhZGVmaW5lZChDVVJMX1NUQVRJQ0xJQikKKyMgIGlmIGRlZmluZWQoQlVJTERJTkdfTElCQ1VSTCkKKyMgICAgZGVmaW5lIExJQkhPU1ROQU1FX0VYVEVSTiAgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICBlbHNlCisjICAgIGRlZmluZSBMSUJIT1NUTkFNRV9FWFRFUk4gIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgZW5kaWYKKyNlbHNlCisjICBpZmRlZiBDVVJMX0hJRERFTl9TWU1CT0xTCisjICAgIGRlZmluZSBMSUJIT1NUTkFNRV9FWFRFUk4gQ1VSTF9FWFRFUk5fU1lNQk9MCisjICBlbHNlCisjICAgIGRlZmluZSBMSUJIT1NUTkFNRV9FWFRFUk4KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFVTRV9XSU5TT0NLCisjICBkZWZpbmUgRlVOQ0FMTENPTlYgX19zdGRjYWxsCisjZWxzZQorIyAgZGVmaW5lIEZVTkNBTExDT05WCisjZW5kaWYKKworTElCSE9TVE5BTUVfRVhURVJOIGludCBGVU5DQUxMQ09OVgorICBnZXRob3N0bmFtZShjaGFyICpuYW1lLCBHRVRIT1NUTkFNRV9UWVBFX0FSRzIgbmFtZWxlbik7CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvdGVzdC5oIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxYTU3MQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvdGVzdC5oCkBAIC0wLDAgKzEsNDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTm93IGluY2x1ZGUgdGhlIHNldHVwLmggZmlsZSBmcm9tIGxpYmN1cmwncyBwcml2YXRlIGxpYmRpciAodGhlIHNvdXJjZQorICAgdmVyc2lvbiwgYnV0IHRoYXQgbWlnaHQgaW5jbHVkZSAiY3VybF9jb25maWcuaCIgZnJvbSB0aGUgYnVpbGQgZGlyIHNvIHdlCisgICBuZWVkIGJvdGggb2YgdGhlbSBpbiB0aGUgaW5jbHVkZSBwYXRoKSwgc28gdGhhdCB3ZSBnZXQgZ29vZCBpbi1kZXB0aAorICAga25vd2xlZGdlIGFib3V0IHRoZSBzeXN0ZW0gd2UncmUgYnVpbGRpbmcgdGhpcyBvbiAqLworCisjZGVmaW5lIENVUkxfTk9fT0xESUVTCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU0VMRUNUX0gKKy8qIHNpbmNlIHNvIG1hbnkgdGVzdHMgdXNlIHNlbGVjdCgpLCB3ZSBjYW4ganVzdCBhcyB3ZWxsIGluY2x1ZGUgaXQgaGVyZSAqLworI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKy8qIGF0IGxlYXN0IHNvbWV3aGF0IG9sZGlzaCBGcmVlQlNEIHN5c3RlbXMgbmVlZCB0aGlzIGZvciBzZWxlY3QoKSAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZmRlZiBUUEYKKyMgIGluY2x1ZGUgInNlbGVjdC5oIgorI2VuZGlmCisKKyNkZWZpbmUgdGVzdF9zZXRvcHQoQSxCLEMpIFwKKyAgaWYoKHJlcyA9IGN1cmxfZWFzeV9zZXRvcHQoKEEpLChCKSwoQykpKSAhPSBDVVJMRV9PSykgZ290byB0ZXN0X2NsZWFudXAKKworI2RlZmluZSB0ZXN0X211bHRpX3NldG9wdChBLEIsQykgXAorICBpZigocmVzID0gY3VybF9tdWx0aV9zZXRvcHQoKEEpLChCKSwoQykpKSAhPSBDVVJMRV9PSykgZ290byB0ZXN0X2NsZWFudXAKKworZXh0ZXJuIGNoYXIgKmxpYnRlc3RfYXJnMjsgLyogc2V0IGJ5IGZpcnN0LmMgdG8gdGhlIGFyZ3ZbMl0gb3IgTlVMTCAqLworZXh0ZXJuIGNoYXIgKmxpYnRlc3RfYXJnMzsgLyogc2V0IGJ5IGZpcnN0LmMgdG8gdGhlIGFyZ3ZbM10gb3IgTlVMTCAqLworCisvKiBhcmdjIGFuZCBhcmd2IGFzIHBhc3NlZCBpbiB0byB0aGUgbWFpbigpIGZ1bmN0aW9uICovCitleHRlcm4gaW50IHRlc3RfYXJnYzsKK2V4dGVybiBjaGFyICoqdGVzdF9hcmd2OworCitleHRlcm4gc3RydWN0IHRpbWV2YWwgdHZfdGVzdF9zdGFydDsgLyogZm9yIHRlc3QgdGltaW5nICovCisKK2V4dGVybiBpbnQgc2VsZWN0X3dyYXBwZXIoaW50IG5mZHMsIGZkX3NldCAqcmQsIGZkX3NldCAqd3IsIGZkX3NldCAqZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdHYpOworCitleHRlcm4gaW50IHRlc3QoY2hhciAqVVJMKTsgLyogdGhlIGFjdHVhbCB0ZXN0IGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IGVhY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsIGxpYlhYWC5jIGZpbGUgKi8KKworI2lmZGVmIFVOSVRURVNUUworZXh0ZXJuIGludCB1bml0ZmFpbDsKKyNlbmRpZgorCisvKgorKiogVEVTVF9FUlJfKiB2YWx1ZXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gQ1VSTF9MQVNUIENVUkxjb2RlIGluIG9yZGVyCisqKiB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBhbnkgQ1VSTGNvZGUgb3IgQ1VSTE1jb2RlLiBUaGVzZSBURVNUX0VSUl8qCisqKiBjb2RlcyBhcmUgcmV0dXJuZWQgdG8gc2lnbmFsIHRlc3Qgc3BlY2lmaWMgc2l0dWF0aW9ucyBhbmQgc2hvdWxkCisqKiBub3QgZ2V0IG1peGVkIHdpdGggQ1VSTGNvZGUgb3IgQ1VSTE1jb2RlIHZhbHVlcy4KKyoqCisqKiBGb3IgcG9ydGFiaWxpdHkgcmVhc29ucyBURVNUX0VSUl8qIHZhbHVlcyBzaG91bGQgYmUgbGVzcyB0aGFuIDEyNy4KKyovCisKKyNkZWZpbmUgVEVTVF9FUlJfTUFKT1JfQkFEICAgICAxMjYKKyNkZWZpbmUgVEVTVF9FUlJfUlVOU19GT1JFVkVSICAxMjUKKyNkZWZpbmUgVEVTVF9FUlJfRUFTWV9JTklUICAgICAxMjQKKyNkZWZpbmUgVEVTVF9FUlJfTVVMVElfSU5JVCAgICAxMjMKKyNkZWZpbmUgVEVTVF9FUlJfTlVNX0hBTkRMRVMgICAxMjIKKyNkZWZpbmUgVEVTVF9FUlJfU0VMRUNUICAgICAgICAxMjEKKyNkZWZpbmUgVEVTVF9FUlJfU1VDQ0VTUyAgICAgICAxMjAKKyNkZWZpbmUgVEVTVF9FUlJfRkFJTFVSRSAgICAgICAxMTkKKyNkZWZpbmUgVEVTVF9FUlJfVVNBR0UgICAgICAgICAxMTgKKyNkZWZpbmUgVEVTVF9FUlJfRk9QRU4gICAgICAgICAxMTcKKyNkZWZpbmUgVEVTVF9FUlJfRlNUQVQgICAgICAgICAxMTYKKyNkZWZpbmUgVEVTVF9FUlJfQkFEX1RJTUVPVVQgICAxMTUKKworLyoKKyoqIE1hY3JvcyBmb3IgdGVzdCBzb3VyY2UgY29kZSByZWFkYWJpbGl0eS9tYWludGFpbmFiaWxpdHkuCisqKgorKiogQWxsIG9mIHRoZSBmb2xsb3dpbmcgbWFjcm9zIHJlcXVpcmUgdGhhdCBhbiBpbnQgZGF0YSB0eXBlICdyZXMnIHZhcmlhYmxlCisqKiBleGlzdHMgaW4gc2NvcGUgd2hlcmUgbWFjcm8gaXMgdXNlZCwgYW5kIHRoYXQgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgdG8KKyoqIHplcm8gYmVmb3JlIHRoZSBtYWNybyBpcyB1c2VkLgorKioKKyoqIGV4ZV8qIGFuZCBjaGtfKiBtYWNyb3MgYXJlIGhlbHBlciBtYWNyb3Mgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZnJvbQorKiogb3V0c2lkZSBvZiB0aGlzIGhlYWRlciBmaWxlLiBBcmd1bWVudHMgJ1knIGFuZCAnWicgb2YgdGhlc2UgcmVwcmVzZW50CisqKiBzb3VyY2UgY29kZSBmaWxlIGFuZCBsaW5lIG51bWJlciwgd2hpbGUgQXJndW1lbnRzICdBJywgJ0InLCBldGMsIGFyZQorKiogdGhlIGFyZ3VtZW50cyB1c2VkIHRvIGFjdHVhbGx5IGNhbGwgYSBsaWJjdXJsIGZ1bmN0aW9uLgorKioKKyoqIEFsbCBlYXN5XyogYW5kIG11bHRpXyogbWFjcm9zIGNhbGwgYSBsaWJjdXJsIGZ1bmN0aW9uIGFuZCBldmFsdWF0ZSBpZgorKiogdGhlIGZ1bmN0aW9uIGhhcyBzdWNjZWVkZWQgb3IgZmFpbGVkLiBXaGVuIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyAncmVzJworKiogdmFyaWFibGUgaXMgbm90IHNldCBub3IgY2xlYXJlZCBhbmQgcHJvZ3JhbSBjb250aW51ZXMgbm9ybWFsIGZsb3cuIE9uCisqKiB0aGUgb3RoZXIgaGFuZCBpZiBmdW5jdGlvbiBmYWlscyAncmVzJyB2YXJpYWJsZSBpcyBzZXQgYW5kIGEganVtcCB0bworKiogbGFiZWwgJ3Rlc3RfY2xlYW51cCcgaXMgcGVyZm9ybWVkLgorKioKKyoqIEV2ZXJ5IGVhc3lfKiBhbmQgbXVsdGlfKiBtYWNyb3MgaGF2ZSBhIHJlc19lYXN5XyogYW5kIHJlc19tdWx0aV8qIG1hY3JvCisqKiBjb3VudGVycGFydCB0aGF0IG9wZXJhdGVzIGluIHRoYSBzYW1lIHdheSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBubworKioganVtcCB0YWtlcyBwbGFjZSBpbiBjYXNlIG9mIGZhaWx1cmUuIHJlc19lYXN5XyogYW5kIHJlc19tdWx0aV8qIG1hY3JvcworKiogc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGNoZWNraW5nIGlmICdyZXMnIHZhcmlhYmxlIGhhcyBiZWVuCisqKiBzZXQuCisqKgorKiogJ3JlcycgdmFyaWFibGUgd2hlbiBzZXQgd2lsbCBob2xkIGEgQ1VSTGNvZGUsIENVUkxNY29kZSwgb3IgYW55IG9mIHRoZQorKiogVEVTVF9FUlJfKiB2YWx1ZXMgZGVmaW5lZCBhYm92ZS4gSXQgaXMgYWR2aXNhYmxlIHRvIHJldHVybiB0aGlzIHZhbHVlCisqKiBhcyB0ZXN0IHJlc3VsdC4KKyovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBleGVfZWFzeV9pbml0KEEsWSxaKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZigoKEEpID0gY3VybF9lYXN5X2luaXQoKSkgPT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgY3VybF9lYXN5X2luaXQoKSBmYWlsZWRcbiIsIChZKSwgKFopKTsgXAorICAgIHJlcyA9IFRFU1RfRVJSX0VBU1lfSU5JVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBXSElMRV9GQUxTRQorCisjZGVmaW5lIHJlc19lYXN5X2luaXQoQSkgXAorICBleGVfZWFzeV9pbml0KChBKSwoX19GSUxFX18pLChfX0xJTkVfXykpCisKKyNkZWZpbmUgY2hrX2Vhc3lfaW5pdChBLFksWikgZG8geyBcCisgIGV4ZV9lYXN5X2luaXQoKEEpLChZKSwoWikpOyAgICAgXAorICBpZihyZXMpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsgICAgICAgICAgICBcCit9IFdISUxFX0ZBTFNFCisKKyNkZWZpbmUgZWFzeV9pbml0KEEpIFwKKyAgY2hrX2Vhc3lfaW5pdCgoQSksKF9fRklMRV9fKSwoX19MSU5FX18pKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZXhlX211bHRpX2luaXQoQSxZLFopIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmKCgoQSkgPSBjdXJsX211bHRpX2luaXQoKSkgPT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgY3VybF9tdWx0aV9pbml0KCkgZmFpbGVkXG4iLCAoWSksIChaKSk7IFwKKyAgICByZXMgPSBURVNUX0VSUl9NVUxUSV9JTklUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBXSElMRV9GQUxTRQorCisjZGVmaW5lIHJlc19tdWx0aV9pbml0KEEpIFwKKyAgZXhlX211bHRpX2luaXQoKEEpLChfX0ZJTEVfXyksKF9fTElORV9fKSkKKworI2RlZmluZSBjaGtfbXVsdGlfaW5pdChBLFksWikgZG8geyBcCisgIGV4ZV9tdWx0aV9pbml0KChBKSwoWSksKFopKTsgICAgIFwKKyAgaWYocmVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdvdG8gdGVzdF9jbGVhbnVwOyAgICAgICAgICAgICBcCit9IFdISUxFX0ZBTFNFCisKKyNkZWZpbmUgbXVsdGlfaW5pdChBKSBcCisgIGNoa19tdWx0aV9pbml0KChBKSwoX19GSUxFX18pLChfX0xJTkVfXykpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBleGVfZWFzeV9zZXRvcHQoQSxCLEMsWSxaKSBkbyB7ICAgICAgICAgICAgICAgICAgXAorICBDVVJMY29kZSBlYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZigoZWMgPSBjdXJsX2Vhc3lfc2V0b3B0KChBKSwoQiksKEMpKSkgIT0gQ1VSTEVfT0spIHsgXAorICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgY3VybF9lYXN5X3NldG9wdCgpIGZhaWxlZCwgIiAgXAorICAgICAgICAgICAgIndpdGggY29kZSAlZCAoJXMpXG4iLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKFkpLCAoWiksIChpbnQpZWMsIGN1cmxfZWFzeV9zdHJlcnJvcihlYykpOyAgXAorICAgIHJlcyA9IChpbnQpZWM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBXSElMRV9GQUxTRQorCisjZGVmaW5lIHJlc19lYXN5X3NldG9wdChBLEIsQykgXAorICBleGVfZWFzeV9zZXRvcHQoKEEpLChCKSwoQyksKF9fRklMRV9fKSwoX19MSU5FX18pKQorCisjZGVmaW5lIGNoa19lYXN5X3NldG9wdChBLEIsQyxZLFopIGRvIHsgXAorICBleGVfZWFzeV9zZXRvcHQoKEEpLChCKSwoQyksKFkpLChaKSk7IFwKKyAgaWYocmVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byB0ZXN0X2NsZWFudXA7ICAgICAgICAgICAgICAgICAgXAorfSBXSElMRV9GQUxTRQorCisjZGVmaW5lIGVhc3lfc2V0b3B0KEEsQixDKSBcCisgIGNoa19lYXN5X3NldG9wdCgoQSksKEIpLChDKSwoX19GSUxFX18pLChfX0xJTkVfXykpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBleGVfbXVsdGlfc2V0b3B0KEEsQixDLFksWikgZG8geyAgICAgICAgICAgICAgICAgIFwKKyAgQ1VSTE1jb2RlIGVjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmKChlYyA9IGN1cmxfbXVsdGlfc2V0b3B0KChBKSwoQiksKEMpKSkgIT0gQ1VSTE1fT0spIHsgXAorICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgY3VybF9tdWx0aV9zZXRvcHQoKSBmYWlsZWQsICIgIFwKKyAgICAgICAgICAgICJ3aXRoIGNvZGUgJWQgKCVzKVxuIiwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAoWSksIChaKSwgKGludCllYywgY3VybF9tdWx0aV9zdHJlcnJvcihlYykpOyAgXAorICAgIHJlcyA9IChpbnQpZWM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IFdISUxFX0ZBTFNFCisKKyNkZWZpbmUgcmVzX211bHRpX3NldG9wdChBLEIsQykgXAorICBleGVfbXVsdGlfc2V0b3B0KChBKSwoQiksKEMpLChfX0ZJTEVfXyksKF9fTElORV9fKSkKKworI2RlZmluZSBjaGtfbXVsdGlfc2V0b3B0KEEsQixDLFksWikgZG8geyBcCisgIGV4ZV9tdWx0aV9zZXRvcHQoKEEpLChCKSwoQyksKFkpLChaKSk7IFwKKyAgaWYocmVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdvdG8gdGVzdF9jbGVhbnVwOyAgICAgICAgICAgICAgICAgICBcCit9IFdISUxFX0ZBTFNFCisKKyNkZWZpbmUgbXVsdGlfc2V0b3B0KEEsQixDKSBcCisgIGNoa19tdWx0aV9zZXRvcHQoKEEpLChCKSwoQyksKF9fRklMRV9fKSwoX19MSU5FX18pKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZXhlX211bHRpX2FkZF9oYW5kbGUoQSxCLFksWikgZG8geyAgICAgICAgICAgICAgICAgICBcCisgIENVUkxNY29kZSBlYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZigoZWMgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUoKEEpLChCKSkpICE9IENVUkxNX09LKSB7ICAgIFwKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIGN1cmxfbXVsdGlfYWRkX2hhbmRsZSgpIGZhaWxlZCwgIiBcCisgICAgICAgICAgICAid2l0aCBjb2RlICVkICglcylcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKFkpLCAoWiksIChpbnQpZWMsIGN1cmxfbXVsdGlfc3RyZXJyb3IoZWMpKTsgICAgIFwKKyAgICByZXMgPSAoaW50KWVjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBXSElMRV9GQUxTRQorCisjZGVmaW5lIHJlc19tdWx0aV9hZGRfaGFuZGxlKEEsQikgXAorICBleGVfbXVsdGlfYWRkX2hhbmRsZSgoQSksKEIpLChfX0ZJTEVfXyksKF9fTElORV9fKSkKKworI2RlZmluZSBjaGtfbXVsdGlfYWRkX2hhbmRsZShBLEIsWSxaKSBkbyB7IFwKKyAgZXhlX211bHRpX2FkZF9oYW5kbGUoKEEpLChCKSwoWSksKFopKTsgICBcCisgIGlmKHJlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdvdG8gdGVzdF9jbGVhbnVwOyAgICAgICAgICAgICAgICAgICAgIFwKK30gV0hJTEVfRkFMU0UKKworI2RlZmluZSBtdWx0aV9hZGRfaGFuZGxlKEEsQikgXAorICBjaGtfbXVsdGlfYWRkX2hhbmRsZSgoQSksKEIpLChfX0ZJTEVfXyksKF9fTElORV9fKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGV4ZV9tdWx0aV9yZW1vdmVfaGFuZGxlKEEsQixZLFopIGRvIHsgICAgICAgICAgICAgICAgICAgXAorICBDVVJMTWNvZGUgZWM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYoKGVjID0gY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKChBKSwoQikpKSAhPSBDVVJMTV9PSykgeyAgICBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoKSBmYWlsZWQsICIgXAorICAgICAgICAgICAgIndpdGggY29kZSAlZCAoJXMpXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChZKSwgKFopLCAoaW50KWVjLCBjdXJsX211bHRpX3N0cmVycm9yKGVjKSk7ICAgICAgICBcCisgICAgcmVzID0gKGludCllYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gV0hJTEVfRkFMU0UKKworI2RlZmluZSByZXNfbXVsdGlfcmVtb3ZlX2hhbmRsZShBLEIpIFwKKyAgZXhlX211bHRpX3JlbW92ZV9oYW5kbGUoKEEpLChCKSwoX19GSUxFX18pLChfX0xJTkVfXykpCisKKyNkZWZpbmUgY2hrX211bHRpX3JlbW92ZV9oYW5kbGUoQSxCLFksWikgZG8geyBcCisgIGV4ZV9tdWx0aV9yZW1vdmVfaGFuZGxlKChBKSwoQiksKFkpLChaKSk7ICAgXAorICBpZihyZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsgICAgICAgICAgICAgICAgICAgICAgICBcCit9IFdISUxFX0ZBTFNFCisKKworI2RlZmluZSBtdWx0aV9yZW1vdmVfaGFuZGxlKEEsQikgXAorICBjaGtfbXVsdGlfcmVtb3ZlX2hhbmRsZSgoQSksKEIpLChfX0ZJTEVfXyksKF9fTElORV9fKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGV4ZV9tdWx0aV9wZXJmb3JtKEEsQixZLFopIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgQ1VSTE1jb2RlIGVjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZigoZWMgPSBjdXJsX211bHRpX3BlcmZvcm0oKEEpLChCKSkpICE9IENVUkxNX09LKSB7ICAgICAgICAgICBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBjdXJsX211bHRpX3BlcmZvcm0oKSBmYWlsZWQsICIgICAgICAgIFwKKyAgICAgICAgICAgICJ3aXRoIGNvZGUgJWQgKCVzKVxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKFkpLCAoWiksIChpbnQpZWMsIGN1cmxfbXVsdGlfc3RyZXJyb3IoZWMpKTsgICAgICAgICBcCisgICAgcmVzID0gKGludCllYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBlbHNlIGlmKCooKEIpKSA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBjdXJsX211bHRpX3BlcmZvcm0oKSBzdWNjZWVkZWQsICIgICAgIFwKKyAgICAgICAgICAgICJidXQgcmV0dXJuZWQgaW52YWxpZCBydW5uaW5nX2hhbmRsZXMgdmFsdWUgKCVkKVxuIiwgXAorICAgICAgICAgICAgKFkpLCAoWiksIChpbnQpKigoQikpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVzID0gVEVTVF9FUlJfTlVNX0hBTkRMRVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBXSElMRV9GQUxTRQorCisjZGVmaW5lIHJlc19tdWx0aV9wZXJmb3JtKEEsQikgXAorICBleGVfbXVsdGlfcGVyZm9ybSgoQSksKEIpLChfX0ZJTEVfXyksKF9fTElORV9fKSkKKworI2RlZmluZSBjaGtfbXVsdGlfcGVyZm9ybShBLEIsWSxaKSBkbyB7IFwKKyAgZXhlX211bHRpX3BlcmZvcm0oKEEpLChCKSwoWSksKFopKTsgICBcCisgIGlmKHJlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdvdG8gdGVzdF9jbGVhbnVwOyAgICAgICAgICAgICAgICAgIFwKK30gV0hJTEVfRkFMU0UKKworI2RlZmluZSBtdWx0aV9wZXJmb3JtKEEsQikgXAorICBjaGtfbXVsdGlfcGVyZm9ybSgoQSksKEIpLChfX0ZJTEVfXyksKF9fTElORV9fKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGV4ZV9tdWx0aV9mZHNldChBLEIsQyxELEUsWSxaKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgQ1VSTE1jb2RlIGVjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZigoZWMgPSBjdXJsX211bHRpX2Zkc2V0KChBKSwoQiksKEMpLChEKSwoRSkpKSAhPSBDVVJMTV9PSykgeyBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBjdXJsX211bHRpX2Zkc2V0KCkgZmFpbGVkLCAiICAgICAgICAgIFwKKyAgICAgICAgICAgICJ3aXRoIGNvZGUgJWQgKCVzKVxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKFkpLCAoWiksIChpbnQpZWMsIGN1cmxfbXVsdGlfc3RyZXJyb3IoZWMpKTsgICAgICAgICBcCisgICAgcmVzID0gKGludCllYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBlbHNlIGlmKCooKEUpKSA8IC0xKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBjdXJsX211bHRpX2Zkc2V0KCkgc3VjY2VlZGVkLCAiICAgICAgIFwKKyAgICAgICAgICAgICJidXQgcmV0dXJuZWQgaW52YWxpZCBtYXhfZmQgdmFsdWUgKCVkKVxuIiwgICAgICAgICAgXAorICAgICAgICAgICAgKFkpLCAoWiksIChpbnQpKigoRSkpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVzID0gVEVTVF9FUlJfTlVNX0hBTkRMRVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBXSElMRV9GQUxTRQorCisjZGVmaW5lIHJlc19tdWx0aV9mZHNldChBLEIsQyxELEUpIFwKKyAgZXhlX211bHRpX2Zkc2V0KChBKSwoQiksKEMpLChEKSwoRSksKF9fRklMRV9fKSwoX19MSU5FX18pKQorCisjZGVmaW5lIGNoa19tdWx0aV9mZHNldChBLEIsQyxELEUsWSxaKSBkbyB7ICAgICBcCisgIGV4ZV9tdWx0aV9mZHNldCgoQSksKEIpLChDKSwoRCksKEUpLChZKSwoWikpOyBcCisgIGlmKHJlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byB0ZXN0X2NsZWFudXA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IFdISUxFX0ZBTFNFCisKKyNkZWZpbmUgbXVsdGlfZmRzZXQoQSxCLEMsRCxFKSBcCisgIGNoa19tdWx0aV9mZHNldCgoQSksKEIpLChDKSwoRCksKEUpLChfX0ZJTEVfXyksKF9fTElORV9fKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGV4ZV9tdWx0aV90aW1lb3V0KEEsQixZLFopIGRvIHsgICAgICAgICAgICAgICAgICAgICAgXAorICBDVVJMTWNvZGUgZWM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYoKGVjID0gY3VybF9tdWx0aV90aW1lb3V0KChBKSwoQikpKSAhPSBDVVJMTV9PSykgeyAgICAgICBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBjdXJsX211bHRpX3RpbWVvdXQoKSBmYWlsZWQsICIgICAgXAorICAgICAgICAgICAgIndpdGggY29kZSAlZCAoJXMpXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChZKSwgKFopLCAoaW50KWVjLCBjdXJsX211bHRpX3N0cmVycm9yKGVjKSk7ICAgICBcCisgICAgcmVzID0gKGludCllYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZWxzZSBpZigqKChCKSkgPCAtMUwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBjdXJsX211bHRpX3RpbWVvdXQoKSBzdWNjZWVkZWQsICIgXAorICAgICAgICAgICAgImJ1dCByZXR1cm5lZCBpbnZhbGlkIHRpbWVvdXQgdmFsdWUgKCVsZClcbiIsICAgIFwKKyAgICAgICAgICAgIChZKSwgKFopLCAobG9uZykqKChCKSkpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVzID0gVEVTVF9FUlJfQkFEX1RJTUVPVVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gV0hJTEVfRkFMU0UKKworI2RlZmluZSByZXNfbXVsdGlfdGltZW91dChBLEIpIFwKKyAgZXhlX211bHRpX3RpbWVvdXQoKEEpLChCKSwoX19GSUxFX18pLChfX0xJTkVfXykpCisKKyNkZWZpbmUgY2hrX211bHRpX3RpbWVvdXQoQSxCLFksWikgZG8geyBcCisgIGV4ZV9tdWx0aV90aW1lb3V0KChBKSwoQiksKFkpLChaKSk7ICAgXAorICBpZihyZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsgICAgICAgICAgICAgICAgICBcCit9IFdISUxFX0ZBTFNFCisKKyNkZWZpbmUgbXVsdGlfdGltZW91dChBLEIpIFwKKyAgY2hrX211bHRpX3RpbWVvdXQoKEEpLChCKSwoX19GSUxFX18pLChfX0xJTkVfXykpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBleGVfc2VsZWN0X3Rlc3QoQSxCLEMsRCxFLFksWikgZG8geyAgICAgICAgXAorICBpbnQgZWM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZihzZWxlY3Rfd3JhcHBlcigoQSksKEIpLChDKSwoRCksKEUpKSA9PSAtMSApIHsgXAorICAgIGVjID0gU09DS0VSUk5POyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgc2VsZWN0KCkgZmFpbGVkLCB3aXRoICIgXAorICAgICAgICAgICAgImVycm5vICVkICglcylcbiIsICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKFkpLCAoWiksIGVjLCBzdHJlcnJvcihlYykpOyAgICAgICAgICAgXAorICAgIHJlcyA9IFRFU1RfRVJSX1NFTEVDVDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBXSElMRV9GQUxTRQorCisjZGVmaW5lIHJlc19zZWxlY3RfdGVzdChBLEIsQyxELEUpIFwKKyAgZXhlX3NlbGVjdF90ZXN0KChBKSwoQiksKEMpLChEKSwoRSksKF9fRklMRV9fKSwoX19MSU5FX18pKQorCisjZGVmaW5lIGNoa19zZWxlY3RfdGVzdChBLEIsQyxELEUsWSxaKSBkbyB7ICAgICBcCisgIGV4ZV9zZWxlY3RfdGVzdCgoQSksKEIpLChDKSwoRCksKEUpLChZKSwoWikpOyBcCisgIGlmKHJlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byB0ZXN0X2NsZWFudXA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IFdISUxFX0ZBTFNFCisKKyNkZWZpbmUgc2VsZWN0X3Rlc3QoQSxCLEMsRCxFKSBcCisgIGNoa19zZWxlY3RfdGVzdCgoQSksKEIpLChDKSwoRCksKEUpLChfX0ZJTEVfXyksKF9fTElORV9fKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIHN0YXJ0X3Rlc3RfdGltaW5nKCkgZG8geyBcCisgIHR2X3Rlc3Rfc3RhcnQgPSB0dXRpbF90dm5vdygpOyBcCit9IFdISUxFX0ZBTFNFCisKKyNkZWZpbmUgZXhlX3Rlc3RfdGltZWRvdXQoWSxaKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZih0dXRpbF90dmRpZmYodHV0aWxfdHZub3coKSwgdHZfdGVzdF9zdGFydCkgPiBURVNUX0hBTkdfVElNRU9VVCkgeyBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBBQk9SVElORyBURVNULCBzaW5jZSBpdCBzZWVtcyAiICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgInRoYXQgaXQgd291bGQgaGF2ZSBydW4gZm9yZXZlci5cbiIsIChZKSwgKFopKTsgICAgXAorICAgIHJlcyA9IFRFU1RfRVJSX1JVTlNfRk9SRVZFUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gV0hJTEVfRkFMU0UKKworI2RlZmluZSByZXNfdGVzdF90aW1lZG91dCgpIFwKKyAgZXhlX3Rlc3RfdGltZWRvdXQoKF9fRklMRV9fKSwoX19MSU5FX18pKQorCisjZGVmaW5lIGNoa190ZXN0X3RpbWVkb3V0KFksWikgZG8geyBcCisgIGV4ZV90ZXN0X3RpbWVkb3V0KFksWik7ICAgICAgICAgICBcCisgIGlmKHJlcykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byB0ZXN0X2NsZWFudXA7ICAgICAgICAgICAgICBcCit9IFdISUxFX0ZBTFNFCisKKyNkZWZpbmUgYWJvcnRfb25fdGVzdF90aW1lb3V0KCkgXAorICBjaGtfdGVzdF90aW1lZG91dCgoX19GSUxFX18pLChfX0xJTkVfXykpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBleGVfZ2xvYmFsX2luaXQoQSxZLFopIGRvIHsgICAgICAgICAgICAgICAgICAgICBcCisgIENVUkxjb2RlIGVjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYoKGVjID0gY3VybF9nbG9iYWxfaW5pdCgoQSkpKSAhPSBDVVJMRV9PSykgeyAgICAgICAgXAorICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgY3VybF9nbG9iYWxfaW5pdCgpIGZhaWxlZCwgIiBcCisgICAgICAgICAgICAid2l0aCBjb2RlICVkICglcylcbiIsICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChZKSwgKFopLCAoaW50KWVjLCBjdXJsX2Vhc3lfc3RyZXJyb3IoZWMpKTsgXAorICAgIHJlcyA9IChpbnQpZWM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gV0hJTEVfRkFMU0UKKworI2RlZmluZSByZXNfZ2xvYmFsX2luaXQoQSkgXAorICBleGVfZ2xvYmFsX2luaXQoKEEpLChfX0ZJTEVfXyksKF9fTElORV9fKSkKKworI2RlZmluZSBjaGtfZ2xvYmFsX2luaXQoQSxZLFopIGRvIHsgXAorICBleGVfZ2xvYmFsX2luaXQoKEEpLChZKSwoWikpOyAgICAgXAorICBpZihyZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiByZXM7ICAgICAgICAgICAgICAgICAgICAgXAorfSBXSElMRV9GQUxTRQorCisvKiBnbG9iYWxfaW5pdCgpIGlzIGRpZmZlcmVudCB0aGFuIG90aGVyIG1hY3Jvcy4gSW4gY2FzZSBvZgorICAgZmFpbHVyZSBpdCAncmV0dXJuJ3MgaW5zdGVhZCBvZiBnb2luZyB0byAndGVzdF9jbGVhbnVwJy4gKi8KKworI2RlZmluZSBnbG9iYWxfaW5pdChBKSBcCisgIGNoa19nbG9iYWxfaW5pdCgoQSksKF9fRklMRV9fKSwoX19MSU5FX18pKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3Rlc3QxMDEzLnBsIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0MTAxMy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OWFkNTI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0MTAxMy5wbApAQCAtMCwwICsxLDQ5IEBACisjIS91c3IvYmluL2VudiBwZXJsCisjIERldGVybWluZSBpZiBjdXJsLWNvbmZpZyAtLXByb3RvY29scy8tLWZlYXR1cmVzIG1hdGNoZXMgdGhlCisjIGN1cmwgLS12ZXJzaW9uIHByb3RvY29scy9mZWF0dXJlcworaWYgKCAkI0FSR1YgIT0gMiApCit7CisgICAgcHJpbnQgIlVzYWdlOiAkMCBjdXJsLWNvbmZpZy1zY3JpcHQgY3VybC12ZXJzaW9uLW91dHB1dC1maWxlIGZlYXR1cmVzfHByb3RvY29sc1xuIjsKKyAgICBleGl0IDM7Cit9CisKK215ICR3aGF0PSRBUkdWWzJdOworCisjIFJlYWQgdGhlIG91dHB1dCBvZiBjdXJsIC0tdmVyc2lvbgorbXkgJGN1cmxfcHJvdG9jb2xzPSIiOworb3BlbihDVVJMLCAiJEFSR1ZbMV0iKSB8fCBkaWUgIkNhbid0IGdldCBjdXJsICR3aGF0IGxpc3RcbiI7Cit3aGlsZSggPENVUkw+ICkKK3sKKyAgICAkY3VybF9wcm90b2NvbHMgPSBsYygkXykgaWYgKCAvJHdoYXQ6L2kgKTsKK30KK2Nsb3NlIENVUkw7CisKKyRjdXJsX3Byb3RvY29scyA9fiAvXHcrOiAoLiopJC87CitAY3VybCA9IHNwbGl0IC8gLywkMTsKKworIyBUaGVzZSBmZWF0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSBjdXJsLWNvbmZpZworQGN1cmwgPSBncmVwKCEvXihEZWJ1Z3xUcmFja01lbW9yeXxMYXJnZWZpbGV8Q2hhckNvbnZ8R1NTLU5lZ290aWF0ZXxTUE5FR08pJC9pLCBAY3VybCk7CitAY3VybCA9IHNvcnQgQGN1cmw7CisKKyMgUmVhZCB0aGUgb3V0cHV0IG9mIGN1cmwtY29uZmlnCitteSBAY3VybF9jb25maWc7CitvcGVuKENVUkxDT05GSUcsICJzaCAkQVJHVlswXSAtLSR3aGF0fCIpIHx8IGRpZSAiQ2FuJ3QgZ2V0IGN1cmwtY29uZmlnICR3aGF0IGxpc3RcbiI7Cit3aGlsZSggPENVUkxDT05GSUc+ICkKK3sKKyAgICBjaG9tcDsKKyAgICBwdXNoIEBjdXJsX2NvbmZpZywgbGMoJF8pOworfQorY2xvc2UgQ1VSTENPTkZJRzsKKworQGN1cmxfY29uZmlnID0gc29ydCBAY3VybF9jb25maWc7CisKK215ICRjdXJscHJvdG8gPSBqb2luICcgJywgQGN1cmw7CitteSAkY3VybGNvbmZpZ3Byb3RvID0gam9pbiAnICcsIEBjdXJsX2NvbmZpZzsKKworbXkgJGRpZmZlcmVudCA9ICRjdXJscHJvdG8gbmUgJGN1cmxjb25maWdwcm90bzsKK2lmICgkZGlmZmVyZW50KSB7CisgICAgcHJpbnQgIk1pc21hdGNoIGluICR3aGF0IGxpc3RzOlxuIjsKKyAgICBwcmludCAiY3VybDogICAgICAgICRjdXJscHJvdG9cbiI7CisgICAgcHJpbnQgImN1cmwtY29uZmlnOiAkY3VybGNvbmZpZ3Byb3RvXG4iOworfQorZXhpdCAkZGlmZmVyZW50OwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0MTAyMi5wbCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvdGVzdDEwMjIucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzc3ODA4YwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvdGVzdDEwMjIucGwKQEAgLTAsMCArMSw1NCBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIyBEZXRlcm1pbmUgaWYgY3VybC1jb25maWcgLS12ZXJzaW9uIG1hdGNoZXMgdGhlIGN1cmwgLS12ZXJzaW9uCitpZiAoICQjQVJHViAhPSAyICkKK3sKKyAgICBwcmludCAiVXNhZ2U6ICQwIGN1cmwtY29uZmlnLXNjcmlwdCBjdXJsLXZlcnNpb24tb3V0cHV0LWZpbGUgdmVyc2lvbnx2ZXJudW1cbiI7CisgICAgZXhpdCAzOworfQorCitteSAkd2hhdD0kQVJHVlsyXTsKKworIyBSZWFkIHRoZSBvdXRwdXQgb2YgY3VybCAtLXZlcnNpb24KK29wZW4oQ1VSTCwgIiRBUkdWWzFdIikgfHwgZGllICJDYW4ndCBvcGVuIGN1cmwgLS12ZXJzaW9uIGxpc3QgaW4gJEFSR1ZbMV1cbiI7CiskXyA9IDxDVVJMPjsKK2Nob21wOworL2xpYmN1cmxcLyhbXC5cZF0rKCgtREVWKXwoLVxkKykpPykvOworbXkgJHZlcnNpb24gPSAkMTsKK2Nsb3NlIENVUkw7CisKK215ICRjdXJsY29uZmlndmVyc2lvbjsKKworIyBSZWFkIHRoZSBvdXRwdXQgb2YgY3VybC1jb25maWcgLS12ZXJzaW9uLy0tdmVybnVtCitvcGVuKENVUkxDT05GSUcsICJzaCAkQVJHVlswXSAtLSR3aGF0fCIpIHx8IGRpZSAiQ2FuJ3QgZ2V0IGN1cmwtY29uZmlnIC0tJHdoYXQgbGlzdFxuIjsKKyRfID0gPENVUkxDT05GSUc+OworY2hvbXA7CitteSAkZmlsZXZlcj0kXzsKK2lmICggJHdoYXQgZXEgInZlcnNpb24iICkgeworICAgIGlmKCRmaWxldmVyID1+IC9ebGliY3VybCAoW1wuXGRdKygoLURFVil8KC1cZCspKT8pJC8pIHsKKyAgICAgICAgJGN1cmxjb25maWd2ZXJzaW9uID0gJDE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAkY3VybGNvbmZpZ3ZlcnNpb24gPSAiaWxsZWdhbCB2YWx1ZSI7CisgICAgfQorfQorZWxzZSB7ICMgInZlcm51bSIgY2FzZQorICAgICMgQ29udmVydCBoZXggdmVyc2lvbiB0byBkZWNpbWFsIGZvciBjb21wYXJpc29uJ3Mgc2FrZQorICAgIGlmKCRmaWxldmVyID1+IC9eKC4uKSguLikoLi4pJC8pIHsKKyAgICAgICAgJGN1cmxjb25maWd2ZXJzaW9uID0gaGV4KCQxKSAuICIuIiAuIGhleCgkMikgLiAiLiIgLiBoZXgoJDMpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgJGN1cmxjb25maWd2ZXJzaW9uID0gImlsbGVnYWwgdmFsdWUiOworICAgIH0KKworICAgICMgU3RyaXAgb2ZmIHRoZSAtREVWIGZyb20gdGhlIGN1cmwgdmVyc2lvbiBpZiBpdCdzIHRoZXJlCisgICAgJHZlcnNpb24gPX4gcy8tXHcqJC8vOworfQorY2xvc2UgQ1VSTENPTkZJRzsKKworbXkgJGRpZmZlcmVudCA9ICR2ZXJzaW9uIG5lICRjdXJsY29uZmlndmVyc2lvbjsKK2lmICgkZGlmZmVyZW50IHx8ICEkdmVyc2lvbikgeworICAgIHByaW50ICJNaXNtYXRjaCBpbiAtLXZlcnNpb246XG4iOworICAgIHByaW50ICJjdXJsOiAgICAgICAgJHZlcnNpb25cbiI7CisgICAgcHJpbnQgImN1cmwtY29uZmlnOiAkY3VybGNvbmZpZ3ZlcnNpb25cbiI7CisgICAgZXhpdCAxOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0MzA3LnBsIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0MzA3LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2OWFmM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3Rlc3QzMDcucGwKQEAgLTAsMCArMSwxOSBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIyBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIGN1cmwgZXhlY3V0YWJsZSBzdXBwb3J0cyB0aGUgJ29wZW5zc2wnIFNTTCBlbmdpbmUKK2lmICggJCNBUkdWICE9IDAgKQoreworICAgIHByaW50ICJVc2FnZTogJDAgY3VybC1leGVjdXRhYmxlXG4iOworICAgIGV4aXQgMzsKK30KK2lmICghb3BlbihDVVJMLCAiQEFSR1ZbMF0gLXMgLS1lbmdpbmUgbGlzdHwiKSkKK3sKKyAgICBwcmludCAiQ2FuJ3QgZ2V0IFNTTCBlbmdpbmUgbGlzdFxuIjsKKyAgICBleGl0IDI7Cit9Cit3aGlsZSggPENVUkw+ICkKK3sKKyAgICBleGl0IDAgaWYgKCAvb3BlbnNzbC8gKTsKK30KK2Nsb3NlIENVUkw7CitwcmludCAib3BlbnNzbCBlbmdpbmUgbm90IHN1cHBvcnRlZFxuIjsKK2V4aXQgMTsKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvdGVzdDYxMC5wbCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvdGVzdDYxMC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOTAwZDk0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0NjEwLnBsCkBAIC0wLDAgKzEsMzMgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMgUGVyZm9ybSBzaW1wbGUgZmlsZSBhbmQgZGlyZWN0b3J5IG1hbmlwdWxhdGlvbiBpbiBhIHBvcnRhYmxlIHdheQoraWYgKCAkI0FSR1YgPD0gMCApCit7CisgICAgcHJpbnQgIlVzYWdlOiAkMCBta2RpcnxybWRpcnxybXxtb3ZlfGdvbmUgcGF0aDEgW3BhdGgyXSBbbW9yZSBjb21tYW5kcy4uLl1cbiI7CisgICAgZXhpdCAxOworfQorCit1c2UgRmlsZTo6Q29weTsKK3doaWxlKEBBUkdWKSB7CisgICAgbXkgJGNtZCA9IHNoaWZ0IEBBUkdWOworICAgIG15ICRhcmcgPSBzaGlmdCBAQVJHVjsKKyAgICBpZiAoJGNtZCBlcSAibWtkaXIiKSB7CisgICAgICAgIG1rZGlyICRhcmcgfHwgZGllICIkISI7CisgICAgfQorICAgIGVsc2lmICgkY21kIGVxICJybWRpciIpIHsKKyAgICAgICAgcm1kaXIgJGFyZyB8fCBkaWUgIiQhIjsKKyAgICB9CisgICAgZWxzaWYgKCRjbWQgZXEgInJtIikgeworICAgICAgICB1bmxpbmsgJGFyZyB8fCBkaWUgIiQhIjsKKyAgICB9CisgICAgZWxzaWYgKCRjbWQgZXEgIm1vdmUiKSB7CisgICAgICAgIG15ICRhcmcyID0gc2hpZnQgQEFSR1Y7CisgICAgICAgIG1vdmUoJGFyZywkYXJnMikgfHwgZGllICIkISI7CisgICAgfQorICAgIGVsc2lmICgkY21kIGVxICJnb25lIikgeworICAgICAgICAhIC1lICRhcmcgfHwgZGllICJQYXRoICRhcmcgZXhpc3RzIjsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludCAiVW5zdXBwb3J0ZWQgY29tbWFuZCAkY21kXG4iOworICAgICAgICBleGl0IDE7CisgICAgfQorfQorZXhpdCAwOwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0NjEzLnBsIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0NjEzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI0Y2FhYWUKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3Rlc3Q2MTMucGwKQEAgLTAsMCArMSwxMDUgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMgUHJlcGFyZSBhIGRpcmVjdG9yeSB3aXRoIGtub3duIGZpbGVzIGFuZCBjbGVhbiB1cCBhZnRlcndhcmRzCit1c2UgVGltZTo6TG9jYWw7CisKK2lmICggJCNBUkdWIDwgMSApCit7CisgICAgcHJpbnQgIlVzYWdlOiAkMCBwcmVwYXJlfHBvc3Rwcm9jZXNzIGRpciBbbG9nZmlsZV1cbiI7CisgICAgZXhpdCAxOworfQorCisjIDxwcmVjaGVjaz4gZXhwZWN0cyBhbiBlcnJvciBtZXNzYWdlIG9uIHN0ZG91dAorc3ViIGVycm91dCB7CisgICAgcHJpbnQgJF9bMF0gLiAiXG4iOworICAgIGV4aXQgMTsKK30KKworaWYgKCRBUkdWWzBdIGVxICJwcmVwYXJlIikKK3sKKyAgICBteSAkZGlybmFtZSA9ICRBUkdWWzFdOworICAgIG1rZGlyICRkaXJuYW1lIHx8IGVycm91dCAiJCEiOworICAgIGNoZGlyICRkaXJuYW1lOworCisgICAgIyBDcmVhdGUgdGhlIGZpbGVzIGluIGFscGhhYmV0aWNhbCBvcmRlciwgdG8gaW5jcmVhc2UgdGhlIGNoYW5jZXMKKyAgICAjIG9mIHJlY2VpdmluZyBhIGNvbnNpc3RlbnQgc2V0IG9mIGRpcmVjdG9yeSBjb250ZW50cyByZWdhcmRsZXNzCisgICAgIyBvZiB3aGV0aGVyIHRoZSBzZXJ2ZXIgYWxwaGFiZXRpemVzIHRoZSByZXN1bHRzIG9yIG5vdC4KKyAgICBta2RpciAiYXN1YmRpciIgfHwgZXJyb3V0ICIkISI7CisgICAgY2htb2QgMDc3NywgImFzdWJkaXIiOworCisgICAgb3BlbihGSUxFLCAiPnBsYWluZmlsZS50eHQiKSB8fCBlcnJvdXQgIiQhIjsKKyAgICBiaW5tb2RlIEZJTEU7CisgICAgcHJpbnQgRklMRSAiVGVzdCBmaWxlIHRvIHN1cHBvcnQgY3VybCB0ZXN0IHN1aXRlXG4iOworICAgIGNsb3NlKEZJTEUpOworICAgIHV0aW1lIHRpbWUsIHRpbWVnbSgwLDAsMTIsMSwwLDEwMCksICJwbGFpbmZpbGUudHh0IjsKKyAgICBjaG1vZCAwNjY2LCAicGxhaW5maWxlLnR4dCI7CisKKyAgICBvcGVuKEZJTEUsICI+cm9maWxlLnR4dCIpIHx8IGVycm91dCAiJCEiOworICAgIGJpbm1vZGUgRklMRTsKKyAgICBwcmludCBGSUxFICJSZWFkLW9ubHkgdGVzdCBmaWxlIHRvIHN1cHBvcnQgY3VybCB0ZXN0IHN1aXRlXG4iOworICAgIGNsb3NlKEZJTEUpOworICAgIHV0aW1lIHRpbWUsIHRpbWVnbSgwLDAsMTIsMzEsMTEsMTAwKSwgInJvZmlsZS50eHQiOworICAgIGNobW9kIDA0NDQsICJyb2ZpbGUudHh0IjsKKworICAgIGV4aXQgMDsKK30KK2Vsc2lmICgkQVJHVlswXSBlcSAicG9zdHByb2Nlc3MiKQoreworICAgIG15ICRkaXJuYW1lID0gJEFSR1ZbMV07CisgICAgbXkgJGxvZ2ZpbGUgPSAkQVJHVlsyXTsKKworICAgICMgQ2xlYW4gdXAgdGhlIHRlc3QgZGlyZWN0b3J5CisgICAgdW5saW5rICIkZGlybmFtZS9yb2ZpbGUudHh0IjsKKyAgICB1bmxpbmsgIiRkaXJuYW1lL3BsYWluZmlsZS50eHQiOworICAgIHJtZGlyICIkZGlybmFtZS9hc3ViZGlyIjsKKworICAgIHJtZGlyICRkaXJuYW1lIHx8IGRpZSAiJCEiOworCisgICAgaWYgKCRsb2dmaWxlKSB7CisgICAgICAgICMgUHJvY2VzcyB0aGUgZGlyZWN0b3J5IGZpbGUgdG8gcmVtb3ZlIGFsbCBpbmZvcm1hdGlvbiB0aGF0CisgICAgICAgICMgY291bGQgYmUgaW5jb25zaXN0ZW50IGZyb20gb25lIHRlc3QgcnVuIHRvIHRoZSBuZXh0IChlLmcuCisgICAgICAgICMgZmlsZSBkYXRlKSBvciBtYXkgYmUgdW5zdXBwb3J0ZWQgb24gc29tZSBwbGF0Zm9ybXMgKGUuZy4KKyAgICAgICAgIyBXaW5kb3dzKS4gQWxzbywgc2luY2UgNy4xNy4wLCB0aGUgc2Z0cCBkaXJlY3RvcnkgbGlzdGluZworICAgICAgICAjIGZvcm1hdCBjYW4gYmUgZGVwZW5kZW50IG9uIHRoZSBzZXJ2ZXIgKHdpdGggYSByZWNlbnQKKyAgICAgICAgIyBlbm91Z2ggdmVyc2lvbiBvZiBsaWJzc2gyKSBzbyB0aGlzIHNjcmlwdCBtdXN0IGFsc28KKyAgICAgICAgIyBjYW5vbmljYWxpemUgdGhlIGZvcm1hdC4gIEhlcmUgYXJlIGV4YW1wbGVzIG9mIHRoZSBnZW5lcmFsCisgICAgICAgICMgZm9ybWF0IHN1cHBvcnRlZDoKKyAgICAgICAgIyAtci0tci0tci0tICAgMTIgYXVzZXJuYW1lIGdycCAgICAgICAgICAgIDQ3IERlYyAzMSAgMjAwMCByb2ZpbGUudHh0CisgICAgICAgICMgLXItLXItLXItLSAgIDEgIDEyMzQgIDQzMjEgICAgICAgICA0NyBEZWMgMzEgIDIwMDAgcm9maWxlLnR4dAorICAgICAgICAjIFRoZSAiY2Fub25pY2FsIiBmb3JtYXQgaXMgc2ltaWxhciB0byB0aGUgZmlyc3QgKHdoaWNoIGlzCisgICAgICAgICMgdGhlIG9uZSBnZW5lcmF0ZWQgb24gYSB0eXBpY2FsIExpbnV4IGluc3RhbGxhdGlvbik6CisgICAgICAgICMgLXItP3ItP3ItPyAgIDEyIFUgICAgICAgICBVICAgICAgICAgICAgICA0NyBEZWMgMzEgIDIwMDAgcm9maWxlLnR4dAorCisgICAgICAgIG15IEBjYW5vbmRpcjsKKyAgICAgICAgb3BlbihJTiwgIjwkbG9nZmlsZSIpIHx8IGRpZSAiJCEiOworICAgICAgICB3aGlsZSAoPElOPikgeworICAgICAgICAgICAgL14oLikoLi4pLiguLikuKC4uKS5ccyooXFMrKVxzK1xTK1xzK1xTK1xzKyhcUyspXHMrKFxTK1xzK1xTK1xzK1xTKykoLiopJC87CisgICAgICAgICAgICBpZiAoJDEgZXEgImQiKSB7CisgICAgICAgICAgICAgICAgIyBFcmFzZSBhbGwgZGlyZWN0b3J5IG1ldGFkYXRhIGV4Y2VwdCBmb3IgdGhlIG5hbWUsIGFzIGl0IGlzIG5vdAorICAgICAgICAgICAgICAgICMgY29uc2lzdGVudCBmb3IgYWNyb3NzIGFsbCB0ZXN0IHN5c3RlbXMgYW5kIGZpbGVzeXN0ZW1zCisgICAgICAgICAgICAgICAgcHVzaCBAY2Fub25kaXIsICJkPz8/Pz8/Pz8/ICAgIE4gVSAgICAgICAgIFUgICAgICAgICAgICAgICBOID8/PyAgTiBOTjpOTiQ4XG4iOworICAgICAgICAgICAgfSBlbHNpZiAoJDEgZXEgIi0iKSB7CisgICAgICAgICAgICAgICAgIyBFcmFzZSB1c2VyIGFuZCBncm91cCBuYW1lcywgYXMgdGhleSBhcmUgbm90IGNvbnNpc3RlbnQgYWNyb3NzCisgICAgICAgICAgICAgICAgIyBhbGwgdGVzdCBzeXN0ZW1zCisgICAgICAgICAgICAgICAgbXkgJGxpbmUgPSBzcHJpbnRmKCIlcyVzPyVzPyVzPyU1ZCBVICAgICAgICAgVSAlMTVkICVzJXNcbiIsICQxLCQyLCQzLCQ0LCQ1LCQ2LCQ3LCQ4KTsKKyAgICAgICAgICAgICAgICBwdXNoIEBjYW5vbmRpciwgJGxpbmU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICMgVW5leHBlY3RlZCBmb3JtYXQ7IGp1c3QgcGFzcyBpdCB0aHJvdWdoIGFuZCBsZXQgdGhlIHRlc3QgZmFpbAorICAgICAgICAgICAgICAgIHB1c2ggQGNhbm9uZGlyLCAkXzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjbG9zZShJTik7CisKKyAgICAgICAgQGNhbm9uZGlyID0gc29ydCB7c3Vic3RyKCRhLDU3KSBjbXAgc3Vic3RyKCRiLDU3KX0gQGNhbm9uZGlyOworICAgICAgICBteSAkbmV3ZmlsZSA9ICRsb2dmaWxlIC4gIi5uZXciOworICAgICAgICBvcGVuKE9VVCwgIj4kbmV3ZmlsZSIpIHx8IGRpZSAiJCEiOworICAgICAgICBwcmludCBPVVQgam9pbignJywgQGNhbm9uZGlyKTsKKyAgICAgICAgY2xvc2UoT1VUKTsKKworICAgICAgICB1bmxpbmsgJGxvZ2ZpbGU7CisgICAgICAgIHJlbmFtZSAkbmV3ZmlsZSwgJGxvZ2ZpbGU7CisgICAgfQorCisgICAgZXhpdCAwOworfQorcHJpbnQgIlVuc3VwcG9ydGVkIGNvbW1hbmQgJEFSR1ZbMF1cbiI7CitleGl0IDE7CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3Rlc3Q3NS5wbCBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvdGVzdDc1LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMxY2RmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3Rlc3Q3NS5wbApAQCAtMCwwICsxLDEzIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjIENoZWNrIHRoYXQgdGhlIGxlbmd0aCBvZiBhIGdpdmVuIFVSTCBpcyBjb3JyZWN0CitpZiAoICQjQVJHViAhPSAxICkKK3sKKyAgICBwcmludCAiVXNhZ2U6ICQwIHN0cmluZyBsZW5ndGhcbiI7CisgICAgZXhpdCAzOworfQoraWYgKGxlbmd0aChAQVJHVlswXSkgIT0gQEFSR1ZbMV0pCit7CisgICAgcHJpbnQgIkdpdmVuIGhvc3QgSVAgYW5kIHBvcnQgbm90IHN1cHBvcnRlZFxuIjsKKyAgICBleGl0IDE7Cit9CitleGl0IDA7CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3Rlc3R0cmFjZS5jIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0dHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDYwMmUwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0dHJhY2UuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ0ZXN0LmgiCisKKyNpbmNsdWRlICJ0ZXN0dXRpbC5oIgorI2luY2x1ZGUgInRlc3R0cmFjZS5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0cnVjdCBsaWJ0ZXN0X3RyYWNlX2NmZyBsaWJ0ZXN0X2RlYnVnX2NvbmZpZzsKKworc3RhdGljIHRpbWVfdCBlcG9jaF9vZmZzZXQ7IC8qIGZvciB0ZXN0IHRpbWUgdHJhY2luZyAqLworc3RhdGljIGludCAgICBrbm93bl9vZmZzZXQ7IC8qIGZvciB0ZXN0IHRpbWUgdHJhY2luZyAqLworCitzdGF0aWMgCit2b2lkIGxpYnRlc3RfZGVidWdfZHVtcChjb25zdCBjaGFyICp0aW1lYnVmLCBjb25zdCBjaGFyICp0ZXh0LCBGSUxFICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIsIHNpemVfdCBzaXplLCBpbnQgbm9oZXgpCit7CisgIHNpemVfdCBpOworICBzaXplX3QgYzsKKworICB1bnNpZ25lZCBpbnQgd2lkdGggPSAweDEwOworCisgIGlmKG5vaGV4KQorICAgIC8qIHdpdGhvdXQgdGhlIGhleCBvdXRwdXQsIHdlIGNhbiBmaXQgbW9yZSBvbiBzY3JlZW4gKi8KKyAgICB3aWR0aCA9IDB4NDA7CisKKyAgZnByaW50ZihzdHJlYW0sICIlcyVzLCAlZCBieXRlcyAoMHgleClcbiIsIHRpbWVidWYsIHRleHQsCisgICAgICAgICAgKGludClzaXplLCAoaW50KXNpemUpOworCisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkgKz0gd2lkdGgpIHsKKworICAgIGZwcmludGYoc3RyZWFtLCAiJTA0eDogIiwgKGludClpKTsKKworICAgIGlmKCFub2hleCkgeworICAgICAgLyogaGV4IG5vdCBkaXNhYmxlZCwgc2hvdyBpdCAqLworICAgICAgZm9yKGMgPSAwOyBjIDwgd2lkdGg7IGMrKykKKyAgICAgICAgaWYoaStjIDwgc2l6ZSkKKyAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiUwMnggIiwgcHRyW2krY10pOworICAgICAgICBlbHNlCisgICAgICAgICAgZnB1dHMoIiAgICIsIHN0cmVhbSk7CisgICAgfQorCisgICAgZm9yKGMgPSAwOyAoYyA8IHdpZHRoKSAmJiAoaStjIDwgc2l6ZSk7IGMrKykgeworICAgICAgLyogY2hlY2sgZm9yIDBEMEE7IGlmIGZvdW5kLCBza2lwIHBhc3QgYW5kIHN0YXJ0IGEgbmV3IGxpbmUgb2Ygb3V0cHV0ICovCisgICAgICBpZihub2hleCAmJgorICAgICAgICAgKGkrYysxIDwgc2l6ZSkgJiYgKHB0cltpK2NdID09IDB4MEQpICYmIChwdHJbaStjKzFdID09IDB4MEEpKSB7CisgICAgICAgIGkgKz0gKGMrMi13aWR0aCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZnByaW50ZihzdHJlYW0sICIlYyIsICgocHRyW2krY10gPj0gMHgyMCkgJiYgKHB0cltpK2NdIDwgMHg4MCkpID8KKyAgICAgICAgICAgICAgcHRyW2krY10gOiAnLicpOworICAgICAgLyogY2hlY2sgYWdhaW4gZm9yIDBEMEEsIHRvIGF2b2lkIGFuIGV4dHJhIFxuIGlmIGl0J3MgYXQgd2lkdGggKi8KKyAgICAgIGlmKG5vaGV4ICYmCisgICAgICAgICAoaStjKzIgPCBzaXplKSAmJiAocHRyW2krYysxXSA9PSAweDBEKSAmJiAocHRyW2krYysyXSA9PSAweDBBKSkgeworICAgICAgICBpICs9IChjKzMtd2lkdGgpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZnB1dGMoJ1xuJywgc3RyZWFtKTsgLyogbmV3bGluZSAqLworICB9CisgIGZmbHVzaChzdHJlYW0pOworfQorCitpbnQgbGlidGVzdF9kZWJ1Z19jYihDVVJMICpoYW5kbGUsIGN1cmxfaW5mb3R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcnApCit7CisKKyAgc3RydWN0IGxpYnRlc3RfdHJhY2VfY2ZnICp0cmFjZV9jZmcgPSB1c2VycDsKKyAgY29uc3QgY2hhciAqdGV4dDsKKyAgc3RydWN0IHRpbWV2YWwgdHY7CisgIHN0cnVjdCB0bSAqbm93OworICBjaGFyIHRpbWVidWZbMjBdOworICBjaGFyICp0aW1lc3RyOworICB0aW1lX3Qgc2VjczsKKworICAodm9pZCloYW5kbGU7CisKKyAgdGltZWJ1ZlswXSA9ICdcMCc7CisgIHRpbWVzdHIgPSAmdGltZWJ1ZlswXTsKKworICBpZih0cmFjZV9jZmctPnRyYWNldGltZSkgeworICAgIHR2ID0gdHV0aWxfdHZub3coKTsKKyAgICBpZigha25vd25fb2Zmc2V0KSB7CisgICAgICBlcG9jaF9vZmZzZXQgPSB0aW1lKE5VTEwpIC0gdHYudHZfc2VjOworICAgICAga25vd25fb2Zmc2V0ID0gMTsKKyAgICB9CisgICAgc2VjcyA9IGVwb2NoX29mZnNldCArIHR2LnR2X3NlYzsKKyAgICBub3cgPSBsb2NhbHRpbWUoJnNlY3MpOyAgLyogbm90IHRocmVhZCBzYWZlIGJ1dCB3ZSBkb24ndCBjYXJlICovCisgICAgc25wcmludGYodGltZWJ1Ziwgc2l6ZW9mKHRpbWVidWYpLCAiJTAyZDolMDJkOiUwMmQuJTA2bGQgIiwKKyAgICAgICAgICAgICBub3ctPnRtX2hvdXIsIG5vdy0+dG1fbWluLCBub3ctPnRtX3NlYywgKGxvbmcpdHYudHZfdXNlYyk7CisgIH0KKworICBzd2l0Y2ggKHR5cGUpIHsKKyAgY2FzZSBDVVJMSU5GT19URVhUOgorICAgIGZwcmludGYoc3RkZXJyLCAiJXM9PSBJbmZvOiAlcyIsIHRpbWVzdHIsIChjaGFyICopZGF0YSk7CisgIGRlZmF1bHQ6IC8qIGluIGNhc2UgYSBuZXcgb25lIGlzIGludHJvZHVjZWQgdG8gc2hvY2sgdXMgKi8KKyAgICByZXR1cm4gMDsKKworICBjYXNlIENVUkxJTkZPX0hFQURFUl9PVVQ6CisgICAgdGV4dCA9ICI9PiBTZW5kIGhlYWRlciI7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fREFUQV9PVVQ6CisgICAgdGV4dCA9ICI9PiBTZW5kIGRhdGEiOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX1NTTF9EQVRBX09VVDoKKyAgICB0ZXh0ID0gIj0+IFNlbmQgU1NMIGRhdGEiOworICAgIGJyZWFrOworICBjYXNlIENVUkxJTkZPX0hFQURFUl9JTjoKKyAgICB0ZXh0ID0gIjw9IFJlY3YgaGVhZGVyIjsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19EQVRBX0lOOgorICAgIHRleHQgPSAiPD0gUmVjdiBkYXRhIjsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19TU0xfREFUQV9JTjoKKyAgICB0ZXh0ID0gIjw9IFJlY3YgU1NMIGRhdGEiOworICAgIGJyZWFrOworICB9CisKKyAgbGlidGVzdF9kZWJ1Z19kdW1wKHRpbWVidWYsIHRleHQsIHN0ZGVyciwgZGF0YSwgc2l6ZSwgdHJhY2VfY2ZnLT5ub2hleCk7CisgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3Rlc3R0cmFjZS5oIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0dHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2QyNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0dHJhY2UuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIEhFQURFUl9MSUJURVNUX1RFU1RUUkFDRV9ICisjZGVmaW5lIEhFQURFUl9MSUJURVNUX1RFU1RUUkFDRV9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGxpYnRlc3RfdHJhY2VfY2ZnIHsKKyAgaW50IHRyYWNldGltZTsgIC8qIDAgcmVwcmVzZW50cyBGQUxTRSwgYW55dGhpbmcgZWxzZSBUUlVFICovCisgIGludCBub2hleDsgICAgICAvKiAwIHJlcHJlc2VudHMgRkFMU0UsIGFueXRoaW5nIGVsc2UgVFJVRSAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBsaWJ0ZXN0X3RyYWNlX2NmZyBsaWJ0ZXN0X2RlYnVnX2NvbmZpZzsKKworaW50IGxpYnRlc3RfZGVidWdfY2IoQ1VSTCAqaGFuZGxlLCBjdXJsX2luZm90eXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJwKTsKKworI2VuZGlmIC8qIEhFQURFUl9MSUJURVNUX1RFU1RUUkFDRV9IICovCisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvdGVzdHV0aWwuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvdGVzdHV0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWU0ODhlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbGlidGVzdC90ZXN0dXRpbC5jCkBAIC0wLDAgKzEsMTM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA4LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKyNpbmNsdWRlICJ0ZXN0dXRpbC5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChNU0RPUykKKworc3RydWN0IHRpbWV2YWwgdHV0aWxfdHZub3codm9pZCkKK3sKKyAgLyoKKyAgKiogR2V0VGlja0NvdW50KCkgaXMgYXZhaWxhYmxlIG9uIF9hbGxfIFdpbmRvd3MgdmVyc2lvbnMgZnJvbSBXOTUgdXAKKyAgKiogdG8gbm93YWRheXMuIFJldHVybnMgbWlsbGlzZWNvbmRzIGVsYXBzZWQgc2luY2UgbGFzdCBzeXN0ZW0gYm9vdCwKKyAgKiogaW5jcmVhc2VzIG1vbm90b25pY2FsbHkgYW5kIHdyYXBzIG9uY2UgNDkuNyBkYXlzIGhhdmUgZWxhcHNlZC4KKyAgKi8KKyAgc3RydWN0IHRpbWV2YWwgbm93OworICBEV09SRCBtaWxsaXNlY29uZHMgPSBHZXRUaWNrQ291bnQoKTsKKyAgbm93LnR2X3NlYyA9IG1pbGxpc2Vjb25kcyAvIDEwMDA7CisgIG5vdy50dl91c2VjID0gKG1pbGxpc2Vjb25kcyAlIDEwMDApICogMTAwMDsKKyAgcmV0dXJuIG5vdzsKK30KKworI2VsaWYgZGVmaW5lZChIQVZFX0NMT0NLX0dFVFRJTUVfTU9OT1RPTklDKQorCitzdHJ1Y3QgdGltZXZhbCB0dXRpbF90dm5vdyh2b2lkKQoreworICAvKgorICAqKiBjbG9ja19nZXR0aW1lKCkgaXMgZ3JhbnRlZCB0byBiZSBpbmNyZWFzZWQgbW9ub3RvbmljYWxseSB3aGVuIHRoZQorICAqKiBtb25vdG9uaWMgY2xvY2sgaXMgcXVlcmllZC4gVGltZSBzdGFydGluZyBwb2ludCBpcyB1bnNwZWNpZmllZCwgaXQKKyAgKiogY291bGQgYmUgdGhlIHN5c3RlbSBzdGFydC11cCB0aW1lLCB0aGUgRXBvY2gsIG9yIHNvbWV0aGluZyBlbHNlLAorICAqKiBpbiBhbnkgY2FzZSB0aGUgdGltZSBzdGFydGluZyBwb2ludCBkb2VzIG5vdCBjaGFuZ2Ugb25jZSB0aGF0IHRoZQorICAqKiBzeXN0ZW0gaGFzIHN0YXJ0ZWQgdXAuCisgICovCisgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKyAgc3RydWN0IHRpbWVzcGVjIHRzbm93OworICBpZigwID09IGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHNub3cpKSB7CisgICAgbm93LnR2X3NlYyA9IHRzbm93LnR2X3NlYzsKKyAgICBub3cudHZfdXNlYyA9IHRzbm93LnR2X25zZWMgLyAxMDAwOworICB9CisgIC8qCisgICoqIEV2ZW4gd2hlbiB0aGUgY29uZmlndXJlIHByb2Nlc3MgaGFzIHRydWx5IGRldGVjdGVkIG1vbm90b25pYyBjbG9jaworICAqKiBhdmFpbGFiaWxpdHksIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IGl0IGlzIG5vdCBhY3R1YWxseSBhdmFpbGFibGUgYXQKKyAgKiogcnVuLXRpbWUuIFdoZW4gdGhpcyBvY2N1cnMgc2ltcGx5IGZhbGxiYWNrIHRvIG90aGVyIHRpbWUgc291cmNlLgorICAqLworI2lmZGVmIEhBVkVfR0VUVElNRU9GREFZCisgIGVsc2UKKyAgICAodm9pZClnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisjZWxzZQorICBlbHNlIHsKKyAgICBub3cudHZfc2VjID0gKGxvbmcpdGltZShOVUxMKTsKKyAgICBub3cudHZfdXNlYyA9IDA7CisgIH0KKyNlbmRpZgorICByZXR1cm4gbm93OworfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VUVElNRU9GREFZKQorCitzdHJ1Y3QgdGltZXZhbCB0dXRpbF90dm5vdyh2b2lkKQoreworICAvKgorICAqKiBnZXR0aW1lb2ZkYXkoKSBpcyBub3QgZ3JhbnRlZCB0byBiZSBpbmNyZWFzZWQgbW9ub3RvbmljYWxseSwgZHVlIHRvCisgICoqIGNsb2NrIGRyaWZ0aW5nIGFuZCBleHRlcm5hbCBzb3VyY2UgdGltZSBzeW5jaHJvbml6YXRpb24gaXQgY2FuIGp1bXAKKyAgKiogZm9yd2FyZCBvciBiYWNrd2FyZCBpbiB0aW1lLgorICAqLworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgICh2b2lkKWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKyAgcmV0dXJuIG5vdzsKK30KKworI2Vsc2UKKworc3RydWN0IHRpbWV2YWwgdHV0aWxfdHZub3codm9pZCkKK3sKKyAgLyoKKyAgKiogdGltZSgpIHJldHVybnMgdGhlIHZhbHVlIG9mIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgRXBvY2guCisgICovCisgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKyAgbm93LnR2X3NlYyA9IChsb25nKXRpbWUoTlVMTCk7CisgIG5vdy50dl91c2VjID0gMDsKKyAgcmV0dXJuIG5vdzsKK30KKworI2VuZGlmCisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIG1vcmUgcmVjZW50IHRpbWUsIGFzIG90aGVyd2lzZQorICogd2UnbGwgZ2V0IGEgd2VpcmQgbmVnYXRpdmUgdGltZS1kaWZmIGJhY2suLi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgdGltZSBkaWZmZXJlbmNlIGluIG51bWJlciBvZiBtaWxsaXNlY29uZHMuCisgKi8KK2xvbmcgdHV0aWxfdHZkaWZmKHN0cnVjdCB0aW1ldmFsIG5ld2VyLCBzdHJ1Y3QgdGltZXZhbCBvbGRlcikKK3sKKyAgcmV0dXJuIChuZXdlci50dl9zZWMtb2xkZXIudHZfc2VjKSoxMDAwKworICAgIChuZXdlci50dl91c2VjLW9sZGVyLnR2X3VzZWMpLzEwMDA7Cit9CisKKy8qCisgKiBTYW1lIGFzIHR1dGlsX3R2ZGlmZiBidXQgd2l0aCBmdWxsIHVzZWMgcmVzb2x1dGlvbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgdGltZSBkaWZmZXJlbmNlIGluIHNlY29uZHMgd2l0aCBzdWJzZWNvbmQgcmVzb2x1dGlvbi4KKyAqLworZG91YmxlIHR1dGlsX3R2ZGlmZl9zZWNzKHN0cnVjdCB0aW1ldmFsIG5ld2VyLCBzdHJ1Y3QgdGltZXZhbCBvbGRlcikKK3sKKyAgaWYobmV3ZXIudHZfc2VjICE9IG9sZGVyLnR2X3NlYykKKyAgICByZXR1cm4gKGRvdWJsZSkobmV3ZXIudHZfc2VjLW9sZGVyLnR2X3NlYykrCisgICAgICAoZG91YmxlKShuZXdlci50dl91c2VjLW9sZGVyLnR2X3VzZWMpLzEwMDAwMDAuMDsKKyAgZWxzZQorICAgIHJldHVybiAoZG91YmxlKShuZXdlci50dl91c2VjLW9sZGVyLnR2X3VzZWMpLzEwMDAwMDAuMDsKK30KKworLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgZ2l2ZW4gaW5wdXQgdGltZXZhbCBzdHJ1Y3QgKi8KK2xvbmcgdHV0aWxfdHZsb25nKHN0cnVjdCB0aW1ldmFsIHQxKQoreworICByZXR1cm4gdDEudHZfc2VjOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3Rlc3R1dGlsLmggYi9jdXJsLTcuMjUuMC90ZXN0cy9saWJ0ZXN0L3Rlc3R1dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEzMjJlMwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL2xpYnRlc3QvdGVzdHV0aWwuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIF9fTElCVEVTVF9URVNUVVRJTF9ICisjZGVmaW5lIF9fTElCVEVTVF9URVNUVVRJTF9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNldHVwLmgiCisKKworc3RydWN0IHRpbWV2YWwgdHV0aWxfdHZub3codm9pZCk7CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgKHQxKSBpcyB0aGUgbW9yZSByZWNlbnQgdGltZSBhbmQgdDIgaXMKKyAqIHRoZSBvbGRlciB0aW1lLCBhcyBvdGhlcndpc2UgeW91IGdldCBhIHdlaXJkIG5lZ2F0aXZlIHRpbWUtZGlmZiBiYWNrLi4uCisgKgorICogUmV0dXJuczogdGhlIHRpbWUgZGlmZmVyZW5jZSBpbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLgorICovCitsb25nIHR1dGlsX3R2ZGlmZihzdHJ1Y3QgdGltZXZhbCB0MSwgc3RydWN0IHRpbWV2YWwgdDIpOworCisvKgorICogU2FtZSBhcyB0dXRpbF90dmRpZmYgYnV0IHdpdGggZnVsbCB1c2VjIHJlc29sdXRpb24uCisgKgorICogUmV0dXJuczogdGhlIHRpbWUgZGlmZmVyZW5jZSBpbiBzZWNvbmRzIHdpdGggc3Vic2Vjb25kIHJlc29sdXRpb24uCisgKi8KK2RvdWJsZSB0dXRpbF90dmRpZmZfc2VjcyhzdHJ1Y3QgdGltZXZhbCB0MSwgc3RydWN0IHRpbWV2YWwgdDIpOworCitsb25nIHR1dGlsX3R2bG9uZyhzdHJ1Y3QgdGltZXZhbCB0MSk7CisKKworI2VuZGlmICAvKiBfX0xJQlRFU1RfVEVTVFVUSUxfSCAqLworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9tZW1hbmFseXplLnBsIGIvY3VybC03LjI1LjAvdGVzdHMvbWVtYW5hbHl6ZS5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZjUzOTMzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvbWVtYW5hbHl6ZS5wbApAQCAtMCwwICsxLDM4NSBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEV4YW1wbGUgaW5wdXQ6CisjCisjIE1FTSBtcHJpbnRmLmM6MTA5NCBtYWxsb2MoMzIpID0gZTU3MTgKKyMgTUVNIG1wcmludGYuYzoxMTAzIHJlYWxsb2MoZTU3MTgsIDY0KSA9IGU2MTE4CisjIE1FTSBzZW5kZi5jOjIzMiBmcmVlKGY2NTIwKQorCitteSAkbWFsbG9jcz0wOworbXkgJGNhbGxvY3M9MDsKK215ICRyZWFsbG9jcz0wOworbXkgJHN0cmR1cHM9MDsKK215ICRzaG93bGltaXQ7CisKK3doaWxlKDEpIHsKKyAgICBpZigkQVJHVlswXSBlcSAiLXYiKSB7CisgICAgICAgICR2ZXJib3NlPTE7CisgICAgICAgIHNoaWZ0IEBBUkdWOworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAiLXQiKSB7CisgICAgICAgICR0cmFjZT0xOworICAgICAgICBzaGlmdCBAQVJHVjsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgIi1sIikgeworICAgICAgICAjIG9ubHkgc2hvdyB3aGF0IGFsbG9jIHRoYXQgY2F1c2VkIGEgbWVtbGltaXQgZmFpbHVyZQorICAgICAgICAkc2hvd2xpbWl0PTE7CisgICAgICAgIHNoaWZ0IEBBUkdWOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbGFzdDsKKyAgICB9Cit9CisKK215ICRtYXhtZW07CisKK3N1YiBuZXd0b3RhbCB7CisgICAgbXkgKCRuZXd0b3QpPUBfOworICAgICMgY291bnQgYSBtYXggaGVyZQorCisgICAgaWYoJG5ld3RvdCA+ICRtYXhtZW0pIHsKKyAgICAgICAgJG1heG1lbT0gJG5ld3RvdDsKKyAgICB9Cit9CisKK215ICRmaWxlID0gJEFSR1ZbMF07CisKK2lmKCEgLWYgJGZpbGUpIHsKKyAgICBwcmludCAiVXNhZ2U6IG1lbWFuYWx5emUucGwgW29wdGlvbnNdIDxkdW1wIGZpbGU+XG4iLAorICAgICJPcHRpb25zOlxuIiwKKyAgICAiIC1sICBtZW1saW1pdCBmYWlsdXJlIGRpc3BsYXllZFxuIiwKKyAgICAiIC12ICBWZXJib3NlXG4iLAorICAgICIgLXQgIFRyYWNlXG4iOworICAgIGV4aXQ7Cit9CisKK29wZW4oRklMRSwgIjwkZmlsZSIpOworCitpZigkc2hvd2xpbWl0KSB7CisgICAgd2hpbGUoPEZJTEU+KSB7CisgICAgICAgIGlmKC9eTElNSVQuKm1lbWxpbWl0JC8pIHsKKyAgICAgICAgICAgIHByaW50ICRfOworICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBjbG9zZShGSUxFKTsKKyAgICBleGl0OworfQorCisKK215ICRsbnVtPTA7Cit3aGlsZSg8RklMRT4pIHsKKyAgICBjaG9tcCAkXzsKKyAgICAkbGluZSA9ICRfOworICAgICRsbnVtKys7CisgICAgaWYoJGxpbmUgPX4gL15MSU1JVCAoW14gXSopOihcZCopICguKikvKSB7CisgICAgICAgICMgbmV3IG1lbW9yeSBsaW1pdCB0ZXN0IHByZWZpeAorICAgICAgICBteSAkaSA9ICQzOworICAgICAgICBteSAoJHNvdXJjZSwgJGxpbmVudW0pID0gKCQxLCAkMik7CisgICAgICAgIGlmKCR0cmFjZSAmJiAoJGkgPX4gLyhbXiBdKikgcmVhY2hlZCBtZW1saW1pdC8pKSB7CisgICAgICAgICAgICBwcmludCAiTElNSVQ6ICQxIHJldHVybmVkIGVycm9yIGF0ICRzb3VyY2U6JGxpbmVudW1cbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJGxpbmUgPX4gL15NRU0gKFteIF0qKTooXGQqKSAoLiopLykgeworICAgICAgICAjIGdlbmVyaWMgbWF0Y2ggZm9yIHRoZSBmaWxlbmFtZStsaW5lbnVtYmVyCisgICAgICAgICRzb3VyY2UgPSAkMTsKKyAgICAgICAgJGxpbmVudW0gPSAkMjsKKyAgICAgICAgJGZ1bmN0aW9uID0gJDM7CisKKyAgICAgICAgaWYoJGZ1bmN0aW9uID1+IC9mcmVlXCgweChbMC05YS1mXSopLykgeworICAgICAgICAgICAgJGFkZHIgPSAkMTsKKyAgICAgICAgICAgIGlmKCFleGlzdHMgJHNpemVhdGFkZHJ7JGFkZHJ9KSB7CisgICAgICAgICAgICAgICAgcHJpbnQgIkZSRUUgRVJST1I6IE5vIG1lbW9yeSBhbGxvY2F0ZWQ6ICRsaW5lXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzaWYoLTEgPT0gJHNpemVhdGFkZHJ7JGFkZHJ9KSB7CisgICAgICAgICAgICAgICAgcHJpbnQgIkZSRUUgRVJST1I6IE1lbW9yeSBmcmVlZCB0d2ljZTogJGxpbmVcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIkZSRUUgRVJST1I6IFByZXZpb3VzbHkgZnJlZWQgYXQ6ICIuJGdldG1lbXskYWRkcn0uIlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICR0b3RhbG1lbSAtPSAkc2l6ZWF0YWRkcnskYWRkcn07CisgICAgICAgICAgICAgICAgaWYoJHRyYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJGUkVFOiBtYWxsb2MgYXQgIi4kZ2V0bWVteyRhZGRyfS4iIGlzIGZyZWVkIGFnYWluIGF0ICRzb3VyY2U6JGxpbmVudW1cbiI7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRlJFRTogJWQgYnl0ZXMgZnJlZWQsIGxlZnQgYWxsb2NhdGVkOiAkdG90YWxtZW0gYnl0ZXNcbiIsICRzaXplYXRhZGRyeyRhZGRyfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3dG90YWwoJHRvdGFsbWVtKTsKKyAgICAgICAgICAgICAgICAkZnJlZXMrKzsKKworICAgICAgICAgICAgICAgICRzaXplYXRhZGRyeyRhZGRyfT0tMTsgIyBzZXQgLTEgdG8gbWFyayBhcyBmcmVlZAorICAgICAgICAgICAgICAgICRnZXRtZW17JGFkZHJ9PSIkc291cmNlOiRsaW5lbnVtIjsKKworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCRmdW5jdGlvbiA9fiAvbWFsbG9jXCgoXGQqKVwpID0gMHgoWzAtOWEtZl0qKS8pIHsKKyAgICAgICAgICAgICRzaXplID0gJDE7CisgICAgICAgICAgICAkYWRkciA9ICQyOworCisgICAgICAgICAgICBpZigkc2l6ZWF0YWRkcnskYWRkcn0+MCkgeworICAgICAgICAgICAgICAgICMgdGhpcyBtZWFucyB3ZWVlZWVpcmRvCisgICAgICAgICAgICAgICAgcHJpbnQgIk1peGVkIGRlYnVnIGNvbXBpbGUgKCRzb3VyY2U6JGxpbmVudW0gYXQgbGluZSAkbG51bSksIHJlYnVpbGQgY3VybCBub3dcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIldlIHRoaW5rICRzaXplYXRhZGRyeyRhZGRyfSBieXRlcyBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQgYXQgdGhhdCBtZW1vcnkgYWRkcmVzczogJGFkZHIhXG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAkc2l6ZWF0YWRkcnskYWRkcn09JHNpemU7CisgICAgICAgICAgICAkdG90YWxtZW0gKz0gJHNpemU7CisKKyAgICAgICAgICAgIGlmKCR0cmFjZSkgeworICAgICAgICAgICAgICAgIHByaW50ICJNQUxMT0M6IG1hbGxvYygkc2l6ZSkgYXQgJHNvdXJjZTokbGluZW51bSIsCisgICAgICAgICAgICAgICAgIiBtYWtlcyB0b3RhbGx5ICR0b3RhbG1lbSBieXRlc1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbmV3dG90YWwoJHRvdGFsbWVtKTsKKyAgICAgICAgICAgICRtYWxsb2NzKys7CisKKyAgICAgICAgICAgICRnZXRtZW17JGFkZHJ9PSIkc291cmNlOiRsaW5lbnVtIjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkZnVuY3Rpb24gPX4gL2NhbGxvY1woKFxkKiksKFxkKilcKSA9IDB4KFswLTlhLWZdKikvKSB7CisgICAgICAgICAgICAkc2l6ZSA9ICQxKiQyOworICAgICAgICAgICAgJGFkZHIgPSAkMzsKKworICAgICAgICAgICAgJGFyZzEgPSAkMTsKKyAgICAgICAgICAgICRhcmcyID0gJDI7CisKKyAgICAgICAgICAgIGlmKCRzaXplYXRhZGRyeyRhZGRyfT4wKSB7CisgICAgICAgICAgICAgICAgIyB0aGlzIG1lYW5zIHdlZWVlZWlyZG8KKyAgICAgICAgICAgICAgICBwcmludCAiTWl4ZWQgZGVidWcgY29tcGlsZSwgcmVidWlsZCBjdXJsIG5vd1xuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgJHNpemVhdGFkZHJ7JGFkZHJ9PSRzaXplOworICAgICAgICAgICAgJHRvdGFsbWVtICs9ICRzaXplOworCisgICAgICAgICAgICBpZigkdHJhY2UpIHsKKyAgICAgICAgICAgICAgICBwcmludCAiQ0FMTE9DOiBjYWxsb2MoJGFyZzEsJGFyZzIpIGF0ICRzb3VyY2U6JGxpbmVudW0iLAorICAgICAgICAgICAgICAgICIgbWFrZXMgdG90YWxseSAkdG90YWxtZW0gYnl0ZXNcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5ld3RvdGFsKCR0b3RhbG1lbSk7CisgICAgICAgICAgICAkY2FsbG9jcysrOworCisgICAgICAgICAgICAkZ2V0bWVteyRhZGRyfT0iJHNvdXJjZTokbGluZW51bSI7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJGZ1bmN0aW9uID1+IC9yZWFsbG9jXCgoXChuaWxcKXwweChbMC05YS1mXSopKSwgKFxkKilcKSA9IDB4KFswLTlhLWZdKikvKSB7CisgICAgICAgICAgICBteSAoJG9sZGFkZHIsICRuZXdzaXplLCAkbmV3YWRkcikgPSAoJDIsICQzLCAkNCk7CisKKyAgICAgICAgICAgICR0b3RhbG1lbSAtPSAkc2l6ZWF0YWRkcnskb2xkYWRkcn07CisgICAgICAgICAgICBpZigkdHJhY2UpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlJFQUxMT0M6ICVkIGxlc3MgYnl0ZXMgYW5kICIsICRzaXplYXRhZGRyeyRvbGRhZGRyfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkc2l6ZWF0YWRkcnskb2xkYWRkcn09MDsKKworICAgICAgICAgICAgJHRvdGFsbWVtICs9ICRuZXdzaXplOworICAgICAgICAgICAgJHNpemVhdGFkZHJ7JG5ld2FkZHJ9PSRuZXdzaXplOworCisgICAgICAgICAgICBpZigkdHJhY2UpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVkIG1vcmUgYnl0ZXMgKCRzb3VyY2U6JGxpbmVudW0pXG4iLCAkbmV3c2l6ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5ld3RvdGFsKCR0b3RhbG1lbSk7CisgICAgICAgICAgICAkcmVhbGxvY3MrKzsKKworICAgICAgICAgICAgJGdldG1lbXskb2xkYWRkcn09IiI7CisgICAgICAgICAgICAkZ2V0bWVteyRuZXdhZGRyfT0iJHNvdXJjZTokbGluZW51bSI7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJGZ1bmN0aW9uID1+IC9zdHJkdXBcKDB4KFswLTlhLWZdKilcKSBcKChcZCopXCkgPSAweChbMC05YS1mXSopLykgeworICAgICAgICAgICAgIyBzdHJkdXAoYTViNTApICg4KSA9IGRmN2MwCisKKyAgICAgICAgICAgICRkdXAgPSAkMTsKKyAgICAgICAgICAgICRzaXplID0gJDI7CisgICAgICAgICAgICAkYWRkciA9ICQzOworICAgICAgICAgICAgJGdldG1lbXskYWRkcn09IiRzb3VyY2U6JGxpbmVudW0iOworICAgICAgICAgICAgJHNpemVhdGFkZHJ7JGFkZHJ9PSRzaXplOworCisgICAgICAgICAgICAkdG90YWxtZW0gKz0gJHNpemU7CisKKyAgICAgICAgICAgIGlmKCR0cmFjZSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiU1RSRFVQOiAkc2l6ZSBieXRlcyBhdCAlcywgbWFrZXMgdG90YWxseTogJWQgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICRnZXRtZW17JGFkZHJ9LCAkdG90YWxtZW0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZXd0b3RhbCgkdG90YWxtZW0pOworICAgICAgICAgICAgJHN0cmR1cHMrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ICJOb3QgcmVjb2duaXplZCBpbnB1dCBsaW5lOiAkZnVuY3Rpb25cbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgIyBGRCB1cmwuYzoxMjgyIHNvY2tldCgpID0gNQorICAgIGVsc2lmKCRfID1+IC9eRkQgKFteIF0qKTooXGQqKSAoLiopLykgeworICAgICAgICAjIGdlbmVyaWMgbWF0Y2ggZm9yIHRoZSBmaWxlbmFtZStsaW5lbnVtYmVyCisgICAgICAgICRzb3VyY2UgPSAkMTsKKyAgICAgICAgJGxpbmVudW0gPSAkMjsKKyAgICAgICAgJGZ1bmN0aW9uID0gJDM7CisKKyAgICAgICAgaWYoJGZ1bmN0aW9uID1+IC9zb2NrZXRcKFwpID0gKFxkKikvKSB7CisgICAgICAgICAgICAkZmlsZWRlc3skMX09MTsKKyAgICAgICAgICAgICRnZXRmaWxleyQxfT0iJHNvdXJjZTokbGluZW51bSI7CisgICAgICAgICAgICAkb3BlbmZpbGUrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkZnVuY3Rpb24gPX4gL3NvY2tldHBhaXJcKFwpID0gKFxkKikgKFxkKikvKSB7CisgICAgICAgICAgICAkZmlsZWRlc3skMX09MTsKKyAgICAgICAgICAgICRnZXRmaWxleyQxfT0iJHNvdXJjZTokbGluZW51bSI7CisgICAgICAgICAgICAkb3BlbmZpbGUrKzsKKyAgICAgICAgICAgICRmaWxlZGVzeyQyfT0xOworICAgICAgICAgICAgJGdldGZpbGV7JDJ9PSIkc291cmNlOiRsaW5lbnVtIjsKKyAgICAgICAgICAgICRvcGVuZmlsZSsrOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRmdW5jdGlvbiA9fiAvYWNjZXB0XChcKSA9IChcZCopLykgeworICAgICAgICAgICAgJGZpbGVkZXN7JDF9PTE7CisgICAgICAgICAgICAkZ2V0ZmlsZXskMX09IiRzb3VyY2U6JGxpbmVudW0iOworICAgICAgICAgICAgJG9wZW5maWxlKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJGZ1bmN0aW9uID1+IC9zY2xvc2VcKChcZCopXCkvKSB7CisgICAgICAgICAgICBpZigkZmlsZWRlc3skMX0gIT0gMSkgeworICAgICAgICAgICAgICAgIHByaW50ICJDbG9zZSB3aXRob3V0IG9wZW46ICRsaW5lXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgJGZpbGVkZXN7JDF9PTA7ICMgY2xvc2VkIG5vdworICAgICAgICAgICAgICAgICRvcGVuZmlsZS0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgICMgRklMRSB1cmwuYzoxMjgyIGZvcGVuKCJibGFibGEiKSA9IDB4NWRkZAorICAgIGVsc2lmKCRfID1+IC9eRklMRSAoW14gXSopOihcZCopICguKikvKSB7CisgICAgICAgICMgZ2VuZXJpYyBtYXRjaCBmb3IgdGhlIGZpbGVuYW1lK2xpbmVudW1iZXIKKyAgICAgICAgJHNvdXJjZSA9ICQxOworICAgICAgICAkbGluZW51bSA9ICQyOworICAgICAgICAkZnVuY3Rpb24gPSAkMzsKKworICAgICAgICBpZigkZnVuY3Rpb24gPX4gL2ZbZF0qb3BlblwoXCIoW15cIl0qKVwiLFwiKFteXCJdKilcIlwpID0gKFwobmlsXCl8MHgoWzAtOWEtZl0qKSkvKSB7CisgICAgICAgICAgICBpZigkMyBlcSAiKG5pbCkiKSB7CisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgJGZvcGVueyQ0fT0xOworICAgICAgICAgICAgICAgICRmb3BlbmZpbGV7JDR9PSIkc291cmNlOiRsaW5lbnVtIjsKKyAgICAgICAgICAgICAgICAkZm9wZW5zKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgIyBmY2xvc2UoMHgxMDI2YzgpCisgICAgICAgIGVsc2lmKCRmdW5jdGlvbiA9fiAvZmNsb3NlXCgweChbMC05YS1mXSopXCkvKSB7CisgICAgICAgICAgICBpZighJGZvcGVueyQxfSkgeworICAgICAgICAgICAgICAgIHByaW50ICJmY2xvc2UoKSB3aXRob3V0IGZvcGVuKCk6ICRsaW5lXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgJGZvcGVueyQxfT0wOworICAgICAgICAgICAgICAgICRmb3BlbnMtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAjIEdFVE5BTUUgdXJsLmM6MTkwMSBnZXRuYW1laW5mbygpCisgICAgZWxzaWYoJF8gPX4gL15HRVROQU1FIChbXiBdKik6KFxkKikgKC4qKS8pIHsKKyAgICAgICAgIyBub3QgbXVjaCB0byBkbworICAgIH0KKworICAgICMgQUREUiB1cmwuYzoxMjgyIGdldGFkZHJpbmZvKCkgPSAweDVkZGQKKyAgICBlbHNpZigkXyA9fiAvXkFERFIgKFteIF0qKTooXGQqKSAoLiopLykgeworICAgICAgICAjIGdlbmVyaWMgbWF0Y2ggZm9yIHRoZSBmaWxlbmFtZStsaW5lbnVtYmVyCisgICAgICAgICRzb3VyY2UgPSAkMTsKKyAgICAgICAgJGxpbmVudW0gPSAkMjsKKyAgICAgICAgJGZ1bmN0aW9uID0gJDM7CisKKyAgICAgICAgaWYoJGZ1bmN0aW9uID1+IC9nZXRhZGRyaW5mb1woXCkgPSAoXChuaWxcKXwweChbMC05YS1mXSopKS8pIHsKKyAgICAgICAgICAgIG15ICRhZGQgPSAkMjsKKyAgICAgICAgICAgIGlmKCRhZGQgZXEgIihuaWwpIikgeworICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICRhZGRyaW5mb3skYWRkfT0xOworICAgICAgICAgICAgICAgICRhZGRyaW5mb2ZpbGV7JGFkZH09IiRzb3VyY2U6JGxpbmVudW0iOworICAgICAgICAgICAgICAgICRhZGRyaW5mb3MrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCR0cmFjZSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiR0VUQUREUklORk8gKCRzb3VyY2U6JGxpbmVudW0pXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAjIGZjbG9zZSgweDEwMjZjOCkKKyAgICAgICAgZWxzaWYoJGZ1bmN0aW9uID1+IC9mcmVlYWRkcmluZm9cKDB4KFswLTlhLWZdKilcKS8pIHsKKyAgICAgICAgICAgIGlmKCEkYWRkcmluZm97JDF9KSB7CisgICAgICAgICAgICAgICAgcHJpbnQgImZyZWVhZGRyaW5mbygpIHdpdGhvdXQgZ2V0YWRkcmluZm8oKTogJGxpbmVcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAkYWRkcmluZm97JDF9PTA7CisgICAgICAgICAgICAgICAgJGFkZHJpbmZvcy0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoJHRyYWNlKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJGUkVFQUREUklORk8gKCRzb3VyY2U6JGxpbmVudW0pXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwcmludCAiTm90IHJlY29nbml6ZWQgcHJlZml4IGxpbmU6ICRsaW5lXG4iOworICAgIH0KK30KK2Nsb3NlKEZJTEUpOworCitpZigkdG90YWxtZW0pIHsKKyAgICBwcmludCAiTGVhayBkZXRlY3RlZDogbWVtb3J5IHN0aWxsIGFsbG9jYXRlZDogJHRvdGFsbWVtIGJ5dGVzXG4iOworCisgICAgZm9yKGtleXMgJXNpemVhdGFkZHIpIHsKKyAgICAgICAgJGFkZHIgPSAkXzsKKyAgICAgICAgJHNpemUgPSAkc2l6ZWF0YWRkcnskYWRkcn07CisgICAgICAgIGlmKCRzaXplID4gMCkgeworICAgICAgICAgICAgcHJpbnQgIkF0ICRhZGRyLCB0aGVyZSdzICRzaXplIGJ5dGVzLlxuIjsKKyAgICAgICAgICAgIHByaW50ICIgYWxsb2NhdGVkIGJ5ICIuJGdldG1lbXskYWRkcn0uIlxuIjsKKyAgICAgICAgfQorICAgIH0KK30KKworaWYoJG9wZW5maWxlKSB7CisgICAgZm9yKGtleXMgJWZpbGVkZXMpIHsKKyAgICAgICAgaWYoJGZpbGVkZXN7JF99ID09IDEpIHsKKyAgICAgICAgICAgIHByaW50ICJPcGVuIGZpbGUgZGVzY3JpcHRvciBjcmVhdGVkIGF0ICIuJGdldGZpbGV7JF99LiJcbiI7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2lmKCRmb3BlbnMpIHsKKyAgICBwcmludCAiT3BlbiBGSUxFIGhhbmRsZXMgbGVmdCBhdDpcbiI7CisgICAgZm9yKGtleXMgJWZvcGVuKSB7CisgICAgICAgIGlmKCRmb3BlbnskX30gPT0gMSkgeworICAgICAgICAgICAgcHJpbnQgImZvcGVuKCkgY2FsbGVkIGF0ICIuJGZvcGVuZmlsZXskX30uIlxuIjsKKyAgICAgICAgfQorICAgIH0KK30KKworaWYoJGFkZHJpbmZvcykgeworICAgIHByaW50ICJJUHY2LXN0eWxlIG5hbWUgcmVzb2x2ZSBkYXRhIGxlZnQgYXQ6XG4iOworICAgIGZvcihrZXlzICVhZGRyaW5mb2ZpbGUpIHsKKyAgICAgICAgaWYoJGFkZHJpbmZveyRffSA9PSAxKSB7CisgICAgICAgICAgICBwcmludCAiZ2V0YWRkcmluZm8oKSBjYWxsZWQgYXQgIi4kYWRkcmluZm9maWxleyRffS4iXG4iOworICAgICAgICB9CisgICAgfQorfQorCitpZigkdmVyYm9zZSkgeworICAgIHByaW50ICJNYWxsb2NzOiAkbWFsbG9jc1xuIiwKKyAgICAiUmVhbGxvY3M6ICRyZWFsbG9jc1xuIiwKKyAgICAiQ2FsbG9jczogJGNhbGxvY3NcbiIsCisgICAgIlN0cmR1cHM6ICAkc3RyZHVwc1xuIiwKKyAgICAiRnJlZXM6ICRmcmVlc1xuIiwKKyAgICAiQWxsb2NhdGlvbnM6ICIuKCRtYWxsb2NzICsgJGNhbGxvY3MgKyAkcmVhbGxvY3MgKyAkc3RyZHVwcykuIlxuIjsKKworICAgIHByaW50ICJNYXhpbXVtIGFsbG9jYXRlZDogJG1heG1lbVxuIjsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3J0c3BzZXJ2ZXIucGwgYi9jdXJsLTcuMjUuMC90ZXN0cy9ydHNwc2VydmVyLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxNTEyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9ydHNwc2VydmVyLnBsCkBAIC0wLDAgKzEsMTA4IEBACisjIS91c3IvYmluL2VudiBwZXJsCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0JFR0lOIHsKKyAgICBASU5DPShASU5DLCAkRU5WeydzcmNkaXInfSwgJy4nKTsKK30KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIHNlcnZlcmhlbHAgcXcoCisgICAgc2VydmVyX3BpZGZpbGVuYW1lCisgICAgc2VydmVyX2xvZ2ZpbGVuYW1lCisgICAgKTsKKworbXkgJHZlcmJvc2UgPSAwOyAgICAgIyBzZXQgdG8gMSBmb3IgZGVidWdnaW5nCitteSAkcG9ydCA9IDg5OTA7ICAgICAjIGp1c3QgYSBkZWZhdWx0CitteSAkaXB2bnVtID0gNDsgICAgICAjIGRlZmF1bHQgSVAgdmVyc2lvbiBvZiBydHNwIHNlcnZlcgorbXkgJGlkbnVtID0gMTsgICAgICAgIyBkYWZhdWx0IHJ0c3Agc2VydmVyIGluc3RhbmNlIG51bWJlcgorbXkgJHByb3RvID0gJ3J0c3AnOyAgIyBwcm90b2NvbCB0aGUgcnRzcCBzZXJ2ZXIgc3BlYWtzCitteSAkcGlkZmlsZTsgICAgICAgICAjIHJ0c3Agc2VydmVyIHBpZCBmaWxlCitteSAkbG9nZmlsZTsgICAgICAgICAjIHJ0c3Agc2VydmVyIGxvZyBmaWxlCitteSAkc3JjZGlyOworCitteSAkZmxhZ3MgID0gIiI7CitteSAkcGF0aCAgID0gJy4nOworbXkgJGxvZ2RpciA9ICRwYXRoIC4nL2xvZyc7CisKK3doaWxlKEBBUkdWKSB7CisgICAgaWYoJEFSR1ZbMF0gZXEgJy0tcGlkZmlsZScpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgICRwaWRmaWxlID0gJEFSR1ZbMV07CisgICAgICAgICAgICBzaGlmdCBAQVJHVjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1sb2dmaWxlJykgeworICAgICAgICBpZigkQVJHVlsxXSkgeworICAgICAgICAgICAgJGxvZ2ZpbGUgPSAkQVJHVlsxXTsKKyAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLXNyY2RpcicpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgICRzcmNkaXIgPSAkQVJHVlsxXTsKKyAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLWlwdjQnKSB7CisgICAgICAgICRpcHZudW0gPSA0OworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1pcHY2JykgeworICAgICAgICAkaXB2bnVtID0gNjsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tcG9ydCcpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0gPX4gL14oXGQrKSQvKSB7CisgICAgICAgICAgICAkcG9ydCA9ICQxOworICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0taWQnKSB7CisgICAgICAgIGlmKCRBUkdWWzFdID1+IC9eKFxkKykkLykgeworICAgICAgICAgICAgJGlkbnVtID0gJDEgaWYoJDEgPiAwKTsKKyAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLXZlcmJvc2UnKSB7CisgICAgICAgICR2ZXJib3NlID0gMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHByaW50IFNUREVSUiAiXG5XYXJuaW5nOiBydHNwc2VydmVyLnBsIHVua25vd24gcGFyYW1ldGVyOiAkQVJHVlswXVxuIjsKKyAgICB9CisgICAgc2hpZnQgQEFSR1Y7Cit9CisKK2lmKCEkc3JjZGlyKSB7CisgICAgJHNyY2RpciA9ICRFTlZ7J3NyY2Rpcid9IHx8ICcuJzsKK30KK2lmKCEkcGlkZmlsZSkgeworICAgICRwaWRmaWxlID0gIiRwYXRoLyIuIHNlcnZlcl9waWRmaWxlbmFtZSgkcHJvdG8sICRpcHZudW0sICRpZG51bSk7Cit9CitpZighJGxvZ2ZpbGUpIHsKKyAgICAkbG9nZmlsZSA9IHNlcnZlcl9sb2dmaWxlbmFtZSgkbG9nZGlyLCAkcHJvdG8sICRpcHZudW0sICRpZG51bSk7Cit9CisKKyRmbGFncyAuPSAiLS1waWRmaWxlIFwiJHBpZGZpbGVcIiAtLWxvZ2ZpbGUgXCIkbG9nZmlsZVwiICI7CiskZmxhZ3MgLj0gIi0taXB2JGlwdm51bSAtLXBvcnQgJHBvcnQgLS1zcmNkaXIgXCIkc3JjZGlyXCIiOworCitleGVjKCJzZXJ2ZXIvcnRzcGQgJGZsYWdzIik7CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9ydW50ZXN0cy4xIGIvY3VybC03LjI1LjAvdGVzdHMvcnVudGVzdHMuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWY4NzgzCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvcnVudGVzdHMuMQpAQCAtMCwwICsxLDEwNyBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA3LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCBydW50ZXN0cy5wbCAxICIyIEZlYiAyMDEwIiAiQ3VybCA3LjIwLjAiICJydW50ZXN0cyIKKy5TSCBOQU1FCitydW50ZXN0cy5wbCBcLSBydW4gb25lIG9yIG1vcmUgdGVzdCBjYXNlcworLlNIIFNZTk9QU0lTCisuQiBydW50ZXN0cy5wbCBbb3B0aW9uc10gW3Rlc3QgbnVtYmVyXSBbIXRlc3QgbnVtYmVyXSBba2V5IHdvcmRdIFsha2V5IHdvcmRdCisuU0ggREVTQ1JJUFRJT04KK1xmSXJ1bnRlc3RzLnBsXGZQIHJ1bnMgb25lLCBzZXZlcmFsIG9yIGFsbCB0aGUgZXhpc3RpbmcgdGVzdCBjYXNlcyBpbiBjdXJsJ3MKK3Rlc3Qgc3VpdGUuIEl0IGlzIG9mdGVuIGNhbGxlZCBmcm9tIHRoZSByb290IE1ha2VmaWxlIG9mIHRoZSBjdXJsIHBhY2thZ2Ugd2l0aAorXCYnbWFrZSB0ZXN0Jy4KKy5TSCAiVEVTVCBOVU1CRVIiCitJZiBubyB0ZXN0IGNhc2UgbnVtYmVyIGlzIGdpdmVuLCBhbGwgZXhpc3RpbmcgdGVzdHMgdGhhdCB0aGUgc2NyaXB0IGNhbiBmaW5kCit3aWxsIGJlIGNvbnNpZGVyZWQgZm9yIHJ1bm5pbmcuIFlvdSBjYW4gc3BlY2lmeSBzaW5nbGUgdGVzdCBjYXNlcyB0byBydW4sCitzcGFjZS1zZXBhcmF0ZWQsIGxpa2UgIjEgMyA1IDcgMTEiLCBhbmQgeW91IGNhbiBzcGVjaWZ5IGEgcmFuZ2UgbGlrZSAiNDUgdG8KKzY3Ii4gWW91IGNhbiBhbHNvIHNwZWNpZnkgb25seSB0aGUgdGVzdHMgeW91IGRvbid0IHdhbnQgdG8gcnVuIGJ5IGxpc3RpbmcKK3RoZSBudW1iZXJzIHdpdGggYSBsZWFkaW5nIGV4Y2xhbWF0aW9uIHBvaW50LCBsaWtlICIhNjYiLgorLlAKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSB0ZXN0cyB0byBza2lwIGJhc2VkIG9uIGEga2V5IHdvcmQgZGVzY3JpYmluZwordGhlIHRlc3QuIFRoZXNlIGFyZSBzcGVjaWZpZWQgd2l0aCBhIGxlYWRpbmcgZXhjbGFtYXRpb24gcG9pbnQgYW5kIHRoZQora2V5IHdvcmQgb3IgcGhyYXNlLCBsaWtlICIhSFRUUCBOVExNIGF1dGgiLiAgTGlrZXdpc2UsIHRlc3RzIHRvIHJ1biBjYW4KK2JlIHNwZWNpZmllZCBzaW1wbHkgYnkgc3BlY2lmeWluZyB0aGUgdW5hZG9ybmVkIGtleSB3b3JkcywgbGlrZSAiRlRQUyIuCitSZW1lbWJlciB0aGF0IHRoZSBleGNsYW1hdGlvbiBtYXJrcyBhbmQgc3BhY2VzIHdpbGwgbmVlZCB0byBiZSBxdW90ZWQgc29tZWhvdword2hlbiBlbnRlcmVkIGF0IG1hbnkgY29tbWFuZCBzaGVsbHMuCisuU0ggT1BUSU9OUworLklQICItYSIKK0NvbnRpbnVlIHJ1bm5pbmcgdGhlIHJlc3Qgb2YgdGhlIHRlc3QgY2FzZXMgZXZlbiBpZiBvbmUgdGVzdCBmYWlscy4gQnkKK2RlZmF1bHQsIHRoZSB0ZXN0IHNjcmlwdCBzdG9wcyBhcyBzb29uIGFzIGFuIGVycm9yIGlzIGRldGVjdGVkLgorLklQICItYk4iCitVc2UgTiBhcyB0aGUgYmFzZSBUQ1AvVURQIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRvIHN0YXJ0IHRoZSB0ZXN0IHNlcnZlcnMuCisuSVAgIi1jIDxjdXJsPiIKK1Byb3ZpZGUgYSBjdXN0b20gY3VybCBiaW5hcnkgdG8gcnVuIHRoZSB0ZXN0cyB3aXRoLiBEZWZhdWx0IGlzIHRoZSBjdXJsCitleGVjdXRhYmxlIGluIHRoZSBidWlsZCB0cmVlLgorLklQICItZCIKK0VuYWJsZSBwcm90b2NvbCBkZWJ1ZzogaGF2ZSB0aGUgc2VydmVycyBkaXNwbGF5IHByb3RvY29sIG91dHB1dC4KKy5JUCAiLWciCitSdW4gdGhlIGdpdmVuIHRlc3Qocykgd2l0aCBnZGIuIFRoaXMgaXMgYmVzdCB1c2VkIG9uIGEgc2luZ2xlIHRlc3QgY2FzZSBhbmQKK2N1cmwgYnVpbHQgLS1kaXNhYmxlLXNoYXJlZC4gVGhpcyB0aGVuIGZpcmVzIHVwIGdkYiB3aXRoIGNvbW1hbmQgbGluZSBzZXQgdG8KK3J1biB0aGUgc3BlY2lmaWVkIHRlc3QgY2FzZS4gU2ltcGx5IChzZXQgYSBicmVhay1wb2ludCBhbmQpIHR5cGUgJ3J1bicgdG8KK3N0YXJ0LgorLklQICItaCIKK0Rpc3BsYXlzIGEgaGVscCB0ZXh0IGFib3V0IHRoaXMgcHJvZ3JhbSdzIGNvbW1hbmQgbGluZSBvcHRpb25zLgorLklQICItayIKK0tlZXAgb3V0cHV0IGFuZCBsb2cgZmlsZXMgaW4gbG9nLyBhZnRlciBhIHRlc3QgcnVuLCBldmVuIGlmIG5vIGVycm9yIHdhcworZGV0ZWN0ZWQuIFVzZWZ1bCBmb3IgZGVidWdnaW5nLgorLklQICItbCIKK0xpc3RzIGFsbCB0ZXN0IGNhc2UgbmFtZXMuCisuSVAgIi1uIgorRGlzYWJsZSB0aGUgY2hlY2sgZm9yIGFuZCB1c2Ugb2YgdmFsZ3JpbmQuCisuSVAgIi1wIgorUHJpbnRzIG91dCBhbGwgZmlsZXMgaW4gImxvZy8iIHRvIHN0ZG91dCB3aGVuIGEgdGVzdCBjYXNlIGZhaWxzLiBWZXJ5CitwcmFjdGljYWwgd2hlbiB1c2VkIGluIHRoZSBhdXRvbWF0ZWQgYW5kIGRpc3RyaWJ1dGVkIHRlc3RzIHNpbmNlIHRoZW4gdGhlCitwZW9wbGUgY2hlY2tpbmcgdGhlIGZhaWx1cmVzIGFuZCB0aGUgcmVhc29ucyBmb3IgdGhlbSBtaWdodCBub3QgaGF2ZSBwaHlzaWNhbAorYWNjZXNzIHRvIHRoZSBtYWNoaW5lIGFuZCBsb2dzLgorLklQICItciIKK0Rpc3BsYXkgcnVuIHRpbWUgc3RhdGlzdGljcy4gKFJlcXVpcmVzIFBlcmwgVGltZTo6SGlSZXMgbW9kdWxlKQorLklQICItcmYiCitEaXNwbGF5IGZ1bGwgcnVuIHRpbWUgc3RhdGlzdGljcy4gKFJlcXVpcmVzIFBlcmwgVGltZTo6SGlSZXMgbW9kdWxlKQorLklQICItcyIKK1Nob3J0ZXIgb3V0cHV0LiBTcGVha3MgbGVzcyB0aGFuIGRlZmF1bHQuCisuSVAgIi10W251bV0iCitTZWxlY3RzIGEgXGZCdG9ydHVyZVxmUCB0ZXN0IGZvciB0aGUgZ2l2ZW4gdGVzdHMuIFRoaXMgbWFrZXMgcnVudGVzdHMucGwgZmlyc3QKK3J1biB0aGUgdGVzdHMgb25jZSBhbmQgY291bnQgdGhlIG51bWJlciBvZiBtZW1vcnkgYWxsb2NhdGlvbnMgbWFkZS4gSXQgdGhlbgorcmVydW5zIHRoZSB0ZXN0IHRoYXQgbnVtYmVyIG9mIHRpbWVzLCBlYWNoIHRpbWUgZm9yY2luZyBvbmUgb2YgdGhlIGFsbG9jYXRpb25zCit0byBmYWlsIHVudGlsIGFsbCBhbGxvY3MgaGF2ZSBiZWVuIHRlc3RlZC4gQnkgc2V0dGluZyBcZkludW1cZlAgeW91IGNhbiBmb3JjZQordGhlIGFsbG9jYXRpb24gd2l0aCB0aGF0IG51bWJlciB0byBiZSBzZXQgdG8gZmFpbCBhdCBvbmNlIGluc3RlYWQgb2YgbG9vcGluZwordGhyb3VnaCBldmVyeW9uZSwgd2hpY2ggaXMgdmVyeSBoYW5keSB3aGVuIGRlYnVnZ2luZyBhbmQgdGhlbiBvZnRlbiBpbgorY29tYmluYXRpb24gd2l0aCBcZkktZ1xmUC4KKy5JUCAiLXYiCitFbmFibGUgdmVyYm9zZSBvdXRwdXQuIFNwZWFrcyBtb3JlIHRoYW4gZGVmYXVsdC4KKy5TSCAiUlVOTklORyBURVNUUyIKK01hbnkgdGVzdHMgaGF2ZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYmVmb3JlIHRoZSB0ZXN0IGNhc2UgY2FuIHJ1bgorZmluZS4gVGhleSBjb3VsZCBkZXBlbmQgb24gYnVpbHQtaW4gZmVhdHVyZXMgaW4gbGliY3VybCBvciBmZWF0dXJlcyBwcmVzZW50IGluCit0aGUgb3BlcmF0aW5nIHN5c3RlbSBvciBldmVuIGluIHRoaXJkLXBhcnR5IGxpYnJhcmllcyB0aGF0IGN1cmwgbWF5IG9yIG1heSBub3QKK3VzZS4KKy5QCitUaGUgdGVzdCBzY3JpcHQgY2hlY2tzIG1vc3Qgb2YgdGhlc2UgYnkgaXRzZWxmIHRvIGRldGVybWluZSB3aGVuIGl0IGlzCitzYWZlIHRvIGF0dGVtcHQgdG8gcnVuIGVhY2ggdGVzdC4gIFRob3NlIHdoaWNoIGNhbm5vdCBiZSBydW4gZHVlIHRvCitmYWlsZWQgcmVxdWlyZW1lbnRzIHdpbGwgc2ltcGx5IGJlIHNraXBwZWQgYW5kIGxpc3RlZCBhdCB0aGUgY29tcGxldGlvbgorb2YgYWxsIHRlc3QgY2FzZXMuICBJbiBzb21lIHVudXN1YWwgY29uZmlndXJhdGlvbnMsIHRoZSB0ZXN0IHNjcmlwdAorY2Fubm90IG1ha2UgdGhlIGNvcnJlY3QgZGV0ZXJtaW5hdGlvbiBmb3IgYWxsIHRlc3RzLiAgSW4gdGhlc2UgY2FzZXMsCit0aGUgcHJvYmxlbWF0aWMgdGVzdHMgY2FuIGJlIHNraXBwZWQgdXNpbmcgdGhlICIha2V5d29yZCIgc2tpcCBmZWF0dXJlCitkb2N1bWVudGVkIGVhcmxpZXIuCisuU0ggIldSSVRJTkcgVEVTVFMiCitUaGUgc2ltcGxlc3Qgd2F5IHRvIHdyaXRlIHRlc3QgY2FzZXMgaXMgdG8gc3RhcnQgd2l0aCBhIHNpbWlsYXIgZXhpc3RpbmcgdGVzdCwKK3NhdmUgaXQgd2l0aCBhIG5ldyBudW1iZXIgYW5kIHRoZW4gYWRqdXN0IGl0IHRvIGZpdC4gVGhlcmUncyBhbiBhdHRlbXB0IHRvCitkb2N1bWVudCB0aGUgdGVzdCBjYXNlIGZpbGUgZm9ybWF0IGluIHRoZSB0ZXN0cy9GSUxFRk9STUFULgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvcnVudGVzdHMuaHRtbCBiL2N1cmwtNy4yNS4wL3Rlc3RzL3J1bnRlc3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMwOGNkYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3J1bnRlc3RzLmh0bWwKQEAgLTAsMCArMSw4NyBAQAorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+cnVudGVzdHMucGwgbWFuIHBhZ2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJyb2ZmaXQgMC43Ij4KKzxTVFlMRSB0eXBlPSJ0ZXh0L2NzcyI+CitQLmxldmVsMCB7CisgcGFkZGluZy1sZWZ0OiAyZW07Cit9CisKK1AubGV2ZWwxIHsKKyBwYWRkaW5nLWxlZnQ6IDRlbTsKK30KKworUC5sZXZlbDIgeworIHBhZGRpbmctbGVmdDogNmVtOworfQorCitzcGFuLmVtcGhhc2lzIHsKKyBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uYm9sZCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3NwYW4ubWFucGFnZSB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gyLm5yb2Zmc2ggeworIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cit9CisKK3NwYW4ubnJvZmZpcCB7CisgZm9udC13ZWlnaHQ6IGJvbGQ7CisgZm9udC1zaXplOiAxMjAlOworIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3Aucm9mZml0IHsKKyB0ZXh0LWFsaWduOiBjZW50ZXI7CisgZm9udC1zaXplOiA4MCU7Cit9Cis8L1NUWUxFPgorPC9oZWFkPjxib2R5PgorCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSJOQU1FIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5OQU1FPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPnJ1bnRlc3RzLnBsIC0gcnVuIG9uZSBvciBtb3JlIHRlc3QgY2FzZXMgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj5ydW50ZXN0cy5wbCBbb3B0aW9uc10gW3Rlc3QgbnVtYmVyXSBbIXRlc3QgbnVtYmVyXSBba2V5IHdvcmRdIFsha2V5IHdvcmRdPC9zcGFuPiA8YSBuYW1lPSJERVNDUklQVElPTiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+REVTQ1JJUFRJT048L2gyPgorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5ydW50ZXN0cy5wbDwvc3Bhbj4gcnVucyBvbmUsIHNldmVyYWwgb3IgYWxsIHRoZSBleGlzdGluZyB0ZXN0IGNhc2VzIGluIGN1cmwncyB0ZXN0IHN1aXRlLiBJdCBpcyBvZnRlbiBjYWxsZWQgZnJvbSB0aGUgcm9vdCBNYWtlZmlsZSBvZiB0aGUgY3VybCBwYWNrYWdlIHdpdGggJ21ha2UgdGVzdCcuIDxhIG5hbWU9IlRFU1QiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlRFU1QgTlVNQkVSPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPklmIG5vIHRlc3QgY2FzZSBudW1iZXIgaXMgZ2l2ZW4sIGFsbCBleGlzdGluZyB0ZXN0cyB0aGF0IHRoZSBzY3JpcHQgY2FuIGZpbmQgd2lsbCBiZSBjb25zaWRlcmVkIGZvciBydW5uaW5nLiBZb3UgY2FuIHNwZWNpZnkgc2luZ2xlIHRlc3QgY2FzZXMgdG8gcnVuLCBzcGFjZS1zZXBhcmF0ZWQsIGxpa2UgIjEgMyA1IDcgMTEiLCBhbmQgeW91IGNhbiBzcGVjaWZ5IGEgcmFuZ2UgbGlrZSAiNDUgdG8gNjciLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBvbmx5IHRoZSB0ZXN0cyB5b3UgZG9uJ3Qgd2FudCB0byBydW4gYnkgbGlzdGluZyB0aGUgbnVtYmVycyB3aXRoIGEgbGVhZGluZyBleGNsYW1hdGlvbiBwb2ludCwgbGlrZSAiITY2Ii4gCis8cCBjbGFzcz0ibGV2ZWwwIj5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgdGVzdHMgdG8gc2tpcCBiYXNlZCBvbiBhIGtleSB3b3JkIGRlc2NyaWJpbmcgdGhlIHRlc3QuIFRoZXNlIGFyZSBzcGVjaWZpZWQgd2l0aCBhIGxlYWRpbmcgZXhjbGFtYXRpb24gcG9pbnQgYW5kIHRoZSBrZXkgd29yZCBvciBwaHJhc2UsIGxpa2UgIiFIVFRQIE5UTE0gYXV0aCIuICBMaWtld2lzZSwgdGVzdHMgdG8gcnVuIGNhbiBiZSBzcGVjaWZpZWQgc2ltcGx5IGJ5IHNwZWNpZnlpbmcgdGhlIHVuYWRvcm5lZCBrZXkgd29yZHMsIGxpa2UgIkZUUFMiLiBSZW1lbWJlciB0aGF0IHRoZSBleGNsYW1hdGlvbiBtYXJrcyBhbmQgc3BhY2VzIHdpbGwgbmVlZCB0byBiZSBxdW90ZWQgc29tZWhvdyB3aGVuIGVudGVyZWQgYXQgbWFueSBjb21tYW5kIHNoZWxscy4gPGEgbmFtZT0iT1BUSU9OUyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+T1BUSU9OUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1hIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1hPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkNvbnRpbnVlIHJ1bm5pbmcgdGhlIHJlc3Qgb2YgdGhlIHRlc3QgY2FzZXMgZXZlbiBpZiBvbmUgdGVzdCBmYWlscy4gQnkgZGVmYXVsdCwgdGhlIHRlc3Qgc2NyaXB0IHN0b3BzIGFzIHNvb24gYXMgYW4gZXJyb3IgaXMgZGV0ZWN0ZWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLWJOIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1iTjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Vc2UgTiBhcyB0aGUgYmFzZSBUQ1AvVURQIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRvIHN0YXJ0IHRoZSB0ZXN0IHNlcnZlcnMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLWMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LWMgJmx0O2N1cmwmZ3Q7PC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlByb3ZpZGUgYSBjdXN0b20gY3VybCBiaW5hcnkgdG8gcnVuIHRoZSB0ZXN0cyB3aXRoLiBEZWZhdWx0IGlzIHRoZSBjdXJsIGV4ZWN1dGFibGUgaW4gdGhlIGJ1aWxkIHRyZWUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLWQiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LWQ8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RW5hYmxlIHByb3RvY29sIGRlYnVnOiBoYXZlIHRoZSBzZXJ2ZXJzIGRpc3BsYXkgcHJvdG9jb2wgb3V0cHV0LiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1nIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1nPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlJ1biB0aGUgZ2l2ZW4gdGVzdChzKSB3aXRoIGdkYi4gVGhpcyBpcyBiZXN0IHVzZWQgb24gYSBzaW5nbGUgdGVzdCBjYXNlIGFuZCBjdXJsIGJ1aWx0IC0tZGlzYWJsZS1zaGFyZWQuIFRoaXMgdGhlbiBmaXJlcyB1cCBnZGIgd2l0aCBjb21tYW5kIGxpbmUgc2V0IHRvIHJ1biB0aGUgc3BlY2lmaWVkIHRlc3QgY2FzZS4gU2ltcGx5IChzZXQgYSBicmVhay1wb2ludCBhbmQpIHR5cGUgJ3J1bicgdG8gc3RhcnQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLWgiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LWg8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RGlzcGxheXMgYSBoZWxwIHRleHQgYWJvdXQgdGhpcyBwcm9ncmFtJ3MgY29tbWFuZCBsaW5lIG9wdGlvbnMuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLWsiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LWs8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+S2VlcCBvdXRwdXQgYW5kIGxvZyBmaWxlcyBpbiBsb2cvIGFmdGVyIGEgdGVzdCBydW4sIGV2ZW4gaWYgbm8gZXJyb3Igd2FzIGRldGVjdGVkLiBVc2VmdWwgZm9yIGRlYnVnZ2luZy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItbCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tbDwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5MaXN0cyBhbGwgdGVzdCBjYXNlIG5hbWVzLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1uIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1uPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkRpc2FibGUgdGhlIGNoZWNrIGZvciBhbmQgdXNlIG9mIHZhbGdyaW5kLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii1wIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi1wPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlByaW50cyBvdXQgYWxsIGZpbGVzIGluICJsb2cvIiB0byBzdGRvdXQgd2hlbiBhIHRlc3QgY2FzZSBmYWlscy4gVmVyeSBwcmFjdGljYWwgd2hlbiB1c2VkIGluIHRoZSBhdXRvbWF0ZWQgYW5kIGRpc3RyaWJ1dGVkIHRlc3RzIHNpbmNlIHRoZW4gdGhlIHBlb3BsZSBjaGVja2luZyB0aGUgZmFpbHVyZXMgYW5kIHRoZSByZWFzb25zIGZvciB0aGVtIG1pZ2h0IG5vdCBoYXZlIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgbWFjaGluZSBhbmQgbG9ncy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItciI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tcjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5EaXNwbGF5IHJ1biB0aW1lIHN0YXRpc3RpY3MuIChSZXF1aXJlcyBQZXJsIFRpbWU6OkhpUmVzIG1vZHVsZSkgCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItcmYiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LXJmPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkRpc3BsYXkgZnVsbCBydW4gdGltZSBzdGF0aXN0aWNzLiAoUmVxdWlyZXMgUGVybCBUaW1lOjpIaVJlcyBtb2R1bGUpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLXMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LXM8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U2hvcnRlciBvdXRwdXQuIFNwZWFrcyBsZXNzIHRoYW4gZGVmYXVsdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItdG51bSI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tdFtudW1dPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNlbGVjdHMgYSA8c3BhbiBDbGFzcz0iYm9sZCI+dG9ydHVyZTwvc3Bhbj4gdGVzdCBmb3IgdGhlIGdpdmVuIHRlc3RzLiBUaGlzIG1ha2VzIHJ1bnRlc3RzLnBsIGZpcnN0IHJ1biB0aGUgdGVzdHMgb25jZSBhbmQgY291bnQgdGhlIG51bWJlciBvZiBtZW1vcnkgYWxsb2NhdGlvbnMgbWFkZS4gSXQgdGhlbiByZXJ1bnMgdGhlIHRlc3QgdGhhdCBudW1iZXIgb2YgdGltZXMsIGVhY2ggdGltZSBmb3JjaW5nIG9uZSBvZiB0aGUgYWxsb2NhdGlvbnMgdG8gZmFpbCB1bnRpbCBhbGwgYWxsb2NzIGhhdmUgYmVlbiB0ZXN0ZWQuIEJ5IHNldHRpbmcgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5udW08L3NwYW4+IHlvdSBjYW4gZm9yY2UgdGhlIGFsbG9jYXRpb24gd2l0aCB0aGF0IG51bWJlciB0byBiZSBzZXQgdG8gZmFpbCBhdCBvbmNlIGluc3RlYWQgb2YgbG9vcGluZyB0aHJvdWdoIGV2ZXJ5b25lLCB3aGljaCBpcyB2ZXJ5IGhhbmR5IHdoZW4gZGVidWdnaW5nIGFuZCB0aGVuIG9mdGVuIGluIGNvbWJpbmF0aW9uIHdpdGggPGEgY2xhc3M9ImVtcGhhc2lzIiBocmVmPSIjLWciPi1nPC9hPi4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItdiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tdjwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5FbmFibGUgdmVyYm9zZSBvdXRwdXQuIFNwZWFrcyBtb3JlIHRoYW4gZGVmYXVsdC4gPGEgbmFtZT0iUlVOTklORyI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+UlVOTklORyBURVNUUzwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj5NYW55IHRlc3RzIGhhdmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJlZm9yZSB0aGUgdGVzdCBjYXNlIGNhbiBydW4gZmluZS4gVGhleSBjb3VsZCBkZXBlbmQgb24gYnVpbHQtaW4gZmVhdHVyZXMgaW4gbGliY3VybCBvciBmZWF0dXJlcyBwcmVzZW50IGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9yIGV2ZW4gaW4gdGhpcmQtcGFydHkgbGlicmFyaWVzIHRoYXQgY3VybCBtYXkgb3IgbWF5IG5vdCB1c2UuIAorPHAgY2xhc3M9ImxldmVsMCI+VGhlIHRlc3Qgc2NyaXB0IGNoZWNrcyBtb3N0IG9mIHRoZXNlIGJ5IGl0c2VsZiB0byBkZXRlcm1pbmUgd2hlbiBpdCBpcyBzYWZlIHRvIGF0dGVtcHQgdG8gcnVuIGVhY2ggdGVzdC4gIFRob3NlIHdoaWNoIGNhbm5vdCBiZSBydW4gZHVlIHRvIGZhaWxlZCByZXF1aXJlbWVudHMgd2lsbCBzaW1wbHkgYmUgc2tpcHBlZCBhbmQgbGlzdGVkIGF0IHRoZSBjb21wbGV0aW9uIG9mIGFsbCB0ZXN0IGNhc2VzLiAgSW4gc29tZSB1bnVzdWFsIGNvbmZpZ3VyYXRpb25zLCB0aGUgdGVzdCBzY3JpcHQgY2Fubm90IG1ha2UgdGhlIGNvcnJlY3QgZGV0ZXJtaW5hdGlvbiBmb3IgYWxsIHRlc3RzLiAgSW4gdGhlc2UgY2FzZXMsIHRoZSBwcm9ibGVtYXRpYyB0ZXN0cyBjYW4gYmUgc2tpcHBlZCB1c2luZyB0aGUgIiFrZXl3b3JkIiBza2lwIGZlYXR1cmUgZG9jdW1lbnRlZCBlYXJsaWVyLiA8YSBuYW1lPSJXUklUSU5HIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5XUklUSU5HIFRFU1RTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBzaW1wbGVzdCB3YXkgdG8gd3JpdGUgdGVzdCBjYXNlcyBpcyB0byBzdGFydCB3aXRoIGEgc2ltaWxhciBleGlzdGluZyB0ZXN0LCBzYXZlIGl0IHdpdGggYSBuZXcgbnVtYmVyIGFuZCB0aGVuIGFkanVzdCBpdCB0byBmaXQuIFRoZXJlJ3MgYW4gYXR0ZW1wdCB0byBkb2N1bWVudCB0aGUgdGVzdCBjYXNlIGZpbGUgZm9ybWF0IGluIHRoZSB0ZXN0cy9GSUxFRk9STUFULiA8cCBjbGFzcz0icm9mZml0Ij4KKyBUaGlzIEhUTUwgcGFnZSB3YXMgbWFkZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9kYW5pZWwuaGF4eC5zZS9wcm9qZWN0cy9yb2ZmaXQvIj5yb2ZmaXQ8L2E+LgorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3J1bnRlc3RzLnBkZiBiL2N1cmwtNy4yNS4wL3Rlc3RzL3J1bnRlc3RzLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDNmNGZlCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvcnVudGVzdHMucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3J1bnRlc3RzLnBsIGIvY3VybC03LjI1LjAvdGVzdHMvcnVudGVzdHMucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2VlN2Q2MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3J1bnRlc3RzLnBsCkBAIC0wLDAgKzEsNDc3NyBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgRXhwZXJpbWVudGFsIGhvb2tzIGFyZSBhdmFpbGFibGUgdG8gcnVuIHRlc3RzIHJlbW90ZWx5IG9uIG1hY2hpbmVzIHRoYXQKKyMgYXJlIGFibGUgdG8gcnVuIGN1cmwgYnV0IGFyZSB1bmFibGUgdG8gcnVuIHRoZSB0ZXN0IGhhcm5lc3MuCisjIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgbmVlZCB0byBiZSBtb2RpZmllZDoKKyMKKyMgICRIT1NUSVAsICRIT1NUNklQIC0gU2V0IHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBob3N0IHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUKKyMgICRDTElFTlRJUCwgJENMSUVOVDZJUCAtIFNldCB0byB0aGUgYWRkcmVzcyBvZiB0aGUgaG9zdCBydW5uaW5nIGN1cmwKKyMgIHJ1bmNsaWVudCwgcnVuY2xpZW50b3V0cHV0IC0gTW9kaWZ5IHRvIGNvcHkgYWxsIHRoZSBmaWxlcyBpbiB0aGUgbG9nLworIyAgICBkaXJlY3RvcnkgdG8gdGhlIHN5c3RlbSBydW5uaW5nIGN1cmwsIHJ1biB0aGUgZ2l2ZW4gY29tbWFuZCByZW1vdGVseQorIyAgICBhbmQgc2F2ZSB0aGUgcmV0dXJuIGNvZGUgb3IgcmV0dXJuZWQgc3Rkb3V0IChyZXNwZWN0aXZlbHkpLCB0aGVuCisjICAgIGNvcHkgYWxsIHRoZSBmaWxlcyBmcm9tIHRoZSByZW1vdGUgc3lzdGVtJ3MgbG9nLyBkaXJlY3RvcnkgYmFjayB0bworIyAgICB0aGUgaG9zdCBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlLiAgVGhpcyBjYW4gYmUgZG9uZSBhIGZldyB3YXlzLCBzdWNoCisjICAgIGFzIHVzaW5nIHNjcCAmIHNzaCwgcnN5bmMgJiB0ZWxuZXQsIG9yIHVzaW5nIGEgTkZTIHNoYXJlZCBkaXJlY3RvcnkKKyMgICAgYW5kIHNzaC4KKyMKKyMgJ21ha2UgJiYgbWFrZSB0ZXN0JyBuZWVkcyB0byBiZSBkb25lIG9uIGJvdGggbWFjaGluZXMgYmVmb3JlIG1ha2luZyB0aGUKKyMgYWJvdmUgY2hhbmdlcyBhbmQgcnVubmluZyBydW50ZXN0cy5wbCBtYW51YWxseS4gIEluIHRoZSBzaGFyZWQgTkZTIGNhc2UsCisjIHRoZSBjb250ZW50cyBvZiB0aGUgdGVzdHMvc2VydmVyLyBkaXJlY3RvcnkgbXVzdCBiZSBmcm9tIHRoZSBob3N0CisjIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUsIHdoaWxlIHRoZSByZXN0IG11c3QgYmUgZnJvbSB0aGUgaG9zdCBydW5uaW5nIGN1cmwuCisjCisjIE5vdGUgdGhhdCBldmVuIHdpdGggdGhlc2UgY2hhbmdlcyBhIG51bWJlciBvZiB0ZXN0cyB3aWxsIHN0aWxsIGZhaWwgKG1haW5seQorIyB0byBkbyB3aXRoIGNvb2tpZXMsIHRob3NlIHRoYXQgc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcywgb3IgdGhvc2UgdGhhdAorIyBkbyBtb3JlIHRoYW4gdG91Y2ggdGhlIGZpbGUgc3lzdGVtIGluIGEgPHByZWNoZWNrPiBvciA8cG9zdGNoZWNrPgorIyBzZWN0aW9uKS4gVGhlc2UgY2FuIGJlIGFkZGVkIHRvIHRoZSAkVEVTVENBU0VTIGxpbmUgYmVsb3csCisjIGUuZy4gJFRFU1RDQVNFUz0iITggITMxICE2MyAhY29va2llcy4uLiIKKyMKKyMgRmluYWxseSwgdG8gcHJvcGVybHkgc3VwcG9ydCAtZyBhbmQgLW4sIGNoZWNrdGVzdGNtZCBuZWVkcyB0byBjaGFuZ2UKKyMgdG8gY2hlY2sgdGhlIHJlbW90ZSBzeXN0ZW0ncyBQQVRILCBhbmQgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB3aGVyZQorIyB0aGUgY3VybCBiaW5hcnkgaXMgcmVhZCBkaXJlY3RseSB0byBkZXRlcm1pbmUgaXRzIHR5cGUgYWxzbyBuZWVkIHRvIGJlCisjIGZpeGVkLiBBcyBsb25nIGFzIHRoZSAtZyBvcHRpb24gaXMgbmV2ZXIgZ2l2ZW4sIGFuZCB0aGUgLW4gaXMgYWx3YXlzCisjIGdpdmVuLCB0aGlzIHdvbid0IGJlIGEgcHJvYmxlbS4KKworCisjIFRoZXNlIHNob3VsZCBiZSB0aGUgb25seSB2YXJpYWJsZXMgdGhhdCBtaWdodCBiZSBuZWVkZWQgdG8gZ2V0IGVkaXRlZDoKKworQkVHSU4geworICAgIEBJTkM9KEBJTkMsICRFTlZ7J3NyY2Rpcid9LCAiLiIpOworICAgICMgcnVuIHRpbWUgc3RhdGlzdGljcyBuZWVkcyBUaW1lOjpIaVJlcworICAgIGV2YWwgeworICAgICAgICBubyB3YXJuaW5ncyAiYWxsIjsKKyAgICAgICAgcmVxdWlyZSBUaW1lOjpIaVJlczsKKyAgICAgICAgaW1wb3J0ICBUaW1lOjpIaVJlcyBxdyggdGltZSApOworICAgIH0KK30KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBDd2Q7CisKKyMgU3VicyBpbXBvcnRlZCBmcm9tIHNlcnZlcmhlbHAgbW9kdWxlCit1c2Ugc2VydmVyaGVscCBxdygKKyAgICBzZXJ2ZXJmYWN0b3JzCisgICAgc2VydmVybmFtZV9pZAorICAgIHNlcnZlcm5hbWVfc3RyCisgICAgc2VydmVybmFtZV9jYW5vbgorICAgIHNlcnZlcl9waWRmaWxlbmFtZQorICAgIHNlcnZlcl9sb2dmaWxlbmFtZQorICAgICk7CisKKyMgVmFyaWFibGVzIGFuZCBzdWJzIGltcG9ydGVkIGZyb20gc3NoaGVscCBtb2R1bGUKK3VzZSBzc2hoZWxwIHF3KAorICAgICRzc2hkZXhlCisgICAgJHNzaGV4ZQorICAgICRzZnRwZXhlCisgICAgJHNzaGNvbmZpZworICAgICRzZnRwY29uZmlnCisgICAgJHNzaGRsb2cKKyAgICAkc3NobG9nCisgICAgJHNmdHBsb2cKKyAgICAkc2Z0cGNtZHMKKyAgICBkaXNwbGF5X3NzaGRjb25maWcKKyAgICBkaXNwbGF5X3NzaGNvbmZpZworICAgIGRpc3BsYXlfc2Z0cGNvbmZpZworICAgIGRpc3BsYXlfc3NoZGxvZworICAgIGRpc3BsYXlfc3NobG9nCisgICAgZGlzcGxheV9zZnRwbG9nCisgICAgZXhlX2V4dAorICAgIGZpbmRfc3NoZAorICAgIGZpbmRfc3NoCisgICAgZmluZF9zZnRwCisgICAgZmluZF9odHRwdGxzc3J2CisgICAgc3NodmVyc2lvbmluZm8KKyAgICApOworCityZXF1aXJlICJnZXRwYXJ0LnBtIjsgIyBhcnJheSBmdW5jdGlvbnMKK3JlcXVpcmUgInZhbGdyaW5kLnBtIjsgIyB2YWxncmluZCByZXBvcnQgcGFyc2VyCityZXF1aXJlICJmdHAucG0iOworCitteSAkSE9TVElQPSIxMjcuMC4wLjEiOyAgICMgYWRkcmVzcyBvbiB3aGljaCB0aGUgdGVzdCBzZXJ2ZXIgbGlzdGVucworbXkgJEhPU1Q2SVA9Ils6OjFdIjsgICAgICAjIGFkZHJlc3Mgb24gd2hpY2ggdGhlIHRlc3Qgc2VydmVyIGxpc3RlbnMKK215ICRDTElFTlRJUD0iMTI3LjAuMC4xIjsgIyBhZGRyZXNzIHdoaWNoIGN1cmwgdXNlcyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMKK215ICRDTElFTlQ2SVA9Ils6OjFdIjsgICAgIyBhZGRyZXNzIHdoaWNoIGN1cmwgdXNlcyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMKKworbXkgJGJhc2UgPSA4OTkwOyAjIGJhc2UgcG9ydCBudW1iZXIKKworbXkgJEhUVFBQT1JUOyAgICAgICAgICAgICMgSFRUUCBzZXJ2ZXIgcG9ydAorbXkgJEhUVFA2UE9SVDsgICAgICAgICAgICMgSFRUUCBJUHY2IHNlcnZlciBwb3J0CitteSAkSFRUUFNQT1JUOyAgICAgICAgICAgIyBIVFRQUyAoc3R1bm5lbCkgc2VydmVyIHBvcnQKK215ICRGVFBQT1JUOyAgICAgICAgICAgICAjIEZUUCBzZXJ2ZXIgcG9ydAorbXkgJEZUUDJQT1JUOyAgICAgICAgICAgICMgRlRQIHNlcnZlciAyIHBvcnQKK215ICRGVFBTUE9SVDsgICAgICAgICAgICAjIEZUUFMgKHN0dW5uZWwpIHNlcnZlciBwb3J0CitteSAkRlRQNlBPUlQ7ICAgICAgICAgICAgIyBGVFAgSVB2NiBzZXJ2ZXIgcG9ydAorbXkgJFRGVFBQT1JUOyAgICAgICAgICAgICMgVEZUUAorbXkgJFRGVFA2UE9SVDsgICAgICAgICAgICMgVEZUUAorbXkgJFNTSFBPUlQ7ICAgICAgICAgICAgICMgU0NQL1NGVFAKK215ICRTT0NLU1BPUlQ7ICAgICAgICAgICAjIFNPQ0tTNC81IHBvcnQKK215ICRQT1AzUE9SVDsgICAgICAgICAgICAjIFBPUDMKK215ICRQT1AzNlBPUlQ7ICAgICAgICAgICAjIFBPUDMgSVB2NiBzZXJ2ZXIgcG9ydAorbXkgJElNQVBQT1JUOyAgICAgICAgICAgICMgSU1BUAorbXkgJElNQVA2UE9SVDsgICAgICAgICAgICMgSU1BUCBJUHY2IHNlcnZlciBwb3J0CitteSAkU01UUFBPUlQ7ICAgICAgICAgICAgIyBTTVRQCitteSAkU01UUDZQT1JUOyAgICAgICAgICAgIyBTTVRQIElQdjYgc2VydmVyIHBvcnQKK215ICRSVFNQUE9SVDsgICAgICAgICAgICAjIFJUU1AKK215ICRSVFNQNlBPUlQ7ICAgICAgICAgICAjIFJUU1AgSVB2NiBzZXJ2ZXIgcG9ydAorbXkgJEdPUEhFUlBPUlQ7ICAgICAgICAgICMgR29waGVyCitteSAkR09QSEVSNlBPUlQ7ICAgICAgICAgIyBHb3BoZXIgSVB2NiBzZXJ2ZXIgcG9ydAorbXkgJEhUVFBUTFNQT1JUOyAgICAgICAgICMgSFRUUCBUTFMgKG5vbi1zdHVubmVsKSBzZXJ2ZXIgcG9ydAorbXkgJEhUVFBUTFM2UE9SVDsgICAgICAgICMgSFRUUCBUTFMgKG5vbi1zdHVubmVsKSBJUHY2IHNlcnZlciBwb3J0CitteSAkSFRUUFBST1hZUE9SVDsgICAgICAgIyBIVFRQIHByb3h5IHBvcnQsIHdoZW4gdXNpbmcgQ09OTkVDVAorCitteSAkc3JjZGlyID0gJEVOVnsnc3JjZGlyJ30gfHwgJy4nOworbXkgJENVUkw9Ii4uL3NyYy9jdXJsIi5leGVfZXh0KCk7ICMgd2hhdCBjdXJsIGV4ZWN1dGFibGUgdG8gcnVuIG9uIHRoZSB0ZXN0cworbXkgJFZDVVJMPSRDVVJMOyAgICMgd2hhdCBjdXJsIGJpbmFyeSB0byB1c2UgdG8gdmVyaWZ5IHRoZSBzZXJ2ZXJzIHdpdGgKKyAgICAgICAgICAgICAgICAgICAjIFZDVVJMIGlzIGhhbmR5IHRvIHNldCB0byB0aGUgc3lzdGVtIG9uZSB3aGVuIHRoZSBvbmUgeW91CisgICAgICAgICAgICAgICAgICAgIyBqdXN0IGJ1aWx0IGhhbmdzIG9yIGNyYXNoZXMgYW5kIHRodXMgcHJldmVudCB2ZXJpZmljYXRpb24KK215ICREQkdDVVJMPSRDVVJMOyAjIi4uL3NyYy8ubGlicy9jdXJsIjsgICMgYWx0ZXJuYXRpdmUgZm9yIGRlYnVnZ2luZworbXkgJExPR0RJUj0ibG9nIjsKK215ICRURVNURElSPSIkc3JjZGlyL2RhdGEiOworbXkgJExJQkRJUj0iLi9saWJ0ZXN0IjsKK215ICRVTklURElSPSIuL3VuaXQiOworIyBUT0RPOiBjaGFuZ2UgdGhpcyB0byB1c2Ugc2VydmVyX2lucHV0ZmlsZW5hbWUoKQorbXkgJFNFUlZFUklOPSIkTE9HRElSL3NlcnZlci5pbnB1dCI7ICMgd2hhdCBjdXJsIHNlbnQgdGhlIHNlcnZlcgorbXkgJFNFUlZFUjJJTj0iJExPR0RJUi9zZXJ2ZXIyLmlucHV0IjsgIyB3aGF0IGN1cmwgc2VudCB0aGUgc2Vjb25kIHNlcnZlcgorbXkgJFBST1hZSU49IiRMT0dESVIvcHJveHkuaW5wdXQiOyAjIHdoYXQgY3VybCBzZW50IHRoZSBwcm94eQorbXkgJENVUkxMT0c9IiRMT0dESVIvY3VybC5sb2ciOyAjIGFsbCBjb21tYW5kIGxpbmVzIHJ1bgorbXkgJEZUUERDTUQ9IiRMT0dESVIvZnRwc2VydmVyLmNtZCI7ICMgY29weSBmdHAgc2VydmVyIGluc3RydWN0aW9ucyBoZXJlCitteSAkU0VSVkVSTE9HU19MT0NLPSIkTE9HRElSL3NlcnZlcmxvZ3MubG9jayI7ICMgc2VydmVyIGxvZ3MgYWR2aXNvciByZWFkIGxvY2sKK215ICRDVVJMQ09ORklHPSIuLi9jdXJsLWNvbmZpZyI7ICMgY3VybC1jb25maWcgZnJvbSBjdXJyZW50IGJ1aWxkCisKKyMgTm9ybWFsbHksIGFsbCB0ZXN0IGNhc2VzIHNob3VsZCBiZSBydW4sIGJ1dCBhdCB0aW1lcyBpdCBpcyBoYW5keSB0bworIyBzaW1wbHkgcnVuIGEgcGFydGljdWxhciBvbmU6CitteSAkVEVTVENBU0VTPSJhbGwiOworCisjIFRvIHJ1biBzcGVjaWZpYyB0ZXN0IGNhc2VzLCBzZXQgdGhlbSBsaWtlOgorIyAkVEVTVENBU0VTPSIxIDIgMyA3IDgiOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBObyB2YXJpYWJsZXMgYmVsb3cgdGhpcyBwb2ludCBzaG91bGQgbmVlZCB0byBiZSBtb2RpZmllZAorIworCisjIGludm9rZSBwZXJsIGxpa2UgdGhpczoKK215ICRwZXJsPSJwZXJsIC1JJHNyY2RpciI7CitteSAkc2VydmVyX3Jlc3BvbnNlX21heHRpbWU9MTM7CisKK215ICRkZWJ1Z19idWlsZD0wOyAjIGN1cmwgYnVpbHQgd2l0aCAtLWVuYWJsZS1kZWJ1ZworbXkgJGN1cmxfZGVidWc9MDsgICMgY3VybCBidWlsdCB3aXRoIC0tZW5hYmxlLWN1cmxkZWJ1ZyAobWVtb3J5IHRyYWNraW5nKQorbXkgJGxpYnRvb2w7CisKKyMgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IHRoZSBtZW1vcnkgZGVidWdnaW5nIGNyZWF0ZXM6CitteSAkbWVtZHVtcD0iJExPR0RJUi9tZW1kdW1wIjsKKworIyB0aGUgcGF0aCB0byB0aGUgc2NyaXB0IHRoYXQgYW5hbHl6ZXMgdGhlIG1lbW9yeSBkZWJ1ZyBvdXRwdXQgZmlsZToKK215ICRtZW1hbmFseXplPSIkcGVybCAkc3JjZGlyL21lbWFuYWx5emUucGwiOworCitteSAkcHdkID0gZ2V0Y3dkKCk7ICAgICAgICAgICMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorCitteSAkc3RhcnQ7CitteSAkZm9ya3NlcnZlcj0wOworbXkgJGZ0cGNoZWNrdGltZT0xOyAjIHRpbWUgaXQgdG9vayB0byB2ZXJpZnkgb3VyIHRlc3QgRlRQIHNlcnZlcgorCitteSAkc3R1bm5lbCA9IGNoZWNrY21kKCJzdHVubmVsNCIpIHx8IGNoZWNrY21kKCJzdHVubmVsIik7CitteSAkdmFsZ3JpbmQgPSBjaGVja3Rlc3RjbWQoInZhbGdyaW5kIik7CitteSAkdmFsZ3JpbmRfbG9nZmlsZT0iLS1sb2dmaWxlIjsKK215ICR2YWxncmluZF90b29sOworbXkgJGdkYiA9IGNoZWNrdGVzdGNtZCgiZ2RiIik7CitteSAkaHR0cHRsc3NydiA9IGZpbmRfaHR0cHRsc3NydigpOworCitteSAkc3NsX3ZlcnNpb247ICMgc2V0IGlmIGxpYmN1cmwgaXMgYnVpbHQgd2l0aCBTU0wgc3VwcG9ydAorbXkgJGxhcmdlX2ZpbGU7ICAjIHNldCBpZiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGggbGFyZ2UgZmlsZSBzdXBwb3J0CitteSAkaGFzX2lkbjsgICAgICMgc2V0IGlmIGxpYmN1cmwgaXMgYnVpbHQgd2l0aCBJRE4gc3VwcG9ydAorbXkgJGh0dHBfaXB2NjsgICAjIHNldCBpZiBIVFRQIHNlcnZlciBoYXMgSVB2NiBzdXBwb3J0CitteSAkZnRwX2lwdjY7ICAgICMgc2V0IGlmIEZUUCBzZXJ2ZXIgaGFzIElQdjYgc3VwcG9ydAorbXkgJHRmdHBfaXB2NjsgICAjIHNldCBpZiBURlRQIHNlcnZlciBoYXMgSVB2NiBzdXBwb3J0CitteSAkZ29waGVyX2lwdjY7ICMgc2V0IGlmIEdvcGhlciBzZXJ2ZXIgaGFzIElQdjYgc3VwcG9ydAorbXkgJGhhc19pcHY2OyAgICAjIHNldCBpZiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGggSVB2NiBzdXBwb3J0CitteSAkaGFzX2xpYno7ICAgICMgc2V0IGlmIGxpYmN1cmwgaXMgYnVpbHQgd2l0aCBsaWJ6IHN1cHBvcnQKK215ICRoYXNfZ2V0cmxpbWl0OyAgIyBzZXQgaWYgc3lzdGVtIGhhcyBnZXRybGltaXQoKQorbXkgJGhhc19udGxtOyAgICAjIHNldCBpZiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGggTlRMTSBzdXBwb3J0CitteSAkaGFzX250bG1fd2I7ICMgc2V0IGlmIGxpYmN1cmwgaXMgYnVpbHQgd2l0aCBOVExNIGRlbGVnYXRpb24gdG8gd2luYmluZAorbXkgJGhhc19jaGFyY29udjsjIHNldCBpZiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGggQ2hhckNvbnYgc3VwcG9ydAorbXkgJGhhc190bHNfc3JwOyAjIHNldCBpZiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGggVExTLVNSUCBzdXBwb3J0CisKK215ICRoYXNfb3BlbnNzbDsgIyBidWlsdCB3aXRoIGEgbGliIHVzaW5nIGFuIE9wZW5TU0wtbGlrZSBBUEkKK215ICRoYXNfZ251dGxzOyAgIyBidWlsdCB3aXRoIEdudVRMUworbXkgJGhhc19uc3M7ICAgICAjIGJ1aWx0IHdpdGggTlNTCitteSAkaGFzX3lhc3NsOyAgICMgYnVpbHQgd2l0aCB5YXNzbAorbXkgJGhhc19wb2xhcnNzbDsjIGJ1aWx0IHdpdGggcG9sYXJzc2wKK215ICRoYXNfYXh0bHM7ICAgIyBidWlsdCB3aXRoIGF4VExTCisKK215ICRoYXNfc2hhcmVkID0gInVua25vd24iOyAgIyBidWlsdCBzaGFyZWQKKworbXkgJHNzbGxpYjsgICAgICAjIG5hbWUgb2YgdGhlIGxpYiB3ZSB1c2UgKGZvciBodW1hbiBwcmVzZW50YXRpb24pCitteSAkaGFzX2NyeXB0bzsgICMgc2V0IGlmIGxpYmN1cmwgaXMgYnVpbHQgd2l0aCBjcnlwdG9ncmFwaGljIHN1cHBvcnQKK215ICRoYXNfdGV4dGF3YXJlOyAjIHNldCBpZiBydW5uaW5nIG9uIGEgc3lzdGVtIHRoYXQgaGFzIGEgdGV4dCBtb2RlIGNvbmNlcHQKKyAgIyBvbiBmaWxlcy4gV2luZG93cyBmb3IgZXhhbXBsZQorCitteSBAcHJvdG9jb2xzOyAgICMgYXJyYXkgb2YgbG93ZXJjYXNlIHN1cHBvcnRlZCBwcm90b2NvbCBzZXJ2ZXJzCisKK215ICRza2lwcGVkPTA7ICAjIG51bWJlciBvZiB0ZXN0cyBza2lwcGVkOyByZXBvcnRlZCBpbiBtYWluIGxvb3AKK215ICVza2lwcGVkOyAgICAjIHNraXBwZWR7cmVhc29ufT1jb3VudGVyLCByZWFzb25zIGZvciBza2lwCitteSBAdGVzdHN0YXQ7ICAgIyB0ZXN0c3RhdFt0ZXN0bnVtXT1yZWFzb24sIHJlYXNvbnMgZm9yIHNraXAKK215ICVkaXNhYmxlZF9rZXl3b3JkczsgICMga2V5IHdvcmRzIG9mIHRlc3RzIHRvIHNraXAKK215ICVlbmFibGVkX2tleXdvcmRzOyAgICMga2V5IHdvcmRzIG9mIHRlc3RzIHRvIHJ1bgorbXkgJWRpc2FibGVkOyAgICAgICAgICAgIyBkaXNhYmxlZCB0ZXN0IGNhc2VzCisKK215ICRzc2hkaWQ7ICAgICAgIyBmb3Igc29ja3Mgc2VydmVyLCBzc2ggZGFlbW9uIHZlcnNpb24gaWQKK215ICRzc2hkdmVybnVtOyAgIyBmb3Igc29ja3Mgc2VydmVyLCBzc2ggZGFlbW9uIHZlcnNpb24gbnVtYmVyCitteSAkc3NoZHZlcnN0cjsgICMgZm9yIHNvY2tzIHNlcnZlciwgc3NoIGRhZW1vbiB2ZXJzaW9uIHN0cmluZworbXkgJHNzaGRlcnJvcjsgICAjIGZvciBzb2NrcyBzZXJ2ZXIsIHNzaCBkYWVtb24gdmVyc2lvbiBlcnJvcgorCitteSAkZGVmc2VydmVybG9nc2xvY2t0aW1lb3V0ID0gMjA7ICMgdGltZW91dCB0byBhd2FpdCBzZXJ2ZXIgbG9ncyBsb2NrIHJlbW92YWwKK215ICRkZWZwb3N0Y29tbWFuZGRlbGF5ID0gMDsgIyBkZWxheSBiZXR3ZWVuIGNvbW1hbmQgYW5kIHBvc3RjaGVjayBzZWN0aW9ucworCitteSAkdGltZXN0YXRzOyAgICMgdGltZSBzdGFtcGluZyBhbmQgc3RhdHMgZ2VuZXJhdGlvbgorbXkgJGZ1bGxzdGF0czsgICAjIHNob3cgdGltZSBzdGF0cyBmb3IgZXZlcnkgc2luZ2xlIHRlc3QKK215ICV0aW1lcHJlcGluaTsgIyB0aW1lc3RhbXAgZm9yIGVhY2ggdGVzdCBwcmVwYXJhdGlvbiBzdGFydAorbXkgJXRpbWVzcnZyaW5pOyAjIHRpbWVzdGFtcCBmb3IgZWFjaCB0ZXN0IHJlcXVpcmVkIHNlcnZlcnMgdmVyaWZpY2F0aW9uIHN0YXJ0CitteSAldGltZXNydnJlbmQ7ICMgdGltZXN0YW1wIGZvciBlYWNoIHRlc3QgcmVxdWlyZWQgc2VydmVycyB2ZXJpZmljYXRpb24gZW5kCitteSAldGltZXRvb2xpbmk7ICMgdGltZXN0YW1wIGZvciBlYWNoIHRlc3QgY29tbWFuZCBydW4gc3RhcnRpbmcKK215ICV0aW1ldG9vbGVuZDsgIyB0aW1lc3RhbXAgZm9yIGVhY2ggdGVzdCBjb21tYW5kIHJ1biBzdG9wcGluZworbXkgJXRpbWVzcnZybG9nOyAjIHRpbWVzdGFtcCBmb3IgZWFjaCB0ZXN0IHNlcnZlciBsb2dzIGxvY2sgcmVtb3ZhbAorbXkgJXRpbWV2cmZ5ZW5kOyAjIHRpbWVzdGFtcCBmb3IgZWFjaCB0ZXN0IHJlc3VsdCB2ZXJpZmljYXRpb24gZW5kCisKK215ICR0ZXN0bnVtY2hlY2s7ICMgdGVzdCBudW1iZXIsIHNldCBpbiBzaW5nbGV0ZXN0IHN1Yi4KK215ICVvbGRlbnY7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHZhcmlhYmxlcyB0aGF0IGNvbW1hbmQgbGluZSBvcHRpb25zIG1heSBzZXQKKyMKKworbXkgJHNob3J0OworbXkgJHZlcmJvc2U7CitteSAkZGVidWdwcm90b2NvbDsKK215ICRhbnl3YXk7CitteSAkZ2RidGhpczsgICAgICAjIHJ1biB0ZXN0IGNhc2Ugd2l0aCBnZGIgZGVidWdnZXIKK215ICRnZGJ4d2luOyAgICAgICMgdXNlIHdpbmRvd2VkIGdkYiB3aGVuIHVzaW5nIGdkYgorbXkgJGtlZXBvdXRmaWxlczsgIyBrZWVwIHN0ZG91dCBhbmQgc3RkZXJyIGZpbGVzIGFmdGVyIHRlc3RzCitteSAkbGlzdG9ubHk7ICAgICAjIG9ubHkgbGlzdCB0aGUgdGVzdHMKK215ICRwb3N0bW9ydGVtOyAgICMgZGlzcGxheSBkZXRhaWxlZCBpbmZvIGFib3V0IGZhaWxlZCB0ZXN0cworCitteSAlcnVuOyAgICAgICAgICAjIHJ1bm5pbmcgc2VydmVyCitteSAlZG9lc250cnVuOyAgICAjIHNlcnZlcnMgdGhhdCBkb24ndCB3b3JrLCBpZGVudGlmaWVkIGJ5IHBpZGZpbGUKK215ICVzZXJ2ZXJwaWRmaWxlOyMgYWxsIHNlcnZlciBwaWQgZmlsZSBuYW1lcywgaWRlbnRpZmllZCBieSBzZXJ2ZXIgaWQKK215ICVydW5jZXJ0OyAgICAgICMgY2VydCBmaWxlIGN1cnJlbnRseSBpbiB1c2UgYnkgYW4gc3NsIHJ1bm5pbmcgc2VydmVyCisKKyMgdG9ydHVyZSB0ZXN0IHZhcmlhYmxlcworbXkgJHRvcnR1cmU7CitteSAkdG9ydG51bTsKK215ICR0b3J0YWxsb2M7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxvZ21zZyBpcyBvdXIgZ2VuZXJhbCBtZXNzYWdlIGxvZ2dpbmcgc3Vicm91dGluZS4KKyMKK3N1YiBsb2dtc2cgeworICAgIGZvcihAXykgeworICAgICAgICBwcmludCAiJF8iOworICAgIH0KK30KKworIyBnZXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdXNlcgorbXkgJFVTRVIgPSAkRU5We1VTRVJ9OyAgICAgICAgICAjIExpbnV4CitpZiAoISRVU0VSKSB7CisgICAgJFVTRVIgPSAkRU5We1VTRVJOQU1FfTsgICAgICMgV2luZG93cworICAgIGlmICghJFVTRVIpIHsKKyAgICAgICAgJFVTRVIgPSAkRU5We0xPR05BTUV9OyAgIyBTb21lIFVOSVggKEkgdGhpbmspCisgICAgfQorfQorCisjIGVuYWJsZSBtZW1vcnkgZGVidWdnaW5nIGlmIGN1cmwgaXMgY29tcGlsZWQgd2l0aCBpdAorJEVOVnsnQ1VSTF9NRU1ERUJVRyd9ID0gJG1lbWR1bXA7CiskRU5WeydIT01FJ309JHB3ZDsKKworc3ViIGNhdGNoX3phcCB7CisgICAgbXkgJHNpZ25hbWUgPSBzaGlmdDsKKyAgICBsb2dtc2cgInJ1bnRlc3RzLnBsIHJlY2VpdmVkIFNJRyRzaWduYW1lLCBleGl0aW5nXG4iOworICAgIHN0b3BzZXJ2ZXJzKCR2ZXJib3NlKTsKKyAgICBkaWUgIlNvbWVib2R5IHNlbnQgbWUgYSBTSUckc2lnbmFtZSI7Cit9CiskU0lHe0lOVH0gPSBcJmNhdGNoX3phcDsKKyRTSUd7VEVSTX0gPSBcJmNhdGNoX3phcDsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2xlYXIgYWxsIHBvc3NpYmxlICcqX3Byb3h5JyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHZhcmlvdXMgcHJvdG9jb2xzCisjIHRvIHByZXZlbnQgdGhlbSB0byBpbnRlcmZlcmUgd2l0aCBvdXIgdGVzdGluZyEKKworbXkgJHByb3RvY29sOworZm9yZWFjaCAkcHJvdG9jb2wgKCgnZnRwJywgJ2h0dHAnLCAnZnRwcycsICdodHRwcycsICdubycsICdhbGwnKSkgeworICAgIG15ICRwcm94eSA9ICIke3Byb3RvY29sfV9wcm94eSI7CisgICAgIyBjbGVhciBsb3dlcmNhc2UgdmVyc2lvbgorICAgIGRlbGV0ZSAkRU5WeyRwcm94eX0gaWYoJEVOVnskcHJveHl9KTsKKyAgICAjIGNsZWFyIHVwcGVyY2FzZSB2ZXJzaW9uCisgICAgZGVsZXRlICRFTlZ7dWMoJHByb3h5KX0gaWYoJEVOVnt1YygkcHJveHkpfSk7Cit9CisKKyMgbWFrZSBzdXJlIHdlIGRvbid0IGdldCBhZmZlY3RlZCBieSBvdGhlciB2YXJpYWJsZXMgdGhhdCBjb250cm9sIG91cgorIyBiZWhhdmlvdXIKKworZGVsZXRlICRFTlZ7J1NTTF9DRVJUX0RJUid9IGlmKCRFTlZ7J1NTTF9DRVJUX0RJUid9KTsKK2RlbGV0ZSAkRU5WeydTU0xfQ0VSVF9QQVRIJ30gaWYoJEVOVnsnU1NMX0NFUlRfUEFUSCd9KTsKK2RlbGV0ZSAkRU5WeydDVVJMX0NBX0JVTkRMRSd9IGlmKCRFTlZ7J0NVUkxfQ0FfQlVORExFJ30pOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMb2FkIHNlcnZlcnBpZGZpbGUgaGFzaCB3aXRoIHBpZGZpbGUgbmFtZXMgZm9yIGFsbCBwb3NzaWJsZSBzZXJ2ZXJzLgorIworc3ViIGluaXRfc2VydmVycGlkZmlsZV9oYXNoIHsKKyAgZm9yIG15ICRwcm90byAoKCdmdHAnLCAnaHR0cCcsICdpbWFwJywgJ3BvcDMnLCAnc210cCcpKSB7CisgICAgZm9yIG15ICRzc2wgKCgnJywgJ3MnKSkgeworICAgICAgZm9yIG15ICRpcHZudW0gKCg0LCA2KSkgeworICAgICAgICBmb3IgbXkgJGlkbnVtICgoMSwgMikpIHsKKyAgICAgICAgICBteSAkc2VydiA9IHNlcnZlcm5hbWVfaWQoIiRwcm90byRzc2wiLCAkaXB2bnVtLCAkaWRudW0pOworICAgICAgICAgIG15ICRwaWRmID0gc2VydmVyX3BpZGZpbGVuYW1lKCIkcHJvdG8kc3NsIiwgJGlwdm51bSwgJGlkbnVtKTsKKyAgICAgICAgICAkc2VydmVycGlkZmlsZXskc2Vydn0gPSAkcGlkZjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBmb3IgbXkgJHByb3RvICgoJ3RmdHAnLCAnc2Z0cCcsICdzb2NrcycsICdzc2gnLCAncnRzcCcsICdnb3BoZXInLCAnaHR0cHRscycpKSB7CisgICAgZm9yIG15ICRpcHZudW0gKCg0LCA2KSkgeworICAgICAgZm9yIG15ICRpZG51bSAoKDEsIDIpKSB7CisgICAgICAgIG15ICRzZXJ2ID0gc2VydmVybmFtZV9pZCgkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisgICAgICAgIG15ICRwaWRmID0gc2VydmVyX3BpZGZpbGVuYW1lKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKyAgICAgICAgJHNlcnZlcnBpZGZpbGV7JHNlcnZ9ID0gJHBpZGY7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENoZWNrIGlmIGEgZ2l2ZW4gY2hpbGQgcHJvY2VzcyBoYXMganVzdCBkaWVkLiBSZWFwcyBpdCBpZiBzby4KKyMKK3N1YiBjaGVja2RpZWQgeworICAgIHVzZSBQT1NJWCAiOnN5c193YWl0X2giOworICAgIG15ICRwaWQgPSAkX1swXTsKKyAgICBpZihub3QgZGVmaW5lZCAkcGlkIHx8ICRwaWQgPD0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgbXkgJHJjID0gd2FpdHBpZCgkcGlkLCAmV05PSEFORyk7CisgICAgcmV0dXJuICgkcmMgPT0gJHBpZCk/MTowOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTdGFydCBhIG5ldyB0aHJlYWQvcHJvY2VzcyBhbmQgcnVuIHRoZSBnaXZlbiBjb21tYW5kIGxpbmUgaW4gdGhlcmUuCisjIFJldHVybiB0aGUgcGlkcyAoeWVzIHBsdXJhbCkgb2YgdGhlIG5ldyBjaGlsZCBwcm9jZXNzIHRvIHRoZSBwYXJlbnQuCisjCitzdWIgc3RhcnRuZXcgeworICAgIG15ICgkY21kLCAkcGlkZmlsZSwgJHRpbWVvdXQsICRmYWtlKT1AXzsKKworICAgIGxvZ21zZyAic3RhcnRuZXc6ICRjbWRcbiIgaWYgKCR2ZXJib3NlKTsKKworICAgIG15ICRjaGlsZCA9IGZvcmsoKTsKKyAgICBteSAkcGlkMiA9IDA7CisKKyAgICBpZihub3QgZGVmaW5lZCAkY2hpbGQpIHsKKyAgICAgICAgbG9nbXNnICJzdGFydG5ldzogZm9yaygpIGZhaWx1cmUgZGV0ZWN0ZWRcbiI7CisgICAgICAgIHJldHVybiAoLTEsLTEpOworICAgIH0KKworICAgIGlmKDAgPT0gJGNoaWxkKSB7CisgICAgICAgICMgSGVyZSB3ZSBhcmUgdGhlIGNoaWxkLiBSdW4gdGhlIGdpdmVuIGNvbW1hbmQuCisKKyAgICAgICAgIyBQdXQgYW4gImV4ZWMiIGluIGZyb250IG9mIHRoZSBjb21tYW5kIHNvIHRoYXQgdGhlIGNoaWxkIHByb2Nlc3MKKyAgICAgICAgIyBrZWVwcyB0aGlzIGNoaWxkJ3MgcHJvY2VzcyBJRC4KKyAgICAgICAgZXhlYygiZXhlYyAkY21kIikgfHwgZGllICJDYW4ndCBleGVjKCkgJGNtZDogJCEiOworCisgICAgICAgICMgZXhlYygpIHNob3VsZCBuZXZlciByZXR1cm4gYmFjayBoZXJlIHRvIHRoaXMgcHJvY2Vzcy4gV2UgcHJvdGVjdAorICAgICAgICAjIG91cnNlbHZlcyBieSBjYWxsaW5nIGRpZSgpIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyByZWFsbHkgYmFkLgorICAgICAgICBkaWUgImVycm9yOiBleGVjKCkgaGFzIHJldHVybmVkIjsKKyAgICB9CisKKyAgICAjIFVnbHkgaGFjayBidXQgc3NoIGNsaWVudCBhbmQgZ251dGxzLXNlcnYgZG9uJ3Qgc3VwcG9ydCBwaWQgZmlsZXMKKyAgICBpZiAoJGZha2UpIHsKKyAgICAgICAgaWYob3BlbihPVVQsICI+JHBpZGZpbGUiKSkgeworICAgICAgICAgICAgcHJpbnQgT1VUICRjaGlsZCAuICJcbiI7CisgICAgICAgICAgICBjbG9zZShPVVQpOworICAgICAgICAgICAgbG9nbXNnICJzdGFydG5ldzogJHBpZGZpbGUgZmFrZWQgd2l0aCBwaWQ9JGNoaWxkXG4iIGlmKCR2ZXJib3NlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxvZ21zZyAic3RhcnRuZXc6IGZhaWxlZCB0byB3cml0ZSBmYWtlICRwaWRmaWxlIHdpdGggcGlkPSRjaGlsZFxuIjsKKyAgICAgICAgfQorICAgICAgICAjIGNvdWxkL3Nob3VsZCBkbyBhIHdoaWxlIGNvbm5lY3QgZmFpbHMgc2xlZXAgYSBiaXQgYW5kIGxvb3AKKyAgICAgICAgc2xlZXAgJHRpbWVvdXQ7CisgICAgICAgIGlmIChjaGVja2RpZWQoJGNoaWxkKSkgeworICAgICAgICAgICAgbG9nbXNnICJzdGFydG5ldzogY2hpbGQgcHJvY2VzcyBoYXMgZmFpbGVkIHRvIHN0YXJ0XG4iIGlmKCR2ZXJib3NlKTsKKyAgICAgICAgICAgIHJldHVybiAoLTEsLTEpOworICAgICAgICB9CisgICAgfQorCisgICAgbXkgJGNvdW50ID0gJHRpbWVvdXQ7CisgICAgd2hpbGUoJGNvdW50LS0pIHsKKyAgICAgICAgaWYoLWYgJHBpZGZpbGUgJiYgLXMgJHBpZGZpbGUgJiYgb3BlbihQSUQsICI8JHBpZGZpbGUiKSkgeworICAgICAgICAgICAgJHBpZDIgPSAwICsgPFBJRD47CisgICAgICAgICAgICBjbG9zZShQSUQpOworICAgICAgICAgICAgaWYoKCRwaWQyID4gMCkgJiYga2lsbCgwLCAkcGlkMikpIHsKKyAgICAgICAgICAgICAgICAjIGlmICRwaWQyIGlzIHZhbGlkLCB0aGVuIG1ha2Ugc3VyZSB0aGlzIHBpZCBpcyBhbGl2ZSwgYXMKKyAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBpdCBpcyBqdXN0IGxpa2VseSB0byBiZSB0aGUgX3ByZXZpb3VzXyBwaWRmaWxlIG9yCisgICAgICAgICAgICAgICAgIyBzaW1pbGFyIQorICAgICAgICAgICAgICAgIGxhc3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjIGludmFsaWRhdGUgJHBpZDIgaWYgbm90IGFjdHVhbGx5IGFsaXZlCisgICAgICAgICAgICAkcGlkMiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoZWNrZGllZCgkY2hpbGQpKSB7CisgICAgICAgICAgICBsb2dtc2cgInN0YXJ0bmV3OiBjaGlsZCBwcm9jZXNzIGhhcyBkaWVkLCBzZXJ2ZXIgbWlnaHQgc3RhcnQgdXBcbiIKKyAgICAgICAgICAgICAgICBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICAjIFdlIGNhbid0IGp1c3QgYWJvcnQgd2FpdGluZyBmb3IgdGhlIHNlcnZlciB3aXRoIGEKKyAgICAgICAgICAgICMgcmV0dXJuICgtMSwtMSk7CisgICAgICAgICAgICAjIGJlY2F1c2UgdGhlIHNlcnZlciBtaWdodCBoYXZlIGZvcmtlZCBhbmQgY291bGQgc3RpbGwgc3RhcnQKKyAgICAgICAgICAgICMgdXAgbm9ybWFsbHkuIEluc3RlYWQsIGp1c3QgcmVkdWNlIHRoZSBhbW91bnQgb2YgdGltZSB3ZSByZW1haW4KKyAgICAgICAgICAgICMgd2FpdGluZy4KKyAgICAgICAgICAgICRjb3VudCA+Pj0gMjsKKyAgICAgICAgfQorICAgICAgICBzbGVlcCgxKTsKKyAgICB9CisKKyAgICAjIFJldHVybiB0d28gUElEcywgdGhlIG9uZSBmb3IgdGhlIGNoaWxkIHByb2Nlc3Mgd2Ugc3Bhd25lZCBhbmQgdGhlIG9uZQorICAgICMgcmVwb3J0ZWQgYnkgdGhlIHNlcnZlciBpdHNlbGYgKGluIGNhc2UgaXQgZm9ya2VkIGFnYWluIG9uIGl0cyBvd24pLgorICAgICMgQm90aCAocG90ZW50aWFsbHkpIG5lZWQgdG8gYmUga2lsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3QuCisgICAgcmV0dXJuICgkY2hpbGQsICRwaWQyKTsKK30KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDaGVjayBmb3IgYSBjb21tYW5kIGluIHRoZSBQQVRIIG9mIHRoZSB0ZXN0IHNlcnZlci4KKyMKK3N1YiBjaGVja2NtZCB7CisgICAgbXkgKCRjbWQpPUBfOworICAgIG15IEBwYXRocz0oc3BsaXQoIjoiLCAkRU5WeydQQVRIJ30pLCAiL3Vzci9zYmluIiwgIi91c3IvbG9jYWwvc2JpbiIsCisgICAgICAgICAgICAgICAiL3NiaW4iLCAiL3Vzci9iaW4iLCAiL3Vzci9sb2NhbC9iaW4iLAorICAgICAgICAgICAgICAgIi4vbGlidGVzdC8ubGlicyIsICIuL2xpYnRlc3QiKTsKKyAgICBmb3IoQHBhdGhzKSB7CisgICAgICAgIGlmKCAteCAiJF8vJGNtZCIgJiYgISAtZCAiJF8vJGNtZCIpIHsKKyAgICAgICAgICAgICMgZXhlY3V0YWJsZSBiaXQgYnV0IG5vdCBhIGRpcmVjdG9yeSEKKyAgICAgICAgICAgIHJldHVybiAiJF8vJGNtZCI7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdldCB0aGUgbGlzdCBvZiB0ZXN0cyB0aGF0IHRoZSB0ZXN0cy9kYXRhL01ha2VmaWxlLmFtIGtub3dzIGFib3V0IQorIworbXkgJGRpc3R0ZXN0czsKK3N1YiBnZXRfZGlzdHRlc3RzIHsKKyAgICBteSBAZGlzdCA9IGBjZCBkYXRhICYmIG1ha2Ugc2hvd2A7CisgICAgJGRpc3R0ZXN0cyA9IGpvaW4oIiIsIEBkaXN0KTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hlY2sgZm9yIGEgY29tbWFuZCBpbiB0aGUgUEFUSCBvZiB0aGUgbWFjaGluZSBydW5uaW5nIGN1cmwuCisjCitzdWIgY2hlY2t0ZXN0Y21kIHsKKyAgICBteSAoJGNtZCk9QF87CisgICAgcmV0dXJuIGNoZWNrY21kKCRjbWQpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBSdW4gdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QgYW5kIHJldHVybiBpdHMgcmV0dXJuIGNvZGUKKyMKK3N1YiBydW5jbGllbnQgeworICAgIG15ICgkY21kKT1AXzsKKyAgICByZXR1cm4gc3lzdGVtKCRjbWQpOworCisjIFRoaXMgaXMgb25lIHdheSB0byB0ZXN0IGN1cmwgb24gYSByZW1vdGUgbWFjaGluZQorIyAgICBteSAkb3V0ID0gc3lzdGVtKCJzc2ggJENMSUVOVElQIGNkIFwnJHB3ZFwnIFxcOyBcJyRjbWRcJyIpOworIyAgICBzbGVlcCAyOyAgICAjIHRpbWUgdG8gYWxsb3cgdGhlIE5GUyBzZXJ2ZXIgdG8gYmUgdXBkYXRlZAorIyAgICByZXR1cm4gJG91dDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUnVuIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0IGFuZCByZXR1cm4gaXRzIHN0ZG91dAorIworc3ViIHJ1bmNsaWVudG91dHB1dCB7CisgICAgbXkgKCRjbWQpPUBfOworICAgIHJldHVybiBgJGNtZGA7CisKKyMgVGhpcyBpcyBvbmUgd2F5IHRvIHRlc3QgY3VybCBvbiBhIHJlbW90ZSBtYWNoaW5lCisjICAgIG15IEBvdXQgPSBgc3NoICRDTElFTlRJUCBjZCBcJyRwd2RcJyBcXDsgXCckY21kXCdgOworIyAgICBzbGVlcCAyOyAgICAjIHRpbWUgdG8gYWxsb3cgdGhlIE5GUyBzZXJ2ZXIgdG8gYmUgdXBkYXRlZAorIyAgICByZXR1cm4gQG91dDsKKyB9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1lbW9yeSBhbGxvY2F0aW9uIHRlc3QgYW5kIGZhaWx1cmUgdG9ydHVyZSB0ZXN0aW5nLgorIworc3ViIHRvcnR1cmUgeworICAgIG15ICR0ZXN0Y21kID0gc2hpZnQ7CisgICAgbXkgJGdkYmxpbmUgPSBzaGlmdDsKKworICAgICMgcmVtb3ZlIG1lbWR1bXAgZmlyc3QgdG8gYmUgc3VyZSB3ZSBnZXQgYSBuZXcgbmljZSBhbmQgY2xlYW4gb25lCisgICAgdW5saW5rKCRtZW1kdW1wKTsKKworICAgICMgRmlyc3QgZ2V0IFVSTCBmcm9tIHRlc3Qgc2VydmVyLCBpZ25vcmUgdGhlIG91dHB1dC9yZXN1bHQKKyAgICBydW5jbGllbnQoJHRlc3RjbWQpOworCisgICAgbG9nbXNnICIgQ01EOiAkdGVzdGNtZFxuIiBpZigkdmVyYm9zZSk7CisKKyAgICAjIG1lbWFuYWx5emUgLXYgaXMgb3VyIGZyaWVuZCwgZ2V0IHRoZSBudW1iZXIgb2YgYWxsb2NhdGlvbnMgbWFkZQorICAgIG15ICRjb3VudD0wOworICAgIG15IEBvdXQgPSBgJG1lbWFuYWx5emUgLXYgJG1lbWR1bXBgOworICAgIGZvcihAb3V0KSB7CisgICAgICAgIGlmKC9eQWxsb2NhdGlvbnM6IChcZCspLykgeworICAgICAgICAgICAgJGNvdW50ID0gJDE7CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgfQorICAgIGlmKCEkY291bnQpIHsKKyAgICAgICAgbG9nbXNnICIgZm91bmQgbm8gYWxsb2NzIHRvIG1ha2UgZmFpbFxuIjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgbG9nbXNnICIgJGNvdW50IGFsbG9jYXRpb25zIHRvIG1ha2UgZmFpbFxuIjsKKworICAgIGZvciAoIDEgLi4gJGNvdW50ICkgeworICAgICAgICBteSAkbGltaXQgPSAkXzsKKyAgICAgICAgbXkgJGZhaWw7CisgICAgICAgIG15ICRkdW1wZWRfY29yZTsKKworICAgICAgICBpZigkdG9ydGFsbG9jICYmICgkdG9ydGFsbG9jICE9ICRsaW1pdCkpIHsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICBpZigkdmVyYm9zZSkgeworICAgICAgICAgICAgbXkgKCRzZWMsJG1pbiwkaG91ciwkbWRheSwkbW9uLCR5ZWFyLCR3ZGF5LCR5ZGF5LCRpc2RzdCkgPQorICAgICAgICAgICAgICAgIGxvY2FsdGltZSh0aW1lKCkpOworICAgICAgICAgICAgbXkgJG5vdyA9IHNwcmludGYoIiUwMmQ6JTAyZDolMDJkICIsICRob3VyLCAkbWluLCAkc2VjKTsKKyAgICAgICAgICAgIGxvZ21zZyAiRmFpbCBhbGxvYyBubzogJGxpbWl0IGF0ICRub3dcciI7CisgICAgICAgIH0KKworICAgICAgICAjIG1ha2UgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIG51bWJlciAkbGltaXQgcmV0dXJuIGZhaWx1cmUKKyAgICAgICAgJEVOVnsnQ1VSTF9NRU1MSU1JVCd9ID0gJGxpbWl0OworCisgICAgICAgICMgcmVtb3ZlIG1lbWR1bXAgZmlyc3QgdG8gYmUgc3VyZSB3ZSBnZXQgYSBuZXcgbmljZSBhbmQgY2xlYW4gb25lCisgICAgICAgIHVubGluaygkbWVtZHVtcCk7CisKKyAgICAgICAgbG9nbXNnICIqKiogQWxsb2MgbnVtYmVyICRsaW1pdCBpcyBub3cgc2V0IHRvIGZhaWwgKioqXG4iIGlmKCRnZGJ0aGlzKTsKKworICAgICAgICBteSAkcmV0ID0gMDsKKyAgICAgICAgaWYoJGdkYnRoaXMpIHsKKyAgICAgICAgICAgIHJ1bmNsaWVudCgkZ2RibGluZSkKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICRyZXQgPSBydW5jbGllbnQoJHRlc3RjbWQpOworICAgICAgICB9CisgICAgICAgICNsb2dtc2cgIiRfIFJldHVybmVkICIgLiAkcmV0ID4+IDggLiAiXG4iOworCisgICAgICAgICMgTm93IGNsZWFyIHRoZSB2YXJpYWJsZSBhZ2FpbgorICAgICAgICBkZWxldGUgJEVOVnsnQ1VSTF9NRU1MSU1JVCd9IGlmKCRFTlZ7J0NVUkxfTUVNTElNSVQnfSk7CisKKyAgICAgICAgaWYoLXIgImNvcmUiKSB7CisgICAgICAgICAgICAjIHRoZXJlJ3MgY29yZSBmaWxlIHByZXNlbnQgbm93IQorICAgICAgICAgICAgbG9nbXNnICIgY29yZSBkdW1wZWRcbiI7CisgICAgICAgICAgICAkZHVtcGVkX2NvcmUgPSAxOworICAgICAgICAgICAgJGZhaWwgPSAyOworICAgICAgICB9CisKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCBpdCByZXR1cm5zIGEgcHJvcGVyIGVycm9yIGNvZGUsIGRvZXNuJ3QgbGVhayBtZW1vcnkKKyAgICAgICAgIyBhbmQgZG9lc24ndCBjb3JlIGR1bXAKKyAgICAgICAgaWYoJHJldCAmIDI1NSkgeworICAgICAgICAgICAgbG9nbXNnICIgc3lzdGVtKCkgcmV0dXJuZWQgJHJldFxuIjsKKyAgICAgICAgICAgICRmYWlsPTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBteSBAbWVtZGF0YT1gJG1lbWFuYWx5emUgJG1lbWR1bXBgOworICAgICAgICAgICAgbXkgJGxlYWs9MDsKKyAgICAgICAgICAgIGZvcihAbWVtZGF0YSkgeworICAgICAgICAgICAgICAgIGlmKCRfIG5lICIiKSB7CisgICAgICAgICAgICAgICAgICAgICMgd2VsbCBpdCBjb3VsZCBiZSBvdGhlciBtZW1vcnkgcHJvYmxlbXMgYXMgd2VsbCwgYnV0CisgICAgICAgICAgICAgICAgICAgICMgd2UgY2FsbCBpdCBsZWFrIGZvciBzaG9ydCBoZXJlCisgICAgICAgICAgICAgICAgICAgICRsZWFrPTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoJGxlYWspIHsKKyAgICAgICAgICAgICAgICBsb2dtc2cgIioqIE1FTU9SWSBGQUlMVVJFXG4iOworICAgICAgICAgICAgICAgIGxvZ21zZyBAbWVtZGF0YTsKKyAgICAgICAgICAgICAgICBsb2dtc2cgYCRtZW1hbmFseXplIC1sICRtZW1kdW1wYDsKKyAgICAgICAgICAgICAgICAkZmFpbCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYoJGZhaWwpIHsKKyAgICAgICAgICAgIGxvZ21zZyAiIEZhaWxlZCBvbiBhbGxvYyBudW1iZXIgJGxpbWl0IGluIHRlc3QuXG4iLAorICAgICAgICAgICAgIiBpbnZva2Ugd2l0aCBcIi10JGxpbWl0XCIgdG8gcmVwZWF0IHRoaXMgc2luZ2xlIGNhc2UuXG4iOworICAgICAgICAgICAgc3RvcHNlcnZlcnMoJHZlcmJvc2UpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsb2dtc2cgInRvcnR1cmUgT0tcbiI7CisgICAgcmV0dXJuIDA7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFN0b3AgYSB0ZXN0IHNlcnZlciBhbG9uZyB3aXRoIHBpZHMgd2hpY2ggYXJlbid0IGluIHRoZSAlcnVuIGhhc2ggeWV0LgorIyBUaGlzIGFsc28gc3RvcHMgYWxsIHNlcnZlcnMgd2hpY2ggYXJlIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBvbmUuCisjCitzdWIgc3RvcHNlcnZlciB7CisgICAgbXkgKCRzZXJ2ZXIsICRwaWRsaXN0KSA9IEBfOworICAgICMKKyAgICAjIGtpbGwgc29ja2ZpbHRlciBwcm9jZXNzZXMgZm9yIHBpbmdwb25nIHJlbGF0aXZlIHNlcnZlcgorICAgICMKKyAgICBpZigkc2VydmVyID1+IC9eKGZ0cHxpbWFwfHBvcDN8c210cClzPyhcZCopKC1pcHY2fCkkLykgeworICAgICAgICBteSAkcHJvdG8gID0gJDE7CisgICAgICAgIG15ICRpZG51bSAgPSAoJDIgJiYgKCQyID4gMSkpID8gJDIgOiAxOworICAgICAgICBteSAkaXB2bnVtID0gKCQzICYmICgkMyA9fiAvNiQvKSkgPyA2IDogNDsKKyAgICAgICAga2lsbHNvY2tmaWx0ZXJzKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkdmVyYm9zZSk7CisgICAgfQorICAgICMKKyAgICAjIEFsbCBzZXJ2ZXJzIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBvbmUgbXVzdCBiZSBzdG9wcGVkIGFsc28KKyAgICAjCisgICAgbXkgQGtpbGxzZXJ2ZXJzOworICAgIGlmKCRzZXJ2ZXIgPX4gL14oZnRwfGh0dHB8aW1hcHxwb3AzfHNtdHApcygoXGQqKSgtaXB2NnwpKSQvKSB7CisgICAgICAgICMgZ2l2ZW4gYSBzdHVubmVsIGJhc2VkIHNzbCBzZXJ2ZXIsIGFsc28ga2lsbCBub24tc3NsIHVuZGVybHlpbmcgb25lCisgICAgICAgIHB1c2ggQGtpbGxzZXJ2ZXJzLCAiJHsxfSR7Mn0iOworICAgIH0KKyAgICBlbHNpZigkc2VydmVyID1+IC9eKGZ0cHxodHRwfGltYXB8cG9wM3xzbXRwKSgoXGQqKSgtaXB2NnwpKSQvKSB7CisgICAgICAgICMgZ2l2ZW4gYSBub24tc3NsIHNlcnZlciwgYWxzbyBraWxsIHN0dW5uZWwgYmFzZWQgc3NsIHBpZ2d5YmFja2luZyBvbmUKKyAgICAgICAgcHVzaCBAa2lsbHNlcnZlcnMsICIkezF9cyR7Mn0iOworICAgIH0KKyAgICBlbHNpZigkc2VydmVyID1+IC9eKHNvY2tzKSgoXGQqKSgtaXB2NnwpKSQvKSB7CisgICAgICAgICMgZ2l2ZW4gYSBzb2NrcyBzZXJ2ZXIsIGFsc28ga2lsbCBzc2ggdW5kZXJseWluZyBvbmUKKyAgICAgICAgcHVzaCBAa2lsbHNlcnZlcnMsICJzc2gkezJ9IjsKKyAgICB9CisgICAgZWxzaWYoJHNlcnZlciA9fiAvXihzc2gpKChcZCopKC1pcHY2fCkpJC8pIHsKKyAgICAgICAgIyBnaXZlbiBhIHNzaCBzZXJ2ZXIsIGFsc28ga2lsbCBzb2NrcyBwaWdneWJhY2tpbmcgb25lCisgICAgICAgIHB1c2ggQGtpbGxzZXJ2ZXJzLCAic29ja3MkezJ9IjsKKyAgICB9CisgICAgcHVzaCBAa2lsbHNlcnZlcnMsICRzZXJ2ZXI7CisgICAgIworICAgICMga2lsbCBnaXZlbiBwaWRzIGFuZCBzZXJ2ZXIgcmVsYXRpdmUgb25lcyBjbGVhcmluZyB0aGVtIGluICVydW4gaGFzaAorICAgICMKKyAgICBmb3JlYWNoIG15ICRzZXJ2ZXIgKEBraWxsc2VydmVycykgeworICAgICAgICBpZigkcnVueyRzZXJ2ZXJ9KSB7CisgICAgICAgICAgICAjIHdlIG11c3QgcHJlcGVuZCBhIHNwYWNlIHNpbmNlICRwaWRsaXN0IG1heSBhbHJlYWR5IGNvbnRhaW4gYSBwaWQKKyAgICAgICAgICAgICRwaWRsaXN0IC49ICIgJHJ1bnskc2VydmVyfSI7CisgICAgICAgICAgICAkcnVueyRzZXJ2ZXJ9ID0gMDsKKyAgICAgICAgfQorICAgICAgICAkcnVuY2VydHskc2VydmVyfSA9IDAgaWYoJHJ1bmNlcnR7JHNlcnZlcn0pOworICAgIH0KKyAgICBraWxscGlkKCR2ZXJib3NlLCAkcGlkbGlzdCk7CisgICAgIworICAgICMgY2xlYW51cCBzZXJ2ZXIgcGlkIGZpbGVzCisgICAgIworICAgIGZvcmVhY2ggbXkgJHNlcnZlciAoQGtpbGxzZXJ2ZXJzKSB7CisgICAgICAgIG15ICRwaWRmaWxlID0gJHNlcnZlcnBpZGZpbGV7JHNlcnZlcn07CisgICAgICAgIG15ICRwaWQgPSBwcm9jZXNzZXhpc3RzKCRwaWRmaWxlKTsKKyAgICAgICAgaWYoJHBpZCA+IDApIHsKKyAgICAgICAgICAgIGxvZ21zZyAiV2FybmluZzogJHNlcnZlciBzZXJ2ZXIgdW5leHBlY3RlZGx5IGFsaXZlXG4iOworICAgICAgICAgICAga2lsbHBpZCgkdmVyYm9zZSwgJHBpZCk7CisgICAgICAgIH0KKyAgICAgICAgdW5saW5rKCRwaWRmaWxlKSBpZigtZiAkcGlkZmlsZSk7CisgICAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBWZXJpZnkgdGhhdCB0aGUgc2VydmVyIHRoYXQgcnVucyBvbiAkaXAsICRwb3J0IGlzIG91ciBzZXJ2ZXIuICBUaGlzIGFsc28KKyMgaW1wbGllcyB0aGF0IHdlIGNhbiBzcGVhayB3aXRoIGl0LCBhcyB0aGVyZSBtaWdodCBiZSBvY2Nhc2lvbnMgd2hlbiB0aGUKKyMgc2VydmVyIHJ1bnMgZmluZSBidXQgd2UgY2Fubm90IHRhbGsgdG8gaXQgKCJGYWlsZWQgdG8gY29ubmVjdCB0byA6OjE6IENhbid0CisjIGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyIpCisjCitzdWIgdmVyaWZ5aHR0cCB7CisgICAgbXkgKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkaXAsICRwb3J0KSA9IEBfOworICAgIG15ICRzZXJ2ZXIgPSBzZXJ2ZXJuYW1lX2lkKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKyAgICBteSAkcGlkID0gMDsKKyAgICBteSAkYm9udXM9IiI7CisKKyAgICBteSAkdmVyaWZ5b3V0ID0gIiRMT0dESVIvIi4KKyAgICAgICAgc2VydmVybmFtZV9jYW5vbigkcHJvdG8sICRpcHZudW0sICRpZG51bSkgLidfdmVyaWZ5Lm91dCc7CisgICAgdW5saW5rKCR2ZXJpZnlvdXQpIGlmKC1mICR2ZXJpZnlvdXQpOworCisgICAgbXkgJHZlcmlmeWxvZyA9ICIkTE9HRElSLyIuCisgICAgICAgIHNlcnZlcm5hbWVfY2Fub24oJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pIC4nX3ZlcmlmeS5sb2cnOworICAgIHVubGluaygkdmVyaWZ5bG9nKSBpZigtZiAkdmVyaWZ5bG9nKTsKKworICAgIGlmKCRwcm90byBlcSAiZ29waGVyIikgeworICAgICAgICAjIGdvcGhlciBpcyBmdW5ueQorICAgICAgICAkYm9udXM9IjEvIjsKKyAgICB9CisKKyAgICBteSAkZmxhZ3MgPSAiLS1tYXgtdGltZSAkc2VydmVyX3Jlc3BvbnNlX21heHRpbWUgIjsKKyAgICAkZmxhZ3MgLj0gIi0tb3V0cHV0ICR2ZXJpZnlvdXQgIjsKKyAgICAkZmxhZ3MgLj0gIi0tc2lsZW50ICI7CisgICAgJGZsYWdzIC49ICItLXZlcmJvc2UgIjsKKyAgICAkZmxhZ3MgLj0gIi0tZ2xvYm9mZiAiOworICAgICRmbGFncyAuPSAiLTEgIiAgICAgICAgIGlmKCRoYXNfYXh0bHMpOworICAgICRmbGFncyAuPSAiLS1pbnNlY3VyZSAiIGlmKCRwcm90byBlcSAnaHR0cHMnKTsKKyAgICAkZmxhZ3MgLj0gIlwiJHByb3RvOi8vJGlwOiRwb3J0LyR7Ym9udXN9dmVyaWZpZWRzZXJ2ZXJcIiI7CisKKyAgICBteSAkY21kID0gIiRWQ1VSTCAkZmxhZ3MgMj4kdmVyaWZ5bG9nIjsKKworICAgICMgdmVyaWZ5IGlmIG91ci9hbnkgc2VydmVyIGlzIHJ1bm5pbmcgb24gdGhpcyBwb3J0CisgICAgbG9nbXNnICJSVU46ICRjbWRcbiIgaWYoJHZlcmJvc2UpOworICAgIG15ICRyZXMgPSBydW5jbGllbnQoJGNtZCk7CisKKyAgICAkcmVzID4+PSA4OyAjIHJvdGF0ZSB0aGUgcmVzdWx0CisgICAgaWYoJHJlcyAmIDEyOCkgeworICAgICAgICBsb2dtc2cgIlJVTjogY3VybCBjb21tYW5kIGRpZWQgd2l0aCBhIGNvcmVkdW1wXG4iOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYoJHJlcyAmJiAkdmVyYm9zZSkgeworICAgICAgICBsb2dtc2cgIlJVTjogY3VybCBjb21tYW5kIHJldHVybmVkICRyZXNcbiI7CisgICAgICAgIGlmKG9wZW4oRklMRSwgIjwkdmVyaWZ5bG9nIikpIHsKKyAgICAgICAgICAgIHdoaWxlKG15ICRzdHJpbmcgPSA8RklMRT4pIHsKKyAgICAgICAgICAgICAgICBsb2dtc2cgIlJVTjogJHN0cmluZyIgaWYoJHN0cmluZyAhfiAvXihbIFx0XSopJC8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2xvc2UoRklMRSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBteSAkZGF0YTsKKyAgICBpZihvcGVuKEZJTEUsICI8JHZlcmlmeW91dCIpKSB7CisgICAgICAgIHdoaWxlKG15ICRzdHJpbmcgPSA8RklMRT4pIHsKKyAgICAgICAgICAgICRkYXRhID0gJHN0cmluZzsKKyAgICAgICAgICAgIGxhc3Q7ICMgb25seSB3YW50IGZpcnN0IGxpbmUKKyAgICAgICAgfQorICAgICAgICBjbG9zZShGSUxFKTsKKyAgICB9CisKKyAgICBpZigkZGF0YSAmJiAoJGRhdGEgPX4gL1dFIFJPT0xaOiAoXGQrKS8pKSB7CisgICAgICAgICRwaWQgPSAwKyQxOworICAgIH0KKyAgICBlbHNpZigkcmVzID09IDYpIHsKKyAgICAgICAgIyBjdXJsOiAoNikgQ291bGRuJ3QgcmVzb2x2ZSBob3N0ICc6OjEnCisgICAgICAgIGxvZ21zZyAiUlVOOiBmYWlsZWQgdG8gcmVzb2x2ZSBob3N0ICgkcHJvdG86Ly8kaXA6JHBvcnQvdmVyaWZpZWRzZXJ2ZXIpXG4iOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2lmKCRkYXRhIHx8ICgkcmVzICYmICgkcmVzICE9IDcpKSkgeworICAgICAgICBsb2dtc2cgIlJVTjogVW5rbm93biBzZXJ2ZXIgb24gb3VyICRzZXJ2ZXIgcG9ydDogJHBvcnQgKCRyZXMpXG4iOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAkcGlkOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBWZXJpZnkgdGhhdCB0aGUgc2VydmVyIHRoYXQgcnVucyBvbiAkaXAsICRwb3J0IGlzIG91ciBzZXJ2ZXIuICBUaGlzIGFsc28KKyMgaW1wbGllcyB0aGF0IHdlIGNhbiBzcGVhayB3aXRoIGl0LCBhcyB0aGVyZSBtaWdodCBiZSBvY2Nhc2lvbnMgd2hlbiB0aGUKKyMgc2VydmVyIHJ1bnMgZmluZSBidXQgd2UgY2Fubm90IHRhbGsgdG8gaXQgKCJGYWlsZWQgdG8gY29ubmVjdCB0byA6OjE6IENhbid0CisjIGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyIpCisjCitzdWIgdmVyaWZ5ZnRwIHsKKyAgICBteSAoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICRpcCwgJHBvcnQpID0gQF87CisgICAgbXkgJHNlcnZlciA9IHNlcnZlcm5hbWVfaWQoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworICAgIG15ICRwaWQgPSAwOworICAgIG15ICR0aW1lPXRpbWUoKTsKKyAgICBteSAkZXh0cmE9IiI7CisKKyAgICBteSAkdmVyaWZ5bG9nID0gIiRMT0dESVIvIi4KKyAgICAgICAgc2VydmVybmFtZV9jYW5vbigkcHJvdG8sICRpcHZudW0sICRpZG51bSkgLidfdmVyaWZ5LmxvZyc7CisgICAgdW5saW5rKCR2ZXJpZnlsb2cpIGlmKC1mICR2ZXJpZnlsb2cpOworCisgICAgaWYoJHByb3RvIGVxICJmdHBzIikgeworICAgICAgICAkZXh0cmEgLj0gIi0taW5zZWN1cmUgLS1mdHAtc3NsLWNvbnRyb2wgIjsKKyAgICB9CisgICAgZWxzaWYoJHByb3RvIGVxICJzbXRwIikgeworICAgICAgICAjIFNNVFAgaXMgYSBiaXQgZGlmZmVyZW50IHNpbmNlIGl0IHJlcXVpcmVzIG1vcmUgb3B0aW9ucyBhbmQgaXQKKyAgICAgICAgIyBoYXMgX25vXyBvdXRwdXQhCisgICAgICAgICRleHRyYSAuPSAiLS1tYWlsLXJjcHQgdmVyaWZpZWRzZXJ2ZXIgIjsKKyAgICAgICAgJGV4dHJhIC49ICItLW1haWwtZnJvbSBmYWtlICI7CisgICAgICAgICRleHRyYSAuPSAiLS11cGxvYWQgL2Rldi9udWxsICI7CisgICAgICAgICRleHRyYSAuPSAiLS1zdGRlcnIgLSAiOyAjIG1vdmUgc3RkZXJyIHRvIHBhcnNlIHRoZSB2ZXJib3NlIHN0dWZmCisgICAgfQorCisgICAgbXkgJGZsYWdzID0gIi0tbWF4LXRpbWUgJHNlcnZlcl9yZXNwb25zZV9tYXh0aW1lICI7CisgICAgJGZsYWdzIC49ICItLXNpbGVudCAiOworICAgICRmbGFncyAuPSAiLS12ZXJib3NlICI7CisgICAgJGZsYWdzIC49ICItLWdsb2JvZmYgIjsKKyAgICAkZmxhZ3MgLj0gJGV4dHJhOworICAgICRmbGFncyAuPSAiXCIkcHJvdG86Ly8kaXA6JHBvcnQvdmVyaWZpZWRzZXJ2ZXJcIiI7CisKKyAgICBteSAkY21kID0gIiRWQ1VSTCAkZmxhZ3MgMj4kdmVyaWZ5bG9nIjsKKworICAgICMgY2hlY2sgaWYgdGhpcyBpcyBvdXIgc2VydmVyIHJ1bm5pbmcgb24gdGhpcyBwb3J0OgorICAgIGxvZ21zZyAiUlVOOiAkY21kXG4iIGlmKCR2ZXJib3NlKTsKKyAgICBteSBAZGF0YSA9IHJ1bmNsaWVudG91dHB1dCgkY21kKTsKKworICAgIG15ICRyZXMgPSAkPyA+PiA4OyAjIHJvdGF0ZSB0aGUgcmVzdWx0CisgICAgaWYoJHJlcyAmIDEyOCkgeworICAgICAgICBsb2dtc2cgIlJVTjogY3VybCBjb21tYW5kIGRpZWQgd2l0aCBhIGNvcmVkdW1wXG4iOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZm9yZWFjaCBteSAkbGluZSAoQGRhdGEpIHsKKyAgICAgICAgaWYoJGxpbmUgPX4gL1dFIFJPT0xaOiAoXGQrKS8pIHsKKyAgICAgICAgICAgICMgdGhpcyBpcyBvdXIgdGVzdCBzZXJ2ZXIgd2l0aCBhIGtub3duIHBpZCEKKyAgICAgICAgICAgICRwaWQgPSAwKyQxOworICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZigkcGlkIDw9IDAgJiYgQGRhdGEgJiYgJGRhdGFbMF0pIHsKKyAgICAgICAgIyB0aGlzIGlzIG5vdCBhIGtub3duIHNlcnZlcgorICAgICAgICBsb2dtc2cgIlJVTjogVW5rbm93biBzZXJ2ZXIgb24gb3VyICRzZXJ2ZXIgcG9ydDogJHBvcnRcbiI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAjIHdlIGNhbi9zaG91bGQgdXNlIHRoZSB0aW1lIGl0IHRvb2sgdG8gdmVyaWZ5IHRoZSBGVFAgc2VydmVyIGFzIGEgbWVhc3VyZQorICAgICMgb24gaG93IGZhc3Qvc2xvdyB0aGlzIGhvc3QvRlRQIGlzLgorICAgIG15ICR0b29rID0gaW50KDAuNSt0aW1lKCktJHRpbWUpOworCisgICAgaWYoJHZlcmJvc2UpIHsKKyAgICAgICAgbG9nbXNnICJSVU46IFZlcmlmeWluZyBvdXIgdGVzdCAkc2VydmVyIHNlcnZlciB0b29rICR0b29rIHNlY29uZHNcbiI7CisgICAgfQorICAgICRmdHBjaGVja3RpbWUgPSAkdG9vaz49MT8kdG9vazoxOyAjIG1ha2Ugc3VyZSBpdCBuZXZlciBpcyBiZWxvdyAxCisKKyAgICByZXR1cm4gJHBpZDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVmVyaWZ5IHRoYXQgdGhlIHNlcnZlciB0aGF0IHJ1bnMgb24gJGlwLCAkcG9ydCBpcyBvdXIgc2VydmVyLiAgVGhpcyBhbHNvCisjIGltcGxpZXMgdGhhdCB3ZSBjYW4gc3BlYWsgd2l0aCBpdCwgYXMgdGhlcmUgbWlnaHQgYmUgb2NjYXNpb25zIHdoZW4gdGhlCisjIHNlcnZlciBydW5zIGZpbmUgYnV0IHdlIGNhbm5vdCB0YWxrIHRvIGl0ICgiRmFpbGVkIHRvIGNvbm5lY3QgdG8gOjoxOiBDYW4ndAorIyBhc3NpZ24gcmVxdWVzdGVkIGFkZHJlc3MiKQorIworc3ViIHZlcmlmeXJ0c3AgeworICAgIG15ICgkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJGlwLCAkcG9ydCkgPSBAXzsKKyAgICBteSAkc2VydmVyID0gc2VydmVybmFtZV9pZCgkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisgICAgbXkgJHBpZCA9IDA7CisKKyAgICBteSAkdmVyaWZ5b3V0ID0gIiRMT0dESVIvIi4KKyAgICAgICAgc2VydmVybmFtZV9jYW5vbigkcHJvdG8sICRpcHZudW0sICRpZG51bSkgLidfdmVyaWZ5Lm91dCc7CisgICAgdW5saW5rKCR2ZXJpZnlvdXQpIGlmKC1mICR2ZXJpZnlvdXQpOworCisgICAgbXkgJHZlcmlmeWxvZyA9ICIkTE9HRElSLyIuCisgICAgICAgIHNlcnZlcm5hbWVfY2Fub24oJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pIC4nX3ZlcmlmeS5sb2cnOworICAgIHVubGluaygkdmVyaWZ5bG9nKSBpZigtZiAkdmVyaWZ5bG9nKTsKKworICAgIG15ICRmbGFncyA9ICItLW1heC10aW1lICRzZXJ2ZXJfcmVzcG9uc2VfbWF4dGltZSAiOworICAgICRmbGFncyAuPSAiLS1vdXRwdXQgJHZlcmlmeW91dCAiOworICAgICRmbGFncyAuPSAiLS1zaWxlbnQgIjsKKyAgICAkZmxhZ3MgLj0gIi0tdmVyYm9zZSAiOworICAgICRmbGFncyAuPSAiLS1nbG9ib2ZmICI7CisgICAgIyBjdXJyZW50bHkgdmVyaWZpY2F0aW9uIGlzIGRvbmUgdXNpbmcgaHR0cAorICAgICRmbGFncyAuPSAiXCJodHRwOi8vJGlwOiRwb3J0L3ZlcmlmaWVkc2VydmVyXCIiOworCisgICAgbXkgJGNtZCA9ICIkVkNVUkwgJGZsYWdzIDI+JHZlcmlmeWxvZyI7CisKKyAgICAjIHZlcmlmeSBpZiBvdXIvYW55IHNlcnZlciBpcyBydW5uaW5nIG9uIHRoaXMgcG9ydAorICAgIGxvZ21zZyAiUlVOOiAkY21kXG4iIGlmKCR2ZXJib3NlKTsKKyAgICBteSAkcmVzID0gcnVuY2xpZW50KCRjbWQpOworCisgICAgJHJlcyA+Pj0gODsgIyByb3RhdGUgdGhlIHJlc3VsdAorICAgIGlmKCRyZXMgJiAxMjgpIHsKKyAgICAgICAgbG9nbXNnICJSVU46IGN1cmwgY29tbWFuZCBkaWVkIHdpdGggYSBjb3JlZHVtcFxuIjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmKCRyZXMgJiYgJHZlcmJvc2UpIHsKKyAgICAgICAgbG9nbXNnICJSVU46IGN1cmwgY29tbWFuZCByZXR1cm5lZCAkcmVzXG4iOworICAgICAgICBpZihvcGVuKEZJTEUsICI8JHZlcmlmeWxvZyIpKSB7CisgICAgICAgICAgICB3aGlsZShteSAkc3RyaW5nID0gPEZJTEU+KSB7CisgICAgICAgICAgICAgICAgbG9nbXNnICJSVU46ICRzdHJpbmciIGlmKCRzdHJpbmcgIX4gL14oWyBcdF0qKSQvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsb3NlKEZJTEUpOworICAgICAgICB9CisgICAgfQorCisgICAgbXkgJGRhdGE7CisgICAgaWYob3BlbihGSUxFLCAiPCR2ZXJpZnlvdXQiKSkgeworICAgICAgICB3aGlsZShteSAkc3RyaW5nID0gPEZJTEU+KSB7CisgICAgICAgICAgICAkZGF0YSA9ICRzdHJpbmc7CisgICAgICAgICAgICBsYXN0OyAjIG9ubHkgd2FudCBmaXJzdCBsaW5lCisgICAgICAgIH0KKyAgICAgICAgY2xvc2UoRklMRSk7CisgICAgfQorCisgICAgaWYoJGRhdGEgJiYgKCRkYXRhID1+IC9SVFNQX1NFUlZFUiBXRSBST09MWjogKFxkKykvKSkgeworICAgICAgICAkcGlkID0gMCskMTsKKyAgICB9CisgICAgZWxzaWYoJHJlcyA9PSA2KSB7CisgICAgICAgICMgY3VybDogKDYpIENvdWxkbid0IHJlc29sdmUgaG9zdCAnOjoxJworICAgICAgICBsb2dtc2cgIlJVTjogZmFpbGVkIHRvIHJlc29sdmUgaG9zdCAoJHByb3RvOi8vJGlwOiRwb3J0L3ZlcmlmaWVkc2VydmVyKVxuIjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNpZigkZGF0YSB8fCAoJHJlcyAhPSA3KSkgeworICAgICAgICBsb2dtc2cgIlJVTjogVW5rbm93biBzZXJ2ZXIgb24gb3VyICRzZXJ2ZXIgcG9ydDogJHBvcnRcbiI7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuICRwaWQ7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFZlcmlmeSB0aGF0IHRoZSBzc2ggc2VydmVyIGhhcyB3cml0dGVuIG91dCBpdHMgcGlkZmlsZSwgcmVjb3ZlcmluZworIyB0aGUgcGlkIGZyb20gdGhlIGZpbGUgYW5kIHJldHVybmluZyBpdCBpZiBhIHByb2Nlc3Mgd2l0aCB0aGF0IHBpZCBpcworIyBhY3R1YWxseSBhbGl2ZS4KKyMKK3N1YiB2ZXJpZnlzc2ggeworICAgIG15ICgkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJGlwLCAkcG9ydCkgPSBAXzsKKyAgICBteSAkc2VydmVyID0gc2VydmVybmFtZV9pZCgkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisgICAgbXkgJHBpZGZpbGUgPSBzZXJ2ZXJfcGlkZmlsZW5hbWUoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworICAgIG15ICRwaWQgPSAwOworICAgIGlmKG9wZW4oRklMRSwgIjwkcGlkZmlsZSIpKSB7CisgICAgICAgICRwaWQ9MCs8RklMRT47CisgICAgICAgIGNsb3NlKEZJTEUpOworICAgIH0KKyAgICBpZigkcGlkID4gMCkgeworICAgICAgICAjIGlmIHdlIGhhdmUgYSBwaWQgaXQgaXMgYWN0dWFsbHkgb3VyIHNzaCBzZXJ2ZXIsCisgICAgICAgICMgc2luY2UgcnVuc3Noc2VydmVyKCkgdW5saW5rcyBwcmV2aW91cyBwaWRmaWxlCisgICAgICAgIGlmKCFraWxsKDAsICRwaWQpKSB7CisgICAgICAgICAgICBsb2dtc2cgIlJVTjogU1NIIHNlcnZlciBoYXMgZGllZCBhZnRlciBzdGFydGluZyB1cFxuIjsKKyAgICAgICAgICAgIGNoZWNrZGllZCgkcGlkKTsKKyAgICAgICAgICAgIHVubGluaygkcGlkZmlsZSk7CisgICAgICAgICAgICAkcGlkID0gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICRwaWQ7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFZlcmlmeSB0aGF0IHdlIGNhbiBjb25uZWN0IHRvIHRoZSBzZnRwIHNlcnZlciwgcHJvcGVybHkgYXV0aGVudGljYXRlCisjIHdpdGggZ2VuZXJhdGVkIGNvbmZpZyBhbmQga2V5IGZpbGVzIGFuZCBydW4gYSBzaW1wbGUgcmVtb3RlIHB3ZC4KKyMKK3N1YiB2ZXJpZnlzZnRwIHsKKyAgICBteSAoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICRpcCwgJHBvcnQpID0gQF87CisgICAgbXkgJHNlcnZlciA9IHNlcnZlcm5hbWVfaWQoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworICAgIG15ICR2ZXJpZmllZCA9IDA7CisgICAgIyBGaW5kIG91dCBzZnRwIGNsaWVudCBjYW5vbmljYWwgZmlsZSBuYW1lCisgICAgbXkgJHNmdHAgPSBmaW5kX3NmdHAoKTsKKyAgICBpZighJHNmdHApIHsKKyAgICAgICAgbG9nbXNnICJSVU46IFNGVFAgc2VydmVyIGNhbm5vdCBmaW5kICRzZnRwZXhlXG4iOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgICMgRmluZCBvdXQgc3NoIGNsaWVudCBjYW5vbmljYWwgZmlsZSBuYW1lCisgICAgbXkgJHNzaCA9IGZpbmRfc3NoKCk7CisgICAgaWYoISRzc2gpIHsKKyAgICAgICAgbG9nbXNnICJSVU46IFNGVFAgc2VydmVyIGNhbm5vdCBmaW5kICRzc2hleGVcbiI7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgIyBDb25uZWN0IHRvIHNmdHAgc2VydmVyLCBhdXRoZW50aWNhdGUgYW5kIHJ1biBhIHJlbW90ZSBwd2QKKyAgICAjIGNvbW1hbmQgdXNpbmcgb3VyIGdlbmVyYXRlZCBjb25maWd1cmF0aW9uIGFuZCBrZXkgZmlsZXMKKyAgICBteSAkY21kID0gIiRzZnRwIC1iICRzZnRwY21kcyAtRiAkc2Z0cGNvbmZpZyAtUyAkc3NoICRpcCA+ICRzZnRwbG9nIDI+JjEiOworICAgIG15ICRyZXMgPSBydW5jbGllbnQoJGNtZCk7CisgICAgIyBTZWFyY2ggZm9yIHB3ZCBjb21tYW5kIHJlc3BvbnNlIGluIGxvZyBmaWxlCisgICAgaWYob3BlbihTRlRQTE9HRklMRSwgIjwkc2Z0cGxvZyIpKSB7CisgICAgICAgIHdoaWxlKDxTRlRQTE9HRklMRT4pIHsKKyAgICAgICAgICAgIGlmKC9eUmVtb3RlIHdvcmtpbmcgZGlyZWN0b3J5OiAvKSB7CisgICAgICAgICAgICAgICAgJHZlcmlmaWVkID0gMTsKKyAgICAgICAgICAgICAgICBsYXN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNsb3NlKFNGVFBMT0dGSUxFKTsKKyAgICB9CisgICAgcmV0dXJuICR2ZXJpZmllZDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVmVyaWZ5IHRoYXQgdGhlIG5vbi1zdHVubmVsIEhUVFAgVExTIGV4dGVuc2lvbnMgY2FwYWJsZSBzZXJ2ZXIgdGhhdCBydW5zCisjIG9uICRpcCwgJHBvcnQgaXMgb3VyIHNlcnZlci4gIFRoaXMgYWxzbyBpbXBsaWVzIHRoYXQgd2UgY2FuIHNwZWFrIHdpdGggaXQsCisjIGFzIHRoZXJlIG1pZ2h0IGJlIG9jY2FzaW9ucyB3aGVuIHRoZSBzZXJ2ZXIgcnVucyBmaW5lIGJ1dCB3ZSBjYW5ub3QgdGFsaworIyB0byBpdCAoIkZhaWxlZCB0byBjb25uZWN0IHRvIDo6MTogQ2FuJ3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzIikKKyMKK3N1YiB2ZXJpZnlodHRwdGxzIHsKKyAgICBteSAoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICRpcCwgJHBvcnQpID0gQF87CisgICAgbXkgJHNlcnZlciA9IHNlcnZlcm5hbWVfaWQoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworICAgIG15ICRwaWRmaWxlID0gc2VydmVyX3BpZGZpbGVuYW1lKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKyAgICBteSAkcGlkID0gMDsKKworICAgIG15ICR2ZXJpZnlvdXQgPSAiJExPR0RJUi8iLgorICAgICAgICBzZXJ2ZXJuYW1lX2Nhbm9uKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKSAuJ192ZXJpZnkub3V0JzsKKyAgICB1bmxpbmsoJHZlcmlmeW91dCkgaWYoLWYgJHZlcmlmeW91dCk7CisKKyAgICBteSAkdmVyaWZ5bG9nID0gIiRMT0dESVIvIi4KKyAgICAgICAgc2VydmVybmFtZV9jYW5vbigkcHJvdG8sICRpcHZudW0sICRpZG51bSkgLidfdmVyaWZ5LmxvZyc7CisgICAgdW5saW5rKCR2ZXJpZnlsb2cpIGlmKC1mICR2ZXJpZnlsb2cpOworCisgICAgbXkgJGZsYWdzID0gIi0tbWF4LXRpbWUgJHNlcnZlcl9yZXNwb25zZV9tYXh0aW1lICI7CisgICAgJGZsYWdzIC49ICItLW91dHB1dCAkdmVyaWZ5b3V0ICI7CisgICAgJGZsYWdzIC49ICItLXZlcmJvc2UgIjsKKyAgICAkZmxhZ3MgLj0gIi0tZ2xvYm9mZiAiOworICAgICRmbGFncyAuPSAiLS1pbnNlY3VyZSAiOworICAgICRmbGFncyAuPSAiLS10bHNhdXRodHlwZSBTUlAgIjsKKyAgICAkZmxhZ3MgLj0gIi0tdGxzdXNlciBqc21pdGggIjsKKyAgICAkZmxhZ3MgLj0gIi0tdGxzcGFzc3dvcmQgYWJjICI7CisgICAgJGZsYWdzIC49ICJcImh0dHBzOi8vJGlwOiRwb3J0L3ZlcmlmaWVkc2VydmVyXCIiOworCisgICAgbXkgJGNtZCA9ICIkVkNVUkwgJGZsYWdzIDI+JHZlcmlmeWxvZyI7CisKKyAgICAjIHZlcmlmeSBpZiBvdXIvYW55IHNlcnZlciBpcyBydW5uaW5nIG9uIHRoaXMgcG9ydAorICAgIGxvZ21zZyAiUlVOOiAkY21kXG4iIGlmKCR2ZXJib3NlKTsKKyAgICBteSAkcmVzID0gcnVuY2xpZW50KCRjbWQpOworCisgICAgJHJlcyA+Pj0gODsgIyByb3RhdGUgdGhlIHJlc3VsdAorICAgIGlmKCRyZXMgJiAxMjgpIHsKKyAgICAgICAgbG9nbXNnICJSVU46IGN1cmwgY29tbWFuZCBkaWVkIHdpdGggYSBjb3JlZHVtcFxuIjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmKCRyZXMgJiYgJHZlcmJvc2UpIHsKKyAgICAgICAgbG9nbXNnICJSVU46IGN1cmwgY29tbWFuZCByZXR1cm5lZCAkcmVzXG4iOworICAgICAgICBpZihvcGVuKEZJTEUsICI8JHZlcmlmeWxvZyIpKSB7CisgICAgICAgICAgICB3aGlsZShteSAkc3RyaW5nID0gPEZJTEU+KSB7CisgICAgICAgICAgICAgICAgbG9nbXNnICJSVU46ICRzdHJpbmciIGlmKCRzdHJpbmcgIX4gL14oWyBcdF0qKSQvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsb3NlKEZJTEUpOworICAgICAgICB9CisgICAgfQorCisgICAgbXkgJGRhdGE7CisgICAgaWYob3BlbihGSUxFLCAiPCR2ZXJpZnlvdXQiKSkgeworICAgICAgICB3aGlsZShteSAkc3RyaW5nID0gPEZJTEU+KSB7CisgICAgICAgICAgICAkZGF0YSAuPSAkc3RyaW5nOworICAgICAgICB9CisgICAgICAgIGNsb3NlKEZJTEUpOworICAgIH0KKworICAgIGlmKCRkYXRhICYmICgkZGF0YSA9fiAvR05VVExTLykgJiYgb3BlbihGSUxFLCAiPCRwaWRmaWxlIikpIHsKKyAgICAgICAgJHBpZD0wKzxGSUxFPjsKKyAgICAgICAgY2xvc2UoRklMRSk7CisgICAgICAgIGlmKCRwaWQgPiAwKSB7CisgICAgICAgICAgICAjIGlmIHdlIGhhdmUgYSBwaWQgaXQgaXMgYWN0dWFsbHkgb3VyIGh0dHB0bHMgc2VydmVyLAorICAgICAgICAgICAgIyBzaW5jZSBydW5odHRwdGxzc2VydmVyKCkgdW5saW5rcyBwcmV2aW91cyBwaWRmaWxlCisgICAgICAgICAgICBpZigha2lsbCgwLCAkcGlkKSkgeworICAgICAgICAgICAgICAgIGxvZ21zZyAiUlVOOiAkc2VydmVyIHNlcnZlciBoYXMgZGllZCBhZnRlciBzdGFydGluZyB1cFxuIjsKKyAgICAgICAgICAgICAgICBjaGVja2RpZWQoJHBpZCk7CisgICAgICAgICAgICAgICAgdW5saW5rKCRwaWRmaWxlKTsKKyAgICAgICAgICAgICAgICAkcGlkID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICRwaWQ7CisgICAgfQorICAgIGVsc2lmKCRyZXMgPT0gNikgeworICAgICAgICAjIGN1cmw6ICg2KSBDb3VsZG4ndCByZXNvbHZlIGhvc3QgJzo6MScKKyAgICAgICAgbG9nbXNnICJSVU46IGZhaWxlZCB0byByZXNvbHZlIGhvc3QgKGh0dHBzOi8vJGlwOiRwb3J0L3ZlcmlmaWVkc2VydmVyKVxuIjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNpZigkZGF0YSB8fCAoJHJlcyAmJiAoJHJlcyAhPSA3KSkpIHsKKyAgICAgICAgbG9nbXNnICJSVU46IFVua25vd24gc2VydmVyIG9uIG91ciAkc2VydmVyIHBvcnQ6ICRwb3J0ICgkcmVzKVxuIjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gJHBpZDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU1RVQiBmb3IgdmVyaWZ5aW5nIHNvY2tzCisjCitzdWIgdmVyaWZ5c29ja3MgeworICAgIG15ICgkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJGlwLCAkcG9ydCkgPSBAXzsKKyAgICBteSAkc2VydmVyID0gc2VydmVybmFtZV9pZCgkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisgICAgbXkgJHBpZGZpbGUgPSBzZXJ2ZXJfcGlkZmlsZW5hbWUoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworICAgIG15ICRwaWQgPSAwOworICAgIGlmKG9wZW4oRklMRSwgIjwkcGlkZmlsZSIpKSB7CisgICAgICAgICRwaWQ9MCs8RklMRT47CisgICAgICAgIGNsb3NlKEZJTEUpOworICAgIH0KKyAgICBpZigkcGlkID4gMCkgeworICAgICAgICAjIGlmIHdlIGhhdmUgYSBwaWQgaXQgaXMgYWN0dWFsbHkgb3VyIHNvY2tzIHNlcnZlciwKKyAgICAgICAgIyBzaW5jZSBydW5zb2Nrc3NlcnZlcigpIHVubGlua3MgcHJldmlvdXMgcGlkZmlsZQorICAgICAgICBpZigha2lsbCgwLCAkcGlkKSkgeworICAgICAgICAgICAgbG9nbXNnICJSVU46IFNPQ0tTIHNlcnZlciBoYXMgZGllZCBhZnRlciBzdGFydGluZyB1cFxuIjsKKyAgICAgICAgICAgIGNoZWNrZGllZCgkcGlkKTsKKyAgICAgICAgICAgIHVubGluaygkcGlkZmlsZSk7CisgICAgICAgICAgICAkcGlkID0gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICRwaWQ7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFZlcmlmeSB0aGF0IHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG9uICRpcCwgJHBvcnQgaXMgb3VyIHNlcnZlci4KKyMgUmV0cnkgb3ZlciBzZXZlcmFsIHNlY29uZHMgYmVmb3JlIGdpdmluZyB1cC4gIFRoZSBzc2ggc2VydmVyIGluCisjIHBhcnRpY3VsYXIgY2FuIHRha2UgYSBsb25nIHRpbWUgdG8gc3RhcnQgaWYgaXQgbmVlZHMgdG8gZ2VuZXJhdGUKKyMga2V5cyBvbiBhIHNsb3cgb3IgbG9hZGVkIGhvc3QuCisjCisjIEp1c3QgZm9yIGNvbnZlbmllbmNlLCB0ZXN0IGhhcm5lc3MgdXNlcyAnaHR0cHMnIGFuZCAnaHR0cHRscycgbGl0ZXJhbHMKKyMgYXMgdmFsdWVzIGZvciAncHJvdG8nIHZhcmlhYmxlIGluIG9yZGVyIHRvIGRpZmZlcmVudGlhdGUgZGlmZmVyZW50CisjIHNlcnZlcnMuICdodHRwcycgbGl0ZXJhbCBpcyB1c2VkIGZvciBzdHVubmVsIGJhc2VkIGh0dHBzIHRlc3Qgc2VydmVycywKKyMgYW5kICdodHRwdGxzJyBpcyB1c2VkIGZvciBub24tc3R1bm5lbCBodHRwcyB0ZXN0IHNlcnZlcnMuCisjCisKK215ICVwcm90b2Z1bmMgPSAoJ2h0dHAnID0+IFwmdmVyaWZ5aHR0cCwKKyAgICAgICAgICAgICAgICAgJ2h0dHBzJyA9PiBcJnZlcmlmeWh0dHAsCisgICAgICAgICAgICAgICAgICdydHNwJyA9PiBcJnZlcmlmeXJ0c3AsCisgICAgICAgICAgICAgICAgICdmdHAnID0+IFwmdmVyaWZ5ZnRwLAorICAgICAgICAgICAgICAgICAncG9wMycgPT4gXCZ2ZXJpZnlmdHAsCisgICAgICAgICAgICAgICAgICdpbWFwJyA9PiBcJnZlcmlmeWZ0cCwKKyAgICAgICAgICAgICAgICAgJ3NtdHAnID0+IFwmdmVyaWZ5ZnRwLAorICAgICAgICAgICAgICAgICAnZnRwcycgPT4gXCZ2ZXJpZnlmdHAsCisgICAgICAgICAgICAgICAgICd0ZnRwJyA9PiBcJnZlcmlmeWZ0cCwKKyAgICAgICAgICAgICAgICAgJ3NzaCcgPT4gXCZ2ZXJpZnlzc2gsCisgICAgICAgICAgICAgICAgICdzb2NrcycgPT4gXCZ2ZXJpZnlzb2NrcywKKyAgICAgICAgICAgICAgICAgJ2dvcGhlcicgPT4gXCZ2ZXJpZnlodHRwLAorICAgICAgICAgICAgICAgICAnaHR0cHRscycgPT4gXCZ2ZXJpZnlodHRwdGxzKTsKKworc3ViIHZlcmlmeXNlcnZlciB7CisgICAgbXkgKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkaXAsICRwb3J0KSA9IEBfOworCisgICAgbXkgJGNvdW50ID0gMzA7ICMgdHJ5IGZvciB0aGlzIG1hbnkgc2Vjb25kcworICAgIG15ICRwaWQ7CisKKyAgICB3aGlsZSgkY291bnQtLSkgeworICAgICAgICBteSAkZnVuID0gJHByb3RvZnVuY3skcHJvdG99OworCisgICAgICAgICRwaWQgPSAmJGZ1bigkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJGlwLCAkcG9ydCk7CisKKyAgICAgICAgaWYoJHBpZCA+IDApIHsKKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJHBpZCA8IDApIHsKKyAgICAgICAgICAgICMgYSByZWFsIGZhaWx1cmUsIHN0b3AgdHJ5aW5nIGFuZCBiYWlsIG91dAorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgc2xlZXAoMSk7CisgICAgfQorICAgIHJldHVybiAkcGlkOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTaW5nbGUgc2hvdCBzZXJ2ZXIgcmVzcG9uc2l2ZW5lc3MgdGVzdC4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkCisjIHRvIHZlcmlmeSB0aGF0IGEgc2VydmVyIHByZXNlbnQgaW4gJXJ1biBoYXNoIGlzIHN0aWxsIGZ1bmN0aW9uYWwKKyMKK3N1YiByZXNwb25zaXZlc2VydmVyIHsKKyAgICBteSAoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICRpcCwgJHBvcnQpID0gQF87CisgICAgbXkgJHByZXZfdmVyYm9zZSA9ICR2ZXJib3NlOworCisgICAgJHZlcmJvc2UgPSAwOworICAgIG15ICRmdW4gPSAkcHJvdG9mdW5jeyRwcm90b307CisgICAgbXkgJHBpZCA9ICYkZnVuKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkaXAsICRwb3J0KTsKKyAgICAkdmVyYm9zZSA9ICRwcmV2X3ZlcmJvc2U7CisKKyAgICBpZigkcGlkID4gMCkgeworICAgICAgICByZXR1cm4gMTsgIyByZXNwb25zaXZlCisgICAgfQorCisgICAgbXkgJHNydnJuYW1lID0gc2VydmVybmFtZV9zdHIoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworICAgIGxvZ21zZyAiIHNlcnZlciBwcmVjaGVjayBGQUlMRUQgKHVucmVzcG9uc2l2ZSAkc3J2cm5hbWUgc2VydmVyKVxuIjsKKyAgICByZXR1cm4gMDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3RhcnQgdGhlIGh0dHAgc2VydmVyCisjCitzdWIgcnVuaHR0cHNlcnZlciB7CisgICAgbXkgKCRwcm90bywgJHZlcmJvc2UsICRhbHQsICRwb3J0KSA9IEBfOworICAgIG15ICRpcCA9ICRIT1NUSVA7CisgICAgbXkgJGlwdm51bSA9IDQ7CisgICAgbXkgJGlkbnVtID0gMTsKKyAgICBteSAkc2VydmVyOworICAgIG15ICRzcnZybmFtZTsKKyAgICBteSAkcGlkZmlsZTsKKyAgICBteSAkbG9nZmlsZTsKKyAgICBteSAkZmxhZ3MgPSAiIjsKKworICAgIGlmKCRhbHQgZXEgImlwdjYiKSB7CisgICAgICAgICMgaWYgSVB2NiwgdXNlIGEgZGlmZmVyZW50IHNldHVwCisgICAgICAgICRpcHZudW0gPSA2OworICAgICAgICAkaXAgPSAkSE9TVDZJUDsKKyAgICB9CisgICAgZWxzaWYoJGFsdCBlcSAicHJveHkiKSB7CisgICAgICAgICMgYmFzaWNhbGx5IHRoZSBzYW1lLCBidXQgYW5vdGhlciBJRAorICAgICAgICAkaWRudW0gPSAyOworICAgIH0KKworICAgICRzZXJ2ZXIgPSBzZXJ2ZXJuYW1lX2lkKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKworICAgICRwaWRmaWxlID0gJHNlcnZlcnBpZGZpbGV7JHNlcnZlcn07CisKKyAgICAjIGRvbid0IHJldHJ5IGlmIHRoZSBzZXJ2ZXIgZG9lc24ndCB3b3JrCisgICAgaWYgKCRkb2VzbnRydW57JHBpZGZpbGV9KSB7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisKKyAgICBteSAkcGlkID0gcHJvY2Vzc2V4aXN0cygkcGlkZmlsZSk7CisgICAgaWYoJHBpZCA+IDApIHsKKyAgICAgICAgc3RvcHNlcnZlcigkc2VydmVyLCAiJHBpZCIpOworICAgIH0KKyAgICB1bmxpbmsoJHBpZGZpbGUpIGlmKC1mICRwaWRmaWxlKTsKKworICAgICRzcnZybmFtZSA9IHNlcnZlcm5hbWVfc3RyKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKworICAgICRsb2dmaWxlID0gc2VydmVyX2xvZ2ZpbGVuYW1lKCRMT0dESVIsICRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKworICAgICRmbGFncyAuPSAiLS1mb3JrICIgaWYoJGZvcmtzZXJ2ZXIpOworICAgICRmbGFncyAuPSAiLS1nb3BoZXIgIiBpZigkcHJvdG8gZXEgImdvcGhlciIpOworICAgICRmbGFncyAuPSAiLS1jb25uZWN0ICRIT1NUSVAgIiBpZigkYWx0IGVxICJwcm94eSIpOworICAgICRmbGFncyAuPSAiLS12ZXJib3NlICIgaWYoJGRlYnVncHJvdG9jb2wpOworICAgICRmbGFncyAuPSAiLS1waWRmaWxlIFwiJHBpZGZpbGVcIiAtLWxvZ2ZpbGUgXCIkbG9nZmlsZVwiICI7CisgICAgJGZsYWdzIC49ICItLWlkICRpZG51bSAiIGlmKCRpZG51bSA+IDEpOworICAgICRmbGFncyAuPSAiLS1pcHYkaXB2bnVtIC0tcG9ydCAkcG9ydCAtLXNyY2RpciBcIiRzcmNkaXJcIiI7CisKKyAgICBteSAkY21kID0gIiRwZXJsICRzcmNkaXIvaHR0cHNlcnZlci5wbCAkZmxhZ3MiOworICAgIG15ICgkaHR0cHBpZCwgJHBpZDIpID0gc3RhcnRuZXcoJGNtZCwgJHBpZGZpbGUsIDE1LCAwKTsKKworICAgIGlmKCRodHRwcGlkIDw9IDAgfHwgIWtpbGwoMCwgJGh0dHBwaWQpKSB7CisgICAgICAgICMgaXQgaXMgTk9UIGFsaXZlCisgICAgICAgIGxvZ21zZyAiUlVOOiBmYWlsZWQgdG8gc3RhcnQgdGhlICRzcnZybmFtZSBzZXJ2ZXJcbiI7CisgICAgICAgIHN0b3BzZXJ2ZXIoJHNlcnZlciwgIiRwaWQyIik7CisgICAgICAgIGRpc3BsYXlsb2dzKCR0ZXN0bnVtY2hlY2spOworICAgICAgICAkZG9lc250cnVueyRwaWRmaWxlfSA9IDE7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisKKyAgICAjIFNlcnZlciBpcyB1cC4gVmVyaWZ5IHRoYXQgd2UgY2FuIHNwZWFrIHRvIGl0LgorICAgIG15ICRwaWQzID0gdmVyaWZ5c2VydmVyKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkaXAsICRwb3J0KTsKKyAgICBpZighJHBpZDMpIHsKKyAgICAgICAgbG9nbXNnICJSVU46ICRzcnZybmFtZSBzZXJ2ZXIgZmFpbGVkIHZlcmlmaWNhdGlvblxuIjsKKyAgICAgICAgIyBmYWlsZWQgdG8gdGFsayB0byBpdCBwcm9wZXJseS4gS2lsbCB0aGUgc2VydmVyIGFuZCByZXR1cm4gZmFpbHVyZQorICAgICAgICBzdG9wc2VydmVyKCRzZXJ2ZXIsICIkaHR0cHBpZCAkcGlkMiIpOworICAgICAgICBkaXNwbGF5bG9ncygkdGVzdG51bWNoZWNrKTsKKyAgICAgICAgJGRvZXNudHJ1bnskcGlkZmlsZX0gPSAxOworICAgICAgICByZXR1cm4gKDAsMCk7CisgICAgfQorICAgICRwaWQyID0gJHBpZDM7CisKKyAgICBpZigkdmVyYm9zZSkgeworICAgICAgICBsb2dtc2cgIlJVTjogJHNydnJuYW1lIHNlcnZlciBpcyBub3cgcnVubmluZyBQSUQgJGh0dHBwaWRcbiI7CisgICAgfQorCisgICAgc2xlZXAoMSk7CisKKyAgICByZXR1cm4gKCRodHRwcGlkLCAkcGlkMik7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHN0YXJ0IHRoZSBodHRwcyBzdHVubmVsIGJhc2VkIHNlcnZlcgorIworc3ViIHJ1bmh0dHBzc2VydmVyIHsKKyAgICBteSAoJHZlcmJvc2UsICRpcHY2LCAkY2VydGZpbGUpID0gQF87CisgICAgbXkgJHByb3RvID0gJ2h0dHBzJzsKKyAgICBteSAkaXAgPSAoJGlwdjYgJiYgKCRpcHY2ID1+IC82JC8pKSA/ICIkSE9TVDZJUCIgOiAiJEhPU1RJUCI7CisgICAgbXkgJGlwdm51bSA9ICgkaXB2NiAmJiAoJGlwdjYgPX4gLzYkLykpID8gNiA6IDQ7CisgICAgbXkgJGlkbnVtID0gMTsKKyAgICBteSAkc2VydmVyOworICAgIG15ICRzcnZybmFtZTsKKyAgICBteSAkcGlkZmlsZTsKKyAgICBteSAkbG9nZmlsZTsKKyAgICBteSAkZmxhZ3MgPSAiIjsKKworICAgIGlmKCEkc3R1bm5lbCkgeworICAgICAgICByZXR1cm4gKDAsMCk7CisgICAgfQorCisgICAgJHNlcnZlciA9IHNlcnZlcm5hbWVfaWQoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworCisgICAgJHBpZGZpbGUgPSAkc2VydmVycGlkZmlsZXskc2VydmVyfTsKKworICAgICMgZG9uJ3QgcmV0cnkgaWYgdGhlIHNlcnZlciBkb2Vzbid0IHdvcmsKKyAgICBpZiAoJGRvZXNudHJ1bnskcGlkZmlsZX0pIHsKKyAgICAgICAgcmV0dXJuICgwLDApOworICAgIH0KKworICAgIG15ICRwaWQgPSBwcm9jZXNzZXhpc3RzKCRwaWRmaWxlKTsKKyAgICBpZigkcGlkID4gMCkgeworICAgICAgICBzdG9wc2VydmVyKCRzZXJ2ZXIsICIkcGlkIik7CisgICAgfQorICAgIHVubGluaygkcGlkZmlsZSkgaWYoLWYgJHBpZGZpbGUpOworCisgICAgJHNydnJuYW1lID0gc2VydmVybmFtZV9zdHIoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworCisgICAgJGNlcnRmaWxlID0gJ3N0dW5uZWwucGVtJyB1bmxlc3MoJGNlcnRmaWxlKTsKKworICAgICRsb2dmaWxlID0gc2VydmVyX2xvZ2ZpbGVuYW1lKCRMT0dESVIsICRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKworICAgICRmbGFncyAuPSAiLS12ZXJib3NlICIgaWYoJGRlYnVncHJvdG9jb2wpOworICAgICRmbGFncyAuPSAiLS1waWRmaWxlIFwiJHBpZGZpbGVcIiAtLWxvZ2ZpbGUgXCIkbG9nZmlsZVwiICI7CisgICAgJGZsYWdzIC49ICItLWlkICRpZG51bSAiIGlmKCRpZG51bSA+IDEpOworICAgICRmbGFncyAuPSAiLS1pcHYkaXB2bnVtIC0tcHJvdG8gJHByb3RvICI7CisgICAgJGZsYWdzIC49ICItLWNlcnRmaWxlIFwiJGNlcnRmaWxlXCIgIiBpZigkY2VydGZpbGUgbmUgJ3N0dW5uZWwucGVtJyk7CisgICAgJGZsYWdzIC49ICItLXN0dW5uZWwgXCIkc3R1bm5lbFwiIC0tc3JjZGlyIFwiJHNyY2RpclwiICI7CisgICAgJGZsYWdzIC49ICItLWNvbm5lY3QgJEhUVFBQT1JUIC0tYWNjZXB0ICRIVFRQU1BPUlQiOworCisgICAgbXkgJGNtZCA9ICIkcGVybCAkc3JjZGlyL3NlY3VyZXNlcnZlci5wbCAkZmxhZ3MiOworICAgIG15ICgkaHR0cHNwaWQsICRwaWQyKSA9IHN0YXJ0bmV3KCRjbWQsICRwaWRmaWxlLCAxNSwgMCk7CisKKyAgICBpZigkaHR0cHNwaWQgPD0gMCB8fCAha2lsbCgwLCAkaHR0cHNwaWQpKSB7CisgICAgICAgICMgaXQgaXMgTk9UIGFsaXZlCisgICAgICAgIGxvZ21zZyAiUlVOOiBmYWlsZWQgdG8gc3RhcnQgdGhlICRzcnZybmFtZSBzZXJ2ZXJcbiI7CisgICAgICAgIHN0b3BzZXJ2ZXIoJHNlcnZlciwgIiRwaWQyIik7CisgICAgICAgIGRpc3BsYXlsb2dzKCR0ZXN0bnVtY2hlY2spOworICAgICAgICAkZG9lc250cnVueyRwaWRmaWxlfSA9IDE7CisgICAgICAgIHJldHVybigwLDApOworICAgIH0KKworICAgICMgU2VydmVyIGlzIHVwLiBWZXJpZnkgdGhhdCB3ZSBjYW4gc3BlYWsgdG8gaXQuCisgICAgbXkgJHBpZDMgPSB2ZXJpZnlzZXJ2ZXIoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICRpcCwgJEhUVFBTUE9SVCk7CisgICAgaWYoISRwaWQzKSB7CisgICAgICAgIGxvZ21zZyAiUlVOOiAkc3J2cm5hbWUgc2VydmVyIGZhaWxlZCB2ZXJpZmljYXRpb25cbiI7CisgICAgICAgICMgZmFpbGVkIHRvIHRhbGsgdG8gaXQgcHJvcGVybHkuIEtpbGwgdGhlIHNlcnZlciBhbmQgcmV0dXJuIGZhaWx1cmUKKyAgICAgICAgc3RvcHNlcnZlcigkc2VydmVyLCAiJGh0dHBzcGlkICRwaWQyIik7CisgICAgICAgIGRpc3BsYXlsb2dzKCR0ZXN0bnVtY2hlY2spOworICAgICAgICAkZG9lc250cnVueyRwaWRmaWxlfSA9IDE7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisgICAgIyBIZXJlIHBpZDMgaXMgYWN0dWFsbHkgdGhlIHBpZCByZXR1cm5lZCBieSB0aGUgdW5zZWN1cmUtaHR0cCBzZXJ2ZXIuCisKKyAgICAkcnVuY2VydHskc2VydmVyfSA9ICRjZXJ0ZmlsZTsKKworICAgIGlmKCR2ZXJib3NlKSB7CisgICAgICAgIGxvZ21zZyAiUlVOOiAkc3J2cm5hbWUgc2VydmVyIGlzIG5vdyBydW5uaW5nIFBJRCAkaHR0cHNwaWRcbiI7CisgICAgfQorCisgICAgc2xlZXAoMSk7CisKKyAgICByZXR1cm4gKCRodHRwc3BpZCwgJHBpZDIpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzdGFydCB0aGUgbm9uLXN0dW5uZWwgSFRUUCBUTFMgZXh0ZW5zaW9ucyBjYXBhYmxlIHNlcnZlcgorIworc3ViIHJ1bmh0dHB0bHNzZXJ2ZXIgeworICAgIG15ICgkdmVyYm9zZSwgJGlwdjYpID0gQF87CisgICAgbXkgJHByb3RvID0gImh0dHB0bHMiOworICAgIG15ICRwb3J0ID0gKCRpcHY2ICYmICgkaXB2NiA9fiAvNiQvKSkgPyAkSFRUUFRMUzZQT1JUIDogJEhUVFBUTFNQT1JUOworICAgIG15ICRpcCA9ICgkaXB2NiAmJiAoJGlwdjYgPX4gLzYkLykpID8gIiRIT1NUNklQIiA6ICIkSE9TVElQIjsKKyAgICBteSAkaXB2bnVtID0gKCRpcHY2ICYmICgkaXB2NiA9fiAvNiQvKSkgPyA2IDogNDsKKyAgICBteSAkaWRudW0gPSAxOworICAgIG15ICRzZXJ2ZXI7CisgICAgbXkgJHNydnJuYW1lOworICAgIG15ICRwaWRmaWxlOworICAgIG15ICRsb2dmaWxlOworICAgIG15ICRmbGFncyA9ICIiOworCisgICAgaWYoISRodHRwdGxzc3J2KSB7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisKKyAgICAkc2VydmVyID0gc2VydmVybmFtZV9pZCgkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisKKyAgICAkcGlkZmlsZSA9ICRzZXJ2ZXJwaWRmaWxleyRzZXJ2ZXJ9OworCisgICAgIyBkb24ndCByZXRyeSBpZiB0aGUgc2VydmVyIGRvZXNuJ3Qgd29yaworICAgIGlmICgkZG9lc250cnVueyRwaWRmaWxlfSkgeworICAgICAgICByZXR1cm4gKDAsMCk7CisgICAgfQorCisgICAgbXkgJHBpZCA9IHByb2Nlc3NleGlzdHMoJHBpZGZpbGUpOworICAgIGlmKCRwaWQgPiAwKSB7CisgICAgICAgIHN0b3BzZXJ2ZXIoJHNlcnZlciwgIiRwaWQiKTsKKyAgICB9CisgICAgdW5saW5rKCRwaWRmaWxlKSBpZigtZiAkcGlkZmlsZSk7CisKKyAgICAkc3J2cm5hbWUgPSBzZXJ2ZXJuYW1lX3N0cigkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisKKyAgICAkbG9nZmlsZSA9IHNlcnZlcl9sb2dmaWxlbmFtZSgkTE9HRElSLCAkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisKKyAgICAkZmxhZ3MgLj0gIi0taHR0cCAiOworICAgICRmbGFncyAuPSAiLS1kZWJ1ZyAxICIgaWYoJGRlYnVncHJvdG9jb2wpOworICAgICRmbGFncyAuPSAiLS1wb3J0ICRwb3J0ICI7CisgICAgJGZsYWdzIC49ICItLXNycHBhc3N3ZCBjZXJ0cy9zcnAtdmVyaWZpZXItZGIgIjsKKyAgICAkZmxhZ3MgLj0gIi0tc3JwcGFzc3dkY29uZiBjZXJ0cy9zcnAtdmVyaWZpZXItY29uZiI7CisKKyAgICBteSAkY21kID0gIiRodHRwdGxzc3J2ICRmbGFncyA+ICRsb2dmaWxlIDI+JjEiOworICAgIG15ICgkaHR0cHRsc3BpZCwgJHBpZDIpID0gc3RhcnRuZXcoJGNtZCwgJHBpZGZpbGUsIDEwLCAxKTsgIyBmYWtlIHBpZGZpbGUKKworICAgIGlmKCRodHRwdGxzcGlkIDw9IDAgfHwgIWtpbGwoMCwgJGh0dHB0bHNwaWQpKSB7CisgICAgICAgICMgaXQgaXMgTk9UIGFsaXZlCisgICAgICAgIGxvZ21zZyAiUlVOOiBmYWlsZWQgdG8gc3RhcnQgdGhlICRzcnZybmFtZSBzZXJ2ZXJcbiI7CisgICAgICAgIHN0b3BzZXJ2ZXIoJHNlcnZlciwgIiRwaWQyIik7CisgICAgICAgIGRpc3BsYXlsb2dzKCR0ZXN0bnVtY2hlY2spOworICAgICAgICAkZG9lc250cnVueyRwaWRmaWxlfSA9IDE7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisKKyAgICAjIFNlcnZlciBpcyB1cC4gVmVyaWZ5IHRoYXQgd2UgY2FuIHNwZWFrIHRvIGl0LiBQSUQgaXMgZnJvbSBmYWtlIHBpZGZpbGUKKyAgICBteSAkcGlkMyA9IHZlcmlmeXNlcnZlcigkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJGlwLCAkcG9ydCk7CisgICAgaWYoISRwaWQzKSB7CisgICAgICAgIGxvZ21zZyAiUlVOOiAkc3J2cm5hbWUgc2VydmVyIGZhaWxlZCB2ZXJpZmljYXRpb25cbiI7CisgICAgICAgICMgZmFpbGVkIHRvIHRhbGsgdG8gaXQgcHJvcGVybHkuIEtpbGwgdGhlIHNlcnZlciBhbmQgcmV0dXJuIGZhaWx1cmUKKyAgICAgICAgc3RvcHNlcnZlcigkc2VydmVyLCAiJGh0dHB0bHNwaWQgJHBpZDIiKTsKKyAgICAgICAgZGlzcGxheWxvZ3MoJHRlc3RudW1jaGVjayk7CisgICAgICAgICRkb2VzbnRydW57JHBpZGZpbGV9ID0gMTsKKyAgICAgICAgcmV0dXJuICgwLDApOworICAgIH0KKyAgICAkcGlkMiA9ICRwaWQzOworCisgICAgaWYoJHZlcmJvc2UpIHsKKyAgICAgICAgbG9nbXNnICJSVU46ICRzcnZybmFtZSBzZXJ2ZXIgaXMgbm93IHJ1bm5pbmcgUElEICRodHRwdGxzcGlkXG4iOworICAgIH0KKworICAgIHNsZWVwKDEpOworCisgICAgcmV0dXJuICgkaHR0cHRsc3BpZCwgJHBpZDIpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzdGFydCB0aGUgcGluZ3Bvbmcgc2VydmVyIChGVFAsIFBPUDMsIElNQVAsIFNNVFApCisjCitzdWIgcnVucGluZ3BvbmdzZXJ2ZXIgeworICAgIG15ICgkcHJvdG8sICRpZCwgJHZlcmJvc2UsICRpcHY2KSA9IEBfOworICAgIG15ICRwb3J0OworICAgIG15ICRpcCA9ICgkaXB2NiAmJiAoJGlwdjYgPX4gLzYkLykpID8gIiRIT1NUNklQIiA6ICIkSE9TVElQIjsKKyAgICBteSAkaXB2bnVtID0gKCRpcHY2ICYmICgkaXB2NiA9fiAvNiQvKSkgPyA2IDogNDsKKyAgICBteSAkaWRudW0gPSAoJGlkICYmICgkaWQgPX4gL14oXGQrKSQvKSAmJiAoJGlkID4gMSkpID8gJGlkIDogMTsKKyAgICBteSAkc2VydmVyOworICAgIG15ICRzcnZybmFtZTsKKyAgICBteSAkcGlkZmlsZTsKKyAgICBteSAkbG9nZmlsZTsKKyAgICBteSAkZmxhZ3MgPSAiIjsKKworICAgIGlmKCRwcm90byBlcSAiZnRwIikgeworICAgICAgICAkcG9ydCA9ICgkaWRudW0+MSk/JEZUUDJQT1JUOiRGVFBQT1JUOworCisgICAgICAgIGlmKCRpcHZudW09PTYpIHsKKyAgICAgICAgICAgICMgaWYgSVB2NiwgdXNlIGEgZGlmZmVyZW50IHNldHVwCisgICAgICAgICAgICAkcG9ydCA9ICRGVFA2UE9SVDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZigkcHJvdG8gZXEgInBvcDMiKSB7CisgICAgICAgICRwb3J0ID0gKCRpcHZudW09PTYpID8gJFBPUDM2UE9SVCA6ICRQT1AzUE9SVDsKKyAgICB9CisgICAgZWxzaWYoJHByb3RvIGVxICJpbWFwIikgeworICAgICAgICAkcG9ydCA9ICgkaXB2bnVtPT02KSA/ICRJTUFQNlBPUlQgOiAkSU1BUFBPUlQ7CisgICAgfQorICAgIGVsc2lmKCRwcm90byBlcSAic210cCIpIHsKKyAgICAgICAgJHBvcnQgPSAoJGlwdm51bT09NikgPyAkU01UUDZQT1JUIDogJFNNVFBQT1JUOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgU1RERVJSICJVbnN1cHBvcnRlZCBwcm90b2NvbCAkcHJvdG8hIVxuIjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgJHNlcnZlciA9IHNlcnZlcm5hbWVfaWQoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworCisgICAgJHBpZGZpbGUgPSAkc2VydmVycGlkZmlsZXskc2VydmVyfTsKKworICAgICMgZG9uJ3QgcmV0cnkgaWYgdGhlIHNlcnZlciBkb2Vzbid0IHdvcmsKKyAgICBpZiAoJGRvZXNudHJ1bnskcGlkZmlsZX0pIHsKKyAgICAgICAgcmV0dXJuICgwLDApOworICAgIH0KKworICAgIG15ICRwaWQgPSBwcm9jZXNzZXhpc3RzKCRwaWRmaWxlKTsKKyAgICBpZigkcGlkID4gMCkgeworICAgICAgICBzdG9wc2VydmVyKCRzZXJ2ZXIsICIkcGlkIik7CisgICAgfQorICAgIHVubGluaygkcGlkZmlsZSkgaWYoLWYgJHBpZGZpbGUpOworCisgICAgJHNydnJuYW1lID0gc2VydmVybmFtZV9zdHIoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworCisgICAgJGxvZ2ZpbGUgPSBzZXJ2ZXJfbG9nZmlsZW5hbWUoJExPR0RJUiwgJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworCisgICAgJGZsYWdzIC49ICItLXZlcmJvc2UgIiBpZigkZGVidWdwcm90b2NvbCk7CisgICAgJGZsYWdzIC49ICItLXBpZGZpbGUgXCIkcGlkZmlsZVwiIC0tbG9nZmlsZSBcIiRsb2dmaWxlXCIgIjsKKyAgICAkZmxhZ3MgLj0gIi0tc3JjZGlyIFwiJHNyY2RpclwiIC0tcHJvdG8gJHByb3RvICI7CisgICAgJGZsYWdzIC49ICItLWlkICRpZG51bSAiIGlmKCRpZG51bSA+IDEpOworICAgICRmbGFncyAuPSAiLS1pcHYkaXB2bnVtIC0tcG9ydCAkcG9ydCAtLWFkZHIgXCIkaXBcIiI7CisKKyAgICBteSAkY21kID0gIiRwZXJsICRzcmNkaXIvZnRwc2VydmVyLnBsICRmbGFncyI7CisgICAgbXkgKCRmdHBwaWQsICRwaWQyKSA9IHN0YXJ0bmV3KCRjbWQsICRwaWRmaWxlLCAxNSwgMCk7CisKKyAgICBpZigkZnRwcGlkIDw9IDAgfHwgIWtpbGwoMCwgJGZ0cHBpZCkpIHsKKyAgICAgICAgIyBpdCBpcyBOT1QgYWxpdmUKKyAgICAgICAgbG9nbXNnICJSVU46IGZhaWxlZCB0byBzdGFydCB0aGUgJHNydnJuYW1lIHNlcnZlclxuIjsKKyAgICAgICAgc3RvcHNlcnZlcigkc2VydmVyLCAiJHBpZDIiKTsKKyAgICAgICAgZGlzcGxheWxvZ3MoJHRlc3RudW1jaGVjayk7CisgICAgICAgICRkb2VzbnRydW57JHBpZGZpbGV9ID0gMTsKKyAgICAgICAgcmV0dXJuICgwLDApOworICAgIH0KKworICAgICMgU2VydmVyIGlzIHVwLiBWZXJpZnkgdGhhdCB3ZSBjYW4gc3BlYWsgdG8gaXQuCisgICAgbXkgJHBpZDMgPSB2ZXJpZnlzZXJ2ZXIoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICRpcCwgJHBvcnQpOworICAgIGlmKCEkcGlkMykgeworICAgICAgICBsb2dtc2cgIlJVTjogJHNydnJuYW1lIHNlcnZlciBmYWlsZWQgdmVyaWZpY2F0aW9uXG4iOworICAgICAgICAjIGZhaWxlZCB0byB0YWxrIHRvIGl0IHByb3Blcmx5LiBLaWxsIHRoZSBzZXJ2ZXIgYW5kIHJldHVybiBmYWlsdXJlCisgICAgICAgIHN0b3BzZXJ2ZXIoJHNlcnZlciwgIiRmdHBwaWQgJHBpZDIiKTsKKyAgICAgICAgZGlzcGxheWxvZ3MoJHRlc3RudW1jaGVjayk7CisgICAgICAgICRkb2VzbnRydW57JHBpZGZpbGV9ID0gMTsKKyAgICAgICAgcmV0dXJuICgwLDApOworICAgIH0KKworICAgICRwaWQyID0gJHBpZDM7CisKKyAgICBpZigkdmVyYm9zZSkgeworICAgICAgICBsb2dtc2cgIlJVTjogJHNydnJuYW1lIHNlcnZlciBpcyBub3cgcnVubmluZyBQSUQgJGZ0cHBpZFxuIjsKKyAgICB9CisKKyAgICBzbGVlcCgxKTsKKworICAgIHJldHVybiAoJHBpZDIsICRmdHBwaWQpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzdGFydCB0aGUgZnRwcyBzZXJ2ZXIgKG9yIHJhdGhlciwgdHVubmVsKQorIworc3ViIHJ1bmZ0cHNzZXJ2ZXIgeworICAgIG15ICgkdmVyYm9zZSwgJGlwdjYsICRjZXJ0ZmlsZSkgPSBAXzsKKyAgICBteSAkcHJvdG8gPSAnZnRwcyc7CisgICAgbXkgJGlwID0gKCRpcHY2ICYmICgkaXB2NiA9fiAvNiQvKSkgPyAiJEhPU1Q2SVAiIDogIiRIT1NUSVAiOworICAgIG15ICRpcHZudW0gPSAoJGlwdjYgJiYgKCRpcHY2ID1+IC82JC8pKSA/IDYgOiA0OworICAgIG15ICRpZG51bSA9IDE7CisgICAgbXkgJHNlcnZlcjsKKyAgICBteSAkc3J2cm5hbWU7CisgICAgbXkgJHBpZGZpbGU7CisgICAgbXkgJGxvZ2ZpbGU7CisgICAgbXkgJGZsYWdzID0gIiI7CisKKyAgICBpZighJHN0dW5uZWwpIHsKKyAgICAgICAgcmV0dXJuICgwLDApOworICAgIH0KKworICAgICRzZXJ2ZXIgPSBzZXJ2ZXJuYW1lX2lkKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKworICAgICRwaWRmaWxlID0gJHNlcnZlcnBpZGZpbGV7JHNlcnZlcn07CisKKyAgICAjIGRvbid0IHJldHJ5IGlmIHRoZSBzZXJ2ZXIgZG9lc24ndCB3b3JrCisgICAgaWYgKCRkb2VzbnRydW57JHBpZGZpbGV9KSB7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisKKyAgICBteSAkcGlkID0gcHJvY2Vzc2V4aXN0cygkcGlkZmlsZSk7CisgICAgaWYoJHBpZCA+IDApIHsKKyAgICAgICAgc3RvcHNlcnZlcigkc2VydmVyLCAiJHBpZCIpOworICAgIH0KKyAgICB1bmxpbmsoJHBpZGZpbGUpIGlmKC1mICRwaWRmaWxlKTsKKworICAgICRzcnZybmFtZSA9IHNlcnZlcm5hbWVfc3RyKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKworICAgICRjZXJ0ZmlsZSA9ICdzdHVubmVsLnBlbScgdW5sZXNzKCRjZXJ0ZmlsZSk7CisKKyAgICAkbG9nZmlsZSA9IHNlcnZlcl9sb2dmaWxlbmFtZSgkTE9HRElSLCAkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisKKyAgICAkZmxhZ3MgLj0gIi0tdmVyYm9zZSAiIGlmKCRkZWJ1Z3Byb3RvY29sKTsKKyAgICAkZmxhZ3MgLj0gIi0tcGlkZmlsZSBcIiRwaWRmaWxlXCIgLS1sb2dmaWxlIFwiJGxvZ2ZpbGVcIiAiOworICAgICRmbGFncyAuPSAiLS1pZCAkaWRudW0gIiBpZigkaWRudW0gPiAxKTsKKyAgICAkZmxhZ3MgLj0gIi0taXB2JGlwdm51bSAtLXByb3RvICRwcm90byAiOworICAgICRmbGFncyAuPSAiLS1jZXJ0ZmlsZSBcIiRjZXJ0ZmlsZVwiICIgaWYoJGNlcnRmaWxlIG5lICdzdHVubmVsLnBlbScpOworICAgICRmbGFncyAuPSAiLS1zdHVubmVsIFwiJHN0dW5uZWxcIiAtLXNyY2RpciBcIiRzcmNkaXJcIiAiOworICAgICRmbGFncyAuPSAiLS1jb25uZWN0ICRGVFBQT1JUIC0tYWNjZXB0ICRGVFBTUE9SVCI7CisKKyAgICBteSAkY21kID0gIiRwZXJsICRzcmNkaXIvc2VjdXJlc2VydmVyLnBsICRmbGFncyI7CisgICAgbXkgKCRmdHBzcGlkLCAkcGlkMikgPSBzdGFydG5ldygkY21kLCAkcGlkZmlsZSwgMTUsIDApOworCisgICAgaWYoJGZ0cHNwaWQgPD0gMCB8fCAha2lsbCgwLCAkZnRwc3BpZCkpIHsKKyAgICAgICAgIyBpdCBpcyBOT1QgYWxpdmUKKyAgICAgICAgbG9nbXNnICJSVU46IGZhaWxlZCB0byBzdGFydCB0aGUgJHNydnJuYW1lIHNlcnZlclxuIjsKKyAgICAgICAgc3RvcHNlcnZlcigkc2VydmVyLCAiJHBpZDIiKTsKKyAgICAgICAgZGlzcGxheWxvZ3MoJHRlc3RudW1jaGVjayk7CisgICAgICAgICRkb2VzbnRydW57JHBpZGZpbGV9ID0gMTsKKyAgICAgICAgcmV0dXJuKDAsMCk7CisgICAgfQorCisgICAgIyBTZXJ2ZXIgaXMgdXAuIFZlcmlmeSB0aGF0IHdlIGNhbiBzcGVhayB0byBpdC4KKyAgICBteSAkcGlkMyA9IHZlcmlmeXNlcnZlcigkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJGlwLCAkRlRQU1BPUlQpOworICAgIGlmKCEkcGlkMykgeworICAgICAgICBsb2dtc2cgIlJVTjogJHNydnJuYW1lIHNlcnZlciBmYWlsZWQgdmVyaWZpY2F0aW9uXG4iOworICAgICAgICAjIGZhaWxlZCB0byB0YWxrIHRvIGl0IHByb3Blcmx5LiBLaWxsIHRoZSBzZXJ2ZXIgYW5kIHJldHVybiBmYWlsdXJlCisgICAgICAgIHN0b3BzZXJ2ZXIoJHNlcnZlciwgIiRmdHBzcGlkICRwaWQyIik7CisgICAgICAgIGRpc3BsYXlsb2dzKCR0ZXN0bnVtY2hlY2spOworICAgICAgICAkZG9lc250cnVueyRwaWRmaWxlfSA9IDE7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisgICAgIyBIZXJlIHBpZDMgaXMgYWN0dWFsbHkgdGhlIHBpZCByZXR1cm5lZCBieSB0aGUgdW5zZWN1cmUtZnRwIHNlcnZlci4KKworICAgICRydW5jZXJ0eyRzZXJ2ZXJ9ID0gJGNlcnRmaWxlOworCisgICAgaWYoJHZlcmJvc2UpIHsKKyAgICAgICAgbG9nbXNnICJSVU46ICRzcnZybmFtZSBzZXJ2ZXIgaXMgbm93IHJ1bm5pbmcgUElEICRmdHBzcGlkXG4iOworICAgIH0KKworICAgIHNsZWVwKDEpOworCisgICAgcmV0dXJuICgkZnRwc3BpZCwgJHBpZDIpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzdGFydCB0aGUgdGZ0cCBzZXJ2ZXIKKyMKK3N1YiBydW50ZnRwc2VydmVyIHsKKyAgICBteSAoJGlkLCAkdmVyYm9zZSwgJGlwdjYpID0gQF87CisgICAgbXkgJHBvcnQgPSAkVEZUUFBPUlQ7CisgICAgbXkgJGlwID0gJEhPU1RJUDsKKyAgICBteSAkcHJvdG8gPSAndGZ0cCc7CisgICAgbXkgJGlwdm51bSA9IDQ7CisgICAgbXkgJGlkbnVtID0gKCRpZCAmJiAoJGlkID1+IC9eKFxkKykkLykgJiYgKCRpZCA+IDEpKSA/ICRpZCA6IDE7CisgICAgbXkgJHNlcnZlcjsKKyAgICBteSAkc3J2cm5hbWU7CisgICAgbXkgJHBpZGZpbGU7CisgICAgbXkgJGxvZ2ZpbGU7CisgICAgbXkgJGZsYWdzID0gIiI7CisKKyAgICBpZigkaXB2NikgeworICAgICAgICAjIGlmIElQdjYsIHVzZSBhIGRpZmZlcmVudCBzZXR1cAorICAgICAgICAkaXB2bnVtID0gNjsKKyAgICAgICAgJHBvcnQgPSAkVEZUUDZQT1JUOworICAgICAgICAkaXAgPSAkSE9TVDZJUDsKKyAgICB9CisKKyAgICAkc2VydmVyID0gc2VydmVybmFtZV9pZCgkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisKKyAgICAkcGlkZmlsZSA9ICRzZXJ2ZXJwaWRmaWxleyRzZXJ2ZXJ9OworCisgICAgIyBkb24ndCByZXRyeSBpZiB0aGUgc2VydmVyIGRvZXNuJ3Qgd29yaworICAgIGlmICgkZG9lc250cnVueyRwaWRmaWxlfSkgeworICAgICAgICByZXR1cm4gKDAsMCk7CisgICAgfQorCisgICAgbXkgJHBpZCA9IHByb2Nlc3NleGlzdHMoJHBpZGZpbGUpOworICAgIGlmKCRwaWQgPiAwKSB7CisgICAgICAgIHN0b3BzZXJ2ZXIoJHNlcnZlciwgIiRwaWQiKTsKKyAgICB9CisgICAgdW5saW5rKCRwaWRmaWxlKSBpZigtZiAkcGlkZmlsZSk7CisKKyAgICAkc3J2cm5hbWUgPSBzZXJ2ZXJuYW1lX3N0cigkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisKKyAgICAkbG9nZmlsZSA9IHNlcnZlcl9sb2dmaWxlbmFtZSgkTE9HRElSLCAkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisKKyAgICAkZmxhZ3MgLj0gIi0tdmVyYm9zZSAiIGlmKCRkZWJ1Z3Byb3RvY29sKTsKKyAgICAkZmxhZ3MgLj0gIi0tcGlkZmlsZSBcIiRwaWRmaWxlXCIgLS1sb2dmaWxlIFwiJGxvZ2ZpbGVcIiAiOworICAgICRmbGFncyAuPSAiLS1pZCAkaWRudW0gIiBpZigkaWRudW0gPiAxKTsKKyAgICAkZmxhZ3MgLj0gIi0taXB2JGlwdm51bSAtLXBvcnQgJHBvcnQgLS1zcmNkaXIgXCIkc3JjZGlyXCIiOworCisgICAgbXkgJGNtZCA9ICIkcGVybCAkc3JjZGlyL3RmdHBzZXJ2ZXIucGwgJGZsYWdzIjsKKyAgICBteSAoJHRmdHBwaWQsICRwaWQyKSA9IHN0YXJ0bmV3KCRjbWQsICRwaWRmaWxlLCAxNSwgMCk7CisKKyAgICBpZigkdGZ0cHBpZCA8PSAwIHx8ICFraWxsKDAsICR0ZnRwcGlkKSkgeworICAgICAgICAjIGl0IGlzIE5PVCBhbGl2ZQorICAgICAgICBsb2dtc2cgIlJVTjogZmFpbGVkIHRvIHN0YXJ0IHRoZSAkc3J2cm5hbWUgc2VydmVyXG4iOworICAgICAgICBzdG9wc2VydmVyKCRzZXJ2ZXIsICIkcGlkMiIpOworICAgICAgICBkaXNwbGF5bG9ncygkdGVzdG51bWNoZWNrKTsKKyAgICAgICAgJGRvZXNudHJ1bnskcGlkZmlsZX0gPSAxOworICAgICAgICByZXR1cm4gKDAsMCk7CisgICAgfQorCisgICAgIyBTZXJ2ZXIgaXMgdXAuIFZlcmlmeSB0aGF0IHdlIGNhbiBzcGVhayB0byBpdC4KKyAgICBteSAkcGlkMyA9IHZlcmlmeXNlcnZlcigkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJGlwLCAkcG9ydCk7CisgICAgaWYoISRwaWQzKSB7CisgICAgICAgIGxvZ21zZyAiUlVOOiAkc3J2cm5hbWUgc2VydmVyIGZhaWxlZCB2ZXJpZmljYXRpb25cbiI7CisgICAgICAgICMgZmFpbGVkIHRvIHRhbGsgdG8gaXQgcHJvcGVybHkuIEtpbGwgdGhlIHNlcnZlciBhbmQgcmV0dXJuIGZhaWx1cmUKKyAgICAgICAgc3RvcHNlcnZlcigkc2VydmVyLCAiJHRmdHBwaWQgJHBpZDIiKTsKKyAgICAgICAgZGlzcGxheWxvZ3MoJHRlc3RudW1jaGVjayk7CisgICAgICAgICRkb2VzbnRydW57JHBpZGZpbGV9ID0gMTsKKyAgICAgICAgcmV0dXJuICgwLDApOworICAgIH0KKyAgICAkcGlkMiA9ICRwaWQzOworCisgICAgaWYoJHZlcmJvc2UpIHsKKyAgICAgICAgbG9nbXNnICJSVU46ICRzcnZybmFtZSBzZXJ2ZXIgaXMgbm93IHJ1bm5pbmcgUElEICR0ZnRwcGlkXG4iOworICAgIH0KKworICAgIHNsZWVwKDEpOworCisgICAgcmV0dXJuICgkcGlkMiwgJHRmdHBwaWQpOworfQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHN0YXJ0IHRoZSBydHNwIHNlcnZlcgorIworc3ViIHJ1bnJ0c3BzZXJ2ZXIgeworICAgIG15ICgkdmVyYm9zZSwgJGlwdjYpID0gQF87CisgICAgbXkgJHBvcnQgPSAkUlRTUFBPUlQ7CisgICAgbXkgJGlwID0gJEhPU1RJUDsKKyAgICBteSAkcHJvdG8gPSAncnRzcCc7CisgICAgbXkgJGlwdm51bSA9IDQ7CisgICAgbXkgJGlkbnVtID0gMTsKKyAgICBteSAkc2VydmVyOworICAgIG15ICRzcnZybmFtZTsKKyAgICBteSAkcGlkZmlsZTsKKyAgICBteSAkbG9nZmlsZTsKKyAgICBteSAkZmxhZ3MgPSAiIjsKKworICAgIGlmKCRpcHY2KSB7CisgICAgICAgICMgaWYgSVB2NiwgdXNlIGEgZGlmZmVyZW50IHNldHVwCisgICAgICAgICRpcHZudW0gPSA2OworICAgICAgICAkcG9ydCA9ICRSVFNQNlBPUlQ7CisgICAgICAgICRpcCA9ICRIT1NUNklQOworICAgIH0KKworICAgICRzZXJ2ZXIgPSBzZXJ2ZXJuYW1lX2lkKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKworICAgICRwaWRmaWxlID0gJHNlcnZlcnBpZGZpbGV7JHNlcnZlcn07CisKKyAgICAjIGRvbid0IHJldHJ5IGlmIHRoZSBzZXJ2ZXIgZG9lc24ndCB3b3JrCisgICAgaWYgKCRkb2VzbnRydW57JHBpZGZpbGV9KSB7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisKKyAgICBteSAkcGlkID0gcHJvY2Vzc2V4aXN0cygkcGlkZmlsZSk7CisgICAgaWYoJHBpZCA+IDApIHsKKyAgICAgICAgc3RvcHNlcnZlcigkc2VydmVyLCAiJHBpZCIpOworICAgIH0KKyAgICB1bmxpbmsoJHBpZGZpbGUpIGlmKC1mICRwaWRmaWxlKTsKKworICAgICRzcnZybmFtZSA9IHNlcnZlcm5hbWVfc3RyKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKworICAgICRsb2dmaWxlID0gc2VydmVyX2xvZ2ZpbGVuYW1lKCRMT0dESVIsICRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKKworICAgICRmbGFncyAuPSAiLS12ZXJib3NlICIgaWYoJGRlYnVncHJvdG9jb2wpOworICAgICRmbGFncyAuPSAiLS1waWRmaWxlIFwiJHBpZGZpbGVcIiAtLWxvZ2ZpbGUgXCIkbG9nZmlsZVwiICI7CisgICAgJGZsYWdzIC49ICItLWlkICRpZG51bSAiIGlmKCRpZG51bSA+IDEpOworICAgICRmbGFncyAuPSAiLS1pcHYkaXB2bnVtIC0tcG9ydCAkcG9ydCAtLXNyY2RpciBcIiRzcmNkaXJcIiI7CisKKyAgICBteSAkY21kID0gIiRwZXJsICRzcmNkaXIvcnRzcHNlcnZlci5wbCAkZmxhZ3MiOworICAgIG15ICgkcnRzcHBpZCwgJHBpZDIpID0gc3RhcnRuZXcoJGNtZCwgJHBpZGZpbGUsIDE1LCAwKTsKKworICAgIGlmKCRydHNwcGlkIDw9IDAgfHwgIWtpbGwoMCwgJHJ0c3BwaWQpKSB7CisgICAgICAgICMgaXQgaXMgTk9UIGFsaXZlCisgICAgICAgIGxvZ21zZyAiUlVOOiBmYWlsZWQgdG8gc3RhcnQgdGhlICRzcnZybmFtZSBzZXJ2ZXJcbiI7CisgICAgICAgIHN0b3BzZXJ2ZXIoJHNlcnZlciwgIiRwaWQyIik7CisgICAgICAgIGRpc3BsYXlsb2dzKCR0ZXN0bnVtY2hlY2spOworICAgICAgICAkZG9lc250cnVueyRwaWRmaWxlfSA9IDE7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisKKyAgICAjIFNlcnZlciBpcyB1cC4gVmVyaWZ5IHRoYXQgd2UgY2FuIHNwZWFrIHRvIGl0LgorICAgIG15ICRwaWQzID0gdmVyaWZ5c2VydmVyKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkaXAsICRwb3J0KTsKKyAgICBpZighJHBpZDMpIHsKKyAgICAgICAgbG9nbXNnICJSVU46ICRzcnZybmFtZSBzZXJ2ZXIgZmFpbGVkIHZlcmlmaWNhdGlvblxuIjsKKyAgICAgICAgIyBmYWlsZWQgdG8gdGFsayB0byBpdCBwcm9wZXJseS4gS2lsbCB0aGUgc2VydmVyIGFuZCByZXR1cm4gZmFpbHVyZQorICAgICAgICBzdG9wc2VydmVyKCRzZXJ2ZXIsICIkcnRzcHBpZCAkcGlkMiIpOworICAgICAgICBkaXNwbGF5bG9ncygkdGVzdG51bWNoZWNrKTsKKyAgICAgICAgJGRvZXNudHJ1bnskcGlkZmlsZX0gPSAxOworICAgICAgICByZXR1cm4gKDAsMCk7CisgICAgfQorICAgICRwaWQyID0gJHBpZDM7CisKKyAgICBpZigkdmVyYm9zZSkgeworICAgICAgICBsb2dtc2cgIlJVTjogJHNydnJuYW1lIHNlcnZlciBpcyBub3cgcnVubmluZyBQSUQgJHJ0c3BwaWRcbiI7CisgICAgfQorCisgICAgc2xlZXAoMSk7CisKKyAgICByZXR1cm4gKCRydHNwcGlkLCAkcGlkMik7Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU3RhcnQgdGhlIHNzaCAoc2NwL3NmdHApIHNlcnZlcgorIworc3ViIHJ1bnNzaHNlcnZlciB7CisgICAgbXkgKCRpZCwgJHZlcmJvc2UsICRpcHY2KSA9IEBfOworICAgIG15ICRpcD0kSE9TVElQOworICAgIG15ICRwb3J0ID0gJFNTSFBPUlQ7CisgICAgbXkgJHNvY2tzcG9ydCA9ICRTT0NLU1BPUlQ7CisgICAgbXkgJHByb3RvID0gJ3NzaCc7CisgICAgbXkgJGlwdm51bSA9IDQ7CisgICAgbXkgJGlkbnVtID0gKCRpZCAmJiAoJGlkID1+IC9eKFxkKykkLykgJiYgKCRpZCA+IDEpKSA/ICRpZCA6IDE7CisgICAgbXkgJHNlcnZlcjsKKyAgICBteSAkc3J2cm5hbWU7CisgICAgbXkgJHBpZGZpbGU7CisgICAgbXkgJGxvZ2ZpbGU7CisgICAgbXkgJGZsYWdzID0gIiI7CisKKyAgICAkc2VydmVyID0gc2VydmVybmFtZV9pZCgkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisKKyAgICAkcGlkZmlsZSA9ICRzZXJ2ZXJwaWRmaWxleyRzZXJ2ZXJ9OworCisgICAgIyBkb24ndCByZXRyeSBpZiB0aGUgc2VydmVyIGRvZXNuJ3Qgd29yaworICAgIGlmICgkZG9lc250cnVueyRwaWRmaWxlfSkgeworICAgICAgICByZXR1cm4gKDAsMCk7CisgICAgfQorCisgICAgbXkgJHBpZCA9IHByb2Nlc3NleGlzdHMoJHBpZGZpbGUpOworICAgIGlmKCRwaWQgPiAwKSB7CisgICAgICAgIHN0b3BzZXJ2ZXIoJHNlcnZlciwgIiRwaWQiKTsKKyAgICB9CisgICAgdW5saW5rKCRwaWRmaWxlKSBpZigtZiAkcGlkZmlsZSk7CisKKyAgICAkc3J2cm5hbWUgPSBzZXJ2ZXJuYW1lX3N0cigkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisKKyAgICAkbG9nZmlsZSA9IHNlcnZlcl9sb2dmaWxlbmFtZSgkTE9HRElSLCAkcHJvdG8sICRpcHZudW0sICRpZG51bSk7CisKKyAgICAkZmxhZ3MgLj0gIi0tdmVyYm9zZSAiIGlmKCR2ZXJib3NlKTsKKyAgICAkZmxhZ3MgLj0gIi0tZGVidWdwcm90b2NvbCAiIGlmKCRkZWJ1Z3Byb3RvY29sKTsKKyAgICAkZmxhZ3MgLj0gIi0tcGlkZmlsZSBcIiRwaWRmaWxlXCIgIjsKKyAgICAkZmxhZ3MgLj0gIi0taWQgJGlkbnVtICIgaWYoJGlkbnVtID4gMSk7CisgICAgJGZsYWdzIC49ICItLWlwdiRpcHZudW0gLS1hZGRyIFwiJGlwXCIgIjsKKyAgICAkZmxhZ3MgLj0gIi0tc3NocG9ydCAkcG9ydCAtLXNvY2tzcG9ydCAkc29ja3Nwb3J0ICI7CisgICAgJGZsYWdzIC49ICItLXVzZXIgXCIkVVNFUlwiIjsKKworICAgIG15ICRjbWQgPSAiJHBlcmwgJHNyY2Rpci9zc2hzZXJ2ZXIucGwgJGZsYWdzIjsKKyAgICBteSAoJHNzaHBpZCwgJHBpZDIpID0gc3RhcnRuZXcoJGNtZCwgJHBpZGZpbGUsIDYwLCAwKTsKKworICAgICMgb24gbG9hZGVkIHN5c3RlbXMgc3Noc2VydmVyIHN0YXJ0IHVwIGNhbiB0YWtlIGxvbmdlciB0aGFuIHRoZSB0aW1lb3V0CisgICAgIyBwYXNzZWQgdG8gc3RhcnRuZXcsIHdoZW4gdGhpcyBoYXBwZW5zIHN0YXJ0bmV3IGNvbXBsZXRlcyB3aXRob3V0IGJlaW5nCisgICAgIyBhYmxlIHRvIHJlYWQgdGhlIHBpZGZpbGUgYW5kIGNvbnNlcXVlbnRseSByZXR1cm5zIGEgemVybyBwaWQyIGFib3ZlLgorCisgICAgaWYoJHNzaHBpZCA8PSAwIHx8ICFraWxsKDAsICRzc2hwaWQpKSB7CisgICAgICAgICMgaXQgaXMgTk9UIGFsaXZlCisgICAgICAgIGxvZ21zZyAiUlVOOiBmYWlsZWQgdG8gc3RhcnQgdGhlICRzcnZybmFtZSBzZXJ2ZXJcbiI7CisgICAgICAgIHN0b3BzZXJ2ZXIoJHNlcnZlciwgIiRwaWQyIik7CisgICAgICAgICRkb2VzbnRydW57JHBpZGZpbGV9ID0gMTsKKyAgICAgICAgcmV0dXJuICgwLDApOworICAgIH0KKworICAgICMgc3NoIHNlcnZlciB2ZXJpZmljYXRpb24gYWxsb3dzIHNvbWUgZXh0cmEgdGltZSBmb3IgdGhlIHNlcnZlciB0byBzdGFydCB1cAorICAgICMgYW5kIGdpdmVzIHVzIHRoZSBvcHBvcnR1bml0eSBvZiByZWNvdmVyaW5nIHRoZSBwaWQgZnJvbSB0aGUgcGlkZmlsZSwgd2hlbgorICAgICMgdGhpcyB2ZXJpZmljYXRpb24gc3VjY2VlZHMgdGhlIHJlY292ZXJlZCBwaWQgaXMgYXNzaWduZWQgdG8gcGlkMi4KKworICAgIG15ICRwaWQzID0gdmVyaWZ5c2VydmVyKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkaXAsICRwb3J0KTsKKyAgICBpZighJHBpZDMpIHsKKyAgICAgICAgbG9nbXNnICJSVU46ICRzcnZybmFtZSBzZXJ2ZXIgZmFpbGVkIHZlcmlmaWNhdGlvblxuIjsKKyAgICAgICAgIyBmYWlsZWQgdG8gZmV0Y2ggc2VydmVyIHBpZC4gS2lsbCB0aGUgc2VydmVyIGFuZCByZXR1cm4gZmFpbHVyZQorICAgICAgICBzdG9wc2VydmVyKCRzZXJ2ZXIsICIkc3NocGlkICRwaWQyIik7CisgICAgICAgICRkb2VzbnRydW57JHBpZGZpbGV9ID0gMTsKKyAgICAgICAgcmV0dXJuICgwLDApOworICAgIH0KKyAgICAkcGlkMiA9ICRwaWQzOworCisgICAgIyBvbmNlIGl0IGlzIGtub3duIHRoYXQgdGhlIHNzaCBzZXJ2ZXIgaXMgYWxpdmUsIHNmdHAgc2VydmVyIHZlcmlmaWNhdGlvbgorICAgICMgaXMgcGVyZm9ybWVkIGFjdHVhbGx5IGNvbm5lY3RpbmcgdG8gaXQsIGF1dGhlbnRpY2F0aW5nIGFuZCBwZXJmb3JtaW5nIGEKKyAgICAjIHZlcnkgc2ltcGxlIHJlbW90ZSBjb21tYW5kLiAgVGhpcyB2ZXJpZmljYXRpb24gaXMgdHJpZWQgb25seSBvbmUgdGltZS4KKworICAgICRzc2hkbG9nID0gc2VydmVyX2xvZ2ZpbGVuYW1lKCRMT0dESVIsICdzc2gnLCAkaXB2bnVtLCAkaWRudW0pOworICAgICRzZnRwbG9nID0gc2VydmVyX2xvZ2ZpbGVuYW1lKCRMT0dESVIsICdzZnRwJywgJGlwdm51bSwgJGlkbnVtKTsKKworICAgIGlmKHZlcmlmeXNmdHAoJ3NmdHAnLCAkaXB2bnVtLCAkaWRudW0sICRpcCwgJHBvcnQpIDwgMSkgeworICAgICAgICBsb2dtc2cgIlJVTjogU0ZUUCBzZXJ2ZXIgZmFpbGVkIHZlcmlmaWNhdGlvblxuIjsKKyAgICAgICAgIyBmYWlsZWQgdG8gdGFsayB0byBpdCBwcm9wZXJseS4gS2lsbCB0aGUgc2VydmVyIGFuZCByZXR1cm4gZmFpbHVyZQorICAgICAgICBkaXNwbGF5X3NmdHBsb2coKTsKKyAgICAgICAgZGlzcGxheV9zZnRwY29uZmlnKCk7CisgICAgICAgIGRpc3BsYXlfc3NoZGxvZygpOworICAgICAgICBkaXNwbGF5X3NzaGRjb25maWcoKTsKKyAgICAgICAgc3RvcHNlcnZlcigkc2VydmVyLCAiJHNzaHBpZCAkcGlkMiIpOworICAgICAgICAkZG9lc250cnVueyRwaWRmaWxlfSA9IDE7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisKKyAgICBpZigkdmVyYm9zZSkgeworICAgICAgICBsb2dtc2cgIlJVTjogJHNydnJuYW1lIHNlcnZlciBpcyBub3cgcnVubmluZyBQSUQgJHBpZDJcbiI7CisgICAgfQorCisgICAgcmV0dXJuICgkcGlkMiwgJHNzaHBpZCk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFN0YXJ0IHRoZSBzb2NrcyBzZXJ2ZXIKKyMKK3N1YiBydW5zb2Nrc3NlcnZlciB7CisgICAgbXkgKCRpZCwgJHZlcmJvc2UsICRpcHY2KSA9IEBfOworICAgIG15ICRpcD0kSE9TVElQOworICAgIG15ICRwb3J0ID0gJFNPQ0tTUE9SVDsKKyAgICBteSAkcHJvdG8gPSAnc29ja3MnOworICAgIG15ICRpcHZudW0gPSA0OworICAgIG15ICRpZG51bSA9ICgkaWQgJiYgKCRpZCA9fiAvXihcZCspJC8pICYmICgkaWQgPiAxKSkgPyAkaWQgOiAxOworICAgIG15ICRzZXJ2ZXI7CisgICAgbXkgJHNydnJuYW1lOworICAgIG15ICRwaWRmaWxlOworICAgIG15ICRsb2dmaWxlOworICAgIG15ICRmbGFncyA9ICIiOworCisgICAgJHNlcnZlciA9IHNlcnZlcm5hbWVfaWQoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworCisgICAgJHBpZGZpbGUgPSAkc2VydmVycGlkZmlsZXskc2VydmVyfTsKKworICAgICMgZG9uJ3QgcmV0cnkgaWYgdGhlIHNlcnZlciBkb2Vzbid0IHdvcmsKKyAgICBpZiAoJGRvZXNudHJ1bnskcGlkZmlsZX0pIHsKKyAgICAgICAgcmV0dXJuICgwLDApOworICAgIH0KKworICAgIG15ICRwaWQgPSBwcm9jZXNzZXhpc3RzKCRwaWRmaWxlKTsKKyAgICBpZigkcGlkID4gMCkgeworICAgICAgICBzdG9wc2VydmVyKCRzZXJ2ZXIsICIkcGlkIik7CisgICAgfQorICAgIHVubGluaygkcGlkZmlsZSkgaWYoLWYgJHBpZGZpbGUpOworCisgICAgJHNydnJuYW1lID0gc2VydmVybmFtZV9zdHIoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworCisgICAgJGxvZ2ZpbGUgPSBzZXJ2ZXJfbG9nZmlsZW5hbWUoJExPR0RJUiwgJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworCisgICAgIyBUaGUgc3NoIHNlcnZlciBtdXN0IGJlIGFscmVhZHkgcnVubmluZworICAgIGlmKCEkcnVueydzc2gnfSkgeworICAgICAgICBsb2dtc2cgIlJVTjogU09DS1Mgc2VydmVyIGNhbm5vdCBmaW5kIHJ1bm5pbmcgU1NIIHNlcnZlclxuIjsKKyAgICAgICAgJGRvZXNudHJ1bnskcGlkZmlsZX0gPSAxOworICAgICAgICByZXR1cm4gKDAsMCk7CisgICAgfQorCisgICAgIyBGaW5kIG91dCBzc2ggZGFlbW9uIGNhbm9uaWNhbCBmaWxlIG5hbWUKKyAgICBteSAkc3NoZCA9IGZpbmRfc3NoZCgpOworICAgIGlmKCEkc3NoZCkgeworICAgICAgICBsb2dtc2cgIlJVTjogU09DS1Mgc2VydmVyIGNhbm5vdCBmaW5kICRzc2hkZXhlXG4iOworICAgICAgICAkZG9lc250cnVueyRwaWRmaWxlfSA9IDE7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisKKyAgICAjIEZpbmQgb3V0IHNzaCBkYWVtb24gdmVyc2lvbiBpbmZvCisgICAgKCRzc2hkaWQsICRzc2hkdmVybnVtLCAkc3NoZHZlcnN0ciwgJHNzaGRlcnJvcikgPSBzc2h2ZXJzaW9uaW5mbygkc3NoZCk7CisgICAgaWYoISRzc2hkaWQpIHsKKyAgICAgICAgIyBOb3QgYW4gT3BlblNTSCBvciBTdW5TU0ggc3NoIGRhZW1vbgorICAgICAgICBsb2dtc2cgIiRzc2hkZXJyb3JcbiIgaWYoJHZlcmJvc2UpOworICAgICAgICBsb2dtc2cgIlNDUCwgU0ZUUCBhbmQgU09DS1MgdGVzdHMgcmVxdWlyZSBPcGVuU1NIIDIuOS45IG9yIGxhdGVyXG4iOworICAgICAgICAkZG9lc250cnVueyRwaWRmaWxlfSA9IDE7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisgICAgbG9nbXNnICJzc2ggc2VydmVyIGZvdW5kICRzc2hkIGlzICRzc2hkdmVyc3RyXG4iIGlmKCR2ZXJib3NlKTsKKworICAgICMgRmluZCBvdXQgc3NoIGNsaWVudCBjYW5vbmljYWwgZmlsZSBuYW1lCisgICAgbXkgJHNzaCA9IGZpbmRfc3NoKCk7CisgICAgaWYoISRzc2gpIHsKKyAgICAgICAgbG9nbXNnICJSVU46IFNPQ0tTIHNlcnZlciBjYW5ub3QgZmluZCAkc3NoZXhlXG4iOworICAgICAgICAkZG9lc250cnVueyRwaWRmaWxlfSA9IDE7CisgICAgICAgIHJldHVybiAoMCwwKTsKKyAgICB9CisKKyAgICAjIEZpbmQgb3V0IHNzaCBjbGllbnQgdmVyc2lvbiBpbmZvCisgICAgbXkgKCRzc2hpZCwgJHNzaHZlcm51bSwgJHNzaHZlcnN0ciwgJHNzaGVycm9yKSA9IHNzaHZlcnNpb25pbmZvKCRzc2gpOworICAgIGlmKCEkc3NoaWQpIHsKKyAgICAgICAgIyBOb3QgYW4gT3BlblNTSCBvciBTdW5TU0ggc3NoIGNsaWVudAorICAgICAgICBsb2dtc2cgIiRzc2hlcnJvclxuIiBpZigkdmVyYm9zZSk7CisgICAgICAgIGxvZ21zZyAiU0NQLCBTRlRQIGFuZCBTT0NLUyB0ZXN0cyByZXF1aXJlIE9wZW5TU0ggMi45Ljkgb3IgbGF0ZXJcbiI7CisgICAgICAgICRkb2VzbnRydW57JHBpZGZpbGV9ID0gMTsKKyAgICAgICAgcmV0dXJuICgwLDApOworICAgIH0KKworICAgICMgVmVyaWZ5IG1pbmltdW0gc3NoIGNsaWVudCB2ZXJzaW9uCisgICAgaWYoKCgkc3NoaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaHZlcm51bSA8IDI5OSkpIHx8CisgICAgICAgKCgkc3NoaWQgPX4gL1N1blNTSC8pICAmJiAoJHNzaHZlcm51bSA8IDEwMCkpKSB7CisgICAgICAgIGxvZ21zZyAic3NoIGNsaWVudCBmb3VuZCAkc3NoIGlzICRzc2h2ZXJzdHJcbiI7CisgICAgICAgIGxvZ21zZyAiU0NQLCBTRlRQIGFuZCBTT0NLUyB0ZXN0cyByZXF1aXJlIE9wZW5TU0ggMi45Ljkgb3IgbGF0ZXJcbiI7CisgICAgICAgICRkb2VzbnRydW57JHBpZGZpbGV9ID0gMTsKKyAgICAgICAgcmV0dXJuICgwLDApOworICAgIH0KKyAgICBsb2dtc2cgInNzaCBjbGllbnQgZm91bmQgJHNzaCBpcyAkc3NodmVyc3RyXG4iIGlmKCR2ZXJib3NlKTsKKworICAgICMgVmVyaWZ5IGlmIHNzaCBjbGllbnQgYW5kIHNzaCBkYWVtb24gdmVyc2lvbnMgbWF0Y2gKKyAgICBpZigoJHNzaGRpZCBuZSAkc3NoaWQpIHx8ICgkc3NoZHZlcm51bSAhPSAkc3NodmVybnVtKSkgeworICAgICAgICAjIE91ciB0ZXN0IGhhcm5lc3MgbWlnaHQgd29yayB3aXRoIHNsaWdodGx5IG1pc21hdGNoZWQgdmVyc2lvbnMKKyAgICAgICAgbG9nbXNnICJXYXJuaW5nOiB2ZXJzaW9uIG1pc21hdGNoOiBzc2hkICRzc2hkdmVyc3RyIC0gc3NoICRzc2h2ZXJzdHJcbiIKKyAgICAgICAgICAgIGlmKCR2ZXJib3NlKTsKKyAgICB9CisKKyAgICAjIENvbmZpZyBmaWxlIG9wdGlvbnMgZm9yIHNzaCBjbGllbnQgYXJlIHByZXZpb3VzbHkgc2V0IGZyb20gc3Noc2VydmVyLnBsCisgICAgaWYoISAtZSAkc3NoY29uZmlnKSB7CisgICAgICAgIGxvZ21zZyAiUlVOOiBTT0NLUyBzZXJ2ZXIgY2Fubm90IGZpbmQgJHNzaGNvbmZpZ1xuIjsKKyAgICAgICAgJGRvZXNudHJ1bnskcGlkZmlsZX0gPSAxOworICAgICAgICByZXR1cm4gKDAsMCk7CisgICAgfQorCisgICAgJHNzaGxvZyAgPSBzZXJ2ZXJfbG9nZmlsZW5hbWUoJExPR0RJUiwgJ3NvY2tzJywgJGlwdm51bSwgJGlkbnVtKTsKKworICAgICMgc3RhcnQgb3VyIHNvY2tzIHNlcnZlcgorICAgIG15ICRjbWQ9IiRzc2ggLU4gLUYgJHNzaGNvbmZpZyAkaXAgPiAkc3NobG9nIDI+JjEiOworICAgIG15ICgkc3NocGlkLCAkcGlkMikgPSBzdGFydG5ldygkY21kLCAkcGlkZmlsZSwgMzAsIDEpOyAjIGZha2UgcGlkZmlsZQorCisgICAgaWYoJHNzaHBpZCA8PSAwIHx8ICFraWxsKDAsICRzc2hwaWQpKSB7CisgICAgICAgICMgaXQgaXMgTk9UIGFsaXZlCisgICAgICAgIGxvZ21zZyAiUlVOOiBmYWlsZWQgdG8gc3RhcnQgdGhlICRzcnZybmFtZSBzZXJ2ZXJcbiI7CisgICAgICAgIGRpc3BsYXlfc3NobG9nKCk7CisgICAgICAgIGRpc3BsYXlfc3NoY29uZmlnKCk7CisgICAgICAgIGRpc3BsYXlfc3NoZGxvZygpOworICAgICAgICBkaXNwbGF5X3NzaGRjb25maWcoKTsKKyAgICAgICAgc3RvcHNlcnZlcigkc2VydmVyLCAiJHBpZDIiKTsKKyAgICAgICAgJGRvZXNudHJ1bnskcGlkZmlsZX0gPSAxOworICAgICAgICByZXR1cm4gKDAsMCk7CisgICAgfQorCisgICAgIyBVZ2x5IGhhY2sgYnV0IHNzaCBkb2Vzbid0IHN1cHBvcnQgcGlkIGZpbGVzLiBQSUQgaXMgZnJvbSBmYWtlIHBpZGZpbGUuCisgICAgbXkgJHBpZDMgPSB2ZXJpZnlzZXJ2ZXIoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICRpcCwgJHBvcnQpOworICAgIGlmKCEkcGlkMykgeworICAgICAgICBsb2dtc2cgIlJVTjogJHNydnJuYW1lIHNlcnZlciBmYWlsZWQgdmVyaWZpY2F0aW9uXG4iOworICAgICAgICAjIGZhaWxlZCB0byB0YWxrIHRvIGl0IHByb3Blcmx5LiBLaWxsIHRoZSBzZXJ2ZXIgYW5kIHJldHVybiBmYWlsdXJlCisgICAgICAgIHN0b3BzZXJ2ZXIoJHNlcnZlciwgIiRzc2hwaWQgJHBpZDIiKTsKKyAgICAgICAgJGRvZXNudHJ1bnskcGlkZmlsZX0gPSAxOworICAgICAgICByZXR1cm4gKDAsMCk7CisgICAgfQorICAgICRwaWQyID0gJHBpZDM7CisKKyAgICBpZigkdmVyYm9zZSkgeworICAgICAgICBsb2dtc2cgIlJVTjogJHNydnJuYW1lIHNlcnZlciBpcyBub3cgcnVubmluZyBQSUQgJHBpZDJcbiI7CisgICAgfQorCisgICAgcmV0dXJuICgkcGlkMiwgJHNzaHBpZCk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNpbmdsZSBzaG90IGh0dHAgYW5kIGdvcGhlciBzZXJ2ZXIgcmVzcG9uc2l2ZW5lc3MgdGVzdC4gVGhpcyBzaG91bGQgb25seQorIyBiZSB1c2VkIHRvIHZlcmlmeSB0aGF0IGEgc2VydmVyIHByZXNlbnQgaW4gJXJ1biBoYXNoIGlzIHN0aWxsIGZ1bmN0aW9uYWwKKyMKK3N1YiByZXNwb25zaXZlX2h0dHBfc2VydmVyIHsKKyAgICBteSAoJHByb3RvLCAkdmVyYm9zZSwgJGFsdCwgJHBvcnQpID0gQF87CisgICAgbXkgJGlwID0gJEhPU1RJUDsKKyAgICBteSAkaXB2bnVtID0gNDsKKyAgICBteSAkaWRudW0gPSAxOworCisgICAgaWYoJGFsdCBlcSAiaXB2NiIpIHsKKyAgICAgICAgIyBpZiBJUHY2LCB1c2UgYSBkaWZmZXJlbnQgc2V0dXAKKyAgICAgICAgJGlwdm51bSA9IDY7CisgICAgICAgICRpcCA9ICRIT1NUNklQOworICAgIH0KKyAgICBlbHNpZigkYWx0IGVxICJwcm94eSIpIHsKKyAgICAgICAgJGlkbnVtID0gMjsKKyAgICB9CisKKyAgICByZXR1cm4gJnJlc3BvbnNpdmVzZXJ2ZXIoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICRpcCwgJHBvcnQpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTaW5nbGUgc2hvdCBwaW5ncG9uZyBzZXJ2ZXIgcmVzcG9uc2l2ZW5lc3MgdGVzdC4gVGhpcyBzaG91bGQgb25seSBiZQorIyB1c2VkIHRvIHZlcmlmeSB0aGF0IGEgc2VydmVyIHByZXNlbnQgaW4gJXJ1biBoYXNoIGlzIHN0aWxsIGZ1bmN0aW9uYWwKKyMKK3N1YiByZXNwb25zaXZlX3Bpbmdwb25nX3NlcnZlciB7CisgICAgbXkgKCRwcm90bywgJGlkLCAkdmVyYm9zZSwgJGlwdjYpID0gQF87CisgICAgbXkgJHBvcnQ7CisgICAgbXkgJGlwID0gKCRpcHY2ICYmICgkaXB2NiA9fiAvNiQvKSkgPyAiJEhPU1Q2SVAiIDogIiRIT1NUSVAiOworICAgIG15ICRpcHZudW0gPSAoJGlwdjYgJiYgKCRpcHY2ID1+IC82JC8pKSA/IDYgOiA0OworICAgIG15ICRpZG51bSA9ICgkaWQgJiYgKCRpZCA9fiAvXihcZCspJC8pICYmICgkaWQgPiAxKSkgPyAkaWQgOiAxOworCisgICAgaWYoJHByb3RvIGVxICJmdHAiKSB7CisgICAgICAgICRwb3J0ID0gKCRpZG51bT4xKT8kRlRQMlBPUlQ6JEZUUFBPUlQ7CisKKyAgICAgICAgaWYoJGlwdm51bT09NikgeworICAgICAgICAgICAgIyBpZiBJUHY2LCB1c2UgYSBkaWZmZXJlbnQgc2V0dXAKKyAgICAgICAgICAgICRwb3J0ID0gJEZUUDZQT1JUOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRwcm90byBlcSAicG9wMyIpIHsKKyAgICAgICAgJHBvcnQgPSAoJGlwdm51bT09NikgPyAkUE9QMzZQT1JUIDogJFBPUDNQT1JUOworICAgIH0KKyAgICBlbHNpZigkcHJvdG8gZXEgImltYXAiKSB7CisgICAgICAgICRwb3J0ID0gKCRpcHZudW09PTYpID8gJElNQVA2UE9SVCA6ICRJTUFQUE9SVDsKKyAgICB9CisgICAgZWxzaWYoJHByb3RvIGVxICJzbXRwIikgeworICAgICAgICAkcG9ydCA9ICgkaXB2bnVtPT02KSA/ICRTTVRQNlBPUlQgOiAkU01UUFBPUlQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwcmludCBTVERFUlIgIlVuc3VwcG9ydGVkIHByb3RvY29sICRwcm90byEhXG4iOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gJnJlc3BvbnNpdmVzZXJ2ZXIoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0sICRpcCwgJHBvcnQpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTaW5nbGUgc2hvdCBydHNwIHNlcnZlciByZXNwb25zaXZlbmVzcyB0ZXN0LiBUaGlzIHNob3VsZCBvbmx5IGJlCisjIHVzZWQgdG8gdmVyaWZ5IHRoYXQgYSBzZXJ2ZXIgcHJlc2VudCBpbiAlcnVuIGhhc2ggaXMgc3RpbGwgZnVuY3Rpb25hbAorIworc3ViIHJlc3BvbnNpdmVfcnRzcF9zZXJ2ZXIgeworICAgIG15ICgkdmVyYm9zZSwgJGlwdjYpID0gQF87CisgICAgbXkgJHBvcnQgPSAkUlRTUFBPUlQ7CisgICAgbXkgJGlwID0gJEhPU1RJUDsKKyAgICBteSAkcHJvdG8gPSAncnRzcCc7CisgICAgbXkgJGlwdm51bSA9IDQ7CisgICAgbXkgJGlkbnVtID0gMTsKKworICAgIGlmKCRpcHY2KSB7CisgICAgICAgICMgaWYgSVB2NiwgdXNlIGEgZGlmZmVyZW50IHNldHVwCisgICAgICAgICRpcHZudW0gPSA2OworICAgICAgICAkcG9ydCA9ICRSVFNQNlBPUlQ7CisgICAgICAgICRpcCA9ICRIT1NUNklQOworICAgIH0KKworICAgIHJldHVybiAmcmVzcG9uc2l2ZXNlcnZlcigkcHJvdG8sICRpcHZudW0sICRpZG51bSwgJGlwLCAkcG9ydCk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNpbmdsZSBzaG90IHRmdHAgc2VydmVyIHJlc3BvbnNpdmVuZXNzIHRlc3QuIFRoaXMgc2hvdWxkIG9ubHkgYmUKKyMgdXNlZCB0byB2ZXJpZnkgdGhhdCBhIHNlcnZlciBwcmVzZW50IGluICVydW4gaGFzaCBpcyBzdGlsbCBmdW5jdGlvbmFsCisjCitzdWIgcmVzcG9uc2l2ZV90ZnRwX3NlcnZlciB7CisgICAgbXkgKCRpZCwgJHZlcmJvc2UsICRpcHY2KSA9IEBfOworICAgIG15ICRwb3J0ID0gJFRGVFBQT1JUOworICAgIG15ICRpcCA9ICRIT1NUSVA7CisgICAgbXkgJHByb3RvID0gJ3RmdHAnOworICAgIG15ICRpcHZudW0gPSA0OworICAgIG15ICRpZG51bSA9ICgkaWQgJiYgKCRpZCA9fiAvXihcZCspJC8pICYmICgkaWQgPiAxKSkgPyAkaWQgOiAxOworCisgICAgaWYoJGlwdjYpIHsKKyAgICAgICAgIyBpZiBJUHY2LCB1c2UgYSBkaWZmZXJlbnQgc2V0dXAKKyAgICAgICAgJGlwdm51bSA9IDY7CisgICAgICAgICRwb3J0ID0gJFRGVFA2UE9SVDsKKyAgICAgICAgJGlwID0gJEhPU1Q2SVA7CisgICAgfQorCisgICAgcmV0dXJuICZyZXNwb25zaXZlc2VydmVyKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkaXAsICRwb3J0KTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU2luZ2xlIHNob3Qgbm9uLXN0dW5uZWwgSFRUUCBUTFMgZXh0ZW5zaW9ucyBjYXBhYmxlIHNlcnZlcgorIyByZXNwb25zaXZlbmVzcyB0ZXN0LiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgdG8gdmVyaWZ5IHRoYXQgYQorIyBzZXJ2ZXIgcHJlc2VudCBpbiAlcnVuIGhhc2ggaXMgc3RpbGwgZnVuY3Rpb25hbAorIworc3ViIHJlc3BvbnNpdmVfaHR0cHRsc19zZXJ2ZXIgeworICAgIG15ICgkdmVyYm9zZSwgJGlwdjYpID0gQF87CisgICAgbXkgJHByb3RvID0gImh0dHB0bHMiOworICAgIG15ICRwb3J0ID0gKCRpcHY2ICYmICgkaXB2NiA9fiAvNiQvKSkgPyAkSFRUUFRMUzZQT1JUIDogJEhUVFBUTFNQT1JUOworICAgIG15ICRpcCA9ICgkaXB2NiAmJiAoJGlwdjYgPX4gLzYkLykpID8gIiRIT1NUNklQIiA6ICIkSE9TVElQIjsKKyAgICBteSAkaXB2bnVtID0gKCRpcHY2ICYmICgkaXB2NiA9fiAvNiQvKSkgPyA2IDogNDsKKyAgICBteSAkaWRudW0gPSAxOworCisgICAgcmV0dXJuICZyZXNwb25zaXZlc2VydmVyKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkaXAsICRwb3J0KTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUmVtb3ZlIGFsbCBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeQorIworc3ViIGNsZWFyZGlyIHsKKyAgICBteSAkZGlyID0gJF9bMF07CisgICAgbXkgJGNvdW50OworICAgIG15ICRmaWxlOworCisgICAgIyBHZXQgYWxsIGZpbGVzCisgICAgb3BlbmRpcihESVIsICRkaXIpIHx8CisgICAgICAgIHJldHVybiAwOyAjIGNhbid0IG9wZW4gZGlyCisgICAgd2hpbGUoJGZpbGUgPSByZWFkZGlyKERJUikpIHsKKyAgICAgICAgaWYoJGZpbGUgIX4gL15cLi8pIHsKKyAgICAgICAgICAgIHVubGluaygiJGRpci8kZmlsZSIpOworICAgICAgICAgICAgJGNvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgY2xvc2VkaXIgRElSOworICAgIHJldHVybiAkY291bnQ7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZpbHRlciBvdXQgdGhlIHNwZWNpZmllZCBwYXR0ZXJuIGZyb20gdGhlIGdpdmVuIGlucHV0IGZpbGUgYW5kIHN0b3JlIHRoZQorIyByZXN1bHRzIGluIHRoZSBnaXZlbiBvdXRwdXQgZmlsZQorIworc3ViIGZpbHRlcm9mZiB7CisgICAgbXkgJGluZmlsZT0kX1swXTsKKyAgICBteSAkZmlsdGVyPSRfWzFdOworICAgIG15ICRvZmlsZT0kX1syXTsKKworICAgIG9wZW4oSU4sICI8JGluZmlsZSIpCisgICAgICAgIHx8IHJldHVybiAxOworCisgICAgb3BlbihPVVQsICI+JG9maWxlIikKKyAgICAgICAgfHwgcmV0dXJuIDE7CisKKyAgICAjIGxvZ21zZyAiRklMVEVSOiBvZmYgJGZpbHRlciBmcm9tICRpbmZpbGUgdG8gJG9maWxlXG4iOworCisgICAgd2hpbGUoPElOPikgeworICAgICAgICAkXyA9fiBzLyRmaWx0ZXIvLzsKKyAgICAgICAgcHJpbnQgT1VUICRfOworICAgIH0KKyAgICBjbG9zZShJTik7CisgICAgY2xvc2UoT1VUKTsKKyAgICByZXR1cm4gMDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgY29tcGFyZSB0ZXN0IHJlc3VsdHMgd2l0aCB0aGUgZXhwZWN0ZWQgb3V0cHV0LCB3ZSBtaWdodCBmaWx0ZXIgb2ZmCisjIHNvbWUgcGF0dGVybiB0aGF0IGlzIGFsbG93ZWQgdG8gZGlmZmVyLCBvdXRwdXQgdGVzdCByZXN1bHRzCisjCitzdWIgY29tcGFyZSB7CisgICAgIyBmaWx0ZXIgb2ZmIHBhdHRlcm5zIF9iZWZvcmVfIHRoaXMgY29tcGFyaXNvbiEKKyAgICBteSAoJHN1YmplY3QsICRmaXJzdHJlZiwgJHNlY29uZHJlZik9QF87CisKKyAgICBteSAkcmVzdWx0ID0gY29tcGFyZXBhcnRzKCRmaXJzdHJlZiwgJHNlY29uZHJlZik7CisKKyAgICBpZigkcmVzdWx0KSB7CisgICAgICAgIGlmKCEkc2hvcnQpIHsKKyAgICAgICAgICAgIGxvZ21zZyAiXG4gJHN1YmplY3QgRkFJTEVEOlxuIjsKKyAgICAgICAgICAgIGxvZ21zZyBzaG93ZGlmZigkTE9HRElSLCAkZmlyc3RyZWYsICRzZWNvbmRyZWYpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbG9nbXNnICJGQUlMRURcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICRyZXN1bHQ7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGRpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgY3VybCBhbmQgdGhlIGhvc3QgdGhlIHRlc3Qgc3VpdGUgcnVucyBvbgorIworc3ViIGNoZWNrc3lzdGVtIHsKKworICAgIHVubGluaygkbWVtZHVtcCk7ICMgcmVtb3ZlIHRoaXMgaWYgdGhlcmUgd2FzIG9uZSBsZWZ0CisKKyAgICBteSAkZmVhdDsKKyAgICBteSAkY3VybDsKKyAgICBteSAkbGliY3VybDsKKyAgICBteSAkdmVyc3JldHZhbDsKKyAgICBteSAkdmVyc25vZXhlYzsKKyAgICBteSBAdmVyc2lvbj0oKTsKKworICAgIG15ICRjdXJsdmVyb3V0PSIkTE9HRElSL2N1cmx2ZXJvdXQubG9nIjsKKyAgICBteSAkY3VybHZlcmVycj0iJExPR0RJUi9jdXJsdmVyZXJyLmxvZyI7CisgICAgbXkgJHZlcnNpb25jbWQ9IiRDVVJMIC0tdmVyc2lvbiAxPiRjdXJsdmVyb3V0IDI+JGN1cmx2ZXJlcnIiOworCisgICAgdW5saW5rKCRjdXJsdmVyb3V0KTsKKyAgICB1bmxpbmsoJGN1cmx2ZXJlcnIpOworCisgICAgJHZlcnNyZXR2YWwgPSBydW5jbGllbnQoJHZlcnNpb25jbWQpOworICAgICR2ZXJzbm9leGVjID0gJCE7CisKKyAgICBvcGVuKFZFUlNPVVQsICI8JGN1cmx2ZXJvdXQiKTsKKyAgICBAdmVyc2lvbiA9IDxWRVJTT1VUPjsKKyAgICBjbG9zZShWRVJTT1VUKTsKKworICAgIGZvcihAdmVyc2lvbikgeworICAgICAgICBjaG9tcDsKKworICAgICAgICBpZigkXyA9fiAvXmN1cmwvKSB7CisgICAgICAgICAgICAkY3VybCA9ICRfOworICAgICAgICAgICAgJGN1cmwgPX4gcy9eKC4qKShsaWJjdXJsLiopLyQxL2c7CisKKyAgICAgICAgICAgICRsaWJjdXJsID0gJDI7CisgICAgICAgICAgICBpZigkY3VybCA9fiAvbWluZ3czMi8pIHsKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSB3aW5kb3dzIG1pbnczMiBidWlsZCwgd2UgbmVlZCB0byB0cmFuc2xhdGUgdGhlCisgICAgICAgICAgICAgICAgIyBnaXZlbiBwYXRoIHRvIHRoZSAiYWN0dWFsIiB3aW5kb3dzIHBhdGguCisKKyAgICAgICAgICAgICAgICBteSBAbSA9IGBtb3VudGA7CisgICAgICAgICAgICAgICAgbXkgJG1hdGNobGVuOworICAgICAgICAgICAgICAgIG15ICRiZXN0bWF0Y2g7CisgICAgICAgICAgICAgICAgbXkgJG1vdW50OworCisjIGV4YW1wbGUgbW91bnQgb3V0cHV0OgorIyBDOlxET0NVTUV+MVxUZW1wIG9uIC90bXAgdHlwZSB1c2VyIChiaW5tb2RlLG5vdW1vdW50KQorIyBjOlxBY3RpdmVTdGF0ZVxwZXJsIG9uIC9wZXJsIHR5cGUgdXNlciAoYmlubW9kZSkKKyMgQzpcbXN5c1wxLjBcYmluIG9uIC91c3IvYmluIHR5cGUgdXNlciAoYmlubW9kZSxjeWdleGVjLG5vdW1vdW50KQorIyBDOlxtc3lzXDEuMFxiaW4gb24gL2JpbiB0eXBlIHVzZXIgKGJpbm1vZGUsY3lnZXhlYyxub3Vtb3VudCkKKworICAgICAgICAgICAgICAgIGZvcmVhY2ggJG1vdW50IChAbSkgeworICAgICAgICAgICAgICAgICAgICBpZiggJG1vdW50ID1+IC8oLiopIG9uIChbXiBdKikgdHlwZSAvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBteSAoJG1pbmd3LCAkcmVhbCk9KCQyLCAkMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZigkcHdkID1+IC9eJG1pbmd3LykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHBhdGggd2UgZ290IGZyb20gcHdkIHN0YXJ0cyB3aXRoIHRoZSBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBmb3VuZCBvbiB0aGlzIGxpbmUgaW4gdGhlIG1vdW50IG91dHB1dAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxlbiA9IGxlbmd0aCgkcmVhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGxlbiA+ICRtYXRjaGxlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIHJlbWVtYmVyIHRoZSBtYXRjaCB0aGF0IGlzIHRoZSBsb25nZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaGxlbiA9ICRsZW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiZXN0bWF0Y2ggPSAkcmVhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoISRtYXRjaGxlbikgeworICAgICAgICAgICAgICAgICAgICBsb2dtc2cgIlNlcmlvdXMgZXJyb3IsIGNhbid0IGZpbmQgb3VyIFwicmVhbFwiIHBhdGhcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAjIG5vdyBwcmVwZW5kIHRoZSBwcmVmaXggZnJvbSB0aGUgbW91bnQgY29tbWFuZCB0byBidWlsZAorICAgICAgICAgICAgICAgICAgICAjIG91ciAiYWN0dWFsIHBhdGgiCisgICAgICAgICAgICAgICAgICAgICRwd2QgPSAiJGJlc3RtYXRjaCRwd2QiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAkcHdkID1+IHMjXFwjLyNnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzaWYgKCRjdXJsID1+IC93aW4zMi8pIHsKKyAgICAgICAgICAgICAgICMgTmF0aXZlIFdpbmRvd3MgYnVpbGRzIGRvbid0IHVuZGVyc3RhbmQgdGhlCisgICAgICAgICAgICAgICAjIG91dHB1dCBvZiBjeWd3aW4ncyBwd2QuICBJdCB3aWxsIGJlCisgICAgICAgICAgICAgICAjIHNvbWV0aGluZyBsaWtlIC9jeWdkcml2ZS9jLzxzb21lIHBhdGg+LgorICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgIyBVc2UgdGhlIGN5Z3BhdGggdXRpbGl0eSB0byBjb252ZXJ0IHRoZQorICAgICAgICAgICAgICAgIyB3b3JraW5nIGRpcmVjdG9yeSB0byBhIFdpbmRvd3MgZnJpZW5kbHkKKyAgICAgICAgICAgICAgICMgcGF0aC4gIFRoZSAtbSBvcHRpb24gY29udmVydHMgdG8gdXNlIGRyaXZlCisgICAgICAgICAgICAgICAjIGxldHRlcjosIGJ1dCBpdCB1c2VzIC8gaW5zdGVhZCBcLiAgRm9yd2FyZAorICAgICAgICAgICAgICAgIyBzbGFzaGVzICgvKSBhcmUgZWFzaWVyIGZvciB1cy4gIFdlIGRvbid0CisgICAgICAgICAgICAgICAjIGhhdmUgdG8gZXNjYXBlIHRoZW0gdG8gZ2V0IHRoZW0gdG8gY3VybAorICAgICAgICAgICAgICAgIyB0aHJvdWdoIGEgc2hlbGwuCisgICAgICAgICAgICAgICBjaG9tcCgkcHdkID0gYGN5Z3BhdGggLW0gJHB3ZGApOworICAgICAgICAgICB9CisgICAgICAgICAgIGVsc2lmICgkbGliY3VybCA9fiAvb3BlbnNzbC9pKSB7CisgICAgICAgICAgICAgICAkaGFzX29wZW5zc2w9MTsKKyAgICAgICAgICAgICAgICRzc2xsaWI9Ik9wZW5TU0wiOworICAgICAgICAgICB9CisgICAgICAgICAgIGVsc2lmICgkbGliY3VybCA9fiAvZ251dGxzL2kpIHsKKyAgICAgICAgICAgICAgICRoYXNfZ251dGxzPTE7CisgICAgICAgICAgICAgICAkc3NsbGliPSJHbnVUTFMiOworICAgICAgICAgICB9CisgICAgICAgICAgIGVsc2lmICgkbGliY3VybCA9fiAvbnNzL2kpIHsKKyAgICAgICAgICAgICAgICRoYXNfbnNzPTE7CisgICAgICAgICAgICAgICAkc3NsbGliPSJOU1MiOworICAgICAgICAgICB9CisgICAgICAgICAgIGVsc2lmICgkbGliY3VybCA9fiAveWFzc2wvaSkgeworICAgICAgICAgICAgICAgJGhhc195YXNzbD0xOworICAgICAgICAgICAgICAgJGhhc19vcGVuc3NsPTE7CisgICAgICAgICAgICAgICAkc3NsbGliPSJ5YXNzbCI7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgZWxzaWYgKCRsaWJjdXJsID1+IC9wb2xhcnNzbC9pKSB7CisgICAgICAgICAgICAgICAkaGFzX3BvbGFyc3NsPTE7CisgICAgICAgICAgICAgICAkaGFzX29wZW5zc2w9MTsKKyAgICAgICAgICAgICAgICRzc2xsaWI9InBvbGFyc3NsIjsKKyAgICAgICAgICAgfQorICAgICAgICAgICBlbHNpZiAoJGxpYmN1cmwgPX4gL2F4dGxzL2kpIHsKKyAgICAgICAgICAgICAgICRoYXNfYXh0bHM9MTsKKyAgICAgICAgICAgICAgICRzc2xsaWI9ImF4VExTIjsKKyAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCRfID1+IC9eUHJvdG9jb2xzOiAoLiopL2kpIHsKKyAgICAgICAgICAgICMgdGhlc2UgYXJlIHRoZSBwcm90b2NvbHMgY29tcGlsZWQgaW4gdG8gdGhpcyBsaWJjdXJsCisgICAgICAgICAgICBAcHJvdG9jb2xzID0gc3BsaXQoJyAnLCBsYygkMSkpOworCisgICAgICAgICAgICAjIEdlbmVyYXRlIGEgInByb3RvLWlwdjYiIHZlcnNpb24gb2YgZWFjaCBwcm90b2NvbCB0byBtYXRjaCB0aGUKKyAgICAgICAgICAgICMgSVB2NiA8c2VydmVyPiBuYW1lLiBUaGlzIHdvcmtzIGV2ZW4gaWYgSVB2NiBzdXBwb3J0IGlzbid0CisgICAgICAgICAgICAjIGNvbXBpbGVkIGluIGJlY2F1c2UgdGhlIDxmZWF0dXJlcz4gdGVzdCB3aWxsIGZhaWwuCisgICAgICAgICAgICBwdXNoIEBwcm90b2NvbHMsIG1hcCgkXyAuICctaXB2NicsIEBwcm90b2NvbHMpOworCisgICAgICAgICAgICAjICdodHRwLXByb3h5JyBpcyB1c2VkIGluIHRlc3QgY2FzZXMgdG8gZG8gQ09OTkVDVCB0aHJvdWdoCisgICAgICAgICAgICBwdXNoIEBwcm90b2NvbHMsICdodHRwLXByb3h5JzsKKworICAgICAgICAgICAgIyAnbm9uZScgaXMgdXNlZCBpbiB0ZXN0IGNhc2VzIHRvIG1lYW4gbm8gc2VydmVyCisgICAgICAgICAgICBwdXNoIEBwcm90b2NvbHMsICdub25lJzsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkXyA9fiAvXkZlYXR1cmVzOiAoLiopL2kpIHsKKyAgICAgICAgICAgICRmZWF0ID0gJDE7CisgICAgICAgICAgICBpZigkZmVhdCA9fiAvVHJhY2tNZW1vcnkvaSkgeworICAgICAgICAgICAgICAgICMgY3VybCB3YXMgYnVpbHQgd2l0aCAtLWVuYWJsZS1jdXJsZGVidWcgKG1lbW9yeSB0cmFja2luZykKKyAgICAgICAgICAgICAgICAkY3VybF9kZWJ1ZyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZigkZmVhdCA9fiAvZGVidWcvaSkgeworICAgICAgICAgICAgICAgICMgY3VybCB3YXMgYnVpbHQgd2l0aCAtLWVuYWJsZS1kZWJ1ZworICAgICAgICAgICAgICAgICRkZWJ1Z19idWlsZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZigkZmVhdCA9fiAvU1NML2kpIHsKKyAgICAgICAgICAgICAgICAjIHNzbCBlbmFibGVkCisgICAgICAgICAgICAgICAgJHNzbF92ZXJzaW9uPTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZigkZmVhdCA9fiAvTGFyZ2VmaWxlL2kpIHsKKyAgICAgICAgICAgICAgICAjIGxhcmdlIGZpbGUgc3VwcG9ydAorICAgICAgICAgICAgICAgICRsYXJnZV9maWxlPTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZigkZmVhdCA9fiAvSUROL2kpIHsKKyAgICAgICAgICAgICAgICAjIElETiBzdXBwb3J0CisgICAgICAgICAgICAgICAgJGhhc19pZG49MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCRmZWF0ID1+IC9JUHY2L2kpIHsKKyAgICAgICAgICAgICAgICAkaGFzX2lwdjYgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoJGZlYXQgPX4gL2xpYnovaSkgeworICAgICAgICAgICAgICAgICRoYXNfbGlieiA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZigkZmVhdCA9fiAvTlRMTS9pKSB7CisgICAgICAgICAgICAgICAgIyBOVExNIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAkaGFzX250bG09MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCRmZWF0ID1+IC9OVExNX1dCL2kpIHsKKyAgICAgICAgICAgICAgICAjIE5UTE0gZGVsZWdhdGlvbiB0byB3aW5iaW5kIGRhZW1vbiBudGxtX2F1dGggaGVscGVyIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAkaGFzX250bG1fd2I9MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCRmZWF0ID1+IC9DaGFyQ29udi9pKSB7CisgICAgICAgICAgICAgICAgIyBDaGFyQ29udiBlbmFibGVkCisgICAgICAgICAgICAgICAgJGhhc19jaGFyY29udj0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoJGZlYXQgPX4gL1RMUy1TUlAvaSkgeworICAgICAgICAgICAgICAgICMgVExTLVNSUCBlbmFibGVkCisgICAgICAgICAgICAgICAgJGhhc190bHNfc3JwPTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgIworICAgICAgICAjIFRlc3QgaGFybmVzcyBjdXJyZW50bHkgdXNlcyBhIG5vbi1zdHVubmVsIHNlcnZlciBpbiBvcmRlciB0bworICAgICAgICAjIHJ1biBIVFRQIFRMUy1TUlAgdGVzdHMgcmVxdWlyZWQgd2hlbiBjdXJsIGlzIGJ1aWx0IHdpdGggaHR0cHMKKyAgICAgICAgIyBwcm90b2NvbCBzdXBwb3J0IGFuZCBUTFMtU1JQIGZlYXR1cmUgZW5hYmxlZC4gRm9yIGNvbnZlbmllbmNlCisgICAgICAgICMgJ2h0dHB0bHMnIG1heSBiZSBpbmNsdWRlZCBpbiB0aGUgdGVzdCBoYXJuZXNzIHByb3RvY29scyBhcnJheQorICAgICAgICAjIHRvIGRpZmZlcmVudGlhdGUgdGhpcyBmcm9tIGNsYXNzaWMgc3R1bm5lbCBiYXNlZCAnaHR0cHMnIHRlc3QKKyAgICAgICAgIyBoYXJuZXNzIHNlcnZlci4KKyAgICAgICAgIworICAgICAgICBpZigkaGFzX3Rsc19zcnApIHsKKyAgICAgICAgICAgIG15ICRhZGRfaHR0cHRsczsKKyAgICAgICAgICAgIGZvcihAcHJvdG9jb2xzKSB7CisgICAgICAgICAgICAgICAgaWYoJF8gPX4gL15odHRwcygtaXB2NnwpJC8pIHsKKyAgICAgICAgICAgICAgICAgICAgJGFkZF9odHRwdGxzPTE7CisgICAgICAgICAgICAgICAgICAgIGxhc3Q7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoJGFkZF9odHRwdGxzICYmICghIGdyZXAgL15odHRwdGxzJC8sIEBwcm90b2NvbHMpKSB7CisgICAgICAgICAgICAgICAgcHVzaCBAcHJvdG9jb2xzLCAnaHR0cHRscyc7CisgICAgICAgICAgICAgICAgcHVzaCBAcHJvdG9jb2xzLCAnaHR0cHRscy1pcHY2JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZighJGN1cmwpIHsKKyAgICAgICAgbG9nbXNnICJ1bmFibGUgdG8gZ2V0IGN1cmwncyB2ZXJzaW9uLCBmdXJ0aGVyIGRldGFpbHMgYXJlOlxuIjsKKyAgICAgICAgbG9nbXNnICJpc3N1ZWQgY29tbWFuZDogXG4iOworICAgICAgICBsb2dtc2cgIiR2ZXJzaW9uY21kIFxuIjsKKyAgICAgICAgaWYgKCR2ZXJzcmV0dmFsID09IC0xKSB7CisgICAgICAgICAgICBsb2dtc2cgImNvbW1hbmQgZmFpbGVkIHdpdGg6IFxuIjsKKyAgICAgICAgICAgIGxvZ21zZyAiJHZlcnNub2V4ZWMgXG4iOworICAgICAgICB9CisgICAgICAgIGVsc2lmICgkdmVyc3JldHZhbCAmIDEyNykgeworICAgICAgICAgICAgbG9nbXNnIHNwcmludGYoImNvbW1hbmQgZGllZCB3aXRoIHNpZ25hbCAlZCwgYW5kICVzIGNvcmVkdW1wLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgkdmVyc3JldHZhbCAmIDEyNyksICgkdmVyc3JldHZhbCAmIDEyOCk/ImEiOiJubyIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbG9nbXNnIHNwcmludGYoImNvbW1hbmQgZXhpdGVkIHdpdGggdmFsdWUgJWQgXG4iLCAkdmVyc3JldHZhbCA+PiA4KTsKKyAgICAgICAgfQorICAgICAgICBsb2dtc2cgImNvbnRlbnRzIG9mICRjdXJsdmVyb3V0OiBcbiI7CisgICAgICAgIGRpc3BsYXlsb2djb250ZW50KCIkY3VybHZlcm91dCIpOworICAgICAgICBsb2dtc2cgImNvbnRlbnRzIG9mICRjdXJsdmVyZXJyOiBcbiI7CisgICAgICAgIGRpc3BsYXlsb2djb250ZW50KCIkY3VybHZlcmVyciIpOworICAgICAgICBkaWUgImNvdWxkbid0IGdldCBjdXJsJ3MgdmVyc2lvbiI7CisgICAgfQorCisgICAgaWYoLXIgIi4uL2xpYi9jdXJsX2NvbmZpZy5oIikgeworICAgICAgICBvcGVuKENPTkYsICI8Li4vbGliL2N1cmxfY29uZmlnLmgiKTsKKyAgICAgICAgd2hpbGUoPENPTkY+KSB7CisgICAgICAgICAgICBpZigkXyA9fiAvXlwjZGVmaW5lIEhBVkVfR0VUUkxJTUlULykgeworICAgICAgICAgICAgICAgICRoYXNfZ2V0cmxpbWl0ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjbG9zZShDT05GKTsKKyAgICB9CisKKyAgICBpZigkaGFzX2lwdjYpIHsKKyAgICAgICAgIyBjbGllbnQgaGFzIGlwdjYgc3VwcG9ydAorCisgICAgICAgICMgY2hlY2sgaWYgdGhlIEhUVFAgc2VydmVyIGhhcyBpdCEKKyAgICAgICAgbXkgQHN3cyA9IGBzZXJ2ZXIvc3dzIC0tdmVyc2lvbmA7CisgICAgICAgIGlmKCRzd3NbMF0gPX4gL0lQdjYvKSB7CisgICAgICAgICAgICAjIEhUVFAgc2VydmVyIGhhcyBpcHY2IHN1cHBvcnQhCisgICAgICAgICAgICAkaHR0cF9pcHY2ID0gMTsKKyAgICAgICAgICAgICRnb3BoZXJfaXB2NiA9IDE7CisgICAgICAgIH0KKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBGVFAgc2VydmVyIGhhcyBpdCEKKyAgICAgICAgQHN3cyA9IGBzZXJ2ZXIvc29ja2ZpbHQgLS12ZXJzaW9uYDsKKyAgICAgICAgaWYoJHN3c1swXSA9fiAvSVB2Ni8pIHsKKyAgICAgICAgICAgICMgRlRQIHNlcnZlciBoYXMgaXB2NiBzdXBwb3J0IQorICAgICAgICAgICAgJGZ0cF9pcHY2ID0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCEkY3VybF9kZWJ1ZyAmJiAkdG9ydHVyZSkgeworICAgICAgICBkaWUgImNhbid0IHJ1biB0b3J0dXJlIHRlc3RzIHNpbmNlIGN1cmwgd2FzIG5vdCBidWlsdCB3aXRoIGN1cmxkZWJ1ZyI7CisgICAgfQorCisgICAgJGhhc19zaGFyZWQgPSBgc2ggJENVUkxDT05GSUcgLS1idWlsdC1zaGFyZWRgOworICAgIGNob21wICRoYXNfc2hhcmVkOworCisgICAgIyBjdXJsIGRvZXNuJ3QgbGlzdCBjcnlwdG9ncmFwaGljIHN1cHBvcnQgc2VwYXJhdGVseSwgc28gYXNzdW1lIGl0J3MKKyAgICAjIGFsd2F5cyBhdmFpbGFibGUKKyAgICAkaGFzX2NyeXB0bz0xOworCisgICAgbXkgJGhvc3RuYW1lPWpvaW4oJyAnLCBydW5jbGllbnRvdXRwdXQoImhvc3RuYW1lIikpOworICAgIG15ICRob3N0dHlwZT1qb2luKCcgJywgcnVuY2xpZW50b3V0cHV0KCJ1bmFtZSAtYSIpKTsKKworICAgIGxvZ21zZyAoIioqKioqKioqKiBTeXN0ZW0gY2hhcmFjdGVyaXN0aWNzICoqKioqKioqIFxuIiwKKyAgICAiKiAkY3VybFxuIiwKKyAgICAiKiAkbGliY3VybFxuIiwKKyAgICAiKiBGZWF0dXJlczogJGZlYXRcbiIsCisgICAgIiogSG9zdDogJGhvc3RuYW1lIiwKKyAgICAiKiBTeXN0ZW06ICRob3N0dHlwZSIpOworCisgICAgbG9nbXNnIHNwcmludGYoIiogU2VydmVyIFNTTDogICAlOHMiLCAkc3R1bm5lbD8iT04gIjoiT0ZGIik7CisgICAgbG9nbXNnIHNwcmludGYoIiAgbGliY3VybCBTU0w6ICAlc1xuIiwgJHNzbF92ZXJzaW9uPyJPTiAiOiJPRkYiKTsKKyAgICBsb2dtc2cgc3ByaW50ZigiKiBkZWJ1ZyBidWlsZDogICU4cyIsICRkZWJ1Z19idWlsZD8iT04gIjoiT0ZGIik7CisgICAgbG9nbXNnIHNwcmludGYoIiAgdHJhY2sgbWVtb3J5OiAlc1xuIiwgJGN1cmxfZGVidWc/Ik9OICI6Ik9GRiIpOworICAgIGxvZ21zZyBzcHJpbnRmKCIqIHZhbGdyaW5kOiAgICAgJThzIiwgJHZhbGdyaW5kPyJPTiAiOiJPRkYiKTsKKyAgICBsb2dtc2cgc3ByaW50ZigiICBIVFRQIElQdjYgICAgICVzXG4iLCAkaHR0cF9pcHY2PyJPTiAiOiJPRkYiKTsKKyAgICBsb2dtc2cgc3ByaW50ZigiKiBGVFAgSVB2NiAgICAgICU4cyIsICRmdHBfaXB2Nj8iT04gIjoiT0ZGIik7CisgICAgbG9nbXNnIHNwcmludGYoIiAgTGlidG9vbCBsaWI6ICAlc1xuIiwgJGxpYnRvb2w/Ik9OICI6Ik9GRiIpOworICAgIGxvZ21zZyBzcHJpbnRmKCIqIFNoYXJlZCBidWlsZDogICAgICAlc1xuIiwgJGhhc19zaGFyZWQpOworICAgIGlmKCRzc2xfdmVyc2lvbikgeworICAgICAgICBsb2dtc2cgc3ByaW50ZigiKiBTU0wgbGlicmFyeTogJTEzc1xuIiwgJHNzbGxpYik7CisgICAgfQorCisgICAgbG9nbXNnICIqIFBvcnRzOlxuIjsKKworICAgIGxvZ21zZyBzcHJpbnRmKCIqICAgSFRUUC8lZCAiLCAkSFRUUFBPUlQpOworICAgIGxvZ21zZyBzcHJpbnRmKCJGVFAvJWQgIiwgJEZUUFBPUlQpOworICAgIGxvZ21zZyBzcHJpbnRmKCJGVFAyLyVkICIsICRGVFAyUE9SVCk7CisgICAgbG9nbXNnIHNwcmludGYoIlJUU1AvJWQgIiwgJFJUU1BQT1JUKTsKKyAgICBpZigkc3R1bm5lbCkgeworICAgICAgICBsb2dtc2cgc3ByaW50ZigiRlRQUy8lZCAiLCAkRlRQU1BPUlQpOworICAgICAgICBsb2dtc2cgc3ByaW50ZigiSFRUUFMvJWQgIiwgJEhUVFBTUE9SVCk7CisgICAgfQorICAgIGxvZ21zZyBzcHJpbnRmKCJcbiogICBURlRQLyVkICIsICRURlRQUE9SVCk7CisgICAgaWYoJGh0dHBfaXB2NikgeworICAgICAgICBsb2dtc2cgc3ByaW50ZigiSFRUUC1JUHY2LyVkICIsICRIVFRQNlBPUlQpOworICAgICAgICBsb2dtc2cgc3ByaW50ZigiUlRTUC1JUHY2LyVkICIsICRSVFNQNlBPUlQpOworICAgIH0KKyAgICBpZigkZnRwX2lwdjYpIHsKKyAgICAgICAgbG9nbXNnIHNwcmludGYoIkZUUC1JUHY2LyVkICIsICRGVFA2UE9SVCk7CisgICAgfQorICAgIGlmKCR0ZnRwX2lwdjYpIHsKKyAgICAgICAgbG9nbXNnIHNwcmludGYoIlRGVFAtSVB2Ni8lZCAiLCAkVEZUUDZQT1JUKTsKKyAgICB9CisgICAgbG9nbXNnIHNwcmludGYoIlxuKiAgIEdPUEhFUi8lZCAiLCAkR09QSEVSUE9SVCk7CisgICAgaWYoJGdvcGhlcl9pcHY2KSB7CisgICAgICAgIGxvZ21zZyBzcHJpbnRmKCJHT1BIRVItSVB2Ni8lZCIsICRHT1BIRVJQT1JUKTsKKyAgICB9CisgICAgbG9nbXNnIHNwcmludGYoIlxuKiAgIFNTSC8lZCAiLCAkU1NIUE9SVCk7CisgICAgbG9nbXNnIHNwcmludGYoIlNPQ0tTLyVkICIsICRTT0NLU1BPUlQpOworICAgIGxvZ21zZyBzcHJpbnRmKCJQT1AzLyVkICIsICRQT1AzUE9SVCk7CisgICAgbG9nbXNnIHNwcmludGYoIklNQVAvJWQgIiwgJElNQVBQT1JUKTsKKyAgICBsb2dtc2cgc3ByaW50ZigiU01UUC8lZFxuIiwgJFNNVFBQT1JUKTsKKyAgICBpZigkZnRwX2lwdjYpIHsKKyAgICAgICAgbG9nbXNnIHNwcmludGYoIiogICBQT1AzLUlQdjYvJWQgIiwgJFBPUDM2UE9SVCk7CisgICAgICAgIGxvZ21zZyBzcHJpbnRmKCJJTUFQLUlQdjYvJWQgIiwgJElNQVA2UE9SVCk7CisgICAgICAgIGxvZ21zZyBzcHJpbnRmKCJTTVRQLUlQdjYvJWRcbiIsICRTTVRQNlBPUlQpOworICAgIH0KKyAgICBpZigkaHR0cHRsc3NydikgeworICAgICAgICBsb2dtc2cgc3ByaW50ZigiKiAgIEhUVFBUTFMvJWQgIiwgJEhUVFBUTFNQT1JUKTsKKyAgICAgICAgaWYoJGhhc19pcHY2KSB7CisgICAgICAgICAgICBsb2dtc2cgc3ByaW50ZigiSFRUUFRMUy1JUHY2LyVkICIsICRIVFRQVExTNlBPUlQpOworICAgICAgICB9CisgICAgICAgIGxvZ21zZyAiXG4iOworICAgIH0KKworICAgICRoYXNfdGV4dGF3YXJlID0gKCReTyBlcSAnTVNXaW4zMicpIHx8ICgkXk8gZXEgJ21zeXMnKTsKKworICAgIGxvZ21zZyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogXG4iOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBzdHVmZiBpbnRvIGVpdGhlciBhIGpvaW5lZCB1cCBmaWxlIG9yCisjIGEgY29tbWFuZCwgaW4gZWl0aGVyIGNhc2UgcGFzc2VkIGJ5IHJlZmVyZW5jZQorIworc3ViIHN1YlZhcmlhYmxlcyB7CisgIG15ICgkdGhpbmcpID0gQF87CisKKyAgIyBwb3J0cworCisgICQkdGhpbmcgPX4gcy8lRlRQNlBPUlQvJEZUUDZQT1JUL2c7CisgICQkdGhpbmcgPX4gcy8lRlRQMlBPUlQvJEZUUDJQT1JUL2c7CisgICQkdGhpbmcgPX4gcy8lRlRQU1BPUlQvJEZUUFNQT1JUL2c7CisgICQkdGhpbmcgPX4gcy8lRlRQUE9SVC8kRlRQUE9SVC9nOworCisgICQkdGhpbmcgPX4gcy8lR09QSEVSNlBPUlQvJEdPUEhFUjZQT1JUL2c7CisgICQkdGhpbmcgPX4gcy8lR09QSEVSUE9SVC8kR09QSEVSUE9SVC9nOworCisgICQkdGhpbmcgPX4gcy8lSFRUUFRMUzZQT1JULyRIVFRQVExTNlBPUlQvZzsKKyAgJCR0aGluZyA9fiBzLyVIVFRQVExTUE9SVC8kSFRUUFRMU1BPUlQvZzsKKyAgJCR0aGluZyA9fiBzLyVIVFRQNlBPUlQvJEhUVFA2UE9SVC9nOworICAkJHRoaW5nID1+IHMvJUhUVFBTUE9SVC8kSFRUUFNQT1JUL2c7CisgICQkdGhpbmcgPX4gcy8lSFRUUFBPUlQvJEhUVFBQT1JUL2c7CisgICQkdGhpbmcgPX4gcy8lUFJPWFlQT1JULyRIVFRQUFJPWFlQT1JUL2c7CisKKyAgJCR0aGluZyA9fiBzLyVJTUFQNlBPUlQvJElNQVA2UE9SVC9nOworICAkJHRoaW5nID1+IHMvJUlNQVBQT1JULyRJTUFQUE9SVC9nOworCisgICQkdGhpbmcgPX4gcy8lUE9QMzZQT1JULyRQT1AzNlBPUlQvZzsKKyAgJCR0aGluZyA9fiBzLyVQT1AzUE9SVC8kUE9QM1BPUlQvZzsKKworICAkJHRoaW5nID1+IHMvJVJUU1A2UE9SVC8kUlRTUDZQT1JUL2c7CisgICQkdGhpbmcgPX4gcy8lUlRTUFBPUlQvJFJUU1BQT1JUL2c7CisKKyAgJCR0aGluZyA9fiBzLyVTTVRQNlBPUlQvJFNNVFA2UE9SVC9nOworICAkJHRoaW5nID1+IHMvJVNNVFBQT1JULyRTTVRQUE9SVC9nOworCisgICQkdGhpbmcgPX4gcy8lU09DS1NQT1JULyRTT0NLU1BPUlQvZzsKKyAgJCR0aGluZyA9fiBzLyVTU0hQT1JULyRTU0hQT1JUL2c7CisKKyAgJCR0aGluZyA9fiBzLyVURlRQNlBPUlQvJFRGVFA2UE9SVC9nOworICAkJHRoaW5nID1+IHMvJVRGVFBQT1JULyRURlRQUE9SVC9nOworCisgICMgY2xpZW50IElQIGFkZHJlc3NlcworCisgICQkdGhpbmcgPX4gcy8lQ0xJRU5UNklQLyRDTElFTlQ2SVAvZzsKKyAgJCR0aGluZyA9fiBzLyVDTElFTlRJUC8kQ0xJRU5USVAvZzsKKworICAjIHNlcnZlciBJUCBhZGRyZXNzZXMKKworICAkJHRoaW5nID1+IHMvJUhPU1Q2SVAvJEhPU1Q2SVAvZzsKKyAgJCR0aGluZyA9fiBzLyVIT1NUSVAvJEhPU1RJUC9nOworCisgICMgbWlzYworCisgICQkdGhpbmcgPX4gcy8lQ1VSTC8kQ1VSTC9nOworICAkJHRoaW5nID1+IHMvJVBXRC8kcHdkL2c7CisgICQkdGhpbmcgPX4gcy8lU1JDRElSLyRzcmNkaXIvZzsKKyAgJCR0aGluZyA9fiBzLyVVU0VSLyRVU0VSL2c7CisKKyAgIyBUaGUgcHVycG9zZSBvZiBGVFBUSU1FMiBhbmQgRlRQVElNRTMgaXMgdG8gcHJvdmlkZSB0aW1lcyB0aGF0IGNhbiBiZQorICAjIHVzZWQgZm9yIHRpbWUtb3V0IHRlc3RzIGFuZCB0aGF0IHdob3VsZCB3b3JrIG9uIG1vc3QgaG9zdHMgYXMgdGhlc2UKKyAgIyBhZGp1c3QgZm9yIHRoZSBzdGFydHVwL2NoZWNrIHRpbWUgZm9yIHRoaXMgcGFydGljdWxhciBob3N0LiBXZSBuZWVkZWQKKyAgIyB0byBkbyB0aGlzIHRvIG1ha2UgdGhlIHRlc3Qgc3VpdGUgcnVuIGJldHRlciBvbiB2ZXJ5IHNsb3cgaG9zdHMuCisKKyAgbXkgJGZ0cDIgPSAkZnRwY2hlY2t0aW1lICogMjsKKyAgbXkgJGZ0cDMgPSAkZnRwY2hlY2t0aW1lICogMzsKKworICAkJHRoaW5nID1+IHMvJUZUUFRJTUUyLyRmdHAyL2c7CisgICQkdGhpbmcgPX4gcy8lRlRQVElNRTMvJGZ0cDMvZzsKK30KKworc3ViIGZpeGFycmF5IHsKKyAgICBteSBAaW4gPSBAXzsKKworICAgIGZvcihAaW4pIHsKKyAgICAgICAgc3ViVmFyaWFibGVzIFwkXzsKKyAgICB9CisgICAgcmV0dXJuIEBpbjsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUHJvdmlkZSB0aW1lIHN0YW1wcyBmb3Igc2luZ2xlIHRlc3Qgc2tpcHBlZCBldmVudHMKKyMKK3N1YiB0aW1lc3RhbXBza2lwcGVkZXZlbnRzIHsKKyAgICBteSAkdGVzdG51bSA9ICRfWzBdOworCisgICAgcmV0dXJuIGlmKChub3QgZGVmaW5lZCgkdGVzdG51bSkpIHx8ICgkdGVzdG51bSA8IDEpKTsKKworICAgIGlmKCR0aW1lc3RhdHMpIHsKKworICAgICAgICBpZigkdGltZXZyZnllbmR7JHRlc3RudW19KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJHRpbWVzcnZybG9neyR0ZXN0bnVtfSkgeworICAgICAgICAgICAgJHRpbWV2cmZ5ZW5keyR0ZXN0bnVtfSA9ICR0aW1lc3J2cmxvZ3skdGVzdG51bX07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJHRpbWV0b29sZW5keyR0ZXN0bnVtfSkgeworICAgICAgICAgICAgJHRpbWV2cmZ5ZW5keyR0ZXN0bnVtfSA9ICR0aW1ldG9vbGVuZHskdGVzdG51bX07CisgICAgICAgICAgICAkdGltZXNydnJsb2d7JHRlc3RudW19ID0gJHRpbWV0b29sZW5keyR0ZXN0bnVtfTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkdGltZXRvb2xpbml7JHRlc3RudW19KSB7CisgICAgICAgICAgICAkdGltZXZyZnllbmR7JHRlc3RudW19ID0gJHRpbWV0b29saW5peyR0ZXN0bnVtfTsKKyAgICAgICAgICAgICR0aW1lc3J2cmxvZ3skdGVzdG51bX0gPSAkdGltZXRvb2xpbml7JHRlc3RudW19OworICAgICAgICAgICAgJHRpbWV0b29sZW5keyR0ZXN0bnVtfSA9ICR0aW1ldG9vbGluaXskdGVzdG51bX07CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJHRpbWVzcnZyZW5keyR0ZXN0bnVtfSkgeworICAgICAgICAgICAgJHRpbWV2cmZ5ZW5keyR0ZXN0bnVtfSA9ICR0aW1lc3J2cmVuZHskdGVzdG51bX07CisgICAgICAgICAgICAkdGltZXNydnJsb2d7JHRlc3RudW19ID0gJHRpbWVzcnZyZW5keyR0ZXN0bnVtfTsKKyAgICAgICAgICAgICR0aW1ldG9vbGVuZHskdGVzdG51bX0gPSAkdGltZXNydnJlbmR7JHRlc3RudW19OworICAgICAgICAgICAgJHRpbWV0b29saW5peyR0ZXN0bnVtfSA9ICR0aW1lc3J2cmVuZHskdGVzdG51bX07CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJHRpbWVzcnZyaW5peyR0ZXN0bnVtfSkgeworICAgICAgICAgICAgJHRpbWV2cmZ5ZW5keyR0ZXN0bnVtfSA9ICR0aW1lc3J2cmluaXskdGVzdG51bX07CisgICAgICAgICAgICAkdGltZXNydnJsb2d7JHRlc3RudW19ID0gJHRpbWVzcnZyaW5peyR0ZXN0bnVtfTsKKyAgICAgICAgICAgICR0aW1ldG9vbGVuZHskdGVzdG51bX0gPSAkdGltZXNydnJpbml7JHRlc3RudW19OworICAgICAgICAgICAgJHRpbWV0b29saW5peyR0ZXN0bnVtfSA9ICR0aW1lc3J2cmluaXskdGVzdG51bX07CisgICAgICAgICAgICAkdGltZXNydnJlbmR7JHRlc3RudW19ID0gJHRpbWVzcnZyaW5peyR0ZXN0bnVtfTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkdGltZXByZXBpbml7JHRlc3RudW19KSB7CisgICAgICAgICAgICAkdGltZXZyZnllbmR7JHRlc3RudW19ID0gJHRpbWVwcmVwaW5peyR0ZXN0bnVtfTsKKyAgICAgICAgICAgICR0aW1lc3J2cmxvZ3skdGVzdG51bX0gPSAkdGltZXByZXBpbml7JHRlc3RudW19OworICAgICAgICAgICAgJHRpbWV0b29sZW5keyR0ZXN0bnVtfSA9ICR0aW1lcHJlcGluaXskdGVzdG51bX07CisgICAgICAgICAgICAkdGltZXRvb2xpbml7JHRlc3RudW19ID0gJHRpbWVwcmVwaW5peyR0ZXN0bnVtfTsKKyAgICAgICAgICAgICR0aW1lc3J2cmVuZHskdGVzdG51bX0gPSAkdGltZXByZXBpbml7JHRlc3RudW19OworICAgICAgICAgICAgJHRpbWVzcnZyaW5peyR0ZXN0bnVtfSA9ICR0aW1lcHJlcGluaXskdGVzdG51bX07CisgICAgICAgIH0KKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJ1biBhIHNpbmdsZSBzcGVjaWZpZWQgdGVzdCBjYXNlCisjCitzdWIgc2luZ2xldGVzdCB7CisgICAgbXkgKCR0ZXN0bnVtLCAkY291bnQsICR0b3RhbCk9QF87CisKKyAgICBteSBAd2hhdDsKKyAgICBteSAkd2h5OworICAgIG15ICVmZWF0dXJlOworICAgIG15ICRjbWQ7CisgICAgbXkgJGRpc2FibGV2YWxncmluZDsKKworICAgICMgY29weSB0ZXN0IG51bWJlciB0byBhIGdsb2JhbCBzY29wZSB2YXIsIHRoaXMgYWxsb3dzCisgICAgIyB0ZXN0bnVtIGNoZWNraW5nIHdoZW4gc3RhcnRpbmcgdGVzdCBoYXJuZXNzIHNlcnZlcnMuCisgICAgJHRlc3RudW1jaGVjayA9ICR0ZXN0bnVtOworCisgICAgIyB0aW1lc3RhbXAgdGVzdCBwcmVwYXJhdGlvbiBzdGFydAorICAgICR0aW1lcHJlcGluaXskdGVzdG51bX0gPSBUaW1lOjpIaVJlczo6dGltZSgpIGlmKCR0aW1lc3RhdHMpOworCisgICAgaWYoJGRpc3R0ZXN0cyAhfiAvdGVzdCR0ZXN0bnVtXFcvICkgeworICAgICAgICBsb2dtc2cgIldhcm5pbmc6IHRlc3QkdGVzdG51bSBub3QgcHJlc2VudCBpbiB0ZXN0cy9kYXRhL01ha2VmaWxlLmFtXG4iOworICAgIH0KKyAgICBpZigkZGlzYWJsZWR7JHRlc3RudW19KSB7CisgICAgICAgIGxvZ21zZyAiV2FybmluZzogdGVzdCR0ZXN0bnVtIGlzIGV4cGxpY2l0bHkgZGlzYWJsZWRcbiI7CisgICAgfQorCisgICAgIyBsb2FkIHRoZSB0ZXN0IGNhc2UgZmlsZSBkZWZpbml0aW9uCisgICAgaWYobG9hZHRlc3QoIiR7VEVTVERJUn0vdGVzdCR7dGVzdG51bX0iKSkgeworICAgICAgICBpZigkdmVyYm9zZSkgeworICAgICAgICAgICAgIyB0aGlzIGlzIG5vdCBhIHRlc3QKKyAgICAgICAgICAgIGxvZ21zZyAiUlVOOiAkdGVzdG51bSBkb2Vzbid0IGxvb2sgbGlrZSBhIHRlc3QgY2FzZVxuIjsKKyAgICAgICAgfQorICAgICAgICAkd2h5ID0gIm5vIHRlc3QiOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgQHdoYXQgPSBnZXRwYXJ0KCJjbGllbnQiLCAiZmVhdHVyZXMiKTsKKyAgICB9CisKKyAgICBmb3IoQHdoYXQpIHsKKyAgICAgICAgbXkgJGYgPSAkXzsKKyAgICAgICAgJGYgPX4gcy9ccy8vZzsKKworICAgICAgICAkZmVhdHVyZXskZn09JGY7ICMgd2UgcmVxdWlyZSB0aGlzIGZlYXR1cmUKKworICAgICAgICBpZigkZiBlcSAiU1NMIikgeworICAgICAgICAgICAgaWYoJHNzbF92ZXJzaW9uKSB7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZigkZiBlcSAiT3BlblNTTCIpIHsKKyAgICAgICAgICAgIGlmKCRoYXNfb3BlbnNzbCkgeworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJGYgZXEgIkdudVRMUyIpIHsKKyAgICAgICAgICAgIGlmKCRoYXNfZ251dGxzKSB7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZigkZiBlcSAiTlNTIikgeworICAgICAgICAgICAgaWYoJGhhc19uc3MpIHsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCRmIGVxICJheFRMUyIpIHsKKyAgICAgICAgICAgIGlmKCRoYXNfYXh0bHMpIHsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCRmIGVxICJ1bml0dGVzdCIpIHsKKyAgICAgICAgICAgIGlmKCRkZWJ1Z19idWlsZCkgeworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJGYgZXEgImRlYnVnIikgeworICAgICAgICAgICAgaWYoJGRlYnVnX2J1aWxkKSB7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZigkZiBlcSAibGFyZ2VfZmlsZSIpIHsKKyAgICAgICAgICAgIGlmKCRsYXJnZV9maWxlKSB7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZigkZiBlcSAiaWRuIikgeworICAgICAgICAgICAgaWYoJGhhc19pZG4pIHsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCRmIGVxICJpcHY2IikgeworICAgICAgICAgICAgaWYoJGhhc19pcHY2KSB7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZigkZiBlcSAibGlieiIpIHsKKyAgICAgICAgICAgIGlmKCRoYXNfbGlieikgeworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJGYgZXEgIk5UTE0iKSB7CisgICAgICAgICAgICBpZigkaGFzX250bG0pIHsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCRmIGVxICJOVExNX1dCIikgeworICAgICAgICAgICAgaWYoJGhhc19udGxtX3diKSB7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZigkZiBlcSAiZ2V0cmxpbWl0IikgeworICAgICAgICAgICAgaWYoJGhhc19nZXRybGltaXQpIHsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCRmIGVxICJjcnlwdG8iKSB7CisgICAgICAgICAgICBpZigkaGFzX2NyeXB0bykgeworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJGYgZXEgIlRMUy1TUlAiKSB7CisgICAgICAgICAgICBpZigkaGFzX3Rsc19zcnApIHsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCRmIGVxICJzb2NrcyIpIHsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgIyBTZWUgaWYgdGhpcyAiZmVhdHVyZSIgaXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHByb3RvY29scworICAgICAgICBlbHNpZiAoZ3JlcCAvXlxRJGZcRSQvaSwgQHByb3RvY29scykgeworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgICR3aHkgPSAiY3VybCBsYWNrcyAkZiBzdXBwb3J0IjsKKyAgICAgICAgbGFzdDsKKyAgICB9CisKKyAgICBpZighJHdoeSkgeworICAgICAgICBteSBAa2V5d29yZHMgPSBnZXRwYXJ0KCJpbmZvIiwgImtleXdvcmRzIik7CisgICAgICAgIG15ICRtYXRjaDsKKyAgICAgICAgbXkgJGs7CisgICAgICAgIGZvciAkayAoQGtleXdvcmRzKSB7CisgICAgICAgICAgICBjaG9tcCAkazsKKyAgICAgICAgICAgIGlmICgkZGlzYWJsZWRfa2V5d29yZHN7JGt9KSB7CisgICAgICAgICAgICAgICAgJHdoeSA9ICJkaXNhYmxlZCBieSBrZXl3b3JkIjsKKyAgICAgICAgICAgIH0gZWxzaWYgKCRlbmFibGVkX2tleXdvcmRzeyRrfSkgeworICAgICAgICAgICAgICAgICRtYXRjaCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZighJHdoeSAmJiAhJG1hdGNoICYmICVlbmFibGVkX2tleXdvcmRzKSB7CisgICAgICAgICAgICAkd2h5ID0gImRpc2FibGVkIGJ5IG1pc3Npbmcga2V5d29yZCI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAjIHRlc3QgZGVmaW5pdGlvbiBtYXkgaW5zdHJ1Y3QgdG8gKHVuKXNldCBlbnZpcm9ubWVudCB2YXJzCisgICAgIyB0aGlzIGlzIGRvbmUgdGhpcyBlYXJseSwgc28gdGhhdCB0aGUgcHJlY2hlY2sgY2FuIHVzZSBlbnZpcm9ubWVudAorICAgICMgdmFyaWFibGVzIGFuZCBzdGlsbCBiYWlsIG91dCBmaW5lIG9uIGVycm9ycworCisgICAgIyByZXN0b3JlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHdlcmUgbW9kaWZpZWQgaW4gYSBwcmV2aW91cyBydW4KKyAgICBmb3JlYWNoIG15ICR2YXIgKGtleXMgJW9sZGVudikgeworICAgICAgICBpZigkb2xkZW52eyR2YXJ9IGVxICdub3RzZXQnKSB7CisgICAgICAgICAgICBkZWxldGUgJEVOVnskdmFyfSBpZigkRU5WeyR2YXJ9KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICRFTlZ7JHZhcn0gPSAkb2xkZW52eyR2YXJ9OworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSAkb2xkZW52eyR2YXJ9OworICAgIH0KKworICAgICMgcmVtb3ZlIHRlc3Qgc2VydmVyIGNvbW1hbmRzIGZpbGUgYmVmb3JlIHNlcnZlcnMgYXJlIHN0YXJ0ZWQvdmVyaWZpZWQKKyAgICB1bmxpbmsoJEZUUERDTUQpIGlmKC1mICRGVFBEQ01EKTsKKworICAgICMgdGltZXN0YW1wIHJlcXVpcmVkIHNlcnZlcnMgdmVyaWZpY2F0aW9uIHN0YXJ0CisgICAgJHRpbWVzcnZyaW5peyR0ZXN0bnVtfSA9IFRpbWU6OkhpUmVzOjp0aW1lKCkgaWYoJHRpbWVzdGF0cyk7CisKKyAgICBpZighJHdoeSkgeworICAgICAgICAkd2h5ID0gc2VydmVyZm9ydGVzdCgkdGVzdG51bSk7CisgICAgfQorCisgICAgIyB0aW1lc3RhbXAgcmVxdWlyZWQgc2VydmVycyB2ZXJpZmljYXRpb24gZW5kCisgICAgJHRpbWVzcnZyZW5keyR0ZXN0bnVtfSA9IFRpbWU6OkhpUmVzOjp0aW1lKCkgaWYoJHRpbWVzdGF0cyk7CisKKyAgICBteSBAc2V0ZW52ID0gZ2V0cGFydCgiY2xpZW50IiwgInNldGVudiIpOworICAgIGlmKEBzZXRlbnYpIHsKKyAgICAgICAgZm9yZWFjaCBteSAkcyAoQHNldGVudikgeworICAgICAgICAgICAgY2hvbXAgJHM7CisgICAgICAgICAgICBzdWJWYXJpYWJsZXMgXCRzOworICAgICAgICAgICAgaWYoJHMgPX4gLyhbXj1dKik9KC4qKS8pIHsKKyAgICAgICAgICAgICAgICBteSAoJHZhciwgJGNvbnRlbnQpID0gKCQxLCAkMik7CisgICAgICAgICAgICAgICAgIyByZW1lbWJlciBjdXJyZW50IHNldHRpbmcsIHRvIHJlc3RvcmUgaXQgb25jZSB0ZXN0IHJ1bnMKKyAgICAgICAgICAgICAgICAkb2xkZW52eyR2YXJ9ID0gKCRFTlZ7JHZhcn0pPyIkRU5WeyR2YXJ9Ijonbm90c2V0JzsKKyAgICAgICAgICAgICAgICAjIHNldCBuZXcgdmFsdWUKKyAgICAgICAgICAgICAgICBpZighJGNvbnRlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRFTlZ7JHZhcn0gaWYoJEVOVnskdmFyfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZigkdmFyID1+IC9eTERfUFJFTE9BRC8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGV4ZV9leHQoKSAmJiAoZXhlX2V4dCgpIGVxICcuZXhlJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHByaW50ICJTa2lwcGluZyBMRF9QUkVMT0FEIGR1ZSB0byBsYWNrIG9mIE9TIHN1cHBvcnRcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRkZWJ1Z19idWlsZCB8fCAoJGhhc19zaGFyZWQgbmUgInllcyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmludCAiU2tpcHBpbmcgTERfUFJFTE9BRCBkdWUgdG8gbm8gcmVsZWFzZSBzaGFyZWQgYnVpbGRcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAkRU5WeyR2YXJ9ID0gIiRjb250ZW50IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZighJHdoeSkgeworICAgICAgICAjIFRPRE86CisgICAgICAgICMgQWRkIGEgcHJlY2hlY2sgY2FjaGUuIElmIGEgcHJlY2hlY2sgY29tbWFuZCB3YXMgYWxyZWFkeSBpbnZva2VkCisgICAgICAgICMgZXhhY3RseSBsaWtlIHRoaXMsIHRoZW4gdXNlIHRoZSBwcmV2aW91cyByZXN1bHQgdG8gc3BlZWQgdXAKKyAgICAgICAgIyBzdWNjZXNzaXZlIHRlc3QgaW52b2tlcyEKKworICAgICAgICBteSBAcHJlY2hlY2sgPSBnZXRwYXJ0KCJjbGllbnQiLCAicHJlY2hlY2siKTsKKyAgICAgICAgaWYoQHByZWNoZWNrKSB7CisgICAgICAgICAgICAkY21kID0gJHByZWNoZWNrWzBdOworICAgICAgICAgICAgY2hvbXAgJGNtZDsKKyAgICAgICAgICAgIHN1YlZhcmlhYmxlcyBcJGNtZDsKKyAgICAgICAgICAgIGlmKCRjbWQpIHsKKyAgICAgICAgICAgICAgICBteSBAcCA9IHNwbGl0KC8gLywgJGNtZCk7CisgICAgICAgICAgICAgICAgaWYoJHBbMF0gIX4gL1wvLykgeworICAgICAgICAgICAgICAgICAgICAjIHRoZSBmaXJzdCB3b3JkLCB0aGUgY29tbWFuZCwgZG9lcyBub3QgY29udGFpbiBhIHNsYXNoIHNvCisgICAgICAgICAgICAgICAgICAgICMgd2Ugd2lsbCBzY2FuIHRoZSAiaW1wcm92ZWQiIFBBVEggdG8gZmluZCB0aGUgY29tbWFuZCB0bworICAgICAgICAgICAgICAgICAgICAjIGJlIGFibGUgdG8gcnVuIGl0CisgICAgICAgICAgICAgICAgICAgIG15ICRmdWxscCA9IGNoZWNrdGVzdGNtZCgkcFswXSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoJGZ1bGxwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkcFswXSA9ICRmdWxscDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAkY21kID0gam9pbigiICIsIEBwKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBteSBAbyA9IGAkY21kIDI+L2Rldi9udWxsYDsKKyAgICAgICAgICAgICAgICBpZigkb1swXSkgeworICAgICAgICAgICAgICAgICAgICAkd2h5ID0gJG9bMF07CisgICAgICAgICAgICAgICAgICAgIGNob21wICR3aHk7CisgICAgICAgICAgICAgICAgfSBlbHNpZigkPykgeworICAgICAgICAgICAgICAgICAgICAkd2h5ID0gInByZWNoZWNrIGNvbW1hbmQgZXJyb3IiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsb2dtc2cgInByZWNoZWNrZWQgJGNtZFxuIiBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZigkd2h5ICYmICEkbGlzdG9ubHkpIHsKKyAgICAgICAgIyB0aGVyZSdzIGEgcHJvYmxlbSwgY291bnQgaXQgYXMgInNraXBwZWQiCisgICAgICAgICRza2lwcGVkKys7CisgICAgICAgICRza2lwcGVkeyR3aHl9Kys7CisgICAgICAgICR0ZXN0c3RhdFskdGVzdG51bV09JHdoeTsgIyBzdG9yZSByZWFzb24gZm9yIHRoaXMgdGVzdCBjYXNlCisKKyAgICAgICAgaWYoISRzaG9ydCkgeworICAgICAgICAgICAgbG9nbXNnIHNwcmludGYoInRlc3QgJTAzZCBTS0lQUEVEOiAkd2h5XG4iLCAkdGVzdG51bSk7CisgICAgICAgIH0KKworICAgICAgICB0aW1lc3RhbXBza2lwcGVkZXZlbnRzKCR0ZXN0bnVtKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBsb2dtc2cgc3ByaW50ZigidGVzdCAlMDNkLi4uIiwgJHRlc3RudW0pOworCisgICAgIyBleHRyYWN0IHRoZSByZXBseSBkYXRhCisgICAgbXkgQHJlcGx5ID0gZ2V0cGFydCgicmVwbHkiLCAiZGF0YSIpOworICAgIG15IEByZXBseWNoZWNrID0gZ2V0cGFydCgicmVwbHkiLCAiZGF0YWNoZWNrIik7CisKKyAgICBpZiAoQHJlcGx5Y2hlY2spIHsKKyAgICAgICAgIyB3ZSB1c2UgdGhpcyBmaWxlIGluc3RlYWQgdG8gY2hlY2sgdGhlIGZpbmFsIG91dHB1dCBhZ2FpbnN0CisKKyAgICAgICAgbXkgJWhhc2ggPSBnZXRwYXJ0YXR0cigicmVwbHkiLCAiZGF0YWNoZWNrIik7CisgICAgICAgIGlmKCRoYXNoeydub25ld2xpbmUnfSkgeworICAgICAgICAgICAgIyBZZXMsIHdlIG11c3QgY3V0IG9mZiB0aGUgZmluYWwgbmV3bGluZSBmcm9tIHRoZSBmaW5hbCBsaW5lCisgICAgICAgICAgICAjIG9mIHRoZSBkYXRhY2hlY2sKKyAgICAgICAgICAgIGNob21wKCRyZXBseWNoZWNrWyQjcmVwbHljaGVja10pOworICAgICAgICB9CisKKyAgICAgICAgQHJlcGx5PUByZXBseWNoZWNrOworICAgIH0KKworICAgICMgdGhpcyBpcyB0aGUgdmFsaWQgcHJvdG9jb2wgYmx1cmIgY3VybCBzaG91bGQgZ2VuZXJhdGUKKyAgICBteSBAcHJvdG9jb2w9IGZpeGFycmF5ICggZ2V0cGFydCgidmVyaWZ5IiwgInByb3RvY29sIikgKTsKKworICAgICMgdGhpcyBpcyB0aGUgdmFsaWQgcHJvdG9jb2wgYmx1cmIgY3VybCBzaG91bGQgZ2VuZXJhdGUgdG8gYSBwcm94eQorICAgIG15IEBwcm94eXByb3QgPSBmaXhhcnJheSAoIGdldHBhcnQoInZlcmlmeSIsICJwcm94eSIpICk7CisKKyAgICAjIHJlZGlyZWN0ZWQgc3Rkb3V0L3N0ZGVyciB0byB0aGVzZSBmaWxlcworICAgICRTVERPVVQ9IiRMT0dESVIvc3Rkb3V0JHRlc3RudW0iOworICAgICRTVERFUlI9IiRMT0dESVIvc3RkZXJyJHRlc3RudW0iOworCisgICAgIyBpZiB0aGlzIHNlY3Rpb24gZXhpc3RzLCB3ZSB2ZXJpZnkgdGhhdCB0aGUgc3Rkb3V0IGNvbnRhaW5lZCB0aGlzOgorICAgIG15IEB2YWxpZHN0ZG91dCA9IGZpeGFycmF5ICggZ2V0cGFydCgidmVyaWZ5IiwgInN0ZG91dCIpICk7CisKKyAgICAjIGlmIHRoaXMgc2VjdGlvbiBleGlzdHMsIHdlIHZlcmlmeSB1cGxvYWQKKyAgICBteSBAdXBsb2FkID0gZ2V0cGFydCgidmVyaWZ5IiwgInVwbG9hZCIpOworCisgICAgIyBpZiB0aGlzIHNlY3Rpb24gZXhpc3RzLCBpdCBtaWdodCBiZSBGVFAgc2VydmVyIGluc3RydWN0aW9uczoKKyAgICBteSBAZnRwc2VydmVyY21kID0gZ2V0cGFydCgicmVwbHkiLCAic2VydmVyY21kIik7CisKKyAgICBteSAkQ1VSTE9VVD0iJExPR0RJUi9jdXJsJHRlc3RudW0ub3V0IjsgIyBjdXJsIG91dHB1dCBpZiBub3Qgc3Rkb3V0CisKKyAgICAjIG5hbWUgb2YgdGhlIHRlc3QKKyAgICBteSBAdGVzdG5hbWU9IGdldHBhcnQoImNsaWVudCIsICJuYW1lIik7CisKKyAgICBpZighJHNob3J0KSB7CisgICAgICAgIG15ICRuYW1lID0gJHRlc3RuYW1lWzBdOworICAgICAgICAkbmFtZSA9fiBzL1xuLy9nOworICAgICAgICBsb2dtc2cgIlskbmFtZV1cbiI7CisgICAgfQorCisgICAgaWYoJGxpc3Rvbmx5KSB7CisgICAgICAgIHRpbWVzdGFtcHNraXBwZWRldmVudHMoJHRlc3RudW0pOworICAgICAgICByZXR1cm4gMDsgIyBsb29rIHN1Y2Nlc3NmdWwKKyAgICB9CisKKyAgICBteSBAY29kZXBpZWNlcyA9IGdldHBhcnQoImNsaWVudCIsICJ0b29sIik7CisKKyAgICBteSAkdG9vbD0iIjsKKyAgICBpZihAY29kZXBpZWNlcykgeworICAgICAgICAkdG9vbCA9ICRjb2RlcGllY2VzWzBdOworICAgICAgICBjaG9tcCAkdG9vbDsKKyAgICB9CisKKyAgICAjIHJlbW92ZSBzZXJ2ZXIgb3V0cHV0IGxvZ2ZpbGUKKyAgICB1bmxpbmsoJFNFUlZFUklOKTsKKyAgICB1bmxpbmsoJFNFUlZFUjJJTik7CisgICAgdW5saW5rKCRQUk9YWUlOKTsKKworICAgIGlmKEBmdHBzZXJ2ZXJjbWQpIHsKKyAgICAgICAgIyB3cml0ZSB0aGUgaW5zdHJ1Y3Rpb25zIHRvIGZpbGUKKyAgICAgICAgd3JpdGVhcnJheSgkRlRQRENNRCwgXEBmdHBzZXJ2ZXJjbWQpOworICAgIH0KKworICAgICMgZ2V0IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byB1c2UKKyAgICBteSBAYmxhaGE7CisgICAgKCRjbWQsIEBibGFoYSk9IGdldHBhcnQoImNsaWVudCIsICJjb21tYW5kIik7CisKKyAgICBpZigkY21kKSB7CisgICAgICAgICMgbWFrZSBzb21lIG5pY2UgcmVwbGFjZSBvcGVyYXRpb25zCisgICAgICAgICRjbWQgPX4gcy9cbi8vZzsgIyBubyBuZXdsaW5lcyBwbGVhc2UKKyAgICAgICAgIyBzdWJzdGl0dXRlIHZhcmlhYmxlcyBpbiB0aGUgY29tbWFuZCBsaW5lCisgICAgICAgIHN1YlZhcmlhYmxlcyBcJGNtZDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgICMgdGhlcmUgd2FzIG5vIGNvbW1hbmQgZ2l2ZW4sIHVzZSBzb21ldGhpbmcgc2lsbHkKKyAgICAgICAgJGNtZD0iLSI7CisgICAgfQorICAgIGlmKCRjdXJsX2RlYnVnKSB7CisgICAgICAgIHVubGluaygkbWVtZHVtcCk7CisgICAgfQorCisgICAgIyBjcmVhdGUgYSAocG9zc2libHktZW1wdHkpIGZpbGUgYmVmb3JlIHN0YXJ0aW5nIHRoZSB0ZXN0CisgICAgbXkgQGlucHV0ZmlsZT1nZXRwYXJ0KCJjbGllbnQiLCAiZmlsZSIpOworICAgIG15ICVmaWxlYXR0ciA9IGdldHBhcnRhdHRyKCJjbGllbnQiLCAiZmlsZSIpOworICAgIG15ICRmaWxlbmFtZT0kZmlsZWF0dHJ7J25hbWUnfTsKKyAgICBpZihAaW5wdXRmaWxlIHx8ICRmaWxlbmFtZSkgeworICAgICAgICBpZighJGZpbGVuYW1lKSB7CisgICAgICAgICAgICBsb2dtc2cgIkVSUk9SOiBzZWN0aW9uIGNsaWVudD0+ZmlsZSBoYXMgbm8gbmFtZSBhdHRyaWJ1dGVcbiI7CisgICAgICAgICAgICB0aW1lc3RhbXBza2lwcGVkZXZlbnRzKCR0ZXN0bnVtKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBteSAkZmlsZUNvbnRlbnQgPSBqb2luKCcnLCBAaW5wdXRmaWxlKTsKKyAgICAgICAgc3ViVmFyaWFibGVzIFwkZmlsZUNvbnRlbnQ7CisjICAgICAgICBsb2dtc2cgIkRFQlVHOiB3cml0aW5nIGZpbGUgIiAuICRmaWxlbmFtZSAuICJcbiI7CisgICAgICAgIG9wZW4oT1VURklMRSwgIj4kZmlsZW5hbWUiKTsKKyAgICAgICAgYmlubW9kZSBPVVRGSUxFOyAjIGZvciBjcmFwYWdlIHN5c3RlbXMsIHVzZSBiaW5hcnkKKyAgICAgICAgcHJpbnQgT1VURklMRSAkZmlsZUNvbnRlbnQ7CisgICAgICAgIGNsb3NlKE9VVEZJTEUpOworICAgIH0KKworICAgIG15ICVjbWRoYXNoID0gZ2V0cGFydGF0dHIoImNsaWVudCIsICJjb21tYW5kIik7CisKKyAgICBteSAkb3V0PSIiOworCisgICAgaWYoKCEkY21kaGFzaHsnb3B0aW9uJ30pIHx8ICgkY21kaGFzaHsnb3B0aW9uJ30gIX4gL25vLW91dHB1dC8pKSB7CisgICAgICAgICNXZSBtYXkgc2xhcCBvbiAtLW91dHB1dCEKKyAgICAgICAgaWYgKCFAdmFsaWRzdGRvdXQpIHsKKyAgICAgICAgICAgICRvdXQ9IiAtLW91dHB1dCAkQ1VSTE9VVCAiOworICAgICAgICB9CisgICAgfQorCisgICAgbXkgJHNlcnZlcmxvZ3Nsb2NrdGltZW91dCA9ICRkZWZzZXJ2ZXJsb2dzbG9ja3RpbWVvdXQ7CisgICAgaWYoJGNtZGhhc2h7J3RpbWVvdXQnfSkgeworICAgICAgICAjIHRlc3QgaXMgYWxsb3dlZCB0byBvdmVycmlkZSBkZWZhdWx0IHNlcnZlciBsb2dzIGxvY2sgdGltZW91dAorICAgICAgICBpZigkY21kaGFzaHsndGltZW91dCd9ID1+IC8oXGQrKS8pIHsKKyAgICAgICAgICAgICRzZXJ2ZXJsb2dzbG9ja3RpbWVvdXQgPSAkMSBpZigkMSA+PSAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG15ICRwb3N0Y29tbWFuZGRlbGF5ID0gJGRlZnBvc3Rjb21tYW5kZGVsYXk7CisgICAgaWYoJGNtZGhhc2h7J2RlbGF5J30pIHsKKyAgICAgICAgIyB0ZXN0IGlzIGFsbG93ZWQgdG8gc3BlY2lmeSBhIGRlbGF5IGFmdGVyIGNvbW1hbmQgaXMgZXhlY3V0ZWQKKyAgICAgICAgaWYoJGNtZGhhc2h7J2RlbGF5J30gPX4gLyhcZCspLykgeworICAgICAgICAgICAgJHBvc3Rjb21tYW5kZGVsYXkgPSAkMSBpZigkMSA+IDApOworICAgICAgICB9CisgICAgfQorCisgICAgbXkgJENNRExJTkU7CisgICAgbXkgJGNtZGFyZ3M7CisgICAgbXkgJGNtZHR5cGUgPSAkY21kaGFzaHsndHlwZSd9IHx8ICJkZWZhdWx0IjsKKyAgICBpZigkY21kdHlwZSBlcSAicGVybCIpIHsKKyAgICAgICAgIyBydW4gdGhlIGNvbW1hbmQgbGluZSBwcmVwZW5kZWQgd2l0aCAicGVybCIKKyAgICAgICAgJGNtZGFyZ3MgPSIkY21kIjsKKyAgICAgICAgJENNRExJTkUgPSAicGVybCAiOworICAgICAgICAkdG9vbD0kQ01ETElORTsKKyAgICAgICAgJGRpc2FibGV2YWxncmluZD0xOworICAgIH0KKyAgICBlbHNpZighJHRvb2wpIHsKKyAgICAgICAgIyBydW4gY3VybCwgYWRkIC0tdmVyYm9zZSBmb3IgZGVidWcgaW5mb3JtYXRpb24gb3V0cHV0CisgICAgICAgICRjbWQgPSAiLTEgIi4kY21kIGlmKGV4aXN0cyAkZmVhdHVyZXsiU1NMIn0gJiYgKCRoYXNfYXh0bHMpKTsKKworICAgICAgICBteSAkaW5jPSIiOworICAgICAgICBpZigoISRjbWRoYXNoeydvcHRpb24nfSkgfHwgKCRjbWRoYXNoeydvcHRpb24nfSAhfiAvbm8taW5jbHVkZS8pKSB7CisgICAgICAgICAgICAkaW5jID0gIi0taW5jbHVkZSAiOworICAgICAgICB9CisKKyAgICAgICAgJGNtZGFyZ3MgPSIkb3V0ICRpbmMtLXRyYWNlLWFzY2lpIGxvZy90cmFjZSR0ZXN0bnVtIC0tdHJhY2UtdGltZSAkY21kIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgICRjbWRhcmdzID0gIiAkY21kIjsgIyAkY21kIGlzIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoZSB0ZXN0IGZpbGUKKyAgICAgICAgJENVUkxPVVQgPSAkU1RET1VUOyAjIHNlbmRzIHJlY2VpdmVkIGRhdGEgdG8gc3Rkb3V0CisKKyAgICAgICAgaWYoJHRvb2wgPX4gL15saWIvKSB7CisgICAgICAgICAgICAkQ01ETElORT0iJExJQkRJUi8kdG9vbCI7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJHRvb2wgPX4gL151bml0LykgeworICAgICAgICAgICAgJENNRExJTkU9IiRVTklURElSLyR0b29sIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCEgLWYgJENNRExJTkUpIHsKKyAgICAgICAgICAgIGxvZ21zZyAiVGhlIHRvb2wgc2V0IGluIHRoZSB0ZXN0IGNhc2UgZm9yIHRoaXM6ICckdG9vbCcgZG9lcyBub3QgZXhpc3RcbiI7CisgICAgICAgICAgICB0aW1lc3RhbXBza2lwcGVkZXZlbnRzKCR0ZXN0bnVtKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAkREJHQ1VSTD0kQ01ETElORTsKKyAgICB9CisKKyAgICBteSBAc3RkaW50ZXN0ID0gZ2V0cGFydCgiY2xpZW50IiwgInN0ZGluIik7CisKKyAgICBpZihAc3RkaW50ZXN0KSB7CisgICAgICAgIG15ICRzdGRpbmZpbGU9IiRMT0dESVIvc3RkaW4tZm9yLSR0ZXN0bnVtIjsKKyAgICAgICAgd3JpdGVhcnJheSgkc3RkaW5maWxlLCBcQHN0ZGludGVzdCk7CisKKyAgICAgICAgJGNtZGFyZ3MgLj0gIiA8JHN0ZGluZmlsZSI7CisgICAgfQorCisgICAgaWYoISR0b29sKSB7CisgICAgICAgICRDTURMSU5FPSIkQ1VSTCI7CisgICAgfQorCisgICAgbXkgJHVzZXZhbGdyaW5kOworICAgIGlmKCR2YWxncmluZCAmJiAhJGRpc2FibGV2YWxncmluZCkgeworICAgICAgICBteSBAdmFsZ3JpbmRvcHRpb24gPSBnZXRwYXJ0KCJ2ZXJpZnkiLCAidmFsZ3JpbmQiKTsKKyAgICAgICAgaWYoKCFAdmFsZ3JpbmRvcHRpb24pIHx8ICgkdmFsZ3JpbmRvcHRpb25bMF0gIX4gL2Rpc2FibGUvKSkgeworICAgICAgICAgICAgJHVzZXZhbGdyaW5kID0gMTsKKyAgICAgICAgICAgIG15ICR2YWxncmluZGNtZCA9ICIkdmFsZ3JpbmQgIjsKKyAgICAgICAgICAgICR2YWxncmluZGNtZCAuPSAiJHZhbGdyaW5kX3Rvb2wgIiBpZigkdmFsZ3JpbmRfdG9vbCk7CisgICAgICAgICAgICAkdmFsZ3JpbmRjbWQgLj0gIi0tbGVhay1jaGVjaz15ZXMgIjsKKyAgICAgICAgICAgICR2YWxncmluZGNtZCAuPSAiLS1udW0tY2FsbGVycz0xNiAiOworICAgICAgICAgICAgJHZhbGdyaW5kY21kIC49ICIke3ZhbGdyaW5kX2xvZ2ZpbGV9PSRMT0dESVIvdmFsZ3JpbmQkdGVzdG51bSI7CisgICAgICAgICAgICAkQ01ETElORSA9ICIkdmFsZ3JpbmRjbWQgJENNRExJTkUiOworICAgICAgICB9CisgICAgfQorCisgICAgJENNRExJTkUgLj0gIiRjbWRhcmdzID4kU1RET1VUIDI+JFNUREVSUiI7CisKKyAgICBpZigkdmVyYm9zZSkgeworICAgICAgICBsb2dtc2cgIiRDTURMSU5FXG4iOworICAgIH0KKworICAgIHByaW50IENNRExPRyAiJENNRExJTkVcbiI7CisKKyAgICB1bmxpbmsoImNvcmUiKTsKKworICAgIG15ICRkdW1wZWRfY29yZTsKKyAgICBteSAkY21kcmVzOworCisgICAgIyBBcHIgMjAwNzogcHJlY29tbWFuZCBpc24ndCBiZWluZyB1c2VkIGFuZCBjb3VsZCBiZSByZW1vdmVkCisgICAgbXkgQHByZWNvbW1hbmQ9IGdldHBhcnQoImNsaWVudCIsICJwcmVjb21tYW5kIik7CisgICAgaWYoJHByZWNvbW1hbmRbMF0pIHsKKyAgICAgICAgIyB0aGlzIGlzIHB1cmUgcGVybCB0byBldmFsIQorICAgICAgICBteSAkY29kZSA9IGpvaW4oIiIsIEBwcmVjb21tYW5kKTsKKyAgICAgICAgZXZhbCAkY29kZTsKKyAgICAgICAgaWYoJEApIHsKKyAgICAgICAgICAgIGxvZ21zZyAicGVybDogJGNvZGVcbiI7CisgICAgICAgICAgICBsb2dtc2cgInByZWNvbW1hbmQ6ICRAIjsKKyAgICAgICAgICAgIHN0b3BzZXJ2ZXJzKCR2ZXJib3NlKTsKKyAgICAgICAgICAgIHRpbWVzdGFtcHNraXBwZWRldmVudHMoJHRlc3RudW0pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoJGdkYnRoaXMpIHsKKyAgICAgICAgbXkgJGdkYmluaXQgPSAiJFRFU1RESVIvZ2RiaW5pdCR0ZXN0bnVtIjsKKyAgICAgICAgb3BlbihHREJDTUQsICI+JExPR0RJUi9nZGJjbWQiKTsKKyAgICAgICAgcHJpbnQgR0RCQ01EICJzZXQgYXJncyAkY21kYXJnc1xuIjsKKyAgICAgICAgcHJpbnQgR0RCQ01EICJzaG93IGFyZ3NcbiI7CisgICAgICAgIHByaW50IEdEQkNNRCAic291cmNlICRnZGJpbml0XG4iIGlmIC1lICRnZGJpbml0OworICAgICAgICBjbG9zZShHREJDTUQpOworICAgIH0KKworICAgICMgdGltZXN0YW1wIHN0YXJ0aW5nIG9mIHRlc3QgY29tbWFuZAorICAgICR0aW1ldG9vbGluaXskdGVzdG51bX0gPSBUaW1lOjpIaVJlczo6dGltZSgpIGlmKCR0aW1lc3RhdHMpOworCisgICAgIyBydW4gdGhlIGNvbW1hbmQgbGluZSB3ZSBidWlsdAorICAgIGlmICgkdG9ydHVyZSkgeworICAgICAgICAkY21kcmVzID0gdG9ydHVyZSgkQ01ETElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgIiRnZGIgLS1kaXJlY3RvcnkgbGlidGVzdCAkREJHQ1VSTCAteCAkTE9HRElSL2dkYmNtZCIpOworICAgIH0KKyAgICBlbHNpZigkZ2RidGhpcykgeworICAgICAgICBteSAkR0RCVyA9ICgkZ2RieHdpbikgPyAiLXciIDogIiI7CisgICAgICAgIHJ1bmNsaWVudCgiJGdkYiAtLWRpcmVjdG9yeSBsaWJ0ZXN0ICREQkdDVVJMICRHREJXIC14ICRMT0dESVIvZ2RiY21kIik7CisgICAgICAgICRjbWRyZXM9MDsgIyBtYWtlcyBpdCBhbHdheXMgY29udGludWUgYWZ0ZXIgYSBkZWJ1Z2dlZCBydW4KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgICRjbWRyZXMgPSBydW5jbGllbnQoIiRDTURMSU5FIik7CisgICAgICAgIG15ICRzaWduYWxfbnVtICA9ICRjbWRyZXMgJiAxMjc7CisgICAgICAgICRkdW1wZWRfY29yZSA9ICRjbWRyZXMgJiAxMjg7CisKKyAgICAgICAgaWYoISRhbnl3YXkgJiYgKCRzaWduYWxfbnVtIHx8ICRkdW1wZWRfY29yZSkpIHsKKyAgICAgICAgICAgICRjbWRyZXMgPSAxMDAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJGNtZHJlcyA+Pj0gODsKKyAgICAgICAgICAgICRjbWRyZXMgPSAoMjAwMCArICRzaWduYWxfbnVtKSBpZigkc2lnbmFsX251bSAmJiAhJGNtZHJlcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAjIHRpbWVzdGFtcCBmaW5pc2hpbmcgb2YgdGVzdCBjb21tYW5kCisgICAgJHRpbWV0b29sZW5keyR0ZXN0bnVtfSA9IFRpbWU6OkhpUmVzOjp0aW1lKCkgaWYoJHRpbWVzdGF0cyk7CisKKyAgICBpZighJGR1bXBlZF9jb3JlKSB7CisgICAgICAgIGlmKC1yICJjb3JlIikgeworICAgICAgICAgICAgIyB0aGVyZSdzIGNvcmUgZmlsZSBwcmVzZW50IG5vdyEKKyAgICAgICAgICAgICRkdW1wZWRfY29yZSA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZigkZHVtcGVkX2NvcmUpIHsKKyAgICAgICAgbG9nbXNnICJjb3JlIGR1bXBlZFxuIjsKKyAgICAgICAgaWYoMCAmJiAkZ2RiKSB7CisgICAgICAgICAgICBsb2dtc2cgInJ1bm5pbmcgZ2RiIGZvciBwb3N0LW1vcnRlbSBhbmFseXNpczpcbiI7CisgICAgICAgICAgICBvcGVuKEdEQkNNRCwgIj4kTE9HRElSL2dkYmNtZDIiKTsKKyAgICAgICAgICAgIHByaW50IEdEQkNNRCAiYnRcbiI7CisgICAgICAgICAgICBjbG9zZShHREJDTUQpOworICAgICAgICAgICAgcnVuY2xpZW50KCIkZ2RiIC0tZGlyZWN0b3J5IGxpYnRlc3QgLXggJExPR0RJUi9nZGJjbWQyIC1iYXRjaCAkREJHQ1VSTCBjb3JlICIpOworICAgICAjICAgICAgIHVubGluaygiJExPR0RJUi9nZGJjbWQyIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAjIElmIGEgc2VydmVyIGxvZ3MgYWR2aXNvciByZWFkIGxvY2sgZmlsZSBleGlzdHMsIGl0IGlzIGFuIGluZGljYXRpb24KKyAgICAjIHRoYXQgdGhlIHNlcnZlciBoYXMgbm90IHlldCBmaW5pc2hlZCB3cml0aW5nIG91dCBhbGwgaXRzIGxvZyBmaWxlcywKKyAgICAjIGluY2x1ZGluZyBzZXJ2ZXIgcmVxdWVzdCBsb2cgZmlsZXMgdXNlZCBmb3IgcHJvdG9jb2wgdmVyaWZpY2F0aW9uLgorICAgICMgU28sIGlmIHRoZSBsb2NrIGZpbGUgZXhpc3RzIHRoZSBzY3JpcHQgd2FpdHMgaGVyZSBhIGNlcnRhaW4gYW1vdW50CisgICAgIyBvZiB0aW1lIHVudGlsIHRoZSBzZXJ2ZXIgcmVtb3ZlcyBpdCwgb3IgdGhlIGdpdmVuIHRpbWUgZXhwaXJlcy4KKworICAgIGlmKCRzZXJ2ZXJsb2dzbG9ja3RpbWVvdXQpIHsKKyAgICAgICAgbXkgJGxvY2tyZXRyeSA9ICRzZXJ2ZXJsb2dzbG9ja3RpbWVvdXQgKiAyMDsKKyAgICAgICAgd2hpbGUoKC1mICRTRVJWRVJMT0dTX0xPQ0spICYmICRsb2NrcmV0cnktLSkgeworICAgICAgICAgICAgc2VsZWN0KHVuZGVmLCB1bmRlZiwgdW5kZWYsIDAuMDUpOworICAgICAgICB9CisgICAgICAgIGlmKCgkbG9ja3JldHJ5IDwgMCkgJiYKKyAgICAgICAgICAgKCRzZXJ2ZXJsb2dzbG9ja3RpbWVvdXQgPj0gJGRlZnNlcnZlcmxvZ3Nsb2NrdGltZW91dCkpIHsKKyAgICAgICAgICAgIGxvZ21zZyAiV2FybmluZzogc2VydmVyIGxvZ3MgbG9jayB0aW1lb3V0ICIsCisgICAgICAgICAgICAgICAgICAgIigkc2VydmVybG9nc2xvY2t0aW1lb3V0IHNlY29uZHMpIGV4cGlyZWRcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAjIFRlc3QgaGFybmVzcyBzc2ggc2VydmVyIGRvZXMgbm90IGhhdmUgdGhpcyBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtLAorICAgICMgdGhpcyBpbXBsaWVzIHRoYXQgc29tZSBzc2ggc2VydmVyIGJhc2VkIHRlc3RzIG1pZ2h0IG5lZWQgYSBzbWFsbCBkZWxheQorICAgICMgb25jZSB0aGF0IHRoZSBjbGllbnQgY29tbWFuZCBoYXMgcnVuIHRvIGF2b2lkIGZhbHNlIHRlc3QgZmFpbHVyZXMuCisgICAgIworICAgICMgZ251dGxzLXNlcnYgYWxzbyBsYWNrcyB0aGlzIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20sIHNvIGdudXRscy1zZXJ2CisgICAgIyBiYXNlZCB0ZXN0cyBtaWdodCBuZWVkIGEgc21hbGwgZGVsYXkgb25jZSB0aGF0IHRoZSBjbGllbnQgY29tbWFuZCBoYXMKKyAgICAjIHJ1biB0byBhdm9pZCBmYWxzZSB0ZXN0IGZhaWx1cmVzLgorCisgICAgc2xlZXAoJHBvc3Rjb21tYW5kZGVsYXkpIGlmKCRwb3N0Y29tbWFuZGRlbGF5KTsKKworICAgICMgdGltZXN0YW1wIHJlbW92YWwgb2Ygc2VydmVyIGxvZ3MgYWR2aXNvciByZWFkIGxvY2sKKyAgICAkdGltZXNydnJsb2d7JHRlc3RudW19ID0gVGltZTo6SGlSZXM6OnRpbWUoKSBpZigkdGltZXN0YXRzKTsKKworICAgICMgdGVzdCBkZWZpbml0aW9uIG1pZ2h0IGluc3RydWN0IHRvIHN0b3Agc29tZSBzZXJ2ZXJzCisgICAgIyBzdG9wIGFsc28gYWxsIHNlcnZlcnMgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG9uZQorCisgICAgbXkgQGtpbGx0ZXN0c2VydmVycyA9IGdldHBhcnQoImNsaWVudCIsICJraWxsc2VydmVyIik7CisgICAgaWYoQGtpbGx0ZXN0c2VydmVycykgeworICAgICAgICAjCisgICAgICAgICMgQWxsIHNlcnZlcnMgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG9uZSBtdXN0IGJlIHN0b3BwZWQgYWxzbworICAgICAgICAjCisgICAgICAgIG15IEBraWxsc2VydmVyczsKKyAgICAgICAgZm9yZWFjaCBteSAkc2VydmVyIChAa2lsbHRlc3RzZXJ2ZXJzKSB7CisgICAgICAgICAgICBjaG9tcCAkc2VydmVyOworICAgICAgICAgICAgaWYoJHNlcnZlciA9fiAvXihmdHB8aHR0cHxpbWFwfHBvcDN8c210cClzKChcZCopKC1pcHY2fCkpJC8pIHsKKyAgICAgICAgICAgICAgICAjIGdpdmVuIGEgc3R1bm5lbCBzc2wgc2VydmVyLCBhbHNvIGtpbGwgbm9uLXNzbCB1bmRlcmx5aW5nIG9uZQorICAgICAgICAgICAgICAgIHB1c2ggQGtpbGxzZXJ2ZXJzLCAiJHsxfSR7Mn0iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzaWYoJHNlcnZlciA9fiAvXihmdHB8aHR0cHxpbWFwfHBvcDN8c210cCkoKFxkKikoLWlwdjZ8KSkkLykgeworICAgICAgICAgICAgICAgICMgZ2l2ZW4gYSBub24tc3NsIHNlcnZlciwgYWxzbyBraWxsIHN0dW5uZWwgcGlnZ3liYWNraW5nIG9uZQorICAgICAgICAgICAgICAgIHB1c2ggQGtpbGxzZXJ2ZXJzLCAiJHsxfXMkezJ9IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2lmKCRzZXJ2ZXIgPX4gL14oc29ja3MpKChcZCopKC1pcHY2fCkpJC8pIHsKKyAgICAgICAgICAgICAgICAjIGdpdmVuIGEgc29ja3Mgc2VydmVyLCBhbHNvIGtpbGwgc3NoIHVuZGVybHlpbmcgb25lCisgICAgICAgICAgICAgICAgcHVzaCBAa2lsbHNlcnZlcnMsICJzc2gkezJ9IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2lmKCRzZXJ2ZXIgPX4gL14oc3NoKSgoXGQqKSgtaXB2NnwpKSQvKSB7CisgICAgICAgICAgICAgICAgIyBnaXZlbiBhIHNzaCBzZXJ2ZXIsIGFsc28ga2lsbCBzb2NrcyBwaWdneWJhY2tpbmcgb25lCisgICAgICAgICAgICAgICAgcHVzaCBAa2lsbHNlcnZlcnMsICJzb2NrcyR7Mn0iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVzaCBAa2lsbHNlcnZlcnMsICRzZXJ2ZXI7CisgICAgICAgIH0KKyAgICAgICAgIworICAgICAgICAjIGtpbGwgc29ja2ZpbHRlciBwcm9jZXNzZXMgZm9yIHBpbmdwb25nIHJlbGF0aXZlIHNlcnZlcnMKKyAgICAgICAgIworICAgICAgICBmb3JlYWNoIG15ICRzZXJ2ZXIgKEBraWxsc2VydmVycykgeworICAgICAgICAgICAgaWYoJHNlcnZlciA9fiAvXihmdHB8aW1hcHxwb3AzfHNtdHApcz8oXGQqKSgtaXB2NnwpJC8pIHsKKyAgICAgICAgICAgICAgICBteSAkcHJvdG8gID0gJDE7CisgICAgICAgICAgICAgICAgbXkgJGlkbnVtICA9ICgkMiAmJiAoJDIgPiAxKSkgPyAkMiA6IDE7CisgICAgICAgICAgICAgICAgbXkgJGlwdm51bSA9ICgkMyAmJiAoJDMgPX4gLzYkLykpID8gNiA6IDQ7CisgICAgICAgICAgICAgICAga2lsbHNvY2tmaWx0ZXJzKCRwcm90bywgJGlwdm51bSwgJGlkbnVtLCAkdmVyYm9zZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgIworICAgICAgICAjIGtpbGwgc2VydmVyIHJlbGF0aXZlIHBpZHMgY2xlYXJpbmcgdGhlbSBpbiAlcnVuIGhhc2gKKyAgICAgICAgIworICAgICAgICBteSAkcGlkbGlzdDsKKyAgICAgICAgZm9yZWFjaCBteSAkc2VydmVyIChAa2lsbHNlcnZlcnMpIHsKKyAgICAgICAgICAgIGlmKCRydW57JHNlcnZlcn0pIHsKKyAgICAgICAgICAgICAgICAkcGlkbGlzdCAuPSAiJHJ1bnskc2VydmVyfSAiOworICAgICAgICAgICAgICAgICRydW57JHNlcnZlcn0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJHJ1bmNlcnR7JHNlcnZlcn0gPSAwIGlmKCRydW5jZXJ0eyRzZXJ2ZXJ9KTsKKyAgICAgICAgfQorICAgICAgICBraWxscGlkKCR2ZXJib3NlLCAkcGlkbGlzdCk7CisgICAgICAgICMKKyAgICAgICAgIyBjbGVhbnVwIHNlcnZlciBwaWQgZmlsZXMKKyAgICAgICAgIworICAgICAgICBmb3JlYWNoIG15ICRzZXJ2ZXIgKEBraWxsc2VydmVycykgeworICAgICAgICAgICAgbXkgJHBpZGZpbGUgPSAkc2VydmVycGlkZmlsZXskc2VydmVyfTsKKyAgICAgICAgICAgIG15ICRwaWQgPSBwcm9jZXNzZXhpc3RzKCRwaWRmaWxlKTsKKyAgICAgICAgICAgIGlmKCRwaWQgPiAwKSB7CisgICAgICAgICAgICAgICAgbG9nbXNnICJXYXJuaW5nOiAkc2VydmVyIHNlcnZlciB1bmV4cGVjdGVkbHkgYWxpdmVcbiI7CisgICAgICAgICAgICAgICAga2lsbHBpZCgkdmVyYm9zZSwgJHBpZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1bmxpbmsoJHBpZGZpbGUpIGlmKC1mICRwaWRmaWxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICMgcmVtb3ZlIHRoZSB0ZXN0IHNlcnZlciBjb21tYW5kcyBmaWxlIGFmdGVyIGVhY2ggdGVzdAorICAgIHVubGluaygkRlRQRENNRCkgaWYoLWYgJEZUUERDTUQpOworCisgICAgIyBydW4gdGhlIHBvc3RjaGVjayBjb21tYW5kCisgICAgbXkgQHBvc3RjaGVjaz0gZ2V0cGFydCgiY2xpZW50IiwgInBvc3RjaGVjayIpOworICAgIGlmKEBwb3N0Y2hlY2spIHsKKyAgICAgICAgJGNtZCA9ICRwb3N0Y2hlY2tbMF07CisgICAgICAgIGNob21wICRjbWQ7CisgICAgICAgIHN1YlZhcmlhYmxlcyBcJGNtZDsKKyAgICAgICAgaWYoJGNtZCkgeworICAgICAgICAgICAgbG9nbXNnICJwb3N0Y2hlY2sgJGNtZFxuIiBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICBteSAkcmMgPSBydW5jbGllbnQoIiRjbWQiKTsKKyAgICAgICAgICAgICMgTXVzdCBydW4gdGhlIHBvc3RjaGVjayBjb21tYW5kIGluIHRvcnR1cmUgbW9kZSBpbiBvcmRlcgorICAgICAgICAgICAgIyB0byBjbGVhbiB1cCwgYnV0IHRoZSByZXN1bHQgY2FuJ3QgYmUgcmVsaWVkIHVwb24uCisgICAgICAgICAgICBpZigkcmMgIT0gMCAmJiAhJHRvcnR1cmUpIHsKKyAgICAgICAgICAgICAgICBsb2dtc2cgIiBwb3N0Y2hlY2sgRkFJTEVEXG4iOworICAgICAgICAgICAgICAgICMgdGltZXN0YW1wIHRlc3QgcmVzdWx0IHZlcmlmaWNhdGlvbiBlbmQKKyAgICAgICAgICAgICAgICAkdGltZXZyZnllbmR7JHRlc3RudW19ID0gVGltZTo6SGlSZXM6OnRpbWUoKSBpZigkdGltZXN0YXRzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICMgcmVzdG9yZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB3ZXJlIG1vZGlmaWVkCisgICAgaWYoJW9sZGVudikgeworICAgICAgICBmb3JlYWNoIG15ICR2YXIgKGtleXMgJW9sZGVudikgeworICAgICAgICAgICAgaWYoJG9sZGVudnskdmFyfSBlcSAnbm90c2V0JykgeworICAgICAgICAgICAgICAgIGRlbGV0ZSAkRU5WeyR2YXJ9IGlmKCRFTlZ7JHZhcn0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgJEVOVnskdmFyfSA9ICIkb2xkZW52eyR2YXJ9IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICMgU2tpcCBhbGwgdGhlIHZlcmlmaWNhdGlvbiBvbiB0b3J0dXJlIHRlc3RzCisgICAgaWYgKCR0b3J0dXJlKSB7CisgICAgICAgIGlmKCEkY21kcmVzICYmICEka2VlcG91dGZpbGVzKSB7CisgICAgICAgICAgICBjbGVhcmRpcigkTE9HRElSKTsKKyAgICAgICAgfQorICAgICAgICAjIHRpbWVzdGFtcCB0ZXN0IHJlc3VsdCB2ZXJpZmljYXRpb24gZW5kCisgICAgICAgICR0aW1ldnJmeWVuZHskdGVzdG51bX0gPSBUaW1lOjpIaVJlczo6dGltZSgpIGlmKCR0aW1lc3RhdHMpOworICAgICAgICByZXR1cm4gJGNtZHJlczsKKyAgICB9CisKKyAgICBteSBAZXJyID0gZ2V0cGFydCgidmVyaWZ5IiwgImVycm9yY29kZSIpOworICAgIG15ICRlcnJvcmNvZGUgPSAkZXJyWzBdIHx8ICIwIjsKKyAgICBteSAkb2s9IiI7CisgICAgbXkgJHJlczsKKyAgICBjaG9tcCAkZXJyb3Jjb2RlOworICAgIGlmIChAdmFsaWRzdGRvdXQpIHsKKyAgICAgICAgIyB2ZXJpZnkgcmVkaXJlY3RlZCBzdGRvdXQKKyAgICAgICAgbXkgQGFjdHVhbCA9IGxvYWRhcnJheSgkU1RET1VUKTsKKworICAgICAgICAjIHZhcmlhYmxlLXJlcGxhY2UgaW4gdGhlIHN0ZG91dCB3ZSBoYXZlIGZyb20gdGhlIHRlc3QgY2FzZSBmaWxlCisgICAgICAgIEB2YWxpZHN0ZG91dCA9IGZpeGFycmF5KEB2YWxpZHN0ZG91dCk7CisKKyAgICAgICAgIyBnZXQgYWxsIGF0dHJpYnV0ZXMKKyAgICAgICAgbXkgJWhhc2ggPSBnZXRwYXJ0YXR0cigidmVyaWZ5IiwgInN0ZG91dCIpOworCisgICAgICAgICMgZ2V0IHRoZSBtb2RlIGF0dHJpYnV0ZQorICAgICAgICBteSAkZmlsZW1vZGU9JGhhc2h7J21vZGUnfTsKKyAgICAgICAgaWYoJGZpbGVtb2RlICYmICgkZmlsZW1vZGUgZXEgInRleHQiKSAmJiAkaGFzX3RleHRhd2FyZSkgeworICAgICAgICAgICAgIyB0ZXh0IG1vZGUgd2hlbiBydW5uaW5nIG9uIHdpbmRvd3M6IGZpeCBsaW5lIGVuZGluZ3MKKyAgICAgICAgICAgIG1hcCBzL1xyXG4vXG4vZywgQGFjdHVhbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCRoYXNoeydub25ld2xpbmUnfSkgeworICAgICAgICAgICAgIyBZZXMsIHdlIG11c3QgY3V0IG9mZiB0aGUgZmluYWwgbmV3bGluZSBmcm9tIHRoZSBmaW5hbCBsaW5lCisgICAgICAgICAgICAjIG9mIHRoZSBwcm90b2NvbCBkYXRhCisgICAgICAgICAgICBjaG9tcCgkdmFsaWRzdGRvdXRbJCN2YWxpZHN0ZG91dF0pOworICAgICAgICB9CisKKyAgICAgICAgJHJlcyA9IGNvbXBhcmUoInN0ZG91dCIsIFxAYWN0dWFsLCBcQHZhbGlkc3Rkb3V0KTsKKyAgICAgICAgaWYoJHJlcykgeworICAgICAgICAgICAgIyB0aW1lc3RhbXAgdGVzdCByZXN1bHQgdmVyaWZpY2F0aW9uIGVuZAorICAgICAgICAgICAgJHRpbWV2cmZ5ZW5keyR0ZXN0bnVtfSA9IFRpbWU6OkhpUmVzOjp0aW1lKCkgaWYoJHRpbWVzdGF0cyk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICAkb2sgLj0gInMiOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgJG9rIC49ICItIjsgIyBzdGRvdXQgbm90IGNoZWNrZWQKKyAgICB9CisKKyAgICBteSAlcmVwbHlhdHRyID0gZ2V0cGFydGF0dHIoInJlcGx5IiwgImRhdGEiKTsKKyAgICBpZighJHJlcGx5YXR0cnsnbm9jaGVjayd9ICYmIChAcmVwbHkgfHwgJHJlcGx5YXR0cnsnc2VuZHplcm8nfSkpIHsKKyAgICAgICAgIyB2ZXJpZnkgdGhlIHJlY2VpdmVkIGRhdGEKKyAgICAgICAgbXkgQG91dCA9IGxvYWRhcnJheSgkQ1VSTE9VVCk7CisgICAgICAgIG15ICVoYXNoID0gZ2V0cGFydGF0dHIoInJlcGx5IiwgImRhdGEiKTsKKyAgICAgICAgIyBnZXQgdGhlIG1vZGUgYXR0cmlidXRlCisgICAgICAgIG15ICRmaWxlbW9kZT0kaGFzaHsnbW9kZSd9OworICAgICAgICBpZigkZmlsZW1vZGUgJiYgKCRmaWxlbW9kZSBlcSAidGV4dCIpICYmICRoYXNfdGV4dGF3YXJlKSB7CisgICAgICAgICAgICAjIHRleHQgbW9kZSB3aGVuIHJ1bm5pbmcgb24gd2luZG93czogZml4IGxpbmUgZW5kaW5ncworICAgICAgICAgICAgbWFwIHMvXHJcbi9cbi9nLCBAb3V0OworICAgICAgICB9CisKKyAgICAgICAgJHJlcyA9IGNvbXBhcmUoImRhdGEiLCBcQG91dCwgXEByZXBseSk7CisgICAgICAgIGlmICgkcmVzKSB7CisgICAgICAgICAgICAjIHRpbWVzdGFtcCB0ZXN0IHJlc3VsdCB2ZXJpZmljYXRpb24gZW5kCisgICAgICAgICAgICAkdGltZXZyZnllbmR7JHRlc3RudW19ID0gVGltZTo6SGlSZXM6OnRpbWUoKSBpZigkdGltZXN0YXRzKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgICRvayAuPSAiZCI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAkb2sgLj0gIi0iOyAjIGRhdGEgbm90IGNoZWNrZWQKKyAgICB9CisKKyAgICBpZihAdXBsb2FkKSB7CisgICAgICAgICMgdmVyaWZ5IHVwbG9hZGVkIGRhdGEKKyAgICAgICAgbXkgQG91dCA9IGxvYWRhcnJheSgiJExPR0RJUi91cGxvYWQuJHRlc3RudW0iKTsKKyAgICAgICAgJHJlcyA9IGNvbXBhcmUoInVwbG9hZCIsIFxAb3V0LCBcQHVwbG9hZCk7CisgICAgICAgIGlmICgkcmVzKSB7CisgICAgICAgICAgICAjIHRpbWVzdGFtcCB0ZXN0IHJlc3VsdCB2ZXJpZmljYXRpb24gZW5kCisgICAgICAgICAgICAkdGltZXZyZnllbmR7JHRlc3RudW19ID0gVGltZTo6SGlSZXM6OnRpbWUoKSBpZigkdGltZXN0YXRzKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgICRvayAuPSAidSI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAkb2sgLj0gIi0iOyAjIHVwbG9hZCBub3QgY2hlY2tlZAorICAgIH0KKworICAgIGlmKEBwcm90b2NvbCkgeworICAgICAgICAjIFZlcmlmeSB0aGUgc2VudCByZXF1ZXN0CisgICAgICAgIG15IEBvdXQgPSBsb2FkYXJyYXkoJFNFUlZFUklOKTsKKworICAgICAgICAjIHdoYXQgdG8gY3V0IG9mZiBmcm9tIHRoZSBsaXZlIHByb3RvY29sIHNlbnQgYnkgY3VybAorICAgICAgICBteSBAc3RyaXAgPSBnZXRwYXJ0KCJ2ZXJpZnkiLCAic3RyaXAiKTsKKworICAgICAgICBteSBAcHJvdHN0cmlwPUBwcm90b2NvbDsKKworICAgICAgICAjIGNoZWNrIGlmIHRoZXJlJ3MgYW55IGF0dHJpYnV0ZXMgb24gdGhlIHZlcmlmeS9wcm90b2NvbCBzZWN0aW9uCisgICAgICAgIG15ICVoYXNoID0gZ2V0cGFydGF0dHIoInZlcmlmeSIsICJwcm90b2NvbCIpOworCisgICAgICAgIGlmKCRoYXNoeydub25ld2xpbmUnfSkgeworICAgICAgICAgICAgIyBZZXMsIHdlIG11c3QgY3V0IG9mZiB0aGUgZmluYWwgbmV3bGluZSBmcm9tIHRoZSBmaW5hbCBsaW5lCisgICAgICAgICAgICAjIG9mIHRoZSBwcm90b2NvbCBkYXRhCisgICAgICAgICAgICBjaG9tcCgkcHJvdHN0cmlwWyQjcHJvdHN0cmlwXSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IoQHN0cmlwKSB7CisgICAgICAgICAgICAjIHN0cmlwIG9mZiBhbGwgbGluZXMgdGhhdCBtYXRjaCB0aGUgcGF0dGVybnMgZnJvbSBib3RoIGFycmF5cworICAgICAgICAgICAgY2hvbXAgJF87CisgICAgICAgICAgICBAb3V0ID0gc3RyaXBhcnJheSggJF8sIFxAb3V0KTsKKyAgICAgICAgICAgIEBwcm90c3RyaXA9IHN0cmlwYXJyYXkoICRfLCBcQHByb3RzdHJpcCk7CisgICAgICAgIH0KKworICAgICAgICAjIHdoYXQgcGFydHMgdG8gY3V0IG9mZiBmcm9tIHRoZSBwcm90b2NvbAorICAgICAgICBteSBAc3RyaXBwYXJ0ID0gZ2V0cGFydCgidmVyaWZ5IiwgInN0cmlwcGFydCIpOworICAgICAgICBteSAkc3RyaXA7CisgICAgICAgIGZvciAkc3RyaXAgKEBzdHJpcHBhcnQpIHsKKyAgICAgICAgICAgIGNob21wICRzdHJpcDsKKyAgICAgICAgICAgIGZvcihAb3V0KSB7CisgICAgICAgICAgICAgICAgZXZhbCAkc3RyaXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAkcmVzID0gY29tcGFyZSgicHJvdG9jb2wiLCBcQG91dCwgXEBwcm90c3RyaXApOworICAgICAgICBpZigkcmVzKSB7CisgICAgICAgICAgICAjIHRpbWVzdGFtcCB0ZXN0IHJlc3VsdCB2ZXJpZmljYXRpb24gZW5kCisgICAgICAgICAgICAkdGltZXZyZnllbmR7JHRlc3RudW19ID0gVGltZTo6SGlSZXM6OnRpbWUoKSBpZigkdGltZXN0YXRzKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgJG9rIC49ICJwIjsKKworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgJG9rIC49ICItIjsgIyBwcm90b2NvbCBub3QgY2hlY2tlZAorICAgIH0KKworICAgIGlmKEBwcm94eXByb3QpIHsKKyAgICAgICAgIyBWZXJpZnkgdGhlIHNlbnQgcHJveHkgcmVxdWVzdAorICAgICAgICBteSBAb3V0ID0gbG9hZGFycmF5KCRQUk9YWUlOKTsKKworICAgICAgICAjIHdoYXQgdG8gY3V0IG9mZiBmcm9tIHRoZSBsaXZlIHByb3RvY29sIHNlbnQgYnkgY3VybCwgd2UgdXNlIHRoZQorICAgICAgICAjIHNhbWUgcnVsZXMgYXMgZm9yIDxwcm90b2NvbD4KKyAgICAgICAgbXkgQHN0cmlwID0gZ2V0cGFydCgidmVyaWZ5IiwgInN0cmlwIik7CisKKyAgICAgICAgbXkgQHByb3RzdHJpcD1AcHJveHlwcm90OworCisgICAgICAgICMgY2hlY2sgaWYgdGhlcmUncyBhbnkgYXR0cmlidXRlcyBvbiB0aGUgdmVyaWZ5L3Byb3RvY29sIHNlY3Rpb24KKyAgICAgICAgbXkgJWhhc2ggPSBnZXRwYXJ0YXR0cigidmVyaWZ5IiwgInByb3h5Iik7CisKKyAgICAgICAgaWYoJGhhc2h7J25vbmV3bGluZSd9KSB7CisgICAgICAgICAgICAjIFllcywgd2UgbXVzdCBjdXQgb2ZmIHRoZSBmaW5hbCBuZXdsaW5lIGZyb20gdGhlIGZpbmFsIGxpbmUKKyAgICAgICAgICAgICMgb2YgdGhlIHByb3RvY29sIGRhdGEKKyAgICAgICAgICAgIGNob21wKCRwcm90c3RyaXBbJCNwcm90c3RyaXBdKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvcihAc3RyaXApIHsKKyAgICAgICAgICAgICMgc3RyaXAgb2ZmIGFsbCBsaW5lcyB0aGF0IG1hdGNoIHRoZSBwYXR0ZXJucyBmcm9tIGJvdGggYXJyYXlzCisgICAgICAgICAgICBjaG9tcCAkXzsKKyAgICAgICAgICAgIEBvdXQgPSBzdHJpcGFycmF5KCAkXywgXEBvdXQpOworICAgICAgICAgICAgQHByb3RzdHJpcD0gc3RyaXBhcnJheSggJF8sIFxAcHJvdHN0cmlwKTsKKyAgICAgICAgfQorCisgICAgICAgICMgd2hhdCBwYXJ0cyB0byBjdXQgb2ZmIGZyb20gdGhlIHByb3RvY29sCisgICAgICAgIG15IEBzdHJpcHBhcnQgPSBnZXRwYXJ0KCJ2ZXJpZnkiLCAic3RyaXBwYXJ0Iik7CisgICAgICAgIG15ICRzdHJpcDsKKyAgICAgICAgZm9yICRzdHJpcCAoQHN0cmlwcGFydCkgeworICAgICAgICAgICAgY2hvbXAgJHN0cmlwOworICAgICAgICAgICAgZm9yKEBvdXQpIHsKKyAgICAgICAgICAgICAgICBldmFsICRzdHJpcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICRyZXMgPSBjb21wYXJlKCJwcm94eSIsIFxAb3V0LCBcQHByb3RzdHJpcCk7CisgICAgICAgIGlmKCRyZXMpIHsKKyAgICAgICAgICAgICMgdGltZXN0YW1wIHRlc3QgcmVzdWx0IHZlcmlmaWNhdGlvbiBlbmQKKyAgICAgICAgICAgICR0aW1ldnJmeWVuZHskdGVzdG51bX0gPSBUaW1lOjpIaVJlczo6dGltZSgpIGlmKCR0aW1lc3RhdHMpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICAkb2sgLj0gIlAiOworCisgICAgfQorICAgIGVsc2UgeworICAgICAgICAkb2sgLj0gIi0iOyAjIHByb3RvY29sIG5vdCBjaGVja2VkCisgICAgfQorCisgICAgbXkgQG91dGZpbGU9Z2V0cGFydCgidmVyaWZ5IiwgImZpbGUiKTsKKyAgICBpZihAb3V0ZmlsZSkgeworICAgICAgICAjIHdlJ3JlIHN1cHBvc2VkIHRvIHZlcmlmeSBhIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBmaWxlIQorICAgICAgICBteSAlaGFzaCA9IGdldHBhcnRhdHRyKCJ2ZXJpZnkiLCAiZmlsZSIpOworCisgICAgICAgIG15ICRmaWxlbmFtZT0kaGFzaHsnbmFtZSd9OworICAgICAgICBpZighJGZpbGVuYW1lKSB7CisgICAgICAgICAgICBsb2dtc2cgIkVSUk9SOiBzZWN0aW9uIHZlcmlmeT0+ZmlsZSBoYXMgbm8gbmFtZSBhdHRyaWJ1dGVcbiI7CisgICAgICAgICAgICBzdG9wc2VydmVycygkdmVyYm9zZSk7CisgICAgICAgICAgICAjIHRpbWVzdGFtcCB0ZXN0IHJlc3VsdCB2ZXJpZmljYXRpb24gZW5kCisgICAgICAgICAgICAkdGltZXZyZnllbmR7JHRlc3RudW19ID0gVGltZTo6SGlSZXM6OnRpbWUoKSBpZigkdGltZXN0YXRzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBteSBAZ2VuZXJhdGVkPWxvYWRhcnJheSgkZmlsZW5hbWUpOworCisgICAgICAgICMgd2hhdCBwYXJ0cyB0byBjdXQgb2ZmIGZyb20gdGhlIGZpbGUKKyAgICAgICAgbXkgQHN0cmlwZmlsZSA9IGdldHBhcnQoInZlcmlmeSIsICJzdHJpcGZpbGUiKTsKKworICAgICAgICBteSAkZmlsZW1vZGU9JGhhc2h7J21vZGUnfTsKKyAgICAgICAgaWYoJGZpbGVtb2RlICYmICgkZmlsZW1vZGUgZXEgInRleHQiKSAmJiAkaGFzX3RleHRhd2FyZSkgeworICAgICAgICAgICAgIyB0ZXh0IG1vZGUgd2hlbiBydW5uaW5nIG9uIHdpbmRvd3MgbWVhbnMgYWRkaW5nIGFuIGV4dHJhCisgICAgICAgICAgICAjIHN0cmlwIGV4cHJlc3Npb24KKyAgICAgICAgICAgIHB1c2ggQHN0cmlwZmlsZSwgInMvXHJcbi9cbi8iOworICAgICAgICB9CisKKyAgICAgICAgbXkgJHN0cmlwOworICAgICAgICBmb3IgJHN0cmlwIChAc3RyaXBmaWxlKSB7CisgICAgICAgICAgICBjaG9tcCAkc3RyaXA7CisgICAgICAgICAgICBmb3IoQGdlbmVyYXRlZCkgeworICAgICAgICAgICAgICAgIGV2YWwgJHN0cmlwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQG91dGZpbGUgPSBmaXhhcnJheShAb3V0ZmlsZSk7CisKKyAgICAgICAgJHJlcyA9IGNvbXBhcmUoIm91dHB1dCIsIFxAZ2VuZXJhdGVkLCBcQG91dGZpbGUpOworICAgICAgICBpZigkcmVzKSB7CisgICAgICAgICAgICAjIHRpbWVzdGFtcCB0ZXN0IHJlc3VsdCB2ZXJpZmljYXRpb24gZW5kCisgICAgICAgICAgICAkdGltZXZyZnllbmR7JHRlc3RudW19ID0gVGltZTo6SGlSZXM6OnRpbWUoKSBpZigkdGltZXN0YXRzKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgJG9rIC49ICJvIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgICRvayAuPSAiLSI7ICMgb3V0cHV0IG5vdCBjaGVja2VkCisgICAgfQorCisgICAgIyBhY2NlcHQgbXVsdGlwbGUgY29tbWEtc2VwYXJhdGVkIGVycm9yIGNvZGVzCisgICAgbXkgQHNwbGVyciA9IHNwbGl0KC8gKiwgKi8sICRlcnJvcmNvZGUpOworICAgIG15ICRlcnJvazsKKyAgICBmb3JlYWNoIG15ICRlIChAc3BsZXJyKSB7CisgICAgICAgIGlmKCRlID09ICRjbWRyZXMpIHsKKyAgICAgICAgICAgICMgYSBmaW5lIGVycm9yIGNvZGUKKyAgICAgICAgICAgICRlcnJvayA9IDE7CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYoJGVycm9rKSB7CisgICAgICAgICRvayAuPSAiZSI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZighJHNob3J0KSB7CisgICAgICAgICAgICBsb2dtc2cgc3ByaW50ZigiXG4lcyByZXR1cm5lZCAkY21kcmVzLCB3aGVuIGV4cGVjdGluZyAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICghJHRvb2wpPyJjdXJsIjokdG9vbCwgJGVycm9yY29kZSk7CisgICAgICAgIH0KKyAgICAgICAgbG9nbXNnICIgZXhpdCBGQUlMRURcbiI7CisgICAgICAgICMgdGltZXN0YW1wIHRlc3QgcmVzdWx0IHZlcmlmaWNhdGlvbiBlbmQKKyAgICAgICAgJHRpbWV2cmZ5ZW5keyR0ZXN0bnVtfSA9IFRpbWU6OkhpUmVzOjp0aW1lKCkgaWYoJHRpbWVzdGF0cyk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmKCRjdXJsX2RlYnVnKSB7CisgICAgICAgIGlmKCEgLWYgJG1lbWR1bXApIHsKKyAgICAgICAgICAgIGxvZ21zZyAiXG4qKiBBTEVSVCEgbWVtb3J5IGRlYnVnZ2luZyB3aXRoIG5vIG91dHB1dCBmaWxlP1xuIgorICAgICAgICAgICAgICAgIGlmKCEkY21kdHlwZSBlcSAicGVybCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbXkgQG1lbWRhdGE9YCRtZW1hbmFseXplICRtZW1kdW1wYDsKKyAgICAgICAgICAgIG15ICRsZWFrPTA7CisgICAgICAgICAgICBmb3IoQG1lbWRhdGEpIHsKKyAgICAgICAgICAgICAgICBpZigkXyBuZSAiIikgeworICAgICAgICAgICAgICAgICAgICAjIHdlbGwgaXQgY291bGQgYmUgb3RoZXIgbWVtb3J5IHByb2JsZW1zIGFzIHdlbGwsIGJ1dAorICAgICAgICAgICAgICAgICAgICAjIHdlIGNhbGwgaXQgbGVhayBmb3Igc2hvcnQgaGVyZQorICAgICAgICAgICAgICAgICAgICAkbGVhaz0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCRsZWFrKSB7CisgICAgICAgICAgICAgICAgbG9nbXNnICJcbioqIE1FTU9SWSBGQUlMVVJFXG4iOworICAgICAgICAgICAgICAgIGxvZ21zZyBAbWVtZGF0YTsKKyAgICAgICAgICAgICAgICAjIHRpbWVzdGFtcCB0ZXN0IHJlc3VsdCB2ZXJpZmljYXRpb24gZW5kCisgICAgICAgICAgICAgICAgJHRpbWV2cmZ5ZW5keyR0ZXN0bnVtfSA9IFRpbWU6OkhpUmVzOjp0aW1lKCkgaWYoJHRpbWVzdGF0cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAkb2sgLj0gIm0iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAkb2sgLj0gIi0iOyAjIG1lbW9yeSBub3QgY2hlY2tlZAorICAgIH0KKworICAgIGlmKCR2YWxncmluZCkgeworICAgICAgICBpZigkdXNldmFsZ3JpbmQpIHsKKyAgICAgICAgICAgIHVubGVzcyhvcGVuZGlyKERJUiwgIiRMT0dESVIiKSkgeworICAgICAgICAgICAgICAgIGxvZ21zZyAiRVJST1I6IHVuYWJsZSB0byByZWFkICRMT0dESVJcbiI7CisgICAgICAgICAgICAgICAgIyB0aW1lc3RhbXAgdGVzdCByZXN1bHQgdmVyaWZpY2F0aW9uIGVuZAorICAgICAgICAgICAgICAgICR0aW1ldnJmeWVuZHskdGVzdG51bX0gPSBUaW1lOjpIaVJlczo6dGltZSgpIGlmKCR0aW1lc3RhdHMpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbXkgQGZpbGVzID0gcmVhZGRpcihESVIpOworICAgICAgICAgICAgY2xvc2VkaXIoRElSKTsKKyAgICAgICAgICAgIG15ICR2Z2ZpbGU7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRmaWxlIChAZmlsZXMpIHsKKyAgICAgICAgICAgICAgICBpZigkZmlsZSA9fiAvXnZhbGdyaW5kJHRlc3RudW0oXC4uKnwpJC8pIHsKKyAgICAgICAgICAgICAgICAgICAgJHZnZmlsZSA9ICRmaWxlOworICAgICAgICAgICAgICAgICAgICBsYXN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCEkdmdmaWxlKSB7CisgICAgICAgICAgICAgICAgbG9nbXNnICJFUlJPUjogdmFsZ3JpbmQgbG9nIGZpbGUgbWlzc2luZyBmb3IgdGVzdCAkdGVzdG51bVxuIjsKKyAgICAgICAgICAgICAgICAjIHRpbWVzdGFtcCB0ZXN0IHJlc3VsdCB2ZXJpZmljYXRpb24gZW5kCisgICAgICAgICAgICAgICAgJHRpbWV2cmZ5ZW5keyR0ZXN0bnVtfSA9IFRpbWU6OkhpUmVzOjp0aW1lKCkgaWYoJHRpbWVzdGF0cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBteSBAZSA9IHZhbGdyaW5kcGFyc2UoJHNyY2RpciwgJGZlYXR1cmV7J1NTTCd9LCAiJExPR0RJUi8kdmdmaWxlIik7CisgICAgICAgICAgICBpZihAZSAmJiAkZVswXSkgeworICAgICAgICAgICAgICAgIGxvZ21zZyAiIHZhbGdyaW5kIEVSUk9SICI7CisgICAgICAgICAgICAgICAgbG9nbXNnIEBlOworICAgICAgICAgICAgICAgICMgdGltZXN0YW1wIHRlc3QgcmVzdWx0IHZlcmlmaWNhdGlvbiBlbmQKKyAgICAgICAgICAgICAgICAkdGltZXZyZnllbmR7JHRlc3RudW19ID0gVGltZTo6SGlSZXM6OnRpbWUoKSBpZigkdGltZXN0YXRzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICRvayAuPSAidiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZighJHNob3J0ICYmICEkZGlzYWJsZXZhbGdyaW5kKSB7CisgICAgICAgICAgICAgICAgbG9nbXNnICIgdmFsZ3JpbmQgU0tJUFBFRFxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICRvayAuPSAiLSI7ICMgc2tpcHBlZAorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAkb2sgLj0gIi0iOyAjIHZhbGdyaW5kIG5vdCBjaGVja2VkCisgICAgfQorCisgICAgbG9nbXNnICIkb2sgIiBpZighJHNob3J0KTsKKworICAgIG15ICRzb2Zhcj0gdGltZSgpLSRzdGFydDsKKyAgICBteSAkZXN0dG90YWwgPSAkc29mYXIvJGNvdW50ICogJHRvdGFsOworICAgIG15ICRlc3RsZWZ0ID0gJGVzdHRvdGFsIC0gJHNvZmFyOworICAgIG15ICRsZWZ0PXNwcmludGYoInJlbWFpbmluZzogJTAyZDolMDJkIiwKKyAgICAgICAgICAgICAgICAgICAgICRlc3RsZWZ0LzYwLAorICAgICAgICAgICAgICAgICAgICAgJGVzdGxlZnQlNjApOworICAgIGxvZ21zZyBzcHJpbnRmKCJPSyAoJS0zZCBvdXQgb2YgJS0zZCwgJXMpXG4iLCAkY291bnQsICR0b3RhbCwgJGxlZnQpOworCisgICAgIyB0aGUgdGVzdCBzdWNjZWVkZWQsIHJlbW92ZSBhbGwgbG9nIGZpbGVzCisgICAgaWYoISRrZWVwb3V0ZmlsZXMpIHsKKyAgICAgICAgY2xlYXJkaXIoJExPR0RJUik7CisgICAgfQorCisgICAgIyB0aW1lc3RhbXAgdGVzdCByZXN1bHQgdmVyaWZpY2F0aW9uIGVuZAorICAgICR0aW1ldnJmeWVuZHskdGVzdG51bX0gPSBUaW1lOjpIaVJlczo6dGltZSgpIGlmKCR0aW1lc3RhdHMpOworCisgICAgcmV0dXJuIDA7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFN0b3AgYWxsIHJ1bm5pbmcgdGVzdCBzZXJ2ZXJzCisjCitzdWIgc3RvcHNlcnZlcnMgeworICAgIG15ICR2ZXJib3NlID0gJF9bMF07CisgICAgIworICAgICMga2lsbCBzb2NrZmlsdGVyIHByb2Nlc3NlcyBmb3IgYWxsIHBpbmdwb25nIHNlcnZlcnMKKyAgICAjCisgICAga2lsbGFsbHNvY2tmaWx0ZXJzKCR2ZXJib3NlKTsKKyAgICAjCisgICAgIyBraWxsIGFsbCBzZXJ2ZXIgcGlkcyBmcm9tICVydW4gaGFzaCBjbGVhcmluZyB0aGVtCisgICAgIworICAgIG15ICRwaWRsaXN0OworICAgIGZvcmVhY2ggbXkgJHNlcnZlciAoa2V5cyAlcnVuKSB7CisgICAgICAgIGlmKCRydW57JHNlcnZlcn0pIHsKKyAgICAgICAgICAgIGlmKCR2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgbXkgJHByZXYgPSAwOworICAgICAgICAgICAgICAgIG15ICRwaWRzID0gJHJ1bnskc2VydmVyfTsKKyAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRwaWQgKHNwbGl0KCcgJywgJHBpZHMpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKCRwaWQgIT0gJHByZXYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ21zZyBzcHJpbnRmKCIqIGtpbGwgcGlkIGZvciAlcyA9PiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VydmVyLCAkcGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICRwcmV2ID0gJHBpZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICRwaWRsaXN0IC49ICIkcnVueyRzZXJ2ZXJ9ICI7CisgICAgICAgICAgICAkcnVueyRzZXJ2ZXJ9ID0gMDsKKyAgICAgICAgfQorICAgICAgICAkcnVuY2VydHskc2VydmVyfSA9IDAgaWYoJHJ1bmNlcnR7JHNlcnZlcn0pOworICAgIH0KKyAgICBraWxscGlkKCR2ZXJib3NlLCAkcGlkbGlzdCk7CisgICAgIworICAgICMgY2xlYW51cCBhbGwgc2VydmVyIHBpZCBmaWxlcworICAgICMKKyAgICBmb3JlYWNoIG15ICRzZXJ2ZXIgKGtleXMgJXNlcnZlcnBpZGZpbGUpIHsKKyAgICAgICAgbXkgJHBpZGZpbGUgPSAkc2VydmVycGlkZmlsZXskc2VydmVyfTsKKyAgICAgICAgbXkgJHBpZCA9IHByb2Nlc3NleGlzdHMoJHBpZGZpbGUpOworICAgICAgICBpZigkcGlkID4gMCkgeworICAgICAgICAgICAgbG9nbXNnICJXYXJuaW5nOiAkc2VydmVyIHNlcnZlciB1bmV4cGVjdGVkbHkgYWxpdmVcbiI7CisgICAgICAgICAgICBraWxscGlkKCR2ZXJib3NlLCAkcGlkKTsKKyAgICAgICAgfQorICAgICAgICB1bmxpbmsoJHBpZGZpbGUpIGlmKC1mICRwaWRmaWxlKTsKKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHN0YXJ0c2VydmVycygpIHN0YXJ0cyBhbGwgdGhlIG5hbWVkIHNlcnZlcnMKKyMKKyMgUmV0dXJuczogc3RyaW5nIHdpdGggZXJyb3IgcmVhc29uIG9yIGJsYW5rIGZvciBzdWNjZXNzCisjCitzdWIgc3RhcnRzZXJ2ZXJzIHsKKyAgICBteSBAd2hhdCA9IEBfOworICAgIG15ICgkcGlkLCAkcGlkMik7CisgICAgZm9yKEB3aGF0KSB7CisgICAgICAgIG15IChAd2hhdGxpc3QpID0gc3BsaXQoL1xzKy8sJF8pOworICAgICAgICBteSAkd2hhdCA9IGxjKCR3aGF0bGlzdFswXSk7CisgICAgICAgICR3aGF0ID1+IHMvW15hLXowLTktXS8vZzsKKworICAgICAgICBteSAkY2VydGZpbGU7CisgICAgICAgIGlmKCR3aGF0ID1+IC9eKGZ0cHxodHRwfGltYXB8cG9wM3xzbXRwKXMoKFxkKikoLWlwdjZ8KSkkLykgeworICAgICAgICAgICAgJGNlcnRmaWxlID0gKCR3aGF0bGlzdFsxXSkgPyAkd2hhdGxpc3RbMV0gOiAnc3R1bm5lbC5wZW0nOworICAgICAgICB9CisKKyAgICAgICAgaWYoKCR3aGF0IGVxICJwb3AzIikgfHwKKyAgICAgICAgICAgKCR3aGF0IGVxICJmdHAiKSB8fAorICAgICAgICAgICAoJHdoYXQgZXEgImltYXAiKSB8fAorICAgICAgICAgICAoJHdoYXQgZXEgInNtdHAiKSkgeworICAgICAgICAgICAgaWYoJHRvcnR1cmUgJiYgJHJ1bnskd2hhdH0gJiYKKyAgICAgICAgICAgICAgICFyZXNwb25zaXZlX3Bpbmdwb25nX3NlcnZlcigkd2hhdCwgIiIsICR2ZXJib3NlKSkgeworICAgICAgICAgICAgICAgIHN0b3BzZXJ2ZXIoJHdoYXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoISRydW57JHdoYXR9KSB7CisgICAgICAgICAgICAgICAgKCRwaWQsICRwaWQyKSA9IHJ1bnBpbmdwb25nc2VydmVyKCR3aGF0LCAiIiwgJHZlcmJvc2UpOworICAgICAgICAgICAgICAgIGlmKCRwaWQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZhaWxlZCBzdGFydGluZyAiLiB1Yygkd2hhdCkgLiIgc2VydmVyIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRmICgiKiBwaWQgJHdoYXQgPT4gJWQgJWRcbiIsICRwaWQsICRwaWQyKSBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgJHJ1bnskd2hhdH09IiRwaWQgJHBpZDIiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCR3aGF0IGVxICJmdHAyIikgeworICAgICAgICAgICAgaWYoJHRvcnR1cmUgJiYgJHJ1bnsnZnRwMid9ICYmCisgICAgICAgICAgICAgICAhcmVzcG9uc2l2ZV9waW5ncG9uZ19zZXJ2ZXIoImZ0cCIsICIyIiwgJHZlcmJvc2UpKSB7CisgICAgICAgICAgICAgICAgc3RvcHNlcnZlcignZnRwMicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoISRydW57J2Z0cDInfSkgeworICAgICAgICAgICAgICAgICgkcGlkLCAkcGlkMikgPSBydW5waW5ncG9uZ3NlcnZlcigiZnRwIiwgIjIiLCAkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgaWYoJHBpZCA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmFpbGVkIHN0YXJ0aW5nIEZUUDIgc2VydmVyIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRmICgiKiBwaWQgZnRwMiA9PiAlZCAlZFxuIiwgJHBpZCwgJHBpZDIpIGlmKCR2ZXJib3NlKTsKKyAgICAgICAgICAgICAgICAkcnVueydmdHAyJ309IiRwaWQgJHBpZDIiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCR3aGF0IGVxICJmdHAtaXB2NiIpIHsKKyAgICAgICAgICAgIGlmKCR0b3J0dXJlICYmICRydW57J2Z0cC1pcHY2J30gJiYKKyAgICAgICAgICAgICAgICFyZXNwb25zaXZlX3Bpbmdwb25nX3NlcnZlcigiZnRwIiwgIiIsICR2ZXJib3NlLCAiaXB2NiIpKSB7CisgICAgICAgICAgICAgICAgc3RvcHNlcnZlcignZnRwLWlwdjYnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCEkcnVueydmdHAtaXB2Nid9KSB7CisgICAgICAgICAgICAgICAgKCRwaWQsICRwaWQyKSA9IHJ1bnBpbmdwb25nc2VydmVyKCJmdHAiLCAiIiwgJHZlcmJvc2UsICJpcHY2Iik7CisgICAgICAgICAgICAgICAgaWYoJHBpZCA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmFpbGVkIHN0YXJ0aW5nIEZUUC1JUHY2IHNlcnZlciI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvZ21zZyBzcHJpbnRmKCIqIHBpZCBmdHAtaXB2NiA9PiAlZCAlZFxuIiwgJHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgJHBpZDIpIGlmKCR2ZXJib3NlKTsKKyAgICAgICAgICAgICAgICAkcnVueydmdHAtaXB2Nid9PSIkcGlkICRwaWQyIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZigkd2hhdCBlcSAiZ29waGVyIikgeworICAgICAgICAgICAgaWYoJHRvcnR1cmUgJiYgJHJ1bnsnZ29waGVyJ30gJiYKKyAgICAgICAgICAgICAgICFyZXNwb25zaXZlX2h0dHBfc2VydmVyKCJnb3BoZXIiLCAkdmVyYm9zZSwgMCwgJEdPUEhFUlBPUlQpKSB7CisgICAgICAgICAgICAgICAgc3RvcHNlcnZlcignZ29waGVyJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZighJHJ1bnsnZ29waGVyJ30pIHsKKyAgICAgICAgICAgICAgICAoJHBpZCwgJHBpZDIpID0gcnVuaHR0cHNlcnZlcigiZ29waGVyIiwgJHZlcmJvc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdPUEhFUlBPUlQpOworICAgICAgICAgICAgICAgIGlmKCRwaWQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZhaWxlZCBzdGFydGluZyBHT1BIRVIgc2VydmVyIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbG9nbXNnIHNwcmludGYgKCIqIHBpZCBnb3BoZXIgPT4gJWQgJWRcbiIsICRwaWQsICRwaWQyKQorICAgICAgICAgICAgICAgICAgICBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgJHJ1bnsnZ29waGVyJ309IiRwaWQgJHBpZDIiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCR3aGF0IGVxICJnb3BoZXItaXB2NiIpIHsKKyAgICAgICAgICAgIGlmKCR0b3J0dXJlICYmICRydW57J2dvcGhlci1pcHY2J30gJiYKKyAgICAgICAgICAgICAgICFyZXNwb25zaXZlX2h0dHBfc2VydmVyKCJnb3BoZXIiLCAkdmVyYm9zZSwgImlwdjYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdPUEhFUjZQT1JUKSkgeworICAgICAgICAgICAgICAgIHN0b3BzZXJ2ZXIoJ2dvcGhlci1pcHY2Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZighJHJ1bnsnZ29waGVyLWlwdjYnfSkgeworICAgICAgICAgICAgICAgICgkcGlkLCAkcGlkMikgPSBydW5odHRwc2VydmVyKCJnb3BoZXIiLCAkdmVyYm9zZSwgImlwdjYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHT1BIRVI2UE9SVCk7CisgICAgICAgICAgICAgICAgaWYoJHBpZCA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmFpbGVkIHN0YXJ0aW5nIEdPUEhFUi1JUHY2IHNlcnZlciI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvZ21zZyBzcHJpbnRmKCIqIHBpZCBnb3BoZXItaXB2NiA9PiAlZCAlZFxuIiwgJHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGlkMikgaWYoJHZlcmJvc2UpOworICAgICAgICAgICAgICAgICRydW57J2dvcGhlci1pcHY2J309IiRwaWQgJHBpZDIiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCR3aGF0IGVxICJodHRwIikgeworICAgICAgICAgICAgaWYoJHRvcnR1cmUgJiYgJHJ1bnsnaHR0cCd9ICYmCisgICAgICAgICAgICAgICAhcmVzcG9uc2l2ZV9odHRwX3NlcnZlcigiaHR0cCIsICR2ZXJib3NlLCAwLCAkSFRUUFBPUlQpKSB7CisgICAgICAgICAgICAgICAgc3RvcHNlcnZlcignaHR0cCcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoISRydW57J2h0dHAnfSkgeworICAgICAgICAgICAgICAgICgkcGlkLCAkcGlkMikgPSBydW5odHRwc2VydmVyKCJodHRwIiwgJHZlcmJvc2UsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEhUVFBQT1JUKTsKKyAgICAgICAgICAgICAgICBpZigkcGlkIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmYWlsZWQgc3RhcnRpbmcgSFRUUCBzZXJ2ZXIiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsb2dtc2cgc3ByaW50ZiAoIiogcGlkIGh0dHAgPT4gJWQgJWRcbiIsICRwaWQsICRwaWQyKQorICAgICAgICAgICAgICAgICAgICBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgJHJ1bnsnaHR0cCd9PSIkcGlkICRwaWQyIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZigkd2hhdCBlcSAiaHR0cC1wcm94eSIpIHsKKyAgICAgICAgICAgIGlmKCR0b3J0dXJlICYmICRydW57J2h0dHAtcHJveHknfSAmJgorICAgICAgICAgICAgICAgIXJlc3BvbnNpdmVfaHR0cF9zZXJ2ZXIoImh0dHAiLCAkdmVyYm9zZSwgInByb3h5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRIVFRQUFJPWFlQT1JUKSkgeworICAgICAgICAgICAgICAgIHN0b3BzZXJ2ZXIoJ2h0dHAtcHJveHknKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCEkcnVueydodHRwLXByb3h5J30pIHsKKyAgICAgICAgICAgICAgICAoJHBpZCwgJHBpZDIpID0gcnVuaHR0cHNlcnZlcigiaHR0cCIsICR2ZXJib3NlLCAicHJveHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRIVFRQUFJPWFlQT1JUKTsKKyAgICAgICAgICAgICAgICBpZigkcGlkIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmYWlsZWQgc3RhcnRpbmcgSFRUUC1wcm94eSBzZXJ2ZXIiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsb2dtc2cgc3ByaW50ZiAoIiogcGlkIGh0dHAtcHJveHkgPT4gJWQgJWRcbiIsICRwaWQsICRwaWQyKQorICAgICAgICAgICAgICAgICAgICBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgJHJ1bnsnaHR0cC1wcm94eSd9PSIkcGlkICRwaWQyIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZigkd2hhdCBlcSAiaHR0cC1pcHY2IikgeworICAgICAgICAgICAgaWYoJHRvcnR1cmUgJiYgJHJ1bnsnaHR0cC1pcHY2J30gJiYKKyAgICAgICAgICAgICAgICFyZXNwb25zaXZlX2h0dHBfc2VydmVyKCJodHRwIiwgJHZlcmJvc2UsICJJUHY2IiwgJEhUVFA2UE9SVCkpIHsKKyAgICAgICAgICAgICAgICBzdG9wc2VydmVyKCdodHRwLWlwdjYnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCEkcnVueydodHRwLWlwdjYnfSkgeworICAgICAgICAgICAgICAgICgkcGlkLCAkcGlkMikgPSBydW5odHRwc2VydmVyKCJodHRwIiwgJHZlcmJvc2UsICJpcHY2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSFRUUDZQT1JUKTsKKyAgICAgICAgICAgICAgICBpZigkcGlkIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmYWlsZWQgc3RhcnRpbmcgSFRUUC1JUHY2IHNlcnZlciI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvZ21zZyBzcHJpbnRmKCIqIHBpZCBodHRwLWlwdjYgPT4gJWQgJWRcbiIsICRwaWQsICRwaWQyKQorICAgICAgICAgICAgICAgICAgICBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgJHJ1bnsnaHR0cC1pcHY2J309IiRwaWQgJHBpZDIiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCR3aGF0IGVxICJydHNwIikgeworICAgICAgICAgICAgaWYoJHRvcnR1cmUgJiYgJHJ1bnsncnRzcCd9ICYmCisgICAgICAgICAgICAgICAhcmVzcG9uc2l2ZV9ydHNwX3NlcnZlcigkdmVyYm9zZSkpIHsKKyAgICAgICAgICAgICAgICBzdG9wc2VydmVyKCdydHNwJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZighJHJ1bnsncnRzcCd9KSB7CisgICAgICAgICAgICAgICAgKCRwaWQsICRwaWQyKSA9IHJ1bnJ0c3BzZXJ2ZXIoJHZlcmJvc2UpOworICAgICAgICAgICAgICAgIGlmKCRwaWQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZhaWxlZCBzdGFydGluZyBSVFNQIHNlcnZlciI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50ZiAoIiogcGlkIHJ0c3AgPT4gJWQgJWRcbiIsICRwaWQsICRwaWQyKSBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgJHJ1bnsncnRzcCd9PSIkcGlkICRwaWQyIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZigkd2hhdCBlcSAicnRzcC1pcHY2IikgeworICAgICAgICAgICAgaWYoJHRvcnR1cmUgJiYgJHJ1bnsncnRzcC1pcHY2J30gJiYKKyAgICAgICAgICAgICAgICFyZXNwb25zaXZlX3J0c3Bfc2VydmVyKCR2ZXJib3NlLCAiSVB2NiIpKSB7CisgICAgICAgICAgICAgICAgc3RvcHNlcnZlcigncnRzcC1pcHY2Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZighJHJ1bnsncnRzcC1pcHY2J30pIHsKKyAgICAgICAgICAgICAgICAoJHBpZCwgJHBpZDIpID0gcnVucnRzcHNlcnZlcigkdmVyYm9zZSwgIklQdjYiKTsKKyAgICAgICAgICAgICAgICBpZigkcGlkIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmYWlsZWQgc3RhcnRpbmcgUlRTUC1JUHY2IHNlcnZlciI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvZ21zZyBzcHJpbnRmKCIqIHBpZCBydHNwLWlwdjYgPT4gJWQgJWRcbiIsICRwaWQsICRwaWQyKQorICAgICAgICAgICAgICAgICAgICBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgJHJ1bnsncnRzcC1pcHY2J309IiRwaWQgJHBpZDIiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCR3aGF0IGVxICJmdHBzIikgeworICAgICAgICAgICAgaWYoISRzdHVubmVsKSB7CisgICAgICAgICAgICAgICAgIyB3ZSBjYW4ndCBydW4gZnRwcyB0ZXN0cyB3aXRob3V0IHN0dW5uZWwKKyAgICAgICAgICAgICAgICByZXR1cm4gIm5vIHN0dW5uZWwiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoISRzc2xfdmVyc2lvbikgeworICAgICAgICAgICAgICAgICMgd2UgY2FuJ3QgcnVuIGZ0cHMgdGVzdHMgaWYgbGliY3VybCBpcyBTU0wtbGVzcworICAgICAgICAgICAgICAgIHJldHVybiAiY3VybCBsYWNrcyBTU0wgc3VwcG9ydCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZigkcnVuY2VydHsnZnRwcyd9ICYmICgkcnVuY2VydHsnZnRwcyd9IG5lICRjZXJ0ZmlsZSkpIHsKKyAgICAgICAgICAgICAgICAjIHN0b3Agc2VydmVyIHdoZW4gcnVubmluZyBhbmQgdXNpbmcgYSBkaWZmZXJlbnQgY2VydAorICAgICAgICAgICAgICAgIHN0b3BzZXJ2ZXIoJ2Z0cHMnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCR0b3J0dXJlICYmICRydW57J2Z0cCd9ICYmCisgICAgICAgICAgICAgICAhcmVzcG9uc2l2ZV9waW5ncG9uZ19zZXJ2ZXIoImZ0cCIsICIiLCAkdmVyYm9zZSkpIHsKKyAgICAgICAgICAgICAgICBzdG9wc2VydmVyKCdmdHAnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCEkcnVueydmdHAnfSkgeworICAgICAgICAgICAgICAgICgkcGlkLCAkcGlkMikgPSBydW5waW5ncG9uZ3NlcnZlcigiZnRwIiwgIiIsICR2ZXJib3NlKTsKKyAgICAgICAgICAgICAgICBpZigkcGlkIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmYWlsZWQgc3RhcnRpbmcgRlRQIHNlcnZlciI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50ZiAoIiogcGlkIGZ0cCA9PiAlZCAlZFxuIiwgJHBpZCwgJHBpZDIpIGlmKCR2ZXJib3NlKTsKKyAgICAgICAgICAgICAgICAkcnVueydmdHAnfT0iJHBpZCAkcGlkMiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZighJHJ1bnsnZnRwcyd9KSB7CisgICAgICAgICAgICAgICAgKCRwaWQsICRwaWQyKSA9IHJ1bmZ0cHNzZXJ2ZXIoJHZlcmJvc2UsICIiLCAkY2VydGZpbGUpOworICAgICAgICAgICAgICAgIGlmKCRwaWQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZhaWxlZCBzdGFydGluZyBGVFBTIHNlcnZlciAoc3R1bm5lbCkiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsb2dtc2cgc3ByaW50ZigiKiBwaWQgZnRwcyA9PiAlZCAlZFxuIiwgJHBpZCwgJHBpZDIpCisgICAgICAgICAgICAgICAgICAgIGlmKCR2ZXJib3NlKTsKKyAgICAgICAgICAgICAgICAkcnVueydmdHBzJ309IiRwaWQgJHBpZDIiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCR3aGF0IGVxICJmaWxlIikgeworICAgICAgICAgICAgIyB3ZSBzdXBwb3J0IGl0IGJ1dCBoYXZlIG5vIHNlcnZlciEKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkd2hhdCBlcSAiaHR0cHMiKSB7CisgICAgICAgICAgICBpZighJHN0dW5uZWwpIHsKKyAgICAgICAgICAgICAgICAjIHdlIGNhbid0IHJ1biBodHRwcyB0ZXN0cyB3aXRob3V0IHN0dW5uZWwKKyAgICAgICAgICAgICAgICByZXR1cm4gIm5vIHN0dW5uZWwiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoISRzc2xfdmVyc2lvbikgeworICAgICAgICAgICAgICAgICMgd2UgY2FuJ3QgcnVuIGh0dHBzIHRlc3RzIGlmIGxpYmN1cmwgaXMgU1NMLWxlc3MKKyAgICAgICAgICAgICAgICByZXR1cm4gImN1cmwgbGFja3MgU1NMIHN1cHBvcnQiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoJHJ1bmNlcnR7J2h0dHBzJ30gJiYgKCRydW5jZXJ0eydodHRwcyd9IG5lICRjZXJ0ZmlsZSkpIHsKKyAgICAgICAgICAgICAgICAjIHN0b3Agc2VydmVyIHdoZW4gcnVubmluZyBhbmQgdXNpbmcgYSBkaWZmZXJlbnQgY2VydAorICAgICAgICAgICAgICAgIHN0b3BzZXJ2ZXIoJ2h0dHBzJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZigkdG9ydHVyZSAmJiAkcnVueydodHRwJ30gJiYKKyAgICAgICAgICAgICAgICFyZXNwb25zaXZlX2h0dHBfc2VydmVyKCJodHRwIiwgJHZlcmJvc2UsIDAsICRIVFRQUE9SVCkpIHsKKyAgICAgICAgICAgICAgICBzdG9wc2VydmVyKCdodHRwJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZighJHJ1bnsnaHR0cCd9KSB7CisgICAgICAgICAgICAgICAgKCRwaWQsICRwaWQyKSA9IHJ1bmh0dHBzZXJ2ZXIoImh0dHAiLCAkdmVyYm9zZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSFRUUFBPUlQpOworICAgICAgICAgICAgICAgIGlmKCRwaWQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZhaWxlZCBzdGFydGluZyBIVFRQIHNlcnZlciI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50ZiAoIiogcGlkIGh0dHAgPT4gJWQgJWRcbiIsICRwaWQsICRwaWQyKSBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgJHJ1bnsnaHR0cCd9PSIkcGlkICRwaWQyIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCEkcnVueydodHRwcyd9KSB7CisgICAgICAgICAgICAgICAgKCRwaWQsICRwaWQyKSA9IHJ1bmh0dHBzc2VydmVyKCR2ZXJib3NlLCAiIiwgJGNlcnRmaWxlKTsKKyAgICAgICAgICAgICAgICBpZigkcGlkIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmYWlsZWQgc3RhcnRpbmcgSFRUUFMgc2VydmVyIChzdHVubmVsKSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvZ21zZyBzcHJpbnRmKCIqIHBpZCBodHRwcyA9PiAlZCAlZFxuIiwgJHBpZCwgJHBpZDIpCisgICAgICAgICAgICAgICAgICAgIGlmKCR2ZXJib3NlKTsKKyAgICAgICAgICAgICAgICAkcnVueydodHRwcyd9PSIkcGlkICRwaWQyIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZigkd2hhdCBlcSAiaHR0cHRscyIpIHsKKyAgICAgICAgICAgIGlmKCEkaHR0cHRsc3NydikgeworICAgICAgICAgICAgICAgICMgZm9yIG5vdywgd2UgY2FuJ3QgcnVuIGh0dHAgVExTLUVYVCB0ZXN0cyB3aXRob3V0IGdudXRscy1zZXJ2CisgICAgICAgICAgICAgICAgcmV0dXJuICJubyBnbnV0bHMtc2VydiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZigkdG9ydHVyZSAmJiAkcnVueydodHRwdGxzJ30gJiYKKyAgICAgICAgICAgICAgICFyZXNwb25zaXZlX2h0dHB0bHNfc2VydmVyKCR2ZXJib3NlLCAiSVB2NCIpKSB7CisgICAgICAgICAgICAgICAgc3RvcHNlcnZlcignaHR0cHRscycpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoISRydW57J2h0dHB0bHMnfSkgeworICAgICAgICAgICAgICAgICgkcGlkLCAkcGlkMikgPSBydW5odHRwdGxzc2VydmVyKCR2ZXJib3NlLCAiSVB2NCIpOworICAgICAgICAgICAgICAgIGlmKCRwaWQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZhaWxlZCBzdGFydGluZyBIVFRQVExTIHNlcnZlciAoZ251dGxzLXNlcnYpIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbG9nbXNnIHNwcmludGYoIiogcGlkIGh0dHB0bHMgPT4gJWQgJWRcbiIsICRwaWQsICRwaWQyKQorICAgICAgICAgICAgICAgICAgICBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgJHJ1bnsnaHR0cHRscyd9PSIkcGlkICRwaWQyIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNpZigkd2hhdCBlcSAiaHR0cHRscy1pcHY2IikgeworICAgICAgICAgICAgaWYoISRodHRwdGxzc3J2KSB7CisgICAgICAgICAgICAgICAgIyBmb3Igbm93LCB3ZSBjYW4ndCBydW4gaHR0cCBUTFMtRVhUIHRlc3RzIHdpdGhvdXQgZ251dGxzLXNlcnYKKyAgICAgICAgICAgICAgICByZXR1cm4gIm5vIGdudXRscy1zZXJ2IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCR0b3J0dXJlICYmICRydW57J2h0dHB0bHMtaXB2Nid9ICYmCisgICAgICAgICAgICAgICAhcmVzcG9uc2l2ZV9odHRwdGxzX3NlcnZlcigkdmVyYm9zZSwgIklQdjYiKSkgeworICAgICAgICAgICAgICAgIHN0b3BzZXJ2ZXIoJ2h0dHB0bHMtaXB2NicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoISRydW57J2h0dHB0bHMtaXB2Nid9KSB7CisgICAgICAgICAgICAgICAgKCRwaWQsICRwaWQyKSA9IHJ1bmh0dHB0bHNzZXJ2ZXIoJHZlcmJvc2UsICJJUHY2Iik7CisgICAgICAgICAgICAgICAgaWYoJHBpZCA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmFpbGVkIHN0YXJ0aW5nIEhUVFBUTFMtSVB2NiBzZXJ2ZXIgKGdudXRscy1zZXJ2KSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvZ21zZyBzcHJpbnRmKCIqIHBpZCBodHRwdGxzLWlwdjYgPT4gJWQgJWRcbiIsICRwaWQsICRwaWQyKQorICAgICAgICAgICAgICAgICAgICBpZigkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgJHJ1bnsnaHR0cHRscy1pcHY2J309IiRwaWQgJHBpZDIiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCR3aGF0IGVxICJ0ZnRwIikgeworICAgICAgICAgICAgaWYoJHRvcnR1cmUgJiYgJHJ1bnsndGZ0cCd9ICYmCisgICAgICAgICAgICAgICAhcmVzcG9uc2l2ZV90ZnRwX3NlcnZlcigiIiwgJHZlcmJvc2UpKSB7CisgICAgICAgICAgICAgICAgc3RvcHNlcnZlcigndGZ0cCcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoISRydW57J3RmdHAnfSkgeworICAgICAgICAgICAgICAgICgkcGlkLCAkcGlkMikgPSBydW50ZnRwc2VydmVyKCIiLCAkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgaWYoJHBpZCA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmFpbGVkIHN0YXJ0aW5nIFRGVFAgc2VydmVyIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRmICgiKiBwaWQgdGZ0cCA9PiAlZCAlZFxuIiwgJHBpZCwgJHBpZDIpIGlmKCR2ZXJib3NlKTsKKyAgICAgICAgICAgICAgICAkcnVueyd0ZnRwJ309IiRwaWQgJHBpZDIiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmKCR3aGF0IGVxICJ0ZnRwLWlwdjYiKSB7CisgICAgICAgICAgICBpZigkdG9ydHVyZSAmJiAkcnVueyd0ZnRwLWlwdjYnfSAmJgorICAgICAgICAgICAgICAgIXJlc3BvbnNpdmVfdGZ0cF9zZXJ2ZXIoIiIsICR2ZXJib3NlLCAiSVB2NiIpKSB7CisgICAgICAgICAgICAgICAgc3RvcHNlcnZlcigndGZ0cC1pcHY2Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZighJHJ1bnsndGZ0cC1pcHY2J30pIHsKKyAgICAgICAgICAgICAgICAoJHBpZCwgJHBpZDIpID0gcnVudGZ0cHNlcnZlcigiIiwgJHZlcmJvc2UsICJJUHY2Iik7CisgICAgICAgICAgICAgICAgaWYoJHBpZCA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmFpbGVkIHN0YXJ0aW5nIFRGVFAtSVB2NiBzZXJ2ZXIiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmludGYoIiogcGlkIHRmdHAtaXB2NiA9PiAlZCAlZFxuIiwgJHBpZCwgJHBpZDIpIGlmKCR2ZXJib3NlKTsKKyAgICAgICAgICAgICAgICAkcnVueyd0ZnRwLWlwdjYnfT0iJHBpZCAkcGlkMiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJHdoYXQgZXEgInNmdHAiIHx8ICR3aGF0IGVxICJzY3AiIHx8ICR3aGF0IGVxICJzb2NrczQiIHx8ICR3aGF0IGVxICJzb2NrczUiICkgeworICAgICAgICAgICAgaWYoISRydW57J3NzaCd9KSB7CisgICAgICAgICAgICAgICAgKCRwaWQsICRwaWQyKSA9IHJ1bnNzaHNlcnZlcigiIiwgJHZlcmJvc2UpOworICAgICAgICAgICAgICAgIGlmKCRwaWQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZhaWxlZCBzdGFydGluZyBTU0ggc2VydmVyIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRmICgiKiBwaWQgc3NoID0+ICVkICVkXG4iLCAkcGlkLCAkcGlkMikgaWYoJHZlcmJvc2UpOworICAgICAgICAgICAgICAgICRydW57J3NzaCd9PSIkcGlkICRwaWQyIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCR3aGF0IGVxICJzb2NrczQiIHx8ICR3aGF0IGVxICJzb2NrczUiKSB7CisgICAgICAgICAgICAgICAgaWYoISRydW57J3NvY2tzJ30pIHsKKyAgICAgICAgICAgICAgICAgICAgKCRwaWQsICRwaWQyKSA9IHJ1bnNvY2tzc2VydmVyKCIiLCAkdmVyYm9zZSk7CisgICAgICAgICAgICAgICAgICAgIGlmKCRwaWQgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmYWlsZWQgc3RhcnRpbmcgc29ja3Mgc2VydmVyIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIqIHBpZCBzb2NrcyA9PiAlZCAlZFxuIiwgJHBpZCwgJHBpZDIpIGlmKCR2ZXJib3NlKTsKKyAgICAgICAgICAgICAgICAgICAgJHJ1bnsnc29ja3MnfT0iJHBpZCAkcGlkMiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoJHdoYXQgZXEgInNvY2tzNSIpIHsKKyAgICAgICAgICAgICAgICBpZighJHNzaGRpZCkgeworICAgICAgICAgICAgICAgICAgICAjIE5vdCBhbiBPcGVuU1NIIG9yIFN1blNTSCBzc2ggZGFlbW9uCisgICAgICAgICAgICAgICAgICAgIGxvZ21zZyAiTm90IE9wZW5TU0ggb3IgU3VuU1NIOyBzb2NrczUgdGVzdHMgbmVlZCBhdCBsZWFzdCBPcGVuU1NIIDMuN1xuIjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmYWlsZWQgc3RhcnRpbmcgc29ja3M1IHNlcnZlciI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2lmKCgkc3NoZGlkID1+IC9PcGVuU1NILykgJiYgKCRzc2hkdmVybnVtIDwgMzcwKSkgeworICAgICAgICAgICAgICAgICAgICAjIE5lZWQgT3BlblNTSCAzLjcgZm9yIHNvY2tzNSAtIGh0dHA6Ly93d3cub3BlbnNzaC5jb20vdHh0L3JlbGVhc2UtMy43CisgICAgICAgICAgICAgICAgICAgIGxvZ21zZyAiJHNzaGR2ZXJzdHIgaW5zdWZmaWNpZW50OyBzb2NrczUgdGVzdHMgbmVlZCBhdCBsZWFzdCBPcGVuU1NIIDMuN1xuIjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmYWlsZWQgc3RhcnRpbmcgc29ja3M1IHNlcnZlciI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2lmKCgkc3NoZGlkID1+IC9TdW5TU0gvKSAgJiYgKCRzc2hkdmVybnVtIDwgMTAwKSkgeworICAgICAgICAgICAgICAgICAgICAjIE5lZWQgU3VuU1NIIDEuMCBmb3Igc29ja3M1CisgICAgICAgICAgICAgICAgICAgIGxvZ21zZyAiJHNzaGR2ZXJzdHIgaW5zdWZmaWNpZW50OyBzb2NrczUgdGVzdHMgbmVlZCBhdCBsZWFzdCBTdW5TU0ggMS4wXG4iOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZhaWxlZCBzdGFydGluZyBzb2NrczUgc2VydmVyIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJHdoYXQgZXEgIm5vbmUiKSB7CisgICAgICAgICAgICBsb2dtc2cgIiogc3RhcnRzIG5vIHNlcnZlclxuIiBpZiAoJHZlcmJvc2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgd2FybiAid2UgZG9uJ3Qgc3VwcG9ydCBhIHNlcnZlciBmb3IgJHdoYXQiOworICAgICAgICAgICAgcmV0dXJuICJubyBzZXJ2ZXIgZm9yICR3aGF0IjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoaXMgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGUgcmlnaHQgc2V0IG9mIHNlcnZlciBpcyBydW5uaW5nIGZvciB0aGUKKyMgc3BlY2lmaWVkIHRlc3QgY2FzZS4gVGhpcyBpcyBhIHVzZWZ1bCBkZXNpZ24gd2hlbiB3ZSBydW4gc2luZ2xlIHRlc3RzIGFzIG5vdAorIyBhbGwgc2VydmVycyBuZWVkIHRvIHJ1biB0aGVuIQorIworIyBSZXR1cm5zOiBhIHN0cmluZywgYmxhbmsgaWYgZXZlcnl0aGluZyBpcyBmaW5lIG9yIGEgcmVhc29uIHdoeSBpdCBmYWlsZWQKKyMKK3N1YiBzZXJ2ZXJmb3J0ZXN0IHsKKyAgICBteSAoJHRlc3RudW0pPUBfOworCisgICAgbXkgQHdoYXQgPSBnZXRwYXJ0KCJjbGllbnQiLCAic2VydmVyIik7CisKKyAgICBpZighJHdoYXRbMF0pIHsKKyAgICAgICAgd2FybiAiVGVzdCBjYXNlICR0ZXN0bnVtIGhhcyBubyBzZXJ2ZXIocykgc3BlY2lmaWVkIjsKKyAgICAgICAgcmV0dXJuICJubyBzZXJ2ZXIgc3BlY2lmaWVkIjsKKyAgICB9CisKKyAgICBmb3IobXkgJGkgPSBzY2FsYXIoQHdoYXQpIC0gMTsgJGkgPj0gMDsgJGktLSkgeworICAgICAgICBteSAkc3J2cmxpbmUgPSAkd2hhdFskaV07CisgICAgICAgIGNob21wICRzcnZybGluZSBpZigkc3J2cmxpbmUpOworICAgICAgICBpZigkc3J2cmxpbmUgPX4gL14oXFMrKSgoXHMqKSguKikpLykgeworICAgICAgICAgICAgbXkgJHNlcnZlciA9ICIkezF9IjsKKyAgICAgICAgICAgIG15ICRsbnJlc3QgPSAiJHsyfSI7CisgICAgICAgICAgICBteSAkdGxzZXh0OworICAgICAgICAgICAgaWYoJHNlcnZlciA9fiAvXihodHRwdGxzKShcKykoZXh0fHNycCkoXGQqKSgtaXB2NnwpJC8pIHsKKyAgICAgICAgICAgICAgICAkc2VydmVyID0gIiR7MX0kezR9JHs1fSI7CisgICAgICAgICAgICAgICAgJHRsc2V4dCA9IHVjKCJUTFMtJHszfSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoISBncmVwIC9eXFEkc2VydmVyXEUkLywgQHByb3RvY29scykgeworICAgICAgICAgICAgICAgIGlmKHN1YnN0cigkc2VydmVyLDAsNSkgbmUgInNvY2tzIikgeworICAgICAgICAgICAgICAgICAgICBpZigkdGxzZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImN1cmwgbGFja3MgJHRsc2V4dCBzdXBwb3J0IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiY3VybCBsYWNrcyAkc2VydmVyIHNlcnZlciBzdXBwb3J0IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICR3aGF0WyRpXSA9ICIkc2VydmVyJGxucmVzdCIgaWYoJHRsc2V4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gJnN0YXJ0c2VydmVycyhAd2hhdCk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHJ1bnRpbWVzdGF0cyBkaXNwbGF5cyB0ZXN0LXN1aXRlIHJ1biB0aW1lIHN0YXRpc3RpY3MKKyMKK3N1YiBydW50aW1lc3RhdHMgeworICAgIG15ICRsYXN0dGVzdCA9ICRfWzBdOworCisgICAgcmV0dXJuIGlmKG5vdCAkdGltZXN0YXRzKTsKKworICAgIGxvZ21zZyAiXG5UZXN0IHN1aXRlIHRvdGFsIHJ1bm5pbmcgdGltZSBicmVha2Rvd24gcGVyIHRhc2suLi5cblxuIjsKKworICAgIG15IEB0aW1lc3J2cjsKKyAgICBteSBAdGltZXByZXA7CisgICAgbXkgQHRpbWV0b29sOworICAgIG15IEB0aW1lbG9jazsKKyAgICBteSBAdGltZXZyZnk7CisgICAgbXkgQHRpbWV0ZXN0OworICAgIG15ICR0aW1lc3J2cnRvdCA9IDAuMDsKKyAgICBteSAkdGltZXByZXB0b3QgPSAwLjA7CisgICAgbXkgJHRpbWV0b29sdG90ID0gMC4wOworICAgIG15ICR0aW1lbG9ja3RvdCA9IDAuMDsKKyAgICBteSAkdGltZXZyZnl0b3QgPSAwLjA7CisgICAgbXkgJHRpbWV0ZXN0dG90ID0gMC4wOworICAgIG15ICRjb3VudGVyOworCisgICAgZm9yIG15ICR0ZXN0bnVtICgxIC4uICRsYXN0dGVzdCkgeworICAgICAgICBpZigkdGltZXNydnJpbml7JHRlc3RudW19KSB7CisgICAgICAgICAgICAkdGltZXNydnJ0b3QgKz0gJHRpbWVzcnZyZW5keyR0ZXN0bnVtfSAtICR0aW1lc3J2cmluaXskdGVzdG51bX07CisgICAgICAgICAgICAkdGltZXByZXB0b3QgKz0KKyAgICAgICAgICAgICAgICAoKCR0aW1ldG9vbGluaXskdGVzdG51bX0gLSAkdGltZXByZXBpbml7JHRlc3RudW19KSAtCisgICAgICAgICAgICAgICAgICgkdGltZXNydnJlbmR7JHRlc3RudW19IC0gJHRpbWVzcnZyaW5peyR0ZXN0bnVtfSkpOworICAgICAgICAgICAgJHRpbWV0b29sdG90ICs9ICR0aW1ldG9vbGVuZHskdGVzdG51bX0gLSAkdGltZXRvb2xpbml7JHRlc3RudW19OworICAgICAgICAgICAgJHRpbWVsb2NrdG90ICs9ICR0aW1lc3J2cmxvZ3skdGVzdG51bX0gLSAkdGltZXRvb2xlbmR7JHRlc3RudW19OworICAgICAgICAgICAgJHRpbWV2cmZ5dG90ICs9ICR0aW1ldnJmeWVuZHskdGVzdG51bX0gLSAkdGltZXNydnJsb2d7JHRlc3RudW19OworICAgICAgICAgICAgJHRpbWV0ZXN0dG90ICs9ICR0aW1ldnJmeWVuZHskdGVzdG51bX0gLSAkdGltZXByZXBpbml7JHRlc3RudW19OworICAgICAgICAgICAgcHVzaCBAdGltZXNydnIsIHNwcmludGYoIiUwNi4zZiAgJTA0ZCIsCisgICAgICAgICAgICAgICAgJHRpbWVzcnZyZW5keyR0ZXN0bnVtfSAtICR0aW1lc3J2cmluaXskdGVzdG51bX0sICR0ZXN0bnVtKTsKKyAgICAgICAgICAgIHB1c2ggQHRpbWVwcmVwLCBzcHJpbnRmKCIlMDYuM2YgICUwNGQiLAorICAgICAgICAgICAgICAgICgkdGltZXRvb2xpbml7JHRlc3RudW19IC0gJHRpbWVwcmVwaW5peyR0ZXN0bnVtfSkgLQorICAgICAgICAgICAgICAgICgkdGltZXNydnJlbmR7JHRlc3RudW19IC0gJHRpbWVzcnZyaW5peyR0ZXN0bnVtfSksICR0ZXN0bnVtKTsKKyAgICAgICAgICAgIHB1c2ggQHRpbWV0b29sLCBzcHJpbnRmKCIlMDYuM2YgICUwNGQiLAorICAgICAgICAgICAgICAgICR0aW1ldG9vbGVuZHskdGVzdG51bX0gLSAkdGltZXRvb2xpbml7JHRlc3RudW19LCAkdGVzdG51bSk7CisgICAgICAgICAgICBwdXNoIEB0aW1lbG9jaywgc3ByaW50ZigiJTA2LjNmICAlMDRkIiwKKyAgICAgICAgICAgICAgICAkdGltZXNydnJsb2d7JHRlc3RudW19IC0gJHRpbWV0b29sZW5keyR0ZXN0bnVtfSwgJHRlc3RudW0pOworICAgICAgICAgICAgcHVzaCBAdGltZXZyZnksIHNwcmludGYoIiUwNi4zZiAgJTA0ZCIsCisgICAgICAgICAgICAgICAgJHRpbWV2cmZ5ZW5keyR0ZXN0bnVtfSAtICR0aW1lc3J2cmxvZ3skdGVzdG51bX0sICR0ZXN0bnVtKTsKKyAgICAgICAgICAgIHB1c2ggQHRpbWV0ZXN0LCBzcHJpbnRmKCIlMDYuM2YgICUwNGQiLAorICAgICAgICAgICAgICAgICR0aW1ldnJmeWVuZHskdGVzdG51bX0gLSAkdGltZXByZXBpbml7JHRlc3RudW19LCAkdGVzdG51bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIG5vIHdhcm5pbmdzICdudW1lcmljJzsKKyAgICAgICAgQHRpbWVzcnZyID0gc29ydCB7ICRiIDw9PiAkYSB9IEB0aW1lc3J2cjsKKyAgICAgICAgQHRpbWVwcmVwID0gc29ydCB7ICRiIDw9PiAkYSB9IEB0aW1lcHJlcDsKKyAgICAgICAgQHRpbWV0b29sID0gc29ydCB7ICRiIDw9PiAkYSB9IEB0aW1ldG9vbDsKKyAgICAgICAgQHRpbWVsb2NrID0gc29ydCB7ICRiIDw9PiAkYSB9IEB0aW1lbG9jazsKKyAgICAgICAgQHRpbWV2cmZ5ID0gc29ydCB7ICRiIDw9PiAkYSB9IEB0aW1ldnJmeTsKKyAgICAgICAgQHRpbWV0ZXN0ID0gc29ydCB7ICRiIDw9PiAkYSB9IEB0aW1ldGVzdDsKKyAgICB9CisKKyAgICBsb2dtc2cgIlNwZW50ICIuIHNwcmludGYoIiUwOC4zZiAiLCAkdGltZXNydnJ0b3QpIC4KKyAgICAgICAgICAgInNlY29uZHMgc3RhcnRpbmcgYW5kIHZlcmlmeWluZyB0ZXN0IGhhcm5lc3Mgc2VydmVycy5cbiI7CisgICAgbG9nbXNnICJTcGVudCAiLiBzcHJpbnRmKCIlMDguM2YgIiwgJHRpbWVwcmVwdG90KSAuCisgICAgICAgICAgICJzZWNvbmRzIHJlYWRpbmcgZGVmaW5pdGlvbnMgYW5kIGRvaW5nIHRlc3QgcHJlcGFyYXRpb25zLlxuIjsKKyAgICBsb2dtc2cgIlNwZW50ICIuIHNwcmludGYoIiUwOC4zZiAiLCAkdGltZXRvb2x0b3QpIC4KKyAgICAgICAgICAgInNlY29uZHMgYWN0dWFsbHkgcnVubmluZyB0ZXN0IHRvb2xzLlxuIjsKKyAgICBsb2dtc2cgIlNwZW50ICIuIHNwcmludGYoIiUwOC4zZiAiLCAkdGltZWxvY2t0b3QpIC4KKyAgICAgICAgICAgInNlY29uZHMgYXdhaXRpbmcgc2VydmVyIGxvZ3MgbG9jayByZW1vdmFsLlxuIjsKKyAgICBsb2dtc2cgIlNwZW50ICIuIHNwcmludGYoIiUwOC4zZiAiLCAkdGltZXZyZnl0b3QpIC4KKyAgICAgICAgICAgInNlY29uZHMgdmVyaWZ5aW5nIHRlc3QgcmVzdWx0cy5cbiI7CisgICAgbG9nbXNnICJTcGVudCAiLiBzcHJpbnRmKCIlMDguM2YgIiwgJHRpbWV0ZXN0dG90KSAuCisgICAgICAgICAgICJzZWNvbmRzIGRvaW5nIGFsbCBvZiB0aGUgYWJvdmUuXG4iOworCisgICAgJGNvdW50ZXIgPSAyNTsKKyAgICBsb2dtc2cgIlxuVGVzdCBzZXJ2ZXIgc3RhcnRpbmcgYW5kIHZlcmlmaWNhdGlvbiB0aW1lIHBlciB0ZXN0ICIuCisgICAgICAgIHNwcmludGYoIiglcykuLi5cblxuIiwgKG5vdCAkZnVsbHN0YXRzKT8idG9wICRjb3VudGVyIjoiZnVsbCIpOworICAgIGxvZ21zZyAiLXRpbWUtICB0ZXN0XG4iOworICAgIGxvZ21zZyAiLS0tLS0tICAtLS0tXG4iOworICAgIGZvcmVhY2ggbXkgJHR4dCAoQHRpbWVzcnZyKSB7CisgICAgICAgIGxhc3QgaWYoKG5vdCAkZnVsbHN0YXRzKSAmJiAobm90ICRjb3VudGVyLS0pKTsKKyAgICAgICAgbG9nbXNnICIkdHh0XG4iOworICAgIH0KKworICAgICRjb3VudGVyID0gMTA7CisgICAgbG9nbXNnICJcblRlc3QgZGVmaW5pdGlvbiByZWFkaW5nIGFuZCBwcmVwYXJhdGlvbiB0aW1lIHBlciB0ZXN0ICIuCisgICAgICAgIHNwcmludGYoIiglcykuLi5cblxuIiwgKG5vdCAkZnVsbHN0YXRzKT8idG9wICRjb3VudGVyIjoiZnVsbCIpOworICAgIGxvZ21zZyAiLXRpbWUtICB0ZXN0XG4iOworICAgIGxvZ21zZyAiLS0tLS0tICAtLS0tXG4iOworICAgIGZvcmVhY2ggbXkgJHR4dCAoQHRpbWVwcmVwKSB7CisgICAgICAgIGxhc3QgaWYoKG5vdCAkZnVsbHN0YXRzKSAmJiAobm90ICRjb3VudGVyLS0pKTsKKyAgICAgICAgbG9nbXNnICIkdHh0XG4iOworICAgIH0KKworICAgICRjb3VudGVyID0gMjU7CisgICAgbG9nbXNnICJcblRlc3QgdG9vbCBleGVjdXRpb24gdGltZSBwZXIgdGVzdCAiLgorICAgICAgICBzcHJpbnRmKCIoJXMpLi4uXG5cbiIsIChub3QgJGZ1bGxzdGF0cyk/InRvcCAkY291bnRlciI6ImZ1bGwiKTsKKyAgICBsb2dtc2cgIi10aW1lLSAgdGVzdFxuIjsKKyAgICBsb2dtc2cgIi0tLS0tLSAgLS0tLVxuIjsKKyAgICBmb3JlYWNoIG15ICR0eHQgKEB0aW1ldG9vbCkgeworICAgICAgICBsYXN0IGlmKChub3QgJGZ1bGxzdGF0cykgJiYgKG5vdCAkY291bnRlci0tKSk7CisgICAgICAgIGxvZ21zZyAiJHR4dFxuIjsKKyAgICB9CisKKyAgICAkY291bnRlciA9IDE1OworICAgIGxvZ21zZyAiXG5UZXN0IHNlcnZlciBsb2dzIGxvY2sgcmVtb3ZhbCB0aW1lIHBlciB0ZXN0ICIuCisgICAgICAgIHNwcmludGYoIiglcykuLi5cblxuIiwgKG5vdCAkZnVsbHN0YXRzKT8idG9wICRjb3VudGVyIjoiZnVsbCIpOworICAgIGxvZ21zZyAiLXRpbWUtICB0ZXN0XG4iOworICAgIGxvZ21zZyAiLS0tLS0tICAtLS0tXG4iOworICAgIGZvcmVhY2ggbXkgJHR4dCAoQHRpbWVsb2NrKSB7CisgICAgICAgIGxhc3QgaWYoKG5vdCAkZnVsbHN0YXRzKSAmJiAobm90ICRjb3VudGVyLS0pKTsKKyAgICAgICAgbG9nbXNnICIkdHh0XG4iOworICAgIH0KKworICAgICRjb3VudGVyID0gMTA7CisgICAgbG9nbXNnICJcblRlc3QgcmVzdWx0cyB2ZXJpZmljYXRpb24gdGltZSBwZXIgdGVzdCAiLgorICAgICAgICBzcHJpbnRmKCIoJXMpLi4uXG5cbiIsIChub3QgJGZ1bGxzdGF0cyk/InRvcCAkY291bnRlciI6ImZ1bGwiKTsKKyAgICBsb2dtc2cgIi10aW1lLSAgdGVzdFxuIjsKKyAgICBsb2dtc2cgIi0tLS0tLSAgLS0tLVxuIjsKKyAgICBmb3JlYWNoIG15ICR0eHQgKEB0aW1ldnJmeSkgeworICAgICAgICBsYXN0IGlmKChub3QgJGZ1bGxzdGF0cykgJiYgKG5vdCAkY291bnRlci0tKSk7CisgICAgICAgIGxvZ21zZyAiJHR4dFxuIjsKKyAgICB9CisKKyAgICAkY291bnRlciA9IDUwOworICAgIGxvZ21zZyAiXG5Ub3RhbCB0aW1lIHBlciB0ZXN0ICIuCisgICAgICAgIHNwcmludGYoIiglcykuLi5cblxuIiwgKG5vdCAkZnVsbHN0YXRzKT8idG9wICRjb3VudGVyIjoiZnVsbCIpOworICAgIGxvZ21zZyAiLXRpbWUtICB0ZXN0XG4iOworICAgIGxvZ21zZyAiLS0tLS0tICAtLS0tXG4iOworICAgIGZvcmVhY2ggbXkgJHR4dCAoQHRpbWV0ZXN0KSB7CisgICAgICAgIGxhc3QgaWYoKG5vdCAkZnVsbHN0YXRzKSAmJiAobm90ICRjb3VudGVyLS0pKTsKKyAgICAgICAgbG9nbXNnICIkdHh0XG4iOworICAgIH0KKworICAgIGxvZ21zZyAiXG4iOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDaGVjayBvcHRpb25zIHRvIHRoaXMgdGVzdCBwcm9ncmFtCisjCisKK215ICRudW1iZXI9MDsKK215ICRmcm9tbnVtPS0xOworbXkgQHRlc3R0aGlzOword2hpbGUoQEFSR1YpIHsKKyAgICBpZiAoJEFSR1ZbMF0gZXEgIi12IikgeworICAgICAgICAjIHZlcmJvc2Ugb3V0cHV0CisgICAgICAgICR2ZXJib3NlPTE7CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdID1+IC9eLWIoLiopLykgeworICAgICAgICBteSAkcG9ydG5vPSQxOworICAgICAgICBpZigkcG9ydG5vID1+IHMvKFxkKykkLy8pIHsKKyAgICAgICAgICAgICRiYXNlID0gaW50ICQxOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmICgkQVJHVlswXSBlcSAiLWMiKSB7CisgICAgICAgICMgdXNlIHRoaXMgcGF0aCB0byBjdXJsIGluc3RlYWQgb2YgZGVmYXVsdAorICAgICAgICAkREJHQ1VSTD0kQ1VSTD0kQVJHVlsxXTsKKyAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgfQorICAgIGVsc2lmICgkQVJHVlswXSBlcSAiLWQiKSB7CisgICAgICAgICMgaGF2ZSB0aGUgc2VydmVycyBkaXNwbGF5IHByb3RvY29sIG91dHB1dAorICAgICAgICAkZGVidWdwcm90b2NvbD0xOworICAgIH0KKyAgICBlbHNpZiAoJEFSR1ZbMF0gZXEgIi1mIikgeworICAgICAgICAjIHJ1biBmb3JrLXNlcnZlcnMsIHdoaWNoIG1ha2VzIHRoZSBzZXJ2ZXIgZm9yayBmb3IgYWxsIG5ldworICAgICAgICAjIGNvbm5lY3Rpb25zIFRoaXMgaXMgTk9UIHdoYXQgeW91IHdhbm5hIGRvIHdpdGhvdXQga25vd2luZyBleGFjdGx5CisgICAgICAgICMgd2h5IGFuZCBmb3Igd2hhdAorICAgICAgICAkZm9ya3NlcnZlcj0xOworICAgIH0KKyAgICBlbHNpZiAoJEFSR1ZbMF0gZXEgIi1nIikgeworICAgICAgICAjIHJ1biB0aGlzIHRlc3Qgd2l0aCBnZGIKKyAgICAgICAgJGdkYnRoaXM9MTsKKyAgICB9CisgICAgZWxzaWYgKCRBUkdWWzBdIGVxICItZ3ciKSB7CisgICAgICAgICMgcnVuIHRoaXMgdGVzdCB3aXRoIHdpbmRvd2VkIGdkYgorICAgICAgICAkZ2RidGhpcz0xOworICAgICAgICAkZ2RieHdpbj0xOworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAiLXMiKSB7CisgICAgICAgICMgc2hvcnQgb3V0cHV0CisgICAgICAgICRzaG9ydD0xOworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAiLW4iKSB7CisgICAgICAgICMgbm8gdmFsZ3JpbmQKKyAgICAgICAgdW5kZWYgJHZhbGdyaW5kOworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSA9fiAvXi10KC4qKS8pIHsKKyAgICAgICAgIyB0b3J0dXJlCisgICAgICAgICR0b3J0dXJlPTE7CisgICAgICAgIG15ICR4dHJhID0gJDE7CisKKyAgICAgICAgaWYoJHh0cmEgPX4gcy8oXGQrKSQvLykgeworICAgICAgICAgICAgJHRvcnRhbGxvYyA9ICQxOworICAgICAgICB9CisgICAgICAgICMgd2UgdW5kZWYgdmFsZ3JpbmQgdG8gbWFrZSB0aGlzIGZseSBpbiBjb21wYXJpc29uCisgICAgICAgIHVuZGVmICR2YWxncmluZDsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgIi1hIikgeworICAgICAgICAjIGNvbnRpbnVlIGFueXdheSwgZXZlbiBpZiBhIHRlc3QgZmFpbAorICAgICAgICAkYW55d2F5PTE7CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICItcCIpIHsKKyAgICAgICAgJHBvc3Rtb3J0ZW09MTsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgIi1sIikgeworICAgICAgICAjIGxpc3RzIHRoZSB0ZXN0IGNhc2UgbmFtZXMgb25seQorICAgICAgICAkbGlzdG9ubHk9MTsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgIi1rIikgeworICAgICAgICAjIGtlZXAgc3Rkb3V0IGFuZCBzdGRlcnIgZmlsZXMgYWZ0ZXIgdGVzdHMKKyAgICAgICAgJGtlZXBvdXRmaWxlcz0xOworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAiLXIiKSB7CisgICAgICAgICMgcnVuIHRpbWUgc3RhdGlzdGljcyBuZWVkcyBUaW1lOjpIaVJlcworICAgICAgICBpZigkVGltZTo6SGlSZXM6OlZFUlNJT04pIHsKKyAgICAgICAgICAgIGtleXMoJXRpbWVwcmVwaW5pKSA9IDEwMDA7CisgICAgICAgICAgICBrZXlzKCV0aW1lc3J2cmluaSkgPSAxMDAwOworICAgICAgICAgICAga2V5cygldGltZXNydnJlbmQpID0gMTAwMDsKKyAgICAgICAgICAgIGtleXMoJXRpbWV0b29saW5pKSA9IDEwMDA7CisgICAgICAgICAgICBrZXlzKCV0aW1ldG9vbGVuZCkgPSAxMDAwOworICAgICAgICAgICAga2V5cygldGltZXNydnJsb2cpID0gMTAwMDsKKyAgICAgICAgICAgIGtleXMoJXRpbWV2cmZ5ZW5kKSA9IDEwMDA7CisgICAgICAgICAgICAkdGltZXN0YXRzPTE7CisgICAgICAgICAgICAkZnVsbHN0YXRzPTA7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgIi1yZiIpIHsKKyAgICAgICAgIyBydW4gdGltZSBzdGF0aXN0aWNzIG5lZWRzIFRpbWU6OkhpUmVzCisgICAgICAgIGlmKCRUaW1lOjpIaVJlczo6VkVSU0lPTikgeworICAgICAgICAgICAga2V5cygldGltZXByZXBpbmkpID0gMTAwMDsKKyAgICAgICAgICAgIGtleXMoJXRpbWVzcnZyaW5pKSA9IDEwMDA7CisgICAgICAgICAgICBrZXlzKCV0aW1lc3J2cmVuZCkgPSAxMDAwOworICAgICAgICAgICAga2V5cygldGltZXRvb2xpbmkpID0gMTAwMDsKKyAgICAgICAgICAgIGtleXMoJXRpbWV0b29sZW5kKSA9IDEwMDA7CisgICAgICAgICAgICBrZXlzKCV0aW1lc3J2cmxvZykgPSAxMDAwOworICAgICAgICAgICAga2V5cygldGltZXZyZnllbmQpID0gMTAwMDsKKyAgICAgICAgICAgICR0aW1lc3RhdHM9MTsKKyAgICAgICAgICAgICRmdWxsc3RhdHM9MTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZigoJEFSR1ZbMF0gZXEgIi1oIikgfHwgKCRBUkdWWzBdIGVxICItLWhlbHAiKSkgeworICAgICAgICAjIHNob3cgaGVscCB0ZXh0CisgICAgICAgIHByaW50IDw8RU9IRUxQCitVc2FnZTogcnVudGVzdHMucGwgW29wdGlvbnNdIFt0ZXN0IHNlbGVjdGlvbihzKV0KKyAgLWEgICAgICAgY29udGludWUgZXZlbiBpZiBhIHRlc3QgZmFpbHMKKyAgLWJOICAgICAgdXNlIGJhc2UgcG9ydCBudW1iZXIgTiBmb3IgdGVzdCBzZXJ2ZXJzIChkZWZhdWx0ICRiYXNlKQorICAtYyBwYXRoICB1c2UgdGhpcyBjdXJsIGV4ZWN1dGFibGUKKyAgLWQgICAgICAgZGlzcGxheSBzZXJ2ZXIgZGVidWcgaW5mbworICAtZyAgICAgICBydW4gdGhlIHRlc3QgY2FzZSB3aXRoIGdkYgorICAtZ3cgICAgICBydW4gdGhlIHRlc3QgY2FzZSB3aXRoIGdkYiBhcyBhIHdpbmRvd2VkIGFwcGxpY2F0aW9uCisgIC1oICAgICAgIHRoaXMgaGVscCB0ZXh0CisgIC1rICAgICAgIGtlZXAgc3Rkb3V0IGFuZCBzdGRlcnIgZmlsZXMgcHJlc2VudCBhZnRlciB0ZXN0cworICAtbCAgICAgICBsaXN0IGFsbCB0ZXN0IGNhc2UgbmFtZXMvZGVzY3JpcHRpb25zCisgIC1uICAgICAgIG5vIHZhbGdyaW5kCisgIC1wICAgICAgIHByaW50IGxvZyBmaWxlIGNvbnRlbnRzIHdoZW4gYSB0ZXN0IGZhaWxzCisgIC1yICAgICAgIHJ1biB0aW1lIHN0YXRpc3RpY3MKKyAgLXJmICAgICAgZnVsbCBydW4gdGltZSBzdGF0aXN0aWNzCisgIC1zICAgICAgIHNob3J0IG91dHB1dAorICAtdFtOXSAgICB0b3J0dXJlIChzaW11bGF0ZSBtZW1vcnkgYWxsb2MgZmFpbHVyZXMpOyBOIG1lYW5zIGZhaWwgTnRoIGFsbG9jCisgIC12ICAgICAgIHZlcmJvc2Ugb3V0cHV0CisgIFtudW1dICAgIGxpa2UgIjUgNiA5IiBvciAiIDUgdG8gMjIgIiB0byBydW4gdGhvc2UgdGVzdHMgb25seQorICBbIW51bV0gICBsaWtlICIhNSAhNiAhOSIgdG8gZGlzYWJsZSB0aG9zZSB0ZXN0cworICBba2V5d29yZF0gbGlrZSAiSVB2NiIgdG8gc2VsZWN0IG9ubHkgdGVzdHMgY29udGFpbmluZyB0aGUga2V5IHdvcmQKKyAgWyFrZXl3b3JkXSBsaWtlICIhY29va2llcyIgdG8gZGlzYWJsZSBhbnkgdGVzdHMgY29udGFpbmluZyB0aGUga2V5IHdvcmQKK0VPSEVMUAorICAgIDsKKyAgICAgICAgZXhpdDsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gPX4gL14oXGQrKS8pIHsKKyAgICAgICAgJG51bWJlciA9ICQxOworICAgICAgICBpZigkZnJvbW51bSA+PSAwKSB7CisgICAgICAgICAgICBmb3IoJGZyb21udW0gLi4gJG51bWJlcikgeworICAgICAgICAgICAgICAgIHB1c2ggQHRlc3R0aGlzLCAkXzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICRmcm9tbnVtID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwdXNoIEB0ZXN0dGhpcywgJDE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gPX4gL150byQvaSkgeworICAgICAgICAkZnJvbW51bSA9ICRudW1iZXIrMTsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gPX4gL14hKFxkKykvKSB7CisgICAgICAgICRmcm9tbnVtID0gLTE7CisgICAgICAgICRkaXNhYmxlZHskMX09JDE7CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdID1+IC9eISguKykvKSB7CisgICAgICAgICRkaXNhYmxlZF9rZXl3b3Jkc3skMX09JDE7CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdID1+IC9eKFstW3thLXpBLVpdLiopLykgeworICAgICAgICAkZW5hYmxlZF9rZXl3b3Jkc3skMX09JDE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwcmludCAiVW5rbm93biBvcHRpb246ICRBUkdWWzBdXG4iOworICAgICAgICBleGl0OworICAgIH0KKyAgICBzaGlmdCBAQVJHVjsKK30KKworaWYoQHRlc3R0aGlzICYmICgkdGVzdHRoaXNbMF0gbmUgIiIpKSB7CisgICAgJFRFU1RDQVNFUz1qb2luKCIgIiwgQHRlc3R0aGlzKTsKK30KKworaWYoJHZhbGdyaW5kKSB7CisgICAgIyB3ZSBoYXZlIGZvdW5kIHZhbGdyaW5kIG9uIHRoZSBob3N0LCB1c2UgaXQKKworICAgICMgdmVyaWZ5IHRoYXQgd2UgY2FuIGludm9rZSBpdCBmaW5lCisgICAgbXkgJGNvZGUgPSBydW5jbGllbnQoInZhbGdyaW5kID4vZGV2L251bGwgMj4mMSIpOworCisgICAgaWYoKCRjb2RlPj44KSAhPSAxKSB7CisgICAgICAgICNsb2dtc2cgIlZhbGdyaW5kIGZhaWx1cmUsIGRpc2FibGUgaXRcbiI7CisgICAgICAgIHVuZGVmICR2YWxncmluZDsKKyAgICB9IGVsc2UgeworCisgICAgICAgICMgc2luY2UgdmFsZ3JpbmQgMi4xLngsICctLXRvb2wnIG9wdGlvbiBpcyBtYW5kYXRvcnkKKyAgICAgICAgIyB1c2UgaXQsIGlmIGl0IGlzIHN1cHBvcnRlZCBieSB0aGUgdmVyc2lvbiBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbQorICAgICAgICBydW5jbGllbnQoInZhbGdyaW5kIC0taGVscCAyPiYxIHwgZ3JlcCAtLSAtLXRvb2wgPiAvZGV2L251bGwgMj4mMSIpOworICAgICAgICBpZiAoKCQ/ID4+IDgpPT0wKSB7CisgICAgICAgICAgICAkdmFsZ3JpbmRfdG9vbD0iLS10b29sPW1lbWNoZWNrIjsKKyAgICAgICAgfQorICAgICAgICBvcGVuKEMsICI8JENVUkwiKTsKKyAgICAgICAgbXkgJGwgPSA8Qz47CisgICAgICAgIGlmKCRsID1+IC9eXCNcIS8pIHsKKyAgICAgICAgICAgICMgQSBzaGVsbCBzY3JpcHQuIFRoaXMgaXMgdHlwaWNhbGx5IHdoZW4gYnVpbHQgd2l0aCBsaWJ0b29sLAorICAgICAgICAgICAgJHZhbGdyaW5kPSIuLi9saWJ0b29sIC0tbW9kZT1leGVjdXRlICR2YWxncmluZCI7CisgICAgICAgIH0KKyAgICAgICAgY2xvc2UoQyk7CisKKyAgICAgICAgIyB2YWxncmluZCAzIHJlbmFtZWQgdGhlIC0tbG9nZmlsZSBvcHRpb24gdG8gLS1sb2ctZmlsZSEhIQorICAgICAgICBteSAkdmVyPWpvaW4oJyAnLCBydW5jbGllbnRvdXRwdXQoInZhbGdyaW5kIC0tdmVyc2lvbiIpKTsKKyAgICAgICAgIyBjdXQgb2ZmIGFsbCBidXQgZGlnaXRzIGFuZCBkb3RzCisgICAgICAgICR2ZXIgPX4gcy9bXjAtOS5dLy9nOworCisgICAgICAgIGlmKCR2ZXIgPX4gL14oXGQrKS8pIHsKKyAgICAgICAgICAgICR2ZXIgPSAkMTsKKyAgICAgICAgICAgIGlmKCR2ZXIgPj0gMykgeworICAgICAgICAgICAgICAgICR2YWxncmluZF9sb2dmaWxlPSItLWxvZy1maWxlIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworaWYgKCRnZGJ0aGlzKSB7CisgICAgIyBvcGVuIHRoZSBleGVjdXRhYmxlIGN1cmwgYW5kIHJlYWQgdGhlIGZpcnN0IDQgYnl0ZXMgb2YgaXQKKyAgICBvcGVuKENIRUNLLCAiPCRDVVJMIik7CisgICAgbXkgJGM7CisgICAgc3lzcmVhZCBDSEVDSywgJGMsIDQ7CisgICAgY2xvc2UoQ0hFQ0spOworICAgIGlmKCRjIGVxICIjISAvIikgeworICAgICAgICAjIEEgc2hlbGwgc2NyaXB0LiBUaGlzIGlzIHR5cGljYWxseSB3aGVuIGJ1aWx0IHdpdGggbGlidG9vbCwKKyAgICAgICAgJGxpYnRvb2wgPSAxOworICAgICAgICAkZ2RiID0gImxpYnRvb2wgLS1tb2RlPWV4ZWN1dGUgZ2RiIjsKKyAgICB9Cit9CisKKyRIVFRQUE9SVCAgICAgICAgPSAkYmFzZSsrOyAjIEhUVFAgc2VydmVyIHBvcnQKKyRIVFRQU1BPUlQgICAgICAgPSAkYmFzZSsrOyAjIEhUVFBTIChzdHVubmVsKSBzZXJ2ZXIgcG9ydAorJEZUUFBPUlQgICAgICAgICA9ICRiYXNlKys7ICMgRlRQIHNlcnZlciBwb3J0CiskRlRQU1BPUlQgICAgICAgID0gJGJhc2UrKzsgIyBGVFBTIChzdHVubmVsKSBzZXJ2ZXIgcG9ydAorJEhUVFA2UE9SVCAgICAgICA9ICRiYXNlKys7ICMgSFRUUCBJUHY2IHNlcnZlciBwb3J0CiskRlRQMlBPUlQgICAgICAgID0gJGJhc2UrKzsgIyBGVFAgc2VydmVyIDIgcG9ydAorJEZUUDZQT1JUICAgICAgICA9ICRiYXNlKys7ICMgRlRQIElQdjYgcG9ydAorJFRGVFBQT1JUICAgICAgICA9ICRiYXNlKys7ICMgVEZUUCAoVURQKSBwb3J0CiskVEZUUDZQT1JUICAgICAgID0gJGJhc2UrKzsgIyBURlRQIElQdjYgKFVEUCkgcG9ydAorJFNTSFBPUlQgICAgICAgICA9ICRiYXNlKys7ICMgU1NIIChTQ1AvU0ZUUCkgcG9ydAorJFNPQ0tTUE9SVCAgICAgICA9ICRiYXNlKys7ICMgU09DS1MgcG9ydAorJFBPUDNQT1JUICAgICAgICA9ICRiYXNlKys7ICMgUE9QMyBzZXJ2ZXIgcG9ydAorJFBPUDM2UE9SVCAgICAgICA9ICRiYXNlKys7ICMgUE9QMyBJUHY2IHNlcnZlciBwb3J0CiskSU1BUFBPUlQgICAgICAgID0gJGJhc2UrKzsgIyBJTUFQIHNlcnZlciBwb3J0CiskSU1BUDZQT1JUICAgICAgID0gJGJhc2UrKzsgIyBJTUFQIElQdjYgc2VydmVyIHBvcnQKKyRTTVRQUE9SVCAgICAgICAgPSAkYmFzZSsrOyAjIFNNVFAgc2VydmVyIHBvcnQKKyRTTVRQNlBPUlQgICAgICAgPSAkYmFzZSsrOyAjIFNNVFAgSVB2NiBzZXJ2ZXIgcG9ydAorJFJUU1BQT1JUICAgICAgICA9ICRiYXNlKys7ICMgUlRTUCBzZXJ2ZXIgcG9ydAorJFJUU1A2UE9SVCAgICAgICA9ICRiYXNlKys7ICMgUlRTUCBJUHY2IHNlcnZlciBwb3J0CiskR09QSEVSUE9SVCAgICAgID0gJGJhc2UrKzsgIyBHb3BoZXIgSVB2NCBzZXJ2ZXIgcG9ydAorJEdPUEhFUjZQT1JUICAgICA9ICRiYXNlKys7ICMgR29waGVyIElQdjYgc2VydmVyIHBvcnQKKyRIVFRQVExTUE9SVCAgICAgPSAkYmFzZSsrOyAjIEhUVFAgVExTIChub24tc3R1bm5lbCkgc2VydmVyIHBvcnQKKyRIVFRQVExTNlBPUlQgICAgPSAkYmFzZSsrOyAjIEhUVFAgVExTIChub24tc3R1bm5lbCkgSVB2NiBzZXJ2ZXIgcG9ydAorJEhUVFBQUk9YWVBPUlQgICA9ICRiYXNlKys7ICMgSFRUUCBwcm94eSBwb3J0LCB3aGVuIHVzaW5nIENPTk5FQ1QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgY2xlYXIgYW5kIGNyZWF0ZSBsb2dnaW5nIGRpcmVjdG9yeToKKyMKKworY2xlYXJkaXIoJExPR0RJUik7Citta2RpcigkTE9HRElSLCAwNzc3KTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgaW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcworIworCitnZXRfZGlzdHRlc3RzKCk7Citpbml0X3NlcnZlcnBpZGZpbGVfaGFzaCgpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPdXRwdXQgY3VybCB2ZXJzaW9uIGFuZCBob3N0IGluZm8gYmVpbmcgdGVzdGVkCisjCisKK2lmKCEkbGlzdG9ubHkpIHsKKyAgICBjaGVja3N5c3RlbSgpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBGZXRjaCBhbGwgZGlzYWJsZWQgdGVzdHMKKyMKKworb3BlbihELCAiPCRURVNURElSL0RJU0FCTEVEIik7Cit3aGlsZSg8RD4pIHsKKyAgICBpZigvXiAqXCMvKSB7CisgICAgICAgICMgYWxsb3cgY29tbWVudHMKKyAgICAgICAgbmV4dDsKKyAgICB9CisgICAgaWYoJF8gPX4gLyhcZCspLykgeworICAgICAgICAkZGlzYWJsZWR7JDF9PSQxOyAjIGRpc2FibGUgdGhpcyB0ZXN0IG51bWJlcgorICAgIH0KK30KK2Nsb3NlKEQpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJZiAnYWxsJyB0ZXN0cyBhcmUgcmVxdWVzdGVkLCBmaW5kIG91dCBhbGwgdGVzdCBudW1iZXJzCisjCisKK2lmICggJFRFU1RDQVNFUyBlcSAiYWxsIikgeworICAgICMgR2V0IGFsbCBjb21tYW5kcyBhbmQgZmluZCBvdXQgdGhlaXIgdGVzdCBudW1iZXJzCisgICAgb3BlbmRpcihESVIsICRURVNURElSKSB8fCBkaWUgImNhbid0IG9wZW5kaXIgJFRFU1RESVI6ICQhIjsKKyAgICBteSBAY21kcyA9IGdyZXAgeyAvXnRlc3QoWzAtOV0rKSQvICYmIC1mICIkVEVTVERJUi8kXyIgfSByZWFkZGlyKERJUik7CisgICAgY2xvc2VkaXIoRElSKTsKKworICAgICRURVNUQ0FTRVM9IiI7ICMgc3RhcnQgd2l0aCBubyB0ZXN0IGNhc2VzCisKKyAgICAjIGN1dCBvZmYgZXZlcnl0aGluZyBidXQgdGhlIGRpZ2l0cworICAgIGZvcihAY21kcykgeworICAgICAgICAkXyA9fiBzL1thLXpcL1wuXSovL2c7CisgICAgfQorICAgICMgc29ydCB0aGUgbnVtYmVycyBmcm9tIGxvdyB0byBoaWdoCisgICAgZm9yZWFjaCBteSAkbiAoc29ydCB7ICRhIDw9PiAkYiB9IEBjbWRzKSB7CisgICAgICAgIGlmKCRkaXNhYmxlZHskbn0pIHsKKyAgICAgICAgICAgICMgc2tpcCBkaXNhYmxlZCB0ZXN0IGNhc2VzCisgICAgICAgICAgICBteSAkd2h5ID0gImNvbmZpZ3VyZWQgYXMgRElTQUJMRUQiOworICAgICAgICAgICAgJHNraXBwZWQrKzsKKyAgICAgICAgICAgICRza2lwcGVkeyR3aHl9Kys7CisgICAgICAgICAgICAkdGVzdHN0YXRbJG5dPSR3aHk7ICMgc3RvcmUgcmVhc29uIGZvciB0aGlzIHRlc3QgY2FzZQorICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICAkVEVTVENBU0VTIC49ICIgJG4iOworICAgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU3RhcnQgdGhlIGNvbW1hbmQgbGluZSBsb2cKKyMKK29wZW4oQ01ETE9HLCAiPiRDVVJMTE9HIikgfHwKKyAgICBsb2dtc2cgImNhbid0IGxvZyBjb21tYW5kIGxpbmVzIHRvICRDVVJMTE9HXG4iOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIERpc3BsYXkgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBmaWxlLiAgTGluZSBlbmRpbmdzIGFyZSBjYW5vbmljYWxpemVkCisjIGFuZCBleGNlc3NpdmVseSBsb25nIGZpbGVzIGFyZSBlbGlkZWQKK3N1YiBkaXNwbGF5bG9nY29udGVudCB7CisgICAgbXkgKCRmaWxlKT1AXzsKKyAgICBpZihvcGVuKFNJTkdMRSwgIjwkZmlsZSIpKSB7CisgICAgICAgIG15ICRsaW5lY291bnQgPSAwOworICAgICAgICBteSAkdHJ1bmNhdGU7CisgICAgICAgIG15IEB0YWlsOworICAgICAgICB3aGlsZShteSAkc3RyaW5nID0gPFNJTkdMRT4pIHsKKyAgICAgICAgICAgICRzdHJpbmcgPX4gcy9cclxuL1xuL2c7CisgICAgICAgICAgICAkc3RyaW5nID1+IHMvW1xyXGZcMDMyXS9cbi9nOworICAgICAgICAgICAgJHN0cmluZyAuPSAiXG4iIHVubGVzcyAoJHN0cmluZyA9fiAvXG4kLyk7CisgICAgICAgICAgICAkc3RyaW5nID1+IHRyL1xuLy87CisgICAgICAgICAgICBmb3IgbXkgJGxpbmUgKHNwbGl0KCJcbiIsICRzdHJpbmcpKSB7CisgICAgICAgICAgICAgICAgJGxpbmUgPX4gcy9ccypcISQvLzsKKyAgICAgICAgICAgICAgICBpZiAoJHRydW5jYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2ggQHRhaWwsICIgJGxpbmVcbiI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nbXNnICIgJGxpbmVcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICRsaW5lY291bnQrKzsKKyAgICAgICAgICAgICAgICAkdHJ1bmNhdGUgPSAkbGluZWNvdW50ID4gMTAwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZihAdGFpbCkgeworICAgICAgICAgICAgbXkgJHRhaWxzaG93ID0gMjAwOworICAgICAgICAgICAgbXkgJHRhaWxza2lwID0gMDsKKyAgICAgICAgICAgIG15ICR0YWlsdG90YWwgPSBzY2FsYXIgQHRhaWw7CisgICAgICAgICAgICBpZigkdGFpbHRvdGFsID4gJHRhaWxzaG93KSB7CisgICAgICAgICAgICAgICAgJHRhaWxza2lwID0gJHRhaWx0b3RhbCAtICR0YWlsc2hvdzsKKyAgICAgICAgICAgICAgICBsb2dtc2cgIj09PSBGaWxlIHRvbyBsb25nOiAkdGFpbHNraXAgbGluZXMgb21pdHRlZCBoZXJlXG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yKCR0YWlsc2tpcCAuLiAkdGFpbHRvdGFsLTEpIHsKKyAgICAgICAgICAgICAgICBsb2dtc2cgIiR0YWlsWyRfXSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2xvc2UoU0lOR0xFKTsKKyAgICB9Cit9CisKK3N1YiBkaXNwbGF5bG9ncyB7CisgICAgbXkgKCR0ZXN0bnVtKT1AXzsKKyAgICBvcGVuZGlyKERJUiwgIiRMT0dESVIiKSB8fAorICAgICAgICBkaWUgImNhbid0IG9wZW4gZGlyOiAkISI7CisgICAgbXkgQGxvZ3MgPSByZWFkZGlyKERJUik7CisgICAgY2xvc2VkaXIoRElSKTsKKworICAgIGxvZ21zZyAiPT0gQ29udGVudHMgb2YgZmlsZXMgaW4gdGhlICRMT0dESVIvIGRpciBhZnRlciB0ZXN0ICR0ZXN0bnVtXG4iOworICAgIGZvcmVhY2ggbXkgJGxvZyAoc29ydCBAbG9ncykgeworICAgICAgICBpZigkbG9nID1+IC9cLihcLnwpJC8pIHsKKyAgICAgICAgICAgIG5leHQ7ICMgc2tpcCAiLiIgYW5kICIuLiIKKyAgICAgICAgfQorICAgICAgICBpZigkbG9nID1+IC9eXC5uZnMvKSB7CisgICAgICAgICAgICBuZXh0OyAjIHNraXAgIi5uZnMiCisgICAgICAgIH0KKyAgICAgICAgaWYoKCRsb2cgZXEgIm1lbWR1bXAiKSB8fCAoJGxvZyBlcSAiY29yZSIpKSB7CisgICAgICAgICAgICBuZXh0OyAjIHNraXAgIm1lbWR1bXAiIGFuZCAgImNvcmUiCisgICAgICAgIH0KKyAgICAgICAgaWYoKC1kICIkTE9HRElSLyRsb2ciKSB8fCAoISAtcyAiJExPR0RJUi8kbG9nIikpIHsKKyAgICAgICAgICAgIG5leHQ7ICMgc2tpcCBkaXJlY3RvcnkgYW5kIGVtcHR5IGZpbGVzCisgICAgICAgIH0KKyAgICAgICAgaWYoKCRsb2cgPX4gL15zdGRvdXRcZCsvKSAmJiAoJGxvZyAhfiAvXnN0ZG91dCR0ZXN0bnVtLykpIHsKKyAgICAgICAgICAgIG5leHQ7ICMgc2tpcCBzdGRvdXRObm4gb2Ygb3RoZXIgdGVzdHMKKyAgICAgICAgfQorICAgICAgICBpZigoJGxvZyA9fiAvXnN0ZGVyclxkKy8pICYmICgkbG9nICF+IC9ec3RkZXJyJHRlc3RudW0vKSkgeworICAgICAgICAgICAgbmV4dDsgIyBza2lwIHN0ZGVyck5ubiBvZiBvdGhlciB0ZXN0cworICAgICAgICB9CisgICAgICAgIGlmKCgkbG9nID1+IC9edXBsb2FkXGQrLykgJiYgKCRsb2cgIX4gL151cGxvYWQkdGVzdG51bS8pKSB7CisgICAgICAgICAgICBuZXh0OyAjIHNraXAgdXBsb2FkTm5uIG9mIG90aGVyIHRlc3RzCisgICAgICAgIH0KKyAgICAgICAgaWYoKCRsb2cgPX4gL15jdXJsXGQrXC5vdXQvKSAmJiAoJGxvZyAhfiAvXmN1cmwkdGVzdG51bVwub3V0LykpIHsKKyAgICAgICAgICAgIG5leHQ7ICMgc2tpcCBjdXJsTm5uLm91dCBvZiBvdGhlciB0ZXN0cworICAgICAgICB9CisgICAgICAgIGlmKCgkbG9nID1+IC9edGVzdFxkK1wudHh0LykgJiYgKCRsb2cgIX4gL150ZXN0JHRlc3RudW1cLnR4dC8pKSB7CisgICAgICAgICAgICBuZXh0OyAjIHNraXAgdGVzdE5ubi50eHQgb2Ygb3RoZXIgdGVzdHMKKyAgICAgICAgfQorICAgICAgICBpZigoJGxvZyA9fiAvXmZpbGVcZCtcLnR4dC8pICYmICgkbG9nICF+IC9eZmlsZSR0ZXN0bnVtXC50eHQvKSkgeworICAgICAgICAgICAgbmV4dDsgIyBza2lwIGZpbGVObm4udHh0IG9mIG90aGVyIHRlc3RzCisgICAgICAgIH0KKyAgICAgICAgaWYoKCRsb2cgPX4gL15uZXRyY1xkKy8pICYmICgkbG9nICF+IC9ebmV0cmMkdGVzdG51bS8pKSB7CisgICAgICAgICAgICBuZXh0OyAjIHNraXAgbmV0cmNObm4gb2Ygb3RoZXIgdGVzdHMKKyAgICAgICAgfQorICAgICAgICBpZigoJGxvZyA9fiAvXnRyYWNlXGQrLykgJiYgKCRsb2cgIX4gL150cmFjZSR0ZXN0bnVtLykpIHsKKyAgICAgICAgICAgIG5leHQ7ICMgc2tpcCB0cmFjZU5ubiBvZiBvdGhlciB0ZXN0cworICAgICAgICB9CisgICAgICAgIGlmKCgkbG9nID1+IC9edmFsZ3JpbmRcZCsvKSAmJiAoJGxvZyAhfiAvXnZhbGdyaW5kJHRlc3RudW0oXC4uKnwpJC8pKSB7CisgICAgICAgICAgICBuZXh0OyAjIHNraXAgdmFsZ3JpbmRObm4gb2Ygb3RoZXIgdGVzdHMKKyAgICAgICAgfQorICAgICAgICBsb2dtc2cgIj09PSBTdGFydCBvZiBmaWxlICRsb2dcbiI7CisgICAgICAgIGRpc3BsYXlsb2djb250ZW50KCIkTE9HRElSLyRsb2ciKTsKKyAgICAgICAgbG9nbXNnICI9PT0gRW5kIG9mIGZpbGUgJGxvZ1xuIjsKKyAgICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSBtYWluIHRlc3QtbG9vcAorIworCitteSAkZmFpbGVkOworbXkgJHRlc3RudW07CitteSAkb2s9MDsKK215ICR0b3RhbD0wOworbXkgJGxhc3R0ZXN0PTA7CitteSBAYXQgPSBzcGxpdCgiICIsICRURVNUQ0FTRVMpOworbXkgJGNvdW50PTA7CisKKyRzdGFydCA9IHRpbWUoKTsKKworZm9yZWFjaCAkdGVzdG51bSAoQGF0KSB7CisKKyAgICAkbGFzdHRlc3QgPSAkdGVzdG51bSBpZigkdGVzdG51bSA+ICRsYXN0dGVzdCk7CisgICAgJGNvdW50Kys7CisKKyAgICBteSAkZXJyb3IgPSBzaW5nbGV0ZXN0KCR0ZXN0bnVtLCAkY291bnQsIHNjYWxhcihAYXQpKTsKKyAgICBpZigkZXJyb3IgPCAwKSB7CisgICAgICAgICMgbm90IGEgdGVzdCB3ZSBjYW4gcnVuCisgICAgICAgIG5leHQ7CisgICAgfQorCisgICAgJHRvdGFsKys7ICMgbnVtYmVyIG9mIHRlc3RzIHdlJ3ZlIHJ1bgorCisgICAgaWYoJGVycm9yPjApIHsKKyAgICAgICAgJGZhaWxlZC49ICIkdGVzdG51bSAiOworICAgICAgICBpZigkcG9zdG1vcnRlbSkgeworICAgICAgICAgICAgIyBkaXNwbGF5IGFsbCBmaWxlcyBpbiBsb2cvIGluIGEgbmljZSB3YXkKKyAgICAgICAgICAgIGRpc3BsYXlsb2dzKCR0ZXN0bnVtKTsKKyAgICAgICAgfQorICAgICAgICBpZighJGFueXdheSkgeworICAgICAgICAgICAgIyBhIHRlc3QgZmFpbGVkLCBhYm9ydAorICAgICAgICAgICAgbG9nbXNnICJcbiAtIGFib3J0IHRlc3RzXG4iOworICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZighJGVycm9yKSB7CisgICAgICAgICRvaysrOyAjIHN1Y2Nlc3NmdWwgdGVzdCBjb3VudGVyCisgICAgfQorCisgICAgIyBsb29wIGZvciBuZXh0IHRlc3QKK30KKworbXkgJHNvZmFyID0gdGltZSgpIC0gJHN0YXJ0OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDbG9zZSBjb21tYW5kIGxvZworIworY2xvc2UoQ01ETE9HKTsKKworIyBUZXN0cyBkb25lLCBzdG9wIHRoZSBzZXJ2ZXJzCitzdG9wc2VydmVycygkdmVyYm9zZSk7CisKK215ICRhbGwgPSAkdG90YWwgKyAkc2tpcHBlZDsKKworcnVudGltZXN0YXRzKCRsYXN0dGVzdCk7CisKK2lmKCR0b3RhbCkgeworICAgIGxvZ21zZyBzcHJpbnRmKCJURVNURE9ORTogJG9rIHRlc3RzIG91dCBvZiAkdG90YWwgcmVwb3J0ZWQgT0s6ICVkJSVcbiIsCisgICAgICAgICAgICAgICAgICAgJG9rLyR0b3RhbCoxMDApOworCisgICAgaWYoJG9rICE9ICR0b3RhbCkgeworICAgICAgICBsb2dtc2cgIlRFU1RGQUlMOiBUaGVzZSB0ZXN0IGNhc2VzIGZhaWxlZDogJGZhaWxlZFxuIjsKKyAgICB9Cit9CitlbHNlIHsKKyAgICBsb2dtc2cgIlRFU1RGQUlMOiBObyB0ZXN0cyB3ZXJlIHBlcmZvcm1lZFxuIjsKK30KKworaWYoJGFsbCkgeworICAgIGxvZ21zZyAiVEVTVERPTkU6ICRhbGwgdGVzdHMgd2VyZSBjb25zaWRlcmVkIGR1cmluZyAiLgorICAgICAgICBzcHJpbnRmKCIlLjBmIiwgJHNvZmFyKSAuIiBzZWNvbmRzLlxuIjsKK30KKworaWYoJHNraXBwZWQgJiYgISRzaG9ydCkgeworICAgIG15ICRzPTA7CisgICAgbG9nbXNnICJURVNUSU5GTzogJHNraXBwZWQgdGVzdHMgd2VyZSBza2lwcGVkIGR1ZSB0byB0aGVzZSByZXN0cmFpbnRzOlxuIjsKKworICAgIGZvcihrZXlzICVza2lwcGVkKSB7CisgICAgICAgIG15ICRyID0gJF87CisgICAgICAgIHByaW50ZiAiVEVTVElORk86IFwiJXNcIiAlZCB0aW1lcyAoIiwgJHIsICRza2lwcGVkeyRffTsKKworICAgICAgICAjIG5vdyBzaG93IGFsbCB0ZXN0IGNhc2UgbnVtYmVycyB0aGF0IGhhZCB0aGlzIHJlYXNvbiBmb3IgYmVpbmcKKyAgICAgICAgIyBza2lwcGVkCisgICAgICAgIG15ICRjPTA7CisgICAgICAgIGZvcigwIC4uIHNjYWxhciBAdGVzdHN0YXQpIHsKKyAgICAgICAgICAgIG15ICR0ID0gJF87CisgICAgICAgICAgICBpZigkdGVzdHN0YXRbJF9dICYmICgkdGVzdHN0YXRbJF9dIGVxICRyKSkgeworICAgICAgICAgICAgICAgIGxvZ21zZyAiLCAiIGlmKCRjKTsKKyAgICAgICAgICAgICAgICBsb2dtc2cgJF87CisgICAgICAgICAgICAgICAgJGMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsb2dtc2cgIilcbiI7CisgICAgfQorfQorCitpZigkdG90YWwgJiYgKCRvayAhPSAkdG90YWwpKSB7CisgICAgZXhpdCAxOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvc2VjdXJlc2VydmVyLnBsIGIvY3VybC03LjI1LjAvdGVzdHMvc2VjdXJlc2VydmVyLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2NGZhODQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9zZWN1cmVzZXJ2ZXIucGwKQEAgLTAsMCArMSwyOTggQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIyBUaGlzIGlzIHRoZSBIVFRQUywgRlRQUywgUE9QM1MsIElNQVBTLCBTTVRQUywgc2VydmVyIHVzZWQgZm9yIGN1cmwgdGVzdAorIyBoYXJuZXNzLiBBY3R1YWxseSBqdXN0IGEgbGF5ZXIgdGhhdCBydW5zIHN0dW5uZWwgcHJvcGVybHkgdXNpbmcgdGhlCisjIG5vbi1zZWN1cmUgdGVzdCBoYXJuZXNzIHNlcnZlcnMuCisKK0JFR0lOIHsKKyAgICBASU5DPShASU5DLCAkRU5WeydzcmNkaXInfSwgJy4nKTsKK30KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBDd2Q7CisKK3VzZSBzZXJ2ZXJoZWxwIHF3KAorICAgIHNlcnZlcl9waWRmaWxlbmFtZQorICAgIHNlcnZlcl9sb2dmaWxlbmFtZQorICAgICk7CisKK215ICRzdHVubmVsID0gInN0dW5uZWwiOworCitteSAkdmVyYm9zZT0wOyAjIHNldCB0byAxIGZvciBkZWJ1Z2dpbmcKKworbXkgJGFjY2VwdF9wb3J0ID0gODk5MTsgIyBqdXN0IG91ciBkZWZhdWx0LCB3ZWlyZCBlbm91Z2gKK215ICR0YXJnZXRfcG9ydCA9IDg5OTk7ICMgZGVmYXVsdCB0ZXN0IGh0dHAtc2VydmVyIHBvcnQKKworbXkgJHN0dW5jZXJ0OworCitteSAkdmVyX21ham9yOworbXkgJHZlcl9taW5vcjsKK215ICRzdHVubmVsX3ZlcnNpb247CitteSAkc29ja2V0b3B0OworbXkgJGNtZDsKKworbXkgJHBpZGZpbGU7ICAgICAgICAgICMgc3R1bm5lbCBwaWQgZmlsZQorbXkgJGxvZ2ZpbGU7ICAgICAgICAgICMgc3R1bm5lbCBsb2cgZmlsZQorbXkgJGxvZ2xldmVsID0gNTsgICAgICMgc3R1bm5lbCBsb2cgbGV2ZWwKK215ICRpcHZudW0gPSA0OyAgICAgICAjIGRlZmF1bHQgSVAgdmVyc2lvbiBvZiBzdHVubmVsZWQgc2VydmVyCitteSAkaWRudW0gPSAxOyAgICAgICAgIyBkYWZhdWx0IHN0dW5uZWxlZCBzZXJ2ZXIgaW5zdGFuY2UgbnVtYmVyCitteSAkcHJvdG8gPSAnaHR0cHMnOyAgIyBkZWZhdWx0IHNlY3VyZSBzZXJ2ZXIgcHJvdG9jb2wKK215ICRjb25mZmlsZTsgICAgICAgICAjIHN0dW5uZWwgY29uZmlndXJhdGlvbiBmaWxlCitteSAkY2VydGZpbGU7ICAgICAgICAgIyBjZXJ0aWZpY2F0ZSBjaGFpbiBQRU0gZmlsZQorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIHN0dW5uZWwgcmVxdWlyZXMgZnVsbCBwYXRoIHNwZWNpZmljYXRpb24gZm9yIHNldmVyYWwgZmlsZXMuCisjCitteSAkcGF0aCAgID0gZ2V0Y3dkKCk7CitteSAkc3JjZGlyID0gJHBhdGg7CitteSAkbG9nZGlyID0gJHBhdGggLicvbG9nJzsKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBTaWduYWwgaGFuZGxlciB0byByZW1vdmUgb3VyIHN0dW5uZWwgNC4wMCBhbmQgbmV3ZXIgY29uZmlndXJhdGlvbiBmaWxlLgorIworc3ViIGV4aXRfc2lnbmFsX2hhbmRsZXIgeworICAgIG15ICRzaWduYW1lID0gc2hpZnQ7CisgICAgbG9jYWwgJCE7ICMgcHJlc2VydmUgZXJybm8KKyAgICBsb2NhbCAkPzsgIyBwcmVzZXJ2ZSBleGl0IHN0YXR1cworICAgIHVubGluaygkY29uZmZpbGUpIGlmKCRjb25mZmlsZSAmJiAoLWYgJGNvbmZmaWxlKSk7CisgICAgZXhpdDsKK30KKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBQcm9jZXNzIGNvbW1hbmQgbGluZSBvcHRpb25zCisjCit3aGlsZShAQVJHVikgeworICAgIGlmKCRBUkdWWzBdIGVxICctLXZlcmJvc2UnKSB7CisgICAgICAgICR2ZXJib3NlID0gMTsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tcHJvdG8nKSB7CisgICAgICAgIGlmKCRBUkdWWzFdKSB7CisgICAgICAgICAgICAkcHJvdG8gPSAkQVJHVlsxXTsKKyAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLWFjY2VwdCcpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgIGlmKCRBUkdWWzFdID1+IC9eKFxkKykkLykgeworICAgICAgICAgICAgICAgICRhY2NlcHRfcG9ydCA9ICQxOworICAgICAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLWNvbm5lY3QnKSB7CisgICAgICAgIGlmKCRBUkdWWzFdKSB7CisgICAgICAgICAgICBpZigkQVJHVlsxXSA9fiAvXihcZCspJC8pIHsKKyAgICAgICAgICAgICAgICAkdGFyZ2V0X3BvcnQgPSAkMTsKKyAgICAgICAgICAgICAgICBzaGlmdCBAQVJHVjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1zdHVubmVsJykgeworICAgICAgICBpZigkQVJHVlsxXSkgeworICAgICAgICAgICAgJHN0dW5uZWwgPSAkQVJHVlsxXTsKKyAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLXNyY2RpcicpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgICRzcmNkaXIgPSAkQVJHVlsxXTsKKyAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLWNlcnRmaWxlJykgeworICAgICAgICBpZigkQVJHVlsxXSkgeworICAgICAgICAgICAgJHN0dW5jZXJ0ID0gJEFSR1ZbMV07CisgICAgICAgICAgICBzaGlmdCBAQVJHVjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1pZCcpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgIGlmKCRBUkdWWzFdID1+IC9eKFxkKykkLykgeworICAgICAgICAgICAgICAgICRpZG51bSA9ICQxIGlmKCQxID4gMCk7CisgICAgICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0taXB2NCcpIHsKKyAgICAgICAgJGlwdm51bSA9IDQ7CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLWlwdjYnKSB7CisgICAgICAgICRpcHZudW0gPSA2OworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1waWRmaWxlJykgeworICAgICAgICBpZigkQVJHVlsxXSkgeworICAgICAgICAgICAgJHBpZGZpbGUgPSAiJHBhdGgvIi4gJEFSR1ZbMV07CisgICAgICAgICAgICBzaGlmdCBAQVJHVjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1sb2dmaWxlJykgeworICAgICAgICBpZigkQVJHVlsxXSkgeworICAgICAgICAgICAgJGxvZ2ZpbGUgPSAiJHBhdGgvIi4gJEFSR1ZbMV07CisgICAgICAgICAgICBzaGlmdCBAQVJHVjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgU1RERVJSICJcbldhcm5pbmc6IHNlY3VyZXNlcnZlci5wbCB1bmtub3duIHBhcmFtZXRlcjogJEFSR1ZbMF1cbiI7CisgICAgfQorICAgIHNoaWZ0IEBBUkdWOworfQorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEluaXRpYWxpemUgY29tbWFuZCBsaW5lIG9wdGlvbiBkZXBlbmRhbnQgdmFyaWFibGVzCisjCitpZighJHBpZGZpbGUpIHsKKyAgICAkcGlkZmlsZSA9ICIkcGF0aC8iLiBzZXJ2ZXJfcGlkZmlsZW5hbWUoJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworfQoraWYoISRsb2dmaWxlKSB7CisgICAgJGxvZ2ZpbGUgPSBzZXJ2ZXJfbG9nZmlsZW5hbWUoJGxvZ2RpciwgJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworfQorCiskY29uZmZpbGUgPSAiJHBhdGgvc3R1bm5lbC5jb25mIjsKKworJGNlcnRmaWxlID0gIiRzcmNkaXIvIi4gKCRzdHVuY2VydD8iY2VydHMvJHN0dW5jZXJ0Ijoic3R1bm5lbC5wZW0iKTsKKworbXkgJHNzbHRleHQgPSB1YygkcHJvdG8pIC4iIFNTTC9UTFM6IjsKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBGaW5kIG91dCB2ZXJzaW9uIGluZm8gZm9yIHRoZSBnaXZlbiBzdHVubmVsIGJpbmFyeQorIworZm9yZWFjaCBteSAkdmVyb3B0ICgoJy12ZXJzaW9uJywgJy1WJykpIHsKKyAgICBmb3JlYWNoIG15ICR2ZXJzdHIgKHF4KCRzdHVubmVsICR2ZXJvcHQgMj4mMSkpIHsKKyAgICAgICAgaWYoJHZlcnN0ciA9fiAvXnN0dW5uZWwgKFxkKylcLihcZCspIG9uIC8pIHsKKyAgICAgICAgICAgICR2ZXJfbWFqb3IgPSAkMTsKKyAgICAgICAgICAgICR2ZXJfbWlub3IgPSAkMjsKKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgbGFzdCBpZigkdmVyX21ham9yKTsKK30KK2lmKCghJHZlcl9tYWpvcikgfHwgKCEkdmVyX21pbm9yKSkgeworICAgIGlmKC14ICIkc3R1bm5lbCIgJiYgISAtZCAiJHN0dW5uZWwiKSB7CisgICAgICAgIHByaW50ICIkc3NsdGV4dCBVbmtub3duIHN0dW5uZWwgdmVyc2lvblxuIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHByaW50ICIkc3NsdGV4dCBObyBzdHVubmVsXG4iOworICAgIH0KKyAgICBleGl0IDE7Cit9Ciskc3R1bm5lbF92ZXJzaW9uID0gKDEwMCokdmVyX21ham9yKSArICR2ZXJfbWlub3I7CisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgVmVyaWZ5IG1pbmltbXVtIHN0dW5uZWwgcmVxdWlyZWQgdmVyc2lvbgorIworaWYoJHN0dW5uZWxfdmVyc2lvbiA8IDMxMCkgeworICAgIHByaW50ICIkc3NsdGV4dCBVbnN1cHBvcnRlZCBzdHVubmVsIHZlcnNpb24gJHZlcl9tYWpvci4kdmVyX21pbm9yXG4iOworICAgIGV4aXQgMTsKK30KKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBCdWlsZCBjb21tYW5kIHRvIGV4ZWN1dGUgZm9yIHN0dW5uZWwgMy5YIHZlcnNpb25zCisjCitpZigkc3R1bm5lbF92ZXJzaW9uIDwgNDAwKSB7CisgICAgaWYoJHN0dW5uZWxfdmVyc2lvbiA+PSAzMTkpIHsKKyAgICAgICAgJHNvY2tldG9wdCA9ICItTyBhOlNPX1JFVVNFQUREUj0xIjsKKyAgICB9CisgICAgJGNtZCAgPSAiJHN0dW5uZWwgLXAgJGNlcnRmaWxlIC1QICRwaWRmaWxlICI7CisgICAgJGNtZCAuPSAiLWQgJGFjY2VwdF9wb3J0IC1yICR0YXJnZXRfcG9ydCAtZiAtRCAkbG9nbGV2ZWwgIjsKKyAgICAkY21kIC49ICgkc29ja2V0b3B0KSA/ICIkc29ja2V0b3B0ICIgOiAiIjsKKyAgICAkY21kIC49ICI+JGxvZ2ZpbGUgMj4mMSI7CisgICAgaWYoJHZlcmJvc2UpIHsKKyAgICAgICAgcHJpbnQgdWMoJHByb3RvKSAuIiBzZXJ2ZXIgKHN0dW5uZWwgJHZlcl9tYWpvci4kdmVyX21pbm9yKVxuIjsKKyAgICAgICAgcHJpbnQgImNtZDogJGNtZFxuIjsKKyAgICAgICAgcHJpbnQgInBlbSBjZXJ0IGZpbGU6ICRjZXJ0ZmlsZVxuIjsKKyAgICAgICAgcHJpbnQgInBpZCBmaWxlOiAkcGlkZmlsZVxuIjsKKyAgICAgICAgcHJpbnQgImxvZyBmaWxlOiAkbG9nZmlsZVxuIjsKKyAgICAgICAgcHJpbnQgImxvZyBsZXZlbDogJGxvZ2xldmVsXG4iOworICAgICAgICBwcmludCAibGlzdGVuIG9uIHBvcnQ6ICRhY2NlcHRfcG9ydFxuIjsKKyAgICAgICAgcHJpbnQgImNvbm5lY3QgdG8gcG9ydDogJHRhcmdldF9wb3J0XG4iOworICAgIH0KK30KKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBCdWlsZCBjb21tYW5kIHRvIGV4ZWN1dGUgZm9yIHN0dW5uZWwgNC4wMCBhbmQgbmV3ZXIKKyMKK2lmKCRzdHVubmVsX3ZlcnNpb24gPj0gNDAwKSB7CisgICAgJHNvY2tldG9wdCA9ICJhOlNPX1JFVVNFQUREUj0xIjsKKyAgICAkY21kICA9ICIkc3R1bm5lbCAkY29uZmZpbGUgIjsKKyAgICAkY21kIC49ICI+JGxvZ2ZpbGUgMj4mMSI7CisgICAgIyBzZXR1cCBzaWduYWwgaGFuZGxlcgorICAgICRTSUd7SU5UfSA9IFwmZXhpdF9zaWduYWxfaGFuZGxlcjsKKyAgICAkU0lHe1RFUk19ID0gXCZleGl0X3NpZ25hbF9oYW5kbGVyOworICAgICMgc3R1bm5lbCBjb25maWd1cmF0aW9uIGZpbGUKKyAgICBpZihvcGVuKFNUVU5DT05GLCAiPiRjb25mZmlsZSIpKSB7CisJcHJpbnQgU1RVTkNPTkYgIgorCUNBcGF0aCA9ICRwYXRoCisJY2VydCA9ICRjZXJ0ZmlsZQorCXBpZCA9ICRwaWRmaWxlCisJZGVidWcgPSAkbG9nbGV2ZWwKKwlvdXRwdXQgPSAkbG9nZmlsZQorCXNvY2tldCA9ICRzb2NrZXRvcHQKKwlmb3JlZ3JvdW5kID0geWVzCisJCisJW2N1cmx0ZXN0XQorCWFjY2VwdCA9ICRhY2NlcHRfcG9ydAorCWNvbm5lY3QgPSAkdGFyZ2V0X3BvcnQKKwkiOworICAgICAgICBpZighY2xvc2UoU1RVTkNPTkYpKSB7CisgICAgICAgICAgICBwcmludCAiJHNzbHRleHQgRXJyb3IgY2xvc2luZyBmaWxlICRjb25mZmlsZVxuIjsKKyAgICAgICAgICAgIGV4aXQgMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgIiRzc2x0ZXh0IEVycm9yIHdyaXRpbmcgZmlsZSAkY29uZmZpbGVcbiI7CisgICAgICAgIGV4aXQgMTsKKyAgICB9CisgICAgaWYoJHZlcmJvc2UpIHsKKyAgICAgICAgcHJpbnQgdWMoJHByb3RvKSAuIiBzZXJ2ZXIgKHN0dW5uZWwgJHZlcl9tYWpvci4kdmVyX21pbm9yKVxuIjsKKyAgICAgICAgcHJpbnQgImNtZDogJGNtZFxuIjsKKyAgICAgICAgcHJpbnQgIkNBcGF0aCA9ICRwYXRoXG4iOworICAgICAgICBwcmludCAiY2VydCA9ICRjZXJ0ZmlsZVxuIjsKKyAgICAgICAgcHJpbnQgInBpZCA9ICRwaWRmaWxlXG4iOworICAgICAgICBwcmludCAiZGVidWcgPSAkbG9nbGV2ZWxcbiI7CisgICAgICAgIHByaW50ICJvdXRwdXQgPSAkbG9nZmlsZVxuIjsKKyAgICAgICAgcHJpbnQgInNvY2tldCA9ICRzb2NrZXRvcHRcbiI7CisgICAgICAgIHByaW50ICJmb3JlZ3JvdW5kID0geWVzXG4iOworICAgICAgICBwcmludCAiXG4iOworICAgICAgICBwcmludCAiW2N1cmx0ZXN0XVxuIjsKKyAgICAgICAgcHJpbnQgImFjY2VwdCA9ICRhY2NlcHRfcG9ydFxuIjsKKyAgICAgICAgcHJpbnQgImNvbm5lY3QgPSAkdGFyZ2V0X3BvcnRcbiI7CisgICAgfQorfQorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIFNldCBmaWxlIHBlcm1pc3Npb25zIG9uIGNlcnRpZmljYXRlIHBlbSBmaWxlLgorIworY2htb2QoMDYwMCwgJGNlcnRmaWxlKSBpZigtZiAkY2VydGZpbGUpOworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIFJ1biBzdHVubmVsLgorIworbXkgJHJjID0gc3lzdGVtKCRjbWQpOworCiskcmMgPj49IDg7CisKK3VubGluaygkY29uZmZpbGUpIGlmKCRjb25mZmlsZSAmJiAtZiAkY29uZmZpbGUpOworCitleGl0ICRyYzsKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9NYWtlZmlsZS5hbSBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGEzOTllCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNTcgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm9zdGRpbmMKKworIyBTcGVjaWZ5IG91ciBpbmNsdWRlIHBhdGhzIGhlcmUsIGFuZCBkbyBpdCByZWxhdGl2ZSB0byAkKHRvcF9zcmNkaXIpIGFuZAorIyAkKHRvcF9idWlsZGRpciksIHRvIGVuc3VyZSB0aGF0IHRoZXNlIHBhdGhzIHdoaWNoIGJlbG9uZyB0byB0aGUgbGlicmFyeQorIyBiZWluZyBjdXJyZW50bHkgYnVpbHQgYW5kIHRlc3RlZCBhcmUgc2VhcmNoZWQgYmVmb3JlIHRoZSBsaWJyYXJ5IHdoaWNoCisjIG1pZ2h0IHBvc3NpYmx5IGFscmVhZHkgYmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0uCisjCisjICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwgZm9yIGdlbmVyYXRlZCBjdXJsYnVpbGQuaCBpbmNsdWRlZCBmcm9tIGN1cmwuaAorIyAkKHRvcF9idWlsZGRpcikvaW5jbHVkZSBmb3IgZ2VuZXJhdGVkIGN1cmxidWlsZC5oIGluY2x1ZGVkIGZyb20gbGliL3NldHVwLmgKKyMgJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIGlzIGZvciBsaWJjdXJsJ3MgZXh0ZXJuYWwgaW5jbHVkZSBmaWxlcworIyAkKHRvcF9idWlsZGRpcikvbGliIGlzIGZvciBsaWJjdXJsJ3MgZ2VuZXJhdGVkIGxpYi9jdXJsX2NvbmZpZy5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS9saWIgaXMgZm9yIGxpYmN1cmwncyBsaWIvc2V0dXAuaCBhbmQgb3RoZXIgImJvcnJvd2VkIiBmaWxlcworIyAkKHRvcF9idWlsZGRpcikvYXJlcyBpcyBmb3IgaW4tdHJlZSBjLWFyZXMncyBnZW5lcmF0ZWQgYXJlc19idWlsZC5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS9hcmVzIGlzIGZvciBpbi10cmVlIGMtYXJlcydzIGV4dGVybmFsIGluY2x1ZGUgZmlsZXMKKworaWYgVVNFX0VNQkVEREVEX0FSRVMKK0lOQ0xVREVTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvbGliICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2xpYiAgICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvYXJlcyAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2FyZXMKK2Vsc2UKK0lOQ0xVREVTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvbGliICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2xpYgorZW5kaWYKKworIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgbmVhdCBkZWZpbml0aW9ucworaW5jbHVkZSBNYWtlZmlsZS5pbmMKKworRVhUUkFfRElTVCA9IGJhc2U2NC5wbCBNYWtlZmlsZS5pbmMKKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL01ha2VmaWxlLmluIGIvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YzA1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxOTE1IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK0lOU1RBTEwgPSBASU5TVEFMTEAKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCisJJChzcmNkaXIpL01ha2VmaWxlLmluYworbm9pbnN0X1BST0dSQU1TID0gZ2V0cGFydCQoRVhFRVhUKSByZXNvbHZlJChFWEVFWFQpIHJ0c3BkJChFWEVFWFQpIFwKKwlzb2NrZmlsdCQoRVhFRVhUKSBzd3MkKEVYRUVYVCkgdGZ0cGQkKEVYRUVYVCkgXAorCWZha2VfbnRsbSQoRVhFRVhUKQorc3ViZGlyID0gdGVzdHMvc2VydmVyCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbXBpbGVycy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWNvbmZvcHRzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtZnVuY3Rpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtb3BlbnNzbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW92ZXJyaWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtcmVlbnRyYW50Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2N1cmwtc3lzdGVtLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3hjLXRyYW5zbGl0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3p6NTAteGMtb3ZyLm00ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvc3JjL2N1cmxfY29uZmlnLmggXAorCSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQorYW1fX29iamVjdHNfMSA9IGZha2VfbnRsbS1tcHJpbnRmLiQoT0JKRVhUKSBcCisJZmFrZV9udGxtLW5vbmJsb2NrLiQoT0JKRVhUKSBmYWtlX250bG0tc3RyZXF1YWwuJChPQkpFWFQpIFwKKwlmYWtlX250bG0tc3RydG9vZmZ0LiQoT0JKRVhUKSBmYWtlX250bG0tdGltZXZhbC4kKE9CSkVYVCkgXAorCWZha2VfbnRsbS13YXJubGVzcy4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzIgPQorYW1fX29iamVjdHNfMyA9IGZha2VfbnRsbS1nZXRwYXJ0LiQoT0JKRVhUKSBmYWtlX250bG0tYmFzZTY0LiQoT0JKRVhUKSBcCisJZmFrZV9udGxtLW1lbWRlYnVnLiQoT0JKRVhUKQorYW1fX29iamVjdHNfNCA9IGZha2VfbnRsbS11dGlsLiQoT0JKRVhUKQorYW1fZmFrZV9udGxtX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgXAorCSQoYW1fX29iamVjdHNfMykgJChhbV9fb2JqZWN0c180KSBcCisJZmFrZV9udGxtLWZha2VfbnRsbS4kKE9CSkVYVCkKK2Zha2VfbnRsbV9PQkpFQ1RTID0gJChhbV9mYWtlX250bG1fT0JKRUNUUykKK2Zha2VfbnRsbV9ERVBFTkRFTkNJRVMgPQorYW1fX29iamVjdHNfNSA9IGdldHBhcnQtbXByaW50Zi4kKE9CSkVYVCkgZ2V0cGFydC1ub25ibG9jay4kKE9CSkVYVCkgXAorCWdldHBhcnQtc3RyZXF1YWwuJChPQkpFWFQpIGdldHBhcnQtc3RydG9vZmZ0LiQoT0JKRVhUKSBcCisJZ2V0cGFydC10aW1ldmFsLiQoT0JKRVhUKSBnZXRwYXJ0LXdhcm5sZXNzLiQoT0JKRVhUKQorYW1fX29iamVjdHNfNiA9IGdldHBhcnQtZ2V0cGFydC4kKE9CSkVYVCkgZ2V0cGFydC1iYXNlNjQuJChPQkpFWFQpIFwKKwlnZXRwYXJ0LW1lbWRlYnVnLiQoT0JKRVhUKQorYW1fZ2V0cGFydF9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c181KSAkKGFtX19vYmplY3RzXzIpIFwKKwkkKGFtX19vYmplY3RzXzYpIGdldHBhcnQtdGVzdHBhcnQuJChPQkpFWFQpCitnZXRwYXJ0X09CSkVDVFMgPSAkKGFtX2dldHBhcnRfT0JKRUNUUykKK2dldHBhcnRfREVQRU5ERU5DSUVTID0KK2FtX19vYmplY3RzXzcgPSByZXNvbHZlLW1wcmludGYuJChPQkpFWFQpIHJlc29sdmUtbm9uYmxvY2suJChPQkpFWFQpIFwKKwlyZXNvbHZlLXN0cmVxdWFsLiQoT0JKRVhUKSByZXNvbHZlLXN0cnRvb2ZmdC4kKE9CSkVYVCkgXAorCXJlc29sdmUtdGltZXZhbC4kKE9CSkVYVCkgcmVzb2x2ZS13YXJubGVzcy4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzggPSByZXNvbHZlLWdldHBhcnQuJChPQkpFWFQpIHJlc29sdmUtYmFzZTY0LiQoT0JKRVhUKSBcCisJcmVzb2x2ZS1tZW1kZWJ1Zy4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzkgPSByZXNvbHZlLXV0aWwuJChPQkpFWFQpCithbV9yZXNvbHZlX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzcpICQoYW1fX29iamVjdHNfMikgXAorCSQoYW1fX29iamVjdHNfOCkgJChhbV9fb2JqZWN0c185KSByZXNvbHZlLXJlc29sdmUuJChPQkpFWFQpCityZXNvbHZlX09CSkVDVFMgPSAkKGFtX3Jlc29sdmVfT0JKRUNUUykKK3Jlc29sdmVfREVQRU5ERU5DSUVTID0KK2FtX19vYmplY3RzXzEwID0gcnRzcGQtbXByaW50Zi4kKE9CSkVYVCkgcnRzcGQtbm9uYmxvY2suJChPQkpFWFQpIFwKKwlydHNwZC1zdHJlcXVhbC4kKE9CSkVYVCkgcnRzcGQtc3RydG9vZmZ0LiQoT0JKRVhUKSBcCisJcnRzcGQtdGltZXZhbC4kKE9CSkVYVCkgcnRzcGQtd2Fybmxlc3MuJChPQkpFWFQpCithbV9fb2JqZWN0c18xMSA9IHJ0c3BkLWdldHBhcnQuJChPQkpFWFQpIHJ0c3BkLWJhc2U2NC4kKE9CSkVYVCkgXAorCXJ0c3BkLW1lbWRlYnVnLiQoT0JKRVhUKQorYW1fX29iamVjdHNfMTIgPSBydHNwZC11dGlsLiQoT0JKRVhUKQorYW1fcnRzcGRfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMTApICQoYW1fX29iamVjdHNfMikgXAorCSQoYW1fX29iamVjdHNfMTEpICQoYW1fX29iamVjdHNfMTIpIHJ0c3BkLXJ0c3BkLiQoT0JKRVhUKQorcnRzcGRfT0JKRUNUUyA9ICQoYW1fcnRzcGRfT0JKRUNUUykKK3J0c3BkX0RFUEVOREVOQ0lFUyA9CithbV9fb2JqZWN0c18xMyA9IHNvY2tmaWx0LW1wcmludGYuJChPQkpFWFQpIFwKKwlzb2NrZmlsdC1ub25ibG9jay4kKE9CSkVYVCkgc29ja2ZpbHQtc3RyZXF1YWwuJChPQkpFWFQpIFwKKwlzb2NrZmlsdC1zdHJ0b29mZnQuJChPQkpFWFQpIHNvY2tmaWx0LXRpbWV2YWwuJChPQkpFWFQpIFwKKwlzb2NrZmlsdC13YXJubGVzcy4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzE0ID0gc29ja2ZpbHQtZ2V0cGFydC4kKE9CSkVYVCkgc29ja2ZpbHQtYmFzZTY0LiQoT0JKRVhUKSBcCisJc29ja2ZpbHQtbWVtZGVidWcuJChPQkpFWFQpCithbV9fb2JqZWN0c18xNSA9IHNvY2tmaWx0LXV0aWwuJChPQkpFWFQpCithbV9zb2NrZmlsdF9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c18xMykgJChhbV9fb2JqZWN0c18yKSBcCisJJChhbV9fb2JqZWN0c18xNCkgJChhbV9fb2JqZWN0c18xNSkgXAorCXNvY2tmaWx0LXNvY2tmaWx0LiQoT0JKRVhUKSBzb2NrZmlsdC1pbmV0X3B0b24uJChPQkpFWFQpCitzb2NrZmlsdF9PQkpFQ1RTID0gJChhbV9zb2NrZmlsdF9PQkpFQ1RTKQorc29ja2ZpbHRfREVQRU5ERU5DSUVTID0KK2FtX19vYmplY3RzXzE2ID0gc3dzLW1wcmludGYuJChPQkpFWFQpIHN3cy1ub25ibG9jay4kKE9CSkVYVCkgXAorCXN3cy1zdHJlcXVhbC4kKE9CSkVYVCkgc3dzLXN0cnRvb2ZmdC4kKE9CSkVYVCkgXAorCXN3cy10aW1ldmFsLiQoT0JKRVhUKSBzd3Mtd2Fybmxlc3MuJChPQkpFWFQpCithbV9fb2JqZWN0c18xNyA9IHN3cy1nZXRwYXJ0LiQoT0JKRVhUKSBzd3MtYmFzZTY0LiQoT0JKRVhUKSBcCisJc3dzLW1lbWRlYnVnLiQoT0JKRVhUKQorYW1fX29iamVjdHNfMTggPSBzd3MtdXRpbC4kKE9CSkVYVCkKK2FtX3N3c19PQkpFQ1RTID0gJChhbV9fb2JqZWN0c18xNikgJChhbV9fb2JqZWN0c18yKSAkKGFtX19vYmplY3RzXzE3KSBcCisJJChhbV9fb2JqZWN0c18xOCkgc3dzLXN3cy4kKE9CSkVYVCkgc3dzLWluZXRfcHRvbi4kKE9CSkVYVCkKK3N3c19PQkpFQ1RTID0gJChhbV9zd3NfT0JKRUNUUykKK3N3c19ERVBFTkRFTkNJRVMgPQorYW1fX29iamVjdHNfMTkgPSB0ZnRwZC1tcHJpbnRmLiQoT0JKRVhUKSB0ZnRwZC1ub25ibG9jay4kKE9CSkVYVCkgXAorCXRmdHBkLXN0cmVxdWFsLiQoT0JKRVhUKSB0ZnRwZC1zdHJ0b29mZnQuJChPQkpFWFQpIFwKKwl0ZnRwZC10aW1ldmFsLiQoT0JKRVhUKSB0ZnRwZC13YXJubGVzcy4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzIwID0gdGZ0cGQtZ2V0cGFydC4kKE9CSkVYVCkgdGZ0cGQtYmFzZTY0LiQoT0JKRVhUKSBcCisJdGZ0cGQtbWVtZGVidWcuJChPQkpFWFQpCithbV9fb2JqZWN0c18yMSA9IHRmdHBkLXV0aWwuJChPQkpFWFQpCithbV90ZnRwZF9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c18xOSkgJChhbV9fb2JqZWN0c18yKSBcCisJJChhbV9fb2JqZWN0c18yMCkgJChhbV9fb2JqZWN0c18yMSkgdGZ0cGQtdGZ0cGQuJChPQkpFWFQpCit0ZnRwZF9PQkpFQ1RTID0gJChhbV90ZnRwZF9PQkpFQ1RTKQordGZ0cGRfREVQRU5ERU5DSUVTID0KK0RFRkFVTFRfSU5DTFVERVMgPSAKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGZha2VfbnRsbV9TT1VSQ0VTKSAkKGdldHBhcnRfU09VUkNFUykgJChyZXNvbHZlX1NPVVJDRVMpIFwKKwkkKHJ0c3BkX1NPVVJDRVMpICQoc29ja2ZpbHRfU09VUkNFUykgJChzd3NfU09VUkNFUykgXAorCSQodGZ0cGRfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoZmFrZV9udGxtX1NPVVJDRVMpICQoZ2V0cGFydF9TT1VSQ0VTKSBcCisJJChyZXNvbHZlX1NPVVJDRVMpICQocnRzcGRfU09VUkNFUykgJChzb2NrZmlsdF9TT1VSQ0VTKSBcCisJJChzd3NfU09VUkNFUykgJCh0ZnRwZF9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRUAKK0JVSUxEX0xJQkhPU1ROQU1FX1RSVUUgPSBAQlVJTERfTElCSE9TVE5BTUVfVFJVRUAKK0JVSUxEX1VOSVRURVNUU19GQUxTRSA9IEBCVUlMRF9VTklUVEVTVFNfRkFMU0VACitCVUlMRF9VTklUVEVTVFNfVFJVRSA9IEBCVUlMRF9VTklUVEVTVFNfVFJVRUAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDT05GSUdVUkVfT1BUSU9OUyA9IEBDT05GSUdVUkVfT1BUSU9OU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NST1NTQ09NUElMSU5HX0ZBTFNFID0gQENST1NTQ09NUElMSU5HX0ZBTFNFQAorQ1JPU1NDT01QSUxJTkdfVFJVRSA9IEBDUk9TU0NPTVBJTElOR19UUlVFQAorQ1VSTERFQlVHX0ZBTFNFID0gQENVUkxERUJVR19GQUxTRUAKK0NVUkxERUJVR19UUlVFID0gQENVUkxERUJVR19UUlVFQAorQ1VSTFZFUlNJT04gPSBAQ1VSTFZFUlNJT05ACitDVVJMX0NBX0JVTkRMRSA9IEBDVVJMX0NBX0JVTkRMRUAKK0NVUkxfQ0ZMQUdfRVhUUkFTID0gQENVUkxfQ0ZMQUdfRVhUUkFTQAorQ1VSTF9ESVNBQkxFX0RJQ1QgPSBAQ1VSTF9ESVNBQkxFX0RJQ1RACitDVVJMX0RJU0FCTEVfRklMRSA9IEBDVVJMX0RJU0FCTEVfRklMRUAKK0NVUkxfRElTQUJMRV9GVFAgPSBAQ1VSTF9ESVNBQkxFX0ZUUEAKK0NVUkxfRElTQUJMRV9HT1BIRVIgPSBAQ1VSTF9ESVNBQkxFX0dPUEhFUkAKK0NVUkxfRElTQUJMRV9IVFRQID0gQENVUkxfRElTQUJMRV9IVFRQQAorQ1VSTF9ESVNBQkxFX0lNQVAgPSBAQ1VSTF9ESVNBQkxFX0lNQVBACitDVVJMX0RJU0FCTEVfTERBUCA9IEBDVVJMX0RJU0FCTEVfTERBUEAKK0NVUkxfRElTQUJMRV9MREFQUyA9IEBDVVJMX0RJU0FCTEVfTERBUFNACitDVVJMX0RJU0FCTEVfUE9QMyA9IEBDVVJMX0RJU0FCTEVfUE9QM0AKK0NVUkxfRElTQUJMRV9QUk9YWSA9IEBDVVJMX0RJU0FCTEVfUFJPWFlACitDVVJMX0RJU0FCTEVfUlRTUCA9IEBDVVJMX0RJU0FCTEVfUlRTUEAKK0NVUkxfRElTQUJMRV9TTVRQID0gQENVUkxfRElTQUJMRV9TTVRQQAorQ1VSTF9ESVNBQkxFX1RFTE5FVCA9IEBDVVJMX0RJU0FCTEVfVEVMTkVUQAorQ1VSTF9ESVNBQkxFX1RGVFAgPSBAQ1VSTF9ESVNBQkxFX1RGVFBACitDVVJMX0xJQlMgPSBAQ1VSTF9MSUJTQAorQ1VSTF9ORVRXT1JLX0xJQlMgPSBAQ1VSTF9ORVRXT1JLX0xJQlNACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU0hBUkVEID0gQEVOQUJMRV9TSEFSRURACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitIQVZFX0dOVVRMU19TUlAgPSBASEFWRV9HTlVUTFNfU1JQQAorSEFWRV9MREFQX1NTTCA9IEBIQVZFX0xEQVBfU1NMQAorSEFWRV9MSUJaID0gQEhBVkVfTElCWkAKK0hBVkVfTElCWl9GQUxTRSA9IEBIQVZFX0xJQlpfRkFMU0VACitIQVZFX0xJQlpfVFJVRSA9IEBIQVZFX0xJQlpfVFJVRUAKK0hBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUID0gQEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUQAorSEFWRV9TU0xFQVlfU1JQID0gQEhBVkVfU1NMRUFZX1NSUEAKK0lETl9FTkFCTEVEID0gQElETl9FTkFCTEVEQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJUFY2X0VOQUJMRUQgPSBASVBWNl9FTkFCTEVEQAorS1JCNF9FTkFCTEVEID0gQEtSQjRfRU5BQkxFREAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQ1VSTF9MSUJTID0gQExJQkNVUkxfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUFOT1BUID0gQE1BTk9QVEAKK01JTVBVUkVfRkFMU0UgPSBATUlNUFVSRV9GQUxTRUAKK01JTVBVUkVfVFJVRSA9IEBNSU1QVVJFX1RSVUVACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitOT19VTkRFRklORURfRkFMU0UgPSBATk9fVU5ERUZJTkVEX0ZBTFNFQAorTk9fVU5ERUZJTkVEX1RSVUUgPSBATk9fVU5ERUZJTkVEX1RSVUVACitOUk9GRiA9IEBOUk9GRkAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEggPSBAUEFUSEAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTCA9IEBQRVJMQAorUEtHQUREX05BTUUgPSBAUEtHQUREX05BTUVACitQS0dBRERfUEtHID0gQFBLR0FERF9QS0dACitQS0dBRERfVkVORE9SID0gQFBLR0FERF9WRU5ET1JACitQS0dDT05GSUcgPSBAUEtHQ09ORklHQAorUkFORE9NX0ZJTEUgPSBAUkFORE9NX0ZJTEVACitSQU5MSUIgPSBAUkFOTElCQAorUkVRVUlSRV9MSUJfREVQUyA9IEBSRVFVSVJFX0xJQl9ERVBTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTT05BTUVfQlVNUF9GQUxTRSA9IEBTT05BTUVfQlVNUF9GQUxTRUAKK1NPTkFNRV9CVU1QX1RSVUUgPSBAU09OQU1FX0JVTVBfVFJVRUAKK1NTTF9FTkFCTEVEID0gQFNTTF9FTkFCTEVEQAorU1RBVElDTElCX0ZBTFNFID0gQFNUQVRJQ0xJQl9GQUxTRUAKK1NUQVRJQ0xJQl9UUlVFID0gQFNUQVRJQ0xJQl9UUlVFQAorU1RSSVAgPSBAU1RSSVBACitTVVBQT1JUX0ZFQVRVUkVTID0gQFNVUFBPUlRfRkVBVFVSRVNACitTVVBQT1JUX1BST1RPQ09MUyA9IEBTVVBQT1JUX1BST1RPQ09MU0AKK1RFU1RfU0VSVkVSX0xJQlMgPSBAVEVTVF9TRVJWRVJfTElCU0AKK1VTRV9BUkVTID0gQFVTRV9BUkVTQAorVVNFX0FYVExTID0gQFVTRV9BWFRMU0AKK1VTRV9DWUFTU0wgPSBAVVNFX0NZQVNTTEAKK1VTRV9FTUJFRERFRF9BUkVTX0ZBTFNFID0gQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQAorVVNFX0VNQkVEREVEX0FSRVNfVFJVRSA9IEBVU0VfRU1CRURERURfQVJFU19UUlVFQAorVVNFX0dOVVRMUyA9IEBVU0VfR05VVExTQAorVVNFX0dOVVRMU19ORVRUTEUgPSBAVVNFX0dOVVRMU19ORVRUTEVACitVU0VfTElCUlRNUCA9IEBVU0VfTElCUlRNUEAKK1VTRV9MSUJTU0gyID0gQFVTRV9MSUJTU0gyQAorVVNFX01BTlVBTF9GQUxTRSA9IEBVU0VfTUFOVUFMX0ZBTFNFQAorVVNFX01BTlVBTF9UUlVFID0gQFVTRV9NQU5VQUxfVFJVRUAKK1VTRV9OU1MgPSBAVVNFX05TU0AKK1VTRV9PUEVOTERBUCA9IEBVU0VfT1BFTkxEQVBACitVU0VfUE9MQVJTU0wgPSBAVVNFX1BPTEFSU1NMQAorVVNFX1NTTEVBWSA9IEBVU0VfU1NMRUFZQAorVVNFX1dJTkRPV1NfU1NQSSA9IEBVU0VfV0lORE9XU19TU1BJQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVkVSU0lPTkVEX0ZMQVZPVVIgPSBAVkVSU0lPTkVEX0ZMQVZPVVJACitWRVJTSU9ORURfU1lNQk9MU19GQUxTRSA9IEBWRVJTSU9ORURfU1lNQk9MU19GQUxTRUAKK1ZFUlNJT05FRF9TWU1CT0xTX1RSVUUgPSBAVkVSU0lPTkVEX1NZTUJPTFNfVFJVRUAKK1ZFUlNJT05OVU0gPSBAVkVSU0lPTk5VTUAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpYmV4dCA9IEBsaWJleHRACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm9zdGRpbmMKK0BVU0VfRU1CRURERURfQVJFU19GQUxTRUBJTkNMVURFUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBcCitAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQCAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19GQUxTRUAgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2xpYiAgICAgICAgICBcCitAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvbGliCisKKworIyBTcGVjaWZ5IG91ciBpbmNsdWRlIHBhdGhzIGhlcmUsIGFuZCBkbyBpdCByZWxhdGl2ZSB0byAkKHRvcF9zcmNkaXIpIGFuZAorIyAkKHRvcF9idWlsZGRpciksIHRvIGVuc3VyZSB0aGF0IHRoZXNlIHBhdGhzIHdoaWNoIGJlbG9uZyB0byB0aGUgbGlicmFyeQorIyBiZWluZyBjdXJyZW50bHkgYnVpbHQgYW5kIHRlc3RlZCBhcmUgc2VhcmNoZWQgYmVmb3JlIHRoZSBsaWJyYXJ5IHdoaWNoCisjIG1pZ2h0IHBvc3NpYmx5IGFscmVhZHkgYmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0uCisjCisjICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwgZm9yIGdlbmVyYXRlZCBjdXJsYnVpbGQuaCBpbmNsdWRlZCBmcm9tIGN1cmwuaAorIyAkKHRvcF9idWlsZGRpcikvaW5jbHVkZSBmb3IgZ2VuZXJhdGVkIGN1cmxidWlsZC5oIGluY2x1ZGVkIGZyb20gbGliL3NldHVwLmgKKyMgJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIGlzIGZvciBsaWJjdXJsJ3MgZXh0ZXJuYWwgaW5jbHVkZSBmaWxlcworIyAkKHRvcF9idWlsZGRpcikvbGliIGlzIGZvciBsaWJjdXJsJ3MgZ2VuZXJhdGVkIGxpYi9jdXJsX2NvbmZpZy5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS9saWIgaXMgZm9yIGxpYmN1cmwncyBsaWIvc2V0dXAuaCBhbmQgb3RoZXIgImJvcnJvd2VkIiBmaWxlcworIyAkKHRvcF9idWlsZGRpcikvYXJlcyBpcyBmb3IgaW4tdHJlZSBjLWFyZXMncyBnZW5lcmF0ZWQgYXJlc19idWlsZC5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS9hcmVzIGlzIGZvciBpbi10cmVlIGMtYXJlcydzIGV4dGVybmFsIGluY2x1ZGUgZmlsZXMKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQElOQ0xVREVTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIFwKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQCAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQCAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQCAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvbGliICAgICAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQCAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2xpYiAgICAgICAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQCAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvYXJlcyAgICAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19UUlVFQCAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2FyZXMKKworQ1VSTFhfU1JDUyA9IFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMgXAorICQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMgXAorICQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMgXAorICQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMgXAorICQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKKworQ1VSTFhfSERSUyA9IFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9jdXJseC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5oCisKK1VTRUZVTCA9IFwKKyBnZXRwYXJ0LmMgXAorIGdldHBhcnQuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMgXAorICQodG9wX3NyY2RpcikvbGliL2N1cmxfYmFzZTY0LmggXAorICQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMgXAorICQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmgKKworVVRJTCA9IFwKKyB1dGlsLmMgXAorIHV0aWwuaAorCitnZXRwYXJ0X1NPVVJDRVMgPSAkKENVUkxYX1NSQ1MpICQoQ1VSTFhfSERSUykgJChVU0VGVUwpIFwKKyB0ZXN0cGFydC5jCisKK2dldHBhcnRfTERBREQgPSBAVEVTVF9TRVJWRVJfTElCU0AKK2dldHBhcnRfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCityZXNvbHZlX1NPVVJDRVMgPSAkKENVUkxYX1NSQ1MpICQoQ1VSTFhfSERSUykgJChVU0VGVUwpICQoVVRJTCkgXAorIHJlc29sdmUuYworCityZXNvbHZlX0xEQUREID0gQFRFU1RfU0VSVkVSX0xJQlNACityZXNvbHZlX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorcnRzcGRfU09VUkNFUyA9ICQoQ1VSTFhfU1JDUykgJChDVVJMWF9IRFJTKSAkKFVTRUZVTCkgJChVVElMKSBcCisgc2VydmVyX3NvY2thZGRyLmggXAorIHJ0c3BkLmMKKworcnRzcGRfTERBREQgPSBAVEVTVF9TRVJWRVJfTElCU0AKK3J0c3BkX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorc29ja2ZpbHRfU09VUkNFUyA9ICQoQ1VSTFhfU1JDUykgJChDVVJMWF9IRFJTKSAkKFVTRUZVTCkgJChVVElMKSBcCisgc2VydmVyX3NvY2thZGRyLmggXAorIHNvY2tmaWx0LmMgXAorICQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jCisKK3NvY2tmaWx0X0xEQUREID0gQFRFU1RfU0VSVkVSX0xJQlNACitzb2NrZmlsdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK3N3c19TT1VSQ0VTID0gJChDVVJMWF9TUkNTKSAkKENVUkxYX0hEUlMpICQoVVNFRlVMKSAkKFVUSUwpIFwKKyBzZXJ2ZXJfc29ja2FkZHIuaCBcCisgc3dzLmMgXAorICQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jCisKK3N3c19MREFERCA9IEBURVNUX1NFUlZFUl9MSUJTQAorc3dzX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQordGZ0cGRfU09VUkNFUyA9ICQoQ1VSTFhfU1JDUykgJChDVVJMWF9IRFJTKSAkKFVTRUZVTCkgJChVVElMKSBcCisgc2VydmVyX3NvY2thZGRyLmggXAorIHRmdHBkLmMgXAorIHRmdHAuaAorCit0ZnRwZF9MREFERCA9IEBURVNUX1NFUlZFUl9MSUJTQAordGZ0cGRfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitmYWtlX250bG1fU09VUkNFUyA9ICQoQ1VSTFhfU1JDUykgJChDVVJMWF9IRFJTKSAkKFVTRUZVTCkgJChVVElMKSBcCisgZmFrZV9udGxtLmMKKworZmFrZV9udGxtX0xEQUREID0gQFRFU1RfU0VSVkVSX0xJQlNACitmYWtlX250bG1fQ0ZMQUdTID0gJChBTV9DRkxBR1MpCisKKyMgTWFrZWZpbGUuaW5jIHByb3ZpZGVzIG5lYXQgZGVmaW5pdGlvbnMKK0VYVFJBX0RJU1QgPSBiYXNlNjQucGwgTWFrZWZpbGUuaW5jCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbmMgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIHRlc3RzL3NlcnZlci9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgdGVzdHMvc2VydmVyL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGY9YGVjaG8gJCRwfHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwkgIGVjaG8gIiBybSAtZiAkJHAgJCRmIjsgXAorCSAgcm0gLWYgJCRwICQkZiA7IFwKKwlkb25lCitmYWtlX250bG0kKEVYRUVYVCk6ICQoZmFrZV9udGxtX09CSkVDVFMpICQoZmFrZV9udGxtX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGZha2VfbnRsbSQoRVhFRVhUKQorCSQoTElOSykgJChmYWtlX250bG1fTERGTEFHUykgJChmYWtlX250bG1fT0JKRUNUUykgJChmYWtlX250bG1fTERBREQpICQoTElCUykKK2dldHBhcnQkKEVYRUVYVCk6ICQoZ2V0cGFydF9PQkpFQ1RTKSAkKGdldHBhcnRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZ2V0cGFydCQoRVhFRVhUKQorCSQoTElOSykgJChnZXRwYXJ0X0xERkxBR1MpICQoZ2V0cGFydF9PQkpFQ1RTKSAkKGdldHBhcnRfTERBREQpICQoTElCUykKK3Jlc29sdmUkKEVYRUVYVCk6ICQocmVzb2x2ZV9PQkpFQ1RTKSAkKHJlc29sdmVfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcmVzb2x2ZSQoRVhFRVhUKQorCSQoTElOSykgJChyZXNvbHZlX0xERkxBR1MpICQocmVzb2x2ZV9PQkpFQ1RTKSAkKHJlc29sdmVfTERBREQpICQoTElCUykKK3J0c3BkJChFWEVFWFQpOiAkKHJ0c3BkX09CSkVDVFMpICQocnRzcGRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcnRzcGQkKEVYRUVYVCkKKwkkKExJTkspICQocnRzcGRfTERGTEFHUykgJChydHNwZF9PQkpFQ1RTKSAkKHJ0c3BkX0xEQUREKSAkKExJQlMpCitzb2NrZmlsdCQoRVhFRVhUKTogJChzb2NrZmlsdF9PQkpFQ1RTKSAkKHNvY2tmaWx0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHNvY2tmaWx0JChFWEVFWFQpCisJJChMSU5LKSAkKHNvY2tmaWx0X0xERkxBR1MpICQoc29ja2ZpbHRfT0JKRUNUUykgJChzb2NrZmlsdF9MREFERCkgJChMSUJTKQorc3dzJChFWEVFWFQpOiAkKHN3c19PQkpFQ1RTKSAkKHN3c19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBzd3MkKEVYRUVYVCkKKwkkKExJTkspICQoc3dzX0xERkxBR1MpICQoc3dzX09CSkVDVFMpICQoc3dzX0xEQUREKSAkKExJQlMpCit0ZnRwZCQoRVhFRVhUKTogJCh0ZnRwZF9PQkpFQ1RTKSAkKHRmdHBkX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHRmdHBkJChFWEVFWFQpCisJJChMSU5LKSAkKHRmdHBkX0xERkxBR1MpICQodGZ0cGRfT0JKRUNUUykgJCh0ZnRwZF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmFrZV9udGxtLWJhc2U2NC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmFrZV9udGxtLWZha2VfbnRsbS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmFrZV9udGxtLWdldHBhcnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Zha2VfbnRsbS1tZW1kZWJ1Zy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmFrZV9udGxtLW1wcmludGYuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Zha2VfbnRsbS1ub25ibG9jay5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmFrZV9udGxtLXN0cmVxdWFsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mYWtlX250bG0tc3RydG9vZmZ0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mYWtlX250bG0tdGltZXZhbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmFrZV9udGxtLXV0aWwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Zha2VfbnRsbS13YXJubGVzcy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0cGFydC1iYXNlNjQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dldHBhcnQtZ2V0cGFydC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0cGFydC1tZW1kZWJ1Zy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0cGFydC1tcHJpbnRmLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nZXRwYXJ0LW5vbmJsb2NrLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nZXRwYXJ0LXN0cmVxdWFsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nZXRwYXJ0LXN0cnRvb2ZmdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0cGFydC10ZXN0cGFydC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2V0cGFydC10aW1ldmFsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nZXRwYXJ0LXdhcm5sZXNzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yZXNvbHZlLWJhc2U2NC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmVzb2x2ZS1nZXRwYXJ0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yZXNvbHZlLW1lbWRlYnVnLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yZXNvbHZlLW1wcmludGYuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Jlc29sdmUtbm9uYmxvY2suUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Jlc29sdmUtcmVzb2x2ZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmVzb2x2ZS1zdHJlcXVhbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmVzb2x2ZS1zdHJ0b29mZnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Jlc29sdmUtdGltZXZhbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmVzb2x2ZS11dGlsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yZXNvbHZlLXdhcm5sZXNzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ydHNwZC1iYXNlNjQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3J0c3BkLWdldHBhcnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3J0c3BkLW1lbWRlYnVnLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ydHNwZC1tcHJpbnRmLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ydHNwZC1ub25ibG9jay5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcnRzcGQtcnRzcGQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3J0c3BkLXN0cmVxdWFsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ydHNwZC1zdHJ0b29mZnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3J0c3BkLXRpbWV2YWwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3J0c3BkLXV0aWwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3J0c3BkLXdhcm5sZXNzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zb2NrZmlsdC1iYXNlNjQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NvY2tmaWx0LWdldHBhcnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NvY2tmaWx0LWluZXRfcHRvbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc29ja2ZpbHQtbWVtZGVidWcuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NvY2tmaWx0LW1wcmludGYuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NvY2tmaWx0LW5vbmJsb2NrLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zb2NrZmlsdC1zb2NrZmlsdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc29ja2ZpbHQtc3RyZXF1YWwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NvY2tmaWx0LXN0cnRvb2ZmdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc29ja2ZpbHQtdGltZXZhbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc29ja2ZpbHQtdXRpbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc29ja2ZpbHQtd2Fybmxlc3MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N3cy1iYXNlNjQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N3cy1nZXRwYXJ0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zd3MtaW5ldF9wdG9uLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zd3MtbWVtZGVidWcuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N3cy1tcHJpbnRmLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zd3Mtbm9uYmxvY2suUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N3cy1zdHJlcXVhbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3dzLXN0cnRvb2ZmdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3dzLXN3cy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3dzLXRpbWV2YWwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N3cy11dGlsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zd3Mtd2Fybmxlc3MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3RmdHBkLWJhc2U2NC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGZ0cGQtZ2V0cGFydC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGZ0cGQtbWVtZGVidWcuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3RmdHBkLW1wcmludGYuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3RmdHBkLW5vbmJsb2NrLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90ZnRwZC1zdHJlcXVhbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGZ0cGQtc3RydG9vZmZ0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90ZnRwZC10ZnRwZC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGZ0cGQtdGltZXZhbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGZ0cGQtdXRpbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGZ0cGQtd2Fybmxlc3MuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworZmFrZV9udGxtLW1wcmludGYubzogJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGZha2VfbnRsbS1tcHJpbnRmLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9mYWtlX250bG0tbXByaW50Zi5UcG8iIC1jIC1vIGZha2VfbnRsbS1tcHJpbnRmLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmFrZV9udGxtLW1wcmludGYuVHBvIiAiJChERVBESVIpL2Zha2VfbnRsbS1tcHJpbnRmLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2Zha2VfbnRsbS1tcHJpbnRmLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYycgb2JqZWN0PSdmYWtlX250bG0tbXByaW50Zi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmFrZV9udGxtLW1wcmludGYubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMKKworZmFrZV9udGxtLW1wcmludGYub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZha2VfbnRsbV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZmFrZV9udGxtLW1wcmludGYub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvZmFrZV9udGxtLW1wcmludGYuVHBvIiAtYyAtbyBmYWtlX250bG0tbXByaW50Zi5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2Zha2VfbnRsbS1tcHJpbnRmLlRwbyIgIiQoREVQRElSKS9mYWtlX250bG0tbXByaW50Zi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9mYWtlX250bG0tbXByaW50Zi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnIG9iamVjdD0nZmFrZV9udGxtLW1wcmludGYub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmFrZV9udGxtLW1wcmludGYub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyBmaWAKKworZmFrZV9udGxtLW5vbmJsb2NrLm86ICQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZha2VfbnRsbV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZmFrZV9udGxtLW5vbmJsb2NrLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9mYWtlX250bG0tbm9uYmxvY2suVHBvIiAtYyAtbyBmYWtlX250bG0tbm9uYmxvY2subyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2Zha2VfbnRsbS1ub25ibG9jay5UcG8iICIkKERFUERJUikvZmFrZV9udGxtLW5vbmJsb2NrLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2Zha2VfbnRsbS1ub25ibG9jay5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJyBvYmplY3Q9J2Zha2VfbnRsbS1ub25ibG9jay5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmFrZV9udGxtLW5vbmJsb2NrLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMKKworZmFrZV9udGxtLW5vbmJsb2NrLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmYWtlX250bG0tbm9uYmxvY2sub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvZmFrZV9udGxtLW5vbmJsb2NrLlRwbyIgLWMgLW8gZmFrZV9udGxtLW5vbmJsb2NrLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmFrZV9udGxtLW5vbmJsb2NrLlRwbyIgIiQoREVQRElSKS9mYWtlX250bG0tbm9uYmxvY2suUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZmFrZV9udGxtLW5vbmJsb2NrLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnIG9iamVjdD0nZmFrZV9udGxtLW5vbmJsb2NrLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGZha2VfbnRsbS1ub25ibG9jay5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IGZpYAorCitmYWtlX250bG0tc3RyZXF1YWwubzogJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmYWtlX250bG0tc3RyZXF1YWwubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2Zha2VfbnRsbS1zdHJlcXVhbC5UcG8iIC1jIC1vIGZha2VfbnRsbS1zdHJlcXVhbC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmFrZV9udGxtLXN0cmVxdWFsLlRwbyIgIiQoREVQRElSKS9mYWtlX250bG0tc3RyZXF1YWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZmFrZV9udGxtLXN0cmVxdWFsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnIG9iamVjdD0nZmFrZV9udGxtLXN0cmVxdWFsLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZha2VfbnRsbV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBmYWtlX250bG0tc3RyZXF1YWwubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYworCitmYWtlX250bG0tc3RyZXF1YWwub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGZha2VfbnRsbS1zdHJlcXVhbC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9mYWtlX250bG0tc3RyZXF1YWwuVHBvIiAtYyAtbyBmYWtlX250bG0tc3RyZXF1YWwub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9mYWtlX250bG0tc3RyZXF1YWwuVHBvIiAiJChERVBESVIpL2Zha2VfbnRsbS1zdHJlcXVhbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9mYWtlX250bG0tc3RyZXF1YWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYycgb2JqZWN0PSdmYWtlX250bG0tc3RyZXF1YWwub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmFrZV9udGxtLXN0cmVxdWFsLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgZmlgCisKK2Zha2VfbnRsbS1zdHJ0b29mZnQubzogJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZha2VfbnRsbV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZmFrZV9udGxtLXN0cnRvb2ZmdC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvZmFrZV9udGxtLXN0cnRvb2ZmdC5UcG8iIC1jIC1vIGZha2VfbnRsbS1zdHJ0b29mZnQubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmFrZV9udGxtLXN0cnRvb2ZmdC5UcG8iICIkKERFUERJUikvZmFrZV9udGxtLXN0cnRvb2ZmdC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9mYWtlX250bG0tc3RydG9vZmZ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJyBvYmplY3Q9J2Zha2VfbnRsbS1zdHJ0b29mZnQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGZha2VfbnRsbS1zdHJ0b29mZnQubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jCisKK2Zha2VfbnRsbS1zdHJ0b29mZnQub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmYWtlX250bG0tc3RydG9vZmZ0Lm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2Zha2VfbnRsbS1zdHJ0b29mZnQuVHBvIiAtYyAtbyBmYWtlX250bG0tc3RydG9vZmZ0Lm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmFrZV9udGxtLXN0cnRvb2ZmdC5UcG8iICIkKERFUERJUikvZmFrZV9udGxtLXN0cnRvb2ZmdC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9mYWtlX250bG0tc3RydG9vZmZ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJyBvYmplY3Q9J2Zha2VfbnRsbS1zdHJ0b29mZnQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmFrZV9udGxtLXN0cnRvb2ZmdC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IGZpYAorCitmYWtlX250bG0tdGltZXZhbC5vOiAkKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZha2VfbnRsbV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZmFrZV9udGxtLXRpbWV2YWwubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2Zha2VfbnRsbS10aW1ldmFsLlRwbyIgLWMgLW8gZmFrZV9udGxtLXRpbWV2YWwubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9mYWtlX250bG0tdGltZXZhbC5UcG8iICIkKERFUERJUikvZmFrZV9udGxtLXRpbWV2YWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZmFrZV9udGxtLXRpbWV2YWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJyBvYmplY3Q9J2Zha2VfbnRsbS10aW1ldmFsLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZha2VfbnRsbV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBmYWtlX250bG0tdGltZXZhbC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYworCitmYWtlX250bG0tdGltZXZhbC5vYmo6ICQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmYWtlX250bG0tdGltZXZhbC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9mYWtlX250bG0tdGltZXZhbC5UcG8iIC1jIC1vIGZha2VfbnRsbS10aW1ldmFsLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmFrZV9udGxtLXRpbWV2YWwuVHBvIiAiJChERVBESVIpL2Zha2VfbnRsbS10aW1ldmFsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2Zha2VfbnRsbS10aW1ldmFsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYycgb2JqZWN0PSdmYWtlX250bG0tdGltZXZhbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZha2VfbnRsbV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBmYWtlX250bG0tdGltZXZhbC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IGZpYAorCitmYWtlX250bG0td2Fybmxlc3MubzogJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmYWtlX250bG0td2Fybmxlc3MubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2Zha2VfbnRsbS13YXJubGVzcy5UcG8iIC1jIC1vIGZha2VfbnRsbS13YXJubGVzcy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmFrZV9udGxtLXdhcm5sZXNzLlRwbyIgIiQoREVQRElSKS9mYWtlX250bG0td2Fybmxlc3MuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZmFrZV9udGxtLXdhcm5sZXNzLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIG9iamVjdD0nZmFrZV9udGxtLXdhcm5sZXNzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZha2VfbnRsbV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBmYWtlX250bG0td2Fybmxlc3MubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworCitmYWtlX250bG0td2Fybmxlc3Mub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGZha2VfbnRsbS13YXJubGVzcy5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9mYWtlX250bG0td2Fybmxlc3MuVHBvIiAtYyAtbyBmYWtlX250bG0td2Fybmxlc3Mub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9mYWtlX250bG0td2Fybmxlc3MuVHBvIiAiJChERVBESVIpL2Zha2VfbnRsbS13YXJubGVzcy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9mYWtlX250bG0td2Fybmxlc3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgb2JqZWN0PSdmYWtlX250bG0td2Fybmxlc3Mub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmFrZV9udGxtLXdhcm5sZXNzLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZmlgCisKK2Zha2VfbnRsbS1nZXRwYXJ0Lm86IGdldHBhcnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmYWtlX250bG0tZ2V0cGFydC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvZmFrZV9udGxtLWdldHBhcnQuVHBvIiAtYyAtbyBmYWtlX250bG0tZ2V0cGFydC5vIGB0ZXN0IC1mICdnZXRwYXJ0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdldHBhcnQuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2Zha2VfbnRsbS1nZXRwYXJ0LlRwbyIgIiQoREVQRElSKS9mYWtlX250bG0tZ2V0cGFydC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9mYWtlX250bG0tZ2V0cGFydC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnZXRwYXJ0LmMnIG9iamVjdD0nZmFrZV9udGxtLWdldHBhcnQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGZha2VfbnRsbS1nZXRwYXJ0Lm8gYHRlc3QgLWYgJ2dldHBhcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2V0cGFydC5jCisKK2Zha2VfbnRsbS1nZXRwYXJ0Lm9iajogZ2V0cGFydC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGZha2VfbnRsbS1nZXRwYXJ0Lm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2Zha2VfbnRsbS1nZXRwYXJ0LlRwbyIgLWMgLW8gZmFrZV9udGxtLWdldHBhcnQub2JqIGBpZiB0ZXN0IC1mICdnZXRwYXJ0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2V0cGFydC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZXRwYXJ0LmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9mYWtlX250bG0tZ2V0cGFydC5UcG8iICIkKERFUERJUikvZmFrZV9udGxtLWdldHBhcnQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZmFrZV9udGxtLWdldHBhcnQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ2V0cGFydC5jJyBvYmplY3Q9J2Zha2VfbnRsbS1nZXRwYXJ0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGZha2VfbnRsbS1nZXRwYXJ0Lm9iaiBgaWYgdGVzdCAtZiAnZ2V0cGFydC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dldHBhcnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2V0cGFydC5jJzsgZmlgCisKK2Zha2VfbnRsbS1iYXNlNjQubzogJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZha2VfbnRsbV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZmFrZV9udGxtLWJhc2U2NC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvZmFrZV9udGxtLWJhc2U2NC5UcG8iIC1jIC1vIGZha2VfbnRsbS1iYXNlNjQubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmFrZV9udGxtLWJhc2U2NC5UcG8iICIkKERFUERJUikvZmFrZV9udGxtLWJhc2U2NC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9mYWtlX250bG0tYmFzZTY0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJyBvYmplY3Q9J2Zha2VfbnRsbS1iYXNlNjQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGZha2VfbnRsbS1iYXNlNjQubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jCisKK2Zha2VfbnRsbS1iYXNlNjQub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmYWtlX250bG0tYmFzZTY0Lm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2Zha2VfbnRsbS1iYXNlNjQuVHBvIiAtYyAtbyBmYWtlX250bG0tYmFzZTY0Lm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmFrZV9udGxtLWJhc2U2NC5UcG8iICIkKERFUERJUikvZmFrZV9udGxtLWJhc2U2NC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9mYWtlX250bG0tYmFzZTY0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJyBvYmplY3Q9J2Zha2VfbnRsbS1iYXNlNjQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmFrZV9udGxtLWJhc2U2NC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IGZpYAorCitmYWtlX250bG0tbWVtZGVidWcubzogJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmYWtlX250bG0tbWVtZGVidWcubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2Zha2VfbnRsbS1tZW1kZWJ1Zy5UcG8iIC1jIC1vIGZha2VfbnRsbS1tZW1kZWJ1Zy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmFrZV9udGxtLW1lbWRlYnVnLlRwbyIgIiQoREVQRElSKS9mYWtlX250bG0tbWVtZGVidWcuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZmFrZV9udGxtLW1lbWRlYnVnLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnIG9iamVjdD0nZmFrZV9udGxtLW1lbWRlYnVnLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZha2VfbnRsbV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBmYWtlX250bG0tbWVtZGVidWcubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYworCitmYWtlX250bG0tbWVtZGVidWcub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGZha2VfbnRsbS1tZW1kZWJ1Zy5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9mYWtlX250bG0tbWVtZGVidWcuVHBvIiAtYyAtbyBmYWtlX250bG0tbWVtZGVidWcub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9mYWtlX250bG0tbWVtZGVidWcuVHBvIiAiJChERVBESVIpL2Zha2VfbnRsbS1tZW1kZWJ1Zy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9mYWtlX250bG0tbWVtZGVidWcuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYycgb2JqZWN0PSdmYWtlX250bG0tbWVtZGVidWcub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmFrZV9udGxtLW1lbWRlYnVnLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgZmlgCisKK2Zha2VfbnRsbS11dGlsLm86IHV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmYWtlX250bG0tdXRpbC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvZmFrZV9udGxtLXV0aWwuVHBvIiAtYyAtbyBmYWtlX250bG0tdXRpbC5vIGB0ZXN0IC1mICd1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHV0aWwuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2Zha2VfbnRsbS11dGlsLlRwbyIgIiQoREVQRElSKS9mYWtlX250bG0tdXRpbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9mYWtlX250bG0tdXRpbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd1dGlsLmMnIG9iamVjdD0nZmFrZV9udGxtLXV0aWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGZha2VfbnRsbS11dGlsLm8gYHRlc3QgLWYgJ3V0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdXRpbC5jCisKK2Zha2VfbnRsbS11dGlsLm9iajogdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGZha2VfbnRsbS11dGlsLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2Zha2VfbnRsbS11dGlsLlRwbyIgLWMgLW8gZmFrZV9udGxtLXV0aWwub2JqIGBpZiB0ZXN0IC1mICd1dGlsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndXRpbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS91dGlsLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9mYWtlX250bG0tdXRpbC5UcG8iICIkKERFUERJUikvZmFrZV9udGxtLXV0aWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZmFrZV9udGxtLXV0aWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ndXRpbC5jJyBvYmplY3Q9J2Zha2VfbnRsbS11dGlsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGZha2VfbnRsbS11dGlsLm9iaiBgaWYgdGVzdCAtZiAndXRpbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3V0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdXRpbC5jJzsgZmlgCisKK2Zha2VfbnRsbS1mYWtlX250bG0ubzogZmFrZV9udGxtLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZha2VfbnRsbV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZmFrZV9udGxtLWZha2VfbnRsbS5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvZmFrZV9udGxtLWZha2VfbnRsbS5UcG8iIC1jIC1vIGZha2VfbnRsbS1mYWtlX250bG0ubyBgdGVzdCAtZiAnZmFrZV9udGxtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZha2VfbnRsbS5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmFrZV9udGxtLWZha2VfbnRsbS5UcG8iICIkKERFUERJUikvZmFrZV9udGxtLWZha2VfbnRsbS5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9mYWtlX250bG0tZmFrZV9udGxtLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2Zha2VfbnRsbS5jJyBvYmplY3Q9J2Zha2VfbnRsbS1mYWtlX250bG0ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGZha2VfbnRsbS1mYWtlX250bG0ubyBgdGVzdCAtZiAnZmFrZV9udGxtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZha2VfbnRsbS5jCisKK2Zha2VfbnRsbS1mYWtlX250bG0ub2JqOiBmYWtlX250bG0uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmFrZV9udGxtX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmYWtlX250bG0tZmFrZV9udGxtLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2Zha2VfbnRsbS1mYWtlX250bG0uVHBvIiAtYyAtbyBmYWtlX250bG0tZmFrZV9udGxtLm9iaiBgaWYgdGVzdCAtZiAnZmFrZV9udGxtLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZmFrZV9udGxtLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2Zha2VfbnRsbS5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmFrZV9udGxtLWZha2VfbnRsbS5UcG8iICIkKERFUERJUikvZmFrZV9udGxtLWZha2VfbnRsbS5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9mYWtlX250bG0tZmFrZV9udGxtLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2Zha2VfbnRsbS5jJyBvYmplY3Q9J2Zha2VfbnRsbS1mYWtlX250bG0ub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmYWtlX250bG1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmFrZV9udGxtLWZha2VfbnRsbS5vYmogYGlmIHRlc3QgLWYgJ2Zha2VfbnRsbS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2Zha2VfbnRsbS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9mYWtlX250bG0uYyc7IGZpYAorCitnZXRwYXJ0LW1wcmludGYubzogJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBnZXRwYXJ0LW1wcmludGYubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2dldHBhcnQtbXByaW50Zi5UcG8iIC1jIC1vIGdldHBhcnQtbXByaW50Zi5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL21wcmludGYuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2dldHBhcnQtbXByaW50Zi5UcG8iICIkKERFUERJUikvZ2V0cGFydC1tcHJpbnRmLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2dldHBhcnQtbXByaW50Zi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnIG9iamVjdD0nZ2V0cGFydC1tcHJpbnRmLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdldHBhcnRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ2V0cGFydC1tcHJpbnRmLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jCisKK2dldHBhcnQtbXByaW50Zi5vYmo6ICQodG9wX3NyY2RpcikvbGliL21wcmludGYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2V0cGFydC1tcHJpbnRmLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2dldHBhcnQtbXByaW50Zi5UcG8iIC1jIC1vIGdldHBhcnQtbXByaW50Zi5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2dldHBhcnQtbXByaW50Zi5UcG8iICIkKERFUERJUikvZ2V0cGFydC1tcHJpbnRmLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2dldHBhcnQtbXByaW50Zi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnIG9iamVjdD0nZ2V0cGFydC1tcHJpbnRmLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnZXRwYXJ0LW1wcmludGYub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyBmaWAKKworZ2V0cGFydC1ub25ibG9jay5vOiAkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBnZXRwYXJ0LW5vbmJsb2NrLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LW5vbmJsb2NrLlRwbyIgLWMgLW8gZ2V0cGFydC1ub25ibG9jay5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZ2V0cGFydC1ub25ibG9jay5UcG8iICIkKERFUERJUikvZ2V0cGFydC1ub25ibG9jay5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9nZXRwYXJ0LW5vbmJsb2NrLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnIG9iamVjdD0nZ2V0cGFydC1ub25ibG9jay5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdldHBhcnQtbm9uYmxvY2subyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYworCitnZXRwYXJ0LW5vbmJsb2NrLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2V0cGFydC1ub25ibG9jay5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LW5vbmJsb2NrLlRwbyIgLWMgLW8gZ2V0cGFydC1ub25ibG9jay5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2dldHBhcnQtbm9uYmxvY2suVHBvIiAiJChERVBESVIpL2dldHBhcnQtbm9uYmxvY2suUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZ2V0cGFydC1ub25ibG9jay5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJyBvYmplY3Q9J2dldHBhcnQtbm9uYmxvY2sub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdldHBhcnQtbm9uYmxvY2sub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyBmaWAKKworZ2V0cGFydC1zdHJlcXVhbC5vOiAkKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBnZXRwYXJ0LXN0cmVxdWFsLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LXN0cmVxdWFsLlRwbyIgLWMgLW8gZ2V0cGFydC1zdHJlcXVhbC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZ2V0cGFydC1zdHJlcXVhbC5UcG8iICIkKERFUERJUikvZ2V0cGFydC1zdHJlcXVhbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9nZXRwYXJ0LXN0cmVxdWFsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnIG9iamVjdD0nZ2V0cGFydC1zdHJlcXVhbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdldHBhcnQtc3RyZXF1YWwubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYworCitnZXRwYXJ0LXN0cmVxdWFsLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2V0cGFydC1zdHJlcXVhbC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LXN0cmVxdWFsLlRwbyIgLWMgLW8gZ2V0cGFydC1zdHJlcXVhbC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2dldHBhcnQtc3RyZXF1YWwuVHBvIiAiJChERVBESVIpL2dldHBhcnQtc3RyZXF1YWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZ2V0cGFydC1zdHJlcXVhbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJyBvYmplY3Q9J2dldHBhcnQtc3RyZXF1YWwub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdldHBhcnQtc3RyZXF1YWwub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyBmaWAKKworZ2V0cGFydC1zdHJ0b29mZnQubzogJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdldHBhcnRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdldHBhcnQtc3RydG9vZmZ0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LXN0cnRvb2ZmdC5UcG8iIC1jIC1vIGdldHBhcnQtc3RydG9vZmZ0Lm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2dldHBhcnQtc3RydG9vZmZ0LlRwbyIgIiQoREVQRElSKS9nZXRwYXJ0LXN0cnRvb2ZmdC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9nZXRwYXJ0LXN0cnRvb2ZmdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYycgb2JqZWN0PSdnZXRwYXJ0LXN0cnRvb2ZmdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdldHBhcnQtc3RydG9vZmZ0Lm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYworCitnZXRwYXJ0LXN0cnRvb2ZmdC5vYmo6ICQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBnZXRwYXJ0LXN0cnRvb2ZmdC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LXN0cnRvb2ZmdC5UcG8iIC1jIC1vIGdldHBhcnQtc3RydG9vZmZ0Lm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZ2V0cGFydC1zdHJ0b29mZnQuVHBvIiAiJChERVBESVIpL2dldHBhcnQtc3RydG9vZmZ0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2dldHBhcnQtc3RydG9vZmZ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJyBvYmplY3Q9J2dldHBhcnQtc3RydG9vZmZ0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnZXRwYXJ0LXN0cnRvb2ZmdC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IGZpYAorCitnZXRwYXJ0LXRpbWV2YWwubzogJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBnZXRwYXJ0LXRpbWV2YWwubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL2dldHBhcnQtdGltZXZhbC5UcG8iIC1jIC1vIGdldHBhcnQtdGltZXZhbC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2dldHBhcnQtdGltZXZhbC5UcG8iICIkKERFUERJUikvZ2V0cGFydC10aW1ldmFsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2dldHBhcnQtdGltZXZhbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnIG9iamVjdD0nZ2V0cGFydC10aW1ldmFsLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdldHBhcnRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ2V0cGFydC10aW1ldmFsLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jCisKK2dldHBhcnQtdGltZXZhbC5vYmo6ICQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2V0cGFydC10aW1ldmFsLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL2dldHBhcnQtdGltZXZhbC5UcG8iIC1jIC1vIGdldHBhcnQtdGltZXZhbC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2dldHBhcnQtdGltZXZhbC5UcG8iICIkKERFUERJUikvZ2V0cGFydC10aW1ldmFsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2dldHBhcnQtdGltZXZhbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnIG9iamVjdD0nZ2V0cGFydC10aW1ldmFsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnZXRwYXJ0LXRpbWV2YWwub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyBmaWAKKworZ2V0cGFydC13YXJubGVzcy5vOiAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBnZXRwYXJ0LXdhcm5sZXNzLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LXdhcm5sZXNzLlRwbyIgLWMgLW8gZ2V0cGFydC13YXJubGVzcy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZ2V0cGFydC13YXJubGVzcy5UcG8iICIkKERFUERJUikvZ2V0cGFydC13YXJubGVzcy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9nZXRwYXJ0LXdhcm5sZXNzLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIG9iamVjdD0nZ2V0cGFydC13YXJubGVzcy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdldHBhcnQtd2Fybmxlc3MubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworCitnZXRwYXJ0LXdhcm5sZXNzLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2V0cGFydC13YXJubGVzcy5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LXdhcm5sZXNzLlRwbyIgLWMgLW8gZ2V0cGFydC13YXJubGVzcy5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2dldHBhcnQtd2Fybmxlc3MuVHBvIiAiJChERVBESVIpL2dldHBhcnQtd2Fybmxlc3MuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZ2V0cGFydC13YXJubGVzcy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyBvYmplY3Q9J2dldHBhcnQtd2Fybmxlc3Mub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdldHBhcnQtd2Fybmxlc3Mub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBmaWAKKworZ2V0cGFydC1nZXRwYXJ0Lm86IGdldHBhcnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2V0cGFydC1nZXRwYXJ0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LWdldHBhcnQuVHBvIiAtYyAtbyBnZXRwYXJ0LWdldHBhcnQubyBgdGVzdCAtZiAnZ2V0cGFydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZXRwYXJ0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9nZXRwYXJ0LWdldHBhcnQuVHBvIiAiJChERVBESVIpL2dldHBhcnQtZ2V0cGFydC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9nZXRwYXJ0LWdldHBhcnQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ2V0cGFydC5jJyBvYmplY3Q9J2dldHBhcnQtZ2V0cGFydC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdldHBhcnQtZ2V0cGFydC5vIGB0ZXN0IC1mICdnZXRwYXJ0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdldHBhcnQuYworCitnZXRwYXJ0LWdldHBhcnQub2JqOiBnZXRwYXJ0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdldHBhcnRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdldHBhcnQtZ2V0cGFydC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LWdldHBhcnQuVHBvIiAtYyAtbyBnZXRwYXJ0LWdldHBhcnQub2JqIGBpZiB0ZXN0IC1mICdnZXRwYXJ0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2V0cGFydC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZXRwYXJ0LmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9nZXRwYXJ0LWdldHBhcnQuVHBvIiAiJChERVBESVIpL2dldHBhcnQtZ2V0cGFydC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9nZXRwYXJ0LWdldHBhcnQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ2V0cGFydC5jJyBvYmplY3Q9J2dldHBhcnQtZ2V0cGFydC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdldHBhcnRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ2V0cGFydC1nZXRwYXJ0Lm9iaiBgaWYgdGVzdCAtZiAnZ2V0cGFydC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dldHBhcnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2V0cGFydC5jJzsgZmlgCisKK2dldHBhcnQtYmFzZTY0Lm86ICQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBnZXRwYXJ0LWJhc2U2NC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvZ2V0cGFydC1iYXNlNjQuVHBvIiAtYyAtbyBnZXRwYXJ0LWJhc2U2NC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9nZXRwYXJ0LWJhc2U2NC5UcG8iICIkKERFUERJUikvZ2V0cGFydC1iYXNlNjQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZ2V0cGFydC1iYXNlNjQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnIG9iamVjdD0nZ2V0cGFydC1iYXNlNjQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnZXRwYXJ0LWJhc2U2NC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMKKworZ2V0cGFydC1iYXNlNjQub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2V0cGFydC1iYXNlNjQub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvZ2V0cGFydC1iYXNlNjQuVHBvIiAtYyAtbyBnZXRwYXJ0LWJhc2U2NC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2dldHBhcnQtYmFzZTY0LlRwbyIgIiQoREVQRElSKS9nZXRwYXJ0LWJhc2U2NC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9nZXRwYXJ0LWJhc2U2NC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYycgb2JqZWN0PSdnZXRwYXJ0LWJhc2U2NC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdldHBhcnRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ2V0cGFydC1iYXNlNjQub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyBmaWAKKworZ2V0cGFydC1tZW1kZWJ1Zy5vOiAkKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBnZXRwYXJ0LW1lbWRlYnVnLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LW1lbWRlYnVnLlRwbyIgLWMgLW8gZ2V0cGFydC1tZW1kZWJ1Zy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZ2V0cGFydC1tZW1kZWJ1Zy5UcG8iICIkKERFUERJUikvZ2V0cGFydC1tZW1kZWJ1Zy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9nZXRwYXJ0LW1lbWRlYnVnLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnIG9iamVjdD0nZ2V0cGFydC1tZW1kZWJ1Zy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdldHBhcnQtbWVtZGVidWcubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYworCitnZXRwYXJ0LW1lbWRlYnVnLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2V0cGFydC1tZW1kZWJ1Zy5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LW1lbWRlYnVnLlRwbyIgLWMgLW8gZ2V0cGFydC1tZW1kZWJ1Zy5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2dldHBhcnQtbWVtZGVidWcuVHBvIiAiJChERVBESVIpL2dldHBhcnQtbWVtZGVidWcuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZ2V0cGFydC1tZW1kZWJ1Zy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJyBvYmplY3Q9J2dldHBhcnQtbWVtZGVidWcub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdldHBhcnQtbWVtZGVidWcub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyBmaWAKKworZ2V0cGFydC10ZXN0cGFydC5vOiB0ZXN0cGFydC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBnZXRwYXJ0LXRlc3RwYXJ0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LXRlc3RwYXJ0LlRwbyIgLWMgLW8gZ2V0cGFydC10ZXN0cGFydC5vIGB0ZXN0IC1mICd0ZXN0cGFydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZXN0cGFydC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZ2V0cGFydC10ZXN0cGFydC5UcG8iICIkKERFUERJUikvZ2V0cGFydC10ZXN0cGFydC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9nZXRwYXJ0LXRlc3RwYXJ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3Rlc3RwYXJ0LmMnIG9iamVjdD0nZ2V0cGFydC10ZXN0cGFydC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdldHBhcnQtdGVzdHBhcnQubyBgdGVzdCAtZiAndGVzdHBhcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVzdHBhcnQuYworCitnZXRwYXJ0LXRlc3RwYXJ0Lm9iajogdGVzdHBhcnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2V0cGFydF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2V0cGFydC10ZXN0cGFydC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9nZXRwYXJ0LXRlc3RwYXJ0LlRwbyIgLWMgLW8gZ2V0cGFydC10ZXN0cGFydC5vYmogYGlmIHRlc3QgLWYgJ3Rlc3RwYXJ0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGVzdHBhcnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGVzdHBhcnQuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL2dldHBhcnQtdGVzdHBhcnQuVHBvIiAiJChERVBESVIpL2dldHBhcnQtdGVzdHBhcnQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZ2V0cGFydC10ZXN0cGFydC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd0ZXN0cGFydC5jJyBvYmplY3Q9J2dldHBhcnQtdGVzdHBhcnQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZXRwYXJ0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdldHBhcnQtdGVzdHBhcnQub2JqIGBpZiB0ZXN0IC1mICd0ZXN0cGFydC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3Rlc3RwYXJ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Rlc3RwYXJ0LmMnOyBmaWAKKworcmVzb2x2ZS1tcHJpbnRmLm86ICQodG9wX3NyY2RpcikvbGliL21wcmludGYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcmVzb2x2ZS1tcHJpbnRmLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9yZXNvbHZlLW1wcmludGYuVHBvIiAtYyAtbyByZXNvbHZlLW1wcmludGYubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9yZXNvbHZlLW1wcmludGYuVHBvIiAiJChERVBESVIpL3Jlc29sdmUtbXByaW50Zi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9yZXNvbHZlLW1wcmludGYuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJyBvYmplY3Q9J3Jlc29sdmUtbXByaW50Zi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJlc29sdmUtbXByaW50Zi5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL21wcmludGYuYworCityZXNvbHZlLW1wcmludGYub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJlc29sdmUtbXByaW50Zi5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9yZXNvbHZlLW1wcmludGYuVHBvIiAtYyAtbyByZXNvbHZlLW1wcmludGYub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9yZXNvbHZlLW1wcmludGYuVHBvIiAiJChERVBESVIpL3Jlc29sdmUtbXByaW50Zi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9yZXNvbHZlLW1wcmludGYuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJyBvYmplY3Q9J3Jlc29sdmUtbXByaW50Zi5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcmVzb2x2ZS1tcHJpbnRmLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgZmlgCisKK3Jlc29sdmUtbm9uYmxvY2subzogJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcmVzb2x2ZS1ub25ibG9jay5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS1ub25ibG9jay5UcG8iIC1jIC1vIHJlc29sdmUtbm9uYmxvY2subyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3Jlc29sdmUtbm9uYmxvY2suVHBvIiAiJChERVBESVIpL3Jlc29sdmUtbm9uYmxvY2suUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcmVzb2x2ZS1ub25ibG9jay5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJyBvYmplY3Q9J3Jlc29sdmUtbm9uYmxvY2subycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLW5vbmJsb2NrLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMKKworcmVzb2x2ZS1ub25ibG9jay5vYmo6ICQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJlc29sdmUtbm9uYmxvY2sub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS1ub25ibG9jay5UcG8iIC1jIC1vIHJlc29sdmUtbm9uYmxvY2sub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9yZXNvbHZlLW5vbmJsb2NrLlRwbyIgIiQoREVQRElSKS9yZXNvbHZlLW5vbmJsb2NrLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3Jlc29sdmUtbm9uYmxvY2suVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYycgb2JqZWN0PSdyZXNvbHZlLW5vbmJsb2NrLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLW5vbmJsb2NrLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgZmlgCisKK3Jlc29sdmUtc3RyZXF1YWwubzogJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcmVzb2x2ZS1zdHJlcXVhbC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS1zdHJlcXVhbC5UcG8iIC1jIC1vIHJlc29sdmUtc3RyZXF1YWwubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3Jlc29sdmUtc3RyZXF1YWwuVHBvIiAiJChERVBESVIpL3Jlc29sdmUtc3RyZXF1YWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcmVzb2x2ZS1zdHJlcXVhbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJyBvYmplY3Q9J3Jlc29sdmUtc3RyZXF1YWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLXN0cmVxdWFsLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMKKworcmVzb2x2ZS1zdHJlcXVhbC5vYmo6ICQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJlc29sdmUtc3RyZXF1YWwub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS1zdHJlcXVhbC5UcG8iIC1jIC1vIHJlc29sdmUtc3RyZXF1YWwub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9yZXNvbHZlLXN0cmVxdWFsLlRwbyIgIiQoREVQRElSKS9yZXNvbHZlLXN0cmVxdWFsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3Jlc29sdmUtc3RyZXF1YWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYycgb2JqZWN0PSdyZXNvbHZlLXN0cmVxdWFsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLXN0cmVxdWFsLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgZmlgCisKK3Jlc29sdmUtc3RydG9vZmZ0Lm86ICQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1NVCByZXNvbHZlLXN0cnRvb2ZmdC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS1zdHJ0b29mZnQuVHBvIiAtYyAtbyByZXNvbHZlLXN0cnRvb2ZmdC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9yZXNvbHZlLXN0cnRvb2ZmdC5UcG8iICIkKERFUERJUikvcmVzb2x2ZS1zdHJ0b29mZnQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcmVzb2x2ZS1zdHJ0b29mZnQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnIG9iamVjdD0ncmVzb2x2ZS1zdHJ0b29mZnQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLXN0cnRvb2ZmdC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMKKworcmVzb2x2ZS1zdHJ0b29mZnQub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcmVzb2x2ZS1zdHJ0b29mZnQub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS1zdHJ0b29mZnQuVHBvIiAtYyAtbyByZXNvbHZlLXN0cnRvb2ZmdC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3Jlc29sdmUtc3RydG9vZmZ0LlRwbyIgIiQoREVQRElSKS9yZXNvbHZlLXN0cnRvb2ZmdC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9yZXNvbHZlLXN0cnRvb2ZmdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYycgb2JqZWN0PSdyZXNvbHZlLXN0cnRvb2ZmdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcmVzb2x2ZS1zdHJ0b29mZnQub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyBmaWAKKworcmVzb2x2ZS10aW1ldmFsLm86ICQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcmVzb2x2ZS10aW1ldmFsLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9yZXNvbHZlLXRpbWV2YWwuVHBvIiAtYyAtbyByZXNvbHZlLXRpbWV2YWwubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9yZXNvbHZlLXRpbWV2YWwuVHBvIiAiJChERVBESVIpL3Jlc29sdmUtdGltZXZhbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9yZXNvbHZlLXRpbWV2YWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJyBvYmplY3Q9J3Jlc29sdmUtdGltZXZhbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJlc29sdmUtdGltZXZhbC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYworCityZXNvbHZlLXRpbWV2YWwub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJlc29sdmUtdGltZXZhbC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9yZXNvbHZlLXRpbWV2YWwuVHBvIiAtYyAtbyByZXNvbHZlLXRpbWV2YWwub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9yZXNvbHZlLXRpbWV2YWwuVHBvIiAiJChERVBESVIpL3Jlc29sdmUtdGltZXZhbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9yZXNvbHZlLXRpbWV2YWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJyBvYmplY3Q9J3Jlc29sdmUtdGltZXZhbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcmVzb2x2ZS10aW1ldmFsLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgZmlgCisKK3Jlc29sdmUtd2Fybmxlc3MubzogJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcmVzb2x2ZS13YXJubGVzcy5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS13YXJubGVzcy5UcG8iIC1jIC1vIHJlc29sdmUtd2Fybmxlc3MubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3Jlc29sdmUtd2Fybmxlc3MuVHBvIiAiJChERVBESVIpL3Jlc29sdmUtd2Fybmxlc3MuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcmVzb2x2ZS13YXJubGVzcy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyBvYmplY3Q9J3Jlc29sdmUtd2Fybmxlc3MubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLXdhcm5sZXNzLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKKworcmVzb2x2ZS13YXJubGVzcy5vYmo6ICQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJlc29sdmUtd2Fybmxlc3Mub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS13YXJubGVzcy5UcG8iIC1jIC1vIHJlc29sdmUtd2Fybmxlc3Mub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9yZXNvbHZlLXdhcm5sZXNzLlRwbyIgIiQoREVQRElSKS9yZXNvbHZlLXdhcm5sZXNzLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3Jlc29sdmUtd2Fybmxlc3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgb2JqZWN0PSdyZXNvbHZlLXdhcm5sZXNzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLXdhcm5sZXNzLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZmlgCisKK3Jlc29sdmUtZ2V0cGFydC5vOiBnZXRwYXJ0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJlc29sdmUtZ2V0cGFydC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS1nZXRwYXJ0LlRwbyIgLWMgLW8gcmVzb2x2ZS1nZXRwYXJ0Lm8gYHRlc3QgLWYgJ2dldHBhcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2V0cGFydC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvcmVzb2x2ZS1nZXRwYXJ0LlRwbyIgIiQoREVQRElSKS9yZXNvbHZlLWdldHBhcnQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcmVzb2x2ZS1nZXRwYXJ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dldHBhcnQuYycgb2JqZWN0PSdyZXNvbHZlLWdldHBhcnQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLWdldHBhcnQubyBgdGVzdCAtZiAnZ2V0cGFydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZXRwYXJ0LmMKKworcmVzb2x2ZS1nZXRwYXJ0Lm9iajogZ2V0cGFydC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1NVCByZXNvbHZlLWdldHBhcnQub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS1nZXRwYXJ0LlRwbyIgLWMgLW8gcmVzb2x2ZS1nZXRwYXJ0Lm9iaiBgaWYgdGVzdCAtZiAnZ2V0cGFydC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dldHBhcnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2V0cGFydC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvcmVzb2x2ZS1nZXRwYXJ0LlRwbyIgIiQoREVQRElSKS9yZXNvbHZlLWdldHBhcnQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcmVzb2x2ZS1nZXRwYXJ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dldHBhcnQuYycgb2JqZWN0PSdyZXNvbHZlLWdldHBhcnQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJlc29sdmUtZ2V0cGFydC5vYmogYGlmIHRlc3QgLWYgJ2dldHBhcnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZXRwYXJ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dldHBhcnQuYyc7IGZpYAorCityZXNvbHZlLWJhc2U2NC5vOiAkKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcmVzb2x2ZS1iYXNlNjQubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3Jlc29sdmUtYmFzZTY0LlRwbyIgLWMgLW8gcmVzb2x2ZS1iYXNlNjQubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvcmVzb2x2ZS1iYXNlNjQuVHBvIiAiJChERVBESVIpL3Jlc29sdmUtYmFzZTY0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3Jlc29sdmUtYmFzZTY0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJyBvYmplY3Q9J3Jlc29sdmUtYmFzZTY0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcmVzb2x2ZS1iYXNlNjQubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jCisKK3Jlc29sdmUtYmFzZTY0Lm9iajogJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJlc29sdmUtYmFzZTY0Lm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3Jlc29sdmUtYmFzZTY0LlRwbyIgLWMgLW8gcmVzb2x2ZS1iYXNlNjQub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9yZXNvbHZlLWJhc2U2NC5UcG8iICIkKERFUERJUikvcmVzb2x2ZS1iYXNlNjQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcmVzb2x2ZS1iYXNlNjQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnIG9iamVjdD0ncmVzb2x2ZS1iYXNlNjQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJlc29sdmUtYmFzZTY0Lm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgZmlgCisKK3Jlc29sdmUtbWVtZGVidWcubzogJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcmVzb2x2ZS1tZW1kZWJ1Zy5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS1tZW1kZWJ1Zy5UcG8iIC1jIC1vIHJlc29sdmUtbWVtZGVidWcubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3Jlc29sdmUtbWVtZGVidWcuVHBvIiAiJChERVBESVIpL3Jlc29sdmUtbWVtZGVidWcuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcmVzb2x2ZS1tZW1kZWJ1Zy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJyBvYmplY3Q9J3Jlc29sdmUtbWVtZGVidWcubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLW1lbWRlYnVnLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMKKworcmVzb2x2ZS1tZW1kZWJ1Zy5vYmo6ICQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJlc29sdmUtbWVtZGVidWcub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS1tZW1kZWJ1Zy5UcG8iIC1jIC1vIHJlc29sdmUtbWVtZGVidWcub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9yZXNvbHZlLW1lbWRlYnVnLlRwbyIgIiQoREVQRElSKS9yZXNvbHZlLW1lbWRlYnVnLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3Jlc29sdmUtbWVtZGVidWcuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYycgb2JqZWN0PSdyZXNvbHZlLW1lbWRlYnVnLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLW1lbWRlYnVnLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgZmlgCisKK3Jlc29sdmUtdXRpbC5vOiB1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJlc29sdmUtdXRpbC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS11dGlsLlRwbyIgLWMgLW8gcmVzb2x2ZS11dGlsLm8gYHRlc3QgLWYgJ3V0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdXRpbC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvcmVzb2x2ZS11dGlsLlRwbyIgIiQoREVQRElSKS9yZXNvbHZlLXV0aWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcmVzb2x2ZS11dGlsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3V0aWwuYycgb2JqZWN0PSdyZXNvbHZlLXV0aWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLXV0aWwubyBgdGVzdCAtZiAndXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGlsLmMKKworcmVzb2x2ZS11dGlsLm9iajogdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1NVCByZXNvbHZlLXV0aWwub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvcmVzb2x2ZS11dGlsLlRwbyIgLWMgLW8gcmVzb2x2ZS11dGlsLm9iaiBgaWYgdGVzdCAtZiAndXRpbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3V0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdXRpbC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvcmVzb2x2ZS11dGlsLlRwbyIgIiQoREVQRElSKS9yZXNvbHZlLXV0aWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcmVzb2x2ZS11dGlsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3V0aWwuYycgb2JqZWN0PSdyZXNvbHZlLXV0aWwub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJlc29sdmUtdXRpbC5vYmogYGlmIHRlc3QgLWYgJ3V0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd1dGlsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3V0aWwuYyc7IGZpYAorCityZXNvbHZlLXJlc29sdmUubzogcmVzb2x2ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1NVCByZXNvbHZlLXJlc29sdmUubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3Jlc29sdmUtcmVzb2x2ZS5UcG8iIC1jIC1vIHJlc29sdmUtcmVzb2x2ZS5vIGB0ZXN0IC1mICdyZXNvbHZlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJlc29sdmUuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3Jlc29sdmUtcmVzb2x2ZS5UcG8iICIkKERFUERJUikvcmVzb2x2ZS1yZXNvbHZlLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3Jlc29sdmUtcmVzb2x2ZS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdyZXNvbHZlLmMnIG9iamVjdD0ncmVzb2x2ZS1yZXNvbHZlLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcmVzb2x2ZS1yZXNvbHZlLm8gYHRlc3QgLWYgJ3Jlc29sdmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcmVzb2x2ZS5jCisKK3Jlc29sdmUtcmVzb2x2ZS5vYmo6IHJlc29sdmUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcmVzb2x2ZS1yZXNvbHZlLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3Jlc29sdmUtcmVzb2x2ZS5UcG8iIC1jIC1vIHJlc29sdmUtcmVzb2x2ZS5vYmogYGlmIHRlc3QgLWYgJ3Jlc29sdmUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdyZXNvbHZlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Jlc29sdmUuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3Jlc29sdmUtcmVzb2x2ZS5UcG8iICIkKERFUERJUikvcmVzb2x2ZS1yZXNvbHZlLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3Jlc29sdmUtcmVzb2x2ZS5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdyZXNvbHZlLmMnIG9iamVjdD0ncmVzb2x2ZS1yZXNvbHZlLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLXJlc29sdmUub2JqIGBpZiB0ZXN0IC1mICdyZXNvbHZlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncmVzb2x2ZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9yZXNvbHZlLmMnOyBmaWAKKworcnRzcGQtbXByaW50Zi5vOiAkKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0c3BkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBydHNwZC1tcHJpbnRmLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9ydHNwZC1tcHJpbnRmLlRwbyIgLWMgLW8gcnRzcGQtbXByaW50Zi5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL21wcmludGYuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3J0c3BkLW1wcmludGYuVHBvIiAiJChERVBESVIpL3J0c3BkLW1wcmludGYuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtbXByaW50Zi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnIG9iamVjdD0ncnRzcGQtbXByaW50Zi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBydHNwZC1tcHJpbnRmLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jCisKK3J0c3BkLW1wcmludGYub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0c3BkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBydHNwZC1tcHJpbnRmLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3J0c3BkLW1wcmludGYuVHBvIiAtYyAtbyBydHNwZC1tcHJpbnRmLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvcnRzcGQtbXByaW50Zi5UcG8iICIkKERFUERJUikvcnRzcGQtbXByaW50Zi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9ydHNwZC1tcHJpbnRmLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYycgb2JqZWN0PSdydHNwZC1tcHJpbnRmLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcnRzcGQtbXByaW50Zi5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IGZpYAorCitydHNwZC1ub25ibG9jay5vOiAkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcnRzcGQtbm9uYmxvY2subyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3J0c3BkLW5vbmJsb2NrLlRwbyIgLWMgLW8gcnRzcGQtbm9uYmxvY2subyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3J0c3BkLW5vbmJsb2NrLlRwbyIgIiQoREVQRElSKS9ydHNwZC1ub25ibG9jay5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9ydHNwZC1ub25ibG9jay5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJyBvYmplY3Q9J3J0c3BkLW5vbmJsb2NrLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0c3BkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJ0c3BkLW5vbmJsb2NrLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMKKworcnRzcGQtbm9uYmxvY2sub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcnRzcGQtbm9uYmxvY2sub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvcnRzcGQtbm9uYmxvY2suVHBvIiAtYyAtbyBydHNwZC1ub25ibG9jay5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3J0c3BkLW5vbmJsb2NrLlRwbyIgIiQoREVQRElSKS9ydHNwZC1ub25ibG9jay5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9ydHNwZC1ub25ibG9jay5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJyBvYmplY3Q9J3J0c3BkLW5vbmJsb2NrLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcnRzcGQtbm9uYmxvY2sub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyBmaWAKKworcnRzcGQtc3RyZXF1YWwubzogJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJ0c3BkLXN0cmVxdWFsLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9ydHNwZC1zdHJlcXVhbC5UcG8iIC1jIC1vIHJ0c3BkLXN0cmVxdWFsLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9ydHNwZC1zdHJlcXVhbC5UcG8iICIkKERFUERJUikvcnRzcGQtc3RyZXF1YWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtc3RyZXF1YWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYycgb2JqZWN0PSdydHNwZC1zdHJlcXVhbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBydHNwZC1zdHJlcXVhbC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jCisKK3J0c3BkLXN0cmVxdWFsLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJ0c3BkLXN0cmVxdWFsLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3J0c3BkLXN0cmVxdWFsLlRwbyIgLWMgLW8gcnRzcGQtc3RyZXF1YWwub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9ydHNwZC1zdHJlcXVhbC5UcG8iICIkKERFUERJUikvcnRzcGQtc3RyZXF1YWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtc3RyZXF1YWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYycgb2JqZWN0PSdydHNwZC1zdHJlcXVhbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0c3BkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJ0c3BkLXN0cmVxdWFsLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgZmlgCisKK3J0c3BkLXN0cnRvb2ZmdC5vOiAkKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJ0c3BkLXN0cnRvb2ZmdC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvcnRzcGQtc3RydG9vZmZ0LlRwbyIgLWMgLW8gcnRzcGQtc3RydG9vZmZ0Lm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3J0c3BkLXN0cnRvb2ZmdC5UcG8iICIkKERFUERJUikvcnRzcGQtc3RydG9vZmZ0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3J0c3BkLXN0cnRvb2ZmdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYycgb2JqZWN0PSdydHNwZC1zdHJ0b29mZnQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcnRzcGQtc3RydG9vZmZ0Lm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYworCitydHNwZC1zdHJ0b29mZnQub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJ0c3BkLXN0cnRvb2ZmdC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9ydHNwZC1zdHJ0b29mZnQuVHBvIiAtYyAtbyBydHNwZC1zdHJ0b29mZnQub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9ydHNwZC1zdHJ0b29mZnQuVHBvIiAiJChERVBESVIpL3J0c3BkLXN0cnRvb2ZmdC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9ydHNwZC1zdHJ0b29mZnQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnIG9iamVjdD0ncnRzcGQtc3RydG9vZmZ0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcnRzcGQtc3RydG9vZmZ0Lm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgZmlgCisKK3J0c3BkLXRpbWV2YWwubzogJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcnRzcGQtdGltZXZhbC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvcnRzcGQtdGltZXZhbC5UcG8iIC1jIC1vIHJ0c3BkLXRpbWV2YWwubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9ydHNwZC10aW1ldmFsLlRwbyIgIiQoREVQRElSKS9ydHNwZC10aW1ldmFsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3J0c3BkLXRpbWV2YWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJyBvYmplY3Q9J3J0c3BkLXRpbWV2YWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcnRzcGQtdGltZXZhbC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYworCitydHNwZC10aW1ldmFsLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcnRzcGQtdGltZXZhbC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9ydHNwZC10aW1ldmFsLlRwbyIgLWMgLW8gcnRzcGQtdGltZXZhbC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3J0c3BkLXRpbWV2YWwuVHBvIiAiJChERVBESVIpL3J0c3BkLXRpbWV2YWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtdGltZXZhbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnIG9iamVjdD0ncnRzcGQtdGltZXZhbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0c3BkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJ0c3BkLXRpbWV2YWwub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyBmaWAKKworcnRzcGQtd2Fybmxlc3MubzogJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJ0c3BkLXdhcm5sZXNzLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9ydHNwZC13YXJubGVzcy5UcG8iIC1jIC1vIHJ0c3BkLXdhcm5sZXNzLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9ydHNwZC13YXJubGVzcy5UcG8iICIkKERFUERJUikvcnRzcGQtd2Fybmxlc3MuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtd2Fybmxlc3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgb2JqZWN0PSdydHNwZC13YXJubGVzcy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBydHNwZC13YXJubGVzcy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCisKK3J0c3BkLXdhcm5sZXNzLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJ0c3BkLXdhcm5sZXNzLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3J0c3BkLXdhcm5sZXNzLlRwbyIgLWMgLW8gcnRzcGQtd2Fybmxlc3Mub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9ydHNwZC13YXJubGVzcy5UcG8iICIkKERFUERJUikvcnRzcGQtd2Fybmxlc3MuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtd2Fybmxlc3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgb2JqZWN0PSdydHNwZC13YXJubGVzcy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0c3BkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJ0c3BkLXdhcm5sZXNzLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZmlgCisKK3J0c3BkLWdldHBhcnQubzogZ2V0cGFydC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcnRzcGQtZ2V0cGFydC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvcnRzcGQtZ2V0cGFydC5UcG8iIC1jIC1vIHJ0c3BkLWdldHBhcnQubyBgdGVzdCAtZiAnZ2V0cGFydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZXRwYXJ0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9ydHNwZC1nZXRwYXJ0LlRwbyIgIiQoREVQRElSKS9ydHNwZC1nZXRwYXJ0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3J0c3BkLWdldHBhcnQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ2V0cGFydC5jJyBvYmplY3Q9J3J0c3BkLWdldHBhcnQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcnRzcGQtZ2V0cGFydC5vIGB0ZXN0IC1mICdnZXRwYXJ0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdldHBhcnQuYworCitydHNwZC1nZXRwYXJ0Lm9iajogZ2V0cGFydC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcnRzcGQtZ2V0cGFydC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9ydHNwZC1nZXRwYXJ0LlRwbyIgLWMgLW8gcnRzcGQtZ2V0cGFydC5vYmogYGlmIHRlc3QgLWYgJ2dldHBhcnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZXRwYXJ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dldHBhcnQuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3J0c3BkLWdldHBhcnQuVHBvIiAiJChERVBESVIpL3J0c3BkLWdldHBhcnQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtZ2V0cGFydC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnZXRwYXJ0LmMnIG9iamVjdD0ncnRzcGQtZ2V0cGFydC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0c3BkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJ0c3BkLWdldHBhcnQub2JqIGBpZiB0ZXN0IC1mICdnZXRwYXJ0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2V0cGFydC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZXRwYXJ0LmMnOyBmaWAKKworcnRzcGQtYmFzZTY0Lm86ICQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcnRzcGQtYmFzZTY0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9ydHNwZC1iYXNlNjQuVHBvIiAtYyAtbyBydHNwZC1iYXNlNjQubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvcnRzcGQtYmFzZTY0LlRwbyIgIiQoREVQRElSKS9ydHNwZC1iYXNlNjQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtYmFzZTY0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJyBvYmplY3Q9J3J0c3BkLWJhc2U2NC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBydHNwZC1iYXNlNjQubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jCisKK3J0c3BkLWJhc2U2NC5vYmo6ICQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcnRzcGQtYmFzZTY0Lm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3J0c3BkLWJhc2U2NC5UcG8iIC1jIC1vIHJ0c3BkLWJhc2U2NC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3J0c3BkLWJhc2U2NC5UcG8iICIkKERFUERJUikvcnRzcGQtYmFzZTY0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3J0c3BkLWJhc2U2NC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYycgb2JqZWN0PSdydHNwZC1iYXNlNjQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBydHNwZC1iYXNlNjQub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyBmaWAKKworcnRzcGQtbWVtZGVidWcubzogJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJ0c3BkLW1lbWRlYnVnLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9ydHNwZC1tZW1kZWJ1Zy5UcG8iIC1jIC1vIHJ0c3BkLW1lbWRlYnVnLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9ydHNwZC1tZW1kZWJ1Zy5UcG8iICIkKERFUERJUikvcnRzcGQtbWVtZGVidWcuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtbWVtZGVidWcuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYycgb2JqZWN0PSdydHNwZC1tZW1kZWJ1Zy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBydHNwZC1tZW1kZWJ1Zy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jCisKK3J0c3BkLW1lbWRlYnVnLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJ0c3BkLW1lbWRlYnVnLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3J0c3BkLW1lbWRlYnVnLlRwbyIgLWMgLW8gcnRzcGQtbWVtZGVidWcub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9ydHNwZC1tZW1kZWJ1Zy5UcG8iICIkKERFUERJUikvcnRzcGQtbWVtZGVidWcuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtbWVtZGVidWcuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYycgb2JqZWN0PSdydHNwZC1tZW1kZWJ1Zy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0c3BkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJ0c3BkLW1lbWRlYnVnLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgZmlgCisKK3J0c3BkLXV0aWwubzogdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcnRzcGQtdXRpbC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvcnRzcGQtdXRpbC5UcG8iIC1jIC1vIHJ0c3BkLXV0aWwubyBgdGVzdCAtZiAndXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGlsLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9ydHNwZC11dGlsLlRwbyIgIiQoREVQRElSKS9ydHNwZC11dGlsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3J0c3BkLXV0aWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ndXRpbC5jJyBvYmplY3Q9J3J0c3BkLXV0aWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcnRzcGQtdXRpbC5vIGB0ZXN0IC1mICd1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHV0aWwuYworCitydHNwZC11dGlsLm9iajogdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcnRzcGQtdXRpbC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9ydHNwZC11dGlsLlRwbyIgLWMgLW8gcnRzcGQtdXRpbC5vYmogYGlmIHRlc3QgLWYgJ3V0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd1dGlsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3V0aWwuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3J0c3BkLXV0aWwuVHBvIiAiJChERVBESVIpL3J0c3BkLXV0aWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtdXRpbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd1dGlsLmMnIG9iamVjdD0ncnRzcGQtdXRpbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0c3BkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJ0c3BkLXV0aWwub2JqIGBpZiB0ZXN0IC1mICd1dGlsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndXRpbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS91dGlsLmMnOyBmaWAKKworcnRzcGQtcnRzcGQubzogcnRzcGQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJ0c3BkLXJ0c3BkLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9ydHNwZC1ydHNwZC5UcG8iIC1jIC1vIHJ0c3BkLXJ0c3BkLm8gYHRlc3QgLWYgJ3J0c3BkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJ0c3BkLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9ydHNwZC1ydHNwZC5UcG8iICIkKERFUERJUikvcnRzcGQtcnRzcGQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtcnRzcGQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncnRzcGQuYycgb2JqZWN0PSdydHNwZC1ydHNwZC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHNwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBydHNwZC1ydHNwZC5vIGB0ZXN0IC1mICdydHNwZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BydHNwZC5jCisKK3J0c3BkLXJ0c3BkLm9iajogcnRzcGQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRzcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJ0c3BkLXJ0c3BkLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3J0c3BkLXJ0c3BkLlRwbyIgLWMgLW8gcnRzcGQtcnRzcGQub2JqIGBpZiB0ZXN0IC1mICdydHNwZC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3J0c3BkLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3J0c3BkLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9ydHNwZC1ydHNwZC5UcG8iICIkKERFUERJUikvcnRzcGQtcnRzcGQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvcnRzcGQtcnRzcGQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncnRzcGQuYycgb2JqZWN0PSdydHNwZC1ydHNwZC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0c3BkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJ0c3BkLXJ0c3BkLm9iaiBgaWYgdGVzdCAtZiAncnRzcGQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdydHNwZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9ydHNwZC5jJzsgZmlgCisKK3NvY2tmaWx0LW1wcmludGYubzogJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzb2NrZmlsdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc29ja2ZpbHQtbXByaW50Zi5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvc29ja2ZpbHQtbXByaW50Zi5UcG8iIC1jIC1vIHNvY2tmaWx0LW1wcmludGYubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zb2NrZmlsdC1tcHJpbnRmLlRwbyIgIiQoREVQRElSKS9zb2NrZmlsdC1tcHJpbnRmLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LW1wcmludGYuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJyBvYmplY3Q9J3NvY2tmaWx0LW1wcmludGYubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc29ja2ZpbHQtbXByaW50Zi5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL21wcmludGYuYworCitzb2NrZmlsdC1tcHJpbnRmLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzb2NrZmlsdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc29ja2ZpbHQtbXByaW50Zi5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zb2NrZmlsdC1tcHJpbnRmLlRwbyIgLWMgLW8gc29ja2ZpbHQtbXByaW50Zi5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3NvY2tmaWx0LW1wcmludGYuVHBvIiAiJChERVBESVIpL3NvY2tmaWx0LW1wcmludGYuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvc29ja2ZpbHQtbXByaW50Zi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnIG9iamVjdD0nc29ja2ZpbHQtbXByaW50Zi5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNvY2tmaWx0LW1wcmludGYub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyBmaWAKKworc29ja2ZpbHQtbm9uYmxvY2subzogJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNvY2tmaWx0LW5vbmJsb2NrLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zb2NrZmlsdC1ub25ibG9jay5UcG8iIC1jIC1vIHNvY2tmaWx0LW5vbmJsb2NrLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zb2NrZmlsdC1ub25ibG9jay5UcG8iICIkKERFUERJUikvc29ja2ZpbHQtbm9uYmxvY2suUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvc29ja2ZpbHQtbm9uYmxvY2suVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYycgb2JqZWN0PSdzb2NrZmlsdC1ub25ibG9jay5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzb2NrZmlsdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzb2NrZmlsdC1ub25ibG9jay5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jCisKK3NvY2tmaWx0LW5vbmJsb2NrLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNvY2tmaWx0LW5vbmJsb2NrLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3NvY2tmaWx0LW5vbmJsb2NrLlRwbyIgLWMgLW8gc29ja2ZpbHQtbm9uYmxvY2sub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zb2NrZmlsdC1ub25ibG9jay5UcG8iICIkKERFUERJUikvc29ja2ZpbHQtbm9uYmxvY2suUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvc29ja2ZpbHQtbm9uYmxvY2suVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYycgb2JqZWN0PSdzb2NrZmlsdC1ub25ibG9jay5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNvY2tmaWx0LW5vbmJsb2NrLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgZmlgCisKK3NvY2tmaWx0LXN0cmVxdWFsLm86ICQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzb2NrZmlsdC1zdHJlcXVhbC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvc29ja2ZpbHQtc3RyZXF1YWwuVHBvIiAtYyAtbyBzb2NrZmlsdC1zdHJlcXVhbC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtc3RyZXF1YWwuVHBvIiAiJChERVBESVIpL3NvY2tmaWx0LXN0cmVxdWFsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LXN0cmVxdWFsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnIG9iamVjdD0nc29ja2ZpbHQtc3RyZXF1YWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc29ja2ZpbHQtc3RyZXF1YWwubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYworCitzb2NrZmlsdC1zdHJlcXVhbC5vYmo6ICQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzb2NrZmlsdC1zdHJlcXVhbC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zb2NrZmlsdC1zdHJlcXVhbC5UcG8iIC1jIC1vIHNvY2tmaWx0LXN0cmVxdWFsLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtc3RyZXF1YWwuVHBvIiAiJChERVBESVIpL3NvY2tmaWx0LXN0cmVxdWFsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LXN0cmVxdWFsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnIG9iamVjdD0nc29ja2ZpbHQtc3RyZXF1YWwub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzb2NrZmlsdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzb2NrZmlsdC1zdHJlcXVhbC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYyc7IGZpYAorCitzb2NrZmlsdC1zdHJ0b29mZnQubzogJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzb2NrZmlsdC1zdHJ0b29mZnQubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3NvY2tmaWx0LXN0cnRvb2ZmdC5UcG8iIC1jIC1vIHNvY2tmaWx0LXN0cnRvb2ZmdC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zb2NrZmlsdC1zdHJ0b29mZnQuVHBvIiAiJChERVBESVIpL3NvY2tmaWx0LXN0cnRvb2ZmdC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zb2NrZmlsdC1zdHJ0b29mZnQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnIG9iamVjdD0nc29ja2ZpbHQtc3RydG9vZmZ0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNvY2tmaWx0LXN0cnRvb2ZmdC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMKKworc29ja2ZpbHQtc3RydG9vZmZ0Lm9iajogJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzb2NrZmlsdC1zdHJ0b29mZnQub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvc29ja2ZpbHQtc3RydG9vZmZ0LlRwbyIgLWMgLW8gc29ja2ZpbHQtc3RydG9vZmZ0Lm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtc3RydG9vZmZ0LlRwbyIgIiQoREVQRElSKS9zb2NrZmlsdC1zdHJ0b29mZnQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvc29ja2ZpbHQtc3RydG9vZmZ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJyBvYmplY3Q9J3NvY2tmaWx0LXN0cnRvb2ZmdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNvY2tmaWx0LXN0cnRvb2ZmdC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IGZpYAorCitzb2NrZmlsdC10aW1ldmFsLm86ICQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNvY2tmaWx0LXRpbWV2YWwubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3NvY2tmaWx0LXRpbWV2YWwuVHBvIiAtYyAtbyBzb2NrZmlsdC10aW1ldmFsLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtdGltZXZhbC5UcG8iICIkKERFUERJUikvc29ja2ZpbHQtdGltZXZhbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zb2NrZmlsdC10aW1ldmFsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYycgb2JqZWN0PSdzb2NrZmlsdC10aW1ldmFsLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNvY2tmaWx0LXRpbWV2YWwubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMKKworc29ja2ZpbHQtdGltZXZhbC5vYmo6ICQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNvY2tmaWx0LXRpbWV2YWwub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvc29ja2ZpbHQtdGltZXZhbC5UcG8iIC1jIC1vIHNvY2tmaWx0LXRpbWV2YWwub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zb2NrZmlsdC10aW1ldmFsLlRwbyIgIiQoREVQRElSKS9zb2NrZmlsdC10aW1ldmFsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LXRpbWV2YWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJyBvYmplY3Q9J3NvY2tmaWx0LXRpbWV2YWwub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzb2NrZmlsdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzb2NrZmlsdC10aW1ldmFsLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgZmlgCisKK3NvY2tmaWx0LXdhcm5sZXNzLm86ICQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzb2NrZmlsdC13YXJubGVzcy5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvc29ja2ZpbHQtd2Fybmxlc3MuVHBvIiAtYyAtbyBzb2NrZmlsdC13YXJubGVzcy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtd2Fybmxlc3MuVHBvIiAiJChERVBESVIpL3NvY2tmaWx0LXdhcm5sZXNzLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LXdhcm5sZXNzLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIG9iamVjdD0nc29ja2ZpbHQtd2Fybmxlc3MubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc29ja2ZpbHQtd2Fybmxlc3MubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYworCitzb2NrZmlsdC13YXJubGVzcy5vYmo6ICQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzb2NrZmlsdC13YXJubGVzcy5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zb2NrZmlsdC13YXJubGVzcy5UcG8iIC1jIC1vIHNvY2tmaWx0LXdhcm5sZXNzLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtd2Fybmxlc3MuVHBvIiAiJChERVBESVIpL3NvY2tmaWx0LXdhcm5sZXNzLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LXdhcm5sZXNzLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIG9iamVjdD0nc29ja2ZpbHQtd2Fybmxlc3Mub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzb2NrZmlsdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzb2NrZmlsdC13YXJubGVzcy5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGZpYAorCitzb2NrZmlsdC1nZXRwYXJ0Lm86IGdldHBhcnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNvY2tmaWx0LWdldHBhcnQubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3NvY2tmaWx0LWdldHBhcnQuVHBvIiAtYyAtbyBzb2NrZmlsdC1nZXRwYXJ0Lm8gYHRlc3QgLWYgJ2dldHBhcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2V0cGFydC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtZ2V0cGFydC5UcG8iICIkKERFUERJUikvc29ja2ZpbHQtZ2V0cGFydC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zb2NrZmlsdC1nZXRwYXJ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dldHBhcnQuYycgb2JqZWN0PSdzb2NrZmlsdC1nZXRwYXJ0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNvY2tmaWx0LWdldHBhcnQubyBgdGVzdCAtZiAnZ2V0cGFydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZXRwYXJ0LmMKKworc29ja2ZpbHQtZ2V0cGFydC5vYmo6IGdldHBhcnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNvY2tmaWx0LWdldHBhcnQub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvc29ja2ZpbHQtZ2V0cGFydC5UcG8iIC1jIC1vIHNvY2tmaWx0LWdldHBhcnQub2JqIGBpZiB0ZXN0IC1mICdnZXRwYXJ0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2V0cGFydC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZXRwYXJ0LmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zb2NrZmlsdC1nZXRwYXJ0LlRwbyIgIiQoREVQRElSKS9zb2NrZmlsdC1nZXRwYXJ0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LWdldHBhcnQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ2V0cGFydC5jJyBvYmplY3Q9J3NvY2tmaWx0LWdldHBhcnQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzb2NrZmlsdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzb2NrZmlsdC1nZXRwYXJ0Lm9iaiBgaWYgdGVzdCAtZiAnZ2V0cGFydC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dldHBhcnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2V0cGFydC5jJzsgZmlgCisKK3NvY2tmaWx0LWJhc2U2NC5vOiAkKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNvY2tmaWx0LWJhc2U2NC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvc29ja2ZpbHQtYmFzZTY0LlRwbyIgLWMgLW8gc29ja2ZpbHQtYmFzZTY0Lm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3NvY2tmaWx0LWJhc2U2NC5UcG8iICIkKERFUERJUikvc29ja2ZpbHQtYmFzZTY0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LWJhc2U2NC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYycgb2JqZWN0PSdzb2NrZmlsdC1iYXNlNjQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc29ja2ZpbHQtYmFzZTY0Lm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYworCitzb2NrZmlsdC1iYXNlNjQub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNvY2tmaWx0LWJhc2U2NC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zb2NrZmlsdC1iYXNlNjQuVHBvIiAtYyAtbyBzb2NrZmlsdC1iYXNlNjQub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zb2NrZmlsdC1iYXNlNjQuVHBvIiAiJChERVBESVIpL3NvY2tmaWx0LWJhc2U2NC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zb2NrZmlsdC1iYXNlNjQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnIG9iamVjdD0nc29ja2ZpbHQtYmFzZTY0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc29ja2ZpbHQtYmFzZTY0Lm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgZmlgCisKK3NvY2tmaWx0LW1lbWRlYnVnLm86ICQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzb2NrZmlsdC1tZW1kZWJ1Zy5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvc29ja2ZpbHQtbWVtZGVidWcuVHBvIiAtYyAtbyBzb2NrZmlsdC1tZW1kZWJ1Zy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtbWVtZGVidWcuVHBvIiAiJChERVBESVIpL3NvY2tmaWx0LW1lbWRlYnVnLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LW1lbWRlYnVnLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnIG9iamVjdD0nc29ja2ZpbHQtbWVtZGVidWcubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc29ja2ZpbHQtbWVtZGVidWcubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYworCitzb2NrZmlsdC1tZW1kZWJ1Zy5vYmo6ICQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzb2NrZmlsdC1tZW1kZWJ1Zy5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zb2NrZmlsdC1tZW1kZWJ1Zy5UcG8iIC1jIC1vIHNvY2tmaWx0LW1lbWRlYnVnLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtbWVtZGVidWcuVHBvIiAiJChERVBESVIpL3NvY2tmaWx0LW1lbWRlYnVnLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LW1lbWRlYnVnLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnIG9iamVjdD0nc29ja2ZpbHQtbWVtZGVidWcub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzb2NrZmlsdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzb2NrZmlsdC1tZW1kZWJ1Zy5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYyc7IGZpYAorCitzb2NrZmlsdC11dGlsLm86IHV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNvY2tmaWx0LXV0aWwubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3NvY2tmaWx0LXV0aWwuVHBvIiAtYyAtbyBzb2NrZmlsdC11dGlsLm8gYHRlc3QgLWYgJ3V0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdXRpbC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtdXRpbC5UcG8iICIkKERFUERJUikvc29ja2ZpbHQtdXRpbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zb2NrZmlsdC11dGlsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3V0aWwuYycgb2JqZWN0PSdzb2NrZmlsdC11dGlsLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNvY2tmaWx0LXV0aWwubyBgdGVzdCAtZiAndXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGlsLmMKKworc29ja2ZpbHQtdXRpbC5vYmo6IHV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNvY2tmaWx0LXV0aWwub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvc29ja2ZpbHQtdXRpbC5UcG8iIC1jIC1vIHNvY2tmaWx0LXV0aWwub2JqIGBpZiB0ZXN0IC1mICd1dGlsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndXRpbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS91dGlsLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zb2NrZmlsdC11dGlsLlRwbyIgIiQoREVQRElSKS9zb2NrZmlsdC11dGlsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LXV0aWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ndXRpbC5jJyBvYmplY3Q9J3NvY2tmaWx0LXV0aWwub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzb2NrZmlsdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzb2NrZmlsdC11dGlsLm9iaiBgaWYgdGVzdCAtZiAndXRpbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3V0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdXRpbC5jJzsgZmlgCisKK3NvY2tmaWx0LXNvY2tmaWx0Lm86IHNvY2tmaWx0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzb2NrZmlsdC1zb2NrZmlsdC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvc29ja2ZpbHQtc29ja2ZpbHQuVHBvIiAtYyAtbyBzb2NrZmlsdC1zb2NrZmlsdC5vIGB0ZXN0IC1mICdzb2NrZmlsdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bzb2NrZmlsdC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtc29ja2ZpbHQuVHBvIiAiJChERVBESVIpL3NvY2tmaWx0LXNvY2tmaWx0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LXNvY2tmaWx0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3NvY2tmaWx0LmMnIG9iamVjdD0nc29ja2ZpbHQtc29ja2ZpbHQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc29ja2ZpbHRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc29ja2ZpbHQtc29ja2ZpbHQubyBgdGVzdCAtZiAnc29ja2ZpbHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc29ja2ZpbHQuYworCitzb2NrZmlsdC1zb2NrZmlsdC5vYmo6IHNvY2tmaWx0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzb2NrZmlsdC1zb2NrZmlsdC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zb2NrZmlsdC1zb2NrZmlsdC5UcG8iIC1jIC1vIHNvY2tmaWx0LXNvY2tmaWx0Lm9iaiBgaWYgdGVzdCAtZiAnc29ja2ZpbHQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzb2NrZmlsdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zb2NrZmlsdC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtc29ja2ZpbHQuVHBvIiAiJChERVBESVIpL3NvY2tmaWx0LXNvY2tmaWx0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3NvY2tmaWx0LXNvY2tmaWx0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3NvY2tmaWx0LmMnIG9iamVjdD0nc29ja2ZpbHQtc29ja2ZpbHQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzb2NrZmlsdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzb2NrZmlsdC1zb2NrZmlsdC5vYmogYGlmIHRlc3QgLWYgJ3NvY2tmaWx0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc29ja2ZpbHQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc29ja2ZpbHQuYyc7IGZpYAorCitzb2NrZmlsdC1pbmV0X3B0b24ubzogJCh0b3Bfc3JjZGlyKS9saWIvaW5ldF9wdG9uLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzb2NrZmlsdC1pbmV0X3B0b24ubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3NvY2tmaWx0LWluZXRfcHRvbi5UcG8iIC1jIC1vIHNvY2tmaWx0LWluZXRfcHRvbi5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9pbmV0X3B0b24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvaW5ldF9wdG9uLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zb2NrZmlsdC1pbmV0X3B0b24uVHBvIiAiJChERVBESVIpL3NvY2tmaWx0LWluZXRfcHRvbi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zb2NrZmlsdC1pbmV0X3B0b24uVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvaW5ldF9wdG9uLmMnIG9iamVjdD0nc29ja2ZpbHQtaW5ldF9wdG9uLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNvY2tmaWx0LWluZXRfcHRvbi5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9pbmV0X3B0b24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvaW5ldF9wdG9uLmMKKworc29ja2ZpbHQtaW5ldF9wdG9uLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvaW5ldF9wdG9uLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzb2NrZmlsdC1pbmV0X3B0b24ub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvc29ja2ZpbHQtaW5ldF9wdG9uLlRwbyIgLWMgLW8gc29ja2ZpbHQtaW5ldF9wdG9uLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvaW5ldF9wdG9uLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvaW5ldF9wdG9uLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc29ja2ZpbHQtaW5ldF9wdG9uLlRwbyIgIiQoREVQRElSKS9zb2NrZmlsdC1pbmV0X3B0b24uUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvc29ja2ZpbHQtaW5ldF9wdG9uLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jJyBvYmplY3Q9J3NvY2tmaWx0LWluZXRfcHRvbi5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNvY2tmaWx0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNvY2tmaWx0LWluZXRfcHRvbi5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9pbmV0X3B0b24uYyc7IGZpYAorCitzd3MtbXByaW50Zi5vOiAkKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3dzLW1wcmludGYubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3N3cy1tcHJpbnRmLlRwbyIgLWMgLW8gc3dzLW1wcmludGYubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zd3MtbXByaW50Zi5UcG8iICIkKERFUERJUikvc3dzLW1wcmludGYuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvc3dzLW1wcmludGYuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJyBvYmplY3Q9J3N3cy1tcHJpbnRmLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzd3MtbXByaW50Zi5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL21wcmludGYuYworCitzd3MtbXByaW50Zi5vYmo6ICQodG9wX3NyY2RpcikvbGliL21wcmludGYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzd3MtbXByaW50Zi5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zd3MtbXByaW50Zi5UcG8iIC1jIC1vIHN3cy1tcHJpbnRmLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc3dzLW1wcmludGYuVHBvIiAiJChERVBESVIpL3N3cy1tcHJpbnRmLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3N3cy1tcHJpbnRmLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYycgb2JqZWN0PSdzd3MtbXByaW50Zi5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzd3MtbXByaW50Zi5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IGZpYAorCitzd3Mtbm9uYmxvY2subzogJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzd3Mtbm9uYmxvY2subyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3N3cy1ub25ibG9jay5UcG8iIC1jIC1vIHN3cy1ub25ibG9jay5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc3dzLW5vbmJsb2NrLlRwbyIgIiQoREVQRElSKS9zd3Mtbm9uYmxvY2suUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvc3dzLW5vbmJsb2NrLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnIG9iamVjdD0nc3dzLW5vbmJsb2NrLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzd3Mtbm9uYmxvY2subyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYworCitzd3Mtbm9uYmxvY2sub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN3cy1ub25ibG9jay5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zd3Mtbm9uYmxvY2suVHBvIiAtYyAtbyBzd3Mtbm9uYmxvY2sub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zd3Mtbm9uYmxvY2suVHBvIiAiJChERVBESVIpL3N3cy1ub25ibG9jay5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zd3Mtbm9uYmxvY2suVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYycgb2JqZWN0PSdzd3Mtbm9uYmxvY2sub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3dzLW5vbmJsb2NrLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgZmlgCisKK3N3cy1zdHJlcXVhbC5vOiAkKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN3cy1zdHJlcXVhbC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvc3dzLXN0cmVxdWFsLlRwbyIgLWMgLW8gc3dzLXN0cmVxdWFsLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zd3Mtc3RyZXF1YWwuVHBvIiAiJChERVBESVIpL3N3cy1zdHJlcXVhbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zd3Mtc3RyZXF1YWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYycgb2JqZWN0PSdzd3Mtc3RyZXF1YWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN3cy1zdHJlcXVhbC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jCisKK3N3cy1zdHJlcXVhbC5vYmo6ICQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3dzLXN0cmVxdWFsLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3N3cy1zdHJlcXVhbC5UcG8iIC1jIC1vIHN3cy1zdHJlcXVhbC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3N3cy1zdHJlcXVhbC5UcG8iICIkKERFUERJUikvc3dzLXN0cmVxdWFsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3N3cy1zdHJlcXVhbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJyBvYmplY3Q9J3N3cy1zdHJlcXVhbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzd3Mtc3RyZXF1YWwub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyBmaWAKKworc3dzLXN0cnRvb2ZmdC5vOiAkKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzd3Mtc3RydG9vZmZ0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zd3Mtc3RydG9vZmZ0LlRwbyIgLWMgLW8gc3dzLXN0cnRvb2ZmdC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zd3Mtc3RydG9vZmZ0LlRwbyIgIiQoREVQRElSKS9zd3Mtc3RydG9vZmZ0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3N3cy1zdHJ0b29mZnQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnIG9iamVjdD0nc3dzLXN0cnRvb2ZmdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3dzLXN0cnRvb2ZmdC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMKKworc3dzLXN0cnRvb2ZmdC5vYmo6ICQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN3cy1zdHJ0b29mZnQub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvc3dzLXN0cnRvb2ZmdC5UcG8iIC1jIC1vIHN3cy1zdHJ0b29mZnQub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zd3Mtc3RydG9vZmZ0LlRwbyIgIiQoREVQRElSKS9zd3Mtc3RydG9vZmZ0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3N3cy1zdHJ0b29mZnQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnIG9iamVjdD0nc3dzLXN0cnRvb2ZmdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzd3Mtc3RydG9vZmZ0Lm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgZmlgCisKK3N3cy10aW1ldmFsLm86ICQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzd3MtdGltZXZhbC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvc3dzLXRpbWV2YWwuVHBvIiAtYyAtbyBzd3MtdGltZXZhbC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3N3cy10aW1ldmFsLlRwbyIgIiQoREVQRElSKS9zd3MtdGltZXZhbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zd3MtdGltZXZhbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnIG9iamVjdD0nc3dzLXRpbWV2YWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN3cy10aW1ldmFsLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jCisKK3N3cy10aW1ldmFsLm9iajogJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN3cy10aW1ldmFsLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3N3cy10aW1ldmFsLlRwbyIgLWMgLW8gc3dzLXRpbWV2YWwub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zd3MtdGltZXZhbC5UcG8iICIkKERFUERJUikvc3dzLXRpbWV2YWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvc3dzLXRpbWV2YWwuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJyBvYmplY3Q9J3N3cy10aW1ldmFsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN3cy10aW1ldmFsLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgZmlgCisKK3N3cy13YXJubGVzcy5vOiAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN3cy13YXJubGVzcy5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvc3dzLXdhcm5sZXNzLlRwbyIgLWMgLW8gc3dzLXdhcm5sZXNzLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zd3Mtd2Fybmxlc3MuVHBvIiAiJChERVBESVIpL3N3cy13YXJubGVzcy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zd3Mtd2Fybmxlc3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgb2JqZWN0PSdzd3Mtd2Fybmxlc3MubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN3cy13YXJubGVzcy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCisKK3N3cy13YXJubGVzcy5vYmo6ICQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3dzLXdhcm5sZXNzLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3N3cy13YXJubGVzcy5UcG8iIC1jIC1vIHN3cy13YXJubGVzcy5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3N3cy13YXJubGVzcy5UcG8iICIkKERFUERJUikvc3dzLXdhcm5sZXNzLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3N3cy13YXJubGVzcy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyBvYmplY3Q9J3N3cy13YXJubGVzcy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzd3Mtd2Fybmxlc3Mub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBmaWAKKworc3dzLWdldHBhcnQubzogZ2V0cGFydC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN3cy1nZXRwYXJ0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zd3MtZ2V0cGFydC5UcG8iIC1jIC1vIHN3cy1nZXRwYXJ0Lm8gYHRlc3QgLWYgJ2dldHBhcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2V0cGFydC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc3dzLWdldHBhcnQuVHBvIiAiJChERVBESVIpL3N3cy1nZXRwYXJ0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3N3cy1nZXRwYXJ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dldHBhcnQuYycgb2JqZWN0PSdzd3MtZ2V0cGFydC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3dzLWdldHBhcnQubyBgdGVzdCAtZiAnZ2V0cGFydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZXRwYXJ0LmMKKworc3dzLWdldHBhcnQub2JqOiBnZXRwYXJ0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3dzLWdldHBhcnQub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvc3dzLWdldHBhcnQuVHBvIiAtYyAtbyBzd3MtZ2V0cGFydC5vYmogYGlmIHRlc3QgLWYgJ2dldHBhcnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZXRwYXJ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dldHBhcnQuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3N3cy1nZXRwYXJ0LlRwbyIgIiQoREVQRElSKS9zd3MtZ2V0cGFydC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zd3MtZ2V0cGFydC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnZXRwYXJ0LmMnIG9iamVjdD0nc3dzLWdldHBhcnQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3dzLWdldHBhcnQub2JqIGBpZiB0ZXN0IC1mICdnZXRwYXJ0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2V0cGFydC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZXRwYXJ0LmMnOyBmaWAKKworc3dzLWJhc2U2NC5vOiAkKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzd3MtYmFzZTY0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zd3MtYmFzZTY0LlRwbyIgLWMgLW8gc3dzLWJhc2U2NC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zd3MtYmFzZTY0LlRwbyIgIiQoREVQRElSKS9zd3MtYmFzZTY0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3N3cy1iYXNlNjQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnIG9iamVjdD0nc3dzLWJhc2U2NC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3dzLWJhc2U2NC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMKKworc3dzLWJhc2U2NC5vYmo6ICQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN3cy1iYXNlNjQub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvc3dzLWJhc2U2NC5UcG8iIC1jIC1vIHN3cy1iYXNlNjQub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zd3MtYmFzZTY0LlRwbyIgIiQoREVQRElSKS9zd3MtYmFzZTY0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3N3cy1iYXNlNjQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnIG9iamVjdD0nc3dzLWJhc2U2NC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzd3MtYmFzZTY0Lm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgZmlgCisKK3N3cy1tZW1kZWJ1Zy5vOiAkKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN3cy1tZW1kZWJ1Zy5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvc3dzLW1lbWRlYnVnLlRwbyIgLWMgLW8gc3dzLW1lbWRlYnVnLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zd3MtbWVtZGVidWcuVHBvIiAiJChERVBESVIpL3N3cy1tZW1kZWJ1Zy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zd3MtbWVtZGVidWcuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYycgb2JqZWN0PSdzd3MtbWVtZGVidWcubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN3cy1tZW1kZWJ1Zy5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jCisKK3N3cy1tZW1kZWJ1Zy5vYmo6ICQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3dzLW1lbWRlYnVnLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3N3cy1tZW1kZWJ1Zy5UcG8iIC1jIC1vIHN3cy1tZW1kZWJ1Zy5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3N3cy1tZW1kZWJ1Zy5UcG8iICIkKERFUERJUikvc3dzLW1lbWRlYnVnLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3N3cy1tZW1kZWJ1Zy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJyBvYmplY3Q9J3N3cy1tZW1kZWJ1Zy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzd3MtbWVtZGVidWcub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyBmaWAKKworc3dzLXV0aWwubzogdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN3cy11dGlsLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zd3MtdXRpbC5UcG8iIC1jIC1vIHN3cy11dGlsLm8gYHRlc3QgLWYgJ3V0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdXRpbC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc3dzLXV0aWwuVHBvIiAiJChERVBESVIpL3N3cy11dGlsLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3N3cy11dGlsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3V0aWwuYycgb2JqZWN0PSdzd3MtdXRpbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3dzLXV0aWwubyBgdGVzdCAtZiAndXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGlsLmMKKworc3dzLXV0aWwub2JqOiB1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3dzLXV0aWwub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvc3dzLXV0aWwuVHBvIiAtYyAtbyBzd3MtdXRpbC5vYmogYGlmIHRlc3QgLWYgJ3V0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd1dGlsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3V0aWwuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3N3cy11dGlsLlRwbyIgIiQoREVQRElSKS9zd3MtdXRpbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zd3MtdXRpbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd1dGlsLmMnIG9iamVjdD0nc3dzLXV0aWwub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3dzLXV0aWwub2JqIGBpZiB0ZXN0IC1mICd1dGlsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndXRpbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS91dGlsLmMnOyBmaWAKKworc3dzLXN3cy5vOiBzd3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzd3Mtc3dzLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS9zd3Mtc3dzLlRwbyIgLWMgLW8gc3dzLXN3cy5vIGB0ZXN0IC1mICdzd3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3dzLmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zd3Mtc3dzLlRwbyIgIiQoREVQRElSKS9zd3Mtc3dzLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3N3cy1zd3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc3dzLmMnIG9iamVjdD0nc3dzLXN3cy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3dzLXN3cy5vIGB0ZXN0IC1mICdzd3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3dzLmMKKworc3dzLXN3cy5vYmo6IHN3cy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN3cy1zd3Mub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvc3dzLXN3cy5UcG8iIC1jIC1vIHN3cy1zd3Mub2JqIGBpZiB0ZXN0IC1mICdzd3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzd3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc3dzLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9zd3Mtc3dzLlRwbyIgIiQoREVQRElSKS9zd3Mtc3dzLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3N3cy1zd3MuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc3dzLmMnIG9iamVjdD0nc3dzLXN3cy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzd3Mtc3dzLm9iaiBgaWYgdGVzdCAtZiAnc3dzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc3dzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3N3cy5jJzsgZmlgCisKK3N3cy1pbmV0X3B0b24ubzogJCh0b3Bfc3JjZGlyKS9saWIvaW5ldF9wdG9uLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN3c19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3dzLWluZXRfcHRvbi5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvc3dzLWluZXRfcHRvbi5UcG8iIC1jIC1vIHN3cy1pbmV0X3B0b24ubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvaW5ldF9wdG9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc3dzLWluZXRfcHRvbi5UcG8iICIkKERFUERJUikvc3dzLWluZXRfcHRvbi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zd3MtaW5ldF9wdG9uLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jJyBvYmplY3Q9J3N3cy1pbmV0X3B0b24ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN3cy1pbmV0X3B0b24ubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvaW5ldF9wdG9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jCisKK3N3cy1pbmV0X3B0b24ub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9pbmV0X3B0b24uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3dzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzd3MtaW5ldF9wdG9uLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3N3cy1pbmV0X3B0b24uVHBvIiAtYyAtbyBzd3MtaW5ldF9wdG9uLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvaW5ldF9wdG9uLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvaW5ldF9wdG9uLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvc3dzLWluZXRfcHRvbi5UcG8iICIkKERFUERJUikvc3dzLWluZXRfcHRvbi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS9zd3MtaW5ldF9wdG9uLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jJyBvYmplY3Q9J3N3cy1pbmV0X3B0b24ub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzd3NfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3dzLWluZXRfcHRvbi5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9pbmV0X3B0b24uYyc7IGZpYAorCit0ZnRwZC1tcHJpbnRmLm86ICQodG9wX3NyY2RpcikvbGliL21wcmludGYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGZ0cGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRmdHBkLW1wcmludGYubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3RmdHBkLW1wcmludGYuVHBvIiAtYyAtbyB0ZnRwZC1tcHJpbnRmLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvdGZ0cGQtbXByaW50Zi5UcG8iICIkKERFUERJUikvdGZ0cGQtbXByaW50Zi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC1tcHJpbnRmLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYycgb2JqZWN0PSd0ZnRwZC1tcHJpbnRmLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRmdHBkLW1wcmludGYubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMKKwordGZ0cGQtbXByaW50Zi5vYmo6ICQodG9wX3NyY2RpcikvbGliL21wcmludGYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGZ0cGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRmdHBkLW1wcmludGYub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvdGZ0cGQtbXByaW50Zi5UcG8iIC1jIC1vIHRmdHBkLW1wcmludGYub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS90ZnRwZC1tcHJpbnRmLlRwbyIgIiQoREVQRElSKS90ZnRwZC1tcHJpbnRmLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3RmdHBkLW1wcmludGYuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJyBvYmplY3Q9J3RmdHBkLW1wcmludGYub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZnRwZC1tcHJpbnRmLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL21wcmludGYuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbXByaW50Zi5jJzsgZmlgCisKK3RmdHBkLW5vbmJsb2NrLm86ICQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZnRwZC1ub25ibG9jay5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvdGZ0cGQtbm9uYmxvY2suVHBvIiAtYyAtbyB0ZnRwZC1ub25ibG9jay5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvdGZ0cGQtbm9uYmxvY2suVHBvIiAiJChERVBESVIpL3RmdHBkLW5vbmJsb2NrLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3RmdHBkLW5vbmJsb2NrLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnIG9iamVjdD0ndGZ0cGQtbm9uYmxvY2subycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGZ0cGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGZ0cGQtbm9uYmxvY2subyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYworCit0ZnRwZC1ub25ibG9jay5vYmo6ICQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZnRwZC1ub25ibG9jay5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS90ZnRwZC1ub25ibG9jay5UcG8iIC1jIC1vIHRmdHBkLW5vbmJsb2NrLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvdGZ0cGQtbm9uYmxvY2suVHBvIiAiJChERVBESVIpL3RmdHBkLW5vbmJsb2NrLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3RmdHBkLW5vbmJsb2NrLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnIG9iamVjdD0ndGZ0cGQtbm9uYmxvY2sub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZnRwZC1ub25ibG9jay5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbm9uYmxvY2suYyc7IGZpYAorCit0ZnRwZC1zdHJlcXVhbC5vOiAkKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGZ0cGQtc3RyZXF1YWwubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3RmdHBkLXN0cmVxdWFsLlRwbyIgLWMgLW8gdGZ0cGQtc3RyZXF1YWwubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3RmdHBkLXN0cmVxdWFsLlRwbyIgIiQoREVQRElSKS90ZnRwZC1zdHJlcXVhbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC1zdHJlcXVhbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJyBvYmplY3Q9J3RmdHBkLXN0cmVxdWFsLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRmdHBkLXN0cmVxdWFsLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMKKwordGZ0cGQtc3RyZXF1YWwub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGZ0cGQtc3RyZXF1YWwub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvdGZ0cGQtc3RyZXF1YWwuVHBvIiAtYyAtbyB0ZnRwZC1zdHJlcXVhbC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvc3RyZXF1YWwuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3RmdHBkLXN0cmVxdWFsLlRwbyIgIiQoREVQRElSKS90ZnRwZC1zdHJlcXVhbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC1zdHJlcXVhbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJyBvYmplY3Q9J3RmdHBkLXN0cmVxdWFsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGZ0cGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGZ0cGQtc3RyZXF1YWwub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMnOyBmaWAKKwordGZ0cGQtc3RydG9vZmZ0Lm86ICQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGZ0cGQtc3RydG9vZmZ0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS90ZnRwZC1zdHJ0b29mZnQuVHBvIiAtYyAtbyB0ZnRwZC1zdHJ0b29mZnQubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvdGZ0cGQtc3RydG9vZmZ0LlRwbyIgIiQoREVQRElSKS90ZnRwZC1zdHJ0b29mZnQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvdGZ0cGQtc3RydG9vZmZ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJyBvYmplY3Q9J3RmdHBkLXN0cnRvb2ZmdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZnRwZC1zdHJ0b29mZnQubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jCisKK3RmdHBkLXN0cnRvb2ZmdC5vYmo6ICQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGZ0cGQtc3RydG9vZmZ0Lm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3RmdHBkLXN0cnRvb2ZmdC5UcG8iIC1jIC1vIHRmdHBkLXN0cnRvb2ZmdC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3RmdHBkLXN0cnRvb2ZmdC5UcG8iICIkKERFUERJUikvdGZ0cGQtc3RydG9vZmZ0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL3RmdHBkLXN0cnRvb2ZmdC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYycgb2JqZWN0PSd0ZnRwZC1zdHJ0b29mZnQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZnRwZC1zdHJ0b29mZnQub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvc3RydG9vZmZ0LmMnOyBmaWAKKwordGZ0cGQtdGltZXZhbC5vOiAkKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZnRwZC10aW1ldmFsLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS90ZnRwZC10aW1ldmFsLlRwbyIgLWMgLW8gdGZ0cGQtdGltZXZhbC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3RmdHBkLXRpbWV2YWwuVHBvIiAiJChERVBESVIpL3RmdHBkLXRpbWV2YWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvdGZ0cGQtdGltZXZhbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnIG9iamVjdD0ndGZ0cGQtdGltZXZhbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZnRwZC10aW1ldmFsLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jCisKK3RmdHBkLXRpbWV2YWwub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZnRwZC10aW1ldmFsLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3RmdHBkLXRpbWV2YWwuVHBvIiAtYyAtbyB0ZnRwZC10aW1ldmFsLm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvdGZ0cGQtdGltZXZhbC5UcG8iICIkKERFUERJUikvdGZ0cGQtdGltZXZhbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC10aW1ldmFsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYycgb2JqZWN0PSd0ZnRwZC10aW1ldmFsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGZ0cGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGZ0cGQtdGltZXZhbC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3RpbWV2YWwuYyc7IGZpYAorCit0ZnRwZC13YXJubGVzcy5vOiAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGZ0cGQtd2Fybmxlc3MubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3RmdHBkLXdhcm5sZXNzLlRwbyIgLWMgLW8gdGZ0cGQtd2Fybmxlc3MubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3RmdHBkLXdhcm5sZXNzLlRwbyIgIiQoREVQRElSKS90ZnRwZC13YXJubGVzcy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC13YXJubGVzcy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyBvYmplY3Q9J3RmdHBkLXdhcm5sZXNzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRmdHBkLXdhcm5sZXNzLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKKwordGZ0cGQtd2Fybmxlc3Mub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGZ0cGQtd2Fybmxlc3Mub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvdGZ0cGQtd2Fybmxlc3MuVHBvIiAtYyAtbyB0ZnRwZC13YXJubGVzcy5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvd2Fybmxlc3MuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3RmdHBkLXdhcm5sZXNzLlRwbyIgIiQoREVQRElSKS90ZnRwZC13YXJubGVzcy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC13YXJubGVzcy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJyBvYmplY3Q9J3RmdHBkLXdhcm5sZXNzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGZ0cGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGZ0cGQtd2Fybmxlc3Mub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMnOyBmaWAKKwordGZ0cGQtZ2V0cGFydC5vOiBnZXRwYXJ0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZnRwZC1nZXRwYXJ0Lm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS90ZnRwZC1nZXRwYXJ0LlRwbyIgLWMgLW8gdGZ0cGQtZ2V0cGFydC5vIGB0ZXN0IC1mICdnZXRwYXJ0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdldHBhcnQuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3RmdHBkLWdldHBhcnQuVHBvIiAiJChERVBESVIpL3RmdHBkLWdldHBhcnQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvdGZ0cGQtZ2V0cGFydC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnZXRwYXJ0LmMnIG9iamVjdD0ndGZ0cGQtZ2V0cGFydC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZnRwZC1nZXRwYXJ0Lm8gYHRlc3QgLWYgJ2dldHBhcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2V0cGFydC5jCisKK3RmdHBkLWdldHBhcnQub2JqOiBnZXRwYXJ0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZnRwZC1nZXRwYXJ0Lm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3RmdHBkLWdldHBhcnQuVHBvIiAtYyAtbyB0ZnRwZC1nZXRwYXJ0Lm9iaiBgaWYgdGVzdCAtZiAnZ2V0cGFydC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dldHBhcnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2V0cGFydC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvdGZ0cGQtZ2V0cGFydC5UcG8iICIkKERFUERJUikvdGZ0cGQtZ2V0cGFydC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC1nZXRwYXJ0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dldHBhcnQuYycgb2JqZWN0PSd0ZnRwZC1nZXRwYXJ0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGZ0cGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGZ0cGQtZ2V0cGFydC5vYmogYGlmIHRlc3QgLWYgJ2dldHBhcnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZXRwYXJ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dldHBhcnQuYyc7IGZpYAorCit0ZnRwZC1iYXNlNjQubzogJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZnRwZC1iYXNlNjQubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3RmdHBkLWJhc2U2NC5UcG8iIC1jIC1vIHRmdHBkLWJhc2U2NC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS90ZnRwZC1iYXNlNjQuVHBvIiAiJChERVBESVIpL3RmdHBkLWJhc2U2NC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC1iYXNlNjQuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnIG9iamVjdD0ndGZ0cGQtYmFzZTY0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRmdHBkLWJhc2U2NC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMKKwordGZ0cGQtYmFzZTY0Lm9iajogJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZnRwZC1iYXNlNjQub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvdGZ0cGQtYmFzZTY0LlRwbyIgLWMgLW8gdGZ0cGQtYmFzZTY0Lm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvdGZ0cGQtYmFzZTY0LlRwbyIgIiQoREVQRElSKS90ZnRwZC1iYXNlNjQuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvdGZ0cGQtYmFzZTY0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJyBvYmplY3Q9J3RmdHBkLWJhc2U2NC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRmdHBkLWJhc2U2NC5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL2Jhc2U2NC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8kKHRvcF9zcmNkaXIpL2xpYi9iYXNlNjQuYyc7IGZpYAorCit0ZnRwZC1tZW1kZWJ1Zy5vOiAkKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGZ0cGQtbWVtZGVidWcubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3RmdHBkLW1lbWRlYnVnLlRwbyIgLWMgLW8gdGZ0cGQtbWVtZGVidWcubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3RmdHBkLW1lbWRlYnVnLlRwbyIgIiQoREVQRElSKS90ZnRwZC1tZW1kZWJ1Zy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC1tZW1kZWJ1Zy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJyBvYmplY3Q9J3RmdHBkLW1lbWRlYnVnLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRmdHBkLW1lbWRlYnVnLm8gYHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMKKwordGZ0cGQtbWVtZGVidWcub2JqOiAkKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGZ0cGQtbWVtZGVidWcub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvdGZ0cGQtbWVtZGVidWcuVHBvIiAtYyAtbyB0ZnRwZC1tZW1kZWJ1Zy5vYmogYGlmIHRlc3QgLWYgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS9saWIvbWVtZGVidWcuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3RmdHBkLW1lbWRlYnVnLlRwbyIgIiQoREVQRElSKS90ZnRwZC1tZW1kZWJ1Zy5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC1tZW1kZWJ1Zy5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJyBvYmplY3Q9J3RmdHBkLW1lbWRlYnVnLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGZ0cGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGZ0cGQtbWVtZGVidWcub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL2xpYi9tZW1kZWJ1Zy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMnOyBmaWAKKwordGZ0cGQtdXRpbC5vOiB1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZnRwZC11dGlsLm8gLU1EIC1NUCAtTUYgIiQoREVQRElSKS90ZnRwZC11dGlsLlRwbyIgLWMgLW8gdGZ0cGQtdXRpbC5vIGB0ZXN0IC1mICd1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHV0aWwuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3RmdHBkLXV0aWwuVHBvIiAiJChERVBESVIpL3RmdHBkLXV0aWwuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvdGZ0cGQtdXRpbC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd1dGlsLmMnIG9iamVjdD0ndGZ0cGQtdXRpbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZnRwZC11dGlsLm8gYHRlc3QgLWYgJ3V0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdXRpbC5jCisKK3RmdHBkLXV0aWwub2JqOiB1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZnRwZC11dGlsLm9iaiAtTUQgLU1QIC1NRiAiJChERVBESVIpL3RmdHBkLXV0aWwuVHBvIiAtYyAtbyB0ZnRwZC11dGlsLm9iaiBgaWYgdGVzdCAtZiAndXRpbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3V0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdXRpbC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvdGZ0cGQtdXRpbC5UcG8iICIkKERFUERJUikvdGZ0cGQtdXRpbC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC11dGlsLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3V0aWwuYycgb2JqZWN0PSd0ZnRwZC11dGlsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGZ0cGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGZ0cGQtdXRpbC5vYmogYGlmIHRlc3QgLWYgJ3V0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd1dGlsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3V0aWwuYyc7IGZpYAorCit0ZnRwZC10ZnRwZC5vOiB0ZnRwZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGZ0cGQtdGZ0cGQubyAtTUQgLU1QIC1NRiAiJChERVBESVIpL3RmdHBkLXRmdHBkLlRwbyIgLWMgLW8gdGZ0cGQtdGZ0cGQubyBgdGVzdCAtZiAndGZ0cGQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGZ0cGQuYzsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3RmdHBkLXRmdHBkLlRwbyIgIiQoREVQRElSKS90ZnRwZC10ZnRwZC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC10ZnRwZC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd0ZnRwZC5jJyBvYmplY3Q9J3RmdHBkLXRmdHBkLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRmdHBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRmdHBkLXRmdHBkLm8gYHRlc3QgLWYgJ3RmdHBkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRmdHBkLmMKKwordGZ0cGQtdGZ0cGQub2JqOiB0ZnRwZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZnRwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGZ0cGQtdGZ0cGQub2JqIC1NRCAtTVAgLU1GICIkKERFUERJUikvdGZ0cGQtdGZ0cGQuVHBvIiAtYyAtbyB0ZnRwZC10ZnRwZC5vYmogYGlmIHRlc3QgLWYgJ3RmdHBkLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGZ0cGQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGZ0cGQuYyc7IGZpYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpL3RmdHBkLXRmdHBkLlRwbyIgIiQoREVQRElSKS90ZnRwZC10ZnRwZC5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS90ZnRwZC10ZnRwZC5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd0ZnRwZC5jJyBvYmplY3Q9J3RmdHBkLXRmdHBkLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGZ0cGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGZ0cGQtdGZ0cGQub2JqIGBpZiB0ZXN0IC1mICd0ZnRwZC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RmdHBkLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3RmdHBkLmMnOyBmaWAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWluZm8tYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL01ha2VmaWxlLmluYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9NYWtlZmlsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4YjEwOAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9NYWtlZmlsZS5pbmMKQEAgLTAsMCArMSw3MSBAQAorbm9pbnN0X1BST0dSQU1TID0gZ2V0cGFydCByZXNvbHZlIHJ0c3BkIHNvY2tmaWx0IHN3cyB0ZnRwZCBmYWtlX250bG0KKworQ1VSTFhfU1JDUyA9IFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9tcHJpbnRmLmMgXAorICQodG9wX3NyY2RpcikvbGliL25vbmJsb2NrLmMgXAorICQodG9wX3NyY2RpcikvbGliL3N0cmVxdWFsLmMgXAorICQodG9wX3NyY2RpcikvbGliL3N0cnRvb2ZmdC5jIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi90aW1ldmFsLmMgXAorICQodG9wX3NyY2RpcikvbGliL3dhcm5sZXNzLmMKKworQ1VSTFhfSERSUyA9IFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9jdXJseC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ub25ibG9jay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9zdHJlcXVhbC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9zdHJ0b29mZnQuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvdGltZXZhbC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi93YXJubGVzcy5oCisKK1VTRUZVTCA9IFwKKyBnZXRwYXJ0LmMgXAorIGdldHBhcnQuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvYmFzZTY0LmMgXAorICQodG9wX3NyY2RpcikvbGliL2N1cmxfYmFzZTY0LmggXAorICQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmMgXAorICQodG9wX3NyY2RpcikvbGliL21lbWRlYnVnLmgKKworVVRJTCA9IFwKKyB1dGlsLmMgXAorIHV0aWwuaAorCitnZXRwYXJ0X1NPVVJDRVMgPSAkKENVUkxYX1NSQ1MpICQoQ1VSTFhfSERSUykgJChVU0VGVUwpIFwKKyB0ZXN0cGFydC5jCitnZXRwYXJ0X0xEQUREID0gQFRFU1RfU0VSVkVSX0xJQlNACitnZXRwYXJ0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorCityZXNvbHZlX1NPVVJDRVMgPSAkKENVUkxYX1NSQ1MpICQoQ1VSTFhfSERSUykgJChVU0VGVUwpICQoVVRJTCkgXAorIHJlc29sdmUuYworcmVzb2x2ZV9MREFERCA9IEBURVNUX1NFUlZFUl9MSUJTQAorcmVzb2x2ZV9DRkxBR1MgPSAkKEFNX0NGTEFHUykKKworcnRzcGRfU09VUkNFUyA9ICQoQ1VSTFhfU1JDUykgJChDVVJMWF9IRFJTKSAkKFVTRUZVTCkgJChVVElMKSBcCisgc2VydmVyX3NvY2thZGRyLmggXAorIHJ0c3BkLmMKK3J0c3BkX0xEQUREID0gQFRFU1RfU0VSVkVSX0xJQlNACitydHNwZF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKKworc29ja2ZpbHRfU09VUkNFUyA9ICQoQ1VSTFhfU1JDUykgJChDVVJMWF9IRFJTKSAkKFVTRUZVTCkgJChVVElMKSBcCisgc2VydmVyX3NvY2thZGRyLmggXAorIHNvY2tmaWx0LmMgXAorICQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jCitzb2NrZmlsdF9MREFERCA9IEBURVNUX1NFUlZFUl9MSUJTQAorc29ja2ZpbHRfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCisKK3N3c19TT1VSQ0VTID0gJChDVVJMWF9TUkNTKSAkKENVUkxYX0hEUlMpICQoVVNFRlVMKSAkKFVUSUwpIFwKKyBzZXJ2ZXJfc29ja2FkZHIuaCBcCisgc3dzLmMgXAorICQodG9wX3NyY2RpcikvbGliL2luZXRfcHRvbi5jCitzd3NfTERBREQgPSBAVEVTVF9TRVJWRVJfTElCU0AKK3N3c19DRkxBR1MgPSAkKEFNX0NGTEFHUykKKwordGZ0cGRfU09VUkNFUyA9ICQoQ1VSTFhfU1JDUykgJChDVVJMWF9IRFJTKSAkKFVTRUZVTCkgJChVVElMKSBcCisgc2VydmVyX3NvY2thZGRyLmggXAorIHRmdHBkLmMgXAorIHRmdHAuaAordGZ0cGRfTERBREQgPSBAVEVTVF9TRVJWRVJfTElCU0AKK3RmdHBkX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorCitmYWtlX250bG1fU09VUkNFUyA9ICQoQ1VSTFhfU1JDUykgJChDVVJMWF9IRFJTKSAkKFVTRUZVTCkgJChVVElMKSBcCisgZmFrZV9udGxtLmMKK2Zha2VfbnRsbV9MREFERCA9IEBURVNUX1NFUlZFUl9MSUJTQAorZmFrZV9udGxtX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL2Jhc2U2NC5wbCBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9iYXNlNjQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhYjFmYQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9iYXNlNjQucGwKQEAgLTAsMCArMSw5IEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKKworbXkgJGJ1ZjsKK3doaWxlKHJlYWQoU1RESU4sICRidWYsIDYwKjU3KSkgeworICAgIG15ICRlbmMgPSBlbmNvZGVfYmFzZTY0KCRidWYpOworICAgIHByaW50ICIkZW5jIjsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9mYWtlX250bG0uYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9mYWtlX250bG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmVkNTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL2Zha2VfbnRsbS5jCkBAIC0wLDAgKzEsMjgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBNYW5keSBXdSwgPG1hbmR5Lnd1QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGlzIGlzIGEgZmFrZSBudGxtX2F1dGgsIHdoaWNoIGlzIHVzZWQgZm9yIHRlc3RpbmcgTlRMTSBzaW5nbGUtc2lnbi1vbi4KKyAqIFdoZW4gREVCVUdCVUlMRCBpcyBkZWZpbmVkLCBsaWJjdXJsIGludm9rZSB0aGlzIHRvb2wgaW5zdGVhZCBvZiByZWFsIHdpbmJpbmQKKyAqIGRhZW1vbiBoZWxwZXIgL3Vzci9iaW4vbnRsbV9hdXRoLiBUaGlzIHRvb2wgd2lsbCBhY2NlcHQgY29tbWFuZHMgYW5kCisgKiByZXNwb25zZXMgd2l0aCBhIHByZS13cml0dGVuIHN0cmluZyBzYXZlZCBpbiB0ZXN0IGNhc2UgdGVzdDIwMDUuCisgKi8KKworI2RlZmluZSBDVVJMX05PX09MRElFUworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKKyNpbmNsdWRlICJjdXJseC5oIiAvKiBmcm9tIHRoZSBwcml2YXRlIGxpYiBkaXIgKi8KKyNpbmNsdWRlICJnZXRwYXJ0LmgiCisjaW5jbHVkZSAidXRpbC5oIgorCisvKiBpbmNsdWRlIG1lbWRlYnVnLmggbGFzdCAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZm5kZWYgREVGQVVMVF9MT0dGSUxFCisjZGVmaW5lIERFRkFVTFRfTE9HRklMRSAibG9nL2Zha2VfbnRsbS5sb2ciCisjZW5kaWYKKworY29uc3QgY2hhciAqc2VydmVybG9nZmlsZSA9IERFRkFVTFRfTE9HRklMRTsKKworLyoKKyAqIFJldHVybnMgYW4gYWxsb2NhdGVkIGJ1ZmZlciB3aXRoIHByaW50YWJsZSByZXByZXNlbnRhdGlvbiBvZiBpbnB1dAorICogYnVmZmVyIGNvbnRlbnRzIG9yIHJldHVybnMgTlVMTCBvbiBvdXQgb2YgbWVtb3J5IGNvbmRpdGlvbi4KKyAqLworc3RhdGljIGNoYXIgKnByaW50YWJsZShjaGFyICppbmJ1Ziwgc2l6ZV90IGlubGVuZ3RoKQoreworICBjaGFyICpvdXRidWY7CisgIGNoYXIgKm5ld2J1ZjsKKyAgc2l6ZV90IG5ld3NpemU7CisgIHNpemVfdCBvdXRzaXplOworICBzaXplX3Qgb3V0aW5jciA9IDA7CisgIHNpemVfdCBpLCBvID0gMDsKKworI2RlZmluZSBIRVhfRk1UX1NUUiAgIlsweCUwMlhdIgorI2RlZmluZSBIRVhfU1RSX0xFTiAgNgorI2RlZmluZSBOT1RISU5HX1NUUiAgIltOT1RISU5HXSIKKyNkZWZpbmUgTk9USElOR19MRU4gIDkKKworICBpZighaW5sZW5ndGgpCisgICAgaW5sZW5ndGggPSBzdHJsZW4oaW5idWYpOworCisgIGlmKGlubGVuZ3RoKSB7CisgICAgb3V0aW5jciA9ICgoaW5sZW5ndGgvMikgPCAoSEVYX1NUUl9MRU4rMSkpID8gSEVYX1NUUl9MRU4rMSA6IGlubGVuZ3RoLzI7CisgICAgb3V0c2l6ZSA9IGlubGVuZ3RoICsgb3V0aW5jcjsKKyAgfQorICBlbHNlCisgICAgb3V0c2l6ZSA9IE5PVEhJTkdfTEVOICsgMTsKKworICBvdXRidWYgPSBtYWxsb2Mob3V0c2l6ZSk7CisgIGlmKCFvdXRidWYpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYoIWlubGVuZ3RoKSB7CisgICAgc3ByaW50Zigmb3V0YnVmWzBdLCAiJXMiLCBOT1RISU5HX1NUUik7CisgICAgcmV0dXJuIG91dGJ1ZjsKKyAgfQorCisgIGZvcihpPTA7IGk8aW5sZW5ndGg7IGkrKykgeworCisgICAgaWYobyA+IG91dHNpemUgLSAoSEVYX1NUUl9MRU4gKyAxKSkgeworICAgICAgbmV3c2l6ZSA9IG91dHNpemUgKyBvdXRpbmNyOworICAgICAgbmV3YnVmID0gcmVhbGxvYyhvdXRidWYsIG5ld3NpemUpOworICAgICAgaWYoIW5ld2J1ZikgeworICAgICAgICBmcmVlKG91dGJ1Zik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorICAgICAgb3V0YnVmID0gbmV3YnVmOworICAgICAgb3V0c2l6ZSA9IG5ld3NpemU7CisgICAgfQorCisgICAgaWYoKGluYnVmW2ldID4gMHgyMCkgJiYgKGluYnVmW2ldIDwgMHg3RikpIHsKKyAgICAgIG91dGJ1ZltvXSA9IGluYnVmW2ldOworICAgICAgbysrOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHNwcmludGYoJm91dGJ1ZltvXSwgSEVYX0ZNVF9TVFIsIGluYnVmW2ldKTsKKyAgICAgIG8gKz0gSEVYX1NUUl9MRU47CisgICAgfQorCisgIH0KKyAgb3V0YnVmW29dID0gJ1wwJzsKKworICByZXR1cm4gb3V0YnVmOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBjaGFyIGJ1ZlsxMDI0XTsKKyAgRklMRSAqc3RyZWFtOworICBjaGFyICpmaWxlbmFtZTsKKyAgaW50IGVycm9yOworICBjaGFyICp0eXBlMV9pbnB1dCA9IE5VTEwsICp0eXBlM19pbnB1dCA9IE5VTEw7CisgIGNoYXIgKnR5cGUxX291dHB1dCA9IE5VTEwsICp0eXBlM19vdXRwdXQgPSBOVUxMOworICBzaXplX3Qgc2l6ZSA9IDA7CisgIGxvbmcgdGVzdG51bTsKKyAgY29uc3QgY2hhciAqZW52OworICBpbnQgYXJnID0gMTsKKyAgY2hhciAqaGVscGVyX3VzZXIgPSAoY2hhciAqKSJ1bmtub3duIjsKKyAgY2hhciAqaGVscGVyX3Byb3RvID0gKGNoYXIgKikidW5rbm93biI7CisgIGNoYXIgKmhlbHBlcl9kb21haW4gPSAoY2hhciAqKSJ1bmtub3duIjsKKyAgYm9vbCB1c2VfY2FjaGVkX2NyZWRzID0gRkFMU0U7CisgIGNoYXIgKm1zZ2J1ZjsKKworICBidWZbMF0gPSAnXDAnOworCisgIHdoaWxlKGFyZ2MgPiBhcmcpIHsKKyAgICBpZighc3RyY21wKCItLXVzZS1jYWNoZWQtY3JlZHMiLCBhcmd2W2FyZ10pKSB7CisgICAgICB1c2VfY2FjaGVkX2NyZWRzID0gVFJVRTsKKyAgICAgIGFyZysrOworICAgIH0KKyAgICBlbHNlIGlmKCFzdHJjbXAoIi0taGVscGVyLXByb3RvY29sIiwgYXJndlthcmddKSkgeworICAgICAgYXJnKys7CisgICAgICBpZihhcmdjID4gYXJnKQorICAgICAgICBoZWxwZXJfcHJvdG8gPSBhcmd2W2FyZysrXTsKKyAgICB9CisgICAgZWxzZSBpZighc3RyY21wKCItLXVzZXJuYW1lIiwgYXJndlthcmddKSkgeworICAgICAgYXJnKys7CisgICAgICBpZihhcmdjID4gYXJnKQorICAgICAgICBoZWxwZXJfdXNlciA9IGFyZ3ZbYXJnKytdOworICAgIH0KKyAgICBlbHNlIGlmKCFzdHJjbXAoIi0tZG9tYWluIiwgYXJndlthcmddKSkgeworICAgICAgYXJnKys7CisgICAgICBpZihhcmdjID4gYXJnKQorICAgICAgICBoZWxwZXJfZG9tYWluID0gYXJndlthcmcrK107CisgICAgfQorICAgIGVsc2UgeworICAgICAgcHV0cygiVXNhZ2U6IGZha2VfbnRsbSBbb3B0aW9uXVxuIgorICAgICAgICAgICAiIC0tdXNlLWNhY2hlZC1jcmVkc1xuIgorICAgICAgICAgICAiIC0taGVscGVyLXByb3RvY29sIFtwcm90b2NvbF1cbiIKKyAgICAgICAgICAgIiAtLXVzZXJuYW1lIFt1c2VybmFtZV1cbiIKKyAgICAgICAgICAgIiAtLWRvbWFpbiBbZG9tYWluXSIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIH0KKworICBsb2dtc2coImZha2VfbnRsbSAodXNlcjogJXMpIChwcm90bzogJXMpIChkb21haW46ICVzKSAoY2FjaGVkIGNyZWRzOiAlcykiLAorICAgICAgICAgaGVscGVyX3VzZXIsIGhlbHBlcl9wcm90bywgaGVscGVyX2RvbWFpbiwKKyAgICAgICAgICh1c2VfY2FjaGVkX2NyZWRzKSA/ICJ5ZXMiIDogIm5vIik7CisKKyAgZW52ID0gZ2V0ZW52KCJDVVJMX05UTE1fQVVUSF9URVNUTlVNIik7CisgIGlmIChlbnYpIHsKKyAgICBjaGFyICplbmRwdHI7CisgICAgbG9uZyBsbnVtID0gc3RydG9sKGVudiwgJmVuZHB0ciwgMTApOworICAgIGlmKChlbmRwdHIgIT0gZW52ICsgc3RybGVuKGVudikpIHx8IChsbnVtIDwgMUwpKSB7CisgICAgICBsb2dtc2coIlRlc3QgbnVtYmVyIG5vdCB2YWxpZCBpbiBDVVJMX05UTE1fQVVUSF9URVNUTlVNIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICB0ZXN0bnVtID0gbG51bTsKKyAgfSBlbHNlIHsKKyAgICBsb2dtc2coIlRlc3QgbnVtYmVyIG5vdCBzcGVjaWZpZWQgaW4gQ1VSTF9OVExNX0FVVEhfVEVTVE5VTSIpOworICAgIGV4aXQoMSk7CisgIH0KKworICBlbnYgPSBnZXRlbnYoIkNVUkxfTlRMTV9BVVRIX1NSQ0RJUiIpOworICBpZiAoZW52KSB7CisgICAgcGF0aCA9IGVudjsKKyAgfQorCisgIGZpbGVuYW1lID0gdGVzdDJmaWxlKHRlc3RudW0pOworICBzdHJlYW09Zm9wZW4oZmlsZW5hbWUsICJyYiIpOworICBpZighc3RyZWFtKSB7CisgICAgZXJyb3IgPSBFUlJOTzsKKyAgICBsb2dtc2coImZvcGVuKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkICVzIiwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgbG9nbXNnKCJFcnJvciBvcGVuaW5nIGZpbGU6ICVzIiwgZmlsZW5hbWUpOworICAgIGxvZ21zZygiQ291bGRuJ3Qgb3BlbiB0ZXN0IGZpbGUgJWxkIiwgdGVzdG51bSk7CisgICAgZXhpdCgxKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBnZXQgdGhlIG50bG1fYXV0aCBpbnB1dC9vdXRwdXQgKi8KKyAgICBlcnJvciA9IGdldHBhcnQoJnR5cGUxX2lucHV0LCAmc2l6ZSwgIm50bG1fYXV0aF90eXBlMSIsICJpbnB1dCIsIHN0cmVhbSk7CisgICAgZmNsb3NlKHN0cmVhbSk7CisgICAgaWYoZXJyb3IgfHwgc2l6ZSA9PSAwKSB7CisgICAgICBsb2dtc2coImdldHBhcnQoKSB0eXBlIDEgaW5wdXQgZmFpbGVkIHdpdGggZXJyb3I6ICVkIiwgZXJyb3IpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIH0KKworICBzdHJlYW09Zm9wZW4oZmlsZW5hbWUsICJyYiIpOworICBpZighc3RyZWFtKSB7CisgICAgZXJyb3IgPSBFUlJOTzsKKyAgICBsb2dtc2coImZvcGVuKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkICVzIiwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgbG9nbXNnKCJFcnJvciBvcGVuaW5nIGZpbGU6ICVzIiwgZmlsZW5hbWUpOworICAgIGxvZ21zZygiQ291bGRuJ3Qgb3BlbiB0ZXN0IGZpbGUgJWxkIiwgdGVzdG51bSk7CisgICAgZXhpdCgxKTsKKyAgfQorICBlbHNlIHsKKyAgICBzaXplID0gMDsKKyAgICBlcnJvciA9IGdldHBhcnQoJnR5cGUzX2lucHV0LCAmc2l6ZSwgIm50bG1fYXV0aF90eXBlMyIsICJpbnB1dCIsIHN0cmVhbSk7CisgICAgZmNsb3NlKHN0cmVhbSk7CisgICAgaWYoZXJyb3IgfHwgc2l6ZSA9PSAwKSB7CisgICAgICBsb2dtc2coImdldHBhcnQoKSB0eXBlIDMgaW5wdXQgZmFpbGVkIHdpdGggZXJyb3I6ICVkIiwgZXJyb3IpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIH0KKworICB3aGlsZShmZ2V0cyhidWYsIHNpemVvZihidWYpLCBzdGRpbikpIHsKKyAgICBpZihzdHJjbXAoYnVmLCB0eXBlMV9pbnB1dCkgPT0gMCkgeworICAgICAgc3RyZWFtPWZvcGVuKGZpbGVuYW1lLCAicmIiKTsKKyAgICAgIGlmKCFzdHJlYW0pIHsKKyAgICAgICAgZXJyb3IgPSBFUlJOTzsKKyAgICAgICAgbG9nbXNnKCJmb3BlbigpIGZhaWxlZCB3aXRoIGVycm9yOiAlZCAlcyIsIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgICAgICBsb2dtc2coIkVycm9yIG9wZW5pbmcgZmlsZTogJXMiLCBmaWxlbmFtZSk7CisgICAgICAgIGxvZ21zZygiQ291bGRuJ3Qgb3BlbiB0ZXN0IGZpbGUgJWxkIiwgdGVzdG51bSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgc2l6ZSA9IDA7CisgICAgICAgIGVycm9yID0gZ2V0cGFydCgmdHlwZTFfb3V0cHV0LCAmc2l6ZSwgIm50bG1fYXV0aF90eXBlMSIsICJvdXRwdXQiLCBzdHJlYW0pOworICAgICAgICBmY2xvc2Uoc3RyZWFtKTsKKyAgICAgICAgaWYoZXJyb3IgfHwgc2l6ZSA9PSAwKSB7CisgICAgICAgICAgbG9nbXNnKCJnZXRwYXJ0KCkgdHlwZSAxIG91dHB1dCBmYWlsZWQgd2l0aCBlcnJvcjogJWQiLCBlcnJvcik7CisgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcHJpbnRmKCIlcyIsIHR5cGUxX291dHB1dCk7CisgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICB9CisgICAgZWxzZSBpZihzdHJuY21wKGJ1ZiwgdHlwZTNfaW5wdXQsIHN0cmxlbih0eXBlM19pbnB1dCkpID09IDApIHsKKyAgICAgIHN0cmVhbT1mb3BlbihmaWxlbmFtZSwgInJiIik7CisgICAgICBpZighc3RyZWFtKSB7CisgICAgICAgIGVycm9yID0gRVJSTk87CisgICAgICAgIGxvZ21zZygiZm9wZW4oKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQgJXMiLCBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgbG9nbXNnKCJFcnJvciBvcGVuaW5nIGZpbGU6ICVzIiwgZmlsZW5hbWUpOworICAgICAgICBsb2dtc2coIkNvdWxkbid0IG9wZW4gdGVzdCBmaWxlICVsZCIsIHRlc3RudW0pOworICAgICAgICBleGl0KDEpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHNpemUgPSAwOworICAgICAgICBlcnJvciA9IGdldHBhcnQoJnR5cGUzX291dHB1dCwgJnNpemUsICJudGxtX2F1dGhfdHlwZTMiLCAib3V0cHV0Iiwgc3RyZWFtKTsKKyAgICAgICAgZmNsb3NlKHN0cmVhbSk7CisgICAgICAgIGlmKGVycm9yIHx8IHNpemUgPT0gMCkgeworICAgICAgICAgIGxvZ21zZygiZ2V0cGFydCgpIHR5cGUgMyBvdXRwdXQgZmFpbGVkIHdpdGggZXJyb3I6ICVkIiwgZXJyb3IpOworICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHByaW50ZigiJXMiLCB0eXBlM19vdXRwdXQpOworICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcHJpbnRmKCJVbmtub3duIHJlcXVlc3RcbiIpOworICAgICAgbXNnYnVmID0gcHJpbnRhYmxlKGJ1ZiwgMCk7CisgICAgICBpZihtc2didWYpIHsKKyAgICAgICAgbG9nbXNnKCJpbnZhbGlkIGlucHV0OiAnJXMnXG4iLCBtc2didWYpOworICAgICAgICBmcmVlKG1zZ2J1Zik7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGxvZ21zZygiT09NIGZvcm1hdHRpbmcgaW52YWxpZCBpbnB1dDogJyVzJ1xuIiwgYnVmKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICB9CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL2dldHBhcnQuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9nZXRwYXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4NGQwYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9nZXRwYXJ0LmMKQEAgLTAsMCArMSw0MjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIENVUkxfTk9fT0xESUVTCisKKyNpbmNsdWRlICJzZXR1cC5oIgorCisjaW5jbHVkZSAiZ2V0cGFydC5oIgorCisjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKKy8qIG1ha2UgdGhlIGN1cmx4IGhlYWRlciBkZWZpbmUgYWxsIHByaW50ZigpIGZ1bmN0aW9ucyB0byB1c2UgdGhlIGN1cmx4XyoKKyAgIHZlcnNpb25zIGluc3RlYWQgKi8KKyNpbmNsdWRlICJjdXJseC5oIiAvKiBmcm9tIHRoZSBwcml2YXRlIGxpYiBkaXIgKi8KKworLyoganVzdCB0byBwbGVhc2UgY3VybF9iYXNlNjQuaCB3ZSBjcmVhdGUgYSBmYWtlIHN0cnVjdCAqLworc3RydWN0IFNlc3Npb25IYW5kbGUgeworICBpbnQgZmFrZTsKK307CisKKyNpbmNsdWRlICJjdXJsX2Jhc2U2NC5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisKKy8qIGluY2x1ZGUgbWVtZGVidWcuaCBsYXN0ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworI2RlZmluZSBFQVRfU1BBQ0UocCkgd2hpbGUoKihwKSAmJiBJU1NQQUNFKCoocCkpKSAocCkrKworCisjZGVmaW5lIEVBVF9XT1JEKHApICB3aGlsZSgqKHApICYmICFJU1NQQUNFKCoocCkpICYmICgnPicgIT0gKihwKSkpIChwKSsrCisKKyNpZmRlZiBERUJVR19HRVRQQVJUCisjZGVmaW5lIHNob3coeCkgcHJpbnRmIHgKKyNlbHNlCisjZGVmaW5lIHNob3coeCkgQ3VybF9ub3Bfc3RtdAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9ETEwpCisjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyMzIpIC8qIE1TVkMgZXh0ZW5zaW9uLCBkbGxpbXBvcnQgaWRlbnRpdHkgKi8KKyNlbmRpZgorCitjdXJsX21hbGxvY19jYWxsYmFjayBDdXJsX2NtYWxsb2MgPSAoY3VybF9tYWxsb2NfY2FsbGJhY2spbWFsbG9jOworY3VybF9mcmVlX2NhbGxiYWNrIEN1cmxfY2ZyZWUgPSAoY3VybF9mcmVlX2NhbGxiYWNrKWZyZWU7CitjdXJsX3JlYWxsb2NfY2FsbGJhY2sgQ3VybF9jcmVhbGxvYyA9IChjdXJsX3JlYWxsb2NfY2FsbGJhY2spcmVhbGxvYzsKK2N1cmxfc3RyZHVwX2NhbGxiYWNrIEN1cmxfY3N0cmR1cCA9IChjdXJsX3N0cmR1cF9jYWxsYmFjaylzdHJkdXA7CitjdXJsX2NhbGxvY19jYWxsYmFjayBDdXJsX2NjYWxsb2MgPSAoY3VybF9jYWxsb2NfY2FsbGJhY2spY2FsbG9jOworCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChfRExMKQorIyAgcHJhZ21hIHdhcm5pbmcoZGVmYXVsdDo0MjMyKSAvKiBNU1ZDIGV4dGVuc2lvbiwgZGxsaW1wb3J0IGlkZW50aXR5ICovCisjZW5kaWYKKworLyoKKyAqIHJlYWRsaW5lKCkKKyAqCisgKiBSZWFkcyBhIGNvbXBsZXRlIGxpbmUgZnJvbSBhIGZpbGUgaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBidWZmZXIuCisgKgorICogQ2FsbGluZyBmdW5jdGlvbiBtYXkgY2FsbCB0aGlzIG11bHRpcGxlIHRpbWVzIHdpdGggc2FtZSAnYnVmZmVyJworICogYW5kICdidWZzaXplJyBwb2ludGVycyB0byBhdm9pZCBtdWx0aXBsZSBidWZmZXIgYWxsb2NhdGlvbnMuIEJ1ZmZlcgorICogd2lsbCBiZSByZWFsbG9jYXRlZCBhbmQgJ2J1ZnNpemUnIGluY3JlYXNlZCB1bnRpbCB3aG9sZSBsaW5lIGZpdHMgaW4KKyAqIGJ1ZmZlciBiZWZvcmUgcmV0dXJuaW5nIGl0LgorICoKKyAqIENhbGxpbmcgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgdG8gZnJlZSBhbGxvY2F0ZWQgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IHJldHVybjoKKyAqICAgR1BFX09VVF9PRl9NRU1PUlkKKyAqICAgR1BFX0VORF9PRl9GSUxFCisgKiAgIEdQRV9PSworICovCisKK3N0YXRpYyBpbnQgcmVhZGxpbmUoY2hhciAqKmJ1ZmZlciwgc2l6ZV90ICpidWZzaXplLCBGSUxFICpzdHJlYW0pCit7CisgIHNpemVfdCBvZmZzZXQgPSAwOworICBzaXplX3QgbGVuZ3RoOworICBjaGFyICpuZXdwdHI7CisKKyAgaWYoISpidWZmZXIpIHsKKyAgICAqYnVmZmVyID0gbWFsbG9jKDEyOCk7CisgICAgaWYoISpidWZmZXIpCisgICAgICByZXR1cm4gR1BFX09VVF9PRl9NRU1PUlk7CisgICAgKmJ1ZnNpemUgPSAxMjg7CisgIH0KKworICBmb3IoOzspIHsKKyAgICBpbnQgYnl0ZXN0b3JlYWQgPSBjdXJseF91enRvc2koKmJ1ZnNpemUgLSBvZmZzZXQpOworCisgICAgaWYoIWZnZXRzKCpidWZmZXIgKyBvZmZzZXQsIGJ5dGVzdG9yZWFkLCBzdHJlYW0pKQorICAgICAgcmV0dXJuIChvZmZzZXQgIT0gMCkgPyBHUEVfT0sgOiBHUEVfRU5EX09GX0ZJTEUgOworCisgICAgbGVuZ3RoID0gb2Zmc2V0ICsgc3RybGVuKCpidWZmZXIgKyBvZmZzZXQpOworICAgIGlmKCooKmJ1ZmZlciArIGxlbmd0aCAtIDEpID09ICdcbicpCisgICAgICBicmVhazsKKyAgICBvZmZzZXQgPSBsZW5ndGg7CisgICAgaWYobGVuZ3RoIDwgKmJ1ZnNpemUgLSAxKQorICAgICAgY29udGludWU7CisKKyAgICBuZXdwdHIgPSByZWFsbG9jKCpidWZmZXIsICpidWZzaXplICogMik7CisgICAgaWYoIW5ld3B0cikKKyAgICAgIHJldHVybiBHUEVfT1VUX09GX01FTU9SWTsKKyAgICAqYnVmZmVyID0gbmV3cHRyOworICAgICpidWZzaXplICo9IDI7CisgIH0KKworICByZXR1cm4gR1BFX09LOworfQorCisvKgorICogYXBwZW5kZGF0YSgpCisgKgorICogVGhpcyBhcHBlbmRzIGRhdGEgZnJvbSBhIGdpdmVuIHNvdXJjZSBidWZmZXIgdG8gdGhlIGVuZCBvZiB0aGUgdXNlZCBwYXJ0IG9mCisgKiBhIGRlc3RpbmF0aW9uIGJ1ZmZlci4gQXJndW1lbnRzIHJlbGF0aXZlIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYXJlLCB0aGUKKyAqIGFkZHJlc3Mgb2YgYSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgJ2RzdF9idWYnLCB0aGUgbGVuZ3RoIG9mIGRhdGEKKyAqIGluIGRlc3RpbmF0aW9uIGJ1ZmZlciBleGNsdWRpbmcgcG90ZW50aWFsIG51bGwgc3RyaW5nIHRlcm1pbmF0aW9uICdkc3RfbGVuJywKKyAqIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiBkZXN0aW5hdGlvbiBidWZmZXIgJ2RzdF9hbGxvYycuIEFsbCB0aHJlZSBkZXN0aW5hdGlvbgorICogYnVmZmVyIGFyZ3VtZW50cyBtYXkgYmUgbW9kaWZpZWQgYnkgdGhpcyBmdW5jdGlvbi4gQXJndW1lbnRzIHJlbGF0aXZlIHRvIHRoZQorICogc291cmNlIGJ1ZmZlciBhcmUsIGEgcG9pbnRlciB0byB0aGUgc291cmNlIGJ1ZmZlciAnc3JjX2J1ZicgYW5kIGluZGljYXRpb24KKyAqIHdoZXRoZXIgdGhlIHNvdXJjZSBidWZmZXIgaXMgYmFzZTY0IGVuY29kZWQgb3Igbm90ICdzcmNfYjY0Jy4KKyAqCisgKiBJZiB0aGUgc291cmNlIGJ1ZmZlciBpcyBpbmRpY2F0ZWQgdG8gYmUgYmFzZTY0IGVuY29kZWQsIHRoaXMgYXBwZW5kcyB0aGUKKyAqIGRlY29kZWQgZGF0YSwgYmluYXJ5IG9yIHdoYXRldmVyLCB0byB0aGUgZGVzdGluYXRpb24uIFRoZSBzb3VyY2UgYnVmZmVyCisgKiBtYXkgbm90IGhvbGQgYmluYXJ5IGRhdGEsIG9ubHkgYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nIGlzIHZhbGlkIGNvbnRlbnQuCisgKgorICogRGVzdGluYXRpb24gYnVmZmVyIHdpbGwgYmUgZW5sYXJnZWQgYW5kIHJlbG9jYXRlZCBhcyBuZWVkZWQuCisgKgorICogQ2FsbGluZyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSB0byBwcm92aWRlIHByZWFsbG9jYXRlZCBkZXN0aW5hdGlvbgorICogYnVmZmVyIGFuZCBhbHNvIHRvIGRlYWxsb2NhdGUgaXQgd2hlbiBubyBsb25nZXIgbmVlZGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IHJldHVybjoKKyAqICAgR1BFX09VVF9PRl9NRU1PUlkKKyAqICAgR1BFX09LCisgKi8KKworc3RhdGljIGludCBhcHBlbmRkYXRhKGNoYXIgICoqZHN0X2J1ZiwgICAvKiBkZXN0IGJ1ZmZlciAqLworICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZHN0X2xlbiwgICAvKiBkZXN0IGJ1ZmZlciBkYXRhIGxlbmd0aCAqLworICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZHN0X2FsbG9jLCAvKiBkZXN0IGJ1ZmZlciBhbGxvY2F0ZWQgc2l6ZSAqLworICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAqc3JjX2J1ZiwgICAvKiBzb3VyY2UgYnVmZmVyICovCisgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICBzcmNfYjY0KSAgIC8qICE9IDAgaWYgc291cmNlIGlzIGJhc2U2NCBlbmNvZGVkICovCit7CisgIHNpemVfdCBuZWVkX2FsbG9jLCBzcmNfbGVuOworICB1bmlvbiB7CisgICAgdW5zaWduZWQgY2hhciAqYXNfdWNoYXI7CisgICAgICAgICAgICAgY2hhciAqYXNfY2hhcjsKKyAgfSBidWY2NDsKKworICBzcmNfbGVuID0gc3RybGVuKHNyY19idWYpOworICBpZighc3JjX2xlbikKKyAgICByZXR1cm4gR1BFX09LOworCisgIGJ1ZjY0LmFzX2NoYXIgPSBOVUxMOworCisgIGlmKHNyY19iNjQpIHsKKyAgICAvKiBiYXNlNjQgZGVjb2RlIHRoZSBnaXZlbiBidWZmZXIgKi8KKyAgICBpbnQgZXJyb3IgPSAoaW50KSBDdXJsX2Jhc2U2NF9kZWNvZGUoc3JjX2J1ZiwgJmJ1ZjY0LmFzX3VjaGFyLCAmc3JjX2xlbik7CisgICAgaWYoZXJyb3IpCisgICAgICByZXR1cm4gR1BFX09VVF9PRl9NRU1PUlk7CisgICAgc3JjX2J1ZiA9IGJ1ZjY0LmFzX2NoYXI7CisgICAgaWYoIXNyY19sZW4gfHwgIXNyY19idWYpIHsKKyAgICAgIC8qCisgICAgICAqKiBjdXJyZW50bHkgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgYXBhcnQgYW4gT09NIGNvbmRpdGlvbiBpbgorICAgICAgKiogQ3VybF9iYXNlNjRfZGVjb2RlKCkgZnJvbSB6ZXJvIGxlbmd0aCBkZWNvZGVkIGRhdGEuIEZvciBub3csCisgICAgICAqKiBsZXQncyBqdXN0IGFzc3VtZSBpdCBpcyBhbiBPT00gY29uZGl0aW9uLCBjdXJyZW50bHkgd2UgaGF2ZQorICAgICAgKiogbm8gaW5wdXQgZm9yIHRoaXMgZnVuY3Rpb24gdGhhdCBkZWNvZGVzIHRvIHplcm8gbGVuZ3RoIGRhdGEuCisgICAgICAqLworICAgICAgaWYoYnVmNjQuYXNfY2hhcikKKyAgICAgICAgZnJlZShidWY2NC5hc19jaGFyKTsKKyAgICAgIHJldHVybiBHUEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgIH0KKworICBuZWVkX2FsbG9jID0gc3JjX2xlbiArICpkc3RfbGVuICsgMTsKKworICAvKiBlbmxhcmdlIGRlc3RpbmF0aW9uIGJ1ZmZlciBpZiByZXF1aXJlZCAqLworICBpZihuZWVkX2FsbG9jID4gKmRzdF9hbGxvYykgeworICAgIHNpemVfdCBuZXdzaXplID0gbmVlZF9hbGxvYyAqIDI7CisgICAgY2hhciAqbmV3cHRyID0gcmVhbGxvYygqZHN0X2J1ZiwgbmV3c2l6ZSk7CisgICAgaWYoIW5ld3B0cikgeworICAgICAgaWYoYnVmNjQuYXNfY2hhcikKKyAgICAgICAgZnJlZShidWY2NC5hc19jaGFyKTsKKyAgICAgIHJldHVybiBHUEVfT1VUX09GX01FTU9SWTsKKyAgICB9CisgICAgKmRzdF9hbGxvYyA9IG5ld3NpemU7CisgICAgKmRzdF9idWYgPSBuZXdwdHI7CisgIH0KKworICAvKiBtZW1jcHkgdG8gc3VwcG9ydCBiaW5hcnkgYmxvYnMgKi8KKyAgbWVtY3B5KCpkc3RfYnVmICsgKmRzdF9sZW4sIHNyY19idWYsIHNyY19sZW4pOworICAqZHN0X2xlbiArPSBzcmNfbGVuOworICAqKCpkc3RfYnVmICsgKmRzdF9sZW4pID0gJ1wwJzsKKworICBpZihidWY2NC5hc19jaGFyKQorICAgIGZyZWUoYnVmNjQuYXNfY2hhcik7CisKKyAgcmV0dXJuIEdQRV9PSzsKK30KKworLyoKKyAqIGdldHBhcnQoKQorICoKKyAqIFRoaXMgcmV0dXJucyB3aG9sZSBjb250ZW50cyBvZiBzcGVjaWZpZWQgWE1MLWxpa2Ugc2VjdGlvbiBhbmQgc3Vic2VjdGlvbgorICogZnJvbSB0aGUgZ2l2ZW4gZmlsZS4gVGhpcyBpcyBtb3N0bHkgdXNlZCB0byByZXRyaWV2ZSBhIHNwZWNpZmljIHBhcnQgZnJvbQorICogYSB0ZXN0IGRlZmluaXRpb24gZmlsZSBmb3IgY29uc3VtcHRpb24gYnkgdGVzdCBzdWl0ZSBzZXJ2ZXJzLgorICoKKyAqIERhdGEgaXMgcmV0dXJuZWQgaW4gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYnVmZmVyLCBhIHBvaW50ZXIgdG8gdGhpcyBkYXRhCisgKiBhbmQgdGhlIHNpemUgb2YgdGhlIGRhdGEgaXMgc3RvcmVkIGF0IHRoZSBhZGRyZXNzZXMgdGhhdCBjYWxsZXIgc3BlY2lmaWVzLgorICoKKyAqIElmIHRoZSByZXR1cm5lZCBkYXRhIGlzIGEgc3RyaW5nIHRoZSByZXR1cm5lZCBzaXplIHdpbGwgYmUgdGhlIGxlbmd0aCBvZgorICogdGhlIHN0cmluZyBleGNsdWRpbmcgbnVsbCB0ZXJtaW5hdGlvbi4gT3RoZXJ3aXNlIGl0IHdpbGwganVzdCBiZSB0aGUgc2l6ZQorICogb2YgdGhlIHJldHVybmVkIGJpbmFyeSBkYXRhLgorICoKKyAqIENhbGxpbmcgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgdG8gZnJlZSByZXR1cm5lZCBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuOgorICogICBHUEVfTk9fQlVGRkVSX1NQQUNFCisgKiAgIEdQRV9PVVRfT0ZfTUVNT1JZCisgKiAgIEdQRV9PSworICovCisKK2ludCBnZXRwYXJ0KGNoYXIgKipvdXRidWYsIHNpemVfdCAqb3V0bGVuLAorICAgICAgICAgICAgY29uc3QgY2hhciAqbWFpbiwgY29uc3QgY2hhciAqc3ViLCBGSUxFICpzdHJlYW0pCit7CisjIGRlZmluZSBNQVhfVEFHX0xFTiA3OQorICBjaGFyIGNvdXRlcltNQVhfVEFHX0xFTisxXTsgLyogY3VycmVudCBvdXRlcm1vc3Qgc2VjdGlvbiAqLworICBjaGFyIGNtYWluW01BWF9UQUdfTEVOKzFdOyAgLyogY3VycmVudCBtYWluIHNlY3Rpb24gKi8KKyAgY2hhciBjc3ViW01BWF9UQUdfTEVOKzFdOyAgIC8qIGN1cnJlbnQgc3ViIHNlY3Rpb24gKi8KKyAgY2hhciBwdGFnW01BWF9UQUdfTEVOKzFdOyAgIC8qIHBvdGVudGlhbCB0YWcgKi8KKyAgY2hhciBwYXR0W01BWF9UQUdfTEVOKzFdOyAgIC8qIHBvdGVudGlhbCBhdHRyaWJ1dGVzICovCisgIGNoYXIgKmJ1ZmZlciA9IE5VTEw7CisgIGNoYXIgKnB0cjsKKyAgY2hhciAqZW5kOworICB1bmlvbiB7CisgICAgc3NpemVfdCBzaWc7CisgICAgIHNpemVfdCB1bnM7CisgIH0gbGVuOworICBzaXplX3QgYnVmc2l6ZSA9IDA7CisgIHNpemVfdCBvdXRhbGxvYyA9IDI1NjsKKyAgaW50IGluX3dhbnRlZF9wYXJ0ID0gMDsKKyAgaW50IGJhc2U2NCA9IDA7CisgIGludCBlcnJvcjsKKworICBlbnVtIHsKKyAgICBTVEFURV9PVVRTSURFID0gMCwKKyAgICBTVEFURV9PVVRFUiAgID0gMSwKKyAgICBTVEFURV9JTk1BSU4gID0gMiwKKyAgICBTVEFURV9JTlNVQiAgID0gMywKKyAgICBTVEFURV9JTExFR0FMID0gNAorICB9IHN0YXRlID0gU1RBVEVfT1VUU0lERTsKKworICAqb3V0bGVuID0gMDsKKyAgKm91dGJ1ZiA9IG1hbGxvYyhvdXRhbGxvYyk7CisgIGlmKCEqb3V0YnVmKQorICAgIHJldHVybiBHUEVfT1VUX09GX01FTU9SWTsKKyAgKigqb3V0YnVmKSA9ICdcMCc7CisKKyAgY291dGVyWzBdID0gY21haW5bMF0gPSBjc3ViWzBdID0gcHRhZ1swXSA9IHBhdHRbMF0gPSAnXDAnOworCisgIHdoaWxlKChlcnJvciA9IHJlYWRsaW5lKCZidWZmZXIsICZidWZzaXplLCBzdHJlYW0pKSA9PSBHUEVfT0spIHsKKworICAgIHB0ciA9IGJ1ZmZlcjsKKyAgICBFQVRfU1BBQ0UocHRyKTsKKworICAgIGlmKCc8JyAhPSAqcHRyKSB7CisgICAgICBpZihpbl93YW50ZWRfcGFydCkgeworICAgICAgICBzaG93KCgiPT4gJXMiLCBidWZmZXIpKTsKKyAgICAgICAgZXJyb3IgPSBhcHBlbmRkYXRhKG91dGJ1Ziwgb3V0bGVuLCAmb3V0YWxsb2MsIGJ1ZmZlciwgYmFzZTY0KTsKKyAgICAgICAgaWYoZXJyb3IpCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBwdHIrKzsKKworICAgIGlmKCcvJyA9PSAqcHRyKSB7CisgICAgICAvKgorICAgICAgKiogY2xvc2luZyBzZWN0aW9uIHRhZworICAgICAgKi8KKworICAgICAgcHRyKys7CisgICAgICBlbmQgPSBwdHI7CisgICAgICBFQVRfV09SRChlbmQpOworICAgICAgaWYoKGxlbi5zaWcgPSBlbmQgLSBwdHIpID4gTUFYX1RBR19MRU4pIHsKKyAgICAgICAgZXJyb3IgPSBHUEVfTk9fQlVGRkVSX1NQQUNFOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIG1lbWNweShwdGFnLCBwdHIsIGxlbi51bnMpOworICAgICAgcHRhZ1tsZW4udW5zXSA9ICdcMCc7CisKKyAgICAgIGlmKChTVEFURV9JTlNVQiA9PSBzdGF0ZSkgJiYgIXN0cmNtcChjc3ViLCBwdGFnKSkgeworICAgICAgICAvKiBlbmQgb2YgY3VycmVudCBzdWIgc2VjdGlvbiAqLworICAgICAgICBzdGF0ZSA9IFNUQVRFX0lOTUFJTjsKKyAgICAgICAgY3N1YlswXSA9ICdcMCc7CisgICAgICAgIGlmKGluX3dhbnRlZF9wYXJ0KSB7CisgICAgICAgICAgLyogZW5kIG9mIHdhbnRlZCBwYXJ0ICovCisgICAgICAgICAgaW5fd2FudGVkX3BhcnQgPSAwOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmKChTVEFURV9JTk1BSU4gPT0gc3RhdGUpICYmICFzdHJjbXAoY21haW4sIHB0YWcpKSB7CisgICAgICAgIC8qIGVuZCBvZiBjdXJyZW50IG1haW4gc2VjdGlvbiAqLworICAgICAgICBzdGF0ZSA9IFNUQVRFX09VVEVSOworICAgICAgICBjbWFpblswXSA9ICdcMCc7CisgICAgICAgIGlmKGluX3dhbnRlZF9wYXJ0KSB7CisgICAgICAgICAgLyogZW5kIG9mIHdhbnRlZCBwYXJ0ICovCisgICAgICAgICAgaW5fd2FudGVkX3BhcnQgPSAwOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmKChTVEFURV9PVVRFUiA9PSBzdGF0ZSkgJiYgIXN0cmNtcChjb3V0ZXIsIHB0YWcpKSB7CisgICAgICAgIC8qIGVuZCBvZiBvdXRlcm1vc3QgZmlsZSBzZWN0aW9uICovCisgICAgICAgIHN0YXRlID0gU1RBVEVfT1VUU0lERTsKKyAgICAgICAgY291dGVyWzBdID0gJ1wwJzsKKyAgICAgICAgaWYoaW5fd2FudGVkX3BhcnQpIHsKKyAgICAgICAgICAvKiBlbmQgb2Ygd2FudGVkIHBhcnQgKi8KKyAgICAgICAgICBpbl93YW50ZWRfcGFydCA9IDA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIH0KKyAgICBlbHNlIGlmKCFpbl93YW50ZWRfcGFydCkgeworICAgICAgLyoKKyAgICAgICoqIG9wZW5pbmcgc2VjdGlvbiB0YWcKKyAgICAgICovCisKKyAgICAgIC8qIGdldCBwb3RlbnRpYWwgdGFnICovCisgICAgICBlbmQgPSBwdHI7CisgICAgICBFQVRfV09SRChlbmQpOworICAgICAgaWYoKGxlbi5zaWcgPSBlbmQgLSBwdHIpID4gTUFYX1RBR19MRU4pIHsKKyAgICAgICAgZXJyb3IgPSBHUEVfTk9fQlVGRkVSX1NQQUNFOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIG1lbWNweShwdGFnLCBwdHIsIGxlbi51bnMpOworICAgICAgcHRhZ1tsZW4udW5zXSA9ICdcMCc7CisKKyAgICAgIC8qIGlnbm9yZSBjb21tZW50cywgZG9jdHlwZXMgYW5kIHhtbCBkZWNsYXJhdGlvbnMgKi8KKyAgICAgIGlmKCgnIScgPT0gcHRhZ1swXSkgfHwgKCc/JyA9PSBwdGFnWzBdKSkgeworICAgICAgICBzaG93KCgiKiBpZ25vcmluZyAoJXMpIiwgYnVmZmVyKSk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICAvKiBnZXQgYWxsIHBvdGVudGlhbCBhdHRyaWJ1dGVzICovCisgICAgICBwdHIgPSBlbmQ7CisgICAgICBFQVRfU1BBQ0UocHRyKTsKKyAgICAgIGVuZCA9IHB0cjsKKyAgICAgIHdoaWxlKCplbmQgJiYgKCc+JyAhPSAqZW5kKSkKKyAgICAgICAgZW5kKys7CisgICAgICBpZigobGVuLnNpZyA9IGVuZCAtIHB0cikgPiBNQVhfVEFHX0xFTikgeworICAgICAgICBlcnJvciA9IEdQRV9OT19CVUZGRVJfU1BBQ0U7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgbWVtY3B5KHBhdHQsIHB0ciwgbGVuLnVucyk7CisgICAgICBwYXR0W2xlbi51bnNdID0gJ1wwJzsKKworICAgICAgaWYoU1RBVEVfT1VUU0lERSA9PSBzdGF0ZSkgeworICAgICAgICAvKiBvdXRlcm1vc3QgZWxlbWVudCAoPHRlc3RjYXNlPikgKi8KKyAgICAgICAgc3RyY3B5KGNvdXRlciwgcHRhZyk7CisgICAgICAgIHN0YXRlID0gU1RBVEVfT1VURVI7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgZWxzZSBpZihTVEFURV9PVVRFUiA9PSBzdGF0ZSkgeworICAgICAgICAvKiBzdGFydCBvZiBhIG1haW4gc2VjdGlvbiAqLworICAgICAgICBzdHJjcHkoY21haW4sIHB0YWcpOworICAgICAgICBzdGF0ZSA9IFNUQVRFX0lOTUFJTjsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBlbHNlIGlmKFNUQVRFX0lOTUFJTiA9PSBzdGF0ZSkgeworICAgICAgICAvKiBzdGFydCBvZiBhIHN1YiBzZWN0aW9uICovCisgICAgICAgIHN0cmNweShjc3ViLCBwdGFnKTsKKyAgICAgICAgc3RhdGUgPSBTVEFURV9JTlNVQjsKKyAgICAgICAgaWYoIXN0cmNtcChjbWFpbiwgbWFpbikgJiYgIXN0cmNtcChjc3ViLCBzdWIpKSB7CisgICAgICAgICAgLyogc3RhcnQgb2Ygd2FudGVkIHBhcnQgKi8KKyAgICAgICAgICBpbl93YW50ZWRfcGFydCA9IDE7CisgICAgICAgICAgaWYoc3Ryc3RyKHBhdHQsICJiYXNlNjQ9IikpCisgICAgICAgICAgICAgIC8qIGJpdCByb3VnaCB0ZXN0LCBidXQgIm1vc3RseSIgZnVuY3Rpb25hbCwgKi8KKyAgICAgICAgICAgICAgLyogdHJlYXQgd2FudGVkIHBhcnQgZGF0YSBhcyBiYXNlNjQgZW5jb2RlZCAqLworICAgICAgICAgICAgICBiYXNlNjQgPSAxOworICAgICAgICB9CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgfQorCisgICAgaWYoaW5fd2FudGVkX3BhcnQpIHsKKyAgICAgIHNob3coKCI9PiAlcyIsIGJ1ZmZlcikpOworICAgICAgZXJyb3IgPSBhcHBlbmRkYXRhKG91dGJ1Ziwgb3V0bGVuLCAmb3V0YWxsb2MsIGJ1ZmZlciwgYmFzZTY0KTsKKyAgICAgIGlmKGVycm9yKQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgfSAvKiB3aGlsZSAqLworCisgIGlmKGJ1ZmZlcikKKyAgICBmcmVlKGJ1ZmZlcik7CisKKyAgaWYoZXJyb3IgIT0gR1BFX09LKSB7CisgICAgaWYoZXJyb3IgPT0gR1BFX0VORF9PRl9GSUxFKQorICAgICAgZXJyb3IgPSBHUEVfT0s7CisgICAgZWxzZSB7CisgICAgICBpZigqb3V0YnVmKQorICAgICAgICBmcmVlKCpvdXRidWYpOworICAgICAgKm91dGJ1ZiA9IE5VTEw7CisgICAgICAqb3V0bGVuID0gMDsKKyAgICB9CisgIH0KKworICByZXR1cm4gZXJyb3I7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9nZXRwYXJ0LmggYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvZ2V0cGFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YTBiZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvZ2V0cGFydC5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgSEVBREVSX1NFUlZFUl9HRVRQQVJUX0gKKyNkZWZpbmUgSEVBREVSX1NFUlZFUl9HRVRQQVJUX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEdQRV9OT19CVUZGRVJfU1BBQ0UgLTIKKyNkZWZpbmUgR1BFX09VVF9PRl9NRU1PUlkgICAtMQorI2RlZmluZSBHUEVfT0sgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQRV9FTkRfT0ZfRklMRSAgICAgIDEKKworaW50IGdldHBhcnQoY2hhciAqKm91dGJ1Ziwgc2l6ZV90ICpvdXRsZW4sCisgICAgICAgICAgICBjb25zdCBjaGFyICptYWluLCBjb25zdCBjaGFyICpzdWIsIEZJTEUgKnN0cmVhbSk7CisKKyNlbmRpZiAvKiBIRUFERVJfU0VSVkVSX0dFVFBBUlRfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL3Jlc29sdmUuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9yZXNvbHZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhZDg1MwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9yZXNvbHZlLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQdXJwb3NlCisgKgorICogUmVzb2x2ZSB0aGUgZ2l2ZW4gbmFtZSwgdXNpbmcgc3lzdGVtIG5hbWUgcmVzb2x2ZSBmdW5jdGlvbnMgKE5PVCBhbnkKKyAqIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IGxpYmN1cmwpLiBVc2VkIHRvIHNlZSBpZiB0aGUgbmFtZSBleGlzdHMgYW5kIHRodXMgaWYKKyAqIHdlIGNhbiBhbGxvdyBhIHRlc3QgY2FzZSB0byB1c2UgaXQgZm9yIHRlc3RpbmcuCisgKgorICogTGlrZSBpZiAnbG9jYWxob3N0JyBhY3R1YWwgZXhpc3RzIGV0Yy4KKyAqCisgKi8KKworI2RlZmluZSBDVVJMX05PX09MRElFUworCisjaW5jbHVkZSAic2V0dXAuaCIgLyogcG9ydGFiaWxpdHkgaGVscCBmcm9tIHRoZSBsaWIgZGlyZWN0b3J5ICovCisKKyNpZmRlZiBIQVZFX1NJR05BTF9ICisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorLyogVGhpcyBkZWZpbmUgaXMgImFsbW9zdCIgcmVxdWlyZWQgdG8gYnVpbGQgb24gSFBVWCAxMSAqLworI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorCisjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKKy8qIG1ha2UgdGhlIGN1cmx4IGhlYWRlciBkZWZpbmUgYWxsIHByaW50ZigpIGZ1bmN0aW9ucyB0byB1c2UgdGhlIGN1cmx4XyoKKyAgIHZlcnNpb25zIGluc3RlYWQgKi8KKyNpbmNsdWRlICJjdXJseC5oIiAvKiBmcm9tIHRoZSBwcml2YXRlIGxpYiBkaXIgKi8KKyNpbmNsdWRlICJ1dGlsLmgiCisKKy8qIGluY2x1ZGUgbWVtZGVidWcuaCBsYXN0ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworc3RhdGljIGJvb2wgdXNlX2lwdjYgPSBGQUxTRTsKK3N0YXRpYyBjb25zdCBjaGFyICppcHZfaW51c2UgPSAiSVB2NCI7CisKK2NvbnN0IGNoYXIgKnNlcnZlcmxvZ2ZpbGU9IiI7IC8qIGZvciBhIHV0aWwuYyBmdW5jdGlvbiB3ZSBkb24ndCB1c2UgKi8KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgaW50IGFyZz0xOworICBjb25zdCBjaGFyICpob3N0ID0gTlVMTDsKKyAgaW50IHJjID0gMDsKKworICB3aGlsZShhcmdjPmFyZykgeworICAgIGlmKCFzdHJjbXAoIi0tdmVyc2lvbiIsIGFyZ3ZbYXJnXSkpIHsKKyAgICAgIHByaW50ZigicmVzb2x2ZSBJUHY0JXNcbiIsCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgICAgICAgICAiL0lQdjYiCisjZWxzZQorICAgICAgICAgICAgICIiCisjZW5kaWYKKyAgICAgICAgICAgICApOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1pcHY2IiwgYXJndlthcmddKSkgeworICAgICAgaXB2X2ludXNlID0gIklQdjYiOworICAgICAgdXNlX2lwdjYgPSBUUlVFOworICAgICAgYXJnKys7CisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1pcHY0IiwgYXJndlthcmddKSkgeworICAgICAgLyogZm9yIGNvbXBsZXRlbmVzcywgd2Ugc3VwcG9ydCB0aGlzIG9wdGlvbiBhcyB3ZWxsICovCisgICAgICBpcHZfaW51c2UgPSAiSVB2NCI7CisgICAgICB1c2VfaXB2NiA9IEZBTFNFOworICAgICAgYXJnKys7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaG9zdCA9IGFyZ3ZbYXJnKytdOworICAgIH0KKyAgfQorICBpZighaG9zdCkgeworICAgIHB1dHMoIlVzYWdlOiByZXNvbHZlIFtvcHRpb25dIDxob3N0PlxuIgorICAgICAgICAgIiAtLXZlcnNpb25cbiIKKyAgICAgICAgICIgLS1pcHY0IgorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICAgICAiXG4gLS1pcHY2IgorI2VuZGlmCisgICAgICAgICApOworICAgIHJldHVybiAxOworICB9CisKKyNpZmRlZiBXSU4zMgorICB3aW4zMl9pbml0KCk7CisgIGF0ZXhpdCh3aW4zMl9jbGVhbnVwKTsKKyNlbmRpZgorCisgIGlmKCF1c2VfaXB2NikgeworICAgIC8qIGdldGhvc3RieW5hbWUoKSByZXNvbHZlICovCisgICAgc3RydWN0IGhvc3RlbnQgKmhlOworCisgICAgaGUgPSBnZXRob3N0YnluYW1lKGhvc3QpOworCisgICAgcmMgPSAhaGU7CisgIH0KKyAgZWxzZSB7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAvKiBDaGVjayB0aGF0IHRoZSBzeXN0ZW0gaGFzIElQdjYgZW5hYmxlZCBiZWZvcmUgY2hlY2tpbmcgdGhlIHJlc29sdmVyICovCisgICAgY3VybF9zb2NrZXRfdCBzID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKKyAgICBpZihzID09IENVUkxfU09DS0VUX0JBRCkKKyAgICAgIC8qIGFuIGlwdjYgYWRkcmVzcyB3YXMgcmVxdWVzdGVkIGFuZCB3ZSBjYW4ndCBnZXQvdXNlIG9uZSAqLworICAgICAgcmMgPSAtMTsKKyAgICBlbHNlIHsKKyAgICAgIHNjbG9zZShzKTsKKyAgICB9CisKKyAgICBpZiAocmMgPT0gMCkgeworICAgICAgLyogZ2V0YWRkcmluZm8oKSByZXNvbHZlICovCisgICAgICBzdHJ1Y3QgYWRkcmluZm8gKmFpOworICAgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzOworCisgICAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKyAgICAgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX0lORVQ2OworICAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKyAgICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfQ0FOT05OQU1FOworICAgICAgLyogVXNlIHBhcmVudGhlc2lzIGFyb3VuZCBmdW5jdGlvbiB0byBzdG9wIGl0IGZyb20gYmVpbmcgcmVwbGFjZWQgYnkKKyAgICAgIHRoZSBtYWNybyBpbiBtZW1kZWJ1Zy5oICovCisgICAgICByYyA9IChnZXRhZGRyaW5mbykoaG9zdCwgIjgwIiwgJmhpbnRzLCAmYWkpOworICAgIH0KKworI2Vsc2UKKyAgICBwdXRzKCJJUHY2IHN1cHBvcnQgaGFzIGJlZW4gZGlzYWJsZWQgaW4gdGhpcyBwcm9ncmFtIik7CisgICAgcmV0dXJuIDE7CisjZW5kaWYKKyAgfQorICBpZihyYykKKyAgICBwcmludGYoIlJlc29sdmluZyAlcyAnJXMnIGRpZG4ndCB3b3JrXG4iLCBpcHZfaW51c2UsIGhvc3QpOworCisgIHJldHVybiAhIXJjOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL3J0c3BkLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvcnRzcGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzA2NzI5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL3J0c3BkLmMKQEAgLTAsMCArMSwxNDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGN1cmwncyB0ZXN0IHN1aXRlIFJlYWwgVGltZSBTdHJlYW1pbmcgUHJvdG9jb2wgKFJUU1ApIHNlcnZlci4KKyAqCisgKiBUaGlzIHNvdXJjZSBmaWxlIHdhcyBzdGFydGVkIGJhc2VkIG9uIGN1cmwncyBIVFRQIHRlc3Qgc3VpdGUgc2VydmVyLgorICovCisKKyNkZWZpbmUgQ1VSTF9OT19PTERJRVMKKworI2luY2x1ZGUgInNldHVwLmgiIC8qIHBvcnRhYmlsaXR5IGhlbHAgZnJvbSB0aGUgbGliIGRpcmVjdG9yeSAqLworCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfVENQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPiAvKiBmb3IgVENQX05PREVMQVkgKi8KKyNlbmRpZgorCisjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKKy8qIG1ha2UgdGhlIGN1cmx4IGhlYWRlciBkZWZpbmUgYWxsIHByaW50ZigpIGZ1bmN0aW9ucyB0byB1c2UgdGhlIGN1cmx4XyoKKyAgIHZlcnNpb25zIGluc3RlYWQgKi8KKyNpbmNsdWRlICJjdXJseC5oIiAvKiBmcm9tIHRoZSBwcml2YXRlIGxpYiBkaXIgKi8KKyNpbmNsdWRlICJnZXRwYXJ0LmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgInNlcnZlcl9zb2NrYWRkci5oIgorCisvKiBpbmNsdWRlIG1lbWRlYnVnLmggbGFzdCAqLworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKyNpZmRlZiBFTkFCTEVfSVBWNgorc3RhdGljIGJvb2wgdXNlX2lwdjYgPSBGQUxTRTsKKyNlbmRpZgorc3RhdGljIGNvbnN0IGNoYXIgKmlwdl9pbnVzZSA9ICJJUHY0IjsKK3N0YXRpYyBpbnQgc2VydmVybG9nc2xvY2tlZCA9IDA7CisKKyNkZWZpbmUgUkVRQlVGU0laIDE1MDAwMAorI2RlZmluZSBSRVFCVUZTSVpfVFhUICIxNDk5OTkiCisKK3N0YXRpYyBsb25nIHByZXZ0ZXN0bm89LTE7ICAgIC8qIHByZXZpb3VzIHRlc3QgbnVtYmVyIHdlIHNlcnZlZCAqLworc3RhdGljIGxvbmcgcHJldnBhcnRubz0tMTsgICAgLyogcHJldmlvdXMgcGFydCBudW1iZXIgd2Ugc2VydmVkICovCitzdGF0aWMgYm9vbCBwcmV2Ym91bmNlPUZBTFNFOyAvKiBpbnN0cnVjdHMgdGhlIHNlcnZlciB0byBpbmNyZWFzZSB0aGUgcGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGZvciBhIHRlc3QgaW4gY2FzZSB0aGUgaWRlbnRpY2FsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0bm8rcGFydG5vIHJlcXVlc3Qgc2hvd3MgdXAgYWdhaW4gKi8KKworI2RlZmluZSBSQ01EX05PUk1BTFJFUSAwIC8qIGRlZmF1bHQgcmVxdWVzdCwgdXNlIHRoZSB0ZXN0cyBmaWxlIG5vcm1hbGx5ICovCisjZGVmaW5lIFJDTURfSURMRSAgICAgIDEgLyogdG9sZCB0byBzaXQgaWRsZSAqLworI2RlZmluZSBSQ01EX1NUUkVBTSAgICAyIC8qIHRvbGQgdG8gc3RyZWFtICovCisKK3R5cGVkZWYgZW51bSB7CisgIFJQUk9UX05PTkUgPSAwLAorICBSUFJPVF9SVFNQID0gMSwKKyAgUlBST1RfSFRUUCA9IDIKK30gcmVxcHJvdF90OworCisjZGVmaW5lIFNFVF9SVFBfUEtUX0NITihwLGMpICAoKHApWzFdID0gKHVuc2lnbmVkIGNoYXIpKChjKSAmIDB4RkYpKQorCisjZGVmaW5lIFNFVF9SVFBfUEtUX0xFTihwLGwpICgoKHApWzJdID0gKHVuc2lnbmVkIGNoYXIpKCgobCkgPj4gOCkgJiAweEZGKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocClbM10gPSAodW5zaWduZWQgY2hhcikoKGwpICYgMHhGRikpKQorCitzdHJ1Y3QgaHR0cHJlcXVlc3QgeworICBjaGFyIHJlcWJ1ZltSRVFCVUZTSVpdOyAvKiBidWZmZXIgYXJlYSBmb3IgdGhlIGluY29taW5nIHJlcXVlc3QgKi8KKyAgc2l6ZV90IGNoZWNraW5kZXg7IC8qIHdoZXJlIHRvIHN0YXJ0IGNoZWNraW5nIG9mIHRoZSByZXF1ZXN0ICovCisgIHNpemVfdCBvZmZzZXQ7ICAgICAvKiBzaXplIG9mIHRoZSBpbmNvbWluZyByZXF1ZXN0ICovCisgIGxvbmcgdGVzdG5vOyAgICAgICAvKiB0ZXN0IG51bWJlciBmb3VuZCBpbiB0aGUgcmVxdWVzdCAqLworICBsb25nIHBhcnRubzsgICAgICAgLyogcGFydCBudW1iZXIgZm91bmQgaW4gdGhlIHJlcXVlc3QgKi8KKyAgYm9vbCBvcGVuOyAgICAgIC8qIGtlZXAgY29ubmVjdGlvbiBvcGVuIGluZm8sIGFzIGZvdW5kIGluIHRoZSByZXF1ZXN0ICovCisgIGJvb2wgYXV0aF9yZXE7ICAvKiBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCwgZG9uJ3Qgd2FpdCBmb3IgYm9keSB1bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgIHRoZXJlJ3MgYW4gQXV0aG9yaXphdGlvbiBoZWFkZXIgKi8KKyAgYm9vbCBhdXRoOyAgICAgIC8qIEF1dGhvcml6YXRpb24gaGVhZGVyIHByZXNlbnQgaW4gdGhlIGluY29taW5nIHJlcXVlc3QgKi8KKyAgc2l6ZV90IGNsOyAgICAgIC8qIENvbnRlbnQtTGVuZ3RoIG9mIHRoZSBpbmNvbWluZyByZXF1ZXN0ICovCisgIGJvb2wgZGlnZXN0OyAgICAvKiBBdXRob3JpemF0aW9uIGRpZ2VzdCBoZWFkZXIgZm91bmQgKi8KKyAgYm9vbCBudGxtOyAgICAgIC8qIEF1dGhvcml6YXRpb24gbnRsbSBoZWFkZXIgZm91bmQgKi8KKyAgaW50IHBpcGU7ICAgICAgIC8qIGlmIG5vbi16ZXJvLCBleHBlY3QgdGhpcyBtYW55IHJlcXVlc3RzIHRvIGRvIGEgInBpcGVkIgorICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC9yZXNwb25zZSAqLworICBpbnQgc2tpcDsgICAgICAgLyogaWYgbm9uLXplcm8sIHRoZSBzZXJ2ZXIgaXMgaW5zdHJ1Y3RlZCB0byBub3QgcmVhZCB0aGlzCisgICAgICAgICAgICAgICAgICAgICBtYW55IGJ5dGVzIGZyb20gYSBQVVQvUE9TVCByZXF1ZXN0LiBJZSB0aGUgY2xpZW50IHNlbmRzIE4KKyAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIHNhaWQgaW4gQ29udGVudC1MZW5ndGgsIGJ1dCB0aGUgc2VydmVyIG9ubHkgcmVhZHMgTgorICAgICAgICAgICAgICAgICAgICAgLSBza2lwIGJ5dGVzLiAqLworICBpbnQgcmNtZDsgICAgICAgLyogZG9pbmcgYSBzcGVjaWFsIGNvbW1hbmQsIHNlZSBkZWZpbmVzIGFib3ZlICovCisgIHJlcXByb3RfdCBwcm90b2NvbDsgLyogcmVxdWVzdCBwcm90b2NvbCwgSFRUUCBvciBSVFNQICovCisgIGludCBwcm90X3ZlcnNpb247ICAgLyogSFRUUCBvciBSVFNQIHZlcnNpb24gKG1ham9yKjEwICsgbWlub3IpICovCisgIGJvb2wgcGlwZWxpbmluZzsgICAgLyogdHJ1ZSBpZiByZXF1ZXN0IGlzIHBpcGVsaW5lZCAqLworICBjaGFyICpydHBfYnVmZmVyOworICBzaXplX3QgcnRwX2J1ZmZlcnNpemU7Cit9OworCitzdGF0aWMgaW50IFByb2Nlc3NSZXF1ZXN0KHN0cnVjdCBodHRwcmVxdWVzdCAqcmVxKTsKK3N0YXRpYyB2b2lkIHN0b3JlcmVxdWVzdChjaGFyICpyZXFidWYsIHNpemVfdCB0b3RhbHNpemUpOworCisjZGVmaW5lIERFRkFVTFRfUE9SVCA4OTk5CisKKyNpZm5kZWYgREVGQVVMVF9MT0dGSUxFCisjZGVmaW5lIERFRkFVTFRfTE9HRklMRSAibG9nL3J0c3BkLmxvZyIKKyNlbmRpZgorCitjb25zdCBjaGFyICpzZXJ2ZXJsb2dmaWxlID0gREVGQVVMVF9MT0dGSUxFOworCisjZGVmaW5lIFJUU1BEVkVSU0lPTiAiY1VSTCB0ZXN0IHN1aXRlIFJUU1Agc2VydmVyLzAuMSIKKworI2RlZmluZSBSRVFVRVNUX0RVTVAgICJsb2cvc2VydmVyLmlucHV0IgorI2RlZmluZSBSRVNQT05TRV9EVU1QICJsb2cvc2VydmVyLnJlc3BvbnNlIgorCisvKiB2ZXJ5LWJpZy1wYXRoIHN1cHBvcnQgKi8KKyNkZWZpbmUgTUFYRE9DTkFNRUxFTiAxNDAwMDAKKyNkZWZpbmUgTUFYRE9DTkFNRUxFTl9UWFQgIjEzOTk5OSIKKworI2RlZmluZSBSRVFVRVNUX0tFWVdPUkRfU0laRSAyNTYKKyNkZWZpbmUgUkVRVUVTVF9LRVlXT1JEX1NJWkVfVFhUICIyNTUiCisKKyNkZWZpbmUgQ01EX0FVVEhfUkVRVUlSRUQgImF1dGhfcmVxdWlyZWQiCisKKy8qICdpZGxlJyBtZWFucyB0aGF0IGl0IHdpbGwgYWNjZXB0IHRoZSByZXF1ZXN0IGZpbmUgYnV0IG5ldmVyIHJlc3BvbmQKKyAgIGFueSBkYXRhLiBKdXN0IGtlZXAgdGhlIGNvbm5lY3Rpb24gYWxpdmUuICovCisjZGVmaW5lIENNRF9JRExFICJpZGxlIgorCisvKiAnc3RyZWFtJyBtZWFucyB0byBzZW5kIGEgbmV2ZXItZW5kaW5nIHN0cmVhbSBvZiBkYXRhICovCisjZGVmaW5lIENNRF9TVFJFQU0gInN0cmVhbSIKKworI2RlZmluZSBFTkRfT0ZfSEVBREVSUyAiXHJcblxyXG4iCisKK2VudW0geworICBET0NOVU1CRVJfTk9USElORyA9IC03LAorICBET0NOVU1CRVJfUVVJVCAgICA9IC02LAorICBET0NOVU1CRVJfQkFEQ09OTkVDVCA9IC01LAorICBET0NOVU1CRVJfSU5URVJOQUw9IC00LAorICBET0NOVU1CRVJfQ09OTkVDVCA9IC0zLAorICBET0NOVU1CRVJfV0VSVUxFWiA9IC0yLAorICBET0NOVU1CRVJfNDA0ICAgICA9IC0xCit9OworCisKKy8qIHNlbnQgYXMgcmVwbHkgdG8gYSBRVUlUICovCitzdGF0aWMgY29uc3QgY2hhciAqZG9jcXVpdCA9CisiSFRUUC8xLjEgMjAwIEdvb2RieWUiIEVORF9PRl9IRUFERVJTOworCisvKiBzZW50IGFzIHJlcGx5IHRvIGEgQ09OTkVDVCAqLworc3RhdGljIGNvbnN0IGNoYXIgKmRvY2Nvbm5lY3QgPQorIkhUVFAvMS4xIDIwMCBNaWdodHkgZmluZSBpbmRlZWQiIEVORF9PRl9IRUFERVJTOworCisvKiBzZW50IGFzIHJlcGx5IHRvIGEgImJhZCIgQ09OTkVDVCAqLworc3RhdGljIGNvbnN0IGNoYXIgKmRvY2JhZGNvbm5lY3QgPQorIkhUVFAvMS4xIDUwMSBGb3JiaWRkZW4geW91IGZvb2wiIEVORF9PRl9IRUFERVJTOworCisvKiBzZW5kIGJhY2sgdGhpcyBvbiBIVFRQIDQwNCBmaWxlIG5vdCBmb3VuZCAqLworc3RhdGljIGNvbnN0IGNoYXIgKmRvYzQwNF9IVFRQID0gIkhUVFAvMS4xIDQwNCBOb3QgRm91bmRcclxuIgorICAgICJTZXJ2ZXI6ICIgUlRTUERWRVJTSU9OICJcclxuIgorICAgICJDb25uZWN0aW9uOiBjbG9zZVxyXG4iCisgICAgIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sIgorICAgIEVORF9PRl9IRUFERVJTCisgICAgIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU5cIj5cbiIKKyAgICAiPEhUTUw+PEhFQUQ+XG4iCisgICAgIjxUSVRMRT40MDQgTm90IEZvdW5kPC9USVRMRT5cbiIKKyAgICAiPC9IRUFEPjxCT0RZPlxuIgorICAgICI8SDE+Tm90IEZvdW5kPC9IMT5cbiIKKyAgICAiVGhlIHJlcXVlc3RlZCBVUkwgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci5cbiIKKyAgICAiPFA+PEhSPjxBRERSRVNTPiIgUlRTUERWRVJTSU9OICI8L0FERFJFU1M+XG4iICI8L0JPRFk+PC9IVE1MPlxuIjsKKworLyogc2VuZCBiYWNrIHRoaXMgb24gUlRTUCA0MDQgZmlsZSBub3QgZm91bmQgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkb2M0MDRfUlRTUCA9ICJSVFNQLzEuMCA0MDQgTm90IEZvdW5kXHJcbiIKKyAgICAiU2VydmVyOiAiIFJUU1BEVkVSU0lPTgorICAgIEVORF9PRl9IRUFERVJTOworCisvKiBEZWZhdWx0IHNpemUgdG8gc2VuZCBhd2F5IGZha2UgUlRQIGRhdGEgKi8KKyNkZWZpbmUgUlRQX0RBVEFfU0laRSAxMgorc3RhdGljIGNvbnN0IGNoYXIgKlJUUF9EQVRBID0gIiRfMTIzNFxuXDBhc2RmIjsKKworLyogZG8tbm90aGluZyBtYWNybyByZXBsYWNlbWVudCBmb3Igc3lzdGVtcyB3aGljaCBsYWNrIHNpZ2ludGVycnVwdCgpICovCisKKyNpZm5kZWYgSEFWRV9TSUdJTlRFUlJVUFQKKyNkZWZpbmUgc2lnaW50ZXJydXB0KHgseSkgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCisvKiB2YXJzIHVzZWQgdG8ga2VlcCBhcm91bmQgcHJldmlvdXMgc2lnbmFsIGhhbmRsZXJzICovCisKK3R5cGVkZWYgUkVUU0lHVFlQRSAoKlNJR0hBTkRMRVJfVCkoaW50KTsKKworI2lmZGVmIFNJR0hVUAorc3RhdGljIFNJR0hBTkRMRVJfVCBvbGRfc2lnaHVwX2hhbmRsZXIgID0gU0lHX0VSUjsKKyNlbmRpZgorCisjaWZkZWYgU0lHUElQRQorc3RhdGljIFNJR0hBTkRMRVJfVCBvbGRfc2lncGlwZV9oYW5kbGVyID0gU0lHX0VSUjsKKyNlbmRpZgorCisjaWZkZWYgU0lHQUxSTQorc3RhdGljIFNJR0hBTkRMRVJfVCBvbGRfc2lnYWxybV9oYW5kbGVyID0gU0lHX0VSUjsKKyNlbmRpZgorCisjaWZkZWYgU0lHSU5UCitzdGF0aWMgU0lHSEFORExFUl9UIG9sZF9zaWdpbnRfaGFuZGxlciAgPSBTSUdfRVJSOworI2VuZGlmCisKKyNpZmRlZiBTSUdURVJNCitzdGF0aWMgU0lHSEFORExFUl9UIG9sZF9zaWd0ZXJtX2hhbmRsZXIgPSBTSUdfRVJSOworI2VuZGlmCisKKy8qIHZhciB3aGljaCBpZiBzZXQgaW5kaWNhdGVzIHRoYXQgdGhlIHByb2dyYW0gc2hvdWxkIGZpbmlzaCBleGVjdXRpb24gKi8KKworU0lHX0FUT01JQ19UIGdvdF9leGl0X3NpZ25hbCA9IDA7CisKKy8qIGlmIG5leHQgaXMgc2V0IGluZGljYXRlcyB0aGUgZmlyc3Qgc2lnbmFsIGhhbmRsZWQgaW4gZXhpdF9zaWduYWxfaGFuZGxlciAqLworCitzdGF0aWMgdm9sYXRpbGUgaW50IGV4aXRfc2lnbmFsID0gMDsKKworLyogc2lnbmFsIGhhbmRsZXIgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtCisgIHNob3VsZCBmaW5pc2ggaXRzIGV4ZWN1dGlvbiBpbiBhIGNvbnRyb2xsZWQgbWFubmVyIGFzIHNvb24gYXMgcG9zc2libGUuCisgIFRoZSBmaXJzdCB0aW1lIHRoaXMgaXMgY2FsbGVkIGl0IHdpbGwgc2V0IGdvdF9leGl0X3NpZ25hbCB0byBvbmUgYW5kCisgIHN0b3JlIGluIGV4aXRfc2lnbmFsIHRoZSBzaWduYWwgdGhhdCB0cmlnZ2VyZWQgaXRzIGV4ZWN1dGlvbi4gKi8KKworc3RhdGljIFJFVFNJR1RZUEUgZXhpdF9zaWduYWxfaGFuZGxlcihpbnQgc2lnbnVtKQoreworICBpbnQgb2xkX2Vycm5vID0gRVJSTk87CisgIGlmKGdvdF9leGl0X3NpZ25hbCA9PSAwKSB7CisgICAgZ290X2V4aXRfc2lnbmFsID0gMTsKKyAgICBleGl0X3NpZ25hbCA9IHNpZ251bTsKKyAgfQorICAodm9pZClzaWduYWwoc2lnbnVtLCBleGl0X3NpZ25hbF9oYW5kbGVyKTsKKyAgU0VUX0VSUk5PKG9sZF9lcnJubyk7Cit9CisKK3N0YXRpYyB2b2lkIGluc3RhbGxfc2lnbmFsX2hhbmRsZXJzKHZvaWQpCit7CisjaWZkZWYgU0lHSFVQCisgIC8qIGlnbm9yZSBTSUdIVVAgc2lnbmFsICovCisgIGlmKChvbGRfc2lnaHVwX2hhbmRsZXIgPSBzaWduYWwoU0lHSFVQLCBTSUdfSUdOKSkgPT0gU0lHX0VSUikKKyAgICBsb2dtc2coImNhbm5vdCBpbnN0YWxsIFNJR0hVUCBoYW5kbGVyOiAlcyIsIHN0cmVycm9yKEVSUk5PKSk7CisjZW5kaWYKKyNpZmRlZiBTSUdQSVBFCisgIC8qIGlnbm9yZSBTSUdQSVBFIHNpZ25hbCAqLworICBpZigob2xkX3NpZ3BpcGVfaGFuZGxlciA9IHNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKSkgPT0gU0lHX0VSUikKKyAgICBsb2dtc2coImNhbm5vdCBpbnN0YWxsIFNJR1BJUEUgaGFuZGxlcjogJXMiLCBzdHJlcnJvcihFUlJOTykpOworI2VuZGlmCisjaWZkZWYgU0lHQUxSTQorICAvKiBpZ25vcmUgU0lHQUxSTSBzaWduYWwgKi8KKyAgaWYoKG9sZF9zaWdhbHJtX2hhbmRsZXIgPSBzaWduYWwoU0lHQUxSTSwgU0lHX0lHTikpID09IFNJR19FUlIpCisgICAgbG9nbXNnKCJjYW5ub3QgaW5zdGFsbCBTSUdBTFJNIGhhbmRsZXI6ICVzIiwgc3RyZXJyb3IoRVJSTk8pKTsKKyNlbmRpZgorI2lmZGVmIFNJR0lOVAorICAvKiBoYW5kbGUgU0lHSU5UIHNpZ25hbCB3aXRoIG91ciBleGl0X3NpZ25hbF9oYW5kbGVyICovCisgIGlmKChvbGRfc2lnaW50X2hhbmRsZXIgPSBzaWduYWwoU0lHSU5ULCBleGl0X3NpZ25hbF9oYW5kbGVyKSkgPT0gU0lHX0VSUikKKyAgICBsb2dtc2coImNhbm5vdCBpbnN0YWxsIFNJR0lOVCBoYW5kbGVyOiAlcyIsIHN0cmVycm9yKEVSUk5PKSk7CisgIGVsc2UKKyAgICBzaWdpbnRlcnJ1cHQoU0lHSU5ULCAxKTsKKyNlbmRpZgorI2lmZGVmIFNJR1RFUk0KKyAgLyogaGFuZGxlIFNJR1RFUk0gc2lnbmFsIHdpdGggb3VyIGV4aXRfc2lnbmFsX2hhbmRsZXIgKi8KKyAgaWYoKG9sZF9zaWd0ZXJtX2hhbmRsZXIgPSBzaWduYWwoU0lHVEVSTSwgZXhpdF9zaWduYWxfaGFuZGxlcikpID09IFNJR19FUlIpCisgICAgbG9nbXNnKCJjYW5ub3QgaW5zdGFsbCBTSUdURVJNIGhhbmRsZXI6ICVzIiwgc3RyZXJyb3IoRVJSTk8pKTsKKyAgZWxzZQorICAgIHNpZ2ludGVycnVwdChTSUdURVJNLCAxKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCByZXN0b3JlX3NpZ25hbF9oYW5kbGVycyh2b2lkKQoreworI2lmZGVmIFNJR0hVUAorICBpZihTSUdfRVJSICE9IG9sZF9zaWdodXBfaGFuZGxlcikKKyAgICAodm9pZClzaWduYWwoU0lHSFVQLCBvbGRfc2lnaHVwX2hhbmRsZXIpOworI2VuZGlmCisjaWZkZWYgU0lHUElQRQorICBpZihTSUdfRVJSICE9IG9sZF9zaWdwaXBlX2hhbmRsZXIpCisgICAgKHZvaWQpc2lnbmFsKFNJR1BJUEUsIG9sZF9zaWdwaXBlX2hhbmRsZXIpOworI2VuZGlmCisjaWZkZWYgU0lHQUxSTQorICBpZihTSUdfRVJSICE9IG9sZF9zaWdhbHJtX2hhbmRsZXIpCisgICAgKHZvaWQpc2lnbmFsKFNJR0FMUk0sIG9sZF9zaWdhbHJtX2hhbmRsZXIpOworI2VuZGlmCisjaWZkZWYgU0lHSU5UCisgIGlmKFNJR19FUlIgIT0gb2xkX3NpZ2ludF9oYW5kbGVyKQorICAgICh2b2lkKXNpZ25hbChTSUdJTlQsIG9sZF9zaWdpbnRfaGFuZGxlcik7CisjZW5kaWYKKyNpZmRlZiBTSUdURVJNCisgIGlmKFNJR19FUlIgIT0gb2xkX3NpZ3Rlcm1faGFuZGxlcikKKyAgICAodm9pZClzaWduYWwoU0lHVEVSTSwgb2xkX3NpZ3Rlcm1faGFuZGxlcik7CisjZW5kaWYKK30KKworc3RhdGljIGludCBQcm9jZXNzUmVxdWVzdChzdHJ1Y3QgaHR0cHJlcXVlc3QgKnJlcSkKK3sKKyAgY2hhciAqbGluZT0mcmVxLT5yZXFidWZbcmVxLT5jaGVja2luZGV4XTsKKyAgYm9vbCBjaHVua2VkID0gRkFMU0U7CisgIHN0YXRpYyBjaGFyIHJlcXVlc3RbUkVRVUVTVF9LRVlXT1JEX1NJWkVdOworICBzdGF0aWMgY2hhciBkb2NbTUFYRE9DTkFNRUxFTl07CisgIHN0YXRpYyBjaGFyIHByb3Rfc3RyWzVdOworICBjaGFyIGxvZ2J1ZlsyNTZdOworICBpbnQgcHJvdF9tYWpvciwgcHJvdF9taW5vcjsKKyAgY2hhciAqZW5kOworICBpbnQgZXJyb3I7CisgIGVuZCA9IHN0cnN0cihsaW5lLCBFTkRfT0ZfSEVBREVSUyk7CisKKyAgbG9nbXNnKCJQcm9jZXNzUmVxdWVzdCgpIGNhbGxlZCB3aXRoIHRlc3RubyAlbGQgYW5kIGxpbmUgWyVzXSIsCisgICAgICAgICByZXEtPnRlc3RubywgbGluZSk7CisKKyAgLyogdHJ5IHRvIGZpZ3VyZSBvdXQgdGhlIHJlcXVlc3QgY2hhcmFjdGVyaXN0aWNzIGFzIHNvb24gYXMgcG9zc2libGUsIGJ1dAorICAgICBvbmx5IG9uY2UhICovCisgIGlmKChyZXEtPnRlc3RubyA9PSBET0NOVU1CRVJfTk9USElORykgJiYKKyAgICAgc3NjYW5mKGxpbmUsCisgICAgICAgICAgICAiJSIgUkVRVUVTVF9LRVlXT1JEX1NJWkVfVFhUInMgJSIgTUFYRE9DTkFNRUxFTl9UWFQgInMgJTRzLyVkLiVkIiwKKyAgICAgICAgICAgIHJlcXVlc3QsCisgICAgICAgICAgICBkb2MsCisgICAgICAgICAgICBwcm90X3N0ciwKKyAgICAgICAgICAgICZwcm90X21ham9yLAorICAgICAgICAgICAgJnByb3RfbWlub3IpID09IDUpIHsKKyAgICBjaGFyICpwdHI7CisKKyAgICBpZighc3RyY21wKHByb3Rfc3RyLCAiSFRUUCIpKSB7CisgICAgICAgIHJlcS0+cHJvdG9jb2wgPSBSUFJPVF9IVFRQOworICAgIH0KKyAgICBlbHNlIGlmKCFzdHJjbXAocHJvdF9zdHIsICJSVFNQIikpIHsKKyAgICAgICAgcmVxLT5wcm90b2NvbCA9IFJQUk9UX1JUU1A7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXEtPnByb3RvY29sID0gUlBST1RfTk9ORTsKKyAgICAgICAgbG9nbXNnKCJnb3QgdW5rbm93biBwcm90b2NvbCAlcyIsIHByb3Rfc3RyKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmVxLT5wcm90X3ZlcnNpb24gPSBwcm90X21ham9yKjEwICsgcHJvdF9taW5vcjsKKworICAgIC8qIGZpbmQgdGhlIGxhc3Qgc2xhc2ggKi8KKyAgICBwdHIgPSBzdHJyY2hyKGRvYywgJy8nKTsKKworICAgIC8qIGdldCB0aGUgbnVtYmVyIGFmdGVyIGl0ICovCisgICAgaWYocHRyKSB7CisgICAgICBGSUxFICpzdHJlYW07CisgICAgICBjaGFyICpmaWxlbmFtZTsKKworICAgICAgaWYoKHN0cmxlbihkb2MpICsgc3RybGVuKHJlcXVlc3QpKSA8IDIwMCkKKyAgICAgICAgc3ByaW50Zihsb2didWYsICJHb3QgcmVxdWVzdDogJXMgJXMgJXMvJWQuJWQiLAorICAgICAgICAgICAgICAgIHJlcXVlc3QsIGRvYywgcHJvdF9zdHIsIHByb3RfbWFqb3IsIHByb3RfbWlub3IpOworICAgICAgZWxzZQorICAgICAgICBzcHJpbnRmKGxvZ2J1ZiwgIkdvdCBhICpIVUdFKiByZXF1ZXN0ICVzLyVkLiVkIiwKKyAgICAgICAgICAgICAgICBwcm90X3N0ciwgcHJvdF9tYWpvciwgcHJvdF9taW5vcik7CisgICAgICBsb2dtc2coIiVzIiwgbG9nYnVmKTsKKworICAgICAgaWYoIXN0cm5jbXAoIi92ZXJpZmllZHNlcnZlciIsIHB0ciwgMTUpKSB7CisgICAgICAgIGxvZ21zZygiQXJlLXdlLWZyaWVuZGx5IHF1ZXN0aW9uIHJlY2VpdmVkIik7CisgICAgICAgIHJlcS0+dGVzdG5vID0gRE9DTlVNQkVSX1dFUlVMRVo7CisgICAgICAgIHJldHVybiAxOyAvKiBkb25lICovCisgICAgICB9CisKKyAgICAgIGlmKCFzdHJuY21wKCIvcXVpdCIsIHB0ciwgNSkpIHsKKyAgICAgICAgbG9nbXNnKCJSZXF1ZXN0LXRvLXF1aXQgcmVjZWl2ZWQiKTsKKyAgICAgICAgcmVxLT50ZXN0bm8gPSBET0NOVU1CRVJfUVVJVDsKKyAgICAgICAgcmV0dXJuIDE7IC8qIGRvbmUgKi8KKyAgICAgIH0KKworICAgICAgcHRyKys7IC8qIHNraXAgdGhlIHNsYXNoICovCisKKyAgICAgIC8qIHNraXAgYWxsIG5vbi1udW1lcmljYWxzIGZvbGxvd2luZyB0aGUgc2xhc2ggKi8KKyAgICAgIHdoaWxlKCpwdHIgJiYgIUlTRElHSVQoKnB0cikpCisgICAgICAgIHB0cisrOworCisgICAgICByZXEtPnRlc3RubyA9IHN0cnRvbChwdHIsICZwdHIsIDEwKTsKKworICAgICAgaWYocmVxLT50ZXN0bm8gPiAxMDAwMCkgeworICAgICAgICByZXEtPnBhcnRubyA9IHJlcS0+dGVzdG5vICUgMTAwMDA7CisgICAgICAgIHJlcS0+dGVzdG5vIC89IDEwMDAwOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXEtPnBhcnRubyA9IDA7CisKKyAgICAgIHNwcmludGYobG9nYnVmLCAiUmVxdWVzdGVkIHRlc3QgbnVtYmVyICVsZCBwYXJ0ICVsZCIsCisgICAgICAgICAgICAgIHJlcS0+dGVzdG5vLCByZXEtPnBhcnRubyk7CisgICAgICBsb2dtc2coIiVzIiwgbG9nYnVmKTsKKworICAgICAgZmlsZW5hbWUgPSB0ZXN0MmZpbGUocmVxLT50ZXN0bm8pOworCisgICAgICBzdHJlYW09Zm9wZW4oZmlsZW5hbWUsICJyYiIpOworICAgICAgaWYoIXN0cmVhbSkgeworICAgICAgICBlcnJvciA9IEVSUk5POworICAgICAgICBsb2dtc2coImZvcGVuKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkICVzIiwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgICAgIGxvZ21zZygiRXJyb3Igb3BlbmluZyBmaWxlOiAlcyIsIGZpbGVuYW1lKTsKKyAgICAgICAgbG9nbXNnKCJDb3VsZG4ndCBvcGVuIHRlc3QgZmlsZSAlbGQiLCByZXEtPnRlc3Rubyk7CisgICAgICAgIHJlcS0+b3BlbiA9IEZBTFNFOyAvKiBjbG9zZXMgY29ubmVjdGlvbiAqLworICAgICAgICByZXR1cm4gMTsgLyogZG9uZSAqLworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGNoYXIgKmNtZCA9IE5VTEw7CisgICAgICAgIHNpemVfdCBjbWRzaXplID0gMDsKKyAgICAgICAgaW50IG51bT0wOworCisgICAgICAgIGludCBydHBfY2hhbm5lbCA9IDA7CisgICAgICAgIGludCBydHBfc2l6ZSA9IDA7CisgICAgICAgIGludCBydHBfcGFydG5vID0gLTE7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgY2hhciAqcnRwX3NjcmF0Y2ggPSBOVUxMOworCisgICAgICAgIC8qIGdldCB0aGUgY3VzdG9tIHNlcnZlciBjb250cm9sICJjb21tYW5kcyIgKi8KKyAgICAgICAgZXJyb3IgPSBnZXRwYXJ0KCZjbWQsICZjbWRzaXplLCAicmVwbHkiLCAic2VydmVyY21kIiwgc3RyZWFtKTsKKyAgICAgICAgZmNsb3NlKHN0cmVhbSk7CisgICAgICAgIGlmKGVycm9yKSB7CisgICAgICAgICAgbG9nbXNnKCJnZXRwYXJ0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkIiwgZXJyb3IpOworICAgICAgICAgIHJlcS0+b3BlbiA9IEZBTFNFOyAvKiBjbG9zZXMgY29ubmVjdGlvbiAqLworICAgICAgICAgIHJldHVybiAxOyAvKiBkb25lICovCisgICAgICAgIH0KKyAgICAgICAgcHRyID0gY21kOworCisgICAgICAgIGlmKGNtZHNpemUpIHsKKyAgICAgICAgICBsb2dtc2coIkZvdW5kIGEgcmVwbHktc2VydmVyY21kIHNlY3Rpb24hIik7CisgICAgICAgICAgZG8geworICAgICAgICAgICAgaWYoIXN0cm5jbXAoQ01EX0FVVEhfUkVRVUlSRUQsIHB0ciwgc3RybGVuKENNRF9BVVRIX1JFUVVJUkVEKSkpIHsKKyAgICAgICAgICAgICAgbG9nbXNnKCJpbnN0cnVjdGVkIHRvIHJlcXVpcmUgYXV0aG9yaXphdGlvbiBoZWFkZXIiKTsKKyAgICAgICAgICAgICAgcmVxLT5hdXRoX3JlcSA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCFzdHJuY21wKENNRF9JRExFLCBwdHIsIHN0cmxlbihDTURfSURMRSkpKSB7CisgICAgICAgICAgICAgIGxvZ21zZygiaW5zdHJ1Y3RlZCB0byBpZGxlIik7CisgICAgICAgICAgICAgIHJlcS0+cmNtZCA9IFJDTURfSURMRTsKKyAgICAgICAgICAgICAgcmVxLT5vcGVuID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIXN0cm5jbXAoQ01EX1NUUkVBTSwgcHRyLCBzdHJsZW4oQ01EX1NUUkVBTSkpKSB7CisgICAgICAgICAgICAgIGxvZ21zZygiaW5zdHJ1Y3RlZCB0byBzdHJlYW0iKTsKKyAgICAgICAgICAgICAgcmVxLT5yY21kID0gUkNNRF9TVFJFQU07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKDEgPT0gc3NjYW5mKHB0ciwgInBpcGU6ICVkIiwgJm51bSkpIHsKKyAgICAgICAgICAgICAgbG9nbXNnKCJpbnN0cnVjdGVkIHRvIGFsbG93IGEgcGlwZSBzaXplIG9mICVkIiwgbnVtKTsKKyAgICAgICAgICAgICAgaWYobnVtIDwgMCkKKyAgICAgICAgICAgICAgICBsb2dtc2coIm5lZ2F0aXZlIHBpcGUgc2l6ZSBpZ25vcmVkIik7CisgICAgICAgICAgICAgIGVsc2UgaWYobnVtID4gMCkKKyAgICAgICAgICAgICAgICByZXEtPnBpcGUgPSBudW0tMTsgLyogZGVjcmVhc2UgYnkgb25lIHNpbmNlIHdlIGRvbid0IGNvdW50IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCByZXF1ZXN0IGluIHRoaXMgbnVtYmVyICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKDEgPT0gc3NjYW5mKHB0ciwgInNraXA6ICVkIiwgJm51bSkpIHsKKyAgICAgICAgICAgICAgbG9nbXNnKCJpbnN0cnVjdGVkIHRvIHNraXAgdGhpcyBudW1iZXIgb2YgYnl0ZXMgJWQiLCBudW0pOworICAgICAgICAgICAgICByZXEtPnNraXAgPSBudW07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKDMgPT0gc3NjYW5mKHB0ciwgInJ0cDogcGFydCAlZCBjaGFubmVsICVkIHNpemUgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcnRwX3BhcnRubywgJnJ0cF9jaGFubmVsLCAmcnRwX3NpemUpKSB7CisKKyAgICAgICAgICAgICAgaWYocnRwX3BhcnRubyA9PSByZXEtPnBhcnRubykgeworICAgICAgICAgICAgICAgIGxvZ21zZygiUlRQOiBwYXJ0ICVkIGNoYW5uZWwgJWQgc2l6ZSAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgIHJ0cF9wYXJ0bm8sIHJ0cF9jaGFubmVsLCBydHBfc2l6ZSk7CisKKyAgICAgICAgICAgICAgICAvKiBNYWtlIG91ciBzY3JhdGNoIGJ1ZmZlciBlbm91Z2ggdG8gZml0IGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgKiBkZXNpcmVkIGRhdGEgYW5kIG9uZSBmb3IgcGFkZGluZyAqLworICAgICAgICAgICAgICAgIHJ0cF9zY3JhdGNoID0gbWFsbG9jKHJ0cF9zaXplICsgNCArIFJUUF9EQVRBX1NJWkUpOworCisgICAgICAgICAgICAgICAgLyogUlRQIGlzIHNpZ25hbGxlZCB3aXRoIGEgJCAqLworICAgICAgICAgICAgICAgIHJ0cF9zY3JhdGNoWzBdID0gJyQnOworCisgICAgICAgICAgICAgICAgLyogVGhlIGNoYW5uZWwgZm9sbG93cyBhbmQgaXMgb25lIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICBTRVRfUlRQX1BLVF9DSE4ocnRwX3NjcmF0Y2ggLHJ0cF9jaGFubmVsKTsKKworICAgICAgICAgICAgICAgIC8qIExlbmd0aCBmb2xsb3dzIGFuZCBpcyBhIHR3byBieXRlIHNob3J0IGluIG5ldHdvcmsgb3JkZXIgKi8KKyAgICAgICAgICAgICAgICBTRVRfUlRQX1BLVF9MRU4ocnRwX3NjcmF0Y2gsIHJ0cF9zaXplKTsKKworICAgICAgICAgICAgICAgIC8qIEZpbGwgaXQgd2l0aCBqdW5rIGRhdGEgKi8KKyAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBydHBfc2l6ZTsgaSs9IFJUUF9EQVRBX1NJWkUpIHsKKyAgICAgICAgICAgICAgICAgIG1lbWNweShydHBfc2NyYXRjaCArIDQgKyBpLCBSVFBfREFUQSwgUlRQX0RBVEFfU0laRSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYocmVxLT5ydHBfYnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgIHJlcS0+cnRwX2J1ZmZlciA9IHJ0cF9zY3JhdGNoOworICAgICAgICAgICAgICAgICAgcmVxLT5ydHBfYnVmZmVyc2l6ZSA9IHJ0cF9zaXplICsgNDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgcmVxLT5ydHBfYnVmZmVyID0gcmVhbGxvYyhyZXEtPnJ0cF9idWZmZXIsIHJlcS0+cnRwX2J1ZmZlcnNpemUgKyBydHBfc2l6ZSArIDQpOworICAgICAgICAgICAgICAgICAgbWVtY3B5KHJlcS0+cnRwX2J1ZmZlciArIHJlcS0+cnRwX2J1ZmZlcnNpemUsIHJ0cF9zY3JhdGNoLCBydHBfc2l6ZSArIDQpOworICAgICAgICAgICAgICAgICAgcmVxLT5ydHBfYnVmZmVyc2l6ZSArPSBydHBfc2l6ZSArIDQ7CisgICAgICAgICAgICAgICAgICBmcmVlKHJ0cF9zY3JhdGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbG9nbXNnKCJydHBfYnVmZmVyc2l6ZSBpcyAlenUsIHJ0cF9zaXplIGlzICVkLiIsIHJlcS0+cnRwX2J1ZmZlcnNpemUsIHJ0cF9zaXplKTsKKworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgbG9nbXNnKCJmdW5ueSBpbnN0cnVjdGlvbiBmb3VuZDogJXMiLCBwdHIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdHIgPSBzdHJjaHIocHRyLCAnXG4nKTsKKyAgICAgICAgICAgIGlmKHB0cikKKyAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHB0ciA9IE5VTEw7CisgICAgICAgICAgfSB3aGlsZShwdHIgJiYgKnB0cik7CisgICAgICAgICAgbG9nbXNnKCJEb25lIHBhcnNpbmcgc2VydmVyIGNvbW1hbmRzIik7CisgICAgICAgIH0KKyAgICAgICAgaWYoY21kKQorICAgICAgICAgIGZyZWUoY21kKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZihzc2NhbmYocmVxLT5yZXFidWYsICJDT05ORUNUICUiIE1BWERPQ05BTUVMRU5fVFhUICJzIEhUVFAvJWQuJWQiLAorICAgICAgICAgICAgICAgIGRvYywgJnByb3RfbWFqb3IsICZwcm90X21pbm9yKSA9PSAzKSB7CisgICAgICAgIHNwcmludGYobG9nYnVmLCAiUmVjZWl2ZWQgYSBDT05ORUNUICVzIEhUVFAvJWQuJWQgcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgZG9jLCBwcm90X21ham9yLCBwcm90X21pbm9yKTsKKyAgICAgICAgbG9nbXNnKCIlcyIsIGxvZ2J1Zik7CisKKyAgICAgICAgaWYocmVxLT5wcm90X3ZlcnNpb24gPT0gMTApCisgICAgICAgICAgcmVxLT5vcGVuID0gRkFMU0U7IC8qIEhUVFAgMS4wIGNsb3NlcyBjb25uZWN0aW9uIGJ5IGRlZmF1bHQgKi8KKworICAgICAgICBpZighc3RybmNtcChkb2MsICJiYWQiLCAzKSkKKyAgICAgICAgICAvKiBpZiB0aGUgaG9zdCBuYW1lIHN0YXJ0cyB3aXRoIGJhZCwgd2UgZmFrZSBhbiBlcnJvciBoZXJlICovCisgICAgICAgICAgcmVxLT50ZXN0bm8gPSBET0NOVU1CRVJfQkFEQ09OTkVDVDsKKyAgICAgICAgZWxzZSBpZighc3RybmNtcChkb2MsICJ0ZXN0IiwgNCkpIHsKKyAgICAgICAgICAvKiBpZiB0aGUgaG9zdCBuYW1lIHN0YXJ0cyB3aXRoIHRlc3QsIHRoZSBwb3J0IG51bWJlciB1c2VkIGluIHRoZQorICAgICAgICAgICAgIENPTk5FQ1QgbGluZSB3aWxsIGJlIHVzZWQgYXMgdGVzdCBudW1iZXIhICovCisgICAgICAgICAgY2hhciAqcG9ydHAgPSBzdHJjaHIoZG9jLCAnOicpOworICAgICAgICAgIGlmKHBvcnRwICYmICgqKHBvcnRwKzEpICE9ICdcMCcpICYmIElTRElHSVQoKihwb3J0cCsxKSkpCisgICAgICAgICAgICByZXEtPnRlc3RubyA9IHN0cnRvbChwb3J0cCsxLCBOVUxMLCAxMCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVxLT50ZXN0bm8gPSBET0NOVU1CRVJfQ09OTkVDVDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcmVxLT50ZXN0bm8gPSBET0NOVU1CRVJfQ09OTkVDVDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBsb2dtc2coIkRpZCBub3QgZmluZCB0ZXN0IG51bWJlciBpbiBQQVRIIik7CisgICAgICAgIHJlcS0+dGVzdG5vID0gRE9DTlVNQkVSXzQwNDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZighZW5kKSB7CisgICAgLyogd2UgZG9uJ3QgaGF2ZSBhIGNvbXBsZXRlIHJlcXVlc3QgeWV0ISAqLworICAgIGxvZ21zZygiUHJvY2Vzc1JlcXVlc3QgcmV0dXJuZWQgd2l0aG91dCBhIGNvbXBsZXRlIHJlcXVlc3QiKTsKKyAgICByZXR1cm4gMDsgLyogbm90IGNvbXBsZXRlIHlldCAqLworICB9CisgIGxvZ21zZygiUHJvY2Vzc1JlcXVlc3QgZm91bmQgYSBjb21wbGV0ZSByZXF1ZXN0Iik7CisKKyAgaWYocmVxLT5waXBlKQorICAgIC8qIHdlIGRvIGhhdmUgYSBmdWxsIHNldCwgYWR2YW5jZSB0aGUgY2hlY2tpbmRleCB0byBhZnRlciB0aGUgZW5kIG9mIHRoZQorICAgICAgIGhlYWRlcnMsIGZvciB0aGUgcGlwZWxpbmluZyBjYXNlIG1vc3RseSAqLworICAgIHJlcS0+Y2hlY2tpbmRleCArPSAoZW5kIC0gbGluZSkgKyBzdHJsZW4oRU5EX09GX0hFQURFUlMpOworCisgIC8qICoqKiogUGVyc2lzdGVuY2UgKioqKgorICAgKgorICAgKiBJZiB0aGUgcmVxdWVzdCBpcyBhIEhUVFAvMS4wIG9uZSwgd2UgY2xvc2UgdGhlIGNvbm5lY3Rpb24gdW5jb25kaXRpb25hbGx5CisgICAqIHdoZW4gd2UncmUgZG9uZS4KKyAgICoKKyAgICogSWYgdGhlIHJlcXVlc3QgaXMgYSBIVFRQLzEuMSBvbmUsIHdlIE1VU1QgY2hlY2sgZm9yIGEgIkNvbm5lY3Rpb246IgorICAgKiBoZWFkZXIgdGhhdCBtaWdodCBzYXkgImNsb3NlIi4gSWYgaXQgZG9lcywgd2UgY2xvc2UgYSBjb25uZWN0aW9uIHdoZW4KKyAgICogdGhpcyByZXF1ZXN0IGlzIHByb2Nlc3NlZC4gT3RoZXJ3aXNlLCB3ZSBrZWVwIHRoZSBjb25uZWN0aW9uIGFsaXZlIGZvciBYCisgICAqIHNlY29uZHMuCisgICAqLworCisgIGRvIHsKKyAgICBpZihnb3RfZXhpdF9zaWduYWwpCisgICAgICByZXR1cm4gMTsgLyogZG9uZSAqLworCisgICAgaWYoKHJlcS0+Y2w9PTApICYmIGN1cmx4X3N0cm5lcXVhbCgiQ29udGVudC1MZW5ndGg6IiwgbGluZSwgMTUpKSB7CisgICAgICAvKiBJZiB3ZSBkb24ndCBpZ25vcmUgY29udGVudC1sZW5ndGgsIHdlIHJlYWQgaXQgYW5kIHdlIHJlYWQgdGhlIHdob2xlCisgICAgICAgICByZXF1ZXN0IGluY2x1ZGluZyB0aGUgYm9keSBiZWZvcmUgd2UgcmV0dXJuLiBJZiB3ZSd2ZSBiZWVuIHRvbGQgdG8KKyAgICAgICAgIGlnbm9yZSB0aGUgY29udGVudC1sZW5ndGgsIHdlIHdpbGwgcmV0dXJuIGFzIHNvb24gYXMgYWxsIGhlYWRlcnMKKyAgICAgICAgIGhhdmUgYmVlbiByZWNlaXZlZCAqLworICAgICAgY2hhciAqZW5kcHRyOworICAgICAgY2hhciAqcHRyID0gbGluZSArIDE1OworICAgICAgdW5zaWduZWQgbG9uZyBjbGVuID0gMDsKKyAgICAgIHdoaWxlKCpwdHIgJiYgSVNTUEFDRSgqcHRyKSkKKyAgICAgICAgcHRyKys7CisgICAgICBlbmRwdHIgPSBwdHI7CisgICAgICBTRVRfRVJSTk8oMCk7CisgICAgICBjbGVuID0gc3RydG91bChwdHIsICZlbmRwdHIsIDEwKTsKKyAgICAgIGlmKChwdHIgPT0gZW5kcHRyKSB8fCAhSVNTUEFDRSgqZW5kcHRyKSB8fCAoRVJBTkdFID09IEVSUk5PKSkgeworICAgICAgICAvKiB0aGlzIGFzc3VtZXMgdGhhdCBhIHplcm8gQ29udGVudC1MZW5ndGggaXMgdmFsaWQgKi8KKyAgICAgICAgbG9nbXNnKCJGb3VuZCBpbnZhbGlkIENvbnRlbnQtTGVuZ3RoOiAoJXMpIGluIHRoZSByZXF1ZXN0IiwgcHRyKTsKKyAgICAgICAgcmVxLT5vcGVuID0gRkFMU0U7IC8qIGNsb3NlcyBjb25uZWN0aW9uICovCisgICAgICAgIHJldHVybiAxOyAvKiBkb25lICovCisgICAgICB9CisgICAgICByZXEtPmNsID0gY2xlbiAtIHJlcS0+c2tpcDsKKworICAgICAgbG9nbXNnKCJGb3VuZCBDb250ZW50LUxlbmd0aDogJWx1IGluIHRoZSByZXF1ZXN0IiwgY2xlbik7CisgICAgICBpZihyZXEtPnNraXApCisgICAgICAgIGxvZ21zZygiLi4uIGJ1dCB3aWxsIGFib3J0IGFmdGVyICV6dSBieXRlcyIsIHJlcS0+Y2wpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGVsc2UgaWYoY3VybHhfc3RybmVxdWFsKCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIsIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIpKSkgeworICAgICAgLyogY2h1bmtlZCBkYXRhIGNvbWluZyBpbiAqLworICAgICAgY2h1bmtlZCA9IFRSVUU7CisgICAgfQorCisgICAgaWYoY2h1bmtlZCkgeworICAgICAgaWYoc3Ryc3RyKHJlcS0+cmVxYnVmLCAiXHJcbjBcclxuXHJcbiIpKQorICAgICAgICAvKiBlbmQgb2YgY2h1bmtzIHJlYWNoZWQgKi8KKyAgICAgICAgcmV0dXJuIDE7IC8qIGRvbmUgKi8KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7IC8qIG5vdCBkb25lICovCisgICAgfQorCisgICAgbGluZSA9IHN0cmNocihsaW5lLCAnXG4nKTsKKyAgICBpZihsaW5lKQorICAgICAgbGluZSsrOworCisgIH0gd2hpbGUobGluZSk7CisKKyAgaWYoIXJlcS0+YXV0aCAmJiBzdHJzdHIocmVxLT5yZXFidWYsICJBdXRob3JpemF0aW9uOiIpKSB7CisgICAgcmVxLT5hdXRoID0gVFJVRTsgLyogQXV0aG9yaXphdGlvbjogaGVhZGVyIHByZXNlbnQhICovCisgICAgaWYocmVxLT5hdXRoX3JlcSkKKyAgICAgIGxvZ21zZygiQXV0aG9yaXphdGlvbiBoZWFkZXIgZm91bmQsIGFzIHJlcXVpcmVkIik7CisgIH0KKworICBpZighcmVxLT5kaWdlc3QgJiYgc3Ryc3RyKHJlcS0+cmVxYnVmLCAiQXV0aG9yaXphdGlvbjogRGlnZXN0IikpIHsKKyAgICAvKiBJZiB0aGUgY2xpZW50IGlzIHBhc3NpbmcgdGhpcyBEaWdlc3QtaGVhZGVyLCB3ZSBzZXQgdGhlIHBhcnQgbnVtYmVyCisgICAgICAgdG8gMTAwMC4gTm90IG9ubHkgdG8gc3BpY2UgdXAgdGhlIGNvbXBsZXhpdHkgb2YgdGhpcywgYnV0IHRvIG1ha2UKKyAgICAgICBEaWdlc3Qgc3R1ZmYgdG8gd29yayBpbiB0aGUgdGVzdCBzdWl0ZS4gKi8KKyAgICByZXEtPnBhcnRubyArPSAxMDAwOworICAgIHJlcS0+ZGlnZXN0ID0gVFJVRTsgLyogaGVhZGVyIGZvdW5kICovCisgICAgbG9nbXNnKCJSZWNlaXZlZCBEaWdlc3QgcmVxdWVzdCwgc2VuZGluZyBiYWNrIGRhdGEgJWxkIiwgcmVxLT5wYXJ0bm8pOworICB9CisgIGVsc2UgaWYoIXJlcS0+bnRsbSAmJgorICAgICAgICAgIHN0cnN0cihyZXEtPnJlcWJ1ZiwgIkF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEIikpIHsKKyAgICAvKiBJZiB0aGUgY2xpZW50IGlzIHBhc3NpbmcgdGhpcyB0eXBlLTMgTlRMTSBoZWFkZXIgKi8KKyAgICByZXEtPnBhcnRubyArPSAxMDAyOworICAgIHJlcS0+bnRsbSA9IFRSVUU7IC8qIE5UTE0gZm91bmQgKi8KKyAgICBsb2dtc2coIlJlY2VpdmVkIE5UTE0gdHlwZS0zLCBzZW5kaW5nIGJhY2sgZGF0YSAlbGQiLCByZXEtPnBhcnRubyk7CisgICAgaWYocmVxLT5jbCkgeworICAgICAgbG9nbXNnKCIgIEV4cGVjdGluZyAlenUgUE9TVGVkIGJ5dGVzIiwgcmVxLT5jbCk7CisgICAgfQorICB9CisgIGVsc2UgaWYoIXJlcS0+bnRsbSAmJgorICAgICAgICAgIHN0cnN0cihyZXEtPnJlcWJ1ZiwgIkF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCIikpIHsKKyAgICAvKiBJZiB0aGUgY2xpZW50IGlzIHBhc3NpbmcgdGhpcyB0eXBlLTEgTlRMTSBoZWFkZXIgKi8KKyAgICByZXEtPnBhcnRubyArPSAxMDAxOworICAgIHJlcS0+bnRsbSA9IFRSVUU7IC8qIE5UTE0gZm91bmQgKi8KKyAgICBsb2dtc2coIlJlY2VpdmVkIE5UTE0gdHlwZS0xLCBzZW5kaW5nIGJhY2sgZGF0YSAlbGQiLCByZXEtPnBhcnRubyk7CisgIH0KKyAgZWxzZSBpZigocmVxLT5wYXJ0bm8gPj0gMTAwMCkgJiYgc3Ryc3RyKHJlcS0+cmVxYnVmLCAiQXV0aG9yaXphdGlvbjogQmFzaWMiKSkgeworICAgIC8qIElmIHRoZSBjbGllbnQgaXMgcGFzc2luZyB0aGlzIEJhc2ljLWhlYWRlciBhbmQgdGhlIHBhcnQgbnVtYmVyIGlzIGFscmVhZHkKKyAgICAgICA+PTEwMDAsIHdlIGFkZCAxIHRvIHRoZSBwYXJ0IG51bWJlci4gIFRoaXMgYWxsb3dzIHNpbXBsZSBCYXNpYyBhdXRoZW50aWNhdGlvbgorICAgICAgIG5lZ290aWF0aW9uIHRvIHdvcmsgaW4gdGhlIHRlc3Qgc3VpdGUuICovCisgICAgcmVxLT5wYXJ0bm8gKz0gMTsKKyAgICBsb2dtc2coIlJlY2VpdmVkIEJhc2ljIHJlcXVlc3QsIHNlbmRpbmcgYmFjayBkYXRhICVsZCIsIHJlcS0+cGFydG5vKTsKKyAgfQorICBpZihzdHJzdHIocmVxLT5yZXFidWYsICJDb25uZWN0aW9uOiBjbG9zZSIpKQorICAgIHJlcS0+b3BlbiA9IEZBTFNFOyAvKiBjbG9zZSBjb25uZWN0aW9uIGFmdGVyIHRoaXMgcmVxdWVzdCAqLworCisgIGlmKCFyZXEtPnBpcGUgJiYKKyAgICAgcmVxLT5vcGVuICYmCisgICAgIHJlcS0+cHJvdF92ZXJzaW9uID49IDExICYmCisgICAgIGVuZCAmJgorICAgICByZXEtPnJlcWJ1ZiArIHJlcS0+b2Zmc2V0ID4gZW5kICsgc3RybGVuKEVORF9PRl9IRUFERVJTKSAmJgorICAgICAoIXN0cm5jbXAocmVxLT5yZXFidWYsICJHRVQiLCBzdHJsZW4oIkdFVCIpKSB8fAorICAgICAgIXN0cm5jbXAocmVxLT5yZXFidWYsICJIRUFEIiwgc3RybGVuKCJIRUFEIikpKSkgeworICAgIC8qIElmIHdlIGhhdmUgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24sIEhUVFAgdmVyc2lvbiA+PSAxLjEKKyAgICAgICBhbmQgR0VUL0hFQUQgcmVxdWVzdCwgZW5hYmxlIHBpcGVsaW5pbmcuICovCisgICAgcmVxLT5jaGVja2luZGV4ID0gKGVuZCAtIHJlcS0+cmVxYnVmKSArIHN0cmxlbihFTkRfT0ZfSEVBREVSUyk7CisgICAgcmVxLT5waXBlbGluaW5nID0gVFJVRTsKKyAgfQorCisgIHdoaWxlKHJlcS0+cGlwZSkgeworICAgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICAgIHJldHVybiAxOyAvKiBkb25lICovCisgICAgLyogc2NhbiBmb3IgbW9yZSBoZWFkZXIgZW5kcyB3aXRoaW4gdGhpcyBjaHVuayAqLworICAgIGxpbmUgPSAmcmVxLT5yZXFidWZbcmVxLT5jaGVja2luZGV4XTsKKyAgICBlbmQgPSBzdHJzdHIobGluZSwgRU5EX09GX0hFQURFUlMpOworICAgIGlmKCFlbmQpCisgICAgICBicmVhazsKKyAgICByZXEtPmNoZWNraW5kZXggKz0gKGVuZCAtIGxpbmUpICsgc3RybGVuKEVORF9PRl9IRUFERVJTKTsKKyAgICByZXEtPnBpcGUtLTsKKyAgfQorCisgIC8qIElmIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkIGFuZCBubyBhdXRoIHdhcyBwcm92aWRlZCwgZW5kIG5vdy4gVGhpcworICAgICBtYWtlcyB0aGUgc2VydmVyIE5PVCB3YWl0IGZvciBQVVQvUE9TVCBkYXRhIGFuZCB5b3UgY2FuIHRoZW4gbWFrZSB0aGUKKyAgICAgdGVzdCBjYXNlIHNlbmQgYSByZWplY3Rpb24gYmVmb3JlIGFueSBzdWNoIGRhdGEgaGFzIGJlZW4gc2VudC4gVGVzdCBjYXNlCisgICAgIDE1NCB1c2VzIHRoaXMuKi8KKyAgaWYocmVxLT5hdXRoX3JlcSAmJiAhcmVxLT5hdXRoKQorICAgIHJldHVybiAxOyAvKiBkb25lICovCisKKyAgaWYocmVxLT5jbCA+IDApIHsKKyAgICBpZihyZXEtPmNsIDw9IHJlcS0+b2Zmc2V0IC0gKGVuZCAtIHJlcS0+cmVxYnVmKSAtIHN0cmxlbihFTkRfT0ZfSEVBREVSUykpCisgICAgICByZXR1cm4gMTsgLyogZG9uZSAqLworICAgIGVsc2UKKyAgICAgIHJldHVybiAwOyAvKiBub3QgY29tcGxldGUgeWV0ICovCisgIH0KKworICByZXR1cm4gMTsgLyogZG9uZSAqLworfQorCisvKiBzdG9yZSB0aGUgZW50aXJlIHJlcXVlc3QgaW4gYSBmaWxlICovCitzdGF0aWMgdm9pZCBzdG9yZXJlcXVlc3QoY2hhciAqcmVxYnVmLCBzaXplX3QgdG90YWxzaXplKQoreworICBpbnQgcmVzOworICBpbnQgZXJyb3IgPSAwOworICBzaXplX3Qgd3JpdHRlbjsKKyAgc2l6ZV90IHdyaXRlbGVmdDsKKyAgRklMRSAqZHVtcDsKKworICBpZiAocmVxYnVmID09IE5VTEwpCisgICAgcmV0dXJuOworICBpZiAodG90YWxzaXplID09IDApCisgICAgcmV0dXJuOworCisgIGRvIHsKKyAgICBkdW1wID0gZm9wZW4oUkVRVUVTVF9EVU1QLCAiYWIiKTsKKyAgfSB3aGlsZSAoKGR1bXAgPT0gTlVMTCkgJiYgKChlcnJvciA9IEVSUk5PKSA9PSBFSU5UUikpOworICBpZiAoZHVtcCA9PSBOVUxMKSB7CisgICAgbG9nbXNnKCJFcnJvciBvcGVuaW5nIGZpbGUgJXMgZXJyb3I6ICVkICVzIiwKKyAgICAgICAgICAgUkVRVUVTVF9EVU1QLCBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICBsb2dtc2coIkZhaWxlZCB0byB3cml0ZSByZXF1ZXN0IGlucHV0IHRvICIgUkVRVUVTVF9EVU1QKTsKKyAgICByZXR1cm47CisgIH0KKworICB3cml0ZWxlZnQgPSB0b3RhbHNpemU7CisgIGRvIHsKKyAgICB3cml0dGVuID0gZndyaXRlKCZyZXFidWZbdG90YWxzaXplLXdyaXRlbGVmdF0sCisgICAgICAgICAgICAgICAgICAgICAxLCB3cml0ZWxlZnQsIGR1bXApOworICAgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICAgIGdvdG8gc3RvcmVyZXF1ZXN0X2NsZWFudXA7CisgICAgaWYod3JpdHRlbiA+IDApCisgICAgICB3cml0ZWxlZnQgLT0gd3JpdHRlbjsKKyAgfSB3aGlsZSAoKHdyaXRlbGVmdCA+IDApICYmICgoZXJyb3IgPSBFUlJOTykgPT0gRUlOVFIpKTsKKworICBpZih3cml0ZWxlZnQgPT0gMCkKKyAgICBsb2dtc2coIldyb3RlIHJlcXVlc3QgKCV6dSBieXRlcykgaW5wdXQgdG8gIiBSRVFVRVNUX0RVTVAsIHRvdGFsc2l6ZSk7CisgIGVsc2UgaWYod3JpdGVsZWZ0ID4gMCkgeworICAgIGxvZ21zZygiRXJyb3Igd3JpdGluZyBmaWxlICVzIGVycm9yOiAlZCAlcyIsCisgICAgICAgICAgIFJFUVVFU1RfRFVNUCwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgbG9nbXNnKCJXcm90ZSBvbmx5ICglenUgYnl0ZXMpIG9mICglenUgYnl0ZXMpIHJlcXVlc3QgaW5wdXQgdG8gJXMiLAorICAgICAgICAgICB0b3RhbHNpemUtd3JpdGVsZWZ0LCB0b3RhbHNpemUsIFJFUVVFU1RfRFVNUCk7CisgIH0KKworc3RvcmVyZXF1ZXN0X2NsZWFudXA6CisKKyAgZG8geworICAgIHJlcyA9IGZjbG9zZShkdW1wKTsKKyAgfSB3aGlsZShyZXMgJiYgKChlcnJvciA9IEVSUk5PKSA9PSBFSU5UUikpOworICBpZihyZXMpCisgICAgbG9nbXNnKCJFcnJvciBjbG9zaW5nIGZpbGUgJXMgZXJyb3I6ICVkICVzIiwKKyAgICAgICAgICAgUkVRVUVTVF9EVU1QLCBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKK30KKworLyogcmV0dXJuIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZSAqLworc3RhdGljIGludCBnZXRfcmVxdWVzdChjdXJsX3NvY2tldF90IHNvY2ssIHN0cnVjdCBodHRwcmVxdWVzdCAqcmVxKQoreworICBpbnQgZXJyb3I7CisgIGludCBmYWlsID0gMDsKKyAgaW50IGRvbmVfcHJvY2Vzc2luZyA9IDA7CisgIGNoYXIgKnJlcWJ1ZiA9IHJlcS0+cmVxYnVmOworICBzc2l6ZV90IGdvdCA9IDA7CisKKyAgY2hhciAqcGlwZXJlcSA9IE5VTEw7CisgIHNpemVfdCBwaXBlcmVxX2xlbmd0aCA9IDA7CisKKyAgaWYocmVxLT5waXBlbGluaW5nKSB7CisgICAgcGlwZXJlcSA9IHJlcWJ1ZiArIHJlcS0+Y2hlY2tpbmRleDsKKyAgICBwaXBlcmVxX2xlbmd0aCA9IHJlcS0+b2Zmc2V0IC0gcmVxLT5jaGVja2luZGV4OworICB9CisKKyAgLyoqKiBJbml0IHRoZSBodHRwcmVxdWVzdCBzdHJ1Y3R1cmUgcHJvcGVybHkgZm9yIHRoZSB1cGNvbWluZyByZXF1ZXN0ICoqKi8KKworICByZXEtPmNoZWNraW5kZXggPSAwOworICByZXEtPm9mZnNldCA9IDA7CisgIHJlcS0+dGVzdG5vID0gRE9DTlVNQkVSX05PVEhJTkc7CisgIHJlcS0+cGFydG5vID0gMDsKKyAgcmVxLT5vcGVuID0gVFJVRTsKKyAgcmVxLT5hdXRoX3JlcSA9IEZBTFNFOworICByZXEtPmF1dGggPSBGQUxTRTsKKyAgcmVxLT5jbCA9IDA7CisgIHJlcS0+ZGlnZXN0ID0gRkFMU0U7CisgIHJlcS0+bnRsbSA9IEZBTFNFOworICByZXEtPnBpcGUgPSAwOworICByZXEtPnNraXAgPSAwOworICByZXEtPnJjbWQgPSBSQ01EX05PUk1BTFJFUTsKKyAgcmVxLT5wcm90b2NvbCA9IFJQUk9UX05PTkU7CisgIHJlcS0+cHJvdF92ZXJzaW9uID0gMDsKKyAgcmVxLT5waXBlbGluaW5nID0gRkFMU0U7CisgIHJlcS0+cnRwX2J1ZmZlciA9IE5VTEw7CisgIHJlcS0+cnRwX2J1ZmZlcnNpemUgPSAwOworCisgIC8qKiogZW5kIG9mIGh0dHByZXF1ZXN0IGluaXQgKioqLworCisgIHdoaWxlKCFkb25lX3Byb2Nlc3NpbmcgJiYgKHJlcS0+b2Zmc2V0IDwgUkVRQlVGU0laLTEpKSB7CisgICAgaWYocGlwZXJlcV9sZW5ndGggJiYgcGlwZXJlcSkgeworICAgICAgbWVtbW92ZShyZXFidWYsIHBpcGVyZXEsIHBpcGVyZXFfbGVuZ3RoKTsKKyAgICAgIGdvdCA9IGN1cmx4X3V6dG9zeihwaXBlcmVxX2xlbmd0aCk7CisgICAgICBwaXBlcmVxX2xlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYocmVxLT5za2lwKQorICAgICAgICAvKiB3ZSBhcmUgaW5zdHJ1Y3RlZCB0byBub3QgcmVhZCB0aGUgZW50aXJlIHRoaW5nLCBzbyB3ZSBtYWtlIHN1cmUgdG8gb25seQorICAgICAgICAgICByZWFkIHdoYXQgd2UncmUgc3VwcG9zZWQgdG8gYW5kIE5PVCByZWFkIHRoZSBlbmlyZSB0aGluZyB0aGUgY2xpZW50CisgICAgICAgICAgIHdhbnRzIHRvIHNlbmQhICovCisgICAgICAgIGdvdCA9IHNyZWFkKHNvY2ssIHJlcWJ1ZiArIHJlcS0+b2Zmc2V0LCByZXEtPmNsKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZ290ID0gc3JlYWQoc29jaywgcmVxYnVmICsgcmVxLT5vZmZzZXQsIFJFUUJVRlNJWi0xIC0gcmVxLT5vZmZzZXQpOworICAgIH0KKyAgICBpZihnb3RfZXhpdF9zaWduYWwpCisgICAgICByZXR1cm4gMTsKKyAgICBpZihnb3QgPT0gMCkgeworICAgICAgbG9nbXNnKCJDb25uZWN0aW9uIGNsb3NlZCBieSBjbGllbnQiKTsKKyAgICAgIGZhaWwgPSAxOworICAgIH0KKyAgICBlbHNlIGlmKGdvdCA8IDApIHsKKyAgICAgIGVycm9yID0gU09DS0VSUk5POworICAgICAgbG9nbXNnKCJyZWN2KCkgcmV0dXJuZWQgZXJyb3I6ICglZCkgJXMiLCBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgIGZhaWwgPSAxOworICAgIH0KKyAgICBpZihmYWlsKSB7CisgICAgICAvKiBkdW1wIHRoZSByZXF1ZXN0IHJlY2VpdmVkIHNvIGZhciB0byB0aGUgZXh0ZXJuYWwgZmlsZSAqLworICAgICAgcmVxYnVmW3JlcS0+b2Zmc2V0XSA9ICdcMCc7CisgICAgICBzdG9yZXJlcXVlc3QocmVxYnVmLCByZXEtPm9mZnNldCk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBsb2dtc2coIlJlYWQgJXpkIGJ5dGVzIiwgZ290KTsKKworICAgIHJlcS0+b2Zmc2V0ICs9IChzaXplX3QpZ290OworICAgIHJlcWJ1ZltyZXEtPm9mZnNldF0gPSAnXDAnOworCisgICAgZG9uZV9wcm9jZXNzaW5nID0gUHJvY2Vzc1JlcXVlc3QocmVxKTsKKyAgICBpZihnb3RfZXhpdF9zaWduYWwpCisgICAgICByZXR1cm4gMTsKKyAgICBpZihkb25lX3Byb2Nlc3NpbmcgJiYgcmVxLT5waXBlKSB7CisgICAgICBsb2dtc2coIldhaXRpbmcgZm9yIGFub3RoZXIgcGlwZWQgcmVxdWVzdCIpOworICAgICAgZG9uZV9wcm9jZXNzaW5nID0gMDsKKyAgICAgIHJlcS0+cGlwZS0tOworICAgIH0KKyAgfQorCisgIGlmKChyZXEtPm9mZnNldCA9PSBSRVFCVUZTSVotMSkgJiYgKGdvdCA+IDApKSB7CisgICAgbG9nbXNnKCJSZXF1ZXN0IHdvdWxkIG92ZXJmbG93IGJ1ZmZlciwgY2xvc2luZyBjb25uZWN0aW9uIik7CisgICAgLyogZHVtcCByZXF1ZXN0IHJlY2VpdmVkIHNvIGZhciB0byBleHRlcm5hbCBmaWxlIGFueXdheSAqLworICAgIHJlcWJ1ZltSRVFCVUZTSVotMV0gPSAnXDAnOworICAgIGZhaWwgPSAxOworICB9CisgIGVsc2UgaWYocmVxLT5vZmZzZXQgPiBSRVFCVUZTSVotMSkgeworICAgIGxvZ21zZygiUmVxdWVzdCBidWZmZXIgb3ZlcmZsb3csIGNsb3NpbmcgY29ubmVjdGlvbiIpOworICAgIC8qIGR1bXAgcmVxdWVzdCByZWNlaXZlZCBzbyBmYXIgdG8gZXh0ZXJuYWwgZmlsZSBhbnl3YXkgKi8KKyAgICByZXFidWZbUkVRQlVGU0laLTFdID0gJ1wwJzsKKyAgICBmYWlsID0gMTsKKyAgfQorICBlbHNlCisgICAgcmVxYnVmW3JlcS0+b2Zmc2V0XSA9ICdcMCc7CisKKyAgLyogZHVtcCB0aGUgcmVxdWVzdCB0byBhbiBleHRlcm5hbCBmaWxlICovCisgIHN0b3JlcmVxdWVzdChyZXFidWYsIHJlcS0+cGlwZWxpbmluZyA/IHJlcS0+Y2hlY2tpbmRleCA6IHJlcS0+b2Zmc2V0KTsKKyAgaWYoZ290X2V4aXRfc2lnbmFsKQorICAgIHJldHVybiAxOworCisgIHJldHVybiBmYWlsOyAvKiByZXR1cm4gMCBvbiBzdWNjZXNzICovCit9CisKKy8qIHJldHVybnMgLTEgb24gZmFpbHVyZSAqLworc3RhdGljIGludCBzZW5kX2RvYyhjdXJsX3NvY2tldF90IHNvY2ssIHN0cnVjdCBodHRwcmVxdWVzdCAqcmVxKQoreworICBzc2l6ZV90IHdyaXR0ZW47CisgIHNpemVfdCBjb3VudDsKKyAgY29uc3QgY2hhciAqYnVmZmVyOworICBjaGFyICpwdHI9TlVMTDsKKyAgRklMRSAqc3RyZWFtOworICBjaGFyICpjbWQ9TlVMTDsKKyAgc2l6ZV90IGNtZHNpemU9MDsKKyAgRklMRSAqZHVtcDsKKyAgYm9vbCBwZXJzaXN0YW50ID0gVFJVRTsKKyAgYm9vbCBzZW5kZmFpbHVyZSA9IEZBTFNFOworICBzaXplX3QgcmVzcG9uc2VzaXplOworICBpbnQgZXJyb3IgPSAwOworICBpbnQgcmVzOworCisgIHN0YXRpYyBjaGFyIHdlYXJlWzI1Nl07CisKKyAgY2hhciBwYXJ0YnVmWzgwXT0iZGF0YSI7CisKKyAgbG9nbXNnKCJTZW5kIHJlc3BvbnNlIG51bWJlciAlbGQgcGFydCAlbGQiLCByZXEtPnRlc3RubywgcmVxLT5wYXJ0bm8pOworCisgIHN3aXRjaChyZXEtPnJjbWQpIHsKKyAgZGVmYXVsdDoKKyAgY2FzZSBSQ01EX05PUk1BTFJFUToKKyAgICBicmVhazsgLyogY29udGludWUgd2l0aCBidXNpbmVzcyBhcyB1c3VhbCAqLworICBjYXNlIFJDTURfU1RSRUFNOgorI2RlZmluZSBTVFJFQU1USElTICJhIHN0cmluZyB0byBzdHJlYW0gMDEyMzQ1Njc4OTBcbiIKKyAgICBjb3VudCA9IHN0cmxlbihTVFJFQU1USElTKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICB3cml0dGVuID0gc3dyaXRlKHNvY2ssIFNUUkVBTVRISVMsIGNvdW50KTsKKyAgICAgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgaWYod3JpdHRlbiAhPSAoc3NpemVfdCljb3VudCkgeworICAgICAgICBsb2dtc2coIlN0b3BwZWQgc3RyZWFtaW5nIik7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7CisgIGNhc2UgUkNNRF9JRExFOgorICAgIC8qIERvIG5vdGhpbmcuIFNpdCBpZGxlLiBQcmV0ZW5kIGl0IHJhaW5zLiAqLworICAgIHJldHVybiAwOworICB9CisKKyAgcmVxLT5vcGVuID0gRkFMU0U7CisKKyAgaWYocmVxLT50ZXN0bm8gPCAwKSB7CisgICAgc2l6ZV90IG1zZ2xlbjsKKyAgICBjaGFyIG1zZ2J1Zls2NF07CisKKyAgICBzd2l0Y2gocmVxLT50ZXN0bm8pIHsKKyAgICBjYXNlIERPQ05VTUJFUl9RVUlUOgorICAgICAgbG9nbXNnKCJSZXBseWluZyB0byBRVUlUIik7CisgICAgICBidWZmZXIgPSBkb2NxdWl0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBET0NOVU1CRVJfV0VSVUxFWjoKKyAgICAgIC8qIHdlIGdvdCBhICJmcmllbmRzPyIgcXVlc3Rpb24sIHJlcGx5IGJhY2sgdGhhdCB3ZSBzdXJlIGFyZSAqLworICAgICAgbG9nbXNnKCJJZGVudGlmeWluZyBvdXJzZWx2ZXMgYXMgZnJpZW5kcyIpOworICAgICAgc3ByaW50Zihtc2didWYsICJSVFNQX1NFUlZFUiBXRSBST09MWjogJWxkXHJcbiIsIChsb25nKWdldHBpZCgpKTsKKyAgICAgIG1zZ2xlbiA9IHN0cmxlbihtc2didWYpOworICAgICAgc3ByaW50Zih3ZWFyZSwgIkhUVFAvMS4xIDIwMCBPS1xyXG5Db250ZW50LUxlbmd0aDogJXp1XHJcblxyXG4lcyIsCisgICAgICAgICAgICAgIG1zZ2xlbiwgbXNnYnVmKTsKKyAgICAgIGJ1ZmZlciA9IHdlYXJlOworICAgICAgYnJlYWs7CisgICAgY2FzZSBET0NOVU1CRVJfSU5URVJOQUw6CisgICAgICBsb2dtc2coIkJhaWxpbmcgb3V0IGR1ZSB0byBpbnRlcm5hbCBlcnJvciIpOworICAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgRE9DTlVNQkVSX0NPTk5FQ1Q6CisgICAgICBsb2dtc2coIlJlcGx5aW5nIHRvIENPTk5FQ1QiKTsKKyAgICAgIGJ1ZmZlciA9IGRvY2Nvbm5lY3Q7CisgICAgICBicmVhazsKKyAgICBjYXNlIERPQ05VTUJFUl9CQURDT05ORUNUOgorICAgICAgbG9nbXNnKCJSZXBseWluZyB0byBhIGJhZCBDT05ORUNUIik7CisgICAgICBidWZmZXIgPSBkb2NiYWRjb25uZWN0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBET0NOVU1CRVJfNDA0OgorICAgIGRlZmF1bHQ6CisgICAgICBsb2dtc2coIlJlcGx5aW5nIHRvIHdpdGggYSA0MDQiKTsKKyAgICAgIGlmKHJlcS0+cHJvdG9jb2wgPT0gUlBST1RfSFRUUCkgeworICAgICAgICAgIGJ1ZmZlciA9IGRvYzQwNF9IVFRQOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBidWZmZXIgPSBkb2M0MDRfUlRTUDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNvdW50ID0gc3RybGVuKGJ1ZmZlcik7CisgIH0KKyAgZWxzZSB7CisgICAgY2hhciAqZmlsZW5hbWUgPSB0ZXN0MmZpbGUocmVxLT50ZXN0bm8pOworCisgICAgaWYoMCAhPSByZXEtPnBhcnRubykKKyAgICAgIHNwcmludGYocGFydGJ1ZiwgImRhdGElbGQiLCByZXEtPnBhcnRubyk7CisKKyAgICBzdHJlYW09Zm9wZW4oZmlsZW5hbWUsICJyYiIpOworICAgIGlmKCFzdHJlYW0pIHsKKyAgICAgIGVycm9yID0gRVJSTk87CisgICAgICBsb2dtc2coImZvcGVuKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkICVzIiwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgICBsb2dtc2coIkVycm9yIG9wZW5pbmcgZmlsZTogJXMiLCBmaWxlbmFtZSk7CisgICAgICBsb2dtc2coIkNvdWxkbid0IG9wZW4gdGVzdCBmaWxlIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBlcnJvciA9IGdldHBhcnQoJnB0ciwgJmNvdW50LCAicmVwbHkiLCBwYXJ0YnVmLCBzdHJlYW0pOworICAgICAgZmNsb3NlKHN0cmVhbSk7CisgICAgICBpZihlcnJvcikgeworICAgICAgICBsb2dtc2coImdldHBhcnQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQiLCBlcnJvcik7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgYnVmZmVyID0gcHRyOworICAgIH0KKworICAgIGlmKGdvdF9leGl0X3NpZ25hbCkgeworICAgICAgaWYocHRyKQorICAgICAgICBmcmVlKHB0cik7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogcmUtb3BlbiB0aGUgc2FtZSBmaWxlIGFnYWluICovCisgICAgc3RyZWFtPWZvcGVuKGZpbGVuYW1lLCAicmIiKTsKKyAgICBpZighc3RyZWFtKSB7CisgICAgICBlcnJvciA9IEVSUk5POworICAgICAgbG9nbXNnKCJmb3BlbigpIGZhaWxlZCB3aXRoIGVycm9yOiAlZCAlcyIsIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgICAgbG9nbXNnKCJFcnJvciBvcGVuaW5nIGZpbGU6ICVzIiwgZmlsZW5hbWUpOworICAgICAgbG9nbXNnKCJDb3VsZG4ndCBvcGVuIHRlc3QgZmlsZSIpOworICAgICAgaWYocHRyKQorICAgICAgICBmcmVlKHB0cik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBnZXQgdGhlIGN1c3RvbSBzZXJ2ZXIgY29udHJvbCAiY29tbWFuZHMiICovCisgICAgICBlcnJvciA9IGdldHBhcnQoJmNtZCwgJmNtZHNpemUsICJyZXBseSIsICJwb3N0Y21kIiwgc3RyZWFtKTsKKyAgICAgIGZjbG9zZShzdHJlYW0pOworICAgICAgaWYoZXJyb3IpIHsKKyAgICAgICAgbG9nbXNnKCJnZXRwYXJ0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkIiwgZXJyb3IpOworICAgICAgICBpZihwdHIpCisgICAgICAgICAgZnJlZShwdHIpOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZihnb3RfZXhpdF9zaWduYWwpIHsKKyAgICBpZihwdHIpCisgICAgICBmcmVlKHB0cik7CisgICAgaWYoY21kKQorICAgICAgZnJlZShjbWQpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIC8qIElmIHRoZSB3b3JkICdzd3NjbG9zZScgaXMgcHJlc2VudCBhbnl3aGVyZSBpbiB0aGUgcmVwbHkgY2h1bmssIHRoZQorICAgICBjb25uZWN0aW9uIHdpbGwgYmUgY2xvc2VkIGFmdGVyIHRoZSBkYXRhIGhhcyBiZWVuIHNlbnQgdG8gdGhlIHJlcXVlc3RpbmcKKyAgICAgY2xpZW50Li4uICovCisgIGlmKHN0cnN0cihidWZmZXIsICJzd3NjbG9zZSIpIHx8ICFjb3VudCkgeworICAgIHBlcnNpc3RhbnQgPSBGQUxTRTsKKyAgICBsb2dtc2coImNvbm5lY3Rpb24gY2xvc2UgaW5zdHJ1Y3Rpb24gXCJzd3NjbG9zZVwiIGZvdW5kIGluIHJlc3BvbnNlIik7CisgIH0KKyAgaWYoc3Ryc3RyKGJ1ZmZlciwgInN3c2JvdW5jZSIpKSB7CisgICAgcHJldmJvdW5jZSA9IFRSVUU7CisgICAgbG9nbXNnKCJlbmFibGUgXCJzd3Nib3VuY2VcIiBpbiB0aGUgbmV4dCByZXF1ZXN0Iik7CisgIH0KKyAgZWxzZQorICAgIHByZXZib3VuY2UgPSBGQUxTRTsKKworICBkdW1wID0gZm9wZW4oUkVTUE9OU0VfRFVNUCwgImFiIik7CisgIGlmKCFkdW1wKSB7CisgICAgZXJyb3IgPSBFUlJOTzsKKyAgICBsb2dtc2coImZvcGVuKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkICVzIiwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgbG9nbXNnKCJFcnJvciBvcGVuaW5nIGZpbGU6ICVzIiwgUkVTUE9OU0VfRFVNUCk7CisgICAgbG9nbXNnKCJjb3VsZG4ndCBjcmVhdGUgbG9nZmlsZTogIiBSRVNQT05TRV9EVU1QKTsKKyAgICBpZihwdHIpCisgICAgICBmcmVlKHB0cik7CisgICAgaWYoY21kKQorICAgICAgZnJlZShjbWQpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHJlc3BvbnNlc2l6ZSA9IGNvdW50OworICBkbyB7CisgICAgLyogT2ssIHdlIHNlbmQgbm8gbW9yZSB0aGFuIDIwMCBieXRlcyBhdCBhIHRpbWUsIGp1c3QgdG8gbWFrZSBzdXJlIHRoYXQKKyAgICAgICBsYXJnZXIgY2h1bmtzIGFyZSBzcGxpdCB1cCBzbyB0aGF0IHRoZSBjbGllbnQgd2lsbCBuZWVkIHRvIGRvIG11bHRpcGxlCisgICAgICAgcmVjdigpIGNhbGxzIHRvIGdldCBpdCBhbmQgdGh1cyB3ZSBleGVyY2lzZSB0aGF0IGNvZGUgYmV0dGVyICovCisgICAgc2l6ZV90IG51bSA9IGNvdW50OworICAgIGlmKG51bSA+IDIwMCkKKyAgICAgIG51bSA9IDIwMDsKKyAgICB3cml0dGVuID0gc3dyaXRlKHNvY2ssIGJ1ZmZlciwgbnVtKTsKKyAgICBpZiAod3JpdHRlbiA8IDApIHsKKyAgICAgIHNlbmRmYWlsdXJlID0gVFJVRTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGxvZ21zZygiU2VudCBvZmYgJXpkIGJ5dGVzIiwgd3JpdHRlbik7CisgICAgfQorICAgIC8qIHdyaXRlIHRvIGZpbGUgYXMgd2VsbCAqLworICAgIGZ3cml0ZShidWZmZXIsIDEsIChzaXplX3Qpd3JpdHRlbiwgZHVtcCk7CisgICAgaWYoZ290X2V4aXRfc2lnbmFsKQorICAgICAgYnJlYWs7CisKKyAgICBjb3VudCAtPSB3cml0dGVuOworICAgIGJ1ZmZlciArPSB3cml0dGVuOworICB9IHdoaWxlKGNvdW50PjApOworCisgIC8qIFNlbmQgb3V0IGFueSBSVFAgZGF0YSAqLworICBpZihyZXEtPnJ0cF9idWZmZXIpIHsKKyAgICBsb2dtc2coIkFib3V0IHRvIHdyaXRlICV6dSBSVFAgYnl0ZXMiLCByZXEtPnJ0cF9idWZmZXJzaXplKTsKKyAgICBjb3VudCA9IHJlcS0+cnRwX2J1ZmZlcnNpemU7CisgICAgZG8geworICAgICAgc2l6ZV90IG51bSA9IGNvdW50OworICAgICAgaWYobnVtID4gMjAwKQorICAgICAgICBudW0gPSAyMDA7CisgICAgICB3cml0dGVuID0gc3dyaXRlKHNvY2ssIHJlcS0+cnRwX2J1ZmZlciArIChyZXEtPnJ0cF9idWZmZXJzaXplIC0gY291bnQpLCBudW0pOworICAgICAgaWYod3JpdHRlbiA8IDApIHsKKyAgICAgICAgc2VuZGZhaWx1cmUgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNvdW50IC09IHdyaXR0ZW47CisgICAgfSB3aGlsZShjb3VudCA+IDApOworCisgICAgZnJlZShyZXEtPnJ0cF9idWZmZXIpOworICAgIHJlcS0+cnRwX2J1ZmZlcnNpemUgPSAwOworICB9CisKKyAgZG8geworICAgIHJlcyA9IGZjbG9zZShkdW1wKTsKKyAgfSB3aGlsZShyZXMgJiYgKChlcnJvciA9IEVSUk5PKSA9PSBFSU5UUikpOworICBpZihyZXMpCisgICAgbG9nbXNnKCJFcnJvciBjbG9zaW5nIGZpbGUgJXMgZXJyb3I6ICVkICVzIiwKKyAgICAgICAgICAgUkVTUE9OU0VfRFVNUCwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisKKyAgaWYoZ290X2V4aXRfc2lnbmFsKSB7CisgICAgaWYocHRyKQorICAgICAgZnJlZShwdHIpOworICAgIGlmKGNtZCkKKyAgICAgIGZyZWUoY21kKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZihzZW5kZmFpbHVyZSkgeworICAgIGxvZ21zZygiU2VuZGluZyByZXNwb25zZSBmYWlsZWQuIE9ubHkgKCV6dSBieXRlcykgb2YgKCV6dSBieXRlcykgd2VyZSBzZW50IiwKKyAgICAgICAgICAgcmVzcG9uc2VzaXplLWNvdW50LCByZXNwb25zZXNpemUpOworICAgIGlmKHB0cikKKyAgICAgIGZyZWUocHRyKTsKKyAgICBpZihjbWQpCisgICAgICBmcmVlKGNtZCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgbG9nbXNnKCJSZXNwb25zZSBzZW50ICglenUgYnl0ZXMpIGFuZCB3cml0dGVuIHRvICIgUkVTUE9OU0VfRFVNUCwKKyAgICAgICAgIHJlc3BvbnNlc2l6ZSk7CisKKyAgaWYocHRyKQorICAgIGZyZWUocHRyKTsKKworICBpZihjbWRzaXplID4gMCApIHsKKyAgICBjaGFyIGNvbW1hbmRbMzJdOworICAgIGludCBxdWFydGVyczsKKyAgICBpbnQgbnVtOworICAgIHB0cj1jbWQ7CisgICAgZG8geworICAgICAgaWYoMiA9PSBzc2NhbmYocHRyLCAiJTMxcyAlZCIsIGNvbW1hbmQsICZudW0pKSB7CisgICAgICAgIGlmKCFzdHJjbXAoIndhaXQiLCBjb21tYW5kKSkgeworICAgICAgICAgIGxvZ21zZygiVG9sZCB0byBzbGVlcCBmb3IgJWQgc2Vjb25kcyIsIG51bSk7CisgICAgICAgICAgcXVhcnRlcnMgPSBudW0gKiA0OworICAgICAgICAgIHdoaWxlKHF1YXJ0ZXJzID4gMCkgeworICAgICAgICAgICAgcXVhcnRlcnMtLTsKKyAgICAgICAgICAgIHJlcyA9IHdhaXRfbXMoMjUwKTsKKyAgICAgICAgICAgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZihyZXMpIHsKKyAgICAgICAgICAgICAgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKyAgICAgICAgICAgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgICAgICAgICAgIGxvZ21zZygid2FpdF9tcygpIGZhaWxlZCB3aXRoIGVycm9yOiAoJWQpICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgaWYoIXF1YXJ0ZXJzKQorICAgICAgICAgICAgbG9nbXNnKCJDb250aW51aW5nIGFmdGVyIHNsZWVwaW5nICVkIHNlY29uZHMiLCBudW0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBsb2dtc2coIlVua25vd24gY29tbWFuZCBpbiByZXBseSBjb21tYW5kIHNlY3Rpb24iKTsKKyAgICAgIH0KKyAgICAgIHB0ciA9IHN0cmNocihwdHIsICdcbicpOworICAgICAgaWYocHRyKQorICAgICAgICBwdHIrKzsKKyAgICAgIGVsc2UKKyAgICAgICAgcHRyID0gTlVMTDsKKyAgICB9IHdoaWxlKHB0ciAmJiAqcHRyKTsKKyAgfQorICBpZihjbWQpCisgICAgZnJlZShjbWQpOworCisgIHJlcS0+b3BlbiA9IHBlcnNpc3RhbnQ7CisKKyAgcHJldnRlc3RubyA9IHJlcS0+dGVzdG5vOworICBwcmV2cGFydG5vID0gcmVxLT5wYXJ0bm87CisKKyAgcmV0dXJuIDA7Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgc3J2cl9zb2NrYWRkcl91bmlvbl90IG1lOworICBjdXJsX3NvY2tldF90IHNvY2sgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIGN1cmxfc29ja2V0X3QgbXNnc29jayA9IENVUkxfU09DS0VUX0JBRDsKKyAgaW50IHdyb3RlcGlkZmlsZSA9IDA7CisgIGludCBmbGFnOworICB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gREVGQVVMVF9QT1JUOworICBjaGFyICpwaWRuYW1lPSAoY2hhciAqKSIucnRzcC5waWQiOworICBzdHJ1Y3QgaHR0cHJlcXVlc3QgcmVxOworICBpbnQgcmM7CisgIGludCBlcnJvcjsKKyAgaW50IGFyZz0xOworICBsb25nIHBpZDsKKworICB3aGlsZShhcmdjPmFyZykgeworICAgIGlmKCFzdHJjbXAoIi0tdmVyc2lvbiIsIGFyZ3ZbYXJnXSkpIHsKKyAgICAgIHByaW50ZigicnRzcGQgSVB2NCVzIgorICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAsCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgICAgICAgICAiL0lQdjYiCisjZWxzZQorICAgICAgICAgICAgICIiCisjZW5kaWYKKyAgICAgICAgICAgICApOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1waWRmaWxlIiwgYXJndlthcmddKSkgeworICAgICAgYXJnKys7CisgICAgICBpZihhcmdjPmFyZykKKyAgICAgICAgcGlkbmFtZSA9IGFyZ3ZbYXJnKytdOworICAgIH0KKyAgICBlbHNlIGlmKCFzdHJjbXAoIi0tbG9nZmlsZSIsIGFyZ3ZbYXJnXSkpIHsKKyAgICAgIGFyZysrOworICAgICAgaWYoYXJnYz5hcmcpCisgICAgICAgIHNlcnZlcmxvZ2ZpbGUgPSBhcmd2W2FyZysrXTsKKyAgICB9CisgICAgZWxzZSBpZighc3RyY21wKCItLWlwdjQiLCBhcmd2W2FyZ10pKSB7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgIGlwdl9pbnVzZSA9ICJJUHY0IjsKKyAgICAgIHVzZV9pcHY2ID0gRkFMU0U7CisjZW5kaWYKKyAgICAgIGFyZysrOworICAgIH0KKyAgICBlbHNlIGlmKCFzdHJjbXAoIi0taXB2NiIsIGFyZ3ZbYXJnXSkpIHsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgICAgaXB2X2ludXNlID0gIklQdjYiOworICAgICAgdXNlX2lwdjYgPSBUUlVFOworI2VuZGlmCisgICAgICBhcmcrKzsKKyAgICB9CisgICAgZWxzZSBpZighc3RyY21wKCItLXBvcnQiLCBhcmd2W2FyZ10pKSB7CisgICAgICBhcmcrKzsKKyAgICAgIGlmKGFyZ2M+YXJnKSB7CisgICAgICAgIGNoYXIgKmVuZHB0cjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyB1bG51bSA9IHN0cnRvdWwoYXJndlthcmddLCAmZW5kcHRyLCAxMCk7CisgICAgICAgIGlmKChlbmRwdHIgIT0gYXJndlthcmddICsgc3RybGVuKGFyZ3ZbYXJnXSkpIHx8CisgICAgICAgICAgICh1bG51bSA8IDEwMjVVTCkgfHwgKHVsbnVtID4gNjU1MzVVTCkpIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJ0c3BkOiBpbnZhbGlkIC0tcG9ydCBhcmd1bWVudCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgYXJndlthcmddKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBwb3J0ID0gY3VybHhfdWx0b3VzKHVsbnVtKTsKKyAgICAgICAgYXJnKys7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1zcmNkaXIiLCBhcmd2W2FyZ10pKSB7CisgICAgICBhcmcrKzsKKyAgICAgIGlmKGFyZ2M+YXJnKSB7CisgICAgICAgIHBhdGggPSBhcmd2W2FyZ107CisgICAgICAgIGFyZysrOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHB1dHMoIlVzYWdlOiBydHNwZCBbb3B0aW9uXVxuIgorICAgICAgICAgICAiIC0tdmVyc2lvblxuIgorICAgICAgICAgICAiIC0tbG9nZmlsZSBbZmlsZV1cbiIKKyAgICAgICAgICAgIiAtLXBpZGZpbGUgW2ZpbGVdXG4iCisgICAgICAgICAgICIgLS1pcHY0XG4iCisgICAgICAgICAgICIgLS1pcHY2XG4iCisgICAgICAgICAgICIgLS1wb3J0IFtwb3J0XVxuIgorICAgICAgICAgICAiIC0tc3JjZGlyIFtwYXRoXSIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisKKyNpZmRlZiBXSU4zMgorICB3aW4zMl9pbml0KCk7CisgIGF0ZXhpdCh3aW4zMl9jbGVhbnVwKTsKKyNlbmRpZgorCisgIGluc3RhbGxfc2lnbmFsX2hhbmRsZXJzKCk7CisKKyAgcGlkID0gKGxvbmcpZ2V0cGlkKCk7CisKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBpZighdXNlX2lwdjYpCisjZW5kaWYKKyAgICBzb2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBlbHNlCisgICAgc29jayA9IHNvY2tldChBRl9JTkVUNiwgU09DS19TVFJFQU0sIDApOworI2VuZGlmCisKKyAgaWYoQ1VSTF9TT0NLRVRfQkFEID09IHNvY2spIHsKKyAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICBsb2dtc2coIkVycm9yIGNyZWF0aW5nIHNvY2tldDogKCVkKSAlcyIsCisgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgIGdvdG8gc2VydmVyX2NsZWFudXA7CisgIH0KKworICBmbGFnID0gMTsKKyAgaWYgKDAgIT0gc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsCisgICAgICAgICAgICAodm9pZCAqKSZmbGFnLCBzaXplb2YoZmxhZykpKSB7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgbG9nbXNnKCJzZXRzb2Nrb3B0KFNPX1JFVVNFQUREUikgZmFpbGVkIHdpdGggZXJyb3I6ICglZCkgJXMiLAorICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICBnb3RvIHNlcnZlcl9jbGVhbnVwOworICB9CisKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBpZighdXNlX2lwdjYpIHsKKyNlbmRpZgorICAgIG1lbXNldCgmbWUuc2E0LCAwLCBzaXplb2YobWUuc2E0KSk7CisgICAgbWUuc2E0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIG1lLnNhNC5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworICAgIG1lLnNhNC5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworICAgIHJjID0gYmluZChzb2NrLCAmbWUuc2EsIHNpemVvZihtZS5zYTQpKTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICB9CisgIGVsc2UgeworICAgIG1lbXNldCgmbWUuc2E2LCAwLCBzaXplb2YobWUuc2E2KSk7CisgICAgbWUuc2E2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgbWUuc2E2LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworICAgIG1lLnNhNi5zaW42X3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICByYyA9IGJpbmQoc29jaywgJm1lLnNhLCBzaXplb2YobWUuc2E2KSk7CisgIH0KKyNlbmRpZiAvKiBFTkFCTEVfSVBWNiAqLworICBpZigwICE9IHJjKSB7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgbG9nbXNnKCJFcnJvciBiaW5kaW5nIHNvY2tldCBvbiBwb3J0ICVodTogKCVkKSAlcyIsCisgICAgICAgICAgIHBvcnQsIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgIGdvdG8gc2VydmVyX2NsZWFudXA7CisgIH0KKworICBsb2dtc2coIlJ1bm5pbmcgJXMgdmVyc2lvbiBvbiBwb3J0ICVkIiwgaXB2X2ludXNlLCAoaW50KXBvcnQpOworCisgIC8qIHN0YXJ0IGFjY2VwdGluZyBjb25uZWN0aW9ucyAqLworICByYyA9IGxpc3Rlbihzb2NrLCA1KTsKKyAgaWYoMCAhPSByYykgeworICAgIGVycm9yID0gU09DS0VSUk5POworICAgIGxvZ21zZygibGlzdGVuKCkgZmFpbGVkIHdpdGggZXJyb3I6ICglZCkgJXMiLAorICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICBnb3RvIHNlcnZlcl9jbGVhbnVwOworICB9CisKKyAgLyoKKyAgKiogQXMgc29vbiBhcyB0aGlzIHNlcnZlciB3cml0ZXMgaXRzIHBpZCBmaWxlIHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbAorICAqKiBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2ZXIgYW5kIGluaXRpYXRlIGl0cyB2ZXJpZmljYXRpb24uCisgICovCisKKyAgd3JvdGVwaWRmaWxlID0gd3JpdGVfcGlkZmlsZShwaWRuYW1lKTsKKyAgaWYoIXdyb3RlcGlkZmlsZSkKKyAgICBnb3RvIHNlcnZlcl9jbGVhbnVwOworCisgIGZvciAoOzspIHsKKyAgICBtc2dzb2NrID0gYWNjZXB0KHNvY2ssIE5VTEwsIE5VTEwpOworCisgICAgaWYoZ290X2V4aXRfc2lnbmFsKQorICAgICAgYnJlYWs7CisgICAgaWYgKENVUkxfU09DS0VUX0JBRCA9PSBtc2dzb2NrKSB7CisgICAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICAgIGxvZ21zZygiTUFKT1IgRVJST1I6IGFjY2VwdCgpIGZhaWxlZCB3aXRoIGVycm9yOiAoJWQpICVzIiwKKyAgICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qCisgICAgKiogQXMgc29vbiBhcyB0aGlzIHNlcnZlciBhY2VwdHMgYSBjb25uZWN0aW9uIGZyb20gdGhlIHRlc3QgaGFybmVzcyBpdAorICAgICoqIG11c3Qgc2V0IHRoZSBzZXJ2ZXIgbG9ncyBhZHZpc29yIHJlYWQgbG9jayB0byBpbmRpY2F0ZSB0aGF0IHNlcnZlcgorICAgICoqIGxvZ3Mgc2hvdWxkIG5vdCBiZSByZWFkIHVudGlsIHRoaXMgbG9jayBpcyByZW1vdmVkIGJ5IHRoaXMgc2VydmVyLgorICAgICovCisKKyAgICBzZXRfYWR2aXNvcl9yZWFkX2xvY2soU0VSVkVSTE9HU19MT0NLKTsKKyAgICBzZXJ2ZXJsb2dzbG9ja2VkID0gMTsKKworICAgIGxvZ21zZygiPT09PT4gQ2xpZW50IGNvbm5lY3QiKTsKKworI2lmZGVmIFRDUF9OT0RFTEFZCisgICAgLyoKKyAgICAgKiBEaXNhYmxlIHRoZSBOYWdsZSBhbGdvcml0aG0gdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2VuZCBvdXQgYSBsYXJnZQorICAgICAqIHJlc3BvbnNlIGluIG1hbnkgc21hbGwgc2VnbWVudHMgdG8gdG9ydHVyZSB0aGUgY2xpZW50cyBtb3JlLgorICAgICAqLworICAgIGZsYWcgPSAxOworICAgIGlmIChzZXRzb2Nrb3B0KG1zZ3NvY2ssIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAodm9pZCAqKSZmbGFnLCBzaXplb2YoZmxhZykpID09IC0xKSB7CisgICAgICBsb2dtc2coIj09PT0+IFRDUF9OT0RFTEFZIGZhaWxlZCIpOworICAgIH0KKyNlbmRpZgorCisgICAgLyogaW5pdGlhbGl6YXRpb24gb2YgaHR0cHJlcXVlc3Qgc3RydWN0IGlzIGRvbmUgaW4gZ2V0X3JlcXVlc3QoKSwgYnV0IGR1ZQorICAgICAgIHRvIHBpcGVsaW5pbmcgdHJlYXRtZW50IHRoZSBwaXBlbGluaW5nIHN0cnVjdCBmaWVsZCBtdXN0IGJlIGluaXRpYWxpemVkCisgICAgICAgcHJldmlvdXNseSB0byBGQUxTRSBldmVyeSB0aW1lIGEgbmV3IGNvbm5lY3Rpb24gYXJyaXZlcy4gKi8KKworICAgIHJlcS5waXBlbGluaW5nID0gRkFMU0U7CisKKyAgICBkbyB7CisgICAgICBpZihnb3RfZXhpdF9zaWduYWwpCisgICAgICAgIGJyZWFrOworCisgICAgICBpZihnZXRfcmVxdWVzdChtc2dzb2NrLCAmcmVxKSkKKyAgICAgICAgLyogbm9uLXplcm8gbWVhbnMgZXJyb3IsIGJyZWFrIG91dCBvZiBsb29wICovCisgICAgICAgIGJyZWFrOworCisgICAgICBpZihwcmV2Ym91bmNlKSB7CisgICAgICAgIC8qIGJvdW5jZSB0cmVhdG1lbnQgcmVxdWVzdGVkICovCisgICAgICAgIGlmKChyZXEudGVzdG5vID09IHByZXZ0ZXN0bm8pICYmCisgICAgICAgICAgIChyZXEucGFydG5vID09IHByZXZwYXJ0bm8pKSB7CisgICAgICAgICAgcmVxLnBhcnRubysrOworICAgICAgICAgIGxvZ21zZygiQk9VTkNFIHBhcnQgbnVtYmVyIHRvICVsZCIsIHJlcS5wYXJ0bm8pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHByZXZib3VuY2UgPSBGQUxTRTsKKyAgICAgICAgICBwcmV2dGVzdG5vID0gLTE7CisgICAgICAgICAgcHJldnBhcnRubyA9IC0xOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHNlbmRfZG9jKG1zZ3NvY2ssICZyZXEpOworICAgICAgaWYoZ290X2V4aXRfc2lnbmFsKQorICAgICAgICBicmVhazsKKworICAgICAgaWYoKHJlcS50ZXN0bm8gPCAwKSAmJiAocmVxLnRlc3RubyAhPSBET0NOVU1CRVJfQ09OTkVDVCkpIHsKKyAgICAgICAgbG9nbXNnKCJzcGVjaWFsIHJlcXVlc3QgcmVjZWl2ZWQsIG5vIHBlcnNpc3RlbmN5Iik7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYoIXJlcS5vcGVuKSB7CisgICAgICAgIGxvZ21zZygiaW5zdHJ1Y3RlZCB0byBjbG9zZSBjb25uZWN0aW9uIGFmdGVyIHNlcnZlci1yZXBseSIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYocmVxLm9wZW4pCisgICAgICAgIGxvZ21zZygiPT4gcGVyc2lzdGFudCBjb25uZWN0aW9uIHJlcXVlc3QgZW5kZWQsIGF3YWl0cyBuZXcgcmVxdWVzdCIpOworICAgICAgLyogaWYgd2UgZ290IGEgQ09OTkVDVCwgbG9vcCBhbmQgZ2V0IGFub3RoZXIgcmVxdWVzdCBhcyB3ZWxsISAqLworICAgIH0gd2hpbGUocmVxLm9wZW4gfHwgKHJlcS50ZXN0bm8gPT0gRE9DTlVNQkVSX0NPTk5FQ1QpKTsKKworICAgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICAgIGJyZWFrOworCisgICAgbG9nbXNnKCI9PT09PiBDbGllbnQgZGlzY29ubmVjdCIpOworICAgIHNjbG9zZShtc2dzb2NrKTsKKyAgICBtc2dzb2NrID0gQ1VSTF9TT0NLRVRfQkFEOworCisgICAgaWYoc2VydmVybG9nc2xvY2tlZCkgeworICAgICAgc2VydmVybG9nc2xvY2tlZCA9IDA7CisgICAgICBjbGVhcl9hZHZpc29yX3JlYWRfbG9jayhTRVJWRVJMT0dTX0xPQ0spOworICAgIH0KKworICAgIGlmIChyZXEudGVzdG5vID09IERPQ05VTUJFUl9RVUlUKQorICAgICAgYnJlYWs7CisgIH0KKworc2VydmVyX2NsZWFudXA6CisKKyAgaWYoKG1zZ3NvY2sgIT0gc29jaykgJiYgKG1zZ3NvY2sgIT0gQ1VSTF9TT0NLRVRfQkFEKSkKKyAgICBzY2xvc2UobXNnc29jayk7CisKKyAgaWYoc29jayAhPSBDVVJMX1NPQ0tFVF9CQUQpCisgICAgc2Nsb3NlKHNvY2spOworCisgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICBsb2dtc2coInNpZ25hbGxlZCB0byBkaWUiKTsKKworICBpZih3cm90ZXBpZGZpbGUpCisgICAgdW5saW5rKHBpZG5hbWUpOworCisgIGlmKHNlcnZlcmxvZ3Nsb2NrZWQpIHsKKyAgICBzZXJ2ZXJsb2dzbG9ja2VkID0gMDsKKyAgICBjbGVhcl9hZHZpc29yX3JlYWRfbG9jayhTRVJWRVJMT0dTX0xPQ0spOworICB9CisKKyAgcmVzdG9yZV9zaWduYWxfaGFuZGxlcnMoKTsKKworICBpZihnb3RfZXhpdF9zaWduYWwpIHsKKyAgICBsb2dtc2coIj09PT09PT09PiAlcyBydHNwZCAocG9ydDogJWQgcGlkOiAlbGQpIGV4aXRzIHdpdGggc2lnbmFsICglZCkiLAorICAgICAgICAgICBpcHZfaW51c2UsIChpbnQpcG9ydCwgcGlkLCBleGl0X3NpZ25hbCk7CisgICAgLyoKKyAgICAgKiBUbyBwcm9wZXJseSBzZXQgdGhlIHJldHVybiBzdGF0dXMgb2YgdGhlIHByb2Nlc3Mgd2UKKyAgICAgKiBtdXN0IHJhaXNlIHRoZSBzYW1lIHNpZ25hbCBTSUdJTlQgb3IgU0lHVEVSTSB0aGF0IHdlCisgICAgICogY2F1Z2h0IGFuZCBsZXQgdGhlIG9sZCBoYW5kbGVyIHRha2UgY2FyZSBvZiBpdC4KKyAgICAgKi8KKyAgICByYWlzZShleGl0X3NpZ25hbCk7CisgIH0KKworICBsb2dtc2coIj09PT09PT09PiBydHNwZCBxdWl0cyIpOworICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL3NlcnZlcl9zb2NrYWRkci5oIGIvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL3NlcnZlcl9zb2NrYWRkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYzA1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvc2VydmVyX3NvY2thZGRyLmgKQEAgLTAsMCArMSwzMyBAQAorI2lmbmRlZiBIRUFERVJfU0VSVkVSX1NPQ0tBRERSX0gKKyNkZWZpbmUgSEVBREVSX1NFUlZFUl9TT0NLQUREUl9ICisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiB7CisgIHN0cnVjdCBzb2NrYWRkciAgICAgIHNhOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gICBzYTQ7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgc3RydWN0IHNvY2thZGRyX2luNiAgc2E2OworI2VuZGlmCit9IHNydnJfc29ja2FkZHJfdW5pb25fdDsKKworI2VuZGlmIC8qIEhFQURFUl9TRVJWRVJfU09DS0FERFJfSCAqLwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL3NvY2tmaWx0LmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvc29ja2ZpbHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjNiOTAxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL3NvY2tmaWx0LmMKQEAgLTAsMCArMSwxMDYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUHVycG9zZQorICoKKyAqIDEuIEFjY2VwdCBhIFRDUCBjb25uZWN0aW9uIG9uIGEgY3VzdG9tIHBvcnQgKGlwdjQgb3IgaXB2NiksIG9yIGNvbm5lY3QKKyAqICAgIHRvIGEgZ2l2ZW4gKGxvY2FsaG9zdCkgcG9ydC4KKyAqCisgKiAyLiBHZXQgY29tbWFuZHMgb24gU1RESU4uIFBhc3MgZGF0YSBvbiB0byB0aGUgVENQIHN0cmVhbS4KKyAqICAgIEdldCBkYXRhIGZyb20gVENQIHN0cmVhbSBhbmQgcGFzcyBvbiB0byBTVERPVVQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIG1hZGUgdG8gcGVyZm9ybSBhbGwgdGhlIHNvY2tldC9zdHJlYW0vY29ubmVjdGlvbiBzdHVmZiBmb3IKKyAqIHRoZSB0ZXN0IHN1aXRlJ3MgKHBlcmwpIEZUUCBzZXJ2ZXIuIFByZXZpb3VzbHkgdGhlIHBlcmwgY29kZSBkaWQgYWxsIG9mCisgKiB0aGlzIGJ5IGl0cyBvd24sIGJ1dCBJIGRlY2lkZWQgdG8gbGV0IHRoaXMgcHJvZ3JhbSBkbyB0aGUgc29ja2V0IGxheWVyCisgKiBiZWNhdXNlIG9mIHNldmVyYWwgdGhpbmdzOgorICoKKyAqIG8gV2Ugd2FudCB0aGUgcGVybCBjb2RlIHRvIHdvcmsgd2l0aCByYXRoZXIgb2xkIHBlcmwgaW5zdGFsbGF0aW9ucywgdGh1cworICogICB3ZSBjYW5ub3QgdXNlIHJlY2VudCBwZXJsIG1vZHVsZXMgb3IgZmVhdHVyZXMuCisgKgorICogbyBXZSB3YW50IElQdjYgc3VwcG9ydCBmb3Igc3lzdGVtcyB0aGF0IHByb3ZpZGUgaXQsIGFuZCBkb2luZyBvcHRpb25hbCBJUHY2CisgKiAgIHN1cHBvcnQgaW4gcGVybCBzZWVtcyBpZiBub3QgaW1wb3NzaWJsZSBzbyBhdCBsZWFzdCBhd2t3YXJkLgorICoKKyAqIG8gV2Ugd2FudCBGVFAtU1NMIHN1cHBvcnQsIHdoaWNoIG1lYW5zIHRoYXQgYSBjb25uZWN0aW9uIHRoYXQgc3RhcnRzIHdpdGgKKyAqICAgcGxhaW4gc29ja2V0cyBuZWVkcyB0byBiZSBhYmxlIHRvICJnbyBTU0wiIGluIHRoZSBtaWRzdC4gVGhpcyB3b3VsZCBhbHNvCisgKiAgIHJlcXVpcmUgc29tZSBuYXN0eSBwZXJsIHN0dWZmIEknZCByYXRoZXIgYXZvaWQuCisgKgorICogKFNvdXJjZSBvcmlnaW5hbGx5IGJhc2VkIG9uIHN3cy5jKQorICovCisKKy8qCisgKiBTaWduYWwgaGFuZGxpbmcgbm90ZXMgZm9yIHNvY2tmaWx0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGEgc2luZ2xlLXRocmVhZGVkIHByb2Nlc3MuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGludGVuZGVkIHRvIGJlIGhpZ2hseSBwb3J0YWJsZSBhbmQgYXMgc3VjaCBpdCBtdXN0IGJlIGtlcHQgYXMKKyAqIHNpbXBsZSBhcyBwb3NzaWJsZSwgZHVlIHRvIHRoaXMgdGhlIG9ubHkgc2lnbmFsIGhhbmRsaW5nIG1lY2hhbmlzbXMgdXNlZCB3aWxsCisgKiBiZSB0aG9zZSBvZiBBTlNJIEMsIGFuZCB1c2VkIG9ubHkgaW4gdGhlIG1vc3QgYmFzaWMgZm9ybSB3aGljaCBpcyBnb29kIGVub3VnaAorICogZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgcHJvZ3JhbS4KKyAqCisgKiBGb3IgdGhlIGFib3ZlIHJlYXNvbiBhbmQgdGhlIHNwZWNpZmljIG5lZWRzIG9mIHRoaXMgcHJvZ3JhbSBzaWduYWxzIFNJR0hVUCwKKyAqIFNJR1BJUEUgYW5kIFNJR0FMUk0gd2lsbCBiZSBzaW1wbHkgaWdub3JlZCBvbiBzeXN0ZW1zIHdoZXJlIHRoaXMgY2FuIGJlIGRvbmUuCisgKiBJZiBwb3NzaWJsZSwgc2lnbmFscyBTSUdJTlQgYW5kIFNJR1RFUk0gd2lsbCBiZSBoYW5kbGVkIGJ5IHRoaXMgcHJvZ3JhbSBhcyBhbgorICogaW5kaWNhdGlvbiB0byBjbGVhbnVwIGFuZCBmaW5pc2ggZXhlY3V0aW9uIGFzIHNvb24gYXMgcG9zc2libGUuICBUaGlzIHdpbGwgYmUKKyAqIGFjaGlldmVkIHdpdGggYSBzaW5nbGUgc2lnbmFsIGhhbmRsZXIgJ2V4aXRfc2lnbmFsX2hhbmRsZXInIGZvciBib3RoIHNpZ25hbHMuCisgKgorICogVGhlICdleGl0X3NpZ25hbF9oYW5kbGVyJyB1cG9uIHRoZSBmaXJzdCBTSUdJTlQgb3IgU0lHVEVSTSByZWNlaXZlZCBzaWduYWwKKyAqIHdpbGwganVzdCBzZXQgdG8gb25lIHRoZSBnbG9iYWwgdmFyICdnb3RfZXhpdF9zaWduYWwnIHN0b3JpbmcgaW4gZ2xvYmFsIHZhcgorICogJ2V4aXRfc2lnbmFsJyB0aGUgc2lnbmFsIHRoYXQgdHJpZ2dlcmVkIHRoaXMgY2hhbmdlLgorICoKKyAqIE5vdGhpbmcgZmFuY3kgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgcHJvYmxlbXMgaXMgdXNlZCwgdGhlIHByb2dyYW0gYXQgY2VydGFpbgorICogcG9pbnRzIGluIGl0cyBub3JtYWwgZmxvdyBjaGVja3MgaWYgdmFyICdnb3RfZXhpdF9zaWduYWwnIGlzIHNldCBhbmQgaW4gY2FzZQorICogdGhpcyBpcyB0cnVlIGl0IGp1c3QgbWFrZXMgaXRzIHdheSBvdXQgb2YgbG9vcHMgYW5kIGZ1bmN0aW9ucyBpbiBzdHJ1Y3R1cmVkCisgKiBhbmQgd2VsbCBiZWhhdmVkIG1hbm5lciB0byBhY2hpZXZlIHByb3BlciBwcm9ncmFtIGNsZWFudXAgYW5kIHRlcm1pbmF0aW9uLgorICoKKyAqIEV2ZW4gd2l0aCB0aGUgYWJvdmUgbWVjaGFuaXNtIGltcGxlbWVudGVkIGl0IGlzIHdvcnRod2lsZSB0byBub3RlIHRoYXQgb3RoZXIKKyAqIHNpZ25hbHMgbWlnaHQgc3RpbGwgYmUgcmVjZWl2ZWQsIG9yIHRoYXQgdGhlcmUgbWlnaHQgYmUgc3lzdGVtcyBvbiB3aGljaCBpdAorICogaXMgbm90IHBvc3NpYmxlIHRvIHRyYXAgYW5kIGlnbm9yZSBzb21lIG9mIHRoZSBhYm92ZSBzaWduYWxzLiAgVGhpcyBpbXBsaWVzCisgKiB0aGF0IGZvciBpbmNyZWFzZWQgcG9ydGFiaWxpdHkgYW5kIHJlbGlhYmlsaXR5IHRoZSBwcm9ncmFtIG11c3QgYmUgY29kZWQgYXMKKyAqIGlmIG5vIHNpZ25hbCB3YXMgYmVpbmcgaWdub3JlZCBvciBoYW5kbGVkIGF0IGFsbC4gIEVuam95IGl0IQorICovCisKKyNkZWZpbmUgQ1VSTF9OT19PTERJRVMKKworI2luY2x1ZGUgInNldHVwLmgiIC8qIHBvcnRhYmlsaXR5IGhlbHAgZnJvbSB0aGUgbGliIGRpcmVjdG9yeSAqLworCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKworI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCisvKiBtYWtlIHRoZSBjdXJseCBoZWFkZXIgZGVmaW5lIGFsbCBwcmludGYoKSBmdW5jdGlvbnMgdG8gdXNlIHRoZSBjdXJseF8qCisgICB2ZXJzaW9ucyBpbnN0ZWFkICovCisjaW5jbHVkZSAiY3VybHguaCIgLyogZnJvbSB0aGUgcHJpdmF0ZSBsaWIgZGlyICovCisjaW5jbHVkZSAiZ2V0cGFydC5oIgorI2luY2x1ZGUgImluZXRfcHRvbi5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJzZXJ2ZXJfc29ja2FkZHIuaCIKKworLyogaW5jbHVkZSBtZW1kZWJ1Zy5oIGxhc3QgKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjZGVmaW5lIERFRkFVTFRfUE9SVCA4OTk5CisKKyNpZm5kZWYgREVGQVVMVF9MT0dGSUxFCisjZGVmaW5lIERFRkFVTFRfTE9HRklMRSAibG9nL3NvY2tmaWx0LmxvZyIKKyNlbmRpZgorCitjb25zdCBjaGFyICpzZXJ2ZXJsb2dmaWxlID0gREVGQVVMVF9MT0dGSUxFOworCitzdGF0aWMgYm9vbCB2ZXJib3NlID0gRkFMU0U7CitzdGF0aWMgYm9vbCBiaW5kX29ubHkgPSBGQUxTRTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorc3RhdGljIGJvb2wgdXNlX2lwdjYgPSBGQUxTRTsKKyNlbmRpZgorc3RhdGljIGNvbnN0IGNoYXIgKmlwdl9pbnVzZSA9ICJJUHY0IjsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gREVGQVVMVF9QT1JUOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGNvbm5lY3Rwb3J0ID0gMDsgLyogaWYgbm9uLXplcm8sIHdlIGFjdGl2YXRlIHRoaXMgbW9kZSAqLworCitlbnVtIHNvY2ttb2RlIHsKKyAgUEFTU0lWRV9MSVNURU4sICAgIC8qIGFzIGEgc2VydmVyIHdhaXRpbmcgZm9yIGNvbm5lY3Rpb25zICovCisgIFBBU1NJVkVfQ09OTkVDVCwgICAvKiBhcyBhIHNlcnZlciwgY29ubmVjdGVkIHRvIGEgY2xpZW50ICovCisgIEFDVElWRSwgICAgICAgICAgICAvKiBhcyBhIGNsaWVudCwgY29ubmVjdGVkIHRvIGEgc2VydmVyICovCisgIEFDVElWRV9ESVNDT05ORUNUICAvKiBhcyBhIGNsaWVudCwgZGlzY29ubmVjdGVkIGZyb20gc2VydmVyICovCit9OworCisvKiBkby1ub3RoaW5nIG1hY3JvIHJlcGxhY2VtZW50IGZvciBzeXN0ZW1zIHdoaWNoIGxhY2sgc2lnaW50ZXJydXB0KCkgKi8KKworI2lmbmRlZiBIQVZFX1NJR0lOVEVSUlVQVAorI2RlZmluZSBzaWdpbnRlcnJ1cHQoeCx5KSBkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKy8qIHZhcnMgdXNlZCB0byBrZWVwIGFyb3VuZCBwcmV2aW91cyBzaWduYWwgaGFuZGxlcnMgKi8KKwordHlwZWRlZiBSRVRTSUdUWVBFICgqU0lHSEFORExFUl9UKShpbnQpOworCisjaWZkZWYgU0lHSFVQCitzdGF0aWMgU0lHSEFORExFUl9UIG9sZF9zaWdodXBfaGFuZGxlciAgPSBTSUdfRVJSOworI2VuZGlmCisKKyNpZmRlZiBTSUdQSVBFCitzdGF0aWMgU0lHSEFORExFUl9UIG9sZF9zaWdwaXBlX2hhbmRsZXIgPSBTSUdfRVJSOworI2VuZGlmCisKKyNpZmRlZiBTSUdBTFJNCitzdGF0aWMgU0lHSEFORExFUl9UIG9sZF9zaWdhbHJtX2hhbmRsZXIgPSBTSUdfRVJSOworI2VuZGlmCisKKyNpZmRlZiBTSUdJTlQKK3N0YXRpYyBTSUdIQU5ETEVSX1Qgb2xkX3NpZ2ludF9oYW5kbGVyICA9IFNJR19FUlI7CisjZW5kaWYKKworI2lmZGVmIFNJR1RFUk0KK3N0YXRpYyBTSUdIQU5ETEVSX1Qgb2xkX3NpZ3Rlcm1faGFuZGxlciA9IFNJR19FUlI7CisjZW5kaWYKKworLyogdmFyIHdoaWNoIGlmIHNldCBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvZ3JhbSBzaG91bGQgZmluaXNoIGV4ZWN1dGlvbiAqLworCitTSUdfQVRPTUlDX1QgZ290X2V4aXRfc2lnbmFsID0gMDsKKworLyogaWYgbmV4dCBpcyBzZXQgaW5kaWNhdGVzIHRoZSBmaXJzdCBzaWduYWwgaGFuZGxlZCBpbiBleGl0X3NpZ25hbF9oYW5kbGVyICovCisKK3N0YXRpYyB2b2xhdGlsZSBpbnQgZXhpdF9zaWduYWwgPSAwOworCisvKiBzaWduYWwgaGFuZGxlciB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0KKyAgc2hvdWxkIGZpbmlzaCBpdHMgZXhlY3V0aW9uIGluIGEgY29udHJvbGxlZCBtYW5uZXIgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAgVGhlIGZpcnN0IHRpbWUgdGhpcyBpcyBjYWxsZWQgaXQgd2lsbCBzZXQgZ290X2V4aXRfc2lnbmFsIHRvIG9uZSBhbmQKKyAgc3RvcmUgaW4gZXhpdF9zaWduYWwgdGhlIHNpZ25hbCB0aGF0IHRyaWdnZXJlZCBpdHMgZXhlY3V0aW9uLiAqLworCitzdGF0aWMgUkVUU0lHVFlQRSBleGl0X3NpZ25hbF9oYW5kbGVyKGludCBzaWdudW0pCit7CisgIGludCBvbGRfZXJybm8gPSBFUlJOTzsKKyAgaWYoZ290X2V4aXRfc2lnbmFsID09IDApIHsKKyAgICBnb3RfZXhpdF9zaWduYWwgPSAxOworICAgIGV4aXRfc2lnbmFsID0gc2lnbnVtOworICB9CisgICh2b2lkKXNpZ25hbChzaWdudW0sIGV4aXRfc2lnbmFsX2hhbmRsZXIpOworICBTRVRfRVJSTk8ob2xkX2Vycm5vKTsKK30KKworc3RhdGljIHZvaWQgaW5zdGFsbF9zaWduYWxfaGFuZGxlcnModm9pZCkKK3sKKyNpZmRlZiBTSUdIVVAKKyAgLyogaWdub3JlIFNJR0hVUCBzaWduYWwgKi8KKyAgaWYoKG9sZF9zaWdodXBfaGFuZGxlciA9IHNpZ25hbChTSUdIVVAsIFNJR19JR04pKSA9PSBTSUdfRVJSKQorICAgIGxvZ21zZygiY2Fubm90IGluc3RhbGwgU0lHSFVQIGhhbmRsZXI6ICVzIiwgc3RyZXJyb3IoRVJSTk8pKTsKKyNlbmRpZgorI2lmZGVmIFNJR1BJUEUKKyAgLyogaWdub3JlIFNJR1BJUEUgc2lnbmFsICovCisgIGlmKChvbGRfc2lncGlwZV9oYW5kbGVyID0gc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pKSA9PSBTSUdfRVJSKQorICAgIGxvZ21zZygiY2Fubm90IGluc3RhbGwgU0lHUElQRSBoYW5kbGVyOiAlcyIsIHN0cmVycm9yKEVSUk5PKSk7CisjZW5kaWYKKyNpZmRlZiBTSUdBTFJNCisgIC8qIGlnbm9yZSBTSUdBTFJNIHNpZ25hbCAqLworICBpZigob2xkX3NpZ2Fscm1faGFuZGxlciA9IHNpZ25hbChTSUdBTFJNLCBTSUdfSUdOKSkgPT0gU0lHX0VSUikKKyAgICBsb2dtc2coImNhbm5vdCBpbnN0YWxsIFNJR0FMUk0gaGFuZGxlcjogJXMiLCBzdHJlcnJvcihFUlJOTykpOworI2VuZGlmCisjaWZkZWYgU0lHSU5UCisgIC8qIGhhbmRsZSBTSUdJTlQgc2lnbmFsIHdpdGggb3VyIGV4aXRfc2lnbmFsX2hhbmRsZXIgKi8KKyAgaWYoKG9sZF9zaWdpbnRfaGFuZGxlciA9IHNpZ25hbChTSUdJTlQsIGV4aXRfc2lnbmFsX2hhbmRsZXIpKSA9PSBTSUdfRVJSKQorICAgIGxvZ21zZygiY2Fubm90IGluc3RhbGwgU0lHSU5UIGhhbmRsZXI6ICVzIiwgc3RyZXJyb3IoRVJSTk8pKTsKKyAgZWxzZQorICAgIHNpZ2ludGVycnVwdChTSUdJTlQsIDEpOworI2VuZGlmCisjaWZkZWYgU0lHVEVSTQorICAvKiBoYW5kbGUgU0lHVEVSTSBzaWduYWwgd2l0aCBvdXIgZXhpdF9zaWduYWxfaGFuZGxlciAqLworICBpZigob2xkX3NpZ3Rlcm1faGFuZGxlciA9IHNpZ25hbChTSUdURVJNLCBleGl0X3NpZ25hbF9oYW5kbGVyKSkgPT0gU0lHX0VSUikKKyAgICBsb2dtc2coImNhbm5vdCBpbnN0YWxsIFNJR1RFUk0gaGFuZGxlcjogJXMiLCBzdHJlcnJvcihFUlJOTykpOworICBlbHNlCisgICAgc2lnaW50ZXJydXB0KFNJR1RFUk0sIDEpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfc2lnbmFsX2hhbmRsZXJzKHZvaWQpCit7CisjaWZkZWYgU0lHSFVQCisgIGlmKFNJR19FUlIgIT0gb2xkX3NpZ2h1cF9oYW5kbGVyKQorICAgICh2b2lkKXNpZ25hbChTSUdIVVAsIG9sZF9zaWdodXBfaGFuZGxlcik7CisjZW5kaWYKKyNpZmRlZiBTSUdQSVBFCisgIGlmKFNJR19FUlIgIT0gb2xkX3NpZ3BpcGVfaGFuZGxlcikKKyAgICAodm9pZClzaWduYWwoU0lHUElQRSwgb2xkX3NpZ3BpcGVfaGFuZGxlcik7CisjZW5kaWYKKyNpZmRlZiBTSUdBTFJNCisgIGlmKFNJR19FUlIgIT0gb2xkX3NpZ2Fscm1faGFuZGxlcikKKyAgICAodm9pZClzaWduYWwoU0lHQUxSTSwgb2xkX3NpZ2Fscm1faGFuZGxlcik7CisjZW5kaWYKKyNpZmRlZiBTSUdJTlQKKyAgaWYoU0lHX0VSUiAhPSBvbGRfc2lnaW50X2hhbmRsZXIpCisgICAgKHZvaWQpc2lnbmFsKFNJR0lOVCwgb2xkX3NpZ2ludF9oYW5kbGVyKTsKKyNlbmRpZgorI2lmZGVmIFNJR1RFUk0KKyAgaWYoU0lHX0VSUiAhPSBvbGRfc2lndGVybV9oYW5kbGVyKQorICAgICh2b2lkKXNpZ25hbChTSUdURVJNLCBvbGRfc2lndGVybV9oYW5kbGVyKTsKKyNlbmRpZgorfQorCisvKgorICogZnVsbHJlYWQgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgcmVhZCgpIGZ1bmN0aW9uLiBUaGlzIHdpbGwgcmVwZWF0IHRoZSBjYWxsCisgKiB0byByZWFkKCkgdW50aWwgaXQgYWN0dWFsbHkgaGFzIHJlYWQgdGhlIGNvbXBsZXRlIG51bWJlciBvZiBieXRlcyBpbmRpY2F0ZWQKKyAqIGluIG5ieXRlcyBvciBpdCBmYWlscyB3aXRoIGEgY29uZGl0aW9uIHRoYXQgY2Fubm90IGJlIGhhbmRsZWQgd2l0aCBhIHNpbXBsZQorICogcmV0cnkgb2YgdGhlIHJlYWQgY2FsbC4KKyAqLworCitzdGF0aWMgc3NpemVfdCBmdWxscmVhZChpbnQgZmlsZWRlcywgdm9pZCAqYnVmZmVyLCBzaXplX3QgbmJ5dGVzKQoreworICBpbnQgZXJyb3I7CisgIHNzaXplX3QgcmM7CisgIHNzaXplX3QgbnJlYWQgPSAwOworCisgIGRvIHsKKyAgICByYyA9IHJlYWQoZmlsZWRlcywgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIgKyBucmVhZCwgbmJ5dGVzIC0gbnJlYWQpOworCisgICAgaWYoZ290X2V4aXRfc2lnbmFsKSB7CisgICAgICBsb2dtc2coInNpZ25hbGxlZCB0byBkaWUiKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZihyYyA8IDApIHsKKyAgICAgIGVycm9yID0gRVJSTk87CisgICAgICBpZigoZXJyb3IgPT0gRUlOVFIpIHx8IChlcnJvciA9PSBFQUdBSU4pKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIGxvZ21zZygidW5yZWNvdmVyYWJsZSByZWFkKCkgZmFpbHVyZTogJXMiLCBzdHJlcnJvcihlcnJvcikpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmKHJjID09IDApIHsKKyAgICAgIGxvZ21zZygiZ290IDAgcmVhZGluZyBmcm9tIHN0ZGluIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBucmVhZCArPSByYzsKKworICB9IHdoaWxlKChzaXplX3QpbnJlYWQgPCBuYnl0ZXMpOworCisgIGlmKHZlcmJvc2UpCisgICAgbG9nbXNnKCJyZWFkICV6ZCBieXRlcyIsIG5yZWFkKTsKKworICByZXR1cm4gbnJlYWQ7Cit9CisKKy8qCisgKiBmdWxsd3JpdGUgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgd3JpdGUoKSBmdW5jdGlvbi4gVGhpcyB3aWxsIHJlcGVhdCB0aGUKKyAqIGNhbGwgdG8gd3JpdGUoKSB1bnRpbCBpdCBhY3R1YWxseSBoYXMgd3JpdHRlbiB0aGUgY29tcGxldGUgbnVtYmVyIG9mIGJ5dGVzCisgKiBpbmRpY2F0ZWQgaW4gbmJ5dGVzIG9yIGl0IGZhaWxzIHdpdGggYSBjb25kaXRpb24gdGhhdCBjYW5ub3QgYmUgaGFuZGxlZAorICogd2l0aCBhIHNpbXBsZSByZXRyeSBvZiB0aGUgd3JpdGUgY2FsbC4KKyAqLworCitzdGF0aWMgc3NpemVfdCBmdWxsd3JpdGUoaW50IGZpbGVkZXMsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IG5ieXRlcykKK3sKKyAgaW50IGVycm9yOworICBzc2l6ZV90IHdjOworICBzc2l6ZV90IG53cml0ZSA9IDA7CisKKyAgZG8geworICAgIHdjID0gd3JpdGUoZmlsZWRlcywgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIgKyBud3JpdGUsIG5ieXRlcyAtIG53cml0ZSk7CisKKyAgICBpZihnb3RfZXhpdF9zaWduYWwpIHsKKyAgICAgIGxvZ21zZygic2lnbmFsbGVkIHRvIGRpZSIpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmKHdjIDwgMCkgeworICAgICAgZXJyb3IgPSBFUlJOTzsKKyAgICAgIGlmKChlcnJvciA9PSBFSU5UUikgfHwgKGVycm9yID09IEVBR0FJTikpCisgICAgICAgIGNvbnRpbnVlOworICAgICAgbG9nbXNnKCJ1bnJlY292ZXJhYmxlIHdyaXRlKCkgZmFpbHVyZTogJXMiLCBzdHJlcnJvcihlcnJvcikpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmKHdjID09IDApIHsKKyAgICAgIGxvZ21zZygicHV0IDAgd3JpdGluZyB0byBzdGRvdXQiKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIG53cml0ZSArPSB3YzsKKworICB9IHdoaWxlKChzaXplX3QpbndyaXRlIDwgbmJ5dGVzKTsKKworICBpZih2ZXJib3NlKQorICAgIGxvZ21zZygid3JvdGUgJXpkIGJ5dGVzIiwgbndyaXRlKTsKKworICByZXR1cm4gbndyaXRlOworfQorCisvKgorICogcmVhZF9zdGRpbiB0cmllcyB0byByZWFkIGZyb20gc3RkaW4gbmJ5dGVzIGludG8gdGhlIGdpdmVuIGJ1ZmZlci4gVGhpcyBpcyBhCisgKiBibG9ja2luZyBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSByZXR1cm4gVFJVRSB3aGVuIG5ieXRlcyBoYXZlIGFjdHVhbGx5IGJlZW4KKyAqIHJlYWQgb3IgRkFMU0Ugd2hlbiBhbiB1bnJlY292ZXJhYmxlIGVycm9yIGhhcyBiZWVuIGRldGVjdGVkLiBGYWlsdXJlIG9mIHRoaXMKKyAqIGZ1bmN0aW9uIGlzIGFuIGluZGljYXRpb24gdGhhdCB0aGUgc29ja2ZpbHQgcHJvY2VzcyBzaG91bGQgdGVybWluYXRlLgorICovCisKK3N0YXRpYyBib29sIHJlYWRfc3RkaW4odm9pZCAqYnVmZmVyLCBzaXplX3QgbmJ5dGVzKQoreworICBzc2l6ZV90IG5yZWFkID0gZnVsbHJlYWQoZmlsZW5vKHN0ZGluKSwgYnVmZmVyLCBuYnl0ZXMpOworICBpZihucmVhZCAhPSAoc3NpemVfdCluYnl0ZXMpIHsKKyAgICBsb2dtc2coImV4aXRpbmcuLi4iKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiB3cml0ZV9zdGRvdXQgdHJpZXMgdG8gd3JpdGUgdG8gc3RkaW8gbmJ5dGVzIGZyb20gdGhlIGdpdmVuIGJ1ZmZlci4gVGhpcyBpcyBhCisgKiBibG9ja2luZyBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSByZXR1cm4gVFJVRSB3aGVuIG5ieXRlcyBoYXZlIGFjdHVhbGx5IGJlZW4KKyAqIHdyaXR0ZW4gb3IgRkFMU0Ugd2hlbiBhbiB1bnJlY292ZXJhYmxlIGVycm9yIGhhcyBiZWVuIGRldGVjdGVkLiBGYWlsdXJlIG9mCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGFuIGluZGljYXRpb24gdGhhdCB0aGUgc29ja2ZpbHQgcHJvY2VzcyBzaG91bGQgdGVybWluYXRlLgorICovCisKK3N0YXRpYyBib29sIHdyaXRlX3N0ZG91dChjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBuYnl0ZXMpCit7CisgIHNzaXplX3QgbndyaXRlID0gZnVsbHdyaXRlKGZpbGVubyhzdGRvdXQpLCBidWZmZXIsIG5ieXRlcyk7CisgIGlmKG53cml0ZSAhPSAoc3NpemVfdCluYnl0ZXMpIHsKKyAgICBsb2dtc2coImV4aXRpbmcuLi4iKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ3Jhdyh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNzaXplX3QgbGVuKQoreworICBjaGFyIGRhdGFbMTIwXTsKKyAgc3NpemVfdCBpOworICB1bnNpZ25lZCBjaGFyICpwdHIgPSBidWZmZXI7CisgIGNoYXIgKm9wdHIgPSBkYXRhOworICBzc2l6ZV90IHdpZHRoPTA7CisKKyAgZm9yKGk9MDsgaTxsZW47IGkrKykgeworICAgIHN3aXRjaChwdHJbaV0pIHsKKyAgICBjYXNlICdcbic6CisgICAgICBzcHJpbnRmKG9wdHIsICJcXG4iKTsKKyAgICAgIHdpZHRoICs9IDI7CisgICAgICBvcHRyICs9IDI7CisgICAgICBicmVhazsKKyAgICBjYXNlICdccic6CisgICAgICBzcHJpbnRmKG9wdHIsICJcXHIiKTsKKyAgICAgIHdpZHRoICs9IDI7CisgICAgICBvcHRyICs9IDI7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgc3ByaW50ZihvcHRyLCAiJWMiLCAoSVNHUkFQSChwdHJbaV0pIHx8IHB0cltpXT09MHgyMCkgP3B0cltpXTonLicpOworICAgICAgd2lkdGgrKzsKKyAgICAgIG9wdHIrKzsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmKHdpZHRoPjYwKSB7CisgICAgICBsb2dtc2coIiclcyciLCBkYXRhKTsKKyAgICAgIHdpZHRoID0gMDsKKyAgICAgIG9wdHIgPSBkYXRhOworICAgIH0KKyAgfQorICBpZih3aWR0aCkKKyAgICBsb2dtc2coIiclcyciLCBkYXRhKTsKK30KKworLyoKKyAgc29ja2ZkcCBpcyBhIHBvaW50ZXIgdG8gYW4gZXN0YWJsaXNoZWQgc3RyZWFtIG9yIENVUkxfU09DS0VUX0JBRAorCisgIGlmIHNvY2tmZCBpcyBDVVJMX1NPQ0tFVF9CQUQsIGxpc3RlbmRmZCBpcyBhIGxpc3RlbmluZyBzb2NrZXQgd2UgbXVzdAorICBhY2NlcHQoKQorKi8KK3N0YXRpYyBib29sIGp1Z2dsZShjdXJsX3NvY2tldF90ICpzb2NrZmRwLAorICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgbGlzdGVuZmQsCisgICAgICAgICAgICAgICAgICAgZW51bSBzb2NrbW9kZSAqbW9kZSkKK3sKKyAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgZmRfc2V0IGZkc19yZWFkOworICBmZF9zZXQgZmRzX3dyaXRlOworICBmZF9zZXQgZmRzX2VycjsKKyAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIGN1cmxfc29ja2V0X3QgbWF4ZmQgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIHNzaXplX3QgcmM7CisgIHNzaXplX3QgbnJlYWRfc29ja2V0OworICBzc2l6ZV90IGJ5dGVzX3dyaXR0ZW47CisgIHNzaXplX3QgYnVmZmVyX2xlbjsKKyAgaW50IGVycm9yID0gMDsKKworIC8qICdidWZmZXInIGlzIHRoaXMgZXhjZXNzaXZlbHkgbGFyZ2Ugb25seSB0byBiZSBhYmxlIHRvIHN1cHBvcnQgdGhpbmdzIGxpa2UKKyAgICB0ZXN0IDEwMDMgd2hpY2ggdGVzdHMgZXhjZWVkaW5nbHkgbGFyZ2Ugc2VydmVyIHJlc3BvbnNlIGxpbmVzICovCisgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzE3MDEwXTsKKyAgY2hhciBkYXRhWzE2XTsKKworICBpZihnb3RfZXhpdF9zaWduYWwpIHsKKyAgICBsb2dtc2coInNpZ25hbGxlZCB0byBkaWUsIGV4aXRpbmcuLi4iKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworI2lmZGVmIEhBVkVfR0VUUFBJRAorICAvKiBBcyBhIGxhc3QgcmVzb3J0LCBxdWl0IGlmIHNvY2tmaWx0IHByb2Nlc3MgYmVjb21lcyBvcnBoYW4uIEp1c3QgaW4gY2FzZQorICAgICBwYXJlbnQgZnRwc2VydmVyIHByb2Nlc3MgaGFzIGRpZWQgd2l0aG91dCBraWxsaW5nIGl0cyBzb2NrZmlsdCBjaGlsZHJlbiAqLworICBpZihnZXRwcGlkKCkgPD0gMSkgeworICAgIGxvZ21zZygicHJvY2VzcyBiZWNvbWVzIG9ycGhhbiwgZXhpdGluZyIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorI2VuZGlmCisKKyAgdGltZW91dC50dl9zZWMgPSAxMjA7CisgIHRpbWVvdXQudHZfdXNlYyA9IDA7CisKKyAgRkRfWkVSTygmZmRzX3JlYWQpOworICBGRF9aRVJPKCZmZHNfd3JpdGUpOworICBGRF9aRVJPKCZmZHNfZXJyKTsKKworI2lmZGVmIFVTRV9XSU5TT0NLCisgIC8qCisgICoqIFdpblNvY2sgc2VsZWN0KCkgZG9lcyBub3Qgc3VwcG9ydCBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3JzLAorICAqKiBpdCBjYW4gb25seSBjaGVjayBTT0NLRVRzLiBTaW5jZSB0aGlzIHByb2dyYW0gaW4gaXRzIGN1cnJlbnQKKyAgKiogc3RhdGUgd2lsbCBub3Qgd29yayBvbiBXaW5Tb2NrIGJhc2VkIHN5c3RlbXMsIG5leHQgbGluZSBpcworICAqKiBjb21tZW50ZWQgb3V0IHRvIGFsbG93IHdhcm5pbmctZnJlZSBjb21waWxhdGlvbiBhd2FpdGluZyB0aGUKKyAgKiogZGF5IGl0IHdpbGwgYmUgZml4ZWQgdG8gYWxzbyBydW4gb24gV2luU29jayBzeXN0ZW1zLgorICAqLworI2Vsc2UKKyAgRkRfU0VUKGZpbGVubyhzdGRpbiksICZmZHNfcmVhZCk7CisjZW5kaWYKKworICBzd2l0Y2goKm1vZGUpIHsKKworICBjYXNlIFBBU1NJVkVfTElTVEVOOgorCisgICAgLyogc2VydmVyIG1vZGUgKi8KKyAgICBzb2NrZmQgPSBsaXN0ZW5mZDsKKyAgICAvKiB0aGVyZSdzIGFsd2F5cyBhIHNvY2tldCB0byB3YWl0IGZvciAqLworICAgIEZEX1NFVChzb2NrZmQsICZmZHNfcmVhZCk7CisgICAgbWF4ZmQgPSBzb2NrZmQ7CisgICAgYnJlYWs7CisKKyAgY2FzZSBQQVNTSVZFX0NPTk5FQ1Q6CisKKyAgICBzb2NrZmQgPSAqc29ja2ZkcDsKKyAgICBpZihDVVJMX1NPQ0tFVF9CQUQgPT0gc29ja2ZkKSB7CisgICAgICAvKiBlZWVrLCB3ZSBhcmUgc3VwcG9zZWRseSBjb25uZWN0ZWQgYW5kIHRoZW4gdGhpcyBjYW5ub3QgYmUgLTEgISAqLworICAgICAgbG9nbXNnKCJzb2NrZXQgaXMgLTEhIG9uICVzOiVkIiwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgIG1heGZkID0gMDsgLyogc3RkaW4gKi8KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiB0aGVyZSdzIGFsd2F5cyBhIHNvY2tldCB0byB3YWl0IGZvciAqLworICAgICAgRkRfU0VUKHNvY2tmZCwgJmZkc19yZWFkKTsKKyAgICAgIG1heGZkID0gc29ja2ZkOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIEFDVElWRToKKworICAgIHNvY2tmZCA9ICpzb2NrZmRwOworICAgIC8qIHNvY2tmZCB0dXJucyBDVVJMX1NPQ0tFVF9CQUQgd2hlbiBvdXIgY29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQgKi8KKyAgICBpZihDVVJMX1NPQ0tFVF9CQUQgIT0gc29ja2ZkKSB7CisgICAgICBGRF9TRVQoc29ja2ZkLCAmZmRzX3JlYWQpOworICAgICAgbWF4ZmQgPSBzb2NrZmQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgbG9nbXNnKCJObyBzb2NrZXQgdG8gcmVhZCBvbiIpOworICAgICAgbWF4ZmQgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIEFDVElWRV9ESVNDT05ORUNUOgorCisgICAgbG9nbXNnKCJkaXNjb25uZWN0ZWQsIG5vIHNvY2tldCB0byByZWFkIG9uIik7CisgICAgbWF4ZmQgPSAwOworICAgIHNvY2tmZCA9IENVUkxfU09DS0VUX0JBRDsKKyAgICBicmVhazsKKworICB9IC8qIHN3aXRjaCgqbW9kZSkgKi8KKworCisgIGRvIHsKKworICAgIHJjID0gc2VsZWN0KChpbnQpbWF4ZmQgKyAxLCAmZmRzX3JlYWQsICZmZHNfd3JpdGUsICZmZHNfZXJyLCAmdGltZW91dCk7CisKKyAgICBpZihnb3RfZXhpdF9zaWduYWwpIHsKKyAgICAgIGxvZ21zZygic2lnbmFsbGVkIHRvIGRpZSwgZXhpdGluZy4uLiIpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICB9IHdoaWxlKChyYyA9PSAtMSkgJiYgKChlcnJvciA9IFNPQ0tFUlJOTykgPT0gRUlOVFIpKTsKKworICBpZihyYyA8IDApIHsKKyAgICBsb2dtc2coInNlbGVjdCgpIGZhaWxlZCB3aXRoIGVycm9yOiAoJWQpICVzIiwKKyAgICAgICAgICAgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgaWYocmMgPT0gMCkKKyAgICAvKiB0aW1lb3V0ICovCisgICAgcmV0dXJuIFRSVUU7CisKKworICBpZihGRF9JU1NFVChmaWxlbm8oc3RkaW4pLCAmZmRzX3JlYWQpKSB7CisgICAgLyogcmVhZCBmcm9tIHN0ZGluLCBjb21tYW5kcy9kYXRhIHRvIGJlIGRlYWx0IHdpdGggYW5kIHBvc3NpYmx5IHBhc3NlZCBvbgorICAgICAgIHRvIHRoZSBzb2NrZXQKKworICAgICAgIHByb3RvY29sOgorCisgICAgICAgNCBsZXR0ZXIgY29tbWFuZCArIExGIFttYW5kYXRvcnldCisKKyAgICAgICA0LWRpZ2l0IGhleGFkZWNpbWFsIGRhdGEgbGVuZ3RoICsgTEYgW2lmIHRoZSBjb21tYW5kIHRha2VzIGRhdGFdCisgICAgICAgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgW3RoZSBkYXRhIGJlaW5nIGFzIGxvbmcgYXMgc2V0IGFib3ZlXQorCisgICAgICAgQ29tbWFuZHM6CisKKyAgICAgICBEQVRBIC0gcGxhaW4gcGFzcy10aHJ1IGRhdGEKKyAgICAqLworCisgICAgaWYoIXJlYWRfc3RkaW4oYnVmZmVyLCA1KSkKKyAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGxvZ21zZygiUmVjZWl2ZWQgJWMlYyVjJWMgKG9uIHN0ZGluKSIsCisgICAgICAgICAgIGJ1ZmZlclswXSwgYnVmZmVyWzFdLCBidWZmZXJbMl0sIGJ1ZmZlclszXSApOworCisgICAgaWYoIW1lbWNtcCgiUElORyIsIGJ1ZmZlciwgNCkpIHsKKyAgICAgIC8qIHNlbmQgcmVwbHkgb24gc3Rkb3V0LCBqdXN0IHByb3Zpbmcgd2UgYXJlIGFsaXZlICovCisgICAgICBpZighd3JpdGVfc3Rkb3V0KCJQT05HXG4iLCA1KSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGVsc2UgaWYoIW1lbWNtcCgiUE9SVCIsIGJ1ZmZlciwgNCkpIHsKKyAgICAgIC8qIFF1ZXN0aW9uIGFza2luZyB1cyB3aGF0IFBPUlQgbnVtYmVyIHdlIGFyZSBsaXN0ZW5pbmcgdG8uCisgICAgICAgICBSZXBsaWVzIHRvIFBPUlQgd2l0aCAiSVB2W251bV0vW3BvcnRdIiAqLworICAgICAgc3ByaW50ZigoY2hhciAqKWJ1ZmZlciwgIiVzLyVodVxuIiwgaXB2X2ludXNlLCBwb3J0KTsKKyAgICAgIGJ1ZmZlcl9sZW4gPSAoc3NpemVfdClzdHJsZW4oKGNoYXIgKilidWZmZXIpOworICAgICAgc25wcmludGYoZGF0YSwgc2l6ZW9mKGRhdGEpLCAiUE9SVFxuJTA0enhcbiIsIGJ1ZmZlcl9sZW4pOworICAgICAgaWYoIXdyaXRlX3N0ZG91dChkYXRhLCAxMCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIGlmKCF3cml0ZV9zdGRvdXQoYnVmZmVyLCBidWZmZXJfbGVuKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBlbHNlIGlmKCFtZW1jbXAoIlFVSVQiLCBidWZmZXIsIDQpKSB7CisgICAgICAvKiBqdXN0IGRpZSAqLworICAgICAgbG9nbXNnKCJxdWl0cyIpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBlbHNlIGlmKCFtZW1jbXAoIkRBVEEiLCBidWZmZXIsIDQpKSB7CisgICAgICAvKiBkYXRhIElOID0+IGRhdGEgT1VUICovCisKKyAgICAgIGlmKCFyZWFkX3N0ZGluKGJ1ZmZlciwgNSkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgYnVmZmVyWzVdID0gJ1wwJzsKKworICAgICAgYnVmZmVyX2xlbiA9IChzc2l6ZV90KXN0cnRvbCgoY2hhciAqKWJ1ZmZlciwgTlVMTCwgMTYpOworICAgICAgaWYgKGJ1ZmZlcl9sZW4gPiAoc3NpemVfdClzaXplb2YoYnVmZmVyKSkgeworICAgICAgICBsb2dtc2coIkVSUk9SOiBCdWZmZXIgc2l6ZSAoJXp1IGJ5dGVzKSB0b28gc21hbGwgZm9yIGRhdGEgc2l6ZSAiCisgICAgICAgICAgICAgICAiKCV6ZCBieXRlcykiLCBzaXplb2YoYnVmZmVyKSwgYnVmZmVyX2xlbik7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICAgIGxvZ21zZygiPiAlemQgYnl0ZXMgZGF0YSwgc2VydmVyID0+IGNsaWVudCIsIGJ1ZmZlcl9sZW4pOworCisgICAgICBpZighcmVhZF9zdGRpbihidWZmZXIsIGJ1ZmZlcl9sZW4pKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgIGxvZ3JhdyhidWZmZXIsIGJ1ZmZlcl9sZW4pOworCisgICAgICBpZigqbW9kZSA9PSBQQVNTSVZFX0xJU1RFTikgeworICAgICAgICBsb2dtc2coIioqKiBXZSBhcmUgZGlzY29ubmVjdGVkISIpOworICAgICAgICBpZighd3JpdGVfc3Rkb3V0KCJESVNDXG4iLCA1KSkKKyAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogc2VuZCBhd2F5IG9uIHRoZSBzb2NrZXQgKi8KKyAgICAgICAgYnl0ZXNfd3JpdHRlbiA9IHN3cml0ZShzb2NrZmQsIGJ1ZmZlciwgYnVmZmVyX2xlbik7CisgICAgICAgIGlmKGJ5dGVzX3dyaXR0ZW4gIT0gYnVmZmVyX2xlbikgeworICAgICAgICAgIGxvZ21zZygiTm90IGFsbCBkYXRhIHdhcyBzZW50LiBCeXRlcyB0byBzZW5kOiAlemQgc2VudDogJXpkIiwKKyAgICAgICAgICAgICAgICAgYnVmZmVyX2xlbiwgYnl0ZXNfd3JpdHRlbik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZighbWVtY21wKCJESVNDIiwgYnVmZmVyLCA0KSkgeworICAgICAgLyogZGlzY29ubmVjdCEgKi8KKyAgICAgIGlmKCF3cml0ZV9zdGRvdXQoIkRJU0NcbiIsIDUpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICBpZihzb2NrZmQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICAgIGxvZ21zZygiPT09PT4gQ2xpZW50IGZvcmNpYmx5IGRpc2Nvbm5lY3RlZCIpOworICAgICAgICBzY2xvc2Uoc29ja2ZkKTsKKyAgICAgICAgKnNvY2tmZHAgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgICAgIGlmKCptb2RlID09IFBBU1NJVkVfQ09OTkVDVCkKKyAgICAgICAgICAqbW9kZSA9IFBBU1NJVkVfTElTVEVOOworICAgICAgICBlbHNlCisgICAgICAgICAgKm1vZGUgPSBBQ1RJVkVfRElTQ09OTkVDVDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgbG9nbXNnKCJhdHRlbXB0IHRvIGNsb3NlIGFscmVhZHkgZGVhZCBjb25uZWN0aW9uIik7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgIH0KKworCisgIGlmKChzb2NrZmQgIT0gQ1VSTF9TT0NLRVRfQkFEKSAmJiAoRkRfSVNTRVQoc29ja2ZkLCAmZmRzX3JlYWQpKSApIHsKKworICAgIGlmKCptb2RlID09IFBBU1NJVkVfTElTVEVOKSB7CisgICAgICAvKiB0aGVyZSdzIG5vIHN0cmVhbSBzZXQgdXAgeWV0LCB0aGlzIGlzIGFuIGluZGljYXRpb24gdGhhdCB0aGVyZSdzIGEKKyAgICAgICAgIGNsaWVudCBjb25uZWN0aW5nLiAqLworICAgICAgc29ja2ZkID0gYWNjZXB0KHNvY2tmZCwgTlVMTCwgTlVMTCk7CisgICAgICBpZihDVVJMX1NPQ0tFVF9CQUQgPT0gc29ja2ZkKQorICAgICAgICBsb2dtc2coImFjY2VwdCgpIGZhaWxlZCIpOworICAgICAgZWxzZSB7CisgICAgICAgIGxvZ21zZygiPT09PT4gQ2xpZW50IGNvbm5lY3QiKTsKKyAgICAgICAgaWYoIXdyaXRlX3N0ZG91dCgiQ05DVFxuIiwgNSkpCisgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAqc29ja2ZkcCA9IHNvY2tmZDsgLyogc3RvcmUgdGhlIG5ldyBzb2NrZXQgKi8KKyAgICAgICAgKm1vZGUgPSBQQVNTSVZFX0NPTk5FQ1Q7IC8qIHdlIGhhdmUgY29ubmVjdGVkICovCisgICAgICB9CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICAvKiByZWFkIGZyb20gc29ja2V0LCBwYXNzIG9uIGRhdGEgdG8gc3Rkb3V0ICovCisgICAgbnJlYWRfc29ja2V0ID0gc3JlYWQoc29ja2ZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKworICAgIGlmKG5yZWFkX3NvY2tldCA8PSAwKSB7CisgICAgICBsb2dtc2coIj09PT0+IENsaWVudCBkaXNjb25uZWN0Iik7CisgICAgICBpZighd3JpdGVfc3Rkb3V0KCJESVNDXG4iLCA1KSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgc2Nsb3NlKHNvY2tmZCk7CisgICAgICAqc29ja2ZkcCA9IENVUkxfU09DS0VUX0JBRDsKKyAgICAgIGlmKCptb2RlID09IFBBU1NJVkVfQ09OTkVDVCkKKyAgICAgICAgKm1vZGUgPSBQQVNTSVZFX0xJU1RFTjsKKyAgICAgIGVsc2UKKyAgICAgICAgKm1vZGUgPSBBQ1RJVkVfRElTQ09OTkVDVDsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHNucHJpbnRmKGRhdGEsIHNpemVvZihkYXRhKSwgIkRBVEFcbiUwNHp4XG4iLCBucmVhZF9zb2NrZXQpOworICAgIGlmKCF3cml0ZV9zdGRvdXQoZGF0YSwgMTApKQorICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlmKCF3cml0ZV9zdGRvdXQoYnVmZmVyLCBucmVhZF9zb2NrZXQpKQorICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgbG9nbXNnKCI8ICV6ZCBieXRlcyBkYXRhLCBjbGllbnQgPT4gc2VydmVyIiwgbnJlYWRfc29ja2V0KTsKKyAgICBsb2dyYXcoYnVmZmVyLCBucmVhZF9zb2NrZXQpOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBjdXJsX3NvY2tldF90IHNvY2tkYWVtb24oY3VybF9zb2NrZXRfdCBzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqbGlzdGVucG9ydCkKK3sKKyAgLyogcGFzc2l2ZSBkYWVtb24gc3R5bGUgKi8KKyAgc3J2cl9zb2NrYWRkcl91bmlvbl90IGxpc3RlbmVyOworICBpbnQgZmxhZzsKKyAgaW50IHJjOworICBpbnQgdG90ZGVsYXkgPSAwOworICBpbnQgbWF4cmV0ciA9IDEwOworICBpbnQgZGVsYXk9IDIwOworICBpbnQgYXR0ZW1wdCA9IDA7CisgIGludCBlcnJvciA9IDA7CisKKyAgZG8geworICAgIGF0dGVtcHQrKzsKKyAgICBmbGFnID0gMTsKKyAgICByYyA9IHNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLAorICAgICAgICAgKHZvaWQgKikmZmxhZywgc2l6ZW9mKGZsYWcpKTsKKyAgICBpZihyYykgeworICAgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgICBsb2dtc2coInNldHNvY2tvcHQoU09fUkVVU0VBRERSKSBmYWlsZWQgd2l0aCBlcnJvcjogKCVkKSAlcyIsCisgICAgICAgICAgICAgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgICBpZihtYXhyZXRyKSB7CisgICAgICAgIHJjID0gd2FpdF9tcyhkZWxheSk7CisgICAgICAgIGlmKHJjKSB7CisgICAgICAgICAgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKyAgICAgICAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICAgICAgICBsb2dtc2coIndhaXRfbXMoKSBmYWlsZWQgd2l0aCBlcnJvcjogKCVkKSAlcyIsCisgICAgICAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgICAgICAgIHNjbG9zZShzb2NrKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTF9TT0NLRVRfQkFEOworICAgICAgICB9CisgICAgICAgIGlmKGdvdF9leGl0X3NpZ25hbCkgeworICAgICAgICAgIGxvZ21zZygic2lnbmFsbGVkIHRvIGRpZSwgZXhpdGluZy4uLiIpOworICAgICAgICAgIHNjbG9zZShzb2NrKTsKKyAgICAgICAgICByZXR1cm4gQ1VSTF9TT0NLRVRfQkFEOworICAgICAgICB9CisgICAgICAgIHRvdGRlbGF5ICs9IGRlbGF5OworICAgICAgICBkZWxheSAqPSAyOyAvKiBkb3VibGUgdGhlIHNsZWVwIGZvciBuZXh0IGF0dGVtcHQgKi8KKyAgICAgIH0KKyAgICB9CisgIH0gd2hpbGUocmMgJiYgbWF4cmV0ci0tKTsKKworICBpZihyYykgeworICAgIGxvZ21zZygic2V0c29ja29wdChTT19SRVVTRUFERFIpIGZhaWxlZCAlZCB0aW1lcyBpbiAlZCBtcy4gRXJyb3I6ICglZCkgJXMiLAorICAgICAgICAgICBhdHRlbXB0LCB0b3RkZWxheSwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgbG9nbXNnKCJDb250aW51aW5nIGFueXdheS4uLiIpOworICB9CisKKyAgLyogV2hlbiB0aGUgc3BlY2lmaWVkIGxpc3RlbmVyIHBvcnQgaXMgemVybywgaXQgaXMgYWN0dWFsbHkgYQorICAgICByZXF1ZXN0IHRvIGxldCB0aGUgc3lzdGVtIGNob29zZSBhIG5vbi16ZXJvIGF2YWlsYWJsZSBwb3J0LiAqLworCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgaWYoIXVzZV9pcHY2KSB7CisjZW5kaWYKKyAgICBtZW1zZXQoJmxpc3RlbmVyLnNhNCwgMCwgc2l6ZW9mKGxpc3RlbmVyLnNhNCkpOworICAgIGxpc3RlbmVyLnNhNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBsaXN0ZW5lci5zYTQuc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKyAgICBsaXN0ZW5lci5zYTQuc2luX3BvcnQgPSBodG9ucygqbGlzdGVucG9ydCk7CisgICAgcmMgPSBiaW5kKHNvY2ssICZsaXN0ZW5lci5zYSwgc2l6ZW9mKGxpc3RlbmVyLnNhNCkpOworI2lmZGVmIEVOQUJMRV9JUFY2CisgIH0KKyAgZWxzZSB7CisgICAgbWVtc2V0KCZsaXN0ZW5lci5zYTYsIDAsIHNpemVvZihsaXN0ZW5lci5zYTYpKTsKKyAgICBsaXN0ZW5lci5zYTYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICBsaXN0ZW5lci5zYTYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisgICAgbGlzdGVuZXIuc2E2LnNpbjZfcG9ydCA9IGh0b25zKCpsaXN0ZW5wb3J0KTsKKyAgICByYyA9IGJpbmQoc29jaywgJmxpc3RlbmVyLnNhLCBzaXplb2YobGlzdGVuZXIuc2E2KSk7CisgIH0KKyNlbmRpZiAvKiBFTkFCTEVfSVBWNiAqLworICBpZihyYykgeworICAgIGVycm9yID0gU09DS0VSUk5POworICAgIGxvZ21zZygiRXJyb3IgYmluZGluZyBzb2NrZXQgb24gcG9ydCAlaHU6ICglZCkgJXMiLAorICAgICAgICAgICAqbGlzdGVucG9ydCwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgc2Nsb3NlKHNvY2spOworICAgIHJldHVybiBDVVJMX1NPQ0tFVF9CQUQ7CisgIH0KKworICBpZighKmxpc3RlbnBvcnQpIHsKKyAgICAvKiBUaGUgc3lzdGVtIHdhcyBzdXBwb3NlZCB0byBjaG9vc2UgYSBwb3J0IG51bWJlciwgZmlndXJlIG91dCB3aGljaAorICAgICAgIHBvcnQgd2UgYWN0dWFsbHkgZ290IGFuZCB1cGRhdGUgdGhlIGxpc3RlbmVyIHBvcnQgdmFsdWUgd2l0aCBpdC4gKi8KKyAgICBjdXJsX3NvY2tsZW5fdCBsYV9zaXplOworICAgIHNydnJfc29ja2FkZHJfdW5pb25fdCBsb2NhbGFkZHI7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBpZighdXNlX2lwdjYpCisjZW5kaWYKKyAgICAgIGxhX3NpemUgPSBzaXplb2YobG9jYWxhZGRyLnNhNCk7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBlbHNlCisgICAgICBsYV9zaXplID0gc2l6ZW9mKGxvY2FsYWRkci5zYTYpOworI2VuZGlmCisgICAgbWVtc2V0KCZsb2NhbGFkZHIuc2EsIDAsIChzaXplX3QpbGFfc2l6ZSk7CisgICAgaWYoZ2V0c29ja25hbWUoc29jaywgJmxvY2FsYWRkci5zYSwgJmxhX3NpemUpIDwgMCkgeworICAgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgICBsb2dtc2coImdldHNvY2tuYW1lKCkgZmFpbGVkIHdpdGggZXJyb3I6ICglZCkgJXMiLAorICAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgICAgc2Nsb3NlKHNvY2spOworICAgICAgcmV0dXJuIENVUkxfU09DS0VUX0JBRDsKKyAgICB9CisgICAgc3dpdGNoIChsb2NhbGFkZHIuc2Euc2FfZmFtaWx5KSB7CisgICAgY2FzZSBBRl9JTkVUOgorICAgICAgKmxpc3RlbnBvcnQgPSBudG9ocyhsb2NhbGFkZHIuc2E0LnNpbl9wb3J0KTsKKyAgICAgIGJyZWFrOworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICpsaXN0ZW5wb3J0ID0gbnRvaHMobG9jYWxhZGRyLnNhNi5zaW42X3BvcnQpOworICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmKCEqbGlzdGVucG9ydCkgeworICAgICAgLyogUmVhbCBmYWlsdXJlLCBsaXN0ZW5lciBwb3J0IHNoYWxsIG5vdCBiZSB6ZXJvIGJleW9uZCB0aGlzIHBvaW50LiAqLworICAgICAgbG9nbXNnKCJBcHBhcmVudGx5IGdldHNvY2tuYW1lKCkgc3VjY2VlZGVkLCB3aXRoIGxpc3RlbmVyIHBvcnQgemVyby4iKTsKKyAgICAgIGxvZ21zZygiQSB2YWxpZCByZWFzb24gZm9yIHRoaXMgZmFpbHVyZSBpcyBhIGJpbmFyeSBidWlsdCB3aXRob3V0Iik7CisgICAgICBsb2dtc2coInByb3BlciBuZXR3b3JrIGxpYnJhcnkgbGlua2FnZS4gVGhpcyBtaWdodCBub3QgYmUgdGhlIG9ubHkiKTsKKyAgICAgIGxvZ21zZygicmVhc29uLCBidXQgZG91YmxlIGNoZWNrIGl0IGJlZm9yZSBhbnl0aGluZyBlbHNlLiIpOworICAgICAgc2Nsb3NlKHNvY2spOworICAgICAgcmV0dXJuIENVUkxfU09DS0VUX0JBRDsKKyAgICB9CisgIH0KKworICAvKiBiaW5kb25seSBvcHRpb24gZm9yY2VzIG5vIGxpc3RlbmluZyAqLworICBpZihiaW5kX29ubHkpIHsKKyAgICBsb2dtc2coImluc3RydWN0ZWQgdG8gYmluZCBwb3J0IHdpdGhvdXQgbGlzdGVuaW5nIik7CisgICAgcmV0dXJuIHNvY2s7CisgIH0KKworICAvKiBzdGFydCBhY2NlcHRpbmcgY29ubmVjdGlvbnMgKi8KKyAgcmMgPSBsaXN0ZW4oc29jaywgNSk7CisgIGlmKDAgIT0gcmMpIHsKKyAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICBsb2dtc2coImxpc3RlbigpIGZhaWxlZCB3aXRoIGVycm9yOiAoJWQpICVzIiwKKyAgICAgICAgICAgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgc2Nsb3NlKHNvY2spOworICAgIHJldHVybiBDVVJMX1NPQ0tFVF9CQUQ7CisgIH0KKworICByZXR1cm4gc29jazsKK30KKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBzcnZyX3NvY2thZGRyX3VuaW9uX3QgbWU7CisgIGN1cmxfc29ja2V0X3Qgc29jayA9IENVUkxfU09DS0VUX0JBRDsKKyAgY3VybF9zb2NrZXRfdCBtc2dzb2NrID0gQ1VSTF9TT0NLRVRfQkFEOworICBpbnQgd3JvdGVwaWRmaWxlID0gMDsKKyAgY2hhciAqcGlkbmFtZT0gKGNoYXIgKikiLnNvY2tmaWx0LnBpZCI7CisgIGJvb2wganVnZ2xlX2FnYWluOworICBpbnQgcmM7CisgIGludCBlcnJvcjsKKyAgaW50IGFyZz0xOworICBlbnVtIHNvY2ttb2RlIG1vZGUgPSBQQVNTSVZFX0xJU1RFTjsgLyogZGVmYXVsdCAqLworICBjb25zdCBjaGFyICphZGRyID0gTlVMTDsKKworICB3aGlsZShhcmdjPmFyZykgeworICAgIGlmKCFzdHJjbXAoIi0tdmVyc2lvbiIsIGFyZ3ZbYXJnXSkpIHsKKyAgICAgIHByaW50Zigic29ja2ZpbHQgSVB2NCVzXG4iLAorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICAgICAgICAgIi9JUHY2IgorI2Vsc2UKKyAgICAgICAgICAgICAiIgorI2VuZGlmCisgICAgICAgICAgICAgKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmKCFzdHJjbXAoIi0tdmVyYm9zZSIsIGFyZ3ZbYXJnXSkpIHsKKyAgICAgIHZlcmJvc2UgPSBUUlVFOworICAgICAgYXJnKys7CisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1waWRmaWxlIiwgYXJndlthcmddKSkgeworICAgICAgYXJnKys7CisgICAgICBpZihhcmdjPmFyZykKKyAgICAgICAgcGlkbmFtZSA9IGFyZ3ZbYXJnKytdOworICAgIH0KKyAgICBlbHNlIGlmKCFzdHJjbXAoIi0tbG9nZmlsZSIsIGFyZ3ZbYXJnXSkpIHsKKyAgICAgIGFyZysrOworICAgICAgaWYoYXJnYz5hcmcpCisgICAgICAgIHNlcnZlcmxvZ2ZpbGUgPSBhcmd2W2FyZysrXTsKKyAgICB9CisgICAgZWxzZSBpZighc3RyY21wKCItLWlwdjYiLCBhcmd2W2FyZ10pKSB7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgIGlwdl9pbnVzZSA9ICJJUHY2IjsKKyAgICAgIHVzZV9pcHY2ID0gVFJVRTsKKyNlbmRpZgorICAgICAgYXJnKys7CisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1pcHY0IiwgYXJndlthcmddKSkgeworICAgICAgLyogZm9yIGNvbXBsZXRlbmVzcywgd2Ugc3VwcG9ydCB0aGlzIG9wdGlvbiBhcyB3ZWxsICovCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgIGlwdl9pbnVzZSA9ICJJUHY0IjsKKyAgICAgIHVzZV9pcHY2ID0gRkFMU0U7CisjZW5kaWYKKyAgICAgIGFyZysrOworICAgIH0KKyAgICBlbHNlIGlmKCFzdHJjbXAoIi0tYmluZG9ubHkiLCBhcmd2W2FyZ10pKSB7CisgICAgICBiaW5kX29ubHkgPSBUUlVFOworICAgICAgYXJnKys7CisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1wb3J0IiwgYXJndlthcmddKSkgeworICAgICAgYXJnKys7CisgICAgICBpZihhcmdjPmFyZykgeworICAgICAgICBjaGFyICplbmRwdHI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgdWxudW0gPSBzdHJ0b3VsKGFyZ3ZbYXJnXSwgJmVuZHB0ciwgMTApOworICAgICAgICBpZigoZW5kcHRyICE9IGFyZ3ZbYXJnXSArIHN0cmxlbihhcmd2W2FyZ10pKSB8fAorICAgICAgICAgICAoKHVsbnVtICE9IDBVTCkgJiYgKCh1bG51bSA8IDEwMjVVTCkgfHwgKHVsbnVtID4gNjU1MzVVTCkpKSkgeworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic29ja2ZpbHQ6IGludmFsaWQgLS1wb3J0IGFyZ3VtZW50ICglcylcbiIsCisgICAgICAgICAgICAgICAgICBhcmd2W2FyZ10pOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHBvcnQgPSBjdXJseF91bHRvdXModWxudW0pOworICAgICAgICBhcmcrKzsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZighc3RyY21wKCItLWNvbm5lY3QiLCBhcmd2W2FyZ10pKSB7CisgICAgICAvKiBBc2tlZCB0byBhY3RpdmVseSBjb25uZWN0IHRvIHRoZSBzcGVjaWZpZWQgbG9jYWwgcG9ydCBpbnN0ZWFkIG9mCisgICAgICAgICBkb2luZyBhIHBhc3NpdmUgc2VydmVyLXN0eWxlIGxpc3RlbmluZy4gKi8KKyAgICAgIGFyZysrOworICAgICAgaWYoYXJnYz5hcmcpIHsKKyAgICAgICAgY2hhciAqZW5kcHRyOworICAgICAgICB1bnNpZ25lZCBsb25nIHVsbnVtID0gc3RydG91bChhcmd2W2FyZ10sICZlbmRwdHIsIDEwKTsKKyAgICAgICAgaWYoKGVuZHB0ciAhPSBhcmd2W2FyZ10gKyBzdHJsZW4oYXJndlthcmddKSkgfHwKKyAgICAgICAgICAgKHVsbnVtIDwgMTAyNVVMKSB8fCAodWxudW0gPiA2NTUzNVVMKSkgeworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic29ja2ZpbHQ6IGludmFsaWQgLS1jb25uZWN0IGFyZ3VtZW50ICglcylcbiIsCisgICAgICAgICAgICAgICAgICBhcmd2W2FyZ10pOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGNvbm5lY3Rwb3J0ID0gY3VybHhfdWx0b3VzKHVsbnVtKTsKKyAgICAgICAgYXJnKys7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1hZGRyIiwgYXJndlthcmddKSkgeworICAgICAgLyogU2V0IGFuIElQIGFkZHJlc3MgdG8gdXNlIHdpdGggLS1jb25uZWN0OyBvdGhlcndpc2UgdXNlIGxvY2FsaG9zdCAqLworICAgICAgYXJnKys7CisgICAgICBpZihhcmdjPmFyZykgeworICAgICAgICBhZGRyID0gYXJndlthcmddOworICAgICAgICBhcmcrKzsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBwdXRzKCJVc2FnZTogc29ja2ZpbHQgW29wdGlvbl1cbiIKKyAgICAgICAgICAgIiAtLXZlcnNpb25cbiIKKyAgICAgICAgICAgIiAtLXZlcmJvc2VcbiIKKyAgICAgICAgICAgIiAtLWxvZ2ZpbGUgW2ZpbGVdXG4iCisgICAgICAgICAgICIgLS1waWRmaWxlIFtmaWxlXVxuIgorICAgICAgICAgICAiIC0taXB2NFxuIgorICAgICAgICAgICAiIC0taXB2NlxuIgorICAgICAgICAgICAiIC0tYmluZG9ubHlcbiIKKyAgICAgICAgICAgIiAtLXBvcnQgW3BvcnRdXG4iCisgICAgICAgICAgICIgLS1jb25uZWN0IFtwb3J0XVxuIgorICAgICAgICAgICAiIC0tYWRkciBbYWRkcmVzc10iKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisjaWZkZWYgV0lOMzIKKyAgd2luMzJfaW5pdCgpOworICBhdGV4aXQod2luMzJfY2xlYW51cCk7CisjZW5kaWYKKworICBpbnN0YWxsX3NpZ25hbF9oYW5kbGVycygpOworCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgaWYoIXVzZV9pcHY2KQorI2VuZGlmCisgICAgc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgZWxzZQorICAgIHNvY2sgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTsKKyNlbmRpZgorCisgIGlmKENVUkxfU09DS0VUX0JBRCA9PSBzb2NrKSB7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgbG9nbXNnKCJFcnJvciBjcmVhdGluZyBzb2NrZXQ6ICglZCkgJXMiLAorICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICB3cml0ZV9zdGRvdXQoIkZBSUxcbiIsIDUpOworICAgIGdvdG8gc29ja2ZpbHRfY2xlYW51cDsKKyAgfQorCisgIGlmKGNvbm5lY3Rwb3J0KSB7CisgICAgLyogQWN0aXZlIG1vZGUsIHdlIHNob3VsZCBjb25uZWN0IHRvIHRoZSBnaXZlbiBwb3J0IG51bWJlciAqLworICAgIG1vZGUgPSBBQ1RJVkU7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBpZighdXNlX2lwdjYpIHsKKyNlbmRpZgorICAgICAgbWVtc2V0KCZtZS5zYTQsIDAsIHNpemVvZihtZS5zYTQpKTsKKyAgICAgIG1lLnNhNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIG1lLnNhNC5zaW5fcG9ydCA9IGh0b25zKGNvbm5lY3Rwb3J0KTsKKyAgICAgIG1lLnNhNC5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworICAgICAgaWYgKCFhZGRyKQorICAgICAgICBhZGRyID0gIjEyNy4wLjAuMSI7CisgICAgICBDdXJsX2luZXRfcHRvbihBRl9JTkVULCBhZGRyLCAmbWUuc2E0LnNpbl9hZGRyKTsKKworICAgICAgcmMgPSBjb25uZWN0KHNvY2ssICZtZS5zYSwgc2l6ZW9mKG1lLnNhNCkpOworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgfQorICAgIGVsc2UgeworICAgICAgbWVtc2V0KCZtZS5zYTYsIDAsIHNpemVvZihtZS5zYTYpKTsKKyAgICAgIG1lLnNhNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgbWUuc2E2LnNpbjZfcG9ydCA9IGh0b25zKGNvbm5lY3Rwb3J0KTsKKyAgICAgIGlmICghYWRkcikKKyAgICAgICAgYWRkciA9ICI6OjEiOworICAgICAgQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGFkZHIsICZtZS5zYTYuc2luNl9hZGRyKTsKKworICAgICAgcmMgPSBjb25uZWN0KHNvY2ssICZtZS5zYSwgc2l6ZW9mKG1lLnNhNikpOworICAgIH0KKyNlbmRpZiAvKiBFTkFCTEVfSVBWNiAqLworICAgIGlmKHJjKSB7CisgICAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICAgIGxvZ21zZygiRXJyb3IgY29ubmVjdGluZyB0byBwb3J0ICVodTogKCVkKSAlcyIsCisgICAgICAgICAgICAgY29ubmVjdHBvcnQsIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgICAgd3JpdGVfc3Rkb3V0KCJGQUlMXG4iLCA1KTsKKyAgICAgIGdvdG8gc29ja2ZpbHRfY2xlYW51cDsKKyAgICB9CisgICAgbG9nbXNnKCI9PT09PiBDbGllbnQgY29ubmVjdCIpOworICAgIG1zZ3NvY2sgPSBzb2NrOyAvKiB1c2UgdGhpcyBhcyBzdHJlYW0gKi8KKyAgfQorICBlbHNlIHsKKyAgICAvKiBwYXNzaXZlIGRhZW1vbiBzdHlsZSAqLworICAgIHNvY2sgPSBzb2NrZGFlbW9uKHNvY2ssICZwb3J0KTsKKyAgICBpZihDVVJMX1NPQ0tFVF9CQUQgPT0gc29jaykgeworICAgICAgd3JpdGVfc3Rkb3V0KCJGQUlMXG4iLCA1KTsKKyAgICAgIGdvdG8gc29ja2ZpbHRfY2xlYW51cDsKKyAgICB9CisgICAgbXNnc29jayA9IENVUkxfU09DS0VUX0JBRDsgLyogbm8gc3RyZWFtIHNvY2tldCB5ZXQgKi8KKyAgfQorCisgIGxvZ21zZygiUnVubmluZyAlcyB2ZXJzaW9uIiwgaXB2X2ludXNlKTsKKworICBpZihjb25uZWN0cG9ydCkKKyAgICBsb2dtc2coIkNvbm5lY3RlZCB0byBwb3J0ICVodSIsIGNvbm5lY3Rwb3J0KTsKKyAgZWxzZSBpZihiaW5kX29ubHkpCisgICAgbG9nbXNnKCJCb3VuZCB3aXRob3V0IGxpc3RlbmluZyBvbiBwb3J0ICVodSIsIHBvcnQpOworICBlbHNlCisgICAgbG9nbXNnKCJMaXN0ZW5pbmcgb24gcG9ydCAlaHUiLCBwb3J0KTsKKworICB3cm90ZXBpZGZpbGUgPSB3cml0ZV9waWRmaWxlKHBpZG5hbWUpOworICBpZighd3JvdGVwaWRmaWxlKSB7CisgICAgd3JpdGVfc3Rkb3V0KCJGQUlMXG4iLCA1KTsKKyAgICBnb3RvIHNvY2tmaWx0X2NsZWFudXA7CisgIH0KKworICBkbyB7CisgICAganVnZ2xlX2FnYWluID0ganVnZ2xlKCZtc2dzb2NrLCBzb2NrLCAmbW9kZSk7CisgIH0gd2hpbGUoanVnZ2xlX2FnYWluKTsKKworc29ja2ZpbHRfY2xlYW51cDoKKworICBpZigobXNnc29jayAhPSBzb2NrKSAmJiAobXNnc29jayAhPSBDVVJMX1NPQ0tFVF9CQUQpKQorICAgIHNjbG9zZShtc2dzb2NrKTsKKworICBpZihzb2NrICE9IENVUkxfU09DS0VUX0JBRCkKKyAgICBzY2xvc2Uoc29jayk7CisKKyAgaWYod3JvdGVwaWRmaWxlKQorICAgIHVubGluayhwaWRuYW1lKTsKKworICByZXN0b3JlX3NpZ25hbF9oYW5kbGVycygpOworCisgIGlmKGdvdF9leGl0X3NpZ25hbCkgeworICAgIGxvZ21zZygiPT09PT09PT09PT09PiBzb2NrZmlsdCBleGl0cyB3aXRoIHNpZ25hbCAoJWQpIiwgZXhpdF9zaWduYWwpOworICAgIC8qCisgICAgICogVG8gcHJvcGVybHkgc2V0IHRoZSByZXR1cm4gc3RhdHVzIG9mIHRoZSBwcm9jZXNzIHdlCisgICAgICogbXVzdCByYWlzZSB0aGUgc2FtZSBzaWduYWwgU0lHSU5UIG9yIFNJR1RFUk0gdGhhdCB3ZQorICAgICAqIGNhdWdodCBhbmQgbGV0IHRoZSBvbGQgaGFuZGxlciB0YWtlIGNhcmUgb2YgaXQuCisgICAgICovCisgICAgcmFpc2UoZXhpdF9zaWduYWwpOworICB9CisKKyAgbG9nbXNnKCI9PT09PT09PT09PT0+IHNvY2tmaWx0IHF1aXRzIik7CisgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvc3dzLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvc3dzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY1NGJjNgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci9zd3MuYwpAQCAtMCwwICsxLDIwMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBzd3MuYzogc2ltcGxlIChzaWxseT8pIHdlYiBzZXJ2ZXIKKworICAgVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IGdyYWNpb3VzbHkgZG9uYXRlZCB0byB0aGUgcHJvamVjdCBieSBKdWVyZ2VuCisgICBXaWxrZS4gVGhhbmtzIGEgYnVuY2ghCisKKyAqLworCisjZGVmaW5lIENVUkxfTk9fT0xESUVTCisKKyNpbmNsdWRlICJzZXR1cC5oIiAvKiBwb3J0YWJpbGl0eSBoZWxwIGZyb20gdGhlIGxpYiBkaXJlY3RvcnkgKi8KKworI2lmZGVmIEhBVkVfU0lHTkFMX0gKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4gLyogZm9yIFRDUF9OT0RFTEFZICovCisjZW5kaWYKKworI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCisvKiBtYWtlIHRoZSBjdXJseCBoZWFkZXIgZGVmaW5lIGFsbCBwcmludGYoKSBmdW5jdGlvbnMgdG8gdXNlIHRoZSBjdXJseF8qCisgICB2ZXJzaW9ucyBpbnN0ZWFkICovCisjaW5jbHVkZSAiY3VybHguaCIgLyogZnJvbSB0aGUgcHJpdmF0ZSBsaWIgZGlyICovCisjaW5jbHVkZSAiZ2V0cGFydC5oIgorI2luY2x1ZGUgImluZXRfcHRvbi5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJzZXJ2ZXJfc29ja2FkZHIuaCIKKworLyogaW5jbHVkZSBtZW1kZWJ1Zy5oIGxhc3QgKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCisjaWYgIWRlZmluZWQoQ1VSTF9TV1NfRk9SS19FTkFCTEVEKSAmJiBkZWZpbmVkKEhBVkVfRk9SSykKKy8qCisgKiBUaGUgbm9ybWFsIHN3cyBidWlsZCBmb3IgdGhlIHBsYWluIHN0YW5kYXJkIGN1cmwgdGVzdCBzdWl0ZSBoYXMgbm8gdXNlIGZvcgorICogZm9yaygpLCBidXQgaWYgeW91IGZlZWwgd2lsZCBhbmQgY3JhenkgYW5kIHdhbnQgdG8gc2V0dXAgc29tZSBtb3JlIGV4b3RpYworICogdGVzdHMuIERlZmluZSB0aGlzIGFuZCBydW4uLi4KKyAqLworI2RlZmluZSBDVVJMX1NXU19GT1JLX0VOQUJMRUQKKyNlbmRpZgorCisjaWZkZWYgRU5BQkxFX0lQVjYKK3N0YXRpYyBib29sIHVzZV9pcHY2ID0gRkFMU0U7CisjZW5kaWYKK3N0YXRpYyBib29sIHVzZV9nb3BoZXIgPSBGQUxTRTsKK3N0YXRpYyBjb25zdCBjaGFyICppcHZfaW51c2UgPSAiSVB2NCI7CitzdGF0aWMgaW50IHNlcnZlcmxvZ3Nsb2NrZWQgPSAwOworc3RhdGljIGJvb2wgaXNfcHJveHkgPSBGQUxTRTsKKworI2RlZmluZSBSRVFCVUZTSVogMTUwMDAwCisjZGVmaW5lIFJFUUJVRlNJWl9UWFQgIjE0OTk5OSIKKworc3RhdGljIGxvbmcgcHJldnRlc3Rubz0tMTsgICAgLyogcHJldmlvdXMgdGVzdCBudW1iZXIgd2Ugc2VydmVkICovCitzdGF0aWMgbG9uZyBwcmV2cGFydG5vPS0xOyAgICAvKiBwcmV2aW91cyBwYXJ0IG51bWJlciB3ZSBzZXJ2ZWQgKi8KK3N0YXRpYyBib29sIHByZXZib3VuY2U9RkFMU0U7IC8qIGluc3RydWN0cyB0aGUgc2VydmVyIHRvIGluY3JlYXNlIHRoZSBwYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgZm9yIGEgdGVzdCBpbiBjYXNlIHRoZSBpZGVudGljYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RubytwYXJ0bm8gcmVxdWVzdCBzaG93cyB1cCBhZ2FpbiAqLworCisjZGVmaW5lIFJDTURfTk9STUFMUkVRIDAgLyogZGVmYXVsdCByZXF1ZXN0LCB1c2UgdGhlIHRlc3RzIGZpbGUgbm9ybWFsbHkgKi8KKyNkZWZpbmUgUkNNRF9JRExFICAgICAgMSAvKiB0b2xkIHRvIHNpdCBpZGxlICovCisjZGVmaW5lIFJDTURfU1RSRUFNICAgIDIgLyogdG9sZCB0byBzdHJlYW0gKi8KKworc3RydWN0IGh0dHByZXF1ZXN0IHsKKyAgY2hhciByZXFidWZbUkVRQlVGU0laXTsgLyogYnVmZmVyIGFyZWEgZm9yIHRoZSBpbmNvbWluZyByZXF1ZXN0ICovCisgIHNpemVfdCBjaGVja2luZGV4OyAvKiB3aGVyZSB0byBzdGFydCBjaGVja2luZyBvZiB0aGUgcmVxdWVzdCAqLworICBzaXplX3Qgb2Zmc2V0OyAgICAgLyogc2l6ZSBvZiB0aGUgaW5jb21pbmcgcmVxdWVzdCAqLworICBsb25nIHRlc3RubzsgICAgICAgLyogdGVzdCBudW1iZXIgZm91bmQgaW4gdGhlIHJlcXVlc3QgKi8KKyAgbG9uZyBwYXJ0bm87ICAgICAgIC8qIHBhcnQgbnVtYmVyIGZvdW5kIGluIHRoZSByZXF1ZXN0ICovCisgIGJvb2wgb3BlbjsgICAgICAvKiBrZWVwIGNvbm5lY3Rpb24gb3BlbiBpbmZvLCBhcyBmb3VuZCBpbiB0aGUgcmVxdWVzdCAqLworICBib29sIGF1dGhfcmVxOyAgLyogYXV0aGVudGljYXRpb24gcmVxdWlyZWQsIGRvbid0IHdhaXQgZm9yIGJvZHkgdW5sZXNzCisgICAgICAgICAgICAgICAgICAgICB0aGVyZSdzIGFuIEF1dGhvcml6YXRpb24gaGVhZGVyICovCisgIGJvb2wgYXV0aDsgICAgICAvKiBBdXRob3JpemF0aW9uIGhlYWRlciBwcmVzZW50IGluIHRoZSBpbmNvbWluZyByZXF1ZXN0ICovCisgIHNpemVfdCBjbDsgICAgICAvKiBDb250ZW50LUxlbmd0aCBvZiB0aGUgaW5jb21pbmcgcmVxdWVzdCAqLworICBib29sIGRpZ2VzdDsgICAgLyogQXV0aG9yaXphdGlvbiBkaWdlc3QgaGVhZGVyIGZvdW5kICovCisgIGJvb2wgbnRsbTsgICAgICAvKiBBdXRob3JpemF0aW9uIG50bG0gaGVhZGVyIGZvdW5kICovCisgIGludCB3cml0ZWRlbGF5OyAvKiBpZiBub24temVybywgZGVsYXkgdGhpcyBudW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgICB3cml0ZXMgaW4gdGhlIHJlc3BvbnNlICovCisgIGludCBwaXBlOyAgICAgICAvKiBpZiBub24temVybywgZXhwZWN0IHRoaXMgbWFueSByZXF1ZXN0cyB0byBkbyBhICJwaXBlZCIKKyAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QvcmVzcG9uc2UgKi8KKyAgaW50IHNraXA7ICAgICAgIC8qIGlmIG5vbi16ZXJvLCB0aGUgc2VydmVyIGlzIGluc3RydWN0ZWQgdG8gbm90IHJlYWQgdGhpcworICAgICAgICAgICAgICAgICAgICAgbWFueSBieXRlcyBmcm9tIGEgUFVUL1BPU1QgcmVxdWVzdC4gSWUgdGhlIGNsaWVudCBzZW5kcyBOCisgICAgICAgICAgICAgICAgICAgICBieXRlcyBzYWlkIGluIENvbnRlbnQtTGVuZ3RoLCBidXQgdGhlIHNlcnZlciBvbmx5IHJlYWRzIE4KKyAgICAgICAgICAgICAgICAgICAgIC0gc2tpcCBieXRlcy4gKi8KKyAgaW50IHJjbWQ7ICAgICAgIC8qIGRvaW5nIGEgc3BlY2lhbCBjb21tYW5kLCBzZWUgZGVmaW5lcyBhYm92ZSAqLworICBpbnQgcHJvdF92ZXJzaW9uOyAgLyogSFRUUCB2ZXJzaW9uICogMTAgKi8KKyAgYm9vbCBwaXBlbGluaW5nOyAgIC8qIHRydWUgaWYgcmVxdWVzdCBpcyBwaXBlbGluZWQgKi8KKyAgaW50IGNhbGxjb3VudDsgIC8qIHRpbWVzIFByb2Nlc3NSZXF1ZXN0KCkgZ2V0cyBjYWxsZWQgKi8KKyAgdW5zaWduZWQgc2hvcnQgY29ubmVjdF9wb3J0OyAvKiB0aGUgcG9ydCBudW1iZXIgQ09OTkVDVCB1c2VkICovCit9OworCitzdGF0aWMgaW50IFByb2Nlc3NSZXF1ZXN0KHN0cnVjdCBodHRwcmVxdWVzdCAqcmVxKTsKK3N0YXRpYyB2b2lkIHN0b3JlcmVxdWVzdChjaGFyICpyZXFidWYsIHNpemVfdCB0b3RhbHNpemUpOworCisjZGVmaW5lIERFRkFVTFRfUE9SVCA4OTk5CisKKyNpZm5kZWYgREVGQVVMVF9MT0dGSUxFCisjZGVmaW5lIERFRkFVTFRfTE9HRklMRSAibG9nL3N3cy5sb2ciCisjZW5kaWYKKworY29uc3QgY2hhciAqc2VydmVybG9nZmlsZSA9IERFRkFVTFRfTE9HRklMRTsKKworI2RlZmluZSBTV1NWRVJTSU9OICJjVVJMIHRlc3Qgc3VpdGUgSFRUUCBzZXJ2ZXIvMC4xIgorCisjZGVmaW5lIFJFUVVFU1RfRFVNUCAgImxvZy9zZXJ2ZXIuaW5wdXQiCisjZGVmaW5lIFJFU1BPTlNFX0RVTVAgImxvZy9zZXJ2ZXIucmVzcG9uc2UiCisKKy8qIHdoZW4gdG9sZCB0byBydW4gYXMgcHJveHksIHdlIHN0b3JlIHRoZSBsb2dzIGluIGRpZmZlcmVudCBmaWxlcyBzbyB0aGF0CisgICB0aGV5IGNhbiBjby1leGlzdCB3aXRoIHRoZSBzYW1lIHByb2dyYW0gcnVubmluZyBhcyBhICJzZXJ2ZXIiICovCisjZGVmaW5lIFJFUVVFU1RfUFJPWFlfRFVNUCAgImxvZy9wcm94eS5pbnB1dCIKKyNkZWZpbmUgUkVTUE9OU0VfUFJPWFlfRFVNUCAibG9nL3Byb3h5LnJlc3BvbnNlIgorCisvKiB2ZXJ5LWJpZy1wYXRoIHN1cHBvcnQgKi8KKyNkZWZpbmUgTUFYRE9DTkFNRUxFTiAxNDAwMDAKKyNkZWZpbmUgTUFYRE9DTkFNRUxFTl9UWFQgIjEzOTk5OSIKKworI2RlZmluZSBSRVFVRVNUX0tFWVdPUkRfU0laRSAyNTYKKyNkZWZpbmUgUkVRVUVTVF9LRVlXT1JEX1NJWkVfVFhUICIyNTUiCisKKyNkZWZpbmUgQ01EX0FVVEhfUkVRVUlSRUQgImF1dGhfcmVxdWlyZWQiCisKKy8qICdpZGxlJyBtZWFucyB0aGF0IGl0IHdpbGwgYWNjZXB0IHRoZSByZXF1ZXN0IGZpbmUgYnV0IG5ldmVyIHJlc3BvbmQKKyAgIGFueSBkYXRhLiBKdXN0IGtlZXAgdGhlIGNvbm5lY3Rpb24gYWxpdmUuICovCisjZGVmaW5lIENNRF9JRExFICJpZGxlIgorCisvKiAnc3RyZWFtJyBtZWFucyB0byBzZW5kIGEgbmV2ZXItZW5kaW5nIHN0cmVhbSBvZiBkYXRhICovCisjZGVmaW5lIENNRF9TVFJFQU0gInN0cmVhbSIKKworI2RlZmluZSBFTkRfT0ZfSEVBREVSUyAiXHJcblxyXG4iCisKK2VudW0geworICBET0NOVU1CRVJfTk9USElORyA9IC03LAorICBET0NOVU1CRVJfUVVJVCAgICA9IC02LAorICBET0NOVU1CRVJfQkFEQ09OTkVDVCA9IC01LAorICBET0NOVU1CRVJfSU5URVJOQUw9IC00LAorICBET0NOVU1CRVJfQ09OTkVDVCA9IC0zLAorICBET0NOVU1CRVJfV0VSVUxFWiA9IC0yLAorICBET0NOVU1CRVJfNDA0ICAgICA9IC0xCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZW5kX29mX2hlYWRlcnMgPSBFTkRfT0ZfSEVBREVSUzsKKworLyogc2VudCBhcyByZXBseSB0byBhIFFVSVQgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkb2NxdWl0ID0KKyJIVFRQLzEuMSAyMDAgR29vZGJ5ZSIgRU5EX09GX0hFQURFUlM7CisKKy8qIHNlbnQgYXMgcmVwbHkgdG8gYSBDT05ORUNUICovCitzdGF0aWMgY29uc3QgY2hhciAqZG9jY29ubmVjdCA9CisiSFRUUC8xLjEgMjAwIE1pZ2h0eSBmaW5lIGluZGVlZCIgRU5EX09GX0hFQURFUlM7CisKKy8qIHNlbnQgYXMgcmVwbHkgdG8gYSAiYmFkIiBDT05ORUNUICovCitzdGF0aWMgY29uc3QgY2hhciAqZG9jYmFkY29ubmVjdCA9CisiSFRUUC8xLjEgNTAxIEZvcmJpZGRlbiB5b3UgZm9vbCIgRU5EX09GX0hFQURFUlM7CisKKy8qIHNlbmQgYmFjayB0aGlzIG9uIDQwNCBmaWxlIG5vdCBmb3VuZCAqLworc3RhdGljIGNvbnN0IGNoYXIgKmRvYzQwNCA9ICJIVFRQLzEuMSA0MDQgTm90IEZvdW5kXHJcbiIKKyAgICAiU2VydmVyOiAiIFNXU1ZFUlNJT04gIlxyXG4iCisgICAgIkNvbm5lY3Rpb246IGNsb3NlXHJcbiIKKyAgICAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwiCisgICAgRU5EX09GX0hFQURFUlMKKyAgICAiPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vSUVURi8vRFREIEhUTUwgMi4wLy9FTlwiPlxuIgorICAgICI8SFRNTD48SEVBRD5cbiIKKyAgICAiPFRJVExFPjQwNCBOb3QgRm91bmQ8L1RJVExFPlxuIgorICAgICI8L0hFQUQ+PEJPRFk+XG4iCisgICAgIjxIMT5Ob3QgRm91bmQ8L0gxPlxuIgorICAgICJUaGUgcmVxdWVzdGVkIFVSTCB3YXMgbm90IGZvdW5kIG9uIHRoaXMgc2VydmVyLlxuIgorICAgICI8UD48SFI+PEFERFJFU1M+IiBTV1NWRVJTSU9OICI8L0FERFJFU1M+XG4iICI8L0JPRFk+PC9IVE1MPlxuIjsKKworLyogZG8tbm90aGluZyBtYWNybyByZXBsYWNlbWVudCBmb3Igc3lzdGVtcyB3aGljaCBsYWNrIHNpZ2ludGVycnVwdCgpICovCisKKyNpZm5kZWYgSEFWRV9TSUdJTlRFUlJVUFQKKyNkZWZpbmUgc2lnaW50ZXJydXB0KHgseSkgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCisvKiB2YXJzIHVzZWQgdG8ga2VlcCBhcm91bmQgcHJldmlvdXMgc2lnbmFsIGhhbmRsZXJzICovCisKK3R5cGVkZWYgUkVUU0lHVFlQRSAoKlNJR0hBTkRMRVJfVCkoaW50KTsKKworI2lmZGVmIFNJR0hVUAorc3RhdGljIFNJR0hBTkRMRVJfVCBvbGRfc2lnaHVwX2hhbmRsZXIgID0gU0lHX0VSUjsKKyNlbmRpZgorCisjaWZkZWYgU0lHUElQRQorc3RhdGljIFNJR0hBTkRMRVJfVCBvbGRfc2lncGlwZV9oYW5kbGVyID0gU0lHX0VSUjsKKyNlbmRpZgorCisjaWZkZWYgU0lHQUxSTQorc3RhdGljIFNJR0hBTkRMRVJfVCBvbGRfc2lnYWxybV9oYW5kbGVyID0gU0lHX0VSUjsKKyNlbmRpZgorCisjaWZkZWYgU0lHSU5UCitzdGF0aWMgU0lHSEFORExFUl9UIG9sZF9zaWdpbnRfaGFuZGxlciAgPSBTSUdfRVJSOworI2VuZGlmCisKKyNpZmRlZiBTSUdURVJNCitzdGF0aWMgU0lHSEFORExFUl9UIG9sZF9zaWd0ZXJtX2hhbmRsZXIgPSBTSUdfRVJSOworI2VuZGlmCisKKy8qIHZhciB3aGljaCBpZiBzZXQgaW5kaWNhdGVzIHRoYXQgdGhlIHByb2dyYW0gc2hvdWxkIGZpbmlzaCBleGVjdXRpb24gKi8KKworU0lHX0FUT01JQ19UIGdvdF9leGl0X3NpZ25hbCA9IDA7CisKKy8qIGlmIG5leHQgaXMgc2V0IGluZGljYXRlcyB0aGUgZmlyc3Qgc2lnbmFsIGhhbmRsZWQgaW4gZXhpdF9zaWduYWxfaGFuZGxlciAqLworCitzdGF0aWMgdm9sYXRpbGUgaW50IGV4aXRfc2lnbmFsID0gMDsKKworLyogc2lnbmFsIGhhbmRsZXIgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtCisgIHNob3VsZCBmaW5pc2ggaXRzIGV4ZWN1dGlvbiBpbiBhIGNvbnRyb2xsZWQgbWFubmVyIGFzIHNvb24gYXMgcG9zc2libGUuCisgIFRoZSBmaXJzdCB0aW1lIHRoaXMgaXMgY2FsbGVkIGl0IHdpbGwgc2V0IGdvdF9leGl0X3NpZ25hbCB0byBvbmUgYW5kCisgIHN0b3JlIGluIGV4aXRfc2lnbmFsIHRoZSBzaWduYWwgdGhhdCB0cmlnZ2VyZWQgaXRzIGV4ZWN1dGlvbi4gKi8KKworc3RhdGljIFJFVFNJR1RZUEUgZXhpdF9zaWduYWxfaGFuZGxlcihpbnQgc2lnbnVtKQoreworICBpbnQgb2xkX2Vycm5vID0gRVJSTk87CisgIGlmKGdvdF9leGl0X3NpZ25hbCA9PSAwKSB7CisgICAgZ290X2V4aXRfc2lnbmFsID0gMTsKKyAgICBleGl0X3NpZ25hbCA9IHNpZ251bTsKKyAgfQorICAodm9pZClzaWduYWwoc2lnbnVtLCBleGl0X3NpZ25hbF9oYW5kbGVyKTsKKyAgU0VUX0VSUk5PKG9sZF9lcnJubyk7Cit9CisKK3N0YXRpYyB2b2lkIGluc3RhbGxfc2lnbmFsX2hhbmRsZXJzKHZvaWQpCit7CisjaWZkZWYgU0lHSFVQCisgIC8qIGlnbm9yZSBTSUdIVVAgc2lnbmFsICovCisgIGlmKChvbGRfc2lnaHVwX2hhbmRsZXIgPSBzaWduYWwoU0lHSFVQLCBTSUdfSUdOKSkgPT0gU0lHX0VSUikKKyAgICBsb2dtc2coImNhbm5vdCBpbnN0YWxsIFNJR0hVUCBoYW5kbGVyOiAlcyIsIHN0cmVycm9yKEVSUk5PKSk7CisjZW5kaWYKKyNpZmRlZiBTSUdQSVBFCisgIC8qIGlnbm9yZSBTSUdQSVBFIHNpZ25hbCAqLworICBpZigob2xkX3NpZ3BpcGVfaGFuZGxlciA9IHNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKSkgPT0gU0lHX0VSUikKKyAgICBsb2dtc2coImNhbm5vdCBpbnN0YWxsIFNJR1BJUEUgaGFuZGxlcjogJXMiLCBzdHJlcnJvcihFUlJOTykpOworI2VuZGlmCisjaWZkZWYgU0lHQUxSTQorICAvKiBpZ25vcmUgU0lHQUxSTSBzaWduYWwgKi8KKyAgaWYoKG9sZF9zaWdhbHJtX2hhbmRsZXIgPSBzaWduYWwoU0lHQUxSTSwgU0lHX0lHTikpID09IFNJR19FUlIpCisgICAgbG9nbXNnKCJjYW5ub3QgaW5zdGFsbCBTSUdBTFJNIGhhbmRsZXI6ICVzIiwgc3RyZXJyb3IoRVJSTk8pKTsKKyNlbmRpZgorI2lmZGVmIFNJR0lOVAorICAvKiBoYW5kbGUgU0lHSU5UIHNpZ25hbCB3aXRoIG91ciBleGl0X3NpZ25hbF9oYW5kbGVyICovCisgIGlmKChvbGRfc2lnaW50X2hhbmRsZXIgPSBzaWduYWwoU0lHSU5ULCBleGl0X3NpZ25hbF9oYW5kbGVyKSkgPT0gU0lHX0VSUikKKyAgICBsb2dtc2coImNhbm5vdCBpbnN0YWxsIFNJR0lOVCBoYW5kbGVyOiAlcyIsIHN0cmVycm9yKEVSUk5PKSk7CisgIGVsc2UKKyAgICBzaWdpbnRlcnJ1cHQoU0lHSU5ULCAxKTsKKyNlbmRpZgorI2lmZGVmIFNJR1RFUk0KKyAgLyogaGFuZGxlIFNJR1RFUk0gc2lnbmFsIHdpdGggb3VyIGV4aXRfc2lnbmFsX2hhbmRsZXIgKi8KKyAgaWYoKG9sZF9zaWd0ZXJtX2hhbmRsZXIgPSBzaWduYWwoU0lHVEVSTSwgZXhpdF9zaWduYWxfaGFuZGxlcikpID09IFNJR19FUlIpCisgICAgbG9nbXNnKCJjYW5ub3QgaW5zdGFsbCBTSUdURVJNIGhhbmRsZXI6ICVzIiwgc3RyZXJyb3IoRVJSTk8pKTsKKyAgZWxzZQorICAgIHNpZ2ludGVycnVwdChTSUdURVJNLCAxKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCByZXN0b3JlX3NpZ25hbF9oYW5kbGVycyh2b2lkKQoreworI2lmZGVmIFNJR0hVUAorICBpZihTSUdfRVJSICE9IG9sZF9zaWdodXBfaGFuZGxlcikKKyAgICAodm9pZClzaWduYWwoU0lHSFVQLCBvbGRfc2lnaHVwX2hhbmRsZXIpOworI2VuZGlmCisjaWZkZWYgU0lHUElQRQorICBpZihTSUdfRVJSICE9IG9sZF9zaWdwaXBlX2hhbmRsZXIpCisgICAgKHZvaWQpc2lnbmFsKFNJR1BJUEUsIG9sZF9zaWdwaXBlX2hhbmRsZXIpOworI2VuZGlmCisjaWZkZWYgU0lHQUxSTQorICBpZihTSUdfRVJSICE9IG9sZF9zaWdhbHJtX2hhbmRsZXIpCisgICAgKHZvaWQpc2lnbmFsKFNJR0FMUk0sIG9sZF9zaWdhbHJtX2hhbmRsZXIpOworI2VuZGlmCisjaWZkZWYgU0lHSU5UCisgIGlmKFNJR19FUlIgIT0gb2xkX3NpZ2ludF9oYW5kbGVyKQorICAgICh2b2lkKXNpZ25hbChTSUdJTlQsIG9sZF9zaWdpbnRfaGFuZGxlcik7CisjZW5kaWYKKyNpZmRlZiBTSUdURVJNCisgIGlmKFNJR19FUlIgIT0gb2xkX3NpZ3Rlcm1faGFuZGxlcikKKyAgICAodm9pZClzaWduYWwoU0lHVEVSTSwgb2xkX3NpZ3Rlcm1faGFuZGxlcik7CisjZW5kaWYKK30KKworc3RhdGljIGludCBQcm9jZXNzUmVxdWVzdChzdHJ1Y3QgaHR0cHJlcXVlc3QgKnJlcSkKK3sKKyAgY2hhciAqbGluZT0mcmVxLT5yZXFidWZbcmVxLT5jaGVja2luZGV4XTsKKyAgYm9vbCBjaHVua2VkID0gRkFMU0U7CisgIHN0YXRpYyBjaGFyIHJlcXVlc3RbUkVRVUVTVF9LRVlXT1JEX1NJWkVdOworICBzdGF0aWMgY2hhciBkb2NbTUFYRE9DTkFNRUxFTl07CisgIGNoYXIgbG9nYnVmWzQ1Nl07CisgIGludCBwcm90X21ham9yLCBwcm90X21pbm9yOworICBjaGFyICplbmQ7CisgIGludCBlcnJvcjsKKyAgZW5kID0gc3Ryc3RyKGxpbmUsIGVuZF9vZl9oZWFkZXJzKTsKKworICByZXEtPmNhbGxjb3VudCsrOworCisgIGxvZ21zZygiUHJvY2VzcyAlZCBieXRlcyByZXF1ZXN0JXMiLCByZXEtPm9mZnNldCwKKyAgICAgICAgIHJlcS0+Y2FsbGNvdW50ID4gMT8iIFtDT05USU5VRURdIjoiIik7CisKKyAgLyogdHJ5IHRvIGZpZ3VyZSBvdXQgdGhlIHJlcXVlc3QgY2hhcmFjdGVyaXN0aWNzIGFzIHNvb24gYXMgcG9zc2libGUsIGJ1dAorICAgICBvbmx5IG9uY2UhICovCisKKyAgaWYodXNlX2dvcGhlciAmJgorICAgICAocmVxLT50ZXN0bm8gPT0gRE9DTlVNQkVSX05PVEhJTkcpICYmCisgICAgICFzdHJuY21wKCIvdmVyaWZpZWRzZXJ2ZXIiLCBsaW5lLCAxNSkpIHsKKyAgICBsb2dtc2coIkFyZS13ZS1mcmllbmRseSBxdWVzdGlvbiByZWNlaXZlZCIpOworICAgIHJlcS0+dGVzdG5vID0gRE9DTlVNQkVSX1dFUlVMRVo7CisgICAgcmV0dXJuIDE7IC8qIGRvbmUgKi8KKyAgfQorCisgIGVsc2UgaWYoKHJlcS0+dGVzdG5vID09IERPQ05VTUJFUl9OT1RISU5HKSAmJgorICAgICBzc2NhbmYobGluZSwKKyAgICAgICAgICAgICIlIiBSRVFVRVNUX0tFWVdPUkRfU0laRV9UWFQicyAlIiBNQVhET0NOQU1FTEVOX1RYVCAicyBIVFRQLyVkLiVkIiwKKyAgICAgICAgICAgIHJlcXVlc3QsCisgICAgICAgICAgICBkb2MsCisgICAgICAgICAgICAmcHJvdF9tYWpvciwKKyAgICAgICAgICAgICZwcm90X21pbm9yKSA9PSA0KSB7CisgICAgY2hhciAqcHRyOworCisgICAgcmVxLT5wcm90X3ZlcnNpb24gPSBwcm90X21ham9yKjEwICsgcHJvdF9taW5vcjsKKworICAgIC8qIGZpbmQgdGhlIGxhc3Qgc2xhc2ggKi8KKyAgICBwdHIgPSBzdHJyY2hyKGRvYywgJy8nKTsKKworICAgIC8qIGdldCB0aGUgbnVtYmVyIGFmdGVyIGl0ICovCisgICAgaWYocHRyKSB7CisgICAgICBGSUxFICpzdHJlYW07CisgICAgICBjaGFyICpmaWxlbmFtZTsKKworICAgICAgaWYoKHN0cmxlbihkb2MpICsgc3RybGVuKHJlcXVlc3QpKSA8IDQwMCkKKyAgICAgICAgc3ByaW50Zihsb2didWYsICJHb3QgcmVxdWVzdDogJXMgJXMgSFRUUC8lZC4lZCIsCisgICAgICAgICAgICAgICAgcmVxdWVzdCwgZG9jLCBwcm90X21ham9yLCBwcm90X21pbm9yKTsKKyAgICAgIGVsc2UKKyAgICAgICAgc3ByaW50Zihsb2didWYsICJHb3QgYSAqSFVHRSogcmVxdWVzdCBIVFRQLyVkLiVkIiwKKyAgICAgICAgICAgICAgICBwcm90X21ham9yLCBwcm90X21pbm9yKTsKKyAgICAgIGxvZ21zZygiJXMiLCBsb2didWYpOworCisgICAgICBpZighc3RybmNtcCgiL3ZlcmlmaWVkc2VydmVyIiwgcHRyLCAxNSkpIHsKKyAgICAgICAgbG9nbXNnKCJBcmUtd2UtZnJpZW5kbHkgcXVlc3Rpb24gcmVjZWl2ZWQiKTsKKyAgICAgICAgcmVxLT50ZXN0bm8gPSBET0NOVU1CRVJfV0VSVUxFWjsKKyAgICAgICAgcmV0dXJuIDE7IC8qIGRvbmUgKi8KKyAgICAgIH0KKworICAgICAgaWYoIXN0cm5jbXAoIi9xdWl0IiwgcHRyLCA1KSkgeworICAgICAgICBsb2dtc2coIlJlcXVlc3QtdG8tcXVpdCByZWNlaXZlZCIpOworICAgICAgICByZXEtPnRlc3RubyA9IERPQ05VTUJFUl9RVUlUOworICAgICAgICByZXR1cm4gMTsgLyogZG9uZSAqLworICAgICAgfQorCisgICAgICBwdHIrKzsgLyogc2tpcCB0aGUgc2xhc2ggKi8KKworICAgICAgLyogc2tpcCBhbGwgbm9uLW51bWVyaWNhbHMgZm9sbG93aW5nIHRoZSBzbGFzaCAqLworICAgICAgd2hpbGUoKnB0ciAmJiAhSVNESUdJVCgqcHRyKSkKKyAgICAgICAgcHRyKys7CisKKyAgICAgIHJlcS0+dGVzdG5vID0gc3RydG9sKHB0ciwgJnB0ciwgMTApOworCisgICAgICBpZihyZXEtPnRlc3RubyA+IDEwMDAwKSB7CisgICAgICAgIHJlcS0+cGFydG5vID0gcmVxLT50ZXN0bm8gJSAxMDAwMDsKKyAgICAgICAgcmVxLT50ZXN0bm8gLz0gMTAwMDA7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJlcS0+cGFydG5vID0gMDsKKworICAgICAgc3ByaW50Zihsb2didWYsICJSZXF1ZXN0ZWQgdGVzdCBudW1iZXIgJWxkIHBhcnQgJWxkIiwKKyAgICAgICAgICAgICAgcmVxLT50ZXN0bm8sIHJlcS0+cGFydG5vKTsKKyAgICAgIGxvZ21zZygiJXMiLCBsb2didWYpOworCisgICAgICBmaWxlbmFtZSA9IHRlc3QyZmlsZShyZXEtPnRlc3Rubyk7CisKKyAgICAgIHN0cmVhbT1mb3BlbihmaWxlbmFtZSwgInJiIik7CisgICAgICBpZighc3RyZWFtKSB7CisgICAgICAgIGVycm9yID0gRVJSTk87CisgICAgICAgIGxvZ21zZygiZm9wZW4oKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQgJXMiLCBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgbG9nbXNnKCJFcnJvciBvcGVuaW5nIGZpbGU6ICVzIiwgZmlsZW5hbWUpOworICAgICAgICBsb2dtc2coIkNvdWxkbid0IG9wZW4gdGVzdCBmaWxlICVsZCIsIHJlcS0+dGVzdG5vKTsKKyAgICAgICAgcmVxLT5vcGVuID0gRkFMU0U7IC8qIGNsb3NlcyBjb25uZWN0aW9uICovCisgICAgICAgIHJldHVybiAxOyAvKiBkb25lICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY2hhciAqb3JnY21kID0gTlVMTDsKKyAgICAgICAgY2hhciAqY21kID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IGNtZHNpemUgPSAwOworICAgICAgICBpbnQgbnVtPTA7CisKKyAgICAgICAgLyogZ2V0IHRoZSBjdXN0b20gc2VydmVyIGNvbnRyb2wgImNvbW1hbmRzIiAqLworICAgICAgICBlcnJvciA9IGdldHBhcnQoJm9yZ2NtZCwgJmNtZHNpemUsICJyZXBseSIsICJzZXJ2ZXJjbWQiLCBzdHJlYW0pOworICAgICAgICBmY2xvc2Uoc3RyZWFtKTsKKyAgICAgICAgaWYoZXJyb3IpIHsKKyAgICAgICAgICBsb2dtc2coImdldHBhcnQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQiLCBlcnJvcik7CisgICAgICAgICAgcmVxLT5vcGVuID0gRkFMU0U7IC8qIGNsb3NlcyBjb25uZWN0aW9uICovCisgICAgICAgICAgcmV0dXJuIDE7IC8qIGRvbmUgKi8KKyAgICAgICAgfQorCisgICAgICAgIGNtZCA9IG9yZ2NtZDsKKyAgICAgICAgd2hpbGUoY21kICYmIGNtZHNpemUpIHsKKyAgICAgICAgICBjaGFyICpjaGVjazsKKworICAgICAgICAgIGlmKCFzdHJuY21wKENNRF9BVVRIX1JFUVVJUkVELCBjbWQsIHN0cmxlbihDTURfQVVUSF9SRVFVSVJFRCkpKSB7CisgICAgICAgICAgICBsb2dtc2coImluc3RydWN0ZWQgdG8gcmVxdWlyZSBhdXRob3JpemF0aW9uIGhlYWRlciIpOworICAgICAgICAgICAgcmVxLT5hdXRoX3JlcSA9IFRSVUU7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoIXN0cm5jbXAoQ01EX0lETEUsIGNtZCwgc3RybGVuKENNRF9JRExFKSkpIHsKKyAgICAgICAgICAgIGxvZ21zZygiaW5zdHJ1Y3RlZCB0byBpZGxlIik7CisgICAgICAgICAgICByZXEtPnJjbWQgPSBSQ01EX0lETEU7CisgICAgICAgICAgICByZXEtPm9wZW4gPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmKCFzdHJuY21wKENNRF9TVFJFQU0sIGNtZCwgc3RybGVuKENNRF9TVFJFQU0pKSkgeworICAgICAgICAgICAgbG9nbXNnKCJpbnN0cnVjdGVkIHRvIHN0cmVhbSIpOworICAgICAgICAgICAgcmVxLT5yY21kID0gUkNNRF9TVFJFQU07CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoMSA9PSBzc2NhbmYoY21kLCAicGlwZTogJWQiLCAmbnVtKSkgeworICAgICAgICAgICAgbG9nbXNnKCJpbnN0cnVjdGVkIHRvIGFsbG93IGEgcGlwZSBzaXplIG9mICVkIiwgbnVtKTsKKyAgICAgICAgICAgIGlmKG51bSA8IDApCisgICAgICAgICAgICAgIGxvZ21zZygibmVnYXRpdmUgcGlwZSBzaXplIGlnbm9yZWQiKTsKKyAgICAgICAgICAgIGVsc2UgaWYobnVtID4gMCkKKyAgICAgICAgICAgICAgcmVxLT5waXBlID0gbnVtLTE7IC8qIGRlY3JlYXNlIGJ5IG9uZSBzaW5jZSB3ZSBkb24ndCBjb3VudCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0IHJlcXVlc3QgaW4gdGhpcyBudW1iZXIgKi8KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZigxID09IHNzY2FuZihjbWQsICJza2lwOiAlZCIsICZudW0pKSB7CisgICAgICAgICAgICBsb2dtc2coImluc3RydWN0ZWQgdG8gc2tpcCB0aGlzIG51bWJlciBvZiBieXRlcyAlZCIsIG51bSk7CisgICAgICAgICAgICByZXEtPnNraXAgPSBudW07CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYoMSA9PSBzc2NhbmYoY21kLCAid3JpdGVkZWxheTogJWQiLCAmbnVtKSkgeworICAgICAgICAgICAgbG9nbXNnKCJpbnN0cnVjdGVkIHRvIGRlbGF5ICVkIHNlY3MgYmV0d2VlbiBwYWNrZXRzIiwgbnVtKTsKKyAgICAgICAgICAgIHJlcS0+d3JpdGVkZWxheSA9IG51bTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsb2dtc2coImZ1bm55IGluc3RydWN0aW9uIGZvdW5kOiAlcyIsIGNtZCk7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIHRyeSB0byBkZWFsIHdpdGggQ1JMRiBvciBqdXN0IExGICovCisgICAgICAgICAgY2hlY2sgPSBzdHJjaHIoY21kLCAnXHInKTsKKyAgICAgICAgICBpZighY2hlY2spCisgICAgICAgICAgICBjaGVjayA9IHN0cmNocihjbWQsICdcbicpOworCisgICAgICAgICAgaWYoY2hlY2spIHsKKyAgICAgICAgICAgIC8qIGdldCB0byB0aGUgbGV0dGVyIGZvbGxvd2luZyB0aGUgbmV3bGluZSAqLworICAgICAgICAgICAgd2hpbGUoKCpjaGVjayA9PSAnXHInKSB8fCAoKmNoZWNrID09ICdcbicpKQorICAgICAgICAgICAgICBjaGVjaysrOworCisgICAgICAgICAgICBpZighKmNoZWNrKQorICAgICAgICAgICAgICAvKiBpZiB3ZSByZWFjaGVkIGEgemVybywgZ2V0IG91dCAqLworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNtZCA9IGNoZWNrOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihvcmdjbWQpCisgICAgICAgICAgZnJlZShvcmdjbWQpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmKHNzY2FuZihyZXEtPnJlcWJ1ZiwgIkNPTk5FQ1QgJSIgTUFYRE9DTkFNRUxFTl9UWFQgInMgSFRUUC8lZC4lZCIsCisgICAgICAgICAgICAgICAgZG9jLCAmcHJvdF9tYWpvciwgJnByb3RfbWlub3IpID09IDMpIHsKKyAgICAgICAgY2hhciAqcG9ydHAgPSBOVUxMOworCisgICAgICAgIHNwcmludGYobG9nYnVmLCAiUmVjZWl2ZWQgYSBDT05ORUNUICVzIEhUVFAvJWQuJWQgcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgZG9jLCBwcm90X21ham9yLCBwcm90X21pbm9yKTsKKyAgICAgICAgbG9nbXNnKCIlcyIsIGxvZ2J1Zik7CisKKyAgICAgICAgaWYocmVxLT5wcm90X3ZlcnNpb24gPT0gMTApCisgICAgICAgICAgcmVxLT5vcGVuID0gRkFMU0U7IC8qIEhUVFAgMS4wIGNsb3NlcyBjb25uZWN0aW9uIGJ5IGRlZmF1bHQgKi8KKworICAgICAgICBpZihkb2NbMF0gPT0gJ1snKSB7CisgICAgICAgICAgY2hhciAqcCA9ICZkb2NbMV07CisgICAgICAgICAgd2hpbGUoKnAgJiYgKElTWERJR0lUKCpwKSB8fCAoKnAgPT0gJzonKSB8fCAoKnAgPT0gJy4nKSkpCisgICAgICAgICAgICBwKys7CisgICAgICAgICAgaWYoKnAgIT0gJ10nKQorICAgICAgICAgICAgbG9nbXNnKCJJbnZhbGlkIENPTk5FQ1QgSVB2NiBhZGRyZXNzIGZvcm1hdCIpOworICAgICAgICAgIGVsc2UgaWYgKCoocCsxKSAhPSAnOicpCisgICAgICAgICAgICBsb2dtc2coIkludmFsaWQgQ09OTkVDVCBJUHY2IHBvcnQgZm9ybWF0Iik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9ydHAgPSBwKzE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHBvcnRwID0gc3RyY2hyKGRvYywgJzonKTsKKworICAgICAgICBpZihwb3J0cCAmJiAoKihwb3J0cCsxKSAhPSAnXDAnKSAmJiBJU0RJR0lUKCoocG9ydHArMSkpKSB7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyB1bG51bSA9IHN0cnRvdWwocG9ydHArMSwgTlVMTCwgMTApOworICAgICAgICAgIGlmKCF1bG51bSB8fCAodWxudW0gPiA2NTUzNVVMKSkKKyAgICAgICAgICAgIGxvZ21zZygiSW52YWxpZCBDT05ORUNUIHBvcnQgcmVjZWl2ZWQiKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXEtPmNvbm5lY3RfcG9ydCA9IGN1cmx4X3VsdG91cyh1bG51bSk7CisgICAgICAgIH0KKworICAgICAgICBpZighc3RybmNtcChkb2MsICJiYWQiLCAzKSkKKyAgICAgICAgICAvKiBpZiB0aGUgaG9zdCBuYW1lIHN0YXJ0cyB3aXRoIGJhZCwgd2UgZmFrZSBhbiBlcnJvciBoZXJlICovCisgICAgICAgICAgcmVxLT50ZXN0bm8gPSBET0NOVU1CRVJfQkFEQ09OTkVDVDsKKyAgICAgICAgZWxzZSBpZighc3RybmNtcChkb2MsICJ0ZXN0IiwgNCkpCisgICAgICAgICAgLyogaWYgdGhlIGhvc3QgbmFtZSBzdGFydHMgd2l0aCB0ZXN0LCB0aGUgcG9ydCBudW1iZXIgdXNlZCBpbiB0aGUKKyAgICAgICAgICAgICBDT05ORUNUIGxpbmUgd2lsbCBiZSB1c2VkIGFzIHRlc3QgbnVtYmVyISAqLworICAgICAgICAgIHJlcS0+dGVzdG5vID0gcmVxLT5jb25uZWN0X3BvcnQ/cmVxLT5jb25uZWN0X3BvcnQ6RE9DTlVNQkVSX0NPTk5FQ1Q7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXEtPnRlc3RubyA9IHJlcS0+Y29ubmVjdF9wb3J0P0RPQ05VTUJFUl9DT05ORUNUOkRPQ05VTUJFUl9CQURDT05ORUNUOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGxvZ21zZygiRGlkIG5vdCBmaW5kIHRlc3QgbnVtYmVyIGluIFBBVEgiKTsKKyAgICAgICAgcmVxLT50ZXN0bm8gPSBET0NOVU1CRVJfNDA0OworICAgICAgfQorICAgIH0KKyAgfQorICBlbHNlIGlmKChyZXEtPm9mZnNldCA+PSAzKSAmJiAocmVxLT50ZXN0bm8gPT0gRE9DTlVNQkVSX05PVEhJTkcpKSB7CisgICAgbG9nbXNnKCIqKiBVbnVzdWFsIHJlcXVlc3QuIFN0YXJ0cyB3aXRoICUwMnggJTAyeCAlMDJ4IiwKKyAgICAgICAgICAgbGluZVswXSwgbGluZVsxXSwgbGluZVsyXSk7CisgIH0KKworICBpZighZW5kKSB7CisgICAgLyogd2UgZG9uJ3QgaGF2ZSBhIGNvbXBsZXRlIHJlcXVlc3QgeWV0ISAqLworICAgIGxvZ21zZygicmVxdWVzdCBub3QgY29tcGxldGUgeWV0Iik7CisgICAgcmV0dXJuIDA7IC8qIG5vdCBjb21wbGV0ZSB5ZXQgKi8KKyAgfQorICBsb2dtc2coIi0gcmVxdWVzdCBmb3VuZCB0byBiZSBjb21wbGV0ZSIpOworCisgIGlmKHVzZV9nb3BoZXIpIHsKKyAgICAvKiB3aGVuIHVzaW5nIGdvcGhlciB3ZSBjYW5ub3QgY2hlY2sgdGhlIHJlcXVlc3QgdW50aWwgdGhlIGVudGlyZQorICAgICAgIHRoaW5nIGhhcyBiZWVuIHJlY2VpdmVkICovCisgICAgY2hhciAqcHRyOworCisgICAgLyogZmluZCB0aGUgbGFzdCBzbGFzaCBpbiB0aGUgbGluZSAqLworICAgIHB0ciA9IHN0cnJjaHIobGluZSwgJy8nKTsKKworICAgIGlmKHB0cikgeworICAgICAgcHRyKys7IC8qIHNraXAgdGhlIHNsYXNoICovCisKKyAgICAgIC8qIHNraXAgYWxsIG5vbi1udW1lcmljYWxzIGZvbGxvd2luZyB0aGUgc2xhc2ggKi8KKyAgICAgIHdoaWxlKCpwdHIgJiYgIUlTRElHSVQoKnB0cikpCisgICAgICAgIHB0cisrOworCisgICAgICByZXEtPnRlc3RubyA9IHN0cnRvbChwdHIsICZwdHIsIDEwKTsKKworICAgICAgaWYocmVxLT50ZXN0bm8gPiAxMDAwMCkgeworICAgICAgICByZXEtPnBhcnRubyA9IHJlcS0+dGVzdG5vICUgMTAwMDA7CisgICAgICAgIHJlcS0+dGVzdG5vIC89IDEwMDAwOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXEtPnBhcnRubyA9IDA7CisKKyAgICAgIHNwcmludGYobG9nYnVmLCAiUmVxdWVzdGVkIEdPUEhFUiB0ZXN0IG51bWJlciAlbGQgcGFydCAlbGQiLAorICAgICAgICAgICAgICByZXEtPnRlc3RubywgcmVxLT5wYXJ0bm8pOworICAgICAgbG9nbXNnKCIlcyIsIGxvZ2J1Zik7CisgICAgfQorICB9CisKKyAgaWYocmVxLT5waXBlKQorICAgIC8qIHdlIGRvIGhhdmUgYSBmdWxsIHNldCwgYWR2YW5jZSB0aGUgY2hlY2tpbmRleCB0byBhZnRlciB0aGUgZW5kIG9mIHRoZQorICAgICAgIGhlYWRlcnMsIGZvciB0aGUgcGlwZWxpbmluZyBjYXNlIG1vc3RseSAqLworICAgIHJlcS0+Y2hlY2tpbmRleCArPSAoZW5kIC0gbGluZSkgKyBzdHJsZW4oZW5kX29mX2hlYWRlcnMpOworCisgIC8qICoqKiogUGVyc2lzdGVuY2UgKioqKgorICAgKgorICAgKiBJZiB0aGUgcmVxdWVzdCBpcyBhIEhUVFAvMS4wIG9uZSwgd2UgY2xvc2UgdGhlIGNvbm5lY3Rpb24gdW5jb25kaXRpb25hbGx5CisgICAqIHdoZW4gd2UncmUgZG9uZS4KKyAgICoKKyAgICogSWYgdGhlIHJlcXVlc3QgaXMgYSBIVFRQLzEuMSBvbmUsIHdlIE1VU1QgY2hlY2sgZm9yIGEgIkNvbm5lY3Rpb246IgorICAgKiBoZWFkZXIgdGhhdCBtaWdodCBzYXkgImNsb3NlIi4gSWYgaXQgZG9lcywgd2UgY2xvc2UgYSBjb25uZWN0aW9uIHdoZW4KKyAgICogdGhpcyByZXF1ZXN0IGlzIHByb2Nlc3NlZC4gT3RoZXJ3aXNlLCB3ZSBrZWVwIHRoZSBjb25uZWN0aW9uIGFsaXZlIGZvciBYCisgICAqIHNlY29uZHMuCisgICAqLworCisgIGRvIHsKKyAgICBpZihnb3RfZXhpdF9zaWduYWwpCisgICAgICByZXR1cm4gMTsgLyogZG9uZSAqLworCisgICAgaWYoKHJlcS0+Y2w9PTApICYmIGN1cmx4X3N0cm5lcXVhbCgiQ29udGVudC1MZW5ndGg6IiwgbGluZSwgMTUpKSB7CisgICAgICAvKiBJZiB3ZSBkb24ndCBpZ25vcmUgY29udGVudC1sZW5ndGgsIHdlIHJlYWQgaXQgYW5kIHdlIHJlYWQgdGhlIHdob2xlCisgICAgICAgICByZXF1ZXN0IGluY2x1ZGluZyB0aGUgYm9keSBiZWZvcmUgd2UgcmV0dXJuLiBJZiB3ZSd2ZSBiZWVuIHRvbGQgdG8KKyAgICAgICAgIGlnbm9yZSB0aGUgY29udGVudC1sZW5ndGgsIHdlIHdpbGwgcmV0dXJuIGFzIHNvb24gYXMgYWxsIGhlYWRlcnMKKyAgICAgICAgIGhhdmUgYmVlbiByZWNlaXZlZCAqLworICAgICAgY2hhciAqZW5kcHRyOworICAgICAgY2hhciAqcHRyID0gbGluZSArIDE1OworICAgICAgdW5zaWduZWQgbG9uZyBjbGVuID0gMDsKKyAgICAgIHdoaWxlKCpwdHIgJiYgSVNTUEFDRSgqcHRyKSkKKyAgICAgICAgcHRyKys7CisgICAgICBlbmRwdHIgPSBwdHI7CisgICAgICBTRVRfRVJSTk8oMCk7CisgICAgICBjbGVuID0gc3RydG91bChwdHIsICZlbmRwdHIsIDEwKTsKKyAgICAgIGlmKChwdHIgPT0gZW5kcHRyKSB8fCAhSVNTUEFDRSgqZW5kcHRyKSB8fCAoRVJBTkdFID09IEVSUk5PKSkgeworICAgICAgICAvKiB0aGlzIGFzc3VtZXMgdGhhdCBhIHplcm8gQ29udGVudC1MZW5ndGggaXMgdmFsaWQgKi8KKyAgICAgICAgbG9nbXNnKCJGb3VuZCBpbnZhbGlkIENvbnRlbnQtTGVuZ3RoOiAoJXMpIGluIHRoZSByZXF1ZXN0IiwgcHRyKTsKKyAgICAgICAgcmVxLT5vcGVuID0gRkFMU0U7IC8qIGNsb3NlcyBjb25uZWN0aW9uICovCisgICAgICAgIHJldHVybiAxOyAvKiBkb25lICovCisgICAgICB9CisgICAgICByZXEtPmNsID0gY2xlbiAtIHJlcS0+c2tpcDsKKworICAgICAgbG9nbXNnKCJGb3VuZCBDb250ZW50LUxlbmd0aDogJWx1IGluIHRoZSByZXF1ZXN0IiwgY2xlbik7CisgICAgICBpZihyZXEtPnNraXApCisgICAgICAgIGxvZ21zZygiLi4uIGJ1dCB3aWxsIGFib3J0IGFmdGVyICV6dSBieXRlcyIsIHJlcS0+Y2wpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGVsc2UgaWYoY3VybHhfc3RybmVxdWFsKCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIsIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIpKSkgeworICAgICAgLyogY2h1bmtlZCBkYXRhIGNvbWluZyBpbiAqLworICAgICAgY2h1bmtlZCA9IFRSVUU7CisgICAgfQorCisgICAgaWYoY2h1bmtlZCkgeworICAgICAgaWYoc3Ryc3RyKHJlcS0+cmVxYnVmLCAiXHJcbjBcclxuXHJcbiIpKQorICAgICAgICAvKiBlbmQgb2YgY2h1bmtzIHJlYWNoZWQgKi8KKyAgICAgICAgcmV0dXJuIDE7IC8qIGRvbmUgKi8KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7IC8qIG5vdCBkb25lICovCisgICAgfQorCisgICAgbGluZSA9IHN0cmNocihsaW5lLCAnXG4nKTsKKyAgICBpZihsaW5lKQorICAgICAgbGluZSsrOworCisgIH0gd2hpbGUobGluZSk7CisKKyAgaWYoIXJlcS0+YXV0aCAmJiBzdHJzdHIocmVxLT5yZXFidWYsICJBdXRob3JpemF0aW9uOiIpKSB7CisgICAgcmVxLT5hdXRoID0gVFJVRTsgLyogQXV0aG9yaXphdGlvbjogaGVhZGVyIHByZXNlbnQhICovCisgICAgaWYocmVxLT5hdXRoX3JlcSkKKyAgICAgIGxvZ21zZygiQXV0aG9yaXphdGlvbiBoZWFkZXIgZm91bmQsIGFzIHJlcXVpcmVkIik7CisgIH0KKworICBpZighcmVxLT5kaWdlc3QgJiYgc3Ryc3RyKHJlcS0+cmVxYnVmLCAiQXV0aG9yaXphdGlvbjogRGlnZXN0IikpIHsKKyAgICAvKiBJZiB0aGUgY2xpZW50IGlzIHBhc3NpbmcgdGhpcyBEaWdlc3QtaGVhZGVyLCB3ZSBzZXQgdGhlIHBhcnQgbnVtYmVyCisgICAgICAgdG8gMTAwMC4gTm90IG9ubHkgdG8gc3BpY2UgdXAgdGhlIGNvbXBsZXhpdHkgb2YgdGhpcywgYnV0IHRvIG1ha2UKKyAgICAgICBEaWdlc3Qgc3R1ZmYgdG8gd29yayBpbiB0aGUgdGVzdCBzdWl0ZS4gKi8KKyAgICByZXEtPnBhcnRubyArPSAxMDAwOworICAgIHJlcS0+ZGlnZXN0ID0gVFJVRTsgLyogaGVhZGVyIGZvdW5kICovCisgICAgbG9nbXNnKCJSZWNlaXZlZCBEaWdlc3QgcmVxdWVzdCwgc2VuZGluZyBiYWNrIGRhdGEgJWxkIiwgcmVxLT5wYXJ0bm8pOworICB9CisgIGVsc2UgaWYoIXJlcS0+bnRsbSAmJgorICAgICAgICAgIHN0cnN0cihyZXEtPnJlcWJ1ZiwgIkF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEIikpIHsKKyAgICAvKiBJZiB0aGUgY2xpZW50IGlzIHBhc3NpbmcgdGhpcyB0eXBlLTMgTlRMTSBoZWFkZXIgKi8KKyAgICByZXEtPnBhcnRubyArPSAxMDAyOworICAgIHJlcS0+bnRsbSA9IFRSVUU7IC8qIE5UTE0gZm91bmQgKi8KKyAgICBsb2dtc2coIlJlY2VpdmVkIE5UTE0gdHlwZS0zLCBzZW5kaW5nIGJhY2sgZGF0YSAlbGQiLCByZXEtPnBhcnRubyk7CisgICAgaWYocmVxLT5jbCkgeworICAgICAgbG9nbXNnKCIgIEV4cGVjdGluZyAlenUgUE9TVGVkIGJ5dGVzIiwgcmVxLT5jbCk7CisgICAgfQorICB9CisgIGVsc2UgaWYoIXJlcS0+bnRsbSAmJgorICAgICAgICAgIHN0cnN0cihyZXEtPnJlcWJ1ZiwgIkF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCIikpIHsKKyAgICAvKiBJZiB0aGUgY2xpZW50IGlzIHBhc3NpbmcgdGhpcyB0eXBlLTEgTlRMTSBoZWFkZXIgKi8KKyAgICByZXEtPnBhcnRubyArPSAxMDAxOworICAgIHJlcS0+bnRsbSA9IFRSVUU7IC8qIE5UTE0gZm91bmQgKi8KKyAgICBsb2dtc2coIlJlY2VpdmVkIE5UTE0gdHlwZS0xLCBzZW5kaW5nIGJhY2sgZGF0YSAlbGQiLCByZXEtPnBhcnRubyk7CisgIH0KKyAgZWxzZSBpZigocmVxLT5wYXJ0bm8gPj0gMTAwMCkgJiYKKyAgICAgICAgICBzdHJzdHIocmVxLT5yZXFidWYsICJBdXRob3JpemF0aW9uOiBCYXNpYyIpKSB7CisgICAgLyogSWYgdGhlIGNsaWVudCBpcyBwYXNzaW5nIHRoaXMgQmFzaWMtaGVhZGVyIGFuZCB0aGUgcGFydCBudW1iZXIgaXMKKyAgICAgICBhbHJlYWR5ID49MTAwMCwgd2UgYWRkIDEgdG8gdGhlIHBhcnQgbnVtYmVyLiAgVGhpcyBhbGxvd3Mgc2ltcGxlIEJhc2ljCisgICAgICAgYXV0aGVudGljYXRpb24gbmVnb3RpYXRpb24gdG8gd29yayBpbiB0aGUgdGVzdCBzdWl0ZS4gKi8KKyAgICByZXEtPnBhcnRubyArPSAxOworICAgIGxvZ21zZygiUmVjZWl2ZWQgQmFzaWMgcmVxdWVzdCwgc2VuZGluZyBiYWNrIGRhdGEgJWxkIiwgcmVxLT5wYXJ0bm8pOworICB9CisgIGlmKHN0cnN0cihyZXEtPnJlcWJ1ZiwgIkNvbm5lY3Rpb246IGNsb3NlIikpCisgICAgcmVxLT5vcGVuID0gRkFMU0U7IC8qIGNsb3NlIGNvbm5lY3Rpb24gYWZ0ZXIgdGhpcyByZXF1ZXN0ICovCisKKyAgaWYoIXJlcS0+cGlwZSAmJgorICAgICByZXEtPm9wZW4gJiYKKyAgICAgcmVxLT5wcm90X3ZlcnNpb24gPj0gMTEgJiYKKyAgICAgZW5kICYmCisgICAgIHJlcS0+cmVxYnVmICsgcmVxLT5vZmZzZXQgPiBlbmQgKyBzdHJsZW4oZW5kX29mX2hlYWRlcnMpICYmCisgICAgICFyZXEtPmNsICYmCisgICAgICghc3RybmNtcChyZXEtPnJlcWJ1ZiwgIkdFVCIsIHN0cmxlbigiR0VUIikpIHx8CisgICAgICAhc3RybmNtcChyZXEtPnJlcWJ1ZiwgIkhFQUQiLCBzdHJsZW4oIkhFQUQiKSkpKSB7CisgICAgLyogSWYgd2UgaGF2ZSBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiwgSFRUUCB2ZXJzaW9uID49IDEuMQorICAgICAgIGFuZCBHRVQvSEVBRCByZXF1ZXN0LCBlbmFibGUgcGlwZWxpbmluZy4gKi8KKyAgICByZXEtPmNoZWNraW5kZXggPSAoZW5kIC0gcmVxLT5yZXFidWYpICsgc3RybGVuKGVuZF9vZl9oZWFkZXJzKTsKKyAgICByZXEtPnBpcGVsaW5pbmcgPSBUUlVFOworICB9CisKKyAgd2hpbGUocmVxLT5waXBlKSB7CisgICAgaWYoZ290X2V4aXRfc2lnbmFsKQorICAgICAgcmV0dXJuIDE7IC8qIGRvbmUgKi8KKyAgICAvKiBzY2FuIGZvciBtb3JlIGhlYWRlciBlbmRzIHdpdGhpbiB0aGlzIGNodW5rICovCisgICAgbGluZSA9ICZyZXEtPnJlcWJ1ZltyZXEtPmNoZWNraW5kZXhdOworICAgIGVuZCA9IHN0cnN0cihsaW5lLCBlbmRfb2ZfaGVhZGVycyk7CisgICAgaWYoIWVuZCkKKyAgICAgIGJyZWFrOworICAgIHJlcS0+Y2hlY2tpbmRleCArPSAoZW5kIC0gbGluZSkgKyBzdHJsZW4oZW5kX29mX2hlYWRlcnMpOworICAgIHJlcS0+cGlwZS0tOworICB9CisKKyAgLyogSWYgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQgYW5kIG5vIGF1dGggd2FzIHByb3ZpZGVkLCBlbmQgbm93LiBUaGlzCisgICAgIG1ha2VzIHRoZSBzZXJ2ZXIgTk9UIHdhaXQgZm9yIFBVVC9QT1NUIGRhdGEgYW5kIHlvdSBjYW4gdGhlbiBtYWtlIHRoZQorICAgICB0ZXN0IGNhc2Ugc2VuZCBhIHJlamVjdGlvbiBiZWZvcmUgYW55IHN1Y2ggZGF0YSBoYXMgYmVlbiBzZW50LiBUZXN0IGNhc2UKKyAgICAgMTU0IHVzZXMgdGhpcy4qLworICBpZihyZXEtPmF1dGhfcmVxICYmICFyZXEtPmF1dGgpIHsKKyAgICBsb2dtc2coIlJldHVybiBlYXJseSBkdWUgdG8gYXV0aCByZXF1ZXN0ZWQgYnkgbm9uZSBwcm92aWRlZCIpOworICAgIHJldHVybiAxOyAvKiBkb25lICovCisgIH0KKworICBpZihyZXEtPmNsID4gMCkgeworICAgIGlmKHJlcS0+Y2wgPD0gcmVxLT5vZmZzZXQgLSAoZW5kIC0gcmVxLT5yZXFidWYpIC0gc3RybGVuKGVuZF9vZl9oZWFkZXJzKSkKKyAgICAgIHJldHVybiAxOyAvKiBkb25lICovCisgICAgZWxzZQorICAgICAgcmV0dXJuIDA7IC8qIG5vdCBjb21wbGV0ZSB5ZXQgKi8KKyAgfQorCisgIHJldHVybiAxOyAvKiBkb25lICovCit9CisKKy8qIHN0b3JlIHRoZSBlbnRpcmUgcmVxdWVzdCBpbiBhIGZpbGUgKi8KK3N0YXRpYyB2b2lkIHN0b3JlcmVxdWVzdChjaGFyICpyZXFidWYsIHNpemVfdCB0b3RhbHNpemUpCit7CisgIGludCByZXM7CisgIGludCBlcnJvciA9IDA7CisgIHNpemVfdCB3cml0dGVuOworICBzaXplX3Qgd3JpdGVsZWZ0OworICBGSUxFICpkdW1wOworICBjb25zdCBjaGFyICpkdW1wZmlsZT1pc19wcm94eT9SRVFVRVNUX1BST1hZX0RVTVA6UkVRVUVTVF9EVU1QOworCisgIGlmIChyZXFidWYgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIGlmICh0b3RhbHNpemUgPT0gMCkKKyAgICByZXR1cm47CisKKyAgZG8geworICAgIGR1bXAgPSBmb3BlbihkdW1wZmlsZSwgImFiIik7CisgIH0gd2hpbGUgKChkdW1wID09IE5VTEwpICYmICgoZXJyb3IgPSBFUlJOTykgPT0gRUlOVFIpKTsKKyAgaWYgKGR1bXAgPT0gTlVMTCkgeworICAgIGxvZ21zZygiRXJyb3Igb3BlbmluZyBmaWxlICVzIGVycm9yOiAlZCAlcyIsCisgICAgICAgICAgIGR1bXBmaWxlLCBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICBsb2dtc2coIkZhaWxlZCB0byB3cml0ZSByZXF1ZXN0IGlucHV0ICIpOworICAgIHJldHVybjsKKyAgfQorCisgIHdyaXRlbGVmdCA9IHRvdGFsc2l6ZTsKKyAgZG8geworICAgIHdyaXR0ZW4gPSBmd3JpdGUoJnJlcWJ1Zlt0b3RhbHNpemUtd3JpdGVsZWZ0XSwKKyAgICAgICAgICAgICAgICAgICAgIDEsIHdyaXRlbGVmdCwgZHVtcCk7CisgICAgaWYoZ290X2V4aXRfc2lnbmFsKQorICAgICAgZ290byBzdG9yZXJlcXVlc3RfY2xlYW51cDsKKyAgICBpZih3cml0dGVuID4gMCkKKyAgICAgIHdyaXRlbGVmdCAtPSB3cml0dGVuOworICB9IHdoaWxlICgod3JpdGVsZWZ0ID4gMCkgJiYgKChlcnJvciA9IEVSUk5PKSA9PSBFSU5UUikpOworCisgIGlmKHdyaXRlbGVmdCA9PSAwKQorICAgIGxvZ21zZygiV3JvdGUgcmVxdWVzdCAoJXp1IGJ5dGVzKSBpbnB1dCB0byAlcyIsIHRvdGFsc2l6ZSwgZHVtcGZpbGUpOworICBlbHNlIGlmKHdyaXRlbGVmdCA+IDApIHsKKyAgICBsb2dtc2coIkVycm9yIHdyaXRpbmcgZmlsZSAlcyBlcnJvcjogJWQgJXMiLAorICAgICAgICAgICBkdW1wZmlsZSwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgbG9nbXNnKCJXcm90ZSBvbmx5ICglenUgYnl0ZXMpIG9mICglenUgYnl0ZXMpIHJlcXVlc3QgaW5wdXQgdG8gJXMiLAorICAgICAgICAgICB0b3RhbHNpemUtd3JpdGVsZWZ0LCB0b3RhbHNpemUsIGR1bXBmaWxlKTsKKyAgfQorCitzdG9yZXJlcXVlc3RfY2xlYW51cDoKKworICBkbyB7CisgICAgcmVzID0gZmNsb3NlKGR1bXApOworICB9IHdoaWxlKHJlcyAmJiAoKGVycm9yID0gRVJSTk8pID09IEVJTlRSKSk7CisgIGlmKHJlcykKKyAgICBsb2dtc2coIkVycm9yIGNsb3NpbmcgZmlsZSAlcyBlcnJvcjogJWQgJXMiLAorICAgICAgICAgICBkdW1wZmlsZSwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7Cit9CisKKy8qIHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUgKi8KK3N0YXRpYyBpbnQgZ2V0X3JlcXVlc3QoY3VybF9zb2NrZXRfdCBzb2NrLCBzdHJ1Y3QgaHR0cHJlcXVlc3QgKnJlcSkKK3sKKyAgaW50IGVycm9yOworICBpbnQgZmFpbCA9IDA7CisgIGludCBkb25lX3Byb2Nlc3NpbmcgPSAwOworICBjaGFyICpyZXFidWYgPSByZXEtPnJlcWJ1ZjsKKyAgc3NpemVfdCBnb3QgPSAwOworCisgIGNoYXIgKnBpcGVyZXEgPSBOVUxMOworICBzaXplX3QgcGlwZXJlcV9sZW5ndGggPSAwOworCisgIGlmKHJlcS0+cGlwZWxpbmluZykgeworICAgIHBpcGVyZXEgPSByZXFidWYgKyByZXEtPmNoZWNraW5kZXg7CisgICAgcGlwZXJlcV9sZW5ndGggPSByZXEtPm9mZnNldCAtIHJlcS0+Y2hlY2tpbmRleDsKKyAgfQorCisgIC8qKiogSW5pdCB0aGUgaHR0cHJlcXVlc3Qgc3RydWN0dXJlIHByb3Blcmx5IGZvciB0aGUgdXBjb21pbmcgcmVxdWVzdCAqKiovCisKKyAgcmVxLT5jaGVja2luZGV4ID0gMDsKKyAgcmVxLT5vZmZzZXQgPSAwOworICByZXEtPnRlc3RubyA9IERPQ05VTUJFUl9OT1RISU5HOworICByZXEtPnBhcnRubyA9IDA7CisgIHJlcS0+b3BlbiA9IFRSVUU7CisgIHJlcS0+YXV0aF9yZXEgPSBGQUxTRTsKKyAgcmVxLT5hdXRoID0gRkFMU0U7CisgIHJlcS0+Y2wgPSAwOworICByZXEtPmRpZ2VzdCA9IEZBTFNFOworICByZXEtPm50bG0gPSBGQUxTRTsKKyAgcmVxLT5waXBlID0gMDsKKyAgcmVxLT5za2lwID0gMDsKKyAgcmVxLT53cml0ZWRlbGF5ID0gMDsKKyAgcmVxLT5yY21kID0gUkNNRF9OT1JNQUxSRVE7CisgIHJlcS0+cHJvdF92ZXJzaW9uID0gMDsKKyAgcmVxLT5waXBlbGluaW5nID0gRkFMU0U7CisgIHJlcS0+Y2FsbGNvdW50ID0gMDsKKyAgcmVxLT5jb25uZWN0X3BvcnQgPSAwOworCisgIC8qKiogZW5kIG9mIGh0dHByZXF1ZXN0IGluaXQgKioqLworCisgIHdoaWxlKCFkb25lX3Byb2Nlc3NpbmcgJiYgKHJlcS0+b2Zmc2V0IDwgUkVRQlVGU0laLTEpKSB7CisgICAgaWYocGlwZXJlcV9sZW5ndGggJiYgcGlwZXJlcSkgeworICAgICAgbWVtbW92ZShyZXFidWYsIHBpcGVyZXEsIHBpcGVyZXFfbGVuZ3RoKTsKKyAgICAgIGdvdCA9IGN1cmx4X3V6dG9zeihwaXBlcmVxX2xlbmd0aCk7CisgICAgICBwaXBlcmVxX2xlbmd0aCA9IDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYocmVxLT5za2lwKQorICAgICAgICAvKiB3ZSBhcmUgaW5zdHJ1Y3RlZCB0byBub3QgcmVhZCB0aGUgZW50aXJlIHRoaW5nLCBzbyB3ZSBtYWtlIHN1cmUgdG8KKyAgICAgICAgICAgb25seSByZWFkIHdoYXQgd2UncmUgc3VwcG9zZWQgdG8gYW5kIE5PVCByZWFkIHRoZSBlbmlyZSB0aGluZyB0aGUKKyAgICAgICAgICAgY2xpZW50IHdhbnRzIHRvIHNlbmQhICovCisgICAgICAgIGdvdCA9IHNyZWFkKHNvY2ssIHJlcWJ1ZiArIHJlcS0+b2Zmc2V0LCByZXEtPmNsKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZ290ID0gc3JlYWQoc29jaywgcmVxYnVmICsgcmVxLT5vZmZzZXQsIFJFUUJVRlNJWi0xIC0gcmVxLT5vZmZzZXQpOworICAgIH0KKyAgICBpZihnb3RfZXhpdF9zaWduYWwpCisgICAgICByZXR1cm4gMTsKKyAgICBpZihnb3QgPT0gMCkgeworICAgICAgbG9nbXNnKCJDb25uZWN0aW9uIGNsb3NlZCBieSBjbGllbnQiKTsKKyAgICAgIGZhaWwgPSAxOworICAgIH0KKyAgICBlbHNlIGlmKGdvdCA8IDApIHsKKyAgICAgIGVycm9yID0gU09DS0VSUk5POworICAgICAgbG9nbXNnKCJyZWN2KCkgcmV0dXJuZWQgZXJyb3I6ICglZCkgJXMiLCBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgIGZhaWwgPSAxOworICAgIH0KKyAgICBpZihmYWlsKSB7CisgICAgICAvKiBkdW1wIHRoZSByZXF1ZXN0IHJlY2VpdmVkIHNvIGZhciB0byB0aGUgZXh0ZXJuYWwgZmlsZSAqLworICAgICAgcmVxYnVmW3JlcS0+b2Zmc2V0XSA9ICdcMCc7CisgICAgICBzdG9yZXJlcXVlc3QocmVxYnVmLCByZXEtPm9mZnNldCk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBsb2dtc2coIlJlYWQgJXpkIGJ5dGVzIiwgZ290KTsKKworICAgIHJlcS0+b2Zmc2V0ICs9IChzaXplX3QpZ290OworICAgIHJlcWJ1ZltyZXEtPm9mZnNldF0gPSAnXDAnOworCisgICAgZG9uZV9wcm9jZXNzaW5nID0gUHJvY2Vzc1JlcXVlc3QocmVxKTsKKyAgICBpZihnb3RfZXhpdF9zaWduYWwpCisgICAgICByZXR1cm4gMTsKKyAgICBpZihkb25lX3Byb2Nlc3NpbmcgJiYgcmVxLT5waXBlKSB7CisgICAgICBsb2dtc2coIldhaXRpbmcgZm9yIGFub3RoZXIgcGlwZWQgcmVxdWVzdCIpOworICAgICAgZG9uZV9wcm9jZXNzaW5nID0gMDsKKyAgICAgIHJlcS0+cGlwZS0tOworICAgIH0KKyAgfQorCisgIGlmKChyZXEtPm9mZnNldCA9PSBSRVFCVUZTSVotMSkgJiYgKGdvdCA+IDApKSB7CisgICAgbG9nbXNnKCJSZXF1ZXN0IHdvdWxkIG92ZXJmbG93IGJ1ZmZlciwgY2xvc2luZyBjb25uZWN0aW9uIik7CisgICAgLyogZHVtcCByZXF1ZXN0IHJlY2VpdmVkIHNvIGZhciB0byBleHRlcm5hbCBmaWxlIGFueXdheSAqLworICAgIHJlcWJ1ZltSRVFCVUZTSVotMV0gPSAnXDAnOworICAgIGZhaWwgPSAxOworICB9CisgIGVsc2UgaWYocmVxLT5vZmZzZXQgPiBSRVFCVUZTSVotMSkgeworICAgIGxvZ21zZygiUmVxdWVzdCBidWZmZXIgb3ZlcmZsb3csIGNsb3NpbmcgY29ubmVjdGlvbiIpOworICAgIC8qIGR1bXAgcmVxdWVzdCByZWNlaXZlZCBzbyBmYXIgdG8gZXh0ZXJuYWwgZmlsZSBhbnl3YXkgKi8KKyAgICByZXFidWZbUkVRQlVGU0laLTFdID0gJ1wwJzsKKyAgICBmYWlsID0gMTsKKyAgfQorICBlbHNlCisgICAgcmVxYnVmW3JlcS0+b2Zmc2V0XSA9ICdcMCc7CisKKyAgLyogZHVtcCB0aGUgcmVxdWVzdCB0byBhbiBleHRlcm5hbCBmaWxlICovCisgIHN0b3JlcmVxdWVzdChyZXFidWYsIHJlcS0+cGlwZWxpbmluZyA/IHJlcS0+Y2hlY2tpbmRleCA6IHJlcS0+b2Zmc2V0KTsKKyAgaWYoZ290X2V4aXRfc2lnbmFsKQorICAgIHJldHVybiAxOworCisgIHJldHVybiBmYWlsOyAvKiByZXR1cm4gMCBvbiBzdWNjZXNzICovCit9CisKKy8qIHJldHVybnMgLTEgb24gZmFpbHVyZSAqLworc3RhdGljIGludCBzZW5kX2RvYyhjdXJsX3NvY2tldF90IHNvY2ssIHN0cnVjdCBodHRwcmVxdWVzdCAqcmVxKQoreworICBzc2l6ZV90IHdyaXR0ZW47CisgIHNpemVfdCBjb3VudDsKKyAgY29uc3QgY2hhciAqYnVmZmVyOworICBjaGFyICpwdHI9TlVMTDsKKyAgRklMRSAqc3RyZWFtOworICBjaGFyICpjbWQ9TlVMTDsKKyAgc2l6ZV90IGNtZHNpemU9MDsKKyAgRklMRSAqZHVtcDsKKyAgYm9vbCBwZXJzaXN0YW50ID0gVFJVRTsKKyAgYm9vbCBzZW5kZmFpbHVyZSA9IEZBTFNFOworICBzaXplX3QgcmVzcG9uc2VzaXplOworICBpbnQgZXJyb3IgPSAwOworICBpbnQgcmVzOworICBjb25zdCBjaGFyICpyZXNwb25zZWR1bXAgPSBpc19wcm94eT9SRVNQT05TRV9QUk9YWV9EVU1QOlJFU1BPTlNFX0RVTVA7CisgIHN0YXRpYyBjaGFyIHdlYXJlWzI1Nl07CisKKyAgY2hhciBwYXJ0YnVmWzgwXT0iZGF0YSI7CisKKyAgbG9nbXNnKCJTZW5kIHJlc3BvbnNlIHRlc3QlbGQgc2VjdGlvbiA8ZGF0YSVsZD4iLCByZXEtPnRlc3RubywgcmVxLT5wYXJ0bm8pOworCisgIHN3aXRjaChyZXEtPnJjbWQpIHsKKyAgZGVmYXVsdDoKKyAgY2FzZSBSQ01EX05PUk1BTFJFUToKKyAgICBicmVhazsgLyogY29udGludWUgd2l0aCBidXNpbmVzcyBhcyB1c3VhbCAqLworICBjYXNlIFJDTURfU1RSRUFNOgorI2RlZmluZSBTVFJFQU1USElTICJhIHN0cmluZyB0byBzdHJlYW0gMDEyMzQ1Njc4OTBcbiIKKyAgICBjb3VudCA9IHN0cmxlbihTVFJFQU1USElTKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICB3cml0dGVuID0gc3dyaXRlKHNvY2ssIFNUUkVBTVRISVMsIGNvdW50KTsKKyAgICAgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgaWYod3JpdHRlbiAhPSAoc3NpemVfdCljb3VudCkgeworICAgICAgICBsb2dtc2coIlN0b3BwZWQgc3RyZWFtaW5nIik7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7CisgIGNhc2UgUkNNRF9JRExFOgorICAgIC8qIERvIG5vdGhpbmcuIFNpdCBpZGxlLiBQcmV0ZW5kIGl0IHJhaW5zLiAqLworICAgIHJldHVybiAwOworICB9CisKKyAgcmVxLT5vcGVuID0gRkFMU0U7CisKKyAgaWYocmVxLT50ZXN0bm8gPCAwKSB7CisgICAgc2l6ZV90IG1zZ2xlbjsKKyAgICBjaGFyIG1zZ2J1Zls2NF07CisKKyAgICBzd2l0Y2gocmVxLT50ZXN0bm8pIHsKKyAgICBjYXNlIERPQ05VTUJFUl9RVUlUOgorICAgICAgbG9nbXNnKCJSZXBseWluZyB0byBRVUlUIik7CisgICAgICBidWZmZXIgPSBkb2NxdWl0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBET0NOVU1CRVJfV0VSVUxFWjoKKyAgICAgIC8qIHdlIGdvdCBhICJmcmllbmRzPyIgcXVlc3Rpb24sIHJlcGx5IGJhY2sgdGhhdCB3ZSBzdXJlIGFyZSAqLworICAgICAgbG9nbXNnKCJJZGVudGlmeWluZyBvdXJzZWx2ZXMgYXMgZnJpZW5kcyIpOworICAgICAgc3ByaW50Zihtc2didWYsICJXRSBST09MWjogJWxkXHJcbiIsIChsb25nKWdldHBpZCgpKTsKKyAgICAgIG1zZ2xlbiA9IHN0cmxlbihtc2didWYpOworICAgICAgaWYodXNlX2dvcGhlcikKKyAgICAgICAgc3ByaW50Zih3ZWFyZSwgIiVzIiwgbXNnYnVmKTsKKyAgICAgIGVsc2UKKyAgICAgICAgc3ByaW50Zih3ZWFyZSwgIkhUVFAvMS4xIDIwMCBPS1xyXG5Db250ZW50LUxlbmd0aDogJXp1XHJcblxyXG4lcyIsCisgICAgICAgICAgICAgICAgbXNnbGVuLCBtc2didWYpOworICAgICAgYnVmZmVyID0gd2VhcmU7CisgICAgICBicmVhazsKKyAgICBjYXNlIERPQ05VTUJFUl9JTlRFUk5BTDoKKyAgICAgIGxvZ21zZygiQmFpbGluZyBvdXQgZHVlIHRvIGludGVybmFsIGVycm9yIik7CisgICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBET0NOVU1CRVJfQ09OTkVDVDoKKyAgICAgIGxvZ21zZygiUmVwbHlpbmcgdG8gQ09OTkVDVCIpOworICAgICAgYnVmZmVyID0gZG9jY29ubmVjdDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRE9DTlVNQkVSX0JBRENPTk5FQ1Q6CisgICAgICBsb2dtc2coIlJlcGx5aW5nIHRvIGEgYmFkIENPTk5FQ1QiKTsKKyAgICAgIGJ1ZmZlciA9IGRvY2JhZGNvbm5lY3Q7CisgICAgICBicmVhazsKKyAgICBjYXNlIERPQ05VTUJFUl80MDQ6CisgICAgZGVmYXVsdDoKKyAgICAgIGxvZ21zZygiUmVwbHlpbmcgdG8gd2l0aCBhIDQwNCIpOworICAgICAgYnVmZmVyID0gZG9jNDA0OworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY291bnQgPSBzdHJsZW4oYnVmZmVyKTsKKyAgfQorICBlbHNlIHsKKyAgICBjaGFyICpmaWxlbmFtZSA9IHRlc3QyZmlsZShyZXEtPnRlc3Rubyk7CisKKyAgICBpZigwICE9IHJlcS0+cGFydG5vKQorICAgICAgc3ByaW50ZihwYXJ0YnVmLCAiZGF0YSVsZCIsIHJlcS0+cGFydG5vKTsKKworICAgIHN0cmVhbT1mb3BlbihmaWxlbmFtZSwgInJiIik7CisgICAgaWYoIXN0cmVhbSkgeworICAgICAgZXJyb3IgPSBFUlJOTzsKKyAgICAgIGxvZ21zZygiZm9wZW4oKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQgJXMiLCBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgIGxvZ21zZygiRXJyb3Igb3BlbmluZyBmaWxlOiAlcyIsIGZpbGVuYW1lKTsKKyAgICAgIGxvZ21zZygiQ291bGRuJ3Qgb3BlbiB0ZXN0IGZpbGUiKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGVycm9yID0gZ2V0cGFydCgmcHRyLCAmY291bnQsICJyZXBseSIsIHBhcnRidWYsIHN0cmVhbSk7CisgICAgICBmY2xvc2Uoc3RyZWFtKTsKKyAgICAgIGlmKGVycm9yKSB7CisgICAgICAgIGxvZ21zZygiZ2V0cGFydCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZCIsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBidWZmZXIgPSBwdHI7CisgICAgfQorCisgICAgaWYoZ290X2V4aXRfc2lnbmFsKSB7CisgICAgICBpZihwdHIpCisgICAgICAgIGZyZWUocHRyKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiByZS1vcGVuIHRoZSBzYW1lIGZpbGUgYWdhaW4gKi8KKyAgICBzdHJlYW09Zm9wZW4oZmlsZW5hbWUsICJyYiIpOworICAgIGlmKCFzdHJlYW0pIHsKKyAgICAgIGVycm9yID0gRVJSTk87CisgICAgICBsb2dtc2coImZvcGVuKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkICVzIiwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgICBsb2dtc2coIkVycm9yIG9wZW5pbmcgZmlsZTogJXMiLCBmaWxlbmFtZSk7CisgICAgICBsb2dtc2coIkNvdWxkbid0IG9wZW4gdGVzdCBmaWxlIik7CisgICAgICBpZihwdHIpCisgICAgICAgIGZyZWUocHRyKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIGdldCB0aGUgY3VzdG9tIHNlcnZlciBjb250cm9sICJjb21tYW5kcyIgKi8KKyAgICAgIGVycm9yID0gZ2V0cGFydCgmY21kLCAmY21kc2l6ZSwgInJlcGx5IiwgInBvc3RjbWQiLCBzdHJlYW0pOworICAgICAgZmNsb3NlKHN0cmVhbSk7CisgICAgICBpZihlcnJvcikgeworICAgICAgICBsb2dtc2coImdldHBhcnQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWQiLCBlcnJvcik7CisgICAgICAgIGlmKHB0cikKKyAgICAgICAgICBmcmVlKHB0cik7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmKGdvdF9leGl0X3NpZ25hbCkgeworICAgIGlmKHB0cikKKyAgICAgIGZyZWUocHRyKTsKKyAgICBpZihjbWQpCisgICAgICBmcmVlKGNtZCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogSWYgdGhlIHdvcmQgJ3N3c2Nsb3NlJyBpcyBwcmVzZW50IGFueXdoZXJlIGluIHRoZSByZXBseSBjaHVuaywgdGhlCisgICAgIGNvbm5lY3Rpb24gd2lsbCBiZSBjbG9zZWQgYWZ0ZXIgdGhlIGRhdGEgaGFzIGJlZW4gc2VudCB0byB0aGUgcmVxdWVzdGluZworICAgICBjbGllbnQuLi4gKi8KKyAgaWYoc3Ryc3RyKGJ1ZmZlciwgInN3c2Nsb3NlIikgfHwgIWNvdW50KSB7CisgICAgcGVyc2lzdGFudCA9IEZBTFNFOworICAgIGxvZ21zZygiY29ubmVjdGlvbiBjbG9zZSBpbnN0cnVjdGlvbiBcInN3c2Nsb3NlXCIgZm91bmQgaW4gcmVzcG9uc2UiKTsKKyAgfQorICBpZihzdHJzdHIoYnVmZmVyLCAic3dzYm91bmNlIikpIHsKKyAgICBwcmV2Ym91bmNlID0gVFJVRTsKKyAgICBsb2dtc2coImVuYWJsZSBcInN3c2JvdW5jZVwiIGluIHRoZSBuZXh0IHJlcXVlc3QiKTsKKyAgfQorICBlbHNlCisgICAgcHJldmJvdW5jZSA9IEZBTFNFOworCisgIGR1bXAgPSBmb3BlbihyZXNwb25zZWR1bXAsICJhYiIpOworICBpZighZHVtcCkgeworICAgIGVycm9yID0gRVJSTk87CisgICAgbG9nbXNnKCJmb3BlbigpIGZhaWxlZCB3aXRoIGVycm9yOiAlZCAlcyIsIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgIGxvZ21zZygiRXJyb3Igb3BlbmluZyBmaWxlOiAlcyIsIHJlc3BvbnNlZHVtcCk7CisgICAgaWYocHRyKQorICAgICAgZnJlZShwdHIpOworICAgIGlmKGNtZCkKKyAgICAgIGZyZWUoY21kKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXNwb25zZXNpemUgPSBjb3VudDsKKyAgZG8geworICAgIC8qIE9rLCB3ZSBzZW5kIG5vIG1vcmUgdGhhbiAyMDAgYnl0ZXMgYXQgYSB0aW1lLCBqdXN0IHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgbGFyZ2VyIGNodW5rcyBhcmUgc3BsaXQgdXAgc28gdGhhdCB0aGUgY2xpZW50IHdpbGwgbmVlZCB0byBkbyBtdWx0aXBsZQorICAgICAgIHJlY3YoKSBjYWxscyB0byBnZXQgaXQgYW5kIHRodXMgd2UgZXhlcmNpc2UgdGhhdCBjb2RlIGJldHRlciAqLworICAgIHNpemVfdCBudW0gPSBjb3VudDsKKyAgICBpZihudW0gPiAyMDApCisgICAgICBudW0gPSAyMDA7CisgICAgd3JpdHRlbiA9IHN3cml0ZShzb2NrLCBidWZmZXIsIG51bSk7CisgICAgaWYgKHdyaXR0ZW4gPCAwKSB7CisgICAgICBzZW5kZmFpbHVyZSA9IFRSVUU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBsb2dtc2coIlNlbnQgb2ZmICV6ZCBieXRlcyIsIHdyaXR0ZW4pOworICAgIH0KKyAgICAvKiB3cml0ZSB0byBmaWxlIGFzIHdlbGwgKi8KKyAgICBmd3JpdGUoYnVmZmVyLCAxLCAoc2l6ZV90KXdyaXR0ZW4sIGR1bXApOworCisgICAgY291bnQgLT0gd3JpdHRlbjsKKyAgICBidWZmZXIgKz0gd3JpdHRlbjsKKworICAgIGlmKHJlcS0+d3JpdGVkZWxheSkgeworICAgICAgaW50IHF1YXJ0ZXJzID0gcmVxLT53cml0ZWRlbGF5ICogNDsKKyAgICAgIGxvZ21zZygiUGF1c2luZyAlZCBzZWNvbmRzIiwgcmVxLT53cml0ZWRlbGF5KTsKKyAgICAgIHdoaWxlKChxdWFydGVycyA+IDApICYmICFnb3RfZXhpdF9zaWduYWwpIHsKKyAgICAgICAgcXVhcnRlcnMtLTsKKyAgICAgICAgd2FpdF9tcygyNTApOworICAgICAgfQorICAgIH0KKyAgfSB3aGlsZSgoY291bnQgPiAwKSAmJiAhZ290X2V4aXRfc2lnbmFsKTsKKworICBkbyB7CisgICAgcmVzID0gZmNsb3NlKGR1bXApOworICB9IHdoaWxlKHJlcyAmJiAoKGVycm9yID0gRVJSTk8pID09IEVJTlRSKSk7CisgIGlmKHJlcykKKyAgICBsb2dtc2coIkVycm9yIGNsb3NpbmcgZmlsZSAlcyBlcnJvcjogJWQgJXMiLAorICAgICAgICAgICByZXNwb25zZWR1bXAsIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworCisgIGlmKGdvdF9leGl0X3NpZ25hbCkgeworICAgIGlmKHB0cikKKyAgICAgIGZyZWUocHRyKTsKKyAgICBpZihjbWQpCisgICAgICBmcmVlKGNtZCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaWYoc2VuZGZhaWx1cmUpIHsKKyAgICBsb2dtc2coIlNlbmRpbmcgcmVzcG9uc2UgZmFpbGVkLiBPbmx5ICglenUgYnl0ZXMpIG9mICglenUgYnl0ZXMpIHdlcmUgc2VudCIsCisgICAgICAgICAgIHJlc3BvbnNlc2l6ZS1jb3VudCwgcmVzcG9uc2VzaXplKTsKKyAgICBpZihwdHIpCisgICAgICBmcmVlKHB0cik7CisgICAgaWYoY21kKQorICAgICAgZnJlZShjbWQpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGxvZ21zZygiUmVzcG9uc2Ugc2VudCAoJXp1IGJ5dGVzKSBhbmQgd3JpdHRlbiB0byAlcyIsCisgICAgICAgICByZXNwb25zZXNpemUsIHJlc3BvbnNlZHVtcCk7CisKKyAgaWYocHRyKQorICAgIGZyZWUocHRyKTsKKworICBpZihjbWRzaXplID4gMCApIHsKKyAgICBjaGFyIGNvbW1hbmRbMzJdOworICAgIGludCBxdWFydGVyczsKKyAgICBpbnQgbnVtOworICAgIHB0cj1jbWQ7CisgICAgZG8geworICAgICAgaWYoMiA9PSBzc2NhbmYocHRyLCAiJTMxcyAlZCIsIGNvbW1hbmQsICZudW0pKSB7CisgICAgICAgIGlmKCFzdHJjbXAoIndhaXQiLCBjb21tYW5kKSkgeworICAgICAgICAgIGxvZ21zZygiVG9sZCB0byBzbGVlcCBmb3IgJWQgc2Vjb25kcyIsIG51bSk7CisgICAgICAgICAgcXVhcnRlcnMgPSBudW0gKiA0OworICAgICAgICAgIHdoaWxlKChxdWFydGVycyA+IDApICYmICFnb3RfZXhpdF9zaWduYWwpIHsKKyAgICAgICAgICAgIHF1YXJ0ZXJzLS07CisgICAgICAgICAgICByZXMgPSB3YWl0X21zKDI1MCk7CisgICAgICAgICAgICBpZihyZXMpIHsKKyAgICAgICAgICAgICAgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKyAgICAgICAgICAgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgICAgICAgICAgIGxvZ21zZygid2FpdF9tcygpIGZhaWxlZCB3aXRoIGVycm9yOiAoJWQpICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgaWYoIXF1YXJ0ZXJzKQorICAgICAgICAgICAgbG9nbXNnKCJDb250aW51aW5nIGFmdGVyIHNsZWVwaW5nICVkIHNlY29uZHMiLCBudW0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBsb2dtc2coIlVua25vd24gY29tbWFuZCBpbiByZXBseSBjb21tYW5kIHNlY3Rpb24iKTsKKyAgICAgIH0KKyAgICAgIHB0ciA9IHN0cmNocihwdHIsICdcbicpOworICAgICAgaWYocHRyKQorICAgICAgICBwdHIrKzsKKyAgICAgIGVsc2UKKyAgICAgICAgcHRyID0gTlVMTDsKKyAgICB9IHdoaWxlKHB0ciAmJiAqcHRyKTsKKyAgfQorICBpZihjbWQpCisgICAgZnJlZShjbWQpOworCisgIHJlcS0+b3BlbiA9IHVzZV9nb3BoZXI/RkFMU0U6cGVyc2lzdGFudDsKKworICBwcmV2dGVzdG5vID0gcmVxLT50ZXN0bm87CisgIHByZXZwYXJ0bm8gPSByZXEtPnBhcnRubzsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGN1cmxfc29ja2V0X3QgY29ubmVjdF90byhjb25zdCBjaGFyICppcGFkZHIsIHVuc2lnbmVkIHNob3J0IHBvcnQpCit7CisgIHNydnJfc29ja2FkZHJfdW5pb25fdCBzZXJ2ZXJhZGRyOworICBjdXJsX3NvY2tldF90IHNlcnZlcmZkOworICBpbnQgZXJyb3I7CisgIGludCByYzsKKyAgY29uc3QgY2hhciAqb3BfYnIgPSAiIjsKKyAgY29uc3QgY2hhciAqY2xfYnIgPSAiIjsKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICBjdXJsX3NvY2tsZW5fdCBmbGFnOworI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBpZih1c2VfaXB2NikgeworICAgIG9wX2JyID0gIlsiOworICAgIGNsX2JyID0gIl0iOworICB9CisjZW5kaWYKKworICBpZighaXBhZGRyKQorICAgIHJldHVybiBDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgbG9nbXNnKCJhYm91dCB0byBjb25uZWN0IHRvICVzJXMlczolaHUiLAorICAgICAgICAgb3BfYnIsIGlwYWRkciwgY2xfYnIsIHBvcnQpOworCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgaWYoIXVzZV9pcHY2KQorI2VuZGlmCisgICAgc2VydmVyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOworI2lmZGVmIEVOQUJMRV9JUFY2CisgIGVsc2UKKyAgICBzZXJ2ZXJmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19TVFJFQU0sIDApOworI2VuZGlmCisgIGlmKENVUkxfU09DS0VUX0JBRCA9PSBzZXJ2ZXJmZCkgeworICAgIGVycm9yID0gU09DS0VSUk5POworICAgIGxvZ21zZygiRXJyb3IgY3JlYXRpbmcgc29ja2V0IGZvciBzZXJ2ZXIgY29uZWN0aW9uOiAoJWQpICVzIiwKKyAgICAgICAgICAgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgcmV0dXJuIENVUkxfU09DS0VUX0JBRDsKKyAgfQorCisjaWZkZWYgVENQX05PREVMQVkKKyAgLyogRGlzYWJsZSB0aGUgTmFnbGUgYWxnb3JpdGhtICovCisgIGZsYWcgPSAxOworICBpZigwICE9IHNldHNvY2tvcHQoc2VydmVyZmQsIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICh2b2lkICopJmZsYWcsIHNpemVvZihmbGFnKSkpCisgICAgbG9nbXNnKCI9PT09PiBUQ1BfTk9ERUxBWSBmb3Igc2VydmVyIGNvbmVjdGlvbiBmYWlsZWQiKTsKKyAgZWxzZQorICAgIGxvZ21zZygiVENQX05PREVMQVkgc2V0IGZvciBzZXJ2ZXIgY29uZWN0aW9uIik7CisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9JUFY2CisgIGlmKCF1c2VfaXB2NikgeworI2VuZGlmCisgICAgbWVtc2V0KCZzZXJ2ZXJhZGRyLnNhNCwgMCwgc2l6ZW9mKHNlcnZlcmFkZHIuc2E0KSk7CisgICAgc2VydmVyYWRkci5zYTQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgc2VydmVyYWRkci5zYTQuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBpcGFkZHIsICZzZXJ2ZXJhZGRyLnNhNC5zaW5fYWRkcikgPCAxKSB7CisgICAgICBsb2dtc2coIkVycm9yIGluZXRfcHRvbiBmYWlsZWQgQUZfSU5FVCBjb252ZXJzaW9uIG9mICclcyciLCBpcGFkZHIpOworICAgICAgc2Nsb3NlKHNlcnZlcmZkKTsKKyAgICAgIHJldHVybiBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgfQorCisgICAgcmMgPSBjb25uZWN0KHNlcnZlcmZkLCAmc2VydmVyYWRkci5zYSwgc2l6ZW9mKHNlcnZlcmFkZHIuc2E0KSk7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgfQorICBlbHNlIHsKKyAgICBtZW1zZXQoJnNlcnZlcmFkZHIuc2E2LCAwLCBzaXplb2Yoc2VydmVyYWRkci5zYTYpKTsKKyAgICBzZXJ2ZXJhZGRyLnNhNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgIHNlcnZlcmFkZHIuc2E2LnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOworICAgIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBpcGFkZHIsICZzZXJ2ZXJhZGRyLnNhNi5zaW42X2FkZHIpIDwgMSkgeworICAgICAgbG9nbXNnKCJFcnJvciBpbmV0X3B0b24gZmFpbGVkIEFGX0lORVQ2IGNvbnZlcnNpb24gb2YgJyVzJyIsIGlwYWRkcik7CisgICAgICBzY2xvc2Uoc2VydmVyZmQpOworICAgICAgcmV0dXJuIENVUkxfU09DS0VUX0JBRDsKKyAgICB9CisKKyAgICByYyA9IGNvbm5lY3Qoc2VydmVyZmQsICZzZXJ2ZXJhZGRyLnNhLCBzaXplb2Yoc2VydmVyYWRkci5zYTYpKTsKKyAgfQorI2VuZGlmIC8qIEVOQUJMRV9JUFY2ICovCisKKyAgaWYoZ290X2V4aXRfc2lnbmFsKSB7CisgICAgc2Nsb3NlKHNlcnZlcmZkKTsKKyAgICByZXR1cm4gQ1VSTF9TT0NLRVRfQkFEOworICB9CisKKyAgaWYocmMpIHsKKyAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICBsb2dtc2coIkVycm9yIGNvbm5lY3RpbmcgdG8gc2VydmVyIHBvcnQgJWh1OiAoJWQpICVzIiwKKyAgICAgICAgICAgcG9ydCwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgc2Nsb3NlKHNlcnZlcmZkKTsKKyAgICByZXR1cm4gQ1VSTF9TT0NLRVRfQkFEOworICB9CisKKyAgbG9nbXNnKCJjb25uZWN0ZWQgZmluZSB0byAlcyVzJXM6JWh1LCBub3cgdHVubmVsIiwKKyAgICAgICAgIG9wX2JyLCBpcGFkZHIsIGNsX2JyLCBwb3J0KTsKKworICByZXR1cm4gc2VydmVyZmQ7Cit9CisKKy8qCisgKiBBIENPTk5FQ1QgaGFzIGJlZW4gcmVjZWl2ZWQsIGEgQ09OTkVDVCByZXNwb25zZSBoYXMgYmVlbiBzZW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLCBhbmQgdGhlbiBwYXNzIGRhdGEgYmV0d2VlbgorICogdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlciBiYWNrIGFuZCBmb3J0aCB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgYnkKKyAqIGVpdGhlciBlbmQuCisgKgorICogV2hlbiBkb2luZyBGVFAgdGhyb3VnaCBhIENPTk5FQ1QgcHJveHksIHdlIGV4cGVjdCB0aGF0IHRoZSBkYXRhIGNvbm5lY3Rpb24KKyAqIHdpbGwgYmUgc2V0dXAgd2hpbGUgdGhlIGZpcnN0IGNvbm5lY3QgaXMgc3RpbGwgYmVpbmcga2VwdCB1cC4gVGhlcmVmb3Igd2UKKyAqIG11c3QgYWNjZXB0IGEgbmV3IGNvbm5lY3Rpb24gYW5kIGRlYWwgd2l0aCBpdCBhcHByb3ByaWF0ZWx5LgorICovCisKKyNkZWZpbmUgZGF0YV9vcl9jdHJsKHgpICgoeCk/IkRBVEEiOiJDVFJMIikKKworI2RlZmluZSBDVFJMICAwCisjZGVmaW5lIERBVEEgIDEKKworc3RhdGljIHZvaWQgaHR0cF9jb25uZWN0KGN1cmxfc29ja2V0X3QgKmluZmRwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3Qgcm9vdGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBodHRwcmVxdWVzdCAqcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlwYWRkcikKK3sKKyAgY3VybF9zb2NrZXRfdCBzZXJ2ZXJmZFsyXSA9IHtDVVJMX1NPQ0tFVF9CQUQsIENVUkxfU09DS0VUX0JBRH07CisgIGN1cmxfc29ja2V0X3QgY2xpZW50ZmRbMl0gPSB7Q1VSTF9TT0NLRVRfQkFELCBDVVJMX1NPQ0tFVF9CQUR9OworICBzc2l6ZV90IHRvY1syXSA9IHswLCAwfTsgLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGNsaWVudCAqLworICBzc2l6ZV90IHRvc1syXSA9IHswLCAwfTsgLyogbnVtYmVyIG9mIGJ5dGVzIHRvIHNlcnZlciAqLworICBjaGFyIHJlYWRjbGllbnRbMl1bMjU2XTsKKyAgY2hhciByZWFkc2VydmVyWzJdWzI1Nl07CisgIGJvb2wgcG9sbF9jbGllbnRfcmRbMl0gPSB7IFRSVUUsIFRSVUUgfTsKKyAgYm9vbCBwb2xsX3NlcnZlcl9yZFsyXSA9IHsgVFJVRSwgVFJVRSB9OworICBib29sIHBvbGxfY2xpZW50X3dyWzJdID0geyBUUlVFLCBUUlVFIH07CisgIGJvb2wgcG9sbF9zZXJ2ZXJfd3JbMl0gPSB7IFRSVUUsIFRSVUUgfTsKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICBjdXJsX3NvY2tsZW5fdCBmbGFnOworI2VuZGlmCisgIGJvb2wgcHJpbWFyeSA9IEZBTFNFOworICBib29sIHNlY29uZGFyeSA9IEZBTFNFOworICBpbnQgbWF4X3R1bm5lbF9pZHg7IC8qIENUUkwgb3IgREFUQSAqLworICBpbnQgbG9vcDsKKyAgaW50IGk7CisKKyAgLyogcHJpbWFyeSB0dW5uZWwgY2xpZW50IGVuZHBvaW50IGFscmVhZHkgY29ubmVjdGVkICovCisgIGNsaWVudGZkW0NUUkxdID0gKmluZmRwOworCisgIC8qIFNsZWVwIGhlcmUgdG8gbWFrZSBzdXJlIHRoZSBjbGllbnQgcmVhZHMgQ09OTkVDVCByZXNwb25zZSdzCisgICAgICdlbmQgb2YgaGVhZGVycycgc2VwYXJhdGUgZnJvbSB0aGUgc2VydmVyIGRhdGEgdGhhdCBmb2xsb3dzLgorICAgICBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCB0cmlnZ2VyaW5nIGxpYmN1cmwga25vd24gYnVnICMzOS4gKi8KKyAgZm9yKGxvb3AgPSAyOyAobG9vcCA+IDApICYmICFnb3RfZXhpdF9zaWduYWw7IGxvb3AtLSkKKyAgICB3YWl0X21zKDI1MCk7CisgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICBnb3RvIGh0dHBfY29ubmVjdF9jbGVhbnVwOworCisgIHNlcnZlcmZkW0NUUkxdID0gY29ubmVjdF90byhpcGFkZHIsIHJlcS0+Y29ubmVjdF9wb3J0KTsKKyAgaWYoc2VydmVyZmRbQ1RSTF0gPT0gQ1VSTF9TT0NLRVRfQkFEKQorICAgIGdvdG8gaHR0cF9jb25uZWN0X2NsZWFudXA7CisKKyAgLyogUHJpbWFyeSB0dW5uZWwgc29ja2V0IGVuZHBvaW50cyBhcmUgbm93IGNvbm5lY3RlZC4gVHVubmVsIGRhdGEgYmFjayBhbmQKKyAgICAgZm9ydGggb3ZlciB0aGUgcHJpbWFyeSB0dW5uZWwgdW50aWwgY2xpZW50IG9yIHNlcnZlciBicmVha3MgdGhlIHByaW1hcnkKKyAgICAgdHVubmVsLCBzaW11bHRhbmVvdXNseSBhbGxvd2luZyBlc3RhYmxpc2htZW50LCBvcGVyYXRpb24gYW5kIHRlYXJkb3duIG9mCisgICAgIGEgc2Vjb25kYXJ5IHR1bm5lbCB0aGF0IG1heSBiZSB1c2VkIGZvciBwYXNzaXZlIEZUUCBkYXRhIGNvbm5lY3Rpb24uICovCisKKyAgbWF4X3R1bm5lbF9pZHggPSBDVFJMOworICBwcmltYXJ5ID0gVFJVRTsKKworICB3aGlsZSghZ290X2V4aXRfc2lnbmFsKSB7CisKKyAgICBmZF9zZXQgaW5wdXQ7CisgICAgZmRfc2V0IG91dHB1dDsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0ID0gezAsIDI1MDAwMEx9OyAvKiAyNTAgbXMgKi8KKyAgICBzc2l6ZV90IHJjOworICAgIGN1cmxfc29ja2V0X3QgbWF4ZmQgPSAoY3VybF9zb2NrZXRfdCktMTsKKworICAgIEZEX1pFUk8oJmlucHV0KTsKKyAgICBGRF9aRVJPKCZvdXRwdXQpOworCisgICAgaWYoKGNsaWVudGZkW0RBVEFdID09IENVUkxfU09DS0VUX0JBRCkgJiYKKyAgICAgICAoc2VydmVyZmRbREFUQV0gPT0gQ1VSTF9TT0NLRVRfQkFEKSAmJgorICAgICAgIHBvbGxfY2xpZW50X3JkW0NUUkxdICYmIHBvbGxfY2xpZW50X3dyW0NUUkxdICYmCisgICAgICAgcG9sbF9zZXJ2ZXJfcmRbQ1RSTF0gJiYgcG9sbF9zZXJ2ZXJfd3JbQ1RSTF0pIHsKKyAgICAgIC8qIGxpc3RlbmVyIHNvY2tldCBpcyBtb25pdG9yZWQgdG8gYWxsb3cgY2xpZW50IHRvIGVzdGFibGlzaAorICAgICAgICAgc2Vjb25kYXJ5IHR1bm5lbCBvbmx5IHdoZW4gdGhpcyB0dW5uZWwgaXMgbm90IGVzdGFibGlzaGVkCisgICAgICAgICBhbmQgcHJpbWFyeSBvbmUgaXMgZnVsbHkgb3BlcmF0aW9uYWwgKi8KKyAgICAgIEZEX1NFVChyb290ZmQsICZpbnB1dCk7CisgICAgICBtYXhmZCA9IHJvb3RmZDsKKyAgICB9CisKKyAgICAvKiBzZXQgdHVubmVsIHNvY2tldHMgdG8gd2FpdCBmb3IgKi8KKyAgICBmb3IoaSA9IDA7IGkgPD0gbWF4X3R1bm5lbF9pZHg7IGkrKykgeworICAgICAgLyogY2xpZW50IHNpZGUgc29ja2V0IG1vbml0b3JpbmcgKi8KKyAgICAgIGlmKGNsaWVudGZkW2ldICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgICAgICBpZihwb2xsX2NsaWVudF9yZFtpXSkgeworICAgICAgICAgIC8qIHVubGVzcyB0b2xkIG5vdCB0byBkbyBzbywgbW9uaXRvciByZWFkYWJpbGl0eSAqLworICAgICAgICAgIEZEX1NFVChjbGllbnRmZFtpXSwgJmlucHV0KTsKKyAgICAgICAgICBpZihjbGllbnRmZFtpXSA+IG1heGZkKQorICAgICAgICAgICAgbWF4ZmQgPSBjbGllbnRmZFtpXTsKKyAgICAgICAgfQorICAgICAgICBpZihwb2xsX2NsaWVudF93cltpXSAmJiB0b2NbaV0pIHsKKyAgICAgICAgICAvKiB1bmxlc3MgdG9sZCBub3QgdG8gZG8gc28sIG1vbml0b3Igd3JpdGVhYmlsaXR5CisgICAgICAgICAgICAgaWYgdGhlcmUgaXMgZGF0YSByZWFkeSB0byBiZSBzZW50IHRvIGNsaWVudCAqLworICAgICAgICAgIEZEX1NFVChjbGllbnRmZFtpXSwgJm91dHB1dCk7CisgICAgICAgICAgaWYoY2xpZW50ZmRbaV0gPiBtYXhmZCkKKyAgICAgICAgICAgIG1heGZkID0gY2xpZW50ZmRbaV07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8qIHNlcnZlciBzaWRlIHNvY2tldCBtb25pdG9yaW5nICovCisgICAgICBpZihzZXJ2ZXJmZFtpXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICAgICAgaWYocG9sbF9zZXJ2ZXJfcmRbaV0pIHsKKyAgICAgICAgICAvKiB1bmxlc3MgdG9sZCBub3QgdG8gZG8gc28sIG1vbml0b3IgcmVhZGFiaWxpdHkgKi8KKyAgICAgICAgICBGRF9TRVQoc2VydmVyZmRbaV0sICZpbnB1dCk7CisgICAgICAgICAgaWYoc2VydmVyZmRbaV0gPiBtYXhmZCkKKyAgICAgICAgICAgIG1heGZkID0gc2VydmVyZmRbaV07CisgICAgICAgIH0KKyAgICAgICAgaWYocG9sbF9zZXJ2ZXJfd3JbaV0gJiYgdG9zW2ldKSB7CisgICAgICAgICAgLyogdW5sZXNzIHRvbGQgbm90IHRvIGRvIHNvLCBtb25pdG9yIHdyaXRlYWJpbGl0eQorICAgICAgICAgICAgIGlmIHRoZXJlIGlzIGRhdGEgcmVhZHkgdG8gYmUgc2VudCB0byBzZXJ2ZXIgKi8KKyAgICAgICAgICBGRF9TRVQoc2VydmVyZmRbaV0sICZvdXRwdXQpOworICAgICAgICAgIGlmKHNlcnZlcmZkW2ldID4gbWF4ZmQpCisgICAgICAgICAgICBtYXhmZCA9IHNlcnZlcmZkW2ldOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICAgIGJyZWFrOworCisgICAgcmMgPSBzZWxlY3QoKGludCltYXhmZCArIDEsICZpbnB1dCwgJm91dHB1dCwgTlVMTCwgJnRpbWVvdXQpOworCisgICAgaWYocmMgPiAwKSB7CisgICAgICAvKiBzb2NrZXQgYWN0aW9uICovCisgICAgICBib29sIHRjcF9maW5fd3I7CisKKyAgICAgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIHRjcF9maW5fd3IgPSBGQUxTRTsKKworICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgICAvKiBwYXNzaXZlIG1vZGUgRlRQIG1heSBlc3RhYmxpc2ggYSBzZWNvbmRhcnkgdHVubmVsICovCisgICAgICBpZigoY2xpZW50ZmRbREFUQV0gPT0gQ1VSTF9TT0NLRVRfQkFEKSAmJgorICAgICAgICAgKHNlcnZlcmZkW0RBVEFdID09IENVUkxfU09DS0VUX0JBRCkgJiYgRkRfSVNTRVQocm9vdGZkLCAmaW5wdXQpKSB7CisgICAgICAgIC8qIGEgbmV3IGNvbm5lY3Rpb24gb24gbGlzdGVuZXIgc29ja2V0IChtb3N0IGxpa2VseSBmcm9tIGNsaWVudCkgKi8KKyAgICAgICAgY3VybF9zb2NrZXRfdCBkYXRhZmQgPSBhY2NlcHQocm9vdGZkLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgaWYoZGF0YWZkICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgICAgICAgIHN0cnVjdCBodHRwcmVxdWVzdCByZXEyOworICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgbG9nbXNnKCI9PT09PiBDbGllbnQgY29ubmVjdCBEQVRBIik7CisjaWZkZWYgVENQX05PREVMQVkKKyAgICAgICAgICAvKiBEaXNhYmxlIHRoZSBOYWdsZSBhbGdvcml0aG0gKi8KKyAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICBpZigwICE9IHNldHNvY2tvcHQoZGF0YWZkLCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopJmZsYWcsIHNpemVvZihmbGFnKSkpCisgICAgICAgICAgICBsb2dtc2coIj09PT0+IFRDUF9OT0RFTEFZIGZvciBjbGllbnQgREFUQSBjb25lY3Rpb24gZmFpbGVkIik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nbXNnKCJUQ1BfTk9ERUxBWSBzZXQgZm9yIGNsaWVudCBEQVRBIGNvbmVjdGlvbiIpOworI2VuZGlmCisgICAgICAgICAgcmVxMi5waXBlbGluaW5nID0gRkFMU0U7CisgICAgICAgICAgZXJyID0gZ2V0X3JlcXVlc3QoZGF0YWZkLCAmcmVxMik7CisgICAgICAgICAgaWYoIWVycikgeworICAgICAgICAgICAgZXJyID0gc2VuZF9kb2MoZGF0YWZkLCAmcmVxMik7CisgICAgICAgICAgICBpZighZXJyICYmIChyZXEyLnRlc3RubyA9PSBET0NOVU1CRVJfQ09OTkVDVCkpIHsKKyAgICAgICAgICAgICAgLyogc2xlZXAgdG8gcHJldmVudCB0cmlnZ2VyaW5nIGxpYmN1cmwga25vd24gYnVnICMzOS4gKi8KKyAgICAgICAgICAgICAgZm9yKGxvb3AgPSAyOyAobG9vcCA+IDApICYmICFnb3RfZXhpdF9zaWduYWw7IGxvb3AtLSkKKyAgICAgICAgICAgICAgICB3YWl0X21zKDI1MCk7CisgICAgICAgICAgICAgIGlmKCFnb3RfZXhpdF9zaWduYWwpIHsKKyAgICAgICAgICAgICAgICAvKiBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgKi8KKyAgICAgICAgICAgICAgICBzZXJ2ZXJmZFtEQVRBXSA9IGNvbm5lY3RfdG8oaXBhZGRyLCByZXEyLmNvbm5lY3RfcG9ydCk7CisgICAgICAgICAgICAgICAgaWYoc2VydmVyZmRbREFUQV0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICAgICAgICAgICAgICAvKiBzZWNvbmRhcnkgdHVubmVsIGVzdGFibGlzaGVkLCBub3cgd2UgaGF2ZSB0d28gY29ubmVjdGlvbnMgKi8KKyAgICAgICAgICAgICAgICAgIHBvbGxfY2xpZW50X3JkW0RBVEFdID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgIHBvbGxfY2xpZW50X3dyW0RBVEFdID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgIHBvbGxfc2VydmVyX3JkW0RBVEFdID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgIHBvbGxfc2VydmVyX3dyW0RBVEFdID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgIG1heF90dW5uZWxfaWR4ID0gREFUQTsKKyAgICAgICAgICAgICAgICAgIHNlY29uZGFyeSA9IFRSVUU7CisgICAgICAgICAgICAgICAgICB0b2NbREFUQV0gPSAwOworICAgICAgICAgICAgICAgICAgdG9zW0RBVEFdID0gMDsKKyAgICAgICAgICAgICAgICAgIGNsaWVudGZkW0RBVEFdID0gZGF0YWZkOworICAgICAgICAgICAgICAgICAgZGF0YWZkID0gQ1VSTF9TT0NLRVRfQkFEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBpZihkYXRhZmQgIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICAgICAgICAvKiBzZWNvbmRhcnkgdHVubmVsIG5vdCBlc3RhYmxpc2hlZCAqLworICAgICAgICAgICAgc2h1dGRvd24oZGF0YWZkLCBTSFVUX1JEV1IpOworICAgICAgICAgICAgc2Nsb3NlKGRhdGFmZCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgICAvKiByZWFjdCB0byB0dW5uZWwgZW5kcG9pbnQgcmVhZGFibGUvd3JpdGVhYmxlIG5vdGlmaWNhdGlvbnMgKi8KKyAgICAgIGZvcihpID0gMDsgaSA8PSBtYXhfdHVubmVsX2lkeDsgaSsrKSB7CisgICAgICAgIHNpemVfdCBsZW47CisgICAgICAgIGlmKGNsaWVudGZkW2ldICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgICAgICAgIGxlbiA9IHNpemVvZihyZWFkY2xpZW50W2ldKSAtIHRvc1tpXTsKKyAgICAgICAgICBpZihsZW4gJiYgRkRfSVNTRVQoY2xpZW50ZmRbaV0sICZpbnB1dCkpIHsKKyAgICAgICAgICAgIC8qIHJlYWQgZnJvbSBjbGllbnQgKi8KKyAgICAgICAgICAgIHJjID0gc3JlYWQoY2xpZW50ZmRbaV0sICZyZWFkY2xpZW50W2ldW3Rvc1tpXV0sIGxlbik7CisgICAgICAgICAgICBpZihyYyA8PSAwKSB7CisgICAgICAgICAgICAgIGxvZ21zZygiWyVzXSBnb3QgJXpkLCBTVE9QIFJFQURJTkcgY2xpZW50IiwgZGF0YV9vcl9jdHJsKGkpLCByYyk7CisgICAgICAgICAgICAgIHNodXRkb3duKGNsaWVudGZkW2ldLCBTSFVUX1JEKTsKKyAgICAgICAgICAgICAgcG9sbF9jbGllbnRfcmRbaV0gPSBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBsb2dtc2coIlslc10gUkVBRCAlemQgYnl0ZXMgZnJvbSBjbGllbnQiLCBkYXRhX29yX2N0cmwoaSksIHJjKTsKKyAgICAgICAgICAgICAgbG9nbXNnKCJbJXNdIFJFQUQgXCIlc1wiIiwgZGF0YV9vcl9jdHJsKGkpLAorICAgICAgICAgICAgICAgICAgICAgZGF0YV90b19oZXgoJnJlYWRjbGllbnRbaV1bdG9zW2ldXSwgcmMpKTsKKyAgICAgICAgICAgICAgdG9zW2ldICs9IHJjOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZihzZXJ2ZXJmZFtpXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICAgICAgICBsZW4gPSBzaXplb2YocmVhZHNlcnZlcltpXSktdG9jW2ldOworICAgICAgICAgIGlmKGxlbiAmJiBGRF9JU1NFVChzZXJ2ZXJmZFtpXSwgJmlucHV0KSkgeworICAgICAgICAgICAgLyogcmVhZCBmcm9tIHNlcnZlciAqLworICAgICAgICAgICAgcmMgPSBzcmVhZChzZXJ2ZXJmZFtpXSwgJnJlYWRzZXJ2ZXJbaV1bdG9jW2ldXSwgbGVuKTsKKyAgICAgICAgICAgIGlmKHJjIDw9IDApIHsKKyAgICAgICAgICAgICAgbG9nbXNnKCJbJXNdIGdvdCAlemQsIFNUT1AgUkVBRElORyBzZXJ2ZXIiLCBkYXRhX29yX2N0cmwoaSksIHJjKTsKKyAgICAgICAgICAgICAgc2h1dGRvd24oc2VydmVyZmRbaV0sIFNIVVRfUkQpOworICAgICAgICAgICAgICBwb2xsX3NlcnZlcl9yZFtpXSA9IEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIGxvZ21zZygiWyVzXSBSRUFEICV6ZCBieXRlcyBmcm9tIHNlcnZlciIsIGRhdGFfb3JfY3RybChpKSwgcmMpOworICAgICAgICAgICAgICBsb2dtc2coIlslc10gUkVBRCBcIiVzXCIiLCBkYXRhX29yX2N0cmwoaSksCisgICAgICAgICAgICAgICAgICAgICBkYXRhX3RvX2hleCgmcmVhZHNlcnZlcltpXVt0b2NbaV1dLCByYykpOworICAgICAgICAgICAgICB0b2NbaV0gKz0gcmM7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKGNsaWVudGZkW2ldICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgICAgICAgIGlmKHRvY1tpXSAmJiBGRF9JU1NFVChjbGllbnRmZFtpXSwgJm91dHB1dCkpIHsKKyAgICAgICAgICAgIC8qIHdyaXRlIHRvIGNsaWVudCAqLworICAgICAgICAgICAgcmMgPSBzd3JpdGUoY2xpZW50ZmRbaV0sIHJlYWRzZXJ2ZXJbaV0sIHRvY1tpXSk7CisgICAgICAgICAgICBpZihyYyA8PSAwKSB7CisgICAgICAgICAgICAgIGxvZ21zZygiWyVzXSBnb3QgJXpkLCBTVE9QIFdSSVRJTkcgY2xpZW50IiwgZGF0YV9vcl9jdHJsKGkpLCByYyk7CisgICAgICAgICAgICAgIHNodXRkb3duKGNsaWVudGZkW2ldLCBTSFVUX1dSKTsKKyAgICAgICAgICAgICAgcG9sbF9jbGllbnRfd3JbaV0gPSBGQUxTRTsKKyAgICAgICAgICAgICAgdGNwX2Zpbl93ciA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgbG9nbXNnKCJbJXNdIFNFTlQgJXpkIGJ5dGVzIHRvIGNsaWVudCIsIGRhdGFfb3JfY3RybChpKSwgcmMpOworICAgICAgICAgICAgICBsb2dtc2coIlslc10gU0VOVCBcIiVzXCIiLCBkYXRhX29yX2N0cmwoaSksCisgICAgICAgICAgICAgICAgICAgICBkYXRhX3RvX2hleChyZWFkc2VydmVyW2ldLCByYykpOworICAgICAgICAgICAgICBpZih0b2NbaV0gLSByYykKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKCZyZWFkc2VydmVyW2ldWzBdLCAmcmVhZHNlcnZlcltpXVtyY10sIHRvY1tpXS1yYyk7CisgICAgICAgICAgICAgIHRvY1tpXSAtPSByYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYoc2VydmVyZmRbaV0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICAgICAgaWYodG9zW2ldICYmIEZEX0lTU0VUKHNlcnZlcmZkW2ldLCAmb3V0cHV0KSkgeworICAgICAgICAgICAgLyogd3JpdGUgdG8gc2VydmVyICovCisgICAgICAgICAgICByYyA9IHN3cml0ZShzZXJ2ZXJmZFtpXSwgcmVhZGNsaWVudFtpXSwgdG9zW2ldKTsKKyAgICAgICAgICAgIGlmKHJjIDw9IDApIHsKKyAgICAgICAgICAgICAgbG9nbXNnKCJbJXNdIGdvdCAlemQsIFNUT1AgV1JJVElORyBzZXJ2ZXIiLCBkYXRhX29yX2N0cmwoaSksIHJjKTsKKyAgICAgICAgICAgICAgc2h1dGRvd24oc2VydmVyZmRbaV0sIFNIVVRfV1IpOworICAgICAgICAgICAgICBwb2xsX3NlcnZlcl93cltpXSA9IEZBTFNFOworICAgICAgICAgICAgICB0Y3BfZmluX3dyID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBsb2dtc2coIlslc10gU0VOVCAlemQgYnl0ZXMgdG8gc2VydmVyIiwgZGF0YV9vcl9jdHJsKGkpLCByYyk7CisgICAgICAgICAgICAgIGxvZ21zZygiWyVzXSBTRU5UIFwiJXNcIiIsIGRhdGFfb3JfY3RybChpKSwKKyAgICAgICAgICAgICAgICAgICAgIGRhdGFfdG9faGV4KHJlYWRjbGllbnRbaV0sIHJjKSk7CisgICAgICAgICAgICAgIGlmKHRvc1tpXSAtIHJjKQorICAgICAgICAgICAgICAgIG1lbW1vdmUoJnJlYWRjbGllbnRbaV1bMF0sICZyZWFkY2xpZW50W2ldW3JjXSwgdG9zW2ldLXJjKTsKKyAgICAgICAgICAgICAgdG9zW2ldIC09IHJjOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYoZ290X2V4aXRfc2lnbmFsKQorICAgICAgICBicmVhazsKKworICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgICAvKiBlbmRwb2ludCByZWFkL3dyaXRlIGRpc2FibGluZywgZW5kcG9pbnQgY2xvc2luZyBhbmQgdHVubmVsIHRlYXJkb3duICovCisgICAgICBmb3IoaSA9IDA7IGkgPD0gbWF4X3R1bm5lbF9pZHg7IGkrKykgeworICAgICAgICBmb3IobG9vcCA9IDI7IGxvb3AgPiAwOyBsb29wLS0pIHsKKyAgICAgICAgICAvKiBsb29wIHR3aWNlIHRvIHNhdGlzZnkgY29uZGl0aW9uIGludGVyZGVwZW5kZW5jaWVzIHdpdGhvdXQKKyAgICAgICAgICAgICBoYXZpbmcgdG8gYXdhaXQgc2VsZWN0IHRpbWVvdXQgb3IgYW5vdGhlciBzb2NrZXQgZXZlbnQgKi8KKyAgICAgICAgICBpZihjbGllbnRmZFtpXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICAgICAgICAgIGlmKHBvbGxfY2xpZW50X3JkW2ldICYmICFwb2xsX3NlcnZlcl93cltpXSkgeworICAgICAgICAgICAgICBsb2dtc2coIlslc10gRElTQUJMRUQgUkVBRElORyBjbGllbnQiLCBkYXRhX29yX2N0cmwoaSkpOworICAgICAgICAgICAgICBzaHV0ZG93bihjbGllbnRmZFtpXSwgU0hVVF9SRCk7CisgICAgICAgICAgICAgIHBvbGxfY2xpZW50X3JkW2ldID0gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihwb2xsX2NsaWVudF93cltpXSAmJiAhcG9sbF9zZXJ2ZXJfcmRbaV0gJiYgIXRvY1tpXSkgeworICAgICAgICAgICAgICBsb2dtc2coIlslc10gRElTQUJMRUQgV1JJVElORyBjbGllbnQiLCBkYXRhX29yX2N0cmwoaSkpOworICAgICAgICAgICAgICBzaHV0ZG93bihjbGllbnRmZFtpXSwgU0hVVF9XUik7CisgICAgICAgICAgICAgIHBvbGxfY2xpZW50X3dyW2ldID0gRkFMU0U7CisgICAgICAgICAgICAgIHRjcF9maW5fd3IgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBpZihzZXJ2ZXJmZFtpXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICAgICAgICAgIGlmKHBvbGxfc2VydmVyX3JkW2ldICYmICFwb2xsX2NsaWVudF93cltpXSkgeworICAgICAgICAgICAgICBsb2dtc2coIlslc10gRElTQUJMRUQgUkVBRElORyBzZXJ2ZXIiLCBkYXRhX29yX2N0cmwoaSkpOworICAgICAgICAgICAgICBzaHV0ZG93bihzZXJ2ZXJmZFtpXSwgU0hVVF9SRCk7CisgICAgICAgICAgICAgIHBvbGxfc2VydmVyX3JkW2ldID0gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihwb2xsX3NlcnZlcl93cltpXSAmJiAhcG9sbF9jbGllbnRfcmRbaV0gJiYgIXRvc1tpXSkgeworICAgICAgICAgICAgICBsb2dtc2coIlslc10gRElTQUJMRUQgV1JJVElORyBzZXJ2ZXIiLCBkYXRhX29yX2N0cmwoaSkpOworICAgICAgICAgICAgICBzaHV0ZG93bihzZXJ2ZXJmZFtpXSwgU0hVVF9XUik7CisgICAgICAgICAgICAgIHBvbGxfc2VydmVyX3dyW2ldID0gRkFMU0U7CisgICAgICAgICAgICAgIHRjcF9maW5fd3IgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZih0Y3BfZmluX3dyKQorICAgICAgICAvKiBhbGxvdyBrZXJuZWwgdG8gcGxhY2UgRklOIGJpdCBwYWNrZXQgb24gdGhlIHdpcmUgKi8KKyAgICAgICAgd2FpdF9tcygyNTApOworCisgICAgICAvKiBzb2NrZXQgY2xlYXJpbmcgKi8KKyAgICAgIGZvcihpID0gMDsgaSA8PSBtYXhfdHVubmVsX2lkeDsgaSsrKSB7CisgICAgICAgIGZvcihsb29wID0gMjsgbG9vcCA+IDA7IGxvb3AtLSkgeworICAgICAgICAgIGlmKGNsaWVudGZkW2ldICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgICAgICAgICAgaWYoIXBvbGxfY2xpZW50X3dyW2ldICYmICFwb2xsX2NsaWVudF9yZFtpXSkgeworICAgICAgICAgICAgICBsb2dtc2coIlslc10gQ0xPU0lORyBjbGllbnQgc29ja2V0IiwgZGF0YV9vcl9jdHJsKGkpKTsKKyAgICAgICAgICAgICAgc2Nsb3NlKGNsaWVudGZkW2ldKTsKKyAgICAgICAgICAgICAgY2xpZW50ZmRbaV0gPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgICAgICAgICAgIGlmKHNlcnZlcmZkW2ldID09IENVUkxfU09DS0VUX0JBRCkgeworICAgICAgICAgICAgICAgIGxvZ21zZygiWyVzXSBFTkRJTkciLCBkYXRhX29yX2N0cmwoaSkpOworICAgICAgICAgICAgICAgIGlmKGkgPT0gREFUQSkKKyAgICAgICAgICAgICAgICAgIHNlY29uZGFyeSA9IEZBTFNFOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHByaW1hcnkgPSBGQUxTRTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBpZihzZXJ2ZXJmZFtpXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICAgICAgICAgIGlmKCFwb2xsX3NlcnZlcl93cltpXSAmJiAhcG9sbF9zZXJ2ZXJfcmRbaV0pIHsKKyAgICAgICAgICAgICAgbG9nbXNnKCJbJXNdIENMT1NJTkcgc2VydmVyIHNvY2tldCIsIGRhdGFfb3JfY3RybChpKSk7CisgICAgICAgICAgICAgIHNjbG9zZShzZXJ2ZXJmZFtpXSk7CisgICAgICAgICAgICAgIHNlcnZlcmZkW2ldID0gQ1VSTF9TT0NLRVRfQkFEOworICAgICAgICAgICAgICBpZihjbGllbnRmZFtpXSA9PSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICAgICAgICAgICAgICBsb2dtc2coIlslc10gRU5ESU5HIiwgZGF0YV9vcl9jdHJsKGkpKTsKKyAgICAgICAgICAgICAgICBpZihpID09IERBVEEpCisgICAgICAgICAgICAgICAgICBzZWNvbmRhcnkgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwcmltYXJ5ID0gRkFMU0U7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgICBtYXhfdHVubmVsX2lkeCA9IHNlY29uZGFyeSA/IERBVEEgOiBDVFJMOworCisgICAgICBpZighcHJpbWFyeSkKKyAgICAgICAgLyogZXhpdCBsb29wIHVwb24gcHJpbWFyeSB0dW5uZWwgdGVhcmRvd24gKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICB9IC8qIChyYyA+IDApICovCisKKyAgfQorCitodHRwX2Nvbm5lY3RfY2xlYW51cDoKKworICBmb3IoaSA9IERBVEE7IGkgPj0gQ1RSTDsgaS0tKSB7CisgICAgaWYoc2VydmVyZmRbaV0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB7CisgICAgICBsb2dtc2coIlslc10gQ0xPU0lORyBzZXJ2ZXIgc29ja2V0IChjbGVhbnVwKSIsIGRhdGFfb3JfY3RybChpKSk7CisgICAgICBzaHV0ZG93bihzZXJ2ZXJmZFtpXSwgU0hVVF9SRFdSKTsKKyAgICAgIHNjbG9zZShzZXJ2ZXJmZFtpXSk7CisgICAgfQorICAgIGlmKGNsaWVudGZkW2ldICE9IENVUkxfU09DS0VUX0JBRCkgeworICAgICAgbG9nbXNnKCJbJXNdIENMT1NJTkcgY2xpZW50IHNvY2tldCAoY2xlYW51cCkiLCBkYXRhX29yX2N0cmwoaSkpOworICAgICAgc2h1dGRvd24oY2xpZW50ZmRbaV0sIFNIVVRfUkRXUik7CisgICAgICBzY2xvc2UoY2xpZW50ZmRbaV0pOworICAgIH0KKyAgICBpZigoc2VydmVyZmRbaV0gIT0gQ1VSTF9TT0NLRVRfQkFEKSB8fAorICAgICAgIChjbGllbnRmZFtpXSAhPSBDVVJMX1NPQ0tFVF9CQUQpKSB7CisgICAgICBsb2dtc2coIlslc10gQUJPUlRJTkciLCBkYXRhX29yX2N0cmwoaSkpOworICAgIH0KKyAgfQorCisgICppbmZkcCA9IENVUkxfU09DS0VUX0JBRDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgc3J2cl9zb2NrYWRkcl91bmlvbl90IG1lOworICBjdXJsX3NvY2tldF90IHNvY2sgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgIGN1cmxfc29ja2V0X3QgbXNnc29jayA9IENVUkxfU09DS0VUX0JBRDsKKyAgaW50IHdyb3RlcGlkZmlsZSA9IDA7CisgIGludCBmbGFnOworICB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gREVGQVVMVF9QT1JUOworICBjaGFyICpwaWRuYW1lPSAoY2hhciAqKSIuaHR0cC5waWQiOworICBzdHJ1Y3QgaHR0cHJlcXVlc3QgcmVxOworICBpbnQgcmM7CisgIGludCBlcnJvcjsKKyAgaW50IGFyZz0xOworICBsb25nIHBpZDsKKyAgY29uc3QgY2hhciAqaG9zdHBvcnQgPSAiMTI3LjAuMC4xIjsKKyNpZmRlZiBDVVJMX1NXU19GT1JLX0VOQUJMRUQKKyAgYm9vbCB1c2VfZm9yayA9IEZBTFNFOworI2VuZGlmCisKKyAgd2hpbGUoYXJnYz5hcmcpIHsKKyAgICBpZighc3RyY21wKCItLXZlcnNpb24iLCBhcmd2W2FyZ10pKSB7CisgICAgICBwcmludGYoInN3cyBJUHY0JXMiCisjaWZkZWYgQ1VSTF9TV1NfRk9SS19FTkFCTEVECisgICAgICAgICAgICAgIiBGT1JLIgorI2VuZGlmCisgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICwKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgICAgICAgICAgICIvSVB2NiIKKyNlbHNlCisgICAgICAgICAgICAgIiIKKyNlbmRpZgorICAgICAgICAgICAgICk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSBpZighc3RyY21wKCItLXBpZGZpbGUiLCBhcmd2W2FyZ10pKSB7CisgICAgICBhcmcrKzsKKyAgICAgIGlmKGFyZ2M+YXJnKQorICAgICAgICBwaWRuYW1lID0gYXJndlthcmcrK107CisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1sb2dmaWxlIiwgYXJndlthcmddKSkgeworICAgICAgYXJnKys7CisgICAgICBpZihhcmdjPmFyZykKKyAgICAgICAgc2VydmVybG9nZmlsZSA9IGFyZ3ZbYXJnKytdOworICAgIH0KKyAgICBlbHNlIGlmKCFzdHJjbXAoIi0tZ29waGVyIiwgYXJndlthcmddKSkgeworICAgICAgYXJnKys7CisgICAgICB1c2VfZ29waGVyID0gVFJVRTsKKyAgICAgIGVuZF9vZl9oZWFkZXJzID0gIlxyXG4iOyAvKiBnb3BoZXIgc3R5bGUgaXMgbXVjaCBzaW1wbGVyICovCisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1pcHY0IiwgYXJndlthcmddKSkgeworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICBpcHZfaW51c2UgPSAiSVB2NCI7CisgICAgICB1c2VfaXB2NiA9IEZBTFNFOworI2VuZGlmCisgICAgICBhcmcrKzsKKyAgICB9CisgICAgZWxzZSBpZighc3RyY21wKCItLWlwdjYiLCBhcmd2W2FyZ10pKSB7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgIGlwdl9pbnVzZSA9ICJJUHY2IjsKKyAgICAgIHVzZV9pcHY2ID0gVFJVRTsKKyNlbmRpZgorICAgICAgYXJnKys7CisgICAgfQorI2lmZGVmIENVUkxfU1dTX0ZPUktfRU5BQkxFRAorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1mb3JrIiwgYXJndlthcmddKSkgeworICAgICAgdXNlX2Zvcms9VFJVRTsKKyAgICAgIGFyZysrOworICAgIH0KKyNlbmRpZgorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1wb3J0IiwgYXJndlthcmddKSkgeworICAgICAgYXJnKys7CisgICAgICBpZihhcmdjPmFyZykgeworICAgICAgICBjaGFyICplbmRwdHI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgdWxudW0gPSBzdHJ0b3VsKGFyZ3ZbYXJnXSwgJmVuZHB0ciwgMTApOworICAgICAgICBpZigoZW5kcHRyICE9IGFyZ3ZbYXJnXSArIHN0cmxlbihhcmd2W2FyZ10pKSB8fAorICAgICAgICAgICAodWxudW0gPCAxMDI1VUwpIHx8ICh1bG51bSA+IDY1NTM1VUwpKSB7CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzd3M6IGludmFsaWQgLS1wb3J0IGFyZ3VtZW50ICglcylcbiIsCisgICAgICAgICAgICAgICAgICBhcmd2W2FyZ10pOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHBvcnQgPSBjdXJseF91bHRvdXModWxudW0pOworICAgICAgICBhcmcrKzsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZighc3RyY21wKCItLXNyY2RpciIsIGFyZ3ZbYXJnXSkpIHsKKyAgICAgIGFyZysrOworICAgICAgaWYoYXJnYz5hcmcpIHsKKyAgICAgICAgcGF0aCA9IGFyZ3ZbYXJnXTsKKyAgICAgICAgYXJnKys7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1jb25uZWN0IiwgYXJndlthcmddKSkgeworICAgICAgLyogc3RvcmUgdGhlIGNvbm5lY3QgaG9zdCwgYnV0IGFsc28gdXNlIHRoaXMgYXMgYSBoaW50IHRoYXQgd2UKKyAgICAgICAgIHJ1biBhcyBhIHByb3h5IGFuZCBkbyBhIGZldyBkaWZmZXJlbnQgaW50ZXJuYWwgY2hvaWNlcyAqLworICAgICAgYXJnKys7CisgICAgICBpZihhcmdjPmFyZykgeworICAgICAgICBob3N0cG9ydCA9IGFyZ3ZbYXJnXTsKKyAgICAgICAgYXJnKys7CisgICAgICAgIGlzX3Byb3h5ID0gVFJVRTsKKyAgICAgICAgbG9nbXNnKCJSdW4gYXMgcHJveHksIENPTk5FQ1QgdG8gJXMiLCBob3N0cG9ydCk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgcHV0cygiVXNhZ2U6IHN3cyBbb3B0aW9uXVxuIgorICAgICAgICAgICAiIC0tdmVyc2lvblxuIgorICAgICAgICAgICAiIC0tbG9nZmlsZSBbZmlsZV1cbiIKKyAgICAgICAgICAgIiAtLXBpZGZpbGUgW2ZpbGVdXG4iCisgICAgICAgICAgICIgLS1pcHY0XG4iCisgICAgICAgICAgICIgLS1pcHY2XG4iCisgICAgICAgICAgICIgLS1wb3J0IFtwb3J0XVxuIgorICAgICAgICAgICAiIC0tc3JjZGlyIFtwYXRoXVxuIgorICAgICAgICAgICAiIC0tY29ubmVjdCBbaXA0LWFkZHJdXG4iCisgICAgICAgICAgICIgLS1nb3BoZXJcbiIKKyAgICAgICAgICAgIiAtLWZvcmsiKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisjaWZkZWYgV0lOMzIKKyAgd2luMzJfaW5pdCgpOworICBhdGV4aXQod2luMzJfY2xlYW51cCk7CisjZW5kaWYKKworICBpbnN0YWxsX3NpZ25hbF9oYW5kbGVycygpOworCisgIHBpZCA9IChsb25nKWdldHBpZCgpOworCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgaWYoIXVzZV9pcHY2KQorI2VuZGlmCisgICAgc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgZWxzZQorICAgIHNvY2sgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTsKKyNlbmRpZgorCisgIGlmKENVUkxfU09DS0VUX0JBRCA9PSBzb2NrKSB7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgbG9nbXNnKCJFcnJvciBjcmVhdGluZyBzb2NrZXQ6ICglZCkgJXMiLAorICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICBnb3RvIHN3c19jbGVhbnVwOworICB9CisKKyAgZmxhZyA9IDE7CisgIGlmKDAgIT0gc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsCisgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSZmbGFnLCBzaXplb2YoZmxhZykpKSB7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgbG9nbXNnKCJzZXRzb2Nrb3B0KFNPX1JFVVNFQUREUikgZmFpbGVkIHdpdGggZXJyb3I6ICglZCkgJXMiLAorICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICBnb3RvIHN3c19jbGVhbnVwOworICB9CisKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBpZighdXNlX2lwdjYpIHsKKyNlbmRpZgorICAgIG1lbXNldCgmbWUuc2E0LCAwLCBzaXplb2YobWUuc2E0KSk7CisgICAgbWUuc2E0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIG1lLnNhNC5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworICAgIG1lLnNhNC5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworICAgIHJjID0gYmluZChzb2NrLCAmbWUuc2EsIHNpemVvZihtZS5zYTQpKTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICB9CisgIGVsc2UgeworICAgIG1lbXNldCgmbWUuc2E2LCAwLCBzaXplb2YobWUuc2E2KSk7CisgICAgbWUuc2E2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgbWUuc2E2LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworICAgIG1lLnNhNi5zaW42X3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICByYyA9IGJpbmQoc29jaywgJm1lLnNhLCBzaXplb2YobWUuc2E2KSk7CisgIH0KKyNlbmRpZiAvKiBFTkFCTEVfSVBWNiAqLworICBpZigwICE9IHJjKSB7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgbG9nbXNnKCJFcnJvciBiaW5kaW5nIHNvY2tldCBvbiBwb3J0ICVodTogKCVkKSAlcyIsCisgICAgICAgICAgIHBvcnQsIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgIGdvdG8gc3dzX2NsZWFudXA7CisgIH0KKworICBsb2dtc2coIlJ1bm5pbmcgJXMgJXMgdmVyc2lvbiBvbiBwb3J0ICVkIiwKKyAgICAgICAgIHVzZV9nb3BoZXI/IkdPUEhFUiI6IkhUVFAiLCBpcHZfaW51c2UsIChpbnQpcG9ydCk7CisKKyAgLyogc3RhcnQgYWNjZXB0aW5nIGNvbm5lY3Rpb25zICovCisgIHJjID0gbGlzdGVuKHNvY2ssIDUpOworICBpZigwICE9IHJjKSB7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgbG9nbXNnKCJsaXN0ZW4oKSBmYWlsZWQgd2l0aCBlcnJvcjogKCVkKSAlcyIsCisgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgIGdvdG8gc3dzX2NsZWFudXA7CisgIH0KKworICAvKgorICAqKiBBcyBzb29uIGFzIHRoaXMgc2VydmVyIHdyaXRlcyBpdHMgcGlkIGZpbGUgdGhlIHRlc3QgaGFybmVzcyB3aWxsCisgICoqIGF0dGVtcHQgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZlciBhbmQgaW5pdGlhdGUgaXRzIHZlcmlmaWNhdGlvbi4KKyAgKi8KKworICB3cm90ZXBpZGZpbGUgPSB3cml0ZV9waWRmaWxlKHBpZG5hbWUpOworICBpZighd3JvdGVwaWRmaWxlKQorICAgIGdvdG8gc3dzX2NsZWFudXA7CisKKyAgZm9yICg7OykgeworICAgIG1zZ3NvY2sgPSBhY2NlcHQoc29jaywgTlVMTCwgTlVMTCk7CisKKyAgICBpZihnb3RfZXhpdF9zaWduYWwpCisgICAgICBicmVhazsKKyAgICBpZiAoQ1VSTF9TT0NLRVRfQkFEID09IG1zZ3NvY2spIHsKKyAgICAgIGVycm9yID0gU09DS0VSUk5POworICAgICAgbG9nbXNnKCJNQUpPUiBFUlJPUjogYWNjZXB0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICglZCkgJXMiLAorICAgICAgICAgICAgIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyoKKyAgICAqKiBBcyBzb29uIGFzIHRoaXMgc2VydmVyIGFjZXB0cyBhIGNvbm5lY3Rpb24gZnJvbSB0aGUgdGVzdCBoYXJuZXNzIGl0CisgICAgKiogbXVzdCBzZXQgdGhlIHNlcnZlciBsb2dzIGFkdmlzb3IgcmVhZCBsb2NrIHRvIGluZGljYXRlIHRoYXQgc2VydmVyCisgICAgKiogbG9ncyBzaG91bGQgbm90IGJlIHJlYWQgdW50aWwgdGhpcyBsb2NrIGlzIHJlbW92ZWQgYnkgdGhpcyBzZXJ2ZXIuCisgICAgKi8KKworICAgIHNldF9hZHZpc29yX3JlYWRfbG9jayhTRVJWRVJMT0dTX0xPQ0spOworICAgIHNlcnZlcmxvZ3Nsb2NrZWQgPSAxOworCisjaWZkZWYgQ1VSTF9TV1NfRk9SS19FTkFCTEVECisgICAgaWYodXNlX2ZvcmspIHsKKyAgICAgIC8qIFRoZSBmb3JrIGVuYWJsZWQgdmVyc2lvbiBqdXN0IGZvcmtzIG9mZiB0aGUgY2hpbGQgYW5kIGRvbid0IGNhcmUKKyAgICAgICAgIGFib3V0IGl0IGFueW1vcmUsIHNvIGRvbid0IGFzc3VtZSBvdGhlcndpc2UuIEJld2FyZSBhbmQgZG9uJ3QgZG8KKyAgICAgICAgIHRoaXMgYXQgaG9tZS4gKi8KKyAgICAgIHJjID0gZm9yaygpOworICAgICAgaWYoLTEgPT0gcmMpIHsKKyAgICAgICAgcHJpbnRmKCJNQUpPUiBFUlJPUjogZm9yaygpIGZhaWxlZCFcbiIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgLyogbm90IGEgZm9yaywganVzdCBzZXQgcmMgc28gdGhlIGZvbGxvd2luZyBwcm9jZWVkcyBuaWNlbHkgKi8KKyAgICAgIHJjID0gMDsKKyAgICAvKiAwIGlzIHJldHVybmVkIHRvIHRoZSBjaGlsZCAqLworICAgIGlmKDAgPT0gcmMpIHsKKyNlbmRpZgorICAgIGxvZ21zZygiPT09PT4gQ2xpZW50IGNvbm5lY3QiKTsKKworI2lmZGVmIFRDUF9OT0RFTEFZCisgICAgLyoKKyAgICAgKiBEaXNhYmxlIHRoZSBOYWdsZSBhbGdvcml0aG0gdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2VuZCBvdXQgYSBsYXJnZQorICAgICAqIHJlc3BvbnNlIGluIG1hbnkgc21hbGwgc2VnbWVudHMgdG8gdG9ydHVyZSB0aGUgY2xpZW50cyBtb3JlLgorICAgICAqLworICAgIGZsYWcgPSAxOworICAgIGlmKDAgIT0gc2V0c29ja29wdChtc2dzb2NrLCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksCisgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopJmZsYWcsIHNpemVvZihmbGFnKSkpCisgICAgICBsb2dtc2coIj09PT0+IFRDUF9OT0RFTEFZIGZhaWxlZCIpOworICAgIGVsc2UKKyAgICAgIGxvZ21zZygiVENQX05PREVMQVkgc2V0Iik7CisjZW5kaWYKKworICAgIC8qIGluaXRpYWxpemF0aW9uIG9mIGh0dHByZXF1ZXN0IHN0cnVjdCBpcyBkb25lIGluIGdldF9yZXF1ZXN0KCksIGJ1dCBkdWUKKyAgICAgICB0byBwaXBlbGluaW5nIHRyZWF0bWVudCB0aGUgcGlwZWxpbmluZyBzdHJ1Y3QgZmllbGQgbXVzdCBiZSBpbml0aWFsaXplZAorICAgICAgIHByZXZpb3VzbHkgdG8gRkFMU0UgZXZlcnkgdGltZSBhIG5ldyBjb25uZWN0aW9uIGFycml2ZXMuICovCisKKyAgICByZXEucGlwZWxpbmluZyA9IEZBTFNFOworCisgICAgZG8geworICAgICAgaWYoZ290X2V4aXRfc2lnbmFsKQorICAgICAgICBicmVhazsKKworICAgICAgaWYoZ2V0X3JlcXVlc3QobXNnc29jaywgJnJlcSkpCisgICAgICAgIC8qIG5vbi16ZXJvIG1lYW5zIGVycm9yLCBicmVhayBvdXQgb2YgbG9vcCAqLworICAgICAgICBicmVhazsKKworICAgICAgaWYocHJldmJvdW5jZSkgeworICAgICAgICAvKiBib3VuY2UgdHJlYXRtZW50IHJlcXVlc3RlZCAqLworICAgICAgICBpZigocmVxLnRlc3RubyA9PSBwcmV2dGVzdG5vKSAmJgorICAgICAgICAgICAocmVxLnBhcnRubyA9PSBwcmV2cGFydG5vKSkgeworICAgICAgICAgIHJlcS5wYXJ0bm8rKzsKKyAgICAgICAgICBsb2dtc2coIkJPVU5DRSBwYXJ0IG51bWJlciB0byAlbGQiLCByZXEucGFydG5vKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBwcmV2Ym91bmNlID0gRkFMU0U7CisgICAgICAgICAgcHJldnRlc3RubyA9IC0xOworICAgICAgICAgIHByZXZwYXJ0bm8gPSAtMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBzZW5kX2RvYyhtc2dzb2NrLCAmcmVxKTsKKyAgICAgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGlmKERPQ05VTUJFUl9DT05ORUNUID09IHJlcS50ZXN0bm8pIHsKKyAgICAgICAgLyogYSBDT05ORUNUIHJlcXVlc3QsIHNldHVwIGFuZCB0YWxrIHRoZSB0dW5uZWwgKi8KKyAgICAgICAgaWYoIWlzX3Byb3h5KSB7CisgICAgICAgICAgbG9nbXNnKCJyZWNlaXZlZCBDT05ORUNUIGJ1dCBpc24ndCBydW5uaW5nIGFzIHByb3h5ISBFWElUIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGh0dHBfY29ubmVjdCgmbXNnc29jaywgc29jaywgJnJlcSwgaG9zdHBvcnQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYoKHJlcS50ZXN0bm8gPCAwKSAmJiAocmVxLnRlc3RubyAhPSBET0NOVU1CRVJfQ09OTkVDVCkpIHsKKyAgICAgICAgbG9nbXNnKCJzcGVjaWFsIHJlcXVlc3QgcmVjZWl2ZWQsIG5vIHBlcnNpc3RlbmN5Iik7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYoIXJlcS5vcGVuKSB7CisgICAgICAgIGxvZ21zZygiaW5zdHJ1Y3RlZCB0byBjbG9zZSBjb25uZWN0aW9uIGFmdGVyIHNlcnZlci1yZXBseSIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgaWYocmVxLm9wZW4pIHsKKyAgICAgICAgbG9nbXNnKCI9PiBwZXJzaXN0YW50IGNvbm5lY3Rpb24gcmVxdWVzdCBlbmRlZCwgYXdhaXRzIG5ldyByZXF1ZXN0XG4iKTsKKyAgICAgICAgLyoKKyAgICAgICAgY29uc3QgY2hhciAqa2VlcG9wZW49IltLRUVQSU5HIENPTk5FQ1RJT04gT1BFTl0iOworICAgICAgICBzdG9yZXJlcXVlc3QoKGNoYXIgKilrZWVwb3Blbiwgc3RybGVuKGtlZXBvcGVuKSk7CisgICAgICAgICovCisgICAgICB9CisgICAgICAvKiBpZiB3ZSBnb3QgYSBDT05ORUNULCBsb29wIGFuZCBnZXQgYW5vdGhlciByZXF1ZXN0IGFzIHdlbGwhICovCisgICAgfSB3aGlsZShyZXEub3BlbiB8fCAocmVxLnRlc3RubyA9PSBET0NOVU1CRVJfQ09OTkVDVCkpOworCisgICAgaWYoZ290X2V4aXRfc2lnbmFsKQorICAgICAgYnJlYWs7CisKKyAgICBsb2dtc2coIj09PT0+IENsaWVudCBkaXNjb25uZWN0Iik7CisKKyAgICBpZighcmVxLm9wZW4pCisgICAgICAvKiBXaGVuIGluc3RydWN0ZWQgdG8gY2xvc2UgY29ubmVjdGlvbiBhZnRlciBzZXJ2ZXItcmVwbHkgd2UKKyAgICAgICAgIHdhaXQgYSB2ZXJ5IHNtYWxsIGFtb3VudCBvZiB0aW1lIGJlZm9yZSBkb2luZyBzby4gSWYgdGhpcworICAgICAgICAgaXMgbm90IGRvbmUgY2xpZW50IG1pZ2h0IGdldCBhbiBFQ09OTlJFU0VUIGJlZm9yZSByZWFkaW5nCisgICAgICAgICBhIHNpbmdsZSBieXRlIG9mIHNlcnZlci1yZXBseS4gKi8KKyAgICAgIHdhaXRfbXMoNTApOworCisgICAgaWYobXNnc29jayAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKKyAgICAgIHNjbG9zZShtc2dzb2NrKTsKKyAgICAgIG1zZ3NvY2sgPSBDVVJMX1NPQ0tFVF9CQUQ7CisgICAgfQorCisgICAgaWYoc2VydmVybG9nc2xvY2tlZCkgeworICAgICAgc2VydmVybG9nc2xvY2tlZCA9IDA7CisgICAgICBjbGVhcl9hZHZpc29yX3JlYWRfbG9jayhTRVJWRVJMT0dTX0xPQ0spOworICAgIH0KKworICAgIGlmIChyZXEudGVzdG5vID09IERPQ05VTUJFUl9RVUlUKQorICAgICAgYnJlYWs7CisjaWZkZWYgQ1VSTF9TV1NfRk9SS19FTkFCTEVECisgICAgfQorI2VuZGlmCisgIH0KKworc3dzX2NsZWFudXA6CisKKyAgaWYoKG1zZ3NvY2sgIT0gc29jaykgJiYgKG1zZ3NvY2sgIT0gQ1VSTF9TT0NLRVRfQkFEKSkKKyAgICBzY2xvc2UobXNnc29jayk7CisKKyAgaWYoc29jayAhPSBDVVJMX1NPQ0tFVF9CQUQpCisgICAgc2Nsb3NlKHNvY2spOworCisgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICBsb2dtc2coInNpZ25hbGxlZCB0byBkaWUiKTsKKworICBpZih3cm90ZXBpZGZpbGUpCisgICAgdW5saW5rKHBpZG5hbWUpOworCisgIGlmKHNlcnZlcmxvZ3Nsb2NrZWQpIHsKKyAgICBzZXJ2ZXJsb2dzbG9ja2VkID0gMDsKKyAgICBjbGVhcl9hZHZpc29yX3JlYWRfbG9jayhTRVJWRVJMT0dTX0xPQ0spOworICB9CisKKyAgcmVzdG9yZV9zaWduYWxfaGFuZGxlcnMoKTsKKworICBpZihnb3RfZXhpdF9zaWduYWwpIHsKKyAgICBsb2dtc2coIj09PT09PT09PiAlcyBzd3MgKHBvcnQ6ICVkIHBpZDogJWxkKSBleGl0cyB3aXRoIHNpZ25hbCAoJWQpIiwKKyAgICAgICAgICAgaXB2X2ludXNlLCAoaW50KXBvcnQsIHBpZCwgZXhpdF9zaWduYWwpOworICAgIC8qCisgICAgICogVG8gcHJvcGVybHkgc2V0IHRoZSByZXR1cm4gc3RhdHVzIG9mIHRoZSBwcm9jZXNzIHdlCisgICAgICogbXVzdCByYWlzZSB0aGUgc2FtZSBzaWduYWwgU0lHSU5UIG9yIFNJR1RFUk0gdGhhdCB3ZQorICAgICAqIGNhdWdodCBhbmQgbGV0IHRoZSBvbGQgaGFuZGxlciB0YWtlIGNhcmUgb2YgaXQuCisgICAgICovCisgICAgcmFpc2UoZXhpdF9zaWduYWwpOworICB9CisKKyAgbG9nbXNnKCI9PT09PT09PT4gc3dzIHF1aXRzIik7CisgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvdGVzdHBhcnQuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci90ZXN0cGFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MDk3MTQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvdGVzdHBhcnQuYwpAQCAtMCwwICsxLDU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBDVVJMX05PX09MRElFUworCisjaW5jbHVkZSAic2V0dXAuaCIKKworI2luY2x1ZGUgImdldHBhcnQuaCIKKworI2RlZmluZSBfTVBSSU5URl9SRVBMQUNFIC8qIHVzZSBvdXIgZnVuY3Rpb25zIG9ubHkgKi8KKyNpbmNsdWRlIDxjdXJsL21wcmludGYuaD4KKworLyogaW5jbHVkZSBtZW1kZWJ1Zy5oIGxhc3QgKi8KKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCByYzsKKyAgY2hhciAgKnBhcnQ7CisgIHNpemVfdCBwYXJ0bGVuLCBpOworCisgIGlmKGFyZ2M8IDMpIHsKKyAgICBwcmludGYoIi4vdGVzdHBhcnQgbWFpbiBzdWJcbiIpOworICB9CisgIGVsc2UgeworICAgIHJjID0gZ2V0cGFydCgmcGFydCwgJnBhcnRsZW4sIGFyZ3ZbMV0sIGFyZ3ZbMl0sIHN0ZGluKTsKKyAgICBpZihyYykKKyAgICAgIHJldHVybihyYyk7CisgICAgZm9yKGkgPSAwOyBpIDwgcGFydGxlbjsgaSsrKQorICAgICAgcHJpbnRmKCIlYyIsIHBhcnRbaV0pOworICAgIGZyZWUocGFydCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci90ZnRwLmggYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvdGZ0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MGYxMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvdGZ0cC5oCkBAIC0wLDAgKzEsNTcgQEAKKyNpZm5kZWYgX19TRVJWRVJfVEZUUF9ICisjZGVmaW5lIF9fU0VSVkVSX1RGVFBfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwOCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZmlsZSBpcyBhIHJld3JpdGUvY2xvbmUgb2YgdGhlIGFycGEvdGZ0cC5oIGZpbGUgZm9yIHN5c3RlbXMgd2l0aG91dAorICAgaXQuICovCisKKyNkZWZpbmUgU0VHU0laRSA1MTIgLyogZGF0YSBzZWdtZW50IHNpemUgKi8KKworI2lmbmRlZiBfX0dOVUNfXworI2RlZmluZSBfX2F0dHJpYnV0ZV9fKHgpCisjZW5kaWYKKworLyogVXNpbmcgYSBwYWNrZWQgc3RydWN0IGFzIGJpbmFyeSBpbiBhIHByb2dyYW0gaXMgYmVnZ2luZyBmb3IgcHJvYmxlbXMsIGJ1dAorICAgdGhlIHRmdHBkIHNlcnZlciB3YXMgd3JpdHRlbiBsaWtlIHRoaXMgc28gd2UgaGF2ZSB0aGlzIHN0cnVjdCBoZXJlIHRvIG1ha2UKKyAgIHRoaW5ncyBidWlsZC4gKi8KKworc3RydWN0IHRmdHBoZHIgeworICBzaG9ydCB0aF9vcGNvZGU7ICAgICAgICAgLyogcGFja2V0IHR5cGUgKi8KKyAgdW5zaWduZWQgc2hvcnQgdGhfYmxvY2s7IC8qIGFsbCBzb3J0cyBvZiB0aGluZ3MgKi8KKyAgY2hhciB0aF9kYXRhWzFdOyAgICAgICAgIC8qIGRhdGEgb3IgZXJyb3Igc3RyaW5nICovCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUgdGhfc3R1ZmYgdGhfYmxvY2sKKyNkZWZpbmUgdGhfY29kZSAgdGhfYmxvY2sKKyNkZWZpbmUgdGhfbXNnICAgdGhfZGF0YQorCisjZGVmaW5lIEVVTkRFRiAgICAwCisjZGVmaW5lIEVOT1RGT1VORCAxCisjZGVmaW5lIEVBQ0NFU1MgICAyCisjZGVmaW5lIEVOT1NQQUNFICAzCisjZGVmaW5lIEVCQURPUCAgICA0CisjZGVmaW5lIEVCQURJRCAgICA1CisjZGVmaW5lIEVFWElTVFMgICA2CisjZGVmaW5lIEVOT1VTRVIgICA3CisKKyNlbmRpZiAvKiBfX1NFUlZFUl9URlRQX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci90ZnRwZC5jIGIvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL3RmdHBkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmYjcxNwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci90ZnRwZC5jCkBAIC0wLDAgKzEsMTMwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICoKKyAqIFRyaXZpYWwgZmlsZSB0cmFuc2ZlciBwcm90b2NvbCBzZXJ2ZXIuCisgKgorICogVGhpcyBjb2RlIGluY2x1ZGVzIG1hbnkgbW9kaWZpY2F0aW9ucyBieSBKaW0gR3V5dG9uIDxndXl0b25AcmFuZC11bml4PgorICoKKyAqIFRoaXMgc291cmNlIGZpbGUgd2FzIHN0YXJ0ZWQgYmFzZWQgb24gbmV0a2l0LXRmdHBkIDAuMTcKKyAqIEhlYXZpbHkgbW9kaWZpZWQgZm9yIGN1cmwncyB0ZXN0IHN1aXRlCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MyBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqICAgICAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNkZWZpbmUgQ1VSTF9OT19PTERJRVMKKworI2luY2x1ZGUgInNldHVwLmgiIC8qIHBvcnRhYmlsaXR5IGhlbHAgZnJvbSB0aGUgbGliIGRpcmVjdG9yeSAqLworCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfVEZUUF9ICisjaW5jbHVkZSA8YXJwYS90ZnRwLmg+CisjZWxzZQorI2luY2x1ZGUgInRmdHAuaCIKKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19GSUxJT19ICisvKiBGSU9OUkVBRCBvbiBTb2xhcmlzIDcgKi8KKyNpbmNsdWRlIDxzeXMvZmlsaW8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c2V0am1wLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9QV0RfSAorI2luY2x1ZGUgPHB3ZC5oPgorI2VuZGlmCisKKyNkZWZpbmUgRU5BQkxFX0NVUkxYX1BSSU5URgorLyogbWFrZSB0aGUgY3VybHggaGVhZGVyIGRlZmluZSBhbGwgcHJpbnRmKCkgZnVuY3Rpb25zIHRvIHVzZSB0aGUgY3VybHhfKgorICAgdmVyc2lvbnMgaW5zdGVhZCAqLworI2luY2x1ZGUgImN1cmx4LmgiIC8qIGZyb20gdGhlIHByaXZhdGUgbGliIGRpciAqLworI2luY2x1ZGUgImdldHBhcnQuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAic2VydmVyX3NvY2thZGRyLmgiCisKKy8qIGluY2x1ZGUgbWVtZGVidWcuaCBsYXN0ICovCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgIFNUUlVDVCBERUNMQVJBVElPTlMgQU5EIERFRklORVMgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFBLVFNJWkUKKyNkZWZpbmUgUEtUU0laRSAoU0VHU0laRSArIDQpICAvKiBTRUdTSVpFIGRlZmluZWQgaW4gYXJwYS90ZnRwLmggKi8KKyNlbmRpZgorCitzdHJ1Y3QgdGVzdGNhc2UgeworICBjaGFyICpidWZmZXI7ICAgLyogaG9sZHMgdGhlIGZpbGUgZGF0YSB0byBzZW5kIHRvIHRoZSBjbGllbnQgKi8KKyAgc2l6ZV90IGJ1ZnNpemU7IC8qIHNpemUgb2YgdGhlIGRhdGEgaW4gYnVmZmVyICovCisgIGNoYXIgKnJwdHI7ICAgICAvKiByZWFkIHBvaW50ZXIgaW50byB0aGUgYnVmZmVyICovCisgIHNpemVfdCByY291bnQ7ICAvKiBhbW91bnQgb2YgZGF0YSBsZWZ0IHRvIHJlYWQgb2YgdGhlIGZpbGUgKi8KKyAgbG9uZyBudW07ICAgICAgIC8qIHRlc3QgY2FzZSBudW1iZXIgKi8KKyAgaW50IG9maWxlOyAgICAgIC8qIGZpbGUgZGVzY3JpcHRvciBmb3Igb3V0cHV0IGZpbGUgd2hlbiB1cGxvYWRpbmcgdG8gdXMgKi8KK307CisKK3N0cnVjdCBmb3JtYXRzIHsKKyAgY29uc3QgY2hhciAqZl9tb2RlOworICBpbnQgZl9jb252ZXJ0OworfTsKKworc3RydWN0IGVycm1zZyB7CisgIGludCBlX2NvZGU7CisgIGNvbnN0IGNoYXIgKmVfbXNnOworfTsKKwordHlwZWRlZiB1bmlvbiB7CisgIHN0cnVjdCB0ZnRwaGRyIGhkcjsKKyAgY2hhciBzdG9yYWdlW1BLVFNJWkVdOworfSB0ZnRwaGRyX3N0b3JhZ2VfdDsKKworLyoKKyAqIGJmLmNvdW50ZXIgdmFsdWVzIGluIHJhbmdlIFstMSAuLiBTRUdTSVpFXSByZXByZXNlbnRzIHNpemUgb2YgZGF0YSBpbiB0aGUKKyAqIGJmLmJ1ZiBidWZmZXIuIEFkZGl0aW9uYWxseSBpdCBjYW4gYWxzbyBob2xkIGZsYWdzIEJGX0FMTE9DIG9yIEJGX0ZSRUUuCisgKi8KKworc3RydWN0IGJmIHsKKyAgaW50IGNvdW50ZXI7ICAgICAgICAgICAgLyogc2l6ZSBvZiBkYXRhIGluIGJ1ZmZlciwgb3IgZmxhZyAqLworICB0ZnRwaGRyX3N0b3JhZ2VfdCBidWY7ICAvKiByb29tIGZvciBkYXRhIHBhY2tldCAqLworfTsKKworI2RlZmluZSBCRl9BTExPQyAtMyAgICAgICAvKiBhbGxvYydkIGJ1dCBub3QgeWV0IGZpbGxlZCAqLworI2RlZmluZSBCRl9GUkVFICAtMiAgICAgICAvKiBmcmVlICovCisKKyNkZWZpbmUgb3Bjb2RlX1JSUSAgIDEKKyNkZWZpbmUgb3Bjb2RlX1dSUSAgIDIKKyNkZWZpbmUgb3Bjb2RlX0RBVEEgIDMKKyNkZWZpbmUgb3Bjb2RlX0FDSyAgIDQKKyNkZWZpbmUgb3Bjb2RlX0VSUk9SIDUKKworI2RlZmluZSBUSU1FT1VUICAgICAgNQorCisjdW5kZWYgTUlOCisjZGVmaW5lIE1JTih4LHkpICgoeCk8KHkpPyh4KTooeSkpCisKKyNpZm5kZWYgREVGQVVMVF9MT0dGSUxFCisjZGVmaW5lIERFRkFVTFRfTE9HRklMRSAibG9nL3RmdHBkLmxvZyIKKyNlbmRpZgorCisjZGVmaW5lIFJFUVVFU1RfRFVNUCAgImxvZy9zZXJ2ZXIuaW5wdXQiCisKKyNkZWZpbmUgREVGQVVMVF9QT1JUIDg5OTkgLyogVURQICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMT0JBTCBWQVJJQUJMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBlcnJtc2cgZXJybXNnc1tdID0geworICB7IEVVTkRFRiwgICAgICAgIlVuZGVmaW5lZCBlcnJvciBjb2RlIiB9LAorICB7IEVOT1RGT1VORCwgICAgIkZpbGUgbm90IGZvdW5kIiB9LAorICB7IEVBQ0NFU1MsICAgICAgIkFjY2VzcyB2aW9sYXRpb24iIH0sCisgIHsgRU5PU1BBQ0UsICAgICAiRGlzayBmdWxsIG9yIGFsbG9jYXRpb24gZXhjZWVkZWQiIH0sCisgIHsgRUJBRE9QLCAgICAgICAiSWxsZWdhbCBURlRQIG9wZXJhdGlvbiIgfSwKKyAgeyBFQkFESUQsICAgICAgICJVbmtub3duIHRyYW5zZmVyIElEIiB9LAorICB7IEVFWElTVFMsICAgICAgIkZpbGUgYWxyZWFkeSBleGlzdHMiIH0sCisgIHsgRU5PVVNFUiwgICAgICAiTm8gc3VjaCB1c2VyIiB9LAorICB7IC0xLCAgICAgICAgICAgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGZvcm1hdHMgZm9ybWF0YVtdID0geworICB7ICJuZXRhc2NpaSIsICAgMSB9LAorICB7ICJvY3RldCIsICAgICAgMCB9LAorICB7IE5VTEwsICAgICAgICAgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGJmIGJmc1syXTsKKworc3RhdGljIGludCBuZXh0b25lOyAgICAgLyogaW5kZXggb2YgbmV4dCBidWZmZXIgdG8gdXNlICovCitzdGF0aWMgaW50IGN1cnJlbnQ7ICAgICAvKiBpbmRleCBvZiBidWZmZXIgaW4gdXNlICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2wgZmxhZ3MgZm9yIGNybGYgY29udmVyc2lvbnMgKi8KK3N0YXRpYyBpbnQgbmV3bGluZSA9IDA7ICAgIC8qIGZpbGxidWY6IGluIG1pZGRsZSBvZiBuZXdsaW5lIGV4cGFuc2lvbiAqLworc3RhdGljIGludCBwcmV2Y2hhciA9IC0xOyAgLyogcHV0YnVmOiBwcmV2aW91cyBjaGFyIChjciBjaGVjaykgKi8KKworc3RhdGljIHRmdHBoZHJfc3RvcmFnZV90IGJ1ZjsKK3N0YXRpYyB0ZnRwaGRyX3N0b3JhZ2VfdCBhY2tidWY7CisKK3N0YXRpYyBzcnZyX3NvY2thZGRyX3VuaW9uX3QgZnJvbTsKK3N0YXRpYyBjdXJsX3NvY2tsZW5fdCBmcm9tbGVuOworCitzdGF0aWMgY3VybF9zb2NrZXRfdCBwZWVyID0gQ1VSTF9TT0NLRVRfQkFEOworCitzdGF0aWMgaW50IHRpbWVvdXQ7CitzdGF0aWMgaW50IG1heHRpbWVvdXQgPSA1ICogVElNRU9VVDsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IHNlbmRibG9jazsgLyogYmxvY2sgY291bnQgdXNlZCBieSBzZW5kdGZ0cCgpICovCitzdGF0aWMgc3RydWN0IHRmdHBoZHIgKnNkcDsgICAgICAvKiBkYXRhIGJ1ZmZlciB1c2VkIGJ5IHNlbmR0ZnRwKCkgKi8KK3N0YXRpYyBzdHJ1Y3QgdGZ0cGhkciAqc2FwOyAgICAgIC8qIGFjayBidWZmZXIgIHVzZWQgYnkgc2VuZHRmdHAoKSAqLworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgcmVjdmJsb2NrOyAvKiBibG9jayBjb3VudCB1c2VkIGJ5IHJlY3Z0ZnRwKCkgKi8KK3N0YXRpYyBzdHJ1Y3QgdGZ0cGhkciAqcmRwOyAgICAgIC8qIGRhdGEgYnVmZmVyIHVzZWQgYnkgcmVjdnRmdHAoKSAqLworc3RhdGljIHN0cnVjdCB0ZnRwaGRyICpyYXA7ICAgICAgLyogYWNrIGJ1ZmZlciAgdXNlZCBieSByZWN2dGZ0cCgpICovCisKKyNpZmRlZiBFTkFCTEVfSVBWNgorc3RhdGljIGJvb2wgdXNlX2lwdjYgPSBGQUxTRTsKKyNlbmRpZgorc3RhdGljIGNvbnN0IGNoYXIgKmlwdl9pbnVzZSA9ICJJUHY0IjsKKworY29uc3QgIGNoYXIgKnNlcnZlcmxvZ2ZpbGUgPSBERUZBVUxUX0xPR0ZJTEU7CitzdGF0aWMgY2hhciAqcGlkbmFtZT0gKGNoYXIgKikiLnRmdHBkLnBpZCI7CitzdGF0aWMgaW50IHNlcnZlcmxvZ3Nsb2NrZWQgPSAwOworc3RhdGljIGludCB3cm90ZXBpZGZpbGUgPSAwOworCisjaWZkZWYgSEFWRV9TSUdTRVRKTVAKK3N0YXRpYyBzaWdqbXBfYnVmIHRpbWVvdXRidWY7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9BTEFSTSkgJiYgZGVmaW5lZChTSUdBTFJNKQorc3RhdGljIGludCByZXhtdHZhbCA9IFRJTUVPVVQ7CisjZW5kaWYKKworLyogZG8tbm90aGluZyBtYWNybyByZXBsYWNlbWVudCBmb3Igc3lzdGVtcyB3aGljaCBsYWNrIHNpZ2ludGVycnVwdCgpICovCisKKyNpZm5kZWYgSEFWRV9TSUdJTlRFUlJVUFQKKyNkZWZpbmUgc2lnaW50ZXJydXB0KHgseSkgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCisvKiB2YXJzIHVzZWQgdG8ga2VlcCBhcm91bmQgcHJldmlvdXMgc2lnbmFsIGhhbmRsZXJzICovCisKK3R5cGVkZWYgUkVUU0lHVFlQRSAoKlNJR0hBTkRMRVJfVCkoaW50KTsKKworI2lmZGVmIFNJR0hVUAorc3RhdGljIFNJR0hBTkRMRVJfVCBvbGRfc2lnaHVwX2hhbmRsZXIgID0gU0lHX0VSUjsKKyNlbmRpZgorCisjaWZkZWYgU0lHUElQRQorc3RhdGljIFNJR0hBTkRMRVJfVCBvbGRfc2lncGlwZV9oYW5kbGVyID0gU0lHX0VSUjsKKyNlbmRpZgorCisjaWZkZWYgU0lHSU5UCitzdGF0aWMgU0lHSEFORExFUl9UIG9sZF9zaWdpbnRfaGFuZGxlciAgPSBTSUdfRVJSOworI2VuZGlmCisKKyNpZmRlZiBTSUdURVJNCitzdGF0aWMgU0lHSEFORExFUl9UIG9sZF9zaWd0ZXJtX2hhbmRsZXIgPSBTSUdfRVJSOworI2VuZGlmCisKKy8qIHZhciB3aGljaCBpZiBzZXQgaW5kaWNhdGVzIHRoYXQgdGhlIHByb2dyYW0gc2hvdWxkIGZpbmlzaCBleGVjdXRpb24gKi8KKworU0lHX0FUT01JQ19UIGdvdF9leGl0X3NpZ25hbCA9IDA7CisKKy8qIGlmIG5leHQgaXMgc2V0IGluZGljYXRlcyB0aGUgZmlyc3Qgc2lnbmFsIGhhbmRsZWQgaW4gZXhpdF9zaWduYWxfaGFuZGxlciAqLworCitzdGF0aWMgdm9sYXRpbGUgaW50IGV4aXRfc2lnbmFsID0gMDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIFBST1RPVFlQRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHRmdHBoZHIgKnJ3X2luaXQoaW50KTsKKworc3RhdGljIHN0cnVjdCB0ZnRwaGRyICp3X2luaXQodm9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdGZ0cGhkciAqcl9pbml0KHZvaWQpOworCitzdGF0aWMgaW50IHJlYWRpdChzdHJ1Y3QgdGVzdGNhc2UgKnRlc3QsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGZ0cGhkciAqKmRwcCwKKyAgICAgICAgICAgICAgICAgIGludCBjb252ZXJ0KTsKKworc3RhdGljIGludCB3cml0ZWl0KHN0cnVjdCB0ZXN0Y2FzZSAqdGVzdCwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGZ0cGhkciAqKmRwcCwKKyAgICAgICAgICAgICAgICAgICBpbnQgY3QsCisgICAgICAgICAgICAgICAgICAgaW50IGNvbnZlcnQpOworCitzdGF0aWMgdm9pZCByZWFkX2FoZWFkKHN0cnVjdCB0ZXN0Y2FzZSAqdGVzdCwgaW50IGNvbnZlcnQpOworCitzdGF0aWMgc3NpemVfdCB3cml0ZV9iZWhpbmQoc3RydWN0IHRlc3RjYXNlICp0ZXN0LCBpbnQgY29udmVydCk7CisKK3N0YXRpYyBpbnQgc3luY2huZXQoY3VybF9zb2NrZXRfdCk7CisKK3N0YXRpYyBpbnQgZG9fdGZ0cChzdHJ1Y3QgdGVzdGNhc2UgKnRlc3QsIHN0cnVjdCB0ZnRwaGRyICp0cCwgc3NpemVfdCBzaXplKTsKKworc3RhdGljIGludCB2YWxpZGF0ZV9hY2Nlc3Moc3RydWN0IHRlc3RjYXNlICp0ZXN0LCBjb25zdCBjaGFyICpmbmFtZSwgaW50IG1vZGUpOworCitzdGF0aWMgdm9pZCBzZW5kdGZ0cChzdHJ1Y3QgdGVzdGNhc2UgKnRlc3QsIHN0cnVjdCBmb3JtYXRzICpwZik7CisKK3N0YXRpYyB2b2lkIHJlY3Z0ZnRwKHN0cnVjdCB0ZXN0Y2FzZSAqdGVzdCwgc3RydWN0IGZvcm1hdHMgKnBmKTsKKworc3RhdGljIHZvaWQgbmFrKGludCBlcnJvcik7CisKKyNpZiBkZWZpbmVkKEhBVkVfQUxBUk0pICYmIGRlZmluZWQoU0lHQUxSTSkKKworc3RhdGljIHZvaWQgbXlzaWduYWwoaW50IHNpZywgdm9pZCAoKmhhbmRsZXIpKGludCkpOworCitzdGF0aWMgdm9pZCB0aW1lcihpbnQgc2lnbnVtKTsKKworc3RhdGljIHZvaWQganVzdHRpbWVvdXQoaW50IHNpZ251bSk7CisKKyNlbmRpZiAvKiBIQVZFX0FMQVJNICYmIFNJR0FMUk0gKi8KKworc3RhdGljIFJFVFNJR1RZUEUgZXhpdF9zaWduYWxfaGFuZGxlcihpbnQgc2lnbnVtKTsKKworc3RhdGljIHZvaWQgaW5zdGFsbF9zaWduYWxfaGFuZGxlcnModm9pZCk7CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfc2lnbmFsX2hhbmRsZXJzKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIElNUExFTUVOVEFUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKEhBVkVfQUxBUk0pICYmIGRlZmluZWQoU0lHQUxSTSkKKworLyoKKyAqIExpa2Ugc2lnbmFsKCksIGJ1dCB3aXRoIHdlbGwtZGVmaW5lZCBzZW1hbnRpY3MuCisgKi8KK3N0YXRpYyB2b2lkIG15c2lnbmFsKGludCBzaWcsIHZvaWQgKCpoYW5kbGVyKShpbnQpKQoreworICBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworICBtZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsKKyAgc2Euc2FfaGFuZGxlciA9IGhhbmRsZXI7CisgIHNpZ2FjdGlvbihzaWcsICZzYSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVyKGludCBzaWdudW0pCit7CisgICh2b2lkKXNpZ251bTsKKworICBsb2dtc2coImFsYXJtISIpOworCisgIHRpbWVvdXQgKz0gcmV4bXR2YWw7CisgIGlmKHRpbWVvdXQgPj0gbWF4dGltZW91dCkgeworICAgIGlmKHdyb3RlcGlkZmlsZSkgeworICAgICAgd3JvdGVwaWRmaWxlID0gMDsKKyAgICAgIHVubGluayhwaWRuYW1lKTsKKyAgICB9CisgICAgaWYoc2VydmVybG9nc2xvY2tlZCkgeworICAgICAgc2VydmVybG9nc2xvY2tlZCA9IDA7CisgICAgICBjbGVhcl9hZHZpc29yX3JlYWRfbG9jayhTRVJWRVJMT0dTX0xPQ0spOworICAgIH0KKyAgICBleGl0KDEpOworICB9CisjaWZkZWYgSEFWRV9TSUdTRVRKTVAKKyAgc2lnbG9uZ2ptcCh0aW1lb3V0YnVmLCAxKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBqdXN0dGltZW91dChpbnQgc2lnbnVtKQoreworICAodm9pZClzaWdudW07Cit9CisKKyNlbmRpZiAvKiBIQVZFX0FMQVJNICYmIFNJR0FMUk0gKi8KKworLyogc2lnbmFsIGhhbmRsZXIgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtCisgIHNob3VsZCBmaW5pc2ggaXRzIGV4ZWN1dGlvbiBpbiBhIGNvbnRyb2xsZWQgbWFubmVyIGFzIHNvb24gYXMgcG9zc2libGUuCisgIFRoZSBmaXJzdCB0aW1lIHRoaXMgaXMgY2FsbGVkIGl0IHdpbGwgc2V0IGdvdF9leGl0X3NpZ25hbCB0byBvbmUgYW5kCisgIHN0b3JlIGluIGV4aXRfc2lnbmFsIHRoZSBzaWduYWwgdGhhdCB0cmlnZ2VyZWQgaXRzIGV4ZWN1dGlvbi4gKi8KKworc3RhdGljIFJFVFNJR1RZUEUgZXhpdF9zaWduYWxfaGFuZGxlcihpbnQgc2lnbnVtKQoreworICBpbnQgb2xkX2Vycm5vID0gRVJSTk87CisgIGlmKGdvdF9leGl0X3NpZ25hbCA9PSAwKSB7CisgICAgZ290X2V4aXRfc2lnbmFsID0gMTsKKyAgICBleGl0X3NpZ25hbCA9IHNpZ251bTsKKyAgfQorICAodm9pZClzaWduYWwoc2lnbnVtLCBleGl0X3NpZ25hbF9oYW5kbGVyKTsKKyAgU0VUX0VSUk5PKG9sZF9lcnJubyk7Cit9CisKK3N0YXRpYyB2b2lkIGluc3RhbGxfc2lnbmFsX2hhbmRsZXJzKHZvaWQpCit7CisjaWZkZWYgU0lHSFVQCisgIC8qIGlnbm9yZSBTSUdIVVAgc2lnbmFsICovCisgIGlmKChvbGRfc2lnaHVwX2hhbmRsZXIgPSBzaWduYWwoU0lHSFVQLCBTSUdfSUdOKSkgPT0gU0lHX0VSUikKKyAgICBsb2dtc2coImNhbm5vdCBpbnN0YWxsIFNJR0hVUCBoYW5kbGVyOiAlcyIsIHN0cmVycm9yKEVSUk5PKSk7CisjZW5kaWYKKyNpZmRlZiBTSUdQSVBFCisgIC8qIGlnbm9yZSBTSUdQSVBFIHNpZ25hbCAqLworICBpZigob2xkX3NpZ3BpcGVfaGFuZGxlciA9IHNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKSkgPT0gU0lHX0VSUikKKyAgICBsb2dtc2coImNhbm5vdCBpbnN0YWxsIFNJR1BJUEUgaGFuZGxlcjogJXMiLCBzdHJlcnJvcihFUlJOTykpOworI2VuZGlmCisjaWZkZWYgU0lHSU5UCisgIC8qIGhhbmRsZSBTSUdJTlQgc2lnbmFsIHdpdGggb3VyIGV4aXRfc2lnbmFsX2hhbmRsZXIgKi8KKyAgaWYoKG9sZF9zaWdpbnRfaGFuZGxlciA9IHNpZ25hbChTSUdJTlQsIGV4aXRfc2lnbmFsX2hhbmRsZXIpKSA9PSBTSUdfRVJSKQorICAgIGxvZ21zZygiY2Fubm90IGluc3RhbGwgU0lHSU5UIGhhbmRsZXI6ICVzIiwgc3RyZXJyb3IoRVJSTk8pKTsKKyAgZWxzZQorICAgIHNpZ2ludGVycnVwdChTSUdJTlQsIDEpOworI2VuZGlmCisjaWZkZWYgU0lHVEVSTQorICAvKiBoYW5kbGUgU0lHVEVSTSBzaWduYWwgd2l0aCBvdXIgZXhpdF9zaWduYWxfaGFuZGxlciAqLworICBpZigob2xkX3NpZ3Rlcm1faGFuZGxlciA9IHNpZ25hbChTSUdURVJNLCBleGl0X3NpZ25hbF9oYW5kbGVyKSkgPT0gU0lHX0VSUikKKyAgICBsb2dtc2coImNhbm5vdCBpbnN0YWxsIFNJR1RFUk0gaGFuZGxlcjogJXMiLCBzdHJlcnJvcihFUlJOTykpOworICBlbHNlCisgICAgc2lnaW50ZXJydXB0KFNJR1RFUk0sIDEpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfc2lnbmFsX2hhbmRsZXJzKHZvaWQpCit7CisjaWZkZWYgU0lHSFVQCisgIGlmKFNJR19FUlIgIT0gb2xkX3NpZ2h1cF9oYW5kbGVyKQorICAgICh2b2lkKXNpZ25hbChTSUdIVVAsIG9sZF9zaWdodXBfaGFuZGxlcik7CisjZW5kaWYKKyNpZmRlZiBTSUdQSVBFCisgIGlmKFNJR19FUlIgIT0gb2xkX3NpZ3BpcGVfaGFuZGxlcikKKyAgICAodm9pZClzaWduYWwoU0lHUElQRSwgb2xkX3NpZ3BpcGVfaGFuZGxlcik7CisjZW5kaWYKKyNpZmRlZiBTSUdJTlQKKyAgaWYoU0lHX0VSUiAhPSBvbGRfc2lnaW50X2hhbmRsZXIpCisgICAgKHZvaWQpc2lnbmFsKFNJR0lOVCwgb2xkX3NpZ2ludF9oYW5kbGVyKTsKKyNlbmRpZgorI2lmZGVmIFNJR1RFUk0KKyAgaWYoU0lHX0VSUiAhPSBvbGRfc2lndGVybV9oYW5kbGVyKQorICAgICh2b2lkKXNpZ25hbChTSUdURVJNLCBvbGRfc2lndGVybV9oYW5kbGVyKTsKKyNlbmRpZgorfQorCisvKgorICogaW5pdCBmb3IgZWl0aGVyIHJlYWQtYWhlYWQgb3Igd3JpdGUtYmVoaW5kLgorICogemVybyBmb3Igd3JpdGUtYmVoaW5kLCBvbmUgZm9yIHJlYWQtaGVhZC4KKyAqLworc3RhdGljIHN0cnVjdCB0ZnRwaGRyICpyd19pbml0KGludCB4KQoreworICBuZXdsaW5lID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgY3JsZiBmbGFnICovCisgIHByZXZjaGFyID0gLTE7CisgIGJmc1swXS5jb3VudGVyID0gIEJGX0FMTE9DOyAgICAgLyogcGFzcyBvdXQgdGhlIGZpcnN0IGJ1ZmZlciAqLworICBjdXJyZW50ID0gMDsKKyAgYmZzWzFdLmNvdW50ZXIgPSBCRl9GUkVFOworICBuZXh0b25lID0geDsgICAgICAgICAgICAgICAgICAgIC8qIGFoZWFkIG9yIGJlaGluZD8gKi8KKyAgcmV0dXJuICZiZnNbMF0uYnVmLmhkcjsKK30KKworc3RhdGljIHN0cnVjdCB0ZnRwaGRyICp3X2luaXQodm9pZCkKK3sKKyAgcmV0dXJuIHJ3X2luaXQoMCk7IC8qIHdyaXRlLWJlaGluZCAqLworfQorCitzdGF0aWMgc3RydWN0IHRmdHBoZHIgKnJfaW5pdCh2b2lkKQoreworICByZXR1cm4gcndfaW5pdCgxKTsgLyogcmVhZC1haGVhZCAqLworfQorCisvKiBIYXZlIGVtcHRpZWQgY3VycmVudCBidWZmZXIgYnkgc2VuZGluZyB0byBuZXQgYW5kIGdldHRpbmcgYWNrLgorICAgRnJlZSBpdCBhbmQgcmV0dXJuIG5leHQgYnVmZmVyIGZpbGxlZCB3aXRoIGRhdGEuCisgKi8KK3N0YXRpYyBpbnQgcmVhZGl0KHN0cnVjdCB0ZXN0Y2FzZSAqdGVzdCwgc3RydWN0IHRmdHBoZHIgKipkcHAsCisgICAgICAgICAgICAgICAgICBpbnQgY29udmVydCAvKiBpZiB0cnVlLCBjb252ZXJ0IHRvIGFzY2lpICovKQoreworICBzdHJ1Y3QgYmYgKmI7CisKKyAgYmZzW2N1cnJlbnRdLmNvdW50ZXIgPSBCRl9GUkVFOyAvKiBmcmVlIG9sZCBvbmUgKi8KKyAgY3VycmVudCA9ICFjdXJyZW50OyAgICAgICAgICAgICAvKiAiaW5jciIgY3VycmVudCAqLworCisgIGIgPSAmYmZzW2N1cnJlbnRdOyAgICAgICAgICAgICAgLyogbG9vayBhdCBuZXcgYnVmZmVyICovCisgIGlmIChiLT5jb3VudGVyID09IEJGX0ZSRUUpICAgICAgLyogaWYgaXQncyBlbXB0eSAqLworICAgIHJlYWRfYWhlYWQodGVzdCwgY29udmVydCk7ICAgIC8qIGZpbGwgaXQgKi8KKworICAqZHBwID0gJmItPmJ1Zi5oZHI7ICAgICAgICAgICAgIC8qIHNldCBjYWxsZXIncyBwdHIgKi8KKyAgcmV0dXJuIGItPmNvdW50ZXI7Cit9CisKKy8qCisgKiBmaWxsIHRoZSBpbnB1dCBidWZmZXIsIGRvaW5nIGFzY2lpIGNvbnZlcnNpb25zIGlmIHJlcXVlc3RlZAorICogY29udmVyc2lvbnMgYXJlICBsZiAtPiBjcixsZiAgYW5kIGNyIC0+IGNyLCBudWwKKyAqLworc3RhdGljIHZvaWQgcmVhZF9haGVhZChzdHJ1Y3QgdGVzdGNhc2UgKnRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBjb252ZXJ0IC8qIGlmIHRydWUsIGNvbnZlcnQgdG8gYXNjaWkgKi8pCit7CisgIGludCBpOworICBjaGFyICpwOworICBpbnQgYzsKKyAgc3RydWN0IGJmICpiOworICBzdHJ1Y3QgdGZ0cGhkciAqZHA7CisKKyAgYiA9ICZiZnNbbmV4dG9uZV07ICAgICAgICAgICAgICAvKiBsb29rIGF0ICJuZXh0IiBidWZmZXIgKi8KKyAgaWYgKGItPmNvdW50ZXIgIT0gQkZfRlJFRSkgICAgICAvKiBub3AgaWYgbm90IGZyZWUgKi8KKyAgICByZXR1cm47CisgIG5leHRvbmUgPSAhbmV4dG9uZTsgICAgICAgICAgICAgLyogImluY3IiIG5leHQgYnVmZmVyIHB0ciAqLworCisgIGRwID0gJmItPmJ1Zi5oZHI7CisKKyAgaWYgKGNvbnZlcnQgPT0gMCkgeworICAgIC8qIFRoZSBmb3JtZXIgZmlsZSByZWFkaW5nIGNvZGUgZGlkIHRoaXM6CisgICAgICAgYi0+Y291bnRlciA9IHJlYWQoZmlsZW5vKGZpbGUpLCBkcC0+dGhfZGF0YSwgU0VHU0laRSk7ICovCisgICAgc2l6ZV90IGNvcHlfbiA9IE1JTihTRUdTSVpFLCB0ZXN0LT5yY291bnQpOworICAgIG1lbWNweShkcC0+dGhfZGF0YSwgdGVzdC0+cnB0ciwgY29weV9uKTsKKworICAgIC8qIGRlY3JlYXNlIGFtb3VudCwgYWR2YW5jZSBwb2ludGVyICovCisgICAgdGVzdC0+cmNvdW50IC09IGNvcHlfbjsKKyAgICB0ZXN0LT5ycHRyICs9IGNvcHlfbjsKKyAgICBiLT5jb3VudGVyID0gKGludCljb3B5X247CisgICAgcmV0dXJuOworICB9CisKKyAgcCA9IGRwLT50aF9kYXRhOworICBmb3IgKGkgPSAwIDsgaSA8IFNFR1NJWkU7IGkrKykgeworICAgIGlmIChuZXdsaW5lKSB7CisgICAgICBpZiAocHJldmNoYXIgPT0gJ1xuJykKKyAgICAgICAgYyA9ICdcbic7ICAgICAgIC8qIGxmIHRvIGNyLGxmICovCisgICAgICBlbHNlCisgICAgICAgIGMgPSAnXDAnOyAgICAgICAvKiBjciB0byBjcixudWwgKi8KKyAgICAgIG5ld2xpbmUgPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmKHRlc3QtPnJjb3VudCkgeworICAgICAgICBjPXRlc3QtPnJwdHJbMF07CisgICAgICAgIHRlc3QtPnJwdHIrKzsKKyAgICAgICAgdGVzdC0+cmNvdW50LS07CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGJyZWFrOworICAgICAgaWYgKGMgPT0gJ1xuJyB8fCBjID09ICdccicpIHsKKyAgICAgICAgcHJldmNoYXIgPSBjOworICAgICAgICBjID0gJ1xyJzsKKyAgICAgICAgbmV3bGluZSA9IDE7CisgICAgICB9CisgICAgfQorICAgICpwKysgPSAoY2hhciljOworICB9CisgIGItPmNvdW50ZXIgPSAoaW50KShwIC0gZHAtPnRoX2RhdGEpOworfQorCisvKiBVcGRhdGUgY291bnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXIsIGdldCBuZXcgYnVmZmVyIGZyb20gdGhlIHF1ZXVlLgorICAgQ2FsbHMgd3JpdGVfYmVoaW5kIG9ubHkgaWYgbmV4dCBidWZmZXIgbm90IGF2YWlsYWJsZS4KKyAqLworc3RhdGljIGludCB3cml0ZWl0KHN0cnVjdCB0ZXN0Y2FzZSAqdGVzdCwgc3RydWN0IHRmdHBoZHIgKipkcHAsCisgICAgICAgICAgICAgICAgICAgaW50IGN0LCBpbnQgY29udmVydCkKK3sKKyAgYmZzW2N1cnJlbnRdLmNvdW50ZXIgPSBjdDsgICAgICAvKiBzZXQgc2l6ZSBvZiBkYXRhIHRvIHdyaXRlICovCisgIGN1cnJlbnQgPSAhY3VycmVudDsgICAgICAgICAgICAgLyogc3dpdGNoIHRvIG90aGVyIGJ1ZmZlciAqLworICBpZiAoYmZzW2N1cnJlbnRdLmNvdW50ZXIgIT0gQkZfRlJFRSkgICAgIC8qIGlmIG5vdCBmcmVlICovCisgICAgd3JpdGVfYmVoaW5kKHRlc3QsIGNvbnZlcnQpOyAgICAgLyogZmx1c2ggaXQgKi8KKyAgYmZzW2N1cnJlbnRdLmNvdW50ZXIgPSBCRl9BTExPQzsgICAgICAgIC8qIG1hcmsgYXMgYWxsb2MnZCAqLworICAqZHBwID0gICZiZnNbY3VycmVudF0uYnVmLmhkcjsKKyAgcmV0dXJuIGN0OyAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIGlzIGEgbGllIG9mIGNvdXJzZSAqLworfQorCisvKgorICogT3V0cHV0IGEgYnVmZmVyIHRvIGEgZmlsZSwgY29udmVydGluZyBmcm9tIG5ldGFzY2lpIGlmIHJlcXVlc3RlZC4KKyAqIENSLE5VTCAtPiBDUiAgYW5kIENSLExGID0+IExGLgorICogTm90ZSBzcGVjIGlzIHVuZGVmaW5lZCBpZiB3ZSBnZXQgQ1IgYXMgbGFzdCBieXRlIG9mIGZpbGUgb3IgYQorICogQ1IgZm9sbG93ZWQgYnkgYW55dGhpbmcgZWxzZS4gIEluIHRoaXMgY2FzZSB3ZSBsZWF2ZSBpdCBhbG9uZS4KKyAqLworc3RhdGljIHNzaXplX3Qgd3JpdGVfYmVoaW5kKHN0cnVjdCB0ZXN0Y2FzZSAqdGVzdCwgaW50IGNvbnZlcnQpCit7CisgIGNoYXIgKndyaXRlYnVmOworICBpbnQgY291bnQ7CisgIGludCBjdDsKKyAgY2hhciAqcDsKKyAgaW50IGM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IGNoYXJhY3RlciAqLworICBzdHJ1Y3QgYmYgKmI7CisgIHN0cnVjdCB0ZnRwaGRyICpkcDsKKworICBiID0gJmJmc1tuZXh0b25lXTsKKyAgaWYgKGItPmNvdW50ZXIgPCAtMSkgICAgICAgICAgICAvKiBhbnl0aGluZyB0byBmbHVzaD8gKi8KKyAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAvKiBqdXN0IG5vcCBpZiBub3RoaW5nIHRvIGRvICovCisKKyAgaWYoIXRlc3QtPm9maWxlKSB7CisgICAgY2hhciBvdXRmaWxlWzI1Nl07CisgICAgc25wcmludGYob3V0ZmlsZSwgc2l6ZW9mKG91dGZpbGUpLCAibG9nL3VwbG9hZC4lbGQiLCB0ZXN0LT5udW0pOworICAgIHRlc3QtPm9maWxlPW9wZW4ob3V0ZmlsZSwgT19DUkVBVHxPX1JEV1IsIDA3NzcpOworICAgIGlmKHRlc3QtPm9maWxlID09IC0xKSB7CisgICAgICBsb2dtc2coIkNvdWxkbid0IGNyZWF0ZSBhbmQvb3Igb3BlbiBmaWxlICVzIGZvciB1cGxvYWQhIiwgb3V0ZmlsZSk7CisgICAgICByZXR1cm4gLTE7IC8qIGZhaWx1cmUhICovCisgICAgfQorICB9CisKKyAgY291bnQgPSBiLT5jb3VudGVyOyAgICAgICAgICAgICAvKiByZW1lbWJlciBieXRlIGNvdW50ICovCisgIGItPmNvdW50ZXIgPSBCRl9GUkVFOyAgICAgICAgICAgLyogcmVzZXQgZmxhZyAqLworICBkcCA9ICZiLT5idWYuaGRyOworICBuZXh0b25lID0gIW5leHRvbmU7ICAgICAgICAgICAgIC8qIGluY3IgZm9yIG5leHQgdGltZSAqLworICB3cml0ZWJ1ZiA9IGRwLT50aF9kYXRhOworCisgIGlmIChjb3VudCA8PSAwKQorICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgIC8qIG5hayBsb2dpYz8gKi8KKworICBpZiAoY29udmVydCA9PSAwKQorICAgIHJldHVybiB3cml0ZSh0ZXN0LT5vZmlsZSwgd3JpdGVidWYsIGNvdW50KTsKKworICBwID0gd3JpdGVidWY7CisgIGN0ID0gY291bnQ7CisgIHdoaWxlIChjdC0tKSB7ICAgICAgICAgICAgICAgICAgLyogbG9vcCBvdmVyIHRoZSBidWZmZXIgKi8KKyAgICBjID0gKnArKzsgICAgICAgICAgICAgICAgICAgICAvKiBwaWNrIHVwIGEgY2hhcmFjdGVyICovCisgICAgaWYgKHByZXZjaGFyID09ICdccicpIHsgICAgICAgLyogaWYgcHJldiBjaGFyIHdhcyBjciAqLworICAgICAgaWYgKGMgPT0gJ1xuJykgICAgICAgICAgICAgIC8qIGlmIGhhdmUgY3IsbGYgdGhlbiBqdXN0ICovCisgICAgICAgIGxzZWVrKHRlc3QtPm9maWxlLCAtMSwgU0VFS19DVVIpOyAvKiBzbWFzaCBsZiBvbiB0b3Agb2YgdGhlIGNyICovCisgICAgICBlbHNlCisgICAgICAgIGlmIChjID09ICdcMCcpICAgICAgICAgICAgLyogaWYgaGF2ZSBjcixudWwgdGhlbiAqLworICAgICAgICAgIGdvdG8gc2tpcGl0OyAgICAgICAgICAgIC8qIGp1c3Qgc2tpcCBvdmVyIHRoZSBwdXRjICovCisgICAgICAvKiBlbHNlIGp1c3QgZmFsbCB0aHJvdWdoIGFuZCBhbGxvdyBpdCAqLworICAgIH0KKyAgICAvKiBmb3JtZXJseQorICAgICAgIHB1dGMoYywgZmlsZSk7ICovCisgICAgaWYoMSAhPSB3cml0ZSh0ZXN0LT5vZmlsZSwgJmMsIDEpKQorICAgICAgYnJlYWs7CisgICAgc2tpcGl0OgorICAgIHByZXZjaGFyID0gYzsKKyAgfQorICByZXR1cm4gY291bnQ7Cit9CisKKy8qIFdoZW4gYW4gZXJyb3IgaGFzIG9jY3VycmVkLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSB0d28gc2lkZXMgYXJlIG91dCBvZgorICogc3luY2guICBJZTogdGhhdCB3aGF0IEkgdGhpbmsgaXMgdGhlIG90aGVyIHNpZGUncyByZXNwb25zZSB0byBwYWNrZXQgTiBpcworICogcmVhbGx5IHRoZWlyIHJlc3BvbnNlIHRvIHBhY2tldCBOLTEuCisgKgorICogU28sIHRvIHRyeSB0byBwcmV2ZW50IHRoYXQsIHdlIGZsdXNoIGFsbCB0aGUgaW5wdXQgcXVldWVkIHVwIGZvciB1cyBvbiB0aGUKKyAqIG5ldHdvcmsgY29ubmVjdGlvbiBvbiBvdXIgaG9zdC4KKyAqCisgKiBXZSByZXR1cm4gdGhlIG51bWJlciBvZiBwYWNrZXRzIHdlIGZsdXNoZWQgKG1vc3RseSBmb3IgcmVwb3J0aW5nIHdoZW4gdHJhY2UKKyAqIGlzIGFjdGl2ZSkuCisgKi8KKworc3RhdGljIGludCBzeW5jaG5ldChjdXJsX3NvY2tldF90IGYgLyogc29ja2V0IHRvIGZsdXNoICovKQoreworCisjaWYgZGVmaW5lZChIQVZFX0lPQ1RMU09DS0VUKQorICB1bnNpZ25lZCBsb25nIGk7CisjZWxzZQorICBpbnQgaTsKKyNlbmRpZgorICBpbnQgaiA9IDA7CisgIGNoYXIgcmJ1ZltQS1RTSVpFXTsKKyAgc3J2cl9zb2NrYWRkcl91bmlvbl90IGZyb21hZGRyOworICBjdXJsX3NvY2tsZW5fdCBmcm9tYWRkcmxlbjsKKworICBmb3IgKDs7KSB7CisjaWYgZGVmaW5lZChIQVZFX0lPQ1RMU09DS0VUKQorICAgICh2b2lkKSBpb2N0bHNvY2tldChmLCBGSU9OUkVBRCwgJmkpOworI2Vsc2UKKyAgICAodm9pZCkgaW9jdGwoZiwgRklPTlJFQUQsICZpKTsKKyNlbmRpZgorICAgIGlmIChpKSB7CisgICAgICBqKys7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgIGlmKCF1c2VfaXB2NikKKyNlbmRpZgorICAgICAgICBmcm9tYWRkcmxlbiA9IHNpemVvZihmcm9tYWRkci5zYTQpOworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICBlbHNlCisgICAgICAgIGZyb21hZGRybGVuID0gc2l6ZW9mKGZyb21hZGRyLnNhNik7CisjZW5kaWYKKyAgICAgICh2b2lkKSByZWN2ZnJvbShmLCByYnVmLCBzaXplb2YocmJ1ZiksIDAsCisgICAgICAgICAgICAgICAgICAgICAgJmZyb21hZGRyLnNhLCAmZnJvbWFkZHJsZW4pOworICAgIH0KKyAgICBlbHNlCisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gajsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBzcnZyX3NvY2thZGRyX3VuaW9uX3QgbWU7CisgIHN0cnVjdCB0ZnRwaGRyICp0cDsKKyAgc3NpemVfdCBuID0gMDsKKyAgaW50IGFyZyA9IDE7CisgIHVuc2lnbmVkIHNob3J0IHBvcnQgPSBERUZBVUxUX1BPUlQ7CisgIGN1cmxfc29ja2V0X3Qgc29jayA9IENVUkxfU09DS0VUX0JBRDsKKyAgaW50IGZsYWc7CisgIGludCByYzsKKyAgaW50IGVycm9yOworICBsb25nIHBpZDsKKyAgc3RydWN0IHRlc3RjYXNlIHRlc3Q7CisgIGludCByZXN1bHQgPSAwOworCisgIG1lbXNldCgmdGVzdCwgMCwgc2l6ZW9mKHRlc3QpKTsKKworICB3aGlsZShhcmdjPmFyZykgeworICAgIGlmKCFzdHJjbXAoIi0tdmVyc2lvbiIsIGFyZ3ZbYXJnXSkpIHsKKyAgICAgIHByaW50ZigidGZ0cGQgSVB2NCVzXG4iLAorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICAgICAgICAgIi9JUHY2IgorI2Vsc2UKKyAgICAgICAgICAgICAiIgorI2VuZGlmCisgICAgICAgICAgICAgKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmKCFzdHJjbXAoIi0tcGlkZmlsZSIsIGFyZ3ZbYXJnXSkpIHsKKyAgICAgIGFyZysrOworICAgICAgaWYoYXJnYz5hcmcpCisgICAgICAgIHBpZG5hbWUgPSBhcmd2W2FyZysrXTsKKyAgICB9CisgICAgZWxzZSBpZighc3RyY21wKCItLWxvZ2ZpbGUiLCBhcmd2W2FyZ10pKSB7CisgICAgICBhcmcrKzsKKyAgICAgIGlmKGFyZ2M+YXJnKQorICAgICAgICBzZXJ2ZXJsb2dmaWxlID0gYXJndlthcmcrK107CisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1pcHY0IiwgYXJndlthcmddKSkgeworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICBpcHZfaW51c2UgPSAiSVB2NCI7CisgICAgICB1c2VfaXB2NiA9IEZBTFNFOworI2VuZGlmCisgICAgICBhcmcrKzsKKyAgICB9CisgICAgZWxzZSBpZighc3RyY21wKCItLWlwdjYiLCBhcmd2W2FyZ10pKSB7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAgIGlwdl9pbnVzZSA9ICJJUHY2IjsKKyAgICAgIHVzZV9pcHY2ID0gVFJVRTsKKyNlbmRpZgorICAgICAgYXJnKys7CisgICAgfQorICAgIGVsc2UgaWYoIXN0cmNtcCgiLS1wb3J0IiwgYXJndlthcmddKSkgeworICAgICAgYXJnKys7CisgICAgICBpZihhcmdjPmFyZykgeworICAgICAgICBjaGFyICplbmRwdHI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgdWxudW0gPSBzdHJ0b3VsKGFyZ3ZbYXJnXSwgJmVuZHB0ciwgMTApOworICAgICAgICBpZigoZW5kcHRyICE9IGFyZ3ZbYXJnXSArIHN0cmxlbihhcmd2W2FyZ10pKSB8fAorICAgICAgICAgICAodWxudW0gPCAxMDI1VUwpIHx8ICh1bG51bSA+IDY1NTM1VUwpKSB7CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ0ZnRwZDogaW52YWxpZCAtLXBvcnQgYXJndW1lbnQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgIGFyZ3ZbYXJnXSk7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcG9ydCA9IGN1cmx4X3VsdG91cyh1bG51bSk7CisgICAgICAgIGFyZysrOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKCFzdHJjbXAoIi0tc3JjZGlyIiwgYXJndlthcmddKSkgeworICAgICAgYXJnKys7CisgICAgICBpZihhcmdjPmFyZykgeworICAgICAgICBwYXRoID0gYXJndlthcmddOworICAgICAgICBhcmcrKzsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBwdXRzKCJVc2FnZTogdGZ0cGQgW29wdGlvbl1cbiIKKyAgICAgICAgICAgIiAtLXZlcnNpb25cbiIKKyAgICAgICAgICAgIiAtLWxvZ2ZpbGUgW2ZpbGVdXG4iCisgICAgICAgICAgICIgLS1waWRmaWxlIFtmaWxlXVxuIgorICAgICAgICAgICAiIC0taXB2NFxuIgorICAgICAgICAgICAiIC0taXB2NlxuIgorICAgICAgICAgICAiIC0tcG9ydCBbcG9ydF1cbiIKKyAgICAgICAgICAgIiAtLXNyY2RpciBbcGF0aF0iKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisjaWZkZWYgV0lOMzIKKyAgd2luMzJfaW5pdCgpOworICBhdGV4aXQod2luMzJfY2xlYW51cCk7CisjZW5kaWYKKworICBpbnN0YWxsX3NpZ25hbF9oYW5kbGVycygpOworCisgIHBpZCA9IChsb25nKWdldHBpZCgpOworCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgaWYoIXVzZV9pcHY2KQorI2VuZGlmCisgICAgc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICBlbHNlCisgICAgc29jayA9IHNvY2tldChBRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CisjZW5kaWYKKworICBpZihDVVJMX1NPQ0tFVF9CQUQgPT0gc29jaykgeworICAgIGVycm9yID0gU09DS0VSUk5POworICAgIGxvZ21zZygiRXJyb3IgY3JlYXRpbmcgc29ja2V0OiAoJWQpICVzIiwKKyAgICAgICAgICAgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgcmVzdWx0ID0gMTsKKyAgICBnb3RvIHRmdHBkX2NsZWFudXA7CisgIH0KKworICBmbGFnID0gMTsKKyAgaWYgKDAgIT0gc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsCisgICAgICAgICAgICAodm9pZCAqKSZmbGFnLCBzaXplb2YoZmxhZykpKSB7CisgICAgZXJyb3IgPSBTT0NLRVJSTk87CisgICAgbG9nbXNnKCJzZXRzb2Nrb3B0KFNPX1JFVVNFQUREUikgZmFpbGVkIHdpdGggZXJyb3I6ICglZCkgJXMiLAorICAgICAgICAgICBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICByZXN1bHQgPSAxOworICAgIGdvdG8gdGZ0cGRfY2xlYW51cDsKKyAgfQorCisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgaWYoIXVzZV9pcHY2KSB7CisjZW5kaWYKKyAgICBtZW1zZXQoJm1lLnNhNCwgMCwgc2l6ZW9mKG1lLnNhNCkpOworICAgIG1lLnNhNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBtZS5zYTQuc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKyAgICBtZS5zYTQuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICByYyA9IGJpbmQoc29jaywgJm1lLnNhLCBzaXplb2YobWUuc2E0KSk7CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgfQorICBlbHNlIHsKKyAgICBtZW1zZXQoJm1lLnNhNiwgMCwgc2l6ZW9mKG1lLnNhNikpOworICAgIG1lLnNhNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgIG1lLnNhNi5zaW42X2FkZHIgPSBpbjZhZGRyX2FueTsKKyAgICBtZS5zYTYuc2luNl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgcmMgPSBiaW5kKHNvY2ssICZtZS5zYSwgc2l6ZW9mKG1lLnNhNikpOworICB9CisjZW5kaWYgLyogRU5BQkxFX0lQVjYgKi8KKyAgaWYoMCAhPSByYykgeworICAgIGVycm9yID0gU09DS0VSUk5POworICAgIGxvZ21zZygiRXJyb3IgYmluZGluZyBzb2NrZXQgb24gcG9ydCAlaHU6ICglZCkgJXMiLAorICAgICAgICAgICBwb3J0LCBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKKyAgICByZXN1bHQgPSAxOworICAgIGdvdG8gdGZ0cGRfY2xlYW51cDsKKyAgfQorCisgIHdyb3RlcGlkZmlsZSA9IHdyaXRlX3BpZGZpbGUocGlkbmFtZSk7CisgIGlmKCF3cm90ZXBpZGZpbGUpIHsKKyAgICByZXN1bHQgPSAxOworICAgIGdvdG8gdGZ0cGRfY2xlYW51cDsKKyAgfQorCisgIGxvZ21zZygiUnVubmluZyAlcyB2ZXJzaW9uIG9uIHBvcnQgVURQLyVkIiwgaXB2X2ludXNlLCAoaW50KXBvcnQpOworCisgIGZvciAoOzspIHsKKyAgICBmcm9tbGVuID0gc2l6ZW9mKGZyb20pOworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgaWYoIXVzZV9pcHY2KQorI2VuZGlmCisgICAgICBmcm9tbGVuID0gc2l6ZW9mKGZyb20uc2E0KTsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIGVsc2UKKyAgICAgIGZyb21sZW4gPSBzaXplb2YoZnJvbS5zYTYpOworI2VuZGlmCisgICAgbiA9IChzc2l6ZV90KXJlY3Zmcm9tKHNvY2ssICZidWYuc3RvcmFnZVswXSwgc2l6ZW9mKGJ1Zi5zdG9yYWdlKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyb20uc2EsICZmcm9tbGVuKTsKKyAgICBpZihnb3RfZXhpdF9zaWduYWwpCisgICAgICBicmVhazsKKyAgICBpZiAobiA8IDApIHsKKyAgICAgIGxvZ21zZygicmVjdmZyb20iKTsKKyAgICAgIHJlc3VsdCA9IDM7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzZXRfYWR2aXNvcl9yZWFkX2xvY2soU0VSVkVSTE9HU19MT0NLKTsKKyAgICBzZXJ2ZXJsb2dzbG9ja2VkID0gMTsKKworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgaWYoIXVzZV9pcHY2KSB7CisjZW5kaWYKKyAgICAgIGZyb20uc2E0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgcGVlciA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKKyAgICAgIGlmKENVUkxfU09DS0VUX0JBRCA9PSBwZWVyKSB7CisgICAgICAgIGxvZ21zZygic29ja2V0Iik7CisgICAgICAgIHJlc3VsdCA9IDI7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYoY29ubmVjdChwZWVyLCAmZnJvbS5zYSwgc2l6ZW9mKGZyb20uc2E0KSkgPCAwKSB7CisgICAgICAgIGxvZ21zZygiY29ubmVjdDogZmFpbCIpOworICAgICAgICByZXN1bHQgPSAxOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGZyb20uc2E2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICBwZWVyID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKKyAgICAgIGlmKENVUkxfU09DS0VUX0JBRCA9PSBwZWVyKSB7CisgICAgICAgIGxvZ21zZygic29ja2V0Iik7CisgICAgICAgIHJlc3VsdCA9IDI7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYgKGNvbm5lY3QocGVlciwgJmZyb20uc2EsIHNpemVvZihmcm9tLnNhNikpIDwgMCkgeworICAgICAgICBsb2dtc2coImNvbm5lY3Q6IGZhaWwiKTsKKyAgICAgICAgcmVzdWx0ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBtYXh0aW1lb3V0ID0gNSpUSU1FT1VUOworCisgICAgdHAgPSAmYnVmLmhkcjsKKyAgICB0cC0+dGhfb3Bjb2RlID0gbnRvaHModHAtPnRoX29wY29kZSk7CisgICAgaWYgKHRwLT50aF9vcGNvZGUgPT0gb3Bjb2RlX1JSUSB8fCB0cC0+dGhfb3Bjb2RlID09IG9wY29kZV9XUlEpIHsKKyAgICAgIG1lbXNldCgmdGVzdCwgMCwgc2l6ZW9mKHRlc3QpKTsKKyAgICAgIGlmIChkb190ZnRwKCZ0ZXN0LCB0cCwgbikgPCAwKQorICAgICAgICBicmVhazsKKyAgICAgIGlmKHRlc3QuYnVmZmVyKQorICAgICAgICBmcmVlKHRlc3QuYnVmZmVyKTsKKyAgICB9CisgICAgc2Nsb3NlKHBlZXIpOworICAgIHBlZXIgPSBDVVJMX1NPQ0tFVF9CQUQ7CisKKyAgICBpZih0ZXN0Lm9maWxlID4gMCkgeworICAgICAgY2xvc2UodGVzdC5vZmlsZSk7CisgICAgICB0ZXN0Lm9maWxlID0gMDsKKyAgICB9CisKKyAgICBpZihnb3RfZXhpdF9zaWduYWwpCisgICAgICBicmVhazsKKworICAgIGlmKHNlcnZlcmxvZ3Nsb2NrZWQpIHsKKyAgICAgIHNlcnZlcmxvZ3Nsb2NrZWQgPSAwOworICAgICAgY2xlYXJfYWR2aXNvcl9yZWFkX2xvY2soU0VSVkVSTE9HU19MT0NLKTsKKyAgICB9CisKKyAgICBsb2dtc2coImVuZCBvZiBvbmUgdHJhbnNmZXIiKTsKKworICB9CisKK3RmdHBkX2NsZWFudXA6CisKKyAgaWYodGVzdC5vZmlsZSA+IDApCisgICAgY2xvc2UodGVzdC5vZmlsZSk7CisKKyAgaWYoKHBlZXIgIT0gc29jaykgJiYgKHBlZXIgIT0gQ1VSTF9TT0NLRVRfQkFEKSkKKyAgICBzY2xvc2UocGVlcik7CisKKyAgaWYoc29jayAhPSBDVVJMX1NPQ0tFVF9CQUQpCisgICAgc2Nsb3NlKHNvY2spOworCisgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICBsb2dtc2coInNpZ25hbGxlZCB0byBkaWUiKTsKKworICBpZih3cm90ZXBpZGZpbGUpCisgICAgdW5saW5rKHBpZG5hbWUpOworCisgIGlmKHNlcnZlcmxvZ3Nsb2NrZWQpIHsKKyAgICBzZXJ2ZXJsb2dzbG9ja2VkID0gMDsKKyAgICBjbGVhcl9hZHZpc29yX3JlYWRfbG9jayhTRVJWRVJMT0dTX0xPQ0spOworICB9CisKKyAgcmVzdG9yZV9zaWduYWxfaGFuZGxlcnMoKTsKKworICBpZihnb3RfZXhpdF9zaWduYWwpIHsKKyAgICBsb2dtc2coIj09PT09PT09PiAlcyB0ZnRwZCAocG9ydDogJWQgcGlkOiAlbGQpIGV4aXRzIHdpdGggc2lnbmFsICglZCkiLAorICAgICAgICAgICBpcHZfaW51c2UsIChpbnQpcG9ydCwgcGlkLCBleGl0X3NpZ25hbCk7CisgICAgLyoKKyAgICAgKiBUbyBwcm9wZXJseSBzZXQgdGhlIHJldHVybiBzdGF0dXMgb2YgdGhlIHByb2Nlc3Mgd2UKKyAgICAgKiBtdXN0IHJhaXNlIHRoZSBzYW1lIHNpZ25hbCBTSUdJTlQgb3IgU0lHVEVSTSB0aGF0IHdlCisgICAgICogY2F1Z2h0IGFuZCBsZXQgdGhlIG9sZCBoYW5kbGVyIHRha2UgY2FyZSBvZiBpdC4KKyAgICAgKi8KKyAgICByYWlzZShleGl0X3NpZ25hbCk7CisgIH0KKworICBsb2dtc2coIj09PT09PT09PiB0ZnRwZCBxdWl0cyIpOworICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogSGFuZGxlIGluaXRpYWwgY29ubmVjdGlvbiBwcm90b2NvbC4KKyAqLworc3RhdGljIGludCBkb190ZnRwKHN0cnVjdCB0ZXN0Y2FzZSAqdGVzdCwgc3RydWN0IHRmdHBoZHIgKnRwLCBzc2l6ZV90IHNpemUpCit7CisgIGNoYXIgKmNwOworICBpbnQgZmlyc3QgPSAxLCBlY29kZTsKKyAgc3RydWN0IGZvcm1hdHMgKnBmOworICBjaGFyICpmaWxlbmFtZSwgKm1vZGUgPSBOVUxMOworICBpbnQgZXJyb3I7CisgIEZJTEUgKnNlcnZlcjsKKworICAvKiBPcGVuIHJlcXVlc3QgZHVtcCBmaWxlLiAqLworICBzZXJ2ZXIgPSBmb3BlbihSRVFVRVNUX0RVTVAsICJhYiIpOworICBpZighc2VydmVyKSB7CisgICAgZXJyb3IgPSBFUlJOTzsKKyAgICBsb2dtc2coImZvcGVuKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkICVzIiwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgbG9nbXNnKCJFcnJvciBvcGVuaW5nIGZpbGU6ICVzIiwgUkVRVUVTVF9EVU1QKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAvKiBzdG9yZSBpbnB1dCBwcm90b2NvbCAqLworICBmcHJpbnRmKHNlcnZlciwgIm9wY29kZTogJXhcbiIsIHRwLT50aF9vcGNvZGUpOworCisgIGNwID0gKGNoYXIgKikmdHAtPnRoX3N0dWZmOworICBmaWxlbmFtZSA9IGNwOworYWdhaW46CisgIHdoaWxlIChjcCA8ICZidWYuc3RvcmFnZVtzaXplXSkgeworICAgIGlmICgqY3AgPT0gJ1wwJykKKyAgICAgIGJyZWFrOworICAgIGNwKys7CisgIH0KKyAgaWYgKCpjcCkgeworICAgIG5hayhFQkFET1ApOworICAgIGZjbG9zZShzZXJ2ZXIpOworICAgIHJldHVybiAzOworICB9CisgIGlmIChmaXJzdCkgeworICAgIG1vZGUgPSArK2NwOworICAgIGZpcnN0ID0gMDsKKyAgICBnb3RvIGFnYWluOworICB9CisgIC8qIHN0b3JlIGlucHV0IHByb3RvY29sICovCisgIGZwcmludGYoc2VydmVyLCAiZmlsZW5hbWU6ICVzXG4iLCBmaWxlbmFtZSk7CisKKyAgZm9yIChjcCA9IG1vZGU7IGNwICYmICpjcDsgY3ArKykKKyAgICBpZihJU1VQUEVSKCpjcCkpCisgICAgICAqY3AgPSAoY2hhcil0b2xvd2VyKChpbnQpKmNwKTsKKworICAvKiBzdG9yZSBpbnB1dCBwcm90b2NvbCAqLworICBmcHJpbnRmKHNlcnZlciwgIm1vZGU6ICVzXG4iLCBtb2RlKTsKKyAgZmNsb3NlKHNlcnZlcik7CisKKyAgZm9yIChwZiA9IGZvcm1hdGE7IHBmLT5mX21vZGU7IHBmKyspCisgICAgaWYgKHN0cmNtcChwZi0+Zl9tb2RlLCBtb2RlKSA9PSAwKQorICAgICAgYnJlYWs7CisgIGlmICghcGYtPmZfbW9kZSkgeworICAgIG5hayhFQkFET1ApOworICAgIHJldHVybiAyOworICB9CisgIGVjb2RlID0gdmFsaWRhdGVfYWNjZXNzKHRlc3QsIGZpbGVuYW1lLCB0cC0+dGhfb3Bjb2RlKTsKKyAgaWYgKGVjb2RlKSB7CisgICAgbmFrKGVjb2RlKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBpZiAodHAtPnRoX29wY29kZSA9PSBvcGNvZGVfV1JRKQorICAgIHJlY3Z0ZnRwKHRlc3QsIHBmKTsKKyAgZWxzZQorICAgIHNlbmR0ZnRwKHRlc3QsIHBmKTsKKworICByZXR1cm4gMDsKK30KKworLyoKKyAqIFZhbGlkYXRlIGZpbGUgYWNjZXNzLgorICovCitzdGF0aWMgaW50IHZhbGlkYXRlX2FjY2VzcyhzdHJ1Y3QgdGVzdGNhc2UgKnRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUpCit7CisgIGNoYXIgKnB0cjsKKyAgbG9uZyB0ZXN0bm8sIHBhcnRubzsKKyAgaW50IGVycm9yOworICBjaGFyIHBhcnRidWZbODBdPSJkYXRhIjsKKworICBsb2dtc2coInRyeWluZyB0byBnZXQgZmlsZTogJXMgbW9kZSAleCIsIGZpbGVuYW1lLCBtb2RlKTsKKworICBpZighc3RybmNtcCgidmVyaWZpZWRzZXJ2ZXIiLCBmaWxlbmFtZSwgMTQpKSB7CisgICAgY2hhciB3ZWFyZVsxMjhdOworICAgIHNpemVfdCBjb3VudCA9IHNwcmludGYod2VhcmUsICJXRSBST09MWjogJWxkXHJcbiIsIChsb25nKWdldHBpZCgpKTsKKworICAgIGxvZ21zZygiQXJlLXdlLWZyaWVuZGx5IHF1ZXN0aW9uIHJlY2VpdmVkIik7CisgICAgdGVzdC0+YnVmZmVyID0gc3RyZHVwKHdlYXJlKTsKKyAgICB0ZXN0LT5ycHRyID0gdGVzdC0+YnVmZmVyOyAvKiBzZXQgcmVhZCBwb2ludGVyICovCisgICAgdGVzdC0+YnVmc2l6ZSA9IGNvdW50OyAgICAvKiBzZXQgdG90YWwgY291bnQgKi8KKyAgICB0ZXN0LT5yY291bnQgPSBjb3VudDsgICAgIC8qIHNldCBkYXRhIGxlZnQgdG8gcmVhZCAqLworICAgIHJldHVybiAwOyAvKiBmaW5lICovCisgIH0KKworICAvKiBmaW5kIHRoZSBsYXN0IHNsYXNoICovCisgIHB0ciA9IHN0cnJjaHIoZmlsZW5hbWUsICcvJyk7CisKKyAgaWYocHRyKSB7CisgICAgY2hhciAqZmlsZTsKKworICAgIHB0cisrOyAvKiBza2lwIHRoZSBzbGFzaCAqLworCisgICAgLyogc2tpcCBhbGwgbm9uLW51bWVyaWNhbHMgZm9sbG93aW5nIHRoZSBzbGFzaCAqLworICAgIHdoaWxlKCpwdHIgJiYgIUlTRElHSVQoKnB0cikpCisgICAgICBwdHIrKzsKKworICAgIC8qIGdldCB0aGUgbnVtYmVyICovCisgICAgdGVzdG5vID0gc3RydG9sKHB0ciwgJnB0ciwgMTApOworCisgICAgaWYodGVzdG5vID4gMTAwMDApIHsKKyAgICAgIHBhcnRubyA9IHRlc3RubyAlIDEwMDAwOworICAgICAgdGVzdG5vIC89IDEwMDAwOworICAgIH0KKyAgICBlbHNlCisgICAgICBwYXJ0bm8gPSAwOworCisKKyAgICBsb2dtc2coInJlcXVlc3RlZCB0ZXN0IG51bWJlciAlbGQgcGFydCAlbGQiLCB0ZXN0bm8sIHBhcnRubyk7CisKKyAgICB0ZXN0LT5udW0gPSB0ZXN0bm87CisKKyAgICBmaWxlID0gdGVzdDJmaWxlKHRlc3Rubyk7CisKKyAgICBpZigwICE9IHBhcnRubykKKyAgICAgIHNwcmludGYocGFydGJ1ZiwgImRhdGElbGQiLCBwYXJ0bm8pOworCisgICAgaWYoZmlsZSkgeworICAgICAgRklMRSAqc3RyZWFtPWZvcGVuKGZpbGUsICJyYiIpOworICAgICAgaWYoIXN0cmVhbSkgeworICAgICAgICBlcnJvciA9IEVSUk5POworICAgICAgICBsb2dtc2coImZvcGVuKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkICVzIiwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgICAgIGxvZ21zZygiRXJyb3Igb3BlbmluZyBmaWxlOiAlcyIsIGZpbGUpOworICAgICAgICBsb2dtc2coIkNvdWxkbid0IG9wZW4gdGVzdCBmaWxlOiAlcyIsIGZpbGUpOworICAgICAgICByZXR1cm4gRUFDQ0VTUzsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzaXplX3QgY291bnQ7CisgICAgICAgIGVycm9yID0gZ2V0cGFydCgmdGVzdC0+YnVmZmVyLCAmY291bnQsICJyZXBseSIsIHBhcnRidWYsIHN0cmVhbSk7CisgICAgICAgIGZjbG9zZShzdHJlYW0pOworICAgICAgICBpZihlcnJvcikgeworICAgICAgICAgIGxvZ21zZygiZ2V0cGFydCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZCIsIGVycm9yKTsKKyAgICAgICAgICByZXR1cm4gRUFDQ0VTUzsKKyAgICAgICAgfQorICAgICAgICBpZih0ZXN0LT5idWZmZXIpIHsKKyAgICAgICAgICB0ZXN0LT5ycHRyID0gdGVzdC0+YnVmZmVyOyAvKiBzZXQgcmVhZCBwb2ludGVyICovCisgICAgICAgICAgdGVzdC0+YnVmc2l6ZSA9IGNvdW50OyAgICAvKiBzZXQgdG90YWwgY291bnQgKi8KKyAgICAgICAgICB0ZXN0LT5yY291bnQgPSBjb3VudDsgICAgIC8qIHNldCBkYXRhIGxlZnQgdG8gcmVhZCAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gRUFDQ0VTUzsKKyAgICAgIH0KKworICAgIH0KKyAgICBlbHNlCisgICAgICByZXR1cm4gRUFDQ0VTUzsKKyAgfQorICBlbHNlIHsKKyAgICBsb2dtc2coIm5vIHNsYXNoIGZvdW5kIGluIHBhdGgiKTsKKyAgICByZXR1cm4gRUFDQ0VTUzsgLyogZmFpbHVyZSAqLworICB9CisKKyAgbG9nbXNnKCJmaWxlIG9wZW5lZCBhbmQgYWxsIGlzIGdvb2QiKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZW5kIHRoZSByZXF1ZXN0ZWQgZmlsZS4KKyAqLworc3RhdGljIHZvaWQgc2VuZHRmdHAoc3RydWN0IHRlc3RjYXNlICp0ZXN0LCBzdHJ1Y3QgZm9ybWF0cyAqcGYpCit7CisgIGludCBzaXplOworICBzc2l6ZV90IG47CisgIHNlbmRibG9jayA9IDE7CisjaWYgZGVmaW5lZChIQVZFX0FMQVJNKSAmJiBkZWZpbmVkKFNJR0FMUk0pCisgIG15c2lnbmFsKFNJR0FMUk0sIHRpbWVyKTsKKyNlbmRpZgorICBzZHAgPSByX2luaXQoKTsKKyAgc2FwID0gJmFja2J1Zi5oZHI7CisgIGRvIHsKKyAgICBzaXplID0gcmVhZGl0KHRlc3QsICZzZHAsIHBmLT5mX2NvbnZlcnQpOworICAgIGlmIChzaXplIDwgMCkgeworICAgICAgbmFrKEVSUk5PICsgMTAwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2RwLT50aF9vcGNvZGUgPSBodG9ucygodW5zaWduZWQgc2hvcnQpb3Bjb2RlX0RBVEEpOworICAgIHNkcC0+dGhfYmxvY2sgPSBodG9ucyhzZW5kYmxvY2spOworICAgIHRpbWVvdXQgPSAwOworI2lmZGVmIEhBVkVfU0lHU0VUSk1QCisgICAgKHZvaWQpIHNpZ3NldGptcCh0aW1lb3V0YnVmLCAxKTsKKyNlbmRpZgorICAgIHNlbmRfZGF0YToKKyAgICBpZiAoc3dyaXRlKHBlZXIsIHNkcCwgc2l6ZSArIDQpICE9IHNpemUgKyA0KSB7CisgICAgICBsb2dtc2coIndyaXRlIik7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHJlYWRfYWhlYWQodGVzdCwgcGYtPmZfY29udmVydCk7CisgICAgZm9yICggOyA7ICkgeworI2lmZGVmIEhBVkVfQUxBUk0KKyAgICAgIGFsYXJtKHJleG10dmFsKTsgICAgICAgIC8qIHJlYWQgdGhlIGFjayAqLworI2VuZGlmCisgICAgICBuID0gc3JlYWQocGVlciwgJmFja2J1Zi5zdG9yYWdlWzBdLCBzaXplb2YoYWNrYnVmLnN0b3JhZ2UpKTsKKyNpZmRlZiBIQVZFX0FMQVJNCisgICAgICBhbGFybSgwKTsKKyNlbmRpZgorICAgICAgaWYoZ290X2V4aXRfc2lnbmFsKQorICAgICAgICByZXR1cm47CisgICAgICBpZiAobiA8IDApIHsKKyAgICAgICAgbG9nbXNnKCJyZWFkOiBmYWlsIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHNhcC0+dGhfb3Bjb2RlID0gbnRvaHMoKHVuc2lnbmVkIHNob3J0KXNhcC0+dGhfb3Bjb2RlKTsKKyAgICAgIHNhcC0+dGhfYmxvY2sgPSBudG9ocyhzYXAtPnRoX2Jsb2NrKTsKKworICAgICAgaWYgKHNhcC0+dGhfb3Bjb2RlID09IG9wY29kZV9FUlJPUikgeworICAgICAgICBsb2dtc2coImdvdCBFUlJPUiIpOworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIGlmIChzYXAtPnRoX29wY29kZSA9PSBvcGNvZGVfQUNLKSB7CisgICAgICAgIGlmIChzYXAtPnRoX2Jsb2NrID09IHNlbmRibG9jaykgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8qIFJlLXN5bmNocm9uaXplIHdpdGggdGhlIG90aGVyIHNpZGUgKi8KKyAgICAgICAgKHZvaWQpIHN5bmNobmV0KHBlZXIpOworICAgICAgICBpZiAoc2FwLT50aF9ibG9jayA9PSAoc2VuZGJsb2NrLTEpKSB7CisgICAgICAgICAgZ290byBzZW5kX2RhdGE7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIH0KKyAgICBzZW5kYmxvY2srKzsKKyAgfSB3aGlsZSAoc2l6ZSA9PSBTRUdTSVpFKTsKK30KKworLyoKKyAqIFJlY2VpdmUgYSBmaWxlLgorICovCitzdGF0aWMgdm9pZCByZWN2dGZ0cChzdHJ1Y3QgdGVzdGNhc2UgKnRlc3QsIHN0cnVjdCBmb3JtYXRzICpwZikKK3sKKyAgc3NpemVfdCBuLCBzaXplOworICByZWN2YmxvY2sgPSAwOworI2lmIGRlZmluZWQoSEFWRV9BTEFSTSkgJiYgZGVmaW5lZChTSUdBTFJNKQorICBteXNpZ25hbChTSUdBTFJNLCB0aW1lcik7CisjZW5kaWYKKyAgcmRwID0gd19pbml0KCk7CisgIHJhcCA9ICZhY2tidWYuaGRyOworICBkbyB7CisgICAgdGltZW91dCA9IDA7CisgICAgcmFwLT50aF9vcGNvZGUgPSBodG9ucygodW5zaWduZWQgc2hvcnQpb3Bjb2RlX0FDSyk7CisgICAgcmFwLT50aF9ibG9jayA9IGh0b25zKHJlY3ZibG9jayk7CisgICAgcmVjdmJsb2NrKys7CisjaWZkZWYgSEFWRV9TSUdTRVRKTVAKKyAgICAodm9pZCkgc2lnc2V0am1wKHRpbWVvdXRidWYsIDEpOworI2VuZGlmCitzZW5kX2FjazoKKyAgICBpZiAoc3dyaXRlKHBlZXIsICZhY2tidWYuc3RvcmFnZVswXSwgNCkgIT0gNCkgeworICAgICAgbG9nbXNnKCJ3cml0ZTogZmFpbFxuIik7CisgICAgICBnb3RvIGFib3J0OworICAgIH0KKyAgICB3cml0ZV9iZWhpbmQodGVzdCwgcGYtPmZfY29udmVydCk7CisgICAgZm9yICggOyA7ICkgeworI2lmZGVmIEhBVkVfQUxBUk0KKyAgICAgIGFsYXJtKHJleG10dmFsKTsKKyNlbmRpZgorICAgICAgbiA9IHNyZWFkKHBlZXIsIHJkcCwgUEtUU0laRSk7CisjaWZkZWYgSEFWRV9BTEFSTQorICAgICAgYWxhcm0oMCk7CisjZW5kaWYKKyAgICAgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICAgICAgZ290byBhYm9ydDsKKyAgICAgIGlmIChuIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhbGx5PyAqLworICAgICAgICBsb2dtc2coInJlYWQ6IGZhaWxcbiIpOworICAgICAgICBnb3RvIGFib3J0OworICAgICAgfQorICAgICAgcmRwLT50aF9vcGNvZGUgPSBudG9ocygodW5zaWduZWQgc2hvcnQpcmRwLT50aF9vcGNvZGUpOworICAgICAgcmRwLT50aF9ibG9jayA9IG50b2hzKHJkcC0+dGhfYmxvY2spOworICAgICAgaWYgKHJkcC0+dGhfb3Bjb2RlID09IG9wY29kZV9FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKyAgICAgIGlmIChyZHAtPnRoX29wY29kZSA9PSBvcGNvZGVfREFUQSkgeworICAgICAgICBpZiAocmRwLT50aF9ibG9jayA9PSByZWN2YmxvY2spIHsKKyAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm9ybWFsICovCisgICAgICAgIH0KKyAgICAgICAgLyogUmUtc3luY2hyb25pemUgd2l0aCB0aGUgb3RoZXIgc2lkZSAqLworICAgICAgICAodm9pZCkgc3luY2huZXQocGVlcik7CisgICAgICAgIGlmIChyZHAtPnRoX2Jsb2NrID09IChyZWN2YmxvY2stMSkpCisgICAgICAgICAgZ290byBzZW5kX2FjazsgICAgICAgICAgICAgICAgIC8qIHJleG1pdCAqLworICAgICAgfQorICAgIH0KKworICAgIHNpemUgPSB3cml0ZWl0KHRlc3QsICZyZHAsIChpbnQpKG4gLSA0KSwgcGYtPmZfY29udmVydCk7CisgICAgaWYgKHNpemUgIT0gKG4tNCkpIHsgICAgICAgICAgICAgICAgIC8qIGFoZW0gKi8KKyAgICAgIGlmIChzaXplIDwgMCkKKyAgICAgICAgbmFrKEVSUk5PICsgMTAwKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbmFrKEVOT1NQQUNFKTsKKyAgICAgIGdvdG8gYWJvcnQ7CisgICAgfQorICB9IHdoaWxlIChzaXplID09IFNFR1NJWkUpOworICB3cml0ZV9iZWhpbmQodGVzdCwgcGYtPmZfY29udmVydCk7CisKKyAgcmFwLT50aF9vcGNvZGUgPSBodG9ucygodW5zaWduZWQgc2hvcnQpb3Bjb2RlX0FDSyk7ICAvKiBzZW5kIHRoZSAiZmluYWwiIGFjayAqLworICByYXAtPnRoX2Jsb2NrID0gaHRvbnMocmVjdmJsb2NrKTsKKyAgKHZvaWQpIHN3cml0ZShwZWVyLCAmYWNrYnVmLnN0b3JhZ2VbMF0sIDQpOworI2lmIGRlZmluZWQoSEFWRV9BTEFSTSkgJiYgZGVmaW5lZChTSUdBTFJNKQorICBteXNpZ25hbChTSUdBTFJNLCBqdXN0dGltZW91dCk7ICAgICAgICAvKiBqdXN0IGFib3J0IHJlYWQgb24gdGltZW91dCAqLworICBhbGFybShyZXhtdHZhbCk7CisjZW5kaWYKKyAgLyogbm9ybWFsbHkgdGltZXMgb3V0IGFuZCBxdWl0cyAqLworICBuID0gc3JlYWQocGVlciwgJmJ1Zi5zdG9yYWdlWzBdLCBzaXplb2YoYnVmLnN0b3JhZ2UpKTsKKyNpZmRlZiBIQVZFX0FMQVJNCisgIGFsYXJtKDApOworI2VuZGlmCisgIGlmKGdvdF9leGl0X3NpZ25hbCkKKyAgICBnb3RvIGFib3J0OworICBpZiAobiA+PSA0ICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHJlYWQgc29tZSBkYXRhICovCisgICAgICByZHAtPnRoX29wY29kZSA9PSBvcGNvZGVfREFUQSAmJiAgICAgICAgLyogYW5kIGdvdCBhIGRhdGEgYmxvY2sgKi8KKyAgICAgIHJlY3ZibG9jayA9PSByZHAtPnRoX2Jsb2NrKSB7ICAgICAgICAgICAvKiB0aGVuIG15IGxhc3QgYWNrIHdhcyBsb3N0ICovCisgICAgKHZvaWQpIHN3cml0ZShwZWVyLCAmYWNrYnVmLnN0b3JhZ2VbMF0sIDQpOyAgLyogcmVzZW5kIGZpbmFsIGFjayAqLworICB9CithYm9ydDoKKyAgcmV0dXJuOworfQorCisvKgorICogU2VuZCBhIG5hayBwYWNrZXQgKGVycm9yIG1lc3NhZ2UpLiAgRXJyb3IgY29kZSBwYXNzZWQgaW4gaXMgb25lIG9mIHRoZQorICogc3RhbmRhcmQgVEZUUCBjb2Rlcywgb3IgYSBVTklYIGVycm5vIG9mZnNldCBieSAxMDAuCisgKi8KK3N0YXRpYyB2b2lkIG5hayhpbnQgZXJyb3IpCit7CisgIHN0cnVjdCB0ZnRwaGRyICp0cDsKKyAgaW50IGxlbmd0aDsKKyAgc3RydWN0IGVycm1zZyAqcGU7CisKKyAgdHAgPSAmYnVmLmhkcjsKKyAgdHAtPnRoX29wY29kZSA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydClvcGNvZGVfRVJST1IpOworICB0cC0+dGhfY29kZSA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydCllcnJvcik7CisgIGZvciAocGUgPSBlcnJtc2dzOyBwZS0+ZV9jb2RlID49IDA7IHBlKyspCisgICAgaWYgKHBlLT5lX2NvZGUgPT0gZXJyb3IpCisgICAgICBicmVhazsKKyAgaWYgKHBlLT5lX2NvZGUgPCAwKSB7CisgICAgcGUtPmVfbXNnID0gc3RyZXJyb3IoZXJyb3IgLSAxMDApOworICAgIHRwLT50aF9jb2RlID0gRVVOREVGOyAgIC8qIHNldCAndW5kZWYnIGVycm9yY29kZSAqLworICB9CisgIGxlbmd0aCA9IChpbnQpc3RybGVuKHBlLT5lX21zZyk7CisKKyAgLyogd2UgdXNlIG1lbWNweSgpIGluc3RlYWQgb2Ygc3RyY3B5KCkgaW4gb3JkZXIgdG8gYXZvaWQgYnVmZmVyIG92ZXJmbG93CisgICAqIHJlcG9ydCBmcm9tIGdsaWJjIHdpdGggRk9SVElGWV9TT1VSQ0UgKi8KKyAgbWVtY3B5KHRwLT50aF9tc2csIHBlLT5lX21zZywgbGVuZ3RoICsgMSk7CisgIGxlbmd0aCArPSA1OworICBpZiAoc3dyaXRlKHBlZXIsICZidWYuc3RvcmFnZVswXSwgbGVuZ3RoKSAhPSBsZW5ndGgpCisgICAgbG9nbXNnKCJuYWs6IGZhaWxcbiIpOworfQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvc2VydmVyL3V0aWwuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyZjExZQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci91dGlsLmMKQEAgLTAsMCArMSwzMTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIENVUkxfTk9fT0xESUVTCisKKyNpbmNsdWRlICJzZXR1cC5oIiAvKiBwb3J0YWJpbGl0eSBoZWxwIGZyb20gdGhlIGxpYiBkaXJlY3RvcnkgKi8KKworI2lmZGVmIEhBVkVfU0lHTkFMX0gKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisvKiBUaGlzIGRlZmluZSBpcyAiYWxtb3N0IiByZXF1aXJlZCB0byBidWlsZCBvbiBIUFVYIDExICovCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUE9MTF9ICisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9QT0xMX0gpCisjaW5jbHVkZSA8cG9sbC5oPgorI2VuZGlmCisKKyNkZWZpbmUgRU5BQkxFX0NVUkxYX1BSSU5URgorLyogbWFrZSB0aGUgY3VybHggaGVhZGVyIGRlZmluZSBhbGwgcHJpbnRmKCkgZnVuY3Rpb25zIHRvIHVzZSB0aGUgY3VybHhfKgorICAgdmVyc2lvbnMgaW5zdGVhZCAqLworI2luY2x1ZGUgImN1cmx4LmgiIC8qIGZyb20gdGhlIHByaXZhdGUgbGliIGRpciAqLworI2luY2x1ZGUgImdldHBhcnQuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAidGltZXZhbC5oIgorCisjaWYgZGVmaW5lZChFTkFCTEVfSVBWNikgJiYgZGVmaW5lZChfX01JTkdXMzJfXykKK2NvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueSA9IHt7IElONkFERFJfQU5ZX0lOSVQgfX07CisjZW5kaWYKKworLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBTVEFUSUMgbWVtb3J5LiBJdCBjb252ZXJ0cyB0aGUgZ2l2ZW4KKyAqIGJpbmFyeSBsdW1wIHRvIGEgaGV4IGZvcm1hdHRlZCBzdHJpbmcgdXNhYmxlIGZvciBvdXRwdXQgaW4gbG9ncyBvcgorICogd2hhdGV2ZXIuCisgKi8KK2NoYXIgKmRhdGFfdG9faGV4KGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pCit7CisgIHN0YXRpYyBjaGFyIGJ1ZlsyNTYqM107CisgIHNpemVfdCBpOworICBjaGFyICpvcHRyID0gYnVmOworICBjaGFyICppcHRyID0gZGF0YTsKKworICBpZihsZW4gPiAyNTUpCisgICAgbGVuID0gMjU1OworCisgIGZvcihpPTA7IGkgPCBsZW47IGkrKykgeworICAgIGlmKChkYXRhW2ldID49IDB4MjApICYmIChkYXRhW2ldIDwgMHg3ZikpCisgICAgICAqb3B0cisrID0gKmlwdHIrKzsKKyAgICBlbHNlIHsKKyAgICAgIHNwcmludGYob3B0ciwgIiUlJTAyeCIsICppcHRyKyspOworICAgICAgb3B0cis9MzsKKyAgICB9CisgIH0KKyAgKm9wdHI9MDsgLyogaW4gY2FzZSBubyBzcHJpbnRmKCkgd2FzIHVzZWQgKi8KKworICByZXR1cm4gYnVmOworfQorCit2b2lkIGxvZ21zZyhjb25zdCBjaGFyICptc2csIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgY2hhciBidWZmZXJbMjA0OCArIDFdOworICBGSUxFICpsb2dmcDsKKyAgaW50IGVycm9yOworICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgdGltZV90IHNlYzsKKyAgc3RydWN0IHRtICpub3c7CisgIGNoYXIgdGltZWJ1ZlsyMF07CisgIHN0YXRpYyB0aW1lX3QgZXBvY2hfb2Zmc2V0OworICBzdGF0aWMgaW50ICAgIGtub3duX29mZnNldDsKKworICBpZiAoIXNlcnZlcmxvZ2ZpbGUpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBzZXJ2ZXJsb2dmaWxlIG5vdCBzZXRcbiIpOworICAgIHJldHVybjsKKyAgfQorCisgIHR2ID0gY3VybHhfdHZub3coKTsKKyAgaWYoIWtub3duX29mZnNldCkgeworICAgIGVwb2NoX29mZnNldCA9IHRpbWUoTlVMTCkgLSB0di50dl9zZWM7CisgICAga25vd25fb2Zmc2V0ID0gMTsKKyAgfQorICBzZWMgPSBlcG9jaF9vZmZzZXQgKyB0di50dl9zZWM7CisgIG5vdyA9IGxvY2FsdGltZSgmc2VjKTsgLyogbm90IHRocmVhZCBzYWZlIGJ1dCB3ZSBkb24ndCBjYXJlICovCisKKyAgc25wcmludGYodGltZWJ1Ziwgc2l6ZW9mKHRpbWVidWYpLCAiJTAyZDolMDJkOiUwMmQuJTA2bGQiLAorICAgIChpbnQpbm93LT50bV9ob3VyLCAoaW50KW5vdy0+dG1fbWluLCAoaW50KW5vdy0+dG1fc2VjLCAobG9uZyl0di50dl91c2VjKTsKKworICB2YV9zdGFydChhcCwgbXNnKTsKKyAgdnNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIG1zZywgYXApOworICB2YV9lbmQoYXApOworCisgIGxvZ2ZwID0gZm9wZW4oc2VydmVybG9nZmlsZSwgImFiIik7CisgIGlmKGxvZ2ZwKSB7CisgICAgZnByaW50Zihsb2dmcCwgIiVzICVzXG4iLCB0aW1lYnVmLCBidWZmZXIpOworICAgIGZjbG9zZShsb2dmcCk7CisgIH0KKyAgZWxzZSB7CisgICAgZXJyb3IgPSBFUlJOTzsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImZvcGVuKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkICVzXG4iLAorICAgICAgICAgICAgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGZpbGU6ICVzXG4iLCBzZXJ2ZXJsb2dmaWxlKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIk1zZyBub3QgbG9nZ2VkOiAlcyAlc1xuIiwgdGltZWJ1ZiwgYnVmZmVyKTsKKyAgfQorfQorCisjaWZkZWYgV0lOMzIKKy8qIHVzZSBpbnN0ZWFkIG9mIHBlcnJvcigpIG9uIGdlbmVyaWMgd2luZG93cyAqLwordm9pZCB3aW4zMl9wZXJyb3IgKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgY2hhciBidWZbNTEyXTsKKyAgRFdPUkQgZXJyID0gU09DS0VSUk5POworCisgIGlmICghRm9ybWF0TWVzc2FnZShGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTSwgTlVMTCwgZXJyLAorICAgICAgICAgICAgICAgICAgICAgTEFOR19ORVVUUkFMLCBidWYsIHNpemVvZihidWYpLCBOVUxMKSkKKyAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlVua25vd24gZXJyb3IgJWx1ICglI2x4KSIsIGVyciwgZXJyKTsKKyAgaWYgKG1zZykKKyAgICAgZnByaW50ZihzdGRlcnIsICIlczogIiwgbXNnKTsKKyAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgYnVmKTsKK30KKyNlbmRpZiAgLyogV0lOMzIgKi8KKworI2lmZGVmIFVTRV9XSU5TT0NLCit2b2lkIHdpbjMyX2luaXQodm9pZCkKK3sKKyAgV09SRCB3VmVyc2lvblJlcXVlc3RlZDsKKyAgV1NBREFUQSB3c2FEYXRhOworICBpbnQgZXJyOworICB3VmVyc2lvblJlcXVlc3RlZCA9IE1BS0VXT1JEKFVTRV9XSU5TT0NLLCBVU0VfV0lOU09DSyk7CisKKyAgZXJyID0gV1NBU3RhcnR1cCh3VmVyc2lvblJlcXVlc3RlZCwgJndzYURhdGEpOworCisgIGlmIChlcnIgIT0gMCkgeworICAgIHBlcnJvcigiV2luc29jayBpbml0IGZhaWxlZCIpOworICAgIGxvZ21zZygiRXJyb3IgaW5pdGlhbGlzaW5nIHdpbnNvY2sgLS0gYWJvcnRpbmciKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgaWYgKCBMT0JZVEUoIHdzYURhdGEud1ZlcnNpb24gKSAhPSBVU0VfV0lOU09DSyB8fAorICAgICAgIEhJQllURSggd3NhRGF0YS53VmVyc2lvbiApICE9IFVTRV9XSU5TT0NLICkgeworCisgICAgV1NBQ2xlYW51cCgpOworICAgIHBlcnJvcigiV2luc29jayBpbml0IGZhaWxlZCIpOworICAgIGxvZ21zZygiTm8gc3VpdGFibGUgd2luc29jay5kbGwgZm91bmQgLS0gYWJvcnRpbmciKTsKKyAgICBleGl0KDEpOworICB9Cit9CisKK3ZvaWQgd2luMzJfY2xlYW51cCh2b2lkKQoreworICBXU0FDbGVhbnVwKCk7Cit9CisjZW5kaWYgIC8qIFVTRV9XSU5TT0NLICovCisKKy8qIHNldCBieSB0aGUgbWFpbiBjb2RlIHRvIHBvaW50IHRvIHdoZXJlIHRoZSB0ZXN0IGRpciBpcyAqLworY29uc3QgY2hhciAqcGF0aD0iLiI7CisKK2NoYXIgKnRlc3QyZmlsZShsb25nIHRlc3RubykKK3sKKyAgc3RhdGljIGNoYXIgZmlsZW5hbWVbMjU2XTsKKyAgc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksIFRFU1RfREFUQV9QQVRILCBwYXRoLCB0ZXN0bm8pOworICByZXR1cm4gZmlsZW5hbWU7Cit9CisKKy8qCisgKiBQb3J0YWJsZSBmdW5jdGlvbiB1c2VkIGZvciB3YWl0aW5nIGEgc3BlY2lmaWMgYW1vdW50IG9mIG1zLgorICogV2FpdGluZyBpbmRlZmluaXRlbHkgd2l0aCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkLCBhCisgKiB6ZXJvIG9yIG5lZ2F0aXZlIHRpbWVvdXQgdmFsdWUgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkuCisgKgorICogUmV0dXJuIHZhbHVlczoKKyAqICAgLTEgPSBzeXN0ZW0gY2FsbCBlcnJvciwgb3IgaW52YWxpZCB0aW1lb3V0IHZhbHVlCisgKiAgICAwID0gc3BlY2lmaWVkIHRpbWVvdXQgaGFzIGVsYXBzZWQKKyAqLworaW50IHdhaXRfbXMoaW50IHRpbWVvdXRfbXMpCit7CisjaWYgIWRlZmluZWQoTVNET1MpICYmICFkZWZpbmVkKFVTRV9XSU5TT0NLKQorI2lmbmRlZiBIQVZFX1BPTExfRklORQorICBzdHJ1Y3QgdGltZXZhbCBwZW5kaW5nX3R2OworI2VuZGlmCisgIHN0cnVjdCB0aW1ldmFsIGluaXRpYWxfdHY7CisgIGludCBwZW5kaW5nX21zOworICBpbnQgZXJyb3I7CisjZW5kaWYKKyAgaW50IHIgPSAwOworCisgIGlmKCF0aW1lb3V0X21zKQorICAgIHJldHVybiAwOworICBpZih0aW1lb3V0X21zIDwgMCkgeworICAgIFNFVF9TT0NLRVJSTk8oRUlOVkFMKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyNpZiBkZWZpbmVkKE1TRE9TKQorICBkZWxheSh0aW1lb3V0X21zKTsKKyNlbGlmIGRlZmluZWQoVVNFX1dJTlNPQ0spCisgIFNsZWVwKHRpbWVvdXRfbXMpOworI2Vsc2UKKyAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXM7CisgIGluaXRpYWxfdHYgPSBjdXJseF90dm5vdygpOworICBkbyB7CisjaWYgZGVmaW5lZChIQVZFX1BPTExfRklORSkKKyAgICByID0gcG9sbChOVUxMLCAwLCBwZW5kaW5nX21zKTsKKyNlbHNlCisgICAgcGVuZGluZ190di50dl9zZWMgPSBwZW5kaW5nX21zIC8gMTAwMDsKKyAgICBwZW5kaW5nX3R2LnR2X3VzZWMgPSAocGVuZGluZ19tcyAlIDEwMDApICogMTAwMDsKKyAgICByID0gc2VsZWN0KDAsIE5VTEwsIE5VTEwsIE5VTEwsICZwZW5kaW5nX3R2KTsKKyNlbmRpZiAvKiBIQVZFX1BPTExfRklORSAqLworICAgIGlmKHIgIT0gLTEpCisgICAgICBicmVhazsKKyAgICBlcnJvciA9IFNPQ0tFUlJOTzsKKyAgICBpZihlcnJvciAmJiAoZXJyb3IgIT0gRUlOVFIpKQorICAgICAgYnJlYWs7CisgICAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXMgLSAoaW50KWN1cmx4X3R2ZGlmZihjdXJseF90dm5vdygpLCBpbml0aWFsX3R2KTsKKyAgICBpZihwZW5kaW5nX21zIDw9IDApCisgICAgICBicmVhazsKKyAgfSB3aGlsZShyID09IC0xKTsKKyNlbmRpZiAvKiBVU0VfV0lOU09DSyAqLworICBpZihyKQorICAgIHIgPSAtMTsKKyAgcmV0dXJuIHI7Cit9CisKK2ludCB3cml0ZV9waWRmaWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICBGSUxFICpwaWRmaWxlOworICBsb25nIHBpZDsKKworICBwaWQgPSAobG9uZylnZXRwaWQoKTsKKyAgcGlkZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAid2IiKTsKKyAgaWYoIXBpZGZpbGUpIHsKKyAgICBsb2dtc2coIkNvdWxkbid0IHdyaXRlIHBpZCBmaWxlOiAlcyAlcyIsIGZpbGVuYW1lLCBzdHJlcnJvcihFUlJOTykpOworICAgIHJldHVybiAwOyAvKiBmYWlsICovCisgIH0KKyAgZnByaW50ZihwaWRmaWxlLCAiJWxkXG4iLCBwaWQpOworICBmY2xvc2UocGlkZmlsZSk7CisgIGxvZ21zZygiV3JvdGUgcGlkICVsZCB0byAlcyIsIHBpZCwgZmlsZW5hbWUpOworICByZXR1cm4gMTsgLyogc3VjY2VzcyAqLworfQorCit2b2lkIHNldF9hZHZpc29yX3JlYWRfbG9jayhjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgRklMRSAqbG9ja2ZpbGU7CisgIGludCBlcnJvciA9IDA7CisgIGludCByZXM7CisKKyAgZG8geworICAgIGxvY2tmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJ3YiIpOworICB9IHdoaWxlKChsb2NrZmlsZSA9PSBOVUxMKSAmJiAoKGVycm9yID0gRVJSTk8pID09IEVJTlRSKSk7CisgIGlmKGxvY2tmaWxlID09IE5VTEwpIHsKKyAgICBsb2dtc2coIkVycm9yIGNyZWF0aW5nIGxvY2sgZmlsZSAlcyBlcnJvcjogJWQgJXMiLAorICAgICAgICAgICBmaWxlbmFtZSwgZXJyb3IsIHN0cmVycm9yKGVycm9yKSk7CisgICAgcmV0dXJuOworICB9CisKKyAgZG8geworICAgIHJlcyA9IGZjbG9zZShsb2NrZmlsZSk7CisgIH0gd2hpbGUocmVzICYmICgoZXJyb3IgPSBFUlJOTykgPT0gRUlOVFIpKTsKKyAgaWYocmVzKQorICAgIGxvZ21zZygiRXJyb3IgY2xvc2luZyBsb2NrIGZpbGUgJXMgZXJyb3I6ICVkICVzIiwKKyAgICAgICAgICAgZmlsZW5hbWUsIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOworfQorCit2b2lkIGNsZWFyX2Fkdmlzb3JfcmVhZF9sb2NrKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICBpbnQgZXJyb3IgPSAwOworICBpbnQgcmVzOworCisgIC8qCisgICoqIExvZyBhbGwgcmVtb3ZhbCBmYWlsdXJlcy4gRXZlbiB0aG9zZSBkdWUgdG8gZmlsZSBub3QgZXhpc3RpbmcuCisgICoqIFRoaXMgYWxsb3dzIHRvIGRldGVjdCBpZiB1bmV4cGVjdGVkbHkgdGhlIGZpbGUgaGFzIGFscmVhZHkgYmVlbgorICAqKiByZW1vdmVkIGJ5IGEgcHJvY2VzcyBkaWZmZXJlbnQgdGhhbiB0aGUgb25lIHRoYXQgc2hvdWxkIGRvIHRoaXMuCisgICovCisKKyAgZG8geworICAgIHJlcyA9IHVubGluayhmaWxlbmFtZSk7CisgIH0gd2hpbGUocmVzICYmICgoZXJyb3IgPSBFUlJOTykgPT0gRUlOVFIpKTsKKyAgaWYocmVzKQorICAgIGxvZ21zZygiRXJyb3IgcmVtb3ZpbmcgbG9jayBmaWxlICVzIGVycm9yOiAlZCAlcyIsCisgICAgICAgICAgIGZpbGVuYW1lLCBlcnJvciwgc3RyZXJyb3IoZXJyb3IpKTsKK30KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlci91dGlsLmggYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYzhmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXIvdXRpbC5oCkBAIC0wLDAgKzEsNjUgQEAKKyNpZm5kZWYgX19TRVJWRVJfVVRJTF9ICisjZGVmaW5lIF9fU0VSVkVSX1VUSUxfSAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2NoYXIgKmRhdGFfdG9faGV4KGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOwordm9pZCBsb2dtc2coY29uc3QgY2hhciAqbXNnLCAuLi4pOworCisjZGVmaW5lIFRFU1RfREFUQV9QQVRIICIlcy9kYXRhL3Rlc3QlbGQiCisKKyNkZWZpbmUgU0VSVkVSTE9HU19MT0NLICJsb2cvc2VydmVybG9ncy5sb2NrIgorCisvKiBnbG9iYWwgdmFyaWFibGUsIHdoZXJlIHRvIGZpbmQgdGhlICdkYXRhJyBkaXIgKi8KK2V4dGVybiBjb25zdCBjaGFyICpwYXRoOworCisvKiBnbG9iYWwgdmFyaWFibGUsIGxvZyBmaWxlIG5hbWUgKi8KK2V4dGVybiBjb25zdCBjaGFyICpzZXJ2ZXJsb2dmaWxlOworCisjaWZkZWYgV0lOMzIKKyNpbmNsdWRlIDxwcm9jZXNzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2RlZmluZSBzbGVlcChzZWMpICAgU2xlZXAgKChzZWMpKjEwMDApCisKKyN1bmRlZiBwZXJyb3IKKyNkZWZpbmUgcGVycm9yKG0pIHdpbjMyX3BlcnJvcihtKQordm9pZCB3aW4zMl9wZXJyb3IgKGNvbnN0IGNoYXIgKm1zZyk7CisjZW5kaWYgIC8qIFdJTjMyICovCisKKyNpZmRlZiBVU0VfV0lOU09DSwordm9pZCB3aW4zMl9pbml0KHZvaWQpOwordm9pZCB3aW4zMl9jbGVhbnVwKHZvaWQpOworI2VuZGlmICAvKiBVU0VfV0lOU09DSyAqLworCisvKiByZXR1cm5zIHRoZSBwYXRoIG5hbWUgdG8gdGhlIHRlc3QgY2FzZSBmaWxlICovCitjaGFyICp0ZXN0MmZpbGUobG9uZyB0ZXN0bm8pOworCitpbnQgd2FpdF9tcyhpbnQgdGltZW91dF9tcyk7CisKK2ludCB3cml0ZV9waWRmaWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKwordm9pZCBzZXRfYWR2aXNvcl9yZWFkX2xvY2soY29uc3QgY2hhciAqZmlsZW5hbWUpOworCit2b2lkIGNsZWFyX2Fkdmlzb3JfcmVhZF9sb2NrKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworI2VuZGlmICAvKiBfX1NFUlZFUl9VVElMX0ggKi8KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3NlcnZlcmhlbHAucG0gYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXJoZWxwLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDFkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy9zZXJ2ZXJoZWxwLnBtCkBAIC0wLDAgKzEsMjQ2IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK3BhY2thZ2Ugc2VydmVyaGVscDsKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBFeHBvcnRlcjsKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEdsb2JhbCBzeW1ib2xzIGFsbG93ZWQgd2l0aG91dCBleHBsaWNpdCBwYWNrYWdlIG5hbWUKKyMKK3VzZSB2YXJzIHF3KAorICAgIEBJU0EKKyAgICBARVhQT1JUX09LCisgICAgKTsKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEluaGVyaXQgRXhwb3J0ZXIncyBjYXBhYmlsaXRpZXMKKyMKK0BJU0EgPSBxdyhFeHBvcnRlcik7CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBHbG9iYWwgc3ltYm9scyB0aGlzIG1vZHVsZSB3aWxsIGV4cG9ydCB1cG9uIHJlcXVlc3QKKyMKK0BFWFBPUlRfT0sgPSBxdygKKyAgICBzZXJ2ZXJmYWN0b3JzCisgICAgc2VydmVybmFtZV9pZAorICAgIHNlcnZlcm5hbWVfc3RyCisgICAgc2VydmVybmFtZV9jYW5vbgorICAgIHNlcnZlcl9waWRmaWxlbmFtZQorICAgIHNlcnZlcl9sb2dmaWxlbmFtZQorICAgIHNlcnZlcl9jbWRmaWxlbmFtZQorICAgIHNlcnZlcl9pbnB1dGZpbGVuYW1lCisgICAgc2VydmVyX291dHB1dGZpbGVuYW1lCisgICAgbWFpbnNvY2tmX3BpZGZpbGVuYW1lCisgICAgbWFpbnNvY2tmX2xvZ2ZpbGVuYW1lCisgICAgZGF0YXNvY2tmX3BpZGZpbGVuYW1lCisgICAgZGF0YXNvY2tmX2xvZ2ZpbGVuYW1lCisgICAgKTsKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEp1c3QgZm9yIGNvbnZlbmllbmNlLCB0ZXN0IGhhcm5lc3MgdXNlcyAnaHR0cHMnIGFuZCAnaHR0cHRscycgbGl0ZXJhbHMgYXMKKyMgdmFsdWVzIGZvciAncHJvdG8nIHZhcmlhYmxlIGluIG9yZGVyIHRvIGRpZmZlcmVudGlhdGUgZGlmZmVyZW50IHNlcnZlcnMuCisjICdodHRwcycgbGl0ZXJhbCBpcyB1c2VkIGZvciBzdHVubmVsIGJhc2VkIGh0dHBzIHRlc3Qgc2VydmVycywgYW5kICdodHRwdGxzJworIyBpcyB1c2VkIGZvciBub24tc3R1bm5lbCBodHRwcyB0ZXN0IHNlcnZlcnMuCisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBSZXR1cm4gc2VydmVyIGNoYXJhY3Rlcml6YXRpb24gZmFjdG9ycyBnaXZlbiBhIHNlcnZlciBpZCBzdHJpbmcuCisjCitzdWIgc2VydmVyZmFjdG9ycyB7CisgICAgbXkgJHNlcnZlciA9ICRfWzBdOworICAgIG15ICRwcm90bzsKKyAgICBteSAkaXB2bnVtOworICAgIG15ICRpZG51bTsKKworICAgIGlmKCRzZXJ2ZXIgPX4KKyAgICAgICAgL14oKGZ0cHxodHRwfGltYXB8cG9wM3xzbXRwKXM/KShcZCopKC1pcHY2fCkkLykgeworICAgICAgICAkcHJvdG8gID0gJDE7CisgICAgICAgICRpZG51bSAgPSAoJDMgJiYgKCQzID4gMSkpID8gJDMgOiAxOworICAgICAgICAkaXB2bnVtID0gKCQ0ICYmICgkNCA9fiAvNiQvKSkgPyA2IDogNDsKKyAgICB9CisgICAgZWxzaWYoJHNlcnZlciA9fgorICAgICAgICAvXih0ZnRwfHNmdHB8c29ja3N8c3NofHJ0c3B8Z29waGVyfGh0dHB0bHMpKFxkKikoLWlwdjZ8KSQvKSB7CisgICAgICAgICRwcm90byAgPSAkMTsKKyAgICAgICAgJGlkbnVtICA9ICgkMiAmJiAoJDIgPiAxKSkgPyAkMiA6IDE7CisgICAgICAgICRpcHZudW0gPSAoJDMgJiYgKCQzID1+IC82JC8pKSA/IDYgOiA0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZGllICJpbnZhbGlkIHNlcnZlciBpZDogJyRzZXJ2ZXInIgorICAgIH0KKyAgICByZXR1cm4oJHByb3RvLCAkaXB2bnVtLCAkaWRudW0pOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgUmV0dXJuIHNlcnZlciBuYW1lIHN0cmluZyBmb3JtYXR0ZWQgZm9yIHByZXNlbnRhdGlvbiBwdXJwb3NlcworIworc3ViIHNlcnZlcm5hbWVfc3RyIHsKKyAgICBteSAoJHByb3RvLCAkaXB2ZXIsICRpZG51bSkgPSBAXzsKKworICAgICRwcm90byA9IHVjKCRwcm90bykgaWYoJHByb3RvKTsKKyAgICBkaWUgInVuc3VwcG9ydGVkIHByb3RvY29sOiAnJHByb3RvJyIgdW5sZXNzKCRwcm90byAmJgorICAgICAgICAoJHByb3RvID1+IC9eKCgoRlRQfEhUVFB8SU1BUHxQT1AzfFNNVFApUz8pfChURlRQfFNGVFB8U09DS1N8U1NIfFJUU1B8R09QSEVSfEhUVFBUTFMpKSQvKSk7CisKKyAgICAkaXB2ZXIgPSAobm90ICRpcHZlcikgPyAnaXB2NCcgOiBsYygkaXB2ZXIpOworICAgIGRpZSAidW5zdXBwb3J0ZWQgSVAgdmVyc2lvbjogJyRpcHZlciciIHVubGVzcygkaXB2ZXIgJiYKKyAgICAgICAgKCRpcHZlciA9fiAvXig0fDZ8aXB2NHxpcHY2fC1pcHY0fC1pcHY2KSQvKSk7CisgICAgJGlwdmVyID0gKCRpcHZlciA9fiAvNiQvKSA/ICctSVB2NicgOiAnJzsKKworICAgICRpZG51bSA9IDEgaWYobm90ICRpZG51bSk7CisgICAgZGllICJ1bnN1cHBvcnRlZCBJRCBudW1iZXI6ICckaWRudW0nIiB1bmxlc3MoJGlkbnVtICYmCisgICAgICAgICgkaWRudW0gPX4gL14oXGQrKSQvKSk7CisgICAgJGlkbnVtID0gJycgdW5sZXNzKCRpZG51bSA+IDEpOworCisgICAgcmV0dXJuICIke3Byb3RvfSR7aWRudW19JHtpcHZlcn0iOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgUmV0dXJuIHNlcnZlciBuYW1lIHN0cmluZyBmb3JtYXR0ZWQgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzCisjCitzdWIgc2VydmVybmFtZV9pZCB7CisgICAgbXkgKCRwcm90bywgJGlwdmVyLCAkaWRudW0pID0gQF87CisgICAgcmV0dXJuIGxjKHNlcnZlcm5hbWVfc3RyKCRwcm90bywgJGlwdmVyLCAkaWRudW0pKTsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIFJldHVybiBzZXJ2ZXIgbmFtZSBzdHJpbmcgZm9ybWF0dGVkIGZvciBmaWxlIG5hbWUgcHVycG9zZXMKKyMKK3N1YiBzZXJ2ZXJuYW1lX2Nhbm9uIHsKKyAgICBteSAoJHByb3RvLCAkaXB2ZXIsICRpZG51bSkgPSBAXzsKKyAgICBteSAkc3RyaW5nID0gbGMoc2VydmVybmFtZV9zdHIoJHByb3RvLCAkaXB2ZXIsICRpZG51bSkpOworICAgICRzdHJpbmcgPX4gdHIvLS9fLzsKKyAgICByZXR1cm4gJHN0cmluZzsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIFJldHVybiBmaWxlIG5hbWUgZm9yIHNlcnZlciBwaWQgZmlsZS4KKyMKK3N1YiBzZXJ2ZXJfcGlkZmlsZW5hbWUgeworICAgIG15ICgkcHJvdG8sICRpcHZlciwgJGlkbnVtKSA9IEBfOworICAgIG15ICR0cmFpbGVyID0gJ19zZXJ2ZXIucGlkJzsKKyAgICByZXR1cm4gJy4nLiBzZXJ2ZXJuYW1lX2Nhbm9uKCRwcm90bywgJGlwdmVyLCAkaWRudW0pIC4iJHRyYWlsZXIiOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgUmV0dXJuIGZpbGUgbmFtZSBmb3Igc2VydmVyIGxvZyBmaWxlLgorIworc3ViIHNlcnZlcl9sb2dmaWxlbmFtZSB7CisgICAgbXkgKCRsb2dkaXIsICRwcm90bywgJGlwdmVyLCAkaWRudW0pID0gQF87CisgICAgbXkgJHRyYWlsZXIgPSAnX3NlcnZlci5sb2cnOworICAgICR0cmFpbGVyID0gJ19zdHVubmVsLmxvZycgaWYobGMoJHByb3RvKSA9fiAvXihmdHB8aHR0cHxpbWFwfHBvcDN8c210cClzJC8pOworICAgIHJldHVybiAiJHtsb2dkaXJ9LyIuIHNlcnZlcm5hbWVfY2Fub24oJHByb3RvLCAkaXB2ZXIsICRpZG51bSkgLiIkdHJhaWxlciI7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBSZXR1cm4gZmlsZSBuYW1lIGZvciBzZXJ2ZXIgY29tbWFuZHMgZmlsZS4KKyMKK3N1YiBzZXJ2ZXJfY21kZmlsZW5hbWUgeworICAgIG15ICgkbG9nZGlyLCAkcHJvdG8sICRpcHZlciwgJGlkbnVtKSA9IEBfOworICAgIG15ICR0cmFpbGVyID0gJ19zZXJ2ZXIuY21kJzsKKyAgICByZXR1cm4gIiR7bG9nZGlyfS8iLiBzZXJ2ZXJuYW1lX2Nhbm9uKCRwcm90bywgJGlwdmVyLCAkaWRudW0pIC4iJHRyYWlsZXIiOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgUmV0dXJuIGZpbGUgbmFtZSBmb3Igc2VydmVyIGlucHV0IGZpbGUuCisjCitzdWIgc2VydmVyX2lucHV0ZmlsZW5hbWUgeworICAgIG15ICgkbG9nZGlyLCAkcHJvdG8sICRpcHZlciwgJGlkbnVtKSA9IEBfOworICAgIG15ICR0cmFpbGVyID0gJ19zZXJ2ZXIuaW5wdXQnOworICAgIHJldHVybiAiJHtsb2dkaXJ9LyIuIHNlcnZlcm5hbWVfY2Fub24oJHByb3RvLCAkaXB2ZXIsICRpZG51bSkgLiIkdHJhaWxlciI7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBSZXR1cm4gZmlsZSBuYW1lIGZvciBzZXJ2ZXIgb3V0cHV0IGZpbGUuCisjCitzdWIgc2VydmVyX291dHB1dGZpbGVuYW1lIHsKKyAgICBteSAoJGxvZ2RpciwgJHByb3RvLCAkaXB2ZXIsICRpZG51bSkgPSBAXzsKKyAgICBteSAkdHJhaWxlciA9ICdfc2VydmVyLm91dHB1dCc7CisgICAgcmV0dXJuICIke2xvZ2Rpcn0vIi4gc2VydmVybmFtZV9jYW5vbigkcHJvdG8sICRpcHZlciwgJGlkbnVtKSAuIiR0cmFpbGVyIjsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIFJldHVybiBmaWxlIG5hbWUgZm9yIG1haW4gb3IgcHJpbWFyeSBzb2NrZmlsdGVyIHBpZCBmaWxlLgorIworc3ViIG1haW5zb2NrZl9waWRmaWxlbmFtZSB7CisgICAgbXkgKCRwcm90bywgJGlwdmVyLCAkaWRudW0pID0gQF87CisgICAgZGllICJ1bnN1cHBvcnRlZCBwcm90b2NvbDogJyRwcm90byciIHVubGVzcygkcHJvdG8gJiYKKyAgICAgICAgKGxjKCRwcm90bykgPX4gL14oZnRwfGltYXB8cG9wM3xzbXRwKXM/JC8pKTsKKyAgICBteSAkdHJhaWxlciA9IChsYygkcHJvdG8pID1+IC9eZnRwcz8kLykgPyAnX3NvY2tjdHJsLnBpZCc6J19zb2NrZmlsdC5waWQnOworICAgIHJldHVybiAnLicuIHNlcnZlcm5hbWVfY2Fub24oJHByb3RvLCAkaXB2ZXIsICRpZG51bSkgLiIkdHJhaWxlciI7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBSZXR1cm4gZmlsZSBuYW1lIGZvciBtYWluIG9yIHByaW1hcnkgc29ja2ZpbHRlciBsb2cgZmlsZS4KKyMKK3N1YiBtYWluc29ja2ZfbG9nZmlsZW5hbWUgeworICAgIG15ICgkbG9nZGlyLCAkcHJvdG8sICRpcHZlciwgJGlkbnVtKSA9IEBfOworICAgIGRpZSAidW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICckcHJvdG8nIiB1bmxlc3MoJHByb3RvICYmCisgICAgICAgIChsYygkcHJvdG8pID1+IC9eKGZ0cHxpbWFwfHBvcDN8c210cClzPyQvKSk7CisgICAgbXkgJHRyYWlsZXIgPSAobGMoJHByb3RvKSA9fiAvXmZ0cHM/JC8pID8gJ19zb2NrY3RybC5sb2cnOidfc29ja2ZpbHQubG9nJzsKKyAgICByZXR1cm4gIiR7bG9nZGlyfS8iLiBzZXJ2ZXJuYW1lX2Nhbm9uKCRwcm90bywgJGlwdmVyLCAkaWRudW0pIC4iJHRyYWlsZXIiOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgUmV0dXJuIGZpbGUgbmFtZSBmb3IgZGF0YSBvciBzZWNvbmRhcnkgc29ja2ZpbHRlciBwaWQgZmlsZS4KKyMKK3N1YiBkYXRhc29ja2ZfcGlkZmlsZW5hbWUgeworICAgIG15ICgkcHJvdG8sICRpcHZlciwgJGlkbnVtKSA9IEBfOworICAgIGRpZSAidW5zdXBwb3J0ZWQgcHJvdG9jb2w6ICckcHJvdG8nIiB1bmxlc3MoJHByb3RvICYmCisgICAgICAgIChsYygkcHJvdG8pID1+IC9eZnRwcz8kLykpOworICAgIG15ICR0cmFpbGVyID0gJ19zb2NrZGF0YS5waWQnOworICAgIHJldHVybiAnLicuIHNlcnZlcm5hbWVfY2Fub24oJHByb3RvLCAkaXB2ZXIsICRpZG51bSkgLiIkdHJhaWxlciI7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBSZXR1cm4gZmlsZSBuYW1lIGZvciBkYXRhIG9yIHNlY29uZGFyeSBzb2NrZmlsdGVyIGxvZyBmaWxlLgorIworc3ViIGRhdGFzb2NrZl9sb2dmaWxlbmFtZSB7CisgICAgbXkgKCRsb2dkaXIsICRwcm90bywgJGlwdmVyLCAkaWRudW0pID0gQF87CisgICAgZGllICJ1bnN1cHBvcnRlZCBwcm90b2NvbDogJyRwcm90byciIHVubGVzcygkcHJvdG8gJiYKKyAgICAgICAgKGxjKCRwcm90bykgPX4gL15mdHBzPyQvKSk7CisgICAgbXkgJHRyYWlsZXIgPSAnX3NvY2tkYXRhLmxvZyc7CisgICAgcmV0dXJuICIke2xvZ2Rpcn0vIi4gc2VydmVybmFtZV9jYW5vbigkcHJvdG8sICRpcHZlciwgJGlkbnVtKSAuIiR0cmFpbGVyIjsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEVuZCBvZiBsaWJyYXJ5CisxOworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9zc2hoZWxwLnBtIGIvY3VybC03LjI1LjAvdGVzdHMvc3NoaGVscC5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWQ5YTAxCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvc3NoaGVscC5wbQpAQCAtMCwwICsxLDQ1NCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitwYWNrYWdlIHNzaGhlbHA7CisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRXhwb3J0ZXI7Cit1c2UgRmlsZTo6U3BlYzsKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEdsb2JhbCBzeW1ib2xzIGFsbG93ZWQgd2l0aG91dCBleHBsaWNpdCBwYWNrYWdlIG5hbWUKKyMKK3VzZSB2YXJzIHF3KAorICAgIEBJU0EKKyAgICBARVhQT1JUX09LCisgICAgJHNzaGRleGUKKyAgICAkc3NoZXhlCisgICAgJHNmdHBzcnZleGUKKyAgICAkc2Z0cGV4ZQorICAgICRzc2hrZXlnZW5leGUKKyAgICAkaHR0cHRsc3NydmV4ZQorICAgICRzc2hkY29uZmlnCisgICAgJHNzaGNvbmZpZworICAgICRzZnRwY29uZmlnCisgICAgJGtub3duaG9zdHMKKyAgICAkc3NoZGxvZworICAgICRzc2hsb2cKKyAgICAkc2Z0cGxvZworICAgICRzZnRwY21kcworICAgICRoc3RwcnZrZXlmCisgICAgJGhzdHB1YmtleWYKKyAgICAkY2xpcHJ2a2V5ZgorICAgICRjbGlwdWJrZXlmCisgICAgQHNmdHBwYXRoCisgICAgQGh0dHB0bHNzcnZwYXRoCisgICAgKTsKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEluaGVyaXQgRXhwb3J0ZXIncyBjYXBhYmlsaXRpZXMKKyMKK0BJU0EgPSBxdyhFeHBvcnRlcik7CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBHbG9iYWwgc3ltYm9scyB0aGlzIG1vZHVsZSB3aWxsIGV4cG9ydCB1cG9uIHJlcXVlc3QKKyMKK0BFWFBPUlRfT0sgPSBxdygKKyAgICAkc3NoZGV4ZQorICAgICRzc2hleGUKKyAgICAkc2Z0cHNydmV4ZQorICAgICRzZnRwZXhlCisgICAgJHNzaGtleWdlbmV4ZQorICAgICRzc2hkY29uZmlnCisgICAgJHNzaGNvbmZpZworICAgICRzZnRwY29uZmlnCisgICAgJGtub3duaG9zdHMKKyAgICAkc3NoZGxvZworICAgICRzc2hsb2cKKyAgICAkc2Z0cGxvZworICAgICRzZnRwY21kcworICAgICRoc3RwcnZrZXlmCisgICAgJGhzdHB1YmtleWYKKyAgICAkY2xpcHJ2a2V5ZgorICAgICRjbGlwdWJrZXlmCisgICAgZGlzcGxheV9zc2hkY29uZmlnCisgICAgZGlzcGxheV9zc2hjb25maWcKKyAgICBkaXNwbGF5X3NmdHBjb25maWcKKyAgICBkaXNwbGF5X3NzaGRsb2cKKyAgICBkaXNwbGF5X3NzaGxvZworICAgIGRpc3BsYXlfc2Z0cGxvZworICAgIGR1bXBfYXJyYXkKKyAgICBleGVfZXh0CisgICAgZmluZF9zc2hkCisgICAgZmluZF9zc2gKKyAgICBmaW5kX3NmdHBzcnYKKyAgICBmaW5kX3NmdHAKKyAgICBmaW5kX3NzaGtleWdlbgorICAgIGZpbmRfaHR0cHRsc3NydgorICAgIGxvZ21zZworICAgIHNzaHZlcnNpb25pbmZvCisgICAgKTsKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEdsb2JhbCB2YXJpYWJsZXMgaW5pdGlhbGl6YXRpb24KKyMKKyRzc2hkZXhlICAgICAgICAgPSAnc3NoZCcgICAgICAgIC5leGVfZXh0KCk7ICMgYmFzZSBuYW1lIGFuZCBleHQgb2Ygc3NoIGRhZW1vbgorJHNzaGV4ZSAgICAgICAgICA9ICdzc2gnICAgICAgICAgLmV4ZV9leHQoKTsgIyBiYXNlIG5hbWUgYW5kIGV4dCBvZiBzc2ggY2xpZW50Ciskc2Z0cHNydmV4ZSAgICAgID0gJ3NmdHAtc2VydmVyJyAuZXhlX2V4dCgpOyAjIGJhc2UgbmFtZSBhbmQgZXh0IG9mIHNmdHAtc2VydmVyCiskc2Z0cGV4ZSAgICAgICAgID0gJ3NmdHAnICAgICAgICAuZXhlX2V4dCgpOyAjIGJhc2UgbmFtZSBhbmQgZXh0IG9mIHNmdHAgY2xpZW50Ciskc3Noa2V5Z2VuZXhlICAgID0gJ3NzaC1rZXlnZW4nICAuZXhlX2V4dCgpOyAjIGJhc2UgbmFtZSBhbmQgZXh0IG9mIHNzaC1rZXlnZW4KKyRodHRwdGxzc3J2ZXhlICAgPSAnZ251dGxzLXNlcnYnIC5leGVfZXh0KCk7ICMgYmFzZSBuYW1lIGFuZCBleHQgb2YgZ251dGxzLXNlcnYKKyRzc2hkY29uZmlnICAgICAgPSAnY3VybF9zc2hkX2NvbmZpZyc7ICAgICAgICMgc3NoIGRhZW1vbiBjb25maWcgZmlsZQorJHNzaGNvbmZpZyAgICAgICA9ICdjdXJsX3NzaF9jb25maWcnOyAgICAgICAgIyBzc2ggY2xpZW50IGNvbmZpZyBmaWxlCiskc2Z0cGNvbmZpZyAgICAgID0gJ2N1cmxfc2Z0cF9jb25maWcnOyAgICAgICAjIHNmdHAgY2xpZW50IGNvbmZpZyBmaWxlCiskc3NoZGxvZyAgICAgICAgID0gdW5kZWY7ICAgICAgICAgICAgICAgICAgICAjIHNzaCBkYWVtb24gbG9nIGZpbGUKKyRzc2hsb2cgICAgICAgICAgPSB1bmRlZjsgICAgICAgICAgICAgICAgICAgICMgc3NoIGNsaWVudCBsb2cgZmlsZQorJHNmdHBsb2cgICAgICAgICA9IHVuZGVmOyAgICAgICAgICAgICAgICAgICAgIyBzZnRwIGNsaWVudCBsb2cgZmlsZQorJHNmdHBjbWRzICAgICAgICA9ICdjdXJsX3NmdHBfY21kcyc7ICAgICAgICAgIyBzZnRwIGNsaWVudCBjb21tYW5kcyBiYXRjaCBmaWxlCiska25vd25ob3N0cyAgICAgID0gJ2N1cmxfY2xpZW50X2tub3duaG9zdHMnOyAjIHNzaCBrbm93bmhvc3RzIGZpbGUKKyRoc3RwcnZrZXlmICAgICAgPSAnY3VybF9ob3N0X2RzYV9rZXknOyAgICAgICMgaG9zdCBwcml2YXRlIGtleSBmaWxlCiskaHN0cHVia2V5ZiAgICAgID0gJ2N1cmxfaG9zdF9kc2Ffa2V5LnB1Yic7ICAjIGhvc3QgcHVibGljIGtleSBmaWxlCiskY2xpcHJ2a2V5ZiAgICAgID0gJ2N1cmxfY2xpZW50X2tleSc7ICAgICAgICAjIGNsaWVudCBwcml2YXRlIGtleSBmaWxlCiskY2xpcHVia2V5ZiAgICAgID0gJ2N1cmxfY2xpZW50X2tleS5wdWInOyAgICAjIGNsaWVudCBwdWJsaWMga2V5IGZpbGUKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEFic29sdXRlIHBhdGhzIHdoZXJlIHRvIGxvb2sgZm9yIHNmdHAtc2VydmVyIHBsdWdpbiwgd2hlbiBub3QgaW4gUEFUSAorIworQHNmdHBwYXRoID0gcXcoCisgICAgL3Vzci9saWIvb3BlbnNzaAorICAgIC91c3IvbGliZXhlYy9vcGVuc3NoCisgICAgL3Vzci9saWJleGVjCisgICAgL3Vzci9sb2NhbC9saWJleGVjCisgICAgL29wdC9sb2NhbC9saWJleGVjCisgICAgL3Vzci9saWIvc3NoCisgICAgL3Vzci9saWJleGVjL3NzaAorICAgIC91c3Ivc2JpbgorICAgIC91c3IvbGliCisgICAgL3Vzci9saWIvc3NoL29wZW5zc2gKKyAgICAvdXNyL2xpYjY0L3NzaAorICAgIC91c3IvbGliNjQvbWlzYworICAgIC91c3IvbGliL21pc2MKKyAgICAvdXNyL2xvY2FsL3NiaW4KKyAgICAvdXNyL2ZyZWV3YXJlL2JpbgorICAgIC91c3IvZnJlZXdhcmUvc2JpbgorICAgIC91c3IvZnJlZXdhcmUvbGliZXhlYworICAgIC9vcHQvc3NoL3NiaW4KKyAgICAvb3B0L3NzaC9saWJleGVjCisgICAgKTsKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEFic29sdXRlIHBhdGhzIHdoZXJlIHRvIGxvb2sgZm9yIGh0dHB0bHNzcnYgKGdudXRscy1zZXJ2KSwgd2hlbiBub3QgaW4gUEFUSAorIworQGh0dHB0bHNzcnZwYXRoID0gcXcoCisgICAgL3Vzci9zYmluCisgICAgL3Vzci9saWJleGVjCisgICAgL3Vzci9saWIKKyAgICAvdXNyL2xpYi9taXNjCisgICAgL3Vzci9saWI2NC9taXNjCisgICAgL3Vzci9sb2NhbC9iaW4KKyAgICAvdXNyL2xvY2FsL3NiaW4KKyAgICAvdXNyL2xvY2FsL2xpYmV4ZWMKKyAgICAvb3B0L2xvY2FsL2JpbgorICAgIC9vcHQvbG9jYWwvc2JpbgorICAgIC9vcHQvbG9jYWwvbGliZXhlYworICAgIC91c3IvZnJlZXdhcmUvYmluCisgICAgL3Vzci9mcmVld2FyZS9zYmluCisgICAgL3Vzci9mcmVld2FyZS9saWJleGVjCisgICAgL29wdC9nbnV0bHMvYmluCisgICAgL29wdC9nbnV0bHMvc2JpbgorICAgIC9vcHQvZ251dGxzL2xpYmV4ZWMKKyAgICApOworCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgUmV0dXJuIGZpbGUgZXh0ZW5zaW9uIGZvciBleGVjdXRhYmxlIGZpbGVzIG9uIHRoaXMgb3BlcmF0aW5nIHN5c3RlbQorIworc3ViIGV4ZV9leHQgeworICAgIGlmICgkXk8gZXEgJ01TV2luMzInIHx8ICReTyBlcSAnY3lnd2luJyB8fCAkXk8gZXEgJ21zeXMnIHx8CisgICAgICAgICReTyBlcSAnZG9zJyB8fCAkXk8gZXEgJ29zMicpIHsKKyAgICAgICAgcmV0dXJuICcuZXhlJzsKKyAgICB9Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBDcmVhdGUgb3Igb3ZlcndyaXRlIHRoZSBnaXZlbiBmaWxlIHdpdGggbGluZXMgZnJvbSBhbiBhcnJheSBvZiBzdHJpbmdzCisjCitzdWIgZHVtcF9hcnJheSB7CisgICAgbXkgKCRmaWxlbmFtZSwgQGFycikgPSBAXzsKKyAgICBteSAkZXJyb3I7CisKKyAgICBpZighJGZpbGVuYW1lKSB7CisgICAgICAgICRlcnJvciA9ICdFcnJvcjogTWlzc2luZyBhcmd1bWVudCAxIGZvciBkdW1wX2FycmF5KCknOworICAgIH0KKyAgICBlbHNpZihvcGVuKFRFWFRGSCwgIj4kZmlsZW5hbWUiKSkgeworICAgICAgICBmb3JlYWNoIG15ICRsaW5lIChAYXJyKSB7CisgICAgICAgICAgICAkbGluZSAuPSAiXG4iIHVubGVzcygkbGluZSA9fiAvXG4kLyk7CisgICAgICAgICAgICBwcmludCBURVhURkggJGxpbmU7CisgICAgICAgIH0KKyAgICAgICAgaWYoIWNsb3NlKFRFWFRGSCkpIHsKKyAgICAgICAgICAgICRlcnJvciA9ICJFcnJvcjogY2Fubm90IGNsb3NlIGZpbGUgJGZpbGVuYW1lIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgJGVycm9yID0gIkVycm9yOiBjYW5ub3Qgd3JpdGUgZmlsZSAkZmlsZW5hbWUiOworICAgIH0KKyAgICByZXR1cm4gJGVycm9yOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgRGlzcGxheSBhIG1lc3NhZ2UKKyMKK3N1YiBsb2dtc2cgeworICAgIG15ICgkbGluZSkgPSBAXzsKKyAgICBjaG9tcCAkbGluZSBpZigkbGluZSk7CisgICAgJGxpbmUgLj0gIlxuIjsKKyAgICBwcmludCAiJGxpbmUiOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgRGlzcGxheSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gZmlsZQorIworc3ViIGRpc3BsYXlfZmlsZSB7CisgICAgbXkgJGZpbGVuYW1lID0gJF9bMF07CisgICAgcHJpbnQgIj09PSBTdGFydCBvZiBmaWxlICRmaWxlbmFtZVxuIjsKKyAgICBpZihvcGVuKERJU1BMQVlGSCwgIjwkZmlsZW5hbWUiKSkgeworICAgICAgICB3aGlsZShteSAkbGluZSA9IDxESVNQTEFZRkg+KSB7CisgICAgICAgICAgICBwcmludCAiJGxpbmUiOworICAgICAgICB9CisgICAgICAgIGNsb3NlIERJU1BMQVlGSDsKKyAgICB9CisgICAgcHJpbnQgIj09PSBFbmQgb2YgZmlsZSAkZmlsZW5hbWVcbiI7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBEaXNwbGF5IGNvbnRlbnRzIG9mIHRoZSBzc2ggZGFlbW9uIGNvbmZpZyBmaWxlCisjCitzdWIgZGlzcGxheV9zc2hkY29uZmlnIHsKKyAgICBkaXNwbGF5X2ZpbGUoJHNzaGRjb25maWcpOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgRGlzcGxheSBjb250ZW50cyBvZiB0aGUgc3NoIGNsaWVudCBjb25maWcgZmlsZQorIworc3ViIGRpc3BsYXlfc3NoY29uZmlnIHsKKyAgICBkaXNwbGF5X2ZpbGUoJHNzaGNvbmZpZyk7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBEaXNwbGF5IGNvbnRlbnRzIG9mIHRoZSBzZnRwIGNsaWVudCBjb25maWcgZmlsZQorIworc3ViIGRpc3BsYXlfc2Z0cGNvbmZpZyB7CisgICAgZGlzcGxheV9maWxlKCRzZnRwY29uZmlnKTsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIERpc3BsYXkgY29udGVudHMgb2YgdGhlIHNzaCBkYWVtb24gbG9nIGZpbGUKKyMKK3N1YiBkaXNwbGF5X3NzaGRsb2cgeworICAgIGRpZSAiZXJyb3I6IFwkc3NoZGxvZyB1bmluaXRpYWxpemVkIiBpZihub3QgZGVmaW5lZCAkc3NoZGxvZyk7CisgICAgZGlzcGxheV9maWxlKCRzc2hkbG9nKTsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIERpc3BsYXkgY29udGVudHMgb2YgdGhlIHNzaCBjbGllbnQgbG9nIGZpbGUKKyMKK3N1YiBkaXNwbGF5X3NzaGxvZyB7CisgICAgZGllICJlcnJvcjogXCRzc2hsb2cgdW5pbml0aWFsaXplZCIgaWYobm90IGRlZmluZWQgJHNzaGxvZyk7CisgICAgZGlzcGxheV9maWxlKCRzc2hsb2cpOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgRGlzcGxheSBjb250ZW50cyBvZiB0aGUgc2Z0cCBjbGllbnQgbG9nIGZpbGUKKyMKK3N1YiBkaXNwbGF5X3NmdHBsb2cgeworICAgIGRpZSAiZXJyb3I6IFwkc2Z0cGxvZyB1bmluaXRpYWxpemVkIiBpZihub3QgZGVmaW5lZCAkc2Z0cGxvZyk7CisgICAgZGlzcGxheV9maWxlKCRzZnRwbG9nKTsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEZpbmQgYSBmaWxlIHNvbWV3aGVyZSBpbiB0aGUgZ2l2ZW4gcGF0aAorIworc3ViIGZpbmRfZmlsZSB7CisgICAgbXkgJGZuID0gJF9bMF07CisgICAgc2hpZnQ7CisgICAgbXkgQHBhdGggPSBAXzsKKyAgICBmb3JlYWNoIChAcGF0aCkgeworICAgICAgICBteSAkZmlsZSA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJF8sICRmbik7CisgICAgICAgIGlmKC1lICRmaWxlICYmICEgLWQgJGZpbGUpIHsKKyAgICAgICAgICAgIHJldHVybiAkZmlsZTsKKyAgICAgICAgfQorICAgIH0KK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEZpbmQgYW4gZXhlY3V0YWJsZSBmaWxlIHNvbWV3aGVyZSBpbiB0aGUgZ2l2ZW4gcGF0aAorIworc3ViIGZpbmRfZXhlX2ZpbGUgeworICAgIG15ICRmbiA9ICRfWzBdOworICAgIHNoaWZ0OworICAgIG15IEBwYXRoID0gQF87CisgICAgbXkgJHhleHQgPSBleGVfZXh0KCk7CisgICAgZm9yZWFjaCAoQHBhdGgpIHsKKyAgICAgICAgbXkgJGZpbGUgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRfLCAkZm4pOworICAgICAgICBpZigtZSAkZmlsZSAmJiAhIC1kICRmaWxlKSB7CisgICAgICAgICAgICByZXR1cm4gJGZpbGUgaWYoLXggJGZpbGUpOworICAgICAgICAgICAgcmV0dXJuICRmaWxlIGlmKCgkeGV4dCkgJiYgKGxjKCRmaWxlKSA9fiAvXFEkeGV4dFxFJC8pKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEZpbmQgYSBmaWxlIGluIGVudmlyb25tZW50IHBhdGggb3IgaW4gb3VyIHNmdHBwYXRoCisjCitzdWIgZmluZF9maWxlX3NwYXRoIHsKKyAgICBteSAkZmlsZW5hbWUgPSAkX1swXTsKKyAgICBteSBAc3BhdGg7CisgICAgcHVzaChAc3BhdGgsIEZpbGU6OlNwZWMtPnBhdGgoKSk7CisgICAgcHVzaChAc3BhdGgsIEBzZnRwcGF0aCk7CisgICAgcmV0dXJuIGZpbmRfZmlsZSgkZmlsZW5hbWUsIEBzcGF0aCk7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBGaW5kIGFuIGV4ZWN1dGFibGUgZmlsZSBpbiBlbnZpcm9ubWVudCBwYXRoIG9yIGluIG91ciBodHRwdGxzc3J2cGF0aAorIworc3ViIGZpbmRfZXhlX2ZpbGVfaHBhdGggeworICAgIG15ICRmaWxlbmFtZSA9ICRfWzBdOworICAgIG15IEBocGF0aDsKKyAgICBwdXNoKEBocGF0aCwgRmlsZTo6U3BlYy0+cGF0aCgpKTsKKyAgICBwdXNoKEBocGF0aCwgQGh0dHB0bHNzcnZwYXRoKTsKKyAgICByZXR1cm4gZmluZF9leGVfZmlsZSgkZmlsZW5hbWUsIEBocGF0aCk7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBGaW5kIHNzaCBkYWVtb24gYW5kIHJldHVybiBjYW5vbmljYWwgZmlsZW5hbWUKKyMKK3N1YiBmaW5kX3NzaGQgeworICAgIHJldHVybiBmaW5kX2ZpbGVfc3BhdGgoJHNzaGRleGUpOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgRmluZCBzc2ggY2xpZW50IGFuZCByZXR1cm4gY2Fub25pY2FsIGZpbGVuYW1lCisjCitzdWIgZmluZF9zc2ggeworICAgIHJldHVybiBmaW5kX2ZpbGVfc3BhdGgoJHNzaGV4ZSk7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBGaW5kIHNmdHAtc2VydmVyIHBsdWdpbiBhbmQgcmV0dXJuIGNhbm9uaWNhbCBmaWxlbmFtZQorIworc3ViIGZpbmRfc2Z0cHNydiB7CisgICAgcmV0dXJuIGZpbmRfZmlsZV9zcGF0aCgkc2Z0cHNydmV4ZSk7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBGaW5kIHNmdHAgY2xpZW50IGFuZCByZXR1cm4gY2Fub25pY2FsIGZpbGVuYW1lCisjCitzdWIgZmluZF9zZnRwIHsKKyAgICByZXR1cm4gZmluZF9maWxlX3NwYXRoKCRzZnRwZXhlKTsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEZpbmQgc3NoLWtleWdlbiBhbmQgcmV0dXJuIGNhbm9uaWNhbCBmaWxlbmFtZQorIworc3ViIGZpbmRfc3Noa2V5Z2VuIHsKKyAgICByZXR1cm4gZmluZF9maWxlX3NwYXRoKCRzc2hrZXlnZW5leGUpOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgRmluZCBodHRwdGxzc3J2IChnbnV0bHMtc2VydikgYW5kIHJldHVybiBjYW5vbmljYWwgZmlsZW5hbWUKKyMKK3N1YiBmaW5kX2h0dHB0bHNzcnYgeworICAgIHJldHVybiBmaW5kX2V4ZV9maWxlX2hwYXRoKCRodHRwdGxzc3J2ZXhlKTsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIFJldHVybiB2ZXJzaW9uIGluZm8gZm9yIHRoZSBnaXZlbiBzc2ggY2xpZW50IG9yIHNlcnZlciBiaW5hcmllcworIworc3ViIHNzaHZlcnNpb25pbmZvIHsKKyAgICBteSAkc3NoYmluID0gJF9bMF07ICMgY2Fub25pY2FsIGZpbGVuYW1lCisgICAgbXkgJG1ham9yOworICAgIG15ICRtaW5vcjsKKyAgICBteSAkcGF0Y2g7CisgICAgbXkgJHNzaGlkOworICAgIG15ICR2ZXJzbnVtOworICAgIG15ICR2ZXJzc3RyOworICAgIG15ICRlcnJvcjsKKworICAgIGlmKCEkc3NoYmluKSB7CisgICAgICAgICRlcnJvciA9ICdFcnJvcjogTWlzc2luZyBhcmd1bWVudCAxIGZvciBzc2h2ZXJzaW9uaW5mbygpJzsKKyAgICB9CisgICAgZWxzaWYoISAteCAkc3NoYmluKSB7CisgICAgICAgICRlcnJvciA9ICJFcnJvcjogY2Fubm90IHJlYWQgb3IgZXhlY3V0ZSAkc3NoYmluIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG15ICRjbWQgPSAoJHNzaGJpbiA9fiAvJHNzaGRleGUkLykgPyAiJHNzaGJpbiAtPyIgOiAiJHNzaGJpbiAtViI7CisgICAgICAgICRlcnJvciA9ICIkY21kXG4iOworICAgICAgICBmb3JlYWNoIG15ICR0bXBzdHIgKHF4KCRjbWQgMj4mMSkpIHsKKyAgICAgICAgICAgIGlmKCR0bXBzdHIgPX4gL09wZW5TU0hbXy1dKFxkKylcLihcZCspKFwuKFxkKykpKi9pKSB7CisgICAgICAgICAgICAgICAgJG1ham9yID0gJDE7CisgICAgICAgICAgICAgICAgJG1pbm9yID0gJDI7CisgICAgICAgICAgICAgICAgJHBhdGNoID0gJDQ/JDQ6MDsKKyAgICAgICAgICAgICAgICAkc3NoaWQgPSAnT3BlblNTSCc7CisgICAgICAgICAgICAgICAgJHZlcnNudW0gPSAoMTAwKiRtYWpvcikgKyAoMTAqJG1pbm9yKSArICRwYXRjaDsKKyAgICAgICAgICAgICAgICAkdmVyc3N0ciA9ICIkc3NoaWQgJG1ham9yLiRtaW5vci4kcGF0Y2giOworICAgICAgICAgICAgICAgICRlcnJvciA9IHVuZGVmOworICAgICAgICAgICAgICAgIGxhc3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZigkdG1wc3RyID1+IC9TdW5bXy1dU1NIW18tXShcZCspXC4oXGQrKShcLihcZCspKSovaSkgeworICAgICAgICAgICAgICAgICRtYWpvciA9ICQxOworICAgICAgICAgICAgICAgICRtaW5vciA9ICQyOworICAgICAgICAgICAgICAgICRwYXRjaCA9ICQ0PyQ0OjA7CisgICAgICAgICAgICAgICAgJHNzaGlkID0gJ1N1blNTSCc7CisgICAgICAgICAgICAgICAgJHZlcnNudW0gPSAoMTAwKiRtYWpvcikgKyAoMTAqJG1pbm9yKSArICRwYXRjaDsKKyAgICAgICAgICAgICAgICAkdmVyc3N0ciA9ICIkc3NoaWQgJG1ham9yLiRtaW5vci4kcGF0Y2giOworICAgICAgICAgICAgICAgICRlcnJvciA9IHVuZGVmOworICAgICAgICAgICAgICAgIGxhc3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkZXJyb3IgLj0gJHRtcHN0cjsKKyAgICAgICAgfQorICAgICAgICBjaG9tcCAkZXJyb3IgaWYoJGVycm9yKTsKKyAgICB9CisgICAgcmV0dXJuICgkc3NoaWQsICR2ZXJzbnVtLCAkdmVyc3N0ciwgJGVycm9yKTsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEVuZCBvZiBsaWJyYXJ5CisxOworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy9zc2hzZXJ2ZXIucGwgYi9jdXJsLTcuMjUuMC90ZXN0cy9zc2hzZXJ2ZXIucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGJiOGJjZAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3NzaHNlcnZlci5wbApAQCAtMCwwICsxLDEwNDUgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIyBTdGFydHMgc3NoZCBmb3IgdXNlIGluIHRoZSBTQ1AsIFNGVFAgYW5kIFNPQ0tTIGN1cmwgdGVzdCBoYXJuZXNzIHRlc3RzLgorIyBBbHNvIGNyZWF0ZXMgdGhlIHNzaCBjb25maWd1cmF0aW9uIGZpbGVzIG5lZWRlZCBmb3IgdGhlc2UgdGVzdHMuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgQ3dkOworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIFZhcmlhYmxlcyBhbmQgc3VicyBpbXBvcnRlZCBmcm9tIHNzaGhlbHAgbW9kdWxlCisjCit1c2Ugc3NoaGVscCBxdygKKyAgICAkc3NoZGV4ZQorICAgICRzc2hleGUKKyAgICAkc2Z0cHNydmV4ZQorICAgICRzZnRwZXhlCisgICAgJHNzaGtleWdlbmV4ZQorICAgICRzc2hkY29uZmlnCisgICAgJHNzaGNvbmZpZworICAgICRzZnRwY29uZmlnCisgICAgJGtub3duaG9zdHMKKyAgICAkc3NoZGxvZworICAgICRzc2hsb2cKKyAgICAkc2Z0cGxvZworICAgICRzZnRwY21kcworICAgICRoc3RwcnZrZXlmCisgICAgJGhzdHB1YmtleWYKKyAgICAkY2xpcHJ2a2V5ZgorICAgICRjbGlwdWJrZXlmCisgICAgZGlzcGxheV9zc2hkY29uZmlnCisgICAgZGlzcGxheV9zc2hjb25maWcKKyAgICBkaXNwbGF5X3NmdHBjb25maWcKKyAgICBkaXNwbGF5X3NzaGRsb2cKKyAgICBkaXNwbGF5X3NzaGxvZworICAgIGRpc3BsYXlfc2Z0cGxvZworICAgIGR1bXBfYXJyYXkKKyAgICBmaW5kX3NzaGQKKyAgICBmaW5kX3NzaAorICAgIGZpbmRfc2Z0cHNydgorICAgIGZpbmRfc2Z0cAorICAgIGZpbmRfc3Noa2V5Z2VuCisgICAgbG9nbXNnCisgICAgc3NodmVyc2lvbmluZm8KKyAgICApOworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIFN1YnMgaW1wb3J0ZWQgZnJvbSBzZXJ2ZXJoZWxwIG1vZHVsZQorIwordXNlIHNlcnZlcmhlbHAgcXcoCisgICAgc2VydmVyX3BpZGZpbGVuYW1lCisgICAgc2VydmVyX2xvZ2ZpbGVuYW1lCisgICAgKTsKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK215ICR2ZXJib3NlID0gMDsgICAgICAgICAgICAgICMgc2V0IHRvIDEgZm9yIGRlYnVnZ2luZworbXkgJGRlYnVncHJvdG9jb2wgPSAwOyAgICAgICAgIyBzZXQgdG8gMSBmb3IgcHJvdG9jb2wgZGVidWdnaW5nCitteSAkcG9ydCA9IDg5OTk7ICAgICAgICAgICAgICAjIG91ciBkZWZhdWx0IFNDUC9TRlRQIHNlcnZlciBwb3J0CitteSAkc29ja3Nwb3J0ID0gJHBvcnQgKyAxOyAgICAjIG91ciBkZWZhdWx0IFNPQ0tTNC81IHNlcnZlciBwb3J0CitteSAkbGlzdGVuYWRkciA9ICcxMjcuMC4wLjEnOyAjIGRlZmF1bHQgYWRkcmVzcyBvbiB3aGljaCB0byBsaXN0ZW4KK215ICRpcHZudW0gPSA0OyAgICAgICAgICAgICAgICMgZGVmYXVsdCBJUCB2ZXJzaW9uIG9mIGxpc3RlbmVyIGFkZHJlc3MKK215ICRpZG51bSA9IDE7ICAgICAgICAgICAgICAgICMgZGFmYXVsdCBzc2ggZGFlbW9uIGluc3RhbmNlIG51bWJlcgorbXkgJHByb3RvID0gJ3NzaCc7ICAgICAgICAgICAgIyBwcm90b2NvbCB0aGUgc3NoIGRhZW1vbiBzcGVha3MKK215ICRwYXRoID0gZ2V0Y3dkKCk7ICAgICAgICAgICMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorbXkgJGxvZ2RpciA9ICRwYXRoIC4nL2xvZyc7ICAgIyBkaXJlY3RvcnkgZm9yIGxvZyBmaWxlcworbXkgJHVzZXJuYW1lID0gJEVOVntVU0VSfTsgICAgIyBkZWZhdWx0IHVzZXIKK215ICRwaWRmaWxlOyAgICAgICAgICAgICAgICAgICMgc3NoIGRhZW1vbiBwaWQgZmlsZQorCitteSAkZXJyb3I7CitteSBAY2ZnYXJyOworCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgUGFyc2UgY29tbWFuZCBsaW5lIG9wdGlvbnMKKyMKK3doaWxlKEBBUkdWKSB7CisgICAgaWYoJEFSR1ZbMF0gZXEgJy0tdmVyYm9zZScpIHsKKyAgICAgICAgJHZlcmJvc2UgPSAxOworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1kZWJ1Z3Byb3RvY29sJykgeworICAgICAgICAkdmVyYm9zZSA9IDE7CisgICAgICAgICRkZWJ1Z3Byb3RvY29sID0gMTsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tdXNlcicpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgICR1c2VybmFtZSA9ICRBUkdWWzFdOworICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0taWQnKSB7CisgICAgICAgIGlmKCRBUkdWWzFdKSB7CisgICAgICAgICAgICBpZigkQVJHVlsxXSA9fiAvXihcZCspJC8pIHsKKyAgICAgICAgICAgICAgICAkaWRudW0gPSAkMSBpZigkMSA+IDApOworICAgICAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLWlwdjQnKSB7CisgICAgICAgICRpcHZudW0gPSA0OworICAgICAgICAkbGlzdGVuYWRkciA9ICcxMjcuMC4wLjEnIGlmKCRsaXN0ZW5hZGRyIGVxICc6OjEnKTsKKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0taXB2NicpIHsKKyAgICAgICAgJGlwdm51bSA9IDY7CisgICAgICAgICRsaXN0ZW5hZGRyID0gJzo6MScgaWYoJGxpc3RlbmFkZHIgZXEgJzEyNy4wLjAuMScpOworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1hZGRyJykgeworICAgICAgICBpZigkQVJHVlsxXSkgeworICAgICAgICAgICAgbXkgJHRtcHN0ciA9ICRBUkdWWzFdOworICAgICAgICAgICAgaWYoJHRtcHN0ciA9fiAvXihcZFxkP1xkPylcLihcZFxkP1xkPylcLihcZFxkP1xkPylcLihcZFxkP1xkPykkLykgeworICAgICAgICAgICAgICAgICRsaXN0ZW5hZGRyID0gIiQxLiQyLiQzLiQ0IiBpZigkaXB2bnVtID09IDQpOworICAgICAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzaWYoJGlwdm51bSA9PSA2KSB7CisgICAgICAgICAgICAgICAgJGxpc3RlbmFkZHIgPSAkdG1wc3RyOworICAgICAgICAgICAgICAgICRsaXN0ZW5hZGRyID1+IHMvXlxbKC4qKVxdJC8kMS87CisgICAgICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tcGlkZmlsZScpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgICRwaWRmaWxlID0gIiRwYXRoLyIuICRBUkdWWzFdOworICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tc3NocG9ydCcpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0pIHsKKyAgICAgICAgICAgIGlmKCRBUkdWWzFdID1+IC9eKFxkKykkLykgeworICAgICAgICAgICAgICAgICRwb3J0ID0gJDE7CisgICAgICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tc29ja3Nwb3J0JykgeworICAgICAgICBpZigkQVJHVlsxXSkgeworICAgICAgICAgICAgaWYoJEFSR1ZbMV0gPX4gL14oXGQrKSQvKSB7CisgICAgICAgICAgICAgICAgJHNvY2tzcG9ydCA9ICQxOworICAgICAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwcmludCBTVERFUlIgIlxuV2FybmluZzogc3Noc2VydmVyLnBsIHVua25vd24gcGFyYW1ldGVyOiAkQVJHVlswXVxuIjsKKyAgICB9CisgICAgc2hpZnQgQEFSR1Y7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBEZWZhdWx0IHNzaCBkYWVtb24gcGlkIGZpbGUgbmFtZQorIworaWYoISRwaWRmaWxlKSB7CisgICAgJHBpZGZpbGUgPSAiJHBhdGgvIi4gc2VydmVyX3BpZGZpbGVuYW1lKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIHNzaCwgc29ja3MgYW5kIHNmdHAgc2VydmVyIGxvZyBmaWxlIG5hbWVzCisjCiskc3NoZGxvZyA9IHNlcnZlcl9sb2dmaWxlbmFtZSgkbG9nZGlyLCAnc3NoJywgJGlwdm51bSwgJGlkbnVtKTsKKyRzZnRwbG9nID0gc2VydmVyX2xvZ2ZpbGVuYW1lKCRsb2dkaXIsICdzZnRwJywgJGlwdm51bSwgJGlkbnVtKTsKKyRzc2hsb2cgID0gc2VydmVyX2xvZ2ZpbGVuYW1lKCRsb2dkaXIsICdzb2NrcycsICRpcHZudW0sICRpZG51bSk7CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBMb2dnaW5nIGxldmVsIGZvciBzc2ggc2VydmVyIGFuZCBjbGllbnQKKyMKK215ICRsb2dsZXZlbCA9ICRkZWJ1Z3Byb3RvY29sPydERUJVRzMnOidERUJVRzInOworCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgVmFsaWRhdGUgdXNlcm5hbWUKKyMKK2lmKCEkdXNlcm5hbWUpIHsKKyAgICAkZXJyb3IgPSAnV2lsbCBub3QgcnVuIHNzaCBzZXJ2ZXIgd2l0aG91dCBhIHVzZXIgbmFtZSc7Cit9CitlbHNpZigkdXNlcm5hbWUgZXEgJ3Jvb3QnKSB7CisgICAgJGVycm9yID0gJ1dpbGwgbm90IHJ1biBzc2ggc2VydmVyIGFzIHJvb3QgdG8gbWl0aWdhdGUgc2VjdXJpdHkgcmlza3MnOworfQoraWYoJGVycm9yKSB7CisgICAgbG9nbXNnICRlcnJvcjsKKyAgICBleGl0IDE7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBGaW5kIG91dCBzc2ggZGFlbW9uIGNhbm9uaWNhbCBmaWxlIG5hbWUKKyMKK215ICRzc2hkID0gZmluZF9zc2hkKCk7CitpZighJHNzaGQpIHsKKyAgICBsb2dtc2cgImNhbm5vdCBmaW5kICRzc2hkZXhlIjsKKyAgICBleGl0IDE7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBGaW5kIG91dCBzc2ggZGFlbW9uIHZlcnNpb24gaW5mbworIworbXkgKCRzc2hkaWQsICRzc2hkdmVybnVtLCAkc3NoZHZlcnN0ciwgJHNzaGRlcnJvcikgPSBzc2h2ZXJzaW9uaW5mbygkc3NoZCk7CitpZighJHNzaGRpZCkgeworICAgICMgTm90IGFuIE9wZW5TU0ggb3IgU3VuU1NIIHNzaCBkYWVtb24KKyAgICBsb2dtc2cgJHNzaGRlcnJvciBpZigkdmVyYm9zZSk7CisgICAgbG9nbXNnICdTQ1AsIFNGVFAgYW5kIFNPQ0tTIHRlc3RzIHJlcXVpcmUgT3BlblNTSCAyLjkuOSBvciBsYXRlcic7CisgICAgZXhpdCAxOworfQorbG9nbXNnICJzc2ggc2VydmVyIGZvdW5kICRzc2hkIGlzICRzc2hkdmVyc3RyIiBpZigkdmVyYm9zZSk7CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgc3NoIGRhZW1vbiBjb21tYW5kIGxpbmUgb3B0aW9ucyB3ZSBtaWdodCB1c2UgYW5kIHZlcnNpb24gc3VwcG9ydAorIworIyAgLWU6ICBsb2cgc3RkZXJyICAgICAgICAgICA6IE9wZW5TU0ggMi45LjAgYW5kIGxhdGVyCisjICAtZjogIHNzaGQgY29uZmlnIGZpbGUgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIC1EOiAgbm8gZGFlbW9uIGZvcmtpbmcgICAgOiBPcGVuU1NIIDIuNS4wIGFuZCBsYXRlcgorIyAgLW86ICBjb21tYW5kLWxpbmUgb3B0aW9uICA6IE9wZW5TU0ggMy4xLjAgYW5kIGxhdGVyCisjICAtdDogIHRlc3QgY29uZmlnIGZpbGUgICAgIDogT3BlblNTSCAyLjkuOSBhbmQgbGF0ZXIKKyMgIC0/OiAgc3NoZCB2ZXJzaW9uIGluZm8gICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIworIyAgLWU6ICBsb2cgc3RkZXJyICAgICAgICAgICA6IFN1blNTSCAxLjAuMCBhbmQgbGF0ZXIKKyMgIC1mOiAgc3NoZCBjb25maWcgZmlsZSAgICAgOiBTdW5TU0ggMS4wLjAgYW5kIGxhdGVyCisjICAtRDogIG5vIGRhZW1vbiBmb3JraW5nICAgIDogU3VuU1NIIDEuMC4wIGFuZCBsYXRlcgorIyAgLW86ICBjb21tYW5kLWxpbmUgb3B0aW9uICA6IFN1blNTSCAxLjAuMCBhbmQgbGF0ZXIKKyMgIC10OiAgdGVzdCBjb25maWcgZmlsZSAgICAgOiBTdW5TU0ggMS4wLjAgYW5kIGxhdGVyCisjICAtPzogIHNzaGQgdmVyc2lvbiBpbmZvICAgIDogU3VuU1NIIDEuMC4wIGFuZCBsYXRlcgorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgVmVyaWZ5IG1pbmltdW0gc3NoIGRhZW1vbiB2ZXJzaW9uCisjCitpZigoKCRzc2hkaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaGR2ZXJudW0gPCAyOTkpKSB8fAorICAgKCgkc3NoZGlkID1+IC9TdW5TU0gvKSAgJiYgKCRzc2hkdmVybnVtIDwgMTAwKSkpIHsKKyAgICBsb2dtc2cgJ1NDUCwgU0ZUUCBhbmQgU09DS1MgdGVzdHMgcmVxdWlyZSBPcGVuU1NIIDIuOS45IG9yIGxhdGVyJzsKKyAgICBleGl0IDE7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBGaW5kIG91dCBzZnRwIHNlcnZlciBwbHVnaW4gY2Fub25pY2FsIGZpbGUgbmFtZQorIworbXkgJHNmdHBzcnYgPSBmaW5kX3NmdHBzcnYoKTsKK2lmKCEkc2Z0cHNydikgeworICAgIGxvZ21zZyAiY2Fubm90IGZpbmQgJHNmdHBzcnZleGUiOworICAgIGV4aXQgMTsKK30KK2xvZ21zZyAic2Z0cCBzZXJ2ZXIgcGx1Z2luIGZvdW5kICRzZnRwc3J2IiBpZigkdmVyYm9zZSk7CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBGaW5kIG91dCBzZnRwIGNsaWVudCBjYW5vbmljYWwgZmlsZSBuYW1lCisjCitteSAkc2Z0cCA9IGZpbmRfc2Z0cCgpOworaWYoISRzZnRwKSB7CisgICAgbG9nbXNnICJjYW5ub3QgZmluZCAkc2Z0cGV4ZSI7CisgICAgZXhpdCAxOworfQorbG9nbXNnICJzZnRwIGNsaWVudCBmb3VuZCAkc2Z0cCIgaWYoJHZlcmJvc2UpOworCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgRmluZCBvdXQgc3NoIGtleWdlbiBjYW5vbmljYWwgZmlsZSBuYW1lCisjCitteSAkc3Noa2V5Z2VuID0gZmluZF9zc2hrZXlnZW4oKTsKK2lmKCEkc3Noa2V5Z2VuKSB7CisgICAgbG9nbXNnICJjYW5ub3QgZmluZCAkc3Noa2V5Z2VuZXhlIjsKKyAgICBleGl0IDE7Cit9Citsb2dtc2cgInNzaCBrZXlnZW4gZm91bmQgJHNzaGtleWdlbiIgaWYoJHZlcmJvc2UpOworCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgRmluZCBvdXQgc3NoIGNsaWVudCBjYW5vbmljYWwgZmlsZSBuYW1lCisjCitteSAkc3NoID0gZmluZF9zc2goKTsKK2lmKCEkc3NoKSB7CisgICAgbG9nbXNnICJjYW5ub3QgZmluZCAkc3NoZXhlIjsKKyAgICBleGl0IDE7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBGaW5kIG91dCBzc2ggY2xpZW50IHZlcnNpb24gaW5mbworIworbXkgKCRzc2hpZCwgJHNzaHZlcm51bSwgJHNzaHZlcnN0ciwgJHNzaGVycm9yKSA9IHNzaHZlcnNpb25pbmZvKCRzc2gpOworaWYoISRzc2hpZCkgeworICAgICMgTm90IGFuIE9wZW5TU0ggb3IgU3VuU1NIIHNzaCBjbGllbnQKKyAgICBsb2dtc2cgJHNzaGVycm9yIGlmKCR2ZXJib3NlKTsKKyAgICBsb2dtc2cgJ1NDUCwgU0ZUUCBhbmQgU09DS1MgdGVzdHMgcmVxdWlyZSBPcGVuU1NIIDIuOS45IG9yIGxhdGVyJzsKKyAgICBleGl0IDE7Cit9Citsb2dtc2cgInNzaCBjbGllbnQgZm91bmQgJHNzaCBpcyAkc3NodmVyc3RyIiBpZigkdmVyYm9zZSk7CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgc3NoIGNsaWVudCBjb21tYW5kIGxpbmUgb3B0aW9ucyB3ZSBtaWdodCB1c2UgYW5kIHZlcnNpb24gc3VwcG9ydAorIworIyAgLUQ6ICBkeW5hbWljIGFwcCBwb3J0IGZvcndhcmRpbmcgIDogT3BlblNTSCAyLjkuOSBhbmQgbGF0ZXIKKyMgIC1GOiAgc3NoIGNvbmZpZyBmaWxlICAgICAgICAgICAgICA6IE9wZW5TU0ggMi45LjkgYW5kIGxhdGVyCisjICAtTjogIG5vIHNoZWxsL2NvbW1hbmQgICAgICAgICAgICAgOiBPcGVuU1NIIDIuMS4wIGFuZCBsYXRlcgorIyAgLXA6ICBjb25uZWN0aW9uIHBvcnQgICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIC12OiAgdmVyYm9zZSBtZXNzYWdlcyAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjIC12djogIGluY3JlYXNlIHZlcmJvc2l0eSAgICAgICAgICAgOiBPcGVuU1NIIDIuMy4wIGFuZCBsYXRlcgorIyAgLVY6ICBzc2ggdmVyc2lvbiBpbmZvICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMKKyMgIC1EOiAgZHluYW1pYyBhcHAgcG9ydCBmb3J3YXJkaW5nICA6IFN1blNTSCAxLjAuMCBhbmQgbGF0ZXIKKyMgIC1GOiAgc3NoIGNvbmZpZyBmaWxlICAgICAgICAgICAgICA6IFN1blNTSCAxLjAuMCBhbmQgbGF0ZXIKKyMgIC1OOiAgbm8gc2hlbGwvY29tbWFuZCAgICAgICAgICAgICA6IFN1blNTSCAxLjAuMCBhbmQgbGF0ZXIKKyMgIC1wOiAgY29ubmVjdGlvbiBwb3J0ICAgICAgICAgICAgICA6IFN1blNTSCAxLjAuMCBhbmQgbGF0ZXIKKyMgIC12OiAgdmVyYm9zZSBtZXNzYWdlcyAgICAgICAgICAgICA6IFN1blNTSCAxLjAuMCBhbmQgbGF0ZXIKKyMgLXZ2OiAgaW5jcmVhc2UgdmVyYm9zaXR5ICAgICAgICAgICA6IFN1blNTSCAxLjAuMCBhbmQgbGF0ZXIKKyMgIC1WOiAgc3NoIHZlcnNpb24gaW5mbyAgICAgICAgICAgICA6IFN1blNTSCAxLjAuMCBhbmQgbGF0ZXIKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIFZlcmlmeSBtaW5pbXVtIHNzaCBjbGllbnQgdmVyc2lvbgorIworaWYoKCgkc3NoaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaHZlcm51bSA8IDI5OSkpIHx8CisgICAoKCRzc2hpZCA9fiAvU3VuU1NILykgICYmICgkc3NodmVybnVtIDwgMTAwKSkpIHsKKyAgICBsb2dtc2cgJ1NDUCwgU0ZUUCBhbmQgU09DS1MgdGVzdHMgcmVxdWlyZSBPcGVuU1NIIDIuOS45IG9yIGxhdGVyJzsKKyAgICBleGl0IDE7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgc3NoIGtleWdlbiBjb21tYW5kIGxpbmUgb3B0aW9ucyB3ZSBhY3R1YWxseSB1c2UgYW5kIHZlcnNpb24gc3VwcG9ydAorIworIyAgLUM6ICBpZGVudGl0eSBjb21tZW50IDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIC1mOiAga2V5IGZpbGVuYW1lICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICAtTjogIG5ldyBwYXNzcGhyYXNlICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgLXE6ICBxdWlldCBrZXlnZW4gICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIC10OiAga2V5IHR5cGUgICAgICAgICA6IE9wZW5TU0ggMi41LjAgYW5kIGxhdGVyCisjCisjICAtQzogIGlkZW50aXR5IGNvbW1lbnQgOiBTdW5TU0ggMS4wLjAgYW5kIGxhdGVyCisjICAtZjogIGtleSBmaWxlbmFtZSAgICAgOiBTdW5TU0ggMS4wLjAgYW5kIGxhdGVyCisjICAtTjogIG5ldyBwYXNzcGhyYXNlICAgOiBTdW5TU0ggMS4wLjAgYW5kIGxhdGVyCisjICAtcTogIHF1aWV0IGtleWdlbiAgICAgOiBTdW5TU0ggMS4wLjAgYW5kIGxhdGVyCisjICAtdDogIGtleSB0eXBlICAgICAgICAgOiBTdW5TU0ggMS4wLjAgYW5kIGxhdGVyCisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBHZW5lcmF0ZSBob3N0IGFuZCBjbGllbnQga2V5IGZpbGVzIGZvciBjdXJsJ3MgdGVzdHMKKyMKK2lmKCghIC1lICRoc3RwcnZrZXlmKSB8fCAoISAtcyAkaHN0cHJ2a2V5ZikgfHwKKyAgICghIC1lICRoc3RwdWJrZXlmKSB8fCAoISAtcyAkaHN0cHVia2V5ZikgfHwKKyAgICghIC1lICRjbGlwcnZrZXlmKSB8fCAoISAtcyAkY2xpcHJ2a2V5ZikgfHwKKyAgICghIC1lICRjbGlwdWJrZXlmKSB8fCAoISAtcyAkY2xpcHVia2V5ZikpIHsKKyAgICAjIE1ha2Ugc3VyZSBhbGwgZmlsZXMgYXJlIGdvbmUgc28gc3NoLWtleWdlbiBkb2Vzbid0IGNvbXBsYWluCisgICAgdW5saW5rKCRoc3RwcnZrZXlmLCAkaHN0cHVia2V5ZiwgJGNsaXBydmtleWYsICRjbGlwdWJrZXlmKTsKKyAgICBsb2dtc2cgJ2dlbmVyYXRpbmcgaG9zdCBrZXlzLi4uJyBpZigkdmVyYm9zZSk7CisgICAgaWYoc3lzdGVtICIkc3Noa2V5Z2VuIC1xIC10IGRzYSAtZiAkaHN0cHJ2a2V5ZiAtQyAnY3VybCB0ZXN0IHNlcnZlcicgLU4gJyciKSB7CisgICAgICAgIGxvZ21zZyAnQ291bGQgbm90IGdlbmVyYXRlIGhvc3Qga2V5JzsKKyAgICAgICAgZXhpdCAxOworICAgIH0KKyAgICBsb2dtc2cgJ2dlbmVyYXRpbmcgY2xpZW50IGtleXMuLi4nIGlmKCR2ZXJib3NlKTsKKyAgICBpZihzeXN0ZW0gIiRzc2hrZXlnZW4gLXEgLXQgZHNhIC1mICRjbGlwcnZrZXlmIC1DICdjdXJsIHRlc3QgY2xpZW50JyAtTiAnJyIpIHsKKyAgICAgICAgbG9nbXNnICdDb3VsZCBub3QgZ2VuZXJhdGUgY2xpZW50IGtleSc7CisgICAgICAgIGV4aXQgMTsKKyAgICB9Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgc3NoIGRhZW1vbiBjb25maWd1cmF0aW9uIGZpbGUgb3B0aW9ucyB3ZSBtaWdodCB1c2UgYW5kIHZlcnNpb24gc3VwcG9ydAorIworIyAgQUZTVG9rZW5QYXNzaW5nICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlciBbMV0KKyMgIEFjY2VwdEVudiAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAzLjkuMCBhbmQgbGF0ZXIKKyMgIEFkZHJlc3NGYW1pbHkgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCA0LjAuMCBhbmQgbGF0ZXIKKyMgIEFsbG93R3JvdXBzICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIEFsbG93VGNwRm9yd2FyZGluZyAgICAgICAgICAgICAgIDogT3BlblNTSCAyLjMuMCBhbmQgbGF0ZXIKKyMgIEFsbG93VXNlcnMgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIEF1dGhvcml6ZWRLZXlzRmlsZSAgICAgICAgICAgICAgIDogT3BlblNTSCAyLjkuOSBhbmQgbGF0ZXIKKyMgIEF1dGhvcml6ZWRLZXlzRmlsZTIgICAgICAgICAgICAgIDogT3BlblNTSCAyLjkuOSBhbmQgbGF0ZXIKKyMgIEJhbm5lciAgICAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAyLjUuMCBhbmQgbGF0ZXIKKyMgIENoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gIDogT3BlblNTSCAyLjUuMCBhbmQgbGF0ZXIKKyMgIENpcGhlcnMgICAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAyLjEuMCBhbmQgbGF0ZXIgWzNdCisjICBDbGllbnRBbGl2ZUNvdW50TWF4ICAgICAgICAgICAgICA6IE9wZW5TU0ggMi45LjAgYW5kIGxhdGVyCisjICBDbGllbnRBbGl2ZUludGVydmFsICAgICAgICAgICAgICA6IE9wZW5TU0ggMi45LjAgYW5kIGxhdGVyCisjICBDb21wcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMy4zLjAgYW5kIGxhdGVyCisjICBEZW55R3JvdXBzICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBEZW55VXNlcnMgICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBGb3JjZUNvbW1hbmQgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggNC40LjAgYW5kIGxhdGVyIFszXQorIyAgR2F0ZXdheVBvcnRzICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDIuMS4wIGFuZCBsYXRlcgorIyAgR1NTQVBJQXV0aGVudGljYXRpb24gICAgICAgICAgICAgOiBPcGVuU1NIIDMuNy4wIGFuZCBsYXRlciBbMV0KKyMgIEdTU0FQSUNsZWFudXBDcmVkZW50aWFscyAgICAgICAgIDogT3BlblNTSCAzLjguMCBhbmQgbGF0ZXIgWzFdCisjICBHU1NBUElLZXlFeGNoYW5nZSAgICAgICAgICAgICAgICA6ICBTdW5TU0ggMS4wLjAgYW5kIGxhdGVyIFsxXQorIyAgR1NTQVBJU3RvcmVEZWxlZ2F0ZWRDcmVkZW50aWFscyAgOiAgU3VuU1NIIDEuMC4wIGFuZCBsYXRlciBbMV0KKyMgIEdTU0NsZWFudXBDcmVkcyAgICAgICAgICAgICAgICAgIDogIFN1blNTSCAxLjAuMCBhbmQgbGF0ZXIgWzFdCisjICBHU1NVc2VTZXNzaW9uQ3JlZENhY2hlICAgICAgICAgICA6ICBTdW5TU0ggMS4wLjAgYW5kIGxhdGVyIFsxXQorIyAgSG9zdGJhc2VkQXV0aGVudGljYXRpb24gICAgICAgICAgOiBPcGVuU1NIIDIuOS4wIGFuZCBsYXRlcgorIyAgSG9zdGJhc2VkVXNlc05hbWVGcm9tUGFja2V0T25seSAgOiBPcGVuU1NIIDIuOS4wIGFuZCBsYXRlcgorIyAgSG9zdEtleSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgSWdub3JlUmhvc3RzICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgSWdub3JlVXNlcktub3duSG9zdHMgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbiAgICAgOiBPcGVuU1NIIDIuMy4wIGFuZCBsYXRlcgorIyAgS2VlcEFsaXZlICAgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgS2VyYmVyb3NBdXRoZW50aWNhdGlvbiAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlciBbMV0KKyMgIEtlcmJlcm9zR2V0QUZTVG9rZW4gICAgICAgICAgICAgIDogT3BlblNTSCAzLjguMCBhbmQgbGF0ZXIgWzFdCisjICBLZXJiZXJvc09yTG9jYWxQYXNzd2QgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyIFsxXQorIyAgS2VyYmVyb3NUZ3RQYXNzaW5nICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlciBbMV0KKyMgIEtlcmJlcm9zVGlja2V0Q2xlYW51cCAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIgWzFdCisjICBLZXlSZWdlbmVyYXRpb25JbnRlcnZhbCAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBMaXN0ZW5BZGRyZXNzICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBMb2dpbkdyYWNlVGltZSAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBMb2dMZXZlbCAgICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBMb29rdXBDbGllbnRIb3N0bmFtZXMgICAgICAgICAgICA6ICBTdW5TU0ggMS4wLjAgYW5kIGxhdGVyCisjICBNQUNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMi41LjAgYW5kIGxhdGVyIFszXQorIyAgTWF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDQuNC4wIGFuZCBsYXRlciBbM10KKyMgIE1heEF1dGhUcmllcyAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAzLjkuMCBhbmQgbGF0ZXIKKyMgIE1heFN0YXJ0dXBzICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAyLjIuMCBhbmQgbGF0ZXIKKyMgIFBBTUF1dGhlbnRpY2F0aW9uVmlhS2JkSW50ICAgICAgIDogT3BlblNTSCAyLjkuMCBhbmQgbGF0ZXIgWzJdCisjICBQYXNzd29yZEF1dGhlbnRpY2F0aW9uICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBQZXJtaXRFbXB0eVBhc3N3b3JkcyAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBQZXJtaXRPcGVuICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggNC40LjAgYW5kIGxhdGVyIFszXQorIyAgUGVybWl0Um9vdExvZ2luICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgUGVybWl0VHVubmVsICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDQuMy4wIGFuZCBsYXRlcgorIyAgUGVybWl0VXNlckVudmlyb25tZW50ICAgICAgICAgICAgOiBPcGVuU1NIIDMuNS4wIGFuZCBsYXRlcgorIyAgUGlkRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDIuMS4wIGFuZCBsYXRlcgorIyAgUG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgUHJpbnRMYXN0TG9nICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDIuOS4wIGFuZCBsYXRlcgorIyAgUHJpbnRNb3RkICAgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgUHJvdG9jb2wgICAgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDIuMS4wIGFuZCBsYXRlcgorIyAgUHVia2V5QXV0aGVudGljYXRpb24gICAgICAgICAgICAgOiBPcGVuU1NIIDIuNS4wIGFuZCBsYXRlcgorIyAgUmhvc3RzQXV0aGVudGljYXRpb24gICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgUmhvc3RzUlNBQXV0aGVudGljYXRpb24gICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgUlNBQXV0aGVudGljYXRpb24gICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgU2VydmVyS2V5Qml0cyAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgU2tleUF1dGhlbnRpY2F0aW9uICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlciBbMV0KKyMgIFN0cmljdE1vZGVzICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIFN1YnN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAyLjIuMCBhbmQgbGF0ZXIKKyMgIFN5c2xvZ0ZhY2lsaXR5ICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIFRDUEtlZXBBbGl2ZSAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAzLjguMCBhbmQgbGF0ZXIKKyMgIFVzZUROUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAzLjcuMCBhbmQgbGF0ZXIKKyMgIFVzZUxvZ2luICAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIFVzZVBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAzLjcuMCBhbmQgbGF0ZXIgWzFdWzJdCisjICBVc2VQcml2aWxlZ2VTZXBhcmF0aW9uICAgICAgICAgICA6IE9wZW5TU0ggMy4yLjIgYW5kIGxhdGVyCisjICBWZXJpZnlSZXZlcnNlTWFwcGluZyAgICAgICAgICAgICA6IE9wZW5TU0ggMy4xLjAgYW5kIGxhdGVyCisjICBYMTFEaXNwbGF5T2Zmc2V0ICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyIFszXQorIyAgWDExRm9yd2FyZGluZyAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgWDExVXNlTG9jYWxob3N0ICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDMuMS4wIGFuZCBsYXRlcgorIyAgWEF1dGhMb2NhdGlvbiAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDIuMS4xIGFuZCBsYXRlciBbM10KKyMKKyMgIFsxXSBPcHRpb24gb25seSBhdmFpbGFibGUgaWYgYWN0aXZhdGVkIGF0IGNvbXBpbGUgdGltZQorIyAgWzJdIE9wdGlvbiBzcGVjaWZpYyBmb3IgcG9ydGFibGUgdmVyc2lvbnMKKyMgIFszXSBPcHRpb24gbm90IHVzZWQgaW4gb3VyIHNzaCBzZXJ2ZXIgY29uZmlnIGZpbGUKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEluaXRpYWxpemUgc3NoZCBjb25maWcgd2l0aCBvcHRpb25zIGFjdHVhbGx5IHN1cHBvcnRlZCBpbiBPcGVuU1NIIDIuOS45CisjCitsb2dtc2cgJ2dlbmVyYXRpbmcgc3NoIHNlcnZlciBjb25maWcgZmlsZS4uLicgaWYoJHZlcmJvc2UpOworQGNmZ2FyciA9ICgpOworcHVzaCBAY2ZnYXJyLCAnIyBUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGUuICBEbyBub3QgZWRpdC4nOworcHVzaCBAY2ZnYXJyLCAiIyAkc3NoZHZlcnN0ciBzc2hkIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgY3VybCB0ZXN0aW5nIjsKK3B1c2ggQGNmZ2FyciwgJyMnOworcHVzaCBAY2ZnYXJyLCAiRGVueVVzZXJzICEkdXNlcm5hbWUiOworcHVzaCBAY2ZnYXJyLCAiQWxsb3dVc2VycyAkdXNlcm5hbWUiOworcHVzaCBAY2ZnYXJyLCAnRGVueUdyb3Vwcyc7CitwdXNoIEBjZmdhcnIsICdBbGxvd0dyb3Vwcyc7CitwdXNoIEBjZmdhcnIsICcjJzsKK3B1c2ggQGNmZ2FyciwgIkF1dGhvcml6ZWRLZXlzRmlsZSAkcGF0aC8kY2xpcHVia2V5ZiI7CitwdXNoIEBjZmdhcnIsICJBdXRob3JpemVkS2V5c0ZpbGUyICRwYXRoLyRjbGlwdWJrZXlmIjsKK3B1c2ggQGNmZ2FyciwgIkhvc3RLZXkgJHBhdGgvJGhzdHBydmtleWYiOworcHVzaCBAY2ZnYXJyLCAiUGlkRmlsZSAkcGlkZmlsZSI7CitwdXNoIEBjZmdhcnIsICcjJzsKK3B1c2ggQGNmZ2FyciwgIlBvcnQgJHBvcnQiOworcHVzaCBAY2ZnYXJyLCAiTGlzdGVuQWRkcmVzcyAkbGlzdGVuYWRkciI7CitwdXNoIEBjZmdhcnIsICdQcm90b2NvbCAyJzsKK3B1c2ggQGNmZ2FyciwgJyMnOworcHVzaCBAY2ZnYXJyLCAnQWxsb3dUY3BGb3J3YXJkaW5nIHllcyc7CitwdXNoIEBjZmdhcnIsICdCYW5uZXIgbm9uZSc7CitwdXNoIEBjZmdhcnIsICdDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uIG5vJzsKK3B1c2ggQGNmZ2FyciwgJ0NsaWVudEFsaXZlQ291bnRNYXggMyc7CitwdXNoIEBjZmdhcnIsICdDbGllbnRBbGl2ZUludGVydmFsIDAnOworcHVzaCBAY2ZnYXJyLCAnR2F0ZXdheVBvcnRzIG5vJzsKK3B1c2ggQGNmZ2FyciwgJ0hvc3RiYXNlZEF1dGhlbnRpY2F0aW9uIG5vJzsKK3B1c2ggQGNmZ2FyciwgJ0hvc3RiYXNlZFVzZXNOYW1lRnJvbVBhY2tldE9ubHkgbm8nOworcHVzaCBAY2ZnYXJyLCAnSWdub3JlUmhvc3RzIHllcyc7CitwdXNoIEBjZmdhcnIsICdJZ25vcmVVc2VyS25vd25Ib3N0cyB5ZXMnOworcHVzaCBAY2ZnYXJyLCAnS2V5UmVnZW5lcmF0aW9uSW50ZXJ2YWwgMCc7CitwdXNoIEBjZmdhcnIsICdMb2dpbkdyYWNlVGltZSAzMCc7CitwdXNoIEBjZmdhcnIsICJMb2dMZXZlbCAkbG9nbGV2ZWwiOworcHVzaCBAY2ZnYXJyLCAnTWF4U3RhcnR1cHMgNSc7CitwdXNoIEBjZmdhcnIsICdQYXNzd29yZEF1dGhlbnRpY2F0aW9uIG5vJzsKK3B1c2ggQGNmZ2FyciwgJ1Blcm1pdEVtcHR5UGFzc3dvcmRzIG5vJzsKK3B1c2ggQGNmZ2FyciwgJ1Blcm1pdFJvb3RMb2dpbiBubyc7CitwdXNoIEBjZmdhcnIsICdQcmludExhc3RMb2cgbm8nOworcHVzaCBAY2ZnYXJyLCAnUHJpbnRNb3RkIG5vJzsKK3B1c2ggQGNmZ2FyciwgJ1B1YmtleUF1dGhlbnRpY2F0aW9uIHllcyc7CitwdXNoIEBjZmdhcnIsICdSaG9zdHNSU0FBdXRoZW50aWNhdGlvbiBubyc7CitwdXNoIEBjZmdhcnIsICdSU0FBdXRoZW50aWNhdGlvbiBubyc7CitwdXNoIEBjZmdhcnIsICdTZXJ2ZXJLZXlCaXRzIDc2OCc7CitwdXNoIEBjZmdhcnIsICdTdHJpY3RNb2RlcyBubyc7CitwdXNoIEBjZmdhcnIsICJTdWJzeXN0ZW0gc2Z0cCAkc2Z0cHNydiI7CitwdXNoIEBjZmdhcnIsICdTeXNsb2dGYWNpbGl0eSBBVVRIJzsKK3B1c2ggQGNmZ2FyciwgJ1VzZUxvZ2luIG5vJzsKK3B1c2ggQGNmZ2FyciwgJ1gxMUZvcndhcmRpbmcgbm8nOworcHVzaCBAY2ZnYXJyLCAnIyc7CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBXcml0ZSBvdXQgaW5pdGlhbCBzc2hkIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgY3VybCdzIHRlc3RzCisjCiskZXJyb3IgPSBkdW1wX2FycmF5KCRzc2hkY29uZmlnLCBAY2ZnYXJyKTsKK2lmKCRlcnJvcikgeworICAgIGxvZ21zZyAkZXJyb3I7CisgICAgZXhpdCAxOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgVmVyaWZpZXMgYXQgcnVuIHRpbWUgaWYgc3NoZCBzdXBwb3J0cyBhIGdpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZSBvcHRpb24KKyMKK3N1YiBzc2hkX3N1cHBvcnRzX29wdCB7CisgICAgbXkgKCRvcHRpb24sICR2YWx1ZSkgPSBAXzsKKyAgICBteSAkZXJyOworICAgICMKKyAgICBpZigoKCRzc2hkaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaGR2ZXJudW0gPj0gMzEwKSkgfHwKKyAgICAgICAgKCRzc2hkaWQgPX4gL1N1blNTSC8pKSB7CisgICAgICAgICMgc3NoIGRhZW1vbiBzdXBwb3J0cyBjb21tYW5kIGxpbmUgb3B0aW9ucyAtdCAtZiBhbmQgLW8KKyAgICAgICAgJGVyciA9IGdyZXAgLygoVW5zdXBwb3J0ZWQpfChCYWQgY29uZmlndXJhdGlvbil8KERlcHJlY2F0ZWQpKSBvcHRpb24uKiRvcHRpb24vLAorICAgICAgICAgICAgICAgICAgICBxeCgkc3NoZCAtdCAtZiAkc3NoZGNvbmZpZyAtbyAkb3B0aW9uPSR2YWx1ZSAyPiYxKTsKKyAgICAgICAgcmV0dXJuICEkZXJyOworICAgIH0KKyAgICBpZigoJHNzaGRpZCA9fiAvT3BlblNTSC8pICYmICgkc3NoZHZlcm51bSA+PSAyOTkpKSB7CisgICAgICAgICMgc3NoIGRhZW1vbiBzdXBwb3J0cyBjb21tYW5kIGxpbmUgb3B0aW9ucyAtdCBhbmQgLWYKKyAgICAgICAgJGVyciA9IGR1bXBfYXJyYXkoJHNzaGRjb25maWcsIChAY2ZnYXJyLCAiJG9wdGlvbiAkdmFsdWUiKSk7CisgICAgICAgIGlmKCRlcnIpIHsKKyAgICAgICAgICAgIGxvZ21zZyAkZXJyOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgJGVyciA9IGdyZXAgLygoVW5zdXBwb3J0ZWQpfChCYWQgY29uZmlndXJhdGlvbil8KERlcHJlY2F0ZWQpKSBvcHRpb24uKiRvcHRpb24vLAorICAgICAgICAgICAgICAgICAgICBxeCgkc3NoZCAtdCAtZiAkc3NoZGNvbmZpZyAyPiYxKTsKKyAgICAgICAgdW5saW5rICRzc2hkY29uZmlnOworICAgICAgICByZXR1cm4gISRlcnI7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgS2VyYmVyb3MgQXV0aGVudGljYXRpb24gc3VwcG9ydCBtYXkgaGF2ZSBub3QgYmVlbiBidWlsdCBpbnRvIHNzaGQKKyMKK2lmKHNzaGRfc3VwcG9ydHNfb3B0KCdLZXJiZXJvc0F1dGhlbnRpY2F0aW9uJywnbm8nKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ0tlcmJlcm9zQXV0aGVudGljYXRpb24gbm8nOworfQoraWYoc3NoZF9zdXBwb3J0c19vcHQoJ0tlcmJlcm9zR2V0QUZTVG9rZW4nLCdubycpKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnS2VyYmVyb3NHZXRBRlNUb2tlbiBubyc7Cit9CitpZihzc2hkX3N1cHBvcnRzX29wdCgnS2VyYmVyb3NPckxvY2FsUGFzc3dkJywnbm8nKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ0tlcmJlcm9zT3JMb2NhbFBhc3N3ZCBubyc7Cit9CitpZihzc2hkX3N1cHBvcnRzX29wdCgnS2VyYmVyb3NUZ3RQYXNzaW5nJywnbm8nKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ0tlcmJlcm9zVGd0UGFzc2luZyBubyc7Cit9CitpZihzc2hkX3N1cHBvcnRzX29wdCgnS2VyYmVyb3NUaWNrZXRDbGVhbnVwJywneWVzJykpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdLZXJiZXJvc1RpY2tldENsZWFudXAgeWVzJzsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IG1heSBoYXZlIG5vdCBiZWVuIGJ1aWx0IGludG8gc3NoZAorIworaWYoc3NoZF9zdXBwb3J0c19vcHQoJ0FGU1Rva2VuUGFzc2luZycsJ25vJykpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdBRlNUb2tlblBhc3Npbmcgbm8nOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgUy9LZXkgYXV0aGVudGljYXRpb24gc3VwcG9ydCBtYXkgaGF2ZSBub3QgYmVlbiBidWlsdCBpbnRvIHNzaGQKKyMKK2lmKHNzaGRfc3VwcG9ydHNfb3B0KCdTa2V5QXV0aGVudGljYXRpb24nLCdubycpKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnU2tleUF1dGhlbnRpY2F0aW9uIG5vJzsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEdTU0FQSSBBdXRoZW50aWNhdGlvbiBzdXBwb3J0IG1heSBoYXZlIG5vdCBiZWVuIGJ1aWx0IGludG8gc3NoZAorIworbXkgJHNzaGRfYnVpbHR3aXRoX0dTU0FQSTsKK2lmKHNzaGRfc3VwcG9ydHNfb3B0KCdHU1NBUElBdXRoZW50aWNhdGlvbicsJ25vJykpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdHU1NBUElBdXRoZW50aWNhdGlvbiBubyc7CisgICAgJHNzaGRfYnVpbHR3aXRoX0dTU0FQSSA9IDE7Cit9CitpZihzc2hkX3N1cHBvcnRzX29wdCgnR1NTQVBJQ2xlYW51cENyZWRlbnRpYWxzJywneWVzJykpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMgeWVzJzsKK30KK2lmKHNzaGRfc3VwcG9ydHNfb3B0KCdHU1NBUElLZXlFeGNoYW5nZScsJ25vJykpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdHU1NBUElLZXlFeGNoYW5nZSBubyc7Cit9CitpZihzc2hkX3N1cHBvcnRzX29wdCgnR1NTQVBJU3RvcmVEZWxlZ2F0ZWRDcmVkZW50aWFscycsJ25vJykpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdHU1NBUElTdG9yZURlbGVnYXRlZENyZWRlbnRpYWxzIG5vJzsKK30KK2lmKHNzaGRfc3VwcG9ydHNfb3B0KCdHU1NDbGVhbnVwQ3JlZHMnLCd5ZXMnKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ0dTU0NsZWFudXBDcmVkcyB5ZXMnOworfQoraWYoc3NoZF9zdXBwb3J0c19vcHQoJ0dTU1VzZVNlc3Npb25DcmVkQ2FjaGUnLCdubycpKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnR1NTVXNlU2Vzc2lvbkNyZWRDYWNoZSBubyc7Cit9CitwdXNoIEBjZmdhcnIsICcjJzsKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIE9wdGlvbnMgdGhhdCBtaWdodCBiZSBzdXBwb3J0ZWQgb3Igbm90IGluIHNzaGQgT3BlblNTSCAyLjkuOSBhbmQgbGF0ZXIKKyMKK2lmKHNzaGRfc3VwcG9ydHNfb3B0KCdBY2NlcHRFbnYnLCcnKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ0FjY2VwdEVudic7Cit9CitpZihzc2hkX3N1cHBvcnRzX29wdCgnQWRkcmVzc0ZhbWlseScsJ2FueScpKSB7CisgICAgIyBBZGRyZXNzIGZhbWlseSBtdXN0IGJlIHNwZWNpZmllZCBiZWZvcmUgTGlzdGVuQWRkcmVzcworICAgIHNwbGljZSBAY2ZnYXJyLCAxNCwgMCwgJ0FkZHJlc3NGYW1pbHkgYW55JzsKK30KK2lmKHNzaGRfc3VwcG9ydHNfb3B0KCdDb21wcmVzc2lvbicsJ25vJykpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdDb21wcmVzc2lvbiBubyc7Cit9CitpZihzc2hkX3N1cHBvcnRzX29wdCgnS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbicsJ25vJykpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uIG5vJzsKK30KK2lmKHNzaGRfc3VwcG9ydHNfb3B0KCdLZWVwQWxpdmUnLCdubycpKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnS2VlcEFsaXZlIG5vJzsKK30KK2lmKHNzaGRfc3VwcG9ydHNfb3B0KCdMb29rdXBDbGllbnRIb3N0bmFtZXMnLCdubycpKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnTG9va3VwQ2xpZW50SG9zdG5hbWVzIG5vJzsKK30KK2lmKHNzaGRfc3VwcG9ydHNfb3B0KCdNYXhBdXRoVHJpZXMnLCcxMCcpKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnTWF4QXV0aFRyaWVzIDEwJzsKK30KK2lmKHNzaGRfc3VwcG9ydHNfb3B0KCdQQU1BdXRoZW50aWNhdGlvblZpYUtiZEludCcsJ25vJykpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdQQU1BdXRoZW50aWNhdGlvblZpYUtiZEludCBubyc7Cit9CitpZihzc2hkX3N1cHBvcnRzX29wdCgnUGVybWl0VHVubmVsJywnbm8nKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ1Blcm1pdFR1bm5lbCBubyc7Cit9CitpZihzc2hkX3N1cHBvcnRzX29wdCgnUGVybWl0VXNlckVudmlyb25tZW50Jywnbm8nKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ1Blcm1pdFVzZXJFbnZpcm9ubWVudCBubyc7Cit9CitpZihzc2hkX3N1cHBvcnRzX29wdCgnUmhvc3RzQXV0aGVudGljYXRpb24nLCdubycpKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnUmhvc3RzQXV0aGVudGljYXRpb24gbm8nOworfQoraWYoc3NoZF9zdXBwb3J0c19vcHQoJ1RDUEtlZXBBbGl2ZScsJ25vJykpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdUQ1BLZWVwQWxpdmUgbm8nOworfQoraWYoc3NoZF9zdXBwb3J0c19vcHQoJ1VzZUROUycsJ25vJykpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdVc2VETlMgbm8nOworfQoraWYoc3NoZF9zdXBwb3J0c19vcHQoJ1VzZVBBTScsJ25vJykpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdVc2VQQU0gbm8nOworfQorCitpZigkc3NoZGlkID1+IC9PcGVuU1NILykgeworICAgICMgaHR0cDovL2J1Z3Mub3BlbnNvbGFyaXMub3JnL2J1Z2RhdGFiYXNlL3ZpZXdfYnVnLmRvP2J1Z19pZD02NDkyNDE1CisgICAgaWYoc3NoZF9zdXBwb3J0c19vcHQoJ1VzZVByaXZpbGVnZVNlcGFyYXRpb24nLCdubycpKSB7CisgICAgICAgIHB1c2ggQGNmZ2FyciwgJ1VzZVByaXZpbGVnZVNlcGFyYXRpb24gbm8nOworICAgIH0KK30KKworaWYoc3NoZF9zdXBwb3J0c19vcHQoJ1ZlcmlmeVJldmVyc2VNYXBwaW5nJywnbm8nKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ1ZlcmlmeVJldmVyc2VNYXBwaW5nIG5vJzsKK30KK2lmKHNzaGRfc3VwcG9ydHNfb3B0KCdYMTFVc2VMb2NhbGhvc3QnLCd5ZXMnKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ1gxMVVzZUxvY2FsaG9zdCB5ZXMnOworfQorcHVzaCBAY2ZnYXJyLCAnIyc7CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBXcml0ZSBvdXQgcmVzdWx0aW5nIHNzaGQgY29uZmlndXJhdGlvbiBmaWxlIGZvciBjdXJsJ3MgdGVzdHMKKyMKKyRlcnJvciA9IGR1bXBfYXJyYXkoJHNzaGRjb25maWcsIEBjZmdhcnIpOworaWYoJGVycm9yKSB7CisgICAgbG9nbXNnICRlcnJvcjsKKyAgICBleGl0IDE7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBWZXJpZnkgdGhhdCBzc2hkIGFjdHVhbGx5IHN1cHBvcnRzIG91ciBnZW5lcmF0ZWQgY29uZmlndXJhdGlvbiBmaWxlCisjCitpZihzeXN0ZW0gIiRzc2hkIC10IC1mICRzc2hkY29uZmlnID4gJHNzaGRsb2cgMj4mMSIpIHsKKyAgICBsb2dtc2cgInNzaGQgY29uZmlndXJhdGlvbiBmaWxlICRzc2hkY29uZmlnIGZhaWxlZCB2ZXJpZmljYXRpb24iOworICAgIGRpc3BsYXlfc3NoZGxvZygpOworICAgIGRpc3BsYXlfc3NoZGNvbmZpZygpOworICAgIGV4aXQgMTsKK30KKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEdlbmVyYXRlIHNzaCBjbGllbnQgaG9zdCBrZXkgZGF0YWJhc2UgZmlsZSBmb3IgY3VybCdzIHRlc3RzCisjCitpZigoISAtZSAka25vd25ob3N0cykgfHwgKCEgLXMgJGtub3duaG9zdHMpKSB7CisgICAgbG9nbXNnICdnZW5lcmF0aW5nIHNzaCBjbGllbnQga25vd24gaG9zdHMgZmlsZS4uLicgaWYoJHZlcmJvc2UpOworICAgIHVubGluaygka25vd25ob3N0cyk7CisgICAgaWYob3BlbihEU0FLRVlGSUxFLCAiPCRoc3RwdWJrZXlmIikpIHsKKyAgICAgICAgbXkgQGRzYWhvc3RrZXkgPSBkbyB7IGxvY2FsICQvID0gJyAnOyA8RFNBS0VZRklMRT4gfTsKKyAgICAgICAgaWYoY2xvc2UoRFNBS0VZRklMRSkpIHsKKyAgICAgICAgICAgIGlmKG9wZW4oS05PV05IT1NUUywgIj4ka25vd25ob3N0cyIpKSB7CisgICAgICAgICAgICAgICAgcHJpbnQgS05PV05IT1NUUyAiJGxpc3RlbmFkZHIgc3NoLWRzcyAkZHNhaG9zdGtleVsxXVxuIjsKKyAgICAgICAgICAgICAgICBpZighY2xvc2UoS05PV05IT1NUUykpIHsKKyAgICAgICAgICAgICAgICAgICAgJGVycm9yID0gIkVycm9yOiBjYW5ub3QgY2xvc2UgZmlsZSAka25vd25ob3N0cyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgJGVycm9yID0gIkVycm9yOiBjYW5ub3Qgd3JpdGUgZmlsZSAka25vd25ob3N0cyI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAkZXJyb3IgPSAiRXJyb3I6IGNhbm5vdCBjbG9zZSBmaWxlICRoc3RwdWJrZXlmIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgJGVycm9yID0gIkVycm9yOiBjYW5ub3QgcmVhZCBmaWxlICRoc3RwdWJrZXlmIjsKKyAgICB9CisgICAgaWYoJGVycm9yKSB7CisgICAgICAgIGxvZ21zZyAkZXJyb3I7CisgICAgICAgIGV4aXQgMTsKKyAgICB9Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgc3NoIGNsaWVudCBjb25maWd1cmF0aW9uIGZpbGUgb3B0aW9ucyB3ZSBtaWdodCB1c2UgYW5kIHZlcnNpb24gc3VwcG9ydAorIworIyAgQWRkcmVzc0ZhbWlseSAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAzLjcuMCBhbmQgbGF0ZXIKKyMgIEJhdGNoTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBCaW5kQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDIuOS45IGFuZCBsYXRlcgorIyAgQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbiAgIDogT3BlblNTSCAyLjUuMCBhbmQgbGF0ZXIKKyMgIENoZWNrSG9zdElQICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBDaXBoZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlciBbM10KKyMgIENpcGhlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMi4xLjAgYW5kIGxhdGVyIFszXQorIyAgQ2xlYXJBbGxGb3J3YXJkaW5ncyAgICAgICAgICAgICAgIDogT3BlblNTSCAyLjkuOSBhbmQgbGF0ZXIKKyMgIENvbXByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBDb21wcmVzc2lvbkxldmVsICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlciBbM10KKyMgIENvbm5lY3Rpb25BdHRlbXB0cyAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBDb25uZWN0VGltZW91dCAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDMuNy4wIGFuZCBsYXRlcgorIyAgQ29udHJvbE1hc3RlciAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAzLjkuMCBhbmQgbGF0ZXIKKyMgIENvbnRyb2xQYXRoICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMy45LjAgYW5kIGxhdGVyCisjICBEaXNhYmxlQmFubmVyICAgICAgICAgICAgICAgICAgICAgOiAgU3VuU1NIIDEuMi4wIGFuZCBsYXRlcgorIyAgRHluYW1pY0ZvcndhcmQgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAyLjkuMCBhbmQgbGF0ZXIKKyMgIEVuYWJsZVNTSEtleXNpZ24gICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMy42LjAgYW5kIGxhdGVyCisjICBFc2NhcGVDaGFyICAgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlciBbM10KKyMgIEV4aXRPbkZvcndhcmRGYWlsdXJlICAgICAgICAgICAgICA6IE9wZW5TU0ggNC40LjAgYW5kIGxhdGVyCisjICBGb3J3YXJkQWdlbnQgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgRm9yd2FyZFgxMSAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIEZvcndhcmRYMTFUcnVzdGVkICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMy44LjAgYW5kIGxhdGVyCisjICBHYXRld2F5UG9ydHMgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgR2xvYmFsS25vd25Ib3N0c0ZpbGUgICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIEdTU0FQSUF1dGhlbnRpY2F0aW9uICAgICAgICAgICAgICA6IE9wZW5TU0ggMy43LjAgYW5kIGxhdGVyIFsxXQorIyAgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscyAgICAgICAgIDogT3BlblNTSCAzLjcuMCBhbmQgbGF0ZXIgWzFdCisjICBIYXNoS25vd25Ib3N0cyAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDQuMC4wIGFuZCBsYXRlcgorIyAgSG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIEhvc3RiYXNlZEF1dGhlbnRpY2F0aW9uICAgICAgICAgICA6IE9wZW5TU0ggMi45LjAgYW5kIGxhdGVyCisjICBIb3N0S2V5QWxnb3JpdGhtcyAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDIuOS4wIGFuZCBsYXRlciBbM10KKyMgIEhvc3RLZXlBbGlhcyAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMi41LjAgYW5kIGxhdGVyIFszXQorIyAgSG9zdE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIElkZW50aXRpZXNPbmx5ICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMy45LjAgYW5kIGxhdGVyCisjICBJZGVudGl0eUZpbGUgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgSWdub3JlSWZVbmtub3duICAgICAgICAgICAgICAgICAgIDogIFN1blNTSCAxLjIuMCBhbmQgbGF0ZXIKKyMgIEtlZXBBbGl2ZSAgICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uICAgICAgOiBPcGVuU1NIIDIuMy4wIGFuZCBsYXRlcgorIyAgS2JkSW50ZXJhY3RpdmVEZXZpY2VzICAgICAgICAgICAgIDogT3BlblNTSCAyLjMuMCBhbmQgbGF0ZXIgWzNdCisjICBMb2NhbENvbW1hbmQgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDQuMy4wIGFuZCBsYXRlciBbM10KKyMgIExvY2FsRm9yd2FyZCAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyIFszXQorIyAgTG9nTGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIE1BQ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMi41LjAgYW5kIGxhdGVyIFszXQorIyAgTm9Ib3N0QXV0aGVudGljYXRpb25Gb3JMb2NhbGhvc3QgIDogT3BlblNTSCAzLjAuMCBhbmQgbGF0ZXIKKyMgIE51bWJlck9mUGFzc3dvcmRQcm9tcHRzICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBQYXNzd29yZEF1dGhlbnRpY2F0aW9uICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgUGVybWl0TG9jYWxDb21tYW5kICAgICAgICAgICAgICAgIDogT3BlblNTSCA0LjMuMCBhbmQgbGF0ZXIKKyMgIFBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBQcmVmZXJyZWRBdXRoZW50aWNhdGlvbnMgICAgICAgICAgOiBPcGVuU1NIIDIuNS4yIGFuZCBsYXRlcgorIyAgUHJvdG9jb2wgICAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAyLjEuMCBhbmQgbGF0ZXIKKyMgIFByb3h5Q29tbWFuZCAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyIFszXQorIyAgUHVia2V5QXV0aGVudGljYXRpb24gICAgICAgICAgICAgIDogT3BlblNTSCAyLjUuMCBhbmQgbGF0ZXIKKyMgIFJla2V5TGltaXQgICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMy43LjAgYW5kIGxhdGVyCisjICBSZW1vdGVGb3J3YXJkICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlciBbM10KKyMgIFJob3N0c1JTQUF1dGhlbnRpY2F0aW9uICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBSU0FBdXRoZW50aWNhdGlvbiAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgU2VuZEVudiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAzLjkuMCBhbmQgbGF0ZXIKKyMgIFNlcnZlckFsaXZlQ291bnRNYXggICAgICAgICAgICAgICA6IE9wZW5TU0ggMy44LjAgYW5kIGxhdGVyCisjICBTZXJ2ZXJBbGl2ZUludGVydmFsICAgICAgICAgICAgICAgOiBPcGVuU1NIIDMuOC4wIGFuZCBsYXRlcgorIyAgU21hcnRjYXJkRGV2aWNlICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAyLjkuOSBhbmQgbGF0ZXIgWzFdWzNdCisjICBTdHJpY3RIb3N0S2V5Q2hlY2tpbmcgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgVENQS2VlcEFsaXZlICAgICAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAzLjguMCBhbmQgbGF0ZXIKKyMgIFR1bm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggNC4zLjAgYW5kIGxhdGVyCisjICBUdW5uZWxEZXZpY2UgICAgICAgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDQuMy4wIGFuZCBsYXRlciBbM10KKyMgIFVzZVBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMy43LjAgYW5kIGxhdGVyIFsxXVsyXVszXQorIyAgVXNlUHJpdmlsZWdlZFBvcnQgICAgICAgICAgICAgICAgIDogT3BlblNTSCAxLjIuMSBhbmQgbGF0ZXIKKyMgIFVzZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMS4yLjEgYW5kIGxhdGVyCisjICBVc2VyS25vd25Ib3N0c0ZpbGUgICAgICAgICAgICAgICAgOiBPcGVuU1NIIDEuMi4xIGFuZCBsYXRlcgorIyAgVmVyaWZ5SG9zdEtleUROUyAgICAgICAgICAgICAgICAgIDogT3BlblNTSCAzLjguMCBhbmQgbGF0ZXIKKyMgIFhBdXRoTG9jYXRpb24gICAgICAgICAgICAgICAgICAgICA6IE9wZW5TU0ggMi4xLjEgYW5kIGxhdGVyIFszXQorIworIyAgWzFdIE9wdGlvbiBvbmx5IGF2YWlsYWJsZSBpZiBhY3RpdmF0ZWQgYXQgY29tcGlsZSB0aW1lCisjICBbMl0gT3B0aW9uIHNwZWNpZmljIGZvciBwb3J0YWJsZSB2ZXJzaW9ucworIyAgWzNdIE9wdGlvbiBub3QgdXNlZCBpbiBvdXIgc3NoIGNsaWVudCBjb25maWcgZmlsZQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgSW5pdGlhbGl6ZSBzc2ggY29uZmlnIHdpdGggb3B0aW9ucyBhY3R1YWxseSBzdXBwb3J0ZWQgaW4gT3BlblNTSCAyLjkuOQorIworbG9nbXNnICdnZW5lcmF0aW5nIHNzaCBjbGllbnQgY29uZmlnIGZpbGUuLi4nIGlmKCR2ZXJib3NlKTsKK0BjZmdhcnIgPSAoKTsKK3B1c2ggQGNmZ2FyciwgJyMgVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlLiAgRG8gbm90IGVkaXQuJzsKK3B1c2ggQGNmZ2FyciwgIiMgJHNzaHZlcnN0ciBzc2ggY2xpZW50IGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgY3VybCB0ZXN0aW5nIjsKK3B1c2ggQGNmZ2FyciwgJyMnOworcHVzaCBAY2ZnYXJyLCAnSG9zdCAqJzsKK3B1c2ggQGNmZ2FyciwgJyMnOworcHVzaCBAY2ZnYXJyLCAiUG9ydCAkcG9ydCI7CitwdXNoIEBjZmdhcnIsICJIb3N0TmFtZSAkbGlzdGVuYWRkciI7CitwdXNoIEBjZmdhcnIsICJVc2VyICR1c2VybmFtZSI7CitwdXNoIEBjZmdhcnIsICdQcm90b2NvbCAyJzsKK3B1c2ggQGNmZ2FyciwgJyMnOworcHVzaCBAY2ZnYXJyLCAiQmluZEFkZHJlc3MgJGxpc3RlbmFkZHIiOworcHVzaCBAY2ZnYXJyLCAiRHluYW1pY0ZvcndhcmQgJHNvY2tzcG9ydCI7CitwdXNoIEBjZmdhcnIsICcjJzsKK3B1c2ggQGNmZ2FyciwgIklkZW50aXR5RmlsZSAkcGF0aC9jdXJsX2NsaWVudF9rZXkiOworcHVzaCBAY2ZnYXJyLCAiVXNlcktub3duSG9zdHNGaWxlICRwYXRoLyRrbm93bmhvc3RzIjsKK3B1c2ggQGNmZ2FyciwgJyMnOworcHVzaCBAY2ZnYXJyLCAnQmF0Y2hNb2RlIHllcyc7CitwdXNoIEBjZmdhcnIsICdDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uIG5vJzsKK3B1c2ggQGNmZ2FyciwgJ0NoZWNrSG9zdElQIG5vJzsKK3B1c2ggQGNmZ2FyciwgJ0NsZWFyQWxsRm9yd2FyZGluZ3Mgbm8nOworcHVzaCBAY2ZnYXJyLCAnQ29tcHJlc3Npb24gbm8nOworcHVzaCBAY2ZnYXJyLCAnQ29ubmVjdGlvbkF0dGVtcHRzIDMnOworcHVzaCBAY2ZnYXJyLCAnRm9yd2FyZEFnZW50IG5vJzsKK3B1c2ggQGNmZ2FyciwgJ0ZvcndhcmRYMTEgbm8nOworcHVzaCBAY2ZnYXJyLCAnR2F0ZXdheVBvcnRzIG5vJzsKK3B1c2ggQGNmZ2FyciwgJ0dsb2JhbEtub3duSG9zdHNGaWxlIC9kZXYvbnVsbCc7CitwdXNoIEBjZmdhcnIsICdIb3N0YmFzZWRBdXRoZW50aWNhdGlvbiBubyc7CitwdXNoIEBjZmdhcnIsICdLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uIG5vJzsKK3B1c2ggQGNmZ2FyciwgIkxvZ0xldmVsICRsb2dsZXZlbCI7CitwdXNoIEBjZmdhcnIsICdOdW1iZXJPZlBhc3N3b3JkUHJvbXB0cyAwJzsKK3B1c2ggQGNmZ2FyciwgJ1Bhc3N3b3JkQXV0aGVudGljYXRpb24gbm8nOworcHVzaCBAY2ZnYXJyLCAnUHJlZmVycmVkQXV0aGVudGljYXRpb25zIHB1YmxpY2tleSc7CitwdXNoIEBjZmdhcnIsICdQdWJrZXlBdXRoZW50aWNhdGlvbiB5ZXMnOworcHVzaCBAY2ZnYXJyLCAnUmhvc3RzUlNBQXV0aGVudGljYXRpb24gbm8nOworcHVzaCBAY2ZnYXJyLCAnUlNBQXV0aGVudGljYXRpb24gbm8nOworcHVzaCBAY2ZnYXJyLCAnU3RyaWN0SG9zdEtleUNoZWNraW5nIHllcyc7CitwdXNoIEBjZmdhcnIsICdVc2VQcml2aWxlZ2VkUG9ydCBubyc7CitwdXNoIEBjZmdhcnIsICcjJzsKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIE9wdGlvbnMgc3VwcG9ydGVkIGluIHNzaCBjbGllbnQgbmV3ZXIgdGhhbiBPcGVuU1NIIDIuOS45CisjCisKK2lmKCgkc3NoaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaHZlcm51bSA+PSAzNzApKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnQWRkcmVzc0ZhbWlseSBhbnknOworfQorCitpZigoKCRzc2hpZCA9fiAvT3BlblNTSC8pICYmICgkc3NodmVybnVtID49IDM3MCkpIHx8CisgICAoKCRzc2hpZCA9fiAvU3VuU1NILykgJiYgKCRzc2h2ZXJudW0gPj0gMTIwKSkpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdDb25uZWN0VGltZW91dCAzMCc7Cit9CisKK2lmKCgkc3NoaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaHZlcm51bSA+PSAzOTApKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnQ29udHJvbE1hc3RlciBubyc7Cit9CisKK2lmKCgkc3NoaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaHZlcm51bSA+PSA0MjApKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnQ29udHJvbFBhdGggbm9uZSc7Cit9CisKK2lmKCgkc3NoaWQgPX4gL1N1blNTSC8pICYmICgkc3NodmVybnVtID49IDEyMCkpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdEaXNhYmxlQmFubmVyIHllcyc7Cit9CisKK2lmKCgkc3NoaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaHZlcm51bSA+PSAzNjApKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnRW5hYmxlU1NIS2V5c2lnbiBubyc7Cit9CisKK2lmKCgkc3NoaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaHZlcm51bSA+PSA0NDApKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnRXhpdE9uRm9yd2FyZEZhaWx1cmUgeWVzJzsKK30KKworaWYoKCgkc3NoaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaHZlcm51bSA+PSAzODApKSB8fAorICAgKCgkc3NoaWQgPX4gL1N1blNTSC8pICYmICgkc3NodmVybnVtID49IDEyMCkpKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnRm9yd2FyZFgxMVRydXN0ZWQgbm8nOworfQorCitpZigoJHNzaGRfYnVpbHR3aXRoX0dTU0FQSSkgJiYgKCRzc2hkaWQgZXEgJHNzaGlkKSAmJgorICAgKCRzc2hkdmVybnVtID09ICRzc2h2ZXJudW0pKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnR1NTQVBJQXV0aGVudGljYXRpb24gbm8nOworICAgIHB1c2ggQGNmZ2FyciwgJ0dTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMgbm8nOworICAgIGlmKCRzc2hpZCA9fiAvU3VuU1NILykgeworICAgICAgICBwdXNoIEBjZmdhcnIsICdHU1NBUElLZXlFeGNoYW5nZSBubyc7CisgICAgfQorfQorCitpZigoKCRzc2hpZCA9fiAvT3BlblNTSC8pICYmICgkc3NodmVybnVtID49IDQwMCkpIHx8CisgICAoKCRzc2hpZCA9fiAvU3VuU1NILykgJiYgKCRzc2h2ZXJudW0gPj0gMTIwKSkpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdIYXNoS25vd25Ib3N0cyBubyc7Cit9CisKK2lmKCgkc3NoaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaHZlcm51bSA+PSAzOTApKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnSWRlbnRpdGllc09ubHkgeWVzJzsKK30KKworaWYoKCRzc2hpZCA9fiAvU3VuU1NILykgJiYgKCRzc2h2ZXJudW0gPj0gMTIwKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ0lnbm9yZUlmVW5rbm93biBubyc7Cit9CisKK2lmKCgoJHNzaGlkID1+IC9PcGVuU1NILykgJiYgKCRzc2h2ZXJudW0gPCAzODApKSB8fAorICAgICgkc3NoaWQgPX4gL1N1blNTSC8pKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnS2VlcEFsaXZlIG5vJzsKK30KKworaWYoKCgkc3NoaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaHZlcm51bSA+PSAzMDApKSB8fAorICAgICgkc3NoaWQgPX4gL1N1blNTSC8pKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnTm9Ib3N0QXV0aGVudGljYXRpb25Gb3JMb2NhbGhvc3Qgbm8nOworfQorCitpZigoJHNzaGlkID1+IC9PcGVuU1NILykgJiYgKCRzc2h2ZXJudW0gPj0gNDMwKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ1Blcm1pdExvY2FsQ29tbWFuZCBubyc7Cit9CisKK2lmKCgoJHNzaGlkID1+IC9PcGVuU1NILykgJiYgKCRzc2h2ZXJudW0gPj0gMzcwKSkgfHwKKyAgICgoJHNzaGlkID1+IC9TdW5TU0gvKSAmJiAoJHNzaHZlcm51bSA+PSAxMjApKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ1Jla2V5TGltaXQgMUcnOworfQorCitpZigoJHNzaGlkID1+IC9PcGVuU1NILykgJiYgKCRzc2h2ZXJudW0gPj0gMzkwKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ1NlbmRFbnYnOworfQorCitpZigoKCRzc2hpZCA9fiAvT3BlblNTSC8pICYmICgkc3NodmVybnVtID49IDM4MCkpIHx8CisgICAoKCRzc2hpZCA9fiAvU3VuU1NILykgJiYgKCRzc2h2ZXJudW0gPj0gMTIwKSkpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdTZXJ2ZXJBbGl2ZUNvdW50TWF4IDMnOworICAgIHB1c2ggQGNmZ2FyciwgJ1NlcnZlckFsaXZlSW50ZXJ2YWwgMCc7Cit9CisKK2lmKCgkc3NoaWQgPX4gL09wZW5TU0gvKSAmJiAoJHNzaHZlcm51bSA+PSAzODApKSB7CisgICAgcHVzaCBAY2ZnYXJyLCAnVENQS2VlcEFsaXZlIG5vJzsKK30KKworaWYoKCRzc2hpZCA9fiAvT3BlblNTSC8pICYmICgkc3NodmVybnVtID49IDQzMCkpIHsKKyAgICBwdXNoIEBjZmdhcnIsICdUdW5uZWwgbm8nOworfQorCitpZigoJHNzaGlkID1+IC9PcGVuU1NILykgJiYgKCRzc2h2ZXJudW0gPj0gMzgwKSkgeworICAgIHB1c2ggQGNmZ2FyciwgJ1ZlcmlmeUhvc3RLZXlETlMgbm8nOworfQorCitwdXNoIEBjZmdhcnIsICcjJzsKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIFdyaXRlIG91dCByZXN1bHRpbmcgc3NoIGNsaWVudCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGN1cmwncyB0ZXN0cworIworJGVycm9yID0gZHVtcF9hcnJheSgkc3NoY29uZmlnLCBAY2ZnYXJyKTsKK2lmKCRlcnJvcikgeworICAgIGxvZ21zZyAkZXJyb3I7CisgICAgZXhpdCAxOworfQorCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgSW5pdGlhbGl6ZSBjbGllbnQgc2Z0cCBjb25maWcgd2l0aCBvcHRpb25zIGFjdHVhbGx5IHN1cHBvcnRlZC4KKyMKK2xvZ21zZyAnZ2VuZXJhdGluZyBzZnRwIGNsaWVudCBjb25maWcgZmlsZS4uLicgaWYoJHZlcmJvc2UpOworc3BsaWNlIEBjZmdhcnIsIDEsIDEsICIjICRzc2h2ZXJzdHIgc2Z0cCBjbGllbnQgY29uZmlndXJhdGlvbiBmaWxlIGZvciBjdXJsIHRlc3RpbmciOworIworZm9yKG15ICRpID0gc2NhbGFyKEBjZmdhcnIpIC0gMTsgJGkgPiAwOyAkaS0tKSB7CisgICAgaWYoJGNmZ2FyclskaV0gPX4gL15EeW5hbWljRm9yd2FyZC8pIHsKKyAgICAgICAgc3BsaWNlIEBjZmdhcnIsICRpLCAxOworICAgICAgICBuZXh0OworICAgIH0KKyAgICBpZigkY2ZnYXJyWyRpXSA9fiAvXkNsZWFyQWxsRm9yd2FyZGluZ3MvKSB7CisgICAgICAgIHNwbGljZSBAY2ZnYXJyLCAkaSwgMSwgIkNsZWFyQWxsRm9yd2FyZGluZ3MgeWVzIjsKKyAgICAgICAgbmV4dDsKKyAgICB9Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBXcml0ZSBvdXQgcmVzdWx0aW5nIHNmdHAgY2xpZW50IGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgY3VybCdzIHRlc3RzCisjCiskZXJyb3IgPSBkdW1wX2FycmF5KCRzZnRwY29uZmlnLCBAY2ZnYXJyKTsKK2lmKCRlcnJvcikgeworICAgIGxvZ21zZyAkZXJyb3I7CisgICAgZXhpdCAxOworfQorQGNmZ2FyciA9ICgpOworCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgR2VuZXJhdGUgY2xpZW50IHNmdHAgY29tbWFuZHMgYmF0Y2ggZmlsZSBmb3Igc2Z0cCBzZXJ2ZXIgdmVyaWZpY2F0aW9uCisjCitsb2dtc2cgJ2dlbmVyYXRpbmcgc2Z0cCBjbGllbnQgY29tbWFuZHMgZmlsZS4uLicgaWYoJHZlcmJvc2UpOworcHVzaCBAY2ZnYXJyLCAncHdkJzsKK3B1c2ggQGNmZ2FyciwgJ3F1aXQnOworJGVycm9yID0gZHVtcF9hcnJheSgkc2Z0cGNtZHMsIEBjZmdhcnIpOworaWYoJGVycm9yKSB7CisgICAgbG9nbXNnICRlcnJvcjsKKyAgICBleGl0IDE7Cit9CitAY2ZnYXJyID0gKCk7CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBTdGFydCB0aGUgc3NoIHNlcnZlciBkYWVtb24gd2l0aG91dCBmb3JraW5nIGl0CisjCitsb2dtc2cgIlNDUC9TRlRQIHNlcnZlciBsaXN0ZW5pbmcgb24gcG9ydCAkcG9ydCIgaWYoJHZlcmJvc2UpOworbXkgJHJjID0gc3lzdGVtICIkc3NoZCAtZSAtRCAtZiAkc3NoZGNvbmZpZyA+ICRzc2hkbG9nIDI+JjEiOworaWYoJHJjID09IC0xKSB7CisgICAgbG9nbXNnICIkc3NoZCBmYWlsZWQgd2l0aDogJCEiOworfQorZWxzaWYoJHJjICYgMTI3KSB7CisgICAgbG9nbXNnIHNwcmludGYoIiRzc2hkIGRpZWQgd2l0aCBzaWduYWwgJWQsIGFuZCAlcyBjb3JlZHVtcCIsCisgICAgICAgICAgICAgICAgICAgKCRyYyAmIDEyNyksICgkcmMgJiAxMjgpPydhJzonbm8nKTsKK30KK2Vsc2lmKCR2ZXJib3NlICYmICgkcmMgPj4gOCkpIHsKKyAgICBsb2dtc2cgc3ByaW50ZigiJHNzaGQgZXhpdGVkIHdpdGggJWQiLCAkcmMgPj4gOCk7Cit9CisKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBDbGVhbiB1cCBvbmNlIHRoZSBzZXJ2ZXIgaGFzIHN0b3BwZWQKKyMKK3VubGluaygkaHN0cHJ2a2V5ZiwgJGhzdHB1YmtleWYsICRjbGlwcnZrZXlmLCAkY2xpcHVia2V5ZiwgJGtub3duaG9zdHMpOwordW5saW5rKCRzc2hkY29uZmlnLCAkc3NoY29uZmlnLCAkc2Z0cGNvbmZpZyk7CisKKworZXhpdCAwOwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvc3R1bm5lbC5wZW0gYi9jdXJsLTcuMjUuMC90ZXN0cy9zdHVubmVsLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTM4NTliCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvc3R1bm5lbC5wZW0KQEAgLTAsMCArMSwxNDMgQEAKKyMKKyMgIFRoaXMgZmlsZSBjb250YWlucyBhIHByaXZhdGUga2V5IGFuZCBhIGNlcnRpZmljYXRlIHVzZWQgZm9yIHN0dW5uZWwuCisjICBUaGUgY2VydGlmaWNhdGUgY29udGFpbnMgYSBudW1iZXIgb2YgZXh0ZW5zaW9ucyBlc3NlbnRpYWxseSBiZWluZworIyAgdXNlZCBpbiB0aGUgNTA5IHRlc3QuIFRoZSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgdXNpbmcKKyMgIG9wZW5zc2wgd2l0aCB0aGUgcGFyYW1ldGVycyBsaXN0ZWQgYmVsb3cgdXAgdG8gdGhlIGxpbmUKKyMgIGNvbnRhaW4gW3NvbWV0aGluZ10sIGFmdGVyIHRoYXQgeW91IGZpbmQgdGhlIHJlc3VsdC4KKyMgCisjCitleHRlbnNpb25zID0geDUwOXYzCitbIHg1MDl2MyBdCitzdWJqZWN0QWx0TmFtZSAgID0gRE5TOmxvY2FsaG9zdAorbnNDZXJ0VHlwZSAgICAgICA9IHNlcnZlcgorbnNDb21tZW50ICAgICAgID0gIkNVUkwgc3R1bm5lbCBzZXJ2ZXIgdGVzdCBjZXJ0aWZpY2F0ZSIKK2tleVVzYWdlCT0gZGlnaXRhbFNpZ25hdHVyZSxrZXlFbmNpcGhlcm1lbnQKK2V4dGVuZGVkS2V5VXNhZ2UgPSBzZXJ2ZXJBdXRoCitiYXNpY0NvbnN0cmFpbnRzID0gQ0E6ZmFsc2UKK3N1YmplY3RLZXlJZGVudGlmaWVyID0gaGFzaAorc3ViamVjdEluZm9BY2Nlc3MgPSBBRF9EVkNTO1VSSToiaHR0cHM6Ly9sb2NhbGhvc3Q6ODQzMy81MDkiCithdXRob3JpdHlJbmZvQWNjZXNzID0gQURfRFZDUztVUkk6Imh0dHBzOi8vbG9jYWxob3N0Ojg0MzMvNTA5IgorWyByZXEgXQorZGVmYXVsdF9iaXRzICAgICAgICAgICAgICAgICAgICA9IDEyMzQKK2Rpc3Rpbmd1aXNoZWRfbmFtZSAgICAgICAgICAgICAgPSByZXFfRE4KK2RlZmF1bHRfbWQJCQk9IHNoYTEKK3N0cmluZ19tYXNrCQkJPSBwa2l4CitbIHJlcV9ETiBdCitjb3VudHJ5TmFtZSAgICAgICAgICAgICAgICAgICAgID0gIjEuIENvdW50cnkgTmFtZSAgICAgICAgICAgICAoMiBsZXR0ZXIgY29kZSkiCitjb3VudHJ5TmFtZV92YWx1ZSAgICAgICAgICAgICA9IFNFCitzdGF0ZU9yUHJvdmluY2VOYW1lICAgICAgICAgICAgID0gIjIuIFN0YXRlIG9yIFByb3ZpbmNlIE5hbWUgICAoZnVsbCBuYW1lKSAgICAiCitzdGF0ZU9yUHJvdmluY2VOYW1lX3ZhbHVlICAgICA9IFNvbG5hCitsb2NhbGl0eU5hbWUgICAgICAgICAgICAgICAgICAgID0gIjMuIExvY2FsaXR5IE5hbWUgICAgICAgICAgICAoZWcsIGNpdHkpICAgICAiCitsb2NhbGl0eU5hbWVfdmFsdWUgICAgICAgICAgICA9IE1vb28KKzAub3JnYW5pemF0aW9uTmFtZSAgICAgICAgICAgICAgPSAiNC4gT3JnYW5pemF0aW9uIE5hbWUgICAgICAgIChlZywgY29tcGFueSkgICIKKzAub3JnYW5pemF0aW9uTmFtZV92YWx1ZSAgICAgID0gSGF4eAorb3JnYW5pemF0aW9uYWxVbml0TmFtZSAgICAgICAgICA9ICI1LiBPcmdhbml6YXRpb25hbCBVbml0IE5hbWUgKGVnLCBzZWN0aW9uKSAgIgorb3JnYW5pemF0aW9uYWxVbml0TmFtZV92YWx1ZSAgPSBDb29seAorY29tbW9uTmFtZSAgICAgICAgICAgICAgICAgICAgICA9ICI2LiBDb21tb24gTmFtZSAgICAgICAgICAgICAgKGVnLCBGUUROKSAgICAgIgorY29tbW9uTmFtZV92YWx1ZSAgICAgICAgICAgICAgPSAic3RvcmJyb3IiCisxLmNvbW1vbk5hbWUgICAgICAgICAgICAgICAgICAgICAgPSAiNi4gQ29tbW9uIE5hbWUgICAgICAgICAgICAgIChlZywgRlFETikgICAgICIKKzEuY29tbW9uTmFtZV92YWx1ZSAgICAgICAgICAgICAgPSAibG9jYWxob3N0IgorW3NvbWV0aGluZ10KKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUMxQUlCQUFLQm13TlpOK29HNnZKOERBemUrRnZPS1NTNDlYNHhHTXhBTGhLUkxoUVFiN3F2TSs3QmNNZ1IKK3YrUkt4a1g3U05nY3hLUExjSUhmN1FRNkRCSWxMWHVBdVZIUXRXVzliMDZxNjRrQkVsa0V3aDZnUDVJYTlKclIKK3lzR2J1MlU2TlJQK3hCVTMzZFZ3WmpGMDdvY045UHAzOTJXNFZ4RWMrZzMrRmtSelVFYWFoREdPYWJtamdLdXEKK0RkbEtkWkx6Z0pqNys5c0VLcGI3K0ZkRzU2clpBZ01CQUFFQ2dac0NrSzFaMVhUVXo1eDNtN1BNdUhFaVZhS1MKK3lrL0I0SVNxNnBiTy9neHBpZUFSemhSMDM4d051ZzZMKzhWQThVRGViWEhCdkdZWXI5TWhiMk9aVWZJbHIrblcKK2g3a21IWitUODhNM2VIL2hRYzNqdG52bnUxZEdtTWxJWGpUTFFPcktnckFuNmZZYXcySEFHUGRHS2pwYXRBeS8KKzN2UmpndXYvMjJwTkpMUlFtTUhkb3pKZGM4bUVZWStBaHFyUXhYQ1dRVC8xcGVaemxxL0lBUUpPQWZoRTJZV2YKK3FCOWlZTm11aHhKMVBvbFBXNEk2M2F0WHVvYXZxYWRiYVJvYUxtL3BxTFZCMVFqTWV5YWs4Ty8wVG1PNkNYazYKKzg3OHBzODVmTEZnQVJSalNZWCtyWXdvWU56cXhLM2NCQWs0QnN5NG9vZlJlVlQ4eEIrN3JGWkZNVjRNY3lMN2UKK3NPQUJGcWVjTHVOSUdUNkNkZUVVMXo3VFVmcThzS00xTVEyNWUwSjFQTW1vV1RxRHd6aG54Sytja2VGc1o4VGUKK2RncVZXK095eTlrQ1RnSHF5Yy9QL3VFWmtwMWlvRHUwV2twQVIrMXZaYTJqZXlIK3ZtOW5oRTlaNlV0eS9yNkYKK2s0b3RJeDlsTURtVHdYcWVFMDN2SU5KbEpzaHF2alNoZmJuQ2U5Z0s4eHJVazFjRmw3UVBBUUpPQVREM0xRUnEKK0F0Mk1uaWlvRnRpVGJVTjZuMlpTMUM1eG5IR3EzZm5CenhuWnc0VW1TZnVaakcvTDNnV1BLa3lKQ0szSFllOUsKK2hvNlpRaE5CNlA1ZDdzUVFqRzZmK1NJUndwK1Zqd3ZwQWs0QW5NNGRvNTRGRVRlTEhoWTR6eTQ3ZE0vemR5M3UKK2lEamlGd29NVFIrUGZGMDNldnNXZTVwVzNFYVhvbEdpM0ZSQVovaWRGQStMM0dpMnk0eFI0NHo3MUhrYkYzMkwKK1dLYUxkT3VCUXZJPQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjoKKyAgICAgICAgICAgIDA5OmMyOmY5OmNhOjlhOmQ4CisgICAgICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IG1kNVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1TRSwgU1Q9U29sbmEsIEw9TW9vbywgTz1IYXh4LCBPVT1Db29seCwgQ049c3RvcmJyb3IsIENOPWxvY2FsaG9zdAorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA1IDExOjI1OjEzIDIwMDQgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBGZWIgMTMgMTE6MjU6MTMgMjAwOCBHTVQKKyAgICAgICAgU3ViamVjdDogQz1TRSwgU1Q9U29sbmEsIEw9TW9vbywgTz1IYXh4LCBPVT1Db29seCwgQ049c3RvcmJyb3IsIENOPWxvY2FsaG9zdAorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICBSU0EgUHVibGljIEtleTogKDEyMzQgYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXMgKDEyMzQgYml0KToKKyAgICAgICAgICAgICAgICAgICAgMDM6NTk6Mzc6ZWE6MDY6ZWE6ZjI6N2M6MGM6MGM6ZGU6Zjg6NWI6Y2U6Mjk6CisgICAgICAgICAgICAgICAgICAgIDI0OmI4OmY1OjdlOjMxOjE4OmNjOjQwOjJlOjEyOjkxOjJlOjE0OjEwOjZmOgorICAgICAgICAgICAgICAgICAgICBiYTphZjozMzplZTpjMTo3MDpjODoxMTpiZjplNDo0YTpjNjo0NTpmYjo0ODoKKyAgICAgICAgICAgICAgICAgICAgZDg6MWM6YzQ6YTM6Y2I6NzA6ODE6ZGY6ZWQ6MDQ6M2E6MGM6MTI6MjU6MmQ6CisgICAgICAgICAgICAgICAgICAgIDdiOjgwOmI5OjUxOmQwOmI1OjY1OmJkOjZmOjRlOmFhOmViOjg5OjAxOjEyOgorICAgICAgICAgICAgICAgICAgICA1OTowNDpjMjoxZTphMDozZjo5MjoxYTpmNDo5YTpkMTpjYTpjMTo5YjpiYjoKKyAgICAgICAgICAgICAgICAgICAgNjU6M2E6MzU6MTM6ZmU6YzQ6MTU6Mzc6ZGQ6ZDU6NzA6NjY6MzE6NzQ6ZWU6CisgICAgICAgICAgICAgICAgICAgIDg3OjBkOmY0OmZhOjc3OmY3OjY1OmI4OjU3OjExOjFjOmZhOjBkOmZlOjE2OgorICAgICAgICAgICAgICAgICAgICA0NDo3Mzo1MDo0Njo5YTo4NDozMTo4ZTo2OTpiOTphMzo4MDphYjphYTowZDoKKyAgICAgICAgICAgICAgICAgICAgZDk6NGE6NzU6OTI6ZjM6ODA6OTg6ZmI6ZmI6ZGI6MDQ6MmE6OTY6ZmI6Zjg6CisgICAgICAgICAgICAgICAgICAgIDU3OjQ2OmU3OmFhOmQ5CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEFsdGVybmF0aXZlIE5hbWU6IAorICAgICAgICAgICAgICAgIEROUzpsb2NhbGhvc3QKKyAgICAgICAgICAgIE5ldHNjYXBlIENlcnQgVHlwZTogCisgICAgICAgICAgICAgICAgU1NMIFNlcnZlcgorICAgICAgICAgICAgTmV0c2NhcGUgQ29tbWVudDogCisgICAgICAgICAgICAgICAgQ1VSTCBzdHVubmVsIHNlcnZlciB0ZXN0IGNlcnRpZmljYXRlCisgICAgICAgICAgICBYNTA5djMgS2V5IFVzYWdlOiAKKyAgICAgICAgICAgICAgICBEaWdpdGFsIFNpZ25hdHVyZSwgS2V5IEVuY2lwaGVybWVudAorICAgICAgICAgICAgWDUwOXYzIEV4dGVuZGVkIEtleSBVc2FnZTogCisgICAgICAgICAgICAgICAgVExTIFdlYiBTZXJ2ZXIgQXV0aGVudGljYXRpb24KKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6RkFMU0UKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICAzNTo3NzozNTozQjo5Qjo5ODozQzpCNjpDNzo5QTpFNzpBODowNDpCOTo3Qzo3MDpBRDpGQTozNzpBOQorICAgICAgICAgICAgU3ViamVjdCBJbmZvcm1hdGlvbiBBY2Nlc3M6IAorICAgICAgICAgICAgICAgIGFkIGR2Y3MgLSBVUkk6aHR0cHM6Ly9sb2NhbGhvc3Q6ODQzMy81MDkKKworICAgICAgICAgICAgQXV0aG9yaXR5IEluZm9ybWF0aW9uIEFjY2VzczogCisgICAgICAgICAgICAgICAgYWQgZHZjcyAtIFVSSTpodHRwczovL2xvY2FsaG9zdDo4NDMzLzUwOQorCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogbWQ1V2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgMDI6NDc6NTc6MTg6NWY6NTQ6M2Y6MWQ6Mjk6MGE6MDU6N2E6ZDE6MGY6ZTY6Yjk6MmM6OGI6CisgICAgICAgIDI5OjM4OjUwOmJmOmMxOmExOjdmOjczOjRhOjlkOmYxOjFiOmJmOjJlOmVhOjg3OjkxOmRkOgorICAgICAgICBmZjo3NTo3Mzo1Nzo3ODpjZjo3NTo1Mjo1NzowYjo1YjpiYjpkNDo3NzpiMjpkZDplODowYzoKKyAgICAgICAgMDY6Y2U6MWI6YzA6M2Q6OWY6Njg6YzA6MGI6NjY6Yjg6Zjk6NDY6ZGI6MDQ6YTk6MmY6YTM6CisgICAgICAgIDVlOjljOmM2OjcwOmZmOjFkOmFmOjFmOjE3OjljOjM4OjNkOjEyOmFhOmFmOjdiOjcyOjQ0OgorICAgICAgICBhMDo0NDo0MTo2Yjo5YTo5Yjo2MDo4Yzo1MDo5NDpmMTpkNzphNTo3Nzo2YjpkMzowZTo2NjoKKyAgICAgICAgODg6YTE6NTI6NjM6MjM6ZjY6NjY6YTY6ZWE6Zjk6ZDA6ZGY6NGQ6OGE6MTQ6ZjA6NzM6YzY6CisgICAgICAgIGI2OmI2OmI2OjY4OjRmOjNkOjlhOmI2OjMxOmJhOjE5OmYzOjY2OjlmOjE2OjZkOjg3OjY0OgorICAgICAgICAzMjo1MzpkMjo5MDplNTo4YzoxZTpmNToxODo2MToxYQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEdWpDQ0F3aWdBd0lCQWdJR0NjTUEzUWtoTUEwR0NTcUdTSWIzRFFFQkJBVUFNSEl4Q3pBSkJnTlZCQVlUCitBbE5GTVE0d0RBWURWUVFJRXdWVGIyeHVZVEVOTUFzR0ExVUVCeE1FVFc5dmJ6RU5NQXNHQTFVRUNoTUVTR0Y0CitlREVPTUF3R0ExVUVDeE1GUTI5dmJIZ3hFVEFQQmdOVkJBTVRDSE4wYjNKaWNtOXlNUkl3RUFZRFZRUURFd2xzCitiMk5oYkdodmMzUXdIaGNOTURRd01UQTFNVFEwTWpVMldoY05NRGd3TWpFek1UUTBNalUyV2pCeU1Rc3dDUVlECitWUVFHRXdKVFJURU9NQXdHQTFVRUNCTUZVMjlzYm1FeERUQUxCZ05WQkFjVEJFMXZiMjh4RFRBTEJnTlZCQW9UCitCRWhoZUhneERqQU1CZ05WQkFzVEJVTnZiMng0TVJFd0R3WURWUVFERXdoemRHOXlZbkp2Y2pFU01CQUdBMVVFCitBeE1KYkc5allXeG9iM04wTUlHNU1BMEdDU3FHU0liM0RRRUJBUVVBQTRHbkFEQ0Jvd0tCbXdOWk4rb0c2dko4CitEQXplK0Z2T0tTUzQ5WDR4R014QUxoS1JMaFFRYjdxdk0rN0JjTWdSditSS3hrWDdTTmdjeEtQTGNJSGY3UVE2CitEQklsTFh1QXVWSFF0V1c5YjA2cTY0a0JFbGtFd2g2Z1A1SWE5SnJSeXNHYnUyVTZOUlAreEJVMzNkVndaakYwCis3b2NOOVBwMzkyVzRWeEVjK2czK0ZrUnpVRWFhaERHT2FibWpnS3VxRGRsS2RaTHpnSmo3KzlzRUtwYjcrRmRHCis1NnJaQWdNQkFBR2pnZ0VrTUlJQklEQVJCZ2xnaGtnQmh2aENBUUVFQkFNQ0JrQXdNd1lKWUlaSUFZYjRRZ0VOCitCQ1lXSkVOVlVrd2djM1IxYm01bGJDQnpaWEoyWlhJZ2RHVnpkQ0JqWlhKMGFXWnBZMkYwWlRBTEJnTlZIUThFCitCQU1DQmFBd0V3WURWUjBsQkF3d0NnWUlLd1lCQlFVSEF3RXdDUVlEVlIwVEJBSXdBREFkQmdOVkhRNEVGZ1FVCitOWGMxTzV1WVBMYkhtdWVvQkxsOGNLMzZONmt3TmdZSUt3WUJCUVVIQVFzRUtqQW9NQ1lHQ0NzR0FRVUZCekFFCitoaHBvZEhSd2N6b3ZMMnh2WTJGc2FHOXpkRG80TkRNekx6VXdPVEEyQmdnckJnRUZCUWNCQVFRcU1DZ3dKZ1lJCitLd1lCQlFVSE1BU0dHbWgwZEhCek9pOHZiRzlqWVd4b2IzTjBPamcwTXpNdk5UQTVNQm9HQTFVZEVRUVRNQkdICitCSDhBQUFHQ0NXeHZZMkZzYUc5emREQU5CZ2txaGtpRzl3MEJBUVFGQUFPQm5BQUFJSGt2STBWNnBhZGZjOEx2CitvbnVOcUJ3Q01JZzRTdWdDc2xrTjU5N1liOFpERUFVZTNBcmtPdnpBSFVuZ3NENUQwZ2ZiS2JsS1AvUDBiTjZZCitGdDg5Nk5tSDRRRnNEQWV0WmNDRmYyNEFNNERiVVFvNWp0Rytka2FuSS83SXh4TllKMVBRNjQveXNjZFFGdkhXCit4aElYM1E2RnFBQmpjTjVuYzgwUm9nK2I2ZVM4UVJYMUJSblFxYkd0b2N1cHRVZ1c1bVdzU2IrRFI2cFpiQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCistLS0tLUJFR0lOIERIIFBBUkFNRVRFUlMtLS0tLQorTUlHSEFvR0JBTXEvS0ZHaDJveTE2V3prRnMxVTcxVXo3ZElFS3ZTWWZjK3pvNDM5cFl5VnpjRDhNa2NDMTVaYgorYXlLM2pQQllmMDdlS3pjMlR2STMvWlNkdWNtRUNOUDhnazJnQW5kUDFQMXJtcGhlTitvd1pKUzdrUVZmUW1IbAorVW1UODdVOTlOUGFNSFhNTk9zRmovM21iQWFBTm5kS0VuZDhQTTJyNWZnMTZDNCsyZTVLekFnRUMKKy0tLS0tRU5EIERIIFBBUkFNRVRFUlMtLS0tLQpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvc3ltYm9sLXNjYW4ucGwgYi9jdXJsLTcuMjUuMC90ZXN0cy9zeW1ib2wtc2Nhbi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWI4NTliCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvc3ltYm9sLXNjYW4ucGwKQEAgLTAsMCArMSwxNjYgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVGhpcyBzY3JpcHQgZ3JldyBvdXQgb2YgaGVscCBmcm9tIFByemVteXNsYXcgSXNrcmEgYW5kIEJhbGludCBTemlsYWtzemkKKyMgYSBsYXRlIGV2ZW5pbmcgaW4gdGhlICNjdXJsIElSQyBjaGFubmVsIG9uIGZyZWVub2RlLgorIworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCisjCisjIGNvbmZpZ3VyZWhlbHAgcGVybCBtb2R1bGUgaXMgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZSBzY3JpcHQKKyMKK3VzZSBjb25maWd1cmVoZWxwIHF3KAorICAgICRDcHJlcHJvY2Vzc29yCisgICAgKTsKKworIyB3ZSBtYXkgZ2V0IHRoZSBkaXIgcm9vdCBwb2ludGVkIG91dAorbXkgJHJvb3Q9JEFSR1ZbMF0gfHwgIi4iOworCisjIG5lZWQgYW4gaW5jbHVkZSBkaXJlY3Rvcnkgd2hlbiBidWlsZGluZyBvdXQtb2YtdHJlZQorbXkgJGkgPSAoJEFSR1ZbMV0pID8gIi1JJEFSR1ZbMV0gIiA6ICcnOworCitteSAkaCA9ICIkcm9vdC9pbmNsdWRlL2N1cmwvY3VybC5oIjsKK215ICRtaCA9ICIkcm9vdC9pbmNsdWRlL2N1cmwvbXVsdGkuaCI7CisKK215ICR2ZXJib3NlPTA7CitteSAkc3VtbWFyeT0wOworbXkgJG1pc3Nlcz0wOworCitteSBAc3ltczsKK215ICVkb2M7CitteSAlcmVtOworCitvcGVuIEhfSU4sICItfCIsICIkQ3ByZXByb2Nlc3NvciAkaSRoIiB8fCBkaWUgIkNhbm5vdCBwcmVwcm9jZXNzIGN1cmwuaCI7Cit3aGlsZSAoIDxIX0lOPiApIHsKKyAgICBpZiAoIC9lbnVtXHMrKFxTK1xzKyk/ey8gLi4gL30vICkgeworICAgICAgICBzL15ccysvLzsKKyAgICAgICAgbmV4dCB1bmxlc3MgL15DVVJMLzsKKyAgICAgICAgY2hvbXA7CisgICAgICAgIHMvWyxcc10uKi8vOworICAgICAgICBwdXNoIEBzeW1zLCAkXzsKKyAgICB9Cit9CitjbG9zZSBIX0lOIHx8IGRpZSAiRXJyb3IgcHJlcHJvY2Vzc2luZyBjdXJsLmgiOworCitzdWIgc2NhbmhlYWRlciB7CisgICAgbXkgKCRmKT1AXzsKKyAgICBvcGVuIEgsICI8JGYiOworICAgIHdoaWxlKDxIPikgeworICAgICAgICBpZiAoL14jZGVmaW5lIChDVVJMW0EtWmEtejAtOV9dKikvKSB7CisgICAgICAgICAgICBwdXNoIEBzeW1zLCAkMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjbG9zZSBIOworfQorCitzY2FuaGVhZGVyKCRoKTsKK3NjYW5oZWFkZXIoJG1oKTsKKworb3BlbiBTLCAiPCRyb290L2RvY3MvbGliY3VybC9zeW1ib2xzLWluLXZlcnNpb25zIjsKK3doaWxlKDxTPikgeworICAgIGlmKC8oXkNVUkxbXiBcbl0qKSAqKC4qKS8pIHsKKyAgICAgICAgbXkgKCRzeW0sICRyZXN0KT0oJDEsICQyKTsKKyAgICAgICAgaWYoJGRvY3skc3ltfSkgeworICAgICAgICAgICAgcHJpbnQgIkRldGVjdGVkIGR1cGxpY2F0ZSBzeW1ib2w6ICRzeW1cbiI7CisgICAgICAgICAgICAkbWlzc2VzKys7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgICAgICRkb2N7JHN5bX09JHN5bTsKKyAgICAgICAgbXkgQGE9c3BsaXQoLyArLywgJHJlc3QpOworICAgICAgICBpZigkYVsyXSkgeworICAgICAgICAgICAgIyB0aGlzIHN5bWJvbCBpcyBkb2N1bWVudGVkIHRvIGhhdmUgYmVlbiBwcmVzZW50IHRoZSBsYXN0IHRpbWUKKyAgICAgICAgICAgICMgaW4gdGhpcyByZWxlYXNlCisgICAgICAgICAgICAkcmVteyRzeW19PSRhWzJdOworICAgICAgICB9CisgICAgfQorfQorY2xvc2UgUzsKKworbXkgJGlnbm9yZWQ9MDsKK2ZvciBteSAkZSAoc29ydCBAc3ltcykgeworICAgICMgT0JTT0xFVEUgLSBuYW1lcyB0aGF0IGFyZSBqdXN0IHBsYWNlaG9sZGVycyBmb3IgYSBwb3NpdGlvbiB3aGVyZSB3ZQorICAgICMgcHJldmlvdXNseSBoYWQgYSBuYW1lLCB0aGF0IGlzIG5vdyByZW1vdmVkLiBUaGUgT0JTT0xFVEUgbmFtZXMgc2hvdWxkCisgICAgIyBuZXZlciBiZSB1c2VkIGZvciBhbnl0aGluZy4KKyAgICAjCisgICAgIyBDVVJMX0VYVEVSTiAtIGlzIGEgZGVmaW5lIHVzZWQgZm9yIGxpYmN1cmwgZnVuY3Rpb25zIHRoYXQgYXJlIGV4dGVybmFsLAorICAgICMgcHVibGljLiBObyBhcHAgb3Igb3RoZXIgY29kZSBzaG91bGQgZXZlciB1c2UgaXQuCisgICAgIworICAgICMgKl9MQVNUIGFuZCAqX0xBU1RFTlRSWSBhcmUganVzdCBwcmVmaXggZm9yIHRoZSBwbGFjZWhvbGRlcnMgdXNlZCBmb3IgdGhlCisgICAgIyBsYXN0IGVudHJ5IGluIG1hbnkgZW51bSBzZXJpZXMuCisgICAgIworCisgICAgaWYoJGUgPX4gLyhPQlNPTEVURXxeQ1VSTF9FWFRFUk58X0xBU1RcenxfTEFTVEVOVFJZXHopLykgeworICAgICAgICAkaWdub3JlZCsrOworICAgICAgICBuZXh0OworICAgIH0KKyAgICBpZigkZG9jeyRlfSkgeworICAgICAgICBpZigkdmVyYm9zZSkgeworICAgICAgICAgICAgcHJpbnQgJGUuIlxuIjsKKyAgICAgICAgfQorICAgICAgICAkZG9jeyRlfT0idXNlZCI7CisgICAgICAgIG5leHQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwcmludCAkZS4iXG4iOworICAgICAgICAkbWlzc2VzKys7CisgICAgfQorfQorCisjCisjIG5vdyBzY2FuIHRocm91Z2ggYWxsIHN5bWJvbHMgdGhhdCB3ZXJlIHByZXNlbnQgaW4gdGhlIHN5bWJvbHMtaW4tdmVyc2lvbnMKKyMgYnV0IG5vdCBpbiB0aGUgaGVhZGVycworIworIyBJZiB0aGUgc3ltYm9scyB3ZXJlIG1hcmtlZCAncmVtb3ZlZCcgaW4gc3ltYm9scy1pbi12ZXJzaW9ucyB3ZSBkb24ndCBvdXRwdXQKKyMgYW55dGhpbmcgYWJvdXQgaXQgc2luY2UgdGhhdCBpcyBwZXJmZWN0bHkgZmluZS4KKyMKKworbXkgJGFueXJlbW92ZWQ7CisKK2ZvciBteSAkZSAoc29ydCBrZXlzICVkb2MpIHsKKyAgICBpZigoJGRvY3skZX0gbmUgInVzZWQiKSAmJiAhJHJlbXskZX0pIHsKKworICAgICAgICBpZighJGFueXJlbW92ZWQrKykgeworICAgICAgICAgICAgcHJpbnQgIk1pc3Npbmcgc3ltYm9scyBtZW50aW9uZWQgaW4gc3ltYm9scy1pbi12ZXJzaW9uc1xuIjsKKyAgICAgICAgICAgIHByaW50ICJBZGQgdGhlbSB0byBhIGhlYWRlciwgb3IgbWFyayB0aGVtIGFzIHJlbW92ZWQuXG4iOworICAgICAgICB9CisKKyAgICAgICAgcHJpbnQgIiRlXG4iOworICAgICAgICAkbWlzc2VzKys7CisgICAgfQorfQorCitpZigkc3VtbWFyeSkgeworICAgIHByaW50ICJTdW1tYXJ5OlxuIjsKKyAgICBwcmludGYgIiVkIHN5bWJvbHMgaW4gaGVhZGVycyAob3V0IG9mIHdoaWNoICVkIGFyZSBpZ25vcmVkKVxuIiwgc2NhbGFyKEBzeW1zKSwKKyAgICAkaWdub3JlZDsKKyAgICBwcmludGYgIiVkIHN5bWJvbHMgaW4gaGVhZGVycyBhcmUgaW50ZXJlc3RpbmdcbiIsCisgICAgc2NhbGFyKEBzeW1zKS0gJGlnbm9yZWQ7CisgICAgcHJpbnRmICIlZCBzeW1ib2xzIGFyZSBsaXN0ZWQgaW4gc3ltYm9scy1pbi12ZXJzaW9uc1xuIChvdXQgb2Ygd2hpY2ggJWQgYXJlIGxpc3RlZCBhcyByZW1vdmVkKVxuIiwgc2NhbGFyKGtleXMgJWRvYyksIHNjYWxhcihrZXlzICVyZW0pOworICAgIHByaW50ZiAiJWQgc3ltYm9scyBpbiBzeW1ib2xzLWluLXZlcnNpb25zIHNob3VsZCBtYXRjaCB0aGUgb25lcyBpbiBoZWFkZXJzXG4iLCBzY2FsYXIoa2V5cyAlZG9jKSAtIHNjYWxhcihrZXlzICVyZW0pOworfQorCitpZigkbWlzc2VzKSB7CisgICAgZXhpdCAyOyAjIHRoZXJlIGFyZSBzdHVmZiB0byBhdHRlbmQgdG8hCit9CmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy90ZXN0Y3VybC4xIGIvY3VybC03LjI1LjAvdGVzdHMvdGVzdGN1cmwuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWI3MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvdGVzdGN1cmwuMQpAQCAtMCwwICsxLDEyNCBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCB0ZXN0Y3VybC5wbCAxICIyNCBNYXIgMjAxMCIgIkN1cmwgNy4yMC4xIiAidGVzdGN1cmwiCisuU0ggTkFNRQordGVzdGN1cmwucGwgXC0gKGF1dG9tYXRpY2FsbHkpIHRlc3QgY3VybAorLlNIIFNZTk9QU0lTCisuQiB0ZXN0Y3VybC5wbCBbb3B0aW9uc10gW2Rpcl0gPiBvdXRwdXQKKy5TSCBERVNDUklQVElPTgorXGZJdGVzdGN1cmwucGxcZlAgaXMgdGhlIG1hc3RlciBzY3JpcHQgdG8gdXNlIGZvciBhdXRvbWF0aWMgdGVzdGluZyBvZiBjdXJsCitvZmYgZ2l0IG9yIGRhaWx5IHNuYXBzaG90cy4gSXQgaXMgd3JpdHRlbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYmVpbmcgcnVuIGZyb20gYQorY3JvbnRhYiBqb2Igb3Igc2ltaWxhciBhdCBhIHJlZ3VsYXIgaW50ZXJ2YWwuIFRoZSBvdXRwdXQgaXMgc3VpdGFibGUgdG8gYmUKK21haWxlZCB0byBjdXJsLWF1dG9jb21waWxlQGhheHguc2UgdG8gYmUgZGVhbHQgd2l0aCBhdXRvbWF0aWNhbGx5IChtYWtlIHN1cmUKK3RoZSBzdWJqZWN0IGluY2x1ZGVzIHRoZSB3b3JkICJhdXRvYnVpbGQiIGFzIHRoZSBtYWlsIGdldHMgc2lsZW50bHkgZGlzY2FyZGVkCitvdGhlcndpc2UpLiAgVGhlIG1vc3QgY3VycmVudCBidWlsZCBzdGF0dXMgKHdpdGggYSByZWFzb25hYmxlIGJhY2tsb2cpIHdpbGwgYmUKK3B1Ymxpc2hlZCBvbiB0aGUgY3VybCBzaXRlLCBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2F1dG8vCisKK1xmSW9wdGlvbnNcZlAgbWF5IGJlIG9taXR0ZWQuIFNlZSBcZkktLXNldHVwXGZQIGZvciB3aGF0IGhhcHBlbnMgdGhlbi4KKworXGZJZGlyXGZQIGlzIGEgY3VybCBzb3VyY2UgZGlyLCBwb3NzaWJseSBhIGRhaWx5IHNuYXBzaG90IG9uZS4gVXNpbmcgdGhpcyB3aWxsCittYWtlIHRlc3RjdXJsLnBsIHNraXAgdGhlICdidWlsZGNvbmYnIHN0YWdlIGFuZCB0aHVzIGl0IHJlbW92ZXMgdGhlIGRlcGVuZGVuY3kKK29uIGF1dG9tYWtlLCBhdXRvY29uZiwgbGlidG9vbCwgR05VIG00IGFuZCBwb3NzaWJseSBhIGZldyBvdGhlciB0aGluZ3MuCisKK3Rlc3RjdXJsLnBsIHdpbGwgcnVuICdidWlsZGNvbmYnIChvciBzaW1pbGFyKSwgcnVuIGNvbmZpZ3VyZSwgYnVpbGQgY3VybCBhbmQKK2xpYmN1cmwgaW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkgYW5kIHRoZW4gcnVuICdtYWtlIHRlc3QnIHRvIHRlc3QgdGhlCitmcmVzaCBidWlsZC4KKy5TSCBPUFRJT05TCisuSVAgIi0tY29uZmlndXJlPVtvcHRpb25zXSIKK0NvbmZpZ3VyZSBvcHRpb25zIHBhc3NlZCB0byBjb25maWd1cmUuCisuSVAgIi0tY3Jvc3Njb21waWxlIgorVGhpcyBpcyBhIGNyb3NzLWNvbXBpbGUuIE1ha2VzIFxmSXRlc3RjdXJsLnBsXGZQIHNraXAgYSBmZXcgdGhpbmdzLgorLklQICItLWRlc2M9W2Rlc2NdIgorRGVzY3JpcHRpb24gb2YgeW91ciB0ZXN0IHN5c3RlbS4gRGlzcGxheWVkIG9uIHRoZSBidWlsZCBzdW1tYXJ5IHBhZ2Ugb24gdGhlCit3ZWJhIHNpdGUuCisuSVAgIi0tZW1haWw9W2VtYWlsXSIKK1NldCBlbWFpbCBhZGRyZXNzIHRvIHJlcG9ydCBhcy4gRGlzcGxheWVkIGluIHRoZSBidWlsZCBsb2dzIG9uIHRoZSBzaXRlLgorLklQICItLW1rdGFyYmFsbD1bY29tbWFuZF0iCitHZW5lcmljIGNvbW1hbmQgdG8gcnVuIGFmdGVyIGNvbXBsZXRlZCB0ZXN0LgorLklQICItLW5hbWU9W25hbWVdIgorU2V0IG5hbWUgdG8gcmVwb3J0IGFzLiBEaXNwbGF5ZWQgaW4gdGhlIGJ1aWxkIHN1bW1hcnkgb24gdGhlIHNpdGUuCisuSVAgIi0tbm9idWlsZGNvbmYiCitEb24ndCBydW4gYnVpbGRjb25mLiBVc2VmdWwgd2hlbiBtYW55IGJ1aWxkcyB1c2UgdGhlIHNhbWUgc291cmNlIHRyZWUsIGFzIHRoZW4KK29ubHkgb25lIG5lZWQgdG8gZG8gdGhpcy4gQWxzbywgaWYgbXVsdGlwbGUgcHJvY2Vzc2VzIHJ1biB0ZXN0cyBzaW11bHRhbmVvdXNseQorb24gdGhlIHNhbWUgc291cmNlIHRyZWUgKGxpa2Ugc2V2ZXJhbCBob3N0cyBvbiBhIE5GUyBtb3VudGVkIGRpciksCitzaW11bHRhbmVvdXMgYnVpbGRjb25mIGludm9rZXMgbWF5IGNhdXNlIHByb2JsZW1zLiAoQWRkZWQgaW4gNy4xNC4xKQorLklQICItLW5vZ2l0cHVsbCIKK0Rvbid0IHVwZGF0ZSBmcm9tIGdpdCBldmVuIHRob3VnaCBpdCBpcyBhIGdpdCB0cmVlLiBVc2VmdWwgdG8gc3RpbGwgYmUgYWJsZSB0bwordGVzdCBldmVuIHRob3VnaCB5b3VyIG5ldHdvcmsgaXMgZG93biwgb3Igc2ltaWxhci4KKy5JUCAiLS1ydW50ZXN0b3B0cz1bb3B0aW9uc10iCitPcHRpb25zIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBydW50ZXN0cy5wbCBzY3JpcHQuIFVzZWZ1bCBmb3IgZGlzYWJsaW5nIHZhbGdyaW5kCitieSBmb3JjZSwgYW5kIHNpbWlsYXIuCisuSVAgIi0tc2V0dXA9W2ZpbGUgbmFtZV0iCitGaWxlIG5hbWUgdG8gcmVhZCBzZXR1cCBmcm9tIChkZXByZWNhdGVkKS4gVGhlIG9sZCBzdHlsZSBvZiBwcm92aWRpbmcgaW5mby4KK0lmIGluZm8gaXMgbWlzc2luZyB3aGVuIHRlc3RjdXJsLnBsIGlzIHN0YXJ0ZWQsIGl0IHdpbGwgcHJvbXB0IHlvdSBhbmQgdGhlbgorc3RvcmUgdGhlIGluZm8gaW4gYSAnc2V0dXAnIGZpbGUsIHdoaWNoIGl0IHdpbGwgbG9vayBmb3Igb24gZWFjaCBpbnZva2UuIFVzZQorXGZJLS1uYW1lXGZQLCBcZkktLWVtYWNzXGZQLCBcZkktLWNvbmZpZ3VyZVxmUCBhbmQgXGZJLS1kZXNjXGZQIGluc3RlYWQuCisuSVAgIi0tdGFyZ2V0PVt5b3VyIG9zXSIKK1NwZWNpZnkgeW91ciB0YXJnZXQgZW52aXJvbm1lbnQuIFJlY29nbml6ZWQgc3RyaW5ncyBpbmNsdWRlICd2YycsICdtaW5ndzMyJywKK1wmJ2JvcmxhbmQnIGFuZCAnbmV0d2FyZScuCisuU0ggIklOSVRJQUwgU0VUVVAiCitGaXJzdCB5b3UgbWFrZSBhIGNoZWNrb3V0IGZyb20gZ2l0IChvciB5b3Ugd3JpdGUgYSBzY3JpcHQgdGhhdCBkb3dubG9hZHMgZGFpbHkKK3NuYXBzaG90cyBhdXRvbWF0aWNhbGx5LCBmaW5kIGluc3BpcmF0aW9uIGF0CitodHRwOi8vY3VybC5oYXh4LnNlL2F1dG8vYXV0b2N1cmwudHh0KToKKworLm5mCisgICQgbWtkaXIgZGFpbHktY3VybAorICAkIGNkIGRhaWx5LWN1cmwKKyAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0aHViLmNvbS9iYWdkZXIvY3VybC5naXQKKy5maQorCitXaXRoIHRoZSBjdXJsIHNvdXJjZXMgY2hlY2tlZCBvdXQsIG9yIGRvd25sb2FkZWQsIHlvdSBjYW4gc3RhcnQgdGVzdGluZyByaWdodAorYXdheS4gSWYgeW91IHdhbnQgdG8gdXNlIFxmSXRlc3RjdXJsLnBsXGZQIHdpdGhvdXQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQKK3RvIGhhdmUgaXQgc3RvcmUgYW5kIHJlbWVtYmVyIHRoZSBjb25maWcgaW4gaXRzICdzZXR1cCcgZmlsZSwgdGhlbiBzdGFydCBpdAorbWFudWFsbHkgbm93IGFuZCBmaWxsIGluIHRoZSBhbnN3ZXJzIHRvIHRoZSBxdWVzdGlvbnMgaXQgcHJvbXB0cyB5b3UgZm9yOgorCisubmYKKyAgJCAuL2N1cmwvdGVzdHMvdGVzdGN1cmwucGwKKy5maQorCitOb3cgeW91IGFyZSByZWFkeSB0byBnby4gSWYgeW91IGxldCB0aGUgc2NyaXB0IHJ1biwgaXQgd2lsbCBwZXJmb3JtIGEgZnVsbAorY3ljbGUgYW5kIHNwaXQgb3V0IGxvdHMgb2Ygb3V0cHV0LiBNYWlsIHVzIHRoYXQgb3V0cHV0IGFzIGRlc2NyaWJlZCBhYm92ZS4KKy5TSCAiQ1JPTlRBQiBFWEFNUExFIgorVGhlIGNyb250YWIgY291bGQgaW5jbHVkZSBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisubmYKK1wjIGF1dG9idWlsZCBjdXJsOgorMCA0ICogKiAqIGNkIGRhaWx5LWN1cmwgJiYgLi90ZXN0aXQuc2gKKy5maQorCitXaGVyZSB0ZXN0aXQuc2ggaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjb3VsZCBsb29rIHNpbWlsYXIgdG8gdGhpczoKKworLm5mCittYWlsPSJtYWlsIC1zIGF1dG9idWlsZCBjdXJsLWF1dG9jb21waWxlQGhheHguc2UiCituYW1lPSItLW5hbWU9d2hvYW1pIgorZW1haWw9Ii0tZW1haWw9aWFtbWVAbm93aGVyZSIKK2Rlc2M9JyItLWRlc2M9c3VwZXJtYWNoaW5lIFR1cmJvIDIwMDAiJwordGVzdHByb2c9InBlcmwgLi9jdXJsL3Rlc3RzL3Rlc3RjdXJsLnBsICRuYW1lICRlbWFpbCAkZGVzYyIKK29wdHMxPSItLWNvbmZpZ3VyZT0tLWVuYWJsZS1kZWJ1ZyIKK29wdHMyPSItLWNvbmZpZ3VyZT0tLWVuYWJsZS1pcHY2IgorCisjIHJ1biBmaXJzdCB0ZXN0CiskdGVzdHByb2cgJG9wdHMxIHwgJG1haWwKKworIyBydW4gc2Vjb25kIHRlc3QKKyR0ZXN0cHJvZyAkb3B0czIgfCAkbWFpbApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvdGVzdGN1cmwuaHRtbCBiL2N1cmwtNy4yNS4wL3Rlc3RzL3Rlc3RjdXJsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjNGJjYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3Rlc3RjdXJsLmh0bWwKQEAgLTAsMCArMSwxMTMgQEAKKzxodG1sPjxoZWFkPgorPHRpdGxlPnRlc3RjdXJsLnBsIG1hbiBwYWdlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0icm9mZml0IDAuNyI+Cis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgorUC5sZXZlbDAgeworIHBhZGRpbmctbGVmdDogMmVtOworfQorCitQLmxldmVsMSB7CisgcGFkZGluZy1sZWZ0OiA0ZW07Cit9CisKK1AubGV2ZWwyIHsKKyBwYWRkaW5nLWxlZnQ6IDZlbTsKK30KKworc3Bhbi5lbXBoYXNpcyB7CisgZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLmJvbGQgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitzcGFuLm1hbnBhZ2UgeworIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMi5ucm9mZnNoIHsKKyBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOworfQorCitzcGFuLm5yb2ZmaXAgeworIGZvbnQtd2VpZ2h0OiBib2xkOworIGZvbnQtc2l6ZTogMTIwJTsKKyBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitwLnJvZmZpdCB7CisgdGV4dC1hbGlnbjogY2VudGVyOworIGZvbnQtc2l6ZTogODAlOworfQorPC9TVFlMRT4KKzwvaGVhZD48Ym9keT4KKworPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iTkFNRSI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+TkFNRTwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj50ZXN0Y3VybC5wbCAtIChhdXRvbWF0aWNhbGx5KSB0ZXN0IGN1cmwgPGEgbmFtZT0iU1lOT1BTSVMiPjwvYT48aDIgY2xhc3M9Im5yb2Zmc2giPlNZTk9QU0lTPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJib2xkIj50ZXN0Y3VybC5wbCBbb3B0aW9uc10gW2Rpcl0gJmd0OyBvdXRwdXQ8L3NwYW4+IDxhIG5hbWU9IkRFU0NSSVBUSU9OIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5ERVNDUklQVElPTjwvaDI+Cis8cCBjbGFzcz0ibGV2ZWwwIj48c3BhbiBDbGFzcz0iZW1waGFzaXMiPnRlc3RjdXJsLnBsPC9zcGFuPiBpcyB0aGUgbWFzdGVyIHNjcmlwdCB0byB1c2UgZm9yIGF1dG9tYXRpYyB0ZXN0aW5nIG9mIGN1cmwgb2ZmIGdpdCBvciBkYWlseSBzbmFwc2hvdHMuIEl0IGlzIHdyaXR0ZW4gZm9yIHRoZSBwdXJwb3NlIG9mIGJlaW5nIHJ1biBmcm9tIGEgY3JvbnRhYiBqb2Igb3Igc2ltaWxhciBhdCBhIHJlZ3VsYXIgaW50ZXJ2YWwuIFRoZSBvdXRwdXQgaXMgc3VpdGFibGUgdG8gYmUgbWFpbGVkIHRvIGN1cmwtYXV0b2NvbXBpbGVAaGF4eC5zZSB0byBiZSBkZWFsdCB3aXRoIGF1dG9tYXRpY2FsbHkgKG1ha2Ugc3VyZSB0aGUgc3ViamVjdCBpbmNsdWRlcyB0aGUgd29yZCAiYXV0b2J1aWxkIiBhcyB0aGUgbWFpbCBnZXRzIHNpbGVudGx5IGRpc2NhcmRlZCBvdGhlcndpc2UpLiAgVGhlIG1vc3QgY3VycmVudCBidWlsZCBzdGF0dXMgKHdpdGggYSByZWFzb25hYmxlIGJhY2tsb2cpIHdpbGwgYmUgcHVibGlzaGVkIG9uIHRoZSBjdXJsIHNpdGUsIGF0IDxhIGhyZWY9Imh0dHA6Ly9jdXJsLmhheHguc2UvYXV0by8iPmh0dHA6Ly9jdXJsLmhheHguc2UvYXV0by88L2E+IAorPHAgY2xhc3M9ImxldmVsMCI+PHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj5vcHRpb25zPC9zcGFuPiBtYXkgYmUgb21pdHRlZC4gU2VlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+LS1zZXR1cDwvc3Bhbj4gZm9yIHdoYXQgaGFwcGVucyB0aGVuLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxzcGFuIENsYXNzPSJlbXBoYXNpcyI+ZGlyPC9zcGFuPiBpcyBhIGN1cmwgc291cmNlIGRpciwgcG9zc2libHkgYSBkYWlseSBzbmFwc2hvdCBvbmUuIFVzaW5nIHRoaXMgd2lsbCBtYWtlIHRlc3RjdXJsLnBsIHNraXAgdGhlICdidWlsZGNvbmYnIHN0YWdlIGFuZCB0aHVzIGl0IHJlbW92ZXMgdGhlIGRlcGVuZGVuY3kgb24gYXV0b21ha2UsIGF1dG9jb25mLCBsaWJ0b29sLCBHTlUgbTQgYW5kIHBvc3NpYmx5IGEgZmV3IG90aGVyIHRoaW5ncy4gCis8cCBjbGFzcz0ibGV2ZWwwIj50ZXN0Y3VybC5wbCB3aWxsIHJ1biAnYnVpbGRjb25mJyAob3Igc2ltaWxhciksIHJ1biBjb25maWd1cmUsIGJ1aWxkIGN1cmwgYW5kIGxpYmN1cmwgaW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkgYW5kIHRoZW4gcnVuICdtYWtlIHRlc3QnIHRvIHRlc3QgdGhlIGZyZXNoIGJ1aWxkLiA8YSBuYW1lPSJPUFRJT05TIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5PUFRJT05TPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1jb25maWd1cmVvcHRpb25zIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tY29uZmlndXJlPVtvcHRpb25zXTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5Db25maWd1cmUgb3B0aW9ucyBwYXNzZWQgdG8gY29uZmlndXJlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tY3Jvc3Njb21waWxlIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tY3Jvc3Njb21waWxlPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlRoaXMgaXMgYSBjcm9zcy1jb21waWxlLiBNYWtlcyA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPnRlc3RjdXJsLnBsPC9zcGFuPiBza2lwIGEgZmV3IHRoaW5ncy4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWRlc2NkZXNjIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tZGVzYz1bZGVzY108L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RGVzY3JpcHRpb24gb2YgeW91ciB0ZXN0IHN5c3RlbS4gRGlzcGxheWVkIG9uIHRoZSBidWlsZCBzdW1tYXJ5IHBhZ2Ugb24gdGhlIHdlYmEgc2l0ZS4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLWVtYWlsZW1haWwiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1lbWFpbD1bZW1haWxdPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPlNldCBlbWFpbCBhZGRyZXNzIHRvIHJlcG9ydCBhcy4gRGlzcGxheWVkIGluIHRoZSBidWlsZCBsb2dzIG9uIHRoZSBzaXRlLiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxhIG5hbWU9Ii0tbWt0YXJiYWxsY29tbWFuZCI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLW1rdGFyYmFsbD1bY29tbWFuZF08L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+R2VuZXJpYyBjb21tYW5kIHRvIHJ1biBhZnRlciBjb21wbGV0ZWQgdGVzdC4gCis8cCBjbGFzcz0ibGV2ZWwwIj48YSBuYW1lPSItLW5hbWVuYW1lIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tbmFtZT1bbmFtZV08L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+U2V0IG5hbWUgdG8gcmVwb3J0IGFzLiBEaXNwbGF5ZWQgaW4gdGhlIGJ1aWxkIHN1bW1hcnkgb24gdGhlIHNpdGUuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1ub2J1aWxkY29uZiI+PC9hPjxzcGFuIGNsYXNzPSJucm9mZmlwIj4tLW5vYnVpbGRjb25mPC9zcGFuPiAKKzxwIGNsYXNzPSJsZXZlbDEiPkRvbid0IHJ1biBidWlsZGNvbmYuIFVzZWZ1bCB3aGVuIG1hbnkgYnVpbGRzIHVzZSB0aGUgc2FtZSBzb3VyY2UgdHJlZSwgYXMgdGhlbiBvbmx5IG9uZSBuZWVkIHRvIGRvIHRoaXMuIEFsc28sIGlmIG11bHRpcGxlIHByb2Nlc3NlcyBydW4gdGVzdHMgc2ltdWx0YW5lb3VzbHkgb24gdGhlIHNhbWUgc291cmNlIHRyZWUgKGxpa2Ugc2V2ZXJhbCBob3N0cyBvbiBhIE5GUyBtb3VudGVkIGRpciksIHNpbXVsdGFuZW91cyBidWlsZGNvbmYgaW52b2tlcyBtYXkgY2F1c2UgcHJvYmxlbXMuIChBZGRlZCBpbiA3LjE0LjEpIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1ub2dpdHB1bGwiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1ub2dpdHB1bGw8L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+RG9uJ3QgdXBkYXRlIGZyb20gZ2l0IGV2ZW4gdGhvdWdoIGl0IGlzIGEgZ2l0IHRyZWUuIFVzZWZ1bCB0byBzdGlsbCBiZSBhYmxlIHRvIHRlc3QgZXZlbiB0aG91Z2ggeW91ciBuZXR3b3JrIGlzIGRvd24sIG9yIHNpbWlsYXIuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1ydW50ZXN0b3B0c29wdGlvbnMiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1ydW50ZXN0b3B0cz1bb3B0aW9uc108L3NwYW4+IAorPHAgY2xhc3M9ImxldmVsMSI+T3B0aW9ucyB0aGF0IGlzIHBhc3NlZCB0byB0aGUgcnVudGVzdHMucGwgc2NyaXB0LiBVc2VmdWwgZm9yIGRpc2FibGluZyB2YWxncmluZCBieSBmb3JjZSwgYW5kIHNpbWlsYXIuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS1zZXR1cGZpbGUiPjwvYT48c3BhbiBjbGFzcz0ibnJvZmZpcCI+LS1zZXR1cD1bZmlsZSBuYW1lXTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5GaWxlIG5hbWUgdG8gcmVhZCBzZXR1cCBmcm9tIChkZXByZWNhdGVkKS4gVGhlIG9sZCBzdHlsZSBvZiBwcm92aWRpbmcgaW5mby4gSWYgaW5mbyBpcyBtaXNzaW5nIHdoZW4gdGVzdGN1cmwucGwgaXMgc3RhcnRlZCwgaXQgd2lsbCBwcm9tcHQgeW91IGFuZCB0aGVuIHN0b3JlIHRoZSBpbmZvIGluIGEgJ3NldHVwJyBmaWxlLCB3aGljaCBpdCB3aWxsIGxvb2sgZm9yIG9uIGVhY2ggaW52b2tlLiBVc2UgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj4tLW5hbWU8L3NwYW4+LCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi0tZW1hY3M8L3NwYW4+LCA8c3BhbiBDbGFzcz0iZW1waGFzaXMiPi0tY29uZmlndXJlPC9zcGFuPiBhbmQgPHNwYW4gQ2xhc3M9ImVtcGhhc2lzIj4tLWRlc2M8L3NwYW4+IGluc3RlYWQuIAorPHAgY2xhc3M9ImxldmVsMCI+PGEgbmFtZT0iLS10YXJnZXR5b3VyIj48L2E+PHNwYW4gY2xhc3M9Im5yb2ZmaXAiPi0tdGFyZ2V0PVt5b3VyIG9zXTwvc3Bhbj4gCis8cCBjbGFzcz0ibGV2ZWwxIj5TcGVjaWZ5IHlvdXIgdGFyZ2V0IGVudmlyb25tZW50LiBSZWNvZ25pemVkIHN0cmluZ3MgaW5jbHVkZSAndmMnLCAnbWluZ3czMicsICdib3JsYW5kJyBhbmQgJ25ldHdhcmUnLiA8YSBuYW1lPSJJTklUSUFMIj48L2E+PGgyIGNsYXNzPSJucm9mZnNoIj5JTklUSUFMIFNFVFVQPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPkZpcnN0IHlvdSBtYWtlIGEgY2hlY2tvdXQgZnJvbSBnaXQgKG9yIHlvdSB3cml0ZSBhIHNjcmlwdCB0aGF0IGRvd25sb2FkcyBkYWlseSBzbmFwc2hvdHMgYXV0b21hdGljYWxseSwgZmluZCBpbnNwaXJhdGlvbiBhdCA8YSBocmVmPSJodHRwOi8vY3VybC5oYXh4LnNlL2F1dG8vYXV0b2N1cmwudHh0Ij5odHRwOi8vY3VybC5oYXh4LnNlL2F1dG8vYXV0b2N1cmwudHh0PC9hPik6IAorPHAgY2xhc3M9ImxldmVsMCI+PHByZT4KKzxwIGNsYXNzPSJsZXZlbDAiPiZuYnNwOyAkIG1rZGlyIGRhaWx5LWN1cmwKKyAmbmJzcDsgJCBjZCBkYWlseS1jdXJsCisgJm5ic3A7ICQgZ2l0IGNsb25lIGdpdDovL2dpdGh1Yi5jb20vYmFnZGVyL2N1cmwuZ2l0CisgPC9wcmU+CisKKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+V2l0aCB0aGUgY3VybCBzb3VyY2VzIGNoZWNrZWQgb3V0LCBvciBkb3dubG9hZGVkLCB5b3UgY2FuIHN0YXJ0IHRlc3RpbmcgcmlnaHQgYXdheS4gSWYgeW91IHdhbnQgdG8gdXNlIDxzcGFuIENsYXNzPSJlbXBoYXNpcyI+dGVzdGN1cmwucGw8L3NwYW4+IHdpdGhvdXQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQgdG8gaGF2ZSBpdCBzdG9yZSBhbmQgcmVtZW1iZXIgdGhlIGNvbmZpZyBpbiBpdHMgJ3NldHVwJyBmaWxlLCB0aGVuIHN0YXJ0IGl0IG1hbnVhbGx5IG5vdyBhbmQgZmlsbCBpbiB0aGUgYW5zd2VycyB0byB0aGUgcXVlc3Rpb25zIGl0IHByb21wdHMgeW91IGZvcjogCis8cCBjbGFzcz0ibGV2ZWwwIj48cHJlPgorPHAgY2xhc3M9ImxldmVsMCI+Jm5ic3A7ICQgLi9jdXJsL3Rlc3RzL3Rlc3RjdXJsLnBsCisgPC9wcmU+CisKKzxwIGNsYXNzPSJsZXZlbDAiPgorPHAgY2xhc3M9ImxldmVsMCI+Tm93IHlvdSBhcmUgcmVhZHkgdG8gZ28uIElmIHlvdSBsZXQgdGhlIHNjcmlwdCBydW4sIGl0IHdpbGwgcGVyZm9ybSBhIGZ1bGwgY3ljbGUgYW5kIHNwaXQgb3V0IGxvdHMgb2Ygb3V0cHV0LiBNYWlsIHVzIHRoYXQgb3V0cHV0IGFzIGRlc2NyaWJlZCBhYm92ZS4gPGEgbmFtZT0iQ1JPTlRBQiI+PC9hPjxoMiBjbGFzcz0ibnJvZmZzaCI+Q1JPTlRBQiBFWEFNUExFPC9oMj4KKzxwIGNsYXNzPSJsZXZlbDAiPlRoZSBjcm9udGFiIGNvdWxkIGluY2x1ZGUgc29tZXRoaW5nIGxpa2UgdGhpczogCis8cCBjbGFzcz0ibGV2ZWwwIj48cHJlPgorPHAgY2xhc3M9ImxldmVsMCI+IyBhdXRvYnVpbGQgY3VybDoKKyAwIDQgKiAqICogY2QgZGFpbHktY3VybCAmJiAuL3Rlc3RpdC5zaAorIDwvcHJlPgorCis8cCBjbGFzcz0ibGV2ZWwwIj4KKzxwIGNsYXNzPSJsZXZlbDAiPldoZXJlIHRlc3RpdC5zaCBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNvdWxkIGxvb2sgc2ltaWxhciB0byB0aGlzOiAKKzxwIGNsYXNzPSJsZXZlbDAiPjxwcmU+Cis8cCBjbGFzcz0ibGV2ZWwwIj5tYWlsPSJtYWlsIC1zIGF1dG9idWlsZCBjdXJsLWF1dG9jb21waWxlQGhheHguc2UiCisgbmFtZT0iLS1uYW1lPXdob2FtaSIKKyBlbWFpbD0iLS1lbWFpbD1pYW1tZUBub3doZXJlIgorIGRlc2M9JyItLWRlc2M9c3VwZXJtYWNoaW5lIFR1cmJvIDIwMDAiJworIHRlc3Rwcm9nPSJwZXJsIC4vY3VybC90ZXN0cy90ZXN0Y3VybC5wbCAkbmFtZSAkZW1haWwgJGRlc2MiCisgb3B0czE9Ii0tY29uZmlndXJlPS0tZW5hYmxlLWRlYnVnIgorIG9wdHMyPSItLWNvbmZpZ3VyZT0tLWVuYWJsZS1pcHY2IgorIDxwIGNsYXNzPSJsZXZlbDAiPiMgcnVuIGZpcnN0IHRlc3QKKyAkdGVzdHByb2cgJG9wdHMxIHwgJG1haWwKKyA8cCBjbGFzcz0ibGV2ZWwwIj4jIHJ1biBzZWNvbmQgdGVzdAorICR0ZXN0cHJvZyAkb3B0czIgfCAkbWFpbAorIDxwIGNsYXNzPSJyb2ZmaXQiPgorIFRoaXMgSFRNTCBwYWdlIHdhcyBtYWRlIHdpdGggPGEgaHJlZj0iaHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL3JvZmZpdC8iPnJvZmZpdDwvYT4uCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvdGVzdGN1cmwucGRmIGIvY3VybC03LjI1LjAvdGVzdHMvdGVzdGN1cmwucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiM2M4NmQKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy90ZXN0Y3VybC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvdGVzdGN1cmwucGwgYi9jdXJsLTcuMjUuMC90ZXN0cy90ZXN0Y3VybC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MmJmNjRiCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvdGVzdGN1cmwucGwKQEAgLTAsMCArMSw3NDggQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIFdoYXQgaXMgVGhpcyBTY3JpcHQ/CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyB0ZXN0Y3VybC5wbCBpcyB0aGUgbWFzdGVyIHNjcmlwdCB0byB1c2UgZm9yIGF1dG9tYXRpYyB0ZXN0aW5nIG9mIGN1cmwKKyMgZGlyZWN0bHkgb2ZmIGl0cyBzb3VyY2UgcmVwb3NpdG9yeS4KKyMgVGhpcyBpcyB3cml0dGVuIGZvciB0aGUgcHVycG9zZSBvZiBiZWluZyBydW4gZnJvbSBhIGNyb250YWIgam9iIG9yIHNpbWlsYXIKKyMgYXQgYSByZWd1bGFyIGludGVydmFsLiBUaGUgb3V0cHV0IGlzIHN1aXRhYmxlIHRvIGJlIG1haWxlZCB0bworIyBjdXJsLWF1dG9jb21waWxlQGhheHguc2UgdG8gYmUgZGVhbHQgd2l0aCBhdXRvbWF0aWNhbGx5IChtYWtlIHN1cmUgdGhlCisjIHN1YmplY3QgaW5jbHVkZXMgdGhlIHdvcmQgImF1dG9idWlsZCIgYXMgdGhlIG1haWwgZ2V0cyBzaWxlbnRseSBkaXNjYXJkZWQKKyMgb3RoZXJ3aXNlKS4gIFRoZSBtb3N0IGN1cnJlbnQgYnVpbGQgc3RhdHVzICh3aXRoIGEgcmVzb25hYmxlIGJhY2tsb2cpIHdpbGwKKyMgYmUgcHVibGlzaGVkIG9uIHRoZSBjdXJsIHNpdGUsIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvYXV0by8KKworIyBVU0FHRToKKyMgdGVzdGN1cmwucGwgW29wdGlvbnNdIFtjdXJsLWRhaWx5LW5hbWVdID4gb3V0cHV0CisKKyMgT3B0aW9uczoKKyMKKyMgLS1jb25maWd1cmU9W29wdGlvbnNdICAgIENvbmZpZ3VyZSBvcHRpb25zCisjIC0tY3Jvc3Njb21waWxlICAgICAgICAgICBUaGlzIGlzIGEgY3Jvc3Njb21waWxlCisjIC0tZGVzYz1bZGVzY10gICAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB5b3VyIHRlc3Qgc3lzdGVtCisjIC0tZW1haWw9W2VtYWlsXSAgICAgICAgICBTZXQgZW1haWwgYWRkcmVzcyB0byByZXBvcnQgYXMKKyMgLS1leHR2ZXJjbWQ9W2NvbW1hbmRdICAgIENvbW1hbmQgdG8gdXNlIGZvciBkaXNwbGF5aW5nIHZlcnNpb24gd2l0aCBjcm9zcyBjb21waWxlcy4KKyMgLS1ta3RhcmJhbGw9W2NvbW1hbmRdICAgIENvbW1hbmQgdG8gcnVuIGFmdGVyIGNvbXBsZXRlZCB0ZXN0CisjIC0tbmFtZT1bbmFtZV0gICAgICAgICAgICBTZXQgbmFtZSB0byByZXBvcnQgYXMKKyMgLS1ub2N2c3VwICAgICAgICAgICAgICAgIERvbid0IHB1bGwgZnJvbSBnaXQgZXZlbiB0aG91Z2ggaXQgaXMgYSBnaXQgdHJlZQorIyAtLW5vZ2l0cHVsbCAgICAgICAgICAgICAgRG9uJ3QgcHVsbCBmcm9tIGdpdCBldmVuIHRob3VnaCBpdCBpcyBhIGdpdCB0cmVlCisjIC0tbm9idWlsZGNvbmYgICAgICAgICAgICBEb24ndCBydW4gYnVpbGRjb25mCisjIC0tbm9jb25maWd1cmUgICAgICAgICAgICBEb24ndCBydW4gY29uZmlndXJlCisjIC0tcnVudGVzdG9wdHM9W29wdGlvbnNdICBPcHRpb25zIHRvIHBhc3MgdG8gcnVudGVzdHMucGwKKyMgLS1zZXR1cD1bZmlsZSBuYW1lXSAgICAgIEZpbGUgbmFtZSB0byByZWFkIHNldHVwIGZyb20gKGRlcHJlY2F0ZWQpCisjIC0tdGFyZ2V0PVt5b3VyIG9zXSAgICAgICBTcGVjaWZ5IHlvdXIgdGFyZ2V0IGVudmlyb25tZW50LgorIworIyBpZiBbY3VybC1kYWlseS1uYW1lXSBpcyBvbWl0dGVkLCBhICdjdXJsJyBnaXQgZGlyZWN0b3J5IGlzIGFzc3VtZWQuCisjCisKK3VzZSBzdHJpY3Q7CisKK3VzZSBDd2Q7CisKKyMgVHVybiBvbiB3YXJuaW5ncyAoZXF1aXZhbGVudCB0byAtdywgd2hpY2ggY2FuJ3QgYmUgdXNlZCB3aXRoIC91c3IvYmluL2VudikKKyNCRUdJTiB7ICReVyA9IDE7IH0KKwordXNlIHZhcnMgcXcoJHZlcnNpb24gJGZpeGVkICRpbmZpeGVkICRDVVJMRElSICRnaXQgJHB3ZCAkYnVpbGQgJGJ1aWxkbG9nCisgICAgICAgICAgICAkYnVpbGRsb2duYW1lICRjb25maWd1cmVidWlsZCAkdGFyZ2V0b3MgJGNvbmZoZWFkZXIgJGJpbmV4dAorICAgICAgICAgICAgJGxpYmV4dCk7CisKK3VzZSB2YXJzIHF3KCRuYW1lICRlbWFpbCAkZGVzYyAkY29uZm9wdHMgJHJ1bnRlc3RvcHRzICRzZXR1cGZpbGUgJG1rdGFyYmFsbAorICAgICAgICAgICAgJGV4dHZlcmNtZCAkbm9naXRwdWxsICRub2J1aWxkY29uZiAkY3Jvc3Njb21waWxlCisgICAgICAgICAgICAkdGltZXN0YW1wICRub3Rlcyk7CisKKyMgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdAorJHZlcnNpb249JzIwMTEtMTItMjcnOworJGZpeGVkPTA7CisKKyMgRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgZnJvbSBnaXQgb3IgYSBjYW5uZWQgY29weSBvZiBjdXJsLAorIyBvciBpZiB3ZSBnb3QgYSBzcGVjaWZpYyB0YXJnZXQgb3B0aW9uIG9yIHNldHVwIGZpbGUgb3B0aW9uLgorJENVUkxESVI9ImN1cmwiOworaWYgKC1mICIuZ2l0L2NvbmZpZyIpIHsKKyAgJENVUkxESVIgPSAiLi8iOworfQorCiskZ2l0PTE7Ciskc2V0dXBmaWxlID0gJ3NldHVwJzsKKyRjb25maWd1cmVidWlsZCA9IDE7Cit3aGlsZSAoJEFSR1ZbMF0pIHsKKyAgaWYgKCRBUkdWWzBdID1+IC8tLXRhcmdldD0vKSB7CisgICAgJHRhcmdldG9zID0gKHNwbGl0KC89Lywgc2hpZnQgQEFSR1YpKVsxXTsKKyAgfQorICBlbHNpZiAoJEFSR1ZbMF0gPX4gLy0tc2V0dXA9LykgeworICAgICRzZXR1cGZpbGUgPSAoc3BsaXQoLz0vLCBzaGlmdCBAQVJHVikpWzFdOworICB9CisgIGVsc2lmICgkQVJHVlswXSA9fiAvLS1leHR2ZXJjbWQ9LykgeworICAgICRleHR2ZXJjbWQgPSAoc3BsaXQoLz0vLCBzaGlmdCBAQVJHVikpWzFdOworICB9CisgIGVsc2lmICgkQVJHVlswXSA9fiAvLS1ta3RhcmJhbGw9LykgeworICAgICRta3RhcmJhbGwgPSAoc3BsaXQoLz0vLCBzaGlmdCBAQVJHVikpWzFdOworICB9CisgIGVsc2lmICgkQVJHVlswXSA9fiAvLS1uYW1lPS8pIHsKKyAgICAkbmFtZSA9IChzcGxpdCgvPS8sIHNoaWZ0IEBBUkdWKSlbMV07CisgIH0KKyAgZWxzaWYgKCRBUkdWWzBdID1+IC8tLWVtYWlsPS8pIHsKKyAgICAkZW1haWwgPSAoc3BsaXQoLz0vLCBzaGlmdCBAQVJHVikpWzFdOworICB9CisgIGVsc2lmICgkQVJHVlswXSA9fiAvLS1kZXNjPS8pIHsKKyAgICAkZGVzYyA9IChzcGxpdCgvPS8sIHNoaWZ0IEBBUkdWKSlbMV07CisgIH0KKyAgZWxzaWYgKCRBUkdWWzBdID1+IC8tLWNvbmZpZ3VyZT0oLiopLykgeworICAgICRjb25mb3B0cyA9ICQxOworICAgIHNoaWZ0IEBBUkdWOworICB9CisgIGVsc2lmICgoJEFSR1ZbMF0gZXEgIi0tbm9jdnN1cCIpIHx8ICgkQVJHVlswXSBlcSAiLS1ub2dpdHB1bGwiKSkgeworICAgICRub2dpdHB1bGw9MTsKKyAgICBzaGlmdCBAQVJHVjsKKyAgfQorICBlbHNpZiAoJEFSR1ZbMF0gPX4gLy0tbm9idWlsZGNvbmYvKSB7CisgICAgJG5vYnVpbGRjb25mPTE7CisgICAgc2hpZnQgQEFSR1Y7CisgIH0KKyAgZWxzaWYgKCRBUkdWWzBdID1+IC8tLW5vY29uZmlndXJlLykgeworICAgICRjb25maWd1cmVidWlsZD0wOworICAgIHNoaWZ0IEBBUkdWOworICB9CisgIGVsc2lmICgkQVJHVlswXSA9fiAvLS1jcm9zc2NvbXBpbGUvKSB7CisgICAgJGNyb3NzY29tcGlsZT0xOworICAgIHNoaWZ0IEBBUkdWOworICB9CisgIGVsc2lmICgkQVJHVlswXSA9fiAvLS1ydW50ZXN0b3B0cz0vKSB7CisgICAgJHJ1bnRlc3RvcHRzID0gKHNwbGl0KC89Lywgc2hpZnQgQEFSR1YsIDIpKVsxXTsKKyAgfQorICBlbHNlIHsKKyAgICAkQ1VSTERJUj1zaGlmdCBAQVJHVjsKKyAgICAkZ2l0PTA7ICMgYSBnaXZlbiBkaXIsIGFzc3VtZSBub3QgdXNpbmcgZ2l0CisgIH0KK30KKworIyBEbyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgc3R1ZmYgaGVyZQorJGNvbmZoZWFkZXIgPSAnY3VybF9jb25maWcuaCc7CiskYmluZXh0ID0gJyc7CiskbGliZXh0ID0gJy5sYSc7ICMgLmxhIHNpbmNlIGJvdGggbGliY3VybCBhbmQgbGliY2FyZXMgYXJlIG1hZGUgd2l0aCBsaWJ0b29sCitpZiAoJF5PIGVxICdNU1dpbjMyJyB8fCAkdGFyZ2V0b3MpIHsKKyAgaWYgKCEkdGFyZ2V0b3MpIHsKKyAgICAjIElmIG5vIHRhcmdldCBkZWZpbmVkIG9uIFdpbjMyIGxldHMgYXNzdW1lIHZjCisgICAgJHRhcmdldG9zID0gJ3ZjJzsKKyAgfQorICBpZiAoJHRhcmdldG9zID1+IC92Yy8gfHwgJHRhcmdldG9zID1+IC9ib3JsYW5kLyB8fCAkdGFyZ2V0b3MgPX4gL3dhdGNvbS8pIHsKKyAgICAkYmluZXh0ID0gJy5leGUnOworICAgICRsaWJleHQgPSAnLmxpYic7CisgIH0KKyAgZWxzaWYgKCR0YXJnZXRvcyA9fiAvbWluZ3cvKSB7CisgICAgJGJpbmV4dCA9ICcuZXhlJzsKKyAgICBpZiAoJF5PIGVxICdNU1dpbjMyJykgeworICAgICAgJGxpYmV4dCA9ICcuYSc7CisgICAgfQorICB9CisgIGVsc2lmICgkdGFyZ2V0b3MgPX4gL25ldHdhcmUvKSB7CisgICAgJGNvbmZpZ3VyZWJ1aWxkID0gMDsKKyAgICAkYmluZXh0ID0gJy5ubG0nOworICAgIGlmICgkXk8gZXEgJ01TV2luMzInKSB7CisgICAgICAkbGliZXh0ID0gJy5saWInOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICRsaWJleHQgPSAnLmEnOworICAgIH0KKyAgfQorfQorCitpZiAoKCReTyBlcSAnTVNXaW4zMicgfHwgJF5PIGVxICdtc3lzJykgJiYKKyAgICAoJHRhcmdldG9zID1+IC92Yy8gfHwgJHRhcmdldG9zID1+IC9taW5ndzMyLyB8fAorICAgICAkdGFyZ2V0b3MgPX4gL2JvcmxhbmQvIHx8ICR0YXJnZXRvcyA9fiAvd2F0Y29tLykpIHsKKworICAjIFNldCB0aGVzZSB0aGluZ3Mgb25seSB3aGVuIGJ1aWxkaW5nIE9OIFdpbmRvd3MgYW5kIGZvciBXaW4zMiBwbGF0Zm9ybS4KKyAgIyBGT1IgV2luZG93cyBzaW5jZSB3ZSBtaWdodCBiZSBjcm9zcy1jb21waWxpbmcgb24gYW5vdGhlciBzeXN0ZW0uIE5vbi0KKyAgIyBXaW5kb3dzIGJ1aWxkcyBzdGlsbCBkZWZhdWx0IHRvIGNvbmZpZ3VyZS1zdHlsZSBidWlsZHMgd2l0aCBjdXJsX2NvbmZpZy5oLgorCisgICRjb25maWd1cmVidWlsZCA9IDA7CisgICRjb25maGVhZGVyID0gJ2NvbmZpZy13aW4zMi5oJzsKK30KKworJEVOVntMQ19BTEx9PSJDIiBpZiAoKCRFTlZ7TENfQUxMfSkgJiYgKCRFTlZ7TENfQUxMfSAhfiAvXkMkLykpOworJEVOVntMQ19DVFlQRX09IkMiIGlmICgoJEVOVntMQ19DVFlQRX0pICYmICgkRU5We0xDX0NUWVBFfSAhfiAvXkMkLykpOworJEVOVntMQU5HfT0iQyI7CisKK3N1YiBybXRyZWUoJCkgeworICAgIG15ICR0YXJnZXQgPSAkX1swXTsKKyAgICBpZiAoJF5PIGVxICdNU1dpbjMyJykgeworICAgICAgZm9yZWFjaCAoZ2xvYigkdGFyZ2V0KSkgeworICAgICAgICBzOi86XFw6ZzsKKyAgICAgICAgc3lzdGVtKCJyZCAvcyAvcSAkXyIpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzeXN0ZW0oInJtIC1yZiAkdGFyZ2V0Iik7CisgICAgfQorfQorCitzdWIgZ3JlcGZpbGUoJCQpIHsKKyAgICBteSAoJHRhcmdldCwgJGZuKSA9IEBfOworICAgIG9wZW4oRiwgJGZuKSBvciBkaWU7CisgICAgd2hpbGUgKDxGPikgeworICAgICAgaWYgKC8kdGFyZ2V0LykgeworICAgICAgICBjbG9zZShGKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorICAgIGNsb3NlKEYpOworICAgIHJldHVybiAwOworfQorCitzdWIgbG9naXQoJCkgeworICAgIG15ICR0ZXh0PSRfWzBdOworICAgIGlmICgkdGV4dCkgeworICAgICAgcHJpbnQgInRlc3RjdXJsOiAkdGV4dFxuIjsKKyAgICB9Cit9CisKK3N1YiBsb2dpdF9zcGFjZWQoJCkgeworICAgIG15ICR0ZXh0PSRfWzBdOworICAgIGlmICgkdGV4dCkgeworICAgICAgcHJpbnQgIlxudGVzdGN1cmw6ICR0ZXh0XG5cbiI7CisgICAgfQorfQorCitzdWIgbXlkaWUoJCl7CisgICAgbXkgJHRleHQ9JF9bMF07CisgICAgbG9naXQgIiR0ZXh0IjsKKyAgICBjaGRpciAkcHdkOyAjIGNkIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHJvb3QgZGlyCisKKyAgICBpZiAoJHB3ZCAmJiAkYnVpbGQpIHsKKyAgICAgICMgd2UgaGF2ZSBhIGJ1aWxkIGRpcmVjdG9yeSBuYW1lLCByZW1vdmUgdGhlIGRpcgorICAgICAgbG9naXQgInJlbW92aW5nIHRoZSAkYnVpbGQgZGlyIjsKKyAgICAgIHJtdHJlZSAiJHB3ZC8kYnVpbGQiOworICAgIH0KKyAgICBpZiAoLXIgJGJ1aWxkbG9nKSB7CisgICAgICAjIHdlIGhhdmUgYSBidWlsZCBsb2cgb3V0cHV0IGZpbGUgbGVmdCwgcmVtb3ZlIGl0CisgICAgICBsb2dpdCAicmVtb3ZpbmcgdGhlICRidWlsZGxvZ25hbWUgZmlsZSI7CisgICAgICB1bmxpbmsgIiRidWlsZGxvZyI7CisgICAgfQorICAgIGxvZ2l0ICJFTkRJTkcgSEVSRSI7ICMgbGFzdCBsaW5lIGxvZ2dlZCEKKyAgICBleGl0IDE7Cit9CisKK3N1YiBnZXRfaG9zdF90cmlwbGV0IHsKKyAgbXkgJHRyaXBsZXQ7CisgIG15ICRjb25maWdmaWxlID0gIiRwd2QvJGJ1aWxkL2xpYi9jdXJsX2NvbmZpZy5oIjsKKworICBpZigtZiAkY29uZmlnZmlsZSAmJiAtcyAkY29uZmlnZmlsZSAmJiBvcGVuKExJQkNPTkZJR0gsICI8JGNvbmZpZ2ZpbGUiKSkgeworICAgIHdoaWxlKDxMSUJDT05GSUdIPikgeworICAgICAgaWYoJF8gPX4gL15cI2RlZmluZVxzK09TXHMrIiooW14iXVteIl0qKSIqXHMqLykgeworICAgICAgICAkdHJpcGxldCA9ICQxOworICAgICAgICBsYXN0OworICAgICAgfQorICAgIH0KKyAgICBjbG9zZShMSUJDT05GSUdIKTsKKyAgfQorICByZXR1cm4gJHRyaXBsZXQ7Cit9CisKK2lmIChvcGVuKEYsICIkc2V0dXBmaWxlIikpIHsKKyAgd2hpbGUgKDxGPikgeworICAgIGlmICgvKFx3Kyk9KC4qKS8pIHsKKyAgICAgIGV2YWwgIlwkJDE9JDI7IjsKKyAgICB9CisgIH0KKyAgY2xvc2UoRik7CisgICRpbmZpeGVkPSRmaXhlZDsKK30gZWxzZSB7CisgICRpbmZpeGVkPTA7ICAgICMgc28gdGhhdCAiYWRkaXRpb25hbCBhcmdzIHRvIGNvbmZpZ3VyZSIgd29ya3MgcHJvcGVybHkgZmlyc3QgdGltZS4uLgorfQorCitpZiAoISRuYW1lKSB7CisgIHByaW50ICJwbGVhc2UgZW50ZXIgeW91ciBuYW1lXG4iOworICAkbmFtZSA9IDw+OworICBjaG9tcCAkbmFtZTsKKyAgJGZpeGVkPTE7Cit9CisKK2lmICghJGVtYWlsKSB7CisgIHByaW50ICJwbGVhc2UgZW50ZXIgeW91ciBjb250YWN0IGVtYWlsIGFkZHJlc3NcbiI7CisgICRlbWFpbCA9IDw+OworICBjaG9tcCAkZW1haWw7CisgICRmaXhlZD0yOworfQorCitpZiAoISRkZXNjKSB7CisgIHByaW50ICJwbGVhc2UgZW50ZXIgYSBvbmUgbGluZSBzeXN0ZW0gZGVzY3JpcHRpb25cbiI7CisgICRkZXNjID0gPD47CisgIGNob21wICRkZXNjOworICAkZml4ZWQ9MzsKK30KKworaWYgKCEkY29uZm9wdHMpIHsKKyAgaWYgKCRpbmZpeGVkIDwgNCkgeworICAgIHByaW50ICJwbGVhc2UgZW50ZXIgeW91ciBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBjb25maWd1cmVcbiI7CisgICAgcHJpbnQgImV4YW1wbGVzOiAtLXdpdGgtc3NsIC0tZW5hYmxlLWRlYnVnIC0tZW5hYmxlLWlwdjYgLS13aXRoLWtyYjRcbiI7CisgICAgJGNvbmZvcHRzID0gPD47CisgICAgY2hvbXAgJGNvbmZvcHRzOworICB9Cit9CisKKworaWYgKCRmaXhlZCA8IDQpIHsKKyAgICAkZml4ZWQ9NDsKKyAgICBvcGVuKEYsICI+JHNldHVwZmlsZSIpIG9yIGRpZTsKKyAgICBwcmludCBGICJuYW1lPSckbmFtZSdcbiI7CisgICAgcHJpbnQgRiAiZW1haWw9JyRlbWFpbCdcbiI7CisgICAgcHJpbnQgRiAiZGVzYz0nJGRlc2MnXG4iOworICAgIHByaW50IEYgImNvbmZvcHRzPSckY29uZm9wdHMnXG4iOworICAgIHByaW50IEYgIm5vdGVzPSckbm90ZXMnXG4iOworICAgIHByaW50IEYgImZpeGVkPSckZml4ZWQnXG4iOworICAgIGNsb3NlKEYpOworfQorCisjIEVuYWJsZSBwaWNreSBjb21waWxlciB3YXJuaW5ncyB1bmxlc3MgZXhwbGljaXRseSBkaXNhYmxlZAoraWYgKCgkY29uZm9wdHMgIX4gLy0tZW5hYmxlLWRlYnVnLykgJiYKKyAgICAoJGNvbmZvcHRzICF+IC8tLWVuYWJsZS13YXJuaW5ncy8pICYmCisgICAgKCRjb25mb3B0cyAhfiAvLS1kaXNhYmxlLXdhcm5pbmdzLykpIHsKKyAgJGNvbmZvcHRzIC49ICIgLS1lbmFibGUtd2FybmluZ3MiOworfQorCitteSAkc3RyMTA2Nm9zID0gJ28nIHggMTA2NjsKKworIyBTZXQgdGltZXN0YW1wIHRvIHRoZSBVVEMgdGhpcyBzY3JpcHQgaXMgcnVubmluZy4gSXRzIHZhbHVlIG1pZ2h0CisjIGJlIGNoYW5nZWQgbGF0ZXIgaW4gdGhlIHNjcmlwdCB0byB0aGUgdmFsdWUgcHJlc2VudCBpbiBjdXJsdmVyLmgKKyR0aW1lc3RhbXAgPSBzY2FsYXIoZ210aW1lKS4iIFVUQyI7CisKK2xvZ2l0ICJTVEFSVElORyBIRVJFIjsgIyBmaXJzdCBsaW5lIGxvZ2dlZCwgZm9yIHNjcmlwdHMgdG8gdHJpZ2dlciBvbgorbG9naXQgJ1RSQU5TRkVSIENPTlRST0wgPT09PSAxMTIwIENIQVIgTElORScgLiAkc3RyMTA2Nm9zIC4gJ0xJTkVfRU5EJzsKK2xvZ2l0ICJOQU1FID0gJG5hbWUiOworbG9naXQgIkVNQUlMID0gJGVtYWlsIjsKK2xvZ2l0ICJERVNDID0gJGRlc2MiOworbG9naXQgIk5PVEVTID0gJG5vdGVzIjsKK2xvZ2l0ICJDT05GT1BUUyA9ICRjb25mb3B0cyI7Citsb2dpdCAiQ1BQRkxBR1MgPSAiLiRFTlZ7Q1BQRkxBR1N9OworbG9naXQgIkNGTEFHUyA9ICIuJEVOVntDRkxBR1N9OworbG9naXQgIkxERkxBR1MgPSAiLiRFTlZ7TERGTEFHU307Citsb2dpdCAiQ0MgPSAiLiRFTlZ7Q0N9OworbG9naXQgIk1BS0VGTEFHUyA9ICIuJEVOVntNQUtFRkxBR1N9OworbG9naXQgIkFDTE9DQUxfRkxBR1MgPSAiLiRFTlZ7QUNMT0NBTF9GTEFHU307Citsb2dpdCAiUEtHX0NPTkZJR19QQVRIID0gIi4kRU5We1BLR19DT05GSUdfUEFUSH07Citsb2dpdCAidGFyZ2V0ID0gIi4kdGFyZ2V0b3M7Citsb2dpdCAidmVyc2lvbiA9ICR2ZXJzaW9uIjsgIyBzY3JpcHQgdmVyc2lvbgorbG9naXQgImRhdGUgPSAkdGltZXN0YW1wIjsgICMgV2hlbiB0aGUgdGVzdCBidWlsZCBzdGFydHMKKworJHN0cjEwNjZvcyA9IHVuZGVmOworCisjIE1ha2UgJHB3ZCB0byBiZWNvbWUgdGhlIHBhdGggd2l0aG91dCBuZXdsaW5lLiBXZSdsbCB1c2UgdGhhdCBpbiBvcmRlciB0byBjdXQKKyMgb2ZmIHRoYXQgcGF0aCBmcm9tIGFsbCBwb3NzaWJsZSBsb2dzIGFuZCBlcnJvciBtZXNzYWdlcyBldGMuCiskcHdkID0gZ2V0Y3dkKCk7CisKK2lmICgtZCAkQ1VSTERJUikgeworICBpZiAoJGdpdCAmJiAtZCAiJENVUkxESVIvLmdpdCIpIHsKKyAgICBsb2dpdCAiJENVUkxESVIgaXMgdmVyaWZpZWQgdG8gYmUgYSBmaW5lIGdpdCBzb3VyY2UgZGlyIjsKKyAgICAjIHJlbW92ZSB0aGUgZ2VuZXJhdGVkIHNvdXJjZXMgdG8gZm9yY2UgdGhlbSB0byBiZSByZS1nZW5lcmF0ZWQgZWFjaAorICAgICMgdGltZSB3ZSBydW4gdGhpcyB0ZXN0CisgICAgdW5saW5rICIkQ1VSTERJUi9zcmMvaHVnZWhlbHAuYyI7CisgIH0gZWxzaWYgKCEkZ2l0ICYmIC1mICIkQ1VSTERJUi90ZXN0cy90ZXN0Y3VybC5wbCIpIHsKKyAgICBsb2dpdCAiJENVUkxESVIgaXMgdmVyaWZpZWQgdG8gYmUgYSBmaW5lIGRhaWx5IHNvdXJjZSBkaXIiCisgIH0gZWxzZSB7CisgICAgbXlkaWUgIiRDVVJMRElSIGlzIG5vdCBhIGRhaWx5IHNvdXJjZSBkaXIgb3IgY2hlY2tlZCBvdXQgZnJvbSBnaXQhIgorICB9Cit9CiskYnVpbGQ9ImJ1aWxkLSQkIjsKKyRidWlsZGxvZ25hbWU9ImJ1aWxkbG9nLSQkIjsKKyRidWlsZGxvZz0iJHB3ZC8kYnVpbGRsb2duYW1lIjsKKworIyByZW1vdmUgYW55IHByZXZpb3VzIGxlZnQtb3ZlcnMKK3JtdHJlZSAiYnVpbGQtKiI7CitybXRyZWUgImJ1aWxkbG9nLSoiOworCisjIHRoaXMgaXMgdG8gcmVtb3ZlIG9sZCBidWlsZCBsb2dzIHRoYXQgZW5kZWQgdXAgaW4gdGhlIHdyb25nIGRpcgorZm9yZWFjaCAoZ2xvYigiJENVUkxESVIvYnVpbGRsb2ctKiIpKSB7IHVubGluayAkXzsgfQorCisjIGNyZWF0ZSBhIGRpciB0byBidWlsZCBpbgorbWtkaXIgJGJ1aWxkLCAwNzc3OworCitpZiAoLWQgJGJ1aWxkKSB7CisgIGxvZ2l0ICJidWlsZCBkaXIgJGJ1aWxkIHdhcyBjcmVhdGVkIGZpbmUiOworfSBlbHNlIHsKKyAgbXlkaWUgImZhaWxlZCB0byBjcmVhdGUgZGlyICRidWlsZCI7Cit9CisKKyMgZ2V0IGluIHRoZSBjdXJsIHNvdXJjZSB0cmVlIHJvb3QKK2NoZGlyICRDVVJMRElSOworCisjIERvIHRoZSBnaXQgdGhpbmcsIG9yIG5vdC4uLgoraWYgKCRnaXQpIHsKKyAgIyB1cGRhdGUgcXVpZXRseSB0byB0aGUgbGF0ZXN0IGdpdAorICBpZigkbm9naXRwdWxsKSB7CisgICAgbG9naXQgInNraXBwaW5nIGdpdCBwdWxsICgtLW5vZ2l0cHVsbCkiOworICB9IGVsc2UgeworICAgIG15ICRnaXRzdGF0ID0gMDsKKyAgICBteSBAY29tbWl0czsKKyAgICBsb2dpdCAicnVuIGdpdCBwdWxsIGluIGN1cmwiOworICAgIHN5c3RlbSgiZ2l0IHB1bGwgMj4mMSIpOworICAgICRnaXRzdGF0ICs9ICQ/OworICAgIGxvZ2l0ICJmYWlsZWQgdG8gdXBkYXRlIGZyb20gY3VybCBnaXQgKCQ/KSwgY29udGludWUgYW55d2F5IiBpZiAoJD8pOworICAgICMgZ2V0IHRoZSBsYXN0IDUgY29tbWl0cyBmb3Igc2hvdyAoZXZlbiBpZiBubyBwdWxsIHdhcyBtYWRlKQorICAgIEBjb21taXRzPWBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IC01YDsKKyAgICBsb2dpdCAiVGhlIG1vc3QgcmVjZW50IGN1cmwgZ2l0IGNvbW1pdHM6IjsKKyAgICBmb3IgKEBjb21taXRzKSB7CisgICAgICBjaG9tcCAoJF8pOworICAgICAgbG9naXQgIiAgJF8iOworICAgIH0KKyAgICBpZiAoLWQgImFyZXMvLmdpdCIpIHsKKyAgICAgIGNoZGlyICJhcmVzIjsKKyAgICAgIGxvZ2l0ICJydW4gZ2l0IHB1bGwgaW4gYXJlcyI7CisgICAgICBzeXN0ZW0oImdpdCBwdWxsIDI+JjEiKTsKKyAgICAgICRnaXRzdGF0ICs9ICQ/OworICAgICAgbG9naXQgImZhaWxlZCB0byB1cGRhdGUgZnJvbSBhcmVzIGdpdCAoJD8pLCBjb250aW51ZSBhbnl3YXkiIGlmICgkPyk7CisgICAgICAjIGdldCB0aGUgbGFzdCA1IGNvbW1pdHMgZm9yIHNob3cgKGV2ZW4gaWYgbm8gcHVsbCB3YXMgbWFkZSkKKyAgICAgIEBjb21taXRzPWBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IC01YDsKKyAgICAgIGxvZ2l0ICJUaGUgbW9zdCByZWNlbnQgYXJlcyBnaXQgY29tbWl0czoiOworICAgICAgZm9yIChAY29tbWl0cykgeworICAgICAgICBjaG9tcCAoJF8pOworICAgICAgICBsb2dpdCAiICAkXyI7CisgICAgICB9CisgICAgICBjaGRpciAiJHB3ZC8kQ1VSTERJUiI7CisgICAgfQorICAgICMgU2V0IHRpbWVzdGFtcCB0byB0aGUgVVRDIHRoZSBnaXQgdXBkYXRlIHRvb2sgcGxhY2UuCisgICAgJHRpbWVzdGFtcCA9IHNjYWxhcihnbXRpbWUpLiIgVVRDIiBpZiAoISRnaXRzdGF0KTsKKyAgfQorCisgIGlmKCRub2J1aWxkY29uZikgeworICAgIGxvZ2l0ICJ0b2xkIHRvIG5vdCBydW4gYnVpbGRjb25mIjsKKyAgfQorICBlbHNpZiAoJGNvbmZpZ3VyZWJ1aWxkKSB7CisgICAgIyByZW1vdmUgcG9zc2libGUgbGVmdC1vdmVycyBmcm9tIHRoZSBwYXN0CisgICAgdW5saW5rICJjb25maWd1cmUiOworICAgIHVubGluayAiYXV0b200dGUuY2FjaGUiOworCisgICAgIyBnZW5lcmF0ZSB0aGUgYnVpbGQgZmlsZXMKKyAgICBsb2dpdCAiaW52b2tlIGJ1aWxkY29uZiI7CisgICAgb3BlbihGLCAiLi9idWlsZGNvbmYgMj4mMSB8Iikgb3IgZGllOworICAgIG9wZW4oTE9HLCAiPiRidWlsZGxvZyIpIG9yIGRpZTsKKyAgICB3aGlsZSAoPEY+KSB7CisgICAgICBteSAkbGwgPSAkXzsKKyAgICAgICMgaWdub3JlIG1lc3NhZ2VzIHBlcnRhaW5pbmcgdG8gdGhpcmQgcGFydHkgbTQgZmlsZXMgd2UgZG9uJ3QgY2FyZQorICAgICAgbmV4dCBpZiAoJGxsID1+IC9hY2xvY2FsXC9ndGtcLm00Lyk7CisgICAgICBuZXh0IGlmICgkbGwgPX4gL2FjbG9jYWxcL2d0a2V4dHJhXC5tNC8pOworICAgICAgcHJpbnQgJGxsOworICAgICAgcHJpbnQgTE9HICRsbDsKKyAgICB9CisgICAgY2xvc2UoRik7CisgICAgY2xvc2UoTE9HKTsKKworICAgIGlmIChncmVwZmlsZSgiXmJ1aWxkY29uZjogT0siLCAkYnVpbGRsb2cpKSB7CisgICAgICBsb2dpdCAiYnVpbGRjb25mIHdhcyBzdWNjZXNzZnVsIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBteWRpZSAiYnVpbGRjb25mIHdhcyBOT1Qgc3VjY2Vzc2Z1bCI7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGxvZ2l0ICJidWlsZGNvbmYgd2FzIHN1Y2Nlc3NmdWwgKGR1bW15IG1lc3NhZ2UpIjsKKyAgfQorfQorCisjIFNldCB0aW1lc3RhbXAgdG8gdGhlIG9uZSBpbiBjdXJsdmVyLmggaWYgdGhpcyBpc24ndCBhIGdpdCB0ZXN0IGJ1aWxkLgoraWYgKCgtZiAiaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaCIpICYmCisgICAgKG9wZW4oRiwgIjxpbmNsdWRlL2N1cmwvY3VybHZlci5oIikpKSB7CisgIHdoaWxlICg8Rj4pIHsKKyAgICBjaG9tcDsKKyAgICBpZiAoJF8gPX4gL15cI2RlZmluZVxzK0xJQkNVUkxfVElNRVNUQU1QXHMrXCIoLispXCIuKiQvKSB7CisgICAgICBteSAkc3RhbXBzdHJpbmcgPSAkMTsKKyAgICAgIGlmICgkc3RhbXBzdHJpbmcgIX4gL0RFVi8pIHsKKyAgICAgICAgICAkc3RhbXBzdHJpbmcgPX4gcy9ccytVVEMvLzsKKyAgICAgICAgICAkdGltZXN0YW1wID0gJHN0YW1wc3RyaW5nLiIgVVRDIjsKKyAgICAgIH0KKyAgICAgIGxhc3Q7CisgICAgfQorICB9CisgIGNsb3NlKEYpOworfQorCisjIFNob3cgdGltZXN0YW1wIHdlIGFyZSB1c2luZyBmb3IgdGhpcyB0ZXN0IGJ1aWxkLgorbG9naXQgInRpbWVzdGFtcCA9ICR0aW1lc3RhbXAiOworCitpZiAoJGNvbmZpZ3VyZWJ1aWxkKSB7CisgIGlmICgtZiAiY29uZmlndXJlIikgeworICAgIGxvZ2l0ICJjb25maWd1cmUgY3JlYXRlZCAoYXQgbGVhc3QgaXQgZXhpc3RzKSI7CisgIH0gZWxzZSB7CisgICAgbXlkaWUgIm5vIGNvbmZpZ3VyZSBjcmVhdGVkL2ZvdW5kIjsKKyAgfQorfSBlbHNlIHsKKyAgbG9naXQgImNvbmZpZ3VyZSBjcmVhdGVkIChkdW1teSBtZXNzYWdlKSI7ICMgZHVtbXkgbWVzc2FnZSB0byBmZWlnbiBzdWNjZXNzCit9CisKK3N1YiBmaW5kaW5wYXRoIHsKKyAgbXkgJGM7CisgIG15ICRlOworICBteSAkeCA9ICgkXk8gZXEgJ01TV2luMzInKSA/ICcuZXhlJyA6ICcnOworICBteSAkcyA9ICgkXk8gZXEgJ01TV2luMzInKSA/ICc7JyA6ICc6JzsKKyAgbXkgJHA9JEVOVnsnUEFUSCd9OworICBteSBAcGEgPSBzcGxpdCgkcywgJHApOworICBmb3IgJGMgKEBfKSB7CisgICAgZm9yICRlIChAcGEpIHsKKyAgICAgIGlmKCAteCAiJGUvJGMkeCIpIHsKKyAgICAgICAgcmV0dXJuICRjOworICAgICAgfQorICAgIH0KKyAgfQorfQorCitteSAkbWFrZSA9IGZpbmRpbnBhdGgoImdtYWtlIiwgIm1ha2UiLCAibm1ha2UiKTsKK2lmKCEkbWFrZSkgeworICAgIG15ZGllICJDb3VsZG4ndCBmaW5kIG1ha2UgaW4gdGhlIFBBVEgiOworfQorIyBmb3JjZSB0byAnbm1ha2UnIGZvciBWQyBidWlsZHMKKyRtYWtlID0gIm5tYWtlIiBpZiAoJHRhcmdldG9zID1+IC92Yy8pOworIyBmb3JjZSB0byAnd21ha2UnIGZvciBXYXRjb20gYnVpbGRzCiskbWFrZSA9ICJ3bWFrZSIgaWYgKCR0YXJnZXRvcyA9fiAvd2F0Y29tLyk7Citsb2dpdCAiZ29pbmcgd2l0aCAkbWFrZSBhcyBtYWtlIjsKKworIyBjaGFuZ2UgdG8gYnVpbGQgZGlyCitjaGRpciAiJHB3ZC8kYnVpbGQiOworCitpZiAoJGNvbmZpZ3VyZWJ1aWxkKSB7CisgICMgcnVuIGNvbmZpZ3VyZSBzY3JpcHQKKyAgcHJpbnQgYC4uLyRDVVJMRElSL2NvbmZpZ3VyZSAkY29uZm9wdHMgMj4mMWA7CisKKyAgaWYgKC1mICJsaWIvTWFrZWZpbGUiKSB7CisgICAgbG9naXQgImNvbmZpZ3VyZSBzZWVtcyB0byBoYXZlIGZpbmlzaGVkIGZpbmUiOworICB9IGVsc2UgeworICAgIG15ZGllICJjb25maWd1cmUgZGlkbid0IHdvcmsiOworICB9Cit9IGVsc2UgeworICBsb2dpdCAiY29weWluZyBmaWxlcyB0byBidWlsZCBkaXIgLi4uIjsKKyAgaWYgKCgkXk8gZXEgJ01TV2luMzInKSAmJiAoJHRhcmdldG9zICF+IC9uZXR3YXJlLykpIHsKKyAgICBzeXN0ZW0oInhjb3B5IC9zIC9xIC4uXFwkQ1VSTERJUiAuIik7CisgICAgc3lzdGVtKCJidWlsZGNvbmYuYmF0Iik7CisgIH0KKyAgZWxzaWYgKCR0YXJnZXRvcyA9fiAvbmV0d2FyZS8pIHsKKyAgICBzeXN0ZW0oImNwIC1hZnIgLi4vJENVUkxESVIvKiAuIik7CisgICAgc3lzdGVtKCJjcCAtYWYgLi4vJENVUkxESVIvTWFrZWZpbGUuZGlzdCBNYWtlZmlsZSIpOworICAgIHN5c3RlbSgiJG1ha2UgLWkgLUMgbGliIC1mIE1ha2VmaWxlLm5ldHdhcmUgcHJlYnVpbGQiKTsKKyAgICBzeXN0ZW0oIiRtYWtlIC1pIC1DIHNyYyAtZiBNYWtlZmlsZS5uZXR3YXJlIHByZWJ1aWxkIik7CisgICAgaWYgKC1kICIuLi8kQ1VSTERJUi9hcmVzIikgeworICAgICAgc3lzdGVtKCIkbWFrZSAtaSAtQyBhcmVzIC1mIE1ha2VmaWxlLm5ldHdhcmUgcHJlYnVpbGQiKTsKKyAgICB9CisgIH0KKyAgZWxzaWYgKCReTyBlcSAnbGludXgnKSB7CisgICAgc3lzdGVtKCJjcCAtYWZyIC4uLyRDVVJMRElSLyogLiIpOworICAgIHN5c3RlbSgiY3AgLWFmIC4uLyRDVVJMRElSL01ha2VmaWxlLmRpc3QgTWFrZWZpbGUiKTsKKyAgICBzeXN0ZW0oImNwIC1hZiAuLi8kQ1VSTERJUi9pbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmguZGlzdCAuL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaCIpOworICAgIHN5c3RlbSgiJG1ha2UgLWkgLUMgbGliIC1mIE1ha2VmaWxlLiR0YXJnZXRvcyBwcmVidWlsZCIpOworICAgIHN5c3RlbSgiJG1ha2UgLWkgLUMgc3JjIC1mIE1ha2VmaWxlLiR0YXJnZXRvcyBwcmVidWlsZCIpOworICAgIGlmICgtZCAiLi4vJENVUkxESVIvYXJlcyIpIHsKKyAgICAgIHN5c3RlbSgiY3AgLWFmIC4uLyRDVVJMRElSL2FyZXMvYXJlc19idWlsZC5oLmRpc3QgLi9hcmVzL2FyZXNfYnVpbGQuaCIpOworICAgICAgc3lzdGVtKCIkbWFrZSAtaSAtQyBhcmVzIC1mIE1ha2VmaWxlLiR0YXJnZXRvcyBwcmVidWlsZCIpOworICAgIH0KKyAgfQorfQorCitpZigtZiAiLi9saWJjdXJsLnBjIikgeworICBsb2dpdF9zcGFjZWQgImRpc3BsYXkgbGliY3VybC5wYyI7CisgIGlmKG9wZW4oRiwgIjwuL2xpYmN1cmwucGMiKSkgeworICAgIHdoaWxlKDxGPikgeworICAgICAgbXkgJGxsID0gJF87CisgICAgICBwcmludCAkbGwgaWYoKCRsbCAhfiAvXiAqIy8pICYmICgkbGwgIX4gL14gKiQvKSk7CisgICAgfQorICAgIGNsb3NlKEYpOworICB9Cit9CisKK2lmKC1mICIuL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaCIpIHsKKyAgbG9naXRfc3BhY2VkICJkaXNwbGF5IGluY2x1ZGUvY3VybC9jdXJsYnVpbGQuaCI7CisgIGlmKG9wZW4oRiwgIjwuL2luY2x1ZGUvY3VybC9jdXJsYnVpbGQuaCIpKSB7CisgICAgd2hpbGUoPEY+KSB7CisgICAgICBteSAkbGwgPSAkXzsKKyAgICAgIHByaW50ICRsbCBpZigoJGxsID1+IC9eICojICpkZWZpbmUgKkNVUkxfLykgJiYgKCRsbCAhfiAvX19DVVJMX0NVUkxCVUlMRF9ILykpOworICAgIH0KKyAgICBjbG9zZShGKTsKKyAgfQorfQorZWxzZSB7CisgIG15ZGllICJubyBjdXJsYnVpbGQuaCBjcmVhdGVkL2ZvdW5kIjsKK30KKworbG9naXRfc3BhY2VkICJkaXNwbGF5IGxpYi8kY29uZmhlYWRlciI7CitvcGVuKEYsICJsaWIvJGNvbmZoZWFkZXIiKSBvciBkaWUgImxpYi8kY29uZmhlYWRlcjogJCEiOword2hpbGUgKDxGPikgeworICBwcmludCBpZiAvXiAqIy87Cit9CitjbG9zZShGKTsKKworaWYgKGdyZXBmaWxlKCJeI2RlZmluZSBVU0VfQVJFUyIsICJsaWIvJGNvbmZoZWFkZXIiKSkgeworICBwcmludCAiXG4iOworICBsb2dpdCAic2V0dXAgdG8gYnVpbGQgYXJlcyI7CisKKyAgaWYoLWYgIi4vYXJlcy9saWJjYXJlcy5wYyIpIHsKKyAgICBsb2dpdF9zcGFjZWQgICJkaXNwbGF5IGFyZXMvbGliY2FyZXMucGMiOworICAgIGlmKG9wZW4oRiwgIjwuL2FyZXMvbGliY2FyZXMucGMiKSkgeworICAgICAgd2hpbGUoPEY+KSB7CisgICAgICAgIG15ICRsbCA9ICRfOworICAgICAgICBwcmludCAkbGwgaWYoKCRsbCAhfiAvXiAqIy8pICYmICgkbGwgIX4gL14gKiQvKSk7CisgICAgICB9CisgICAgICBjbG9zZShGKTsKKyAgICB9CisgIH0KKworICBpZigtZiAiLi9hcmVzL2FyZXNfYnVpbGQuaCIpIHsKKyAgICBsb2dpdF9zcGFjZWQgImRpc3BsYXkgYXJlcy9hcmVzX2J1aWxkLmgiOworICAgIGlmKG9wZW4oRiwgIjwuL2FyZXMvYXJlc19idWlsZC5oIikpIHsKKyAgICAgIHdoaWxlKDxGPikgeworICAgICAgICBteSAkbGwgPSAkXzsKKyAgICAgICAgcHJpbnQgJGxsIGlmKCgkbGwgPX4gL14gKiMgKmRlZmluZSAqQ0FSRVNfLykgJiYgKCRsbCAhfiAvX19DQVJFU19CVUlMRF9ILykpOworICAgICAgfQorICAgICAgY2xvc2UoRik7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIG15ZGllICJubyBhcmVzX2J1aWxkLmggY3JlYXRlZC9mb3VuZCI7CisgIH0KKworICAkY29uZmhlYWRlciA9fiBzL2N1cmwvYXJlcy87CisgIGxvZ2l0X3NwYWNlZCAiZGlzcGxheSBhcmVzLyRjb25maGVhZGVyIjsKKyAgaWYob3BlbihGLCAiYXJlcy8kY29uZmhlYWRlciIpKSB7CisgICAgICB3aGlsZSAoPEY+KSB7CisgICAgICAgICAgcHJpbnQgaWYgL14gKiMvOworICAgICAgfQorICAgICAgY2xvc2UoRik7CisgIH0KKworICBwcmludCAiXG4iOworICBsb2dpdCAiYnVpbGQgYXJlcyI7CisgIGNoZGlyICJhcmVzIjsKKworICBpZiAoJHRhcmdldG9zICYmICEkY29uZmlndXJlYnVpbGQpIHsKKyAgICAgIGxvZ2l0ICIkbWFrZSAtZiBNYWtlZmlsZS4kdGFyZ2V0b3MiOworICAgICAgb3BlbihGLCAiJG1ha2UgLWYgTWFrZWZpbGUuJHRhcmdldG9zIDI+JjEgfCIpIG9yIGRpZTsKKyAgfQorICBlbHNlIHsKKyAgICAgIGxvZ2l0ICIkbWFrZSI7CisgICAgICBvcGVuKEYsICIkbWFrZSAyPiYxIHwiKSBvciBkaWU7CisgIH0KKyAgd2hpbGUgKDxGPikgeworICAgIHMvJHB3ZC8vZzsKKyAgICBwcmludDsKKyAgfQorICBjbG9zZShGKTsKKworICBpZiAoLWYgImxpYmNhcmVzJGxpYmV4dCIpIHsKKyAgICBsb2dpdCAiYXJlcyBpcyBub3cgYnVpbHQgc3VjY2Vzc2Z1bGx5IChsaWJjYXJlcyRsaWJleHQpIjsKKyAgfSBlbHNlIHsKKyAgICBteWRpZSAiYXJlcyBidWlsZCBmYWlsZWQgKGxpYmNhcmVzJGxpYmV4dCkiOworICB9CisKKyAgIyBjZCBiYWNrIHRvIHRoZSBjdXJsIGJ1aWxkIGRpcgorICBjaGRpciAiJHB3ZC8kYnVpbGQiOworfQorCitteSAkbWtjbWQgPSAiJG1ha2UgLWkiIC4gKCR0YXJnZXRvcyAmJiAhJGNvbmZpZ3VyZWJ1aWxkID8gIiAkdGFyZ2V0b3MiIDogIiIpOworbG9naXQgIiRta2NtZCI7CitvcGVuKEYsICIkbWtjbWQgMj4mMSB8Iikgb3IgZGllOword2hpbGUgKDxGPikgeworICBzLyRwd2QvL2c7CisgIHByaW50OworfQorY2xvc2UoRik7CisKK2lmICgtZiAibGliL2xpYmN1cmwkbGliZXh0IikgeworICBsb2dpdCAibGliY3VybCB3YXMgY3JlYXRlZCBmaW5lIChsaWJjdXJsJGxpYmV4dCkiOworfQorZWxzZSB7CisgIG15ZGllICJsaWJjdXJsIHdhcyBub3QgY3JlYXRlZCAobGliY3VybCRsaWJleHQpIjsKK30KKworaWYgKC1mICJzcmMvY3VybCRiaW5leHQiKSB7CisgIGxvZ2l0ICJjdXJsIHdhcyBjcmVhdGVkIGZpbmUgKGN1cmwkYmluZXh0KSI7Cit9CitlbHNlIHsKKyAgbXlkaWUgImN1cmwgd2FzIG5vdCBjcmVhdGVkIChjdXJsJGJpbmV4dCkiOworfQorCitpZiAoISRjcm9zc2NvbXBpbGUgfHwgKCgkZXh0dmVyY21kIG5lICcnKSAmJiAoLXggJGV4dHZlcmNtZCkpKSB7CisgIGxvZ2l0ICJkaXNwbGF5IGN1cmwke2JpbmV4dH0gLS12ZXJzaW9uIG91dHB1dCI7CisgIG15ICRjbWQgPSAoJGV4dHZlcmNtZCBuZSAnJyA/ICRleHR2ZXJjbWQuJyAnIDogJycpLiIuL3NyYy9jdXJsJHtiaW5leHR9IC0tdmVyc2lvbnwiOworICBvcGVuKEYsICRjbWQpOworICB3aGlsZSg8Rj4pIHsKKyAgICAjIHN0cmlwIENSIGZyb20gb3V0cHV0IG9uIG5vbi13aW4zMiBwbGF0Zm9ybXMgKHdpbmUgb24gTGludXgpCisgICAgcy9cci8vIGlmICgkXk8gbmUgJ01TV2luMzInKTsKKyAgICBwcmludDsKKyAgfQorICBjbG9zZShGKTsKK30KKworaWYgKCRjb25maWd1cmVidWlsZCAmJiAhJGNyb3NzY29tcGlsZSkgeworICBteSAkbzsKKyAgaWYoJHJ1bnRlc3RvcHRzKSB7CisgICAgICAkbyA9ICJURVNUX0Y9XCIkcnVudGVzdG9wdHNcIiAiOworICB9CisgIGxvZ2l0ICIkbWFrZSAtayAke299dGVzdC1mdWxsIjsKKyAgb3BlbihGLCAiJG1ha2UgLWsgJHtvfXRlc3QtZnVsbCAyPiYxIHwiKSBvciBkaWU7CisgIG9wZW4oTE9HLCAiPiRidWlsZGxvZyIpIG9yIGRpZTsKKyAgd2hpbGUgKDxGPikgeworICAgIHMvJHB3ZC8vZzsKKyAgICBwcmludDsKKyAgICBwcmludCBMT0c7CisgIH0KKyAgY2xvc2UoRik7CisgIGNsb3NlKExPRyk7CisKKyAgaWYgKGdyZXBmaWxlKCJeVEVTVCIsICRidWlsZGxvZykpIHsKKyAgICBsb2dpdCAidGVzdHMgd2VyZSBydW4iOworICB9IGVsc2UgeworICAgIG15ZGllICJ0ZXN0IHN1aXRlIGZhaWx1cmUiOworICB9CisKKyAgaWYgKGdyZXBmaWxlKCJeVEVTVEZBSUw6IiwgJGJ1aWxkbG9nKSkgeworICAgIGxvZ2l0ICJ0aGUgdGVzdHMgd2VyZSBub3Qgc3VjY2Vzc2Z1bCI7CisgIH0gZWxzZSB7CisgICAgbG9naXQgInRoZSB0ZXN0cyB3ZXJlIHN1Y2Nlc3NmdWwhIjsKKyAgfQorfQorZWxzZSB7CisgIGlmKCRjcm9zc2NvbXBpbGUpIHsKKyAgICAjIGJ1aWxkIHRlc3QgaGFybmVzcyBwcm9ncmFtcyBmb3Igc2VsZWN0ZWQgY3Jvc3MtY29tcGlsZXMKKyAgICBteSAkaG9zdF90cmlwbGV0ID0gZ2V0X2hvc3RfdHJpcGxldCgpOworICAgIGlmKCRob3N0X3RyaXBsZXQgPX4gLyhbXi1dKyktKFteLV0rKS1taW5ndyguKikvKSB7CisgICAgICBjaGRpciAiJHB3ZC8kYnVpbGQvdGVzdHMiOworICAgICAgbG9naXRfc3BhY2VkICJidWlsZCB0ZXN0IGhhcm5lc3MiOworICAgICAgb3BlbihGLCAiJG1ha2UgLWkgMj4mMSB8Iikgb3IgZGllOworICAgICAgb3BlbihMT0csICI+JGJ1aWxkbG9nIikgb3IgZGllOworICAgICAgd2hpbGUgKDxGPikgeworICAgICAgICBzLyRwd2QvL2c7CisgICAgICAgIHByaW50OworICAgICAgICBwcmludCBMT0c7CisgICAgICB9CisgICAgICBjbG9zZShGKTsKKyAgICAgIGNsb3NlKExPRyk7CisgICAgICBjaGRpciAiJHB3ZC8kYnVpbGQiOworICAgIH0KKyAgICBsb2dpdF9zcGFjZWQgImNyb3NzLWNvbXBpbGluZywgY2FuJ3QgcnVuIHRlc3RzIjsKKyAgfQorICAjIGR1bW15IG1lc3NhZ2UgdG8gZmVpZ24gc3VjY2VzcworICBwcmludCAiVEVTVERPTkU6IDEgdGVzdHMgb3V0IG9mIDAgKGR1bW15IG1lc3NhZ2UpXG4iOworfQorCisjIGNyZWF0ZSBhIHRhcmJhbGwgaWYgd2UgZ290IHRoYXQgb3B0aW9uLgoraWYgKCgkbWt0YXJiYWxsIG5lICcnKSAmJiAoLXggJG1rdGFyYmFsbCkpIHsKKyAgc3lzdGVtKCRta3RhcmJhbGwpOworfQorCisjIG15ZGllIHRvIGNsZWFudXAKK215ZGllICJlbmRpbmcgbmljZWx5IjsKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3RmdHBzZXJ2ZXIucGwgYi9jdXJsLTcuMjUuMC90ZXN0cy90ZnRwc2VydmVyLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1MzgyZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy90ZnRwc2VydmVyLnBsCkBAIC0wLDAgKzEsMTA5IEBACisjIS91c3IvYmluL2VudiBwZXJsCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyMgIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisjCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyMgYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyMKKyMgWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0JFR0lOIHsKKyAgICBASU5DPShASU5DLCAkRU5WeydzcmNkaXInfSwgJy4nKTsKK30KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIHNlcnZlcmhlbHAgcXcoCisgICAgc2VydmVyX3BpZGZpbGVuYW1lCisgICAgc2VydmVyX2xvZ2ZpbGVuYW1lCisgICAgKTsKKworbXkgJHZlcmJvc2UgPSAwOyAgICAgIyBzZXQgdG8gMSBmb3IgZGVidWdnaW5nCitteSAkcG9ydCA9IDg5OTc7ICAgICAjIGp1c3QgYSBkZWZhdWx0CitteSAkaXB2bnVtID0gNDsgICAgICAjIGRlZmF1bHQgSVAgdmVyc2lvbiBvZiB0ZnRwIHNlcnZlcgorbXkgJGlkbnVtID0gMTsgICAgICAgIyBkYWZhdWx0IHRmdHAgc2VydmVyIGluc3RhbmNlIG51bWJlcgorbXkgJHByb3RvID0gJ3RmdHAnOyAgIyBwcm90b2NvbCB0aGUgdGZ0cCBzZXJ2ZXIgc3BlYWtzCitteSAkcGlkZmlsZTsgICAgICAgICAjIHRmdHAgc2VydmVyIHBpZCBmaWxlCitteSAkbG9nZmlsZTsgICAgICAgICAjIHRmdHAgc2VydmVyIGxvZyBmaWxlCitteSAkc3JjZGlyOworbXkgJGZvcms7CisKK215ICRmbGFncyAgPSAiIjsKK215ICRwYXRoICAgPSAnLic7CitteSAkbG9nZGlyID0gJHBhdGggLicvbG9nJzsKKword2hpbGUoQEFSR1YpIHsKKyAgICBpZigkQVJHVlswXSBlcSAnLS1waWRmaWxlJykgeworICAgICAgICBpZigkQVJHVlsxXSkgeworICAgICAgICAgICAgJHBpZGZpbGUgPSAkQVJHVlsxXTsKKyAgICAgICAgICAgIHNoaWZ0IEBBUkdWOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLWxvZ2ZpbGUnKSB7CisgICAgICAgIGlmKCRBUkdWWzFdKSB7CisgICAgICAgICAgICAkbG9nZmlsZSA9ICRBUkdWWzFdOworICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tc3JjZGlyJykgeworICAgICAgICBpZigkQVJHVlsxXSkgeworICAgICAgICAgICAgJHNyY2RpciA9ICRBUkdWWzFdOworICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0taXB2NCcpIHsKKyAgICAgICAgJGlwdm51bSA9IDQ7CisgICAgfQorICAgIGVsc2lmKCRBUkdWWzBdIGVxICctLWlwdjYnKSB7CisgICAgICAgICRpcHZudW0gPSA2OworICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1wb3J0JykgeworICAgICAgICBpZigkQVJHVlsxXSA9fiAvXihcZCspJC8pIHsKKyAgICAgICAgICAgICRwb3J0ID0gJDE7CisgICAgICAgICAgICBzaGlmdCBAQVJHVjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZigkQVJHVlswXSBlcSAnLS1pZCcpIHsKKyAgICAgICAgaWYoJEFSR1ZbMV0gPX4gL14oXGQrKSQvKSB7CisgICAgICAgICAgICAkaWRudW0gPSAkMSBpZigkMSA+IDApOworICAgICAgICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoJEFSR1ZbMF0gZXEgJy0tdmVyYm9zZScpIHsKKyAgICAgICAgJHZlcmJvc2UgPSAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgU1RERVJSICJcbldhcm5pbmc6IHRmdHBzZXJ2ZXIucGwgdW5rbm93biBwYXJhbWV0ZXI6ICRBUkdWWzBdXG4iOworICAgIH0KKyAgICBzaGlmdCBAQVJHVjsKK30KKworaWYoISRzcmNkaXIpIHsKKyAgICAkc3JjZGlyID0gJEVOVnsnc3JjZGlyJ30gfHwgJy4nOworfQoraWYoISRwaWRmaWxlKSB7CisgICAgJHBpZGZpbGUgPSAiJHBhdGgvIi4gc2VydmVyX3BpZGZpbGVuYW1lKCRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKK30KK2lmKCEkbG9nZmlsZSkgeworICAgICRsb2dmaWxlID0gc2VydmVyX2xvZ2ZpbGVuYW1lKCRsb2dkaXIsICRwcm90bywgJGlwdm51bSwgJGlkbnVtKTsKK30KKworJGZsYWdzIC49ICItLXBpZGZpbGUgXCIkcGlkZmlsZVwiIC0tbG9nZmlsZSBcIiRsb2dmaWxlXCIgIjsKKyRmbGFncyAuPSAiLS1pcHYkaXB2bnVtIC0tcG9ydCAkcG9ydCAtLXNyY2RpciBcIiRzcmNkaXJcIiI7CisKK2V4ZWMoInNlcnZlci90ZnRwZCAkZmxhZ3MiKTsKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvTWFrZWZpbGUuYW0gYi9jdXJsLTcuMjUuMC90ZXN0cy91bml0L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNzRkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy91bml0L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNjggQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm9zdGRpbmMKKworIyBTcGVjaWZ5IG91ciBpbmNsdWRlIHBhdGhzIGhlcmUsIGFuZCBkbyBpdCByZWxhdGl2ZSB0byAkKHRvcF9zcmNkaXIpIGFuZAorIyAkKHRvcF9idWlsZGRpciksIHRvIGVuc3VyZSB0aGF0IHRoZXNlIHBhdGhzIHdoaWNoIGJlbG9uZyB0byB0aGUgbGlicmFyeQorIyBiZWluZyBjdXJyZW50bHkgYnVpbHQgYW5kIHRlc3RlZCBhcmUgc2VhcmNoZWQgYmVmb3JlIHRoZSBsaWJyYXJ5IHdoaWNoCisjIG1pZ2h0IHBvc3NpYmx5IGFscmVhZHkgYmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0uCisjCisjICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwgZm9yIGdlbmVyYXRlZCBjdXJsYnVpbGQuaCBpbmNsdWRlZCBmcm9tIGN1cmwuaAorIyAkKHRvcF9idWlsZGRpcikvaW5jbHVkZSBmb3IgZ2VuZXJhdGVkIGN1cmxidWlsZC5oIGluY2x1ZGVkIGZyb20gbGliL3NldHVwLmgKKyMgJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIGlzIGZvciBsaWJjdXJsJ3MgZXh0ZXJuYWwgaW5jbHVkZSBmaWxlcworIyAkKHRvcF9idWlsZGRpcikvbGliIGlzIGZvciBsaWJjdXJsJ3MgZ2VuZXJhdGVkIGxpYi9jdXJsX2NvbmZpZy5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS9saWIgaXMgZm9yIGxpYmN1cmwncyBsaWIvc2V0dXAuaCBhbmQgb3RoZXIgImJvcnJvd2VkIiBmaWxlcworIyAkKHRvcF9idWlsZGRpcikvYXJlcyBpcyBmb3IgaW4tdHJlZSBjLWFyZXMncyBnZW5lcmF0ZWQgYXJlc19idWlsZC5oIGZpbGUKKyMgJCh0b3Bfc3JjZGlyKS9hcmVzIGlzIGZvciBpbi10cmVlIGMtYXJlcydzIGV4dGVybmFsIGluY2x1ZGUgZmlsZXMKKworaWYgVVNFX0VNQkVEREVEX0FSRVMKK0lOQ0xVREVTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvbGliICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2xpYiAgICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL3Rlc3RzL2xpYnRlc3QgIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvYXJlcyAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2FyZXMKK2Vsc2UKK0lOQ0xVREVTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZSAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9idWlsZGRpcikvbGliICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2xpYiAgICAgICAgICAgIFwKKyAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL3Rlc3RzL2xpYnRlc3QKK2VuZGlmCisKK0VYVFJBX0RJU1QgPSBNYWtlZmlsZS5pbmMKKworTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmN1cmx1LmxhIEBMREZMQUdTQCBATElCQ1VSTF9MSUJTQCBATElCU0AKK0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybHUubGEKK0FNX0NQUEZMQUdTID0gLURVTklUVEVTVFMKKworIyBNYWtlZmlsZS5pbmMgcHJvdmlkZXMgbmVhdCBkZWZpbml0aW9ucworaW5jbHVkZSBNYWtlZmlsZS5pbmMKKworaWYgQlVJTERfVU5JVFRFU1RTCitub2luc3RfUFJPR1JBTVMgPSAkKFVOSVRQUk9HUykKK2Vsc2UKK25vaW5zdF9QUk9HUkFNUyA9CitlbmRpZgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvdW5pdC9NYWtlZmlsZS5pbiBiL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE0OWU4NgotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2OTMgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyB0aGVzZSBmaWxlcyBhcmUgdXNlZCBpbiBldmVyeSBzaW5nbGUgdW5pdCB0ZXN0IHByb2dyYW0KKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLi8uLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorRElTVF9DT01NT04gPSBSRUFETUUgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCisJJChzcmNkaXIpL01ha2VmaWxlLmluYworQEJVSUxEX1VOSVRURVNUU19UUlVFQG5vaW5zdF9QUk9HUkFNUyA9ICQoYW1fX0VYRUVYVF8xKQorc3ViZGlyID0gdGVzdHMvdW5pdAorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvY3VybC1jb21waWxlcnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1jb25mb3B0cy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLWZ1bmN0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLW9wZW5zc2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY3VybC1vdmVycmlkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXJlZW50cmFudC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jdXJsLXN5c3RlbS5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC94Yy10cmFuc2xpdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC96ejUwLXhjLW92ci5tNCAkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9saWIvY3VybF9jb25maWcuaCBcCisJJCh0b3BfYnVpbGRkaXIpL3NyYy9jdXJsX2NvbmZpZy5oIFwKKwkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9jdXJsL2N1cmxidWlsZC5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorYW1fX0VYRUVYVF8xID0gdW5pdDEzMDAkKEVYRUVYVCkgdW5pdDEzMDEkKEVYRUVYVCkgdW5pdDEzMDIkKEVYRUVYVCkgXAorCXVuaXQxMzAzJChFWEVFWFQpIHVuaXQxMzA0JChFWEVFWFQpIHVuaXQxMzA1JChFWEVFWFQpIFwKKwl1bml0MTMwNyQoRVhFRVhUKSB1bml0MTMwOCQoRVhFRVhUKSB1bml0MTMwOSQoRVhFRVhUKQorUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKK2FtX19vYmplY3RzXzEgPSBmaXJzdC4kKE9CSkVYVCkKK2FtX3VuaXQxMzAwX09CSkVDVFMgPSB1bml0MTMwMC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQordW5pdDEzMDBfT0JKRUNUUyA9ICQoYW1fdW5pdDEzMDBfT0JKRUNUUykKK3VuaXQxMzAwX0xEQUREID0gJChMREFERCkKK3VuaXQxMzAwX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybHUubGEKK2FtX3VuaXQxMzAxX09CSkVDVFMgPSB1bml0MTMwMS4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQordW5pdDEzMDFfT0JKRUNUUyA9ICQoYW1fdW5pdDEzMDFfT0JKRUNUUykKK3VuaXQxMzAxX0xEQUREID0gJChMREFERCkKK3VuaXQxMzAxX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybHUubGEKK2FtX3VuaXQxMzAyX09CSkVDVFMgPSB1bml0MTMwMi4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQordW5pdDEzMDJfT0JKRUNUUyA9ICQoYW1fdW5pdDEzMDJfT0JKRUNUUykKK3VuaXQxMzAyX0xEQUREID0gJChMREFERCkKK3VuaXQxMzAyX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybHUubGEKK2FtX3VuaXQxMzAzX09CSkVDVFMgPSB1bml0MTMwMy4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQordW5pdDEzMDNfT0JKRUNUUyA9ICQoYW1fdW5pdDEzMDNfT0JKRUNUUykKK3VuaXQxMzAzX0xEQUREID0gJChMREFERCkKK3VuaXQxMzAzX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybHUubGEKK2FtX3VuaXQxMzA0X09CSkVDVFMgPSB1bml0MTMwNC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQordW5pdDEzMDRfT0JKRUNUUyA9ICQoYW1fdW5pdDEzMDRfT0JKRUNUUykKK3VuaXQxMzA0X0xEQUREID0gJChMREFERCkKK3VuaXQxMzA0X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybHUubGEKK2FtX3VuaXQxMzA1X09CSkVDVFMgPSB1bml0MTMwNS4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQordW5pdDEzMDVfT0JKRUNUUyA9ICQoYW1fdW5pdDEzMDVfT0JKRUNUUykKK3VuaXQxMzA1X0xEQUREID0gJChMREFERCkKK3VuaXQxMzA1X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybHUubGEKK2FtX3VuaXQxMzA3X09CSkVDVFMgPSB1bml0MTMwNy4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQordW5pdDEzMDdfT0JKRUNUUyA9ICQoYW1fdW5pdDEzMDdfT0JKRUNUUykKK3VuaXQxMzA3X0xEQUREID0gJChMREFERCkKK3VuaXQxMzA3X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybHUubGEKK2FtX3VuaXQxMzA4X09CSkVDVFMgPSB1bml0MTMwOC4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQordW5pdDEzMDhfT0JKRUNUUyA9ICQoYW1fdW5pdDEzMDhfT0JKRUNUUykKK3VuaXQxMzA4X0xEQUREID0gJChMREFERCkKK3VuaXQxMzA4X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybHUubGEKK2FtX3VuaXQxMzA5X09CSkVDVFMgPSB1bml0MTMwOS4kKE9CSkVYVCkgJChhbV9fb2JqZWN0c18xKQordW5pdDEzMDlfT0JKRUNUUyA9ICQoYW1fdW5pdDEzMDlfT0JKRUNUUykKK3VuaXQxMzA5X0xEQUREID0gJChMREFERCkKK3VuaXQxMzA5X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybHUubGEKK0RFRkFVTFRfSU5DTFVERVMgPSAKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKHVuaXQxMzAwX1NPVVJDRVMpICQodW5pdDEzMDFfU09VUkNFUykgJCh1bml0MTMwMl9TT1VSQ0VTKSBcCisJJCh1bml0MTMwM19TT1VSQ0VTKSAkKHVuaXQxMzA0X1NPVVJDRVMpICQodW5pdDEzMDVfU09VUkNFUykgXAorCSQodW5pdDEzMDdfU09VUkNFUykgJCh1bml0MTMwOF9TT1VSQ0VTKSAkKHVuaXQxMzA5X1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKHVuaXQxMzAwX1NPVVJDRVMpICQodW5pdDEzMDFfU09VUkNFUykgXAorCSQodW5pdDEzMDJfU09VUkNFUykgJCh1bml0MTMwM19TT1VSQ0VTKSAkKHVuaXQxMzA0X1NPVVJDRVMpIFwKKwkkKHVuaXQxMzA1X1NPVVJDRVMpICQodW5pdDEzMDdfU09VUkNFUykgJCh1bml0MTMwOF9TT1VSQ0VTKSBcCisJJCh1bml0MTMwOV9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRSA9IEBCVUlMRF9MSUJIT1NUTkFNRV9GQUxTRUAKK0JVSUxEX0xJQkhPU1ROQU1FX1RSVUUgPSBAQlVJTERfTElCSE9TVE5BTUVfVFJVRUAKK0JVSUxEX1VOSVRURVNUU19GQUxTRSA9IEBCVUlMRF9VTklUVEVTVFNfRkFMU0VACitCVUlMRF9VTklUVEVTVFNfVFJVRSA9IEBCVUlMRF9VTklUVEVTVFNfVFJVRUAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDT05GSUdVUkVfT1BUSU9OUyA9IEBDT05GSUdVUkVfT1BUSU9OU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NST1NTQ09NUElMSU5HX0ZBTFNFID0gQENST1NTQ09NUElMSU5HX0ZBTFNFQAorQ1JPU1NDT01QSUxJTkdfVFJVRSA9IEBDUk9TU0NPTVBJTElOR19UUlVFQAorQ1VSTERFQlVHX0ZBTFNFID0gQENVUkxERUJVR19GQUxTRUAKK0NVUkxERUJVR19UUlVFID0gQENVUkxERUJVR19UUlVFQAorQ1VSTFZFUlNJT04gPSBAQ1VSTFZFUlNJT05ACitDVVJMX0NBX0JVTkRMRSA9IEBDVVJMX0NBX0JVTkRMRUAKK0NVUkxfQ0ZMQUdfRVhUUkFTID0gQENVUkxfQ0ZMQUdfRVhUUkFTQAorQ1VSTF9ESVNBQkxFX0RJQ1QgPSBAQ1VSTF9ESVNBQkxFX0RJQ1RACitDVVJMX0RJU0FCTEVfRklMRSA9IEBDVVJMX0RJU0FCTEVfRklMRUAKK0NVUkxfRElTQUJMRV9GVFAgPSBAQ1VSTF9ESVNBQkxFX0ZUUEAKK0NVUkxfRElTQUJMRV9HT1BIRVIgPSBAQ1VSTF9ESVNBQkxFX0dPUEhFUkAKK0NVUkxfRElTQUJMRV9IVFRQID0gQENVUkxfRElTQUJMRV9IVFRQQAorQ1VSTF9ESVNBQkxFX0lNQVAgPSBAQ1VSTF9ESVNBQkxFX0lNQVBACitDVVJMX0RJU0FCTEVfTERBUCA9IEBDVVJMX0RJU0FCTEVfTERBUEAKK0NVUkxfRElTQUJMRV9MREFQUyA9IEBDVVJMX0RJU0FCTEVfTERBUFNACitDVVJMX0RJU0FCTEVfUE9QMyA9IEBDVVJMX0RJU0FCTEVfUE9QM0AKK0NVUkxfRElTQUJMRV9QUk9YWSA9IEBDVVJMX0RJU0FCTEVfUFJPWFlACitDVVJMX0RJU0FCTEVfUlRTUCA9IEBDVVJMX0RJU0FCTEVfUlRTUEAKK0NVUkxfRElTQUJMRV9TTVRQID0gQENVUkxfRElTQUJMRV9TTVRQQAorQ1VSTF9ESVNBQkxFX1RFTE5FVCA9IEBDVVJMX0RJU0FCTEVfVEVMTkVUQAorQ1VSTF9ESVNBQkxFX1RGVFAgPSBAQ1VSTF9ESVNBQkxFX1RGVFBACitDVVJMX0xJQlMgPSBAQ1VSTF9MSUJTQAorQ1VSTF9ORVRXT1JLX0xJQlMgPSBAQ1VSTF9ORVRXT1JLX0xJQlNACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU0hBUkVEID0gQEVOQUJMRV9TSEFSRURACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitIQVZFX0dOVVRMU19TUlAgPSBASEFWRV9HTlVUTFNfU1JQQAorSEFWRV9MREFQX1NTTCA9IEBIQVZFX0xEQVBfU1NMQAorSEFWRV9MSUJaID0gQEhBVkVfTElCWkAKK0hBVkVfTElCWl9GQUxTRSA9IEBIQVZFX0xJQlpfRkFMU0VACitIQVZFX0xJQlpfVFJVRSA9IEBIQVZFX0xJQlpfVFJVRUAKK0hBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUID0gQEhBVkVfUEsxMV9DUkVBVEVHRU5FUklDT0JKRUNUQAorSEFWRV9TU0xFQVlfU1JQID0gQEhBVkVfU1NMRUFZX1NSUEAKK0lETl9FTkFCTEVEID0gQElETl9FTkFCTEVEQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJUFY2X0VOQUJMRUQgPSBASVBWNl9FTkFCTEVEQAorS1JCNF9FTkFCTEVEID0gQEtSQjRfRU5BQkxFREAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQ1VSTF9MSUJTID0gQExJQkNVUkxfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUFOT1BUID0gQE1BTk9QVEAKK01JTVBVUkVfRkFMU0UgPSBATUlNUFVSRV9GQUxTRUAKK01JTVBVUkVfVFJVRSA9IEBNSU1QVVJFX1RSVUVACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitOT19VTkRFRklORURfRkFMU0UgPSBATk9fVU5ERUZJTkVEX0ZBTFNFQAorTk9fVU5ERUZJTkVEX1RSVUUgPSBATk9fVU5ERUZJTkVEX1RSVUVACitOUk9GRiA9IEBOUk9GRkAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEggPSBAUEFUSEAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTCA9IEBQRVJMQAorUEtHQUREX05BTUUgPSBAUEtHQUREX05BTUVACitQS0dBRERfUEtHID0gQFBLR0FERF9QS0dACitQS0dBRERfVkVORE9SID0gQFBLR0FERF9WRU5ET1JACitQS0dDT05GSUcgPSBAUEtHQ09ORklHQAorUkFORE9NX0ZJTEUgPSBAUkFORE9NX0ZJTEVACitSQU5MSUIgPSBAUkFOTElCQAorUkVRVUlSRV9MSUJfREVQUyA9IEBSRVFVSVJFX0xJQl9ERVBTQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTT05BTUVfQlVNUF9GQUxTRSA9IEBTT05BTUVfQlVNUF9GQUxTRUAKK1NPTkFNRV9CVU1QX1RSVUUgPSBAU09OQU1FX0JVTVBfVFJVRUAKK1NTTF9FTkFCTEVEID0gQFNTTF9FTkFCTEVEQAorU1RBVElDTElCX0ZBTFNFID0gQFNUQVRJQ0xJQl9GQUxTRUAKK1NUQVRJQ0xJQl9UUlVFID0gQFNUQVRJQ0xJQl9UUlVFQAorU1RSSVAgPSBAU1RSSVBACitTVVBQT1JUX0ZFQVRVUkVTID0gQFNVUFBPUlRfRkVBVFVSRVNACitTVVBQT1JUX1BST1RPQ09MUyA9IEBTVVBQT1JUX1BST1RPQ09MU0AKK1RFU1RfU0VSVkVSX0xJQlMgPSBAVEVTVF9TRVJWRVJfTElCU0AKK1VTRV9BUkVTID0gQFVTRV9BUkVTQAorVVNFX0FYVExTID0gQFVTRV9BWFRMU0AKK1VTRV9DWUFTU0wgPSBAVVNFX0NZQVNTTEAKK1VTRV9FTUJFRERFRF9BUkVTX0ZBTFNFID0gQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQAorVVNFX0VNQkVEREVEX0FSRVNfVFJVRSA9IEBVU0VfRU1CRURERURfQVJFU19UUlVFQAorVVNFX0dOVVRMUyA9IEBVU0VfR05VVExTQAorVVNFX0dOVVRMU19ORVRUTEUgPSBAVVNFX0dOVVRMU19ORVRUTEVACitVU0VfTElCUlRNUCA9IEBVU0VfTElCUlRNUEAKK1VTRV9MSUJTU0gyID0gQFVTRV9MSUJTU0gyQAorVVNFX01BTlVBTF9GQUxTRSA9IEBVU0VfTUFOVUFMX0ZBTFNFQAorVVNFX01BTlVBTF9UUlVFID0gQFVTRV9NQU5VQUxfVFJVRUAKK1VTRV9OU1MgPSBAVVNFX05TU0AKK1VTRV9PUEVOTERBUCA9IEBVU0VfT1BFTkxEQVBACitVU0VfUE9MQVJTU0wgPSBAVVNFX1BPTEFSU1NMQAorVVNFX1NTTEVBWSA9IEBVU0VfU1NMRUFZQAorVVNFX1dJTkRPV1NfU1NQSSA9IEBVU0VfV0lORE9XU19TU1BJQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVkVSU0lPTkVEX0ZMQVZPVVIgPSBAVkVSU0lPTkVEX0ZMQVZPVVJACitWRVJTSU9ORURfU1lNQk9MU19GQUxTRSA9IEBWRVJTSU9ORURfU1lNQk9MU19GQUxTRUAKK1ZFUlNJT05FRF9TWU1CT0xTX1RSVUUgPSBAVkVSU0lPTkVEX1NZTUJPTFNfVFJVRUAKK1ZFUlNJT05OVU0gPSBAVkVSU0lPTk5VTUAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xpYmV4dCA9IEBsaWJleHRACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworIyAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworIyBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorIworIyBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gbm9zdGRpbmMKK0BVU0VfRU1CRURERURfQVJFU19GQUxTRUBJTkNMVURFUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBcCitAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQCAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgICAgICAgIFwKK0BVU0VfRU1CRURERURfQVJFU19GQUxTRUAgICAgICAgICAgIC1JJCh0b3BfYnVpbGRkaXIpL2xpYiAgICAgICAgICBcCitAVVNFX0VNQkVEREVEX0FSRVNfRkFMU0VAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvbGliICAgICAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX0ZBTFNFQCAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL3Rlc3RzL2xpYnRlc3QKKworCisjIFNwZWNpZnkgb3VyIGluY2x1ZGUgcGF0aHMgaGVyZSwgYW5kIGRvIGl0IHJlbGF0aXZlIHRvICQodG9wX3NyY2RpcikgYW5kCisjICQodG9wX2J1aWxkZGlyKSwgdG8gZW5zdXJlIHRoYXQgdGhlc2UgcGF0aHMgd2hpY2ggYmVsb25nIHRvIHRoZSBsaWJyYXJ5CisjIGJlaW5nIGN1cnJlbnRseSBidWlsdCBhbmQgdGVzdGVkIGFyZSBzZWFyY2hlZCBiZWZvcmUgdGhlIGxpYnJhcnkgd2hpY2gKKyMgbWlnaHQgcG9zc2libHkgYWxyZWFkeSBiZSBpbnN0YWxsZWQgaW4gdGhlIHN5c3RlbS4KKyMKKyMgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvY3VybCBmb3IgZ2VuZXJhdGVkIGN1cmxidWlsZC5oIGluY2x1ZGVkIGZyb20gY3VybC5oCisjICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlIGZvciBnZW5lcmF0ZWQgY3VybGJ1aWxkLmggaW5jbHVkZWQgZnJvbSBsaWIvc2V0dXAuaAorIyAkKHRvcF9zcmNkaXIpL2luY2x1ZGUgaXMgZm9yIGxpYmN1cmwncyBleHRlcm5hbCBpbmNsdWRlIGZpbGVzCisjICQodG9wX2J1aWxkZGlyKS9saWIgaXMgZm9yIGxpYmN1cmwncyBnZW5lcmF0ZWQgbGliL2N1cmxfY29uZmlnLmggZmlsZQorIyAkKHRvcF9zcmNkaXIpL2xpYiBpcyBmb3IgbGliY3VybCdzIGxpYi9zZXR1cC5oIGFuZCBvdGhlciAiYm9ycm93ZWQiIGZpbGVzCisjICQodG9wX2J1aWxkZGlyKS9hcmVzIGlzIGZvciBpbi10cmVlIGMtYXJlcydzIGdlbmVyYXRlZCBhcmVzX2J1aWxkLmggZmlsZQorIyAkKHRvcF9zcmNkaXIpL2FyZXMgaXMgZm9yIGluLXRyZWUgYy1hcmVzJ3MgZXh0ZXJuYWwgaW5jbHVkZSBmaWxlcworQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVASU5DTFVERVMgPSAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL2N1cmwgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9saWIgICAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvbGliICAgICAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvdGVzdHMvbGlidGVzdCAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX2J1aWxkZGlyKS9hcmVzICAgICAgICAgXAorQFVTRV9FTUJFRERFRF9BUkVTX1RSVUVAICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvYXJlcworCitFWFRSQV9ESVNUID0gTWFrZWZpbGUuaW5jCitMREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliY3VybHUubGEgQExERkxBR1NAIEBMSUJDVVJMX0xJQlNAIEBMSUJTQAorREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9saWJjdXJsdS5sYQorQU1fQ1BQRkxBR1MgPSAtRFVOSVRURVNUUworVU5JVEZJTEVTID0gY3VybGNoZWNrLmggXAorICQodG9wX3NyY2RpcikvdGVzdHMvbGlidGVzdC90ZXN0LmggXAorICQodG9wX3NyY2RpcikvdGVzdHMvbGlidGVzdC9maXJzdC5jCisKKworIyBUaGVzZSBhcmUgYWxsIHVuaXQgdGVzdCBwcm9ncmFtcworVU5JVFBST0dTID0gdW5pdDEzMDAgdW5pdDEzMDEgdW5pdDEzMDIgdW5pdDEzMDMgdW5pdDEzMDQgdW5pdDEzMDUgdW5pdDEzMDcgXAorIHVuaXQxMzA4IHVuaXQxMzA5CisKK3VuaXQxMzAwX1NPVVJDRVMgPSB1bml0MTMwMC5jICQoVU5JVEZJTEVTKQordW5pdDEzMDFfU09VUkNFUyA9IHVuaXQxMzAxLmMgJChVTklURklMRVMpCit1bml0MTMwMl9TT1VSQ0VTID0gdW5pdDEzMDIuYyAkKFVOSVRGSUxFUykKK3VuaXQxMzAzX1NPVVJDRVMgPSB1bml0MTMwMy5jICQoVU5JVEZJTEVTKQordW5pdDEzMDRfU09VUkNFUyA9IHVuaXQxMzA0LmMgJChVTklURklMRVMpCit1bml0MTMwNV9TT1VSQ0VTID0gdW5pdDEzMDUuYyAkKFVOSVRGSUxFUykKK3VuaXQxMzA3X1NPVVJDRVMgPSB1bml0MTMwNy5jICQoVU5JVEZJTEVTKQordW5pdDEzMDhfU09VUkNFUyA9IHVuaXQxMzA4LmMgJChVTklURklMRVMpCit1bml0MTMwOV9TT1VSQ0VTID0gdW5pdDEzMDkuYyAkKFVOSVRGSUxFUykKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluYyAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgdGVzdHMvdW5pdC9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgdGVzdHMvdW5pdC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCitjbGVhbi1ub2luc3RQUk9HUkFNUzoKKwlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBmPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJICBlY2hvICIgcm0gLWYgJCRwICQkZiI7IFwKKwkgIHJtIC1mICQkcCAkJGYgOyBcCisJZG9uZQordW5pdDEzMDAkKEVYRUVYVCk6ICQodW5pdDEzMDBfT0JKRUNUUykgJCh1bml0MTMwMF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB1bml0MTMwMCQoRVhFRVhUKQorCSQoTElOSykgJCh1bml0MTMwMF9MREZMQUdTKSAkKHVuaXQxMzAwX09CSkVDVFMpICQodW5pdDEzMDBfTERBREQpICQoTElCUykKK3VuaXQxMzAxJChFWEVFWFQpOiAkKHVuaXQxMzAxX09CSkVDVFMpICQodW5pdDEzMDFfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgdW5pdDEzMDEkKEVYRUVYVCkKKwkkKExJTkspICQodW5pdDEzMDFfTERGTEFHUykgJCh1bml0MTMwMV9PQkpFQ1RTKSAkKHVuaXQxMzAxX0xEQUREKSAkKExJQlMpCit1bml0MTMwMiQoRVhFRVhUKTogJCh1bml0MTMwMl9PQkpFQ1RTKSAkKHVuaXQxMzAyX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHVuaXQxMzAyJChFWEVFWFQpCisJJChMSU5LKSAkKHVuaXQxMzAyX0xERkxBR1MpICQodW5pdDEzMDJfT0JKRUNUUykgJCh1bml0MTMwMl9MREFERCkgJChMSUJTKQordW5pdDEzMDMkKEVYRUVYVCk6ICQodW5pdDEzMDNfT0JKRUNUUykgJCh1bml0MTMwM19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB1bml0MTMwMyQoRVhFRVhUKQorCSQoTElOSykgJCh1bml0MTMwM19MREZMQUdTKSAkKHVuaXQxMzAzX09CSkVDVFMpICQodW5pdDEzMDNfTERBREQpICQoTElCUykKK3VuaXQxMzA0JChFWEVFWFQpOiAkKHVuaXQxMzA0X09CSkVDVFMpICQodW5pdDEzMDRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgdW5pdDEzMDQkKEVYRUVYVCkKKwkkKExJTkspICQodW5pdDEzMDRfTERGTEFHUykgJCh1bml0MTMwNF9PQkpFQ1RTKSAkKHVuaXQxMzA0X0xEQUREKSAkKExJQlMpCit1bml0MTMwNSQoRVhFRVhUKTogJCh1bml0MTMwNV9PQkpFQ1RTKSAkKHVuaXQxMzA1X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHVuaXQxMzA1JChFWEVFWFQpCisJJChMSU5LKSAkKHVuaXQxMzA1X0xERkxBR1MpICQodW5pdDEzMDVfT0JKRUNUUykgJCh1bml0MTMwNV9MREFERCkgJChMSUJTKQordW5pdDEzMDckKEVYRUVYVCk6ICQodW5pdDEzMDdfT0JKRUNUUykgJCh1bml0MTMwN19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB1bml0MTMwNyQoRVhFRVhUKQorCSQoTElOSykgJCh1bml0MTMwN19MREZMQUdTKSAkKHVuaXQxMzA3X09CSkVDVFMpICQodW5pdDEzMDdfTERBREQpICQoTElCUykKK3VuaXQxMzA4JChFWEVFWFQpOiAkKHVuaXQxMzA4X09CSkVDVFMpICQodW5pdDEzMDhfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgdW5pdDEzMDgkKEVYRUVYVCkKKwkkKExJTkspICQodW5pdDEzMDhfTERGTEFHUykgJCh1bml0MTMwOF9PQkpFQ1RTKSAkKHVuaXQxMzA4X0xEQUREKSAkKExJQlMpCit1bml0MTMwOSQoRVhFRVhUKTogJCh1bml0MTMwOV9PQkpFQ1RTKSAkKHVuaXQxMzA5X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHVuaXQxMzA5JChFWEVFWFQpCisJJChMSU5LKSAkKHVuaXQxMzA5X0xERkxBR1MpICQodW5pdDEzMDlfT0JKRUNUUykgJCh1bml0MTMwOV9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmlyc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3VuaXQxMzAwLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS91bml0MTMwMS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdW5pdDEzMDIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3VuaXQxMzAzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS91bml0MTMwNC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdW5pdDEzMDUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3VuaXQxMzA3LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS91bml0MTMwOC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdW5pdDEzMDkuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworZmlyc3QubzogJCh0b3Bfc3JjZGlyKS90ZXN0cy9saWJ0ZXN0L2ZpcnN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmaXJzdC5vIC1NRCAtTVAgLU1GICIkKERFUERJUikvZmlyc3QuVHBvIiAtYyAtbyBmaXJzdC5vIGB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL3Rlc3RzL2xpYnRlc3QvZmlyc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgJCh0b3Bfc3JjZGlyKS90ZXN0cy9saWJ0ZXN0L2ZpcnN0LmM7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS9maXJzdC5UcG8iICIkKERFUERJUikvZmlyc3QuUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvZmlyc3QuVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJCh0b3Bfc3JjZGlyKS90ZXN0cy9saWJ0ZXN0L2ZpcnN0LmMnIG9iamVjdD0nZmlyc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmlyc3QubyBgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS90ZXN0cy9saWJ0ZXN0L2ZpcnN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQodG9wX3NyY2RpcikvdGVzdHMvbGlidGVzdC9maXJzdC5jCisKK2ZpcnN0Lm9iajogJCh0b3Bfc3JjZGlyKS90ZXN0cy9saWJ0ZXN0L2ZpcnN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmaXJzdC5vYmogLU1EIC1NUCAtTUYgIiQoREVQRElSKS9maXJzdC5UcG8iIC1jIC1vIGZpcnN0Lm9iaiBgaWYgdGVzdCAtZiAnJCh0b3Bfc3JjZGlyKS90ZXN0cy9saWJ0ZXN0L2ZpcnN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJCh0b3Bfc3JjZGlyKS90ZXN0cy9saWJ0ZXN0L2ZpcnN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQodG9wX3NyY2RpcikvdGVzdHMvbGlidGVzdC9maXJzdC5jJzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvZmlyc3QuVHBvIiAiJChERVBESVIpL2ZpcnN0LlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpL2ZpcnN0LlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQodG9wX3NyY2RpcikvdGVzdHMvbGlidGVzdC9maXJzdC5jJyBvYmplY3Q9J2ZpcnN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmlyc3Qub2JqIGBpZiB0ZXN0IC1mICckKHRvcF9zcmNkaXIpL3Rlc3RzL2xpYnRlc3QvZmlyc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICckKHRvcF9zcmNkaXIpL3Rlc3RzL2xpYnRlc3QvZmlyc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJCh0b3Bfc3JjZGlyKS90ZXN0cy9saWJ0ZXN0L2ZpcnN0LmMnOyBmaWAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWluZm8tYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvdW5pdC9NYWtlZmlsZS5pbmMgYi9jdXJsLTcuMjUuMC90ZXN0cy91bml0L01ha2VmaWxlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTdlMmE2Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvdW5pdC9NYWtlZmlsZS5pbmMKQEAgLTAsMCArMSwxOSBAQAorIyB0aGVzZSBmaWxlcyBhcmUgdXNlZCBpbiBldmVyeSBzaW5nbGUgdW5pdCB0ZXN0IHByb2dyYW0KKworVU5JVEZJTEVTID0gY3VybGNoZWNrLmggXAorICQodG9wX3NyY2RpcikvdGVzdHMvbGlidGVzdC90ZXN0LmggXAorICQodG9wX3NyY2RpcikvdGVzdHMvbGlidGVzdC9maXJzdC5jCisKKyMgVGhlc2UgYXJlIGFsbCB1bml0IHRlc3QgcHJvZ3JhbXMKK1VOSVRQUk9HUyA9IHVuaXQxMzAwIHVuaXQxMzAxIHVuaXQxMzAyIHVuaXQxMzAzIHVuaXQxMzA0IHVuaXQxMzA1IHVuaXQxMzA3IFwKKyB1bml0MTMwOCB1bml0MTMwOQorCit1bml0MTMwMF9TT1VSQ0VTID0gdW5pdDEzMDAuYyAkKFVOSVRGSUxFUykKK3VuaXQxMzAxX1NPVVJDRVMgPSB1bml0MTMwMS5jICQoVU5JVEZJTEVTKQordW5pdDEzMDJfU09VUkNFUyA9IHVuaXQxMzAyLmMgJChVTklURklMRVMpCit1bml0MTMwM19TT1VSQ0VTID0gdW5pdDEzMDMuYyAkKFVOSVRGSUxFUykKK3VuaXQxMzA0X1NPVVJDRVMgPSB1bml0MTMwNC5jICQoVU5JVEZJTEVTKQordW5pdDEzMDVfU09VUkNFUyA9IHVuaXQxMzA1LmMgJChVTklURklMRVMpCit1bml0MTMwN19TT1VSQ0VTID0gdW5pdDEzMDcuYyAkKFVOSVRGSUxFUykKK3VuaXQxMzA4X1NPVVJDRVMgPSB1bml0MTMwOC5jICQoVU5JVEZJTEVTKQordW5pdDEzMDlfU09VUkNFUyA9IHVuaXQxMzA5LmMgJChVTklURklMRVMpCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy91bml0L1JFQURNRSBiL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMWNkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy91bml0L1JFQURNRQpAQCAtMCwwICsxLDcwIEBACitVbml0IHRlc3RzCis9PT09PT09PT09CisKK1RoZSBnb2FsIGlzIHRvIGFkZCB0ZXN0cyBmb3IgKkFMTCogZnVuY3Rpb25zIGluIGxpYmN1cmwuIElmIGZ1bmN0aW9ucyBhcmUgdG9vCitiaWcgYW5kIGNvbXBsaWNhdGVkLCB3ZSBzaG91bGQgc3BsaXQgdGhlbSBpbnRvIHNtYWxsZXIgYW5kIHRlc3RhYmxlIG9uZXMuCisKK0J1aWxkIFVuaXQgVGVzdHMKKz09PT09PT09PT09PT09PT0KKworJy4vY29uZmlndXJlIC0tZW5hYmxlLWRlYnVnJyBpcyByZXF1aXJlZCBmb3IgdGhlIHVuaXQgdGVzdHMgdG8gYnVpbGQuIFRvCitlbmFibGUgdW5pdCB0ZXN0cywgdGhlcmUgd2lsbCBiZSBhIHNlcGFyYXRlIHN0YXRpYyBsaWJjdXJsIGJ1aWx0IHRoYXQgd2lsbCBiZQordXNlZCBleGNsdXNpdmVseSBmb3IgbGlua2luZyB1bml0IHRlc3QgcHJvZ3JhbXMuIEp1c3QgYnVpbGQgZXZlcnl0aGluZyBhcworbm9ybWFsLCBhbmQgdGhlbiB5b3UgY2FuIHJ1biB0aGUgdW5pdCB0ZXN0IGNhc2VzIGFzIHdlbGwuCisKK1J1biBVbml0IFRlc3RzCis9PT09PT09PT09PT09PQorCitVbml0IHRlc3RzIGFyZSBydW4gYXMgcGFydCBvZiB0aGUgcmVndWxhciB0ZXN0IHN1aXRlLiBJZiB5b3UgaGF2ZSBidWlsdAorZXZlcnl0aGluZyB0byBydW4gdW5pdCB0ZXN0cywgdG8gY2FuIGRvICdtYWtlIHRlc3QnIGF0IHRoZSByb290IGxldmVsLiBPciB5b3UKK2NhbiAnY2QgdGVzdHMnIGFuZCB0aGVuIGludm9rZSBpbmRpdmlkdWFsIHVuaXQgdGVzdHMgd2l0aCAuL3J1bnRlc3RzLnBsIE5OTk4KK3doZXJlIE5OTk4gaXMgdGhlIHNwZWNpZmljIHRlc3QgbnVtYmVyLgorCitEZWJ1ZyBVbml0IFRlc3RzCis9PT09PT09PT09PT09PT09CisKK0lmIGEgc3BlY2lmaWMgdGVzdCBmYWlscyB5b3Ugd2lsbCBnZXQgdG9sZC4gVGhlIHRlc3QgY2FzZSB0aGVuIGhhcyBvdXRwdXQgbGVmdAoraW4gdGhlIGxvZy8gc3ViZGlyZWN0b3J5LCBidXQgbW9zdCBpbXBvcnRhbnRseSB5b3UgY2FuIHJlLXJ1biB0aGUgdGVzdCBhZ2FpbgordXNpbmcgZ2RiIGJ5IGRvaW5nIC4vcnVudGVzdHMucGwgLWcgTk5OTi4gVGhhdCBpcywgYWRkIGEgLWcgdG8gbWFrZSBpdCBzdGFydAordXAgZ2RiIGFuZCBydW4gdGhlIHNhbWUgY2FzZSB1c2luZyB0aGF0LgorCitXcml0ZSBVbml0IFRlc3RzCis9PT09PT09PT09PT09PT09CisKK1dlIHB1dCB0ZXN0cyB0aGF0IGZvY3VzIG9uIGFuIGFyZWEgb3IgYSBzcGVjaWZpYyBmdW5jdGlvbiBpbnRvIGEgc2luZ2xlIEMKK3NvdXJjZSBmaWxlLiBUaGUgc291cmNlIGZpbGUgc2hvdWxkIGJlIG5hbWVkICd1bml0Tk5OTi5jJyB3aGVyZSBOTk5OIGlzIGEKK251bWJlciB0aGF0IHN0YXJ0cyB3aXRoIDEzMDAgYW5kIHlvdSBjYW4gcGljayB0aGUgbmV4dCBmcmVlIG51bWJlci4KKworWW91IGFsc28gbmVlZCBhIHNlcGFyYXRlIGZpbGUgY2FsbGVkIHRlc3RzL2RhdGEvdGVzdE5OTk4gKHVzaW5nIHRoZSBzYW1lCitudW1iZXIpIHRoYXQgZGVzY3JpYmVzIHlvdXIgdGVzdCBjYXNlLiBTZWUgdGhlIHRlc3QxMzAwIGZpbGUgZm9yIGluc3BpcmF0aW9uCithbmQgdGhlIHRlc3RzL0ZJTEVGT1JNQVQgZG9jdW1lbnRhdGlvbi4KKworRm9yIHRoZSBhY3R1YWwgQyBmaWxlLCBoZXJlJ3MgYSB2ZXJ5IHNpbXBsZSBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdGFydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAiY3VybGNoZWNrLmgiCisKKyNpbmNsdWRlICJhIGxpYmN1cmwgaGVhZGVyLmgiIC8qIGZyb20gdGhlIGxpYiBkaXIgKi8KKworc3RhdGljIHZvaWQgdW5pdF9zZXR1cCggdm9pZCApCit7CisgIC8qIHdoYXRldmVyIHlvdSB3YW50IGRvbmUgZmlyc3QgKi8KK30KKworc3RhdGljIHZvaWQgdW5pdF9zdG9wKCB2b2lkICkKK3sKKyAgLyogZG9uZSBiZWZvcmUgc2h1dHRpbmcgZG93biBhbmQgZXhpdGluZyAqLworfQorCitVTklUVEVTVF9TVEFSVAorCisgIC8qIGhlcmUgeW91IHN0YXJ0IGRvaW5nIHRoaW5ncyBhbmQgY2hlY2tpbmcgdGhhdCB0aGUgcmVzdWx0cyBhcmUgZ29vZCAqLworCisgIGZhaWxfdW5sZXNzKCBzaXplID09IDAgLCAiaW5pdGlhbCBzaXplIHNob3VsZCBiZSB6ZXJvIiApOworICBmYWlsX2lmKCBoZWFkID09IE5VTEwgLCAiaGVhZCBzaG91bGQgbm90IGJlIGluaXRpYXRlZCB0byBOVUxMIiApOworCisgIC8qIHlvdSBlbmQgdGhlIHRlc3QgY29kZSBsaWtlIHRoaXM6ICovCisKK1VOSVRURVNUX1NUT1AKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZW5kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvY3VybGNoZWNrLmggYi9jdXJsLTcuMjUuMC90ZXN0cy91bml0L2N1cmxjaGVjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MjAzZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy91bml0L2N1cmxjaGVjay5oCkBAIC0wLDAgKzEsOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworLyogVGhlIGZhaWwgbWFjcm9zIG1hcmsgdGhlIGN1cnJlbnQgdGVzdCBzdGVwIGFzIGZhaWxlZCwgYW5kIGNvbnRpbnVlICovCisjZGVmaW5lIGZhaWxfaWYoZXhwciwgbXNnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYoZXhwcikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgQXNzZXJ0aW9uICclcycgbWV0OiAlc1xuIiAsICBcCisgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sICNleHByLCBtc2cpOyAgICAgICAgICAgIFwKKyAgICB1bml0ZmFpbCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyNkZWZpbmUgZmFpbF91bmxlc3MoZXhwciwgbXNnKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYoIShleHByKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIEFzc2VydGlvbiAnJXMnIGZhaWxlZDogJXNcbiIsIFwKKyAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgI2V4cHIsIG1zZyk7ICAgICAgICAgICAgIFwKKyAgICB1bml0ZmFpbCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjZGVmaW5lIHZlcmlmeV9tZW1vcnkoZHluYW1pYywgY2hlY2ssIGxlbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmKGR5bmFtaWMgJiYgbWVtY21wKGR5bmFtaWMsIGNoZWNrLCBsZW4pKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBUaGUgZHluYW1pYyBzdHJpbmcgZGlkbid0IG1hdGNoICclcydcbiIsICAgICBcCisgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIGNoZWNrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5pdGZhaWwrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworLyogZmFpbCgpIGlzIGZvciB3aGVuIHRoZSB0ZXN0IGNhc2UgZmlndXJlZCBvdXQgYnkgaXRzZWxmIHRoYXQgYSBjaGVjaworICAgcHJvdmVkIGEgZmFpbHVyZSAqLworI2RlZmluZSBmYWlsKG1zZykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCB0ZXN0IGZhaWxlZDogJyVzJ1xuIiwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgbXNnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuaXRmYWlsKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gV0hJTEVfRkFMU0UKKworCisvKiBUaGUgYWJvcnQgbWFjcm9zIG1hcmsgdGhlIGN1cnJlbnQgdGVzdCBzdGVwIGFzIGZhaWxlZCwgYW5kIGV4aXQgdGhlIHRlc3QgKi8KKyNkZWZpbmUgYWJvcnRfaWYoZXhwciwgbXNnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZihleHByKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBBYm9ydCBhc3NlcnRpb24gJyVzJyBtZXQ6ICVzXG4iICwgIFwKKyAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgI2V4cHIsIG1zZyk7ICAgICAgICAgICAgICAgICAgXAorICAgIHVuaXRmYWlsKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byB1bml0X3Rlc3RfYWJvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjZGVmaW5lIGFib3J0X3VubGVzcyhleHByLCBtc2cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmKCEoZXhwcikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBBYm9ydCBhc3NlcnRpb24gJyVzJyBmYWlsZWQ6ICVzXG4iLCBcCisgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sICNleHByLCBtc2cpOyAgICAgICAgICAgICAgICAgICBcCisgICAgdW5pdGZhaWwrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byB1bml0X3Rlc3RfYWJvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworI2RlZmluZSBhYm9ydF90ZXN0KG1zZykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCB0ZXN0IGFib3J0ZWQ6ICclcydcbiIsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgbXNnKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuaXRmYWlsKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byB1bml0X3Rlc3RfYWJvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSBXSElMRV9GQUxTRQorCisKKworZXh0ZXJuIGludCB1bml0ZmFpbDsKKworI2RlZmluZSBVTklUVEVTVF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpbnQgdGVzdChjaGFyICphcmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAodm9pZClhcmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAodW5pdF9zZXR1cCgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZhaWwoInVuaXRfc2V0dXAoKSBmYWlsdXJlIik7ICAgICAgICAgICAgICAgXAorICB9IGVsc2UgeworCisjZGVmaW5lIFVOSVRURVNUX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byB1bml0X3Rlc3RfYWJvcnQ7IC8qIGF2b2lkIHdhcm5pbmcgKi8gICBcCit1bml0X3Rlc3RfYWJvcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5pdF9zdG9wKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiB1bml0ZmFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKwpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvdW5pdC91bml0MTMwMC5jIGIvY3VybC03LjI1LjAvdGVzdHMvdW5pdC91bml0MTMwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiODM0MTYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy91bml0L3VuaXQxMzAwLmMKQEAgLTAsMCArMSwyOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN1cmxjaGVjay5oIgorCisjaW5jbHVkZSAibGxpc3QuaCIKKworc3RhdGljIHN0cnVjdCBjdXJsX2xsaXN0ICpsbGlzdDsKKworc3RhdGljIHN0cnVjdCBjdXJsX2xsaXN0ICpsbGlzdF9kZXN0aW5hdGlvbjsKKworc3RhdGljIHZvaWQgdGVzdF9jdXJsX2xsaXN0X2R0b3Iodm9pZCAqa2V5LCB2b2lkICp2YWx1ZSkKK3sKKyAgLyogdXNlZCBieSB0aGUgbGxpc3QgQVBJLCBkb2VzIG5vdGhpbmcgaGVyZSAqLworICAodm9pZClrZXk7CisgICh2b2lkKXZhbHVlOworfQorCitzdGF0aWMgQ1VSTGNvZGUgdW5pdF9zZXR1cCh2b2lkKQoreworICBsbGlzdCA9IEN1cmxfbGxpc3RfYWxsb2ModGVzdF9jdXJsX2xsaXN0X2R0b3IpOworICBpZighbGxpc3QpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIGxsaXN0X2Rlc3RpbmF0aW9uID0gQ3VybF9sbGlzdF9hbGxvYyh0ZXN0X2N1cmxfbGxpc3RfZHRvcik7CisgIGlmKCFsbGlzdF9kZXN0aW5hdGlvbikgeworICAgICAgQ3VybF9sbGlzdF9kZXN0cm95KGxsaXN0LCBOVUxMKTsKKyAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgdm9pZCB1bml0X3N0b3Aodm9pZCkKK3sKKyAgQ3VybF9sbGlzdF9kZXN0cm95KGxsaXN0LCBOVUxMKTsKKyAgQ3VybF9sbGlzdF9kZXN0cm95KGxsaXN0X2Rlc3RpbmF0aW9uLCBOVUxMKTsKK30KKworVU5JVFRFU1RfU1RBUlQKKyAgaW50IHVudXNlZERhdGFfY2FzZTEgPSAxOworICBpbnQgdW51c2VkRGF0YV9jYXNlMiA9IDI7CisgIGludCB1bnVzZWREYXRhX2Nhc2UzID0gMzsKKyAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqaGVhZDsKKyAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqZWxlbWVudF9uZXh0OworICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICplbGVtZW50X3ByZXY7CisgIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKnRvX3JlbW92ZTsKKyAgc2l6ZV90IGxsaXN0X3NpemUgPSBDdXJsX2xsaXN0X2NvdW50KGxsaXN0KTsKKyAgaW50IGN1cmxFcnJDb2RlID0gMDsKKworICAvKioKKyAgICogdGVzdGluZyBsbGlzdF9pbml0CisgICAqIGNhc2UgMToKKyAgICogbGlzdCBpbml0aWF0aW9uCisgICAqIEBhc3N1bXB0aW9uczoKKyAgICogMTogbGlzdCBzaXplIHdpbGwgYmUgMAorICAgKiAyOiBsaXN0IGhlYWQgd2lsbCBiZSBOVUxMCisgICAqIDM6IGxpc3QgdGFpbCB3aWxsIGJlIE5VTEwKKyAgICogNDogbGlzdCBkdG9yIHdpbGwgYmUgTlVMTAorICAqLworCisgIGZhaWxfdW5sZXNzKGxsaXN0LT5zaXplID09IDAsICJsaXN0IGluaXRpYWwgc2l6ZSBzaG91bGQgYmUgemVybyIpOworICBmYWlsX3VubGVzcyhsbGlzdC0+aGVhZCA9PSBOVUxMLCAibGlzdCBoZWFkIHNob3VsZCBpbml0aWF0ZSB0byBOVUxMIik7CisgIGZhaWxfdW5sZXNzKGxsaXN0LT50YWlsID09IE5VTEwsICJsaXN0IHRhaWwgc2hvdWxkIGludGlhdGUgdG8gTlVMTCIpOworICBmYWlsX3VubGVzcyhsbGlzdC0+ZHRvciA9PSB0ZXN0X2N1cmxfbGxpc3RfZHRvciwKKyAgICAgICAgICAgICAgICJsaXN0IGR0b3Igc2hvbGQgaW5pdGlhdGUgdG8gdGVzdF9jdXJsX2xsaXN0X2R0b3IiKTsKKworICAvKioKKyAgICogdGVzdGluZyBDdXJsX2xsaXN0X2luc2VydF9uZXh0CisgICAqIGNhc2UgMToKKyAgICogbGlzdCBpcyBlbXB0eQorICAgKiBAYXNzdW1wdGlvbnM6CisgICAqIDE6IGxpc3Qgc2l6ZSB3aWxsIGJlIDEKKyAgICogMjogbGlzdCBoZWFkIHdpbGwgaG9sZCB0aGUgZGF0YSAidW51c2VkRGF0YV9jYXNlMSIKKyAgICogMzogbGlzdCB0YWlsIHdpbGwgYmUgdGhlIHNhbWUgYXMgbGlzdCBoZWFkCisgICAqLworCisgIGN1cmxFcnJDb2RlID0gQ3VybF9sbGlzdF9pbnNlcnRfbmV4dChsbGlzdCwgbGxpc3QtPmhlYWQsICZ1bnVzZWREYXRhX2Nhc2UxKTsKKyAgaWYoY3VybEVyckNvZGUgPT0gMSkgeworICAgIGZhaWxfdW5sZXNzKEN1cmxfbGxpc3RfY291bnQobGxpc3QpID09IDEsCisgICAgICAgICAgICAgICAgICJMaXN0IHNpemUgc2hvdWxkIGJlIDEgYWZ0ZXIgYWRkaW5nIGEgbmV3IGVsZW1lbnQiKTsKKyAgICAvKnRlc3QgdGhhdCB0aGUgbGlzdCBoZWFkIGRhdGEgaG9sZHMgbXkgdW51c2VkRGF0YSAqLworICAgIGZhaWxfdW5sZXNzKGxsaXN0LT5oZWFkLT5wdHIgPT0gJnVudXNlZERhdGFfY2FzZTEsCisgICAgICAgICAgICAgICAgICJMaXN0IHNpemUgc2hvdWxkIGJlIDEgYWZ0ZXIgYWRkaW5nIGEgbmV3IGVsZW1lbnQiKTsKKyAgICAvKnNhbWUgZ29lcyBmb3IgdGhlIGxpc3QgdGFpbCAqLworICAgIGZhaWxfdW5sZXNzKGxsaXN0LT50YWlsID09IGxsaXN0LT5oZWFkLAorICAgICAgICAgICAgICAgICAiTGlzdCBzaXplIHNob3VsZCBiZSAxIGFmdGVyIGFkZGluZyBhIG5ldyBlbGVtZW50Iik7CisKKyAgICAvKioKKyAgICAgKiB0ZXN0aW5nIEN1cmxfbGxpc3RfaW5zZXJ0X25leHQKKyAgICAgKiBjYXNlIDI6CisgICAgICogbGlzdCBoYXMgMSBlbGVtZW50LCBhZGRpbmcgb25lIGVsZW1lbnQgYWZ0ZXIgdGhlIGhlYWQKKyAgICAgKiBAYXNzdW1wdGlvbnM6CisgICAgICogMTogdGhlIGVsZW1lbnQgbmV4dCB0byBoZWFkIHNob3VsZCBiZSBvdXIgbmV3bHkgY3JlYXRlZCBlbGVtZW50CisgICAgICogMjogdGhlIGxpc3QgdGFpbCBzaG91bGQgYmUgb3VyIG5ld2x5IGNyZWF0ZWQgZWxlbWVudAorICAgICAqLworCisgICAgY3VybEVyckNvZGUgPSBDdXJsX2xsaXN0X2luc2VydF9uZXh0KGxsaXN0LCBsbGlzdC0+aGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVudXNlZERhdGFfY2FzZTMpOworICAgIGlmKGN1cmxFcnJDb2RlID09IDEpIHsKKyAgICAgIGZhaWxfdW5sZXNzKGxsaXN0LT5oZWFkLT5uZXh0LT5wdHIgPT0gJnVudXNlZERhdGFfY2FzZTMsCisgICAgICAgICAgICAgICAgICAidGhlIG5vZGUgbmV4dCB0byBoZWFkIGlzIG5vdCBnZXR0aW5nIHNldCBjb3JyZWN0bHkiKTsKKyAgICAgIGZhaWxfdW5sZXNzKGxsaXN0LT50YWlsLT5wdHIgPT0gJnVudXNlZERhdGFfY2FzZTMsCisgICAgICAgICAgICAgICAgICAidGhlIGxpc3QgdGFpbCBpcyBub3QgZ2V0dGluZyBzZXQgY29ycmVjdGx5Iik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcHJpbnRmKCJza2lwcGluZyBDdXJsX2xsaXN0X2luc2VydF9uZXh0IGFzIGEgbm9uICIKKyAgICAgICAgICAgICAic3VjY2VzcyBlcnJvciBjb2RlIHdhcyByZXR1cm5lZFxuIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogdGVzdGluZyBDdXJsX2xsaXN0X2luc2VydF9uZXh0CisgICAgICogY2FzZSAzOgorICAgICAqIGxpc3QgaGFzID4xIGVsZW1lbnQsIGFkZGluZyBvbmUgZWxlbWVudCBhZnRlciAiTlVMTCIKKyAgICAgKiBAYXNzdW1wdGlvbnM6CisgICAgICogMTogdGhlIGVsZW1lbnQgbmV4dCB0byBoZWFkIHNob3VsZCBiZSBvdXIgbmV3bHkgY3JlYXRlZCBlbGVtZW50CisgICAgICogMjogdGhlIGxpc3QgdGFpbCBzaG91bGQgZGlmZmVyZW50IGZyb20gbmV3bHkgY3JlYXRlZCBlbGVtZW50CisgICAgICovCisKKyAgICBjdXJsRXJyQ29kZSA9IEN1cmxfbGxpc3RfaW5zZXJ0X25leHQobGxpc3QsIGxsaXN0LT5oZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdW51c2VkRGF0YV9jYXNlMik7CisgICAgaWYoY3VybEVyckNvZGUgPT0gMSkgeworICAgICAgZmFpbF91bmxlc3MobGxpc3QtPmhlYWQtPm5leHQtPnB0ciA9PSAmdW51c2VkRGF0YV9jYXNlMiwKKyAgICAgICAgICAgICAgICAgICJ0aGUgbm9kZSBuZXh0IHRvIGhlYWQgaXMgbm90IGdldHRpbmcgc2V0IGNvcnJlY3RseSIpOworICAgICAgLyogYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSwgY2hlY2sgdGhhdCB0aGUgdGFpbCBpc24ndCBjb3JydXB0ZWQgKi8KKyAgICAgIGZhaWxfdW5sZXNzKGxsaXN0LT50YWlsLT5wdHIgIT0gJnVudXNlZERhdGFfY2FzZTIsCisgICAgICAgICAgICAgICAgICAidGhlIGxpc3QgdGFpbCBpcyBub3QgZ2V0dGluZyBzZXQgY29ycmVjdGx5Iik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcHJpbnRmKCJza2lwcGluZyBDdXJsX2xsaXN0X2luc2VydF9uZXh0IGFzIGEgbm9uICIKKyAgICAgICAgICAgICAic3VjY2VzcyBlcnJvciBjb2RlIHdhcyByZXR1cm5lZFxuIik7CisgICAgfQorCisgIH0KKyAgZWxzZSB7CisgICAgcHJpbnRmKCJza2lwcGluZyBDdXJsX2xsaXN0X2luc2VydF9uZXh0IGFzIGEgbm9uICIKKyAgICAgICAgICAgInN1Y2Nlc3MgZXJyb3IgY29kZSB3YXMgcmV0dXJuZWRcbiIpOworICB9CisKKyAgLyogdW5pdCB0ZXN0cyBmb3IgQ3VybF9sbGlzdF9yZW1vdmUgKi8KKworICAvKioKKyAgICogY2FzZSAxOgorICAgKiBsaXN0IGhhcyA+MSBlbGVtZW50LCByZW1vdmluZyBoZWFkCisgICAqIEBhc3N1bXB0aW9uczoKKyAgICogMTogbGlzdCBzaXplIHdpbGwgYmUgZGVjcmVtZW50ZWQgYnkgb25lCisgICAqIDI6IGhlYWQgd2lsbCBiZSB0aGUgaGVhZC0+bmV4dAorICAgKiAzOiAibmV3IiBoZWFkJ3MgcHJldmlvdXMgd2lsbCBiZSBOVUxMCisgICAqLworCisgIGhlYWQ9bGxpc3QtPmhlYWQ7CisgIGFib3J0X3VubGVzcyhoZWFkLCAibGxpc3QtPmhlYWQgaXMgTlVMTCIpOworICBlbGVtZW50X25leHQgPSBoZWFkLT5uZXh0OworICBsbGlzdF9zaXplID0gQ3VybF9sbGlzdF9jb3VudChsbGlzdCk7CisKKyAgQ3VybF9sbGlzdF9yZW1vdmUobGxpc3QsIGxsaXN0LT5oZWFkLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyhDdXJsX2xsaXN0X2NvdW50KGxsaXN0KSA9PSAgKGxsaXN0X3NpemUtMSksCisgICAgICAgICAgICAgICAibGxpc3Qgc2l6ZSBub3QgZGVjcmVtZW50ZWQgYXMgZXhwZWN0ZWQiKTsKKyAgZmFpbF91bmxlc3MobGxpc3QtPmhlYWQgPT0gZWxlbWVudF9uZXh0LAorICAgICAgICAgICAgICAgImxsaXN0IG5ldyBoZWFkIG5vdCBtb2RpZmllZCBwcm9wZXJseSIpOworICBhYm9ydF91bmxlc3MobGxpc3QtPmhlYWQsICJsbGlzdC0+aGVhZCBpcyBOVUxMIik7CisgIGZhaWxfdW5sZXNzKGxsaXN0LT5oZWFkLT5wcmV2ID09IE5VTEwsCisgICAgICAgICAgICAgICJuZXcgaGVhZCBwcmV2aW91cyBub3Qgc2V0IHRvIG51bGwiKTsKKworICAvKioKKyAgICogY2FzZSAyOgorICAgKiByZW1vdmluZyBub24gaGVhZCBlbGVtZW50LCB3aXRoIGxpc3QgaGF2aW5nID49MiBlbGVtZW50cworICAgKiBAc2V0dXA6CisgICAqIDE6IGluc2VydCBhbm90aGVyIGVsZW1lbnQgdG8gdGhlIGxpc3QgdG8gbWFrZSBlbGVtZW50ID49MgorICAgKiBAYXNzdW1wdGlvbnM6CisgICAqIDE6IGxpc3Qgc2l6ZSB3aWxsIGJlIGRlY3JlbWVudGVkIGJ5IG9uZSA7IHRlc3RlZAorICAgKiAyOiBlbGVtZW50LT5wcmV2aW91cy0+bmV4dCB3aWxsIGJlIGVsZW1lbnQtPm5leHQKKyAgICogMzogZWxlbWVudC0+bmV4dC0+cHJldmlvdXMgd2lsbCBiZSBlbGVtZW50LT5wcmV2aW91cworICAgKi8KKyAgQ3VybF9sbGlzdF9pbnNlcnRfbmV4dChsbGlzdCwgbGxpc3QtPmhlYWQsICZ1bnVzZWREYXRhX2Nhc2UzKTsKKyAgbGxpc3Rfc2l6ZSA9IEN1cmxfbGxpc3RfY291bnQobGxpc3QpOworICB0b19yZW1vdmUgPSBsbGlzdC0+aGVhZC0+bmV4dDsKKyAgYWJvcnRfdW5sZXNzKHRvX3JlbW92ZSwgInRvX3JlbW92ZSBpcyBOVUxMIik7CisgIGVsZW1lbnRfbmV4dCA9IHRvX3JlbW92ZS0+bmV4dDsKKyAgZWxlbWVudF9wcmV2ID0gdG9fcmVtb3ZlLT5wcmV2OworICBDdXJsX2xsaXN0X3JlbW92ZShsbGlzdCwgdG9fcmVtb3ZlLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MoZWxlbWVudF9wcmV2LT5uZXh0ID09IGVsZW1lbnRfbmV4dCwKKyAgICAgICAgICAgICAgImVsZW1lbnQgcHJldmlvdXMtPm5leHQgaXMgbm90IGJlaW5nIGFkanVzdGVkIik7CisgIGFib3J0X3VubGVzcyhlbGVtZW50X25leHQsICJlbGVtZW50X25leHQgaXMgTlVMTCIpOworICBmYWlsX3VubGVzcyhlbGVtZW50X25leHQtPnByZXYgPT0gZWxlbWVudF9wcmV2LAorICAgICAgICAgICAgICAiZWxlbWVudCBuZXh0LT5wcmV2aW91cyBpcyBub3QgYmVpbmcgYWRqdXN0ZWQiKTsKKworICAvKioKKyAgICogY2FzZSAzOgorICAgKiByZW1vdmluZyB0aGUgdGFpbCB3aXRoIGxpc3QgaGF2aW5nID49MSBlbGVtZW50CisgICAqIEBhc3N1bXB0aW9ucworICAgKiAxOiBsaXN0IHNpemUgd2lsbCBiZSBkZWNyZW1lbnRlZCBieSBvbmUgO3Rlc3RlZAorICAgKiAyOiBlbGVtZW50LT5wcmV2aW91cy0+bmV4dCB3aWxsIGJlIGVsZW1lbnQtPm5leHQgO3Rlc3RlZAorICAgKiAzOiBlbGVtZW50LT5uZXh0LT5wcmV2aW91cyB3aWxsIGJlIGVsZW1lbnQtPnByZXZpb3VzIDt0ZXN0ZWQKKyAgICogNDogbGlzdC0+dGFpbCB3aWxsIGJlIHRhaWwtPnByZXZpb3VzCisgICAqLworCisgIHRvX3JlbW92ZSA9IGxsaXN0LT50YWlsOworICBlbGVtZW50X3ByZXYgPSB0b19yZW1vdmUtPnByZXY7CisgIEN1cmxfbGxpc3RfcmVtb3ZlKGxsaXN0LCB0b19yZW1vdmUsIE5VTEwpOworICBmYWlsX3VubGVzcyhsbGlzdC0+dGFpbCA9PSBlbGVtZW50X3ByZXYsCisgICAgICAgICAgICAgICJsbGlzdCB0YWlsIGlzIG5vdCBiZWluZyBhZGp1c3RlZCB3aGVuIHJlbW92aW5nIHRhaWwiKTsKKworICAvKioKKyAgICogY2FzZSA0OgorICAgKiByZW1vdmluZyBoZWFkIHdpdGggbGlzdCBoYXZpbmcgMSBlbGVtZW50CisgICAqIEBhc3N1bXB0aW9uczoKKyAgICogMTogbGlzdCBzaXplIHdpbGwgYmUgZGVjcmVtZW50ZWQgYnkgb25lIDt0ZXN0ZWQKKyAgICogMjogbGlzdCBoZWFkIHdpbGwgYmUgbnVsbAorICAgKiAzOiBsaXN0IHRhaWwgd2lsbCBiZSBudWxsCisgICAqLworCisgIHRvX3JlbW92ZSA9IGxsaXN0LT5oZWFkOworICBDdXJsX2xsaXN0X3JlbW92ZShsbGlzdCwgdG9fcmVtb3ZlLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MobGxpc3QtPmhlYWQgPT0gTlVMTCwKKyAgICAgICAgICAgICAgImxsaXN0IGhlYWQgaXMgbm90IE5VTEwgd2hpbGUgdGhlIGxsaXN0IGlzIGVtcHR5Iik7CisgIGZhaWxfdW5sZXNzKGxsaXN0LT50YWlsID09IE5VTEwsCisgICAgICAgICAgICAgICJsbGlzdCB0YWlsIGlzIG5vdCBOVUxMIHdoaWxlIHRoZSBsbGlzdCBpcyBlbXB0eSIpOworCisgIC8qIEB0ZXN0aW5nIEN1cmxfbGxpc3RfbW92ZShzdHJ1Y3QgY3VybF9sbGlzdCAqLAorICAgKiBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICosIHN0cnVjdCBjdXJsX2xsaXN0ICosCisgICAqIHN0cnVjdCBjdXJsX2xsaXN0X2VsZW1lbnQgKik7CisgICovCisKKyAgLyoqCisgICAqIEBjYXNlIDE6CisgICAqIG1vdmluZyBoZWFkIGZyb20gYW4gbGxpc3QgY29udGFpbmcgb25lIGVsZW1lbnQgdG8gYW4gZW1wdHkgbGxpc3QKKyAgICogQGFzc3VtcHRpb25zOgorICAgKiAxOiBsbGlzdCBzaXplIHdpbGwgYmUgMAorICAgKiAyOiBsbGlzdF9kZXN0aW5hdGlvbiBzaXplIHdpbGwgYmUgMQorICAgKiAzOiBsbGlzdCBoZWFkIHdpbGwgYmUgTlVMTAorICAgKiA0OiBsbGlzdF9kZXN0aW5hdGlvbiBoZWFkID09IGxsaXN0X2Rlc3RpbmF0aW9uIHRhaWwgIT0gTlVMTAorICAgKi8KKworICAvKgorICAqIEBzZXR1cAorICAqIGFkZCBvbmUgZWxlbWVudCB0byB0aGUgbGlzdAorICAqLworCisgIGN1cmxFcnJDb2RlID0gQ3VybF9sbGlzdF9pbnNlcnRfbmV4dChsbGlzdCwgbGxpc3QtPmhlYWQsICZ1bnVzZWREYXRhX2Nhc2UxKTsKKyAgLyogbmVjZXNzYXJ5IGFzc2VydGlvbnMgKi8KKworICBhYm9ydF91bmxlc3MoY3VybEVyckNvZGUgPT0gMSwKKyAgIkN1cmxfbGxpc3RfaW5zZXJ0X25leHQgcmV0dXJuZWQgYW4gZXJyb3IsIENhbid0IG1vdmUgb24gd2l0aCB0ZXN0Iik7CisgIGFib3J0X3VubGVzcyhDdXJsX2xsaXN0X2NvdW50KGxsaXN0KSA9PSAxLAorICAiTnVtYmVyIG9mIGxpc3QgZWxlbWVudHMgaXMgbm90IGFzIGV4cGVjdGVkLCBBYm9ydGluZyIpOworICBhYm9ydF91bmxlc3MoQ3VybF9sbGlzdF9jb3VudChsbGlzdF9kZXN0aW5hdGlvbikgPT0gMCwKKyAgIk51bWJlciBvZiBsaXN0IGVsZW1lbnRzIGlzIG5vdCBhcyBleHBlY3RlZCwgQWJvcnRpbmciKTsKKworICAvKmFjdHVhbCB0ZXN0aW5nIGNvZGUqLworICBjdXJsRXJyQ29kZSA9IEN1cmxfbGxpc3RfbW92ZShsbGlzdCwgbGxpc3QtPmhlYWQsIGxsaXN0X2Rlc3RpbmF0aW9uLCBOVUxMKTsKKyAgYWJvcnRfdW5sZXNzKGN1cmxFcnJDb2RlID09IDEsCisgICJDdXJsX2xsaXN0X21vdmUgcmV0dXJuZWQgYW4gZXJyb3IsIENhbid0IG1vdmUgb24gd2l0aCB0ZXN0Iik7CisgIGZhaWxfdW5sZXNzKEN1cmxfbGxpc3RfY291bnQobGxpc3QpID09IDAsCisgICAgICAibW92aW5nIGVsZW1lbnQgZnJvbSBsbGlzdCBkaWRuJ3QgZGVjcmVtZW50IHRoZSBzaXplIik7CisKKyAgZmFpbF91bmxlc3MoQ3VybF9sbGlzdF9jb3VudChsbGlzdF9kZXN0aW5hdGlvbikgPT0gMSwKKyAgICAgICAgIm1vdmluZyBlbGVtZW50IHRvIGxsaXN0X2Rlc3RpbmF0aW9uIGRpZG4ndCBpbmNyZW1lbnQgdGhlIHNpemUiKTsKKworICBmYWlsX3VubGVzcyhsbGlzdC0+aGVhZCA9PSBOVUxMLAorICAgICAgImxsaXN0IGhlYWQgbm90IHNldCB0byBudWxsIGFmdGVyIG1vdmluZyB0aGUgaGVhZCIpOworCisgIGZhaWxfdW5sZXNzKGxsaXN0X2Rlc3RpbmF0aW9uLT5oZWFkICE9IE5VTEwsCisgICAgICAgICJsbGlzdF9kZXN0aW5hdGlvbiBoZWFkIHNldCB0byBudWxsIGFmdGVyIG1vdmluZyBhbiBlbGVtZW50Iik7CisKKyAgZmFpbF91bmxlc3MobGxpc3RfZGVzdGluYXRpb24tPnRhaWwgIT0gTlVMTCwKKyAgICAgICAgICAibGxpc3RfZGVzdGluYXRpb24gdGFpbCBzZXQgdG8gbnVsbCBhZnRlciBtb3ZpbmcgYW4gZWxlbWVudCIpOworCisgIGZhaWxfdW5sZXNzKGxsaXN0X2Rlc3RpbmF0aW9uLT50YWlsID09IGxsaXN0X2Rlc3RpbmF0aW9uLT50YWlsLAorICAgICAgICAgICAgImxsaXN0X2Rlc3RpbmF0aW9uIHRhaWwgZG9lc24ndCBlcXVhbCBsbGlzdF9kZXN0aW5hdGlvbiBoZWFkIik7CisKKworCitVTklUVEVTVF9TVE9QCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy91bml0L3VuaXQxMzAxLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy91bml0L3VuaXQxMzAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdkZjQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvdW5pdDEzMDEuYwpAQCAtMCwwICsxLDU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjdXJsY2hlY2suaCIKKworI2luY2x1ZGUgInN0cmVxdWFsLmgiCisKK3N0YXRpYyBDVVJMY29kZSB1bml0X3NldHVwKCB2b2lkICkge3JldHVybiBDVVJMRV9PSzt9CitzdGF0aWMgdm9pZCB1bml0X3N0b3AoIHZvaWQgKSB7fQorCitVTklUVEVTVF9TVEFSVAorCitpbnQgcmM7CisKK3JjID0gY3VybF9zdHJlcXVhbCgiaWlpIiwgIklJSSIpOworZmFpbF91bmxlc3MoIHJjICE9IDAgLCAicmV0dXJuIGNvZGUgc2hvdWxkIGJlIHplcm8iICk7CisKK3JjID0gY3VybF9zdHJlcXVhbCgiaWlpYSIsICJJSUkiKTsKK2ZhaWxfdW5sZXNzKCByYyA9PSAwICwgInJldHVybiBjb2RlIHNob3VsZCBiZSB6ZXJvIiApOworCityYyA9IGN1cmxfc3RyZXF1YWwoImlpaSIsICJJSUlhIik7CitmYWlsX3VubGVzcyggcmMgPT0gMCAsICJyZXR1cm4gY29kZSBzaG91bGQgYmUgemVybyIgKTsKKworcmMgPSBjdXJsX3N0cmVxdWFsKCJpaWlBIiwgIklJSWEiKTsKK2ZhaWxfdW5sZXNzKCByYyAhPSAwICwgInJldHVybiBjb2RlIHNob3VsZCBiZSBub24temVybyIgKTsKKworcmMgPSBjdXJsX3N0cm5lcXVhbCgiaWlpIiwgIklJSSIsIDMpOworZmFpbF91bmxlc3MoIHJjICE9IDAgLCAicmV0dXJuIGNvZGUgc2hvdWxkIGJlIG5vbi16ZXJvIiApOworCityYyA9IGN1cmxfc3RybmVxdWFsKCJpaWlBQkMiLCAiSUlJY2JhIiwgMyk7CitmYWlsX3VubGVzcyggcmMgIT0gMCAsICJyZXR1cm4gY29kZSBzaG91bGQgYmUgbm9uLXplcm8iICk7CisKK3JjID0gY3VybF9zdHJuZXF1YWwoImlpIiwgIklJIiwgMyk7CitmYWlsX3VubGVzcyggcmMgIT0gMCAsICJyZXR1cm4gY29kZSBzaG91bGQgYmUgbm9uLXplcm8iICk7CisKK1VOSVRURVNUX1NUT1AKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvdW5pdDEzMDIuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvdW5pdDEzMDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzUwYzg4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvdW5pdC91bml0MTMwMi5jCkBAIC0wLDAgKzEsMTI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjdXJsY2hlY2suaCIKKworI2luY2x1ZGUgInVybGRhdGEuaCIKKyNpbmNsdWRlICJ1cmwuaCIgLyogZm9yIEN1cmxfc2FmZWZyZWUgKi8KKyNpbmNsdWRlICJjdXJsX2Jhc2U2NC5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiIC8qIExBU1QgaW5jbHVkZSBmaWxlICovCisKK3N0YXRpYyBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YTsKKworc3RhdGljIENVUkxjb2RlIHVuaXRfc2V0dXAoIHZvaWQgKQoreworICBkYXRhID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYgKCFkYXRhKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyB2b2lkIHVuaXRfc3RvcCggdm9pZCApCit7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGRhdGEpOworfQorCitVTklUVEVTVF9TVEFSVAorCitjaGFyICpvdXRwdXQ7Cit1bnNpZ25lZCBjaGFyICpkZWNvZGVkOworc2l6ZV90IHNpemUgPSAwOwordW5zaWduZWQgY2hhciBhbnljaGFyID0gJ3gnOworQ1VSTGNvZGUgcmM7CisKK3JjID0gQ3VybF9iYXNlNjRfZW5jb2RlKGRhdGEsICJpIiwgMSwgJm91dHB1dCwgJnNpemUpOworZmFpbF91bmxlc3MocmMgPT0gQ1VSTEVfT0ssICJyZXR1cm4gY29kZSBzaG91bGQgYmUgQ1VSTEVfT0siKTsKK2ZhaWxfdW5sZXNzKHNpemUgPT0gNCwgInNpemUgc2hvdWxkIGJlIDQiKTsKK3ZlcmlmeV9tZW1vcnkoIG91dHB1dCwgImFRPT0iLCA0KTsKK0N1cmxfc2FmZWZyZWUob3V0cHV0KTsKKworcmMgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoZGF0YSwgImlpIiwgMiwgJm91dHB1dCwgJnNpemUpOworZmFpbF91bmxlc3MocmMgPT0gQ1VSTEVfT0ssICJyZXR1cm4gY29kZSBzaG91bGQgYmUgQ1VSTEVfT0siKTsKK2ZhaWxfdW5sZXNzKHNpemUgPT0gNCwgInNpemUgc2hvdWxkIGJlIDQiKTsKK3ZlcmlmeV9tZW1vcnkoIG91dHB1dCwgImFXaz0iLCA0KTsKK0N1cmxfc2FmZWZyZWUob3V0cHV0KTsKKworcmMgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoZGF0YSwgImlpaSIsIDMsICZvdXRwdXQsICZzaXplKTsKK2ZhaWxfdW5sZXNzKHJjID09IENVUkxFX09LLCAicmV0dXJuIGNvZGUgc2hvdWxkIGJlIENVUkxFX09LIik7CitmYWlsX3VubGVzcyhzaXplID09IDQsICJzaXplIHNob3VsZCBiZSA0Iik7Cit2ZXJpZnlfbWVtb3J5KCBvdXRwdXQsICJhV2xwIiwgNCk7CitDdXJsX3NhZmVmcmVlKG91dHB1dCk7CisKK3JjID0gQ3VybF9iYXNlNjRfZW5jb2RlKGRhdGEsICJpaWlpIiwgNCwgJm91dHB1dCwgJnNpemUpOworZmFpbF91bmxlc3MocmMgPT0gQ1VSTEVfT0ssICJyZXR1cm4gY29kZSBzaG91bGQgYmUgQ1VSTEVfT0siKTsKK2ZhaWxfdW5sZXNzKHNpemUgPT0gOCwgInNpemUgc2hvdWxkIGJlIDgiKTsKK3ZlcmlmeV9tZW1vcnkoIG91dHB1dCwgImFXbHBhUT09IiwgOCk7CitDdXJsX3NhZmVmcmVlKG91dHB1dCk7CisKKy8qIDAgbGVuZ3RoIG1ha2VzIGl0IGRvIHN0cmxlbigpICovCityYyA9IEN1cmxfYmFzZTY0X2VuY29kZShkYXRhLCAiaWlpaSIsIDAsICZvdXRwdXQsICZzaXplKTsKK2ZhaWxfdW5sZXNzKHJjID09IENVUkxFX09LLCAicmV0dXJuIGNvZGUgc2hvdWxkIGJlIENVUkxFX09LIik7CitmYWlsX3VubGVzcyhzaXplID09IDgsICJzaXplIHNob3VsZCBiZSA4Iik7Cit2ZXJpZnlfbWVtb3J5KCBvdXRwdXQsICJhV2xwYVE9PSIsIDgpOworQ3VybF9zYWZlZnJlZShvdXRwdXQpOworCityYyA9IEN1cmxfYmFzZTY0X2RlY29kZSgiYVdscGFRPT0iLCAmZGVjb2RlZCwgJnNpemUpOworZmFpbF91bmxlc3MocmMgPT0gQ1VSTEVfT0ssICJyZXR1cm4gY29kZSBzaG91bGQgYmUgQ1VSTEVfT0siKTsKK2ZhaWxfdW5sZXNzKHNpemUgPT0gNCwgInNpemUgc2hvdWxkIGJlIDQiKTsKK3ZlcmlmeV9tZW1vcnkoZGVjb2RlZCwgImlpaWkiLCA0KTsKK0N1cmxfc2FmZWZyZWUoZGVjb2RlZCk7CisKK3JjID0gQ3VybF9iYXNlNjRfZGVjb2RlKCJhV2xwIiwgJmRlY29kZWQsICZzaXplKTsKK2ZhaWxfdW5sZXNzKHJjID09IENVUkxFX09LLCAicmV0dXJuIGNvZGUgc2hvdWxkIGJlIENVUkxFX09LIik7CitmYWlsX3VubGVzcyhzaXplID09IDMsICJzaXplIHNob3VsZCBiZSAzIik7Cit2ZXJpZnlfbWVtb3J5KGRlY29kZWQsICJpaWkiLCAzKTsKK0N1cmxfc2FmZWZyZWUoZGVjb2RlZCk7CisKK3JjID0gQ3VybF9iYXNlNjRfZGVjb2RlKCJhV2s9IiwgJmRlY29kZWQsICZzaXplKTsKK2ZhaWxfdW5sZXNzKHJjID09IENVUkxFX09LLCAicmV0dXJuIGNvZGUgc2hvdWxkIGJlIENVUkxFX09LIik7CitmYWlsX3VubGVzcyhzaXplID09IDIsICJzaXplIHNob3VsZCBiZSAyIik7Cit2ZXJpZnlfbWVtb3J5KGRlY29kZWQsICJpaSIsIDIpOworQ3VybF9zYWZlZnJlZShkZWNvZGVkKTsKKworcmMgPSBDdXJsX2Jhc2U2NF9kZWNvZGUoImFRPT0iLCAmZGVjb2RlZCwgJnNpemUpOworZmFpbF91bmxlc3MocmMgPT0gQ1VSTEVfT0ssICJyZXR1cm4gY29kZSBzaG91bGQgYmUgQ1VSTEVfT0siKTsKK2ZhaWxfdW5sZXNzKHNpemUgPT0gMSwgInNpemUgc2hvdWxkIGJlIDEiKTsKK3ZlcmlmeV9tZW1vcnkoZGVjb2RlZCwgImkiLCAyKTsKK0N1cmxfc2FmZWZyZWUoZGVjb2RlZCk7CisKKy8qIHRoaXMgaXMgYW4gaWxsZWdhbCBpbnB1dCAqLworc2l6ZSA9IDE7IC8qIG5vdCB6ZXJvICovCitkZWNvZGVkID0gJmFueWNoYXI7IC8qIG5vdCBOVUxMICovCityYyA9IEN1cmxfYmFzZTY0X2RlY29kZSgiYVEiLCAmZGVjb2RlZCwgJnNpemUpOworLyogcmV0dXJuIGNvZGUgaW5kaWZlcmVudCwgYnV0IG91dHB1dCBzaGFsbCBiZSBhcyBmb2xsb3dzICovCitmYWlsX3VubGVzcyhzaXplID09IDAsICJzaXplIHNob3VsZCBiZSAwIik7CitmYWlsX2lmKGRlY29kZWQsICJyZXR1cm5lZCBwb2ludGVyIHNob3VsZCBiZSBOVUxMIik7CisKKy8qIHRoaXMgaXMgZ2FyYmFnZSBpbnB1dCB0aGF0IGxpYmN1cmwgZGVjb2RlcyBhcyBmYXIgYXMgcG9zc2libGUgKi8KK3NpemUgPSAwOworZGVjb2RlZCA9IE5VTEw7CityYyA9IEN1cmxfYmFzZTY0X2RlY29kZSgiYVx4MWY9PSIsICZkZWNvZGVkLCAmc2l6ZSk7CitmYWlsX3VubGVzcyhyYyA9PSBDVVJMRV9PSywgInJldHVybiBjb2RlIHNob3VsZCBiZSBDVVJMRV9PSyIpOworZmFpbF91bmxlc3Moc2l6ZSA9PSAxLCAic2l6ZSBzaG91bGQgYmUgMSIpOworZmFpbF9pZighZGVjb2RlZCwgInJldHVybmVkIHBvaW50ZXIgc2hvdWxkIG5vdCBiZSBOVUxMIik7CitDdXJsX3NhZmVmcmVlKGRlY29kZWQpOworCitVTklUVEVTVF9TVE9QCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy91bml0L3VuaXQxMzAzLmMgYi9jdXJsLTcuMjUuMC90ZXN0cy91bml0L3VuaXQxMzAzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU0ZjIzMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvdW5pdDEzMDMuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiY3VybGNoZWNrLmgiCisKKyNpbmNsdWRlICJ1cmxkYXRhLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgIm1lbWRlYnVnLmgiIC8qIExBU1QgaW5jbHVkZSBmaWxlICovCisKK3N0YXRpYyBzdHJ1Y3QgU2Vzc2lvbkhhbmRsZSAqZGF0YTsKKworc3RhdGljIENVUkxjb2RlIHVuaXRfc2V0dXAoIHZvaWQgKQoreworICBkYXRhID0gY3VybF9lYXN5X2luaXQoKTsKKyAgaWYgKCFkYXRhKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyB2b2lkIHVuaXRfc3RvcCggdm9pZCApCit7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGRhdGEpOworfQorCisvKiBCQVNFIGlzIGp1c3QgYSBkZWZpbmUgdG8gbWFrZSB1cyBmb29sIGFyb3VuZCB3aXRoIGRlY2VudGx5IGxhcmdlIG51bWJlciBzbworICAgdGhhdCB3ZSBhcmVuJ3QgemVyby1iYXNlZCAqLworI2RlZmluZSBCQVNFIDEwMDAwMDAKKworLyogbWFjcm8gdG8gc2V0IHRoZSBwcmV0ZW5kZWQgY3VycmVudCB0aW1lICovCisjZGVmaW5lIE5PVyh4LHkpIG5vdy50dl9zZWMgPSB4OyBub3cudHZfdXNlYyA9IHkKKy8qIG1hY3JvIHRvIHNldCB0aGUgbWlsbGlzZWNvbmQgYmFzZWQgdGltZW91dHMgdG8gdXNlICovCisjZGVmaW5lIFRJTUVPVVRTKHgseSkgZGF0YS0+c2V0LnRpbWVvdXQgPSB4OyBkYXRhLT5zZXQuY29ubmVjdHRpbWVvdXQgPSB5CisKKy8qCisgKiBUbyB0ZXN0OgorICoKKyAqIDAwLzEwLzAxLzExIHRpbWVvdXRzIHNldAorICogMC8xICAgICAgICAgZHVyaW5nIGNvbm5lY3QKKyAqIFQgICAgICAgICAgIHZhcmlvdXMgdmFsdWVzIG9uIHRoZSB0aW1lb3V0cworICogTiAgICAgICAgICAgdmFyaW91cyB2YWx1ZXMgb2Ygbm93CisgKi8KKworc3RydWN0IHRpbWV0ZXN0IHsKKyAgaW50IG5vd19zOworICBpbnQgbm93X3VzOworICBpbnQgdGltZW91dF9tczsKKyAgaW50IGNvbm5lY3R0aW1lb3V0X21zOworICBib29sIGNvbm5lY3Rpbmc7CisgIGxvbmcgcmVzdWx0OworICBjb25zdCBjaGFyICpjb21tZW50OworfTsKKworVU5JVFRFU1RfU1RBUlQKKworc3RydWN0IHRpbWV2YWwgbm93OworbG9uZyB0aW1lb3V0OwordW5zaWduZWQgaW50IGk7CisKK2NvbnN0IHN0cnVjdCB0aW1ldGVzdCBydW5bXSA9IHsKKyAgLyogYm90aCB0aW1lb3V0cyBzZXQsIG5vdCBjb25uZWN0aW5nICovCisgIHtCQVNFICsgNCwgMCwgICAgICAxMDAwMCwgODAwMCwgRkFMU0UsIDYwMDAsICI2IHNlY29uZHMgc2hvdWxkIGJlIGxlZnQifSwKKyAge0JBU0UgKyA0LCA5OTAwMDAsIDEwMDAwLCA4MDAwLCBGQUxTRSwgNTAxMCwgIjUwMTAgbXMgc2hvdWxkIGJlIGxlZnQifSwKKyAge0JBU0UgKyAxMCwgMCwgICAgIDEwMDAwLCA4MDAwLCBGQUxTRSwgLTEsICAgInRpbWVvdXQgaXMgLTEsIGV4cGlyZWQifSwKKyAge0JBU0UgKyAxMiwgMCwgICAgIDEwMDAwLCA4MDAwLCBGQUxTRSwgLTIwMDAsICItMjAwMCwgb3ZlcmR1ZSAyIHNlY29uZHMifSwKKworICAvKiBib3RoIHRpbWVvdXRzIHNldCwgY29ubmVjdGluZyAqLworICB7QkFTRSArIDQsIDAsICAgICAgMTAwMDAsIDgwMDAsIFRSVUUsIDQwMDAsICI0IHNlY29uZHMgc2hvdWxkIGJlIGxlZnQifSwKKyAge0JBU0UgKyA0LCA5OTAwMDAsIDEwMDAwLCA4MDAwLCBUUlVFLCAzMDEwLCAiMzAxMCBtcyBzaG91bGQgYmUgbGVmdCJ9LAorICB7QkFTRSArIDgsIDAsICAgICAgMTAwMDAsIDgwMDAsIFRSVUUsIC0xLCAgICJ0aW1lb3V0IGlzIC0xLCBleHBpcmVkIn0sCisgIHtCQVNFICsgMTAsIDAsICAgICAxMDAwMCwgODAwMCwgVFJVRSwgLTIwMDAsICItMjAwMCwgb3ZlcmR1ZSAyIHNlY29uZHMifSwKKworICAvKiBubyBjb25uZWN0IHRpbWVvdXQgc2V0LCBub3QgY29ubmVjdGluZyAqLworICB7QkFTRSArIDQsIDAsICAgICAgMTAwMDAsIDAsIEZBTFNFLCA2MDAwLCAiNiBzZWNvbmRzIHNob3VsZCBiZSBsZWZ0In0sCisgIHtCQVNFICsgNCwgOTkwMDAwLCAxMDAwMCwgMCwgRkFMU0UsIDUwMTAsICI1MDEwIG1zIHNob3VsZCBiZSBsZWZ0In0sCisgIHtCQVNFICsgMTAsIDAsICAgICAxMDAwMCwgMCwgRkFMU0UsIC0xLCAgICJ0aW1lb3V0IGlzIC0xLCBleHBpcmVkIn0sCisgIHtCQVNFICsgMTIsIDAsICAgICAxMDAwMCwgMCwgRkFMU0UsIC0yMDAwLCAiLTIwMDAsIG92ZXJkdWUgMiBzZWNvbmRzIn0sCisKKyAgLyogbm8gY29ubmVjdCB0aW1lb3V0IHNldCwgY29ubmVjdGluZyAqLworICB7QkFTRSArIDQsIDAsICAgICAgMTAwMDAsIDAsIEZBTFNFLCA2MDAwLCAiNiBzZWNvbmRzIHNob3VsZCBiZSBsZWZ0In0sCisgIHtCQVNFICsgNCwgOTkwMDAwLCAxMDAwMCwgMCwgRkFMU0UsIDUwMTAsICI1MDEwIG1zIHNob3VsZCBiZSBsZWZ0In0sCisgIHtCQVNFICsgMTAsIDAsICAgICAxMDAwMCwgMCwgRkFMU0UsIC0xLCAgICJ0aW1lb3V0IGlzIC0xLCBleHBpcmVkIn0sCisgIHtCQVNFICsgMTIsIDAsICAgICAxMDAwMCwgMCwgRkFMU0UsIC0yMDAwLCAiLTIwMDAsIG92ZXJkdWUgMiBzZWNvbmRzIn0sCisKKyAgLyogb25seSBjb25uZWN0IHRpbWVvdXQgc2V0LCBub3QgY29ubmVjdGluZyAqLworICB7QkFTRSArIDQsIDAsICAgICAgMCwgMTAwMDAsIEZBTFNFLCAwLCAibm8gdGltZW91dCBhY3RpdmUifSwKKyAge0JBU0UgKyA0LCA5OTAwMDAsIDAsIDEwMDAwLCBGQUxTRSwgMCwgIm5vIHRpbWVvdXQgYWN0aXZlIn0sCisgIHtCQVNFICsgMTAsIDAsICAgICAwLCAxMDAwMCwgRkFMU0UsIDAsICJubyB0aW1lb3V0IGFjdGl2ZSJ9LAorICB7QkFTRSArIDEyLCAwLCAgICAgMCwgMTAwMDAsIEZBTFNFLCAwLCAibm8gdGltZW91dCBhY3RpdmUifSwKKworICAvKiBvbmx5IGNvbm5lY3QgdGltZW91dCBzZXQsIGNvbm5lY3RpbmcgKi8KKyAge0JBU0UgKyA0LCAwLCAgICAgIDAsIDEwMDAwLCBUUlVFLCA2MDAwLCAiNiBzZWNvbmRzIHNob3VsZCBiZSBsZWZ0In0sCisgIHtCQVNFICsgNCwgOTkwMDAwLCAwLCAxMDAwMCwgVFJVRSwgNTAxMCwgIjUwMTAgbXMgc2hvdWxkIGJlIGxlZnQifSwKKyAge0JBU0UgKyAxMCwgMCwgICAgIDAsIDEwMDAwLCBUUlVFLCAtMSwgICAidGltZW91dCBpcyAtMSwgZXhwaXJlZCJ9LAorICB7QkFTRSArIDEyLCAwLCAgICAgMCwgMTAwMDAsIFRSVUUsIC0yMDAwLCAiLTIwMDAsIG92ZXJkdWUgMiBzZWNvbmRzIn0sCisKKyAgLyogbm8gdGltZW91dCBzZXQsIG5vdCBjb25uZWN0aW5nICovCisgIHtCQVNFICsgNCwgMCwgICAgICAwLCAwLCBGQUxTRSwgMCwgIm5vIHRpbWVvdXQgYWN0aXZlIn0sCisgIHtCQVNFICsgNCwgOTkwMDAwLCAwLCAwLCBGQUxTRSwgMCwgIm5vIHRpbWVvdXQgYWN0aXZlIn0sCisgIHtCQVNFICsgMTAsIDAsICAgICAwLCAwLCBGQUxTRSwgMCwgIm5vIHRpbWVvdXQgYWN0aXZlIn0sCisgIHtCQVNFICsgMTIsIDAsICAgICAwLCAwLCBGQUxTRSwgMCwgIm5vIHRpbWVvdXQgYWN0aXZlIn0sCisKKyAgLyogbm8gdGltZW91dCBzZXQsIGNvbm5lY3RpbmcgKi8KKyAge0JBU0UgKyA0LCAwLCAgICAgIDAsIDAsIFRSVUUsIDI5NjAwMCwgIm5vIHRpbWVvdXQgYWN0aXZlIn0sCisgIHtCQVNFICsgNCwgOTkwMDAwLCAwLCAwLCBUUlVFLCAyOTUwMTAsICJubyB0aW1lb3V0IGFjdGl2ZSJ9LAorICB7QkFTRSArIDEwLCAwLCAgICAgMCwgMCwgVFJVRSwgMjkwMDAwLCAibm8gdGltZW91dCBhY3RpdmUifSwKKyAge0JBU0UgKyAxMiwgMCwgICAgIDAsIDAsIFRSVUUsIDI4ODAwMCwgIm5vIHRpbWVvdXQgYWN0aXZlIn0sCisKKyAgLyogYm90aCB0aW1lb3V0cyBzZXQsIGNvbm5lY3RpbmcsIGNvbm5lY3QgdGltZW91dCB0aGUgbG9uZ2VyIG9uZSAqLworICB7QkFTRSArIDQsIDAsICAgICAgMTAwMDAsIDEyMDAwLCBUUlVFLCA2MDAwLCAiNiBzZWNvbmRzIHNob3VsZCBiZSBsZWZ0In0sCisKK307CisKKy8qIHRoaXMgaXMgdGhlIHByZXRlbmRlZCBzdGFydCB0aW1lIG9mIHRoZSB0cmFuc2ZlciAqLworZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZS50dl9zZWMgPSBCQVNFOworZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZS50dl91c2VjID0gMDsKKworZm9yKGk9MDsgaSA8IHNpemVvZihydW4pL3NpemVvZihydW5bMF0pOyBpKyspIHsKKyAgTk9XKHJ1bltpXS5ub3dfcywgcnVuW2ldLm5vd191cyk7CisgIFRJTUVPVVRTKHJ1bltpXS50aW1lb3V0X21zLCBydW5baV0uY29ubmVjdHRpbWVvdXRfbXMpOworICB0aW1lb3V0ID0gIEN1cmxfdGltZWxlZnQoZGF0YSwgJm5vdywgcnVuW2ldLmNvbm5lY3RpbmcpOworICBpZih0aW1lb3V0ICE9IHJ1bltpXS5yZXN1bHQpCisgICAgZmFpbChydW5baV0uY29tbWVudCk7Cit9CisKKworVU5JVFRFU1RfU1RPUApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvdW5pdC91bml0MTMwNC5jIGIvY3VybC03LjI1LjAvdGVzdHMvdW5pdC91bml0MTMwNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZGQ4Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy91bml0L3VuaXQxMzA0LmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN1cmxjaGVjay5oIgorCisjaW5jbHVkZSAibmV0cmMuaCIKKworc3RhdGljIGNoYXIgbG9naW5bTE9HSU5TSVpFXTsKK3N0YXRpYyBjaGFyIHBhc3N3b3JkW1BBU1NXT1JEU0laRV07CitzdGF0aWMgY2hhciBmaWxlbmFtZVs2NF07CisKK3N0YXRpYyBDVVJMY29kZSB1bml0X3NldHVwKHZvaWQpCit7CisgIHBhc3N3b3JkWzBdID0gMDsKKyAgbG9naW5bMF0gPSAwOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK3N0YXRpYyB2b2lkIHVuaXRfc3RvcCh2b2lkKQoreworfQorCitVTklUVEVTVF9TVEFSVAorICBpbnQgcmVzdWx0OworCisgIHN0YXRpYyBjb25zdCBjaGFyKiBmaWxlbmFtZTEgPSAibG9nL25ldHJjMTMwNCI7CisgIG1lbWNweShmaWxlbmFtZSwgZmlsZW5hbWUxLCBzdHJsZW4oZmlsZW5hbWUxKSk7CisKKyAgLyoKKyAgICogVGVzdCBhIG5vbiBleGlzdGVudCBob3N0IGluIG91ciBuZXRyYyBmaWxlLgorICAgKi8KKyAgcmVzdWx0ID0gQ3VybF9wYXJzZW5ldHJjKCJ0ZXN0LmV4YW1wbGUuY29tIiwgbG9naW4sIHBhc3N3b3JkLCBmaWxlbmFtZSk7CisgIGZhaWxfdW5sZXNzKHJlc3VsdCA9PSAxLCAiSG9zdCBub3QgZm91bmQgc2hvdWxkIHJldHVybiAxIik7CisgIGZhaWxfdW5sZXNzKHBhc3N3b3JkWzBdID09IDAsICJwYXNzd29yZCBzaG91bGQgbm90IGhhdmUgYmVlbiBjaGFuZ2VkIik7CisgIGZhaWxfdW5sZXNzKGxvZ2luWzBdID09IDAsICJsb2dpbiBzaG91bGQgbm90IGhhdmUgYmVlbiBjaGFuZ2VkIik7CisKKyAgLyoKKyAgICogVGVzdCBhIG5vbiBleGlzdGVudCBsb2dpbiBpbiBvdXIgbmV0cmMgZmlsZS4KKyAgICovCisgIG1lbWNweShsb2dpbiwgIm1lIiwgMik7CisgIHJlc3VsdCA9IEN1cmxfcGFyc2VuZXRyYygiZXhhbXBsZS5jb20iLCBsb2dpbiwgcGFzc3dvcmQsIGZpbGVuYW1lKTsKKyAgZmFpbF91bmxlc3MocmVzdWx0ID09IDAsICJIb3N0IHNob3VsZCBiZSBmb3VuZCIpOworICBmYWlsX3VubGVzcyhwYXNzd29yZFswXSA9PSAwLCAicGFzc3dvcmQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2hhbmdlZCIpOworICBmYWlsX3VubGVzcyhzdHJuY21wKGxvZ2luLCAibWUiLCAyKSA9PSAwLCAibG9naW4gc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2hhbmdlZCIpOworCisgIC8qCisgICAqIFRlc3QgYSBub24gZXhpc3RlbnQgbG9naW4gYW5kIGhvc3QgaW4gb3VyIG5ldHJjIGZpbGUuCisgICAqLworICBtZW1jcHkobG9naW4sICJtZSIsIDIpOworICByZXN1bHQgPSBDdXJsX3BhcnNlbmV0cmMoInRlc3QuZXhhbXBsZS5jb20iLCBsb2dpbiwgcGFzc3dvcmQsIGZpbGVuYW1lKTsKKyAgZmFpbF91bmxlc3MocmVzdWx0ID09IDEsICJIb3N0IHNob3VsZCBiZSBmb3VuZCIpOworICBmYWlsX3VubGVzcyhwYXNzd29yZFswXSA9PSAwLCAicGFzc3dvcmQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2hhbmdlZCIpOworICBmYWlsX3VubGVzcyhzdHJuY21wKGxvZ2luLCAibWUiLCAyKSA9PSAwLCAibG9naW4gc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2hhbmdlZCIpOworCisgIC8qCisgICAqIFRlc3QgYSBub24gZXhpc3RlbnQgbG9naW4gKHN1YnN0cmluZyBvZiBhbiBleGlzdGluZyBvbmUpIGluIG91cgorICAgKiBuZXRyYyBmaWxlLgorICAgKi8KKyAgbWVtY3B5KGxvZ2luLCAiYWRtaSIsIDQpOworICByZXN1bHQgPSBDdXJsX3BhcnNlbmV0cmMoImV4YW1wbGUuY29tIiwgbG9naW4sIHBhc3N3b3JkLCBmaWxlbmFtZSk7CisgIGZhaWxfdW5sZXNzKHJlc3VsdCA9PSAwLCAiSG9zdCBzaG91bGQgYmUgZm91bmQiKTsKKyAgZmFpbF91bmxlc3MocGFzc3dvcmRbMF0gPT0gMCwgInBhc3N3b3JkIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNoYW5nZWQiKTsKKyAgZmFpbF91bmxlc3Moc3RybmNtcChsb2dpbiwgImFkbWkiLCA0KSA9PSAwLCAibG9naW4gc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2hhbmdlZCIpOworCisgIC8qCisgICAqIFRlc3QgYSBub24gZXhpc3RlbnQgbG9naW4gKHN1cGVyc3RyaW5nIG9mIGFuIGV4aXN0aW5nIG9uZSkKKyAgICogaW4gb3VyIG5ldHJjIGZpbGUuCisgICAqLworICBtZW1jcHkobG9naW4sICJhZG1pbm4iLCA2KTsKKyAgcmVzdWx0ID0gQ3VybF9wYXJzZW5ldHJjKCJleGFtcGxlLmNvbSIsIGxvZ2luLCBwYXNzd29yZCwgZmlsZW5hbWUpOworICBmYWlsX3VubGVzcyhyZXN1bHQgPT0gMCwgIkhvc3Qgc2hvdWxkIGJlIGZvdW5kIik7CisgIGZhaWxfdW5sZXNzKHBhc3N3b3JkWzBdID09IDAsICJwYXNzd29yZCBzaG91bGQgbm90IGhhdmUgYmVlbiBjaGFuZ2VkIik7CisgIGZhaWxfdW5sZXNzKHN0cm5jbXAobG9naW4sICJhZG1pbm4iLCA2KSA9PSAwLCAibG9naW4gc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2hhbmdlZCIpOworCisgIC8qCisgICAqIFRlc3QgZm9yIHRoZSBmaXJzdCBleGlzdGluZyBob3N0IGluIG91ciBuZXRyYyBmaWxlCisgICAqIHdpdGggbG9naW5bMF0gPSAwLgorICAgKi8KKyAgbG9naW5bMF0gPSAwOworICByZXN1bHQgPSBDdXJsX3BhcnNlbmV0cmMoImV4YW1wbGUuY29tIiwgbG9naW4sIHBhc3N3b3JkLCBmaWxlbmFtZSk7CisgIGZhaWxfdW5sZXNzKHJlc3VsdCA9PSAwLCAiSG9zdCBzaG91bGQgaGF2ZSBiZWVuIGZvdW5kIik7CisgIGZhaWxfdW5sZXNzKHN0cm5jbXAocGFzc3dvcmQsICJwYXNzd2QiLCA2KSA9PSAwLAorICAgICAgICAgICAgICAicGFzc3dvcmQgc2hvdWxkIGJlICdwYXNzd2QnIik7CisgIGZhaWxfdW5sZXNzKHN0cm5jbXAobG9naW4sICJhZG1pbiIsIDUpID09IDAsICJsb2dpbiBzaG91bGQgYmUgJ2FkbWluJyIpOworCisgIC8qCisgICAqIFRlc3QgZm9yIHRoZSBmaXJzdCBleGlzdGluZyBob3N0IGluIG91ciBuZXRyYyBmaWxlCisgICAqIHdpdGggbG9naW5bMF0gIT0gMC4KKyAgICovCisgIHBhc3N3b3JkWzBdID0gMDsKKyAgcmVzdWx0ID0gQ3VybF9wYXJzZW5ldHJjKCJleGFtcGxlLmNvbSIsIGxvZ2luLCBwYXNzd29yZCwgZmlsZW5hbWUpOworICBmYWlsX3VubGVzcyhyZXN1bHQgPT0gMCwgIkhvc3Qgc2hvdWxkIGhhdmUgYmVlbiBmb3VuZCIpOworICBmYWlsX3VubGVzcyhzdHJuY21wKHBhc3N3b3JkLCAicGFzc3dkIiwgNikgPT0gMCwKKyAgICAgICAgICAgICAgInBhc3N3b3JkIHNob3VsZCBiZSAncGFzc3dkJyIpOworICBmYWlsX3VubGVzcyhzdHJuY21wKGxvZ2luLCAiYWRtaW4iLCA1KSA9PSAwLCAibG9naW4gc2hvdWxkIGJlICdhZG1pbiciKTsKKworICAvKgorICAgKiBUZXN0IGZvciB0aGUgc2Vjb25kIGV4aXN0aW5nIGhvc3QgaW4gb3VyIG5ldHJjIGZpbGUKKyAgICogd2l0aCBsb2dpblswXSA9IDAuCisgICAqLworICBwYXNzd29yZFswXSA9IDA7CisgIGxvZ2luWzBdID0gMDsKKyAgcmVzdWx0ID0gQ3VybF9wYXJzZW5ldHJjKCJjdXJsLmV4YW1wbGUuY29tIiwgbG9naW4sIHBhc3N3b3JkLCBmaWxlbmFtZSk7CisgIGZhaWxfdW5sZXNzKHJlc3VsdCA9PSAwLCAiSG9zdCBzaG91bGQgaGF2ZSBiZWVuIGZvdW5kIik7CisgIGZhaWxfdW5sZXNzKHN0cm5jbXAocGFzc3dvcmQsICJub25lIiwgNCkgPT0gMCwKKyAgICAgICAgICAgICAgInBhc3N3b3JkIHNob3VsZCBiZSAnbm9uZSciKTsKKyAgZmFpbF91bmxlc3Moc3RybmNtcChsb2dpbiwgIm5vbmUiLCA0KSA9PSAwLCAibG9naW4gc2hvdWxkIGJlICdub25lJyIpOworCisgIC8qCisgICAqIFRlc3QgZm9yIHRoZSBzZWNvbmQgZXhpc3RpbmcgaG9zdCBpbiBvdXIgbmV0cmMgZmlsZQorICAgKiB3aXRoIGxvZ2luWzBdICE9IDAuCisgICAqLworICBwYXNzd29yZFswXSA9IDA7CisgIHJlc3VsdCA9IEN1cmxfcGFyc2VuZXRyYygiY3VybC5leGFtcGxlLmNvbSIsIGxvZ2luLCBwYXNzd29yZCwgZmlsZW5hbWUpOworICBmYWlsX3VubGVzcyhyZXN1bHQgPT0gMCwgIkhvc3Qgc2hvdWxkIGhhdmUgYmVlbiBmb3VuZCIpOworICBmYWlsX3VubGVzcyhzdHJuY21wKHBhc3N3b3JkLCAibm9uZSIsIDQpID09IDAsCisgICAgICAgICAgICAgICJwYXNzd29yZCBzaG91bGQgYmUgJ25vbmUnIik7CisgIGZhaWxfdW5sZXNzKHN0cm5jbXAobG9naW4sICJub25lIiwgNCkgPT0gMCwgImxvZ2luIHNob3VsZCBiZSAnbm9uZSciKTsKKworICAvKiBUT0RPOgorICAgKiBUZXN0IG92ZXIgdGhlIHNpemUgbGltaXQgcGFzc3dvcmQgLyBsb2dpbiEKKyAgICogVGVzdCBmaWxlcyB3aXRoIGEgYmFkIGZvcm1hdAorICAgKi8KK1VOSVRURVNUX1NUT1AKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvdW5pdDEzMDUuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvdW5pdDEzMDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTAwYzZkCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvdW5pdC91bml0MTMwNS5jCkBAIC0wLDAgKzEsMTQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjdXJsY2hlY2suaCIKKworI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyMgIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICisjICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorCisjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKKyNpbmNsdWRlICJjdXJseC5oIgorCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgImhvc3RpcC5oIgorCisjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKKyNpbmNsdWRlICJtZW1kZWJ1Zy5oIiAvKiBMQVNUIGluY2x1ZGUgZmlsZSAqLworCitzdGF0aWMgc3RydWN0IFNlc3Npb25IYW5kbGUgKmRhdGE7CitzdGF0aWMgc3RydWN0IGN1cmxfaGFzaCAqaHA7CitzdGF0aWMgY2hhciAqZGF0YV9rZXk7CitzdGF0aWMgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpkYXRhX25vZGU7CisKK3N0YXRpYyBDVVJMY29kZSB1bml0X3NldHVwKCB2b2lkICkKK3sKKyAgZGF0YSA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGlmICghZGF0YSkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICBocCA9IEN1cmxfbWtfZG5zY2FjaGUoKTsKKyAgaWYoIWhwKSB7CisgICAgY3VybF9lYXN5X2NsZWFudXAoZGF0YSk7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIHZvaWQgdW5pdF9zdG9wKCB2b2lkICkKK3sKKyAgaWYgKGRhdGFfbm9kZSkgeworICAgIEN1cmxfZnJlZWFkZHJpbmZvKGRhdGFfbm9kZS0+YWRkcik7CisgICAgZnJlZShkYXRhX25vZGUpOworICB9CisgIGlmIChkYXRhX2tleSkKKyAgICBmcmVlKGRhdGFfa2V5KTsKKworICBDdXJsX2hhc2hfZGVzdHJveShocCk7CisKKyAgY3VybF9lYXN5X2NsZWFudXAoZGF0YSk7CisgIGN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKK30KKworc3RhdGljIEN1cmxfYWRkcmluZm8gKmZha2VfYWkodm9pZCkKK3sKKyAgc3RhdGljIEN1cmxfYWRkcmluZm8gKmFpOworICBpbnQgc3Nfc2l6ZTsKKworICBzc19zaXplID0gc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCisgIGlmKChhaSA9IGNhbGxvYygxLCBzaXplb2YoQ3VybF9hZGRyaW5mbykpKSA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIGlmKChhaS0+YWlfY2Fub25uYW1lID0gc3RyZHVwKCJkdW1teSIpKSA9PSBOVUxMKSB7CisgICAgZnJlZShhaSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpZigoYWktPmFpX2FkZHIgPSBjYWxsb2MoMSwgc3Nfc2l6ZSkpID09IE5VTEwpIHsKKyAgICBmcmVlKGFpLT5haV9jYW5vbm5hbWUpOworICAgIGZyZWUoYWkpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgYWktPmFpX2ZhbWlseSA9IEFGX0lORVQ7CisgIGFpLT5haV9hZGRybGVuID0gc3Nfc2l6ZTsKKworICByZXR1cm4gYWk7Cit9CisKK3N0YXRpYyBDVVJMY29kZSBjcmVhdGVfbm9kZSh2b2lkKQoreworICBkYXRhX2tleSA9IGFwcmludGYoIiVzOiVkIiwgImR1bW15IiwgMCk7CisgIGlmICghZGF0YV9rZXkpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgZGF0YV9ub2RlID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgQ3VybF9kbnNfZW50cnkpKTsKKyAgaWYgKCFkYXRhX25vZGUpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisKKyAgZGF0YV9ub2RlLT5hZGRyID0gZmFrZV9haSgpOworICBpZiAoIWRhdGFfbm9kZS0+YWRkcikKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKworVU5JVFRFU1RfU1RBUlQKKworICBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKm5vZGVwOworICBzaXplX3Qga2V5X2xlbjsKKworICAvKiBUZXN0IDEzMDUgZXhpdHMgd2l0aG91dCBhZGRpbmcgYW55dGhpbmcgdG8gdGhlIGhhc2ggKi8KKyAgaWYgKHN0cmNtcChhcmcsICIxMzA1IikgIT0gMCkgeworICAgIENVUkxjb2RlIHJjID0gY3JlYXRlX25vZGUoKTsKKyAgICBhYm9ydF91bmxlc3MocmMgPT0gQ1VSTEVfT0ssICJkYXRhIG5vZGUgY3JlYXRpb24gZmFpbGVkIik7CisgICAga2V5X2xlbiA9IHN0cmxlbihkYXRhX2tleSk7CisKKyAgICBub2RlcCA9IEN1cmxfaGFzaF9hZGQoaHAsIGRhdGFfa2V5LCBrZXlfbGVuKzEsIGRhdGFfbm9kZSk7CisgICAgYWJvcnRfdW5sZXNzKG5vZGVwLCAiaW5zZXJ0aW9uIGludG8gaGFzaCBmYWlsZWQiKTsKKyAgICAvKiBGcmVlaW5nIHdpbGwgbm93IGJlIGRvbmUgYnkgQ3VybF9oYXNoX2Rlc3Ryb3kgKi8KKyAgICBkYXRhX25vZGUgPSBOVUxMOworCisgICAgLyogVG8gZG86IHRlc3QgcmV0cmlldmFsLCBkZWxldGlvbiwgZWRnZSBjb25kaXRpb25zICovCisgIH0KKworVU5JVFRFU1RfU1RPUApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvdW5pdC91bml0MTMwNy5jIGIvY3VybC03LjI1LjAvdGVzdHMvdW5pdC91bml0MTMwNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNmU4MGMKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy91bml0L3VuaXQxMzA3LmMKQEAgLTAsMCArMSwyMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN1cmxjaGVjay5oIgorCisjaW5jbHVkZSAiY3VybF9mbm1hdGNoLmgiCisKKyNkZWZpbmUgTUFUQ0ggICBDVVJMX0ZOTUFUQ0hfTUFUQ0gKKyNkZWZpbmUgTk9NQVRDSCBDVVJMX0ZOTUFUQ0hfTk9NQVRDSAorI2RlZmluZSBSRV9FUlIgIENVUkxfRk5NQVRDSF9GQUlMCisKKyNkZWZpbmUgTUFYX1BBVFRFUk5fTCAxMDAKKyNkZWZpbmUgTUFYX1NUUklOR19MICAxMDAKKworc3RydWN0IHRlc3RjYXNlIHsKKyAgY2hhciBwYXR0ZXJuW01BWF9QQVRURVJOX0xdOworICBjaGFyIHN0cmluZ1tNQVhfU1RSSU5HX0xdOworICBpbnQgIHJlc3VsdDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgdGVzdHNbXSA9IHsKKyAgLyogYnJhY2tldHMgc3ludGF4ICovCisgIHsgIlxcWyIsICAgICAgICAgICAgICAgICAgICAgICJbIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiWyIsICAgICAgICAgICAgICAgICAgICAgICAgIlsiLCAgICAgICAgICAgICAgICAgICAgICBSRV9FUlIgfSwKKyAgeyAiW10iLCAgICAgICAgICAgICAgICAgICAgICAgIltdIiwgICAgICAgICAgICAgICAgICAgICBSRV9FUlIgfSwKKyAgeyAiW11bXSIsICAgICAgICAgICAgICAgICAgICAgIlsiLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbXVtdIiwgICAgICAgICAgICAgICAgICAgICAiXSIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltbXSIsICAgICAgICAgICAgICAgICAgICAgICJbIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiW1tbXSIsICAgICAgICAgICAgICAgICAgICAgIlsiLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbW1tbXSIsICAgICAgICAgICAgICAgICAgICAiWyIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltbW1tdIiwgICAgICAgICAgICAgICAgICAgICJbIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKworICB7ICJbXVtbXSIsICAgICAgICAgICAgICAgICAgICAiXSIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltdW1tbXSIsICAgICAgICAgICAgICAgICAgICJbIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiW1tdIiwgICAgICAgICAgICAgICAgICAgICAgIl0iLCAgICAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisKKyAgeyAiW2Etel0iLCAgICAgICAgICAgICAgICAgICAgImEiLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbYS16XSIsICAgICAgICAgICAgICAgICAgICAiQSIsICAgICAgICAgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiP1thLXpdIiwgICAgICAgICAgICAgICAgICAgIj9aIiwgICAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIltBLVpdIiwgICAgICAgICAgICAgICAgICAgICJDIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiW0EtWl0iLCAgICAgICAgICAgICAgICAgICAgImMiLCAgICAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIlswLTldIiwgICAgICAgICAgICAgICAgICAgICI3IiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiWzctOF0iLCAgICAgICAgICAgICAgICAgICAgIjciLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbNy1dIiwgICAgICAgICAgICAgICAgICAgICAiNyIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIls3LV0iLCAgICAgICAgICAgICAgICAgICAgICItIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiWzctXSIsICAgICAgICAgICAgICAgICAgICAgIlsiLCAgICAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIlthLWJBLUZdIiwgICAgICAgICAgICAgICAgICJGIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiW2EtYkEtQjldIiwgICAgICAgICAgICAgICAgIjkiLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbYS1iQS1COThdIiwgICAgICAgICAgICAgICAiOCIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIlthLWJBLUI5OF0iLCAgICAgICAgICAgICAgICJDIiwgICAgICAgICAgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICJbYS1iQS1aOV0iLCAgICAgICAgICAgICAgICAiRiIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIlthLWJBLVo5XWVybyoiLCAgICAgICAgICAgICJaZXJvIGNoYW5jZS4iLCAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiU1thLV1beF1vcGhvKiIsICAgICAgICAgICAgIlNheG9waG9uZSIsICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJTW2EtXVt4XW9waG8qIiwgICAgICAgICAgICAiU2FYb3Bob25lIiwgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiU1thLV1beF0qLnR4dCIsICAgICAgICAgICAgIlMteC50eHQiLCAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbXFxhLVxcYl0iLCAgICAgICAgICAgICAgICAiYSIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltcXGEtXFxiXSIsICAgICAgICAgICAgICAgICJiIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiWz8qW11bPypbXVs/KltdIiwgICAgICAgICAgIj8qWyIsICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbXVs/Ki1dIiwgICAgICAgICAgICAgICAgICAiXSIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltdWz8qLV0iLCAgICAgICAgICAgICAgICAgICJbIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiW11bPyotXSIsICAgICAgICAgICAgICAgICAgIj8iLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbXVs/Ki1dIiwgICAgICAgICAgICAgICAgICAiKiIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltdWz8qLV0iLCAgICAgICAgICAgICAgICAgICItIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiW10/Ki1dIiwgICAgICAgICAgICAgICAgICAgIi0iLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICI/L2IvYyIsICAgICAgICAgICAgICAgICAgICAiYS9iL2MiLCAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIl5fe31+IiwgICAgICAgICAgICAgICAgICAgICJeX3t9fiIsICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiISMlKywtLi8wMTIzNDU2Nzg4OSIsICAgICAgIiEjJSssLS4vMDEyMzQ1Njc4ODkiLCAgICBNQVRDSCB9LAorICB7ICJQUVJTVFVWV1hZWl1hYmNkZWZnIiwgICAgICAiUFFSU1RVVldYWVpdYWJjZGVmZyIsICAgIE1BVENIIH0sCisgIHsgIjo7PUBBQkNERUZHSElKS0xNTk8iLCAgICAgICI6Oz1AQUJDREVGR0hJSktMTU5PIiwgICAgTUFUQ0ggfSwKKworICAvKiBuZWdhdGUgKi8KKyAgeyAiWyFhXSIsICAgICAgICAgICAgICAgICAgICAgImIiLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbIWFdIiwgICAgICAgICAgICAgICAgICAgICAiYSIsICAgICAgICAgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiW15hXSIsICAgICAgICAgICAgICAgICAgICAgImIiLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbXmFdIiwgICAgICAgICAgICAgICAgICAgICAiYSIsICAgICAgICAgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiW15hLXowLTlBLVpdIiwgICAgICAgICAgICAgImEiLCAgICAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIlteYS16MC05QS1aXSIsICAgICAgICAgICAgICItIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiY3VybFshYS16XWxpYiIsICAgICAgICAgICAgImN1cmwgbGliIiwgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJjdXJsWyEgXWxpYiIsICAgICAgICAgICAgICAiY3VybCBsaWIiLCAgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiWyEgXVsgXSIsICAgICAgICAgICAgICAgICAgIiAgIiwgICAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIlshIF1bIF0iLCAgICAgICAgICAgICAgICAgICJhICIsICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiKlteYV0udD90IiwgICAgICAgICAgICAgICAgImEudHh0IiwgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIipbXmFdLnQ/dCIsICAgICAgICAgICAgICAgICJiYS50eHQiLCAgICAgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICIqW15hXS50P3QiLCAgICAgICAgICAgICAgICAiYWIudHh0IiwgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIlshPypbXSIsICAgICAgICAgICAgICAgICAgICI/IiwgICAgICAgICAgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICJbISFdIiwgICAgICAgICAgICAgICAgICAgICAiISIsICAgICAgICAgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiWyEhXSIsICAgICAgICAgICAgICAgICAgICAgIngiLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorCisgIHsgIltbOmFscGhhOl1dIiwgICAgICAgICAgICAgICJhIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiW1s6YWxwaGE6XV0iLCAgICAgICAgICAgICAgIjkiLCAgICAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIltbOmFsbnVtOl1dIiwgICAgICAgICAgICAgICJhIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiW1s6YWxudW06XV0iLCAgICAgICAgICAgICAgIlsiLCAgICAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIltbOmFsbnVtOl1dIiwgICAgICAgICAgICAgICJdIiwgICAgICAgICAgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICJbWzphbG51bTpdXSIsICAgICAgICAgICAgICAiOSIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltbOmRpZ2l0Ol1dIiwgICAgICAgICAgICAgICI5IiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiW1s6eGRpZ2l0Ol1dIiwgICAgICAgICAgICAgIjkiLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbWzp4ZGlnaXQ6XV0iLCAgICAgICAgICAgICAiRiIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltbOnhkaWdpdDpdXSIsICAgICAgICAgICAgICJHIiwgICAgICAgICAgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICJbWzp1cHBlcjpdXSIsICAgICAgICAgICAgICAiVSIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltbOnVwcGVyOl1dIiwgICAgICAgICAgICAgICJ1IiwgICAgICAgICAgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICJbWzpsb3dlcjpdXSIsICAgICAgICAgICAgICAibCIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltbOmxvd2VyOl1dIiwgICAgICAgICAgICAgICJMIiwgICAgICAgICAgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICJbWzpwcmludDpdXSIsICAgICAgICAgICAgICAiTCIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltbOnByaW50Ol1dIiwgICAgICAgICAgICAgIHsnXDEwJ30sICAgICAgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICJbWzpwcmludDpdXSIsICAgICAgICAgICAgICB7J1wxMCd9LCAgICAgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiW1s6c3BhY2U6XV0iLCAgICAgICAgICAgICAgIiAiLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbWzpzcGFjZTpdXSIsICAgICAgICAgICAgICAieCIsICAgICAgICAgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiW1s6Z3JhcGg6XV0iLCAgICAgICAgICAgICAgIiAiLCAgICAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIltbOmdyYXBoOl1dIiwgICAgICAgICAgICAgICJ4IiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiW1s6Ymxhbms6XV0iLCAgICAgICAgICAgICAgeydcdCd9LCAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbWzpibGFuazpdXSIsICAgICAgICAgICAgICB7JyAnfSwgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltbOmJsYW5rOl1dIiwgICAgICAgICAgICAgIHsnXHInfSwgICAgICAgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICJbXls6Ymxhbms6XV0iLCAgICAgICAgICAgICB7J1x0J30sICAgICAgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiW15bOnByaW50Ol1dIiwgICAgICAgICAgICAgeydcMTAnfSwgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbWzpsb3dlcjpdXVtbOmxvd2VyOl1dIiwgICAibGwiLCAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisKKyAgeyAiQ3VybFtbOmJsYW5rOl1dOy0pIiwgICAgICAgIkN1cmwgOy0pIiwgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICIqW1s6Ymxhbms6XV0qIiwgICAgICAgICAgICAiICIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIipbWzpibGFuazpdXSoiLCAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICIqW1s6Ymxhbms6XV0qIiwgICAgICAgICAgICAiaGksIGltX1BhdmVsIiwgICAgICAgICAgIE1BVENIIH0sCisKKyAgLyogY29tbW9uIHVzaW5nICovCisgIHsgImZpbGVuYW1lLmRhdCIsICAgICAgICAgICAgICJmaWxlbmFtZS5kYXQiLCAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiKmN1cmwqIiwgICAgICAgICAgICAgICAgICAgImxldHMgdXNlIGN1cmwhISIsICAgICAgICBNQVRDSCB9LAorICB7ICJmaWxlbmFtZS50eHQiLCAgICAgICAgICAgICAiZmlsZW5hbWUuZGF0IiwgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiKi50eHQiLCAgICAgICAgICAgICAgICAgICAgInRleHQudHh0IiwgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICIqLnR4dCIsICAgICAgICAgICAgICAgICAgICAiYS50eHQiLCAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIioudHh0IiwgICAgICAgICAgICAgICAgICAgICIudHh0IiwgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiKi50eHQiLCAgICAgICAgICAgICAgICAgICAgInR4dCIsICAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIj8/LnR4dCIsICAgICAgICAgICAgICAgICAgICI5OS50eHQiLCAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiPz8udHh0IiwgICAgICAgICAgICAgICAgICAgImE5OS50eHQiLCAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIj8uPz8/IiwgICAgICAgICAgICAgICAgICAgICJhLnR4dCIsICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiKi4/Pz8iLCAgICAgICAgICAgICAgICAgICAgInNvbWVmaWxlLmRhdCIsICAgICAgICAgICBNQVRDSCB9LAorICB7ICIqLj8/PyIsICAgICAgICAgICAgICAgICAgICAicGhvdG8uanBlZyIsICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiLioiLCAgICAgICAgICAgICAgICAgICAgICAgIi5odGFjY2VzcyIsICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICIuKiIsICAgICAgICAgICAgICAgICAgICAgICAiLiIsICAgICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIi4qIiwgICAgICAgICAgICAgICAgICAgICAgICIuLiIsICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKworICAvKiBtYW55IHN0YXJzID0+IG9uZSBzdGFyICovCisgIHsgIioqLnR4dCIsICAgICAgICAgICAgICAgICAgICJ0ZXh0LnR4dCIsICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiKioqLnR4dCIsICAgICAgICAgICAgICAgICAgInQudHh0IiwgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICIqKioqLnR4dCIsICAgICAgICAgICAgICAgICAiLnR4dCIsICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisKKyAgLyogZW1wdHkgc3RyaW5nIG9yIHBhdHRlcm4gKi8KKyAgeyAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9ICwKKyAgeyAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgImhlbGxvIiwgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgImZpbGUiLCAgICAgICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgTk9NQVRDSCAgfSwKKyAgeyAiPyIsICAgICAgICAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIioiLCAgICAgICAgICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAieCIsICAgICAgICAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisKKyAgLyogYmFja3NsYXNoICovCisgIHsgIlxcIiwgICAgICAgICAgICAgICAgICAgICAgICJcXCIsICAgICAgICAgICAgICAgICAgICAgUkVfRVJSIH0sCisgIHsgIlxcXFwiLCAgICAgICAgICAgICAgICAgICAgICJcXCIsICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiXFxcXCIsICAgICAgICAgICAgICAgICAgICAgIlxcXFwiLCAgICAgICAgICAgICAgICAgICBOT01BVENIIH0sCisgIHsgIlxcPyIsICAgICAgICAgICAgICAgICAgICAgICI/IiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiXFwqIiwgICAgICAgICAgICAgICAgICAgICAgIioiLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICI/LnR4dCIsICAgICAgICAgICAgICAgICAgICAiPy50eHQiLCAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIioudHh0IiwgICAgICAgICAgICAgICAgICAgICIqLnR4dCIsICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiXFw/LnR4dCIsICAgICAgICAgICAgICAgICAgIj8udHh0IiwgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJcXCoudHh0IiwgICAgICAgICAgICAgICAgICAiKi50eHQiLCAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIlxcPy50eHQiLCAgICAgICAgICAgICAgICAgICJ4LnR4dCIsICAgICAgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICJcXCoudHh0IiwgICAgICAgICAgICAgICAgICAieC50eHQiLCAgICAgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiXFwqXFxcXC50eHQiLCAgICAgICAgICAgICAgIipcXC50eHQiLCAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICIqXFwqKlxcPypcXFxcKiIsICAgICAgICAgICAiY2MqY2M/Y2NcXGNjKmNjIiwgICAgICAgIE1BVENIIH0sCisgIHsgIipcXCoqXFw/KlxcXFwqIiwgICAgICAgICAgICJjYypjYz9jY2NjIiwgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICIqXFwqKlxcPypcXFxcKiIsICAgICAgICAgICAiY2MqY2M/Y2NcXGNjKmNjIiwgICAgICAgIE1BVENIIH0sCisgIHsgIipcXD8qXFwqKiIsICAgICAgICAgICAgICAgICJjYz9jKmMiLCAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiKlxcPypcXCoqY3VybCoiLCAgICAgICAgICAgImNjP2MqY3VybCIsICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICIqXFw/KlxcKioiLCAgICAgICAgICAgICAgICAiY2M/Y2MiLCAgICAgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiXFxcIlxcJFxcJlxcJ1xcKFxcKSIsICAgICAgIlwiJCYnKCkiLCAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJcXCpcXD9cXFtcXFxcXFxgXFx8IiwgICAgICAiKj9bXFxgfCIsICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltcXGFcXGJdYyIsICAgICAgICAgICAgICAgICJhYyIsICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiW1xcYVxcYl1jIiwgICAgICAgICAgICAgICAgImJjIiwgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJbXFxhXFxiXWQiLCAgICAgICAgICAgICAgICAiYmMiLCAgICAgICAgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiW2EtYkEtQlxcP10iLCAgICAgICAgICAgICAgIj8iLCAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICJjdVthLWFiLWJcXHJdbCIsICAgICAgICAgICAiY3VybCIsICAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIltcXGEtel0iLCAgICAgICAgICAgICAgICAgICJjIiwgICAgICAgICAgICAgICAgICAgICAgTUFUQ0ggfSwKKworICB7ICI/Kj8qPy4qPyoiLCAgICAgICAgICAgICAgICAiYWJjLmMiLCAgICAgICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIj8qPyo/Lio/KiIsICAgICAgICAgICAgICAgICJhYmNjIiwgICAgICAgICAgICAgICAgICAgTk9NQVRDSCB9LAorICB7ICI/Kj8qPy4qPyoiLCAgICAgICAgICAgICAgICAiYWJjLiIsICAgICAgICAgICAgICAgICAgIE5PTUFUQ0ggfSwKKyAgeyAiPyo/Kj8uKj8qIiwgICAgICAgICAgICAgICAgImFiYy5jKysiLCAgICAgICAgICAgICAgICBNQVRDSCB9LAorICB7ICI/Kj8qPy4qPyoiLCAgICAgICAgICAgICAgICAiYWJjZGVmLmMrKyIsICAgICAgICAgICAgIE1BVENIIH0sCisgIHsgIj8qPyo/Lj8iLCAgICAgICAgICAgICAgICAgICJhYmNkZWYuYyIsICAgICAgICAgICAgICAgTUFUQ0ggfSwKKyAgeyAiPyo/Kj8uPyIsICAgICAgICAgICAgICAgICAgImFiY2RlZi5jZCIsICAgICAgICAgICAgICBOT01BVENIIH0sCisKKyAgeyAiTGluZG3DpHRhcnYiLCAgICAgICAgICAgICAgICJMaW5kbcOkdGFydiIsICAgICAgICAgICAgIE1BVENIIH0sCisKKyAgeyAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICBNQVRDSCB9Cit9OworCitzdGF0aWMgQ1VSTGNvZGUgdW5pdF9zZXR1cCggdm9pZCApCit7CisgIHJldHVybiBDVVJMRV9PSzsKK30KKworc3RhdGljIHZvaWQgdW5pdF9zdG9wKCB2b2lkICkKK3sKK30KKworVU5JVFRFU1RfU1RBUlQKKworICBpbnQgdGVzdG51bSA9IHNpemVvZih0ZXN0cykgLyBzaXplb2Yoc3RydWN0IHRlc3RjYXNlKTsKKyAgaW50IGksIHJjOworCisgIGZvcihpID0gMDsgaSA8IHRlc3RudW07IGkrKykgeworICAgIHJjID0gQ3VybF9mbm1hdGNoKE5VTEwsIHRlc3RzW2ldLnBhdHRlcm4sIHRlc3RzW2ldLnN0cmluZyk7CisgICAgaWYocmMgIT0gdGVzdHNbaV0ucmVzdWx0KSB7CisgICAgICBwcmludGYoIkN1cmxfZm5tYXRjaChcIiVzXCIsIFwiJXNcIikgc2hvdWxkIHJldHVybiAlZCAocmV0dXJucyAlZClcbiIsCisgICAgICAgICAgICAgdGVzdHNbaV0ucGF0dGVybiwgdGVzdHNbaV0uc3RyaW5nLCB0ZXN0c1tpXS5yZXN1bHQsIHJjKTsKKyAgICAgIGZhaWwoInBhdHRlcm4gbWlzbWF0Y2giKTsKKyAgICB9CisgIH0KKworVU5JVFRFU1RfU1RPUApkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvdGVzdHMvdW5pdC91bml0MTMwOC5jIGIvY3VybC03LjI1LjAvdGVzdHMvdW5pdC91bml0MTMwOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZTZjNTcKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy91bml0L3VuaXQxMzA4LmMKQEAgLTAsMCArMSw5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiY3VybGNoZWNrLmgiCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworc3RhdGljIENVUkxjb2RlIHVuaXRfc2V0dXAodm9pZCkKK3sKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgdm9pZCB1bml0X3N0b3Aodm9pZCkKK3sKKworfQorCitzdGF0aWMgc2l6ZV90IHByaW50X2h0dHBwb3N0X2NhbGxiYWNrKHZvaWQgKmFyZywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworICBmd3JpdGUoYnVmLCBsZW4sIDEsIHN0ZG91dCk7CisgICgqKHNpemVfdCAqKSBhcmcpICs9IGxlbjsKKyAgcmV0dXJuIGxlbjsKK30KKworVU5JVFRFU1RfU1RBUlQKKyAgaW50IHJjOworICBzdHJ1Y3QgY3VybF9odHRwcG9zdCogcG9zdCA9IE5VTEw7CisgIHN0cnVjdCBjdXJsX2h0dHBwb3N0KiBsYXN0ID0gTlVMTDsKKyAgc2l6ZV90IHRvdGFsX3NpemUgPSAwOworICBjaGFyIGJ1ZmZlcltdID0gInRlc3QgYnVmZmVyIjsKKworICByYyA9IGN1cmxfZm9ybWFkZCgmcG9zdCwgJmxhc3QsIENVUkxGT1JNX0NPUFlOQU1FLCAibmFtZSIsCisgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUywgImNvbnRlbnQiLCBDVVJMRk9STV9FTkQpOworCisgIGZhaWxfdW5sZXNzKHJjID09IDAsICJjdXJsX2Zvcm1hZGQgcmV0dXJuZWQgZXJyb3IiKTsKKworICAvKiBhZnRlciB0aGUgZmlyc3QgY3VybF9mb3JtYWRkIHdoZW4gdGhlcmUncyBhIHNpbmdsZSBlbnRyeSwgYm90aCBwb2ludGVycworICAgICBzaG91bGQgcG9pbnQgdG8gdGhlIHNhbWUgc3RydWN0ICovCisgIGZhaWxfdW5sZXNzKHBvc3QgPT0gbGFzdCwgInBvc3QgYW5kIGxhc3Qgd2VyZW4ndCB0aGUgc2FtZSIpOworCisgIHJjID0gY3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJodG1sY29kZSIsCisgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlDT05URU5UUywgIjxIVE1MPjwvSFRNTD4iLAorICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9DT05URU5UVFlQRSwgInRleHQvaHRtbCIsIENVUkxGT1JNX0VORCk7CisKKyAgZmFpbF91bmxlc3MocmMgPT0gMCwgImN1cmxfZm9ybWFkZCByZXR1cm5lZCBlcnJvciIpOworCisgIHJjID0gY3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwgQ1VSTEZPUk1fQ09QWU5BTUUsICJuYW1lX2Zvcl9wdHJjb250ZW50IiwKKyAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9QVFJDT05URU5UUywgYnVmZmVyLCBDVVJMRk9STV9FTkQpOworCisgIGZhaWxfdW5sZXNzKHJjID09IDAsICJjdXJsX2Zvcm1hZGQgcmV0dXJuZWQgZXJyb3IiKTsKKworICByYyA9IGN1cmxfZm9ybWdldChwb3N0LCAmdG90YWxfc2l6ZSwgcHJpbnRfaHR0cHBvc3RfY2FsbGJhY2spOworCisgIGZhaWxfdW5sZXNzKHJjID09IDAsICJjdXJsX2Zvcm1nZXQgcmV0dXJuZWQgZXJyb3IiKTsKKworICBmYWlsX3VubGVzcyh0b3RhbF9zaXplID09IDQ4NiwgImN1cmxfZm9ybWdldCBnb3Qgd3Jvbmcgc2l6ZSBiYWNrIik7CisKKyAgY3VybF9mb3JtZnJlZShwb3N0KTsKKworICAvKiBzdGFydCBhIG5ldyBmb3JtcG9zdCB3aXRoIGEgZmlsZSB1cGxvYWQgYW5kIGZvcm1nZXQgKi8KKyAgcG9zdCA9IGxhc3QgPSBOVUxMOworCisgIHJjID0gY3VybF9mb3JtYWRkKCZwb3N0LCAmbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fUFRSTkFNRSwgIm5hbWUgb2YgZmlsZSBmaWVsZCIsCisgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsICJsb2cvdGVzdC0xMzA4IiwKKyAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fRklMRU5BTUUsICJjdXN0b20gbmFtZWQgZmlsZSIsCisgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0VORCk7CisKKyAgZmFpbF91bmxlc3MocmMgPT0gMCwgImN1cmxfZm9ybWFkZCByZXR1cm5lZCBlcnJvciIpOworCisgIHJjID0gY3VybF9mb3JtZ2V0KHBvc3QsICZ0b3RhbF9zaXplLCBwcmludF9odHRwcG9zdF9jYWxsYmFjayk7CisgIGZhaWxfdW5sZXNzKHJjID09IDAsICJjdXJsX2Zvcm1nZXQgcmV0dXJuZWQgZXJyb3IiKTsKKyAgZmFpbF91bmxlc3ModG90YWxfc2l6ZSA9PSA4NDcsICJjdXJsX2Zvcm1nZXQgZ290IHdyb25nIHNpemUgYmFjayIpOworCisgIGN1cmxfZm9ybWZyZWUocG9zdCk7CisKK1VOSVRURVNUX1NUT1AKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvdW5pdDEzMDkuYyBiL2N1cmwtNy4yNS4wL3Rlc3RzL3VuaXQvdW5pdDEzMDkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzA0YmExCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvdGVzdHMvdW5pdC91bml0MTMwOS5jCkBAIC0wLDAgKzEsMTEwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjdXJsY2hlY2suaCIKKworI2luY2x1ZGUgInNwbGF5LmgiCisKKworc3RhdGljIENVUkxjb2RlIHVuaXRfc2V0dXAodm9pZCkKK3sKKyAgcmV0dXJuIENVUkxFX09LOworfQorCitzdGF0aWMgdm9pZCB1bml0X3N0b3Aodm9pZCkKK3sKKworfQorCitzdGF0aWMgdm9pZCBzcGxheXByaW50KHN0cnVjdCBDdXJsX3RyZWUgKiB0LCBpbnQgZCwgY2hhciBvdXRwdXQpCit7CisgIHN0cnVjdCBDdXJsX3RyZWUgKm5vZGU7CisgIGludCBpOworICBpbnQgY291bnQ7CisgIGlmKHQgPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgc3BsYXlwcmludCh0LT5sYXJnZXIsIGQrMSwgb3V0cHV0KTsKKyAgZm9yKGk9MDsgaTxkOyBpKyspCisgICAgaWYob3V0cHV0KQorICAgICAgcHJpbnRmKCIgICIpOworCisgIGlmKG91dHB1dCkgeworICAgIHByaW50ZigiJWxkLiVsZFslZF0iLCAobG9uZyl0LT5rZXkudHZfc2VjLAorICAgICAgICAgICAobG9uZyl0LT5rZXkudHZfdXNlYywgaSk7CisgIH0KKworICBmb3IoY291bnQ9MCwgbm9kZSA9IHQtPnNhbWU7IG5vZGU7IG5vZGUgPSBub2RlLT5zYW1lLCBjb3VudCsrKQorICAgIDsKKworICBpZihvdXRwdXQpIHsKKyAgICBpZihjb3VudCkKKyAgICAgIHByaW50ZigiIFslZCBtb3JlXVxuIiwgY291bnQpOworICAgIGVsc2UKKyAgICAgIHByaW50ZigiXG4iKTsKKyAgfQorCisgIHNwbGF5cHJpbnQodC0+c21hbGxlciwgZCsxLCBvdXRwdXQpOworfQorCitVTklUVEVTVF9TVEFSVAorCisvKiBudW1iZXIgb2Ygbm9kZXMgdG8gYWRkIHRvIHRoZSBzcGxheSB0cmVlICovCisjZGVmaW5lIE5VTV9OT0RFUyA1MAorCisgIHN0cnVjdCBDdXJsX3RyZWUgKnJvb3Q7CisgIHN0cnVjdCBDdXJsX3RyZWUgbm9kZXNbTlVNX05PREVTXTsKKyAgaW50IHJjOworICBpbnQgaTsKKyAgcm9vdCA9IE5VTEw7ICAgICAgICAgICAgICAvKiB0aGUgZW1wdHkgdHJlZSAqLworCisgIGZvcihpID0gMDsgaSA8IE5VTV9OT0RFUzsgaSsrKSB7CisgICAgc3RydWN0IHRpbWV2YWwga2V5OworCisgICAga2V5LnR2X3NlYyA9IDA7CisgICAga2V5LnR2X3VzZWMgPSAoNTQxKmkpJTEwMjM7CisKKyAgICBub2Rlc1tpXS5wYXlsb2FkID0gKHZvaWQgKilrZXkudHZfdXNlYzsgLyogZm9yIHNpbXBsaWNpdHkgKi8KKyAgICByb290ID0gQ3VybF9zcGxheWluc2VydChrZXksIHJvb3QsICZub2Rlc1tpXSk7CisgIH0KKworICBwdXRzKCJSZXN1bHQ6Iik7CisgIHNwbGF5cHJpbnQocm9vdCwgMCwgMSk7CisKKyAgZm9yKGkgPSAwOyBpIDwgTlVNX05PREVTOyBpKyspIHsKKyAgICBpbnQgcmVtID0gKGkrNyklTlVNX05PREVTOworICAgIHByaW50ZigiVHJlZSBsb29rOlxuIik7CisgICAgc3BsYXlwcmludChyb290LCAwLCAxKTsKKyAgICBwcmludGYoInJlbW92ZSBwb2ludGVyICVkLCBwYXlsb2FkICVsZFxuIiwgcmVtLAorICAgICAgICAgICAobG9uZykobm9kZXNbcmVtXS5wYXlsb2FkKSk7CisgICAgcmMgPSBDdXJsX3NwbGF5cmVtb3ZlYnlhZGRyKHJvb3QsICZub2Rlc1tyZW1dLCAmcm9vdCk7CisgICAgaWYocmMpIHsKKyAgICAgIC8qIGZhaWxlZCEgKi8KKyAgICAgIHByaW50ZigicmVtb3ZlICVkIGZhaWxlZCFcbiIsIHJlbSk7CisgICAgICBmYWlsKCJyZW1vdmUiKTsKKyAgICB9CisgIH0KKworVU5JVFRFU1RfU1RPUAorCisKKworCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC90ZXN0cy92YWxncmluZC5wbSBiL2N1cmwtNy4yNS4wL3Rlc3RzL3ZhbGdyaW5kLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NTIzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC90ZXN0cy92YWxncmluZC5wbQpAQCAtMCwwICsxLDExMCBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEwLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3VzZSBGaWxlOjpCYXNlbmFtZTsKKworc3ViIHZhbGdyaW5kcGFyc2UgeworICAgIG15ICgkc3JjZGlyLCAgICAgIyB0aGUgZGlyIGluIHdoaWNoIHRoZSBydW50ZXN0cyBzY3JpcHQgcmVzaWRlcworICAgICAgICAkc3NsZW5hYmxlZCwKKyAgICAgICAgJGZpbGUpID0gQF87CisgICAgbXkgJGxlYWs7CisgICAgbXkgJGludmFsaWRyZWFkOworICAgIG15ICR1bmluaXRlZHZhcjsKKyAgICBteSAkZXJyb3I7CisgICAgbXkgJHBhcnRpYWw7CisgICAgbXkgJHVzOworCisgICAgbXkgQG87CisKKyAgICBteSAkYnQ9MDsKKworICAgIG9wZW4oVkFMLCAiPCRmaWxlIik7CisgICAgd2hpbGUoPFZBTD4pIHsKKyAgICAgICAgaWYoJGJ0KSB7CisgICAgICAgICAgICAjIGJhY2sgdHJhY2UgcGFyc2luZworICAgICAgICAgICAgaWYoJF8gPX4gL149PShcZCspPT0gKihhdHxieSkgMHgoWzAtOUEtRl0rKTogKC4qKS8pIHsKKyAgICAgICAgICAgICAgICBteSAkdyA9ICQ0OworICAgICAgICAgICAgICAgIGlmKCR3ID1+IC8oLiopIFwoKFteOl0qKTooXGQrKS8pIHsKKyAgICAgICAgICAgICAgICAgICAgbXkgKCRmdW5jLCAkc291cmNlLCAkbGluZSk9KCQxLCAkMiwgJDMpOworICAgICAgICAgICAgICAgICAgICBteSAkc291cmNlbmFtZSA9IGJhc2VuYW1lKCRzb3VyY2UpOworICAgICAgICAgICAgICAgICAgICBpZigtZiAiJHNyY2Rpci8uLi9zcmMvJHNvdXJjZW5hbWUiIHx8CisgICAgICAgICAgICAgICAgICAgICAgIC1mICIkc3JjZGlyLy4uL2xpYi8kc291cmNlbmFtZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBpcyBvdXIgc291cmNlCisgIyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiRmdW5jKCkgYXQgJHNvdXJjZTokbGluZVxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICR1cysrOworICAgICAgICAgICAgICAgICAgICB9ICNlbHNlIHtwcmludCAiTm90IG91ciBzb3VyY2U6ICRmdW5jLCAkc291cmNlLCAkbGluZVxuIjt9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYoJHVzKSB7CisgICAgICAgICAgICAgICAgICAgICMgdGhlIHN0YWNrIHRyYWNlIGluY2x1ZGVkIHNvdXJjZSBkZXRhaWxzIGFib3V0IHVzCisKKyAgICAgICAgICAgICAgICAgICAgJGVycm9yKys7CisgICAgICAgICAgICAgICAgICAgIGlmKCRsZWFrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBvLCAiXG4gTGVha2VkICRsZWFrIGJ5dGVzXG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKCRpbnZhbGlkcmVhZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAbywgIlxuIFJlYWQgJGludmFsaWRyZWFkIGludmFsaWQgYnl0ZXNcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYoJHVuaW5pdGVkdmFyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBvLCAiXG4gQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRlcGVuZHMgb24gdW5pbml0aWFsaXNlZCB2YWx1ZShzKVxuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAkYnQgPSAwOyAjIG5vIG1vcmUgYmFja3RyYWNlCisgICAgICAgICAgICAgICAgJHVzID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmKCRfID1+IC8oXGQrKSBieXRlcyBpbiAoXGQrKSBibG9ja3MgYXJlIGRlZmluaXRlbHkgbG9zdC8pIHsKKyAgICAgICAgICAgICAgICAkbGVhayA9ICQxOworICAgICAgICAgICAgICAgIGlmKCRsZWFrKSB7CisgICAgICAgICAgICAgICAgICAgICRlcnJvcisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAkYnQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzaWYoJF8gPX4gL0ludmFsaWQgcmVhZCBvZiBzaXplIChcZCspLykgeworICAgICAgICAgICAgICAgICRpbnZhbGlkcmVhZCA9ICQxOworICAgICAgICAgICAgICAgICRlcnJvcisrOworICAgICAgICAgICAgICAgICRidCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNpZigkXyA9fiAvQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlLykgeworICAgICAgICAgICAgICAgICMgSWYgd2UgcmVxdWlyZSBTU0wsIHRoaXMgdGVzdCBjYXNlIG1vc3QgcHJvYmFseSBtYWtlcworICAgICAgICAgICAgICAgICMgdXMgdXNlIE9wZW5TU0wuIE9wZW5TU0wgcHJvZHVjZXMgbnVtZXJvdXMgdmFsZ3JpbmQKKyAgICAgICAgICAgICAgICAjIGVycm9ycyBvZiB0aGlzIGtpbmQsIHJlbmRlcmluZyBpdCBpbXBvc3NpYmxlIGZvciB1cyB0bworICAgICAgICAgICAgICAgICMgZGV0ZWN0ICh2YWxpZCkgcmVwb3J0cyBvbiBhY3R1YWwgY3VybCBvciBsaWJjdXJsIGNvZGUuCisKKyAgICAgICAgICAgICAgICBpZighJHNzbGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgJHVuaW5pdGVkdmFyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgJGVycm9yKys7CisgICAgICAgICAgICAgICAgICAgICRidCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkcGFydGlhbD0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjbG9zZShWQUwpOworICAgIHJldHVybiBAbzsKK30KKworMTsKZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3ZjNmN1cmwuZHN3IGIvY3VybC03LjI1LjAvdmM2Y3VybC5kc3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk5YmMxMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3ZjNmN1cmwuZHN3CkBAIC0wLDAgKzEsNDQgQEAKK01pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImxpYmN1cmwiPSIuXGxpYlx2YzZsaWJjdXJsLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImN1cmxzcmMiPSIuXHNyY1x2YzZjdXJsc3JjLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGliY3VybA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK0dsb2JhbDoNCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDM+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KZGlmZiAtLWdpdCBhL2N1cmwtNy4yNS4wL3dpbmJ1aWxkL0JVSUxELldJTkRPV1MudHh0IGIvY3VybC03LjI1LjAvd2luYnVpbGQvQlVJTEQuV0lORE9XUy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2ODExMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwtNy4yNS4wL3dpbmJ1aWxkL0JVSUxELldJTkRPV1MudHh0CkBAIC0wLDAgKzEsNjggQEAKK0J1aWxkaW5nIHdpdGggVmlzdWFsIEMrKywgcHJlcmVxdWlzZXMNCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIGNvbXBpbGUsIGJ1aWxkIGFuZCBpbnN0YWxsIGN1cmwgYW5kIGxpYmN1cmwNCisgICBmcm9tIHNvdXJjZXMgdXNpbmcgdGhlIFZpc3VhbCBDKysgYnVpbGQgdG9vbC4gVG8gYnVpbGQgd2l0aCBWQysrLCB5b3Ugd2lsbA0KKyAgIG9mIGNvdXJzZSBoYXZlIHRvIGZpcnN0IGluc3RhbGwgVkMrKy4gVGhlIG1pbmltdW0gcmVxdWlyZWQgdmVyc2lvbiBvZg0KKyAgIFZDIGlzIDYgKHBhcnQgb2YgVmlzdWFsIFN0dWRpbyA2KS4gSG93ZXZlciB1c2luZyBhIG1vcmUgcmVjZW50IHZlcnNpb24gbGlrZQ0KKyAgIDIwMDggKHZjOSkgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQuDQorDQorICAgVkMrKyBpcyBhbHNvIHBhcnQgb2YgdGhlIFdpbmRvd3MgUGxhdGZvcm0gU0RLLiBZb3UgZG8gbm90IGhhdmUgdG8gaW5zdGFsbA0KKyAgIHRoZSBmdWxsIFZpc3VhbCBTdHVkaW8gb3IgVmlzdWFsIEMrKyBpZiBhbGwgeW91IHdhbnQgaXMgdG8gYnVpbGQgY3VybC4NCisNCisgICBUaGUgUGxhdGZvcm0gU0RLIGNhbiBiZSBmZXRjaGVkIGhlcmUsIGZyZWVseToNCisNCisgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL2JiOTgwOTI0DQorDQorICAgSWYgeW91IHdpc2ggdG8gc3VwcG9ydCB6bGliLCBvcGVuc3NsLCBzc2gyLCB5b3Ugd2lsbCBoYXZlIHRvIGRvd25sb2FkDQorICAgdGhlbSBzZXBhcmF0ZWx5IGFuZCBjb3B5IHRoZW0gdG8gdGhlIGRlcHMgZGlyZWN0b3J5IGFzIHNob3duIGJlbG93Og0KKyAgIA0KKyAgIHNvbWVkaXJlY3RvcnlcDQorICAgIHxfY3VybC1zcmMNCisgICAgfCB8X3dpbmJ1aWxkDQorICAgIHwNCisgICAgfF9kZXBzDQorICAgICAgfF8gbGliDQorICAgICAgfF8gaW5jbHVkZQ0KKyAgICAgIHxfIGJpbg0KKw0KKyAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIHRoZSBkZXBzIGRpcmVjdG9yeSBpbiBzb21lIG90aGVyIHJhbmRvbQ0KKyAgIHBsYWNlcyBhbmQgdGVsbCB0aGUgTWFrZWZpbGUgaXRzIGxvY2F0aW9uIHVzaW5nIHRoZSBXSVRIX0RFVkVMIG9wdGlvbi4NCisNCitCdWlsZGluZyB3aXRoIFZpc3VhbCBDKysNCis9PT09PT09PT09PT09PT09PT09PT09PT0NCisNCitPcGVuIGEgVmlzdWFsIFN0dWRpbyBDb21tYW5kIHByb21wdCBvciB0aGUgU0RLIENNRCBzaGVsbC4NCisNCisgICAgVXNpbmcgdGhlIENNRCBTaGVsbDoNCisgICAgIGNob29zZSB0aGUgcmlnaHQgZW52aXJvbm1lbnQgdmlhIHRoZSBzZXRlbnYgY29tbWFuZCAoc2VlIHNldGVudiAvPykNCisgICAgIGZvciB0aGUgZnVsbCBsaXN0IG9mIG9wdGlvbnMuIHNldGVudiAveHAgL3g4NiAvcmVsZWFzZSBmb3IgZXhhbXBsZS4NCisNCisgICAgVXNpbmcgdGhlIFZpc3VhbCBTdHVkaW8gY29tbWFuZCBwcm9tcHQgU2hlbGw6DQorICAgICBFdmVyeXRoaW5nIGlzIGFscmVhZHkgcHJlLWNvbmZpZ3VyZWQgYnkgY2FsbGluZyBvbmUgb2YgdGhlIGNvbW1hbmQNCisgICAgIHByb21wdC4NCisNCitPbmNlIHlvdSBhcmUgaW4gdGhlIGNvbnNvbGUsIGdvIHRvIHRoZSB3aW5idWlsZCBkaXJlY3RvcnkgaW4gdGhlIEN1cmwgDQorc291cmNlczoNCisgICAgY2QgY3VybC1zcmNcd2luYnVpbGQNCisNCitUaGVuIHlvdSBjYW4gY2FsbCBubWFrZSAvZiBtYWtlZmlsZSB3aXRoIHRoZSBkZXNpcmVkIG9wdGlvbnMgKHNlZSBiZWxvdykuDQorVGhlIGJ1aWxkcyB3aWxsIGJlIGluIHRoZSB0b3Agc3JjIGRpcmVjdG9yeSwgYnVpbGRzXCBkaXJlY3RvcnksIGluIA0KK2EgZGlyZWN0b3J5IG5hbWVkIHVzaW5nIHRoZSBvcHRpb25zIGdpdmVuIHRvIHRoZSBubWFrZSBjYWxsLg0KKw0KK25tYWtlIC9mIG1ha2VmaWxlLnZjIG1vZGU9PHN0YXRpYyBvciBkbGw+IDxvcHRpb25zPg0KK3doZXJlIDxvcHRpb25zPiBpcyBvbmUgb3IgbWFueSBvZjoNCisgIFZDPTw2LDcsOCw5LDEwPiAgICAgICAgICAgICAgLSBWQyB2ZXJzaW9ucw0KKyAgV0lUSF9ERVZFTD08cGF0aD4gICAgICAgICAgICAtIFBhdGhzIGZvciB0aGUgZGV2ZWxvcG1lbnQgZmlsZXMgKFNTTCwgemxpYiwgZXRjLikNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHRvIHNpYmJsaW5nIGRpcmVjdG9yeSBkZXBzOiAuLi9kZXBzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlicmFyaWVzIGNhbiBiZSBmZXRjaGVkIGF0IGh0dHA6Ly9wZWNsMi5waHAubmV0L2Rvd25sb2Fkcy9waHAtd2luZG93cy1idWlsZHMvDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5jb21wcmVzcyB0aGVtIGludG8gdGhlIGRlcHMgZm9sZGVyLg0KKyAgV0lUSF9TU0w9PGRsbCBvciBzdGF0aWM+ICAgICAtIEVuYWJsZSBPcGVuU1NMIHN1cHBvcnQsIERMTCBvciBzdGF0aWMNCisgIFdJVEhfWkxJQj08ZGxsIG9yIHN0YXRpYz4gICAgLSBFbmFibGUgWkxpYiBzdXBwb3J0LCBETEwgb3Igc3RhdGljDQorICBXSVRIX1NTSDI9PGRsbCBvciBzdGF0aWM+ICAgIC0gRW5hYmxlIExJYlNTSDIgc3VwcG9ydCwgRExMIG9yIHN0YXRpYw0KKyAgVVNFX1NTU1BJPTx5ZXMgb3Igbm8+ICAgICAgICAtIEVuYWJsZSBTU1BJIHN1cHBvcnQsIGRlZmF1bHQgdG8geWVzDQorICBVU0VfSVBWNj08eWVzIG9yIG5vPiAgICAgICAgIC0gRW5hYmxlIElQVjYsIGRlZmF1bHQgdG8geWVzDQorICBERUJVRz08eWVzIG9yIG5vPiAgICAgICAgICAgIC0gRGVidWcgYnVpbGRzDQorICBVU0VfSUROPTx5ZXMgb3Igbm8+ICAgICAgICAgIC0gV2hldGVyIG9yIG5vdCB0byB1c2UgSUROIFdpbmRvd3MgQVBJcy4gUmVxdWlyZXMgV2luZG93cyBWaXN0YSBvciBsYXRlci4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0byBpbnN0YWxsIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9kb3dubG9hZHMvZGV0YWlscy5hc3B4P0ZhbWlseUlEPUFENjE1OEQ3LUREQkEtNDE2QS05MTA5LTA3NjA3NDI1QTgxNQ0KKyAgR0VOX1BEQj08eWVzIG9yIG5vPiAgICAgICAgICAtIEdlbmVyYXRlIFByb2dyYW0gRGF0YWJhc2UgKGRlYnVnIHN5bWJvbHMgcmVsZWFzZSBidWlsZCkNCisNCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC93aW5idWlsZC9NYWtlZmlsZS52YyBiL2N1cmwtNy4yNS4wL3dpbmJ1aWxkL01ha2VmaWxlLnZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWZlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJsLTcuMjUuMC93aW5idWlsZC9NYWtlZmlsZS52YwpAQCAtMCwwICsxLDE0MCBAQAorIUlGICIkKE1PREUpIj09InN0YXRpYyINCitUQVJHRVQgPSAkKExJQl9OQU1FX1NUQVRJQykNCitBU19ETEwgPSBmYWxzZQ0KK0NGR1NFVD10cnVlDQorIUVMU0VJRiAiJChNT0RFKSI9PSJkbGwiDQorVEFSR0VUID0gJChMSUJfTkFNRV9ETEwpDQorQVNfRExMID0gdHJ1ZQ0KK0NGR1NFVD10cnVlDQorIUVMU0UNCishTUVTU0FHRSBJbnZhbGlkIG1vZGU6ICQoTU9ERSkNCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKyMgVXNhZ2UNCisjDQorDQorIU1FU1NBR0UgVXNhZ2U6IG5tYWtlIC9mIG1ha2VmaWxlLnZjIG1vZGU9PHN0YXRpYyBvciBkbGw+IDxvcHRpb25zPg0KKyFNRVNTQUdFIHdoZXJlIDxvcHRpb25zPiBpcyBvbmUgb3IgbWFueSBvZjoNCishTUVTU0FHRSAgIFZDPTw2LDcsOCw5LDEwPiAgICAgICAgICAgICAgLSBWQyB2ZXJzaW9ucw0KKyFNRVNTQUdFICAgV0lUSF9ERVZFTD08cGF0aD4gICAgICAgICAgICAtIFBhdGhzIGZvciB0aGUgZGV2ZWxvcG1lbnQgZmlsZXMgKFNTTCwgemxpYiwgZXRjLikNCishTUVTU0FHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHRvIHNpYmJsaW5nIGRpcmVjdG9yeSBkZXBzOiAuLi9kZXBzDQorIU1FU1NBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlicmFyaWVzIGNhbiBiZSBmZXRjaGVkIGF0IGh0dHA6Ly9wZWNsMi5waHAubmV0L2Rvd25sb2Fkcy9waHAtd2luZG93cy1idWlsZHMvDQorIU1FU1NBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5jb21wcmVzcyB0aGVtIGludG8gdGhlIGRlcHMgZm9sZGVyLg0KKyFNRVNTQUdFICAgV0lUSF9TU0w9PGRsbCBvciBzdGF0aWM+ICAgICAtIEVuYWJsZSBPcGVuU1NMIHN1cHBvcnQsIERMTCBvciBzdGF0aWMNCishTUVTU0FHRSAgIFdJVEhfWkxJQj08ZGxsIG9yIHN0YXRpYz4gICAgLSBFbmFibGUgWkxpYiBzdXBwb3J0LCBETEwgb3Igc3RhdGljDQorIU1FU1NBR0UgICBXSVRIX1NTSDI9PGRsbCBvciBzdGF0aWM+ICAgIC0gRW5hYmxlIExJYlNTSDIgc3VwcG9ydCwgRExMIG9yIHN0YXRpYw0KKyFNRVNTQUdFICAgVVNFX1NTU1BJPTx5ZXMgb3Igbm8+ICAgICAgICAtIEVuYWJsZSBTU1BJIHN1cHBvcnQsIGRlZmF1bHQgdG8geWVzDQorIU1FU1NBR0UgICBFTkFCTEVfSVBWNj08eWVzIG9yIG5vPiAgICAgICAgIC0gRW5hYmxlIElQVjYsIGRlZmF1bHQgdG8geWVzDQorIU1FU1NBR0UgICBERUJVRz08eWVzIG9yIG5vPiAgICAgICAgICAgIC0gRGVidWcgYnVpbGRzDQorIU1FU1NBR0UgICBFTkFCTEVfSUROPTx5ZXMgb3Igbm8+ICAgICAgIC0gV2hldGVyIG9yIG5vdCB0byB1c2UgSUROIFdpbmRvd3MgQVBJcy4gUmVxdWlyZXMgV2luZG93cyBWaXN0YSBvciBsYXRlci4NCishTUVTU0FHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0byBpbnN0YWxsIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9kb3dubG9hZHMvZGV0YWlscy5hc3B4P0ZhbWlseUlEPUFENjE1OEQ3LUREQkEtNDE2QS05MTA5LTA3NjA3NDI1QTgxNQ0KKyFNRVNTQUdFICAgR0VOX1BEQj08eWVzIG9yIG5vPiAgICAgICAgICAtIEdlbmVyYXRlIFByb2dyYW0gRGF0YWJhc2UgKGRlYnVnIHN5bWJvbHMgcmVsZWFzZSBidWlsZCkNCishRVJST1IgcGxlYXNlIGNob29zZSBhIHZhbGlkIG1vZGUNCisNCishRU5ESUYNCisNCishSU5DTFVERSAiLi4vbGliL01ha2VmaWxlLmluYyINCitMSUJDVVJMX09CSlM9JChDU09VUkNFUzouYz0ub2JqKQ0KKw0KK3RvcF9zcmNkaXI9Li4NCishSU5DTFVERSAiLi4vc3JjL01ha2VmaWxlLmluYyINCisNCisjIGh1Z2VoZWxwIGhhcyBhIHNwZWNpYWwgcnVsZQ0KK0NVUkxfT0JKUz0gJChDVVJMX0NGSUxFUzpodWdlaGVscC5jPSkNCisNCitDVVJMX09CSlM9JChDVVJMX09CSlM6LmM9Lm9iaikNCisNCisjIGRlZmF1bHQgb3B0aW9ucw0KKyFJRk5ERUYgVVNFX1NTUEkNCitVU0VfU1NQST10cnVlDQorIUVORElGDQorDQorIUlGTkRFRiBFTkFCTEVfSVBWNg0KK1VTRV9JUFY2ICAgPSB0cnVlDQorIUVMU0VJRiAiJChFTkFCTEVfSVBWNikiPT0ieWVzIg0KK1VTRV9JUFY2ICAgPSB0cnVlDQorIUVORElGDQorDQorIUlGTkRFRiBFTkFCTEVfSURODQorVVNFX0lETj10cnVlDQorIUVORElGDQorDQorQ09ORklHX05BTUVfTElCID0gbGliY3VybA0KKw0KKyFJRiAiJChXSVRIX1NTTCkiPT0iZGxsIg0KK1VTRV9TU0wgICAgICA9IHRydWUNCitTU0w9ZGxsDQorIUVMU0VJRiAiJChXSVRIX1NTTCkiPT0ic3RhdGljIg0KK1VTRV9TU0wgICAgICA9IHRydWUNCitTU0w9c3RhdGljDQorIUVORElGDQorDQorIUlGICIkKFdJVEhfWkxJQikiPT0iZGxsIg0KK1VTRV9aTElCICAgICA9IHRydWUNCit6bGliPWRsbA0KKyFFTFNFSUYgIiQoV0lUSF9aTElCKSI9PSJzdGF0aWMiDQorVVNFX1pMSUIgICAgPSB0cnVlDQorWkxJQj1zdGF0aWMNCishRU5ESUYNCisNCishSUYgIiQoV0lUSF9TU0gyKSI9PSJkbGwiDQorVVNFX1NTSDIgICAgPSB0cnVlDQorU1NIMj1kbGwNCishRUxTRUlGICIkKFdJVEhfU1NIMikiPT0ic3RhdGljIg0KK1VTRV9TU0gyICAgICAgPSB0cnVlDQorU1NIMj1zdGF0aWMNCishRU5ESUYNCisNCishSUYgIiQoREVCVUcpIj09InllcyINCitDT05GSUdfTkFNRV9MSUIgPSAkKENPTkZJR19OQU1FX0xJQiktZGVidWcNCishRUxTRQ0KK0NPTkZJR19OQU1FX0xJQiA9ICQoQ09ORklHX05BTUVfTElCKS1yZWxlYXNlDQorIUVORElGDQorDQorIUlGICIkKEFTX0RMTCkiID09ICJ0cnVlIg0KK0NPTkZJR19OQU1FX0xJQiA9ICQoQ09ORklHX05BTUVfTElCKS1kbGwNCishRUxTRQ0KK0NPTkZJR19OQU1FX0xJQiA9ICQoQ09ORklHX05BTUVfTElCKS1zdGF0aWMNCishRU5ESUYNCisNCishSUYgIiQoVVNFX1NTTCkiPT0idHJ1ZSINCitDT05GSUdfTkFNRV9MSUIgPSAkKENPTkZJR19OQU1FX0xJQiktc3NsLSQoU1NMKQ0KKyFFTkRJRg0KKw0KKyFJRiAiJChVU0VfWkxJQikiPT0idHJ1ZSINCitDT05GSUdfTkFNRV9MSUIgPSAkKENPTkZJR19OQU1FX0xJQiktemxpYi0kKFpMSUIpDQorIUVORElGDQorDQorIUlGICIkKFVTRV9TU0gyKSI9PSJ0cnVlIg0KK0NPTkZJR19OQU1FX0xJQiA9ICQoQ09ORklHX05BTUVfTElCKS1zc2gyLSQoU1NIMikNCishRU5ESUYNCisNCishSUYgIiQoVVNFX0lQVjYpIj09InRydWUiDQorQ09ORklHX05BTUVfTElCID0gJChDT05GSUdfTkFNRV9MSUIpLWlwdjYNCishRU5ESUYNCisNCishSUYgIiQoVVNFX1NTUEkpIj09InRydWUiDQorQ09ORklHX05BTUVfTElCID0gJChDT05GSUdfTkFNRV9MSUIpLXNzcGkNCishRU5ESUYNCisNCishTUVTU0FHRSBjb25maWd1cmF0aW9uIG5hbWU6ICQoQ09ORklHX05BTUVfTElCKQ0KKw0KK0JVSUxEX0RJUj0uLi9idWlsZHMvJChDT05GSUdfTkFNRV9MSUIpDQorTElCQ1VSTF9ESVJPQkogPSAuLlxidWlsZHNcJChDT05GSUdfTkFNRV9MSUIpLW9iai1saWINCitDVVJMX0RJUk9CSiA9IC4uXGJ1aWxkc1wkKENPTkZJR19OQU1FX0xJQiktb2JqLWN1cmwNCitESVJESVNUID0gLi5cYnVpbGRzXCQoQ09ORklHX05BTUVfTElCKVwNCisNCiskKE1PREUpOg0KKwlAU0VUIExJQkNVUkxfRElST0JKPSQoTElCQ1VSTF9ESVJPQkopDQorCUBTRVQgTUFDUk9fTkFNRT1MSUJDVVJMX09CSlMNCisJQFNFVCBPVVRGSUxFPUxJQkNVUkxfT0JKUy5pbmMNCisJQGdlbl9yZXNwX2ZpbGUuYmF0ICQoTElCQ1VSTF9PQkpTKQ0KKwlAU0VUIExJQkNVUkxfRElST0JKPSQoQ1VSTF9ESVJPQkopDQorCUBTRVQgTUFDUk9fTkFNRT1DVVJMX09CSlMNCisJQFNFVCBPVVRGSUxFPUNVUkxfT0JKUy5pbmMNCisJQGdlbl9yZXNwX2ZpbGUuYmF0ICQoQ1VSTF9PQkpTKQ0KKwlAJChNQUtFKSAvTk9MT0dPIC9GIE1ha2VmaWxlQnVpbGQudmMNCisNCitjb3B5X2Zyb21fbGliOg0KKwllY2hvIGNvcHlpbmcgLmMuLi4NCisJRk9SICUlaSBJTiAoJChDVVJMWF9PTkVTOi89XCkpIERPIGNvcHkgJSVpIC4uXHNyY1wNCmRpZmYgLS1naXQgYS9jdXJsLTcuMjUuMC93aW5idWlsZC9NYWtlZmlsZUJ1aWxkLnZjIGIvY3VybC03LjI1LjAvd2luYnVpbGQvTWFrZWZpbGVCdWlsZC52YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzhiM2VhCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvd2luYnVpbGQvTWFrZWZpbGVCdWlsZC52YwpAQCAtMCwwICsxLDQyNiBAQAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisjICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisjIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisjCisjIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgTWFrZWZpbGUgZm9yIGJ1aWxkaW5nIGxpYmN1cmwgd2l0aCBNU1ZDIDYsIDcsIDgsIDkgYW5kIDEwCisjCisjIFVzYWdlOiBzZWUgdXNhZ2UgbWVzc2FnZSBiZWxvdworIyAgICAgICAgU2hvdWxkIGJlIGludm9rZWQgZnJvbSB3aW5idWlsZCBkaXJlY3RvcnkKKyMgICAgICAgIEVkaXQgdGhlIHBhdGhzIGFuZCBkZXNpcmVkIGxpYnJhcnkgbmFtZQorIyAgICAgICAgU1NMIHBhdGggaXMgb25seSByZXF1aXJlZCBpZiB5b3UgaW50ZW5kIGNvbXBpbGluZworIyAgICAgICAgd2l0aCBTU0wuCisjCisjIFRoaXMgbWFrZSBmaWxlIGxlYXZlcyB0aGUgcmVzdWx0IGVpdGhlciBhIC5saWIgb3IgLmRsbCBmaWxlCisjIGluIHRoZSBcbGliIGRpcmVjdG9yeS4gSXQgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBcbGliCisjIGRpcmVjdG9yeS4KKyMKKyMgQW4gb3B0aW9uIHdvdWxkIGhhdmUgYmVlbiB0byBhbGxvdyB0aGUgc291cmNlIGRpcmVjdG9yeSB0bworIyBiZSBzcGVjaWZpZWQsIGJ1dCBJIHNhdyBubyByZXF1aXJlbWVudC4KKyMKKyMgQW5vdGhlciBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGxlYXZlIHRoZSAubGliIGFuZCAuZGxsCisjIGZpbGVzIGluIHRoZSAiY2ZnIiBkaXJlY3RvcnksIGJ1dCB0aGVuIHRoZSBtYWtlIGZpbGUKKyMgaW4gXHNyYyB3b3VsZCBuZWVkIHRvIGJlIGNoYW5nZWQuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitDRkdTRVQ9RkFMU0UKK1dJTkJVSUxEX0RJUj1gY2RgCitaSVAgICAgICAgID0gemlwLmV4ZQorCishSUYgIiQoVkMpIj09IjYiCitDQ19OT0RFQlVHICA9IGNsLmV4ZSAvTzIgL0ROREVCVUcKK0NDX0RFQlVHICAgID0gY2wuZXhlIC9PZCAvR20gL1ppIC9EX0RFQlVHIC9HWgorQ0ZMQUdTICAgICA9IC9JLiAvSS4uL2luY2x1ZGUgL25vbG9nbyAvVzMgL0dYIC9EV0lOMzIgL1lYIC9GRCAvYyAvREJVSUxESU5HX0xJQkNVUkwKKyFFTFNFCitDQ19OT0RFQlVHICA9IGNsLmV4ZSAvTzIgL0ROREVCVUcKK0NDX0RFQlVHICAgID0gY2wuZXhlIC9PZCAvRF9ERUJVRyAvUlRDMSAvWjcgL0xEZCAvVzMKK0NGTEFHUyAgICAgID0gL0kuIC9JLi4vaW5jbHVkZSAvbm9sb2dvIC9XMyAvRUhzYyAvRFdJTjMyIC9GRCAvYyAvREJVSUxESU5HX0xJQkNVUkwKKyFFTkRJRgorCitMRkxBR1MgICAgID0gL25vbG9nbyAvbWFjaGluZTokKE1BQ0hJTkUpCitMTktETEwgICAgID0gbGluay5leGUgL0RMTAorTE5LTElCICAgICA9IGxpbmsuZXhlIC9saWIKKworQ0ZMQUdTX1BEQiA9IC9aaQorTEZMQUdTX1BEQiA9IC9pbmNyZW1lbnRhbDpubyAvb3B0OnJlZixpY2YKKworQ0ZMQUdTX0xJQkNVUkxfU1RBVElDICA9IC9EQ1VSTF9TVEFUSUNMSUIKKworTElCX05BTUVfU1RBVElDICAgICAgICA9IGxpYmN1cmxfYS5saWIKK0xJQl9OQU1FX1NUQVRJQ19ERUJVRyAgPSBsaWJjdXJsX2FfZGVidWcubGliCitMSUJfTkFNRV9ETEwgICAgICAgICAgID0gbGliY3VybC5kbGwKK0xJQl9OQU1FX0lNUCAgICAgICAgICAgPSBsaWJjdXJsLmxpYgorTElCX05BTUVfRExMX0RFQlVHICAgICA9IGxpYmN1cmxfZGVidWcuZGxsCitMSUJfTkFNRV9JTVBfREVCVUcgICAgID0gbGliY3VybF9kZWJ1Zy5saWIKKworIyBDVVJMIENvbW1hbmQgc2VjdGlvbgorUFJPR1JBTV9OQU1FID0gY3VybC5leGUKK0NVUkxfQ0ZMQUdTICAgPSAgL0kuLi9saWIgL0kuLi9pbmNsdWRlIC9ub2xvZ28gL1czIC9FSHNjIC9EV0lOMzIgL0ZEIC9jCitDVVJMX0xGTEFHUyAgID0gL25vbG9nbyAvb3V0OiQoRElSRElTVClcYmluXCQoUFJPR1JBTV9OQU1FKSAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6JChNQUNISU5FKQorQ1VSTF9SRVNGTEFHUyA9IC9pLi4vaW5jbHVkZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBOb3RoaW5nIG1vcmUgdG8gZG8gYmVsb3cgdGhpcyBsaW5lIQorTElCQ1VSTF9TUkNfRElSID0gLi5cbGliCitDVVJMX1NSQ19ESVIgPSAuLlxzcmMKKworIUlGTkRFRiBXSVRIX0RFVkVMCitXSVRIX0RFVkVMICAgICAgICAgID0gLi4vLi4vZGVwcworIUVORElGCitERVZFTF9JTkNMVURFICA9ICQoV0lUSF9ERVZFTCkvaW5jbHVkZQorREVWRUxfTElCICAgICAgPSAkKFdJVEhfREVWRUwpL2xpYgorREVWRUxfQklOICAgICAgPSAkKFdJVEhfREVWRUwpL2JpbgorCitDRkxBR1MgICAgICAgICA9ICQoQ0ZMQUdTKSAvSSIkKERFVkVMX0lOQ0xVREUpIgorTEZMQUdTICAgICAgICAgPSAkKExGTEFHUykgIi9MSUJQQVRIOiQoREVWRUxfTElCKSIKKworIUlGICIkKFdJVEhfU1NMKSI9PSJkbGwiCitTU0xfTElCUyAgICAgPSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliCitVU0VfU1NMICAgICAgPSB0cnVlCitTU0w9ZGxsCishRUxTRUlGICIkKFdJVEhfU1NMKSI9PSJzdGF0aWMiCitTU0xfTElCUyAgICAgPSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliIGdkaTMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYgorVVNFX1NTTCAgICAgID0gdHJ1ZQorU1NMPXN0YXRpYworIUVORElGCisKKyFJRkRFRiBVU0VfU1NMCitTU0xfQ0ZMQUdTICAgPSAvRFVTRV9TU0xFQVkgL0kiJChERVZFTF9JTkNMVURFKS9vcGVuc3NsIgorIUVORElGCisKKyFJRiAiJChXSVRIX1pMSUIpIj09ImRsbCIKK1pMSUJfTElCUyAgID0gemxpYi5saWIKK1pMSUJfQ0ZMQUdTID0gL0RIQVZFX1pMSUJfSCAvREhBVkVfWkxJQiAvREhBVkVfTElCWgorVVNFX1pMSUIgICAgID0gdHJ1ZQoremxpYj1kbGwKKyFFTFNFSUYgIiQoV0lUSF9aTElCKSI9PSJzdGF0aWMiCitaTElCX0xJQlMgICA9IHpsaWJfYS5saWIKK1pMSUJfQ0ZMQUdTID0gL0RIQVZFX1pMSUJfSCAvREhBVkVfWkxJQiAvREhBVkVfTElCWgorVVNFX1pMSUIgICAgPSB0cnVlCitaTElCPXN0YXRpYworIUVORElGCisKKyFJRkRFRiBVU0VfWkxJQgorWkxJQl9DRkxBR1MgPSAvREhBVkVfWkxJQl9IIC9ESEFWRV9aTElCIC9ESEFWRV9MSUJaCishRU5ESUYKKworIUlGICIkKFdJVEhfU1NIMikiPT0iZGxsIgorU1NIMl9MSUJTICAgPSBsaWJzc2gyLmxpYgorVVNFX1NTSDIgICAgPSB0cnVlCitTU0gyPWRsbAorIUVMU0VJRiAiJChXSVRIX1NTSDIpIj09InN0YXRpYyIKK1NTSDJfTElCUyAgID0gbGlic3NoMl9hX2RlYnVnLmxpYgorVVNFX1NTSDIgICAgPSB0cnVlCitTU0gyPXN0YXRpYworIUVORElGCisKKyFJRkRFRiBVU0VfU1NIMgorU1NIMl9DRkxBR1MgICA9IC9ESEFWRV9MSUJTU0gyIC9ESEFWRV9MSUJTU0gyX0ggL0RMSUJTU0gyX1dJTjMyIC9ETElCU1NIMl9MSUJSQVJZIC9EVVNFX0xJQlNTSDIKK1NTSDJfQ0ZMQUdTICAgPSAkKFNTSDJfQ0ZMQUdTKSAvSSQoV0lUSF9ERVZFTCkvaW5jbHVkZS9saWJzc2gyCishRU5ESUYKKworIUlGTkRFRiBVU0VfU1NQSQorVVNFX1NTUEk9eWVzCishRU5ESUYKKworIUlGICIkKFVTRV9TU1BJKSI9PSJ5ZXMiCitDRkxBR1NfU1NQSSA9IC9EVVNFX1dJTkRPV1NfU1NQSQorVVNFX1NTUEk9dHJ1ZQorIUVORElGCisKKyFJRk5ERUYgVVNFX0lQVjYKK1VTRV9JUFY2PXRydWUKKyFFTkRJRgorCishSUZOREVGIEVOQUJMRV9JRE4KK1VTRV9JRE4gICA9dHJ1ZQorIUVMU0VJRiAiJChVU0VfSUROKSI9PSJ5ZXMiCitVU0VfSUROICAgPXRydWUKKyFFTkRJRgorCishSUYgIiQoVVNFX0lETikiPT0idHJ1ZSIKK0NGTEFHUyAgICA9ICQoQ0ZMQUdTKSAvRFVTRV9XSU4zMl9JRE4KK0xGTEFHUyAgICA9ICQoTEZMQUdTKSBOb3JtYWxpei5saWIKKyFFTkRJRgorCishSUYgIiQoVVNFX0lQVjYpIj09InllcyIKK0NGTEFHUyA9ICQoQ0ZMQUdTKSAvRFVTRV9JUFY2CitVU0VfSVBWNj10cnVlCishRU5ESUYKKworIUlGICIkKEdFTl9QREIpIj09InllcyIKK0dFTl9QREI9dHJ1ZQorIUVORElGCisKKyFJRk5ERUYgTUFDSElORQorTUFDSElORSA9IFg4NgorIUVORElGCisKKyFJRkRFRiBFTUJFTkRfTUFOSUZFU1QKK01BTklGRVNUVE9PTCA9IG10IC1tYW5pZmVzdCAkKERJUkRJU1QpXCQoUFJPR1JBTV9OQU1FKS5tYW5pZmVzdCAtb3V0cHV0cmVzb3VyY2U6JChESVJESVNUKVwkKFBST0dSQU1fTkFNRSk7MQorIUVORElGCisKKyMgUnVudGltZSBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24KKyFJRiAiJChSVExJQkNGRykiID09ICJzdGF0aWMiCitSVExJQiAgPSAvTVQKK1JUTElCX0RFQlVHID0gL01UZAorIUVMU0UKK1JUTElCICAgPSAvTUQKK1JUTElCX0RFQlVHICA9IC9NRGQKKyFFTkRJRgorCishSUYgIiQoTU9ERSkiPT0ic3RhdGljIgorVEFSR0VUID0gJChMSUJfTkFNRV9TVEFUSUMpCitDVVJMX0xJQkNVUkxfTElCTkFNRT0kKExJQl9OQU1FX1NUQVRJQykKK0FTX0RMTCA9IGZhbHNlCitDRkdTRVQ9dHJ1ZQorIUVMU0VJRiAiJChNT0RFKSI9PSJkbGwiCitUQVJHRVQgPSAkKExJQl9OQU1FX0RMTCkKK0NVUkxfTElCQ1VSTF9MSUJOQU1FPSQoTElCX05BTUVfSU1QKQorQVNfRExMID0gdHJ1ZQorQ0ZHU0VUPXRydWUKKyFFTkRJRgorCitXSU5fTElCUyAgICA9IHdzMl8zMi5saWIgd2xkYXAzMi5saWIKKyFJRiAiJChDRkdTRVQpIiA9PSAiRkFMU0UiCishRVJST1IgcGxlYXNlIGNob29zZSBhIHZhbGlkIG1vZGUKKyFFTkRJRgorCitDT05GSUdfTkFNRV9MSUIgPSBsaWJjdXJsCisKKyMgQ1VSTF9YWCBtYWNyb3MgYXJlIGZvciB0aGUgY3VybC5leGUgY29tbWFuZAorCishSUYgIiQoREVCVUcpIj09InllcyIKK1JDX0ZMQUdTID0gL2RERUJVR0JVSUxEPTEgL0ZvICRAICQoTElCQ1VSTF9TUkNfRElSKVxsaWJjdXJsLnJjCitDQyAgICAgICAgICAgICAgPSAkKENDX0RFQlVHKSAkKFJUTElCX0RFQlVHKQorCitDVVJMX0NDICAgICAgICAgPSAkKENDKQorQ1VSTF9SQ19GTEFHUyA9IC9pLi4vaW5jbHVkZSAvZERFQlVHQlVJTEQ9MSAvRm8gJEAgJChDVVJMX1NSQ19ESVIpXGN1cmwucmMKK0NPTkZJR19OQU1FX0xJQiA9ICQoQ09ORklHX05BTUVfTElCKS1kZWJ1ZworIUVMU0UKK1JDX0ZMQUdTID0gL2RERUJVR0JVSUxEPTAgL0ZvICRAICQoTElCQ1VSTF9TUkNfRElSKVxsaWJjdXJsLnJjCitDQyAgICAgICAgICAgICAgPSAkKENDX05PREVCVUcpICQoUlRMSUIpCisKK0NVUkxfQ0MgICAgICAgICA9ICQoQ0MpCitDVVJMX1JDX0ZMQUdTID0gL2kuLi9pbmNsdWRlIC9kREVCVUdCVUlMRD0wIC9GbyAkQCAkKENVUkxfU1JDX0RJUilcY3VybC5yYworQ09ORklHX05BTUVfTElCID0gJChDT05GSUdfTkFNRV9MSUIpLXJlbGVhc2UKKyFFTkRJRgorCitDVVJMX0NDID0gJChDVVJMX0NDKSAkKENVUkxfQ0ZMQUdTKQorCishSUYgIiQoQVNfRExMKSIgPT0gInRydWUiCisKK0xOSyAgICAgID0gJChMTktETEwpICQoV0lOX0xJQlMpIC9vdXQ6JChMSUJfRElST0JKKVwkKFRBUkdFVCkKKyFJRiAiJChERUJVRykiPT0ieWVzIgorVEFSR0VUICAgID0gJChMSUJfTkFNRV9ETExfREVCVUcpCitMTksgICAgICAgPSAkKExOSykgL0RFQlVHIC9JTVBMSUI6JChMSUJfRElST0JKKVwkKExJQl9OQU1FX0lNUF9ERUJVRykKK0NVUkxfTElCUyA9IC9JTVBMSUI6JChMSUJfRElST0JKKVwkKExJQl9OQU1FX0lNUF9ERUJVRykKKyFFTFNFCitUQVJHRVQgICAgPSAkKExJQl9OQU1FX0RMTCkKK0xOSyAgICAgICA9ICQoTE5LKSAgL0lNUExJQjokKExJQl9ESVJPQkopXCQoTElCX05BTUVfSU1QKQorQ1VSTF9MSUJTID0gL0lNUExJQjokKExJQl9ESVJPQkopXCQoTElCX05BTUVfSU1QKQorIUVORElGCitSRVNPVVJDRSA9ICQoTElCX0RJUk9CSilcbGliY3VybC5yZXMKK0NPTkZJR19OQU1FX0xJQiA9ICQoQ09ORklHX05BTUVfTElCKS1kbGwKKworIyBBU19ETEwKKyFFTFNFCisKKyFJRiAiJChERUJVRykiPT0ieWVzIgorVEFSR0VUICAgPSAkKExJQl9OQU1FX1NUQVRJQ19ERUJVRykKKyFFTFNFCitUQVJHRVQgICA9ICQoTElCX05BTUVfU1RBVElDKQorIUVORElGCitMTksgICAgICA9ICQoTE5LTElCKSAkKFdJTl9MSUJTKSAvb3V0OiQoTElCX0RJUk9CSilcJChUQVJHRVQpCitDQyAgICAgICA9ICQoQ0MpICQoQ0ZMQUdTX0xJQkNVUkxfU1RBVElDKQorQ09ORklHX05BTUVfTElCID0gJChDT05GSUdfTkFNRV9MSUIpLXN0YXRpYworCisjIEFTX0RMTAorIUVORElGCisKKyFJRiAiJChVU0VfU1NMKSI9PSJ0cnVlIgorQ0ZMQUdTID0gJChDRkxBR1MpICQoU1NMX0NGTEFHUykKK0xGTEFHUyA9ICQoTEZMQUdTKSAkKFNTTF9MRkxBR1MpICQoU1NMX0xJQlMpCitDT05GSUdfTkFNRV9MSUIgPSAkKENPTkZJR19OQU1FX0xJQiktc3NsLSQoU1NMKQorIUVORElGCisKKyFJRiAiJChVU0VfWkxJQikiPT0idHJ1ZSIKK0NGTEFHUyA9ICQoQ0ZMQUdTKSAkKFpMSUJfQ0ZMQUdTKQorTEZMQUdTID0gJChMRkxBR1MpICQoWkxJQl9MRkxBR1MpICQoWkxJQl9MSUJTKQorQ09ORklHX05BTUVfTElCID0gJChDT05GSUdfTkFNRV9MSUIpLXpsaWItJChaTElCKQorIUVORElGCisKKyFJRiAiJChVU0VfU1NIMikiPT0idHJ1ZSIKK0NGTEFHUyA9ICQoQ0ZMQUdTKSAkKFNTSDJfQ0ZMQUdTKQorTEZMQUdTID0gJChMRkxBR1MpICQoU1NIMl9MRkxBR1MpICQoU1NIMl9MSUJTKQorQ09ORklHX05BTUVfTElCID0gJChDT05GSUdfTkFNRV9MSUIpLXNzaDItJChTU0gyKQorIUVORElGCisKKyFJRiAiJChVU0VfSVBWNikiPT0idHJ1ZSIKK0NGTEFHUyA9ICQoQ0ZMQUdTKSAkKENGTEFHU19JUFY2KQorQ09ORklHX05BTUVfTElCID0gJChDT05GSUdfTkFNRV9MSUIpLWlwdjYKKyFFTkRJRgorCishSUYgIiQoVVNFX1NTUEkpIj09InRydWUiCitDRkxBR1MgPSAkKENGTEFHUykgJChDRkxBR1NfU1NQSSkKK0NPTkZJR19OQU1FX0xJQiA9ICQoQ09ORklHX05BTUVfTElCKS1zc3BpCishRU5ESUYKKworIUlGICIkKEdFTl9QREIpIj09InRydWUiCitDRkxBR1MgPSAkKENGTEFHUykgJChDRkxBR1NfUERCKQorTEZMQUdTID0gJChMRkxBR1MpICQoTEZMQUdTX1BEQikKKyFFTkRJRgorCitMSUJfRElST0JKID0gLi5cYnVpbGRzXCQoQ09ORklHX05BTUVfTElCKS1vYmotbGliCitDVVJMX0RJUk9CSiA9IC4uXGJ1aWxkc1wkKENPTkZJR19OQU1FX0xJQiktb2JqLWN1cmwKK0RJUkRJU1QgPSAuLlxidWlsZHNcJChDT05GSUdfTkFNRV9MSUIpXAorCisjCisjIGN1cmwuZXhlCisjCitDVVJMX0xJTksgPSBsaW5rLmV4ZSAvaW5jcmVtZW50YWw6bm8gL2xpYnBhdGg6IiQoRElSRElTVClcbGliIgorCisjIUlGICIkKENGRykiID09ICJyZWxlYXNlLXNzaDItc3NsLWRsbC16bGliIgorI1RBUkdFVCAgID0gJChMSUJfTkFNRV9TVEFUSUMpCisjTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5MSUJTKSAkKFNTTExJQlMpICQoWkxJQkxJQlMpICAkKFNTSDJMSUJTKSAkKFNTTF9MRkxBR1MpICQoWkxJQl9MRkxBR1MpICQoTEZMQUdTU1NIKSAvb3V0OiQoTElCX0RJUk9CSilcJChUQVJHRVQpCisjQ0MgICAgICAgPSAkKENDTk9EQkcpICQoUlRMSUIpICQoU1NMX0NGTEFHUykgJChaTElCX0NGTEFHUykgJChDRkxBR1NMSUIpICAkKFNTSDJfQ0ZMQUdTKQorI0NGR1NFVCAgID0gVFJVRQorIyFFTkRJRgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPbmx5IHRoZSBjbGVhbiB0YXJnZXQgY2FuIGJlIHVzZWQgaWYgYSBjb25maWcgd2FzIG5vdCBwcm92aWRlZC4KKyMKKyFJRiAiJChDRkdTRVQpIiA9PSAiRkFMU0UiCitjbGVhbjoKKwlALWVyYXNlIC9zICouZGxsIDI+IE5VTAorCUAtZXJhc2UgL3MgKi5leHAgMj4gTlVMCisJQC1lcmFzZSAvcyAqLmlkYiAyPiBOVUwKKwlALWVyYXNlIC9zICoubGliIDI+IE5VTAorCUAtZXJhc2UgL3MgKi5vYmogMj4gTlVMCisJQC1lcmFzZSAvcyAqLnBjaCAyPiBOVUwKKwlALWVyYXNlIC9zICoucGRiIDI+IE5VTAorCUAtZXJhc2UgL3MgKi5yZXMgMj4gTlVMCishRUxTRQorIyBBIG1vZGUgd2FzIHByb3ZpZGVkLCBzbyB0aGUgbGlicmFyeSBjYW4gYmUgYnVpbHQuCisjCishaW5jbHVkZSBDVVJMX09CSlMuaW5jCishaW5jbHVkZSBMSUJDVVJMX09CSlMuaW5jCisKK0xJQl9PQkpTPSAkKExJQkNVUkxfT0JKUykKK0VYRV9PQkpTPSAkKENVUkxfT0JKUykKKworYWxsIDogJChUQVJHRVQpICQoUFJPR1JBTV9OQU1FKQorCitwYWNrYWdlOiAkKFRBUkdFVCkKKwlAY2QgJChESVJESVNUKQorCUAtJChaSVApIC05IC1xIC1yIC4uXCQoQ09ORklHX05BTUVfTElCKS56aXAgLj5udWwgMjwmMQorCUBjZCAkKE1BS0VESVIpCisKKyQoVEFSR0VUKTogJChMSUJfT0JKUykgJChMSUJfRElST0JKKSAkKERJU1RESVIpCisJQGVjaG8gVXNpbmcgU1NMOiAkKFVTRV9TU0wpCisJQGVjaG8gVXNpbmcgU1NIMjogJChVU0VfU1NIMikKKwlAZWNobyBVc2luZyBaTElCOiAkKFVTRV9aTElCKQorCUBlY2hvIFVzaW5nIFNTUEk6ICQoVVNFX1NTUEkpCisJQGVjaG8gVXNpbmcgU1NQSTogJChMRkxBR1MpCisJQGVjaG8gR2VuIFBEQjogICAgJChHRU5fUERCKQorCUBlY2hvIERlYnVnOiAgICAgICQoREVCVUcpCisJJChMTkspICQoTEZMQUdTKSAkKExJQl9PQkpTKQorCUBlY2hvIENvcHlpbmcgbGlicy4uLgorCUBpZiBleGlzdCAkKExJQl9ESVJPQkopXCQoTElCX05BTUVfRExMKSBjb3B5ICQoTElCX0RJUk9CSilcJChMSUJfTkFNRV9ETEwpICAgICAgICQoRElSRElTVClcYmluXCAveSA+bnVsIDI8JjEKKwlAaWYgZXhpc3QgJChMSUJfRElST0JKKVwkKExJQl9OQU1FX1NUQVRJQykgY29weSAkKExJQl9ESVJPQkopXCQoTElCX05BTUVfU1RBVElDKSAgICAkKERJUkRJU1QpXGxpYlwgL3kgPm51bCAyPCYxCisJQGlmIGV4aXN0ICQoTElCX0RJUk9CSilcJChMSUJfTkFNRV9ETExfREVCVUcpIGNvcHkgJChMSUJfRElST0JKKVwkKExJQl9OQU1FX0RMTF9ERUJVRykgJChESVJESVNUKVxiaW5cIC95ID5udWwgMjwmMQorCUBpZiBleGlzdCAkKExJQl9ESVJPQkopXCQoTElCX05BTUVfU1RBVElDX0RFQlVHKSBjb3B5ICQoTElCX0RJUk9CSilcJChMSUJfTkFNRV9TVEFUSUNfREVCVUcpICQoRElSRElTVClcbGliXCAveSA+bnVsIDI8JjEKKwlAaWYgZXhpc3QgJChMSUJfRElST0JKKVwkKExJQl9OQU1FX0lNUCkgY29weSAkKExJQl9ESVJPQkopXCQoTElCX05BTUVfSU1QKSAgICAgICAkKERJUkRJU1QpXGxpYlwgL3kgPm51bCAyPCYxCisJQGlmIGV4aXN0ICQoTElCX0RJUk9CSilcJChMSUJfTkFNRV9JTVBfREVCVUcpIGNvcHkgJChMSUJfRElST0JKKVwkKExJQl9OQU1FX0lNUF9ERUJVRykgJChESVJESVNUKVxsaWIgPm51bCAyPCYxCisJQC1jb3B5ICQoTElCX0RJUk9CSilcKi5leHAgICAgICAgICAgICAgICAgICQoRElSRElTVClcbGliIC95ID5udWwgMjwmMQorCUAtY29weSAkKExJQl9ESVJPQkopXCoucGRiICAgICAgICAgICAgICAgICAkKERJUkRJU1QpXGxpYiAveSA+bnVsIDI8JjEKKwlALWNvcHkgLi5caW5jbHVkZVxjdXJsXCouaCAgICQoRElSRElTVClcaW5jbHVkZVxjdXJsXCAveSAgPm51bCAyPCYxCisKKyQoTElCX09CSlMpOiAkKExJQl9ESVJPQkopICQoRElSRElTVCkKKworJChESVJESVNUKToKKwlAaWYgbm90IGV4aXN0ICIkKERJUkRJU1QpXGJpbiIgbWtkaXIgJChESVJESVNUKVxiaW4KKwlAaWYgbm90IGV4aXN0ICIkKERJUkRJU1QpXGluY2x1ZGUiIG1rZGlyICQoRElSRElTVClcaW5jbHVkZQorCUBpZiBub3QgZXhpc3QgIiQoRElSRElTVClcaW5jbHVkZVxjdXJsIiBta2RpciAkKERJUkRJU1QpXGluY2x1ZGVcY3VybAorCUBpZiBub3QgZXhpc3QgIiQoRElSRElTVClcbGliIiBta2RpciAkKERJUkRJU1QpXGxpYgorCiskKExJQl9ESVJPQkopOgorCUBpZiBub3QgZXhpc3QgIiQoTElCX0RJUk9CSikiIG1rZGlyICQoTElCX0RJUk9CSikKKworJChDVVJMX0RJUk9CSik6CisJQGlmIG5vdCBleGlzdCAiJChDVVJMX0RJUk9CSikiIG1rZGlyICQoQ1VSTF9ESVJPQkopCisjIHdlIG5lZWQgYSBsaWIgZGlyIGZvciB0aGUgcG9ydGFiaWxpdHkgZnVuY3Rpb25zIGZyb20gbGliY3VybAorIyB3ZSB1c2UgdGhlIC5jIGRpcmVjdGx5IGhlcmUKKwlAaWYgbm90IGV4aXN0ICIkKENVUkxfRElST0JKKSIgbWtkaXIgJChDVVJMX0RJUk9CSilcbGliCisKKy5TVUZGSVhFUzogLmMgLm9iaiAucmVzCisKK3skKExJQkNVUkxfU1JDX0RJUilcfS5jeyQoTElCX0RJUk9CSilcfS5vYmo6CisJJChDQykgJChDRkxBR1MpIC9GbyIkQCIgICQ8CisKKyQoTElCX0RJUk9CSilcbGliY3VybC5yZXM6ICQoTElCQ1VSTF9TUkNfRElSKVxsaWJjdXJsLnJjCisJcmMgJChSQ19GTEFHUykKKworIworIyBjdXJsLmV4ZQorIworCisKKyFJRiAiJChNT0RFKSI9PSJzdGF0aWMiCishSUYgIiQoREVCVUcpIj09InllcyIKK0NVUkxfTElCQ1VSTF9MSUJOQU1FPSQoTElCX05BTUVfU1RBVElDX0RFQlVHKQorIUVMU0UKK0NVUkxfTElCQ1VSTF9MSUJOQU1FPSQoTElCX05BTUVfU1RBVElDKQorIUVORElGCishRUxTRUlGICIkKE1PREUpIj09ImRsbCIKKyFJRiAiJChERUJVRykiPT0ieWVzIgorQ1VSTF9MSUJDVVJMX0xJQk5BTUU9JChMSUJfTkFNRV9JTVBfREVCVUcpCishRUxTRQorQ1VSTF9MSUJDVVJMX0xJQk5BTUU9JChMSUJfTkFNRV9JTVApCishRU5ESUYKKyFFTkRJRgorCitDVVJMX0ZST01fTElCQ1VSTD0kKENVUkxfRElST0JKKVxodWdlaGVscC5vYmogXAorICQoQ1VSTF9ESVJPQkopXG5vbmJsb2NrLm9iaiBcCisgJChDVVJMX0RJUk9CSilccmF3c3RyLm9iaiBcCisgJChDVVJMX0RJUk9CSilcc3RydG9vZmZ0Lm9iagorIAorJChQUk9HUkFNX05BTUUpOiAkKENVUkxfRElST0JKKSAkKENVUkxfRlJPTV9MSUJDVVJMKSAkKEVYRV9PQkpTKQorCSQoQ1VSTF9MSU5LKSAkKENVUkxfTEZMQUdTKSAkKENVUkxfTElCQ1VSTF9MSUJOQU1FKSAkKFdJTl9MSUJTKSAkKENVUkxfRlJPTV9MSUJDVVJMKSAkKEVYRV9PQkpTKQorCSQoTUFOSUZFU1RUT09MKQorCit7JChDVVJMX1NSQ19ESVIpXH0uY3skKENVUkxfRElST0JKKVx9Lm9iajoKKwkkKENDKSAkKENVUkxfQ0ZMQUdTKSAvRm8iJEAiICAkPAorCiskKENVUkxfRElST0JKKVxodWdlaGVscC5vYmo6ICQoQ1VSTF9TUkNfRElSKVxodWdlaGVscC5jCisJJChDVVJMX0NDKSAkKENVUkxfQ0ZMQUdTKSAvWm0yMDAgL0ZvIiRAIiAkKENVUkxfU1JDX0RJUilcaHVnZWhlbHAuYworJChDVVJMX0RJUk9CSilcbm9uYmxvY2sub2JqOiAuLi9saWIvbm9uYmxvY2suYworCSQoQ1VSTF9DQykgJChDVVJMX0NGTEFHUykgL0ZvIiRAIiAuLi9saWIvbm9uYmxvY2suYworJChDVVJMX0RJUk9CSilccmF3c3RyLm9iajogLi4vbGliL3Jhd3N0ci5jCisJJChDVVJMX0NDKSAkKENVUkxfQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9yYXdzdHIuYworJChDVVJMX0RJUk9CSilcc3RydG9vZmZ0Lm9iajogLi4vbGliL3N0cnRvb2ZmdC5jCisJJChDVVJMX0NDKSAkKENVUkxfQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9zdHJ0b29mZnQuYworJChDVVJMX0RJUk9CSilcY3VybC5yZXM6ICQoQ1VSTF9TUkNfRElSKVxjdXJsLnJjCisJcmMgJChDVVJMX1JDX0ZMQUdTKQorCishRU5ESUYgICMgRW5kIG9mIGNhc2Ugd2hlcmUgYSBjb25maWcgd2FzIHByb3ZpZGVkLgpkaWZmIC0tZ2l0IGEvY3VybC03LjI1LjAvd2luYnVpbGQvZ2VuX3Jlc3BfZmlsZS5iYXQgYi9jdXJsLTcuMjUuMC93aW5idWlsZC9nZW5fcmVzcF9maWxlLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmZhNjY3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VybC03LjI1LjAvd2luYnVpbGQvZ2VuX3Jlc3BfZmlsZS5iYXQKQEAgLTAsMCArMSw2IEBACitAZWNobyBPRkYNCitAZGVsICVPVVRGSUxFJQ0KK0BlY2hvICVNQUNST19OQU1FJSA9IFw+ICVPVVRGSUxFJQ0KK0Bmb3IgJSVpIGluICglKikgZG8gQGVjaG8JCSVMSUJDVVJMX0RJUk9CSiUvJSVpIFw+PiAgJU9VVEZJTEUlDQorQGVjaG8uID4+ICAlT1VURklMRSUNCis6RU5EDQpkaWZmIC0tZ2l0IGEvY3VybC5wYXRjaGVzL2N1cmwtMDAuZGVzY3JpcHRpb24gYi9jdXJsLnBhdGNoZXMvY3VybC0wMC5kZXNjcmlwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWQxMjUwCi0tLSAvZGV2L251bGwKKysrIGIvY3VybC5wYXRjaGVzL2N1cmwtMDAuZGVzY3JpcHRpb24KQEAgLTAsMCArMSw2IEBACitUaGlzIHBhdGNoIGFsbG93cyBjdXJsIHRvIGJlIGNvbXBpbGVkIHdpdGggY2xhbmcuICBUaGlzIGlzIGEga25vd24gcHJvYmxlbSB3aXRoCit0aGUgdmVyc2lvbiBvZiBjdXJsIHdlJ3JlIHVzaW5nIGFuZCB3YXMgZml4ZWQgd2l0aCBjb21taXQgMzU4YzVjMDc0NWE0YzQ3ZjkxMDE4OTA5NWYzODMyMTYzYjQ3MDhjNC4KK0FjY29yZGluZyB0byB0YWdzIG1hZGUgb24gdGhlIGN1cmwgcmVwbywgdGhlIGZpcnN0IGJ1aWxkIHRvIGluY2x1ZGUgdGhpcyBjb21taXQgd2FzIGN1cmwtN18zMF8wLgorCitPcmlnaW5hbCBidWcgdHJhY2tlZCBoZXJlOgoraHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL2N1cmwvYnVncy8xMTkyLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2N1cmwucGF0Y2hlcy9jdXJsLTAwLnBhdGNoIGIvY3VybC5wYXRjaGVzL2N1cmwtMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkMmYyOQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwucGF0Y2hlcy9jdXJsLTAwLnBhdGNoCkBAIC0wLDAgKzEsMjk1IEBACitkaWZmIC1hcnVOIGN1cmwtNy4yNS4wL2NvbmZpZ3VyZS5hYyBjdXJsLTcuMjUuMC5OL2NvbmZpZ3VyZS5hYworLS0tIGN1cmwtNy4yNS4wL2NvbmZpZ3VyZS5hYwkyMDEyLTAzLTA4IDExOjM1OjIzLjAwMDAwMDAwMCAtMDgwMAorKysrIGN1cmwtNy4yNS4wLk4vY29uZmlndXJlLmFjCTIwMTQtMTAtMDUgMTU6MjU6MDUuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjc3Niw3ICsyNzc2LDYgQEAKKyBDVVJMX0NIRUNLX0ZVTkNfU1RSRFVQCisgQ1VSTF9DSEVDS19GVU5DX1NUUkVSUk9SX1IKKyBDVVJMX0NIRUNLX0ZVTkNfU1RSSUNNUAorLUNVUkxfQ0hFQ0tfRlVOQ19TVFJMQ0FUCisgQ1VSTF9DSEVDS19GVU5DX1NUUk5DQVNFQ01QCisgQ1VSTF9DSEVDS19GVU5DX1NUUk5DTVBJCisgQ1VSTF9DSEVDS19GVU5DX1NUUk5JQ01QCitkaWZmIC1hcnVOIGN1cmwtNy4yNS4wL2xpYi9jb25maWctZG9zLmggY3VybC03LjI1LjAuTi9saWIvY29uZmlnLWRvcy5oCistLS0gY3VybC03LjI1LjAvbGliL2NvbmZpZy1kb3MuaAkyMDEyLTAzLTA4IDExOjM1OjI0LjAwMDAwMDAwMCAtMDgwMAorKysrIGN1cmwtNy4yNS4wLk4vbGliL2NvbmZpZy1kb3MuaAkyMDE0LTEwLTA1IDE1OjI1OjA1LjAwMDAwMDAwMCAtMDcwMAorQEAgLTE2NCwxMCArMTY0LDYgQEAKKyAgICNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKKyAgICNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1NfR0NDIDEKKyAKKy0gICNpZiAoREpHUFBfTUlOT1IgPj0gNCkKKy0gICAgI2RlZmluZSBIQVZFX1NUUkxDQVQgIDEKKy0gICNlbmRpZgorLQorICAgLyogQmVjYXVzZSBkamdwcCA8PSAyLjAzIGRvZXNuJ3QgaGF2ZSBzbnByaW50ZigpIGV0Yy4gKi8KKyAgICNpZiAoREpHUFBfTUlOT1IgPCA0KQorICAgICAjZGVmaW5lIF9NUFJJTlRGX1JFUExBQ0UKK2RpZmYgLWFydU4gY3VybC03LjI1LjAvbGliL2NvbmZpZy1vczQwMC5oIGN1cmwtNy4yNS4wLk4vbGliL2NvbmZpZy1vczQwMC5oCistLS0gY3VybC03LjI1LjAvbGliL2NvbmZpZy1vczQwMC5oCTIwMTItMDMtMDggMTE6MzU6MjQuMDAwMDAwMDAwIC0wODAwCisrKysgY3VybC03LjI1LjAuTi9saWIvY29uZmlnLW9zNDAwLmgJMjAxNC0xMC0wNSAxNToyNTowNS4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yOTUsOSArMjk1LDYgQEAKKyAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisgI2RlZmluZSBIQVZFX1NUUklOR19ICisgCistLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNhdCcgZnVuY3Rpb24uICovCistI3VuZGVmIEhBVkVfU1RSTENBVAorLQorIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjcHknIGZ1bmN0aW9uLiAqLworICN1bmRlZiBIQVZFX1NUUkxDUFkKKyAKK2RpZmYgLWFydU4gY3VybC03LjI1LjAvbGliL2NvbmZpZy1yaXNjb3MuaCBjdXJsLTcuMjUuMC5OL2xpYi9jb25maWctcmlzY29zLmgKKy0tLSBjdXJsLTcuMjUuMC9saWIvY29uZmlnLXJpc2Nvcy5oCTIwMTItMDMtMDggMTE6MzU6MjQuMDAwMDAwMDAwIC0wODAwCisrKysgY3VybC03LjI1LjAuTi9saWIvY29uZmlnLXJpc2Nvcy5oCTIwMTQtMTAtMDUgMTU6MjU6MDUuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjkzLDkgKzI5Myw2IEBACisgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworICNkZWZpbmUgSEFWRV9TVFJJTkdfSAorIAorLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjYXQnIGZ1bmN0aW9uLiAqLworLSN1bmRlZiBIQVZFX1NUUkxDQVQKKy0KKyAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBzdHJsY3B5JyBmdW5jdGlvbi4gKi8KKyAjdW5kZWYgSEFWRV9TVFJMQ1BZCisgCitkaWZmIC1hcnVOIGN1cmwtNy4yNS4wL2xpYi9jb25maWctc3ltYmlhbi5oIGN1cmwtNy4yNS4wLk4vbGliL2NvbmZpZy1zeW1iaWFuLmgKKy0tLSBjdXJsLTcuMjUuMC9saWIvY29uZmlnLXN5bWJpYW4uaAkyMDExLTExLTA0IDE1OjMyOjU1LjAwMDAwMDAwMCAtMDcwMAorKysrIGN1cmwtNy4yNS4wLk4vbGliL2NvbmZpZy1zeW1iaWFuLmgJMjAxNC0xMC0wNSAxNToyNTowNS4wMDAwMDAwMDAgLTA3MDAKK0BAIC01MzIsOSArNTMyLDYgQEAKKyAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyAjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorIAorLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNhdCcgZnVuY3Rpb24uICovCistI2RlZmluZSBIQVZFX1NUUkxDQVQgMQorLQorIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNweScgZnVuY3Rpb24uICovCisgI2RlZmluZSBIQVZFX1NUUkxDUFkgMQorIAorZGlmZiAtYXJ1TiBjdXJsLTcuMjUuMC9saWIvY29uZmlnLXRwZi5oIGN1cmwtNy4yNS4wLk4vbGliL2NvbmZpZy10cGYuaAorLS0tIGN1cmwtNy4yNS4wL2xpYi9jb25maWctdHBmLmgJMjAxMS0xMS0wNCAxNTozMjo1NS4wMDAwMDAwMDAgLTA3MDAKKysrKyBjdXJsLTcuMjUuMC5OL2xpYi9jb25maWctdHBmLmgJMjAxNC0xMC0wNSAxNToyNTowNS4wMDAwMDAwMDAgLTA3MDAKK0BAIC00NzcsOSArNDc3LDYgQEAKKyAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyAjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorIAorLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNhdCcgZnVuY3Rpb24uICovCistLyogI3VuZGVmIEhBVkVfU1RSTENBVCAqLworLQorIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNweScgZnVuY3Rpb24uICovCisgLyogI3VuZGVmIEhBVkVfU1RSTENQWSAqLworIAorZGlmZiAtYXJ1TiBjdXJsLTcuMjUuMC9saWIvY29uZmlnLXZ4d29ya3MuaCBjdXJsLTcuMjUuMC5OL2xpYi9jb25maWctdnh3b3Jrcy5oCistLS0gY3VybC03LjI1LjAvbGliL2NvbmZpZy12eHdvcmtzLmgJMjAxMS0xMS0wNCAxNTozMjo1NS4wMDAwMDAwMDAgLTA3MDAKKysrKyBjdXJsLTcuMjUuMC5OL2xpYi9jb25maWctdnh3b3Jrcy5oCTIwMTQtMTAtMDUgMTU6MjU6MDUuMDAwMDAwMDAwIC0wNzAwCitAQCAtNjA0LDkgKzYwNCw2IEBACisgLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisgI2RlZmluZSBIQVZFX1NUUklOR19IIDEKKyAKKy0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybGNhdCBmdW5jdGlvbi4gKi8KKy0vKiAjdW5kZWYgSEFWRV9TVFJMQ0FUICovCistCisgLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJsY3B5JyBmdW5jdGlvbi4gKi8KKyAvKiAjdW5kZWYgSEFWRV9TVFJMQ1BZICovCisgCitkaWZmIC1hcnVOIGN1cmwtNy4yNS4wL2xpYi9pZjJpcC5jIGN1cmwtNy4yNS4wLk4vbGliL2lmMmlwLmMKKy0tLSBjdXJsLTcuMjUuMC9saWIvaWYyaXAuYwkyMDEyLTAzLTA4IDExOjM1OjI0LjAwMDAwMDAwMCAtMDgwMAorKysrIGN1cmwtNy4yNS4wLk4vbGliL2lmMmlwLmMJMjAxNC0xMC0wNSAxNToyNTowNS4wMDAwMDAwMDAgLTA3MDAKK0BAIC0xMDEsNiArMTAxLDcgQEAKKyAgICAgICAgICBjdXJsX3N0cmVxdWFsKGlmYWNlLT5pZmFfbmFtZSwgaW50ZXJmKSkgeworICAgICAgICAgdm9pZCAqYWRkcjsKKyAgICAgICAgIGNoYXIgc2NvcGVbMTJdPSIiOworKyAgICAgICAgY2hhciBpcHN0cls2NF07CisgI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgICAgICBpZihhZiA9PSBBRl9JTkVUNikgeworICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2NvcGVpZCA9IDA7CitAQCAtMTE1LDggKzExNiw5IEBACisgICAgICAgICBlbHNlCisgI2VuZGlmCisgICAgICAgICAgIGFkZHIgPSAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilpZmFjZS0+aWZhX2FkZHIpLT5zaW5fYWRkcjsKKy0gICAgICAgIGlwID0gKGNoYXIgKikgQ3VybF9pbmV0X250b3AoYWYsIGFkZHIsIGJ1ZiwgYnVmX3NpemUpOworLSAgICAgICAgc3RybGNhdChidWYsIHNjb3BlLCBidWZfc2l6ZSk7CisrICAgICAgICBpcCA9IChjaGFyICopIEN1cmxfaW5ldF9udG9wKGFmLCBhZGRyLCBpcHN0ciwgc2l6ZW9mKGlwc3RyKSk7CisrICAgICAgICBzbnByaW50ZihidWYsIGJ1Zl9zaXplLCAiJXMlcyIsIGlwLCBzY29wZSk7CisrICAgICAgICBpcCA9IGJ1ZjsKKyAgICAgICAgIGJyZWFrOworICAgICAgIH0KKyAgICAgfQorZGlmZiAtYXJ1TiBjdXJsLTcuMjUuMC9saWIvc29ja3MuYyBjdXJsLTcuMjUuMC5OL2xpYi9zb2Nrcy5jCistLS0gY3VybC03LjI1LjAvbGliL3NvY2tzLmMJMjAxMi0wMy0wOCAxMTozNToyNS4wMDAwMDAwMDAgLTA4MDAKKysrKyBjdXJsLTcuMjUuMC5OL2xpYi9zb2Nrcy5jCTIwMTQtMTAtMDUgMTU6MjU6MDUuMDAwMDAwMDAwIC0wNzAwCitAQCAtMTk5LDggKzE5OSwxNSBAQAorICAgICogVGhpcyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRpbmcgIklkZW50aWZpY2F0aW9uIFByb3RvY29sIChSRkMxNDEzKSIuCisgICAgKi8KKyAgIHNvY2tzcmVxWzhdID0gMDsgLyogZW5zdXJlIGVtcHR5IHVzZXJpZCBpcyBOVUwtdGVybWluYXRlZCAqLworLSAgaWYocHJveHlfbmFtZSkKKy0gICAgc3RybGNhdCgoY2hhciopc29ja3NyZXEgKyA4LCBwcm94eV9uYW1lLCBzaXplb2Yoc29ja3NyZXEpIC0gOCk7CisrICBpZihwcm94eV9uYW1lKSB7CisrICAgIHNpemVfdCBwbGVuID0gc3RybGVuKHByb3h5X25hbWUpOworKyAgICBpZihwbGVuID49IHNpemVvZihzb2Nrc3JlcSkgLSA4KSB7CisrICAgICAgZmFpbGYoZGF0YSwgIlRvbyBsb25nIFNPQ0tTIHByb3h5IG5hbWUsIGNhbid0IHVzZSFcbiIpOworKyAgICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisrICAgIH0KKysgICAgLyogY29weSB0aGUgcHJveHkgbmFtZSBXSVRIIHRyYWlsaW5nIHplcm8gKi8KKysgICAgbWVtY3B5KHNvY2tzcmVxICsgOCwgcHJveHlfbmFtZSwgcGxlbisxKTsKKysgIH0KKyAKKyAgIC8qCisgICAgKiBNYWtlIGNvbm5lY3Rpb24KK2RpZmYgLWFydU4gY3VybC03LjI1LjAvbGliL3N0cmVxdWFsLmMgY3VybC03LjI1LjAuTi9saWIvc3RyZXF1YWwuYworLS0tIGN1cmwtNy4yNS4wL2xpYi9zdHJlcXVhbC5jCTIwMTItMDMtMDggMTE6MzU6MjUuMDAwMDAwMDAwIC0wODAwCisrKysgY3VybC03LjI1LjAuTi9saWIvc3RyZXF1YWwuYwkyMDE0LTEwLTA1IDE1OjI1OjA1LjAwMDAwMDAwMCAtMDcwMAorQEAgLTc3LDQ4ICs3NywzIEBACisgICByZXR1cm4gdG91cHBlcigqZmlyc3QpID09IHRvdXBwZXIoKnNlY29uZCk7CisgI2VuZGlmCisgfQorLQorLSNpZm5kZWYgSEFWRV9TVFJMQ0FUCistLyoKKy0gKiBUaGUgc3RybGNhdCgpIGZ1bmN0aW9uIGFwcGVuZHMgdGhlIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBzcmMgdG8gdGhlIGVuZAorLSAqIG9mIGRzdC4gSXQgd2lsbCBhcHBlbmQgYXQgbW9zdCBzaXplIC0gc3RybGVuKGRzdCkgLSAxIGJ5dGVzLCBOVUwtdGVybWktCistICogbmF0aW5nIHRoZSByZXN1bHQuCistICoKKy0gKiBUaGUgc3RybGNweSgpIGFuZCBzdHJsY2F0KCkgZnVuY3Rpb25zIHJldHVybiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZQorLSAqIHN0cmluZyB0aGV5IHRyaWVkIHRvIGNyZWF0ZS4gIEZvciBzdHJsY3B5KCkgdGhhdCBtZWFucyB0aGUgbGVuZ3RoIG9mIHNyYy4KKy0gKiBGb3Igc3RybGNhdCgpIHRoYXQgbWVhbnMgdGhlIGluaXRpYWwgbGVuZ3RoIG9mIGRzdCBwbHVzIHRoZSBsZW5ndGggb2YKKy0gKiBzcmMuIFdoaWxlIHRoaXMgbWF5IHNlZW0gc29tZXdoYXQgY29uZnVzaW5nIGl0IHdhcyBkb25lIHRvIG1ha2UgdHJ1bmNhLQorLSAqIHRpb24gZGV0ZWN0aW9uIHNpbXBsZS4KKy0gKgorLSAqCistICovCistc2l6ZV90IEN1cmxfc3RybGNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpeikKKy17CistICBjaGFyICpkID0gZHN0OworLSAgY29uc3QgY2hhciAqcyA9IHNyYzsKKy0gIHNpemVfdCBuID0gc2l6OworLSAgdW5pb24geworLSAgICBzc2l6ZV90IHNpZzsKKy0gICAgIHNpemVfdCB1bnM7CistICB9IGRsZW47CistCistICAvKiBGaW5kIHRoZSBlbmQgb2YgZHN0IGFuZCBhZGp1c3QgYnl0ZXMgbGVmdCBidXQgZG9uJ3QgZ28gcGFzdCBlbmQgKi8KKy0gIHdoaWxlKG4tLSAhPSAwICYmICpkICE9ICdcMCcpCistICAgIGQrKzsKKy0gIGRsZW4uc2lnID0gZCAtIGRzdDsKKy0gIG4gPSBzaXogLSBkbGVuLnVuczsKKy0KKy0gIGlmKG4gPT0gMCkKKy0gICAgcmV0dXJuKGRsZW4udW5zICsgc3RybGVuKHMpKTsKKy0gIHdoaWxlKCpzICE9ICdcMCcpIHsKKy0gICAgaWYobiAhPSAxKSB7CistICAgICAgKmQrKyA9ICpzOworLSAgICAgIG4tLTsKKy0gICAgfQorLSAgICBzKys7CistICB9CistICAqZCA9ICdcMCc7CistCistICByZXR1cm4oZGxlbi51bnMgKyAocyAtIHNyYykpOyAgICAgLyogY291bnQgZG9lcyBub3QgaW5jbHVkZSBOVUwgKi8KKy19CistI2VuZGlmCitkaWZmIC1hcnVOIGN1cmwtNy4yNS4wL2xpYi9zdHJlcXVhbC5oIGN1cmwtNy4yNS4wLk4vbGliL3N0cmVxdWFsLmgKKy0tLSBjdXJsLTcuMjUuMC9saWIvc3RyZXF1YWwuaAkyMDExLTAzLTE5IDA4OjE2OjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGN1cmwtNy4yNS4wLk4vbGliL3N0cmVxdWFsLmgJMjAxNC0xMC0wNSAxNToyNTowNS4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yNyw5ICsyNyw0IEBACisgI2RlZmluZSBzdHJlcXVhbChhLGIpIGN1cmxfc3RyZXF1YWwoYSxiKQorICNkZWZpbmUgc3RybmVxdWFsKGEsYixjKSBjdXJsX3N0cm5lcXVhbChhLGIsYykKKyAKKy0jaWZuZGVmIEhBVkVfU1RSTENBVAorLSNkZWZpbmUgc3RybGNhdCh4LHkseikgQ3VybF9zdHJsY2F0KHgseSx6KQorLSNlbmRpZgorLXNpemVfdCBzdHJsY2F0KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc2l6KTsKKy0KKyAjZW5kaWYKK2RpZmYgLWFydU4gY3VybC03LjI1LjAvbTQvY3VybC1mdW5jdGlvbnMubTQgY3VybC03LjI1LjAuTi9tNC9jdXJsLWZ1bmN0aW9ucy5tNAorLS0tIGN1cmwtNy4yNS4wL200L2N1cmwtZnVuY3Rpb25zLm00CTIwMTItMDMtMjEgMTY6MTI6MzYuMDAwMDAwMDAwIC0wNzAwCisrKysgY3VybC03LjI1LjAuTi9tNC9jdXJsLWZ1bmN0aW9ucy5tNAkyMDE0LTEwLTA1IDE1OjI1OjA1LjAwMDAwMDAwMCAtMDcwMAorQEAgLTY0MTgsOTIgKzY0MTgsNiBAQAorICAgZmkKKyBdKQorIAorLQorLWRubCBDVVJMX0NIRUNLX0ZVTkNfU1RSTENBVAorLWRubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZG5sIFZlcmlmeSBpZiBzdHJsY2F0IGlzIGF2YWlsYWJsZSwgcHJvdG90eXBlZCwgYW5kCistZG5sIGNhbiBiZSBjb21waWxlZC4gSWYgYWxsIG9mIHRoZXNlIGFyZSB0cnVlLCBhbmQKKy1kbmwgdXNhZ2UgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGlzYWxsb3dlZCB3aXRoCistZG5sIHNoZWxsIHZhcmlhYmxlIGN1cmxfZGlzYWxsb3dfc3RybGNhdCwgdGhlbgorLWRubCBIQVZFX1NUUkxDQVQgd2lsbCBiZSBkZWZpbmVkLgorLQorLUFDX0RFRlVOKFtDVVJMX0NIRUNLX0ZVTkNfU1RSTENBVF0sIFsKKy0gIEFDX1JFUVVJUkUoW0NVUkxfSU5DTFVERVNfU1RSSU5HXSlkbmwKKy0gICMKKy0gIHRzdF9saW5rc19zdHJsY2F0PSJ1bmtub3duIgorLSAgdHN0X3Byb3RvX3N0cmxjYXQ9InVua25vd24iCistICB0c3RfY29tcGlfc3RybGNhdD0idW5rbm93biIKKy0gIHRzdF9hbGxvd19zdHJsY2F0PSJ1bmtub3duIgorLSAgIworLSAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJsY2F0IGNhbiBiZSBsaW5rZWRdKQorLSAgQUNfTElOS19JRkVMU0UoWworLSAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW3N0cmxjYXRdKQorLSAgXSxbCistICAgIEFDX01TR19SRVNVTFQoW3llc10pCistICAgIHRzdF9saW5rc19zdHJsY2F0PSJ5ZXMiCistICBdLFsKKy0gICAgQUNfTVNHX1JFU1VMVChbbm9dKQorLSAgICB0c3RfbGlua3Nfc3RybGNhdD0ibm8iCistICBdKQorLSAgIworLSAgaWYgdGVzdCAiJHRzdF9saW5rc19zdHJsY2F0IiA9ICJ5ZXMiOyB0aGVuCistICAgIEFDX01TR19DSEVDS0lORyhbaWYgc3RybGNhdCBpcyBwcm90b3R5cGVkXSkKKy0gICAgQUNfRUdSRVBfQ1BQKFtzdHJsY2F0XSxbCistICAgICAgJGN1cmxfaW5jbHVkZXNfc3RyaW5nCistICAgIF0sWworLSAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCistICAgICAgdHN0X3Byb3RvX3N0cmxjYXQ9InllcyIKKy0gICAgXSxbCistICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorLSAgICAgIHRzdF9wcm90b19zdHJsY2F0PSJubyIKKy0gICAgXSkKKy0gIGZpCistICAjCistICBpZiB0ZXN0ICIkdHN0X3Byb3RvX3N0cmxjYXQiID0gInllcyI7IHRoZW4KKy0gICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBzdHJsY2F0IGlzIGNvbXBpbGFibGVdKQorLSAgICBBQ19DT01QSUxFX0lGRUxTRShbCistICAgICAgQUNfTEFOR19QUk9HUkFNKFtbCistICAgICAgICAkY3VybF9pbmNsdWRlc19zdHJpbmcKKy0gICAgICBdXSxbWworLSAgICAgICAgaWYoMCAhPSBzdHJsY2F0KDAsIDAsIDApKQorLSAgICAgICAgICByZXR1cm4gMTsKKy0gICAgICBdXSkKKy0gICAgXSxbCistICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKy0gICAgICB0c3RfY29tcGlfc3RybGNhdD0ieWVzIgorLSAgICBdLFsKKy0gICAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICAgICAgdHN0X2NvbXBpX3N0cmxjYXQ9Im5vIgorLSAgICBdKQorLSAgZmkKKy0gICMKKy0gIGlmIHRlc3QgIiR0c3RfY29tcGlfc3RybGNhdCIgPSAieWVzIjsgdGhlbgorLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHN0cmxjYXQgdXNhZ2UgYWxsb3dlZF0pCistICAgIGlmIHRlc3QgIngkY3VybF9kaXNhbGxvd19zdHJsY2F0IiAhPSAieHllcyI7IHRoZW4KKy0gICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgICAgIHRzdF9hbGxvd19zdHJsY2F0PSJ5ZXMiCistICAgIGVsc2UKKy0gICAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICAgICAgdHN0X2FsbG93X3N0cmxjYXQ9Im5vIgorLSAgICBmaQorLSAgZmkKKy0gICMKKy0gIEFDX01TR19DSEVDS0lORyhbaWYgc3RybGNhdCBtaWdodCBiZSB1c2VkXSkKKy0gIGlmIHRlc3QgIiR0c3RfbGlua3Nfc3RybGNhdCIgPSAieWVzIiAmJgorLSAgICAgdGVzdCAiJHRzdF9wcm90b19zdHJsY2F0IiA9ICJ5ZXMiICYmCistICAgICB0ZXN0ICIkdHN0X2NvbXBpX3N0cmxjYXQiID0gInllcyIgJiYKKy0gICAgIHRlc3QgIiR0c3RfYWxsb3dfc3RybGNhdCIgPSAieWVzIjsgdGhlbgorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TVFJMQ0FULCAxLAorLSAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgc3RybGNhdCBmdW5jdGlvbi5dKQorLSAgICBhY19jdl9mdW5jX3N0cmxjYXQ9InllcyIKKy0gIGVsc2UKKy0gICAgQUNfTVNHX1JFU1VMVChbbm9dKQorLSAgICBhY19jdl9mdW5jX3N0cmxjYXQ9Im5vIgorLSAgZmkKKy1dKQorLQorLQorIGRubCBDVVJMX0NIRUNLX0ZVTkNfU1RSTkNBU0VDTVAKKyBkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRubCBWZXJpZnkgaWYgc3RybmNhc2VjbXAgaXMgYXZhaWxhYmxlLCBwcm90b3R5cGVkLCBhbmQKZGlmZiAtLWdpdCBhL2N1cmwudGFyLmd6IGIvY3VybC50YXIuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzMjg0MwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwudGFyLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2N1cmwudXJsIGIvY3VybC51cmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjNDAzYwotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwudXJsCkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9jdXJsLmhheHguc2UvZG93bmxvYWQvY3VybC03LjI1LjAudGFyLmd6CmRpZmYgLS1naXQgYS9jdXJsLnZlcnNpb24gYi9jdXJsLnZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMzNGQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2N1cmwudmVyc2lvbgpAQCAtMCwwICsxIEBACis3LjI1LjAK